aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2024-02-02 04:39:16 +0000
committerCy Schubert <cy@FreeBSD.org>2024-02-02 09:48:38 +0000
commit9dd13e84fa8eca8f3462bd55485aa3da8c37f54a (patch)
tree588240aeb9a7363618b8a687c72588bd74948634
parent825caf7e12445fa4818413cc37c8b45bebb6c3a9 (diff)
OpenSSL: Vendor import of OpenSSL 3.0.13vendor/openssl/3.0.13
* Fixed PKCS12 Decoding crashes ([CVE-2024-0727]) * Fixed Excessive time spent checking invalid RSA public keys ([CVE-2023-6237]) * Fixed POLY1305 MAC implementation corrupting vector registers on PowerPC CPUs which support PowerISA 2.07 ([CVE-2023-6129]) * Fix excessive time spent in DH check / generation with large Q parameter value ([CVE-2023-5678]) Release notes can be found at https://www.openssl.org/news/openssl-3.0-notes.html.
-rw-r--r--CHANGES.md88
-rw-r--r--CONTRIBUTING.md56
-rw-r--r--Configurations/00-base-templates.conf141
-rw-r--r--Configurations/10-main.conf1955
-rw-r--r--Configurations/15-android.conf291
-rw-r--r--Configurations/15-ios.conf64
-rw-r--r--Configurations/50-cppbuilder.conf62
-rw-r--r--Configurations/50-djgpp.conf18
-rw-r--r--Configurations/50-haiku.conf35
-rw-r--r--Configurations/50-masm.conf22
-rw-r--r--Configurations/50-nonstop.conf315
-rw-r--r--Configurations/50-os390.conf11
-rw-r--r--Configurations/50-vms-x86_64.conf14
-rw-r--r--Configurations/50-win-onecore.conf138
-rw-r--r--Configurations/INTERNALS.Configure136
-rw-r--r--Configurations/README-design.md604
-rw-r--r--Configurations/README.md667
-rw-r--r--Configurations/common0.tmpl31
-rw-r--r--Configurations/descrip.mms.tmpl1402
-rw-r--r--Configurations/gentemplate.pm556
-rw-r--r--Configurations/platform.pm18
-rw-r--r--Configurations/platform/AIX.pm29
-rw-r--r--Configurations/platform/BASE.pm99
-rw-r--r--Configurations/platform/Cygwin.pm22
-rw-r--r--Configurations/platform/Unix.pm87
-rw-r--r--Configurations/platform/VMS.pm65
-rw-r--r--Configurations/platform/Windows.pm64
-rw-r--r--Configurations/platform/Windows/MSVC.pm44
-rw-r--r--Configurations/platform/Windows/cppbuilder.pm16
-rw-r--r--Configurations/platform/mingw.pm51
-rw-r--r--Configurations/shared-info.pl94
-rw-r--r--Configurations/unix-Makefile.tmpl1996
-rw-r--r--Configurations/unix-checker.pm22
-rw-r--r--Configurations/windows-checker.pm22
-rw-r--r--Configurations/windows-makefile.tmpl1050
-rwxr-xr-xConfigure37
-rw-r--r--FREEBSD-Xlist40
-rw-r--r--FREEBSD-upgrade80
-rw-r--r--NEWS.md16
-rw-r--r--README.md2
-rw-r--r--VERSION.dat4
-rw-r--r--VMS/VMSify-conf.pl41
-rw-r--r--VMS/engine.opt3
-rw-r--r--VMS/msg_install.com19
-rw-r--r--VMS/msg_staging.com37
-rw-r--r--VMS/openssl_ivp.com.in56
-rw-r--r--VMS/openssl_shutdown.com.in57
-rw-r--r--VMS/openssl_startup.com.in125
-rw-r--r--VMS/openssl_utils.com.in14
-rw-r--r--VMS/test-includes.com28
-rw-r--r--VMS/translatesyms.pl62
-rw-r--r--apps/cms.c15
-rw-r--r--apps/demoSRP/srp_verifier.txt6
-rw-r--r--apps/demoSRP/srp_verifier.txt.attr1
-rw-r--r--apps/errstr.c2
-rw-r--r--apps/lib/opt.c7
-rw-r--r--apps/list.c52
-rw-r--r--apps/openssl-vms.cnf390
-rw-r--r--apps/rehash.c40
-rw-r--r--apps/req.c4
-rw-r--r--apps/s_server.c7
-rw-r--r--apps/smime.c3
-rw-r--r--apps/vms_decc_init.c176
-rw-r--r--appveyor.yml82
-rw-r--r--config.com93
-rw-r--r--crypto/LPdir_nyi.c56
-rw-r--r--crypto/LPdir_vms.c207
-rw-r--r--crypto/LPdir_win.c214
-rw-r--r--crypto/LPdir_win32.c41
-rw-r--r--crypto/LPdir_wince.c44
-rw-r--r--crypto/alphacpuid.pl256
-rw-r--r--crypto/asn1/asn_moid.c4
-rw-r--r--crypto/asn1/asn_mstbl.c8
-rw-r--r--crypto/asn1/x_algor.c6
-rw-r--r--crypto/async/arch/async_win.c59
-rw-r--r--crypto/bn/asm/alpha-mont.pl327
-rw-r--r--crypto/bn/bn_exp.c21
-rw-r--r--crypto/bn/bn_gf2m.c8
-rw-r--r--crypto/bn/bn_mod.c10
-rw-r--r--crypto/bn/bn_nist.c126
-rw-r--r--crypto/build.info4
-rw-r--r--crypto/cms/cms_att.c24
-rw-r--r--crypto/cms/cms_dh.c8
-rw-r--r--crypto/cms/cms_rsa.c35
-rw-r--r--crypto/cms/cms_sd.c31
-rw-r--r--crypto/cms/cms_smime.c3
-rw-r--r--crypto/conf/conf_err.c2
-rw-r--r--crypto/dh/dh_check.c12
-rw-r--r--crypto/dh/dh_err.c3
-rw-r--r--crypto/dh/dh_key.c12
-rw-r--r--crypto/dso/dso_vms.c489
-rw-r--r--crypto/dso/dso_win32.c671
-rw-r--r--crypto/ec/ecx_backend.c9
-rw-r--r--crypto/err/openssl.ec81
-rw-r--r--crypto/err/openssl.txt2
-rw-r--r--crypto/evp/e_aes.c16
-rw-r--r--crypto/evp/evp_fetch.c23
-rw-r--r--crypto/http/http_client.c8
-rw-r--r--crypto/http/http_lib.c2
-rw-r--r--crypto/mem_sec.c12
-rw-r--r--crypto/modes/asm/ghash-alpha.pl467
-rw-r--r--crypto/objects/obj_dat.c4
-rw-r--r--crypto/param_build.c8
-rw-r--r--crypto/params_from_text.c10
-rwxr-xr-xcrypto/perlasm/x86_64-xlate.pl7
-rw-r--r--crypto/pkcs12/p12_add.c20
-rw-r--r--crypto/pkcs12/p12_mutl.c7
-rw-r--r--crypto/pkcs12/p12_npas.c7
-rw-r--r--crypto/pkcs7/pk7_attr.c20
-rw-r--r--crypto/pkcs7/pk7_mime.c9
-rwxr-xr-xcrypto/poly1305/asm/poly1305-ppc.pl44
-rw-r--r--crypto/property/property_parse.c50
-rw-r--r--crypto/provider_conf.c104
-rw-r--r--crypto/provider_core.c70
-rw-r--r--crypto/rsa/rsa_lib.c8
-rw-r--r--crypto/rsa/rsa_sp800_56b_check.c10
-rw-r--r--crypto/sha/asm/sha1-alpha.pl329
-rw-r--r--crypto/threads_win.c263
-rw-r--r--crypto/x509/t_req.c8
-rw-r--r--crypto/x509/t_x509.c4
-rw-r--r--crypto/x509/v3_addr.c6
-rw-r--r--crypto/x509/v3_asid.c24
-rw-r--r--crypto/x509/v3_crld.c7
-rw-r--r--crypto/x509/v3_ist.c18
-rw-r--r--crypto/x509/v3_san.c13
-rw-r--r--crypto/x509/v3_sxnet.c20
-rw-r--r--crypto/x509/x509_att.c92
-rw-r--r--crypto/x509/x509_req.c4
-rw-r--r--demos/README.txt50
-rw-r--r--demos/bio/Makefile33
-rw-r--r--demos/bio/README.txt6
-rw-r--r--demos/bio/accept.cnf23
-rw-r--r--demos/bio/client-arg.c108
-rw-r--r--demos/bio/client-conf.c117
-rw-r--r--demos/bio/cmod.cnf27
-rw-r--r--demos/bio/connect.cnf15
-rw-r--r--demos/bio/descrip.mms47
-rw-r--r--demos/bio/intca.pem25
-rw-r--r--demos/bio/root.pem28
-rw-r--r--demos/bio/saccept.c121
-rw-r--r--demos/bio/sconnect.c128
-rw-r--r--demos/bio/server-arg.c144
-rw-r--r--demos/bio/server-cmod.c94
-rw-r--r--demos/bio/server-conf.c139
-rw-r--r--demos/bio/server-ec.pem17
-rw-r--r--demos/bio/server.pem79
-rw-r--r--demos/bio/shared.opt2
-rw-r--r--demos/bio/static.opt2
-rw-r--r--demos/certs/README.txt18
-rw-r--r--demos/certs/apps/apps.cnf66
-rw-r--r--demos/certs/apps/ckey.pem27
-rw-r--r--demos/certs/apps/intkey.pem27
-rw-r--r--demos/certs/apps/mkacerts.sh45
-rw-r--r--demos/certs/apps/mkxcerts.sh29
-rw-r--r--demos/certs/apps/rootkey.pem27
-rw-r--r--demos/certs/apps/skey.pem27
-rw-r--r--demos/certs/apps/skey2.pem27
-rw-r--r--demos/certs/ca.cnf82
-rw-r--r--demos/certs/mkcerts.sh96
-rw-r--r--demos/certs/ocspquery.sh21
-rw-r--r--demos/certs/ocsprun.sh14
-rw-r--r--demos/cipher/Makefile27
-rw-r--r--demos/cipher/aesccm.c238
-rw-r--r--demos/cipher/aesgcm.c228
-rw-r--r--demos/cipher/aeskeywrap.c181
-rw-r--r--demos/cipher/ariacbc.c178
-rw-r--r--demos/cms/cacert.pem29
-rw-r--r--demos/cms/cakey.pem39
-rw-r--r--demos/cms/cms_comp.c64
-rw-r--r--demos/cms/cms_ddec.c88
-rw-r--r--demos/cms/cms_dec.c78
-rw-r--r--demos/cms/cms_denc.c97
-rw-r--r--demos/cms/cms_enc.c92
-rw-r--r--demos/cms/cms_sign.c88
-rw-r--r--demos/cms/cms_sign2.c98
-rw-r--r--demos/cms/cms_uncomp.c58
-rw-r--r--demos/cms/cms_ver.c88
-rw-r--r--demos/cms/comp.txt22
-rw-r--r--demos/cms/encr.txt3
-rw-r--r--demos/cms/sign.txt3
-rw-r--r--demos/cms/signer.pem52
-rw-r--r--demos/cms/signer2.pem52
-rw-r--r--demos/digest/BIO_f_md.c122
-rw-r--r--demos/digest/EVP_MD_demo.c183
-rw-r--r--demos/digest/EVP_MD_stdin.c134
-rw-r--r--demos/digest/EVP_MD_xof.c132
-rw-r--r--demos/digest/Makefile23
-rw-r--r--demos/encode/Makefile20
-rw-r--r--demos/encode/ec_encode.c205
-rw-r--r--demos/encode/rsa_encode.c202
-rw-r--r--demos/kdf/Makefile22
-rw-r--r--demos/kdf/hkdf.c104
-rw-r--r--demos/kdf/pbkdf2.c117
-rw-r--r--demos/kdf/scrypt.c120
-rw-r--r--demos/keyexch/x25519.c278
-rw-r--r--demos/mac/Makefile25
-rw-r--r--demos/mac/cmac-aes256.c154
-rw-r--r--demos/mac/gmac.c145
-rw-r--r--demos/mac/hmac-sha512.c166
-rw-r--r--demos/mac/poly1305.c209
-rw-r--r--demos/mac/siphash.c129
-rw-r--r--demos/pkcs12/pkread.c111
-rw-r--r--demos/pkcs12/pkwrite.c53
-rw-r--r--demos/pkey/EVP_PKEY_DSA_keygen.c83
-rw-r--r--demos/pkey/EVP_PKEY_DSA_paramfromdata.c75
-rw-r--r--demos/pkey/EVP_PKEY_DSA_paramgen.c66
-rw-r--r--demos/pkey/EVP_PKEY_DSA_paramvalidate.c202
-rw-r--r--demos/pkey/EVP_PKEY_EC_keygen.c155
-rw-r--r--demos/pkey/EVP_PKEY_RSA_keygen.c289
-rw-r--r--demos/pkey/Makefile37
-rw-r--r--demos/pkey/dsa.inc172
-rw-r--r--demos/signature/EVP_Signature_demo.c235
-rw-r--r--demos/signature/EVP_Signature_demo.h76
-rw-r--r--demos/signature/Makefile22
-rw-r--r--demos/signature/rsa_pss.h256
-rw-r--r--demos/signature/rsa_pss_direct.c204
-rw-r--r--demos/signature/rsa_pss_hash.c189
-rw-r--r--demos/smime/cacert.pem29
-rw-r--r--demos/smime/cakey.pem39
-rw-r--r--demos/smime/encr.txt3
-rw-r--r--demos/smime/sign.txt3
-rw-r--r--demos/smime/signer.pem52
-rw-r--r--demos/smime/signer2.pem52
-rw-r--r--demos/smime/smdec.c78
-rw-r--r--demos/smime/smenc.c91
-rw-r--r--demos/smime/smsign.c88
-rw-r--r--demos/smime/smsign2.c96
-rw-r--r--demos/smime/smver.c87
-rw-r--r--doc/build.info30
-rw-r--r--doc/images/openssl-square-nontransparent.pngbin0 -> 78086 bytes
-rw-r--r--doc/images/openssl-square.svg49
-rw-r--r--doc/images/openssl.svg88
-rw-r--r--doc/man1/openssl-pkeyutl.pod.in4
-rw-r--r--doc/man1/openssl-req.pod.in2
-rw-r--r--doc/man3/BIO_f_md.pod6
-rw-r--r--doc/man3/BN_add.pod5
-rw-r--r--doc/man3/BN_mod_inverse.pod6
-rw-r--r--doc/man3/CMS_signed_get_attr.pod214
-rw-r--r--doc/man3/EVP_EncryptInit.pod14
-rw-r--r--doc/man3/EVP_MAC.pod12
-rw-r--r--doc/man3/EVP_PKEY_get_attr.pod113
-rw-r--r--doc/man3/OPENSSL_LH_COMPFUNC.pod65
-rw-r--r--doc/man3/OSSL_PARAM_int.pod2
-rw-r--r--doc/man3/PKCS12_create.pod14
-rw-r--r--doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod4
-rw-r--r--doc/man3/SSL_CTX_set_tmp_dh_callback.pod2
-rw-r--r--doc/man3/SSL_get_error.pod6
-rw-r--r--doc/man3/SSL_get_peer_certificate.pod9
-rw-r--r--doc/man3/X509_ATTRIBUTE.pod263
-rw-r--r--doc/man3/X509_REQ_get_attr.pod111
-rw-r--r--doc/man3/X509_REQ_get_extensions.pod50
-rw-r--r--doc/man3/X509_dup.pod15
-rw-r--r--doc/man7/EVP_CIPHER-AES.pod13
-rw-r--r--doc/man7/EVP_KDF-SS.pod6
-rw-r--r--doc/man7/EVP_MAC-BLAKE2.pod9
-rw-r--r--doc/man7/EVP_MAC-CMAC.pod2
-rw-r--r--doc/man7/EVP_MAC-HMAC.pod2
-rw-r--r--doc/man7/EVP_MAC-KMAC.pod14
-rw-r--r--doc/man7/EVP_MD-SHAKE.pod21
-rw-r--r--doc/man7/EVP_PKEY-RSA.pod2
-rw-r--r--doc/man7/EVP_RAND-SEED-SRC.pod3
-rw-r--r--doc/man7/provider-cipher.pod10
-rw-r--r--doc/man7/provider-keymgmt.pod4
-rw-r--r--doc/man7/provider-storemgmt.pod4
-rw-r--r--engines/e_afalg.ec3
-rw-r--r--engines/e_capi.ec3
-rw-r--r--engines/e_dasync.ec3
-rw-r--r--engines/e_loader_attic.ec3
-rw-r--r--engines/e_ossltest.ec3
-rw-r--r--external/perl/Downloaded.txt14
-rw-r--r--external/perl/MODULES.txt1
-rw-r--r--external/perl/Text-Template-1.56/Changes301
-rw-r--r--external/perl/Text-Template-1.56/INSTALL31
-rw-r--r--external/perl/Text-Template-1.56/LICENSE379
-rw-r--r--external/perl/Text-Template-1.56/MANIFEST34
-rw-r--r--external/perl/Text-Template-1.56/META.json83
-rw-r--r--external/perl/Text-Template-1.56/META.yml46
-rw-r--r--external/perl/Text-Template-1.56/Makefile.PL71
-rw-r--r--external/perl/Text-Template-1.56/README62
-rw-r--r--external/perl/Text-Template-1.56/SIGNATURE65
-rw-r--r--external/perl/Text-Template-1.56/lib/Text/Template.pm2363
-rw-r--r--external/perl/Text-Template-1.56/lib/Text/Template/Preprocess.pm157
-rw-r--r--external/perl/Text-Template-1.56/t/author-pod-syntax.t15
-rw-r--r--external/perl/Text-Template-1.56/t/author-signature.t21
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/basic.t179
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/broken.t66
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/delimiters.t83
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/error.t34
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/exported.t68
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/hash.t91
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/inline-comment.t17
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/nested-tags.t26
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/ofh.t33
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/out.t46
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/prepend.t78
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/preprocess.t43
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/rt29928.t26
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/safe.t135
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/safe2.t94
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/safe3.t80
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/strict.t46
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/taint.t112
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/template-encoding.t47
-rwxr-xr-xexternal/perl/Text-Template-1.56/t/warnings.t46
-rw-r--r--fuzz/README.md175
-rw-r--r--fuzz/asn1.c375
-rw-r--r--fuzz/asn1parse.c45
-rw-r--r--fuzz/bignum.c109
-rw-r--r--fuzz/bndiv.c131
-rw-r--r--fuzz/build.info146
-rw-r--r--fuzz/client.c108
-rw-r--r--fuzz/cmp.c203
-rw-r--r--fuzz/cms.c55
-rw-r--r--fuzz/conf.c48
-rw-r--r--fuzz/crl.c47
-rw-r--r--fuzz/ct.c51
-rw-r--r--fuzz/driver.c55
-rw-r--r--fuzz/fuzz_rand.c168
-rw-r--r--fuzz/fuzzer.h16
-rwxr-xr-xfuzz/helper.py52
-rwxr-xr-xfuzz/mkfuzzoids.pl42
-rw-r--r--fuzz/oids.txt1113
-rw-r--r--fuzz/server.c659
-rw-r--r--fuzz/test-corpus.c104
-rw-r--r--fuzz/x509.c153
-rw-r--r--include/crypto/dherr.h2
-rw-r--r--include/crypto/x509.h19
-rw-r--r--include/internal/ffc.h9
-rw-r--r--include/internal/refcount.h4
-rw-r--r--include/openssl/bio.h.in2
-rw-r--r--include/openssl/conferr.h1
-rw-r--r--include/openssl/dh.h6
-rw-r--r--include/openssl/dherr.h3
-rw-r--r--ms/applink.c144
-rwxr-xr-xms/cmp.pl53
-rwxr-xr-xms/uplink-common.pl28
-rwxr-xr-xms/uplink-ia64.pl60
-rwxr-xr-xms/uplink-x86.pl43
-rwxr-xr-xms/uplink-x86_64.pl74
-rw-r--r--ms/uplink.c150
-rw-r--r--ms/uplink.h38
-rw-r--r--os-dep/haiku.h11
-rw-r--r--providers/fips-sources.checksums66
-rw-r--r--providers/fips.checksum2
-rw-r--r--providers/implementations/asymciphers/rsa_enc.c1
-rw-r--r--providers/implementations/ciphers/cipher_aes.h3
-rw-r--r--providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c20
-rw-r--r--providers/implementations/ciphers/cipher_aes_ccm.c22
-rw-r--r--providers/implementations/ciphers/cipher_aes_gcm.c17
-rw-r--r--providers/implementations/ciphers/cipher_aes_hw_s390x.inc12
-rw-r--r--providers/implementations/ciphers/cipher_aes_ocb.c5
-rw-r--r--providers/implementations/ciphers/cipher_aes_wrp.c23
-rw-r--r--providers/implementations/ciphers/cipher_aria_ccm.c17
-rw-r--r--providers/implementations/ciphers/cipher_aria_gcm.c17
-rw-r--r--providers/implementations/ciphers/cipher_chacha20_poly1305.c23
-rw-r--r--providers/implementations/ciphers/cipher_des.c1
-rw-r--r--providers/implementations/ciphers/cipher_rc4_hmac_md5.c13
-rw-r--r--providers/implementations/ciphers/cipher_tdes_common.c1
-rw-r--r--providers/implementations/ciphers/ciphercommon.c33
-rw-r--r--providers/implementations/ciphers/ciphercommon_ccm.c5
-rw-r--r--providers/implementations/ciphers/ciphercommon_gcm.c7
-rw-r--r--providers/implementations/digests/blake2b_prov.c6
-rw-r--r--providers/implementations/digests/blake2s_prov.c6
-rw-r--r--providers/implementations/encode_decode/encode_key2any.c12
-rw-r--r--providers/implementations/include/prov/ciphercommon.h1
-rw-r--r--providers/implementations/include/prov/ciphercommon_aead.h7
-rw-r--r--providers/implementations/kdfs/pbkdf1.c8
-rw-r--r--providers/implementations/macs/cmac_prov.c6
-rw-r--r--providers/implementations/signature/rsa_sig.c1
-rw-r--r--providers/implementations/signature/sm2_sig.c9
-rw-r--r--ssl/d1_lib.c17
-rw-r--r--ssl/record/rec_layer_s3.c6
-rw-r--r--ssl/s3_enc.c6
-rw-r--r--ssl/s3_lib.c4
-rw-r--r--ssl/ssl_ciph.c3
-rw-r--r--ssl/ssl_conf.c24
-rw-r--r--ssl/ssl_lib.c30
-rw-r--r--ssl/ssl_mcnf.c18
-rw-r--r--ssl/statem/extensions_cust.c7
-rw-r--r--ssl/statem/statem_dtls.c8
-rw-r--r--ssl/t1_enc.c7
-rw-r--r--test/CAtsa.cnf164
-rw-r--r--test/README-dev.md160
-rw-r--r--test/README-external.md116
-rw-r--r--test/README.md170
-rw-r--r--test/README.ssltest.md285
-rw-r--r--test/aborttest.c16
-rw-r--r--test/acvp_test.c1502
-rw-r--r--test/acvp_test.inc2035
-rw-r--r--test/aesgcmtest.c136
-rw-r--r--test/afalgtest.c160
-rw-r--r--test/algorithmid_test.c328
-rw-r--r--test/asn1_decode_test.c235
-rw-r--r--test/asn1_dsa_internal_test.c184
-rw-r--r--test/asn1_encode_test.c908
-rw-r--r--test/asn1_internal_test.c200
-rw-r--r--test/asn1_stable_parse_test.c81
-rw-r--r--test/asn1_string_table_test.c77
-rw-r--r--test/asn1_time_test.c418
-rw-r--r--test/asynciotest.c417
-rw-r--r--test/asynctest.c435
-rw-r--r--test/bad_dtls_test.c607
-rw-r--r--test/bftest.c487
-rw-r--r--test/bio_callback_test.c360
-rw-r--r--test/bio_core_test.c119
-rw-r--r--test/bio_enc_test.c266
-rw-r--r--test/bio_memleak_test.c291
-rw-r--r--test/bio_prefix_text.c267
-rw-r--r--test/bio_readbuffer_test.c131
-rw-r--r--test/bioprinttest.c362
-rw-r--r--test/bn_internal_test.c105
-rw-r--r--test/bn_rand_range.h58
-rw-r--r--test/bntest.c3195
-rwxr-xr-xtest/bntests.pl156
-rw-r--r--test/build.info976
-rw-r--r--test/ca-and-certs.cnf89
-rw-r--r--test/casttest.c118
-rw-r--r--test/certs/alt1-cert.pem21
-rw-r--r--test/certs/alt1-key.pem28
-rw-r--r--test/certs/alt2-cert.pem20
-rw-r--r--test/certs/alt2-key.pem28
-rw-r--r--test/certs/alt3-cert.pem21
-rw-r--r--test/certs/alt3-key.pem28
-rw-r--r--test/certs/bad-othername-cert.pem20
-rw-r--r--test/certs/bad-othername-namec-inter.pem17
-rw-r--r--test/certs/bad-othername-namec-key.pem27
-rw-r--r--test/certs/bad-othername-namec.pem18
-rw-r--r--test/certs/bad-pc3-cert.pem21
-rw-r--r--test/certs/bad-pc3-key.pem28
-rw-r--r--test/certs/bad-pc4-cert.pem21
-rw-r--r--test/certs/bad-pc4-key.pem28
-rw-r--r--test/certs/bad-pc6-cert.pem21
-rw-r--r--test/certs/bad-pc6-key.pem28
-rw-r--r--test/certs/bad.key27
-rw-r--r--test/certs/bad.pem21
-rw-r--r--test/certs/badalt1-cert.pem20
-rw-r--r--test/certs/badalt1-key.pem28
-rw-r--r--test/certs/badalt10-cert.pem21
-rw-r--r--test/certs/badalt10-key.pem28
-rw-r--r--test/certs/badalt2-cert.pem20
-rw-r--r--test/certs/badalt2-key.pem28
-rw-r--r--test/certs/badalt3-cert.pem21
-rw-r--r--test/certs/badalt3-key.pem28
-rw-r--r--test/certs/badalt4-cert.pem21
-rw-r--r--test/certs/badalt4-key.pem28
-rw-r--r--test/certs/badalt5-cert.pem20
-rw-r--r--test/certs/badalt5-key.pem28
-rw-r--r--test/certs/badalt6-cert.pem21
-rw-r--r--test/certs/badalt6-key.pem28
-rw-r--r--test/certs/badalt7-cert.pem22
-rw-r--r--test/certs/badalt7-key.pem28
-rw-r--r--test/certs/badalt8-cert.pem21
-rw-r--r--test/certs/badalt8-key.pem28
-rw-r--r--test/certs/badalt9-cert.pem21
-rw-r--r--test/certs/badalt9-key.pem28
-rw-r--r--test/certs/badcn1-cert.pem20
-rw-r--r--test/certs/badcn1-key.pem28
-rw-r--r--test/certs/ca+anyEKU.pem18
-rw-r--r--test/certs/ca+clientAuth.pem18
-rw-r--r--test/certs/ca+serverAuth.pem18
-rw-r--r--test/certs/ca-anyEKU.pem18
-rw-r--r--test/certs/ca-cert-768.pem15
-rw-r--r--test/certs/ca-cert-768i.pem15
-rw-r--r--test/certs/ca-cert-ec-explicit.pem19
-rw-r--r--test/certs/ca-cert-ec-named.pem14
-rw-r--r--test/certs/ca-cert-md5-any.pem19
-rw-r--r--test/certs/ca-cert-md5.pem18
-rw-r--r--test/certs/ca-cert.pem18
-rw-r--r--test/certs/ca-cert2.pem18
-rw-r--r--test/certs/ca-clientAuth.pem18
-rw-r--r--test/certs/ca-expired.pem18
-rw-r--r--test/certs/ca-key-768.pem13
-rw-r--r--test/certs/ca-key-ec-explicit.pem10
-rw-r--r--test/certs/ca-key-ec-named.pem5
-rw-r--r--test/certs/ca-key.pem28
-rw-r--r--test/certs/ca-key2.pem28
-rw-r--r--test/certs/ca-name2.pem19
-rw-r--r--test/certs/ca-nonbc.pem18
-rw-r--r--test/certs/ca-nonca.pem19
-rw-r--r--test/certs/ca-pol-cert.pem19
-rw-r--r--test/certs/ca-pss-cert.pem21
-rw-r--r--test/certs/ca-pss-key.pem28
-rw-r--r--test/certs/ca-root2.pem18
-rw-r--r--test/certs/ca-serverAuth.pem18
-rw-r--r--test/certs/cca+anyEKU.pem19
-rw-r--r--test/certs/cca+clientAuth.pem19
-rw-r--r--test/certs/cca+serverAuth.pem19
-rw-r--r--test/certs/cca-anyEKU.pem19
-rw-r--r--test/certs/cca-cert.pem19
-rw-r--r--test/certs/cca-clientAuth.pem19
-rw-r--r--test/certs/cca-serverAuth.pem19
-rw-r--r--test/certs/cert-key-cert.pem90
-rw-r--r--test/certs/client-ed25519-cert.pem32
-rw-r--r--test/certs/client-ed25519-key.pem3
-rw-r--r--test/certs/client-ed448-cert.pem15
-rw-r--r--test/certs/client-ed448-key.pem4
-rw-r--r--test/certs/croot+anyEKU.pem19
-rw-r--r--test/certs/croot+clientAuth.pem19
-rw-r--r--test/certs/croot+serverAuth.pem19
-rw-r--r--test/certs/croot-anyEKU.pem19
-rw-r--r--test/certs/croot-cert.pem19
-rw-r--r--test/certs/croot-clientAuth.pem19
-rw-r--r--test/certs/croot-serverAuth.pem19
-rw-r--r--test/certs/cross-key.pem28
-rw-r--r--test/certs/cross-root.pem18
-rw-r--r--test/certs/ct-server-key-public.pem4
-rw-r--r--test/certs/ct-server-key.pem5
-rw-r--r--test/certs/cyrillic.msb79
-rw-r--r--test/certs/cyrillic.pem22
-rw-r--r--test/certs/cyrillic.utf879
-rw-r--r--test/certs/cyrillic_crl.pem13
-rw-r--r--test/certs/cyrillic_crl.utf840
-rw-r--r--test/certs/dhk2048.pem14
-rw-r--r--test/certs/dhp2048.pem8
-rw-r--r--test/certs/ec_privkey_with_chain.pem74
-rw-r--r--test/certs/ee+clientAuth.pem20
-rw-r--r--test/certs/ee+serverAuth.pem20
-rw-r--r--test/certs/ee-cert-1024.pem16
-rw-r--r--test/certs/ee-cert-3072.pem22
-rw-r--r--test/certs/ee-cert-4096.pem25
-rw-r--r--test/certs/ee-cert-768.pem16
-rw-r--r--test/certs/ee-cert-768i.pem16
-rw-r--r--test/certs/ee-cert-8192.pem35
-rw-r--r--test/certs/ee-cert-crit-unknown-ext.pem20
-rw-r--r--test/certs/ee-cert-ec-explicit.pem16
-rw-r--r--test/certs/ee-cert-ec-named-explicit.pem11
-rw-r--r--test/certs/ee-cert-ec-named-named.pem11
-rw-r--r--test/certs/ee-cert-md5.pem19
-rw-r--r--test/certs/ee-cert-noncrit-unknown-ext.pem20
-rw-r--r--test/certs/ee-cert-ocsp-nocheck.pem20
-rw-r--r--test/certs/ee-cert-policies-bad.pem20
-rw-r--r--test/certs/ee-cert-policies.pem20
-rw-r--r--test/certs/ee-cert.pem19
-rw-r--r--test/certs/ee-cert2.pem19
-rw-r--r--test/certs/ee-client-chain.pem37
-rw-r--r--test/certs/ee-client.pem19
-rw-r--r--test/certs/ee-clientAuth.pem20
-rw-r--r--test/certs/ee-ecdsa-client-chain.pem33
-rw-r--r--test/certs/ee-ecdsa-key.pem5
-rw-r--r--test/certs/ee-ed25519.pem38
-rw-r--r--test/certs/ee-expired.pem19
-rw-r--r--test/certs/ee-key-1024.pem16
-rw-r--r--test/certs/ee-key-3072.pem40
-rw-r--r--test/certs/ee-key-4096.pem52
-rw-r--r--test/certs/ee-key-768.pem13
-rw-r--r--test/certs/ee-key-8192.pem100
-rw-r--r--test/certs/ee-key-ec-explicit.pem10
-rw-r--r--test/certs/ee-key-ec-named-explicit.pem5
-rw-r--r--test/certs/ee-key-ec-named-named.pem5
-rw-r--r--test/certs/ee-key.pem28
-rw-r--r--test/certs/ee-name2.pem19
-rw-r--r--test/certs/ee-pathlen.pem18
-rw-r--r--test/certs/ee-pss-cert.pem21
-rw-r--r--test/certs/ee-pss-sha1-cert.pem19
-rw-r--r--test/certs/ee-pss-sha256-cert.pem21
-rw-r--r--test/certs/ee-pss-wrong1.5-cert.pem19
-rw-r--r--test/certs/ee-self-signed.pem18
-rw-r--r--test/certs/ee-serverAuth.pem20
-rw-r--r--test/certs/ee-ss-with-keyCertSign.pem19
-rw-r--r--test/certs/embeddedSCTs1-key.pem27
-rw-r--r--test/certs/embeddedSCTs1.pem24
-rw-r--r--test/certs/embeddedSCTs1.sct12
-rw-r--r--test/certs/embeddedSCTs1.tlssctbin0 -> 118 bytes
-rw-r--r--test/certs/embeddedSCTs1_issuer-key.pem27
-rw-r--r--test/certs/embeddedSCTs1_issuer.pem23
-rw-r--r--test/certs/embeddedSCTs3.pem44
-rw-r--r--test/certs/embeddedSCTs3.sct36
-rw-r--r--test/certs/embeddedSCTs3_issuer.pem35
-rw-r--r--test/certs/ext-check.csr18
-rw-r--r--test/certs/fake-gp.pem36
-rw-r--r--test/certs/goodcn1-cert.pem22
-rw-r--r--test/certs/goodcn1-key.pem28
-rw-r--r--test/certs/goodcn2-cert.pem19
-rw-r--r--test/certs/goodcn2-chain.pem40
-rw-r--r--test/certs/goodcn2-key.pem28
-rw-r--r--test/certs/grfc.pem30
-rw-r--r--test/certs/interCA.key27
-rw-r--r--test/certs/interCA.pem21
-rw-r--r--test/certs/invalid-cert.pem19
-rw-r--r--test/certs/key-pass-12345.pem30
-rw-r--r--test/certs/leaf-chain.pem84
-rw-r--r--test/certs/leaf-encrypted.key30
-rw-r--r--test/certs/leaf.key27
-rw-r--r--test/certs/leaf.pem21
-rw-r--r--test/certs/many-constraints.pem292
-rw-r--r--test/certs/many-names1.pem409
-rw-r--r--test/certs/many-names2.pem251
-rw-r--r--test/certs/many-names3.pem571
-rwxr-xr-xtest/certs/mkcert.sh411
-rw-r--r--test/certs/nca+anyEKU.pem19
-rw-r--r--test/certs/nca+serverAuth.pem19
-rw-r--r--test/certs/ncca-cert.pem21
-rw-r--r--test/certs/ncca-key.pem28
-rw-r--r--test/certs/ncca1-cert.pem21
-rw-r--r--test/certs/ncca1-key.pem28
-rw-r--r--test/certs/ncca2-cert.pem20
-rw-r--r--test/certs/ncca2-key.pem28
-rw-r--r--test/certs/ncca3-cert.pem20
-rw-r--r--test/certs/ncca3-key.pem28
-rw-r--r--test/certs/nccaothername-cert.pem20
-rw-r--r--test/certs/nccaothername-key.pem28
-rw-r--r--test/certs/nroot+anyEKU.pem19
-rw-r--r--test/certs/nroot+serverAuth.pem19
-rw-r--r--test/certs/p256-server-cert.pem12
-rw-r--r--test/certs/p256-server-key.pem5
-rw-r--r--test/certs/p384-root-key.pem6
-rw-r--r--test/certs/p384-root.pem12
-rw-r--r--test/certs/p384-server-cert.pem13
-rw-r--r--test/certs/p384-server-key.pem6
-rw-r--r--test/certs/pathlen.pem22
-rw-r--r--test/certs/pc1-cert.pem20
-rw-r--r--test/certs/pc1-key.pem28
-rw-r--r--test/certs/pc2-cert.pem21
-rw-r--r--test/certs/pc2-key.pem28
-rw-r--r--test/certs/pc5-cert.pem21
-rw-r--r--test/certs/pc5-key.pem28
-rw-r--r--test/certs/pkitsta.pem20
-rw-r--r--test/certs/root+anyEKU.pem18
-rw-r--r--test/certs/root+clientAuth.pem19
-rw-r--r--test/certs/root+serverAuth.pem19
-rw-r--r--test/certs/root-anyEKU.pem18
-rw-r--r--test/certs/root-cert-768.pem12
-rw-r--r--test/certs/root-cert-md5.pem19
-rw-r--r--test/certs/root-cert-rsa2.pem18
-rw-r--r--test/certs/root-cert.pem19
-rw-r--r--test/certs/root-cert2.pem19
-rw-r--r--test/certs/root-clientAuth.pem19
-rw-r--r--test/certs/root-cross-cert.pem18
-rw-r--r--test/certs/root-ed25519.pem40
-rw-r--r--test/certs/root-ed25519.privkey.pem3
-rw-r--r--test/certs/root-ed25519.pubkey.pem3
-rw-r--r--test/certs/root-ed448-cert.pem11
-rw-r--r--test/certs/root-ed448-key.pem4
-rw-r--r--test/certs/root-expired.pem19
-rw-r--r--test/certs/root-key-768.pem13
-rw-r--r--test/certs/root-key.pem28
-rw-r--r--test/certs/root-key2.pem28
-rw-r--r--test/certs/root-name2.pem19
-rw-r--r--test/certs/root-nonca.pem19
-rw-r--r--test/certs/root-noserver.pem19
-rw-r--r--test/certs/root-serverAuth.pem19
-rw-r--r--test/certs/root2+clientAuth.pem19
-rw-r--r--test/certs/root2+serverAuth.pem19
-rw-r--r--test/certs/root2-serverAuth.pem19
-rw-r--r--test/certs/rootCA.key27
-rw-r--r--test/certs/rootCA.pem79
-rw-r--r--test/certs/rootcert.pem18
-rw-r--r--test/certs/rootkey.pem28
-rw-r--r--test/certs/roots.pem42
-rw-r--r--test/certs/sca+anyEKU.pem19
-rw-r--r--test/certs/sca+clientAuth.pem19
-rw-r--r--test/certs/sca+serverAuth.pem19
-rw-r--r--test/certs/sca-anyEKU.pem19
-rw-r--r--test/certs/sca-cert.pem19
-rw-r--r--test/certs/sca-clientAuth.pem19
-rw-r--r--test/certs/sca-serverAuth.pem19
-rw-r--r--test/certs/server-cecdsa-cert.pem15
-rw-r--r--test/certs/server-cecdsa-key.pem4
-rw-r--r--test/certs/server-dsa-cert.pem31
-rw-r--r--test/certs/server-dsa-key.pem15
-rw-r--r--test/certs/server-dsa-pubkey.pem20
-rw-r--r--test/certs/server-ecdsa-brainpoolP256r1-cert.pem16
-rw-r--r--test/certs/server-ecdsa-brainpoolP256r1-key.pem5
-rw-r--r--test/certs/server-ecdsa-cert.pem15
-rw-r--r--test/certs/server-ecdsa-key.pem5
-rw-r--r--test/certs/server-ed25519-cert.pem14
-rw-r--r--test/certs/server-ed25519-key.pem3
-rw-r--r--test/certs/server-ed448-cert.pem11
-rw-r--r--test/certs/server-ed448-key.pem4
-rw-r--r--test/certs/server-pss-cert.pem19
-rw-r--r--test/certs/server-pss-key.pem28
-rw-r--r--test/certs/server-pss-restrict-cert.pem21
-rw-r--r--test/certs/server-pss-restrict-key.pem29
-rw-r--r--test/certs/server-trusted.pem20
-rw-r--r--test/certs/servercert.pem19
-rw-r--r--test/certs/serverkey.pem28
-rwxr-xr-xtest/certs/setup.sh448
-rw-r--r--test/certs/sm2-ca-cert.pem14
-rw-r--r--test/certs/sm2-csr.pem9
-rw-r--r--test/certs/sm2-pub.key4
-rw-r--r--test/certs/sm2-root.crt14
-rw-r--r--test/certs/sm2-root.key5
-rw-r--r--test/certs/sm2.key5
-rw-r--r--test/certs/sm2.pem14
-rw-r--r--test/certs/some-names1.pem211
-rw-r--r--test/certs/some-names2.pem133
-rw-r--r--test/certs/some-names3.pem293
-rw-r--r--test/certs/sroot+anyEKU.pem19
-rw-r--r--test/certs/sroot+clientAuth.pem19
-rw-r--r--test/certs/sroot+serverAuth.pem19
-rw-r--r--test/certs/sroot-anyEKU.pem19
-rw-r--r--test/certs/sroot-cert.pem19
-rw-r--r--test/certs/sroot-clientAuth.pem19
-rw-r--r--test/certs/sroot-serverAuth.pem19
-rw-r--r--test/certs/subinterCA-ss.pem21
-rw-r--r--test/certs/subinterCA.key27
-rw-r--r--test/certs/subinterCA.pem21
-rw-r--r--test/certs/untrusted.pem42
-rw-r--r--test/certs/v3-certs-RC2.p12bin0 -> 1568 bytes
-rw-r--r--test/certs/v3-certs-TDES.p12bin0 -> 1568 bytes
-rw-r--r--test/certs/wrongcert.pem19
-rw-r--r--test/certs/wrongkey.pem28
-rw-r--r--test/certs/x509-check-key.pem28
-rw-r--r--test/certs/x509-check.csr15
-rw-r--r--test/chacha_internal_test.c190
-rw-r--r--test/cipher_overhead_test.c62
-rw-r--r--test/cipherbytes_test.c149
-rw-r--r--test/cipherlist_test.c253
-rw-r--r--test/ciphername_test.c470
-rw-r--r--test/clienthellotest.c269
-rw-r--r--test/cmactest.c216
-rw-r--r--test/cmp_asn_test.c136
-rw-r--r--test/cmp_client_test.c555
-rw-r--r--test/cmp_ctx_test.c896
-rw-r--r--test/cmp_hdr_test.c494
-rw-r--r--test/cmp_msg_test.c598
-rw-r--r--test/cmp_protect_test.c621
-rw-r--r--test/cmp_server_test.c172
-rw-r--r--test/cmp_status_test.c112
-rw-r--r--test/cmp_vfy_test.c706
-rw-r--r--test/cms-examples.pl365
-rw-r--r--test/cmsapitest.c412
-rw-r--r--test/conf_include_test.c238
-rw-r--r--test/confdump.c51
-rw-r--r--test/constant_time_test.c414
-rw-r--r--test/context_internal_test.c137
-rw-r--r--test/crltest.c413
-rw-r--r--test/ct/log_list.cnf41
-rw-r--r--test/ct/tls1.sct12
-rw-r--r--test/ct_test.c527
-rw-r--r--test/ctype_internal_test.c90
-rw-r--r--test/curve448_internal_test.c737
-rw-r--r--test/d2i-tests/bad-cms.der1
-rw-r--r--test/d2i-tests/bad-int-pad0.derbin0 -> 4 bytes
-rw-r--r--test/d2i-tests/bad-int-padminus1.der1
-rw-r--r--test/d2i-tests/bad_bio.derbin0 -> 7 bytes
-rw-r--r--test/d2i-tests/bad_cert.derbin0 -> 1007 bytes
-rw-r--r--test/d2i-tests/bad_generalname.der1
-rw-r--r--test/d2i-tests/high_tag.derbin0 -> 6 bytes
-rw-r--r--test/d2i-tests/int0.derbin0 -> 3 bytes
-rw-r--r--test/d2i-tests/int1.der1
-rw-r--r--test/d2i-tests/intminus1.der1
-rw-r--r--test/d2i_test.c169
-rw-r--r--test/dane-cross.in113
-rw-r--r--test/danetest.c430
-rw-r--r--test/danetest.in2007
-rw-r--r--test/danetest.pem14
-rw-r--r--test/data.bin4
-rw-r--r--test/data2.bin61
-rw-r--r--test/default-and-fips.cnf16
-rw-r--r--test/default-and-legacy.cnf17
-rw-r--r--test/default.cnf13
-rw-r--r--test/defltfips_test.c108
-rw-r--r--test/destest.c895
-rw-r--r--test/dhtest.c954
-rw-r--r--test/drbgtest.c906
-rw-r--r--test/dsa_no_digest_size_test.c251
-rw-r--r--test/dsatest.c501
-rw-r--r--test/dtls_mtu_test.c242
-rw-r--r--test/dtlstest.c612
-rw-r--r--test/dtlsv1listentest.c357
-rw-r--r--test/ec_internal_test.c462
-rw-r--r--test/ecdsatest.c399
-rw-r--r--test/ecdsatest.h10214
-rw-r--r--test/ecstresstest.c156
-rw-r--r--test/ectest.c3044
-rw-r--r--test/endecode_test.c1502
-rw-r--r--test/endecoder_legacy_test.c731
-rw-r--r--test/enginetest.c465
-rw-r--r--test/errtest.c348
-rw-r--r--test/evp_extra_test.c5480
-rw-r--r--test/evp_extra_test2.c1295
-rw-r--r--test/evp_fetch_prov_test.c392
-rw-r--r--test/evp_kdf_test.c1738
-rw-r--r--test/evp_libctx_test.c766
-rw-r--r--test/evp_pkey_ctx_new_from_name.c14
-rw-r--r--test/evp_pkey_dparams_test.c324
-rw-r--r--test/evp_pkey_provided_test.c1786
-rw-r--r--test/evp_test.c4174
-rw-r--r--test/exdatatest.c319
-rw-r--r--test/exptest.c337
-rw-r--r--test/ext_internal_test.c105
-rw-r--r--test/fake_rsaprov.c531
-rw-r--r--test/fake_rsaprov.h15
-rw-r--r--test/fatalerrtest.c101
-rw-r--r--test/ffc_internal_test.c711
-rw-r--r--test/filterprov.c238
-rw-r--r--test/filterprov.h14
-rw-r--r--test/fips-alt.cnf16
-rw-r--r--test/fips-and-base.cnf16
-rw-r--r--test/fips.cnf19
-rw-r--r--test/fips_version_test.c78
-rw-r--r--test/generate_buildtest.pl34
-rw-r--r--test/generate_ssl_tests.pl155
-rw-r--r--test/gmdifftest.c67
-rw-r--r--test/helpers/cmp_testlib.c81
-rw-r--r--test/helpers/cmp_testlib.h32
-rw-r--r--test/helpers/handshake.c1750
-rw-r--r--test/helpers/handshake.h98
-rw-r--r--test/helpers/handshake_srp.c87
-rw-r--r--test/helpers/pkcs12.c789
-rw-r--r--test/helpers/pkcs12.h103
-rw-r--r--test/helpers/predefined_dhparams.c194
-rw-r--r--test/helpers/predefined_dhparams.h18
-rw-r--r--test/helpers/ssl_test_ctx.c903
-rw-r--r--test/helpers/ssl_test_ctx.h259
-rw-r--r--test/helpers/ssltestlib.c1184
-rw-r--r--test/helpers/ssltestlib.h62
-rw-r--r--test/hexstr_test.c134
-rw-r--r--test/hmactest.c302
-rw-r--r--test/http_test.c395
-rw-r--r--test/ideatest.c126
-rw-r--r--test/igetest.c462
-rw-r--r--test/insta.priv.pem27
-rw-r--r--test/insta_ca.cert.pem22
-rw-r--r--test/invalid-x509.cnf6
-rw-r--r--test/keymgmt_internal_test.c358
-rw-r--r--test/legacy.cnf13
-rw-r--r--test/lhash_test.c249
-rw-r--r--test/localetest.c136
-rw-r--r--test/mdc2_internal_test.c77
-rw-r--r--test/mdc2test.c95
-rw-r--r--test/memleaktest.c62
-rw-r--r--test/modes_internal_test.c899
-rw-r--r--test/moduleloadtest.c53
-rw-r--r--test/namemap_internal_test.c183
-rw-r--r--test/nodefltctxtest.c60
-rw-r--r--test/null.cnf13
-rw-r--r--test/ocsp-tests/D1.ors32
-rw-r--r--test/ocsp-tests/D1_Cert_EE.pem38
-rw-r--r--test/ocsp-tests/D1_Issuer_ICA.pem27
-rw-r--r--test/ocsp-tests/D2.ors32
-rw-r--r--test/ocsp-tests/D2_Cert_ICA.pem26
-rw-r--r--test/ocsp-tests/D2_Issuer_Root.pem21
-rw-r--r--test/ocsp-tests/D3.ors38
-rw-r--r--test/ocsp-tests/D3_Cert_EE.pem31
-rw-r--r--test/ocsp-tests/D3_Issuer_Root.pem83
-rw-r--r--test/ocsp-tests/ISDOSC_D1.ors32
-rw-r--r--test/ocsp-tests/ISDOSC_D2.ors32
-rw-r--r--test/ocsp-tests/ISDOSC_D3.ors38
-rw-r--r--test/ocsp-tests/ISIC_D1_Issuer_ICA.pem27
-rw-r--r--test/ocsp-tests/ISIC_D2_Issuer_Root.pem21
-rw-r--r--test/ocsp-tests/ISIC_D3_Issuer_Root.pem41
-rw-r--r--test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem29
-rw-r--r--test/ocsp-tests/ISIC_ND2_Issuer_Root.pem23
-rw-r--r--test/ocsp-tests/ISIC_ND3_Issuer_Root.pem25
-rw-r--r--test/ocsp-tests/ISOP_D1.ors32
-rw-r--r--test/ocsp-tests/ISOP_D2.ors32
-rw-r--r--test/ocsp-tests/ISOP_D3.ors38
-rw-r--r--test/ocsp-tests/ISOP_ND1.ors10
-rw-r--r--test/ocsp-tests/ISOP_ND2.ors10
-rw-r--r--test/ocsp-tests/ISOP_ND3.ors10
-rw-r--r--test/ocsp-tests/ND1.ors10
-rw-r--r--test/ocsp-tests/ND1_Cert_EE.pem36
-rw-r--r--test/ocsp-tests/ND1_Cross_Root.pem25
-rw-r--r--test/ocsp-tests/ND1_Issuer_ICA-Cross.pem58
-rw-r--r--test/ocsp-tests/ND1_Issuer_ICA.pem29
-rw-r--r--test/ocsp-tests/ND2.ors10
-rw-r--r--test/ocsp-tests/ND2_Cert_ICA.pem29
-rw-r--r--test/ocsp-tests/ND2_Issuer_Root.pem23
-rw-r--r--test/ocsp-tests/ND3.ors10
-rw-r--r--test/ocsp-tests/ND3_Cert_EE.pem34
-rw-r--r--test/ocsp-tests/ND3_Issuer_Root.pem25
-rw-r--r--test/ocsp-tests/WIKH_D1.ors32
-rw-r--r--test/ocsp-tests/WIKH_D2.ors32
-rw-r--r--test/ocsp-tests/WIKH_D3.ors38
-rw-r--r--test/ocsp-tests/WIKH_ND1.ors10
-rw-r--r--test/ocsp-tests/WIKH_ND2.ors10
-rw-r--r--test/ocsp-tests/WIKH_ND3.ors10
-rw-r--r--test/ocsp-tests/WINH_D1.ors32
-rw-r--r--test/ocsp-tests/WINH_D2.ors32
-rw-r--r--test/ocsp-tests/WINH_D3.ors38
-rw-r--r--test/ocsp-tests/WINH_ND1.ors10
-rw-r--r--test/ocsp-tests/WINH_ND2.ors10
-rw-r--r--test/ocsp-tests/WINH_ND3.ors10
-rw-r--r--test/ocsp-tests/WKDOSC_D1.ors32
-rw-r--r--test/ocsp-tests/WKDOSC_D2.ors32
-rw-r--r--test/ocsp-tests/WKDOSC_D3.ors38
-rw-r--r--test/ocsp-tests/WKIC_D1_Issuer_ICA.pem27
-rw-r--r--test/ocsp-tests/WKIC_D2_Issuer_Root.pem21
-rw-r--r--test/ocsp-tests/WKIC_D3_Issuer_Root.pem41
-rw-r--r--test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem29
-rw-r--r--test/ocsp-tests/WKIC_ND2_Issuer_Root.pem23
-rw-r--r--test/ocsp-tests/WKIC_ND3_Issuer_Root.pem25
-rw-r--r--test/ocsp-tests/WRID_D1.ors32
-rw-r--r--test/ocsp-tests/WRID_D2.ors32
-rw-r--r--test/ocsp-tests/WRID_D3.ors38
-rw-r--r--test/ocsp-tests/WRID_ND1.ors10
-rw-r--r--test/ocsp-tests/WRID_ND2.ors10
-rw-r--r--test/ocsp-tests/WRID_ND3.ors10
-rw-r--r--test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem27
-rw-r--r--test/ocsp-tests/WSNIC_D2_Issuer_Root.pem21
-rw-r--r--test/ocsp-tests/WSNIC_D3_Issuer_Root.pem41
-rw-r--r--test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem29
-rw-r--r--test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem23
-rw-r--r--test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem25
-rw-r--r--test/ocspapitest.c236
-rw-r--r--test/ossl_store_test.c238
-rw-r--r--test/p_minimal.c24
-rw-r--r--test/p_test.c320
-rw-r--r--test/packettest.c499
-rw-r--r--test/param_build_test.c535
-rw-r--r--test/params_api_test.c714
-rw-r--r--test/params_conversion_test.c368
-rw-r--r--test/params_test.c712
-rw-r--r--test/pbelutest.c50
-rw-r--r--test/pbetest.c167
-rw-r--r--test/pem_read_depr_test.c216
-rw-r--r--test/pemtest.c167
-rw-r--r--test/pkcs12_format_test.c961
-rw-r--r--test/pkcs7-1.pem15
-rw-r--r--test/pkcs7.pem54
-rw-r--r--test/pkcs7_test.c103
-rw-r--r--test/pkey_meth_kdf_test.c204
-rw-r--r--test/pkey_meth_test.c90
-rw-r--r--test/pkits-test.pl905
-rw-r--r--test/poly1305_internal_test.c1575
-rw-r--r--test/property_test.c676
-rw-r--r--test/prov_config_test.c91
-rw-r--r--test/provfetchtest.c297
-rw-r--r--test/provider_fallback_test.c57
-rw-r--r--test/provider_internal_test.c151
-rw-r--r--test/provider_internal_test.cnf.in16
-rw-r--r--test/provider_pkey_test.c308
-rw-r--r--test/provider_status_test.c245
-rw-r--r--test/provider_test.c270
-rw-r--r--test/proxy.cnf60
-rw-r--r--test/punycode_test.c220
-rw-r--r--test/rand_status_test.c27
-rw-r--r--test/rand_test.c53
-rw-r--r--test/rc2test.c74
-rw-r--r--test/rc4test.c134
-rw-r--r--test/rc5test.c243
-rw-r--r--test/rdrand_sanitytest.c122
-rw-r--r--test/recipes/00-prep_fipsmodule_cnf.t36
-rw-r--r--test/recipes/01-test_abort.t16
-rw-r--r--test/recipes/01-test_fipsmodule_cnf.t37
-rw-r--r--test/recipes/01-test_sanity.t12
-rw-r--r--test/recipes/01-test_symbol_presence.t157
-rw-r--r--test/recipes/01-test_test.t12
-rw-r--r--test/recipes/02-test_errstr.t163
-rw-r--r--test/recipes/02-test_internal_context.t16
-rw-r--r--test/recipes/02-test_internal_ctype.t17
-rw-r--r--test/recipes/02-test_internal_exts.t15
-rw-r--r--test/recipes/02-test_internal_keymgmt.t21
-rw-r--r--test/recipes/02-test_internal_provider.t19
-rw-r--r--test/recipes/02-test_lhash.t12
-rw-r--r--test/recipes/02-test_localetest.t26
-rw-r--r--test/recipes/02-test_ordinals.t61
-rw-r--r--test/recipes/02-test_sparse_array.t12
-rw-r--r--test/recipes/02-test_stack.t12
-rw-r--r--test/recipes/03-test_exdata.t12
-rw-r--r--test/recipes/03-test_fipsinstall.t310
-rw-r--r--test/recipes/03-test_internal_asn1.t16
-rw-r--r--test/recipes/03-test_internal_asn1_dsa.t16
-rw-r--r--test/recipes/03-test_internal_bn.t19
-rw-r--r--test/recipes/03-test_internal_chacha.t16
-rw-r--r--test/recipes/03-test_internal_curve448.t19
-rw-r--r--test/recipes/03-test_internal_ec.t19
-rw-r--r--test/recipes/03-test_internal_ffc.t11
-rw-r--r--test/recipes/03-test_internal_mdc2.t12
-rw-r--r--test/recipes/03-test_internal_modes.t16
-rw-r--r--test/recipes/03-test_internal_namemap.t16
-rw-r--r--test/recipes/03-test_internal_poly1305.t16
-rw-r--r--test/recipes/03-test_internal_rsa_sp800_56b.t19
-rw-r--r--test/recipes/03-test_internal_siphash.t16
-rw-r--r--test/recipes/03-test_internal_sm2.t16
-rw-r--r--test/recipes/03-test_internal_sm3.t15
-rw-r--r--test/recipes/03-test_internal_sm4.t17
-rw-r--r--test/recipes/03-test_internal_ssl_cert_table.t16
-rw-r--r--test/recipes/03-test_internal_x509.t16
-rw-r--r--test/recipes/03-test_params_api.t12
-rw-r--r--test/recipes/03-test_property.t21
-rw-r--r--test/recipes/03-test_ui.t13
-rw-r--r--test/recipes/04-test_asn1_decode.t12
-rw-r--r--test/recipes/04-test_asn1_encode.t12
-rw-r--r--test/recipes/04-test_asn1_parse.t26
-rw-r--r--test/recipes/04-test_asn1_stable_parse.t24
-rw-r--r--test/recipes/04-test_asn1_stable_parse_data/asn1_stable_parse.cnf16
-rw-r--r--test/recipes/04-test_asn1_string_table.t12
-rw-r--r--test/recipes/04-test_bio_callback.t12
-rw-r--r--test/recipes/04-test_bio_core.t12
-rw-r--r--test/recipes/04-test_bioprint.t12
-rw-r--r--test/recipes/04-test_conf.t46
-rw-r--r--test/recipes/04-test_conf_data/dollarid_off.cnf5
-rw-r--r--test/recipes/04-test_conf_data/dollarid_off.txt4
-rw-r--r--test/recipes/04-test_conf_data/dollarid_on.cnf5
-rw-r--r--test/recipes/04-test_conf_data/dollarid_on.txt4
-rw-r--r--test/recipes/04-test_encoder_decoder.t51
-rw-r--r--test/recipes/04-test_encoder_decoder_legacy.t29
-rw-r--r--test/recipes/04-test_err.t12
-rw-r--r--test/recipes/04-test_hexstring.t15
-rw-r--r--test/recipes/04-test_nodefltctx.t19
-rw-r--r--test/recipes/04-test_param_build.t15
-rw-r--r--test/recipes/04-test_params.t15
-rw-r--r--test/recipes/04-test_params_conversion.t23
-rw-r--r--test/recipes/04-test_params_conversion_data/native_types.txt343
-rw-r--r--test/recipes/04-test_pem_read_depr.t20
-rw-r--r--test/recipes/04-test_pem_read_depr_data/dhparams.pem8
-rw-r--r--test/recipes/04-test_pem_read_depr_data/dsaparams.pem14
-rw-r--r--test/recipes/04-test_pem_read_depr_data/dsaprivatekey.pem15
-rw-r--r--test/recipes/04-test_pem_read_depr_data/dsapublickey.pem20
-rw-r--r--test/recipes/04-test_pem_read_depr_data/rsaprivatekey.pem28
-rw-r--r--test/recipes/04-test_pem_read_depr_data/rsapublickey.pem9
-rw-r--r--test/recipes/04-test_pem_read_depr_data/x942params.pem14
-rw-r--r--test/recipes/04-test_pem_reading.t118
-rw-r--r--test/recipes/04-test_pem_reading_data/NOTES.txt3
-rw-r--r--test/recipes/04-test_pem_reading_data/beermug.pem30
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-1023line.pem13
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-1024line.pem13
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-1025line.pem13
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-254-chars-at-the-end.pem6
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-254-chars-in-the-middle.pem5
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-255line.pem25
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-256line.pem25
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-257line.pem25
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-blankline.pem29
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-bom.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-comment.pem29
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-earlypad.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-extrapad.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-infixwhitespace.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-junk.pem29
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-leadingwhitespace.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-longline.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-misalignedpad.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-onecolumn.pem1646
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-oneline-multiple-of-254.pem3
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-oneline.pem3
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-shortandlongline.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-shortline.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-threecolumn.pem550
-rw-r--r--test/recipes/04-test_pem_reading_data/cert-trailingwhitespace.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/cert.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/csr.pem21
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-1023line.pem9
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-1024line.pem8
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-1025line.pem8
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-255line.pem21
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-256line.pem20
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-257line.pem20
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-blankline.pem24
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-comment.pem24
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-corruptedheader.pem23
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-corruptiv.pem23
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-earlypad.pem23
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-extrapad.pem24
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-infixwhitespace.pem23
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-junk.pem24
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-leadingwhitespace.pem23
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-longline.pem23
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-misalignedpad.pem24
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-onecolumn.pem1157
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-oneline.pem6
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-onelineheader.pem22
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-shortandlongline.pem23
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-shortline.pem24
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-threecolumn.pem389
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa-trailingwhitespace.pem23
-rw-r--r--test/recipes/04-test_pem_reading_data/dsa.pem23
-rw-r--r--test/recipes/04-test_pem_reading_data/dsaparam.pem14
-rw-r--r--test/recipes/04-test_pem_reading_data/key.pem28
-rw-r--r--test/recipes/04-test_pem_reading_data/wellknown1
-rw-r--r--test/recipes/04-test_provfetch.t12
-rw-r--r--test/recipes/04-test_provider.t28
-rw-r--r--test/recipes/04-test_provider_fallback.t18
-rw-r--r--test/recipes/04-test_provider_pkey.t18
-rw-r--r--test/recipes/04-test_punycode.t11
-rw-r--r--test/recipes/04-test_upcalls.t19
-rw-r--r--test/recipes/05-test_bf.t21
-rw-r--r--test/recipes/05-test_cast.t22
-rw-r--r--test/recipes/05-test_cmac.t12
-rw-r--r--test/recipes/05-test_des.t12
-rw-r--r--test/recipes/05-test_hmac.t12
-rw-r--r--test/recipes/05-test_idea.t12
-rw-r--r--test/recipes/05-test_pbe.t28
-rw-r--r--test/recipes/05-test_rand.t40
-rw-r--r--test/recipes/05-test_rc2.t11
-rw-r--r--test/recipes/05-test_rc4.t11
-rw-r--r--test/recipes/05-test_rc5.t12
-rw-r--r--test/recipes/06-test_algorithmid.t60
-rw-r--r--test/recipes/06-test_rdrand_sanity.t22
-rw-r--r--test/recipes/10-test_bn.t27
-rw-r--r--test/recipes/10-test_bn_data/bnexp.txt30
-rw-r--r--test/recipes/10-test_bn_data/bngcd.txt17179
-rw-r--r--test/recipes/10-test_bn_data/bnmod.txt2878
-rw-r--r--test/recipes/10-test_bn_data/bnmul.txt2678
-rw-r--r--test/recipes/10-test_bn_data/bnshift.txt2427
-rw-r--r--test/recipes/10-test_bn_data/bnsum.txt2626
-rw-r--r--test/recipes/10-test_exp.t12
-rw-r--r--test/recipes/15-test_dh.t12
-rw-r--r--test/recipes/15-test_dsa.t47
-rw-r--r--test/recipes/15-test_dsaparam.t78
-rw-r--r--test/recipes/15-test_dsaparam_data/invalid/p2048_q256_bad_q.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/invalid/p768_q160_too_small.pem7
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862.pem9
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862_gind1.pem9
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864.pem9
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864_gind1.pem9
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862.pem9
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862_gind1.pem9
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862.pem9
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862_gind1.pem9
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862_gind1.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862_gind1.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864_gind1.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862_gind1.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864_gind1.pem14
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862.pem19
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862_gind1.pem19
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862.pem19
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862_gind1.pem19
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862.pem19
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862_gind1.pem19
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864.pem19
-rw-r--r--test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864_gind1.pem19
-rw-r--r--test/recipes/15-test_ec.t111
-rw-r--r--test/recipes/15-test_ecdsa.t12
-rw-r--r--test/recipes/15-test_ecparam.t176
-rw-r--r--test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem8
-rw-r--r--test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem8
-rw-r--r--test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem8
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/c2pnb163v1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/c2pnb208w1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/secp160k1-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/secp192k1-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/secp224k1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/secp256k1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/secp521r1-explicit.pem12
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect113r1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect113r2-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect163k1-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect163r2-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect193r1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect193r2-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect233k1-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect233r1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect239k1-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect283k1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect283r1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect409k1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect409r1-explicit.pem8
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect571k1-explicit.pem8
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/sect571r1-explicit.pem10
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls1-explicit.pem4
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls10-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls11-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls3-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls4-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls5-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls8-explicit.pem4
-rw-r--r--test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls9-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem8
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem9
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem9
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem9
-rw-r--r--test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem8
-rw-r--r--test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem10
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem7
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem5
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem6
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem3
-rw-r--r--test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem3
-rw-r--r--test/recipes/15-test_gendh.t69
-rw-r--r--test/recipes/15-test_gendhparam.t178
-rw-r--r--test/recipes/15-test_gendsa.t136
-rw-r--r--test/recipes/15-test_genec.t306
-rw-r--r--test/recipes/15-test_genrsa.t150
-rw-r--r--test/recipes/15-test_gensm2.t61
-rw-r--r--test/recipes/15-test_mp_rsa.t126
-rw-r--r--test/recipes/15-test_mp_rsa_data/plain_text4
-rw-r--r--test/recipes/15-test_mp_rsa_data/rsamplcm.pem55
-rw-r--r--test/recipes/15-test_out_option.t73
-rw-r--r--test/recipes/15-test_rsa.t74
-rw-r--r--test/recipes/15-test_rsaoaep.t161
-rw-r--r--test/recipes/15-test_rsaoaep_data/plain_text1
-rw-r--r--test/recipes/15-test_rsapss.t99
-rw-r--r--test/recipes/15-test_rsapss_data/negativesaltlen.pem29
-rw-r--r--test/recipes/15-test_sha.t12
-rw-r--r--test/recipes/20-test_app.t31
-rw-r--r--test/recipes/20-test_cli_fips.t405
-rw-r--r--test/recipes/20-test_dgst.t249
-rw-r--r--test/recipes/20-test_dhparam.t207
-rw-r--r--test/recipes/20-test_dhparam_check.t91
-rw-r--r--test/recipes/20-test_dhparam_check_data/invalid/dh_p1024_t1862_pkcs3.pem8
-rw-r--r--test/recipes/20-test_dhparam_check_data/invalid/dh_p2048_t1862_pkcs3.pem13
-rw-r--r--test/recipes/20-test_dhparam_check_data/invalid/dh_p2048_t1864_pkcs3.pem13
-rw-r--r--test/recipes/20-test_dhparam_check_data/invalid/dh_p3072_t1862_pkcs3.pem19
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dh_5114_1.pem8
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dh_5114_2.pem14
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dh_5114_3.pem14
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dh_ffdhe2048.pem8
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_5114_2.pem14
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_ffdhe2048.pem13
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q160_t1862.pem9
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q160_t1864.pem9
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q224_t1862.pem9
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q256_t1862.pem10
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q160_t1862.pem15
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q224_t1862.pem15
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q224_t1864.pem15
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q256_t1862.pem15
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q256_t1864.pem15
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q160_t1862.pem20
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q224_t1862.pem20
-rw-r--r--test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q256_t1862.pem20
-rw-r--r--test/recipes/20-test_dhparam_data/pkcs3-2-1024.derbin0 -> 138 bytes
-rw-r--r--test/recipes/20-test_dhparam_data/pkcs3-2-1024.pem5
-rw-r--r--test/recipes/20-test_dhparam_data/pkcs3-2-2048.derbin0 -> 268 bytes
-rw-r--r--test/recipes/20-test_dhparam_data/pkcs3-2-2048.pem8
-rw-r--r--test/recipes/20-test_dhparam_data/pkcs3-5-1024.derbin0 -> 138 bytes
-rw-r--r--test/recipes/20-test_dhparam_data/pkcs3-5-1024.pem5
-rw-r--r--test/recipes/20-test_dhparam_data/x942-0-1024.derbin0 -> 319 bytes
-rw-r--r--test/recipes/20-test_dhparam_data/x942-0-1024.pem9
-rw-r--r--test/recipes/20-test_enc.t75
-rw-r--r--test/recipes/20-test_enc_more.t66
-rwxr-xr-xtest/recipes/20-test_kdf.t112
-rwxr-xr-xtest/recipes/20-test_legacy_okay.t23
-rw-r--r--test/recipes/20-test_mac.t224
-rw-r--r--test/recipes/20-test_passwd.t135
-rw-r--r--test/recipes/20-test_pkeyutl.t202
-rw-r--r--test/recipes/20-test_rand_config.t103
-rw-r--r--test/recipes/20-test_spkac.t41
-rw-r--r--test/recipes/25-test_crl.t72
-rw-r--r--test/recipes/25-test_d2i.t93
-rw-r--r--test/recipes/25-test_eai_data.t72
-rw-r--r--test/recipes/25-test_eai_data/ascii_chain.pem53
-rw-r--r--test/recipes/25-test_eai_data/ascii_leaf.pem28
-rw-r--r--test/recipes/25-test_eai_data/san.ascii2
-rw-r--r--test/recipes/25-test_eai_data/san.utf82
-rw-r--r--test/recipes/25-test_eai_data/utf8_chain.pem53
-rw-r--r--test/recipes/25-test_eai_data/utf8_leaf.pem28
-rw-r--r--test/recipes/25-test_pkcs7.t32
-rw-r--r--test/recipes/25-test_pkcs7_data/malformed.pkcs73
-rw-r--r--test/recipes/25-test_req.t491
-rw-r--r--test/recipes/25-test_rusext.t33
-rw-r--r--test/recipes/25-test_rusext_data/grfc.msb67
-rw-r--r--test/recipes/25-test_rusext_data/grfc.utf867
-rw-r--r--test/recipes/25-test_sid.t29
-rw-r--r--test/recipes/25-test_verify.t529
-rw-r--r--test/recipes/25-test_verify_store.t117
-rw-r--r--test/recipes/25-test_x509.t211
-rw-r--r--test/recipes/30-test_acvp.t30
-rw-r--r--test/recipes/30-test_aesgcm.t12
-rw-r--r--test/recipes/30-test_afalg.t21
-rw-r--r--test/recipes/30-test_defltfips.t51
-rw-r--r--test/recipes/30-test_defltfips/fipsmodule.cnf7
-rw-r--r--test/recipes/30-test_engine.t25
-rw-r--r--test/recipes/30-test_evp.t194
-rw-r--r--test/recipes/30-test_evp_data/evpciph_aes_ccm_cavs.txt23927
-rw-r--r--test/recipes/30-test_evp_data/evpciph_aes_common.txt1305
-rw-r--r--test/recipes/30-test_evp_data/evpciph_aes_cts.txt390
-rw-r--r--test/recipes/30-test_evp_data/evpciph_aes_ocb.txt259
-rw-r--r--test/recipes/30-test_evp_data/evpciph_aes_siv.txt75
-rw-r--r--test/recipes/30-test_evp_data/evpciph_aes_stitched.txt126
-rw-r--r--test/recipes/30-test_evp_data/evpciph_aes_wrap.txt174
-rw-r--r--test/recipes/30-test_evp_data/evpciph_aria.txt261
-rw-r--r--test/recipes/30-test_evp_data/evpciph_bf.txt68
-rw-r--r--test/recipes/30-test_evp_data/evpciph_camellia.txt686
-rw-r--r--test/recipes/30-test_evp_data/evpciph_camellia_cts.txt141
-rw-r--r--test/recipes/30-test_evp_data/evpciph_cast5.txt448
-rw-r--r--test/recipes/30-test_evp_data/evpciph_chacha.txt208
-rw-r--r--test/recipes/30-test_evp_data/evpciph_des.txt100
-rw-r--r--test/recipes/30-test_evp_data/evpciph_des3_common.txt37
-rw-r--r--test/recipes/30-test_evp_data/evpciph_idea.txt652
-rw-r--r--test/recipes/30-test_evp_data/evpciph_rc2.txt126
-rw-r--r--test/recipes/30-test_evp_data/evpciph_rc4.txt78
-rw-r--r--test/recipes/30-test_evp_data/evpciph_rc4_stitched.txt22
-rw-r--r--test/recipes/30-test_evp_data/evpciph_rc5.txt129
-rw-r--r--test/recipes/30-test_evp_data/evpciph_seed.txt405
-rw-r--r--test/recipes/30-test_evp_data/evpciph_sm4.txt38
-rw-r--r--test/recipes/30-test_evp_data/evpencod.txt192
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_hkdf.txt215
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_krb5.txt131
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_pbkdf1.txt136
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_pbkdf2.txt157
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_scrypt.txt63
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_ss.txt1121
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_ssh.txt4867
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_tls11_prf.txt37
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_tls12_prf.txt46
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_tls13_kdf.txt4937
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_x942.txt99
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_x942_des.txt26
-rw-r--r--test/recipes/30-test_evp_data/evpkdf_x963.txt112
-rw-r--r--test/recipes/30-test_evp_data/evpmac_blake.txt250
-rw-r--r--test/recipes/30-test_evp_data/evpmac_cmac_des.txt28
-rw-r--r--test/recipes/30-test_evp_data/evpmac_common.txt499
-rw-r--r--test/recipes/30-test_evp_data/evpmac_poly1305.txt332
-rw-r--r--test/recipes/30-test_evp_data/evpmac_siphash.txt193
-rw-r--r--test/recipes/30-test_evp_data/evpmac_sm3.txt38
-rw-r--r--test/recipes/30-test_evp_data/evpmd_blake.txt91
-rw-r--r--test/recipes/30-test_evp_data/evpmd_md.txt125
-rw-r--r--test/recipes/30-test_evp_data/evpmd_mdc2.txt26
-rw-r--r--test/recipes/30-test_evp_data/evpmd_ripemd.txt54
-rw-r--r--test/recipes/30-test_evp_data/evpmd_sha.txt293
-rw-r--r--test/recipes/30-test_evp_data/evpmd_sm3.txt61
-rw-r--r--test/recipes/30-test_evp_data/evpmd_whirlpool.txt60
-rw-r--r--test/recipes/30-test_evp_data/evppbe_pbkdf2.txt163
-rw-r--r--test/recipes/30-test_evp_data/evppbe_pkcs12.txt62
-rw-r--r--test/recipes/30-test_evp_data/evppbe_scrypt.txt52
-rw-r--r--test/recipes/30-test_evp_data/evppkey_brainpool.txt1360
-rw-r--r--test/recipes/30-test_evp_data/evppkey_dh.txt167
-rw-r--r--test/recipes/30-test_evp_data/evppkey_dsa.txt355
-rw-r--r--test/recipes/30-test_evp_data/evppkey_ecc.txt4501
-rw-r--r--test/recipes/30-test_evp_data/evppkey_ecdh.txt3626
-rw-r--r--test/recipes/30-test_evp_data/evppkey_ecdsa.txt230
-rw-r--r--test/recipes/30-test_evp_data/evppkey_ecx.txt582
-rw-r--r--test/recipes/30-test_evp_data/evppkey_ffdhe.txt593
-rw-r--r--test/recipes/30-test_evp_data/evppkey_kas.txt11667
-rw-r--r--test/recipes/30-test_evp_data/evppkey_kdf_hkdf.txt195
-rw-r--r--test/recipes/30-test_evp_data/evppkey_kdf_scrypt.txt63
-rw-r--r--test/recipes/30-test_evp_data/evppkey_kdf_tls1_prf.txt71
-rw-r--r--test/recipes/30-test_evp_data/evppkey_mismatch.txt85
-rw-r--r--test/recipes/30-test_evp_data/evppkey_rsa.txt618
-rw-r--r--test/recipes/30-test_evp_data/evppkey_rsa_common.txt1375
-rw-r--r--test/recipes/30-test_evp_data/evppkey_sm2.txt85
-rw-r--r--test/recipes/30-test_evp_data/evprand.txt79394
-rw-r--r--test/recipes/30-test_evp_extra.t24
-rw-r--r--test/recipes/30-test_evp_fetch_prov.t127
-rw-r--r--test/recipes/30-test_evp_kdf.t13
-rw-r--r--test/recipes/30-test_evp_libctx.t46
-rw-r--r--test/recipes/30-test_evp_pkey_dparam.t11
-rw-r--r--test/recipes/30-test_evp_pkey_provided.t19
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DH.priv.derbin0 -> 327 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DH.priv.pem9
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DH.priv.txt25
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DH.pub.derbin0 -> 557 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DH.pub.pem14
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DH.pub.txt22
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DSA.priv.derbin0 -> 617 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DSA.priv.pem15
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DSA.priv.txt72
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DSA.pub.derbin0 -> 842 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DSA.pub.pem20
-rw-r--r--test/recipes/30-test_evp_pkey_provided/DSA.pub.txt68
-rw-r--r--test/recipes/30-test_evp_pkey_provided/EC.priv.derbin0 -> 138 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/EC.priv.pem5
-rw-r--r--test/recipes/30-test_evp_pkey_provided/EC.priv.txt13
-rw-r--r--test/recipes/30-test_evp_pkey_provided/EC.pub.derbin0 -> 91 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/EC.pub.pem4
-rw-r--r--test/recipes/30-test_evp_pkey_provided/EC.pub.txt9
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED25519.priv.derbin0 -> 48 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED25519.priv.pem3
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED25519.priv.txt9
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED25519.pub.derbin0 -> 44 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED25519.pub.pem3
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED25519.pub.txt5
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED448.priv.derbin0 -> 73 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED448.priv.pem4
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED448.priv.txt11
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED448.pub.derbin0 -> 69 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED448.pub.pem4
-rw-r--r--test/recipes/30-test_evp_pkey_provided/ED448.pub.txt6
-rw-r--r--test/recipes/30-test_evp_pkey_provided/RSA.priv.derbin0 -> 70 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/RSA.priv.pem4
-rw-r--r--test/recipes/30-test_evp_pkey_provided/RSA.priv.txt9
-rw-r--r--test/recipes/30-test_evp_pkey_provided/RSA.pub.derbin0 -> 34 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/RSA.pub.pem3
-rw-r--r--test/recipes/30-test_evp_pkey_provided/RSA.pub.txt3
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X25519.priv.derbin0 -> 48 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X25519.priv.pem3
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X25519.priv.txt9
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X25519.pub.derbin0 -> 44 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X25519.pub.pem3
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X25519.pub.txt5
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X448.priv.derbin0 -> 72 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X448.priv.pem4
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X448.priv.txt11
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X448.pub.derbin0 -> 68 bytes
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X448.pub.pem4
-rw-r--r--test/recipes/30-test_evp_pkey_provided/X448.pub.txt6
-rw-r--r--test/recipes/30-test_pbelu.t12
-rw-r--r--test/recipes/30-test_pkey_meth.t12
-rw-r--r--test/recipes/30-test_pkey_meth_kdf.t12
-rw-r--r--test/recipes/30-test_prov_config.t35
-rw-r--r--test/recipes/30-test_provider_status.t49
-rw-r--r--test/recipes/40-test_rehash.t98
-rw-r--r--test/recipes/60-test_x509_check_cert_pkey.t65
-rw-r--r--test/recipes/60-test_x509_dup_cert.t17
-rw-r--r--test/recipes/60-test_x509_store.t53
-rw-r--r--test/recipes/60-test_x509_time.t12
-rw-r--r--test/recipes/61-test_bio_prefix.t55
-rw-r--r--test/recipes/61-test_bio_prefix_data/args1.pl6
-rw-r--r--test/recipes/61-test_bio_prefix_data/args2.pl3
-rw-r--r--test/recipes/61-test_bio_prefix_data/in1.txt1
-rw-r--r--test/recipes/61-test_bio_prefix_data/in2.txt1
-rw-r--r--test/recipes/61-test_bio_prefix_data/out1.txt1
-rw-r--r--test/recipes/61-test_bio_prefix_data/out2.txt1
-rw-r--r--test/recipes/61-test_bio_readbuffer.t29
-rw-r--r--test/recipes/65-test_cmp_asn.t22
-rw-r--r--test/recipes/65-test_cmp_client.t42
-rw-r--r--test/recipes/65-test_cmp_client_data/client.crt13
-rw-r--r--test/recipes/65-test_cmp_client_data/client.csrbin0 -> 424 bytes
-rw-r--r--test/recipes/65-test_cmp_client_data/client.key7
-rw-r--r--test/recipes/65-test_cmp_client_data/server.crt17
-rw-r--r--test/recipes/65-test_cmp_client_data/server.key27
-rw-r--r--test/recipes/65-test_cmp_ctx.t24
-rw-r--r--test/recipes/65-test_cmp_hdr.t22
-rw-r--r--test/recipes/65-test_cmp_msg.t41
-rw-r--r--test/recipes/65-test_cmp_msg_data/new.key28
-rw-r--r--test/recipes/65-test_cmp_msg_data/pkcs10.derbin0 -> 615 bytes
-rw-r--r--test/recipes/65-test_cmp_msg_data/server.crt17
-rw-r--r--test/recipes/65-test_cmp_protect.t51
-rw-r--r--test/recipes/65-test_cmp_protect_data/EndEntity1.crt16
-rw-r--r--test/recipes/65-test_cmp_protect_data/EndEntity2.crt13
-rw-r--r--test/recipes/65-test_cmp_protect_data/IP_PBM.derbin0 -> 2107 bytes
-rw-r--r--test/recipes/65-test_cmp_protect_data/IP_PBM.txt1
-rw-r--r--test/recipes/65-test_cmp_protect_data/IR_protected.derbin0 -> 968 bytes
-rw-r--r--test/recipes/65-test_cmp_protect_data/IR_unprotected.derbin0 -> 838 bytes
-rw-r--r--test/recipes/65-test_cmp_protect_data/Intermediate_CA.crt12
-rw-r--r--test/recipes/65-test_cmp_protect_data/Root_CA.crt17
-rw-r--r--test/recipes/65-test_cmp_protect_data/server.crt17
-rw-r--r--test/recipes/65-test_cmp_protect_data/server.pem27
-rw-r--r--test/recipes/65-test_cmp_server.t40
-rw-r--r--test/recipes/65-test_cmp_server_data/CR_protected_PBM_1234.derbin0 -> 420 bytes
-rw-r--r--test/recipes/65-test_cmp_status.t22
-rw-r--r--test/recipes/65-test_cmp_vfy.t51
-rw-r--r--test/recipes/65-test_cmp_vfy_data/EndEntity1.crt16
-rw-r--r--test/recipes/65-test_cmp_vfy_data/EndEntity2.crt13
-rw-r--r--test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.derbin0 -> 1801 bytes
-rw-r--r--test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.txt2
-rw-r--r--test/recipes/65-test_cmp_vfy_data/IR_protected.derbin0 -> 968 bytes
-rw-r--r--test/recipes/65-test_cmp_vfy_data/IR_protected_0_extraCerts.derbin0 -> 1087 bytes
-rw-r--r--test/recipes/65-test_cmp_vfy_data/IR_protected_2_extraCerts.derbin0 -> 2833 bytes
-rw-r--r--test/recipes/65-test_cmp_vfy_data/IR_rmprotection.derbin0 -> 1098 bytes
-rw-r--r--test/recipes/65-test_cmp_vfy_data/IR_unprotected.derbin0 -> 838 bytes
-rw-r--r--test/recipes/65-test_cmp_vfy_data/Intermediate_CA.crt12
-rw-r--r--test/recipes/65-test_cmp_vfy_data/Root_CA.crt17
-rw-r--r--test/recipes/65-test_cmp_vfy_data/chain.txt4
-rw-r--r--test/recipes/65-test_cmp_vfy_data/client.crt17
-rw-r--r--test/recipes/65-test_cmp_vfy_data/insta.cert.pem25
-rw-r--r--test/recipes/65-test_cmp_vfy_data/insta.priv.pem27
-rw-r--r--test/recipes/65-test_cmp_vfy_data/insta_ca.cert.pem22
-rw-r--r--test/recipes/65-test_cmp_vfy_data/server.crt17
-rw-r--r--test/recipes/65-test_cmp_vfy_data/server.key27
-rw-r--r--test/recipes/66-test_ossl_store.t22
-rw-r--r--test/recipes/66-test_ossl_store_data/DH-params.pem8
-rw-r--r--test/recipes/66-test_ossl_store_data/DHX-params.pem14
-rw-r--r--test/recipes/66-test_ossl_store_data/DSA-params.pem14
-rw-r--r--test/recipes/70-test_asyncio.t21
-rw-r--r--test/recipes/70-test_bad_dtls.t20
-rw-r--r--test/recipes/70-test_clienthello.t25
-rw-r--r--test/recipes/70-test_comp.t110
-rw-r--r--test/recipes/70-test_key_share.t475
-rw-r--r--test/recipes/70-test_packet.t12
-rw-r--r--test/recipes/70-test_recordlen.t21
-rw-r--r--test/recipes/70-test_renegotiation.t151
-rw-r--r--test/recipes/70-test_servername.t26
-rw-r--r--test/recipes/70-test_sslcbcpadding.t133
-rw-r--r--test/recipes/70-test_sslcertstatus.t67
-rw-r--r--test/recipes/70-test_sslextension.t270
-rw-r--r--test/recipes/70-test_sslmessages.t430
-rw-r--r--test/recipes/70-test_sslrecords.t721
-rw-r--r--test/recipes/70-test_sslsessiontick.t273
-rw-r--r--test/recipes/70-test_sslsigalgs.t496
-rw-r--r--test/recipes/70-test_sslsignature.t146
-rw-r--r--test/recipes/70-test_sslskewith0p.t66
-rw-r--r--test/recipes/70-test_sslversions.t190
-rw-r--r--test/recipes/70-test_sslvertol.t138
-rw-r--r--test/recipes/70-test_tls13alerts.t56
-rw-r--r--test/recipes/70-test_tls13cookie.t121
-rw-r--r--test/recipes/70-test_tls13downgrade.t129
-rw-r--r--test/recipes/70-test_tls13hrr.t176
-rw-r--r--test/recipes/70-test_tls13kexmodes.t375
-rw-r--r--test/recipes/70-test_tls13messages.t392
-rw-r--r--test/recipes/70-test_tls13psk.t159
-rw-r--r--test/recipes/70-test_tlsextms.t257
-rw-r--r--test/recipes/70-test_verify_extra.t17
-rw-r--r--test/recipes/70-test_wpacket.t20
-rw-r--r--test/recipes/71-test_ssl_ctx.t16
-rw-r--r--test/recipes/79-test_http.t28
-rw-r--r--test/recipes/80-test_ca.t287
-rw-r--r--test/recipes/80-test_ca_data/revoked.key27
-rw-r--r--test/recipes/80-test_cipherbytes.t26
-rw-r--r--test/recipes/80-test_cipherlist.t31
-rw-r--r--test/recipes/80-test_ciphername.t27
-rw-r--r--test/recipes/80-test_cmp_http.t298
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/12345.txt1
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/big_issuing.crt1577
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/big_root.crt1554
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/big_server.crt1550
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/big_trusted.crt1552
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/csr.pem17
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/empty.txt0
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/issuing.crt22
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/issuing_expired.crt22
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/new.key27
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/new_pass_12345.key30
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/new_pub.key9
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/random.binbin0 -> 102400 bytes
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/root.crt22
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/root_expired.crt21
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/server.cnf16
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/server.crt24
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/server.key28
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/signer.crt68
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/signer.key27
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/signer.p12bin0 -> 5475 bytes
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/signer_issuing.crt45
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/signer_only.crt21
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/signer_root.crt22
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/test.cnf141
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/trusted.crt23
-rw-r--r--test/recipes/80-test_cmp_http_data/Mock/wrong_csr.pem21
-rw-r--r--test/recipes/80-test_cmp_http_data/test_commands.csv64
-rw-r--r--test/recipes/80-test_cmp_http_data/test_connection.csv49
-rw-r--r--test/recipes/80-test_cmp_http_data/test_credentials.csv46
-rw-r--r--test/recipes/80-test_cmp_http_data/test_enrollment.csv114
-rw-r--r--test/recipes/80-test_cmp_http_data/test_verification.csv50
-rw-r--r--test/recipes/80-test_cms.t1071
-rw-r--r--test/recipes/80-test_cms_data/bad_signtime_attr.cmsbin0 -> 1524 bytes
-rw-r--r--test/recipes/80-test_cms_data/ciphertext_from_1_1_1.cms20
-rw-r--r--test/recipes/80-test_cms_data/ct_multiple_attr.cmsbin0 -> 1549 bytes
-rw-r--r--test/recipes/80-test_cms_data/no_ct_attr.cmsbin0 -> 1496 bytes
-rw-r--r--test/recipes/80-test_cms_data/no_md_attr.cmsbin0 -> 1473 bytes
-rw-r--r--test/recipes/80-test_cms_data/pkcs7-md4.pem32
-rw-r--r--test/recipes/80-test_cmsapi.t22
-rw-r--r--test/recipes/80-test_cmsapi_data/encryptedData.derbin0 -> 82 bytes
-rw-r--r--test/recipes/80-test_ct.t17
-rw-r--r--test/recipes/80-test_dane.t28
-rw-r--r--test/recipes/80-test_dtls.t20
-rw-r--r--test/recipes/80-test_dtls_mtu.t21
-rw-r--r--test/recipes/80-test_dtlsv1listen.t12
-rw-r--r--test/recipes/80-test_ocsp.t228
-rw-r--r--test/recipes/80-test_ocsp_data/cert.pem19
-rw-r--r--test/recipes/80-test_ocsp_data/key.pem28
-rw-r--r--test/recipes/80-test_pkcs12.t172
-rw-r--r--test/recipes/80-test_pkcs12_data/bad1.p12bin0 -> 85 bytes
-rw-r--r--test/recipes/80-test_pkcs12_data/bad2.p12bin0 -> 104 bytes
-rw-r--r--test/recipes/80-test_pkcs12_data/bad3.p12bin0 -> 104 bytes
-rw-r--r--test/recipes/80-test_policy_tree.t43
-rw-r--r--test/recipes/80-test_policy_tree_data/large_leaf.pem11
-rw-r--r--test/recipes/80-test_policy_tree_data/large_policy_tree.pem434
-rw-r--r--test/recipes/80-test_policy_tree_data/small_leaf.pem11
-rw-r--r--test/recipes/80-test_policy_tree_data/small_policy_tree.pem70
-rw-r--r--test/recipes/80-test_ssl_new.t188
-rw-r--r--test/recipes/80-test_ssl_old.t651
-rw-r--r--test/recipes/80-test_ssl_old_data/dsa2048.pem14
-rw-r--r--test/recipes/80-test_ssl_test_ctx.t19
-rw-r--r--test/recipes/80-test_sslcorrupt.t20
-rw-r--r--test/recipes/80-test_tsa.t250
-rw-r--r--test/recipes/80-test_tsa_data/all-zero.tsqbin0 -> 59 bytes
-rw-r--r--test/recipes/80-test_tsa_data/comodo-aaa.pem25
-rw-r--r--test/recipes/80-test_tsa_data/sectigo-all-zero.tsrbin0 -> 4981 bytes
-rw-r--r--test/recipes/80-test_tsa_data/sectigo-signer.pem40
-rw-r--r--test/recipes/80-test_tsa_data/sectigo-time-stamping-ca.pem39
-rw-r--r--test/recipes/80-test_tsa_data/user-trust-ca-aaa.pem32
-rw-r--r--test/recipes/80-test_tsa_data/user-trust-ca.pem34
-rw-r--r--test/recipes/80-test_x509aux.t30
-rw-r--r--test/recipes/81-test_cmp_cli.t89
-rw-r--r--test/recipes/90-test_asn1_time.t12
-rw-r--r--test/recipes/90-test_async.t12
-rw-r--r--test/recipes/90-test_bio_enc.t12
-rw-r--r--test/recipes/90-test_bio_memleak.t12
-rw-r--r--test/recipes/90-test_constant_time.t12
-rw-r--r--test/recipes/90-test_fatalerr.t21
-rw-r--r--test/recipes/90-test_fipsload.t31
-rw-r--r--test/recipes/90-test_gmdiff.t12
-rw-r--r--test/recipes/90-test_gost_data/server-cert2001.pem13
-rw-r--r--test/recipes/90-test_gost_data/server-cert2012.pem13
-rw-r--r--test/recipes/90-test_gost_data/server-key2001.pem4
-rw-r--r--test/recipes/90-test_gost_data/server-key2012.pem4
-rw-r--r--test/recipes/90-test_ige.t22
-rw-r--r--test/recipes/90-test_includes.t30
-rw-r--r--test/recipes/90-test_includes_data/conf-includes/includes1.cnf33
-rw-r--r--test/recipes/90-test_includes_data/conf-includes/includes2.cnf53
-rw-r--r--test/recipes/90-test_includes_data/incdir.cnf6
-rw-r--r--test/recipes/90-test_includes_data/includes-broken.cnf5
-rw-r--r--test/recipes/90-test_includes_data/includes-eq-ws.cnf5
-rw-r--r--test/recipes/90-test_includes_data/includes-eq.cnf5
-rw-r--r--test/recipes/90-test_includes_data/includes-file.cnf5
-rw-r--r--test/recipes/90-test_includes_data/includes.cnf5
-rw-r--r--test/recipes/90-test_includes_data/vms-includes-file.cnf5
-rw-r--r--test/recipes/90-test_includes_data/vms-includes.cnf5
-rw-r--r--test/recipes/90-test_memleak.t19
-rw-r--r--test/recipes/90-test_overhead.t17
-rw-r--r--test/recipes/90-test_secmem.t12
-rw-r--r--test/recipes/90-test_shlibload.t74
-rw-r--r--test/recipes/90-test_srp.t12
-rw-r--r--test/recipes/90-test_sslapi.t54
-rw-r--r--test/recipes/90-test_sslapi_data/dhparams.pem122
-rw-r--r--test/recipes/90-test_sslapi_data/passwd.txt1
-rw-r--r--test/recipes/90-test_sslbuffers.t21
-rw-r--r--test/recipes/90-test_store.t604
-rw-r--r--test/recipes/90-test_store_cases.t36
-rw-r--r--test/recipes/90-test_store_cases_data/garbage-pkcs12.p121
-rw-r--r--test/recipes/90-test_store_data/dsaparam.pem14
-rw-r--r--test/recipes/90-test_store_data/rsa-key-2432.pem32
-rw-r--r--test/recipes/90-test_store_data/testrsa.msbbin0 -> 308 bytes
-rw-r--r--test/recipes/90-test_store_data/testrsa.pvkbin0 -> 348 bytes
-rw-r--r--test/recipes/90-test_sysdefault.t23
-rw-r--r--test/recipes/90-test_threads.t56
-rw-r--r--test/recipes/90-test_threads_data/rsakey.pem28
-rw-r--r--test/recipes/90-test_time_offset.t12
-rw-r--r--test/recipes/90-test_tls13ccs.t22
-rw-r--r--test/recipes/90-test_tls13encryption.t20
-rw-r--r--test/recipes/90-test_tls13secrets.t22
-rw-r--r--test/recipes/90-test_traceapi.t12
-rw-r--r--test/recipes/90-test_v3name.t12
-rw-r--r--test/recipes/91-test_pkey_check.t106
-rw-r--r--test/recipes/91-test_pkey_check_data/dhpkey.pem14
-rw-r--r--test/recipes/91-test_pkey_check_data/dsapub.pem12
-rw-r--r--test/recipes/91-test_pkey_check_data/dsapub_noparam.derbin0 -> 108 bytes
-rw-r--r--test/recipes/91-test_pkey_check_data/ec_p256_bad_0.pem4
-rw-r--r--test/recipes/91-test_pkey_check_data/ec_p256_bad_1.pem4
-rw-r--r--test/recipes/91-test_pkey_check_data/rsapub_17k.pem48
-rw-r--r--test/recipes/91-test_pkey_check_data/sm2_bad_0.pem4
-rw-r--r--test/recipes/91-test_pkey_check_data/sm2_bad_1.pem4
-rw-r--r--test/recipes/91-test_pkey_check_data/sm2_bad_neg1.pem4
-rw-r--r--test/recipes/95-test_external_gost_engine.t28
-rwxr-xr-xtest/recipes/95-test_external_gost_engine_data/gost_engine.sh55
-rw-r--r--test/recipes/95-test_external_krb5.t27
-rwxr-xr-xtest/recipes/95-test_external_krb5_data/krb5.sh23
-rw-r--r--test/recipes/95-test_external_pyca.t28
-rwxr-xr-xtest/recipes/95-test_external_pyca_data/cryptography.sh69
-rw-r--r--test/recipes/99-test_ecstress.t23
-rw-r--r--test/recipes/99-test_fuzz_asn1.t22
-rw-r--r--test/recipes/99-test_fuzz_asn1parse.t22
-rw-r--r--test/recipes/99-test_fuzz_bignum.t22
-rw-r--r--test/recipes/99-test_fuzz_bndiv.t22
-rw-r--r--test/recipes/99-test_fuzz_client.t22
-rw-r--r--test/recipes/99-test_fuzz_cmp.t25
-rw-r--r--test/recipes/99-test_fuzz_cms.t25
-rw-r--r--test/recipes/99-test_fuzz_conf.t22
-rw-r--r--test/recipes/99-test_fuzz_crl.t22
-rw-r--r--test/recipes/99-test_fuzz_ct.t25
-rw-r--r--test/recipes/99-test_fuzz_server.t22
-rw-r--r--test/recipes/99-test_fuzz_x509.t25
-rw-r--r--test/recipes/fuzz.pl26
-rw-r--r--test/recipes/ocsp-response.derbin0 -> 1517 bytes
-rw-r--r--test/recipes/tconversion.pl160
-rw-r--r--test/recordlentest.c204
-rw-r--r--test/recursive.cnf8
-rw-r--r--test/rsa_complex.c32
-rw-r--r--test/rsa_mp_test.c296
-rw-r--r--test/rsa_sp800_56b_test.c548
-rw-r--r--test/rsa_test.c516
-rw-r--r--test/run_tests.pl339
-rw-r--r--test/sanitytest.c143
-rw-r--r--test/secmemtest.c183
-rw-r--r--test/serverinfo.pem16
-rw-r--r--test/serverinfo2.pem8
-rw-r--r--test/servername_test.c268
-rw-r--r--test/session.pem31
-rw-r--r--test/sha_test.c110
-rw-r--r--test/shibboleth.pfxbin0 -> 2519 bytes
-rw-r--r--test/shlibloadtest.c292
-rw-r--r--test/simpledynamic.c78
-rw-r--r--test/simpledynamic.h51
-rw-r--r--test/siphash_internal_test.c291
-rw-r--r--test/sm2_internal_test.c428
-rw-r--r--test/sm3_internal_test.c84
-rw-r--r--test/sm4_internal_test.c86
-rw-r--r--test/smcont.binbin0 -> 8000 bytes
-rw-r--r--test/smcont.txt1
-rw-r--r--test/smcont_zero.txt0
-rw-r--r--test/smime-certs/badrsa.pem18
-rw-r--r--test/smime-certs/ca.cnf68
-rw-r--r--test/smime-certs/mksmime-certs.sh85
-rw-r--r--test/smime-certs/smdh.pem47
-rw-r--r--test/smime-certs/smdsa1.pem47
-rw-r--r--test/smime-certs/smdsa2.pem47
-rw-r--r--test/smime-certs/smdsa3.pem47
-rw-r--r--test/smime-certs/smdsap.pem9
-rw-r--r--test/smime-certs/smec1.pem22
-rw-r--r--test/smime-certs/smec2.pem23
-rw-r--r--test/smime-certs/smec3.pem22
-rw-r--r--test/smime-certs/smroot.pem49
-rw-r--r--test/smime-certs/smrsa1.pem49
-rw-r--r--test/smime-certs/smrsa2.pem49
-rw-r--r--test/smime-certs/smrsa3-cert.pem21
-rw-r--r--test/smime-certs/smrsa3-key.pem28
-rw-r--r--test/smime-certs/smrsa3.pem49
-rw-r--r--test/smime-eml/SignedInvalidMappingFromanyPolicyTest7.eml93
-rw-r--r--test/sparse_array_test.c197
-rw-r--r--test/srptest.c282
-rw-r--r--test/ssl-tests/01-simple.cnf102
-rw-r--r--test/ssl-tests/01-simple.cnf.in54
-rw-r--r--test/ssl-tests/02-protocol-version.cnf18822
-rw-r--r--test/ssl-tests/02-protocol-version.cnf.in21
-rw-r--r--test/ssl-tests/03-custom_verify.cnf266
-rw-r--r--test/ssl-tests/03-custom_verify.cnf.in159
-rw-r--r--test/ssl-tests/04-client_auth.cnf1132
-rw-r--r--test/ssl-tests/04-client_auth.cnf.in218
-rw-r--r--test/ssl-tests/05-sni.cnf308
-rw-r--r--test/ssl-tests/05-sni.cnf.in173
-rw-r--r--test/ssl-tests/06-sni-ticket.cnf767
-rw-r--r--test/ssl-tests/06-sni-ticket.cnf.in101
-rw-r--r--test/ssl-tests/07-dtls-protocol-version.cnf1820
-rw-r--r--test/ssl-tests/07-dtls-protocol-version.cnf.in21
-rw-r--r--test/ssl-tests/08-npn.cnf816
-rw-r--r--test/ssl-tests/08-npn.cnf.in443
-rw-r--r--test/ssl-tests/09-alpn.cnf619
-rw-r--r--test/ssl-tests/09-alpn.cnf.in325
-rw-r--r--test/ssl-tests/10-resumption.cnf2439
-rw-r--r--test/ssl-tests/10-resumption.cnf.in21
-rw-r--r--test/ssl-tests/11-dtls_resumption.cnf620
-rw-r--r--test/ssl-tests/11-dtls_resumption.cnf.in21
-rw-r--r--test/ssl-tests/12-ct.cnf191
-rw-r--r--test/ssl-tests/12-ct.cnf.in121
-rw-r--r--test/ssl-tests/13-fragmentation.cnf577
-rw-r--r--test/ssl-tests/13-fragmentation.cnf.in268
-rw-r--r--test/ssl-tests/14-curves.cnf2809
-rw-r--r--test/ssl-tests/14-curves.cnf.in177
-rw-r--r--test/ssl-tests/15-certstatus.cnf62
-rw-r--r--test/ssl-tests/15-certstatus.cnf.in45
-rw-r--r--test/ssl-tests/16-dtls-certstatus.cnf62
-rw-r--r--test/ssl-tests/16-dtls-certstatus.cnf.in97
-rw-r--r--test/ssl-tests/17-renegotiate.cnf554
-rw-r--r--test/ssl-tests/17-renegotiate.cnf.in316
-rw-r--r--test/ssl-tests/18-dtls-renegotiate.cnf285
-rw-r--r--test/ssl-tests/18-dtls-renegotiate.cnf.in210
-rw-r--r--test/ssl-tests/19-mac-then-encrypt.cnf244
-rw-r--r--test/ssl-tests/19-mac-then-encrypt.cnf.in155
-rw-r--r--test/ssl-tests/20-cert-select.cnf1842
-rw-r--r--test/ssl-tests/20-cert-select.cnf.in991
-rw-r--r--test/ssl-tests/21-key-update.cnf112
-rw-r--r--test/ssl-tests/21-key-update.cnf.in62
-rw-r--r--test/ssl-tests/22-compression.cnf216
-rw-r--r--test/ssl-tests/22-compression.cnf.in127
-rw-r--r--test/ssl-tests/23-srp.cnf148
-rw-r--r--test/ssl-tests/23-srp.cnf.in107
-rw-r--r--test/ssl-tests/24-padding.cnf34
-rw-r--r--test/ssl-tests/24-padding.cnf.in25
-rw-r--r--test/ssl-tests/25-cipher.cnf244
-rw-r--r--test/ssl-tests/25-cipher.cnf.in159
-rw-r--r--test/ssl-tests/26-tls13_client_auth.cnf488
-rw-r--r--test/ssl-tests/26-tls13_client_auth.cnf.in302
-rw-r--r--test/ssl-tests/27-ticket-appdata.cnf146
-rw-r--r--test/ssl-tests/27-ticket-appdata.cnf.in100
-rw-r--r--test/ssl-tests/28-seclevel.cnf150
-rw-r--r--test/ssl-tests/28-seclevel.cnf.in85
-rw-r--r--test/ssl-tests/29-dtls-sctp-label-bug.cnf116
-rw-r--r--test/ssl-tests/29-dtls-sctp-label-bug.cnf.in67
-rw-r--r--test/ssl-tests/30-extended-master-secret.cnf203
-rw-r--r--test/ssl-tests/30-extended-master-secret.cnf.in122
-rw-r--r--test/ssl-tests/protocol_version.pm391
-rw-r--r--test/ssl-tests/ssltests_base.pm33
-rw-r--r--test/ssl_cert_table_internal_test.c64
-rw-r--r--test/ssl_ctx_test.c76
-rw-r--r--test/ssl_old_test.c3003
-rw-r--r--test/ssl_test.c570
-rw-r--r--test/ssl_test.tmpl126
-rw-r--r--test/ssl_test_ctx_test.c264
-rw-r--r--test/ssl_test_ctx_test.cnf97
-rw-r--r--test/sslapitest.c10749
-rw-r--r--test/sslbuffertest.c183
-rw-r--r--test/sslcorrupttest.c280
-rw-r--r--test/stack_test.c388
-rw-r--r--test/sysdefault.cnf23
-rw-r--r--test/sysdefaulttest.c50
-rw-r--r--test/test.cnf74
-rw-r--r--test/test_asn1_parse.cnf12
-rw-r--r--test/test_test.c579
-rw-r--r--test/testcrl.pem16
-rw-r--r--test/testdsa.pem12
-rw-r--r--test/testdsapub.pem12
-rw-r--r--test/testec-p112r1.pem7
-rw-r--r--test/testec-p256.pem5
-rw-r--r--test/testecpub-p256.pem4
-rw-r--r--test/tested25519.pem3
-rw-r--r--test/tested25519pub.pem3
-rw-r--r--test/tested448.pem4
-rw-r--r--test/tested448pub.pem4
-rw-r--r--test/testp7.pem46
-rw-r--r--test/testreq2.pem7
-rw-r--r--test/testrsa.pem10
-rw-r--r--test/testrsa2048.pem29
-rw-r--r--test/testrsa2048pub.pem9
-rw-r--r--test/testrsa_withattrs.derbin0 -> 1277 bytes
-rw-r--r--test/testrsa_withattrs.pem29
-rw-r--r--test/testrsapss.pem28
-rw-r--r--test/testrsapssmandatory.pem29
-rw-r--r--test/testrsapub.pem4
-rw-r--r--test/testsid.pem38
-rw-r--r--test/testutil.h635
-rw-r--r--test/testutil/apps_shims.c56
-rw-r--r--test/testutil/basic_output.c102
-rw-r--r--test/testutil/cb.c16
-rw-r--r--test/testutil/driver.c473
-rw-r--r--test/testutil/fake_random.c231
-rw-r--r--test/testutil/format_output.c535
-rw-r--r--test/testutil/load.c105
-rw-r--r--test/testutil/main.c41
-rw-r--r--test/testutil/options.c79
-rw-r--r--test/testutil/output.c58
-rw-r--r--test/testutil/output.h68
-rw-r--r--test/testutil/provider.c242
-rw-r--r--test/testutil/random.c40
-rw-r--r--test/testutil/stanza.c159
-rw-r--r--test/testutil/test_cleanup.c14
-rw-r--r--test/testutil/test_options.c21
-rw-r--r--test/testutil/tests.c472
-rw-r--r--test/testutil/testutil_init.c145
-rw-r--r--test/testutil/tu_local.h61
-rw-r--r--test/testx509.pem10
-rw-r--r--test/threadstest.c728
-rw-r--r--test/threadstest.h82
-rw-r--r--test/threadstest_fips.c49
-rw-r--r--test/time_offset_test.c113
-rw-r--r--test/tls-provider.c857
-rw-r--r--test/tls13ccstest.c512
-rw-r--r--test/tls13encryptiontest.c417
-rw-r--r--test/tls13secretstest.c408
-rw-r--r--test/trace_api_test.c163
-rw-r--r--test/uitest.c94
-rw-r--r--test/upcallstest.c121
-rw-r--r--test/user_property_test.c132
-rw-r--r--test/v3-cert1.pem16
-rw-r--r--test/v3-cert2.pem16
-rw-r--r--test/v3_ca_exts.cnf5
-rw-r--r--test/v3ext.c478
-rw-r--r--test/v3nametest.c716
-rw-r--r--test/verify_extra_test.c341
-rw-r--r--test/versions.c21
-rw-r--r--test/wpackettest.c445
-rw-r--r--test/x509_check_cert_pkey_test.c179
-rw-r--r--test/x509_dup_cert_test.c53
-rw-r--r--test/x509_internal_test.c110
-rw-r--r--test/x509_time_test.c604
-rw-r--r--test/x509aux.c186
-rw-r--r--tools/build.info7
-rw-r--r--tools/c_rehash.in251
-rw-r--r--util/add-depends.pl376
-rw-r--r--util/build.info11
-rwxr-xr-xutil/c-compress-test.pl54
-rw-r--r--util/cavs-to-evptest.pl121
-rw-r--r--util/check-format-test-negatives.c893
-rw-r--r--util/check-format-test-positives.c358
-rwxr-xr-xutil/check-format.pl1272
-rwxr-xr-xutil/check-malloc-errs16
-rwxr-xr-xutil/ck_errf.pl153
-rw-r--r--util/copy.pl84
-rw-r--r--util/dofile.pl112
-rw-r--r--util/echo.pl12
-rw-r--r--util/engines.num2
-rwxr-xr-xutil/err-to-raise22
-rwxr-xr-xutil/find-doc-nits1234
-rwxr-xr-xutil/find-unused-errs54
-rwxr-xr-xutil/fips-checksums.sh31
-rw-r--r--util/fix-deprecation114
-rwxr-xr-xutil/fix-includes19
-rw-r--r--util/fix-includes.sed6
-rw-r--r--util/indent.pro644
-rwxr-xr-xutil/lang-compress.pl185
-rw-r--r--util/libcrypto.num5431
-rw-r--r--util/libssl.num522
-rw-r--r--util/local_shlib.com.in31
-rw-r--r--util/markdownlint.rb24
-rwxr-xr-xutil/merge-err-lines29
-rw-r--r--util/missingcrypto-internal.txt8
-rw-r--r--util/missingcrypto.txt1319
-rw-r--r--util/missingcrypto111.txt1743
-rw-r--r--util/missingmacro.txt169
-rw-r--r--util/missingmacro111.txt230
-rw-r--r--util/missingssl-internal.txt0
-rw-r--r--util/missingssl.txt33
-rw-r--r--util/missingssl111.txt58
-rw-r--r--util/mk-fipsmodule-cnf.pl44
-rwxr-xr-xutil/mkbuildinf.pl56
-rwxr-xr-xutil/mkdef.pl447
-rwxr-xr-xutil/mkdir-p.pl45
-rwxr-xr-xutil/mkerr.pl697
-rw-r--r--util/mknum.pl146
-rwxr-xr-xutil/mkpod2html.pl61
-rwxr-xr-xutil/mkrc.pl74
-rwxr-xr-xutil/opensslwrap.sh29
-rw-r--r--util/other-internal.syms5
-rw-r--r--util/other.syms688
-rw-r--r--util/perl/OpenSSL/Config/Query.pm177
-rw-r--r--util/perl/OpenSSL/Glob.pm21
-rw-r--r--util/perl/OpenSSL/OID.pm307
-rw-r--r--util/perl/OpenSSL/Ordinals.pm1087
-rw-r--r--util/perl/OpenSSL/ParseC.pm1209
-rw-r--r--util/perl/OpenSSL/Template.pm150
-rw-r--r--util/perl/OpenSSL/Test.pm1301
-rw-r--r--util/perl/OpenSSL/Test/Simple.pm91
-rw-r--r--util/perl/OpenSSL/Test/Utils.pm241
-rw-r--r--util/perl/OpenSSL/Util.pm310
-rw-r--r--util/perl/OpenSSL/Util/Pod.pm193
-rwxr-xr-xutil/perl/OpenSSL/config.pm1038
-rw-r--r--util/perl/OpenSSL/copyright.pm43
-rw-r--r--util/perl/OpenSSL/fallback.pm127
-rw-r--r--util/perl/OpenSSL/stackhash.pm106
-rw-r--r--util/perl/TLSProxy/Alert.pm51
-rw-r--r--util/perl/TLSProxy/Certificate.pm214
-rw-r--r--util/perl/TLSProxy/CertificateRequest.pm105
-rw-r--r--util/perl/TLSProxy/CertificateVerify.pm96
-rw-r--r--util/perl/TLSProxy/ClientHello.pm258
-rw-r--r--util/perl/TLSProxy/EncryptedExtensions.pm110
-rw-r--r--util/perl/TLSProxy/Message.pm629
-rw-r--r--util/perl/TLSProxy/NewSessionTicket.pm81
-rw-r--r--util/perl/TLSProxy/Proxy.pm729
-rw-r--r--util/perl/TLSProxy/Record.pm401
-rw-r--r--util/perl/TLSProxy/ServerHello.pm236
-rw-r--r--util/perl/TLSProxy/ServerKeyExchange.pm157
-rw-r--r--util/perl/checkhandshake.pm232
-rw-r--r--util/providers.num1
-rwxr-xr-xutil/shlib_wrap.sh.in135
-rw-r--r--util/su-filter.pl264
-rw-r--r--util/unlocal_shlib.com.in27
-rwxr-xr-xutil/withlibctx.pl141
-rw-r--r--util/wrap.pl.in95
-rwxr-xr-xutil/write-man-symlinks48
2000 files changed, 451476 insertions, 795 deletions
diff --git a/CHANGES.md b/CHANGES.md
index f464b2320e9c..bd876eb89dd4 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -28,6 +28,90 @@ breaking changes, and mappings for the large list of deprecated functions.
[Migration guide]: https://github.com/openssl/openssl/tree/master/doc/man7/migration_guide.pod
+### Changes between 3.0.12 and 3.0.13 [30 Jan 2024]
+
+ * A file in PKCS12 format can contain certificates and keys and may come from
+ an untrusted source. The PKCS12 specification allows certain fields to be
+ NULL, but OpenSSL did not correctly check for this case. A fix has been
+ applied to prevent a NULL pointer dereference that results in OpenSSL
+ crashing. If an application processes PKCS12 files from an untrusted source
+ using the OpenSSL APIs then that application will be vulnerable to this
+ issue prior to this fix.
+
+ OpenSSL APIs that were vulnerable to this are: PKCS12_parse(),
+ PKCS12_unpack_p7data(), PKCS12_unpack_p7encdata(), PKCS12_unpack_authsafes()
+ and PKCS12_newpass().
+
+ We have also fixed a similar issue in SMIME_write_PKCS7(). However since this
+ function is related to writing data we do not consider it security
+ significant.
+
+ ([CVE-2024-0727])
+
+ *Matt Caswell*
+
+ * When function EVP_PKEY_public_check() is called on RSA public keys,
+ a computation is done to confirm that the RSA modulus, n, is composite.
+ For valid RSA keys, n is a product of two or more large primes and this
+ computation completes quickly. However, if n is an overly large prime,
+ then this computation would take a long time.
+
+ An application that calls EVP_PKEY_public_check() and supplies an RSA key
+ obtained from an untrusted source could be vulnerable to a Denial of Service
+ attack.
+
+ The function EVP_PKEY_public_check() is not called from other OpenSSL
+ functions however it is called from the OpenSSL pkey command line
+ application. For that reason that application is also vulnerable if used
+ with the "-pubin" and "-check" options on untrusted data.
+
+ To resolve this issue RSA keys larger than OPENSSL_RSA_MAX_MODULUS_BITS will
+ now fail the check immediately with an RSA_R_MODULUS_TOO_LARGE error reason.
+
+ ([CVE-2023-6237])
+
+ *Tomáš Mráz*
+
+ * Restore the encoding of SM2 PrivateKeyInfo and SubjectPublicKeyInfo to
+ have the contained AlgorithmIdentifier.algorithm set to id-ecPublicKey
+ rather than SM2.
+
+ *Richard Levitte*
+
+ * The POLY1305 MAC (message authentication code) implementation in OpenSSL
+ for PowerPC CPUs saves the contents of vector registers in different
+ order than they are restored. Thus the contents of some of these vector
+ registers is corrupted when returning to the caller. The vulnerable code is
+ used only on newer PowerPC processors supporting the PowerISA 2.07
+ instructions.
+
+ The consequences of this kind of internal application state corruption can
+ be various - from no consequences, if the calling application does not
+ depend on the contents of non-volatile XMM registers at all, to the worst
+ consequences, where the attacker could get complete control of the
+ application process. However unless the compiler uses the vector registers
+ for storing pointers, the most likely consequence, if any, would be an
+ incorrect result of some application dependent calculations or a crash
+ leading to a denial of service.
+
+ ([CVE-2023-6129])
+
+ *Rohan McLure*
+
+ * Fix excessive time spent in DH check / generation with large Q parameter
+ value.
+
+ Applications that use the functions DH_generate_key() to generate an
+ X9.42 DH key may experience long delays. Likewise, applications that use
+ DH_check_pub_key(), DH_check_pub_key_ex() or EVP_PKEY_public_check()
+ to check an X9.42 DH key or X9.42 DH parameters may experience long delays.
+ Where the key or parameters that are being checked have been obtained from
+ an untrusted source this may lead to a Denial of Service.
+
+ ([CVE-2023-5678])
+
+ *Richard Levitte*
+
### Changes between 3.0.11 and 3.0.12 [24 Oct 2023]
* Fix incorrect key and IV resizing issues when calling EVP_EncryptInit_ex2(),
@@ -19740,6 +19824,10 @@ ndif
<!-- Links -->
+[CVE-2024-0727]: https://www.openssl.org/news/vulnerabilities.html#CVE-2024-0727
+[CVE-2023-6237]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-6237
+[CVE-2023-6129]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-6129
+[CVE-2023-5678]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-5678
[CVE-2023-5363]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-5363
[CVE-2023-4807]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-4807
[CVE-2023-3817]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-3817
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index efb4be871695..15490fd9f620 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -9,22 +9,36 @@ Development is done on GitHub in the [openssl/openssl] repository.
[openssl/openssl]: <https://github.com/openssl/openssl>
-To request new features or report bugs, please open an issue on GitHub
+To request new a feature, ask a question, or report a bug,
+please open an [issue on GitHub](https://github.com/openssl/openssl/issues).
-To submit a patch, please open a pull request on GitHub. If you are thinking
-of making a large contribution, open an issue for it before starting work,
-to get comments from the community. Someone may be already working on
-the same thing or there may be reasons why that feature isn't implemented.
+To submit a patch or implement a new feature, please open a
+[pull request on GitHub](https://github.com/openssl/openssl/pulls).
+If you are thinking of making a large contribution,
+open an issue for it before starting work, to get comments from the community.
+Someone may be already working on the same thing,
+or there may be special reasons why a feature is not implemented.
To make it easier to review and accept your pull request, please follow these
guidelines:
1. Anything other than a trivial contribution requires a [Contributor
License Agreement] (CLA), giving us permission to use your code.
- If your contribution is too small to require a CLA (e.g. fixing a spelling
- mistake), place the text "`CLA: trivial`" on a line by itself separated by
- an empty line from the rest of the commit message. It is not sufficient to
- only place the text in the GitHub pull request description.
+ If your contribution is too small to require a CLA (e.g., fixing a spelling
+ mistake), then place the text "`CLA: trivial`" on a line by itself below
+ the rest of your commit message separated by an empty line, like this:
+
+ ```
+ One-line summary of trivial change
+
+ Optional main body of commit message. It might contain a sentence
+ or two explaining the trivial change.
+
+ CLA: trivial
+ ```
+
+ It is not sufficient to only place the text "`CLA: trivial`" in the GitHub
+ pull request description.
[Contributor License Agreement]: <https://www.openssl.org/policies/cla.html>
@@ -32,8 +46,8 @@ guidelines:
```
git commit --amend
- [add the line, save and quit the editor]
- git push -f
+ # add the line, save and quit the editor
+ git push -f [<repository> [<branch>]]
```
2. All source files should start with the following text (with
@@ -53,22 +67,24 @@ guidelines:
often. We do not accept merge commits, you will have to remove them
(usually by rebasing) before it will be acceptable.
- 4. Patches should follow our [coding style] and compile without warnings.
- Where `gcc` or `clang` is available you should use the
+ 4. Code provided should follow our [coding style] and compile without warnings.
+ There is a [Perl tool](util/check-format.pl) that helps
+ finding code formatting mistakes and other coding style nits.
+ Where `gcc` or `clang` is available, you should use the
`--strict-warnings` `Configure` option. OpenSSL compiles on many varied
- platforms: try to ensure you only use portable features. Clean builds via
- GitHub Actions and AppVeyor are required, and they are started automatically
- whenever a PR is created or updated.
+ platforms: try to ensure you only use portable features.
+ Clean builds via GitHub Actions are required. They are started automatically
+ whenever a PR is created or updated by committers.
[coding style]: https://www.openssl.org/policies/technical/coding-style.html
- 5. When at all possible, patches should include tests. These can
+ 5. When at all possible, code contributions should include tests. These can
either be added to an existing test, or completely new. Please see
[test/README.md](test/README.md) for information on the test framework.
6. New features or changed functionality must include
- documentation. Please look at the "pod" files in doc/man[1357] for
- examples of our style. Run "make doc-nits" to make sure that your
+ documentation. Please look at the `.pod` files in `doc/man[1357]` for
+ examples of our style. Run `make doc-nits` to make sure that your
documentation changes are clean.
7. For user visible changes (API changes, behaviour changes, ...),
@@ -78,7 +94,7 @@ guidelines:
Have a look through existing entries for inspiration.
Please note that this is NOT simply a copy of git-log one-liners.
Also note that security fixes get an entry in [CHANGES.md](CHANGES.md).
- This file helps users get more in depth information of what comes
+ This file helps users get more in-depth information of what comes
with a specific release without having to sift through the higher
noise ratio in git-log.
diff --git a/Configurations/00-base-templates.conf b/Configurations/00-base-templates.conf
new file mode 100644
index 000000000000..0e5d38d5a632
--- /dev/null
+++ b/Configurations/00-base-templates.conf
@@ -0,0 +1,141 @@
+# -*- Mode: perl -*-
+my %targets=(
+ DEFAULTS => {
+ template => 1,
+
+ cflags => "",
+ cppflags => "",
+ lflags => "",
+ defines => [],
+ includes => [],
+ lib_cflags => "",
+ lib_cppflags => "",
+ lib_defines => [],
+ thread_scheme => "(unknown)", # Assume we don't know
+ thread_defines => [],
+
+ unistd => "<unistd.h>",
+ shared_target => "",
+ shared_cflag => "",
+ shared_defines => [],
+ shared_ldflag => "",
+ shared_rcflag => "",
+
+ #### Defaults for the benefit of the config targets who don't inherit
+ #### a BASE and assume Unix defaults
+ #### THESE WILL DISAPPEAR IN OpenSSL 1.2
+ build_scheme => [ "unified", "unix" ],
+ build_file => "Makefile",
+
+ AR => "(unused)",
+ ARFLAGS => "(unused)",
+ CC => "cc",
+ HASHBANGPERL => "/usr/bin/env perl",
+ RANLIB => sub { which("$config{cross_compile_prefix}ranlib")
+ ? "ranlib" : "" },
+ RC => "windres",
+
+ #### THESE WILL BE ENABLED IN OpenSSL 1.2
+ #HASHBANGPERL => "PERL", # Only Unix actually cares
+ },
+
+ BASE_common => {
+ template => 1,
+
+ enable => [],
+ disable => [],
+
+ defines =>
+ sub {
+ my @defs = ( 'OPENSSL_BUILDING_OPENSSL' );
+ push @defs, "ZLIB" unless $disabled{zlib};
+ push @defs, "ZLIB_SHARED" unless $disabled{"zlib-dynamic"};
+ return [ @defs ];
+ },
+ includes =>
+ sub {
+ my @incs = ();
+ push @incs, $withargs{zlib_include}
+ if !$disabled{zlib} && $withargs{zlib_include};
+ return [ @incs ];
+ },
+ },
+
+ BASE_unix => {
+ inherit_from => [ "BASE_common" ],
+ template => 1,
+
+ AR => "ar",
+ ARFLAGS => "qc",
+ CC => "cc",
+ lflags =>
+ sub { $withargs{zlib_lib} ? "-L".$withargs{zlib_lib} : () },
+ ex_libs =>
+ sub { !defined($disabled{zlib})
+ && defined($disabled{"zlib-dynamic"})
+ ? "-lz" : () },
+ HASHBANGPERL => "/usr/bin/env perl", # Only Unix actually cares
+ RANLIB => sub { which("$config{cross_compile_prefix}ranlib")
+ ? "ranlib" : "" },
+ RC => "windres",
+
+ build_scheme => [ "unified", "unix" ],
+ build_file => "Makefile",
+
+ perl_platform => 'Unix',
+ },
+
+ BASE_Windows => {
+ inherit_from => [ "BASE_common" ],
+ template => 1,
+
+ lib_defines =>
+ sub {
+ my @defs = ();
+ unless ($disabled{"zlib-dynamic"}) {
+ my $zlib = $withargs{zlib_lib} // "ZLIB1";
+ push @defs, 'LIBZ=' . (quotify("perl", $zlib))[0];
+ }
+ return [ @defs ];
+ },
+ ex_libs =>
+ sub {
+ unless ($disabled{zlib}) {
+ if (defined($disabled{"zlib-dynamic"})) {
+ return $withargs{zlib_lib} // "ZLIB1";
+ }
+ }
+ return ();
+ },
+
+ MT => "mt",
+ MTFLAGS => "-nologo",
+ mtinflag => "-manifest ",
+ mtoutflag => "-outputresource:",
+
+ build_file => "makefile",
+ build_scheme => [ "unified", "windows" ],
+
+ perl_platform => 'Windows',
+ },
+
+ BASE_VMS => {
+ inherit_from => [ "BASE_common" ],
+ template => 1,
+
+ includes =>
+ add(sub {
+ my @incs = ();
+ # GNV$ZLIB_INCLUDE is the standard logical name for later
+ # zlib incarnations.
+ push @incs, 'GNV$ZLIB_INCLUDE:'
+ if !$disabled{zlib} && !$withargs{zlib_include};
+ return [ @incs ];
+ }),
+
+ build_file => "descrip.mms",
+ build_scheme => [ "unified", "VMS" ],
+
+ perl_platform => 'VMS',
+ },
+);
diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
new file mode 100644
index 000000000000..ff8af7146318
--- /dev/null
+++ b/Configurations/10-main.conf
@@ -0,0 +1,1955 @@
+## -*- mode: perl; -*-
+## Standard openssl configuration targets.
+
+# Helper functions for the Windows configs
+my $vc_win64a_info = {};
+sub vc_win64a_info {
+ unless (%$vc_win64a_info) {
+ if (`nasm -v 2>NUL` =~ /NASM version ([0-9]+\.[0-9]+)/ && $1 >= 2.0) {
+ $vc_win64a_info = { AS => "nasm",
+ ASFLAGS => "-g",
+ asflags => "-Ox -f win64 -DNEAR",
+ asoutflag => "-o ",
+ perlasm_scheme => "nasm" };
+ } elsif ($disabled{asm}) {
+ # assembler is still used to compile uplink shim
+ $vc_win64a_info = { AS => "ml64",
+ ASFLAGS => "/nologo /Zi",
+ asflags => "/c /Cp /Cx",
+ asoutflag => "/Fo",
+ perlasm_scheme => "masm" };
+ } else {
+ $die->("NASM not found - make sure it's installed and available on %PATH%\n");
+ $vc_win64a_info = { AS => "{unknown}",
+ ASFLAGS => "",
+ asflags => "",
+ asoutflag => "",
+ perlasm_scheme => "auto" };
+ }
+ }
+ return $vc_win64a_info;
+}
+
+my $vc_win32_info = {};
+sub vc_win32_info {
+ unless (%$vc_win32_info) {
+ my $ver=`nasm -v 2>NUL`;
+ my $vew=`nasmw -v 2>NUL`;
+ if ($ver ne "" || $vew ne "") {
+ $vc_win32_info = { AS => $ver ge $vew ? "nasm" : "nasmw",
+ ASFLAGS => "",
+ asflags => "-f win32",
+ asoutflag => "-o ",
+ perlasm_scheme => "win32n" };
+ } elsif ($disabled{asm}) {
+ # not actually used, uplink shim is inlined into C code
+ $vc_win32_info = { AS => "ml",
+ ASFLAGS => "/nologo /Zi",
+ asflags => "/Cp /coff /c /Cx",
+ asoutflag => "/Fo",
+ perlasm_scheme => "win32" };
+ } else {
+ $die->("NASM not found - make sure it's installed and available on %PATH%\n");
+ $vc_win32_info = { AS => "{unknown}",
+ ASFLAGS => "",
+ asflags => "",
+ asoutflag => "",
+ perlasm_scheme => "win32" };
+ }
+ }
+ return $vc_win32_info;
+}
+
+my $vc_wince_info = {};
+sub vc_wince_info {
+ unless (%$vc_wince_info) {
+ # sanity check
+ $die->('%OSVERSION% is not defined') if (!defined(env('OSVERSION')));
+ $die->('%PLATFORM% is not defined') if (!defined(env('PLATFORM')));
+ $die->('%TARGETCPU% is not defined') if (!defined(env('TARGETCPU')));
+
+ #
+ # Idea behind this is to mimic flags set by eVC++ IDE...
+ #
+ my $wcevers = env('OSVERSION'); # WCENNN
+ my $wcevernum;
+ my $wceverdotnum;
+ if ($wcevers =~ /^WCE([1-9])([0-9]{2})$/) {
+ $wcevernum = "$1$2";
+ $wceverdotnum = "$1.$2";
+ } else {
+ $die->('%OSVERSION% value is insane');
+ $wcevernum = "{unknown}";
+ $wceverdotnum = "{unknown}";
+ }
+ my $wcecdefs = "-D_WIN32_WCE=$wcevernum -DUNDER_CE=$wcevernum"; # -D_WIN32_WCE=NNN
+ my $wcelflag = "/subsystem:windowsce,$wceverdotnum"; # ...,N.NN
+
+ my $wceplatf = env('PLATFORM');
+
+ $wceplatf =~ tr/a-z0-9 /A-Z0-9_/;
+ $wcecdefs .= " -DWCE_PLATFORM_$wceplatf";
+
+ my $wcetgt = env('TARGETCPU'); # just shorter name...
+ SWITCH: for($wcetgt) {
+ /^X86/ && do { $wcecdefs.=" -Dx86 -D_X86_ -D_i386_ -Di_386_";
+ $wcelflag.=" /machine:X86"; last; };
+ /^ARMV4[IT]/ && do { $wcecdefs.=" -DARM -D_ARM_ -D$wcetgt";
+ $wcecdefs.=" -DTHUMB -D_THUMB_" if($wcetgt=~/T$/);
+ $wcecdefs.=" -QRarch4T -QRinterwork-return";
+ $wcelflag.=" /machine:THUMB"; last; };
+ /^ARM/ && do { $wcecdefs.=" -DARM -D_ARM_ -D$wcetgt";
+ $wcelflag.=" /machine:ARM"; last; };
+ /^MIPSIV/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000 -D$wcetgt";
+ $wcecdefs.=" -D_MIPS64 -QMmips4 -QMn32";
+ $wcelflag.=" /machine:MIPSFPU"; last; };
+ /^MIPS16/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000 -D$wcetgt";
+ $wcecdefs.=" -DMIPSII -QMmips16";
+ $wcelflag.=" /machine:MIPS16"; last; };
+ /^MIPSII/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000 -D$wcetgt";
+ $wcecdefs.=" -QMmips2";
+ $wcelflag.=" /machine:MIPS"; last; };
+ /^R4[0-9]{3}/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DR4000";
+ $wcelflag.=" /machine:MIPS"; last; };
+ /^SH[0-9]/ && do { $wcecdefs.=" -D$wcetgt -D_${wcetgt}_ -DSHx";
+ $wcecdefs.=" -Qsh4" if ($wcetgt =~ /^SH4/);
+ $wcelflag.=" /machine:$wcetgt"; last; };
+ { $wcecdefs.=" -D$wcetgt -D_${wcetgt}_";
+ $wcelflag.=" /machine:$wcetgt"; last; };
+ }
+
+ $vc_wince_info = { cppflags => $wcecdefs,
+ lflags => $wcelflag };
+ }
+ return $vc_wince_info;
+}
+
+# Helper functions for the VMS configs
+my $vms_info = {};
+sub vms_info {
+ my $pointer_size_str = $config{target} =~ m|-p(\d+)$| ? $1 : "";
+
+ # For the case where Configure iterate through all config targets, such
+ # as when listing them and their details, we reset info if the pointer
+ # size changes.
+ if (%$vms_info && $vms_info->{pointer_size} ne $pointer_size_str) {
+ $vms_info = {};
+ }
+
+ unless (%$vms_info) {
+ $vms_info->{disable_warns} = [
+ "CXXPRAGMANA", # Shut up about unknown / unsupported pragmas
+ ];
+ $vms_info->{pointer_size} = $pointer_size_str;
+ if ($pointer_size_str eq "64") {
+ `PIPE CC /NOCROSS_REFERENCE /NOLIST /NOOBJECT /WARNINGS = DISABLE = ( MAYLOSEDATA3, EMPTYFILE ) NL: 2> NL:`;
+ if ($? == 0) {
+ push @{$vms_info->{disable_warns}}, "MAYLOSEDATA3";
+ }
+ }
+
+ unless ($disabled{zlib}) {
+ my $default_zlib = 'GNV$LIBZSHR' . $pointer_size_str;
+ if (defined($disabled{"zlib-dynamic"})) {
+ $vms_info->{zlib} = $withargs{zlib_lib} || "$default_zlib/SHARE";
+ } else {
+ $vms_info->{def_zlib} = $withargs{zlib_lib} || $default_zlib;
+ # In case the --with-zlib-lib value contains something like
+ # /SHARE or /LIB or so at the end, remove it.
+ $vms_info->{def_zlib} =~ s|/.*$||g;
+ }
+ }
+
+ if ($config{target} =~ /-ia64/) {
+ `PIPE ias -H 2> NL:`;
+ if ($? == 0) {
+ $vms_info->{AS} = "ias";
+ $vms_info->{ASFLAGS} = '-d debug';
+ $vms_info->{asflags} = '"-N" vms_upcase';
+ $vms_info->{asoutflag} = "-o ";
+ $vms_info->{perlasm_scheme} = "ias";
+ }
+ }
+ }
+ return $vms_info;
+}
+
+my %targets = (
+
+#### Basic configs that should work on any 32-bit box
+ "gcc" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CFLAGS => picker(debug => "-O0 -g",
+ release => "-O3"),
+ thread_scheme => "(unknown)",
+ bn_ops => "BN_LLONG",
+ },
+ "cc" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "cc",
+ CFLAGS => "-O",
+ thread_scheme => "(unknown)",
+ },
+
+#### VOS Configurations
+ "vos-gcc" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CFLAGS => picker(default => "-Wall",
+ debug => "-O0 -g",
+ release => "-O3"),
+ cppflags => "-D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES",
+ lib_cppflags => "-DB_ENDIAN",
+ thread_scheme => "(unknown)",
+ sys_id => "VOS",
+ lflags => add("-Wl,-map"),
+ bn_ops => "BN_LLONG",
+ shared_extension => ".so",
+ },
+
+#### Solaris configurations
+ "solaris-common" => {
+ inherit_from => [ "BASE_unix" ],
+ template => 1,
+ lib_cppflags => "-DFILIO_H",
+ ex_libs => add("-lsocket -lnsl -ldl"),
+ dso_scheme => "dlfcn",
+ thread_scheme => "pthreads",
+ },
+#### Solaris common with Sun C setups
+ "solaris-common-cc" => {
+ inherit_from => [ "solaris-common" ],
+ template => 1,
+ shared_target => "solaris",
+ shared_ldflag => "-Wl,-Bsymbolic",
+ shared_defflag => "-Wl,-M,",
+ shared_sonameflag=> "-Wl,-h,",
+ },
+#### Solaris common with GNU C setups
+ "solaris-common-gcc" => {
+ inherit_from => [ "solaris-common" ],
+ template => 1,
+ shared_target => "solaris-gcc-shared", # The rest is on shared_info.pl
+ },
+#### Solaris x86 with GNU C setups
+ "solaris-x86-gcc" => {
+ # NB. GNU C has to be configured to use GNU assembler, and not
+ # /usr/ccs/bin/as. Failure to comply will result in compile
+ # failures [at least] in 32-bit build.
+ inherit_from => [ "solaris-common-gcc" ],
+ CC => "gcc",
+ CFLAGS => add_before(picker(default => "-Wall",
+ debug => "-O0 -g",
+ release => "-O3 -fomit-frame-pointer")),
+ cflags => add(threads("-pthread")),
+ lib_cppflags => add("-DL_ENDIAN"),
+ ex_libs => add(threads("-pthread")),
+ bn_ops => "BN_LLONG",
+ shared_cflag => "-fPIC",
+ shared_ldflag => add_before("-shared -static-libgcc"),
+ asm_arch => 'x86',
+ perlasm_scheme => 'elf',
+ },
+ "solaris64-x86_64-gcc" => {
+ # -shared -static-libgcc might appear controversial, but modules
+ # taken from static libgcc do not have relocations and linking
+ # them into our shared objects doesn't have any negative side
+ # effects. On the contrary, doing so makes it possible to use
+ # gcc shared build with Sun C. Given that gcc generates faster
+ # code [thanks to inline assembler], I would actually recommend
+ # to consider using gcc shared build even with vendor compiler:-)
+ # -- <appro@openssl.org>
+ inherit_from => [ "solaris-common-gcc" ],
+ CC => "gcc",
+ CFLAGS => add_before(picker(default => "-Wall",
+ debug => "-O0 -g",
+ release => "-O3")),
+ cflags => add_before("-m64", threads("-pthread")),
+ lib_cppflags => add("-DL_ENDIAN"),
+ ex_libs => add(threads("-pthread")),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'x86_64',
+ perlasm_scheme => "elf",
+ shared_cflag => "-fPIC",
+ shared_ldflag => add_before("-shared -static-libgcc"),
+ multilib => "/64",
+ },
+
+#### Solaris x86 with Sun C setups
+ # There used to be solaris-x86-cc target, but it was removed,
+ # primarily because vendor assembler can't assemble our modules
+ # with -KPIC flag. As result it, assembly support, was not even
+ # available as option. But its lack means lack of side-channel
+ # resistant code, which is incompatible with security by today's
+ # standards. Fortunately gcc is readily available prepackaged
+ # option, which we can firmly point at...
+ #
+ # On related note, solaris64-x86_64-cc target won't compile code
+ # paths utilizing AVX and post-Haswell instruction extensions.
+ # Consider switching to solaris64-x86_64-gcc even here...
+ #
+ "solaris64-x86_64-cc" => {
+ inherit_from => [ "solaris-common-cc" ],
+ CC => "cc",
+ CFLAGS => add_before(picker(debug => "-g",
+ release => "-xO5 -xdepend -xbuiltin")),
+ cflags => add_before("-xarch=generic64 -xstrconst -Xa"),
+ cppflags => add(threads("-D_REENTRANT")),
+ lib_cppflags => add("-DL_ENDIAN"),
+ thread_scheme => "pthreads",
+ lflags => add(threads("-mt")),
+ ex_libs => add(threads("-lpthread")),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'x86_64',
+ perlasm_scheme => "elf",
+ shared_cflag => "-KPIC",
+ shared_ldflag => add_before("-G -dy -z text"),
+ multilib => "/64",
+ },
+
+#### SPARC Solaris with GNU C setups
+ "solaris-sparcv7-gcc" => {
+ inherit_from => [ "solaris-common-gcc" ],
+ CC => "gcc",
+ CFLAGS => add_before(picker(default => "-Wall",
+ debug => "-O0 -g",
+ release => "-O3")),
+ cflags => add(threads("-pthread")),
+ lib_cppflags => add("-DB_ENDIAN -DBN_DIV2W"),
+ ex_libs => add(threads("-pthread")),
+ bn_ops => "BN_LLONG RC4_CHAR",
+ shared_cflag => "-fPIC",
+ shared_ldflag => add_before("-shared"),
+ },
+ "solaris-sparcv8-gcc" => {
+ inherit_from => [ "solaris-sparcv7-gcc" ],
+ cflags => add_before("-mcpu=v8"),
+ asm_arch => 'sparcv8',
+ perlasm_scheme => 'void',
+ },
+ "solaris-sparcv9-gcc" => {
+ # -m32 should be safe to add as long as driver recognizes
+ # -mcpu=ultrasparc
+ inherit_from => [ "solaris-sparcv7-gcc" ],
+ cflags => add_before("-m32 -mcpu=ultrasparc"),
+ asm_arch => 'sparcv9',
+ perlasm_scheme => 'void',
+ },
+ "solaris64-sparcv9-gcc" => {
+ inherit_from => [ "solaris-sparcv9-gcc" ],
+ cflags => sub { my $f=join(" ",@_); $f =~ s/\-m32/-m64/; $f; },
+ bn_ops => "BN_LLONG RC4_CHAR",
+ multilib => "/64",
+ },
+
+#### SPARC Solaris with Sun C setups
+# SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2.
+# SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8
+# SC5.0 note: Compiler common patch 107357-01 or later is required!
+ "solaris-sparcv7-cc" => {
+ inherit_from => [ "solaris-common-cc" ],
+ CC => "cc",
+ CFLAGS => add_before(picker(debug => "-g",
+ release => "-xO5 -xdepend")),
+ cflags => add_before("-xstrconst -Xa"),
+ cppflags => add(threads("-D_REENTRANT")),
+ lib_cppflags => add("-DB_ENDIAN -DBN_DIV2W"),
+ lflags => add(threads("-mt")),
+ ex_libs => add(threads("-lpthread")),
+ bn_ops => "BN_LLONG RC4_CHAR",
+ shared_cflag => "-KPIC",
+ shared_ldflag => add_before("-G -dy -z text"),
+ },
+####
+ "solaris-sparcv8-cc" => {
+ inherit_from => [ "solaris-sparcv7-cc" ],
+ cflags => add_before("-xarch=v8"),
+ asm_arch => 'sparcv8',
+ perlasm_scheme => 'void',
+ },
+ "solaris-sparcv9-cc" => {
+ inherit_from => [ "solaris-sparcv7-cc" ],
+ cflags => add_before("-xarch=v8plus"),
+ asm_arch => 'sparcv9',
+ perlasm_scheme => 'void',
+ },
+ "solaris64-sparcv9-cc" => {
+ inherit_from => [ "solaris-sparcv7-cc" ],
+ cflags => add_before("-m64 -xarch=sparc"),
+ bn_ops => "BN_LLONG RC4_CHAR",
+ asm_arch => 'sparcv9',
+ perlasm_scheme => 'void',
+ multilib => "/64",
+ },
+
+#### IRIX 6.x configs
+# Only N32 and N64 ABIs are supported.
+ "irix-common" => {
+ inherit_from => [ "BASE_unix" ],
+ template => 1,
+ cppflags => threads("-D_SGI_MP_SOURCE"),
+ lib_cppflags => "-DB_ENDIAN",
+ ex_libs => add(threads("-lpthread")),
+ thread_scheme => "pthreads",
+ dso_scheme => "dlfcn",
+ shared_target => "self",
+ shared_ldflag => "-shared -Wl,-Bsymbolic",
+ shared_sonameflag=> "-Wl,-soname,",
+ },
+ "irix-mips3-gcc" => {
+ inherit_from => [ "irix-common" ],
+ CC => "gcc",
+ CFLAGS => picker(debug => "-g -O0",
+ release => "-O3"),
+ LDFLAGS => "-static-libgcc",
+ cflags => "-mabi=n32",
+ bn_ops => "RC4_CHAR SIXTY_FOUR_BIT",
+ asm_arch => 'mips64',
+ perlasm_scheme => "n32",
+ multilib => "32",
+ },
+ "irix-mips3-cc" => {
+ inherit_from => [ "irix-common" ],
+ CC => "cc",
+ CFLAGS => picker(debug => "-g -O0",
+ release => "-O2"),
+ cflags => "-n32 -mips3 -use_readonly_const -G0 -rdata_shared",
+ bn_ops => "RC4_CHAR SIXTY_FOUR_BIT",
+ asm_arch => 'mips64',
+ perlasm_scheme => "n32",
+ multilib => "32",
+ },
+ # N64 ABI builds.
+ "irix64-mips4-gcc" => {
+ inherit_from => [ "irix-common" ],
+ CC => "gcc",
+ CFLAGS => picker(debug => "-g -O0",
+ release => "-O3"),
+ LDFLAGS => "-static-libgcc",
+ cflags => "-mabi=64 -mips4",
+ bn_ops => "RC4_CHAR SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'mips64',
+ perlasm_scheme => "64",
+ multilib => "64",
+ },
+ "irix64-mips4-cc" => {
+ inherit_from => [ "irix-common" ],
+ CC => "cc",
+ CFLAGS => picker(debug => "-g -O0",
+ release => "-O2"),
+ cflags => "-64 -mips4 -use_readonly_const -G0 -rdata_shared",
+ bn_ops => "RC4_CHAR SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'mips64',
+ perlasm_scheme => "64",
+ multilib => "64",
+ },
+
+#### Unified HP-UX ANSI C configs.
+# Special notes:
+# - Originally we were optimizing at +O4 level. It should be noted
+# that the only difference between +O3 and +O4 is global inter-
+# procedural analysis. As it has to be performed during the link
+# stage the compiler leaves behind certain pseudo-code in lib*.a
+# which might be release or even patch level specific. Generating
+# the machine code for and analyzing the *whole* program appears
+# to be *extremely* memory demanding while the performance gain is
+# actually questionable. The situation is intensified by the default
+# HP-UX data set size limit (infamous 'maxdsiz' tunable) of 64MB
+# which is way too low for +O4. In other words, doesn't +O3 make
+# more sense?
+# - Keep in mind that the HP compiler by default generates code
+# suitable for execution on the host you're currently compiling at.
+# If the toolkit is meant to be used on various PA-RISC processors
+# consider './Configure hpux-parisc-[g]cc +DAportable'.
+# - -DMD32_XARRAY triggers workaround for compiler bug we ran into in
+# 32-bit message digests. (For the moment of this writing) HP C
+# doesn't seem to "digest" too many local variables (they make "him"
+# chew forever:-). For more details look-up MD32_XARRAY comment in
+# crypto/sha/sha_local.h.
+# - originally there were 32-bit hpux-parisc2-* targets. They were
+# scrapped, because a) they were not interchangeable with other 32-bit
+# targets; b) performance-critical 32-bit assembly modules implement
+# even PA-RISC 2.0-specific code paths, which are chosen at run-time,
+# thus adequate performance is provided even with PA-RISC 1.1 build.
+ "hpux-common" => {
+ inherit_from => [ "BASE_unix" ],
+ template => 1,
+ defines => add("_XOPEN_SOURCE", "_XOPEN_SOURCE_EXTENDED",
+ "_HPUX_ALT_XOPEN_SOCKET_API"),
+ lib_cppflags => "-DB_ENDIAN",
+ thread_scheme => "pthreads",
+ dso_scheme => "dlfcn", # overridden in 32-bit PA-RISC builds
+ shared_target => "self",
+ bin_lflags => "-Wl,+s,+cdp,../:,+cdp,./:",
+ shared_ldflag => "-Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+cdp,../:,+cdp,./:",
+ shared_sonameflag=> "-Wl,+h,",
+ },
+ "hpux-parisc-gcc" => {
+ inherit_from => [ "hpux-common" ],
+ CC => "gcc",
+ CFLAGS => picker(debug => "-O0 -g",
+ release => "-O3"),
+ cflags => add(threads("-pthread")),
+ lib_cppflags => add("-DBN_DIV2W"),
+ ex_libs => add("-ldld", threads("-pthread")),
+ bn_ops => "BN_LLONG RC4_CHAR",
+ dso_scheme => "dl",
+ shared_cflag => "-fPIC",
+ shared_ldflag => add_before("-shared"),
+ shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)",
+ },
+ "hpux-parisc1_1-gcc" => {
+ inherit_from => [ "hpux-parisc-gcc" ],
+ asm_arch => 'parisc11',
+ perlasm_scheme => "32",
+ multilib => "/pa1.1",
+ },
+ "hpux64-parisc2-gcc" => {
+ inherit_from => [ "hpux-common" ],
+ CC => "gcc",
+ CFLAGS => combine(picker(debug => "-O0 -g",
+ release => "-O3")),
+ cflags => add(threads("-pthread")),
+ ex_libs => add("-ldl", threads("-pthread")),
+ bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
+ asm_arch => 'parisc20_64',
+ perlasm_scheme => "64",
+ shared_cflag => "-fpic",
+ shared_ldflag => add_before("-shared"),
+ shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)",
+ multilib => "/pa20_64",
+ },
+
+ # More attempts at unified 10.X and 11.X targets for HP C compiler.
+ "hpux-parisc-cc" => {
+ inherit_from => [ "hpux-common" ],
+ CC => "cc",
+ CFLAGS => picker(debug => "+O0 +d -g",
+ release => "+O3"),
+ cflags => "+Optrs_strongly_typed -Ae +ESlit",
+ cppflags => threads("-D_REENTRANT"),
+ lib_cppflags => add("-DBN_DIV2W -DMD32_XARRAY"),
+ ex_libs => add("-ldld", threads("-lpthread")),
+ bn_ops => "RC4_CHAR",
+ dso_scheme => "dl",
+ shared_cflag => "+Z",
+ shared_ldflag => add_before("-b"),
+ shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)",
+ },
+ "hpux-parisc1_1-cc" => {
+ inherit_from => [ "hpux-parisc-cc" ],
+ cflags => add_before("+DA1.1"),
+ asm_arch => 'parisc11',
+ perlasm_scheme => "32",
+ multilib => "/pa1.1",
+ },
+ "hpux64-parisc2-cc" => {
+ inherit_from => [ "hpux-common" ],
+ CC => "cc",
+ CFLAGS => picker(debug => "+O0 +d -g",
+ release => "+O3") ,
+ cflags => "+DD64 +Optrs_strongly_typed -Ae +ESlit",
+ cppflags => threads("-D_REENTRANT") ,
+ lib_cppflags => add("-DMD32_XARRAY"),
+ ex_libs => add("-ldl", threads("-lpthread")),
+ bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
+ asm_arch => 'parisc20_64',
+ perlasm_scheme => "64",
+ shared_cflag => "+Z",
+ shared_ldflag => add_before("-b"),
+ shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)",
+ multilib => "/pa20_64",
+ },
+
+ # HP/UX IA-64 targets
+ "hpux-ia64-cc" => {
+ inherit_from => [ "hpux-common" ],
+ CC => "cc",
+ CFLAGS => picker(debug => "+O0 +d -g",
+ release => "+O2"),
+ cflags => "-Ae +DD32 +Olit=all -z",
+ cppflags => add(threads("-D_REENTRANT")),
+ ex_libs => add("-ldl", threads("-lpthread")),
+ bn_ops => "SIXTY_FOUR_BIT",
+ asm_arch => 'ia64',
+ perlasm_scheme => 'void',
+ shared_cflag => "+Z",
+ shared_ldflag => add_before("-b"),
+ multilib => "/hpux32",
+ },
+ "hpux64-ia64-cc" => {
+ inherit_from => [ "hpux-common" ],
+ CC => "cc",
+ CFLAGS => picker(debug => "+O0 +d -g",
+ release => "+O3"),
+ cflags => "-Ae +DD64 +Olit=all -z",
+ cppflags => threads("-D_REENTRANT"),
+ ex_libs => add("-ldl", threads("-lpthread")),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'ia64',
+ perlasm_scheme => 'void',
+ shared_cflag => "+Z",
+ shared_ldflag => add_before("-b"),
+ multilib => "/hpux64",
+ },
+ # GCC builds...
+ "hpux-ia64-gcc" => {
+ inherit_from => [ "hpux-common" ],
+ CC => "gcc",
+ CFLAGS => picker(debug => "-O0 -g",
+ release => "-O3"),
+ cflags => add(threads("-pthread")),
+ ex_libs => add("-ldl", threads("-pthread")),
+ bn_ops => "SIXTY_FOUR_BIT",
+ asm_arch => 'ia64',
+ perlasm_scheme => 'void',
+ shared_cflag => "-fpic",
+ shared_ldflag => add_before("-shared"),
+ multilib => "/hpux32",
+ },
+ "hpux64-ia64-gcc" => {
+ inherit_from => [ "hpux-common" ],
+ CC => "gcc",
+ CFLAGS => picker(debug => "-O0 -g",
+ release => "-O3"),
+ cflags => combine("-mlp64", threads("-pthread")),
+ ex_libs => add("-ldl", threads("-pthread")),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'ia64',
+ perlasm_scheme => 'void',
+ shared_cflag => "-fpic",
+ shared_ldflag => add_before("-shared"),
+ multilib => "/hpux64",
+ },
+
+#### HP MPE/iX http://jazz.external.hp.com/src/openssl/
+ "MPE/iX-gcc" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CFLAGS => "-O3",
+ cppflags => "-D_POSIX_SOURCE -D_SOCKET_SOURCE",
+ includes => [ "/SYSLOG/PUB" ],
+ lib_cppflags => "-DBN_DIV2W",
+ sys_id => "MPE",
+ lflags => add("-L/SYSLOG/PUB"),
+ ex_libs => add("-lsyslog -lsocket -lcurses"),
+ thread_scheme => "(unknown)",
+ bn_ops => "BN_LLONG",
+ },
+
+#### DEC Alpha Tru64 targets. Tru64 is marketing name for OSF/1 version 4
+#### and forward. In reality 'uname -s' still returns "OSF1". Originally
+#### there were even osf1-* configs targeting prior versions provided,
+#### but not anymore...
+ "tru64-alpha-gcc" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CFLAGS => "-O3",
+ cflags => add("-std=c9x", threads("-pthread")),
+ cppflags => "-D_XOPEN_SOURCE=500 -D_OSF_SOURCE",
+ ex_libs => add("-lrt", threads("-pthread")), # for mlock(2)
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'alpha',
+ perlasm_scheme => "void",
+ thread_scheme => "pthreads",
+ dso_scheme => "dlfcn",
+ shared_target => "alpha-osf1-shared",
+ shared_extension => ".so",
+ },
+ "tru64-alpha-cc" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "cc",
+ CFLAGS => "-tune host -fast",
+ cflags => add("-std1 -readonly_strings",
+ threads("-pthread")),
+ cppflags => "-D_XOPEN_SOURCE=500 -D_OSF_SOURCE",
+ ex_libs => add("-lrt", threads("-pthread")), # for mlock(2)
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'alpha',
+ perlasm_scheme => "void",
+ thread_scheme => "pthreads",
+ dso_scheme => "dlfcn",
+ shared_target => "alpha-osf1-shared",
+ shared_ldflag => "-msym",
+ shared_extension => ".so",
+ },
+
+####
+#### Variety of LINUX:-)
+####
+# *-generic* is endian-neutral target, but ./config is free to
+# throw in -D[BL]_ENDIAN, whichever appropriate...
+ "linux-generic32" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CXX => "g++",
+ CFLAGS => picker(default => "-Wall",
+ debug => "-O0 -g",
+ release => "-O3"),
+ CXXFLAGS => picker(default => "-Wall",
+ debug => "-O0 -g",
+ release => "-O3"),
+ cflags => threads("-pthread"),
+ cxxflags => combine("-std=c++11", threads("-pthread")),
+ lib_cppflags => "-DOPENSSL_USE_NODELETE",
+ ex_libs => add("-ldl", threads("-pthread")),
+ bn_ops => "BN_LLONG RC4_CHAR",
+ thread_scheme => "pthreads",
+ dso_scheme => "dlfcn",
+ shared_target => "linux-shared",
+ shared_cflag => "-fPIC",
+ shared_ldflag => sub { $disabled{pinshared} ? () : "-Wl,-znodelete" },
+ enable => [ "afalgeng" ],
+ },
+ "linux-latomic" => {
+ inherit_from => [ "linux-generic32" ],
+ ex_libs => add(threads("-latomic")),
+ },
+ "linux-generic64" => {
+ inherit_from => [ "linux-generic32" ],
+ bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
+ },
+
+ "linux-ppc" => {
+ inherit_from => [ "linux-latomic" ],
+ asm_arch => 'ppc32',
+ perlasm_scheme => "linux32",
+ lib_cppflags => add("-DB_ENDIAN"),
+ },
+ "linux-ppc64" => {
+ inherit_from => [ "linux-generic64" ],
+ cflags => add("-m64"),
+ cxxflags => add("-m64"),
+ lib_cppflags => add("-DB_ENDIAN"),
+ asm_arch => 'ppc64',
+ perlasm_scheme => "linux64",
+ multilib => "64",
+ },
+ "linux-ppc64le" => {
+ inherit_from => [ "linux-generic64" ],
+ cflags => add("-m64"),
+ cxxflags => add("-m64"),
+ lib_cppflags => add("-DL_ENDIAN"),
+ asm_arch => 'ppc64',
+ perlasm_scheme => "linux64le",
+ },
+
+ "linux-armv4" => {
+ ################################################################
+ # Note that -march is not among compiler options in linux-armv4
+ # target description. Not specifying one is intentional to give
+ # you choice to:
+ #
+ # a) rely on your compiler default by not specifying one;
+ # b) specify your target platform explicitly for optimal
+ # performance, e.g. -march=armv6 or -march=armv7-a;
+ # c) build "universal" binary that targets *range* of platforms
+ # by specifying minimum and maximum supported architecture;
+ #
+ # As for c) option. It actually makes no sense to specify
+ # maximum to be less than ARMv7, because it's the least
+ # requirement for run-time switch between platform-specific
+ # code paths. And without run-time switch performance would be
+ # equivalent to one for minimum. Secondly, there are some
+ # natural limitations that you'd have to accept and respect.
+ # Most notably you can *not* build "universal" binary for
+ # big-endian platform. This is because ARMv7 processor always
+ # picks instructions in little-endian order. Another similar
+ # limitation is that -mthumb can't "cross" -march=armv6t2
+ # boundary, because that's where it became Thumb-2. Well, this
+ # limitation is a bit artificial, because it's not really
+ # impossible, but it's deemed too tricky to support. And of
+ # course you have to be sure that your binutils are actually
+ # up to the task of handling maximum target platform. With all
+ # this in mind here is an example of how to configure
+ # "universal" build:
+ #
+ # ./Configure linux-armv4 -march=armv6 -D__ARM_MAX_ARCH__=8
+ #
+ inherit_from => [ "linux-latomic" ],
+ asm_arch => 'armv4',
+ perlasm_scheme => "linux32",
+ },
+ "linux-aarch64" => {
+ inherit_from => [ "linux-generic64" ],
+ asm_arch => 'aarch64',
+ perlasm_scheme => "linux64",
+ },
+ "linux-arm64ilp32" => { # https://wiki.linaro.org/Platform/arm64-ilp32
+ inherit_from => [ "linux-generic32" ],
+ cflags => add("-mabi=ilp32"),
+ cxxflags => add("-mabi=ilp32"),
+ bn_ops => "SIXTY_FOUR_BIT RC4_CHAR",
+ asm_arch => 'aarch64',
+ perlasm_scheme => "linux64",
+ },
+
+ "linux-mips32" => {
+ # Configure script adds minimally required -march for assembly
+ # support, if no -march was specified at command line.
+ inherit_from => [ "linux-latomic" ],
+ cflags => add("-mabi=32"),
+ cxxflags => add("-mabi=32"),
+ asm_arch => 'mips32',
+ perlasm_scheme => "o32",
+ },
+ # mips32 and mips64 below refer to contemporary MIPS Architecture
+ # specifications, MIPS32 and MIPS64, rather than to kernel bitness.
+ "linux-mips64" => {
+ inherit_from => [ "linux-latomic" ],
+ cflags => add("-mabi=n32"),
+ cxxflags => add("-mabi=n32"),
+ bn_ops => "RC4_CHAR SIXTY_FOUR_BIT",
+ asm_arch => 'mips64',
+ perlasm_scheme => "n32",
+ multilib => "32",
+ },
+ "linux64-mips64" => {
+ inherit_from => [ "linux-generic64" ],
+ cflags => add("-mabi=64"),
+ cxxflags => add("-mabi=64"),
+ asm_arch => 'mips64',
+ perlasm_scheme => "64",
+ multilib => "64",
+ },
+
+ # riscv64 below refers to contemporary RISCV Architecture
+ # specifications,
+ "linux64-riscv64" => {
+ inherit_from => [ "linux-generic64"],
+ perlasm_scheme => "linux64",
+ },
+
+ # loongarch64 below refers to contemporary LoongArch Architecture
+ # specifications,
+ "linux64-loongarch64" => {
+ inherit_from => [ "linux-generic64"],
+ perlasm_scheme => "linux64",
+ },
+
+ #### IA-32 targets...
+ #### These two targets are a bit aged and are to be used on older Linux
+ #### machines where gcc doesn't understand -m32 and -m64
+ "linux-elf" => {
+ inherit_from => [ "linux-generic32" ],
+ CFLAGS => add(picker(release => "-fomit-frame-pointer")),
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "BN_LLONG",
+ asm_arch => 'x86',
+ perlasm_scheme => "elf",
+ },
+ "linux-aout" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CFLAGS => add(picker(default => "-Wall",
+ debug => "-O0 -g",
+ release => "-O3 -fomit-frame-pointer")),
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "BN_LLONG",
+ thread_scheme => "(unknown)",
+ asm_arch => 'x86',
+ perlasm_scheme => "a.out",
+ },
+
+ #### X86 / X86_64 targets
+ "linux-x86" => {
+ inherit_from => [ "linux-generic32" ],
+ CFLAGS => add(picker(release => "-fomit-frame-pointer")),
+ cflags => add("-m32"),
+ cxxflags => add("-m32"),
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "BN_LLONG",
+ asm_arch => 'x86',
+ perlasm_scheme => "elf",
+ },
+ "linux-x86-clang" => {
+ inherit_from => [ "linux-x86" ],
+ CC => "clang",
+ CXX => "clang++",
+ ex_libs => add(threads("-latomic")),
+ },
+ "linux-x86_64" => {
+ inherit_from => [ "linux-generic64" ],
+ cflags => add("-m64"),
+ cxxflags => add("-m64"),
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'x86_64',
+ perlasm_scheme => "elf",
+ multilib => "64",
+ },
+ "linux-x86_64-clang" => {
+ inherit_from => [ "linux-x86_64" ],
+ CC => "clang",
+ CXX => "clang++",
+ },
+ "linux-x32" => {
+ inherit_from => [ "linux-generic32" ],
+ cflags => add("-mx32"),
+ cxxflags => add("-mx32"),
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "SIXTY_FOUR_BIT",
+ asm_arch => 'x86_64',
+ perlasm_scheme => "elf32",
+ multilib => "x32",
+ },
+
+ "linux-ia64" => {
+ inherit_from => [ "linux-generic64" ],
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'ia64',
+ perlasm_scheme => 'void',
+ },
+
+ "linux64-s390x" => {
+ inherit_from => [ "linux-generic64" ],
+ cflags => add("-m64"),
+ cxxflags => add("-m64"),
+ lib_cppflags => add("-DB_ENDIAN"),
+ asm_arch => 's390x',
+ perlasm_scheme => "64",
+ multilib => "64",
+ },
+ "linux32-s390x" => {
+ #### So called "highgprs" target for z/Architecture CPUs
+ # "Highgprs" is kernel feature first implemented in Linux
+ # 2.6.32, see /proc/cpuinfo. The idea is to preserve most
+ # significant bits of general purpose registers not only
+ # upon 32-bit process context switch, but even on
+ # asynchronous signal delivery to such process. This makes
+ # it possible to deploy 64-bit instructions even in legacy
+ # application context and achieve better [or should we say
+ # adequate] performance. The build is binary compatible with
+ # linux-generic32, and the idea is to be able to install the
+ # resulting libcrypto.so alongside generic one, e.g. as
+ # /lib/highgprs/libcrypto.so.x.y, for ldconfig and run-time
+ # linker to autodiscover. Unfortunately it doesn't work just
+ # yet, because of couple of bugs in glibc
+ # sysdeps/s390/dl-procinfo.c affecting ldconfig and ld.so.1...
+ #
+ inherit_from => [ "linux-generic32" ],
+ cflags => add("-m31 -Wa,-mzarch"),
+ cxxflags => add("-m31 -Wa,-mzarch"),
+ lib_cppflags => add("-DB_ENDIAN"),
+ asm_arch => 's390x',
+ perlasm_scheme => "31",
+ multilib => "/highgprs",
+ },
+
+ #### SPARC Linux setups
+ "linux-sparcv8" => {
+ inherit_from => [ "linux-latomic" ],
+ cflags => add("-mcpu=v8"),
+ cxxflags => add("-mcpu=v8"),
+ lib_cppflags => add("-DB_ENDIAN -DBN_DIV2W"),
+ asm_arch => 'sparcv8',
+ perlasm_scheme => 'void',
+ },
+ "linux-sparcv9" => {
+ # it's a real mess with -mcpu=ultrasparc option under Linux,
+ # but -Wa,-Av8plus should do the trick no matter what.
+ inherit_from => [ "linux-latomic" ],
+ cflags => add("-m32 -mcpu=ultrasparc -Wa,-Av8plus"),
+ cxxflags => add("-m32 -mcpu=ultrasparc -Wa,-Av8plus"),
+ lib_cppflags => add("-DB_ENDIAN -DBN_DIV2W"),
+ asm_arch => 'sparcv9',
+ perlasm_scheme => 'void',
+ },
+ "linux64-sparcv9" => {
+ # GCC 3.1 is a requirement
+ inherit_from => [ "linux-generic64" ],
+ cflags => add("-m64 -mcpu=ultrasparc"),
+ cxxflags => add("-m64 -mcpu=ultrasparc"),
+ lib_cppflags => add("-DB_ENDIAN"),
+ ex_libs => add(threads("-latomic")),
+ bn_ops => "BN_LLONG RC4_CHAR",
+ asm_arch => 'sparcv9',
+ perlasm_scheme => 'void',
+ multilib => "64",
+ },
+
+ "linux-alpha-gcc" => {
+ inherit_from => [ "linux-generic64" ],
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'alpha',
+ perlasm_scheme => "void",
+ },
+ "linux-c64xplus" => {
+ inherit_from => [ "BASE_unix" ],
+ # TI_CGT_C6000_7.3.x is a requirement
+ CC => "cl6x",
+ CFLAGS => "-o2 -ox -ms",
+ cflags => "--linux -ea=.s -eo=.o -mv6400+ -pden",
+ cxxflags => "--linux -ea=.s -eo=.o -mv6400+ -pden",
+ cppflags => combine("-DOPENSSL_SMALL_FOOTPRINT",
+ threads("-D_REENTRANT")),
+ bn_ops => "BN_LLONG",
+ thread_scheme => "pthreads",
+ asm_arch => 'c64xplus',
+ perlasm_scheme => "void",
+ dso_scheme => "dlfcn",
+ shared_target => "linux-shared",
+ shared_cflag => "--pic",
+ shared_ldflag => add("-z --sysv --shared"),
+ ranlib => "true",
+ },
+
+#### *BSD
+ "BSD-generic32" => {
+ # As for thread cflag. Idea is to maintain "collective" set of
+ # flags, which would cover all BSD flavors. -pthread applies
+ # to them all, but is treated differently. OpenBSD expands is
+ # as -D_POSIX_THREAD -lc_r, which is sufficient. FreeBSD 4.x
+ # expands it as -lc_r, which has to be accompanied by explicit
+ # -D_THREAD_SAFE and sometimes -D_REENTRANT. FreeBSD 5.x
+ # expands it as -lc_r, which seems to be sufficient?
+ inherit_from => [ "BASE_unix" ],
+ CC => "cc",
+ CFLAGS => picker(default => "-Wall",
+ debug => "-O0 -g",
+ release => "-O3"),
+ cflags => threads("-pthread"),
+ cppflags => threads("-D_THREAD_SAFE -D_REENTRANT"),
+ ex_libs => add(threads("-pthread")),
+ enable => add("devcryptoeng"),
+ bn_ops => "BN_LLONG",
+ thread_scheme => "pthreads",
+ dso_scheme => "dlfcn",
+ shared_target => "bsd-gcc-shared",
+ shared_cflag => "-fPIC",
+ },
+ "BSD-generic64" => {
+ inherit_from => [ "BSD-generic32" ],
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ },
+
+ "BSD-x86" => {
+ inherit_from => [ "BSD-generic32" ],
+ CFLAGS => add(picker(release => "-fomit-frame-pointer")),
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "BN_LLONG",
+ asm_arch => 'x86',
+ perlasm_scheme => "a.out",
+ },
+ "BSD-x86-elf" => {
+ inherit_from => [ "BSD-x86" ],
+ perlasm_scheme => "elf",
+ },
+
+ "BSD-sparcv8" => {
+ inherit_from => [ "BSD-generic32" ],
+ cflags => add("-mcpu=v8"),
+ lib_cppflags => add("-DB_ENDIAN"),
+ asm_arch => 'sparcv8',
+ perlasm_scheme => 'void',
+ },
+ "BSD-sparc64" => {
+ # -DMD32_REG_T=int doesn't actually belong in sparc64 target, it
+ # simply *happens* to work around a compiler bug in gcc 3.3.3,
+ # triggered by RIPEMD160 code.
+ inherit_from => [ "BSD-generic64" ],
+ lib_cppflags => add("-DB_ENDIAN -DMD32_REG_T=int"),
+ bn_ops => "BN_LLONG",
+ asm_arch => 'sparcv9',
+ perlasm_scheme => 'void',
+ },
+
+ "BSD-ia64" => {
+ inherit_from => [ "BSD-generic64" ],
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'ia64',
+ perlasm_scheme => 'void',
+ },
+
+ "BSD-x86_64" => {
+ inherit_from => [ "BSD-generic64" ],
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'x86_64',
+ perlasm_scheme => "elf",
+ },
+
+ "BSD-aarch64" => {
+ inherit_from => [ "BSD-generic64" ],
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'aarch64',
+ perlasm_scheme => "linux64",
+ },
+
+ # riscv64 below refers to contemporary RISCV Architecture
+ # specifications,
+ "BSD-riscv64" => {
+ inherit_from => [ "BSD-generic64"],
+ perlasm_scheme => "linux64",
+ },
+
+ "bsdi-elf-gcc" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CFLAGS => "-fomit-frame-pointer -O3 -Wall",
+ lib_cppflags => "-DPERL5 -DL_ENDIAN",
+ ex_libs => add("-ldl"),
+ bn_ops => "BN_LLONG",
+ asm_arch => 'x86',
+ perlasm_scheme => "elf",
+ thread_scheme => "(unknown)",
+ dso_scheme => "dlfcn",
+ shared_target => "bsd-gcc-shared",
+ shared_cflag => "-fPIC",
+ },
+
+#### SCO/Caldera targets.
+#
+# Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc.
+# Now we only have blended unixware-* as it's the only one used by ./config.
+# If you want to optimize for particular microarchitecture, bypass ./config
+# and './Configure unixware-7 -Kpentium_pro' or whatever appropriate.
+# Note that not all targets include assembler support. Mostly because of
+# lack of motivation to support out-of-date platforms with out-of-date
+# compiler drivers and assemblers.
+#
+# UnixWare 2.0x fails destest with -O.
+ "unixware-2.0" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "cc",
+ cflags => threads("-Kthread"),
+ lib_cppflags => "-DFILIO_H -DNO_STRINGS_H",
+ ex_libs => add("-lsocket -lnsl -lresolv -lx"),
+ thread_scheme => "uithreads",
+ },
+ "unixware-2.1" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "cc",
+ CFLAGS => "-O",
+ cflags => threads("-Kthread"),
+ lib_cppflags => "-DFILIO_H",
+ ex_libs => add("-lsocket -lnsl -lresolv -lx"),
+ thread_scheme => "uithreads",
+ },
+ "unixware-7" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "cc",
+ CFLAGS => "-O",
+ cflags => combine("-Kalloca", threads("-Kthread")),
+ lib_cppflags => "-DFILIO_H",
+ ex_libs => add("-lsocket -lnsl"),
+ thread_scheme => "uithreads",
+ bn_ops => "BN_LLONG",
+ asm_arch => 'x86',
+ perlasm_scheme => "elf-1",
+ dso_scheme => "dlfcn",
+ shared_target => "svr5-shared",
+ shared_cflag => "-Kpic",
+ },
+ "unixware-7-gcc" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CFLAGS => "-O3 -fomit-frame-pointer -Wall",
+ cppflags => add(threads("-D_REENTRANT")),
+ lib_cppflags => add("-DL_ENDIAN -DFILIO_H"),
+ ex_libs => add("-lsocket -lnsl"),
+ bn_ops => "BN_LLONG",
+ thread_scheme => "pthreads",
+ asm_arch => 'x86',
+ perlasm_scheme => "elf-1",
+ dso_scheme => "dlfcn",
+ shared_target => "gnu-shared",
+ shared_cflag => "-fPIC",
+ },
+# SCO 5 - Ben Laurie says the -O breaks the SCO cc.
+ "sco5-cc" => {
+ inherit_from => [ "BASE_unix" ],
+ cc => "cc",
+ cflags => "-belf",
+ ex_libs => add("-lsocket -lnsl"),
+ thread_scheme => "(unknown)",
+ asm_arch => 'x86',
+ perlasm_scheme => "elf-1",
+ dso_scheme => "dlfcn",
+ shared_target => "svr3-shared",
+ shared_cflag => "-Kpic",
+ },
+ "sco5-gcc" => {
+ inherit_from => [ "BASE_unix" ],
+ cc => "gcc",
+ cflags => "-O3 -fomit-frame-pointer",
+ ex_libs => add("-lsocket -lnsl"),
+ bn_ops => "BN_LLONG",
+ thread_scheme => "(unknown)",
+ asm_arch => 'x86',
+ perlasm_scheme => "elf-1",
+ dso_scheme => "dlfcn",
+ shared_target => "svr3-shared",
+ shared_cflag => "-fPIC",
+ },
+
+#### IBM's AIX.
+ # Below targets assume AIX >=5. Caveat lector. If you are accustomed
+ # to control compilation "bitness" by setting $OBJECT_MODE environment
+ # variable, then you should know that in OpenSSL case it's considered
+ # only in ./config. Once configured, build procedure remains "deaf" to
+ # current value of $OBJECT_MODE.
+ "aix-common" => {
+ inherit_from => [ "BASE_unix" ],
+ template => 1,
+ sys_id => "AIX",
+ lib_cppflags => "-DB_ENDIAN",
+ lflags => "-Wl,-bsvr4",
+ thread_scheme => "pthreads",
+ dso_scheme => "dlfcn",
+ shared_target => "aix",
+ module_ldflags => "-Wl,-G,-bsymbolic,-bnoentry",
+ shared_ldflag => "-Wl,-G,-bsymbolic,-bnoentry",
+ shared_defflag => "-Wl,-bE:",
+ shared_fipsflag => "-Wl,-binitfini:_init:_cleanup",
+ perl_platform => 'AIX',
+ },
+ "aix-gcc" => {
+ inherit_from => [ "aix-common" ],
+ CC => "gcc",
+ CFLAGS => picker(debug => "-O0 -g",
+ release => "-O"),
+ cflags => add(threads("-pthread")),
+ ex_libs => add(threads("-pthread")),
+ bn_ops => "BN_LLONG RC4_CHAR",
+ asm_arch => 'ppc32',
+ perlasm_scheme => "aix32",
+ shared_ldflag => add_before("-shared -static-libgcc"),
+ AR => add("-X32"),
+ RANLIB => add("-X32"),
+ },
+ "aix64-gcc" => {
+ inherit_from => [ "aix-common" ],
+ CC => "gcc",
+ CFLAGS => picker(debug => "-O0 -g",
+ release => "-O"),
+ cflags => combine("-maix64", threads("-pthread")),
+ ex_libs => add(threads("-pthread")),
+ bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
+ asm_arch => 'ppc64',
+ perlasm_scheme => "aix64",
+ shared_ldflag => add_before("-shared -static-libgcc"),
+ shared_extension => "64.so.\$(SHLIB_VERSION_NUMBER)",
+ AR => add("-X64"),
+ RANLIB => add("-X64"),
+ },
+ "aix64-gcc-as" => {
+ inherit_from => [ "aix64-gcc" ],
+ perlasm_scheme => "aix64-as",
+ },
+ "aix-cc" => {
+ inherit_from => [ "aix-common" ],
+ CC => "cc",
+ CFLAGS => picker(debug => "-O0 -g",
+ release => "-O"),
+ cflags => combine("-q32 -qmaxmem=16384 -qro -qroconst",
+ threads("-qthreaded")),
+ cppflags => threads("-D_THREAD_SAFE"),
+ ex_libs => add(threads("-lpthreads")),
+ bn_ops => "BN_LLONG RC4_CHAR",
+ asm_arch => 'ppc32',
+ perlasm_scheme => "aix32",
+ shared_cflag => "-qpic",
+ AR => add("-X32"),
+ RANLIB => add("-X32"),
+ },
+ "aix64-cc" => {
+ inherit_from => [ "aix-common" ],
+ CC => "cc",
+ CFLAGS => picker(debug => "-O0 -g",
+ release => "-O"),
+ cflags => combine("-q64 -qmaxmem=16384 -qro -qroconst",
+ threads("-qthreaded")),
+ cppflags => threads("-D_THREAD_SAFE"),
+ ex_libs => add(threads("-lpthreads")),
+ bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
+ asm_arch => 'ppc64',
+ perlasm_scheme => "aix64",
+ dso_scheme => "dlfcn",
+ shared_cflag => "-qpic",
+ shared_extension => "64.so.\$(SHLIB_VERSION_NUMBER)",
+ AR => add("-X64"),
+ RANLIB => add("-X64"),
+ },
+
+# SIEMENS BS2000/OSD: an EBCDIC-based mainframe
+ "BS2000-OSD" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "c89",
+ CFLAGS => "-O",
+ cflags => "-XLLML -XLLMK -XL",
+ cppflags => "-DCHARSET_EBCDIC",
+ lib_cppflags => "-DB_ENDIAN",
+ ex_libs => add("-lsocket -lnsl"),
+ bn_ops => "THIRTY_TWO_BIT RC4_CHAR",
+ thread_scheme => "(unknown)",
+ },
+
+#### Visual C targets
+#
+# Win64 targets, WIN64I denotes IA-64/Itanium and WIN64A - AMD64
+#
+# Note about /wd4090, disable warning C4090. This warning returns false
+# positives in some situations. Disabling it altogether masks both
+# legitimate and false cases, but as we compile on multiple platforms,
+# we rely on other compilers to catch legitimate cases.
+#
+# Also note that we force threads no matter what. Configuring "no-threads"
+# is ignored.
+#
+# UNICODE is defined in VC-common and applies to all targets. It used to
+# be an opt-in option for VC-WIN32, but not anymore. The original reason
+# was because ANSI API was *native* system interface for no longer
+# supported Windows 9x. Keep in mind that UNICODE only affects how
+# OpenSSL libraries interact with underlying OS, it doesn't affect API
+# that OpenSSL presents to application.
+
+ "VC-common" => {
+ inherit_from => [ "BASE_Windows" ],
+ template => 1,
+ CC => "cl",
+ CPP => '$(CC) /EP /C',
+ CFLAGS => "/W3 /wd4090 /nologo",
+ coutflag => "/Fo",
+ LD => "link",
+ LDFLAGS => "/nologo /debug",
+ ldoutflag => "/out:",
+ ldpostoutflag => "",
+ ld_resp_delim => "\n",
+ bin_lflags => "setargv.obj",
+ makedepcmd => '$(CC) /Zs /showIncludes',
+ makedep_scheme => 'VC',
+ AR => "lib",
+ ARFLAGS => "/nologo",
+ aroutflag => "/out:",
+ ar_resp_delim => "\n",
+ RC => "rc",
+ rcoutflag => "/fo",
+ defines => add("OPENSSL_SYS_WIN32", "WIN32_LEAN_AND_MEAN",
+ "UNICODE", "_UNICODE",
+ "_CRT_SECURE_NO_DEPRECATE",
+ "_WINSOCK_DEPRECATED_NO_WARNINGS"),
+ lib_cflags => add("/Zi /Fdossl_static.pdb"),
+ lib_defines => add("L_ENDIAN"),
+ dso_cflags => "/Zi /Fddso.pdb",
+ bin_cflags => "/Zi /Fdapp.pdb",
+ # def_flag made to empty string so a .def file gets generated
+ shared_defflag => '',
+ shared_ldflag => "/dll",
+ shared_target => "win-shared", # meaningless except it gives Configure a hint
+ lddefflag => "/def:",
+ ldresflag => " ",
+ ld_implib_flag => "/implib:",
+ thread_scheme => "winthreads",
+ dso_scheme => "win32",
+ perl_platform => 'Windows::MSVC',
+ # additional parameter to build_scheme denotes install-path "flavour"
+ build_scheme => add("VC-common", { separator => undef }),
+ },
+ "VC-noCE-common" => {
+ inherit_from => [ "VC-common" ],
+ template => 1,
+ CFLAGS => add(picker(debug => '/Od',
+ release => '/O2')),
+ cflags => add(picker(default => '/Gs0 /GF /Gy',
+ debug =>
+ sub {
+ ($disabled{shared} ? "" : "/MDd");
+ },
+ release =>
+ sub {
+ ($disabled{shared} ? "" : "/MD");
+ })),
+ defines => add(picker(default => [], # works as type cast
+ debug => [ "DEBUG", "_DEBUG" ])),
+ lib_cflags => add(sub { $disabled{shared} ? "/MT /Zl" : () }),
+ # Following might/should appears controversial, i.e. defining
+ # /MDd without evaluating $disabled{shared}. It works in
+ # non-shared build because static library is compiled with /Zl
+ # and bares no reference to specific RTL. And it works in
+ # shared build because multiple /MDd options are not prohibited.
+ # But why /MDd in static build? Well, basically this is just a
+ # reference point, which allows to catch eventual errors that
+ # would prevent those who want to wrap OpenSSL into own .DLL.
+ # Why not /MD in release build then? Well, some are likely to
+ # prefer [non-debug] openssl.exe to be free from Micorosoft RTL
+ # redistributable.
+ bin_cflags => add(picker(debug => "/MDd",
+ release => sub { $disabled{shared} ? "/MT" : () },
+ )),
+ bin_lflags => add("/subsystem:console /opt:ref"),
+ ex_libs => add(sub {
+ my @ex_libs = ();
+ push @ex_libs, 'ws2_32.lib' unless $disabled{sock};
+ push @ex_libs, 'gdi32.lib advapi32.lib crypt32.lib user32.lib';
+ return join(" ", @ex_libs);
+ }),
+ },
+ "VC-WIN64-common" => {
+ inherit_from => [ "VC-noCE-common" ],
+ template => 1,
+ ex_libs => add(sub {
+ my @ex_libs = ();
+ push @ex_libs, 'bufferoverflowu.lib' if (`cl 2>&1` =~ /14\.00\.4[0-9]{4}\./);
+ return join(" ", @_, @ex_libs);
+ }),
+ bn_ops => add("SIXTY_FOUR_BIT"),
+ },
+ "VC-WIN64I" => {
+ inherit_from => [ "VC-WIN64-common" ],
+ AS => "ias",
+ ASFLAGS => "-d debug",
+ asoutflag => "-o ",
+ sys_id => "WIN64I",
+ uplink_arch => 'ia64',
+ asm_arch => 'ia64',
+ perlasm_scheme => "ias",
+ multilib => "-ia64",
+ },
+ "VC-WIN64A" => {
+ inherit_from => [ "VC-WIN64-common" ],
+ AS => sub { vc_win64a_info()->{AS} },
+ ASFLAGS => sub { vc_win64a_info()->{ASFLAGS} },
+ asoutflag => sub { vc_win64a_info()->{asoutflag} },
+ asflags => sub { vc_win64a_info()->{asflags} },
+ sys_id => "WIN64A",
+ uplink_arch => 'x86_64',
+ asm_arch => 'x86_64',
+ perlasm_scheme => sub { vc_win64a_info()->{perlasm_scheme} },
+ multilib => "-x64",
+ },
+ "VC-WIN32" => {
+ inherit_from => [ "VC-noCE-common" ],
+ AS => sub { vc_win32_info()->{AS} },
+ ASFLAGS => sub { vc_win32_info()->{ASFLAGS} },
+ asoutflag => sub { vc_win32_info()->{asoutflag} },
+ asflags => sub { vc_win32_info()->{asflags} },
+ sys_id => "WIN32",
+ bn_ops => add("BN_LLONG"),
+ uplink_arch => 'common',
+ asm_arch => 'x86',
+ perlasm_scheme => sub { vc_win32_info()->{perlasm_scheme} },
+ # "WOW" stands for "Windows on Windows", and "VC-WOW" engages
+ # some installation path heuristics in windows-makefile.tmpl...
+ build_scheme => add("VC-WOW", { separator => undef }),
+ },
+ "VC-CE" => {
+ inherit_from => [ "VC-common" ],
+ CFLAGS => add(picker(debug => "/Od",
+ release => "/O1i")),
+ CPPDEFINES => picker(debug => [ "DEBUG", "_DEBUG" ]),
+ LDFLAGS => add("/nologo /opt:ref"),
+ cflags =>
+ combine('/GF /Gy',
+ sub { vc_wince_info()->{cflags}; },
+ sub { `cl 2>&1` =~ /Version ([0-9]+)\./ && $1>=14
+ ? ($disabled{shared} ? " /MT" : " /MD")
+ : " /MC"; }),
+ cppflags => sub { vc_wince_info()->{cppflags}; },
+ lib_defines => add("NO_CHMOD", "OPENSSL_SMALL_FOOTPRINT"),
+ lib_cppflags => sub { vc_wince_info()->{cppflags}; },
+ includes =>
+ add(combine(sub { defined(env('WCECOMPAT'))
+ ? '$(WCECOMPAT)/include' : (); },
+ sub { defined(env('PORTSDK_LIBPATH'))
+ ? '$(PORTSDK_LIBPATH)/../../include'
+ : (); })),
+ lflags => add(combine(sub { vc_wince_info()->{lflags}; },
+ sub { defined(env('PORTSDK_LIBPATH'))
+ ? "/entry:mainCRTstartup" : (); })),
+ sys_id => "WINCE",
+ bn_ops => add("BN_LLONG"),
+ ex_libs => add(sub {
+ my @ex_libs = ();
+ push @ex_libs, 'ws2.lib' unless $disabled{sock};
+ push @ex_libs, 'crypt32.lib';
+ if (defined(env('WCECOMPAT'))) {
+ my $x = '$(WCECOMPAT)/lib';
+ if (-f "$x/env('TARGETCPU')/wcecompatex.lib") {
+ $x .= '/$(TARGETCPU)/wcecompatex.lib';
+ } else {
+ $x .= '/wcecompatex.lib';
+ }
+ push @ex_libs, $x;
+ }
+ push @ex_libs, '$(PORTSDK_LIBPATH)/portlib.lib'
+ if (defined(env('PORTSDK_LIBPATH')));
+ push @ex_libs, '/nodefaultlib coredll.lib corelibc.lib'
+ if (env('TARGETCPU') =~ /^X86|^ARMV4[IT]/);
+ return join(" ", @ex_libs);
+ }),
+ },
+
+#### MinGW
+ "mingw-common" => {
+ inherit_from => [ 'BASE_unix' ],
+ template => 1,
+ CC => "gcc",
+ CFLAGS => picker(default => "-Wall",
+ debug => "-g -O0",
+ release => "-O3"),
+ cppflags => combine("-DUNICODE -D_UNICODE -DWIN32_LEAN_AND_MEAN",
+ threads("-D_MT")),
+ lib_cppflags => "-DL_ENDIAN",
+ ex_libs => add("-lws2_32 -lgdi32 -lcrypt32"),
+ thread_scheme => "winthreads",
+ dso_scheme => "win32",
+ shared_target => "mingw-shared",
+ shared_cppflags => add("_WINDLL"),
+ shared_ldflag => "-static-libgcc",
+
+ perl_platform => 'mingw',
+ },
+ "mingw" => {
+ inherit_from => [ "mingw-common" ],
+ CFLAGS => add(picker(release => "-fomit-frame-pointer")),
+ cflags => "-m32",
+ sys_id => "MINGW32",
+ bn_ops => add("BN_LLONG"),
+ asm_arch => 'x86',
+ uplink_arch => 'x86',
+ perlasm_scheme => "coff",
+ shared_rcflag => "--target=pe-i386",
+ multilib => "",
+ },
+ "mingw64" => {
+ # As for uplink_arch. Applink makes it possible to use
+ # .dll compiled with one compiler with application compiled with
+ # another compiler. It's possible to engage Applink support in
+ # mingw64 build, but it's not done, because until mingw64
+ # supports structured exception handling, one can't seriously
+ # consider its binaries for using with non-mingw64 run-time
+ # environment. And as mingw64 is always consistent with itself,
+ # Applink is never engaged and can as well be omitted.
+ inherit_from => [ "mingw-common" ],
+ cflags => "-m64",
+ sys_id => "MINGW64",
+ bn_ops => add("SIXTY_FOUR_BIT"),
+ asm_arch => 'x86_64',
+ uplink_arch => undef,
+ perlasm_scheme => "mingw64",
+ shared_rcflag => "--target=pe-x86-64",
+ multilib => "64",
+ },
+
+#### UEFI
+ "UEFI" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "cc",
+ CFLAGS => "-O",
+ lib_cppflags => "-DL_ENDIAN",
+ sys_id => "UEFI",
+ },
+ "UEFI-x86" => {
+ inherit_from => [ "UEFI" ],
+ asm_arch => 'x86',
+ perlasm_scheme => "win32n",
+ },
+ "UEFI-x86_64" => {
+ inherit_from => [ "UEFI" ],
+ asm_arch => 'x86_64',
+ perlasm_scheme => "nasm",
+ },
+
+#### UWIN
+ "UWIN" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "cc",
+ CFLAGS => "-O -Wall",
+ lib_cppflags => "-DTERMIOS -DL_ENDIAN",
+ sys_id => "UWIN",
+ bn_ops => "BN_LLONG",
+ dso_scheme => "win32",
+ },
+
+#### Cygwin
+ "Cygwin-common" => {
+ inherit_from => [ "BASE_unix" ],
+ template => 1,
+
+ CC => "gcc",
+ CFLAGS => picker(default => "-Wall",
+ debug => "-g -O0",
+ release => "-O3"),
+ lib_cppflags => "-DTERMIOS -DL_ENDIAN",
+ sys_id => "CYGWIN",
+ thread_scheme => "pthread",
+ dso_scheme => "dlfcn",
+ shared_target => "cygwin-shared",
+ shared_cppflags => "-D_WINDLL",
+
+ perl_platform => 'Cygwin',
+ },
+ "Cygwin-x86" => {
+ inherit_from => [ "Cygwin-common" ],
+ CFLAGS => add(picker(release => "-O3 -fomit-frame-pointer")),
+ bn_ops => "BN_LLONG",
+ asm_arch => 'x86',
+ perlasm_scheme => "coff",
+ },
+ "Cygwin-x86_64" => {
+ inherit_from => [ "Cygwin-common" ],
+ CC => "gcc",
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'x86_64',
+ perlasm_scheme => "mingw64",
+ },
+ # Backward compatibility for those using this target
+ "Cygwin" => {
+ inherit_from => [ "Cygwin-x86" ]
+ },
+ # In case someone constructs the Cygwin target name themself
+ "Cygwin-i386" => {
+ inherit_from => [ "Cygwin-x86" ]
+ },
+ "Cygwin-i486" => {
+ inherit_from => [ "Cygwin-x86" ]
+ },
+ "Cygwin-i586" => {
+ inherit_from => [ "Cygwin-x86" ]
+ },
+ "Cygwin-i686" => {
+ inherit_from => [ "Cygwin-x86" ]
+ },
+
+##### MacOS X (a.k.a. Darwin) setup
+ "darwin-common" => {
+ inherit_from => [ "BASE_unix" ],
+ template => 1,
+ CC => "cc",
+ CFLAGS => picker(debug => "-g -O0",
+ release => "-O3"),
+ cppflags => threads("-D_REENTRANT"),
+ lflags => add("-Wl,-search_paths_first"),
+ sys_id => "MACOSX",
+ bn_ops => "BN_LLONG RC4_CHAR",
+ thread_scheme => "pthreads",
+ perlasm_scheme => "osx32",
+ dso_scheme => "dlfcn",
+ ranlib => "ranlib -c",
+ shared_target => "darwin-shared",
+ shared_cflag => "-fPIC",
+ shared_extension => ".\$(SHLIB_VERSION_NUMBER).dylib",
+ },
+ # Option "freeze" such as -std=gnu9x can't negatively interfere
+ # with future defaults for below two targets, because MacOS X
+ # for PPC has no future, it was discontinued by vendor in 2009.
+ "darwin-ppc-cc" => { inherit_from => [ "darwin-ppc" ] }, # Historic alias
+ "darwin-ppc" => {
+ inherit_from => [ "darwin-common" ],
+ cflags => add("-arch ppc -std=gnu9x -Wa,-force_cpusubtype_ALL"),
+ lib_cppflags => add("-DB_ENDIAN"),
+ shared_cflag => add("-fno-common"),
+ asm_arch => 'ppc32',
+ perlasm_scheme => "osx32",
+ },
+ "darwin64-ppc-cc" => { inherit_from => [ "darwin64-ppc" ] }, # Historic alias
+ "darwin64-ppc" => {
+ inherit_from => [ "darwin-common" ],
+ cflags => add("-arch ppc64 -std=gnu9x"),
+ lib_cppflags => add("-DB_ENDIAN"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
+ asm_arch => 'ppc64',
+ perlasm_scheme => "osx64",
+ },
+ "darwin-i386-cc" => { inherit_from => [ "darwin-i386" ] }, # Historic alias
+ "darwin-i386" => {
+ inherit_from => [ "darwin-common" ],
+ CFLAGS => add(picker(release => "-fomit-frame-pointer")),
+ cflags => add("-arch i386"),
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "BN_LLONG RC4_INT",
+ asm_arch => 'x86',
+ perlasm_scheme => "macosx",
+ },
+ "darwin64-x86_64-cc" => { inherit_from => [ "darwin64-x86_64" ] }, # Historic alias
+ "darwin64-x86_64" => {
+ inherit_from => [ "darwin-common" ],
+ CFLAGS => add("-Wall"),
+ cflags => add("-arch x86_64"),
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'x86_64',
+ perlasm_scheme => "macosx",
+ },
+ "darwin64-arm64-cc" => { inherit_from => [ "darwin64-arm64" ] }, # "Historic" alias
+ "darwin64-arm64" => {
+ inherit_from => [ "darwin-common" ],
+ CFLAGS => add("-Wall"),
+ cflags => add("-arch arm64"),
+ lib_cppflags => add("-DL_ENDIAN"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ asm_arch => 'aarch64',
+ perlasm_scheme => "ios64",
+ },
+
+##### GNU Hurd
+ "hurd-x86" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CFLAGS => "-O3 -fomit-frame-pointer -Wall",
+ cflags => threads("-pthread"),
+ lib_cppflags => "-DL_ENDIAN",
+ ex_libs => add("-ldl", threads("-pthread")),
+ bn_ops => "BN_LLONG",
+ asm_arch => 'x86',
+ perlasm_scheme => 'elf',
+ thread_scheme => "pthreads",
+ dso_scheme => "dlfcn",
+ shared_target => "linux-shared",
+ shared_cflag => "-fPIC",
+ },
+
+##### VxWorks for various targets
+ "vxworks-ppc60x" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "ccppc",
+ CFLAGS => "-O2 -Wall -fstrength-reduce",
+ cflags => "-mrtp -mhard-float -mstrict-align -fno-implicit-fp -fno-builtin -fno-strict-aliasing",
+ cppflags => combine("-D_REENTRANT -DPPC32_fp60x -DCPU=PPC32",
+ "_DTOOL_FAMILY=gnu -DTOOL=gnu",
+ "-I\$(WIND_BASE)/target/usr/h",
+ "-I\$(WIND_BASE)/target/usr/h/wrn/coreip"),
+ sys_id => "VXWORKS",
+ lflags => add("-L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/common"),
+ ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000"),
+ },
+ "vxworks-ppcgen" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "ccppc",
+ CFLAGS => "-O1 -Wall",
+ cflags => "-mrtp -msoft-float -mstrict-align -fno-builtin -fno-strict-aliasing",
+ cppflags => combine("-D_REENTRANT -DPPC32 -DCPU=PPC32",
+ "-DTOOL_FAMILY=gnu -DTOOL=gnu",
+ "-I\$(WIND_BASE)/target/usr/h",
+ "-I\$(WIND_BASE)/target/usr/h/wrn/coreip"),
+ sys_id => "VXWORKS",
+ lflags => add("-L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/sfcommon"),
+ ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000"),
+ },
+ "vxworks-ppc405" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "ccppc",
+ CFLAGS => "-g",
+ cflags => "-msoft-float -mlongcall",
+ cppflags => combine("-D_REENTRANT -DPPC32 -DCPU=PPC405",
+ "-DTOOL_FAMILY=gnu -DTOOL=gnu",
+ "-I\$(WIND_BASE)/target/h"),
+ sys_id => "VXWORKS",
+ lflags => add("-r"),
+ },
+ "vxworks-ppc750" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "ccppc",
+ CFLAGS => "-ansi -fvolatile -Wall \$(DEBUG_FLAG)",
+ cflags => "-nostdinc -fno-builtin -fno-for-scope -fsigned-char -msoft-float -mlongcall",
+ cppflags => combine("-DPPC750 -D_REENTRANT -DCPU=PPC604",
+ "-I\$(WIND_BASE)/target/h"),
+ sys_id => "VXWORKS",
+ lflags => add("-r"),
+ },
+ "vxworks-ppc750-debug" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "ccppc",
+ CFLAGS => "-ansi -fvolatile -Wall -g",
+ cflags => "-nostdinc -fno-builtin -fno-for-scope -fsigned-char -msoft-float -mlongcall",
+ cppflags => combine("-DPPC750 -D_REENTRANT -DCPU=PPC604",
+ "-DPEDANTIC -DDEBUG",
+ "-I\$(WIND_BASE)/target/h"),
+ sys_id => "VXWORKS",
+ lflags => add("-r"),
+ },
+ "vxworks-ppc860" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "ccppc",
+ cflags => "-nostdinc -msoft-float",
+ cppflags => combine("-DCPU=PPC860 -DNO_STRINGS_H",
+ "-I\$(WIND_BASE)/target/h"),
+ sys_id => "VXWORKS",
+ lflags => add("-r"),
+ },
+ "vxworks-simlinux" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "ccpentium",
+ cflags => "-B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -fno-builtin -fno-defer-pop",
+ cppflags => combine("-D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\"",
+ "-DL_ENDIAN -DCPU=SIMLINUX -DNO_STRINGS_H",
+ "-DTOOL_FAMILY=gnu -DTOOL=gnu",
+ "-DOPENSSL_NO_HW_PADLOCK",
+ "-I\$(WIND_BASE)/target/h",
+ "-I\$(WIND_BASE)/target/h/wrn/coreip"),
+ sys_id => "VXWORKS",
+ lflags => add("-r"),
+ ranlib => "ranlibpentium",
+ },
+ "vxworks-mips" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "ccmips",
+ CFLAGS => "-O -G 0",
+ cflags => "-mrtp -mips2 -B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -msoft-float -mno-branch-likely -fno-builtin -fno-defer-pop",
+ cppflags => combine("-D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\"",
+ "-DCPU=MIPS32 -DNO_STRINGS_H",
+ "-DTOOL_FAMILY=gnu -DTOOL=gnu",
+ "-DOPENSSL_NO_HW_PADLOCK",
+ threads("-D_REENTRANT"),
+ "-I\$(WIND_BASE)/target/h",
+ "-I\$(WIND_BASE)/target/h/wrn/coreip"),
+ sys_id => "VXWORKS",
+ lflags => add("-L \$(WIND_BASE)/target/usr/lib/mips/MIPSI32/sfcommon"),
+ ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000"),
+ thread_scheme => "pthreads",
+ asm_arch => 'mips32',
+ perlasm_scheme => "o32",
+ ranlib => "ranlibmips",
+ },
+
+#### uClinux
+ "uClinux-dist" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => sub { env('CC') },
+ cppflags => threads("-D_REENTRANT"),
+ ex_libs => add("\$(LDLIBS)"),
+ bn_ops => "BN_LLONG",
+ thread_scheme => "pthreads",
+ dso_scheme => sub { env('LIBSSL_dlfcn') },
+ shared_target => "linux-shared",
+ shared_cflag => "-fPIC",
+ ranlib => sub { env('RANLIB') },
+ },
+ "uClinux-dist64" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => sub { env('CC') },
+ cppflags => threads("-D_REENTRANT"),
+ ex_libs => add("\$(LDLIBS)"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ thread_scheme => "pthreads",
+ dso_scheme => sub { env('LIBSSL_dlfcn') },
+ shared_target => "linux-shared",
+ shared_cflag => "-fPIC",
+ ranlib => sub { env('RANLIB') },
+ },
+
+ ##### VMS
+ # Most things happen in vms-generic.
+ # Note that vms_info extracts the pointer size from the end of
+ # the target name, and will assume that anything matching /-p\d+$/
+ # indicates the pointer size setting for the desired target.
+ "vms-generic" => {
+ inherit_from => [ "BASE_VMS" ],
+ template => 1,
+ CC => "CC/DECC",
+ CPP => '$(CC)/PREPROCESS_ONLY=SYS$OUTPUT:',
+ CFLAGS =>
+ combine(picker(default => "/STANDARD=(ISOC94,RELAXED)/NOLIST/PREFIX=ALL",
+ debug => "/NOOPTIMIZE/DEBUG",
+ release => "/OPTIMIZE/NODEBUG"),
+ sub { my @warnings =
+ @{vms_info()->{disable_warns}};
+ @warnings
+ ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); }),
+ cflag_incfirst => '/FIRST_INCLUDE=',
+ lib_defines =>
+ add("OPENSSL_USE_NODELETE",
+ sub {
+ return vms_info()->{def_zlib}
+ ? "LIBZ=\"\"\"".vms_info()->{def_zlib}."\"\"\"" : ();
+ }),
+ lflags => picker(default => "/MAP='F\$PARSE(\".MAP\",\"\$\@\")'",
+ debug => "/DEBUG/TRACEBACK",
+ release => "/NODEBUG/NOTRACEBACK"),
+ # Because of dso_cflags below, we can't set the generic |cflags| here,
+ # as it can't be overridden, so we set separate C flags for libraries
+ # and binaries instead.
+ bin_cflags => add("/NAMES=(AS_IS,SHORTENED)/EXTERN_MODEL=STRICT_REFDEF"),
+ lib_cflags => add("/NAMES=(AS_IS,SHORTENED)/EXTERN_MODEL=STRICT_REFDEF"),
+ # Strictly speaking, DSOs should not need to have name shortening,
+ # as all their exported symbols should be short enough to fit the
+ # linker's 31 character per symbol name limit. However, providers
+ # may be composed of more than one object file, and internal symbols
+ # may and do surpass the 31 character limit.
+ dso_cflags => add("/NAMES=(SHORTENED)"),
+ ex_libs => add(sub { return vms_info()->{zlib} || (); }),
+ shared_target => "vms-shared",
+ # def_flag made to empty string so a .opt file gets generated
+ shared_defflag => '',
+ dso_scheme => "vms",
+ thread_scheme => "pthreads",
+
+ makedep_scheme => 'VMS C',
+ AS => sub { vms_info()->{AS} },
+ ASFLAGS => sub { vms_info()->{ASFLAGS} },
+ asoutflag => sub { vms_info()->{asoutflag} },
+ asflags => sub { vms_info()->{asflags} },
+ perlasm_scheme => sub { vms_info()->{perlasm_scheme} },
+
+ disable => add('pinshared', 'loadereng'),
+
+ },
+
+ # From HELP CC/POINTER_SIZE:
+ #
+ # ----------
+ # LONG[=ARGV] The compiler assumes 64-bit pointers. If the ARGV option to
+ # LONG or 64 is present, the main argument argv will be an
+ # array of long pointers instead of an array of short pointers.
+ #
+ # 64[=ARGV] Same as LONG.
+ # ----------
+ #
+ # We don't want the hassle of dealing with 32-bit pointers with argv, so
+ # we force it to have 64-bit pointers, see the added cflags in the -p64
+ # config targets below.
+
+ "vms-alpha" => {
+ inherit_from => [ "vms-generic" ],
+ bn_ops => "SIXTY_FOUR_BIT RC4_INT",
+ pointer_size => "",
+ },
+ "vms-alpha-p32" => {
+ inherit_from => [ "vms-alpha" ],
+ cflags => add("/POINTER_SIZE=32"),
+ pointer_size => "32",
+ },
+ "vms-alpha-p64" => {
+ inherit_from => [ "vms-alpha" ],
+ cflags => add("/POINTER_SIZE=64=ARGV"),
+ pointer_size => "64",
+ },
+ "vms-ia64" => {
+ inherit_from => [ "vms-generic" ],
+ bn_ops => "SIXTY_FOUR_BIT RC4_INT",
+ asm_arch => sub { vms_info()->{AS} ? 'ia64' : undef },
+ perlasm_scheme => 'ias',
+ pointer_size => "",
+
+ },
+ "vms-ia64-p32" => {
+ inherit_from => [ "vms-ia64" ],
+ cflags => add("/POINTER_SIZE=32"),
+ pointer_size => "32",
+ },
+ "vms-ia64-p64" => {
+ inherit_from => [ "vms-ia64" ],
+ cflags => add("/POINTER_SIZE=64=ARGV"),
+ pointer_size => "64",
+ },
+ "vms-x86_64" => {
+ inherit_from => [ "vms-generic" ],
+ bn_ops => "SIXTY_FOUR_BIT",
+ pointer_size => "",
+ },
+ "vms-x86_64-p32" => {
+ inherit_from => [ "vms-x86_64" ],
+ cflags => add("/POINTER_SIZE=32"),
+ pointer_size => "32",
+ },
+ "vms-x86_64-p64" => {
+ inherit_from => [ "vms-x86_64" ],
+ cflags => add("/POINTER_SIZE=64=ARGV"),
+ pointer_size => "64",
+ }
+);
diff --git a/Configurations/15-android.conf b/Configurations/15-android.conf
new file mode 100644
index 000000000000..41ad9223e094
--- /dev/null
+++ b/Configurations/15-android.conf
@@ -0,0 +1,291 @@
+#### Android...
+#
+# See NOTES-Android.md for details, and don't miss platform-specific
+# comments below...
+
+{
+ use File::Spec::Functions;
+
+ my $android_ndk = {};
+ my %triplet = (
+ arm => "arm-linux-androideabi",
+ arm64 => "aarch64-linux-android",
+ mips => "mipsel-linux-android",
+ mips64 => "mips64el-linux-android",
+ x86 => "i686-linux-android",
+ x86_64 => "x86_64-linux-android",
+ );
+
+ sub android_ndk {
+ unless (%$android_ndk) {
+ if ($now_printing =~ m|^android|) {
+ return $android_ndk = { bn_ops => "BN_AUTO" };
+ }
+
+ my $ndk_var;
+ my $ndk;
+ foreach (qw(ANDROID_NDK_ROOT ANDROID_NDK)) {
+ $ndk_var = $_;
+ $ndk = $ENV{$ndk_var};
+ last if defined $ndk;
+ }
+ die "\$ANDROID_NDK_ROOT is not defined" if (!$ndk);
+ my $is_standalone_toolchain = -f "$ndk/AndroidVersion.txt";
+ my $ndk_src_props = "$ndk/source.properties";
+ my $is_ndk = -f $ndk_src_props;
+ if ($is_ndk == $is_standalone_toolchain) {
+ die "\$ANDROID_NDK_ROOT=$ndk is invalid";
+ }
+ $ndk = canonpath($ndk);
+
+ my $ndkver = undef;
+
+ if (open my $fh, "<$ndk_src_props") {
+ local $_;
+ while(<$fh>) {
+ if (m|Pkg\.Revision\s*=\s*([0-9]+)|) {
+ $ndkver = $1;
+ last;
+ }
+ }
+ close $fh;
+ }
+
+ my ($sysroot, $api, $arch);
+
+ $config{target} =~ m|[^-]+-([^-]+)$|; # split on dash
+ $arch = $1;
+
+ if ($sysroot = $ENV{CROSS_SYSROOT}) {
+ $sysroot =~ m|/android-([0-9]+)/arch-(\w+)/?$|;
+ ($api, $arch) = ($1, $2);
+ } elsif ($is_standalone_toolchain) {
+ $sysroot = "$ndk/sysroot";
+ } else {
+ $api = "*";
+
+ # see if user passed -D__ANDROID_API__=N
+ foreach (@{$useradd{CPPDEFINES}}, @{$user{CPPFLAGS}}) {
+ if (m|__ANDROID_API__=([0-9]+)|) {
+ $api = $1;
+ last;
+ }
+ }
+
+ if (-d "$ndk/platforms") {
+ # list available platforms (numerically)
+ my @platforms = sort { $a =~ m/-([0-9]+)$/; my $aa = $1;
+ $b =~ m/-([0-9]+)$/; $aa <=> $1;
+ } glob("$ndk/platforms/android-$api");
+ die "no $ndk/platforms/android-$api" if ($#platforms < 0);
+
+ $sysroot = "@platforms[$#platforms]/arch-$arch";
+ $sysroot =~ m|/android-([0-9]+)/arch-$arch|;
+ $api = $1;
+ } elsif ($api eq "*") {
+ # r22 Removed platforms dir, use this JSON file
+ my $path = "$ndk/meta/platforms.json";
+ open my $fh, $path or die "Could not open '$path' $!";
+ while (<$fh>) {
+ if (/"max": (\d+),/) {
+ $api = $1;
+ last;
+ }
+ }
+ close $fh;
+ }
+ die "Could not get default API Level" if ($api eq "*");
+ }
+ die "no sysroot=$sysroot" if (length $sysroot && !-d $sysroot);
+
+ my $triarch = $triplet{$arch};
+ my $cflags;
+ my $cppflags;
+
+ # see if there is NDK clang on $PATH, "universal" or "standalone"
+ if (which("clang") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
+ my $host=$1;
+ # harmonize with gcc default
+ my $arm = $ndkver > 16 ? "armv7a" : "armv5te";
+ (my $tridefault = $triarch) =~ s/^arm-/$arm-/;
+ (my $tritools = $triarch) =~ s/(?:x|i6)86(_64)?-.*/x86$1/;
+ if (length $sysroot) {
+ $cflags .= " -target $tridefault "
+ . "-gcc-toolchain \$($ndk_var)/toolchains"
+ . "/$tritools-4.9/prebuilt/$host";
+ $user{CC} = "clang" if ($user{CC} !~ m|clang|);
+ } else {
+ $user{CC} = "$tridefault$api-clang";
+ }
+ $user{CROSS_COMPILE} = undef;
+ if (which("llvm-ar") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
+ $user{AR} = "llvm-ar";
+ $user{ARFLAGS} = [ "rs" ];
+ $user{RANLIB} = ":";
+ }
+ } elsif ($is_standalone_toolchain) {
+ my $cc = $user{CC} // "clang";
+ # One can probably argue that both clang and gcc should be
+ # probed, but support for "standalone toolchain" was added
+ # *after* announcement that gcc is being phased out, so
+ # favouring clang is considered adequate. Those who insist
+ # have option to enforce test for gcc with CC=gcc.
+ if (which("$triarch-$cc") !~ m|^$ndk|) {
+ die "no NDK $triarch-$cc on \$PATH";
+ }
+ $user{CC} = $cc;
+ $user{CROSS_COMPILE} = "$triarch-";
+ } elsif ($user{CC} eq "clang") {
+ die "no NDK clang on \$PATH";
+ } else {
+ if (which("$triarch-gcc") !~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
+ die "no NDK $triarch-gcc on \$PATH";
+ }
+ $cflags .= " -mandroid";
+ $user{CROSS_COMPILE} = "$triarch-";
+ }
+
+ if (length $sysroot) {
+ if (!-d "$sysroot/usr/include") {
+ my $incroot = "$ndk/sysroot/usr/include";
+ die "no $incroot" if (!-d $incroot);
+ die "no $incroot/$triarch" if (!-d "$incroot/$triarch");
+ $incroot =~ s|^$ndk/||;
+ $cppflags = "-D__ANDROID_API__=$api";
+ $cppflags .= " -isystem \$($ndk_var)/$incroot/$triarch";
+ $cppflags .= " -isystem \$($ndk_var)/$incroot";
+ }
+ $sysroot =~ s|^$ndk/||;
+ $sysroot = " --sysroot=\$($ndk_var)/$sysroot";
+ }
+ $android_ndk = {
+ cflags => $cflags . $sysroot,
+ cppflags => $cppflags,
+ bn_ops => $arch =~ m/64$/ ? "SIXTY_FOUR_BIT_LONG"
+ : "BN_LLONG",
+ };
+ }
+
+ return $android_ndk;
+ }
+}
+
+my %targets = (
+ "android" => {
+ inherit_from => [ "linux-generic32" ],
+ template => 1,
+ ################################################################
+ # Special note about -pie. The underlying reason is that
+ # Lollipop refuses to run non-PIE. But what about older systems
+ # and NDKs? -fPIC was never problem, so the only concern is -pie.
+ # Older toolchains, e.g. r4, appear to handle it and binaries
+ # turn out mostly functional. "Mostly" means that oldest
+ # Androids, such as Froyo, fail to handle executable, but newer
+ # systems are perfectly capable of executing binaries targeting
+ # Froyo. Keep in mind that in the nutshell Android builds are
+ # about JNI, i.e. shared libraries, not applications.
+ cflags => add(sub { android_ndk()->{cflags} }),
+ cppflags => add(sub { android_ndk()->{cppflags} }),
+ cxxflags => add(sub { android_ndk()->{cflags} }),
+ bn_ops => sub { android_ndk()->{bn_ops} },
+ bin_cflags => "-fPIE",
+ bin_lflags => "-pie",
+ enable => [ ],
+ shared_extension => ".so",
+ },
+ "android-arm" => {
+ ################################################################
+ # Contemporary Android applications can provide multiple JNI
+ # providers in .apk, targeting multiple architectures. Among
+ # them there is "place" for two ARM flavours: generic eabi and
+ # armv7-a/hard-float. However, it should be noted that OpenSSL's
+ # ability to engage NEON is not constrained by ABI choice, nor
+ # is your ability to call OpenSSL from your application code
+ # compiled with floating-point ABI other than default 'soft'.
+ # (Latter thanks to __attribute__((pcs("aapcs"))) declaration.)
+ # This means that choice of ARM libraries you provide in .apk
+ # is driven by application needs. For example if application
+ # itself benefits from NEON or is floating-point intensive, then
+ # it might be appropriate to provide both libraries. Otherwise
+ # just generic eabi would do. But in latter case it would be
+ # appropriate to
+ #
+ # ./Configure android-arm -D__ARM_MAX_ARCH__=8
+ #
+ # in order to build "universal" binary and allow OpenSSL take
+ # advantage of NEON when it's available.
+ #
+ # Keep in mind that (just like with linux-armv4) we rely on
+ # compiler defaults, which is not necessarily what you had
+ # in mind, in which case you would have to pass additional
+ # -march and/or -mfloat-abi flags. NDK defaults to armv5te.
+ # Newer NDK versions reportedly require additional -latomic.
+ #
+ inherit_from => [ "android" ],
+ bn_ops => add("RC4_CHAR"),
+ asm_arch => 'armv4',
+ perlasm_scheme => "void",
+ },
+ "android-arm64" => {
+ inherit_from => [ "android" ],
+ bn_ops => add("RC4_CHAR"),
+ asm_arch => 'aarch64',
+ perlasm_scheme => "linux64",
+ },
+
+ "android-mips" => {
+ inherit_from => [ "android" ],
+ bn_ops => add("RC4_CHAR"),
+ asm_arch => 'mips32',
+ perlasm_scheme => "o32",
+ },
+ "android-mips64" => {
+ ################################################################
+ # You are more than likely have to specify target processor
+ # on ./Configure command line. Trouble is that toolchain's
+ # default is MIPS64r6 (at least in r10d), but there are no
+ # such processors around (or they are too rare to spot one).
+ # Actual problem is that MIPS64r6 is binary incompatible
+ # with previous MIPS ISA versions, in sense that unlike
+ # prior versions original MIPS binary code will fail.
+ #
+ inherit_from => [ "android" ],
+ bn_ops => add("RC4_CHAR"),
+ asm_arch => 'mips64',
+ perlasm_scheme => "64",
+ },
+
+ "android-x86" => {
+ inherit_from => [ "android" ],
+ CFLAGS => add(picker(release => "-fomit-frame-pointer")),
+ bn_ops => add("RC4_INT"),
+ asm_arch => 'x86',
+ perlasm_scheme => "android",
+ ex_libs => add(threads("-latomic")),
+ },
+ "android-x86_64" => {
+ inherit_from => [ "android" ],
+ bn_ops => add("RC4_INT"),
+ asm_arch => 'x86_64',
+ perlasm_scheme => "elf",
+ },
+
+ ####################################################################
+ # Backward compatible targets, (might) require $CROSS_SYSROOT
+ #
+ "android-armeabi" => {
+ inherit_from => [ "android-arm" ],
+ },
+ "android64" => {
+ inherit_from => [ "android" ],
+ },
+ "android64-aarch64" => {
+ inherit_from => [ "android-arm64" ],
+ },
+ "android64-x86_64" => {
+ inherit_from => [ "android-x86_64" ],
+ },
+ "android64-mips64" => {
+ inherit_from => [ "android-mips64" ],
+ },
+);
diff --git a/Configurations/15-ios.conf b/Configurations/15-ios.conf
new file mode 100644
index 000000000000..54d37f63f445
--- /dev/null
+++ b/Configurations/15-ios.conf
@@ -0,0 +1,64 @@
+#### iPhoneOS/iOS
+#
+# It takes recent enough Xcode to use following two targets. It shouldn't
+# be a problem by now, but if they don't work, original targets below
+# that depend on manual definition of environment variables should still
+# work...
+#
+my %targets = (
+ "ios-common" => {
+ template => 1,
+ inherit_from => [ "darwin-common" ],
+ sys_id => "iOS",
+ disable => [ "shared", "async" ],
+ },
+ "ios-xcrun" => {
+ inherit_from => [ "ios-common" ],
+ # It should be possible to go below iOS 6 and even add -arch armv6,
+ # thus targeting iPhone pre-3GS, but it's assumed to be irrelevant
+ # at this point.
+ CC => "xcrun -sdk iphoneos cc",
+ cflags => add("-arch armv7 -mios-version-min=6.0.0 -fno-common"),
+ asm_arch => 'armv4',
+ perlasm_scheme => "ios32",
+ },
+ "ios64-xcrun" => {
+ inherit_from => [ "ios-common" ],
+ CC => "xcrun -sdk iphoneos cc",
+ cflags => add("-arch arm64 -mios-version-min=7.0.0 -fno-common"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
+ asm_arch => 'aarch64',
+ perlasm_scheme => "ios64",
+ },
+ "iossimulator-xcrun" => {
+ inherit_from => [ "ios-common" ],
+ CC => "xcrun -sdk iphonesimulator cc",
+ },
+# It takes three prior-set environment variables to make it work:
+#
+# CROSS_COMPILE=/where/toolchain/is/usr/bin/ [note ending slash]
+# CROSS_TOP=/where/SDKs/are
+# CROSS_SDK=iPhoneOSx.y.sdk
+#
+# Exact paths vary with Xcode releases, but for couple of last ones
+# they would look like this:
+#
+# CROSS_COMPILE=`xcode-select --print-path`/Toolchains/XcodeDefault.xctoolchain/usr/bin/
+# CROSS_TOP=`xcode-select --print-path`/Platforms/iPhoneOS.platform/Developer
+# CROSS_SDK=iPhoneOS.sdk
+#
+ "iphoneos-cross" => {
+ inherit_from => [ "ios-common" ],
+ cflags => add("-isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fno-common"),
+ },
+ "ios-cross" => {
+ inherit_from => [ "ios-xcrun" ],
+ CC => "cc",
+ cflags => add("-isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK)"),
+ },
+ "ios64-cross" => {
+ inherit_from => [ "ios64-xcrun" ],
+ CC => "cc",
+ cflags => add("-isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK)"),
+ },
+);
diff --git a/Configurations/50-cppbuilder.conf b/Configurations/50-cppbuilder.conf
new file mode 100644
index 000000000000..f19928cb03a2
--- /dev/null
+++ b/Configurations/50-cppbuilder.conf
@@ -0,0 +1,62 @@
+my %targets = (
+ "BC-32" => {
+ inherit_from => [ "BASE_Windows" ],
+ sys_id => "WIN32",
+ bn_ops => "BN_LLONG",
+ thread_scheme => "winthreads",
+ cc => "bcc32c",
+ CPP => "cpp32 -oCON -Sc -Sr",
+ defines => add("WIN32_LEAN_AND_MEAN", "OPENSSL_SYS_WIN32",
+ "L_ENDIAN", "DSO_WIN32", "_stricmp=stricmp",
+ "_strnicmp=strnicmp", "_malloca=malloc",
+ "_freea=free", "_setmode=setmode"),
+ cflags => picker(default => add("-q -c",
+ threads("-tM"),
+ shared("-tR")),
+ debug => "-Od -v -vi- -D_DEBUG",
+ release => "-O2"),
+ bin_cflags => "-tWC",
+ lib_cflags => shared("-tWD -D_WINDLL -D_DLL"),
+ coutflag => "-o",
+
+ # -Sx isn't documented, but 'cpp32 -H -S' explains it:
+ #
+ # -Sx Omit preprocessed text in output
+ makedepcmd => "cpp32 -oCON -Sx -Hp",
+ makedep_scheme => "embarcadero",
+
+ LD => "ilink32",
+ LDFLAGS => picker(default => "-x -Gn -q -w-dup",
+ debug => '-j"$(BDS)\lib\win32c\debug" ' .
+ '-L"$(BDS)\lib\win32c\debug" -v',
+ release => '-j"$(BDS)\lib\win32c\release" ' .
+ '-L"$(BDS)\lib\win32c\release"'),
+ bin_lflags => "-ap -Tpe c0x32.obj wildargs.obj",
+ ldoutflag => ",",
+ ldpostoutflag => ",,",
+ ld_resp_delim => " +\n",
+ ex_libs => add(sub {
+ my @ex_libs = ("import32.lib",
+ ($disabled{shared}
+ ? ($disabled{threads} ? "cw32.lib" : "cw32mt.lib")
+ : ($disabled{threads} ? "cw32i.lib" : "cw32mti.lib")));
+ push @ex_libs, "ws2_32.lib" unless $disabled{sock};
+ return join(" ", @ex_libs);
+ }),
+ AR => "tlib",
+ ARFLAGS => "/P256 /N /u",
+ ar_resp_delim => " &\n",
+ RC => "brcc32",
+ RCFLAGS => '-i"$(BDS)\include\windows\sdk"',
+ rcoutflag => "-fo",
+ shared_target => "win-shared",
+ shared_ldflag => "-aa -Tpd c0d32.obj",
+ lddefflag => ",",
+ ldresflag => ",",
+ ld_implib_rule => 'implib -a $< $**',
+ dso_scheme => "win32",
+ shared_defflag => '',
+ perl_platform => 'Windows::cppbuilder',
+ uplink_arch => 'common',
+ }
+);
diff --git a/Configurations/50-djgpp.conf b/Configurations/50-djgpp.conf
new file mode 100644
index 000000000000..fbe4911c420d
--- /dev/null
+++ b/Configurations/50-djgpp.conf
@@ -0,0 +1,18 @@
+# We can't make any commitment to support the DJGPP platform,
+# and rely entirely on the OpenSSL community to help is fine
+# tune and test.
+
+my %targets = (
+ "DJGPP" => {
+ inherit_from => [ "BASE_unix" ],
+ CC => "gcc",
+ CFLAGS => "-fomit-frame-pointer -O2 -Wall",
+ cflags => "-I/dev/env/WATT_ROOT/inc -DTERMIOS -DL_ENDIAN",
+ sys_id => "MSDOS",
+ lflags => add("-L/dev/env/WATT_ROOT/lib"),
+ ex_libs => add("-lwatt"),
+ bn_ops => "BN_LLONG",
+ asm_arch => 'x86',
+ perlasm_scheme => "a.out",
+ },
+);
diff --git a/Configurations/50-haiku.conf b/Configurations/50-haiku.conf
new file mode 100644
index 000000000000..4580e71a3eb5
--- /dev/null
+++ b/Configurations/50-haiku.conf
@@ -0,0 +1,35 @@
+my %targets = (
+ "haiku-common" => {
+ template => 1,
+ CC => "cc",
+ CFLAGS => add_before(picker(default => "-Wall",
+ debug => "-g -O0",
+ release => "-O2")),
+ cflags => add_before("-DL_ENDIAN -include \$(SRCDIR)/os-dep/haiku.h",
+ threads("-D_REENTRANT")),
+ AR => "ar",
+ ARFLAGS => "qc",
+ HASHBANGPERL => "/bin/env perl",
+ sys_id => "HAIKU",
+ ex_libs => "-lnetwork",
+ perlasm_scheme => "elf",
+ thread_scheme => "pthreads",
+ dso_scheme => "dlfcn",
+ shared_target => "gnu-shared",
+ shared_cflag => "-fPIC",
+ shared_ldflag => "-shared",
+ perl_platform => 'Unix',
+ },
+ "haiku-x86" => {
+ inherit_from => [ "haiku-common" ],
+ CFLAGS => add(picker(release => "-fomit-frame-pointer")),
+ bn_ops => "BN_LLONG",
+ asm_arch => 'x86',
+ perlasm_scheme => 'elf',
+ },
+ "haiku-x86_64" => {
+ inherit_from => [ "haiku-common" ],
+ cflags => add("-m64"),
+ bn_ops => "SIXTY_FOUR_BIT_LONG",
+ },
+);
diff --git a/Configurations/50-masm.conf b/Configurations/50-masm.conf
new file mode 100644
index 000000000000..587a1e70e8ea
--- /dev/null
+++ b/Configurations/50-masm.conf
@@ -0,0 +1,22 @@
+# We can't make commitment to supporting Microsoft assembler,
+# because it would mean supporting all masm versions. This in
+# in turn is because masm is not really an interchangeable option,
+# while users tend to have reasons to stick with specific Visual
+# Studio versions. It's usually lesser hassle to make it work
+# with latest assembler, but tweaking for older versions had
+# proven to be daunting task. This is experimental target, for
+# production builds stick with [up-to-date version of] nasm.
+
+my %targets = (
+ "VC-WIN64A-masm" => {
+ inherit_from => [ "VC-WIN64-common" ],
+ AS => "ml64",
+ ASFLAGS => "/nologo /Zi",
+ asoutflag => "/Fo",
+ asflags => "/c /Cp /Cx",
+ sys_id => "WIN64A",
+ uplink_arch => 'x86_64',
+ asm_arch => 'x86_64',
+ perlasm_scheme => "masm",
+ },
+);
diff --git a/Configurations/50-nonstop.conf b/Configurations/50-nonstop.conf
new file mode 100644
index 000000000000..ed3fe828b318
--- /dev/null
+++ b/Configurations/50-nonstop.conf
@@ -0,0 +1,315 @@
+#### Nonstop configurations
+ # Common for all
+ 'nonstop-common' => {
+ inherit_from => [ 'BASE_unix' ],
+ template => 1,
+ cc => 'c99',
+ cflags => add_before(picker(debug => '-g -O0',
+ release => '-g -O2'),
+ '-Wextensions',
+ '-Wnowarn=203,220,272,734,770,1506',
+ '-Wbuild_neutral_library',
+ '-Wverbose'),
+ defines => add('OPENSSL_VPROC=$(OPENSSL_VPROC)',
+ '_XOPEN_SOURCE',
+ '_XOPEN_SOURCE_EXTENDED=1',
+ '_TANDEM_SOURCE',
+ 'B_ENDIAN'),
+ perl => '/usr/bin/perl',
+ shared_target => 'nonstop-shared',
+ shared_extension => ".so",
+ ex_libs => add('-lrld'),
+ enable => ['egd'],
+ dso_scheme => 'DLFCN',
+ sys_id => 'TANDEM',
+ },
+
+ ######################################################################
+ # Additional variant settings, to be combined with nonstop-common
+ # Note that these do not inherit anything. However, the diverse values
+ # are merged with other entries in an 'inherit_from'.
+ #
+ # These combine:
+ # - System architecture (MIPS, Itanium, or x86)
+ # - Execution environment (oss [default] or guardian)
+ #
+ # Unfortunately, they can't be separated into independent templates, because
+ # a number of the above are encoded as different linkers, and by consequence,
+ # different c99 linker flags (-Wld, -Weld, and -Wxld)
+ #
+ # In addition, the are modifiers for:
+ # - Size of long + pointer (ilp32 [default] and lp64)
+ # - Float type (neutral and tandem)
+ #
+ # Unfortunately, because the float types affect the linker settings, those
+ # are divided per system architecture
+ #
+ # MIPS + guardian (unused but present for convenience):
+ 'nonstop-archenv-mips-guardian' => {
+ template => 1,
+ defines => ['NO_GETPID'],
+ cflags => '-Wtarget=tns/r -Wsystype=guardian',
+ lflags => '-Wld="-set systype guardian"',
+ shared_ldflag => '-Wshared -Wld="-soname $(@:lib%.so=%)"',
+ shared_defflag => '-Wld_obey=',
+ shared_argfileflag => '-Wld_obey=',
+ },
+
+ # Itanium + guardian:
+ 'nonstop-archenv-itanium-guardian' => {
+ template => 1,
+ defines => ['NO_GETPID', '_TANDEM_ARCH=2'],
+ cflags => '-Wtarget=tns/e -Wsystype=guardian',
+ lflags => '-Weld="-set systype guardian"',
+ shared_ldflag => '-Wshared -Weld="-soname $(@:lib%.so=%)"',
+ shared_defflag => '-Weld_obey=',
+ shared_argfileflag => '-Weld_obey=',
+ },
+
+ # x86 + guardian:
+ 'nonstop-archenv-x86_64-guardian' => {
+ template => 1,
+ defines => ['NO_GETPID', '_TANDEM_ARCH=3'],
+ cflags => '-Wtarget=tns/x -Wsystype=guardian',
+ lflags => '-Wxld="-set systype guardian"',
+ shared_ldflag => '-Wshared -Wxld="-soname $(@:lib%.so=%)"',
+ shared_defflag => '-Wxld_obey=',
+ shared_argfileflag => '-Wxld_obey=',
+ },
+
+ # MIPS + oss (unused but present for convenience):
+ 'nonstop-archenv-mips-oss' => {
+ template => 1,
+ cflags => '-Wtarget=tns/r -Wsystype=oss',
+ lflags => '-Wld="-set systype oss"',
+ shared_ldflag => '-Wshared',
+ shared_defflag => '-Wld_obey=',
+ shared_argfileflag => '-Wld_obey=',
+ },
+ # Itanium + oss:
+ 'nonstop-archenv-itanium-oss' => {
+ template => 1,
+ defines => ['_TANDEM_ARCH=2'],
+ cflags => '-Wtarget=tns/e -Wsystype=oss',
+ lflags => '-Weld="-set systype oss"',
+ shared_ldflag => '-Wshared',
+ shared_defflag => '-Weld_obey=',
+ shared_argfileflag => '-Weld_obey=',
+ },
+ # x86_64 + oss:
+ 'nonstop-archenv-x86_64-oss' => {
+ template => 1,
+ defines => ['_TANDEM_ARCH=3'],
+ cflags => '-Wtarget=tns/x -Wsystype=oss',
+ lflags => '-Wxld="-set systype oss"',
+ shared_ldflag => '-Wshared',
+ shared_defflag => '-Wxld_obey=',
+ shared_argfileflag => '-Wxld_obey=',
+ },
+
+ # Size variants
+ 'nonstop-ilp32' => {
+ template => 1,
+ cflags => '-Wilp32',
+ bn_ops => 'THIRTY_TWO_BIT',
+ },
+ 'nonstop-lp64-itanium' => {
+ template => 1,
+ cflags => '-Wlp64',
+ bn_ops => 'SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR',
+ },
+ 'nonstop-lp64-x86_64' => {
+ template => 1,
+ cflags => '-Wlp64',
+ lflags => '-Wxld="-set data_model lp64"',
+ bn_ops => 'SIXTY_FOUR_BIT',
+ },
+
+ # Float variants
+ 'nonstop-nfloat-mips' => {
+ template => 1,
+ lflags => '-Wld="-set floattype neutral_float"',
+ },
+ 'nonstop-tfloat-mips' => {
+ template => 1,
+ lflags => '-Wld="-set floattype tandem_float"',
+ },
+ 'nonstop-efloat-itanium' => {
+ template => 1,
+ cflags => '-WIEEE_float',
+ lflags => '-Weld="-set floattype ieee_float"',
+ },
+ 'nonstop-nfloat-itanium' => {
+ template => 1,
+ lflags => '-Weld="-set floattype neutral_float"',
+ },
+ 'nonstop-tfloat-itanium' => {
+ template => 1,
+ cflags => '-WTandem_float',
+ lflags => '-Weld="-set floattype tandem_float"',
+ },
+ 'nonstop-efloat-x86_64' => {
+ template => 1,
+ cflags => '-WIEEE_float',
+ lflags => '-Wxld="-set floattype ieee_float"',
+ },
+ 'nonstop-nfloat-x86_64' => {
+ template => 1,
+ lflags => '-Wxld="-set floattype neutral_float"',
+ },
+ 'nonstop-tfloat-x86_64' => {
+ template => 1,
+ cflags => '-WTandem_float',
+ lflags => '-Wxld="-set floattype tandem_float"',
+ },
+
+ ######################################################################
+ # Build models
+ 'nonstop-model-put' => {
+ template => 1,
+ defines => ['_PUT_MODEL_',
+ '_REENTRANT', '_THREAD_SUPPORT_FUNCTIONS'],
+ ex_libs => '-lput',
+ },
+ 'nonstop-model-spt' => {
+ template => 1,
+ defines => ['_SPT_MODEL_',
+ '_REENTRANT', '_ENABLE_FLOSS_THREADS'],
+ ex_libs => '-lspt',
+ },
+
+ # Additional floss model that can be combined with any of the other models.
+ # If used without any of the other models, the entry that does so must
+ # disable threads.
+ 'nonstop-model-floss' => {
+ template => 1,
+ defines => ['OPENSSL_TANDEM_FLOSS'],
+ includes => ['/usr/local/include'],
+ ex_libs => '-lfloss',
+ },
+
+ ######################################################################
+ # Now for the entries themselves, let's combine things!
+ 'nonstop-nsx' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-x86_64-oss',
+ 'nonstop-ilp32',
+ 'nonstop-efloat-x86_64' ],
+ disable => ['threads'],
+ },
+ 'nonstop-nsx_put' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-x86_64-oss',
+ 'nonstop-ilp32',
+ 'nonstop-efloat-x86_64',
+ 'nonstop-model-put' ],
+ multilib => '-put',
+ },
+ 'nonstop-nsx_64' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-x86_64-oss',
+ 'nonstop-lp64-x86_64',
+ 'nonstop-efloat-x86_64' ],
+ multilib => '64',
+ disable => ['threads'],
+ },
+ 'nonstop-nsx_64_put' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-x86_64-oss',
+ 'nonstop-lp64-x86_64',
+ 'nonstop-efloat-x86_64',
+ 'nonstop-model-put' ],
+ multilib => '64-put',
+ },
+ 'nonstop-nsx_spt' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-x86_64-oss',
+ 'nonstop-ilp32',
+ 'nonstop-efloat-x86_64',
+ 'nonstop-model-spt' ],
+ multilib => '-spt',
+ },
+ 'nonstop-nsx_spt_floss' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-x86_64-oss',
+ 'nonstop-ilp32',
+ 'nonstop-efloat-x86_64',
+ 'nonstop-model-floss',
+ 'nonstop-model-spt'],
+ multilib => '-spt',
+ },
+ 'nonstop-nsx_g' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-x86_64-guardian',
+ 'nonstop-ilp32', 'nonstop-nfloat-x86_64' ],
+ disable => ['threads'],
+ },
+ 'nonstop-nsx_g_tandem' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-x86_64-guardian',
+ 'nonstop-ilp32', 'nonstop-tfloat-x86_64' ],
+ disable => ['threads'],
+ },
+ 'nonstop-nsv' => {
+ inherit_from => [ 'nonstop-nsx' ],
+ },
+ 'nonstop-nse' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-itanium-oss',
+ 'nonstop-ilp32',
+ 'nonstop-efloat-itanium' ],
+ disable => ['threads'],
+ },
+ 'nonstop-nse_put' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-itanium-oss',
+ 'nonstop-ilp32',
+ 'nonstop-efloat-itanium',
+ 'nonstop-model-put' ],
+ multilib => '-put',
+ },
+ 'nonstop-nse_64' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-itanium-oss',
+ 'nonstop-lp64-itanium',
+ 'nonstop-efloat-itanium' ],
+ multilib => '64',
+ disable => ['threads'],
+ },
+ 'nonstop-nse_64_put' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-itanium-oss',
+ 'nonstop-lp64-itanium',
+ 'nonstop-efloat-itanium',
+ 'nonstop-model-put' ],
+ multilib => '64-put',
+ },
+ 'nonstop-nse_spt' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-itanium-oss',
+ 'nonstop-ilp32',
+ 'nonstop-efloat-itanium',
+ 'nonstop-model-spt' ],
+ multilib => '-spt',
+ },
+ 'nonstop-nse_spt_floss' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-itanium-oss',
+ 'nonstop-ilp32',
+ 'nonstop-efloat-itanium',
+ 'nonstop-model-floss', 'nonstop-model-spt' ],
+ multilib => '-spt',
+ },
+ 'nonstop-nse_g' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-itanium-guardian',
+ 'nonstop-ilp32', 'nonstop-nfloat-itanium' ],
+ disable => ['threads'],
+ },
+
+ 'nonstop-nse_g_tandem' => {
+ inherit_from => [ 'nonstop-common',
+ 'nonstop-archenv-itanium-guardian',
+ 'nonstop-ilp32', 'nonstop-tfloat-itanium' ],
+ disable => ['threads'],
+ },
diff --git a/Configurations/50-os390.conf b/Configurations/50-os390.conf
new file mode 100644
index 000000000000..6e86cb64fe34
--- /dev/null
+++ b/Configurations/50-os390.conf
@@ -0,0 +1,11 @@
+## -*- mode: perl; -*-
+(
+# OS/390 Unix an EBCDIC-based Unix system on IBM mainframe
+ "OS390-Unix" => {
+ inherit_from => [ "BASE_unix" ],
+ cc => "cc",
+ cflags => "-O -DB_ENDIAN -DCHARSET_EBCDIC",
+ bn_ops => "THIRTY_TWO_BIT RC4_CHAR",
+ thread_scheme => "(unknown)",
+ }
+);
diff --git a/Configurations/50-vms-x86_64.conf b/Configurations/50-vms-x86_64.conf
new file mode 100644
index 000000000000..edde2629ade0
--- /dev/null
+++ b/Configurations/50-vms-x86_64.conf
@@ -0,0 +1,14 @@
+## -*- mode: perl; -*-
+
+# OpenVMS cross compilation of x86_64 binaries on Itanium. This doesn't
+# fit the usual cross compilation parameters that are used on Unixly machines
+
+(
+ 'vms-x86_64-cross-ia64' => {
+ inherit_from => [ 'vms-generic' ],
+ CC => 'XCC',
+ bn_ops => 'SIXTY_FOUR_BIT',
+ pointer_size => '',
+ setup_commands => [ '@SYS$MANAGER:X86_XTOOLS$SYLOGIN.COM' ],
+ }
+);
diff --git a/Configurations/50-win-onecore.conf b/Configurations/50-win-onecore.conf
new file mode 100644
index 000000000000..efa2c837bcba
--- /dev/null
+++ b/Configurations/50-win-onecore.conf
@@ -0,0 +1,138 @@
+## -*- mode: perl; -*-
+# Windows OneCore targets.
+#
+# OneCore is new API stability "contract" that transcends Desktop, IoT and
+# Mobile[?] Windows editions. It's a set up "umbrella" libraries that
+# export subset of Win32 API that are common to all Windows 10 devices.
+#
+# OneCore Configuration temporarily dedicated for console applications
+# due to disabled event logging, which is incompatible with one core.
+# Error messages are provided via standard error only.
+# TODO: extend error handling to use ETW based eventing
+# (Or rework whole error messaging)
+
+my $UWP_info = {};
+sub UWP_info {
+ unless (%$UWP_info) {
+ my $SDKver = `powershell -Command \"& {\$(Get-Item \\\"hklm:\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft SDKs\\Windows\\\").GetValue(\\\"CurrentVersion\\\")}\"`;
+ $SDKver =~ s|\R$||;
+ my @SDKver_split = split(/\./, $SDKver);
+ # SDK version older than 10.0.17763 don't support our ASM builds
+ if ($SDKver_split[0] < 10
+ || ($SDKver_split[0] == 10
+ && $SDKver_split[1] == 0
+ && $SDKver_split[2] < 17763)) {
+ $UWP_info->{disable} = [ 'asm' ];
+ } else {
+ $UWP_info->{disable} = [ ];
+ }
+ }
+ return $UWP_info;
+}
+
+my %targets = (
+ "VC-WIN32-ONECORE" => {
+ inherit_from => [ "VC-WIN32" ],
+ # /NODEFAULTLIB:kernel32.lib is needed, because MSVCRT.LIB has
+ # hidden reference to kernel32.lib, but we don't actually want
+ # it in "onecore" build.
+ # /APPCONTAINER is needed for Universal Windows Platform compat
+ lflags => add("/NODEFAULTLIB:kernel32.lib /APPCONTAINER"),
+ defines => add("OPENSSL_SYS_WIN_CORE"),
+ ex_libs => "onecore.lib",
+ },
+ "VC-WIN64A-ONECORE" => {
+ inherit_from => [ "VC-WIN64A" ],
+ lflags => add("/NODEFAULTLIB:kernel32.lib /APPCONTAINER"),
+ defines => add("OPENSSL_SYS_WIN_CORE"),
+ ex_libs => "onecore.lib",
+ },
+
+ # Windows on ARM targets. ARM compilers are additional components in
+ # VS2017, i.e. they are not installed by default. And when installed,
+ # there are no "ARM Tool Command Prompt"s on Start menu, you have
+ # to locate vcvarsall.bat and act accordingly. VC-WIN32-ARM has
+ # received limited testing with evp_test.exe on Windows 10 IoT Core,
+ # but not VC-WIN64-ARM, no hardware... In other words they are not
+ # actually supported...
+ #
+ # Another thing to keep in mind [in cross-compilation scenario such
+ # as this one] is that target's file system has nothing to do with
+ # compilation system's one. This means that you're are likely to use
+ # --prefix and --openssldir with target-specific values. 'nmake install'
+ # step is effectively meaningless in cross-compilation case, though
+ # it might be useful to 'nmake install DESTDIR=S:\ome\where' where you
+ # can point Visual Studio to when compiling custom application code.
+
+ "VC-WIN32-ARM" => {
+ inherit_from => [ "VC-noCE-common" ],
+ defines => add("_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE",
+ "OPENSSL_SYS_WIN_CORE"),
+ bn_ops => "BN_LLONG RC4_CHAR",
+ lflags => add("/NODEFAULTLIB:kernel32.lib /APPCONTAINER"),
+ ex_libs => "onecore.lib",
+ multilib => "-arm",
+ },
+ "VC-WIN64-ARM" => {
+ inherit_from => [ "VC-noCE-common" ],
+ defines => add("_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE",
+ "OPENSSL_SYS_WIN_CORE"),
+ bn_ops => "SIXTY_FOUR_BIT RC4_CHAR",
+ lflags => add("/NODEFAULTLIB:kernel32.lib /APPCONTAINER"),
+ ex_libs => "onecore.lib",
+ multilib => "-arm64",
+ },
+
+ # Universal Windows Platform (UWP) App Support
+
+ # TODO
+ #
+ # The 'disable' attribute should have 'uplink'.
+ # however, these are checked in some 'inherit_from', which is processed
+ # very early, before the 'disable' attributes are seen.
+ # This is a problem that needs to be resolved in Configure first.
+ #
+ # But if you want to build library with Windows 10 Version 1809 SDK or
+ # earlier, the 'disable' attribute should also have 'asm'.
+
+ "VC-WIN32-UWP" => {
+ inherit_from => [ "VC-WIN32-ONECORE" ],
+ lflags => add("/APPCONTAINER"),
+ defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
+ "_WIN32_WINNT=0x0A00"),
+ dso_scheme => "",
+ disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
+ @{ UWP_info()->{disable} } ] },
+ ex_libs => "WindowsApp.lib",
+ },
+ "VC-WIN64A-UWP" => {
+ inherit_from => [ "VC-WIN64A-ONECORE" ],
+ lflags => add("/APPCONTAINER"),
+ defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
+ "_WIN32_WINNT=0x0A00"),
+ dso_scheme => "",
+ disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
+ @{ UWP_info()->{disable} } ] },
+ ex_libs => "WindowsApp.lib",
+ },
+ "VC-WIN32-ARM-UWP" => {
+ inherit_from => [ "VC-WIN32-ARM" ],
+ lflags => add("/APPCONTAINER"),
+ defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
+ "_WIN32_WINNT=0x0A00"),
+ dso_scheme => "",
+ disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
+ @{ UWP_info()->{disable} } ] },
+ ex_libs => "WindowsApp.lib",
+ },
+ "VC-WIN64-ARM-UWP" => {
+ inherit_from => [ "VC-WIN64-ARM" ],
+ lflags => add("/APPCONTAINER"),
+ defines => add("WINAPI_FAMILY=WINAPI_FAMILY_APP",
+ "_WIN32_WINNT=0x0A00"),
+ dso_scheme => "",
+ disable => sub { [ 'ui-console', 'stdio', 'async', 'uplink',
+ @{ UWP_info()->{disable} } ] },
+ ex_libs => "WindowsApp.lib",
+ },
+);
diff --git a/Configurations/INTERNALS.Configure b/Configurations/INTERNALS.Configure
new file mode 100644
index 000000000000..b28305deca4c
--- /dev/null
+++ b/Configurations/INTERNALS.Configure
@@ -0,0 +1,136 @@
+Configure Internals
+===================
+
+[ note: this file uses markdown for formatting ]
+
+Intro
+-----
+
+This is a collection of notes that are hopefully of interest to those
+who decide to dive into Configure and what it does. This is a living
+document and anyone is encouraged to add to it and submit changes.
+There's no claim for this document to be complete at any time, but it
+will hopefully reach such a point in time.
+
+
+----------------------------------------------------------------------
+
+Parsing build.info files, processing conditions
+-----------------------------------------------
+
+Processing conditions in build.info files is done with the help of a
+condition stack that tell if a build.info should be processed or if it
+should just be skipped over. The possible states of the stack top are
+expressed in the following comment from Configure:
+
+ # The top item of this stack has the following values
+ # -2 positive already run and we found ELSE (following ELSIF should fail)
+ # -1 positive already run (skip until ENDIF)
+ # 0 negatives so far (if we're at a condition, check it)
+ # 1 last was positive (don't skip lines until next ELSE, ELSIF or ENDIF)
+ # 2 positive ELSE (following ELSIF should fail)
+
+Ground rule is that non-condition lines are skipped over if the
+stack top is > 0. Condition lines (IF, ELSIF, ELSE and ENDIF
+statements) need to be processed either way to keep track of the skip
+stack states, so they are a little more intricate.
+
+Instead of trying to describe in words, here are some example of what
+the skip stack should look like after each line is processed:
+
+Example 1:
+
+| IF[1] | 1 | |
+| ... whatever ... | | this line is processed |
+| IF[1] | 1 1 | |
+| ... whatever ... | | this line is processed |
+| ELSIF[1] | 1 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSE | 1 -2 | |
+| ... whatever ... | | this line is skipped over |
+| ENDIF | 1 | |
+| ... whatever ... | | this line is processed |
+| ELSIF[1] | -1 | |
+| ... whatever ... | | this line is skipped over |
+| IF[1] | -1 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSIF[1] | -1 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSE | -1 -2 | |
+| ... whatever ... | | this line is skipped over |
+| ENDIF | -1 | |
+| ... whatever ... | | this line is skipped over |
+| ENDIF | | |
+
+Example 2:
+
+| IF[0] | 0 | |
+| ... whatever ... | | this line is skipped over |
+| IF[1] | 0 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSIF[1] | 0 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSE | 0 -2 | |
+| ... whatever ... | | this line is skipped over |
+| ENDIF | 0 | |
+| ... whatever ... | | this line is skipped over |
+| ELSIF[1] | 1 | |
+| ... whatever ... | | this line is processed |
+| IF[1] | 1 1 | |
+| ... whatever ... | | this line is processed |
+| ELSIF[1] | 1 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSE | 1 -2 | |
+| ... whatever ... | | this line is skipped over |
+| ENDIF | 1 | |
+| ... whatever ... | | this line is processed |
+| ENDIF | | |
+
+Example 3:
+
+| IF[0] | 0 | |
+| ... whatever ... | | this line is skipped over |
+| IF[0] | 0 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSIF[1] | 0 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSE | 0 -2 | |
+| ... whatever ... | | this line is skipped over |
+| ENDIF | 0 | |
+| ... whatever ... | | this line is skipped over |
+| ELSIF[1] | 1 | |
+| ... whatever ... | | this line is processed |
+| IF[0] | 1 0 | |
+| ... whatever ... | | this line is skipped over |
+| ELSIF[1] | 1 1 | |
+| ... whatever ... | | this line is processed |
+| ELSE | 1 -2 | |
+| ... whatever ... | | this line is skipped over |
+| ENDIF | 1 | |
+| ... whatever ... | | this line is processed |
+| ENDIF | | |
+
+Example 4:
+
+| IF[0] | 0 | |
+| ... whatever ... | | this line is skipped over |
+| IF[0] | 0 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSIF[0] | 0 -1 | |
+| ... whatever ... | | this line is skipped over |
+| ELSE | 0 -2 | |
+| ... whatever ... | | this line is skipped over |
+| ENDIF | 0 | |
+| ... whatever ... | | this line is skipped over |
+| ELSIF[1] | 1 | |
+| ... whatever ... | | this line is processed |
+| IF[0] | 1 0 | |
+| ... whatever ... | | this line is skipped over |
+| ELSIF[0] | 1 0 | |
+| ... whatever ... | | this line is skipped over |
+| ELSE | 1 2 | |
+| ... whatever ... | | this line is processed |
+| ENDIF | 1 | |
+| ... whatever ... | | this line is processed |
+| ENDIF | | |
+
diff --git a/Configurations/README-design.md b/Configurations/README-design.md
new file mode 100644
index 000000000000..ef21a3ae2840
--- /dev/null
+++ b/Configurations/README-design.md
@@ -0,0 +1,604 @@
+Design document for the unified scheme data
+===========================================
+
+How are things connected?
+-------------------------
+
+The unified scheme takes all its data from the `build.info` files seen
+throughout the source tree. These files hold the minimum information
+needed to build end product files from diverse sources. See the
+section on `build.info` files below.
+
+From the information in `build.info` files, `Configure` builds up an
+information database as a hash table called `%unified_info`, which is
+stored in configdata.pm, found at the top of the build tree (which may
+or may not be the same as the source tree).
+
+[`Configurations/common.tmpl`](common.tmpl) uses the data from `%unified_info` to
+generate the rules for building end product files as well as
+intermediary files with the help of a few functions found in the
+build-file templates. See the section on build-file templates further
+down for more information.
+
+build.info files
+----------------
+
+As mentioned earlier, `build.info` files are meant to hold the minimum
+information needed to build output files, and therefore only (with a
+few possible exceptions [1]) have information about end products (such
+as scripts, library files and programs) and source files (such as C
+files, C header files, assembler files, etc). Intermediate files such
+as object files are rarely directly referred to in `build.info` files (and
+when they are, it's always with the file name extension `.o`), they are
+inferred by `Configure`. By the same rule of minimalism, end product
+file name extensions (such as `.so`, `.a`, `.exe`, etc) are never mentioned
+in `build.info`. Their file name extensions will be inferred by the
+build-file templates, adapted for the platform they are meant for (see
+sections on `%unified_info` and build-file templates further down).
+
+The variables `PROGRAMS`, `LIBS`, `MODULES` and `SCRIPTS` are used to declare
+end products. There are variants for them with `_NO_INST` as suffix
+(`PROGRAM_NO_INST` etc) to specify end products that shouldn't get installed.
+
+The variables `SOURCE`, `DEPEND`, `INCLUDE` and `DEFINE` are indexed by a
+produced file, and their values are the source used to produce that
+particular produced file, extra dependencies, include directories
+needed, or C macros to be defined.
+
+All their values in all the `build.info` throughout the source tree are
+collected together and form a set of programs, libraries, modules and
+scripts to be produced, source files, dependencies, etc etc etc.
+
+Let's have a pretend example, a very limited contraption of OpenSSL,
+composed of the program `apps/openssl`, the libraries `libssl` and
+`libcrypto`, an module `engines/ossltest` and their sources and
+dependencies.
+
+ # build.info
+ LIBS=libcrypto libssl
+ INCLUDE[libcrypto]=include
+ INCLUDE[libssl]=include
+ DEPEND[libssl]=libcrypto
+
+This is the top directory `build.info` file, and it tells us that two
+libraries are to be built, the include directory `include/` shall be
+used throughout when building anything that will end up in each
+library, and that the library `libssl` depend on the library
+`libcrypto` to function properly.
+
+ # apps/build.info
+ PROGRAMS=openssl
+ SOURCE[openssl]=openssl.c
+ INCLUDE[openssl]=.. ../include
+ DEPEND[openssl]=../libssl
+
+This is the `build.info` file in `apps/`, one may notice that all file
+paths mentioned are relative to the directory the `build.info` file is
+located in. This one tells us that there's a program to be built
+called `apps/openss` (the file name extension will depend on the
+platform and is therefore not mentioned in the `build.info` file). It's
+built from one source file, `apps/openssl.c`, and building it requires
+the use of `.` and `include/` include directories (both are declared
+from the point of view of the `apps/` directory), and that the program
+depends on the library `libssl` to function properly.
+
+ # crypto/build.info
+ LIBS=../libcrypto
+ SOURCE[../libcrypto]=aes.c evp.c cversion.c
+ DEPEND[cversion.o]=buildinf.h
+
+ GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(CC) $(CFLAGS)" "$(PLATFORM)"
+ DEPEND[buildinf.h]=../Makefile
+ DEPEND[../util/mkbuildinf.pl]=../util/Foo.pm
+
+This is the `build.info` file in `crypto/`, and it tells us a little more
+about what's needed to produce `libcrypto`. LIBS is used again to
+declare that `libcrypto` is to be produced. This declaration is
+really unnecessary as it's already mentioned in the top `build.info`
+file, but can make the info file easier to understand. This is to
+show that duplicate information isn't an issue.
+
+This `build.info` file informs us that `libcrypto` is built from a few
+source files, `crypto/aes.c`, `crypto/evp.c` and `crypto/cversion.c`.
+It also shows us that building the object file inferred from
+`crypto/cversion.c` depends on `crypto/buildinf.h`. Finally, it
+also shows the possibility to declare how some files are generated
+using some script, in this case a perl script, and how such scripts
+can be declared to depend on other files, in this case a perl module.
+
+Two things are worth an extra note:
+
+`DEPEND[cversion.o]` mentions an object file. DEPEND indexes is the
+only location where it's valid to mention them
+
+ # ssl/build.info
+ LIBS=../libssl
+ SOURCE[../libssl]=tls.c
+
+This is the build.info file in `ssl/`, and it tells us that the
+library `libssl` is built from the source file `ssl/tls.c`.
+
+ # engines/build.info
+ MODULES=dasync
+ SOURCE[dasync]=e_dasync.c
+ DEPEND[dasync]=../libcrypto
+ INCLUDE[dasync]=../include
+
+ MODULES_NO_INST=ossltest
+ SOURCE[ossltest]=e_ossltest.c
+ DEPEND[ossltest]=../libcrypto.a
+ INCLUDE[ossltest]=../include
+
+This is the `build.info` file in `engines/`, telling us that two modules
+called `engines/dasync` and `engines/ossltest` shall be built, that
+`dasync`'s source is `engines/e_dasync.c` and `ossltest`'s source is
+`engines/e_ossltest.c` and that the include directory `include/` may
+be used when building anything that will be part of these modules.
+Also, both modules depend on the library `libcrypto` to function
+properly. `ossltest` is explicitly linked with the static variant of
+the library `libcrypto`. Finally, only `dasync` is being installed, as
+`ossltest` is only for internal testing.
+
+When `Configure` digests these `build.info` files, the accumulated
+information comes down to this:
+
+ LIBS=libcrypto libssl
+ SOURCE[libcrypto]=crypto/aes.c crypto/evp.c crypto/cversion.c
+ DEPEND[crypto/cversion.o]=crypto/buildinf.h
+ INCLUDE[libcrypto]=include
+ SOURCE[libssl]=ssl/tls.c
+ INCLUDE[libssl]=include
+ DEPEND[libssl]=libcrypto
+
+ PROGRAMS=apps/openssl
+ SOURCE[apps/openssl]=apps/openssl.c
+ INCLUDE[apps/openssl]=. include
+ DEPEND[apps/openssl]=libssl
+
+ MODULES=engines/dasync
+ SOURCE[engines/dasync]=engines/e_dasync.c
+ DEPEND[engines/dasync]=libcrypto
+ INCLUDE[engines/dasync]=include
+
+ MODULES_NO_INST=engines/ossltest
+ SOURCE[engines/ossltest]=engines/e_ossltest.c
+ DEPEND[engines/ossltest]=libcrypto.a
+ INCLUDE[engines/ossltest]=include
+
+ GENERATE[crypto/buildinf.h]=util/mkbuildinf.pl "$(CC) $(CFLAGS)" "$(PLATFORM)"
+ DEPEND[crypto/buildinf.h]=Makefile
+ DEPEND[util/mkbuildinf.pl]=util/Foo.pm
+
+A few notes worth mentioning:
+
+`LIBS` may be used to declare routine libraries only.
+
+`PROGRAMS` may be used to declare programs only.
+
+`MODULES` may be used to declare modules only.
+
+The indexes for `SOURCE` must only be end product files, such as
+libraries, programs or modules. The values of `SOURCE` variables must
+only be source files (possibly generated).
+
+`INCLUDE` and `DEPEND` shows a relationship between different files
+(usually produced files) or between files and directories, such as a
+program depending on a library, or between an object file and some
+extra source file.
+
+When `Configure` processes the `build.info` files, it will take it as
+truth without question, and will therefore perform very few checks.
+If the build tree is separate from the source tree, it will assume
+that all built files and up in the build directory and that all source
+files are to be found in the source tree, if they can be found there.
+`Configure` will assume that source files that can't be found in the
+source tree (such as `crypto/bildinf.h` in the example above) are
+generated and will be found in the build tree.
+
+The `%unified_info` database
+----------------------------
+
+The information in all the `build.info` get digested by `Configure` and
+collected into the `%unified_info` database, divided into the following
+indexes:
+
+ depends => a hash table containing 'file' => [ 'dependency' ... ]
+ pairs. These are directly inferred from the DEPEND
+ variables in build.info files.
+
+ modules => a list of modules. These are directly inferred from
+ the MODULES variable in build.info files.
+
+ generate => a hash table containing 'file' => [ 'generator' ... ]
+ pairs. These are directly inferred from the GENERATE
+ variables in build.info files.
+
+ includes => a hash table containing 'file' => [ 'include' ... ]
+ pairs. These are directly inferred from the INCLUDE
+ variables in build.info files.
+
+ install => a hash table containing 'type' => [ 'file' ... ] pairs.
+ The types are 'programs', 'libraries', 'modules' and
+ 'scripts', and the array of files list the files of
+ that type that should be installed.
+
+ libraries => a list of libraries. These are directly inferred from
+ the LIBS variable in build.info files.
+
+ programs => a list of programs. These are directly inferred from
+ the PROGRAMS variable in build.info files.
+
+ scripts => a list of scripts. There are directly inferred from
+ the SCRIPTS variable in build.info files.
+
+ sources => a hash table containing 'file' => [ 'sourcefile' ... ]
+ pairs. These are indirectly inferred from the SOURCE
+ variables in build.info files. Object files are
+ mentioned in this hash table, with source files from
+ SOURCE variables, and AS source files for programs and
+ libraries.
+
+ shared_sources =>
+ a hash table just like 'sources', but only as source
+ files (object files) for building shared libraries.
+
+As an example, here is how the `build.info` files example from the
+section above would be digested into a `%unified_info` table:
+
+ our %unified_info = (
+ "depends" =>
+ {
+ "apps/openssl" =>
+ [
+ "libssl",
+ ],
+ "crypto/buildinf.h" =>
+ [
+ "Makefile",
+ ],
+ "crypto/cversion.o" =>
+ [
+ "crypto/buildinf.h",
+ ],
+ "engines/dasync" =>
+ [
+ "libcrypto",
+ ],
+ "engines/ossltest" =>
+ [
+ "libcrypto.a",
+ ],
+ "libssl" =>
+ [
+ "libcrypto",
+ ],
+ "util/mkbuildinf.pl" =>
+ [
+ "util/Foo.pm",
+ ],
+ },
+ "modules" =>
+ [
+ "engines/dasync",
+ "engines/ossltest",
+ ],
+ "generate" =>
+ {
+ "crypto/buildinf.h" =>
+ [
+ "util/mkbuildinf.pl",
+ "\"\$(CC)",
+ "\$(CFLAGS)\"",
+ "\"$(PLATFORM)\"",
+ ],
+ },
+ "includes" =>
+ {
+ "apps/openssl" =>
+ [
+ ".",
+ "include",
+ ],
+ "engines/ossltest" =>
+ [
+ "include"
+ ],
+ "libcrypto" =>
+ [
+ "include",
+ ],
+ "libssl" =>
+ [
+ "include",
+ ],
+ "util/mkbuildinf.pl" =>
+ [
+ "util",
+ ],
+ }
+ "install" =>
+ {
+ "modules" =>
+ [
+ "engines/dasync",
+ ],
+ "libraries" =>
+ [
+ "libcrypto",
+ "libssl",
+ ],
+ "programs" =>
+ [
+ "apps/openssl",
+ ],
+ },
+ "libraries" =>
+ [
+ "libcrypto",
+ "libssl",
+ ],
+ "programs" =>
+ [
+ "apps/openssl",
+ ],
+ "sources" =>
+ {
+ "apps/openssl" =>
+ [
+ "apps/openssl.o",
+ ],
+ "apps/openssl.o" =>
+ [
+ "apps/openssl.c",
+ ],
+ "crypto/aes.o" =>
+ [
+ "crypto/aes.c",
+ ],
+ "crypto/cversion.o" =>
+ [
+ "crypto/cversion.c",
+ ],
+ "crypto/evp.o" =>
+ [
+ "crypto/evp.c",
+ ],
+ "engines/e_dasync.o" =>
+ [
+ "engines/e_dasync.c",
+ ],
+ "engines/dasync" =>
+ [
+ "engines/e_dasync.o",
+ ],
+ "engines/e_ossltest.o" =>
+ [
+ "engines/e_ossltest.c",
+ ],
+ "engines/ossltest" =>
+ [
+ "engines/e_ossltest.o",
+ ],
+ "libcrypto" =>
+ [
+ "crypto/aes.c",
+ "crypto/cversion.c",
+ "crypto/evp.c",
+ ],
+ "libssl" =>
+ [
+ "ssl/tls.c",
+ ],
+ "ssl/tls.o" =>
+ [
+ "ssl/tls.c",
+ ],
+ },
+ );
+
+As can be seen, everything in `%unified_info` is fairly simple suggest
+of information. Still, it tells us that to build all programs, we
+must build `apps/openssl`, and to build the latter, we will need to
+build all its sources (`apps/openssl.o` in this case) and all the
+other things it depends on (such as `libssl`). All those dependencies
+need to be built as well, using the same logic, so to build `libssl`,
+we need to build `ssl/tls.o` as well as `libcrypto`, and to build the
+latter...
+
+Build-file templates
+--------------------
+
+Build-file templates are essentially build-files (such as `Makefile` on
+Unix) with perl code fragments mixed in. Those perl code fragment
+will generate all the configuration dependent data, including all the
+rules needed to build end product files and intermediary files alike.
+At a minimum, there must be a perl code fragment that defines a set of
+functions that are used to generates specific build-file rules, to
+build static libraries from object files, to build shared libraries
+from static libraries, to programs from object files and libraries,
+etc.
+
+ generatesrc - function that produces build file lines to generate
+ a source file from some input.
+
+ It's called like this:
+
+ generatesrc(src => "PATH/TO/tobegenerated",
+ generator => [ "generatingfile", ... ]
+ generator_incs => [ "INCL/PATH", ... ]
+ generator_deps => [ "dep1", ... ]
+ incs => [ "INCL/PATH", ... ],
+ deps => [ "dep1", ... ],
+ intent => one of "libs", "dso", "bin" );
+
+ 'src' has the name of the file to be generated.
+ 'generator' is the command or part of command to
+ generate the file, of which the first item is
+ expected to be the file to generate from.
+ generatesrc() is expected to analyse and figure out
+ exactly how to apply that file and how to capture
+ the result. 'generator_incs' and 'generator_deps'
+ are include directories and files that the generator
+ file itself depends on. 'incs' and 'deps' are
+ include directories and files that are used if $(CC)
+ is used as an intermediary step when generating the
+ end product (the file indicated by 'src'). 'intent'
+ indicates what the generated file is going to be
+ used for.
+
+ src2obj - function that produces build file lines to build an
+ object file from source files and associated data.
+
+ It's called like this:
+
+ src2obj(obj => "PATH/TO/objectfile",
+ srcs => [ "PATH/TO/sourcefile", ... ],
+ deps => [ "dep1", ... ],
+ incs => [ "INCL/PATH", ... ]
+ intent => one of "lib", "dso", "bin" );
+
+ 'obj' has the intended object file with `.o`
+ extension, src2obj() is expected to change it to
+ something more suitable for the platform.
+ 'srcs' has the list of source files to build the
+ object file, with the first item being the source
+ file that directly corresponds to the object file.
+ 'deps' is a list of explicit dependencies. 'incs'
+ is a list of include file directories. Finally,
+ 'intent' indicates what this object file is going
+ to be used for.
+
+ obj2lib - function that produces build file lines to build a
+ static library file ("libfoo.a" in Unix terms) from
+ object files.
+
+ called like this:
+
+ obj2lib(lib => "PATH/TO/libfile",
+ objs => [ "PATH/TO/objectfile", ... ]);
+
+ 'lib' has the intended library file name *without*
+ extension, obj2lib is expected to add that. 'objs'
+ has the list of object files to build this library.
+
+ libobj2shlib - backward compatibility function that's used the
+ same way as obj2shlib (described next), and was
+ expected to build the shared library from the
+ corresponding static library when that was suitable.
+ NOTE: building a shared library from a static
+ library is now DEPRECATED, as they no longer share
+ object files. Attempting to do this will fail.
+
+ obj2shlib - function that produces build file lines to build a
+ shareable object library file ("libfoo.so" in Unix
+ terms) from the corresponding object files.
+
+ called like this:
+
+ obj2shlib(shlib => "PATH/TO/shlibfile",
+ lib => "PATH/TO/libfile",
+ objs => [ "PATH/TO/objectfile", ... ],
+ deps => [ "PATH/TO/otherlibfile", ... ]);
+
+ 'lib' has the base (static) library file name
+ *without* extension. This is useful in case
+ supporting files are needed (such as import
+ libraries on Windows).
+ 'shlib' has the corresponding shared library name
+ *without* extension. 'deps' has the list of other
+ libraries (also *without* extension) this library
+ needs to be linked with. 'objs' has the list of
+ object files to build this library.
+
+ obj2dso - function that produces build file lines to build a
+ dynamic shared object file from object files.
+
+ called like this:
+
+ obj2dso(lib => "PATH/TO/libfile",
+ objs => [ "PATH/TO/objectfile", ... ],
+ deps => [ "PATH/TO/otherlibfile",
+ ... ]);
+
+ This is almost the same as obj2shlib, but the
+ intent is to build a shareable library that can be
+ loaded in runtime (a "plugin"...).
+
+ obj2bin - function that produces build file lines to build an
+ executable file from object files.
+
+ called like this:
+
+ obj2bin(bin => "PATH/TO/binfile",
+ objs => [ "PATH/TO/objectfile", ... ],
+ deps => [ "PATH/TO/libfile", ... ]);
+
+ 'bin' has the intended executable file name
+ *without* extension, obj2bin is expected to add
+ that. 'objs' has the list of object files to build
+ this library. 'deps' has the list of library files
+ (also *without* extension) that the programs needs
+ to be linked with.
+
+ in2script - function that produces build file lines to build a
+ script file from some input.
+
+ called like this:
+
+ in2script(script => "PATH/TO/scriptfile",
+ sources => [ "PATH/TO/infile", ... ]);
+
+ 'script' has the intended script file name.
+ 'sources' has the list of source files to build the
+ resulting script from.
+
+Along with the build-file templates is the driving template
+[`Configurations/common.tmpl`](common.tmpl), which looks through all the
+information in `%unified_info` and generates all the rulesets to build libraries,
+programs and all intermediate files, using the rule generating
+functions defined in the build-file template.
+
+As an example with the smaller `build.info` set we've seen as an
+example, producing the rules to build `libcrypto` would result in the
+following calls:
+
+ # Note: obj2shlib will only be called if shared libraries are
+ # to be produced.
+ # Note 2: obj2shlib must convert the '.o' extension to whatever
+ # is suitable on the local platform.
+ obj2shlib(shlib => "libcrypto",
+ objs => [ "crypto/aes.o", "crypto/evp.o", "crypto/cversion.o" ],
+ deps => [ ]);
+
+ obj2lib(lib => "libcrypto"
+ objs => [ "crypto/aes.o", "crypto/evp.o", "crypto/cversion.o" ]);
+
+ src2obj(obj => "crypto/aes.o"
+ srcs => [ "crypto/aes.c" ],
+ deps => [ ],
+ incs => [ "include" ],
+ intent => "lib");
+
+ src2obj(obj => "crypto/evp.o"
+ srcs => [ "crypto/evp.c" ],
+ deps => [ ],
+ incs => [ "include" ],
+ intent => "lib");
+
+ src2obj(obj => "crypto/cversion.o"
+ srcs => [ "crypto/cversion.c" ],
+ deps => [ "crypto/buildinf.h" ],
+ incs => [ "include" ],
+ intent => "lib");
+
+ generatesrc(src => "crypto/buildinf.h",
+ generator => [ "util/mkbuildinf.pl", "\"$(CC)",
+ "$(CFLAGS)\"", "\"$(PLATFORM)\"" ],
+ generator_incs => [ "util" ],
+ generator_deps => [ "util/Foo.pm" ],
+ incs => [ ],
+ deps => [ ],
+ intent => "lib");
+
+The returned strings from all those calls are then concatenated
+together and written to the resulting build-file.
diff --git a/Configurations/README.md b/Configurations/README.md
new file mode 100644
index 000000000000..de3d8bad8a02
--- /dev/null
+++ b/Configurations/README.md
@@ -0,0 +1,667 @@
+Intro
+=====
+
+This directory contains a few sets of files that are used for
+configuration in diverse ways:
+
+ *.conf Target platform configurations, please read
+ 'Configurations of OpenSSL target platforms' for more
+ information.
+ *.tmpl Build file templates, please read 'Build-file
+ programming with the "unified" build system' as well
+ as 'Build info files' for more information.
+ *.pm Helper scripts / modules for the main `Configure`
+ script. See 'Configure helper scripts for more
+ information.
+
+Configurations of OpenSSL target platforms
+==========================================
+
+Configuration targets are a collection of facts that we know about
+different platforms and their capabilities. We organise them in a
+hash table, where each entry represent a specific target.
+
+Note that configuration target names must be unique across all config
+files. The Configure script does check that a config file doesn't
+have config targets that shadow config targets from other files.
+
+In each table entry, the following keys are significant:
+
+ inherit_from => Other targets to inherit values from.
+ Explained further below. [1]
+ template => Set to 1 if this isn't really a platform
+ target. Instead, this target is a template
+ upon which other targets can be built.
+ Explained further below. [1]
+
+ sys_id => System identity for systems where that
+ is difficult to determine automatically.
+
+ enable => Enable specific configuration features.
+ This MUST be an array of words.
+ disable => Disable specific configuration features.
+ This MUST be an array of words.
+ Note: if the same feature is both enabled
+ and disabled, disable wins.
+
+ as => The assembler command. This is not always
+ used (for example on Unix, where the C
+ compiler is used instead).
+ asflags => Default assembler command flags [4].
+ cpp => The C preprocessor command, normally not
+ given, as the build file defaults are
+ usually good enough.
+ cppflags => Default C preprocessor flags [4].
+ defines => As an alternative, macro definitions may be
+ given here instead of in 'cppflags' [4].
+ If given here, they MUST be as an array of
+ the string such as "MACRO=value", or just
+ "MACRO" for definitions without value.
+ includes => As an alternative, inclusion directories
+ may be given here instead of in 'cppflags'
+ [4]. If given here, the MUST be an array
+ of strings, one directory specification
+ each.
+ cc => The C compiler command, usually one of "cc",
+ "gcc" or "clang". This command is normally
+ also used to link object files and
+ libraries into the final program.
+ cxx => The C++ compiler command, usually one of
+ "c++", "g++" or "clang++". This command is
+ also used when linking a program where at
+ least one of the object file is made from
+ C++ source.
+ cflags => Defaults C compiler flags [4].
+ cxxflags => Default C++ compiler flags [4]. If unset,
+ it gets the same value as cflags.
+
+ (linking is a complex thing, see [3] below)
+ ld => Linker command, usually not defined
+ (meaning the compiler command is used
+ instead).
+ (NOTE: this is here for future use, it's
+ not implemented yet)
+ lflags => Default flags used when linking apps,
+ shared libraries or DSOs [4].
+ ex_libs => Extra libraries that are needed when
+ linking shared libraries, DSOs or programs.
+ The value is also assigned to Libs.private
+ in $(libdir)/pkgconfig/libcrypto.pc.
+
+ shared_cppflags => Extra C preprocessor flags used when
+ processing C files for shared libraries.
+ shared_cflag => Extra C compiler flags used when compiling
+ for shared libraries, typically something
+ like "-fPIC".
+ shared_ldflag => Extra linking flags used when linking
+ shared libraries.
+ module_cppflags
+ module_cflags
+ module_ldflags => Has the same function as the corresponding
+ 'shared_' attributes, but for building DSOs.
+ When unset, they get the same values as the
+ corresponding 'shared_' attributes.
+
+ ar => The library archive command, the default is
+ "ar".
+ (NOTE: this is here for future use, it's
+ not implemented yet)
+ arflags => Flags to be used with the library archive
+ command. On Unix, this includes the
+ command letter, 'r' by default.
+
+ ranlib => The library archive indexing command, the
+ default is 'ranlib' it it exists.
+
+ unistd => An alternative header to the typical
+ '<unistd.h>'. This is very rarely needed.
+
+ shared_extension => File name extension used for shared
+ libraries.
+ obj_extension => File name extension used for object files.
+ On unix, this defaults to ".o" (NOTE: this
+ is here for future use, it's not
+ implemented yet)
+ exe_extension => File name extension used for executable
+ files. On unix, this defaults to "" (NOTE:
+ this is here for future use, it's not
+ implemented yet)
+ shlib_variant => A "variant" identifier inserted between the base
+ shared library name and the extension. On "unixy"
+ platforms (BSD, Linux, Solaris, MacOS/X, ...) this
+ supports installation of custom OpenSSL libraries
+ that don't conflict with other builds of OpenSSL
+ installed on the system. The variant identifier
+ becomes part of the SONAME of the library and also
+ any symbol versions (symbol versions are not used or
+ needed with MacOS/X). For example, on a system
+ where a default build would normally create the SSL
+ shared library as 'libssl.so -> libssl.so.1.1' with
+ the value of the symlink as the SONAME, a target
+ definition that sets 'shlib_variant => "-abc"' will
+ create 'libssl.so -> libssl-abc.so.1.1', again with
+ an SONAME equal to the value of the symlink. The
+ symbol versions associated with the variant library
+ would then be 'OPENSSL_ABC_<version>' rather than
+ the default 'OPENSSL_<version>'. The string inserted
+ into symbol versions is obtained by mapping all
+ letters in the "variant" identifier to upper case
+ and all non-alphanumeric characters to '_'.
+
+ thread_scheme => The type of threads is used on the
+ configured platform. Currently known
+ values are "(unknown)", "pthreads",
+ "uithreads" (a.k.a solaris threads) and
+ "winthreads". Except for "(unknown)", the
+ actual value is currently ignored but may
+ be used in the future. See further notes
+ below [2].
+ dso_scheme => The type of dynamic shared objects to build
+ for. This mostly comes into play with
+ modules, but can be used for other purposes
+ as well. Valid values are "DLFCN"
+ (dlopen() et al), "DLFCN_NO_H" (for systems
+ that use dlopen() et al but do not have
+ fcntl.h), "DL" (shl_load() et al), "WIN32"
+ and "VMS".
+ asm_arch => The architecture to be used for compiling assembly
+ source. This acts as a selector in build.info files.
+ uplink_arch => The architecture to be used for compiling uplink
+ source. This acts as a selector in build.info files.
+ This is separate from asm_arch because it's compiled
+ even when 'no-asm' is given, even though it contains
+ assembler source.
+ perlasm_scheme => The perlasm method used to create the
+ assembler files used when compiling with
+ assembler implementations.
+ shared_target => The shared library building method used.
+ This serves multiple purposes:
+ - as index for targets found in shared_info.pl.
+ - as linker script generation selector.
+ To serve both purposes, the index for shared_info.pl
+ should end with '-shared', and this suffix will be
+ removed for use as a linker script generation
+ selector. Note that the latter is only used if
+ 'shared_defflag' is defined.
+ build_scheme => The scheme used to build up a Makefile.
+ In its simplest form, the value is a string
+ with the name of the build scheme.
+ The value may also take the form of a list
+ of strings, if the build_scheme is to have
+ some options. In this case, the first
+ string in the list is the name of the build
+ scheme.
+ Currently recognised build scheme is "unified".
+ For the "unified" build scheme, this item
+ *must* be an array with the first being the
+ word "unified" and the second being a word
+ to identify the platform family.
+
+ multilib => On systems that support having multiple
+ implementations of a library (typically a
+ 32-bit and a 64-bit variant), this is used
+ to have the different variants in different
+ directories.
+
+ bn_ops => Building options (was just bignum options in
+ the earlier history of this option, hence the
+ name). This is a string of words that describe
+ algorithms' implementation parameters that
+ are optimal for the designated target platform,
+ such as the type of integers used to build up
+ the bignum, different ways to implement certain
+ ciphers and so on. To fully comprehend the
+ meaning, the best is to read the affected
+ source.
+ The valid words are:
+
+ THIRTY_TWO_BIT bignum limbs are 32 bits,
+ this is default if no
+ option is specified, it
+ works on any supported
+ system [unless "wider"
+ limb size is implied in
+ assembly code];
+ BN_LLONG bignum limbs are 32 bits,
+ but 64-bit 'unsigned long
+ long' is used internally
+ in calculations;
+ SIXTY_FOUR_BIT_LONG bignum limbs are 64 bits
+ and sizeof(long) is 8;
+ SIXTY_FOUR_BIT bignums limbs are 64 bits,
+ but execution environment
+ is ILP32;
+ RC4_CHAR RC4 key schedule is made
+ up of 'unsigned char's;
+ Note: should not be used
+ for new configuration
+ targets
+ RC4_INT RC4 key schedule is made
+ up of 'unsigned int's;
+ Note: should not be used
+ for new configuration
+ targets
+
+[1] as part of the target configuration, one can have a key called
+ `inherit_from` that indicates what other configurations to inherit
+ data from. These are resolved recursively.
+
+ Inheritance works as a set of default values that can be overridden
+ by corresponding key values in the inheriting configuration.
+
+ Note 1: any configuration table can be used as a template.
+ Note 2: pure templates have the attribute `template => 1` and
+ cannot be used as build targets.
+
+ If several configurations are given in the `inherit_from` array,
+ the values of same attribute are concatenated with space
+ separation. With this, it's possible to have several smaller
+ templates for different configuration aspects that can be combined
+ into a complete configuration.
+
+ Instead of a scalar value or an array, a value can be a code block
+ of the form `sub { /* your code here */ }`. This code block will
+ be called with the list of inherited values for that key as
+ arguments. In fact, the concatenation of strings is really done
+ by using `sub { join(" ",@_) }` on the list of inherited values.
+
+ An example:
+
+ "foo" => {
+ template => 1,
+ haha => "ha ha",
+ hoho => "ho",
+ ignored => "This should not appear in the end result",
+ },
+ "bar" => {
+ template => 1,
+ haha => "ah",
+ hoho => "haho",
+ hehe => "hehe"
+ },
+ "laughter" => {
+ inherit_from => [ "foo", "bar" ],
+ hehe => sub { join(" ",(@_,"!!!")) },
+ ignored => "",
+ }
+
+ The entry for "laughter" will become as follows after processing:
+
+ "laughter" => {
+ haha => "ha ha ah",
+ hoho => "ho haho",
+ hehe => "hehe !!!",
+ ignored => ""
+ }
+
+[2] OpenSSL is built with threading capabilities unless the user
+ specifies `no-threads`. The value of the key `thread_scheme` may
+ be `(unknown)`, in which case the user MUST give some compilation
+ flags to `Configure`.
+
+[3] OpenSSL has three types of things to link from object files or
+ static libraries:
+
+ - shared libraries; that would be libcrypto and libssl.
+ - shared objects (sometimes called dynamic libraries); that would
+ be the modules.
+ - applications; those are apps/openssl and all the test apps.
+
+ Very roughly speaking, linking is done like this (words in braces
+ represent the configuration settings documented at the beginning
+ of this file):
+
+ shared libraries:
+ {ld} $(CFLAGS) {lflags} {shared_ldflag} -o libfoo.so \
+ foo/something.o foo/somethingelse.o {ex_libs}
+
+ shared objects:
+ {ld} $(CFLAGS) {lflags} {module_ldflags} -o libeng.so \
+ blah1.o blah2.o -lcrypto {ex_libs}
+
+ applications:
+ {ld} $(CFLAGS) {lflags} -o app \
+ app1.o utils.o -lssl -lcrypto {ex_libs}
+
+[4] There are variants of these attribute, prefixed with `lib_`,
+ `dso_` or `bin_`. Those variants replace the unprefixed attribute
+ when building library, DSO or program modules specifically.
+
+Historically, the target configurations came in form of a string with
+values separated by colons. This use is deprecated. The string form
+looked like this:
+
+ "target" => "{cc}:{cflags}:{unistd}:{thread_cflag}:{sys_id}:{lflags}:
+ {bn_ops}:{cpuid_obj}:{bn_obj}:{ec_obj}:{des_obj}:{aes_obj}:
+ {bf_obj}:{md5_obj}:{sha1_obj}:{cast_obj}:{rc4_obj}:
+ {rmd160_obj}:{rc5_obj}:{wp_obj}:{cmll_obj}:{modes_obj}:
+ {padlock_obj}:{perlasm_scheme}:{dso_scheme}:{shared_target}:
+ {shared_cflag}:{shared_ldflag}:{shared_extension}:{ranlib}:
+ {arflags}:{multilib}"
+
+Build info files
+================
+
+The `build.info` files that are spread over the source tree contain the
+minimum information needed to build and distribute OpenSSL. It uses a
+simple and yet fairly powerful language to determine what needs to be
+built, from what sources, and other relationships between files.
+
+For every `build.info` file, all file references are relative to the
+directory of the `build.info` file for source files, and the
+corresponding build directory for built files if the build tree
+differs from the source tree.
+
+When processed, every line is processed with the perl module
+Text::Template, using the delimiters `{-` and `-}`. The hashes
+`%config` and `%target` are passed to the perl fragments, along with
+$sourcedir and $builddir, which are the locations of the source
+directory for the current `build.info` file and the corresponding build
+directory, all relative to the top of the build tree.
+
+`Configure` only knows inherently about the top `build.info` file. For
+any other directory that has one, further directories to look into
+must be indicated like this:
+
+ SUBDIRS=something someelse
+
+On to things to be built; they are declared by setting specific
+variables:
+
+ PROGRAMS=foo bar
+ LIBS=libsomething
+ MODULES=libeng
+ SCRIPTS=myhack
+
+Note that the files mentioned for PROGRAMS, LIBS and MODULES *must* be
+without extensions. The build file templates will figure them out.
+
+For each thing to be built, it is then possible to say what sources
+they are built from:
+
+ PROGRAMS=foo bar
+ SOURCE[foo]=foo.c common.c
+ SOURCE[bar]=bar.c extra.c common.c
+
+It's also possible to tell some other dependencies:
+
+ DEPEND[foo]=libsomething
+ DEPEND[libbar]=libsomethingelse
+
+(it could be argued that 'libsomething' and 'libsomethingelse' are
+source as well. However, the files given through SOURCE are expected
+to be located in the source tree while files given through DEPEND are
+expected to be located in the build tree)
+
+It's also possible to depend on static libraries explicitly:
+
+ DEPEND[foo]=libsomething.a
+ DEPEND[libbar]=libsomethingelse.a
+
+This should be rarely used, and care should be taken to make sure it's
+only used when supported. For example, native Windows build doesn't
+support building static libraries and DLLs at the same time, so using
+static libraries on Windows can only be done when configured
+`no-shared`.
+
+In some cases, it's desirable to include some source files in the
+shared form of a library only:
+
+ SHARED_SOURCE[libfoo]=dllmain.c
+
+For any file to be built, it's also possible to tell what extra
+include paths the build of their source files should use:
+
+ INCLUDE[foo]=include
+
+It's also possible to specify C macros that should be defined:
+
+ DEFINE[foo]=FOO BAR=1
+
+In some cases, one might want to generate some source files from
+others, that's done as follows:
+
+ GENERATE[foo.s]=asm/something.pl $(CFLAGS)
+ GENERATE[bar.s]=asm/bar.S
+
+The value of each GENERATE line is a command line or part of it.
+Configure places no rules on the command line, except that the first
+item must be the generator file. It is, however, entirely up to the
+build file template to define exactly how those command lines should
+be handled, how the output is captured and so on.
+
+Sometimes, the generator file itself depends on other files, for
+example if it is a perl script that depends on other perl modules.
+This can be expressed using DEPEND like this:
+
+ DEPEND[asm/something.pl]=../perlasm/Foo.pm
+
+There may also be cases where the exact file isn't easily specified,
+but an inclusion directory still needs to be specified. INCLUDE can
+be used in that case:
+
+ INCLUDE[asm/something.pl]=../perlasm
+
+NOTE: GENERATE lines are limited to one command only per GENERATE.
+
+Finally, you can have some simple conditional use of the `build.info`
+information, looking like this:
+
+ IF[1]
+ something
+ ELSIF[2]
+ something other
+ ELSE
+ something else
+ ENDIF
+
+The expression in square brackets is interpreted as a string in perl,
+and will be seen as true if perl thinks it is, otherwise false. For
+example, the above would have "something" used, since 1 is true.
+
+Together with the use of Text::Template, this can be used as
+conditions based on something in the passed variables, for example:
+
+ IF[{- $disabled{shared} -}]
+ LIBS=libcrypto
+ SOURCE[libcrypto]=...
+ ELSE
+ LIBS=libfoo
+ SOURCE[libfoo]=...
+ ENDIF
+
+Build-file programming with the "unified" build system
+======================================================
+
+"Build files" are called `Makefile` on Unix-like operating systems,
+`descrip.mms` for MMS on VMS, `makefile` for `nmake` on Windows, etc.
+
+To use the "unified" build system, the target configuration needs to
+set the three items `build_scheme`, `build_file` and `build_command`.
+In the rest of this section, we will assume that `build_scheme` is set
+to "unified" (see the configurations documentation above for the
+details).
+
+For any name given by `build_file`, the "unified" system expects a
+template file in `Configurations/` named like the build file, with
+`.tmpl` appended, or in case of possible ambiguity, a combination of
+the second `build_scheme` list item and the `build_file` name. For
+example, if `build_file` is set to `Makefile`, the template could be
+`Configurations/Makefile.tmpl` or `Configurations/unix-Makefile.tmpl`.
+In case both `Configurations/unix-Makefile.tmpl` and
+`Configurations/Makefile.tmpl` are present, the former takes precedence.
+
+The build-file template is processed with the perl module
+Text::Template, using `{-` and `-}` as delimiters that enclose the
+perl code fragments that generate configuration-dependent content.
+Those perl fragments have access to all the hash variables from
+configdata.pem.
+
+The build-file template is expected to define at least the following
+perl functions in a perl code fragment enclosed with `{-` and `-}`.
+They are all expected to return a string with the lines they produce.
+
+ generatesrc - function that produces build file lines to generate
+ a source file from some input.
+
+ It's called like this:
+
+ generatesrc(src => "PATH/TO/tobegenerated",
+ generator => [ "generatingfile", ... ]
+ generator_incs => [ "INCL/PATH", ... ]
+ generator_deps => [ "dep1", ... ]
+ generator => [ "generatingfile", ... ]
+ incs => [ "INCL/PATH", ... ],
+ deps => [ "dep1", ... ],
+ intent => one of "libs", "dso", "bin" );
+
+ 'src' has the name of the file to be generated.
+ 'generator' is the command or part of command to
+ generate the file, of which the first item is
+ expected to be the file to generate from.
+ generatesrc() is expected to analyse and figure out
+ exactly how to apply that file and how to capture
+ the result. 'generator_incs' and 'generator_deps'
+ are include directories and files that the generator
+ file itself depends on. 'incs' and 'deps' are
+ include directories and files that are used if $(CC)
+ is used as an intermediary step when generating the
+ end product (the file indicated by 'src'). 'intent'
+ indicates what the generated file is going to be
+ used for.
+
+ src2obj - function that produces build file lines to build an
+ object file from source files and associated data.
+
+ It's called like this:
+
+ src2obj(obj => "PATH/TO/objectfile",
+ srcs => [ "PATH/TO/sourcefile", ... ],
+ deps => [ "dep1", ... ],
+ incs => [ "INCL/PATH", ... ]
+ intent => one of "lib", "dso", "bin" );
+
+ 'obj' has the intended object file with '.o'
+ extension, src2obj() is expected to change it to
+ something more suitable for the platform.
+ 'srcs' has the list of source files to build the
+ object file, with the first item being the source
+ file that directly corresponds to the object file.
+ 'deps' is a list of explicit dependencies. 'incs'
+ is a list of include file directories. Finally,
+ 'intent' indicates what this object file is going
+ to be used for.
+
+ obj2lib - function that produces build file lines to build a
+ static library file ("libfoo.a" in Unix terms) from
+ object files.
+
+ called like this:
+
+ obj2lib(lib => "PATH/TO/libfile",
+ objs => [ "PATH/TO/objectfile", ... ]);
+
+ 'lib' has the intended library file name *without*
+ extension, obj2lib is expected to add that. 'objs'
+ has the list of object files to build this library.
+
+ libobj2shlib - backward compatibility function that's used the
+ same way as obj2shlib (described next), and was
+ expected to build the shared library from the
+ corresponding static library when that was suitable.
+ NOTE: building a shared library from a static
+ library is now DEPRECATED, as they no longer share
+ object files. Attempting to do this will fail.
+
+ obj2shlib - function that produces build file lines to build a
+ shareable object library file ("libfoo.so" in Unix
+ terms) from the corresponding object files.
+
+ called like this:
+
+ obj2shlib(shlib => "PATH/TO/shlibfile",
+ lib => "PATH/TO/libfile",
+ objs => [ "PATH/TO/objectfile", ... ],
+ deps => [ "PATH/TO/otherlibfile", ... ]);
+
+ 'lib' has the base (static) library ffile name
+ *without* extension. This is useful in case
+ supporting files are needed (such as import
+ libraries on Windows).
+ 'shlib' has the corresponding shared library name
+ *without* extension. 'deps' has the list of other
+ libraries (also *without* extension) this library
+ needs to be linked with. 'objs' has the list of
+ object files to build this library.
+
+ obj2dso - function that produces build file lines to build a
+ dynamic shared object file from object files.
+
+ called like this:
+
+ obj2dso(lib => "PATH/TO/libfile",
+ objs => [ "PATH/TO/objectfile", ... ],
+ deps => [ "PATH/TO/otherlibfile",
+ ... ]);
+
+ This is almost the same as obj2shlib, but the
+ intent is to build a shareable library that can be
+ loaded in runtime (a "plugin"...).
+
+ obj2bin - function that produces build file lines to build an
+ executable file from object files.
+
+ called like this:
+
+ obj2bin(bin => "PATH/TO/binfile",
+ objs => [ "PATH/TO/objectfile", ... ],
+ deps => [ "PATH/TO/libfile", ... ]);
+
+ 'bin' has the intended executable file name
+ *without* extension, obj2bin is expected to add
+ that. 'objs' has the list of object files to build
+ this library. 'deps' has the list of library files
+ (also *without* extension) that the programs needs
+ to be linked with.
+
+ in2script - function that produces build file lines to build a
+ script file from some input.
+
+ called like this:
+
+ in2script(script => "PATH/TO/scriptfile",
+ sources => [ "PATH/TO/infile", ... ]);
+
+ 'script' has the intended script file name.
+ 'sources' has the list of source files to build the
+ resulting script from.
+
+In all cases, file file paths are relative to the build tree top, and
+the build file actions run with the build tree top as current working
+directory.
+
+Make sure to end the section with these functions with a string that
+you thing is appropriate for the resulting build file. If nothing
+else, end it like this:
+
+ ""; # Make sure no lingering values end up in the Makefile
+ -}
+
+Configure helper scripts
+========================
+
+Configure uses helper scripts in this directory:
+
+Checker scripts
+---------------
+
+These scripts are per platform family, to check the integrity of the
+tools used for configuration and building. The checker script used is
+either `{build_platform}-{build_file}-checker.pm` or
+`{build_platform}-checker.pm`, where `{build_platform}` is the second
+`build_scheme` list element from the configuration target data, and
+`{build_file}` is `build_file` from the same target data.
+
+If the check succeeds, the script is expected to end with a non-zero
+expression. If the check fails, the script can end with a zero, or
+with a `die`.
diff --git a/Configurations/common0.tmpl b/Configurations/common0.tmpl
new file mode 100644
index 000000000000..852b1fb3e8a0
--- /dev/null
+++ b/Configurations/common0.tmpl
@@ -0,0 +1,31 @@
+{- # -*- Mode: perl -*-
+
+ # Commonly used list of generated files
+ # The reason for the complexity is that the build.info files provide
+ # GENERATE rules for *all* platforms without discrimination, while the
+ # build files only want those for a particular build. Therefore, we
+ # need to extrapolate exactly what we need to generate. The way to do
+ # that is to extract all possible source files from diverse tables and
+ # filter out all that are not generated
+ my %generatables =
+ map { $_ => 1 }
+ ( # The sources of stuff may be generated
+ ( map { @{$unified_info{sources}->{$_}} }
+ keys %{$unified_info{sources}} ),
+ $disabled{shared}
+ ? ()
+ : ( map { @{$unified_info{shared_sources}->{$_}} }
+ keys %{$unified_info{shared_sources}} ),
+ # Things we explicitly depend on are usually generated
+ ( map { $_ eq "" ? () : @{$unified_info{depends}->{$_}} }
+ keys %{$unified_info{depends}} ));
+ our @generated =
+ sort ( ( grep { defined $unified_info{generate}->{$_} }
+ sort keys %generatables ),
+ # Scripts are assumed to be generated, so add them too
+ ( grep { defined $unified_info{sources}->{$_} }
+ @{$unified_info{scripts}} ) );
+
+ # Avoid strange output
+ "";
+-}
diff --git a/Configurations/descrip.mms.tmpl b/Configurations/descrip.mms.tmpl
new file mode 100644
index 000000000000..c722a754b75e
--- /dev/null
+++ b/Configurations/descrip.mms.tmpl
@@ -0,0 +1,1402 @@
+## descrip.mms to build OpenSSL on OpenVMS
+##
+## {- join("\n## ", @autowarntext) -}
+{-
+ use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
+ use File::Basename;
+ use OpenSSL::Util;
+
+ (our $osslprefix_q = platform->osslprefix()) =~ s/\$/\\\$/;
+
+ our $sover_dirname = platform->shlib_version_as_filename();
+ our $osslver = sprintf "%02d", split(/\./, $config{version});
+
+ our $sourcedir = $config{sourcedir};
+ our $builddir = $config{builddir};
+ sub make_unix_path {
+ # Split the native path
+ (my $vol, my $dirs, my $file) = File::Spec->splitpath($_[0]);
+ my @dirs = File::Spec->splitdir($dirs);
+
+ # Reassemble it as a Unix path
+ $vol =~ s|:$||;
+ return File::Spec::Unix->catpath(
+ '', File::Spec::Unix->catdir('', $vol ? $vol : (), @dirs), $file);
+ }
+ sub sourcefile {
+ catfile($sourcedir, @_);
+ }
+ sub buildfile {
+ catfile($builddir, @_);
+ }
+ sub sourcedir {
+ catdir($sourcedir, @_);
+ }
+ sub builddir {
+ catdir($builddir, @_);
+ }
+ sub tree {
+ (my $x = shift) =~ s|\]$|...]|;
+ $x
+ }
+
+ # Because we need to make two computations of these data,
+ # we store them in arrays for reuse
+ our @libs =
+ map { platform->staticname($_) }
+ @{$unified_info{libraries}};
+ our @shlibs =
+ map { platform->sharedname($_) // () }
+ @{$unified_info{libraries}};
+ our @install_libs =
+ map { platform->staticname($_) }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}};
+ our @install_shlibs =
+ map { platform->sharedname($_) // () }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}};
+ our @install_engines =
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{engine} }
+ @{$unified_info{modules}};
+ our @install_modules =
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && !$unified_info{attributes}->{modules}->{$_}->{engine}
+ && !$unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}};
+ our @install_fipsmodules =
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}};
+ our @install_programs =
+ grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
+ @{$unified_info{programs}};
+ our @install_bin_scripts =
+ grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
+ && !$unified_info{attributes}->{scripts}->{$_}->{misc} }
+ @{$unified_info{scripts}};
+ our @install_misc_scripts =
+ grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
+ && $unified_info{attributes}->{scripts}->{$_}->{misc} }
+ @{$unified_info{scripts}};
+
+ # Configured flags
+
+ our @cnf_asflags = ($target{asflags} || (), @{$config{asflags}});
+ our @cnf_defines = (@{$target{defines}}, @{$config{defines}});
+ our @cnf_includes = (@{$target{includes}}, @{$config{includes}});
+ our @cnf_cppflags = ($target{cppflags} || (), @{$config{cppflags}});
+ our @cnf_cflags = ($target{cflags} || (), @{$config{cflags}});
+ our @cnf_cxxflags = ($target{cxxflags} || (), @{$config{cxxflags}});
+ our @cnf_ldflags = ($target{lflags} || (), @{$config{lflags}});
+ our @cnf_ex_libs = (map{ ",$_" } @{$target{ex_libs}}, @{$config{ex_libs}});
+
+ # Variables starting with $lib_ are used to build library object files
+ # and shared libraries.
+ # Variables starting with $dso_ are used to build DSOs and their object files.
+ # Variables starting with $bin_ are used to build programs and their object
+ # files.
+
+ # The following array is special and is treated separately from the rest of
+ # the lib_ variables.
+ our @lib_cppincludes = (@{$target{lib_includes}}, @{$target{shared_includes}},
+ @{$config{lib_includes}}, @{$config{shared_includes}},
+ @cnf_includes);
+
+ our $lib_cppdefines =
+ join(',', @{$target{lib_defines}}, @{$target{shared_defines}},
+ @{$config{lib_defines}}, @{$config{shared_defines}},
+ @cnf_defines,
+ 'OPENSSLDIR="""$(OPENSSLDIR_C)"""',
+ 'ENGINESDIR="""$(ENGINESDIR_C)"""',
+ 'MODULESDIR="""$(MODULESDIR_C)"""'
+ )
+ . '$(DEFINES)'
+ . "'extradefines'";
+ our $lib_asflags =
+ join(' ', $target{lib_asflags} || (), @{$config{lib_asflags}},
+ @cnf_asflags, '$(ASFLAGS)');
+ our $lib_cppflags =
+ join('', $target{lib_cppflags} || (), $target{shared_cppflags} || (),
+ @{$config{lib_cppflags}}, @{$config{shared_cppflag}},
+ @cnf_cppflags, '/DEFINE=('.$lib_cppdefines.')', '$(CPPFLAGS)');
+ my @lib_cflags = ( $target{lib_cflags} // () );
+ my @lib_cflags_no_inst = ( $target{no_inst_lib_cflags} // @lib_cflags );
+ my @lib_cflags_cont = ( $target{shared_cflag} || (),
+ @{$config{lib_cflags}}, @{$config{shared_cflag}},
+ @cnf_cflags, '$(CFLAGS)');
+ our $lib_cflags = join('', @lib_cflags, @lib_cflags_cont );
+ our $lib_cflags_no_inst = join('', @lib_cflags_no_inst, @lib_cflags_cont );
+ our $lib_ldflags =
+ join('', $target{lib_lflags} || (), $target{shared_ldflag} || (),
+ @{$config{lib_lflags}}, @{$config{shared_ldflag}},
+ @cnf_ldflags, '$(LDFLAGS)');
+ our $lib_ex_libs = join('', @cnf_ex_libs, '$(EX_LIBS)');
+
+ # The following array is special and is treated separately from the rest of
+ # the dso_ variables.
+ our @dso_cppincludes = (@{$target{dso_includes}}, @{$target{module_includes}},
+ @{$config{dso_includes}}, @{$config{module_includes}},
+ @cnf_includes);
+
+ our $dso_cppdefines =
+ join(',', @{$target{dso_defines}}, @{$target{module_defines}},
+ @{$config{dso_defines}}, @{$config{module_defines}},
+ @cnf_defines,
+ )
+ . '$(DEFINES)'
+ . "'extradefines'";
+ our $dso_asflags =
+ join(' ', $target{dso_asflags} || (), $target{module_asflags} || (),
+ @{$config{dso_asflags}}, @{$config{module_asflags}},
+ @cnf_asflags, '$(ASFLAGS)');
+ our $dso_cppflags =
+ join('', $target{dso_cppflags} || (), $target{module_cppflags} || (),
+ @{$config{dso_cppflags}}, @{$config{module_cppflag}},
+ @cnf_cppflags,
+ '/DEFINE=('.$dso_cppdefines.')',
+ '$(CPPFLAGS)');
+ my @dso_cflags = ( $target{dso_cflags} // () );
+ my @dso_cflags_no_inst = ( $target{no_inst_dso_cflags} // @dso_cflags );
+ my @dso_cflags_cont = ( $target{module_cflag} || (),
+ @{$config{dso_cflags}}, @{$config{module_cflag}},
+ @cnf_cflags, '$(CFLAGS)');
+ our $dso_cflags = join('', @dso_cflags, @dso_cflags_cont );
+ our $dso_cflags_no_inst = join('', @dso_cflags_no_inst, @dso_cflags_cont );
+ our $dso_ldflags =
+ join('', $target{dso_lflags} || (), $target{module_ldflag} || (),
+ @{$config{dso_lflags}}, @{$config{module_ldflag}},
+ @cnf_ldflags, '$(LDFLAGS)');
+ our $dso_ex_libs = join('', @cnf_ex_libs, '$(EX_LIBS)');
+
+ # The following array is special and is treated separately from the rest of
+ # the bin_ variables.
+ our @bin_cppincludes = (@{$target{bin_includes}},
+ @{$config{bin_includes}},
+ @cnf_includes);
+
+ our $bin_cppdefines =
+ join(',', @{$target{bin_defines}},
+ @{$config{bin_defines}},
+ @cnf_defines,
+ )
+ . '$(DEFINES)'
+ . "'extradefines'";
+ our $bin_asflags =
+ join(' ', $target{bin_asflags} || (),
+ @{$config{bin_asflags}},
+ @cnf_asflags, '$(ASFLAGS)');
+ our $bin_cppflags =
+ join('', $target{bin_cppflags} || (),
+ @{$config{bin_cppflags}},
+ @cnf_cppflags,
+ '/DEFINE=('.$bin_cppdefines.')',
+ '$(CPPFLAGS)');
+ my @bin_cflags = ( $target{bin_cflags} // () );
+ my @bin_cflags_no_inst = ( $target{no_inst_bin_cflags} // @bin_cflags );
+ my @bin_cflags_cont = ( @{$config{bin_cflags}},
+ @cnf_cflags, '$(CFLAGS)');
+ our $bin_cflags = join('', @bin_cflags, @bin_cflags_cont );
+ our $bin_cflags_no_inst = join('', @bin_cflags_no_inst, @bin_cflags_cont );
+ our $bin_ldflags =
+ join('', $target{bin_lflags} || (),
+ @{$config{bin_lflags}},
+ @cnf_ldflags, '$(LDFLAGS)');
+ our $bin_ex_libs = join('', @cnf_ex_libs, '$(EX_LIBS)');
+
+ # This is a horrible hack, but is needed because recursive inclusion of files
+ # in different directories does not work well with VMS C. We try to help by
+ # specifying extra relative directories. They must always be in Unix format,
+ # relative to the directory where the .c file is located. The logic is that
+ # any inclusion, merged with one of these relative directories, will find the
+ # requested inclusion file.
+ foreach (grep /\[\.crypto\.async\.arch\].*\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ push @{$unified_info{includes_extra}->{$obj}}, qw(../);
+ }
+ foreach (grep /\[\.crypto\.ec\.curve448\].*?\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ push @{$unified_info{includes_extra}->{$obj}}, qw(./arch_32 ./arch64);
+ }
+ foreach (grep /\[\.crypto\.ec\.curve448.arch_(?:32|64)\].*?\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ push @{$unified_info{includes_extra}->{$obj}}, qw(../);
+ }
+ foreach (grep /\[\.ssl\.(?:record|statem)\].*?\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ # Most of the files in [.ssl.record] and [.ssl.statem] include
+ # "../ssl_local.h", which includes things like "record/record.h".
+ # Adding "../" as an inclusion directory helps making this sort of header
+ # from these directories.
+ push @{$unified_info{includes_extra}->{$obj}}, qw(../);
+
+ }
+ foreach (grep /\[\.test\].*?\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ push @{$unified_info{includes_extra}->{$obj}}, qw(../ssl ./helpers);
+ }
+ foreach (grep /\[\.test\.helpers\].*?\.o$/, keys %{$unified_info{sources}}) {
+ my $obj = platform->obj($_);
+ push @{$unified_info{includes_extra}->{$obj}}, qw(../../ssl);
+ }
+
+ # This makes sure things get built in the order they need
+ # to. You're welcome.
+ sub dependmagic {
+ my $target = shift;
+
+ return "$target : build_generated\n\t\pipe \$(MMS) \$(MMSQUALIFIERS) depend && \$(MMS) \$(MMSQUALIFIERS) _$target\n_$target";
+ }
+ "";
+-}
+PLATFORM={- $config{target} -}
+OPTIONS={- $config{options} -}
+CONFIGURE_ARGS=({- join(", ",quotify_l(@{$config{perlargv}})) -})
+SRCDIR={- $config{sourcedir} -}
+BLDDIR={- $config{builddir} -}
+FIPSKEY={- $config{FIPSKEY} -}
+
+# Allow both V and VERBOSE to indicate verbosity. This only applies
+# to testing.
+VERBOSE=$(V)
+VERBOSE_FAILURE=$(VF)
+
+VERSION={- "$config{full_version}" -}
+VERSION_NUMBER={- "$config{version}" -}
+MAJOR={- $config{major} -}
+MINOR={- $config{minor} -}
+SHLIB_VERSION_NUMBER={- $config{shlib_version} -}
+SHLIB_TARGET={- $target{shared_target} -}
+
+LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @libs) -}
+SHLIBS={- join(", ", map { "-\n\t".$_.".EXE" } @shlibs) -}
+MODULES={- join(", ", map { "-\n\t".$_.".EXE" }
+ # Drop all modules that are dependencies, they will
+ # be processed through their dependents
+ grep { my $x = $_;
+ !grep { grep { $_ eq $x } @$_ }
+ values %{$unified_info{depends}} }
+ @{$unified_info{modules}}) -}
+FIPSMODULE={- # We do some extra checking here, as there should be only one
+ use File::Basename;
+ our @fipsmodules =
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}};
+ die "More that one FIPS module" if scalar @fipsmodules > 1;
+ join(" ", map { platform->dso($_) } @fipsmodules) -}
+FIPSMODULENAME={- die "More that one FIPS module" if scalar @fipsmodules > 1;
+ join(", ", map { basename(platform->dso($_)) } @fipsmodules) -}
+PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{programs}}) -}
+SCRIPTS={- join(", ", map { "-\n\t".$_ } @{$unified_info{scripts}}) -}
+{- output_off() if $disabled{makedepend}; "" -}
+DEPS={- our @deps = map { platform->isobj($_) ? platform->dep($_) : $_ }
+ grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
+ keys %{$unified_info{sources}};
+ join(", ", map { "-\n\t".$_ } @deps); -}
+{- output_on() if $disabled{makedepend}; "" -}
+GENERATED_MANDATORY={- join(", ",
+ map { "-\n\t".$_ } @{$unified_info{depends}->{""}} ) -}
+GENERATED_PODS={- # common0.tmpl provides @generated
+ join(", ",
+ map { my $x = $_;
+ (
+ grep {
+ $unified_info{attributes}->{depends}
+ ->{$x}->{$_}->{pod} // 0
+ }
+ keys %{$unified_info{attributes}->{depends}->{$x}}
+ ) ? "-\n\t".$x : ();
+ }
+ @generated) -}
+GENERATED={- # common0.tmpl provides @generated
+ join(", ", map { platform->convertext($_) } @generated) -}
+
+INSTALL_LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @install_libs) -}
+INSTALL_SHLIBS={- join(", ", map { "-\n\t".$_.".EXE" } @install_shlibs) -}
+INSTALL_ENGINES={- join(", ", map { "-\n\t".$_.".EXE" } @install_engines) -}
+INSTALL_MODULES={- join(", ", map { "-\n\t".$_.".EXE" } @install_modules) -}
+INSTALL_FIPSMODULE={- join(", ", map { "-\n\t".$_.".EXE" } @install_fipsmodules) -}
+INSTALL_FIPSMODULECONF=[.providers]fipsmodule.cnf
+INSTALL_PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } @install_programs) -}
+BIN_SCRIPTS={- join(", ", @install_bin_scripts) -}
+MISC_SCRIPTS={- join(", ", @install_misc_scripts) -}
+HTMLDOCS1={- join(", ", map { "-\n\t".$_ } @{$unified_info{htmldocs}->{man1}}) -}
+HTMLDOCS3={- join(", ", map { "-\n\t".$_ } @{$unified_info{htmldocs}->{man3}}) -}
+HTMLDOCS5={- join(", ", map { "-\n\t".$_ } @{$unified_info{htmldocs}->{man5}}) -}
+HTMLDOCS7={- join(", ", map { "-\n\t".$_ } @{$unified_info{htmldocs}->{man7}}) -}
+
+APPS_OPENSSL="{- use File::Spec::Functions;
+ catfile("apps","openssl") -}"
+
+# DESTDIR is for package builders so that they can configure for, say,
+# SYS$COMMON:[OPENSSL] and yet have everything installed in STAGING:[USER].
+# In that case, configure with --prefix=SYS$COMMON:[OPENSSL] and then run
+# MMS with /MACROS=(DESTDIR=STAGING:[USER]). The result will end up in
+# STAGING:[USER.OPENSSL].
+# Normally it is left empty.
+DESTDIR=
+
+# Do not edit this manually. Use Configure --prefix=DIR to change this!
+INSTALLTOP={- our $installtop =
+ catdir($config{prefix}) || "SYS\$COMMON:[OPENSSL]";
+ $installtop -}
+SYSTARTUP={- catdir($installtop, '[.SYS$STARTUP]'); -}
+# This is the standard central area to store certificates, private keys...
+OPENSSLDIR={- catdir($config{openssldir}) or
+ $config{prefix} ? catdir($config{prefix},"COMMON")
+ : "SYS\$COMMON:[OPENSSL-COMMON]" -}
+# The same, but for C
+OPENSSLDIR_C={- platform->osslprefix() -}DATAROOT:[000000]
+# Where installed ENGINE modules reside, for C
+ENGINESDIR_C={- platform->osslprefix() -}ENGINES{- $sover_dirname.$target{pointer_size} -}:
+# Where modules reside, for C
+MODULESDIR_C={- platform->osslprefix() -}MODULES{- $target{pointer_size} -}:
+
+##### User defined commands and flags ################################
+
+CC={- $config{CC} -}
+CPP={- $config{CPP} -}
+DEFINES={- our $defines = join('', map { ",$_" } @{$config{CPPDEFINES}}) -}
+#INCLUDES={- our $includes = join(',', @{$config{CPPINCLUDES}}) -}
+CPPFLAGS={- our $cppflags = join('', @{$config{CPPFLAGS}}) -}
+CFLAGS={- join('', @{$config{CFLAGS}}) -}
+LDFLAGS={- join('', @{$config{LFLAGS}}) -}
+EX_LIBS={- join('', map { ",$_" } @{$config{LDLIBS}}) -}
+
+PERL={- $config{PERL} -}
+
+AS={- $config{AS} -}
+ASFLAGS={- join(' ', @{$config{ASFLAGS}}) -}
+
+##### Special command flags ##########################################
+
+ASOUTFLAG={- $target{asoutflag} -}$(OSSL_EMPTY)
+
+PERLASM_SCHEME={- $target{perlasm_scheme} -}
+
+# CPPFLAGS_Q is used for one thing only: to build up buildinf.h
+CPPFLAGS_Q={- (my $c = $lib_cppflags.$cppflags) =~ s|"|""|g;
+ (my $d = $lib_cppdefines) =~ s|"|""|g;
+ my $i = join(',', @lib_cppincludes || (), '$(INCLUDES)');
+ my $x = $c;
+ $x .= "/INCLUDE=($i)" if $i;
+ $x .= "/DEFINE=($d)" if $d;
+ $x; -}
+
+# .FIRST and .LAST are special targets with MMS and MMK.
+NODEBUG=@
+.FIRST :
+ {- join( "\n \$(NODEBUG) ", @{ $target{setup_commands} // [] },
+ '!' ) -}
+ $(NODEBUG) sourcetop = F$PARSE("$(SRCDIR)","[]A.;",,,"SYNTAX_ONLY,NO_CONCEAL") - ".][000000" - "[000000." - "][" - "]A.;" + ".]"
+ $(NODEBUG) DEFINE ossl_sourceroot 'sourcetop'
+ $(NODEBUG) !
+ $(NODEBUG) staging_dir = "$(DESTDIR)"
+ $(NODEBUG) staging_instdir = ""
+ $(NODEBUG) staging_datadir = ""
+ $(NODEBUG) IF staging_dir .NES. "" THEN -
+ staging_instdir = F$PARSE("A.;",staging_dir,"[]",,"SYNTAX_ONLY")
+ $(NODEBUG) IF staging_instdir - "]A.;" .NES. staging_instdir THEN -
+ staging_instdir = staging_instdir - "]A.;" + ".OPENSSL-INSTALL]"
+ $(NODEBUG) IF staging_instdir - "A.;" .NES. staging_instdir THEN -
+ staging_instdir = staging_instdir - "A.;" + "[OPENSSL-INSTALL]"
+ $(NODEBUG) IF staging_dir .NES. "" THEN -
+ staging_datadir = F$PARSE("A.;",staging_dir,"[]",,"SYNTAX_ONLY")
+ $(NODEBUG) IF staging_datadir - "]A.;" .NES. staging_datadir THEN -
+ staging_datadir = staging_datadir - "]A.;" + ".OPENSSL-COMMON]"
+ $(NODEBUG) IF staging_datadir - "A.;" .NES. staging_datadir THEN -
+ staging_datadir = staging_datadir - "A.;" + "[OPENSSL-COMMON]"
+ $(NODEBUG) !
+ $(NODEBUG) ! Installation logical names
+ $(NODEBUG) !
+ $(NODEBUG) ! This also creates a few DCL variables that are used for
+ $(NODEBUG) ! the "install_msg" target.
+ $(NODEBUG) !
+ $(NODEBUG) installroot = F$PARSE(staging_instdir,"$(INSTALLTOP)","[]A.;",,"SYNTAX_ONLY,NO_CONCEAL") - ".][000000" - "[000000." - "][" - "]A.;"
+ $(NODEBUG) installtop = installroot + ".]"
+ $(NODEBUG) dataroot = F$PARSE(staging_datadir,"$(OPENSSLDIR)","[]A.;",,"SYNTAX_ONLY,NO_CONCEAL") - ".][000000" - "[000000." - "][" - "]A.;"
+ $(NODEBUG) datatop = dataroot + ".]"
+ $(NODEBUG) DEFINE ossl_installroot 'installtop'
+ $(NODEBUG) DEFINE ossl_dataroot 'datatop'
+ $(NODEBUG) !
+ $(NODEBUG) ! Override disturbing system logicals. We can't deassign
+ $(NODEBUG) ! them, so we create it instead. This is an unfortunate
+ $(NODEBUG) ! necessity.
+ $(NODEBUG) !
+ $(NODEBUG) openssl_inc1 = F$PARSE("[.include.openssl]","A.;",,,"syntax_only") - "A.;"
+ $(NODEBUG) openssl_inc2 = F$PARSE("sourcetop:[include.openssl]","A.;",,,"SYNTAX_ONLY") - "A.;"
+ $(NODEBUG) DEFINE openssl 'openssl_inc1','openssl_inc2'
+ $(NODEBUG) !
+ $(NODEBUG) ! Figure out the architecture
+ $(NODEBUG) !
+ $(NODEBUG) arch = f$edit( f$getsyi( "arch_name"), "upcase")
+ $(NODEBUG) !
+ $(NODEBUG) ! Set up logical names for the libraries, so LINK and
+ $(NODEBUG) ! running programs can use them.
+ $(NODEBUG) !
+ $(NODEBUG) {- join("\n\t\$(NODEBUG) ", map { "DEFINE ".uc($_)." 'F\$ENV(\"DEFAULT\")'".uc($_)."\$(SHLIB_EXT)" } @shlibs) || "!" -}
+
+.LAST :
+ $(NODEBUG) {- join("\n\t\$(NODEBUG) ", map { "DEASSIGN ".uc($_) } @shlibs) || "!" -}
+ $(NODEBUG) DEASSIGN openssl
+ $(NODEBUG) DEASSIGN ossl_dataroot
+ $(NODEBUG) DEASSIGN ossl_installroot
+ $(NODEBUG) DEASSIGN ossl_sourceroot
+.DEFAULT :
+ @ ! MMS cannot handle no actions...
+
+# The main targets ###################################################
+
+{- dependmagic('build_sw'); -} : build_libs_nodep, build_modules_nodep, build_programs_nodep
+{- dependmagic('build_libs'); -} : build_libs_nodep
+{- dependmagic('build_modules'); -} : build_modules_nodep
+{- dependmagic('build_programs'); -} : build_programs_nodep
+
+build_generated_pods : $(GENERATED_PODS)
+build_docs : build_html_docs
+build_html_docs : $(HTMLDOCS1) $(HTMLDOCS3) $(HTMLDOCS5) $(HTMLDOCS7)
+
+build_generated : $(GENERATED_MANDATORY)
+build_libs_nodep : $(LIBS), $(SHLIBS)
+build_modules_nodep : $(MODULES)
+build_programs_nodep : $(PROGRAMS), $(SCRIPTS)
+
+# Kept around for backward compatibility
+build_apps build_tests : build_programs
+
+# Convenience target to prebuild all generated files, not just the mandatory
+# ones
+build_all_generated : $(GENERATED_MANDATORY) $(GENERATED) build_docs
+ @ ! {- output_off() if $disabled{makedepend}; "" -}
+ @ WRITE SYS$OUTPUT "Warning: consider configuring with no-makedepend, because if"
+ @ WRITE SYS$OUTPUT " target system doesn't have $(PERL),"
+ @ WRITE SYS$OUTPUT " then make will fail..."
+ @ ! {- output_on() if $disabled{makedepend}; "" -}
+
+all : build_sw build_docs
+
+test : tests
+{- dependmagic('tests'); -} : build_programs_nodep, build_modules_nodep
+ $(MMS) $(MMSQUALIFIERS) run_tests
+run_tests :
+ @ ! {- output_off() if $disabled{tests}; "" -}
+ DEFINE SRCTOP "$(SRCDIR)"
+ DEFINE BLDTOP "$(BLDDIR)"
+ DEFINE FIPSKEY "$(FIPSKEY)"
+ IF "$(VERBOSE)" .NES. "" THEN DEFINE VERBOSE "$(VERBOSE)"
+ $(PERL) {- sourcefile("test", "run_tests.pl") -} $(TESTS)
+ DEASSIGN BLDTOP
+ DEASSIGN SRCTOP
+ DEASSIGN FIPSKEY
+ @ ! {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
+ @ WRITE SYS$OUTPUT "Tests are not supported with your chosen Configure options"
+ @ ! {- output_on() if !$disabled{tests}; "" -}
+
+list-tests :
+ @ ! {- output_off() if $disabled{tests}; "" -}
+ @ DEFINE SRCTOP "$(SRCDIR)"
+ @ $(PERL) {- sourcefile("test", "run_tests.pl") -} list
+ @ DEASSIGN SRCTOP
+ @ ! {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
+ @ WRITE SYS$OUTPUT "Tests are not supported with your chosen Configure options"
+ @ ! {- output_on() if !$disabled{tests}; "" -}
+
+install : install_sw install_ssldirs install_docs {- $disabled{fips} ? "" : "install_fips" -} install_msg
+
+install_msg :
+ @ WRITE SYS$OUTPUT ""
+ @ WRITE SYS$OUTPUT "######################################################################"
+ @ WRITE SYS$OUTPUT ""
+ @ IF "$(DESTDIR)" .EQS. "" THEN -
+ @{- sourcefile("VMS", "msg_install.com") -} "$(SYSTARTUP)" "{- $osslver -}"
+ @ IF "$(DESTDIR)" .NES. "" THEN -
+ @{- sourcefile("VMS", "msg_staging.com") -} -
+ "''installroot']" "''dataroot']" "$(INSTALLTOP)" "$(OPENSSLDIR)" -
+ "$(SYSTARTUP)" "{- $osslver -}"
+
+check_install :
+ spawn/nolog @ossl_installroot:[SYSTEST]openssl_ivp{- $osslver -}.com
+
+uninstall : uninstall_docs uninstall_sw {- $disabled{fips} ? "" : "uninstall_fips" -}
+
+# Because VMS wants the generation number (or *) to delete files, we can't
+# use $(LIBS), $(PROGRAMS), $(GENERATED) and $(MODULES) directly.
+libclean :
+ {- join("\n\t", map { "- DELETE $_.OLB;*" } @libs) || "@ !" -}
+ {- join("\n\t", map { "- DELETE $_.EXE;*,$_.MAP;*" } @shlibs) || "@ !" -}
+
+clean : libclean
+ {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{htmldocs}->{man1}}) || "@ !" -}
+ {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{htmldocs}->{man3}}) || "@ !" -}
+ {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{htmldocs}->{man5}}) || "@ !" -}
+ {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{htmldocs}->{man7}}) || "@ !" -}
+ {- join("\n\t", map { "- DELETE $_.EXE;*,$_.OPT;*" } @{$unified_info{programs}}) || "@ !" -}
+ {- join("\n\t", map { "- DELETE $_.EXE;*,$_.OPT;*" } @{$unified_info{modules}}) || "@ !" -}
+ {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{scripts}}) || "@ !" -}
+ {- join("\n\t", map { "- DELETE $_;*" } @{$unified_info{depends}->{""}}) || "@ !" -}
+ {- join("\n\t", map { "- DELETE $_;*" } @generated) || "@ !" -}
+ - DELETE [...]*.MAP;*
+ - DELETE [...]*.D;*
+ - DELETE [...]*.OBJ;*,*.LIS;*
+ - DELETE []CXX$DEMANGLER_DB.;*
+ - DELETE [.VMS]openssl_startup.com;*
+ - DELETE [.VMS]openssl_shutdown.com;*
+ - DELETE []vmsconfig.pm;*
+
+distclean : clean
+ - DELETE [.include.openssl]configuration.h;*
+ - DELETE configdata.pm;*
+ - DELETE descrip.mms;*
+
+depend : descrip.mms
+ @ ! {- output_off() if $disabled{makedepend}; "" -}
+ @ $(PERL) {- sourcefile("util", "add-depends.pl") -} "{- $config{makedep_scheme} -}"
+ @ ! {- output_on() if $disabled{makedepend}; "" -}
+
+# Install helper targets #############################################
+
+install_sw : install_dev install_engines install_modules -
+ install_runtime install_startup install_ivp
+
+uninstall_sw : uninstall_dev uninstall_modules uninstall_engines -
+ uninstall_runtime uninstall_startup uninstall_ivp
+
+install_docs : install_html_docs
+
+uninstall_docs : uninstall_html_docs
+
+{- output_off() if $disabled{fips}; "" -}
+install_fips : build_sw $(INSTALL_FIPSMODULECONF)
+ @ WRITE SYS$OUTPUT "*** Installing FIPS module"
+ - CREATE/DIR ossl_installroot:[MODULES{- $target{pointer_size} -}.'arch']
+ - CREATE/DIR/PROT=(S:RWED,O:RWE,G:RE,W:RE) OSSL_DATAROOT:[000000]
+ COPY/PROT=W:RE $(INSTALL_FIPSMODULES) -
+ ossl_installroot:[MODULES{- $target{pointer_size} -}.'arch']$(FIPSMODULENAME)
+ @ WRITE SYS$OUTPUT "*** Installing FIPS module configuration"
+ COPY/PROT=W:RE $(INSTALL_FIPSMODULECONF) OSSL_DATAROOT:[000000]
+
+uninstall_fips :
+ @ WRITE SYS$OUTPUT "*** Uninstalling FIPS module configuration"
+ DELETE OSSL_DATAROOT:[000000]fipsmodule.cnf;*
+ @ WRITE SYS$OUTPUT "*** Uninstalling FIPS module"
+ DELETE ossl_installroot:[MODULES{- $target{pointer_size} -}.'arch']$(FIPSMODULENAME);*
+{- output_on() if $disabled{fips}; "" -}
+
+install_ssldirs : check_INSTALLTOP
+ - CREATE/DIR/PROT=(S:RWED,O:RWE,G:RE,W:RE) OSSL_DATAROOT:[000000]
+ IF F$SEARCH("OSSL_DATAROOT:[000000]CERTS.DIR;1") .EQS. "" THEN -
+ CREATE/DIR/PROT=(S:RWED,O:RWE,G:RE,W:RE) OSSL_DATAROOT:[CERTS]
+ IF F$SEARCH("OSSL_DATAROOT:[000000]PRIVATE.DIR;1") .EQS. "" THEN -
+ CREATE/DIR/PROT=(S:RWED,O:RWE,G,W) OSSL_DATAROOT:[PRIVATE]
+ IF F$SEARCH("OSSL_DATAROOT:[000000]MISC.DIR;1") .EQS. "" THEN -
+ CREATE/DIR/PROT=(S:RWED,O:RWE,G,W) OSSL_DATAROOT:[MISC]
+ COPY/PROT=W:RE $(MISC_SCRIPTS) OSSL_DATAROOT:[MISC]
+ @ ! Install configuration file
+ COPY/PROT=W:R {- sourcefile("apps", "openssl-vms.cnf") -} -
+ ossl_dataroot:[000000]openssl.cnf-dist
+ IF F$SEARCH("OSSL_DATAROOT:[000000]openssl.cnf") .EQS. "" THEN -
+ COPY/PROT=W:R {- sourcefile("apps", "openssl-vms.cnf") -} -
+ ossl_dataroot:[000000]openssl.cnf
+ @ ! Install CTLOG configuration file
+ COPY/PROT=W:R {- sourcefile("apps", "ct_log_list.cnf") -} -
+ ossl_dataroot:[000000]ct_log_list.cnf-dist
+ IF F$SEARCH("OSSL_DATAROOT:[000000]ct_log_list.cnf") .EQS. "" THEN -
+ COPY/PROT=W:R {- sourcefile("apps", "ct_log_list.cnf") -} -
+ ossl_dataroot:[000000]ct_log_list.cnf
+
+install_dev : check_INSTALLTOP install_runtime_libs
+ @ WRITE SYS$OUTPUT "*** Installing development files"
+ @ ! Install header files
+ - CREATE/DIR ossl_installroot:[include.openssl]
+ COPY/PROT=W:R ossl_sourceroot:[include.openssl]*.h -
+ ossl_installroot:[include.openssl]
+ COPY/PROT=W:R [.include.openssl]*.h ossl_installroot:[include.openssl]
+ @ ! Install static (development) libraries
+ - CREATE/DIR ossl_installroot:[LIB.'arch']
+ {- join("\n ",
+ map { "COPY/PROT=W:R $_.OLB ossl_installroot:[LIB.'arch']" }
+ @install_libs) -}
+
+install_engines : check_INSTALLTOP install_runtime_libs build_modules
+ @ {- output_off() unless scalar @install_engines; "" -} !
+ @ WRITE SYS$OUTPUT "*** Installing engines"
+ - CREATE/DIR ossl_installroot:[ENGINES{- $sover_dirname.$target{pointer_size} -}.'arch']
+ {- join("\n ",
+ map { "COPY/PROT=W:RE $_.EXE ossl_installroot:[ENGINES$sover_dirname$target{pointer_size}.'arch']" }
+ @install_engines) -}
+ @ {- output_on() unless scalar @install_engines; "" -} !
+
+install_modules : check_INSTALLTOP install_runtime_libs build_modules
+ @ {- output_off() unless scalar @install_modules; "" -} !
+ @ WRITE SYS$OUTPUT "*** Installing modules"
+ - CREATE/DIR ossl_installroot:[MODULES{- $target{pointer_size} -}.'arch']
+ {- join("\n ",
+ map { "COPY/PROT=W:RE $_.EXE ossl_installroot:[MODULES$target{pointer_size}.'arch']" }
+ @install_modules) -}
+ @ {- output_on() unless scalar @install_modules; "" -} !
+
+install_runtime : install_programs
+
+install_runtime_libs : check_INSTALLTOP build_libs
+ @ {- output_off() if $disabled{shared}; "" -} !
+ @ WRITE SYS$OUTPUT "*** Installing shareable images"
+ @ ! Install shared (runtime) libraries
+ - CREATE/DIR ossl_installroot:[LIB.'arch']
+ {- join("\n ",
+ map { "COPY/PROT=W:R $_.EXE ossl_installroot:[LIB.'arch']" }
+ @install_shlibs) -}
+ @ {- output_on() if $disabled{shared}; "" -} !
+
+install_programs : check_INSTALLTOP install_runtime_libs build_programs
+ @ {- output_off() if $disabled{apps}; "" -} !
+ @ ! Install the main program
+ - CREATE/DIR ossl_installroot:[EXE.'arch']
+ COPY/PROT=W:RE [.APPS]openssl.EXE -
+ ossl_installroot:[EXE.'arch']openssl{- $osslver -}.EXE
+ @ ! Install scripts
+ COPY/PROT=W:RE $(BIN_SCRIPTS) ossl_installroot:[EXE]
+ @ ! {- output_on() if $disabled{apps}; "" -}
+
+install_startup : [.VMS]openssl_startup.com [.VMS]openssl_shutdown.com -
+ [.VMS]openssl_utils.com, check_INSTALLTOP
+ - CREATE/DIR ossl_installroot:[SYS$STARTUP]
+ COPY/PROT=W:RE [.VMS]openssl_startup.com -
+ ossl_installroot:[SYS$STARTUP]openssl_startup{- $osslver -}.com
+ COPY/PROT=W:RE [.VMS]openssl_shutdown.com -
+ ossl_installroot:[SYS$STARTUP]openssl_shutdown{- $osslver -}.com
+ COPY/PROT=W:RE [.VMS]openssl_utils.com -
+ ossl_installroot:[SYS$STARTUP]openssl_utils{- $osslver -}.com
+
+install_ivp : [.VMS]openssl_ivp.com check_INSTALLTOP
+ - CREATE/DIR ossl_installroot:[SYSTEST]
+ COPY/PROT=W:RE [.VMS]openssl_ivp.com -
+ ossl_installroot:[SYSTEST]openssl_ivp{- $osslver -}.com
+
+[.VMS]openssl_startup.com : vmsconfig.pm {- sourcefile("VMS", "openssl_startup.com.in") -}
+ - CREATE/DIR [.VMS]
+ $(PERL) "-I." "-Mvmsconfig" {- sourcefile("util", "dofile.pl") -} -
+ {- sourcefile("VMS", "openssl_startup.com.in") -} -
+ > [.VMS]openssl_startup.com
+
+[.VMS]openssl_utils.com : vmsconfig.pm {- sourcefile("VMS", "openssl_utils.com.in") -}
+ - CREATE/DIR [.VMS]
+ $(PERL) "-I." "-Mvmsconfig" {- sourcefile("util", "dofile.pl") -} -
+ {- sourcefile("VMS", "openssl_utils.com.in") -} -
+ > [.VMS]openssl_utils.com
+
+[.VMS]openssl_shutdown.com : vmsconfig.pm {- sourcefile("VMS", "openssl_shutdown.com.in") -}
+ - CREATE/DIR [.VMS]
+ $(PERL) "-I." "-Mvmsconfig" {- sourcefile("util", "dofile.pl") -} -
+ {- sourcefile("VMS", "openssl_shutdown.com.in") -} -
+ > [.VMS]openssl_shutdown.com
+
+[.VMS]openssl_ivp.com : vmsconfig.pm {- sourcefile("VMS", "openssl_ivp.com.in") -}
+ - CREATE/DIR [.VMS]
+ $(PERL) "-I." "-Mvmsconfig" {- sourcefile("util", "dofile.pl") -} -
+ {- sourcefile("VMS", "openssl_ivp.com.in") -} -
+ > [.VMS]openssl_ivp.com
+
+vmsconfig.pm : configdata.pm
+ OPEN/WRITE/SHARE=READ CONFIG []vmsconfig.pm
+ WRITE CONFIG "package vmsconfig;"
+ WRITE CONFIG "use strict; use warnings;"
+ WRITE CONFIG "use Exporter;"
+ WRITE CONFIG "our @ISA = qw(Exporter);"
+ WRITE CONFIG "our @EXPORT = qw(%config %target %withargs %unified_info %disabled);"
+ WRITE CONFIG "our %config = ("
+ WRITE CONFIG " target => '","{- $config{target} -}","',"
+ WRITE CONFIG " version => '","{- $config{version} -}","',"
+ WRITE CONFIG " shlib_version => '","{- $config{shlib_version} -}","',"
+ WRITE CONFIG " shlib_major => '","{- $config{shlib_major} -}","',"
+ WRITE CONFIG " shlib_minor => '","{- $config{shlib_minor} -}","',"
+ WRITE CONFIG " INSTALLTOP => '$(INSTALLTOP)',"
+ WRITE CONFIG " OPENSSLDIR => '$(OPENSSLDIR)',"
+ WRITE CONFIG ");"
+ WRITE CONFIG "our %target = ("
+ WRITE CONFIG " pointer_size => '","{- $target{pointer_size} -}","',"
+ WRITE CONFIG ");"
+ WRITE CONFIG "our %disabled = ("
+ WRITE CONFIG " shared => '","{- $disabled{shared} -}","',"
+ WRITE CONFIG ");"
+ WRITE CONFIG "our %withargs = ();"
+ WRITE CONFIG "our %unified_info = ();"
+ WRITE CONFIG "1;"
+ CLOSE CONFIG
+
+install_html_docs : check_INSTALLTOP build_html_docs
+ @ WRITE SYS$OUTPUT "*** Installing HTML docs"
+ - CREATE/DIR ossl_installroot:[HTML.MAN1]
+ - CREATE/DIR ossl_installroot:[HTML.MAN3]
+ - CREATE/DIR ossl_installroot:[HTML.MAN5]
+ - CREATE/DIR ossl_installroot:[HTML.MAN7]
+ {- join("\n ",
+ ( map { "COPY/PROT=W:RE $_ ossl_installroot:[HTML.MAN1]" }
+ @{$unified_info{htmldocs}->{man1}} ),
+ ( map { "COPY/PROT=W:RE $_ ossl_installroot:[HTML.MAN3]" }
+ @{$unified_info{htmldocs}->{man3}} ),
+ ( map { "COPY/PROT=W:RE $_ ossl_installroot:[HTML.MAN5]" }
+ @{$unified_info{htmldocs}->{man5}} ),
+ ( map { "COPY/PROT=W:RE $_ ossl_installroot:[HTML.MAN7]" }
+ @{$unified_info{htmldocs}->{man7}} )) -}
+
+check_INSTALLTOP :
+ @ IF "$(INSTALLTOP)" .EQS. "" THEN -
+ WRITE SYS$ERROR "INSTALLTOP should not be empty"
+ @ IF "$(INSTALLTOP)" .EQS. "" THEN -
+ EXIT %x10000002
+
+# Developer targets ##################################################
+
+debug_logicals :
+ SH LOGICAL/PROC openssl,internal,ossl_installroot,ossl_dataroot
+
+# Building targets ###################################################
+
+descrip.mms : configdata.pm {- join(" ", @{$config{build_file_templates}}) -}
+ perl configdata.pm
+ @ WRITE SYS$OUTPUT "*************************************************"
+ @ WRITE SYS$OUTPUT "*** ***"
+ @ WRITE SYS$OUTPUT "*** Please run the same mms command again ***"
+ @ WRITE SYS$OUTPUT "*** ***"
+ @ WRITE SYS$OUTPUT "*************************************************"
+ @ PIPE ( EXIT %X10000000 )
+
+configdata.pm : $(SRCDIR)Configure $(SRCDIR)config.com {- join(" ", @{$config{build_infos}}, @{$config{conf_files}}) -}
+ perl configdata.pm -r
+ @ WRITE SYS$OUTPUT "*************************************************"
+ @ WRITE SYS$OUTPUT "*** ***"
+ @ WRITE SYS$OUTPUT "*** Please run the same mms command again ***"
+ @ WRITE SYS$OUTPUT "*** ***"
+ @ WRITE SYS$OUTPUT "*************************************************"
+ @ PIPE ( EXIT %X10000000 )
+
+reconfigure reconf :
+ perl configdata.pm -r
+
+{-
+ use File::Basename;
+ use File::Spec::Functions qw/abs2rel rel2abs catfile catdir/;
+ use File::Spec::Unix;
+
+ # Helper function to convert dependencies in platform agnostic form to
+ # dependencies in platform form.
+ sub compute_platform_depends {
+ map { my $x = $_;
+
+ grep { $x eq $_ } @{$unified_info{programs}} and platform->bin($x)
+ or grep { $x eq $_ } @{$unified_info{modules}} and platform->dso($x)
+ or grep { $x eq $_ } @{$unified_info{libraries}} and platform->lib($x)
+ or platform->convertext($x); } @_;
+ }
+
+ # Helper function to figure out dependencies on libraries
+ # It takes a list of library names and outputs a list of dependencies
+ sub compute_lib_depends {
+ # Depending on shared libraries:
+ # On Windows POSIX layers, we depend on {libname}.dll.a
+ # On Unix platforms, we depend on {shlibname}.so
+ return map {
+ { lib => platform->sharedlib($_) // platform->staticlib($_),
+ attrs => $unified_info{attributes}->{libraries}->{$_} }
+ } @_;
+ }
+
+ # Helper function to deal with inclusion directory specs.
+ # We're dealing with two issues:
+ # 1. A lot of include directory specs take up a lot of command line real
+ # estate, and the DCL command line is very limited (2KiB).
+ # 2. For optimal usage, include directory paths must be in Unix form,
+ # that's the only way the C compiler can merge multiple include paths
+ # in a sane way (we can stop worrying about 1.h including foo/2.h
+ # including ../3.h).
+ #
+ # To resolve 1, we need to create a file with include directory pragmas,
+ # and let the compiler use it with /FIRST_INCLUDE=.
+ # To resolve 2, we convert all include directory specs we get to Unix,
+ # with available File::Spec functions.
+ #
+ # We use CRC-24 from https://tools.ietf.org/html/rfc4880#section-6,
+ # reimplemented in Perl to get a workable and constant file name for each
+ # combination of include directory specs. It is assumed that the order of
+ # these directories don't matter.
+ #
+ # This function takes as input a list of include directories
+ # This function returns a list two things:
+ # 1. The file name to use with /FIRST_INCLUDE=
+ # 2. Text to insert into descrip.mms (may be the empty string)
+ sub crc24 {
+ my $input = shift;
+
+ my $init_value = 0x00B704CE;
+ my $poly_value = 0x01864CFB;
+
+ my $crc = $init_value;
+
+ foreach my $x (unpack ('C*', $input)) {
+ $crc ^= $x << 16;
+
+ for (my $i; $i < 8; $i++) {
+ $crc <<= 1;
+ if ($crc & 0x01000000) {
+ $crc ^= $poly_value;
+ }
+ }
+ }
+ $crc &= 0xFFFFFF;
+
+ return $crc;
+ }
+ my %includefile_cache;
+ sub make_includefile {
+ my %dirs = map {
+ my $udir = make_unix_path(rel2abs($_));
+
+ $udir => 1;
+ } @_;
+ my @dirs = sort keys %dirs;
+ my $filename = sprintf 'incdirs_%x.h', crc24(join(',', @dirs));
+
+ if ($includefile_cache{$filename}) {
+ return ($filename, "");
+ }
+
+ my $scripture = <<"EOF";
+$filename :
+ open/write inc_output $filename
+EOF
+ foreach (@dirs) {
+ $scripture .= <<"EOF";
+ write inc_output "#pragma include_directory ""$_"""
+EOF
+ }
+ $scripture .= <<"EOF";
+ close inc_output
+EOF
+ $includefile_cache{$filename} = $scripture;
+
+ return ($filename, $scripture);
+ }
+
+ # On VMS, (some) header file directories include the files
+ # __DECC_INCLUDE_EPILOGUE.H and __DECC_INCLUDE_PROLOGUE.H.
+ # When header files are generated, and the build directory
+ # isn't the same as the source directory, these files must
+ # be copied alongside the generated header file, or their
+ # effect will be lost.
+ # We use the same include file cache as make_includefile
+ # to check if the scripture to copy these files has already
+ # been generated.
+ sub make_decc_include_files {
+ my $outd = shift;
+ my $ind = shift;
+
+ # If the build directory and the source directory are the
+ # same, there's no need to copy the prologue and epilogue
+ # files.
+ return ('') if $outd eq $ind;
+
+ my $outprologue = catfile($outd, '__DECC_INCLUDE_PROLOGUE.H');
+ my $outepilogue = catfile($outd, '__DECC_INCLUDE_EPILOGUE.H');
+ my $inprologue = catfile($ind, '__DECC_INCLUDE_PROLOGUE.H');
+ my $inepilogue = catfile($ind, '__DECC_INCLUDE_EPILOGUE.H');
+ my @filenames = ();
+ my $scripture = '';
+
+ if ($includefile_cache{$outprologue}) {
+ push @filenames, $outprologue;
+ } elsif (-f $inprologue) {
+ my $local_scripture .= <<"EOF";
+$outprologue : $inprologue
+ COPY $inprologue $outprologue
+EOF
+ $includefile_cache{$outprologue} = $local_scripture;
+
+ push @filenames, $outprologue;
+ $scripture .= $local_scripture;
+ }
+ if ($includefile_cache{$outepilogue}) {
+ push @filenames, $outepilogue;
+ } elsif (-f $inepilogue) {
+ my $local_scripture .= <<"EOF";
+$outepilogue : $inepilogue
+ COPY $inepilogue $outepilogue
+EOF
+ $includefile_cache{$outepilogue} = $local_scripture;
+
+ push @filenames, $outepilogue;
+ $scripture .= $local_scripture;
+ }
+
+ return (@filenames, $scripture);
+ }
+
+ sub generatetarget {
+ my %args = @_;
+ my $deps = join(" ", compute_platform_depends(@{$args{deps}}));
+ return <<"EOF";
+$args{target} : $deps
+EOF
+ }
+
+ sub generatesrc {
+ my %args = @_;
+ my $gen0 = $args{generator}->[0];
+ my $gen_args = join('', map { " $_" }
+ @{$args{generator}}[1..$#{$args{generator}}]);
+ my $gen_incs = join("", map { ' "-I'.$_.'"' } @{$args{generator_incs}});
+ my $deps = join(", -\n\t\t",
+ compute_platform_depends(@{$args{generator_deps}},
+ @{$args{deps}}));
+
+ if ($args{src} =~ /\.html$/) {
+ #
+ # HTML generator
+ #
+ my $title = basename($args{src}, ".html");
+ my $pod = $gen0;
+ my $mkpod2html = sourcefile('util', 'mkpod2html.pl');
+ my $srcdoc = sourcedir('doc');
+ return <<"EOF";
+$args{src} : $pod
+ \$(PERL) $mkpod2html -i $pod -o \$\@ -t "$title" -r "$srcdoc"
+EOF
+ } elsif ($args{src} =~ /\.(\d)$/) {
+ #
+ # Man-page generator, on VMS we simply ignore man-pages
+ #
+ return "";
+ } elsif (platform->isdef($args{src})) {
+ #
+ # Linker script-ish generator
+ #
+ my $target = platform->def($args{src});
+ my $mkdef = sourcefile('util', 'mkdef.pl');
+ my $ord_ver = $args{intent} eq 'lib' ? ' --version $(VERSION_NUMBER)' : '';
+ my $ord_name =
+ $args{generator}->[1] || basename($args{product}, '.EXE');
+ my $case_insensitive =
+ $target{$args{intent}.'_cflags'} =~ m|/NAMES=[^/]*AS_IS|i
+ ? '' : ' --case-insensitive';
+ return <<"EOF";
+$target : $gen0 $deps $mkdef
+ \$(PERL) $mkdef$ord_ver --type $args{intent} --ordinals $gen0 --name $ord_name "--OS" "VMS"$case_insensitive > $target
+EOF
+ } elsif (platform->isasm($args{src})
+ || platform->iscppasm($args{src})) {
+ #
+ # Assembler generator
+ #
+ my $cppflags =
+ { shlib => "$lib_cflags $lib_cppflags",
+ lib => "$lib_cflags $lib_cppflags",
+ dso => "$dso_cflags $dso_cppflags",
+ bin => "$bin_cflags $bin_cppflags" } -> {$args{intent}};
+ my $defs = join("", map { ",".$_ } @{$args{defs}});
+ my $target = platform->isasm($args{src})
+ ? platform->asm($args{src})
+ : $args{src};
+
+ my $generator;
+ if ($gen0 =~ /\.pl$/) {
+ $generator = '$(PERL)'.$gen_incs.' '.$gen0.$gen_args
+ .' '.$cppflags;
+ } elsif ($gen0 =~ /\.S$/) {
+ $generator = undef;
+ } else {
+ die "Generator type for $src unknown: $gen0.$gen_args\n";
+ }
+
+ if (defined($generator)) {
+ return <<"EOF";
+$target : $gen0 $deps
+ \@ extradefines = "$defs"
+ $generator \$\@
+ \@ DELETE/SYMBOL/LOCAL extradefines
+EOF
+ }
+ return <<"EOF";
+$target : $gen0 $deps
+ \@ extradefines = "$defs"
+ PIPE \$(CPP) $cppflags $gen0 | -
+ \$(PERL) "-ne" "/^#(\\s*line)?\\s*[0-9]+\\s+""/ or print" > \$\@
+ \@ DELETE/SYMBOL/LOCAL extradefines
+EOF
+ } elsif ($gen0 =~ m|^.*\.in$|) {
+ #
+ # "dofile" generator (file.in -> file)
+ #
+ my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
+ "util", "dofile.pl")),
+ rel2abs($config{builddir}));
+ my @perlmodules = ( 'configdata.pm',
+ grep { $_ =~ m|\.pm$| } @{$args{deps}} );
+ my %perlmoduleincs = map { '"-I'.dirname($_).'"' => 1 } @perlmodules;
+ my @decc_include_data
+ = make_decc_include_files(dirname($args{src}), dirname($gen0));
+ my $decc_include_scripture = pop @decc_include_data;
+ $deps = join(' ', $deps, @decc_include_data,
+ compute_platform_depends(@perlmodules));
+ @perlmodules = map { '"-M'.basename($_, '.pm').'"' } @perlmodules;
+ my $perlmodules = join(' ', '', sort keys %perlmoduleincs, @perlmodules);
+
+ return <<"EOF";
+$args{src} : $gen0 $deps
+ \$(PERL)$perlmodules $dofile "-o$target{build_file}" $gen0$gen_args > \$\@
+$decc_include_scripture
+EOF
+ } elsif (grep { $_ eq $gen0 } @{$unified_info{programs}}) {
+ #
+ # Generic generator using OpenSSL programs
+ #
+
+ # Redo $gen0, to ensure that we have the proper extension
+ $gen0 = platform->bin($gen0);
+ return <<"EOF";
+$args{src} : $gen0 $deps
+ PIPE MCR $gen0$gen_args > \$@
+EOF
+ } else {
+ #
+ # Generic generator using Perl
+ #
+ return <<"EOF";
+$args{src} : $gen0 $deps
+ \$(PERL)$gen_incs $gen0$gen_args > \$\@
+EOF
+ }
+ }
+
+ sub src2obj {
+ my $asmext = platform->asmext();
+ my %args = @_;
+ my @srcs =
+ map { my $x = $_;
+ (platform->isasm($x) && grep { $x eq $_ } @generated)
+ ? platform->asm($x) : $x }
+ ( @{$args{srcs}} );
+ my $obj = platform->obj($args{obj});
+ my $dep = platform->dep($args{obj});
+ my $deps = join(", -\n\t\t", @srcs, @{$args{deps}});
+
+ # Because VMS C isn't very good at combining a /INCLUDE path with
+ # #includes having a relative directory (like '#include "../foo.h"),
+ # the best choice is to move to the first source file's intended
+ # directory before compiling, and make sure to write the object file
+ # in the correct position (important when the object tree is other
+ # than the source tree).
+ my $forward = dirname($args{srcs}->[0]);
+ my $backward = abs2rel(rel2abs("."), rel2abs($forward));
+ my $objd = abs2rel(rel2abs(dirname($obj)), rel2abs($forward));
+ my $objn = basename($obj);
+ my $depd = abs2rel(rel2abs(dirname($dep)), rel2abs($forward));
+ my $depn = basename($dep);
+ my $srcs =
+ join(", ", map { abs2rel(rel2abs($_), rel2abs($forward)) } @srcs);
+ my $incextra = join(',', map { "\"$_\"" }
+ @{$unified_info{includes_extra}->{$obj}});
+ $incextra = "/INCLUDE=($incextra)" if $incextra;
+
+ my $cflags;
+ if ($args{attrs}->{noinst}) {
+ $cflags .= { shlib => $lib_cflags_no_inst,
+ lib => $lib_cflags_no_inst,
+ dso => $dso_cflags_no_inst,
+ bin => $bin_cflags_no_inst } -> {$args{intent}};
+ } else {
+ $cflags .= { shlib => $lib_cflags,
+ lib => $lib_cflags,
+ dso => $dso_cflags,
+ bin => $bin_cflags } -> {$args{intent}};
+ }
+ $cflags .= { shlib => $lib_cppflags,
+ lib => $lib_cppflags,
+ dso => $dso_cppflags,
+ bin => $bin_cppflags } -> {$args{intent}};
+ $cflags .= $incextra;
+ my $defs = join("", map { ",".$_ } @{$args{defs}});
+ my $asflags = { shlib => $lib_asflags,
+ lib => $lib_asflags,
+ dso => $dso_asflags,
+ bin => $bin_asflags } -> {$args{intent}};
+
+ if ($srcs[0] =~ /\Q${asmext}\E$/) {
+ return <<"EOF";
+$obj : $deps
+ SET DEFAULT $forward
+ \$(AS) $asflags \$(ASOUTFLAG)${objd}${objn} $srcs
+ SET DEFAULT $backward
+ - PURGE $obj
+EOF
+ } elsif ($srcs[0] =~ /.S$/) {
+ return <<"EOF";
+$obj : $deps
+ SET DEFAULT $forward
+ \@ $incs_on
+ \@ extradefines = "$defs"
+ PIPE \$(CPP) ${cflags} $srcs | -
+ \$(PERL) -ne "/^#(\\s*line)?\\s*[0-9]+\\s+""/ or print" -
+ > ${objd}${objn}-asm
+ \@ DELETE/SYMBOL/LOCAL extradefines
+ \@ $incs_off
+ SET DEFAULT $backward
+ \$(AS) $asflags \$(ASOUTFLAG)$obj $obj-asm
+ - PURGE $obj
+EOF
+ }
+
+ my ($incdir_filename, $incdir_scripture) =
+ make_includefile(@{ { shlib => [ @lib_cppincludes ],
+ lib => [ @lib_cppincludes ],
+ dso => [ @dso_cppincludes ],
+ bin => [ @bin_cppincludes ] } -> {$args{intent}} },
+ @{$args{incs}});
+ $deps .= ", -\n\t\t$incdir_filename";
+ $cflags =
+ $target{cflag_incfirst}
+ . '"'.make_unix_path(rel2abs($incdir_filename)).'"'
+ . $cflags;
+
+ my $depbuild = $disabled{makedepend} ? ""
+ : " /MMS=(FILE=${depd}${depn},TARGET=$obj)";
+
+ return <<"EOF";
+$obj : $deps
+ SET DEFAULT $forward
+ \@ $incs_on
+ \@ extradefines = "$defs"
+ \$(CC) ${cflags}${depbuild} /OBJECT=${objd}${objn} /REPOSITORY=$backward $srcs
+ \@ DELETE/SYMBOL/LOCAL extradefines
+ \@ $incs_off
+ SET DEFAULT $backward
+ - PURGE $obj
+$incdir_scripture
+EOF
+ }
+ sub obj2shlib {
+ my %args = @_;
+ my $shlibname = platform->sharedname($args{lib});
+ my $shlib = platform->sharedlib($args{lib});
+ my @objs = map { platform->convertext($_) }
+ grep { platform->isobj($_) }
+ @{$args{objs}};
+ my @defs = map { platform->convertext($_) }
+ grep { platform->isdef($_) }
+ @{$args{objs}};
+ my @deps = compute_lib_depends(@{$args{deps}});
+ die "More than one symbol vector" if scalar @defs > 1;
+ my $deps = join(", -\n\t\t", @objs, @defs, map { $_->{lib} } @deps);
+ my $shlib_target = $disabled{shared} ? "" : $target{shared_target};
+ my $translatesyms_pl = abs2rel(rel2abs(catfile($config{sourcedir},
+ "VMS", "translatesyms.pl")),
+ rel2abs($config{builddir}));
+ # The "[]" hack is because in .OPT files, each line inherits the
+ # previous line's file spec as default, so if no directory spec
+ # is present in the current line and the previous line has one that
+ # doesn't apply, you're in for a surprise.
+ my $write_opt1 =
+ join(",-\"\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_;
+ "WRITE OPT_FILE \"$x" } @objs).
+ "\"";
+ my $write_opt2 =
+ join("\n\t", map { my $x = $_->{lib} =~ /\[/
+ ? $_->{lib} : "[]".$_->{lib};
+ $x =~ s|(\.EXE)|$1/SHARE|;
+ $x =~ s|(\.OLB)|$1/LIB|;
+ "WRITE OPT_FILE \"$x\"" } @deps)
+ || "\@ !";
+ return <<"EOF"
+$shlib : $deps
+ \$(PERL) $translatesyms_pl \$(BLDDIR)CXX\$DEMANGLER_DB. < $defs[0] > $defs[0]-translated
+ OPEN/WRITE/SHARE=READ OPT_FILE $shlibname-components.OPT
+ $write_opt1
+ $write_opt2
+ CLOSE OPT_FILE
+ LINK ${lib_ldflags}/SHARE=\$\@ $defs[0]-translated/OPT,-
+ $shlibname-components.OPT/OPT \$(LIB_EX_LIBS)
+ DELETE $defs[0]-translated;*,$shlibname-components.OPT;*
+ PURGE $shlibname.EXE,$shlibname.MAP
+EOF
+ . ($config{target} =~ m|alpha| ? "" : <<"EOF"
+ SET IMAGE/FLAGS=(NOCALL_DEBUG) \$\@
+EOF
+ );
+ }
+ sub obj2dso {
+ my %args = @_;
+ my $dsoname = platform->dsoname($args{module});
+ my $dso = platform->dso($args{module});
+ my @objs = map { platform->convertext($_) }
+ grep { platform->isobj($_) }
+ @{$args{objs}};
+ my @defs = map { platform->convertext($_) }
+ grep { platform->isdef($_) }
+ @{$args{objs}};
+ my @deps = compute_lib_depends(@{$args{deps}});
+ my $deps = join(", -\n\t\t", @objs, @defs, map { $_->{lib} } @deps);
+ die "More than one symbol vector" if scalar @defs > 1;
+ my $shlib_target = $disabled{shared} ? "" : $target{shared_target};
+ # The "[]" hack is because in .OPT files, each line inherits the
+ # previous line's file spec as default, so if no directory spec
+ # is present in the current line and the previous line has one that
+ # doesn't apply, you're in for a surprise.
+ my $write_opt1 =
+ join(",-\"\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_;
+ "WRITE OPT_FILE \"$x" } @objs).
+ "\"";
+ my $write_opt2 =
+ join("\n\t", map { my $x = $_->{lib} =~ /\[/
+ ? $_->{lib} : "[]".$_->{lib};
+ $x =~ s|(\.EXE)|$1/SHARE|;
+ $x =~ s|(\.OLB)|$1/LIB|;
+ "WRITE OPT_FILE \"$x\"" } @deps)
+ || "\@ !";
+ return <<"EOF"
+$dso : $deps
+ OPEN/WRITE/SHARE=READ OPT_FILE $dsoname-components.OPT
+ $write_opt1
+ $write_opt2
+ CLOSE OPT_FILE
+ LINK ${dso_ldflags}/SHARE=\$\@ $defs[0]/OPT,-
+ $dsoname-components.OPT/OPT \$(DSO_EX_LIBS)
+ - PURGE $dsoname.EXE,$dsoname.OPT,$dsoname.MAP
+EOF
+ . ($config{target} =~ m|alpha| ? "" : <<"EOF"
+ SET IMAGE/FLAGS=(NOCALL_DEBUG) \$\@
+EOF
+ );
+ }
+ sub obj2lib {
+ my %args = @_;
+ my $lib = platform->staticlib($args{lib});
+ my @objs = map { platform->convertext($_) }
+ grep { platform->isobj($_) }
+ @{$args{objs}};
+ my $objs = join(", -\n\t\t", @objs);
+ my $fill_lib = join("\n\t", (map { "LIBRARY/REPLACE $lib $_" } @objs));
+ return <<"EOF";
+$lib : $objs
+ LIBRARY/CREATE/OBJECT $lib
+ $fill_lib
+ - PURGE $lib
+EOF
+ }
+ sub obj2bin {
+ my %args = @_;
+ my $bin = platform->bin($args{bin});
+ my $binname = platform->binname($args{bin});
+ my @objs = map { platform->convertext($_) }
+ grep { platform->isobj($_) }
+ @{$args{objs}};
+ my $objs = join(",", @objs);
+ my @deps = compute_lib_depends(@{$args{deps}});
+ my $deps = join(", -\n\t\t", @objs, map { $_->{lib} } @deps);
+
+ my $olb_count = scalar grep(m|\.OLB$|, map { $_->{lib} } @deps);
+ my $analyse_objs = "@ !";
+ if ($olb_count > 0) {
+ my $analyse_quals =
+ $config{target} =~ m|alpha| ? "/GSD" : "/SECTIONS=SYMTAB";
+ $analyse_objs = "- pipe ANALYSE/OBJECT$analyse_quals $objs | SEARCH SYS\$INPUT \"\"\"main\"\"\" ; nomain = \$severity .NE. 1"
+ }
+ # The "[]" hack is because in .OPT files, each line inherits the
+ # previous line's file spec as default, so if no directory spec
+ # is present in the current line and the previous line has one that
+ # doesn't apply, you're in for a surprise.
+ my $write_opt1 =
+ join(",-\"\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_;
+ "\@ WRITE OPT_FILE \"$x" } @objs).
+ "\"";
+ my $write_opt2 =
+ join("\n\t", "WRITE OPT_FILE \"CASE_SENSITIVE=YES\"",
+ map { my @lines = ();
+ use Data::Dumper;
+ my $x = $_->{lib} =~ /\[/
+ ? $_->{lib} : "[]".$_->{lib};
+ if ($x =~ m|\.EXE$|) {
+ push @lines, "\@ WRITE OPT_FILE \"$x/SHARE\"";
+ } elsif ($x =~ m|\.OLB$|) {
+ # Special hack to include the MAIN object
+ # module explicitly. This will only be done
+ # if there isn't a 'main' in the program's
+ # object modules already.
+ my $main = $_->{attrs}->{has_main}
+ ? '/INCLUDE=main' : '';
+ push @lines,
+ "\@ IF nomain THEN WRITE OPT_FILE \"$x/LIB$main\"",
+ "\@ IF .NOT. nomain THEN WRITE OPT_FILE \"$x/LIB\""
+ }
+ @lines
+ } @deps)
+ || "\@ !";
+ # The linking commands looks a bit complex, but it's for good reason.
+ # When you link, say, foo.obj, bar.obj and libsomething.exe/share, and
+ # bar.obj happens to have a symbol that also exists in libsomething.exe,
+ # the linker will warn about it, loudly, and will then choose to pick
+ # the first copy encountered (the one in bar.obj in this example).
+ # On Unix and on Windows, the corresponding maneuver goes through
+ # silently with the same effect.
+ # With some test programs, made for checking the internals of OpenSSL,
+ # we do this kind of linking deliberately, picking a few specific object
+ # files from within [.crypto] or [.ssl] so we can reach symbols that are
+ # otherwise unreachable (since the shareable images only exports the
+ # symbols listed in [.util]*.num), and then with the shared libraries
+ # themselves. So we need to silence the warning about multiply defined
+ # symbols, to mimic the way linking work on Unix and Windows, and so
+ # the build isn't interrupted (MMS stops when warnings are signaled,
+ # by default), and so someone building doesn't have to worry where it
+ # isn't necessary. If there are other warnings, however, we show them
+ # and let it break the build.
+ return <<"EOF"
+$bin : $deps
+ $analyse_objs
+ @ OPEN/WRITE/SHARE=READ OPT_FILE $binname.OPT
+ $write_opt1
+ $write_opt2
+ @ CLOSE OPT_FILE
+ TYPE $binname.OPT ! For debugging
+ - pipe SPAWN/WAIT/NOLOG/OUT=$binname.LINKLOG -
+ LINK ${bin_ldflags}/EXEC=\$\@ $binname.OPT/OPT \$(BIN_EX_LIBS) ; -
+ link_status = \$status ; link_severity = link_status .AND. 7
+ @ search_severity = 1
+ -@ IF link_severity .EQ. 0 THEN -
+ pipe SEARCH $binname.LINKLOG "%","-"/MATCH=AND | -
+ SPAWN/WAIT/NOLOG/OUT=NLA0: -
+ SEARCH SYS\$INPUT: "-W-MULDEF,"/MATCH=NOR ; -
+ search_severity = \$severity
+ @ ! search_severity is 3 when the last search didn't find any matching
+ @ ! string: %SEARCH-I-NOMATCHES, no strings matched
+ @ ! If that was the result, we pretend linking got through without
+ @ ! fault or warning.
+ @ IF search_severity .EQ. 3 THEN link_severity = 1
+ @ ! At this point, if link_severity shows that there was a fault
+ @ ! or warning, make sure to restore the linking status.
+ -@ IF .NOT. link_severity THEN TYPE $binname.LINKLOG
+ -@ DELETE $binname.LINKLOG;*
+ @ IF .NOT. link_severity THEN SPAWN/WAIT/NOLOG EXIT 'link_status'
+ - PURGE $bin,$binname.OPT
+EOF
+ . ($config{target} =~ m|alpha| ? "" : <<"EOF"
+ SET IMAGE/FLAGS=(NOCALL_DEBUG) \$\@
+EOF
+ );
+ }
+ sub in2script {
+ my %args = @_;
+ my $script = $args{script};
+ return "" if grep { $_ eq $script } @{$args{sources}}; # No overwrite!
+ my $sources = join(" ", @{$args{sources}});
+ my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
+ "util", "dofile.pl")),
+ rel2abs($config{builddir}));
+ return <<"EOF";
+$script : $sources configdata.pm
+ \$(PERL) "-I\$(BLDDIR)" "-Mconfigdata" $dofile -
+ "-o$target{build_file}" $sources > $script
+ SET FILE/PROT=(S:RWED,O:RWED,G:RE,W:RE) $script
+ PURGE $script
+EOF
+ }
+ "" # Important! This becomes part of the template result.
+-}
diff --git a/Configurations/gentemplate.pm b/Configurations/gentemplate.pm
new file mode 100644
index 000000000000..3fd5f675c9c8
--- /dev/null
+++ b/Configurations/gentemplate.pm
@@ -0,0 +1,556 @@
+package gentemplate;
+
+use strict;
+use warnings;
+use Carp;
+
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+@ISA = qw(Exporter);
+@EXPORT = qw(gentemplate);
+
+use File::Basename;
+
+sub gentemplate {
+ my %opts = @_;
+
+ my $generator = OpenSSL::GenTemplate->new(%opts);
+
+ # Build mandatory header file generators
+ foreach (@{$generator->{info}->{depends}->{""}}) { $generator->dogenerate($_); }
+
+ # Build all known targets, libraries, modules, programs and scripts.
+ # Everything else will be handled as a consequence.
+ foreach (@{$generator->{info}->{targets}}) { $generator->dotarget($_); }
+ foreach (@{$generator->{info}->{libraries}}) { $generator->dolib($_); }
+ foreach (@{$generator->{info}->{modules}}) { $generator->domodule($_); }
+ foreach (@{$generator->{info}->{programs}}) { $generator->dobin($_); }
+ foreach (@{$generator->{info}->{scripts}}) { $generator->doscript($_); }
+ foreach (sort keys %{$generator->{info}->{htmldocs}}) { $generator->dodocs('html', $_); }
+ foreach (sort keys %{$generator->{info}->{mandocs}}) { $generator->dodocs('man', $_); }
+ foreach (sort keys %{$generator->{info}->{dirinfo}}) { $generator->dodir($_); }
+}
+
+package OpenSSL::GenTemplate;
+
+use OpenSSL::Util;
+
+sub new {
+ my $class = shift;
+ my %opts = @_;
+
+ my $data = {
+ output => $opts{output},
+ config => $opts{config} // {},
+ disabled => $opts{disabled} // {},
+ info => $opts{unified_info} // {},
+ };
+
+ return bless $data, $class;
+};
+
+sub emit {
+ my $self = shift;
+ my $name = shift;
+ my %opts = @_;
+ my $fh = $self->{output};
+
+ die "No name?" unless $name;
+ print $fh "{-\n ", $name, '(', dump_data(\%opts), ');', " \n-}"
+ unless defined $opts{attrs}->{skip};
+}
+
+my $debug_resolvedepends = $ENV{BUILDFILE_DEBUG_DEPENDS};
+my $debug_rules = $ENV{BUILDFILE_DEBUG_RULES};
+
+# A cache of objects for which a recipe has already been generated
+our %cache;
+
+# collectdepends, expanddepends and reducedepends work together to make
+# sure there are no duplicate or weak dependencies and that they are in
+# the right order. This is used to sort the list of libraries that a
+# build depends on.
+sub extensionlesslib {
+ my @result = map { $_ =~ /(\.a)?$/; $` } @_;
+ return @result if wantarray;
+ return $result[0];
+}
+
+# collectdepends dives into the tree of dependencies and returns
+# a list of all the non-weak ones.
+sub collectdepends {
+ my $self = shift;
+ return () unless @_;
+
+ my $thing = shift;
+ my $extensionlessthing = extensionlesslib($thing);
+ my @listsofar = @_; # to check if we're looping
+ my @list = @{ $self->{info}->{depends}->{$thing} //
+ $self->{info}->{depends}->{$extensionlessthing}
+ // [] };
+ my @newlist = ();
+
+ print STDERR "DEBUG[collectdepends] $thing > ", join(' ', @listsofar), "\n"
+ if $debug_resolvedepends;
+ foreach my $item (@list) {
+ my $extensionlessitem = extensionlesslib($item);
+ # It's time to break off when the dependency list starts looping
+ next if grep { extensionlesslib($_) eq $extensionlessitem } @listsofar;
+ # Don't add anything here if the dependency is weak
+ next if defined $self->{info}->{attributes}->{depends}->{$thing}->{$item}->{'weak'};
+ my @resolved = $self->collectdepends($item, @listsofar, $item);
+ push @newlist, $item, @resolved;
+ }
+ print STDERR "DEBUG[collectdepends] $thing < ", join(' ', @newlist), "\n"
+ if $debug_resolvedepends;
+ @newlist;
+}
+
+# expanddepends goes through a list of stuff, checks if they have any
+# dependencies, and adds them at the end of the current position if
+# they aren't already present later on.
+sub expanddepends {
+ my $self = shift;
+ my @after = ( @_ );
+ print STDERR "DEBUG[expanddepends]> ", join(' ', @after), "\n"
+ if $debug_resolvedepends;
+ my @before = ();
+ while (@after) {
+ my $item = shift @after;
+ print STDERR "DEBUG[expanddepends]\\ ", join(' ', @before), "\n"
+ if $debug_resolvedepends;
+ print STDERR "DEBUG[expanddepends] - ", $item, "\n"
+ if $debug_resolvedepends;
+ my @middle = (
+ $item,
+ map {
+ my $x = $_;
+ my $extlessx = extensionlesslib($x);
+ if (grep { $extlessx eq extensionlesslib($_) } @before
+ and
+ !grep { $extlessx eq extensionlesslib($_) } @after) {
+ print STDERR "DEBUG[expanddepends] + ", $x, "\n"
+ if $debug_resolvedepends;
+ ( $x )
+ } else {
+ print STDERR "DEBUG[expanddepends] ! ", $x, "\n"
+ if $debug_resolvedepends;
+ ()
+ }
+ } @{$self->{info}->{depends}->{$item} // []}
+ );
+ print STDERR "DEBUG[expanddepends] = ", join(' ', @middle), "\n"
+ if $debug_resolvedepends;
+ print STDERR "DEBUG[expanddepends]/ ", join(' ', @after), "\n"
+ if $debug_resolvedepends;
+ push @before, @middle;
+ }
+ print STDERR "DEBUG[expanddepends]< ", join(' ', @before), "\n"
+ if $debug_resolvedepends;
+ @before;
+}
+
+# reducedepends looks through a list, and checks if each item is
+# repeated later on. If it is, the earlier copy is dropped.
+sub reducedepends {
+ my @list = @_;
+ print STDERR "DEBUG[reducedepends]> ", join(' ', @list), "\n"
+ if $debug_resolvedepends;
+ my @newlist = ();
+ my %replace = ();
+ while (@list) {
+ my $item = shift @list;
+ my $extensionlessitem = extensionlesslib($item);
+ if (grep { $extensionlessitem eq extensionlesslib($_) } @list) {
+ if ($item ne $extensionlessitem) {
+ # If this instance of the library is explicitly static, we
+ # prefer that to any shared library name, since it must have
+ # been done on purpose.
+ $replace{$extensionlessitem} = $item;
+ }
+ } else {
+ push @newlist, $item;
+ }
+ }
+ @newlist = map { $replace{$_} // $_; } @newlist;
+ print STDERR "DEBUG[reducedepends]< ", join(' ', @newlist), "\n"
+ if $debug_resolvedepends;
+ @newlist;
+}
+
+# Do it all
+# This takes multiple inputs and combine them into a single list of
+# interdependent things. The returned value will include all the input.
+# Callers are responsible for taking away the things they are building.
+sub resolvedepends {
+ my $self = shift;
+ print STDERR "DEBUG[resolvedepends] START (", join(', ', @_), ")\n"
+ if $debug_resolvedepends;
+ my @all =
+ reducedepends($self->expanddepends(map { ( $_, $self->collectdepends($_) ) } @_));
+ print STDERR "DEBUG[resolvedepends] END (", join(', ', @_), ") : ",
+ join(',', map { "\n $_" } @all), "\n"
+ if $debug_resolvedepends;
+ @all;
+}
+
+# dogenerate is responsible for producing all the recipes that build
+# generated source files. It recurses in case a dependency is also a
+# generated source file.
+sub dogenerate {
+ my $self = shift;
+ my $src = shift;
+ # Safety measure
+ return "" unless defined $self->{info}->{generate}->{$src};
+ return "" if $cache{$src};
+ my $obj = shift;
+ my $bin = shift;
+ my %opts = @_;
+ if ($self->{info}->{generate}->{$src}) {
+ die "$src is generated by Configure, should not appear in build file\n"
+ if ref $self->{info}->{generate}->{$src} eq "";
+ my $script = $self->{info}->{generate}->{$src}->[0];
+ my %attrs = %{$self->{info}->{attributes}->{generate}->{$src} // {}};
+ $self->emit('generatesrc',
+ src => $src,
+ product => $bin,
+ generator => $self->{info}->{generate}->{$src},
+ generator_incs => $self->{info}->{includes}->{$script} // [],
+ generator_deps => $self->{info}->{depends}->{$script} // [],
+ deps => $self->{info}->{depends}->{$src} // [],
+ incs => [ defined $obj ? @{$self->{info}->{includes}->{$obj} // []} : (),
+ defined $bin ? @{$self->{info}->{includes}->{$bin} // []} : () ],
+ defs => [ defined $obj ? @{$self->{info}->{defines}->{$obj} // []} : (),
+ defined $bin ? @{$self->{info}->{defines}->{$bin} // []} : () ],
+ attrs => { %attrs },
+ %opts);
+ foreach (@{$self->{info}->{depends}->{$src} // []}) {
+ $self->dogenerate($_, $obj, $bin, %opts);
+ }
+ # The generator itself may be is generated
+ if ($self->{info}->{generate}->{$script}) {
+ $self->dogenerate($script, $obj, $bin, %opts);
+ }
+ }
+ $cache{$src} = 1;
+}
+
+sub dotarget {
+ my $self = shift;
+ my $target = shift;
+ return "" if $cache{$target};
+ $self->emit('generatetarget',
+ target => $target,
+ deps => $self->{info}->{depends}->{$target} // []);
+ foreach (@{$self->{info}->{depends}->{$target} // []}) {
+ $self->dogenerate($_);
+ }
+ $cache{$target} = 1;
+}
+
+# doobj is responsible for producing all the recipes that build
+# object files as well as dependency files.
+sub doobj {
+ my $self = shift;
+ my $obj = shift;
+ return "" if $cache{$obj};
+ my $bin = shift;
+ my %opts = @_;
+ if (@{$self->{info}->{sources}->{$obj} // []}) {
+ my @srcs = @{$self->{info}->{sources}->{$obj}};
+ my @deps = @{$self->{info}->{depends}->{$obj} // []};
+ my @incs = ( @{$self->{info}->{includes}->{$obj} // []},
+ @{$self->{info}->{includes}->{$bin} // []} );
+ my @defs = ( @{$self->{info}->{defines}->{$obj} // []},
+ @{$self->{info}->{defines}->{$bin} // []} );
+ print STDERR "DEBUG[doobj] \@srcs for $obj ($bin) : ",
+ join(",", map { "\n $_" } @srcs), "\n"
+ if $debug_rules;
+ print STDERR "DEBUG[doobj] \@deps for $obj ($bin) : ",
+ join(",", map { "\n $_" } @deps), "\n"
+ if $debug_rules;
+ print STDERR "DEBUG[doobj] \@incs for $obj ($bin) : ",
+ join(",", map { "\n $_" } @incs), "\n"
+ if $debug_rules;
+ print STDERR "DEBUG[doobj] \@defs for $obj ($bin) : ",
+ join(",", map { "\n $_" } @defs), "\n"
+ if $debug_rules;
+ print STDERR "DEBUG[doobj] \%opts for $obj ($bin) : ", ,
+ join(",", map { "\n $_ = $opts{$_}" } sort keys %opts), "\n"
+ if $debug_rules;
+ $self->emit('src2obj',
+ obj => $obj, product => $bin,
+ srcs => [ @srcs ], deps => [ @deps ],
+ incs => [ @incs ], defs => [ @defs ],
+ %opts);
+ foreach ((@{$self->{info}->{sources}->{$obj}},
+ @{$self->{info}->{depends}->{$obj} // []})) {
+ $self->dogenerate($_, $obj, $bin, %opts);
+ }
+ }
+ $cache{$obj} = 1;
+}
+
+# Helper functions to grab all applicable intermediary files.
+# This is particularly useful when a library is given as source
+# rather than a dependency. In that case, we consider it to be a
+# container with object file references, or possibly references
+# to further libraries to pilfer in the same way.
+sub getsrclibs {
+ my $self = shift;
+ my $section = shift;
+
+ # For all input, see if it sources static libraries. If it does,
+ # return them together with the result of a recursive call.
+ map { ( $_, getsrclibs($section, $_) ) }
+ grep { $_ =~ m|\.a$| }
+ map { @{$self->{info}->{$section}->{$_} // []} }
+ @_;
+}
+
+sub getlibobjs {
+ my $self = shift;
+ my $section = shift;
+
+ # For all input, see if it's an intermediary file (library or object).
+ # If it is, collect the result of a recursive call, or if that returns
+ # an empty list, the element itself. Return the result.
+ map {
+ my @x = $self->getlibobjs($section, @{$self->{info}->{$section}->{$_}});
+ @x ? @x : ( $_ );
+ }
+ grep { defined $self->{info}->{$section}->{$_} }
+ @_;
+}
+
+# dolib is responsible for building libraries. It will call
+# obj2shlib if shared libraries are produced, and obj2lib in all
+# cases. It also makes sure all object files for the library are
+# built.
+sub dolib {
+ my $self = shift;
+ my $lib = shift;
+ return "" if $cache{$lib};
+
+ my %attrs = %{$self->{info}->{attributes}->{libraries}->{$lib} // {}};
+
+ my @deps = ( $self->resolvedepends(getsrclibs('sources', $lib)) );
+
+ # We support two types of objs, those who are specific to this library
+ # (they end up in @objs) and those that we get indirectly, via other
+ # libraries (they end up in @foreign_objs). We get the latter any time
+ # someone has done something like this in build.info:
+ # SOURCE[libfoo.a]=libbar.a
+ # The indirect object files must be kept in a separate array so they
+ # don't get rebuilt unnecessarily (and with incorrect auxiliary
+ # information).
+ #
+ # Object files can't be collected commonly for shared and static
+ # libraries, because we contain their respective object files in
+ # {shared_sources} and {sources}, and because the implications are
+ # slightly different for each library form.
+ #
+ # We grab all these "foreign" object files recursively with getlibobjs().
+
+ unless ($self->{disabled}->{shared} || $lib =~ /\.a$/) {
+ # If this library sources other static libraries and those
+ # libraries are marked {noinst}, there's no need to include
+ # all of their object files. Instead, we treat those static
+ # libraries as dependents alongside any other library this
+ # one depends on, and let symbol resolution do its job.
+ my @sourced_libs = ();
+ my @objs = ();
+ my @foreign_objs = ();
+ my @deps = ();
+ foreach (@{$self->{info}->{shared_sources}->{$lib} // []}) {
+ if ($_ !~ m|\.a$|) {
+ push @objs, $_;
+ } elsif ($self->{info}->{attributes}->{libraries}->{$_}->{noinst}) {
+ push @deps, $_;
+ } else {
+ push @deps, $self->getsrclibs('sources', $_);
+ push @foreign_objs, $self->getlibobjs('sources', $_);
+ }
+ }
+ @deps = ( grep { $_ ne $lib } $self->resolvedepends($lib, @deps) );
+ print STDERR "DEBUG[dolib:shlib] \%attrs for $lib : ", ,
+ join(",", map { "\n $_ = $attrs{$_}" } sort keys %attrs), "\n"
+ if %attrs && $debug_rules;
+ print STDERR "DEBUG[dolib:shlib] \@deps for $lib : ",
+ join(",", map { "\n $_" } @deps), "\n"
+ if @deps && $debug_rules;
+ print STDERR "DEBUG[dolib:shlib] \@objs for $lib : ",
+ join(",", map { "\n $_" } @objs), "\n"
+ if @objs && $debug_rules;
+ print STDERR "DEBUG[dolib:shlib] \@foreign_objs for $lib : ",
+ join(",", map { "\n $_" } @foreign_objs), "\n"
+ if @foreign_objs && $debug_rules;
+ $self->emit('obj2shlib',
+ lib => $lib,
+ attrs => { %attrs },
+ objs => [ @objs, @foreign_objs ],
+ deps => [ @deps ]);
+ foreach (@objs) {
+ # If this is somehow a compiled object, take care of it that way
+ # Otherwise, it might simply be generated
+ if (defined $self->{info}->{sources}->{$_}) {
+ if($_ =~ /\.a$/) {
+ $self->dolib($_);
+ } else {
+ $self->doobj($_, $lib, intent => "shlib", attrs => { %attrs });
+ }
+ } else {
+ $self->dogenerate($_, undef, undef, intent => "lib");
+ }
+ }
+ }
+ {
+ # When putting static libraries together, we cannot rely on any
+ # symbol resolution, so for all static libraries used as source for
+ # this one, as well as other libraries they depend on, we simply
+ # grab all their object files unconditionally,
+ # Symbol resolution will happen when any program, module or shared
+ # library is linked with this one.
+ my @objs = ();
+ my @sourcedeps = ();
+ my @foreign_objs = ();
+ foreach (@{$self->{info}->{sources}->{$lib}}) {
+ if ($_ !~ m|\.a$|) {
+ push @objs, $_;
+ } else {
+ push @sourcedeps, $_;
+ }
+ }
+ @sourcedeps = ( grep { $_ ne $lib } $self->resolvedepends(@sourcedeps) );
+ print STDERR "DEBUG[dolib:lib] : \@sourcedeps for $_ : ",
+ join(",", map { "\n $_" } @sourcedeps), "\n"
+ if @sourcedeps && $debug_rules;
+ @foreign_objs = $self->getlibobjs('sources', @sourcedeps);
+ print STDERR "DEBUG[dolib:lib] \%attrs for $lib : ", ,
+ join(",", map { "\n $_ = $attrs{$_}" } sort keys %attrs), "\n"
+ if %attrs && $debug_rules;
+ print STDERR "DEBUG[dolib:lib] \@objs for $lib : ",
+ join(",", map { "\n $_" } @objs), "\n"
+ if @objs && $debug_rules;
+ print STDERR "DEBUG[dolib:lib] \@foreign_objs for $lib : ",
+ join(",", map { "\n $_" } @foreign_objs), "\n"
+ if @foreign_objs && $debug_rules;
+ $self->emit('obj2lib',
+ lib => $lib, attrs => { %attrs },
+ objs => [ @objs, @foreign_objs ]);
+ foreach (@objs) {
+ $self->doobj($_, $lib, intent => "lib", attrs => { %attrs });
+ }
+ }
+ $cache{$lib} = 1;
+}
+
+# domodule is responsible for building modules. It will call
+# obj2dso, and also makes sure all object files for the library
+# are built.
+sub domodule {
+ my $self = shift;
+ my $module = shift;
+ return "" if $cache{$module};
+ my %attrs = %{$self->{info}->{attributes}->{modules}->{$module} // {}};
+ my @objs = @{$self->{info}->{sources}->{$module}};
+ my @deps = ( grep { $_ ne $module }
+ $self->resolvedepends($module) );
+ print STDERR "DEBUG[domodule] \%attrs for $module :",
+ join(",", map { "\n $_ = $attrs{$_}" } sort keys %attrs), "\n"
+ if $debug_rules;
+ print STDERR "DEBUG[domodule] \@objs for $module : ",
+ join(",", map { "\n $_" } @objs), "\n"
+ if $debug_rules;
+ print STDERR "DEBUG[domodule] \@deps for $module : ",
+ join(",", map { "\n $_" } @deps), "\n"
+ if $debug_rules;
+ $self->emit('obj2dso',
+ module => $module,
+ attrs => { %attrs },
+ objs => [ @objs ],
+ deps => [ @deps ]);
+ foreach (@{$self->{info}->{sources}->{$module}}) {
+ # If this is somehow a compiled object, take care of it that way
+ # Otherwise, it might simply be generated
+ if (defined $self->{info}->{sources}->{$_}) {
+ $self->doobj($_, $module, intent => "dso", attrs => { %attrs });
+ } else {
+ $self->dogenerate($_, undef, $module, intent => "dso");
+ }
+ }
+ $cache{$module} = 1;
+}
+
+# dobin is responsible for building programs. It will call obj2bin,
+# and also makes sure all object files for the library are built.
+sub dobin {
+ my $self = shift;
+ my $bin = shift;
+ return "" if $cache{$bin};
+ my %attrs = %{$self->{info}->{attributes}->{programs}->{$bin} // {}};
+ my @objs = @{$self->{info}->{sources}->{$bin}};
+ my @deps = ( grep { $_ ne $bin } $self->resolvedepends($bin) );
+ print STDERR "DEBUG[dobin] \%attrs for $bin : ",
+ join(",", map { "\n $_ = $attrs{$_}" } sort keys %attrs), "\n"
+ if %attrs && $debug_rules;
+ print STDERR "DEBUG[dobin] \@objs for $bin : ",
+ join(",", map { "\n $_" } @objs), "\n"
+ if @objs && $debug_rules;
+ print STDERR "DEBUG[dobin] \@deps for $bin : ",
+ join(",", map { "\n $_" } @deps), "\n"
+ if @deps && $debug_rules;
+ $self->emit('obj2bin',
+ bin => $bin,
+ attrs => { %attrs },
+ objs => [ @objs ],
+ deps => [ @deps ]);
+ foreach (@objs) {
+ $self->doobj($_, $bin, intent => "bin", attrs => { %attrs });
+ }
+ $cache{$bin} = 1;
+}
+
+# doscript is responsible for building scripts from templates. It will
+# call in2script.
+sub doscript {
+ my $self = shift;
+ my $script = shift;
+ return "" if $cache{$script};
+ $self->emit('in2script',
+ script => $script,
+ attrs => $self->{info}->{attributes}->{scripts}->{$script} // {},
+ sources => $self->{info}->{sources}->{$script});
+ $cache{$script} = 1;
+}
+
+sub dodir {
+ my $self = shift;
+ my $dir = shift;
+ return "" if !exists(&generatedir) or $cache{$dir};
+ $self->emit('generatedir',
+ dir => $dir,
+ deps => $self->{info}->{dirinfo}->{$dir}->{deps} // [],
+ %{$self->{info}->{dirinfo}->{$_}->{products}});
+ $cache{$dir} = 1;
+}
+
+# dodocs is responsible for building documentation from .pods.
+# It will call generatesrc.
+sub dodocs {
+ my $self = shift;
+ my $type = shift;
+ my $section = shift;
+ foreach my $doc (@{$self->{info}->{"${type}docs"}->{$section}}) {
+ next if $cache{$doc};
+ $self->emit('generatesrc',
+ src => $doc,
+ generator => $self->{info}->{generate}->{$doc});
+ foreach ((@{$self->{info}->{depends}->{$doc} // []})) {
+ $self->dogenerate($_, undef, undef);
+ }
+ $cache{$doc} = 1;
+ }
+}
+
+1;
diff --git a/Configurations/platform.pm b/Configurations/platform.pm
new file mode 100644
index 000000000000..909da0ac7202
--- /dev/null
+++ b/Configurations/platform.pm
@@ -0,0 +1,18 @@
+package platform;
+
+use strict;
+use warnings;
+use vars qw(@ISA);
+
+# Callers must make sure @INC has the build directory
+use configdata;
+
+my $module = $target{perl_platform} || 'Unix';
+(my $module_path = $module) =~ s|::|/|g;
+
+require "platform/$module_path.pm";
+@ISA = ("platform::$module");
+
+1;
+
+__END__
diff --git a/Configurations/platform/AIX.pm b/Configurations/platform/AIX.pm
new file mode 100644
index 000000000000..c6c1437f962a
--- /dev/null
+++ b/Configurations/platform/AIX.pm
@@ -0,0 +1,29 @@
+package platform::AIX;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw(@ISA);
+
+require platform::Unix;
+@ISA = qw(platform::Unix);
+
+# Assume someone set @INC right before loading this module
+use configdata;
+
+sub dsoext { '.so' }
+sub shlibextsimple { '.a' }
+
+# In shared mode, the default static library names clashes with the final
+# "simple" full shared library name, so we add '_a' to the basename of the
+# static libraries in that case.
+sub staticname {
+ # Non-installed libraries are *always* static, and their names remain
+ # the same, except for the mandatory extension
+ my $in_libname = platform::BASE->staticname($_[1]);
+ return $in_libname
+ if $unified_info{attributes}->{libraries}->{$_[1]}->{noinst};
+
+ return platform::BASE->staticname($_[1]) . ($disabled{shared} ? '' : '_a');
+}
diff --git a/Configurations/platform/BASE.pm b/Configurations/platform/BASE.pm
new file mode 100644
index 000000000000..95c2211d830b
--- /dev/null
+++ b/Configurations/platform/BASE.pm
@@ -0,0 +1,99 @@
+package platform::BASE;
+
+use strict;
+use warnings;
+use Carp;
+
+# Assume someone set @INC right before loading this module
+use configdata;
+
+# Globally defined "platform specific" extensions, available for uniformity
+sub depext { '.d' }
+
+# Functions to convert internal file representations to platform specific
+# ones. Note that these all depend on extension functions that MUST be
+# defined per platform.
+#
+# Currently known internal or semi-internal extensions are:
+#
+# .a For libraries that are made static only.
+# Internal libraries only.
+# .o For object files.
+# .s, .S Assembler files. This is an actual extension on Unix
+# .res Resource file. This is an actual extension on Windows
+
+sub binname { return $_[1] } # Name of executable binary
+sub dsoname { return $_[1] } # Name of dynamic shared object (DSO)
+sub sharedname { return __isshared($_[1]) ? $_[1] : undef } # Name of shared lib
+sub staticname { return __base($_[1], '.a') } # Name of static lib
+
+# Convenience function to convert the shlib version to an acceptable part
+# of a file or directory name. By default, we consider it acceptable as is.
+sub shlib_version_as_filename { return $config{shlib_version} }
+
+# Convenience functions to convert the possible extension of an input file name
+sub bin { return $_[0]->binname($_[1]) . $_[0]->binext() }
+sub dso { return $_[0]->dsoname($_[1]) . $_[0]->dsoext() }
+sub sharedlib { return __concat($_[0]->sharedname($_[1]), $_[0]->shlibext()) }
+sub staticlib { return $_[0]->staticname($_[1]) . $_[0]->libext() }
+
+# More convenience functions for intermediary files
+sub def { return __base($_[1], '.ld') . $_[0]->defext() }
+sub obj { return __base($_[1], '.o') . $_[0]->objext() }
+sub res { return __base($_[1], '.res') . $_[0]->resext() }
+sub dep { return __base($_[1], '.o') . $_[0]->depext() } # <- objname
+sub asm { return __base($_[1], '.s') . $_[0]->asmext() }
+
+# Another set of convenience functions for standard checks of certain
+# internal extensions and conversion from internal to platform specific
+# extension. Note that the latter doesn't deal with libraries because
+# of ambivalence
+sub isdef { return $_[1] =~ m|\.ld$|; }
+sub isobj { return $_[1] =~ m|\.o$|; }
+sub isres { return $_[1] =~ m|\.res$|; }
+sub isasm { return $_[1] =~ m|\.s$|; }
+sub iscppasm { return $_[1] =~ m|\.S$|; }
+sub isstaticlib { return $_[1] =~ m|\.a$|; }
+sub convertext {
+ if ($_[0]->isdef($_[1])) { return $_[0]->def($_[1]); }
+ if ($_[0]->isobj($_[1])) { return $_[0]->obj($_[1]); }
+ if ($_[0]->isres($_[1])) { return $_[0]->res($_[1]); }
+ if ($_[0]->isasm($_[1])) { return $_[0]->asm($_[1]); }
+ if ($_[0]->isstaticlib($_[1])) { return $_[0]->staticlib($_[1]); }
+ return $_[1];
+}
+
+# Helpers ############################################################
+
+# __base EXPR, LIST
+# This returns the given path (EXPR) with the matching suffix from LIST stripped
+sub __base {
+ my $path = shift;
+ foreach (@_) {
+ if ($path =~ m|\Q${_}\E$|) {
+ return $`;
+ }
+ }
+ return $path;
+}
+
+# __isshared EXPR
+# EXPR is supposed to be a library name. This will return true if that library
+# can be assumed to be a shared library, otherwise false
+sub __isshared {
+ return !($disabled{shared} || $_[0] =~ /\.a$/);
+}
+
+# __concat LIST
+# Returns the concatenation of all elements of LIST if none of them is
+# undefined. If one of them is undefined, returns undef instead.
+sub __concat {
+ my $result = '';
+ foreach (@_) {
+ return undef unless defined $_;
+ $result .= $_;
+ }
+ return $result;
+}
+
+1;
diff --git a/Configurations/platform/Cygwin.pm b/Configurations/platform/Cygwin.pm
new file mode 100644
index 000000000000..bc62e9db404c
--- /dev/null
+++ b/Configurations/platform/Cygwin.pm
@@ -0,0 +1,22 @@
+package platform::Cygwin;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw(@ISA);
+
+require platform::mingw;
+@ISA = qw(platform::mingw);
+
+# Assume someone set @INC right before loading this module
+use configdata;
+
+sub sharedname {
+ my $class = shift;
+ my $lib = platform::mingw->sharedname(@_);
+ $lib =~ s|^lib|cyg| if defined $lib;
+ return $lib;
+}
+
+1;
diff --git a/Configurations/platform/Unix.pm b/Configurations/platform/Unix.pm
new file mode 100644
index 000000000000..8db0ed912e3a
--- /dev/null
+++ b/Configurations/platform/Unix.pm
@@ -0,0 +1,87 @@
+package platform::Unix;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw(@ISA);
+
+require platform::BASE;
+@ISA = qw(platform::BASE);
+
+# Assume someone set @INC right before loading this module
+use configdata;
+
+sub binext { $target{exe_extension} || '' }
+sub dsoext { $target{dso_extension} || platform->shlibextsimple()
+ || '.so' }
+# Because these are also used in scripts and not just Makefile, we must
+# convert $(SHLIB_VERSION_NUMBER) to the actual number.
+sub shlibext { (my $x = $target{shared_extension}
+ || '.so.$(SHLIB_VERSION_NUMBER)')
+ =~ s|\.\$\(SHLIB_VERSION_NUMBER\)
+ |.$config{shlib_version}|x;
+ $x; }
+sub libext { $target{lib_extension} || '.a' }
+sub defext { $target{def_extension} || '.ld' }
+sub objext { $target{obj_extension} || '.o' }
+sub depext { $target{obj_extension} || '.d' }
+
+# Other extra that aren't defined in platform::BASE
+sub shlibextsimple { (my $x = $target{shared_extension} || '.so')
+ =~ s|\.\$\(SHLIB_VERSION_NUMBER\)||;
+ $x; }
+sub shlibvariant { $target{shlib_variant} || "" }
+sub makedepcmd { $disabled{makedepend} ? undef : $config{makedepcmd} }
+
+# No conversion of assembler extension on Unix
+sub asm {
+ return $_[1];
+}
+
+# At some point, we might decide that static libraries are called something
+# other than the default...
+sub staticname {
+ # Non-installed libraries are *always* static, and their names remain
+ # the same, except for the mandatory extension
+ my $in_libname = platform::BASE->staticname($_[1]);
+ return $in_libname
+ if $unified_info{attributes}->{libraries}->{$_[1]}->{noinst};
+
+ # We currently return the same name anyway... but we might choose to
+ # append '_static' or '_a' some time in the future.
+ return platform::BASE->staticname($_[1]);
+}
+
+sub sharedname {
+ return platform::BASE::__concat(platform::BASE->sharedname($_[1]),
+ ($_[0]->shlibvariant() // ''));
+}
+
+sub sharedname_simple {
+ return platform::BASE::__isshared($_[1]) ? $_[1] : undef;
+}
+
+sub sharedlib_simple {
+ # This function returns the simplified shared library name (no version
+ # or variant in the shared library file name) if the simple variants of
+ # the base name or the suffix differ from the full variants of the same.
+
+ # Note: if $_[1] isn't a shared library name, then $_[0]->sharedname()
+ # and $_[0]->sharedname_simple() will return undef. This needs being
+ # accounted for.
+ my $name = $_[0]->sharedname($_[1]);
+ my $simplename = $_[0]->sharedname_simple($_[1]);
+ my $ext = $_[0]->shlibext();
+ my $simpleext = $_[0]->shlibextsimple();
+
+ return undef unless defined $simplename && defined $name;
+ return undef if ($name eq $simplename && $ext eq $simpleext);
+ return platform::BASE::__concat($simplename, $simpleext);
+}
+
+sub sharedlib_import {
+ return undef;
+}
+
+1;
diff --git a/Configurations/platform/VMS.pm b/Configurations/platform/VMS.pm
new file mode 100644
index 000000000000..7d7835afeabc
--- /dev/null
+++ b/Configurations/platform/VMS.pm
@@ -0,0 +1,65 @@
+package platform::VMS;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw(@ISA);
+
+require platform::BASE;
+@ISA = qw(platform::BASE);
+
+# Assume someone set @INC right before loading this module
+use configdata;
+
+# VMS has a cultural standard where all installed libraries are prefixed.
+# For OpenSSL, the choice is 'ossl$' (this prefix was claimed in a
+# conversation with VSI, Tuesday January 26 2016)
+sub osslprefix { 'OSSL$' }
+
+sub binext { '.EXE' }
+sub dsoext { '.EXE' }
+sub shlibext { '.EXE' }
+sub libext { '.OLB' }
+sub defext { '.OPT' }
+sub objext { '.OBJ' }
+sub depext { '.D' }
+sub asmext { '.ASM' }
+
+# Other extra that aren't defined in platform::BASE
+sub shlibvariant { $target{shlib_variant} || '' }
+
+sub optext { '.OPT' }
+sub optname { return $_[1] }
+sub opt { return $_[0]->optname($_[1]) . $_[0]->optext() }
+
+# Other projects include the pointer size in the name of installed libraries,
+# so we do too.
+sub staticname {
+ # Non-installed libraries are *always* static, and their names remain
+ # the same, except for the mandatory extension
+ my $in_libname = platform::BASE->staticname($_[1]);
+ return $in_libname
+ if $unified_info{attributes}->{libraries}->{$_[1]}->{noinst};
+
+ return platform::BASE::__concat($_[0]->osslprefix(),
+ platform::BASE->staticname($_[1]),
+ $target{pointer_size});
+}
+
+# To enable installation of multiple major OpenSSL releases, we include the
+# version number in installed shared library names.
+my $sover_filename =
+ join('', map { sprintf "%02d", $_ } split(m|\.|, $config{shlib_version}));
+sub shlib_version_as_filename {
+ return $sover_filename;
+}
+sub sharedname {
+ return platform::BASE::__concat($_[0]->osslprefix(),
+ platform::BASE->sharedname($_[1]),
+ $_[0]->shlib_version_as_filename(),
+ ($_[0]->shlibvariant() // ''),
+ "_shr$target{pointer_size}");
+}
+
+1;
diff --git a/Configurations/platform/Windows.pm b/Configurations/platform/Windows.pm
new file mode 100644
index 000000000000..4ecd6d513d1a
--- /dev/null
+++ b/Configurations/platform/Windows.pm
@@ -0,0 +1,64 @@
+package platform::Windows;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw(@ISA);
+
+require platform::BASE;
+@ISA = qw(platform::BASE);
+
+# Assume someone set @INC right before loading this module
+use configdata;
+
+sub binext { '.exe' }
+sub dsoext { '.dll' }
+sub shlibext { '.dll' }
+sub libext { '.lib' }
+sub defext { '.def' }
+sub objext { '.obj' }
+sub depext { '.d' }
+sub asmext { '.asm' }
+
+# Other extra that aren't defined in platform::BASE
+sub resext { '.res' }
+sub shlibextimport { '.lib' }
+sub shlibvariant { $target{shlib_variant} || '' }
+
+sub staticname {
+ # Non-installed libraries are *always* static, and their names remain
+ # the same, except for the mandatory extension
+ my $in_libname = platform::BASE->staticname($_[1]);
+ return $in_libname
+ if $unified_info{attributes}->{libraries}->{$_[1]}->{noinst};
+
+ # To make sure not to clash with an import library, we make the static
+ # variant of our installed libraries get '_static' added to their names.
+ return platform::BASE->staticname($_[1])
+ . ($disabled{shared} ? '' : '_static');
+}
+
+# To mark forward compatibility, we include the OpenSSL major release version
+# number in the installed shared library names.
+(my $sover_filename = $config{shlib_version}) =~ s|\.|_|g;
+sub shlib_version_as_filename {
+ return $sover_filename
+}
+sub sharedname {
+ return platform::BASE::__concat(platform::BASE->sharedname($_[1]),
+ "-",
+ $_[0]->shlib_version_as_filename(),
+ ($_[0]->shlibvariant() // ''));
+}
+
+sub sharedname_import {
+ return platform::BASE::__isshared($_[1]) ? $_[1] : undef;
+}
+
+sub sharedlib_import {
+ return platform::BASE::__concat($_[0]->sharedname_import($_[1]),
+ $_[0]->shlibextimport());
+}
+
+1;
diff --git a/Configurations/platform/Windows/MSVC.pm b/Configurations/platform/Windows/MSVC.pm
new file mode 100644
index 000000000000..80188f354e92
--- /dev/null
+++ b/Configurations/platform/Windows/MSVC.pm
@@ -0,0 +1,44 @@
+package platform::Windows::MSVC;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw(@ISA);
+
+require platform::Windows;
+@ISA = qw(platform::Windows);
+
+# Assume someone set @INC right before loading this module
+use configdata;
+
+sub pdbext { '.pdb' }
+
+# It's possible that this variant of |sharedname| should be in Windows.pm.
+# However, this variant was VC only in 1.1.1, so we maintain that here until
+# further notice.
+sub sharedname {
+ return platform::BASE::__concat(platform::BASE->sharedname($_[1]),
+ "-",
+ $_[0]->shlib_version_as_filename(),
+ ($target{multilib} // '' ),
+ ($_[0]->shlibvariant() // ''));
+}
+
+sub staticlibpdb {
+ return platform::BASE::__concat($_[0]->staticname($_[1]), $_[0]->pdbext());
+}
+
+sub sharedlibpdb {
+ return platform::BASE::__concat($_[0]->sharedname($_[1]), $_[0]->pdbext());
+}
+
+sub dsopdb {
+ return platform::BASE::__concat($_[0]->dsoname($_[1]), $_[0]->pdbext());
+}
+
+sub binpdb {
+ return platform::BASE::__concat($_[0]->binname($_[1]), $_[0]->pdbext());
+}
+
+1;
diff --git a/Configurations/platform/Windows/cppbuilder.pm b/Configurations/platform/Windows/cppbuilder.pm
new file mode 100644
index 000000000000..b4d208d6d456
--- /dev/null
+++ b/Configurations/platform/Windows/cppbuilder.pm
@@ -0,0 +1,16 @@
+package platform::Windows::cppbuilder;
+
+use vars qw(@ISA);
+
+require platform::Windows::MSVC;
+@ISA = qw(platform::Windows::MSVC);
+
+sub pdbext { '.tds' }
+
+# C++Builder's Clang-based compilers prepend an underscore to __cdecl-convention
+# C functions, and the linker needs those as the InternalName in the .def file.
+sub export2internal {
+ return "_$_[1]";
+}
+
+1;
diff --git a/Configurations/platform/mingw.pm b/Configurations/platform/mingw.pm
new file mode 100644
index 000000000000..c4dbce80410a
--- /dev/null
+++ b/Configurations/platform/mingw.pm
@@ -0,0 +1,51 @@
+package platform::mingw;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw(@ISA);
+
+require platform::Unix;
+@ISA = qw(platform::Unix);
+
+# Assume someone set @INC right before loading this module
+use configdata;
+
+sub binext { '.exe' }
+sub objext { '.obj' }
+sub libext { '.a' }
+sub dsoext { '.dll' }
+sub defext { '.def' }
+
+# Other extra that aren't defined in platform::BASE
+sub resext { '.res.obj' }
+sub shlibext { '.dll' }
+sub shlibextimport { $target{shared_import_extension} || '.dll.a' }
+sub shlibextsimple { undef }
+sub makedepcmd { $disabled{makedepend} ? undef : $config{makedepcmd} }
+
+(my $sover_filename = $config{shlib_version}) =~ s|\.|_|g;
+sub shlib_version_as_filename {
+ return $sover_filename;
+}
+sub sharedname {
+ return platform::BASE::__concat(platform::BASE->sharedname($_[1]),
+ "-",
+ $_[0]->shlib_version_as_filename(),
+ ($config{target} eq "mingw64"
+ ? "-x64" : ""));
+}
+
+# With Mingw and other DLL producers, there isn't any "simpler" shared
+# library name. However, there is a static import library.
+sub sharedlib_simple {
+ return undef;
+}
+
+sub sharedlib_import {
+ return platform::BASE::__concat(platform::BASE->sharedname($_[1]),
+ $_[0]->shlibextimport());
+}
+
+1;
diff --git a/Configurations/shared-info.pl b/Configurations/shared-info.pl
new file mode 100644
index 000000000000..edd16f405594
--- /dev/null
+++ b/Configurations/shared-info.pl
@@ -0,0 +1,94 @@
+#! /usr/bin/env perl
+# -*- mode: perl; -*-
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+# This is a collection of extra attributes to be used as input for creating
+# shared libraries, currently on any Unix variant, including Unix like
+# environments on Windows.
+
+sub detect_gnu_ld {
+ my @lines =
+ `$config{CROSS_COMPILE}$config{CC} -Wl,-V /dev/null 2>&1`;
+ return grep /^GNU ld/, @lines;
+}
+sub detect_gnu_cc {
+ my @lines =
+ `$config{CROSS_COMPILE}$config{CC} -v 2>&1`;
+ return grep /gcc/, @lines;
+}
+
+my %shared_info;
+%shared_info = (
+ 'gnu-shared' => {
+ shared_ldflag => '-shared -Wl,-Bsymbolic',
+ shared_sonameflag => '-Wl,-soname=',
+ },
+ 'linux-shared' => sub {
+ return {
+ %{$shared_info{'gnu-shared'}},
+ shared_defflag => '-Wl,--version-script=',
+ dso_ldflags =>
+ (grep /(?:^|\s)-fsanitize/,
+ @{$config{CFLAGS}}, @{$config{cflags}})
+ ? ''
+ : '-Wl,-z,defs',
+ };
+ },
+ 'bsd-gcc-shared' => sub { return $shared_info{'linux-shared'}; },
+ 'darwin-shared' => {
+ module_ldflags => '-bundle',
+ shared_ldflag => '-dynamiclib -current_version $(SHLIB_VERSION_NUMBER) -compatibility_version $(SHLIB_VERSION_NUMBER)',
+ shared_sonameflag => '-install_name $(libdir)/',
+ },
+ 'cygwin-shared' => {
+ shared_ldflag => '-shared -Wl,--enable-auto-image-base',
+ shared_impflag => '-Wl,--out-implib=',
+ },
+ 'mingw-shared' => sub {
+ return {
+ %{$shared_info{'cygwin-shared'}},
+ # def_flag made to empty string so it still generates
+ # something
+ shared_defflag => '',
+ shared_argfileflag => '@',
+ };
+ },
+ 'alpha-osf1-shared' => sub {
+ return $shared_info{'gnu-shared'} if detect_gnu_ld();
+ return {
+ module_ldflags => '-shared -Wl,-Bsymbolic',
+ shared_ldflag => '-shared -Wl,-Bsymbolic -set_version $(SHLIB_VERSION_NUMBER)',
+ };
+ },
+ 'svr3-shared' => sub {
+ return $shared_info{'gnu-shared'} if detect_gnu_ld();
+ return {
+ shared_ldflag => '-G',
+ shared_sonameflag => '-h ',
+ };
+ },
+ 'svr5-shared' => sub {
+ return $shared_info{'gnu-shared'} if detect_gnu_ld();
+ return {
+ shared_ldflag => detect_gnu_cc() ? '-shared' : '-G',
+ shared_sonameflag => '-h ',
+ };
+ },
+ 'solaris-gcc-shared' => sub {
+ return $shared_info{'linux-shared'} if detect_gnu_ld();
+ return {
+ # Note: we should also have -shared here, but because some
+ # config targets define it with an added -static-libgcc
+ # following it, we don't want to change the order. This
+ # forces all solaris gcc config targets to define shared_ldflag
+ shared_ldflag => '-Wl,-Bsymbolic',
+ shared_defflag => "-Wl,-M,",
+ shared_sonameflag => "-Wl,-h,",
+ };
+ },
+);
diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl
new file mode 100644
index 000000000000..3754595d38b5
--- /dev/null
+++ b/Configurations/unix-Makefile.tmpl
@@ -0,0 +1,1996 @@
+##
+## Makefile for OpenSSL
+##
+## {- join("\n## ", @autowarntext) -}
+{-
+ use OpenSSL::Util;
+
+ our $makedep_scheme = $config{makedep_scheme};
+ our $makedepcmd = platform->makedepcmd();
+
+ sub windowsdll { $config{target} =~ /^(?:Cygwin|mingw)/ }
+
+ # Shared AIX support is special. We put libcrypto[64].so.ver into
+ # libcrypto.a and use libcrypto_a.a as static one.
+ sub sharedaix { !$disabled{shared} && $config{target} =~ /^aix/ }
+
+ our $sover_dirname = platform->shlib_version_as_filename();
+
+ # This makes sure things get built in the order they need
+ # to. You're welcome.
+ sub dependmagic {
+ my $target = shift;
+
+ return "$target: build_generated\n\t\$(MAKE) depend && \$(MAKE) _$target\n_$target";
+ }
+
+ our $COLUMNS = $ENV{COLUMNS};
+ if ($COLUMNS =~ /^\d+$/) {
+ $COLUMNS = int($COLUMNS) - 2; # 2 to leave space for ending ' \'
+ } else {
+ $COLUMNS = 76;
+ }
+
+ sub fill_lines {
+ my $item_sep = shift; # string
+ my $line_length = shift; # number of chars
+
+ my @result = ();
+ my $resultpos = 0;
+
+ foreach (@_) {
+ my $fill_line = $result[$resultpos] // '';
+ my $newline =
+ ($fill_line eq '' ? '' : $fill_line . $item_sep) . $_;
+
+ if (length($newline) > $line_length) {
+ # If this is a single item and the intended result line
+ # is empty, we put it there anyway
+ if ($fill_line eq '') {
+ $result[$resultpos++] = $newline;
+ } else {
+ $result[++$resultpos] = $_;
+ }
+ } else {
+ $result[$resultpos] = $newline;
+ }
+ }
+ return @result;
+ }
+ '';
+-}
+PLATFORM={- $config{target} -}
+OPTIONS={- $config{options} -}
+CONFIGURE_ARGS=({- join(", ",quotify_l(@{$config{perlargv}})) -})
+SRCDIR={- $config{sourcedir} -}
+BLDDIR={- $config{builddir} -}
+FIPSKEY={- $config{FIPSKEY} -}
+
+VERSION={- "$config{full_version}" -}
+VERSION_NUMBER={- "$config{version}" -}
+MAJOR={- $config{major} -}
+MINOR={- $config{minor} -}
+SHLIB_VERSION_NUMBER={- $config{shlib_version} -}
+SHLIB_TARGET={- $target{shared_target} -}
+
+LIBS={- join(" \\\n" . ' ' x 5,
+ fill_lines(" ", $COLUMNS - 5,
+ map { platform->staticlib($_) // () }
+ @{$unified_info{libraries}})) -}
+SHLIBS={- join(" \\\n" . ' ' x 7,
+ fill_lines(" ", $COLUMNS - 7,
+ map { platform->sharedlib($_) // () }
+ @{$unified_info{libraries}})) -}
+SHLIB_INFO={- join(" \\\n" . ' ' x 11,
+ fill_lines(" ", $COLUMNS - 11,
+ map { my $x = platform->sharedlib($_);
+ my $y = platform->sharedlib_simple($_) // '';
+ my $z = platform->sharedlib_import($_) // '';
+ $x ? "\"$x;$y;$z\"" : () }
+ @{$unified_info{libraries}})) -}
+MODULES={- join(" \\\n" . ' ' x 8,
+ fill_lines(" ", $COLUMNS - 8,
+ map { platform->dso($_) }
+ # Drop all modules that are dependencies, they will
+ # be processed through their dependents
+ grep { my $x = $_;
+ !grep { grep { $_ eq $x } @$_ }
+ values %{$unified_info{depends}} }
+ @{$unified_info{modules}})) -}
+FIPSMODULE={- # We do some extra checking here, as there should be only one
+ use File::Basename;
+ our @fipsmodules =
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}};
+ die "More that one FIPS module" if scalar @fipsmodules > 1;
+ join(" ", map { platform->dso($_) } @fipsmodules) -}
+FIPSMODULENAME={- die "More that one FIPS module" if scalar @fipsmodules > 1;
+ join(" ", map { basename(platform->dso($_)) } @fipsmodules) -}
+
+PROGRAMS={- join(" \\\n" . ' ' x 9,
+ fill_lines(" ", $COLUMNS - 9,
+ map { platform->bin($_) }
+ @{$unified_info{programs}})) -}
+SCRIPTS={- join(" \\\n" . ' ' x 8,
+ fill_lines(" ", $COLUMNS - 8, @{$unified_info{scripts}})) -}
+{- output_off() if $disabled{makedepend}; "" -}
+DEPS={- join(" \\\n" . ' ' x 5,
+ fill_lines(" ", $COLUMNS - 5,
+ map { platform->isobj($_) ? platform->dep($_) : () }
+ grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
+ keys %{$unified_info{sources}})); -}
+{- output_on() if $disabled{makedepend}; "" -}
+GENERATED_MANDATORY={- join(" \\\n" . ' ' x 20,
+ fill_lines(" ", $COLUMNS - 20,
+ @{$unified_info{depends}->{""}})) -}
+GENERATED_PODS={- # common0.tmpl provides @generated
+ join(" \\\n" . ' ' x 15,
+ fill_lines(" ", $COLUMNS - 15,
+ map { my $x = $_;
+ (
+ grep {
+ $unified_info{attributes}->{depends}
+ ->{$x}->{$_}->{pod} // 0
+ }
+ keys %{$unified_info{attributes}->{depends}->{$x}}
+ ) ? $x : ();
+ }
+ @generated)) -}
+GENERATED={- # common0.tmpl provides @generated
+ join(" \\\n" . ' ' x 5,
+ fill_lines(" ", $COLUMNS - 5,
+ map { platform->convertext($_) } @generated )) -}
+
+INSTALL_LIBS={-
+ join(" \\\n" . ' ' x 13,
+ fill_lines(" ", $COLUMNS - 13,
+ map { platform->staticlib($_) // () }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}}))
+-}
+INSTALL_SHLIBS={-
+ join(" \\\n" . ' ' x 15,
+ fill_lines(" ", $COLUMNS - 15,
+ map { platform->sharedlib($_) // () }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}}))
+-}
+INSTALL_SHLIB_INFO={-
+ join(" \\\n" . ' ' x 19,
+ fill_lines(" ", $COLUMNS - 19,
+ map { my $x = platform->sharedlib($_);
+ my $y = platform->sharedlib_simple($_) // '';
+ my $z = platform->sharedlib_import($_) // '';
+ $x ? "\"$x;$y;$z\"" : () }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}}))
+-}
+INSTALL_ENGINES={-
+ join(" \\\n" . ' ' x 16,
+ fill_lines(" ", $COLUMNS - 16,
+ map { platform->dso($_) }
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{engine} }
+ @{$unified_info{modules}}))
+-}
+INSTALL_MODULES={-
+ join(" \\\n" . ' ' x 16,
+ fill_lines(" ", $COLUMNS - 16,
+ map { platform->dso($_) }
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && !$unified_info{attributes}->{modules}->{$_}->{engine}
+ && !$unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}}))
+-}
+INSTALL_FIPSMODULE={-
+ join(" \\\n" . ' ' x 16,
+ fill_lines(" ", $COLUMNS - 16,
+ map { platform->dso($_) }
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}}))
+-}
+INSTALL_FIPSMODULECONF=providers/fipsmodule.cnf
+INSTALL_PROGRAMS={-
+ join(" \\\n" . ' ' x 16,
+ fill_lines(" ", $COLUMNS - 16, map { platform->bin($_) }
+ grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
+ @{$unified_info{programs}}))
+-}
+BIN_SCRIPTS={-
+ join(" \\\n" . ' ' x 12,
+ fill_lines(" ", $COLUMNS - 12,
+ map { my $x = $unified_info{attributes}->{scripts}->{$_}->{linkname};
+ $x ? "$_:$x" : $_ }
+ grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
+ && !$unified_info{attributes}->{scripts}->{$_}->{misc} }
+ @{$unified_info{scripts}}))
+-}
+MISC_SCRIPTS={-
+ join(" \\\n" . ' ' x 13,
+ fill_lines(" ", $COLUMNS - 13,
+ map { my $x = $unified_info{attributes}->{scripts}->{$_}->{linkname};
+ $x ? "$_:$x" : $_ }
+ grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
+ && $unified_info{attributes}->{scripts}->{$_}->{misc} }
+ @{$unified_info{scripts}}))
+-}
+IMAGEDOCS1={-
+ join(" \\\n" . ' ' x 10,
+ fill_lines(" ", $COLUMNS - 10,
+ @{$unified_info{imagedocs}->{man1}})) -}
+IMAGEDOCS3={-
+ join(" \\\n" . ' ' x 10,
+ fill_lines(" ", $COLUMNS - 10,
+ @{$unified_info{imagedocs}->{man3}})) -}
+IMAGEDOCS5={-
+ join(" \\\n" . ' ' x 10,
+ fill_lines(" ", $COLUMNS - 10,
+ @{$unified_info{imagedocs}->{man5}})) -}
+IMAGEDOCS7={-
+ join(" \\\n" . ' ' x 10,
+ fill_lines(" ", $COLUMNS - 10,
+ @{$unified_info{imagedocs}->{man7}})) -}
+HTMLDOCS1={-
+ join(" \\\n" . ' ' x 10,
+ fill_lines(" ", $COLUMNS - 10,
+ @{$unified_info{htmldocs}->{man1}})) -}
+HTMLDOCS3={-
+ join(" \\\n" . ' ' x 10,
+ fill_lines(" ", $COLUMNS - 10,
+ @{$unified_info{htmldocs}->{man3}})) -}
+HTMLDOCS5={-
+ join(" \\\n" . ' ' x 10,
+ fill_lines(" ", $COLUMNS - 10,
+ @{$unified_info{htmldocs}->{man5}})) -}
+HTMLDOCS7={-
+ join(" \\\n" . ' ' x 10,
+ fill_lines(" ", $COLUMNS - 10,
+ @{$unified_info{htmldocs}->{man7}})) -}
+MANDOCS1={-
+ join(" \\\n" . ' ' x 9,
+ fill_lines(" ", $COLUMNS - 9,
+ @{$unified_info{mandocs}->{man1}})) -}
+MANDOCS3={-
+ join(" \\\n" . ' ' x 9,
+ fill_lines(" ", $COLUMNS - 9,
+ @{$unified_info{mandocs}->{man3}})) -}
+MANDOCS5={-
+ join(" \\\n" . ' ' x 9,
+ fill_lines(" ", $COLUMNS - 9,
+ @{$unified_info{mandocs}->{man5}})) -}
+MANDOCS7={-
+ join(" \\\n" . ' ' x 9,
+ fill_lines(" ", $COLUMNS - 9,
+ @{$unified_info{mandocs}->{man7}})) -}
+
+APPS_OPENSSL="{- use File::Spec::Functions;
+ catfile("apps","openssl") -}"
+
+# DESTDIR is for package builders so that they can configure for, say,
+# /usr/ and yet have everything installed to /tmp/somedir/usr/.
+# Normally it is left empty.
+DESTDIR=
+
+# Do not edit these manually. Use Configure with --prefix or --openssldir
+# to change this! Short explanation in the top comment in Configure
+INSTALLTOP={- # $prefix is used in the OPENSSLDIR perl snippet
+ #
+ our $prefix = $config{prefix} || "/usr/local";
+ $prefix -}
+OPENSSLDIR={- #
+ # The logic here is that if no --openssldir was given,
+ # OPENSSLDIR will get the value from $prefix plus "/ssl".
+ # If --openssldir was given and the value is an absolute
+ # path, OPENSSLDIR will get its value without change.
+ # If the value from --openssldir is a relative path,
+ # OPENSSLDIR will get $prefix with the --openssldir
+ # value appended as a subdirectory.
+ #
+ use File::Spec::Functions;
+ our $openssldir =
+ $config{openssldir} ?
+ (file_name_is_absolute($config{openssldir}) ?
+ $config{openssldir}
+ : catdir($prefix, $config{openssldir}))
+ : catdir($prefix, "ssl");
+ $openssldir -}
+LIBDIR={- our $libdir = $config{libdir};
+ unless ($libdir) {
+ $libdir = "lib$target{multilib}";
+ }
+ file_name_is_absolute($libdir) ? "" : $libdir -}
+# $(libdir) is chosen to be compatible with the GNU coding standards
+libdir={- file_name_is_absolute($libdir)
+ ? $libdir : '$(INSTALLTOP)/$(LIBDIR)' -}
+ENGINESDIR=$(libdir)/engines-{- $sover_dirname -}
+MODULESDIR=$(libdir)/ossl-modules
+
+# Convenience variable for those who want to set the rpath in shared
+# libraries and applications
+LIBRPATH=$(libdir)
+
+MANDIR=$(INSTALLTOP)/share/man
+DOCDIR=$(INSTALLTOP)/share/doc/$(BASENAME)
+HTMLDIR=$(DOCDIR)/html
+
+# MANSUFFIX is for the benefit of anyone who may want to have a suffix
+# appended after the manpage file section number. "ssl" is popular,
+# resulting in files such as config.5ssl rather than config.5.
+MANSUFFIX=ossl
+HTMLSUFFIX=html
+
+# For "optional" echo messages, to get "real" silence
+ECHO = echo
+
+##### User defined commands and flags ################################
+
+# We let the C compiler driver to take care of .s files. This is done in
+# order to be excused from maintaining a separate set of architecture
+# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
+# gcc, then the driver will automatically translate it to -xarch=v8plus
+# and pass it down to assembler. In any case, we do not define AS or
+# ASFLAGS for this reason.
+
+CROSS_COMPILE={- $config{CROSS_COMPILE} -}
+CC=$(CROSS_COMPILE){- $config{CC} -}
+CXX={- $config{CXX} ? "\$(CROSS_COMPILE)$config{CXX}" : '' -}
+CPPFLAGS={- our $cppflags1 = join(" ",
+ (map { "-D".$_} @{$config{CPPDEFINES}}),
+ (map { "-I".$_} @{$config{CPPINCLUDES}}),
+ @{$config{CPPFLAGS}}) -}
+CFLAGS={- join(' ', @{$config{CFLAGS}}) -}
+CXXFLAGS={- join(' ', @{$config{CXXFLAGS}}) -}
+LDFLAGS= {- join(' ', @{$config{LDFLAGS}}) -}
+EX_LIBS= {- join(' ', @{$config{LDLIBS}}) -}
+
+MAKEDEPEND={- $config{makedepcmd} -}
+
+PERL={- $config{PERL} -}
+
+AR=$(CROSS_COMPILE){- $config{AR} -}
+ARFLAGS= {- join(' ', @{$config{ARFLAGS}}) -}
+RANLIB={- $config{RANLIB} ? "\$(CROSS_COMPILE)$config{RANLIB}" : "true"; -}
+RC= $(CROSS_COMPILE){- $config{RC} -}
+RCFLAGS={- join(' ', @{$config{RCFLAGS}}) -} {- $target{shared_rcflag} -}
+
+RM= rm -f
+RMDIR= rmdir
+TAR= {- $target{TAR} || "tar" -}
+TARFLAGS= {- $target{TARFLAGS} -}
+
+BASENAME= openssl
+NAME= $(BASENAME)-$(VERSION)
+# Relative to $(SRCDIR)
+TARFILE= ../$(NAME).tar
+
+##### Project flags ##################################################
+
+# Variables starting with CNF_ are common variables for all product types
+
+CNF_CPPFLAGS={- our $cppflags2 =
+ join(' ', $target{cppflags} || (),
+ (map { "-D".$_} @{$target{defines}},
+ @{$config{defines}}),
+ (map { "-I".$_} @{$target{includes}},
+ @{$config{includes}}),
+ @{$config{cppflags}}) -}
+CNF_CFLAGS={- join(' ', $target{cflags} || (),
+ @{$config{cflags}}) -}
+CNF_CXXFLAGS={- join(' ', $target{cxxflags} || (),
+ @{$config{cxxflags}}) -}
+CNF_LDFLAGS={- join(' ', $target{lflags} || (),
+ @{$config{lflags}}) -}
+CNF_EX_LIBS={- join(' ', $target{ex_libs} || (),
+ @{$config{ex_libs}}) -}
+
+# Variables starting with LIB_ are used to build library object files
+# and shared libraries.
+# Variables starting with DSO_ are used to build DSOs and their object files.
+# Variables starting with BIN_ are used to build programs and their object
+# files.
+
+LIB_CPPFLAGS={- our $lib_cppflags =
+ join(' ', $target{lib_cppflags} || (),
+ $target{shared_cppflag} || (),
+ (map { '-D'.$_ }
+ @{$target{lib_defines} || ()},
+ @{$target{shared_defines} || ()},
+ @{$config{lib_defines} || ()},
+ @{$config{shared_defines} || ()}),
+ (map { '-I'.quotify1($_) }
+ @{$target{lib_includes}},
+ @{$target{shared_includes}},
+ @{$config{lib_includes}},
+ @{$config{shared_includes}}),
+ @{$config{lib_cppflags}},
+ @{$config{shared_cppflag}});
+ join(' ', $lib_cppflags,
+ (map { '-D'.$_ }
+ 'OPENSSLDIR="\"$(OPENSSLDIR)\""',
+ 'ENGINESDIR="\"$(ENGINESDIR)\""',
+ 'MODULESDIR="\"$(MODULESDIR)\""'),
+ '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
+LIB_CFLAGS={- join(' ', $target{lib_cflags} || (),
+ $target{shared_cflag} || (),
+ @{$config{lib_cflags}},
+ @{$config{shared_cflag}},
+ '$(CNF_CFLAGS)', '$(CFLAGS)') -}
+LIB_CXXFLAGS={- join(' ', $target{lib_cxxflags} || (),
+ $target{shared_cxxflag} || (),
+ @{$config{lib_cxxflags}},
+ @{$config{shared_cxxflag}},
+ '$(CNF_CXXFLAGS)', '$(CXXFLAGS)') -}
+LIB_LDFLAGS={- join(' ', $target{shared_ldflag} || (),
+ $config{shared_ldflag} || (),
+ '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
+LIB_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
+DSO_CPPFLAGS={- join(' ', $target{dso_cppflags} || (),
+ $target{module_cppflags} || (),
+ (map { '-D'.$_ }
+ @{$target{dso_defines}},
+ @{$target{module_defines}},
+ @{$config{dso_defines} || ()},
+ @{$config{module_defines} || ()}),
+ (map { '-I'.quotify1($_) }
+ @{$target{dso_includes}},
+ @{$target{module_includes}},
+ @{$config{dso_includes}},
+ @{$config{module_includes}}),
+ @{$config{dso_cppflags}},
+ @{$config{module_cppflags}},
+ '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
+DSO_CFLAGS={- join(' ', $target{dso_cflags} || (),
+ $target{module_cflags} || (),
+ @{$config{dso_cflags}},
+ @{$config{module_cflags}},
+ '$(CNF_CFLAGS)', '$(CFLAGS)') -}
+DSO_CXXFLAGS={- join(' ', $target{dso_cxxflags} || (),
+ $target{module_cxxflags} || (),
+ @{$config{dso_cxxflags}},
+ @{$config{module_cxxflag}},
+ '$(CNF_CXXFLAGS)', '$(CXXFLAGS)') -}
+DSO_LDFLAGS={- join(' ', $target{dso_ldflags} || (),
+ $target{module_ldflags} || (),
+ @{$config{dso_ldflags}},
+ @{$config{module_ldflags}},
+ '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
+DSO_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
+BIN_CPPFLAGS={- join(' ', $target{bin_cppflags} || (),
+ (map { '-D'.$_ } @{$config{bin_defines} || ()}),
+ @{$config{bin_cppflags}},
+ '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
+BIN_CFLAGS={- join(' ', $target{bin_cflags} || (),
+ @{$config{bin_cflags}},
+ '$(CNF_CFLAGS)', '$(CFLAGS)') -}
+BIN_CXXFLAGS={- join(' ', $target{bin_cxxflags} || (),
+ @{$config{bin_cxxflags}},
+ '$(CNF_CXXFLAGS)', '$(CXXFLAGS)') -}
+BIN_LDFLAGS={- join(' ', $target{bin_lflags} || (),
+ @{$config{bin_lflags}},
+ '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
+BIN_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
+
+# CPPFLAGS_Q is used for one thing only: to build up buildinf.h
+CPPFLAGS_Q={- $cppflags1 =~ s|([\\"])|\\$1|g;
+ $cppflags2 =~ s|([\\"])|\\$1|g;
+ $lib_cppflags =~ s|([\\"])|\\$1|g;
+ join(' ', $lib_cppflags || (), $cppflags2 || (),
+ $cppflags1 || ()) -}
+
+PERLASM_SCHEME= {- $target{perlasm_scheme} -}
+
+# For x86 assembler: Set PROCESSOR to 386 if you want to support
+# the 80386.
+PROCESSOR= {- $config{processor} -}
+
+# We want error [and other] messages in English. Trouble is that make(1)
+# doesn't pass macros down as environment variables unless there already
+# was corresponding variable originally set. In other words we can only
+# reassign environment variables, but not set new ones, not in portable
+# manner that is. That's why we reassign several, just to be sure...
+LC_ALL=C
+LC_MESSAGES=C
+LANG=C
+
+# The main targets ###################################################
+
+{- dependmagic('build_sw'); -}: build_libs_nodep build_modules_nodep build_programs_nodep link-utils
+{- dependmagic('build_libs'); -}: build_libs_nodep
+{- dependmagic('build_modules'); -}: build_modules_nodep
+{- dependmagic('build_programs'); -}: build_programs_nodep
+
+build_generated_pods: $(GENERATED_PODS)
+build_docs: build_man_docs build_html_docs
+build_man_docs: $(MANDOCS1) $(MANDOCS3) $(MANDOCS5) $(MANDOCS7)
+build_html_docs: $(HTMLDOCS1) $(HTMLDOCS3) $(HTMLDOCS5) $(HTMLDOCS7)
+
+build_generated: $(GENERATED_MANDATORY)
+build_libs_nodep: libcrypto.pc libssl.pc openssl.pc
+build_modules_nodep: $(MODULES)
+build_programs_nodep: $(PROGRAMS) $(SCRIPTS)
+
+# Kept around for backward compatibility
+build_apps build_tests: build_programs
+
+# Convenience target to prebuild all generated files, not just the mandatory
+# ones
+build_all_generated: $(GENERATED_MANDATORY) $(GENERATED) build_docs
+ @ : {- output_off() if $disabled{makedepend}; "" -}
+ @echo "Warning: consider configuring with no-makedepend, because if"
+ @echo " target system doesn't have $(PERL),"
+ @echo " then make will fail..."
+ @ : {- output_on() if $disabled{makedepend}; "" -}
+
+all: build_sw build_docs
+
+test: tests
+{- dependmagic('tests'); -}: build_programs_nodep build_modules_nodep link-utils
+ $(MAKE) run_tests
+run_tests: FORCE
+ @ : {- output_off() if $disabled{tests}; "" -}
+ ( SRCTOP=$(SRCDIR) \
+ BLDTOP=$(BLDDIR) \
+ PERL="$(PERL)" \
+ FIPSKEY="$(FIPSKEY)" \
+ EXE_EXT={- platform->binext() -} \
+ $(PERL) $(SRCDIR)/test/run_tests.pl $(TESTS) )
+ @ : {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
+ @echo "Tests are not supported with your chosen Configure options"
+ @ : {- output_on() if !$disabled{tests}; "" -}
+
+list-tests:
+ @ : {- output_off() if $disabled{tests}; "" -}
+ $(MAKE) run_tests TESTS=list
+ @ : {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
+ @echo "Tests are not supported with your chosen Configure options"
+ @ : {- output_on() if !$disabled{tests}; "" -}
+
+install: install_sw install_ssldirs install_docs {- $disabled{fips} ? "" : "install_fips" -}
+
+uninstall: uninstall_docs uninstall_sw {- $disabled{fips} ? "" : "uninstall_fips" -}
+
+libclean:
+ @set -e; for s in $(SHLIB_INFO); do \
+ if [ "$$s" = ";" ]; then continue; fi; \
+ s1=`echo "$$s" | cut -f1 -d";"`; \
+ s2=`echo "$$s" | cut -f2 -d";"`; \
+ s3=`echo "$$s" | cut -f3 -d";"`; \
+ $(ECHO) $(RM) $$s1; {- output_off() unless windowsdll(); "" -}\
+ $(RM) apps/$$s1; \
+ $(RM) test/$$s1; \
+ $(RM) fuzz/$$s1; {- output_on() unless windowsdll(); "" -}\
+ $(RM) $$s1; \
+ if [ "$$s2" != "" ]; then \
+ $(ECHO) $(RM) $$s2; \
+ $(RM) $$s2; \
+ fi; \
+ if [ "$$s3" != "" ]; then \
+ $(ECHO) $(RM) $$s3; \
+ $(RM) $$s3; \
+ fi; \
+ done
+ $(RM) $(LIBS)
+ $(RM) *{- platform->defext() -}
+
+clean: libclean
+ $(RM) $(HTMLDOCS1)
+ $(RM) $(HTMLDOCS3)
+ $(RM) $(HTMLDOCS5)
+ $(RM) $(HTMLDOCS7)
+ $(RM) $(MANDOCS1)
+ $(RM) $(MANDOCS3)
+ $(RM) $(MANDOCS5)
+ $(RM) $(MANDOCS7)
+ $(RM) $(PROGRAMS) $(TESTPROGS) $(MODULES) $(FIPSMODULE) $(SCRIPTS)
+ $(RM) $(GENERATED_MANDATORY) $(GENERATED)
+ -find . -name '*{- platform->depext() -}' \! -name '.*' \! -type d -exec $(RM) {} \;
+ -find . -name '*{- platform->objext() -}' \! -name '.*' \! -type d -exec $(RM) {} \;
+ $(RM) core
+ $(RM) tags TAGS doc-nits md-nits
+ $(RM) -r test/test-runs
+ $(RM) providers/fips*.new
+ $(RM) openssl.pc libcrypto.pc libssl.pc
+ -find . -type l \! -name '.*' -exec $(RM) {} \;
+
+distclean: clean
+ $(RM) include/openssl/configuration.h
+ $(RM) configdata.pm
+ $(RM) Makefile
+
+# We check if any depfile is newer than Makefile and decide to
+# concatenate only if that is true.
+depend: Makefile
+ @: {- output_off() if $disabled{makedepend}; "" -}
+ @$(PERL) $(SRCDIR)/util/add-depends.pl "{- $makedep_scheme -}"
+ @: {- output_on() if $disabled{makedepend}; "" -}
+
+# Install helper targets #############################################
+
+install_sw: install_dev install_engines install_modules install_runtime
+
+uninstall_sw: uninstall_runtime uninstall_modules uninstall_engines uninstall_dev
+
+install_docs: install_man_docs install_html_docs
+
+uninstall_docs: uninstall_man_docs uninstall_html_docs
+ $(RM) -r "$(DESTDIR)$(DOCDIR)"
+
+{- output_off() if $disabled{fips}; "" -}
+install_fips: build_sw $(INSTALL_FIPSMODULECONF)
+ @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MODULESDIR)"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)"
+ @$(ECHO) "*** Installing FIPS module"
+ @$(ECHO) "install $(INSTALL_FIPSMODULE) -> $(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME)"
+ @cp "$(INSTALL_FIPSMODULE)" "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME).new"
+ @chmod 755 "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME).new"
+ @mv -f "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME).new" \
+ "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME)"
+ @$(ECHO) "*** Installing FIPS module configuration"
+ @$(ECHO) "install $(INSTALL_FIPSMODULECONF) -> $(DESTDIR)$(OPENSSLDIR)/fipsmodule.cnf"
+ @cp $(INSTALL_FIPSMODULECONF) "$(DESTDIR)$(OPENSSLDIR)/fipsmodule.cnf"
+
+uninstall_fips:
+ @$(ECHO) "*** Uninstalling FIPS module configuration"
+ $(RM) "$(DESTDIR)$(OPENSSLDIR)/fipsmodule.cnf"
+ @$(ECHO) "*** Uninstalling FIPS module"
+ $(RM) "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME)"
+{- if ($disabled{fips}) { output_on(); } else { output_off(); } "" -}
+install_fips:
+ @$(ECHO) "The 'install_fips' target requires the 'enable-fips' option"
+
+uninstall_fips:
+ @$(ECHO) "The 'uninstall_fips' target requires the 'enable-fips' option"
+{- output_on() if !$disabled{fips}; "" -}
+
+
+install_ssldirs:
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)/certs"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)/private"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)/misc"
+ @set -e; for x in dummy $(MISC_SCRIPTS); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ x1=`echo "$$x" | cut -f1 -d:`; \
+ x2=`echo "$$x" | cut -f2 -d:`; \
+ fn=`basename $$x1`; \
+ $(ECHO) "install $$x1 -> $(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \
+ cp $$x1 "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn.new"; \
+ chmod 755 "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn.new"; \
+ mv -f "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn.new" \
+ "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \
+ if [ "$$x1" != "$$x2" ]; then \
+ ln=`basename "$$x2"`; \
+ : {- output_off() unless windowsdll(); "" -}; \
+ $(ECHO) "copy $(DESTDIR)$(OPENSSLDIR)/misc/$$ln -> $(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \
+ cp "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn" "$(DESTDIR)$(OPENSSLDIR)/misc/$$ln"; \
+ : {- output_on() unless windowsdll();
+ output_off() if windowsdll(); "" -}; \
+ $(ECHO) "link $(DESTDIR)$(OPENSSLDIR)/misc/$$ln -> $(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \
+ ln -sf $$fn "$(DESTDIR)$(OPENSSLDIR)/misc/$$ln"; \
+ : {- output_on() if windowsdll(); "" -}; \
+ fi; \
+ done
+ @$(ECHO) "install $(SRCDIR)/apps/openssl.cnf -> $(DESTDIR)$(OPENSSLDIR)/openssl.cnf.dist"
+ @cp $(SRCDIR)/apps/openssl.cnf "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf.new"
+ @chmod 644 "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf.new"
+ @mv -f "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf.new" "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf.dist"
+ @if [ ! -f "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf" ]; then \
+ $(ECHO) "install $(SRCDIR)/apps/openssl.cnf -> $(DESTDIR)$(OPENSSLDIR)/openssl.cnf"; \
+ cp $(SRCDIR)/apps/openssl.cnf "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf"; \
+ chmod 644 "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf"; \
+ fi
+ @$(ECHO) "install $(SRCDIR)/apps/ct_log_list.cnf -> $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.dist"
+ @cp $(SRCDIR)/apps/ct_log_list.cnf "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.new"
+ @chmod 644 "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.new"
+ @mv -f "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.new" "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.dist"
+ @if [ ! -f "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf" ]; then \
+ $(ECHO) "install $(SRCDIR)/apps/ct_log_list.cnf -> $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf"; \
+ cp $(SRCDIR)/apps/ct_log_list.cnf "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf"; \
+ chmod 644 "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf"; \
+ fi
+
+install_dev: install_runtime_libs
+ @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+ @$(ECHO) "*** Installing development files"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(INSTALLTOP)/include/openssl"
+ @ : {- output_off() if $disabled{uplink}; "" -}
+ @$(ECHO) "install $(SRCDIR)/ms/applink.c -> $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
+ @cp $(SRCDIR)/ms/applink.c "$(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
+ @chmod 644 "$(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
+ @ : {- output_on() if $disabled{uplink}; "" -}
+ @set -e; for i in $(SRCDIR)/include/openssl/*.h \
+ $(BLDDIR)/include/openssl/*.h; do \
+ fn=`basename $$i`; \
+ $(ECHO) "install $$i -> $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
+ cp $$i "$(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
+ chmod 644 "$(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
+ done
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(libdir)"
+ @set -e; for l in $(INSTALL_LIBS); do \
+ fn=`basename $$l`; \
+ $(ECHO) "install $$l -> $(DESTDIR)$(libdir)/$$fn"; \
+ cp $$l "$(DESTDIR)$(libdir)/$$fn.new"; \
+ $(RANLIB) "$(DESTDIR)$(libdir)/$$fn.new"; \
+ chmod 644 "$(DESTDIR)$(libdir)/$$fn.new"; \
+ mv -f "$(DESTDIR)$(libdir)/$$fn.new" \
+ "$(DESTDIR)$(libdir)/$$fn"; \
+ done
+ @ : {- output_off() if $disabled{shared}; "" -}
+ @set -e; for s in $(INSTALL_SHLIB_INFO); do \
+ s1=`echo "$$s" | cut -f1 -d";"`; \
+ s2=`echo "$$s" | cut -f2 -d";"`; \
+ s3=`echo "$$s" | cut -f3 -d";"`; \
+ fn1=`basename "$$s1"`; \
+ fn2=`basename "$$s2"`; \
+ fn3=`basename "$$s3"`; \
+ : {- output_off(); output_on() unless windowsdll() or sharedaix(); "" -}; \
+ if [ "$$fn2" != "" ]; then \
+ $(ECHO) "link $(DESTDIR)$(libdir)/$$fn2 -> $(DESTDIR)$(libdir)/$$fn1"; \
+ ln -sf $$fn1 "$(DESTDIR)$(libdir)/$$fn2"; \
+ fi; \
+ : {- output_off() unless windowsdll() or sharedaix(); output_on() if windowsdll(); "" -}; \
+ if [ "$$fn3" != "" ]; then \
+ $(ECHO) "install $$s3 -> $(DESTDIR)$(libdir)/$$fn3"; \
+ cp $$s3 "$(DESTDIR)$(libdir)/$$fn3.new"; \
+ chmod 755 "$(DESTDIR)$(libdir)/$$fn3.new"; \
+ mv -f "$(DESTDIR)$(libdir)/$$fn3.new" \
+ "$(DESTDIR)$(libdir)/$$fn3"; \
+ fi; \
+ : {- output_off() if windowsdll(); output_on() if sharedaix(); "" -}; \
+ a="$(DESTDIR)$(libdir)/$$fn2"; \
+ $(ECHO) "install $$s1 -> $$a"; \
+ if [ -f $$a ]; then ( trap "rm -rf /tmp/ar.$$$$" INT 0; \
+ mkdir /tmp/ar.$$$$; ( cd /tmp/ar.$$$$; \
+ cp -f $$a $$a.new; \
+ for so in `$(AR) t $$a`; do \
+ $(AR) x $$a $$so; \
+ chmod u+w $$so; \
+ strip -X32_64 -e $$so; \
+ $(AR) r $$a.new $$so; \
+ done; \
+ )); fi; \
+ $(AR) r $$a.new $$s1; \
+ mv -f $$a.new $$a; \
+ : {- output_off() if sharedaix(); output_on(); "" -}; \
+ done
+ @ : {- output_on() if $disabled{shared}; "" -}
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(libdir)/pkgconfig"
+ @$(ECHO) "install libcrypto.pc -> $(DESTDIR)$(libdir)/pkgconfig/libcrypto.pc"
+ @cp libcrypto.pc "$(DESTDIR)$(libdir)/pkgconfig"
+ @chmod 644 "$(DESTDIR)$(libdir)/pkgconfig/libcrypto.pc"
+ @$(ECHO) "install libssl.pc -> $(DESTDIR)$(libdir)/pkgconfig/libssl.pc"
+ @cp libssl.pc "$(DESTDIR)$(libdir)/pkgconfig"
+ @chmod 644 "$(DESTDIR)$(libdir)/pkgconfig/libssl.pc"
+ @$(ECHO) "install openssl.pc -> $(DESTDIR)$(libdir)/pkgconfig/openssl.pc"
+ @cp openssl.pc "$(DESTDIR)$(libdir)/pkgconfig"
+ @chmod 644 "$(DESTDIR)$(libdir)/pkgconfig/openssl.pc"
+
+uninstall_dev: uninstall_runtime_libs
+ @$(ECHO) "*** Uninstalling development files"
+ @ : {- output_off() if $disabled{uplink}; "" -}
+ @$(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
+ @$(RM) "$(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
+ @ : {- output_on() if $disabled{uplink}; "" -}
+ @set -e; for i in $(SRCDIR)/include/openssl/*.h \
+ $(BLDDIR)/include/openssl/*.h; do \
+ fn=`basename $$i`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
+ $(RM) "$(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
+ done
+ -$(RMDIR) "$(DESTDIR)$(INSTALLTOP)/include/openssl"
+ -$(RMDIR) "$(DESTDIR)$(INSTALLTOP)/include"
+ @set -e; for l in $(INSTALL_LIBS); do \
+ fn=`basename $$l`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn"; \
+ $(RM) "$(DESTDIR)$(libdir)/$$fn"; \
+ done
+ @ : {- output_off() if $disabled{shared}; "" -}
+ @set -e; for s in $(INSTALL_SHLIB_INFO); do \
+ s1=`echo "$$s" | cut -f1 -d";"`; \
+ s2=`echo "$$s" | cut -f2 -d";"`; \
+ s3=`echo "$$s" | cut -f3 -d";"`; \
+ fn1=`basename "$$s1"`; \
+ fn2=`basename "$$s2"`; \
+ fn3=`basename "$$s3"`; \
+ : {- output_off() if windowsdll(); "" -}; \
+ $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn1"; \
+ $(RM) "$(DESTDIR)$(libdir)/$$fn1"; \
+ if [ -n "$$fn2" ]; then \
+ $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn2"; \
+ $(RM) "$(DESTDIR)$(libdir)/$$fn2"; \
+ fi; \
+ : {- output_on() if windowsdll(); "" -}{- output_off() unless windowsdll(); "" -}; \
+ if [ -n "$$fn3" ]; then \
+ $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn3"; \
+ $(RM) "$(DESTDIR)$(libdir)/$$fn3"; \
+ fi; \
+ : {- output_on() unless windowsdll(); "" -}; \
+ done
+ @ : {- output_on() if $disabled{shared}; "" -}
+ $(RM) "$(DESTDIR)$(libdir)/pkgconfig/libcrypto.pc"
+ $(RM) "$(DESTDIR)$(libdir)/pkgconfig/libssl.pc"
+ $(RM) "$(DESTDIR)$(libdir)/pkgconfig/openssl.pc"
+ -$(RMDIR) "$(DESTDIR)$(libdir)/pkgconfig"
+ -$(RMDIR) "$(DESTDIR)$(libdir)"
+
+_install_modules_deps: install_runtime_libs build_modules
+
+install_engines: _install_modules_deps
+ @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(ENGINESDIR)/"
+ @$(ECHO) "*** Installing engines"
+ @set -e; for e in dummy $(INSTALL_ENGINES); do \
+ if [ "$$e" = "dummy" ]; then continue; fi; \
+ fn=`basename $$e`; \
+ $(ECHO) "install $$e -> $(DESTDIR)$(ENGINESDIR)/$$fn"; \
+ cp $$e "$(DESTDIR)$(ENGINESDIR)/$$fn.new"; \
+ chmod 755 "$(DESTDIR)$(ENGINESDIR)/$$fn.new"; \
+ mv -f "$(DESTDIR)$(ENGINESDIR)/$$fn.new" \
+ "$(DESTDIR)$(ENGINESDIR)/$$fn"; \
+ done
+
+uninstall_engines:
+ @$(ECHO) "*** Uninstalling engines"
+ @set -e; for e in dummy $(INSTALL_ENGINES); do \
+ if [ "$$e" = "dummy" ]; then continue; fi; \
+ fn=`basename $$e`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(ENGINESDIR)/$$fn"; \
+ $(RM) "$(DESTDIR)$(ENGINESDIR)/$$fn"; \
+ done
+ -$(RMDIR) "$(DESTDIR)$(ENGINESDIR)"
+
+install_modules: _install_modules_deps
+ @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MODULESDIR)/"
+ @$(ECHO) "*** Installing modules"
+ @set -e; for e in dummy $(INSTALL_MODULES); do \
+ if [ "$$e" = "dummy" ]; then continue; fi; \
+ fn=`basename $$e`; \
+ $(ECHO) "install $$e -> $(DESTDIR)$(MODULESDIR)/$$fn"; \
+ cp $$e "$(DESTDIR)$(MODULESDIR)/$$fn.new"; \
+ chmod 755 "$(DESTDIR)$(MODULESDIR)/$$fn.new"; \
+ mv -f "$(DESTDIR)$(MODULESDIR)/$$fn.new" \
+ "$(DESTDIR)$(MODULESDIR)/$$fn"; \
+ done
+
+uninstall_modules:
+ @$(ECHO) "*** Uninstalling modules"
+ @set -e; for e in dummy $(INSTALL_MODULES); do \
+ if [ "$$e" = "dummy" ]; then continue; fi; \
+ fn=`basename $$e`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(MODULESDIR)/$$fn"; \
+ $(RM) "$(DESTDIR)$(MODULESDIR)/$$fn"; \
+ done
+ -$(RMDIR) "$(DESTDIR)$(MODULESDIR)"
+
+install_runtime: install_programs
+
+install_runtime_libs: build_libs
+ @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+ @ : {- output_off() if windowsdll(); "" -}
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(libdir)"
+ @ : {- output_on() if windowsdll(); output_off() unless windowsdll(); "" -}
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(INSTALLTOP)/bin"
+ @ : {- output_on() unless windowsdll(); "" -}
+ @$(ECHO) "*** Installing runtime libraries"
+ @set -e; for s in dummy $(INSTALL_SHLIBS); do \
+ if [ "$$s" = "dummy" ]; then continue; fi; \
+ fn=`basename $$s`; \
+ : {- output_off() unless windowsdll(); "" -}; \
+ $(ECHO) "install $$s -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ cp $$s "$(DESTDIR)$(INSTALLTOP)/bin/$$fn.new"; \
+ chmod 755 "$(DESTDIR)$(INSTALLTOP)/bin/$$fn.new"; \
+ mv -f "$(DESTDIR)$(INSTALLTOP)/bin/$$fn.new" \
+ "$(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ : {- output_on() unless windowsdll(); "" -}{- output_off() if windowsdll(); "" -}; \
+ $(ECHO) "install $$s -> $(DESTDIR)$(libdir)/$$fn"; \
+ cp $$s "$(DESTDIR)$(libdir)/$$fn.new"; \
+ chmod 755 "$(DESTDIR)$(libdir)/$$fn.new"; \
+ mv -f "$(DESTDIR)$(libdir)/$$fn.new" \
+ "$(DESTDIR)$(libdir)/$$fn"; \
+ : {- output_on() if windowsdll(); "" -}; \
+ done
+
+install_programs: install_runtime_libs build_programs
+ @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(INSTALLTOP)/bin"
+ @$(ECHO) "*** Installing runtime programs"
+ @set -e; for x in dummy $(INSTALL_PROGRAMS); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ cp $$x "$(DESTDIR)$(INSTALLTOP)/bin/$$fn.new"; \
+ chmod 755 "$(DESTDIR)$(INSTALLTOP)/bin/$$fn.new"; \
+ mv -f "$(DESTDIR)$(INSTALLTOP)/bin/$$fn.new" \
+ "$(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ done
+ @set -e; for x in dummy $(BIN_SCRIPTS); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ cp $$x "$(DESTDIR)$(INSTALLTOP)/bin/$$fn.new"; \
+ chmod 755 "$(DESTDIR)$(INSTALLTOP)/bin/$$fn.new"; \
+ mv -f "$(DESTDIR)$(INSTALLTOP)/bin/$$fn.new" \
+ "$(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ done
+
+uninstall_runtime: uninstall_programs uninstall_runtime_libs
+
+uninstall_programs:
+ @$(ECHO) "*** Uninstalling runtime programs"
+ @set -e; for x in dummy $(INSTALL_PROGRAMS); \
+ do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ $(RM) "$(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ done;
+ @set -e; for x in dummy $(BIN_SCRIPTS); \
+ do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ $(RM) "$(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ done
+ -$(RMDIR) "$(DESTDIR)$(INSTALLTOP)/bin"
+
+uninstall_runtime_libs:
+ @$(ECHO) "*** Uninstalling runtime libraries"
+ @ : {- output_off() unless windowsdll(); "" -}
+ @set -e; for s in dummy $(INSTALL_SHLIBS); do \
+ if [ "$$s" = "dummy" ]; then continue; fi; \
+ fn=`basename $$s`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ $(RM) "$(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \
+ done
+ @ : {- output_on() unless windowsdll(); "" -}
+
+
+install_man_docs: build_man_docs
+ @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MANDIR)/man1"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MANDIR)/man3"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MANDIR)/man5"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MANDIR)/man7"
+ @$(ECHO) "*** Installing manpages"
+ @set -e; for x in dummy $(MANDOCS1); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
+ cp $$x "$(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
+ chmod 644 "$(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
+ $(PERL) $(SRCDIR)/util/write-man-symlinks install $(SRCDIR)/doc/man1 $(BLDDIR)/doc/man1 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man1"; \
+ done
+ @set -e; for x in dummy $(MANDOCS3); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
+ cp $$x "$(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
+ chmod 644 "$(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
+ $(PERL) $(SRCDIR)/util/write-man-symlinks install $(SRCDIR)/doc/man3 $(BLDDIR)/doc/man3 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man3"; \
+ done
+ @set -e; for x in dummy $(MANDOCS5); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
+ cp $$x "$(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
+ chmod 644 "$(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
+ $(PERL) $(SRCDIR)/util/write-man-symlinks install $(SRCDIR)/doc/man5 $(BLDDIR)/doc/man5 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man5"; \
+ done
+ @set -e; for x in dummy $(MANDOCS7); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
+ cp $$x "$(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
+ chmod 644 "$(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
+ $(PERL) $(SRCDIR)/util/write-man-symlinks install $(SRCDIR)/doc/man7 $(BLDDIR)/doc/man7 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man7"; \
+ done
+
+uninstall_man_docs: build_man_docs
+ @$(ECHO) "*** Uninstalling manpages"
+ @set -e; for x in dummy $(MANDOCS1); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
+ $(RM) "$(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
+ $(PERL) $(SRCDIR)/util/write-man-symlinks uninstall $(SRCDIR)/doc/man1 $(BLDDIR)/doc/man1 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man1"; \
+ done
+ @set -e; for x in dummy $(MANDOCS3); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
+ $(RM) "$(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
+ $(PERL) $(SRCDIR)/util/write-man-symlinks uninstall $(SRCDIR)/doc/man3 $(BLDDIR)/doc/man3 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man3"; \
+ done
+ @set -e; for x in dummy $(MANDOCS5); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
+ $(RM) "$(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
+ $(PERL) $(SRCDIR)/util/write-man-symlinks uninstall $(SRCDIR)/doc/man5 $(BLDDIR)/doc/man5 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man5"; \
+ done
+ @set -e; for x in dummy $(MANDOCS7); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
+ $(RM) "$(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
+ $(PERL) $(SRCDIR)/util/write-man-symlinks uninstall $(SRCDIR)/doc/man7 $(BLDDIR)/doc/man7 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man7"; \
+ done
+
+install_html_docs: install_image_docs build_html_docs
+ @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man1"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man3"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man5"
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man7"
+ @$(ECHO) "*** Installing HTML manpages"
+ @set -e; for x in dummy $(HTMLDOCS1); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
+ cp $$x "$(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
+ chmod 644 "$(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
+ done
+ @set -e; for x in dummy $(HTMLDOCS3); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
+ cp $$x "$(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
+ chmod 644 "$(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
+ done
+ @set -e; for x in dummy $(HTMLDOCS5); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
+ cp $$x "$(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
+ chmod 644 "$(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
+ done
+ @set -e; for x in dummy $(HTMLDOCS7); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
+ cp $$x "$(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
+ chmod 644 "$(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
+ done
+
+uninstall_html_docs: uninstall_image_docs
+ @$(ECHO) "*** Uninstalling HTML manpages"
+ @set -e; for x in dummy $(HTMLDOCS1); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
+ $(RM) "$(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
+ done
+ @set -e; for x in dummy $(HTMLDOCS3); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
+ $(RM) "$(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
+ done
+ @set -e; for x in dummy $(HTMLDOCS5); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
+ $(RM) "$(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
+ done
+ @set -e; for x in dummy $(HTMLDOCS7); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
+ $(RM) "$(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
+ done
+
+install_image_docs:
+ @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man7/img"
+ @set -e; for x in dummy $(IMAGEDOCS7); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
+ cp $(SRCDIR)/$$x "$(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
+ chmod 644 "$(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
+ done
+
+uninstall_image_docs:
+ @set -e; for x in dummy $(IMAGEDOCS7); do \
+ if [ "$$x" = "dummy" ]; then continue; fi; \
+ fn=`basename $$x`; \
+ $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
+ $(RM) "$(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
+ done
+
+# Developer targets (note: these are only available on Unix) #########
+
+# It's important that generate_buildinfo comes after ordinals, as ordinals
+# is sensitive to build.info changes.
+update: generate errors ordinals generate_buildinfo
+
+generate: generate_apps generate_crypto_bn generate_crypto_objects \
+ generate_crypto_conf generate_crypto_asn1 generate_fuzz_oids
+
+generate_buildinfo: generate_doc_buildinfo
+
+.PHONY: doc-nits md-nits
+doc-nits: build_generated_pods
+ $(PERL) $(SRCDIR)/util/find-doc-nits -c -n -l -e
+
+# This uses "mdl", the markdownlint application, which is written in ruby.
+# The source is at https://github.com/markdownlint/markdownlint
+# If you have ruby installed, "gem install mdl" should work.
+# Another option is at https://snapcraft.io/install/mdl/debian
+# Finally, there's a Node.js version, which we haven't tried, that
+# can be found at https://github.com/DavidAnson/markdownlint
+md-nits:
+ mdl -s util/markdownlint.rb .
+
+# Test coverage is a good idea for the future
+#coverage: $(PROGRAMS) $(TESTPROGRAMS)
+# ...
+
+lint:
+ lint -DLINT $(INCLUDES) $(SRCS)
+
+generate_apps:
+ ( cd $(SRCDIR); $(PERL) VMS/VMSify-conf.pl \
+ < apps/openssl.cnf > apps/openssl-vms.cnf )
+
+generate_crypto_bn:
+ ( cd $(SRCDIR); $(PERL) crypto/bn/bn_prime.pl > crypto/bn/bn_prime.h )
+
+generate_crypto_objects:
+ ( cd $(SRCDIR); $(PERL) crypto/objects/objects.pl -n \
+ crypto/objects/objects.txt \
+ crypto/objects/obj_mac.num \
+ > crypto/objects/obj_mac.new && \
+ mv crypto/objects/obj_mac.new crypto/objects/obj_mac.num )
+ ( cd $(SRCDIR); $(PERL) crypto/objects/objects.pl \
+ crypto/objects/objects.txt \
+ crypto/objects/obj_mac.num \
+ > include/openssl/obj_mac.h )
+ ( cd $(SRCDIR); $(PERL) crypto/objects/obj_dat.pl \
+ include/openssl/obj_mac.h \
+ > crypto/objects/obj_dat.h )
+ ( cd $(SRCDIR); $(PERL) crypto/objects/objxref.pl \
+ crypto/objects/obj_mac.num \
+ crypto/objects/obj_xref.txt \
+ > crypto/objects/obj_xref.h )
+ ( cd $(SRCDIR); sed -e '1,8d' crypto/objects/obj_compat.h >> include/openssl/obj_mac.h )
+
+generate_crypto_conf:
+ ( cd $(SRCDIR); $(PERL) crypto/conf/keysets.pl \
+ > crypto/conf/conf_def.h )
+
+generate_crypto_asn1:
+ ( cd $(SRCDIR); $(PERL) crypto/asn1/charmap.pl \
+ > crypto/asn1/charmap.h )
+
+generate_fuzz_oids:
+ ( cd $(SRCDIR); $(PERL) fuzz/mkfuzzoids.pl \
+ crypto/objects/obj_dat.h \
+ > fuzz/oids.txt )
+
+generate_doc_buildinfo:
+ ( $(PERL) -I$(BLDDIR) -Mconfigdata \
+ $(SRCDIR)/util/dofile.pl -o Makefile \
+ $(SRCDIR)/doc/build.info.in \
+ > $(SRCDIR)/doc/build.info.new; \
+ if ( test -e $(SRCDIR)/doc/build.info \
+ && cmp $(SRCDIR)/doc/build.info.new $(SRCDIR)/doc/build.info \
+ > /dev/null ); \
+ then \
+ rm $(SRCDIR)/doc/build.info.new; \
+ else \
+ mv $(SRCDIR)/doc/build.info.new $(SRCDIR)/doc/build.info; \
+ fi )
+
+generate_fips_sources: providers/fips.module.sources.new
+providers/fips.module.sources.new: configdata.pm
+ rm -rf sources-tmp
+ mkdir sources-tmp
+ ( \
+ srcdir=`cd $(SRCDIR); pwd`; \
+ cd sources-tmp \
+ && $$srcdir/Configure --banner=Configured enable-fips -O0 \
+ && ./configdata.pm --query 'get_sources("providers/fips")' > sources1 \
+ && $(MAKE) -sj 4 build_generated providers/fips.so \
+ && find . -name '*.d' | xargs cat > dep1 \
+ && $(MAKE) distclean \
+ && $$srcdir/Configure --banner=Configured enable-fips no-asm -O0 \
+ && ./configdata.pm --query 'get_sources("providers/fips")' > sources2 \
+ && $(MAKE) -sj 4 build_generated providers/fips.so \
+ && find . -name '*.d' | xargs cat > dep2 \
+ && cat sources1 sources2 \
+ | grep -v ' : \\$$' | grep -v util/providers.num \
+ | sed -e 's/^ *//' -e 's/ *\\$$//' \
+ | sort | uniq > sources \
+ && cat dep1 dep2 \
+ | $(PERL) -p -e 's/\\\n//' \
+ | sed -e 's/^.*: *//' -e 's/ */ /g' \
+ | fgrep -f sources \
+ | tr ' ' '\n' \
+ | sort | uniq > deps.raw \
+ && cat deps.raw \
+ | xargs ./configdata.pm --query 'get_sources(@ARGV)' \
+ | $(PERL) -p -e 's/\\\n//' \
+ | sed -e 's/\./\\\./g' -e 's/ : */:/' -e 's/^/s:/' -e 's/$$/:/' \
+ > deps.sed \
+ && cat deps.raw | sed -f deps.sed > deps \
+ )
+ ( \
+ cat sources-tmp/sources sources-tmp/deps \
+ | $(PERL) -p -e 's:^ *\Q../\E:: ;' \
+ -e 's:^\Q$(SRCDIR)/\E:: if "$(SRCDIR)" ne "." ;' \
+ -e 'my $$x; do { $$x = $$_; s:(^|/)((?!\Q../\E)[^/]*/)\Q..\E($$|/):$$1: } while ($$x ne $$_) ;' ; \
+ cd $(SRCDIR); \
+ for x in crypto/bn/asm/*.pl crypto/bn/asm/*.S \
+ crypto/aes/asm/*.pl crypto/aes/asm/*.S \
+ crypto/ec/asm/*.pl \
+ crypto/modes/asm/*.pl \
+ crypto/sha/asm/*.pl \
+ crypto/*cpuid.pl crypto/*cpuid.S \
+ crypto/*cap.c; do \
+ echo "$$x"; \
+ done \
+ ) | sort | uniq > providers/fips.module.sources.new
+ rm -rf sources-tmp
+
+# Set to -force to force a rebuild
+ERROR_REBUILD=
+errors:
+ ( b=`pwd`; set -e; cd $(SRCDIR); \
+ $(PERL) util/ck_errf.pl -strict -internal; \
+ $(PERL) -I$$b util/mkerr.pl $(ERROR_REBUILD) -internal )
+ ( b=`pwd`; set -e; cd $(SRCDIR)/engines; \
+ for E in *.ec ; do \
+ $(PERL) ../util/ck_errf.pl -strict \
+ -conf $$E `basename $$E .ec`.c; \
+ $(PERL) -I$$b ../util/mkerr.pl $(ERROR_REBUILD) -static \
+ -conf $$E `basename $$E .ec`.c ; \
+ done )
+
+{- use File::Basename;
+
+ my @sslheaders_tmpl =
+ qw( include/openssl/ssl.h
+ include/openssl/ssl2.h
+ include/openssl/ssl3.h
+ include/openssl/sslerr.h
+ include/openssl/tls1.h
+ include/openssl/dtls1.h
+ include/openssl/srtp.h
+ include/openssl/sslerr_legacy.h );
+ my @cryptoheaders_tmpl =
+ qw( include/internal/dso.h
+ include/internal/o_dir.h
+ include/internal/err.h
+ include/internal/evp.h
+ include/internal/pem.h
+ include/internal/asn1.h
+ include/internal/sslconf.h );
+ my @cryptoskipheaders = ( @sslheaders_tmpl,
+ qw( include/openssl/conf_api.h
+ include/openssl/ebcdic.h
+ include/openssl/opensslconf.h
+ include/openssl/symhacks.h ) );
+ our %cryptoheaders = ();
+ our %sslheaders = ();
+ foreach my $d ( qw( include/openssl include/internal ) ) {
+ my @header_patterns =
+ map { catfile($config{sourcedir}, $d, $_) } ( '*.h', '*.h.in' );
+ foreach my $f ( map { glob($_) } @header_patterns ) {
+ my $base = basename($f);
+ my $base_in = basename($f, '.in');
+ my $dir = catfile($config{sourcedir}, $d);
+ if ($base ne $base_in) {
+ # We have a .h.in file, which means the header file is in the
+ # build tree.
+ $base = $base_in;
+ $dir = catfile($config{builddir}, $d);
+ }
+ my $new_f = catfile($dir, $base);
+ my $fn = "$d/$base";
+ # The logic to add files to @cryptoheaders is a bit complex. The
+ # file to be added must be either in the public header directory
+ # or one of the pre-declared internal headers, and must under no
+ # circumstances be one of those that must be skipped.
+ $cryptoheaders{$new_f} = 1
+ if (($d eq 'include/openssl'
+ || ( grep { $_ eq $fn } @cryptoheaders_tmpl ))
+ && !( grep { $_ eq $fn } @cryptoskipheaders ));
+ # The logic to add files to @sslheaders is much simpler...
+ $sslheaders{$new_f} = 1 if grep { $_ eq $fn } @sslheaders_tmpl;
+ }
+ }
+ "";
+-}
+CRYPTOHEADERS={- join(" \\\n" . ' ' x 14,
+ fill_lines(" ", $COLUMNS - 14, sort keys %cryptoheaders)) -}
+SSLHEADERS={- join(" \\\n" . ' ' x 11,
+ fill_lines(" ", $COLUMNS - 11, sort keys %sslheaders)) -}
+
+renumber: build_generated
+ $(PERL) $(SRCDIR)/util/mknum.pl --version $(VERSION_NUMBER) --no-warnings \
+ --ordinals $(SRCDIR)/util/libcrypto.num \
+ --symhacks $(SRCDIR)/include/openssl/symhacks.h \
+ --renumber \
+ $(CRYPTOHEADERS)
+ $(PERL) $(SRCDIR)/util/mknum.pl --version $(VERSION_NUMBER) --no-warnings \
+ --ordinals $(SRCDIR)/util/libssl.num \
+ --symhacks $(SRCDIR)/include/openssl/symhacks.h \
+ --renumber \
+ $(SSLHEADERS)
+
+ordinals: build_generated
+ $(PERL) $(SRCDIR)/util/mknum.pl --version $(VERSION_NUMBER) --no-warnings \
+ --ordinals $(SRCDIR)/util/libcrypto.num \
+ --symhacks $(SRCDIR)/include/openssl/symhacks.h \
+ $(CRYPTOHEADERS)
+ $(PERL) $(SRCDIR)/util/mknum.pl --version $(VERSION_NUMBER) --no-warnings \
+ --ordinals $(SRCDIR)/util/libssl.num \
+ --symhacks $(SRCDIR)/include/openssl/symhacks.h \
+ $(SSLHEADERS)
+
+test_ordinals:
+ $(MAKE) run_tests TESTS=test_ordinals
+
+tags TAGS: FORCE
+ rm -f TAGS tags
+ -ctags -R .
+ -etags `find . -name '*.[ch]' -o -name '*.pm'`
+
+providers/fips.checksum.new: providers/fips.module.sources.new
+ @which unifdef > /dev/null || \
+ ( echo >&2 "ERROR: unifdef not in your \$$PATH, FIPS checksums not calculated"; \
+ false )
+ ( sources=`pwd`/providers/fips.module.sources.new; \
+ cd $(SRCDIR) \
+ && cat $$sources \
+ | xargs ./util/fips-checksums.sh ) \
+ > providers/fips-sources.checksums.new \
+ && sha256sum providers/fips-sources.checksums.new \
+ | sed -e 's|\.new||' > providers/fips.checksum.new
+
+fips-checksums: providers/fips.checksum.new
+
+$(SRCDIR)/providers/fips.checksum: providers/fips.checksum.new
+ cp -p providers/fips.module.sources.new $(SRCDIR)/providers/fips.module.sources
+ cp -p providers/fips-sources.checksums.new $(SRCDIR)/providers/fips-sources.checksums
+ cp -p providers/fips.checksum.new $(SRCDIR)/providers/fips.checksum
+
+update-fips-checksums: $(SRCDIR)/providers/fips.checksum
+
+diff-fips-checksums: fips-checksums
+ diff -u $(SRCDIR)/providers/fips.module.sources providers/fips.module.sources.new
+ diff -u $(SRCDIR)/providers/fips-sources.checksums providers/fips-sources.checksums.new
+ diff -u $(SRCDIR)/providers/fips.checksum providers/fips.checksum.new
+
+# Release targets (note: only available on Unix) #####################
+
+tar:
+ (cd $(SRCDIR); ./util/mktar.sh --name='$(NAME)' --tarfile='$(TARFILE)')
+
+# Helper targets #####################################################
+
+link-utils: $(BLDDIR)/util/opensslwrap.sh $(BLDDIR)/apps/openssl.cnf
+
+$(BLDDIR)/util/opensslwrap.sh: Makefile
+ @if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
+ mkdir -p "$(BLDDIR)/util"; \
+ ln -sf "../$(SRCDIR)/util/`basename "$@"`" "$(BLDDIR)/util"; \
+ fi
+
+$(BLDDIR)/apps/openssl.cnf: Makefile
+ @if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
+ mkdir -p "$(BLDDIR)/apps"; \
+ ln -sf "../$(SRCDIR)/apps/`basename "$@"`" "$(BLDDIR)/apps"; \
+ fi
+
+FORCE:
+
+# Building targets ###################################################
+
+libcrypto.pc libssl.pc openssl.pc: Makefile $(LIBS) {- join(" ",map { platform->sharedlib_simple($_) // platform->sharedlib_import($_) // platform->sharedlib($_) // () } @{$unified_info{libraries}}) -}
+
+libcrypto.pc:
+ @ ( echo 'prefix=$(INSTALLTOP)'; \
+ echo 'exec_prefix=$${prefix}'; \
+ if [ -n "$(LIBDIR)" ]; then \
+ echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
+ else \
+ echo 'libdir=$(libdir)'; \
+ fi; \
+ echo 'includedir=$${prefix}/include'; \
+ echo 'enginesdir=$${libdir}/engines-{- $sover_dirname -}'; \
+ echo 'modulesdir=$${libdir}/ossl-modules'; \
+ echo ''; \
+ echo 'Name: OpenSSL-libcrypto'; \
+ echo 'Description: OpenSSL cryptography library'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Libs: -L$${libdir} -lcrypto'; \
+ echo 'Libs.private: $(LIB_EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir}' ) > libcrypto.pc
+
+libssl.pc:
+ @ ( echo 'prefix=$(INSTALLTOP)'; \
+ echo 'exec_prefix=$${prefix}'; \
+ if [ -n "$(LIBDIR)" ]; then \
+ echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
+ else \
+ echo 'libdir=$(libdir)'; \
+ fi; \
+ echo 'includedir=$${prefix}/include'; \
+ echo ''; \
+ echo 'Name: OpenSSL-libssl'; \
+ echo 'Description: Secure Sockets Layer and cryptography libraries'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires.private: libcrypto'; \
+ echo 'Libs: -L$${libdir} -lssl'; \
+ echo 'Cflags: -I$${includedir}' ) > libssl.pc
+
+openssl.pc:
+ @ ( echo 'prefix=$(INSTALLTOP)'; \
+ echo 'exec_prefix=$${prefix}'; \
+ if [ -n "$(LIBDIR)" ]; then \
+ echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
+ else \
+ echo 'libdir=$(libdir)'; \
+ fi; \
+ echo 'includedir=$${prefix}/include'; \
+ echo ''; \
+ echo 'Name: OpenSSL'; \
+ echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: libssl libcrypto' ) > openssl.pc
+
+Makefile: configdata.pm \
+ {- join(" \\\n" . ' ' x 10,
+ fill_lines(" ", $COLUMNS - 10,
+ @{$config{build_file_templates}})) -}
+ @echo "Detected changed: $?"
+ $(PERL) configdata.pm
+ @echo "**************************************************"
+ @echo "*** ***"
+ @echo "*** Please run the same make command again ***"
+ @echo "*** ***"
+ @echo "**************************************************"
+ @false
+
+configdata.pm: $(SRCDIR)/Configure $(SRCDIR)/config \
+ {- join(" \\\n" . ' ' x 15,
+ fill_lines(" ", $COLUMNS - 15,
+ @{$config{build_infos}},
+ @{$config{conf_files}})) -}
+ @echo "Detected changed: $?"
+ $(PERL) configdata.pm -r
+ @echo "**************************************************"
+ @echo "*** ***"
+ @echo "*** Please run the same make command again ***"
+ @echo "*** ***"
+ @echo "**************************************************"
+ @false
+
+reconfigure reconf:
+ $(PERL) configdata.pm -r
+
+{-
+ use File::Basename;
+ use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
+
+ # Helper function to convert dependencies in platform agnostic form to
+ # dependencies in platform form.
+ sub compute_platform_depends {
+ map { my $x = $_;
+
+ grep { $x eq $_ } @{$unified_info{programs}} and platform->bin($x)
+ or grep { $x eq $_ } @{$unified_info{modules}} and platform->dso($x)
+ or grep { $x eq $_ } @{$unified_info{libraries}} and platform->lib($x)
+ or platform->convertext($x); } @_;
+ }
+
+ # Helper function to figure out dependencies on libraries
+ # It takes a list of library names and outputs a list of dependencies
+ sub compute_lib_depends {
+ # Depending on shared libraries:
+ # On Windows POSIX layers, we depend on {libname}.dll.a
+ # On Unix platforms, we depend on {shlibname}.so
+ return map { platform->sharedlib_simple($_)
+ // platform->sharedlib_import($_)
+ // platform->sharedlib($_)
+ // platform->staticlib($_)
+ } @_;
+ }
+
+ sub generatetarget {
+ my %args = @_;
+ my $deps = join(" ", compute_platform_depends(@{$args{deps}}));
+ return <<"EOF";
+$args{target}: $deps
+EOF
+ }
+
+ sub generatesrc {
+ my %args = @_;
+ my $gen0 = $args{generator}->[0];
+ my $gen_args = join('', map { " $_" }
+ @{$args{generator}}[1..$#{$args{generator}}]);
+ my $gen_incs = join("", map { " -I".$_ } @{$args{generator_incs}});
+ my $incs = join("", map { " -I".$_ } @{$args{incs}});
+ my $defs = join("", map { " -D".$_ } @{$args{defs}});
+ my $deps = join(" ", compute_platform_depends(@{$args{generator_deps}},
+ @{$args{deps}}));
+
+ if ($args{src} =~ /\.html$/) {
+ #
+ # HTML generator
+ #
+ my $title = basename($args{src}, ".html");
+ my $pod = $gen0;
+ return <<"EOF";
+$args{src}: $pod
+ \$(PERL) \$(SRCDIR)/util/mkpod2html.pl -i "$pod" -o \$\@ -t "$title" -r "\$(SRCDIR)/doc"
+EOF
+ } elsif ($args{src} =~ /\.(\d)$/) {
+ #
+ # Man-page generator
+ #
+ my $section = $1;
+ my $name = uc basename($args{src}, ".$section");
+ my $pod = $gen0;
+ return <<"EOF";
+$args{src}: $pod
+ pod2man --name=$name --section=$section\$(MANSUFFIX) --center=OpenSSL \\
+ --release=\$(VERSION) $pod >\$\@
+EOF
+ } elsif (platform->isdef($args{src})) {
+ #
+ # Linker script-ish generator
+ #
+ my $target = platform->def($args{src});
+ (my $mkdef_os = $target{shared_target}) =~ s|-shared$||;
+ my $ord_ver = $args{intent} eq 'lib' ? ' --version $(VERSION_NUMBER)' : '';
+ my $ord_name = $args{generator}->[1] || $args{product};
+ return <<"EOF";
+$target: $gen0 $deps \$(SRCDIR)/util/mkdef.pl
+ \$(PERL) \$(SRCDIR)/util/mkdef.pl$ord_ver --type $args{intent} --ordinals $gen0 --name $ord_name --OS $mkdef_os > $target
+EOF
+ } elsif (platform->isasm($args{src})
+ || platform->iscppasm($args{src})) {
+ #
+ # Assembler generator
+ #
+ my $cppflags = {
+ shlib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
+ lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
+ dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)',
+ bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)'
+ } -> {$args{intent}};
+
+ my $generator;
+ if ($gen0 =~ /\.pl$/) {
+ $generator = 'CC="$(CC)" $(PERL)'.$gen_incs.' '.$gen0.$gen_args
+ .' "$(PERLASM_SCHEME)"'.$incs.' '.$cppflags.$defs.' $(PROCESSOR)';
+ } elsif ($gen0 =~ /\.m4$/) {
+ $generator = 'm4 -B 8192'.$gen_incs.' '.$gen0.$gen_args.' >'
+ } elsif ($gen0 =~ /\.S$/) {
+ $generator = undef;
+ } else {
+ die "Generator type for $args{src} unknown: $gen0\n";
+ }
+
+ if (defined($generator)) {
+ return <<"EOF";
+$args{src}: $gen0 $deps
+ $generator \$@
+EOF
+ }
+ return <<"EOF";
+$args{src}: $gen0 $deps
+ \$(CC) $incs $cppflags $defs -E $gen0 | \\
+ \$(PERL) -ne '/^#(line)?\\s*[0-9]+/ or print' > \$@
+EOF
+ } elsif ($gen0 =~ m|^.*\.in$|) {
+ #
+ # "dofile" generator (file.in -> file)
+ #
+ my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
+ "util", "dofile.pl")),
+ rel2abs($config{builddir}));
+ my @perlmodules = ( 'configdata.pm',
+ grep { $_ =~ m|\.pm$| } @{$args{deps}} );
+ my %perlmoduleincs = map { '"-I'.dirname($_).'"' => 1 } @perlmodules;
+ $deps = join(' ', $deps, compute_platform_depends(@perlmodules));
+ @perlmodules = map { "-M".basename($_, '.pm') } @perlmodules;
+ my $perlmodules = join(' ', '', sort keys %perlmoduleincs, @perlmodules);
+ return <<"EOF";
+$args{src}: $gen0 $deps
+ \$(PERL)$perlmodules "$dofile" "-o$target{build_file}" $gen0$gen_args > \$@
+EOF
+ } elsif (grep { $_ eq $gen0 } @{$unified_info{programs}}) {
+ #
+ # Generic generator using OpenSSL programs
+ #
+
+ # Redo $gen0, to ensure that we have the proper extension where
+ # necessary.
+ $gen0 = platform->bin($gen0);
+ # Use $(PERL) to execute wrap.pl directly to avoid calling env
+ return <<"EOF";
+$args{src}: $gen0 $deps \$(BLDDIR)/util/wrap.pl
+ \$(PERL) \$(BLDDIR)/util/wrap.pl $gen0$gen_args > \$@
+EOF
+ } else {
+ #
+ # Generic generator using Perl
+ #
+ return <<"EOF";
+$args{src}: $gen0 $deps
+ \$(PERL)$gen_incs $gen0$gen_args > \$@
+EOF
+ }
+ }
+
+ # Should one wonder about the end of the Perl snippet, it's because this
+ # second regexp eats up line endings as well, if the removed path is the
+ # last in the line. We may therefore need to put back a line ending.
+ sub src2obj {
+ my %args = @_;
+ my $obj = platform->convertext($args{obj});
+ my $dep = platform->dep($args{obj});
+ my @srcs = @{$args{srcs}};
+ my $srcs = join(" ", @srcs);
+ my $deps = join(" ", @srcs, @{$args{deps}});
+ my $incs = join("", map { " -I".$_ } @{$args{incs}});
+ my $defs = join("", map { " -D".$_ } @{$args{defs}});
+ my $cmd;
+ my $cmdflags;
+ my $cmdcompile;
+ if (grep /\.rc$/, @srcs) {
+ $cmd = '$(RC)';
+ $cmdflags = '$(RCFLAGS)';
+ $cmdcompile = '';
+ } elsif (grep /\.(cc|cpp)$/, @srcs) {
+ $cmd = '$(CXX)';
+ $cmdcompile = ' -c';
+ $cmdflags = {
+ shlib => '$(LIB_CXXFLAGS) $(LIB_CPPFLAGS)',
+ lib => '$(LIB_CXXFLAGS) $(LIB_CPPFLAGS)',
+ dso => '$(DSO_CXXFLAGS) $(DSO_CPPFLAGS)',
+ bin => '$(BIN_CXXFLAGS) $(BIN_CPPFLAGS)'
+ } -> {$args{intent}};
+ } else {
+ $cmd = '$(CC)';
+ $cmdcompile = ' -c';
+ $cmdflags = {
+ shlib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
+ lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
+ dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)',
+ bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)'
+ } -> {$args{intent}};
+ }
+ my $recipe;
+ # extension-specific rules
+ if (grep /\.s$/, @srcs) {
+ $recipe .= <<"EOF";
+$obj: $deps
+ $cmd $cmdflags -c -o \$\@ $srcs
+EOF
+ } elsif (grep /\.S$/, @srcs) {
+ # Originally there was multi-step rule with $(CC) -E file.S
+ # followed by $(CC) -c file.s. It compensated for one of
+ # legacy platform compiler's inability to handle .S files.
+ # The platform is long discontinued by vendor so there is
+ # hardly a point to drag it along...
+ $recipe .= <<"EOF";
+$obj: $deps
+ $cmd $incs $defs $cmdflags -c -o \$\@ $srcs
+EOF
+ } elsif ($makedep_scheme eq 'gcc' && !grep /\.rc$/, @srcs) {
+ $recipe .= <<"EOF";
+$obj: $deps
+ $cmd $incs $defs $cmdflags -MMD -MF $dep.tmp -MT \$\@ -c -o \$\@ $srcs
+ \@touch $dep.tmp
+ \@if cmp $dep.tmp $dep > /dev/null 2> /dev/null; then \\
+ rm -f $dep.tmp; \\
+ else \\
+ mv $dep.tmp $dep; \\
+ fi
+EOF
+ } else {
+ $recipe .= <<"EOF";
+$obj: $deps
+ $cmd $incs $defs $cmdflags $cmdcompile -o \$\@ $srcs
+EOF
+ if ($makedep_scheme eq 'makedepend') {
+ $recipe .= <<"EOF";
+ \$(MAKEDEPEND) -f- -Y -- $incs $cmdflags -- $srcs 2>/dev/null \\
+ > $dep
+EOF
+ }
+ }
+ return $recipe;
+ }
+ # We *know* this routine is only called when we've configure 'shared'.
+ sub obj2shlib {
+ my %args = @_;
+ my @linkdirs = ();
+ my @linklibs = ();
+ foreach (@{$args{deps}}) {
+ if (platform->isstaticlib($_)) {
+ push @linklibs, platform->convertext($_);
+ } else {
+ my $d = "-L" . dirname($_);
+ my $l = basename($_);
+ $l =~ s/^lib//;
+ $l = "-l" . $l;
+ push @linklibs, $l;
+ push @linkdirs, $d unless grep { $d eq $_ } @linkdirs;
+ }
+ }
+ my $linkflags = join("", map { $_." " } @linkdirs);
+ my $linklibs = join("", map { $_." " } @linklibs);
+ my @objs = map { platform->convertext($_) }
+ grep { !platform->isdef($_) }
+ @{$args{objs}};
+ my @defs = map { platform->def($_) }
+ grep { platform->isdef($_) }
+ @{$args{objs}};
+ my @deps = compute_lib_depends(@{$args{deps}});
+ die "More than one exported symbol map" if scalar @defs > 1;
+
+ my $full = platform->sharedlib($args{lib});
+ # $import is for Windows and subsystems thereof, where static import
+ # libraries for DLLs are a thing. On platforms that have this mechanism,
+ # $import has the name of this import library. On platforms that don't
+ # have this mechanism, $import will be |undef|.
+ my $import = platform->sharedlib_import($args{lib});
+ # $simple is for platforms where full shared library names include the
+ # shared library version, and there's a simpler name that doesn't include
+ # that version. On such platforms, $simple has the simpler name. On
+ # other platforms, it will be |undef|.
+ my $simple = platform->sharedlib_simple($args{lib});
+
+ my $argfile = defined $target{shared_argfileflag} ? $full.".args" : undef;
+ my $shared_soname = "";
+ $shared_soname .= ' '.$target{shared_sonameflag}.basename($full)
+ if defined $target{shared_sonameflag};
+ my $shared_imp = "";
+ $shared_imp .= ' '.$target{shared_impflag}.basename($import)
+ if defined $target{shared_impflag} && defined $import;
+ my $shared_def = join("", map { ' '.$target{shared_defflag}.$_ } @defs);
+
+ # There is at least one platform where the compiler-as-linker needs to
+ # have one object file directly on the command line. That won't hurt
+ # any other platform, so we do that for everyone when there's an argfile
+ # to be had. This depends heavily on splice, which removes elements from
+ # the given array, and returns them so they can be captured.
+ my @argfileobjs = $argfile
+ ? splice(@objs, 1)
+ : ();
+ my $argfilecmds = $argfile
+ ? join("\n\t", map { "echo $_ >> $argfile" } @argfileobjs)
+ : undef;
+ my $argfiledeps = $argfile
+ ? join(" \\\n" . ' ' x (length($argfile) + 2),
+ fill_lines(' ', $COLUMNS - length($full) - 2, @argfileobjs))
+ : undef;
+ my @fulldeps = (@objs, ($argfile ? $argfile : ()), @defs, @deps);
+ my @fullobjs = (
+ @objs,
+ ($argfile ? $target{shared_argfileflag}.$argfile : ())
+ );
+ my $fulldeps =
+ join(" \\\n" . ' ' x (length($full) + 2),
+ fill_lines(' ', $COLUMNS - length($full) - 2, @fulldeps));
+ my $fullobjs =
+ join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @fullobjs));
+
+ my $recipe = '';
+
+ if (defined $simple && $simple ne $full) {
+ if (sharedaix()) {
+ $recipe .= <<"EOF";
+$simple: $full
+ rm -f $simple && \\
+ \$(AR) r $simple $full
+EOF
+ } else {
+ $recipe .= <<"EOF";
+$simple: $full
+ rm -f $simple && \\
+ ln -s $full $simple
+EOF
+ }
+ }
+ if (defined $import) {
+ $recipe .= <<"EOF";
+$import: $full
+EOF
+ }
+ $recipe .= <<"EOF";
+$full: $fulldeps
+ \$(CC) \$(LIB_CFLAGS) $linkflags\$(LIB_LDFLAGS)$shared_soname$shared_imp \\
+ -o $full$shared_def \\
+ $fullobjs \\
+ $linklibs \$(LIB_EX_LIBS)
+EOF
+ if (windowsdll()) {
+ $recipe .= <<"EOF";
+ rm -f apps/$full
+ rm -f fuzz/$full
+ cp -p $full apps/
+ cp -p $full fuzz/
+EOF
+ if (!$disabled{tests}) {
+ $recipe .= <<"EOF";
+ rm -f test/$full
+ cp -p $full test/
+EOF
+ }
+ }
+ $recipe .= <<"EOF" if defined $argfile;
+$argfile: $argfiledeps
+ \$(RM) $argfile
+ $argfilecmds
+EOF
+ return $recipe;
+ }
+ sub obj2dso {
+ my %args = @_;
+ my $dso = platform->dso($args{module});
+ my @linkdirs = ();
+ my @linklibs = ();
+ foreach (@{$args{deps}}) {
+ next unless defined $_;
+ if (platform->isstaticlib($_)) {
+ push @linklibs, platform->convertext($_);
+ } else {
+ my $d = "-L" . dirname($_);
+ my $l = basename($_);
+ $l =~ s/^lib//;
+ $l = "-l" . $l;
+ push @linklibs, $l;
+ push @linkdirs, $d unless grep { $d eq $_ } @linkdirs;
+ }
+ }
+ my $linkflags = join("", map { $_." " } @linkdirs);
+ my $linklibs = join("", map { $_." " } @linklibs);
+ my @objs = map { platform->convertext($_) }
+ grep { !platform->isdef($_) }
+ @{$args{objs}};
+ my @defs = map { platform->def($_) }
+ grep { platform->isdef($_) }
+ @{$args{objs}};
+ my @deps = compute_lib_depends(@{$args{deps}});
+ my $shared_def = join("", map { ' '.$target{shared_defflag}.$_ } @defs);
+ # Next line needs to become "less magic" (see PR #11950)
+ $shared_def .= ' '.$target{shared_fipsflag} if (defined $target{shared_fipsflag} && $shared_def =~ m/providers\/fips/);
+ my $objs = join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @objs));
+ my $deps = join(" \\\n" . ' ' x (length($dso) + 2),
+ fill_lines(' ', $COLUMNS - length($dso) - 2,
+ @objs, @defs, @deps));
+
+ return <<"EOF";
+$dso: $deps
+ \$(CC) \$(DSO_CFLAGS) $linkflags\$(DSO_LDFLAGS) \\
+ -o $dso$shared_def \\
+ $objs \\
+ $linklibs\$(DSO_EX_LIBS)
+EOF
+ }
+ sub obj2lib {
+ my %args = @_;
+ my $lib = platform->staticlib($args{lib});
+ my @objs = map { platform->obj($_) } @{$args{objs}};
+ my $deps = join(" \\\n" . ' ' x (length($lib) + 2),
+ fill_lines(' ', $COLUMNS - length($lib) - 2, @objs));
+ my $max_per_call = 500;
+ my @objs_grouped;
+ push @objs_grouped, join(" ", splice @objs, 0, $max_per_call) while @objs;
+ my $fill_lib =
+ join("\n\t", (map { "\$(AR) \$(ARFLAGS) $lib $_" } @objs_grouped));
+ return <<"EOF";
+$lib: $deps
+ \$(RM) $lib
+ $fill_lib
+ \$(RANLIB) \$\@ || echo Never mind.
+EOF
+ }
+ sub obj2bin {
+ my %args = @_;
+ my $bin = platform->bin($args{bin});
+ my @objs = map { platform->obj($_) } @{$args{objs}};
+ my @deps = compute_lib_depends(@{$args{deps}});
+ my $objs = join(" \\\n" . ' ' x (length($bin) + 2),
+ fill_lines(' ', $COLUMNS - length($bin) - 2, @objs));
+ my @linkdirs = ();
+ my @linklibs = ();
+ foreach (@{$args{deps}}) {
+ next unless defined $_;
+ if (platform->isstaticlib($_)) {
+ push @linklibs, platform->convertext($_);
+ } else {
+ my $d = "-L" . dirname($_);
+ my $l = basename($_);
+ $l =~ s/^lib//;
+ $l = "-l" . $l;
+ push @linklibs, $l;
+ push @linkdirs, $d unless grep { $d eq $_ } @linkdirs;
+ }
+ }
+ my $linkflags = join("", map { $_." " } @linkdirs);
+ my $linklibs = join("", map { $_." " } @linklibs);
+ my $cmd = '$(CC)';
+ my $cmdflags = '$(BIN_CFLAGS)';
+ if (grep /_cc\.o$/, @{$args{objs}}) {
+ $cmd = '$(CXX)';
+ $cmdflags = '$(BIN_CXXFLAGS)';
+ }
+
+ my $objs = join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @objs));
+ my $deps = join(" \\\n" . ' ' x (length($bin) + 2),
+ fill_lines(' ', $COLUMNS - length($bin) - 2,
+ @objs, @deps));
+
+ return <<"EOF";
+$bin: $deps
+ rm -f $bin
+ \$\${LDCMD:-$cmd} $cmdflags $linkflags\$(BIN_LDFLAGS) \\
+ -o $bin \\
+ $objs \\
+ $linklibs\$(BIN_EX_LIBS)
+EOF
+ }
+ sub in2script {
+ my %args = @_;
+ my $script = $args{script};
+ my $sources = join(" ", @{$args{sources}});
+ my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
+ "util", "dofile.pl")),
+ rel2abs($config{builddir}));
+ return <<"EOF";
+$script: $sources configdata.pm
+ \$(RM) "$script"
+ \$(PERL) "-I\$(BLDDIR)" -Mconfigdata "$dofile" \\
+ "-o$target{build_file}" $sources > "$script"
+ chmod a+x $script
+EOF
+ }
+ sub generatedir {
+ my %args = @_;
+ my $dir = $args{dir};
+ my @deps = compute_platform_depends(@{$args{deps}});
+ my @comments = ();
+
+ # We already have a 'test' target, and the top directory is just plain
+ # silly
+ return if $dir eq "test" || $dir eq ".";
+
+ foreach my $type (("dso", "lib", "bin", "script")) {
+ next unless defined($unified_info{dirinfo}->{$dir}->{products}->{$type});
+ # For lib object files, we could update the library. However, it
+ # was decided that it's enough to build the directory local object
+ # files, so we don't need to add any actions, and the dependencies
+ # are already taken care of.
+ if ($type ne "lib") {
+ foreach my $prod (@{$unified_info{dirinfo}->{$dir}->{products}->{$type}}) {
+ if (dirname($prod) eq $dir) {
+ push @deps, compute_platform_depends($prod);
+ } else {
+ push @comments, "# No support to produce $type ".join(", ", @{$unified_info{dirinfo}->{$dir}->{products}->{$type}});
+ }
+ }
+ }
+ }
+
+ my $target = "$dir $dir/";
+ my $deps = join(" \\\n\t",
+ fill_lines(' ', $COLUMNS - 8, @deps));
+ my $comments = join("\n", "", @comments);
+ return <<"EOF";
+$target: \\
+ $deps$comments
+EOF
+ }
+ "" # Important! This becomes part of the template result.
+-}
diff --git a/Configurations/unix-checker.pm b/Configurations/unix-checker.pm
new file mode 100644
index 000000000000..d0f05a0d3504
--- /dev/null
+++ b/Configurations/unix-checker.pm
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+
+use Config;
+
+# Check that the perl implementation file modules generate paths that
+# we expect for the platform
+use File::Spec::Functions qw(:DEFAULT rel2abs);
+
+if (rel2abs('.') !~ m|/|) {
+ die <<EOF;
+
+******************************************************************************
+This perl implementation doesn't produce Unix like paths (with forward slash
+directory separators). Please use an implementation that matches your
+building platform.
+
+This Perl version: $Config{version} for $Config{archname}
+******************************************************************************
+EOF
+}
+
+1;
diff --git a/Configurations/windows-checker.pm b/Configurations/windows-checker.pm
new file mode 100644
index 000000000000..97303ed7d7ce
--- /dev/null
+++ b/Configurations/windows-checker.pm
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+
+use Config;
+
+# Check that the perl implementation file modules generate paths that
+# we expect for the platform
+use File::Spec::Functions qw(:DEFAULT rel2abs);
+
+if (!$ENV{CONFIGURE_INSIST} && rel2abs('.') !~ m|\\|) {
+ die <<EOF;
+
+******************************************************************************
+This perl implementation doesn't produce Windows like paths (with backward
+slash directory separators). Please use an implementation that matches your
+building platform.
+
+This Perl version: $Config{version} for $Config{archname}
+******************************************************************************
+EOF
+}
+
+1;
diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl
new file mode 100644
index 000000000000..c36efc7d8a64
--- /dev/null
+++ b/Configurations/windows-makefile.tmpl
@@ -0,0 +1,1050 @@
+##
+## Makefile for OpenSSL
+##
+## {- join("\n## ", @autowarntext) -}
+{-
+ use File::Basename;
+ use OpenSSL::Util;
+
+ our $sover_dirname = platform->shlib_version_as_filename();
+
+ my $build_scheme = $target{build_scheme};
+ my $install_flavour = $build_scheme->[$#$build_scheme]; # last element
+ my $win_installenv =
+ $install_flavour eq "VC-WOW" ? "ProgramFiles(x86)"
+ : "ProgramW6432";
+ my $win_commonenv =
+ $install_flavour eq "VC-WOW" ? "CommonProgramFiles(x86)"
+ : "CommonProgramW6432";
+ our $win_installroot =
+ defined($ENV{$win_installenv}) ? $win_installenv : 'ProgramFiles';
+ our $win_commonroot =
+ defined($ENV{$win_commonenv}) ? $win_commonenv : 'CommonProgramFiles';
+
+ # expand variables early
+ $win_installroot = $ENV{$win_installroot};
+ $win_commonroot = $ENV{$win_commonroot};
+
+ # This makes sure things get built in the order they need
+ # to. You're welcome.
+ sub dependmagic {
+ my $target = shift;
+
+ return "$target: build_generated\n\t\$(MAKE) /\$(MAKEFLAGS) depend\n\t\$(MAKE) /\$(MAKEFLAGS) _$target\n_$target";
+ }
+ '';
+-}
+
+PLATFORM={- $config{target} -}
+SRCDIR={- $config{sourcedir} -}
+BLDDIR={- $config{builddir} -}
+FIPSKEY={- $config{FIPSKEY} -}
+
+VERSION={- "$config{full_version}" -}
+VERSION_NUMBER={- "$config{version}" -}
+MAJOR={- $config{major} -}
+MINOR={- $config{minor} -}
+
+SHLIB_VERSION_NUMBER={- $config{shlib_version} -}
+
+LIBS={- join(" ", map { ( platform->sharedlib_import($_), platform->staticlib($_) ) } @{$unified_info{libraries}}) -}
+SHLIBS={- join(" ", map { platform->sharedlib($_) // () } @{$unified_info{libraries}}) -}
+SHLIBPDBS={- join(" ", map { platform->sharedlibpdb($_) // () } @{$unified_info{libraries}}) -}
+MODULES={- our @MODULES = map { platform->dso($_) }
+ # Drop all modules that are dependencies, they will
+ # be processed through their dependents
+ grep { my $x = $_;
+ !grep { grep { $_ eq $x } @$_ }
+ values %{$unified_info{depends}} }
+ @{$unified_info{modules}};
+ join(" ", @MODULES) -}
+MODULEPDBS={- join(" ", map { platform->dsopdb($_) } @{$unified_info{modules}}) -}
+FIPSMODULE={- # We do some extra checking here, as there should be only one
+ use File::Basename;
+ our @fipsmodules =
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}};
+ die "More that one FIPS module" if scalar @fipsmodules > 1;
+ join(" ", map { platform->dso($_) } @fipsmodules) -}
+FIPSMODULENAME={- die "More that one FIPS module" if scalar @fipsmodules > 1;
+ join(", ", map { basename(platform->dso($_)) } @fipsmodules) -}
+PROGRAMS={- our @PROGRAMS = map { platform->bin($_) } @{$unified_info{programs}}; join(" ", @PROGRAMS) -}
+PROGRAMPDBS={- join(" ", map { $_.".pdb" } @{$unified_info{programs}}) -}
+SCRIPTS={- our @SCRIPTS = @{$unified_info{scripts}}; join(" ", @SCRIPTS) -}
+{- output_off() if $disabled{makedepend}; "" -}
+DEPS={- join(" ", map { platform->isobj($_) ? platform->dep($_) : () }
+ grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
+ keys %{$unified_info{sources}}); -}
+{- output_on() if $disabled{makedepend}; "" -}
+GENERATED_MANDATORY={- our @GENERATED_MANDATORY = @{$unified_info{depends}->{""}};
+ join(" ", @GENERATED_MANDATORY) -}
+GENERATED={- # common0.tmpl provides @generated
+ our @GENERATED = map { platform->convertext($_) } @generated;
+ join(" ", @GENERATED) -}
+
+INSTALL_LIBS={-
+ join(" ", map { quotify1(platform->sharedlib_import($_)
+ // platform->staticlib($_)) }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}})
+-}
+INSTALL_SHLIBS={-
+ join(" ", map { my $x = platform->sharedlib($_);
+ $x ? quotify_l($x) : () }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}})
+-}
+INSTALL_SHLIBPDBS={-
+ join(" ", map { my $x = platform->sharedlibpdb($_);
+ $x ? quotify_l($x) : () }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}})
+-}
+INSTALL_ENGINES={-
+ join(" ", map { quotify1(platform->dso($_)) }
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{engine} }
+ @{$unified_info{modules}})
+-}
+INSTALL_ENGINEPDBS={-
+ join(" ", map { quotify1(platform->dsopdb($_)) }
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{engine} }
+ @{$unified_info{modules}})
+-}
+INSTALL_MODULES={-
+ join(" ", map { quotify1(platform->dso($_)) }
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && !$unified_info{attributes}->{modules}->{$_}->{engine}
+ && !$unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}})
+-}
+INSTALL_MODULEPDBS={-
+ join(" ", map { quotify1(platform->dsopdb($_)) }
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && !$unified_info{attributes}->{modules}->{$_}->{engine} }
+ @{$unified_info{modules}})
+-}
+INSTALL_FIPSMODULE={-
+ join(" ", map { quotify1(platform->dso($_)) }
+ grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
+ && $unified_info{attributes}->{modules}->{$_}->{fips} }
+ @{$unified_info{modules}})
+-}
+INSTALL_FIPSMODULECONF=providers\fipsmodule.cnf
+INSTALL_PROGRAMS={-
+ join(" ", map { quotify1(platform->bin($_)) }
+ grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
+ @{$unified_info{programs}})
+-}
+INSTALL_PROGRAMPDBS={-
+ join(" ", map { quotify1(platform->binpdb($_)) }
+ grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
+ @{$unified_info{programs}})
+-}
+BIN_SCRIPTS={-
+ join(" ", map { quotify1($_) }
+ grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
+ && !$unified_info{attributes}->{scripts}->{$_}->{misc} }
+ @{$unified_info{scripts}})
+-}
+MISC_SCRIPTS={-
+ join(" ", map { quotify1($_) }
+ grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
+ && $unified_info{attributes}->{scripts}->{$_}->{misc} }
+ @{$unified_info{scripts}})
+-}
+IMAGEDOCS1={- our @IMAGEDOCS1 = @{$unified_info{imagedocs}->{man1}};
+ join(" ", @IMAGEDOCS1) -}
+IMAGEDOCS3={- our @IMAGEDOCS3 = @{$unified_info{imagedocs}->{man3}};
+ join(" ", @IMAGEDOCS3) -}
+IMAGEDOCS5={- our @IMAGEDOCS5 = @{$unified_info{imagedocs}->{man5}};
+ join(" ", @IMAGEDOCS5) -}
+IMAGEDOCS7={- our @IMAGEDOCS7 = @{$unified_info{imagedocs}->{man7}};
+ join(" ", @IMAGEDOCS7) -}
+HTMLDOCS1={- our @HTMLDOCS1 = @{$unified_info{htmldocs}->{man1}};
+ join(" ", @HTMLDOCS1) -}
+HTMLDOCS3={- our @HTMLDOCS3 = @{$unified_info{htmldocs}->{man3}};
+ join(" ", @HTMLDOCS3) -}
+HTMLDOCS5={- our @HTMLDOCS5 = @{$unified_info{htmldocs}->{man5}};
+ join(" ", @HTMLDOCS5) -}
+HTMLDOCS7={- our @HTMLDOCS7 = @{$unified_info{htmldocs}->{man7}};
+ join(" ", @HTMLDOCS7) -}
+HTMLDOCS1_BLDDIRS={- my %dirs = map { dirname($_) => 1 } @HTMLDOCS1;
+ join(' ', sort keys %dirs) -}
+HTMLDOCS3_BLDDIRS={- my %dirs = map { dirname($_) => 1 } @HTMLDOCS3;
+ join(' ', sort keys %dirs) -}
+HTMLDOCS5_BLDDIRS={- my %dirs = map { dirname($_) => 1 } @HTMLDOCS5;
+ join(' ', sort keys %dirs) -}
+HTMLDOCS7_BLDDIRS={- my %dirs = map { dirname($_) => 1 } @HTMLDOCS7;
+ join(' ', sort keys %dirs) -}
+
+APPS_OPENSSL="{- use File::Spec::Functions;
+ catfile("apps","openssl") -}"
+
+# Do not edit these manually. Use Configure with --prefix or --openssldir
+# to change this! Short explanation in the top comment in Configure
+INSTALLTOP_dev={- # $prefix is used in the OPENSSLDIR perl snippet
+ #
+ use File::Spec::Functions qw(:DEFAULT splitpath);
+ our $prefix = canonpath($config{prefix}
+ || "$win_installroot\\OpenSSL");
+ our ($prefix_dev, $prefix_dir, $prefix_file) =
+ splitpath($prefix, 1);
+ $prefix_dev -}
+INSTALLTOP_dir={- canonpath($prefix_dir) -}
+OPENSSLDIR_dev={- #
+ # The logic here is that if no --openssldir was given,
+ # OPENSSLDIR will get the value "$win_commonroot\\SSL".
+ # If --openssldir was given and the value is an absolute
+ # path, OPENSSLDIR will get its value without change.
+ # If the value from --openssldir is a relative path,
+ # OPENSSLDIR will get $prefix with the --openssldir
+ # value appended as a subdirectory.
+ #
+ use File::Spec::Functions qw(:DEFAULT splitpath);
+ our $openssldir =
+ $config{openssldir} ?
+ (file_name_is_absolute($config{openssldir}) ?
+ canonpath($config{openssldir})
+ : catdir($prefix, $config{openssldir}))
+ : canonpath("$win_commonroot\\SSL");
+ our ($openssldir_dev, $openssldir_dir, $openssldir_file) =
+ splitpath($openssldir, 1);
+ $openssldir_dev -}
+OPENSSLDIR_dir={- canonpath($openssldir_dir) -}
+LIBDIR={- our $libdir = $config{libdir} || "lib";
+ file_name_is_absolute($libdir) ? "" : $libdir -}
+MODULESDIR_dev={- use File::Spec::Functions qw(:DEFAULT splitpath catpath);
+ our $modulesprefix = catdir($prefix,$libdir);
+ our ($modulesprefix_dev, $modulesprefix_dir,
+ $modulesprefix_file) =
+ splitpath($modulesprefix, 1);
+ our $modulesdir_dev = $modulesprefix_dev;
+ our $modulesdir_dir =
+ catdir($modulesprefix_dir, "ossl-modules");
+ our $modulesdir = catpath($modulesdir_dev, $modulesdir_dir);
+ our $enginesdir_dev = $modulesprefix_dev;
+ our $enginesdir_dir =
+ catdir($modulesprefix_dir, "engines-$sover_dirname");
+ our $enginesdir = catpath($enginesdir_dev, $enginesdir_dir);
+ $modulesdir_dev -}
+MODULESDIR_dir={- canonpath($modulesdir_dir) -}
+ENGINESDIR_dev={- $enginesdir_dev -}
+ENGINESDIR_dir={- canonpath($enginesdir_dir) -}
+!IF "$(DESTDIR)" != ""
+INSTALLTOP=$(DESTDIR)$(INSTALLTOP_dir)
+OPENSSLDIR=$(DESTDIR)$(OPENSSLDIR_dir)
+ENGINESDIR=$(DESTDIR)$(ENGINESDIR_dir)
+MODULESDIR=$(DESTDIR)$(MODULESDIR_dir)
+!ELSE
+INSTALLTOP=$(INSTALLTOP_dev)$(INSTALLTOP_dir)
+OPENSSLDIR=$(OPENSSLDIR_dev)$(OPENSSLDIR_dir)
+ENGINESDIR=$(ENGINESDIR_dev)$(ENGINESDIR_dir)
+MODULESDIR=$(MODULESDIR_dev)$(MODULESDIR_dir)
+!ENDIF
+
+# $(libdir) is chosen to be compatible with the GNU coding standards
+libdir={- file_name_is_absolute($libdir)
+ ? $libdir : '$(INSTALLTOP)\$(LIBDIR)' -}
+
+##### User defined commands and flags ################################
+
+CC="{- $config{CC} -}"
+CPP={- $config{CPP} -}
+CPPFLAGS={- our $cppflags1 = join(" ",
+ (map { "-D".$_} @{$config{CPPDEFINES}}),
+ (map { " -I".$_} @{$config{CPPINCLUDES}}),
+ @{$config{CPPFLAGS}}) -}
+CFLAGS={- join(' ', @{$config{CFLAGS}}) -}
+LD="{- $config{LD} -}"
+LDFLAGS={- join(' ', @{$config{LDFLAGS}}) -}
+EX_LIBS={- join(' ', @{$config{LDLIBS}}) -}
+
+PERL={- $config{PERL} -}
+
+AR="{- $config{AR} -}"
+ARFLAGS= {- join(' ', @{$config{ARFLAGS}}) -}
+
+MT="{- $config{MT} -}"
+MTFLAGS= {- join(' ', @{$config{MTFLAGS}}) -}
+
+AS="{- $config{AS} -}"
+ASFLAGS={- join(' ', @{$config{ASFLAGS}}) -}
+
+RC="{- $config{RC} -}"
+RCFLAGS={- join(' ', @{$config{RCFLAGS}}) -}
+
+ECHO="$(PERL)" "$(SRCDIR)\util\echo.pl"
+
+##### Special command flags ##########################################
+
+COUTFLAG={- $target{coutflag} -}$(OSSL_EMPTY)
+LDOUTFLAG={- $target{ldoutflag} -}$(OSSL_EMPTY)
+AROUTFLAG={- $target{aroutflag} -}$(OSSL_EMPTY)
+MTINFLAG={- $target{mtinflag} -}$(OSSL_EMPTY)
+MTOUTFLAG={- $target{mtoutflag} -}$(OSSL_EMPTY)
+ASOUTFLAG={- $target{asoutflag} -}$(OSSL_EMPTY)
+RCOUTFLAG={- $target{rcoutflag} -}$(OSSL_EMPTY)
+
+##### Project flags ##################################################
+
+# Variables starting with CNF_ are common variables for all product types
+
+CNF_ASFLAGS={- join(' ', $target{asflags} || (),
+ @{$config{asflags}}) -}
+CNF_CPPFLAGS={- our $cppflags2 =
+ join(' ', $target{cppflags} || (),
+ (map { '-D'.quotify1($_) } @{$target{defines}},
+ @{$config{defines}}),
+ (map { '-I'.'"'.$_.'"' } @{$target{includes}},
+ @{$config{includes}}),
+ @{$config{cppflags}}) -}
+CNF_CFLAGS={- join(' ', $target{cflags} || (),
+ @{$config{cflags}}) -}
+CNF_CXXFLAGS={- join(' ', $target{cxxflags} || (),
+ @{$config{cxxflags}}) -}
+CNF_LDFLAGS={- join(' ', $target{lflags} || (),
+ @{$config{lflags}}) -}
+CNF_EX_LIBS={- join(' ', $target{ex_libs} || (),
+ @{$config{ex_libs}}) -}
+
+# Variables starting with LIB_ are used to build library object files
+# and shared libraries.
+# Variables starting with DSO_ are used to build DSOs and their object files.
+# Variables starting with BIN_ are used to build programs and their object
+# files.
+
+LIB_ASFLAGS={- join(' ', $target{lib_asflags} || (),
+ @{$config{lib_asflags}},
+ '$(CNF_ASFLAGS)', '$(ASFLAGS)') -}
+LIB_CPPFLAGS={- our $lib_cppflags =
+ join(' ', $target{lib_cppflags} || (),
+ $target{shared_cppflag} || (),
+ (map { '-D'.quotify1($_) }
+ @{$target{lib_defines}},
+ @{$target{shared_defines}},
+ @{$config{lib_defines}},
+ @{$config{shared_defines}}),
+ (map { '-I'.quotify1($_) }
+ @{$target{lib_includes}},
+ @{$target{shared_includes}},
+ @{$config{lib_includes}},
+ @{$config{shared_includes}}),
+ @{$config{lib_cppflags}},
+ @{$config{shared_cppflag}});
+ join(' ', $lib_cppflags,
+ (map { '-D'.quotify1($_) }
+ "OPENSSLDIR=\"$openssldir\"",
+ "ENGINESDIR=\"$enginesdir\"",
+ "MODULESDIR=\"$modulesdir\""),
+ '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
+LIB_CFLAGS={- join(' ', $target{lib_cflags} || (),
+ $target{shared_cflag} || (),
+ @{$config{lib_cflags}},
+ @{$config{shared_cflag}},
+ '$(CNF_CFLAGS)', '$(CFLAGS)') -}
+LIB_LDFLAGS={- join(' ', $target{shared_ldflag} || (),
+ $config{shared_ldflag} || (),
+ '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
+LIB_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
+DSO_ASFLAGS={- join(' ', $target{dso_asflags} || (),
+ $target{module_asflags} || (),
+ @{$config{dso_asflags}},
+ @{$config{module_asflags}},
+ '$(CNF_ASFLAGS)', '$(ASFLAGS)') -}
+DSO_CPPFLAGS={- join(' ', $target{dso_cppflags} || (),
+ $target{module_cppflag} || (),
+ (map { '-D'.quotify1($_) }
+ @{$target{dso_defines}},
+ @{$target{module_defines}},
+ @{$config{dso_defines}},
+ @{$config{module_defines}}),
+ (map { '-I'.quotify1($_) }
+ @{$target{dso_includes}},
+ @{$target{module_includes}},
+ @{$config{dso_includes}},
+ @{$config{module_includes}}),
+ @{$config{dso_cppflags}},
+ @{$config{module_cppflags}},
+ '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
+DSO_CFLAGS={- join(' ', $target{dso_cflags} || (),
+ $target{module_cflags} || (),
+ @{$config{dso_cflags}},
+ @{$config{module_cflags}},
+ '$(CNF_CFLAGS)', '$(CFLAGS)') -}
+DSO_LDFLAGS={- join(' ', $target{dso_lflags} || (),
+ $target{module_ldflags} || (),
+ @{$config{dso_lflags}},
+ @{$config{module_ldflags}},
+ '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
+DSO_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
+BIN_ASFLAGS={- join(' ', $target{bin_asflags} || (),
+ @{$config{bin_asflags}},
+ '$(CNF_ASFLAGS)', '$(ASFLAGS)') -}
+BIN_CPPFLAGS={- join(' ', $target{bin_cppflags} || (),
+ (map { '-D'.$_ } @{$config{bin_defines} || ()}),
+ @{$config{bin_cppflags}},
+ '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
+BIN_CFLAGS={- join(' ', $target{bin_cflags} || (),
+ @{$config{bin_cflags}},
+ '$(CNF_CFLAGS)', '$(CFLAGS)') -}
+BIN_LDFLAGS={- join(' ', $target{bin_lflags} || (),
+ @{$config{bin_lflags}},
+ '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
+BIN_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
+
+# CPPFLAGS_Q is used for one thing only: to build up buildinf.h
+CPPFLAGS_Q={- $cppflags1 =~ s|([\\"])|\\$1|g;
+ $cppflags2 =~ s|([\\"])|\\$1|g;
+ join(' ', $lib_cppflags || (), $cppflags2 || (),
+ $cppflags1 || ()) -}
+
+PERLASM_SCHEME= {- $target{perlasm_scheme} -}
+
+PROCESSOR= {- $config{processor} -}
+
+# The main targets ###################################################
+
+{- dependmagic('build_sw'); -}: build_libs_nodep build_modules_nodep build_programs_nodep copy-utils
+{- dependmagic('build_libs'); -}: build_libs_nodep
+{- dependmagic('build_modules'); -}: build_modules_nodep
+{- dependmagic('build_programs'); -}: build_programs_nodep
+
+build_docs: build_html_docs
+build_html_docs: $(HTMLDOCS1) $(HTMLDOCS3) $(HTMLDOCS5) $(HTMLDOCS7)
+ @
+build_generated: $(GENERATED_MANDATORY)
+ @
+build_libs_nodep: $(LIBS) {- join(" ",map { platform->sharedlib_import($_) // () } @{$unified_info{libraries}}) -}
+ @
+build_modules_nodep: $(MODULES)
+ @
+build_programs_nodep: $(PROGRAMS) $(SCRIPTS)
+ @
+
+# Kept around for backward compatibility
+build_apps build_tests: build_programs
+
+# Convenience target to prebuild all generated files, not just the mandatory
+# ones
+build_all_generated: $(GENERATED_MANDATORY) $(GENERATED) build_docs
+ @{- output_off() if $disabled{makedepend}; "\@rem" -}
+ @$(ECHO) "Warning: consider configuring with no-makedepend, because if"
+ @$(ECHO) " target system doesn't have $(PERL),"
+ @$(ECHO) " then make will fail..."
+ @{- output_on() if $disabled{makedepend}; "\@rem" -}
+
+all: build_sw build_docs
+
+test: tests
+{- dependmagic('tests'); -}: build_programs_nodep build_modules_nodep copy-utils
+ $(MAKE) /$(MAKEFLAGS) run_tests
+run_tests:
+ @{- output_off() if $disabled{tests}; "\@rem" -}
+ cmd /C "set "SRCTOP=$(SRCDIR)" & set "BLDTOP=$(BLDDIR)" & set "PERL=$(PERL)" & set "FIPSKEY=$(FIPSKEY)" & "$(PERL)" "$(SRCDIR)\test\run_tests.pl" $(TESTS)"
+ @{- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
+ @$(ECHO) "Tests are not supported with your chosen Configure options"
+ @{- output_on() if !$disabled{tests}; "\@rem" -}
+
+list-tests:
+ @{- output_off() if $disabled{tests}; "\@rem" -}
+ @cmd /C "set "SRCTOP=$(SRCDIR)" & "$(PERL)" "$(SRCDIR)\test\run_tests.pl" list"
+ @{- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
+ @$(ECHO) "Tests are not supported with your chosen Configure options"
+ @{- output_on() if !$disabled{tests}; "\@rem" -}
+
+install: install_sw install_ssldirs install_docs {- $disabled{fips} ? "" : "install_fips" -}
+
+uninstall: uninstall_docs uninstall_sw {- $disabled{fips} ? "" : "uninstall_fips" -}
+
+libclean:
+ "$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """{.,apps,test,fuzz}/$$1.*"""; } @ARGV" $(SHLIBS)
+ -del /Q /F $(LIBS) libcrypto.* libssl.* ossl_static.pdb
+
+clean: libclean
+ {- join("\n\t", map { "-del /Q /F $_" } @HTMLDOCS1) || "\@rem" -}
+ {- join("\n\t", map { "-del /Q /F $_" } @HTMLDOCS3) || "\@rem" -}
+ {- join("\n\t", map { "-del /Q /F $_" } @HTMLDOCS5) || "\@rem" -}
+ {- join("\n\t", map { "-del /Q /F $_" } @HTMLDOCS7) || "\@rem" -}
+ {- join("\n\t", map { "-del /Q /F $_" } @PROGRAMS) || "\@rem" -}
+ {- join("\n\t", map { "-del /Q /F $_" } @MODULES) || "\@rem" -}
+ {- join("\n\t", map { "-del /Q /F $_" } @SCRIPTS) || "\@rem" -}
+ {- join("\n\t", map { "-del /Q /F $_" } @GENERATED_MANDATORY) || "\@rem" -}
+ {- join("\n\t", map { "-del /Q /F $_" } @GENERATED) || "\@rem" -}
+ -del /Q /S /F *.d *.obj *.pdb *.ilk *.manifest
+ -del /Q /S /F engines\*.lib engines\*.exp
+ -del /Q /S /F apps\*.lib apps\*.rc apps\*.res apps\*.exp
+ -del /Q /S /F test\*.exp
+ -rd /Q /S test\test-runs
+
+distclean: clean
+ -del /Q /F include\openssl\configuration.h
+ -del /Q /F configdata.pm
+ -del /Q /F makefile
+
+depend: makefile
+ @ {- output_off() if $disabled{makedepend}; "\@rem" -}
+ @ "$(PERL)" "$(SRCDIR)\util\add-depends.pl" "{- $target{makedep_scheme} -}"
+ @ {- output_on() if $disabled{makedepend}; "\@rem" -}
+
+# Install helper targets #############################################
+
+install_sw: install_dev install_engines install_modules install_runtime
+
+uninstall_sw: uninstall_runtime uninstall_modules uninstall_engines uninstall_dev
+
+install_docs: install_html_docs
+
+uninstall_docs: uninstall_html_docs
+
+{- output_off() if $disabled{fips}; "" -}
+install_fips: build_sw $(INSTALL_FIPSMODULECONF)
+# @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(MODULESDIR)"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)"
+ @$(ECHO) "*** Installing FIPS module"
+ @$(ECHO) "install $(INSTALL_FIPSMODULE) -> $(MODULESDIR)\$(FIPSMODULENAME)"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(INSTALL_FIPSMODULE)" "$(MODULESDIR)"
+ @$(ECHO) "*** Installing FIPS module configuration"
+ @$(ECHO) "install $(INSTALL_FIPSMODULECONF) -> $(OPENSSLDIR)\fipsmodule.cnf"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(INSTALL_FIPSMODULECONF)" "$(OPENSSLDIR)"
+
+uninstall_fips:
+ @$(ECHO) "*** Uninstalling FIPS module configuration"
+ $(RM) "$(OPENSSLDIR)\fipsmodule.cnf"
+ @$(ECHO) "*** Uninstalling FIPS module"
+ $(RM) "$(MODULESDIR)\$(FIPSMODULENAME)"
+{- if ($disabled{fips}) { output_on(); } else { output_off(); } "" -}
+install_fips:
+ @$(ECHO) "The 'install_fips' target requires the 'enable-fips' option"
+
+uninstall_fips:
+ @$(ECHO) "The 'uninstall_fips' target requires the 'enable-fips' option"
+{- output_on() if !$disabled{fips}; "" -}
+
+install_ssldirs:
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)\certs"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)\private"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)\misc"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\openssl.cnf" \
+ "$(OPENSSLDIR)\openssl.cnf.dist"
+ @IF NOT EXIST "$(OPENSSLDIR)\openssl.cnf" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\openssl.cnf" \
+ "$(OPENSSLDIR)\openssl.cnf"
+ @if not "$(MISC_SCRIPTS)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(MISC_SCRIPTS) \
+ "$(OPENSSLDIR)\misc"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\ct_log_list.cnf" \
+ "$(OPENSSLDIR)\ct_log_list.cnf.dist"
+ @IF NOT EXIST "$(OPENSSLDIR)\ct_log_list.cnf" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\ct_log_list.cnf" \
+ "$(OPENSSLDIR)\ct_log_list.cnf"
+
+install_dev: install_runtime_libs
+ @if "$(INSTALLTOP)"=="" ( $(ECHO) "INSTALLTOP should not be empty" & exit 1 )
+ @$(ECHO) "*** Installing development files"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\include\openssl"
+ @{- output_off() if $disabled{uplink}; "" -}
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\ms\applink.c" \
+ "$(INSTALLTOP)\include\openssl"
+ @{- output_on() if $disabled{uplink}; "" -}
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" "-exclude_re=/__DECC_" \
+ "$(SRCDIR)\include\openssl\*.h" \
+ "$(INSTALLTOP)\include\openssl"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(BLDDIR)\include\openssl\*.h" \
+ "$(INSTALLTOP)\include\openssl"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(libdir)"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_LIBS) "$(libdir)"
+ @if "$(SHLIBS)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" ossl_static.pdb "$(libdir)"
+
+uninstall_dev:
+
+_install_modules_deps: install_runtime_libs build_modules
+
+install_engines: _install_modules_deps
+ @if "$(INSTALLTOP)"=="" ( $(ECHO) "INSTALLTOP should not be empty" & exit 1 )
+ @$(ECHO) "*** Installing engines"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(ENGINESDIR)"
+ @if not "$(INSTALL_ENGINES)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_ENGINES) "$(ENGINESDIR)"
+ @if not "$(INSTALL_ENGINES)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_ENGINEPDBS) "$(ENGINESDIR)"
+
+uninstall_engines:
+
+install_modules: _install_modules_deps
+ @if "$(INSTALLTOP)"=="" ( $(ECHO) "INSTALLTOP should not be empty" & exit 1 )
+ @$(ECHO) "*** Installing modules"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(MODULESDIR)"
+ @if not "$(INSTALL_MODULES)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_MODULES) "$(MODULESDIR)"
+ @if not "$(INSTALL_MODULES)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_MODULEPDBS) "$(MODULESDIR)"
+
+uninstall_modules:
+
+install_runtime: install_programs
+
+install_runtime_libs: build_libs
+ @if "$(INSTALLTOP)"=="" ( $(ECHO) "INSTALLTOP should not be empty" & exit 1 )
+ @$(ECHO) "*** Installing runtime libraries"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\bin"
+ @if not "$(SHLIBS)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_SHLIBS) "$(INSTALLTOP)\bin"
+ @if not "$(SHLIBS)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_SHLIBPDBS) \
+ "$(INSTALLTOP)\bin"
+
+install_programs: install_runtime_libs build_programs
+ @if "$(INSTALLTOP)"=="" ( $(ECHO) "INSTALLTOP should not be empty" & exit 1 )
+ @$(ECHO) "*** Installing runtime programs"
+ @if not "$(INSTALL_PROGRAMS)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\bin"
+ @if not "$(INSTALL_PROGRAMS)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_PROGRAMS) \
+ "$(INSTALLTOP)\bin"
+ @if not "$(INSTALL_PROGRAMS)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_PROGRAMPDBS) \
+ "$(INSTALLTOP)\bin"
+ @if not "$(INSTALL_PROGRAMS)"=="" \
+ "$(PERL)" "$(SRCDIR)\util\copy.pl" $(BIN_SCRIPTS) \
+ "$(INSTALLTOP)\bin"
+
+uninstall_runtime:
+
+install_html_docs: install_image_docs build_html_docs
+ @if "$(INSTALLTOP)"=="" ( echo INSTALLTOP should not be empty & exit 1 )
+ @echo *** Installing HTML docs
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\html\man1"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\html\man3"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\html\man5"
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\html\man7"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(BLDDIR)\doc\html\man1\*.html \
+ "$(INSTALLTOP)\html\man1"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(BLDDIR)\doc\html\man3\*.html \
+ "$(INSTALLTOP)\html\man3"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(BLDDIR)\doc\html\man5\*.html \
+ "$(INSTALLTOP)\html\man5"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(BLDDIR)\doc\html\man7\*.html \
+ "$(INSTALLTOP)\html\man7"
+
+uninstall_html_docs: uninstall_image_docs
+
+install_image_docs:
+ @if "$(INSTALLTOP)"=="" ( echo INSTALLTOP should not be empty & exit 1 )
+ @echo *** Installing HTML images
+ @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\html\man7\img"
+ @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(SRCDIR)\doc\man7\img\*.png \
+ "$(INSTALLTOP)\html\man7\img"
+
+uninstall_image_docs:
+
+# Helper targets #####################################################
+
+copy-utils: $(BLDDIR)\apps\openssl.cnf
+
+$(BLDDIR)\apps\openssl.cnf: makefile
+ @if NOT EXIST "$(BLDDIR)\apps" mkdir "$(BLDDIR)\apps"
+ @if NOT "$(SRCDIR)"=="$(BLDDIR)" copy "$(SRCDIR)\apps\$(@F)" "$(BLDDIR)\apps"
+
+# Building targets ###################################################
+
+makefile: configdata.pm {- join(" ", map { '"'.$_.'"' } @{$config{build_file_templates}}) -}
+ @$(ECHO) "Detected changed: $?"
+ "$(PERL)" configdata.pm
+ @$(ECHO) "**************************************************"
+ @$(ECHO) "*** ***"
+ @$(ECHO) "*** Please run the same make command again ***"
+ @$(ECHO) "*** ***"
+ @$(ECHO) "**************************************************"
+ @exit 1
+
+configdata.pm: "$(SRCDIR)\Configure" {- join(" ", map { '"'.$_.'"' } @{$config{build_infos}}, @{$config{conf_files}}) -}
+ @$(ECHO) "Detected changed: $?"
+ "$(PERL)" configdata.pm -r
+ @$(ECHO) "**************************************************"
+ @$(ECHO) "*** ***"
+ @$(ECHO) "*** Please run the same make command again ***"
+ @$(ECHO) "*** ***"
+ @$(ECHO) "**************************************************"
+ @exit 1
+
+reconfigure reconf:
+ "$(PERL)" configdata.pm -r
+
+{-
+ use File::Basename;
+ use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs file_name_is_absolute/;
+
+ # Helper function to convert dependencies in platform agnostic form to
+ # dependencies in platform form.
+ sub compute_platform_depends {
+ map { my $x = $_;
+
+ grep { $x eq $_ } @{$unified_info{programs}} and platform->bin($x)
+ or grep { $x eq $_ } @{$unified_info{modules}} and platform->dso($x)
+ or grep { $x eq $_ } @{$unified_info{libraries}} and platform->lib($x)
+ or platform->convertext($x); } @_;
+ }
+
+ # Helper function to figure out dependencies on libraries
+ # It takes a list of library names and outputs a list of dependencies
+ sub compute_lib_depends {
+ if ($disabled{shared}) {
+ return map { platform->staticlib($_) } @_;
+ }
+ return map { platform->sharedlib_import($_) // platform->staticlib($_) } @_;
+ }
+
+ sub generatetarget {
+ my %args = @_;
+ my $deps = join(" ", compute_platform_depends(@{$args{deps}}));
+ return <<"EOF";
+$args{target}: $deps
+EOF
+ }
+
+ # This function (and the next) avoids quoting paths of generated dependencies
+ # (in the build tree), but quotes paths of non-generated dependencies (in the
+ # source tree). This is a workaround for a limitation of C++Builder's make.exe
+ # in handling quoted paths: https://quality.embarcadero.com/browse/RSP-31756
+ sub generatesrc {
+ my %args = @_;
+ my $gen0 = $args{generator}->[0];
+ my $gen_args = join('', map { " $_" }
+ @{$args{generator}}[1..$#{$args{generator}}]);
+ my $gen_incs = join("", map { " -I\"$_\"" } @{$args{generator_incs}});
+ my $incs = join("", map { " -I\"$_\"" } @{$args{incs}});
+ my $defs = join("", map { " -D".$_ } @{$args{defs}});
+ my $deps = join(' ',
+ map { file_name_is_absolute($_) || ($_ =~ m|^../|) ? "\"$_\"" : $_ }
+ compute_platform_depends(@{$args{generator_deps}},
+ @{$args{deps}}));
+
+ if ($args{src} =~ /\.html$/) {
+ #
+ # HTML generator
+ #
+ my $title = basename($args{src}, ".html");
+ my $pod = $gen0;
+ return <<"EOF";
+$args{src}: "$pod"
+ "\$(PERL)" "\$(SRCDIR)/util/mkpod2html.pl" -i "$pod" -o \$\@ -t "$title" -r "\$(SRCDIR)/doc"
+EOF
+ } elsif (platform->isdef($args{src})) {
+ #
+ # Linker script-ish generator
+ #
+ my $target = platform->def($args{src});
+ my $mkdef = abs2rel(rel2abs(catfile($config{sourcedir},
+ "util", "mkdef.pl")),
+ rel2abs($config{builddir}));
+ my $ord_ver = $args{intent} eq 'lib' ? ' --version $(VERSION_NUMBER)' : '';
+ my $ord_name =
+ $args{generator}->[1] || basename(platform->dsoname($args{product}));
+ return <<"EOF";
+$target: $gen0 $deps $mkdef
+ "\$(PERL)" "$mkdef"$ord_ver --type $args{intent} --ordinals $gen0 --name $ord_name --OS windows > $target
+EOF
+ } elsif (platform->isasm($args{src})
+ || platform->iscppasm($args{src})) {
+ #
+ # Assembler generator
+ #
+ my $cppflags = {
+ shlib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
+ lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
+ dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)',
+ bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)'
+ } -> {$args{intent}};
+ my $target = platform->isasm($args{src})
+ ? platform->asm($args{src})
+ : $args{src};
+
+ my $generator;
+ if ($gen0 =~ /\.pl$/) {
+ $generator = '"$(PERL)"'.$gen_incs.' "'.$gen0.'"'.$gen_args
+ .' "$(PERLASM_SCHEME)"'.$incs.' '.$cppflags.$defs.' $(PROCESSOR)';
+ } elsif ($gen0 =~ /\.S$/) {
+ $generator = undef;
+ } else {
+ die "Generator type for $src unknown: $gen0\n";
+ }
+
+ if (defined($generator)) {
+ return <<"EOF";
+$target: "$gen0" $deps
+ cmd /C "set "ASM=\$(AS)" & $generator \$@"
+EOF
+ }
+ return <<"EOF";
+$target: "$gen0" $deps
+ \$(CPP) $incs $cppflags $defs "$gen0" > \$@.i
+ move /Y \$@.i \$@
+EOF
+ } elsif ($gen0 =~ m|^.*\.in$|) {
+ #
+ # "dofile" generator (file.in -> file)
+ #
+ my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
+ "util", "dofile.pl")),
+ rel2abs($config{builddir}));
+ my @perlmodules = ( 'configdata.pm',
+ grep { $_ =~ m|\.pm$| } @{$args{deps}} );
+ my %perlmoduleincs = map { '"-I'.dirname($_).'"' => 1 } @perlmodules;
+ $deps = join(' ', $deps, compute_platform_depends(@perlmodules));
+ @perlmodules = map { "-M".basename($_, '.pm') } @perlmodules;
+ my $perlmodules = join(' ', '', sort keys %perlmoduleincs, @perlmodules);
+ return <<"EOF";
+$args{src}: "$gen0" $deps
+ "\$(PERL)"$perlmodules "$dofile" "-o$target{build_file}" "$gen0"$gen_args > \$@
+EOF
+ } elsif (grep { $_ eq $gen0 } @{$unified_info{programs}}) {
+ #
+ # Generic generator using OpenSSL programs
+ #
+
+ # Redo $gen0, to ensure that we have the proper extension.
+ $gen0 = platform->bin($gen0);
+ return <<"EOF";
+$args{src}: $gen0 $deps "\$(BLDDIR)\\util\\wrap.pl"
+ "\$(PERL)" "\$(BLDDIR)\\util\\wrap.pl" "$gen0"$gen_args > \$@
+EOF
+ } else {
+ #
+ # Generic generator using Perl
+ #
+ return <<"EOF";
+$args{src}: "$gen0" $deps
+ "\$(PERL)"$gen_incs "$gen0"$gen_args > \$@
+EOF
+ }
+ }
+
+ sub src2obj {
+ my $asmext = platform->asmext();
+ my %args = @_;
+ my @srcs =
+ map { my $x = $_;
+ (platform->isasm($x) && grep { $x eq $_ } @generated)
+ ? platform->asm($x) : $x }
+ ( @{$args{srcs}} );
+ my $srcs = '"'.join('" "', @srcs).'"';
+ my $deps = join(' ',
+ map { file_name_is_absolute($_) || ($_ =~ m|^../|) ? "\"$_\"" : $_ }
+ (@srcs, @{$args{deps}}));
+ my $incs = join("", map { ' -I"'.$_.'"' } @{$args{incs}});
+ my $defs = join("", map { " -D".$_ } @{$args{defs}});
+ my $cflags = { shlib => ' $(LIB_CFLAGS)',
+ lib => ' $(LIB_CFLAGS)',
+ dso => ' $(DSO_CFLAGS)',
+ bin => ' $(BIN_CFLAGS)' } -> {$args{intent}};
+ $cflags .= $incs;
+ $cflags .= { shlib => ' $(LIB_CPPFLAGS)',
+ lib => ' $(LIB_CPPFLAGS)',
+ dso => ' $(DSO_CPPFLAGS)',
+ bin => ' $(BIN_CPPFLAGS)' } -> {$args{intent}};
+ my $asflags = { shlib => ' $(LIB_ASFLAGS)',
+ lib => ' $(LIB_ASFLAGS)',
+ dso => ' $(DSO_ASFLAGS)',
+ bin => ' $(BIN_ASFLAGS)' } -> {$args{intent}};
+ my $makedepcmd = $config{makedepcmd} unless $disabled{makedepend};
+ if ($srcs[0] =~ /\.rc$/) {
+ my $res = platform->res($args{obj});
+ return <<"EOF";
+$res: $deps
+ \$(RC) \$(RCFLAGS) \$(RCOUTFLAG)\$\@ $srcs
+EOF
+ }
+ my $obj = platform->obj($args{obj});
+ my $dep = platform->dep($args{obj});
+ if ($srcs[0] =~ /\Q${asmext}\E$/) {
+ return <<"EOF";
+$obj: $deps
+ \$(AS) $asflags \$(ASOUTFLAG)\$\@ $srcs
+EOF
+ } elsif ($srcs[0] =~ /.S$/) {
+ return <<"EOF";
+$obj: $deps
+ \$(CC) /EP -D__ASSEMBLER__ $cflags $defs $srcs > \$@.asm
+ \$(AS) $asflags \$(ASOUTFLAG)\$\@ \$@.asm
+EOF
+ }
+ my $recipe = <<"EOF";
+$obj: $deps
+ \$(CC) $cflags $defs -c \$(COUTFLAG)\$\@ $srcs
+EOF
+ $recipe .= <<"EOF" unless $disabled{makedepend};
+ cmd /C "$makedepcmd $cflags $defs $srcs > $dep 2>&1"
+EOF
+ return $recipe;
+ }
+
+ # We *know* this routine is only called when we've configure 'shared'.
+ # Also, note that even though the import library built here looks like
+ # a static library, it really isn't.
+ sub obj2shlib {
+ my %args = @_;
+ my $lib = $args{lib};
+ my @objs = map { platform->convertext($_) }
+ grep { platform->isobj($_) }
+ @{$args{objs}};
+ my @ress = map { platform->convertext($_) }
+ grep { platform->isres($_) }
+ @{$args{objs}};
+ my @defs = map { platform->def($_) }
+ grep { platform->isdef($_) }
+ @{$args{objs}};
+ my @deps = compute_lib_depends(@{$args{deps}});
+ die "More than one exported symbols list" if scalar @defs > 1;
+ my $linklibs = join("", map { "$_$target{ld_resp_delim}" } @deps);
+ my $objs = join($target{ld_resp_delim}, @objs);
+ my $ress = join($target{ld_resp_delim}, @ress);
+ my $deps = join(" ", @objs, @ress, @defs, @deps);
+ my $import = platform->sharedlib_import($lib);
+ my $dll = platform->sharedlib($lib);
+ my $shared_def = $target{lddefflag} . join("", @defs);
+ my $implib_rule = $target{ld_implib_rule} || "";
+ my $implib_flag = $target{ld_implib_flag}
+ ? "$target{ld_implib_flag}$import"
+ : "";
+ return <<"EOF"
+# The import library may look like a static library, but it is not.
+# We MUST make the import library depend on the DLL, in case someone
+# mistakenly removes the latter.
+$import: $dll
+ $implib_rule
+$dll: $deps
+ IF EXIST $full.manifest DEL /F /Q $full.manifest
+ IF EXIST \$@ DEL /F /Q \$@
+ cmd /C "\$(LD) \$(LDFLAGS) \$(LIB_LDFLAGS) @<< $implib_flag || (DEL /Q \$(\@B).* $import & EXIT 1)"
+$objs$target{ld_resp_delim}\$(LDOUTFLAG)$dll$target{ldpostoutflag}$target{ld_resp_delim}$linklibs\$(LIB_EX_LIBS)$target{ld_resp_delim}$shared_def$target{ldresflag}$ress
+<<
+ IF EXIST $dll.manifest \\
+ \$(MT) \$(MTFLAGS) \$(MTINFLAG)$dll.manifest \$(MTOUTFLAG)$dll
+ IF EXIST apps\\$dll DEL /Q /F apps\\$dll
+ IF EXIST test\\$dll DEL /Q /F test\\$dll
+ IF EXIST fuzz\\$dll DEL /Q /F fuzz\\$dll
+ COPY $dll apps
+ COPY $dll test
+ COPY $dll fuzz
+EOF
+ }
+ sub obj2dso {
+ my %args = @_;
+ my $dso = platform->dso($args{module});
+ my $dso_n = platform->dsoname($args{module});
+ my @objs = map { platform->convertext($_) }
+ grep { platform->isobj($_) }
+ @{$args{objs}};
+ my @ress = map { platform->convertext($_) }
+ grep { platform->isres($_) }
+ @{$args{objs}};
+ my @defs = map { platform->def($_) }
+ grep { platform->isdef($_) }
+ @{$args{objs}};
+ my @deps = compute_lib_depends(@{$args{deps}});
+ die "More than one exported symbols list" if scalar @defs > 1;
+ my $objs = join($target{ld_resp_delim}, @objs);
+ my $ress = join($target{ld_resp_delim}, @ress);
+ my $linklibs = join("", map { "$_$target{ld_resp_delim}" } @deps);
+ my $deps = join(" ", @objs, @ress, @defs, @deps);
+ my $shared_def = $target{lddefflag} . join("", @defs);
+ return <<"EOF";
+$dso: $deps
+ IF EXIST $dso.manifest DEL /F /Q $dso.manifest
+ cmd /C "\$(LD) \$(LDFLAGS) \$(DSO_LDFLAGS) @<< || (DEL /Q \$(\@B).* $dso_n.* & EXIT 1)"
+$objs$target{ld_resp_delim}\$(LDOUTFLAG)$dso$target{ldpostoutflag}$target{ld_resp_delim}$linklibs \$(DSO_EX_LIBS)$target{ld_resp_delim}$shared_def$target{ldresflag}$ress
+<<
+ IF EXIST $dso.manifest \\
+ \$(MT) \$(MTFLAGS) \$(MTINFLAG)$dso.manifest \$(MTOUTFLAG)$dso
+EOF
+ }
+ sub obj2lib {
+ my %args = @_;
+ my $lib = platform->staticlib($args{lib});
+ my @objs = map { platform->obj($_) } @{$args{objs}};
+ my $objs = join($target{ar_resp_delim}, @objs);
+ my $deps = join(" ", @objs);
+ return <<"EOF";
+$lib: $deps
+ \$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib @<<
+$objs
+<<
+EOF
+ }
+ sub obj2bin {
+ my %args = @_;
+ my $bin = platform->bin($args{bin});
+ my @objs = map { platform->convertext($_) }
+ grep { platform->isobj($_) }
+ @{$args{objs}};
+ my @ress = map { platform->convertext($_) }
+ grep { platform->isres($_) }
+ @{$args{objs}};
+ my @deps = compute_lib_depends(@{$args{deps}});
+ my $objs = join($target{ld_resp_delim}, @objs);
+ my $ress = join($target{ld_resp_delim}, @ress);
+ my $linklibs = join("", map { "$_$target{ld_resp_delim}" } @deps);
+ my $deps = join(" ", @objs, @ress, @deps);
+ return <<"EOF";
+$bin: $deps
+ IF EXIST $bin.manifest DEL /F /Q $bin.manifest
+ \$(LD) \$(LDFLAGS) \$(BIN_LDFLAGS) @<<
+$objs$target{ld_resp_delim}\$(LDOUTFLAG)$bin$target{ldpostoutflag}$target{ld_resp_delim}$linklibs\$(BIN_EX_LIBS)$target{ldresflag}$target{ldresflag}$ress
+<<
+ IF EXIST $bin.manifest \\
+ \$(MT) \$(MTFLAGS) \$(MTINFLAG)$bin.manifest \$(MTOUTFLAG)$bin
+EOF
+ }
+ sub in2script {
+ my %args = @_;
+ my $script = $args{script};
+ my $sources = '"'.join('" "', @{$args{sources}}).'"';
+ my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
+ "util", "dofile.pl")),
+ rel2abs($config{builddir}));
+ return <<"EOF";
+$script: $sources configdata.pm
+ "\$(PERL)" "-I\$(BLDDIR)" -Mconfigdata "$dofile" \\
+ "-o$target{build_file}" $sources > \$@
+EOF
+ }
+ sub generatedir {
+ my %args = @_;
+ my $dir = $args{dir};
+ my @deps = map { platform->convertext($_) } @{$args{deps}};
+ my @actions = ();
+ my %extinfo = ( dso => platform->dsoext(),
+ lib => platform->libext(),
+ bin => platform->binext() );
+
+ # We already have a 'test' target, and the top directory is just plain
+ # silly
+ return if $dir eq "test" || $dir eq ".";
+
+ foreach my $type (("dso", "lib", "bin", "script")) {
+ next unless defined($unified_info{dirinfo}->{$dir}->{products}->{$type});
+ # For lib object files, we could update the library. However,
+ # LIB on Windows doesn't work that way, so we won't create any
+ # actions for it, and the dependencies are already taken care of.
+ if ($type ne "lib") {
+ foreach my $prod (@{$unified_info{dirinfo}->{$dir}->{products}->{$type}}) {
+ if (dirname($prod) eq $dir) {
+ push @deps, $prod.$extinfo{$type};
+ }
+ }
+ }
+ }
+
+ my $deps = join(" ", @deps);
+ my $actions = join("\n", "", @actions);
+ return <<"EOF";
+$dir $dir\\ : $deps$actions
+EOF
+ }
+ "" # Important! This becomes part of the template result.
+-}
diff --git a/Configure b/Configure
index dd06aa48988f..84cc4094644a 100755
--- a/Configure
+++ b/Configure
@@ -933,8 +933,6 @@ while (@argvcopy)
if (/^--prefix=(.*)$/)
{
$config{prefix}=$1;
- die "Directory given with --prefix MUST be absolute\n"
- unless file_name_is_absolute($config{prefix});
}
elsif (/^--api=(.*)$/)
{
@@ -1377,6 +1375,11 @@ foreach (keys %useradd) {
# At this point, we can forget everything about %user and %useradd,
# because it's now all been merged into the corresponding $config entry
+if ($config{prefix} && !$config{CROSS_COMPILE}) {
+ die "Directory given with --prefix MUST be absolute\n"
+ unless file_name_is_absolute($config{prefix});
+}
+
if (grep { $_ =~ /(?:^|\s)-static(?:\s|$)/ } @{$config{LDFLAGS}}) {
disable('static', 'pic', 'threads');
}
@@ -1832,11 +1835,12 @@ if ($builder eq "unified") {
my $base = shift;
my $dir = shift;
my $relativeto = shift || ".";
+ my $no_mkpath = shift // 0;
$dir = catdir($base,$dir) unless isabsolute($dir);
# Make sure the directories we're building in exists
- mkpath($dir);
+ mkpath($dir) unless $no_mkpath;
my $res = abs2rel(absolutedir($dir), rel2abs($relativeto));
#print STDERR "DEBUG[cleandir]: $dir , $base => $res\n";
@@ -1847,6 +1851,7 @@ if ($builder eq "unified") {
my $base = shift;
my $file = shift;
my $relativeto = shift || ".";
+ my $no_mkpath = shift // 0;
$file = catfile($base,$file) unless isabsolute($file);
@@ -1854,7 +1859,7 @@ if ($builder eq "unified") {
my $f = basename($file);
# Make sure the directories we're building in exists
- mkpath($d);
+ mkpath($d) unless $no_mkpath;
my $res = abs2rel(catfile(absolutedir($d), $f), rel2abs($relativeto));
#print STDERR "DEBUG[cleanfile]: $d , $f => $res\n";
@@ -1884,7 +1889,7 @@ if ($builder eq "unified") {
}
# Then, look in our standard directory
push @build_file_templates,
- ( map { cleanfile($srcdir, catfile("Configurations", $_), $blddir) }
+ ( map { cleanfile($srcdir, catfile("Configurations", $_), $blddir, 1) }
@build_file_template_names );
my $build_file_template;
@@ -1899,7 +1904,7 @@ if ($builder eq "unified") {
}
$config{build_file_templates}
= [ cleanfile($srcdir, catfile("Configurations", "common0.tmpl"),
- $blddir),
+ $blddir, 1),
$build_file_template ];
my @build_dirs = ( [ ] ); # current directory
@@ -1908,7 +1913,7 @@ if ($builder eq "unified") {
# We want to detect configdata.pm in the source tree, so we
# don't use it if the build tree is different.
- my $src_configdata = cleanfile($srcdir, "configdata.pm", $blddir);
+ my $src_configdata = cleanfile($srcdir, "configdata.pm", $blddir, 1);
# Any source file that we recognise is placed in this hash table, with
# the list of its intended destinations as value. When everything has
@@ -2261,7 +2266,7 @@ EOF
my $dest = $_;
my $ddest = cleanfile($buildd, $_, $blddir);
foreach (@{$sources{$dest}}) {
- my $s = cleanfile($sourced, $_, $blddir);
+ my $s = cleanfile($sourced, $_, $blddir, 1);
# If it's generated or we simply don't find it in the source
# tree, we assume it's in the build tree.
@@ -2306,7 +2311,7 @@ EOF
my $dest = $_;
my $ddest = cleanfile($buildd, $_, $blddir);
foreach (@{$shared_sources{$dest}}) {
- my $s = cleanfile($sourced, $_, $blddir);
+ my $s = cleanfile($sourced, $_, $blddir, 1);
# If it's generated or we simply don't find it in the source
# tree, we assume it's in the build tree.
@@ -2361,7 +2366,7 @@ EOF
if scalar @{$generate{$_}} > 1;
my @generator = split /\s+/, $generate{$dest}->[0];
my $gen = $generator[0];
- $generator[0] = cleanfile($sourced, $gen, $blddir);
+ $generator[0] = cleanfile($sourced, $gen, $blddir, 1);
# If the generator is itself generated, it's in the build tree
if ($generate{$gen} || ! -f $generator[0]) {
@@ -2387,7 +2392,7 @@ EOF
} elsif ($dest eq '') {
$ddest = '';
} else {
- $ddest = cleanfile($sourced, $_, $blddir);
+ $ddest = cleanfile($sourced, $_, $blddir, 1);
# If the destination doesn't exist in source, it can only be
# a generated file in the build tree.
@@ -2396,7 +2401,7 @@ EOF
}
}
foreach (@{$depends{$dest}}) {
- my $d = cleanfile($sourced, $_, $blddir);
+ my $d = cleanfile($sourced, $_, $blddir, 1);
my $d2 = cleanfile($buildd, $_, $blddir);
# If we know it's generated, or assume it is because we can't
@@ -2419,7 +2424,7 @@ EOF
foreach (keys %includes) {
my $dest = $_;
- my $ddest = cleanfile($sourced, $_, $blddir);
+ my $ddest = cleanfile($sourced, $_, $blddir, 1);
# If the destination doesn't exist in source, it can only be
# a generated file in the build tree.
@@ -2427,7 +2432,7 @@ EOF
$ddest = cleanfile($buildd, $_, $blddir);
}
foreach (@{$includes{$dest}}) {
- my $is = cleandir($sourced, $_, $blddir);
+ my $is = cleandir($sourced, $_, $blddir, 1);
my $ib = cleandir($buildd, $_, $blddir);
push @{$unified_info{includes}->{$ddest}->{source}}, $is
unless grep { $_ eq $is } @{$unified_info{includes}->{$ddest}->{source}};
@@ -2440,7 +2445,7 @@ EOF
my $ddest;
if ($dest ne "") {
- $ddest = cleanfile($sourced, $dest, $blddir);
+ $ddest = cleanfile($sourced, $dest, $blddir, 1);
# If the destination doesn't exist in source, it can only
# be a generated file in the build tree.
@@ -2822,7 +2827,7 @@ my %template_vars = (
my $configdata_outname = 'configdata.pm';
open CONFIGDATA, ">$configdata_outname.new"
or die "Trying to create $configdata_outname.new: $!";
-my $configdata_tmplname = cleanfile($srcdir, "configdata.pm.in", $blddir);
+my $configdata_tmplname = cleanfile($srcdir, "configdata.pm.in", $blddir, 1);
my $configdata_tmpl =
OpenSSL::Template->new(TYPE => 'FILE', SOURCE => $configdata_tmplname);
$configdata_tmpl->fill_in(
diff --git a/FREEBSD-Xlist b/FREEBSD-Xlist
deleted file mode 100644
index 39f96b1eaebf..000000000000
--- a/FREEBSD-Xlist
+++ /dev/null
@@ -1,40 +0,0 @@
-openssl-*/.git*
-openssl-*/.travis*
-openssl-*/*.com
-openssl-*/*/*.com
-openssl-*/*/*/*.com
-openssl-*/Configurations
-openssl-*/NOTES.ANDROID
-openssl-*/NOTES.DJGPP
-openssl-*/NOTES.VMS
-openssl-*/NOTES.WIN
-openssl-*/VMS
-openssl-*/apps/demoCA
-openssl-*/apps/demoSRP
-openssl-*/apps/openssl-vms.cnf
-openssl-*/apps/vms_*
-openssl-*/apps/win32_init.c
-openssl-*/crypto/*/asm/*-alpha.pl
-openssl-*/crypto/*/asm/alpha-*.pl
-openssl-*/crypto/LPdir_nyi.c
-openssl-*/crypto/LPdir_vms.c
-openssl-*/crypto/LPdir_win.c
-openssl-*/crypto/LPdir_win32.c
-openssl-*/crypto/LPdir_wince.c
-openssl-*/crypto/alphacpuid.pl
-openssl-*/crypto/async/arch/async_win.c
-openssl-*/crypto/dso/dso_vms.c
-openssl-*/crypto/dso/dso_win32.c
-openssl-*/crypto/err/openssl.ec
-openssl-*/crypto/rand/rand_vms.c
-openssl-*/crypto/rand/rand_win.c
-openssl-*/crypto/threads_win.c
-openssl-*/demos
-openssl-*/engines/*.ec
-openssl-*/external
-openssl-*/fuzz
-openssl-*/ms
-openssl-*/os-dep
-openssl-*/test
-openssl-*/tools
-openssl-*/util
diff --git a/FREEBSD-upgrade b/FREEBSD-upgrade
deleted file mode 100644
index 5f4953079e56..000000000000
--- a/FREEBSD-upgrade
+++ /dev/null
@@ -1,80 +0,0 @@
-
-This contains various notes used to import a new OpenSSL version into
-the FreeBSD base system. It is not expected to be complete but just to
-contain some hints for imports. Note that this doesn't actually deal
-with getting OpenSSL to compile...
-
-XXX This file currently partly contain CVS and SVN instructions.
-
-First, read http://wiki.freebsd.org/SubversionPrimer/VendorImports
-
-# Xlist
-setenv XLIST /FreeBSD/work/openssl/svn-FREEBSD-files/FREEBSD-Xlist
-setenv FSVN "svn+ssh://repo.freebsd.org/base"
-setenv OSSLVER 1.1.1i
-
-###setenv OSSLTAG v`echo ${OSSLVER} | tr . _`
-
-cd /FreeBSD/work/openssl/merge
-fetch http://www.openssl.org/source/openssl-${OSSLVER}.tar.gz \
- http://www.openssl.org/source/openssl-${OSSLVER}.tar.gz.asc
-gpg --verify openssl-${OSSLVER}.tar.gz.asc openssl-${OSSLVER}.tar.gz
-
-svn co $FSVN/vendor-crypto/openssl/dist dist
-tar -x -X $XLIST -f openssl-${OSSLVER}.tar.gz
-
-cd dist
-svn list -R | egrep -v -e '/$' -e '^FREEBSD-(Xlist|upgrade)$' | sort >../old
-cd ../openssl-${OSSLVER}
-find . -type f -or -type l | cut -c 3- | sort >../new
-cd ..
-
-# See that files to remove makes sense
-comm -23 old new
-# See that files to add makes sense
-comm -13 old new
-
-tar -cf - -C openssl-${OSSLVER} . | tar -xf - -C dist
-cd dist
-comm -23 ../old ../new | xargs svn rm
-# Make sure to remove empty directories
-comm -13 ../old ../new | xargs svn --parents add
-
-svn stat
-svn ci
-svn cp ^/vendor-crypto/openssl/dist ^/vendor-crypto/openssl/$OSSLVER
-
-# Merge to head
-mkdir ../head
-cd ../head
-svn co $FSVN/head/crypto/openssl crypto/openssl
-svn merge ^/vendor-crypto/openssl/dist crypto/openssl
-
-# Resolve conflicts manually
-
-svn co $FSVN/head/secure/lib/libcrypto secure/lib/libcrypto
-svn co $FSVN/head/secure/lib/libssl secure/lib/libssl
-svn co $FSVN/head/secure/usr.bin/openssl secure/usr.bin/openssl
-svn co $FSVN/head/sys/crypto/openssl sys/crypto/openssl
-
-cd secure/lib/libcrypto
-
-# Update version number and release date in Makefile.inc
-# Update all opensslconf-${MACHINE_CPUARCH}.h
-# Update Version.map
-
-# Regen assembly files if necessary
-make -f Makefile.asm all
-mv *.S sys/crypto/openssl/${MACHINE_CPUARCH}
-make -f Makefile.asm clean
-cd ../../..
-
-# Regen manual pages and update makefiles accordingly
-
-# Commit!
-svn ci crypto/openssl secure/lib/libcrypto secure/lib/libssl \
- secure/usr.bin/openssl sys/crypto/openssl
-
- -- simon@, jkim@
-
-$FreeBSD$
diff --git a/NEWS.md b/NEWS.md
index 8f0d973e057b..d9a48b157eb1 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -18,6 +18,18 @@ OpenSSL Releases
OpenSSL 3.0
-----------
+### Major changes between OpenSSL 3.0.12 and OpenSSL 3.0.13 [30 Jan 2024]
+
+ * Fixed PKCS12 Decoding crashes
+ ([CVE-2024-0727])
+ * Fixed Excessive time spent checking invalid RSA public keys
+ ([CVE-2023-6237])
+ * Fixed POLY1305 MAC implementation corrupting vector registers on PowerPC
+ CPUs which support PowerISA 2.07
+ ([CVE-2023-6129])
+ * Fix excessive time spent in DH check / generation with large Q parameter
+ value ([CVE-2023-5678])
+
### Major changes between OpenSSL 3.0.11 and OpenSSL 3.0.12 [24 Oct 2023]
* Mitigate incorrect resize handling for symmetric cipher keys and IVs.
@@ -1458,6 +1470,10 @@ OpenSSL 0.9.x
<!-- Links -->
+[CVE-2024-0727]: https://www.openssl.org/news/vulnerabilities.html#CVE-2024-0727
+[CVE-2023-6237]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-6237
+[CVE-2023-6129]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-6129
+[CVE-2023-5678]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-5678
[CVE-2023-5363]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-5363
[CVE-2023-4807]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-4807
[CVE-2023-3817]: https://www.openssl.org/news/vulnerabilities.html#CVE-2023-3817
diff --git a/README.md b/README.md
index b848d050132a..5184a461bb17 100644
--- a/README.md
+++ b/README.md
@@ -166,7 +166,7 @@ attempting to develop or distribute cryptographic code.
Copyright
=========
-Copyright (c) 1998-2023 The OpenSSL Project
+Copyright (c) 1998-2024 The OpenSSL Project
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
diff --git a/VERSION.dat b/VERSION.dat
index 9d9448118e6d..3ee1a6f829f4 100644
--- a/VERSION.dat
+++ b/VERSION.dat
@@ -1,7 +1,7 @@
MAJOR=3
MINOR=0
-PATCH=12
+PATCH=13
PRE_RELEASE_TAG=
BUILD_METADATA=
-RELEASE_DATE="24 Oct 2023"
+RELEASE_DATE="30 Jan 2024"
SHLIB_VERSION=3
diff --git a/VMS/VMSify-conf.pl b/VMS/VMSify-conf.pl
new file mode 100644
index 000000000000..a3844e505c2b
--- /dev/null
+++ b/VMS/VMSify-conf.pl
@@ -0,0 +1,41 @@
+#! /usr/bin/env perl
+# Copyright 2004-2016 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
+
+
+use strict;
+use warnings;
+
+my @directory_vars = ( "dir", "certs", "crl_dir", "new_certs_dir" );
+my @file_vars = ( "database", "certificate", "serial", "crlnumber",
+ "crl", "private_key", "RANDFILE" );
+while(<STDIN>) {
+ s|\R$||;
+ foreach my $d (@directory_vars) {
+ if (/^(\s*\#?\s*${d}\s*=\s*)\.\/([^\s\#]*)([\s\#].*)$/) {
+ $_ = "$1sys\\\$disk:\[.$2$3";
+ } elsif (/^(\s*\#?\s*${d}\s*=\s*)(\w[^\s\#]*)([\s\#].*)$/) {
+ $_ = "$1sys\\\$disk:\[.$2$3";
+ }
+ s/^(\s*\#?\s*${d}\s*=\s*\$\w+)\/([^\s\#]*)([\s\#].*)$/$1.$2\]$3/;
+ while(/^(\s*\#?\s*${d}\s*=\s*(\$\w+\.|sys\\\$disk:\[\.)[\w\.]+)\/([^\]]*)\](.*)$/) {
+ $_ = "$1.$3]$4";
+ }
+ }
+ foreach my $f (@file_vars) {
+ s/^(\s*\#?\s*${f}\s*=\s*)\.\/(.*)$/$1sys\\\$disk:\[\/$2/;
+ while(/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/(\w+\/[^\s\#]*)([\s\#].*)$/) {
+ $_ = "$1.$3$4";
+ }
+ if (/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/(\w+)([\s\#].*)$/) {
+ $_ = "$1]$3.$4";
+ } elsif (/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/([^\s\#]*)([\s\#].*)$/) {
+ $_ = "$1]$3$4";
+ }
+ }
+ print $_,"\n";
+}
diff --git a/VMS/engine.opt b/VMS/engine.opt
new file mode 100644
index 000000000000..9725023a3122
--- /dev/null
+++ b/VMS/engine.opt
@@ -0,0 +1,3 @@
+CASE_SENSITIVE=YES
+SYMBOL_VECTOR=(BIND_ENGINE=PROCEDURE,V_CHECK=PROCEDURE,-
+ bind_engine/BIND_ENGINE=PROCEDURE,v_check/V_CHECK=PROCEDURE)
diff --git a/VMS/msg_install.com b/VMS/msg_install.com
new file mode 100644
index 000000000000..d1eec7c982d1
--- /dev/null
+++ b/VMS/msg_install.com
@@ -0,0 +1,19 @@
+$ ! Used by the main descrip.mms to print the installation complete
+$ ! message.
+$ ! Arguments:
+$ ! P1 startup / setup / shutdown scripts directory
+$ ! P2 distinguishing version number ("major version")
+$
+$ systartup = p1
+$ osslver = p2
+$
+$ WRITE SYS$OUTPUT "Installation complete"
+$ WRITE SYS$OUTPUT ""
+$ WRITE SYS$OUTPUT "The following commands need to be executed to enable you to use OpenSSL:"
+$ WRITE SYS$OUTPUT ""
+$ WRITE SYS$OUTPUT "- to set up OpenSSL logical names:"
+$ WRITE SYS$OUTPUT " @''systartup'openssl_startup''osslver'"
+$ WRITE SYS$OUTPUT ""
+$ WRITE SYS$OUTPUT "- to define the OpenSSL command"
+$ WRITE SYS$OUTPUT " @''systartup'openssl_utils''osslver'"
+$ WRITE SYS$OUTPUT ""
diff --git a/VMS/msg_staging.com b/VMS/msg_staging.com
new file mode 100644
index 000000000000..11cd80870d79
--- /dev/null
+++ b/VMS/msg_staging.com
@@ -0,0 +1,37 @@
+$ ! Used by the main descrip.mms to print the statging installation
+$ ! complete
+$ ! message.
+$ ! Arguments:
+$ ! P1 staging software installation directory
+$ ! P2 staging data installation directory
+$ ! P3 final software installation directory
+$ ! P4 final data installation directory
+$ ! P5 startup / setup / shutdown scripts directory
+$ ! P6 distinguishing version number ("major version")
+$
+$ staging_instdir = p1
+$ staging_datadir = p2
+$ final_instdir = p3
+$ final_datadir = p4
+$ systartup = p5
+$ osslver = p6
+$
+$ WRITE SYS$OUTPUT "Staging installation complete"
+$ WRITE SYS$OUTPUT ""
+$ WRITE SYS$OUTPUT "Finish or package in such a way that the contents of the following directory"
+$ WRITE SYS$OUTPUT "trees end up being copied:"
+$ WRITE SYS$OUTPUT ""
+$ WRITE SYS$OUTPUT "- from ", staging_instdir
+$ WRITE SYS$OUTPUT " to ", final_instdir
+$ WRITE SYS$OUTPUT "- from ", staging_datadir
+$ WRITE SYS$OUTPUT " to ", final_datadir
+$ WRITE SYS$OUTPUT ""
+$ WRITE SYS$OUTPUT "When in its final destination, the following commands need to be executed"
+$ WRITE SYS$OUTPUT "to use OpenSSL:"
+$ WRITE SYS$OUTPUT ""
+$ WRITE SYS$OUTPUT "- to set up OpenSSL logical names:"
+$ WRITE SYS$OUTPUT " @''systartup'openssl_startup''osslver'"
+$ WRITE SYS$OUTPUT ""
+$ WRITE SYS$OUTPUT "- to define the OpenSSL command"
+$ WRITE SYS$OUTPUT " @''systartup'openssl_utils''osslver'"
+$ WRITE SYS$OUTPUT ""
diff --git a/VMS/openssl_ivp.com.in b/VMS/openssl_ivp.com.in
new file mode 100644
index 000000000000..582e1fe1a7fa
--- /dev/null
+++ b/VMS/openssl_ivp.com.in
@@ -0,0 +1,56 @@
+$ ! OpenSSL Internal Verification Procedure
+$ !
+$ ! This script checks the consistency of a OpenSSL installation
+$ ! It had better be spawned, as it creates process logicals
+$
+$ ! Generated information
+$ INSTALLTOP := {- $config{INSTALLTOP} -}
+$ OPENSSLDIR := {- $config{OPENSSLDIR} -}
+$
+$ ! Make sure that INSTALLTOP and OPENSSLDIR become something one
+$ ! can use to call the startup procedure
+$ INSTALLTOP_ = F$PARSE("A.;",INSTALLTOP,,,"NO_CONCEAL") -
+ - ".][000000" - "[000000." - "][" - "]A.;" + "."
+$ OPENSSLDIR_ = F$PARSE("A.;",OPENSSLDIR,,,"NO_CONCEAL") -
+ - ".][000000" - "[000000." - "][" - "]A.;" + "."
+$
+$ v := {- sprintf "%02d", split(/\./, $config{version}) -}
+$ pz := {- $target{pointer_size} -}
+$
+$ @'INSTALLTOP_'SYS$STARTUP]openssl_startup'v'
+$ @'INSTALLTOP_'SYS$STARTUP]openssl_utils'v'
+$
+$ IF F$SEARCH("OSSL$LIBCRYPTO''pz'") .EQS. "" -
+ .OR. F$SEARCH("OSSL$LIBSSL''pz'") .EQS. "" {- output_off() if $disabled{shared}; "" -}-
+ .OR. F$SEARCH("OSSL$LIBCRYPTO_SHR''pz'") .EQS. "" -
+ .OR. F$SEARCH("OSSL$LIBSSL_SHR''pz'") .EQS. "" {- output_on() if $disabled{shared}; "" -}-
+ .OR. F$SEARCH("OSSL$INCLUDE:[OPENSSL]crypto.h") .EQS. "" -
+ .OR. F$SEARCH("OPENSSL:crypto.h") .EQS. "" -
+ .OR. F$SEARCH("OSSL$EXE:OPENSSL''v'.EXE") .EQS. ""
+$ THEN
+$ WRITE SYS$ERROR "Installation inconsistent"
+$ EXIT %x00018292 ! RMS$_FNF, file not found
+$ ENDIF
+$
+$ ON ERROR THEN GOTO error
+$
+$ ! If something else is wrong with the installation, we're likely
+$ ! to get an image activation error here
+$ openssl version -a
+$
+$ ! FUTURE ENHANCEMENT: Verify that engines are where they should be.
+$ ! openssl engine -c -t checker
+$
+$ ! Verify that the built in providers are reachable. If they aren't,
+$ ! then we're likely to get an image activation error here
+$ openssl list -provider base -providers
+$ openssl list -provider default -providers
+$ openssl list -provider legacy -providers
+$
+$ WRITE SYS$ERROR "OpenSSL IVP passed"
+$ EXIT %x10000001
+$
+$ error:
+$ save_status = $STATUS
+$ WRITE SYS$ERROR "OpenSSL IVP failed"
+$ EXIT 'save_status'
diff --git a/VMS/openssl_shutdown.com.in b/VMS/openssl_shutdown.com.in
new file mode 100644
index 000000000000..c2b9cf6c70b4
--- /dev/null
+++ b/VMS/openssl_shutdown.com.in
@@ -0,0 +1,57 @@
+$ ! OpenSSL shutdown script
+$ !
+$ ! This script deassigns the logical names used by the installation
+$ ! of OpenSSL. It can do so at any level, defined by P1.
+$ !
+$ ! P1 Qualifier(s) for DEASSIGN.
+$ ! Default: /PROCESS
+$ !
+$ ! P2 If the value is "NOALIASES", no alias logical names are
+$ ! deassigned.
+$
+$ status = %x10000001 ! Generic success
+$
+$ ! In case there's a problem
+$ ON CONTROL_Y THEN GOTO bailout
+$ ON ERROR THEN GOTO bailout
+$
+$ ! Find the architecture
+$ IF F$GETSYI("CPU") .LT. 128
+$ THEN
+$ arch := VAX
+$ ELSE
+$ arch := F$EDIT(F$GETSYI("ARCH_NAME"),"UPCASE")
+$ IF arch .EQS. "" THEN GOTO unknown_arch
+$ ENDIF
+$
+$ ! Abbrevs
+$ DEAS := DEASSIGN /NOLOG 'P1'
+$ sv := {- platform->shlib_version_as_filename(); -}
+$ pz := {- $target{pointer_size} -}
+$
+$ DEAS OSSL$DATAROOT
+$ DEAS OSSL$INSTROOT
+$ DEAS OSSL$INCLUDE
+$ DEAS OSSL$LIB
+$ DEAS OSSL$SHARE
+$ DEAS OSSL$ENGINES'sv''pz'
+$ DEAS OSSL$MODULES'pz'
+$ DEAS OSSL$EXE
+$ DEAS OSSL$LIBCRYPTO'pz'
+$ DEAS OSSL$LIBSSL'pz'
+${- output_off() if $disabled{shared}; "" -}
+$ DEAS OSSL$LIBCRYPTO'sv'_SHR'pz'
+$ DEAS OSSL$LIBSSL'sv'_SHR'pz'
+${- output_on() if $disabled{shared}; "" -}
+$ DEAS OPENSSL
+$
+$ IF P2 .NES. "NOALIASES"
+$ THEN
+$ DEAS OSSL$ENGINES'pz'
+${- output_off() if $disabled{shared}; "" -}
+$ DEAS OSSL$LIBCRYPTO_SHR'pz'
+$ DEAS OSSL$LIBSSL_SHR'pz'
+${- output_on() if $disabled{shared}; "" -}
+$ ENDIF
+$
+$ EXIT 'status'
diff --git a/VMS/openssl_startup.com.in b/VMS/openssl_startup.com.in
new file mode 100644
index 000000000000..738f508d56f5
--- /dev/null
+++ b/VMS/openssl_startup.com.in
@@ -0,0 +1,125 @@
+$ ! OpenSSL startup script
+$ !
+$ ! This script defines the logical names used by the installation
+$ ! of OpenSSL. It can provide those logical names at any level,
+$ ! defined by P1.
+$ !
+$ ! The logical names created are:
+$ !
+$ ! OSSL$INSTROOT Installation root
+$ ! OSSL$DATAROOT Data root (common directory
+$ ! for certs etc)
+$ ! OSSL$INCLUDE Include directory root
+$ ! OSSL$LIB Where the static library files
+$ ! are located
+$ ! OSSL$SHARE Where the shareable image files
+$ ! are located
+$ ! OSSL$EXE Where the executables are located
+$ ! OSSL$ENGINESnnn Where the engines modules are located
+$ ! OSSL$MODULES Where the non-engine modules are located
+$ ! OSSL$LIBCRYPTO The static crypto library
+$ ! OSSL$LIBSSL The static ssl library
+$ ! OSSL$LIBCRYPTOnnn_SHR The shareable crypto image
+$ ! OSSL$LIBSSLnnn_SHR The shareable ssl image
+$ ! OPENSSL is OSSL$INCLUDE:[OPENSSL]
+$ !
+$ ! In all these, nnn is the OpenSSL version number. This allows
+$ ! several OpenSSL versions to be installed simultaneously, which
+$ ! matters for applications that are linked to the shareable images
+$ ! or that depend on engines.
+$ !
+$ ! In addition, unless P2 is "NOALIASES", these logical names are
+$ ! created:
+$ !
+$ ! OSSL$ENGINES Alias for OSSL$ENGINESnnn
+$ ! OSSL$LIBCRYPTO_SHR Alias for OSSL$LIBCRYPTOnnn_SHR
+$ ! OSSL$LIBSSL_SHR Alias for OSSL$LIBSSLnnn_SHR
+$ !
+$ ! P1 Qualifier(s) for DEFINE. "/SYSTEM" would be typical when
+$ ! calling this script from SYS$STARTUP:SYSTARTUP_VMS.COM,
+$ ! while "/PROCESS" would be typical for a personal install.
+$ ! Default: /PROCESS
+$ !
+$ ! P2 If the value is "NOALIASES", no alias logical names are
+$ ! created.
+$
+$ status = %x10000001 ! Generic success
+$
+$ ! In case there's a problem
+$ ON CONTROL_Y THEN GOTO bailout
+$ ON ERROR THEN GOTO bailout
+$
+$ ! Find the architecture
+$ IF F$GETSYI("CPU") .LT. 128
+$ THEN
+$ arch := VAX
+$ ELSE
+$ arch = F$EDIT(F$GETSYI("ARCH_NAME"),"UPCASE")
+$ IF arch .EQS. "" THEN GOTO unknown_arch
+$ ENDIF
+$
+$ ! Generated information
+$ INSTALLTOP := {- $config{INSTALLTOP} -}
+$ OPENSSLDIR := {- $config{OPENSSLDIR} -}
+$
+$ ! Make sure that INSTALLTOP and OPENSSLDIR become something one
+$ ! can build concealed logical names on
+$ INSTALLTOP_ = F$PARSE("A.;",INSTALLTOP,,,"NO_CONCEAL") -
+ - ".][000000" - "[000000." - "][" - "]A.;" + "."
+$ OPENSSLDIR_ = F$PARSE("A.;",OPENSSLDIR,,,"NO_CONCEAL") -
+ - ".][000000" - "[000000." - "][" - "]A.;" + "."
+$
+$ DEFINE /TRANSLATION=CONCEALED /NOLOG WRK_INSTALLTOP 'INSTALLTOP_']
+$ DEFINE /TRANSLATION=CONCEALED /NOLOG WRK_OPENSSLDIR 'OPENSSLDIR_']
+$
+$ ! Check that things are in place, and specifically, the stuff
+$ ! belonging to this architecture
+$ IF F$SEARCH("WRK_INSTALLTOP:[000000]INCLUDE.DIR;1") .EQS. "" -
+ .OR. F$SEARCH("WRK_INSTALLTOP:[000000]LIB.DIR;1") .EQS. "" -
+ .OR. F$SEARCH("WRK_INSTALLTOP:[000000]EXE.DIR;1") .EQS. "" -
+ .OR. F$SEARCH("WRK_INSTALLTOP:[LIB]''arch'.DIR;1") .EQS. "" -
+ .OR. F$SEARCH("WRK_INSTALLTOP:[EXE]''arch'.DIR;1") .EQS. "" -
+ .OR. F$SEARCH("WRK_OPENSSLDIR:[000000]openssl.cnf") .EQS. ""
+$ THEN
+$ WRITE SYS$ERROR "''INSTALLTOP' doesn't look like an OpenSSL installation for ''arch'"
+$ status = %x00018292 ! RMS$_FNF, file not found
+$ GOTO bailout
+$ ENDIF
+$
+$ ! Abbrevs
+$ DEFT := DEFINE /TRANSLATION=CONCEALED /NOLOG 'P1'
+$ DEF := DEFINE /NOLOG 'P1'
+$ sv := {- platform->shlib_version_as_filename(); -}
+$ pz := {- $target{pointer_size} -}
+$
+$ DEFT OSSL$DATAROOT 'OPENSSLDIR_']
+$ DEFT OSSL$INSTROOT 'INSTALLTOP_']
+$ DEFT OSSL$INCLUDE 'INSTALLTOP_'INCLUDE.]
+$ DEF OSSL$LIB OSSL$INSTROOT:[LIB.'arch']
+$ DEF OSSL$SHARE OSSL$INSTROOT:[LIB.'arch']
+$ DEF OSSL$ENGINES'sv''pz' OSSL$INSTROOT:[ENGINES'sv''pz'.'arch']
+$ DEF OSSL$MODULES'pz' OSSL$INSTROOT:[MODULES'pz'.'arch']
+$ DEF OSSL$EXE OSSL$INSTROOT:[EXE.'arch'],-
+ OSSL$INSTROOT:[EXE]
+$ DEF OSSL$LIBCRYPTO'pz' OSSL$LIB:OSSL$LIBCRYPTO'pz'.OLB
+$ DEF OSSL$LIBSSL'pz' OSSL$LIB:OSSL$LIBSSL'pz'.OLB
+${- output_off() if $disabled{shared}; "" -}
+$ DEF OSSL$LIBCRYPTO'sv'_SHR'pz' OSSL$SHARE:OSSL$LIBCRYPTO'sv'_SHR'pz'.EXE
+$ DEF OSSL$LIBSSL'sv'_SHR'pz' OSSL$SHARE:OSSL$LIBSSL'sv'_SHR'pz'.EXE
+${- output_on() if $disabled{shared}; "" -}
+$ DEF OPENSSL OSSL$INCLUDE:[OPENSSL]
+$
+$ IF P2 .NES. "NOALIASES"
+$ THEN
+$ DEF OSSL$ENGINES'pz' OSSL$ENGINES'sv''pz'
+${- output_off() if $disabled{shared}; "" -}
+$ DEF OSSL$LIBCRYPTO_SHR'pz' OSSL$LIBCRYPTO'sv'_SHR'pz'
+$ DEF OSSL$LIBSSL_SHR'pz' OSSL$LIBSSL'sv'_SHR'pz'
+${- output_on() if $disabled{shared}; "" -}
+$ ENDIF
+$
+$ bailout:
+$ DEASSIGN WRK_INSTALLTOP
+$ DEASSIGN WRK_OPENSSLDIR
+$
+$ EXIT 'status'
diff --git a/VMS/openssl_utils.com.in b/VMS/openssl_utils.com.in
new file mode 100644
index 000000000000..900d0462c5a9
--- /dev/null
+++ b/VMS/openssl_utils.com.in
@@ -0,0 +1,14 @@
+$ ! OpenSSL utilities
+$ !
+$
+$ v := {- sprintf "%02d", split(/\./, $config{version}) -}
+$
+$ OPENSSL'v' :== $OSSL$EXE:OPENSSL'v'
+$ OPENSSL :== $OSSL$EXE:OPENSSL'v'
+$
+$ IF F$TYPE(PERL) .EQS. "STRING"
+$ THEN
+$ C_REHASH :== 'PERL' OSSL$EXE:c_rehash.pl
+$ ELSE
+$ WRITE SYS$ERROR "NOTE: no perl => no C_REHASH"
+$ ENDIF
diff --git a/VMS/test-includes.com b/VMS/test-includes.com
new file mode 100644
index 000000000000..c1d7ccd0ee8c
--- /dev/null
+++ b/VMS/test-includes.com
@@ -0,0 +1,28 @@
+$! Quick script to check how well including individual header files works
+$! on VMS, even when the VMS macro isn't defined.
+$
+$ sav_def = f$env("DEFAULT")
+$ here = f$parse("A.;0",f$ENV("PROCEDURE")) - "A.;0"
+$ set default 'here'
+$ set default [-.include.openssl]
+$ define openssl 'f$env("DEFAULT")'
+$ set default [--]
+$
+$ loop:
+$ f = f$search("openssl:*.h")
+$ if f .eqs. "" then goto loop_end
+$ write sys$output "Checking ",f
+$ open/write foo foo.c
+$ write foo "#undef VMS"
+$ write foo "#include <stdio.h>"
+$ write foo "#include <openssl/",f$parse(f,,,"NAME"),".h>"
+$ write foo "main()"
+$ write foo "{printf(""foo\n"");}"
+$ close foo
+$ cc/STANDARD=ANSI89/NOLIST/PREFIX=ALL foo.c
+$ delete foo.c;
+$ goto loop
+$ loop_end:
+$ set default 'save_def'
+$ exit
+
diff --git a/VMS/translatesyms.pl b/VMS/translatesyms.pl
new file mode 100644
index 000000000000..c7d1bc1ce75c
--- /dev/null
+++ b/VMS/translatesyms.pl
@@ -0,0 +1,62 @@
+#! /usr/bin/env perl
+# Copyright 2016 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
+
+
+# This script will translate any SYMBOL_VECTOR item that has a translation
+# in CXX$DEMANGLER_DB. The latter is generated by and CC/DECC command that
+# uses the qualifier /REPOSITORY with the build directory as value. When
+# /NAMES=SHORTENED has been used, this file will hold the translations from
+# the original symbols to the shortened variants.
+#
+# CXX$DEMAGLER_DB. is an ISAM file, but with the magic of RMS, it can be
+# read as a text file, with each record as one line.
+#
+# The lines will have the following syntax for any symbol found that's longer
+# than 31 characters:
+#
+# LONG_symbol_34567890123{cksum}$LONG_symbol_34567890123_more_than_31_chars
+#
+# $ is present at the end of the shortened symbol name, and is preceded by a
+# 7 character checksum. The $ makes it easy to separate the shortened name
+# from the original one.
+
+use strict;
+use warnings;
+
+usage() if scalar @ARGV < 1;
+
+my %translations = ();
+
+open DEMANGLER_DATA, $ARGV[0]
+ or die "Couldn't open $ARGV[0]: $!\n";
+while(<DEMANGLER_DATA>) {
+ s|\R$||;
+ (my $translated, my $original) = split /\$/;
+ $translations{$original} = $translated.'$';
+}
+close DEMANGLER_DATA;
+
+$| = 1; # Autoflush
+while(<STDIN>) {
+ s@
+ ((?:[A-Za-z0-9_]+)\/)?([A-Za-z0-9_]+)=(PROCEDURE|DATA)
+ @
+ if (defined($translations{$2})) {
+ my $trans = $translations{$2};
+ my $trans_uc = uc $trans;
+ if (defined($1) && $trans ne $trans_uc) {
+ "$trans_uc/$trans=$3"
+ } else {
+ "$trans=$3"
+ }
+ } else {
+ $&
+ }
+ @gxe;
+ print $_;
+}
diff --git a/apps/cms.c b/apps/cms.c
index 0d1730c56fbb..3994cb0fcd58 100644
--- a/apps/cms.c
+++ b/apps/cms.c
@@ -620,7 +620,8 @@ int cms_main(int argc, char **argv)
"recipient certificate file");
if (cert == NULL)
goto end;
- sk_X509_push(encerts, cert);
+ if (!sk_X509_push(encerts, cert))
+ goto end;
cert = NULL;
} else {
recipfile = opt_arg();
@@ -831,7 +832,8 @@ int cms_main(int argc, char **argv)
"recipient certificate file");
if (cert == NULL)
goto end;
- sk_X509_push(encerts, cert);
+ if (!sk_X509_push(encerts, cert))
+ goto end;
cert = NULL;
}
}
@@ -1413,6 +1415,7 @@ static CMS_ReceiptRequest
STACK_OF(OPENSSL_STRING) *rr_from)
{
STACK_OF(GENERAL_NAMES) *rct_to = NULL, *rct_from = NULL;
+ CMS_ReceiptRequest *rr;
rct_to = make_names_stack(rr_to);
if (rct_to == NULL)
@@ -1424,10 +1427,14 @@ static CMS_ReceiptRequest
} else {
rct_from = NULL;
}
- return CMS_ReceiptRequest_create0_ex(NULL, -1, rr_allorfirst, rct_from,
- rct_to, app_get0_libctx());
+ rr = CMS_ReceiptRequest_create0_ex(NULL, -1, rr_allorfirst, rct_from,
+ rct_to, app_get0_libctx());
+ if (rr == NULL)
+ goto err;
+ return rr;
err:
sk_GENERAL_NAMES_pop_free(rct_to, GENERAL_NAMES_free);
+ sk_GENERAL_NAMES_pop_free(rct_from, GENERAL_NAMES_free);
return NULL;
}
diff --git a/apps/demoSRP/srp_verifier.txt b/apps/demoSRP/srp_verifier.txt
new file mode 100644
index 000000000000..c2d5c6033608
--- /dev/null
+++ b/apps/demoSRP/srp_verifier.txt
@@ -0,0 +1,6 @@
+# This is a file that will be filled by the openssl srp routine.
+# You can initialize the file with additional groups, these are
+# records starting with a I followed by the g and N values and the id.
+# The exact values ... you have to dig this out from the source of srp.c
+# or srp_vfy.c
+# The last value of an I is used as the default group for new users.
diff --git a/apps/demoSRP/srp_verifier.txt.attr b/apps/demoSRP/srp_verifier.txt.attr
new file mode 100644
index 000000000000..8f7e63a3475c
--- /dev/null
+++ b/apps/demoSRP/srp_verifier.txt.attr
@@ -0,0 +1 @@
+unique_subject = yes
diff --git a/apps/errstr.c b/apps/errstr.c
index 782705a78a33..21349d21cb42 100644
--- a/apps/errstr.c
+++ b/apps/errstr.c
@@ -62,7 +62,7 @@ int errstr_main(int argc, char **argv)
/* All remaining arg are error code. */
ret = 0;
for (argv = opt_rest(); *argv != NULL; argv++) {
- if (sscanf(*argv, "%lx", &l) == 0) {
+ if (sscanf(*argv, "%lx", &l) <= 0) {
ret++;
} else {
ERR_error_string_n(l, buf, sizeof(buf));
diff --git a/apps/lib/opt.c b/apps/lib/opt.c
index 157367982d2f..d56964dbe7ba 100644
--- a/apps/lib/opt.c
+++ b/apps/lib/opt.c
@@ -696,7 +696,12 @@ int opt_verify(int opt, X509_VERIFY_PARAM *vpm)
opt_printf_stderr("%s: Invalid Policy %s\n", prog, opt_arg());
return 0;
}
- X509_VERIFY_PARAM_add0_policy(vpm, otmp);
+ if (!X509_VERIFY_PARAM_add0_policy(vpm, otmp)) {
+ ASN1_OBJECT_free(otmp);
+ opt_printf_stderr("%s: Internal error adding Policy %s\n",
+ prog, opt_arg());
+ return 0;
+ }
break;
case OPT_V_PURPOSE:
/* purpose name -> purpose index */
diff --git a/apps/list.c b/apps/list.c
index 514abacfc835..0fcbcbb083cb 100644
--- a/apps/list.c
+++ b/apps/list.c
@@ -1209,9 +1209,11 @@ static int provider_cmp(const OSSL_PROVIDER * const *a,
static int collect_providers(OSSL_PROVIDER *provider, void *stack)
{
STACK_OF(OSSL_PROVIDER) *provider_stack = stack;
-
- sk_OSSL_PROVIDER_push(provider_stack, provider);
- return 1;
+ /*
+ * If OK - result is the index of inserted data
+ * Error - result is -1 or 0
+ */
+ return sk_OSSL_PROVIDER_push(provider_stack, provider) > 0 ? 1 : 0;
}
static void list_provider_info(void)
@@ -1226,11 +1228,19 @@ static void list_provider_info(void)
BIO_printf(bio_err, "ERROR: Memory allocation\n");
return;
}
+
+ if (OSSL_PROVIDER_do_all(NULL, &collect_providers, providers) != 1) {
+ BIO_printf(bio_err, "ERROR: Memory allocation\n");
+ return;
+ }
+
BIO_printf(bio_out, "Providers:\n");
- OSSL_PROVIDER_do_all(NULL, &collect_providers, providers);
sk_OSSL_PROVIDER_sort(providers);
for (i = 0; i < sk_OSSL_PROVIDER_num(providers); i++) {
const OSSL_PROVIDER *prov = sk_OSSL_PROVIDER_value(providers, i);
+ const char *provname = OSSL_PROVIDER_get0_name(prov);
+
+ BIO_printf(bio_out, " %s\n", provname);
/* Query the "known" information parameters, the order matches below */
params[0] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_NAME,
@@ -1243,23 +1253,23 @@ static void list_provider_info(void)
params[4] = OSSL_PARAM_construct_end();
OSSL_PARAM_set_all_unmodified(params);
if (!OSSL_PROVIDER_get_params(prov, params)) {
- BIO_printf(bio_err, "ERROR: Unable to query provider parameters\n");
- return;
- }
-
- /* Print out the provider information, the params order matches above */
- BIO_printf(bio_out, " %s\n", OSSL_PROVIDER_get0_name(prov));
- if (OSSL_PARAM_modified(params))
- BIO_printf(bio_out, " name: %s\n", name);
- if (OSSL_PARAM_modified(params + 1))
- BIO_printf(bio_out, " version: %s\n", version);
- if (OSSL_PARAM_modified(params + 2))
- BIO_printf(bio_out, " status: %sactive\n", status ? "" : "in");
- if (verbose) {
- if (OSSL_PARAM_modified(params + 3))
- BIO_printf(bio_out, " build info: %s\n", buildinfo);
- print_param_types("gettable provider parameters",
- OSSL_PROVIDER_gettable_params(prov), 4);
+ BIO_printf(bio_err,
+ "WARNING: Unable to query provider parameters for %s\n",
+ provname);
+ } else {
+ /* Print out the provider information, the params order matches above */
+ if (OSSL_PARAM_modified(params))
+ BIO_printf(bio_out, " name: %s\n", name);
+ if (OSSL_PARAM_modified(params + 1))
+ BIO_printf(bio_out, " version: %s\n", version);
+ if (OSSL_PARAM_modified(params + 2))
+ BIO_printf(bio_out, " status: %sactive\n", status ? "" : "in");
+ if (verbose) {
+ if (OSSL_PARAM_modified(params + 3))
+ BIO_printf(bio_out, " build info: %s\n", buildinfo);
+ print_param_types("gettable provider parameters",
+ OSSL_PROVIDER_gettable_params(prov), 4);
+ }
}
}
sk_OSSL_PROVIDER_free(providers);
diff --git a/apps/openssl-vms.cnf b/apps/openssl-vms.cnf
new file mode 100644
index 000000000000..ac858d670d18
--- /dev/null
+++ b/apps/openssl-vms.cnf
@@ -0,0 +1,390 @@
+#
+# OpenSSL example configuration file.
+# See doc/man5/config.pod for more info.
+#
+# This is mostly being used for generation of certificate requests,
+# but may be used for auto loading of providers
+
+# Note that you can include other files from the main configuration
+# file using the .include directive.
+#.include filename
+
+# This definition stops the following lines choking if HOME isn't
+# defined.
+HOME = .
+
+ # Use this in order to automatically load providers.
+openssl_conf = openssl_init
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+# Extra OBJECT IDENTIFIER info:
+# oid_file = $ENV::HOME/.oid
+oid_section = new_oids
+
+# To use this configuration file with the "-extfile" option of the
+# "openssl x509" utility, name here the section containing the
+# X.509v3 extensions to use:
+# extensions =
+# (Alternatively, use a configuration file that has only
+# X.509v3 extensions in its main [= default] section.)
+
+[ new_oids ]
+# We can add new OIDs in here for use by 'ca', 'req' and 'ts'.
+# Add a simple OID like this:
+# testoid1=1.2.3.4
+# Or use config file substitution like this:
+# testoid2=${testoid1}.5.6
+
+# Policies used by the TSA examples.
+tsa_policy1 = 1.2.3.4.1
+tsa_policy2 = 1.2.3.4.5.6
+tsa_policy3 = 1.2.3.4.5.7
+
+# For FIPS
+# Optionally include a file that is generated by the OpenSSL fipsinstall
+# application. This file contains configuration data required by the OpenSSL
+# fips provider. It contains a named section e.g. [fips_sect] which is
+# referenced from the [provider_sect] below.
+# Refer to the OpenSSL security policy for more information.
+# .include fipsmodule.cnf
+
+[openssl_init]
+providers = provider_sect
+
+# List of providers to load
+[provider_sect]
+default = default_sect
+# The fips section name should match the section name inside the
+# included fipsmodule.cnf.
+# fips = fips_sect
+
+# If no providers are activated explicitly, the default one is activated implicitly.
+# See man 7 OSSL_PROVIDER-default for more details.
+#
+# If you add a section explicitly activating any other provider(s), you most
+# probably need to explicitly activate the default provider, otherwise it
+# becomes unavailable in openssl. As a consequence applications depending on
+# OpenSSL may not work correctly which could lead to significant system
+# problems including inability to remotely access the system.
+[default_sect]
+# activate = 1
+
+
+####################################################################
+[ ca ]
+default_ca = CA_default # The default ca section
+
+####################################################################
+[ CA_default ]
+
+dir = sys\$disk:[.demoCA # Where everything is kept
+certs = $dir.certs] # Where the issued certs are kept
+crl_dir = $dir.crl] # Where the issued crl are kept
+database = $dir]index.txt # database index file.
+#unique_subject = no # Set to 'no' to allow creation of
+ # several certs with same subject.
+new_certs_dir = $dir.newcerts] # default place for new certs.
+
+certificate = $dir]cacert.pem # The CA certificate
+serial = $dir]serial. # The current serial number
+crlnumber = $dir]crlnumber. # the current crl number
+ # must be commented out to leave a V1 CRL
+crl = $dir]crl.pem # The current CRL
+private_key = $dir.private]cakey.pem# The private key
+
+x509_extensions = usr_cert # The extensions to add to the cert
+
+# Comment out the following two lines for the "traditional"
+# (and highly broken) format.
+name_opt = ca_default # Subject Name options
+cert_opt = ca_default # Certificate field options
+
+# Extension copying option: use with caution.
+# copy_extensions = copy
+
+# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
+# so this is commented out by default to leave a V1 CRL.
+# crlnumber must also be commented out to leave a V1 CRL.
+# crl_extensions = crl_ext
+
+default_days = 365 # how long to certify for
+default_crl_days= 30 # how long before next CRL
+default_md = default # use public key default MD
+preserve = no # keep passed DN ordering
+
+# A few difference way of specifying how similar the request should look
+# For type CA, the listed attributes must be the same, and the optional
+# and supplied fields are just that :-)
+policy = policy_match
+
+# For the CA policy
+[ policy_match ]
+countryName = match
+stateOrProvinceName = match
+organizationName = match
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+# For the 'anything' policy
+# At this point in time, you must list all acceptable 'object'
+# types.
+[ policy_anything ]
+countryName = optional
+stateOrProvinceName = optional
+localityName = optional
+organizationName = optional
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+####################################################################
+[ req ]
+default_bits = 2048
+default_keyfile = privkey.pem
+distinguished_name = req_distinguished_name
+attributes = req_attributes
+x509_extensions = v3_ca # The extensions to add to the self signed cert
+
+# Passwords for private keys if not present they will be prompted for
+# input_password = secret
+# output_password = secret
+
+# This sets a mask for permitted string types. There are several options.
+# default: PrintableString, T61String, BMPString.
+# pkix : PrintableString, BMPString (PKIX recommendation before 2004)
+# utf8only: only UTF8Strings (PKIX recommendation after 2004).
+# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
+# MASK:XXXX a literal mask value.
+# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
+string_mask = utf8only
+
+# req_extensions = v3_req # The extensions to add to a certificate request
+
+[ req_distinguished_name ]
+countryName = Country Name (2 letter code)
+countryName_default = AU
+countryName_min = 2
+countryName_max = 2
+
+stateOrProvinceName = State or Province Name (full name)
+stateOrProvinceName_default = Some-State
+
+localityName = Locality Name (eg, city)
+
+0.organizationName = Organization Name (eg, company)
+0.organizationName_default = Internet Widgits Pty Ltd
+
+# we can do this but it is not needed normally :-)
+#1.organizationName = Second Organization Name (eg, company)
+#1.organizationName_default = World Wide Web Pty Ltd
+
+organizationalUnitName = Organizational Unit Name (eg, section)
+#organizationalUnitName_default =
+
+commonName = Common Name (e.g. server FQDN or YOUR name)
+commonName_max = 64
+
+emailAddress = Email Address
+emailAddress_max = 64
+
+# SET-ex3 = SET extension number 3
+
+[ req_attributes ]
+challengePassword = A challenge password
+challengePassword_min = 4
+challengePassword_max = 20
+
+unstructuredName = An optional company name
+
+[ usr_cert ]
+
+# These extensions are added when 'ca' signs a request.
+
+# This goes against PKIX guidelines but some CAs do it and some software
+# requires this to avoid interpreting an end user certificate as a CA.
+
+basicConstraints=CA:FALSE
+
+# This is typical in keyUsage for a client certificate.
+# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer
+
+# This stuff is for subjectAltName and issuerAltname.
+# Import the email address.
+# subjectAltName=email:copy
+# An alternative to produce certificates that aren't
+# deprecated according to PKIX.
+# subjectAltName=email:move
+
+# Copy subject details
+# issuerAltName=issuer:copy
+
+# This is required for TSA certificates.
+# extendedKeyUsage = critical,timeStamping
+
+[ v3_req ]
+
+# Extensions to add to a certificate request
+
+basicConstraints = CA:FALSE
+keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+[ v3_ca ]
+
+
+# Extensions for a typical CA
+
+
+# PKIX recommendation.
+
+subjectKeyIdentifier=hash
+
+authorityKeyIdentifier=keyid:always,issuer
+
+basicConstraints = critical,CA:true
+
+# Key usage: this is typical for a CA certificate. However since it will
+# prevent it being used as an test self-signed certificate it is best
+# left out by default.
+# keyUsage = cRLSign, keyCertSign
+
+# Include email address in subject alt name: another PKIX recommendation
+# subjectAltName=email:copy
+# Copy issuer details
+# issuerAltName=issuer:copy
+
+# DER hex encoding of an extension: beware experts only!
+# obj=DER:02:03
+# Where 'obj' is a standard or added object
+# You can even override a supported extension:
+# basicConstraints= critical, DER:30:03:01:01:FF
+
+[ crl_ext ]
+
+# CRL extensions.
+# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
+
+# issuerAltName=issuer:copy
+authorityKeyIdentifier=keyid:always
+
+[ proxy_cert_ext ]
+# These extensions should be added when creating a proxy certificate
+
+# This goes against PKIX guidelines but some CAs do it and some software
+# requires this to avoid interpreting an end user certificate as a CA.
+
+basicConstraints=CA:FALSE
+
+# This is typical in keyUsage for a client certificate.
+# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer
+
+# This stuff is for subjectAltName and issuerAltname.
+# Import the email address.
+# subjectAltName=email:copy
+# An alternative to produce certificates that aren't
+# deprecated according to PKIX.
+# subjectAltName=email:move
+
+# Copy subject details
+# issuerAltName=issuer:copy
+
+# This really needs to be in place for it to be a proxy certificate.
+proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
+
+####################################################################
+[ tsa ]
+
+default_tsa = tsa_config1 # the default TSA section
+
+[ tsa_config1 ]
+
+# These are used by the TSA reply generation only.
+dir = sys\$disk:[.demoCA # TSA root directory
+serial = $dir]tsaserial. # The current serial number (mandatory)
+crypto_device = builtin # OpenSSL engine to use for signing
+signer_cert = $dir/tsacert.pem # The TSA signing certificate
+ # (optional)
+certs = $dir.cacert.pem] # Certificate chain to include in reply
+ # (optional)
+signer_key = $dir/private/tsakey.pem # The TSA private key (optional)
+signer_digest = sha256 # Signing digest to use. (Optional)
+default_policy = tsa_policy1 # Policy if request did not specify it
+ # (optional)
+other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
+digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory)
+accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
+clock_precision_digits = 0 # number of digits after dot. (optional)
+ordering = yes # Is ordering defined for timestamps?
+ # (optional, default: no)
+tsa_name = yes # Must the TSA name be included in the reply?
+ # (optional, default: no)
+ess_cert_id_chain = no # Must the ESS cert id chain be included?
+ # (optional, default: no)
+ess_cert_id_alg = sha1 # algorithm to compute certificate
+ # identifier (optional, default: sha1)
+
+[insta] # CMP using Insta Demo CA
+# Message transfer
+server = pki.certificate.fi:8700
+# proxy = # set this as far as needed, e.g., http://192.168.1.1:8080
+# tls_use = 0
+path = pkix/
+
+# Server authentication
+recipient = "/C=FI/O=Insta Demo/CN=Insta Demo CA" # or set srvcert or issuer
+ignore_keyusage = 1 # potentially needed quirk
+unprotected_errors = 1 # potentially needed quirk
+extracertsout = insta.extracerts.pem
+
+# Client authentication
+ref = 3078 # user identification
+secret = pass:insta # can be used for both client and server side
+
+# Generic message options
+cmd = ir # default operation, can be overridden on cmd line with, e.g., kur
+
+# Certificate enrollment
+subject = "/CN=openssl-cmp-test"
+newkey = insta.priv.pem
+out_trusted = apps/insta.ca.crt # does not include keyUsage digitalSignature
+certout = insta.cert.pem
+
+[pbm] # Password-based protection for Insta CA
+# Server and client authentication
+ref = $insta::ref # 3078
+secret = $insta::secret # pass:insta
+
+[signature] # Signature-based protection for Insta CA
+# Server authentication
+trusted = $insta::out_trusted # apps/insta.ca.crt
+
+# Client authentication
+secret = # disable PBM
+key = $insta::newkey # insta.priv.pem
+cert = $insta::certout # insta.cert.pem
+
+[ir]
+cmd = ir
+
+[cr]
+cmd = cr
+
+[kur]
+# Certificate update
+cmd = kur
+oldcert = $insta::certout # insta.cert.pem
+
+[rr]
+# Certificate revocation
+cmd = rr
+oldcert = $insta::certout # insta.cert.pem
diff --git a/apps/rehash.c b/apps/rehash.c
index 5c6d5340becf..85eee3857942 100644
--- a/apps/rehash.c
+++ b/apps/rehash.c
@@ -45,9 +45,6 @@
# ifndef PATH_MAX
# define PATH_MAX 4096
# endif
-# ifndef NAME_MAX
-# define NAME_MAX 255
-# endif
# define MAX_COLLISIONS 256
# if defined(OPENSSL_SYS_VXWORKS)
@@ -355,21 +352,22 @@ static int do_dir(const char *dirname, enum Hash h)
OPENSSL_DIR_CTX *d = NULL;
struct stat st;
unsigned char idmask[MAX_COLLISIONS / 8];
- int n, numfiles, nextid, buflen, errs = 0;
- size_t i;
- const char *pathsep;
+ int n, numfiles, nextid, dirlen, buflen, errs = 0;
+ size_t i, fname_max_len = 20; /* maximum length of "%08x.r%d" */
+ const char *pathsep = "";
const char *filename;
- char *buf, *copy = NULL;
+ char *buf = NULL, *copy = NULL;
STACK_OF(OPENSSL_STRING) *files = NULL;
if (app_access(dirname, W_OK) < 0) {
BIO_printf(bio_err, "Skipping %s, can't write\n", dirname);
return 1;
}
- buflen = strlen(dirname);
- pathsep = (buflen && !ends_with_dirsep(dirname)) ? "/": "";
- buflen += NAME_MAX + 1 + 1;
- buf = app_malloc(buflen, "filename buffer");
+ dirlen = strlen(dirname);
+ if (dirlen != 0 && !ends_with_dirsep(dirname)) {
+ pathsep = "/";
+ dirlen++;
+ }
if (verbose)
BIO_printf(bio_out, "Doing %s\n", dirname);
@@ -380,17 +378,25 @@ static int do_dir(const char *dirname, enum Hash h)
goto err;
}
while ((filename = OPENSSL_DIR_read(&d, dirname)) != NULL) {
+ size_t fname_len = strlen(filename);
+
if ((copy = OPENSSL_strdup(filename)) == NULL
|| sk_OPENSSL_STRING_push(files, copy) == 0) {
OPENSSL_free(copy);
+ OPENSSL_DIR_end(&d);
BIO_puts(bio_err, "out of memory\n");
errs = 1;
goto err;
}
+ if (fname_len > fname_max_len)
+ fname_max_len = fname_len;
}
OPENSSL_DIR_end(&d);
sk_OPENSSL_STRING_sort(files);
+ buflen = dirlen + fname_max_len + 1;
+ buf = app_malloc(buflen, "filename buffer");
+
numfiles = sk_OPENSSL_STRING_num(files);
for (n = 0; n < numfiles; ++n) {
filename = sk_OPENSSL_STRING_value(files, n);
@@ -427,12 +433,12 @@ static int do_dir(const char *dirname, enum Hash h)
while (bit_isset(idmask, nextid))
nextid++;
- BIO_snprintf(buf, buflen, "%s%s%n%08x.%s%d",
- dirname, pathsep, &n, bp->hash,
+ BIO_snprintf(buf, buflen, "%s%s%08x.%s%d",
+ dirname, pathsep, bp->hash,
suffixes[bp->type], nextid);
if (verbose)
BIO_printf(bio_out, "link %s -> %s\n",
- ep->filename, &buf[n]);
+ ep->filename, &buf[dirlen]);
if (unlink(buf) < 0 && errno != ENOENT) {
BIO_printf(bio_err,
"%s: Can't unlink %s, %s\n",
@@ -449,12 +455,12 @@ static int do_dir(const char *dirname, enum Hash h)
bit_set(idmask, nextid);
} else if (remove_links) {
/* Link to be deleted */
- BIO_snprintf(buf, buflen, "%s%s%n%08x.%s%d",
- dirname, pathsep, &n, bp->hash,
+ BIO_snprintf(buf, buflen, "%s%s%08x.%s%d",
+ dirname, pathsep, bp->hash,
suffixes[bp->type], ep->old_id);
if (verbose)
BIO_printf(bio_out, "unlink %s\n",
- &buf[n]);
+ &buf[dirlen]);
if (unlink(buf) < 0 && errno != ENOENT) {
BIO_printf(bio_err,
"%s: Can't unlink %s, %s\n",
diff --git a/apps/req.c b/apps/req.c
index 41191803aef4..c7d4c7822cda 100644
--- a/apps/req.c
+++ b/apps/req.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 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
@@ -733,7 +733,7 @@ int req_main(int argc, char **argv)
}
goto end;
}
- BIO_free(out);
+ BIO_free_all(out);
out = NULL;
BIO_printf(bio_err, "-----\n");
}
diff --git a/apps/s_server.c b/apps/s_server.c
index c8ccdfd03ca1..3c3b209d62de 100644
--- a/apps/s_server.c
+++ b/apps/s_server.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
* Copyright 2005 Nokia. All rights reserved.
*
@@ -1670,6 +1670,11 @@ int s_server_main(int argc, char *argv[])
BIO_printf(bio_err, "Can only use -listen with DTLS\n");
goto end;
}
+
+ if (rev && socket_type == SOCK_DGRAM) {
+ BIO_printf(bio_err, "Can't use -rev with DTLS\n");
+ goto end;
+ }
#endif
if (stateless && socket_type != SOCK_STREAM) {
diff --git a/apps/smime.c b/apps/smime.c
index a2ff0b5be75c..52b4a01c232f 100644
--- a/apps/smime.c
+++ b/apps/smime.c
@@ -453,7 +453,8 @@ int smime_main(int argc, char **argv)
"recipient certificate file");
if (cert == NULL)
goto end;
- sk_X509_push(encerts, cert);
+ if (!sk_X509_push(encerts, cert))
+ goto end;
cert = NULL;
argv++;
}
diff --git a/apps/vms_decc_init.c b/apps/vms_decc_init.c
new file mode 100644
index 000000000000..21481e27bf93
--- /dev/null
+++ b/apps/vms_decc_init.c
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2010-2016 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
+ */
+
+#if defined( __VMS) && !defined( OPENSSL_NO_DECC_INIT) && \
+ defined( __DECC) && !defined( __VAX) && (__CRTL_VER >= 70301000)
+# define USE_DECC_INIT 1
+#endif
+
+#ifdef USE_DECC_INIT
+
+/*
+ * ----------------------------------------------------------------------
+ * decc_init() On non-VAX systems, uses LIB$INITIALIZE to set a collection
+ * of C RTL features without using the DECC$* logical name method.
+ * ----------------------------------------------------------------------
+ */
+
+# include <stdio.h>
+# include <stdlib.h>
+# include <unixlib.h>
+
+/* Global storage. */
+
+/* Flag to sense if decc_init() was called. */
+
+int decc_init_done = -1;
+
+/* Structure to hold a DECC$* feature name and its desired value. */
+
+typedef struct {
+ char *name;
+ int value;
+} decc_feat_t;
+
+/*
+ * Array of DECC$* feature names and their desired values. Note:
+ * DECC$ARGV_PARSE_STYLE is the urgent one.
+ */
+
+decc_feat_t decc_feat_array[] = {
+ /* Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED */
+ {"DECC$ARGV_PARSE_STYLE", 1},
+
+ /* Preserve case for file names on ODS5 disks. */
+ {"DECC$EFS_CASE_PRESERVE", 1},
+
+ /*
+ * Enable multiple dots (and most characters) in ODS5 file names, while
+ * preserving VMS-ness of ";version".
+ */
+ {"DECC$EFS_CHARSET", 1},
+
+ /* List terminator. */
+ {(char *)NULL, 0}
+};
+
+
+/* LIB$INITIALIZE initialization function. */
+
+static void decc_init(void)
+{
+ char *openssl_debug_decc_init;
+ int verbose = 0;
+ int feat_index;
+ int feat_value;
+ int feat_value_max;
+ int feat_value_min;
+ int i;
+ int sts;
+
+ /* Get debug option. */
+ openssl_debug_decc_init = getenv("OPENSSL_DEBUG_DECC_INIT");
+ if (openssl_debug_decc_init != NULL) {
+ verbose = strtol(openssl_debug_decc_init, NULL, 10);
+ if (verbose <= 0) {
+ verbose = 1;
+ }
+ }
+
+ /* Set the global flag to indicate that LIB$INITIALIZE worked. */
+ decc_init_done = 1;
+
+ /* Loop through all items in the decc_feat_array[]. */
+
+ for (i = 0; decc_feat_array[i].name != NULL; i++) {
+ /* Get the feature index. */
+ feat_index = decc$feature_get_index(decc_feat_array[i].name);
+ if (feat_index >= 0) {
+ /* Valid item. Collect its properties. */
+ feat_value = decc$feature_get_value(feat_index, 1);
+ feat_value_min = decc$feature_get_value(feat_index, 2);
+ feat_value_max = decc$feature_get_value(feat_index, 3);
+
+ /* Check the validity of our desired value. */
+ if ((decc_feat_array[i].value >= feat_value_min) &&
+ (decc_feat_array[i].value <= feat_value_max)) {
+ /* Valid value. Set it if necessary. */
+ if (feat_value != decc_feat_array[i].value) {
+ sts = decc$feature_set_value(feat_index,
+ 1, decc_feat_array[i].value);
+
+ if (verbose > 1) {
+ fprintf(stderr, " %s = %d, sts = %d.\n",
+ decc_feat_array[i].name,
+ decc_feat_array[i].value, sts);
+ }
+ }
+ } else {
+ /* Invalid DECC feature value. */
+ fprintf(stderr,
+ " INVALID DECC$FEATURE VALUE, %d: %d <= %s <= %d.\n",
+ feat_value,
+ feat_value_min, decc_feat_array[i].name,
+ feat_value_max);
+ }
+ } else {
+ /* Invalid DECC feature name. */
+ fprintf(stderr,
+ " UNKNOWN DECC$FEATURE: %s.\n", decc_feat_array[i].name);
+ }
+ }
+
+ if (verbose > 0) {
+ fprintf(stderr, " DECC_INIT complete.\n");
+ }
+}
+
+/* Get "decc_init()" into a valid, loaded LIB$INITIALIZE PSECT. */
+
+# pragma nostandard
+
+/*
+ * Establish the LIB$INITIALIZE PSECTs, with proper alignment and other
+ * attributes. Note that "nopic" is significant only on VAX.
+ */
+# pragma extern_model save
+
+# if __INITIAL_POINTER_SIZE == 64
+# define PSECT_ALIGN 3
+# else
+# define PSECT_ALIGN 2
+# endif
+
+# pragma extern_model strict_refdef "LIB$INITIALIZ" PSECT_ALIGN, nopic, nowrt
+const int spare[8] = { 0 };
+
+# pragma extern_model strict_refdef "LIB$INITIALIZE" PSECT_ALIGN, nopic, nowrt
+void (*const x_decc_init) () = decc_init;
+
+# pragma extern_model restore
+
+/* Fake reference to ensure loading the LIB$INITIALIZE PSECT. */
+
+# pragma extern_model save
+
+int LIB$INITIALIZE(void);
+
+# pragma extern_model strict_refdef
+int dmy_lib$initialize = (int)LIB$INITIALIZE;
+
+# pragma extern_model restore
+
+# pragma standard
+
+#else /* def USE_DECC_INIT */
+
+/* Dummy code to avoid a %CC-W-EMPTYFILE complaint. */
+int decc_init_dummy(void);
+
+#endif /* def USE_DECC_INIT */
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 9bb6f04e0a44..000000000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,82 +0,0 @@
-image:
- - Visual Studio 2017
-
-platform:
- - x64
- - x86
-
-environment:
- fast_finish: true
- matrix:
- - VSVER: 15
-
-configuration:
- - shared
- - minimal
-
-for:
- -
- branches:
- only:
- - master
- configuration:
- - shared
- - plain
- - minimal
-
-before_build:
- - ps: >-
- Install-Module VSSetup -Scope CurrentUser
- - ps: >-
- Get-VSSetupInstance -All
- - ps: >-
- If ($env:Platform -Match "x86") {
- $env:VCVARS_PLATFORM="x86"
- $env:TARGET="VC-WIN32 no-asm --strict-warnings"
- } Else {
- $env:VCVARS_PLATFORM="amd64"
- $env:TARGET="VC-WIN64A-masm"
- }
- - ps: >-
- If ($env:Configuration -Match "shared") {
- $env:CONFIG_OPTS="enable-fips"
- } ElseIf ($env:Configuration -Match "minimal") {
- $env:CONFIG_OPTS="no-bulk no-asm -DOPENSSL_SMALL_FOOTPRINT"
- } Else {
- $env:CONFIG_OPTS="no-fips no-shared"
- }
- - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %VCVARS_PLATFORM%
- - mkdir _build
- - cd _build
- - perl ..\Configure %TARGET% no-makedepend %CONFIG_OPTS%
- - perl configdata.pm --dump
- - cd ..
- - ps: >-
- If ($env:BUILDONLY -or $env:MAKEVERBOSE) {
- $env:NMAKE="nmake"
- } Else {
- $env:NMAKE="nmake /S"
- }
- - ps: >-
- gci env:* | sort-object name
-
-build_script:
- - cd _build
- - "%NMAKE% build_all_generated"
- - "%NMAKE% PERL=no-perl"
- - cd ..
-
-test_script:
- - cd _build
- - ps: >-
- if ($env:Configuration -Match "plain") {
- cmd /c "%NMAKE% test VERBOSE_FAILURE=yes 2>&1"
- } Else {
- cmd /c "%NMAKE% test VERBOSE_FAILURE=yes TESTS=-test_fuzz 2>&1"
- }
- - ps: >-
- if ($env:Configuration -Match "shared") {
- mkdir ..\_install
- cmd /c "%NMAKE% install DESTDIR=..\_install 2>&1"
- }
- - cd ..
diff --git a/config.com b/config.com
new file mode 100644
index 000000000000..21a6bce1be45
--- /dev/null
+++ b/config.com
@@ -0,0 +1,93 @@
+$ ! OpenSSL config: determine the architecture and run Configure
+$ ! Copyright 2016-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
+$ !
+$ ! Very simple for the moment, it will take the following arguments:
+$ !
+$ ! -32 or 32 sets /POINTER_SIZE=32
+$ ! -64 or 64 sets /POINTER_SIZE=64
+$ ! -d sets debugging
+$ ! -h prints a usage and exits
+$ ! -t test mode, doesn't run Configure
+$
+$ arch = f$edit( f$getsyi( "arch_name"), "lowercase")
+$ pointer_size = ""
+$ dryrun = 0
+$ verbose = 0
+$ here = F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"),,,"SYNTAX_ONLY") - "A.;"
+$
+$ collected_args = ""
+$ P_index = 0
+$ LOOP1:
+$ P_index = P_index + 1
+$ IF P_index .GT. 8 THEN GOTO ENDLOOP1
+$ P = F$EDIT(P1,"TRIM,LOWERCASE")
+$ IF P .EQS. "-h"
+$ THEN
+$ dryrun = 1
+$ P = ""
+$ TYPE SYS$INPUT
+$ DECK
+Usage: @config [options]
+
+ -32 or 32 Build with 32-bit pointer size.
+ -64 or 64 Build with 64-bit pointer size.
+ -d Build with debugging.
+ -t Test mode, do not run the Configure perl script.
+ -v Verbose mode, show the exact Configure call that is being made.
+ -h This help.
+
+Any other text will be passed to the Configure perl script.
+See INSTALL.md for instructions.
+
+$ EOD
+$ ENDIF
+$ IF P .EQS. "-t"
+$ THEN
+$ dryrun = 1
+$ verbose = 1
+$ P = ""
+$ ENDIF
+$ IF P .EQS. "-v"
+$ THEN
+$ verbose = 1
+$ P = ""
+$ ENDIF
+$ IF P .EQS. "-32" .OR. P .EQS. "32"
+$ THEN
+$ pointer_size = "-P32"
+$ P = ""
+$ ENDIF
+$ IF P .EQS. "-64" .OR. P .EQS. "64"
+$ THEN
+$ pointer_size = "-P64"
+$ P = ""
+$ ENDIF
+$ IF P .EQS. "-d"
+$ THEN
+$ collected_args = collected_args + " --debug"
+$ P = ""
+$ ENDIF
+$ IF P .NES. "" THEN -
+ collected_args = collected_args + " """ + P1 + """"
+$ P1 = P2
+$ P2 = P3
+$ P3 = P4
+$ P4 = P5
+$ P5 = P6
+$ P6 = P7
+$ P7 = P8
+$ P8 = ""
+$ GOTO LOOP1
+$ ENDLOOP1:
+$
+$ target = "vms-''arch'''pointer_size'"
+$ IF verbose THEN -
+ WRITE SYS$OUTPUT "PERL ''here'Configure ""''target'""",collected_args
+$ IF .not. dryrun THEN -
+ PERL 'here'Configure "''target'"'collected_args'
+$ EXIT $STATUS
diff --git a/crypto/LPdir_nyi.c b/crypto/LPdir_nyi.c
new file mode 100644
index 000000000000..a1540785f87d
--- /dev/null
+++ b/crypto/LPdir_nyi.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2004-2016 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
+ */
+
+/*
+ * This file is dual-licensed and is also available under the following
+ * terms:
+ *
+ * Copyright (c) 2004, Richard Levitte <richard@levitte.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef LPDIR_H
+# include "LPdir.h"
+#endif
+
+struct LP_dir_context_st {
+ void *dummy;
+};
+const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
+{
+ errno = EINVAL;
+ return 0;
+}
+
+int LP_find_file_end(LP_DIR_CTX **ctx)
+{
+ errno = EINVAL;
+ return 0;
+}
diff --git a/crypto/LPdir_vms.c b/crypto/LPdir_vms.c
new file mode 100644
index 000000000000..51043263ae67
--- /dev/null
+++ b/crypto/LPdir_vms.c
@@ -0,0 +1,207 @@
+/*
+ * Copyright 2004-2016 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
+ */
+
+/*
+ * This file is dual-licensed and is also available under the following
+ * terms:
+ *
+ * Copyright (c) 2004, Richard Levitte <richard@levitte.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <descrip.h>
+#include <namdef.h>
+#include <rmsdef.h>
+#include <libfildef.h>
+#include <lib$routines.h>
+#include <strdef.h>
+#include <str$routines.h>
+#include <stsdef.h>
+#ifndef LPDIR_H
+# include "LPdir.h"
+#endif
+#include "vms_rms.h"
+
+/* Some compiler options hide EVMSERR. */
+#ifndef EVMSERR
+# define EVMSERR 65535 /* error for non-translatable VMS errors */
+#endif
+
+struct LP_dir_context_st {
+ unsigned long VMS_context;
+ char filespec[NAMX_MAXRSS + 1];
+ char result[NAMX_MAXRSS + 1];
+ struct dsc$descriptor_d filespec_dsc;
+ struct dsc$descriptor_d result_dsc;
+};
+
+const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
+{
+ int status;
+ char *p, *r;
+ size_t l;
+ unsigned long flags = 0;
+
+/* Arrange 32-bit pointer to (copied) string storage, if needed. */
+#if __INITIAL_POINTER_SIZE == 64
+# pragma pointer_size save
+# pragma pointer_size 32
+ char *ctx_filespec_32p;
+# pragma pointer_size restore
+ char ctx_filespec_32[NAMX_MAXRSS + 1];
+#endif /* __INITIAL_POINTER_SIZE == 64 */
+
+#ifdef NAML$C_MAXRSS
+ flags |= LIB$M_FIL_LONG_NAMES;
+#endif
+
+ if (ctx == NULL || directory == NULL) {
+ errno = EINVAL;
+ return 0;
+ }
+
+ errno = 0;
+ if (*ctx == NULL) {
+ size_t filespeclen = strlen(directory);
+ char *filespec = NULL;
+
+ if (filespeclen == 0) {
+ errno = ENOENT;
+ return 0;
+ }
+
+ /* MUST be a VMS directory specification! Let's estimate if it is. */
+ if (directory[filespeclen - 1] != ']'
+ && directory[filespeclen - 1] != '>'
+ && directory[filespeclen - 1] != ':') {
+ errno = EINVAL;
+ return 0;
+ }
+
+ filespeclen += 4; /* "*.*;" */
+
+ if (filespeclen > NAMX_MAXRSS) {
+ errno = ENAMETOOLONG;
+ return 0;
+ }
+
+ *ctx = malloc(sizeof(**ctx));
+ if (*ctx == NULL) {
+ errno = ENOMEM;
+ return 0;
+ }
+ memset(*ctx, 0, sizeof(**ctx));
+
+ strcpy((*ctx)->filespec, directory);
+ strcat((*ctx)->filespec, "*.*;");
+
+/* Arrange 32-bit pointer to (copied) string storage, if needed. */
+#if __INITIAL_POINTER_SIZE == 64
+# define CTX_FILESPEC ctx_filespec_32p
+ /* Copy the file name to storage with a 32-bit pointer. */
+ ctx_filespec_32p = ctx_filespec_32;
+ strcpy(ctx_filespec_32p, (*ctx)->filespec);
+#else /* __INITIAL_POINTER_SIZE == 64 */
+# define CTX_FILESPEC (*ctx)->filespec
+#endif /* __INITIAL_POINTER_SIZE == 64 [else] */
+
+ (*ctx)->filespec_dsc.dsc$w_length = filespeclen;
+ (*ctx)->filespec_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ (*ctx)->filespec_dsc.dsc$b_class = DSC$K_CLASS_S;
+ (*ctx)->filespec_dsc.dsc$a_pointer = CTX_FILESPEC;
+ }
+
+ (*ctx)->result_dsc.dsc$w_length = 0;
+ (*ctx)->result_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ (*ctx)->result_dsc.dsc$b_class = DSC$K_CLASS_D;
+ (*ctx)->result_dsc.dsc$a_pointer = 0;
+
+ status = lib$find_file(&(*ctx)->filespec_dsc, &(*ctx)->result_dsc,
+ &(*ctx)->VMS_context, 0, 0, 0, &flags);
+
+ if (status == RMS$_NMF) {
+ errno = 0;
+ vaxc$errno = status;
+ return NULL;
+ }
+
+ if (!$VMS_STATUS_SUCCESS(status)) {
+ errno = EVMSERR;
+ vaxc$errno = status;
+ return NULL;
+ }
+
+ /*
+ * Quick, cheap and dirty way to discard any device and directory, since
+ * we only want file names
+ */
+ l = (*ctx)->result_dsc.dsc$w_length;
+ p = (*ctx)->result_dsc.dsc$a_pointer;
+ r = p;
+ for (; *p; p++) {
+ if (*p == '^' && p[1] != '\0') { /* Take care of ODS-5 escapes */
+ p++;
+ } else if (*p == ':' || *p == '>' || *p == ']') {
+ l -= p + 1 - r;
+ r = p + 1;
+ } else if (*p == ';') {
+ l = p - r;
+ break;
+ }
+ }
+
+ strncpy((*ctx)->result, r, l);
+ (*ctx)->result[l] = '\0';
+ str$free1_dx(&(*ctx)->result_dsc);
+
+ return (*ctx)->result;
+}
+
+int LP_find_file_end(LP_DIR_CTX **ctx)
+{
+ if (ctx != NULL && *ctx != NULL) {
+ int status = lib$find_file_end(&(*ctx)->VMS_context);
+
+ free(*ctx);
+
+ if (!$VMS_STATUS_SUCCESS(status)) {
+ errno = EVMSERR;
+ vaxc$errno = status;
+ return 0;
+ }
+ return 1;
+ }
+ errno = EINVAL;
+ return 0;
+}
diff --git a/crypto/LPdir_win.c b/crypto/LPdir_win.c
new file mode 100644
index 000000000000..83cbe1fc0907
--- /dev/null
+++ b/crypto/LPdir_win.c
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2004-2016 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
+ */
+
+/*
+ * This file is dual-licensed and is also available under the following
+ * terms:
+ *
+ * Copyright (c) 2004, Richard Levitte <richard@levitte.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <windows.h>
+#include <tchar.h>
+#include "internal/numbers.h"
+#ifndef LPDIR_H
+# include "LPdir.h"
+#endif
+
+/*
+ * We're most likely overcautious here, but let's reserve for broken WinCE
+ * headers and explicitly opt for UNICODE call. Keep in mind that our WinCE
+ * builds are compiled with -DUNICODE [as well as -D_UNICODE].
+ */
+#if defined(LP_SYS_WINCE) && !defined(FindFirstFile)
+# define FindFirstFile FindFirstFileW
+#endif
+#if defined(LP_SYS_WINCE) && !defined(FindNextFile)
+# define FindNextFile FindNextFileW
+#endif
+
+#ifndef NAME_MAX
+# define NAME_MAX 255
+#endif
+
+#ifdef CP_UTF8
+# define CP_DEFAULT CP_UTF8
+#else
+# define CP_DEFAULT CP_ACP
+#endif
+
+struct LP_dir_context_st {
+ WIN32_FIND_DATA ctx;
+ HANDLE handle;
+ char entry_name[NAME_MAX + 1];
+};
+
+const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
+{
+ if (ctx == NULL || directory == NULL) {
+ errno = EINVAL;
+ return 0;
+ }
+
+ errno = 0;
+ if (*ctx == NULL) {
+ size_t dirlen = strlen(directory);
+
+ if (dirlen == 0 || dirlen > INT_MAX - 3) {
+ errno = ENOENT;
+ return 0;
+ }
+
+ *ctx = malloc(sizeof(**ctx));
+ if (*ctx == NULL) {
+ errno = ENOMEM;
+ return 0;
+ }
+ memset(*ctx, 0, sizeof(**ctx));
+
+ if (sizeof(TCHAR) != sizeof(char)) {
+ TCHAR *wdir = NULL;
+ /* len_0 denotes string length *with* trailing 0 */
+ size_t index = 0, len_0 = dirlen + 1;
+#ifdef LP_MULTIBYTE_AVAILABLE
+ int sz = 0;
+ UINT cp;
+
+ do {
+# ifdef CP_UTF8
+ if ((sz = MultiByteToWideChar((cp = CP_UTF8), 0,
+ directory, len_0,
+ NULL, 0)) > 0 ||
+ GetLastError() != ERROR_NO_UNICODE_TRANSLATION)
+ break;
+# endif
+ sz = MultiByteToWideChar((cp = CP_ACP), 0,
+ directory, len_0,
+ NULL, 0);
+ } while (0);
+
+ if (sz > 0) {
+ /*
+ * allocate two additional characters in case we need to
+ * concatenate asterisk, |sz| covers trailing '\0'!
+ */
+ wdir = _alloca((sz + 2) * sizeof(TCHAR));
+ if (!MultiByteToWideChar(cp, 0, directory, len_0,
+ (WCHAR *)wdir, sz)) {
+ free(*ctx);
+ *ctx = NULL;
+ errno = EINVAL;
+ return 0;
+ }
+ } else
+#endif
+ {
+ sz = len_0;
+ /*
+ * allocate two additional characters in case we need to
+ * concatenate asterisk, |sz| covers trailing '\0'!
+ */
+ wdir = _alloca((sz + 2) * sizeof(TCHAR));
+ for (index = 0; index < len_0; index++)
+ wdir[index] = (TCHAR)directory[index];
+ }
+
+ sz--; /* wdir[sz] is trailing '\0' now */
+ if (wdir[sz - 1] != TEXT('*')) {
+ if (wdir[sz - 1] != TEXT('/') && wdir[sz - 1] != TEXT('\\'))
+ _tcscpy(wdir + sz, TEXT("/*"));
+ else
+ _tcscpy(wdir + sz, TEXT("*"));
+ }
+
+ (*ctx)->handle = FindFirstFile(wdir, &(*ctx)->ctx);
+ } else {
+ if (directory[dirlen - 1] != '*') {
+ char *buf = _alloca(dirlen + 3);
+
+ strcpy(buf, directory);
+ if (buf[dirlen - 1] != '/' && buf[dirlen - 1] != '\\')
+ strcpy(buf + dirlen, "/*");
+ else
+ strcpy(buf + dirlen, "*");
+
+ directory = buf;
+ }
+
+ (*ctx)->handle = FindFirstFile((TCHAR *)directory, &(*ctx)->ctx);
+ }
+
+ if ((*ctx)->handle == INVALID_HANDLE_VALUE) {
+ free(*ctx);
+ *ctx = NULL;
+ errno = EINVAL;
+ return 0;
+ }
+ } else {
+ if (FindNextFile((*ctx)->handle, &(*ctx)->ctx) == FALSE) {
+ return 0;
+ }
+ }
+ if (sizeof(TCHAR) != sizeof(char)) {
+ TCHAR *wdir = (*ctx)->ctx.cFileName;
+ size_t index, len_0 = 0;
+
+ while (wdir[len_0] && len_0 < (sizeof((*ctx)->entry_name) - 1))
+ len_0++;
+ len_0++;
+
+#ifdef LP_MULTIBYTE_AVAILABLE
+ if (!WideCharToMultiByte(CP_DEFAULT, 0, (WCHAR *)wdir, len_0,
+ (*ctx)->entry_name,
+ sizeof((*ctx)->entry_name), NULL, 0))
+#endif
+ for (index = 0; index < len_0; index++)
+ (*ctx)->entry_name[index] = (char)wdir[index];
+ } else
+ strncpy((*ctx)->entry_name, (const char *)(*ctx)->ctx.cFileName,
+ sizeof((*ctx)->entry_name) - 1);
+
+ (*ctx)->entry_name[sizeof((*ctx)->entry_name) - 1] = '\0';
+
+ return (*ctx)->entry_name;
+}
+
+int LP_find_file_end(LP_DIR_CTX **ctx)
+{
+ if (ctx != NULL && *ctx != NULL) {
+ FindClose((*ctx)->handle);
+ free(*ctx);
+ *ctx = NULL;
+ return 1;
+ }
+ errno = EINVAL;
+ return 0;
+}
diff --git a/crypto/LPdir_win32.c b/crypto/LPdir_win32.c
new file mode 100644
index 000000000000..b29e096ff30f
--- /dev/null
+++ b/crypto/LPdir_win32.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2004-2016 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
+ */
+
+/*
+ * This file is dual-licensed and is also available under the following
+ * terms:
+ *
+ * Copyright (c) 2004, Richard Levitte <richard@levitte.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define LP_SYS_WIN32
+#define LP_MULTIBYTE_AVAILABLE
+#include "LPdir_win.c"
diff --git a/crypto/LPdir_wince.c b/crypto/LPdir_wince.c
new file mode 100644
index 000000000000..ebf89628272a
--- /dev/null
+++ b/crypto/LPdir_wince.c
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2004-2016 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
+ */
+
+/*
+ * This file is dual-licensed and is also available under the following
+ * terms:
+ *
+ * Copyright (c) 2004, Richard Levitte <richard@levitte.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define LP_SYS_WINCE
+/*
+ * We might want to define LP_MULTIBYTE_AVAILABLE here. It's currently under
+ * investigation what the exact conditions would be
+ */
+#include "LPdir_win.c"
diff --git a/crypto/alphacpuid.pl b/crypto/alphacpuid.pl
new file mode 100644
index 000000000000..b96975038060
--- /dev/null
+++ b/crypto/alphacpuid.pl
@@ -0,0 +1,256 @@
+#! /usr/bin/env perl
+# Copyright 2010-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
+
+
+$output = pop and open STDOUT,">$output";
+
+print <<'___';
+.text
+
+.set noat
+
+.globl OPENSSL_cpuid_setup
+.ent OPENSSL_cpuid_setup
+OPENSSL_cpuid_setup:
+ .frame $30,0,$26
+ .prologue 0
+ ret ($26)
+.end OPENSSL_cpuid_setup
+
+.globl OPENSSL_wipe_cpu
+.ent OPENSSL_wipe_cpu
+OPENSSL_wipe_cpu:
+ .frame $30,0,$26
+ .prologue 0
+ clr $1
+ clr $2
+ clr $3
+ clr $4
+ clr $5
+ clr $6
+ clr $7
+ clr $8
+ clr $16
+ clr $17
+ clr $18
+ clr $19
+ clr $20
+ clr $21
+ clr $22
+ clr $23
+ clr $24
+ clr $25
+ clr $27
+ clr $at
+ clr $29
+ fclr $f0
+ fclr $f1
+ fclr $f10
+ fclr $f11
+ fclr $f12
+ fclr $f13
+ fclr $f14
+ fclr $f15
+ fclr $f16
+ fclr $f17
+ fclr $f18
+ fclr $f19
+ fclr $f20
+ fclr $f21
+ fclr $f22
+ fclr $f23
+ fclr $f24
+ fclr $f25
+ fclr $f26
+ fclr $f27
+ fclr $f28
+ fclr $f29
+ fclr $f30
+ mov $sp,$0
+ ret ($26)
+.end OPENSSL_wipe_cpu
+
+.globl OPENSSL_atomic_add
+.ent OPENSSL_atomic_add
+OPENSSL_atomic_add:
+ .frame $30,0,$26
+ .prologue 0
+1: ldl_l $0,0($16)
+ addl $0,$17,$1
+ stl_c $1,0($16)
+ beq $1,1b
+ addl $0,$17,$0
+ ret ($26)
+.end OPENSSL_atomic_add
+
+.globl OPENSSL_rdtsc
+.ent OPENSSL_rdtsc
+OPENSSL_rdtsc:
+ .frame $30,0,$26
+ .prologue 0
+ rpcc $0
+ ret ($26)
+.end OPENSSL_rdtsc
+
+.globl OPENSSL_cleanse
+.ent OPENSSL_cleanse
+OPENSSL_cleanse:
+ .frame $30,0,$26
+ .prologue 0
+ beq $17,.Ldone
+ and $16,7,$0
+ bic $17,7,$at
+ beq $at,.Little
+ beq $0,.Laligned
+
+.Little:
+ subq $0,8,$0
+ ldq_u $1,0($16)
+ mov $16,$2
+.Lalign:
+ mskbl $1,$16,$1
+ lda $16,1($16)
+ subq $17,1,$17
+ addq $0,1,$0
+ beq $17,.Lout
+ bne $0,.Lalign
+.Lout: stq_u $1,0($2)
+ beq $17,.Ldone
+ bic $17,7,$at
+ beq $at,.Little
+
+.Laligned:
+ stq $31,0($16)
+ subq $17,8,$17
+ lda $16,8($16)
+ bic $17,7,$at
+ bne $at,.Laligned
+ bne $17,.Little
+.Ldone: ret ($26)
+.end OPENSSL_cleanse
+
+.globl CRYPTO_memcmp
+.ent CRYPTO_memcmp
+CRYPTO_memcmp:
+ .frame $30,0,$26
+ .prologue 0
+ xor $0,$0,$0
+ beq $18,.Lno_data
+
+ xor $1,$1,$1
+ nop
+.Loop_cmp:
+ ldq_u $2,0($16)
+ subq $18,1,$18
+ ldq_u $3,0($17)
+ extbl $2,$16,$2
+ lda $16,1($16)
+ extbl $3,$17,$3
+ lda $17,1($17)
+ xor $3,$2,$2
+ or $2,$0,$0
+ bne $18,.Loop_cmp
+
+ subq $31,$0,$0
+ srl $0,63,$0
+.Lno_data:
+ ret ($26)
+.end CRYPTO_memcmp
+___
+{
+my ($out,$cnt,$max)=("\$16","\$17","\$18");
+my ($tick,$lasttick)=("\$19","\$20");
+my ($diff,$lastdiff)=("\$21","\$22");
+my ($v0,$ra,$sp,$zero)=("\$0","\$26","\$30","\$31");
+
+print <<___;
+.globl OPENSSL_instrument_bus
+.ent OPENSSL_instrument_bus
+OPENSSL_instrument_bus:
+ .frame $sp,0,$ra
+ .prologue 0
+ mov $cnt,$v0
+
+ rpcc $lasttick
+ mov 0,$diff
+
+ ecb ($out)
+ ldl_l $tick,0($out)
+ addl $diff,$tick,$tick
+ mov $tick,$diff
+ stl_c $tick,0($out)
+ stl $diff,0($out)
+
+.Loop: rpcc $tick
+ subq $tick,$lasttick,$diff
+ mov $tick,$lasttick
+
+ ecb ($out)
+ ldl_l $tick,0($out)
+ addl $diff,$tick,$tick
+ mov $tick,$diff
+ stl_c $tick,0($out)
+ stl $diff,0($out)
+
+ subl $cnt,1,$cnt
+ lda $out,4($out)
+ bne $cnt,.Loop
+
+ ret ($ra)
+.end OPENSSL_instrument_bus
+
+.globl OPENSSL_instrument_bus2
+.ent OPENSSL_instrument_bus2
+OPENSSL_instrument_bus2:
+ .frame $sp,0,$ra
+ .prologue 0
+ mov $cnt,$v0
+
+ rpcc $lasttick
+ mov 0,$diff
+
+ ecb ($out)
+ ldl_l $tick,0($out)
+ addl $diff,$tick,$tick
+ mov $tick,$diff
+ stl_c $tick,0($out)
+ stl $diff,0($out)
+
+ rpcc $tick
+ subq $tick,$lasttick,$diff
+ mov $tick,$lasttick
+ mov $diff,$lastdiff
+.Loop2:
+ ecb ($out)
+ ldl_l $tick,0($out)
+ addl $diff,$tick,$tick
+ mov $tick,$diff
+ stl_c $tick,0($out)
+ stl $diff,0($out)
+
+ subl $max,1,$max
+ beq $max,.Ldone2
+
+ rpcc $tick
+ subq $tick,$lasttick,$diff
+ mov $tick,$lasttick
+ subq $lastdiff,$diff,$tick
+ mov $diff,$lastdiff
+ cmovne $tick,1,$tick
+ subl $cnt,$tick,$cnt
+ s4addq $tick,$out,$out
+ bne $cnt,.Loop2
+
+.Ldone2:
+ subl $v0,$cnt,$v0
+ ret ($ra)
+.end OPENSSL_instrument_bus2
+___
+}
+
+close STDOUT or die "error closing STDOUT: $!";
diff --git a/crypto/asn1/asn_moid.c b/crypto/asn1/asn_moid.c
index 526219c1a723..9aaab8a269d3 100644
--- a/crypto/asn1/asn_moid.c
+++ b/crypto/asn1/asn_moid.c
@@ -67,6 +67,10 @@ static int do_create(const char *value, const char *name)
if (p == NULL) {
ln = name;
ostr = value;
+ } else if (p == value) {
+ /* we started with a leading comma */
+ ln = name;
+ ostr = p + 1;
} else {
ln = value;
ostr = p + 1;
diff --git a/crypto/asn1/asn_mstbl.c b/crypto/asn1/asn_mstbl.c
index 3543cd22568f..1208d5663d25 100644
--- a/crypto/asn1/asn_mstbl.c
+++ b/crypto/asn1/asn_mstbl.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2012-2024 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
@@ -72,6 +72,8 @@ static int do_tcreate(const char *value, const char *name)
goto err;
for (i = 0; i < sk_CONF_VALUE_num(lst); i++) {
cnf = sk_CONF_VALUE_value(lst, i);
+ if (cnf->value == NULL)
+ goto err;
if (strcmp(cnf->name, "min") == 0) {
tbl_min = strtoul(cnf->value, &eptr, 0);
if (*eptr)
@@ -98,7 +100,9 @@ static int do_tcreate(const char *value, const char *name)
if (rv == 0) {
if (cnf)
ERR_raise_data(ERR_LIB_ASN1, ASN1_R_INVALID_STRING_TABLE_VALUE,
- "field=%s, value=%s", cnf->name, cnf->value);
+ "field=%s, value=%s", cnf->name,
+ cnf->value != NULL ? cnf->value
+ : value);
else
ERR_raise_data(ERR_LIB_ASN1, ASN1_R_INVALID_STRING_TABLE_VALUE,
"name=%s, value=%s", name, value);
diff --git a/crypto/asn1/x_algor.c b/crypto/asn1/x_algor.c
index c0a5f76803ee..2c4a8d4b4ee8 100644
--- a/crypto/asn1/x_algor.c
+++ b/crypto/asn1/x_algor.c
@@ -179,7 +179,11 @@ int ossl_x509_algor_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md)
*palg = X509_ALGOR_new();
if (*palg == NULL)
goto err;
- X509_ALGOR_set0(*palg, OBJ_nid2obj(NID_mgf1), V_ASN1_SEQUENCE, stmp);
+ if (!X509_ALGOR_set0(*palg, OBJ_nid2obj(NID_mgf1), V_ASN1_SEQUENCE, stmp)) {
+ X509_ALGOR_free(*palg);
+ *palg = NULL;
+ goto err;
+ }
stmp = NULL;
err:
ASN1_STRING_free(stmp);
diff --git a/crypto/async/arch/async_win.c b/crypto/async/arch/async_win.c
new file mode 100644
index 000000000000..0b276fd504d8
--- /dev/null
+++ b/crypto/async/arch/async_win.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* This must be the first #include file */
+#include "../async_local.h"
+
+#ifdef ASYNC_WIN
+
+# include <windows.h>
+# include "internal/cryptlib.h"
+
+int ASYNC_is_capable(void)
+{
+ return 1;
+}
+
+void async_local_cleanup(void)
+{
+ async_ctx *ctx = async_get_ctx();
+ if (ctx != NULL) {
+ async_fibre *fibre = &ctx->dispatcher;
+ if (fibre != NULL && fibre->fibre != NULL && fibre->converted) {
+ ConvertFiberToThread();
+ fibre->fibre = NULL;
+ }
+ }
+}
+
+int async_fibre_init_dispatcher(async_fibre *fibre)
+{
+# if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600
+ fibre->fibre = ConvertThreadToFiberEx(NULL, FIBER_FLAG_FLOAT_SWITCH);
+# else
+ fibre->fibre = ConvertThreadToFiber(NULL);
+# endif
+ if (fibre->fibre == NULL) {
+ fibre->converted = 0;
+ fibre->fibre = GetCurrentFiber();
+ if (fibre->fibre == NULL)
+ return 0;
+ } else {
+ fibre->converted = 1;
+ }
+
+ return 1;
+}
+
+VOID CALLBACK async_start_func_win(PVOID unused)
+{
+ async_start_func();
+}
+
+#endif
diff --git a/crypto/bn/asm/alpha-mont.pl b/crypto/bn/asm/alpha-mont.pl
new file mode 100644
index 000000000000..9d362a6f65ed
--- /dev/null
+++ b/crypto/bn/asm/alpha-mont.pl
@@ -0,0 +1,327 @@
+#! /usr/bin/env perl
+# Copyright 2006-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
+
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# On 21264 RSA sign performance improves by 70/35/20/15 percent for
+# 512/1024/2048/4096 bit key lengths. This is against vendor compiler
+# instructed to '-tune host' code with in-line assembler. Other
+# benchmarks improve by 15-20%. To anchor it to something else, the
+# code provides approximately the same performance per GHz as AMD64.
+# I.e. if you compare 1GHz 21264 and 2GHz Opteron, you'll observe ~2x
+# difference.
+
+$output=pop and open STDOUT,">$output";
+
+# int bn_mul_mont(
+$rp="a0"; # BN_ULONG *rp,
+$ap="a1"; # const BN_ULONG *ap,
+$bp="a2"; # const BN_ULONG *bp,
+$np="a3"; # const BN_ULONG *np,
+$n0="a4"; # const BN_ULONG *n0,
+$num="a5"; # int num);
+
+$lo0="t0";
+$hi0="t1";
+$lo1="t2";
+$hi1="t3";
+$aj="t4";
+$bi="t5";
+$nj="t6";
+$tp="t7";
+$alo="t8";
+$ahi="t9";
+$nlo="t10";
+$nhi="t11";
+$tj="t12";
+$i="s3";
+$j="s4";
+$m1="s5";
+
+$code=<<___;
+#ifdef __linux__
+#include <asm/regdef.h>
+#else
+#include <asm.h>
+#include <regdef.h>
+#endif
+
+.text
+
+.set noat
+.set noreorder
+
+.globl bn_mul_mont
+.align 5
+.ent bn_mul_mont
+bn_mul_mont:
+ lda sp,-48(sp)
+ stq ra,0(sp)
+ stq s3,8(sp)
+ stq s4,16(sp)
+ stq s5,24(sp)
+ stq fp,32(sp)
+ mov sp,fp
+ .mask 0x0400f000,-48
+ .frame fp,48,ra
+ .prologue 0
+
+ .align 4
+ .set reorder
+ sextl $num,$num
+ mov 0,v0
+ cmplt $num,4,AT
+ bne AT,.Lexit
+
+ ldq $hi0,0($ap) # ap[0]
+ s8addq $num,16,AT
+ ldq $aj,8($ap)
+ subq sp,AT,sp
+ ldq $bi,0($bp) # bp[0]
+ lda AT,-4096(zero) # mov -4096,AT
+ ldq $n0,0($n0)
+ and sp,AT,sp
+
+ mulq $hi0,$bi,$lo0
+ ldq $hi1,0($np) # np[0]
+ umulh $hi0,$bi,$hi0
+ ldq $nj,8($np)
+
+ mulq $lo0,$n0,$m1
+
+ mulq $hi1,$m1,$lo1
+ umulh $hi1,$m1,$hi1
+
+ addq $lo1,$lo0,$lo1
+ cmpult $lo1,$lo0,AT
+ addq $hi1,AT,$hi1
+
+ mulq $aj,$bi,$alo
+ mov 2,$j
+ umulh $aj,$bi,$ahi
+ mov sp,$tp
+
+ mulq $nj,$m1,$nlo
+ s8addq $j,$ap,$aj
+ umulh $nj,$m1,$nhi
+ s8addq $j,$np,$nj
+.align 4
+.L1st:
+ .set noreorder
+ ldq $aj,0($aj)
+ addl $j,1,$j
+ ldq $nj,0($nj)
+ lda $tp,8($tp)
+
+ addq $alo,$hi0,$lo0
+ mulq $aj,$bi,$alo
+ cmpult $lo0,$hi0,AT
+ addq $nlo,$hi1,$lo1
+
+ mulq $nj,$m1,$nlo
+ addq $ahi,AT,$hi0
+ cmpult $lo1,$hi1,v0
+ cmplt $j,$num,$tj
+
+ umulh $aj,$bi,$ahi
+ addq $nhi,v0,$hi1
+ addq $lo1,$lo0,$lo1
+ s8addq $j,$ap,$aj
+
+ umulh $nj,$m1,$nhi
+ cmpult $lo1,$lo0,v0
+ addq $hi1,v0,$hi1
+ s8addq $j,$np,$nj
+
+ stq $lo1,-8($tp)
+ nop
+ unop
+ bne $tj,.L1st
+ .set reorder
+
+ addq $alo,$hi0,$lo0
+ addq $nlo,$hi1,$lo1
+ cmpult $lo0,$hi0,AT
+ cmpult $lo1,$hi1,v0
+ addq $ahi,AT,$hi0
+ addq $nhi,v0,$hi1
+
+ addq $lo1,$lo0,$lo1
+ cmpult $lo1,$lo0,v0
+ addq $hi1,v0,$hi1
+
+ stq $lo1,0($tp)
+
+ addq $hi1,$hi0,$hi1
+ cmpult $hi1,$hi0,AT
+ stq $hi1,8($tp)
+ stq AT,16($tp)
+
+ mov 1,$i
+.align 4
+.Louter:
+ s8addq $i,$bp,$bi
+ ldq $hi0,0($ap)
+ ldq $aj,8($ap)
+ ldq $bi,0($bi)
+ ldq $hi1,0($np)
+ ldq $nj,8($np)
+ ldq $tj,0(sp)
+
+ mulq $hi0,$bi,$lo0
+ umulh $hi0,$bi,$hi0
+
+ addq $lo0,$tj,$lo0
+ cmpult $lo0,$tj,AT
+ addq $hi0,AT,$hi0
+
+ mulq $lo0,$n0,$m1
+
+ mulq $hi1,$m1,$lo1
+ umulh $hi1,$m1,$hi1
+
+ addq $lo1,$lo0,$lo1
+ cmpult $lo1,$lo0,AT
+ mov 2,$j
+ addq $hi1,AT,$hi1
+
+ mulq $aj,$bi,$alo
+ mov sp,$tp
+ umulh $aj,$bi,$ahi
+
+ mulq $nj,$m1,$nlo
+ s8addq $j,$ap,$aj
+ umulh $nj,$m1,$nhi
+.align 4
+.Linner:
+ .set noreorder
+ ldq $tj,8($tp) #L0
+ nop #U1
+ ldq $aj,0($aj) #L1
+ s8addq $j,$np,$nj #U0
+
+ ldq $nj,0($nj) #L0
+ nop #U1
+ addq $alo,$hi0,$lo0 #L1
+ lda $tp,8($tp)
+
+ mulq $aj,$bi,$alo #U1
+ cmpult $lo0,$hi0,AT #L0
+ addq $nlo,$hi1,$lo1 #L1
+ addl $j,1,$j
+
+ mulq $nj,$m1,$nlo #U1
+ addq $ahi,AT,$hi0 #L0
+ addq $lo0,$tj,$lo0 #L1
+ cmpult $lo1,$hi1,v0 #U0
+
+ umulh $aj,$bi,$ahi #U1
+ cmpult $lo0,$tj,AT #L0
+ addq $lo1,$lo0,$lo1 #L1
+ addq $nhi,v0,$hi1 #U0
+
+ umulh $nj,$m1,$nhi #U1
+ s8addq $j,$ap,$aj #L0
+ cmpult $lo1,$lo0,v0 #L1
+ cmplt $j,$num,$tj #U0 # borrow $tj
+
+ addq $hi0,AT,$hi0 #L0
+ addq $hi1,v0,$hi1 #U1
+ stq $lo1,-8($tp) #L1
+ bne $tj,.Linner #U0
+ .set reorder
+
+ ldq $tj,8($tp)
+ addq $alo,$hi0,$lo0
+ addq $nlo,$hi1,$lo1
+ cmpult $lo0,$hi0,AT
+ cmpult $lo1,$hi1,v0
+ addq $ahi,AT,$hi0
+ addq $nhi,v0,$hi1
+
+ addq $lo0,$tj,$lo0
+ cmpult $lo0,$tj,AT
+ addq $hi0,AT,$hi0
+
+ ldq $tj,16($tp)
+ addq $lo1,$lo0,$j
+ cmpult $j,$lo0,v0
+ addq $hi1,v0,$hi1
+
+ addq $hi1,$hi0,$lo1
+ stq $j,0($tp)
+ cmpult $lo1,$hi0,$hi1
+ addq $lo1,$tj,$lo1
+ cmpult $lo1,$tj,AT
+ addl $i,1,$i
+ addq $hi1,AT,$hi1
+ stq $lo1,8($tp)
+ cmplt $i,$num,$tj # borrow $tj
+ stq $hi1,16($tp)
+ bne $tj,.Louter
+
+ s8addq $num,sp,$tj # &tp[num]
+ mov $rp,$bp # put rp aside
+ mov sp,$tp
+ mov sp,$ap
+ mov 0,$hi0 # clear borrow bit
+
+.align 4
+.Lsub: ldq $lo0,0($tp)
+ ldq $lo1,0($np)
+ lda $tp,8($tp)
+ lda $np,8($np)
+ subq $lo0,$lo1,$lo1 # tp[i]-np[i]
+ cmpult $lo0,$lo1,AT
+ subq $lo1,$hi0,$lo0
+ cmpult $lo1,$lo0,$hi0
+ or $hi0,AT,$hi0
+ stq $lo0,0($rp)
+ cmpult $tp,$tj,v0
+ lda $rp,8($rp)
+ bne v0,.Lsub
+
+ subq $hi1,$hi0,$hi0 # handle upmost overflow bit
+ mov sp,$tp
+ mov $bp,$rp # restore rp
+
+.align 4
+.Lcopy: ldq $aj,0($tp) # conditional copy
+ ldq $nj,0($rp)
+ lda $tp,8($tp)
+ lda $rp,8($rp)
+ cmoveq $hi0,$nj,$aj
+ stq zero,-8($tp) # zap tp
+ cmpult $tp,$tj,AT
+ stq $aj,-8($rp)
+ bne AT,.Lcopy
+ mov 1,v0
+
+.Lexit:
+ .set noreorder
+ mov fp,sp
+ /*ldq ra,0(sp)*/
+ ldq s3,8(sp)
+ ldq s4,16(sp)
+ ldq s5,24(sp)
+ ldq fp,32(sp)
+ lda sp,48(sp)
+ ret (ra)
+.end bn_mul_mont
+.ascii "Montgomery Multiplication for Alpha, CRYPTOGAMS by <appro\@openssl.org>"
+.align 2
+___
+
+print $code;
+close STDOUT or die "error closing STDOUT: $!";
diff --git a/crypto/bn/bn_exp.c b/crypto/bn/bn_exp.c
index 4e169ae1f9a4..598a592ca139 100644
--- a/crypto/bn/bn_exp.c
+++ b/crypto/bn/bn_exp.c
@@ -243,6 +243,14 @@ int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
wstart = bits - 1; /* The top bit of the window */
wend = 0; /* The bottom bit of the window */
+ if (r == p) {
+ BIGNUM *p_dup = BN_CTX_get(ctx);
+
+ if (p_dup == NULL || BN_copy(p_dup, p) == NULL)
+ goto err;
+ p = p_dup;
+ }
+
if (!BN_one(r))
goto err;
@@ -1317,6 +1325,11 @@ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
return 0;
}
+ if (r == m) {
+ ERR_raise(ERR_LIB_BN, ERR_R_PASSED_INVALID_ARGUMENT);
+ return 0;
+ }
+
bits = BN_num_bits(p);
if (bits == 0) {
/* x**0 mod 1, or x**0 mod -1 is still zero. */
@@ -1362,6 +1375,14 @@ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
wstart = bits - 1; /* The top bit of the window */
wend = 0; /* The bottom bit of the window */
+ if (r == p) {
+ BIGNUM *p_dup = BN_CTX_get(ctx);
+
+ if (p_dup == NULL || BN_copy(p_dup, p) == NULL)
+ goto err;
+ p = p_dup;
+ }
+
if (!BN_one(r))
goto err;
diff --git a/crypto/bn/bn_gf2m.c b/crypto/bn/bn_gf2m.c
index 304c2ea08d0e..c811ae82d6b1 100644
--- a/crypto/bn/bn_gf2m.c
+++ b/crypto/bn/bn_gf2m.c
@@ -734,14 +734,20 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
{
BIGNUM *b = NULL;
int ret = 0;
+ int numbits;
BN_CTX_start(ctx);
if ((b = BN_CTX_get(ctx)) == NULL)
goto err;
+ /* Fail on a non-sensical input p value */
+ numbits = BN_num_bits(p);
+ if (numbits <= 1)
+ goto err;
+
/* generate blinding value */
do {
- if (!BN_priv_rand_ex(b, BN_num_bits(p) - 1,
+ if (!BN_priv_rand_ex(b, numbits - 1,
BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY, 0, ctx))
goto err;
} while (BN_is_zero(b));
diff --git a/crypto/bn/bn_mod.c b/crypto/bn/bn_mod.c
index 7f5afa25ecc8..2dda2e3442ed 100644
--- a/crypto/bn/bn_mod.c
+++ b/crypto/bn/bn_mod.c
@@ -17,6 +17,11 @@ int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx)
* always holds)
*/
+ if (r == d) {
+ ERR_raise(ERR_LIB_BN, ERR_R_PASSED_INVALID_ARGUMENT);
+ return 0;
+ }
+
if (!(BN_mod(r, m, d, ctx)))
return 0;
if (!r->neg)
@@ -186,6 +191,11 @@ int bn_mod_sub_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
const BIGNUM *m)
{
+ if (r == m) {
+ ERR_raise(ERR_LIB_BN, ERR_R_PASSED_INVALID_ARGUMENT);
+ return 0;
+ }
+
if (!BN_sub(r, a, b))
return 0;
if (r->neg)
diff --git a/crypto/bn/bn_nist.c b/crypto/bn/bn_nist.c
index 3d4d9a2fb2df..d761e5702da2 100644
--- a/crypto/bn/bn_nist.c
+++ b/crypto/bn/bn_nist.c
@@ -319,6 +319,28 @@ static void nist_cp_bn(BN_ULONG *dst, const BN_ULONG *src, int top)
# endif
#endif /* BN_BITS2 != 64 */
+#ifdef NIST_INT64
+/* Helpers to load/store a 32-bit word (uint32_t) from/into a memory
+ * location and avoid potential aliasing issue. */
+static ossl_inline uint32_t load_u32(const void *ptr)
+{
+ uint32_t tmp;
+
+ memcpy(&tmp, ptr, sizeof(tmp));
+ return tmp;
+}
+
+static ossl_inline void store_lo32(void *ptr, NIST_INT64 val)
+{
+ /* A cast is needed for big-endian system: on a 32-bit BE system
+ * NIST_INT64 may be defined as well if the compiler supports 64-bit
+ * long long. */
+ uint32_t tmp = (uint32_t)val;
+
+ memcpy(ptr, &tmp, sizeof(tmp));
+}
+#endif /* NIST_INT64 */
+
#define nist_set_192(to, from, a1, a2, a3) \
{ \
bn_cp_64(to, 0, from, (a3) - 3) \
@@ -374,42 +396,42 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
unsigned int *rp = (unsigned int *)r_d;
const unsigned int *bp = (const unsigned int *)buf.ui;
- acc = rp[0];
+ acc = load_u32(&rp[0]);
acc += bp[3 * 2 - 6];
acc += bp[5 * 2 - 6];
- rp[0] = (unsigned int)acc;
+ store_lo32(&rp[0], acc);
acc >>= 32;
- acc += rp[1];
+ acc += load_u32(&rp[1]);
acc += bp[3 * 2 - 5];
acc += bp[5 * 2 - 5];
- rp[1] = (unsigned int)acc;
+ store_lo32(&rp[1], acc);
acc >>= 32;
- acc += rp[2];
+ acc += load_u32(&rp[2]);
acc += bp[3 * 2 - 6];
acc += bp[4 * 2 - 6];
acc += bp[5 * 2 - 6];
- rp[2] = (unsigned int)acc;
+ store_lo32(&rp[2], acc);
acc >>= 32;
- acc += rp[3];
+ acc += load_u32(&rp[3]);
acc += bp[3 * 2 - 5];
acc += bp[4 * 2 - 5];
acc += bp[5 * 2 - 5];
- rp[3] = (unsigned int)acc;
+ store_lo32(&rp[3], acc);
acc >>= 32;
- acc += rp[4];
+ acc += load_u32(&rp[4]);
acc += bp[4 * 2 - 6];
acc += bp[5 * 2 - 6];
- rp[4] = (unsigned int)acc;
+ store_lo32(&rp[4], acc);
acc >>= 32;
- acc += rp[5];
+ acc += load_u32(&rp[5]);
acc += bp[4 * 2 - 5];
acc += bp[5 * 2 - 5];
- rp[5] = (unsigned int)acc;
+ store_lo32(&rp[5], acc);
carry = (int)(acc >> 32);
}
@@ -683,36 +705,36 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
unsigned int *rp = (unsigned int *)r_d;
const unsigned int *bp = (const unsigned int *)buf.ui;
- acc = rp[0];
+ acc = load_u32(&rp[0]);
acc += bp[8 - 8];
acc += bp[9 - 8];
acc -= bp[11 - 8];
acc -= bp[12 - 8];
acc -= bp[13 - 8];
acc -= bp[14 - 8];
- rp[0] = (unsigned int)acc;
+ store_lo32(&rp[0], acc);
acc >>= 32;
- acc += rp[1];
+ acc += load_u32(&rp[1]);
acc += bp[9 - 8];
acc += bp[10 - 8];
acc -= bp[12 - 8];
acc -= bp[13 - 8];
acc -= bp[14 - 8];
acc -= bp[15 - 8];
- rp[1] = (unsigned int)acc;
+ store_lo32(&rp[1], acc);
acc >>= 32;
- acc += rp[2];
+ acc += load_u32(&rp[2]);
acc += bp[10 - 8];
acc += bp[11 - 8];
acc -= bp[13 - 8];
acc -= bp[14 - 8];
acc -= bp[15 - 8];
- rp[2] = (unsigned int)acc;
+ store_lo32(&rp[2], acc);
acc >>= 32;
- acc += rp[3];
+ acc += load_u32(&rp[3]);
acc += bp[11 - 8];
acc += bp[11 - 8];
acc += bp[12 - 8];
@@ -721,10 +743,10 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
acc -= bp[15 - 8];
acc -= bp[8 - 8];
acc -= bp[9 - 8];
- rp[3] = (unsigned int)acc;
+ store_lo32(&rp[3], acc);
acc >>= 32;
- acc += rp[4];
+ acc += load_u32(&rp[4]);
acc += bp[12 - 8];
acc += bp[12 - 8];
acc += bp[13 - 8];
@@ -732,10 +754,10 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
acc += bp[14 - 8];
acc -= bp[9 - 8];
acc -= bp[10 - 8];
- rp[4] = (unsigned int)acc;
+ store_lo32(&rp[4], acc);
acc >>= 32;
- acc += rp[5];
+ acc += load_u32(&rp[5]);
acc += bp[13 - 8];
acc += bp[13 - 8];
acc += bp[14 - 8];
@@ -743,10 +765,10 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
acc += bp[15 - 8];
acc -= bp[10 - 8];
acc -= bp[11 - 8];
- rp[5] = (unsigned int)acc;
+ store_lo32(&rp[5], acc);
acc >>= 32;
- acc += rp[6];
+ acc += load_u32(&rp[6]);
acc += bp[14 - 8];
acc += bp[14 - 8];
acc += bp[15 - 8];
@@ -755,10 +777,10 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
acc += bp[13 - 8];
acc -= bp[8 - 8];
acc -= bp[9 - 8];
- rp[6] = (unsigned int)acc;
+ store_lo32(&rp[6], acc);
acc >>= 32;
- acc += rp[7];
+ acc += load_u32(&rp[7]);
acc += bp[15 - 8];
acc += bp[15 - 8];
acc += bp[15 - 8];
@@ -767,7 +789,7 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
acc -= bp[11 - 8];
acc -= bp[12 - 8];
acc -= bp[13 - 8];
- rp[7] = (unsigned int)acc;
+ store_lo32(&rp[7], acc);
carry = (int)(acc >> 32);
}
@@ -920,32 +942,32 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
unsigned int *rp = (unsigned int *)r_d;
const unsigned int *bp = (const unsigned int *)buf.ui;
- acc = rp[0];
+ acc = load_u32(&rp[0]);
acc += bp[12 - 12];
acc += bp[21 - 12];
acc += bp[20 - 12];
acc -= bp[23 - 12];
- rp[0] = (unsigned int)acc;
+ store_lo32(&rp[0], acc);
acc >>= 32;
- acc += rp[1];
+ acc += load_u32(&rp[1]);
acc += bp[13 - 12];
acc += bp[22 - 12];
acc += bp[23 - 12];
acc -= bp[12 - 12];
acc -= bp[20 - 12];
- rp[1] = (unsigned int)acc;
+ store_lo32(&rp[1], acc);
acc >>= 32;
- acc += rp[2];
+ acc += load_u32(&rp[2]);
acc += bp[14 - 12];
acc += bp[23 - 12];
acc -= bp[13 - 12];
acc -= bp[21 - 12];
- rp[2] = (unsigned int)acc;
+ store_lo32(&rp[2], acc);
acc >>= 32;
- acc += rp[3];
+ acc += load_u32(&rp[3]);
acc += bp[15 - 12];
acc += bp[12 - 12];
acc += bp[20 - 12];
@@ -953,10 +975,10 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
acc -= bp[14 - 12];
acc -= bp[22 - 12];
acc -= bp[23 - 12];
- rp[3] = (unsigned int)acc;
+ store_lo32(&rp[3], acc);
acc >>= 32;
- acc += rp[4];
+ acc += load_u32(&rp[4]);
acc += bp[21 - 12];
acc += bp[21 - 12];
acc += bp[16 - 12];
@@ -967,10 +989,10 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
acc -= bp[15 - 12];
acc -= bp[23 - 12];
acc -= bp[23 - 12];
- rp[4] = (unsigned int)acc;
+ store_lo32(&rp[4], acc);
acc >>= 32;
- acc += rp[5];
+ acc += load_u32(&rp[5]);
acc += bp[22 - 12];
acc += bp[22 - 12];
acc += bp[17 - 12];
@@ -979,10 +1001,10 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
acc += bp[21 - 12];
acc += bp[23 - 12];
acc -= bp[16 - 12];
- rp[5] = (unsigned int)acc;
+ store_lo32(&rp[5], acc);
acc >>= 32;
- acc += rp[6];
+ acc += load_u32(&rp[6]);
acc += bp[23 - 12];
acc += bp[23 - 12];
acc += bp[18 - 12];
@@ -990,48 +1012,48 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
acc += bp[14 - 12];
acc += bp[22 - 12];
acc -= bp[17 - 12];
- rp[6] = (unsigned int)acc;
+ store_lo32(&rp[6], acc);
acc >>= 32;
- acc += rp[7];
+ acc += load_u32(&rp[7]);
acc += bp[19 - 12];
acc += bp[16 - 12];
acc += bp[15 - 12];
acc += bp[23 - 12];
acc -= bp[18 - 12];
- rp[7] = (unsigned int)acc;
+ store_lo32(&rp[7], acc);
acc >>= 32;
- acc += rp[8];
+ acc += load_u32(&rp[8]);
acc += bp[20 - 12];
acc += bp[17 - 12];
acc += bp[16 - 12];
acc -= bp[19 - 12];
- rp[8] = (unsigned int)acc;
+ store_lo32(&rp[8], acc);
acc >>= 32;
- acc += rp[9];
+ acc += load_u32(&rp[9]);
acc += bp[21 - 12];
acc += bp[18 - 12];
acc += bp[17 - 12];
acc -= bp[20 - 12];
- rp[9] = (unsigned int)acc;
+ store_lo32(&rp[9], acc);
acc >>= 32;
- acc += rp[10];
+ acc += load_u32(&rp[10]);
acc += bp[22 - 12];
acc += bp[19 - 12];
acc += bp[18 - 12];
acc -= bp[21 - 12];
- rp[10] = (unsigned int)acc;
+ store_lo32(&rp[10], acc);
acc >>= 32;
- acc += rp[11];
+ acc += load_u32(&rp[11]);
acc += bp[23 - 12];
acc += bp[20 - 12];
acc += bp[19 - 12];
acc -= bp[22 - 12];
- rp[11] = (unsigned int)acc;
+ store_lo32(&rp[11], acc);
carry = (int)(acc >> 32);
}
diff --git a/crypto/build.info b/crypto/build.info
index c04db5591120..a45bf8deefd5 100644
--- a/crypto/build.info
+++ b/crypto/build.info
@@ -74,8 +74,8 @@ DEFINE[../providers/libfips.a]=$CPUIDDEF
# already gets everything that the static libcrypto.a has, and doesn't need it
# added again.
IF[{- !$disabled{module} && !$disabled{shared} -}]
- SOURCE[../providers/liblegacy.a]=$CPUID_COMMON
- DEFINE[../providers/liblegacy.a]=$CPUIDDEF
+ SOURCE[../providers/legacy]=$CPUID_COMMON
+ DEFINE[../providers/legacy]=$CPUIDDEF
ENDIF
# Implementations are now spread across several libraries, so the CPUID define
diff --git a/crypto/cms/cms_att.c b/crypto/cms/cms_att.c
index 5b99516b29a1..64acda72630a 100644
--- a/crypto/cms/cms_att.c
+++ b/crypto/cms/cms_att.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2008-2024 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
@@ -12,8 +12,9 @@
#include <openssl/x509v3.h>
#include <openssl/err.h>
#include <openssl/cms.h>
-#include "cms_local.h"
#include "internal/nelem.h"
+#include "crypto/x509.h"
+#include "cms_local.h"
/*-
* Attribute flags.
@@ -94,7 +95,7 @@ X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc)
int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr)
{
- if (X509at_add1_attr(&si->signedAttrs, attr))
+ if (ossl_x509at_add1_attr(&si->signedAttrs, attr))
return 1;
return 0;
}
@@ -103,7 +104,7 @@ int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si,
const ASN1_OBJECT *obj, int type,
const void *bytes, int len)
{
- if (X509at_add1_attr_by_OBJ(&si->signedAttrs, obj, type, bytes, len))
+ if (ossl_x509at_add1_attr_by_OBJ(&si->signedAttrs, obj, type, bytes, len))
return 1;
return 0;
}
@@ -111,7 +112,7 @@ int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si,
int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si,
int nid, int type, const void *bytes, int len)
{
- if (X509at_add1_attr_by_NID(&si->signedAttrs, nid, type, bytes, len))
+ if (ossl_x509at_add1_attr_by_NID(&si->signedAttrs, nid, type, bytes, len))
return 1;
return 0;
}
@@ -120,7 +121,8 @@ int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si,
const char *attrname, int type,
const void *bytes, int len)
{
- if (X509at_add1_attr_by_txt(&si->signedAttrs, attrname, type, bytes, len))
+ if (ossl_x509at_add1_attr_by_txt(&si->signedAttrs, attrname, type, bytes,
+ len))
return 1;
return 0;
}
@@ -161,7 +163,7 @@ X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc)
int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr)
{
- if (X509at_add1_attr(&si->unsignedAttrs, attr))
+ if (ossl_x509at_add1_attr(&si->unsignedAttrs, attr))
return 1;
return 0;
}
@@ -170,7 +172,7 @@ int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si,
const ASN1_OBJECT *obj, int type,
const void *bytes, int len)
{
- if (X509at_add1_attr_by_OBJ(&si->unsignedAttrs, obj, type, bytes, len))
+ if (ossl_x509at_add1_attr_by_OBJ(&si->unsignedAttrs, obj, type, bytes, len))
return 1;
return 0;
}
@@ -179,7 +181,7 @@ int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si,
int nid, int type,
const void *bytes, int len)
{
- if (X509at_add1_attr_by_NID(&si->unsignedAttrs, nid, type, bytes, len))
+ if (ossl_x509at_add1_attr_by_NID(&si->unsignedAttrs, nid, type, bytes, len))
return 1;
return 0;
}
@@ -188,8 +190,8 @@ int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si,
const char *attrname, int type,
const void *bytes, int len)
{
- if (X509at_add1_attr_by_txt(&si->unsignedAttrs, attrname,
- type, bytes, len))
+ if (ossl_x509at_add1_attr_by_txt(&si->unsignedAttrs, attrname,
+ type, bytes, len))
return 1;
return 0;
}
diff --git a/crypto/cms/cms_dh.c b/crypto/cms/cms_dh.c
index 9509796317b3..2f54ed2673a9 100644
--- a/crypto/cms/cms_dh.c
+++ b/crypto/cms/cms_dh.c
@@ -316,10 +316,10 @@ static int dh_cms_encrypt(CMS_RecipientInfo *ri)
goto err;
ASN1_STRING_set0(wrap_str, penc, penclen);
penc = NULL;
- X509_ALGOR_set0(talg, OBJ_nid2obj(NID_id_smime_alg_ESDH),
- V_ASN1_SEQUENCE, wrap_str);
-
- rv = 1;
+ rv = X509_ALGOR_set0(talg, OBJ_nid2obj(NID_id_smime_alg_ESDH),
+ V_ASN1_SEQUENCE, wrap_str);
+ if (!rv)
+ ASN1_STRING_free(wrap_str);
err:
OPENSSL_free(penc);
diff --git a/crypto/cms/cms_rsa.c b/crypto/cms/cms_rsa.c
index 61fd43fb54d0..12bc81843897 100644
--- a/crypto/cms/cms_rsa.c
+++ b/crypto/cms/cms_rsa.c
@@ -99,8 +99,10 @@ static int rsa_cms_decrypt(CMS_RecipientInfo *ri)
if (EVP_PKEY_CTX_set_rsa_mgf1_md(pkctx, mgf1md) <= 0)
goto err;
if (label != NULL
- && EVP_PKEY_CTX_set0_rsa_oaep_label(pkctx, label, labellen) <= 0)
+ && EVP_PKEY_CTX_set0_rsa_oaep_label(pkctx, label, labellen) <= 0) {
+ OPENSSL_free(label);
goto err;
+ }
/* Carry on */
rv = 1;
@@ -114,6 +116,7 @@ static int rsa_cms_encrypt(CMS_RecipientInfo *ri)
const EVP_MD *md, *mgf1md;
RSA_OAEP_PARAMS *oaep = NULL;
ASN1_STRING *os = NULL;
+ ASN1_OCTET_STRING *los = NULL;
X509_ALGOR *alg;
EVP_PKEY_CTX *pkctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
int pad_mode = RSA_PKCS1_PADDING, rv = 0, labellen;
@@ -125,10 +128,10 @@ static int rsa_cms_encrypt(CMS_RecipientInfo *ri)
if (EVP_PKEY_CTX_get_rsa_padding(pkctx, &pad_mode) <= 0)
return 0;
}
- if (pad_mode == RSA_PKCS1_PADDING) {
- X509_ALGOR_set0(alg, OBJ_nid2obj(NID_rsaEncryption), V_ASN1_NULL, 0);
- return 1;
- }
+ if (pad_mode == RSA_PKCS1_PADDING)
+ return X509_ALGOR_set0(alg, OBJ_nid2obj(NID_rsaEncryption),
+ V_ASN1_NULL, NULL);
+
/* Not supported */
if (pad_mode != RSA_PKCS1_OAEP_PADDING)
return 0;
@@ -147,30 +150,32 @@ static int rsa_cms_encrypt(CMS_RecipientInfo *ri)
if (!ossl_x509_algor_md_to_mgf1(&oaep->maskGenFunc, mgf1md))
goto err;
if (labellen > 0) {
- ASN1_OCTET_STRING *los;
-
oaep->pSourceFunc = X509_ALGOR_new();
if (oaep->pSourceFunc == NULL)
goto err;
los = ASN1_OCTET_STRING_new();
if (los == NULL)
goto err;
- if (!ASN1_OCTET_STRING_set(los, label, labellen)) {
- ASN1_OCTET_STRING_free(los);
+ if (!ASN1_OCTET_STRING_set(los, label, labellen))
goto err;
- }
- X509_ALGOR_set0(oaep->pSourceFunc, OBJ_nid2obj(NID_pSpecified),
- V_ASN1_OCTET_STRING, los);
+
+ if (!X509_ALGOR_set0(oaep->pSourceFunc, OBJ_nid2obj(NID_pSpecified),
+ V_ASN1_OCTET_STRING, los))
+ goto err;
+
+ los = NULL;
}
- /* create string with pss parameter encoding. */
+ /* create string with oaep parameter encoding. */
if (!ASN1_item_pack(oaep, ASN1_ITEM_rptr(RSA_OAEP_PARAMS), &os))
- goto err;
- X509_ALGOR_set0(alg, OBJ_nid2obj(NID_rsaesOaep), V_ASN1_SEQUENCE, os);
+ goto err;
+ if (!X509_ALGOR_set0(alg, OBJ_nid2obj(NID_rsaesOaep), V_ASN1_SEQUENCE, os))
+ goto err;
os = NULL;
rv = 1;
err:
RSA_OAEP_PARAMS_free(oaep);
ASN1_STRING_free(os);
+ ASN1_OCTET_STRING_free(los);
return rv;
}
diff --git a/crypto/cms/cms_sd.c b/crypto/cms/cms_sd.c
index 2093657a2a4a..3a21664e9da2 100644
--- a/crypto/cms/cms_sd.c
+++ b/crypto/cms/cms_sd.c
@@ -1037,31 +1037,32 @@ int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs)
int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs,
int algnid, int keysize)
{
- X509_ALGOR *alg;
+ X509_ALGOR *alg = NULL;
ASN1_INTEGER *key = NULL;
if (keysize > 0) {
key = ASN1_INTEGER_new();
- if (key == NULL || !ASN1_INTEGER_set(key, keysize)) {
- ASN1_INTEGER_free(key);
- return 0;
- }
+ if (key == NULL || !ASN1_INTEGER_set(key, keysize))
+ goto err;
}
alg = X509_ALGOR_new();
- if (alg == NULL) {
- ASN1_INTEGER_free(key);
- return 0;
- }
+ if (alg == NULL)
+ goto err;
- X509_ALGOR_set0(alg, OBJ_nid2obj(algnid),
- key ? V_ASN1_INTEGER : V_ASN1_UNDEF, key);
+ if (!X509_ALGOR_set0(alg, OBJ_nid2obj(algnid),
+ key ? V_ASN1_INTEGER : V_ASN1_UNDEF, key))
+ goto err;
+ key = NULL;
if (*algs == NULL)
*algs = sk_X509_ALGOR_new_null();
- if (*algs == NULL || !sk_X509_ALGOR_push(*algs, alg)) {
- X509_ALGOR_free(alg);
- return 0;
- }
+ if (*algs == NULL || !sk_X509_ALGOR_push(*algs, alg))
+ goto err;
return 1;
+
+ err:
+ ASN1_INTEGER_free(key);
+ X509_ALGOR_free(alg);
+ return 0;
}
/* Check to see if a cipher exists and if so add S/MIME capabilities */
diff --git a/crypto/cms/cms_smime.c b/crypto/cms/cms_smime.c
index 479038d5732f..d7719267c8c8 100644
--- a/crypto/cms/cms_smime.c
+++ b/crypto/cms/cms_smime.c
@@ -558,7 +558,7 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si,
{
CMS_SignerInfo *rct_si;
CMS_ContentInfo *cms = NULL;
- ASN1_OCTET_STRING **pos, *os;
+ ASN1_OCTET_STRING **pos, *os = NULL;
BIO *rct_cont = NULL;
int r = 0;
const CMS_CTX *ctx = si->cms_ctx;
@@ -620,6 +620,7 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si,
if (r)
return cms;
CMS_ContentInfo_free(cms);
+ ASN1_OCTET_STRING_free(os);
return NULL;
}
diff --git a/crypto/conf/conf_err.c b/crypto/conf/conf_err.c
index 68ee90b97055..fc0eee7d2f85 100644
--- a/crypto/conf/conf_err.c
+++ b/crypto/conf/conf_err.c
@@ -41,6 +41,8 @@ static const ERR_STRING_DATA CONF_str_reasons[] = {
"openssl conf references missing section"},
{ERR_PACK(ERR_LIB_CONF, 0, CONF_R_RECURSIVE_DIRECTORY_INCLUDE),
"recursive directory include"},
+ {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_RECURSIVE_SECTION_REFERENCE),
+ "recursive section reference"},
{ERR_PACK(ERR_LIB_CONF, 0, CONF_R_RELATIVE_PATH), "relative path"},
{ERR_PACK(ERR_LIB_CONF, 0, CONF_R_SSL_COMMAND_SECTION_EMPTY),
"ssl command section empty"},
diff --git a/crypto/dh/dh_check.c b/crypto/dh/dh_check.c
index 7ba2beae7fd6..e20eb62081c5 100644
--- a/crypto/dh/dh_check.c
+++ b/crypto/dh/dh_check.c
@@ -249,6 +249,18 @@ int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key)
*/
int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret)
{
+ /* Don't do any checks at all with an excessively large modulus */
+ if (BN_num_bits(dh->params.p) > OPENSSL_DH_CHECK_MAX_MODULUS_BITS) {
+ ERR_raise(ERR_LIB_DH, DH_R_MODULUS_TOO_LARGE);
+ *ret = DH_MODULUS_TOO_LARGE | DH_CHECK_PUBKEY_INVALID;
+ return 0;
+ }
+
+ if (dh->params.q != NULL && BN_ucmp(dh->params.p, dh->params.q) < 0) {
+ *ret |= DH_CHECK_INVALID_Q_VALUE | DH_CHECK_PUBKEY_INVALID;
+ return 1;
+ }
+
return ossl_ffc_validate_public_key(&dh->params, pub_key, ret);
}
diff --git a/crypto/dh/dh_err.c b/crypto/dh/dh_err.c
index 4152397426cc..f76ac0dd1463 100644
--- a/crypto/dh/dh_err.c
+++ b/crypto/dh/dh_err.c
@@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
- * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2023 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
@@ -54,6 +54,7 @@ static const ERR_STRING_DATA DH_str_reasons[] = {
{ERR_PACK(ERR_LIB_DH, 0, DH_R_PARAMETER_ENCODING_ERROR),
"parameter encoding error"},
{ERR_PACK(ERR_LIB_DH, 0, DH_R_PEER_KEY_ERROR), "peer key error"},
+ {ERR_PACK(ERR_LIB_DH, 0, DH_R_Q_TOO_LARGE), "q too large"},
{ERR_PACK(ERR_LIB_DH, 0, DH_R_SHARED_INFO_ERROR), "shared info error"},
{ERR_PACK(ERR_LIB_DH, 0, DH_R_UNABLE_TO_CHECK_GENERATOR),
"unable to check generator"},
diff --git a/crypto/dh/dh_key.c b/crypto/dh/dh_key.c
index d84ea99241b9..afc49f5cdc87 100644
--- a/crypto/dh/dh_key.c
+++ b/crypto/dh/dh_key.c
@@ -49,6 +49,12 @@ int ossl_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
goto err;
}
+ if (dh->params.q != NULL
+ && BN_num_bits(dh->params.q) > OPENSSL_DH_MAX_MODULUS_BITS) {
+ ERR_raise(ERR_LIB_DH, DH_R_Q_TOO_LARGE);
+ goto err;
+ }
+
if (BN_num_bits(dh->params.p) < DH_MIN_MODULUS_BITS) {
ERR_raise(ERR_LIB_DH, DH_R_MODULUS_TOO_SMALL);
return 0;
@@ -267,6 +273,12 @@ static int generate_key(DH *dh)
return 0;
}
+ if (dh->params.q != NULL
+ && BN_num_bits(dh->params.q) > OPENSSL_DH_MAX_MODULUS_BITS) {
+ ERR_raise(ERR_LIB_DH, DH_R_Q_TOO_LARGE);
+ return 0;
+ }
+
if (BN_num_bits(dh->params.p) < DH_MIN_MODULUS_BITS) {
ERR_raise(ERR_LIB_DH, DH_R_MODULUS_TOO_SMALL);
return 0;
diff --git a/crypto/dso/dso_vms.c b/crypto/dso/dso_vms.c
new file mode 100644
index 000000000000..aa2dfaa4d15f
--- /dev/null
+++ b/crypto/dso/dso_vms.c
@@ -0,0 +1,489 @@
+/*
+ * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "dso_local.h"
+
+#ifdef OPENSSL_SYS_VMS
+
+# pragma message disable DOLLARID
+# include <errno.h>
+# include <rms.h>
+# include <lib$routines.h>
+# include <libfisdef.h>
+# include <stsdef.h>
+# include <descrip.h>
+# include <starlet.h>
+# include "../vms_rms.h"
+
+/* Some compiler options may mask the declaration of "_malloc32". */
+# if __INITIAL_POINTER_SIZE && defined _ANSI_C_SOURCE
+# if __INITIAL_POINTER_SIZE == 64
+# pragma pointer_size save
+# pragma pointer_size 32
+void *_malloc32(__size_t);
+# pragma pointer_size restore
+# endif /* __INITIAL_POINTER_SIZE == 64 */
+# endif /* __INITIAL_POINTER_SIZE && defined
+ * _ANSI_C_SOURCE */
+
+# pragma message disable DOLLARID
+
+static int vms_load(DSO *dso);
+static int vms_unload(DSO *dso);
+static DSO_FUNC_TYPE vms_bind_func(DSO *dso, const char *symname);
+static char *vms_name_converter(DSO *dso, const char *filename);
+static char *vms_merger(DSO *dso, const char *filespec1,
+ const char *filespec2);
+
+static DSO_METHOD dso_meth_vms = {
+ "OpenSSL 'VMS' shared library method",
+ vms_load,
+ NULL, /* unload */
+ vms_bind_func,
+ NULL, /* ctrl */
+ vms_name_converter,
+ vms_merger,
+ NULL, /* init */
+ NULL, /* finish */
+ NULL, /* pathbyaddr */
+ NULL /* globallookup */
+};
+
+/*
+ * On VMS, the only "handle" is the file name. LIB$FIND_IMAGE_SYMBOL depends
+ * on the reference to the file name being the same for all calls regarding
+ * one shared image, so we'll just store it in an instance of the following
+ * structure and put a pointer to that instance in the meth_data stack.
+ */
+typedef struct dso_internal_st {
+ /*
+ * This should contain the name only, no directory, no extension, nothing
+ * but a name.
+ */
+ struct dsc$descriptor_s filename_dsc;
+ char filename[NAMX_MAXRSS + 1];
+ /*
+ * This contains whatever is not in filename, if needed. Normally not
+ * defined.
+ */
+ struct dsc$descriptor_s imagename_dsc;
+ char imagename[NAMX_MAXRSS + 1];
+} DSO_VMS_INTERNAL;
+
+DSO_METHOD *DSO_METHOD_openssl(void)
+{
+ return &dso_meth_vms;
+}
+
+static int vms_load(DSO *dso)
+{
+ void *ptr = NULL;
+ /* See applicable comments in dso_dl.c */
+ char *filename = DSO_convert_filename(dso, NULL);
+
+/* Ensure 32-bit pointer for "p", and appropriate malloc() function. */
+# if __INITIAL_POINTER_SIZE == 64
+# define DSO_MALLOC _malloc32
+# pragma pointer_size save
+# pragma pointer_size 32
+# else /* __INITIAL_POINTER_SIZE == 64 */
+# define DSO_MALLOC OPENSSL_malloc
+# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
+
+ DSO_VMS_INTERNAL *p = NULL;
+
+# if __INITIAL_POINTER_SIZE == 64
+# pragma pointer_size restore
+# endif /* __INITIAL_POINTER_SIZE == 64 */
+
+ const char *sp1, *sp2; /* Search result */
+ const char *ext = NULL; /* possible extension to add */
+
+ if (filename == NULL) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_NO_FILENAME);
+ goto err;
+ }
+
+ /*-
+ * A file specification may look like this:
+ *
+ * node::dev:[dir-spec]name.type;ver
+ *
+ * or (for compatibility with TOPS-20):
+ *
+ * node::dev:<dir-spec>name.type;ver
+ *
+ * and the dir-spec uses '.' as separator. Also, a dir-spec
+ * may consist of several parts, with mixed use of [] and <>:
+ *
+ * [dir1.]<dir2>
+ *
+ * We need to split the file specification into the name and
+ * the rest (both before and after the name itself).
+ */
+ /*
+ * Start with trying to find the end of a dir-spec, and save the position
+ * of the byte after in sp1
+ */
+ sp1 = strrchr(filename, ']');
+ sp2 = strrchr(filename, '>');
+ if (sp1 == NULL)
+ sp1 = sp2;
+ if (sp2 != NULL && sp2 > sp1)
+ sp1 = sp2;
+ if (sp1 == NULL)
+ sp1 = strrchr(filename, ':');
+ if (sp1 == NULL)
+ sp1 = filename;
+ else
+ sp1++; /* The byte after the found character */
+ /* Now, let's see if there's a type, and save the position in sp2 */
+ sp2 = strchr(sp1, '.');
+ /*
+ * If there is a period and the next character is a semi-colon,
+ * we need to add an extension
+ */
+ if (sp2 != NULL && sp2[1] == ';')
+ ext = ".EXE";
+ /*
+ * If we found it, that's where we'll cut. Otherwise, look for a version
+ * number and save the position in sp2
+ */
+ if (sp2 == NULL) {
+ sp2 = strchr(sp1, ';');
+ ext = ".EXE";
+ }
+ /*
+ * If there was still nothing to find, set sp2 to point at the end of the
+ * string
+ */
+ if (sp2 == NULL)
+ sp2 = sp1 + strlen(sp1);
+
+ /* Check that we won't get buffer overflows */
+ if (sp2 - sp1 > FILENAME_MAX
+ || (sp1 - filename) + strlen(sp2) > FILENAME_MAX) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_FILENAME_TOO_BIG);
+ goto err;
+ }
+
+ p = DSO_MALLOC(sizeof(*p));
+ if (p == NULL) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ strncpy(p->filename, sp1, sp2 - sp1);
+ p->filename[sp2 - sp1] = '\0';
+
+ strncpy(p->imagename, filename, sp1 - filename);
+ p->imagename[sp1 - filename] = '\0';
+ if (ext) {
+ strcat(p->imagename, ext);
+ if (*sp2 == '.')
+ sp2++;
+ }
+ strcat(p->imagename, sp2);
+
+ p->filename_dsc.dsc$w_length = strlen(p->filename);
+ p->filename_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ p->filename_dsc.dsc$b_class = DSC$K_CLASS_S;
+ p->filename_dsc.dsc$a_pointer = p->filename;
+ p->imagename_dsc.dsc$w_length = strlen(p->imagename);
+ p->imagename_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ p->imagename_dsc.dsc$b_class = DSC$K_CLASS_S;
+ p->imagename_dsc.dsc$a_pointer = p->imagename;
+
+ if (!sk_void_push(dso->meth_data, (char *)p)) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_STACK_ERROR);
+ goto err;
+ }
+
+ /* Success (for now, we lie. We actually do not know...) */
+ dso->loaded_filename = filename;
+ return 1;
+ err:
+ /* Cleanup! */
+ OPENSSL_free(p);
+ OPENSSL_free(filename);
+ return 0;
+}
+
+/*
+ * Note that this doesn't actually unload the shared image, as there is no
+ * such thing in VMS. Next time it get loaded again, a new copy will
+ * actually be loaded.
+ */
+static int vms_unload(DSO *dso)
+{
+ DSO_VMS_INTERNAL *p;
+ if (dso == NULL) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
+ return 0;
+ }
+ if (sk_void_num(dso->meth_data) < 1)
+ return 1;
+ p = (DSO_VMS_INTERNAL *)sk_void_pop(dso->meth_data);
+ if (p == NULL) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_NULL_HANDLE);
+ return 0;
+ }
+ /* Cleanup */
+ OPENSSL_free(p);
+ return 1;
+}
+
+/*
+ * We must do this in a separate function because of the way the exception
+ * handler works (it makes this function return
+ */
+static int do_find_symbol(DSO_VMS_INTERNAL *ptr,
+ struct dsc$descriptor_s *symname_dsc, void **sym,
+ unsigned long flags)
+{
+ /*
+ * Make sure that signals are caught and returned instead of aborting the
+ * program. The exception handler gets unestablished automatically on
+ * return from this function.
+ */
+ lib$establish(lib$sig_to_ret);
+
+ if (ptr->imagename_dsc.dsc$w_length)
+ return lib$find_image_symbol(&ptr->filename_dsc,
+ symname_dsc, sym,
+ &ptr->imagename_dsc, flags);
+ else
+ return lib$find_image_symbol(&ptr->filename_dsc,
+ symname_dsc, sym, 0, flags);
+}
+
+# ifndef LIB$M_FIS_MIXEDCASE
+# define LIB$M_FIS_MIXEDCASE (1 << 4);
+# endif
+void vms_bind_sym(DSO *dso, const char *symname, void **sym)
+{
+ DSO_VMS_INTERNAL *ptr;
+ int status = 0;
+ struct dsc$descriptor_s symname_dsc;
+
+/* Arrange 32-bit pointer to (copied) string storage, if needed. */
+# if __INITIAL_POINTER_SIZE == 64
+# define SYMNAME symname_32p
+# pragma pointer_size save
+# pragma pointer_size 32
+ char *symname_32p;
+# pragma pointer_size restore
+ char symname_32[NAMX_MAXRSS + 1];
+# else /* __INITIAL_POINTER_SIZE == 64 */
+# define SYMNAME ((char *) symname)
+# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
+
+ *sym = NULL;
+
+ if ((dso == NULL) || (symname == NULL)) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
+ return;
+ }
+# if __INITIAL_POINTER_SIZE == 64
+ /* Copy the symbol name to storage with a 32-bit pointer. */
+ symname_32p = symname_32;
+ strcpy(symname_32p, symname);
+# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
+
+ symname_dsc.dsc$w_length = strlen(SYMNAME);
+ symname_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ symname_dsc.dsc$b_class = DSC$K_CLASS_S;
+ symname_dsc.dsc$a_pointer = SYMNAME;
+
+ if (sk_void_num(dso->meth_data) < 1) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_STACK_ERROR);
+ return;
+ }
+ ptr = (DSO_VMS_INTERNAL *)sk_void_value(dso->meth_data,
+ sk_void_num(dso->meth_data) - 1);
+ if (ptr == NULL) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_NULL_HANDLE);
+ return;
+ }
+
+ status = do_find_symbol(ptr, &symname_dsc, sym, LIB$M_FIS_MIXEDCASE);
+
+ if (!$VMS_STATUS_SUCCESS(status))
+ status = do_find_symbol(ptr, &symname_dsc, sym, 0);
+
+ if (!$VMS_STATUS_SUCCESS(status)) {
+ unsigned short length;
+ char errstring[257];
+ struct dsc$descriptor_s errstring_dsc;
+
+ errstring_dsc.dsc$w_length = sizeof(errstring);
+ errstring_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ errstring_dsc.dsc$b_class = DSC$K_CLASS_S;
+ errstring_dsc.dsc$a_pointer = errstring;
+
+ *sym = NULL;
+
+ status = sys$getmsg(status, &length, &errstring_dsc, 1, 0);
+
+ if (!$VMS_STATUS_SUCCESS(status))
+ lib$signal(status); /* This is really bad. Abort! */
+ else {
+ errstring[length] = '\0';
+
+ if (ptr->imagename_dsc.dsc$w_length)
+ ERR_raise_data(ERR_LIB_DSO, DSO_R_SYM_FAILURE,
+ "Symbol %s in %s (%s): %s",
+ symname, ptr->filename, ptr->imagename,
+ errstring);
+ else
+ ERR_raise_data(ERR_LIB_DSO, DSO_R_SYM_FAILURE,
+ "Symbol %s in %s: %s",
+ symname, ptr->filename, errstring);
+ }
+ return;
+ }
+ return;
+}
+
+static DSO_FUNC_TYPE vms_bind_func(DSO *dso, const char *symname)
+{
+ DSO_FUNC_TYPE sym = 0;
+ vms_bind_sym(dso, symname, (void **)&sym);
+ return sym;
+}
+
+static char *vms_merger(DSO *dso, const char *filespec1,
+ const char *filespec2)
+{
+ int status;
+ int filespec1len, filespec2len;
+ struct FAB fab;
+ struct NAMX_STRUCT nam;
+ char esa[NAMX_MAXRSS + 1];
+ char *merged;
+
+/* Arrange 32-bit pointer to (copied) string storage, if needed. */
+# if __INITIAL_POINTER_SIZE == 64
+# define FILESPEC1 filespec1_32p;
+# define FILESPEC2 filespec2_32p;
+# pragma pointer_size save
+# pragma pointer_size 32
+ char *filespec1_32p;
+ char *filespec2_32p;
+# pragma pointer_size restore
+ char filespec1_32[NAMX_MAXRSS + 1];
+ char filespec2_32[NAMX_MAXRSS + 1];
+# else /* __INITIAL_POINTER_SIZE == 64 */
+# define FILESPEC1 ((char *) filespec1)
+# define FILESPEC2 ((char *) filespec2)
+# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
+
+ if (!filespec1)
+ filespec1 = "";
+ if (!filespec2)
+ filespec2 = "";
+ filespec1len = strlen(filespec1);
+ filespec2len = strlen(filespec2);
+
+# if __INITIAL_POINTER_SIZE == 64
+ /* Copy the file names to storage with a 32-bit pointer. */
+ filespec1_32p = filespec1_32;
+ filespec2_32p = filespec2_32;
+ strcpy(filespec1_32p, filespec1);
+ strcpy(filespec2_32p, filespec2);
+# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
+
+ fab = cc$rms_fab;
+ nam = CC_RMS_NAMX;
+
+ FAB_OR_NAML(fab, nam).FAB_OR_NAML_FNA = FILESPEC1;
+ FAB_OR_NAML(fab, nam).FAB_OR_NAML_FNS = filespec1len;
+ FAB_OR_NAML(fab, nam).FAB_OR_NAML_DNA = FILESPEC2;
+ FAB_OR_NAML(fab, nam).FAB_OR_NAML_DNS = filespec2len;
+ NAMX_DNA_FNA_SET(fab)
+
+ nam.NAMX_ESA = esa;
+ nam.NAMX_ESS = NAMX_MAXRSS;
+ nam.NAMX_NOP = NAM$M_SYNCHK | NAM$M_PWD;
+ SET_NAMX_NO_SHORT_UPCASE(nam);
+
+ fab.FAB_NAMX = &nam;
+
+ status = sys$parse(&fab, 0, 0);
+
+ if (!$VMS_STATUS_SUCCESS(status)) {
+ unsigned short length;
+ char errstring[257];
+ struct dsc$descriptor_s errstring_dsc;
+
+ errstring_dsc.dsc$w_length = sizeof(errstring);
+ errstring_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ errstring_dsc.dsc$b_class = DSC$K_CLASS_S;
+ errstring_dsc.dsc$a_pointer = errstring;
+
+ status = sys$getmsg(status, &length, &errstring_dsc, 1, 0);
+
+ if (!$VMS_STATUS_SUCCESS(status))
+ lib$signal(status); /* This is really bad. Abort! */
+ else {
+ errstring[length] = '\0';
+
+ ERR_raise_data(ERR_LIB_DSO, DSO_R_FAILURE,
+ "filespec \"%s\", default \"%s\": %s",
+ filespec1, filespec2, errstring);
+ }
+ return NULL;
+ }
+
+ merged = OPENSSL_malloc(nam.NAMX_ESL + 1);
+ if (merged == NULL)
+ goto malloc_err;
+ strncpy(merged, nam.NAMX_ESA, nam.NAMX_ESL);
+ merged[nam.NAMX_ESL] = '\0';
+ return merged;
+ malloc_err:
+ ERR_raise(ERR_LIB_DSO, ERR_R_MALLOC_FAILURE);
+}
+
+static char *vms_name_converter(DSO *dso, const char *filename)
+{
+ char *translated;
+ int len, transform;
+ const char *p;
+
+ len = strlen(filename);
+
+ p = strchr(filename, ':');
+ if (p != NULL) {
+ transform = 0;
+ } else {
+ p = filename;
+ transform = (strrchr(p, '>') == NULL && strrchr(p, ']') == NULL);
+ }
+
+ if (transform) {
+ int rsize = len + sizeof(DSO_EXTENSION);
+
+ if ((translated = OPENSSL_malloc(rsize)) != NULL) {
+ p = strrchr(filename, ';');
+ if (p != NULL)
+ len = p - filename;
+ strncpy(translated, filename, len);
+ translated[len] = '\0';
+ strcat(translated, DSO_EXTENSION);
+ if (p != NULL)
+ strcat(translated, p);
+ }
+ } else {
+ translated = OPENSSL_strdup(filename);
+ }
+ return translated;
+}
+
+#endif /* OPENSSL_SYS_VMS */
diff --git a/crypto/dso/dso_win32.c b/crypto/dso/dso_win32.c
new file mode 100644
index 000000000000..4d3059d43879
--- /dev/null
+++ b/crypto/dso/dso_win32.c
@@ -0,0 +1,671 @@
+/*
+ * Copyright 2000-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 "dso_local.h"
+
+#if defined(DSO_WIN32)
+
+# ifdef _WIN32_WCE
+# if _WIN32_WCE < 300
+static FARPROC GetProcAddressA(HMODULE hModule, LPCSTR lpProcName)
+{
+ WCHAR lpProcNameW[64];
+ int i;
+
+ for (i = 0; lpProcName[i] && i < 64; i++)
+ lpProcNameW[i] = (WCHAR)lpProcName[i];
+ if (i == 64)
+ return NULL;
+ lpProcNameW[i] = 0;
+
+ return GetProcAddressW(hModule, lpProcNameW);
+}
+# endif
+# undef GetProcAddress
+# define GetProcAddress GetProcAddressA
+
+static HINSTANCE LoadLibraryA(LPCSTR lpLibFileName)
+{
+ WCHAR *fnamw;
+ size_t len_0 = strlen(lpLibFileName) + 1, i;
+
+# ifdef _MSC_VER
+ fnamw = (WCHAR *)_alloca(len_0 * sizeof(WCHAR));
+# else
+ fnamw = (WCHAR *)alloca(len_0 * sizeof(WCHAR));
+# endif
+ if (fnamw == NULL) {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return NULL;
+ }
+# if defined(_WIN32_WCE) && _WIN32_WCE>=101
+ if (!MultiByteToWideChar(CP_ACP, 0, lpLibFileName, len_0, fnamw, len_0))
+# endif
+ for (i = 0; i < len_0; i++)
+ fnamw[i] = (WCHAR)lpLibFileName[i];
+
+ return LoadLibraryW(fnamw);
+}
+# endif
+
+/* Part of the hack in "win32_load" ... */
+# define DSO_MAX_TRANSLATED_SIZE 256
+
+static int win32_load(DSO *dso);
+static int win32_unload(DSO *dso);
+static DSO_FUNC_TYPE win32_bind_func(DSO *dso, const char *symname);
+static char *win32_name_converter(DSO *dso, const char *filename);
+static char *win32_merger(DSO *dso, const char *filespec1,
+ const char *filespec2);
+static int win32_pathbyaddr(void *addr, char *path, int sz);
+static void *win32_globallookup(const char *name);
+
+static const char *openssl_strnchr(const char *string, int c, size_t len);
+
+static DSO_METHOD dso_meth_win32 = {
+ "OpenSSL 'win32' shared library method",
+ win32_load,
+ win32_unload,
+ win32_bind_func,
+ NULL, /* ctrl */
+ win32_name_converter,
+ win32_merger,
+ NULL, /* init */
+ NULL, /* finish */
+ win32_pathbyaddr, /* pathbyaddr */
+ win32_globallookup
+};
+
+DSO_METHOD *DSO_METHOD_openssl(void)
+{
+ return &dso_meth_win32;
+}
+
+/*
+ * For this DSO_METHOD, our meth_data STACK will contain; (i) a pointer to
+ * the handle (HINSTANCE) returned from LoadLibrary(), and copied.
+ */
+
+static int win32_load(DSO *dso)
+{
+ HINSTANCE h = NULL, *p = NULL;
+ /* See applicable comments from dso_dl.c */
+ char *filename = DSO_convert_filename(dso, NULL);
+
+ if (filename == NULL) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_NO_FILENAME);
+ goto err;
+ }
+ h = LoadLibraryA(filename);
+ if (h == NULL) {
+ ERR_raise_data(ERR_LIB_DSO, DSO_R_LOAD_FAILED,
+ "filename(%s)", filename);
+ goto err;
+ }
+ p = OPENSSL_malloc(sizeof(*p));
+ if (p == NULL) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ *p = h;
+ if (!sk_void_push(dso->meth_data, p)) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_STACK_ERROR);
+ goto err;
+ }
+ /* Success */
+ dso->loaded_filename = filename;
+ return 1;
+ err:
+ /* Cleanup ! */
+ OPENSSL_free(filename);
+ OPENSSL_free(p);
+ if (h != NULL)
+ FreeLibrary(h);
+ return 0;
+}
+
+static int win32_unload(DSO *dso)
+{
+ HINSTANCE *p;
+ if (dso == NULL) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
+ return 0;
+ }
+ if (sk_void_num(dso->meth_data) < 1)
+ return 1;
+ p = sk_void_pop(dso->meth_data);
+ if (p == NULL) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_NULL_HANDLE);
+ return 0;
+ }
+ if (!FreeLibrary(*p)) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_UNLOAD_FAILED);
+ /*
+ * We should push the value back onto the stack in case of a retry.
+ */
+ sk_void_push(dso->meth_data, p);
+ return 0;
+ }
+ /* Cleanup */
+ OPENSSL_free(p);
+ return 1;
+}
+
+static DSO_FUNC_TYPE win32_bind_func(DSO *dso, const char *symname)
+{
+ HINSTANCE *ptr;
+ union {
+ void *p;
+ FARPROC f;
+ } sym;
+
+ if ((dso == NULL) || (symname == NULL)) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
+ return NULL;
+ }
+ if (sk_void_num(dso->meth_data) < 1) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_STACK_ERROR);
+ return NULL;
+ }
+ ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);
+ if (ptr == NULL) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_NULL_HANDLE);
+ return NULL;
+ }
+ sym.f = GetProcAddress(*ptr, symname);
+ if (sym.p == NULL) {
+ ERR_raise_data(ERR_LIB_DSO, DSO_R_SYM_FAILURE, "symname(%s)", symname);
+ return NULL;
+ }
+ return (DSO_FUNC_TYPE)sym.f;
+}
+
+struct file_st {
+ const char *node;
+ int nodelen;
+ const char *device;
+ int devicelen;
+ const char *predir;
+ int predirlen;
+ const char *dir;
+ int dirlen;
+ const char *file;
+ int filelen;
+};
+
+static struct file_st *win32_splitter(DSO *dso, const char *filename,
+ int assume_last_is_dir)
+{
+ struct file_st *result = NULL;
+ enum { IN_NODE, IN_DEVICE, IN_FILE } position;
+ const char *start = filename;
+ char last;
+
+ if (!filename) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_NO_FILENAME);
+ return NULL;
+ }
+
+ result = OPENSSL_zalloc(sizeof(*result));
+ if (result == NULL) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+
+ position = IN_DEVICE;
+
+ if ((filename[0] == '\\' && filename[1] == '\\')
+ || (filename[0] == '/' && filename[1] == '/')) {
+ position = IN_NODE;
+ filename += 2;
+ start = filename;
+ result->node = start;
+ }
+
+ do {
+ last = filename[0];
+ switch (last) {
+ case ':':
+ if (position != IN_DEVICE) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_INCORRECT_FILE_SYNTAX);
+ OPENSSL_free(result);
+ return NULL;
+ }
+ result->device = start;
+ result->devicelen = (int)(filename - start);
+ position = IN_FILE;
+ start = ++filename;
+ result->dir = start;
+ break;
+ case '\\':
+ case '/':
+ if (position == IN_NODE) {
+ result->nodelen = (int)(filename - start);
+ position = IN_FILE;
+ start = ++filename;
+ result->dir = start;
+ } else if (position == IN_DEVICE) {
+ position = IN_FILE;
+ filename++;
+ result->dir = start;
+ result->dirlen = (int)(filename - start);
+ start = filename;
+ } else {
+ filename++;
+ result->dirlen += (int)(filename - start);
+ start = filename;
+ }
+ break;
+ case '\0':
+ if (position == IN_NODE) {
+ result->nodelen = (int)(filename - start);
+ } else {
+ if (filename - start > 0) {
+ if (assume_last_is_dir) {
+ if (position == IN_DEVICE) {
+ result->dir = start;
+ result->dirlen = 0;
+ }
+ result->dirlen += (int)(filename - start);
+ } else {
+ result->file = start;
+ result->filelen = (int)(filename - start);
+ }
+ }
+ }
+ break;
+ default:
+ filename++;
+ break;
+ }
+ }
+ while (last);
+
+ if (!result->nodelen)
+ result->node = NULL;
+ if (!result->devicelen)
+ result->device = NULL;
+ if (!result->dirlen)
+ result->dir = NULL;
+ if (!result->filelen)
+ result->file = NULL;
+
+ return result;
+}
+
+static char *win32_joiner(DSO *dso, const struct file_st *file_split)
+{
+ int len = 0, offset = 0;
+ char *result = NULL;
+ const char *start;
+
+ if (!file_split) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
+ return NULL;
+ }
+ if (file_split->node) {
+ len += 2 + file_split->nodelen; /* 2 for starting \\ */
+ if (file_split->predir || file_split->dir || file_split->file)
+ len++; /* 1 for ending \ */
+ } else if (file_split->device) {
+ len += file_split->devicelen + 1; /* 1 for ending : */
+ }
+ len += file_split->predirlen;
+ if (file_split->predir && (file_split->dir || file_split->file)) {
+ len++; /* 1 for ending \ */
+ }
+ len += file_split->dirlen;
+ if (file_split->dir && file_split->file) {
+ len++; /* 1 for ending \ */
+ }
+ len += file_split->filelen;
+
+ if (!len) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_EMPTY_FILE_STRUCTURE);
+ return NULL;
+ }
+
+ result = OPENSSL_malloc(len + 1);
+ if (result == NULL) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+
+ if (file_split->node) {
+ strcpy(&result[offset], "\\\\");
+ offset += 2;
+ strncpy(&result[offset], file_split->node, file_split->nodelen);
+ offset += file_split->nodelen;
+ if (file_split->predir || file_split->dir || file_split->file) {
+ result[offset] = '\\';
+ offset++;
+ }
+ } else if (file_split->device) {
+ strncpy(&result[offset], file_split->device, file_split->devicelen);
+ offset += file_split->devicelen;
+ result[offset] = ':';
+ offset++;
+ }
+ start = file_split->predir;
+ while (file_split->predirlen > (start - file_split->predir)) {
+ const char *end = openssl_strnchr(start, '/',
+ file_split->predirlen - (start -
+ file_split->predir));
+ if (!end)
+ end = start
+ + file_split->predirlen - (start - file_split->predir);
+ strncpy(&result[offset], start, end - start);
+ offset += (int)(end - start);
+ result[offset] = '\\';
+ offset++;
+ start = end + 1;
+ }
+ start = file_split->dir;
+ while (file_split->dirlen > (start - file_split->dir)) {
+ const char *end = openssl_strnchr(start, '/',
+ file_split->dirlen - (start -
+ file_split->dir));
+ if (!end)
+ end = start + file_split->dirlen - (start - file_split->dir);
+ strncpy(&result[offset], start, end - start);
+ offset += (int)(end - start);
+ result[offset] = '\\';
+ offset++;
+ start = end + 1;
+ }
+ strncpy(&result[offset], file_split->file, file_split->filelen);
+ offset += file_split->filelen;
+ result[offset] = '\0';
+ return result;
+}
+
+static char *win32_merger(DSO *dso, const char *filespec1,
+ const char *filespec2)
+{
+ char *merged = NULL;
+ struct file_st *filespec1_split = NULL;
+ struct file_st *filespec2_split = NULL;
+
+ if (!filespec1 && !filespec2) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
+ return NULL;
+ }
+ if (!filespec2) {
+ merged = OPENSSL_strdup(filespec1);
+ if (merged == NULL) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+ } else if (!filespec1) {
+ merged = OPENSSL_strdup(filespec2);
+ if (merged == NULL) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+ } else {
+ filespec1_split = win32_splitter(dso, filespec1, 0);
+ if (!filespec1_split) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+ filespec2_split = win32_splitter(dso, filespec2, 1);
+ if (!filespec2_split) {
+ ERR_raise(ERR_LIB_DSO, ERR_R_MALLOC_FAILURE);
+ OPENSSL_free(filespec1_split);
+ return NULL;
+ }
+
+ /* Fill in into filespec1_split */
+ if (!filespec1_split->node && !filespec1_split->device) {
+ filespec1_split->node = filespec2_split->node;
+ filespec1_split->nodelen = filespec2_split->nodelen;
+ filespec1_split->device = filespec2_split->device;
+ filespec1_split->devicelen = filespec2_split->devicelen;
+ }
+ if (!filespec1_split->dir) {
+ filespec1_split->dir = filespec2_split->dir;
+ filespec1_split->dirlen = filespec2_split->dirlen;
+ } else if (filespec1_split->dir[0] != '\\'
+ && filespec1_split->dir[0] != '/') {
+ filespec1_split->predir = filespec2_split->dir;
+ filespec1_split->predirlen = filespec2_split->dirlen;
+ }
+ if (!filespec1_split->file) {
+ filespec1_split->file = filespec2_split->file;
+ filespec1_split->filelen = filespec2_split->filelen;
+ }
+
+ merged = win32_joiner(dso, filespec1_split);
+ }
+ OPENSSL_free(filespec1_split);
+ OPENSSL_free(filespec2_split);
+ return merged;
+}
+
+static char *win32_name_converter(DSO *dso, const char *filename)
+{
+ char *translated;
+ int len, transform;
+
+ len = strlen(filename);
+ transform = ((strstr(filename, "/") == NULL) &&
+ (strstr(filename, "\\") == NULL) &&
+ (strstr(filename, ":") == NULL));
+ if (transform)
+ /* We will convert this to "%s.dll" */
+ translated = OPENSSL_malloc(len + 5);
+ else
+ /* We will simply duplicate filename */
+ translated = OPENSSL_malloc(len + 1);
+ if (translated == NULL) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED);
+ return NULL;
+ }
+ if (transform)
+ sprintf(translated, "%s.dll", filename);
+ else
+ sprintf(translated, "%s", filename);
+ return translated;
+}
+
+static const char *openssl_strnchr(const char *string, int c, size_t len)
+{
+ size_t i;
+ const char *p;
+ for (i = 0, p = string; i < len && *p; i++, p++) {
+ if (*p == c)
+ return p;
+ }
+ return NULL;
+}
+
+# include <tlhelp32.h>
+# ifdef _WIN32_WCE
+# define DLLNAME "TOOLHELP.DLL"
+# else
+# ifdef MODULEENTRY32
+# undef MODULEENTRY32 /* unmask the ASCII version! */
+# endif
+# define DLLNAME "KERNEL32.DLL"
+# endif
+
+typedef HANDLE(WINAPI *CREATETOOLHELP32SNAPSHOT) (DWORD, DWORD);
+typedef BOOL(WINAPI *CLOSETOOLHELP32SNAPSHOT) (HANDLE);
+typedef BOOL(WINAPI *MODULE32) (HANDLE, MODULEENTRY32 *);
+
+static int win32_pathbyaddr(void *addr, char *path, int sz)
+{
+ HMODULE dll;
+ HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
+ MODULEENTRY32 me32;
+ CREATETOOLHELP32SNAPSHOT create_snap;
+ CLOSETOOLHELP32SNAPSHOT close_snap;
+ MODULE32 module_first, module_next;
+
+ if (addr == NULL) {
+ union {
+ int (*f) (void *, char *, int);
+ void *p;
+ } t = {
+ win32_pathbyaddr
+ };
+ addr = t.p;
+ }
+
+ dll = LoadLibrary(TEXT(DLLNAME));
+ if (dll == NULL) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_UNSUPPORTED);
+ return -1;
+ }
+
+ create_snap = (CREATETOOLHELP32SNAPSHOT)
+ GetProcAddress(dll, "CreateToolhelp32Snapshot");
+ if (create_snap == NULL) {
+ FreeLibrary(dll);
+ ERR_raise(ERR_LIB_DSO, DSO_R_UNSUPPORTED);
+ return -1;
+ }
+ /* We take the rest for granted... */
+# ifdef _WIN32_WCE
+ close_snap = (CLOSETOOLHELP32SNAPSHOT)
+ GetProcAddress(dll, "CloseToolhelp32Snapshot");
+# else
+ close_snap = (CLOSETOOLHELP32SNAPSHOT) CloseHandle;
+# endif
+ module_first = (MODULE32) GetProcAddress(dll, "Module32First");
+ module_next = (MODULE32) GetProcAddress(dll, "Module32Next");
+
+ /*
+ * Take a snapshot of current process which includes
+ * list of all involved modules.
+ */
+ hModuleSnap = (*create_snap) (TH32CS_SNAPMODULE, 0);
+ if (hModuleSnap == INVALID_HANDLE_VALUE) {
+ FreeLibrary(dll);
+ ERR_raise(ERR_LIB_DSO, DSO_R_UNSUPPORTED);
+ return -1;
+ }
+
+ me32.dwSize = sizeof(me32);
+
+ if (!(*module_first) (hModuleSnap, &me32)) {
+ (*close_snap) (hModuleSnap);
+ FreeLibrary(dll);
+ ERR_raise(ERR_LIB_DSO, DSO_R_FAILURE);
+ return -1;
+ }
+
+ /* Enumerate the modules to find one which includes me. */
+ do {
+ if ((size_t) addr >= (size_t) me32.modBaseAddr &&
+ (size_t) addr < (size_t) (me32.modBaseAddr + me32.modBaseSize)) {
+ (*close_snap) (hModuleSnap);
+ FreeLibrary(dll);
+# ifdef _WIN32_WCE
+# if _WIN32_WCE >= 101
+ return WideCharToMultiByte(CP_ACP, 0, me32.szExePath, -1,
+ path, sz, NULL, NULL);
+# else
+ {
+ int i, len = (int)wcslen(me32.szExePath);
+ if (sz <= 0)
+ return len + 1;
+ if (len >= sz)
+ len = sz - 1;
+ for (i = 0; i < len; i++)
+ path[i] = (char)me32.szExePath[i];
+ path[len++] = '\0';
+ return len;
+ }
+# endif
+# else
+ {
+ int len = (int)strlen(me32.szExePath);
+ if (sz <= 0)
+ return len + 1;
+ if (len >= sz)
+ len = sz - 1;
+ memcpy(path, me32.szExePath, len);
+ path[len++] = '\0';
+ return len;
+ }
+# endif
+ }
+ } while ((*module_next) (hModuleSnap, &me32));
+
+ (*close_snap) (hModuleSnap);
+ FreeLibrary(dll);
+ return 0;
+}
+
+static void *win32_globallookup(const char *name)
+{
+ HMODULE dll;
+ HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
+ MODULEENTRY32 me32;
+ CREATETOOLHELP32SNAPSHOT create_snap;
+ CLOSETOOLHELP32SNAPSHOT close_snap;
+ MODULE32 module_first, module_next;
+ union {
+ void *p;
+ FARPROC f;
+ } ret = { NULL };
+
+ dll = LoadLibrary(TEXT(DLLNAME));
+ if (dll == NULL) {
+ ERR_raise(ERR_LIB_DSO, DSO_R_UNSUPPORTED);
+ return NULL;
+ }
+
+ create_snap = (CREATETOOLHELP32SNAPSHOT)
+ GetProcAddress(dll, "CreateToolhelp32Snapshot");
+ if (create_snap == NULL) {
+ FreeLibrary(dll);
+ ERR_raise(ERR_LIB_DSO, DSO_R_UNSUPPORTED);
+ return NULL;
+ }
+ /* We take the rest for granted... */
+# ifdef _WIN32_WCE
+ close_snap = (CLOSETOOLHELP32SNAPSHOT)
+ GetProcAddress(dll, "CloseToolhelp32Snapshot");
+# else
+ close_snap = (CLOSETOOLHELP32SNAPSHOT) CloseHandle;
+# endif
+ module_first = (MODULE32) GetProcAddress(dll, "Module32First");
+ module_next = (MODULE32) GetProcAddress(dll, "Module32Next");
+
+ hModuleSnap = (*create_snap) (TH32CS_SNAPMODULE, 0);
+ if (hModuleSnap == INVALID_HANDLE_VALUE) {
+ FreeLibrary(dll);
+ ERR_raise(ERR_LIB_DSO, DSO_R_UNSUPPORTED);
+ return NULL;
+ }
+
+ me32.dwSize = sizeof(me32);
+
+ if (!(*module_first) (hModuleSnap, &me32)) {
+ (*close_snap) (hModuleSnap);
+ FreeLibrary(dll);
+ return NULL;
+ }
+
+ do {
+ if ((ret.f = GetProcAddress(me32.hModule, name))) {
+ (*close_snap) (hModuleSnap);
+ FreeLibrary(dll);
+ return ret.p;
+ }
+ } while ((*module_next) (hModuleSnap, &me32));
+
+ (*close_snap) (hModuleSnap);
+ FreeLibrary(dll);
+ return NULL;
+}
+#endif /* DSO_WIN32 */
diff --git a/crypto/ec/ecx_backend.c b/crypto/ec/ecx_backend.c
index 2ab7611be9af..e42767d6bf0f 100644
--- a/crypto/ec/ecx_backend.c
+++ b/crypto/ec/ecx_backend.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2020-2024 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
@@ -122,7 +122,7 @@ ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection)
}
ret->libctx = key->libctx;
- ret->haspubkey = key->haspubkey;
+ ret->haspubkey = 0;
ret->keylen = key->keylen;
ret->type = key->type;
ret->references = 1;
@@ -133,8 +133,11 @@ ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection)
goto err;
}
- if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0)
+ if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0
+ && key->haspubkey == 1) {
memcpy(ret->pubkey, key->pubkey, sizeof(ret->pubkey));
+ ret->haspubkey = 1;
+ }
if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0
&& key->privkey != NULL) {
diff --git a/crypto/err/openssl.ec b/crypto/err/openssl.ec
new file mode 100644
index 000000000000..3612c195f09f
--- /dev/null
+++ b/crypto/err/openssl.ec
@@ -0,0 +1,81 @@
+# configuration file for util/mkerr.pl
+
+# The INPUT HEADER is scanned for declarations
+# LIBNAME PUBLIC HEADER ERROR-TABLE FILE INTERNAL HEADER (if relevant)
+L ERR NONE NONE
+L FUNC NONE NONE
+L BN include/openssl/bnerr.h crypto/bn/bn_err.c include/crypto/bnerr.h
+L RSA include/openssl/rsaerr.h crypto/rsa/rsa_err.c include/crypto/rsaerr.h
+L DH include/openssl/dherr.h crypto/dh/dh_err.c include/crypto/dherr.h
+L EVP include/openssl/evperr.h crypto/evp/evp_err.c include/crypto/evperr.h
+L BUF include/openssl/buffererr.h crypto/buffer/buf_err.c include/crypto/buffererr.h
+L OBJ include/openssl/objectserr.h crypto/objects/obj_err.c include/crypto/objectserr.h
+L PEM include/openssl/pemerr.h crypto/pem/pem_err.c include/crypto/pemerr.h
+L DSA include/openssl/dsaerr.h crypto/dsa/dsa_err.c include/crypto/dsaerr.h
+L X509 include/openssl/x509err.h crypto/x509/x509_err.c include/crypto/x509err.h
+L ASN1 include/openssl/asn1err.h crypto/asn1/asn1_err.c include/crypto/asn1err.h
+L CONF include/openssl/conferr.h crypto/conf/conf_err.c include/crypto/conferr.h
+L CRYPTO include/openssl/cryptoerr.h crypto/cpt_err.c include/crypto/cryptoerr.h
+L EC include/openssl/ecerr.h crypto/ec/ec_err.c include/crypto/ecerr.h
+L SSL include/openssl/sslerr.h ssl/ssl_err.c ssl/sslerr.h
+L BIO include/openssl/bioerr.h crypto/bio/bio_err.c include/crypto/bioerr.h
+L PKCS7 include/openssl/pkcs7err.h crypto/pkcs7/pkcs7err.c include/crypto/pkcs7err.h
+L X509V3 include/openssl/x509v3err.h crypto/x509/v3err.c include/crypto/x509v3err.h
+L PKCS12 include/openssl/pkcs12err.h crypto/pkcs12/pk12err.c include/crypto/pkcs12err.h
+L RAND include/openssl/randerr.h crypto/rand/rand_err.c include/crypto/randerr.h
+L DSO NONE crypto/dso/dso_err.c include/internal/dsoerr.h
+L ENGINE include/openssl/engineerr.h crypto/engine/eng_err.c include/crypto/engineerr.h
+L OCSP include/openssl/ocsperr.h crypto/ocsp/ocsp_err.c include/crypto/ocsperr.h
+L UI include/openssl/uierr.h crypto/ui/ui_err.c include/crypto/uierr.h
+L COMP include/openssl/comperr.h crypto/comp/comp_err.c include/crypto/comperr.h
+L TS include/openssl/tserr.h crypto/ts/ts_err.c include/crypto/tserr.h
+L CMS include/openssl/cmserr.h crypto/cms/cms_err.c include/crypto/cmserr.h
+L CRMF include/openssl/crmferr.h crypto/crmf/crmf_err.c include/crypto/crmferr.h
+L CMP include/openssl/cmperr.h crypto/cmp/cmp_err.c include/crypto/cmperr.h
+L CT include/openssl/cterr.h crypto/ct/ct_err.c include/crypto/cterr.h
+L ASYNC include/openssl/asyncerr.h crypto/async/async_err.c include/crypto/asyncerr.h
+# KDF is only here for conservation purposes
+L KDF NONE NONE NONE
+L SM2 NONE crypto/sm2/sm2_err.c include/crypto/sm2err.h
+L OSSL_STORE include/openssl/storeerr.h crypto/store/store_err.c include/crypto/storeerr.h
+L ESS include/openssl/esserr.h crypto/ess/ess_err.c include/crypto/esserr.h
+L PROP NONE crypto/property/property_err.c include/internal/propertyerr.h
+L PROV include/openssl/proverr.h providers/common/provider_err.c providers/common/include/prov/proverr.h
+L OSSL_ENCODER include/openssl/encodererr.h crypto/encode_decode/encoder_err.c include/crypto/encodererr.h
+L OSSL_DECODER include/openssl/decodererr.h crypto/encode_decode/decoder_err.c include/crypto/decodererr.h
+L HTTP include/openssl/httperr.h crypto/http/http_err.c include/crypto/httperr.h
+
+# SSL/TLS alerts
+R SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010
+R SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020
+R SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021
+R SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022
+R SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030
+R SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040
+R SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041
+R SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042
+R SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043
+R SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044
+R SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045
+R SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046
+R SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047
+R SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048
+R SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049
+R SSL_R_TLSV1_ALERT_DECODE_ERROR 1050
+R SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051
+R SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060
+R SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070
+R SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071
+R SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080
+R SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086
+R SSL_R_TLSV1_ALERT_USER_CANCELLED 1090
+R SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100
+R SSL_R_TLSV13_ALERT_MISSING_EXTENSION 1109
+R SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110
+R SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111
+R SSL_R_TLSV1_UNRECOGNIZED_NAME 1112
+R SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113
+R SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114
+R TLS1_AD_UNKNOWN_PSK_IDENTITY 1115
+R SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED 1116
+R TLS1_AD_NO_APPLICATION_PROTOCOL 1120
diff --git a/crypto/err/openssl.txt b/crypto/err/openssl.txt
index e51504b7abd5..36fe318baf7d 100644
--- a/crypto/err/openssl.txt
+++ b/crypto/err/openssl.txt
@@ -403,6 +403,7 @@ CONF_R_NUMBER_TOO_LARGE:121:number too large
CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION:124:\
openssl conf references missing section
CONF_R_RECURSIVE_DIRECTORY_INCLUDE:111:recursive directory include
+CONF_R_RECURSIVE_SECTION_REFERENCE:126:recursive section reference
CONF_R_RELATIVE_PATH:125:relative path
CONF_R_SSL_COMMAND_SECTION_EMPTY:117:ssl command section empty
CONF_R_SSL_COMMAND_SECTION_NOT_FOUND:118:ssl command section not found
@@ -500,6 +501,7 @@ DH_R_NO_PARAMETERS_SET:107:no parameters set
DH_R_NO_PRIVATE_VALUE:100:no private value
DH_R_PARAMETER_ENCODING_ERROR:105:parameter encoding error
DH_R_PEER_KEY_ERROR:111:peer key error
+DH_R_Q_TOO_LARGE:130:q too large
DH_R_SHARED_INFO_ERROR:113:shared info error
DH_R_UNABLE_TO_CHECK_GENERATOR:121:unable to check generator
DSA_R_BAD_FFC_PARAMETERS:114:bad ffc parameters
diff --git a/crypto/evp/e_aes.c b/crypto/evp/e_aes.c
index 52b9e87c1e2b..949de68077ec 100644
--- a/crypto/evp/e_aes.c
+++ b/crypto/evp/e_aes.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2001-2024 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
@@ -831,8 +831,6 @@ typedef struct {
/* KMO-AES parameter block - end */
} kmo;
unsigned int fc;
-
- int res;
} S390X_AES_OFB_CTX;
typedef struct {
@@ -849,8 +847,6 @@ typedef struct {
/* KMF-AES parameter block - end */
} kmf;
unsigned int fc;
-
- int res;
} S390X_AES_CFB_CTX;
typedef struct {
@@ -1002,7 +998,6 @@ static int s390x_aes_ofb_init_key(EVP_CIPHER_CTX *ctx,
memcpy(cctx->kmo.param.cv, iv, ivlen);
memcpy(cctx->kmo.param.k, key, keylen);
cctx->fc = S390X_AES_FC(keylen);
- cctx->res = 0;
return 1;
}
@@ -1012,7 +1007,7 @@ static int s390x_aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
S390X_AES_OFB_CTX *cctx = EVP_C_DATA(S390X_AES_OFB_CTX, ctx);
const int ivlen = EVP_CIPHER_CTX_get_iv_length(ctx);
unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx);
- int n = cctx->res;
+ int n = ctx->num;
int rem;
memcpy(cctx->kmo.param.cv, iv, ivlen);
@@ -1045,7 +1040,7 @@ static int s390x_aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
}
memcpy(iv, cctx->kmo.param.cv, ivlen);
- cctx->res = n;
+ ctx->num = n;
return 1;
}
@@ -1063,7 +1058,6 @@ static int s390x_aes_cfb_init_key(EVP_CIPHER_CTX *ctx,
if (!enc)
cctx->fc |= S390X_DECRYPT;
- cctx->res = 0;
memcpy(cctx->kmf.param.cv, iv, ivlen);
memcpy(cctx->kmf.param.k, key, keylen);
return 1;
@@ -1077,7 +1071,7 @@ static int s390x_aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const int enc = EVP_CIPHER_CTX_is_encrypting(ctx);
const int ivlen = EVP_CIPHER_CTX_get_iv_length(ctx);
unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx);
- int n = cctx->res;
+ int n = ctx->num;
int rem;
unsigned char tmp;
@@ -1115,7 +1109,7 @@ static int s390x_aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
}
memcpy(iv, cctx->kmf.param.cv, ivlen);
- cctx->res = n;
+ ctx->num = n;
return 1;
}
diff --git a/crypto/evp/evp_fetch.c b/crypto/evp/evp_fetch.c
index aafd927e63f9..6eeafd948ea1 100644
--- a/crypto/evp/evp_fetch.c
+++ b/crypto/evp/evp_fetch.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -349,13 +349,26 @@ inner_evp_generic_fetch(struct evp_method_data_st *methdata,
* there is a correct name_id and meth_id, since those have
* already been calculated in get_evp_method_from_store() and
* put_evp_method_in_store() above.
+ * Note that there is a corner case here, in which, if a user
+ * passes a name of the form name1:name2:..., then the construction
+ * will create a method against all names, but the lookup will fail
+ * as ossl_namemap_name2num treats the name string as a single name
+ * rather than introducing new features where in the EVP_<obj>_fetch
+ * parses the string and querys for each, return an error.
*/
if (name_id == 0)
name_id = ossl_namemap_name2num(namemap, name);
- meth_id = evp_method_id(name_id, operation_id);
- if (name_id != 0)
- ossl_method_store_cache_set(store, prov, meth_id, propq,
- method, up_ref_method, free_method);
+ if (name_id == 0) {
+ ERR_raise_data(ERR_LIB_EVP, ERR_R_FETCH_FAILED,
+ "Algorithm %s cannot be found", name);
+ free_method(method);
+ method = NULL;
+ } else {
+ meth_id = evp_method_id(name_id, operation_id);
+ if (meth_id != 0)
+ ossl_method_store_cache_set(store, prov, meth_id, propq,
+ method, up_ref_method, free_method);
+ }
}
/*
diff --git a/crypto/http/http_client.c b/crypto/http/http_client.c
index e3ccc6c4cc2f..4b96a6b9e9e2 100644
--- a/crypto/http/http_client.c
+++ b/crypto/http/http_client.c
@@ -487,13 +487,17 @@ static int parse_http_line1(char *line, int *found_keep_alive)
static int check_set_resp_len(OSSL_HTTP_REQ_CTX *rctx, size_t len)
{
- if (rctx->max_resp_len != 0 && len > rctx->max_resp_len)
+ if (rctx->max_resp_len != 0 && len > rctx->max_resp_len) {
ERR_raise_data(ERR_LIB_HTTP, HTTP_R_MAX_RESP_LEN_EXCEEDED,
"length=%zu, max=%zu", len, rctx->max_resp_len);
- if (rctx->resp_len != 0 && rctx->resp_len != len)
+ return 0;
+ }
+ if (rctx->resp_len != 0 && rctx->resp_len != len) {
ERR_raise_data(ERR_LIB_HTTP, HTTP_R_INCONSISTENT_CONTENT_LENGTH,
"ASN.1 length=%zu, Content-Length=%zu",
len, rctx->resp_len);
+ return 0;
+ }
rctx->resp_len = len;
return 1;
}
diff --git a/crypto/http/http_lib.c b/crypto/http/http_lib.c
index e45f60b72287..30c1cd04fc00 100644
--- a/crypto/http/http_lib.c
+++ b/crypto/http/http_lib.c
@@ -118,7 +118,7 @@ int OSSL_parse_url(const char *url, char **pscheme, char **puser, char **phost,
port = ++p;
/* remaining port spec handling is also done for the default values */
/* make sure a decimal port number is given */
- if (!sscanf(port, "%u", &portnum) || portnum > 65535) {
+ if (sscanf(port, "%u", &portnum) <= 0 || portnum > 65535) {
ERR_raise_data(ERR_LIB_HTTP, HTTP_R_INVALID_PORT_NUMBER, "%s", port);
goto err;
}
diff --git a/crypto/mem_sec.c b/crypto/mem_sec.c
index 6ba75486a897..5cdeedb8d127 100644
--- a/crypto/mem_sec.c
+++ b/crypto/mem_sec.c
@@ -238,11 +238,17 @@ int CRYPTO_secure_allocated(const void *ptr)
size_t CRYPTO_secure_used(void)
{
+ size_t ret = 0;
+
#ifndef OPENSSL_NO_SECURE_MEMORY
- return secure_mem_used;
-#else
- return 0;
+ if (!CRYPTO_THREAD_read_lock(sec_malloc_lock))
+ return 0;
+
+ ret = secure_mem_used;
+
+ CRYPTO_THREAD_unlock(sec_malloc_lock);
#endif /* OPENSSL_NO_SECURE_MEMORY */
+ return ret;
}
size_t CRYPTO_secure_actual_size(void *ptr)
diff --git a/crypto/modes/asm/ghash-alpha.pl b/crypto/modes/asm/ghash-alpha.pl
new file mode 100644
index 000000000000..c350e9015550
--- /dev/null
+++ b/crypto/modes/asm/ghash-alpha.pl
@@ -0,0 +1,467 @@
+#! /usr/bin/env perl
+# Copyright 2010-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
+
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# March 2010
+#
+# The module implements "4-bit" GCM GHASH function and underlying
+# single multiplication operation in GF(2^128). "4-bit" means that it
+# uses 256 bytes per-key table [+128 bytes shared table]. Even though
+# loops are aggressively modulo-scheduled in respect to references to
+# Htbl and Z.hi updates for 8 cycles per byte, measured performance is
+# ~12 cycles per processed byte on 21264 CPU. It seems to be a dynamic
+# scheduling "glitch," because uprofile(1) indicates uniform sample
+# distribution, as if all instruction bundles execute in 1.5 cycles.
+# Meaning that it could have been even faster, yet 12 cycles is ~60%
+# better than gcc-generated code and ~80% than code generated by vendor
+# compiler.
+
+$cnt="v0"; # $0
+$t0="t0";
+$t1="t1";
+$t2="t2";
+$Thi0="t3"; # $4
+$Tlo0="t4";
+$Thi1="t5";
+$Tlo1="t6";
+$rem="t7"; # $8
+#################
+$Xi="a0"; # $16, input argument block
+$Htbl="a1";
+$inp="a2";
+$len="a3";
+$nlo="a4"; # $20
+$nhi="a5";
+$Zhi="t8";
+$Zlo="t9";
+$Xhi="t10"; # $24
+$Xlo="t11";
+$remp="t12";
+$rem_4bit="AT"; # $28
+
+{ my $N;
+ sub loop() {
+
+ $N++;
+$code.=<<___;
+.align 4
+ extbl $Xlo,7,$nlo
+ and $nlo,0xf0,$nhi
+ sll $nlo,4,$nlo
+ and $nlo,0xf0,$nlo
+
+ addq $nlo,$Htbl,$nlo
+ ldq $Zlo,8($nlo)
+ addq $nhi,$Htbl,$nhi
+ ldq $Zhi,0($nlo)
+
+ and $Zlo,0x0f,$remp
+ sll $Zhi,60,$t0
+ lda $cnt,6(zero)
+ extbl $Xlo,6,$nlo
+
+ ldq $Tlo1,8($nhi)
+ s8addq $remp,$rem_4bit,$remp
+ ldq $Thi1,0($nhi)
+ srl $Zlo,4,$Zlo
+
+ ldq $rem,0($remp)
+ srl $Zhi,4,$Zhi
+ xor $t0,$Zlo,$Zlo
+ and $nlo,0xf0,$nhi
+
+ xor $Tlo1,$Zlo,$Zlo
+ sll $nlo,4,$nlo
+ xor $Thi1,$Zhi,$Zhi
+ and $nlo,0xf0,$nlo
+
+ addq $nlo,$Htbl,$nlo
+ ldq $Tlo0,8($nlo)
+ addq $nhi,$Htbl,$nhi
+ ldq $Thi0,0($nlo)
+
+.Looplo$N:
+ and $Zlo,0x0f,$remp
+ sll $Zhi,60,$t0
+ subq $cnt,1,$cnt
+ srl $Zlo,4,$Zlo
+
+ ldq $Tlo1,8($nhi)
+ xor $rem,$Zhi,$Zhi
+ ldq $Thi1,0($nhi)
+ s8addq $remp,$rem_4bit,$remp
+
+ ldq $rem,0($remp)
+ srl $Zhi,4,$Zhi
+ xor $t0,$Zlo,$Zlo
+ extbl $Xlo,$cnt,$nlo
+
+ and $nlo,0xf0,$nhi
+ xor $Thi0,$Zhi,$Zhi
+ xor $Tlo0,$Zlo,$Zlo
+ sll $nlo,4,$nlo
+
+
+ and $Zlo,0x0f,$remp
+ sll $Zhi,60,$t0
+ and $nlo,0xf0,$nlo
+ srl $Zlo,4,$Zlo
+
+ s8addq $remp,$rem_4bit,$remp
+ xor $rem,$Zhi,$Zhi
+ addq $nlo,$Htbl,$nlo
+ addq $nhi,$Htbl,$nhi
+
+ ldq $rem,0($remp)
+ srl $Zhi,4,$Zhi
+ ldq $Tlo0,8($nlo)
+ xor $t0,$Zlo,$Zlo
+
+ xor $Tlo1,$Zlo,$Zlo
+ xor $Thi1,$Zhi,$Zhi
+ ldq $Thi0,0($nlo)
+ bne $cnt,.Looplo$N
+
+
+ and $Zlo,0x0f,$remp
+ sll $Zhi,60,$t0
+ lda $cnt,7(zero)
+ srl $Zlo,4,$Zlo
+
+ ldq $Tlo1,8($nhi)
+ xor $rem,$Zhi,$Zhi
+ ldq $Thi1,0($nhi)
+ s8addq $remp,$rem_4bit,$remp
+
+ ldq $rem,0($remp)
+ srl $Zhi,4,$Zhi
+ xor $t0,$Zlo,$Zlo
+ extbl $Xhi,$cnt,$nlo
+
+ and $nlo,0xf0,$nhi
+ xor $Thi0,$Zhi,$Zhi
+ xor $Tlo0,$Zlo,$Zlo
+ sll $nlo,4,$nlo
+
+ and $Zlo,0x0f,$remp
+ sll $Zhi,60,$t0
+ and $nlo,0xf0,$nlo
+ srl $Zlo,4,$Zlo
+
+ s8addq $remp,$rem_4bit,$remp
+ xor $rem,$Zhi,$Zhi
+ addq $nlo,$Htbl,$nlo
+ addq $nhi,$Htbl,$nhi
+
+ ldq $rem,0($remp)
+ srl $Zhi,4,$Zhi
+ ldq $Tlo0,8($nlo)
+ xor $t0,$Zlo,$Zlo
+
+ xor $Tlo1,$Zlo,$Zlo
+ xor $Thi1,$Zhi,$Zhi
+ ldq $Thi0,0($nlo)
+ unop
+
+
+.Loophi$N:
+ and $Zlo,0x0f,$remp
+ sll $Zhi,60,$t0
+ subq $cnt,1,$cnt
+ srl $Zlo,4,$Zlo
+
+ ldq $Tlo1,8($nhi)
+ xor $rem,$Zhi,$Zhi
+ ldq $Thi1,0($nhi)
+ s8addq $remp,$rem_4bit,$remp
+
+ ldq $rem,0($remp)
+ srl $Zhi,4,$Zhi
+ xor $t0,$Zlo,$Zlo
+ extbl $Xhi,$cnt,$nlo
+
+ and $nlo,0xf0,$nhi
+ xor $Thi0,$Zhi,$Zhi
+ xor $Tlo0,$Zlo,$Zlo
+ sll $nlo,4,$nlo
+
+
+ and $Zlo,0x0f,$remp
+ sll $Zhi,60,$t0
+ and $nlo,0xf0,$nlo
+ srl $Zlo,4,$Zlo
+
+ s8addq $remp,$rem_4bit,$remp
+ xor $rem,$Zhi,$Zhi
+ addq $nlo,$Htbl,$nlo
+ addq $nhi,$Htbl,$nhi
+
+ ldq $rem,0($remp)
+ srl $Zhi,4,$Zhi
+ ldq $Tlo0,8($nlo)
+ xor $t0,$Zlo,$Zlo
+
+ xor $Tlo1,$Zlo,$Zlo
+ xor $Thi1,$Zhi,$Zhi
+ ldq $Thi0,0($nlo)
+ bne $cnt,.Loophi$N
+
+
+ and $Zlo,0x0f,$remp
+ sll $Zhi,60,$t0
+ srl $Zlo,4,$Zlo
+
+ ldq $Tlo1,8($nhi)
+ xor $rem,$Zhi,$Zhi
+ ldq $Thi1,0($nhi)
+ s8addq $remp,$rem_4bit,$remp
+
+ ldq $rem,0($remp)
+ srl $Zhi,4,$Zhi
+ xor $t0,$Zlo,$Zlo
+
+ xor $Tlo0,$Zlo,$Zlo
+ xor $Thi0,$Zhi,$Zhi
+
+ and $Zlo,0x0f,$remp
+ sll $Zhi,60,$t0
+ srl $Zlo,4,$Zlo
+
+ s8addq $remp,$rem_4bit,$remp
+ xor $rem,$Zhi,$Zhi
+
+ ldq $rem,0($remp)
+ srl $Zhi,4,$Zhi
+ xor $Tlo1,$Zlo,$Zlo
+ xor $Thi1,$Zhi,$Zhi
+ xor $t0,$Zlo,$Zlo
+ xor $rem,$Zhi,$Zhi
+___
+}}
+
+$code=<<___;
+#ifdef __linux__
+#include <asm/regdef.h>
+#else
+#include <asm.h>
+#include <regdef.h>
+#endif
+
+.text
+
+.set noat
+.set noreorder
+.globl gcm_gmult_4bit
+.align 4
+.ent gcm_gmult_4bit
+gcm_gmult_4bit:
+ .frame sp,0,ra
+ .prologue 0
+
+ ldq $Xlo,8($Xi)
+ ldq $Xhi,0($Xi)
+
+ bsr $t0,picmeup
+ nop
+___
+
+ &loop();
+
+$code.=<<___;
+ srl $Zlo,24,$t0 # byte swap
+ srl $Zlo,8,$t1
+
+ sll $Zlo,8,$t2
+ sll $Zlo,24,$Zlo
+ zapnot $t0,0x11,$t0
+ zapnot $t1,0x22,$t1
+
+ zapnot $Zlo,0x88,$Zlo
+ or $t0,$t1,$t0
+ zapnot $t2,0x44,$t2
+
+ or $Zlo,$t0,$Zlo
+ srl $Zhi,24,$t0
+ srl $Zhi,8,$t1
+
+ or $Zlo,$t2,$Zlo
+ sll $Zhi,8,$t2
+ sll $Zhi,24,$Zhi
+
+ srl $Zlo,32,$Xlo
+ sll $Zlo,32,$Zlo
+
+ zapnot $t0,0x11,$t0
+ zapnot $t1,0x22,$t1
+ or $Zlo,$Xlo,$Xlo
+
+ zapnot $Zhi,0x88,$Zhi
+ or $t0,$t1,$t0
+ zapnot $t2,0x44,$t2
+
+ or $Zhi,$t0,$Zhi
+ or $Zhi,$t2,$Zhi
+
+ srl $Zhi,32,$Xhi
+ sll $Zhi,32,$Zhi
+
+ or $Zhi,$Xhi,$Xhi
+ stq $Xlo,8($Xi)
+ stq $Xhi,0($Xi)
+
+ ret (ra)
+.end gcm_gmult_4bit
+___
+
+$inhi="s0";
+$inlo="s1";
+
+$code.=<<___;
+.globl gcm_ghash_4bit
+.align 4
+.ent gcm_ghash_4bit
+gcm_ghash_4bit:
+ lda sp,-32(sp)
+ stq ra,0(sp)
+ stq s0,8(sp)
+ stq s1,16(sp)
+ .mask 0x04000600,-32
+ .frame sp,32,ra
+ .prologue 0
+
+ ldq_u $inhi,0($inp)
+ ldq_u $Thi0,7($inp)
+ ldq_u $inlo,8($inp)
+ ldq_u $Tlo0,15($inp)
+ ldq $Xhi,0($Xi)
+ ldq $Xlo,8($Xi)
+
+ bsr $t0,picmeup
+ nop
+
+.Louter:
+ extql $inhi,$inp,$inhi
+ extqh $Thi0,$inp,$Thi0
+ or $inhi,$Thi0,$inhi
+ lda $inp,16($inp)
+
+ extql $inlo,$inp,$inlo
+ extqh $Tlo0,$inp,$Tlo0
+ or $inlo,$Tlo0,$inlo
+ subq $len,16,$len
+
+ xor $Xlo,$inlo,$Xlo
+ xor $Xhi,$inhi,$Xhi
+___
+
+ &loop();
+
+$code.=<<___;
+ srl $Zlo,24,$t0 # byte swap
+ srl $Zlo,8,$t1
+
+ sll $Zlo,8,$t2
+ sll $Zlo,24,$Zlo
+ zapnot $t0,0x11,$t0
+ zapnot $t1,0x22,$t1
+
+ zapnot $Zlo,0x88,$Zlo
+ or $t0,$t1,$t0
+ zapnot $t2,0x44,$t2
+
+ or $Zlo,$t0,$Zlo
+ srl $Zhi,24,$t0
+ srl $Zhi,8,$t1
+
+ or $Zlo,$t2,$Zlo
+ sll $Zhi,8,$t2
+ sll $Zhi,24,$Zhi
+
+ srl $Zlo,32,$Xlo
+ sll $Zlo,32,$Zlo
+ beq $len,.Ldone
+
+ zapnot $t0,0x11,$t0
+ zapnot $t1,0x22,$t1
+ or $Zlo,$Xlo,$Xlo
+ ldq_u $inhi,0($inp)
+
+ zapnot $Zhi,0x88,$Zhi
+ or $t0,$t1,$t0
+ zapnot $t2,0x44,$t2
+ ldq_u $Thi0,7($inp)
+
+ or $Zhi,$t0,$Zhi
+ or $Zhi,$t2,$Zhi
+ ldq_u $inlo,8($inp)
+ ldq_u $Tlo0,15($inp)
+
+ srl $Zhi,32,$Xhi
+ sll $Zhi,32,$Zhi
+
+ or $Zhi,$Xhi,$Xhi
+ br zero,.Louter
+
+.Ldone:
+ zapnot $t0,0x11,$t0
+ zapnot $t1,0x22,$t1
+ or $Zlo,$Xlo,$Xlo
+
+ zapnot $Zhi,0x88,$Zhi
+ or $t0,$t1,$t0
+ zapnot $t2,0x44,$t2
+
+ or $Zhi,$t0,$Zhi
+ or $Zhi,$t2,$Zhi
+
+ srl $Zhi,32,$Xhi
+ sll $Zhi,32,$Zhi
+
+ or $Zhi,$Xhi,$Xhi
+
+ stq $Xlo,8($Xi)
+ stq $Xhi,0($Xi)
+
+ .set noreorder
+ /*ldq ra,0(sp)*/
+ ldq s0,8(sp)
+ ldq s1,16(sp)
+ lda sp,32(sp)
+ ret (ra)
+.end gcm_ghash_4bit
+
+.align 4
+.ent picmeup
+picmeup:
+ .frame sp,0,$t0
+ .prologue 0
+ br $rem_4bit,.Lpic
+.Lpic: lda $rem_4bit,12($rem_4bit)
+ ret ($t0)
+.end picmeup
+ nop
+rem_4bit:
+ .long 0,0x0000<<16, 0,0x1C20<<16, 0,0x3840<<16, 0,0x2460<<16
+ .long 0,0x7080<<16, 0,0x6CA0<<16, 0,0x48C0<<16, 0,0x54E0<<16
+ .long 0,0xE100<<16, 0,0xFD20<<16, 0,0xD940<<16, 0,0xC560<<16
+ .long 0,0x9180<<16, 0,0x8DA0<<16, 0,0xA9C0<<16, 0,0xB5E0<<16
+.ascii "GHASH for Alpha, CRYPTOGAMS by <appro\@openssl.org>"
+.align 4
+
+___
+$output=pop and open STDOUT,">$output";
+print $code;
+close STDOUT or die "error closing STDOUT: $!";
+
diff --git a/crypto/objects/obj_dat.c b/crypto/objects/obj_dat.c
index 85d30eb58ae0..dc501cbb8b22 100644
--- a/crypto/objects/obj_dat.c
+++ b/crypto/objects/obj_dat.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 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
@@ -62,7 +62,7 @@ static unsigned long added_obj_hash(const ADDED_OBJ *ca)
a = ca->obj;
switch (ca->type) {
case ADDED_DATA:
- ret = a->length << 20L;
+ ret = (unsigned long)a->length << 20UL;
p = (unsigned char *)a->data;
for (i = 0; i < a->length; i++)
ret ^= p[i] << ((i * 3) % 24);
diff --git a/crypto/param_build.c b/crypto/param_build.c
index 51c8681f3be5..56537e676b77 100644
--- a/crypto/param_build.c
+++ b/crypto/param_build.c
@@ -239,9 +239,9 @@ int OSSL_PARAM_BLD_push_utf8_string(OSSL_PARAM_BLD *bld, const char *key,
OSSL_PARAM_BLD_DEF *pd;
int secure;
- if (bsize == 0) {
+ if (bsize == 0)
bsize = strlen(buf);
- } else if (bsize > INT_MAX) {
+ if (bsize > INT_MAX) {
ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_STRING_TOO_LONG);
return 0;
}
@@ -258,9 +258,9 @@ int OSSL_PARAM_BLD_push_utf8_ptr(OSSL_PARAM_BLD *bld, const char *key,
{
OSSL_PARAM_BLD_DEF *pd;
- if (bsize == 0) {
+ if (bsize == 0)
bsize = strlen(buf);
- } else if (bsize > INT_MAX) {
+ if (bsize > INT_MAX) {
ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_STRING_TOO_LONG);
return 0;
}
diff --git a/crypto/params_from_text.c b/crypto/params_from_text.c
index 360f8933e135..a323bf2616ad 100644
--- a/crypto/params_from_text.c
+++ b/crypto/params_from_text.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
*
* Licensed under the Apache License 2.0 (the "License"). You may not use
@@ -118,7 +118,13 @@ static int prepare_from_text(const OSSL_PARAM *paramdefs, const char *key,
break;
case OSSL_PARAM_OCTET_STRING:
if (*ishex) {
- *buf_n = strlen(value) >> 1;
+ size_t hexdigits = strlen(value);
+ if ((hexdigits % 2) != 0) {
+ /* We don't accept an odd number of hex digits */
+ ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_ODD_NUMBER_OF_DIGITS);
+ return 0;
+ }
+ *buf_n = hexdigits >> 1;
} else {
*buf_n = value_n;
}
diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl
index 1830b2556599..b2bf96cef01e 100755
--- a/crypto/perlasm/x86_64-xlate.pl
+++ b/crypto/perlasm/x86_64-xlate.pl
@@ -111,7 +111,12 @@ elsif (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
$gnuas=1;
}
elsif (`$ENV{CC} --version 2>/dev/null`
- =~ /clang .*/)
+ =~ /(clang .*|Intel.*oneAPI .*)/)
+{
+ $gnuas=1;
+}
+elsif (`$ENV{CC} -V 2>/dev/null`
+ =~ /nvc .*/)
{
$gnuas=1;
}
diff --git a/crypto/pkcs12/p12_add.c b/crypto/pkcs12/p12_add.c
index 6fd4184af5a5..66dcf92ca11e 100644
--- a/crypto/pkcs12/p12_add.c
+++ b/crypto/pkcs12/p12_add.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1999-2024 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
@@ -78,6 +78,12 @@ STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7)
ERR_raise(ERR_LIB_PKCS12, PKCS12_R_CONTENT_TYPE_NOT_DATA);
return NULL;
}
+
+ if (p7->d.data == NULL) {
+ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR);
+ return NULL;
+ }
+
return ASN1_item_unpack(p7->d.data, ASN1_ITEM_rptr(PKCS12_SAFEBAGS));
}
@@ -150,6 +156,12 @@ STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass,
{
if (!PKCS7_type_is_encrypted(p7))
return NULL;
+
+ if (p7->d.encrypted == NULL) {
+ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR);
+ return NULL;
+ }
+
return PKCS12_item_decrypt_d2i_ex(p7->d.encrypted->enc_data->algorithm,
ASN1_ITEM_rptr(PKCS12_SAFEBAGS),
pass, passlen,
@@ -188,6 +200,12 @@ STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12)
ERR_raise(ERR_LIB_PKCS12, PKCS12_R_CONTENT_TYPE_NOT_DATA);
return NULL;
}
+
+ if (p12->authsafes->d.data == NULL) {
+ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR);
+ return NULL;
+ }
+
p7s = ASN1_item_unpack(p12->authsafes->d.data,
ASN1_ITEM_rptr(PKCS12_AUTHSAFES));
if (p7s != NULL) {
diff --git a/crypto/pkcs12/p12_mutl.c b/crypto/pkcs12/p12_mutl.c
index 67a885a45f89..f8a6d33ddfae 100644
--- a/crypto/pkcs12/p12_mutl.c
+++ b/crypto/pkcs12/p12_mutl.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1999-2024 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
@@ -98,6 +98,11 @@ static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
return 0;
}
+ if (p12->authsafes->d.data == NULL) {
+ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR);
+ return 0;
+ }
+
salt = p12->mac->salt->data;
saltlen = p12->mac->salt->length;
if (p12->mac->iter == NULL)
diff --git a/crypto/pkcs12/p12_npas.c b/crypto/pkcs12/p12_npas.c
index 62230bc6187f..dfcfcf6ae677 100644
--- a/crypto/pkcs12/p12_npas.c
+++ b/crypto/pkcs12/p12_npas.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1999-2024 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
@@ -77,8 +77,9 @@ static int newpass_p12(PKCS12 *p12, const char *oldpass, const char *newpass)
bags = PKCS12_unpack_p7data(p7);
} else if (bagnid == NID_pkcs7_encrypted) {
bags = PKCS12_unpack_p7encdata(p7, oldpass, -1);
- if (!alg_get(p7->d.encrypted->enc_data->algorithm,
- &pbe_nid, &pbe_iter, &pbe_saltlen))
+ if (p7->d.encrypted == NULL
+ || !alg_get(p7->d.encrypted->enc_data->algorithm,
+ &pbe_nid, &pbe_iter, &pbe_saltlen))
goto err;
} else {
continue;
diff --git a/crypto/pkcs7/pk7_attr.c b/crypto/pkcs7/pk7_attr.c
index e9904c5950c6..80b128c30455 100644
--- a/crypto/pkcs7/pk7_attr.c
+++ b/crypto/pkcs7/pk7_attr.c
@@ -28,8 +28,12 @@ int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si,
}
seq->length = ASN1_item_i2d((ASN1_VALUE *)cap, &seq->data,
ASN1_ITEM_rptr(X509_ALGORS));
- return PKCS7_add_signed_attribute(si, NID_SMIMECapabilities,
- V_ASN1_SEQUENCE, seq);
+ if (!PKCS7_add_signed_attribute(si, NID_SMIMECapabilities,
+ V_ASN1_SEQUENCE, seq)) {
+ ASN1_STRING_free(seq);
+ return 0;
+ }
+ return 1;
}
STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si)
@@ -95,12 +99,18 @@ int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid)
int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t)
{
- if (t == NULL && (t = X509_gmtime_adj(NULL, 0)) == NULL) {
+ ASN1_TIME *tmp = NULL;
+
+ if (t == NULL && (tmp = t = X509_gmtime_adj(NULL, 0)) == NULL) {
ERR_raise(ERR_LIB_PKCS7, ERR_R_MALLOC_FAILURE);
return 0;
}
- return PKCS7_add_signed_attribute(si, NID_pkcs9_signingTime,
- V_ASN1_UTCTIME, t);
+ if (!PKCS7_add_signed_attribute(si, NID_pkcs9_signingTime,
+ V_ASN1_UTCTIME, t)) {
+ ASN1_TIME_free(tmp);
+ return 0;
+ }
+ return 1;
}
int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si,
diff --git a/crypto/pkcs7/pk7_mime.c b/crypto/pkcs7/pk7_mime.c
index 49a0da5f819c..d23f7a869f9f 100644
--- a/crypto/pkcs7/pk7_mime.c
+++ b/crypto/pkcs7/pk7_mime.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1999-2024 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
@@ -33,10 +33,13 @@ int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags)
int ctype_nid = OBJ_obj2nid(p7->type);
const PKCS7_CTX *ctx = ossl_pkcs7_get0_ctx(p7);
- if (ctype_nid == NID_pkcs7_signed)
+ if (ctype_nid == NID_pkcs7_signed) {
+ if (p7->d.sign == NULL)
+ return 0;
mdalgs = p7->d.sign->md_algs;
- else
+ } else {
mdalgs = NULL;
+ }
flags ^= SMIME_OLDMIME;
diff --git a/crypto/poly1305/asm/poly1305-ppc.pl b/crypto/poly1305/asm/poly1305-ppc.pl
index 9f86134d923f..9f9b27cac336 100755
--- a/crypto/poly1305/asm/poly1305-ppc.pl
+++ b/crypto/poly1305/asm/poly1305-ppc.pl
@@ -1,5 +1,5 @@
#! /usr/bin/env perl
-# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright 2016-2024 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
@@ -744,7 +744,7 @@ ___
my $LOCALS= 6*$SIZE_T;
my $VSXFRAME = $LOCALS + 6*$SIZE_T;
$VSXFRAME += 128; # local variables
- $VSXFRAME += 13*16; # v20-v31 offload
+ $VSXFRAME += 12*16; # v20-v31 offload
my $BIG_ENDIAN = ($flavour !~ /le/) ? 4 : 0;
@@ -919,12 +919,12 @@ __poly1305_blocks_vsx:
addi r11,r11,32
stvx v22,r10,$sp
addi r10,r10,32
- stvx v23,r10,$sp
- addi r10,r10,32
- stvx v24,r11,$sp
+ stvx v23,r11,$sp
addi r11,r11,32
- stvx v25,r10,$sp
+ stvx v24,r10,$sp
addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
stvx v26,r10,$sp
addi r10,r10,32
stvx v27,r11,$sp
@@ -1153,12 +1153,12 @@ __poly1305_blocks_vsx:
addi r11,r11,32
stvx v22,r10,$sp
addi r10,r10,32
- stvx v23,r10,$sp
- addi r10,r10,32
- stvx v24,r11,$sp
+ stvx v23,r11,$sp
addi r11,r11,32
- stvx v25,r10,$sp
+ stvx v24,r10,$sp
addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
stvx v26,r10,$sp
addi r10,r10,32
stvx v27,r11,$sp
@@ -1899,26 +1899,26 @@ Ldone_vsx:
mtspr 256,r12 # restore vrsave
lvx v20,r10,$sp
addi r10,r10,32
- lvx v21,r10,$sp
- addi r10,r10,32
- lvx v22,r11,$sp
+ lvx v21,r11,$sp
addi r11,r11,32
- lvx v23,r10,$sp
+ lvx v22,r10,$sp
addi r10,r10,32
- lvx v24,r11,$sp
+ lvx v23,r11,$sp
addi r11,r11,32
- lvx v25,r10,$sp
+ lvx v24,r10,$sp
addi r10,r10,32
- lvx v26,r11,$sp
+ lvx v25,r11,$sp
addi r11,r11,32
- lvx v27,r10,$sp
+ lvx v26,r10,$sp
addi r10,r10,32
- lvx v28,r11,$sp
+ lvx v27,r11,$sp
addi r11,r11,32
- lvx v29,r10,$sp
+ lvx v28,r10,$sp
addi r10,r10,32
- lvx v30,r11,$sp
- lvx v31,r10,$sp
+ lvx v29,r11,$sp
+ addi r11,r11,32
+ lvx v30,r10,$sp
+ lvx v31,r11,$sp
$POP r27,`$VSXFRAME-$SIZE_T*5`($sp)
$POP r28,`$VSXFRAME-$SIZE_T*4`($sp)
$POP r29,`$VSXFRAME-$SIZE_T*3`($sp)
diff --git a/crypto/property/property_parse.c b/crypto/property/property_parse.c
index e3a4998df11f..19ea39a786eb 100644
--- a/crypto/property/property_parse.c
+++ b/crypto/property/property_parse.c
@@ -97,9 +97,18 @@ static int parse_number(const char *t[], OSSL_PROPERTY_DEFINITION *res)
const char *s = *t;
int64_t v = 0;
- if (!ossl_isdigit(*s))
- return 0;
do {
+ if (!ossl_isdigit(*s)) {
+ ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_A_DECIMAL_DIGIT,
+ "HERE-->%s", *t);
+ return 0;
+ }
+ /* overflow check */
+ if (v > ((INT64_MAX - (*s - '0')) / 10)) {
+ ERR_raise_data(ERR_LIB_PROP, PROP_R_PARSE_FAILED,
+ "Property %s overflows", *t);
+ return 0;
+ }
v = v * 10 + (*s++ - '0');
} while (ossl_isdigit(*s));
if (!ossl_isspace(*s) && *s != '\0' && *s != ',') {
@@ -117,15 +126,27 @@ static int parse_hex(const char *t[], OSSL_PROPERTY_DEFINITION *res)
{
const char *s = *t;
int64_t v = 0;
+ int sval;
- if (!ossl_isxdigit(*s))
- return 0;
do {
+ if (ossl_isdigit(*s)) {
+ sval = *s - '0';
+ } else if (ossl_isxdigit(*s)) {
+ sval = ossl_tolower(*s) - 'a' + 10;
+ } else {
+ ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_AN_HEXADECIMAL_DIGIT,
+ "%s", *t);
+ return 0;
+ }
+
+ if (v > ((INT64_MAX - sval) / 16)) {
+ ERR_raise_data(ERR_LIB_PROP, PROP_R_PARSE_FAILED,
+ "Property %s overflows", *t);
+ return 0;
+ }
+
v <<= 4;
- if (ossl_isdigit(*s))
- v += *s - '0';
- else
- v += ossl_tolower(*s) - 'a';
+ v += sval;
} while (ossl_isxdigit(*++s));
if (!ossl_isspace(*s) && *s != '\0' && *s != ',') {
ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_AN_HEXADECIMAL_DIGIT,
@@ -143,9 +164,18 @@ static int parse_oct(const char *t[], OSSL_PROPERTY_DEFINITION *res)
const char *s = *t;
int64_t v = 0;
- if (*s == '9' || *s == '8' || !ossl_isdigit(*s))
- return 0;
do {
+ if (*s == '9' || *s == '8' || !ossl_isdigit(*s)) {
+ ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_AN_OCTAL_DIGIT,
+ "HERE-->%s", *t);
+ return 0;
+ }
+ if (v > ((INT64_MAX - (*s - '0')) / 8)) {
+ ERR_raise_data(ERR_LIB_PROP, PROP_R_PARSE_FAILED,
+ "Property %s overflows", *t);
+ return 0;
+ }
+
v = (v << 3) + (*s - '0');
} while (ossl_isdigit(*++s) && *s != '9' && *s != '8');
if (!ossl_isspace(*s) && *s != '\0' && *s != ',') {
diff --git a/crypto/provider_conf.c b/crypto/provider_conf.c
index c13c887c3d4a..9333b8777f2b 100644
--- a/crypto/provider_conf.c
+++ b/crypto/provider_conf.c
@@ -70,13 +70,22 @@ static const char *skip_dot(const char *name)
return name;
}
-static int provider_conf_params(OSSL_PROVIDER *prov,
- OSSL_PROVIDER_INFO *provinfo,
- const char *name, const char *value,
- const CONF *cnf)
+/*
+ * Parse the provider params section
+ * Returns:
+ * 1 for success
+ * 0 for non-fatal errors
+ * < 0 for fatal errors
+ */
+static int provider_conf_params_internal(OSSL_PROVIDER *prov,
+ OSSL_PROVIDER_INFO *provinfo,
+ const char *name, const char *value,
+ const CONF *cnf,
+ STACK_OF(OPENSSL_CSTRING) *visited)
{
STACK_OF(CONF_VALUE) *sect;
int ok = 1;
+ int rc = 0;
sect = NCONF_get_section(cnf, value);
if (sect != NULL) {
@@ -86,6 +95,25 @@ static int provider_conf_params(OSSL_PROVIDER *prov,
OSSL_TRACE1(CONF, "Provider params: start section %s\n", value);
+ /*
+ * Check to see if the provided section value has already
+ * been visited. If it has, then we have a recursive lookup
+ * in the configuration which isn't valid. As such we should error
+ * out
+ */
+ for (i = 0; i < sk_OPENSSL_CSTRING_num(visited); i++) {
+ if (sk_OPENSSL_CSTRING_value(visited, i) == value) {
+ ERR_raise(ERR_LIB_CONF, CONF_R_RECURSIVE_SECTION_REFERENCE);
+ return -1;
+ }
+ }
+
+ /*
+ * We've not visited this node yet, so record it on the stack
+ */
+ if (!sk_OPENSSL_CSTRING_push(visited, value))
+ return -1;
+
if (name != NULL) {
OPENSSL_strlcpy(buffer, name, sizeof(buffer));
OPENSSL_strlcat(buffer, ".", sizeof(buffer));
@@ -95,14 +123,20 @@ static int provider_conf_params(OSSL_PROVIDER *prov,
for (i = 0; i < sk_CONF_VALUE_num(sect); i++) {
CONF_VALUE *sectconf = sk_CONF_VALUE_value(sect, i);
- if (buffer_len + strlen(sectconf->name) >= sizeof(buffer))
- return 0;
+ if (buffer_len + strlen(sectconf->name) >= sizeof(buffer)) {
+ sk_OPENSSL_CSTRING_pop(visited);
+ return -1;
+ }
buffer[buffer_len] = '\0';
OPENSSL_strlcat(buffer, sectconf->name, sizeof(buffer));
- if (!provider_conf_params(prov, provinfo, buffer, sectconf->value,
- cnf))
- return 0;
+ rc = provider_conf_params_internal(prov, provinfo, buffer,
+ sectconf->value, cnf, visited);
+ if (rc < 0) {
+ sk_OPENSSL_CSTRING_pop(visited);
+ return rc;
+ }
}
+ sk_OPENSSL_CSTRING_pop(visited);
OSSL_TRACE1(CONF, "Provider params: finish section %s\n", value);
} else {
@@ -116,6 +150,33 @@ static int provider_conf_params(OSSL_PROVIDER *prov,
return ok;
}
+/*
+ * recursively parse the provider configuration section
+ * of the config file.
+ * Returns
+ * 1 on success
+ * 0 on non-fatal error
+ * < 0 on fatal errors
+ */
+static int provider_conf_params(OSSL_PROVIDER *prov,
+ OSSL_PROVIDER_INFO *provinfo,
+ const char *name, const char *value,
+ const CONF *cnf)
+{
+ int rc;
+ STACK_OF(OPENSSL_CSTRING) *visited = sk_OPENSSL_CSTRING_new_null();
+
+ if (visited == NULL)
+ return -1;
+
+ rc = provider_conf_params_internal(prov, provinfo, name,
+ value, cnf, visited);
+
+ sk_OPENSSL_CSTRING_free(visited);
+
+ return rc;
+}
+
static int prov_already_activated(const char *name,
STACK_OF(OSSL_PROVIDER) *activated)
{
@@ -146,6 +207,7 @@ static int provider_conf_load(OSSL_LIB_CTX *libctx, const char *name,
const char *path = NULL;
long activate = 0;
int ok = 0;
+ int added = 0;
name = skip_dot(name);
OSSL_TRACE1(CONF, "Configuring provider %s\n", name);
@@ -218,7 +280,7 @@ static int provider_conf_load(OSSL_LIB_CTX *libctx, const char *name,
ok = provider_conf_params(prov, NULL, NULL, value, cnf);
- if (ok) {
+ if (ok > 0) {
if (!ossl_provider_activate(prov, 1, 0)) {
ok = 0;
} else if (!ossl_provider_add_to_store(prov, &actual, 0)) {
@@ -242,7 +304,7 @@ static int provider_conf_load(OSSL_LIB_CTX *libctx, const char *name,
}
}
}
- if (!ok)
+ if (ok <= 0)
ossl_provider_free(prov);
}
CRYPTO_THREAD_unlock(pcgbl->lock);
@@ -267,19 +329,23 @@ static int provider_conf_load(OSSL_LIB_CTX *libctx, const char *name,
}
if (ok)
ok = provider_conf_params(NULL, &entry, NULL, value, cnf);
- if (ok && (entry.path != NULL || entry.parameters != NULL))
+ if (ok >= 1 && (entry.path != NULL || entry.parameters != NULL)) {
ok = ossl_provider_info_add_to_store(libctx, &entry);
- if (!ok || (entry.path == NULL && entry.parameters == NULL)) {
- ossl_provider_info_clear(&entry);
+ added = 1;
}
-
+ if (added == 0)
+ ossl_provider_info_clear(&entry);
}
/*
- * Even if ok is 0, we still return success. Failure to load a provider is
- * not fatal. We want to continue to load the rest of the config file.
+ * Provider activation returns a tristate:
+ * 1 for successful activation
+ * 0 for non-fatal activation failure
+ * < 0 for fatal activation failure
+ * We return success (1) for activation, (1) for non-fatal activation
+ * failure, and (0) for fatal activation failure
*/
- return 1;
+ return ok >= 0;
}
static int provider_conf_init(CONF_IMODULE *md, const CONF *cnf)
@@ -302,7 +368,7 @@ static int provider_conf_init(CONF_IMODULE *md, const CONF *cnf)
for (i = 0; i < sk_CONF_VALUE_num(elist); i++) {
cval = sk_CONF_VALUE_value(elist, i);
if (!provider_conf_load(NCONF_get0_libctx((CONF *)cnf),
- cval->name, cval->value, cnf))
+ cval->name, cval->value, cnf))
return 0;
}
diff --git a/crypto/provider_core.c b/crypto/provider_core.c
index 92cce32c5bbf..4cadb6a9f02e 100644
--- a/crypto/provider_core.c
+++ b/crypto/provider_core.c
@@ -936,44 +936,46 @@ static int provider_init(OSSL_PROVIDER *prov)
prov->provctx = tmp_provctx;
prov->dispatch = provider_dispatch;
- for (; provider_dispatch->function_id != 0; provider_dispatch++) {
- switch (provider_dispatch->function_id) {
- case OSSL_FUNC_PROVIDER_TEARDOWN:
- prov->teardown =
- OSSL_FUNC_provider_teardown(provider_dispatch);
- break;
- case OSSL_FUNC_PROVIDER_GETTABLE_PARAMS:
- prov->gettable_params =
- OSSL_FUNC_provider_gettable_params(provider_dispatch);
- break;
- case OSSL_FUNC_PROVIDER_GET_PARAMS:
- prov->get_params =
- OSSL_FUNC_provider_get_params(provider_dispatch);
- break;
- case OSSL_FUNC_PROVIDER_SELF_TEST:
- prov->self_test =
- OSSL_FUNC_provider_self_test(provider_dispatch);
- break;
- case OSSL_FUNC_PROVIDER_GET_CAPABILITIES:
- prov->get_capabilities =
- OSSL_FUNC_provider_get_capabilities(provider_dispatch);
- break;
- case OSSL_FUNC_PROVIDER_QUERY_OPERATION:
- prov->query_operation =
- OSSL_FUNC_provider_query_operation(provider_dispatch);
- break;
- case OSSL_FUNC_PROVIDER_UNQUERY_OPERATION:
- prov->unquery_operation =
- OSSL_FUNC_provider_unquery_operation(provider_dispatch);
- break;
+ if (provider_dispatch != NULL) {
+ for (; provider_dispatch->function_id != 0; provider_dispatch++) {
+ switch (provider_dispatch->function_id) {
+ case OSSL_FUNC_PROVIDER_TEARDOWN:
+ prov->teardown =
+ OSSL_FUNC_provider_teardown(provider_dispatch);
+ break;
+ case OSSL_FUNC_PROVIDER_GETTABLE_PARAMS:
+ prov->gettable_params =
+ OSSL_FUNC_provider_gettable_params(provider_dispatch);
+ break;
+ case OSSL_FUNC_PROVIDER_GET_PARAMS:
+ prov->get_params =
+ OSSL_FUNC_provider_get_params(provider_dispatch);
+ break;
+ case OSSL_FUNC_PROVIDER_SELF_TEST:
+ prov->self_test =
+ OSSL_FUNC_provider_self_test(provider_dispatch);
+ break;
+ case OSSL_FUNC_PROVIDER_GET_CAPABILITIES:
+ prov->get_capabilities =
+ OSSL_FUNC_provider_get_capabilities(provider_dispatch);
+ break;
+ case OSSL_FUNC_PROVIDER_QUERY_OPERATION:
+ prov->query_operation =
+ OSSL_FUNC_provider_query_operation(provider_dispatch);
+ break;
+ case OSSL_FUNC_PROVIDER_UNQUERY_OPERATION:
+ prov->unquery_operation =
+ OSSL_FUNC_provider_unquery_operation(provider_dispatch);
+ break;
#ifndef OPENSSL_NO_ERR
# ifndef FIPS_MODULE
- case OSSL_FUNC_PROVIDER_GET_REASON_STRINGS:
- p_get_reason_strings =
- OSSL_FUNC_provider_get_reason_strings(provider_dispatch);
- break;
+ case OSSL_FUNC_PROVIDER_GET_REASON_STRINGS:
+ p_get_reason_strings =
+ OSSL_FUNC_provider_get_reason_strings(provider_dispatch);
+ break;
# endif
#endif
+ }
}
}
diff --git a/crypto/rsa/rsa_lib.c b/crypto/rsa/rsa_lib.c
index 71a17a92349d..c9c661b1ede9 100644
--- a/crypto/rsa/rsa_lib.c
+++ b/crypto/rsa/rsa_lib.c
@@ -999,6 +999,10 @@ int EVP_PKEY_CTX_set_rsa_pss_keygen_md_name(EVP_PKEY_CTX *ctx,
*/
int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md)
{
+ /* If key type not RSA return error */
+ if (!EVP_PKEY_CTX_is_a(ctx, "RSA"))
+ return -1;
+
return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,
EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md));
}
@@ -1026,6 +1030,10 @@ int EVP_PKEY_CTX_get_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, char *name,
*/
int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md)
{
+ /* If key type not RSA return error */
+ if (!EVP_PKEY_CTX_is_a(ctx, "RSA"))
+ return -1;
+
return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,
EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)md);
}
diff --git a/crypto/rsa/rsa_sp800_56b_check.c b/crypto/rsa/rsa_sp800_56b_check.c
index fc8f19b48770..df81397f5478 100644
--- a/crypto/rsa/rsa_sp800_56b_check.c
+++ b/crypto/rsa/rsa_sp800_56b_check.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2018-2024 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2018-2019, Oracle and/or its affiliates. All rights reserved.
*
* Licensed under the Apache License 2.0 (the "License"). You may not use
@@ -289,6 +289,11 @@ int ossl_rsa_sp800_56b_check_public(const RSA *rsa)
return 0;
nbits = BN_num_bits(rsa->n);
+ if (nbits > OPENSSL_RSA_MAX_MODULUS_BITS) {
+ ERR_raise(ERR_LIB_RSA, RSA_R_MODULUS_TOO_LARGE);
+ return 0;
+ }
+
#ifdef FIPS_MODULE
/*
* (Step a): modulus must be 2048 or 3072 (caveat from SP800-56Br1)
@@ -324,7 +329,8 @@ int ossl_rsa_sp800_56b_check_public(const RSA *rsa)
goto err;
}
- ret = ossl_bn_miller_rabin_is_prime(rsa->n, 0, ctx, NULL, 1, &status);
+ /* Highest number of MR rounds from FIPS 186-5 Section B.3 Table B.1 */
+ ret = ossl_bn_miller_rabin_is_prime(rsa->n, 5, ctx, NULL, 1, &status);
#ifdef FIPS_MODULE
if (ret != 1 || status != BN_PRIMETEST_COMPOSITE_NOT_POWER_OF_PRIME) {
#else
diff --git a/crypto/sha/asm/sha1-alpha.pl b/crypto/sha/asm/sha1-alpha.pl
new file mode 100644
index 000000000000..0ffc090602e1
--- /dev/null
+++ b/crypto/sha/asm/sha1-alpha.pl
@@ -0,0 +1,329 @@
+#! /usr/bin/env perl
+# Copyright 2009-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
+
+
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+
+# SHA1 block procedure for Alpha.
+
+# On 21264 performance is 33% better than code generated by vendor
+# compiler, and 75% better than GCC [3.4], and in absolute terms is
+# 8.7 cycles per processed byte. Implementation features vectorized
+# byte swap, but not Xupdate.
+
+@X=( "\$0", "\$1", "\$2", "\$3", "\$4", "\$5", "\$6", "\$7",
+ "\$8", "\$9", "\$10", "\$11", "\$12", "\$13", "\$14", "\$15");
+$ctx="a0"; # $16
+$inp="a1";
+$num="a2";
+$A="a3";
+$B="a4"; # 20
+$C="a5";
+$D="t8";
+$E="t9"; @V=($A,$B,$C,$D,$E);
+$t0="t10"; # 24
+$t1="t11";
+$t2="ra";
+$t3="t12";
+$K="AT"; # 28
+
+sub BODY_00_19 {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=$i+1;
+$code.=<<___ if ($i==0);
+ ldq_u @X[0],0+0($inp)
+ ldq_u @X[1],0+7($inp)
+___
+$code.=<<___ if (!($i&1) && $i<14);
+ ldq_u @X[$i+2],($i+2)*4+0($inp)
+ ldq_u @X[$i+3],($i+2)*4+7($inp)
+___
+$code.=<<___ if (!($i&1) && $i<15);
+ extql @X[$i],$inp,@X[$i]
+ extqh @X[$i+1],$inp,@X[$i+1]
+
+ or @X[$i+1],@X[$i],@X[$i] # pair of 32-bit values are fetched
+
+ srl @X[$i],24,$t0 # vectorized byte swap
+ srl @X[$i],8,$t2
+
+ sll @X[$i],8,$t3
+ sll @X[$i],24,@X[$i]
+ zapnot $t0,0x11,$t0
+ zapnot $t2,0x22,$t2
+
+ zapnot @X[$i],0x88,@X[$i]
+ or $t0,$t2,$t0
+ zapnot $t3,0x44,$t3
+ sll $a,5,$t1
+
+ or @X[$i],$t0,@X[$i]
+ addl $K,$e,$e
+ and $b,$c,$t2
+ zapnot $a,0xf,$a
+
+ or @X[$i],$t3,@X[$i]
+ srl $a,27,$t0
+ bic $d,$b,$t3
+ sll $b,30,$b
+
+ extll @X[$i],4,@X[$i+1] # extract upper half
+ or $t2,$t3,$t2
+ addl @X[$i],$e,$e
+
+ addl $t1,$e,$e
+ srl $b,32,$t3
+ zapnot @X[$i],0xf,@X[$i]
+
+ addl $t0,$e,$e
+ addl $t2,$e,$e
+ or $t3,$b,$b
+___
+$code.=<<___ if (($i&1) && $i<15);
+ sll $a,5,$t1
+ addl $K,$e,$e
+ and $b,$c,$t2
+ zapnot $a,0xf,$a
+
+ srl $a,27,$t0
+ addl @X[$i%16],$e,$e
+ bic $d,$b,$t3
+ sll $b,30,$b
+
+ or $t2,$t3,$t2
+ addl $t1,$e,$e
+ srl $b,32,$t3
+ zapnot @X[$i],0xf,@X[$i]
+
+ addl $t0,$e,$e
+ addl $t2,$e,$e
+ or $t3,$b,$b
+___
+$code.=<<___ if ($i>=15); # with forward Xupdate
+ sll $a,5,$t1
+ addl $K,$e,$e
+ and $b,$c,$t2
+ xor @X[($j+2)%16],@X[$j%16],@X[$j%16]
+
+ zapnot $a,0xf,$a
+ addl @X[$i%16],$e,$e
+ bic $d,$b,$t3
+ xor @X[($j+8)%16],@X[$j%16],@X[$j%16]
+
+ srl $a,27,$t0
+ addl $t1,$e,$e
+ or $t2,$t3,$t2
+ xor @X[($j+13)%16],@X[$j%16],@X[$j%16]
+
+ sll $b,30,$b
+ addl $t0,$e,$e
+ srl @X[$j%16],31,$t1
+
+ addl $t2,$e,$e
+ srl $b,32,$t3
+ addl @X[$j%16],@X[$j%16],@X[$j%16]
+
+ or $t3,$b,$b
+ zapnot @X[$i%16],0xf,@X[$i%16]
+ or $t1,@X[$j%16],@X[$j%16]
+___
+}
+
+sub BODY_20_39 {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=$i+1;
+$code.=<<___ if ($i<79); # with forward Xupdate
+ sll $a,5,$t1
+ addl $K,$e,$e
+ zapnot $a,0xf,$a
+ xor @X[($j+2)%16],@X[$j%16],@X[$j%16]
+
+ sll $b,30,$t3
+ addl $t1,$e,$e
+ xor $b,$c,$t2
+ xor @X[($j+8)%16],@X[$j%16],@X[$j%16]
+
+ srl $b,2,$b
+ addl @X[$i%16],$e,$e
+ xor $d,$t2,$t2
+ xor @X[($j+13)%16],@X[$j%16],@X[$j%16]
+
+ srl @X[$j%16],31,$t1
+ addl $t2,$e,$e
+ srl $a,27,$t0
+ addl @X[$j%16],@X[$j%16],@X[$j%16]
+
+ or $t3,$b,$b
+ addl $t0,$e,$e
+ or $t1,@X[$j%16],@X[$j%16]
+___
+$code.=<<___ if ($i<77);
+ zapnot @X[$i%16],0xf,@X[$i%16]
+___
+$code.=<<___ if ($i==79); # with context fetch
+ sll $a,5,$t1
+ addl $K,$e,$e
+ zapnot $a,0xf,$a
+ ldl @X[0],0($ctx)
+
+ sll $b,30,$t3
+ addl $t1,$e,$e
+ xor $b,$c,$t2
+ ldl @X[1],4($ctx)
+
+ srl $b,2,$b
+ addl @X[$i%16],$e,$e
+ xor $d,$t2,$t2
+ ldl @X[2],8($ctx)
+
+ srl $a,27,$t0
+ addl $t2,$e,$e
+ ldl @X[3],12($ctx)
+
+ or $t3,$b,$b
+ addl $t0,$e,$e
+ ldl @X[4],16($ctx)
+___
+}
+
+sub BODY_40_59 {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=$i+1;
+$code.=<<___; # with forward Xupdate
+ sll $a,5,$t1
+ addl $K,$e,$e
+ zapnot $a,0xf,$a
+ xor @X[($j+2)%16],@X[$j%16],@X[$j%16]
+
+ srl $a,27,$t0
+ and $b,$c,$t2
+ and $b,$d,$t3
+ xor @X[($j+8)%16],@X[$j%16],@X[$j%16]
+
+ sll $b,30,$b
+ addl $t1,$e,$e
+ xor @X[($j+13)%16],@X[$j%16],@X[$j%16]
+
+ srl @X[$j%16],31,$t1
+ addl $t0,$e,$e
+ or $t2,$t3,$t2
+ and $c,$d,$t3
+
+ or $t2,$t3,$t2
+ srl $b,32,$t3
+ addl @X[$i%16],$e,$e
+ addl @X[$j%16],@X[$j%16],@X[$j%16]
+
+ or $t3,$b,$b
+ addl $t2,$e,$e
+ or $t1,@X[$j%16],@X[$j%16]
+ zapnot @X[$i%16],0xf,@X[$i%16]
+___
+}
+
+$code=<<___;
+#ifdef __linux__
+#include <asm/regdef.h>
+#else
+#include <asm.h>
+#include <regdef.h>
+#endif
+
+.text
+
+.set noat
+.set noreorder
+.globl sha1_block_data_order
+.align 5
+.ent sha1_block_data_order
+sha1_block_data_order:
+ lda sp,-64(sp)
+ stq ra,0(sp)
+ stq s0,8(sp)
+ stq s1,16(sp)
+ stq s2,24(sp)
+ stq s3,32(sp)
+ stq s4,40(sp)
+ stq s5,48(sp)
+ stq fp,56(sp)
+ .mask 0x0400fe00,-64
+ .frame sp,64,ra
+ .prologue 0
+
+ ldl $A,0($ctx)
+ ldl $B,4($ctx)
+ sll $num,6,$num
+ ldl $C,8($ctx)
+ ldl $D,12($ctx)
+ ldl $E,16($ctx)
+ addq $inp,$num,$num
+
+.Lloop:
+ .set noreorder
+ ldah $K,23170(zero)
+ zapnot $B,0xf,$B
+ lda $K,31129($K) # K_00_19
+___
+for ($i=0;$i<20;$i++) { &BODY_00_19($i,@V); unshift(@V,pop(@V)); }
+
+$code.=<<___;
+ ldah $K,28378(zero)
+ lda $K,-5215($K) # K_20_39
+___
+for (;$i<40;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
+
+$code.=<<___;
+ ldah $K,-28900(zero)
+ lda $K,-17188($K) # K_40_59
+___
+for (;$i<60;$i++) { &BODY_40_59($i,@V); unshift(@V,pop(@V)); }
+
+$code.=<<___;
+ ldah $K,-13725(zero)
+ lda $K,-15914($K) # K_60_79
+___
+for (;$i<80;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
+
+$code.=<<___;
+ addl @X[0],$A,$A
+ addl @X[1],$B,$B
+ addl @X[2],$C,$C
+ addl @X[3],$D,$D
+ addl @X[4],$E,$E
+ stl $A,0($ctx)
+ stl $B,4($ctx)
+ addq $inp,64,$inp
+ stl $C,8($ctx)
+ stl $D,12($ctx)
+ stl $E,16($ctx)
+ cmpult $inp,$num,$t1
+ bne $t1,.Lloop
+
+ .set noreorder
+ ldq ra,0(sp)
+ ldq s0,8(sp)
+ ldq s1,16(sp)
+ ldq s2,24(sp)
+ ldq s3,32(sp)
+ ldq s4,40(sp)
+ ldq s5,48(sp)
+ ldq fp,56(sp)
+ lda sp,64(sp)
+ ret (ra)
+.end sha1_block_data_order
+.ascii "SHA1 block transform for Alpha, CRYPTOGAMS by <appro\@openssl.org>"
+.align 2
+___
+$output=pop and open STDOUT,">$output";
+print $code;
+close STDOUT or die "error closing STDOUT: $!";
diff --git a/crypto/threads_win.c b/crypto/threads_win.c
new file mode 100644
index 000000000000..dbeda74d73a7
--- /dev/null
+++ b/crypto/threads_win.c
@@ -0,0 +1,263 @@
+/*
+ * Copyright 2016-2023 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
+ */
+
+#if defined(_WIN32)
+# include <windows.h>
+# if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600
+# define USE_RWLOCK
+# endif
+#endif
+
+/*
+ * VC++ 2008 or earlier x86 compilers do not have an inline implementation
+ * of InterlockedOr64 for 32bit and will fail to run on Windows XP 32bit.
+ * https://docs.microsoft.com/en-us/cpp/intrinsics/interlockedor-intrinsic-functions#requirements
+ * To work around this problem, we implement a manual locking mechanism for
+ * only VC++ 2008 or earlier x86 compilers.
+ */
+
+#if (defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER <= 1600)
+# define NO_INTERLOCKEDOR64
+#endif
+
+#include <openssl/crypto.h>
+
+#if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) && defined(OPENSSL_SYS_WINDOWS)
+
+# ifdef USE_RWLOCK
+typedef struct {
+ SRWLOCK lock;
+ int exclusive;
+} CRYPTO_win_rwlock;
+# endif
+
+CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void)
+{
+ CRYPTO_RWLOCK *lock;
+# ifdef USE_RWLOCK
+ CRYPTO_win_rwlock *rwlock;
+
+ if ((lock = OPENSSL_zalloc(sizeof(CRYPTO_win_rwlock))) == NULL)
+ return NULL;
+ rwlock = lock;
+ InitializeSRWLock(&rwlock->lock);
+# else
+
+ if ((lock = OPENSSL_zalloc(sizeof(CRITICAL_SECTION))) == NULL) {
+ /* Don't set error, to avoid recursion blowup. */
+ return NULL;
+ }
+
+# if !defined(_WIN32_WCE)
+ /* 0x400 is the spin count value suggested in the documentation */
+ if (!InitializeCriticalSectionAndSpinCount(lock, 0x400)) {
+ OPENSSL_free(lock);
+ return NULL;
+ }
+# else
+ InitializeCriticalSection(lock);
+# endif
+# endif
+
+ return lock;
+}
+
+__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock)
+{
+# ifdef USE_RWLOCK
+ CRYPTO_win_rwlock *rwlock = lock;
+
+ AcquireSRWLockShared(&rwlock->lock);
+# else
+ EnterCriticalSection(lock);
+# endif
+ return 1;
+}
+
+__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock)
+{
+# ifdef USE_RWLOCK
+ CRYPTO_win_rwlock *rwlock = lock;
+
+ AcquireSRWLockExclusive(&rwlock->lock);
+ rwlock->exclusive = 1;
+# else
+ EnterCriticalSection(lock);
+# endif
+ return 1;
+}
+
+int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock)
+{
+# ifdef USE_RWLOCK
+ CRYPTO_win_rwlock *rwlock = lock;
+
+ if (rwlock->exclusive) {
+ rwlock->exclusive = 0;
+ ReleaseSRWLockExclusive(&rwlock->lock);
+ } else {
+ ReleaseSRWLockShared(&rwlock->lock);
+ }
+# else
+ LeaveCriticalSection(lock);
+# endif
+ return 1;
+}
+
+void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock)
+{
+ if (lock == NULL)
+ return;
+
+# ifndef USE_RWLOCK
+ DeleteCriticalSection(lock);
+# endif
+ OPENSSL_free(lock);
+
+ return;
+}
+
+# define ONCE_UNINITED 0
+# define ONCE_ININIT 1
+# define ONCE_DONE 2
+
+/*
+ * We don't use InitOnceExecuteOnce because that isn't available in WinXP which
+ * we still have to support.
+ */
+int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void))
+{
+ LONG volatile *lock = (LONG *)once;
+ LONG result;
+
+ if (*lock == ONCE_DONE)
+ return 1;
+
+ do {
+ result = InterlockedCompareExchange(lock, ONCE_ININIT, ONCE_UNINITED);
+ if (result == ONCE_UNINITED) {
+ init();
+ *lock = ONCE_DONE;
+ return 1;
+ }
+ } while (result == ONCE_ININIT);
+
+ return (*lock == ONCE_DONE);
+}
+
+int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *))
+{
+ *key = TlsAlloc();
+ if (*key == TLS_OUT_OF_INDEXES)
+ return 0;
+
+ return 1;
+}
+
+void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key)
+{
+ DWORD last_error;
+ void *ret;
+
+ /*
+ * TlsGetValue clears the last error even on success, so that callers may
+ * distinguish it successfully returning NULL or failing. It is documented
+ * to never fail if the argument is a valid index from TlsAlloc, so we do
+ * not need to handle this.
+ *
+ * However, this error-mangling behavior interferes with the caller's use of
+ * GetLastError. In particular SSL_get_error queries the error queue to
+ * determine whether the caller should look at the OS's errors. To avoid
+ * destroying state, save and restore the Windows error.
+ *
+ * https://msdn.microsoft.com/en-us/library/windows/desktop/ms686812(v=vs.85).aspx
+ */
+ last_error = GetLastError();
+ ret = TlsGetValue(*key);
+ SetLastError(last_error);
+ return ret;
+}
+
+int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val)
+{
+ if (TlsSetValue(*key, val) == 0)
+ return 0;
+
+ return 1;
+}
+
+int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key)
+{
+ if (TlsFree(*key) == 0)
+ return 0;
+
+ return 1;
+}
+
+CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void)
+{
+ return GetCurrentThreadId();
+}
+
+int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b)
+{
+ return (a == b);
+}
+
+int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
+{
+ *ret = (int)InterlockedExchangeAdd((long volatile *)val, (long)amount) + amount;
+ return 1;
+}
+
+int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret,
+ CRYPTO_RWLOCK *lock)
+{
+#if (defined(NO_INTERLOCKEDOR64))
+ if (lock == NULL || !CRYPTO_THREAD_write_lock(lock))
+ return 0;
+ *val |= op;
+ *ret = *val;
+
+ if (!CRYPTO_THREAD_unlock(lock))
+ return 0;
+
+ return 1;
+#else
+ *ret = (uint64_t)InterlockedOr64((LONG64 volatile *)val, (LONG64)op) | op;
+ return 1;
+#endif
+}
+
+int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock)
+{
+#if (defined(NO_INTERLOCKEDOR64))
+ if (lock == NULL || !CRYPTO_THREAD_read_lock(lock))
+ return 0;
+ *ret = *val;
+ if (!CRYPTO_THREAD_unlock(lock))
+ return 0;
+
+ return 1;
+#else
+ *ret = (uint64_t)InterlockedOr64((LONG64 volatile *)val, 0);
+ return 1;
+#endif
+}
+
+int openssl_init_fork_handlers(void)
+{
+ return 0;
+}
+
+int openssl_get_fork_id(void)
+{
+ return 0;
+}
+#endif
diff --git a/crypto/x509/t_req.c b/crypto/x509/t_req.c
index 095c16510099..63626c0d9810 100644
--- a/crypto/x509/t_req.c
+++ b/crypto/x509/t_req.c
@@ -42,15 +42,15 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags,
EVP_PKEY *pkey;
STACK_OF(X509_EXTENSION) *exts;
char mlch = ' ';
- int nmindent = 0;
+ int nmindent = 0, printok = 0;
if ((nmflags & XN_FLAG_SEP_MASK) == XN_FLAG_SEP_MULTILINE) {
mlch = '\n';
nmindent = 12;
}
- if (nmflags == X509_FLAG_COMPAT)
- nmindent = 16;
+ if (nmflags == XN_FLAG_COMPAT)
+ printok = 1;
if (!(cflag & X509_FLAG_NO_HEADER)) {
if (BIO_write(bp, "Certificate Request:\n", 21) <= 0)
@@ -72,7 +72,7 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags,
if (BIO_printf(bp, " Subject:%c", mlch) <= 0)
goto err;
if (X509_NAME_print_ex(bp, X509_REQ_get_subject_name(x),
- nmindent, nmflags) < 0)
+ nmindent, nmflags) < printok)
goto err;
if (BIO_write(bp, "\n", 1) <= 0)
goto err;
diff --git a/crypto/x509/t_x509.c b/crypto/x509/t_x509.c
index 95ee5f519fdd..5b0282bc132f 100644
--- a/crypto/x509/t_x509.c
+++ b/crypto/x509/t_x509.c
@@ -60,10 +60,8 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags,
nmindent = 12;
}
- if (nmflags == X509_FLAG_COMPAT) {
- nmindent = 16;
+ if (nmflags == XN_FLAG_COMPAT)
printok = 1;
- }
if (!(cflag & X509_FLAG_NO_HEADER)) {
if (BIO_write(bp, "Certificate:\n", 13) <= 0)
diff --git a/crypto/x509/v3_addr.c b/crypto/x509/v3_addr.c
index db010720741c..4930f3312422 100644
--- a/crypto/x509/v3_addr.c
+++ b/crypto/x509/v3_addr.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2006-2024 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
@@ -972,6 +972,10 @@ static void *v2i_IPAddrBlocks(const struct v3_ext_method *method,
* the other input values.
*/
if (safi != NULL) {
+ if (val->value == NULL) {
+ ERR_raise(ERR_LIB_X509V3, X509V3_R_MISSING_VALUE);
+ goto err;
+ }
*safi = strtoul(val->value, &t, 0);
t += strspn(t, " \t");
if (*safi > 0xFF || *t++ != ':') {
diff --git a/crypto/x509/v3_asid.c b/crypto/x509/v3_asid.c
index 86577d6ca48c..c2b6f8a660df 100644
--- a/crypto/x509/v3_asid.c
+++ b/crypto/x509/v3_asid.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2006-2024 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
@@ -169,8 +169,11 @@ int X509v3_asid_add_inherit(ASIdentifiers *asid, int which)
if (*choice == NULL) {
if ((*choice = ASIdentifierChoice_new()) == NULL)
return 0;
- if (((*choice)->u.inherit = ASN1_NULL_new()) == NULL)
+ if (((*choice)->u.inherit = ASN1_NULL_new()) == NULL) {
+ ASIdentifierChoice_free(*choice);
+ *choice = NULL;
return 0;
+ }
(*choice)->type = ASIdentifierChoice_inherit;
}
return (*choice)->type == ASIdentifierChoice_inherit;
@@ -196,18 +199,23 @@ int X509v3_asid_add_id_or_range(ASIdentifiers *asid,
default:
return 0;
}
- if (*choice != NULL && (*choice)->type == ASIdentifierChoice_inherit)
+ if (*choice != NULL && (*choice)->type != ASIdentifierChoice_asIdsOrRanges)
return 0;
if (*choice == NULL) {
if ((*choice = ASIdentifierChoice_new()) == NULL)
return 0;
(*choice)->u.asIdsOrRanges = sk_ASIdOrRange_new(ASIdOrRange_cmp);
- if ((*choice)->u.asIdsOrRanges == NULL)
+ if ((*choice)->u.asIdsOrRanges == NULL) {
+ ASIdentifierChoice_free(*choice);
+ *choice = NULL;
return 0;
+ }
(*choice)->type = ASIdentifierChoice_asIdsOrRanges;
}
if ((aor = ASIdOrRange_new()) == NULL)
return 0;
+ if (!sk_ASIdOrRange_reserve((*choice)->u.asIdsOrRanges, 1))
+ goto err;
if (max == NULL) {
aor->type = ASIdOrRange_id;
aor->u.id = min;
@@ -220,7 +228,8 @@ int X509v3_asid_add_id_or_range(ASIdentifiers *asid,
ASN1_INTEGER_free(aor->u.range->max);
aor->u.range->max = max;
}
- if (!(sk_ASIdOrRange_push((*choice)->u.asIdsOrRanges, aor)))
+ /* Cannot fail due to the reservation above */
+ if (!ossl_assert(sk_ASIdOrRange_push((*choice)->u.asIdsOrRanges, aor)))
goto err;
return 1;
@@ -538,6 +547,11 @@ static void *v2i_ASIdentifiers(const struct v3_ext_method *method,
goto err;
}
+ if (val->value == NULL) {
+ ERR_raise(ERR_LIB_X509V3, X509V3_R_EXTENSION_VALUE_ERROR);
+ goto err;
+ }
+
/*
* Handle inheritance.
*/
diff --git a/crypto/x509/v3_crld.c b/crypto/x509/v3_crld.c
index 0289df4de789..07c8379d3521 100644
--- a/crypto/x509/v3_crld.c
+++ b/crypto/x509/v3_crld.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1999-2024 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
@@ -70,6 +70,11 @@ static int set_dist_point_name(DIST_POINT_NAME **pdp, X509V3_CTX *ctx,
STACK_OF(GENERAL_NAME) *fnm = NULL;
STACK_OF(X509_NAME_ENTRY) *rnm = NULL;
+ if (cnf->value == NULL) {
+ ERR_raise(ERR_LIB_X509V3, X509V3_R_MISSING_VALUE);
+ goto err;
+ }
+
if (strncmp(cnf->name, "fullname", 9) == 0) {
fnm = gnames_from_sectname(ctx, cnf->value);
if (!fnm)
diff --git a/crypto/x509/v3_ist.c b/crypto/x509/v3_ist.c
index 4a3cfa12a471..96c40a3961a2 100644
--- a/crypto/x509/v3_ist.c
+++ b/crypto/x509/v3_ist.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2020-2024 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
@@ -50,25 +50,33 @@ static ISSUER_SIGN_TOOL *v2i_issuer_sign_tool(X509V3_EXT_METHOD *method, X509V3_
}
if (strcmp(cnf->name, "signTool") == 0) {
ist->signTool = ASN1_UTF8STRING_new();
- if (ist->signTool == NULL || !ASN1_STRING_set(ist->signTool, cnf->value, strlen(cnf->value))) {
+ if (ist->signTool == NULL
+ || cnf->value == NULL
+ || !ASN1_STRING_set(ist->signTool, cnf->value, strlen(cnf->value))) {
ERR_raise(ERR_LIB_X509V3, ERR_R_MALLOC_FAILURE);
goto err;
}
} else if (strcmp(cnf->name, "cATool") == 0) {
ist->cATool = ASN1_UTF8STRING_new();
- if (ist->cATool == NULL || !ASN1_STRING_set(ist->cATool, cnf->value, strlen(cnf->value))) {
+ if (ist->cATool == NULL
+ || cnf->value == NULL
+ || !ASN1_STRING_set(ist->cATool, cnf->value, strlen(cnf->value))) {
ERR_raise(ERR_LIB_X509V3, ERR_R_MALLOC_FAILURE);
goto err;
}
} else if (strcmp(cnf->name, "signToolCert") == 0) {
ist->signToolCert = ASN1_UTF8STRING_new();
- if (ist->signToolCert == NULL || !ASN1_STRING_set(ist->signToolCert, cnf->value, strlen(cnf->value))) {
+ if (ist->signToolCert == NULL
+ || cnf->value == NULL
+ || !ASN1_STRING_set(ist->signToolCert, cnf->value, strlen(cnf->value))) {
ERR_raise(ERR_LIB_X509V3, ERR_R_MALLOC_FAILURE);
goto err;
}
} else if (strcmp(cnf->name, "cAToolCert") == 0) {
ist->cAToolCert = ASN1_UTF8STRING_new();
- if (ist->cAToolCert == NULL || !ASN1_STRING_set(ist->cAToolCert, cnf->value, strlen(cnf->value))) {
+ if (ist->cAToolCert == NULL
+ || cnf->value == NULL
+ || !ASN1_STRING_set(ist->cAToolCert, cnf->value, strlen(cnf->value))) {
ERR_raise(ERR_LIB_X509V3, ERR_R_MALLOC_FAILURE);
goto err;
}
diff --git a/crypto/x509/v3_san.c b/crypto/x509/v3_san.c
index c081f02e19e4..34ca16a6d72d 100644
--- a/crypto/x509/v3_san.c
+++ b/crypto/x509/v3_san.c
@@ -581,6 +581,8 @@ GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
if ((gen->d.ia5 = ASN1_IA5STRING_new()) == NULL ||
!ASN1_STRING_set(gen->d.ia5, (unsigned char *)value,
strlen(value))) {
+ ASN1_IA5STRING_free(gen->d.ia5);
+ gen->d.ia5 = NULL;
ERR_raise(ERR_LIB_X509V3, ERR_R_MALLOC_FAILURE);
goto err;
}
@@ -651,16 +653,21 @@ static int do_othername(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx)
*/
ASN1_TYPE_free(gen->d.otherName->value);
if ((gen->d.otherName->value = ASN1_generate_v3(p + 1, ctx)) == NULL)
- return 0;
+ goto err;
objlen = p - value;
objtmp = OPENSSL_strndup(value, objlen);
if (objtmp == NULL)
- return 0;
+ goto err;
gen->d.otherName->type_id = OBJ_txt2obj(objtmp, 0);
OPENSSL_free(objtmp);
if (!gen->d.otherName->type_id)
- return 0;
+ goto err;
return 1;
+
+ err:
+ OTHERNAME_free(gen->d.otherName);
+ gen->d.otherName = NULL;
+ return 0;
}
static int do_dirname(GENERAL_NAME *gen, const char *value, X509V3_CTX *ctx)
diff --git a/crypto/x509/v3_sxnet.c b/crypto/x509/v3_sxnet.c
index ca46dc1a5c32..70f5db636c4b 100644
--- a/crypto/x509/v3_sxnet.c
+++ b/crypto/x509/v3_sxnet.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1999-2024 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
@@ -103,8 +103,10 @@ static SXNET *sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
int i;
for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
cnf = sk_CONF_VALUE_value(nval, i);
- if (!SXNET_add_id_asc(&sx, cnf->name, cnf->value, -1))
+ if (!SXNET_add_id_asc(&sx, cnf->name, cnf->value, -1)) {
+ SXNET_free(sx);
return NULL;
+ }
}
return sx;
}
@@ -123,7 +125,11 @@ int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userle
ERR_raise(ERR_LIB_X509V3, X509V3_R_ERROR_CONVERTING_ZONE);
return 0;
}
- return SXNET_add_id_INTEGER(psx, izone, user, userlen);
+ if (!SXNET_add_id_INTEGER(psx, izone, user, userlen)) {
+ ASN1_INTEGER_free(izone);
+ return 0;
+ }
+ return 1;
}
/* Add an id given the zone as an unsigned long */
@@ -139,8 +145,11 @@ int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user,
ASN1_INTEGER_free(izone);
return 0;
}
- return SXNET_add_id_INTEGER(psx, izone, user, userlen);
-
+ if (!SXNET_add_id_INTEGER(psx, izone, user, userlen)) {
+ ASN1_INTEGER_free(izone);
+ return 0;
+ }
+ return 1;
}
/*
@@ -187,6 +196,7 @@ int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *zone, const char *user,
goto err;
if (!sk_SXNETID_push(sx->ids, id))
goto err;
+ ASN1_INTEGER_free(id->zone);
id->zone = zone;
*psx = sx;
return 1;
diff --git a/crypto/x509/x509_att.c b/crypto/x509/x509_att.c
index d9fe7a3791d1..6a541d7980a3 100644
--- a/crypto/x509/x509_att.c
+++ b/crypto/x509/x509_att.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 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
@@ -71,8 +71,8 @@ X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc)
return ret;
}
-STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
- X509_ATTRIBUTE *attr)
+STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
+ X509_ATTRIBUTE *attr)
{
X509_ATTRIBUTE *new_attr = NULL;
STACK_OF(X509_ATTRIBUTE) *sk = NULL;
@@ -82,11 +82,6 @@ STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
return NULL;
}
- if (*x != NULL && X509at_get_attr_by_OBJ(*x, attr->object, -1) != -1) {
- ERR_raise(ERR_LIB_X509, X509_R_DUPLICATE_ATTRIBUTE);
- return NULL;
- }
-
if (*x == NULL) {
if ((sk = sk_X509_ATTRIBUTE_new_null()) == NULL)
goto err;
@@ -110,18 +105,68 @@ STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
return NULL;
}
+STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
+ X509_ATTRIBUTE *attr)
+{
+ if (x == NULL || attr == NULL) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
+ return NULL;
+ }
+ if (*x != NULL && X509at_get_attr_by_OBJ(*x, attr->object, -1) != -1) {
+ ERR_raise(ERR_LIB_X509, X509_R_DUPLICATE_ATTRIBUTE);
+ return NULL;
+ }
+
+ return ossl_x509at_add1_attr(x, attr);
+}
+
+STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) **x,
+ const ASN1_OBJECT *obj,
+ int type,
+ const unsigned char *bytes,
+ int len)
+{
+ X509_ATTRIBUTE *attr;
+ STACK_OF(X509_ATTRIBUTE) *ret;
+
+ attr = X509_ATTRIBUTE_create_by_OBJ(NULL, obj, type, bytes, len);
+ if (attr == NULL)
+ return 0;
+ ret = ossl_x509at_add1_attr(x, attr);
+ X509_ATTRIBUTE_free(attr);
+ return ret;
+}
+
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
**x, const ASN1_OBJECT *obj,
int type,
const unsigned char *bytes,
int len)
{
+ if (x == NULL || obj == NULL) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
+ return NULL;
+ }
+ if (*x != NULL && X509at_get_attr_by_OBJ(*x, obj, -1) != -1) {
+ ERR_raise(ERR_LIB_X509, X509_R_DUPLICATE_ATTRIBUTE);
+ return NULL;
+ }
+
+ return ossl_x509at_add1_attr_by_OBJ(x, obj, type, bytes, len);
+}
+
+STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) **x,
+ int nid, int type,
+ const unsigned char *bytes,
+ int len)
+{
X509_ATTRIBUTE *attr;
STACK_OF(X509_ATTRIBUTE) *ret;
- attr = X509_ATTRIBUTE_create_by_OBJ(NULL, obj, type, bytes, len);
- if (!attr)
+
+ attr = X509_ATTRIBUTE_create_by_NID(NULL, nid, type, bytes, len);
+ if (attr == NULL)
return 0;
- ret = X509at_add1_attr(x, attr);
+ ret = ossl_x509at_add1_attr(x, attr);
X509_ATTRIBUTE_free(attr);
return ret;
}
@@ -131,12 +176,31 @@ STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
const unsigned char *bytes,
int len)
{
+ if (x == NULL) {
+ ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
+ return NULL;
+ }
+ if (*x != NULL && X509at_get_attr_by_NID(*x, nid, -1) != -1) {
+ ERR_raise(ERR_LIB_X509, X509_R_DUPLICATE_ATTRIBUTE);
+ return NULL;
+ }
+
+ return ossl_x509at_add1_attr_by_NID(x, nid, type, bytes, len);
+}
+
+STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) **x,
+ const char *attrname,
+ int type,
+ const unsigned char *bytes,
+ int len)
+{
X509_ATTRIBUTE *attr;
STACK_OF(X509_ATTRIBUTE) *ret;
- attr = X509_ATTRIBUTE_create_by_NID(NULL, nid, type, bytes, len);
- if (!attr)
+
+ attr = X509_ATTRIBUTE_create_by_txt(NULL, attrname, type, bytes, len);
+ if (attr == NULL)
return 0;
- ret = X509at_add1_attr(x, attr);
+ ret = ossl_x509at_add1_attr(x, attr);
X509_ATTRIBUTE_free(attr);
return ret;
}
diff --git a/crypto/x509/x509_req.c b/crypto/x509/x509_req.c
index 5428bdaf4ca6..0434fbbc6b70 100644
--- a/crypto/x509/x509_req.c
+++ b/crypto/x509/x509_req.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 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
@@ -219,7 +219,7 @@ X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc)
if (req == NULL) {
ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER);
- return 0;
+ return NULL;
}
attr = X509at_delete_attr(req->req_info.attributes, loc);
if (attr != NULL)
diff --git a/demos/README.txt b/demos/README.txt
new file mode 100644
index 000000000000..e10239173faa
--- /dev/null
+++ b/demos/README.txt
@@ -0,0 +1,50 @@
+OpenSSL Demonstration Applications
+
+This folder contains source code that demonstrates the proper use of the OpenSSL
+library API.
+
+bio: Demonstration of a simple TLS client and server
+
+certs: Demonstration of creating certs, using OCSP
+
+cipher:
+aesgcm.c Demonstration of symmetric cipher GCM mode encrypt/decrypt
+aesccm.c Demonstration of symmetric cipher CCM mode encrypt/decrypt
+ariacbc.c Demonstration of symmetric cipher CBC mode encrypt/decrypt
+
+cms:
+
+digest:
+EVP_MD_demo.c Compute a digest from multiple buffers
+EVP_MD_stdin.c Compute a digest with data read from stdin
+EVP_MD_xof.c Compute a digest using the SHAKE256 XOF
+EVP_f_md.c Compute a digest using BIO and EVP_f_md
+
+kdf:
+hkdf.c Demonstration of HMAC based key derivation
+pbkdf2.c Demonstration of PBKDF2 password based key derivation
+scrypt.c Demonstration of SCRYPT password based key derivation
+
+mac:
+gmac.c Demonstration of GMAC message authentication
+poly1305.c Demonstration of Poly1305-AES message authentication
+siphash.c Demonstration of SIPHASH message authentication
+
+pkey:
+EVP_PKEY_EC_keygen.c Generate an EC key.
+EVP_PKEY_RSA_keygen.c Generate an RSA key.
+EVP_PKEY_DSA_keygen.c Generate a DSA key.
+EVP_PKEY_DSA_paramgen.c Generate a DSA param key.
+EVP_PKEY_DSA_paramvalidate.c Validate a DSA param key.
+EVP_PKEY_DSA_paramfromdata.c Load a DSA param key using raw data.
+
+smime:
+
+pkcs12:
+pkread.c Print out a description of a PKCS12 file.
+pkwrite.c Add a password to an existing PKCS12 file.
+
+signature:
+EVP_Signature_demo.c Compute and verify a signature from multiple buffers
+rsa_pss_direct.c Compute and verify an RSA-PSS signature from a hash
+rsa_pss_hash.c Compute and verify an RSA-PSS signature over a buffer
diff --git a/demos/bio/Makefile b/demos/bio/Makefile
new file mode 100644
index 000000000000..86f19d4df3af
--- /dev/null
+++ b/demos/bio/Makefile
@@ -0,0 +1,33 @@
+# Quick instruction:
+# To build against an OpenSSL built in the source tree, do this:
+#
+# make OPENSSL_INCS_LOCATION=-I../../include OPENSSL_LIBS_LOCATION=-L../..
+#
+# To run the demos when linked with a shared library (default):
+#
+# LD_LIBRARY_PATH=../.. ./server-arg
+# LD_LIBRARY_PATH=../.. ./server-cmod
+# LD_LIBRARY_PATH=../.. ./server-conf
+# LD_LIBRARY_PATH=../.. ./client-arg
+# LD_LIBRARY_PATH=../.. ./client-conf
+# LD_LIBRARY_PATH=../.. ./saccept
+# LD_LIBRARY_PATH=../.. ./sconnect
+
+CFLAGS = $(OPENSSL_INCS_LOCATION)
+LDFLAGS = $(OPENSSL_LIBS_LOCATION) -lssl -lcrypto $(EX_LIBS)
+
+all: client-arg client-conf saccept sconnect server-arg server-cmod server-conf
+
+client-arg: client-arg.o
+client-conf: client-conf.o
+saccept: saccept.o
+sconnect: sconnect.o
+server-arg: server-arg.o
+server-cmod: server-cmod.o
+server-conf: server-conf.o
+
+client-arg client-conf saccept sconnect server-arg server-cmod server-conf:
+ $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
+
+clean:
+ $(RM) *.o client-arg client-conf saccept sconnect server-arg server-cmod server-conf
diff --git a/demos/bio/README.txt b/demos/bio/README.txt
new file mode 100644
index 000000000000..a8467cda6429
--- /dev/null
+++ b/demos/bio/README.txt
@@ -0,0 +1,6 @@
+This directory contains some simple examples of the use of BIO's
+to simplify socket programming.
+
+The client-conf, server-conf, client-arg and client-conf include examples
+of how to use the SSL_CONF API for configuration file or command line
+processing.
diff --git a/demos/bio/accept.cnf b/demos/bio/accept.cnf
new file mode 100644
index 000000000000..ce36678ee9ca
--- /dev/null
+++ b/demos/bio/accept.cnf
@@ -0,0 +1,23 @@
+# Example configuration file
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+# Port to listen on
+Port = 4433
+
+# Disable TLS v1.2 for test.
+# Protocol = ALL, -TLSv1.2
+# Only support 3 curves
+Curves = P-521:P-384:P-256
+
+# Restricted signature algorithms
+SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512
+Certificate=server.pem
+PrivateKey=server.pem
+ChainCAFile=root.pem
+VerifyCAFile=root.pem
+
+# Request certificate
+VerifyMode=Request
+ClientCAFile=root.pem
diff --git a/demos/bio/client-arg.c b/demos/bio/client-arg.c
new file mode 100644
index 000000000000..202afa1ee8ec
--- /dev/null
+++ b/demos/bio/client-arg.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2013-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+
+int main(int argc, char **argv)
+{
+ BIO *sbio = NULL, *out = NULL;
+ int len;
+ char tmpbuf[1024];
+ SSL_CTX *ctx;
+ SSL_CONF_CTX *cctx;
+ SSL *ssl;
+ char **args = argv + 1;
+ const char *connect_str = "localhost:4433";
+ int nargs = argc - 1;
+
+ ctx = SSL_CTX_new(TLS_client_method());
+ cctx = SSL_CONF_CTX_new();
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_CLIENT);
+ SSL_CONF_CTX_set_ssl_ctx(cctx, ctx);
+ while (*args && **args == '-') {
+ int rv;
+ /* Parse standard arguments */
+ rv = SSL_CONF_cmd_argv(cctx, &nargs, &args);
+ if (rv == -3) {
+ fprintf(stderr, "Missing argument for %s\n", *args);
+ goto end;
+ }
+ if (rv < 0) {
+ fprintf(stderr, "Error in command %s\n", *args);
+ ERR_print_errors_fp(stderr);
+ goto end;
+ }
+ /* If rv > 0 we processed something so proceed to next arg */
+ if (rv > 0)
+ continue;
+ /* Otherwise application specific argument processing */
+ if (strcmp(*args, "-connect") == 0) {
+ connect_str = args[1];
+ if (connect_str == NULL) {
+ fprintf(stderr, "Missing -connect argument\n");
+ goto end;
+ }
+ args += 2;
+ nargs -= 2;
+ continue;
+ } else {
+ fprintf(stderr, "Unknown argument %s\n", *args);
+ goto end;
+ }
+ }
+
+ if (!SSL_CONF_CTX_finish(cctx)) {
+ fprintf(stderr, "Finish error\n");
+ ERR_print_errors_fp(stderr);
+ goto end;
+ }
+
+ /*
+ * We'd normally set some stuff like the verify paths and * mode here
+ * because as things stand this will connect to * any server whose
+ * certificate is signed by any CA.
+ */
+
+ sbio = BIO_new_ssl_connect(ctx);
+
+ BIO_get_ssl(sbio, &ssl);
+
+ if (!ssl) {
+ fprintf(stderr, "Can't locate SSL pointer\n");
+ goto end;
+ }
+
+ /* We might want to do other things with ssl here */
+
+ BIO_set_conn_hostname(sbio, connect_str);
+
+ out = BIO_new_fp(stdout, BIO_NOCLOSE);
+ if (BIO_do_connect(sbio) <= 0) {
+ fprintf(stderr, "Error connecting to server\n");
+ ERR_print_errors_fp(stderr);
+ goto end;
+ }
+
+ /* Could examine ssl here to get connection info */
+
+ BIO_puts(sbio, "GET / HTTP/1.0\n\n");
+ for (;;) {
+ len = BIO_read(sbio, tmpbuf, 1024);
+ if (len <= 0)
+ break;
+ BIO_write(out, tmpbuf, len);
+ }
+ end:
+ SSL_CONF_CTX_free(cctx);
+ BIO_free_all(sbio);
+ BIO_free(out);
+ return 0;
+}
diff --git a/demos/bio/client-conf.c b/demos/bio/client-conf.c
new file mode 100644
index 000000000000..916876bfab94
--- /dev/null
+++ b/demos/bio/client-conf.c
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2013-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+#include <openssl/conf.h>
+
+int main(int argc, char **argv)
+{
+ BIO *sbio = NULL, *out = NULL;
+ int i, len, rv;
+ char tmpbuf[1024];
+ SSL_CTX *ctx = NULL;
+ SSL_CONF_CTX *cctx = NULL;
+ SSL *ssl = NULL;
+ CONF *conf = NULL;
+ STACK_OF(CONF_VALUE) *sect = NULL;
+ CONF_VALUE *cnf;
+ const char *connect_str = "localhost:4433";
+ long errline = -1;
+
+ conf = NCONF_new(NULL);
+
+ if (NCONF_load(conf, "connect.cnf", &errline) <= 0) {
+ if (errline <= 0)
+ fprintf(stderr, "Error processing config file\n");
+ else
+ fprintf(stderr, "Error on line %ld\n", errline);
+ goto end;
+ }
+
+ sect = NCONF_get_section(conf, "default");
+
+ if (sect == NULL) {
+ fprintf(stderr, "Error retrieving default section\n");
+ goto end;
+ }
+
+ ctx = SSL_CTX_new(TLS_client_method());
+ cctx = SSL_CONF_CTX_new();
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_CLIENT);
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_FILE);
+ SSL_CONF_CTX_set_ssl_ctx(cctx, ctx);
+ for (i = 0; i < sk_CONF_VALUE_num(sect); i++) {
+ cnf = sk_CONF_VALUE_value(sect, i);
+ rv = SSL_CONF_cmd(cctx, cnf->name, cnf->value);
+ if (rv > 0)
+ continue;
+ if (rv != -2) {
+ fprintf(stderr, "Error processing %s = %s\n",
+ cnf->name, cnf->value);
+ ERR_print_errors_fp(stderr);
+ goto end;
+ }
+ if (strcmp(cnf->name, "Connect") == 0) {
+ connect_str = cnf->value;
+ } else {
+ fprintf(stderr, "Unknown configuration option %s\n", cnf->name);
+ goto end;
+ }
+ }
+
+ if (!SSL_CONF_CTX_finish(cctx)) {
+ fprintf(stderr, "Finish error\n");
+ ERR_print_errors_fp(stderr);
+ goto end;
+ }
+
+ /*
+ * We'd normally set some stuff like the verify paths and * mode here
+ * because as things stand this will connect to * any server whose
+ * certificate is signed by any CA.
+ */
+
+ sbio = BIO_new_ssl_connect(ctx);
+
+ BIO_get_ssl(sbio, &ssl);
+
+ if (!ssl) {
+ fprintf(stderr, "Can't locate SSL pointer\n");
+ goto end;
+ }
+
+ /* We might want to do other things with ssl here */
+
+ BIO_set_conn_hostname(sbio, connect_str);
+
+ out = BIO_new_fp(stdout, BIO_NOCLOSE);
+ if (BIO_do_connect(sbio) <= 0) {
+ fprintf(stderr, "Error connecting to server\n");
+ ERR_print_errors_fp(stderr);
+ goto end;
+ }
+
+ /* Could examine ssl here to get connection info */
+
+ BIO_puts(sbio, "GET / HTTP/1.0\n\n");
+ for (;;) {
+ len = BIO_read(sbio, tmpbuf, 1024);
+ if (len <= 0)
+ break;
+ BIO_write(out, tmpbuf, len);
+ }
+ end:
+ SSL_CONF_CTX_free(cctx);
+ BIO_free_all(sbio);
+ BIO_free(out);
+ NCONF_free(conf);
+ return 0;
+}
diff --git a/demos/bio/cmod.cnf b/demos/bio/cmod.cnf
new file mode 100644
index 000000000000..df514dba7909
--- /dev/null
+++ b/demos/bio/cmod.cnf
@@ -0,0 +1,27 @@
+# Example config module configuration
+
+# Name supplied by application to CONF_modules_load_file
+# and section containing configuration
+testapp = test_sect
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+[test_sect]
+# list of configuration modules
+
+# SSL configuration module
+ssl_conf = ssl_sect
+
+[ssl_sect]
+# list of SSL configurations
+server = server_sect
+
+[server_sect]
+# Only support 3 curves
+Curves = P-521:P-384:P-256
+# Restricted signature algorithms
+SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512
+# Certificates and keys
+RSA.Certificate=server.pem
+ECDSA.Certificate=server-ec.pem
diff --git a/demos/bio/connect.cnf b/demos/bio/connect.cnf
new file mode 100644
index 000000000000..0049a77b2d62
--- /dev/null
+++ b/demos/bio/connect.cnf
@@ -0,0 +1,15 @@
+# Example configuration file
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+# Connects to the default port of s_server
+Connect = localhost:4433
+
+# Disable TLS v1.2 for test.
+# Protocol = ALL, -TLSv1.2
+# Only support 3 curves
+Curves = P-521:P-384:P-256
+
+# Restricted signature algorithms
+SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512
diff --git a/demos/bio/descrip.mms b/demos/bio/descrip.mms
new file mode 100644
index 000000000000..44ca2febc657
--- /dev/null
+++ b/demos/bio/descrip.mms
@@ -0,0 +1,47 @@
+# This build description trusts that the following logical names are defined:
+#
+# For compilation: OPENSSL
+# For linking with shared libraries: OSSL$LIBCRYPTO_SHR and OSSL$LIBSSL_SHR
+# For linking with static libraries: OSSL$LIBCRYPTO and OSSL$LIBSSL
+#
+# These are normally defined with the OpenSSL startup procedure
+
+# By default, we link with the shared libraries
+SHARED = TRUE
+
+# Alternative, for linking with static libraries
+#SHARED = FALSE
+
+.FIRST :
+ IF "$(SHARED)" .EQS. "TRUE" THEN DEFINE OPT []shared.opt
+ IF "$(SHARED)" .NES. "TRUE" THEN DEFINE OPT []static.opt
+
+.LAST :
+ DEASSIGN OPT
+
+.DEFAULT :
+ @ !
+
+# Because we use an option file, we need to redefine this
+.obj.exe :
+ $(LINK) $(LINKFLAGS) $<,OPT:/OPT
+
+all : client-arg.exe client-conf.exe saccept.exe sconnect.exe -
+ server-arg.exe server-cmod.exe server-conf.exe
+
+client-arg.exe : client-arg.obj
+client-conf.exe : client-conf.obj
+saccept.exe : saccept.obj
+sconnect.exe : sconnect.obj
+server-arg.exe : server-arg.obj
+server-cmod.exe : server-cmod.obj
+server-conf.exe : server-conf.obj
+
+# MMS doesn't infer this automatically...
+client-arg.obj : client-arg.c
+client-conf.obj : client-conf.c
+saccept.obj : saccept.c
+sconnect.obj : sconnect.c
+server-arg.obj : server-arg.c
+server-cmod.obj : server-cmod.c
+server-conf.obj : server-conf.c
diff --git a/demos/bio/intca.pem b/demos/bio/intca.pem
new file mode 100644
index 000000000000..9f1cc025c85c
--- /dev/null
+++ b/demos/bio/intca.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAqegAwIBAgIILsaQqJAjK4IwDQYJKoZIhvcNAQELBQAwaDELMAkGA1UE
+BhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBURVNU
+SU5HIFBVUlBPU0VTIE9OTFkxHTAbBgNVBAMMFE9wZW5TU0wgVGVzdCBSb290IENB
+MCAXDTE4MDYxNDEyNDYyOFoYDzIxMTgwNjE0MTI0NjI4WjBwMQswCQYDVQQGEwJV
+SzEWMBQGA1UECgwNT3BlblNTTCBHcm91cDEiMCAGA1UECwwZRk9SIFRFU1RJTkcg
+UFVSUE9TRVMgT05MWTElMCMGA1UEAwwcT3BlblNTTCBUZXN0IEludGVybWVkaWF0
+ZSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANIpVng2wNFJp2kF
+oJ6Yji25wy1YufnS8NxA82fk5OHdhGWj1CWqnQNotEqEQzcOUszQYrNxd8tEvoWk
+Ik4JMBVoEcgBGedchftptTNulFWodWpi1yFaqA/Nz2BsVgcCJW4C+UWDT7VeHtGU
+7tYKKr35lxp6io/a4jUDQXvO2nJA9YlrxOktunMqtoZSYqUz35ZXsdkn58o8Fbqm
+dEpw6AqAr9aBgY5DSaGxbaX2lwNt9NvB+f9ucOqEnPP8AfTlPYc/ENwJ6u/H8RGw
+d1im71mu2lHjcws3aHkbluH860U3vlKWx6Ff1qdQcH98e2HwElqxCK00xya8leu4
+u64nljkCAwEAAaNjMGEwHQYDVR0OBBYEFAoDRKVoOufDXW5Ui7L4ONxANVsFMB8G
+A1UdIwQYMBaAFDZjTeLsQUG6KL9xuLhzXVdB4pkKMA8GA1UdEwEB/wQFMAMBAf8w
+DgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBgQDZQJLA90ewVaS3E3du
+gSjPkQ1xsHm8H1am+7zr5oZ81J+R8XYIZgMR+9ShVo38OradiYNqDLso+4iuVdxh
+hzoSoQELoDXCficzWKnlAtWvwDDoczyK+/p94g3VKx14n2+GvQzoZ4kwQQgaFH1w
+YI6w0oH9zwoklCxvihj8D069QrYyuTT8JGZ2m0FHqVJg6teuQKFahSgwYR2CUoIb
+6PrpSUQeCVCH8TPkzlRT6UgtM3ERt7+TlQ+zZ80dSf4YTAsDv9Z/CJXiF/5wZr6/
+lWuFjWmX2HkpEW6Wiv5KF8QP6Ft7Z+RYua7RMtELCYvqYbWDBs7fXWGBkZ5xhB09
+jCxz+F7zOeRbyzacfFq9DhxCWCRbIrdgGGE/Of2ujJtmK/2p4M6E5IsKNAI2SJBW
+iJXvIgQgR22ehPqy6er2Gog5LkWUwqB0kHZJJpbp1IW01IGTpD6YAJyVCEAlyMbo
+Kto9+wQFLT3Auv/W5h6OwxkNdfAyZBYy0ZSFk4EE8OdWWY4=
+-----END CERTIFICATE-----
diff --git a/demos/bio/root.pem b/demos/bio/root.pem
new file mode 100644
index 000000000000..b1a1c2117977
--- /dev/null
+++ b/demos/bio/root.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEwzCCAyugAwIBAgIUHKKc7fxVgQjWQ7IF6l7m/fHQHH8wDQYJKoZIhvcNAQEL
+BQAwaDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNV
+BAsMGUZPUiBURVNUSU5HIFBVUlBPU0VTIE9OTFkxHTAbBgNVBAMMFE9wZW5TU0wg
+VGVzdCBSb290IENBMCAXDTE4MDYxNDEyNDYyOFoYDzIxMTgwNjE0MTI0NjI4WjBo
+MQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91cDEiMCAGA1UECwwZ
+Rk9SIFRFU1RJTkcgUFVSUE9TRVMgT05MWTEdMBsGA1UEAwwUT3BlblNTTCBUZXN0
+IFJvb3QgQ0EwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDaTVriXS5C
+6C17OxGwWR4xxdLveLLkAb0+nSiYpzfCcEGX3qiBxHDA+Nj1kkihIJNkXmrKxa3w
+1XIVoSUaVULuVxe3vqla+DScGC9MLVsfIwWe8UdGsKst4VvvtNvQUZ5CvLF4jv0V
+nabvQhcjY5X7A/t8cZcjOHcaZ9fkThhG/7tJKwp4dLgPcXIimQ0UtP5gRBxnpEYd
+l21mPjafqPt02lfOWTgnT5PeVoBDmN7QcrTlI7RzaeDglwFm10rNuYsRxrVsEfiG
+Ejup/1eM/69zkV4Lb2RFbIpZ+oKqQ5AEemh6/IP9VwX08DOX3T1EqwthyB+yOZgp
+BQ/MZ2M21E03sxlgPGKkRVTU520az84Tyft7T7sJ6BeGSMrdEZVUSJxsS/iFFwL2
+ubmhG6tq0ALIyoS+rUeHUeH2pVnEEcHIXAsLbCXfmsRpWU1fOHcpkTSzbMPhqMa3
+K8aKNHni0UtoD+ddOw0Zrx4uf3zlbPCzy2eQ2d8qb/TSynGxWmN8an8CAwEAAaNj
+MGEwHQYDVR0OBBYEFDZjTeLsQUG6KL9xuLhzXVdB4pkKMB8GA1UdIwQYMBaAFDZj
+TeLsQUG6KL9xuLhzXVdB4pkKMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBCwUAA4IBgQCFbQA4yoXhxVQm+tEMpfKf2VEzQVNw0Tzd
+Vy+zbscQ04RM4Hx4YbICdX+J7M2fYByU+KawllZJI++mfS9sbnuPIouD5NJLX5EH
+//5rySOqA0OkN/Y8f41xp/YF5j96NUCjg3RoerefRSHZfNWJE1faQEHuhwDZK6OQ
+GNgt246FZ7ittfe537MHUWY7CjKt6kILN03rVKSgRwwOw5Tv+VyUVyUtRppWl57L
+Z+41g0gZ/r7h6ACd+n35nuzgbmqUF2VNYQLo7RzaxPvtkzJ4t96r+5NAr1cx8thr
+3rnJWSgpm1ZKdtHMj1jCLxarn8gNz2gB35Tn2NdzHQI0/aEEcfLWpU9mrmhUW+yy
+WEN2R8BqGsC++HhlUKKJZgR48SHF5MOBl4KyZPylBuPYcJFQdnEbioBLPlvt5bbt
++o/w3sCR3ZVHMB0n9OcQwd6tdN7aDiept6lJPlOp4dfFjkku8J5nM0oY/Xsg194A
+rRK0SBUCVN/2NSHFl9LKEqQiQIUjOQM=
+-----END CERTIFICATE-----
diff --git a/demos/bio/saccept.c b/demos/bio/saccept.c
new file mode 100644
index 000000000000..6da22ea44091
--- /dev/null
+++ b/demos/bio/saccept.c
@@ -0,0 +1,121 @@
+/*
+ * Copyright 1998-2017 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
+ */
+
+/*-
+ * A minimal program to serve an SSL connection.
+ * It uses blocking.
+ * saccept host:port
+ * host is the interface IP to use. If any interface, use *:port
+ * The default it *:4433
+ *
+ * cc -I../../include saccept.c -L../.. -lssl -lcrypto -ldl
+ */
+
+#include <stdio.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+
+#define CERT_FILE "server.pem"
+
+static volatile int done = 0;
+
+void interrupt(int sig)
+{
+ done = 1;
+}
+
+void sigsetup(void)
+{
+ struct sigaction sa;
+
+ /*
+ * Catch at most once, and don't restart the accept system call.
+ */
+ sa.sa_flags = SA_RESETHAND;
+ sa.sa_handler = interrupt;
+ sigemptyset(&sa.sa_mask);
+ sigaction(SIGINT, &sa, NULL);
+}
+
+int main(int argc, char *argv[])
+{
+ char *port = NULL;
+ BIO *in = NULL;
+ BIO *ssl_bio, *tmp;
+ SSL_CTX *ctx;
+ char buf[512];
+ int ret = EXIT_FAILURE, i;
+
+ if (argc <= 1)
+ port = "*:4433";
+ else
+ port = argv[1];
+
+ ctx = SSL_CTX_new(TLS_server_method());
+ if (!SSL_CTX_use_certificate_chain_file(ctx, CERT_FILE))
+ goto err;
+ if (!SSL_CTX_use_PrivateKey_file(ctx, CERT_FILE, SSL_FILETYPE_PEM))
+ goto err;
+ if (!SSL_CTX_check_private_key(ctx))
+ goto err;
+
+ /* Setup server side SSL bio */
+ ssl_bio = BIO_new_ssl(ctx, 0);
+
+ if ((in = BIO_new_accept(port)) == NULL)
+ goto err;
+
+ /*
+ * This means that when a new connection is accepted on 'in', The ssl_bio
+ * will be 'duplicated' and have the new socket BIO push into it.
+ * Basically it means the SSL BIO will be automatically setup
+ */
+ BIO_set_accept_bios(in, ssl_bio);
+
+ /* Arrange to leave server loop on interrupt */
+ sigsetup();
+
+ again:
+ /*
+ * The first call will setup the accept socket, and the second will get a
+ * socket. In this loop, the first actual accept will occur in the
+ * BIO_read() function.
+ */
+
+ if (BIO_do_accept(in) <= 0)
+ goto err;
+
+ while (!done) {
+ i = BIO_read(in, buf, 512);
+ if (i == 0) {
+ /*
+ * If we have finished, remove the underlying BIO stack so the
+ * next time we call any function for this BIO, it will attempt
+ * to do an accept
+ */
+ printf("Done\n");
+ tmp = BIO_pop(in);
+ BIO_free_all(tmp);
+ goto again;
+ }
+ if (i < 0)
+ goto err;
+ fwrite(buf, 1, i, stdout);
+ fflush(stdout);
+ }
+
+ ret = EXIT_SUCCESS;
+ err:
+ if (ret != EXIT_SUCCESS)
+ ERR_print_errors_fp(stderr);
+ BIO_free(in);
+ return ret;
+}
diff --git a/demos/bio/sconnect.c b/demos/bio/sconnect.c
new file mode 100644
index 000000000000..18f7007ce708
--- /dev/null
+++ b/demos/bio/sconnect.c
@@ -0,0 +1,128 @@
+/*
+ * Copyright 1998-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
+ */
+
+/*-
+ * A minimal program to do SSL to a passed host and port.
+ * It is actually using non-blocking IO but in a very simple manner
+ * sconnect host:port - it does a 'GET / HTTP/1.0'
+ *
+ * cc -I../../include sconnect.c -L../.. -lssl -lcrypto
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+
+#define HOSTPORT "localhost:4433"
+#define CAFILE "root.pem"
+
+int main(int argc, char *argv[])
+{
+ const char *hostport = HOSTPORT;
+ const char *CAfile = CAFILE;
+ const char *hostname;
+ char *cp;
+ BIO *out = NULL;
+ char buf[1024 * 10], *p;
+ SSL_CTX *ssl_ctx = NULL;
+ SSL *ssl;
+ BIO *ssl_bio;
+ int i, len, off, ret = EXIT_FAILURE;
+
+ if (argc > 1)
+ hostport = argv[1];
+ if (argc > 2)
+ CAfile = argv[2];
+
+#ifdef WATT32
+ dbug_init();
+ sock_init();
+#endif
+
+ ssl_ctx = SSL_CTX_new(TLS_client_method());
+
+ /* Enable trust chain verification */
+ SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_PEER, NULL);
+ SSL_CTX_load_verify_locations(ssl_ctx, CAfile, NULL);
+
+ /* Lets make a SSL structure */
+ ssl = SSL_new(ssl_ctx);
+ SSL_set_connect_state(ssl);
+
+
+ /* Use it inside an SSL BIO */
+ ssl_bio = BIO_new(BIO_f_ssl());
+ BIO_set_ssl(ssl_bio, ssl, BIO_CLOSE);
+
+ /* Lets use a connect BIO under the SSL BIO */
+ out = BIO_new(BIO_s_connect());
+ BIO_set_conn_hostname(out, hostport);
+
+ /* The BIO has parsed the host:port and even IPv6 literals in [] */
+ hostname = BIO_get_conn_hostname(out);
+ if (!hostname || SSL_set1_host(ssl, hostname) <= 0)
+ goto err;
+
+ BIO_set_nbio(out, 1);
+ out = BIO_push(ssl_bio, out);
+
+ p = "GET / HTTP/1.0\r\n\r\n";
+ len = strlen(p);
+
+ off = 0;
+ for (;;) {
+ i = BIO_write(out, &(p[off]), len);
+ if (i <= 0) {
+ if (BIO_should_retry(out)) {
+ fprintf(stderr, "write DELAY\n");
+ sleep(1);
+ continue;
+ } else {
+ goto err;
+ }
+ }
+ off += i;
+ len -= i;
+ if (len <= 0)
+ break;
+ }
+
+ for (;;) {
+ i = BIO_read(out, buf, sizeof(buf));
+ if (i == 0)
+ break;
+ if (i < 0) {
+ if (BIO_should_retry(out)) {
+ fprintf(stderr, "read DELAY\n");
+ sleep(1);
+ continue;
+ }
+ goto err;
+ }
+ fwrite(buf, 1, i, stdout);
+ }
+
+ ret = EXIT_SUCCESS;
+ goto done;
+
+ err:
+ if (ERR_peek_error() == 0) { /* system call error */
+ fprintf(stderr, "errno=%d ", errno);
+ perror("error");
+ } else {
+ ERR_print_errors_fp(stderr);
+ }
+ done:
+ BIO_free_all(out);
+ SSL_CTX_free(ssl_ctx);
+ return ret;
+}
diff --git a/demos/bio/server-arg.c b/demos/bio/server-arg.c
new file mode 100644
index 000000000000..60a87725a9de
--- /dev/null
+++ b/demos/bio/server-arg.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2013-2017 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
+ */
+
+/*
+ * A minimal program to serve an SSL connection. It uses blocking. It use the
+ * SSL_CONF API with the command line. cc -I../../include server-arg.c
+ * -L../.. -lssl -lcrypto -ldl
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+
+int main(int argc, char *argv[])
+{
+ char *port = "*:4433";
+ BIO *ssl_bio, *tmp;
+ SSL_CTX *ctx;
+ SSL_CONF_CTX *cctx;
+ char buf[512];
+ BIO *in = NULL;
+ int ret = EXIT_FAILURE, i;
+ char **args = argv + 1;
+ int nargs = argc - 1;
+
+ ctx = SSL_CTX_new(TLS_server_method());
+
+ cctx = SSL_CONF_CTX_new();
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_SERVER);
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_CERTIFICATE);
+ SSL_CONF_CTX_set_ssl_ctx(cctx, ctx);
+ while (*args && **args == '-') {
+ int rv;
+ /* Parse standard arguments */
+ rv = SSL_CONF_cmd_argv(cctx, &nargs, &args);
+ if (rv == -3) {
+ fprintf(stderr, "Missing argument for %s\n", *args);
+ goto err;
+ }
+ if (rv < 0) {
+ fprintf(stderr, "Error in command %s\n", *args);
+ ERR_print_errors_fp(stderr);
+ goto err;
+ }
+ /* If rv > 0 we processed something so proceed to next arg */
+ if (rv > 0)
+ continue;
+ /* Otherwise application specific argument processing */
+ if (strcmp(*args, "-port") == 0) {
+ port = args[1];
+ if (port == NULL) {
+ fprintf(stderr, "Missing -port argument\n");
+ goto err;
+ }
+ args += 2;
+ nargs -= 2;
+ continue;
+ } else {
+ fprintf(stderr, "Unknown argument %s\n", *args);
+ goto err;
+ }
+ }
+
+ if (!SSL_CONF_CTX_finish(cctx)) {
+ fprintf(stderr, "Finish error\n");
+ ERR_print_errors_fp(stderr);
+ goto err;
+ }
+#ifdef ITERATE_CERTS
+ /*
+ * Demo of how to iterate over all certificates in an SSL_CTX structure.
+ */
+ {
+ X509 *x;
+ int rv;
+ rv = SSL_CTX_set_current_cert(ctx, SSL_CERT_SET_FIRST);
+ while (rv) {
+ X509 *x = SSL_CTX_get0_certificate(ctx);
+ X509_NAME_print_ex_fp(stdout, X509_get_subject_name(x), 0,
+ XN_FLAG_ONELINE);
+ printf("\n");
+ rv = SSL_CTX_set_current_cert(ctx, SSL_CERT_SET_NEXT);
+ }
+ fflush(stdout);
+ }
+#endif
+ /* Setup server side SSL bio */
+ ssl_bio = BIO_new_ssl(ctx, 0);
+
+ if ((in = BIO_new_accept(port)) == NULL)
+ goto err;
+
+ /*
+ * This means that when a new connection is accepted on 'in', The ssl_bio
+ * will be 'duplicated' and have the new socket BIO push into it.
+ * Basically it means the SSL BIO will be automatically setup
+ */
+ BIO_set_accept_bios(in, ssl_bio);
+
+ again:
+ /*
+ * The first call will setup the accept socket, and the second will get a
+ * socket. In this loop, the first actual accept will occur in the
+ * BIO_read() function.
+ */
+
+ if (BIO_do_accept(in) <= 0)
+ goto err;
+
+ for (;;) {
+ i = BIO_read(in, buf, 512);
+ if (i == 0) {
+ /*
+ * If we have finished, remove the underlying BIO stack so the
+ * next time we call any function for this BIO, it will attempt
+ * to do an accept
+ */
+ printf("Done\n");
+ tmp = BIO_pop(in);
+ BIO_free_all(tmp);
+ goto again;
+ }
+ if (i < 0)
+ goto err;
+ fwrite(buf, 1, i, stdout);
+ fflush(stdout);
+ }
+
+ ret = EXIT_SUCCESS;
+ err:
+ if (ret != EXIT_SUCCESS)
+ ERR_print_errors_fp(stderr);
+ BIO_free(in);
+ return ret;
+}
diff --git a/demos/bio/server-cmod.c b/demos/bio/server-cmod.c
new file mode 100644
index 000000000000..3642fbacf6ce
--- /dev/null
+++ b/demos/bio/server-cmod.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2015-2017 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
+ */
+
+/*
+ * A minimal TLS server it ses SSL_CTX_config and a configuration file to
+ * set most server parameters.
+ */
+
+#include <stdio.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+#include <openssl/conf.h>
+
+int main(int argc, char *argv[])
+{
+ unsigned char buf[512];
+ char *port = "*:4433";
+ BIO *in = NULL;
+ BIO *ssl_bio, *tmp;
+ SSL_CTX *ctx;
+ int ret = EXIT_FAILURE, i;
+
+ ctx = SSL_CTX_new(TLS_server_method());
+
+ if (CONF_modules_load_file("cmod.cnf", "testapp", 0) <= 0) {
+ fprintf(stderr, "Error processing config file\n");
+ goto err;
+ }
+
+ if (SSL_CTX_config(ctx, "server") == 0) {
+ fprintf(stderr, "Error configuring server.\n");
+ goto err;
+ }
+
+ /* Setup server side SSL bio */
+ ssl_bio = BIO_new_ssl(ctx, 0);
+
+ if ((in = BIO_new_accept(port)) == NULL)
+ goto err;
+
+ /*
+ * This means that when a new connection is accepted on 'in', The ssl_bio
+ * will be 'duplicated' and have the new socket BIO push into it.
+ * Basically it means the SSL BIO will be automatically setup
+ */
+ BIO_set_accept_bios(in, ssl_bio);
+
+ again:
+ /*
+ * The first call will setup the accept socket, and the second will get a
+ * socket. In this loop, the first actual accept will occur in the
+ * BIO_read() function.
+ */
+
+ if (BIO_do_accept(in) <= 0)
+ goto err;
+
+ for (;;) {
+ i = BIO_read(in, buf, sizeof(buf));
+ if (i == 0) {
+ /*
+ * If we have finished, remove the underlying BIO stack so the
+ * next time we call any function for this BIO, it will attempt
+ * to do an accept
+ */
+ printf("Done\n");
+ tmp = BIO_pop(in);
+ BIO_free_all(tmp);
+ goto again;
+ }
+ if (i < 0) {
+ if (BIO_should_retry(in))
+ continue;
+ goto err;
+ }
+ fwrite(buf, 1, i, stdout);
+ fflush(stdout);
+ }
+
+ ret = EXIT_SUCCESS;
+ err:
+ if (ret != EXIT_SUCCESS)
+ ERR_print_errors_fp(stderr);
+ BIO_free(in);
+ return ret;
+}
diff --git a/demos/bio/server-conf.c b/demos/bio/server-conf.c
new file mode 100644
index 000000000000..5e07a15e7bc7
--- /dev/null
+++ b/demos/bio/server-conf.c
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2013-2017 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
+ */
+
+/*
+ * A minimal program to serve an SSL connection. It uses blocking. It uses
+ * the SSL_CONF API with a configuration file. cc -I../../include saccept.c
+ * -L../.. -lssl -lcrypto -ldl
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+#include <openssl/conf.h>
+
+int main(int argc, char *argv[])
+{
+ char *port = "*:4433";
+ BIO *in = NULL;
+ BIO *ssl_bio, *tmp;
+ SSL_CTX *ctx;
+ SSL_CONF_CTX *cctx = NULL;
+ CONF *conf = NULL;
+ STACK_OF(CONF_VALUE) *sect = NULL;
+ CONF_VALUE *cnf;
+ long errline = -1;
+ char buf[512];
+ int ret = EXIT_FAILURE, i;
+
+ ctx = SSL_CTX_new(TLS_server_method());
+
+ conf = NCONF_new(NULL);
+
+ if (NCONF_load(conf, "accept.cnf", &errline) <= 0) {
+ if (errline <= 0)
+ fprintf(stderr, "Error processing config file\n");
+ else
+ fprintf(stderr, "Error on line %ld\n", errline);
+ goto err;
+ }
+
+ sect = NCONF_get_section(conf, "default");
+
+ if (sect == NULL) {
+ fprintf(stderr, "Error retrieving default section\n");
+ goto err;
+ }
+
+ cctx = SSL_CONF_CTX_new();
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_SERVER);
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_CERTIFICATE);
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_FILE);
+ SSL_CONF_CTX_set_ssl_ctx(cctx, ctx);
+ for (i = 0; i < sk_CONF_VALUE_num(sect); i++) {
+ int rv;
+ cnf = sk_CONF_VALUE_value(sect, i);
+ rv = SSL_CONF_cmd(cctx, cnf->name, cnf->value);
+ if (rv > 0)
+ continue;
+ if (rv != -2) {
+ fprintf(stderr, "Error processing %s = %s\n",
+ cnf->name, cnf->value);
+ ERR_print_errors_fp(stderr);
+ goto err;
+ }
+ if (strcmp(cnf->name, "Port") == 0) {
+ port = cnf->value;
+ } else {
+ fprintf(stderr, "Unknown configuration option %s\n", cnf->name);
+ goto err;
+ }
+ }
+
+ if (!SSL_CONF_CTX_finish(cctx)) {
+ fprintf(stderr, "Finish error\n");
+ ERR_print_errors_fp(stderr);
+ goto err;
+ }
+
+ /* Setup server side SSL bio */
+ ssl_bio = BIO_new_ssl(ctx, 0);
+
+ if ((in = BIO_new_accept(port)) == NULL)
+ goto err;
+
+ /*
+ * This means that when a new connection is accepted on 'in', The ssl_bio
+ * will be 'duplicated' and have the new socket BIO push into it.
+ * Basically it means the SSL BIO will be automatically setup
+ */
+ BIO_set_accept_bios(in, ssl_bio);
+
+ again:
+ /*
+ * The first call will setup the accept socket, and the second will get a
+ * socket. In this loop, the first actual accept will occur in the
+ * BIO_read() function.
+ */
+
+ if (BIO_do_accept(in) <= 0)
+ goto err;
+
+ for (;;) {
+ i = BIO_read(in, buf, 512);
+ if (i == 0) {
+ /*
+ * If we have finished, remove the underlying BIO stack so the
+ * next time we call any function for this BIO, it will attempt
+ * to do an accept
+ */
+ printf("Done\n");
+ tmp = BIO_pop(in);
+ BIO_free_all(tmp);
+ goto again;
+ }
+ if (i < 0) {
+ if (BIO_should_retry(in))
+ continue;
+ goto err;
+ }
+ fwrite(buf, 1, i, stdout);
+ fflush(stdout);
+ }
+
+ ret = EXIT_SUCCESS;
+ err:
+ if (ret != EXIT_SUCCESS)
+ ERR_print_errors_fp(stderr);
+ BIO_free(in);
+ return ret;
+}
diff --git a/demos/bio/server-ec.pem b/demos/bio/server-ec.pem
new file mode 100644
index 000000000000..ce8dccc9c2f8
--- /dev/null
+++ b/demos/bio/server-ec.pem
@@ -0,0 +1,17 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgsoKOpzTm/+VR5xOk
+kgwtljzMFYtX4NGdqCkxjitXvLmhRANCAASsxTC21z8mDYAX/RgLK5XGJNmPlHcY
+VMql6fSeS+9fTZnn1Ma12932/UBfFTITOuHviJYkQ5KxVSitmgMwnF3V
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIBvjCCAWSgAwIBAgIURVOfyUojPPQMfDEVhKY4DIdeLY0wCgYIKoZIzj0EAwIw
+NTEfMB0GA1UECwwWVGVzdCBFQ0RTQSBDZXJ0aWZpY2F0ZTESMBAGA1UEAwwJbG9j
+YWxob3N0MCAXDTE4MDYxNDEyNDYyOFoYDzIxMTgwNjE0MTI0NjI4WjA1MR8wHQYD
+VQQLDBZUZXN0IEVDRFNBIENlcnRpZmljYXRlMRIwEAYDVQQDDAlsb2NhbGhvc3Qw
+WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASsxTC21z8mDYAX/RgLK5XGJNmPlHcY
+VMql6fSeS+9fTZnn1Ma12932/UBfFTITOuHviJYkQ5KxVSitmgMwnF3Vo1AwTjAd
+BgNVHQ4EFgQUA0dWehTLHzBYhzfXiTIVUOXDusMwHwYDVR0jBBgwFoAUA0dWehTL
+HzBYhzfXiTIVUOXDusMwDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQDAgNIADBFAiEA
+8/l8RyihzqlEnLjcyIEaXTZm4HyNgZRQKhNACCW3jd4CIEbMJAf/D0eY38EeP2xY
+/BDy/BYXYmyDQeqiE+RDjG5X
+-----END CERTIFICATE-----
diff --git a/demos/bio/server.pem b/demos/bio/server.pem
new file mode 100644
index 000000000000..d4bc3937d018
--- /dev/null
+++ b/demos/bio/server.pem
@@ -0,0 +1,79 @@
+subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert
+issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
+-----BEGIN CERTIFICATE-----
+MIID0DCCArigAwIBAgIIcsOElVeHzfYwDQYJKoZIhvcNAQELBQAwcDELMAkGA1UE
+BhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBURVNU
+SU5HIFBVUlBPU0VTIE9OTFkxJTAjBgNVBAMMHE9wZW5TU0wgVGVzdCBJbnRlcm1l
+ZGlhdGUgQ0EwIBcNMTgwNjE0MTI0NjI4WhgPMjExODA2MTQxMjQ2MjhaMGQxCzAJ
+BgNVBAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1Ig
+VEVTVElORyBQVVJQT1NFUyBPTkxZMRkwFwYDVQQDDBBUZXN0IFNlcnZlciBDZXJ0
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0jIZ8IZ4dIzBc+ZfdmG5
+n8G3JzRX99QvIqv52s4hFVfdzoa+AciKJpo9zkegWPmfsAVNa4uVceg/ZQt6qJsu
+G/pxbQSZVnyjDQGtt7rgaDEbyUP0XJCnzyRdWSUjFS8yNZn4NkmZU01GlHtXdzWy
+dEa5PaiTIwW0HI+bjjOEhwJ1hFuFqzlKHVKHA6DBzNcl6ly0E/q2kyslbR+0hq7p
+NMqKvvuAxqgc//W8KvLDlKAt9D3t5zgh2+BrMPemrzjEaM97yHTogJo7+SKVDdUw
+YQ7Br3xfyki9u2bUYib1BMSvLezxNP0qf/iU91z4xyLmMvOXE6W0D1WHwya1CfE7
+vwIDAQABo3gwdjAdBgNVHQ4EFgQU3ulCbvgfxej6rHnddMpBidwnLIIwHwYDVR0j
+BBgwFoAUCgNEpWg658NdblSLsvg43EA1WwUwCQYDVR0TBAIwADATBgNVHSUEDDAK
+BggrBgEFBQcDATAUBgNVHREEDTALgglsb2NhbGhvc3QwDQYJKoZIhvcNAQELBQAD
+ggEBAENMzaqJtmWED++W4KXFVwNBkQ87errBXe4jVeYKpjNb0JGMm60MS5ty54fb
+r27SsR2EEk3EK2rcd85RR7TEKZCn9SvPykVtVf0tru7nOptQJgSbRvxIzyyq1UcE
+K+BXDgN/I0f1X6qbk4Stb6uJF7yyAUabacjwKqgVifOOeKF9WJhVA8qJKoVq7HLN
+k+uvm0geO1I4LKeULXVnQy8kwB6twcxN8iPyO45ZxbYIVeEKaYtbj/XPoq6KsLIb
+5fj+mK1r/LkWk352ksNhf73r3alF8TBcSLqnbMoy1/ZvzlI4ksp9IGWtIU+CzP/f
+VUjh00NOwDLd5jJbPoWW0oNp9m4=
+-----END CERTIFICATE-----
+subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
+issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Root CA
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAqegAwIBAgIILsaQqJAjK4IwDQYJKoZIhvcNAQELBQAwaDELMAkGA1UE
+BhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBURVNU
+SU5HIFBVUlBPU0VTIE9OTFkxHTAbBgNVBAMMFE9wZW5TU0wgVGVzdCBSb290IENB
+MCAXDTE4MDYxNDEyNDYyOFoYDzIxMTgwNjE0MTI0NjI4WjBwMQswCQYDVQQGEwJV
+SzEWMBQGA1UECgwNT3BlblNTTCBHcm91cDEiMCAGA1UECwwZRk9SIFRFU1RJTkcg
+UFVSUE9TRVMgT05MWTElMCMGA1UEAwwcT3BlblNTTCBUZXN0IEludGVybWVkaWF0
+ZSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANIpVng2wNFJp2kF
+oJ6Yji25wy1YufnS8NxA82fk5OHdhGWj1CWqnQNotEqEQzcOUszQYrNxd8tEvoWk
+Ik4JMBVoEcgBGedchftptTNulFWodWpi1yFaqA/Nz2BsVgcCJW4C+UWDT7VeHtGU
+7tYKKr35lxp6io/a4jUDQXvO2nJA9YlrxOktunMqtoZSYqUz35ZXsdkn58o8Fbqm
+dEpw6AqAr9aBgY5DSaGxbaX2lwNt9NvB+f9ucOqEnPP8AfTlPYc/ENwJ6u/H8RGw
+d1im71mu2lHjcws3aHkbluH860U3vlKWx6Ff1qdQcH98e2HwElqxCK00xya8leu4
+u64nljkCAwEAAaNjMGEwHQYDVR0OBBYEFAoDRKVoOufDXW5Ui7L4ONxANVsFMB8G
+A1UdIwQYMBaAFDZjTeLsQUG6KL9xuLhzXVdB4pkKMA8GA1UdEwEB/wQFMAMBAf8w
+DgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBgQDZQJLA90ewVaS3E3du
+gSjPkQ1xsHm8H1am+7zr5oZ81J+R8XYIZgMR+9ShVo38OradiYNqDLso+4iuVdxh
+hzoSoQELoDXCficzWKnlAtWvwDDoczyK+/p94g3VKx14n2+GvQzoZ4kwQQgaFH1w
+YI6w0oH9zwoklCxvihj8D069QrYyuTT8JGZ2m0FHqVJg6teuQKFahSgwYR2CUoIb
+6PrpSUQeCVCH8TPkzlRT6UgtM3ERt7+TlQ+zZ80dSf4YTAsDv9Z/CJXiF/5wZr6/
+lWuFjWmX2HkpEW6Wiv5KF8QP6Ft7Z+RYua7RMtELCYvqYbWDBs7fXWGBkZ5xhB09
+jCxz+F7zOeRbyzacfFq9DhxCWCRbIrdgGGE/Of2ujJtmK/2p4M6E5IsKNAI2SJBW
+iJXvIgQgR22ehPqy6er2Gog5LkWUwqB0kHZJJpbp1IW01IGTpD6YAJyVCEAlyMbo
+Kto9+wQFLT3Auv/W5h6OwxkNdfAyZBYy0ZSFk4EE8OdWWY4=
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEA0jIZ8IZ4dIzBc+ZfdmG5n8G3JzRX99QvIqv52s4hFVfdzoa+
+AciKJpo9zkegWPmfsAVNa4uVceg/ZQt6qJsuG/pxbQSZVnyjDQGtt7rgaDEbyUP0
+XJCnzyRdWSUjFS8yNZn4NkmZU01GlHtXdzWydEa5PaiTIwW0HI+bjjOEhwJ1hFuF
+qzlKHVKHA6DBzNcl6ly0E/q2kyslbR+0hq7pNMqKvvuAxqgc//W8KvLDlKAt9D3t
+5zgh2+BrMPemrzjEaM97yHTogJo7+SKVDdUwYQ7Br3xfyki9u2bUYib1BMSvLezx
+NP0qf/iU91z4xyLmMvOXE6W0D1WHwya1CfE7vwIDAQABAoIBAQC2HAo1RYvfDoQc
+sh9LJWf5bZANO2Brqz4bP/x9AdHP+AyH/l1oliJ7R2785TmbXMppam6lGo4j3h/u
+n39pzOip/NWAqldfgySRBD9Jy3LZUpLMUT/JYtrAsLTfozk+BWHu5rMR9boNXgok
+Yqho8/DkpNGhBghUc4CUricLkL7laD3ziAHpx8yALL3tnLGOpgT9hNrA8Dm3yfUS
+JEfiG12ILXvq1IP+vUNuaLpTLJZuqUmLpK8v+CBYgKxfd+TDnEjul4PqhhIIFK3A
+xEZYQR2D/AXUwng9hP9uCbVm5lOY6vRbi9Fpbt+KRv+m25s1AnuhJFBOsL30h/Tb
+iCKWm/nhAoGBAO0bFqMvZHjaT2KiwOwG/Ze9NsjynFPVltiuCqNj8HE5wM6imC5J
+SdB+jMkgN6ERXALWrtr8Uf2pqzfeMsi6pekOOVTWLe/8c4bAZRxaCZn/BlZRysZI
+vB9Gb7m7Oymw5iDSqrYywgOiUu+oIiCrmPOealhmn7zmHzHaETvdL9zDAoGBAOLy
+DVT1csoexnuHVIWqnp7FK7lv6eOGZSdXpfJ3XYjmKJLK2hpVZe+J/mFOL1wsKSt4
+0k/V0dnkHR7V4Pa4ECiCthkWMWrBVIHe7+ZnZ0ocKQSC+EEecavOiZ57S/qnUlT6
+NtQP4cSy4DHzzFZdTZnn+2oymapPZpb2mvSN/GVVAoGADrIlHwwq8Aqn7Pclefuc
+8DC8GoxfABs29EslQadKGdp4htYxFH1aY9/UHgsvJ36J82sW/1+wPUas5BOTljlr
+WxyUlRuJUVyWVH3MRouWGMNjwynipZOQhWe6OQrPye+688Ha7twKhmsjNNN4+glo
+u4DQGpaRxAWHXXGkq88zzj0CgYEAsICEceD7R8srnwMfb13FQ8IhQXWSuAvcO/7k
+53CCZGhsgc4WVoi4YNY360G9f7gwxMiQ+NpY/Vd2dnbtIbUBjCAss9IY2OhHa0IR
+3mXpZTAFjqa1oR+mVHKrgYBvFSBw3fpEDiXT9wEPcIomD709D0fmty9nZ5edOCfP
+WAfdlokCgYEAqXuMuAg3NMMgEv+eBfsf43v3hRwBqPYanE26wcO3GoT/S8BpB6wy
+vBoPZOlO5ZfsD2jaTec60GLay+MofxC7qNXIjzHOw50ry4bqHqqoQbn2cONE1k+0
+ov7H2keTcG9FEGgL7dRUq3pRUo/W12WmRuDN17IEgkzAeisJnoiPtaQ=
+-----END RSA PRIVATE KEY-----
diff --git a/demos/bio/shared.opt b/demos/bio/shared.opt
new file mode 100644
index 000000000000..4141b93a5398
--- /dev/null
+++ b/demos/bio/shared.opt
@@ -0,0 +1,2 @@
+OSSL$LIBSSL_SHR/SHARE
+OSSL$LIBCRYPTO_SHR/SHARE
diff --git a/demos/bio/static.opt b/demos/bio/static.opt
new file mode 100644
index 000000000000..9ca1588f77e1
--- /dev/null
+++ b/demos/bio/static.opt
@@ -0,0 +1,2 @@
+OSSL$LIBSSL/LIB
+OSSL$LIBCRYPTO/LIB
diff --git a/demos/certs/README.txt b/demos/certs/README.txt
new file mode 100644
index 000000000000..88cf56b1f8d0
--- /dev/null
+++ b/demos/certs/README.txt
@@ -0,0 +1,18 @@
+There is often a need to generate test certificates automatically using
+a script. This is often a cause for confusion which can result in incorrect
+CA certificates, obsolete V1 certificates or duplicate serial numbers.
+The range of command line options can be daunting for a beginner.
+
+The mkcerts.sh script is an example of how to generate certificates
+automatically using scripts. Example creates a root CA, an intermediate CA
+signed by the root and several certificates signed by the intermediate CA.
+
+The script then creates an empty index.txt file and adds entries for the
+certificates and generates a CRL. Then one certificate is revoked and a
+second CRL generated.
+
+The script ocsprun.sh runs the test responder on port 8888 covering the
+client certificates.
+
+The script ocspquery.sh queries the status of the certificates using the
+test responder.
diff --git a/demos/certs/apps/apps.cnf b/demos/certs/apps/apps.cnf
new file mode 100644
index 000000000000..72ed70de7582
--- /dev/null
+++ b/demos/certs/apps/apps.cnf
@@ -0,0 +1,66 @@
+#
+# OpenSSL configuration file to create apps directory certificates
+#
+
+# This definition stops the following lines choking if HOME or CN
+# is undefined.
+HOME = .
+CN = "Not Defined"
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+
+####################################################################
+[ req ]
+default_bits = 2048
+default_keyfile = privkey.pem
+# Don't prompt for fields: use those in section directly
+prompt = no
+distinguished_name = req_distinguished_name
+x509_extensions = v3_ca # The extensions to add to the self signed cert
+string_mask = utf8only
+
+# req_extensions = v3_req # The extensions to add to a certificate request
+
+[ req_distinguished_name ]
+countryName = UK
+
+organizationName = OpenSSL Group
+organizationalUnitName = FOR TESTING PURPOSES ONLY
+# Take CN from environment so it can come from a script.
+commonName = $ENV::CN
+
+[ usr_cert ]
+
+# These extensions are added when 'ca' signs a request for an end entity
+# certificate
+
+basicConstraints=critical, CA:FALSE
+keyUsage=critical, nonRepudiation, digitalSignature, keyEncipherment
+
+[ ec_cert ]
+
+# These extensions are added when 'ca' signs a request for an end entity
+# certificate
+
+basicConstraints=critical, CA:FALSE
+keyUsage=critical, nonRepudiation, digitalSignature, keyAgreement
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid
+
+[ v3_ca ]
+
+
+# Extensions for a typical CA
+
+# PKIX recommendation.
+
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always
+basicConstraints = critical,CA:true
+keyUsage = critical, cRLSign, keyCertSign
+
+
diff --git a/demos/certs/apps/ckey.pem b/demos/certs/apps/ckey.pem
new file mode 100644
index 000000000000..8e9054d2980d
--- /dev/null
+++ b/demos/certs/apps/ckey.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEAtK2p2x0S3C1ajftAc3GaWPsji6scw1k9Sw/XltbLQuDc11/f
+wwrUiFcje2CB3Ri6yD6+uCA3V12jEc4GdqzirJZhwgIhaTv42vfYBgiUcR9McEGr
+agFC3yVR3lIbOzhBjmXNp1on46irxnzU4pT+w58IuvYqUBavaEtfRZocFR5NsIOy
+mRhyNag8htOFK3wmTEYrb0vflFYT6SD47ogYtsd/xWSKS+YFyb7xSusR2Ot6Ktmr
+MswQE57QYJz+KiRVlnL0cduMBdT52Wm8blaC9mz50PyrzjQ68NyHapCoWDU7pe4x
+HLtzpXGSDMPuw4miiSwMym/2wReYJv6cFugLPQIDAQABAoIBAAZOyc9MhIwLSU4L
+p4RgQvM4UVVe8/Id+3XTZ8NsXExJbWxXfIhiqGjaIfL8u4vsgRjcl+v1s/jo2/iT
+KMab4o4D8gXD7UavQVDjtjb/ta79WL3SjRl2Uc9YjjMkyq6WmDNQeo2NKDdafCTB
+1uzSJtLNipB8Z53ELPuHJhxX9QMHrMnuha49riQgXZ7buP9iQrHJFhImBjSzbxJx
+L+TI6rkyLSf9Wi0Pd3L27Ob3QWNfNRYNSeTE+08eSRChkur5W0RuXAcuAICdQlCl
+LBvWO/LmmvbzCqiDcgy/TliSb6CGGwgiNG7LJZmlkYNj8laGwalNlYZs3UrVv6NO
+Br2loAECgYEA2kvCvPGj0Dg/6g7WhXDvAkEbcaL1tSeCxBbNH+6HS2UWMWvyTtCn
+/bbD519QIdkvayy1QjEf32GV/UjUVmlULMLBcDy0DGjtL3+XpIhLKWDNxN1v1/ai
+1oz23ZJCOgnk6K4qtFtlRS1XtynjA+rBetvYvLP9SKeFrnpzCgaA2r0CgYEA0+KX
+1ACXDTNH5ySX3kMjSS9xdINf+OOw4CvPHFwbtc9aqk2HePlEsBTz5I/W3rKwXva3
+NqZ/bRqVVeZB/hHKFywgdUQk2Uc5z/S7Lw70/w1HubNTXGU06Ngb6zOFAo/o/TwZ
+zTP1BMIKSOB6PAZPS3l+aLO4FRIRotfFhgRHOoECgYEAmiZbqt8cJaJDB/5YYDzC
+mp3tSk6gIb936Q6M5VqkMYp9pIKsxhk0N8aDCnTU+kIK6SzWBpr3/d9Ecmqmfyq7
+5SvWO3KyVf0WWK9KH0abhOm2BKm2HBQvI0DB5u8sUx2/hsvOnjPYDISbZ11t0MtK
+u35Zy89yMYcSsIYJjG/ROCUCgYEAgI2P9G5PNxEP5OtMwOsW84Y3Xat/hPAQFlI+
+HES+AzbFGWJkeT8zL2nm95tVkFP1sggZ7Kxjz3w7cpx7GX0NkbWSE9O+T51pNASV
+tN1sQ3p5M+/a+cnlqgfEGJVvc7iAcXQPa3LEi5h2yPR49QYXAgG6cifn3dDSpmwn
+SUI7PQECgYEApGCIIpSRPLAEHTGmP87RBL1smurhwmy2s/pghkvUkWehtxg0sGHh
+kuaqDWcskogv+QC0sVdytiLSz8G0DwcEcsHK1Fkyb8A+ayiw6jWJDo2m9+IF4Fww
+1Te6jFPYDESnbhq7+TLGgHGhtwcu5cnb4vSuYXGXKupZGzoLOBbv1Zw=
+-----END RSA PRIVATE KEY-----
diff --git a/demos/certs/apps/intkey.pem b/demos/certs/apps/intkey.pem
new file mode 100644
index 000000000000..d586cb7c6083
--- /dev/null
+++ b/demos/certs/apps/intkey.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAsErw75CmLYD6pkrGW/YhAl/K8L5wJYxDjqu2FghxjD8K308W
+3EHq4uBxEwR1OHXaM1+6ZZw7/r2I37VLIdurBEAIEUdbzx0so74FPawgz5EW2CTq
+oJnK8F71/vo5Kj1VPwW46CxwxUR3cfvJGNXND2ip0TcyTSPLROXOyQakcVfIGJmd
+Sa1wHKi+c2gMA4emADudZUOYLrg80gr2ldePm07ynbVsKKzCcStw8MdmoW9Qt3fL
+nPJn2TFUUBNWj+4kvL+88edWCVQXKNdsysD/CDrH4W/hjyPDStVsM6XpiNU0+L2Z
+Y6fcj3OP8d0goOx45xotMn9m8hNkCGsrVXx9IwIDAQABAoIBACg3wIV2o2KIJSZg
+sqXyHY+0GNEZMO5v9E2NAMo//N941lshaN6wrww5FbK39qH9yNylfxmFLe6sgJhA
+fLZprbcXgH+onto+Fpv4UqvCI+4WdHa03U3sJ+70SvxzSy1Gtrbc8FUPJl7qgrFf
+Nn5S8CgOwYb4J6KPguTh5G3Z9RPiCKObwOwEM34hrZUlgPS88wmzu9H6L2GM8A1v
+YBtEr0msBnlJBJOgStyUEfHW2KspNQ+VllQ6c0cedgFXUpl9EoKTLxP+WXwFI1sx
+jFCFzSrMqPcPz1PxU6bXoZE0WH6r+3c8WAW4xR/HVu04BrBDu0CGwn6zAXDy6wCU
+pWogDlkCgYEA4o+nIu2CTzqUlgc22pj+hjenfS5lnCtJfAdrXOJHmnuL+J9h8Nzz
+9kkL+/Y0Xg9bOM6xXPm+81UNpDvOLbUahSSQsfB+LNVEkthJIL4XIk083LsHjFaJ
+9SiCFRbf2OgWrEhe/c1drySwz9u/0f4Q7B6VGqxMnTDjzS5JacZ1pE8CgYEAxzMn
+/n/Dpdn+c4rf14BRNKCv1qBXngPNylKJCmiRpKRJAn+B+Msdwtggk/1Ihju21wSo
+IGy0Gw7WQd1Iq7V85cB2G5PAFY6ybpSV6G3QrzmzuvjHmKvXgUAuuaN+7Pp1YkMY
+rLVjUOcdP5JbXG6XnaCkHYJR8uapPwWPkDt+oO0CgYBI4yZGGlr92j7LNW70TJw1
+2dnMcAzIfTSa7lgf/bxDetPBHKWJs8vYxA9S9BZM3Gvgjr6IxuAjsI0+9O6TzdvG
+UckrNc+h5Mq241ZDbmRK6MZXzOPUxlKDyJBw8Hb7dU82BeJpjJRDMG6hsHS5vh77
+l6sodZ4ARCZFcEq1+N8ICQKBgDeBHJLAXO6YmFrvhkGQ4o+senJuSRuhabUHXGIH
+ExXyJNnKV5fQWOGSwTkbKRsmBmNRS9uFDoY/kxnVI8ucjUmjYAV9HNek5DkFs+OI
+vc4lYNwnN85li23bSWm2kcZMX2ra0URGYn8HdtHg4Q4XTq3ANhp21oi9FsmVrhP9
+T+JdAoGBAK2ebwZ7CXFavDFo4mzLKkGitBjrSi/udFhZECXZWEbNzWlVc3Y3q0cU
+drDqUtbVm+/Xb5CMU044Gqq6SKdObAb3JElKmFylFL9fp2rfL/foUr2sdb87Vqdp
+2j5jZyvt1DKnNaJ7JaFbUdRxlvHQRiqKlZpafN/SMQ0jCs1bSgCg
+-----END RSA PRIVATE KEY-----
diff --git a/demos/certs/apps/mkacerts.sh b/demos/certs/apps/mkacerts.sh
new file mode 100644
index 000000000000..70984969f44b
--- /dev/null
+++ b/demos/certs/apps/mkacerts.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# Recreate the demo certificates in the apps directory.
+
+OPENSSL=openssl
+
+# Root CA: create certificate directly
+CN="OpenSSL Test Root CA" $OPENSSL req -config apps.cnf -x509 -nodes \
+ -keyout root.pem -out root.pem -key rootkey.pem -new -days 3650
+# Intermediate CA: request first
+CN="OpenSSL Test Intermediate CA" $OPENSSL req -config apps.cnf -nodes \
+ -key intkey.pem -out intreq.pem -new
+# Sign request: CA extensions
+$OPENSSL x509 -req -in intreq.pem -CA root.pem -CAkey rootkey.pem -days 3630 \
+ -extfile apps.cnf -extensions v3_ca -CAcreateserial -out intca.pem
+# Client certificate: request first
+CN="Test Client Cert" $OPENSSL req -config apps.cnf -nodes \
+ -key ckey.pem -out creq.pem -new
+# Sign using intermediate CA
+$OPENSSL x509 -req -in creq.pem -CA intca.pem -CAkey intkey.pem -days 3600 \
+ -extfile apps.cnf -extensions usr_cert -CAcreateserial | \
+ $OPENSSL x509 -nameopt oneline -subject -issuer >client.pem
+# Server certificate: request first
+CN="Test Server Cert" $OPENSSL req -config apps.cnf -nodes \
+ -key skey.pem -out sreq.pem -new
+# Sign using intermediate CA
+$OPENSSL x509 -req -in sreq.pem -CA intca.pem -CAkey intkey.pem -days 3600 \
+ -extfile apps.cnf -extensions usr_cert -CAcreateserial | \
+ $OPENSSL x509 -nameopt oneline -subject -issuer >server.pem
+# Server certificate #2: request first
+CN="Test Server Cert #2" $OPENSSL req -config apps.cnf -nodes \
+ -key skey2.pem -out sreq2.pem -new
+# Sign using intermediate CA
+$OPENSSL x509 -req -in sreq2.pem -CA intca.pem -CAkey intkey.pem -days 3600 \
+ -extfile apps.cnf -extensions usr_cert -CAcreateserial | \
+ $OPENSSL x509 -nameopt oneline -subject -issuer >server2.pem
+
+# Append keys to file.
+
+cat skey.pem >>server.pem
+cat skey2.pem >>server2.pem
+cat ckey.pem >>client.pem
+
+$OPENSSL verify -CAfile root.pem -untrusted intca.pem \
+ server2.pem server.pem client.pem
diff --git a/demos/certs/apps/mkxcerts.sh b/demos/certs/apps/mkxcerts.sh
new file mode 100644
index 000000000000..ebe1920432be
--- /dev/null
+++ b/demos/certs/apps/mkxcerts.sh
@@ -0,0 +1,29 @@
+
+# Create certificates using various algorithms to test multi-certificate
+# functionality.
+
+OPENSSL=../../../apps/openssl
+CN="OpenSSL Test RSA SHA-1 cert" $OPENSSL req \
+ -config apps.cnf -extensions usr_cert -x509 -nodes \
+ -keyout tsha1.pem -out tsha1.pem -new -days 3650 -sha1
+CN="OpenSSL Test RSA SHA-256 cert" $OPENSSL req \
+ -config apps.cnf -extensions usr_cert -x509 -nodes \
+ -keyout tsha256.pem -out tsha256.pem -new -days 3650 -sha256
+CN="OpenSSL Test RSA SHA-512 cert" $OPENSSL req \
+ -config apps.cnf -extensions usr_cert -x509 -nodes \
+ -keyout tsha512.pem -out tsha512.pem -new -days 3650 -sha512
+
+# Create EC parameters
+
+$OPENSSL ecparam -name P-256 -out ecp256.pem
+$OPENSSL ecparam -name P-384 -out ecp384.pem
+
+CN="OpenSSL Test P-256 SHA-256 cert" $OPENSSL req \
+ -config apps.cnf -extensions ec_cert -x509 -nodes \
+ -nodes -keyout tecp256.pem -out tecp256.pem -newkey ec:ecp256.pem \
+ -days 3650 -sha256
+
+CN="OpenSSL Test P-384 SHA-384 cert" $OPENSSL req \
+ -config apps.cnf -extensions ec_cert -x509 -nodes \
+ -nodes -keyout tecp384.pem -out tecp384.pem -newkey ec:ecp384.pem \
+ -days 3650 -sha384
diff --git a/demos/certs/apps/rootkey.pem b/demos/certs/apps/rootkey.pem
new file mode 100644
index 000000000000..2600aab8e1b2
--- /dev/null
+++ b/demos/certs/apps/rootkey.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpgIBAAKCAQEA0xpquKAoY6trkxz8uuE6RyYfMOy+Rgvt19pqG3x8sEpFNjDN
+IG873HniShNaOrseRtrGRgCDcecNOQ0LLOQYo10zz0er8+0YgUWVx5Ag5q3cqN3T
+kjDc+0sRZMONPoUwD0ySOT9dumbJypEjA0q2AgKgWwaO4ilzg/fWTEruLeuL4meX
+K9WZFmMnGuF4kHSocZeKWs5UM86WIOf/+NdtzLNd6a5HwqAB5Azggiz2Ngck6Aet
+Mi0inBr3A1MSn0oIaQ7rGvbQ2QrIOnpdHJ36GadQHuvvtZOm28o8UVONMMWoS1yJ
+/1TaRWQJ+faZJE7yegJtUf75+5HwsxaUP32C3wIDAQABAoIBAQCEybEnwVamm0Vn
+nGw9AT+vUYN9Ou3VEdviUzk7YOrt2Un/9GKTbGSzItf80H+JQfqhhywBDIGiPDxN
+Dq9g5Xm6CP51/BdlsFYhuqukhDyt3d9XOXHEG4hlaarfP0KxeQXqGbhA2mMSxWVZ
+TkI/59blHNHRcCagjIJlGJhsFRYNO1/ApfA5zN7fWCFvH1XWZhuvsPDgUXKm4BS0
+p3ol67MVJHRfYcLb/txBO5rBhSXinK0jEBiljRcE0rWzRycSedmDgG3SNV17wvA0
+UWgMNpPcJ1b7Satr0nM7A8+siV8FRcfvPqCuGPKCYTrNn71hGJEhKXKwlURj9+95
+O5yzRxjBAoGBAPtTRYN40/piRB0XLpi+zNh+4Ba4TGfXSymbaozgC/pI5wfgGXrz
+IpT9ujjV42r8TABHvXa6uiGm0cbxcUgq2n6Y8rf6iHxmn23ezCEBUs7rd6jtt11b
+m58T8o0XWyOgAovaH0UgzMtrlsZYR2fli5254oRkTWwaUTuO38z6CVddAoGBANcH
+nvdu3RniIYStsr5/deu7l81ZQ9rSiR1m3H6Wy8ryMIfkYfa0WqXhwNHrLrhvhLIQ
+7mGnJ+jAkJyVQULE6UdbmVW8tC58Dfrgz/1s7RMeUYPnOmRpx79c/LqZ2IunfFWx
+IvBvFu7vidEHA+1tU2N+oXNsU+B9XpfsJ+/d2QtrAoGBAJTuP58tFtClMp/agO5b
+AqC4bqqIBB704cGCK53XlsF2OhHcprzJH5ES2iub8+wOHit8V7Xn6SzP4jf2E58k
+Zd3nXM3RVNgDKC6/fE+CrUOZHYupcqOMCag29eDOGl/+DgQ5+ZXJXhKdaveWkJns
+2NNat/SkS4zn+4NDozOgZ7CxAoGBAIuXjfJRTUXNUDci0APtGO9U1AJiLbOzs4Gb
+0g539IqmWS0O7S3L/YDsolFkXOsssjcq2KYabsUhpX+RQVGIJWzGoS9QlqQKssSo
+Bz4c5Xbg2shHZtfi9+JaClNVJofazdOPcAAoDfpFFPHWnQ0YSOcxQLx+maEFok/7
+5h1IputLAoGBAKGBWDPwskgRRfCAIFpCJLOu/9D30M/akMtO0kJYQpBjOaKuigUy
+ic7pthFVse/pMUljXHAd1hs2CTjMW1ukEusU3x1Ei6wvnHHqn0Hs+6D5NQFQkcMn
+7rejJ+bpJPRAn40AAV5hGBYI12XycB8ZgyPC4hTUK6unGVK06DC4qvdv
+-----END RSA PRIVATE KEY-----
diff --git a/demos/certs/apps/skey.pem b/demos/certs/apps/skey.pem
new file mode 100644
index 000000000000..dbd403d1943c
--- /dev/null
+++ b/demos/certs/apps/skey.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA84TzkjbcskbKZnrlKcXzSSgi07n+4N7kOM7uIhzpkTuU0HIv
+h4VZS2axxfV6hV3CD9MuKVg2zEhroqK1Js5n4ke230nSP/qiELfCl0R+hzRtbfKL
+tFUr1iHeU0uQ6v3q+Tg1K/Tmmg72uxKrhyHDL7z0BriPjhAHJ5XlQsvR1RCMkqzu
+D9wjSInJxpMMIgLndOclAKv4D1wQtYU7ZpTw+01XBlUhIiXb86qpYL9NqnnRq5JI
+uhmOEuxo2ca63+xaHNhD/udSyc8C0Md/yX6wlONTRFgLLv0pdLUGm1xEjfsydaQ6
+qGd7hzIKUI3hohNKJa/mHLElv7SZolPTogK/EQIDAQABAoIBAADq9FwNtuE5IRQn
+zGtO4q7Y5uCzZ8GDNYr9RKp+P2cbuWDbvVAecYq2NV9QoIiWJOAYZKklOvekIju3
+r0UZLA0PRiIrTg6NrESx3JrjWDK8QNlUO7CPTZ39/K+FrmMkV9lem9yxjJjyC34D
+AQB+YRTx+l14HppjdxNwHjAVQpIx/uO2F5xAMuk32+3K+pq9CZUtrofe1q4Agj9R
+5s8mSy9pbRo9kW9wl5xdEotz1LivFOEiqPUJTUq5J5PeMKao3vdK726XI4Z455Nm
+W2/MA0YV0ug2FYinHcZdvKM6dimH8GLfa3X8xKRfzjGjTiMSwsdjgMa4awY3tEHH
+674jhAECgYEA/zqMrc0zsbNk83sjgaYIug5kzEpN4ic020rSZsmQxSCerJTgNhmg
+utKSCt0Re09Jt3LqG48msahX8ycqDsHNvlEGPQSbMu9IYeO3Wr3fAm75GEtFWePY
+BhM73I7gkRt4s8bUiUepMG/wY45c5tRF23xi8foReHFFe9MDzh8fJFECgYEA9EFX
+4qAik1pOJGNei9BMwmx0I0gfVEIgu0tzeVqT45vcxbxr7RkTEaDoAG6PlbWP6D9a
+WQNLp4gsgRM90ZXOJ4up5DsAWDluvaF4/omabMA+MJJ5kGZ0gCj5rbZbKqUws7x8
+bp+6iBfUPJUbcqNqFmi/08Yt7vrDnMnyMw2A/sECgYEAiiuRMxnuzVm34hQcsbhH
+6ymVqf7j0PW2qK0F4H1ocT9qhzWFd+RB3kHWrCjnqODQoI6GbGr/4JepHUpre1ex
+4UEN5oSS3G0ru0rC3U4C59dZ5KwDHFm7ffZ1pr52ljfQDUsrjjIMRtuiwNK2OoRa
+WSsqiaL+SDzSB+nBmpnAizECgYBdt/y6rerWUx4MhDwwtTnel7JwHyo2MDFS6/5g
+n8qC2Lj6/fMDRE22w+CA2esp7EJNQJGv+b27iFpbJEDh+/Lf5YzIT4MwVskQ5bYB
+JFcmRxUVmf4e09D7o705U/DjCgMH09iCsbLmqQ38ONIRSHZaJtMDtNTHD1yi+jF+
+OT43gQKBgQC/2OHZoko6iRlNOAQ/tMVFNq7fL81GivoQ9F1U0Qr+DH3ZfaH8eIkX
+xT0ToMPJUzWAn8pZv0snA0um6SIgvkCuxO84OkANCVbttzXImIsL7pFzfcwV/ERK
+UM6j0ZuSMFOCr/lGPAoOQU0fskidGEHi1/kW+suSr28TqsyYZpwBDQ==
+-----END RSA PRIVATE KEY-----
diff --git a/demos/certs/apps/skey2.pem b/demos/certs/apps/skey2.pem
new file mode 100644
index 000000000000..78538228520d
--- /dev/null
+++ b/demos/certs/apps/skey2.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA63Yu4/cnLRvi+BIwcoIz5hKmcziREG2tujKEBs4JVO3uV3+f
+UW/4YFULigKImXu/0fKyuMyeFu4l3V8NC6gachvAeWhiniN9sPgPU3AQKaF1y9gq
+2EBEI2cFCKS5WASItjZCY951ZKuXYJdYDgC4kPlvI4N5M4ORHPa4pqfa/dzfMLEi
+92sLGn7q5mArzn+5Xh2jD9Vif8w0RlDRxv1rQ413PGVBtfuhF1PSXNhbPtjpn+33
+DdJdNACv8D4PDmjUtKyshqvSXSE/RURldW13v68efBWhOQiLXcAkmISbxfzveS1k
+KMSV8nuWwhS5rw0xMlavRTEgqbX7Jm14xGRrFwIDAQABAoIBAHLsTPihIfLnYIE5
+x4GsQQ5zXeBw5ITDM37ktwHnQDC+rIzyUl1aLD1AZRBoKinXd4lOTqLZ4/NHKx4A
+DYr58mZtWyUmqLOMmQVuHXTZBlp7XtYuXMMNovQwjQlp9LicBeoBU6gQ5PVMtubD
+F4xGF89Sn0cTHW3iMkqTtQ5KcR1j57OcJO0FEb1vPvk2MXI5ZyAatUYE7YacbEzd
+rg02uIwx3FqNSkuSI79uz4hMdV5TPtuhxx9nTwj9aLUhXFeZ0mn2PVgVzEnnMoJb
++znlsZDgzDlJqdaD744YGWh8Z3OEssB35KfzFcdOeO6yH8lmv2Zfznk7pNPT7LTb
+Lae9VgkCgYEA92p1qnAB3NtJtNcaW53i0S5WJgS1hxWKvUDx3lTB9s8X9fHpqL1a
+E94fDfWzp/hax6FefUKIvBOukPLQ6bYjTMiFoOHzVirghAIuIUoMI5VtLhwD1hKs
+Lr7l/dptMgKb1nZHyXoKHRBthsy3K4+udsPi8TzMvYElgEqyQIe/Rk0CgYEA86GL
+8HC6zLszzKERDPBxrboRmoFvVUCTQDhsfj1M8aR3nQ8V5LkdIJc7Wqm/Ggfk9QRf
+rJ8M2WUMlU5CNnCn/KCrKzCNZIReze3fV+HnKdbcXGLvgbHPrhnz8yYehUFG+RGq
+bVyDWRU94T38izy2s5qMYrMJWZEYyXncSPbfcPMCgYAtaXfxcZ+V5xYPQFARMtiX
+5nZfggvDoJuXgx0h3tK/N2HBfcaSdzbaYLG4gTmZggc/jwnl2dl5E++9oSPhUdIG
+3ONSFUbxsOsGr9PBvnKd8WZZyUCXAVRjPBzAzF+whzQNWCZy/5htnz9LN7YDI9s0
+5113Q96cheDZPFydZY0hHQKBgQDVbEhNukM5xCiNcu+f2SaMnLp9EjQ4h5g3IvaP
+5B16daw/Dw8LzcohWboqIxeAsze0GD/D1ZUJAEd0qBjC3g+a9BjefervCjKOzXng
+38mEUm+6EwVjJSQcjSmycEs+Sr/kwr/8i5WYvU32+jk4tFgMoC+o6tQe/Uesf68k
+z/dPVwKBgGbF7Vv1/3SmhlOy+zYyvJ0CrWtKxH9QP6tLIEgEpd8x7YTSuCH94yok
+kToMXYA3sWNPt22GbRDZ+rcp4c7HkDx6I6vpdP9aQEwJTp0EPy0sgWr2XwYmreIQ
+NFmkk8Itn9EY2R9VBaP7GLv5kvwxDdLAnmwGmzVtbmaVdxCaBwUk
+-----END RSA PRIVATE KEY-----
diff --git a/demos/certs/ca.cnf b/demos/certs/ca.cnf
new file mode 100644
index 000000000000..e0c73c4eefee
--- /dev/null
+++ b/demos/certs/ca.cnf
@@ -0,0 +1,82 @@
+#
+# OpenSSL example configuration file for automated certificate creation.
+#
+
+# This definition stops the following lines choking if HOME or CN
+# is undefined.
+HOME = .
+CN = "Not Defined"
+default_ca = ca
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+####################################################################
+[ req ]
+default_bits = 1024
+default_keyfile = privkey.pem
+# Don't prompt for fields: use those in section directly
+prompt = no
+distinguished_name = req_distinguished_name
+x509_extensions = v3_ca # The extensions to add to the self signed cert
+string_mask = utf8only
+
+# req_extensions = v3_req # The extensions to add to a certificate request
+
+[ req_distinguished_name ]
+countryName = UK
+
+organizationName = OpenSSL Group
+# Take CN from environment so it can come from a script.
+commonName = $ENV::CN
+
+[ usr_cert ]
+
+# These extensions are added when 'ca' signs a request for an end entity
+# certificate
+
+basicConstraints=critical, CA:FALSE
+keyUsage=critical, nonRepudiation, digitalSignature, keyEncipherment
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid
+# OCSP responder certificate
+[ ocsp_cert ]
+
+basicConstraints=critical, CA:FALSE
+keyUsage=critical, nonRepudiation, digitalSignature, keyEncipherment
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid
+extendedKeyUsage=OCSPSigning
+
+[ dh_cert ]
+
+# These extensions are added when 'ca' signs a request for an end entity
+# DH certificate
+
+basicConstraints=critical, CA:FALSE
+keyUsage=critical, keyAgreement
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid
+
+[ v3_ca ]
+
+
+# Extensions for a typical CA
+
+# PKIX recommendation.
+
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always
+basicConstraints = critical,CA:true
+keyUsage = critical, cRLSign, keyCertSign
+
+# Minimal CA entry to allow generation of CRLs.
+[ca]
+database=index.txt
+crlnumber=crlnum.txt
diff --git a/demos/certs/mkcerts.sh b/demos/certs/mkcerts.sh
new file mode 100644
index 000000000000..2d14a95989e8
--- /dev/null
+++ b/demos/certs/mkcerts.sh
@@ -0,0 +1,96 @@
+#!/bin/sh
+
+OPENSSL=../../apps/openssl
+OPENSSL_CONF=../../apps/openssl.cnf
+export OPENSSL_CONF
+
+# Root CA: create certificate directly
+CN="Test Root CA" $OPENSSL req -config ca.cnf -x509 -nodes \
+ -keyout root.pem -out root.pem -newkey rsa:2048 -days 3650
+# Intermediate CA: request first
+CN="Test Intermediate CA" $OPENSSL req -config ca.cnf -nodes \
+ -keyout intkey.pem -out intreq.pem -newkey rsa:2048
+# Sign request: CA extensions
+$OPENSSL x509 -req -in intreq.pem -CA root.pem -days 3600 \
+ -extfile ca.cnf -extensions v3_ca -CAcreateserial -out intca.pem
+
+# Server certificate: create request first
+CN="Test Server Cert" $OPENSSL req -config ca.cnf -nodes \
+ -keyout skey.pem -out req.pem -newkey rsa:1024
+# Sign request: end entity extensions
+$OPENSSL x509 -req -in req.pem -CA intca.pem -CAkey intkey.pem -days 3600 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial -out server.pem
+
+# Client certificate: request first
+CN="Test Client Cert" $OPENSSL req -config ca.cnf -nodes \
+ -keyout ckey.pem -out creq.pem -newkey rsa:1024
+# Sign using intermediate CA
+$OPENSSL x509 -req -in creq.pem -CA intca.pem -CAkey intkey.pem -days 3600 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial -out client.pem
+
+# Revoked certificate: request first
+CN="Test Revoked Cert" $OPENSSL req -config ca.cnf -nodes \
+ -keyout revkey.pem -out rreq.pem -newkey rsa:1024
+# Sign using intermediate CA
+$OPENSSL x509 -req -in rreq.pem -CA intca.pem -CAkey intkey.pem -days 3600 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial -out rev.pem
+
+# OCSP responder certificate: request first
+CN="Test OCSP Responder Cert" $OPENSSL req -config ca.cnf -nodes \
+ -keyout respkey.pem -out respreq.pem -newkey rsa:1024
+# Sign using intermediate CA and responder extensions
+$OPENSSL x509 -req -in respreq.pem -CA intca.pem -CAkey intkey.pem -days 3600 \
+ -extfile ca.cnf -extensions ocsp_cert -CAcreateserial -out resp.pem
+
+# Example creating a PKCS#3 DH certificate.
+
+# First DH parameters
+
+[ -f dhp.pem ] || $OPENSSL genpkey -genparam -algorithm DH -pkeyopt dh_paramgen_prime_len:1024 -out dhp.pem
+
+# Now a DH private key
+$OPENSSL genpkey -paramfile dhp.pem -out dhskey.pem
+# Create DH public key file
+$OPENSSL pkey -in dhskey.pem -pubout -out dhspub.pem
+# Certificate request, key just reuses old one as it is ignored when the
+# request is signed.
+CN="Test Server DH Cert" $OPENSSL req -config ca.cnf -new \
+ -key skey.pem -out dhsreq.pem
+# Sign request: end entity DH extensions
+$OPENSSL x509 -req -in dhsreq.pem -CA root.pem -days 3600 \
+ -force_pubkey dhspub.pem \
+ -extfile ca.cnf -extensions dh_cert -CAcreateserial -out dhserver.pem
+
+# DH client certificate
+
+$OPENSSL genpkey -paramfile dhp.pem -out dhckey.pem
+$OPENSSL pkey -in dhckey.pem -pubout -out dhcpub.pem
+CN="Test Client DH Cert" $OPENSSL req -config ca.cnf -new \
+ -key skey.pem -out dhcreq.pem
+$OPENSSL x509 -req -in dhcreq.pem -CA root.pem -days 3600 \
+ -force_pubkey dhcpub.pem \
+ -extfile ca.cnf -extensions dh_cert -CAcreateserial -out dhclient.pem
+
+# Examples of CRL generation without the need to use 'ca' to issue
+# certificates.
+# Create zero length index file
+>index.txt
+# Create initial crl number file
+echo 01 >crlnum.txt
+# Add entries for server and client certs
+$OPENSSL ca -valid server.pem -keyfile root.pem -cert root.pem \
+ -config ca.cnf -md sha1
+$OPENSSL ca -valid client.pem -keyfile root.pem -cert root.pem \
+ -config ca.cnf -md sha1
+$OPENSSL ca -valid rev.pem -keyfile root.pem -cert root.pem \
+ -config ca.cnf -md sha1
+# Generate a CRL.
+$OPENSSL ca -gencrl -keyfile root.pem -cert root.pem -config ca.cnf \
+ -md sha1 -crldays 1 -out crl1.pem
+# Revoke a certificate
+openssl ca -revoke rev.pem -crl_reason superseded \
+ -keyfile root.pem -cert root.pem -config ca.cnf -md sha1
+# Generate another CRL
+$OPENSSL ca -gencrl -keyfile root.pem -cert root.pem -config ca.cnf \
+ -md sha1 -crldays 1 -out crl2.pem
+
diff --git a/demos/certs/ocspquery.sh b/demos/certs/ocspquery.sh
new file mode 100644
index 000000000000..f66411330569
--- /dev/null
+++ b/demos/certs/ocspquery.sh
@@ -0,0 +1,21 @@
+# Example querying OpenSSL test responder. Assumes ocsprun.sh has been
+# called.
+
+OPENSSL=../../apps/openssl
+OPENSSL_CONF=../../apps/openssl.cnf
+export OPENSSL_CONF
+
+# Send responder queries for each certificate.
+
+echo "Requesting OCSP status for each certificate"
+$OPENSSL ocsp -issuer intca.pem -cert client.pem -CAfile root.pem \
+ -url http://127.0.0.1:8888/
+$OPENSSL ocsp -issuer intca.pem -cert server.pem -CAfile root.pem \
+ -url http://127.0.0.1:8888/
+$OPENSSL ocsp -issuer intca.pem -cert rev.pem -CAfile root.pem \
+ -url http://127.0.0.1:8888/
+# One query for all three certificates.
+echo "Requesting OCSP status for three certificates in one request"
+$OPENSSL ocsp -issuer intca.pem \
+ -cert client.pem -cert server.pem -cert rev.pem \
+ -CAfile root.pem -url http://127.0.0.1:8888/
diff --git a/demos/certs/ocsprun.sh b/demos/certs/ocsprun.sh
new file mode 100644
index 000000000000..a65e5f2fd171
--- /dev/null
+++ b/demos/certs/ocsprun.sh
@@ -0,0 +1,14 @@
+# Example of running an querying OpenSSL test OCSP responder.
+# This assumes "mkcerts.sh" or similar has been run to set up the
+# necessary file structure.
+
+OPENSSL=../../apps/openssl
+OPENSSL_CONF=../../apps/openssl.cnf
+export OPENSSL_CONF
+
+# Run OCSP responder.
+
+PORT=8888
+
+$OPENSSL ocsp -port $PORT -index index.txt -CA intca.pem \
+ -rsigner resp.pem -rkey respkey.pem -rother intca.pem $*
diff --git a/demos/cipher/Makefile b/demos/cipher/Makefile
new file mode 100644
index 000000000000..81f526535e20
--- /dev/null
+++ b/demos/cipher/Makefile
@@ -0,0 +1,27 @@
+# Quick instruction:
+# To build against an OpenSSL built in the source tree, do this:
+#
+# make OPENSSL_INCS_LOCATION=-I../../include OPENSSL_LIBS_LOCATION=-L../..
+#
+# To run the demos when linked with a shared library (default):
+#
+# LD_LIBRARY_PATH=../.. ./aesccm
+# LD_LIBRARY_PATH=../.. ./aesgcm
+# LD_LIBRARY_PATH=../.. ./aeskeywrap
+# LD_LIBRARY_PATH=../.. ./ariacbc
+
+CFLAGS = $(OPENSSL_INCS_LOCATION)
+LDFLAGS = $(OPENSSL_LIBS_LOCATION) -lssl -lcrypto
+
+all: aesccm aesgcm aeskeywrap ariacbc
+
+aesccm: aesccm.o
+aesgcm: aesgcm.o
+aeskeywrap: aeskeywrap.o
+ariacbc: ariacbc.o
+
+aesccm aesgcm aeskeywrap ariacbc:
+ $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
+
+clean:
+ $(RM) aesccm aesgcm aeskeywrap ariacbc *.o
diff --git a/demos/cipher/aesccm.c b/demos/cipher/aesccm.c
new file mode 100644
index 000000000000..5a2d4281506e
--- /dev/null
+++ b/demos/cipher/aesccm.c
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2013-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * Simple AES CCM authenticated encryption with additional data (AEAD)
+ * demonstration program.
+ */
+
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/bio.h>
+#include <openssl/evp.h>
+#include <openssl/core_names.h>
+
+/* AES-CCM test data obtained from NIST public test vectors */
+
+/* AES key */
+static const unsigned char ccm_key[] = {
+ 0xce, 0xb0, 0x09, 0xae, 0xa4, 0x45, 0x44, 0x51, 0xfe, 0xad, 0xf0, 0xe6,
+ 0xb3, 0x6f, 0x45, 0x55, 0x5d, 0xd0, 0x47, 0x23, 0xba, 0xa4, 0x48, 0xe8
+};
+
+/* Unique nonce to be used for this message */
+static const unsigned char ccm_nonce[] = {
+ 0x76, 0x40, 0x43, 0xc4, 0x94, 0x60, 0xb7
+};
+
+/*
+ * Example of Additional Authenticated Data (AAD), i.e. unencrypted data
+ * which can be authenticated using the generated Tag value.
+ */
+static const unsigned char ccm_adata[] = {
+ 0x6e, 0x80, 0xdd, 0x7f, 0x1b, 0xad, 0xf3, 0xa1, 0xc9, 0xab, 0x25, 0xc7,
+ 0x5f, 0x10, 0xbd, 0xe7, 0x8c, 0x23, 0xfa, 0x0e, 0xb8, 0xf9, 0xaa, 0xa5,
+ 0x3a, 0xde, 0xfb, 0xf4, 0xcb, 0xf7, 0x8f, 0xe4
+};
+
+/* Example plaintext to encrypt */
+static const unsigned char ccm_pt[] = {
+ 0xc8, 0xd2, 0x75, 0xf9, 0x19, 0xe1, 0x7d, 0x7f, 0xe6, 0x9c, 0x2a, 0x1f,
+ 0x58, 0x93, 0x9d, 0xfe, 0x4d, 0x40, 0x37, 0x91, 0xb5, 0xdf, 0x13, 0x10
+};
+
+/* Expected ciphertext value */
+static const unsigned char ccm_ct[] = {
+ 0x8a, 0x0f, 0x3d, 0x82, 0x29, 0xe4, 0x8e, 0x74, 0x87, 0xfd, 0x95, 0xa2,
+ 0x8a, 0xd3, 0x92, 0xc8, 0x0b, 0x36, 0x81, 0xd4, 0xfb, 0xc7, 0xbb, 0xfd
+};
+
+/* Expected AEAD Tag value */
+static const unsigned char ccm_tag[] = {
+ 0x2d, 0xd6, 0xef, 0x1c, 0x45, 0xd4, 0xcc, 0xb7, 0x23, 0xdc, 0x07, 0x44,
+ 0x14, 0xdb, 0x50, 0x6d
+};
+
+/*
+ * A library context and property query can be used to select & filter
+ * algorithm implementations. If they are NULL then the default library
+ * context and properties are used.
+ */
+OSSL_LIB_CTX *libctx = NULL;
+const char *propq = NULL;
+
+
+int aes_ccm_encrypt(void)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, tmplen;
+ size_t ccm_nonce_len = sizeof(ccm_nonce);
+ size_t ccm_tag_len = sizeof(ccm_tag);
+ unsigned char outbuf[1024];
+ unsigned char outtag[16];
+ OSSL_PARAM params[3] = {
+ OSSL_PARAM_END, OSSL_PARAM_END, OSSL_PARAM_END
+ };
+
+ printf("AES CCM Encrypt:\n");
+ printf("Plaintext:\n");
+ BIO_dump_fp(stdout, ccm_pt, sizeof(ccm_pt));
+
+ /* Create a context for the encrypt operation */
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ /* Fetch the cipher implementation */
+ if ((cipher = EVP_CIPHER_fetch(libctx, "AES-192-CCM", propq)) == NULL)
+ goto err;
+
+ /* Set nonce length if default 96 bits is not appropriate */
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN,
+ &ccm_nonce_len);
+ /* Set tag length */
+ params[1] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
+ NULL, ccm_tag_len);
+
+ /*
+ * Initialise encrypt operation with the cipher & mode,
+ * nonce length and tag length parameters.
+ */
+ if (!EVP_EncryptInit_ex2(ctx, cipher, NULL, NULL, params))
+ goto err;
+
+ /* Initialise key and nonce */
+ if (!EVP_EncryptInit_ex(ctx, NULL, NULL, ccm_key, ccm_nonce))
+ goto err;
+
+ /* Set plaintext length: only needed if AAD is used */
+ if (!EVP_EncryptUpdate(ctx, NULL, &outlen, NULL, sizeof(ccm_pt)))
+ goto err;
+
+ /* Zero or one call to specify any AAD */
+ if (!EVP_EncryptUpdate(ctx, NULL, &outlen, ccm_adata, sizeof(ccm_adata)))
+ goto err;
+
+ /* Encrypt plaintext: can only be called once */
+ if (!EVP_EncryptUpdate(ctx, outbuf, &outlen, ccm_pt, sizeof(ccm_pt)))
+ goto err;
+
+ /* Output encrypted block */
+ printf("Ciphertext:\n");
+ BIO_dump_fp(stdout, outbuf, outlen);
+
+ /* Finalise: note get no output for CCM */
+ if (!EVP_EncryptFinal_ex(ctx, NULL, &tmplen))
+ goto err;
+
+ /* Get tag */
+ params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
+ outtag, ccm_tag_len);
+ params[1] = OSSL_PARAM_construct_end();
+
+ if (!EVP_CIPHER_CTX_get_params(ctx, params))
+ goto err;
+
+ /* Output tag */
+ printf("Tag:\n");
+ BIO_dump_fp(stdout, outtag, ccm_tag_len);
+
+ ret = 1;
+err:
+ if (!ret)
+ ERR_print_errors_fp(stderr);
+
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+int aes_ccm_decrypt(void)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, rv;
+ unsigned char outbuf[1024];
+ size_t ccm_nonce_len = sizeof(ccm_nonce);
+ OSSL_PARAM params[3] = {
+ OSSL_PARAM_END, OSSL_PARAM_END, OSSL_PARAM_END
+ };
+
+ printf("AES CCM Decrypt:\n");
+ printf("Ciphertext:\n");
+ BIO_dump_fp(stdout, ccm_ct, sizeof(ccm_ct));
+
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ /* Fetch the cipher implementation */
+ if ((cipher = EVP_CIPHER_fetch(libctx, "AES-192-CCM", propq)) == NULL)
+ goto err;
+
+ /* Set nonce length if default 96 bits is not appropriate */
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN,
+ &ccm_nonce_len);
+ /* Set tag length */
+ params[1] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
+ (unsigned char *)ccm_tag,
+ sizeof(ccm_tag));
+ /*
+ * Initialise decrypt operation with the cipher & mode,
+ * nonce length and expected tag parameters.
+ */
+ if (!EVP_DecryptInit_ex2(ctx, cipher, NULL, NULL, params))
+ goto err;
+
+ /* Specify key and IV */
+ if (!EVP_DecryptInit_ex(ctx, NULL, NULL, ccm_key, ccm_nonce))
+ goto err;
+
+ /* Set ciphertext length: only needed if we have AAD */
+ if (!EVP_DecryptUpdate(ctx, NULL, &outlen, NULL, sizeof(ccm_ct)))
+ goto err;
+
+ /* Zero or one call to specify any AAD */
+ if (!EVP_DecryptUpdate(ctx, NULL, &outlen, ccm_adata, sizeof(ccm_adata)))
+ goto err;
+
+ /* Decrypt plaintext, verify tag: can only be called once */
+ rv = EVP_DecryptUpdate(ctx, outbuf, &outlen, ccm_ct, sizeof(ccm_ct));
+
+ /* Output decrypted block: if tag verify failed we get nothing */
+ if (rv > 0) {
+ printf("Tag verify successful!\nPlaintext:\n");
+ BIO_dump_fp(stdout, outbuf, outlen);
+ } else {
+ printf("Tag verify failed!\nPlaintext not available\n");
+ goto err;
+ }
+ ret = 1;
+err:
+ if (!ret)
+ ERR_print_errors_fp(stderr);
+
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+int main(int argc, char **argv)
+{
+ if (!aes_ccm_encrypt())
+ return 1;
+
+ if (!aes_ccm_decrypt())
+ return 1;
+
+ return 0;
+}
diff --git a/demos/cipher/aesgcm.c b/demos/cipher/aesgcm.c
new file mode 100644
index 000000000000..aaf4000d574f
--- /dev/null
+++ b/demos/cipher/aesgcm.c
@@ -0,0 +1,228 @@
+/*
+ * Copyright 2012-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * Simple AES GCM authenticated encryption with additional data (AEAD)
+ * demonstration program.
+ */
+
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/bio.h>
+#include <openssl/evp.h>
+#include <openssl/core_names.h>
+
+/* AES-GCM test data obtained from NIST public test vectors */
+
+/* AES key */
+static const unsigned char gcm_key[] = {
+ 0xee, 0xbc, 0x1f, 0x57, 0x48, 0x7f, 0x51, 0x92, 0x1c, 0x04, 0x65, 0x66,
+ 0x5f, 0x8a, 0xe6, 0xd1, 0x65, 0x8b, 0xb2, 0x6d, 0xe6, 0xf8, 0xa0, 0x69,
+ 0xa3, 0x52, 0x02, 0x93, 0xa5, 0x72, 0x07, 0x8f
+};
+
+/* Unique initialisation vector */
+static const unsigned char gcm_iv[] = {
+ 0x99, 0xaa, 0x3e, 0x68, 0xed, 0x81, 0x73, 0xa0, 0xee, 0xd0, 0x66, 0x84
+};
+
+/* Example plaintext to encrypt */
+static const unsigned char gcm_pt[] = {
+ 0xf5, 0x6e, 0x87, 0x05, 0x5b, 0xc3, 0x2d, 0x0e, 0xeb, 0x31, 0xb2, 0xea,
+ 0xcc, 0x2b, 0xf2, 0xa5
+};
+
+/*
+ * Example of Additional Authenticated Data (AAD), i.e. unencrypted data
+ * which can be authenticated using the generated Tag value.
+ */
+static const unsigned char gcm_aad[] = {
+ 0x4d, 0x23, 0xc3, 0xce, 0xc3, 0x34, 0xb4, 0x9b, 0xdb, 0x37, 0x0c, 0x43,
+ 0x7f, 0xec, 0x78, 0xde
+};
+
+/* Expected ciphertext value */
+static const unsigned char gcm_ct[] = {
+ 0xf7, 0x26, 0x44, 0x13, 0xa8, 0x4c, 0x0e, 0x7c, 0xd5, 0x36, 0x86, 0x7e,
+ 0xb9, 0xf2, 0x17, 0x36
+};
+
+/* Expected AEAD Tag value */
+static const unsigned char gcm_tag[] = {
+ 0x67, 0xba, 0x05, 0x10, 0x26, 0x2a, 0xe4, 0x87, 0xd7, 0x37, 0xee, 0x62,
+ 0x98, 0xf7, 0x7e, 0x0c
+};
+
+/*
+ * A library context and property query can be used to select & filter
+ * algorithm implementations. If they are NULL then the default library
+ * context and properties are used.
+ */
+OSSL_LIB_CTX *libctx = NULL;
+const char *propq = NULL;
+
+int aes_gcm_encrypt(void)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, tmplen;
+ size_t gcm_ivlen = sizeof(gcm_iv);
+ unsigned char outbuf[1024];
+ unsigned char outtag[16];
+ OSSL_PARAM params[2] = {
+ OSSL_PARAM_END, OSSL_PARAM_END
+ };
+
+ printf("AES GCM Encrypt:\n");
+ printf("Plaintext:\n");
+ BIO_dump_fp(stdout, gcm_pt, sizeof(gcm_pt));
+
+ /* Create a context for the encrypt operation */
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ /* Fetch the cipher implementation */
+ if ((cipher = EVP_CIPHER_fetch(libctx, "AES-256-GCM", propq)) == NULL)
+ goto err;
+
+ /* Set IV length if default 96 bits is not appropriate */
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN,
+ &gcm_ivlen);
+
+ /*
+ * Initialise an encrypt operation with the cipher/mode, key, IV and
+ * IV length parameter.
+ * For demonstration purposes the IV is being set here. In a compliant
+ * application the IV would be generated internally so the iv passed in
+ * would be NULL.
+ */
+ if (!EVP_EncryptInit_ex2(ctx, cipher, gcm_key, gcm_iv, params))
+ goto err;
+
+ /* Zero or more calls to specify any AAD */
+ if (!EVP_EncryptUpdate(ctx, NULL, &outlen, gcm_aad, sizeof(gcm_aad)))
+ goto err;
+
+ /* Encrypt plaintext */
+ if (!EVP_EncryptUpdate(ctx, outbuf, &outlen, gcm_pt, sizeof(gcm_pt)))
+ goto err;
+
+ /* Output encrypted block */
+ printf("Ciphertext:\n");
+ BIO_dump_fp(stdout, outbuf, outlen);
+
+ /* Finalise: note get no output for GCM */
+ if (!EVP_EncryptFinal_ex(ctx, outbuf, &tmplen))
+ goto err;
+
+ /* Get tag */
+ params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
+ outtag, 16);
+
+ if (!EVP_CIPHER_CTX_get_params(ctx, params))
+ goto err;
+
+ /* Output tag */
+ printf("Tag:\n");
+ BIO_dump_fp(stdout, outtag, 16);
+
+ ret = 1;
+err:
+ if (!ret)
+ ERR_print_errors_fp(stderr);
+
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+int aes_gcm_decrypt(void)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, rv;
+ size_t gcm_ivlen = sizeof(gcm_iv);
+ unsigned char outbuf[1024];
+ OSSL_PARAM params[2] = {
+ OSSL_PARAM_END, OSSL_PARAM_END
+ };
+
+ printf("AES GCM Decrypt:\n");
+ printf("Ciphertext:\n");
+ BIO_dump_fp(stdout, gcm_ct, sizeof(gcm_ct));
+
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ /* Fetch the cipher implementation */
+ if ((cipher = EVP_CIPHER_fetch(libctx, "AES-256-GCM", propq)) == NULL)
+ goto err;
+
+ /* Set IV length if default 96 bits is not appropriate */
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN,
+ &gcm_ivlen);
+
+ /*
+ * Initialise an encrypt operation with the cipher/mode, key, IV and
+ * IV length parameter.
+ */
+ if (!EVP_DecryptInit_ex2(ctx, cipher, gcm_key, gcm_iv, params))
+ goto err;
+
+ /* Zero or more calls to specify any AAD */
+ if (!EVP_DecryptUpdate(ctx, NULL, &outlen, gcm_aad, sizeof(gcm_aad)))
+ goto err;
+
+ /* Decrypt plaintext */
+ if (!EVP_DecryptUpdate(ctx, outbuf, &outlen, gcm_ct, sizeof(gcm_ct)))
+ goto err;
+
+ /* Output decrypted block */
+ printf("Plaintext:\n");
+ BIO_dump_fp(stdout, outbuf, outlen);
+
+ /* Set expected tag value. */
+ params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
+ (void*)gcm_tag, sizeof(gcm_tag));
+
+ if (!EVP_CIPHER_CTX_set_params(ctx, params))
+ goto err;
+
+ /* Finalise: note get no output for GCM */
+ rv = EVP_DecryptFinal_ex(ctx, outbuf, &outlen);
+ /*
+ * Print out return value. If this is not successful authentication
+ * failed and plaintext is not trustworthy.
+ */
+ printf("Tag Verify %s\n", rv > 0 ? "Successful!" : "Failed!");
+
+ ret = 1;
+err:
+ if (!ret)
+ ERR_print_errors_fp(stderr);
+
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+int main(int argc, char **argv)
+{
+ if (!aes_gcm_encrypt())
+ return 1;
+
+ if (!aes_gcm_decrypt())
+ return 1;
+
+ return 0;
+}
diff --git a/demos/cipher/aeskeywrap.c b/demos/cipher/aeskeywrap.c
new file mode 100644
index 000000000000..f987772e4ffe
--- /dev/null
+++ b/demos/cipher/aeskeywrap.c
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2022 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
+ */
+
+/*
+ * Simple aes wrap encryption demonstration program.
+ */
+
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/bio.h>
+#include <openssl/evp.h>
+#include <openssl/crypto.h>
+#include <openssl/core_names.h>
+
+/* aes key */
+static const unsigned char wrap_key[] = {
+ 0xee, 0xbc, 0x1f, 0x57, 0x48, 0x7f, 0x51, 0x92, 0x1c, 0x04, 0x65, 0x66,
+ 0x5f, 0x8a, 0xe6, 0xd1, 0x65, 0x8b, 0xb2, 0x6d, 0xe6, 0xf8, 0xa0, 0x69,
+ 0xa3, 0x52, 0x02, 0x93, 0xa5, 0x72, 0x07, 0x8f
+};
+
+/* Unique initialisation vector */
+static const unsigned char wrap_iv[] = {
+ 0x99, 0xaa, 0x3e, 0x68, 0xed, 0x81, 0x73, 0xa0, 0xee, 0xd0, 0x66, 0x84,
+ 0x99, 0xaa, 0x3e, 0x68,
+};
+
+/* Example plaintext to encrypt */
+static const unsigned char wrap_pt[] = {
+ 0xad, 0x4f, 0xc9, 0xfc, 0x77, 0x69, 0xc9, 0xea, 0xfc, 0xdf, 0x00, 0xac,
+ 0x34, 0xec, 0x40, 0xbc, 0x28, 0x3f, 0xa4, 0x5e, 0xd8, 0x99, 0xe4, 0x5d,
+ 0x5e, 0x7a, 0xc4, 0xe6, 0xca, 0x7b, 0xa5, 0xb7,
+};
+
+/* Expected ciphertext value */
+static const unsigned char wrap_ct[] = {
+ 0x97, 0x99, 0x55, 0xca, 0xf6, 0x3e, 0x95, 0x54, 0x39, 0xd6, 0xaf, 0x63, 0xff, 0x2c, 0xe3, 0x96,
+ 0xf7, 0x0d, 0x2c, 0x9c, 0xc7, 0x43, 0xc0, 0xb6, 0x31, 0x43, 0xb9, 0x20, 0xac, 0x6b, 0xd3, 0x67,
+ 0xad, 0x01, 0xaf, 0xa7, 0x32, 0x74, 0x26, 0x92,
+};
+
+/*
+ * A library context and property query can be used to select & filter
+ * algorithm implementations. If they are NULL then the default library
+ * context and properties are used.
+ */
+OSSL_LIB_CTX *libctx = NULL;
+const char *propq = NULL;
+
+int aes_wrap_encrypt(void)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, tmplen;
+ unsigned char outbuf[1024];
+
+ printf("aes wrap Encrypt:\n");
+ printf("Plaintext:\n");
+ BIO_dump_fp(stdout, wrap_pt, sizeof(wrap_pt));
+
+ /* Create a context for the encrypt operation */
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
+
+ /* Fetch the cipher implementation */
+ if ((cipher = EVP_CIPHER_fetch(libctx, "AES-256-WRAP", propq)) == NULL)
+ goto err;
+
+ /*
+ * Initialise an encrypt operation with the cipher/mode, key and IV.
+ * We are not setting any custom params so let params be just NULL.
+ */
+ if (!EVP_EncryptInit_ex2(ctx, cipher, wrap_key, wrap_iv, /* params */ NULL))
+ goto err;
+
+ /* Encrypt plaintext */
+ if (!EVP_EncryptUpdate(ctx, outbuf, &outlen, wrap_pt, sizeof(wrap_pt)))
+ goto err;
+
+ /* Finalise: there can be some additional output from padding */
+ if (!EVP_EncryptFinal_ex(ctx, outbuf + outlen, &tmplen))
+ goto err;
+ outlen += tmplen;
+
+ /* Output encrypted block */
+ printf("Ciphertext (outlen:%d):\n", outlen);
+ BIO_dump_fp(stdout, outbuf, outlen);
+
+ if (sizeof(wrap_ct) == outlen && !CRYPTO_memcmp(outbuf, wrap_ct, outlen))
+ printf("Final ciphertext matches expected ciphertext\n");
+ else
+ printf("Final ciphertext differs from expected ciphertext\n");
+
+ ret = 1;
+err:
+ if (!ret)
+ ERR_print_errors_fp(stderr);
+
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+int aes_wrap_decrypt(void)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, tmplen;
+ unsigned char outbuf[1024];
+
+ printf("aes wrap Decrypt:\n");
+ printf("Ciphertext:\n");
+ BIO_dump_fp(stdout, wrap_ct, sizeof(wrap_ct));
+
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
+
+ /* Fetch the cipher implementation */
+ if ((cipher = EVP_CIPHER_fetch(libctx, "aes-256-wrap", propq)) == NULL)
+ goto err;
+
+ /*
+ * Initialise an encrypt operation with the cipher/mode, key and IV.
+ * We are not setting any custom params so let params be just NULL.
+ */
+ if (!EVP_DecryptInit_ex2(ctx, cipher, wrap_key, wrap_iv, /* params */ NULL))
+ goto err;
+
+ /* Decrypt plaintext */
+ if (!EVP_DecryptUpdate(ctx, outbuf, &outlen, wrap_ct, sizeof(wrap_ct)))
+ goto err;
+
+ /* Finalise: there can be some additional output from padding */
+ if (!EVP_DecryptFinal_ex(ctx, outbuf + outlen, &tmplen))
+ goto err;
+ outlen += tmplen;
+
+ /* Output decrypted block */
+ printf("Plaintext (outlen:%d):\n", outlen);
+ BIO_dump_fp(stdout, outbuf, outlen);
+
+ if (sizeof(wrap_pt) == outlen && !CRYPTO_memcmp(outbuf, wrap_pt, outlen))
+ printf("Final plaintext matches original plaintext\n");
+ else
+ printf("Final plaintext differs from original plaintext\n");
+
+ ret = 1;
+err:
+ if (!ret)
+ ERR_print_errors_fp(stderr);
+
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+int main(int argc, char **argv)
+{
+ if (!aes_wrap_encrypt())
+ return 1;
+
+ if (!aes_wrap_decrypt())
+ return 1;
+
+ return 0;
+}
+
diff --git a/demos/cipher/ariacbc.c b/demos/cipher/ariacbc.c
new file mode 100644
index 000000000000..8999fe6e701d
--- /dev/null
+++ b/demos/cipher/ariacbc.c
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2012-2022 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
+ */
+
+/*
+ * Simple ARIA CBC encryption demonstration program.
+ */
+
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/bio.h>
+#include <openssl/evp.h>
+#include <openssl/crypto.h>
+#include <openssl/core_names.h>
+
+/* ARIA key */
+static const unsigned char cbc_key[] = {
+ 0xee, 0xbc, 0x1f, 0x57, 0x48, 0x7f, 0x51, 0x92, 0x1c, 0x04, 0x65, 0x66,
+ 0x5f, 0x8a, 0xe6, 0xd1, 0x65, 0x8b, 0xb2, 0x6d, 0xe6, 0xf8, 0xa0, 0x69,
+ 0xa3, 0x52, 0x02, 0x93, 0xa5, 0x72, 0x07, 0x8f
+};
+
+/* Unique initialisation vector */
+static const unsigned char cbc_iv[] = {
+ 0x99, 0xaa, 0x3e, 0x68, 0xed, 0x81, 0x73, 0xa0, 0xee, 0xd0, 0x66, 0x84,
+ 0x99, 0xaa, 0x3e, 0x68,
+};
+
+/* Example plaintext to encrypt */
+static const unsigned char cbc_pt[] = {
+ 0xf5, 0x6e, 0x87, 0x05, 0x5b, 0xc3, 0x2d, 0x0e, 0xeb, 0x31, 0xb2, 0xea,
+ 0xcc, 0x2b, 0xf2, 0xa5
+};
+
+/* Expected ciphertext value */
+static const unsigned char cbc_ct[] = {
+ 0x9a, 0x44, 0xe6, 0x85, 0x94, 0x26, 0xff, 0x30, 0x03, 0xd3, 0x7e, 0xc6,
+ 0xb5, 0x4a, 0x09, 0x66, 0x39, 0x28, 0xf3, 0x67, 0x14, 0xbc, 0xe8, 0xe2,
+ 0xcf, 0x31, 0xb8, 0x60, 0x42, 0x72, 0x6d, 0xc8
+};
+
+/*
+ * A library context and property query can be used to select & filter
+ * algorithm implementations. If they are NULL then the default library
+ * context and properties are used.
+ */
+OSSL_LIB_CTX *libctx = NULL;
+const char *propq = NULL;
+
+int aria_cbc_encrypt(void)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, tmplen;
+ size_t cbc_ivlen = sizeof(cbc_iv);
+ unsigned char outbuf[1024];
+ unsigned char outtag[16];
+
+ printf("ARIA CBC Encrypt:\n");
+ printf("Plaintext:\n");
+ BIO_dump_fp(stdout, cbc_pt, sizeof(cbc_pt));
+
+ /* Create a context for the encrypt operation */
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ /* Fetch the cipher implementation */
+ if ((cipher = EVP_CIPHER_fetch(libctx, "ARIA-256-CBC", propq)) == NULL)
+ goto err;
+
+ /*
+ * Initialise an encrypt operation with the cipher/mode, key and IV.
+ * We are not setting any custom params so let params be just NULL.
+ */
+ if (!EVP_EncryptInit_ex2(ctx, cipher, cbc_key, cbc_iv, /* params */ NULL))
+ goto err;
+
+ /* Encrypt plaintext */
+ if (!EVP_EncryptUpdate(ctx, outbuf, &outlen, cbc_pt, sizeof(cbc_pt)))
+ goto err;
+
+ /* Finalise: there can be some additional output from padding */
+ if (!EVP_EncryptFinal_ex(ctx, outbuf + outlen, &tmplen))
+ goto err;
+ outlen += tmplen;
+
+ /* Output encrypted block */
+ printf("Ciphertext (outlen:%d):\n", outlen);
+ BIO_dump_fp(stdout, outbuf, outlen);
+
+ if (sizeof(cbc_ct) == outlen && !CRYPTO_memcmp(outbuf, cbc_ct, outlen))
+ printf("Final ciphertext matches expected ciphertext\n");
+ else
+ printf("Final ciphertext differs from expected ciphertext\n");
+
+ ret = 1;
+err:
+ if (!ret)
+ ERR_print_errors_fp(stderr);
+
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+int aria_cbc_decrypt(void)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, tmplen, rv;
+ size_t cbc_ivlen = sizeof(cbc_iv);
+ unsigned char outbuf[1024];
+
+ printf("ARIA CBC Decrypt:\n");
+ printf("Ciphertext:\n");
+ BIO_dump_fp(stdout, cbc_ct, sizeof(cbc_ct));
+
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ /* Fetch the cipher implementation */
+ if ((cipher = EVP_CIPHER_fetch(libctx, "ARIA-256-CBC", propq)) == NULL)
+ goto err;
+
+ /*
+ * Initialise an encrypt operation with the cipher/mode, key and IV.
+ * We are not setting any custom params so let params be just NULL.
+ */
+ if (!EVP_DecryptInit_ex2(ctx, cipher, cbc_key, cbc_iv, /* params */ NULL))
+ goto err;
+
+ /* Decrypt plaintext */
+ if (!EVP_DecryptUpdate(ctx, outbuf, &outlen, cbc_ct, sizeof(cbc_ct)))
+ goto err;
+
+ /* Finalise: there can be some additional output from padding */
+ if (!EVP_DecryptFinal_ex(ctx, outbuf + outlen, &tmplen))
+ goto err;
+ outlen += tmplen;
+
+ /* Output decrypted block */
+ printf("Plaintext (outlen:%d):\n", outlen);
+ BIO_dump_fp(stdout, outbuf, outlen);
+
+ if (sizeof(cbc_pt) == outlen && !CRYPTO_memcmp(outbuf, cbc_pt, outlen))
+ printf("Final plaintext matches original plaintext\n");
+ else
+ printf("Final plaintext differs from original plaintext\n");
+
+ ret = 1;
+err:
+ if (!ret)
+ ERR_print_errors_fp(stderr);
+
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+int main(int argc, char **argv)
+{
+ if (!aria_cbc_encrypt())
+ return 1;
+
+ if (!aria_cbc_decrypt())
+ return 1;
+
+ return 0;
+}
diff --git a/demos/cms/cacert.pem b/demos/cms/cacert.pem
new file mode 100644
index 000000000000..1949fc33aed4
--- /dev/null
+++ b/demos/cms/cacert.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIFBjCCA26gAwIBAgIUM/WihZJZUTZvqoyNaUlp59DOaWYwDQYJKoZIhvcNAQEL
+BQAwVzELMAkGA1UEBhMCVUsxEjAQBgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwN
+T3BlblNTTCBHcm91cDEcMBoGA1UEAwwTVGVzdCBTL01JTUUgUm9vdCBDQTAgFw0x
+ODA2MTQxMjQ2MjhaGA8yMTE4MDYxNDEyNDYyOFowVzELMAkGA1UEBhMCVUsxEjAQ
+BgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwNT3BlblNTTCBHcm91cDEcMBoGA1UE
+AwwTVGVzdCBTL01JTUUgUm9vdCBDQTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCC
+AYoCggGBAMzxOVHZFVxN9XQIVW3y1bK5ir3jKpKkU6zKrw8MdRvm233eqWSOYJvs
+3rgdT59iv+CaPcBT5offbP0eH43H96CubJji/vQLMUzc/cLrJuCbLHREbSCsFNpf
+lYw5mkT98dCFV66HuN6Nwqi5kW8TxGSXkD4OZqklbbicrXoXh5qhREID5hgbrijy
+BiIHyp6bDq5zUCcmHP/Gdw2aTMEQZNsdw4MavtB65vI7dYxo2zEzdmJ3NnjlG7qZ
+6Od6V4IW8yRAK9GLj0TUCZl28pq6rNio+F5Lst3clX9PDxh7LphNrXXYiHjXp2Kn
+LZbOnz1SJSmCeisy/EFN6fRtwdwqcM1AcKNBU+UqFq0Mv0sgNdRwghYWGQht0mT9
++Pg5HxTzDlOOmBT1kAduxJNLiRQlgysPDN94Os0EpzJyA87Z6yJRGvYGZ5mrdfx2
+8p6bHptf46h1WzCX4wDy2J86y+odgWMnSkmF9h8ySj66rgmLrz40n+mDm8bhUblK
+AV8IqN8WmQIDAQABo4HHMIHEMB0GA1UdDgQWBBSkmMaBYQPTEGcqe1maU2IDOMLQ
+ezCBlAYDVR0jBIGMMIGJgBSkmMaBYQPTEGcqe1maU2IDOMLQe6FbpFkwVzELMAkG
+A1UEBhMCVUsxEjAQBgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwNT3BlblNTTCBH
+cm91cDEcMBoGA1UEAwwTVGVzdCBTL01JTUUgUm9vdCBDQYIUM/WihZJZUTZvqoyN
+aUlp59DOaWYwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAqP1CQRGM
+roHvk6dhI4ElNae5seRdSQNTtwAhlP1RoSoFz8xybMgDksKE07t77gDsKvU2SuXV
+fdICqVpjpN9cRYKM6VmiREdU6OGsPQ74u4sOg4cT/tuou0RsD/uQaznb5NOvo2T0
+8rmX0Ai3+lbEuMBCaGNU0KYJifYy4QrSqEapq4W3NbqH85msOiKHEDh1vz9IWz6z
+WKjdv9lst56XuLTZrJ/O0T0qD6aMXyqK6ZART/FELjDXc+9Ey4TH+msOEKq0uQWt
+y7Grfmz52dTnAjBw+6/ggE9sA8Wo6DhwbEUaOA9BB5YP+XWsIkUUbiVHU7D8TyiE
+KHt2DkaWvjl1/RdtzQUO/vGI4yuFTZfLf23KcwgtHJI3JxLNAMLM3I2jmoWhKm/d
+GkVYsGH1GWonv0UTv/TKlOXaTYWK9fQVoYkFc+FrwUd2lev5FizJNigL9qatGyRZ
+giJmWWlf0bMMIxwWZzQswxLyKdkNlvkKf9T6BjEmGLeOHZCn0x2sOyUi
+-----END CERTIFICATE-----
diff --git a/demos/cms/cakey.pem b/demos/cms/cakey.pem
new file mode 100644
index 000000000000..486c975b722d
--- /dev/null
+++ b/demos/cms/cakey.pem
@@ -0,0 +1,39 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIG5QIBAAKCAYEAzPE5UdkVXE31dAhVbfLVsrmKveMqkqRTrMqvDwx1G+bbfd6p
+ZI5gm+zeuB1Pn2K/4Jo9wFPmh99s/R4fjcf3oK5smOL+9AsxTNz9wusm4JssdERt
+IKwU2l+VjDmaRP3x0IVXroe43o3CqLmRbxPEZJeQPg5mqSVtuJyteheHmqFEQgPm
+GBuuKPIGIgfKnpsOrnNQJyYc/8Z3DZpMwRBk2x3Dgxq+0Hrm8jt1jGjbMTN2Ync2
+eOUbupno53pXghbzJEAr0YuPRNQJmXbymrqs2Kj4Xkuy3dyVf08PGHsumE2tddiI
+eNenYqctls6fPVIlKYJ6KzL8QU3p9G3B3CpwzUBwo0FT5SoWrQy/SyA11HCCFhYZ
+CG3SZP34+DkfFPMOU46YFPWQB27Ek0uJFCWDKw8M33g6zQSnMnIDztnrIlEa9gZn
+mat1/Hbynpsem1/jqHVbMJfjAPLYnzrL6h2BYydKSYX2HzJKPrquCYuvPjSf6YOb
+xuFRuUoBXwio3xaZAgMBAAECggGBAJrqILzozke2ujpablEtBTITJHgC9lRgmMt9
+bjR+4ysTJ4kOvZbANPDIbVZY+a3uVEIv9UujYBgG4Hi4w3tF074G+xnaRIQuzbZf
+OgaUABA527GLY74VtbGYHRAhHqbWGmrX0H6iIzE/kQw/MVr4YzTyiFsQQbPMEhNB
+g7RNgvh0vIb2MYC5s71JrS8eGqAnb0KY8daV7ce9upJyt2Acx1AGQJqipegrbtVd
+8q4PONkJIIyvtmJONNaprq8DAJDaTNdcZu7f7mymF5UFpp4Lh6raAvOZAZjgkPYW
+PsX2uMAsYchXTmSDGOHNafqeyTS0UEaw6FRhpxzMoSxRXX4/RhjeShadYwHxbh7s
+UwFU7S9EWlj8CjgGs00KFM1eMV0sEYsL8sRf7ZiWM5XJsmXKbRZjA5V+7OoSGElB
+zJcERK6NFCISijApZlVveEVZS0qESivKd9bspOzbMdoJyjBW1LZdMH85YIwM8Dox
+VqGR0QD3UP8RpZBRwTiFenqOpwARnQKBwQD1NBGcTxLLUUluEBG/TD9KM5sCnkm8
+cn5RomwTeBrUr9SXOJuUPa8RNLrAeosuWCrx9JkF25IBExQbbs1NRHuziOIOyI0+
+hvqP85zJln7kUDtiDMFfUdS8Q6PF3b3wJl6cbipowWwsahvUSkx3W8UWrzZHsvrO
+LBtvEZdwetNWN50FK040uM6y/x71xfvUhlKBsuZBgDFU9aXJZAGpkCklZnByURN6
+LZudDQETdYo7/X8qqPlcHwHStGj9YXg/e38CgcEA1fdVA6s+KlRUGRTUDaUFPDji
+MciTcvA3teXJWNAsFWd71oLT5eQNI50afF242ikTT6JuXFH0mMYKoVe/LFo7m2mf
+uLcW4yM/FiKTkhnBQGm7KNqyvXB0T0DWTDSeS7hTzD6KjuJPf7JVH5I4In8jSKJd
+3mzTA9keIosnxjX7EOsZNQd0+MKaJYHnvJsxYaoT9FXoONuyzQu96TQ8Q+fkVHXh
+I/ENAw0qfoJ5mw5dQnU2UtjP6cSNVQ9Rsr48GNnnAoHBAJcI65AMZNc3yrMw0r2y
+iYl7IBAMz/5zx7shANE9OcmoRJqhE7PMCvneMOo+kVyKkmlW8KrbBKQEzG3ZYjwl
+4sxDlHrmrZnGKrBgrkK9oIuhn/JVSQcdsJwGTeqjG0vBVqWkdhrwiWESOvIYkeEz
+dcLzScwAQtyb7ooLm+x8u5Bv0RhOBG4VJ7y5yKg6u1O9KTUarRnLjJd4eBYEs8Fu
+Oun+n2TK6+RmE2Q5jmAeFne9PYdZbb+Ame7fkYwBbcAsoQKBwQC1KHQSZyp7LGsH
+0Vq5Mr77/i2FeQ1eg4SnvaZ8S8UHWla/iIVgX3XAcYO7SJ76F00CX8SQ5dLyhrr5
+YBG8u6k8LHHPMzVtmqoPU7cePDAjGWIddQ1g15WihILsgqCD+8z3YPxvfa1RsOvh
+jyt4Ca0WEmLnr7v5xhp9pNRIPewUpvjwrR+cfyeEGjjat4tX5Wh/tzym51y7vvVM
+Pa3I0M3BtQyqIa2ip8MS2eWcIs1TN2qHOorOolwHaLEDZY38fIECgcAKns98A2G3
+tLvZaDZlVsJWZsdSDUrFCKvx9QbTZHbyOL5JU/8TgLBgfOgV2yxLXn9Pq+0Quvb2
+EjaFuA3GKOFi50WtfwR6Yo1DaFcx5n0bDShnaHOF+dUi0BVQd2V1DsqAwF5/Eh3A
+lX+XuWeSam4/91WhmNMCZpfYv0GErs4ZBHHsl54jmvrrjbhg/efUvpWKi/9vlKm+
++ITH+nG1xCnyEEVZ+vm9Qq57lCLBZGyGT4PetllpsRrGcdO4/gfK8lY=
+-----END RSA PRIVATE KEY-----
diff --git a/demos/cms/cms_comp.c b/demos/cms/cms_comp.c
new file mode 100644
index 000000000000..ee1b5a38ceef
--- /dev/null
+++ b/demos/cms/cms_comp.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2008-2016 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
+ */
+
+/* Simple S/MIME compress example */
+#include <openssl/pem.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL;
+ CMS_ContentInfo *cms = NULL;
+ int ret = 1;
+
+ /*
+ * On OpenSSL 1.0.0+ only:
+ * for streaming set CMS_STREAM
+ */
+ int flags = CMS_STREAM;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Open content being compressed */
+
+ in = BIO_new_file("comp.txt", "r");
+
+ if (!in)
+ goto err;
+
+ /* compress content */
+ cms = CMS_compress(in, NID_zlib_compression, flags);
+
+ if (!cms)
+ goto err;
+
+ out = BIO_new_file("smcomp.txt", "w");
+ if (!out)
+ goto err;
+
+ /* Write out S/MIME message */
+ if (!SMIME_write_CMS(out, cms, in, flags))
+ goto err;
+
+ ret = 0;
+
+ err:
+
+ if (ret) {
+ fprintf(stderr, "Error Compressing Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ CMS_ContentInfo_free(cms);
+ BIO_free(in);
+ BIO_free(out);
+ return ret;
+}
diff --git a/demos/cms/cms_ddec.c b/demos/cms/cms_ddec.c
new file mode 100644
index 000000000000..cb6c2694c697
--- /dev/null
+++ b/demos/cms/cms_ddec.c
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2008-2016 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
+ */
+
+/*
+ * S/MIME detached data decrypt example: rarely done but should the need
+ * arise this is an example....
+ */
+#include <openssl/pem.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL, *dcont = NULL;
+ X509 *rcert = NULL;
+ EVP_PKEY *rkey = NULL;
+ CMS_ContentInfo *cms = NULL;
+ int ret = 1;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Read in recipient certificate and private key */
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ rcert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ BIO_reset(tbio);
+
+ rkey = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);
+
+ if (!rcert || !rkey)
+ goto err;
+
+ /* Open PEM file containing enveloped data */
+
+ in = BIO_new_file("smencr.pem", "r");
+
+ if (!in)
+ goto err;
+
+ /* Parse PEM content */
+ cms = PEM_read_bio_CMS(in, NULL, 0, NULL);
+
+ if (!cms)
+ goto err;
+
+ /* Open file containing detached content */
+ dcont = BIO_new_file("smencr.out", "rb");
+
+ if (!in)
+ goto err;
+
+ out = BIO_new_file("encrout.txt", "w");
+ if (!out)
+ goto err;
+
+ /* Decrypt S/MIME message */
+ if (!CMS_decrypt(cms, rkey, rcert, dcont, out, 0))
+ goto err;
+
+ ret = 0;
+
+ err:
+
+ if (ret) {
+ fprintf(stderr, "Error Decrypting Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ CMS_ContentInfo_free(cms);
+ X509_free(rcert);
+ EVP_PKEY_free(rkey);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+ BIO_free(dcont);
+ return ret;
+}
diff --git a/demos/cms/cms_dec.c b/demos/cms/cms_dec.c
new file mode 100644
index 000000000000..f33ef1eb78f5
--- /dev/null
+++ b/demos/cms/cms_dec.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2008-2016 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
+ */
+
+/* Simple S/MIME decryption example */
+#include <openssl/pem.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL;
+ X509 *rcert = NULL;
+ EVP_PKEY *rkey = NULL;
+ CMS_ContentInfo *cms = NULL;
+ int ret = 1;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Read in recipient certificate and private key */
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ rcert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ BIO_reset(tbio);
+
+ rkey = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);
+
+ if (!rcert || !rkey)
+ goto err;
+
+ /* Open S/MIME message to decrypt */
+
+ in = BIO_new_file("smencr.txt", "r");
+
+ if (!in)
+ goto err;
+
+ /* Parse message */
+ cms = SMIME_read_CMS(in, NULL);
+
+ if (!cms)
+ goto err;
+
+ out = BIO_new_file("decout.txt", "w");
+ if (!out)
+ goto err;
+
+ /* Decrypt S/MIME message */
+ if (!CMS_decrypt(cms, rkey, rcert, NULL, out, 0))
+ goto err;
+
+ ret = 0;
+
+ err:
+
+ if (ret) {
+ fprintf(stderr, "Error Decrypting Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ CMS_ContentInfo_free(cms);
+ X509_free(rcert);
+ EVP_PKEY_free(rkey);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+ return ret;
+}
diff --git a/demos/cms/cms_denc.c b/demos/cms/cms_denc.c
new file mode 100644
index 000000000000..60b0aa192bc0
--- /dev/null
+++ b/demos/cms/cms_denc.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2008-2016 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
+ */
+
+/*
+ * S/MIME detached data encrypt example: rarely done but should the need
+ * arise this is an example....
+ */
+#include <openssl/pem.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL, *dout = NULL;
+ X509 *rcert = NULL;
+ STACK_OF(X509) *recips = NULL;
+ CMS_ContentInfo *cms = NULL;
+ int ret = 1;
+
+ int flags = CMS_STREAM | CMS_DETACHED;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Read in recipient certificate */
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ rcert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ if (!rcert)
+ goto err;
+
+ /* Create recipient STACK and add recipient cert to it */
+ recips = sk_X509_new_null();
+
+ if (!recips || !sk_X509_push(recips, rcert))
+ goto err;
+
+ /*
+ * sk_X509_pop_free will free up recipient STACK and its contents so set
+ * rcert to NULL so it isn't freed up twice.
+ */
+ rcert = NULL;
+
+ /* Open content being encrypted */
+
+ in = BIO_new_file("encr.txt", "r");
+
+ dout = BIO_new_file("smencr.out", "wb");
+
+ if (!in)
+ goto err;
+
+ /* encrypt content */
+ cms = CMS_encrypt(recips, in, EVP_des_ede3_cbc(), flags);
+
+ if (!cms)
+ goto err;
+
+ out = BIO_new_file("smencr.pem", "w");
+ if (!out)
+ goto err;
+
+ if (!CMS_final(cms, in, dout, flags))
+ goto err;
+
+ /* Write out CMS structure without content */
+ if (!PEM_write_bio_CMS(out, cms))
+ goto err;
+
+ ret = 0;
+
+ err:
+
+ if (ret) {
+ fprintf(stderr, "Error Encrypting Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ CMS_ContentInfo_free(cms);
+ X509_free(rcert);
+ sk_X509_pop_free(recips, X509_free);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(dout);
+ BIO_free(tbio);
+ return ret;
+}
diff --git a/demos/cms/cms_enc.c b/demos/cms/cms_enc.c
new file mode 100644
index 000000000000..9ef7a395583d
--- /dev/null
+++ b/demos/cms/cms_enc.c
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2008-2016 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
+ */
+
+/* Simple S/MIME encrypt example */
+#include <openssl/pem.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL;
+ X509 *rcert = NULL;
+ STACK_OF(X509) *recips = NULL;
+ CMS_ContentInfo *cms = NULL;
+ int ret = 1;
+
+ /*
+ * On OpenSSL 1.0.0 and later only:
+ * for streaming set CMS_STREAM
+ */
+ int flags = CMS_STREAM;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Read in recipient certificate */
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ rcert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ if (!rcert)
+ goto err;
+
+ /* Create recipient STACK and add recipient cert to it */
+ recips = sk_X509_new_null();
+
+ if (!recips || !sk_X509_push(recips, rcert))
+ goto err;
+
+ /*
+ * sk_X509_pop_free will free up recipient STACK and its contents so set
+ * rcert to NULL so it isn't freed up twice.
+ */
+ rcert = NULL;
+
+ /* Open content being encrypted */
+
+ in = BIO_new_file("encr.txt", "r");
+
+ if (!in)
+ goto err;
+
+ /* encrypt content */
+ cms = CMS_encrypt(recips, in, EVP_des_ede3_cbc(), flags);
+
+ if (!cms)
+ goto err;
+
+ out = BIO_new_file("smencr.txt", "w");
+ if (!out)
+ goto err;
+
+ /* Write out S/MIME message */
+ if (!SMIME_write_CMS(out, cms, in, flags))
+ goto err;
+
+ ret = 0;
+
+ err:
+
+ if (ret) {
+ fprintf(stderr, "Error Encrypting Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ CMS_ContentInfo_free(cms);
+ X509_free(rcert);
+ sk_X509_pop_free(recips, X509_free);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+ return ret;
+}
diff --git a/demos/cms/cms_sign.c b/demos/cms/cms_sign.c
new file mode 100644
index 000000000000..a52f5cec0fa5
--- /dev/null
+++ b/demos/cms/cms_sign.c
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2008-2016 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
+ */
+
+/* Simple S/MIME signing example */
+#include <openssl/pem.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL;
+ X509 *scert = NULL;
+ EVP_PKEY *skey = NULL;
+ CMS_ContentInfo *cms = NULL;
+ int ret = 1;
+
+ /*
+ * For simple S/MIME signing use CMS_DETACHED. On OpenSSL 1.0.0 only: for
+ * streaming detached set CMS_DETACHED|CMS_STREAM for streaming
+ * non-detached set CMS_STREAM
+ */
+ int flags = CMS_DETACHED | CMS_STREAM;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Read in signer certificate and private key */
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ scert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ BIO_reset(tbio);
+
+ skey = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);
+
+ if (!scert || !skey)
+ goto err;
+
+ /* Open content being signed */
+
+ in = BIO_new_file("sign.txt", "r");
+
+ if (!in)
+ goto err;
+
+ /* Sign content */
+ cms = CMS_sign(scert, skey, NULL, in, flags);
+
+ if (!cms)
+ goto err;
+
+ out = BIO_new_file("smout.txt", "w");
+ if (!out)
+ goto err;
+
+ if (!(flags & CMS_STREAM))
+ BIO_reset(in);
+
+ /* Write out S/MIME message */
+ if (!SMIME_write_CMS(out, cms, in, flags))
+ goto err;
+
+ ret = 0;
+
+ err:
+
+ if (ret) {
+ fprintf(stderr, "Error Signing Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ CMS_ContentInfo_free(cms);
+ X509_free(scert);
+ EVP_PKEY_free(skey);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+ return ret;
+}
diff --git a/demos/cms/cms_sign2.c b/demos/cms/cms_sign2.c
new file mode 100644
index 000000000000..beda9779a3fb
--- /dev/null
+++ b/demos/cms/cms_sign2.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2008-2016 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
+ */
+
+/* S/MIME signing example: 2 signers */
+#include <openssl/pem.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL;
+ X509 *scert = NULL, *scert2 = NULL;
+ EVP_PKEY *skey = NULL, *skey2 = NULL;
+ CMS_ContentInfo *cms = NULL;
+ int ret = 1;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ scert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ BIO_reset(tbio);
+
+ skey = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);
+
+ BIO_free(tbio);
+
+ tbio = BIO_new_file("signer2.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ scert2 = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ BIO_reset(tbio);
+
+ skey2 = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);
+
+ if (!scert2 || !skey2)
+ goto err;
+
+ in = BIO_new_file("sign.txt", "r");
+
+ if (!in)
+ goto err;
+
+ cms = CMS_sign(NULL, NULL, NULL, in, CMS_STREAM | CMS_PARTIAL);
+
+ if (!cms)
+ goto err;
+
+ /* Add each signer in turn */
+
+ if (!CMS_add1_signer(cms, scert, skey, NULL, 0))
+ goto err;
+
+ if (!CMS_add1_signer(cms, scert2, skey2, NULL, 0))
+ goto err;
+
+ out = BIO_new_file("smout.txt", "w");
+ if (!out)
+ goto err;
+
+ /* NB: content included and finalized by SMIME_write_CMS */
+
+ if (!SMIME_write_CMS(out, cms, in, CMS_STREAM))
+ goto err;
+
+ ret = 0;
+
+ err:
+
+ if (ret) {
+ fprintf(stderr, "Error Signing Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ CMS_ContentInfo_free(cms);
+ X509_free(scert);
+ EVP_PKEY_free(skey);
+ X509_free(scert2);
+ EVP_PKEY_free(skey2);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+ return ret;
+}
diff --git a/demos/cms/cms_uncomp.c b/demos/cms/cms_uncomp.c
new file mode 100644
index 000000000000..35e68ebcc603
--- /dev/null
+++ b/demos/cms/cms_uncomp.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2008-2016 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
+ */
+
+/* Simple S/MIME uncompression example */
+#include <openssl/pem.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL;
+ CMS_ContentInfo *cms = NULL;
+ int ret = 1;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Open compressed content */
+
+ in = BIO_new_file("smcomp.txt", "r");
+
+ if (!in)
+ goto err;
+
+ /* Sign content */
+ cms = SMIME_read_CMS(in, NULL);
+
+ if (!cms)
+ goto err;
+
+ out = BIO_new_file("smuncomp.txt", "w");
+ if (!out)
+ goto err;
+
+ /* Uncompress S/MIME message */
+ if (!CMS_uncompress(cms, out, NULL, 0))
+ goto err;
+
+ ret = 0;
+
+ err:
+
+ if (ret) {
+ fprintf(stderr, "Error Uncompressing Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ CMS_ContentInfo_free(cms);
+ BIO_free(in);
+ BIO_free(out);
+ return ret;
+}
diff --git a/demos/cms/cms_ver.c b/demos/cms/cms_ver.c
new file mode 100644
index 000000000000..3c0a7aa19ede
--- /dev/null
+++ b/demos/cms/cms_ver.c
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2008-2016 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
+ */
+
+/* Simple S/MIME verification example */
+#include <openssl/pem.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL, *cont = NULL;
+ X509_STORE *st = NULL;
+ X509 *cacert = NULL;
+ CMS_ContentInfo *cms = NULL;
+
+ int ret = 1;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Set up trusted CA certificate store */
+
+ st = X509_STORE_new();
+ if (st == NULL)
+ goto err;
+
+ /* Read in CA certificate */
+ tbio = BIO_new_file("cacert.pem", "r");
+
+ if (tbio == NULL)
+ goto err;
+
+ cacert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ if (cacert == NULL)
+ goto err;
+
+ if (!X509_STORE_add_cert(st, cacert))
+ goto err;
+
+ /* Open message being verified */
+
+ in = BIO_new_file("smout.txt", "r");
+
+ if (in == NULL)
+ goto err;
+
+ /* parse message */
+ cms = SMIME_read_CMS(in, &cont);
+
+ if (cms == NULL)
+ goto err;
+
+ /* File to output verified content to */
+ out = BIO_new_file("smver.txt", "w");
+ if (out == NULL)
+ goto err;
+
+ if (!CMS_verify(cms, NULL, st, cont, out, 0)) {
+ fprintf(stderr, "Verification Failure\n");
+ goto err;
+ }
+
+ fprintf(stderr, "Verification Successful\n");
+
+ ret = 0;
+
+ err:
+
+ if (ret) {
+ fprintf(stderr, "Error Verifying Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ X509_STORE_free(st);
+ CMS_ContentInfo_free(cms);
+ X509_free(cacert);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+ return ret;
+}
diff --git a/demos/cms/comp.txt b/demos/cms/comp.txt
new file mode 100644
index 000000000000..1672328e7735
--- /dev/null
+++ b/demos/cms/comp.txt
@@ -0,0 +1,22 @@
+Content-type: text/plain
+
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
+Some Text To be Compressed
diff --git a/demos/cms/encr.txt b/demos/cms/encr.txt
new file mode 100644
index 000000000000..0eceb407b53e
--- /dev/null
+++ b/demos/cms/encr.txt
@@ -0,0 +1,3 @@
+Content-type: text/plain
+
+Sample OpenSSL Data for CMS encryption
diff --git a/demos/cms/sign.txt b/demos/cms/sign.txt
new file mode 100644
index 000000000000..c3f9d73d65ec
--- /dev/null
+++ b/demos/cms/sign.txt
@@ -0,0 +1,3 @@
+Content-type: text/plain
+
+Test OpenSSL CMS Signed Content
diff --git a/demos/cms/signer.pem b/demos/cms/signer.pem
new file mode 100644
index 000000000000..4bbf7a69f382
--- /dev/null
+++ b/demos/cms/signer.pem
@@ -0,0 +1,52 @@
+-----BEGIN CERTIFICATE-----
+MIIELDCCApSgAwIBAgIIcsOElVeHzfQwDQYJKoZIhvcNAQELBQAwVzELMAkGA1UE
+BhMCVUsxEjAQBgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEcMBoGA1UEAwwTVGVzdCBTL01JTUUgUm9vdCBDQTAgFw0xODA2MTQxMjQ2Mjha
+GA8yMTE4MDYxNDEyNDYyOFowVjELMAkGA1UEBhMCVUsxJTAjBgNVBAMMHE9wZW5T
+U0wgdGVzdCBTL01JTUUgc2lnbmVyIDExIDAeBgkqhkiG9w0BCQEWEXRlc3QxQG9w
+ZW5zc2wub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1vvSgaL1
+byi9AE8Ep3v7Yv36JxYywaZhUy8dEFRiYn6NsVhhNo6SK1Mp8daQ0MZoMzbT1aKp
+JTLTgDJZHit2t1d6l3aWJG+cbcLua+XKowaZjj6rirB390fuL4qt5PiAb571QFtu
+L8apcydwGEdkaPRuCnvctN8VcZPTKh+M8VEESyxk5K37QYKaAB6ItWR5KhjiAuDt
+zsJbjEtOvGtmu2FRCU47GzfkdjYo7tY38WTY+2WWh+idKErtmYSinmhE0H7+yoJB
+s1VCI+cq5tVW+oEO9HF4vEDEUykEFFPsCEkIWM+RjCgK8cRSCpg6VQr+ZTii6k7C
+m9CP81QhUoV3QwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1P
+cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUg1DE7OaNqMQQ
+8Z1bvjhnlisxfsMwHwYDVR0jBBgwFoAUpJjGgWED0xBnKntZmlNiAzjC0HswDQYJ
+KoZIhvcNAQELBQADggGBAGxAivCwPsAYmMZfVJTELWNNMBzKzmeRvrp6k/6S74Pw
+LDEhTnslCV4U1gTSd3nQ+LRm1fkzxLA12A/rlqN51P8B+hyVSMN9dj54YUcFd+KO
+XhkSDrSpph6hRqGy8zqELzlb1Q8yoIBclEmyv+CkXMrpnm+4JL4kzyj/iBRkZTDz
+ns15jJD9KHgrOnclaoDRkOT6lGbsd3j+aviKEj8ZILufSMw+W2YORy3nSAencjbO
+ezivVujqm+pjkfqdCS1HcFB7LhQEILfFqkssw8YmtJVrM9LF8VIcqueXbVZmeS/1
+QV5B7OEmtsM+NkoLF5ldWdPQvmftbShh+AAlpcsmqiRefQgA3aQn6YOnOHnnQwgB
+oQRNjQXsjgxV4t2HFYpwkK41kx4HToVGciPNMkndzfY/GJmgXsXfB6/AfUfhLTDv
+tbws1MZhaCNOffw3/SVS2nLREMFCGn5uAgNkqssWqeWJu3910XF640tqPBj5YGFc
+fykwWNhG5xS04EHpztgKdQ==
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEA1vvSgaL1byi9AE8Ep3v7Yv36JxYywaZhUy8dEFRiYn6NsVhh
+No6SK1Mp8daQ0MZoMzbT1aKpJTLTgDJZHit2t1d6l3aWJG+cbcLua+XKowaZjj6r
+irB390fuL4qt5PiAb571QFtuL8apcydwGEdkaPRuCnvctN8VcZPTKh+M8VEESyxk
+5K37QYKaAB6ItWR5KhjiAuDtzsJbjEtOvGtmu2FRCU47GzfkdjYo7tY38WTY+2WW
+h+idKErtmYSinmhE0H7+yoJBs1VCI+cq5tVW+oEO9HF4vEDEUykEFFPsCEkIWM+R
+jCgK8cRSCpg6VQr+ZTii6k7Cm9CP81QhUoV3QwIDAQABAoIBAQC6LCWmIisNcmgK
+RmOvbszKc0sYYj7eOGl8EgbHR2xUA2hNNk4pYtnuLvzZ84hBZDCEeWyFS3HTRuql
+z/QhDl6mc1k0pXtsXkNHQlIamksbVvHPnzIKzrt1J5N7FEt3SERhZXTZoNQRB6di
+k7qdK+YmhdZtucnt0GrPisaJaf0yU/EjLuX+MU/0Xrc23lVhR3yqYhaOhWvrxTHM
+evykI0kOL+gU58eN2eWE4ELjS2z+njKDqcEyeIy00FdBAtCoKjMsWpRytKNmcFm9
+LdtMmizskF8VS3+XsDbkseIODx1xJ65IFmHHMV2xLG5/+bQppkB8JuE3EDrtFiUJ
+lGdfmBlxAoGBAP3Asg0drdunv7imeEOGpyj5JwF1hCVQ71IBGdqTr3aPqOlDH/io
+up7t+VBuSLqj1P20HygNjow+ALw/Ko+a0icodg7QA2Co0/RiBwa+u2SgpYDqC9Kt
+KIdRcv+NXkhXF/DLIn0jJvI53OtKsbgTv/C+aCipblofnO9sF4AhShq1AoGBANjj
+Ou0czloNORbk3qAxLi4b5P/YOyZBJDa0zijFdD1jImfOeyNFXeg2ID+8ZjDkP/eP
+pLy/Gt/8bVb+O+9wMOho3kWKZBN3O2VsLJYakAehDsC5ax7i2HtEqg1L1krW2duS
+POiKg3qNjETM30zTA4pHwkNAETIktResze7SRm0XAoGABH7KaLMS5mZFXjcMwF19
+TpuDVmJHkgWqB7DfTWD6ZcZLvr4irdwHWlNq7ELX5P6MAmaTerkqwk9C4hLYZSzf
+9jOgS8jhlm/HOXgXGcZ9OV4jMHJ0/Sl2I1eNCvvtJKjuUqS2mrLpuLbPtBdhqJoo
+91HYNIgz3ULcG921WN6+GlUCgYEA066T6LDgxgt52NpwXrEhfWdETmDg+ilCCxLU
+0/5DwVZsUhy5Gmeti+Kn/w0GQFnGBP1xr7ZlqI9auDlSjhNV6L/RkNXNbyJEGm1F
+5wrt4ERVfcx6vJ5y43zU7D1EXa7s2t0UDXKDeK2GZe//UZ/yKJh5BeIV5nblOMI0
+DA+3JOkCgYEA80QGLjGlCvxKceVbuohbIZ1+/EoXPq993ER9S8D2MTGATsEcygtF
+rM8JcHTv75sjycqu68BAQr1Z5qwwrMyY0vWVEorKzvAXEWolC67asR4cDutOd+qy
+WlEIyojX45GwHCHpcbVRiGRWuj3kwkc+WzdgusBoAJrPCigES/Cr8uA=
+-----END RSA PRIVATE KEY-----
diff --git a/demos/cms/signer2.pem b/demos/cms/signer2.pem
new file mode 100644
index 000000000000..52827297e8a3
--- /dev/null
+++ b/demos/cms/signer2.pem
@@ -0,0 +1,52 @@
+-----BEGIN CERTIFICATE-----
+MIIELDCCApSgAwIBAgIIcsOElVeHzfUwDQYJKoZIhvcNAQELBQAwVzELMAkGA1UE
+BhMCVUsxEjAQBgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEcMBoGA1UEAwwTVGVzdCBTL01JTUUgUm9vdCBDQTAgFw0xODA2MTQxMjQ2Mjha
+GA8yMTE4MDYxNDEyNDYyOFowVjELMAkGA1UEBhMCVUsxJTAjBgNVBAMMHE9wZW5T
+U0wgdGVzdCBTL01JTUUgc2lnbmVyIDIxIDAeBgkqhkiG9w0BCQEWEXRlc3QyQG9w
+ZW5zc2wub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1ledrM9R
+3x3bZypZAEi00DJYAmLS5F6Gg3+xpjE745UWKrjDAY5KswavKKa3vZxoUz2omNSg
+4nYfLSowq7AI3VnZ8LwNo8lAeo7AX9elrsmzQzhr2DCdCdbRhCWoiS/ba5tKIhlb
+gFnP+pB8jhC9qZuQJkpVaivywMW8rA9DRbeDcQjDKhUi0ukVDYHDd9+FtNM3H1t3
+AUGWBecjWYa4hXC3CsH3+cFBZKjAepL74hqiEfsEyzKesft3NFd1AcVY9W5MRCK4
+lUFiDbBtIgPkvPJeoEs/kFp3+OvJFDwi4K4Z6XzALyT0LXNx6w3kSfx0TLdNjXLD
+O9a2dzwhHhPtCQIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1P
+cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUYJEUXnMb/ux0
+WrzSh+bnhpi6GS0wHwYDVR0jBBgwFoAUpJjGgWED0xBnKntZmlNiAzjC0HswDQYJ
+KoZIhvcNAQELBQADggGBAFbrwfsSciDFI97c7oqS8jtxOSa3c4B7xhmcgUkYCiaD
+7mbZuqTUf4ltJJZXP/TJ44fhL0zVAvRXSXw1LE3YvLGOlBc6dM3D7DyL5pfUTUBY
+ICt+NLfG5iHtkiZPPSfK2t5f4UGFwU/ERT62sLu4keLI5igi9J2jKSykN3u5SQ3s
+Zsennow5zUsFkcz9hkB4RczlHRogA0SgVhELQbN1nYIqJJDRFZL+CmarDRTFMilk
+7dXCacw6xt9vIc3ZXO+pu2g1ezgSPwOoUykQcL3UhAEIIyt+TRe3fafh5TXwd8tr
+FAecAuz5Mqsmek5nEW9ZeYmxNz5VFwc4F61y4xFj7lI0frLCCAu3gVoqiQrW+WwR
+e27z1Nm4uUcduFqj45Pu2eTyV3LZtLUbFvL5ZSPUCSk1wVmC2otX8ksFDDTO1rIy
+l5Qd1g1P8bLuj8NG98J2zVOabtaxYCAIBPZ3dUh2eNrPKoLAvrgKh1MH+K2Eh5Oy
+z1T4Eu+e5Kq/uQkZpI5QzA==
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEA1ledrM9R3x3bZypZAEi00DJYAmLS5F6Gg3+xpjE745UWKrjD
+AY5KswavKKa3vZxoUz2omNSg4nYfLSowq7AI3VnZ8LwNo8lAeo7AX9elrsmzQzhr
+2DCdCdbRhCWoiS/ba5tKIhlbgFnP+pB8jhC9qZuQJkpVaivywMW8rA9DRbeDcQjD
+KhUi0ukVDYHDd9+FtNM3H1t3AUGWBecjWYa4hXC3CsH3+cFBZKjAepL74hqiEfsE
+yzKesft3NFd1AcVY9W5MRCK4lUFiDbBtIgPkvPJeoEs/kFp3+OvJFDwi4K4Z6XzA
+LyT0LXNx6w3kSfx0TLdNjXLDO9a2dzwhHhPtCQIDAQABAoIBAGMEGJfTMiwS+979
+ph3GeJjRGO0JQAk1TYiDvcpbZiItJg9YSOV4GTP4u4PY+HqEPYFus2relu/mx2Iy
+4kb9zCqNLmvSQ67M8pdrSJ093pEPJlvAPbmiQ3lfHmyghOnTDNb55tY3xphVZQmI
+I7HxM9ydO4skva6NXNgGwLDvYBFc6z6d95ai/WEFWHOt5Mt7OVOWAHQ0lAOofWLA
+2BwKmrQnCwMvm1TMoKaAU/ngTToUGBMIN1HwRcY6qDraZte5o3EDRABHB78OHrSu
+I/Eoi//5C8A7iZ5Y189lMbahIN6xVMwHwwIqLptTV2GNZOKSiIXnM06vIf4CPZKl
+3VlwBgECgYEA/BKnn23KtefA906QNkrIOXASLEE1T77NlTYIRDTsUoz6XTVSvOCI
+ARxdsoLwFko5ICMhti9S/1G/MYH0BoJN8rbzvjmZDfwF612p0AYALyBlRgW+ID9L
+41CJQcLWxeiQd/GcrUZmudVNUGXa8nsNHmFleGLchXeqU7M6fljJOkECgYEA2a56
+yvYQgMF/SIPkxU1+WcQC6+JGc+ax220/lysBsDb4SkXomfGtFWbenxwamuQu+n67
+DJWi9oJIi9Vj4eKOXS6vjCAkYeLgCpK6S26frPtxJuZwl/lF7mFl8Z4ZnJeiFJ4h
+AXt5r9vqnOZtCnLqRRAlqF5OswWgv/mhJ6jpMMkCgYBMPaAxWlXLexMkOcDoiunQ
+ZZM5i2eCfSVVEgiiCJfJyBYZhv1FX2wDWf8E9RGEzGJG1BloLxwdWS5I3RNfvJ2y
+4Z8LVAR09Fsd+zBXWNlJZ7T53tbIjhx33m4FU9b9+P9pJ8zJo9eCMX+253e3i3xG
+ShMUvGIShEUiF72DZXtHgQKBgDi867CfNmn5BW4nQqfSrQ5EsuY80lQ/WzhwX1TN
+luERUuI5GomVnqGncHtUXfLlawFLqwF6t0E9cB9SfXhRDv5mvsbtUc5Zzj+zQu+K
+ZAA4gaO8CLjz9jBOHr49kTtpootxM/Uo8+zMi3hd7yn8Def2b3pVKnorC10+eazW
+sAFRAoGAet6fQbQD+4vZ1oukZcZhmVlIWTSZJ1vAGCcT/3E40pqpPY+Ho56Lcwh0
+9f4TAykuGwFgqvZvR8yD2gpuISYGYplWqa1N6qxMaiVzmY5q1XW+O74xRH5Kz5fr
+D+3j2x4EiyG7AYyZMOphDtBd/TSQQMYmGW6PiyM9ceIVnDK1Dd4=
+-----END RSA PRIVATE KEY-----
diff --git a/demos/digest/BIO_f_md.c b/demos/digest/BIO_f_md.c
new file mode 100644
index 000000000000..2ecc53e137ae
--- /dev/null
+++ b/demos/digest/BIO_f_md.c
@@ -0,0 +1,122 @@
+/*-
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*-
+ * Example of using EVP_MD_fetch and EVP_Digest* methods to calculate
+ * a digest of static buffers
+ * You can find SHA3 test vectors from NIST here:
+ * https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha-3bytetestvectors.zip
+ * For example, contains these lines:
+ Len = 80
+ Msg = 1ca984dcc913344370cf
+ MD = 6915ea0eeffb99b9b246a0e34daf3947852684c3d618260119a22835659e4f23d4eb66a15d0affb8e93771578f5e8f25b7a5f2a55f511fb8b96325ba2cd14816
+ * use xxd convert the hex message string to binary input for BIO_f_md:
+ * echo "1ca984dcc913344370cf" | xxd -r -p | ./BIO_f_md
+ * and then verify the output matches MD above.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/bio.h>
+#include <openssl/evp.h>
+
+/*-
+ * This demonstration will show how to digest data using
+ * a BIO configured with a message digest
+ * A message digest name may be passed as an argument.
+ * The default digest is SHA3-512
+ */
+
+int main(int argc, char * argv[])
+{
+ int result = 1;
+ OSSL_LIB_CTX *library_context = NULL;
+ BIO *input = NULL;
+ BIO *bio_digest = NULL;
+ EVP_MD *md = NULL;
+ unsigned char buffer[512];
+ size_t readct, writect;
+ size_t digest_size;
+ char *digest_value=NULL;
+ int j;
+
+ input = BIO_new_fd( fileno(stdin), 1 );
+ if (input == NULL) {
+ fprintf(stderr, "BIO_new_fd() for stdin returned NULL\n");
+ goto cleanup;
+ }
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto cleanup;
+ }
+
+ /*
+ * Fetch a message digest by name
+ * The algorithm name is case insensitive.
+ * See providers(7) for details about algorithm fetching
+ */
+ md = EVP_MD_fetch( library_context, "SHA3-512", NULL );
+ if (md == NULL) {
+ fprintf(stderr, "EVP_MD_fetch did not find SHA3-512.\n");
+ goto cleanup;
+ }
+ digest_size = EVP_MD_get_size(md);
+ digest_value = OPENSSL_malloc(digest_size);
+ if (digest_value == NULL) {
+ fprintf(stderr, "Can't allocate %lu bytes for the digest value.\n", (unsigned long)digest_size);
+ goto cleanup;
+ }
+ /* Make a bio that uses the digest */
+ bio_digest = BIO_new(BIO_f_md());
+ if (bio_digest == NULL) {
+ fprintf(stderr, "BIO_new(BIO_f_md()) returned NULL\n");
+ goto cleanup;
+ }
+ /* set our bio_digest BIO to digest data */
+ if (BIO_set_md(bio_digest,md) != 1) {
+ fprintf(stderr, "BIO_set_md failed.\n");
+ goto cleanup;
+ }
+ /*-
+ * We will use BIO chaining so that as we read, the digest gets updated
+ * See the man page for BIO_push
+ */
+ BIO *reading = BIO_push( bio_digest, input );
+
+ while( BIO_read(reading, buffer, sizeof(buffer)) > 0 )
+ ;
+
+ /*-
+ * BIO_gets must be used to calculate the final
+ * digest value and then copy it to digest_value.
+ */
+ if (BIO_gets(bio_digest, digest_value, digest_size) != digest_size) {
+ fprintf(stderr, "BIO_gets(bio_digest) failed\n");
+ goto cleanup;
+ }
+ for (j=0; j<digest_size; j++) {
+ fprintf(stdout, "%02x", (unsigned char)digest_value[j]);
+ }
+ fprintf(stdout, "\n");
+ result = 0;
+
+cleanup:
+ if (result != 0)
+ ERR_print_errors_fp(stderr);
+
+ OPENSSL_free(digest_value);
+ BIO_free(input);
+ BIO_free(bio_digest);
+ EVP_MD_free(md);
+ OSSL_LIB_CTX_free(library_context);
+
+ return result;
+}
diff --git a/demos/digest/EVP_MD_demo.c b/demos/digest/EVP_MD_demo.c
new file mode 100644
index 000000000000..99589bd3446b
--- /dev/null
+++ b/demos/digest/EVP_MD_demo.c
@@ -0,0 +1,183 @@
+/*-
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * Example of using EVP_MD_fetch and EVP_Digest* methods to calculate
+ * a digest of static buffers
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+
+/*-
+ * This demonstration will show how to digest data using
+ * the soliloqy from Hamlet scene 1 act 3
+ * The soliloqy is split into two parts to demonstrate using EVP_DigestUpdate
+ * more than once.
+ */
+
+const char * hamlet_1 =
+ "To be, or not to be, that is the question,\n"
+ "Whether tis nobler in the minde to suffer\n"
+ "The Å¿lings and arrowes of outragious fortune,\n"
+ "Or to take Armes again in a sea of troubles,\n"
+ "And by opposing, end them, to die to sleep;\n"
+ "No more, and by a sleep, to say we end\n"
+ "The heart-ache, and the thousand natural shocks\n"
+ "That flesh is heir to? tis a consumation\n"
+ "Devoutly to be wished. To die to sleep,\n"
+ "To sleepe, perchance to dreame, Aye, there's the rub,\n"
+ "For in that sleep of death what dreams may come\n"
+ "When we haue shuffled off this mortal coil\n"
+ "Must give us pause. There's the respect\n"
+ "That makes calamity of so long life:\n"
+ "For who would bear the Ships and Scorns of time,\n"
+ "The oppressor's wrong, the proud man's Contumely,\n"
+ "The pangs of dispised love, the Law's delay,\n"
+;
+const char * hamlet_2 =
+ "The insolence of Office, and the spurns\n"
+ "That patient merit of the'unworthy takes,\n"
+ "When he himself might his Quietas make\n"
+ "With a bare bodkin? Who would fardels bear,\n"
+ "To grunt and sweat under a weary life,\n"
+ "But that the dread of something after death,\n"
+ "The undiscovered country, from whose bourn\n"
+ "No traveller returns, puzzles the will,\n"
+ "And makes us rather bear those ills we have,\n"
+ "Then fly to others we know not of?\n"
+ "Thus conscience does make cowards of us all,\n"
+ "And thus the native hue of Resolution\n"
+ "Is sickled o'er with the pale cast of Thought,\n"
+ "And enterprises of great pith and moment,\n"
+ "With this regard their currents turn awry,\n"
+ "And lose the name of Action. Soft you now,\n"
+ "The fair Ophelia? Nymph in thy Orisons\n"
+ "Be all my sins remember'd.\n"
+;
+
+/* The known value of the SHA3-512 digest of the above soliloqy */
+const unsigned char known_answer[] = {
+ 0xbb, 0x69, 0xf8, 0x09, 0x9c, 0x2e, 0x00, 0x3d,
+ 0xa4, 0x29, 0x5f, 0x59, 0x4b, 0x89, 0xe4, 0xd9,
+ 0xdb, 0xa2, 0xe5, 0xaf, 0xa5, 0x87, 0x73, 0x9d,
+ 0x83, 0x72, 0xcf, 0xea, 0x84, 0x66, 0xc1, 0xf9,
+ 0xc9, 0x78, 0xef, 0xba, 0x3d, 0xe9, 0xc1, 0xff,
+ 0xa3, 0x75, 0xc7, 0x58, 0x74, 0x8e, 0x9c, 0x1d,
+ 0x14, 0xd9, 0xdd, 0xd1, 0xfd, 0x24, 0x30, 0xd6,
+ 0x81, 0xca, 0x8f, 0x78, 0x29, 0x19, 0x9a, 0xfe,
+};
+
+int demonstrate_digest(void)
+{
+ OSSL_LIB_CTX *library_context;
+ int result = 0;
+ const char *option_properties = NULL;
+ EVP_MD *message_digest = NULL;
+ EVP_MD_CTX *digest_context = NULL;
+ unsigned int digest_length;
+ unsigned char *digest_value = NULL;
+ int j;
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto cleanup;
+ }
+
+ /*
+ * Fetch a message digest by name
+ * The algorithm name is case insensitive.
+ * See providers(7) for details about algorithm fetching
+ */
+ message_digest = EVP_MD_fetch(library_context,
+ "SHA3-512", option_properties);
+ if (message_digest == NULL) {
+ fprintf(stderr, "EVP_MD_fetch could not find SHA3-512.");
+ goto cleanup;
+ }
+ /* Determine the length of the fetched digest type */
+ digest_length = EVP_MD_get_size(message_digest);
+ if (digest_length <= 0) {
+ fprintf(stderr, "EVP_MD_get_size returned invalid size.\n");
+ goto cleanup;
+ }
+
+ digest_value = OPENSSL_malloc(digest_length);
+ if (digest_value == NULL) {
+ fprintf(stderr, "No memory.\n");
+ goto cleanup;
+ }
+ /*
+ * Make a message digest context to hold temporary state
+ * during digest creation
+ */
+ digest_context = EVP_MD_CTX_new();
+ if (digest_context == NULL) {
+ fprintf(stderr, "EVP_MD_CTX_new failed.\n");
+ goto cleanup;
+ }
+ /*
+ * Initialize the message digest context to use the fetched
+ * digest provider
+ */
+ if (EVP_DigestInit(digest_context, message_digest) != 1) {
+ fprintf(stderr, "EVP_DigestInit failed.\n");
+ goto cleanup;
+ }
+ /* Digest parts one and two of the soliloqy */
+ if (EVP_DigestUpdate(digest_context, hamlet_1, strlen(hamlet_1)) != 1) {
+ fprintf(stderr, "EVP_DigestUpdate(hamlet_1) failed.\n");
+ goto cleanup;
+ }
+ if (EVP_DigestUpdate(digest_context, hamlet_2, strlen(hamlet_2)) != 1) {
+ fprintf(stderr, "EVP_DigestUpdate(hamlet_2) failed.\n");
+ goto cleanup;
+ }
+ if (EVP_DigestFinal(digest_context, digest_value, &digest_length) != 1) {
+ fprintf(stderr, "EVP_DigestFinal() failed.\n");
+ goto cleanup;
+ }
+ for (j=0; j<digest_length; j++) {
+ fprintf(stdout, "%02x", digest_value[j]);
+ }
+ fprintf(stdout, "\n");
+ /* Check digest_value against the known answer */
+ if ((size_t)digest_length != sizeof(known_answer)) {
+ fprintf(stdout, "Digest length(%d) not equal to known answer length(%lu).\n",
+ digest_length, sizeof(known_answer));
+ } else if (memcmp(digest_value, known_answer, digest_length) != 0) {
+ for (j=0; j<sizeof(known_answer); j++) {
+ fprintf(stdout, "%02x", known_answer[j] );
+ }
+ fprintf(stdout, "\nDigest does not match known answer\n");
+ } else {
+ fprintf(stdout, "Digest computed properly.\n");
+ result = 1;
+ }
+
+
+cleanup:
+ if (result != 1)
+ ERR_print_errors_fp(stderr);
+ /* OpenSSL free functions will ignore NULL arguments */
+ EVP_MD_CTX_free(digest_context);
+ OPENSSL_free(digest_value);
+ EVP_MD_free(message_digest);
+
+ OSSL_LIB_CTX_free(library_context);
+ return result;
+}
+
+int main(void)
+{
+ return demonstrate_digest() == 0;
+}
diff --git a/demos/digest/EVP_MD_stdin.c b/demos/digest/EVP_MD_stdin.c
new file mode 100644
index 000000000000..71a3d325a364
--- /dev/null
+++ b/demos/digest/EVP_MD_stdin.c
@@ -0,0 +1,134 @@
+/*-
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*-
+ * Example of using EVP_MD_fetch and EVP_Digest* methods to calculate
+ * a digest of static buffers
+ * You can find SHA3 test vectors from NIST here:
+ * https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha-3bytetestvectors.zip
+ * For example, contains these lines:
+ Len = 80
+ Msg = 1ca984dcc913344370cf
+ MD = 6915ea0eeffb99b9b246a0e34daf3947852684c3d618260119a22835659e4f23d4eb66a15d0affb8e93771578f5e8f25b7a5f2a55f511fb8b96325ba2cd14816
+ * use xxd convert the hex message string to binary input for EVP_MD_stdin:
+ * echo "1ca984dcc913344370cf" | xxd -r -p | ./EVP_MD_stdin
+ * and then verify the output matches MD above.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+
+/*-
+ * This demonstration will show how to digest data using
+ * a BIO created to read from stdin
+ */
+
+int demonstrate_digest(BIO *input)
+{
+ OSSL_LIB_CTX *library_context = NULL;
+ int result = 0;
+ const char * option_properties = NULL;
+ EVP_MD *message_digest = NULL;
+ EVP_MD_CTX *digest_context = NULL;
+ unsigned int digest_length;
+ unsigned char *digest_value = NULL;
+ unsigned char buffer[512];
+ int ii;
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto cleanup;
+ }
+
+ /*
+ * Fetch a message digest by name
+ * The algorithm name is case insensitive.
+ * See providers(7) for details about algorithm fetching
+ */
+ message_digest = EVP_MD_fetch(library_context,
+ "SHA3-512", option_properties);
+ if (message_digest == NULL) {
+ fprintf(stderr, "EVP_MD_fetch could not find SHA3-512.");
+ ERR_print_errors_fp(stderr);
+ OSSL_LIB_CTX_free(library_context);
+ return 0;
+ }
+ /* Determine the length of the fetched digest type */
+ digest_length = EVP_MD_get_size(message_digest);
+ if (digest_length <= 0) {
+ fprintf(stderr, "EVP_MD_get_size returned invalid size.\n");
+ goto cleanup;
+ }
+
+ digest_value = OPENSSL_malloc(digest_length);
+ if (digest_value == NULL) {
+ fprintf(stderr, "No memory.\n");
+ goto cleanup;
+ }
+ /*
+ * Make a message digest context to hold temporary state
+ * during digest creation
+ */
+ digest_context = EVP_MD_CTX_new();
+ if (digest_context == NULL) {
+ fprintf(stderr, "EVP_MD_CTX_new failed.\n");
+ ERR_print_errors_fp(stderr);
+ goto cleanup;
+ }
+ /*
+ * Initialize the message digest context to use the fetched
+ * digest provider
+ */
+ if (EVP_DigestInit(digest_context, message_digest) != 1) {
+ fprintf(stderr, "EVP_DigestInit failed.\n");
+ ERR_print_errors_fp(stderr);
+ goto cleanup;
+ }
+ while ((ii = BIO_read(input, buffer, sizeof(buffer))) > 0) {
+ if (EVP_DigestUpdate(digest_context, buffer, ii) != 1) {
+ fprintf(stderr, "EVP_DigestUpdate() failed.\n");
+ goto cleanup;
+ }
+ }
+ if (EVP_DigestFinal(digest_context, digest_value, &digest_length) != 1) {
+ fprintf(stderr, "EVP_DigestFinal() failed.\n");
+ goto cleanup;
+ }
+ result = 1;
+ for (ii=0; ii<digest_length; ii++) {
+ fprintf(stdout, "%02x", digest_value[ii]);
+ }
+ fprintf(stdout, "\n");
+
+cleanup:
+ if (result != 1)
+ ERR_print_errors_fp(stderr);
+ /* OpenSSL free functions will ignore NULL arguments */
+ EVP_MD_CTX_free(digest_context);
+ OPENSSL_free(digest_value);
+ EVP_MD_free(message_digest);
+
+ OSSL_LIB_CTX_free(library_context);
+ return result;
+}
+
+int main(void)
+{
+ int result = 1;
+ BIO *input = BIO_new_fd( fileno(stdin), 1 );
+
+ if (input != NULL) {
+ result = demonstrate_digest(input);
+ BIO_free(input);
+ }
+ return result;
+}
diff --git a/demos/digest/EVP_MD_xof.c b/demos/digest/EVP_MD_xof.c
new file mode 100644
index 000000000000..f31c047164b1
--- /dev/null
+++ b/demos/digest/EVP_MD_xof.c
@@ -0,0 +1,132 @@
+/*-
+ * Copyright 2022 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 <string.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/core_names.h>
+
+/*
+ * Example of using an extendable-output hash function (XOF). A XOF is a hash
+ * function with configurable output length and which can generate an
+ * arbitrarily large output.
+ *
+ * This example uses SHAKE256, an extendable output variant of SHA3 (Keccak).
+ *
+ * To generate different output lengths, you can pass a single integer argument
+ * on the command line, which is the output size in bytes. By default, a 20-byte
+ * output is generated and (for this length only) a known answer test is
+ * performed.
+ */
+
+/* Our input to the XOF hash function. */
+const char message[] = "This is a test message.";
+
+/* Expected output when an output length of 20 bytes is used. */
+static const char known_answer[] = {
+ 0x52, 0x97, 0x93, 0x78, 0x27, 0x58, 0x7d, 0x62,
+ 0x8b, 0x00, 0x25, 0xb5, 0xec, 0x39, 0x5e, 0x2d,
+ 0x7f, 0x3e, 0xd4, 0x19
+};
+
+/*
+ * A property query used for selecting the SHAKE256 implementation.
+ */
+static const char *propq = NULL;
+
+int main(int argc, char **argv)
+{
+ int rv = 1;
+ OSSL_LIB_CTX *libctx = NULL;
+ EVP_MD *md = NULL;
+ EVP_MD_CTX *ctx = NULL;
+ unsigned int digest_len = 20;
+ int digest_len_i;
+ unsigned char *digest = NULL;
+
+ /* Allow digest length to be changed for demonstration purposes. */
+ if (argc > 1) {
+ digest_len_i = atoi(argv[1]);
+ if (digest_len_i <= 0) {
+ fprintf(stderr, "Specify a non-negative digest length\n");
+ goto end;
+ }
+
+ digest_len = (unsigned int)digest_len_i;
+ }
+
+ /*
+ * Retrieve desired algorithm. This must be a hash algorithm which supports
+ * XOF.
+ */
+ md = EVP_MD_fetch(libctx, "SHAKE256", propq);
+ if (md == NULL) {
+ fprintf(stderr, "Failed to retrieve SHAKE256 algorithm\n");
+ goto end;
+ }
+
+ /* Create context. */
+ ctx = EVP_MD_CTX_new();
+ if (ctx == NULL) {
+ fprintf(stderr, "Failed to create digest context\n");
+ goto end;
+ }
+
+ /* Initialize digest context. */
+ if (EVP_DigestInit(ctx, md) == 0) {
+ fprintf(stderr, "Failed to initialize digest\n");
+ goto end;
+ }
+
+ /*
+ * Feed our message into the digest function.
+ * This may be called multiple times.
+ */
+ if (EVP_DigestUpdate(ctx, message, sizeof(message)) == 0) {
+ fprintf(stderr, "Failed to hash input message\n");
+ goto end;
+ }
+
+ /* Allocate enough memory for our digest length. */
+ digest = OPENSSL_malloc(digest_len);
+ if (digest == NULL) {
+ fprintf(stderr, "Failed to allocate memory for digest\n");
+ goto end;
+ }
+
+ /* Get computed digest. The digest will be of whatever length we specify. */
+ if (EVP_DigestFinalXOF(ctx, digest, digest_len) == 0) {
+ fprintf(stderr, "Failed to finalize hash\n");
+ goto end;
+ }
+
+ printf("Output digest:\n");
+ BIO_dump_indent_fp(stdout, digest, digest_len, 2);
+
+ /* If digest length is 20 bytes, check it matches our known answer. */
+ if (digest_len == 20) {
+ /*
+ * Always use a constant-time function such as CRYPTO_memcmp
+ * when comparing cryptographic values. Do not use memcmp(3).
+ */
+ if (CRYPTO_memcmp(digest, known_answer, sizeof(known_answer)) != 0) {
+ fprintf(stderr, "Output does not match expected result\n");
+ goto end;
+ }
+ }
+
+ rv = 0;
+end:
+ OPENSSL_free(digest);
+ EVP_MD_CTX_free(ctx);
+ EVP_MD_free(md);
+ OSSL_LIB_CTX_free(libctx);
+ return rv;
+}
diff --git a/demos/digest/Makefile b/demos/digest/Makefile
new file mode 100644
index 000000000000..0bfb6dd5f044
--- /dev/null
+++ b/demos/digest/Makefile
@@ -0,0 +1,23 @@
+#
+# To run the demos when linked with a shared library (default):
+#
+# LD_LIBRARY_PATH=../.. ./EVP_MD_demo
+
+CFLAGS = -I../../include -g -Wall
+LDFLAGS = -L../..
+LDLIBS = -lcrypto
+
+all: EVP_MD_demo EVP_MD_stdin EVP_MD_xof BIO_f_md
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c $<
+
+EVP_MD_demo: EVP_MD_demo.o
+EVP_MD_stdin: EVP_MD_stdin.o
+EVP_MD_xof: EVP_MD_xof.o
+BIO_f_md: BIO_f_md.o
+
+test: ;
+
+clean:
+ $(RM) *.o EVP_MD_demo EVP_MD_stdin EVP_MD_xof BIO_f_md
diff --git a/demos/encode/Makefile b/demos/encode/Makefile
new file mode 100644
index 000000000000..b88d76b51de3
--- /dev/null
+++ b/demos/encode/Makefile
@@ -0,0 +1,20 @@
+#
+# To run the demos when linked with a shared library (default):
+#
+# LD_LIBRARY_PATH=../.. ./rsa_encode
+
+CFLAGS = -I../../include -g -Wall
+LDFLAGS = -L../..
+LDLIBS = -lcrypto
+
+all: ec_encode rsa_encode
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c $<
+
+%_encode: %_encode.o
+
+test: ;
+
+clean:
+ $(RM) *.o rsa_encode ec_encode
diff --git a/demos/encode/ec_encode.c b/demos/encode/ec_encode.c
new file mode 100644
index 000000000000..8c296fbad852
--- /dev/null
+++ b/demos/encode/ec_encode.c
@@ -0,0 +1,205 @@
+/*-
+ * Copyright 2022 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/decoder.h>
+#include <openssl/encoder.h>
+#include <openssl/evp.h>
+
+/*
+ * Example showing the encoding and decoding of EC public and private keys. A
+ * PEM-encoded EC key is read in from stdin, decoded, and then re-encoded and
+ * output for demonstration purposes. Both public and private keys are accepted.
+ *
+ * This can be used to load EC keys from a file or save EC keys to a file.
+ */
+
+/* A property query used for selecting algorithm implementations. */
+static const char *propq = NULL;
+
+/*
+ * Load a PEM-encoded EC key from a file, optionally decrypting it with a
+ * supplied passphrase.
+ */
+static EVP_PKEY *load_key(OSSL_LIB_CTX *libctx, FILE *f, const char *passphrase)
+{
+ int rv = 0;
+ EVP_PKEY *pkey = NULL;
+ OSSL_DECODER_CTX *dctx = NULL;
+ int selection = 0;
+
+ /*
+ * Create PEM decoder context expecting an EC key.
+ *
+ * For raw (non-PEM-encoded) keys, change "PEM" to "DER".
+ *
+ * The selection argument here specifies whether we are willing to accept a
+ * public key, private key, or either. If it is set to zero, either will be
+ * accepted. If set to EVP_PKEY_KEYPAIR, a private key will be required, and
+ * if set to EVP_PKEY_PUBLIC_KEY, a public key will be required.
+ */
+ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "PEM", NULL, "EC",
+ selection,
+ libctx, propq);
+ if (dctx == NULL) {
+ fprintf(stderr, "OSSL_DECODER_CTX_new_for_pkey() failed\n");
+ goto cleanup;
+ }
+
+ /*
+ * Set passphrase if provided; needed to decrypt encrypted PEM files.
+ * If the input is not encrypted, any passphrase provided is ignored.
+ *
+ * Alternative methods for specifying passphrases exist, such as a callback
+ * (see OSSL_DECODER_CTX_set_passphrase_cb(3)), which may be more useful for
+ * interactive applications which do not know if a passphrase should be
+ * prompted for in advance, or for GUI applications.
+ */
+ if (passphrase != NULL) {
+ if (OSSL_DECODER_CTX_set_passphrase(dctx,
+ (const unsigned char *)passphrase,
+ strlen(passphrase)) == 0) {
+ fprintf(stderr, "OSSL_DECODER_CTX_set_passphrase() failed\n");
+ goto cleanup;
+ }
+ }
+
+ /* Do the decode, reading from file. */
+ if (OSSL_DECODER_from_fp(dctx, f) == 0) {
+ fprintf(stderr, "OSSL_DECODER_from_fp() failed\n");
+ goto cleanup;
+ }
+
+ rv = 1;
+cleanup:
+ OSSL_DECODER_CTX_free(dctx);
+
+ /*
+ * pkey is created by OSSL_DECODER_CTX_new_for_pkey, but we
+ * might fail subsequently, so ensure it's properly freed
+ * in this case.
+ */
+ if (rv == 0) {
+ EVP_PKEY_free(pkey);
+ pkey = NULL;
+ }
+
+ return pkey;
+}
+
+/*
+ * Store a EC public or private key to a file using PEM encoding.
+ *
+ * If a passphrase is supplied, the file is encrypted, otherwise
+ * it is unencrypted.
+ */
+static int store_key(EVP_PKEY *pkey, FILE *f, const char *passphrase)
+{
+ int rv = 0;
+ int selection;
+ OSSL_ENCODER_CTX *ectx = NULL;
+
+ /*
+ * Create a PEM encoder context.
+ *
+ * For raw (non-PEM-encoded) output, change "PEM" to "DER".
+ *
+ * The selection argument controls whether the private key is exported
+ * (EVP_PKEY_KEYPAIR), or only the public key (EVP_PKEY_PUBLIC_KEY). The
+ * former will fail if we only have a public key.
+ *
+ * Note that unlike the decode API, you cannot specify zero here.
+ *
+ * Purely for the sake of demonstration, here we choose to export the whole
+ * key if a passphrase is provided and the public key otherwise.
+ */
+ selection = (passphrase != NULL)
+ ? EVP_PKEY_KEYPAIR
+ : EVP_PKEY_PUBLIC_KEY;
+
+ ectx = OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, "PEM", NULL, propq);
+ if (ectx == NULL) {
+ fprintf(stderr, "OSSL_ENCODER_CTX_new_for_pkey() failed\n");
+ goto cleanup;
+ }
+
+ /*
+ * Set passphrase if provided; the encoded output will then be encrypted
+ * using the passphrase.
+ *
+ * Alternative methods for specifying passphrases exist, such as a callback
+ * (see OSSL_ENCODER_CTX_set_passphrase_cb(3), just as for OSSL_DECODER_CTX;
+ * however you are less likely to need them as you presumably know whether
+ * encryption is desired in advance.
+ *
+ * Note that specifying a passphrase alone is not enough to cause the
+ * key to be encrypted. You must set both a cipher and a passphrase.
+ */
+ if (passphrase != NULL) {
+ /*
+ * Set cipher. Let's use AES-256-CBC, because it is
+ * more quantum resistant.
+ */
+ if (OSSL_ENCODER_CTX_set_cipher(ectx, "AES-256-CBC", propq) == 0) {
+ fprintf(stderr, "OSSL_ENCODER_CTX_set_cipher() failed\n");
+ goto cleanup;
+ }
+
+ /* Set passphrase. */
+ if (OSSL_ENCODER_CTX_set_passphrase(ectx,
+ (const unsigned char *)passphrase,
+ strlen(passphrase)) == 0) {
+ fprintf(stderr, "OSSL_ENCODER_CTX_set_passphrase() failed\n");
+ goto cleanup;
+ }
+ }
+
+ /* Do the encode, writing to the given file. */
+ if (OSSL_ENCODER_to_fp(ectx, f) == 0) {
+ fprintf(stderr, "OSSL_ENCODER_to_fp() failed\n");
+ goto cleanup;
+ }
+
+ rv = 1;
+cleanup:
+ OSSL_ENCODER_CTX_free(ectx);
+ return rv;
+}
+
+int main(int argc, char **argv)
+{
+ int rv = 1;
+ OSSL_LIB_CTX *libctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ const char *passphrase_in = NULL, *passphrase_out = NULL;
+
+ /* usage: ec_encode <passphrase-in> <passphrase-out> */
+ if (argc > 1 && argv[1][0])
+ passphrase_in = argv[1];
+
+ if (argc > 2 && argv[2][0])
+ passphrase_out = argv[2];
+
+ /* Decode PEM key from stdin and then PEM encode it to stdout. */
+ pkey = load_key(libctx, stdin, passphrase_in);
+ if (pkey == NULL) {
+ fprintf(stderr, "Failed to decode key\n");
+ goto cleanup;
+ }
+
+ if (store_key(pkey, stdout, passphrase_out) == 0) {
+ fprintf(stderr, "Failed to encode key\n");
+ goto cleanup;
+ }
+
+ rv = 0;
+cleanup:
+ EVP_PKEY_free(pkey);
+ OSSL_LIB_CTX_free(libctx);
+ return rv;
+}
diff --git a/demos/encode/rsa_encode.c b/demos/encode/rsa_encode.c
new file mode 100644
index 000000000000..2bf6d13e6ff5
--- /dev/null
+++ b/demos/encode/rsa_encode.c
@@ -0,0 +1,202 @@
+/*-
+ * Copyright 2022 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/decoder.h>
+#include <openssl/encoder.h>
+#include <openssl/evp.h>
+
+/*
+ * Example showing the encoding and decoding of RSA public and private keys. A
+ * PEM-encoded RSA key is read in from stdin, decoded, and then re-encoded and
+ * output for demonstration purposes. Both public and private keys are accepted.
+ *
+ * This can be used to load RSA keys from a file or save RSA keys to a file.
+ */
+
+/* A property query used for selecting algorithm implementations. */
+static const char *propq = NULL;
+
+/*
+ * Load a PEM-encoded RSA key from a file, optionally decrypting it with a
+ * supplied passphrase.
+ */
+static EVP_PKEY *load_key(OSSL_LIB_CTX *libctx, FILE *f, const char *passphrase)
+{
+ int rv = 0;
+ EVP_PKEY *pkey = NULL;
+ OSSL_DECODER_CTX *dctx = NULL;
+ int selection = 0;
+
+ /*
+ * Create PEM decoder context expecting an RSA key.
+ *
+ * For raw (non-PEM-encoded) keys, change "PEM" to "DER".
+ *
+ * The selection argument here specifies whether we are willing to accept a
+ * public key, private key, or either. If it is set to zero, either will be
+ * accepted. If set to EVP_PKEY_KEYPAIR, a private key will be required, and
+ * if set to EVP_PKEY_PUBLIC_KEY, a public key will be required.
+ */
+ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "PEM", NULL, "RSA",
+ selection,
+ libctx, propq);
+ if (dctx == NULL) {
+ fprintf(stderr, "OSSL_DECODER_CTX_new_for_pkey() failed\n");
+ goto cleanup;
+ }
+
+ /*
+ * Set passphrase if provided; needed to decrypt encrypted PEM files.
+ * If the input is not encrypted, any passphrase provided is ignored.
+ *
+ * Alternative methods for specifying passphrases exist, such as a callback
+ * (see OSSL_DECODER_CTX_set_passphrase_cb(3)), which may be more useful for
+ * interactive applications which do not know if a passphrase should be
+ * prompted for in advance, or for GUI applications.
+ */
+ if (passphrase != NULL) {
+ if (OSSL_DECODER_CTX_set_passphrase(dctx,
+ (const unsigned char *)passphrase,
+ strlen(passphrase)) == 0) {
+ fprintf(stderr, "OSSL_DECODER_CTX_set_passphrase() failed\n");
+ goto cleanup;
+ }
+ }
+
+ /* Do the decode, reading from file. */
+ if (OSSL_DECODER_from_fp(dctx, f) == 0) {
+ fprintf(stderr, "OSSL_DECODER_from_fp() failed\n");
+ goto cleanup;
+ }
+
+ rv = 1;
+cleanup:
+ OSSL_DECODER_CTX_free(dctx);
+
+ /*
+ * pkey is created by OSSL_DECODER_CTX_new_for_pkey, but we
+ * might fail subsequently, so ensure it's properly freed
+ * in this case.
+ */
+ if (rv == 0) {
+ EVP_PKEY_free(pkey);
+ pkey = NULL;
+ }
+
+ return pkey;
+}
+
+/*
+ * Store an RSA public or private key to a file using PEM encoding.
+ *
+ * If a passphrase is supplied, the file is encrypted, otherwise
+ * it is unencrypted.
+ */
+static int store_key(EVP_PKEY *pkey, FILE *f, const char *passphrase)
+{
+ int rv = 0;
+ int selection;
+ OSSL_ENCODER_CTX *ectx = NULL;
+
+ /*
+ * Create a PEM encoder context.
+ *
+ * For raw (non-PEM-encoded) output, change "PEM" to "DER".
+ *
+ * The selection argument controls whether the private key is exported
+ * (EVP_PKEY_KEYPAIR), or only the public key (EVP_PKEY_PUBLIC_KEY). The
+ * former will fail if we only have a public key.
+ *
+ * Note that unlike the decode API, you cannot specify zero here.
+ *
+ * Purely for the sake of demonstration, here we choose to export the whole
+ * key if a passphrase is provided and the public key otherwise.
+ */
+ selection = (passphrase != NULL)
+ ? EVP_PKEY_KEYPAIR
+ : EVP_PKEY_PUBLIC_KEY;
+
+ ectx = OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, "PEM", NULL, propq);
+ if (ectx == NULL) {
+ fprintf(stderr, "OSSL_ENCODER_CTX_new_for_pkey() failed\n");
+ goto cleanup;
+ }
+
+ /*
+ * Set passphrase if provided; the encoded output will then be encrypted
+ * using the passphrase.
+ *
+ * Alternative methods for specifying passphrases exist, such as a callback
+ * (see OSSL_ENCODER_CTX_set_passphrase_cb(3), just as for OSSL_DECODER_CTX;
+ * however you are less likely to need them as you presumably know whether
+ * encryption is desired in advance.
+ *
+ * Note that specifying a passphrase alone is not enough to cause the
+ * key to be encrypted. You must set both a cipher and a passphrase.
+ */
+ if (passphrase != NULL) {
+ /* Set cipher. AES-128-CBC is a reasonable default. */
+ if (OSSL_ENCODER_CTX_set_cipher(ectx, "AES-128-CBC", propq) == 0) {
+ fprintf(stderr, "OSSL_ENCODER_CTX_set_cipher() failed\n");
+ goto cleanup;
+ }
+
+ /* Set passphrase. */
+ if (OSSL_ENCODER_CTX_set_passphrase(ectx,
+ (const unsigned char *)passphrase,
+ strlen(passphrase)) == 0) {
+ fprintf(stderr, "OSSL_ENCODER_CTX_set_passphrase() failed\n");
+ goto cleanup;
+ }
+ }
+
+ /* Do the encode, writing to the given file. */
+ if (OSSL_ENCODER_to_fp(ectx, f) == 0) {
+ fprintf(stderr, "OSSL_ENCODER_to_fp() failed\n");
+ goto cleanup;
+ }
+
+ rv = 1;
+cleanup:
+ OSSL_ENCODER_CTX_free(ectx);
+ return rv;
+}
+
+int main(int argc, char **argv)
+{
+ int rv = 1;
+ OSSL_LIB_CTX *libctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ const char *passphrase_in = NULL, *passphrase_out = NULL;
+
+ /* usage: rsa_encode <passphrase-in> <passphrase-out> */
+ if (argc > 1 && argv[1][0])
+ passphrase_in = argv[1];
+
+ if (argc > 2 && argv[2][0])
+ passphrase_out = argv[2];
+
+ /* Decode PEM key from stdin and then PEM encode it to stdout. */
+ pkey = load_key(libctx, stdin, passphrase_in);
+ if (pkey == NULL) {
+ fprintf(stderr, "Failed to decode key\n");
+ goto cleanup;
+ }
+
+ if (store_key(pkey, stdout, passphrase_out) == 0) {
+ fprintf(stderr, "Failed to encode key\n");
+ goto cleanup;
+ }
+
+ rv = 0;
+cleanup:
+ EVP_PKEY_free(pkey);
+ OSSL_LIB_CTX_free(libctx);
+ return rv;
+}
diff --git a/demos/kdf/Makefile b/demos/kdf/Makefile
new file mode 100644
index 000000000000..0aa511310504
--- /dev/null
+++ b/demos/kdf/Makefile
@@ -0,0 +1,22 @@
+#
+# To run the demos when linked with a shared library (default):
+#
+# LD_LIBRARY_PATH=../.. ./hkdf
+
+CFLAGS = -I../../include -g
+LDFLAGS = -L../..
+LDLIBS = -lcrypto
+
+all: hkdf pbkdf2 scrypt
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c $<
+
+hkdf: hkdf.o
+pbkdf2: pbkdf2.o
+scrypt: scrypt.o
+
+test: ;
+
+clean:
+ $(RM) *.o hkdf pbkdf2 scrypt
diff --git a/demos/kdf/hkdf.c b/demos/kdf/hkdf.c
new file mode 100644
index 000000000000..cb7a170e948e
--- /dev/null
+++ b/demos/kdf/hkdf.c
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <openssl/core_names.h>
+#include <openssl/crypto.h>
+#include <openssl/kdf.h>
+#include <openssl/obj_mac.h>
+#include <openssl/params.h>
+
+/*
+ * test vector from
+ * https://datatracker.ietf.org/doc/html/rfc5869
+ */
+
+static unsigned char hkdf_salt[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+ 0x0c
+};
+
+static unsigned char hkdf_ikm[] = {
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b
+};
+
+static unsigned char hkdf_info[] = {
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9
+};
+
+/* Expected output keying material */
+static unsigned char hkdf_okm[] = {
+ 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, 0x90, 0x43, 0x4f, 0x64,
+ 0xd0, 0x36, 0x2f, 0x2a, 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c,
+ 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, 0x34, 0x00, 0x72, 0x08,
+ 0xd5, 0xb8, 0x87, 0x18, 0x58, 0x65
+};
+
+int main(int argc, char **argv)
+{
+ int rv = 1;
+ EVP_KDF *kdf = NULL;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[42];
+ OSSL_PARAM params[5], *p = params;
+ OSSL_LIB_CTX *library_context = NULL;
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Fetch the key derivation function implementation */
+ kdf = EVP_KDF_fetch(library_context, "HKDF", NULL);
+ if (kdf == NULL) {
+ fprintf(stderr, "EVP_KDF_fetch() returned NULL\n");
+ goto end;
+ }
+
+ /* Create a context for the key derivation operation */
+ kctx = EVP_KDF_CTX_new(kdf);
+ if (kctx == NULL) {
+ fprintf(stderr, "EVP_KDF_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Set the underlying hash function used to derive the key */
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ "SHA256", 0);
+ /* Set input keying material */
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, hkdf_ikm,
+ sizeof(hkdf_ikm));
+ /* Set application specific information */
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO, hkdf_info,
+ sizeof(hkdf_info));
+ /* Set salt */
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT, hkdf_salt,
+ sizeof(hkdf_salt));
+ *p = OSSL_PARAM_construct_end();
+
+ /* Derive the key */
+ if (EVP_KDF_derive(kctx, out, sizeof(out), params) != 1) {
+ fprintf(stderr, "EVP_KDF_derive() failed\n");
+ goto end;
+ }
+
+ if (CRYPTO_memcmp(hkdf_okm, out, sizeof(hkdf_okm)) != 0) {
+ fprintf(stderr, "Generated key does not match expected value\n");
+ goto end;
+ }
+
+ rv = 0;
+end:
+ EVP_KDF_CTX_free(kctx);
+ EVP_KDF_free(kdf);
+ OSSL_LIB_CTX_free(library_context);
+ return rv;
+}
diff --git a/demos/kdf/pbkdf2.c b/demos/kdf/pbkdf2.c
new file mode 100644
index 000000000000..3e0adaee795f
--- /dev/null
+++ b/demos/kdf/pbkdf2.c
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <openssl/core_names.h>
+#include <openssl/crypto.h>
+#include <openssl/kdf.h>
+#include <openssl/obj_mac.h>
+#include <openssl/params.h>
+
+/*
+ * test vector from
+ * https://datatracker.ietf.org/doc/html/rfc7914
+ */
+
+/*
+ * Hard coding a password into an application is very bad.
+ * It is done here solely for educational purposes.
+ */
+static unsigned char password[] = {
+ 'P', 'a', 's', 's', 'w', 'o', 'r', 'd'
+};
+
+/*
+ * The salt is better not being hard coded too. Each password should have a
+ * different salt if possible. The salt is not considered secret information
+ * and is safe to store with an encrypted password.
+ */
+static unsigned char pbkdf2_salt[] = {
+ 'N', 'a', 'C', 'l'
+};
+
+/*
+ * The iteration parameter can be variable or hard coded. The disadvantage with
+ * hard coding them is that they cannot easily be adjusted for future
+ * technological improvements appear.
+ */
+static unsigned int pbkdf2_iterations = 80000;
+
+static const unsigned char expected_output[] = {
+
+ 0x4d, 0xdc, 0xd8, 0xf6, 0x0b, 0x98, 0xbe, 0x21,
+ 0x83, 0x0c, 0xee, 0x5e, 0xf2, 0x27, 0x01, 0xf9,
+ 0x64, 0x1a, 0x44, 0x18, 0xd0, 0x4c, 0x04, 0x14,
+ 0xae, 0xff, 0x08, 0x87, 0x6b, 0x34, 0xab, 0x56,
+ 0xa1, 0xd4, 0x25, 0xa1, 0x22, 0x58, 0x33, 0x54,
+ 0x9a, 0xdb, 0x84, 0x1b, 0x51, 0xc9, 0xb3, 0x17,
+ 0x6a, 0x27, 0x2b, 0xde, 0xbb, 0xa1, 0xd0, 0x78,
+ 0x47, 0x8f, 0x62, 0xb3, 0x97, 0xf3, 0x3c, 0x8d
+};
+
+int main(int argc, char **argv)
+{
+ int rv = 1;
+ EVP_KDF *kdf = NULL;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[64];
+ OSSL_PARAM params[5], *p = params;
+ OSSL_LIB_CTX *library_context = NULL;
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Fetch the key derivation function implementation */
+ kdf = EVP_KDF_fetch(library_context, "PBKDF2", NULL);
+ if (kdf == NULL) {
+ fprintf(stderr, "EVP_KDF_fetch() returned NULL\n");
+ goto end;
+ }
+
+ /* Create a context for the key derivation operation */
+ kctx = EVP_KDF_CTX_new(kdf);
+ if (kctx == NULL) {
+ fprintf(stderr, "EVP_KDF_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Set password */
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_PASSWORD, password,
+ sizeof(password));
+ /* Set salt */
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT, pbkdf2_salt,
+ sizeof(pbkdf2_salt));
+ /* Set iteration count (default 2048) */
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_ITER, &pbkdf2_iterations);
+ /* Set the underlying hash function used to derive the key */
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ "SHA256", 0);
+ *p = OSSL_PARAM_construct_end();
+
+ /* Derive the key */
+ if (EVP_KDF_derive(kctx, out, sizeof(out), params) != 1) {
+ fprintf(stderr, "EVP_KDF_derive() failed\n");
+ goto end;
+ }
+
+ if (CRYPTO_memcmp(expected_output, out, sizeof(expected_output)) != 0) {
+ fprintf(stderr, "Generated key does not match expected value\n");
+ goto end;
+ }
+
+ rv = 0;
+end:
+ EVP_KDF_CTX_free(kctx);
+ EVP_KDF_free(kdf);
+ OSSL_LIB_CTX_free(library_context);
+ return rv;
+}
diff --git a/demos/kdf/scrypt.c b/demos/kdf/scrypt.c
new file mode 100644
index 000000000000..2be99088007e
--- /dev/null
+++ b/demos/kdf/scrypt.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <openssl/core_names.h>
+#include <openssl/crypto.h>
+#include <openssl/kdf.h>
+#include <openssl/obj_mac.h>
+#include <openssl/params.h>
+
+/*
+ * test vector from
+ * https://datatracker.ietf.org/doc/html/rfc7914
+ */
+
+/*
+ * Hard coding a password into an application is very bad.
+ * It is done here solely for educational purposes.
+ */
+static unsigned char password[] = {
+ 'p', 'a', 's', 's', 'w', 'o', 'r', 'd'
+};
+
+/*
+ * The salt is better not being hard coded too. Each password should have a
+ * different salt if possible. The salt is not considered secret information
+ * and is safe to store with an encrypted password.
+ */
+static unsigned char scrypt_salt[] = {
+ 'N', 'a', 'C', 'l'
+};
+
+/*
+ * The SCRYPT parameters can be variable or hard coded. The disadvantage with
+ * hard coding them is that they cannot easily be adjusted for future
+ * technological improvements appear.
+ */
+static unsigned int scrypt_n = 1024;
+static unsigned int scrypt_r = 8;
+static unsigned int scrypt_p = 16;
+
+static const unsigned char expected_output[] = {
+
+ 0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00,
+ 0x78, 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe,
+ 0x7c, 0x6a, 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30,
+ 0xe7, 0x73, 0x76, 0x63, 0x4b, 0x37, 0x31, 0x62,
+ 0x2e, 0xaf, 0x30, 0xd9, 0x2e, 0x22, 0xa3, 0x88,
+ 0x6f, 0xf1, 0x09, 0x27, 0x9d, 0x98, 0x30, 0xda,
+ 0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, 0xee, 0x6d,
+ 0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, 0x40
+};
+
+int main(int argc, char **argv)
+{
+ int rv = 1;
+ EVP_KDF *kdf = NULL;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[64];
+ OSSL_PARAM params[6], *p = params;
+ OSSL_LIB_CTX *library_context = NULL;
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Fetch the key derivation function implementation */
+ kdf = EVP_KDF_fetch(library_context, "SCRYPT", NULL);
+ if (kdf == NULL) {
+ fprintf(stderr, "EVP_KDF_fetch() returned NULL\n");
+ goto end;
+ }
+
+ /* Create a context for the key derivation operation */
+ kctx = EVP_KDF_CTX_new(kdf);
+ if (kctx == NULL) {
+ fprintf(stderr, "EVP_KDF_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Set password */
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_PASSWORD, password,
+ sizeof(password));
+ /* Set salt */
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT, scrypt_salt,
+ sizeof(scrypt_salt));
+ /* Set N (default 1048576) */
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_SCRYPT_N, &scrypt_n);
+ /* Set R (default 8) */
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_SCRYPT_R, &scrypt_r);
+ /* Set P (default 1) */
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_SCRYPT_P, &scrypt_p);
+ *p = OSSL_PARAM_construct_end();
+
+ /* Derive the key */
+ if (EVP_KDF_derive(kctx, out, sizeof(out), params) != 1) {
+ fprintf(stderr, "EVP_KDF_derive() failed\n");
+ goto end;
+ }
+
+ if (CRYPTO_memcmp(expected_output, out, sizeof(expected_output)) != 0) {
+ fprintf(stderr, "Generated key does not match expected value\n");
+ goto end;
+ }
+
+ rv = 0;
+end:
+ EVP_KDF_CTX_free(kctx);
+ EVP_KDF_free(kdf);
+ OSSL_LIB_CTX_free(library_context);
+ return rv;
+}
diff --git a/demos/keyexch/x25519.c b/demos/keyexch/x25519.c
new file mode 100644
index 000000000000..bd35e0a98c14
--- /dev/null
+++ b/demos/keyexch/x25519.c
@@ -0,0 +1,278 @@
+/*
+ * Copyright 2022 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 <string.h>
+#include <openssl/core_names.h>
+#include <openssl/evp.h>
+
+/*
+ * This is a demonstration of key exchange using X25519.
+ *
+ * The variables beginning `peer1_` / `peer2_` are data which would normally be
+ * accessible to that peer.
+ *
+ * Ordinarily you would use random keys, which are demonstrated
+ * below when use_kat=0. A known answer test is demonstrated
+ * when use_kat=1.
+ */
+
+/* A property query used for selecting the X25519 implementation. */
+static const char *propq = NULL;
+
+static const unsigned char peer1_privk_data[32] = {
+ 0x80, 0x5b, 0x30, 0x20, 0x25, 0x4a, 0x70, 0x2c,
+ 0xad, 0xa9, 0x8d, 0x7d, 0x47, 0xf8, 0x1b, 0x20,
+ 0x89, 0xd2, 0xf9, 0x14, 0xac, 0x92, 0x27, 0xf2,
+ 0x10, 0x7e, 0xdb, 0x21, 0xbd, 0x73, 0x73, 0x5d
+};
+
+static const unsigned char peer2_privk_data[32] = {
+ 0xf8, 0x84, 0x19, 0x69, 0x79, 0x13, 0x0d, 0xbd,
+ 0xb1, 0x76, 0xd7, 0x0e, 0x7e, 0x0f, 0xb6, 0xf4,
+ 0x8c, 0x4a, 0x8c, 0x5f, 0xd8, 0x15, 0x09, 0x0a,
+ 0x71, 0x78, 0x74, 0x92, 0x0f, 0x85, 0xc8, 0x43
+};
+
+static const unsigned char expected_result[32] = {
+ 0x19, 0x71, 0x26, 0x12, 0x74, 0xb5, 0xb1, 0xce,
+ 0x77, 0xd0, 0x79, 0x24, 0xb6, 0x0a, 0x5c, 0x72,
+ 0x0c, 0xa6, 0x56, 0xc0, 0x11, 0xeb, 0x43, 0x11,
+ 0x94, 0x3b, 0x01, 0x45, 0xca, 0x19, 0xfe, 0x09
+};
+
+typedef struct peer_data_st {
+ const char *name; /* name of peer */
+ EVP_PKEY *privk; /* privk generated for peer */
+ unsigned char pubk_data[32]; /* generated pubk to send to other peer */
+
+ unsigned char *secret; /* allocated shared secret buffer */
+ size_t secret_len;
+} PEER_DATA;
+
+/*
+ * Prepare for X25519 key exchange. The public key to be sent to the remote peer
+ * is put in pubk_data, which should be a 32-byte buffer. Returns 1 on success.
+ */
+static int keyexch_x25519_before(
+ OSSL_LIB_CTX *libctx,
+ const unsigned char *kat_privk_data,
+ PEER_DATA *local_peer)
+{
+ int rv = 0;
+ size_t pubk_data_len = 0;
+
+ /* Generate or load X25519 key for the peer */
+ if (kat_privk_data != NULL)
+ local_peer->privk =
+ EVP_PKEY_new_raw_private_key_ex(libctx, "X25519", propq,
+ kat_privk_data,
+ sizeof(peer1_privk_data));
+ else
+ local_peer->privk = EVP_PKEY_Q_keygen(libctx, propq, "X25519");
+
+ if (local_peer->privk == NULL) {
+ fprintf(stderr, "Could not load or generate private key\n");
+ goto end;
+ }
+
+ /* Get public key corresponding to the private key */
+ if (EVP_PKEY_get_octet_string_param(local_peer->privk,
+ OSSL_PKEY_PARAM_PUB_KEY,
+ local_peer->pubk_data,
+ sizeof(local_peer->pubk_data),
+ &pubk_data_len) == 0) {
+ fprintf(stderr, "EVP_PKEY_get_octet_string_param() failed\n");
+ goto end;
+ }
+
+ /* X25519 public keys are always 32 bytes */
+ if (pubk_data_len != 32) {
+ fprintf(stderr, "EVP_PKEY_get_octet_string_param() "
+ "yielded wrong length\n");
+ goto end;
+ }
+
+ rv = 1;
+end:
+ if (rv == 0) {
+ EVP_PKEY_free(local_peer->privk);
+ local_peer->privk = NULL;
+ }
+
+ return rv;
+}
+
+/*
+ * Complete X25519 key exchange. remote_peer_pubk_data should be the 32 byte
+ * public key value received from the remote peer. On success, returns 1 and the
+ * secret is pointed to by *secret. The caller must free it.
+ */
+static int keyexch_x25519_after(
+ OSSL_LIB_CTX *libctx,
+ int use_kat,
+ PEER_DATA *local_peer,
+ const unsigned char *remote_peer_pubk_data)
+{
+ int rv = 0;
+ EVP_PKEY *remote_peer_pubk = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+
+ local_peer->secret = NULL;
+
+ /* Load public key for remote peer. */
+ remote_peer_pubk =
+ EVP_PKEY_new_raw_public_key_ex(libctx, "X25519", propq,
+ remote_peer_pubk_data, 32);
+ if (remote_peer_pubk == NULL) {
+ fprintf(stderr, "EVP_PKEY_new_raw_public_key_ex() failed\n");
+ goto end;
+ }
+
+ /* Create key exchange context. */
+ ctx = EVP_PKEY_CTX_new_from_pkey(libctx, local_peer->privk, propq);
+ if (ctx == NULL) {
+ fprintf(stderr, "EVP_PKEY_CTX_new_from_pkey() failed\n");
+ goto end;
+ }
+
+ /* Initialize derivation process. */
+ if (EVP_PKEY_derive_init(ctx) == 0) {
+ fprintf(stderr, "EVP_PKEY_derive_init() failed\n");
+ goto end;
+ }
+
+ /* Configure each peer with the other peer's public key. */
+ if (EVP_PKEY_derive_set_peer(ctx, remote_peer_pubk) == 0) {
+ fprintf(stderr, "EVP_PKEY_derive_set_peer() failed\n");
+ goto end;
+ }
+
+ /* Determine the secret length. */
+ if (EVP_PKEY_derive(ctx, NULL, &local_peer->secret_len) == 0) {
+ fprintf(stderr, "EVP_PKEY_derive() failed\n");
+ goto end;
+ }
+
+ /*
+ * We are using X25519, so the secret generated will always be 32 bytes.
+ * However for exposition, the code below demonstrates a generic
+ * implementation for arbitrary lengths.
+ */
+ if (local_peer->secret_len != 32) { /* unreachable */
+ fprintf(stderr, "Secret is always 32 bytes for X25519\n");
+ goto end;
+ }
+
+ /* Allocate memory for shared secrets. */
+ local_peer->secret = OPENSSL_malloc(local_peer->secret_len);
+ if (local_peer->secret == NULL) {
+ fprintf(stderr, "Could not allocate memory for secret\n");
+ goto end;
+ }
+
+ /* Derive the shared secret. */
+ if (EVP_PKEY_derive(ctx, local_peer->secret,
+ &local_peer->secret_len) == 0) {
+ fprintf(stderr, "EVP_PKEY_derive() failed\n");
+ goto end;
+ }
+
+ printf("Shared secret (%s):\n", local_peer->name);
+ BIO_dump_indent_fp(stdout, local_peer->secret, local_peer->secret_len, 2);
+ putchar('\n');
+
+ rv = 1;
+end:
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(remote_peer_pubk);
+ if (rv == 0) {
+ OPENSSL_clear_free(local_peer->secret, local_peer->secret_len);
+ local_peer->secret = NULL;
+ }
+
+ return rv;
+}
+
+static int keyexch_x25519(int use_kat)
+{
+ int rv = 0;
+ OSSL_LIB_CTX *libctx = NULL;
+ PEER_DATA peer1 = {"peer 1"}, peer2 = {"peer 2"};
+
+ /*
+ * Each peer generates its private key and sends its public key
+ * to the other peer. The private key is stored locally for
+ * later use.
+ */
+ if (keyexch_x25519_before(libctx, use_kat ? peer1_privk_data : NULL,
+ &peer1) == 0)
+ return 0;
+
+ if (keyexch_x25519_before(libctx, use_kat ? peer2_privk_data : NULL,
+ &peer2) == 0)
+ return 0;
+
+ /*
+ * Each peer uses the other peer's public key to perform key exchange.
+ * After this succeeds, each peer has the same secret in its
+ * PEER_DATA.
+ */
+ if (keyexch_x25519_after(libctx, use_kat, &peer1, peer2.pubk_data) == 0)
+ return 0;
+
+ if (keyexch_x25519_after(libctx, use_kat, &peer2, peer1.pubk_data) == 0)
+ return 0;
+
+ /*
+ * Here we demonstrate the secrets are equal for exposition purposes.
+ *
+ * Although in practice you will generally not need to compare secrets
+ * produced through key exchange, if you do compare cryptographic secrets,
+ * always do so using a constant-time function such as CRYPTO_memcmp, never
+ * using memcmp(3).
+ */
+ if (CRYPTO_memcmp(peer1.secret, peer2.secret, peer1.secret_len) != 0) {
+ fprintf(stderr, "Negotiated secrets do not match\n");
+ goto end;
+ }
+
+ /* If we are doing the KAT, the secret should equal our reference result. */
+ if (use_kat && CRYPTO_memcmp(peer1.secret, expected_result,
+ peer1.secret_len) != 0) {
+ fprintf(stderr, "Did not get expected result\n");
+ goto end;
+ }
+
+ rv = 1;
+end:
+ /* The secrets are sensitive, so ensure they are erased before freeing. */
+ OPENSSL_clear_free(peer1.secret, peer1.secret_len);
+ OPENSSL_clear_free(peer2.secret, peer2.secret_len);
+
+ EVP_PKEY_free(peer1.privk);
+ EVP_PKEY_free(peer2.privk);
+ OSSL_LIB_CTX_free(libctx);
+ return rv;
+}
+
+int main(int argc, char **argv)
+{
+ /* Test X25519 key exchange with known result. */
+ printf("Key exchange using known answer (deterministic):\n");
+ if (keyexch_x25519(1) == 0)
+ return 1;
+
+ /* Test X25519 key exchange with random keys. */
+ printf("Key exchange using random keys:\n");
+ if (keyexch_x25519(0) == 0)
+ return 1;
+
+ return 0;
+}
diff --git a/demos/mac/Makefile b/demos/mac/Makefile
new file mode 100644
index 000000000000..00d2d8dbe64a
--- /dev/null
+++ b/demos/mac/Makefile
@@ -0,0 +1,25 @@
+# Quick instruction:
+# To build against an OpenSSL built in the source tree, do this:
+#
+# make OPENSSL_INCS_LOCATION=-I../../include OPENSSL_LIBS_LOCATION=-L../..
+#
+# To run the demos when linked with a shared library (default):
+#
+# LD_LIBRARY_PATH=../.. ./gmac
+# LD_LIBRARY_PATH=../.. ./poly1305
+
+CFLAGS = $(OPENSSL_INCS_LOCATION) -Wall
+LDFLAGS = $(OPENSSL_LIBS_LOCATION) -lssl -lcrypto
+
+all: gmac hmac-sha512 cmac-aes256 poly1305
+
+gmac: gmac.o
+hmac-sha512: hmac-sha512.o
+cmac-aes256: cmac-aes256.o
+poly1305: poly1305.o
+
+gmac hmac-sha512 cmac-aes256 poly1305:
+ $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
+
+clean:
+ $(RM) gmac hmac-sha512 cmac-aes256 poly1305 *.o
diff --git a/demos/mac/cmac-aes256.c b/demos/mac/cmac-aes256.c
new file mode 100644
index 000000000000..6f4fd78b699f
--- /dev/null
+++ b/demos/mac/cmac-aes256.c
@@ -0,0 +1,154 @@
+/*-
+ * Copyright 2022 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
+ */
+
+/*
+ * Example of using EVP_MAC_ methods to calculate
+ * a CMAC of static buffers
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <openssl/crypto.h>
+#include <openssl/core_names.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/cmac.h>
+#include <openssl/params.h>
+
+/*
+ * Hard coding the key into an application is very bad.
+ * It is done here solely for educational purposes.
+ */
+static unsigned char key[] = {
+ 0x6c, 0xde, 0x14, 0xf5, 0xd5, 0x2a, 0x4a, 0xdf,
+ 0x12, 0x39, 0x1e, 0xbf, 0x36, 0xf9, 0x6a, 0x46,
+ 0x48, 0xd0, 0xb6, 0x51, 0x89, 0xfc, 0x24, 0x85,
+ 0xa8, 0x8d, 0xdf, 0x7e, 0x80, 0x14, 0xc8, 0xce,
+};
+
+static const unsigned char data[] =
+ "To be, or not to be, that is the question,\n"
+ "Whether tis nobler in the minde to suffer\n"
+ "The Å¿lings and arrowes of outragious fortune,\n"
+ "Or to take Armes again in a sea of troubles,\n"
+ "And by opposing, end them, to die to sleep;\n"
+ "No more, and by a sleep, to say we end\n"
+ "The heart-ache, and the thousand natural shocks\n"
+ "That flesh is heir to? tis a consumation\n"
+ "Devoutly to be wished. To die to sleep,\n"
+ "To sleepe, perchance to dreame, Aye, there's the rub,\n"
+ "For in that sleep of death what dreams may come\n"
+ "When we haue shuffled off this mortal coil\n"
+ "Must give us pause. There's the respect\n"
+ "That makes calamity of so long life:\n"
+ "For who would bear the Ships and Scorns of time,\n"
+ "The oppressor's wrong, the proud man's Contumely,\n"
+ "The pangs of dispised love, the Law's delay,\n"
+;
+
+/* The known value of the CMAC/AES256 MAC of the above soliloqy */
+static const unsigned char expected_output[] = {
+ 0x67, 0x92, 0x32, 0x23, 0x50, 0x3d, 0xc5, 0xba,
+ 0x78, 0xd4, 0x6d, 0x63, 0xf2, 0x2b, 0xe9, 0x56,
+};
+
+/*
+ * A property query used for selecting the MAC implementation.
+ */
+static const char *propq = NULL;
+
+int main(void)
+{
+ int rv = EXIT_FAILURE;
+ OSSL_LIB_CTX *library_context = NULL;
+ EVP_MAC *mac = NULL;
+ EVP_MAC_CTX *mctx = NULL;
+ unsigned char *out = NULL;
+ size_t out_len = 0;
+ OSSL_PARAM params[4], *p = params;
+ char cipher_name[] = "aes256";
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Fetch the CMAC implementation */
+ mac = EVP_MAC_fetch(library_context, "CMAC", propq);
+ if (mac == NULL) {
+ fprintf(stderr, "EVP_MAC_fetch() returned NULL\n");
+ goto end;
+ }
+
+ /* Create a context for the CMAC operation */
+ mctx = EVP_MAC_CTX_new(mac);
+ if (mctx == NULL) {
+ fprintf(stderr, "EVP_MAC_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* The underlying cipher to be used */
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_CIPHER, cipher_name,
+ sizeof(cipher_name));
+ *p = OSSL_PARAM_construct_end();
+
+ /* Initialise the CMAC operation */
+ if (!EVP_MAC_init(mctx, key, sizeof(key), params)) {
+ fprintf(stderr, "EVP_MAC_init() failed\n");
+ goto end;
+ }
+
+ /* Make one or more calls to process the data to be authenticated */
+ if (!EVP_MAC_update(mctx, data, sizeof(data))) {
+ fprintf(stderr, "EVP_MAC_update() failed\n");
+ goto end;
+ }
+
+ /* Make a call to the final with a NULL buffer to get the length of the MAC */
+ if (!EVP_MAC_final(mctx, NULL, &out_len, 0)) {
+ fprintf(stderr, "EVP_MAC_final() failed\n");
+ goto end;
+ }
+ out = OPENSSL_malloc(out_len);
+ if (out == NULL) {
+ fprintf(stderr, "malloc failed\n");
+ goto end;
+ }
+ /* Make one call to the final to get the MAC */
+ if (!EVP_MAC_final(mctx, out, &out_len, out_len)) {
+ fprintf(stderr, "EVP_MAC_final() failed\n");
+ goto end;
+ }
+
+ printf("Generated MAC:\n");
+ BIO_dump_indent_fp(stdout, out, out_len, 2);
+ putchar('\n');
+
+ if (out_len != sizeof(expected_output)) {
+ fprintf(stderr, "Generated MAC has an unexpected length\n");
+ goto end;
+ }
+
+ if (CRYPTO_memcmp(expected_output, out, sizeof(expected_output)) != 0) {
+ fprintf(stderr, "Generated MAC does not match expected value\n");
+ goto end;
+ }
+
+ rv = EXIT_SUCCESS;
+end:
+ if (rv != EXIT_SUCCESS)
+ ERR_print_errors_fp(stderr);
+ /* OpenSSL free functions will ignore NULL arguments */
+ OPENSSL_free(out);
+ EVP_MAC_CTX_free(mctx);
+ EVP_MAC_free(mac);
+ OSSL_LIB_CTX_free(library_context);
+ return rv;
+}
diff --git a/demos/mac/gmac.c b/demos/mac/gmac.c
new file mode 100644
index 000000000000..bdaa9b1daa31
--- /dev/null
+++ b/demos/mac/gmac.c
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <openssl/core_names.h>
+#include <openssl/evp.h>
+#include <openssl/params.h>
+#include <openssl/err.h>
+
+/*
+ * Taken from NIST's GCM Test Vectors
+ * http://csrc.nist.gov/groups/STM/cavp/
+ */
+
+/*
+ * Hard coding the key into an application is very bad.
+ * It is done here solely for educational purposes.
+ */
+static unsigned char key[] = {
+ 0x77, 0xbe, 0x63, 0x70, 0x89, 0x71, 0xc4, 0xe2,
+ 0x40, 0xd1, 0xcb, 0x79, 0xe8, 0xd7, 0x7f, 0xeb
+};
+
+/*
+ * The initialisation vector (IV) is better not being hard coded too.
+ * Repeating password/IV pairs compromises the integrity of GMAC.
+ * The IV is not considered secret information and is safe to store with
+ * an encrypted password.
+ */
+static unsigned char iv[] = {
+ 0xe0, 0xe0, 0x0f, 0x19, 0xfe, 0xd7, 0xba,
+ 0x01, 0x36, 0xa7, 0x97, 0xf3
+};
+
+static unsigned char data[] = {
+ 0x7a, 0x43, 0xec, 0x1d, 0x9c, 0x0a, 0x5a, 0x78,
+ 0xa0, 0xb1, 0x65, 0x33, 0xa6, 0x21, 0x3c, 0xab
+};
+
+static const unsigned char expected_output[] = {
+ 0x20, 0x9f, 0xcc, 0x8d, 0x36, 0x75, 0xed, 0x93,
+ 0x8e, 0x9c, 0x71, 0x66, 0x70, 0x9d, 0xd9, 0x46
+};
+
+/*
+ * A property query used for selecting the GMAC implementation and the
+ * underlying GCM mode cipher.
+ */
+static char *propq = NULL;
+
+int main(int argc, char **argv)
+{
+ int rv = EXIT_FAILURE;
+ EVP_MAC *mac = NULL;
+ EVP_MAC_CTX *mctx = NULL;
+ unsigned char out[16];
+ OSSL_PARAM params[4], *p = params;
+ OSSL_LIB_CTX *library_context = NULL;
+ size_t out_len = 0;
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Fetch the GMAC implementation */
+ mac = EVP_MAC_fetch(library_context, "GMAC", propq);
+ if (mac == NULL) {
+ fprintf(stderr, "EVP_MAC_fetch() returned NULL\n");
+ goto end;
+ }
+
+ /* Create a context for the GMAC operation */
+ mctx = EVP_MAC_CTX_new(mac);
+ if (mctx == NULL) {
+ fprintf(stderr, "EVP_MAC_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* GMAC requries a GCM mode cipher to be specified */
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_CIPHER,
+ "AES-128-GCM", 0);
+
+ /*
+ * If a non-default property query is required when fetching the GCM mode
+ * cipher, it needs to be specified too.
+ */
+ if (propq != NULL)
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_PROPERTIES,
+ propq, 0);
+
+ /* Set the initialisation vector (IV) */
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_IV,
+ iv, sizeof(iv));
+ *p = OSSL_PARAM_construct_end();
+
+ /* Initialise the GMAC operation */
+ if (!EVP_MAC_init(mctx, key, sizeof(key), params)) {
+ fprintf(stderr, "EVP_MAC_init() failed\n");
+ goto end;
+ }
+
+ /* Make one or more calls to process the data to be authenticated */
+ if (!EVP_MAC_update(mctx, data, sizeof(data))) {
+ fprintf(stderr, "EVP_MAC_update() failed\n");
+ goto end;
+ }
+
+ /* Make one call to the final to get the MAC */
+ if (!EVP_MAC_final(mctx, out, &out_len, sizeof(out))) {
+ fprintf(stderr, "EVP_MAC_final() failed\n");
+ goto end;
+ }
+
+ printf("Generated MAC:\n");
+ BIO_dump_indent_fp(stdout, out, out_len, 2);
+ putchar('\n');
+
+ if (out_len != sizeof(expected_output)) {
+ fprintf(stderr, "Generated MAC has an unexpected length\n");
+ goto end;
+ }
+
+ if (CRYPTO_memcmp(expected_output, out, sizeof(expected_output)) != 0) {
+ fprintf(stderr, "Generated MAC does not match expected value\n");
+ goto end;
+ }
+
+ rv = EXIT_SUCCESS;
+end:
+ EVP_MAC_CTX_free(mctx);
+ EVP_MAC_free(mac);
+ OSSL_LIB_CTX_free(library_context);
+ if (rv != EXIT_SUCCESS)
+ ERR_print_errors_fp(stderr);
+ return rv;
+}
diff --git a/demos/mac/hmac-sha512.c b/demos/mac/hmac-sha512.c
new file mode 100644
index 000000000000..c258b90ee395
--- /dev/null
+++ b/demos/mac/hmac-sha512.c
@@ -0,0 +1,166 @@
+/*-
+ * Copyright 2022 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
+ */
+
+/*
+ * Example of using EVP_MAC_ methods to calculate
+ * a HMAC of static buffers
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <openssl/crypto.h>
+#include <openssl/core_names.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/hmac.h>
+#include <openssl/params.h>
+
+/*
+ * Hard coding the key into an application is very bad.
+ * It is done here solely for educational purposes.
+ */
+static unsigned char key[] = {
+ 0x25, 0xfd, 0x12, 0x99, 0xdf, 0xad, 0x1a, 0x03,
+ 0x0a, 0x81, 0x3c, 0x2d, 0xcc, 0x05, 0xd1, 0x5c,
+ 0x17, 0x7a, 0x36, 0x73, 0x17, 0xef, 0x41, 0x75,
+ 0x71, 0x18, 0xe0, 0x1a, 0xda, 0x99, 0xc3, 0x61,
+ 0x38, 0xb5, 0xb1, 0xe0, 0x82, 0x2c, 0x70, 0xa4,
+ 0xc0, 0x8e, 0x5e, 0xf9, 0x93, 0x9f, 0xcf, 0xf7,
+ 0x32, 0x4d, 0x0c, 0xbd, 0x31, 0x12, 0x0f, 0x9a,
+ 0x15, 0xee, 0x82, 0xdb, 0x8d, 0x29, 0x54, 0x14,
+};
+
+static const unsigned char data[] =
+ "To be, or not to be, that is the question,\n"
+ "Whether tis nobler in the minde to suffer\n"
+ "The Å¿lings and arrowes of outragious fortune,\n"
+ "Or to take Armes again in a sea of troubles,\n"
+ "And by opposing, end them, to die to sleep;\n"
+ "No more, and by a sleep, to say we end\n"
+ "The heart-ache, and the thousand natural shocks\n"
+ "That flesh is heir to? tis a consumation\n"
+ "Devoutly to be wished. To die to sleep,\n"
+ "To sleepe, perchance to dreame, Aye, there's the rub,\n"
+ "For in that sleep of death what dreams may come\n"
+ "When we haue shuffled off this mortal coil\n"
+ "Must give us pause. There's the respect\n"
+ "That makes calamity of so long life:\n"
+ "For who would bear the Ships and Scorns of time,\n"
+ "The oppressor's wrong, the proud man's Contumely,\n"
+ "The pangs of dispised love, the Law's delay,\n"
+;
+
+/* The known value of the HMAC/SHA3-512 MAC of the above soliloqy */
+static const unsigned char expected_output[] = {
+ 0x3b, 0x77, 0x5f, 0xf1, 0x4f, 0x9e, 0xb9, 0x23,
+ 0x8f, 0xdc, 0xa0, 0x68, 0x15, 0x7b, 0x8a, 0xf1,
+ 0x96, 0x23, 0xaa, 0x3c, 0x1f, 0xe9, 0xdc, 0x89,
+ 0x11, 0x7d, 0x58, 0x07, 0xe7, 0x96, 0x17, 0xe3,
+ 0x44, 0x8b, 0x03, 0x37, 0x91, 0xc0, 0x6e, 0x06,
+ 0x7c, 0x54, 0xe4, 0xa4, 0xcc, 0xd5, 0x16, 0xbb,
+ 0x5e, 0x4d, 0x64, 0x7d, 0x88, 0x23, 0xc9, 0xb7,
+ 0x25, 0xda, 0xbe, 0x4b, 0xe4, 0xd5, 0x34, 0x30,
+};
+
+/*
+ * A property query used for selecting the MAC implementation.
+ */
+static const char *propq = NULL;
+
+int main(void)
+{
+ int rv = EXIT_FAILURE;
+ OSSL_LIB_CTX *library_context = NULL;
+ EVP_MAC *mac = NULL;
+ EVP_MAC_CTX *mctx = NULL;
+ EVP_MD_CTX *digest_context = NULL;
+ unsigned char *out = NULL;
+ size_t out_len = 0;
+ OSSL_PARAM params[4], *p = params;
+ char digest_name[] = "SHA3-512";
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Fetch the HMAC implementation */
+ mac = EVP_MAC_fetch(library_context, "HMAC", propq);
+ if (mac == NULL) {
+ fprintf(stderr, "EVP_MAC_fetch() returned NULL\n");
+ goto end;
+ }
+
+ /* Create a context for the HMAC operation */
+ mctx = EVP_MAC_CTX_new(mac);
+ if (mctx == NULL) {
+ fprintf(stderr, "EVP_MAC_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* The underlying digest to be used */
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, digest_name,
+ sizeof(digest_name));
+ *p = OSSL_PARAM_construct_end();
+
+ /* Initialise the HMAC operation */
+ if (!EVP_MAC_init(mctx, key, sizeof(key), params)) {
+ fprintf(stderr, "EVP_MAC_init() failed\n");
+ goto end;
+ }
+
+ /* Make one or more calls to process the data to be authenticated */
+ if (!EVP_MAC_update(mctx, data, sizeof(data))) {
+ fprintf(stderr, "EVP_MAC_update() failed\n");
+ goto end;
+ }
+
+ /* Make a call to the final with a NULL buffer to get the length of the MAC */
+ if (!EVP_MAC_final(mctx, NULL, &out_len, 0)) {
+ fprintf(stderr, "EVP_MAC_final() failed\n");
+ goto end;
+ }
+ out = OPENSSL_malloc(out_len);
+ if (out == NULL) {
+ fprintf(stderr, "malloc failed\n");
+ goto end;
+ }
+ /* Make one call to the final to get the MAC */
+ if (!EVP_MAC_final(mctx, out, &out_len, out_len)) {
+ fprintf(stderr, "EVP_MAC_final() failed\n");
+ goto end;
+ }
+
+ printf("Generated MAC:\n");
+ BIO_dump_indent_fp(stdout, out, out_len, 2);
+ putchar('\n');
+
+ if (out_len != sizeof(expected_output)) {
+ fprintf(stderr, "Generated MAC has an unexpected length\n");
+ goto end;
+ }
+
+ if (CRYPTO_memcmp(expected_output, out, sizeof(expected_output)) != 0) {
+ fprintf(stderr, "Generated MAC does not match expected value\n");
+ goto end;
+ }
+
+ rv = EXIT_SUCCESS;
+end:
+ if (rv != EXIT_SUCCESS)
+ ERR_print_errors_fp(stderr);
+ /* OpenSSL free functions will ignore NULL arguments */
+ OPENSSL_free(out);
+ EVP_MD_CTX_free(digest_context);
+ EVP_MAC_CTX_free(mctx);
+ EVP_MAC_free(mac);
+ OSSL_LIB_CTX_free(library_context);
+ return rv;
+}
diff --git a/demos/mac/poly1305.c b/demos/mac/poly1305.c
new file mode 100644
index 000000000000..1aa95e583dad
--- /dev/null
+++ b/demos/mac/poly1305.c
@@ -0,0 +1,209 @@
+/*
+ * Copyright 2021-2022 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 <stdlib.h>
+#include <string.h>
+#include <openssl/core_names.h>
+#include <openssl/evp.h>
+#include <openssl/params.h>
+#include <openssl/err.h>
+
+/*
+ * This is a demonstration of how to compute Poly1305-AES using the OpenSSL
+ * Poly1305 and AES providers and the EVP API.
+ *
+ * Please note that:
+ *
+ * - Poly1305 must never be used alone and must be used in conjunction with
+ * another primitive which processes the input nonce to be secure;
+ *
+ * - you must never pass a nonce to the Poly1305 primitive directly;
+ *
+ * - Poly1305 exhibits catastrophic failure (that is, can be broken) if a
+ * nonce is ever reused for a given key.
+ *
+ * If you are looking for a general purpose MAC, you should consider using a
+ * different MAC and looking at one of the other examples, unless you have a
+ * good familiarity with the details and caveats of Poly1305.
+ *
+ * This example uses AES, as described in the original paper, "The Poly1305-AES
+ * message authentication code":
+ * https://cr.yp.to/mac/poly1305-20050329.pdf
+ *
+ * The test vectors below are from that paper.
+ */
+
+/*
+ * Hard coding the key into an application is very bad.
+ * It is done here solely for educational purposes.
+ * These are the "r" and "k" inputs to Poly1305-AES.
+ */
+static const unsigned char test_r[] = {
+ 0x85, 0x1f, 0xc4, 0x0c, 0x34, 0x67, 0xac, 0x0b,
+ 0xe0, 0x5c, 0xc2, 0x04, 0x04, 0xf3, 0xf7, 0x00
+};
+
+static const unsigned char test_k[] = {
+ 0xec, 0x07, 0x4c, 0x83, 0x55, 0x80, 0x74, 0x17,
+ 0x01, 0x42, 0x5b, 0x62, 0x32, 0x35, 0xad, 0xd6
+};
+
+/*
+ * Hard coding a nonce must not be done under any circumstances and is done here
+ * purely for demonstration purposes. Please note that Poly1305 exhibits
+ * catastrophic failure (that is, can be broken) if a nonce is ever reused for a
+ * given key.
+ */
+static const unsigned char test_n[] = {
+ 0xfb, 0x44, 0x73, 0x50, 0xc4, 0xe8, 0x68, 0xc5,
+ 0x2a, 0xc3, 0x27, 0x5c, 0xf9, 0xd4, 0x32, 0x7e
+};
+
+/* Input message. */
+static const unsigned char test_m[] = {
+ 0xf3, 0xf6
+};
+
+static const unsigned char expected_output[] = {
+ 0xf4, 0xc6, 0x33, 0xc3, 0x04, 0x4f, 0xc1, 0x45,
+ 0xf8, 0x4f, 0x33, 0x5c, 0xb8, 0x19, 0x53, 0xde
+};
+
+/*
+ * A property query used for selecting the POLY1305 implementation.
+ */
+static char *propq = NULL;
+
+int main(int argc, char **argv)
+{
+ int rv = EXIT_FAILURE;
+ EVP_CIPHER *aes = NULL;
+ EVP_CIPHER_CTX *aesctx = NULL;
+ EVP_MAC *mac = NULL;
+ EVP_MAC_CTX *mctx = NULL;
+ unsigned char composite_key[32];
+ unsigned char out[16];
+ OSSL_LIB_CTX *library_context = NULL;
+ size_t out_len = 0;
+ int aes_len = 0;
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Fetch the Poly1305 implementation */
+ mac = EVP_MAC_fetch(library_context, "POLY1305", propq);
+ if (mac == NULL) {
+ fprintf(stderr, "EVP_MAC_fetch() returned NULL\n");
+ goto end;
+ }
+
+ /* Create a context for the Poly1305 operation */
+ mctx = EVP_MAC_CTX_new(mac);
+ if (mctx == NULL) {
+ fprintf(stderr, "EVP_MAC_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Fetch the AES implementation */
+ aes = EVP_CIPHER_fetch(library_context, "AES-128-ECB", propq);
+ if (aes == NULL) {
+ fprintf(stderr, "EVP_CIPHER_fetch() returned NULL\n");
+ goto end;
+ }
+
+ /* Create a context for AES */
+ aesctx = EVP_CIPHER_CTX_new();
+ if (aesctx == NULL) {
+ fprintf(stderr, "EVP_CIPHER_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Initialize the AES cipher with the 128-bit key k */
+ if (!EVP_EncryptInit_ex(aesctx, aes, NULL, test_k, NULL)) {
+ fprintf(stderr, "EVP_EncryptInit_ex() failed\n");
+ goto end;
+ }
+
+ /*
+ * Disable padding for the AES cipher. We do not strictly need to do this as
+ * we are encrypting a single block and thus there are no alignment or
+ * padding concerns, but this ensures that the operation below fails if
+ * padding would be required for some reason, which in this circumstance
+ * would indicate an implementation bug.
+ */
+ if (!EVP_CIPHER_CTX_set_padding(aesctx, 0)) {
+ fprintf(stderr, "EVP_CIPHER_CTX_set_padding() failed\n");
+ goto end;
+ }
+
+ /*
+ * Computes the value AES_k(n) which we need for our Poly1305-AES
+ * computation below.
+ */
+ if (!EVP_EncryptUpdate(aesctx, composite_key + 16, &aes_len,
+ test_n, sizeof(test_n))) {
+ fprintf(stderr, "EVP_EncryptUpdate() failed\n");
+ goto end;
+ }
+
+ /*
+ * The Poly1305 provider expects the key r to be passed as the first 16
+ * bytes of the "key" and the processed nonce (that is, AES_k(n)) to be
+ * passed as the second 16 bytes of the "key". We already put the processed
+ * nonce in the correct place above, so copy r into place.
+ */
+ memcpy(composite_key, test_r, 16);
+
+ /* Initialise the Poly1305 operation */
+ if (!EVP_MAC_init(mctx, composite_key, sizeof(composite_key), NULL)) {
+ fprintf(stderr, "EVP_MAC_init() failed\n");
+ goto end;
+ }
+
+ /* Make one or more calls to process the data to be authenticated */
+ if (!EVP_MAC_update(mctx, test_m, sizeof(test_m))) {
+ fprintf(stderr, "EVP_MAC_update() failed\n");
+ goto end;
+ }
+
+ /* Make one call to the final to get the MAC */
+ if (!EVP_MAC_final(mctx, out, &out_len, sizeof(out))) {
+ fprintf(stderr, "EVP_MAC_final() failed\n");
+ goto end;
+ }
+
+ printf("Generated MAC:\n");
+ BIO_dump_indent_fp(stdout, out, out_len, 2);
+ putchar('\n');
+
+ if (out_len != sizeof(expected_output)) {
+ fprintf(stderr, "Generated MAC has an unexpected length\n");
+ goto end;
+ }
+
+ if (CRYPTO_memcmp(expected_output, out, sizeof(expected_output)) != 0) {
+ fprintf(stderr, "Generated MAC does not match expected value\n");
+ goto end;
+ }
+
+ rv = EXIT_SUCCESS;
+end:
+ EVP_CIPHER_CTX_free(aesctx);
+ EVP_CIPHER_free(aes);
+ EVP_MAC_CTX_free(mctx);
+ EVP_MAC_free(mac);
+ OSSL_LIB_CTX_free(library_context);
+ if (rv != EXIT_SUCCESS)
+ ERR_print_errors_fp(stderr);
+ return rv;
+}
diff --git a/demos/mac/siphash.c b/demos/mac/siphash.c
new file mode 100644
index 000000000000..4d36a9d4868b
--- /dev/null
+++ b/demos/mac/siphash.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2021-2022 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 <stdlib.h>
+#include <openssl/core_names.h>
+#include <openssl/evp.h>
+#include <openssl/params.h>
+#include <openssl/err.h>
+
+/*
+ * Taken from the test vector from the paper "SipHash: a fast short-input PRF".
+ * https://www.aumasson.jp/siphash/siphash.pdf
+ */
+
+/*
+ * Hard coding the key into an application is very bad.
+ * It is done here solely for educational purposes.
+ */
+static unsigned char key[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
+};
+
+static unsigned char data[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e
+};
+
+static const unsigned char expected_output[] = {
+ 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1
+};
+
+/*
+ * A property query used for selecting the SIPHASH implementation.
+ */
+static char *propq = NULL;
+
+int main(int argc, char **argv)
+{
+ int rv = EXIT_FAILURE;
+ EVP_MAC *mac = NULL;
+ EVP_MAC_CTX *mctx = NULL;
+ unsigned char out[8];
+ OSSL_PARAM params[4], *p = params;
+ OSSL_LIB_CTX *library_context = NULL;
+ unsigned int digest_len = 8, c_rounds = 2, d_rounds = 4;
+ size_t out_len = 0;
+
+ library_context = OSSL_LIB_CTX_new();
+ if (library_context == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* Fetch the SipHash implementation */
+ mac = EVP_MAC_fetch(library_context, "SIPHASH", propq);
+ if (mac == NULL) {
+ fprintf(stderr, "EVP_MAC_fetch() returned NULL\n");
+ goto end;
+ }
+
+ /* Create a context for the SipHash operation */
+ mctx = EVP_MAC_CTX_new(mac);
+ if (mctx == NULL) {
+ fprintf(stderr, "EVP_MAC_CTX_new() returned NULL\n");
+ goto end;
+ }
+
+ /* SipHash can support either 8 or 16-byte digests. */
+ *p++ = OSSL_PARAM_construct_uint(OSSL_MAC_PARAM_SIZE, &digest_len);
+
+ /*
+ * The number of C-rounds and D-rounds is configurable. Standard SipHash
+ * uses values of 2 and 4 respectively. The following lines are unnecessary
+ * as they set the default, but demonstrate how to change these values.
+ */
+ *p++ = OSSL_PARAM_construct_uint(OSSL_MAC_PARAM_C_ROUNDS, &c_rounds);
+ *p++ = OSSL_PARAM_construct_uint(OSSL_MAC_PARAM_D_ROUNDS, &d_rounds);
+
+ *p = OSSL_PARAM_construct_end();
+
+ /* Initialise the SIPHASH operation */
+ if (!EVP_MAC_init(mctx, key, sizeof(key), params)) {
+ fprintf(stderr, "EVP_MAC_init() failed\n");
+ goto end;
+ }
+
+ /* Make one or more calls to process the data to be authenticated */
+ if (!EVP_MAC_update(mctx, data, sizeof(data))) {
+ fprintf(stderr, "EVP_MAC_update() failed\n");
+ goto end;
+ }
+
+ /* Make one call to the final to get the MAC */
+ if (!EVP_MAC_final(mctx, out, &out_len, sizeof(out))) {
+ fprintf(stderr, "EVP_MAC_final() failed\n");
+ goto end;
+ }
+
+ printf("Generated MAC:\n");
+ BIO_dump_indent_fp(stdout, out, out_len, 2);
+ putchar('\n');
+
+ if (out_len != sizeof(expected_output)) {
+ fprintf(stderr, "Generated MAC has an unexpected length\n");
+ goto end;
+ }
+
+ if (CRYPTO_memcmp(expected_output, out, sizeof(expected_output)) != 0) {
+ fprintf(stderr, "Generated MAC does not match expected value\n");
+ goto end;
+ }
+
+ rv = EXIT_SUCCESS;
+end:
+ EVP_MAC_CTX_free(mctx);
+ EVP_MAC_free(mac);
+ OSSL_LIB_CTX_free(library_context);
+ if (rv != EXIT_SUCCESS)
+ ERR_print_errors_fp(stderr);
+ return rv;
+}
diff --git a/demos/pkcs12/pkread.c b/demos/pkcs12/pkread.c
new file mode 100644
index 000000000000..3b153f8edf15
--- /dev/null
+++ b/demos/pkcs12/pkread.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2000-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 <stdlib.h>
+#include <openssl/pem.h>
+#include <openssl/err.h>
+#include <openssl/pkcs12.h>
+
+/* Simple PKCS#12 file reader */
+
+static char *find_friendly_name(PKCS12 *p12)
+{
+ STACK_OF(PKCS7) *safes;
+ int n, m;
+ char *name = NULL;
+ PKCS7 *safe;
+ STACK_OF(PKCS12_SAFEBAG) *bags;
+ PKCS12_SAFEBAG *bag;
+
+ if ((safes = PKCS12_unpack_authsafes(p12)) == NULL)
+ return NULL;
+
+ for (n = 0; n < sk_PKCS7_num(safes) && name == NULL; n++) {
+ safe = sk_PKCS7_value(safes, n);
+ if (OBJ_obj2nid(safe->type) != NID_pkcs7_data
+ || (bags = PKCS12_unpack_p7data(safe)) == NULL)
+ continue;
+
+ for (m = 0; m < sk_PKCS12_SAFEBAG_num(bags) && name == NULL; m++) {
+ bag = sk_PKCS12_SAFEBAG_value(bags, m);
+ name = PKCS12_get_friendlyname(bag);
+ }
+ sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
+ }
+
+ sk_PKCS7_pop_free(safes, PKCS7_free);
+
+ return name;
+}
+
+int main(int argc, char **argv)
+{
+ FILE *fp;
+ EVP_PKEY *pkey = NULL;
+ X509 *cert = NULL;
+ STACK_OF(X509) *ca = NULL;
+ PKCS12 *p12 = NULL;
+ char *name = NULL;
+ int i, ret = EXIT_FAILURE;
+
+ if (argc != 4) {
+ fprintf(stderr, "Usage: pkread p12file password opfile\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if ((fp = fopen(argv[1], "rb")) == NULL) {
+ fprintf(stderr, "Error opening file %s\n", argv[1]);
+ exit(EXIT_FAILURE);
+ }
+ p12 = d2i_PKCS12_fp(fp, NULL);
+ fclose(fp);
+ if (p12 == NULL) {
+ fprintf(stderr, "Error reading PKCS#12 file\n");
+ ERR_print_errors_fp(stderr);
+ goto err;
+ }
+ if (!PKCS12_parse(p12, argv[2], &pkey, &cert, &ca)) {
+ fprintf(stderr, "Error parsing PKCS#12 file\n");
+ ERR_print_errors_fp(stderr);
+ goto err;
+ }
+ name = find_friendly_name(p12);
+ PKCS12_free(p12);
+ if ((fp = fopen(argv[3], "w")) == NULL) {
+ fprintf(stderr, "Error opening file %s\n", argv[3]);
+ goto err;
+ }
+ if (name != NULL)
+ fprintf(fp, "***Friendly Name***\n%s\n", name);
+ if (pkey != NULL) {
+ fprintf(fp, "***Private Key***\n");
+ PEM_write_PrivateKey(fp, pkey, NULL, NULL, 0, NULL, NULL);
+ }
+ if (cert != NULL) {
+ fprintf(fp, "***User Certificate***\n");
+ PEM_write_X509_AUX(fp, cert);
+ }
+ if (ca != NULL && sk_X509_num(ca) > 0) {
+ fprintf(fp, "***Other Certificates***\n");
+ for (i = 0; i < sk_X509_num(ca); i++)
+ PEM_write_X509_AUX(fp, sk_X509_value(ca, i));
+ }
+ fclose(fp);
+
+ ret = EXIT_SUCCESS;
+
+ err:
+ OPENSSL_free(name);
+ X509_free(cert);
+ EVP_PKEY_free(pkey);
+ sk_X509_pop_free(ca, X509_free);
+
+ return ret;
+}
diff --git a/demos/pkcs12/pkwrite.c b/demos/pkcs12/pkwrite.c
new file mode 100644
index 000000000000..51afd25a260d
--- /dev/null
+++ b/demos/pkcs12/pkwrite.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2000-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 <stdlib.h>
+#include <openssl/pem.h>
+#include <openssl/err.h>
+#include <openssl/pkcs12.h>
+
+/* Simple PKCS#12 file creator */
+
+int main(int argc, char **argv)
+{
+ FILE *fp;
+ EVP_PKEY *pkey;
+ X509 *cert;
+ PKCS12 *p12;
+ if (argc != 5) {
+ fprintf(stderr, "Usage: pkwrite infile password name p12file\n");
+ exit(1);
+ }
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+ if ((fp = fopen(argv[1], "r")) == NULL) {
+ fprintf(stderr, "Error opening file %s\n", argv[1]);
+ exit(1);
+ }
+ cert = PEM_read_X509(fp, NULL, NULL, NULL);
+ rewind(fp);
+ pkey = PEM_read_PrivateKey(fp, NULL, NULL, NULL);
+ fclose(fp);
+ p12 = PKCS12_create(argv[2], argv[3], pkey, cert, NULL, 0, 0, 0, 0, 0);
+ if (!p12) {
+ fprintf(stderr, "Error creating PKCS#12 structure\n");
+ ERR_print_errors_fp(stderr);
+ exit(1);
+ }
+ if ((fp = fopen(argv[4], "wb")) == NULL) {
+ fprintf(stderr, "Error opening file %s\n", argv[4]);
+ ERR_print_errors_fp(stderr);
+ exit(1);
+ }
+ i2d_PKCS12_fp(fp, p12);
+ PKCS12_free(p12);
+ fclose(fp);
+ return 0;
+}
diff --git a/demos/pkey/EVP_PKEY_DSA_keygen.c b/demos/pkey/EVP_PKEY_DSA_keygen.c
new file mode 100644
index 000000000000..bf74a2e6230a
--- /dev/null
+++ b/demos/pkey/EVP_PKEY_DSA_keygen.c
@@ -0,0 +1,83 @@
+/*-
+ * Copyright 2022 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
+ */
+
+/*
+ * Example showing how to generate an DSA key pair.
+ */
+
+#include <openssl/evp.h>
+#include "dsa.inc"
+
+/*
+ * Generate dsa params using default values.
+ * See the EVP_PKEY_DSA_param_fromdata demo if you need
+ * to load DSA params from raw values.
+ * See the EVP_PKEY_DSA_paramgen demo if you need to
+ * use non default parameters.
+ */
+EVP_PKEY *dsa_genparams(OSSL_LIB_CTX *libctx, const char *propq)
+{
+ EVP_PKEY *dsaparamkey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+
+ /* Use the dsa params in a EVP_PKEY ctx */
+ ctx = EVP_PKEY_CTX_new_from_name(libctx, "DSA", propq);
+ if (ctx == NULL) {
+ fprintf(stderr, "EVP_PKEY_CTX_new_from_name() failed\n");
+ return NULL;
+ }
+
+ if (EVP_PKEY_paramgen_init(ctx) <= 0
+ || EVP_PKEY_paramgen(ctx, &dsaparamkey) <= 0) {
+ fprintf(stderr, "DSA paramgen failed\n");
+ goto cleanup;
+ }
+cleanup:
+ EVP_PKEY_CTX_free(ctx);
+ return dsaparamkey;
+}
+
+int main(int argc, char **argv)
+{
+ int rv = EXIT_FAILURE;
+ OSSL_LIB_CTX *libctx = NULL;
+ const char *propq = NULL;
+ EVP_PKEY *dsaparamskey = NULL;
+ EVP_PKEY *dsakey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+
+ /* Generate random dsa params */
+ dsaparamskey = dsa_genparams(libctx, propq);
+ if (dsaparamskey == NULL)
+ goto cleanup;
+
+ /* Use the dsa params in a EVP_PKEY ctx */
+ ctx = EVP_PKEY_CTX_new_from_pkey(libctx, dsaparamskey, propq);
+ if (ctx == NULL) {
+ fprintf(stderr, "EVP_PKEY_CTX_new_from_pkey() failed\n");
+ goto cleanup;
+ }
+
+ /* Generate a key using the dsa params */
+ if (EVP_PKEY_keygen_init(ctx) <= 0
+ || EVP_PKEY_keygen(ctx, &dsakey) <= 0) {
+ fprintf(stderr, "DSA keygen failed\n");
+ goto cleanup;
+ }
+
+ if (!dsa_print_key(dsakey, 1, libctx, propq))
+ goto cleanup;
+
+ rv = EXIT_SUCCESS;
+cleanup:
+ EVP_PKEY_free(dsakey);
+ EVP_PKEY_free(dsaparamskey);
+ EVP_PKEY_CTX_free(ctx);
+ return rv;
+}
diff --git a/demos/pkey/EVP_PKEY_DSA_paramfromdata.c b/demos/pkey/EVP_PKEY_DSA_paramfromdata.c
new file mode 100644
index 000000000000..4c9e55820e94
--- /dev/null
+++ b/demos/pkey/EVP_PKEY_DSA_paramfromdata.c
@@ -0,0 +1,75 @@
+/*-
+ * Copyright 2022 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
+ */
+
+/*
+ * Example showing how to load DSA params from raw data
+ * using EVP_PKEY_fromdata()
+ */
+
+#include <openssl/param_build.h>
+#include <openssl/evp.h>
+#include <openssl/core_names.h>
+#include "dsa.inc"
+
+int main(int argc, char **argv)
+{
+ int rv = EXIT_FAILURE;
+ OSSL_LIB_CTX *libctx = NULL;
+ const char *propq = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *dsaparamkey = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL;
+
+ p = BN_bin2bn(dsa_p, sizeof(dsa_p), NULL);
+ q = BN_bin2bn(dsa_q, sizeof(dsa_q), NULL);
+ g = BN_bin2bn(dsa_g, sizeof(dsa_g), NULL);
+ if (p == NULL || q == NULL || g == NULL)
+ goto cleanup;
+
+ /* Use OSSL_PARAM_BLD if you need to handle BIGNUM Parameters */
+ bld = OSSL_PARAM_BLD_new();
+ if (bld == NULL)
+ goto cleanup;
+ if (!OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p)
+ || !OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_Q, q)
+ || !OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_G, g))
+ goto cleanup;
+ params = OSSL_PARAM_BLD_to_param(bld);
+ if (params == NULL)
+ goto cleanup;
+
+ ctx = EVP_PKEY_CTX_new_from_name(libctx, "DSA", propq);
+ if (ctx == NULL) {
+ fprintf(stderr, "EVP_PKEY_CTX_new_from_name() failed\n");
+ goto cleanup;
+ }
+
+ if (EVP_PKEY_fromdata_init(ctx) <= 0
+ || EVP_PKEY_fromdata(ctx, &dsaparamkey, EVP_PKEY_KEY_PARAMETERS, params) <= 0) {
+ fprintf(stderr, "EVP_PKEY_fromdata() failed\n");
+ goto cleanup;
+ }
+
+ if (!dsa_print_key(dsaparamkey, 0, libctx, propq))
+ goto cleanup;
+
+ rv = EXIT_SUCCESS;
+cleanup:
+ EVP_PKEY_free(dsaparamkey);
+ EVP_PKEY_CTX_free(ctx);
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ BN_free(g);
+ BN_free(q);
+ BN_free(p);
+
+ return rv;
+}
diff --git a/demos/pkey/EVP_PKEY_DSA_paramgen.c b/demos/pkey/EVP_PKEY_DSA_paramgen.c
new file mode 100644
index 000000000000..05dda29c9667
--- /dev/null
+++ b/demos/pkey/EVP_PKEY_DSA_paramgen.c
@@ -0,0 +1,66 @@
+/*-
+ * Copyright 2022 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
+ */
+
+/*
+ * Example showing how to generate DSA params using
+ * FIPS 186-4 DSA FFC parameter generation.
+ */
+
+#include <openssl/evp.h>
+#include "dsa.inc"
+
+int main(int argc, char **argv)
+{
+ int rv = EXIT_FAILURE;
+ OSSL_LIB_CTX *libctx = NULL;
+ const char *propq = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *dsaparamkey = NULL;
+ OSSL_PARAM params[7];
+ unsigned int pbits = 2048;
+ unsigned int qbits = 256;
+ int gindex = 42;
+
+ ctx = EVP_PKEY_CTX_new_from_name(libctx, "DSA", propq);
+ if (ctx == NULL)
+ goto cleanup;
+
+ /*
+ * Demonstrate how to set optional DSA fields as params.
+ * See doc/man7/EVP_PKEY-FFC.pod and doc/man7/EVP_PKEY-DSA.pod
+ * for more information.
+ */
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_TYPE,
+ "fips186_4", 0);
+ params[1] = OSSL_PARAM_construct_uint(OSSL_PKEY_PARAM_FFC_PBITS, &pbits);
+ params[2] = OSSL_PARAM_construct_uint(OSSL_PKEY_PARAM_FFC_QBITS, &qbits);
+ params[3] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_GINDEX, &gindex);
+ params[4] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST,
+ "SHA384", 0);
+ params[5] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST_PROPS,
+ "provider=default", 0);
+ params[6] = OSSL_PARAM_construct_end();
+
+ /* Generate a dsa param key using optional params */
+ if (EVP_PKEY_paramgen_init(ctx) <= 0
+ || EVP_PKEY_CTX_set_params(ctx, params) <= 0
+ || EVP_PKEY_paramgen(ctx, &dsaparamkey) <= 0) {
+ fprintf(stderr, "DSA paramgen failed\n");
+ goto cleanup;
+ }
+
+ if (!dsa_print_key(dsaparamkey, 0, libctx, propq))
+ goto cleanup;
+
+ rv = EXIT_SUCCESS;
+cleanup:
+ EVP_PKEY_free(dsaparamkey);
+ EVP_PKEY_CTX_free(ctx);
+ return rv;
+}
diff --git a/demos/pkey/EVP_PKEY_DSA_paramvalidate.c b/demos/pkey/EVP_PKEY_DSA_paramvalidate.c
new file mode 100644
index 000000000000..f726d30fbf7f
--- /dev/null
+++ b/demos/pkey/EVP_PKEY_DSA_paramvalidate.c
@@ -0,0 +1,202 @@
+/*-
+ * Copyright 2022 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
+ */
+
+/*
+ * Example showing how to validate DSA parameters.
+ *
+ * Proper FIPS 186-4 DSA (FFC) parameter validation requires that all
+ * the parameters used during parameter generation are supplied
+ * when doing the validation. Unfortunately saving DSA parameters as
+ * a PEM or DER file does not write out all required fields. Because
+ * of this the default provider normally only does a partial
+ * validation. The FIPS provider will however try to do a full
+ * validation. To force the default provider to use full
+ * validation the 'seed' that is output during generation must be
+ * added to the key. See doc/man7/EVP_PKEY-FFC for more information.
+ */
+
+#include <openssl/evp.h>
+#include <openssl/core_names.h>
+#include <openssl/pem.h>
+#include "dsa.inc"
+
+/* The following values were output from the EVP_PKEY_DSA_paramgen demo */
+static const char dsapem[] =
+ "-----BEGIN DSA PARAMETERS-----\n"
+ "MIICLAKCAQEA1pobSR1FJ3+Tvi0J6Tk1PSV2owZey1Nuo847hGw/59VCS6RPQEqr\n"
+ "vp5fhbvBjupBeVGA/AMH6rI4i4h6jlhurrqH1CqUHVcDhJzxV668bMLiP3mIxg5o\n"
+ "9Yq8x6BnSOtH5Je0tpeE0/fEvvLjCwBUbwnwWxzjANcvDUEt9XYeRrtB2v52fr56\n"
+ "hVYz3wMMNog4CEDOLTvx7/84eVPuUeWDRQFH1EaHMdulP34KBcatEEpEZapkepng\n"
+ "nohm9sFSPQhq2utpkH7pNXdG0EILBtRDCvUpF5720a48LYofdggh2VEZfgElAGFk\n"
+ "dW/CkvyBDmGIzil5aTz4MMsdudaVYgzt6wIhAPsSGC42Qa+X0AFGvonb5nmfUVm/\n"
+ "8aC+tHk7Nb2AYLHXAoIBADx5C0H1+QHsmGKvuOaY+WKUt7aWUrEivD1zBMJAQ6bL\n"
+ "Wv9lbCq1CFHvVzojeOVpn872NqDEpkx4HTpvqhxWL5CkbN/HaGItsQzkD59AQg3v\n"
+ "4YsLlkesq9Jq6x/aWetJXWO36fszFv1gpD3NY3wliBvMYHx62jfc5suh9D3ZZvu7\n"
+ "PLGH4X4kcfzK/R2b0oVbEBjVTe5GMRYZRqnvfSW2f2fA7BzI1OL83UxDDe58cL2M\n"
+ "GcAoUYXOBAfZ37qLMm2juf+o5gCrT4CXfRPu6kbapt7V/YIc1nsNgeAOKKoFBHBQ\n"
+ "gc5u5G6G/j79FVoSDq9DYwTJcHPsU+eHj1uWHso1AjQ=\n"
+ "-----END DSA PARAMETERS-----\n";
+
+static const char hexseed[] =
+ "cba30ccd905aa7675a0b81769704bf3c"
+ "ccf2ca1892b2eaf6b9e2b38d9bf6affc"
+ "42ada55986d8a1772b442770954d0b65";
+const int gindex = 42;
+const int pcounter = 363;
+static const char digest[] = "SHA384";
+
+/*
+ * Create a new dsa param key that is the combination of an existing param key
+ * plus extra parameters.
+ */
+EVP_PKEY_CTX *create_merged_key(EVP_PKEY *dsaparams, const OSSL_PARAM *newparams,
+ OSSL_LIB_CTX *libctx, const char *propq)
+{
+ EVP_PKEY_CTX *out = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ OSSL_PARAM *mergedparams = NULL;
+ OSSL_PARAM *loadedparams = NULL;
+
+ /* Specify EVP_PKEY_KEY_PUBLIC here if you have a public key */
+ if (EVP_PKEY_todata(dsaparams, EVP_PKEY_KEY_PARAMETERS, &loadedparams) <= 0) {
+ fprintf(stderr, "EVP_PKEY_todata() failed\n");
+ goto cleanup;
+ }
+ mergedparams = OSSL_PARAM_merge(loadedparams, newparams);
+ if (mergedparams == NULL) {
+ fprintf(stderr, "OSSL_PARAM_merge() failed\n");
+ goto cleanup;
+ }
+
+ ctx = EVP_PKEY_CTX_new_from_name(libctx, "DSA", propq);
+ if (ctx == NULL) {
+ fprintf(stderr, "EVP_PKEY_CTX_new_from_name() failed\n");
+ goto cleanup;
+ }
+ if (EVP_PKEY_fromdata_init(ctx) <= 0
+ || EVP_PKEY_fromdata(ctx, &pkey,
+ EVP_PKEY_KEY_PARAMETERS, mergedparams) <= 0) {
+ fprintf(stderr, "EVP_PKEY_fromdata() failed\n");
+ goto cleanup;
+ }
+ out = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, propq);
+ if (out == NULL) {
+ fprintf(stderr, "EVP_PKEY_CTX_new_from_pkey() failed\n");
+ goto cleanup;
+ }
+
+cleanup:
+ EVP_PKEY_free(pkey);
+ OSSL_PARAM_free(loadedparams);
+ OSSL_PARAM_free(mergedparams);
+ EVP_PKEY_CTX_free(ctx);
+ return out;
+}
+
+int main(int argc, char **argv)
+{
+ int rv = EXIT_FAILURE;
+ OSSL_LIB_CTX *libctx = NULL;
+ const char *propq = NULL;
+ EVP_PKEY *dsaparamskey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY_CTX *ctx1 = NULL;
+ EVP_PKEY_CTX *ctx2 = NULL;
+ BIO *in = NULL;
+ OSSL_PARAM params[6];
+ unsigned char seed[64];
+ size_t seedlen;
+
+ if (!OPENSSL_hexstr2buf_ex(seed, sizeof(seed), &seedlen, hexseed, '\0'))
+ goto cleanup;
+ /*
+ * This example loads the PEM data from a memory buffer
+ * Use BIO_new_fp() to load a PEM file instead
+ */
+ in = BIO_new_mem_buf(dsapem, strlen(dsapem));
+ if (in == NULL) {
+ fprintf(stderr, "BIO_new_mem_buf() failed\n");
+ goto cleanup;
+ }
+
+ /* Load DSA params from pem data */
+ dsaparamskey = PEM_read_bio_Parameters_ex(in, NULL, libctx, propq);
+ if (dsaparamskey == NULL) {
+ fprintf(stderr, "Failed to load dsa params\n");
+ goto cleanup;
+ }
+
+ ctx = EVP_PKEY_CTX_new_from_pkey(libctx, dsaparamskey, propq);
+ if (ctx == NULL) {
+ fprintf(stderr, "EVP_PKEY_CTX_new_from_pkey() failed\n");
+ goto cleanup;
+ }
+ /*
+ * When using the default provider this only does a partial check to
+ * make sure that the values of p, q and g are ok.
+ * This will fail however if the FIPS provider is used since it does
+ * a proper FIPS 186-4 key validation which requires extra parameters
+ */
+ if (EVP_PKEY_param_check(ctx) <= 0) {
+ fprintf(stderr, "Simple EVP_PKEY_param_check() failed \n");
+ goto cleanup;
+ }
+
+ /*
+ * Setup parameters that we want to add.
+ * For illustration purposes it deliberately omits a required parameter.
+ */
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_TYPE,
+ "fips186_4", 0);
+ /* Force it to do a proper validation by setting the seed */
+ params[1] = OSSL_PARAM_construct_octet_string(OSSL_PKEY_PARAM_FFC_SEED,
+ (void *)seed, seedlen);
+ params[2] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_GINDEX, (int *)&gindex);
+ params[3] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_PCOUNTER, (int *)&pcounter);
+ params[4] = OSSL_PARAM_construct_end();
+
+ /* generate a new key that is the combination of the existing key and the new params */
+ ctx1 = create_merged_key(dsaparamskey, params, libctx, propq);
+ if (ctx1 == NULL)
+ goto cleanup;
+ /* This will fail since not all the parameters used for key generation are added */
+ if (EVP_PKEY_param_check(ctx1) > 0) {
+ fprintf(stderr, "EVP_PKEY_param_check() should fail\n");
+ goto cleanup;
+ }
+
+ /*
+ * Add the missing parameters onto the end of the existing list of params
+ * If the default was used for the generation then this parameter is not
+ * needed
+ */
+ params[4] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST,
+ (char *)digest, 0);
+ params[5] = OSSL_PARAM_construct_end();
+ ctx2 = create_merged_key(dsaparamskey, params, libctx, propq);
+ if (ctx2 == NULL)
+ goto cleanup;
+ if (EVP_PKEY_param_check(ctx2) <= 0) {
+ fprintf(stderr, "EVP_PKEY_param_check() failed\n");
+ goto cleanup;
+ }
+
+ if (!dsa_print_key(EVP_PKEY_CTX_get0_pkey(ctx2), 0, libctx, propq))
+ goto cleanup;
+
+ rv = EXIT_SUCCESS;
+cleanup:
+ EVP_PKEY_free(dsaparamskey);
+ EVP_PKEY_CTX_free(ctx2);
+ EVP_PKEY_CTX_free(ctx1);
+ EVP_PKEY_CTX_free(ctx);
+ BIO_free(in);
+ return rv;
+}
diff --git a/demos/pkey/EVP_PKEY_EC_keygen.c b/demos/pkey/EVP_PKEY_EC_keygen.c
new file mode 100644
index 000000000000..fa862bdaa07e
--- /dev/null
+++ b/demos/pkey/EVP_PKEY_EC_keygen.c
@@ -0,0 +1,155 @@
+/*-
+ * Copyright 2021-2022 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
+ */
+
+/*
+ * Example showing how to generate an EC key and extract values from the
+ * generated key.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/core_names.h>
+
+static int get_key_values(EVP_PKEY *pkey);
+
+/*
+ * The following code shows how to generate an EC key from a curve name
+ * with additional parameters. If only the curve name is required then the
+ * simple helper can be used instead i.e. Either
+ * pkey = EVP_EC_gen(curvename); OR
+ * pkey = EVP_PKEY_Q_keygen(libctx, propq, "EC", curvename);
+ */
+static EVP_PKEY *do_ec_keygen(void)
+{
+ /*
+ * The libctx and propq can be set if required, they are included here
+ * to show how they are passed to EVP_PKEY_CTX_new_from_name().
+ */
+ OSSL_LIB_CTX *libctx = NULL;
+ const char *propq = NULL;
+ EVP_PKEY *key = NULL;
+ OSSL_PARAM params[3];
+ EVP_PKEY_CTX *genctx = NULL;
+ const char *curvename = "P-256";
+ int use_cofactordh = 1;
+
+ genctx = EVP_PKEY_CTX_new_from_name(libctx, "EC", propq);
+ if (genctx == NULL) {
+ fprintf(stderr, "EVP_PKEY_CTX_new_from_name() failed\n");
+ goto cleanup;
+ }
+
+ if (EVP_PKEY_keygen_init(genctx) <= 0) {
+ fprintf(stderr, "EVP_PKEY_keygen_init() failed\n");
+ goto cleanup;
+ }
+
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME,
+ (char *)curvename, 0);
+ /*
+ * This is an optional parameter.
+ * For many curves where the cofactor is 1, setting this has no effect.
+ */
+ params[1] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_USE_COFACTOR_ECDH,
+ &use_cofactordh);
+ params[2] = OSSL_PARAM_construct_end();
+ if (!EVP_PKEY_CTX_set_params(genctx, params)) {
+ fprintf(stderr, "EVP_PKEY_CTX_set_params() failed\n");
+ goto cleanup;
+ }
+
+ fprintf(stdout, "Generating EC key\n\n");
+ if (EVP_PKEY_generate(genctx, &key) <= 0) {
+ fprintf(stderr, "EVP_PKEY_generate() failed\n");
+ goto cleanup;
+ }
+cleanup:
+ EVP_PKEY_CTX_free(genctx);
+ return key;
+}
+
+/*
+ * The following code shows how retrieve key data from the generated
+ * EC key. See doc/man7/EVP_PKEY-EC.pod for more information.
+ *
+ * EVP_PKEY_print_private() could also be used to display the values.
+ */
+static int get_key_values(EVP_PKEY *pkey)
+{
+ int result = 0;
+ char out_curvename[80];
+ unsigned char out_pubkey[80];
+ unsigned char out_privkey[80];
+ BIGNUM *out_priv = NULL;
+ size_t out_pubkey_len, out_privkey_len = 0;
+
+ if (!EVP_PKEY_get_utf8_string_param(pkey, OSSL_PKEY_PARAM_GROUP_NAME,
+ out_curvename, sizeof(out_curvename),
+ NULL)) {
+ fprintf(stderr, "Failed to get curve name\n");
+ goto cleanup;
+ }
+
+ if (!EVP_PKEY_get_octet_string_param(pkey, OSSL_PKEY_PARAM_PUB_KEY,
+ out_pubkey, sizeof(out_pubkey),
+ &out_pubkey_len)) {
+ fprintf(stderr, "Failed to get public key\n");
+ goto cleanup;
+ }
+
+ if (!EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_PRIV_KEY, &out_priv)) {
+ fprintf(stderr, "Failed to get private key\n");
+ goto cleanup;
+ }
+
+ out_privkey_len = BN_bn2bin(out_priv, out_privkey);
+ if (out_privkey_len <= 0 || out_privkey_len > sizeof(out_privkey)) {
+ fprintf(stderr, "BN_bn2bin failed\n");
+ goto cleanup;
+ }
+
+ fprintf(stdout, "Curve name: %s\n", out_curvename);
+ fprintf(stdout, "Public key:\n");
+ BIO_dump_indent_fp(stdout, out_pubkey, out_pubkey_len, 2);
+ fprintf(stdout, "Private Key:\n");
+ BIO_dump_indent_fp(stdout, out_privkey, out_privkey_len, 2);
+
+ result = 1;
+cleanup:
+ /* Zeroize the private key data when we free it */
+ BN_clear_free(out_priv);
+ return result;
+}
+
+int main(void)
+{
+ int result = 0;
+ EVP_PKEY *pkey;
+
+ pkey = do_ec_keygen();
+ if (pkey == NULL)
+ goto cleanup;
+
+ if (!get_key_values(pkey))
+ goto cleanup;
+
+ /*
+ * At this point we can write out the generated key using
+ * i2d_PrivateKey() and i2d_PublicKey() if required.
+ */
+ result = 1;
+cleanup:
+ if (result != 1)
+ ERR_print_errors_fp(stderr);
+
+ EVP_PKEY_free(pkey);
+ return result == 0;
+}
diff --git a/demos/pkey/EVP_PKEY_RSA_keygen.c b/demos/pkey/EVP_PKEY_RSA_keygen.c
new file mode 100644
index 000000000000..fbecfb6bdb0a
--- /dev/null
+++ b/demos/pkey/EVP_PKEY_RSA_keygen.c
@@ -0,0 +1,289 @@
+/*-
+ * Copyright 2022 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
+ */
+
+/*
+ * Example showing how to generate an RSA key pair.
+ *
+ * When generating an RSA key, you must specify the number of bits in the key. A
+ * reasonable value would be 4096. Avoid using values below 2048. These values
+ * are reasonable as of 2022.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/rsa.h>
+#include <openssl/core_names.h>
+#include <openssl/pem.h>
+
+/* A property query used for selecting algorithm implementations. */
+static const char *propq = NULL;
+
+/*
+ * Generates an RSA public-private key pair and returns it.
+ * The number of bits is specified by the bits argument.
+ *
+ * This uses the long way of generating an RSA key.
+ */
+static EVP_PKEY *generate_rsa_key_long(OSSL_LIB_CTX *libctx, unsigned int bits)
+{
+ EVP_PKEY_CTX *genctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ unsigned int primes = 2;
+
+ /* Create context using RSA algorithm. "RSA-PSS" could also be used here. */
+ genctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", propq);
+ if (genctx == NULL) {
+ fprintf(stderr, "EVP_PKEY_CTX_new_from_name() failed\n");
+ goto cleanup;
+ }
+
+ /* Initialize context for key generation purposes. */
+ if (EVP_PKEY_keygen_init(genctx) <= 0) {
+ fprintf(stderr, "EVP_PKEY_keygen_init() failed\n");
+ goto cleanup;
+ }
+
+ /*
+ * Here we set the number of bits to use in the RSA key.
+ * See comment at top of file for information on appropriate values.
+ */
+ if (EVP_PKEY_CTX_set_rsa_keygen_bits(genctx, bits) <= 0) {
+ fprintf(stderr, "EVP_PKEY_CTX_set_rsa_keygen_bits() failed\n");
+ goto cleanup;
+ }
+
+ /*
+ * It is possible to create an RSA key using more than two primes.
+ * Do not do this unless you know why you need this.
+ * You ordinarily do not need to specify this, as the default is two.
+ *
+ * Both of these parameters can also be set via EVP_PKEY_CTX_set_params, but
+ * these functions provide a more concise way to do so.
+ */
+ if (EVP_PKEY_CTX_set_rsa_keygen_primes(genctx, primes) <= 0) {
+ fprintf(stderr, "EVP_PKEY_CTX_set_rsa_keygen_primes() failed\n");
+ goto cleanup;
+ }
+
+ /*
+ * Generating an RSA key with a number of bits large enough to be secure for
+ * modern applications can take a fairly substantial amount of time (e.g.
+ * one second). If you require fast key generation, consider using an EC key
+ * instead.
+ *
+ * If you require progress information during the key generation process,
+ * you can set a progress callback using EVP_PKEY_set_cb; see the example in
+ * EVP_PKEY_generate(3).
+ */
+ fprintf(stderr, "Generating RSA key, this may take some time...\n");
+ if (EVP_PKEY_generate(genctx, &pkey) <= 0) {
+ fprintf(stderr, "EVP_PKEY_generate() failed\n");
+ goto cleanup;
+ }
+
+ /* pkey is now set to an object representing the generated key pair. */
+
+cleanup:
+ EVP_PKEY_CTX_free(genctx);
+ return pkey;
+}
+
+/*
+ * Generates an RSA public-private key pair and returns it.
+ * The number of bits is specified by the bits argument.
+ *
+ * This uses a more concise way of generating an RSA key, which is suitable for
+ * simple cases. It is used if -s is passed on the command line, otherwise the
+ * long method above is used. The ability to choose between these two methods is
+ * shown here only for demonstration; the results are equivalent.
+ */
+static EVP_PKEY *generate_rsa_key_short(OSSL_LIB_CTX *libctx, unsigned int bits)
+{
+ EVP_PKEY *pkey = NULL;
+
+ fprintf(stderr, "Generating RSA key, this may take some time...\n");
+ pkey = EVP_PKEY_Q_keygen(libctx, propq, "RSA", (size_t)bits);
+
+ if (pkey == NULL)
+ fprintf(stderr, "EVP_PKEY_Q_keygen() failed\n");
+
+ return pkey;
+}
+
+/*
+ * Prints information on an EVP_PKEY object representing an RSA key pair.
+ */
+static int dump_key(const EVP_PKEY *pkey)
+{
+ int rv = 0;
+ int bits = 0;
+ BIGNUM *n = NULL, *e = NULL, *d = NULL, *p = NULL, *q = NULL;
+
+ /*
+ * Retrieve value of n. This value is not secret and forms part of the
+ * public key.
+ *
+ * Calling EVP_PKEY_get_bn_param with a NULL BIGNUM pointer causes
+ * a new BIGNUM to be allocated, so these must be freed subsequently.
+ */
+ if (EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_RSA_N, &n) == 0) {
+ fprintf(stderr, "Failed to retrieve n\n");
+ goto cleanup;
+ }
+
+ /*
+ * Retrieve value of e. This value is not secret and forms part of the
+ * public key. It is typically 65537 and need not be changed.
+ */
+ if (EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_RSA_E, &e) == 0) {
+ fprintf(stderr, "Failed to retrieve e\n");
+ goto cleanup;
+ }
+
+ /*
+ * Retrieve value of d. This value is secret and forms part of the private
+ * key. It must not be published.
+ */
+ if (EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_RSA_D, &d) == 0) {
+ fprintf(stderr, "Failed to retrieve d\n");
+ goto cleanup;
+ }
+
+ /*
+ * Retrieve value of the first prime factor, commonly known as p. This value
+ * is secret and forms part of the private key. It must not be published.
+ */
+ if (EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_RSA_FACTOR1, &p) == 0) {
+ fprintf(stderr, "Failed to retrieve p\n");
+ goto cleanup;
+ }
+
+ /*
+ * Retrieve value of the second prime factor, commonly known as q. This value
+ * is secret and forms part of the private key. It must not be published.
+ *
+ * If you are creating an RSA key with more than two primes for special
+ * applications, you can retrieve these primes with
+ * OSSL_PKEY_PARAM_RSA_FACTOR3, etc.
+ */
+ if (EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_RSA_FACTOR2, &q) == 0) {
+ fprintf(stderr, "Failed to retrieve q\n");
+ goto cleanup;
+ }
+
+ /*
+ * We can also retrieve the key size in bits for informational purposes.
+ */
+ if (EVP_PKEY_get_int_param(pkey, OSSL_PKEY_PARAM_BITS, &bits) == 0) {
+ fprintf(stderr, "Failed to retrieve bits\n");
+ goto cleanup;
+ }
+
+ /* Output hexadecimal representations of the BIGNUM objects. */
+ fprintf(stdout, "\nNumber of bits: %d\n\n", bits);
+ fprintf(stderr, "Public values:\n");
+ fprintf(stdout, " n = 0x");
+ BN_print_fp(stdout, n);
+ fprintf(stdout, "\n");
+
+ fprintf(stdout, " e = 0x");
+ BN_print_fp(stdout, e);
+ fprintf(stdout, "\n\n");
+
+ fprintf(stdout, "Private values:\n");
+ fprintf(stdout, " d = 0x");
+ BN_print_fp(stdout, d);
+ fprintf(stdout, "\n");
+
+ fprintf(stdout, " p = 0x");
+ BN_print_fp(stdout, p);
+ fprintf(stdout, "\n");
+
+ fprintf(stdout, " q = 0x");
+ BN_print_fp(stdout, q);
+ fprintf(stdout, "\n\n");
+
+ /* Output a PEM encoding of the public key. */
+ if (PEM_write_PUBKEY(stdout, pkey) == 0) {
+ fprintf(stderr, "Failed to output PEM-encoded public key\n");
+ goto cleanup;
+ }
+
+ /*
+ * Output a PEM encoding of the private key. Please note that this output is
+ * not encrypted. You may wish to use the arguments to specify encryption of
+ * the key if you are storing it on disk. See PEM_write_PrivateKey(3).
+ */
+ if (PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL, NULL) == 0) {
+ fprintf(stderr, "Failed to output PEM-encoded private key\n");
+ goto cleanup;
+ }
+
+ rv = 1;
+cleanup:
+ BN_free(n); /* not secret */
+ BN_free(e); /* not secret */
+ BN_clear_free(d); /* secret - scrub before freeing */
+ BN_clear_free(p); /* secret - scrub before freeing */
+ BN_clear_free(q); /* secret - scrub before freeing */
+ return rv;
+}
+
+int main(int argc, char **argv)
+{
+ int rv = 1;
+ OSSL_LIB_CTX *libctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ unsigned int bits = 4096;
+ int bits_i, use_short = 0;
+
+ /* usage: [-s] [<bits>] */
+ if (argc > 1 && strcmp(argv[1], "-s") == 0) {
+ --argc;
+ ++argv;
+ use_short = 1;
+ }
+
+ if (argc > 1) {
+ bits_i = atoi(argv[1]);
+ if (bits < 512) {
+ fprintf(stderr, "Invalid RSA key size\n");
+ return 1;
+ }
+
+ bits = (unsigned int)bits_i;
+ }
+
+ /* Avoid using key sizes less than 2048 bits; see comment at top of file. */
+ if (bits < 2048)
+ fprintf(stderr, "Warning: very weak key size\n\n");
+
+ /* Generate RSA key. */
+ if (use_short)
+ pkey = generate_rsa_key_short(libctx, bits);
+ else
+ pkey = generate_rsa_key_long(libctx, bits);
+
+ if (pkey == NULL)
+ goto cleanup;
+
+ /* Dump the integers comprising the key. */
+ if (dump_key(pkey) == 0) {
+ fprintf(stderr, "Failed to dump key\n");
+ goto cleanup;
+ }
+
+ rv = 0;
+cleanup:
+ EVP_PKEY_free(pkey);
+ OSSL_LIB_CTX_free(libctx);
+ return rv;
+}
diff --git a/demos/pkey/Makefile b/demos/pkey/Makefile
new file mode 100644
index 000000000000..9e7013003d61
--- /dev/null
+++ b/demos/pkey/Makefile
@@ -0,0 +1,37 @@
+#
+# To run the demos when linked with a shared library (default):
+#
+# LD_LIBRARY_PATH=../.. ./EVP_PKEY_EC_keygen
+# LD_LIBRARY_PATH=../.. ./EVP_PKEY_RSA_keygen
+# LD_LIBRARY_PATH=../.. ./EVP_PKEY_DSA_keygen
+# LD_LIBRARY_PATH=../.. ./EVP_PKEY_DSA_paramgen
+# LD_LIBRARY_PATH=../.. ./EVP_PKEY_DSA_paramvalidate
+# LD_LIBRARY_PATH=../.. ./EVP_PKEY_DSA_paramfromdata
+
+CFLAGS = -I../../include -g -Wall
+LDFLAGS = -L../..
+LDLIBS = -lcrypto
+
+all: EVP_PKEY_EC_keygen EVP_PKEY_RSA_keygen EVP_PKEY_DSA_keygen \
+ EVP_PKEY_DSA_paramgen EVP_PKEY_DSA_paramvalidate EVP_PKEY_DSA_paramfromdata \
+
+%.o: %.c dsa.inc
+ $(CC) $(CFLAGS) -c $<
+
+EVP_PKEY_EC_keygen: EVP_PKEY_EC_keygen.o
+
+EVP_PKEY_RSA_keygen: EVP_PKEY_RSA_keygen.o
+
+EVP_PKEY_DSA_keygen: EVP_PKEY_DSA_keygen.o
+
+EVP_PKEY_DSA_paramgen: EVP_PKEY_DSA_paramgen.o
+
+EVP_PKEY_DSA_paramvalidate: EVP_PKEY_DSA_paramvalidate.o
+
+EVP_PKEY_DSA_paramfromdata: EVP_PKEY_DSA_paramfromdata.o
+
+test: ;
+
+clean:
+ $(RM) *.o EVP_PKEY_EC_keygen EVP_PKEY_RSA_keygen EVP_PKEY_DSA_keygen \
+ EVP_PKEY_DSA_paramgen EVP_PKEY_DSA_paramfromdata EVP_PKEY_DSA_paramvalidate
diff --git a/demos/pkey/dsa.inc b/demos/pkey/dsa.inc
new file mode 100644
index 000000000000..82c65057eb2a
--- /dev/null
+++ b/demos/pkey/dsa.inc
@@ -0,0 +1,172 @@
+/*-
+ * Copyright 2022 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/pem.h>
+#include <openssl/core_names.h>
+
+/* Raw DSA params for P, Q and G */
+static const unsigned char dsa_p[] = {
+ 0xa2, 0x9b, 0x88, 0x72, 0xce, 0x8b, 0x84, 0x23,
+ 0xb7, 0xd5, 0xd2, 0x1d, 0x4b, 0x02, 0xf5, 0x7e,
+ 0x03, 0xe9, 0xe6, 0xb8, 0xa2, 0x58, 0xdc, 0x16,
+ 0x61, 0x1b, 0xa0, 0x98, 0xab, 0x54, 0x34, 0x15,
+ 0xe4, 0x15, 0xf1, 0x56, 0x99, 0x7a, 0x3e, 0xe2,
+ 0x36, 0x65, 0x8f, 0xa0, 0x93, 0x26, 0x0d, 0xe3,
+ 0xad, 0x42, 0x2e, 0x05, 0xe0, 0x46, 0xf9, 0xec,
+ 0x29, 0x16, 0x1a, 0x37, 0x5f, 0x0e, 0xb4, 0xef,
+ 0xfc, 0xef, 0x58, 0x28, 0x5c, 0x5d, 0x39, 0xed,
+ 0x42, 0x5d, 0x7a, 0x62, 0xca, 0x12, 0x89, 0x6c,
+ 0x4a, 0x92, 0xcb, 0x19, 0x46, 0xf2, 0x95, 0x2a,
+ 0x48, 0x13, 0x3f, 0x07, 0xda, 0x36, 0x4d, 0x1b,
+ 0xdf, 0x6b, 0x0f, 0x71, 0x39, 0x98, 0x3e, 0x69,
+ 0x3c, 0x80, 0x05, 0x9b, 0x0e, 0xac, 0xd1, 0x47,
+ 0x9b, 0xa9, 0xf2, 0x85, 0x77, 0x54, 0xed, 0xe7,
+ 0x5f, 0x11, 0x2b, 0x07, 0xeb, 0xbf, 0x35, 0x34,
+ 0x8b, 0xbf, 0x3e, 0x01, 0xe0, 0x2f, 0x2d, 0x47,
+ 0x3d, 0xe3, 0x94, 0x53, 0xf9, 0x9d, 0xd2, 0x36,
+ 0x75, 0x41, 0xca, 0xca, 0x3b, 0xa0, 0x11, 0x66,
+ 0x34, 0x3d, 0x7b, 0x5b, 0x58, 0xa3, 0x7b, 0xd1,
+ 0xb7, 0x52, 0x1d, 0xb2, 0xf1, 0x3b, 0x86, 0x70,
+ 0x71, 0x32, 0xfe, 0x09, 0xf4, 0xcd, 0x09, 0xdc,
+ 0x16, 0x18, 0xfa, 0x34, 0x01, 0xeb, 0xf9, 0xcc,
+ 0x7b, 0x19, 0xfa, 0x94, 0xaa, 0x47, 0x20, 0x88,
+ 0x13, 0x3d, 0x6c, 0xb2, 0xd3, 0x5c, 0x11, 0x79,
+ 0xc8, 0xc8, 0xff, 0x36, 0x87, 0x58, 0xd5, 0x07,
+ 0xd9, 0xf9, 0xa1, 0x7d, 0x46, 0xc1, 0x10, 0xfe,
+ 0x31, 0x44, 0xce, 0x9b, 0x02, 0x2b, 0x42, 0xe4,
+ 0x19, 0xeb, 0x4f, 0x53, 0x88, 0x61, 0x3b, 0xfc,
+ 0x3e, 0x26, 0x24, 0x1a, 0x43, 0x2e, 0x87, 0x06,
+ 0xbc, 0x58, 0xef, 0x76, 0x11, 0x72, 0x78, 0xde,
+ 0xab, 0x6c, 0xf6, 0x92, 0x61, 0x82, 0x91, 0xb7
+};
+
+static const unsigned char dsa_q[] = {
+ 0xa3, 0xbf, 0xd9, 0xab, 0x78, 0x84, 0x79, 0x4e,
+ 0x38, 0x34, 0x50, 0xd5, 0x89, 0x1d, 0xc1, 0x8b,
+ 0x65, 0x15, 0x7b, 0xdc, 0xfc, 0xda, 0xc5, 0x15,
+ 0x18, 0x90, 0x28, 0x67
+};
+
+static const unsigned char dsa_g[] = {
+ 0x68, 0x19, 0x27, 0x88, 0x69, 0xc7, 0xfd, 0x3d,
+ 0x2d, 0x7b, 0x77, 0xf7, 0x7e, 0x81, 0x50, 0xd9,
+ 0xad, 0x43, 0x3b, 0xea, 0x3b, 0xa8, 0x5e, 0xfc,
+ 0x80, 0x41, 0x5a, 0xa3, 0x54, 0x5f, 0x78, 0xf7,
+ 0x22, 0x96, 0xf0, 0x6c, 0xb1, 0x9c, 0xed, 0xa0,
+ 0x6c, 0x94, 0xb0, 0x55, 0x1c, 0xfe, 0x6e, 0x6f,
+ 0x86, 0x3e, 0x31, 0xd1, 0xde, 0x6e, 0xed, 0x7d,
+ 0xab, 0x8b, 0x0c, 0x9d, 0xf2, 0x31, 0xe0, 0x84,
+ 0x34, 0xd1, 0x18, 0x4f, 0x91, 0xd0, 0x33, 0x69,
+ 0x6b, 0xb3, 0x82, 0xf8, 0x45, 0x5e, 0x98, 0x88,
+ 0xf5, 0xd3, 0x1d, 0x47, 0x84, 0xec, 0x40, 0x12,
+ 0x02, 0x46, 0xf4, 0xbe, 0xa6, 0x17, 0x94, 0xbb,
+ 0xa5, 0x86, 0x6f, 0x09, 0x74, 0x64, 0x63, 0xbd,
+ 0xf8, 0xe9, 0xe1, 0x08, 0xcd, 0x95, 0x29, 0xc3,
+ 0xd0, 0xf6, 0xdf, 0x80, 0x31, 0x6e, 0x2e, 0x70,
+ 0xaa, 0xeb, 0x1b, 0x26, 0xcd, 0xb8, 0xad, 0x97,
+ 0xbc, 0x3d, 0x28, 0x7e, 0x0b, 0x8d, 0x61, 0x6c,
+ 0x42, 0xe6, 0x5b, 0x87, 0xdb, 0x20, 0xde, 0xb7,
+ 0x00, 0x5b, 0xc4, 0x16, 0x74, 0x7a, 0x64, 0x70,
+ 0x14, 0x7a, 0x68, 0xa7, 0x82, 0x03, 0x88, 0xeb,
+ 0xf4, 0x4d, 0x52, 0xe0, 0x62, 0x8a, 0xf9, 0xcf,
+ 0x1b, 0x71, 0x66, 0xd0, 0x34, 0x65, 0xf3, 0x5a,
+ 0xcc, 0x31, 0xb6, 0x11, 0x0c, 0x43, 0xda, 0xbc,
+ 0x7c, 0x5d, 0x59, 0x1e, 0x67, 0x1e, 0xaf, 0x7c,
+ 0x25, 0x2c, 0x1c, 0x14, 0x53, 0x36, 0xa1, 0xa4,
+ 0xdd, 0xf1, 0x32, 0x44, 0xd5, 0x5e, 0x83, 0x56,
+ 0x80, 0xca, 0xb2, 0x53, 0x3b, 0x82, 0xdf, 0x2e,
+ 0xfe, 0x55, 0xec, 0x18, 0xc1, 0xe6, 0xcd, 0x00,
+ 0x7b, 0xb0, 0x89, 0x75, 0x8b, 0xb1, 0x7c, 0x2c,
+ 0xbe, 0x14, 0x44, 0x1b, 0xd0, 0x93, 0xae, 0x66,
+ 0xe5, 0x97, 0x6d, 0x53, 0x73, 0x3f, 0x4f, 0xa3,
+ 0x26, 0x97, 0x01, 0xd3, 0x1d, 0x23, 0xd4, 0x67
+};
+
+/* Helper function to retrieve and print a key BIGNUM field */
+static void print_bn(BIO *bio, const EVP_PKEY *pkey, const char *name)
+{
+ BIGNUM *bn = NULL;
+
+ if (EVP_PKEY_get_bn_param(pkey, name, &bn) == 0)
+ return;
+
+ BIO_printf(bio, " %s = 0x", name);
+ BN_print(bio, bn);
+ BIO_printf(bio, "\n");
+ BN_clear_free(bn);
+}
+
+/*
+ * Print DSA key info
+ *
+ * This method shows how to extract DSA data from an EVP_PKEY.
+ * There are simpler ways to print using EVP_PKEY_print_XXXX().
+ */
+static int dsa_print_key(const EVP_PKEY *pkey, int keypair,
+ OSSL_LIB_CTX *libctx, const char *propq)
+{
+
+ int rv = 0, gindex, counter;
+ BIO *bio = BIO_new_fp(stdout, BIO_NOCLOSE);
+ unsigned char seed[2048];
+ size_t seedlen;
+
+ if (bio == NULL)
+ return 0;
+
+ /* Output hexadecimal representations of the BIGNUM objects. */
+ BIO_printf(bio, "\nPublic values:\n");
+ print_bn(bio, pkey, OSSL_PKEY_PARAM_FFC_P);
+ print_bn(bio, pkey, OSSL_PKEY_PARAM_FFC_Q);
+ print_bn(bio, pkey, OSSL_PKEY_PARAM_FFC_G);
+
+ if (EVP_PKEY_get_octet_string_param(pkey, OSSL_PKEY_PARAM_FFC_SEED, seed,
+ sizeof(seed), &seedlen) > 0) {
+ BIO_printf(bio, " %s\n", OSSL_PKEY_PARAM_FFC_SEED);
+ BIO_dump(bio, seed, seedlen);
+ }
+ if (EVP_PKEY_get_int_param(pkey, OSSL_PKEY_PARAM_FFC_GINDEX, &gindex) > 0) {
+ if (gindex != -1)
+ BIO_printf(bio, " %s = %d\n", OSSL_PKEY_PARAM_FFC_GINDEX, gindex);
+ }
+ if (EVP_PKEY_get_int_param(pkey, OSSL_PKEY_PARAM_FFC_PCOUNTER, &counter) > 0) {
+ if (counter != -1)
+ BIO_printf(bio, " %s = %d\n", OSSL_PKEY_PARAM_FFC_PCOUNTER, counter);
+ }
+
+ if (keypair) {
+ fprintf(stdout, "\nPrivate value:\n");
+ print_bn(bio, pkey, OSSL_PKEY_PARAM_PRIV_KEY);
+
+ /* Output a PEM encoding of the public key. */
+ if (PEM_write_bio_PUBKEY_ex(bio, pkey, libctx, propq) == 0) {
+ fprintf(stderr, "Failed to output PEM-encoded public key\n");
+ goto cleanup;
+ }
+
+ /*
+ * Output a PEM encoding of the private key. Please note that this output is
+ * not encrypted. You may wish to use the arguments to specify encryption of
+ * the key if you are storing it on disk. See PEM_write_bio_PrivateKey_ex(3).
+ */
+ if (PEM_write_bio_PrivateKey_ex(bio, pkey, NULL, NULL, 0, NULL, NULL, libctx, propq) == 0) {
+ fprintf(stderr, "Failed to output PEM-encoded private key\n");
+ goto cleanup;
+ }
+ } else {
+ if (PEM_write_bio_Parameters(bio, pkey) == 0) {
+ fprintf(stderr, "Failed to output PEM-encoded params\n");
+ goto cleanup;
+ }
+ }
+ rv = 1;
+cleanup:
+ BIO_free(bio);
+ return rv;
+}
diff --git a/demos/signature/EVP_Signature_demo.c b/demos/signature/EVP_Signature_demo.c
new file mode 100644
index 000000000000..123c95c26ad8
--- /dev/null
+++ b/demos/signature/EVP_Signature_demo.c
@@ -0,0 +1,235 @@
+/*-
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * An example that uses the EVP_MD*, EVP_DigestSign* and EVP_DigestVerify*
+ * methods to calculate and verify a signature of two static buffers.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/decoder.h>
+#include "EVP_Signature_demo.h"
+
+/*
+ * This demonstration will calculate and verify a signature of data using
+ * the soliloquy from Hamlet scene 1 act 3
+ */
+
+static const char *hamlet_1 =
+ "To be, or not to be, that is the question,\n"
+ "Whether tis nobler in the minde to suffer\n"
+ "The slings and arrowes of outragious fortune,\n"
+ "Or to take Armes again in a sea of troubles,\n"
+;
+static const char *hamlet_2 =
+ "And by opposing, end them, to die to sleep;\n"
+ "No more, and by a sleep, to say we end\n"
+ "The heart-ache, and the thousand natural shocks\n"
+ "That flesh is heir to? tis a consumation\n"
+;
+
+/*
+ * For demo_sign, load EC private key priv_key from priv_key_der[].
+ * For demo_verify, load EC public key pub_key from pub_key_der[].
+ */
+static EVP_PKEY *get_key(OSSL_LIB_CTX *libctx, const char *propq, int public)
+{
+ OSSL_DECODER_CTX *dctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ int selection;
+ const unsigned char *data;
+ size_t data_len;
+
+ if (public) {
+ selection = EVP_PKEY_PUBLIC_KEY;
+ data = pub_key_der;
+ data_len = sizeof(pub_key_der);
+ } else {
+ selection = EVP_PKEY_KEYPAIR;
+ data = priv_key_der;
+ data_len = sizeof(priv_key_der);
+ }
+ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, "EC",
+ selection, libctx, propq);
+ (void)OSSL_DECODER_from_data(dctx, &data, &data_len);
+ OSSL_DECODER_CTX_free(dctx);
+ if (pkey == NULL)
+ fprintf(stderr, "Failed to load %s key.\n", public ? "public" : "private");
+ return pkey;
+}
+
+static int demo_sign(OSSL_LIB_CTX *libctx, const char *sig_name,
+ size_t *sig_out_len, unsigned char **sig_out_value)
+{
+ int result = 0, public = 0;
+ size_t sig_len;
+ unsigned char *sig_value = NULL;
+ const char *propq = NULL;
+ EVP_MD_CTX *sign_context = NULL;
+ EVP_PKEY *priv_key = NULL;
+
+ /* Get private key */
+ priv_key = get_key(libctx, propq, public);
+ if (priv_key == NULL) {
+ fprintf(stderr, "Get private key failed.\n");
+ goto cleanup;
+ }
+ /*
+ * Make a message signature context to hold temporary state
+ * during signature creation
+ */
+ sign_context = EVP_MD_CTX_new();
+ if (sign_context == NULL) {
+ fprintf(stderr, "EVP_MD_CTX_new failed.\n");
+ goto cleanup;
+ }
+ /*
+ * Initialize the sign context to use the fetched
+ * sign provider.
+ */
+ if (!EVP_DigestSignInit_ex(sign_context, NULL, sig_name,
+ libctx, NULL, priv_key, NULL)) {
+ fprintf(stderr, "EVP_DigestSignInit_ex failed.\n");
+ goto cleanup;
+ }
+ /*
+ * EVP_DigestSignUpdate() can be called several times on the same context
+ * to include additional data.
+ */
+ if (!EVP_DigestSignUpdate(sign_context, hamlet_1, strlen(hamlet_1))) {
+ fprintf(stderr, "EVP_DigestSignUpdate(hamlet_1) failed.\n");
+ goto cleanup;
+ }
+ if (!EVP_DigestSignUpdate(sign_context, hamlet_2, strlen(hamlet_2))) {
+ fprintf(stderr, "EVP_DigestSignUpdate(hamlet_2) failed.\n");
+ goto cleanup;
+ }
+ /* Call EVP_DigestSignFinal to get signature length sig_len */
+ if (!EVP_DigestSignFinal(sign_context, NULL, &sig_len)) {
+ fprintf(stderr, "EVP_DigestSignFinal failed.\n");
+ goto cleanup;
+ }
+ if (sig_len <= 0) {
+ fprintf(stderr, "EVP_DigestSignFinal returned invalid signature length.\n");
+ goto cleanup;
+ }
+ sig_value = OPENSSL_malloc(sig_len);
+ if (sig_value == NULL) {
+ fprintf(stderr, "No memory.\n");
+ goto cleanup;
+ }
+ if (!EVP_DigestSignFinal(sign_context, sig_value, &sig_len)) {
+ fprintf(stderr, "EVP_DigestSignFinal failed.\n");
+ goto cleanup;
+ }
+ *sig_out_len = sig_len;
+ *sig_out_value = sig_value;
+ fprintf(stdout, "Generating signature:\n");
+ BIO_dump_indent_fp(stdout, sig_value, sig_len, 2);
+ fprintf(stdout, "\n");
+ result = 1;
+
+cleanup:
+ /* OpenSSL free functions will ignore NULL arguments */
+ if (!result)
+ OPENSSL_free(sig_value);
+ EVP_PKEY_free(priv_key);
+ EVP_MD_CTX_free(sign_context);
+ return result;
+}
+
+static int demo_verify(OSSL_LIB_CTX *libctx, const char *sig_name,
+ size_t sig_len, unsigned char *sig_value)
+{
+ int result = 0, public = 1;
+ const char *propq = NULL;
+ EVP_MD_CTX *verify_context = NULL;
+ EVP_PKEY *pub_key = NULL;
+
+ /*
+ * Make a verify signature context to hold temporary state
+ * during signature verification
+ */
+ verify_context = EVP_MD_CTX_new();
+ if (verify_context == NULL) {
+ fprintf(stderr, "EVP_MD_CTX_new failed.\n");
+ goto cleanup;
+ }
+ /* Get public key */
+ pub_key = get_key(libctx, propq, public);
+ if (pub_key == NULL) {
+ fprintf(stderr, "Get public key failed.\n");
+ goto cleanup;
+ }
+ /* Verify */
+ if (!EVP_DigestVerifyInit_ex(verify_context, NULL, sig_name,
+ libctx, NULL, pub_key, NULL)) {
+ fprintf(stderr, "EVP_DigestVerifyInit failed.\n");
+ goto cleanup;
+ }
+ /*
+ * EVP_DigestVerifyUpdate() can be called several times on the same context
+ * to include additional data.
+ */
+ if (!EVP_DigestVerifyUpdate(verify_context, hamlet_1, strlen(hamlet_1))) {
+ fprintf(stderr, "EVP_DigestVerifyUpdate(hamlet_1) failed.\n");
+ goto cleanup;
+ }
+ if (!EVP_DigestVerifyUpdate(verify_context, hamlet_2, strlen(hamlet_2))) {
+ fprintf(stderr, "EVP_DigestVerifyUpdate(hamlet_2) failed.\n");
+ goto cleanup;
+ }
+ if (EVP_DigestVerifyFinal(verify_context, sig_value, sig_len) <= 0) {
+ fprintf(stderr, "EVP_DigestVerifyFinal failed.\n");
+ goto cleanup;
+ }
+ fprintf(stdout, "Signature verified.\n");
+ result = 1;
+
+cleanup:
+ /* OpenSSL free functions will ignore NULL arguments */
+ EVP_PKEY_free(pub_key);
+ EVP_MD_CTX_free(verify_context);
+ return result;
+}
+
+int main(void)
+{
+ OSSL_LIB_CTX *libctx = NULL;
+ const char *sig_name = "SHA3-512";
+ size_t sig_len = 0;
+ unsigned char *sig_value = NULL;
+ int result = 0;
+
+ libctx = OSSL_LIB_CTX_new();
+ if (libctx == NULL) {
+ fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");
+ goto cleanup;
+ }
+ if (!demo_sign(libctx, sig_name, &sig_len, &sig_value)) {
+ fprintf(stderr, "demo_sign failed.\n");
+ goto cleanup;
+ }
+ if (!demo_verify(libctx, sig_name, sig_len, sig_value)) {
+ fprintf(stderr, "demo_verify failed.\n");
+ goto cleanup;
+ }
+ result = 1;
+
+cleanup:
+ if (result != 1)
+ ERR_print_errors_fp(stderr);
+ /* OpenSSL free functions will ignore NULL arguments */
+ OSSL_LIB_CTX_free(libctx);
+ OPENSSL_free(sig_value);
+ return result == 0;
+}
diff --git a/demos/signature/EVP_Signature_demo.h b/demos/signature/EVP_Signature_demo.h
new file mode 100644
index 000000000000..aef3e60783e8
--- /dev/null
+++ b/demos/signature/EVP_Signature_demo.h
@@ -0,0 +1,76 @@
+/*-
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Signers private EC key */
+static const unsigned char priv_key_der[] = {
+0x30, 0x82, 0x01, 0x68, 0x02, 0x01, 0x01, 0x04, 0x20, 0x51, 0x77, 0xae,
+0xf4, 0x18, 0xf4, 0x6b, 0xc4, 0xe5, 0xbb, 0xe9, 0xe6, 0x9e, 0x6d, 0xb0,
+0xea, 0x12, 0xf9, 0xf3, 0xdb, 0x9d, 0x56, 0x59, 0xf7, 0x5a, 0x17, 0xd7,
+0xd1, 0xe4, 0xd7, 0x47, 0x28, 0xa0, 0x81, 0xfa, 0x30, 0x81, 0xf7, 0x02,
+0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x01,
+0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0x30, 0x5b, 0x04, 0x20, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
+0x04, 0x20, 0x5a, 0xc6, 0x35, 0xd8, 0xaa, 0x3a, 0x93, 0xe7, 0xb3, 0xeb,
+0xbd, 0x55, 0x76, 0x98, 0x86, 0xbc, 0x65, 0x1d, 0x06, 0xb0, 0xcc, 0x53,
+0xb0, 0xf6, 0x3b, 0xce, 0x3c, 0x3e, 0x27, 0xd2, 0x60, 0x4b, 0x03, 0x15,
+0x00, 0xc4, 0x9d, 0x36, 0x08, 0x86, 0xe7, 0x04, 0x93, 0x6a, 0x66, 0x78,
+0xe1, 0x13, 0x9d, 0x26, 0xb7, 0x81, 0x9f, 0x7e, 0x90, 0x04, 0x41, 0x04,
+0x6b, 0x17, 0xd1, 0xf2, 0xe1, 0x2c, 0x42, 0x47, 0xf8, 0xbc, 0xe6, 0xe5,
+0x63, 0xa4, 0x40, 0xf2, 0x77, 0x03, 0x7d, 0x81, 0x2d, 0xeb, 0x33, 0xa0,
+0xf4, 0xa1, 0x39, 0x45, 0xd8, 0x98, 0xc2, 0x96, 0x4f, 0xe3, 0x42, 0xe2,
+0xfe, 0x1a, 0x7f, 0x9b, 0x8e, 0xe7, 0xeb, 0x4a, 0x7c, 0x0f, 0x9e, 0x16,
+0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce, 0xcb, 0xb6, 0x40, 0x68,
+0x37, 0xbf, 0x51, 0xf5, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00,
+0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbc,
+0xe6, 0xfa, 0xad, 0xa7, 0x17, 0x9e, 0x84, 0xf3, 0xb9, 0xca, 0xc2, 0xfc,
+0x63, 0x25, 0x51, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04,
+0x4f, 0xe7, 0x7b, 0xb6, 0xbb, 0x54, 0x42, 0x39, 0xed, 0x5d, 0xe5, 0x40,
+0xc8, 0xd8, 0x71, 0xca, 0x6d, 0x83, 0x71, 0xd1, 0x88, 0x2a, 0x65, 0x00,
+0x6c, 0xc6, 0x2f, 0x01, 0x31, 0x49, 0xbe, 0x76, 0x7a, 0x67, 0x6a, 0x28,
+0x33, 0xc7, 0x5b, 0xb9, 0x24, 0x45, 0x24, 0x6e, 0xf0, 0x6d, 0x2f, 0x34,
+0x06, 0x53, 0x73, 0x6a, 0xff, 0x90, 0x90, 0xc1, 0x6d, 0x9b, 0x94, 0x0d,
+0x0e, 0x1f, 0x95, 0x65,
+};
+
+/* The matching public key used for verifying */
+static const unsigned char pub_key_der[] = {
+0x30, 0x82, 0x01, 0x4b, 0x30, 0x82, 0x01, 0x03, 0x06, 0x07, 0x2a, 0x86,
+0x48, 0xce, 0x3d, 0x02, 0x01, 0x30, 0x81, 0xf7, 0x02, 0x01, 0x01, 0x30,
+0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x01, 0x01, 0x02, 0x21,
+0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x5b, 0x04,
+0x20, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x04, 0x20, 0x5a,
+0xc6, 0x35, 0xd8, 0xaa, 0x3a, 0x93, 0xe7, 0xb3, 0xeb, 0xbd, 0x55, 0x76,
+0x98, 0x86, 0xbc, 0x65, 0x1d, 0x06, 0xb0, 0xcc, 0x53, 0xb0, 0xf6, 0x3b,
+0xce, 0x3c, 0x3e, 0x27, 0xd2, 0x60, 0x4b, 0x03, 0x15, 0x00, 0xc4, 0x9d,
+0x36, 0x08, 0x86, 0xe7, 0x04, 0x93, 0x6a, 0x66, 0x78, 0xe1, 0x13, 0x9d,
+0x26, 0xb7, 0x81, 0x9f, 0x7e, 0x90, 0x04, 0x41, 0x04, 0x6b, 0x17, 0xd1,
+0xf2, 0xe1, 0x2c, 0x42, 0x47, 0xf8, 0xbc, 0xe6, 0xe5, 0x63, 0xa4, 0x40,
+0xf2, 0x77, 0x03, 0x7d, 0x81, 0x2d, 0xeb, 0x33, 0xa0, 0xf4, 0xa1, 0x39,
+0x45, 0xd8, 0x98, 0xc2, 0x96, 0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f,
+0x9b, 0x8e, 0xe7, 0xeb, 0x4a, 0x7c, 0x0f, 0x9e, 0x16, 0x2b, 0xce, 0x33,
+0x57, 0x6b, 0x31, 0x5e, 0xce, 0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51,
+0xf5, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbc, 0xe6, 0xfa, 0xad,
+0xa7, 0x17, 0x9e, 0x84, 0xf3, 0xb9, 0xca, 0xc2, 0xfc, 0x63, 0x25, 0x51,
+0x02, 0x01, 0x01, 0x03, 0x42, 0x00, 0x04, 0x4f, 0xe7, 0x7b, 0xb6, 0xbb,
+0x54, 0x42, 0x39, 0xed, 0x5d, 0xe5, 0x40, 0xc8, 0xd8, 0x71, 0xca, 0x6d,
+0x83, 0x71, 0xd1, 0x88, 0x2a, 0x65, 0x00, 0x6c, 0xc6, 0x2f, 0x01, 0x31,
+0x49, 0xbe, 0x76, 0x7a, 0x67, 0x6a, 0x28, 0x33, 0xc7, 0x5b, 0xb9, 0x24,
+0x45, 0x24, 0x6e, 0xf0, 0x6d, 0x2f, 0x34, 0x06, 0x53, 0x73, 0x6a, 0xff,
+0x90, 0x90, 0xc1, 0x6d, 0x9b, 0x94, 0x0d, 0x0e, 0x1f, 0x95, 0x65,
+};
+
diff --git a/demos/signature/Makefile b/demos/signature/Makefile
new file mode 100644
index 000000000000..563ec7799fb8
--- /dev/null
+++ b/demos/signature/Makefile
@@ -0,0 +1,22 @@
+#
+# To run the demos when linked with a shared library (default):
+#
+# LD_LIBRARY_PATH=../.. ./EVP_Signature_demo
+
+CFLAGS = -I../../include -g -Wall
+LDFLAGS = -L../..
+LDLIBS = -lcrypto
+
+all: EVP_Signature_demo rsa_pss_direct rsa_pss_hash
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c $<
+
+EVP_Signature_demo: EVP_Signature_demo.o
+rsa_pss_direct: rsa_pss_direct.o
+rsa_pss_hash: rsa_pss_hash.o
+
+test: ;
+
+clean:
+ $(RM) *.o EVP_Signature_demo rsa_pss_direct rsa_pss_hash
diff --git a/demos/signature/rsa_pss.h b/demos/signature/rsa_pss.h
new file mode 100644
index 000000000000..bdab9f891e3c
--- /dev/null
+++ b/demos/signature/rsa_pss.h
@@ -0,0 +1,256 @@
+/*-
+ * Copyright 2022 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
+ */
+
+/* 4096-bit RSA private key, DER. */
+static const unsigned char rsa_priv_key[] = {
+ 0x30, 0x82, 0x09, 0x28, 0x02, 0x01, 0x00, 0x02, 0x82, 0x02, 0x01, 0x00,
+ 0xa3, 0x14, 0xe4, 0xb8, 0xd8, 0x58, 0x0d, 0xab, 0xd7, 0x87, 0xa4, 0xf6,
+ 0x84, 0x51, 0x74, 0x60, 0x4c, 0xe3, 0x60, 0x28, 0x89, 0x49, 0x65, 0x18,
+ 0x5c, 0x8f, 0x1a, 0x1b, 0xe9, 0xdb, 0xc1, 0xc1, 0xf7, 0x08, 0x27, 0x44,
+ 0xe5, 0x9d, 0x9a, 0x33, 0xc3, 0xac, 0x5a, 0xca, 0xba, 0x20, 0x5a, 0x9e,
+ 0x3a, 0x18, 0xb5, 0x3d, 0xe3, 0x9d, 0x94, 0x58, 0xa7, 0xa9, 0x5a, 0x0b,
+ 0x4f, 0xb8, 0xe5, 0xa3, 0x7b, 0x01, 0x11, 0x0f, 0x16, 0x11, 0xb8, 0x65,
+ 0x2f, 0xa8, 0x95, 0xf7, 0x58, 0x2c, 0xec, 0x1d, 0x41, 0xad, 0xd1, 0x12,
+ 0xca, 0x4a, 0x80, 0x35, 0x35, 0x43, 0x7e, 0xe0, 0x97, 0xfc, 0x86, 0x8f,
+ 0xcf, 0x4b, 0xdc, 0xbc, 0x15, 0x2c, 0x8e, 0x90, 0x84, 0x26, 0x83, 0xc1,
+ 0x96, 0x97, 0xf4, 0xd7, 0x90, 0xce, 0xfe, 0xd4, 0xf3, 0x70, 0x22, 0xa8,
+ 0xb0, 0x1f, 0xed, 0x08, 0xd7, 0xc5, 0xc0, 0xd6, 0x41, 0x6b, 0x24, 0x68,
+ 0x5c, 0x07, 0x1f, 0x44, 0x97, 0xd8, 0x6e, 0x18, 0x93, 0x67, 0xc3, 0xba,
+ 0x3a, 0xaf, 0xfd, 0xc2, 0x65, 0x00, 0x21, 0x63, 0xdf, 0xb7, 0x28, 0x68,
+ 0xd6, 0xc0, 0x20, 0x86, 0x92, 0xed, 0x68, 0x6a, 0x27, 0x3a, 0x07, 0xec,
+ 0x66, 0x00, 0xfe, 0x51, 0x51, 0x86, 0x41, 0x6f, 0x83, 0x69, 0xd2, 0xf0,
+ 0xe6, 0xf7, 0x61, 0xda, 0x12, 0x45, 0x53, 0x09, 0xdf, 0xf8, 0x42, 0xc7,
+ 0x30, 0x6a, 0xe5, 0xd8, 0x2b, 0xa2, 0x49, 0x7a, 0x05, 0x10, 0xee, 0xb2,
+ 0x59, 0x0a, 0xe5, 0xbe, 0xf8, 0x4d, 0x0f, 0xa8, 0x9e, 0x63, 0x81, 0x39,
+ 0x32, 0xaa, 0xfd, 0xa8, 0x03, 0xf6, 0xd8, 0xc6, 0xaa, 0x02, 0x93, 0x03,
+ 0xeb, 0x15, 0xd3, 0x38, 0xc8, 0x1a, 0x78, 0xcf, 0xf3, 0xa7, 0x9f, 0x98,
+ 0x4b, 0x91, 0x5b, 0x79, 0xf8, 0x4e, 0x53, 0xaf, 0x0c, 0x65, 0xe9, 0xb0,
+ 0x93, 0xc2, 0xcb, 0x5d, 0x3c, 0x5f, 0x6e, 0x39, 0xd2, 0x58, 0x23, 0x50,
+ 0xe5, 0x2e, 0xef, 0x12, 0x00, 0xa4, 0x59, 0x13, 0x2b, 0x2f, 0x2c, 0x0a,
+ 0x7b, 0x36, 0x89, 0xc5, 0xe5, 0x8f, 0x95, 0x5e, 0x14, 0x0f, 0x0f, 0x94,
+ 0x5a, 0xe9, 0xdc, 0x0b, 0x49, 0x14, 0xbe, 0x0a, 0x70, 0x45, 0xc1, 0x7c,
+ 0xbf, 0x83, 0x70, 0xfd, 0x3d, 0x99, 0xe6, 0x8a, 0xf5, 0x9c, 0x09, 0x71,
+ 0x84, 0x9a, 0x18, 0xa0, 0xe0, 0x6c, 0x43, 0x5c, 0x7e, 0x48, 0x33, 0xc8,
+ 0xbe, 0x5d, 0xdd, 0xd8, 0x77, 0xe3, 0xe7, 0x6b, 0x34, 0x4b, 0xa2, 0xb7,
+ 0x54, 0x07, 0x72, 0x2e, 0xab, 0xa9, 0x91, 0x1e, 0x4b, 0xe3, 0xb5, 0xd8,
+ 0xfa, 0x35, 0x64, 0x8a, 0xe9, 0x03, 0xa1, 0xa8, 0x26, 0xbd, 0x72, 0x58,
+ 0x10, 0x6a, 0xec, 0x1a, 0xf6, 0x1e, 0xb8, 0xc0, 0x46, 0x19, 0x31, 0x2c,
+ 0xca, 0xf9, 0x6a, 0xd7, 0x2e, 0xd0, 0xa7, 0x2c, 0x60, 0x58, 0xc4, 0x8f,
+ 0x46, 0x63, 0x61, 0x8d, 0x29, 0x6f, 0xe2, 0x5f, 0xe2, 0x43, 0x90, 0x9c,
+ 0xe6, 0xfc, 0x08, 0x41, 0xc8, 0xb5, 0x23, 0x56, 0x24, 0x3e, 0x3a, 0x2c,
+ 0x41, 0x22, 0x43, 0xda, 0x22, 0x15, 0x2b, 0xad, 0xd0, 0xfa, 0xc8, 0x47,
+ 0x44, 0xe6, 0x2a, 0xf9, 0x38, 0x90, 0x13, 0x62, 0x22, 0xea, 0x06, 0x8c,
+ 0x44, 0x9c, 0xd6, 0xca, 0x50, 0x93, 0xe9, 0xd4, 0x03, 0xd8, 0x3e, 0x71,
+ 0x36, 0x4b, 0xaa, 0xab, 0xbb, 0xe2, 0x48, 0x66, 0x26, 0x53, 0xb1, 0x6d,
+ 0x3b, 0x82, 0x2c, 0x8c, 0x25, 0x05, 0xf0, 0xf8, 0xcf, 0x55, 0xbf, 0x8e,
+ 0x29, 0xf7, 0x54, 0x5b, 0x6f, 0x30, 0x54, 0xa6, 0xad, 0x46, 0xff, 0x22,
+ 0x95, 0xb1, 0x87, 0x98, 0x00, 0x51, 0x69, 0x15, 0x07, 0xbd, 0x3d, 0x9c,
+ 0x6e, 0xaa, 0xaa, 0x3b, 0x0b, 0x74, 0x65, 0x4c, 0x04, 0xe0, 0x80, 0x3e,
+ 0xaf, 0x5e, 0x10, 0xd6, 0x9b, 0x28, 0x37, 0x6f, 0x02, 0x03, 0x01, 0x00,
+ 0x01, 0x02, 0x82, 0x02, 0x00, 0x09, 0x6e, 0xf8, 0xf8, 0x14, 0x53, 0xab,
+ 0x9e, 0xc8, 0x1d, 0xe9, 0x95, 0xf4, 0xfb, 0x7d, 0x3e, 0xe0, 0xd3, 0xba,
+ 0x49, 0x3d, 0xff, 0xc7, 0xe0, 0x4b, 0xe2, 0x5f, 0x41, 0x44, 0x1a, 0xd9,
+ 0x2f, 0x6e, 0x29, 0xc3, 0x93, 0xc1, 0xb0, 0x87, 0x2d, 0xfd, 0x60, 0xa7,
+ 0xf3, 0xd8, 0x26, 0x6c, 0xf7, 0x80, 0x26, 0xd3, 0xbd, 0x1b, 0xc0, 0x8e,
+ 0xc7, 0x3e, 0x13, 0x96, 0xc8, 0xd6, 0xb8, 0xbc, 0x57, 0xe3, 0x92, 0xa1,
+ 0x38, 0xfd, 0x2e, 0xd3, 0x3a, 0xcf, 0x31, 0xf2, 0x52, 0xd7, 0x7f, 0xe9,
+ 0xbc, 0x9b, 0x83, 0x01, 0x78, 0x13, 0xc9, 0x91, 0x77, 0x02, 0x78, 0xc0,
+ 0x0b, 0x1f, 0xdf, 0x94, 0xad, 0x16, 0xf1, 0xad, 0x78, 0x17, 0xc5, 0x77,
+ 0x0d, 0xb7, 0x07, 0x3f, 0x51, 0xe0, 0x73, 0x33, 0xcf, 0x90, 0x69, 0xd8,
+ 0xe5, 0xda, 0x9b, 0x1e, 0xf6, 0x21, 0x12, 0x07, 0xb5, 0x1e, 0x3e, 0x2b,
+ 0x34, 0x79, 0x9e, 0x48, 0x01, 0xdd, 0x68, 0xf0, 0x0f, 0x18, 0xb5, 0x85,
+ 0x50, 0xd8, 0x9e, 0x04, 0xfd, 0x6d, 0xcd, 0xa6, 0x61, 0x2b, 0x54, 0x81,
+ 0x99, 0xf4, 0x63, 0xf4, 0xeb, 0x73, 0x98, 0xb3, 0x88, 0xf5, 0x50, 0xd4,
+ 0x5c, 0x67, 0x9e, 0x7c, 0xbc, 0xd8, 0xfd, 0xaf, 0xb8, 0x66, 0x7d, 0xdc,
+ 0xa5, 0x25, 0xb5, 0xe6, 0x64, 0xd7, 0x07, 0x72, 0x5a, 0x99, 0xf9, 0xf6,
+ 0x9e, 0xb8, 0x9c, 0xf4, 0xc7, 0xee, 0xee, 0x10, 0x13, 0x9c, 0x1a, 0x8c,
+ 0x23, 0x89, 0xcd, 0x7b, 0xf1, 0x47, 0x23, 0x51, 0x3c, 0xe5, 0xc2, 0x17,
+ 0x68, 0xca, 0x98, 0xb8, 0xed, 0xe5, 0x17, 0x6d, 0x0a, 0xde, 0x07, 0xd6,
+ 0x6c, 0x4f, 0x83, 0x4c, 0x9b, 0xca, 0x6a, 0x7d, 0xc8, 0x68, 0x12, 0xd7,
+ 0xf0, 0x37, 0x88, 0xf7, 0xbb, 0x68, 0x8b, 0xa4, 0xfd, 0xfe, 0x36, 0x11,
+ 0xb3, 0x2b, 0x85, 0x6d, 0xaa, 0x30, 0x31, 0xf1, 0x6f, 0x80, 0x72, 0x42,
+ 0x23, 0xfe, 0x93, 0x88, 0xcc, 0x1e, 0x4b, 0x53, 0x4f, 0x8e, 0x24, 0x67,
+ 0x4a, 0x72, 0xb6, 0x3c, 0x13, 0x00, 0x11, 0x4f, 0xe1, 0x30, 0xd6, 0xe7,
+ 0x45, 0x8f, 0xaf, 0xdd, 0xe5, 0xaa, 0xb7, 0x02, 0x17, 0x04, 0xf8, 0xd2,
+ 0xc1, 0x7b, 0x6c, 0x92, 0xec, 0x76, 0x94, 0x1b, 0xb0, 0xe4, 0xc3, 0x0c,
+ 0x9e, 0xee, 0xb5, 0xdc, 0x97, 0xca, 0x10, 0x1d, 0x17, 0x96, 0x45, 0xd4,
+ 0x04, 0x0c, 0xea, 0xca, 0x45, 0xfc, 0x52, 0x54, 0x82, 0x9b, 0xdf, 0x64,
+ 0xd6, 0x59, 0x6c, 0x12, 0x70, 0xf0, 0x19, 0xd8, 0x46, 0xbb, 0x08, 0x43,
+ 0x81, 0xa1, 0x73, 0xa8, 0x00, 0xc9, 0x4e, 0xb9, 0xd5, 0xfd, 0x42, 0x5f,
+ 0xcf, 0x94, 0x14, 0x18, 0xab, 0x9d, 0x11, 0xd0, 0xbd, 0x44, 0x88, 0x2c,
+ 0xd8, 0x29, 0xec, 0x94, 0x70, 0xf9, 0x42, 0x14, 0xf4, 0xb0, 0x3f, 0xfe,
+ 0x27, 0x16, 0x43, 0x59, 0x90, 0x14, 0x48, 0x61, 0x8c, 0x91, 0xd9, 0x37,
+ 0x41, 0xef, 0xf1, 0xe9, 0x15, 0x4a, 0x4f, 0x5e, 0x1f, 0x50, 0x25, 0x20,
+ 0x2d, 0xa6, 0xf8, 0x79, 0x0d, 0x92, 0xb0, 0x00, 0x0b, 0xa2, 0xfb, 0xc3,
+ 0x7b, 0x0f, 0xa6, 0xff, 0x75, 0x5d, 0x70, 0xaa, 0xcf, 0x0a, 0xdf, 0xe1,
+ 0xfc, 0x32, 0x53, 0x1e, 0xf6, 0xe6, 0x69, 0x9f, 0x09, 0xd0, 0xc8, 0xab,
+ 0xaf, 0xec, 0xb0, 0x04, 0xfa, 0x83, 0xe2, 0x29, 0x23, 0x54, 0x37, 0x87,
+ 0x63, 0x47, 0x75, 0x9b, 0xdb, 0x1f, 0x4f, 0x1b, 0x6b, 0xa6, 0xe2, 0x67,
+ 0x1c, 0xb4, 0x74, 0x9e, 0x48, 0x77, 0x61, 0xc2, 0x9a, 0x3e, 0x6b, 0x89,
+ 0xa9, 0x68, 0x74, 0x27, 0x01, 0x29, 0xd6, 0x46, 0xe8, 0x0f, 0xd0, 0x33,
+ 0x22, 0x00, 0x45, 0x6c, 0xde, 0x32, 0x28, 0x42, 0x57, 0xaf, 0x70, 0x28,
+ 0xa0, 0xd5, 0x99, 0xbb, 0x1f, 0xd7, 0x3c, 0x84, 0x20, 0x70, 0x1f, 0xe3,
+ 0xa9, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe6, 0x68, 0xfe, 0x5f, 0x75, 0x71,
+ 0x2a, 0xd8, 0xcf, 0x0d, 0x1d, 0xf4, 0xa1, 0x06, 0x8b, 0xa5, 0x70, 0x6f,
+ 0x29, 0x03, 0xf3, 0x50, 0xd3, 0x83, 0x39, 0xf9, 0xf6, 0xe5, 0x79, 0x7a,
+ 0x29, 0x75, 0xde, 0xda, 0x6a, 0x98, 0x7c, 0x33, 0xf8, 0x64, 0xca, 0x86,
+ 0x5a, 0xda, 0x55, 0x5b, 0x4d, 0x7b, 0x1a, 0xe5, 0x5d, 0x19, 0x7d, 0xf3,
+ 0x57, 0x49, 0x3d, 0x7a, 0xe8, 0x3f, 0x5a, 0x40, 0x8c, 0x15, 0xc7, 0xb0,
+ 0x53, 0xf8, 0x63, 0x42, 0x17, 0x7c, 0x20, 0xb9, 0xfc, 0xff, 0x27, 0xd0,
+ 0xc2, 0x0c, 0x45, 0x52, 0x1b, 0x75, 0x1f, 0x89, 0x87, 0xc4, 0xa8, 0x07,
+ 0x3b, 0x73, 0x16, 0xc7, 0xd7, 0x77, 0x2e, 0x47, 0xa2, 0x7d, 0x12, 0xb4,
+ 0x25, 0x24, 0x5e, 0xa5, 0xb2, 0x12, 0x76, 0x65, 0xd1, 0xcd, 0xa4, 0x66,
+ 0x33, 0x2d, 0xed, 0xb2, 0x85, 0xb0, 0xb3, 0x33, 0x56, 0x18, 0x5a, 0xb3,
+ 0x75, 0x43, 0x4d, 0x40, 0x14, 0x22, 0x55, 0xf6, 0x5a, 0x0c, 0x6a, 0xb3,
+ 0xc3, 0x8a, 0x9b, 0x76, 0x1e, 0x23, 0x8d, 0x4a, 0x8f, 0x38, 0x21, 0x25,
+ 0x43, 0x45, 0xf6, 0x25, 0x46, 0xdb, 0xae, 0x42, 0x43, 0x74, 0x69, 0x15,
+ 0x46, 0xf0, 0x3a, 0x41, 0x4f, 0x9f, 0xfe, 0xda, 0x07, 0x0b, 0x38, 0xbe,
+ 0x6b, 0xad, 0xc2, 0xef, 0x5b, 0x97, 0x18, 0x42, 0x13, 0xac, 0x13, 0x15,
+ 0x70, 0x7b, 0xe2, 0x00, 0xbb, 0x41, 0x22, 0x99, 0xe5, 0xd3, 0x67, 0xfe,
+ 0xfd, 0xbd, 0x8e, 0xc3, 0xca, 0x60, 0x59, 0x3d, 0x8f, 0x85, 0x76, 0x41,
+ 0xf0, 0xb8, 0x09, 0x1a, 0x48, 0x50, 0xe4, 0x9c, 0x4a, 0x56, 0x02, 0x60,
+ 0x76, 0xff, 0xde, 0xd4, 0x8e, 0x76, 0xa3, 0x9c, 0x30, 0xb4, 0xa4, 0x73,
+ 0xe6, 0xb0, 0x70, 0xac, 0x67, 0x5f, 0x25, 0xd2, 0x94, 0xc5, 0x25, 0xb6,
+ 0xbf, 0xf6, 0x0b, 0xd8, 0x9f, 0x35, 0x8c, 0x20, 0xb6, 0xdd, 0x02, 0x82,
+ 0x01, 0x01, 0x00, 0xb5, 0x31, 0x9e, 0xa2, 0x10, 0x38, 0xca, 0x2b, 0x07,
+ 0xc9, 0x3f, 0x0f, 0x18, 0x2c, 0x98, 0x7f, 0x15, 0x87, 0x92, 0x93, 0x2e,
+ 0xce, 0x6b, 0x11, 0x42, 0x2a, 0x94, 0x3e, 0x31, 0xd0, 0xf5, 0xae, 0x9d,
+ 0xc7, 0x67, 0x51, 0x3c, 0x0a, 0x52, 0x04, 0x94, 0x86, 0x2e, 0x50, 0x32,
+ 0xe1, 0x48, 0x83, 0x85, 0xe8, 0x82, 0x04, 0x2f, 0x25, 0xbc, 0xea, 0xfc,
+ 0x3d, 0x4b, 0xd1, 0x53, 0x90, 0x61, 0x97, 0x47, 0x73, 0xcd, 0x1f, 0xa9,
+ 0x5a, 0x3f, 0xfb, 0xbf, 0xc3, 0xd5, 0x19, 0xb6, 0xd3, 0x59, 0x57, 0x37,
+ 0xd9, 0x09, 0x29, 0xd3, 0x80, 0xc4, 0xae, 0x52, 0xce, 0xce, 0x82, 0x29,
+ 0x6b, 0x95, 0x44, 0x69, 0x33, 0xfd, 0x6a, 0x6d, 0x65, 0xf7, 0xa9, 0xc0,
+ 0x65, 0x25, 0x91, 0x05, 0xdf, 0x07, 0xbe, 0x61, 0x5c, 0xaa, 0x8f, 0x87,
+ 0xc8, 0x43, 0xd7, 0x30, 0xd0, 0x8b, 0x25, 0xaf, 0xb8, 0x5d, 0x50, 0x4e,
+ 0x31, 0x4a, 0xc9, 0x79, 0x56, 0xbf, 0x8d, 0xcc, 0x40, 0xa7, 0xea, 0xd4,
+ 0xf7, 0x66, 0x86, 0xe2, 0x0b, 0xf3, 0x13, 0xbc, 0xdc, 0x0d, 0x62, 0x28,
+ 0x4e, 0xb7, 0x31, 0xb4, 0x5a, 0x9b, 0x97, 0x65, 0x76, 0x24, 0xbb, 0xef,
+ 0x90, 0x1b, 0xdb, 0x93, 0x98, 0xae, 0xce, 0xb0, 0x69, 0x82, 0x49, 0x94,
+ 0xc0, 0xc3, 0x8f, 0x9c, 0x5d, 0x26, 0x45, 0xa0, 0xad, 0x15, 0x3b, 0x6e,
+ 0xda, 0x6e, 0x78, 0xc1, 0x78, 0xc3, 0x15, 0x8e, 0x64, 0xaf, 0x50, 0xa6,
+ 0xb7, 0xd9, 0xfb, 0x8f, 0x68, 0xa0, 0x2d, 0x59, 0xa9, 0xce, 0x5b, 0xa7,
+ 0x91, 0x36, 0xb8, 0x05, 0x28, 0x31, 0x25, 0xc7, 0x7e, 0xa4, 0x68, 0x9d,
+ 0xea, 0x5c, 0x71, 0x10, 0x84, 0xab, 0xc4, 0xd7, 0xbe, 0x7d, 0xe9, 0x4a,
+ 0x11, 0x22, 0xa6, 0xd5, 0xa3, 0x6e, 0x46, 0x07, 0x70, 0x78, 0xcc, 0xd5,
+ 0xbc, 0xfe, 0xc4, 0x39, 0x58, 0xf4, 0xbb, 0x02, 0x82, 0x01, 0x01, 0x00,
+ 0xaa, 0x0c, 0x73, 0x30, 0x20, 0x8d, 0x15, 0x02, 0x4e, 0x4d, 0x6f, 0xfe,
+ 0x4b, 0x99, 0x79, 0x16, 0xf0, 0x94, 0x19, 0xc1, 0x40, 0xa2, 0x36, 0x78,
+ 0x73, 0x21, 0x78, 0x86, 0x83, 0xd1, 0x15, 0x28, 0x59, 0x00, 0xfa, 0x0a,
+ 0xf0, 0x1f, 0xab, 0x03, 0x38, 0x35, 0x50, 0x78, 0x32, 0xe6, 0xdf, 0x98,
+ 0x2b, 0x91, 0x7b, 0xd4, 0x84, 0x90, 0x43, 0xab, 0x5a, 0x24, 0x8b, 0xa3,
+ 0xb6, 0x08, 0x4d, 0x5b, 0x05, 0xb5, 0xad, 0x43, 0x74, 0x7e, 0x22, 0xb7,
+ 0x09, 0xb0, 0x3a, 0x78, 0x55, 0xfa, 0x4c, 0x3c, 0xa2, 0x2c, 0xa6, 0xf7,
+ 0x19, 0xff, 0x76, 0xa4, 0x3d, 0x1e, 0x99, 0x51, 0xa7, 0x4e, 0x76, 0x47,
+ 0x0f, 0x70, 0xef, 0x0b, 0x3f, 0xf2, 0x94, 0x36, 0xf3, 0x63, 0x76, 0xb9,
+ 0x09, 0x88, 0xbb, 0xfe, 0xf9, 0x86, 0x33, 0xdf, 0x81, 0xbe, 0x6f, 0xcc,
+ 0xa9, 0x75, 0x09, 0xe5, 0x8f, 0x8b, 0x42, 0xd0, 0x19, 0x03, 0x61, 0xd8,
+ 0xb5, 0x78, 0xcb, 0x9c, 0xbe, 0x63, 0x4d, 0xbd, 0xce, 0x5e, 0xae, 0x7f,
+ 0xae, 0x97, 0x88, 0x7b, 0xf4, 0x7a, 0x7b, 0xdb, 0xf6, 0x7e, 0x2c, 0x7d,
+ 0x95, 0x6e, 0x72, 0x3a, 0x48, 0x13, 0xdb, 0xf7, 0x10, 0x07, 0x83, 0xac,
+ 0xa1, 0x7a, 0x68, 0x18, 0x70, 0x18, 0x99, 0x7f, 0xf4, 0x8e, 0x93, 0x1a,
+ 0x40, 0x5d, 0x04, 0x07, 0xcb, 0x4d, 0xd7, 0x66, 0x96, 0xb5, 0xd3, 0x7d,
+ 0x8e, 0xfb, 0xe6, 0x12, 0xd0, 0x7d, 0xf0, 0xe7, 0x25, 0xa6, 0x7a, 0x86,
+ 0x01, 0x56, 0xdd, 0xc5, 0xb2, 0x31, 0x98, 0x67, 0x3a, 0xd0, 0x9a, 0xee,
+ 0x98, 0xca, 0x80, 0x52, 0x5a, 0x0e, 0xb7, 0xc4, 0xbf, 0xc0, 0x40, 0x24,
+ 0x6f, 0x3b, 0xa6, 0xf6, 0xab, 0x28, 0x9e, 0xe9, 0x39, 0x3f, 0x04, 0x4b,
+ 0xc4, 0xae, 0x55, 0xfd, 0xea, 0x87, 0xa5, 0xc5, 0x01, 0x99, 0x2e, 0x67,
+ 0x66, 0xb3, 0xfe, 0x41, 0x02, 0x82, 0x01, 0x00, 0x05, 0x26, 0x96, 0xf2,
+ 0xd6, 0x71, 0x36, 0xd6, 0x08, 0x4f, 0xa1, 0x3a, 0x45, 0x9e, 0xa6, 0xeb,
+ 0x1d, 0xea, 0x8f, 0xb1, 0x1d, 0x68, 0x82, 0xc4, 0xa7, 0xd3, 0xdc, 0x08,
+ 0xf4, 0x93, 0x93, 0x18, 0x56, 0xa5, 0xdf, 0x7b, 0x00, 0xb0, 0xee, 0x69,
+ 0xf0, 0xea, 0xeb, 0x90, 0x1e, 0x12, 0x27, 0x64, 0x8d, 0xbe, 0xf1, 0x4b,
+ 0x3b, 0x27, 0xe0, 0x79, 0xf1, 0x97, 0xb0, 0x7b, 0x0f, 0xdc, 0x0f, 0xda,
+ 0x24, 0x0e, 0xd7, 0xaa, 0xe9, 0xbe, 0x86, 0x09, 0x1b, 0x07, 0x6f, 0x1c,
+ 0x5f, 0x05, 0x1d, 0x0a, 0x0c, 0xad, 0x5f, 0xc4, 0x4f, 0x9d, 0xde, 0x79,
+ 0x72, 0x23, 0x2c, 0xdd, 0xa8, 0x5d, 0xc5, 0x8d, 0x7f, 0x4c, 0x1a, 0x0d,
+ 0x17, 0x75, 0x09, 0x98, 0x4a, 0xbe, 0xd5, 0x55, 0x8d, 0x0c, 0x2d, 0x05,
+ 0x2d, 0x71, 0x5b, 0xeb, 0xde, 0x99, 0x43, 0xcc, 0x6f, 0x37, 0xce, 0x6c,
+ 0xd0, 0xd4, 0xf5, 0xda, 0x1d, 0x8e, 0xeb, 0x28, 0x55, 0x09, 0xb1, 0x42,
+ 0x4f, 0xa7, 0x1a, 0xde, 0xe3, 0x14, 0xf1, 0x56, 0x2e, 0x40, 0xd6, 0xb5,
+ 0x1d, 0xee, 0x47, 0x77, 0x1d, 0xdc, 0x36, 0xfa, 0xf3, 0xbc, 0x8b, 0xa5,
+ 0xbf, 0x1d, 0x9f, 0xa7, 0xb4, 0x04, 0xad, 0xb6, 0x0d, 0x39, 0x0e, 0xe7,
+ 0x13, 0x3e, 0xbc, 0x94, 0x68, 0xe5, 0x1d, 0xea, 0x0c, 0x30, 0xdd, 0xb0,
+ 0xa7, 0x03, 0xa4, 0x91, 0xde, 0xf1, 0xd8, 0xa8, 0x18, 0x1f, 0xdd, 0xb3,
+ 0xd4, 0x2b, 0x6a, 0x8c, 0x69, 0x60, 0xda, 0x92, 0x7b, 0x1e, 0x27, 0x47,
+ 0x82, 0xbf, 0xff, 0xfc, 0xbd, 0x03, 0xb4, 0xc1, 0x80, 0x6c, 0x07, 0x11,
+ 0xa2, 0xdd, 0x27, 0xc1, 0x4d, 0x93, 0xe6, 0xf2, 0xd3, 0xdc, 0x61, 0xa1,
+ 0xa3, 0xdc, 0x67, 0x69, 0xe5, 0x50, 0x1d, 0x63, 0x0e, 0xb9, 0xa9, 0x9d,
+ 0xd6, 0x02, 0x4d, 0x7c, 0xcd, 0x2a, 0xa5, 0x37, 0x60, 0xc5, 0xf5, 0x97,
+ 0x02, 0x82, 0x01, 0x00, 0x14, 0x8b, 0x04, 0xdb, 0x4e, 0x41, 0x4a, 0xcd,
+ 0x86, 0x2e, 0x5f, 0x13, 0xb3, 0x48, 0x1e, 0x00, 0xdf, 0x8d, 0x0b, 0x35,
+ 0x51, 0x51, 0x1b, 0x16, 0x3d, 0x49, 0x4e, 0xe1, 0xee, 0x4d, 0xc7, 0x03,
+ 0xc0, 0xf6, 0x5c, 0x6c, 0x36, 0xe8, 0x22, 0xa5, 0x79, 0xb4, 0x4c, 0xce,
+ 0xa8, 0x45, 0x12, 0x2c, 0xf3, 0x6a, 0xcd, 0x33, 0xbd, 0xd0, 0x84, 0x4d,
+ 0xf7, 0x8f, 0xb5, 0x80, 0x1f, 0x18, 0x52, 0xad, 0xad, 0xce, 0xcd, 0x94,
+ 0xc9, 0xc6, 0xb4, 0xd2, 0x14, 0x29, 0xe4, 0xc7, 0x40, 0xf1, 0x0b, 0x85,
+ 0x43, 0xaf, 0x11, 0xd3, 0x46, 0x0a, 0xb1, 0x15, 0x87, 0x1f, 0x4e, 0x2e,
+ 0xc1, 0x11, 0xe9, 0x24, 0x70, 0x40, 0xba, 0x0b, 0x0e, 0x4a, 0xac, 0x45,
+ 0x21, 0xcc, 0x6d, 0xa4, 0x1d, 0x55, 0x33, 0x89, 0x4c, 0x65, 0x21, 0x23,
+ 0xab, 0x61, 0x31, 0xcb, 0x11, 0x65, 0xb3, 0x80, 0xa4, 0x5a, 0x2b, 0xf1,
+ 0x65, 0xdb, 0x4c, 0x58, 0x5a, 0xbe, 0xf3, 0x15, 0xcd, 0x94, 0xa1, 0xe4,
+ 0xcb, 0x30, 0xfa, 0xe1, 0x28, 0x51, 0x52, 0xd2, 0xb8, 0xb4, 0x8c, 0xfc,
+ 0x3a, 0xcc, 0xd1, 0x19, 0xa2, 0x27, 0x36, 0xfa, 0xc4, 0x23, 0x96, 0xb9,
+ 0xc7, 0x74, 0xca, 0xf1, 0x45, 0x1f, 0x4b, 0xc2, 0x77, 0x4d, 0x32, 0x3f,
+ 0xab, 0x7a, 0xd9, 0x2b, 0x22, 0x1d, 0xcb, 0x24, 0x58, 0x29, 0xa3, 0xb8,
+ 0x92, 0xdb, 0x1c, 0xda, 0x84, 0x01, 0xca, 0x6d, 0x4a, 0x50, 0xd4, 0x2b,
+ 0x79, 0xfa, 0xc5, 0x4c, 0x9d, 0x79, 0x49, 0xf1, 0xde, 0xbd, 0x3f, 0x50,
+ 0xa7, 0xa6, 0xc6, 0xc7, 0x99, 0x61, 0x9b, 0xda, 0x38, 0xdc, 0xbe, 0x85,
+ 0x75, 0x81, 0xb9, 0x0f, 0x33, 0xd0, 0xd4, 0xd0, 0xaa, 0xbd, 0x32, 0xc9,
+ 0x62, 0xe8, 0x21, 0x24, 0xeb, 0x03, 0x73, 0x46, 0xb3, 0x84, 0x65, 0xf2,
+ 0x40, 0x7d, 0x1b, 0x1b, 0x8f, 0x86, 0x7c, 0xe7
+};
+
+/* The corresponding public key, DER. */
+static const unsigned char rsa_pub_key[] = {
+ 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa3, 0x14, 0xe4,
+ 0xb8, 0xd8, 0x58, 0x0d, 0xab, 0xd7, 0x87, 0xa4, 0xf6, 0x84, 0x51, 0x74,
+ 0x60, 0x4c, 0xe3, 0x60, 0x28, 0x89, 0x49, 0x65, 0x18, 0x5c, 0x8f, 0x1a,
+ 0x1b, 0xe9, 0xdb, 0xc1, 0xc1, 0xf7, 0x08, 0x27, 0x44, 0xe5, 0x9d, 0x9a,
+ 0x33, 0xc3, 0xac, 0x5a, 0xca, 0xba, 0x20, 0x5a, 0x9e, 0x3a, 0x18, 0xb5,
+ 0x3d, 0xe3, 0x9d, 0x94, 0x58, 0xa7, 0xa9, 0x5a, 0x0b, 0x4f, 0xb8, 0xe5,
+ 0xa3, 0x7b, 0x01, 0x11, 0x0f, 0x16, 0x11, 0xb8, 0x65, 0x2f, 0xa8, 0x95,
+ 0xf7, 0x58, 0x2c, 0xec, 0x1d, 0x41, 0xad, 0xd1, 0x12, 0xca, 0x4a, 0x80,
+ 0x35, 0x35, 0x43, 0x7e, 0xe0, 0x97, 0xfc, 0x86, 0x8f, 0xcf, 0x4b, 0xdc,
+ 0xbc, 0x15, 0x2c, 0x8e, 0x90, 0x84, 0x26, 0x83, 0xc1, 0x96, 0x97, 0xf4,
+ 0xd7, 0x90, 0xce, 0xfe, 0xd4, 0xf3, 0x70, 0x22, 0xa8, 0xb0, 0x1f, 0xed,
+ 0x08, 0xd7, 0xc5, 0xc0, 0xd6, 0x41, 0x6b, 0x24, 0x68, 0x5c, 0x07, 0x1f,
+ 0x44, 0x97, 0xd8, 0x6e, 0x18, 0x93, 0x67, 0xc3, 0xba, 0x3a, 0xaf, 0xfd,
+ 0xc2, 0x65, 0x00, 0x21, 0x63, 0xdf, 0xb7, 0x28, 0x68, 0xd6, 0xc0, 0x20,
+ 0x86, 0x92, 0xed, 0x68, 0x6a, 0x27, 0x3a, 0x07, 0xec, 0x66, 0x00, 0xfe,
+ 0x51, 0x51, 0x86, 0x41, 0x6f, 0x83, 0x69, 0xd2, 0xf0, 0xe6, 0xf7, 0x61,
+ 0xda, 0x12, 0x45, 0x53, 0x09, 0xdf, 0xf8, 0x42, 0xc7, 0x30, 0x6a, 0xe5,
+ 0xd8, 0x2b, 0xa2, 0x49, 0x7a, 0x05, 0x10, 0xee, 0xb2, 0x59, 0x0a, 0xe5,
+ 0xbe, 0xf8, 0x4d, 0x0f, 0xa8, 0x9e, 0x63, 0x81, 0x39, 0x32, 0xaa, 0xfd,
+ 0xa8, 0x03, 0xf6, 0xd8, 0xc6, 0xaa, 0x02, 0x93, 0x03, 0xeb, 0x15, 0xd3,
+ 0x38, 0xc8, 0x1a, 0x78, 0xcf, 0xf3, 0xa7, 0x9f, 0x98, 0x4b, 0x91, 0x5b,
+ 0x79, 0xf8, 0x4e, 0x53, 0xaf, 0x0c, 0x65, 0xe9, 0xb0, 0x93, 0xc2, 0xcb,
+ 0x5d, 0x3c, 0x5f, 0x6e, 0x39, 0xd2, 0x58, 0x23, 0x50, 0xe5, 0x2e, 0xef,
+ 0x12, 0x00, 0xa4, 0x59, 0x13, 0x2b, 0x2f, 0x2c, 0x0a, 0x7b, 0x36, 0x89,
+ 0xc5, 0xe5, 0x8f, 0x95, 0x5e, 0x14, 0x0f, 0x0f, 0x94, 0x5a, 0xe9, 0xdc,
+ 0x0b, 0x49, 0x14, 0xbe, 0x0a, 0x70, 0x45, 0xc1, 0x7c, 0xbf, 0x83, 0x70,
+ 0xfd, 0x3d, 0x99, 0xe6, 0x8a, 0xf5, 0x9c, 0x09, 0x71, 0x84, 0x9a, 0x18,
+ 0xa0, 0xe0, 0x6c, 0x43, 0x5c, 0x7e, 0x48, 0x33, 0xc8, 0xbe, 0x5d, 0xdd,
+ 0xd8, 0x77, 0xe3, 0xe7, 0x6b, 0x34, 0x4b, 0xa2, 0xb7, 0x54, 0x07, 0x72,
+ 0x2e, 0xab, 0xa9, 0x91, 0x1e, 0x4b, 0xe3, 0xb5, 0xd8, 0xfa, 0x35, 0x64,
+ 0x8a, 0xe9, 0x03, 0xa1, 0xa8, 0x26, 0xbd, 0x72, 0x58, 0x10, 0x6a, 0xec,
+ 0x1a, 0xf6, 0x1e, 0xb8, 0xc0, 0x46, 0x19, 0x31, 0x2c, 0xca, 0xf9, 0x6a,
+ 0xd7, 0x2e, 0xd0, 0xa7, 0x2c, 0x60, 0x58, 0xc4, 0x8f, 0x46, 0x63, 0x61,
+ 0x8d, 0x29, 0x6f, 0xe2, 0x5f, 0xe2, 0x43, 0x90, 0x9c, 0xe6, 0xfc, 0x08,
+ 0x41, 0xc8, 0xb5, 0x23, 0x56, 0x24, 0x3e, 0x3a, 0x2c, 0x41, 0x22, 0x43,
+ 0xda, 0x22, 0x15, 0x2b, 0xad, 0xd0, 0xfa, 0xc8, 0x47, 0x44, 0xe6, 0x2a,
+ 0xf9, 0x38, 0x90, 0x13, 0x62, 0x22, 0xea, 0x06, 0x8c, 0x44, 0x9c, 0xd6,
+ 0xca, 0x50, 0x93, 0xe9, 0xd4, 0x03, 0xd8, 0x3e, 0x71, 0x36, 0x4b, 0xaa,
+ 0xab, 0xbb, 0xe2, 0x48, 0x66, 0x26, 0x53, 0xb1, 0x6d, 0x3b, 0x82, 0x2c,
+ 0x8c, 0x25, 0x05, 0xf0, 0xf8, 0xcf, 0x55, 0xbf, 0x8e, 0x29, 0xf7, 0x54,
+ 0x5b, 0x6f, 0x30, 0x54, 0xa6, 0xad, 0x46, 0xff, 0x22, 0x95, 0xb1, 0x87,
+ 0x98, 0x00, 0x51, 0x69, 0x15, 0x07, 0xbd, 0x3d, 0x9c, 0x6e, 0xaa, 0xaa,
+ 0x3b, 0x0b, 0x74, 0x65, 0x4c, 0x04, 0xe0, 0x80, 0x3e, 0xaf, 0x5e, 0x10,
+ 0xd6, 0x9b, 0x28, 0x37, 0x6f, 0x02, 0x03, 0x01, 0x00, 0x01
+};
diff --git a/demos/signature/rsa_pss_direct.c b/demos/signature/rsa_pss_direct.c
new file mode 100644
index 000000000000..1ecfa9d89747
--- /dev/null
+++ b/demos/signature/rsa_pss_direct.c
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2022 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 <stdlib.h>
+#include <openssl/core_names.h>
+#include <openssl/evp.h>
+#include <openssl/rsa.h>
+#include <openssl/params.h>
+#include <openssl/err.h>
+#include <openssl/bio.h>
+#include "rsa_pss.h"
+
+/*
+ * The digest to be signed. This should be the output of a hash function.
+ * Here we sign an all-zeroes digest for demonstration purposes.
+ */
+static const unsigned char test_digest[32] = {0};
+
+/* A property query used for selecting algorithm implementations. */
+static const char *propq = NULL;
+
+/*
+ * This function demonstrates RSA signing of a SHA-256 digest using the PSS
+ * padding scheme. You must already have hashed the data you want to sign.
+ * For a higher-level demonstration which does the hashing for you, see
+ * rsa_pss_hash.c.
+ *
+ * For more information, see RFC 8017 section 9.1. The digest passed in
+ * (test_digest above) corresponds to the 'mHash' value.
+ */
+static int sign(OSSL_LIB_CTX *libctx, unsigned char **sig, size_t *sig_len)
+{
+ int rv = 0;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_MD *md = NULL;
+ const unsigned char *ppriv_key = NULL;
+
+ *sig = NULL;
+
+ /* Load DER-encoded RSA private key. */
+ ppriv_key = rsa_priv_key;
+ pkey = d2i_PrivateKey_ex(EVP_PKEY_RSA, NULL, &ppriv_key,
+ sizeof(rsa_priv_key), libctx, propq);
+ if (pkey == NULL) {
+ fprintf(stderr, "Failed to load private key\n");
+ goto end;
+ }
+
+ /* Fetch hash algorithm we want to use. */
+ md = EVP_MD_fetch(libctx, "SHA256", propq);
+ if (md == NULL) {
+ fprintf(stderr, "Failed to fetch hash algorithm\n");
+ goto end;
+ }
+
+ /* Create signing context. */
+ ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, propq);
+ if (ctx == NULL) {
+ fprintf(stderr, "Failed to create signing context\n");
+ goto end;
+ }
+
+ /* Initialize context for signing and set options. */
+ if (EVP_PKEY_sign_init(ctx) == 0) {
+ fprintf(stderr, "Failed to initialize signing context\n");
+ goto end;
+ }
+
+ if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PSS_PADDING) == 0) {
+ fprintf(stderr, "Failed to configure padding\n");
+ goto end;
+ }
+
+ if (EVP_PKEY_CTX_set_signature_md(ctx, md) == 0) {
+ fprintf(stderr, "Failed to configure digest type\n");
+ goto end;
+ }
+
+ /* Determine length of signature. */
+ if (EVP_PKEY_sign(ctx, NULL, sig_len,
+ test_digest, sizeof(test_digest)) == 0) {
+ fprintf(stderr, "Failed to get signature length\n");
+ goto end;
+ }
+
+ /* Allocate memory for signature. */
+ *sig = OPENSSL_malloc(*sig_len);
+ if (*sig == NULL) {
+ fprintf(stderr, "Failed to allocate memory for signature\n");
+ goto end;
+ }
+
+ /* Generate signature. */
+ if (EVP_PKEY_sign(ctx, *sig, sig_len,
+ test_digest, sizeof(test_digest)) != 1) {
+ fprintf(stderr, "Failed to sign\n");
+ goto end;
+ }
+
+ rv = 1;
+end:
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ EVP_MD_free(md);
+
+ if (rv == 0)
+ OPENSSL_free(*sig);
+
+ return rv;
+}
+
+/*
+ * This function demonstrates verification of an RSA signature over a SHA-256
+ * digest using the PSS signature scheme.
+ */
+static int verify(OSSL_LIB_CTX *libctx, const unsigned char *sig, size_t sig_len)
+{
+ int rv = 0;
+ const unsigned char *ppub_key = NULL;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_MD *md = NULL;
+
+ /* Load DER-encoded RSA public key. */
+ ppub_key = rsa_pub_key;
+ pkey = d2i_PublicKey(EVP_PKEY_RSA, NULL, &ppub_key, sizeof(rsa_pub_key));
+ if (pkey == NULL) {
+ fprintf(stderr, "Failed to load public key\n");
+ goto end;
+ }
+
+ /* Fetch hash algorithm we want to use. */
+ md = EVP_MD_fetch(libctx, "SHA256", propq);
+ if (md == NULL) {
+ fprintf(stderr, "Failed to fetch hash algorithm\n");
+ goto end;
+ }
+
+ /* Create verification context. */
+ ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, propq);
+ if (ctx == NULL) {
+ fprintf(stderr, "Failed to create verification context\n");
+ goto end;
+ }
+
+ /* Initialize context for verification and set options. */
+ if (EVP_PKEY_verify_init(ctx) == 0) {
+ fprintf(stderr, "Failed to initialize verification context\n");
+ goto end;
+ }
+
+ if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PSS_PADDING) == 0) {
+ fprintf(stderr, "Failed to configure padding\n");
+ goto end;
+ }
+
+ if (EVP_PKEY_CTX_set_signature_md(ctx, md) == 0) {
+ fprintf(stderr, "Failed to configure digest type\n");
+ goto end;
+ }
+
+ /* Verify signature. */
+ if (EVP_PKEY_verify(ctx, sig, sig_len,
+ test_digest, sizeof(test_digest)) == 0) {
+ fprintf(stderr, "Failed to verify signature; "
+ "signature may be invalid\n");
+ goto end;
+ }
+
+ rv = 1;
+end:
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ EVP_MD_free(md);
+ return rv;
+}
+
+int main(int argc, char **argv)
+{
+ int rv = 1;
+ OSSL_LIB_CTX *libctx = NULL;
+ unsigned char *sig = NULL;
+ size_t sig_len = 0;
+
+ if (sign(libctx, &sig, &sig_len) == 0)
+ goto end;
+
+ if (verify(libctx, sig, sig_len) == 0)
+ goto end;
+
+ rv = 0;
+end:
+ OPENSSL_free(sig);
+ OSSL_LIB_CTX_free(libctx);
+ return rv;
+}
diff --git a/demos/signature/rsa_pss_hash.c b/demos/signature/rsa_pss_hash.c
new file mode 100644
index 000000000000..e1d4e7cc9d0b
--- /dev/null
+++ b/demos/signature/rsa_pss_hash.c
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2022 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 <stdlib.h>
+#include <openssl/core_names.h>
+#include <openssl/evp.h>
+#include <openssl/rsa.h>
+#include <openssl/params.h>
+#include <openssl/err.h>
+#include <openssl/bio.h>
+#include "rsa_pss.h"
+
+/* The data to be signed. This will be hashed. */
+static const char test_message[] =
+ "This is an example message to be signed.";
+
+/* A property query used for selecting algorithm implementations. */
+static const char *propq = NULL;
+
+/*
+ * This function demonstrates RSA signing of an arbitrary-length message.
+ * Hashing is performed automatically. In this example, SHA-256 is used. If you
+ * have already hashed your message and simply want to sign the hash directly,
+ * see rsa_pss_direct.c.
+ */
+static int sign(OSSL_LIB_CTX *libctx, unsigned char **sig, size_t *sig_len)
+{
+ int rv = 0;
+ EVP_PKEY *pkey = NULL;
+ EVP_MD_CTX *mctx = NULL;
+ OSSL_PARAM params[2], *p = params;
+ const unsigned char *ppriv_key = NULL;
+
+ *sig = NULL;
+
+ /* Load DER-encoded RSA private key. */
+ ppriv_key = rsa_priv_key;
+ pkey = d2i_PrivateKey_ex(EVP_PKEY_RSA, NULL, &ppriv_key,
+ sizeof(rsa_priv_key), libctx, propq);
+ if (pkey == NULL) {
+ fprintf(stderr, "Failed to load private key\n");
+ goto end;
+ }
+
+ /* Create MD context used for signing. */
+ mctx = EVP_MD_CTX_new();
+ if (mctx == NULL) {
+ fprintf(stderr, "Failed to create MD context\n");
+ goto end;
+ }
+
+ /* Initialize MD context for signing. */
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE,
+ OSSL_PKEY_RSA_PAD_MODE_PSS, 0);
+ *p = OSSL_PARAM_construct_end();
+
+ if (EVP_DigestSignInit_ex(mctx, NULL, "SHA256", libctx, propq,
+ pkey, params) == 0) {
+ fprintf(stderr, "Failed to initialize signing context\n");
+ goto end;
+ }
+
+ /*
+ * Feed data to be signed into the algorithm. This may
+ * be called multiple times.
+ */
+ if (EVP_DigestSignUpdate(mctx, test_message, sizeof(test_message)) == 0) {
+ fprintf(stderr, "Failed to hash message into signing context\n");
+ goto end;
+ }
+
+ /* Determine signature length. */
+ if (EVP_DigestSignFinal(mctx, NULL, sig_len) == 0) {
+ fprintf(stderr, "Failed to get signature length\n");
+ goto end;
+ }
+
+ /* Allocate memory for signature. */
+ *sig = OPENSSL_malloc(*sig_len);
+ if (*sig == NULL) {
+ fprintf(stderr, "Failed to allocate memory for signature\n");
+ goto end;
+ }
+
+ /* Generate signature. */
+ if (EVP_DigestSignFinal(mctx, *sig, sig_len) == 0) {
+ fprintf(stderr, "Failed to sign\n");
+ goto end;
+ }
+
+ rv = 1;
+end:
+ EVP_MD_CTX_free(mctx);
+ EVP_PKEY_free(pkey);
+
+ if (rv == 0)
+ OPENSSL_free(*sig);
+
+ return rv;
+}
+
+/*
+ * This function demonstrates verification of an RSA signature over an
+ * arbitrary-length message using the PSS signature scheme. Hashing is performed
+ * automatically.
+ */
+static int verify(OSSL_LIB_CTX *libctx, const unsigned char *sig, size_t sig_len)
+{
+ int rv = 0;
+ EVP_PKEY *pkey = NULL;
+ EVP_MD_CTX *mctx = NULL;
+ OSSL_PARAM params[2], *p = params;
+ const unsigned char *ppub_key = NULL;
+
+ /* Load DER-encoded RSA public key. */
+ ppub_key = rsa_pub_key;
+ pkey = d2i_PublicKey(EVP_PKEY_RSA, NULL, &ppub_key, sizeof(rsa_pub_key));
+ if (pkey == NULL) {
+ fprintf(stderr, "Failed to load public key\n");
+ goto end;
+ }
+
+ /* Create MD context used for verification. */
+ mctx = EVP_MD_CTX_new();
+ if (mctx == NULL) {
+ fprintf(stderr, "Failed to create MD context\n");
+ goto end;
+ }
+
+ /* Initialize MD context for verification. */
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE,
+ OSSL_PKEY_RSA_PAD_MODE_PSS, 0);
+ *p = OSSL_PARAM_construct_end();
+
+ if (EVP_DigestVerifyInit_ex(mctx, NULL, "SHA256", libctx, propq,
+ pkey, params) == 0) {
+ fprintf(stderr, "Failed to initialize signing context\n");
+ goto end;
+ }
+
+ /*
+ * Feed data to be signed into the algorithm. This may
+ * be called multiple times.
+ */
+ if (EVP_DigestVerifyUpdate(mctx, test_message, sizeof(test_message)) == 0) {
+ fprintf(stderr, "Failed to hash message into signing context\n");
+ goto end;
+ }
+
+ /* Verify signature. */
+ if (EVP_DigestVerifyFinal(mctx, sig, sig_len) == 0) {
+ fprintf(stderr, "Failed to verify signature; "
+ "signature may be invalid\n");
+ goto end;
+ }
+
+ rv = 1;
+end:
+ EVP_MD_CTX_free(mctx);
+ EVP_PKEY_free(pkey);
+ return rv;
+}
+
+int main(int argc, char **argv)
+{
+ int rv = 1;
+ OSSL_LIB_CTX *libctx = NULL;
+ unsigned char *sig = NULL;
+ size_t sig_len = 0;
+
+ if (sign(libctx, &sig, &sig_len) == 0)
+ goto end;
+
+ if (verify(libctx, sig, sig_len) == 0)
+ goto end;
+
+ rv = 0;
+end:
+ OPENSSL_free(sig);
+ OSSL_LIB_CTX_free(libctx);
+ return rv;
+}
diff --git a/demos/smime/cacert.pem b/demos/smime/cacert.pem
new file mode 100644
index 000000000000..1949fc33aed4
--- /dev/null
+++ b/demos/smime/cacert.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIFBjCCA26gAwIBAgIUM/WihZJZUTZvqoyNaUlp59DOaWYwDQYJKoZIhvcNAQEL
+BQAwVzELMAkGA1UEBhMCVUsxEjAQBgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwN
+T3BlblNTTCBHcm91cDEcMBoGA1UEAwwTVGVzdCBTL01JTUUgUm9vdCBDQTAgFw0x
+ODA2MTQxMjQ2MjhaGA8yMTE4MDYxNDEyNDYyOFowVzELMAkGA1UEBhMCVUsxEjAQ
+BgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwNT3BlblNTTCBHcm91cDEcMBoGA1UE
+AwwTVGVzdCBTL01JTUUgUm9vdCBDQTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCC
+AYoCggGBAMzxOVHZFVxN9XQIVW3y1bK5ir3jKpKkU6zKrw8MdRvm233eqWSOYJvs
+3rgdT59iv+CaPcBT5offbP0eH43H96CubJji/vQLMUzc/cLrJuCbLHREbSCsFNpf
+lYw5mkT98dCFV66HuN6Nwqi5kW8TxGSXkD4OZqklbbicrXoXh5qhREID5hgbrijy
+BiIHyp6bDq5zUCcmHP/Gdw2aTMEQZNsdw4MavtB65vI7dYxo2zEzdmJ3NnjlG7qZ
+6Od6V4IW8yRAK9GLj0TUCZl28pq6rNio+F5Lst3clX9PDxh7LphNrXXYiHjXp2Kn
+LZbOnz1SJSmCeisy/EFN6fRtwdwqcM1AcKNBU+UqFq0Mv0sgNdRwghYWGQht0mT9
++Pg5HxTzDlOOmBT1kAduxJNLiRQlgysPDN94Os0EpzJyA87Z6yJRGvYGZ5mrdfx2
+8p6bHptf46h1WzCX4wDy2J86y+odgWMnSkmF9h8ySj66rgmLrz40n+mDm8bhUblK
+AV8IqN8WmQIDAQABo4HHMIHEMB0GA1UdDgQWBBSkmMaBYQPTEGcqe1maU2IDOMLQ
+ezCBlAYDVR0jBIGMMIGJgBSkmMaBYQPTEGcqe1maU2IDOMLQe6FbpFkwVzELMAkG
+A1UEBhMCVUsxEjAQBgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwNT3BlblNTTCBH
+cm91cDEcMBoGA1UEAwwTVGVzdCBTL01JTUUgUm9vdCBDQYIUM/WihZJZUTZvqoyN
+aUlp59DOaWYwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAYEAqP1CQRGM
+roHvk6dhI4ElNae5seRdSQNTtwAhlP1RoSoFz8xybMgDksKE07t77gDsKvU2SuXV
+fdICqVpjpN9cRYKM6VmiREdU6OGsPQ74u4sOg4cT/tuou0RsD/uQaznb5NOvo2T0
+8rmX0Ai3+lbEuMBCaGNU0KYJifYy4QrSqEapq4W3NbqH85msOiKHEDh1vz9IWz6z
+WKjdv9lst56XuLTZrJ/O0T0qD6aMXyqK6ZART/FELjDXc+9Ey4TH+msOEKq0uQWt
+y7Grfmz52dTnAjBw+6/ggE9sA8Wo6DhwbEUaOA9BB5YP+XWsIkUUbiVHU7D8TyiE
+KHt2DkaWvjl1/RdtzQUO/vGI4yuFTZfLf23KcwgtHJI3JxLNAMLM3I2jmoWhKm/d
+GkVYsGH1GWonv0UTv/TKlOXaTYWK9fQVoYkFc+FrwUd2lev5FizJNigL9qatGyRZ
+giJmWWlf0bMMIxwWZzQswxLyKdkNlvkKf9T6BjEmGLeOHZCn0x2sOyUi
+-----END CERTIFICATE-----
diff --git a/demos/smime/cakey.pem b/demos/smime/cakey.pem
new file mode 100644
index 000000000000..486c975b722d
--- /dev/null
+++ b/demos/smime/cakey.pem
@@ -0,0 +1,39 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIG5QIBAAKCAYEAzPE5UdkVXE31dAhVbfLVsrmKveMqkqRTrMqvDwx1G+bbfd6p
+ZI5gm+zeuB1Pn2K/4Jo9wFPmh99s/R4fjcf3oK5smOL+9AsxTNz9wusm4JssdERt
+IKwU2l+VjDmaRP3x0IVXroe43o3CqLmRbxPEZJeQPg5mqSVtuJyteheHmqFEQgPm
+GBuuKPIGIgfKnpsOrnNQJyYc/8Z3DZpMwRBk2x3Dgxq+0Hrm8jt1jGjbMTN2Ync2
+eOUbupno53pXghbzJEAr0YuPRNQJmXbymrqs2Kj4Xkuy3dyVf08PGHsumE2tddiI
+eNenYqctls6fPVIlKYJ6KzL8QU3p9G3B3CpwzUBwo0FT5SoWrQy/SyA11HCCFhYZ
+CG3SZP34+DkfFPMOU46YFPWQB27Ek0uJFCWDKw8M33g6zQSnMnIDztnrIlEa9gZn
+mat1/Hbynpsem1/jqHVbMJfjAPLYnzrL6h2BYydKSYX2HzJKPrquCYuvPjSf6YOb
+xuFRuUoBXwio3xaZAgMBAAECggGBAJrqILzozke2ujpablEtBTITJHgC9lRgmMt9
+bjR+4ysTJ4kOvZbANPDIbVZY+a3uVEIv9UujYBgG4Hi4w3tF074G+xnaRIQuzbZf
+OgaUABA527GLY74VtbGYHRAhHqbWGmrX0H6iIzE/kQw/MVr4YzTyiFsQQbPMEhNB
+g7RNgvh0vIb2MYC5s71JrS8eGqAnb0KY8daV7ce9upJyt2Acx1AGQJqipegrbtVd
+8q4PONkJIIyvtmJONNaprq8DAJDaTNdcZu7f7mymF5UFpp4Lh6raAvOZAZjgkPYW
+PsX2uMAsYchXTmSDGOHNafqeyTS0UEaw6FRhpxzMoSxRXX4/RhjeShadYwHxbh7s
+UwFU7S9EWlj8CjgGs00KFM1eMV0sEYsL8sRf7ZiWM5XJsmXKbRZjA5V+7OoSGElB
+zJcERK6NFCISijApZlVveEVZS0qESivKd9bspOzbMdoJyjBW1LZdMH85YIwM8Dox
+VqGR0QD3UP8RpZBRwTiFenqOpwARnQKBwQD1NBGcTxLLUUluEBG/TD9KM5sCnkm8
+cn5RomwTeBrUr9SXOJuUPa8RNLrAeosuWCrx9JkF25IBExQbbs1NRHuziOIOyI0+
+hvqP85zJln7kUDtiDMFfUdS8Q6PF3b3wJl6cbipowWwsahvUSkx3W8UWrzZHsvrO
+LBtvEZdwetNWN50FK040uM6y/x71xfvUhlKBsuZBgDFU9aXJZAGpkCklZnByURN6
+LZudDQETdYo7/X8qqPlcHwHStGj9YXg/e38CgcEA1fdVA6s+KlRUGRTUDaUFPDji
+MciTcvA3teXJWNAsFWd71oLT5eQNI50afF242ikTT6JuXFH0mMYKoVe/LFo7m2mf
+uLcW4yM/FiKTkhnBQGm7KNqyvXB0T0DWTDSeS7hTzD6KjuJPf7JVH5I4In8jSKJd
+3mzTA9keIosnxjX7EOsZNQd0+MKaJYHnvJsxYaoT9FXoONuyzQu96TQ8Q+fkVHXh
+I/ENAw0qfoJ5mw5dQnU2UtjP6cSNVQ9Rsr48GNnnAoHBAJcI65AMZNc3yrMw0r2y
+iYl7IBAMz/5zx7shANE9OcmoRJqhE7PMCvneMOo+kVyKkmlW8KrbBKQEzG3ZYjwl
+4sxDlHrmrZnGKrBgrkK9oIuhn/JVSQcdsJwGTeqjG0vBVqWkdhrwiWESOvIYkeEz
+dcLzScwAQtyb7ooLm+x8u5Bv0RhOBG4VJ7y5yKg6u1O9KTUarRnLjJd4eBYEs8Fu
+Oun+n2TK6+RmE2Q5jmAeFne9PYdZbb+Ame7fkYwBbcAsoQKBwQC1KHQSZyp7LGsH
+0Vq5Mr77/i2FeQ1eg4SnvaZ8S8UHWla/iIVgX3XAcYO7SJ76F00CX8SQ5dLyhrr5
+YBG8u6k8LHHPMzVtmqoPU7cePDAjGWIddQ1g15WihILsgqCD+8z3YPxvfa1RsOvh
+jyt4Ca0WEmLnr7v5xhp9pNRIPewUpvjwrR+cfyeEGjjat4tX5Wh/tzym51y7vvVM
+Pa3I0M3BtQyqIa2ip8MS2eWcIs1TN2qHOorOolwHaLEDZY38fIECgcAKns98A2G3
+tLvZaDZlVsJWZsdSDUrFCKvx9QbTZHbyOL5JU/8TgLBgfOgV2yxLXn9Pq+0Quvb2
+EjaFuA3GKOFi50WtfwR6Yo1DaFcx5n0bDShnaHOF+dUi0BVQd2V1DsqAwF5/Eh3A
+lX+XuWeSam4/91WhmNMCZpfYv0GErs4ZBHHsl54jmvrrjbhg/efUvpWKi/9vlKm+
++ITH+nG1xCnyEEVZ+vm9Qq57lCLBZGyGT4PetllpsRrGcdO4/gfK8lY=
+-----END RSA PRIVATE KEY-----
diff --git a/demos/smime/encr.txt b/demos/smime/encr.txt
new file mode 100644
index 000000000000..f163a326ed25
--- /dev/null
+++ b/demos/smime/encr.txt
@@ -0,0 +1,3 @@
+Content-type: text/plain
+
+Sample OpenSSL Data for PKCS#7 encryption
diff --git a/demos/smime/sign.txt b/demos/smime/sign.txt
new file mode 100644
index 000000000000..af1341d0a859
--- /dev/null
+++ b/demos/smime/sign.txt
@@ -0,0 +1,3 @@
+Content-type: text/plain
+
+Test OpenSSL Signed Content
diff --git a/demos/smime/signer.pem b/demos/smime/signer.pem
new file mode 100644
index 000000000000..4bbf7a69f382
--- /dev/null
+++ b/demos/smime/signer.pem
@@ -0,0 +1,52 @@
+-----BEGIN CERTIFICATE-----
+MIIELDCCApSgAwIBAgIIcsOElVeHzfQwDQYJKoZIhvcNAQELBQAwVzELMAkGA1UE
+BhMCVUsxEjAQBgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEcMBoGA1UEAwwTVGVzdCBTL01JTUUgUm9vdCBDQTAgFw0xODA2MTQxMjQ2Mjha
+GA8yMTE4MDYxNDEyNDYyOFowVjELMAkGA1UEBhMCVUsxJTAjBgNVBAMMHE9wZW5T
+U0wgdGVzdCBTL01JTUUgc2lnbmVyIDExIDAeBgkqhkiG9w0BCQEWEXRlc3QxQG9w
+ZW5zc2wub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1vvSgaL1
+byi9AE8Ep3v7Yv36JxYywaZhUy8dEFRiYn6NsVhhNo6SK1Mp8daQ0MZoMzbT1aKp
+JTLTgDJZHit2t1d6l3aWJG+cbcLua+XKowaZjj6rirB390fuL4qt5PiAb571QFtu
+L8apcydwGEdkaPRuCnvctN8VcZPTKh+M8VEESyxk5K37QYKaAB6ItWR5KhjiAuDt
+zsJbjEtOvGtmu2FRCU47GzfkdjYo7tY38WTY+2WWh+idKErtmYSinmhE0H7+yoJB
+s1VCI+cq5tVW+oEO9HF4vEDEUykEFFPsCEkIWM+RjCgK8cRSCpg6VQr+ZTii6k7C
+m9CP81QhUoV3QwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1P
+cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUg1DE7OaNqMQQ
+8Z1bvjhnlisxfsMwHwYDVR0jBBgwFoAUpJjGgWED0xBnKntZmlNiAzjC0HswDQYJ
+KoZIhvcNAQELBQADggGBAGxAivCwPsAYmMZfVJTELWNNMBzKzmeRvrp6k/6S74Pw
+LDEhTnslCV4U1gTSd3nQ+LRm1fkzxLA12A/rlqN51P8B+hyVSMN9dj54YUcFd+KO
+XhkSDrSpph6hRqGy8zqELzlb1Q8yoIBclEmyv+CkXMrpnm+4JL4kzyj/iBRkZTDz
+ns15jJD9KHgrOnclaoDRkOT6lGbsd3j+aviKEj8ZILufSMw+W2YORy3nSAencjbO
+ezivVujqm+pjkfqdCS1HcFB7LhQEILfFqkssw8YmtJVrM9LF8VIcqueXbVZmeS/1
+QV5B7OEmtsM+NkoLF5ldWdPQvmftbShh+AAlpcsmqiRefQgA3aQn6YOnOHnnQwgB
+oQRNjQXsjgxV4t2HFYpwkK41kx4HToVGciPNMkndzfY/GJmgXsXfB6/AfUfhLTDv
+tbws1MZhaCNOffw3/SVS2nLREMFCGn5uAgNkqssWqeWJu3910XF640tqPBj5YGFc
+fykwWNhG5xS04EHpztgKdQ==
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEA1vvSgaL1byi9AE8Ep3v7Yv36JxYywaZhUy8dEFRiYn6NsVhh
+No6SK1Mp8daQ0MZoMzbT1aKpJTLTgDJZHit2t1d6l3aWJG+cbcLua+XKowaZjj6r
+irB390fuL4qt5PiAb571QFtuL8apcydwGEdkaPRuCnvctN8VcZPTKh+M8VEESyxk
+5K37QYKaAB6ItWR5KhjiAuDtzsJbjEtOvGtmu2FRCU47GzfkdjYo7tY38WTY+2WW
+h+idKErtmYSinmhE0H7+yoJBs1VCI+cq5tVW+oEO9HF4vEDEUykEFFPsCEkIWM+R
+jCgK8cRSCpg6VQr+ZTii6k7Cm9CP81QhUoV3QwIDAQABAoIBAQC6LCWmIisNcmgK
+RmOvbszKc0sYYj7eOGl8EgbHR2xUA2hNNk4pYtnuLvzZ84hBZDCEeWyFS3HTRuql
+z/QhDl6mc1k0pXtsXkNHQlIamksbVvHPnzIKzrt1J5N7FEt3SERhZXTZoNQRB6di
+k7qdK+YmhdZtucnt0GrPisaJaf0yU/EjLuX+MU/0Xrc23lVhR3yqYhaOhWvrxTHM
+evykI0kOL+gU58eN2eWE4ELjS2z+njKDqcEyeIy00FdBAtCoKjMsWpRytKNmcFm9
+LdtMmizskF8VS3+XsDbkseIODx1xJ65IFmHHMV2xLG5/+bQppkB8JuE3EDrtFiUJ
+lGdfmBlxAoGBAP3Asg0drdunv7imeEOGpyj5JwF1hCVQ71IBGdqTr3aPqOlDH/io
+up7t+VBuSLqj1P20HygNjow+ALw/Ko+a0icodg7QA2Co0/RiBwa+u2SgpYDqC9Kt
+KIdRcv+NXkhXF/DLIn0jJvI53OtKsbgTv/C+aCipblofnO9sF4AhShq1AoGBANjj
+Ou0czloNORbk3qAxLi4b5P/YOyZBJDa0zijFdD1jImfOeyNFXeg2ID+8ZjDkP/eP
+pLy/Gt/8bVb+O+9wMOho3kWKZBN3O2VsLJYakAehDsC5ax7i2HtEqg1L1krW2duS
+POiKg3qNjETM30zTA4pHwkNAETIktResze7SRm0XAoGABH7KaLMS5mZFXjcMwF19
+TpuDVmJHkgWqB7DfTWD6ZcZLvr4irdwHWlNq7ELX5P6MAmaTerkqwk9C4hLYZSzf
+9jOgS8jhlm/HOXgXGcZ9OV4jMHJ0/Sl2I1eNCvvtJKjuUqS2mrLpuLbPtBdhqJoo
+91HYNIgz3ULcG921WN6+GlUCgYEA066T6LDgxgt52NpwXrEhfWdETmDg+ilCCxLU
+0/5DwVZsUhy5Gmeti+Kn/w0GQFnGBP1xr7ZlqI9auDlSjhNV6L/RkNXNbyJEGm1F
+5wrt4ERVfcx6vJ5y43zU7D1EXa7s2t0UDXKDeK2GZe//UZ/yKJh5BeIV5nblOMI0
+DA+3JOkCgYEA80QGLjGlCvxKceVbuohbIZ1+/EoXPq993ER9S8D2MTGATsEcygtF
+rM8JcHTv75sjycqu68BAQr1Z5qwwrMyY0vWVEorKzvAXEWolC67asR4cDutOd+qy
+WlEIyojX45GwHCHpcbVRiGRWuj3kwkc+WzdgusBoAJrPCigES/Cr8uA=
+-----END RSA PRIVATE KEY-----
diff --git a/demos/smime/signer2.pem b/demos/smime/signer2.pem
new file mode 100644
index 000000000000..52827297e8a3
--- /dev/null
+++ b/demos/smime/signer2.pem
@@ -0,0 +1,52 @@
+-----BEGIN CERTIFICATE-----
+MIIELDCCApSgAwIBAgIIcsOElVeHzfUwDQYJKoZIhvcNAQELBQAwVzELMAkGA1UE
+BhMCVUsxEjAQBgNVBAcMCVRlc3QgQ2l0eTEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEcMBoGA1UEAwwTVGVzdCBTL01JTUUgUm9vdCBDQTAgFw0xODA2MTQxMjQ2Mjha
+GA8yMTE4MDYxNDEyNDYyOFowVjELMAkGA1UEBhMCVUsxJTAjBgNVBAMMHE9wZW5T
+U0wgdGVzdCBTL01JTUUgc2lnbmVyIDIxIDAeBgkqhkiG9w0BCQEWEXRlc3QyQG9w
+ZW5zc2wub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1ledrM9R
+3x3bZypZAEi00DJYAmLS5F6Gg3+xpjE745UWKrjDAY5KswavKKa3vZxoUz2omNSg
+4nYfLSowq7AI3VnZ8LwNo8lAeo7AX9elrsmzQzhr2DCdCdbRhCWoiS/ba5tKIhlb
+gFnP+pB8jhC9qZuQJkpVaivywMW8rA9DRbeDcQjDKhUi0ukVDYHDd9+FtNM3H1t3
+AUGWBecjWYa4hXC3CsH3+cFBZKjAepL74hqiEfsEyzKesft3NFd1AcVY9W5MRCK4
+lUFiDbBtIgPkvPJeoEs/kFp3+OvJFDwi4K4Z6XzALyT0LXNx6w3kSfx0TLdNjXLD
+O9a2dzwhHhPtCQIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1P
+cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUYJEUXnMb/ux0
+WrzSh+bnhpi6GS0wHwYDVR0jBBgwFoAUpJjGgWED0xBnKntZmlNiAzjC0HswDQYJ
+KoZIhvcNAQELBQADggGBAFbrwfsSciDFI97c7oqS8jtxOSa3c4B7xhmcgUkYCiaD
+7mbZuqTUf4ltJJZXP/TJ44fhL0zVAvRXSXw1LE3YvLGOlBc6dM3D7DyL5pfUTUBY
+ICt+NLfG5iHtkiZPPSfK2t5f4UGFwU/ERT62sLu4keLI5igi9J2jKSykN3u5SQ3s
+Zsennow5zUsFkcz9hkB4RczlHRogA0SgVhELQbN1nYIqJJDRFZL+CmarDRTFMilk
+7dXCacw6xt9vIc3ZXO+pu2g1ezgSPwOoUykQcL3UhAEIIyt+TRe3fafh5TXwd8tr
+FAecAuz5Mqsmek5nEW9ZeYmxNz5VFwc4F61y4xFj7lI0frLCCAu3gVoqiQrW+WwR
+e27z1Nm4uUcduFqj45Pu2eTyV3LZtLUbFvL5ZSPUCSk1wVmC2otX8ksFDDTO1rIy
+l5Qd1g1P8bLuj8NG98J2zVOabtaxYCAIBPZ3dUh2eNrPKoLAvrgKh1MH+K2Eh5Oy
+z1T4Eu+e5Kq/uQkZpI5QzA==
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEA1ledrM9R3x3bZypZAEi00DJYAmLS5F6Gg3+xpjE745UWKrjD
+AY5KswavKKa3vZxoUz2omNSg4nYfLSowq7AI3VnZ8LwNo8lAeo7AX9elrsmzQzhr
+2DCdCdbRhCWoiS/ba5tKIhlbgFnP+pB8jhC9qZuQJkpVaivywMW8rA9DRbeDcQjD
+KhUi0ukVDYHDd9+FtNM3H1t3AUGWBecjWYa4hXC3CsH3+cFBZKjAepL74hqiEfsE
+yzKesft3NFd1AcVY9W5MRCK4lUFiDbBtIgPkvPJeoEs/kFp3+OvJFDwi4K4Z6XzA
+LyT0LXNx6w3kSfx0TLdNjXLDO9a2dzwhHhPtCQIDAQABAoIBAGMEGJfTMiwS+979
+ph3GeJjRGO0JQAk1TYiDvcpbZiItJg9YSOV4GTP4u4PY+HqEPYFus2relu/mx2Iy
+4kb9zCqNLmvSQ67M8pdrSJ093pEPJlvAPbmiQ3lfHmyghOnTDNb55tY3xphVZQmI
+I7HxM9ydO4skva6NXNgGwLDvYBFc6z6d95ai/WEFWHOt5Mt7OVOWAHQ0lAOofWLA
+2BwKmrQnCwMvm1TMoKaAU/ngTToUGBMIN1HwRcY6qDraZte5o3EDRABHB78OHrSu
+I/Eoi//5C8A7iZ5Y189lMbahIN6xVMwHwwIqLptTV2GNZOKSiIXnM06vIf4CPZKl
+3VlwBgECgYEA/BKnn23KtefA906QNkrIOXASLEE1T77NlTYIRDTsUoz6XTVSvOCI
+ARxdsoLwFko5ICMhti9S/1G/MYH0BoJN8rbzvjmZDfwF612p0AYALyBlRgW+ID9L
+41CJQcLWxeiQd/GcrUZmudVNUGXa8nsNHmFleGLchXeqU7M6fljJOkECgYEA2a56
+yvYQgMF/SIPkxU1+WcQC6+JGc+ax220/lysBsDb4SkXomfGtFWbenxwamuQu+n67
+DJWi9oJIi9Vj4eKOXS6vjCAkYeLgCpK6S26frPtxJuZwl/lF7mFl8Z4ZnJeiFJ4h
+AXt5r9vqnOZtCnLqRRAlqF5OswWgv/mhJ6jpMMkCgYBMPaAxWlXLexMkOcDoiunQ
+ZZM5i2eCfSVVEgiiCJfJyBYZhv1FX2wDWf8E9RGEzGJG1BloLxwdWS5I3RNfvJ2y
+4Z8LVAR09Fsd+zBXWNlJZ7T53tbIjhx33m4FU9b9+P9pJ8zJo9eCMX+253e3i3xG
+ShMUvGIShEUiF72DZXtHgQKBgDi867CfNmn5BW4nQqfSrQ5EsuY80lQ/WzhwX1TN
+luERUuI5GomVnqGncHtUXfLlawFLqwF6t0E9cB9SfXhRDv5mvsbtUc5Zzj+zQu+K
+ZAA4gaO8CLjz9jBOHr49kTtpootxM/Uo8+zMi3hd7yn8Def2b3pVKnorC10+eazW
+sAFRAoGAet6fQbQD+4vZ1oukZcZhmVlIWTSZJ1vAGCcT/3E40pqpPY+Ho56Lcwh0
+9f4TAykuGwFgqvZvR8yD2gpuISYGYplWqa1N6qxMaiVzmY5q1XW+O74xRH5Kz5fr
+D+3j2x4EiyG7AYyZMOphDtBd/TSQQMYmGW6PiyM9ceIVnDK1Dd4=
+-----END RSA PRIVATE KEY-----
diff --git a/demos/smime/smdec.c b/demos/smime/smdec.c
new file mode 100644
index 000000000000..debcedd5e866
--- /dev/null
+++ b/demos/smime/smdec.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2007-2016 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
+ */
+
+/* Simple S/MIME signing example */
+#include <openssl/pem.h>
+#include <openssl/pkcs7.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL;
+ X509 *rcert = NULL;
+ EVP_PKEY *rkey = NULL;
+ PKCS7 *p7 = NULL;
+ int ret = 1;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Read in recipient certificate and private key */
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ rcert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ BIO_reset(tbio);
+
+ rkey = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);
+
+ if (!rcert || !rkey)
+ goto err;
+
+ /* Open content being signed */
+
+ in = BIO_new_file("smencr.txt", "r");
+
+ if (!in)
+ goto err;
+
+ /* Sign content */
+ p7 = SMIME_read_PKCS7(in, NULL);
+
+ if (!p7)
+ goto err;
+
+ out = BIO_new_file("encrout.txt", "w");
+ if (!out)
+ goto err;
+
+ /* Decrypt S/MIME message */
+ if (!PKCS7_decrypt(p7, rkey, rcert, out, 0))
+ goto err;
+
+ ret = 0;
+
+ err:
+ if (ret) {
+ fprintf(stderr, "Error Signing Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+ PKCS7_free(p7);
+ X509_free(rcert);
+ EVP_PKEY_free(rkey);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+
+ return ret;
+
+}
diff --git a/demos/smime/smenc.c b/demos/smime/smenc.c
new file mode 100644
index 000000000000..0714dddfd2c9
--- /dev/null
+++ b/demos/smime/smenc.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2007-2016 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
+ */
+
+/* Simple S/MIME encrypt example */
+#include <openssl/pem.h>
+#include <openssl/pkcs7.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL;
+ X509 *rcert = NULL;
+ STACK_OF(X509) *recips = NULL;
+ PKCS7 *p7 = NULL;
+ int ret = 1;
+
+ /*
+ * On OpenSSL 0.9.9 only:
+ * for streaming set PKCS7_STREAM
+ */
+ int flags = PKCS7_STREAM;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Read in recipient certificate */
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ rcert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ if (!rcert)
+ goto err;
+
+ /* Create recipient STACK and add recipient cert to it */
+ recips = sk_X509_new_null();
+
+ if (!recips || !sk_X509_push(recips, rcert))
+ goto err;
+
+ /*
+ * sk_X509_pop_free will free up recipient STACK and its contents so set
+ * rcert to NULL so it isn't freed up twice.
+ */
+ rcert = NULL;
+
+ /* Open content being encrypted */
+
+ in = BIO_new_file("encr.txt", "r");
+
+ if (!in)
+ goto err;
+
+ /* encrypt content */
+ p7 = PKCS7_encrypt(recips, in, EVP_des_ede3_cbc(), flags);
+
+ if (!p7)
+ goto err;
+
+ out = BIO_new_file("smencr.txt", "w");
+ if (!out)
+ goto err;
+
+ /* Write out S/MIME message */
+ if (!SMIME_write_PKCS7(out, p7, in, flags))
+ goto err;
+
+ ret = 0;
+
+ err:
+ if (ret) {
+ fprintf(stderr, "Error Encrypting Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+ PKCS7_free(p7);
+ X509_free(rcert);
+ sk_X509_pop_free(recips, X509_free);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+ return ret;
+
+}
diff --git a/demos/smime/smsign.c b/demos/smime/smsign.c
new file mode 100644
index 000000000000..ac2c27b52591
--- /dev/null
+++ b/demos/smime/smsign.c
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2007-2016 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
+ */
+
+/* Simple S/MIME signing example */
+#include <openssl/pem.h>
+#include <openssl/pkcs7.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL;
+ X509 *scert = NULL;
+ EVP_PKEY *skey = NULL;
+ PKCS7 *p7 = NULL;
+ int ret = 1;
+
+ /*
+ * For simple S/MIME signing use PKCS7_DETACHED. On OpenSSL 0.9.9 only:
+ * for streaming detached set PKCS7_DETACHED|PKCS7_STREAM for streaming
+ * non-detached set PKCS7_STREAM
+ */
+ int flags = PKCS7_DETACHED | PKCS7_STREAM;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Read in signer certificate and private key */
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ scert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ BIO_reset(tbio);
+
+ skey = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);
+
+ if (!scert || !skey)
+ goto err;
+
+ /* Open content being signed */
+
+ in = BIO_new_file("sign.txt", "r");
+
+ if (!in)
+ goto err;
+
+ /* Sign content */
+ p7 = PKCS7_sign(scert, skey, NULL, in, flags);
+
+ if (!p7)
+ goto err;
+
+ out = BIO_new_file("smout.txt", "w");
+ if (!out)
+ goto err;
+
+ if (!(flags & PKCS7_STREAM))
+ BIO_reset(in);
+
+ /* Write out S/MIME message */
+ if (!SMIME_write_PKCS7(out, p7, in, flags))
+ goto err;
+
+ ret = 0;
+
+ err:
+ if (ret) {
+ fprintf(stderr, "Error Signing Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+ PKCS7_free(p7);
+ X509_free(scert);
+ EVP_PKEY_free(skey);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+
+ return ret;
+
+}
diff --git a/demos/smime/smsign2.c b/demos/smime/smsign2.c
new file mode 100644
index 000000000000..a9e70257481b
--- /dev/null
+++ b/demos/smime/smsign2.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2007-2016 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
+ */
+
+/* S/MIME signing example: 2 signers. OpenSSL 0.9.9 only */
+#include <openssl/pem.h>
+#include <openssl/pkcs7.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL;
+ X509 *scert = NULL, *scert2 = NULL;
+ EVP_PKEY *skey = NULL, *skey2 = NULL;
+ PKCS7 *p7 = NULL;
+ int ret = 1;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ tbio = BIO_new_file("signer.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ scert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ BIO_reset(tbio);
+
+ skey = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);
+
+ BIO_free(tbio);
+
+ tbio = BIO_new_file("signer2.pem", "r");
+
+ if (!tbio)
+ goto err;
+
+ scert2 = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ BIO_reset(tbio);
+
+ skey2 = PEM_read_bio_PrivateKey(tbio, NULL, 0, NULL);
+
+ if (!scert2 || !skey2)
+ goto err;
+
+ in = BIO_new_file("sign.txt", "r");
+
+ if (!in)
+ goto err;
+
+ p7 = PKCS7_sign(NULL, NULL, NULL, in, PKCS7_STREAM | PKCS7_PARTIAL);
+
+ if (!p7)
+ goto err;
+
+ /* Add each signer in turn */
+
+ if (!PKCS7_sign_add_signer(p7, scert, skey, NULL, 0))
+ goto err;
+
+ if (!PKCS7_sign_add_signer(p7, scert2, skey2, NULL, 0))
+ goto err;
+
+ out = BIO_new_file("smout.txt", "w");
+ if (!out)
+ goto err;
+
+ /* NB: content included and finalized by SMIME_write_PKCS7 */
+
+ if (!SMIME_write_PKCS7(out, p7, in, PKCS7_STREAM))
+ goto err;
+
+ ret = 0;
+
+ err:
+ if (ret) {
+ fprintf(stderr, "Error Signing Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+ PKCS7_free(p7);
+ X509_free(scert);
+ EVP_PKEY_free(skey);
+ X509_free(scert2);
+ EVP_PKEY_free(skey2);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+ return ret;
+}
diff --git a/demos/smime/smver.c b/demos/smime/smver.c
new file mode 100644
index 000000000000..5d552b18082a
--- /dev/null
+++ b/demos/smime/smver.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2007-2016 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
+ */
+
+/* Simple S/MIME verification example */
+#include <openssl/pem.h>
+#include <openssl/pkcs7.h>
+#include <openssl/err.h>
+
+int main(int argc, char **argv)
+{
+ BIO *in = NULL, *out = NULL, *tbio = NULL, *cont = NULL;
+ X509_STORE *st = NULL;
+ X509 *cacert = NULL;
+ PKCS7 *p7 = NULL;
+
+ int ret = 1;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ /* Set up trusted CA certificate store */
+
+ st = X509_STORE_new();
+ if (st == NULL)
+ goto err;
+
+ /* Read in signer certificate and private key */
+ tbio = BIO_new_file("cacert.pem", "r");
+
+ if (tbio == NULL)
+ goto err;
+
+ cacert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
+
+ if (cacert == NULL)
+ goto err;
+
+ if (!X509_STORE_add_cert(st, cacert))
+ goto err;
+
+ /* Open content being signed */
+
+ in = BIO_new_file("smout.txt", "r");
+
+ if (in == NULL)
+ goto err;
+
+ /* Sign content */
+ p7 = SMIME_read_PKCS7(in, &cont);
+
+ if (p7 == NULL)
+ goto err;
+
+ /* File to output verified content to */
+ out = BIO_new_file("smver.txt", "w");
+ if (out == NULL)
+ goto err;
+
+ if (!PKCS7_verify(p7, NULL, st, cont, out, 0)) {
+ fprintf(stderr, "Verification Failure\n");
+ goto err;
+ }
+
+ fprintf(stderr, "Verification Successful\n");
+
+ ret = 0;
+
+ err:
+ if (ret) {
+ fprintf(stderr, "Error Verifying Data\n");
+ ERR_print_errors_fp(stderr);
+ }
+
+ X509_STORE_free(st);
+ PKCS7_free(p7);
+ X509_free(cacert);
+ BIO_free(in);
+ BIO_free(out);
+ BIO_free(tbio);
+ return ret;
+}
diff --git a/doc/build.info b/doc/build.info
index 00dc150721ac..0279e2390a32 100644
--- a/doc/build.info
+++ b/doc/build.info
@@ -843,6 +843,10 @@ DEPEND[html/man3/CMS_sign_receipt.html]=man3/CMS_sign_receipt.pod
GENERATE[html/man3/CMS_sign_receipt.html]=man3/CMS_sign_receipt.pod
DEPEND[man/man3/CMS_sign_receipt.3]=man3/CMS_sign_receipt.pod
GENERATE[man/man3/CMS_sign_receipt.3]=man3/CMS_sign_receipt.pod
+DEPEND[html/man3/CMS_signed_get_attr.html]=man3/CMS_signed_get_attr.pod
+GENERATE[html/man3/CMS_signed_get_attr.html]=man3/CMS_signed_get_attr.pod
+DEPEND[man/man3/CMS_signed_get_attr.3]=man3/CMS_signed_get_attr.pod
+GENERATE[man/man3/CMS_signed_get_attr.3]=man3/CMS_signed_get_attr.pod
DEPEND[html/man3/CMS_uncompress.html]=man3/CMS_uncompress.pod
GENERATE[html/man3/CMS_uncompress.html]=man3/CMS_uncompress.pod
DEPEND[man/man3/CMS_uncompress.3]=man3/CMS_uncompress.pod
@@ -1239,6 +1243,10 @@ DEPEND[html/man3/EVP_PKEY_fromdata.html]=man3/EVP_PKEY_fromdata.pod
GENERATE[html/man3/EVP_PKEY_fromdata.html]=man3/EVP_PKEY_fromdata.pod
DEPEND[man/man3/EVP_PKEY_fromdata.3]=man3/EVP_PKEY_fromdata.pod
GENERATE[man/man3/EVP_PKEY_fromdata.3]=man3/EVP_PKEY_fromdata.pod
+DEPEND[html/man3/EVP_PKEY_get_attr.html]=man3/EVP_PKEY_get_attr.pod
+GENERATE[html/man3/EVP_PKEY_get_attr.html]=man3/EVP_PKEY_get_attr.pod
+DEPEND[man/man3/EVP_PKEY_get_attr.3]=man3/EVP_PKEY_get_attr.pod
+GENERATE[man/man3/EVP_PKEY_get_attr.3]=man3/EVP_PKEY_get_attr.pod
DEPEND[html/man3/EVP_PKEY_get_default_digest_nid.html]=man3/EVP_PKEY_get_default_digest_nid.pod
GENERATE[html/man3/EVP_PKEY_get_default_digest_nid.html]=man3/EVP_PKEY_get_default_digest_nid.pod
DEPEND[man/man3/EVP_PKEY_get_default_digest_nid.3]=man3/EVP_PKEY_get_default_digest_nid.pod
@@ -2655,6 +2663,10 @@ DEPEND[html/man3/X509_ALGOR_dup.html]=man3/X509_ALGOR_dup.pod
GENERATE[html/man3/X509_ALGOR_dup.html]=man3/X509_ALGOR_dup.pod
DEPEND[man/man3/X509_ALGOR_dup.3]=man3/X509_ALGOR_dup.pod
GENERATE[man/man3/X509_ALGOR_dup.3]=man3/X509_ALGOR_dup.pod
+DEPEND[html/man3/X509_ATTRIBUTE.html]=man3/X509_ATTRIBUTE.pod
+GENERATE[html/man3/X509_ATTRIBUTE.html]=man3/X509_ATTRIBUTE.pod
+DEPEND[man/man3/X509_ATTRIBUTE.3]=man3/X509_ATTRIBUTE.pod
+GENERATE[man/man3/X509_ATTRIBUTE.3]=man3/X509_ATTRIBUTE.pod
DEPEND[html/man3/X509_CRL_get0_by_serial.html]=man3/X509_CRL_get0_by_serial.pod
GENERATE[html/man3/X509_CRL_get0_by_serial.html]=man3/X509_CRL_get0_by_serial.pod
DEPEND[man/man3/X509_CRL_get0_by_serial.3]=man3/X509_CRL_get0_by_serial.pod
@@ -2699,6 +2711,14 @@ DEPEND[html/man3/X509_PUBKEY_new.html]=man3/X509_PUBKEY_new.pod
GENERATE[html/man3/X509_PUBKEY_new.html]=man3/X509_PUBKEY_new.pod
DEPEND[man/man3/X509_PUBKEY_new.3]=man3/X509_PUBKEY_new.pod
GENERATE[man/man3/X509_PUBKEY_new.3]=man3/X509_PUBKEY_new.pod
+DEPEND[html/man3/X509_REQ_get_attr.html]=man3/X509_REQ_get_attr.pod
+GENERATE[html/man3/X509_REQ_get_attr.html]=man3/X509_REQ_get_attr.pod
+DEPEND[man/man3/X509_REQ_get_attr.3]=man3/X509_REQ_get_attr.pod
+GENERATE[man/man3/X509_REQ_get_attr.3]=man3/X509_REQ_get_attr.pod
+DEPEND[html/man3/X509_REQ_get_extensions.html]=man3/X509_REQ_get_extensions.pod
+GENERATE[html/man3/X509_REQ_get_extensions.html]=man3/X509_REQ_get_extensions.pod
+DEPEND[man/man3/X509_REQ_get_extensions.3]=man3/X509_REQ_get_extensions.pod
+GENERATE[man/man3/X509_REQ_get_extensions.3]=man3/X509_REQ_get_extensions.pod
DEPEND[html/man3/X509_SIG_get0.html]=man3/X509_SIG_get0.pod
GENERATE[html/man3/X509_SIG_get0.html]=man3/X509_SIG_get0.pod
DEPEND[man/man3/X509_SIG_get0.3]=man3/X509_SIG_get0.pod
@@ -2974,6 +2994,7 @@ html/man3/CMS_get0_type.html \
html/man3/CMS_get1_ReceiptRequest.html \
html/man3/CMS_sign.html \
html/man3/CMS_sign_receipt.html \
+html/man3/CMS_signed_get_attr.html \
html/man3/CMS_uncompress.html \
html/man3/CMS_verify.html \
html/man3/CMS_verify_receipt.html \
@@ -3073,6 +3094,7 @@ html/man3/EVP_PKEY_digestsign_supports_digest.html \
html/man3/EVP_PKEY_encapsulate.html \
html/man3/EVP_PKEY_encrypt.html \
html/man3/EVP_PKEY_fromdata.html \
+html/man3/EVP_PKEY_get_attr.html \
html/man3/EVP_PKEY_get_default_digest_nid.html \
html/man3/EVP_PKEY_get_field_type.html \
html/man3/EVP_PKEY_get_group_name.html \
@@ -3427,6 +3449,7 @@ html/man3/UI_new.html \
html/man3/X509V3_get_d2i.html \
html/man3/X509V3_set_ctx.html \
html/man3/X509_ALGOR_dup.html \
+html/man3/X509_ATTRIBUTE.html \
html/man3/X509_CRL_get0_by_serial.html \
html/man3/X509_EXTENSION_set_object.html \
html/man3/X509_LOOKUP.html \
@@ -3438,6 +3461,8 @@ html/man3/X509_NAME_get0_der.html \
html/man3/X509_NAME_get_index_by_NID.html \
html/man3/X509_NAME_print_ex.html \
html/man3/X509_PUBKEY_new.html \
+html/man3/X509_REQ_get_attr.html \
+html/man3/X509_REQ_get_extensions.html \
html/man3/X509_SIG_get0.html \
html/man3/X509_STORE_CTX_get_error.html \
html/man3/X509_STORE_CTX_new.html \
@@ -3577,6 +3602,7 @@ man/man3/CMS_get0_type.3 \
man/man3/CMS_get1_ReceiptRequest.3 \
man/man3/CMS_sign.3 \
man/man3/CMS_sign_receipt.3 \
+man/man3/CMS_signed_get_attr.3 \
man/man3/CMS_uncompress.3 \
man/man3/CMS_verify.3 \
man/man3/CMS_verify_receipt.3 \
@@ -3676,6 +3702,7 @@ man/man3/EVP_PKEY_digestsign_supports_digest.3 \
man/man3/EVP_PKEY_encapsulate.3 \
man/man3/EVP_PKEY_encrypt.3 \
man/man3/EVP_PKEY_fromdata.3 \
+man/man3/EVP_PKEY_get_attr.3 \
man/man3/EVP_PKEY_get_default_digest_nid.3 \
man/man3/EVP_PKEY_get_field_type.3 \
man/man3/EVP_PKEY_get_group_name.3 \
@@ -4030,6 +4057,7 @@ man/man3/UI_new.3 \
man/man3/X509V3_get_d2i.3 \
man/man3/X509V3_set_ctx.3 \
man/man3/X509_ALGOR_dup.3 \
+man/man3/X509_ATTRIBUTE.3 \
man/man3/X509_CRL_get0_by_serial.3 \
man/man3/X509_EXTENSION_set_object.3 \
man/man3/X509_LOOKUP.3 \
@@ -4041,6 +4069,8 @@ man/man3/X509_NAME_get0_der.3 \
man/man3/X509_NAME_get_index_by_NID.3 \
man/man3/X509_NAME_print_ex.3 \
man/man3/X509_PUBKEY_new.3 \
+man/man3/X509_REQ_get_attr.3 \
+man/man3/X509_REQ_get_extensions.3 \
man/man3/X509_SIG_get0.3 \
man/man3/X509_STORE_CTX_get_error.3 \
man/man3/X509_STORE_CTX_new.3 \
diff --git a/doc/images/openssl-square-nontransparent.png b/doc/images/openssl-square-nontransparent.png
new file mode 100644
index 000000000000..5e6b747ce087
--- /dev/null
+++ b/doc/images/openssl-square-nontransparent.png
Binary files differ
diff --git a/doc/images/openssl-square.svg b/doc/images/openssl-square.svg
new file mode 100644
index 000000000000..bb1ddc0490f3
--- /dev/null
+++ b/doc/images/openssl-square.svg
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 510 510" style="enable-background:new 0 0 510 510;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#231F20;}
+ .st1{fill:#6D2520;}
+</style>
+<g id="Layer_1">
+</g>
+<g id="Layer_2">
+ <g>
+ <path class="st0" d="M256.2,289c-5.2,0-9.3,1-12.1,3.1c-2.9,2.1-4.3,5.2-4.3,9.3c0,3.8,2.1,7.1,6.3,10c4.2,2.9,9.8,5.6,16.7,8.2
+ c5.7,2.1,10.5,4.4,14.5,7.1c4,2.7,7.4,6.3,10,11c2.7,4.7,4,10.6,4,17.8c0,6.2-1.6,11.9-4.8,17.2c-3.2,5.3-7.9,9.5-14.1,12.6
+ c-6.2,3.1-13.6,4.6-22.2,4.6c-7.2,0-14.3-1.1-21.4-3.2c-7.1-2.1-13.6-5.4-19.7-9.7l10.4-18.4c4.1,3,8.9,5.5,14.2,7.5
+ c5.3,2,10.1,2.9,14.4,2.9c5,0,9.4-1.1,13-3.2s5.5-5.6,5.5-10.4c0-6.2-5.8-11.6-17.4-16.1c-6.8-2.7-12.6-5.3-17.1-7.8
+ c-4.6-2.5-8.5-6.1-11.8-10.8c-3.3-4.7-5-10.5-5-17.6c0-10.3,3.4-18.6,10.2-25c6.8-6.3,15.8-9.7,27.2-10.3c8.9,0,16.4,1,22.3,3
+ c6,2,11.8,4.9,17.4,8.6l-9,18.1C273,291.9,263.9,289,256.2,289z"/>
+ <path class="st0" d="M351.3,289c-5.2,0-9.3,1-12.1,3.1c-2.9,2.1-4.3,5.2-4.3,9.3c0,3.8,2.1,7.1,6.3,10c4.2,2.9,9.8,5.6,16.7,8.2
+ c5.7,2.1,10.5,4.4,14.5,7.1c4,2.7,7.4,6.3,10,11c2.7,4.7,4,10.6,4,17.8c0,6.2-1.6,11.9-4.8,17.2c-3.2,5.3-7.9,9.5-14.1,12.6
+ c-6.2,3.1-13.6,4.6-22.2,4.6c-7.2,0-14.3-1.1-21.4-3.2c-7.1-2.1-13.6-5.4-19.7-9.7l10.4-18.4c4.1,3,8.9,5.5,14.2,7.5
+ c5.3,2,10.1,2.9,14.4,2.9c5,0,9.4-1.1,13-3.2s5.5-5.6,5.5-10.4c0-6.2-5.8-11.6-17.4-16.1c-6.8-2.7-12.6-5.3-17.1-7.8
+ c-4.6-2.5-8.5-6.1-11.8-10.8c-3.3-4.7-5-10.5-5-17.6c0-10.3,3.4-18.6,10.2-25c6.8-6.3,15.8-9.7,27.2-10.3c8.9,0,16.4,1,22.3,3
+ c6,2,11.8,4.9,17.4,8.6l-9,18.1C368.1,291.9,359,289,351.3,289z"/>
+ <path class="st0" d="M433.2,268.7v97.2h56.4v22.8h-80.1v-120H433.2z"/>
+ </g>
+ <g>
+ <path class="st1" d="M27.5,147.3c5.6-9.5,13-17,22.4-22.6s19.7-8.4,30.8-8.4c11,0,21.2,2.8,30.7,8.4c9.4,5.6,17,13.1,22.6,22.6
+ c5.6,9.5,8.4,19.7,8.4,30.7c0,11.1-2.8,21.4-8.3,30.9s-13.1,16.9-22.6,22.4c-9.5,5.5-19.8,8.3-30.8,8.3c-11.1,0-21.4-2.7-30.9-8.2
+ c-9.5-5.4-16.9-12.9-22.4-22.3c-5.5-9.4-8.3-19.8-8.3-31.1C19.1,167,21.9,156.8,27.5,147.3z M41.8,201c4,7,9.5,12.6,16.4,16.7
+ s14.5,6.2,22.8,6.2c8.2,0,15.8-2,22.6-6.1c6.8-4.1,12.2-9.6,16.2-16.7c3.9-7.1,5.9-14.8,5.9-23.1c0-8.3-2-16.1-6-23.2
+ c-4-7.1-9.5-12.7-16.3-16.8c-6.9-4.1-14.5-6.2-22.7-6.2s-15.8,2.1-22.7,6.3c-6.9,4.2-12.3,9.8-16.3,16.9
+ c-3.9,7.1-5.9,14.8-5.9,23.2C35.8,186.4,37.8,194,41.8,201z"/>
+ <path class="st1" d="M215.1,171c5.2,3.1,9.3,7.5,12.3,13.1c3,5.6,4.5,12.1,4.5,19.4c0,7.2-1.6,13.6-4.8,19.1
+ c-3.2,5.5-7.7,9.8-13.3,12.8c-5.7,3-12,4.5-19,4.5c-5,0-9.8-1.1-14.3-3.3c-4.6-2.2-8.2-5.1-11-8.8v43.5h-15.5V168h13.5l1.3,11.7
+ c3.6-4,7.8-7.2,12.8-9.7c4.9-2.4,10.3-3.7,16.1-3.7C204,166.3,209.8,167.9,215.1,171z M203.8,224.3c3.7-2.1,6.7-4.9,8.9-8.5
+ c2.2-3.6,3.3-7.6,3.3-12.1c0-4.6-1-8.7-3.1-12.3c-2.1-3.7-4.9-6.6-8.4-8.7c-3.6-2.1-7.5-3.2-11.8-3.2c-5.9,0-10.9,1.6-15.1,4.9
+ s-6.9,7.7-8.3,13.3v11.5c0.9,5.3,3.4,9.7,7.6,13.1c4.2,3.4,9.1,5.1,14.8,5.1C196,227.4,200.1,226.4,203.8,224.3z"/>
+ <path class="st1" d="M384.1,172.3c4.2,3.8,6.4,8.8,6.5,14.9v51h-15.7v-45.7c-0.2-3.9-1.4-6.9-3.5-9.2c-2.1-2.2-5.3-3.4-9.5-3.5
+ c-6.1,0-11.2,2.4-15.2,7.3c-4,4.9-6,11.1-6,18.7v32.4h-15.5v-69.1h14l1,13.3c2.4-5,6.1-8.9,11-11.8c4.9-2.8,10.5-4.3,16.8-4.3
+ C374.5,166.5,379.9,168.4,384.1,172.3z"/>
+ <g>
+ <path class="st1" d="M242.5,203.4c0-21.3,16.2-38.1,36.9-38.1c20.3,0,35.6,16.9,35.6,38.8v4.1h-58c2,12.2,12,21.1,24.7,21.1
+ c7.2,0,14-2.3,18.7-6.5l9.3,9.1c-8.7,6.7-17.5,9.7-28.5,9.7C259.4,241.6,242.5,224.9,242.5,203.4z M300.7,197.3
+ c-2-11.3-10.9-19.7-21.6-19.7c-11.1,0-20,8-22,19.7H300.7z"/>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/doc/images/openssl.svg b/doc/images/openssl.svg
index 9cd6794fbdcf..988d3a0e91be 100644
--- a/doc/images/openssl.svg
+++ b/doc/images/openssl.svg
@@ -1,41 +1,49 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- id="svg2"
- viewBox="0 0 973.70528 248.96588"
- height="70.263748mm"
- width="274.80124mm">
- <defs
- id="defs4" />
- <g
- transform="translate(60.758696,-843.33549)"
- id="layer1">
- <text
- id="text3336"
- y="1012.3623"
- x="3.8487569e-06"
- style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- xml:space="preserve"><tspan
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:180px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
- y="1012.3623"
- x="3.8487569e-06"
- id="tspan3338"><tspan
- id="tspan3340"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:180px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#480e0c;fill-opacity:1">Open</tspan>SSL</tspan></text>
- <text
- id="text817"
- y="1049.0681"
- x="176.75166"
- style="font-style:normal;font-weight:normal;font-size:17.49999619px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93749976"
- xml:space="preserve"><tspan
- style="font-size:37.49998856px;stroke-width:0.93749976"
- y="1049.0681"
- x="176.75166"
- id="tspan815">Cryptography and SSL/TLS Toolkit</tspan></text>
- </g>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1"
+ id="svg2" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 779 199.2"
+ style="enable-background:new 0 0 779 199.2;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#231F20;}
+ .st1{fill:#6D2520;}
+</style>
+<g>
+ <g>
+ <path class="st0" d="M457.3,48.3c-4.9,0-8.7,1-11.4,2.9c-2.7,1.9-4.1,4.9-4.1,8.7c0,3.6,2,6.7,5.9,9.4c3.9,2.7,9.2,5.3,15.7,7.7
+ c5.3,1.9,9.9,4.2,13.7,6.7c3.8,2.5,6.9,6,9.4,10.4c2.5,4.4,3.8,10,3.8,16.7c0,5.8-1.5,11.2-4.5,16.2c-3,5-7.4,8.9-13.3,11.8
+ c-5.8,2.9-12.8,4.4-20.9,4.4c-6.7,0-13.4-1-20.1-3c-6.6-2-12.8-5-18.6-9.1l9.8-17.3c3.9,2.9,8.3,5.2,13.3,7.1
+ c5,1.8,9.5,2.8,13.5,2.8c4.7,0,8.8-1,12.3-3c3.5-2,5.2-5.2,5.2-9.7c0-5.8-5.5-10.9-16.4-15.2c-6.4-2.6-11.8-5-16.1-7.4
+ c-4.3-2.3-8-5.7-11.1-10.1c-3.1-4.4-4.7-9.9-4.7-16.6c0-9.7,3.2-17.5,9.6-23.5c6.4-5.9,14.9-9.2,25.5-9.7c8.4,0,15.4,0.9,21,2.8
+ c5.6,1.9,11.1,4.6,16.4,8.1l-8.4,17C473.1,51,464.6,48.3,457.3,48.3z"/>
+ <path class="st0" d="M546.8,48.3c-4.9,0-8.7,1-11.4,2.9c-2.7,1.9-4.1,4.9-4.1,8.7c0,3.6,2,6.7,5.9,9.4c3.9,2.7,9.2,5.3,15.7,7.7
+ c5.3,1.9,9.9,4.2,13.7,6.7c3.8,2.5,6.9,6,9.4,10.4c2.5,4.4,3.8,10,3.8,16.7c0,5.8-1.5,11.2-4.5,16.2c-3,5-7.4,8.9-13.3,11.8
+ c-5.8,2.9-12.8,4.4-20.9,4.4c-6.7,0-13.4-1-20.1-3s-12.8-5-18.6-9.1l9.8-17.3c3.9,2.9,8.3,5.2,13.3,7.1s9.5,2.8,13.5,2.8
+ c4.7,0,8.8-1,12.3-3s5.2-5.2,5.2-9.7c0-5.8-5.5-10.9-16.4-15.2c-6.4-2.6-11.8-5-16.1-7.4c-4.3-2.3-8-5.7-11.1-10.1
+ c-3.1-4.4-4.7-9.9-4.7-16.6c0-9.7,3.2-17.5,9.6-23.5c6.4-5.9,14.9-9.2,25.5-9.7c8.4,0,15.4,0.9,21,2.8c5.6,1.9,11.1,4.6,16.4,8.1
+ l-8.4,17C562.6,51,554,48.3,546.8,48.3z"/>
+ <path class="st0" d="M623.8,29.1v91.4h53.1V142h-75.3V29.1H623.8z"/>
+ </g>
+ <g>
+ <path class="st1" d="M61.9,58.4c5.1-8.7,12-15.6,20.6-20.8s18.1-7.7,28.3-7.7c10.1,0,19.5,2.6,28.2,7.7
+ c8.7,5.2,15.6,12.1,20.8,20.8c5.2,8.7,7.7,18.1,7.7,28.2c0,10.2-2.6,19.7-7.7,28.4c-5.1,8.7-12,15.6-20.8,20.6
+ c-8.7,5.1-18.2,7.6-28.3,7.6c-10.2,0-19.7-2.5-28.4-7.5c-8.7-5-15.6-11.8-20.6-20.5c-5.1-8.6-7.6-18.2-7.6-28.6
+ C54.2,76.5,56.8,67.1,61.9,58.4z M75.1,107.8c3.7,6.4,8.7,11.6,15.1,15.3c6.4,3.8,13.4,5.7,20.9,5.7c7.6,0,14.5-1.9,20.8-5.6
+ c6.3-3.7,11.2-8.8,14.9-15.3c3.6-6.5,5.4-13.6,5.4-21.2c0-7.7-1.8-14.8-5.5-21.3s-8.7-11.7-15-15.5c-6.3-3.8-13.3-5.7-20.9-5.7
+ c-7.6,0-14.5,1.9-20.9,5.8c-6.3,3.8-11.3,9-15,15.6s-5.4,13.7-5.4,21.3C69.6,94.4,71.4,101.4,75.1,107.8z"/>
+ <path class="st1" d="M234.4,80.2c4.8,2.9,8.6,6.9,11.3,12c2.8,5.2,4.1,11.1,4.1,17.9c0,6.7-1.5,12.5-4.5,17.6
+ c-3,5.1-7.1,9-12.3,11.7c-5.2,2.8-11,4.1-17.5,4.1c-4.6,0-9-1-13.2-3c-4.2-2-7.6-4.7-10.1-8.1v40h-14.3V77.5h12.4l1.2,10.7
+ c3.3-3.7,7.2-6.6,11.7-8.9c4.5-2.3,9.5-3.4,14.8-3.4C224.2,75.9,229.6,77.4,234.4,80.2z M224,129.2c3.4-1.9,6.2-4.5,8.2-7.8
+ c2-3.3,3.1-7,3.1-11.1c0-4.2-0.9-8-2.8-11.3c-1.9-3.4-4.5-6-7.7-8c-3.3-1.9-6.9-2.9-10.9-2.9c-5.4,0-10,1.5-13.9,4.5
+ c-3.8,3-6.4,7.1-7.6,12.2v10.6c0.8,4.9,3.1,8.9,7,12c3.8,3.1,8.4,4.7,13.6,4.7C216.9,132.1,220.6,131.1,224,129.2z"/>
+ <path class="st1" d="M389.8,81.4c3.9,3.5,5.9,8.1,6,13.7V142h-14.4v-42c-0.2-3.6-1.3-6.4-3.2-8.4c-1.9-2-4.9-3.1-8.7-3.2
+ c-5.6,0-10.3,2.3-14,6.7c-3.7,4.5-5.5,10.2-5.5,17.2V142h-14.3V78.5h12.9l0.9,12.3c2.2-4.6,5.6-8.2,10.1-10.8
+ c4.5-2.6,9.7-3.9,15.5-3.9C381,76.1,386,77.8,389.8,81.4z"/>
+ <g>
+ <path class="st1" d="M259.6,110c0-19.6,14.9-35,33.9-35c18.6,0,32.7,15.6,32.7,35.7v3.7h-53.4c1.9,11.2,11,19.4,22.8,19.4
+ c6.7,0,12.9-2.1,17.2-6l8.5,8.4c-8,6.1-16.1,8.9-26.2,8.9C275.2,145.1,259.6,129.8,259.6,110z M313.1,104.4
+ c-1.9-10.4-10-18.1-19.8-18.1c-10.2,0-18.4,7.3-20.2,18.1H313.1z"/>
+ </g>
+ </g>
+</g>
</svg>
diff --git a/doc/man1/openssl-pkeyutl.pod.in b/doc/man1/openssl-pkeyutl.pod.in
index b0054ead66f3..cf3427a35c0b 100644
--- a/doc/man1/openssl-pkeyutl.pod.in
+++ b/doc/man1/openssl-pkeyutl.pod.in
@@ -235,9 +235,9 @@ This sets the RSA padding mode. Acceptable values for I<mode> are B<pkcs1> for
PKCS#1 padding, B<none> for no padding, B<oaep>
for B<OAEP> mode, B<x931> for X9.31 mode and B<pss> for PSS.
-In PKCS#1 padding if the message digest is not set then the supplied data is
+In PKCS#1 padding, if the message digest is not set, then the supplied data is
signed or verified directly instead of using a B<DigestInfo> structure. If a
-digest is set then the a B<DigestInfo> structure is used and its the length
+digest is set, then the B<DigestInfo> structure is used and its length
must correspond to the digest type.
For B<oaep> mode only encryption and decryption is supported.
diff --git a/doc/man1/openssl-req.pod.in b/doc/man1/openssl-req.pod.in
index a21c30ba47fe..31fd71418773 100644
--- a/doc/man1/openssl-req.pod.in
+++ b/doc/man1/openssl-req.pod.in
@@ -282,7 +282,7 @@ It is implied by the B<-CA> option.
This option implies the B<-new> flag if B<-in> is not given.
If an existing request is specified with the B<-in> option, it is converted
-to the a certificate; otherwise a request is created from scratch.
+to a certificate; otherwise a request is created from scratch.
Unless specified using the B<-set_serial> option,
a large random number will be used for the serial number.
diff --git a/doc/man3/BIO_f_md.pod b/doc/man3/BIO_f_md.pod
index c2b825e35272..397952f05a10 100644
--- a/doc/man3/BIO_f_md.pod
+++ b/doc/man3/BIO_f_md.pod
@@ -19,7 +19,7 @@ BIO_f_md, BIO_set_md, BIO_get_md, BIO_get_md_ctx - message digest BIO filter
=head1 DESCRIPTION
BIO_f_md() returns the message digest BIO method. This is a filter
-BIO that digests any data passed through it, it is a BIO wrapper
+BIO that digests any data passed through it. It is a BIO wrapper
for the digest routines EVP_DigestInit(), EVP_DigestUpdate()
and EVP_DigestFinal().
@@ -36,8 +36,8 @@ BIO_set_md() sets the message digest of BIO B<b> to B<md>: this
must be called to initialize a digest BIO before any data is
passed through it. It is a BIO_ctrl() macro.
-BIO_get_md() places the a pointer to the digest BIOs digest method
-in B<mdp>, it is a BIO_ctrl() macro.
+BIO_get_md() places a pointer to the digest BIOs digest method
+in B<mdp>. It is a BIO_ctrl() macro.
BIO_get_md_ctx() returns the digest BIOs context into B<mdcp>.
diff --git a/doc/man3/BN_add.pod b/doc/man3/BN_add.pod
index 9561d554318f..35cfdd1495fd 100644
--- a/doc/man3/BN_add.pod
+++ b/doc/man3/BN_add.pod
@@ -114,6 +114,11 @@ temporary variables; see L<BN_CTX_new(3)>.
Unless noted otherwise, the result B<BIGNUM> must be different from
the arguments.
+=head1 NOTES
+
+For modular operations such as BN_nnmod() or BN_mod_exp() it is an error
+to use the same B<BIGNUM> object for the modulus as for the output.
+
=head1 RETURN VALUES
The BN_mod_sqrt() returns the result (possibly incorrect if I<p> is
diff --git a/doc/man3/BN_mod_inverse.pod b/doc/man3/BN_mod_inverse.pod
index 5dbb5c3cc2d6..f88e0e63fafa 100644
--- a/doc/man3/BN_mod_inverse.pod
+++ b/doc/man3/BN_mod_inverse.pod
@@ -18,7 +18,11 @@ places the result in B<r> (C<(a*r)%n==1>). If B<r> is NULL,
a new B<BIGNUM> is created.
B<ctx> is a previously allocated B<BN_CTX> used for temporary
-variables. B<r> may be the same B<BIGNUM> as B<a> or B<n>.
+variables. B<r> may be the same B<BIGNUM> as B<a>.
+
+=head1 NOTES
+
+It is an error to use the same B<BIGNUM> as B<n>.
=head1 RETURN VALUES
diff --git a/doc/man3/CMS_signed_get_attr.pod b/doc/man3/CMS_signed_get_attr.pod
new file mode 100644
index 000000000000..3ed904ef8a25
--- /dev/null
+++ b/doc/man3/CMS_signed_get_attr.pod
@@ -0,0 +1,214 @@
+=pod
+
+=head1 NAME
+
+CMS_signed_get_attr_count,
+CMS_signed_get_attr_by_NID, CMS_signed_get_attr_by_OBJ, CMS_signed_get_attr,
+CMS_signed_delete_attr,
+CMS_signed_add1_attr, CMS_signed_add1_attr_by_OBJ,
+CMS_signed_add1_attr_by_NID, CMS_signed_add1_attr_by_txt,
+CMS_signed_get0_data_by_OBJ,
+CMS_unsigned_get_attr_count,
+CMS_unsigned_get_attr_by_NID, CMS_unsigned_get_attr_by_OBJ,
+CMS_unsigned_get_attr, CMS_unsigned_delete_attr,
+CMS_unsigned_add1_attr, CMS_unsigned_add1_attr_by_OBJ,
+CMS_unsigned_add1_attr_by_NID, CMS_unsigned_add1_attr_by_txt,
+CMS_unsigned_get0_data_by_OBJ
+- CMS signed and unsigned attribute functions
+
+=head1 SYNOPSIS
+
+ #include <openssl/cms.h>
+
+ int CMS_signed_get_attr_count(const CMS_SignerInfo *si);
+ int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid,
+ int lastpos);
+ int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj,
+ int lastpos);
+ X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc);
+ X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc);
+ int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr);
+ int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si,
+ const ASN1_OBJECT *obj, int type,
+ const void *bytes, int len);
+ int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si,
+ int nid, int type,
+ const void *bytes, int len);
+ int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si,
+ const char *attrname, int type,
+ const void *bytes, int len);
+ void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si,
+ const ASN1_OBJECT *oid,
+ int lastpos, int type);
+
+ int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si);
+ int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid,
+ int lastpos);
+ int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si,
+ const ASN1_OBJECT *obj, int lastpos);
+ X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc);
+ X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc);
+ int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr);
+ int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si,
+ const ASN1_OBJECT *obj, int type,
+ const void *bytes, int len);
+ int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si,
+ int nid, int type,
+ const void *bytes, int len);
+ int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si,
+ const char *attrname, int type,
+ const void *bytes, int len);
+ void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid,
+ int lastpos, int type);
+
+=head1 DESCRIPTION
+
+CMS_signerInfo contains separate attribute lists for signed and unsigned
+attributes. Each CMS_signed_XXX() function is used for signed attributes, and
+each CMS_unsigned_XXX() function is used for unsigned attributes.
+Since the CMS_unsigned_XXX() functions work in the same way as the
+CMS_signed_XXX() equivalents, only the CMS_signed_XXX() functions are
+described below.
+
+CMS_signed_get_attr_by_OBJ() finds the location of the first matching object
+I<obj> in the SignerInfo's I<si> signed attribute list. The search starts at the
+position after I<lastpos>. If the returned value is positive then it can be used
+on the next call to CMS_signed_get_attr_by_OBJ() as the value of I<lastpos> in
+order to iterate through the remaining attributes. I<lastpos> can be set to any
+negative value on the first call, in order to start searching from the start of
+the signed attribute list.
+
+CMS_signed_get_attr_by_NID() is similar to CMS_signed_get_attr_by_OBJ() except
+that it passes the numerical identifier (NID) I<nid> associated with the object.
+See <openssl/obj_mac.h> for a list of NID_*.
+
+CMS_signed_get_attr() returns the B<X509_ATTRIBUTE> object at index I<loc> in the
+I<si> signed attribute list. I<loc> should be in the range from 0 to
+CMS_signed_get_attr_count() - 1.
+
+CMS_signed_delete_attr() removes the B<X509_ATTRIBUTE> object at index I<loc> in
+the I<si> signed attribute list. An error occurs if the I<si> attribute list
+is NULL.
+
+CMS_signed_add1_attr() pushes a copy of the passed in B<X509_ATTRIBUTE> object
+to the I<si> signed attribute list. A new signed attribute list is created if
+required. An error occurs if I<attr> is NULL.
+
+CMS_signed_add1_attr_by_OBJ() creates a new signed B<X509_ATTRIBUTE> using
+X509_ATTRIBUTE_set1_object() and X509_ATTRIBUTE_set1_data() to assign a new
+I<obj> with type I<type> and data I<bytes> of length I<len> and then pushes it
+to the I<key> object's attribute list.
+
+CMS_signed_add1_attr_by_NID() is similar to CMS_signed_add1_attr_by_OBJ() except
+that it passes the numerical identifier (NID) I<nid> associated with the object.
+See <openssl/obj_mac.h> for a list of NID_*.
+
+CMS_signed_add1_attr_by_txt() is similar to CMS_signed_add1_attr_by_OBJ()
+except that it passes a name I<attrname> associated with the object.
+See <openssl/obj_mac.h> for a list of SN_* names.
+
+CMS_signed_get0_data_by_OBJ() finds the first attribute in a I<si> signed
+attributes list that matches the I<obj> starting at index I<lastpos>
+and returns the data retrieved from the found attributes first B<ASN1_TYPE>
+object. An error will occur if the attribute type I<type> does not match the
+type of the B<ASN1_TYPE> object OR if I<type> is either B<V_ASN1_BOOLEAN> or
+B<V_ASN1_NULL> OR the attribute is not found.
+If I<lastpos> is less than -1 then an error will occur if there are multiple
+objects in the signed attribute list that match I<obj>.
+If I<lastpos> is less than -2 then an error will occur if there is more than
+one B<ASN1_TYPE> object in the found signed attribute.
+
+Refer to L<X509_ATTRIBUTE(3)> for information related to attributes.
+
+=head1 RETURN VALUES
+
+The CMS_unsigned_XXX() functions return values are similar to those of the
+equivalent CMS_signed_XXX() functions.
+
+CMS_signed_get_attr_count() returns the number of signed attributes in the
+SignerInfo I<si>, or -1 if the signed attribute list is NULL.
+
+CMS_signed_get_attr_by_OBJ() returns -1 if either the signed attribute list of
+I<si> is empty OR if I<obj> is not found, otherwise it returns the location of
+the I<obj> in the SignerInfo's I<si> signed attribute list.
+
+CMS_signed_get_attr_by_NID() is similar to CMS_signed_get_attr_by_OBJ() except
+that it returns -2 if the I<nid> is not known by OpenSSL.
+
+CMS_signed_get_attr() returns either a signed B<X509_ATTRIBUTE> or NULL on error.
+
+CMS_signed_delete_attr() returns either the removed signed B<X509_ATTRIBUTE> or
+NULL if there is a error.
+
+CMS_signed_add1_attr(), CMS_signed_add1_attr_by_OBJ(),
+CMS_signed_add1_attr_by_NID(), CMS_signed_add1_attr_by_txt(),
+return 1 on success or 0 on error.
+
+CMS_signed_get0_data_by_OBJ() returns the data retrieved from the found
+signed attributes first B<ASN1_TYPE> object, or NULL if an error occurs.
+
+=head1 NOTES
+
+Some attributes are added automatically during the signing process.
+
+Calling CMS_SignerInfo_sign() adds the NID_pkcs9_signingTime signed
+attribute.
+
+Calling CMS_final(), CMS_final_digest() or CMS_dataFinal() adds the
+NID_pkcs9_messageDigest signed attribute.
+
+The NID_pkcs9_contentType signed attribute is always added if the
+NID_pkcs9_signingTime attribute is added.
+
+Calling CMS_sign_ex(), CMS_sign_receipt() or CMS_add1_signer() may add
+attributes depending on the flags parameter. See L<CMS_add1_signer(3)> for
+more information.
+
+OpenSSL applies special rules for the following attribute NIDs:
+
+=over 4
+
+=item CMS Signed Attributes
+
+NID_pkcs9_contentType
+NID_pkcs9_messageDigest
+NID_pkcs9_signingTime
+
+=item ESS Signed Attributes
+
+NID_id_smime_aa_signingCertificate
+NID_id_smime_aa_signingCertificateV2
+NID_id_smime_aa_receiptRequest
+
+=item CMS Unsigned Attributes
+
+NID_pkcs9_countersignature
+
+=back
+
+CMS_signed_add1_attr(), CMS_signed_add1_attr_by_OBJ(),
+CMS_signed_add1_attr_by_NID(), CMS_signed_add1_attr_by_txt()
+and the equivalent CMS_unsigned_add1_attrXXX() functions allow
+duplicate attributes to be added. The attribute rules are not checked
+during these function calls, and are deferred until the sign or verify process
+(i.e. during calls to any of CMS_sign_ex(), CMS_sign(), CMS_sign_receipt(),
+CMS_add1_signer(), CMS_Final(), CMS_dataFinal(), CMS_final_digest(),
+CMS_verify(), CMS_verify_receipt() or CMS_SignedData_verify()).
+
+For CMS attribute rules see RFC 5652 Section 11.
+For ESS attribute rules see RFC 2634 Section 1.3.4 and RFC 5035 Section 5.4.
+
+=head1 SEE ALSO
+
+L<X509_ATTRIBUTE(3)>
+
+=head1 COPYRIGHT
+
+Copyright 2023-2024 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/EVP_EncryptInit.pod b/doc/man3/EVP_EncryptInit.pod
index 886cbdfbd3f5..12d7153d0fd4 100644
--- a/doc/man3/EVP_EncryptInit.pod
+++ b/doc/man3/EVP_EncryptInit.pod
@@ -359,7 +359,12 @@ exists.
=item EVP_EncryptUpdate()
Encrypts I<inl> bytes from the buffer I<in> and writes the encrypted version to
-I<out>. This function can be called multiple times to encrypt successive blocks
+I<out>. The pointers I<out> and I<in> may point to the same location, in which
+case the encryption will be done in-place. If I<out> and I<in> point to different
+locations, the two buffers must be disjoint, otherwise the operation might fail
+or the outcome might be undefined.
+
+This function can be called multiple times to encrypt successive blocks
of data. The amount of data written depends on the block alignment of the
encrypted data.
For most ciphers and modes, the amount of data written can be anything
@@ -368,10 +373,9 @@ For wrap cipher modes, the amount of data written can be anything
from zero bytes to (inl + cipher_block_size) bytes.
For stream ciphers, the amount of data written can be anything from zero
bytes to inl bytes.
-Thus, I<out> should contain sufficient room for the operation being performed.
-The actual number of bytes written is placed in I<outl>. It also
-checks if I<in> and I<out> are partially overlapping, and if they are
-0 is returned to indicate failure.
+Thus, the buffer pointed to by I<out> must contain sufficient room for the
+operation being performed.
+The actual number of bytes written is placed in I<outl>.
If padding is enabled (the default) then EVP_EncryptFinal_ex() encrypts
the "final" data, that is any data that remains in a partial block.
diff --git a/doc/man3/EVP_MAC.pod b/doc/man3/EVP_MAC.pod
index 56ac92a48672..d1281dfcbd03 100644
--- a/doc/man3/EVP_MAC.pod
+++ b/doc/man3/EVP_MAC.pod
@@ -145,6 +145,9 @@ the key. If I<key> is NULL, the key must be set via I<params> either
as part of this call or separately using EVP_MAC_CTX_set_params().
Providing non-NULL I<params> to this function is equivalent to calling
EVP_MAC_CTX_set_params() with those I<params> for the same I<ctx> beforehand.
+Note: There are additional requirements for some MAC algorithms during
+re-initalization (i.e. calling EVP_MAC_init() on an EVP_MAC after EVP_MAC_final()
+has been called on the same object). See the NOTES section below.
EVP_MAC_init() should be called before EVP_MAC_update() and EVP_MAC_final().
@@ -342,6 +345,13 @@ not be considered a breaking change to the API.
The usage of the parameter names "custom", "iv" and "salt" correspond to
the names used in the standard where the algorithm was defined.
+Some MAC algorithms store internal state that cannot be extracted during
+re-initalization. For example GMAC cannot extract an B<IV> from the
+underlying CIPHER context, and so calling EVP_MAC_init() on an EVP_MAC object
+after EVP_MAC_final() has been called cannot reset its cipher state to what it
+was when the B<IV> was initially generated. For such instances, an
+B<OSSL_MAC_PARAM_IV> parameter must be passed with each call to EVP_MAC_init().
+
=head1 RETURN VALUES
EVP_MAC_fetch() returns a pointer to a newly fetched B<EVP_MAC>, or
@@ -481,7 +491,7 @@ These functions were added in OpenSSL 3.0.
=head1 COPYRIGHT
-Copyright 2018-2023 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2018-2024 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
diff --git a/doc/man3/EVP_PKEY_get_attr.pod b/doc/man3/EVP_PKEY_get_attr.pod
new file mode 100644
index 000000000000..30477b874801
--- /dev/null
+++ b/doc/man3/EVP_PKEY_get_attr.pod
@@ -0,0 +1,113 @@
+=pod
+
+=head1 NAME
+
+EVP_PKEY_get_attr,
+EVP_PKEY_get_attr_count,
+EVP_PKEY_get_attr_by_NID, EVP_PKEY_get_attr_by_OBJ,
+EVP_PKEY_delete_attr,
+EVP_PKEY_add1_attr,
+EVP_PKEY_add1_attr_by_OBJ, EVP_PKEY_add1_attr_by_NID, EVP_PKEY_add1_attr_by_txt
+- EVP_PKEY B<X509_ATTRIBUTE> functions
+
+=head1 SYNOPSIS
+
+ #include <openssl/x509.h>
+
+ int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
+ int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);
+ int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj,
+ int lastpos);
+ X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
+ X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
+ int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
+ int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
+ const ASN1_OBJECT *obj, int type,
+ const unsigned char *bytes, int len);
+ int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
+ int nid, int type,
+ const unsigned char *bytes, int len);
+ int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
+ const char *attrname, int type,
+ const unsigned char *bytes, int len);
+
+=head1 DESCRIPTION
+
+These functions are used by B<PKCS12>.
+
+EVP_PKEY_get_attr_by_OBJ() finds the location of the first matching object I<obj>
+in the I<key> attribute list. The search starts at the position after I<lastpos>.
+If the returned value is positive then it can be used on the next call to
+EVP_PKEY_get_attr_by_OBJ() as the value of I<lastpos> in order to iterate through
+the remaining attributes. I<lastpos> can be set to any negative value on the
+first call, in order to start searching from the start of the attribute list.
+
+EVP_PKEY_get_attr_by_NID() is similar to EVP_PKEY_get_attr_by_OBJ() except that
+it passes the numerical identifier (NID) I<nid> associated with the object.
+See <openssl/obj_mac.h> for a list of NID_*.
+
+EVP_PKEY_get_attr() returns the B<X509_ATTRIBUTE> object at index I<loc> in the
+I<key> attribute list. I<loc> should be in the range from 0 to
+EVP_PKEY_get_attr_count() - 1.
+
+EVP_PKEY_delete_attr() removes the B<X509_ATTRIBUTE> object at index I<loc> in
+the I<key> attribute list.
+
+EVP_PKEY_add1_attr() pushes a copy of the passed in B<X509_ATTRIBUTE> object
+to the I<key> attribute list. A new I<key> attribute list is created if required.
+An error occurs if either I<attr> is NULL, or the attribute already exists.
+
+EVP_PKEY_add1_attr_by_OBJ() creates a new B<X509_ATTRIBUTE> using
+X509_ATTRIBUTE_set1_object() and X509_ATTRIBUTE_set1_data() to assign a new
+I<obj> with type I<type> and data I<bytes> of length I<len> and then pushes it
+to the I<key> object's attribute list. If I<obj> already exists in the attribute
+list then an error occurs.
+
+EVP_PKEY_add1_attr_by_NID() is similar to EVP_PKEY_add1_attr_by_OBJ() except
+that it passes the numerical identifier (NID) I<nid> associated with the object.
+See <openssl/obj_mac.h> for a list of NID_*.
+
+EVP_PKEY_add1_attr_by_txt() is similar to EVP_PKEY_add1_attr_by_OBJ() except
+that it passes a name I<attrname> associated with the object.
+See <openssl/obj_mac.h> for a list of SN_* names.
+
+=head1 RETURN VALUES
+
+EVP_PKEY_get_attr_count() returns the number of attributes in the I<key> object
+attribute list or -1 if the attribute list is NULL.
+
+EVP_PKEY_get_attr_by_OBJ() returns -1 if either the list is empty OR the object
+is not found, otherwise it returns the location of the object in the list.
+
+EVP_PKEY_get_attr_by_NID() is similar to EVP_PKEY_get_attr_by_OBJ(), except that
+it returns -2 if the I<nid> is not known by OpenSSL.
+
+EVP_PKEY_get_attr() returns either a B<X509_ATTRIBUTE> or NULL if there is a
+error.
+
+EVP_PKEY_delete_attr() returns either the removed B<X509_ATTRIBUTE> or NULL if
+there is a error.
+
+EVP_PKEY_add1_attr(), EVP_PKEY_add1_attr_by_OBJ(), EVP_PKEY_add1_attr_by_NID()
+and EVP_PKEY_add1_attr_by_txt() return 1 on success or 0 otherwise.
+
+=head1 NOTES
+
+A B<EVP_PKEY> object's attribute list is initially NULL. All the above functions
+listed will return an error unless EVP_PKEY_add1_attr() is called.
+All functions listed assume that the I<key> is not NULL.
+
+=head1 SEE ALSO
+
+L<X509_ATTRIBUTE(3)>
+
+=head1 COPYRIGHT
+
+Copyright 2023-2024 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/OPENSSL_LH_COMPFUNC.pod b/doc/man3/OPENSSL_LH_COMPFUNC.pod
index d3bb272c4a94..688ef0edcb91 100644
--- a/doc/man3/OPENSSL_LH_COMPFUNC.pod
+++ b/doc/man3/OPENSSL_LH_COMPFUNC.pod
@@ -8,10 +8,12 @@ LHASH_DOALL_ARG_FN_TYPE,
IMPLEMENT_LHASH_HASH_FN, IMPLEMENT_LHASH_COMP_FN,
lh_TYPE_new, lh_TYPE_free, lh_TYPE_flush,
lh_TYPE_insert, lh_TYPE_delete, lh_TYPE_retrieve,
-lh_TYPE_doall, lh_TYPE_doall_arg, lh_TYPE_error,
+lh_TYPE_doall, lh_TYPE_doall_arg, lh_TYPE_num_items, lh_TYPE_get_down_load,
+lh_TYPE_set_down_load, lh_TYPE_error,
OPENSSL_LH_new, OPENSSL_LH_free, OPENSSL_LH_flush,
OPENSSL_LH_insert, OPENSSL_LH_delete, OPENSSL_LH_retrieve,
-OPENSSL_LH_doall, OPENSSL_LH_doall_arg, OPENSSL_LH_error
+OPENSSL_LH_doall, OPENSSL_LH_doall_arg, OPENSSL_LH_num_items,
+OPENSSL_LH_get_down_load, OPENSSL_LH_set_down_load, OPENSSL_LH_error
- dynamic hash table
=head1 SYNOPSIS
@@ -34,6 +36,10 @@ OPENSSL_LH_doall, OPENSSL_LH_doall_arg, OPENSSL_LH_error
void lh_TYPE_doall_arg(LHASH_OF(TYPE) *table, OPENSSL_LH_DOALL_FUNCARG func,
TYPE *arg);
+ unsigned long lh_TYPE_num_items(OPENSSL_LHASH *lh);
+ unsigned long lh_TYPE_get_down_load(OPENSSL_LHASH *lh);
+ void lh_TYPE_set_down_load(OPENSSL_LHASH *lh, unsigned long dl);
+
int lh_TYPE_error(LHASH_OF(TYPE) *table);
typedef int (*OPENSSL_LH_COMPFUNC)(const void *, const void *);
@@ -52,8 +58,14 @@ OPENSSL_LH_doall, OPENSSL_LH_doall_arg, OPENSSL_LH_error
void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func);
void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg);
+ unsigned long OPENSSL_LH_num_items(OPENSSL_LHASH *lh);
+ unsigned long OPENSSL_LH_get_down_load(OPENSSL_LHASH *lh);
+ void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long dl);
+
int OPENSSL_LH_error(OPENSSL_LHASH *lh);
+ #define LH_LOAD_MULT /* integer constant */
+
=head1 DESCRIPTION
This library implements type-checked dynamic hash tables. The hash
@@ -145,15 +157,6 @@ For example:
/* Then the hash table itself can be deallocated */
lh_TYPE_free(hashtable);
-When doing this, be careful if you delete entries from the hash table
-in your callbacks: the table may decrease in size, moving the item
-that you are currently on down lower in the hash table - this could
-cause some entries to be skipped during the iteration. The second
-best solution to this problem is to set hash-E<gt>down_load=0 before
-you start (which will stop the hash table ever decreasing in size).
-The best solution is probably to avoid deleting items from the hash
-table inside a "doall" callback!
-
B<lh_I<TYPE>_doall_arg>() is the same as B<lh_I<TYPE>_doall>() except that
I<func> will be called with I<arg> as the second argument and I<func>
should be of type B<LHASH_DOALL_ARG_FN>(B<I<TYPE>>) (a callback prototype
@@ -175,21 +178,47 @@ that is provided by the caller):
lh_TYPE_doall_arg(hashtable, LHASH_DOALL_ARG_FN(TYPE_print), BIO,
logging_bio);
+Note that it is by default B<not> safe to use B<lh_I<TYPE>_delete>() inside a
+callback passed to B<lh_I<TYPE>_doall>() or B<lh_I<TYPE>_doall_arg>(). The
+reason for this is that deleting an item from the hash table may result in the
+hash table being contracted to a smaller size and rehashed.
+B<lh_I<TYPE>_doall>() and B<lh_I<TYPE>_doall_arg>() are unsafe and will exhibit
+undefined behaviour under these conditions, as these functions assume the hash
+table size and bucket pointers do not change during the call.
+
+If it is desired to use B<lh_I<TYPE>_doall>() or B<lh_I<TYPE>_doall_arg>() with
+B<lh_I<TYPE>_delete>(), it is essential that you call
+B<lh_I<TYPE>_set_down_load>() with a I<down_load> argument of 0 first. This
+disables hash table contraction and guarantees that it will be safe to delete
+items from a hash table during a call to B<lh_I<TYPE>_doall>() or
+B<lh_I<TYPE>_doall_arg>().
+
+It is never safe to call B<lh_I<TYPE>_insert>() during a call to
+B<lh_I<TYPE>_doall>() or B<lh_I<TYPE>_doall_arg>().
B<lh_I<TYPE>_error>() can be used to determine if an error occurred in the last
operation.
+B<lh_I<TYPE>_num_items>() returns the number of items in the hash table.
+
+B<lh_I<TYPE>_get_down_load>() and B<lh_I<TYPE>_set_down_load>() get and set the
+factor used to determine when the hash table is contracted. The factor is the
+load factor at or below which hash table contraction will occur, multiplied by
+B<LH_LOAD_MULT>, where the load factor is the number of items divided by the
+number of nodes. Setting this value to 0 disables hash table contraction.
+
OPENSSL_LH_new() is the same as the B<lh_I<TYPE>_new>() except that it is not
type specific. So instead of returning an B<LHASH_OF(I<TYPE>)> value it returns
a B<void *>. In the same way the functions OPENSSL_LH_free(),
OPENSSL_LH_flush(), OPENSSL_LH_insert(), OPENSSL_LH_delete(),
-OPENSSL_LH_retrieve(), OPENSSL_LH_doall(), OPENSSL_LH_doall_arg(), and
-OPENSSL_LH_error() are equivalent to the similarly named B<lh_I<TYPE>> functions
-except that they return or use a B<void *> where the equivalent B<lh_I<TYPE>>
-function returns or uses a B<I<TYPE> *> or B<LHASH_OF(I<TYPE>) *>. B<lh_I<TYPE>>
-functions are implemented as type checked wrappers around the B<OPENSSL_LH>
-functions. Most applications should not call the B<OPENSSL_LH> functions
-directly.
+OPENSSL_LH_retrieve(), OPENSSL_LH_doall(), OPENSSL_LH_doall_arg(),
+OPENSSL_LH_num_items(), OPENSSL_LH_get_down_load(), OPENSSL_LH_set_down_load()
+and OPENSSL_LH_error() are equivalent to the similarly named B<lh_I<TYPE>>
+functions except that they return or use a B<void *> where the equivalent
+B<lh_I<TYPE>> function returns or uses a B<I<TYPE> *> or B<LHASH_OF(I<TYPE>) *>.
+B<lh_I<TYPE>> functions are implemented as type checked wrappers around the
+B<OPENSSL_LH> functions. Most applications should not call the B<OPENSSL_LH>
+functions directly.
=head1 RETURN VALUES
diff --git a/doc/man3/OSSL_PARAM_int.pod b/doc/man3/OSSL_PARAM_int.pod
index d357818ff14b..105fe3241f87 100644
--- a/doc/man3/OSSL_PARAM_int.pod
+++ b/doc/man3/OSSL_PARAM_int.pod
@@ -112,7 +112,7 @@ OSSL_PARAM_UNMODIFIED, OSSL_PARAM_modified, OSSL_PARAM_set_all_unmodified
A collection of utility functions that simplify and add type safety to the
L<OSSL_PARAM(3)> arrays. The following B<I<TYPE>> names are supported:
-=over 1
+=over 2
=item *
diff --git a/doc/man3/PKCS12_create.pod b/doc/man3/PKCS12_create.pod
index 92e588062a36..7048f1318576 100644
--- a/doc/man3/PKCS12_create.pod
+++ b/doc/man3/PKCS12_create.pod
@@ -57,9 +57,15 @@ export grade software which could use signing only keys of arbitrary size but
had restrictions on the permissible sizes of keys which could be used for
encryption.
-If a certificate contains an I<alias> or I<keyid> then this will be
-used for the corresponding B<friendlyName> or B<localKeyID> in the
-PKCS12 structure.
+If I<name> is B<NULL> and I<cert> contains an I<alias> then this will be
+used for the corresponding B<friendlyName> in the PKCS12 structure instead.
+Similarly, if I<pkey> is NULL and I<cert> contains a I<keyid> then this will be
+used for the corresponding B<localKeyID> in the PKCS12 structure instead of the
+id calculated from the I<pkey>.
+
+For all certificates in I<ca> then if a certificate contains an I<alias> or
+I<keyid> then this will be used for the corresponding B<friendlyName> or
+B<localKeyID> in the PKCS12 structure.
Either I<pkey>, I<cert> or both can be B<NULL> to indicate that no key or
certificate is required. In previous versions both had to be present or
@@ -101,7 +107,7 @@ standards.
=head1 COPYRIGHT
-Copyright 2002-2023 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2002-2024 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
diff --git a/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod b/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod
index 5d178bb8e4de..f289383c7815 100644
--- a/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod
+++ b/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod
@@ -42,8 +42,8 @@ ticket construction state according to RFC5077 Section 4 such that per session
state is unnecessary and a small set of cryptographic variables needs to be
maintained by the callback function implementation.
-In order to reuse a session, a TLS client must send the a session ticket
-extension to the server. The client can only send exactly one session ticket.
+In order to reuse a session, a TLS client must send the session ticket
+extension to the server. The client must send exactly one session ticket.
The server, through the callback function, either agrees to reuse the session
ticket information or it starts a full TLS handshake to create a new session
ticket.
diff --git a/doc/man3/SSL_CTX_set_tmp_dh_callback.pod b/doc/man3/SSL_CTX_set_tmp_dh_callback.pod
index 0c6694d4c6a7..4799ada6844b 100644
--- a/doc/man3/SSL_CTX_set_tmp_dh_callback.pod
+++ b/doc/man3/SSL_CTX_set_tmp_dh_callback.pod
@@ -55,7 +55,7 @@ As generating DH parameters is extremely time consuming, an application
should not generate the parameters on the fly. DH parameters can be reused, as
the actual key is newly generated during the negotiation.
-Typically applications should use well know DH parameters that have built-in
+Typically applications should use well known DH parameters that have built-in
support in OpenSSL. The macros SSL_CTX_set_dh_auto() and SSL_set_dh_auto()
configure OpenSSL to use the default built-in DH parameters for the B<SSL_CTX>
and B<SSL> objects respectively. Passing a value of 1 in the I<onoff> parameter
diff --git a/doc/man3/SSL_get_error.pod b/doc/man3/SSL_get_error.pod
index a90b22d98474..e5a507217ed4 100644
--- a/doc/man3/SSL_get_error.pod
+++ b/doc/man3/SSL_get_error.pod
@@ -32,7 +32,9 @@ Some TLS implementations do not send a close_notify alert on shutdown.
On an unexpected EOF, versions before OpenSSL 3.0 returned
B<SSL_ERROR_SYSCALL>, nothing was added to the error stack, and errno was 0.
Since OpenSSL 3.0 the returned error is B<SSL_ERROR_SSL> with a meaningful
-error on the error stack.
+error on the error stack (SSL_R_UNEXPECTED_EOF_WHILE_READING). This error reason
+code may be used for control flow decisions (see the man page for
+L<ERR_GET_REASON(3)> for further details on this).
=head1 RETURN VALUES
@@ -180,7 +182,7 @@ The SSL_ERROR_WANT_CLIENT_HELLO_CB error code was added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2024 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
diff --git a/doc/man3/SSL_get_peer_certificate.pod b/doc/man3/SSL_get_peer_certificate.pod
index b695edc689fa..1897a43ebe7a 100644
--- a/doc/man3/SSL_get_peer_certificate.pod
+++ b/doc/man3/SSL_get_peer_certificate.pod
@@ -10,10 +10,15 @@ SSL_get1_peer_certificate - get the X509 certificate of the peer
#include <openssl/ssl.h>
- X509 *SSL_get_peer_certificate(const SSL *ssl);
X509 *SSL_get0_peer_certificate(const SSL *ssl);
X509 *SSL_get1_peer_certificate(const SSL *ssl);
+The following function has been deprecated since OpenSSL 3.0,
+and can be hidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable
+version value, see L<openssl_user_macros(7)>:
+
+ X509 *SSL_get_peer_certificate(const SSL *ssl);
+
=head1 DESCRIPTION
These functions return a pointer to the X509 certificate the
@@ -69,7 +74,7 @@ SSL_get_peer_certificate() was deprecated in 3.0.0.
=head1 COPYRIGHT
-Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2024 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
diff --git a/doc/man3/X509_ATTRIBUTE.pod b/doc/man3/X509_ATTRIBUTE.pod
new file mode 100644
index 000000000000..f2f7597d0bf8
--- /dev/null
+++ b/doc/man3/X509_ATTRIBUTE.pod
@@ -0,0 +1,263 @@
+=pod
+
+=head1 NAME
+
+X509_ATTRIBUTE, X509at_get_attr,
+X509at_get_attr_count, X509at_get_attr_by_NID, X509at_get_attr_by_OBJ,
+X509at_delete_attr,
+X509at_add1_attr,
+X509at_add1_attr_by_OBJ, X509at_add1_attr_by_NID, X509at_add1_attr_by_txt,
+X509at_get0_data_by_OBJ,
+X509_ATTRIBUTE_create, X509_ATTRIBUTE_create_by_NID,
+X509_ATTRIBUTE_create_by_OBJ, X509_ATTRIBUTE_create_by_txt,
+X509_ATTRIBUTE_set1_object, X509_ATTRIBUTE_set1_data,
+X509_ATTRIBUTE_count,
+X509_ATTRIBUTE_get0_data, X509_ATTRIBUTE_get0_object, X509_ATTRIBUTE_get0_type
+- X509 attribute functions
+
+=head1 SYNOPSIS
+
+ #include <openssl/x509.h>
+
+ typedef struct x509_attributes_st X509_ATTRIBUTE;
+
+ int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
+ int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
+ int lastpos);
+ int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,
+ const ASN1_OBJECT *obj, int lastpos);
+ X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
+ X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
+ STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
+ X509_ATTRIBUTE *attr);
+ STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
+ **x, const ASN1_OBJECT *obj,
+ int type,
+ const unsigned char *bytes,
+ int len);
+ STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
+ **x, int nid, int type,
+ const unsigned char *bytes,
+ int len);
+ STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)
+ **x, const char *attrname,
+ int type,
+ const unsigned char *bytes,
+ int len);
+ void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x,
+ const ASN1_OBJECT *obj, int lastpos, int type);
+ X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);
+ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
+ int atrtype, const void *data,
+ int len);
+ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
+ const ASN1_OBJECT *obj,
+ int atrtype, const void *data,
+ int len);
+ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
+ const char *atrname, int type,
+ const unsigned char *bytes,
+ int len);
+ int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
+ int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
+ const void *data, int len);
+ void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,
+ void *data);
+ int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr);
+ ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
+ ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);
+
+=head1 DESCRIPTION
+
+B<X509_ATTRIBUTE> objects are used by many standards including X509, X509_REQ,
+PKCS12, PKCS8, PKCS7 and CMS.
+
+The B<X509_ATTRIBUTE> object is used to represent the ASN.1 Attribute as defined
+in RFC 5280, i.e.
+
+ Attribute ::= SEQUENCE {
+ type AttributeType,
+ values SET OF AttributeValue }
+
+ AttributeType ::= OBJECT IDENTIFIER
+ AttributeValue ::= ANY -- DEFINED BY AttributeType
+
+For example CMS defines the signing-time attribute as:
+
+ id-signingTime OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+ us(840) rsadsi(113549) pkcs(1) pkcs9(9) 5 }
+
+ SigningTime ::= Time
+
+ Time ::= CHOICE {
+ utcTime UTCTime,
+ generalizedTime GeneralizedTime }
+
+In OpenSSL B<AttributeType> maps to an B<ASN1_OBJECT> object
+and B<AttributeValue> maps to a list of B<ASN1_TYPE> objects.
+
+The following functions are used for B<X509_ATTRIBUTE> objects.
+
+X509at_get_attr_by_OBJ() finds the location of the first matching object I<obj>
+in a list of attributes I<sk>. The search starts at the position after I<lastpos>.
+If the returned value is positive then it can be used on the next call to
+X509at_get_attr_by_OBJ() as the value of I<lastpos> in order to iterate through
+the remaining attributes. I<lastpos> can be set to any negative value on the
+first call, in order to start searching from the start of the list.
+
+X509at_get_attr_by_NID() is similar to X509at_get_attr_by_OBJ() except that it
+passes the numerical identifier (NID) I<nid> associated with the object.
+See <openssl/obj_mac.h> for a list of NID_*.
+
+X509at_get_attr() returns the B<X509_ATTRIBUTE> object at index I<loc> in the
+list of attributes I<x>. I<loc> should be in the range from 0 to
+X509at_get_attr_count() - 1.
+
+X509at_delete_attr() removes the B<X509_ATTRIBUTE> object at index I<loc> in
+the list of attributes I<x>.
+
+X509at_add1_attr() pushes a copy of the passed in B<X509_ATTRIBUTE> object
+to the list I<x>.
+Both I<x> and I<attr> must be non NULL or an error will occur.
+If I<*x> is NULL then a new list is created, otherwise it uses the
+passed in list. An error will occur if an existing attribute (with the same
+attribute type) already exists in the attribute list.
+
+X509at_add1_attr_by_OBJ() creates a new B<X509_ATTRIBUTE> using
+X509_ATTRIBUTE_set1_object() and X509_ATTRIBUTE_set1_data() to assign a new
+I<obj> with type I<type> and data I<bytes> of length I<len> and then pushes it
+to the attribute list I<x>. Both I<x> and I<attr> must be non NULL or an error
+will occur. If I<*x> is NULL then a new attribute list is created. If I<obj>
+already exists in the attribute list then an error occurs.
+
+X509at_add1_attr_by_NID() is similar to X509at_add1_attr_by_OBJ() except that it
+passes the numerical identifier (NID) I<nid> associated with the object.
+See <openssl/obj_mac.h> for a list of NID_*.
+
+X509at_add1_attr_by_txt() is similar to X509at_add1_attr_by_OBJ() except that it
+passes a name I<attrname> associated with the object.
+See <openssl/obj_mac.h> for a list of SN_* names.
+
+X509_ATTRIBUTE_set1_object() assigns a B<ASN1_OBJECT> I<obj>
+to the attribute I<attr>. If I<attr> contained an existing B<ASN1_OBJECT> then
+it is freed. An error occurs if either I<attr> or I<obj> are NULL, or if
+the passed in I<obj> cannot be duplicated.
+
+X509_ATTRIBUTE_set1_data() pushes a new B<ASN1_TYPE> object onto the I<attr>
+attributes list. The new object is assigned a copy of the data in I<data> of
+size I<len>.
+If I<attrtype> has flag I<MBSTRING_FLAG> set then a table lookup using the
+I<attr> attributes NID is used to set an B<ASN1_STRING> using
+ASN1_STRING_set_by_NID(), and the passed in I<data> must be in the format
+required for that object type or an error will occur.
+If I<len> is not -1 then internally ASN1_STRING_type_new() is
+used with the passed in I<attrtype>.
+If I<attrtype> is 0 the call does nothing except return 1.
+
+X509_ATTRIBUTE_create() creates a new B<X509_ATTRIBUTE> using the I<nid>
+to set the B<ASN1_OBJECT> OID and the I<atrtype> and I<value> to set the
+B<ASN1_TYPE>.
+
+X509_ATTRIBUTE_create_by_OBJ() uses X509_ATTRIBUTE_set1_object() and
+X509_ATTRIBUTE_set1_data() to assign a new I<obj> with type I<atrtype> and
+data I<data> of length I<len>. If the passed in attribute I<attr> OR I<*attr> is
+NULL then a new B<X509_ATTRIBUTE> will be returned, otherwise the passed in
+B<X509_ATTRIBUTE> is used. Note that the ASN1_OBJECT I<obj> is pushed onto the
+attributes existing list of objects, which could be an issue if the attributes
+<ASN1_OBJECT> was different.
+
+X509_ATTRIBUTE_create_by_NID() is similar to X509_ATTRIBUTE_create_by_OBJ()
+except that it passes the numerical identifier (NID) I<nid> associated with the
+object. See <openssl/obj_mac.h> for a list of NID_*.
+
+X509_ATTRIBUTE_create_by_txt() is similar to X509_ATTRIBUTE_create_by_OBJ()
+except that it passes a name I<atrname> associated with the
+object. See <openssl/obj_mac.h> for a list of SN_* names.
+
+X509_ATTRIBUTE_count() returns the number of B<ASN1_TYPE> objects in an
+attribute I<attr>.
+
+X509_ATTRIBUTE_get0_type() returns the B<ASN1_TYPE> object at index I<idx> in
+the attribute list I<attr>. I<idx> should be in the
+range of 0 to X509_ATTRIBUTE_count() - 1 or an error will occur.
+
+X509_ATTRIBUTE_get0_data() returns the data of an B<ASN1_TYPE> object at
+index I<idx> in the attribute I<attr>. I<data> is unused and can be set to NULL.
+An error will occur if the attribute type I<atrtype> does not match the type of
+the B<ASN1_TYPE> object at index I<idx> OR if I<atrtype> is either
+B<V_ASN1_BOOLEAN> or B<V_ASN1_NULL> OR if the I<idx> is not in the
+range 0 to X509_ATTRIBUTE_count() - 1.
+
+X509at_get0_data_by_OBJ() finds the first attribute in an attribute list I<x>
+that matches the I<obj> starting at index I<lastpos> and returns the data
+retrieved from the found attributes first B<ASN1_TYPE> object. An error will
+occur if the attribute type I<type> does not match the type of the B<ASN1_TYPE>
+object OR if I<type> is either B<V_ASN1_BOOLEAN> or B<V_ASN1_NULL> OR the
+attribute is not found.
+If I<lastpos> is less than -1 then an error will occur if there are multiple
+objects in the list I<x> that match I<obj>.
+If I<lastpos> is less than -2 then an error will occur if there is more than
+one B<ASN1_TYPE> object in the found attribute.
+
+=head1 RETURN VALUES
+
+X509at_get_attr_count() returns the number of attributes in the list I<x> or -1
+if I<x> is NULL.
+
+X509at_get_attr_by_OBJ() returns -1 if either the list is empty OR the object
+is not found, otherwise it returns the location of the object in the list.
+
+X509at_get_attr_by_NID() is similar to X509at_get_attr_by_OBJ(), except that
+it returns -2 if the I<nid> is not known by OpenSSL.
+
+X509at_get_attr() returns either an B<X509_ATTRIBUTE> or NULL if there is a error.
+
+X509at_delete_attr() returns either the removed B<X509_ATTRIBUTE> or NULL if
+there is a error.
+
+X509_ATTRIBUTE_count() returns -1 on error, otherwise it returns the number
+of B<ASN1_TYPE> elements.
+
+X509_ATTRIBUTE_get0_type() returns NULL on error, otherwise it returns a
+B<ASN1_TYPE> object.
+
+X509_ATTRIBUTE_get0_data() returns NULL if an error occurs,
+otherwise it returns the data associated with an B<ASN1_TYPE> object.
+
+X509_ATTRIBUTE_set1_object() and X509_ATTRIBUTE_set1_data() returns 1 on
+success, or 0 otherwise.
+
+X509_ATTRIBUTE_create(), X509_ATTRIBUTE_create_by_OBJ(),
+X509_ATTRIBUTE_create_by_NID() and X509_ATTRIBUTE_create_by_txt() return either
+a B<X509_ATTRIBUTE> on success, or NULL if there is a error.
+
+X509at_add1_attr(), X509at_add1_attr_by_OBJ(), X509at_add1_attr_by_NID() and
+X509at_add1_attr_by_txt() return NULL on error, otherwise they return a list
+of B<X509_ATTRIBUTE>.
+
+X509at_get0_data_by_OBJ() returns the data retrieved from the found attributes
+first B<ASN1_TYPE> object, or NULL if an error occurs.
+
+=head1 SEE ALSO
+
+L<ASN1_TYPE_get(3)>,
+L<ASN1_INTEGER_get(3)>,
+L<ASN1_ENUMERATED_get(3)>,
+L<ASN1_STRING_get0_data(3)>,
+L<ASN1_STRING_length(3)>,
+L<ASN1_STRING_type(3)>,
+L<X509_REQ_get_attr(3)>,
+L<EVP_PKEY_get_attr(3)>,
+L<CMS_signed_get_attr(3)>,
+L<PKCS8_pkey_get0_attrs(3)>,
+
+=head1 COPYRIGHT
+
+Copyright 2023-2024 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/X509_REQ_get_attr.pod b/doc/man3/X509_REQ_get_attr.pod
new file mode 100644
index 000000000000..f2217bd53732
--- /dev/null
+++ b/doc/man3/X509_REQ_get_attr.pod
@@ -0,0 +1,111 @@
+=pod
+
+=head1 NAME
+
+X509_REQ_get_attr_count,
+X509_REQ_get_attr_by_NID, X509_REQ_get_attr_by_OBJ, X509_REQ_get_attr,
+X509_REQ_delete_attr,
+X509_REQ_add1_attr, X509_REQ_add1_attr_by_OBJ, X509_REQ_add1_attr_by_NID,
+X509_REQ_add1_attr_by_txt
+- B<X509_ATTRIBUTE> support for signed certificate requests
+
+=head1 SYNOPSIS
+
+ #include <openssl/x509.h>
+
+ int X509_REQ_get_attr_count(const X509_REQ *req);
+ int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);
+ int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj,
+ int lastpos);
+ X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
+ X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
+ int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
+ int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
+ const ASN1_OBJECT *obj, int type,
+ const unsigned char *bytes, int len);
+ int X509_REQ_add1_attr_by_NID(X509_REQ *req,
+ int nid, int type,
+ const unsigned char *bytes, int len);
+ int X509_REQ_add1_attr_by_txt(X509_REQ *req,
+ const char *attrname, int type,
+ const unsigned char *bytes, int len);
+
+=head1 DESCRIPTION
+
+X509_REQ_get_attr_by_OBJ() finds the location of the first matching object I<obj>
+in the I<req> attribute list. The search starts at the position after I<lastpos>.
+If the returned value is positive then it can be used on the next call to
+X509_REQ_get_attr_by_OBJ() as the value of I<lastpos> in order to iterate through
+the remaining attributes. I<lastpos> can be set to any negative value on the
+first call, in order to start searching from the start of the attribute list.
+
+X509_REQ_get_attr_by_NID() is similar to X509_REQ_get_attr_by_OBJ() except that
+it passes the numerical identifier (NID) I<nid> associated with the object.
+See <openssl/obj_mac.h> for a list of NID_*.
+
+X509_REQ_get_attr() returns the B<X509_ATTRIBUTE> object at index I<loc> in the
+I<req> attribute list. I<loc> should be in the range from 0 to
+X509_REQ_get_attr_count() - 1.
+
+X509_REQ_delete_attr() removes the B<X509_ATTRIBUTE> object at index I<loc> in
+the I<req> objects list of attributes. An error occurs if I<req> is NULL.
+
+X509_REQ_add1_attr() pushes a copy of the passed in B<X509_ATTRIBUTE> I<>attr>
+to the I<req> object's attribute list. An error will occur if either the
+attribute list is NULL or the attribute already exists.
+
+X509_REQ_add1_attr_by_OBJ() creates a new B<X509_ATTRIBUTE> using
+X509_ATTRIBUTE_set1_object() and X509_ATTRIBUTE_set1_data() to assign a new
+I<obj> with type I<type> and data I<bytes> of length I<len> and then pushes it
+to the I<req> object's attribute list. I<req> must be non NULL or an error
+will occur. If I<obj> already exists in the attribute list then an error occurs.
+
+X509_REQ_add1_attr_by_NID() is similar to X509_REQ_add1_attr_by_OBJ() except
+that it passes the numerical identifier (NID) I<nid> associated with the object.
+See <openssl/obj_mac.h> for a list of NID_*.
+
+X509_REQ_add1_attr_by_txt() is similar to X509_REQ_add1_attr_by_OBJ() except
+that it passes a name I<attrname> associated with the object.
+See <openssl/obj_mac.h> for a list of SN_* names.
+
+Refer to L<X509_ATTRIBUTE(3)> for information related to attributes.
+
+=head1 RETURN VALUES
+
+X509_REQ_get_attr_count() returns the number of attributes in the I<req> object
+attribute list or -1 if the attribute list is NULL.
+
+X509_REQ_get_attr_by_OBJ() returns -1 if either the I<req> object's attribute
+list is empty OR I<obj> is not found, otherwise it returns the location of the
+I<obj> in the attribute list.
+
+X509_REQ_get_attr_by_NID() is similar to X509_REQ_get_attr_by_OBJ(), except that
+it returns -2 if the I<nid> is not known by OpenSSL.
+
+X509_REQ_get_attr() returns either an B<X509_ATTRIBUTE> or NULL on error.
+
+X509_REQ_delete_attr() returns either the removed B<X509_ATTRIBUTE> or NULL if
+there is a error.
+
+X509_REQ_add1_attr(), X509_REQ_add1_attr_by_OBJ(), X509_REQ_add1_attr_by_NID()
+and X509_REQ_add1_attr_by_txt() return 1 on success or 0 on error.
+
+=head1 NOTES
+
+Any functions that modify the attributes (add or delete) internally set a flag
+to indicate the ASN.1 encoding has been modified.
+
+=head1 SEE ALSO
+
+L<X509_ATTRIBUTE(3)>
+
+=head1 COPYRIGHT
+
+Copyright 2023-2024 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/X509_REQ_get_extensions.pod b/doc/man3/X509_REQ_get_extensions.pod
new file mode 100644
index 000000000000..00ab1e3cfb41
--- /dev/null
+++ b/doc/man3/X509_REQ_get_extensions.pod
@@ -0,0 +1,50 @@
+=pod
+
+=head1 NAME
+
+X509_REQ_get_extensions,
+X509_REQ_add_extensions, X509_REQ_add_extensions_nid
+- handle X.509 extension attributes of a CSR
+
+=head1 SYNOPSIS
+
+ #include <openssl/x509.h>
+
+ STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
+ int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *exts);
+ int X509_REQ_add_extensions_nid(X509_REQ *req,
+ const STACK_OF(X509_EXTENSION) *exts, int nid);
+
+=head1 DESCRIPTION
+
+X509_REQ_get_extensions() returns the first list of X.509 extensions
+found in the attributes of I<req>.
+The returned list is empty if there are no such extensions in I<req>.
+The caller is responsible for freeing the list obtained.
+
+X509_REQ_add_extensions() adds to I<req> a list of X.509 extensions I<exts>,
+which must not be NULL, using the default B<NID_ext_req>.
+This function must not be called more than once on the same I<req>.
+
+X509_REQ_add_extensions_nid() is like X509_REQ_add_extensions()
+except that I<nid> is used to identify the extensions attribute.
+This function must not be called more than once with the same I<req> and I<nid>.
+
+=head1 RETURN VALUES
+
+X509_REQ_get_extensions() returns a pointer to B<STACK_OF(X509_EXTENSION)>
+or NULL on error.
+
+X509_REQ_add_extensions() and X509_REQ_add_extensions_nid()
+return 1 on success, 0 on error.
+
+=head1 COPYRIGHT
+
+Copyright 2022-2024 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/X509_dup.pod b/doc/man3/X509_dup.pod
index 1c9e4b95bc7b..849364e2aae7 100644
--- a/doc/man3/X509_dup.pod
+++ b/doc/man3/X509_dup.pod
@@ -356,6 +356,15 @@ algorithms from providers. This created object can then be used when loading
binary data using B<d2i_I<TYPE>>().
B<I<TYPE>_dup>() copies an existing object, leaving it untouched.
+Note, however, that the internal representation of the object
+may contain (besides the ASN.1 structure) further data, which is not copied.
+For instance, an B<X509> object usually is augmented by cached information
+on X.509v3 extensions, etc., and losing it can lead to wrong validation results.
+To avoid such situations, better use B<I<TYPE>_up_ref>() if available.
+For the case of B<X509> objects, an alternative to using L<X509_up_ref(3)>
+may be to still call B<I<TYPE>_dup>(), e.g., I<copied_cert = X509_dup(cert)>,
+followed by I<X509_check_purpose(copied_cert, -1, 0)>,
+which re-builds the cached data.
B<I<TYPE>_free>() releases the object and all pointers and sub-objects
within it.
@@ -373,6 +382,10 @@ the object or NULL on failure.
B<I<TYPE>_print_ctx>() returns 1 on success or zero on failure.
+=head1 SEE ALSO
+
+L<X509_up_ref(3)>
+
=head1 HISTORY
The functions X509_REQ_new_ex(), X509_CRL_new_ex(), PKCS7_new_ex() and
@@ -383,7 +396,7 @@ deprecated in 3.0.
=head1 COPYRIGHT
-Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2024 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
diff --git a/doc/man7/EVP_CIPHER-AES.pod b/doc/man7/EVP_CIPHER-AES.pod
index 2c790d9cbd9e..3313245f9842 100644
--- a/doc/man7/EVP_CIPHER-AES.pod
+++ b/doc/man7/EVP_CIPHER-AES.pod
@@ -61,6 +61,19 @@ FIPS provider:
This implementation supports the parameters described in
L<EVP_EncryptInit(3)/PARAMETERS>.
+=head1 NOTES
+
+The AES-SIV and AES-WRAP mode implementations do not support streaming. That
+means to obtain correct results there can be only one L<EVP_EncryptUpdate(3)>
+or L<EVP_DecryptUpdate(3)> call after the initialization of the context.
+
+The AES-XTS implementations allow streaming to be performed, but each
+L<EVP_EncryptUpdate(3)> or L<EVP_DecryptUpdate(3)> call requires each input
+to be a multiple of the blocksize. Only the final EVP_EncryptUpdate() or
+EVP_DecryptUpdate() call can optionally have an input that is not a multiple
+of the blocksize but is larger than one block. In that case ciphertext
+stealing (CTS) is used to fill the block.
+
=head1 SEE ALSO
L<provider-cipher(7)>, L<OSSL_PROVIDER-FIPS(7)>, L<OSSL_PROVIDER-default(7)>
diff --git a/doc/man7/EVP_KDF-SS.pod b/doc/man7/EVP_KDF-SS.pod
index 7f158e421698..c8d19691a797 100644
--- a/doc/man7/EVP_KDF-SS.pod
+++ b/doc/man7/EVP_KDF-SS.pod
@@ -53,7 +53,7 @@ This parameter is ignored for KMAC.
These parameters work as described in L<EVP_KDF(3)/PARAMETERS>.
-=item "key" (B<EVP_KDF_CTRL_SET_KEY>) <octet string>
+=item "key" (B<OSSL_KDF_PARAM_SECRET>) <octet string>
This parameter set the shared secret that is used for key derivation.
@@ -116,7 +116,7 @@ fixedinfo value "label" and salt "salt":
SN_hmac, strlen(SN_hmac));
*p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
SN_sha256, strlen(SN_sha256));
- *p++ = OSSL_PARAM_construct_octet_string(EVP_KDF_CTRL_SET_KEY,
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SECRET,
"secret", (size_t)6);
*p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO,
"label", (size_t)5);
@@ -143,7 +143,7 @@ fixedinfo value "label", salt of "salt" and KMAC outlen of 20:
*p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_MAC,
SN_kmac128, strlen(SN_kmac128));
- *p++ = OSSL_PARAM_construct_octet_string(EVP_KDF_CTRL_SET_KEY,
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SECRET,
"secret", (size_t)6);
*p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO,
"label", (size_t)5);
diff --git a/doc/man7/EVP_MAC-BLAKE2.pod b/doc/man7/EVP_MAC-BLAKE2.pod
index 5557e153536a..f1106ef5a2d1 100644
--- a/doc/man7/EVP_MAC-BLAKE2.pod
+++ b/doc/man7/EVP_MAC-BLAKE2.pod
@@ -27,7 +27,8 @@ properties, to be used with EVP_MAC_fetch():
The general description of these parameters can be found in
L<EVP_MAC(3)/PARAMETERS>.
-All these parameters can be set with EVP_MAC_CTX_set_params().
+All these parameters (except for "block-size") can be set with
+EVP_MAC_CTX_set_params().
Furthermore, the "size" parameter can be retrieved with
EVP_MAC_CTX_get_params(), or with EVP_MAC_CTX_get_mac_size().
The length of the "size" parameter should not exceed that of a B<size_t>.
@@ -45,7 +46,7 @@ Setting this parameter is identical to passing a I<key> to L<EVP_MAC_init(3)>.
=item "custom" (B<OSSL_MAC_PARAM_CUSTOM>) <octet string>
-Sets the custom value.
+Sets the customization/personalization string.
It is an optional value of at most 16 bytes for BLAKE2BMAC or 8 for
BLAKE2SMAC, and is empty by default.
@@ -62,10 +63,10 @@ It can be any number between 1 and 32 for EVP_MAC_BLAKE2S or between 1
and 64 for EVP_MAC_BLAKE2B.
It is 32 and 64 respectively by default.
-=item "block-size" (B<OSSL_MAC_PARAM_SIZE>) <unsigned integer>
+=item "block-size" (B<OSSL_MAC_PARAM_BLOCK_SIZE>) <unsigned integer>
Gets the MAC block size.
-By default, it is 64 for EVP_MAC_BLAKE2S and 128 for EVP_MAC_BLAKE2B.
+It is 64 for EVP_MAC_BLAKE2S and 128 for EVP_MAC_BLAKE2B.
=back
diff --git a/doc/man7/EVP_MAC-CMAC.pod b/doc/man7/EVP_MAC-CMAC.pod
index cf80586f0244..0b1dc79eb3de 100644
--- a/doc/man7/EVP_MAC-CMAC.pod
+++ b/doc/man7/EVP_MAC-CMAC.pod
@@ -62,7 +62,7 @@ The length of the "size" parameter is equal to that of an B<unsigned int>.
=over 4
-=item "block-size" (B<OSSL_MAC_PARAM_SIZE>) <unsigned integer>
+=item "block-size" (B<OSSL_MAC_PARAM_BLOCK_SIZE>) <unsigned integer>
Gets the MAC block size. The "block-size" parameter can also be retrieved with
EVP_MAC_CTX_get_block_size().
diff --git a/doc/man7/EVP_MAC-HMAC.pod b/doc/man7/EVP_MAC-HMAC.pod
index ea2eda9ec819..0e401710fc92 100644
--- a/doc/man7/EVP_MAC-HMAC.pod
+++ b/doc/man7/EVP_MAC-HMAC.pod
@@ -76,7 +76,7 @@ The length of the "size" parameter is equal to that of an B<unsigned int>.
=over 4
-=item "block-size" (B<OSSL_MAC_PARAM_SIZE>) <unsigned integer>
+=item "block-size" (B<OSSL_MAC_PARAM_BLOCK_SIZE>) <unsigned integer>
Gets the MAC block size. The "block-size" parameter can also be retrieved with
EVP_MAC_CTX_get_block_size().
diff --git a/doc/man7/EVP_MAC-KMAC.pod b/doc/man7/EVP_MAC-KMAC.pod
index 1065c166db2c..9c4fbc0b2ad9 100644
--- a/doc/man7/EVP_MAC-KMAC.pod
+++ b/doc/man7/EVP_MAC-KMAC.pod
@@ -27,7 +27,8 @@ properties, to be used with EVP_MAC_fetch():
The general description of these parameters can be found in
L<EVP_MAC(3)/PARAMETERS>.
-All these parameters can be set with EVP_MAC_CTX_set_params().
+All these parameters (except for "block-size") can be set with
+EVP_MAC_CTX_set_params().
Furthermore, the "size" parameter can be retrieved with
EVP_MAC_CTX_get_params(), or with EVP_MAC_CTX_get_mac_size().
The length of the "size" parameter should not exceed that of a B<size_t>.
@@ -45,18 +46,19 @@ The length of the key (in bytes) must be in the range 4...512.
=item "custom" (B<OSSL_MAC_PARAM_CUSTOM>) <octet string>
-Sets the custom value.
-It is an optional value with a length of at most 512 bytes, and is empty by default.
+Sets the customization string.
+It is an optional value with a length of at most 512 bytes, and is
+empty by default.
=item "size" (B<OSSL_MAC_PARAM_SIZE>) <unsigned integer>
Sets the MAC size.
-By default, it is 16 for C<KMAC-128> and 32 for C<KMAC-256>.
+By default, it is 32 for C<KMAC-128> and 64 for C<KMAC-256>.
-=item "block-size" (B<OSSL_MAC_PARAM_SIZE>) <unsigned integer>
+=item "block-size" (B<OSSL_MAC_PARAM_BLOCK_SIZE>) <unsigned integer>
Gets the MAC block size.
-By default, it is 168 for C<KMAC-128> and 136 for C<KMAC-256>.
+It is 168 for C<KMAC-128> and 136 for C<KMAC-256>.
=item "xof" (B<OSSL_MAC_PARAM_XOF>) <integer>
diff --git a/doc/man7/EVP_MD-SHAKE.pod b/doc/man7/EVP_MD-SHAKE.pod
index 8a31cd53a8ba..fc1822f962a1 100644
--- a/doc/man7/EVP_MD-SHAKE.pod
+++ b/doc/man7/EVP_MD-SHAKE.pod
@@ -10,8 +10,9 @@ EVP_MD-SHAKE, EVP_MD-KECCAK-KMAC
Support for computing SHAKE or KECCAK-KMAC digests through the
B<EVP_MD> API.
-KECCAK-KMAC is a special digest that's used by the KMAC EVP_MAC
-implementation (see L<EVP_MAC-KMAC(7)>).
+KECCAK-KMAC is an Extendable Output Function (XOF), with a definition
+similar to SHAKE, used by the KMAC EVP_MAC implementation (see
+L<EVP_MAC-KMAC(7)>).
=head2 Identities
@@ -22,21 +23,25 @@ provider, and includes the following varieties:
=item KECCAK-KMAC-128
-Known names are "KECCAK-KMAC-128" and "KECCAK-KMAC128"
-This is used by L<EVP_MAC-KMAC128(7)>
+Known names are "KECCAK-KMAC-128" and "KECCAK-KMAC128". This is used
+by L<EVP_MAC-KMAC128(7)>. Using the notation from NIST FIPS 202
+(Section 6.2), we have S<KECCAK-KMAC-128(M, d)> = S<KECCAK[256](M || 00, d)>
+(see the description of KMAC128 in Appendix A of NIST SP 800-185).
=item KECCAK-KMAC-256
-Known names are "KECCAK-KMAC-256" and "KECCAK-KMAC256"
-This is used by L<EVP_MAC-KMAC256(7)>
+Known names are "KECCAK-KMAC-256" and "KECCAK-KMAC256". This is used
+by L<EVP_MAC-KMAC256(7)>. Using the notation from NIST FIPS 202
+(Section 6.2), we have S<KECCAK-KMAC-256(M, d)> = S<KECCAK[512](M || 00, d)>
+(see the description of KMAC256 in Appendix A of NIST SP 800-185).
=item SHAKE-128
-Known names are "SHAKE-128" and "SHAKE128"
+Known names are "SHAKE-128" and "SHAKE128".
=item SHAKE-256
-Known names are "SHAKE-256" and "SHAKE256"
+Known names are "SHAKE-256" and "SHAKE256".
=back
diff --git a/doc/man7/EVP_PKEY-RSA.pod b/doc/man7/EVP_PKEY-RSA.pod
index 161e9d4d71d1..dcd38fcee85b 100644
--- a/doc/man7/EVP_PKEY-RSA.pod
+++ b/doc/man7/EVP_PKEY-RSA.pod
@@ -80,7 +80,7 @@ Up to eight additional "r_i" prime factors are supported.
=item "rsa-exponent10" (B<OSSL_PKEY_PARAM_RSA_EXPONENT10>) <unsigned integer>
RSA CRT (Chinese Remainder Theorem) exponents. The exponents are known
-as "dP", "dQ" and "d_i in RFC8017".
+as "dP", "dQ" and "d_i" in RFC8017.
Up to eight additional "d_i" exponents are supported.
=item "rsa-coefficient1" (B<OSSL_PKEY_PARAM_RSA_COEFFICIENT1>) <unsigned integer>
diff --git a/doc/man7/EVP_RAND-SEED-SRC.pod b/doc/man7/EVP_RAND-SEED-SRC.pod
index 516fa64f577e..56f4acd2b897 100644
--- a/doc/man7/EVP_RAND-SEED-SRC.pod
+++ b/doc/man7/EVP_RAND-SEED-SRC.pod
@@ -49,9 +49,10 @@ A context for the seed source can be obtained by calling:
OSSL_PARAM params[2], *p = params;
unsigned int strength = 128;
- /* Create a seed source */
+ /* Create and instantiate a seed source */
rand = EVP_RAND_fetch(NULL, "SEED-SRC", NULL);
seed = EVP_RAND_CTX_new(rand, NULL);
+ EVP_RAND_instantiate(seed, strength, 0, NULL, 0, NULL);
EVP_RAND_free(rand);
/* Feed this into a DRBG */
diff --git a/doc/man7/provider-cipher.pod b/doc/man7/provider-cipher.pod
index 14ff581c72c4..eaad3cf2ff02 100644
--- a/doc/man7/provider-cipher.pod
+++ b/doc/man7/provider-cipher.pod
@@ -148,9 +148,13 @@ It is the responsibility of the cipher implementation to handle input lengths
that are not multiples of the block length.
In such cases a cipher implementation will typically cache partial blocks of
input data until a complete block is obtained.
-I<out> may be the same location as I<in> but it should not partially overlap.
-The same expectations apply to I<outsize> as documented for
-L<EVP_EncryptUpdate(3)> and L<EVP_DecryptUpdate(3)>.
+The pointers I<out> and I<in> may point to the same location, in which
+case the encryption must be done in-place. If I<out> and I<in> point to different
+locations, the requirements of L<EVP_EncryptUpdate(3)> and L<EVP_DecryptUpdate(3)>
+guarantee that the two buffers are disjoint.
+Similarly, the requirements of L<EVP_EncryptUpdate(3)> and L<EVP_DecryptUpdate(3)>
+ensure that the buffer pointed to by I<out> contains sufficient room for the
+operation being performed.
OSSL_FUNC_cipher_final() completes an encryption or decryption started through previous
OSSL_FUNC_cipher_encrypt_init() or OSSL_FUNC_cipher_decrypt_init(), and OSSL_FUNC_cipher_update()
diff --git a/doc/man7/provider-keymgmt.pod b/doc/man7/provider-keymgmt.pod
index c6399b8373b9..498ad9c4e107 100644
--- a/doc/man7/provider-keymgmt.pod
+++ b/doc/man7/provider-keymgmt.pod
@@ -360,7 +360,7 @@ length is specific to the key cryptosystem.
The value should be the maximum size that a caller should allocate to
safely store a signature (called I<sig> in L<provider-signature(7)>),
-the result of asymmmetric encryption / decryption (I<out> in
+the result of asymmetric encryption / decryption (I<out> in
L<provider-asym_cipher(7)>, a derived secret (I<secret> in
L<provider-keyexch(7)>, and similar data).
@@ -442,7 +442,7 @@ The KEYMGMT interface was introduced in OpenSSL 3.0.
=head1 COPYRIGHT
-Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2019-2024 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
diff --git a/doc/man7/provider-storemgmt.pod b/doc/man7/provider-storemgmt.pod
index cde95f66e1ee..f39f345fc889 100644
--- a/doc/man7/provider-storemgmt.pod
+++ b/doc/man7/provider-storemgmt.pod
@@ -162,12 +162,12 @@ fingerprint, computed with the given digest.
Indicates that the caller wants to search for an object with the given
alias (some call it a "friendly name").
-=item "properties" (B<OSSL_STORE_PARAM_PROPERTIES) <utf8 string>
+=item "properties" (B<OSSL_STORE_PARAM_PROPERTIES>) <utf8 string>
Property string to use when querying for algorithms such as the B<OSSL_DECODER>
decoder implementations.
-=item "input-type" (B<OSSL_STORE_PARAM_INPUT_TYPE) <utf8 string>
+=item "input-type" (B<OSSL_STORE_PARAM_INPUT_TYPE>) <utf8 string>
Type of the input format as a hint to use when decoding the objects in the
store.
diff --git a/engines/e_afalg.ec b/engines/e_afalg.ec
new file mode 100644
index 000000000000..6d7420fe5c36
--- /dev/null
+++ b/engines/e_afalg.ec
@@ -0,0 +1,3 @@
+# The INPUT HEADER is scanned for declarations
+# LIBNAME INPUT HEADER ERROR-TABLE FILE
+L AFALG e_afalg_err.h e_afalg_err.c
diff --git a/engines/e_capi.ec b/engines/e_capi.ec
new file mode 100644
index 000000000000..d9c7aa510fd3
--- /dev/null
+++ b/engines/e_capi.ec
@@ -0,0 +1,3 @@
+# The INPUT HEADER is scanned for declarations
+# LIBNAME INPUT HEADER ERROR-TABLE FILE
+L CAPI e_capi_err.h e_capi_err.c
diff --git a/engines/e_dasync.ec b/engines/e_dasync.ec
new file mode 100644
index 000000000000..3d56ebcc5f6a
--- /dev/null
+++ b/engines/e_dasync.ec
@@ -0,0 +1,3 @@
+# The INPUT HEADER is scanned for declarations
+# LIBNAME INPUT HEADER ERROR-TABLE FILE
+L DASYNC e_dasync_err.h e_dasync_err.c
diff --git a/engines/e_loader_attic.ec b/engines/e_loader_attic.ec
new file mode 100644
index 000000000000..525a689fe582
--- /dev/null
+++ b/engines/e_loader_attic.ec
@@ -0,0 +1,3 @@
+# The INPUT HEADER is scanned for declarations
+# LIBNAME INPUT HEADER ERROR-TABLE FILE
+L ATTIC e_loader_attic_err.h e_loader_attic_err.c
diff --git a/engines/e_ossltest.ec b/engines/e_ossltest.ec
new file mode 100644
index 000000000000..a4a55ecb3f69
--- /dev/null
+++ b/engines/e_ossltest.ec
@@ -0,0 +1,3 @@
+# The INPUT HEADER is scanned for declarations
+# LIBNAME INPUT HEADER ERROR-TABLE FILE
+L OSSLTEST e_ossltest_err.h e_ossltest_err.c
diff --git a/external/perl/Downloaded.txt b/external/perl/Downloaded.txt
new file mode 100644
index 000000000000..dfb1f052cb42
--- /dev/null
+++ b/external/perl/Downloaded.txt
@@ -0,0 +1,14 @@
+Intro
+-----
+
+If we find a useful Perl module that isn't one of the core Perl
+modules, we may choose to bundle it with the OpenSSL source.
+They remain unmodified and retain their copyright and license.
+
+Here, we simply list those modules and where we got them from.
+
+Downloaded and bundled Perl modules
+-----------------------------------
+
+Text::Template 1.56 was downloaded from
+https://cpan.metacpan.org/authors/id/M/MS/MSCHOUT/Text-Template-1.56.tar.gz
diff --git a/external/perl/MODULES.txt b/external/perl/MODULES.txt
new file mode 100644
index 000000000000..799357f4d1c2
--- /dev/null
+++ b/external/perl/MODULES.txt
@@ -0,0 +1 @@
+Text-Template-1.56/lib
diff --git a/external/perl/Text-Template-1.56/Changes b/external/perl/Text-Template-1.56/Changes
new file mode 100644
index 000000000000..3c50179ad88d
--- /dev/null
+++ b/external/perl/Text-Template-1.56/Changes
@@ -0,0 +1,301 @@
+Revision history for Text::Template
+
+1.56 2019-07-09
+ - Fix typos in Changes
+
+1.55 2019-02-25
+ - Improve AppVeyor tests for older Perls (Thanks Roy Ivy)
+ - Check for Test::More 0.94 and skip tests if not installed where
+ done_testing() is used (Thanks Roy Ivy).
+ - Improve workaround for broken Win32 File::Temp taint failure (Thanks Roy Ivy).
+ - Skip/todo tests which fail under Devel::Cover (Thanks Roy Ivy)
+ - Add checks and skip_all checks for non-core test modules (Thanks Roy Ivy)
+
+1.54 2019-01-13
+ - Fix tempfile creation during tests on Win32
+
+1.53 2018-05-02
+ - Add support for decoding template files via ENCODING constructor arg
+ [github #11]
+ - Docs cleanup: replace indirect-object style examples and use class method
+ style constructor calls in the POD docs
+ - Docs cleanup: remove hard tabs from POD, replace dated, unfair synopsis
+ [github #5], convert "THANKS" section to a POD list
+
+1.52 2018-03-19
+ - Fix possible 'Subroutine ... redefined' warning (Github #10)
+
+1.51 2018-03-04
+ - Add test for nested tags breakage that happened in v1.46
+ - Turn off strict+warnings in sections where template code is eval'ed
+ [github #9]
+
+1.50 2018-02-10
+ *** Revert support for identical start/end delimiters (e.g.: @@foo@@, XXfooXX)
+ due to breakage with nested tags (see
+ https://github.com/mschout/perl-text-template/issues/8). Will revisit
+ this in a future release.
+
+1.49 2018-02-07
+ - Fix failing tests in v1.48 under perl < 5.8.9
+
+1.48 2018-02-07
+ - remove COPYING and Artistic files from the dist. These are replaced by
+ the Dist::Zilla generated LICENSE file.
+ - use strict/warnings (thanks Mohammad S Anwar)
+ - remove $VERSION checks from tests. This makes it easier to run the test
+ with Dist::Zilla and avoids maintenance issue of updating the tests for
+ each release (Thanks Andrew Ruder).
+ - Allow precompiled templates to work with preprocessing [#29928] (Thanks
+ Nik LaBelle)
+ - Add "strict" option to fill_in(). This adds "use strict" and "use vars
+ (...)" to the prepend section, and only the keys of the HASH option are
+ allowed in the template. (Thanks Desmond Daignault, Kivanc Yazan, CJM)
+ [55696]
+ - Fix templates with inline comments without newline after comment for perl
+ < 5.18 [34292]
+ - Don't use bareword file handles
+ - use three arg form of open()
+ - Fix BROKEN behaviour so that it returns the text accumulated so far on
+ undef as documented [28974]
+ - Source code cleanups
+ - Minimum perl version is now 5.8.0
+ - Allow start/end delimiters to be identical (e.g.: @@foo@@, XXfooXX)
+ (Thanks mirod) [46639]
+ - Fix + document the FILENAME parameter to fill_in() (Thanks VDB) [106093]
+ - Test suite cleanups:
+ + turn on strict/warnings for all tests
+ + run tests through perltidy and formatting cleanup
+ + remove number prefixes from test names
+ + use Test::More instead of generating TAP by hand
+ + use three-arg form of open()
+ + don't use indirect object syntax
+ + don't use bareword file handles
+ + use File::Temp to generate temporary files
+
+1.47 2017-02-27
+ - Fix longstanding memory leak in _scrubpkg() [#22031]
+ - Fix various spelling errors [#86872]
+
+NOTE: Changes for versions prior to 1.47 have been imported from README
+
+1.46 2013-02-11
+ - Thanks to Rik Signes, there is a new
+ Text::Template->append_text_to_output method, which Text::Template always
+ uses whenever it wants to emit output. You can subclass this to get
+ control over the output, for example for postprocessing.
+ - A spurious warning is no longer emitted when the TYPE parameter to ->new
+ is omitted.
+
+1.45 2008-04-16
+
+1.44 2003-04-29
+ - This is a maintenance release. There are no feature changes.
+ - _scrubpkg, which was responsible for eptying out temporary packages after
+ the module had done with them, wasn't always working; the result was
+ memory leaks in long-running applications. This should be fixed now, and
+ there is a test in the test suite for it.
+ - Minor changes to the test suite to prevent spurious errors.
+ - Minor documentation changes.
+
+1.43 2002-03-25
+ - The ->new method now fails immediately and sets $Text::Template::ERROR if
+ the file that is named by a filename argument does not exist or cannot be
+ opened for some other reason. Formerly, the constructor would succeed
+ and the ->fill_in call would fail.
+
+1.42 2001-11-05
+ - This is a maintenance release. There are no feature changes.
+ - Fixed a bug relating to use of UNTAINT under perl 5.005_03 and possibly
+ other versions.
+ - Taint-related tests are now more comprehensive.
+
+1.41 2001-09-04
+ - This is a maintenance release. There are no feature changes.
+ - Tests now work correctly on Windows systems and possibly on other
+ non-unix systems.
+
+1.40 2001-08-30
+ *** INCOMPATIBLE CHANGE ***
+ - The format of the default error message has changed. It used to look
+ like:
+
+ Program fragment at line 30 delivered error ``Illegal division by zero''
+
+ It now looks like:
+
+ Program fragment delivered error ``Illegal division by zero at catalog.tmpl line 37''
+
+ Note that the default message used to report the line number at which the
+ program fragment began; it now reports the line number at which the error
+ actually occurred.
+
+ *** INCOMPATIBLE CHANGE ***
+ - The format of the default error message has changed. It used to look like:
+
+ Program fragment at line 30 delivered error ``Illegal division by zero''
+
+ It now looks like:
+
+ Program fragment delivered error ``Illegal division by zero at catalog.tmpl line 37''
+
+ - Note that the default message used to report the line number at which the
+ program fragment began; it now reports the line number at which the error
+ actually occurred.
+ - New UNTAINT option tells the module that it is safe to 'eval' code even
+ though it has come from a file or filehandle.
+ - Code added to prevent memory leaks when filling many templates. Thanks
+ to Itamar Almeida de Carvalho.
+ - Bug fix: $OUT was not correctly initialized when used in conjunction
+ with SAFE.
+ - You may now use a glob ref when passing a filehandle to the ->new
+ function. Formerly, a glob was required.
+ - New subclass: Text::Template::Preprocess. Just like Text::Template, but
+ you may supply a PREPROCESS option in the constructor or the fill_in
+ call; this is a function which receives each code fragment prior to
+ evaluation, and which may modify and return the fragment; the modified
+ fragment is what is evaluated.
+ - Error messages passed to BROKEN subroutines will now report the correct
+ line number of the template at which the error occurred:
+
+ Illegal division by zero at template line 37.
+
+ - If the template comes from a file, the filename will be reported as well:
+
+ Illegal division by zero at catalog.tmpl line 37.
+
+ - New UNTAINT option tells the module that it is safe to eval template code
+ even if it has come from a file or filehandle, disabling taint checking
+ in these cases.
+ - Code added to prevent memory leaks when filling many templates. Thanks to
+ Itamar Almeida de Carvalho.
+ - Bug fix: $OUT was not always correctly initialized when used in
+ conjunction with SAFE.
+ - You may now use a glob ref when passing a filehandle to the new function.
+ Formerly, a glob was required.
+ - Error messages passed to BROKEN subroutines will now report the correct
+ line number of the template at which the error occurred:
+
+ Illegal division by zero at template line 37.
+
+ If the template comes from a file, the filename will be reported as well:
+
+ Illegal division by zero at catalog.tmpl line 37.
+
+ - New subclass: Text::Template::Preprocess. Just like Text::Template, but
+ you may supply a PREPROCESS option in the fill_in call; this is a
+ function which receives each code fragment prior to evaluation, and which
+ may modify and return the fragment; the modified fragment is what is
+ evaluated.
+
+1.31 2001-02-05
+ - Maintenance and bug fix release
+ - fill_in_string was failing. Thanks to Donald L. Greer Jr. for the test case.
+
+1.23 1999-12-21
+ - Small bug fix: DELIMITER and other arguments were being ignored in calls
+ to fill_in_file and fill_this_in. (Thanks to Jonathan Roy for reporting
+ this.)
+
+1.22
+ - You can now specify that certain Perl statements be prepended to the
+ beginning of every program fragment in a template, either per template,
+ or for all templates, or for the duration of only one call to fill_in.
+ This is useful, for example, if you want to enable `strict' checks in
+ your templates but you don't want to manually add `use strict' to the
+ front of every program fragment everywhere.
+
+1.20 1999-03-08
+ - You can now specify that the program fragment delimiters are strings
+ other than { and }. This has three interesting effects: First, it
+ changes the delimiter strings. Second, it disables the special meaning
+ of \, so you have to be really, really sure that the delimiters will not
+ appear in your templates. And third, because of the simplifications
+ introduced by the elimination of \ processing, template parsing is 20-25%
+ faster. See the manual section on `Alternative Delimiters'.
+ - Fixed bug having to do with undefined values in HASH options. In
+ particular, Text::Template no longer generates a warning if you try to
+ give a variable an undefined value.
+
+1.12 1999-02-28
+ - I forgot to say that Text::Template ISA Exporter, so the exported
+ functions never got exported. Duhhh!
+ - Template TYPEs are now case-insensitive. The `new' method now diagnoses
+ attempts to use an invalid TYPE.
+ - More tests for these things.
+
+1.11 1999-02-25
+ - Fixed a bug in the way backslashes were processed. The 1.10 behavior was
+ incompatible with the beta versions and was also inconvenient. (`\n' in
+ templates was replaced with `n' before it was given to Perl for
+ evaluation.) The new behavior is also incompatible with the beta
+ versions, but it is only a little bit incompatible, and it is probably
+ better.
+ - Documentation for the new behavior, and tests for the bug.
+
+1.10 1999-02-13
+ - New OUTPUT option delivers template results directly to a filehandle
+ instead of making them into a string. Saves space and time.
+ - PACKAGE and HASH now work intelligently with SAFE.
+ - Fragments may now output data directly to the template, rather than
+ having to arrange to return it as a return value at the end. This means
+ that where you used to have to write this:
+
+ { my $blist = '';
+ foreach $i (@items) {
+ $blist .= qq{ * $i\n};
+ }
+ $blist;
+ }
+
+ You can now write this instead, because $OUT is special.
+
+ { foreach $i (@items) {
+ $OUT.= " * $i\n";
+ }
+ }
+
+ (`A spoonful of sugar makes the medicine go down.')
+ - Fixed some small bugs. Worked around a bug in Perl that does the wrong
+ thing with $x = <Y> when $x contains a glob.
+ - More documentation. Errors fixed.
+ - Lots more tests.
+
+1.03 1999-02-06
+ - Code added to support HASH option to fill_in. (Incl. `_gensym'
+ function.)
+ - Documentation for HASH.
+ - New test file for HASH.
+ - Note about failure of lexical variables to propagate into templates. Why
+ does this surprise people?
+ - Bug fix: program fragments are evaluated in an environment with `no
+ strict' by default. Otherwise, you get a lot of `Global symbol "$v"
+ requires explicit package name' failures. Why didn't the test program
+ pick this up? Because the only variable the test program ever used was
+ `$a', which is exempt. Duhhhhh.
+ - Fixed the test program.
+ - Various minor documentation fixes.
+
+1.00 1999-02-05
+ This is a complete rewrite. The new version delivers better functionality
+ but is only 2/3 as long, which I think is a good sign. It is supposed to be
+ 100% backward-compatible with the previous versions. With one cosmetic
+ change, it passes the test suite that the previous versions passed. If you
+ have compatibility problems, please mail me immediately.
+
+ - At least twice as fast
+ - Better support for filling out the same template more than once
+ - Now supports evaluation of program fragments in Safe compartments.
+ (Thanks, Jonathan!)
+ - Better argument syntax
+ - More convenience functions
+ - The parser is much better and simpler
+ - Once a template is parsed, the parsed version is stored so that
+ it needn't be parsed again.
+ - BROKEN function behavior is rationalized. You can now pass an
+ arbitrary argument to your BROKEN function, or return a value
+ from it to the main program.
+ - Documentation overhauled.
+
+Previous Versions
+ - Maintained by Mark Jason Dominus (MJD)
diff --git a/external/perl/Text-Template-1.56/INSTALL b/external/perl/Text-Template-1.56/INSTALL
new file mode 100644
index 000000000000..7c5e4c6bde97
--- /dev/null
+++ b/external/perl/Text-Template-1.56/INSTALL
@@ -0,0 +1,31 @@
+
+To install:
+
+ perl Makefile.PL
+
+to construct the Makefile, then
+
+ make test
+
+to test the package. If it fails any tests, please send me the output
+of `make test' and `perl -V'. I'll tell you whether it is safe to go
+ahead, or I'll provide a fix.
+
+If it passes the tests, use
+
+ make install
+
+to install it.
+
+Detailed documentation is at the bottom of the lib/Text/Template.pm
+file. You may be able to view it with the following command:
+
+ perldoc Text::Template
+
+Or:
+
+ perldoc lib/Text/Template.pm
+
+If you have problems, send me mail:
+
+mjd-perl-template+@plover.com
diff --git a/external/perl/Text-Template-1.56/LICENSE b/external/perl/Text-Template-1.56/LICENSE
new file mode 100644
index 000000000000..718b860a2379
--- /dev/null
+++ b/external/perl/Text-Template-1.56/LICENSE
@@ -0,0 +1,379 @@
+This software is copyright (c) 2013 by Mark Jason Dominus <mjd@cpan.org>.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+Terms of the Perl programming language system itself
+
+a) the GNU General Public License as published by the Free
+ Software Foundation; either version 1, or (at your option) any
+ later version, or
+b) the "Artistic License"
+
+--- The GNU General Public License, Version 1, February 1989 ---
+
+This software is Copyright (c) 2013 by Mark Jason Dominus <mjd@cpan.org>.
+
+This is free software, licensed under:
+
+ The GNU General Public License, Version 1, February 1989
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+--- The Artistic License 1.0 ---
+
+This software is Copyright (c) 2013 by Mark Jason Dominus <mjd@cpan.org>.
+
+This is free software, licensed under:
+
+ The Artistic License 1.0
+
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package
+may be copied, such that the Copyright Holder maintains some semblance of
+artistic control over the development of the package, while giving the users of
+the package the right to use and distribute the Package in a more-or-less
+customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ - "Package" refers to the collection of files distributed by the Copyright
+ Holder, and derivatives of that collection of files created through
+ textual modification.
+ - "Standard Version" refers to such a Package if it has not been modified,
+ or has been modified in accordance with the wishes of the Copyright
+ Holder.
+ - "Copyright Holder" is whoever is named in the copyright or copyrights for
+ the package.
+ - "You" is you, if you're thinking about copying or distributing this Package.
+ - "Reasonable copying fee" is whatever you can justify on the basis of media
+ cost, duplication charges, time of people involved, and so on. (You will
+ not be required to justify it to the Copyright Holder, but only to the
+ computing community at large as a market that must bear the fee.)
+ - "Freely Available" means that no fee is charged for the item itself, though
+ there may be fees involved in handling the item. It also means that
+ recipients of the item may redistribute it under the same conditions they
+ received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived
+from the Public Domain or from the Copyright Holder. A Package modified in such
+a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that
+you insert a prominent notice in each changed file stating how and when you
+changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or an
+ equivalent medium, or placing the modifications on a major archive site
+ such as ftp.uu.net, or by allowing the Copyright Holder to include your
+ modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with
+ standard executables, which must also be provided, and provide a separate
+ manual page for each non-standard executable that clearly documents how it
+ differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable
+form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files,
+ together with instructions (in the manual page or equivalent) on where to
+ get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package
+ with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard
+ Version executables, giving the non-standard executables non-standard
+ names, and clearly documenting the differences in manual pages (or
+ equivalent), together with instructions on where to get the Standard
+ Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package. You may charge any fee you choose for support of this Package. You
+may not charge a fee for this Package itself. However, you may distribute this
+Package in aggregate with other (possibly commercial) programs as part of a
+larger (possibly commercial) software distribution provided that you do not
+advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output
+from the programs of this Package do not automatically fall under the copyright
+of this Package, but belong to whomever generated them, and may be sold
+commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not
+be considered part of this Package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
+
diff --git a/external/perl/Text-Template-1.56/MANIFEST b/external/perl/Text-Template-1.56/MANIFEST
new file mode 100644
index 000000000000..7f07faaa494a
--- /dev/null
+++ b/external/perl/Text-Template-1.56/MANIFEST
@@ -0,0 +1,34 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.012.
+Changes
+INSTALL
+LICENSE
+MANIFEST
+META.json
+META.yml
+Makefile.PL
+README
+SIGNATURE
+lib/Text/Template.pm
+lib/Text/Template/Preprocess.pm
+t/author-pod-syntax.t
+t/author-signature.t
+t/basic.t
+t/broken.t
+t/delimiters.t
+t/error.t
+t/exported.t
+t/hash.t
+t/inline-comment.t
+t/nested-tags.t
+t/ofh.t
+t/out.t
+t/prepend.t
+t/preprocess.t
+t/rt29928.t
+t/safe.t
+t/safe2.t
+t/safe3.t
+t/strict.t
+t/taint.t
+t/template-encoding.t
+t/warnings.t
diff --git a/external/perl/Text-Template-1.56/META.json b/external/perl/Text-Template-1.56/META.json
new file mode 100644
index 000000000000..2d41ada9a0e0
--- /dev/null
+++ b/external/perl/Text-Template-1.56/META.json
@@ -0,0 +1,83 @@
+{
+ "abstract" : "Expand template text with embedded Perl",
+ "author" : [
+ "Michael Schout <mschout@cpan.org>"
+ ],
+ "dynamic_config" : 0,
+ "generated_by" : "Dist::Zilla version 6.012, CPAN::Meta::Converter version 2.150010",
+ "license" : [
+ "perl_5"
+ ],
+ "meta-spec" : {
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+ "version" : 2
+ },
+ "name" : "Text-Template",
+ "prereqs" : {
+ "configure" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0",
+ "perl" : "5.008"
+ }
+ },
+ "develop" : {
+ "requires" : {
+ "Dist::Zilla" : "5",
+ "Dist::Zilla::PluginBundle::MSCHOUT" : "0",
+ "Software::License::Perl_5" : "0",
+ "Test::Pod" : "1.41",
+ "Test::Signature" : "0"
+ }
+ },
+ "runtime" : {
+ "requires" : {
+ "Carp" : "0",
+ "Encode" : "0",
+ "Exporter" : "0",
+ "base" : "0",
+ "perl" : "5.008",
+ "strict" : "0",
+ "warnings" : "0"
+ }
+ },
+ "test" : {
+ "requires" : {
+ "File::Temp" : "0",
+ "Safe" : "0",
+ "Test::More" : "0",
+ "Test::More::UTF8" : "0",
+ "Test::Warnings" : "0",
+ "lib" : "0",
+ "perl" : "5.008",
+ "utf8" : "0",
+ "vars" : "0"
+ }
+ }
+ },
+ "provides" : {
+ "Text::Template" : {
+ "file" : "lib/Text/Template.pm",
+ "version" : "1.56"
+ },
+ "Text::Template::Preprocess" : {
+ "file" : "lib/Text/Template/Preprocess.pm",
+ "version" : "1.56"
+ }
+ },
+ "release_status" : "stable",
+ "resources" : {
+ "bugtracker" : {
+ "web" : "https://github.com/mschout/perl-text-template/issues"
+ },
+ "homepage" : "https://github.com/mschout/perl-text-template",
+ "repository" : {
+ "type" : "git",
+ "url" : "https://github.com/mschout/perl-text-template.git",
+ "web" : "https://github.com/mschout/perl-text-template"
+ }
+ },
+ "version" : "1.56",
+ "x_generated_by_perl" : "v5.26.2",
+ "x_serialization_backend" : "Cpanel::JSON::XS version 4.04"
+}
+
diff --git a/external/perl/Text-Template-1.56/META.yml b/external/perl/Text-Template-1.56/META.yml
new file mode 100644
index 000000000000..0310ce6e2119
--- /dev/null
+++ b/external/perl/Text-Template-1.56/META.yml
@@ -0,0 +1,46 @@
+---
+abstract: 'Expand template text with embedded Perl'
+author:
+ - 'Michael Schout <mschout@cpan.org>'
+build_requires:
+ File::Temp: '0'
+ Safe: '0'
+ Test::More: '0'
+ Test::More::UTF8: '0'
+ Test::Warnings: '0'
+ lib: '0'
+ perl: '5.008'
+ utf8: '0'
+ vars: '0'
+configure_requires:
+ ExtUtils::MakeMaker: '0'
+ perl: '5.008'
+dynamic_config: 0
+generated_by: 'Dist::Zilla version 6.012, CPAN::Meta::Converter version 2.150010'
+license: perl
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: '1.4'
+name: Text-Template
+provides:
+ Text::Template:
+ file: lib/Text/Template.pm
+ version: '1.56'
+ Text::Template::Preprocess:
+ file: lib/Text/Template/Preprocess.pm
+ version: '1.56'
+requires:
+ Carp: '0'
+ Encode: '0'
+ Exporter: '0'
+ base: '0'
+ perl: '5.008'
+ strict: '0'
+ warnings: '0'
+resources:
+ bugtracker: https://github.com/mschout/perl-text-template/issues
+ homepage: https://github.com/mschout/perl-text-template
+ repository: https://github.com/mschout/perl-text-template.git
+version: '1.56'
+x_generated_by_perl: v5.26.2
+x_serialization_backend: 'YAML::Tiny version 1.73'
diff --git a/external/perl/Text-Template-1.56/Makefile.PL b/external/perl/Text-Template-1.56/Makefile.PL
new file mode 100644
index 000000000000..15b421be1f5c
--- /dev/null
+++ b/external/perl/Text-Template-1.56/Makefile.PL
@@ -0,0 +1,71 @@
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.012.
+use strict;
+use warnings;
+
+use 5.008;
+
+use ExtUtils::MakeMaker;
+
+my %WriteMakefileArgs = (
+ "ABSTRACT" => "Expand template text with embedded Perl",
+ "AUTHOR" => "Michael Schout <mschout\@cpan.org>",
+ "CONFIGURE_REQUIRES" => {
+ "ExtUtils::MakeMaker" => 0
+ },
+ "DISTNAME" => "Text-Template",
+ "LICENSE" => "perl",
+ "MIN_PERL_VERSION" => "5.008",
+ "NAME" => "Text::Template",
+ "PREREQ_PM" => {
+ "Carp" => 0,
+ "Encode" => 0,
+ "Exporter" => 0,
+ "base" => 0,
+ "strict" => 0,
+ "warnings" => 0
+ },
+ "TEST_REQUIRES" => {
+ "File::Temp" => 0,
+ "Safe" => 0,
+ "Test::More" => 0,
+ "Test::More::UTF8" => 0,
+ "Test::Warnings" => 0,
+ "lib" => 0,
+ "utf8" => 0,
+ "vars" => 0
+ },
+ "VERSION" => "1.56",
+ "test" => {
+ "TESTS" => "t/*.t"
+ }
+);
+
+
+my %FallbackPrereqs = (
+ "Carp" => 0,
+ "Encode" => 0,
+ "Exporter" => 0,
+ "File::Temp" => 0,
+ "Safe" => 0,
+ "Test::More" => 0,
+ "Test::More::UTF8" => 0,
+ "Test::Warnings" => 0,
+ "base" => 0,
+ "lib" => 0,
+ "strict" => 0,
+ "utf8" => 0,
+ "vars" => 0,
+ "warnings" => 0
+);
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+ delete $WriteMakefileArgs{TEST_REQUIRES};
+ delete $WriteMakefileArgs{BUILD_REQUIRES};
+ $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
+}
+
+delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
+ unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
+
+WriteMakefile(%WriteMakefileArgs);
diff --git a/external/perl/Text-Template-1.56/README b/external/perl/Text-Template-1.56/README
new file mode 100644
index 000000000000..5f62ac7186be
--- /dev/null
+++ b/external/perl/Text-Template-1.56/README
@@ -0,0 +1,62 @@
+
+Text::Template v1.46
+
+This is a library for generating form letters, building HTML pages, or
+filling in templates generally. A `template' is a piece of text that
+has little Perl programs embedded in it here and there. When you
+`fill in' a template, you evaluate the little programs and replace
+them with their values.
+
+Here's an example of a template:
+
+ Dear {$title} {$lastname},
+
+ It has come to our attention that you are delinquent in your
+ {$monthname[$last_paid_month]} payment. Please remit
+ ${sprintf("%.2f", $amount)} immediately, or your patellae may
+ be needlessly endangered.
+
+ Love,
+
+ Mark "{nickname(rand 20)}" Dominus
+
+
+The result of filling in this template is a string, which might look
+something like this:
+
+ Dear Mr. Gates,
+
+ It has come to our attention that you are delinquent in your
+ February payment. Please remit
+ $392.12 immediately, or your patellae may
+ be needlessly endangered.
+
+
+ Love,
+
+ Mark "Vizopteryx" Dominus
+
+You can store a template in a file outside your program. People can
+modify the template without modifying the program. You can separate
+the formatting details from the main code, and put the formatting
+parts of the program into the template. That prevents code bloat and
+encourages functional separation.
+
+You can fill in the template in a `Safe' compartment. This means that
+if you don't trust the person who wrote the code in the template, you
+won't have to worry that they are tampering with your program when you
+execute it.
+
+----------------------------------------------------------------
+
+Text::Template was originally released some time in late 1995 or early
+1996. After three years of study and investigation, I rewrote it from
+scratch in January 1999. The new version, 1.0, was much faster,
+delivered better functionality and was almost 100% backward-compatible
+with the previous beta versions.
+
+I have added a number of useful features and conveniences since the
+1.0 release, while still retaining backward compatibility. With one
+merely cosmetic change, the current version of Text::Template passes
+the test suite that the old beta versions passed.
+
diff --git a/external/perl/Text-Template-1.56/SIGNATURE b/external/perl/Text-Template-1.56/SIGNATURE
new file mode 100644
index 000000000000..c7cb7d3f35cb
--- /dev/null
+++ b/external/perl/Text-Template-1.56/SIGNATURE
@@ -0,0 +1,65 @@
+This file contains message digests of all files listed in MANIFEST,
+signed via the Module::Signature module, version 0.81.
+
+To verify the content in this distribution, first make sure you have
+Module::Signature installed, then type:
+
+ % cpansign -v
+
+It will check each file's integrity, as well as the signature's
+validity. If "==> Signature verified OK! <==" is not displayed,
+the distribution may already have been compromised, and you should
+not run its Makefile.PL or Build.PL.
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+SHA1 8ba1381d3fc8d81457c35e5aff52b8e55d57be7c Changes
+SHA1 b457bd56a70b838ccc55d183ab09de64b6996958 INSTALL
+SHA1 f12894289cb0f379f24b8d63e2e761dbcba1b216 LICENSE
+SHA1 2c21cb13f53da41c4b30011aca9014db2de46862 MANIFEST
+SHA1 ea82a70dfcffe05202868dfe02826aaf1f6e0229 META.json
+SHA1 9ad7419fb6209e81652da42967995c8fb8f1826b META.yml
+SHA1 f7634b46dde2cf8c6f31fe46327d15151d654a2c Makefile.PL
+SHA1 b94aaad0a0bf2c323061bfefb9cf1fd532f14e7b README
+SHA1 090d77972c087a8905fa85522854afbf4ccc999b lib/Text/Template.pm
+SHA1 ca5251a021e46b60603f10e757d689e52fde1feb lib/Text/Template/Preprocess.pm
+SHA1 8efad25309730a4d501fb40fc03eda4697303372 t/author-pod-syntax.t
+SHA1 19cc343f8a85c6805bbeb02580487483a6283887 t/author-signature.t
+SHA1 ae085010c9f08576ef8584f224e38e6a98c1c178 t/basic.t
+SHA1 006feb1a0b1e5780db52aa79bd38933664a8339a t/broken.t
+SHA1 dee8cef1fcd43ce5de462018f8539d4a0fbc460f t/delimiters.t
+SHA1 304955c4280159ec3a4c0f2717dcff9c887bb487 t/error.t
+SHA1 c862dfc08e00e76b3f2aee953583d3cc8e5524a2 t/exported.t
+SHA1 50ef92bda3b6b5cbd5a9307e6f17ce49ee8f245c t/hash.t
+SHA1 d5dc210684aec8bb2c4817af96597c86047169c1 t/inline-comment.t
+SHA1 31ff85f423178f2d6638d35edf859d73f63dd5c7 t/nested-tags.t
+SHA1 62ae0720aa86146bccfa23d2c903fa142cb86d50 t/ofh.t
+SHA1 68093417d49a2afdfcd4642bacea04466039b734 t/out.t
+SHA1 a8b21fdca0f1d243775a00758105e0fcc58022aa t/prepend.t
+SHA1 4e7e00eccede7c3231e93ef0f3cb011423be4eb5 t/preprocess.t
+SHA1 a52d61ef92e6a88d694db0be4893b88417a72f9c t/rt29928.t
+SHA1 5186ff459c6042af11bca92decd271887c7b2eae t/safe.t
+SHA1 aa0c9ff96d66c1f74fc7ac73ce173c9f741f552e t/safe2.t
+SHA1 b50a51577c0f2c13c9a48113dc7f061385a02219 t/safe3.t
+SHA1 16d3abf7588da4c0056c6c6b7818470c8601577c t/strict.t
+SHA1 f325ebf739e2aec3ae62427aef0c4e86de58ad29 t/taint.t
+SHA1 4dac28585388482f1719f404cc357991af77e345 t/template-encoding.t
+SHA1 ce1da9bf88d6ea62d7c756f0d730dfb3c5888b6e t/warnings.t
+-----BEGIN PGP SIGNATURE-----
+
+iQJFBAEBCAAvFiEE2EtuRfhGgngE8PsARAzvLrlUzY4FAl0kljYRHG1zY2hvdXRA
+Y3Bhbi5vcmcACgkQRAzvLrlUzY6BdRAAlu/LI+71ax6OJfn6O6SslZCKdIfef1+P
+UQ3eQCzbUOK1hP9p6TNOMFv0xPew7a1jSsM/wLjryXKLqGIclonBopRisZjCSaFa
+DSH+5k4A9TWKo7n08C3nydVZPTfHXLEO6tHIH2umDHjMyC1gDkApjvSqH53OCtoV
+vUTqQn9c6MxmuIWus1gjVynTvXWtBmaqrvTuQENFUXsGH5gVVbEr0VNIyt6Ip3p5
+HnRe8UdykFJZvfhEhH1pbt2j513m9Bqce0eSb/eshraFugx7coD3gk2EXqp8eVzK
+84vPEcNC8Moii8+qg48VDh9wBq1u/cba2U7PcVjj3lRk/pAni31XnlXLPWJ0dZLF
+fR4glE86ESTGSyI2wGDxyEdev+e64sk7geYmL388kqtpqkKWvALmQkKUJg0T0ppp
+LYv31DrsP4QM1duv46y3wVbqUPeQlKBOU81vfyAonrD02tRZjwRpCD67CZ9WSgZu
+el85yPneIIijYEOzV8GYHKNiiZKpu2uidKCe+MFGxBtXe9hyi9x95tuyi9/pu2FB
+YjbGJ8Wb4xhS7zdDWZb/axfwbcGMVml6a6xA98jVkwjHhPvKsf3qWVZZPtWneeN0
+pGNpMta73wQxrp5/W1GfvBfPVlsker6SAARg2NMwS9Wmp+ZuD6gdJ+aN0/PPtNUd
+HQJJFjr/xo4=
+=nx9E
+-----END PGP SIGNATURE-----
diff --git a/external/perl/Text-Template-1.56/lib/Text/Template.pm b/external/perl/Text-Template-1.56/lib/Text/Template.pm
new file mode 100644
index 000000000000..be38c73ce457
--- /dev/null
+++ b/external/perl/Text-Template-1.56/lib/Text/Template.pm
@@ -0,0 +1,2363 @@
+# -*- perl -*-
+# Text::Template.pm
+#
+# Fill in `templates'
+#
+# Copyright 2013 M. J. Dominus.
+# You may copy and distribute this program under the
+# same terms as Perl itself.
+# If in doubt, write to mjd-perl-template+@plover.com for a license.
+#
+
+package Text::Template;
+$Text::Template::VERSION = '1.56';
+# ABSTRACT: Expand template text with embedded Perl
+
+use strict;
+use warnings;
+
+require 5.008;
+
+use base 'Exporter';
+
+our @EXPORT_OK = qw(fill_in_file fill_in_string TTerror);
+our $ERROR;
+
+my %GLOBAL_PREPEND = ('Text::Template' => '');
+
+sub Version {
+ $Text::Template::VERSION;
+}
+
+sub _param {
+ my ($k, %h) = @_;
+
+ for my $kk ($k, "\u$k", "\U$k", "-$k", "-\u$k", "-\U$k") {
+ return $h{$kk} if exists $h{$kk};
+ }
+
+ return undef;
+}
+
+sub always_prepend {
+ my $pack = shift;
+
+ my $old = $GLOBAL_PREPEND{$pack};
+
+ $GLOBAL_PREPEND{$pack} = shift;
+
+ $old;
+}
+
+{
+ my %LEGAL_TYPE;
+
+ BEGIN {
+ %LEGAL_TYPE = map { $_ => 1 } qw(FILE FILEHANDLE STRING ARRAY);
+ }
+
+ sub new {
+ my ($pack, %a) = @_;
+
+ my $stype = uc(_param('type', %a) || "FILE");
+ my $source = _param('source', %a);
+ my $untaint = _param('untaint', %a);
+ my $prepend = _param('prepend', %a);
+ my $alt_delim = _param('delimiters', %a);
+ my $broken = _param('broken', %a);
+ my $encoding = _param('encoding', %a);
+
+ unless (defined $source) {
+ require Carp;
+ Carp::croak("Usage: $ {pack}::new(TYPE => ..., SOURCE => ...)");
+ }
+
+ unless ($LEGAL_TYPE{$stype}) {
+ require Carp;
+ Carp::croak("Illegal value `$stype' for TYPE parameter");
+ }
+
+ my $self = {
+ TYPE => $stype,
+ PREPEND => $prepend,
+ UNTAINT => $untaint,
+ BROKEN => $broken,
+ ENCODING => $encoding,
+ (defined $alt_delim ? (DELIM => $alt_delim) : ())
+ };
+
+ # Under 5.005_03, if any of $stype, $prepend, $untaint, or $broken
+ # are tainted, all the others become tainted too as a result of
+ # sharing the expression with them. We install $source separately
+ # to prevent it from acquiring a spurious taint.
+ $self->{SOURCE} = $source;
+
+ bless $self => $pack;
+ return unless $self->_acquire_data;
+
+ $self;
+ }
+}
+
+# Convert template objects of various types to type STRING,
+# in which the template data is embedded in the object itself.
+sub _acquire_data {
+ my $self = shift;
+
+ my $type = $self->{TYPE};
+
+ if ($type eq 'STRING') {
+ # nothing necessary
+ }
+ elsif ($type eq 'FILE') {
+ my $data = _load_text($self->{SOURCE});
+ unless (defined $data) {
+
+ # _load_text already set $ERROR
+ return undef;
+ }
+
+ if ($self->{UNTAINT} && _is_clean($self->{SOURCE})) {
+ _unconditionally_untaint($data);
+ }
+
+ if (defined $self->{ENCODING}) {
+ require Encode;
+ $data = Encode::decode($self->{ENCODING}, $data, &Encode::FB_CROAK);
+ }
+
+ $self->{TYPE} = 'STRING';
+ $self->{FILENAME} = $self->{SOURCE};
+ $self->{SOURCE} = $data;
+ }
+ elsif ($type eq 'ARRAY') {
+ $self->{TYPE} = 'STRING';
+ $self->{SOURCE} = join '', @{ $self->{SOURCE} };
+ }
+ elsif ($type eq 'FILEHANDLE') {
+ $self->{TYPE} = 'STRING';
+ local $/;
+ my $fh = $self->{SOURCE};
+ my $data = <$fh>; # Extra assignment avoids bug in Solaris perl5.00[45].
+ if ($self->{UNTAINT}) {
+ _unconditionally_untaint($data);
+ }
+ $self->{SOURCE} = $data;
+ }
+ else {
+ # This should have been caught long ago, so it represents a
+ # drastic `can't-happen' sort of failure
+ my $pack = ref $self;
+ die "Can only acquire data for $pack objects of subtype STRING, but this is $type; aborting";
+ }
+
+ $self->{DATA_ACQUIRED} = 1;
+}
+
+sub source {
+ my $self = shift;
+
+ $self->_acquire_data unless $self->{DATA_ACQUIRED};
+
+ return $self->{SOURCE};
+}
+
+sub set_source_data {
+ my ($self, $newdata, $type) = @_;
+
+ $self->{SOURCE} = $newdata;
+ $self->{DATA_ACQUIRED} = 1;
+ $self->{TYPE} = $type || 'STRING';
+
+ 1;
+}
+
+sub compile {
+ my $self = shift;
+
+ return 1 if $self->{TYPE} eq 'PREPARSED';
+
+ return undef unless $self->_acquire_data;
+
+ unless ($self->{TYPE} eq 'STRING') {
+ my $pack = ref $self;
+
+ # This should have been caught long ago, so it represents a
+ # drastic `can't-happen' sort of failure
+ die "Can only compile $pack objects of subtype STRING, but this is $self->{TYPE}; aborting";
+ }
+
+ my @tokens;
+ my $delim_pats = shift() || $self->{DELIM};
+
+ my ($t_open, $t_close) = ('{', '}');
+ my $DELIM; # Regex matches a delimiter if $delim_pats
+
+ if (defined $delim_pats) {
+ ($t_open, $t_close) = @$delim_pats;
+ $DELIM = "(?:(?:\Q$t_open\E)|(?:\Q$t_close\E))";
+ @tokens = split /($DELIM|\n)/, $self->{SOURCE};
+ }
+ else {
+ @tokens = split /(\\\\(?=\\*[{}])|\\[{}]|[{}\n])/, $self->{SOURCE};
+ }
+
+ my $state = 'TEXT';
+ my $depth = 0;
+ my $lineno = 1;
+ my @content;
+ my $cur_item = '';
+ my $prog_start;
+
+ while (@tokens) {
+ my $t = shift @tokens;
+
+ next if $t eq '';
+
+ if ($t eq $t_open) { # Brace or other opening delimiter
+ if ($depth == 0) {
+ push @content, [ $state, $cur_item, $lineno ] if $cur_item ne '';
+ $cur_item = '';
+ $state = 'PROG';
+ $prog_start = $lineno;
+ }
+ else {
+ $cur_item .= $t;
+ }
+ $depth++;
+ }
+ elsif ($t eq $t_close) { # Brace or other closing delimiter
+ $depth--;
+ if ($depth < 0) {
+ $ERROR = "Unmatched close brace at line $lineno";
+ return undef;
+ }
+ elsif ($depth == 0) {
+ push @content, [ $state, $cur_item, $prog_start ] if $cur_item ne '';
+ $state = 'TEXT';
+ $cur_item = '';
+ }
+ else {
+ $cur_item .= $t;
+ }
+ }
+ elsif (!$delim_pats && $t eq '\\\\') { # precedes \\\..\\\{ or \\\..\\\}
+ $cur_item .= '\\';
+ }
+ elsif (!$delim_pats && $t =~ /^\\([{}])$/) { # Escaped (literal) brace?
+ $cur_item .= $1;
+ }
+ elsif ($t eq "\n") { # Newline
+ $lineno++;
+ $cur_item .= $t;
+ }
+ else { # Anything else
+ $cur_item .= $t;
+ }
+ }
+
+ if ($state eq 'PROG') {
+ $ERROR = "End of data inside program text that began at line $prog_start";
+ return undef;
+ }
+ elsif ($state eq 'TEXT') {
+ push @content, [ $state, $cur_item, $lineno ] if $cur_item ne '';
+ }
+ else {
+ die "Can't happen error #1";
+ }
+
+ $self->{TYPE} = 'PREPARSED';
+ $self->{SOURCE} = \@content;
+
+ 1;
+}
+
+sub prepend_text {
+ my $self = shift;
+
+ my $t = $self->{PREPEND};
+
+ unless (defined $t) {
+ $t = $GLOBAL_PREPEND{ ref $self };
+ unless (defined $t) {
+ $t = $GLOBAL_PREPEND{'Text::Template'};
+ }
+ }
+
+ $self->{PREPEND} = $_[1] if $#_ >= 1;
+
+ return $t;
+}
+
+sub fill_in {
+ my ($fi_self, %fi_a) = @_;
+
+ unless ($fi_self->{TYPE} eq 'PREPARSED') {
+ my $delims = _param('delimiters', %fi_a);
+ my @delim_arg = (defined $delims ? ($delims) : ());
+ $fi_self->compile(@delim_arg)
+ or return undef;
+ }
+
+ my $fi_varhash = _param('hash', %fi_a);
+ my $fi_package = _param('package', %fi_a);
+ my $fi_broken = _param('broken', %fi_a) || $fi_self->{BROKEN} || \&_default_broken;
+ my $fi_broken_arg = _param('broken_arg', %fi_a) || [];
+ my $fi_safe = _param('safe', %fi_a);
+ my $fi_ofh = _param('output', %fi_a);
+ my $fi_filename = _param('filename', %fi_a) || $fi_self->{FILENAME} || 'template';
+ my $fi_strict = _param('strict', %fi_a);
+ my $fi_prepend = _param('prepend', %fi_a);
+
+ my $fi_eval_package;
+ my $fi_scrub_package = 0;
+
+ unless (defined $fi_prepend) {
+ $fi_prepend = $fi_self->prepend_text;
+ }
+
+ if (defined $fi_safe) {
+ $fi_eval_package = 'main';
+ }
+ elsif (defined $fi_package) {
+ $fi_eval_package = $fi_package;
+ }
+ elsif (defined $fi_varhash) {
+ $fi_eval_package = _gensym();
+ $fi_scrub_package = 1;
+ }
+ else {
+ $fi_eval_package = caller;
+ }
+
+ my @fi_varlist;
+ my $fi_install_package;
+
+ if (defined $fi_varhash) {
+ if (defined $fi_package) {
+ $fi_install_package = $fi_package;
+ }
+ elsif (defined $fi_safe) {
+ $fi_install_package = $fi_safe->root;
+ }
+ else {
+ $fi_install_package = $fi_eval_package; # The gensymmed one
+ }
+ @fi_varlist = _install_hash($fi_varhash => $fi_install_package);
+ if ($fi_strict) {
+ $fi_prepend = "use vars qw(@fi_varlist);$fi_prepend" if @fi_varlist;
+ $fi_prepend = "use strict;$fi_prepend";
+ }
+ }
+
+ if (defined $fi_package && defined $fi_safe) {
+ no strict 'refs';
+
+ # Big fat magic here: Fix it so that the user-specified package
+ # is the default one available in the safe compartment.
+ *{ $fi_safe->root . '::' } = \%{ $fi_package . '::' }; # LOD
+ }
+
+ my $fi_r = '';
+ my $fi_item;
+ foreach $fi_item (@{ $fi_self->{SOURCE} }) {
+ my ($fi_type, $fi_text, $fi_lineno) = @$fi_item;
+ if ($fi_type eq 'TEXT') {
+ $fi_self->append_text_to_output(
+ text => $fi_text,
+ handle => $fi_ofh,
+ out => \$fi_r,
+ type => $fi_type,);
+ }
+ elsif ($fi_type eq 'PROG') {
+ no strict;
+
+ my $fi_lcomment = "#line $fi_lineno $fi_filename";
+ my $fi_progtext = "package $fi_eval_package; $fi_prepend;\n$fi_lcomment\n$fi_text;\n;";
+ my $fi_res;
+ my $fi_eval_err = '';
+
+ if ($fi_safe) {
+ no strict;
+ no warnings;
+
+ $fi_safe->reval(q{undef $OUT});
+ $fi_res = $fi_safe->reval($fi_progtext);
+ $fi_eval_err = $@;
+ my $OUT = $fi_safe->reval('$OUT');
+ $fi_res = $OUT if defined $OUT;
+ }
+ else {
+ no strict;
+ no warnings;
+
+ my $OUT;
+ $fi_res = eval $fi_progtext;
+ $fi_eval_err = $@;
+ $fi_res = $OUT if defined $OUT;
+ }
+
+ # If the value of the filled-in text really was undef,
+ # change it to an explicit empty string to avoid undefined
+ # value warnings later.
+ $fi_res = '' unless defined $fi_res;
+
+ if ($fi_eval_err) {
+ $fi_res = $fi_broken->(
+ text => $fi_text,
+ error => $fi_eval_err,
+ lineno => $fi_lineno,
+ arg => $fi_broken_arg,);
+ if (defined $fi_res) {
+ $fi_self->append_text_to_output(
+ text => $fi_res,
+ handle => $fi_ofh,
+ out => \$fi_r,
+ type => $fi_type,);
+ }
+ else {
+ return $fi_r; # Undefined means abort processing
+ }
+ }
+ else {
+ $fi_self->append_text_to_output(
+ text => $fi_res,
+ handle => $fi_ofh,
+ out => \$fi_r,
+ type => $fi_type,);
+ }
+ }
+ else {
+ die "Can't happen error #2";
+ }
+ }
+
+ _scrubpkg($fi_eval_package) if $fi_scrub_package;
+
+ defined $fi_ofh ? 1 : $fi_r;
+}
+
+sub append_text_to_output {
+ my ($self, %arg) = @_;
+
+ if (defined $arg{handle}) {
+ print { $arg{handle} } $arg{text};
+ }
+ else {
+ ${ $arg{out} } .= $arg{text};
+ }
+
+ return;
+}
+
+sub fill_this_in {
+ my ($pack, $text) = splice @_, 0, 2;
+
+ my $templ = $pack->new(TYPE => 'STRING', SOURCE => $text, @_)
+ or return undef;
+
+ $templ->compile or return undef;
+
+ my $result = $templ->fill_in(@_);
+
+ $result;
+}
+
+sub fill_in_string {
+ my $string = shift;
+
+ my $package = _param('package', @_);
+
+ push @_, 'package' => scalar(caller) unless defined $package;
+
+ Text::Template->fill_this_in($string, @_);
+}
+
+sub fill_in_file {
+ my $fn = shift;
+ my $templ = Text::Template->new(TYPE => 'FILE', SOURCE => $fn, @_) or return undef;
+
+ $templ->compile or return undef;
+
+ my $text = $templ->fill_in(@_);
+
+ $text;
+}
+
+sub _default_broken {
+ my %a = @_;
+
+ my $prog_text = $a{text};
+ my $err = $a{error};
+ my $lineno = $a{lineno};
+
+ chomp $err;
+
+ # $err =~ s/\s+at .*//s;
+ "Program fragment delivered error ``$err''";
+}
+
+sub _load_text {
+ my $fn = shift;
+
+ open my $fh, '<', $fn or do {
+ $ERROR = "Couldn't open file $fn: $!";
+ return undef;
+ };
+
+ local $/;
+
+ <$fh>;
+}
+
+sub _is_clean {
+ my $z;
+
+ eval { ($z = join('', @_)), eval '#' . substr($z, 0, 0); 1 } # LOD
+}
+
+sub _unconditionally_untaint {
+ for (@_) {
+ ($_) = /(.*)/s;
+ }
+}
+
+{
+ my $seqno = 0;
+
+ sub _gensym {
+ __PACKAGE__ . '::GEN' . $seqno++;
+ }
+
+ sub _scrubpkg {
+ my $s = shift;
+
+ $s =~ s/^Text::Template:://;
+
+ no strict 'refs';
+
+ my $hash = $Text::Template::{ $s . "::" };
+
+ foreach my $key (keys %$hash) {
+ undef $hash->{$key};
+ }
+
+ %$hash = ();
+
+ delete $Text::Template::{ $s . "::" };
+ }
+}
+
+# Given a hashful of variables (or a list of such hashes)
+# install the variables into the specified package,
+# overwriting whatever variables were there before.
+sub _install_hash {
+ my $hashlist = shift;
+ my $dest = shift;
+
+ if (UNIVERSAL::isa($hashlist, 'HASH')) {
+ $hashlist = [$hashlist];
+ }
+
+ my @varlist;
+
+ for my $hash (@$hashlist) {
+ for my $name (keys %$hash) {
+ my $val = $hash->{$name};
+
+ no strict 'refs';
+ no warnings 'redefine';
+
+ local *SYM = *{"$ {dest}::$name"};
+
+ if (!defined $val) {
+ delete ${"$ {dest}::"}{$name};
+ my $match = qr/^.\Q$name\E$/;
+ @varlist = grep { $_ !~ $match } @varlist;
+ }
+ elsif (ref $val) {
+ *SYM = $val;
+ push @varlist, do {
+ if (UNIVERSAL::isa($val, 'ARRAY')) { '@' }
+ elsif (UNIVERSAL::isa($val, 'HASH')) { '%' }
+ else { '$' }
+ }
+ . $name;
+ }
+ else {
+ *SYM = \$val;
+ push @varlist, '$' . $name;
+ }
+ }
+ }
+
+ @varlist;
+}
+
+sub TTerror { $ERROR }
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Text::Template - Expand template text with embedded Perl
+
+=head1 VERSION
+
+version 1.56
+
+=head1 SYNOPSIS
+
+ use Text::Template;
+
+
+ $template = Text::Template->new(TYPE => 'FILE', SOURCE => 'filename.tmpl');
+ $template = Text::Template->new(TYPE => 'ARRAY', SOURCE => [ ... ] );
+ $template = Text::Template->new(TYPE => 'FILEHANDLE', SOURCE => $fh );
+ $template = Text::Template->new(TYPE => 'STRING', SOURCE => '...' );
+ $template = Text::Template->new(PREPEND => q{use strict;}, ...);
+
+ # Use a different template file syntax:
+ $template = Text::Template->new(DELIMITERS => [$open, $close], ...);
+
+ $recipient = 'King';
+ $text = $template->fill_in(); # Replaces `{$recipient}' with `King'
+ print $text;
+
+ $T::recipient = 'Josh';
+ $text = $template->fill_in(PACKAGE => T);
+
+ # Pass many variables explicitly
+ $hash = { recipient => 'Abed-Nego',
+ friends => [ 'me', 'you' ],
+ enemies => { loathsome => 'Saruman',
+ fearsome => 'Sauron' },
+ };
+ $text = $template->fill_in(HASH => $hash, ...);
+ # $recipient is Abed-Nego,
+ # @friends is ( 'me', 'you' ),
+ # %enemies is ( loathsome => ..., fearsome => ... )
+
+
+ # Call &callback in case of programming errors in template
+ $text = $template->fill_in(BROKEN => \&callback, BROKEN_ARG => $ref, ...);
+
+ # Evaluate program fragments in Safe compartment with restricted permissions
+ $text = $template->fill_in(SAFE => $compartment, ...);
+
+ # Print result text instead of returning it
+ $success = $template->fill_in(OUTPUT => \*FILEHANDLE, ...);
+
+ # Parse template with different template file syntax:
+ $text = $template->fill_in(DELIMITERS => [$open, $close], ...);
+ # Note that this is *faster* than using the default delimiters
+
+ # Prepend specified perl code to each fragment before evaluating:
+ $text = $template->fill_in(PREPEND => q{use strict 'vars';}, ...);
+
+ use Text::Template 'fill_in_string';
+ $text = fill_in_string( <<EOM, PACKAGE => 'T', ...);
+ Dear {$recipient},
+ Pay me at once.
+ Love,
+ G.V.
+ EOM
+
+ use Text::Template 'fill_in_file';
+ $text = fill_in_file($filename, ...);
+
+ # All templates will always have `use strict vars' attached to all fragments
+ Text::Template->always_prepend(q{use strict 'vars';});
+
+=head1 DESCRIPTION
+
+This is a library for generating form letters, building HTML pages, or
+filling in templates generally. A `template' is a piece of text that
+has little Perl programs embedded in it here and there. When you
+`fill in' a template, you evaluate the little programs and replace
+them with their values.
+
+You can store a template in a file outside your program. People can
+modify the template without modifying the program. You can separate
+the formatting details from the main code, and put the formatting
+parts of the program into the template. That prevents code bloat and
+encourages functional separation.
+
+=head2 Example
+
+Here's an example of a template, which we'll suppose is stored in the
+file C<formletter.tmpl>:
+
+ Dear {$title} {$lastname},
+
+ It has come to our attention that you are delinquent in your
+ {$monthname[$last_paid_month]} payment. Please remit
+ ${sprintf("%.2f", $amount)} immediately, or your patellae may
+ be needlessly endangered.
+
+ Love,
+
+ Mark "Vizopteryx" Dominus
+
+The result of filling in this template is a string, which might look
+something like this:
+
+ Dear Mr. Smith,
+
+ It has come to our attention that you are delinquent in your
+ February payment. Please remit
+ $392.12 immediately, or your patellae may
+ be needlessly endangered.
+
+
+ Love,
+
+ Mark "Vizopteryx" Dominus
+
+Here is a complete program that transforms the example
+template into the example result, and prints it out:
+
+ use Text::Template;
+
+ my $template = Text::Template->new(SOURCE => 'formletter.tmpl')
+ or die "Couldn't construct template: $Text::Template::ERROR";
+
+ my @monthname = qw(January February March April May June
+ July August September October November December);
+ my %vars = (title => 'Mr.',
+ firstname => 'John',
+ lastname => 'Smith',
+ last_paid_month => 1, # February
+ amount => 392.12,
+ monthname => \@monthname);
+
+ my $result = $template->fill_in(HASH => \%vars);
+
+ if (defined $result) { print $result }
+ else { die "Couldn't fill in template: $Text::Template::ERROR" }
+
+=head2 Philosophy
+
+When people make a template module like this one, they almost always
+start by inventing a special syntax for substitutions. For example,
+they build it so that a string like C<%%VAR%%> is replaced with the
+value of C<$VAR>. Then they realize the need extra formatting, so
+they put in some special syntax for formatting. Then they need a
+loop, so they invent a loop syntax. Pretty soon they have a new
+little template language.
+
+This approach has two problems: First, their little language is
+crippled. If you need to do something the author hasn't thought of,
+you lose. Second: Who wants to learn another language? You already
+know Perl, so why not use it?
+
+C<Text::Template> templates are programmed in I<Perl>. You embed Perl
+code in your template, with C<{> at the beginning and C<}> at the end.
+If you want a variable interpolated, you write it the way you would in
+Perl. If you need to make a loop, you can use any of the Perl loop
+constructions. All the Perl built-in functions are available.
+
+=head1 Details
+
+=head2 Template Parsing
+
+The C<Text::Template> module scans the template source. An open brace
+C<{> begins a program fragment, which continues until the matching
+close brace C<}>. When the template is filled in, the program
+fragments are evaluated, and each one is replaced with the resulting
+value to yield the text that is returned.
+
+A backslash C<\> in front of a brace (or another backslash that is in
+front of a brace) escapes its special meaning. The result of filling
+out this template:
+
+ \{ The sum of 1 and 2 is {1+2} \}
+
+is
+
+ { The sum of 1 and 2 is 3 }
+
+If you have an unmatched brace, C<Text::Template> will return a
+failure code and a warning about where the problem is. Backslashes
+that do not precede a brace are passed through unchanged. If you have
+a template like this:
+
+ { "String that ends in a newline.\n" }
+
+The backslash inside the string is passed through to Perl unchanged,
+so the C<\n> really does turn into a newline. See the note at the end
+for details about the way backslashes work. Backslash processing is
+I<not> done when you specify alternative delimiters with the
+C<DELIMITERS> option. (See L<"Alternative Delimiters">, below.)
+
+Each program fragment should be a sequence of Perl statements, which
+are evaluated the usual way. The result of the last statement
+executed will be evaluated in scalar context; the result of this
+statement is a string, which is interpolated into the template in
+place of the program fragment itself.
+
+The fragments are evaluated in order, and side effects from earlier
+fragments will persist into later fragments:
+
+ {$x = @things; ''}The Lord High Chamberlain has gotten {$x}
+ things for me this year.
+ { $diff = $x - 17;
+ $more = 'more'
+ if ($diff == 0) {
+ $diff = 'no';
+ } elsif ($diff < 0) {
+ $more = 'fewer';
+ }
+ '';
+ }
+ That is {$diff} {$more} than he gave me last year.
+
+The value of C<$x> set in the first line will persist into the next
+fragment that begins on the third line, and the values of C<$diff> and
+C<$more> set in the second fragment will persist and be interpolated
+into the last line. The output will look something like this:
+
+ The Lord High Chamberlain has gotten 42
+ things for me this year.
+
+ That is 25 more than he gave me last year.
+
+That is all the syntax there is.
+
+=head2 The C<$OUT> variable
+
+There is one special trick you can play in a template. Here is the
+motivation for it: Suppose you are going to pass an array, C<@items>,
+into the template, and you want the template to generate a bulleted
+list with a header, like this:
+
+ Here is a list of the things I have got for you since 1907:
+ * Ivory
+ * Apes
+ * Peacocks
+ * ...
+
+One way to do it is with a template like this:
+
+ Here is a list of the things I have got for you since 1907:
+ { my $blist = '';
+ foreach $i (@items) {
+ $blist .= qq{ * $i\n};
+ }
+ $blist;
+ }
+
+Here we construct the list in a variable called C<$blist>, which we
+return at the end. This is a little cumbersome. There is a shortcut.
+
+Inside of templates, there is a special variable called C<$OUT>.
+Anything you append to this variable will appear in the output of the
+template. Also, if you use C<$OUT> in a program fragment, the normal
+behavior, of replacing the fragment with its return value, is
+disabled; instead the fragment is replaced with the value of C<$OUT>.
+This means that you can write the template above like this:
+
+ Here is a list of the things I have got for you since 1907:
+ { foreach $i (@items) {
+ $OUT .= " * $i\n";
+ }
+ }
+
+C<$OUT> is reinitialized to the empty string at the start of each
+program fragment. It is private to C<Text::Template>, so
+you can't use a variable named C<$OUT> in your template without
+invoking the special behavior.
+
+=head2 General Remarks
+
+All C<Text::Template> functions return C<undef> on failure, and set the
+variable C<$Text::Template::ERROR> to contain an explanation of what
+went wrong. For example, if you try to create a template from a file
+that does not exist, C<$Text::Template::ERROR> will contain something like:
+
+ Couldn't open file xyz.tmpl: No such file or directory
+
+=head2 C<new>
+
+ $template = Text::Template->new( TYPE => ..., SOURCE => ... );
+
+This creates and returns a new template object. C<new> returns
+C<undef> and sets C<$Text::Template::ERROR> if it can't create the
+template object. C<SOURCE> says where the template source code will
+come from. C<TYPE> says what kind of object the source is.
+
+The most common type of source is a file:
+
+ Text::Template->new( TYPE => 'FILE', SOURCE => $filename );
+
+This reads the template from the specified file. The filename is
+opened with the Perl C<open> command, so it can be a pipe or anything
+else that makes sense with C<open>.
+
+The C<TYPE> can also be C<STRING>, in which case the C<SOURCE> should
+be a string:
+
+ Text::Template->new( TYPE => 'STRING',
+ SOURCE => "This is the actual template!" );
+
+The C<TYPE> can be C<ARRAY>, in which case the source should be a
+reference to an array of strings. The concatenation of these strings
+is the template:
+
+ Text::Template->new( TYPE => 'ARRAY',
+ SOURCE => [ "This is ", "the actual",
+ " template!",
+ ]
+ );
+
+The C<TYPE> can be FILEHANDLE, in which case the source should be an
+open filehandle (such as you got from the C<FileHandle> or C<IO::*>
+packages, or a glob, or a reference to a glob). In this case
+C<Text::Template> will read the text from the filehandle up to
+end-of-file, and that text is the template:
+
+ # Read template source code from STDIN:
+ Text::Template->new ( TYPE => 'FILEHANDLE',
+ SOURCE => \*STDIN );
+
+If you omit the C<TYPE> attribute, it's taken to be C<FILE>.
+C<SOURCE> is required. If you omit it, the program will abort.
+
+The words C<TYPE> and C<SOURCE> can be spelled any of the following ways:
+
+ TYPE SOURCE
+ Type Source
+ type source
+ -TYPE -SOURCE
+ -Type -Source
+ -type -source
+
+Pick a style you like and stick with it.
+
+=over 4
+
+=item C<DELIMITERS>
+
+You may also add a C<DELIMITERS> option. If this option is present,
+its value should be a reference to an array of two strings. The first
+string is the string that signals the beginning of each program
+fragment, and the second string is the string that signals the end of
+each program fragment. See L<"Alternative Delimiters">, below.
+
+=item C<ENCODING>
+
+You may also add a C<ENCODING> option. If this option is present, and the
+C<SOURCE> is a C<FILE>, then the data will be decoded from the given encoding
+using the L<Encode> module. You can use any encoding that L<Encode> recognizes.
+E.g.:
+
+ Text::Template->new(
+ TYPE => 'FILE',
+ ENCODING => 'UTF-8',
+ SOURCE => 'xyz.tmpl');
+
+=item C<UNTAINT>
+
+If your program is running in taint mode, you may have problems if
+your templates are stored in files. Data read from files is
+considered 'untrustworthy', and taint mode will not allow you to
+evaluate the Perl code in the file. (It is afraid that a malicious
+person might have tampered with the file.)
+
+In some environments, however, local files are trustworthy. You can
+tell C<Text::Template> that a certain file is trustworthy by supplying
+C<UNTAINT =E<gt> 1> in the call to C<new>. This will tell
+C<Text::Template> to disable taint checks on template code that has
+come from a file, as long as the filename itself is considered
+trustworthy. It will also disable taint checks on template code that
+comes from a filehandle. When used with C<TYPE =E<gt> 'string'> or C<TYPE
+=E<gt> 'array'>, it has no effect.
+
+See L<perlsec> for more complete information about tainting.
+
+Thanks to Steve Palincsar, Gerard Vreeswijk, and Dr. Christoph Baehr
+for help with this feature.
+
+=item C<PREPEND>
+
+This option is passed along to the C<fill_in> call unless it is
+overridden in the arguments to C<fill_in>. See L<C<PREPEND> feature
+and using C<strict> in templates> below.
+
+=item C<BROKEN>
+
+This option is passed along to the C<fill_in> call unless it is
+overridden in the arguments to C<fill_in>. See L<C<BROKEN>> below.
+
+=back
+
+=head2 C<compile>
+
+ $template->compile()
+
+Loads all the template text from the template's source, parses and
+compiles it. If successful, returns true; otherwise returns false and
+sets C<$Text::Template::ERROR>. If the template is already compiled,
+it returns true and does nothing.
+
+You don't usually need to invoke this function, because C<fill_in>
+(see below) compiles the template if it isn't compiled already.
+
+If there is an argument to this function, it must be a reference to an
+array containing alternative delimiter strings. See C<"Alternative
+Delimiters">, below.
+
+=head2 C<fill_in>
+
+ $template->fill_in(OPTIONS);
+
+Fills in a template. Returns the resulting text if successful.
+Otherwise, returns C<undef> and sets C<$Text::Template::ERROR>.
+
+The I<OPTIONS> are a hash, or a list of key-value pairs. You can
+write the key names in any of the six usual styles as above; this
+means that where this manual says C<PACKAGE> (for example) you can
+actually use any of
+
+ PACKAGE Package package -PACKAGE -Package -package
+
+Pick a style you like and stick with it. The all-lowercase versions
+may yield spurious warnings about
+
+ Ambiguous use of package => resolved to "package"
+
+so you might like to avoid them and use the capitalized versions.
+
+At present, there are eight legal options: C<PACKAGE>, C<BROKEN>,
+C<BROKEN_ARG>, C<FILENAME>, C<SAFE>, C<HASH>, C<OUTPUT>, and C<DELIMITERS>.
+
+=over 4
+
+=item C<PACKAGE>
+
+C<PACKAGE> specifies the name of a package in which the program
+fragments should be evaluated. The default is to use the package from
+which C<fill_in> was called. For example, consider this template:
+
+ The value of the variable x is {$x}.
+
+If you use C<$template-E<gt>fill_in(PACKAGE =E<gt> 'R')> , then the C<$x> in
+the template is actually replaced with the value of C<$R::x>. If you
+omit the C<PACKAGE> option, C<$x> will be replaced with the value of
+the C<$x> variable in the package that actually called C<fill_in>.
+
+You should almost always use C<PACKAGE>. If you don't, and your
+template makes changes to variables, those changes will be propagated
+back into the main program. Evaluating the template in a private
+package helps prevent this. The template can still modify variables
+in your program if it wants to, but it will have to do so explicitly.
+See the section at the end on `Security'.
+
+Here's an example of using C<PACKAGE>:
+
+ Your Royal Highness,
+
+ Enclosed please find a list of things I have gotten
+ for you since 1907:
+
+ { foreach $item (@items) {
+ $item_no++;
+ $OUT .= " $item_no. \u$item\n";
+ }
+ }
+
+ Signed,
+ Lord High Chamberlain
+
+We want to pass in an array which will be assigned to the array
+C<@items>. Here's how to do that:
+
+ @items = ('ivory', 'apes', 'peacocks', );
+ $template->fill_in();
+
+This is not very safe. The reason this isn't as safe is that if you
+had a variable named C<$item_no> in scope in your program at the point
+you called C<fill_in>, its value would be clobbered by the act of
+filling out the template. The problem is the same as if you had
+written a subroutine that used those variables in the same way that
+the template does. (C<$OUT> is special in templates and is always
+safe.)
+
+One solution to this is to make the C<$item_no> variable private to the
+template by declaring it with C<my>. If the template does this, you
+are safe.
+
+But if you use the C<PACKAGE> option, you will probably be safe even
+if the template does I<not> declare its variables with C<my>:
+
+ @Q::items = ('ivory', 'apes', 'peacocks', );
+ $template->fill_in(PACKAGE => 'Q');
+
+In this case the template will clobber the variable C<$Q::item_no>,
+which is not related to the one your program was using.
+
+Templates cannot affect variables in the main program that are
+declared with C<my>, unless you give the template references to those
+variables.
+
+=item C<HASH>
+
+You may not want to put the template variables into a package.
+Packages can be hard to manage: You can't copy them, for example.
+C<HASH> provides an alternative.
+
+The value for C<HASH> should be a reference to a hash that maps
+variable names to values. For example,
+
+ $template->fill_in(
+ HASH => {
+ recipient => "The King",
+ items => ['gold', 'frankincense', 'myrrh'],
+ object => \$self,
+ }
+ );
+
+will fill out the template and use C<"The King"> as the value of
+C<$recipient> and the list of items as the value of C<@items>. Note
+that we pass an array reference, but inside the template it appears as
+an array. In general, anything other than a simple string or number
+should be passed by reference.
+
+We also want to pass an object, which is in C<$self>; note that we
+pass a reference to the object, C<\$self> instead. Since we've passed
+a reference to a scalar, inside the template the object appears as
+C<$object>.
+
+The full details of how it works are a little involved, so you might
+want to skip to the next section.
+
+Suppose the key in the hash is I<key> and the value is I<value>.
+
+=over 4
+
+=item *
+
+If the I<value> is C<undef>, then any variables named C<$key>,
+C<@key>, C<%key>, etc., are undefined.
+
+=item *
+
+If the I<value> is a string or a number, then C<$key> is set to that
+value in the template.
+
+=item *
+
+For anything else, you must pass a reference.
+
+If the I<value> is a reference to an array, then C<@key> is set to
+that array. If the I<value> is a reference to a hash, then C<%key> is
+set to that hash. Similarly if I<value> is any other kind of
+reference. This means that
+
+ var => "foo"
+
+and
+
+ var => \"foo"
+
+have almost exactly the same effect. (The difference is that in the
+former case, the value is copied, and in the latter case it is
+aliased.)
+
+=item *
+
+In particular, if you want the template to get an object or any kind,
+you must pass a reference to it:
+
+ $template->fill_in(HASH => { database_handle => \$dbh, ... });
+
+If you do this, the template will have a variable C<$database_handle>
+which is the database handle object. If you leave out the C<\>, the
+template will have a hash C<%database_handle>, which exposes the
+internal structure of the database handle object; you don't want that.
+
+=back
+
+Normally, the way this works is by allocating a private package,
+loading all the variables into the package, and then filling out the
+template as if you had specified that package. A new package is
+allocated each time. However, if you I<also> use the C<PACKAGE>
+option, C<Text::Template> loads the variables into the package you
+specified, and they stay there after the call returns. Subsequent
+calls to C<fill_in> that use the same package will pick up the values
+you loaded in.
+
+If the argument of C<HASH> is a reference to an array instead of a
+reference to a hash, then the array should contain a list of hashes
+whose contents are loaded into the template package one after the
+other. You can use this feature if you want to combine several sets
+of variables. For example, one set of variables might be the defaults
+for a fill-in form, and the second set might be the user inputs, which
+override the defaults when they are present:
+
+ $template->fill_in(HASH => [\%defaults, \%user_input]);
+
+You can also use this to set two variables with the same name:
+
+ $template->fill_in(
+ HASH => [
+ { v => "The King" },
+ { v => [1,2,3] }
+ ]
+ );
+
+This sets C<$v> to C<"The King"> and C<@v> to C<(1,2,3)>.
+
+=item C<BROKEN>
+
+If any of the program fragments fails to compile or aborts for any
+reason, and you have set the C<BROKEN> option to a function reference,
+C<Text::Template> will invoke the function. This function is called
+the I<C<BROKEN> function>. The C<BROKEN> function will tell
+C<Text::Template> what to do next.
+
+If the C<BROKEN> function returns C<undef>, C<Text::Template> will
+immediately abort processing the template and return the text that it
+has accumulated so far. If your function does this, it should set a
+flag that you can examine after C<fill_in> returns so that you can
+tell whether there was a premature return or not.
+
+If the C<BROKEN> function returns any other value, that value will be
+interpolated into the template as if that value had been the return
+value of the program fragment to begin with. For example, if the
+C<BROKEN> function returns an error string, the error string will be
+interpolated into the output of the template in place of the program
+fragment that cased the error.
+
+If you don't specify a C<BROKEN> function, C<Text::Template> supplies
+a default one that returns something like
+
+ Program fragment delivered error ``Illegal division by 0 at
+ template line 37''
+
+(Note that the format of this message has changed slightly since
+version 1.31.) The return value of the C<BROKEN> function is
+interpolated into the template at the place the error occurred, so
+that this template:
+
+ (3+4)*5 = { 3+4)*5 }
+
+yields this result:
+
+ (3+4)*5 = Program fragment delivered error ``syntax error at template line 1''
+
+If you specify a value for the C<BROKEN> attribute, it should be a
+reference to a function that C<fill_in> can call instead of the
+default function.
+
+C<fill_in> will pass a hash to the C<broken> function.
+The hash will have at least these three members:
+
+=over 4
+
+=item C<text>
+
+The source code of the program fragment that failed
+
+=item C<error>
+
+The text of the error message (C<$@>) generated by eval.
+
+The text has been modified to omit the trailing newline and to include
+the name of the template file (if there was one). The line number
+counts from the beginning of the template, not from the beginning of
+the failed program fragment.
+
+=item C<lineno>
+
+The line number of the template at which the program fragment began.
+
+=back
+
+There may also be an C<arg> member. See C<BROKEN_ARG>, below
+
+=item C<BROKEN_ARG>
+
+If you supply the C<BROKEN_ARG> option to C<fill_in>, the value of the
+option is passed to the C<BROKEN> function whenever it is called. The
+default C<BROKEN> function ignores the C<BROKEN_ARG>, but you can
+write a custom C<BROKEN> function that uses the C<BROKEN_ARG> to get
+more information about what went wrong.
+
+The C<BROKEN> function could also use the C<BROKEN_ARG> as a reference
+to store an error message or some other information that it wants to
+communicate back to the caller. For example:
+
+ $error = '';
+
+ sub my_broken {
+ my %args = @_;
+ my $err_ref = $args{arg};
+ ...
+ $$err_ref = "Some error message";
+ return undef;
+ }
+
+ $template->fill_in(
+ BROKEN => \&my_broken,
+ BROKEN_ARG => \$error
+ );
+
+ if ($error) {
+ die "It didn't work: $error";
+ }
+
+If one of the program fragments in the template fails, it will call
+the C<BROKEN> function, C<my_broken>, and pass it the C<BROKEN_ARG>,
+which is a reference to C<$error>. C<my_broken> can store an error
+message into C<$error> this way. Then the function that called
+C<fill_in> can see if C<my_broken> has left an error message for it
+to find, and proceed accordingly.
+
+=item C<FILENAME>
+
+If you give C<fill_in> a C<FILENAME> option, then this is the file name that
+you loaded the template source from. This only affects the error message that
+is given for template errors. If you loaded the template from C<foo.txt> for
+example, and pass C<foo.txt> as the C<FILENAME> parameter, errors will look
+like C<... at foo.txt line N> rather than C<... at template line N>.
+
+Note that this does NOT have anything to do with loading a template from the
+given filename. See C<fill_in_file()> for that.
+
+For example:
+
+ my $template = Text::Template->new(
+ TYPE => 'string',
+ SOURCE => 'The value is {1/0}');
+
+ $template->fill_in(FILENAME => 'foo.txt') or die $Text::Template::ERROR;
+
+will die with an error that contains
+
+ Illegal division by zero at at foo.txt line 1
+
+=item C<SAFE>
+
+If you give C<fill_in> a C<SAFE> option, its value should be a safe
+compartment object from the C<Safe> package. All evaluation of
+program fragments will be performed in this compartment. See L<Safe>
+for full details about such compartments and how to restrict the
+operations that can be performed in them.
+
+If you use the C<PACKAGE> option with C<SAFE>, the package you specify
+will be placed into the safe compartment and evaluation will take
+place in that package as usual.
+
+If not, C<SAFE> operation is a little different from the default.
+Usually, if you don't specify a package, evaluation of program
+fragments occurs in the package from which the template was invoked.
+But in C<SAFE> mode the evaluation occurs inside the safe compartment
+and cannot affect the calling package. Normally, if you use C<HASH>
+without C<PACKAGE>, the hash variables are imported into a private,
+one-use-only package. But if you use C<HASH> and C<SAFE> together
+without C<PACKAGE>, the hash variables will just be loaded into the
+root namespace of the C<Safe> compartment.
+
+=item C<OUTPUT>
+
+If your template is going to generate a lot of text that you are just
+going to print out again anyway, you can save memory by having
+C<Text::Template> print out the text as it is generated instead of
+making it into a big string and returning the string. If you supply
+the C<OUTPUT> option to C<fill_in>, the value should be a filehandle.
+The generated text will be printed to this filehandle as it is
+constructed. For example:
+
+ $template->fill_in(OUTPUT => \*STDOUT, ...);
+
+fills in the C<$template> as usual, but the results are immediately
+printed to STDOUT. This may result in the output appearing more
+quickly than it would have otherwise.
+
+If you use C<OUTPUT>, the return value from C<fill_in> is still true on
+success and false on failure, but the complete text is not returned to
+the caller.
+
+=item C<PREPEND>
+
+You can have some Perl code prepended automatically to the beginning
+of every program fragment. See L<C<PREPEND> feature and using
+C<strict> in templates> below.
+
+=item C<DELIMITERS>
+
+If this option is present, its value should be a reference to a list
+of two strings. The first string is the string that signals the
+beginning of each program fragment, and the second string is the
+string that signals the end of each program fragment. See
+L<"Alternative Delimiters">, below.
+
+If you specify C<DELIMITERS> in the call to C<fill_in>, they override
+any delimiters you set when you created the template object with
+C<new>.
+
+=back
+
+=head1 Convenience Functions
+
+=head2 C<fill_this_in>
+
+The basic way to fill in a template is to create a template object and
+then call C<fill_in> on it. This is useful if you want to fill in
+the same template more than once.
+
+In some programs, this can be cumbersome. C<fill_this_in> accepts a
+string, which contains the template, and a list of options, which are
+passed to C<fill_in> as above. It constructs the template object for
+you, fills it in as specified, and returns the results. It returns
+C<undef> and sets C<$Text::Template::ERROR> if it couldn't generate
+any results.
+
+An example:
+
+ $Q::name = 'Donald';
+ $Q::amount = 141.61;
+ $Q::part = 'hyoid bone';
+
+ $text = Text::Template->fill_this_in( <<'EOM', PACKAGE => Q);
+ Dear {$name},
+ You owe me \\${sprintf('%.2f', $amount)}.
+ Pay or I will break your {$part}.
+ Love,
+ Grand Vizopteryx of Irkutsk.
+ EOM
+
+Notice how we included the template in-line in the program by using a
+`here document' with the C<E<lt>E<lt>> notation.
+
+C<fill_this_in> is a deprecated feature. It is only here for
+backwards compatibility, and may be removed in some far-future version
+in C<Text::Template>. You should use C<fill_in_string> instead. It
+is described in the next section.
+
+=head2 C<fill_in_string>
+
+It is stupid that C<fill_this_in> is a class method. It should have
+been just an imported function, so that you could omit the
+C<Text::Template-E<gt>> in the example above. But I made the mistake
+four years ago and it is too late to change it.
+
+C<fill_in_string> is exactly like C<fill_this_in> except that it is
+not a method and you can omit the C<Text::Template-E<gt>> and just say
+
+ print fill_in_string(<<'EOM', ...);
+ Dear {$name},
+ ...
+ EOM
+
+To use C<fill_in_string>, you need to say
+
+ use Text::Template 'fill_in_string';
+
+at the top of your program. You should probably use
+C<fill_in_string> instead of C<fill_this_in>.
+
+=head2 C<fill_in_file>
+
+If you import C<fill_in_file>, you can say
+
+ $text = fill_in_file(filename, ...);
+
+The C<...> are passed to C<fill_in> as above. The filename is the
+name of the file that contains the template you want to fill in. It
+returns the result text. or C<undef>, as usual.
+
+If you are going to fill in the same file more than once in the same
+program you should use the longer C<new> / C<fill_in> sequence instead.
+It will be a lot faster because it only has to read and parse the file
+once.
+
+=head2 Including files into templates
+
+People always ask for this. ``Why don't you have an include
+function?'' they want to know. The short answer is this is Perl, and
+Perl already has an include function. If you want it, you can just put
+
+ {qx{cat filename}}
+
+into your template. VoilE<agrave>.
+
+If you don't want to use C<cat>, you can write a little four-line
+function that opens a file and dumps out its contents, and call it
+from the template. I wrote one for you. In the template, you can say
+
+ {Text::Template::_load_text(filename)}
+
+If that is too verbose, here is a trick. Suppose the template package
+that you are going to be mentioning in the C<fill_in> call is package
+C<Q>. Then in the main program, write
+
+ *Q::include = \&Text::Template::_load_text;
+
+This imports the C<_load_text> function into package C<Q> with the
+name C<include>. From then on, any template that you fill in with
+package C<Q> can say
+
+ {include(filename)}
+
+to insert the text from the named file at that point. If you are
+using the C<HASH> option instead, just put C<include =E<gt>
+\&Text::Template::_load_text> into the hash instead of importing it
+explicitly.
+
+Suppose you don't want to insert a plain text file, but rather you
+want to include one template within another? Just use C<fill_in_file>
+in the template itself:
+
+ {Text::Template::fill_in_file(filename)}
+
+You can do the same importing trick if this is too much to type.
+
+=head1 Miscellaneous
+
+=head2 C<my> variables
+
+People are frequently surprised when this doesn't work:
+
+ my $recipient = 'The King';
+ my $text = fill_in_file('formletter.tmpl');
+
+The text C<The King> doesn't get into the form letter. Why not?
+Because C<$recipient> is a C<my> variable, and the whole point of
+C<my> variables is that they're private and inaccessible except in the
+scope in which they're declared. The template is not part of that
+scope, so the template can't see C<$recipient>.
+
+If that's not the behavior you want, don't use C<my>. C<my> means a
+private variable, and in this case you don't want the variable to be
+private. Put the variables into package variables in some other
+package, and use the C<PACKAGE> option to C<fill_in>:
+
+ $Q::recipient = $recipient;
+ my $text = fill_in_file('formletter.tmpl', PACKAGE => 'Q');
+
+or pass the names and values in a hash with the C<HASH> option:
+
+ my $text = fill_in_file('formletter.tmpl', HASH => { recipient => $recipient });
+
+=head2 Security Matters
+
+All variables are evaluated in the package you specify with the
+C<PACKAGE> option of C<fill_in>. if you use this option, and if your
+templates don't do anything egregiously stupid, you won't have to
+worry that evaluation of the little programs will creep out into the
+rest of your program and wreck something.
+
+Nevertheless, there's really no way (except with C<Safe>) to protect
+against a template that says
+
+ { $Important::Secret::Security::Enable = 0;
+ # Disable security checks in this program
+ }
+
+or
+
+ { $/ = "ho ho ho"; # Sabotage future uses of <FH>.
+ # $/ is always a global variable
+ }
+
+or even
+
+ { system("rm -rf /") }
+
+so B<don't> go filling in templates unless you're sure you know what's
+in them. If you're worried, or you can't trust the person who wrote
+the template, use the C<SAFE> option.
+
+A final warning: program fragments run a small risk of accidentally
+clobbering local variables in the C<fill_in> function itself. These
+variables all have names that begin with C<$fi_>, so if you stay away
+from those names you'll be safe. (Of course, if you're a real wizard
+you can tamper with them deliberately for exciting effects; this is
+actually how C<$OUT> works.) I can fix this, but it will make the
+package slower to do it, so I would prefer not to. If you are worried
+about this, send me mail and I will show you what to do about it.
+
+=head2 Alternative Delimiters
+
+Lorenzo Valdettaro pointed out that if you are using C<Text::Template>
+to generate TeX output, the choice of braces as the program fragment
+delimiters makes you suffer suffer suffer. Starting in version 1.20,
+you can change the choice of delimiters to something other than curly
+braces.
+
+In either the C<new()> call or the C<fill_in()> call, you can specify
+an alternative set of delimiters with the C<DELIMITERS> option. For
+example, if you would like code fragments to be delimited by C<[@-->
+and C<--@]> instead of C<{> and C<}>, use
+
+ ... DELIMITERS => [ '[@--', '--@]' ], ...
+
+Note that these delimiters are I<literal strings>, not regexes. (I
+tried for regexes, but it complicates the lexical analysis too much.)
+Note also that C<DELIMITERS> disables the special meaning of the
+backslash, so if you want to include the delimiters in the literal
+text of your template file, you are out of luck---it is up to you to
+choose delimiters that do not conflict with what you are doing. The
+delimiter strings may still appear inside of program fragments as long
+as they nest properly. This means that if for some reason you
+absolutely must have a program fragment that mentions one of the
+delimiters, like this:
+
+ [@--
+ print "Oh no, a delimiter: --@]\n"
+ --@]
+
+you may be able to make it work by doing this instead:
+
+ [@--
+ # Fake matching delimiter in a comment: [@--
+ print "Oh no, a delimiter: --@]\n"
+ --@]
+
+It may be safer to choose delimiters that begin with a newline
+character.
+
+Because the parsing of templates is simplified by the absence of
+backslash escapes, using alternative C<DELIMITERS> may speed up the
+parsing process by 20-25%. This shows that my original choice of C<{>
+and C<}> was very bad.
+
+=head2 C<PREPEND> feature and using C<strict> in templates
+
+Suppose you would like to use C<strict> in your templates to detect
+undeclared variables and the like. But each code fragment is a
+separate lexical scope, so you have to turn on C<strict> at the top of
+each and every code fragment:
+
+ { use strict;
+ use vars '$foo';
+ $foo = 14;
+ ...
+ }
+
+ ...
+
+ { # we forgot to put `use strict' here
+ my $result = $boo + 12; # $boo is misspelled and should be $foo
+ # No error is raised on `$boo'
+ }
+
+Because we didn't put C<use strict> at the top of the second fragment,
+it was only active in the first fragment, and we didn't get any
+C<strict> checking in the second fragment. Then we misspelled C<$foo>
+and the error wasn't caught.
+
+C<Text::Template> version 1.22 and higher has a new feature to make
+this easier. You can specify that any text at all be automatically
+added to the beginning of each program fragment.
+
+When you make a call to C<fill_in>, you can specify a
+
+ PREPEND => 'some perl statements here'
+
+option; the statements will be prepended to each program fragment for
+that one call only. Suppose that the C<fill_in> call included a
+
+ PREPEND => 'use strict;'
+
+option, and that the template looked like this:
+
+ { use vars '$foo';
+ $foo = 14;
+ ...
+ }
+
+ ...
+
+ { my $result = $boo + 12; # $boo is misspelled and should be $foo
+ ...
+ }
+
+The code in the second fragment would fail, because C<$boo> has not
+been declared. C<use strict> was implied, even though you did not
+write it explicitly, because the C<PREPEND> option added it for you
+automatically.
+
+There are three other ways to do this. At the time you create the
+template object with C<new>, you can also supply a C<PREPEND> option,
+in which case the statements will be prepended each time you fill in
+that template. If the C<fill_in> call has its own C<PREPEND> option,
+this overrides the one specified at the time you created the
+template. Finally, you can make the class method call
+
+ Text::Template->always_prepend('perl statements');
+
+If you do this, then call calls to C<fill_in> for I<any> template will
+attach the perl statements to the beginning of each program fragment,
+except where overridden by C<PREPEND> options to C<new> or C<fill_in>.
+
+An alternative to adding "use strict;" to the PREPEND option, you can
+pass STRICT => 1 to fill_in when also passing the HASH option.
+
+Suppose that the C<fill_in> call included both
+
+ HASH => {$foo => ''} and
+ STRICT => 1
+
+options, and that the template looked like this:
+
+ {
+ $foo = 14;
+ ...
+ }
+
+ ...
+
+ { my $result = $boo + 12; # $boo is misspelled and should be $foo
+ ...
+ }
+
+The code in the second fragment would fail, because C<$boo> has not
+been declared. C<use strict> was implied, even though you did not
+write it explicitly, because the C<STRICT> option added it for you
+automatically. Any variable referenced in the template that is not in the
+C<HASH> option will be an error.
+
+=head2 Prepending in Derived Classes
+
+This section is technical, and you should skip it on the first few
+readings.
+
+Normally there are three places that prepended text could come from.
+It could come from the C<PREPEND> option in the C<fill_in> call, from
+the C<PREPEND> option in the C<new> call that created the template
+object, or from the argument of the C<always_prepend> call.
+C<Text::Template> looks for these three things in order and takes the
+first one that it finds.
+
+In a subclass of C<Text::Template>, this last possibility is
+ambiguous. Suppose C<S> is a subclass of C<Text::Template>. Should
+
+ Text::Template->always_prepend(...);
+
+affect objects in class C<Derived>? The answer is that you can have it
+either way.
+
+The C<always_prepend> value for C<Text::Template> is normally stored
+in a hash variable named C<%GLOBAL_PREPEND> under the key
+C<Text::Template>. When C<Text::Template> looks to see what text to
+prepend, it first looks in the template object itself, and if not, it
+looks in C<$GLOBAL_PREPEND{I<class>}> where I<class> is the class to
+which the template object belongs. If it doesn't find any value, it
+looks in C<$GLOBAL_PREPEND{'Text::Template'}>. This means that
+objects in class C<Derived> I<will> be affected by
+
+ Text::Template->always_prepend(...);
+
+I<unless> there is also a call to
+
+ Derived->always_prepend(...);
+
+So when you're designing your derived class, you can arrange to have
+your objects ignore C<Text::Template::always_prepend> calls by simply
+putting C<Derived-E<gt>always_prepend('')> at the top of your module.
+
+Of course, there is also a final escape hatch: Templates support a
+C<prepend_text> that is used to look up the appropriate text to be
+prepended at C<fill_in> time. Your derived class can override this
+method to get an arbitrary effect.
+
+=head2 JavaScript
+
+Jennifer D. St Clair asks:
+
+ > Most of my pages contain JavaScript and Stylesheets.
+ > How do I change the template identifier?
+
+Jennifer is worried about the braces in the JavaScript being taken as
+the delimiters of the Perl program fragments. Of course, disaster
+will ensue when perl tries to evaluate these as if they were Perl
+programs. The best choice is to find some unambiguous delimiter
+strings that you can use in your template instead of curly braces, and
+then use the C<DELIMITERS> option. However, if you can't do this for
+some reason, there are two easy workarounds:
+
+1. You can put C<\> in front of C<{>, C<}>, or C<\> to remove its
+special meaning. So, for example, instead of
+
+ if (br== "n3") {
+ // etc.
+ }
+
+you can put
+
+ if (br== "n3") \{
+ // etc.
+ \}
+
+and it'll come out of the template engine the way you want.
+
+But here is another method that is probably better. To see how it
+works, first consider what happens if you put this into a template:
+
+ { 'foo' }
+
+Since it's in braces, it gets evaluated, and obviously, this is going
+to turn into
+
+ foo
+
+So now here's the trick: In Perl, C<q{...}> is the same as C<'...'>.
+So if we wrote
+
+ {q{foo}}
+
+it would turn into
+
+ foo
+
+So for your JavaScript, just write
+
+ {q{if (br== "n3") {
+ // etc.
+ }}
+ }
+
+and it'll come out as
+
+ if (br== "n3") {
+ // etc.
+ }
+
+which is what you want.
+
+head2 Shut Up!
+
+People sometimes try to put an initialization section at the top of
+their templates, like this:
+
+ { ...
+ $var = 17;
+ }
+
+Then they complain because there is a C<17> at the top of the output
+that they didn't want to have there.
+
+Remember that a program fragment is replaced with its own return
+value, and that in Perl the return value of a code block is the value
+of the last expression that was evaluated, which in this case is 17.
+If it didn't do that, you wouldn't be able to write C<{$recipient}>
+and have the recipient filled in.
+
+To prevent the 17 from appearing in the output is very simple:
+
+ { ...
+ $var = 17;
+ '';
+ }
+
+Now the last expression evaluated yields the empty string, which is
+invisible. If you don't like the way this looks, use
+
+ { ...
+ $var = 17;
+ ($SILENTLY);
+ }
+
+instead. Presumably, C<$SILENTLY> has no value, so nothing will be
+interpolated. This is what is known as a `trick'.
+
+=head2 Compatibility
+
+Every effort has been made to make this module compatible with older
+versions. The only known exceptions follow:
+
+The output format of the default C<BROKEN> subroutine has changed
+twice, most recently between versions 1.31 and 1.40.
+
+Starting in version 1.10, the C<$OUT> variable is arrogated for a
+special meaning. If you had templates before version 1.10 that
+happened to use a variable named C<$OUT>, you will have to change them
+to use some other variable or all sorts of strangeness will result.
+
+Between versions 0.1b and 1.00 the behavior of the \ metacharacter
+changed. In 0.1b, \\ was special everywhere, and the template
+processor always replaced it with a single backslash before passing
+the code to Perl for evaluation. The rule now is more complicated but
+probably more convenient. See the section on backslash processing,
+below, for a full discussion.
+
+=head2 Backslash Processing
+
+In C<Text::Template> beta versions, the backslash was special whenever
+it appeared before a brace or another backslash. That meant that
+while C<{"\n"}> did indeed generate a newline, C<{"\\"}> did not
+generate a backslash, because the code passed to Perl for evaluation
+was C<"\"> which is a syntax error. If you wanted a backslash, you
+would have had to write C<{"\\\\"}>.
+
+In C<Text::Template> versions 1.00 through 1.10, there was a bug:
+Backslash was special everywhere. In these versions, C<{"\n"}>
+generated the letter C<n>.
+
+The bug has been corrected in version 1.11, but I did not go back to
+exactly the old rule, because I did not like the idea of having to
+write C<{"\\\\"}> to get one backslash. The rule is now more
+complicated to remember, but probably easier to use. The rule is now:
+Backslashes are always passed to Perl unchanged I<unless> they occur
+as part of a sequence like C<\\\\\\{> or C<\\\\\\}>. In these
+contexts, they are special; C<\\> is replaced with C<\>, and C<\{> and
+C<\}> signal a literal brace.
+
+Examples:
+
+ \{ foo \}
+
+is I<not> evaluated, because the C<\> before the braces signals that
+they should be taken literally. The result in the output looks like this:
+
+ { foo }
+
+This is a syntax error:
+
+ { "foo}" }
+
+because C<Text::Template> thinks that the code ends at the first C<}>,
+and then gets upset when it sees the second one. To make this work
+correctly, use
+
+ { "foo\}" }
+
+This passes C<"foo}"> to Perl for evaluation. Note there's no C<\> in
+the evaluated code. If you really want a C<\> in the evaluated code,
+use
+
+ { "foo\\\}" }
+
+This passes C<"foo\}"> to Perl for evaluation.
+
+Starting with C<Text::Template> version 1.20, backslash processing is
+disabled if you use the C<DELIMITERS> option to specify alternative
+delimiter strings.
+
+=head2 A short note about C<$Text::Template::ERROR>
+
+In the past some people have fretted about `violating the package
+boundary' by examining a variable inside the C<Text::Template>
+package. Don't feel this way. C<$Text::Template::ERROR> is part of
+the published, official interface to this package. It is perfectly OK
+to inspect this variable. The interface is not going to change.
+
+If it really, really bothers you, you can import a function called
+C<TTerror> that returns the current value of the C<$ERROR> variable.
+So you can say:
+
+ use Text::Template 'TTerror';
+
+ my $template = Text::Template->new(SOURCE => $filename);
+ unless ($template) {
+ my $err = TTerror;
+ die "Couldn't make template: $err; aborting";
+ }
+
+I don't see what benefit this has over just doing this:
+
+ use Text::Template;
+
+ my $template = Text::Template->new(SOURCE => $filename)
+ or die "Couldn't make template: $Text::Template::ERROR; aborting";
+
+But if it makes you happy to do it that way, go ahead.
+
+=head2 Sticky Widgets in Template Files
+
+The C<CGI> module provides functions for `sticky widgets', which are
+form input controls that retain their values from one page to the
+next. Sometimes people want to know how to include these widgets
+into their template output.
+
+It's totally straightforward. Just call the C<CGI> functions from
+inside the template:
+
+ { $q->checkbox_group(NAME => 'toppings',
+ LINEBREAK => true,
+ COLUMNS => 3,
+ VALUES => \@toppings,
+ );
+ }
+
+=head2 Automatic preprocessing of program fragments
+
+It may be useful to preprocess the program fragments before they are
+evaluated. See C<Text::Template::Preprocess> for more details.
+
+=head2 Automatic postprocessing of template hunks
+
+It may be useful to process hunks of output before they are appended to
+the result text. For this, subclass and replace the C<append_text_to_result>
+method. It is passed a list of pairs with these entries:
+
+ handle - a filehandle to which to print the desired output
+ out - a ref to a string to which to append, to use if handle is not given
+ text - the text that will be appended
+ type - where the text came from: TEXT for literal text, PROG for code
+
+=head1 HISTORY
+
+Originally written by Mark Jason Dominus, Plover Systems (versions 0.01 - 1.46)
+
+Maintainership transferred to Michael Schout E<lt>mschout@cpan.orgE<gt> in version
+1.47
+
+=head1 THANKS
+
+Many thanks to the following people for offering support,
+encouragement, advice, bug reports, and all the other good stuff.
+
+=over 4
+
+=item *
+
+Andrew G Wood
+
+=item *
+
+Andy Wardley
+
+=item *
+
+António Aragão
+
+=item *
+
+Archie Warnock
+
+=item *
+
+Bek Oberin
+
+=item *
+
+Bob Dougherty
+
+=item *
+
+Brian C. Shensky
+
+=item *
+
+Chris Nandor
+
+=item *
+
+Chris Wesley
+
+=item *
+
+Chris.Brezil
+
+=item *
+
+Daini Xie
+
+=item *
+
+Dan Franklin
+
+=item *
+
+Daniel LaLiberte
+
+=item *
+
+David H. Adler
+
+=item *
+
+David Marshall
+
+=item *
+
+Dennis Taylor
+
+=item *
+
+Donald L. Greer Jr.
+
+=item *
+
+Dr. Frank Bucolo
+
+=item *
+
+Fred Steinberg
+
+=item *
+
+Gene Damon
+
+=item *
+
+Hans Persson
+
+=item *
+
+Hans Stoop
+
+=item *
+
+Itamar Almeida de Carvalho
+
+=item *
+
+James H. Thompson
+
+=item *
+
+James Mastros
+
+=item *
+
+Jarko Hietaniemi
+
+=item *
+
+Jason Moore
+
+=item *
+
+Jennifer D. St Clair
+
+=item *
+
+Joel Appelbaum
+
+=item *
+
+Joel Meulenberg
+
+=item *
+
+Jonathan Roy
+
+=item *
+
+Joseph Cheek
+
+=item *
+
+Juan E. Camacho
+
+=item *
+
+Kevin Atteson
+
+=item *
+
+Kevin Madsen
+
+=item *
+
+Klaus Arnhold
+
+=item *
+
+Larry Virden
+
+=item *
+
+Lieven Tomme
+
+=item *
+
+Lorenzo Valdettaro
+
+=item *
+
+Marek Grac
+
+=item *
+
+Matt Womer
+
+=item *
+
+Matt X. Hunter
+
+=item *
+
+Michael G Schwern
+
+=item *
+
+Michael J. Suzio
+
+=item *
+
+Michaely Yeung
+
+=item *
+
+Michelangelo Grigni
+
+=item *
+
+Mike Brodhead
+
+=item *
+
+Niklas Skoglund
+
+=item *
+
+Randal L. Schwartz
+
+=item *
+
+Reuven M. Lerner
+
+=item *
+
+Robert M. Ioffe
+
+=item *
+
+Ron Pero
+
+=item *
+
+San Deng
+
+=item *
+
+Sean Roehnelt
+
+=item *
+
+Sergey Myasnikov
+
+=item *
+
+Shabbir J. Safdar
+
+=item *
+
+Shad Todd
+
+=item *
+
+Steve Palincsar
+
+=item *
+
+Tim Bunce
+
+=item *
+
+Todd A. Green
+
+=item *
+
+Tom Brown
+
+=item *
+
+Tom Henry
+
+=item *
+
+Tom Snee
+
+=item *
+
+Trip Lilley
+
+=item *
+
+Uwe Schneider
+
+=item *
+
+Val Luck
+
+=item *
+
+Yannis Livassof
+
+=item *
+
+Yonat Sharon
+
+=item *
+
+Zac Hansen
+
+=item *
+
+gary at dls.net
+
+=back
+
+Special thanks to:
+
+=over 2
+
+=item Jonathan Roy
+
+for telling me how to do the C<Safe> support (I spent two years
+worrying about it, and then Jonathan pointed out that it was trivial.)
+
+=item Ranjit Bhatnagar
+
+for demanding less verbose fragments like they have in ASP, for
+helping me figure out the Right Thing, and, especially, for talking me
+out of adding any new syntax. These discussions resulted in the
+C<$OUT> feature.
+
+=back
+
+=head2 Bugs and Caveats
+
+C<my> variables in C<fill_in> are still susceptible to being clobbered
+by template evaluation. They all begin with C<fi_>, so avoid those
+names in your templates.
+
+The line number information will be wrong if the template's lines are
+not terminated by C<"\n">. You should let me know if this is a
+problem. If you do, I will fix it.
+
+The C<$OUT> variable has a special meaning in templates, so you cannot
+use it as if it were a regular variable.
+
+There are not quite enough tests in the test suite.
+
+=head1 SOURCE
+
+The development version is on github at L<https://https://github.com/mschout/perl-text-template>
+and may be cloned from L<git://https://github.com/mschout/perl-text-template.git>
+
+=head1 BUGS
+
+Please report any bugs or feature requests on the bugtracker website
+L<https://github.com/mschout/perl-text-template/issues>
+
+When submitting a bug or request, please include a test-file or a
+patch to an existing test-file that illustrates the bug or desired
+feature.
+
+=head1 AUTHOR
+
+Michael Schout <mschout@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2013 by Mark Jason Dominus <mjd@cpan.org>.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/external/perl/Text-Template-1.56/lib/Text/Template/Preprocess.pm b/external/perl/Text-Template-1.56/lib/Text/Template/Preprocess.pm
new file mode 100644
index 000000000000..4fea67b38313
--- /dev/null
+++ b/external/perl/Text-Template-1.56/lib/Text/Template/Preprocess.pm
@@ -0,0 +1,157 @@
+
+package Text::Template::Preprocess;
+$Text::Template::Preprocess::VERSION = '1.56';
+# ABSTRACT: Expand template text with embedded Perl
+
+use strict;
+use warnings;
+
+use Text::Template;
+our @ISA = qw(Text::Template);
+
+sub fill_in {
+ my $self = shift;
+ my (%args) = @_;
+
+ my $pp = $args{PREPROCESSOR} || $self->{PREPROCESSOR};
+
+ if ($pp) {
+ local $_ = $self->source();
+ my $type = $self->{TYPE};
+
+ # print "# fill_in: before <$_>\n";
+ &$pp;
+
+ # print "# fill_in: after <$_>\n";
+ $self->set_source_data($_, $type);
+ }
+
+ $self->SUPER::fill_in(@_);
+}
+
+sub preprocessor {
+ my ($self, $pp) = @_;
+
+ my $old_pp = $self->{PREPROCESSOR};
+
+ $self->{PREPROCESSOR} = $pp if @_ > 1; # OK to pass $pp=undef
+
+ $old_pp;
+}
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Text::Template::Preprocess - Expand template text with embedded Perl
+
+=head1 VERSION
+
+version 1.56
+
+=head1 SYNOPSIS
+
+ use Text::Template::Preprocess;
+
+ my $t = Text::Template::Preprocess->new(...); # identical to Text::Template
+
+ # Fill in template, but preprocess each code fragment with pp().
+ my $result = $t->fill_in(..., PREPROCESSOR => \&pp);
+
+ my $old_pp = $t->preprocessor(\&new_pp);
+
+=head1 DESCRIPTION
+
+C<Text::Template::Preprocess> provides a new C<PREPROCESSOR> option to
+C<fill_in>. If the C<PREPROCESSOR> option is supplied, it must be a
+reference to a preprocessor subroutine. When filling out a template,
+C<Text::Template::Preprocessor> will use this subroutine to preprocess
+the program fragment prior to evaluating the code.
+
+The preprocessor subroutine will be called repeatedly, once for each
+program fragment. The program fragment will be in C<$_>. The
+subroutine should modify the contents of C<$_> and return.
+C<Text::Template::Preprocess> will then execute contents of C<$_> and
+insert the result into the appropriate part of the template.
+
+C<Text::Template::Preprocess> objects also support a utility method,
+C<preprocessor()>, which sets a new preprocessor for the object. This
+preprocessor is used for all subsequent calls to C<fill_in> except
+where overridden by an explicit C<PREPROCESSOR> option.
+C<preprocessor()> returns the previous default preprocessor function,
+or undefined if there wasn't one. When invoked with no arguments,
+C<preprocessor()> returns the object's current default preprocessor
+function without changing it.
+
+In all other respects, C<Text::Template::Preprocess> is identical to
+C<Text::Template>.
+
+=head1 WHY?
+
+One possible purpose: If your files contain a lot of JavaScript, like
+this:
+
+ Plain text here...
+ { perl code }
+ <script language=JavaScript>
+ if (br== "n3") {
+ // etc.
+ }
+ </script>
+ { more perl code }
+ More plain text...
+
+You don't want C<Text::Template> to confuse the curly braces in the
+JavaScript program with executable Perl code. One strategy:
+
+ sub quote_scripts {
+ s(<script(.*?)</script>)(q{$1})gsi;
+ }
+
+Then use C<PREPROCESSOR =E<gt> \&quote_scripts>. This will transform
+
+=head1 SEE ALSO
+
+L<Text::Template>
+
+=head1 SOURCE
+
+The development version is on github at L<https://https://github.com/mschout/perl-text-template>
+and may be cloned from L<git://https://github.com/mschout/perl-text-template.git>
+
+=head1 BUGS
+
+Please report any bugs or feature requests on the bugtracker website
+L<https://github.com/mschout/perl-text-template/issues>
+
+When submitting a bug or request, please include a test-file or a
+patch to an existing test-file that illustrates the bug or desired
+feature.
+
+=head1 AUTHOR
+
+Mark Jason Dominus, Plover Systems
+
+Please send questions and other remarks about this software to
+C<mjd-perl-template+@plover.com>
+
+You can join a very low-volume (E<lt>10 messages per year) mailing
+list for announcements about this package. Send an empty note to
+C<mjd-perl-template-request@plover.com> to join.
+
+For updates, visit C<http://www.plover.com/~mjd/perl/Template/>.
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2013 by Mark Jason Dominus <mjd@cpan.org>.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/external/perl/Text-Template-1.56/t/author-pod-syntax.t b/external/perl/Text-Template-1.56/t/author-pod-syntax.t
new file mode 100644
index 000000000000..2233af0821cc
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/author-pod-syntax.t
@@ -0,0 +1,15 @@
+#!perl
+
+BEGIN {
+ unless ($ENV{AUTHOR_TESTING}) {
+ print qq{1..0 # SKIP these tests are for testing by the author\n};
+ exit
+ }
+}
+
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
+use strict; use warnings;
+use Test::More;
+use Test::Pod 1.41;
+
+all_pod_files_ok();
diff --git a/external/perl/Text-Template-1.56/t/author-signature.t b/external/perl/Text-Template-1.56/t/author-signature.t
new file mode 100644
index 000000000000..c81a09395cb7
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/author-signature.t
@@ -0,0 +1,21 @@
+#!perl -w
+
+BEGIN {
+ unless ($ENV{AUTHOR_TESTING}) {
+ print qq{1..0 # SKIP these tests are for testing by the author\n};
+ exit
+ }
+}
+
+# This file was automatically generated by Dist::Zilla::Plugin::AuthorSignatureTest
+
+use strict;
+use warnings;
+use Test::More;
+
+unless (eval { require Test::Signature; 1 }) {
+ plan skip_all => 'Test::Signature is required for this test';
+}
+
+Test::Signature::signature_ok();
+done_testing;
diff --git a/external/perl/Text-Template-1.56/t/basic.t b/external/perl/Text-Template-1.56/t/basic.t
new file mode 100755
index 000000000000..4b7c711215d2
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/basic.t
@@ -0,0 +1,179 @@
+#!perl
+#
+# Tests of basic, essential functionality
+#
+
+use strict;
+use warnings;
+use Test::More tests => 34;
+use File::Temp;
+
+my $tmpfile = File::Temp->new;
+
+use_ok 'Text::Template' or exit 1;
+
+$X::v = $Y::v = 0; # Suppress `var used only once'
+
+my $template_1 = <<EOM;
+We will put value of \$v (which is "abc") here -> {\$v}
+We will evaluate 1+1 here -> {1 + 1}
+EOM
+
+# (1) Construct temporary template file for testing
+# file operations
+my $TEMPFILE = $tmpfile->filename;
+
+eval {
+ open my $tmp, '>', $TEMPFILE
+ or die "Couldn't write tempfile $TEMPFILE: $!";
+
+ print $tmp $template_1;
+ close $tmp;
+
+ pass;
+};
+if ($@) {
+ fail $@;
+}
+
+# (2) Build template from file
+my $template = Text::Template->new('type' => 'FILE', 'source' => $TEMPFILE);
+ok(defined $template) or diag $Text::Template::ERROR;
+
+# (3) Fill in template from file
+$X::v = "abc";
+my $resultX = <<EOM;
+We will put value of \$v (which is "abc") here -> abc
+We will evaluate 1+1 here -> 2
+EOM
+$Y::v = "ABC";
+my $resultY = <<EOM;
+We will put value of \$v (which is "abc") here -> ABC
+We will evaluate 1+1 here -> 2
+EOM
+
+my $text = $template->fill_in('package' => 'X');
+is $text, $resultX;
+
+# (4) Fill in same template again
+$text = $template->fill_in('package' => 'Y');
+is $text, $resultY;
+
+# (5) Simple test of `fill_this_in'
+$text = Text::Template->fill_this_in($template_1, 'package' => 'X');
+is $text, $resultX;
+
+# (6) test creation of template from filehandle
+open my $tmpl, '<', $TEMPFILE or die "failed to open $TEMPFILE: $!";
+
+$template = Text::Template->new(type => 'FILEHANDLE', source => $tmpl);
+ok defined $template or diag $Text::Template::ERROR;
+
+# (7) test filling in of template from filehandle
+$text = $template->fill_in('package' => 'X');
+is $text, $resultX;
+
+# (8) test second fill_in on same template object
+$text = $template->fill_in('package' => 'Y');
+is $text, $resultY;
+
+close $tmpl;
+
+# (9) test creation of template from array
+$template = Text::Template->new(
+ type => 'ARRAY',
+ source => [
+ 'We will put value of $v (which is "abc") here -> {$v}', "\n",
+ 'We will evaluate 1+1 here -> {1+1}', "\n"
+ ]
+);
+
+ok defined $template; # or diag $Text::Template::ERROR;
+
+# (10) test filling in of template from array
+$text = $template->fill_in('package' => 'X');
+is $text, $resultX;
+
+# (11) test second fill_in on same array template object
+$text = $template->fill_in('package' => 'Y');
+is $text, $resultY;
+
+# (12) Make sure \ is working properly
+# Test added for version 1.11
+$tmpl = Text::Template->new(TYPE => 'STRING', SOURCE => 'B{"\\}"}C{"\\{"}D');
+
+# This should fail if the \ are not interpreted properly.
+$text = $tmpl->fill_in();
+is $text, 'B}C{D';
+
+# (13) Make sure \ is working properly
+# Test added for version 1.11
+$tmpl = Text::Template->new(TYPE => 'STRING', SOURCE => qq{A{"\t"}B});
+
+# Symptom of old problem: ALL \ were special in templates, so
+# The lexer would return (A, PROGTEXT("t"), B), and the
+# result text would be AtB instead of A(tab)B.
+$text = $tmpl->fill_in();
+
+is $text, "A\tB";
+
+# (14-27) Make sure \ is working properly
+# Test added for version 1.11
+# This is a sort of general test.
+my @tests = (
+ '{""}' => '', # (14)
+ '{"}"}' => undef, # (15)
+ '{"\\}"}' => '}', # One backslash
+ '{"\\\\}"}' => undef, # Two backslashes
+ '{"\\\\\\}"}' => '}', # Three backslashes
+ '{"\\\\\\\\}"}' => undef, # Four backslashes
+ '{"\\\\\\\\\\}"}' => '\}', # Five backslashes (20)
+ '{"x20"}' => 'x20',
+ '{"\\x20"}' => ' ', # One backslash
+ '{"\\\\x20"}' => '\\x20', # Two backslashes
+ '{"\\\\\\x20"}' => '\\ ', # Three backslashes
+ '{"\\\\\\\\x20"}' => '\\\\x20', # Four backslashes (25)
+ '{"\\\\\\\\\\x20"}' => '\\\\ ', # Five backslashes
+ '{"\\x20\\}"}' => ' }', # (27)
+);
+
+while (my ($test, $result) = splice @tests, 0, 2) {
+ my $tmpl = Text::Template->new(TYPE => 'STRING', SOURCE => $test);
+ my $text = $tmpl->fill_in;
+
+ ok(!defined $text && !defined $result || $text eq $result)
+ or diag "expected .$result. got .$text.";
+}
+
+# (28-30) I discovered that you can't pass a glob ref as your filehandle.
+# MJD 20010827
+# (28) test creation of template from filehandle
+$tmpl = undef;
+ok(open $tmpl, '<', $TEMPFILE) or diag "Couldn't open $TEMPFILE: $!";
+$template = Text::Template->new(type => 'FILEHANDLE', source => $tmpl);
+ok(defined $template) or diag $Text::Template::ERROR;
+
+# (29) test filling in of template from filehandle
+$text = $template->fill_in('package' => 'X');
+is $text, $resultX;
+
+# (30) test second fill_in on same template object
+$text = $template->fill_in('package' => 'Y');
+is $text, $resultY;
+
+close $tmpl;
+
+# (31) Test _scrubpkg for leakiness
+$Text::Template::GEN0::test = 1;
+Text::Template::_scrubpkg('Text::Template::GEN0');
+ok !($Text::Template::GEN0::test
+ || exists $Text::Template::GEN0::{test}
+ || exists $Text::Template::{'GEN0::'});
+
+# that filename parameter works. we use BROKEN to verify this
+$text = Text::Template->new(
+ TYPE => 'string',
+ SOURCE => 'Hello {1/0}'
+)->fill_in(FILENAME => 'foo.txt');
+
+like $text, qr/division by zero at foo\.txt line 1/;
diff --git a/external/perl/Text-Template-1.56/t/broken.t b/external/perl/Text-Template-1.56/t/broken.t
new file mode 100755
index 000000000000..40e7b7465029
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/broken.t
@@ -0,0 +1,66 @@
+#!perl
+# test apparatus for Text::Template module
+
+use strict;
+use warnings;
+use Test::More tests => 7;
+
+use_ok 'Text::Template' or exit 1;
+
+# (1) basic error delivery
+{
+ my $r = Text::Template->new(
+ TYPE => 'string',
+ SOURCE => '{1/0}',)->fill_in();
+ is $r, q{Program fragment delivered error ``Illegal division by zero at template line 1.''};
+}
+
+# (2) BROKEN sub called in ->new?
+{
+ my $r = Text::Template->new(
+ TYPE => 'string',
+ SOURCE => '{1/0}',
+ BROKEN => sub { '---' },)->fill_in();
+ is $r, q{---};
+}
+
+# (3) BROKEN sub called in ->fill_in?
+{
+ my $r = Text::Template->new(
+ TYPE => 'string',
+ SOURCE => '{1/0}',)->fill_in(BROKEN => sub { '---' });
+ is $r, q{---};
+}
+
+# (4) BROKEN sub passed correct args when called in ->new?
+{
+ my $r = Text::Template->new(
+ TYPE => 'string',
+ SOURCE => '{1/0}',
+ BROKEN => sub {
+ my %a = @_;
+ qq{$a{lineno},$a{error},$a{text}};
+ },)->fill_in();
+ is $r, qq{1,Illegal division by zero at template line 1.\n,1/0};
+}
+
+# (5) BROKEN sub passed correct args when called in ->fill_in?
+{
+ my $r = Text::Template->new(
+ TYPE => 'string',
+ SOURCE => '{1/0}',
+ )->fill_in(
+ BROKEN => sub {
+ my %a = @_;
+ qq{$a{lineno},$a{error},$a{text}};
+ });
+ is $r, qq{1,Illegal division by zero at template line 1.\n,1/0};
+}
+
+# BROKEN sub handles undef
+{
+ my $r = Text::Template->new(TYPE => 'string', SOURCE => 'abc{1/0}defg')
+ ->fill_in(BROKEN => sub { undef });
+
+ is $r, 'abc';
+}
diff --git a/external/perl/Text-Template-1.56/t/delimiters.t b/external/perl/Text-Template-1.56/t/delimiters.t
new file mode 100755
index 000000000000..f7185c693ba2
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/delimiters.t
@@ -0,0 +1,83 @@
+#!perl
+#
+# Tests for user-specified delimiter functions
+# These tests first appeared in version 1.20.
+
+use strict;
+use warnings;
+use Test::More tests => 19;
+
+use_ok 'Text::Template' or exit 1;
+
+# (1) Try a simple delimiter: <<..>>
+# First with the delimiters specified at object creation time
+our $V = $V = 119;
+my $template = q{The value of $V is <<$V>>.};
+my $result = q{The value of $V is 119.};
+my $template1 = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => $template,
+ DELIMITERS => [ '<<', '>>' ])
+ or die "Couldn't construct template object: $Text::Template::ERROR; aborting";
+
+my $text = $template1->fill_in();
+is $text, $result;
+
+# (2) Now with delimiter choice deferred until fill-in time.
+$template1 = Text::Template->new(TYPE => 'STRING', SOURCE => $template);
+$text = $template1->fill_in(DELIMITERS => [ '<<', '>>' ]);
+is $text, $result;
+
+# (3) Now we'll try using regex metacharacters
+# First with the delimiters specified at object creation time
+$template = q{The value of $V is [$V].};
+$template1 = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => $template,
+ DELIMITERS => [ '[', ']' ])
+ or die "Couldn't construct template object: $Text::Template::ERROR; aborting";
+
+$text = $template1->fill_in();
+is $text, $result;
+
+# (4) Now with delimiter choice deferred until fill-in time.
+$template1 = Text::Template->new(TYPE => 'STRING', SOURCE => $template);
+$text = $template1->fill_in(DELIMITERS => [ '[', ']' ]);
+is $text, $result;
+
+# (5-18) Make sure \ is working properly
+# (That is to say, it is ignored.)
+# These tests are similar to those in 01-basic.t.
+my @tests = (
+ '{""}' => '', # (5)
+
+ # Backslashes don't matter
+ '{"}"}' => undef,
+ '{"\\}"}' => undef, # One backslash
+ '{"\\\\}"}' => undef, # Two backslashes
+ '{"\\\\\\}"}' => undef, # Three backslashes
+ '{"\\\\\\\\}"}' => undef, # Four backslashes (10)
+ '{"\\\\\\\\\\}"}' => undef, # Five backslashes
+
+ # Backslashes are always passed directly to Perl
+ '{"x20"}' => 'x20',
+ '{"\\x20"}' => ' ', # One backslash
+ '{"\\\\x20"}' => '\\x20', # Two backslashes
+ '{"\\\\\\x20"}' => '\\ ', # Three backslashes (15)
+ '{"\\\\\\\\x20"}' => '\\\\x20', # Four backslashes
+ '{"\\\\\\\\\\x20"}' => '\\\\ ', # Five backslashes
+ '{"\\x20\\}"}' => undef, # (18)
+);
+
+while (my ($test, $result) = splice @tests, 0, 2) {
+ my $tmpl = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => $test,
+ DELIMITERS => [ '{', '}' ]);
+
+ my $text = $tmpl->fill_in;
+
+ my $ok = (!defined $text && !defined $result || $text eq $result);
+
+ ok($ok) or diag "expected .$result., got .$text.";
+}
diff --git a/external/perl/Text-Template-1.56/t/error.t b/external/perl/Text-Template-1.56/t/error.t
new file mode 100755
index 000000000000..4f024db12378
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/error.t
@@ -0,0 +1,34 @@
+#!perl
+#
+# test apparatus for Text::Template module
+# still incomplete.
+
+use strict;
+use warnings;
+use Test::More tests => 6;
+
+use_ok 'Text::Template' or exit 1;
+
+# (1-2) Missing source
+eval {
+ Text::Template->new();
+ pass;
+};
+
+like $@, qr/^\QUsage: Text::Template::new(TYPE => ..., SOURCE => ...)/;
+
+eval { Text::Template->new(TYPE => 'FILE'); };
+like $@, qr/^\QUsage: Text::Template::new(TYPE => ..., SOURCE => ...)/;
+
+# (3) Invalid type
+eval { Text::Template->new(TYPE => 'wlunch', SOURCE => 'fish food'); };
+like $@, qr/^\QIllegal value `WLUNCH' for TYPE parameter/;
+
+# (4-5) File does not exist
+my $o = Text::Template->new(
+ TYPE => 'file',
+ SOURCE => 'this file does not exist');
+ok !defined $o;
+
+ok defined($Text::Template::ERROR)
+ && $Text::Template::ERROR =~ /^Couldn't open file/;
diff --git a/external/perl/Text-Template-1.56/t/exported.t b/external/perl/Text-Template-1.56/t/exported.t
new file mode 100755
index 000000000000..ab2adcd4a806
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/exported.t
@@ -0,0 +1,68 @@
+#!perl
+#
+# test apparatus for Text::Template module
+# still incomplete.
+
+use strict;
+use warnings;
+use Test::More tests => 7;
+use File::Temp;
+
+use_ok 'Text::Template' or exit 1;
+
+my $tfh = File::Temp->new;
+
+Text::Template->import('fill_in_file', 'fill_in_string');
+
+$Q::n = $Q::n = 119;
+
+# (1) Test fill_in_string
+my $out = fill_in_string('The value of $n is {$n}.', PACKAGE => 'Q');
+is $out, 'The value of $n is 119.';
+
+# (2) Test fill_in_file
+my $TEMPFILE = $tfh->filename;
+
+print $tfh 'The value of $n is {$n}.', "\n";
+close $tfh or die "Couldn't write test file: $!; aborting";
+
+$R::n = $R::n = 8128;
+
+$out = fill_in_file($TEMPFILE, PACKAGE => 'R');
+is $out, "The value of \$n is 8128.\n";
+
+# (3) Jonathan Roy reported this bug:
+open my $ofh, '>', $TEMPFILE or die "Couldn't open test file: $!; aborting";
+print $ofh "With a message here? [% \$var %]\n";
+close $ofh or die "Couldn't close test file: $!; aborting";
+$out = fill_in_file($TEMPFILE,
+ DELIMITERS => [ '[%', '%]' ],
+ HASH => { "var" => \"It is good!" });
+is $out, "With a message here? It is good!\n";
+
+# (4) It probably occurs in fill_this_in also:
+$out = Text::Template->fill_this_in("With a message here? [% \$var %]\n",
+ DELIMITERS => [ '[%', '%]' ],
+ HASH => { "var" => \"It is good!" });
+is $out, "With a message here? It is good!\n";
+
+# (5) This test failed in 1.25. It was supplied by Donald L. Greer Jr.
+# Note that it's different from (1) in that there's no explicit
+# package=> argument.
+use vars qw($string $foo $r);
+$string = 'Hello {$foo}';
+$foo = "Don";
+$r = fill_in_string($string);
+is $r, 'Hello Don';
+
+# (6) This test failed in 1.25. It's a variation on (5)
+package Q2;
+use Text::Template 'fill_in_string';
+use vars qw($string $foo $r);
+$string = 'Hello {$foo}';
+$foo = "Don";
+$r = fill_in_string($string);
+
+package main;
+
+is $Q2::r, 'Hello Don';
diff --git a/external/perl/Text-Template-1.56/t/hash.t b/external/perl/Text-Template-1.56/t/hash.t
new file mode 100755
index 000000000000..3d59f3366149
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/hash.t
@@ -0,0 +1,91 @@
+#!perl
+#
+# test apparatus for Text::Template module
+# still incomplete.
+
+use strict;
+use warnings;
+use Test::More tests => 13;
+
+use_ok 'Text::Template' or exit 1;
+
+my $template = 'We will put value of $v (which is "good") here -> {$v}';
+
+my $v = 'oops (main)';
+$Q::v = 'oops (Q)';
+
+my $vars = { 'v' => \'good' };
+
+# (1) Build template from string
+$template = Text::Template->new('type' => 'STRING', 'source' => $template);
+isa_ok $template, 'Text::Template';
+
+# (2) Fill in template in anonymous package
+my $result2 = 'We will put value of $v (which is "good") here -> good';
+my $text = $template->fill_in(HASH => $vars);
+is $text, $result2;
+
+# (3) Did we clobber the main variable?
+is $v, 'oops (main)';
+
+# (4) Fill in same template again
+my $result4 = 'We will put value of $v (which is "good") here -> good';
+$text = $template->fill_in(HASH => $vars);
+is $text, $result4;
+
+# (5) Now with a package
+my $result5 = 'We will put value of $v (which is "good") here -> good';
+$text = $template->fill_in(HASH => $vars, PACKAGE => 'Q');
+is $text, $result5;
+
+# (6) We expect to have clobbered the Q variable.
+is $Q::v, 'good';
+
+# (7) Now let's try it without a package
+my $result7 = 'We will put value of $v (which is "good") here -> good';
+$text = $template->fill_in(HASH => $vars);
+is $text, $result7;
+
+# (8-11) Now what does it do when we pass a hash with undefined values?
+# Roy says it does something bad. (Added for 1.20.)
+my $WARNINGS = 0;
+{
+ local $SIG{__WARN__} = sub { $WARNINGS++ };
+ local $^W = 1; # Make sure this is on for this test
+ my $template8 = 'We will put value of $v (which is "good") here -> {defined $v ? "bad" : "good"}';
+ my $result8 = 'We will put value of $v (which is "good") here -> good';
+ my $template = Text::Template->new('type' => 'STRING', 'source' => $template8);
+ my $text = $template->fill_in(HASH => { 'v' => undef });
+
+ # (8) Did we generate a warning?
+ cmp_ok $WARNINGS, '==', 0;
+
+ # (9) Was the output correct?
+ is $text, $result8;
+
+ # (10-11) Let's try that again, with a twist this time
+ $WARNINGS = 0;
+ $text = $template->fill_in(HASH => [ { 'v' => 17 }, { 'v' => undef } ]);
+
+ # (10) Did we generate a warning?
+ cmp_ok $WARNINGS, '==', 0;
+
+ # (11) Was the output correct?
+ SKIP: {
+ skip 'not supported before 5.005', 1 unless $] >= 5.005;
+
+ is $text, $result8;
+ }
+}
+
+# (12) Now we'll test the multiple-hash option (Added for 1.20.)
+$text = Text::Template::fill_in_string(q{$v: {$v}. @v: [{"@v"}].},
+ HASH => [
+ { 'v' => 17 },
+ { 'v' => [ 'a', 'b', 'c' ] },
+ { 'v' => \23 }
+ ]
+);
+
+my $result = q{$v: 23. @v: [a b c].};
+is $text, $result;
diff --git a/external/perl/Text-Template-1.56/t/inline-comment.t b/external/perl/Text-Template-1.56/t/inline-comment.t
new file mode 100755
index 000000000000..bf7a227a515e
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/inline-comment.t
@@ -0,0 +1,17 @@
+#!perl
+#
+# Test for comments within an inline code block
+
+use strict;
+use warnings;
+use Test::More tests => 2;
+
+use_ok 'Text::Template' or exit 1;
+
+my $tmpl = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => "Hello {\$name#comment}");
+
+my $vars = { name => 'Bob' };
+
+is $tmpl->fill_in(HASH => $vars), 'Hello Bob';
diff --git a/external/perl/Text-Template-1.56/t/nested-tags.t b/external/perl/Text-Template-1.56/t/nested-tags.t
new file mode 100755
index 000000000000..79bf6a1ae2f3
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/nested-tags.t
@@ -0,0 +1,26 @@
+#!perl
+#
+# Test for breakage of Dist::Milla in v1.46
+#
+
+use strict;
+use warnings;
+use Text::Template;
+
+BEGIN {
+ # Minimum Test::More version; 0.94+ is required for `done_testing`
+ unless (eval { require Test::More; "$Test::More::VERSION" >= 0.94; }) {
+ Test::More::plan(skip_all => '[ Test::More v0.94+ ] is required for testing');
+ }
+
+ Test::More->import;
+}
+
+my $tmpl = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => q| {{ '{{$NEXT}}' }} |,
+ DELIMITERS => [ '{{', '}}' ]);
+
+is $tmpl->fill_in, ' {{$NEXT}} ';
+
+done_testing;
diff --git a/external/perl/Text-Template-1.56/t/ofh.t b/external/perl/Text-Template-1.56/t/ofh.t
new file mode 100755
index 000000000000..a490e7abe551
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/ofh.t
@@ -0,0 +1,33 @@
+#!perl
+#
+# test apparatus for Text::Template module
+# still incomplete.
+
+use strict;
+use warnings;
+use Test::More tests => 3;
+use File::Temp;
+
+use_ok 'Text::Template' or exit 1;
+
+my $template = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => q{My process ID is {$$}});
+
+my $of = File::Temp->new;
+
+my $text = $template->fill_in(OUTPUT => $of);
+
+# (1) No $text should have been constructed. Return value should be true.
+is $text, '1';
+
+close $of or die "close(): $!";
+
+open my $ifh, '<', $of->filename or die "open($of): $!";
+
+my $t;
+{ local $/; $t = <$ifh> }
+close $ifh;
+
+# (2) The text should have been printed to the file
+is $t, "My process ID is $$";
diff --git a/external/perl/Text-Template-1.56/t/out.t b/external/perl/Text-Template-1.56/t/out.t
new file mode 100755
index 000000000000..a805c7108993
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/out.t
@@ -0,0 +1,46 @@
+#!perl
+#
+# test apparatus for Text::Template module
+# still incomplete.
+#
+
+use strict;
+use warnings;
+use Test::More tests => 4;
+
+use_ok 'Text::Template' or exit 1;
+
+my $templateIN = q{
+This line should have a 3: {1+2}
+
+This line should have several numbers:
+{ $t = ''; foreach $n (1 .. 20) { $t .= $n . ' ' } $t }
+};
+
+my $templateOUT = q{
+This line should have a 3: { $OUT = 1+2 }
+
+This line should have several numbers:
+{ foreach $n (1 .. 20) { $OUT .= $n . ' ' } }
+};
+
+# Build templates from string
+my $template = Text::Template->new('type' => 'STRING', 'source' => $templateIN);
+isa_ok $template, 'Text::Template';
+
+$templateOUT = Text::Template->new('type' => 'STRING', 'source' => $templateOUT);
+isa_ok $templateOUT, 'Text::Template';
+
+# Fill in templates
+my $text = $template->fill_in();
+my $textOUT = $templateOUT->fill_in();
+
+# (1) They should be the same
+is $text, $textOUT;
+
+# Missing: Test this feature in Safe compartments;
+# it's a totally different code path.
+# Decision: Put that into safe.t, because that file should
+# be skipped when Safe.pm is unavailable.
+
+exit;
diff --git a/external/perl/Text-Template-1.56/t/prepend.t b/external/perl/Text-Template-1.56/t/prepend.t
new file mode 100755
index 000000000000..cbe205e004d3
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/prepend.t
@@ -0,0 +1,78 @@
+#!perl
+#
+# Tests for PREPEND features
+# These tests first appeared in version 1.22.
+
+use strict;
+use warnings;
+use Test::More tests => 10;
+
+use_ok 'Text::Template' or exit 1;
+
+@Emptyclass1::ISA = 'Text::Template';
+@Emptyclass2::ISA = 'Text::Template';
+
+my $tin = q{The value of $foo is: {$foo}};
+
+Text::Template->always_prepend(q{$foo = "global"});
+
+my $tmpl1 = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => $tin);
+
+my $tmpl2 = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => $tin,
+ PREPEND => q{$foo = "template"});
+
+$tmpl1->compile;
+$tmpl2->compile;
+
+my $t1 = $tmpl1->fill_in(PACKAGE => 'T1');
+my $t2 = $tmpl2->fill_in(PACKAGE => 'T2');
+my $t3 = $tmpl2->fill_in(PREPEND => q{$foo = "fillin"}, PACKAGE => 'T3');
+
+is $t1, 'The value of $foo is: global';
+is $t2, 'The value of $foo is: template';
+is $t3, 'The value of $foo is: fillin';
+
+Emptyclass1->always_prepend(q{$foo = 'Emptyclass global';});
+$tmpl1 = Emptyclass1->new(
+ TYPE => 'STRING',
+ SOURCE => $tin);
+
+$tmpl2 = Emptyclass1->new(
+ TYPE => 'STRING',
+ SOURCE => $tin,
+ PREPEND => q{$foo = "template"});
+
+$tmpl1->compile;
+$tmpl2->compile;
+
+$t1 = $tmpl1->fill_in(PACKAGE => 'T4');
+$t2 = $tmpl2->fill_in(PACKAGE => 'T5');
+$t3 = $tmpl2->fill_in(PREPEND => q{$foo = "fillin"}, PACKAGE => 'T6');
+
+is $t1, 'The value of $foo is: Emptyclass global';
+is $t2, 'The value of $foo is: template';
+is $t3, 'The value of $foo is: fillin';
+
+$tmpl1 = Emptyclass2->new(
+ TYPE => 'STRING',
+ SOURCE => $tin);
+
+$tmpl2 = Emptyclass2->new(
+ TYPE => 'STRING',
+ SOURCE => $tin,
+ PREPEND => q{$foo = "template"});
+
+$tmpl1->compile;
+$tmpl2->compile;
+
+$t1 = $tmpl1->fill_in(PACKAGE => 'T4');
+$t2 = $tmpl2->fill_in(PACKAGE => 'T5');
+$t3 = $tmpl2->fill_in(PREPEND => q{$foo = "fillin"}, PACKAGE => 'T6');
+
+is $t1, 'The value of $foo is: global';
+is $t2, 'The value of $foo is: template';
+is $t3, 'The value of $foo is: fillin';
diff --git a/external/perl/Text-Template-1.56/t/preprocess.t b/external/perl/Text-Template-1.56/t/preprocess.t
new file mode 100755
index 000000000000..a5faa96e1979
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/preprocess.t
@@ -0,0 +1,43 @@
+#!perl
+#
+# Tests for PREPROCESSOR features
+# These tests first appeared in version 1.25.
+
+use strict;
+use warnings;
+use Test::More tests => 9;
+use File::Temp;
+
+use_ok 'Text::Template::Preprocess' or exit 1;
+
+my $tmpfile = File::Temp->new;
+my $TMPFILE = $tmpfile->filename;
+
+my $py = sub { tr/x/y/ };
+my $pz = sub { tr/x/z/ };
+
+my $t = 'xxx The value of $x is {$x}';
+my $outx = 'xxx The value of $x is 119';
+my $outy = 'yyy The value of $y is 23';
+my $outz = 'zzz The value of $z is 5';
+open my $tfh, '>', $TMPFILE or die "Couldn't open test file: $!; aborting";
+print $tfh $t;
+close $tfh;
+
+my @result = ($outx, $outy, $outz, $outz);
+for my $trial (1, 0) {
+ for my $test (0 .. 3) {
+ my $tmpl;
+ if ($trial == 0) {
+ $tmpl = Text::Template::Preprocess->new(TYPE => 'STRING', SOURCE => $t) or die;
+ }
+ else {
+ open $tfh, '<', $TMPFILE or die "Couldn't open test file: $!; aborting";
+ $tmpl = Text::Template::Preprocess->new(TYPE => 'FILEHANDLE', SOURCE => $tfh) or die;
+ }
+ $tmpl->preprocessor($py) if ($test & 1) == 1;
+ my @args = ((($test & 2) == 2) ? (PREPROCESSOR => $pz) : ());
+ my $o = $tmpl->fill_in(@args, HASH => { x => 119, 'y' => 23, z => 5 });
+ is $o, $result[$test];
+ }
+}
diff --git a/external/perl/Text-Template-1.56/t/rt29928.t b/external/perl/Text-Template-1.56/t/rt29928.t
new file mode 100755
index 000000000000..b50d53ad428f
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/rt29928.t
@@ -0,0 +1,26 @@
+#!perl
+#
+# Test for RT Bug 29928 fix
+# https://rt.cpan.org/Public/Bug/Display.html?id=29928
+
+use strict;
+use warnings;
+use Test::More tests => 2;
+
+use_ok 'Text::Template::Preprocess' or exit 1;
+
+my $tin = q{The value of $foo is: {$foo}.};
+
+sub tester {
+ 1; # dummy preprocessor to cause the bug described.
+}
+
+my $tmpl1 = Text::Template::Preprocess->new(TYPE => 'STRING', SOURCE => $tin);
+
+$tmpl1->compile;
+
+my $t1 = $tmpl1->fill_in(
+ HASH => { foo => 'things' },
+ PREPROCESSOR => \&tester);
+
+is $t1, 'The value of $foo is: things.';
diff --git a/external/perl/Text-Template-1.56/t/safe.t b/external/perl/Text-Template-1.56/t/safe.t
new file mode 100755
index 000000000000..762aba871f31
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/safe.t
@@ -0,0 +1,135 @@
+#!perl
+#
+# test apparatus for Text::Template module
+# still incomplete.
+
+use strict;
+use warnings;
+
+use Test::More;
+
+unless (eval { require Safe; 1 }) {
+ plan skip_all => 'Safe.pm is required for this test';
+}
+else {
+ plan tests => 20;
+}
+
+use_ok 'Text::Template' or exit 1;
+
+my ($BADOP, $FAILURE);
+if ($^O eq 'MacOS') {
+ $BADOP = qq{};
+ $FAILURE = q{};
+}
+else {
+ $BADOP = qq{kill 0};
+ $FAILURE = q{Program fragment at line 1 delivered error ``kill trapped by operation mask''};
+}
+
+our $v = 119;
+
+my $c = Safe->new or die;
+
+my $goodtemplate = q{This should succeed: { $v }};
+my $goodoutput = q{This should succeed: 119};
+
+my $template1 = Text::Template->new(type => 'STRING', source => $goodtemplate);
+my $template2 = Text::Template->new(type => 'STRING', source => $goodtemplate);
+
+my $text1 = $template1->fill_in();
+ok defined $text1;
+
+my $text2 = $template1->fill_in(SAFE => $c);
+ok defined $text2;
+
+my $text3 = $template2->fill_in(SAFE => $c);
+ok defined $text3;
+
+# (4) Safe and non-safe fills of different template objects with the
+# same template text should yield the same result.
+# print +($text1 eq $text3 ? '' : 'not '), "ok $n\n";
+# (4) voided this test: it's not true, because the unsafe fill
+# uses package main, while the safe fill uses the secret safe package.
+# We could alias the secret safe package to be identical to main,
+# but that wouldn't be safe. If you want the aliasing, you have to
+# request it explicitly with `PACKAGE'.
+
+# (5) Safe and non-safe fills of the same template object
+# should yield the same result.
+# (5) voided this test for the same reason as #4.
+# print +($text1 eq $text2 ? '' : 'not '), "ok $n\n";
+
+# (6) Make sure the output was actually correct
+is $text1, $goodoutput;
+
+my $badtemplate = qq{This should fail: { $BADOP; 'NOFAIL' }};
+my $badnosafeoutput = q{This should fail: NOFAIL};
+my $badsafeoutput =
+ q{This should fail: Program fragment delivered error ``kill trapped by operation mask at template line 1.''};
+
+$template1 = Text::Template->new('type' => 'STRING', 'source' => $badtemplate);
+isa_ok $template1, 'Text::Template';
+
+$template2 = Text::Template->new('type' => 'STRING', 'source' => $badtemplate);
+isa_ok $template2, 'Text::Template';
+
+# none of these should fail
+$text1 = $template1->fill_in();
+ok defined $text1;
+
+$text2 = $template1->fill_in(SAFE => $c);
+ok defined $text2;
+
+$text3 = $template2->fill_in(SAFE => $c);
+ok defined $text3;
+
+my $text4 = $template1->fill_in();
+ok defined $text4;
+
+# (11) text1 and text4 should be the same (using safe in between
+# didn't change anything.)
+is $text1, $text4;
+
+# (12) text2 and text3 should be the same (same template text in different
+# objects
+is $text2, $text3;
+
+# (13) text1 should yield badnosafeoutput
+is $text1, $badnosafeoutput;
+
+# (14) text2 should yield badsafeoutput
+$text2 =~ s/'kill'/kill/; # 5.8.1 added quote marks around the op name
+is $text2, $badsafeoutput;
+
+my $template = q{{$x=1}{$x+1}};
+
+$template1 = Text::Template->new('type' => 'STRING', 'source' => $template);
+isa_ok $template1, 'Text::Template';
+
+$template2 = Text::Template->new('type' => 'STRING', 'source' => $template);
+isa_ok $template2, 'Text::Template';
+
+$text1 = $template1->fill_in();
+$text2 = $template1->fill_in(SAFE => Safe->new);
+
+# (15) Do effects persist in safe compartments?
+is $text1, $text2;
+
+# (16) Try the BROKEN routine in safe compartments
+sub my_broken {
+ my %a = @_;
+ $a{error} =~ s/ at.*//s;
+ "OK! text:$a{text} error:$a{error} lineno:$a{lineno} arg:$a{arg}";
+}
+
+my $templateB = Text::Template->new(TYPE => 'STRING', SOURCE => '{die}');
+isa_ok $templateB, 'Text::Template';
+
+$text1 = $templateB->fill_in(
+ BROKEN => \&my_broken,
+ BROKEN_ARG => 'barg',
+ SAFE => Safe->new);
+
+my $result1 = qq{OK! text:die error:Died lineno:1 arg:barg};
+is $text1, $result1;
diff --git a/external/perl/Text-Template-1.56/t/safe2.t b/external/perl/Text-Template-1.56/t/safe2.t
new file mode 100755
index 000000000000..cfb997bc7982
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/safe2.t
@@ -0,0 +1,94 @@
+#!perl
+#
+# test apparatus for Text::Template module
+# still incomplete.
+
+use strict;
+use warnings;
+use Test::More;
+
+unless (eval { require Safe; 1 }) {
+ plan skip_all => 'Safe.pm is required for this test';
+}
+else {
+ plan tests => 12;
+}
+
+use_ok 'Text::Template' or exit 1;
+
+my $c = Safe->new or die;
+
+# Test handling of packages and importing.
+$c->reval('$P = "safe root"');
+our $P = 'main';
+$Q::P = $Q::P = 'Q';
+
+# How to effectively test the gensymming?
+
+my $t = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => 'package is {$P}') or die;
+
+# (1) Default behavior: Inherit from calling package, `main' in this case.
+my $text = $t->fill_in();
+is $text, 'package is main';
+
+# (2) When a package is specified, we should use that package instead.
+$text = $t->fill_in(PACKAGE => 'Q');
+is $text, 'package is Q';
+
+# (3) When no package is specified in safe mode, we should use the
+# default safe root.
+$text = $t->fill_in(SAFE => $c);
+is $text, 'package is safe root';
+
+# (4) When a package is specified in safe mode, we should use the
+# default safe root, after aliasing to the specified package
+TODO: {
+ local $TODO = "test fails when tested with TAP/Devel::Cover" if defined $Devel::Cover::VERSION;
+ $text = $t->fill_in(SAFE => $c, PACKAGE => 'Q');
+ is $text, 'package is Q';
+}
+
+# Now let's see if hash vars are installed properly into safe templates
+$t = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => 'hash is {$H}') or die;
+
+# (5) First in default mode
+$text = $t->fill_in(HASH => { H => 'good5' });
+is $text, 'hash is good5';
+
+# suppress "once" warnings
+$Q::H = $Q2::H = undef;
+
+# (6) Now in packages
+$text = $t->fill_in(HASH => { H => 'good6' }, PACKAGE => 'Q');
+is $text, 'hash is good6';
+
+# (7) Now in the default root of the safe compartment
+TODO: {
+ local $TODO = "test fails when tested with TAP/Devel::Cover" if defined $Devel::Cover::VERSION;
+ $text = $t->fill_in(HASH => { H => 'good7' }, SAFE => $c);
+ is $text, 'hash is good7';
+}
+
+# (8) Now in the default root after aliasing to a package that
+# got the hash stuffed in
+our $H;
+TODO: {
+ local $TODO = "test fails when tested with TAP/Devel::Cover" if defined $Devel::Cover::VERSION;
+ $text = $t->fill_in(HASH => { H => 'good8' }, SAFE => $c, PACKAGE => 'Q2');
+ is $text, 'hash is good8';
+}
+
+# Now let's make sure that none of the packages leaked on each other.
+# (9) This var should NOT have been installed into the main package
+ok !defined $H;
+$H = $H;
+
+# (11) this value overwrote the one from test 6.
+is $Q::H, 'good7';
+
+# (12)
+is $Q2::H, 'good8';
diff --git a/external/perl/Text-Template-1.56/t/safe3.t b/external/perl/Text-Template-1.56/t/safe3.t
new file mode 100755
index 000000000000..445c60d99267
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/safe3.t
@@ -0,0 +1,80 @@
+#!perl
+#
+# test apparatus for Text::Template module
+
+use strict;
+use warnings;
+use Test::More;
+
+unless (eval { require Safe; 1 }) {
+ plan skip_all => 'Safe.pm is required for this test';
+}
+else {
+ plan tests => 4;
+}
+
+use_ok 'Text::Template' or exit 1;
+
+# Test the OUT feature with safe compartments
+
+my $template = q{
+This line should have a 3: {1+2}
+
+This line should have several numbers:
+{ $t = ''; foreach $n (1 .. 20) { $t .= $n . ' ' } $t }
+};
+
+my $templateOUT = q{
+This line should have a 3: { $OUT = 1+2 }
+
+This line should have several numbers:
+{ foreach $n (1 .. 20) { $OUT .= $n . ' ' } }
+};
+
+my $c = Safe->new;
+
+# Build templates from string
+$template = Text::Template->new(
+ type => 'STRING',
+ source => $template,
+ SAFE => $c) or die;
+
+$templateOUT = Text::Template->new(
+ type => 'STRING',
+ source => $templateOUT,
+ SAFE => $c) or die;
+
+# Fill in templates
+my $text = $template->fill_in()
+ or die;
+my $textOUT = $templateOUT->fill_in()
+ or die;
+
+# (1) They should be the same
+is $text, $textOUT;
+
+# (2-3) "Joel Appelbaum" <joel@orbz.com> <000701c0ac2c$aed1d6e0$0201a8c0@prime>
+# "Contrary to the documentation the $OUT variable is not always
+# undefined at the start of each program fragment. The $OUT variable
+# is never undefined after it is used once if you are using the SAFE
+# option. The result is that every fragment after the fragment that
+# $OUT was used in is replaced by the old $OUT value instead of the
+# result of the fragment. This holds true even after the
+# Text::Template object goes out of scope and a new one is created!"
+#
+# Also reported by Daini Xie.
+
+{
+ my $template = q{{$OUT = 'x'}y{$OUT .= 'z'}};
+ my $expected = "xyz";
+ my $s = Safe->new;
+ my $o = Text::Template->new(
+ type => 'string',
+ source => $template);
+
+ for (1 .. 2) {
+ my $r = $o->fill_in(SAFE => $s);
+
+ is $r, $expected;
+ }
+}
diff --git a/external/perl/Text-Template-1.56/t/strict.t b/external/perl/Text-Template-1.56/t/strict.t
new file mode 100755
index 000000000000..f56aa586c5dd
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/strict.t
@@ -0,0 +1,46 @@
+#!perl
+#
+# Tests for STRICT features
+# These tests first appeared in version 1.48.
+
+use strict;
+use warnings;
+use Test::More tests => 4;
+
+use_ok 'Text::Template' or exit 1;
+
+@Emptyclass1::ISA = 'Text::Template';
+@Emptyclass2::ISA = 'Text::Template';
+
+my $tin = q{The value of $foo is: {$foo}};
+
+Text::Template->always_prepend(q{$foo = "global"});
+
+my $tmpl1 = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => $tin);
+
+my $tmpl2 = Text::Template->new(
+ TYPE => 'STRING',
+ SOURCE => $tin,
+ PREPEND => q{$foo = "template"});
+
+$tmpl1->compile;
+$tmpl2->compile;
+
+# strict should cause t1 to contain an error message if wrong variable is used in template
+my $t1 = $tmpl1->fill_in(PACKAGE => 'T1', STRICT => 1, HASH => { bar => 'baz' });
+
+# non-strict still works
+my $t2 = $tmpl2->fill_in(PACKAGE => 'T2', HASH => { bar => 'baz' });
+
+# prepend overrides the hash values
+my $t3 = $tmpl2->fill_in(
+ PREPEND => q{$foo = "fillin"},
+ PACKAGE => 'T3',
+ STRICT => 1,
+ HASH => { foo => 'hashval2' });
+
+like $t1, qr/Global symbol "\$foo" requires explicit package/;
+is $t2, 'The value of $foo is: template', "non-strict hash still works";
+is $t3, "The value of \$foo is: fillin", "hash values with prepend, prepend wins, even under strict.";
diff --git a/external/perl/Text-Template-1.56/t/taint.t b/external/perl/Text-Template-1.56/t/taint.t
new file mode 100755
index 000000000000..94cd26bf7d66
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/taint.t
@@ -0,0 +1,112 @@
+#!perl -T
+# Tests for taint-mode features
+
+use strict;
+use warnings;
+use lib 'blib/lib';
+use Test::More tests => 21;
+use File::Temp;
+
+use_ok 'Text::Template' or exit 1;
+
+if ($^O eq 'MSWin32') {
+ # File::Temp (for all versions up to at least 0.2308) is currently bugged under MSWin32/taint mode [as of 2018-09]
+ # ... fails unless "/tmp" on the current windows drive is a writable directory OR either $ENV{TMP} or $ENV{TEMP} are untainted and point to a writable directory
+ # ref: [File-Temp: Fails under -T, Windows 7, Strawberry Perl 5.12.1](https://rt.cpan.org/Public/Bug/Display.html?id=60340)
+ ($ENV{TEMP}) = $ENV{TEMP} =~ m/^.*$/gmsx; # untaint $ENV{TEMP}
+ ($ENV{TMP}) = $ENV{TMP} =~ m/^.*$/gmsx; # untaint $ENV{TMP}
+}
+
+my $tmpfile = File::Temp->new;
+my $file = $tmpfile->filename;
+
+# makes its arguments tainted
+sub taint {
+ for (@_) {
+ $_ .= substr($0, 0, 0); # LOD
+ }
+}
+
+my $template = 'The value of $n is {$n}.';
+
+open my $fh, '>', $file or die "Couldn't write temporary file $file: $!";
+print $fh $template, "\n";
+close $fh or die "Couldn't finish temporary file $file: $!";
+
+sub should_fail {
+ my $obj = Text::Template->new(@_);
+ eval { $obj->fill_in() };
+ if ($@) {
+ pass $@;
+ }
+ else {
+ fail q[didn't fail];
+ }
+}
+
+sub should_work {
+ my $obj = Text::Template->new(@_);
+ eval { $obj->fill_in() };
+ if ($@) {
+ fail $@;
+ }
+ else {
+ pass;
+ }
+}
+
+sub should_be_tainted {
+ ok !Text::Template::_is_clean($_[0]);
+}
+
+sub should_be_clean {
+ ok Text::Template::_is_clean($_[0]);
+}
+
+# Tainted filename should die with and without UNTAINT option
+# untainted filename should die without UNTAINT option
+# filehandle should die without UNTAINT option
+# string and array with tainted data should die either way
+
+# (2)-(7)
+my $tfile = $file;
+taint($tfile);
+should_be_tainted($tfile);
+should_be_clean($file);
+should_fail TYPE => 'file', SOURCE => $tfile;
+should_fail TYPE => 'file', SOURCE => $tfile, UNTAINT => 1;
+should_fail TYPE => 'file', SOURCE => $file;
+should_work TYPE => 'file', SOURCE => $file, UNTAINT => 1;
+
+# (8-9)
+open $fh, '<', $file or die "Couldn't open $file for reading: $!; aborting";
+should_fail TYPE => 'filehandle', SOURCE => $fh;
+close $fh;
+
+open $fh, '<', $file or die "Couldn't open $file for reading: $!; aborting";
+should_work TYPE => 'filehandle', SOURCE => $fh, UNTAINT => 1;
+close $fh;
+
+# (10-15)
+my $ttemplate = $template;
+taint($ttemplate);
+should_be_tainted($ttemplate);
+should_be_clean($template);
+should_fail TYPE => 'string', SOURCE => $ttemplate;
+should_fail TYPE => 'string', SOURCE => $ttemplate, UNTAINT => 1;
+should_work TYPE => 'string', SOURCE => $template;
+should_work TYPE => 'string', SOURCE => $template, UNTAINT => 1;
+
+# (16-19)
+my $array = [$template];
+my $tarray = [$ttemplate];
+should_fail TYPE => 'array', SOURCE => $tarray;
+should_fail TYPE => 'array', SOURCE => $tarray, UNTAINT => 1;
+should_work TYPE => 'array', SOURCE => $array;
+should_work TYPE => 'array', SOURCE => $array, UNTAINT => 1;
+
+# (20-21) Test _unconditionally_untaint utility function
+Text::Template::_unconditionally_untaint($ttemplate);
+should_be_clean($ttemplate);
+Text::Template::_unconditionally_untaint($tfile);
+should_be_clean($tfile);
diff --git a/external/perl/Text-Template-1.56/t/template-encoding.t b/external/perl/Text-Template-1.56/t/template-encoding.t
new file mode 100755
index 000000000000..2dafe779fb02
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/template-encoding.t
@@ -0,0 +1,47 @@
+#!perl
+
+use utf8;
+use strict;
+use warnings;
+use Test::More;
+use Encode;
+use File::Temp;
+
+# Non-CORE module(s)
+unless (eval { require Test::More::UTF8; 1; } ) {
+ plan skip_all => '[ Test::More::UTF8 ] is required for testing';
+}
+
+plan tests => 3;
+
+use_ok 'Text::Template' or exit 1;
+
+my $tmp_fh = File::Temp->new;
+
+print $tmp_fh encode('UTF-8', "\x{4f60}\x{597d} {{\$name}}");
+
+$tmp_fh->flush;
+
+# UTF-8 encoded template file
+my $str = Text::Template->new(
+ TYPE => 'FILE',
+ SOURCE => $tmp_fh->filename,
+ ENCODING => 'UTF-8'
+)->fill_in(HASH => { name => 'World' });
+
+is $str, "\x{4f60}\x{597d} World";
+
+$tmp_fh = File::Temp->new;
+
+print $tmp_fh encode('iso-8859-1', "Ol\x{e1} {{\$name}}");
+
+$tmp_fh->flush;
+
+# ISO-8859-1 encoded template file
+$str = Text::Template->new(
+ TYPE => 'FILE',
+ SOURCE => $tmp_fh->filename,
+ ENCODING => 'iso-8859-1'
+)->fill_in(HASH => { name => 'World' });
+
+is $str, "Ol\x{e1} World";
diff --git a/external/perl/Text-Template-1.56/t/warnings.t b/external/perl/Text-Template-1.56/t/warnings.t
new file mode 100755
index 000000000000..a20a640b17d9
--- /dev/null
+++ b/external/perl/Text-Template-1.56/t/warnings.t
@@ -0,0 +1,46 @@
+#!perl
+
+use strict;
+use warnings;
+use Text::Template;
+
+# Minimum Test::More version; 0.94+ is required for `done_testing`
+BEGIN {
+ unless (eval { require Test::More; "$Test::More::VERSION" >= 0.94; }) {
+ Test::More::plan(skip_all => '[ Test::More v0.94+ ] is required for testing');
+ }
+
+ Test::More->import;
+
+ # Non-CORE module(s)
+ unless (eval { require Test::Warnings; 1; }) {
+ plan(skip_all => '[ Test::Warnings ] is required for testing');
+ }
+
+ Test::Warnings->import;
+}
+
+my $template = <<'EOT';
+{{
+if ($good =~ /good/) {
+ 'This template should not produce warnings.'.$bad;
+}
+}}
+EOT
+
+$template = Text::Template->new(type => 'STRING', source => $template);
+isa_ok $template, 'Text::Template';
+
+my $result = $template->fill_in(HASH => { good => 'good' });
+
+$result =~ s/(?:^\s+)|(?:\s+$)//gs;
+is $result, 'This template should not produce warnings.';
+
+# see https://github.com/mschout/perl-text-template/issues/10
+$template = Text::Template->new(type => 'STRING', package => 'MY', source => '');
+$template->fill_in(package => 'MY', hash => { include => sub { 'XX' } });
+
+$template = Text::Template->new(type => 'STRING', package => 'MY', source => '');
+$template->fill_in(package => 'MY', hash => { include => sub { 'XX' } });
+
+done_testing;
diff --git a/fuzz/README.md b/fuzz/README.md
new file mode 100644
index 000000000000..6cc7811ad003
--- /dev/null
+++ b/fuzz/README.md
@@ -0,0 +1,175 @@
+Fuzzing OpenSSL
+===============
+
+OpenSSL can use either LibFuzzer or AFL to do fuzzing.
+
+LibFuzzer
+---------
+
+How to fuzz OpenSSL with [libfuzzer](http://llvm.org/docs/LibFuzzer.html),
+starting from a vanilla+OpenSSH server Ubuntu install.
+
+With `clang` from a package manager
+-----------------------------------
+
+Install `clang`, which [ships with `libfuzzer`](http://llvm.org/docs/LibFuzzer.html#fuzzer-usage)
+since version 6.0:
+
+ sudo apt-get install clang
+
+Configure `openssl` for fuzzing. For now, you'll still need to pass in the path
+to the `libFuzzer` library file while configuring; this is represented as
+`$PATH_TO_LIBFUZZER` below. A typical value would be
+`/usr/lib/llvm-7/lib/clang/7.0.1/lib/linux/libclang_rt.fuzzer-x86_64.a`.
+
+ CC=clang ./config enable-fuzz-libfuzzer \
+ --with-fuzzer-lib=$PATH_TO_LIBFUZZER \
+ -DPEDANTIC enable-asan enable-ubsan no-shared \
+ -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION \
+ -fsanitize=fuzzer-no-link \
+ enable-ec_nistp_64_gcc_128 -fno-sanitize=alignment \
+ enable-weak-ssl-ciphers enable-rc5 enable-md2 \
+ enable-ssl3 enable-ssl3-method enable-nextprotoneg \
+ --debug
+
+Compile:
+
+ sudo apt-get install make
+ make clean
+ LDCMD=clang++ make -j4
+
+Finally, perform the actual fuzzing:
+
+ fuzz/helper.py $FUZZER
+
+where $FUZZER is one of the executables in `fuzz/`.
+It will run until you stop it.
+
+If you get a crash, you should find a corresponding input file in
+`fuzz/corpora/$FUZZER-crash/`.
+
+With `clang` from source/pre-built binaries
+-------------------------------------------
+
+You may also wish to use a pre-built binary from the [LLVM Download
+site](http://releases.llvm.org/download.html), or to [build `clang` from
+source](https://clang.llvm.org/get_started.html). After adding `clang` to your
+path and locating the `libfuzzer` library file, the procedure for configuring
+fuzzing is the same, except that you also need to specify
+a `--with-fuzzer-include` option, which should be the parent directory of the
+prebuilt fuzzer library. This is represented as `$PATH_TO_LIBFUZZER_DIR` below.
+
+ CC=clang ./config enable-fuzz-libfuzzer \
+ --with-fuzzer-include=$PATH_TO_LIBFUZZER_DIR \
+ --with-fuzzer-lib=$PATH_TO_LIBFUZZER \
+ -DPEDANTIC enable-asan enable-ubsan no-shared \
+ -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION \
+ -fsanitize=fuzzer-no-link \
+ enable-ec_nistp_64_gcc_128 -fno-sanitize=alignment \
+ enable-weak-ssl-ciphers enable-rc5 enable-md2 \
+ enable-ssl3 enable-ssl3-method enable-nextprotoneg \
+ --debug
+
+AFL
+---
+
+This is an alternative to using LibFuzzer.
+
+Configure for fuzzing:
+
+ sudo apt-get install afl-clang
+ CC=afl-clang-fast ./config enable-fuzz-afl no-shared no-module \
+ -DPEDANTIC enable-tls1_3 enable-weak-ssl-ciphers enable-rc5 \
+ enable-md2 enable-ssl3 enable-ssl3-method enable-nextprotoneg \
+ enable-ec_nistp_64_gcc_128 -fno-sanitize=alignment \
+ --debug
+ make clean
+ make
+
+The following options can also be enabled: enable-asan, enable-ubsan, enable-msan
+
+Run one of the fuzzers:
+
+ afl-fuzz -i fuzz/corpora/$FUZZER -o fuzz/corpora/$FUZZER/out fuzz/$FUZZER
+
+Where $FUZZER is one of the executables in `fuzz/`.
+
+Reproducing issues
+------------------
+
+If a fuzzer generates a reproducible error, you can reproduce the problem using
+the fuzz/*-test binaries and the file generated by the fuzzer. They binaries
+don't need to be built for fuzzing, there is no need to set CC or the call
+config with enable-fuzz-* or -fsanitize-coverage, but some of the other options
+above might be needed. For instance the enable-asan or enable-ubsan option might
+be useful to show you when the problem happens. For the client and server fuzzer
+it might be needed to use -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION to
+reproduce the generated random numbers.
+
+To reproduce the crash you can run:
+
+ fuzz/$FUZZER-test $file
+
+To do all the tests of a specific fuzzer such as asn1 you can run
+
+ fuzz/asn1-test fuzz/corpora/asn1
+or
+ make test TESTS=fuzz_test_asn1
+
+To run several fuzz tests you can use for instance:
+
+ make test TESTS='test_fuzz_cmp test_fuzz_cms'
+
+To run all fuzz tests you can use:
+
+ make test TESTS='test_fuzz_*'
+
+Random numbers
+--------------
+
+The client and server fuzzer normally generate random numbers as part of the TLS
+connection setup. This results in the coverage of the fuzzing corpus changing
+depending on the random numbers. This also has an effect for coverage of the
+rest of the test suite and you see the coverage change for each commit even when
+no code has been modified.
+
+Since we want to maximize the coverage of the fuzzing corpus, the client and
+server fuzzer will use predictable numbers instead of the random numbers. This
+is controlled by the FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION define.
+
+The coverage depends on the way the numbers are generated. We don't disable any
+check of hashes, but the corpus has the correct hash in it for the random
+numbers that were generated. For instance the client fuzzer will always generate
+the same client hello with the same random number in it, and so the server, as
+emulated by the file, can be generated for that client hello.
+
+Coverage changes
+----------------
+
+Since the corpus depends on the default behaviour of the client and the server,
+changes in what they send by default will have an impact on the coverage. The
+corpus will need to be updated in that case.
+
+Updating the corpus
+-------------------
+
+The client and server corpus is generated with multiple config options:
+
+- The options as documented above
+- Without enable-ec_nistp_64_gcc_128 and without --debug
+- With no-asm
+- Using 32 bit
+- A default config, plus options needed to generate the fuzzer.
+
+The libfuzzer merge option is used to add the additional coverage
+from each config to the minimal set.
+
+Minimizing the corpus
+---------------------
+
+When you have gathered corpus data from more than one fuzzer run
+or for any other reason want to minimize the data
+in some corpus subdirectory `fuzz/corpora/DIR` this can be done as follows:
+
+ mkdir fuzz/corpora/NEWDIR
+ fuzz/$FUZZER -merge=1 fuzz/corpora/NEWDIR fuzz/corpora/DIR
diff --git a/fuzz/asn1.c b/fuzz/asn1.c
new file mode 100644
index 000000000000..ee602a08a3d9
--- /dev/null
+++ b/fuzz/asn1.c
@@ -0,0 +1,375 @@
+/*
+ * Copyright 2016-2022 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * Fuzz ASN.1 parsing for various data structures. Specify which on the
+ * command line:
+ *
+ * asn1 <data structure>
+ */
+
+/* We need to use some deprecated APIs */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <stdio.h>
+#include <string.h>
+#include <openssl/asn1.h>
+#include <openssl/asn1t.h>
+#include <openssl/dh.h>
+#include <openssl/dsa.h>
+#include <openssl/ec.h>
+#include <openssl/ocsp.h>
+#include <openssl/pkcs12.h>
+#include <openssl/rsa.h>
+#include <openssl/ts.h>
+#include <openssl/x509v3.h>
+#include <openssl/cms.h>
+#include <openssl/ess.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include <openssl/bio.h>
+#include <openssl/evp.h>
+#include <openssl/ssl.h>
+#include "internal/nelem.h"
+#include "fuzzer.h"
+
+static ASN1_ITEM_EXP *item_type[] = {
+ ASN1_ITEM_ref(ACCESS_DESCRIPTION),
+#ifndef OPENSSL_NO_RFC3779
+ ASN1_ITEM_ref(ASIdentifierChoice),
+ ASN1_ITEM_ref(ASIdentifiers),
+ ASN1_ITEM_ref(ASIdOrRange),
+#endif
+ ASN1_ITEM_ref(ASN1_ANY),
+ ASN1_ITEM_ref(ASN1_BIT_STRING),
+ ASN1_ITEM_ref(ASN1_BMPSTRING),
+ ASN1_ITEM_ref(ASN1_BOOLEAN),
+ ASN1_ITEM_ref(ASN1_ENUMERATED),
+ ASN1_ITEM_ref(ASN1_FBOOLEAN),
+ ASN1_ITEM_ref(ASN1_GENERALIZEDTIME),
+ ASN1_ITEM_ref(ASN1_GENERALSTRING),
+ ASN1_ITEM_ref(ASN1_IA5STRING),
+ ASN1_ITEM_ref(ASN1_INTEGER),
+ ASN1_ITEM_ref(ASN1_NULL),
+ ASN1_ITEM_ref(ASN1_OBJECT),
+ ASN1_ITEM_ref(ASN1_OCTET_STRING),
+ ASN1_ITEM_ref(ASN1_OCTET_STRING_NDEF),
+ ASN1_ITEM_ref(ASN1_PRINTABLE),
+ ASN1_ITEM_ref(ASN1_PRINTABLESTRING),
+ ASN1_ITEM_ref(ASN1_SEQUENCE),
+ ASN1_ITEM_ref(ASN1_SEQUENCE_ANY),
+ ASN1_ITEM_ref(ASN1_SET_ANY),
+ ASN1_ITEM_ref(ASN1_T61STRING),
+ ASN1_ITEM_ref(ASN1_TBOOLEAN),
+ ASN1_ITEM_ref(ASN1_TIME),
+ ASN1_ITEM_ref(ASN1_UNIVERSALSTRING),
+ ASN1_ITEM_ref(ASN1_UTCTIME),
+ ASN1_ITEM_ref(ASN1_UTF8STRING),
+ ASN1_ITEM_ref(ASN1_VISIBLESTRING),
+#ifndef OPENSSL_NO_RFC3779
+ ASN1_ITEM_ref(ASRange),
+#endif
+ ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS),
+ ASN1_ITEM_ref(AUTHORITY_KEYID),
+ ASN1_ITEM_ref(BASIC_CONSTRAINTS),
+ ASN1_ITEM_ref(BIGNUM),
+ ASN1_ITEM_ref(CBIGNUM),
+ ASN1_ITEM_ref(CERTIFICATEPOLICIES),
+#ifndef OPENSSL_NO_CMS
+ ASN1_ITEM_ref(CMS_ContentInfo),
+ ASN1_ITEM_ref(CMS_ReceiptRequest),
+ ASN1_ITEM_ref(CRL_DIST_POINTS),
+#endif
+#ifndef OPENSSL_NO_DH
+ ASN1_ITEM_ref(DHparams),
+#endif
+ ASN1_ITEM_ref(DIRECTORYSTRING),
+ ASN1_ITEM_ref(DISPLAYTEXT),
+ ASN1_ITEM_ref(DIST_POINT),
+ ASN1_ITEM_ref(DIST_POINT_NAME),
+#if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_DEPRECATED_3_0)
+ ASN1_ITEM_ref(ECPARAMETERS),
+ ASN1_ITEM_ref(ECPKPARAMETERS),
+#endif
+ ASN1_ITEM_ref(EDIPARTYNAME),
+ ASN1_ITEM_ref(EXTENDED_KEY_USAGE),
+ ASN1_ITEM_ref(GENERAL_NAME),
+ ASN1_ITEM_ref(GENERAL_NAMES),
+ ASN1_ITEM_ref(GENERAL_SUBTREE),
+#ifndef OPENSSL_NO_RFC3779
+ ASN1_ITEM_ref(IPAddressChoice),
+ ASN1_ITEM_ref(IPAddressFamily),
+ ASN1_ITEM_ref(IPAddressOrRange),
+ ASN1_ITEM_ref(IPAddressRange),
+#endif
+ ASN1_ITEM_ref(ISSUING_DIST_POINT),
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ASN1_ITEM_ref(LONG),
+#endif
+ ASN1_ITEM_ref(NAME_CONSTRAINTS),
+ ASN1_ITEM_ref(NETSCAPE_CERT_SEQUENCE),
+ ASN1_ITEM_ref(NETSCAPE_SPKAC),
+ ASN1_ITEM_ref(NETSCAPE_SPKI),
+ ASN1_ITEM_ref(NOTICEREF),
+#ifndef OPENSSL_NO_OCSP
+ ASN1_ITEM_ref(OCSP_BASICRESP),
+ ASN1_ITEM_ref(OCSP_CERTID),
+ ASN1_ITEM_ref(OCSP_CERTSTATUS),
+ ASN1_ITEM_ref(OCSP_CRLID),
+ ASN1_ITEM_ref(OCSP_ONEREQ),
+ ASN1_ITEM_ref(OCSP_REQINFO),
+ ASN1_ITEM_ref(OCSP_REQUEST),
+ ASN1_ITEM_ref(OCSP_RESPBYTES),
+ ASN1_ITEM_ref(OCSP_RESPDATA),
+ ASN1_ITEM_ref(OCSP_RESPID),
+ ASN1_ITEM_ref(OCSP_RESPONSE),
+ ASN1_ITEM_ref(OCSP_REVOKEDINFO),
+ ASN1_ITEM_ref(OCSP_SERVICELOC),
+ ASN1_ITEM_ref(OCSP_SIGNATURE),
+ ASN1_ITEM_ref(OCSP_SINGLERESP),
+#endif
+ ASN1_ITEM_ref(OTHERNAME),
+ ASN1_ITEM_ref(PBE2PARAM),
+ ASN1_ITEM_ref(PBEPARAM),
+ ASN1_ITEM_ref(PBKDF2PARAM),
+ ASN1_ITEM_ref(PKCS12),
+ ASN1_ITEM_ref(PKCS12_AUTHSAFES),
+ ASN1_ITEM_ref(PKCS12_BAGS),
+ ASN1_ITEM_ref(PKCS12_MAC_DATA),
+ ASN1_ITEM_ref(PKCS12_SAFEBAG),
+ ASN1_ITEM_ref(PKCS12_SAFEBAGS),
+ ASN1_ITEM_ref(PKCS7),
+ ASN1_ITEM_ref(PKCS7_ATTR_SIGN),
+ ASN1_ITEM_ref(PKCS7_ATTR_VERIFY),
+ ASN1_ITEM_ref(PKCS7_DIGEST),
+ ASN1_ITEM_ref(PKCS7_ENC_CONTENT),
+ ASN1_ITEM_ref(PKCS7_ENCRYPT),
+ ASN1_ITEM_ref(PKCS7_ENVELOPE),
+ ASN1_ITEM_ref(PKCS7_ISSUER_AND_SERIAL),
+ ASN1_ITEM_ref(PKCS7_RECIP_INFO),
+ ASN1_ITEM_ref(PKCS7_SIGNED),
+ ASN1_ITEM_ref(PKCS7_SIGN_ENVELOPE),
+ ASN1_ITEM_ref(PKCS7_SIGNER_INFO),
+ ASN1_ITEM_ref(PKCS8_PRIV_KEY_INFO),
+ ASN1_ITEM_ref(PKEY_USAGE_PERIOD),
+ ASN1_ITEM_ref(POLICY_CONSTRAINTS),
+ ASN1_ITEM_ref(POLICYINFO),
+ ASN1_ITEM_ref(POLICY_MAPPING),
+ ASN1_ITEM_ref(POLICY_MAPPINGS),
+ ASN1_ITEM_ref(POLICYQUALINFO),
+ ASN1_ITEM_ref(PROXY_CERT_INFO_EXTENSION),
+ ASN1_ITEM_ref(PROXY_POLICY),
+ ASN1_ITEM_ref(RSA_OAEP_PARAMS),
+ ASN1_ITEM_ref(RSA_PSS_PARAMS),
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ASN1_ITEM_ref(RSAPrivateKey),
+ ASN1_ITEM_ref(RSAPublicKey),
+#endif
+ ASN1_ITEM_ref(SXNET),
+ ASN1_ITEM_ref(SXNETID),
+ ASN1_ITEM_ref(USERNOTICE),
+ ASN1_ITEM_ref(X509),
+ ASN1_ITEM_ref(X509_ALGOR),
+ ASN1_ITEM_ref(X509_ALGORS),
+ ASN1_ITEM_ref(X509_ATTRIBUTE),
+ ASN1_ITEM_ref(X509_CERT_AUX),
+ ASN1_ITEM_ref(X509_CINF),
+ ASN1_ITEM_ref(X509_CRL),
+ ASN1_ITEM_ref(X509_CRL_INFO),
+ ASN1_ITEM_ref(X509_EXTENSION),
+ ASN1_ITEM_ref(X509_EXTENSIONS),
+ ASN1_ITEM_ref(X509_NAME),
+ ASN1_ITEM_ref(X509_NAME_ENTRY),
+ ASN1_ITEM_ref(X509_PUBKEY),
+ ASN1_ITEM_ref(X509_REQ),
+ ASN1_ITEM_ref(X509_REQ_INFO),
+ ASN1_ITEM_ref(X509_REVOKED),
+ ASN1_ITEM_ref(X509_SIG),
+ ASN1_ITEM_ref(X509_VAL),
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ASN1_ITEM_ref(ZLONG),
+#endif
+ ASN1_ITEM_ref(INT32),
+ ASN1_ITEM_ref(ZINT32),
+ ASN1_ITEM_ref(UINT32),
+ ASN1_ITEM_ref(ZUINT32),
+ ASN1_ITEM_ref(INT64),
+ ASN1_ITEM_ref(ZINT64),
+ ASN1_ITEM_ref(UINT64),
+ ASN1_ITEM_ref(ZUINT64),
+ NULL
+};
+
+static ASN1_PCTX *pctx;
+
+#define DO_TEST(TYPE, D2I, I2D, PRINT) { \
+ const unsigned char *p = buf; \
+ unsigned char *der = NULL; \
+ TYPE *type = D2I(NULL, &p, len); \
+ \
+ if (type != NULL) { \
+ int len2; \
+ BIO *bio = BIO_new(BIO_s_null()); \
+ \
+ if (bio != NULL) { \
+ PRINT(bio, type); \
+ BIO_free(bio); \
+ } \
+ len2 = I2D(type, &der); \
+ if (len2 != 0) {} \
+ OPENSSL_free(der); \
+ TYPE ## _free(type); \
+ } \
+}
+
+#define DO_TEST_PRINT_OFFSET(TYPE, D2I, I2D, PRINT) { \
+ const unsigned char *p = buf; \
+ unsigned char *der = NULL; \
+ TYPE *type = D2I(NULL, &p, len); \
+ \
+ if (type != NULL) { \
+ BIO *bio = BIO_new(BIO_s_null()); \
+ \
+ if (bio != NULL) { \
+ PRINT(bio, type, 0); \
+ BIO_free(bio); \
+ } \
+ I2D(type, &der); \
+ OPENSSL_free(der); \
+ TYPE ## _free(type); \
+ } \
+}
+
+#define DO_TEST_PRINT_PCTX(TYPE, D2I, I2D, PRINT) { \
+ const unsigned char *p = buf; \
+ unsigned char *der = NULL; \
+ TYPE *type = D2I(NULL, &p, len); \
+ \
+ if (type != NULL) { \
+ BIO *bio = BIO_new(BIO_s_null()); \
+ \
+ if (bio != NULL) { \
+ PRINT(bio, type, 0, pctx); \
+ BIO_free(bio); \
+ } \
+ I2D(type, &der); \
+ OPENSSL_free(der); \
+ TYPE ## _free(type); \
+ } \
+}
+
+
+#define DO_TEST_NO_PRINT(TYPE, D2I, I2D) { \
+ const unsigned char *p = buf; \
+ unsigned char *der = NULL; \
+ TYPE *type = D2I(NULL, &p, len); \
+ \
+ if (type != NULL) { \
+ BIO *bio = BIO_new(BIO_s_null()); \
+ \
+ BIO_free(bio); \
+ I2D(type, &der); \
+ OPENSSL_free(der); \
+ TYPE ## _free(type); \
+ } \
+}
+
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ FuzzerSetRand();
+ pctx = ASN1_PCTX_new();
+ ASN1_PCTX_set_flags(pctx, ASN1_PCTX_FLAGS_SHOW_ABSENT |
+ ASN1_PCTX_FLAGS_SHOW_SEQUENCE | ASN1_PCTX_FLAGS_SHOW_SSOF |
+ ASN1_PCTX_FLAGS_SHOW_TYPE | ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME);
+ ASN1_PCTX_set_str_flags(pctx, ASN1_STRFLGS_UTF8_CONVERT |
+ ASN1_STRFLGS_SHOW_TYPE | ASN1_STRFLGS_DUMP_ALL);
+
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
+ OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL);
+ ERR_clear_error();
+ CRYPTO_free_ex_index(0, -1);
+
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ int n;
+
+
+ for (n = 0; item_type[n] != NULL; ++n) {
+ const uint8_t *b = buf;
+ unsigned char *der = NULL;
+ const ASN1_ITEM *i = ASN1_ITEM_ptr(item_type[n]);
+ ASN1_VALUE *o = ASN1_item_d2i(NULL, &b, len, i);
+
+ if (o != NULL) {
+ BIO *bio = BIO_new(BIO_s_null());
+ if (bio != NULL) {
+ ASN1_item_print(bio, o, 4, i, pctx);
+ BIO_free(bio);
+ }
+ if (ASN1_item_i2d(o, &der, i) > 0) {
+ OPENSSL_free(der);
+ }
+ ASN1_item_free(o, i);
+ }
+ }
+
+#ifndef OPENSSL_NO_TS
+ DO_TEST(TS_REQ, d2i_TS_REQ, i2d_TS_REQ, TS_REQ_print_bio);
+ DO_TEST(TS_MSG_IMPRINT, d2i_TS_MSG_IMPRINT, i2d_TS_MSG_IMPRINT, TS_MSG_IMPRINT_print_bio);
+ DO_TEST(TS_RESP, d2i_TS_RESP, i2d_TS_RESP, TS_RESP_print_bio);
+ DO_TEST(TS_STATUS_INFO, d2i_TS_STATUS_INFO, i2d_TS_STATUS_INFO, TS_STATUS_INFO_print_bio);
+ DO_TEST(TS_TST_INFO, d2i_TS_TST_INFO, i2d_TS_TST_INFO, TS_TST_INFO_print_bio);
+ DO_TEST_NO_PRINT(TS_ACCURACY, d2i_TS_ACCURACY, i2d_TS_ACCURACY);
+#endif
+ DO_TEST_NO_PRINT(ESS_ISSUER_SERIAL, d2i_ESS_ISSUER_SERIAL, i2d_ESS_ISSUER_SERIAL);
+ DO_TEST_NO_PRINT(ESS_CERT_ID, d2i_ESS_CERT_ID, i2d_ESS_CERT_ID);
+ DO_TEST_NO_PRINT(ESS_SIGNING_CERT, d2i_ESS_SIGNING_CERT, i2d_ESS_SIGNING_CERT);
+ DO_TEST_NO_PRINT(ESS_CERT_ID_V2, d2i_ESS_CERT_ID_V2, i2d_ESS_CERT_ID_V2);
+ DO_TEST_NO_PRINT(ESS_SIGNING_CERT_V2, d2i_ESS_SIGNING_CERT_V2, i2d_ESS_SIGNING_CERT_V2);
+#if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0)
+ DO_TEST_NO_PRINT(DH, d2i_DHparams, i2d_DHparams);
+ DO_TEST_NO_PRINT(DH, d2i_DHxparams, i2d_DHxparams);
+#endif
+#ifndef OPENSSL_NO_DSA
+ DO_TEST_NO_PRINT(DSA_SIG, d2i_DSA_SIG, i2d_DSA_SIG);
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ DO_TEST_NO_PRINT(DSA, d2i_DSAPrivateKey, i2d_DSAPrivateKey);
+ DO_TEST_NO_PRINT(DSA, d2i_DSAPublicKey, i2d_DSAPublicKey);
+ DO_TEST_NO_PRINT(DSA, d2i_DSAparams, i2d_DSAparams);
+# endif
+#endif
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ DO_TEST_NO_PRINT(RSA, d2i_RSAPublicKey, i2d_RSAPublicKey);
+#endif
+#ifndef OPENSSL_NO_EC
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ DO_TEST_PRINT_OFFSET(EC_GROUP, d2i_ECPKParameters, i2d_ECPKParameters, ECPKParameters_print);
+ DO_TEST_PRINT_OFFSET(EC_KEY, d2i_ECPrivateKey, i2d_ECPrivateKey, EC_KEY_print);
+ DO_TEST(EC_KEY, d2i_ECParameters, i2d_ECParameters, ECParameters_print);
+ DO_TEST_NO_PRINT(ECDSA_SIG, d2i_ECDSA_SIG, i2d_ECDSA_SIG);
+# endif
+#endif
+ DO_TEST_PRINT_PCTX(EVP_PKEY, d2i_AutoPrivateKey, i2d_PrivateKey, EVP_PKEY_print_private);
+ DO_TEST(SSL_SESSION, d2i_SSL_SESSION, i2d_SSL_SESSION, SSL_SESSION_print);
+
+ ERR_clear_error();
+
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+ ASN1_PCTX_free(pctx);
+ FuzzerClearRand();
+}
diff --git a/fuzz/asn1parse.c b/fuzz/asn1parse.c
new file mode 100644
index 000000000000..c25705cf730d
--- /dev/null
+++ b/fuzz/asn1parse.c
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * Fuzz the parser used for dumping ASN.1 using "openssl asn1parse".
+ */
+
+#include <stdio.h>
+#include <openssl/asn1.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+static BIO *bio_out;
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ bio_out = BIO_new(BIO_s_null()); /* output will be ignored */
+ if (bio_out == NULL)
+ return 0;
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
+ ERR_clear_error();
+ CRYPTO_free_ex_index(0, -1);
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ (void)ASN1_parse_dump(bio_out, buf, len, 0, 0);
+ ERR_clear_error();
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+ BIO_free(bio_out);
+}
diff --git a/fuzz/bignum.c b/fuzz/bignum.c
new file mode 100644
index 000000000000..d7c3716aacb4
--- /dev/null
+++ b/fuzz/bignum.c
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2016 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * Confirm that a^b mod c agrees when calculated cleverly vs naively, for
+ * random a, b and c.
+ */
+
+#include <stdio.h>
+#include <openssl/bn.h>
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
+ ERR_clear_error();
+
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ int success = 0;
+ size_t l1 = 0, l2 = 0, l3 = 0;
+ int s1 = 0, s3 = 0;
+ BN_CTX *ctx;
+ BIGNUM *b1;
+ BIGNUM *b2;
+ BIGNUM *b3;
+ BIGNUM *b4;
+ BIGNUM *b5;
+
+ b1 = BN_new();
+ b2 = BN_new();
+ b3 = BN_new();
+ b4 = BN_new();
+ b5 = BN_new();
+ ctx = BN_CTX_new();
+
+ /* Divide the input into three parts, using the values of the first two
+ * bytes to choose lengths, which generate b1, b2 and b3. Use three bits
+ * of the third byte to choose signs for the three numbers.
+ */
+ if (len > 2) {
+ len -= 3;
+ l1 = (buf[0] * len) / 255;
+ ++buf;
+ l2 = (buf[0] * (len - l1)) / 255;
+ ++buf;
+ l3 = len - l1 - l2;
+
+ s1 = buf[0] & 1;
+ s3 = buf[0] & 4;
+ ++buf;
+ }
+ OPENSSL_assert(BN_bin2bn(buf, l1, b1) == b1);
+ BN_set_negative(b1, s1);
+ OPENSSL_assert(BN_bin2bn(buf + l1, l2, b2) == b2);
+ OPENSSL_assert(BN_bin2bn(buf + l1 + l2, l3, b3) == b3);
+ BN_set_negative(b3, s3);
+
+ /* mod 0 is undefined */
+ if (BN_is_zero(b3)) {
+ success = 1;
+ goto done;
+ }
+
+ OPENSSL_assert(BN_mod_exp(b4, b1, b2, b3, ctx));
+ OPENSSL_assert(BN_mod_exp_simple(b5, b1, b2, b3, ctx));
+
+ success = BN_cmp(b4, b5) == 0;
+ if (!success) {
+ BN_print_fp(stdout, b1);
+ putchar('\n');
+ BN_print_fp(stdout, b2);
+ putchar('\n');
+ BN_print_fp(stdout, b3);
+ putchar('\n');
+ BN_print_fp(stdout, b4);
+ putchar('\n');
+ BN_print_fp(stdout, b5);
+ putchar('\n');
+ }
+
+ done:
+ OPENSSL_assert(success);
+ BN_free(b1);
+ BN_free(b2);
+ BN_free(b3);
+ BN_free(b4);
+ BN_free(b5);
+ BN_CTX_free(ctx);
+ ERR_clear_error();
+
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+}
diff --git a/fuzz/bndiv.c b/fuzz/bndiv.c
new file mode 100644
index 000000000000..d9467b5e8b41
--- /dev/null
+++ b/fuzz/bndiv.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2016 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * Confirm that if (d, r) = a / b, then b * d + r == a, and that sign(d) ==
+ * sign(a), and 0 <= r <= b
+ */
+
+#include <stdio.h>
+#include <openssl/bn.h>
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+/* 256 kB */
+#define MAX_LEN (256 * 1000)
+
+static BN_CTX *ctx;
+static BIGNUM *b1;
+static BIGNUM *b2;
+static BIGNUM *b3;
+static BIGNUM *b4;
+static BIGNUM *b5;
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ b1 = BN_new();
+ b2 = BN_new();
+ b3 = BN_new();
+ b4 = BN_new();
+ b5 = BN_new();
+ ctx = BN_CTX_new();
+
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
+ ERR_clear_error();
+
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ int success = 0;
+ size_t l1 = 0, l2 = 0;
+ /* s1 and s2 will be the signs for b1 and b2. */
+ int s1 = 0, s2 = 0;
+
+ /* limit the size of the input to avoid timeout */
+ if (len > MAX_LEN)
+ len = MAX_LEN;
+
+ /* We are going to split the buffer in two, sizes l1 and l2, giving b1 and
+ * b2.
+ */
+ if (len > 0) {
+ --len;
+ /* Use first byte to divide the remaining buffer into 3Fths. I admit
+ * this disallows some number sizes. If it matters, better ideas are
+ * welcome (Ben).
+ */
+ l1 = ((buf[0] & 0x3f) * len) / 0x3f;
+ s1 = buf[0] & 0x40;
+ s2 = buf[0] & 0x80;
+ ++buf;
+ l2 = len - l1;
+ }
+ OPENSSL_assert(BN_bin2bn(buf, l1, b1) == b1);
+ BN_set_negative(b1, s1);
+ OPENSSL_assert(BN_bin2bn(buf + l1, l2, b2) == b2);
+ BN_set_negative(b2, s2);
+
+ /* divide by 0 is an error */
+ if (BN_is_zero(b2)) {
+ success = 1;
+ goto done;
+ }
+
+ OPENSSL_assert(BN_div(b3, b4, b1, b2, ctx));
+ if (BN_is_zero(b1))
+ success = BN_is_zero(b3) && BN_is_zero(b4);
+ else if (BN_is_negative(b1))
+ success = (BN_is_negative(b3) != BN_is_negative(b2) || BN_is_zero(b3))
+ && (BN_is_negative(b4) || BN_is_zero(b4));
+ else
+ success = (BN_is_negative(b3) == BN_is_negative(b2) || BN_is_zero(b3))
+ && (!BN_is_negative(b4) || BN_is_zero(b4));
+ OPENSSL_assert(BN_mul(b5, b3, b2, ctx));
+ OPENSSL_assert(BN_add(b5, b5, b4));
+
+ success = success && BN_cmp(b5, b1) == 0;
+ if (!success) {
+ BN_print_fp(stdout, b1);
+ putchar('\n');
+ BN_print_fp(stdout, b2);
+ putchar('\n');
+ BN_print_fp(stdout, b3);
+ putchar('\n');
+ BN_print_fp(stdout, b4);
+ putchar('\n');
+ BN_print_fp(stdout, b5);
+ putchar('\n');
+ printf("%d %d %d %d %d %d %d\n", BN_is_negative(b1),
+ BN_is_negative(b2),
+ BN_is_negative(b3), BN_is_negative(b4), BN_is_zero(b4),
+ BN_is_negative(b3) != BN_is_negative(b2)
+ && (BN_is_negative(b4) || BN_is_zero(b4)),
+ BN_cmp(b5, b1));
+ puts("----\n");
+ }
+
+ done:
+ OPENSSL_assert(success);
+ ERR_clear_error();
+
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+ BN_free(b1);
+ BN_free(b2);
+ BN_free(b3);
+ BN_free(b4);
+ BN_free(b5);
+ BN_CTX_free(ctx);
+}
diff --git a/fuzz/build.info b/fuzz/build.info
new file mode 100644
index 000000000000..dc976b70f067
--- /dev/null
+++ b/fuzz/build.info
@@ -0,0 +1,146 @@
+{- use File::Spec::Functions;
+ our $ex_inc = $withargs{fuzzer_include} &&
+ (file_name_is_absolute($withargs{fuzzer_include}) ?
+ $withargs{fuzzer_include} : catdir(updir(), $withargs{fuzzer_include}));
+ our $ex_lib = $withargs{fuzzer_lib} &&
+ (file_name_is_absolute($withargs{fuzzer_lib}) ?
+ $withargs{fuzzer_lib} : catfile(updir(), $withargs{fuzzer_lib}));
+ ""
+-}
+
+IF[{- !$disabled{"fuzz-afl"} || !$disabled{"fuzz-libfuzzer"} -}]
+ PROGRAMS{noinst}=asn1 asn1parse bignum bndiv client conf crl server
+
+ IF[{- !$disabled{"cmp"} -}]
+ PROGRAMS{noinst}=cmp
+ ENDIF
+
+ IF[{- !$disabled{"cms"} -}]
+ PROGRAMS{noinst}=cms
+ ENDIF
+
+ IF[{- !$disabled{"ct"} -}]
+ PROGRAMS{noinst}=ct
+ ENDIF
+
+ IF[{- !$disabled{"ocsp"} -}]
+ PROGRAMS{noinst}=x509
+ ENDIF
+
+ SOURCE[asn1]=asn1.c driver.c fuzz_rand.c
+ INCLUDE[asn1]=../include {- $ex_inc -}
+ DEPEND[asn1]=../libcrypto ../libssl {- $ex_lib -}
+
+ SOURCE[asn1parse]=asn1parse.c driver.c
+ INCLUDE[asn1parse]=../include {- $ex_inc -}
+ DEPEND[asn1parse]=../libcrypto {- $ex_lib -}
+
+ SOURCE[bignum]=bignum.c driver.c
+ INCLUDE[bignum]=../include {- $ex_inc -}
+ DEPEND[bignum]=../libcrypto {- $ex_lib -}
+
+ SOURCE[bndiv]=bndiv.c driver.c
+ INCLUDE[bndiv]=../include {- $ex_inc -}
+ DEPEND[bndiv]=../libcrypto {- $ex_lib -}
+
+ SOURCE[client]=client.c driver.c fuzz_rand.c
+ INCLUDE[client]=../include {- $ex_inc -}
+ DEPEND[client]=../libcrypto ../libssl {- $ex_lib -}
+
+ SOURCE[cmp]=cmp.c driver.c fuzz_rand.c
+ INCLUDE[cmp]=../include {- $ex_inc -}
+ DEPEND[cmp]=../libcrypto {- $ex_lib -}
+
+ SOURCE[cms]=cms.c driver.c
+ INCLUDE[cms]=../include {- $ex_inc -}
+ DEPEND[cms]=../libcrypto {- $ex_lib -}
+
+ SOURCE[conf]=conf.c driver.c
+ INCLUDE[conf]=../include {- $ex_inc -}
+ DEPEND[conf]=../libcrypto {- $ex_lib -}
+
+ SOURCE[crl]=crl.c driver.c
+ INCLUDE[crl]=../include {- $ex_inc -}
+ DEPEND[crl]=../libcrypto {- $ex_lib -}
+
+ SOURCE[ct]=ct.c driver.c
+ INCLUDE[ct]=../include {- $ex_inc -}
+ DEPEND[ct]=../libcrypto {- $ex_lib -}
+
+ SOURCE[server]=server.c driver.c fuzz_rand.c
+ INCLUDE[server]=../include {- $ex_inc -}
+ DEPEND[server]=../libcrypto ../libssl {- $ex_lib -}
+
+ SOURCE[x509]=x509.c driver.c fuzz_rand.c
+ INCLUDE[x509]=../include {- $ex_inc -}
+ DEPEND[x509]=../libcrypto {- $ex_lib -}
+ENDIF
+
+IF[{- !$disabled{tests} -}]
+ PROGRAMS{noinst}=asn1-test asn1parse-test bignum-test bndiv-test client-test conf-test crl-test server-test
+
+ IF[{- !$disabled{"cmp"} -}]
+ PROGRAMS{noinst}=cmp-test
+ ENDIF
+
+ IF[{- !$disabled{"cms"} -}]
+ PROGRAMS{noinst}=cms-test
+ ENDIF
+
+ IF[{- !$disabled{"ct"} -}]
+ PROGRAMS{noinst}=ct-test
+ ENDIF
+
+ IF[{- !$disabled{"ocsp"} -}]
+ PROGRAMS{noinst}=x509-test
+ ENDIF
+
+ SOURCE[asn1-test]=asn1.c test-corpus.c fuzz_rand.c
+ INCLUDE[asn1-test]=../include
+ DEPEND[asn1-test]=../libcrypto ../libssl
+
+ SOURCE[asn1parse-test]=asn1parse.c test-corpus.c
+ INCLUDE[asn1parse-test]=../include
+ DEPEND[asn1parse-test]=../libcrypto
+
+ SOURCE[bignum-test]=bignum.c test-corpus.c
+ INCLUDE[bignum-test]=../include
+ DEPEND[bignum-test]=../libcrypto
+
+ SOURCE[bndiv-test]=bndiv.c test-corpus.c
+ INCLUDE[bndiv-test]=../include
+ DEPEND[bndiv-test]=../libcrypto
+
+ SOURCE[client-test]=client.c test-corpus.c fuzz_rand.c
+ INCLUDE[client-test]=../include
+ DEPEND[client-test]=../libcrypto ../libssl
+
+ SOURCE[cmp-test]=cmp.c test-corpus.c fuzz_rand.c
+ INCLUDE[cmp-test]=../include
+ DEPEND[cmp-test]=../libcrypto.a
+ # referring to static lib allows using non-exported functions
+
+ SOURCE[cms-test]=cms.c test-corpus.c
+ INCLUDE[cms-test]=../include
+ DEPEND[cms-test]=../libcrypto
+
+ SOURCE[conf-test]=conf.c test-corpus.c
+ INCLUDE[conf-test]=../include
+ DEPEND[conf-test]=../libcrypto
+
+ SOURCE[crl-test]=crl.c test-corpus.c
+ INCLUDE[crl-test]=../include
+ DEPEND[crl-test]=../libcrypto
+
+ SOURCE[ct-test]=ct.c test-corpus.c
+ INCLUDE[ct-test]=../include
+ DEPEND[ct-test]=../libcrypto
+
+ SOURCE[server-test]=server.c test-corpus.c fuzz_rand.c
+ INCLUDE[server-test]=../include
+ DEPEND[server-test]=../libcrypto ../libssl
+
+ SOURCE[x509-test]=x509.c test-corpus.c fuzz_rand.c
+ INCLUDE[x509-test]=../include
+ DEPEND[x509-test]=../libcrypto
+ENDIF
diff --git a/fuzz/client.c b/fuzz/client.c
new file mode 100644
index 000000000000..1754add50967
--- /dev/null
+++ b/fuzz/client.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2016-2022 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <time.h>
+#include <openssl/rand.h>
+#include <openssl/ssl.h>
+#include <openssl/rsa.h>
+#include <openssl/dsa.h>
+#include <openssl/ec.h>
+#include <openssl/dh.h>
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+/* unused, to avoid warning. */
+static int idx;
+
+#define FUZZTIME 1485898104
+
+#define TIME_IMPL(t) { if (t != NULL) *t = FUZZTIME; return FUZZTIME; }
+
+/*
+ * This might not work in all cases (and definitely not on Windows
+ * because of the way linkers are) and callees can still get the
+ * current time instead of the fixed time. This will just result
+ * in things not being fully reproducible and have a slightly
+ * different coverage.
+ */
+#if !defined(_WIN32)
+time_t time(time_t *t) TIME_IMPL(t)
+#endif
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ STACK_OF(SSL_COMP) *comp_methods;
+
+ FuzzerSetRand();
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS | OPENSSL_INIT_ASYNC, NULL);
+ OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL);
+ ERR_clear_error();
+ CRYPTO_free_ex_index(0, -1);
+ idx = SSL_get_ex_data_X509_STORE_CTX_idx();
+ comp_methods = SSL_COMP_get_compression_methods();
+ if (comp_methods != NULL)
+ sk_SSL_COMP_sort(comp_methods);
+
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ SSL *client = NULL;
+ BIO *in;
+ BIO *out;
+ SSL_CTX *ctx;
+
+ if (len == 0)
+ return 0;
+
+ /* This only fuzzes the initial flow from the client so far. */
+ ctx = SSL_CTX_new(SSLv23_method());
+ if (ctx == NULL)
+ goto end;
+
+ client = SSL_new(ctx);
+ if (client == NULL)
+ goto end;
+ OPENSSL_assert(SSL_set_min_proto_version(client, 0) == 1);
+ OPENSSL_assert(SSL_set_cipher_list(client, "ALL:eNULL:@SECLEVEL=0") == 1);
+ SSL_set_tlsext_host_name(client, "localhost");
+ in = BIO_new(BIO_s_mem());
+ if (in == NULL)
+ goto end;
+ out = BIO_new(BIO_s_mem());
+ if (out == NULL) {
+ BIO_free(in);
+ goto end;
+ }
+ SSL_set_bio(client, in, out);
+ SSL_set_connect_state(client);
+ OPENSSL_assert((size_t)BIO_write(in, buf, len) == len);
+ if (SSL_do_handshake(client) == 1) {
+ /* Keep reading application data until error or EOF. */
+ uint8_t tmp[1024];
+ for (;;) {
+ if (SSL_read(client, tmp, sizeof(tmp)) <= 0) {
+ break;
+ }
+ }
+ }
+ end:
+ SSL_free(client);
+ ERR_clear_error();
+ SSL_CTX_free(ctx);
+
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+ FuzzerClearRand();
+}
diff --git a/fuzz/cmp.c b/fuzz/cmp.c
new file mode 100644
index 000000000000..490c4211f8e2
--- /dev/null
+++ b/fuzz/cmp.c
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * Test CMP DER parsing.
+ */
+
+#include <openssl/bio.h>
+#include <openssl/cmp.h>
+#include "../crypto/cmp/cmp_local.h"
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ FuzzerSetRand();
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
+ ERR_clear_error();
+ CRYPTO_free_ex_index(0, -1);
+ return 1;
+}
+
+static int num_responses;
+
+static OSSL_CMP_MSG *transfer_cb(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *req)
+{
+ if (num_responses++ > 2)
+ return NULL; /* prevent loops due to repeated pollRep */
+ return OSSL_CMP_MSG_dup((OSSL_CMP_MSG *)
+ OSSL_CMP_CTX_get_transfer_cb_arg(ctx));
+}
+
+static int print_noop(const char *func, const char *file, int line,
+ OSSL_CMP_severity level, const char *msg)
+{
+ return 1;
+}
+
+static int allow_unprotected(const OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *rep,
+ int invalid_protection, int expected_type)
+{
+ return 1;
+}
+
+static void cmp_client_process_response(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg)
+{
+ X509_NAME *name = X509_NAME_new();
+ ASN1_INTEGER *serial = ASN1_INTEGER_new();
+
+ ctx->unprotectedSend = 1; /* satisfy ossl_cmp_msg_protect() */
+ ctx->disableConfirm = 1; /* check just one response message */
+ ctx->popoMethod = OSSL_CRMF_POPO_NONE; /* satisfy ossl_cmp_certReq_new() */
+ ctx->oldCert = X509_new(); /* satisfy crm_new() and ossl_cmp_rr_new() */
+ if (!OSSL_CMP_CTX_set1_secretValue(ctx, (unsigned char *)"",
+ 0) /* prevent too unspecific error */
+ || ctx->oldCert == NULL
+ || name == NULL || !X509_set_issuer_name(ctx->oldCert, name)
+ || serial == NULL || !X509_set_serialNumber(ctx->oldCert, serial))
+ goto err;
+
+ (void)OSSL_CMP_CTX_set_transfer_cb(ctx, transfer_cb);
+ (void)OSSL_CMP_CTX_set_transfer_cb_arg(ctx, msg);
+ (void)OSSL_CMP_CTX_set_log_cb(ctx, print_noop);
+ num_responses = 0;
+ switch (msg->body != NULL ? msg->body->type : -1) {
+ case OSSL_CMP_PKIBODY_IP:
+ (void)OSSL_CMP_exec_IR_ses(ctx);
+ break;
+ case OSSL_CMP_PKIBODY_CP:
+ (void)OSSL_CMP_exec_CR_ses(ctx);
+ (void)OSSL_CMP_exec_P10CR_ses(ctx);
+ break;
+ case OSSL_CMP_PKIBODY_KUP:
+ (void)OSSL_CMP_exec_KUR_ses(ctx);
+ break;
+ case OSSL_CMP_PKIBODY_POLLREP:
+ ctx->status = OSSL_CMP_PKISTATUS_waiting;
+ (void)OSSL_CMP_try_certreq(ctx, OSSL_CMP_PKIBODY_CR, NULL, NULL);
+ break;
+ case OSSL_CMP_PKIBODY_RP:
+ (void)OSSL_CMP_exec_RR_ses(ctx);
+ break;
+ case OSSL_CMP_PKIBODY_GENP:
+ sk_OSSL_CMP_ITAV_pop_free(OSSL_CMP_exec_GENM_ses(ctx),
+ OSSL_CMP_ITAV_free);
+ break;
+ default:
+ (void)ossl_cmp_msg_check_update(ctx, msg, allow_unprotected, 0);
+ break;
+ }
+ err:
+ X509_NAME_free(name);
+ ASN1_INTEGER_free(serial);
+}
+
+static OSSL_CMP_PKISI *process_cert_request(OSSL_CMP_SRV_CTX *srv_ctx,
+ const OSSL_CMP_MSG *cert_req,
+ int certReqId,
+ const OSSL_CRMF_MSG *crm,
+ const X509_REQ *p10cr,
+ X509 **certOut,
+ STACK_OF(X509) **chainOut,
+ STACK_OF(X509) **caPubs)
+{
+ ERR_raise(ERR_LIB_CMP, CMP_R_ERROR_PROCESSING_MESSAGE);
+ return NULL;
+}
+
+static OSSL_CMP_PKISI *process_rr(OSSL_CMP_SRV_CTX *srv_ctx,
+ const OSSL_CMP_MSG *rr,
+ const X509_NAME *issuer,
+ const ASN1_INTEGER *serial)
+{
+ ERR_raise(ERR_LIB_CMP, CMP_R_ERROR_PROCESSING_MESSAGE);
+ return NULL;
+}
+
+static int process_genm(OSSL_CMP_SRV_CTX *srv_ctx,
+ const OSSL_CMP_MSG *genm,
+ const STACK_OF(OSSL_CMP_ITAV) *in,
+ STACK_OF(OSSL_CMP_ITAV) **out)
+{
+ ERR_raise(ERR_LIB_CMP, CMP_R_ERROR_PROCESSING_MESSAGE);
+ return 0;
+}
+
+static void process_error(OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *error,
+ const OSSL_CMP_PKISI *statusInfo,
+ const ASN1_INTEGER *errorCode,
+ const OSSL_CMP_PKIFREETEXT *errorDetails)
+{
+ ERR_raise(ERR_LIB_CMP, CMP_R_ERROR_PROCESSING_MESSAGE);
+}
+
+static int process_certConf(OSSL_CMP_SRV_CTX *srv_ctx,
+ const OSSL_CMP_MSG *certConf, int certReqId,
+ const ASN1_OCTET_STRING *certHash,
+ const OSSL_CMP_PKISI *si)
+{
+ ERR_raise(ERR_LIB_CMP, CMP_R_ERROR_PROCESSING_MESSAGE);
+ return 0;
+}
+
+static int process_pollReq(OSSL_CMP_SRV_CTX *srv_ctx,
+ const OSSL_CMP_MSG *pollReq, int certReqId,
+ OSSL_CMP_MSG **certReq, int64_t *check_after)
+{
+ ERR_raise(ERR_LIB_CMP, CMP_R_ERROR_PROCESSING_MESSAGE);
+ return 0;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ OSSL_CMP_MSG *msg;
+ BIO *in;
+
+ if (len == 0)
+ return 0;
+
+ in = BIO_new(BIO_s_mem());
+ OPENSSL_assert((size_t)BIO_write(in, buf, len) == len);
+ msg = d2i_OSSL_CMP_MSG_bio(in, NULL);
+ if (msg != NULL) {
+ BIO *out = BIO_new(BIO_s_null());
+ OSSL_CMP_SRV_CTX *srv_ctx = OSSL_CMP_SRV_CTX_new(NULL, NULL);
+ OSSL_CMP_CTX *client_ctx = OSSL_CMP_CTX_new(NULL, NULL);
+
+ i2d_OSSL_CMP_MSG_bio(out, msg);
+ ASN1_item_print(out, (ASN1_VALUE *)msg, 4,
+ ASN1_ITEM_rptr(OSSL_CMP_MSG), NULL);
+ BIO_free(out);
+
+ if (client_ctx != NULL)
+ cmp_client_process_response(client_ctx, msg);
+ if (srv_ctx != NULL
+ && OSSL_CMP_CTX_set_log_cb(OSSL_CMP_SRV_CTX_get0_cmp_ctx(srv_ctx),
+ print_noop)
+ && OSSL_CMP_SRV_CTX_init(srv_ctx, NULL, process_cert_request,
+ process_rr, process_genm, process_error,
+ process_certConf, process_pollReq))
+ OSSL_CMP_MSG_free(OSSL_CMP_SRV_process_request(srv_ctx, msg));
+
+ OSSL_CMP_CTX_free(client_ctx);
+ OSSL_CMP_SRV_CTX_free(srv_ctx);
+ OSSL_CMP_MSG_free(msg);
+ }
+
+ BIO_free(in);
+ ERR_clear_error();
+
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+ FuzzerClearRand();
+}
diff --git a/fuzz/cms.c b/fuzz/cms.c
new file mode 100644
index 000000000000..d464429a5407
--- /dev/null
+++ b/fuzz/cms.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2016 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * Test CMS DER parsing.
+ */
+
+#include <openssl/bio.h>
+#include <openssl/cms.h>
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
+ ERR_clear_error();
+ CRYPTO_free_ex_index(0, -1);
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ CMS_ContentInfo *cms;
+ BIO *in;
+
+ if (len == 0)
+ return 0;
+
+ in = BIO_new(BIO_s_mem());
+ OPENSSL_assert((size_t)BIO_write(in, buf, len) == len);
+ cms = d2i_CMS_bio(in, NULL);
+ if (cms != NULL) {
+ BIO *out = BIO_new(BIO_s_null());
+
+ i2d_CMS_bio(out, cms);
+ BIO_free(out);
+ CMS_ContentInfo_free(cms);
+ }
+
+ BIO_free(in);
+ ERR_clear_error();
+
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+}
diff --git a/fuzz/conf.c b/fuzz/conf.c
new file mode 100644
index 000000000000..72e4b358fd86
--- /dev/null
+++ b/fuzz/conf.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2016 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * Test configuration parsing.
+ */
+
+#include <openssl/conf.h>
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
+ ERR_clear_error();
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ CONF *conf;
+ BIO *in;
+ long eline;
+
+ if (len == 0)
+ return 0;
+
+ conf = NCONF_new(NULL);
+ in = BIO_new(BIO_s_mem());
+ OPENSSL_assert((size_t)BIO_write(in, buf, len) == len);
+ NCONF_load_bio(conf, in, &eline);
+ NCONF_free(conf);
+ BIO_free(in);
+ ERR_clear_error();
+
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+}
diff --git a/fuzz/crl.c b/fuzz/crl.c
new file mode 100644
index 000000000000..9e18dcb94b36
--- /dev/null
+++ b/fuzz/crl.c
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2016 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <openssl/x509.h>
+#include <openssl/bio.h>
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
+ ERR_clear_error();
+ CRYPTO_free_ex_index(0, -1);
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ const unsigned char *p = buf;
+ unsigned char *der = NULL;
+
+ X509_CRL *crl = d2i_X509_CRL(NULL, &p, len);
+ if (crl != NULL) {
+ BIO *bio = BIO_new(BIO_s_null());
+ X509_CRL_print(bio, crl);
+ BIO_free(bio);
+
+ i2d_X509_CRL(crl, &der);
+ OPENSSL_free(der);
+
+ X509_CRL_free(crl);
+ }
+ ERR_clear_error();
+
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+}
diff --git a/fuzz/ct.c b/fuzz/ct.c
new file mode 100644
index 000000000000..b37b11039c0b
--- /dev/null
+++ b/fuzz/ct.c
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2016 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * Fuzz the SCT parser.
+ */
+
+#include <stdio.h>
+#include <openssl/ct.h>
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
+ CRYPTO_free_ex_index(0, -1);
+ ERR_clear_error();
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ const uint8_t **pp = &buf;
+ unsigned char *der = NULL;
+ STACK_OF(SCT) *scts = d2i_SCT_LIST(NULL, pp, len);
+ if (scts != NULL) {
+ BIO *bio = BIO_new(BIO_s_null());
+ SCT_LIST_print(scts, bio, 4, "\n", NULL);
+ BIO_free(bio);
+
+ if (i2d_SCT_LIST(scts, &der)) {
+ /* Silence unused result warning */
+ }
+ OPENSSL_free(der);
+
+ SCT_LIST_free(scts);
+ }
+ ERR_clear_error();
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+}
diff --git a/fuzz/driver.c b/fuzz/driver.c
new file mode 100644
index 000000000000..337b8de5eb51
--- /dev/null
+++ b/fuzz/driver.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2016-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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+#include <stdint.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <openssl/opensslconf.h>
+#include "fuzzer.h"
+
+#ifndef OPENSSL_NO_FUZZ_LIBFUZZER
+
+int LLVMFuzzerInitialize(int *argc, char ***argv);
+int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len);
+
+int LLVMFuzzerInitialize(int *argc, char ***argv)
+{
+ return FuzzerInitialize(argc, argv);
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ return FuzzerTestOneInput(buf, len);
+}
+
+#elif !defined(OPENSSL_NO_FUZZ_AFL)
+
+#define BUF_SIZE 65536
+
+int main(int argc, char** argv)
+{
+ FuzzerInitialize(&argc, &argv);
+
+ while (__AFL_LOOP(10000)) {
+ uint8_t *buf = malloc(BUF_SIZE);
+ size_t size = read(0, buf, BUF_SIZE);
+
+ FuzzerTestOneInput(buf, size);
+ free(buf);
+ }
+
+ FuzzerCleanup();
+ return 0;
+}
+
+#else
+
+#error "Unsupported fuzzer"
+
+#endif
diff --git a/fuzz/fuzz_rand.c b/fuzz/fuzz_rand.c
new file mode 100644
index 000000000000..6d160b092110
--- /dev/null
+++ b/fuzz/fuzz_rand.c
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2016-2022 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <openssl/core_names.h>
+#include <openssl/rand.h>
+#include <openssl/provider.h>
+#include "fuzzer.h"
+
+static OSSL_FUNC_rand_newctx_fn fuzz_rand_newctx;
+static OSSL_FUNC_rand_freectx_fn fuzz_rand_freectx;
+static OSSL_FUNC_rand_instantiate_fn fuzz_rand_instantiate;
+static OSSL_FUNC_rand_uninstantiate_fn fuzz_rand_uninstantiate;
+static OSSL_FUNC_rand_generate_fn fuzz_rand_generate;
+static OSSL_FUNC_rand_gettable_ctx_params_fn fuzz_rand_gettable_ctx_params;
+static OSSL_FUNC_rand_get_ctx_params_fn fuzz_rand_get_ctx_params;
+static OSSL_FUNC_rand_enable_locking_fn fuzz_rand_enable_locking;
+
+static void *fuzz_rand_newctx(
+ void *provctx, void *parent, const OSSL_DISPATCH *parent_dispatch)
+{
+ int *st = OPENSSL_malloc(sizeof(*st));
+
+ if (st != NULL)
+ *st = EVP_RAND_STATE_UNINITIALISED;
+ return st;
+}
+
+static void fuzz_rand_freectx(ossl_unused void *vrng)
+{
+ OPENSSL_free(vrng);
+}
+
+static int fuzz_rand_instantiate(ossl_unused void *vrng,
+ ossl_unused unsigned int strength,
+ ossl_unused int prediction_resistance,
+ ossl_unused const unsigned char *pstr,
+ ossl_unused size_t pstr_len,
+ ossl_unused const OSSL_PARAM params[])
+{
+ *(int *)vrng = EVP_RAND_STATE_READY;
+ return 1;
+}
+
+static int fuzz_rand_uninstantiate(ossl_unused void *vrng)
+{
+ *(int *)vrng = EVP_RAND_STATE_UNINITIALISED;
+ return 1;
+}
+
+static int fuzz_rand_generate(ossl_unused void *vdrbg,
+ unsigned char *out, size_t outlen,
+ ossl_unused unsigned int strength,
+ ossl_unused int prediction_resistance,
+ ossl_unused const unsigned char *adin,
+ ossl_unused size_t adinlen)
+{
+ unsigned char val = 1;
+ size_t i;
+
+ for (i = 0; i < outlen; i++)
+ out[i] = val++;
+ return 1;
+}
+
+static int fuzz_rand_enable_locking(ossl_unused void *vrng)
+{
+ return 1;
+}
+
+static int fuzz_rand_get_ctx_params(void *vrng, OSSL_PARAM params[])
+{
+ OSSL_PARAM *p;
+
+ p = OSSL_PARAM_locate(params, OSSL_RAND_PARAM_STATE);
+ if (p != NULL && !OSSL_PARAM_set_int(p, *(int *)vrng))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_RAND_PARAM_STRENGTH);
+ if (p != NULL && !OSSL_PARAM_set_int(p, 500))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_RAND_PARAM_MAX_REQUEST);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, INT_MAX))
+ return 0;
+ return 1;
+}
+
+static const OSSL_PARAM *fuzz_rand_gettable_ctx_params(ossl_unused void *vrng,
+ ossl_unused void *provctx)
+{
+ static const OSSL_PARAM known_gettable_ctx_params[] = {
+ OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL),
+ OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL),
+ OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL),
+ OSSL_PARAM_END
+ };
+ return known_gettable_ctx_params;
+}
+
+static const OSSL_DISPATCH fuzz_rand_functions[] = {
+ { OSSL_FUNC_RAND_NEWCTX, (void (*)(void))fuzz_rand_newctx },
+ { OSSL_FUNC_RAND_FREECTX, (void (*)(void))fuzz_rand_freectx },
+ { OSSL_FUNC_RAND_INSTANTIATE, (void (*)(void))fuzz_rand_instantiate },
+ { OSSL_FUNC_RAND_UNINSTANTIATE, (void (*)(void))fuzz_rand_uninstantiate },
+ { OSSL_FUNC_RAND_GENERATE, (void (*)(void))fuzz_rand_generate },
+ { OSSL_FUNC_RAND_ENABLE_LOCKING, (void (*)(void))fuzz_rand_enable_locking },
+ { OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS,
+ (void(*)(void))fuzz_rand_gettable_ctx_params },
+ { OSSL_FUNC_RAND_GET_CTX_PARAMS, (void(*)(void))fuzz_rand_get_ctx_params },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM fuzz_rand_rand[] = {
+ { "fuzz", "provider=fuzz-rand", fuzz_rand_functions },
+ { NULL, NULL, NULL }
+};
+
+static const OSSL_ALGORITHM *fuzz_rand_query(void *provctx,
+ int operation_id,
+ int *no_cache)
+{
+ *no_cache = 0;
+ switch (operation_id) {
+ case OSSL_OP_RAND:
+ return fuzz_rand_rand;
+ }
+ return NULL;
+}
+
+/* Functions we provide to the core */
+static const OSSL_DISPATCH fuzz_rand_method[] = {
+ { OSSL_FUNC_PROVIDER_TEARDOWN, (void (*)(void))OSSL_LIB_CTX_free },
+ { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void))fuzz_rand_query },
+ { 0, NULL }
+};
+
+static int fuzz_rand_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out, void **provctx)
+{
+ *provctx = OSSL_LIB_CTX_new();
+ if (*provctx == NULL)
+ return 0;
+ *out = fuzz_rand_method;
+ return 1;
+}
+
+static OSSL_PROVIDER *r_prov;
+
+void FuzzerSetRand(void)
+{
+ if (!OSSL_PROVIDER_add_builtin(NULL, "fuzz-rand", fuzz_rand_provider_init)
+ || !RAND_set_DRBG_type(NULL, "fuzz", NULL, NULL, NULL)
+ || (r_prov = OSSL_PROVIDER_try_load(NULL, "fuzz-rand", 1)) == NULL)
+ exit(1);
+}
+
+void FuzzerClearRand(void)
+{
+ OSSL_PROVIDER_unload(r_prov);
+}
diff --git a/fuzz/fuzzer.h b/fuzz/fuzzer.h
new file mode 100644
index 000000000000..cd460dea8d94
--- /dev/null
+++ b/fuzz/fuzzer.h
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len);
+int FuzzerInitialize(int *argc, char ***argv);
+void FuzzerCleanup(void);
+
+void FuzzerSetRand(void);
+void FuzzerClearRand(void);
diff --git a/fuzz/helper.py b/fuzz/helper.py
new file mode 100755
index 000000000000..9185b17228bb
--- /dev/null
+++ b/fuzz/helper.py
@@ -0,0 +1,52 @@
+#!/usr/bin/python
+#
+# Copyright 2016-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+"""Fuzzing helper, creates and uses corpus/crash directories.
+
+fuzzer.py <fuzzer> <extra fuzzer arguments>
+"""
+
+import os
+import subprocess
+import sys
+
+FUZZER = sys.argv[1]
+
+THIS_DIR = os.path.abspath(os.path.dirname(__file__))
+CORPORA_DIR = os.path.abspath(os.path.join(THIS_DIR, "corpora"))
+
+FUZZER_DIR = os.path.abspath(os.path.join(CORPORA_DIR, FUZZER))
+if not os.path.isdir(FUZZER_DIR):
+ os.mkdir(FUZZER_DIR)
+
+corpora = []
+
+def _create(d):
+ dd = os.path.abspath(os.path.join(CORPORA_DIR, d))
+ if not os.path.isdir(dd):
+ os.mkdir(dd)
+ corpora.append(dd)
+
+def _add(d):
+ dd = os.path.abspath(os.path.join(CORPORA_DIR, d))
+ if os.path.isdir(dd):
+ corpora.append(dd)
+
+def main():
+ _create(FUZZER)
+ _create(FUZZER + "-crash")
+ _add(FUZZER + "-seed")
+
+ cmd = ([os.path.abspath(os.path.join(THIS_DIR, FUZZER))] + sys.argv[2:]
+ + ["-artifact_prefix=" + corpora[1] + "/"] + corpora)
+ print(" ".join(cmd))
+ subprocess.call(cmd)
+
+if __name__ == "__main__":
+ main()
diff --git a/fuzz/mkfuzzoids.pl b/fuzz/mkfuzzoids.pl
new file mode 100755
index 000000000000..56021717a8d4
--- /dev/null
+++ b/fuzz/mkfuzzoids.pl
@@ -0,0 +1,42 @@
+#! /usr/bin/env perl
+# Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+use FindBin;
+use lib "$FindBin::Bin/../util/perl";
+use OpenSSL::copyright;
+
+my $obj_dat_h = $ARGV[0];
+my $YEAR = OpenSSL::copyright::latest(($0, $obj_dat_h));
+print <<"EOF";
+# WARNING: do not edit!
+# Generated by fuzz/mkfuzzoids.pl
+#
+# Copyright 2020-$YEAR 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
+EOF
+
+open IN, '<', $obj_dat_h
+ || die "Couldn't open $obj_dat_h : $!\n";
+
+while(<IN>) {
+ s|\R$||; # Better chomp
+
+ next unless m|^\s+((0x[0-9A-F][0-9A-F],)*)\s+/\*\s\[\s*\d+\]\s(OBJ_\w+)\s\*/$|;
+
+ my $OID = $1;
+ my $OBJname = $3;
+
+ $OID =~ s|0x|\\x|g;
+ $OID =~ s|,||g;
+
+ print "$OBJname=\"$OID\"\n";
+}
+close IN;
diff --git a/fuzz/oids.txt b/fuzz/oids.txt
new file mode 100644
index 000000000000..36c79212bb75
--- /dev/null
+++ b/fuzz/oids.txt
@@ -0,0 +1,1113 @@
+# WARNING: do not edit!
+# Generated by fuzz/mkfuzzoids.pl
+#
+# Copyright 2020-2022 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
+OBJ_rsadsi="\x2A\x86\x48\x86\xF7\x0D"
+OBJ_pkcs="\x2A\x86\x48\x86\xF7\x0D\x01"
+OBJ_md2="\x2A\x86\x48\x86\xF7\x0D\x02\x02"
+OBJ_md5="\x2A\x86\x48\x86\xF7\x0D\x02\x05"
+OBJ_rc4="\x2A\x86\x48\x86\xF7\x0D\x03\x04"
+OBJ_rsaEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01"
+OBJ_md2WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x02"
+OBJ_md5WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x04"
+OBJ_pbeWithMD2AndDES_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x05\x01"
+OBJ_pbeWithMD5AndDES_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x05\x03"
+OBJ_X500="\x55"
+OBJ_X509="\x55\x04"
+OBJ_commonName="\x55\x04\x03"
+OBJ_countryName="\x55\x04\x06"
+OBJ_localityName="\x55\x04\x07"
+OBJ_stateOrProvinceName="\x55\x04\x08"
+OBJ_organizationName="\x55\x04\x0A"
+OBJ_organizationalUnitName="\x55\x04\x0B"
+OBJ_rsa="\x55\x08\x01\x01"
+OBJ_pkcs7="\x2A\x86\x48\x86\xF7\x0D\x01\x07"
+OBJ_pkcs7_data="\x2A\x86\x48\x86\xF7\x0D\x01\x07\x01"
+OBJ_pkcs7_signed="\x2A\x86\x48\x86\xF7\x0D\x01\x07\x02"
+OBJ_pkcs7_enveloped="\x2A\x86\x48\x86\xF7\x0D\x01\x07\x03"
+OBJ_pkcs7_signedAndEnveloped="\x2A\x86\x48\x86\xF7\x0D\x01\x07\x04"
+OBJ_pkcs7_digest="\x2A\x86\x48\x86\xF7\x0D\x01\x07\x05"
+OBJ_pkcs7_encrypted="\x2A\x86\x48\x86\xF7\x0D\x01\x07\x06"
+OBJ_pkcs3="\x2A\x86\x48\x86\xF7\x0D\x01\x03"
+OBJ_dhKeyAgreement="\x2A\x86\x48\x86\xF7\x0D\x01\x03\x01"
+OBJ_des_ecb="\x2B\x0E\x03\x02\x06"
+OBJ_des_cfb64="\x2B\x0E\x03\x02\x09"
+OBJ_des_cbc="\x2B\x0E\x03\x02\x07"
+OBJ_des_ede_ecb="\x2B\x0E\x03\x02\x11"
+OBJ_idea_cbc="\x2B\x06\x01\x04\x01\x81\x3C\x07\x01\x01\x02"
+OBJ_rc2_cbc="\x2A\x86\x48\x86\xF7\x0D\x03\x02"
+OBJ_sha="\x2B\x0E\x03\x02\x12"
+OBJ_shaWithRSAEncryption="\x2B\x0E\x03\x02\x0F"
+OBJ_des_ede3_cbc="\x2A\x86\x48\x86\xF7\x0D\x03\x07"
+OBJ_des_ofb64="\x2B\x0E\x03\x02\x08"
+OBJ_pkcs9="\x2A\x86\x48\x86\xF7\x0D\x01\x09"
+OBJ_pkcs9_emailAddress="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x01"
+OBJ_pkcs9_unstructuredName="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x02"
+OBJ_pkcs9_contentType="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x03"
+OBJ_pkcs9_messageDigest="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x04"
+OBJ_pkcs9_signingTime="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x05"
+OBJ_pkcs9_countersignature="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x06"
+OBJ_pkcs9_challengePassword="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x07"
+OBJ_pkcs9_unstructuredAddress="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x08"
+OBJ_pkcs9_extCertAttributes="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x09"
+OBJ_netscape="\x60\x86\x48\x01\x86\xF8\x42"
+OBJ_netscape_cert_extension="\x60\x86\x48\x01\x86\xF8\x42\x01"
+OBJ_netscape_data_type="\x60\x86\x48\x01\x86\xF8\x42\x02"
+OBJ_sha1="\x2B\x0E\x03\x02\x1A"
+OBJ_sha1WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05"
+OBJ_dsaWithSHA="\x2B\x0E\x03\x02\x0D"
+OBJ_dsa_2="\x2B\x0E\x03\x02\x0C"
+OBJ_pbeWithSHA1AndRC2_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x05\x0B"
+OBJ_id_pbkdf2="\x2A\x86\x48\x86\xF7\x0D\x01\x05\x0C"
+OBJ_dsaWithSHA1_2="\x2B\x0E\x03\x02\x1B"
+OBJ_netscape_cert_type="\x60\x86\x48\x01\x86\xF8\x42\x01\x01"
+OBJ_netscape_base_url="\x60\x86\x48\x01\x86\xF8\x42\x01\x02"
+OBJ_netscape_revocation_url="\x60\x86\x48\x01\x86\xF8\x42\x01\x03"
+OBJ_netscape_ca_revocation_url="\x60\x86\x48\x01\x86\xF8\x42\x01\x04"
+OBJ_netscape_renewal_url="\x60\x86\x48\x01\x86\xF8\x42\x01\x07"
+OBJ_netscape_ca_policy_url="\x60\x86\x48\x01\x86\xF8\x42\x01\x08"
+OBJ_netscape_ssl_server_name="\x60\x86\x48\x01\x86\xF8\x42\x01\x0C"
+OBJ_netscape_comment="\x60\x86\x48\x01\x86\xF8\x42\x01\x0D"
+OBJ_netscape_cert_sequence="\x60\x86\x48\x01\x86\xF8\x42\x02\x05"
+OBJ_id_ce="\x55\x1D"
+OBJ_subject_key_identifier="\x55\x1D\x0E"
+OBJ_key_usage="\x55\x1D\x0F"
+OBJ_private_key_usage_period="\x55\x1D\x10"
+OBJ_subject_alt_name="\x55\x1D\x11"
+OBJ_issuer_alt_name="\x55\x1D\x12"
+OBJ_basic_constraints="\x55\x1D\x13"
+OBJ_crl_number="\x55\x1D\x14"
+OBJ_certificate_policies="\x55\x1D\x20"
+OBJ_authority_key_identifier="\x55\x1D\x23"
+OBJ_bf_cbc="\x2B\x06\x01\x04\x01\x97\x55\x01\x02"
+OBJ_mdc2="\x55\x08\x03\x65"
+OBJ_mdc2WithRSA="\x55\x08\x03\x64"
+OBJ_givenName="\x55\x04\x2A"
+OBJ_surname="\x55\x04\x04"
+OBJ_initials="\x55\x04\x2B"
+OBJ_uniqueIdentifier="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x2C"
+OBJ_crl_distribution_points="\x55\x1D\x1F"
+OBJ_md5WithRSA="\x2B\x0E\x03\x02\x03"
+OBJ_serialNumber="\x55\x04\x05"
+OBJ_title="\x55\x04\x0C"
+OBJ_description="\x55\x04\x0D"
+OBJ_cast5_cbc="\x2A\x86\x48\x86\xF6\x7D\x07\x42\x0A"
+OBJ_pbeWithMD5AndCast5_CBC="\x2A\x86\x48\x86\xF6\x7D\x07\x42\x0C"
+OBJ_dsaWithSHA1="\x2A\x86\x48\xCE\x38\x04\x03"
+OBJ_sha1WithRSA="\x2B\x0E\x03\x02\x1D"
+OBJ_dsa="\x2A\x86\x48\xCE\x38\x04\x01"
+OBJ_ripemd160="\x2B\x24\x03\x02\x01"
+OBJ_ripemd160WithRSA="\x2B\x24\x03\x03\x01\x02"
+OBJ_rc5_cbc="\x2A\x86\x48\x86\xF7\x0D\x03\x08"
+OBJ_zlib_compression="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03\x08"
+OBJ_ext_key_usage="\x55\x1D\x25"
+OBJ_id_pkix="\x2B\x06\x01\x05\x05\x07"
+OBJ_id_kp="\x2B\x06\x01\x05\x05\x07\x03"
+OBJ_server_auth="\x2B\x06\x01\x05\x05\x07\x03\x01"
+OBJ_client_auth="\x2B\x06\x01\x05\x05\x07\x03\x02"
+OBJ_code_sign="\x2B\x06\x01\x05\x05\x07\x03\x03"
+OBJ_email_protect="\x2B\x06\x01\x05\x05\x07\x03\x04"
+OBJ_time_stamp="\x2B\x06\x01\x05\x05\x07\x03\x08"
+OBJ_ms_code_ind="\x2B\x06\x01\x04\x01\x82\x37\x02\x01\x15"
+OBJ_ms_code_com="\x2B\x06\x01\x04\x01\x82\x37\x02\x01\x16"
+OBJ_ms_ctl_sign="\x2B\x06\x01\x04\x01\x82\x37\x0A\x03\x01"
+OBJ_ms_sgc="\x2B\x06\x01\x04\x01\x82\x37\x0A\x03\x03"
+OBJ_ms_efs="\x2B\x06\x01\x04\x01\x82\x37\x0A\x03\x04"
+OBJ_ns_sgc="\x60\x86\x48\x01\x86\xF8\x42\x04\x01"
+OBJ_delta_crl="\x55\x1D\x1B"
+OBJ_crl_reason="\x55\x1D\x15"
+OBJ_invalidity_date="\x55\x1D\x18"
+OBJ_sxnet="\x2B\x65\x01\x04\x01"
+OBJ_pbe_WithSHA1And128BitRC4="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x01\x01"
+OBJ_pbe_WithSHA1And40BitRC4="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x01\x02"
+OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x01\x03"
+OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x01\x04"
+OBJ_pbe_WithSHA1And128BitRC2_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x01\x05"
+OBJ_pbe_WithSHA1And40BitRC2_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x01\x06"
+OBJ_keyBag="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x0A\x01\x01"
+OBJ_pkcs8ShroudedKeyBag="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x0A\x01\x02"
+OBJ_certBag="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x0A\x01\x03"
+OBJ_crlBag="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x0A\x01\x04"
+OBJ_secretBag="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x0A\x01\x05"
+OBJ_safeContentsBag="\x2A\x86\x48\x86\xF7\x0D\x01\x0C\x0A\x01\x06"
+OBJ_friendlyName="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x14"
+OBJ_localKeyID="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x15"
+OBJ_x509Certificate="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x16\x01"
+OBJ_sdsiCertificate="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x16\x02"
+OBJ_x509Crl="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x17\x01"
+OBJ_pbes2="\x2A\x86\x48\x86\xF7\x0D\x01\x05\x0D"
+OBJ_pbmac1="\x2A\x86\x48\x86\xF7\x0D\x01\x05\x0E"
+OBJ_hmacWithSHA1="\x2A\x86\x48\x86\xF7\x0D\x02\x07"
+OBJ_id_qt_cps="\x2B\x06\x01\x05\x05\x07\x02\x01"
+OBJ_id_qt_unotice="\x2B\x06\x01\x05\x05\x07\x02\x02"
+OBJ_SMIMECapabilities="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x0F"
+OBJ_pbeWithMD2AndRC2_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x05\x04"
+OBJ_pbeWithMD5AndRC2_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x05\x06"
+OBJ_pbeWithSHA1AndDES_CBC="\x2A\x86\x48\x86\xF7\x0D\x01\x05\x0A"
+OBJ_ms_ext_req="\x2B\x06\x01\x04\x01\x82\x37\x02\x01\x0E"
+OBJ_ext_req="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x0E"
+OBJ_name="\x55\x04\x29"
+OBJ_dnQualifier="\x55\x04\x2E"
+OBJ_id_pe="\x2B\x06\x01\x05\x05\x07\x01"
+OBJ_id_ad="\x2B\x06\x01\x05\x05\x07\x30"
+OBJ_info_access="\x2B\x06\x01\x05\x05\x07\x01\x01"
+OBJ_ad_OCSP="\x2B\x06\x01\x05\x05\x07\x30\x01"
+OBJ_ad_ca_issuers="\x2B\x06\x01\x05\x05\x07\x30\x02"
+OBJ_OCSP_sign="\x2B\x06\x01\x05\x05\x07\x03\x09"
+OBJ_member_body="\x2A"
+OBJ_ISO_US="\x2A\x86\x48"
+OBJ_X9_57="\x2A\x86\x48\xCE\x38"
+OBJ_X9cm="\x2A\x86\x48\xCE\x38\x04"
+OBJ_pkcs1="\x2A\x86\x48\x86\xF7\x0D\x01\x01"
+OBJ_pkcs5="\x2A\x86\x48\x86\xF7\x0D\x01\x05"
+OBJ_SMIME="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10"
+OBJ_id_smime_mod="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x00"
+OBJ_id_smime_ct="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01"
+OBJ_id_smime_aa="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02"
+OBJ_id_smime_alg="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03"
+OBJ_id_smime_cd="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x04"
+OBJ_id_smime_spq="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x05"
+OBJ_id_smime_cti="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x06"
+OBJ_id_smime_mod_cms="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x00\x01"
+OBJ_id_smime_mod_ess="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x00\x02"
+OBJ_id_smime_mod_oid="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x00\x03"
+OBJ_id_smime_mod_msg_v3="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x00\x04"
+OBJ_id_smime_mod_ets_eSignature_88="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x00\x05"
+OBJ_id_smime_mod_ets_eSignature_97="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x00\x06"
+OBJ_id_smime_mod_ets_eSigPolicy_88="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x00\x07"
+OBJ_id_smime_mod_ets_eSigPolicy_97="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x00\x08"
+OBJ_id_smime_ct_receipt="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x01"
+OBJ_id_smime_ct_authData="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x02"
+OBJ_id_smime_ct_publishCert="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x03"
+OBJ_id_smime_ct_TSTInfo="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x04"
+OBJ_id_smime_ct_TDTInfo="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x05"
+OBJ_id_smime_ct_contentInfo="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x06"
+OBJ_id_smime_ct_DVCSRequestData="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x07"
+OBJ_id_smime_ct_DVCSResponseData="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x08"
+OBJ_id_smime_aa_receiptRequest="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x01"
+OBJ_id_smime_aa_securityLabel="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x02"
+OBJ_id_smime_aa_mlExpandHistory="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x03"
+OBJ_id_smime_aa_contentHint="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x04"
+OBJ_id_smime_aa_msgSigDigest="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x05"
+OBJ_id_smime_aa_encapContentType="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x06"
+OBJ_id_smime_aa_contentIdentifier="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x07"
+OBJ_id_smime_aa_macValue="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x08"
+OBJ_id_smime_aa_equivalentLabels="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x09"
+OBJ_id_smime_aa_contentReference="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x0A"
+OBJ_id_smime_aa_encrypKeyPref="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x0B"
+OBJ_id_smime_aa_signingCertificate="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x0C"
+OBJ_id_smime_aa_smimeEncryptCerts="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x0D"
+OBJ_id_smime_aa_timeStampToken="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x0E"
+OBJ_id_smime_aa_ets_sigPolicyId="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x0F"
+OBJ_id_smime_aa_ets_commitmentType="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x10"
+OBJ_id_smime_aa_ets_signerLocation="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x11"
+OBJ_id_smime_aa_ets_signerAttr="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x12"
+OBJ_id_smime_aa_ets_otherSigCert="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x13"
+OBJ_id_smime_aa_ets_contentTimestamp="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x14"
+OBJ_id_smime_aa_ets_CertificateRefs="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x15"
+OBJ_id_smime_aa_ets_RevocationRefs="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x16"
+OBJ_id_smime_aa_ets_certValues="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x17"
+OBJ_id_smime_aa_ets_revocationValues="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x18"
+OBJ_id_smime_aa_ets_escTimeStamp="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x19"
+OBJ_id_smime_aa_ets_certCRLTimestamp="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x1A"
+OBJ_id_smime_aa_ets_archiveTimeStamp="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x1B"
+OBJ_id_smime_aa_signatureType="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x1C"
+OBJ_id_smime_aa_dvcs_dvc="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x1D"
+OBJ_id_smime_alg_ESDHwith3DES="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03\x01"
+OBJ_id_smime_alg_ESDHwithRC2="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03\x02"
+OBJ_id_smime_alg_3DESwrap="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03\x03"
+OBJ_id_smime_alg_RC2wrap="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03\x04"
+OBJ_id_smime_alg_ESDH="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03\x05"
+OBJ_id_smime_alg_CMS3DESwrap="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03\x06"
+OBJ_id_smime_alg_CMSRC2wrap="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03\x07"
+OBJ_id_smime_cd_ldap="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x04\x01"
+OBJ_id_smime_spq_ets_sqt_uri="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x05\x01"
+OBJ_id_smime_spq_ets_sqt_unotice="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x05\x02"
+OBJ_id_smime_cti_ets_proofOfOrigin="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x06\x01"
+OBJ_id_smime_cti_ets_proofOfReceipt="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x06\x02"
+OBJ_id_smime_cti_ets_proofOfDelivery="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x06\x03"
+OBJ_id_smime_cti_ets_proofOfSender="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x06\x04"
+OBJ_id_smime_cti_ets_proofOfApproval="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x06\x05"
+OBJ_id_smime_cti_ets_proofOfCreation="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x06\x06"
+OBJ_md4="\x2A\x86\x48\x86\xF7\x0D\x02\x04"
+OBJ_id_pkix_mod="\x2B\x06\x01\x05\x05\x07\x00"
+OBJ_id_qt="\x2B\x06\x01\x05\x05\x07\x02"
+OBJ_id_it="\x2B\x06\x01\x05\x05\x07\x04"
+OBJ_id_pkip="\x2B\x06\x01\x05\x05\x07\x05"
+OBJ_id_alg="\x2B\x06\x01\x05\x05\x07\x06"
+OBJ_id_cmc="\x2B\x06\x01\x05\x05\x07\x07"
+OBJ_id_on="\x2B\x06\x01\x05\x05\x07\x08"
+OBJ_id_pda="\x2B\x06\x01\x05\x05\x07\x09"
+OBJ_id_aca="\x2B\x06\x01\x05\x05\x07\x0A"
+OBJ_id_qcs="\x2B\x06\x01\x05\x05\x07\x0B"
+OBJ_id_cct="\x2B\x06\x01\x05\x05\x07\x0C"
+OBJ_id_pkix1_explicit_88="\x2B\x06\x01\x05\x05\x07\x00\x01"
+OBJ_id_pkix1_implicit_88="\x2B\x06\x01\x05\x05\x07\x00\x02"
+OBJ_id_pkix1_explicit_93="\x2B\x06\x01\x05\x05\x07\x00\x03"
+OBJ_id_pkix1_implicit_93="\x2B\x06\x01\x05\x05\x07\x00\x04"
+OBJ_id_mod_crmf="\x2B\x06\x01\x05\x05\x07\x00\x05"
+OBJ_id_mod_cmc="\x2B\x06\x01\x05\x05\x07\x00\x06"
+OBJ_id_mod_kea_profile_88="\x2B\x06\x01\x05\x05\x07\x00\x07"
+OBJ_id_mod_kea_profile_93="\x2B\x06\x01\x05\x05\x07\x00\x08"
+OBJ_id_mod_cmp="\x2B\x06\x01\x05\x05\x07\x00\x09"
+OBJ_id_mod_qualified_cert_88="\x2B\x06\x01\x05\x05\x07\x00\x0A"
+OBJ_id_mod_qualified_cert_93="\x2B\x06\x01\x05\x05\x07\x00\x0B"
+OBJ_id_mod_attribute_cert="\x2B\x06\x01\x05\x05\x07\x00\x0C"
+OBJ_id_mod_timestamp_protocol="\x2B\x06\x01\x05\x05\x07\x00\x0D"
+OBJ_id_mod_ocsp="\x2B\x06\x01\x05\x05\x07\x00\x0E"
+OBJ_id_mod_dvcs="\x2B\x06\x01\x05\x05\x07\x00\x0F"
+OBJ_id_mod_cmp2000="\x2B\x06\x01\x05\x05\x07\x00\x10"
+OBJ_biometricInfo="\x2B\x06\x01\x05\x05\x07\x01\x02"
+OBJ_qcStatements="\x2B\x06\x01\x05\x05\x07\x01\x03"
+OBJ_ac_auditEntity="\x2B\x06\x01\x05\x05\x07\x01\x04"
+OBJ_ac_targeting="\x2B\x06\x01\x05\x05\x07\x01\x05"
+OBJ_aaControls="\x2B\x06\x01\x05\x05\x07\x01\x06"
+OBJ_sbgp_ipAddrBlock="\x2B\x06\x01\x05\x05\x07\x01\x07"
+OBJ_sbgp_autonomousSysNum="\x2B\x06\x01\x05\x05\x07\x01\x08"
+OBJ_sbgp_routerIdentifier="\x2B\x06\x01\x05\x05\x07\x01\x09"
+OBJ_textNotice="\x2B\x06\x01\x05\x05\x07\x02\x03"
+OBJ_ipsecEndSystem="\x2B\x06\x01\x05\x05\x07\x03\x05"
+OBJ_ipsecTunnel="\x2B\x06\x01\x05\x05\x07\x03\x06"
+OBJ_ipsecUser="\x2B\x06\x01\x05\x05\x07\x03\x07"
+OBJ_dvcs="\x2B\x06\x01\x05\x05\x07\x03\x0A"
+OBJ_id_it_caProtEncCert="\x2B\x06\x01\x05\x05\x07\x04\x01"
+OBJ_id_it_signKeyPairTypes="\x2B\x06\x01\x05\x05\x07\x04\x02"
+OBJ_id_it_encKeyPairTypes="\x2B\x06\x01\x05\x05\x07\x04\x03"
+OBJ_id_it_preferredSymmAlg="\x2B\x06\x01\x05\x05\x07\x04\x04"
+OBJ_id_it_caKeyUpdateInfo="\x2B\x06\x01\x05\x05\x07\x04\x05"
+OBJ_id_it_currentCRL="\x2B\x06\x01\x05\x05\x07\x04\x06"
+OBJ_id_it_unsupportedOIDs="\x2B\x06\x01\x05\x05\x07\x04\x07"
+OBJ_id_it_subscriptionRequest="\x2B\x06\x01\x05\x05\x07\x04\x08"
+OBJ_id_it_subscriptionResponse="\x2B\x06\x01\x05\x05\x07\x04\x09"
+OBJ_id_it_keyPairParamReq="\x2B\x06\x01\x05\x05\x07\x04\x0A"
+OBJ_id_it_keyPairParamRep="\x2B\x06\x01\x05\x05\x07\x04\x0B"
+OBJ_id_it_revPassphrase="\x2B\x06\x01\x05\x05\x07\x04\x0C"
+OBJ_id_it_implicitConfirm="\x2B\x06\x01\x05\x05\x07\x04\x0D"
+OBJ_id_it_confirmWaitTime="\x2B\x06\x01\x05\x05\x07\x04\x0E"
+OBJ_id_it_origPKIMessage="\x2B\x06\x01\x05\x05\x07\x04\x0F"
+OBJ_id_regCtrl="\x2B\x06\x01\x05\x05\x07\x05\x01"
+OBJ_id_regInfo="\x2B\x06\x01\x05\x05\x07\x05\x02"
+OBJ_id_regCtrl_regToken="\x2B\x06\x01\x05\x05\x07\x05\x01\x01"
+OBJ_id_regCtrl_authenticator="\x2B\x06\x01\x05\x05\x07\x05\x01\x02"
+OBJ_id_regCtrl_pkiPublicationInfo="\x2B\x06\x01\x05\x05\x07\x05\x01\x03"
+OBJ_id_regCtrl_pkiArchiveOptions="\x2B\x06\x01\x05\x05\x07\x05\x01\x04"
+OBJ_id_regCtrl_oldCertID="\x2B\x06\x01\x05\x05\x07\x05\x01\x05"
+OBJ_id_regCtrl_protocolEncrKey="\x2B\x06\x01\x05\x05\x07\x05\x01\x06"
+OBJ_id_regInfo_utf8Pairs="\x2B\x06\x01\x05\x05\x07\x05\x02\x01"
+OBJ_id_regInfo_certReq="\x2B\x06\x01\x05\x05\x07\x05\x02\x02"
+OBJ_id_alg_des40="\x2B\x06\x01\x05\x05\x07\x06\x01"
+OBJ_id_alg_noSignature="\x2B\x06\x01\x05\x05\x07\x06\x02"
+OBJ_id_alg_dh_sig_hmac_sha1="\x2B\x06\x01\x05\x05\x07\x06\x03"
+OBJ_id_alg_dh_pop="\x2B\x06\x01\x05\x05\x07\x06\x04"
+OBJ_id_cmc_statusInfo="\x2B\x06\x01\x05\x05\x07\x07\x01"
+OBJ_id_cmc_identification="\x2B\x06\x01\x05\x05\x07\x07\x02"
+OBJ_id_cmc_identityProof="\x2B\x06\x01\x05\x05\x07\x07\x03"
+OBJ_id_cmc_dataReturn="\x2B\x06\x01\x05\x05\x07\x07\x04"
+OBJ_id_cmc_transactionId="\x2B\x06\x01\x05\x05\x07\x07\x05"
+OBJ_id_cmc_senderNonce="\x2B\x06\x01\x05\x05\x07\x07\x06"
+OBJ_id_cmc_recipientNonce="\x2B\x06\x01\x05\x05\x07\x07\x07"
+OBJ_id_cmc_addExtensions="\x2B\x06\x01\x05\x05\x07\x07\x08"
+OBJ_id_cmc_encryptedPOP="\x2B\x06\x01\x05\x05\x07\x07\x09"
+OBJ_id_cmc_decryptedPOP="\x2B\x06\x01\x05\x05\x07\x07\x0A"
+OBJ_id_cmc_lraPOPWitness="\x2B\x06\x01\x05\x05\x07\x07\x0B"
+OBJ_id_cmc_getCert="\x2B\x06\x01\x05\x05\x07\x07\x0F"
+OBJ_id_cmc_getCRL="\x2B\x06\x01\x05\x05\x07\x07\x10"
+OBJ_id_cmc_revokeRequest="\x2B\x06\x01\x05\x05\x07\x07\x11"
+OBJ_id_cmc_regInfo="\x2B\x06\x01\x05\x05\x07\x07\x12"
+OBJ_id_cmc_responseInfo="\x2B\x06\x01\x05\x05\x07\x07\x13"
+OBJ_id_cmc_queryPending="\x2B\x06\x01\x05\x05\x07\x07\x15"
+OBJ_id_cmc_popLinkRandom="\x2B\x06\x01\x05\x05\x07\x07\x16"
+OBJ_id_cmc_popLinkWitness="\x2B\x06\x01\x05\x05\x07\x07\x17"
+OBJ_id_cmc_confirmCertAcceptance="\x2B\x06\x01\x05\x05\x07\x07\x18"
+OBJ_id_on_personalData="\x2B\x06\x01\x05\x05\x07\x08\x01"
+OBJ_id_pda_dateOfBirth="\x2B\x06\x01\x05\x05\x07\x09\x01"
+OBJ_id_pda_placeOfBirth="\x2B\x06\x01\x05\x05\x07\x09\x02"
+OBJ_id_pda_gender="\x2B\x06\x01\x05\x05\x07\x09\x03"
+OBJ_id_pda_countryOfCitizenship="\x2B\x06\x01\x05\x05\x07\x09\x04"
+OBJ_id_pda_countryOfResidence="\x2B\x06\x01\x05\x05\x07\x09\x05"
+OBJ_id_aca_authenticationInfo="\x2B\x06\x01\x05\x05\x07\x0A\x01"
+OBJ_id_aca_accessIdentity="\x2B\x06\x01\x05\x05\x07\x0A\x02"
+OBJ_id_aca_chargingIdentity="\x2B\x06\x01\x05\x05\x07\x0A\x03"
+OBJ_id_aca_group="\x2B\x06\x01\x05\x05\x07\x0A\x04"
+OBJ_id_aca_role="\x2B\x06\x01\x05\x05\x07\x0A\x05"
+OBJ_id_qcs_pkixQCSyntax_v1="\x2B\x06\x01\x05\x05\x07\x0B\x01"
+OBJ_id_cct_crs="\x2B\x06\x01\x05\x05\x07\x0C\x01"
+OBJ_id_cct_PKIData="\x2B\x06\x01\x05\x05\x07\x0C\x02"
+OBJ_id_cct_PKIResponse="\x2B\x06\x01\x05\x05\x07\x0C\x03"
+OBJ_ad_timeStamping="\x2B\x06\x01\x05\x05\x07\x30\x03"
+OBJ_ad_dvcs="\x2B\x06\x01\x05\x05\x07\x30\x04"
+OBJ_id_pkix_OCSP_basic="\x2B\x06\x01\x05\x05\x07\x30\x01\x01"
+OBJ_id_pkix_OCSP_Nonce="\x2B\x06\x01\x05\x05\x07\x30\x01\x02"
+OBJ_id_pkix_OCSP_CrlID="\x2B\x06\x01\x05\x05\x07\x30\x01\x03"
+OBJ_id_pkix_OCSP_acceptableResponses="\x2B\x06\x01\x05\x05\x07\x30\x01\x04"
+OBJ_id_pkix_OCSP_noCheck="\x2B\x06\x01\x05\x05\x07\x30\x01\x05"
+OBJ_id_pkix_OCSP_archiveCutoff="\x2B\x06\x01\x05\x05\x07\x30\x01\x06"
+OBJ_id_pkix_OCSP_serviceLocator="\x2B\x06\x01\x05\x05\x07\x30\x01\x07"
+OBJ_id_pkix_OCSP_extendedStatus="\x2B\x06\x01\x05\x05\x07\x30\x01\x08"
+OBJ_id_pkix_OCSP_valid="\x2B\x06\x01\x05\x05\x07\x30\x01\x09"
+OBJ_id_pkix_OCSP_path="\x2B\x06\x01\x05\x05\x07\x30\x01\x0A"
+OBJ_id_pkix_OCSP_trustRoot="\x2B\x06\x01\x05\x05\x07\x30\x01\x0B"
+OBJ_algorithm="\x2B\x0E\x03\x02"
+OBJ_rsaSignature="\x2B\x0E\x03\x02\x0B"
+OBJ_X500algorithms="\x55\x08"
+OBJ_org="\x2B"
+OBJ_dod="\x2B\x06"
+OBJ_iana="\x2B\x06\x01"
+OBJ_Directory="\x2B\x06\x01\x01"
+OBJ_Management="\x2B\x06\x01\x02"
+OBJ_Experimental="\x2B\x06\x01\x03"
+OBJ_Private="\x2B\x06\x01\x04"
+OBJ_Security="\x2B\x06\x01\x05"
+OBJ_SNMPv2="\x2B\x06\x01\x06"
+OBJ_Mail="\x2B\x06\x01\x07"
+OBJ_Enterprises="\x2B\x06\x01\x04\x01"
+OBJ_dcObject="\x2B\x06\x01\x04\x01\x8B\x3A\x82\x58"
+OBJ_domainComponent="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x19"
+OBJ_Domain="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x0D"
+OBJ_selected_attribute_types="\x55\x01\x05"
+OBJ_clearance="\x55\x01\x05\x37"
+OBJ_md4WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x03"
+OBJ_ac_proxying="\x2B\x06\x01\x05\x05\x07\x01\x0A"
+OBJ_sinfo_access="\x2B\x06\x01\x05\x05\x07\x01\x0B"
+OBJ_id_aca_encAttrs="\x2B\x06\x01\x05\x05\x07\x0A\x06"
+OBJ_role="\x55\x04\x48"
+OBJ_policy_constraints="\x55\x1D\x24"
+OBJ_target_information="\x55\x1D\x37"
+OBJ_no_rev_avail="\x55\x1D\x38"
+OBJ_ansi_X9_62="\x2A\x86\x48\xCE\x3D"
+OBJ_X9_62_prime_field="\x2A\x86\x48\xCE\x3D\x01\x01"
+OBJ_X9_62_characteristic_two_field="\x2A\x86\x48\xCE\x3D\x01\x02"
+OBJ_X9_62_id_ecPublicKey="\x2A\x86\x48\xCE\x3D\x02\x01"
+OBJ_X9_62_prime192v1="\x2A\x86\x48\xCE\x3D\x03\x01\x01"
+OBJ_X9_62_prime192v2="\x2A\x86\x48\xCE\x3D\x03\x01\x02"
+OBJ_X9_62_prime192v3="\x2A\x86\x48\xCE\x3D\x03\x01\x03"
+OBJ_X9_62_prime239v1="\x2A\x86\x48\xCE\x3D\x03\x01\x04"
+OBJ_X9_62_prime239v2="\x2A\x86\x48\xCE\x3D\x03\x01\x05"
+OBJ_X9_62_prime239v3="\x2A\x86\x48\xCE\x3D\x03\x01\x06"
+OBJ_X9_62_prime256v1="\x2A\x86\x48\xCE\x3D\x03\x01\x07"
+OBJ_ecdsa_with_SHA1="\x2A\x86\x48\xCE\x3D\x04\x01"
+OBJ_ms_csp_name="\x2B\x06\x01\x04\x01\x82\x37\x11\x01"
+OBJ_aes_128_ecb="\x60\x86\x48\x01\x65\x03\x04\x01\x01"
+OBJ_aes_128_cbc="\x60\x86\x48\x01\x65\x03\x04\x01\x02"
+OBJ_aes_128_ofb128="\x60\x86\x48\x01\x65\x03\x04\x01\x03"
+OBJ_aes_128_cfb128="\x60\x86\x48\x01\x65\x03\x04\x01\x04"
+OBJ_aes_192_ecb="\x60\x86\x48\x01\x65\x03\x04\x01\x15"
+OBJ_aes_192_cbc="\x60\x86\x48\x01\x65\x03\x04\x01\x16"
+OBJ_aes_192_ofb128="\x60\x86\x48\x01\x65\x03\x04\x01\x17"
+OBJ_aes_192_cfb128="\x60\x86\x48\x01\x65\x03\x04\x01\x18"
+OBJ_aes_256_ecb="\x60\x86\x48\x01\x65\x03\x04\x01\x29"
+OBJ_aes_256_cbc="\x60\x86\x48\x01\x65\x03\x04\x01\x2A"
+OBJ_aes_256_ofb128="\x60\x86\x48\x01\x65\x03\x04\x01\x2B"
+OBJ_aes_256_cfb128="\x60\x86\x48\x01\x65\x03\x04\x01\x2C"
+OBJ_hold_instruction_code="\x55\x1D\x17"
+OBJ_hold_instruction_none="\x2A\x86\x48\xCE\x38\x02\x01"
+OBJ_hold_instruction_call_issuer="\x2A\x86\x48\xCE\x38\x02\x02"
+OBJ_hold_instruction_reject="\x2A\x86\x48\xCE\x38\x02\x03"
+OBJ_data="\x09"
+OBJ_pss="\x09\x92\x26"
+OBJ_ucl="\x09\x92\x26\x89\x93\xF2\x2C"
+OBJ_pilot="\x09\x92\x26\x89\x93\xF2\x2C\x64"
+OBJ_pilotAttributeType="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01"
+OBJ_pilotAttributeSyntax="\x09\x92\x26\x89\x93\xF2\x2C\x64\x03"
+OBJ_pilotObjectClass="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04"
+OBJ_pilotGroups="\x09\x92\x26\x89\x93\xF2\x2C\x64\x0A"
+OBJ_iA5StringSyntax="\x09\x92\x26\x89\x93\xF2\x2C\x64\x03\x04"
+OBJ_caseIgnoreIA5StringSyntax="\x09\x92\x26\x89\x93\xF2\x2C\x64\x03\x05"
+OBJ_pilotObject="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x03"
+OBJ_pilotPerson="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x04"
+OBJ_account="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x05"
+OBJ_document="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x06"
+OBJ_room="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x07"
+OBJ_documentSeries="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x09"
+OBJ_rFC822localPart="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x0E"
+OBJ_dNSDomain="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x0F"
+OBJ_domainRelatedObject="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x11"
+OBJ_friendlyCountry="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x12"
+OBJ_simpleSecurityObject="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x13"
+OBJ_pilotOrganization="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x14"
+OBJ_pilotDSA="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x15"
+OBJ_qualityLabelledData="\x09\x92\x26\x89\x93\xF2\x2C\x64\x04\x16"
+OBJ_userId="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x01"
+OBJ_textEncodedORAddress="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x02"
+OBJ_rfc822Mailbox="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x03"
+OBJ_info="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x04"
+OBJ_favouriteDrink="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x05"
+OBJ_roomNumber="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x06"
+OBJ_photo="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x07"
+OBJ_userClass="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x08"
+OBJ_host="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x09"
+OBJ_manager="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x0A"
+OBJ_documentIdentifier="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x0B"
+OBJ_documentTitle="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x0C"
+OBJ_documentVersion="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x0D"
+OBJ_documentAuthor="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x0E"
+OBJ_documentLocation="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x0F"
+OBJ_homeTelephoneNumber="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x14"
+OBJ_secretary="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x15"
+OBJ_otherMailbox="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x16"
+OBJ_lastModifiedTime="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x17"
+OBJ_lastModifiedBy="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x18"
+OBJ_aRecord="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x1A"
+OBJ_pilotAttributeType27="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x1B"
+OBJ_mXRecord="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x1C"
+OBJ_nSRecord="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x1D"
+OBJ_sOARecord="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x1E"
+OBJ_cNAMERecord="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x1F"
+OBJ_associatedDomain="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x25"
+OBJ_associatedName="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x26"
+OBJ_homePostalAddress="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x27"
+OBJ_personalTitle="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x28"
+OBJ_mobileTelephoneNumber="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x29"
+OBJ_pagerTelephoneNumber="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x2A"
+OBJ_friendlyCountryName="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x2B"
+OBJ_organizationalStatus="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x2D"
+OBJ_janetMailbox="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x2E"
+OBJ_mailPreferenceOption="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x2F"
+OBJ_buildingName="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x30"
+OBJ_dSAQuality="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x31"
+OBJ_singleLevelQuality="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x32"
+OBJ_subtreeMinimumQuality="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x33"
+OBJ_subtreeMaximumQuality="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x34"
+OBJ_personalSignature="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x35"
+OBJ_dITRedirect="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x36"
+OBJ_audio="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x37"
+OBJ_documentPublisher="\x09\x92\x26\x89\x93\xF2\x2C\x64\x01\x38"
+OBJ_x500UniqueIdentifier="\x55\x04\x2D"
+OBJ_mime_mhs="\x2B\x06\x01\x07\x01"
+OBJ_mime_mhs_headings="\x2B\x06\x01\x07\x01\x01"
+OBJ_mime_mhs_bodies="\x2B\x06\x01\x07\x01\x02"
+OBJ_id_hex_partial_message="\x2B\x06\x01\x07\x01\x01\x01"
+OBJ_id_hex_multipart_message="\x2B\x06\x01\x07\x01\x01\x02"
+OBJ_generationQualifier="\x55\x04\x2C"
+OBJ_pseudonym="\x55\x04\x41"
+OBJ_id_set="\x67\x2A"
+OBJ_set_ctype="\x67\x2A\x00"
+OBJ_set_msgExt="\x67\x2A\x01"
+OBJ_set_attr="\x67\x2A\x03"
+OBJ_set_policy="\x67\x2A\x05"
+OBJ_set_certExt="\x67\x2A\x07"
+OBJ_set_brand="\x67\x2A\x08"
+OBJ_setct_PANData="\x67\x2A\x00\x00"
+OBJ_setct_PANToken="\x67\x2A\x00\x01"
+OBJ_setct_PANOnly="\x67\x2A\x00\x02"
+OBJ_setct_OIData="\x67\x2A\x00\x03"
+OBJ_setct_PI="\x67\x2A\x00\x04"
+OBJ_setct_PIData="\x67\x2A\x00\x05"
+OBJ_setct_PIDataUnsigned="\x67\x2A\x00\x06"
+OBJ_setct_HODInput="\x67\x2A\x00\x07"
+OBJ_setct_AuthResBaggage="\x67\x2A\x00\x08"
+OBJ_setct_AuthRevReqBaggage="\x67\x2A\x00\x09"
+OBJ_setct_AuthRevResBaggage="\x67\x2A\x00\x0A"
+OBJ_setct_CapTokenSeq="\x67\x2A\x00\x0B"
+OBJ_setct_PInitResData="\x67\x2A\x00\x0C"
+OBJ_setct_PI_TBS="\x67\x2A\x00\x0D"
+OBJ_setct_PResData="\x67\x2A\x00\x0E"
+OBJ_setct_AuthReqTBS="\x67\x2A\x00\x10"
+OBJ_setct_AuthResTBS="\x67\x2A\x00\x11"
+OBJ_setct_AuthResTBSX="\x67\x2A\x00\x12"
+OBJ_setct_AuthTokenTBS="\x67\x2A\x00\x13"
+OBJ_setct_CapTokenData="\x67\x2A\x00\x14"
+OBJ_setct_CapTokenTBS="\x67\x2A\x00\x15"
+OBJ_setct_AcqCardCodeMsg="\x67\x2A\x00\x16"
+OBJ_setct_AuthRevReqTBS="\x67\x2A\x00\x17"
+OBJ_setct_AuthRevResData="\x67\x2A\x00\x18"
+OBJ_setct_AuthRevResTBS="\x67\x2A\x00\x19"
+OBJ_setct_CapReqTBS="\x67\x2A\x00\x1A"
+OBJ_setct_CapReqTBSX="\x67\x2A\x00\x1B"
+OBJ_setct_CapResData="\x67\x2A\x00\x1C"
+OBJ_setct_CapRevReqTBS="\x67\x2A\x00\x1D"
+OBJ_setct_CapRevReqTBSX="\x67\x2A\x00\x1E"
+OBJ_setct_CapRevResData="\x67\x2A\x00\x1F"
+OBJ_setct_CredReqTBS="\x67\x2A\x00\x20"
+OBJ_setct_CredReqTBSX="\x67\x2A\x00\x21"
+OBJ_setct_CredResData="\x67\x2A\x00\x22"
+OBJ_setct_CredRevReqTBS="\x67\x2A\x00\x23"
+OBJ_setct_CredRevReqTBSX="\x67\x2A\x00\x24"
+OBJ_setct_CredRevResData="\x67\x2A\x00\x25"
+OBJ_setct_PCertReqData="\x67\x2A\x00\x26"
+OBJ_setct_PCertResTBS="\x67\x2A\x00\x27"
+OBJ_setct_BatchAdminReqData="\x67\x2A\x00\x28"
+OBJ_setct_BatchAdminResData="\x67\x2A\x00\x29"
+OBJ_setct_CardCInitResTBS="\x67\x2A\x00\x2A"
+OBJ_setct_MeAqCInitResTBS="\x67\x2A\x00\x2B"
+OBJ_setct_RegFormResTBS="\x67\x2A\x00\x2C"
+OBJ_setct_CertReqData="\x67\x2A\x00\x2D"
+OBJ_setct_CertReqTBS="\x67\x2A\x00\x2E"
+OBJ_setct_CertResData="\x67\x2A\x00\x2F"
+OBJ_setct_CertInqReqTBS="\x67\x2A\x00\x30"
+OBJ_setct_ErrorTBS="\x67\x2A\x00\x31"
+OBJ_setct_PIDualSignedTBE="\x67\x2A\x00\x32"
+OBJ_setct_PIUnsignedTBE="\x67\x2A\x00\x33"
+OBJ_setct_AuthReqTBE="\x67\x2A\x00\x34"
+OBJ_setct_AuthResTBE="\x67\x2A\x00\x35"
+OBJ_setct_AuthResTBEX="\x67\x2A\x00\x36"
+OBJ_setct_AuthTokenTBE="\x67\x2A\x00\x37"
+OBJ_setct_CapTokenTBE="\x67\x2A\x00\x38"
+OBJ_setct_CapTokenTBEX="\x67\x2A\x00\x39"
+OBJ_setct_AcqCardCodeMsgTBE="\x67\x2A\x00\x3A"
+OBJ_setct_AuthRevReqTBE="\x67\x2A\x00\x3B"
+OBJ_setct_AuthRevResTBE="\x67\x2A\x00\x3C"
+OBJ_setct_AuthRevResTBEB="\x67\x2A\x00\x3D"
+OBJ_setct_CapReqTBE="\x67\x2A\x00\x3E"
+OBJ_setct_CapReqTBEX="\x67\x2A\x00\x3F"
+OBJ_setct_CapResTBE="\x67\x2A\x00\x40"
+OBJ_setct_CapRevReqTBE="\x67\x2A\x00\x41"
+OBJ_setct_CapRevReqTBEX="\x67\x2A\x00\x42"
+OBJ_setct_CapRevResTBE="\x67\x2A\x00\x43"
+OBJ_setct_CredReqTBE="\x67\x2A\x00\x44"
+OBJ_setct_CredReqTBEX="\x67\x2A\x00\x45"
+OBJ_setct_CredResTBE="\x67\x2A\x00\x46"
+OBJ_setct_CredRevReqTBE="\x67\x2A\x00\x47"
+OBJ_setct_CredRevReqTBEX="\x67\x2A\x00\x48"
+OBJ_setct_CredRevResTBE="\x67\x2A\x00\x49"
+OBJ_setct_BatchAdminReqTBE="\x67\x2A\x00\x4A"
+OBJ_setct_BatchAdminResTBE="\x67\x2A\x00\x4B"
+OBJ_setct_RegFormReqTBE="\x67\x2A\x00\x4C"
+OBJ_setct_CertReqTBE="\x67\x2A\x00\x4D"
+OBJ_setct_CertReqTBEX="\x67\x2A\x00\x4E"
+OBJ_setct_CertResTBE="\x67\x2A\x00\x4F"
+OBJ_setct_CRLNotificationTBS="\x67\x2A\x00\x50"
+OBJ_setct_CRLNotificationResTBS="\x67\x2A\x00\x51"
+OBJ_setct_BCIDistributionTBS="\x67\x2A\x00\x52"
+OBJ_setext_genCrypt="\x67\x2A\x01\x01"
+OBJ_setext_miAuth="\x67\x2A\x01\x03"
+OBJ_setext_pinSecure="\x67\x2A\x01\x04"
+OBJ_setext_pinAny="\x67\x2A\x01\x05"
+OBJ_setext_track2="\x67\x2A\x01\x07"
+OBJ_setext_cv="\x67\x2A\x01\x08"
+OBJ_set_policy_root="\x67\x2A\x05\x00"
+OBJ_setCext_hashedRoot="\x67\x2A\x07\x00"
+OBJ_setCext_certType="\x67\x2A\x07\x01"
+OBJ_setCext_merchData="\x67\x2A\x07\x02"
+OBJ_setCext_cCertRequired="\x67\x2A\x07\x03"
+OBJ_setCext_tunneling="\x67\x2A\x07\x04"
+OBJ_setCext_setExt="\x67\x2A\x07\x05"
+OBJ_setCext_setQualf="\x67\x2A\x07\x06"
+OBJ_setCext_PGWYcapabilities="\x67\x2A\x07\x07"
+OBJ_setCext_TokenIdentifier="\x67\x2A\x07\x08"
+OBJ_setCext_Track2Data="\x67\x2A\x07\x09"
+OBJ_setCext_TokenType="\x67\x2A\x07\x0A"
+OBJ_setCext_IssuerCapabilities="\x67\x2A\x07\x0B"
+OBJ_setAttr_Cert="\x67\x2A\x03\x00"
+OBJ_setAttr_PGWYcap="\x67\x2A\x03\x01"
+OBJ_setAttr_TokenType="\x67\x2A\x03\x02"
+OBJ_setAttr_IssCap="\x67\x2A\x03\x03"
+OBJ_set_rootKeyThumb="\x67\x2A\x03\x00\x00"
+OBJ_set_addPolicy="\x67\x2A\x03\x00\x01"
+OBJ_setAttr_Token_EMV="\x67\x2A\x03\x02\x01"
+OBJ_setAttr_Token_B0Prime="\x67\x2A\x03\x02\x02"
+OBJ_setAttr_IssCap_CVM="\x67\x2A\x03\x03\x03"
+OBJ_setAttr_IssCap_T2="\x67\x2A\x03\x03\x04"
+OBJ_setAttr_IssCap_Sig="\x67\x2A\x03\x03\x05"
+OBJ_setAttr_GenCryptgrm="\x67\x2A\x03\x03\x03\x01"
+OBJ_setAttr_T2Enc="\x67\x2A\x03\x03\x04\x01"
+OBJ_setAttr_T2cleartxt="\x67\x2A\x03\x03\x04\x02"
+OBJ_setAttr_TokICCsig="\x67\x2A\x03\x03\x05\x01"
+OBJ_setAttr_SecDevSig="\x67\x2A\x03\x03\x05\x02"
+OBJ_set_brand_IATA_ATA="\x67\x2A\x08\x01"
+OBJ_set_brand_Diners="\x67\x2A\x08\x1E"
+OBJ_set_brand_AmericanExpress="\x67\x2A\x08\x22"
+OBJ_set_brand_JCB="\x67\x2A\x08\x23"
+OBJ_set_brand_Visa="\x67\x2A\x08\x04"
+OBJ_set_brand_MasterCard="\x67\x2A\x08\x05"
+OBJ_set_brand_Novus="\x67\x2A\x08\xAE\x7B"
+OBJ_des_cdmf="\x2A\x86\x48\x86\xF7\x0D\x03\x0A"
+OBJ_rsaOAEPEncryptionSET="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x06"
+OBJ_international_organizations="\x67"
+OBJ_ms_smartcard_login="\x2B\x06\x01\x04\x01\x82\x37\x14\x02\x02"
+OBJ_ms_upn="\x2B\x06\x01\x04\x01\x82\x37\x14\x02\x03"
+OBJ_streetAddress="\x55\x04\x09"
+OBJ_postalCode="\x55\x04\x11"
+OBJ_id_ppl="\x2B\x06\x01\x05\x05\x07\x15"
+OBJ_proxyCertInfo="\x2B\x06\x01\x05\x05\x07\x01\x0E"
+OBJ_id_ppl_anyLanguage="\x2B\x06\x01\x05\x05\x07\x15\x00"
+OBJ_id_ppl_inheritAll="\x2B\x06\x01\x05\x05\x07\x15\x01"
+OBJ_name_constraints="\x55\x1D\x1E"
+OBJ_Independent="\x2B\x06\x01\x05\x05\x07\x15\x02"
+OBJ_sha256WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B"
+OBJ_sha384WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0C"
+OBJ_sha512WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0D"
+OBJ_sha224WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0E"
+OBJ_sha256="\x60\x86\x48\x01\x65\x03\x04\x02\x01"
+OBJ_sha384="\x60\x86\x48\x01\x65\x03\x04\x02\x02"
+OBJ_sha512="\x60\x86\x48\x01\x65\x03\x04\x02\x03"
+OBJ_sha224="\x60\x86\x48\x01\x65\x03\x04\x02\x04"
+OBJ_identified_organization="\x2B"
+OBJ_certicom_arc="\x2B\x81\x04"
+OBJ_wap="\x67\x2B"
+OBJ_wap_wsg="\x67\x2B\x01"
+OBJ_X9_62_id_characteristic_two_basis="\x2A\x86\x48\xCE\x3D\x01\x02\x03"
+OBJ_X9_62_onBasis="\x2A\x86\x48\xCE\x3D\x01\x02\x03\x01"
+OBJ_X9_62_tpBasis="\x2A\x86\x48\xCE\x3D\x01\x02\x03\x02"
+OBJ_X9_62_ppBasis="\x2A\x86\x48\xCE\x3D\x01\x02\x03\x03"
+OBJ_X9_62_c2pnb163v1="\x2A\x86\x48\xCE\x3D\x03\x00\x01"
+OBJ_X9_62_c2pnb163v2="\x2A\x86\x48\xCE\x3D\x03\x00\x02"
+OBJ_X9_62_c2pnb163v3="\x2A\x86\x48\xCE\x3D\x03\x00\x03"
+OBJ_X9_62_c2pnb176v1="\x2A\x86\x48\xCE\x3D\x03\x00\x04"
+OBJ_X9_62_c2tnb191v1="\x2A\x86\x48\xCE\x3D\x03\x00\x05"
+OBJ_X9_62_c2tnb191v2="\x2A\x86\x48\xCE\x3D\x03\x00\x06"
+OBJ_X9_62_c2tnb191v3="\x2A\x86\x48\xCE\x3D\x03\x00\x07"
+OBJ_X9_62_c2onb191v4="\x2A\x86\x48\xCE\x3D\x03\x00\x08"
+OBJ_X9_62_c2onb191v5="\x2A\x86\x48\xCE\x3D\x03\x00\x09"
+OBJ_X9_62_c2pnb208w1="\x2A\x86\x48\xCE\x3D\x03\x00\x0A"
+OBJ_X9_62_c2tnb239v1="\x2A\x86\x48\xCE\x3D\x03\x00\x0B"
+OBJ_X9_62_c2tnb239v2="\x2A\x86\x48\xCE\x3D\x03\x00\x0C"
+OBJ_X9_62_c2tnb239v3="\x2A\x86\x48\xCE\x3D\x03\x00\x0D"
+OBJ_X9_62_c2onb239v4="\x2A\x86\x48\xCE\x3D\x03\x00\x0E"
+OBJ_X9_62_c2onb239v5="\x2A\x86\x48\xCE\x3D\x03\x00\x0F"
+OBJ_X9_62_c2pnb272w1="\x2A\x86\x48\xCE\x3D\x03\x00\x10"
+OBJ_X9_62_c2pnb304w1="\x2A\x86\x48\xCE\x3D\x03\x00\x11"
+OBJ_X9_62_c2tnb359v1="\x2A\x86\x48\xCE\x3D\x03\x00\x12"
+OBJ_X9_62_c2pnb368w1="\x2A\x86\x48\xCE\x3D\x03\x00\x13"
+OBJ_X9_62_c2tnb431r1="\x2A\x86\x48\xCE\x3D\x03\x00\x14"
+OBJ_secp112r1="\x2B\x81\x04\x00\x06"
+OBJ_secp112r2="\x2B\x81\x04\x00\x07"
+OBJ_secp128r1="\x2B\x81\x04\x00\x1C"
+OBJ_secp128r2="\x2B\x81\x04\x00\x1D"
+OBJ_secp160k1="\x2B\x81\x04\x00\x09"
+OBJ_secp160r1="\x2B\x81\x04\x00\x08"
+OBJ_secp160r2="\x2B\x81\x04\x00\x1E"
+OBJ_secp192k1="\x2B\x81\x04\x00\x1F"
+OBJ_secp224k1="\x2B\x81\x04\x00\x20"
+OBJ_secp224r1="\x2B\x81\x04\x00\x21"
+OBJ_secp256k1="\x2B\x81\x04\x00\x0A"
+OBJ_secp384r1="\x2B\x81\x04\x00\x22"
+OBJ_secp521r1="\x2B\x81\x04\x00\x23"
+OBJ_sect113r1="\x2B\x81\x04\x00\x04"
+OBJ_sect113r2="\x2B\x81\x04\x00\x05"
+OBJ_sect131r1="\x2B\x81\x04\x00\x16"
+OBJ_sect131r2="\x2B\x81\x04\x00\x17"
+OBJ_sect163k1="\x2B\x81\x04\x00\x01"
+OBJ_sect163r1="\x2B\x81\x04\x00\x02"
+OBJ_sect163r2="\x2B\x81\x04\x00\x0F"
+OBJ_sect193r1="\x2B\x81\x04\x00\x18"
+OBJ_sect193r2="\x2B\x81\x04\x00\x19"
+OBJ_sect233k1="\x2B\x81\x04\x00\x1A"
+OBJ_sect233r1="\x2B\x81\x04\x00\x1B"
+OBJ_sect239k1="\x2B\x81\x04\x00\x03"
+OBJ_sect283k1="\x2B\x81\x04\x00\x10"
+OBJ_sect283r1="\x2B\x81\x04\x00\x11"
+OBJ_sect409k1="\x2B\x81\x04\x00\x24"
+OBJ_sect409r1="\x2B\x81\x04\x00\x25"
+OBJ_sect571k1="\x2B\x81\x04\x00\x26"
+OBJ_sect571r1="\x2B\x81\x04\x00\x27"
+OBJ_wap_wsg_idm_ecid_wtls1="\x67\x2B\x01\x04\x01"
+OBJ_wap_wsg_idm_ecid_wtls3="\x67\x2B\x01\x04\x03"
+OBJ_wap_wsg_idm_ecid_wtls4="\x67\x2B\x01\x04\x04"
+OBJ_wap_wsg_idm_ecid_wtls5="\x67\x2B\x01\x04\x05"
+OBJ_wap_wsg_idm_ecid_wtls6="\x67\x2B\x01\x04\x06"
+OBJ_wap_wsg_idm_ecid_wtls7="\x67\x2B\x01\x04\x07"
+OBJ_wap_wsg_idm_ecid_wtls8="\x67\x2B\x01\x04\x08"
+OBJ_wap_wsg_idm_ecid_wtls9="\x67\x2B\x01\x04\x09"
+OBJ_wap_wsg_idm_ecid_wtls10="\x67\x2B\x01\x04\x0A"
+OBJ_wap_wsg_idm_ecid_wtls11="\x67\x2B\x01\x04\x0B"
+OBJ_wap_wsg_idm_ecid_wtls12="\x67\x2B\x01\x04\x0C"
+OBJ_any_policy="\x55\x1D\x20\x00"
+OBJ_policy_mappings="\x55\x1D\x21"
+OBJ_inhibit_any_policy="\x55\x1D\x36"
+OBJ_camellia_128_cbc="\x2A\x83\x08\x8C\x9A\x4B\x3D\x01\x01\x01\x02"
+OBJ_camellia_192_cbc="\x2A\x83\x08\x8C\x9A\x4B\x3D\x01\x01\x01\x03"
+OBJ_camellia_256_cbc="\x2A\x83\x08\x8C\x9A\x4B\x3D\x01\x01\x01\x04"
+OBJ_camellia_128_ecb="\x03\xA2\x31\x05\x03\x01\x09\x01"
+OBJ_camellia_192_ecb="\x03\xA2\x31\x05\x03\x01\x09\x15"
+OBJ_camellia_256_ecb="\x03\xA2\x31\x05\x03\x01\x09\x29"
+OBJ_camellia_128_cfb128="\x03\xA2\x31\x05\x03\x01\x09\x04"
+OBJ_camellia_192_cfb128="\x03\xA2\x31\x05\x03\x01\x09\x18"
+OBJ_camellia_256_cfb128="\x03\xA2\x31\x05\x03\x01\x09\x2C"
+OBJ_camellia_128_ofb128="\x03\xA2\x31\x05\x03\x01\x09\x03"
+OBJ_camellia_192_ofb128="\x03\xA2\x31\x05\x03\x01\x09\x17"
+OBJ_camellia_256_ofb128="\x03\xA2\x31\x05\x03\x01\x09\x2B"
+OBJ_subject_directory_attributes="\x55\x1D\x09"
+OBJ_issuing_distribution_point="\x55\x1D\x1C"
+OBJ_certificate_issuer="\x55\x1D\x1D"
+OBJ_kisa="\x2A\x83\x1A\x8C\x9A\x44"
+OBJ_seed_ecb="\x2A\x83\x1A\x8C\x9A\x44\x01\x03"
+OBJ_seed_cbc="\x2A\x83\x1A\x8C\x9A\x44\x01\x04"
+OBJ_seed_ofb128="\x2A\x83\x1A\x8C\x9A\x44\x01\x06"
+OBJ_seed_cfb128="\x2A\x83\x1A\x8C\x9A\x44\x01\x05"
+OBJ_hmac_md5="\x2B\x06\x01\x05\x05\x08\x01\x01"
+OBJ_hmac_sha1="\x2B\x06\x01\x05\x05\x08\x01\x02"
+OBJ_id_PasswordBasedMAC="\x2A\x86\x48\x86\xF6\x7D\x07\x42\x0D"
+OBJ_id_DHBasedMac="\x2A\x86\x48\x86\xF6\x7D\x07\x42\x1E"
+OBJ_id_it_suppLangTags="\x2B\x06\x01\x05\x05\x07\x04\x10"
+OBJ_caRepository="\x2B\x06\x01\x05\x05\x07\x30\x05"
+OBJ_id_smime_ct_compressedData="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x09"
+OBJ_id_ct_asciiTextWithCRLF="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x1B"
+OBJ_id_aes128_wrap="\x60\x86\x48\x01\x65\x03\x04\x01\x05"
+OBJ_id_aes192_wrap="\x60\x86\x48\x01\x65\x03\x04\x01\x19"
+OBJ_id_aes256_wrap="\x60\x86\x48\x01\x65\x03\x04\x01\x2D"
+OBJ_ecdsa_with_Recommended="\x2A\x86\x48\xCE\x3D\x04\x02"
+OBJ_ecdsa_with_Specified="\x2A\x86\x48\xCE\x3D\x04\x03"
+OBJ_ecdsa_with_SHA224="\x2A\x86\x48\xCE\x3D\x04\x03\x01"
+OBJ_ecdsa_with_SHA256="\x2A\x86\x48\xCE\x3D\x04\x03\x02"
+OBJ_ecdsa_with_SHA384="\x2A\x86\x48\xCE\x3D\x04\x03\x03"
+OBJ_ecdsa_with_SHA512="\x2A\x86\x48\xCE\x3D\x04\x03\x04"
+OBJ_hmacWithMD5="\x2A\x86\x48\x86\xF7\x0D\x02\x06"
+OBJ_hmacWithSHA224="\x2A\x86\x48\x86\xF7\x0D\x02\x08"
+OBJ_hmacWithSHA256="\x2A\x86\x48\x86\xF7\x0D\x02\x09"
+OBJ_hmacWithSHA384="\x2A\x86\x48\x86\xF7\x0D\x02\x0A"
+OBJ_hmacWithSHA512="\x2A\x86\x48\x86\xF7\x0D\x02\x0B"
+OBJ_dsa_with_SHA224="\x60\x86\x48\x01\x65\x03\x04\x03\x01"
+OBJ_dsa_with_SHA256="\x60\x86\x48\x01\x65\x03\x04\x03\x02"
+OBJ_whirlpool="\x28\xCF\x06\x03\x00\x37"
+OBJ_cryptopro="\x2A\x85\x03\x02\x02"
+OBJ_cryptocom="\x2A\x85\x03\x02\x09"
+OBJ_id_GostR3411_94_with_GostR3410_2001="\x2A\x85\x03\x02\x02\x03"
+OBJ_id_GostR3411_94_with_GostR3410_94="\x2A\x85\x03\x02\x02\x04"
+OBJ_id_GostR3411_94="\x2A\x85\x03\x02\x02\x09"
+OBJ_id_HMACGostR3411_94="\x2A\x85\x03\x02\x02\x0A"
+OBJ_id_GostR3410_2001="\x2A\x85\x03\x02\x02\x13"
+OBJ_id_GostR3410_94="\x2A\x85\x03\x02\x02\x14"
+OBJ_id_Gost28147_89="\x2A\x85\x03\x02\x02\x15"
+OBJ_id_Gost28147_89_MAC="\x2A\x85\x03\x02\x02\x16"
+OBJ_id_GostR3411_94_prf="\x2A\x85\x03\x02\x02\x17"
+OBJ_id_GostR3410_2001DH="\x2A\x85\x03\x02\x02\x62"
+OBJ_id_GostR3410_94DH="\x2A\x85\x03\x02\x02\x63"
+OBJ_id_Gost28147_89_CryptoPro_KeyMeshing="\x2A\x85\x03\x02\x02\x0E\x01"
+OBJ_id_Gost28147_89_None_KeyMeshing="\x2A\x85\x03\x02\x02\x0E\x00"
+OBJ_id_GostR3411_94_TestParamSet="\x2A\x85\x03\x02\x02\x1E\x00"
+OBJ_id_GostR3411_94_CryptoProParamSet="\x2A\x85\x03\x02\x02\x1E\x01"
+OBJ_id_Gost28147_89_TestParamSet="\x2A\x85\x03\x02\x02\x1F\x00"
+OBJ_id_Gost28147_89_CryptoPro_A_ParamSet="\x2A\x85\x03\x02\x02\x1F\x01"
+OBJ_id_Gost28147_89_CryptoPro_B_ParamSet="\x2A\x85\x03\x02\x02\x1F\x02"
+OBJ_id_Gost28147_89_CryptoPro_C_ParamSet="\x2A\x85\x03\x02\x02\x1F\x03"
+OBJ_id_Gost28147_89_CryptoPro_D_ParamSet="\x2A\x85\x03\x02\x02\x1F\x04"
+OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet="\x2A\x85\x03\x02\x02\x1F\x05"
+OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet="\x2A\x85\x03\x02\x02\x1F\x06"
+OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet="\x2A\x85\x03\x02\x02\x1F\x07"
+OBJ_id_GostR3410_94_TestParamSet="\x2A\x85\x03\x02\x02\x20\x00"
+OBJ_id_GostR3410_94_CryptoPro_A_ParamSet="\x2A\x85\x03\x02\x02\x20\x02"
+OBJ_id_GostR3410_94_CryptoPro_B_ParamSet="\x2A\x85\x03\x02\x02\x20\x03"
+OBJ_id_GostR3410_94_CryptoPro_C_ParamSet="\x2A\x85\x03\x02\x02\x20\x04"
+OBJ_id_GostR3410_94_CryptoPro_D_ParamSet="\x2A\x85\x03\x02\x02\x20\x05"
+OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet="\x2A\x85\x03\x02\x02\x21\x01"
+OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet="\x2A\x85\x03\x02\x02\x21\x02"
+OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet="\x2A\x85\x03\x02\x02\x21\x03"
+OBJ_id_GostR3410_2001_TestParamSet="\x2A\x85\x03\x02\x02\x23\x00"
+OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet="\x2A\x85\x03\x02\x02\x23\x01"
+OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet="\x2A\x85\x03\x02\x02\x23\x02"
+OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet="\x2A\x85\x03\x02\x02\x23\x03"
+OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet="\x2A\x85\x03\x02\x02\x24\x00"
+OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet="\x2A\x85\x03\x02\x02\x24\x01"
+OBJ_id_GostR3410_94_a="\x2A\x85\x03\x02\x02\x14\x01"
+OBJ_id_GostR3410_94_aBis="\x2A\x85\x03\x02\x02\x14\x02"
+OBJ_id_GostR3410_94_b="\x2A\x85\x03\x02\x02\x14\x03"
+OBJ_id_GostR3410_94_bBis="\x2A\x85\x03\x02\x02\x14\x04"
+OBJ_id_Gost28147_89_cc="\x2A\x85\x03\x02\x09\x01\x06\x01"
+OBJ_id_GostR3410_94_cc="\x2A\x85\x03\x02\x09\x01\x05\x03"
+OBJ_id_GostR3410_2001_cc="\x2A\x85\x03\x02\x09\x01\x05\x04"
+OBJ_id_GostR3411_94_with_GostR3410_94_cc="\x2A\x85\x03\x02\x09\x01\x03\x03"
+OBJ_id_GostR3411_94_with_GostR3410_2001_cc="\x2A\x85\x03\x02\x09\x01\x03\x04"
+OBJ_id_GostR3410_2001_ParamSet_cc="\x2A\x85\x03\x02\x09\x01\x08\x01"
+OBJ_LocalKeySet="\x2B\x06\x01\x04\x01\x82\x37\x11\x02"
+OBJ_freshest_crl="\x55\x1D\x2E"
+OBJ_id_on_permanentIdentifier="\x2B\x06\x01\x05\x05\x07\x08\x03"
+OBJ_searchGuide="\x55\x04\x0E"
+OBJ_businessCategory="\x55\x04\x0F"
+OBJ_postalAddress="\x55\x04\x10"
+OBJ_postOfficeBox="\x55\x04\x12"
+OBJ_physicalDeliveryOfficeName="\x55\x04\x13"
+OBJ_telephoneNumber="\x55\x04\x14"
+OBJ_telexNumber="\x55\x04\x15"
+OBJ_teletexTerminalIdentifier="\x55\x04\x16"
+OBJ_facsimileTelephoneNumber="\x55\x04\x17"
+OBJ_x121Address="\x55\x04\x18"
+OBJ_internationaliSDNNumber="\x55\x04\x19"
+OBJ_registeredAddress="\x55\x04\x1A"
+OBJ_destinationIndicator="\x55\x04\x1B"
+OBJ_preferredDeliveryMethod="\x55\x04\x1C"
+OBJ_presentationAddress="\x55\x04\x1D"
+OBJ_supportedApplicationContext="\x55\x04\x1E"
+OBJ_member="\x55\x04\x1F"
+OBJ_owner="\x55\x04\x20"
+OBJ_roleOccupant="\x55\x04\x21"
+OBJ_seeAlso="\x55\x04\x22"
+OBJ_userPassword="\x55\x04\x23"
+OBJ_userCertificate="\x55\x04\x24"
+OBJ_cACertificate="\x55\x04\x25"
+OBJ_authorityRevocationList="\x55\x04\x26"
+OBJ_certificateRevocationList="\x55\x04\x27"
+OBJ_crossCertificatePair="\x55\x04\x28"
+OBJ_enhancedSearchGuide="\x55\x04\x2F"
+OBJ_protocolInformation="\x55\x04\x30"
+OBJ_distinguishedName="\x55\x04\x31"
+OBJ_uniqueMember="\x55\x04\x32"
+OBJ_houseIdentifier="\x55\x04\x33"
+OBJ_supportedAlgorithms="\x55\x04\x34"
+OBJ_deltaRevocationList="\x55\x04\x35"
+OBJ_dmdName="\x55\x04\x36"
+OBJ_id_alg_PWRI_KEK="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x03\x09"
+OBJ_aes_128_gcm="\x60\x86\x48\x01\x65\x03\x04\x01\x06"
+OBJ_aes_128_ccm="\x60\x86\x48\x01\x65\x03\x04\x01\x07"
+OBJ_id_aes128_wrap_pad="\x60\x86\x48\x01\x65\x03\x04\x01\x08"
+OBJ_aes_192_gcm="\x60\x86\x48\x01\x65\x03\x04\x01\x1A"
+OBJ_aes_192_ccm="\x60\x86\x48\x01\x65\x03\x04\x01\x1B"
+OBJ_id_aes192_wrap_pad="\x60\x86\x48\x01\x65\x03\x04\x01\x1C"
+OBJ_aes_256_gcm="\x60\x86\x48\x01\x65\x03\x04\x01\x2E"
+OBJ_aes_256_ccm="\x60\x86\x48\x01\x65\x03\x04\x01\x2F"
+OBJ_id_aes256_wrap_pad="\x60\x86\x48\x01\x65\x03\x04\x01\x30"
+OBJ_id_camellia128_wrap="\x2A\x83\x08\x8C\x9A\x4B\x3D\x01\x01\x03\x02"
+OBJ_id_camellia192_wrap="\x2A\x83\x08\x8C\x9A\x4B\x3D\x01\x01\x03\x03"
+OBJ_id_camellia256_wrap="\x2A\x83\x08\x8C\x9A\x4B\x3D\x01\x01\x03\x04"
+OBJ_anyExtendedKeyUsage="\x55\x1D\x25\x00"
+OBJ_mgf1="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x08"
+OBJ_rsassaPss="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0A"
+OBJ_aes_128_xts="\x2B\x6F\x02\x8C\x53\x00\x01\x01"
+OBJ_aes_256_xts="\x2B\x6F\x02\x8C\x53\x00\x01\x02"
+OBJ_rsaesOaep="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x07"
+OBJ_dhpublicnumber="\x2A\x86\x48\xCE\x3E\x02\x01"
+OBJ_brainpoolP160r1="\x2B\x24\x03\x03\x02\x08\x01\x01\x01"
+OBJ_brainpoolP160t1="\x2B\x24\x03\x03\x02\x08\x01\x01\x02"
+OBJ_brainpoolP192r1="\x2B\x24\x03\x03\x02\x08\x01\x01\x03"
+OBJ_brainpoolP192t1="\x2B\x24\x03\x03\x02\x08\x01\x01\x04"
+OBJ_brainpoolP224r1="\x2B\x24\x03\x03\x02\x08\x01\x01\x05"
+OBJ_brainpoolP224t1="\x2B\x24\x03\x03\x02\x08\x01\x01\x06"
+OBJ_brainpoolP256r1="\x2B\x24\x03\x03\x02\x08\x01\x01\x07"
+OBJ_brainpoolP256t1="\x2B\x24\x03\x03\x02\x08\x01\x01\x08"
+OBJ_brainpoolP320r1="\x2B\x24\x03\x03\x02\x08\x01\x01\x09"
+OBJ_brainpoolP320t1="\x2B\x24\x03\x03\x02\x08\x01\x01\x0A"
+OBJ_brainpoolP384r1="\x2B\x24\x03\x03\x02\x08\x01\x01\x0B"
+OBJ_brainpoolP384t1="\x2B\x24\x03\x03\x02\x08\x01\x01\x0C"
+OBJ_brainpoolP512r1="\x2B\x24\x03\x03\x02\x08\x01\x01\x0D"
+OBJ_brainpoolP512t1="\x2B\x24\x03\x03\x02\x08\x01\x01\x0E"
+OBJ_pSpecified="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x09"
+OBJ_dhSinglePass_stdDH_sha1kdf_scheme="\x2B\x81\x05\x10\x86\x48\x3F\x00\x02"
+OBJ_dhSinglePass_stdDH_sha224kdf_scheme="\x2B\x81\x04\x01\x0B\x00"
+OBJ_dhSinglePass_stdDH_sha256kdf_scheme="\x2B\x81\x04\x01\x0B\x01"
+OBJ_dhSinglePass_stdDH_sha384kdf_scheme="\x2B\x81\x04\x01\x0B\x02"
+OBJ_dhSinglePass_stdDH_sha512kdf_scheme="\x2B\x81\x04\x01\x0B\x03"
+OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme="\x2B\x81\x05\x10\x86\x48\x3F\x00\x03"
+OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme="\x2B\x81\x04\x01\x0E\x00"
+OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme="\x2B\x81\x04\x01\x0E\x01"
+OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme="\x2B\x81\x04\x01\x0E\x02"
+OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme="\x2B\x81\x04\x01\x0E\x03"
+OBJ_ct_precert_scts="\x2B\x06\x01\x04\x01\xD6\x79\x02\x04\x02"
+OBJ_ct_precert_poison="\x2B\x06\x01\x04\x01\xD6\x79\x02\x04\x03"
+OBJ_ct_precert_signer="\x2B\x06\x01\x04\x01\xD6\x79\x02\x04\x04"
+OBJ_ct_cert_scts="\x2B\x06\x01\x04\x01\xD6\x79\x02\x04\x05"
+OBJ_jurisdictionLocalityName="\x2B\x06\x01\x04\x01\x82\x37\x3C\x02\x01\x01"
+OBJ_jurisdictionStateOrProvinceName="\x2B\x06\x01\x04\x01\x82\x37\x3C\x02\x01\x02"
+OBJ_jurisdictionCountryName="\x2B\x06\x01\x04\x01\x82\x37\x3C\x02\x01\x03"
+OBJ_camellia_128_gcm="\x03\xA2\x31\x05\x03\x01\x09\x06"
+OBJ_camellia_128_ccm="\x03\xA2\x31\x05\x03\x01\x09\x07"
+OBJ_camellia_128_ctr="\x03\xA2\x31\x05\x03\x01\x09\x09"
+OBJ_camellia_128_cmac="\x03\xA2\x31\x05\x03\x01\x09\x0A"
+OBJ_camellia_192_gcm="\x03\xA2\x31\x05\x03\x01\x09\x1A"
+OBJ_camellia_192_ccm="\x03\xA2\x31\x05\x03\x01\x09\x1B"
+OBJ_camellia_192_ctr="\x03\xA2\x31\x05\x03\x01\x09\x1D"
+OBJ_camellia_192_cmac="\x03\xA2\x31\x05\x03\x01\x09\x1E"
+OBJ_camellia_256_gcm="\x03\xA2\x31\x05\x03\x01\x09\x2E"
+OBJ_camellia_256_ccm="\x03\xA2\x31\x05\x03\x01\x09\x2F"
+OBJ_camellia_256_ctr="\x03\xA2\x31\x05\x03\x01\x09\x31"
+OBJ_camellia_256_cmac="\x03\xA2\x31\x05\x03\x01\x09\x32"
+OBJ_id_scrypt="\x2B\x06\x01\x04\x01\xDA\x47\x04\x0B"
+OBJ_id_tc26="\x2A\x85\x03\x07\x01"
+OBJ_id_tc26_algorithms="\x2A\x85\x03\x07\x01\x01"
+OBJ_id_tc26_sign="\x2A\x85\x03\x07\x01\x01\x01"
+OBJ_id_GostR3410_2012_256="\x2A\x85\x03\x07\x01\x01\x01\x01"
+OBJ_id_GostR3410_2012_512="\x2A\x85\x03\x07\x01\x01\x01\x02"
+OBJ_id_tc26_digest="\x2A\x85\x03\x07\x01\x01\x02"
+OBJ_id_GostR3411_2012_256="\x2A\x85\x03\x07\x01\x01\x02\x02"
+OBJ_id_GostR3411_2012_512="\x2A\x85\x03\x07\x01\x01\x02\x03"
+OBJ_id_tc26_signwithdigest="\x2A\x85\x03\x07\x01\x01\x03"
+OBJ_id_tc26_signwithdigest_gost3410_2012_256="\x2A\x85\x03\x07\x01\x01\x03\x02"
+OBJ_id_tc26_signwithdigest_gost3410_2012_512="\x2A\x85\x03\x07\x01\x01\x03\x03"
+OBJ_id_tc26_mac="\x2A\x85\x03\x07\x01\x01\x04"
+OBJ_id_tc26_hmac_gost_3411_2012_256="\x2A\x85\x03\x07\x01\x01\x04\x01"
+OBJ_id_tc26_hmac_gost_3411_2012_512="\x2A\x85\x03\x07\x01\x01\x04\x02"
+OBJ_id_tc26_cipher="\x2A\x85\x03\x07\x01\x01\x05"
+OBJ_id_tc26_agreement="\x2A\x85\x03\x07\x01\x01\x06"
+OBJ_id_tc26_agreement_gost_3410_2012_256="\x2A\x85\x03\x07\x01\x01\x06\x01"
+OBJ_id_tc26_agreement_gost_3410_2012_512="\x2A\x85\x03\x07\x01\x01\x06\x02"
+OBJ_id_tc26_constants="\x2A\x85\x03\x07\x01\x02"
+OBJ_id_tc26_sign_constants="\x2A\x85\x03\x07\x01\x02\x01"
+OBJ_id_tc26_gost_3410_2012_512_constants="\x2A\x85\x03\x07\x01\x02\x01\x02"
+OBJ_id_tc26_gost_3410_2012_512_paramSetTest="\x2A\x85\x03\x07\x01\x02\x01\x02\x00"
+OBJ_id_tc26_gost_3410_2012_512_paramSetA="\x2A\x85\x03\x07\x01\x02\x01\x02\x01"
+OBJ_id_tc26_gost_3410_2012_512_paramSetB="\x2A\x85\x03\x07\x01\x02\x01\x02\x02"
+OBJ_id_tc26_digest_constants="\x2A\x85\x03\x07\x01\x02\x02"
+OBJ_id_tc26_cipher_constants="\x2A\x85\x03\x07\x01\x02\x05"
+OBJ_id_tc26_gost_28147_constants="\x2A\x85\x03\x07\x01\x02\x05\x01"
+OBJ_id_tc26_gost_28147_param_Z="\x2A\x85\x03\x07\x01\x02\x05\x01\x01"
+OBJ_INN="\x2A\x85\x03\x03\x81\x03\x01\x01"
+OBJ_OGRN="\x2A\x85\x03\x64\x01"
+OBJ_SNILS="\x2A\x85\x03\x64\x03"
+OBJ_subjectSignTool="\x2A\x85\x03\x64\x6F"
+OBJ_issuerSignTool="\x2A\x85\x03\x64\x70"
+OBJ_tlsfeature="\x2B\x06\x01\x05\x05\x07\x01\x18"
+OBJ_ipsec_IKE="\x2B\x06\x01\x05\x05\x07\x03\x11"
+OBJ_capwapAC="\x2B\x06\x01\x05\x05\x07\x03\x12"
+OBJ_capwapWTP="\x2B\x06\x01\x05\x05\x07\x03\x13"
+OBJ_sshClient="\x2B\x06\x01\x05\x05\x07\x03\x15"
+OBJ_sshServer="\x2B\x06\x01\x05\x05\x07\x03\x16"
+OBJ_sendRouter="\x2B\x06\x01\x05\x05\x07\x03\x17"
+OBJ_sendProxiedRouter="\x2B\x06\x01\x05\x05\x07\x03\x18"
+OBJ_sendOwner="\x2B\x06\x01\x05\x05\x07\x03\x19"
+OBJ_sendProxiedOwner="\x2B\x06\x01\x05\x05\x07\x03\x1A"
+OBJ_id_pkinit="\x2B\x06\x01\x05\x02\x03"
+OBJ_pkInitClientAuth="\x2B\x06\x01\x05\x02\x03\x04"
+OBJ_pkInitKDC="\x2B\x06\x01\x05\x02\x03\x05"
+OBJ_X25519="\x2B\x65\x6E"
+OBJ_X448="\x2B\x65\x6F"
+OBJ_blake2b512="\x2B\x06\x01\x04\x01\x8D\x3A\x0C\x02\x01\x10"
+OBJ_blake2s256="\x2B\x06\x01\x04\x01\x8D\x3A\x0C\x02\x02\x08"
+OBJ_id_smime_ct_contentCollection="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x13"
+OBJ_id_smime_ct_authEnvelopedData="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x17"
+OBJ_id_ct_xml="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x1C"
+OBJ_aria_128_ecb="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x01"
+OBJ_aria_128_cbc="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x02"
+OBJ_aria_128_cfb128="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x03"
+OBJ_aria_128_ofb128="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x04"
+OBJ_aria_128_ctr="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x05"
+OBJ_aria_192_ecb="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x06"
+OBJ_aria_192_cbc="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x07"
+OBJ_aria_192_cfb128="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x08"
+OBJ_aria_192_ofb128="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x09"
+OBJ_aria_192_ctr="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x0A"
+OBJ_aria_256_ecb="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x0B"
+OBJ_aria_256_cbc="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x0C"
+OBJ_aria_256_cfb128="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x0D"
+OBJ_aria_256_ofb128="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x0E"
+OBJ_aria_256_ctr="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x0F"
+OBJ_id_smime_aa_signingCertificateV2="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x02\x2F"
+OBJ_ED25519="\x2B\x65\x70"
+OBJ_ED448="\x2B\x65\x71"
+OBJ_organizationIdentifier="\x55\x04\x61"
+OBJ_countryCode3c="\x55\x04\x62"
+OBJ_countryCode3n="\x55\x04\x63"
+OBJ_dnsName="\x55\x04\x64"
+OBJ_x509ExtAdmission="\x2B\x24\x08\x03\x03"
+OBJ_sha512_224="\x60\x86\x48\x01\x65\x03\x04\x02\x05"
+OBJ_sha512_256="\x60\x86\x48\x01\x65\x03\x04\x02\x06"
+OBJ_sha3_224="\x60\x86\x48\x01\x65\x03\x04\x02\x07"
+OBJ_sha3_256="\x60\x86\x48\x01\x65\x03\x04\x02\x08"
+OBJ_sha3_384="\x60\x86\x48\x01\x65\x03\x04\x02\x09"
+OBJ_sha3_512="\x60\x86\x48\x01\x65\x03\x04\x02\x0A"
+OBJ_shake128="\x60\x86\x48\x01\x65\x03\x04\x02\x0B"
+OBJ_shake256="\x60\x86\x48\x01\x65\x03\x04\x02\x0C"
+OBJ_hmac_sha3_224="\x60\x86\x48\x01\x65\x03\x04\x02\x0D"
+OBJ_hmac_sha3_256="\x60\x86\x48\x01\x65\x03\x04\x02\x0E"
+OBJ_hmac_sha3_384="\x60\x86\x48\x01\x65\x03\x04\x02\x0F"
+OBJ_hmac_sha3_512="\x60\x86\x48\x01\x65\x03\x04\x02\x10"
+OBJ_dsa_with_SHA384="\x60\x86\x48\x01\x65\x03\x04\x03\x03"
+OBJ_dsa_with_SHA512="\x60\x86\x48\x01\x65\x03\x04\x03\x04"
+OBJ_dsa_with_SHA3_224="\x60\x86\x48\x01\x65\x03\x04\x03\x05"
+OBJ_dsa_with_SHA3_256="\x60\x86\x48\x01\x65\x03\x04\x03\x06"
+OBJ_dsa_with_SHA3_384="\x60\x86\x48\x01\x65\x03\x04\x03\x07"
+OBJ_dsa_with_SHA3_512="\x60\x86\x48\x01\x65\x03\x04\x03\x08"
+OBJ_ecdsa_with_SHA3_224="\x60\x86\x48\x01\x65\x03\x04\x03\x09"
+OBJ_ecdsa_with_SHA3_256="\x60\x86\x48\x01\x65\x03\x04\x03\x0A"
+OBJ_ecdsa_with_SHA3_384="\x60\x86\x48\x01\x65\x03\x04\x03\x0B"
+OBJ_ecdsa_with_SHA3_512="\x60\x86\x48\x01\x65\x03\x04\x03\x0C"
+OBJ_RSA_SHA3_224="\x60\x86\x48\x01\x65\x03\x04\x03\x0D"
+OBJ_RSA_SHA3_256="\x60\x86\x48\x01\x65\x03\x04\x03\x0E"
+OBJ_RSA_SHA3_384="\x60\x86\x48\x01\x65\x03\x04\x03\x0F"
+OBJ_RSA_SHA3_512="\x60\x86\x48\x01\x65\x03\x04\x03\x10"
+OBJ_aria_128_ccm="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x25"
+OBJ_aria_192_ccm="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x26"
+OBJ_aria_256_ccm="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x27"
+OBJ_aria_128_gcm="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x22"
+OBJ_aria_192_gcm="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x23"
+OBJ_aria_256_gcm="\x2A\x83\x1A\x8C\x9A\x6E\x01\x01\x24"
+OBJ_cmcCA="\x2B\x06\x01\x05\x05\x07\x03\x1B"
+OBJ_cmcRA="\x2B\x06\x01\x05\x05\x07\x03\x1C"
+OBJ_sm4_ecb="\x2A\x81\x1C\xCF\x55\x01\x68\x01"
+OBJ_sm4_cbc="\x2A\x81\x1C\xCF\x55\x01\x68\x02"
+OBJ_sm4_ofb128="\x2A\x81\x1C\xCF\x55\x01\x68\x03"
+OBJ_sm4_cfb1="\x2A\x81\x1C\xCF\x55\x01\x68\x05"
+OBJ_sm4_cfb128="\x2A\x81\x1C\xCF\x55\x01\x68\x04"
+OBJ_sm4_cfb8="\x2A\x81\x1C\xCF\x55\x01\x68\x06"
+OBJ_sm4_ctr="\x2A\x81\x1C\xCF\x55\x01\x68\x07"
+OBJ_ISO_CN="\x2A\x81\x1C"
+OBJ_oscca="\x2A\x81\x1C\xCF\x55"
+OBJ_sm_scheme="\x2A\x81\x1C\xCF\x55\x01"
+OBJ_sm3="\x2A\x81\x1C\xCF\x55\x01\x83\x11"
+OBJ_sm3WithRSAEncryption="\x2A\x81\x1C\xCF\x55\x01\x83\x78"
+OBJ_sha512_224WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0F"
+OBJ_sha512_256WithRSAEncryption="\x2A\x86\x48\x86\xF7\x0D\x01\x01\x10"
+OBJ_id_tc26_gost_3410_2012_256_constants="\x2A\x85\x03\x07\x01\x02\x01\x01"
+OBJ_id_tc26_gost_3410_2012_256_paramSetA="\x2A\x85\x03\x07\x01\x02\x01\x01\x01"
+OBJ_id_tc26_gost_3410_2012_512_paramSetC="\x2A\x85\x03\x07\x01\x02\x01\x02\x03"
+OBJ_ISO_UA="\x2A\x86\x24"
+OBJ_ua_pki="\x2A\x86\x24\x02\x01\x01\x01"
+OBJ_dstu28147="\x2A\x86\x24\x02\x01\x01\x01\x01\x01\x01"
+OBJ_dstu28147_ofb="\x2A\x86\x24\x02\x01\x01\x01\x01\x01\x01\x02"
+OBJ_dstu28147_cfb="\x2A\x86\x24\x02\x01\x01\x01\x01\x01\x01\x03"
+OBJ_dstu28147_wrap="\x2A\x86\x24\x02\x01\x01\x01\x01\x01\x01\x05"
+OBJ_hmacWithDstu34311="\x2A\x86\x24\x02\x01\x01\x01\x01\x01\x02"
+OBJ_dstu34311="\x2A\x86\x24\x02\x01\x01\x01\x01\x02\x01"
+OBJ_dstu4145le="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01"
+OBJ_dstu4145be="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x01\x01"
+OBJ_uacurve0="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x00"
+OBJ_uacurve1="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x01"
+OBJ_uacurve2="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x02"
+OBJ_uacurve3="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x03"
+OBJ_uacurve4="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x04"
+OBJ_uacurve5="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x05"
+OBJ_uacurve6="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x06"
+OBJ_uacurve7="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x07"
+OBJ_uacurve8="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x08"
+OBJ_uacurve9="\x2A\x86\x24\x02\x01\x01\x01\x01\x03\x01\x01\x02\x09"
+OBJ_ieee="\x2B\x6F"
+OBJ_ieee_siswg="\x2B\x6F\x02\x8C\x53"
+OBJ_sm2="\x2A\x81\x1C\xCF\x55\x01\x82\x2D"
+OBJ_id_tc26_cipher_gostr3412_2015_magma="\x2A\x85\x03\x07\x01\x01\x05\x01"
+OBJ_magma_ctr_acpkm="\x2A\x85\x03\x07\x01\x01\x05\x01\x01"
+OBJ_magma_ctr_acpkm_omac="\x2A\x85\x03\x07\x01\x01\x05\x01\x02"
+OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik="\x2A\x85\x03\x07\x01\x01\x05\x02"
+OBJ_kuznyechik_ctr_acpkm="\x2A\x85\x03\x07\x01\x01\x05\x02\x01"
+OBJ_kuznyechik_ctr_acpkm_omac="\x2A\x85\x03\x07\x01\x01\x05\x02\x02"
+OBJ_id_tc26_wrap="\x2A\x85\x03\x07\x01\x01\x07"
+OBJ_id_tc26_wrap_gostr3412_2015_magma="\x2A\x85\x03\x07\x01\x01\x07\x01"
+OBJ_magma_kexp15="\x2A\x85\x03\x07\x01\x01\x07\x01\x01"
+OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik="\x2A\x85\x03\x07\x01\x01\x07\x02"
+OBJ_kuznyechik_kexp15="\x2A\x85\x03\x07\x01\x01\x07\x02\x01"
+OBJ_id_tc26_gost_3410_2012_256_paramSetB="\x2A\x85\x03\x07\x01\x02\x01\x01\x02"
+OBJ_id_tc26_gost_3410_2012_256_paramSetC="\x2A\x85\x03\x07\x01\x02\x01\x01\x03"
+OBJ_id_tc26_gost_3410_2012_256_paramSetD="\x2A\x85\x03\x07\x01\x02\x01\x01\x04"
+OBJ_hmacWithSHA512_224="\x2A\x86\x48\x86\xF7\x0D\x02\x0C"
+OBJ_hmacWithSHA512_256="\x2A\x86\x48\x86\xF7\x0D\x02\x0D"
+OBJ_gmac="\x28\xCC\x45\x03\x04"
+OBJ_kmac128="\x60\x86\x48\x01\x65\x03\x04\x02\x13"
+OBJ_kmac256="\x60\x86\x48\x01\x65\x03\x04\x02\x14"
+OBJ_blake2bmac="\x2B\x06\x01\x04\x01\x8D\x3A\x0C\x02\x01"
+OBJ_blake2smac="\x2B\x06\x01\x04\x01\x8D\x3A\x0C\x02\x02"
+OBJ_SM2_with_SM3="\x2A\x81\x1C\xCF\x55\x01\x83\x75"
+OBJ_id_on_SmtpUTF8Mailbox="\x2B\x06\x01\x05\x05\x07\x08\x09"
+OBJ_XmppAddr="\x2B\x06\x01\x05\x05\x07\x08\x05"
+OBJ_SRVName="\x2B\x06\x01\x05\x05\x07\x08\x07"
+OBJ_NAIRealm="\x2B\x06\x01\x05\x05\x07\x08\x08"
+OBJ_cmcArchive="\x2B\x06\x01\x05\x05\x07\x03\x1D"
+OBJ_id_kp_bgpsec_router="\x2B\x06\x01\x05\x05\x07\x03\x1E"
+OBJ_id_kp_BrandIndicatorforMessageIdentification="\x2B\x06\x01\x05\x05\x07\x03\x1F"
+OBJ_cmKGA="\x2B\x06\x01\x05\x05\x07\x03\x20"
+OBJ_id_it_caCerts="\x2B\x06\x01\x05\x05\x07\x04\x11"
+OBJ_id_it_rootCaKeyUpdate="\x2B\x06\x01\x05\x05\x07\x04\x12"
+OBJ_id_it_certReqTemplate="\x2B\x06\x01\x05\x05\x07\x04\x13"
+OBJ_OGRNIP="\x2A\x85\x03\x64\x05"
+OBJ_classSignTool="\x2A\x85\x03\x64\x71"
+OBJ_classSignToolKC1="\x2A\x85\x03\x64\x71\x01"
+OBJ_classSignToolKC2="\x2A\x85\x03\x64\x71\x02"
+OBJ_classSignToolKC3="\x2A\x85\x03\x64\x71\x03"
+OBJ_classSignToolKB1="\x2A\x85\x03\x64\x71\x04"
+OBJ_classSignToolKB2="\x2A\x85\x03\x64\x71\x05"
+OBJ_classSignToolKA1="\x2A\x85\x03\x64\x71\x06"
+OBJ_id_ct_routeOriginAuthz="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x18"
+OBJ_id_ct_rpkiManifest="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x1A"
+OBJ_id_ct_rpkiGhostbusters="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x23"
+OBJ_id_ct_resourceTaggedAttest="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x24"
+OBJ_id_cp="\x2B\x06\x01\x05\x05\x07\x0E"
+OBJ_sbgp_ipAddrBlockv2="\x2B\x06\x01\x05\x05\x07\x01\x1C"
+OBJ_sbgp_autonomousSysNumv2="\x2B\x06\x01\x05\x05\x07\x01\x1D"
+OBJ_ipAddr_asNumber="\x2B\x06\x01\x05\x05\x07\x0E\x02"
+OBJ_ipAddr_asNumberv2="\x2B\x06\x01\x05\x05\x07\x0E\x03"
+OBJ_rpkiManifest="\x2B\x06\x01\x05\x05\x07\x30\x0A"
+OBJ_signedObject="\x2B\x06\x01\x05\x05\x07\x30\x0B"
+OBJ_rpkiNotify="\x2B\x06\x01\x05\x05\x07\x30\x0D"
+OBJ_id_ct_geofeedCSVwithCRLF="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x2F"
+OBJ_id_ct_signedChecklist="\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x01\x30"
diff --git a/fuzz/server.c b/fuzz/server.c
new file mode 100644
index 000000000000..e481e5621ce3
--- /dev/null
+++ b/fuzz/server.c
@@ -0,0 +1,659 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/* Shamelessly copied from BoringSSL and converted to C. */
+
+/* Test first part of SSL server handshake. */
+
+/* We need to use some deprecated APIs */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <time.h>
+#include <openssl/rand.h>
+#include <openssl/ssl.h>
+#include <openssl/rsa.h>
+#include <openssl/dsa.h>
+#include <openssl/ec.h>
+#include <openssl/dh.h>
+#include <openssl/err.h>
+#include "fuzzer.h"
+
+static const uint8_t kCertificateDER[] = {
+ 0x30, 0x82, 0x02, 0xff, 0x30, 0x82, 0x01, 0xe7, 0xa0, 0x03, 0x02, 0x01,
+ 0x02, 0x02, 0x11, 0x00, 0xb1, 0x84, 0xee, 0x34, 0x99, 0x98, 0x76, 0xfb,
+ 0x6f, 0xb2, 0x15, 0xc8, 0x47, 0x79, 0x05, 0x9b, 0x30, 0x0d, 0x06, 0x09,
+ 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30,
+ 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07,
+ 0x41, 0x63, 0x6d, 0x65, 0x20, 0x43, 0x6f, 0x30, 0x1e, 0x17, 0x0d, 0x31,
+ 0x35, 0x31, 0x31, 0x30, 0x37, 0x30, 0x30, 0x32, 0x34, 0x35, 0x36, 0x5a,
+ 0x17, 0x0d, 0x31, 0x36, 0x31, 0x31, 0x30, 0x36, 0x30, 0x30, 0x32, 0x34,
+ 0x35, 0x36, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
+ 0x04, 0x0a, 0x13, 0x07, 0x41, 0x63, 0x6d, 0x65, 0x20, 0x43, 0x6f, 0x30,
+ 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
+ 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30,
+ 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xce, 0x47, 0xcb, 0x11,
+ 0xbb, 0xd2, 0x9d, 0x8e, 0x9e, 0xd2, 0x1e, 0x14, 0xaf, 0xc7, 0xea, 0xb6,
+ 0xc9, 0x38, 0x2a, 0x6f, 0xb3, 0x7e, 0xfb, 0xbc, 0xfc, 0x59, 0x42, 0xb9,
+ 0x56, 0xf0, 0x4c, 0x3f, 0xf7, 0x31, 0x84, 0xbe, 0xac, 0x03, 0x9e, 0x71,
+ 0x91, 0x85, 0xd8, 0x32, 0xbd, 0x00, 0xea, 0xac, 0x65, 0xf6, 0x03, 0xc8,
+ 0x0f, 0x8b, 0xfd, 0x6e, 0x58, 0x88, 0x04, 0x41, 0x92, 0x74, 0xa6, 0x57,
+ 0x2e, 0x8e, 0x88, 0xd5, 0x3d, 0xda, 0x14, 0x3e, 0x63, 0x88, 0x22, 0xe3,
+ 0x53, 0xe9, 0xba, 0x39, 0x09, 0xac, 0xfb, 0xd0, 0x4c, 0xf2, 0x3c, 0x20,
+ 0xd6, 0x97, 0xe6, 0xed, 0xf1, 0x62, 0x1e, 0xe5, 0xc9, 0x48, 0xa0, 0xca,
+ 0x2e, 0x3c, 0x14, 0x5a, 0x82, 0xd4, 0xed, 0xb1, 0xe3, 0x43, 0xc1, 0x2a,
+ 0x59, 0xa5, 0xb9, 0xc8, 0x48, 0xa7, 0x39, 0x23, 0x74, 0xa7, 0x37, 0xb0,
+ 0x6f, 0xc3, 0x64, 0x99, 0x6c, 0xa2, 0x82, 0xc8, 0xf6, 0xdb, 0x86, 0x40,
+ 0xce, 0xd1, 0x85, 0x9f, 0xce, 0x69, 0xf4, 0x15, 0x2a, 0x23, 0xca, 0xea,
+ 0xb7, 0x7b, 0xdf, 0xfb, 0x43, 0x5f, 0xff, 0x7a, 0x49, 0x49, 0x0e, 0xe7,
+ 0x02, 0x51, 0x45, 0x13, 0xe8, 0x90, 0x64, 0x21, 0x0c, 0x26, 0x2b, 0x5d,
+ 0xfc, 0xe4, 0xb5, 0x86, 0x89, 0x43, 0x22, 0x4c, 0xf3, 0x3b, 0xf3, 0x09,
+ 0xc4, 0xa4, 0x10, 0x80, 0xf2, 0x46, 0xe2, 0x46, 0x8f, 0x76, 0x50, 0xbf,
+ 0xaf, 0x2b, 0x90, 0x1b, 0x78, 0xc7, 0xcf, 0xc1, 0x77, 0xd0, 0xfb, 0xa9,
+ 0xfb, 0xc9, 0x66, 0x5a, 0xc5, 0x9b, 0x31, 0x41, 0x67, 0x01, 0xbe, 0x33,
+ 0x10, 0xba, 0x05, 0x58, 0xed, 0x76, 0x53, 0xde, 0x5d, 0xc1, 0xe8, 0xbb,
+ 0x9f, 0xf1, 0xcd, 0xfb, 0xdf, 0x64, 0x7f, 0xd7, 0x18, 0xab, 0x0f, 0x94,
+ 0x28, 0x95, 0x4a, 0xcc, 0x6a, 0xa9, 0x50, 0xc7, 0x05, 0x47, 0x10, 0x41,
+ 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x0e, 0x06,
+ 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05,
+ 0xa0, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x0c, 0x30, 0x0a,
+ 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x0c,
+ 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00,
+ 0x30, 0x19, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x12, 0x30, 0x10, 0x82,
+ 0x0e, 0x66, 0x75, 0x7a, 0x7a, 0x2e, 0x62, 0x6f, 0x72, 0x69, 0x6e, 0x67,
+ 0x73, 0x73, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
+ 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x92,
+ 0xde, 0xef, 0x96, 0x06, 0x7b, 0xff, 0x71, 0x7d, 0x4e, 0xa0, 0x7d, 0xae,
+ 0xb8, 0x22, 0xb4, 0x2c, 0xf7, 0x96, 0x9c, 0x37, 0x1d, 0x8f, 0xe7, 0xd9,
+ 0x47, 0xff, 0x3f, 0xe9, 0x35, 0x95, 0x0e, 0xdd, 0xdc, 0x7f, 0xc8, 0x8a,
+ 0x1e, 0x36, 0x1d, 0x38, 0x47, 0xfc, 0x76, 0xd2, 0x1f, 0x98, 0xa1, 0x36,
+ 0xac, 0xc8, 0x70, 0x38, 0x0a, 0x3d, 0x51, 0x8d, 0x0f, 0x03, 0x1b, 0xef,
+ 0x62, 0xa1, 0xcb, 0x2b, 0x4a, 0x8c, 0x12, 0x2b, 0x54, 0x50, 0x9a, 0x6b,
+ 0xfe, 0xaf, 0xd9, 0xf6, 0xbf, 0x58, 0x11, 0x58, 0x5e, 0xe5, 0x86, 0x1e,
+ 0x3b, 0x6b, 0x30, 0x7e, 0x72, 0x89, 0xe8, 0x6b, 0x7b, 0xb7, 0xaf, 0xef,
+ 0x8b, 0xa9, 0x3e, 0xb0, 0xcd, 0x0b, 0xef, 0xb0, 0x0c, 0x96, 0x2b, 0xc5,
+ 0x3b, 0xd5, 0xf1, 0xc2, 0xae, 0x3a, 0x60, 0xd9, 0x0f, 0x75, 0x37, 0x55,
+ 0x4d, 0x62, 0xd2, 0xed, 0x96, 0xac, 0x30, 0x6b, 0xda, 0xa1, 0x48, 0x17,
+ 0x96, 0x23, 0x85, 0x9a, 0x57, 0x77, 0xe9, 0x22, 0xa2, 0x37, 0x03, 0xba,
+ 0x49, 0x77, 0x40, 0x3b, 0x76, 0x4b, 0xda, 0xc1, 0x04, 0x57, 0x55, 0x34,
+ 0x22, 0x83, 0x45, 0x29, 0xab, 0x2e, 0x11, 0xff, 0x0d, 0xab, 0x55, 0xb1,
+ 0xa7, 0x58, 0x59, 0x05, 0x25, 0xf9, 0x1e, 0x3d, 0xb7, 0xac, 0x04, 0x39,
+ 0x2c, 0xf9, 0xaf, 0xb8, 0x68, 0xfb, 0x8e, 0x35, 0x71, 0x32, 0xff, 0x70,
+ 0xe9, 0x46, 0x6d, 0x5c, 0x06, 0x90, 0x88, 0x23, 0x48, 0x0c, 0x50, 0xeb,
+ 0x0a, 0xa9, 0xae, 0xe8, 0xfc, 0xbe, 0xa5, 0x76, 0x94, 0xd7, 0x64, 0x22,
+ 0x38, 0x98, 0x17, 0xa4, 0x3a, 0xa7, 0x59, 0x9f, 0x1d, 0x3b, 0x75, 0x90,
+ 0x1a, 0x81, 0xef, 0x19, 0xfb, 0x2b, 0xb7, 0xa7, 0x64, 0x61, 0x22, 0xa4,
+ 0x6f, 0x7b, 0xfa, 0x58, 0xbb, 0x8c, 0x4e, 0x77, 0x67, 0xd0, 0x5d, 0x58,
+ 0x76, 0x8a, 0xbb,
+};
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+static const uint8_t kRSAPrivateKeyDER[] = {
+ 0x30, 0x82, 0x04, 0xa5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
+ 0xce, 0x47, 0xcb, 0x11, 0xbb, 0xd2, 0x9d, 0x8e, 0x9e, 0xd2, 0x1e, 0x14,
+ 0xaf, 0xc7, 0xea, 0xb6, 0xc9, 0x38, 0x2a, 0x6f, 0xb3, 0x7e, 0xfb, 0xbc,
+ 0xfc, 0x59, 0x42, 0xb9, 0x56, 0xf0, 0x4c, 0x3f, 0xf7, 0x31, 0x84, 0xbe,
+ 0xac, 0x03, 0x9e, 0x71, 0x91, 0x85, 0xd8, 0x32, 0xbd, 0x00, 0xea, 0xac,
+ 0x65, 0xf6, 0x03, 0xc8, 0x0f, 0x8b, 0xfd, 0x6e, 0x58, 0x88, 0x04, 0x41,
+ 0x92, 0x74, 0xa6, 0x57, 0x2e, 0x8e, 0x88, 0xd5, 0x3d, 0xda, 0x14, 0x3e,
+ 0x63, 0x88, 0x22, 0xe3, 0x53, 0xe9, 0xba, 0x39, 0x09, 0xac, 0xfb, 0xd0,
+ 0x4c, 0xf2, 0x3c, 0x20, 0xd6, 0x97, 0xe6, 0xed, 0xf1, 0x62, 0x1e, 0xe5,
+ 0xc9, 0x48, 0xa0, 0xca, 0x2e, 0x3c, 0x14, 0x5a, 0x82, 0xd4, 0xed, 0xb1,
+ 0xe3, 0x43, 0xc1, 0x2a, 0x59, 0xa5, 0xb9, 0xc8, 0x48, 0xa7, 0x39, 0x23,
+ 0x74, 0xa7, 0x37, 0xb0, 0x6f, 0xc3, 0x64, 0x99, 0x6c, 0xa2, 0x82, 0xc8,
+ 0xf6, 0xdb, 0x86, 0x40, 0xce, 0xd1, 0x85, 0x9f, 0xce, 0x69, 0xf4, 0x15,
+ 0x2a, 0x23, 0xca, 0xea, 0xb7, 0x7b, 0xdf, 0xfb, 0x43, 0x5f, 0xff, 0x7a,
+ 0x49, 0x49, 0x0e, 0xe7, 0x02, 0x51, 0x45, 0x13, 0xe8, 0x90, 0x64, 0x21,
+ 0x0c, 0x26, 0x2b, 0x5d, 0xfc, 0xe4, 0xb5, 0x86, 0x89, 0x43, 0x22, 0x4c,
+ 0xf3, 0x3b, 0xf3, 0x09, 0xc4, 0xa4, 0x10, 0x80, 0xf2, 0x46, 0xe2, 0x46,
+ 0x8f, 0x76, 0x50, 0xbf, 0xaf, 0x2b, 0x90, 0x1b, 0x78, 0xc7, 0xcf, 0xc1,
+ 0x77, 0xd0, 0xfb, 0xa9, 0xfb, 0xc9, 0x66, 0x5a, 0xc5, 0x9b, 0x31, 0x41,
+ 0x67, 0x01, 0xbe, 0x33, 0x10, 0xba, 0x05, 0x58, 0xed, 0x76, 0x53, 0xde,
+ 0x5d, 0xc1, 0xe8, 0xbb, 0x9f, 0xf1, 0xcd, 0xfb, 0xdf, 0x64, 0x7f, 0xd7,
+ 0x18, 0xab, 0x0f, 0x94, 0x28, 0x95, 0x4a, 0xcc, 0x6a, 0xa9, 0x50, 0xc7,
+ 0x05, 0x47, 0x10, 0x41, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
+ 0x01, 0x00, 0xa8, 0x47, 0xb9, 0x4a, 0x06, 0x47, 0x93, 0x71, 0x3d, 0xef,
+ 0x7b, 0xca, 0xb4, 0x7c, 0x0a, 0xe6, 0x82, 0xd0, 0xe7, 0x0d, 0xa9, 0x08,
+ 0xf6, 0xa4, 0xfd, 0xd8, 0x73, 0xae, 0x6f, 0x56, 0x29, 0x5e, 0x25, 0x72,
+ 0xa8, 0x30, 0x44, 0x73, 0xcf, 0x56, 0x26, 0xb9, 0x61, 0xde, 0x42, 0x81,
+ 0xf4, 0xf0, 0x1f, 0x5d, 0xcb, 0x47, 0xf2, 0x26, 0xe9, 0xe0, 0x93, 0x28,
+ 0xa3, 0x10, 0x3b, 0x42, 0x1e, 0x51, 0x11, 0x12, 0x06, 0x5e, 0xaf, 0xce,
+ 0xb0, 0xa5, 0x14, 0xdd, 0x82, 0x58, 0xa1, 0xa4, 0x12, 0xdf, 0x65, 0x1d,
+ 0x51, 0x70, 0x64, 0xd5, 0x58, 0x68, 0x11, 0xa8, 0x6a, 0x23, 0xc2, 0xbf,
+ 0xa1, 0x25, 0x24, 0x47, 0xb3, 0xa4, 0x3c, 0x83, 0x96, 0xb7, 0x1f, 0xf4,
+ 0x44, 0xd4, 0xd1, 0xe9, 0xfc, 0x33, 0x68, 0x5e, 0xe2, 0x68, 0x99, 0x9c,
+ 0x91, 0xe8, 0x72, 0xc9, 0xd7, 0x8c, 0x80, 0x20, 0x8e, 0x77, 0x83, 0x4d,
+ 0xe4, 0xab, 0xf9, 0x74, 0xa1, 0xdf, 0xd3, 0xc0, 0x0d, 0x5b, 0x05, 0x51,
+ 0xc2, 0x6f, 0xb2, 0x91, 0x02, 0xec, 0xc0, 0x02, 0x1a, 0x5c, 0x91, 0x05,
+ 0xf1, 0xe3, 0xfa, 0x65, 0xc2, 0xad, 0x24, 0xe6, 0xe5, 0x3c, 0xb6, 0x16,
+ 0xf1, 0xa1, 0x67, 0x1a, 0x9d, 0x37, 0x56, 0xbf, 0x01, 0xd7, 0x3b, 0x35,
+ 0x30, 0x57, 0x73, 0xf4, 0xf0, 0x5e, 0xa7, 0xe8, 0x0a, 0xc1, 0x94, 0x17,
+ 0xcf, 0x0a, 0xbd, 0xf5, 0x31, 0xa7, 0x2d, 0xf7, 0xf5, 0xd9, 0x8c, 0xc2,
+ 0x01, 0xbd, 0xda, 0x16, 0x8e, 0xb9, 0x30, 0x40, 0xa6, 0x6e, 0xbd, 0xcd,
+ 0x4d, 0x84, 0x67, 0x4e, 0x0b, 0xce, 0xd5, 0xef, 0xf8, 0x08, 0x63, 0x02,
+ 0xc6, 0xc7, 0xf7, 0x67, 0x92, 0xe2, 0x23, 0x9d, 0x27, 0x22, 0x1d, 0xc6,
+ 0x67, 0x5e, 0x66, 0xbf, 0x03, 0xb8, 0xa9, 0x67, 0xd4, 0x39, 0xd8, 0x75,
+ 0xfa, 0xe8, 0xed, 0x56, 0xb8, 0x81, 0x02, 0x81, 0x81, 0x00, 0xf7, 0x46,
+ 0x68, 0xc6, 0x13, 0xf8, 0xba, 0x0f, 0x83, 0xdb, 0x05, 0xa8, 0x25, 0x00,
+ 0x70, 0x9c, 0x9e, 0x8b, 0x12, 0x34, 0x0d, 0x96, 0xcf, 0x0d, 0x98, 0x9b,
+ 0x8d, 0x9c, 0x96, 0x78, 0xd1, 0x3c, 0x01, 0x8c, 0xb9, 0x35, 0x5c, 0x20,
+ 0x42, 0xb4, 0x38, 0xe3, 0xd6, 0x54, 0xe7, 0x55, 0xd6, 0x26, 0x8a, 0x0c,
+ 0xf6, 0x1f, 0xe0, 0x04, 0xc1, 0x22, 0x42, 0x19, 0x61, 0xc4, 0x94, 0x7c,
+ 0x07, 0x2e, 0x80, 0x52, 0xfe, 0x8d, 0xe6, 0x92, 0x3a, 0x91, 0xfe, 0x72,
+ 0x99, 0xe1, 0x2a, 0x73, 0x76, 0xb1, 0x24, 0x20, 0x67, 0xde, 0x28, 0xcb,
+ 0x0e, 0xe6, 0x52, 0xb5, 0xfa, 0xfb, 0x8b, 0x1e, 0x6a, 0x1d, 0x09, 0x26,
+ 0xb9, 0xa7, 0x61, 0xba, 0xf8, 0x79, 0xd2, 0x66, 0x57, 0x28, 0xd7, 0x31,
+ 0xb5, 0x0b, 0x27, 0x19, 0x1e, 0x6f, 0x46, 0xfc, 0x54, 0x95, 0xeb, 0x78,
+ 0x01, 0xb6, 0xd9, 0x79, 0x5a, 0x4d, 0x02, 0x81, 0x81, 0x00, 0xd5, 0x8f,
+ 0x16, 0x53, 0x2f, 0x57, 0x93, 0xbf, 0x09, 0x75, 0xbf, 0x63, 0x40, 0x3d,
+ 0x27, 0xfd, 0x23, 0x21, 0xde, 0x9b, 0xe9, 0x73, 0x3f, 0x49, 0x02, 0xd2,
+ 0x38, 0x96, 0xcf, 0xc3, 0xba, 0x92, 0x07, 0x87, 0x52, 0xa9, 0x35, 0xe3,
+ 0x0c, 0xe4, 0x2f, 0x05, 0x7b, 0x37, 0xa5, 0x40, 0x9c, 0x3b, 0x94, 0xf7,
+ 0xad, 0xa0, 0xee, 0x3a, 0xa8, 0xfb, 0x1f, 0x11, 0x1f, 0xd8, 0x9a, 0x80,
+ 0x42, 0x3d, 0x7f, 0xa4, 0xb8, 0x9a, 0xaa, 0xea, 0x72, 0xc1, 0xe3, 0xed,
+ 0x06, 0x60, 0x92, 0x37, 0xf9, 0xba, 0xfb, 0x9e, 0xed, 0x05, 0xa6, 0xd4,
+ 0x72, 0x68, 0x4f, 0x63, 0xfe, 0xd6, 0x10, 0x0d, 0x4f, 0x0a, 0x93, 0xc6,
+ 0xb9, 0xd7, 0xaf, 0xfd, 0xd9, 0x57, 0x7d, 0xcb, 0x75, 0xe8, 0x93, 0x2b,
+ 0xae, 0x4f, 0xea, 0xd7, 0x30, 0x0b, 0x58, 0x44, 0x82, 0x0f, 0x84, 0x5d,
+ 0x62, 0x11, 0x78, 0xea, 0x5f, 0xc5, 0x02, 0x81, 0x81, 0x00, 0x82, 0x0c,
+ 0xc1, 0xe6, 0x0b, 0x72, 0xf1, 0x48, 0x5f, 0xac, 0xbd, 0x98, 0xe5, 0x7d,
+ 0x09, 0xbd, 0x15, 0x95, 0x47, 0x09, 0xa1, 0x6c, 0x03, 0x91, 0xbf, 0x05,
+ 0x70, 0xc1, 0x3e, 0x52, 0x64, 0x99, 0x0e, 0xa7, 0x98, 0x70, 0xfb, 0xf6,
+ 0xeb, 0x9e, 0x25, 0x9d, 0x8e, 0x88, 0x30, 0xf2, 0xf0, 0x22, 0x6c, 0xd0,
+ 0xcc, 0x51, 0x8f, 0x5c, 0x70, 0xc7, 0x37, 0xc4, 0x69, 0xab, 0x1d, 0xfc,
+ 0xed, 0x3a, 0x03, 0xbb, 0xa2, 0xad, 0xb6, 0xea, 0x89, 0x6b, 0x67, 0x4b,
+ 0x96, 0xaa, 0xd9, 0xcc, 0xc8, 0x4b, 0xfa, 0x18, 0x21, 0x08, 0xb2, 0xa3,
+ 0xb9, 0x3e, 0x61, 0x99, 0xdc, 0x5a, 0x97, 0x9c, 0x73, 0x6a, 0xb9, 0xf9,
+ 0x68, 0x03, 0x24, 0x5f, 0x55, 0x77, 0x9c, 0xb4, 0xbe, 0x7a, 0x78, 0x53,
+ 0x68, 0x48, 0x69, 0x53, 0xc8, 0xb1, 0xf5, 0xbf, 0x98, 0x2d, 0x11, 0x1e,
+ 0x98, 0xa8, 0x36, 0x50, 0xa0, 0xb1, 0x02, 0x81, 0x81, 0x00, 0x90, 0x88,
+ 0x30, 0x71, 0xc7, 0xfe, 0x9b, 0x6d, 0x95, 0x37, 0x6d, 0x79, 0xfc, 0x85,
+ 0xe7, 0x44, 0x78, 0xbc, 0x79, 0x6e, 0x47, 0x86, 0xc9, 0xf3, 0xdd, 0xc6,
+ 0xec, 0xa9, 0x94, 0x9f, 0x40, 0xeb, 0x87, 0xd0, 0xdb, 0xee, 0xcd, 0x1b,
+ 0x87, 0x23, 0xff, 0x76, 0xd4, 0x37, 0x8a, 0xcd, 0xb9, 0x6e, 0xd1, 0x98,
+ 0xf6, 0x97, 0x8d, 0xe3, 0x81, 0x6d, 0xc3, 0x4e, 0xd1, 0xa0, 0xc4, 0x9f,
+ 0xbd, 0x34, 0xe5, 0xe8, 0x53, 0x4f, 0xca, 0x10, 0xb5, 0xed, 0xe7, 0x16,
+ 0x09, 0x54, 0xde, 0x60, 0xa7, 0xd1, 0x16, 0x6e, 0x2e, 0xb7, 0xbe, 0x7a,
+ 0xd5, 0x9b, 0x26, 0xef, 0xe4, 0x0e, 0x77, 0xfa, 0xa9, 0xdd, 0xdc, 0xb9,
+ 0x88, 0x19, 0x23, 0x70, 0xc7, 0xe1, 0x60, 0xaf, 0x8c, 0x73, 0x04, 0xf7,
+ 0x71, 0x17, 0x81, 0x36, 0x75, 0xbb, 0x97, 0xd7, 0x75, 0xb6, 0x8e, 0xbc,
+ 0xac, 0x9c, 0x6a, 0x9b, 0x24, 0x89, 0x02, 0x81, 0x80, 0x5a, 0x2b, 0xc7,
+ 0x6b, 0x8c, 0x65, 0xdb, 0x04, 0x73, 0xab, 0x25, 0xe1, 0x5b, 0xbc, 0x3c,
+ 0xcf, 0x5a, 0x3c, 0x04, 0xae, 0x97, 0x2e, 0xfd, 0xa4, 0x97, 0x1f, 0x05,
+ 0x17, 0x27, 0xac, 0x7c, 0x30, 0x85, 0xb4, 0x82, 0x3f, 0x5b, 0xb7, 0x94,
+ 0x3b, 0x7f, 0x6c, 0x0c, 0xc7, 0x16, 0xc6, 0xa0, 0xbd, 0x80, 0xb0, 0x81,
+ 0xde, 0xa0, 0x23, 0xa6, 0xf6, 0x75, 0x33, 0x51, 0x35, 0xa2, 0x75, 0x55,
+ 0x70, 0x4d, 0x42, 0xbb, 0xcf, 0x54, 0xe4, 0xdb, 0x2d, 0x88, 0xa0, 0x7a,
+ 0xf2, 0x17, 0xa7, 0xdd, 0x13, 0x44, 0x9f, 0x5f, 0x6b, 0x2c, 0x42, 0x42,
+ 0x8b, 0x13, 0x4d, 0xf9, 0x5b, 0xf8, 0x33, 0x42, 0xd9, 0x9e, 0x50, 0x1c,
+ 0x7c, 0xbc, 0xfa, 0x62, 0x85, 0x0b, 0xcf, 0x99, 0xda, 0x9e, 0x04, 0x90,
+ 0xb2, 0xc6, 0xb2, 0x0a, 0x2a, 0x7c, 0x6d, 0x6a, 0x40, 0xfc, 0xf5, 0x50,
+ 0x98, 0x46, 0x89, 0x82, 0x40,
+};
+#endif
+
+#ifndef OPENSSL_NO_EC
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+/*
+ * -----BEGIN EC PRIVATE KEY-----
+ * MHcCAQEEIJLyl7hJjpQL/RhP1x2zS79xdiPJQB683gWeqcqHPeZkoAoGCCqGSM49
+ * AwEHoUQDQgAEdsjygVYjjaKBF4CNECVllNf017p5/MxNSWDoTHy9I2GeDwEDDazI
+ * D/xy8JiYjtPKVE/Zqwbmivp2UwtH28a7NQ==
+ * -----END EC PRIVATE KEY-----
+ */
+static const char ECDSAPrivateKeyPEM[] = {
+ 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x45,
+ 0x43, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b, 0x45,
+ 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x48, 0x63, 0x43, 0x41,
+ 0x51, 0x45, 0x45, 0x49, 0x4a, 0x4c, 0x79, 0x6c, 0x37, 0x68, 0x4a, 0x6a,
+ 0x70, 0x51, 0x4c, 0x2f, 0x52, 0x68, 0x50, 0x31, 0x78, 0x32, 0x7a, 0x53,
+ 0x37, 0x39, 0x78, 0x64, 0x69, 0x50, 0x4a, 0x51, 0x42, 0x36, 0x38, 0x33,
+ 0x67, 0x57, 0x65, 0x71, 0x63, 0x71, 0x48, 0x50, 0x65, 0x5a, 0x6b, 0x6f,
+ 0x41, 0x6f, 0x47, 0x43, 0x43, 0x71, 0x47, 0x53, 0x4d, 0x34, 0x39, 0x0a,
+ 0x41, 0x77, 0x45, 0x48, 0x6f, 0x55, 0x51, 0x44, 0x51, 0x67, 0x41, 0x45,
+ 0x64, 0x73, 0x6a, 0x79, 0x67, 0x56, 0x59, 0x6a, 0x6a, 0x61, 0x4b, 0x42,
+ 0x46, 0x34, 0x43, 0x4e, 0x45, 0x43, 0x56, 0x6c, 0x6c, 0x4e, 0x66, 0x30,
+ 0x31, 0x37, 0x70, 0x35, 0x2f, 0x4d, 0x78, 0x4e, 0x53, 0x57, 0x44, 0x6f,
+ 0x54, 0x48, 0x79, 0x39, 0x49, 0x32, 0x47, 0x65, 0x44, 0x77, 0x45, 0x44,
+ 0x44, 0x61, 0x7a, 0x49, 0x0a, 0x44, 0x2f, 0x78, 0x79, 0x38, 0x4a, 0x69,
+ 0x59, 0x6a, 0x74, 0x50, 0x4b, 0x56, 0x45, 0x2f, 0x5a, 0x71, 0x77, 0x62,
+ 0x6d, 0x69, 0x76, 0x70, 0x32, 0x55, 0x77, 0x74, 0x48, 0x32, 0x38, 0x61,
+ 0x37, 0x4e, 0x51, 0x3d, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45,
+ 0x4e, 0x44, 0x20, 0x45, 0x43, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54,
+ 0x45, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a
+};
+# endif
+
+/*
+ * -----BEGIN CERTIFICATE-----
+ * MIIBXzCCAQagAwIBAgIJAK6/Yvf/ain6MAoGCCqGSM49BAMCMBIxEDAOBgNVBAoM
+ * B0FjbWUgQ28wHhcNMTYxMjI1MTEzOTI3WhcNMjYxMjI1MTEzOTI3WjASMRAwDgYD
+ * VQQKDAdBY21lIENvMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdsjygVYjjaKB
+ * F4CNECVllNf017p5/MxNSWDoTHy9I2GeDwEDDazID/xy8JiYjtPKVE/Zqwbmivp2
+ * UwtH28a7NaNFMEMwCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwEwYDVR0lBAwwCgYI
+ * KwYBBQUHAwEwFAYDVR0RBA0wC4IJbG9jYWxob3N0MAoGCCqGSM49BAMCA0cAMEQC
+ * IEzr3t/jejVE9oSnBp8c3P2p+lDLVRrB8zxLyjZvirUXAiAyQPaE9MNcL8/nRpuu
+ * 99I1enCSmWIAJ57IwuJ/n1d45Q==
+ * -----END CERTIFICATE-----
+ */
+static const char ECDSACertPEM[] = {
+ 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43,
+ 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d,
+ 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x42, 0x58, 0x7a, 0x43, 0x43,
+ 0x41, 0x51, 0x61, 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x4a,
+ 0x41, 0x4b, 0x36, 0x2f, 0x59, 0x76, 0x66, 0x2f, 0x61, 0x69, 0x6e, 0x36,
+ 0x4d, 0x41, 0x6f, 0x47, 0x43, 0x43, 0x71, 0x47, 0x53, 0x4d, 0x34, 0x39,
+ 0x42, 0x41, 0x4d, 0x43, 0x4d, 0x42, 0x49, 0x78, 0x45, 0x44, 0x41, 0x4f,
+ 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x6f, 0x4d, 0x0a, 0x42, 0x30, 0x46,
+ 0x6a, 0x62, 0x57, 0x55, 0x67, 0x51, 0x32, 0x38, 0x77, 0x48, 0x68, 0x63,
+ 0x4e, 0x4d, 0x54, 0x59, 0x78, 0x4d, 0x6a, 0x49, 0x31, 0x4d, 0x54, 0x45,
+ 0x7a, 0x4f, 0x54, 0x49, 0x33, 0x57, 0x68, 0x63, 0x4e, 0x4d, 0x6a, 0x59,
+ 0x78, 0x4d, 0x6a, 0x49, 0x31, 0x4d, 0x54, 0x45, 0x7a, 0x4f, 0x54, 0x49,
+ 0x33, 0x57, 0x6a, 0x41, 0x53, 0x4d, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59,
+ 0x44, 0x0a, 0x56, 0x51, 0x51, 0x4b, 0x44, 0x41, 0x64, 0x42, 0x59, 0x32,
+ 0x31, 0x6c, 0x49, 0x45, 0x4e, 0x76, 0x4d, 0x46, 0x6b, 0x77, 0x45, 0x77,
+ 0x59, 0x48, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x43, 0x41, 0x51,
+ 0x59, 0x49, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x44, 0x41, 0x51,
+ 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x64, 0x73, 0x6a, 0x79, 0x67, 0x56,
+ 0x59, 0x6a, 0x6a, 0x61, 0x4b, 0x42, 0x0a, 0x46, 0x34, 0x43, 0x4e, 0x45,
+ 0x43, 0x56, 0x6c, 0x6c, 0x4e, 0x66, 0x30, 0x31, 0x37, 0x70, 0x35, 0x2f,
+ 0x4d, 0x78, 0x4e, 0x53, 0x57, 0x44, 0x6f, 0x54, 0x48, 0x79, 0x39, 0x49,
+ 0x32, 0x47, 0x65, 0x44, 0x77, 0x45, 0x44, 0x44, 0x61, 0x7a, 0x49, 0x44,
+ 0x2f, 0x78, 0x79, 0x38, 0x4a, 0x69, 0x59, 0x6a, 0x74, 0x50, 0x4b, 0x56,
+ 0x45, 0x2f, 0x5a, 0x71, 0x77, 0x62, 0x6d, 0x69, 0x76, 0x70, 0x32, 0x0a,
+ 0x55, 0x77, 0x74, 0x48, 0x32, 0x38, 0x61, 0x37, 0x4e, 0x61, 0x4e, 0x46,
+ 0x4d, 0x45, 0x4d, 0x77, 0x43, 0x51, 0x59, 0x44, 0x56, 0x52, 0x30, 0x54,
+ 0x42, 0x41, 0x49, 0x77, 0x41, 0x44, 0x41, 0x4c, 0x42, 0x67, 0x4e, 0x56,
+ 0x48, 0x51, 0x38, 0x45, 0x42, 0x41, 0x4d, 0x43, 0x42, 0x61, 0x41, 0x77,
+ 0x45, 0x77, 0x59, 0x44, 0x56, 0x52, 0x30, 0x6c, 0x42, 0x41, 0x77, 0x77,
+ 0x43, 0x67, 0x59, 0x49, 0x0a, 0x4b, 0x77, 0x59, 0x42, 0x42, 0x51, 0x55,
+ 0x48, 0x41, 0x77, 0x45, 0x77, 0x46, 0x41, 0x59, 0x44, 0x56, 0x52, 0x30,
+ 0x52, 0x42, 0x41, 0x30, 0x77, 0x43, 0x34, 0x49, 0x4a, 0x62, 0x47, 0x39,
+ 0x6a, 0x59, 0x57, 0x78, 0x6f, 0x62, 0x33, 0x4e, 0x30, 0x4d, 0x41, 0x6f,
+ 0x47, 0x43, 0x43, 0x71, 0x47, 0x53, 0x4d, 0x34, 0x39, 0x42, 0x41, 0x4d,
+ 0x43, 0x41, 0x30, 0x63, 0x41, 0x4d, 0x45, 0x51, 0x43, 0x0a, 0x49, 0x45,
+ 0x7a, 0x72, 0x33, 0x74, 0x2f, 0x6a, 0x65, 0x6a, 0x56, 0x45, 0x39, 0x6f,
+ 0x53, 0x6e, 0x42, 0x70, 0x38, 0x63, 0x33, 0x50, 0x32, 0x70, 0x2b, 0x6c,
+ 0x44, 0x4c, 0x56, 0x52, 0x72, 0x42, 0x38, 0x7a, 0x78, 0x4c, 0x79, 0x6a,
+ 0x5a, 0x76, 0x69, 0x72, 0x55, 0x58, 0x41, 0x69, 0x41, 0x79, 0x51, 0x50,
+ 0x61, 0x45, 0x39, 0x4d, 0x4e, 0x63, 0x4c, 0x38, 0x2f, 0x6e, 0x52, 0x70,
+ 0x75, 0x75, 0x0a, 0x39, 0x39, 0x49, 0x31, 0x65, 0x6e, 0x43, 0x53, 0x6d,
+ 0x57, 0x49, 0x41, 0x4a, 0x35, 0x37, 0x49, 0x77, 0x75, 0x4a, 0x2f, 0x6e,
+ 0x31, 0x64, 0x34, 0x35, 0x51, 0x3d, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d,
+ 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49,
+ 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a
+};
+#endif
+
+#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0)
+/*
+ * -----BEGIN DSA PRIVATE KEY-----
+ * MIIBuwIBAAKBgQDdkFKzNABLOha7Eqj7004+p5fhtR6bxpujToMmSZTYi8igVVXP
+ * Wzf03ULKS5UKjA6WpR6EiZAhm+PdxusZ5xfAuRZLdKy0bgxn1f348Rwh+EQNaEM8
+ * 0TGcnw5ijwKmSw5yyHPDWdiHzoqEBlhAf8Nl22YTXax/clsc/pu/RRLAdwIVAIEg
+ * QqWRf/1EIZZcgM65Qpd65YuxAoGBAKBauV/RuloFHoSy5iWXESDywiS380tN5974
+ * GukGwoYdZo5uSIH6ahpeNSef0MbHGAzr7ZVEnhCQfRAwH1gRvSHoq/Rbmcvtd3r+
+ * QtQHOwvQHgLAynhI4i73c794czHaR+439bmcaSwDnQduRM85Mho/jiiZzAVPxBmG
+ * POIMWNXXAoGAI6Ep5IE7yn3JzkXO9B6tC3bbDM+ZzuuInwZLbtZ8lim7Dsqabg4k
+ * 2YbE4R95Bnfwnjsyl80mq/DbQN5lAHBvjDrkC6ItojBGKI3+iIrqGUEJdxvl4ulj
+ * F0PmSD7zvIG8BfocKOel+EHH0YryExiW6krV1KW2ZRmJrqSFw6KCjV0CFFQFbPfU
+ * xy5PmKytJmXR8BmppkIO
+ * -----END DSA PRIVATE KEY-----
+ */
+static const char DSAPrivateKeyPEM[] = {
+ 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x44,
+ 0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b,
+ 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x42,
+ 0x75, 0x77, 0x49, 0x42, 0x41, 0x41, 0x4b, 0x42, 0x67, 0x51, 0x44, 0x64,
+ 0x6b, 0x46, 0x4b, 0x7a, 0x4e, 0x41, 0x42, 0x4c, 0x4f, 0x68, 0x61, 0x37,
+ 0x45, 0x71, 0x6a, 0x37, 0x30, 0x30, 0x34, 0x2b, 0x70, 0x35, 0x66, 0x68,
+ 0x74, 0x52, 0x36, 0x62, 0x78, 0x70, 0x75, 0x6a, 0x54, 0x6f, 0x4d, 0x6d,
+ 0x53, 0x5a, 0x54, 0x59, 0x69, 0x38, 0x69, 0x67, 0x56, 0x56, 0x58, 0x50,
+ 0x0a, 0x57, 0x7a, 0x66, 0x30, 0x33, 0x55, 0x4c, 0x4b, 0x53, 0x35, 0x55,
+ 0x4b, 0x6a, 0x41, 0x36, 0x57, 0x70, 0x52, 0x36, 0x45, 0x69, 0x5a, 0x41,
+ 0x68, 0x6d, 0x2b, 0x50, 0x64, 0x78, 0x75, 0x73, 0x5a, 0x35, 0x78, 0x66,
+ 0x41, 0x75, 0x52, 0x5a, 0x4c, 0x64, 0x4b, 0x79, 0x30, 0x62, 0x67, 0x78,
+ 0x6e, 0x31, 0x66, 0x33, 0x34, 0x38, 0x52, 0x77, 0x68, 0x2b, 0x45, 0x51,
+ 0x4e, 0x61, 0x45, 0x4d, 0x38, 0x0a, 0x30, 0x54, 0x47, 0x63, 0x6e, 0x77,
+ 0x35, 0x69, 0x6a, 0x77, 0x4b, 0x6d, 0x53, 0x77, 0x35, 0x79, 0x79, 0x48,
+ 0x50, 0x44, 0x57, 0x64, 0x69, 0x48, 0x7a, 0x6f, 0x71, 0x45, 0x42, 0x6c,
+ 0x68, 0x41, 0x66, 0x38, 0x4e, 0x6c, 0x32, 0x32, 0x59, 0x54, 0x58, 0x61,
+ 0x78, 0x2f, 0x63, 0x6c, 0x73, 0x63, 0x2f, 0x70, 0x75, 0x2f, 0x52, 0x52,
+ 0x4c, 0x41, 0x64, 0x77, 0x49, 0x56, 0x41, 0x49, 0x45, 0x67, 0x0a, 0x51,
+ 0x71, 0x57, 0x52, 0x66, 0x2f, 0x31, 0x45, 0x49, 0x5a, 0x5a, 0x63, 0x67,
+ 0x4d, 0x36, 0x35, 0x51, 0x70, 0x64, 0x36, 0x35, 0x59, 0x75, 0x78, 0x41,
+ 0x6f, 0x47, 0x42, 0x41, 0x4b, 0x42, 0x61, 0x75, 0x56, 0x2f, 0x52, 0x75,
+ 0x6c, 0x6f, 0x46, 0x48, 0x6f, 0x53, 0x79, 0x35, 0x69, 0x57, 0x58, 0x45,
+ 0x53, 0x44, 0x79, 0x77, 0x69, 0x53, 0x33, 0x38, 0x30, 0x74, 0x4e, 0x35,
+ 0x39, 0x37, 0x34, 0x0a, 0x47, 0x75, 0x6b, 0x47, 0x77, 0x6f, 0x59, 0x64,
+ 0x5a, 0x6f, 0x35, 0x75, 0x53, 0x49, 0x48, 0x36, 0x61, 0x68, 0x70, 0x65,
+ 0x4e, 0x53, 0x65, 0x66, 0x30, 0x4d, 0x62, 0x48, 0x47, 0x41, 0x7a, 0x72,
+ 0x37, 0x5a, 0x56, 0x45, 0x6e, 0x68, 0x43, 0x51, 0x66, 0x52, 0x41, 0x77,
+ 0x48, 0x31, 0x67, 0x52, 0x76, 0x53, 0x48, 0x6f, 0x71, 0x2f, 0x52, 0x62,
+ 0x6d, 0x63, 0x76, 0x74, 0x64, 0x33, 0x72, 0x2b, 0x0a, 0x51, 0x74, 0x51,
+ 0x48, 0x4f, 0x77, 0x76, 0x51, 0x48, 0x67, 0x4c, 0x41, 0x79, 0x6e, 0x68,
+ 0x49, 0x34, 0x69, 0x37, 0x33, 0x63, 0x37, 0x39, 0x34, 0x63, 0x7a, 0x48,
+ 0x61, 0x52, 0x2b, 0x34, 0x33, 0x39, 0x62, 0x6d, 0x63, 0x61, 0x53, 0x77,
+ 0x44, 0x6e, 0x51, 0x64, 0x75, 0x52, 0x4d, 0x38, 0x35, 0x4d, 0x68, 0x6f,
+ 0x2f, 0x6a, 0x69, 0x69, 0x5a, 0x7a, 0x41, 0x56, 0x50, 0x78, 0x42, 0x6d,
+ 0x47, 0x0a, 0x50, 0x4f, 0x49, 0x4d, 0x57, 0x4e, 0x58, 0x58, 0x41, 0x6f,
+ 0x47, 0x41, 0x49, 0x36, 0x45, 0x70, 0x35, 0x49, 0x45, 0x37, 0x79, 0x6e,
+ 0x33, 0x4a, 0x7a, 0x6b, 0x58, 0x4f, 0x39, 0x42, 0x36, 0x74, 0x43, 0x33,
+ 0x62, 0x62, 0x44, 0x4d, 0x2b, 0x5a, 0x7a, 0x75, 0x75, 0x49, 0x6e, 0x77,
+ 0x5a, 0x4c, 0x62, 0x74, 0x5a, 0x38, 0x6c, 0x69, 0x6d, 0x37, 0x44, 0x73,
+ 0x71, 0x61, 0x62, 0x67, 0x34, 0x6b, 0x0a, 0x32, 0x59, 0x62, 0x45, 0x34,
+ 0x52, 0x39, 0x35, 0x42, 0x6e, 0x66, 0x77, 0x6e, 0x6a, 0x73, 0x79, 0x6c,
+ 0x38, 0x30, 0x6d, 0x71, 0x2f, 0x44, 0x62, 0x51, 0x4e, 0x35, 0x6c, 0x41,
+ 0x48, 0x42, 0x76, 0x6a, 0x44, 0x72, 0x6b, 0x43, 0x36, 0x49, 0x74, 0x6f,
+ 0x6a, 0x42, 0x47, 0x4b, 0x49, 0x33, 0x2b, 0x69, 0x49, 0x72, 0x71, 0x47,
+ 0x55, 0x45, 0x4a, 0x64, 0x78, 0x76, 0x6c, 0x34, 0x75, 0x6c, 0x6a, 0x0a,
+ 0x46, 0x30, 0x50, 0x6d, 0x53, 0x44, 0x37, 0x7a, 0x76, 0x49, 0x47, 0x38,
+ 0x42, 0x66, 0x6f, 0x63, 0x4b, 0x4f, 0x65, 0x6c, 0x2b, 0x45, 0x48, 0x48,
+ 0x30, 0x59, 0x72, 0x79, 0x45, 0x78, 0x69, 0x57, 0x36, 0x6b, 0x72, 0x56,
+ 0x31, 0x4b, 0x57, 0x32, 0x5a, 0x52, 0x6d, 0x4a, 0x72, 0x71, 0x53, 0x46,
+ 0x77, 0x36, 0x4b, 0x43, 0x6a, 0x56, 0x30, 0x43, 0x46, 0x46, 0x51, 0x46,
+ 0x62, 0x50, 0x66, 0x55, 0x0a, 0x78, 0x79, 0x35, 0x50, 0x6d, 0x4b, 0x79,
+ 0x74, 0x4a, 0x6d, 0x58, 0x52, 0x38, 0x42, 0x6d, 0x70, 0x70, 0x6b, 0x49,
+ 0x4f, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x44,
+ 0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b,
+ 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a
+};
+
+/*
+ * -----BEGIN CERTIFICATE-----
+ * MIICqTCCAmegAwIBAgIJAILDGUk37fWGMAsGCWCGSAFlAwQDAjASMRAwDgYDVQQK
+ * DAdBY21lIENvMB4XDTE2MTIyNTEzMjUzNloXDTI2MTIyNTEzMjUzNlowEjEQMA4G
+ * A1UECgwHQWNtZSBDbzCCAbcwggEsBgcqhkjOOAQBMIIBHwKBgQDdkFKzNABLOha7
+ * Eqj7004+p5fhtR6bxpujToMmSZTYi8igVVXPWzf03ULKS5UKjA6WpR6EiZAhm+Pd
+ * xusZ5xfAuRZLdKy0bgxn1f348Rwh+EQNaEM80TGcnw5ijwKmSw5yyHPDWdiHzoqE
+ * BlhAf8Nl22YTXax/clsc/pu/RRLAdwIVAIEgQqWRf/1EIZZcgM65Qpd65YuxAoGB
+ * AKBauV/RuloFHoSy5iWXESDywiS380tN5974GukGwoYdZo5uSIH6ahpeNSef0MbH
+ * GAzr7ZVEnhCQfRAwH1gRvSHoq/Rbmcvtd3r+QtQHOwvQHgLAynhI4i73c794czHa
+ * R+439bmcaSwDnQduRM85Mho/jiiZzAVPxBmGPOIMWNXXA4GEAAKBgCOhKeSBO8p9
+ * yc5FzvQerQt22wzPmc7riJ8GS27WfJYpuw7Kmm4OJNmGxOEfeQZ38J47MpfNJqvw
+ * 20DeZQBwb4w65AuiLaIwRiiN/oiK6hlBCXcb5eLpYxdD5kg+87yBvAX6HCjnpfhB
+ * x9GK8hMYlupK1dSltmUZia6khcOigo1do0UwQzAJBgNVHRMEAjAAMAsGA1UdDwQE
+ * AwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAUBgNVHREEDTALgglsb2NhbGhvc3Qw
+ * CwYJYIZIAWUDBAMCAy8AMCwCFClxInXTRWNJEWdi5ilNr/fbM1bKAhQy4B7wtmfd
+ * I+zV6g3w9qBkNqStpA==
+ * -----END CERTIFICATE-----
+ */
+static const char DSACertPEM[] = {
+ 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43,
+ 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d,
+ 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x43, 0x71, 0x54, 0x43, 0x43,
+ 0x41, 0x6d, 0x65, 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x4a,
+ 0x41, 0x49, 0x4c, 0x44, 0x47, 0x55, 0x6b, 0x33, 0x37, 0x66, 0x57, 0x47,
+ 0x4d, 0x41, 0x73, 0x47, 0x43, 0x57, 0x43, 0x47, 0x53, 0x41, 0x46, 0x6c,
+ 0x41, 0x77, 0x51, 0x44, 0x41, 0x6a, 0x41, 0x53, 0x4d, 0x52, 0x41, 0x77,
+ 0x44, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4b, 0x0a, 0x44, 0x41, 0x64,
+ 0x42, 0x59, 0x32, 0x31, 0x6c, 0x49, 0x45, 0x4e, 0x76, 0x4d, 0x42, 0x34,
+ 0x58, 0x44, 0x54, 0x45, 0x32, 0x4d, 0x54, 0x49, 0x79, 0x4e, 0x54, 0x45,
+ 0x7a, 0x4d, 0x6a, 0x55, 0x7a, 0x4e, 0x6c, 0x6f, 0x58, 0x44, 0x54, 0x49,
+ 0x32, 0x4d, 0x54, 0x49, 0x79, 0x4e, 0x54, 0x45, 0x7a, 0x4d, 0x6a, 0x55,
+ 0x7a, 0x4e, 0x6c, 0x6f, 0x77, 0x45, 0x6a, 0x45, 0x51, 0x4d, 0x41, 0x34,
+ 0x47, 0x0a, 0x41, 0x31, 0x55, 0x45, 0x43, 0x67, 0x77, 0x48, 0x51, 0x57,
+ 0x4e, 0x74, 0x5a, 0x53, 0x42, 0x44, 0x62, 0x7a, 0x43, 0x43, 0x41, 0x62,
+ 0x63, 0x77, 0x67, 0x67, 0x45, 0x73, 0x42, 0x67, 0x63, 0x71, 0x68, 0x6b,
+ 0x6a, 0x4f, 0x4f, 0x41, 0x51, 0x42, 0x4d, 0x49, 0x49, 0x42, 0x48, 0x77,
+ 0x4b, 0x42, 0x67, 0x51, 0x44, 0x64, 0x6b, 0x46, 0x4b, 0x7a, 0x4e, 0x41,
+ 0x42, 0x4c, 0x4f, 0x68, 0x61, 0x37, 0x0a, 0x45, 0x71, 0x6a, 0x37, 0x30,
+ 0x30, 0x34, 0x2b, 0x70, 0x35, 0x66, 0x68, 0x74, 0x52, 0x36, 0x62, 0x78,
+ 0x70, 0x75, 0x6a, 0x54, 0x6f, 0x4d, 0x6d, 0x53, 0x5a, 0x54, 0x59, 0x69,
+ 0x38, 0x69, 0x67, 0x56, 0x56, 0x58, 0x50, 0x57, 0x7a, 0x66, 0x30, 0x33,
+ 0x55, 0x4c, 0x4b, 0x53, 0x35, 0x55, 0x4b, 0x6a, 0x41, 0x36, 0x57, 0x70,
+ 0x52, 0x36, 0x45, 0x69, 0x5a, 0x41, 0x68, 0x6d, 0x2b, 0x50, 0x64, 0x0a,
+ 0x78, 0x75, 0x73, 0x5a, 0x35, 0x78, 0x66, 0x41, 0x75, 0x52, 0x5a, 0x4c,
+ 0x64, 0x4b, 0x79, 0x30, 0x62, 0x67, 0x78, 0x6e, 0x31, 0x66, 0x33, 0x34,
+ 0x38, 0x52, 0x77, 0x68, 0x2b, 0x45, 0x51, 0x4e, 0x61, 0x45, 0x4d, 0x38,
+ 0x30, 0x54, 0x47, 0x63, 0x6e, 0x77, 0x35, 0x69, 0x6a, 0x77, 0x4b, 0x6d,
+ 0x53, 0x77, 0x35, 0x79, 0x79, 0x48, 0x50, 0x44, 0x57, 0x64, 0x69, 0x48,
+ 0x7a, 0x6f, 0x71, 0x45, 0x0a, 0x42, 0x6c, 0x68, 0x41, 0x66, 0x38, 0x4e,
+ 0x6c, 0x32, 0x32, 0x59, 0x54, 0x58, 0x61, 0x78, 0x2f, 0x63, 0x6c, 0x73,
+ 0x63, 0x2f, 0x70, 0x75, 0x2f, 0x52, 0x52, 0x4c, 0x41, 0x64, 0x77, 0x49,
+ 0x56, 0x41, 0x49, 0x45, 0x67, 0x51, 0x71, 0x57, 0x52, 0x66, 0x2f, 0x31,
+ 0x45, 0x49, 0x5a, 0x5a, 0x63, 0x67, 0x4d, 0x36, 0x35, 0x51, 0x70, 0x64,
+ 0x36, 0x35, 0x59, 0x75, 0x78, 0x41, 0x6f, 0x47, 0x42, 0x0a, 0x41, 0x4b,
+ 0x42, 0x61, 0x75, 0x56, 0x2f, 0x52, 0x75, 0x6c, 0x6f, 0x46, 0x48, 0x6f,
+ 0x53, 0x79, 0x35, 0x69, 0x57, 0x58, 0x45, 0x53, 0x44, 0x79, 0x77, 0x69,
+ 0x53, 0x33, 0x38, 0x30, 0x74, 0x4e, 0x35, 0x39, 0x37, 0x34, 0x47, 0x75,
+ 0x6b, 0x47, 0x77, 0x6f, 0x59, 0x64, 0x5a, 0x6f, 0x35, 0x75, 0x53, 0x49,
+ 0x48, 0x36, 0x61, 0x68, 0x70, 0x65, 0x4e, 0x53, 0x65, 0x66, 0x30, 0x4d,
+ 0x62, 0x48, 0x0a, 0x47, 0x41, 0x7a, 0x72, 0x37, 0x5a, 0x56, 0x45, 0x6e,
+ 0x68, 0x43, 0x51, 0x66, 0x52, 0x41, 0x77, 0x48, 0x31, 0x67, 0x52, 0x76,
+ 0x53, 0x48, 0x6f, 0x71, 0x2f, 0x52, 0x62, 0x6d, 0x63, 0x76, 0x74, 0x64,
+ 0x33, 0x72, 0x2b, 0x51, 0x74, 0x51, 0x48, 0x4f, 0x77, 0x76, 0x51, 0x48,
+ 0x67, 0x4c, 0x41, 0x79, 0x6e, 0x68, 0x49, 0x34, 0x69, 0x37, 0x33, 0x63,
+ 0x37, 0x39, 0x34, 0x63, 0x7a, 0x48, 0x61, 0x0a, 0x52, 0x2b, 0x34, 0x33,
+ 0x39, 0x62, 0x6d, 0x63, 0x61, 0x53, 0x77, 0x44, 0x6e, 0x51, 0x64, 0x75,
+ 0x52, 0x4d, 0x38, 0x35, 0x4d, 0x68, 0x6f, 0x2f, 0x6a, 0x69, 0x69, 0x5a,
+ 0x7a, 0x41, 0x56, 0x50, 0x78, 0x42, 0x6d, 0x47, 0x50, 0x4f, 0x49, 0x4d,
+ 0x57, 0x4e, 0x58, 0x58, 0x41, 0x34, 0x47, 0x45, 0x41, 0x41, 0x4b, 0x42,
+ 0x67, 0x43, 0x4f, 0x68, 0x4b, 0x65, 0x53, 0x42, 0x4f, 0x38, 0x70, 0x39,
+ 0x0a, 0x79, 0x63, 0x35, 0x46, 0x7a, 0x76, 0x51, 0x65, 0x72, 0x51, 0x74,
+ 0x32, 0x32, 0x77, 0x7a, 0x50, 0x6d, 0x63, 0x37, 0x72, 0x69, 0x4a, 0x38,
+ 0x47, 0x53, 0x32, 0x37, 0x57, 0x66, 0x4a, 0x59, 0x70, 0x75, 0x77, 0x37,
+ 0x4b, 0x6d, 0x6d, 0x34, 0x4f, 0x4a, 0x4e, 0x6d, 0x47, 0x78, 0x4f, 0x45,
+ 0x66, 0x65, 0x51, 0x5a, 0x33, 0x38, 0x4a, 0x34, 0x37, 0x4d, 0x70, 0x66,
+ 0x4e, 0x4a, 0x71, 0x76, 0x77, 0x0a, 0x32, 0x30, 0x44, 0x65, 0x5a, 0x51,
+ 0x42, 0x77, 0x62, 0x34, 0x77, 0x36, 0x35, 0x41, 0x75, 0x69, 0x4c, 0x61,
+ 0x49, 0x77, 0x52, 0x69, 0x69, 0x4e, 0x2f, 0x6f, 0x69, 0x4b, 0x36, 0x68,
+ 0x6c, 0x42, 0x43, 0x58, 0x63, 0x62, 0x35, 0x65, 0x4c, 0x70, 0x59, 0x78,
+ 0x64, 0x44, 0x35, 0x6b, 0x67, 0x2b, 0x38, 0x37, 0x79, 0x42, 0x76, 0x41,
+ 0x58, 0x36, 0x48, 0x43, 0x6a, 0x6e, 0x70, 0x66, 0x68, 0x42, 0x0a, 0x78,
+ 0x39, 0x47, 0x4b, 0x38, 0x68, 0x4d, 0x59, 0x6c, 0x75, 0x70, 0x4b, 0x31,
+ 0x64, 0x53, 0x6c, 0x74, 0x6d, 0x55, 0x5a, 0x69, 0x61, 0x36, 0x6b, 0x68,
+ 0x63, 0x4f, 0x69, 0x67, 0x6f, 0x31, 0x64, 0x6f, 0x30, 0x55, 0x77, 0x51,
+ 0x7a, 0x41, 0x4a, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x52, 0x4d, 0x45, 0x41,
+ 0x6a, 0x41, 0x41, 0x4d, 0x41, 0x73, 0x47, 0x41, 0x31, 0x55, 0x64, 0x44,
+ 0x77, 0x51, 0x45, 0x0a, 0x41, 0x77, 0x49, 0x46, 0x6f, 0x44, 0x41, 0x54,
+ 0x42, 0x67, 0x4e, 0x56, 0x48, 0x53, 0x55, 0x45, 0x44, 0x44, 0x41, 0x4b,
+ 0x42, 0x67, 0x67, 0x72, 0x42, 0x67, 0x45, 0x46, 0x42, 0x51, 0x63, 0x44,
+ 0x41, 0x54, 0x41, 0x55, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x52, 0x45, 0x45,
+ 0x44, 0x54, 0x41, 0x4c, 0x67, 0x67, 0x6c, 0x73, 0x62, 0x32, 0x4e, 0x68,
+ 0x62, 0x47, 0x68, 0x76, 0x63, 0x33, 0x51, 0x77, 0x0a, 0x43, 0x77, 0x59,
+ 0x4a, 0x59, 0x49, 0x5a, 0x49, 0x41, 0x57, 0x55, 0x44, 0x42, 0x41, 0x4d,
+ 0x43, 0x41, 0x79, 0x38, 0x41, 0x4d, 0x43, 0x77, 0x43, 0x46, 0x43, 0x6c,
+ 0x78, 0x49, 0x6e, 0x58, 0x54, 0x52, 0x57, 0x4e, 0x4a, 0x45, 0x57, 0x64,
+ 0x69, 0x35, 0x69, 0x6c, 0x4e, 0x72, 0x2f, 0x66, 0x62, 0x4d, 0x31, 0x62,
+ 0x4b, 0x41, 0x68, 0x51, 0x79, 0x34, 0x42, 0x37, 0x77, 0x74, 0x6d, 0x66,
+ 0x64, 0x0a, 0x49, 0x2b, 0x7a, 0x56, 0x36, 0x67, 0x33, 0x77, 0x39, 0x71,
+ 0x42, 0x6b, 0x4e, 0x71, 0x53, 0x74, 0x70, 0x41, 0x3d, 0x3d, 0x0a, 0x2d,
+ 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54,
+ 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
+ 0x0a
+};
+#endif
+
+/* unused, to avoid warning. */
+static int idx;
+
+#define FUZZTIME 1485898104
+
+#define TIME_IMPL(t) { if (t != NULL) *t = FUZZTIME; return FUZZTIME; }
+
+/*
+ * This might not work in all cases (and definitely not on Windows
+ * because of the way linkers are) and callees can still get the
+ * current time instead of the fixed time. This will just result
+ * in things not being fully reproducible and have a slightly
+ * different coverage.
+ */
+#if !defined(_WIN32)
+time_t time(time_t *t) TIME_IMPL(t)
+#endif
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ STACK_OF(SSL_COMP) *comp_methods;
+
+ FuzzerSetRand();
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS | OPENSSL_INIT_ASYNC, NULL);
+ OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL);
+ ERR_clear_error();
+ CRYPTO_free_ex_index(0, -1);
+ idx = SSL_get_ex_data_X509_STORE_CTX_idx();
+ comp_methods = SSL_COMP_get_compression_methods();
+ if (comp_methods != NULL)
+ sk_SSL_COMP_sort(comp_methods);
+
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ SSL *server;
+ BIO *in;
+ BIO *out;
+#if !defined(OPENSSL_NO_EC) \
+ || (!defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0))
+ BIO *bio_buf;
+#endif
+ SSL_CTX *ctx;
+ int ret;
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ RSA *privkey;
+#endif
+ const uint8_t *bufp;
+#if !defined(OPENSSL_NO_DEPRECATED_3_0)
+ EVP_PKEY *pkey;
+#endif
+ X509 *cert;
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+# ifndef OPENSSL_NO_EC
+ EC_KEY *ecdsakey = NULL;
+# endif
+#endif
+#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0)
+ DSA *dsakey = NULL;
+#endif
+ uint8_t opt;
+
+ if (len < 2)
+ return 0;
+
+ /* This only fuzzes the initial flow from the client so far. */
+ ctx = SSL_CTX_new(SSLv23_method());
+
+ ret = SSL_CTX_set_min_proto_version(ctx, 0);
+ OPENSSL_assert(ret == 1);
+ ret = SSL_CTX_set_cipher_list(ctx, "ALL:eNULL:@SECLEVEL=0");
+ OPENSSL_assert(ret == 1);
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ /* RSA */
+ bufp = kRSAPrivateKeyDER;
+ privkey = d2i_RSAPrivateKey(NULL, &bufp, sizeof(kRSAPrivateKeyDER));
+ OPENSSL_assert(privkey != NULL);
+ pkey = EVP_PKEY_new();
+ EVP_PKEY_assign_RSA(pkey, privkey);
+ ret = SSL_CTX_use_PrivateKey(ctx, pkey);
+ OPENSSL_assert(ret == 1);
+ EVP_PKEY_free(pkey);
+#endif
+
+ bufp = kCertificateDER;
+ cert = d2i_X509(NULL, &bufp, sizeof(kCertificateDER));
+ OPENSSL_assert(cert != NULL);
+ ret = SSL_CTX_use_certificate(ctx, cert);
+ OPENSSL_assert(ret == 1);
+ X509_free(cert);
+
+#ifndef OPENSSL_NO_EC
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ /* ECDSA */
+ bio_buf = BIO_new(BIO_s_mem());
+ OPENSSL_assert((size_t)BIO_write(bio_buf, ECDSAPrivateKeyPEM, sizeof(ECDSAPrivateKeyPEM)) == sizeof(ECDSAPrivateKeyPEM));
+ ecdsakey = PEM_read_bio_ECPrivateKey(bio_buf, NULL, NULL, NULL);
+ ERR_print_errors_fp(stderr);
+ OPENSSL_assert(ecdsakey != NULL);
+ BIO_free(bio_buf);
+ pkey = EVP_PKEY_new();
+ EVP_PKEY_assign_EC_KEY(pkey, ecdsakey);
+ ret = SSL_CTX_use_PrivateKey(ctx, pkey);
+ OPENSSL_assert(ret == 1);
+ EVP_PKEY_free(pkey);
+# endif
+ bio_buf = BIO_new(BIO_s_mem());
+ OPENSSL_assert((size_t)BIO_write(bio_buf, ECDSACertPEM, sizeof(ECDSACertPEM)) == sizeof(ECDSACertPEM));
+ cert = PEM_read_bio_X509(bio_buf, NULL, NULL, NULL);
+ OPENSSL_assert(cert != NULL);
+ BIO_free(bio_buf);
+ ret = SSL_CTX_use_certificate(ctx, cert);
+ OPENSSL_assert(ret == 1);
+ X509_free(cert);
+#endif
+
+#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0)
+ /* DSA */
+ bio_buf = BIO_new(BIO_s_mem());
+ OPENSSL_assert((size_t)BIO_write(bio_buf, DSAPrivateKeyPEM, sizeof(DSAPrivateKeyPEM)) == sizeof(DSAPrivateKeyPEM));
+ dsakey = PEM_read_bio_DSAPrivateKey(bio_buf, NULL, NULL, NULL);
+ ERR_print_errors_fp(stderr);
+ OPENSSL_assert(dsakey != NULL);
+ BIO_free(bio_buf);
+ pkey = EVP_PKEY_new();
+ EVP_PKEY_assign_DSA(pkey, dsakey);
+ ret = SSL_CTX_use_PrivateKey(ctx, pkey);
+ OPENSSL_assert(ret == 1);
+ EVP_PKEY_free(pkey);
+
+ bio_buf = BIO_new(BIO_s_mem());
+ OPENSSL_assert((size_t)BIO_write(bio_buf, DSACertPEM, sizeof(DSACertPEM)) == sizeof(DSACertPEM));
+ cert = PEM_read_bio_X509(bio_buf, NULL, NULL, NULL);
+ OPENSSL_assert(cert != NULL);
+ BIO_free(bio_buf);
+ ret = SSL_CTX_use_certificate(ctx, cert);
+ OPENSSL_assert(ret == 1);
+ X509_free(cert);
+#endif
+
+ server = SSL_new(ctx);
+ in = BIO_new(BIO_s_mem());
+ out = BIO_new(BIO_s_mem());
+ SSL_set_bio(server, in, out);
+ SSL_set_accept_state(server);
+
+ opt = (uint8_t)buf[len-1];
+ len--;
+
+ OPENSSL_assert((size_t)BIO_write(in, buf, len) == len);
+
+ if ((opt & 0x01) != 0)
+ {
+ do {
+ char early_buf[16384];
+ size_t early_len;
+ ret = SSL_read_early_data(server, early_buf, sizeof(early_buf), &early_len);
+
+ if (ret != SSL_READ_EARLY_DATA_SUCCESS)
+ break;
+ } while (1);
+ }
+
+ if (SSL_do_handshake(server) == 1) {
+ /* Keep reading application data until error or EOF. */
+ uint8_t tmp[1024];
+ for (;;) {
+ if (SSL_read(server, tmp, sizeof(tmp)) <= 0) {
+ break;
+ }
+ }
+ }
+ SSL_free(server);
+ ERR_clear_error();
+ SSL_CTX_free(ctx);
+
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+ FuzzerClearRand();
+}
diff --git a/fuzz/test-corpus.c b/fuzz/test-corpus.c
new file mode 100644
index 000000000000..aaeec778603f
--- /dev/null
+++ b/fuzz/test-corpus.c
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2016-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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * Given a list of files, run each of them through the fuzzer. Note that
+ * failure will be indicated by some kind of crash. Switching on things like
+ * asan improves the test.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <openssl/crypto.h>
+#include "fuzzer.h"
+#include "internal/o_dir.h"
+
+#if defined(_WIN32) && defined(_MAX_PATH) && !defined(PATH_MAX)
+# define PATH_MAX _MAX_PATH
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX 4096
+#endif
+
+# if !defined(S_ISREG)
+# define S_ISREG(m) ((m) & S_IFREG)
+# endif
+
+static void testfile(const char *pathname)
+{
+ struct stat st;
+ FILE *f;
+ unsigned char *buf;
+ size_t s;
+
+ if (stat(pathname, &st) < 0 || !S_ISREG(st.st_mode))
+ return;
+ printf("# %s\n", pathname);
+ fflush(stdout);
+ f = fopen(pathname, "rb");
+ if (f == NULL)
+ return;
+ buf = malloc(st.st_size);
+ if (buf != NULL) {
+ s = fread(buf, 1, st.st_size, f);
+ OPENSSL_assert(s == (size_t)st.st_size);
+ FuzzerTestOneInput(buf, s);
+ free(buf);
+ }
+ fclose(f);
+}
+
+int main(int argc, char **argv) {
+ int n;
+
+ FuzzerInitialize(&argc, &argv);
+
+ for (n = 1; n < argc; ++n) {
+ size_t dirname_len = strlen(argv[n]);
+ const char *filename = NULL;
+ char *pathname = NULL;
+ OPENSSL_DIR_CTX *ctx = NULL;
+ int wasdir = 0;
+
+ /*
+ * We start with trying to read the given path as a directory.
+ */
+ while ((filename = OPENSSL_DIR_read(&ctx, argv[n])) != NULL) {
+ wasdir = 1;
+ if (pathname == NULL) {
+ pathname = malloc(PATH_MAX);
+ if (pathname == NULL)
+ break;
+ strcpy(pathname, argv[n]);
+#ifdef __VMS
+ if (strchr(":<]", pathname[dirname_len - 1]) == NULL)
+#endif
+ pathname[dirname_len++] = '/';
+ pathname[dirname_len] = '\0';
+ }
+ strcpy(pathname + dirname_len, filename);
+ testfile(pathname);
+ }
+ OPENSSL_DIR_end(&ctx);
+
+ /* If it wasn't a directory, treat it as a file instead */
+ if (!wasdir)
+ testfile(argv[n]);
+
+ free(pathname);
+ }
+
+ FuzzerCleanup();
+
+ return 0;
+}
diff --git a/fuzz/x509.c b/fuzz/x509.c
new file mode 100644
index 000000000000..e2d2639164c0
--- /dev/null
+++ b/fuzz/x509.c
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2016-2023 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <openssl/x509.h>
+#include <openssl/ocsp.h>
+#include <openssl/bio.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include "fuzzer.h"
+
+int FuzzerInitialize(int *argc, char ***argv)
+{
+ FuzzerSetRand();
+ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS
+ | OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL);
+ ERR_clear_error();
+ CRYPTO_free_ex_index(0, -1);
+ return 1;
+}
+
+static int cb(int ok, X509_STORE_CTX *ctx)
+{
+ return 1;
+}
+
+int FuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+ const unsigned char *p = buf;
+ size_t orig_len = len;
+ unsigned char *der = NULL;
+ BIO *bio = NULL;
+ X509 *x509_1 = NULL, *x509_2 = NULL;
+ X509_STORE *store = NULL;
+ X509_VERIFY_PARAM *param = NULL;
+ X509_STORE_CTX *ctx = NULL;
+ X509_CRL *crl = NULL;
+ STACK_OF(X509_CRL) *crls = NULL;
+ STACK_OF(X509) *certs = NULL;
+ OCSP_RESPONSE *resp = NULL;
+ OCSP_BASICRESP *bs = NULL;
+ OCSP_CERTID *id = NULL;
+
+ x509_1 = d2i_X509(NULL, &p, len);
+ if (x509_1 == NULL)
+ goto err;
+
+ bio = BIO_new(BIO_s_null());
+ if (bio == NULL)
+ goto err;
+
+ /* This will load and print the public key as well as extensions */
+ X509_print(bio, x509_1);
+ BIO_free(bio);
+
+ X509_issuer_and_serial_hash(x509_1);
+
+ i2d_X509(x509_1, &der);
+ OPENSSL_free(der);
+
+ len = orig_len - (p - buf);
+ x509_2 = d2i_X509(NULL, &p, len);
+ if (x509_2 == NULL)
+ goto err;
+
+ len = orig_len - (p - buf);
+ crl = d2i_X509_CRL(NULL, &p, len);
+ if (crl == NULL)
+ goto err;
+
+ len = orig_len - (p - buf);
+ resp = d2i_OCSP_RESPONSE(NULL, &p, len);
+
+ store = X509_STORE_new();
+ X509_STORE_add_cert(store, x509_2);
+
+ param = X509_VERIFY_PARAM_new();
+ X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_NO_CHECK_TIME);
+ X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_X509_STRICT);
+ X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_PARTIAL_CHAIN);
+ X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
+
+ X509_STORE_set1_param(store, param);
+
+ X509_STORE_set_verify_cb(store, cb);
+
+ ctx = X509_STORE_CTX_new();
+ if (ctx == NULL)
+ goto err;
+
+ X509_STORE_CTX_init(ctx, store, x509_1, NULL);
+
+ if (crl != NULL) {
+ crls = sk_X509_CRL_new_null();
+ if (crls == NULL)
+ goto err;
+
+ sk_X509_CRL_push(crls, crl);
+ X509_STORE_CTX_set0_crls(ctx, crls);
+ }
+
+ X509_verify_cert(ctx);
+
+ if (resp != NULL)
+ bs = OCSP_response_get1_basic(resp);
+
+ if (bs != NULL) {
+ int status, reason;
+ ASN1_GENERALIZEDTIME *revtime, *thisupd, *nextupd;
+
+ certs = sk_X509_new_null();
+ if (certs == NULL)
+ goto err;
+
+ sk_X509_push(certs, x509_1);
+ sk_X509_push(certs, x509_2);
+
+ OCSP_basic_verify(bs, certs, store, OCSP_PARTIAL_CHAIN);
+
+ id = OCSP_cert_to_id(NULL, x509_1, x509_2);
+ if (id == NULL)
+ goto err;
+ OCSP_resp_find_status(bs, id, &status, &reason, &revtime, &thisupd,
+ &nextupd);
+ }
+
+err:
+ X509_STORE_CTX_free(ctx);
+ X509_VERIFY_PARAM_free(param);
+ X509_STORE_free(store);
+ X509_free(x509_1);
+ X509_free(x509_2);
+ X509_CRL_free(crl);
+ OCSP_CERTID_free(id);
+ OCSP_BASICRESP_free(bs);
+ OCSP_RESPONSE_free(resp);
+ sk_X509_CRL_free(crls);
+ sk_X509_free(certs);
+
+ ERR_clear_error();
+ return 0;
+}
+
+void FuzzerCleanup(void)
+{
+ FuzzerClearRand();
+}
diff --git a/include/crypto/dherr.h b/include/crypto/dherr.h
index bb24d131eb88..519327f79574 100644
--- a/include/crypto/dherr.h
+++ b/include/crypto/dherr.h
@@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
- * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2020-2023 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
diff --git a/include/crypto/x509.h b/include/crypto/x509.h
index 631150b76969..850e15759a2c 100644
--- a/include/crypto/x509.h
+++ b/include/crypto/x509.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2015-2024 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
@@ -367,4 +367,21 @@ EVP_PKEY *ossl_d2i_PUBKEY_legacy(EVP_PKEY **a, const unsigned char **pp,
int x509v3_add_len_value_uchar(const char *name, const unsigned char *value,
size_t vallen, STACK_OF(CONF_VALUE) **extlist);
+/* Attribute addition functions not checking for duplicate attributes */
+STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
+ X509_ATTRIBUTE *attr);
+STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) **x,
+ const ASN1_OBJECT *obj,
+ int type,
+ const unsigned char *bytes,
+ int len);
+STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) **x,
+ int nid, int type,
+ const unsigned char *bytes,
+ int len);
+STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) **x,
+ const char *attrname,
+ int type,
+ const unsigned char *bytes,
+ int len);
#endif /* OSSL_CRYPTO_X509_H */
diff --git a/include/internal/ffc.h b/include/internal/ffc.h
index c4f090875f33..e96f08d68e93 100644
--- a/include/internal/ffc.h
+++ b/include/internal/ffc.h
@@ -58,8 +58,11 @@
# define FFC_CHECK_INVALID_Q_VALUE 0x00020
# define FFC_CHECK_INVALID_J_VALUE 0x00040
-# define FFC_CHECK_BAD_LN_PAIR 0x00080
-# define FFC_CHECK_INVALID_SEED_SIZE 0x00100
+/*
+ * 0x80, 0x100 reserved by include/openssl/dh.h with check bits that are not
+ * relevant for FFC.
+ */
+
# define FFC_CHECK_MISSING_SEED_OR_COUNTER 0x00200
# define FFC_CHECK_INVALID_G 0x00400
# define FFC_CHECK_INVALID_PQ 0x00800
@@ -68,6 +71,8 @@
# define FFC_CHECK_Q_MISMATCH 0x04000
# define FFC_CHECK_G_MISMATCH 0x08000
# define FFC_CHECK_COUNTER_MISMATCH 0x10000
+# define FFC_CHECK_BAD_LN_PAIR 0x20000
+# define FFC_CHECK_INVALID_SEED_SIZE 0x40000
/* Validation Return codes */
# define FFC_ERROR_PUBKEY_TOO_SMALL 0x01
diff --git a/include/internal/refcount.h b/include/internal/refcount.h
index 3392d3b490d5..64fb77fba58f 100644
--- a/include/internal/refcount.h
+++ b/include/internal/refcount.h
@@ -134,14 +134,14 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret,
static __inline int CRYPTO_UP_REF(volatile int *val, int *ret,
ossl_unused void *lock)
{
- *ret = _InterlockedExchangeAdd(val, 1) + 1;
+ *ret = _InterlockedExchangeAdd((long volatile *)val, 1) + 1;
return 1;
}
static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret,
ossl_unused void *lock)
{
- *ret = _InterlockedExchangeAdd(val, -1) - 1;
+ *ret = _InterlockedExchangeAdd((long volatile *)val, -1) - 1;
return 1;
}
# endif
diff --git a/include/openssl/bio.h.in b/include/openssl/bio.h.in
index c521e41e4a17..cdc395b78390 100644
--- a/include/openssl/bio.h.in
+++ b/include/openssl/bio.h.in
@@ -844,7 +844,7 @@ int BIO_meth_set_puts(BIO_METHOD *biom,
int (*puts) (BIO *, const char *));
int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int);
int BIO_meth_set_gets(BIO_METHOD *biom,
- int (*gets) (BIO *, char *, int));
+ int (*ossl_gets) (BIO *, char *, int));
long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, long, void *);
int BIO_meth_set_ctrl(BIO_METHOD *biom,
long (*ctrl) (BIO *, int, long, void *));
diff --git a/include/openssl/conferr.h b/include/openssl/conferr.h
index 496e2e1efd66..5dd4868ab98f 100644
--- a/include/openssl/conferr.h
+++ b/include/openssl/conferr.h
@@ -38,6 +38,7 @@
# define CONF_R_NUMBER_TOO_LARGE 121
# define CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION 124
# define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111
+# define CONF_R_RECURSIVE_SECTION_REFERENCE 126
# define CONF_R_RELATIVE_PATH 125
# define CONF_R_SSL_COMMAND_SECTION_EMPTY 117
# define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118
diff --git a/include/openssl/dh.h b/include/openssl/dh.h
index 6533260f2027..50e0cf54be8c 100644
--- a/include/openssl/dh.h
+++ b/include/openssl/dh.h
@@ -141,7 +141,7 @@ DECLARE_ASN1_ITEM(DHparams)
# define DH_GENERATOR_3 3
# define DH_GENERATOR_5 5
-/* DH_check error codes */
+/* DH_check error codes, some of them shared with DH_check_pub_key */
/*
* NB: These values must align with the equivalently named macros in
* internal/ffc.h.
@@ -151,10 +151,10 @@ DECLARE_ASN1_ITEM(DHparams)
# define DH_UNABLE_TO_CHECK_GENERATOR 0x04
# define DH_NOT_SUITABLE_GENERATOR 0x08
# define DH_CHECK_Q_NOT_PRIME 0x10
-# define DH_CHECK_INVALID_Q_VALUE 0x20
+# define DH_CHECK_INVALID_Q_VALUE 0x20 /* +DH_check_pub_key */
# define DH_CHECK_INVALID_J_VALUE 0x40
# define DH_MODULUS_TOO_SMALL 0x80
-# define DH_MODULUS_TOO_LARGE 0x100
+# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */
/* DH_check_pub_key error codes */
# define DH_CHECK_PUBKEY_TOO_SMALL 0x01
diff --git a/include/openssl/dherr.h b/include/openssl/dherr.h
index 5d2a762a96f8..074a70145f9f 100644
--- a/include/openssl/dherr.h
+++ b/include/openssl/dherr.h
@@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
- * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2023 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
@@ -50,6 +50,7 @@
# define DH_R_NO_PRIVATE_VALUE 100
# define DH_R_PARAMETER_ENCODING_ERROR 105
# define DH_R_PEER_KEY_ERROR 111
+# define DH_R_Q_TOO_LARGE 130
# define DH_R_SHARED_INFO_ERROR 113
# define DH_R_UNABLE_TO_CHECK_GENERATOR 121
diff --git a/ms/applink.c b/ms/applink.c
new file mode 100644
index 000000000000..1d8ecf79e791
--- /dev/null
+++ b/ms/applink.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#define APPLINK_STDIN 1
+#define APPLINK_STDOUT 2
+#define APPLINK_STDERR 3
+#define APPLINK_FPRINTF 4
+#define APPLINK_FGETS 5
+#define APPLINK_FREAD 6
+#define APPLINK_FWRITE 7
+#define APPLINK_FSETMOD 8
+#define APPLINK_FEOF 9
+#define APPLINK_FCLOSE 10 /* should not be used */
+
+#define APPLINK_FOPEN 11 /* solely for completeness */
+#define APPLINK_FSEEK 12
+#define APPLINK_FTELL 13
+#define APPLINK_FFLUSH 14
+#define APPLINK_FERROR 15
+#define APPLINK_CLEARERR 16
+#define APPLINK_FILENO 17 /* to be used with below */
+
+#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */
+#define APPLINK_READ 19
+#define APPLINK_WRITE 20
+#define APPLINK_LSEEK 21
+#define APPLINK_CLOSE 22
+#define APPLINK_MAX 22 /* always same as last macro */
+
+#ifndef APPMACROS_ONLY
+# include <stdio.h>
+# include <io.h>
+# include <fcntl.h>
+
+# ifdef __BORLANDC__
+ /* _lseek in <io.h> is a function-like macro so we can't take its address */
+# undef _lseek
+# define _lseek lseek
+# endif
+
+static void *app_stdin(void)
+{
+ return stdin;
+}
+
+static void *app_stdout(void)
+{
+ return stdout;
+}
+
+static void *app_stderr(void)
+{
+ return stderr;
+}
+
+static int app_feof(FILE *fp)
+{
+ return feof(fp);
+}
+
+static int app_ferror(FILE *fp)
+{
+ return ferror(fp);
+}
+
+static void app_clearerr(FILE *fp)
+{
+ clearerr(fp);
+}
+
+static int app_fileno(FILE *fp)
+{
+ return _fileno(fp);
+}
+
+static int app_fsetmod(FILE *fp, char mod)
+{
+ return _setmode(_fileno(fp), mod == 'b' ? _O_BINARY : _O_TEXT);
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+__declspec(dllexport)
+void **
+# if defined(__BORLANDC__)
+/*
+ * __stdcall appears to be the only way to get the name
+ * decoration right with Borland C. Otherwise it works
+ * purely incidentally, as we pass no parameters.
+ */
+__stdcall
+# else
+__cdecl
+# endif
+OPENSSL_Applink(void)
+{
+ static int once = 1;
+ static void *OPENSSL_ApplinkTable[APPLINK_MAX + 1] =
+ { (void *)APPLINK_MAX };
+
+ if (once) {
+ OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin;
+ OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout;
+ OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr;
+ OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf;
+ OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets;
+ OPENSSL_ApplinkTable[APPLINK_FREAD] = fread;
+ OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite;
+ OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod;
+ OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof;
+ OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose;
+
+ OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen;
+ OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek;
+ OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell;
+ OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush;
+ OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror;
+ OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr;
+ OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno;
+
+ OPENSSL_ApplinkTable[APPLINK_OPEN] = _open;
+ OPENSSL_ApplinkTable[APPLINK_READ] = _read;
+ OPENSSL_ApplinkTable[APPLINK_WRITE] = _write;
+ OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek;
+ OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close;
+
+ once = 0;
+ }
+
+ return OPENSSL_ApplinkTable;
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/ms/cmp.pl b/ms/cmp.pl
new file mode 100755
index 000000000000..6222b1ffd838
--- /dev/null
+++ b/ms/cmp.pl
@@ -0,0 +1,53 @@
+#! /usr/bin/env perl
+# Copyright 1995-2016 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
+
+($#ARGV == 1) || die "usage: cmp.pl <file1> <file2>\n";
+
+open(IN0,"<$ARGV[0]") || die "unable to open $ARGV[0]\n";
+open(IN1,"<$ARGV[1]") || die "unable to open $ARGV[1]\n";
+binmode IN0;
+binmode IN1;
+
+$tot=0;
+$ret=1;
+for (;;)
+{
+ $n1=sysread(IN0,$b1,4096);
+ $n2=sysread(IN1,$b2,4096);
+
+ last if ($n1 != $n2);
+ last if ($b1 ne $b2);
+ last if ($n1 < 0);
+ if ($n1 == 0)
+ {
+ $ret=0;
+ last;
+ }
+ $tot+=$n1;
+}
+
+close(IN0);
+close(IN1);
+if ($ret)
+{
+ printf STDERR "$ARGV[0] and $ARGV[1] are different\n";
+ @a1=unpack("C*",$b1);
+ @a2=unpack("C*",$b2);
+ for ($i=0; $i<=$#a1; $i++)
+ {
+ if ($a1[$i] ne $a2[$i])
+ {
+ printf "%02X %02X <<\n",$a1[$i],$a2[$i];
+ last;
+ }
+ }
+ $nm=$tot+$n1;
+ $tot+=$i+1;
+ printf STDERR "diff at char $tot of $nm\n";
+}
+exit($ret);
diff --git a/ms/uplink-common.pl b/ms/uplink-common.pl
new file mode 100755
index 000000000000..f894ce084377
--- /dev/null
+++ b/ms/uplink-common.pl
@@ -0,0 +1,28 @@
+#! /usr/bin/env perl
+# Copyright 2008-2016 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
+
+# pull APPLINK_MAX value from applink.c...
+$applink_c=$0;
+$applink_c=~s|[^/\\]+$||g;
+$applink_c.="applink.c";
+open(INPUT,$applink_c) || die "can't open $applink_c: $!";
+@max=grep {/APPLINK_MAX\s+(\d+)/} <INPUT>;
+close(INPUT);
+($#max==0) or die "can't find APPLINK_MAX in $applink_c";
+
+$max[0]=~/APPLINK_MAX\s+(\d+)/;
+$N=$1; # number of entries in OPENSSL_UplinkTable not including
+ # OPENSSL_UplinkTable[0], which contains this value...
+
+1;
+
+# Idea is to fill the OPENSSL_UplinkTable with pointers to stubs
+# which invoke 'void OPENSSL_Uplink (ULONG_PTR *table,int index)';
+# and then dereference themselves. Latter shall result in endless
+# loop *unless* OPENSSL_Uplink does not replace 'table[index]' with
+# something else, e.g. as 'table[index]=unimplemented;'...
diff --git a/ms/uplink-ia64.pl b/ms/uplink-ia64.pl
new file mode 100755
index 000000000000..757e77d29ff4
--- /dev/null
+++ b/ms/uplink-ia64.pl
@@ -0,0 +1,60 @@
+#! /usr/bin/env perl
+# Copyright 2008-2016 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
+
+$output = pop and open STDOUT,">$output";
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+push(@INC,"${dir}.");
+
+require "uplink-common.pl";
+
+local $V=8; # max number of args uplink functions may accept...
+my $loc0 = "r".(32+$V);
+print <<___;
+.text
+.global OPENSSL_Uplink#
+.type OPENSSL_Uplink#,\@function
+
+___
+for ($i=1;$i<=$N;$i++) {
+print <<___;
+.proc lazy$i#
+lazy$i:
+ .prologue
+{ .mii; .save ar.pfs,$loc0
+ alloc loc0=ar.pfs,$V,3,2,0
+ .save b0,loc1
+ mov loc1=b0
+ addl loc2=\@ltoff(OPENSSL_UplinkTable#),gp };;
+ .body
+{ .mmi; ld8 out0=[loc2]
+ mov out1=$i };;
+{ .mib; add loc2=8*$i,out0
+ br.call.sptk.many b0=OPENSSL_Uplink# };;
+{ .mmi; ld8 r31=[loc2];;
+ ld8 r30=[r31],8 };;
+{ .mii; ld8 gp=[r31]
+ mov b6=r30
+ mov b0=loc1 };;
+{ .mib; mov ar.pfs=loc0
+ br.many b6 };;
+.endp lazy$i#
+
+___
+}
+print <<___;
+.data
+.global OPENSSL_UplinkTable#
+OPENSSL_UplinkTable: data8 $N // amount of following entries
+___
+for ($i=1;$i<=$N;$i++) { print " data8 \@fptr(lazy$i#)\n"; }
+print <<___;
+.size OPENSSL_UplinkTable,.-OPENSSL_UplinkTable#
+___
+
+close STDOUT;
diff --git a/ms/uplink-x86.pl b/ms/uplink-x86.pl
new file mode 100755
index 000000000000..bad4901802e3
--- /dev/null
+++ b/ms/uplink-x86.pl
@@ -0,0 +1,43 @@
+#! /usr/bin/env perl
+# Copyright 2008-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+push(@INC, "${dir}.", "${dir}../crypto/perlasm");
+require "x86asm.pl";
+
+require "uplink-common.pl";
+
+$output = pop and open STDOUT,">$output";
+
+&asm_init($ARGV[0]);
+
+&external_label("OPENSSL_Uplink");
+&public_label("OPENSSL_UplinkTable");
+
+for ($i=1;$i<=$N;$i++) {
+&function_begin_B("_\$lazy${i}");
+ &lea ("eax",&DWP(&label("OPENSSL_UplinkTable")));
+ &push ($i);
+ &push ("eax");
+ &call (&label("OPENSSL_Uplink"));
+ &pop ("eax");
+ &add ("esp",4);
+ &jmp_ptr(&DWP(4*$i,"eax"));
+&function_end_B("_\$lazy${i}");
+}
+
+&dataseg();
+&align(4);
+&set_label("OPENSSL_UplinkTable");
+&data_word($N);
+for ($i=1;$i<=$N;$i++) {
+&data_word(&label("_\$lazy${i}"));
+}
+&asm_finish();
+
+close STDOUT;
diff --git a/ms/uplink-x86_64.pl b/ms/uplink-x86_64.pl
new file mode 100755
index 000000000000..5564c2c7bab1
--- /dev/null
+++ b/ms/uplink-x86_64.pl
@@ -0,0 +1,74 @@
+#! /usr/bin/env perl
+# Copyright 2008-2016 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
+
+# $output is the last argument if it looks like a file (it has an extension)
+$output = $#ARGV >= 0 && $ARGV[$#ARGV] =~ m|\.\w+$| ? pop : undef;
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+open OUT,"| \"$^X\" \"${dir}../crypto/perlasm/x86_64-xlate.pl\" \"$output\""
+ or die "can't call ${dir}../crypto/perlasm/x86_64-xlate.pl: $!";
+*STDOUT=*OUT;
+push(@INC,"${dir}.");
+
+require "uplink-common.pl";
+
+$prefix="_lazy";
+
+print <<___;
+.text
+.extern OPENSSL_Uplink
+.globl OPENSSL_UplinkTable
+___
+for ($i=1;$i<=$N;$i++) {
+print <<___;
+.type $prefix${i},\@abi-omnipotent
+.align 16
+$prefix${i}:
+ .byte 0x48,0x83,0xEC,0x28 # sub rsp,40
+ mov %rcx,48(%rsp)
+ mov %rdx,56(%rsp)
+ mov %r8,64(%rsp)
+ mov %r9,72(%rsp)
+ lea OPENSSL_UplinkTable(%rip),%rcx
+ mov \$$i,%rdx
+ call OPENSSL_Uplink
+ mov 48(%rsp),%rcx
+ mov 56(%rsp),%rdx
+ mov 64(%rsp),%r8
+ mov 72(%rsp),%r9
+ lea OPENSSL_UplinkTable(%rip),%rax
+ add \$40,%rsp
+ jmp *8*$i(%rax)
+$prefix${i}_end:
+.size $prefix${i},.-$prefix${i}
+___
+}
+print <<___;
+.data
+OPENSSL_UplinkTable:
+ .quad $N
+___
+for ($i=1;$i<=$N;$i++) { print " .quad $prefix$i\n"; }
+print <<___;
+.section .pdata,"r"
+.align 4
+___
+for ($i=1;$i<=$N;$i++) {
+print <<___;
+ .rva $prefix${i},$prefix${i}_end,${prefix}_unwind_info
+___
+}
+print <<___;
+.section .xdata,"r"
+.align 8
+${prefix}_unwind_info:
+ .byte 0x01,0x04,0x01,0x00
+ .byte 0x04,0x42,0x00,0x00
+___
+
+close STDOUT;
diff --git a/ms/uplink.c b/ms/uplink.c
new file mode 100644
index 000000000000..48f31838fc78
--- /dev/null
+++ b/ms/uplink.c
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#if (defined(_WIN64) || defined(_WIN32_WCE)) && !defined(UNICODE)
+# define UNICODE
+#endif
+#if defined(UNICODE) && !defined(_UNICODE)
+# define _UNICODE
+#endif
+#if defined(_UNICODE) && !defined(UNICODE)
+# define UNICODE
+#endif
+
+#include <windows.h>
+#include <tchar.h>
+#include <stdio.h>
+#include "uplink.h"
+void OPENSSL_showfatal(const char *, ...);
+
+static TCHAR msg[128];
+
+static void unimplemented(void)
+{
+ OPENSSL_showfatal(sizeof(TCHAR) == sizeof(char) ? "%s\n" : "%S\n", msg);
+ TerminateProcess(GetCurrentProcess(), 1);
+}
+
+void OPENSSL_Uplink(volatile void **table, int index)
+{
+ static HMODULE volatile apphandle = NULL;
+ static void **volatile applinktable = NULL;
+ int len;
+ void (*func) (void) = unimplemented;
+ HANDLE h;
+ void **p;
+
+ /*
+ * Note that the below code is not MT-safe in respect to msg buffer, but
+ * what's the worst thing that can happen? Error message might be
+ * misleading or corrupted. As error condition is fatal and should never
+ * be risen, I accept the risk...
+ */
+ /*
+ * One can argue that I should have used InterlockedExchangePointer or
+ * something to update static variables and table[]. Well, store
+ * instructions are as atomic as they can get and assigned values are
+ * effectively constant... So that volatile qualifier should be
+ * sufficient [it prohibits compiler to reorder memory access
+ * instructions].
+ */
+ do {
+ len = _sntprintf(msg, sizeof(msg) / sizeof(TCHAR),
+ _T("OPENSSL_Uplink(%p,%02X): "), table, index);
+ _tcscpy(msg + len, _T("unimplemented function"));
+
+ if ((h = apphandle) == NULL) {
+ if ((h = GetModuleHandle(NULL)) == NULL) {
+ apphandle = (HMODULE) - 1;
+ _tcscpy(msg + len, _T("no host application"));
+ break;
+ }
+ apphandle = h;
+ }
+ if ((h = apphandle) == (HMODULE) - 1) /* revalidate */
+ break;
+
+ if (applinktable == NULL) {
+ void **(*applink) ();
+
+ applink = (void **(*)())GetProcAddress(h, "OPENSSL_Applink");
+ if (applink == NULL) {
+ apphandle = (HMODULE) - 1;
+ _tcscpy(msg + len, _T("no OPENSSL_Applink"));
+ break;
+ }
+ p = (*applink) ();
+ if (p == NULL) {
+ apphandle = (HMODULE) - 1;
+ _tcscpy(msg + len, _T("no ApplinkTable"));
+ break;
+ }
+ applinktable = p;
+ } else
+ p = applinktable;
+
+ if (index > (int)p[0])
+ break;
+
+ if (p[index])
+ func = p[index];
+ } while (0);
+
+ table[index] = func;
+}
+
+#if (defined(_MSC_VER) || defined(__BORLANDC__)) && defined(_M_IX86)
+# if defined(_MSC_VER)
+# define LAZY(i) \
+__declspec(naked) static void lazy##i (void) { \
+ _asm push i \
+ _asm push OFFSET OPENSSL_UplinkTable \
+ _asm call OPENSSL_Uplink \
+ _asm add esp,8 \
+ _asm jmp OPENSSL_UplinkTable+4*i }
+# elif defined(__BORLANDC__) && defined(__clang__)
+void *OPENSSL_UplinkTable[26]; /* C++Builder requires declaration before use */
+# define LAZY(i) \
+__declspec(naked) static void lazy##i (void) { \
+ __asm__("pushl $" #i "; " \
+ "pushl %0; " \
+ "call %P1; " \
+ "addl $8, %%esp; " \
+ "jmp *%2 " \
+ : /* no outputs */ \
+ : "i" (OPENSSL_UplinkTable), \
+ "i" (OPENSSL_Uplink), \
+ "m" (OPENSSL_UplinkTable[i])); }
+# endif
+
+# if APPLINK_MAX>25
+# error "Add more stubs..."
+# endif
+/* make some in advance... */
+LAZY(1) LAZY(2) LAZY(3) LAZY(4) LAZY(5)
+ LAZY(6) LAZY(7) LAZY(8) LAZY(9) LAZY(10)
+ LAZY(11) LAZY(12) LAZY(13) LAZY(14) LAZY(15)
+ LAZY(16) LAZY(17) LAZY(18) LAZY(19) LAZY(20)
+ LAZY(21) LAZY(22) LAZY(23) LAZY(24) LAZY(25)
+void *OPENSSL_UplinkTable[] = {
+ (void *)APPLINK_MAX,
+ lazy1, lazy2, lazy3, lazy4, lazy5,
+ lazy6, lazy7, lazy8, lazy9, lazy10,
+ lazy11, lazy12, lazy13, lazy14, lazy15,
+ lazy16, lazy17, lazy18, lazy19, lazy20,
+ lazy21, lazy22, lazy23, lazy24, lazy25,
+};
+#endif
+
+#ifdef SELFTEST
+main()
+{
+ UP_fprintf(UP_stdout, "hello, world!\n");
+}
+#endif
diff --git a/ms/uplink.h b/ms/uplink.h
new file mode 100644
index 000000000000..b9cc1f9dd40f
--- /dev/null
+++ b/ms/uplink.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2004-2016 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
+ */
+
+#define APPMACROS_ONLY
+#include "applink.c"
+
+extern void *OPENSSL_UplinkTable[];
+
+#define UP_stdin (*(void *(*)(void))OPENSSL_UplinkTable[APPLINK_STDIN])()
+#define UP_stdout (*(void *(*)(void))OPENSSL_UplinkTable[APPLINK_STDOUT])()
+#define UP_stderr (*(void *(*)(void))OPENSSL_UplinkTable[APPLINK_STDERR])()
+#define UP_fprintf (*(int (*)(void *,const char *,...))OPENSSL_UplinkTable[APPLINK_FPRINTF])
+#define UP_fgets (*(char *(*)(char *,int,void *))OPENSSL_UplinkTable[APPLINK_FGETS])
+#define UP_fread (*(size_t (*)(void *,size_t,size_t,void *))OPENSSL_UplinkTable[APPLINK_FREAD])
+#define UP_fwrite (*(size_t (*)(const void *,size_t,size_t,void *))OPENSSL_UplinkTable[APPLINK_FWRITE])
+#define UP_fsetmod (*(int (*)(void *,char))OPENSSL_UplinkTable[APPLINK_FSETMOD])
+#define UP_feof (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FEOF])
+#define UP_fclose (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FCLOSE])
+
+#define UP_fopen (*(void *(*)(const char *,const char *))OPENSSL_UplinkTable[APPLINK_FOPEN])
+#define UP_fseek (*(int (*)(void *,long,int))OPENSSL_UplinkTable[APPLINK_FSEEK])
+#define UP_ftell (*(long (*)(void *))OPENSSL_UplinkTable[APPLINK_FTELL])
+#define UP_fflush (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FFLUSH])
+#define UP_ferror (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FERROR])
+#define UP_clearerr (*(void (*)(void *))OPENSSL_UplinkTable[APPLINK_CLEARERR])
+#define UP_fileno (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FILENO])
+
+#define UP_open (*(int (*)(const char *,int,...))OPENSSL_UplinkTable[APPLINK_OPEN])
+#define UP_read (*(ossl_ssize_t (*)(int,void *,size_t))OPENSSL_UplinkTable[APPLINK_READ])
+#define UP_write (*(ossl_ssize_t (*)(int,const void *,size_t))OPENSSL_UplinkTable[APPLINK_WRITE])
+#define UP_lseek (*(long (*)(int,long,int))OPENSSL_UplinkTable[APPLINK_LSEEK])
+#define UP_close (*(int (*)(int))OPENSSL_UplinkTable[APPLINK_CLOSE])
diff --git a/os-dep/haiku.h b/os-dep/haiku.h
new file mode 100644
index 000000000000..18e8a59baf6b
--- /dev/null
+++ b/os-dep/haiku.h
@@ -0,0 +1,11 @@
+/*
+ * Copyright 2022 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 <sys/select.h>
+#include <sys/time.h>
diff --git a/providers/fips-sources.checksums b/providers/fips-sources.checksums
index fa977f5a9838..c45b03060675 100644
--- a/providers/fips-sources.checksums
+++ b/providers/fips-sources.checksums
@@ -77,19 +77,19 @@ da7f7780d27eed164797e5334cd45b35d9c113e86afaca051463aef9a8fd787c crypto/bn/asm/
2893b6d03d4850d09c15959941b0759bbb50d8c20e873bed088e7cde4e15a65a crypto/bn/bn_ctx.c
d94295953ab91469fe2b9da2a542b8ea11ac38551ecde8f8202b7f645c2dea16 crypto/bn/bn_dh.c
74b63a4515894592b7241fb30b91b21510beaa3d397809e3d74bc9a73e879d18 crypto/bn/bn_div.c
-a29b8b7fa8460f11e50f880e3c3c9e0755b93889bcbb5476206c4d938a9c5735 crypto/bn/bn_exp.c
+49e59eac540db304ab0ca7bee3ba9d45f89548fff98155561bbdb6602d0aab1d crypto/bn/bn_exp.c
ec2b6e3af6df473a23e7f1a8522f2554cb0eb5d34e3282458c4a66d242278434 crypto/bn/bn_exp2.c
baba7c8ae95af6aa36bc9f4be3a2eed33d500451e568ca4bfc6bc7cb48d4f7ea crypto/bn/bn_gcd.c
-4d6cc7ed36978247a191df1eea0120f8ee97b639ba228793dabe5a8355a1a609 crypto/bn/bn_gf2m.c
+5fbb1ab8463cd5544a1d95cf7996b6387ae634984a42256b7a21482ce3ac30a2 crypto/bn/bn_gf2m.c
081e8a6abc23599307dab3b1a92113a65e0bf8717cbc40c970c7469350bc4581 crypto/bn/bn_intern.c
602ed46fbfe12c899dfb7d9d99ff0dbfff96b454fce3cd02817f3e2488dd9192 crypto/bn/bn_kron.c
bf73a1788a92142963177fb698bc518af9981bbf0ad9784701fbb2462ca10607 crypto/bn/bn_lib.c
d5beb9fbac2ff5dc3ccbdfa4d1aabca7225c778cff4e3b05b6d6c63e182637f5 crypto/bn/bn_local.h
-07247dc2ccc55f3be525baed92fd20031bbaa80fd0bc56155e80ee0da3fc943d crypto/bn/bn_mod.c
+96f98cdf50087c5b567c31bf2581728623206d79b3f97f5a0c5fdaa0009e6e3c crypto/bn/bn_mod.c
f60f3d49b183b04bcdf9b82f7c961b8c1bcb00e68a2c1166fe9edd95a783356e crypto/bn/bn_mont.c
2da73a76b746a47d8cf8ec8b3e0708c2a34e810abde4b4f1241a49e7f5bb2b60 crypto/bn/bn_mpi.c
76982b18b0803d59b33168b260677e7412970757d3b9513de5c80025290f211d crypto/bn/bn_mul.c
-1f65ad369352d51af1a75eccf598cb497b400ebd86252f5ca8aac54bbb3cc7bd crypto/bn/bn_nist.c
+b3677b73ac29aab660c9a549f7af154ca14347fac5cffd43b153a75211f1373f crypto/bn/bn_nist.c
c6760a724d696b7209f0a71f8483fabcf4f081f7e93e2628284c32ef78f69365 crypto/bn/bn_prime.c
c56ad3073108a0de21c5820a48beae2bccdbf5aa8075ec21738878222eb9adc3 crypto/bn/bn_prime.h
628419eabdb88b265823e43a7a1c88fdfecef79771180836f6089050dc9eadb1 crypto/bn/bn_rand.c
@@ -122,11 +122,11 @@ eeef5722ad56bf1af2ff71681bcc8b8525bc7077e973c98cee920ce9bcc66c81 crypto/des/ecb
61926e30dd940616e80936d1c94c5f522daf0d475fb3a40a9e589e78f322901e crypto/des/set_key.c
8344811b14d151f6cd40a7bc45c8f4a1106252b119c1d5e6a589a023f39b107d crypto/des/spr.h
816472a54c273906d0a2b58650e0b9d28cc2c8023d120f0d77160f1fe34c4ca3 crypto/dh/dh_backend.c
-fcbfe5acb73e1b4094efec56a754b803d2c1a53644c78cf6a73ae868e3f3886d crypto/dh/dh_check.c
+24cf9462da6632c52b726041271f8a43dfb3f74414abe460d9cc9c7fd2fd2d7d crypto/dh/dh_check.c
7838e9a35870b0fbcba0aff2f52a2439f64d026e9922bce6e5978c2f22c51120 crypto/dh/dh_gen.c
6b17861887b2535159b9e6ca4f927767dad3e71b6e8be50055bc784f78e92d64 crypto/dh/dh_group_params.c
a5cf5cb464b40f1bc5457dc2a6f2c5ec0f050196603cd2ba7037a23ab64adbf7 crypto/dh/dh_kdf.c
-9e61a0b5017d835b348b15e93760c42d8d899ffae4251455c7b3085cfd25294c crypto/dh/dh_key.c
+b0c248efc7dad48eaceb939a18cb2592cbfe5b02dd406592e5e590645488b153 crypto/dh/dh_key.c
92345c259ea2a8c09e6d6b069d0942bd6ca4642231580f3e8148ae7a832a1115 crypto/dh/dh_lib.c
8300775d88db0a1aa26a77eb49d6c4f7252e7fee69e1440de4c40edadc9da044 crypto/dh/dh_local.h
bbcf4fc3067ac462a27d7277973180b7dc140df9262a686c7fbe4318ca01f7b8 crypto/dsa/dsa_backend.c
@@ -186,7 +186,7 @@ f686cea8c8a3259d95c1e6142813d9da47b6d624c62f26c7e4a16d5607cddb35 crypto/ec/ecds
f288c23b6f83740956886b2303c64d5a3098c98b530859c3bb4b698c01c1643b crypto/ec/ecp_nistz256.c
51cb98e7e9c241e33261589f0d74103238baaa850e333c61ff1da360e127518a crypto/ec/ecp_oct.c
b4b7c683279454ba41438f50a015cb63ef056ccb9be0168918dfbae00313dc68 crypto/ec/ecp_smpl.c
-2096e13aa2fbcb0d4b10faca3e3f5359cf66098b0397a6d74c6fca14f5dee659 crypto/ec/ecx_backend.c
+e2705097cfab64e8d7eb2feba37c3f12b18aec74b135ad0c7f073efccf336d4c crypto/ec/ecx_backend.c
5ee19c357c318b2948ff5d9118a626a6207af2b2eade7d8536051d4a522668d3 crypto/ec/ecx_backend.h
22c44f561ab42d1bd7fd3a3c538ebaba375a704f98056b035e7949d73963c580 crypto/ec/ecx_key.c
28abc295dad8888b5482eb61d31cd78dd80545ecb67dc6f9446a36deb8c40a5e crypto/evp/asymcipher.c
@@ -194,7 +194,7 @@ b4b7c683279454ba41438f50a015cb63ef056ccb9be0168918dfbae00313dc68 crypto/ec/ecp_
1af3872164b4a4757bc7896a24b4d2f8eb2cfb4cba0d872a93db69975693e0a6 crypto/evp/digest.c
838277f228cd3025cf95a9cd435e5606ad1fb5d207bbb057aa29892e6a657c55 crypto/evp/ec_support.c
61df3942752307b7006f09d7628348a0cc9e5555469a3a8862349067a52824b7 crypto/evp/evp_enc.c
-7f10367f9b6191c4a8c01784130d26b2d778485a41cdac5fa17c9a1c4096f132 crypto/evp/evp_fetch.c
+62c994fd91dc4a5a1a81dfa9391d6eadae62d3549b2e1b22acb2e7c4cd278f27 crypto/evp/evp_fetch.c
ebe32b2895f7f9767710674352c8949efe93b4bbb5e7b71c27bb5d1822339b46 crypto/evp/evp_lib.c
78f07bf50b6999611a4e9414ab3a20b219b0ab29ca2bd05002d6919a3f67b8eb crypto/evp/evp_local.h
117e679d49d2ae87e49d3c942ff0ce768959e8b9713f84a99025cabba462ccd5 crypto/evp/evp_rand.c
@@ -251,20 +251,20 @@ e55a816c356b2d526bc6e40c8b81afa02576e4d44c7d7b6bbe444fb8b01aad41 crypto/modes/w
608a04f387be2a509b4d4ad414b7015ab833e56b85020e692e193160f36883a2 crypto/modes/xts128.c
8aa2504f84a0637b5122f0c963c9d82773ba248bad972ab92be7169995d162b5 crypto/o_str.c
8ddbbdf43131c10dcd4428aef0eff2b1e98b0410accada0fad41a4925868beef crypto/packet.c
-a20bfd927d69737c86ca95d3cf636afa8cefd8fe23412d1a3897644a0da21211 crypto/param_build.c
+c698d5166d091d6bb6e9df3c211fe1cc916fd43a26ec844f28f547cd708f9c55 crypto/param_build.c
2a0f272dd553b698e8c6fa57962694ebd6064cb03fe26a60df529205568d315d crypto/param_build_set.c
0e4a5388a92fabbe5a540176c0b4c5ce258b78dc9168ecc2e805352a06aaf0ba crypto/params.c
4fda13f6af05d80b0ab89ec4f5813c274a21a9b4565be958a02d006236cef05c crypto/params_dup.c
-a0097ff2da8955fe15ba204cb54f3fd48a06f846e2b9826f507b26acf65715c3 crypto/params_from_text.c
+b6cbfc8791b31587f32a3f9e4c117549793528ebddc34a361bad1ad8cf8d4c42 crypto/params_from_text.c
97cb7414dc2f165d5849ee3b46cdfff0afb067729435d9c01a747e0ca41e230c crypto/ppccap.c
3ca43596a7528dec8ff9d1a3cd0d68b62640f84b1d6a8b5e4842cfd0be1133ad crypto/ppccpuid.pl
b4d34272a0bd1fbe6562022bf7ea6259b6a5a021a48222d415be47ef5ef2a905 crypto/property/defn_cache.c
3c4ade2fed4605e374d85ec1134a98da34e7124f89f44b81a754e8cfe81f14ba crypto/property/property.c
66da4f28d408133fb544b14aeb9ad4913e7c5c67e2826e53f0dc5bf4d8fada26 crypto/property/property_local.h
-099407e68e705f1458b701b9336f633565fc0843355fedf1ec83794349548a51 crypto/property/property_parse.c
+37dba5e1f8a2f8cb8a69e491d52386359c9d08a3c7e43ac1c7a989b72b71593c crypto/property/property_parse.c
a7cefda6a117550e2c76e0f307565ce1e11640b11ba10c80e469a837fd1212a3 crypto/property/property_query.c
065698c8d88a5facc0cbc02a3bd0c642c94687a8c5dd79901c942138b406067d crypto/property/property_string.c
-0ba5d0297837940c972224c97cbbf3ea4a723c1eed9ce1112538c9bb26208639 crypto/provider_core.c
+0b38639ffc696d6037ace06cc0169bb5c411ee1c6bacc1fa18b3abd82000e69f crypto/provider_core.c
d0af10d4091b2032aac1b7db80f8c2e14fa7176592716b25b9437ab6b53c0a89 crypto/provider_local.h
5ba2e1c74ddcd0453d02e32612299d1eef18eff8493a7606c15d0dc3738ad1d9 crypto/provider_predefined.c
a5a4472636b8b0095ad8d4acd37e275ad79da1a67ecff7b7b5c3e46c9ebc65b7 crypto/rand/rand_lib.c
@@ -284,7 +284,7 @@ be3f39c1fcb777d6c0122061f9ef735d10a6bee95d67fcc1ca6ae2a664022d2b crypto/rsa/rsa
174a42e156be48927fe6d6bf0d95575619b8e643a99761275bff933bc3449722 crypto/rsa/rsa_pss.c
bf6d300b7e7e9e512a47c5bd1f8713806ae3033a140d83dfae4a16ad58d11170 crypto/rsa/rsa_schemes.c
f01af62704dbf9457e2669c3e7c1d4d740f0388faa49df93611b987a8aa2bf11 crypto/rsa/rsa_sign.c
-740c022caff3b2487c5838b581cdddcc7de2ceabb504aad72dc0dd70a67bf7cf crypto/rsa/rsa_sp800_56b_check.c
+42d821612b0b0d62f587beb8a0cab8b8d876fedccd6913fec6d2044f8ac52b63 crypto/rsa/rsa_sp800_56b_check.c
3aba73dacebb046faf8d09dc279149b52c629004b524ec33e6d81c8ad0bc31a8 crypto/rsa/rsa_sp800_56b_gen.c
1c1c2aeeb18bf1d69e8f134315b7e50d8f43d30eb1aa5bf42983eec9136a2fdc crypto/rsa/rsa_x931.c
0acbebed48f6242d595c21e3c1ad69da0daa960d62062e8970209deda144f337 crypto/s390xcap.c
@@ -381,7 +381,7 @@ c5bb97f654984130c8b44c09a52395bce0b22985d5dbc9c4d9377d86283f11f8 include/intern
fd1722d6b79520ee4ac477280d5131eb1b744c3b422fd15f5e737ef966a97c3b include/internal/dso.h
f144daebef828a5bd4416466257a50f06b894e0ce0adf1601aa381f34f25a9e7 include/internal/dsoerr.h
70d3e0d5a1bd8db58dcc57bea4d1c3ed816c735fe0e6b2f4b07073712d2dc5ef include/internal/endian.h
-094b69aeb8f349cafa8865b577e253132088c25eabb61b910fab141e6f7d2929 include/internal/ffc.h
+7854b5c1cd786dc01d052204c5b3ea946dc9929590f47ec4c27697387c5b7ce5 include/internal/ffc.h
100053a1bad1a85a98c5b919cf81ace0ee147b2164732963e40474d7b5fbbb99 include/internal/namemap.h
b02701592960eb4608bb83b297eed90184004828c7fc03ea81568062f347623d include/internal/nelem.h
ae41a2fb41bf592bbb47e4855cf4efd9ef85fc11f910a7e195ceef78fb4321dc include/internal/numbers.h
@@ -390,7 +390,7 @@ dd7ddecf30bef3002313e6b776ce34d660931e783b2f6edacf64c7c6e729e688 include/intern
d4ac19b28ea61f03383364cfad1e941cac44fc36787d80882c5b76ecc9d34e29 include/internal/property.h
727326afb3d33fdffdf26471e313f27892708318c0934089369e4b28267e2635 include/internal/propertyerr.h
6a899ef3e360c7144d84d3c3dbbd14aa457f5d38b83b13c0be7ec7f372076595 include/internal/provider.h
-80d7d12b8b3d9945bde3991cb0d1413d120a58a04b17ac673549789e3f37b18a include/internal/refcount.h
+34432d71c49dc8ee9926218ba78bdcd03c46cee4e966ee20d100e4519d85b064 include/internal/refcount.h
11ee9893f7774c83fcfdee6e0ca593af3d28b779107883553facdbfdae3a68f5 include/internal/sha3.h
494ab5c802716bf38032986674fb094dde927a21752fe395d82e6044d81801d1 include/internal/sizes.h
24f41a1985fa305833c3f58030c494d2563d15fc922cdf3eeb6a7ea8c135a880 include/internal/symhacks.h
@@ -401,7 +401,7 @@ fc0f9199487ef278b9fd317d1572db3e3fb95e182055f0e49c4d8faf78ed7dd2 include/intern
98aa2fc5eae9ef2a36d3d0053212696d58893baa083fa1fcf720660fb4bc0a9f include/openssl/asn1.h.in
d4733dcd490b3a2554eaf859d1ea964fe76f7d24f78e42be1094bdad6dee7429 include/openssl/asn1err.h
1550474ee05423896ec4abfb6346f1bc44c7be22329efac9ea25de10e81d549c include/openssl/asn1t.h.in
-2cd8163cdc6c93386bc05e8ed983e5ca604d0bf9da65500cab736cfa8bc2b048 include/openssl/bio.h.in
+dbd1501acb0804eec0f2aa7bbac4dbc483cf2b4691c6eb1436461b5ed4685b42 include/openssl/bio.h.in
0a26138aaded05cafe2326e11fdc19b28408e054cfe3dda40d45ef95ce8136b0 include/openssl/bioerr.h
7d1f9880976a926ba6e0cad08e8de6f326aae48d8350b499aa79127f63d4d108 include/openssl/bn.h
9ad8b04764797f5138f01f549ba18b44cf698ffc7fe795fef42c1822d84a6ff4 include/openssl/bnerr.h
@@ -409,7 +409,7 @@ d4733dcd490b3a2554eaf859d1ea964fe76f7d24f78e42be1094bdad6dee7429 include/openss
9d48e6cab2ee98ae94d7113e4c65f000d97e125fdb3445642865ace3f34d06ac include/openssl/buffererr.h
8e772c24b051e59d2f65339f54584e3e44165a3eaf997d497faea764990130f5 include/openssl/cmac.h
55aa91482d327d1784484922389e8277bdcdff7a7df27e84200d5c908bd40454 include/openssl/conf.h.in
-f20c3c845129a129f5e0b1dae970d86a5c96ab49f2e3f6f364734521e9e1abe3 include/openssl/conferr.h
+bb45de4eafdd89c14096e9af9b0aee12b09adcee43b9313a3a373294dec99142 include/openssl/conferr.h
02a1baff7b71a298419c6c5dcb43eaa9cc13e9beeb88c03fb14854b4e84e8862 include/openssl/configuration.h.in
6b3810dac6c9d6f5ee36a10ad6d895a5e4553afdfb9641ce9b7dc5db7eef30b7 include/openssl/conftypes.h
df5e60af861665675e4a00d40d15e36884f940e3379c7b45c9f717eaf1942697 include/openssl/core.h
@@ -420,7 +420,7 @@ cbd9d7855ca3ba4240207fc025c22bbfef7411116446ff63511e336a0559bed0 include/openss
bbc82260cbcadd406091f39b9e3b5ea63146d9a4822623ead16fa12c43ab9fc6 include/openssl/cryptoerr_legacy.h
fa3e6b6c2e6222424b9cd7005e3c5499a2334c831cd5d6a29256ce945be8cb1d include/openssl/des.h
75fba45d6fc66e3aaef216959327157613f08070935aae4a5260e740184f031f include/openssl/dh.h
-836130f5a32bbdce51b97b34758ed1b03a9d06065c187418eaf323dca6adfc6d include/openssl/dherr.h
+ab7ba5d7eb18d2ea8abc6862ae2ceaa1fa116a702c2bff617c5ae1651d97b6bc include/openssl/dherr.h
92ae2c907fd56859e3ae28a085071611be5c9245879305cdf8bad027219e64b6 include/openssl/dsa.h
276d1f6e111ba933bc708e6a0670047cbe0d0b67aabe31807abbbc231de4d8cf include/openssl/dsaerr.h
41bf49e64e1c341a8c17778147ddeba35e88dfd7ff131db6210e801ef25a8fd5 include/openssl/e_os2.h
@@ -500,28 +500,28 @@ abd5997bc33b681a4ab275978b92aebca0806a4a3f0c2f41dacf11b3b6f4e101 providers/fips
f822a03138e8b83ccaa910b89d72f31691da6778bf6638181f993ec7ae1167e3 providers/fips/self_test.h
d3c95c9c6cc4e3b1a5e4b2bfb2ae735a4109d763bcda7b1e9b8f9eb253f79820 providers/fips/self_test_data.inc
629f619ad055723e42624230c08430a3ef53e17ab405dc0fd35499e9ca4e389c providers/fips/self_test_kats.c
-cd784a44a01a8a30a6be63381344a7f5432e74d40b02ea471c5b0dc943a7ac9d providers/implementations/asymciphers/rsa_enc.c
+99baeec10374301e90352ab637056104a8ea28a6880804f44c640d0c9ee16eba providers/implementations/asymciphers/rsa_enc.c
4db1826ecce8b60cb641bcd7a61430ec8cef73d2fe3cbc06aa33526afe1c954a providers/implementations/ciphers/cipher_aes.c
-f9d4b30e7110c90064b990c07430bb79061f4436b06ccaa981b25c306cfbfaa2 providers/implementations/ciphers/cipher_aes.h
-89378cce6d31e8c2f221f9f29d0b17622624eb83e4ecec8465f7641f68352917 providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c
+6ba7d817081cf0d87ba7bfb38cd9d70e41505480bb8bc796ef896f68d4514ea6 providers/implementations/ciphers/cipher_aes.h
+aef500281e7cd5a25a806a9bd45ec00a5b73984673202527dac5896fbcc9fa9c providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c
7668e5c1cac474ad7b0f28aa78ca885edf44815fe4a606a6cd328b3c02fac25a providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.h
26e0f28523b416ba4067e471061f5a11fd76f5dc8bfe57ce37a137cf5667630b providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c
6d2ab2e059ef38fad342d4c65eebd533c08a2092bb174ff3566c6604e175c5a4 providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c
-6d6bf36329af3b77f457898294be05fea3940a61cdaf0ed60cfb8d091a94186e providers/implementations/ciphers/cipher_aes_ccm.c
+f37c3cf9e2e6fcfcbed941f3670b790fe09990349db72eb065bef51705d46e96 providers/implementations/ciphers/cipher_aes_ccm.c
00f36bf48e522dbb5ec71df0ec13e387955fa3672e6ff90e8a412ae95c4a642f providers/implementations/ciphers/cipher_aes_ccm.h
6337b570e0dc4e98af07aa9704254d3ab958cf605584e250fbd76cd1d2a25ac7 providers/implementations/ciphers/cipher_aes_ccm_hw.c
302b3819ff9fdfed750185421616b248b0e1233d75b45a065490fe4762b42f55 providers/implementations/ciphers/cipher_aes_ccm_hw_aesni.inc
a8eaca99a71521ff8ac4ffcf08315e59220f7e0b7f505ecddad04fadd021ec14 providers/implementations/ciphers/cipher_aes_cts.inc
-710ee60704dd9dffa2a11e2e96596af1f7f84f915cedcedeec7292e0d978317a providers/implementations/ciphers/cipher_aes_gcm.c
+7e886ecc088b5903aa082eac72a4c46f9064392bdf5723a592368ecebfeb71c0 providers/implementations/ciphers/cipher_aes_gcm.c
79f5a732820d2512a7f4fc2a99ece7e6e2523a51e62561eb67a4b70d5538b0c4 providers/implementations/ciphers/cipher_aes_gcm.h
ab298c5f89f3165fa11093fad8063b7bcbff0924b43fb3107148ae66d54adcb5 providers/implementations/ciphers/cipher_aes_gcm_hw.c
8ed4a100e4756c31c56147b4b0fab76a4c6e5292aa2f079045f37b5502fd41b9 providers/implementations/ciphers/cipher_aes_gcm_hw_aesni.inc
4c6f3a2818754a5aa7b6db36dae53e248504f9e82cc5af2ed68c723903d4f9d5 providers/implementations/ciphers/cipher_aes_hw.c
89de794c090192459d99d95bc4a422e7782e62192cd0fdb3bdef4128cfedee68 providers/implementations/ciphers/cipher_aes_hw_aesni.inc
-0264d1ea3ece6f730b342586fb1fe00e3f0ff01e47d53f552864df986bf35573 providers/implementations/ciphers/cipher_aes_ocb.c
+fac3a1878dc9c0c363d0ecdd9f74926157df54ca4f40adf8c479927395082008 providers/implementations/ciphers/cipher_aes_ocb.c
88138a1aff9705e608c0557653be92eb4de65b152555a2b79ec8b2a8fae73e8f providers/implementations/ciphers/cipher_aes_ocb.h
855869ab5a8d7a61a11674cfe5d503dfa67f59e7e393730835d1d8cf0ab85c70 providers/implementations/ciphers/cipher_aes_ocb_hw.c
-a872195161ac6c3a2cb59c3d15b212e34bb7596a41712258f5d0b5e771e25239 providers/implementations/ciphers/cipher_aes_wrp.c
+6a8782c728575d69c86b735c9f47acda5c0daa04e17f1e0faef2c963f23fab20 providers/implementations/ciphers/cipher_aes_wrp.c
527ff9277b92606517ee7af13225a9d5fcffbbc36eb18bce39f59d594cbe4931 providers/implementations/ciphers/cipher_aes_xts.c
c4a2499b214d7cf786dafaaee5c8c6963b3d5d1c27c144eec4b460f839074a3b providers/implementations/ciphers/cipher_aes_xts.h
281157d1da4d7285d878978e6d42d0d33b3a6bc16e3bc5b6879e39093a7d70da providers/implementations/ciphers/cipher_aes_xts_fips.c
@@ -530,13 +530,13 @@ f358c4121a8a223e2c6cf009fd28b8a195520279016462890214e8858880f632 providers/impl
74640ce402acc704af72e055fb7f27e6aa8efd417babc56f710478e571d8631c providers/implementations/ciphers/cipher_cts.h
fcc3bb0637864252402aaa9d543209909df9a39611127f777b168bc888498dc0 providers/implementations/ciphers/cipher_tdes.c
77709f7fc3f7c08986cd4f0ebf2ef6e44bacb975c1483ef444b3cf5e5071f9d6 providers/implementations/ciphers/cipher_tdes.h
-6fc41326c5f464f27b7d31c16d5ad7116d6244b99e242893f6c96d0c61f3639a providers/implementations/ciphers/cipher_tdes_common.c
+f6b81faf6abf3baa926be7c054cda1ff2be109b0a2143b34b2f2d266b6cb2c52 providers/implementations/ciphers/cipher_tdes_common.c
50645122f08ef4891cd96cace833bd550be7f5278ab785515fd61fe8993c8c25 providers/implementations/ciphers/cipher_tdes_hw.c
-6bb3c24bfd872e3b4c779b29e9f962348f6ae3effeb4f243c8ea66abefe8a4fa providers/implementations/ciphers/ciphercommon.c
+1f44963b1ac450cb77d75df9fbf956b04742e38d236d316c7eb8021bdf0573a4 providers/implementations/ciphers/ciphercommon.c
dd72ea861edf70b94197821ceb00e07165d550934a2e851d62afa5034b79f468 providers/implementations/ciphers/ciphercommon_block.c
-4b4106f85e36eb2c07acc5a3ca5ccd77b736b3ac46cc4af786cf57405ecd54b2 providers/implementations/ciphers/ciphercommon_ccm.c
+8af515e63a0c16ff35dcedcc43c7b4735a10943f1e937eeeb73eb1af3dc92782 providers/implementations/ciphers/ciphercommon_ccm.c
8b6828f188c2590c7d9c6cac13fa0eb6d38a522b0f2859e7c8a766580fa9b66e providers/implementations/ciphers/ciphercommon_ccm_hw.c
-3b83f58d6ff1ae77de1ae8bee8a44ea2e5e4491c802b156fa77783ddebd44598 providers/implementations/ciphers/ciphercommon_gcm.c
+142785a128a0d694e2457e7d79da545791b73ae388dcf700b538763099f91f65 providers/implementations/ciphers/ciphercommon_gcm.c
bb67eaa7a98494ca938726f9218213870fc97dd87b56bda950626cc794baf20b providers/implementations/ciphers/ciphercommon_gcm_hw.c
23fd89e3239e596c325a8c5d23eb1fe157a8d23aa4d90ed2c574bf06dfabd693 providers/implementations/ciphers/ciphercommon_hw.c
c4b1cb143de15acc396ce2e03fdd165defd25ebc831de9cdfacf408ea883c666 providers/implementations/ciphers/ciphercommon_local.h
@@ -547,8 +547,8 @@ b5f94d597df72ca58486c59b2a70b4057d13f09528f861ed41a84b7125b54a82 providers/impl
9c46dc0d859875fcc0bc3d61a7b610cd3520b1bf63718775c1124f54a1fe5f24 providers/implementations/exchange/ecdh_exch.c
9bf87b8429398a6465c7e9f749a33b84974303a458736b56f3359b30726d3969 providers/implementations/exchange/ecx_exch.c
0cc02005660c5c340660123decac838c59b7460ef1003d9d50edc604cfd8e375 providers/implementations/exchange/kdf_exch.c
-31d3dba3d2e6b043b0d14a74caf6bf1a6c550471fb992a495ab7d3337081a526 providers/implementations/include/prov/ciphercommon.h
-6dc876a1a785420e84210f085be6e4c7aca407ffb5433dbca4cd3f1c11bb7f06 providers/implementations/include/prov/ciphercommon_aead.h
+a0d1c1d49557d32497877b2d549d2a7a7729a550306275bfe6ddcefca0d8fc80 providers/implementations/include/prov/ciphercommon.h
+a9f5de1623221f327245957ec1dfd66a1914bff25adf4bcb81213c7955d19382 providers/implementations/include/prov/ciphercommon_aead.h
dd07797d61988fd4124cfb920616df672938da80649fac5977bfd061c981edc5 providers/implementations/include/prov/ciphercommon_ccm.h
0c1e99d70155402a790e4de65923228c8df8ad970741caccfe8b513837457d7f providers/implementations/include/prov/ciphercommon_gcm.h
b9a61ce951c1904d8315b1bb26c0ab0aaadb47e71d4ead5df0a891608c728c4b providers/implementations/include/prov/digestcommon.h
@@ -575,7 +575,7 @@ a329f57cb041cd03907e9d996fbc2f378ee116c7f8d7fbf1ea08b7a5df7e0304 providers/impl
053a2be39a87f50b877ebdbbf799cf5faf8b2de33b04311d819d212ee1ea329b providers/implementations/keymgmt/kdf_legacy_kmgmt.c
1646b477fa231dd0f6c22444c99098f9b447cab0d39ff69b811262469d4dbe09 providers/implementations/keymgmt/mac_legacy_kmgmt.c
19f22fc70a6321441e56d5bd4aab3d01d52d17069d4e4b5cefce0f411ecece75 providers/implementations/keymgmt/rsa_kmgmt.c
-aeb42590728ca87b916b8a3d337351b1c82ee0747213e5ce740c2350b3db7185 providers/implementations/macs/cmac_prov.c
+5eb96ea2df635cf79c5aeccae270fbe896b5e6384a5b3e4b187ce8c10fe8dfc7 providers/implementations/macs/cmac_prov.c
e69aa06f8f3c6f5a26702b9f44a844b8589b99dc0ee590953a29e8b9ef10acbe providers/implementations/macs/gmac_prov.c
895c8dc7235b9ad5ff893be0293cbc245a5455e8850195ac7d446646e4ea71d0 providers/implementations/macs/hmac_prov.c
8640b63fd8325aaf8f7128d6cc448d9af448a65bf51a8978075467d33a67944e providers/implementations/macs/kmac_prov.c
@@ -590,6 +590,6 @@ cafb9e6f54ad15889fcebddac6df61336bff7d78936f7de3bb5aab8aee5728d2 providers/impl
a30dc6308de0ca33406e7ce909f3bcf7580fb84d863b0976b275839f866258df providers/implementations/signature/ecdsa_sig.c
02e833a767afbe98247d6f09dfb1eb5a5cf7304a93f2c5427a9f6af9c8a3b549 providers/implementations/signature/eddsa_sig.c
3bb0f342b4cc1b4594ed0986adc47791c0a7b5c1ae7b1888c1fb5edb268a78d9 providers/implementations/signature/mac_legacy_sig.c
-5b5e51acce1f6e86581de9ee870e64772f69562362b34079ac65c5d6fffaddef providers/implementations/signature/rsa_sig.c
+166d7e3a049b28ae2c6f94415070720d176a82e46af1613511c4b073ea705476 providers/implementations/signature/rsa_sig.c
a14e901b02fe095713624db4080b3aa3ca685d43f9ebec03041f992240973346 ssl/record/tls_pad.c
3f2e01a98d9e3fda6cc5cb4b44dd43f6cae4ec34994e8f734d11b1e643e58636 ssl/s3_cbc.c
diff --git a/providers/fips.checksum b/providers/fips.checksum
index 347a9614339e..8fe82e025706 100644
--- a/providers/fips.checksum
+++ b/providers/fips.checksum
@@ -1 +1 @@
-114b59f288ec2d6ddfcd26187f43cad614c6d4e4a7aba24410494f46f627671c providers/fips-sources.checksums
+9597c676c418928e2ba5075a6352a7d5b398e64db622b577822391424300ed43 providers/fips-sources.checksums
diff --git a/providers/implementations/asymciphers/rsa_enc.c b/providers/implementations/asymciphers/rsa_enc.c
index d8659680587e..c8921acd6e61 100644
--- a/providers/implementations/asymciphers/rsa_enc.c
+++ b/providers/implementations/asymciphers/rsa_enc.c
@@ -555,6 +555,7 @@ static int rsa_set_ctx_params(void *vprsactx, const OSSL_PARAM params[])
static const OSSL_PARAM known_settable_ctx_params[] = {
OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST, NULL, 0),
+ OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS, NULL, 0),
OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, NULL, 0),
OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST, NULL, 0),
OSSL_PARAM_utf8_string(OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS, NULL, 0),
diff --git a/providers/implementations/ciphers/cipher_aes.h b/providers/implementations/ciphers/cipher_aes.h
index 7eaf76c8c47d..c62ac5e7eaeb 100644
--- a/providers/implementations/ciphers/cipher_aes.h
+++ b/providers/implementations/ciphers/cipher_aes.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -44,7 +44,6 @@ typedef struct prov_aes_ctx_st {
/* KMO-AES/KMF-AES parameter block - end */
} param;
unsigned int fc;
- int res;
} s390x;
#endif /* defined(OPENSSL_CPUID_OBJ) && defined(__s390__) */
} plat;
diff --git a/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c b/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c
index f9a8a5804149..6e044576fe95 100644
--- a/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c
+++ b/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -334,6 +334,16 @@ static void *aes_cbc_hmac_sha1_newctx(void *provctx, size_t kbits,
return ctx;
}
+static void *aes_cbc_hmac_sha1_dupctx(void *provctx)
+{
+ PROV_AES_HMAC_SHA1_CTX *ctx = provctx;
+
+ if (ctx == NULL)
+ return NULL;
+
+ return OPENSSL_memdup(ctx, sizeof(*ctx));
+}
+
static void aes_cbc_hmac_sha1_freectx(void *vctx)
{
PROV_AES_HMAC_SHA1_CTX *ctx = (PROV_AES_HMAC_SHA1_CTX *)vctx;
@@ -361,6 +371,13 @@ static void *aes_cbc_hmac_sha256_newctx(void *provctx, size_t kbits,
return ctx;
}
+static void *aes_cbc_hmac_sha256_dupctx(void *provctx)
+{
+ PROV_AES_HMAC_SHA256_CTX *ctx = provctx;
+
+ return OPENSSL_memdup(ctx, sizeof(*ctx));
+}
+
static void aes_cbc_hmac_sha256_freectx(void *vctx)
{
PROV_AES_HMAC_SHA256_CTX *ctx = (PROV_AES_HMAC_SHA256_CTX *)vctx;
@@ -386,6 +403,7 @@ static int nm##_##kbits##_##sub##_get_params(OSSL_PARAM params[]) \
const OSSL_DISPATCH ossl_##nm##kbits##sub##_functions[] = { \
{ OSSL_FUNC_CIPHER_NEWCTX, (void (*)(void))nm##_##kbits##_##sub##_newctx },\
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))nm##_##sub##_freectx }, \
+ { OSSL_FUNC_CIPHER_DUPCTX, (void (*)(void))nm##_##sub##_dupctx}, \
{ OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))nm##_einit }, \
{ OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))nm##_dinit }, \
{ OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))nm##_update }, \
diff --git a/providers/implementations/ciphers/cipher_aes_ccm.c b/providers/implementations/ciphers/cipher_aes_ccm.c
index bb4b1e1e6490..1aa788b2b34b 100644
--- a/providers/implementations/ciphers/cipher_aes_ccm.c
+++ b/providers/implementations/ciphers/cipher_aes_ccm.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -33,6 +33,26 @@ static void *aes_ccm_newctx(void *provctx, size_t keybits)
return ctx;
}
+static void *aes_ccm_dupctx(void *provctx)
+{
+ PROV_AES_CCM_CTX *ctx = provctx;
+ PROV_AES_CCM_CTX *dupctx = NULL;
+
+ if (ctx == NULL)
+ return NULL;
+ dupctx = OPENSSL_memdup(provctx, sizeof(*ctx));
+ if (dupctx == NULL)
+ return NULL;
+ /*
+ * ossl_cm_initctx, via the ossl_prov_aes_hw_ccm functions assign a
+ * provctx->ccm.ks.ks to the ccm context key so we need to point it to
+ * the memduped copy
+ */
+ dupctx->base.ccm_ctx.key = &dupctx->ccm.ks.ks;
+
+ return dupctx;
+}
+
static OSSL_FUNC_cipher_freectx_fn aes_ccm_freectx;
static void aes_ccm_freectx(void *vctx)
{
diff --git a/providers/implementations/ciphers/cipher_aes_gcm.c b/providers/implementations/ciphers/cipher_aes_gcm.c
index 0081ca6cd776..3dce743e8409 100644
--- a/providers/implementations/ciphers/cipher_aes_gcm.c
+++ b/providers/implementations/ciphers/cipher_aes_gcm.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -34,6 +34,21 @@ static void *aes_gcm_newctx(void *provctx, size_t keybits)
return ctx;
}
+static void *aes_gcm_dupctx(void *provctx)
+{
+ PROV_AES_GCM_CTX *ctx = provctx;
+ PROV_AES_GCM_CTX *dctx = NULL;
+
+ if (ctx == NULL)
+ return NULL;
+
+ dctx = OPENSSL_memdup(ctx, sizeof(*ctx));
+ if (dctx != NULL && dctx->base.gcm.key != NULL)
+ dctx->base.gcm.key = &dctx->ks.ks;
+
+ return dctx;
+}
+
static OSSL_FUNC_cipher_freectx_fn aes_gcm_freectx;
static void aes_gcm_freectx(void *vctx)
{
diff --git a/providers/implementations/ciphers/cipher_aes_hw_s390x.inc b/providers/implementations/ciphers/cipher_aes_hw_s390x.inc
index c8282dbd08a9..6c4a4cc99511 100644
--- a/providers/implementations/ciphers/cipher_aes_hw_s390x.inc
+++ b/providers/implementations/ciphers/cipher_aes_hw_s390x.inc
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2001-2024 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
@@ -58,7 +58,6 @@ static int s390x_aes_ofb128_initkey(PROV_CIPHER_CTX *dat,
memcpy(adat->plat.s390x.param.kmo_kmf.k, key, keylen);
adat->plat.s390x.fc = S390X_AES_FC(keylen);
- adat->plat.s390x.res = 0;
return 1;
}
@@ -66,7 +65,7 @@ static int s390x_aes_ofb128_cipher_hw(PROV_CIPHER_CTX *dat, unsigned char *out,
const unsigned char *in, size_t len)
{
PROV_AES_CTX *adat = (PROV_AES_CTX *)dat;
- int n = adat->plat.s390x.res;
+ int n = dat->num;
int rem;
memcpy(adat->plat.s390x.param.kmo_kmf.cv, dat->iv, dat->ivlen);
@@ -102,7 +101,7 @@ static int s390x_aes_ofb128_cipher_hw(PROV_CIPHER_CTX *dat, unsigned char *out,
}
memcpy(dat->iv, adat->plat.s390x.param.kmo_kmf.cv, dat->ivlen);
- adat->plat.s390x.res = n;
+ dat->num = n;
return 1;
}
@@ -113,7 +112,6 @@ static int s390x_aes_cfb128_initkey(PROV_CIPHER_CTX *dat,
adat->plat.s390x.fc = S390X_AES_FC(keylen);
adat->plat.s390x.fc |= 16 << 24; /* 16 bytes cipher feedback */
- adat->plat.s390x.res = 0;
memcpy(adat->plat.s390x.param.kmo_kmf.k, key, keylen);
return 1;
}
@@ -123,7 +121,7 @@ static int s390x_aes_cfb128_cipher_hw(PROV_CIPHER_CTX *dat, unsigned char *out,
{
PROV_AES_CTX *adat = (PROV_AES_CTX *)dat;
unsigned int modifier = adat->base.enc ? 0 : S390X_DECRYPT;
- int n = adat->plat.s390x.res;
+ int n = dat->num;
int rem;
unsigned char tmp;
@@ -164,7 +162,7 @@ static int s390x_aes_cfb128_cipher_hw(PROV_CIPHER_CTX *dat, unsigned char *out,
}
memcpy(dat->iv, adat->plat.s390x.param.kmo_kmf.cv, dat->ivlen);
- adat->plat.s390x.res = n;
+ dat->num = n;
return 1;
}
diff --git a/providers/implementations/ciphers/cipher_aes_ocb.c b/providers/implementations/ciphers/cipher_aes_ocb.c
index ce377ad57409..eab315453ef1 100644
--- a/providers/implementations/ciphers/cipher_aes_ocb.c
+++ b/providers/implementations/ciphers/cipher_aes_ocb.c
@@ -387,7 +387,10 @@ static int aes_ocb_set_ctx_params(void *vctx, const OSSL_PARAM params[])
/* IV len must be 1 to 15 */
if (sz < OCB_MIN_IV_LEN || sz > OCB_MAX_IV_LEN)
return 0;
- ctx->base.ivlen = sz;
+ if (ctx->base.ivlen != sz) {
+ ctx->base.ivlen = sz;
+ ctx->iv_state = IV_STATE_UNINITIALISED;
+ }
}
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_KEYLEN);
if (p != NULL) {
diff --git a/providers/implementations/ciphers/cipher_aes_wrp.c b/providers/implementations/ciphers/cipher_aes_wrp.c
index 8bddf475e24d..d44002fa69d9 100644
--- a/providers/implementations/ciphers/cipher_aes_wrp.c
+++ b/providers/implementations/ciphers/cipher_aes_wrp.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -66,6 +66,26 @@ static void *aes_wrap_newctx(size_t kbits, size_t blkbits,
return wctx;
}
+static void *aes_wrap_dupctx(void *wctx)
+{
+ PROV_AES_WRAP_CTX *ctx = wctx;
+ PROV_AES_WRAP_CTX *dctx = wctx;
+
+ if (ctx == NULL)
+ return NULL;
+ dctx = OPENSSL_memdup(ctx, sizeof(*ctx));
+
+ if (dctx != NULL && dctx->base.tlsmac != NULL && dctx->base.alloced) {
+ dctx->base.tlsmac = OPENSSL_memdup(dctx->base.tlsmac,
+ dctx->base.tlsmacsize);
+ if (dctx->base.tlsmac == NULL) {
+ OPENSSL_free(dctx);
+ dctx = NULL;
+ }
+ }
+ return dctx;
+}
+
static void aes_wrap_freectx(void *vctx)
{
PROV_AES_WRAP_CTX *wctx = (PROV_AES_WRAP_CTX *)vctx;
@@ -281,6 +301,7 @@ static int aes_wrap_set_ctx_params(void *vctx, const OSSL_PARAM params[])
{ OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))aes_##mode##_cipher }, \
{ OSSL_FUNC_CIPHER_FINAL, (void (*)(void))aes_##mode##_final }, \
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))aes_##mode##_freectx }, \
+ { OSSL_FUNC_CIPHER_DUPCTX, (void (*)(void))aes_##mode##_dupctx }, \
{ OSSL_FUNC_CIPHER_GET_PARAMS, \
(void (*)(void))aes_##kbits##_##fname##_get_params }, \
{ OSSL_FUNC_CIPHER_GETTABLE_PARAMS, \
diff --git a/providers/implementations/ciphers/cipher_aria_ccm.c b/providers/implementations/ciphers/cipher_aria_ccm.c
index d6b5517ee096..9f0e1dc20a69 100644
--- a/providers/implementations/ciphers/cipher_aria_ccm.c
+++ b/providers/implementations/ciphers/cipher_aria_ccm.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -28,6 +28,21 @@ static void *aria_ccm_newctx(void *provctx, size_t keybits)
return ctx;
}
+static void *aria_ccm_dupctx(void *provctx)
+{
+ PROV_ARIA_CCM_CTX *ctx = provctx;
+ PROV_ARIA_CCM_CTX *dctx = NULL;
+
+ if (ctx == NULL)
+ return NULL;
+
+ dctx = OPENSSL_memdup(ctx, sizeof(*ctx));
+ if (dctx != NULL && dctx->base.ccm_ctx.key != NULL)
+ dctx->base.ccm_ctx.key = &dctx->ks.ks;
+
+ return dctx;
+}
+
static void aria_ccm_freectx(void *vctx)
{
PROV_ARIA_CCM_CTX *ctx = (PROV_ARIA_CCM_CTX *)vctx;
diff --git a/providers/implementations/ciphers/cipher_aria_gcm.c b/providers/implementations/ciphers/cipher_aria_gcm.c
index b412bd3202f8..21c28cd56d9b 100644
--- a/providers/implementations/ciphers/cipher_aria_gcm.c
+++ b/providers/implementations/ciphers/cipher_aria_gcm.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -27,6 +27,21 @@ static void *aria_gcm_newctx(void *provctx, size_t keybits)
return ctx;
}
+static void *aria_gcm_dupctx(void *provctx)
+{
+ PROV_ARIA_GCM_CTX *ctx = provctx;
+ PROV_ARIA_GCM_CTX *dctx = NULL;
+
+ if (ctx == NULL)
+ return NULL;
+
+ dctx = OPENSSL_memdup(ctx, sizeof(*ctx));
+ if (dctx != NULL && dctx->base.gcm.key != NULL)
+ dctx->base.gcm.key = &dctx->ks.ks;
+
+ return dctx;
+}
+
static OSSL_FUNC_cipher_freectx_fn aria_gcm_freectx;
static void aria_gcm_freectx(void *vctx)
{
diff --git a/providers/implementations/ciphers/cipher_chacha20_poly1305.c b/providers/implementations/ciphers/cipher_chacha20_poly1305.c
index abe670add7a8..28ba0fee43d3 100644
--- a/providers/implementations/ciphers/cipher_chacha20_poly1305.c
+++ b/providers/implementations/ciphers/cipher_chacha20_poly1305.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -23,6 +23,7 @@
static OSSL_FUNC_cipher_newctx_fn chacha20_poly1305_newctx;
static OSSL_FUNC_cipher_freectx_fn chacha20_poly1305_freectx;
+static OSSL_FUNC_cipher_dupctx_fn chacha20_poly1305_dupctx;
static OSSL_FUNC_cipher_encrypt_init_fn chacha20_poly1305_einit;
static OSSL_FUNC_cipher_decrypt_init_fn chacha20_poly1305_dinit;
static OSSL_FUNC_cipher_get_params_fn chacha20_poly1305_get_params;
@@ -58,6 +59,25 @@ static void *chacha20_poly1305_newctx(void *provctx)
return ctx;
}
+static void *chacha20_poly1305_dupctx(void *provctx)
+{
+ PROV_CHACHA20_POLY1305_CTX *ctx = provctx;
+ PROV_CHACHA20_POLY1305_CTX *dctx = NULL;
+
+ if (ctx == NULL)
+ return NULL;
+ dctx = OPENSSL_memdup(ctx, sizeof(*ctx));
+ if (dctx != NULL && dctx->base.tlsmac != NULL && dctx->base.alloced) {
+ dctx->base.tlsmac = OPENSSL_memdup(dctx->base.tlsmac,
+ dctx->base.tlsmacsize);
+ if (dctx->base.tlsmac == NULL) {
+ OPENSSL_free(dctx);
+ dctx = NULL;
+ }
+ }
+ return dctx;
+}
+
static void chacha20_poly1305_freectx(void *vctx)
{
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)vctx;
@@ -310,6 +330,7 @@ static int chacha20_poly1305_final(void *vctx, unsigned char *out, size_t *outl,
const OSSL_DISPATCH ossl_chacha20_ossl_poly1305_functions[] = {
{ OSSL_FUNC_CIPHER_NEWCTX, (void (*)(void))chacha20_poly1305_newctx },
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))chacha20_poly1305_freectx },
+ { OSSL_FUNC_CIPHER_DUPCTX, (void (*)(void))chacha20_poly1305_dupctx },
{ OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))chacha20_poly1305_einit },
{ OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))chacha20_poly1305_dinit },
{ OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))chacha20_poly1305_update },
diff --git a/providers/implementations/ciphers/cipher_des.c b/providers/implementations/ciphers/cipher_des.c
index c6d13466f79d..b8bd47c7405b 100644
--- a/providers/implementations/ciphers/cipher_des.c
+++ b/providers/implementations/ciphers/cipher_des.c
@@ -98,6 +98,7 @@ static int des_init(void *vctx, const unsigned char *key, size_t keylen,
}
if (!ctx->hw->init(ctx, key, keylen))
return 0;
+ ctx->key_set = 1;
}
return ossl_cipher_generic_set_ctx_params(ctx, params);
}
diff --git a/providers/implementations/ciphers/cipher_rc4_hmac_md5.c b/providers/implementations/ciphers/cipher_rc4_hmac_md5.c
index c46c6eab63e0..c1325c12c2aa 100644
--- a/providers/implementations/ciphers/cipher_rc4_hmac_md5.c
+++ b/providers/implementations/ciphers/cipher_rc4_hmac_md5.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -34,6 +34,7 @@ static OSSL_FUNC_cipher_encrypt_init_fn rc4_hmac_md5_einit;
static OSSL_FUNC_cipher_decrypt_init_fn rc4_hmac_md5_dinit;
static OSSL_FUNC_cipher_newctx_fn rc4_hmac_md5_newctx;
static OSSL_FUNC_cipher_freectx_fn rc4_hmac_md5_freectx;
+static OSSL_FUNC_cipher_dupctx_fn rc4_hmac_md5_dupctx;
static OSSL_FUNC_cipher_get_ctx_params_fn rc4_hmac_md5_get_ctx_params;
static OSSL_FUNC_cipher_gettable_ctx_params_fn rc4_hmac_md5_gettable_ctx_params;
static OSSL_FUNC_cipher_set_ctx_params_fn rc4_hmac_md5_set_ctx_params;
@@ -71,6 +72,15 @@ static void rc4_hmac_md5_freectx(void *vctx)
OPENSSL_clear_free(ctx, sizeof(*ctx));
}
+static void *rc4_hmac_md5_dupctx(void *vctx)
+{
+ PROV_RC4_HMAC_MD5_CTX *ctx = vctx;
+
+ if (ctx == NULL)
+ return NULL;
+ return OPENSSL_memdup(ctx, sizeof(*ctx));
+}
+
static int rc4_hmac_md5_einit(void *ctx, const unsigned char *key,
size_t keylen, const unsigned char *iv,
size_t ivlen, const OSSL_PARAM params[])
@@ -214,6 +224,7 @@ static int rc4_hmac_md5_get_params(OSSL_PARAM params[])
const OSSL_DISPATCH ossl_rc4_hmac_ossl_md5_functions[] = {
{ OSSL_FUNC_CIPHER_NEWCTX, (void (*)(void))rc4_hmac_md5_newctx },
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))rc4_hmac_md5_freectx },
+ { OSSL_FUNC_CIPHER_DUPCTX, (void (*)(void))rc4_hmac_md5_dupctx },
{ OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))rc4_hmac_md5_einit },
{ OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))rc4_hmac_md5_dinit },
{ OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))rc4_hmac_md5_update },
diff --git a/providers/implementations/ciphers/cipher_tdes_common.c b/providers/implementations/ciphers/cipher_tdes_common.c
index af2f5b98415c..cd11f2185d5f 100644
--- a/providers/implementations/ciphers/cipher_tdes_common.c
+++ b/providers/implementations/ciphers/cipher_tdes_common.c
@@ -92,6 +92,7 @@ static int tdes_init(void *vctx, const unsigned char *key, size_t keylen,
}
if (!ctx->hw->init(ctx, key, ctx->keylen))
return 0;
+ ctx->key_set = 1;
}
return ossl_cipher_generic_set_ctx_params(ctx, params);
}
diff --git a/providers/implementations/ciphers/ciphercommon.c b/providers/implementations/ciphers/ciphercommon.c
index fa383165d83c..7ad3eb0a1f52 100644
--- a/providers/implementations/ciphers/ciphercommon.c
+++ b/providers/implementations/ciphers/ciphercommon.c
@@ -128,7 +128,10 @@ int ossl_cipher_var_keylen_set_ctx_params(void *vctx, const OSSL_PARAM params[])
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER);
return 0;
}
- ctx->keylen = keylen;
+ if (ctx->keylen != keylen) {
+ ctx->keylen = keylen;
+ ctx->key_set = 0;
+ }
}
return 1;
}
@@ -217,6 +220,7 @@ static int cipher_generic_init_internal(PROV_CIPHER_CTX *ctx,
}
if (!ctx->hw->init(ctx, key, ctx->keylen))
return 0;
+ ctx->key_set = 1;
}
return ossl_cipher_generic_set_ctx_params(ctx, params);
}
@@ -249,6 +253,11 @@ int ossl_cipher_generic_block_update(void *vctx, unsigned char *out,
size_t blksz = ctx->blocksize;
size_t nextblocks;
+ if (!ctx->key_set) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_NO_KEY_SET);
+ return 0;
+ }
+
if (ctx->tlsversion > 0) {
/*
* Each update call corresponds to a TLS record and is individually
@@ -390,6 +399,11 @@ int ossl_cipher_generic_block_final(void *vctx, unsigned char *out,
if (!ossl_prov_is_running())
return 0;
+ if (!ctx->key_set) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_NO_KEY_SET);
+ return 0;
+ }
+
if (ctx->tlsversion > 0) {
/* We never finalize TLS, so this is an error */
ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
@@ -456,6 +470,11 @@ int ossl_cipher_generic_stream_update(void *vctx, unsigned char *out,
{
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
+ if (!ctx->key_set) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_NO_KEY_SET);
+ return 0;
+ }
+
if (inl == 0) {
*outl = 0;
return 1;
@@ -510,9 +529,16 @@ int ossl_cipher_generic_stream_update(void *vctx, unsigned char *out,
int ossl_cipher_generic_stream_final(void *vctx, unsigned char *out,
size_t *outl, size_t outsize)
{
+ PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
+
if (!ossl_prov_is_running())
return 0;
+ if (!ctx->key_set) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_NO_KEY_SET);
+ return 0;
+ }
+
*outl = 0;
return 1;
}
@@ -526,6 +552,11 @@ int ossl_cipher_generic_cipher(void *vctx, unsigned char *out, size_t *outl,
if (!ossl_prov_is_running())
return 0;
+ if (!ctx->key_set) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_NO_KEY_SET);
+ return 0;
+ }
+
if (outsize < inl) {
ERR_raise(ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL);
return 0;
diff --git a/providers/implementations/ciphers/ciphercommon_ccm.c b/providers/implementations/ciphers/ciphercommon_ccm.c
index ce3f7527f31e..33105911e366 100644
--- a/providers/implementations/ciphers/ciphercommon_ccm.c
+++ b/providers/implementations/ciphers/ciphercommon_ccm.c
@@ -109,7 +109,10 @@ int ossl_ccm_set_ctx_params(void *vctx, const OSSL_PARAM params[])
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_IV_LENGTH);
return 0;
}
- ctx->l = ivlen;
+ if (ctx->l != ivlen) {
+ ctx->l = ivlen;
+ ctx->iv_set = 0;
+ }
}
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_AEAD_TLS1_AAD);
diff --git a/providers/implementations/ciphers/ciphercommon_gcm.c b/providers/implementations/ciphers/ciphercommon_gcm.c
index ed95c97ff473..4ec73d5a6dba 100644
--- a/providers/implementations/ciphers/ciphercommon_gcm.c
+++ b/providers/implementations/ciphers/ciphercommon_gcm.c
@@ -261,7 +261,12 @@ int ossl_gcm_set_ctx_params(void *vctx, const OSSL_PARAM params[])
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_IV_LENGTH);
return 0;
}
- ctx->ivlen = sz;
+ if (ctx->ivlen != sz) {
+ /* If the iv was already set or autogenerated, it is invalid. */
+ if (ctx->iv_state != IV_STATE_UNINITIALISED)
+ ctx->iv_state = IV_STATE_FINISHED;
+ ctx->ivlen = sz;
+ }
}
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_AEAD_TLS1_AAD);
diff --git a/providers/implementations/digests/blake2b_prov.c b/providers/implementations/digests/blake2b_prov.c
index 11271e1b59d3..44e0740745e8 100644
--- a/providers/implementations/digests/blake2b_prov.c
+++ b/providers/implementations/digests/blake2b_prov.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2016-2024 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
@@ -323,8 +323,10 @@ int ossl_blake2b_final(unsigned char *md, BLAKE2B_CTX *c)
for (i = 0; i < iter; ++i)
store64(target + sizeof(c->h[i]) * i, c->h[i]);
- if (target != md)
+ if (target != md) {
memcpy(md, target, c->outlen);
+ OPENSSL_cleanse(target, sizeof(outbuffer));
+ }
OPENSSL_cleanse(c, sizeof(BLAKE2B_CTX));
return 1;
diff --git a/providers/implementations/digests/blake2s_prov.c b/providers/implementations/digests/blake2s_prov.c
index a9a8f9d048a2..72cab1e9a12e 100644
--- a/providers/implementations/digests/blake2s_prov.c
+++ b/providers/implementations/digests/blake2s_prov.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2016-2024 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
@@ -314,8 +314,10 @@ int ossl_blake2s_final(unsigned char *md, BLAKE2S_CTX *c)
for (i = 0; i < iter; ++i)
store32(target + sizeof(c->h[i]) * i, c->h[i]);
- if (target != md)
+ if (target != md) {
memcpy(md, target, c->outlen);
+ OPENSSL_cleanse(target, sizeof(outbuffer));
+ }
OPENSSL_cleanse(c, sizeof(BLAKE2S_CTX));
return 1;
diff --git a/providers/implementations/encode_decode/encode_key2any.c b/providers/implementations/encode_decode/encode_key2any.c
index 0f4c62962ddc..1430c330cf0b 100644
--- a/providers/implementations/encode_decode/encode_key2any.c
+++ b/providers/implementations/encode_decode/encode_key2any.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2020-2024 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
@@ -740,7 +740,15 @@ static int ec_pki_priv_to_der(const void *veckey, unsigned char **pder)
# define ec_pem_type "EC"
# ifndef OPENSSL_NO_SM2
-# define sm2_evp_type EVP_PKEY_SM2
+/*
+ * Albeit SM2 is a slightly different algorithm than ECDSA, the key type
+ * encoding (in all places where an AlgorithmIdentifier is produced, such
+ * as PrivateKeyInfo and SubjectPublicKeyInfo) is the same as for ECC keys
+ * according to the example in GM/T 0015-2012, appendix D.2.
+ * This leaves the distinction of SM2 keys to the EC group (which is found
+ * in AlgorithmIdentified.params).
+ */
+# define sm2_evp_type ec_evp_type
# define sm2_input_type "SM2"
# define sm2_pem_type "SM2"
# endif
diff --git a/providers/implementations/include/prov/ciphercommon.h b/providers/implementations/include/prov/ciphercommon.h
index 8153872cba26..383b759304d4 100644
--- a/providers/implementations/include/prov/ciphercommon.h
+++ b/providers/implementations/include/prov/ciphercommon.h
@@ -58,6 +58,7 @@ struct prov_cipher_ctx_st {
unsigned int pad : 1; /* Whether padding should be used or not */
unsigned int enc : 1; /* Set to 1 for encrypt, or 0 otherwise */
unsigned int iv_set : 1; /* Set when the iv is copied to the iv/oiv buffers */
+ unsigned int key_set : 1; /* Set when key is set on the context */
unsigned int updated : 1; /* Set to 1 during update for one shot ciphers */
unsigned int variable_keylength : 1;
unsigned int inverse_cipher : 1; /* set to 1 to use inverse cipher */
diff --git a/providers/implementations/include/prov/ciphercommon_aead.h b/providers/implementations/include/prov/ciphercommon_aead.h
index 1d017175d320..4a5329e98406 100644
--- a/providers/implementations/include/prov/ciphercommon_aead.h
+++ b/providers/implementations/include/prov/ciphercommon_aead.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2019-2024 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
@@ -23,9 +23,14 @@ static void * alg##kbits##lc##_newctx(void *provctx) \
{ \
return alg##_##lc##_newctx(provctx, kbits); \
} \
+static void * alg##kbits##lc##_dupctx(void *src) \
+{ \
+ return alg##_##lc##_dupctx(src); \
+} \
const OSSL_DISPATCH ossl_##alg##kbits##lc##_functions[] = { \
{ OSSL_FUNC_CIPHER_NEWCTX, (void (*)(void))alg##kbits##lc##_newctx }, \
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))alg##_##lc##_freectx }, \
+ { OSSL_FUNC_CIPHER_DUPCTX, (void (*)(void))alg##kbits##lc##_dupctx }, \
{ OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))ossl_##lc##_einit }, \
{ OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))ossl_##lc##_dinit }, \
{ OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))ossl_##lc##_stream_update }, \
diff --git a/providers/implementations/kdfs/pbkdf1.c b/providers/implementations/kdfs/pbkdf1.c
index 1a042bac9f52..a3d7cf5175ae 100644
--- a/providers/implementations/kdfs/pbkdf1.c
+++ b/providers/implementations/kdfs/pbkdf1.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1999-2024 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
@@ -71,6 +71,11 @@ static int kdf_pbkdf1_do_derive(const unsigned char *pass, size_t passlen,
mdsize = EVP_MD_size(md_type);
if (mdsize < 0)
goto err;
+ if (n > (size_t)mdsize) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_LENGTH_TOO_LARGE);
+ goto err;
+ }
+
for (i = 1; i < iter; i++) {
if (!EVP_DigestInit_ex(ctx, md_type, NULL))
goto err;
@@ -83,6 +88,7 @@ static int kdf_pbkdf1_do_derive(const unsigned char *pass, size_t passlen,
memcpy(out, md_tmp, n);
ret = 1;
err:
+ OPENSSL_cleanse(md_tmp, EVP_MAX_MD_SIZE);
EVP_MD_CTX_free(ctx);
return ret;
}
diff --git a/providers/implementations/macs/cmac_prov.c b/providers/implementations/macs/cmac_prov.c
index 96da429e844a..56eac008b6e4 100644
--- a/providers/implementations/macs/cmac_prov.c
+++ b/providers/implementations/macs/cmac_prov.c
@@ -99,8 +99,12 @@ static void *cmac_dup(void *vsrc)
static size_t cmac_size(void *vmacctx)
{
struct cmac_data_st *macctx = vmacctx;
+ const EVP_CIPHER_CTX *cipherctx = CMAC_CTX_get0_cipher_ctx(macctx->ctx);
- return EVP_CIPHER_CTX_get_block_size(CMAC_CTX_get0_cipher_ctx(macctx->ctx));
+ if (EVP_CIPHER_CTX_get0_cipher(cipherctx) == NULL)
+ return 0;
+
+ return EVP_CIPHER_CTX_get_block_size(cipherctx);
}
static int cmac_setkey(struct cmac_data_st *macctx,
diff --git a/providers/implementations/signature/rsa_sig.c b/providers/implementations/signature/rsa_sig.c
index 76516d9a0987..919ef17269bd 100644
--- a/providers/implementations/signature/rsa_sig.c
+++ b/providers/implementations/signature/rsa_sig.c
@@ -997,6 +997,7 @@ static void *rsa_dupctx(void *vprsactx)
*dstctx = *srcctx;
dstctx->rsa = NULL;
dstctx->md = NULL;
+ dstctx->mgf1_md = NULL;
dstctx->mdctx = NULL;
dstctx->tbuf = NULL;
dstctx->propq = NULL;
diff --git a/providers/implementations/signature/sm2_sig.c b/providers/implementations/signature/sm2_sig.c
index fffb280c776a..09e3aacf008d 100644
--- a/providers/implementations/signature/sm2_sig.c
+++ b/providers/implementations/signature/sm2_sig.c
@@ -330,6 +330,7 @@ static void sm2sig_freectx(void *vpsm2ctx)
free_md(ctx);
EC_KEY_free(ctx->ec);
+ OPENSSL_free(ctx->propq);
OPENSSL_free(ctx->id);
OPENSSL_free(ctx);
}
@@ -345,13 +346,21 @@ static void *sm2sig_dupctx(void *vpsm2ctx)
*dstctx = *srcctx;
dstctx->ec = NULL;
+ dstctx->propq = NULL;
dstctx->md = NULL;
dstctx->mdctx = NULL;
+ dstctx->id = NULL;
if (srcctx->ec != NULL && !EC_KEY_up_ref(srcctx->ec))
goto err;
dstctx->ec = srcctx->ec;
+ if (srcctx->propq != NULL) {
+ dstctx->propq = OPENSSL_strdup(srcctx->propq);
+ if (dstctx->propq == NULL)
+ goto err;
+ }
+
if (srcctx->md != NULL && !EVP_MD_up_ref(srcctx->md))
goto err;
dstctx->md = srcctx->md;
diff --git a/ssl/d1_lib.c b/ssl/d1_lib.c
index 95a34093c91b..034851d0b58b 100644
--- a/ssl/d1_lib.c
+++ b/ssl/d1_lib.c
@@ -130,6 +130,23 @@ void dtls1_clear_sent_buffer(SSL *s)
while ((item = pqueue_pop(s->d1->sent_messages)) != NULL) {
frag = (hm_fragment *)item->data;
+
+ if (frag->msg_header.is_ccs) {
+ /*
+ * If we're freeing the CCS then we're done with the old
+ * enc_write_ctx/write_hash and they can be freed
+ */
+ if (s->enc_write_ctx
+ != frag->msg_header.saved_retransmit_state.enc_write_ctx)
+ EVP_CIPHER_CTX_free(frag->msg_header.saved_retransmit_state
+ .enc_write_ctx);
+
+ if (s->write_hash
+ != frag->msg_header.saved_retransmit_state.write_hash)
+ EVP_MD_CTX_free(frag->msg_header.saved_retransmit_state
+ .write_hash);
+ }
+
dtls1_hm_fragment_free(frag);
pitem_free(item);
}
diff --git a/ssl/record/rec_layer_s3.c b/ssl/record/rec_layer_s3.c
index 3baf820761a6..4bcffcc41e36 100644
--- a/ssl/record/rec_layer_s3.c
+++ b/ssl/record/rec_layer_s3.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 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
@@ -300,6 +300,10 @@ int ssl3_read_n(SSL *s, size_t n, size_t max, int extend, int clearold,
SSL_set_shutdown(s, SSL_RECEIVED_SHUTDOWN);
s->s3.warn_alert = SSL_AD_CLOSE_NOTIFY;
} else {
+ /*
+ * This reason code is part of the API and may be used by
+ * applications for control flow decisions.
+ */
SSLfatal(s, SSL_AD_DECODE_ERROR,
SSL_R_UNEXPECTED_EOF_WHILE_READING);
}
diff --git a/ssl/s3_enc.c b/ssl/s3_enc.c
index 2ca3f74ae771..ee4f58e75e99 100644
--- a/ssl/s3_enc.c
+++ b/ssl/s3_enc.c
@@ -225,7 +225,11 @@ int ssl3_change_cipher_state(SSL *s, int which)
goto err;
}
- if (EVP_CIPHER_get0_provider(c) != NULL
+ /*
+ * The cipher we actually ended up using in the EVP_CIPHER_CTX may be
+ * different to that in c if we have an ENGINE in use
+ */
+ if (EVP_CIPHER_get0_provider(EVP_CIPHER_CTX_get0_cipher(dd)) != NULL
&& !tls_provider_set_tls_params(s, dd, c, m)) {
/* SSLfatal already called */
goto err;
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
index 78d4f040565d..bcfe57b46f08 100644
--- a/ssl/s3_lib.c
+++ b/ssl/s3_lib.c
@@ -3365,6 +3365,10 @@ void ssl3_free(SSL *s)
OPENSSL_free(s->s3.alpn_selected);
OPENSSL_free(s->s3.alpn_proposed);
+#ifndef OPENSSL_NO_PSK
+ OPENSSL_free(s->s3.tmp.psk);
+#endif
+
#ifndef OPENSSL_NO_SRP
ssl_srp_ctx_free_intern(s);
#endif
diff --git a/ssl/ssl_ciph.c b/ssl/ssl_ciph.c
index 73a821289d43..9e32417e75d8 100644
--- a/ssl/ssl_ciph.c
+++ b/ssl/ssl_ciph.c
@@ -465,7 +465,8 @@ DEFINE_RUN_ONCE_STATIC(do_load_builtin_compressions)
comp->method = method;
comp->id = SSL_COMP_ZLIB_IDX;
comp->name = COMP_get_name(method);
- sk_SSL_COMP_push(ssl_comp_methods, comp);
+ if (!sk_SSL_COMP_push(ssl_comp_methods, comp))
+ OPENSSL_free(comp);
sk_SSL_COMP_sort(ssl_comp_methods);
}
}
diff --git a/ssl/ssl_conf.c b/ssl/ssl_conf.c
index 5146cedb96ec..698280288e9d 100644
--- a/ssl/ssl_conf.c
+++ b/ssl/ssl_conf.c
@@ -870,9 +870,12 @@ static int ctrl_switch_option(SSL_CONF_CTX *cctx, const ssl_conf_cmd_tbl * cmd)
/* Find index of command in table */
size_t idx = cmd - ssl_conf_cmds;
const ssl_switch_tbl *scmd;
+
/* Sanity check index */
- if (idx >= OSSL_NELEM(ssl_cmd_switches))
+ if (idx >= OSSL_NELEM(ssl_cmd_switches)) {
+ ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
return 0;
+ }
/* Obtain switches entry with same index */
scmd = ssl_cmd_switches + idx;
ssl_set_option(cctx, scmd->name_flags, scmd->option_value, 1);
@@ -888,28 +891,33 @@ int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value)
}
if (!ssl_conf_cmd_skip_prefix(cctx, &cmd))
- return -2;
+ goto unknown_cmd;
runcmd = ssl_conf_cmd_lookup(cctx, cmd);
if (runcmd) {
- int rv;
+ int rv = -3;
+
if (runcmd->value_type == SSL_CONF_TYPE_NONE) {
return ctrl_switch_option(cctx, runcmd);
}
if (value == NULL)
- return -3;
+ goto bad_value;
rv = runcmd->cmd(cctx, value);
if (rv > 0)
return 2;
- if (rv == -2)
- return -2;
+ if (rv != -2)
+ rv = 0;
+
+ bad_value:
if (cctx->flags & SSL_CONF_FLAG_SHOW_ERRORS)
ERR_raise_data(ERR_LIB_SSL, SSL_R_BAD_VALUE,
- "cmd=%s, value=%s", cmd, value);
- return 0;
+ "cmd=%s, value=%s", cmd,
+ value != NULL ? value : "<EMPTY>");
+ return rv;
}
+ unknown_cmd:
if (cctx->flags & SSL_CONF_FLAG_SHOW_ERRORS)
ERR_raise_data(ERR_LIB_SSL, SSL_R_UNKNOWN_CMD_NAME, "cmd=%s", cmd);
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c
index 81a9f0728dbf..2c8479eb5fc6 100644
--- a/ssl/ssl_lib.c
+++ b/ssl/ssl_lib.c
@@ -341,17 +341,31 @@ static int dane_tlsa_add(SSL_DANE *dane,
case DANETLS_SELECTOR_CERT:
if (!d2i_X509(&cert, &p, ilen) || p < data ||
dlen != (size_t)(p - data)) {
+ X509_free(cert);
tlsa_free(t);
ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
return 0;
}
if (X509_get0_pubkey(cert) == NULL) {
+ X509_free(cert);
tlsa_free(t);
ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
return 0;
}
if ((DANETLS_USAGE_BIT(usage) & DANETLS_TA_MASK) == 0) {
+ /*
+ * The Full(0) certificate decodes to a seemingly valid X.509
+ * object with a plausible key, so the TLSA record is well
+ * formed. However, we don't actually need the certifiate for
+ * usages PKIX-EE(1) or DANE-EE(3), because at least the EE
+ * certificate is always presented by the peer. We discard the
+ * certificate, and just use the TLSA data as an opaque blob
+ * for matching the raw presented DER octets.
+ *
+ * DO NOT FREE `t` here, it will be added to the TLSA record
+ * list below!
+ */
X509_free(cert);
break;
}
@@ -376,6 +390,7 @@ static int dane_tlsa_add(SSL_DANE *dane,
case DANETLS_SELECTOR_SPKI:
if (!d2i_PUBKEY(&pkey, &p, ilen) || p < data ||
dlen != (size_t)(p - data)) {
+ EVP_PKEY_free(pkey);
tlsa_free(t);
ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY);
return 0;
@@ -1211,8 +1226,6 @@ void SSL_free(SSL *s)
SSL_SESSION_free(s->psksession);
OPENSSL_free(s->psksession_id);
- clear_ciphers(s);
-
ssl_cert_free(s->cert);
OPENSSL_free(s->shared_sigalgs);
/* Free up if allocated */
@@ -1248,6 +1261,12 @@ void SSL_free(SSL *s)
if (s->method != NULL)
s->method->ssl_free(s);
+ /*
+ * Must occur after s->method->ssl_free(). The DTLS sent_messages queue
+ * may reference the EVP_CIPHER_CTX/EVP_MD_CTX that are freed here.
+ */
+ clear_ciphers(s);
+
SSL_CTX_free(s->ctx);
ASYNC_WAIT_CTX_free(s->waitctx);
@@ -4972,6 +4991,8 @@ IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
* If |dst| points to a NULL pointer, a new stack will be created and owned by
* the caller.
* Returns the number of SCTs moved, or a negative integer if an error occurs.
+ * The |dst| stack is created and possibly partially populated even in case
+ * of error, likewise the |src| stack may be left in an intermediate state.
*/
static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
sct_source_t origin)
@@ -4991,15 +5012,14 @@ static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
if (SCT_set_source(sct, origin) != 1)
goto err;
- if (sk_SCT_push(*dst, sct) <= 0)
+ if (!sk_SCT_push(*dst, sct))
goto err;
scts_moved += 1;
}
return scts_moved;
err:
- if (sct != NULL)
- sk_SCT_push(src, sct); /* Put the SCT back */
+ SCT_free(sct);
return -1;
}
diff --git a/ssl/ssl_mcnf.c b/ssl/ssl_mcnf.c
index c2366e41e365..8bccce84d465 100644
--- a/ssl/ssl_mcnf.c
+++ b/ssl/ssl_mcnf.c
@@ -24,7 +24,7 @@ static int ssl_do_config(SSL *s, SSL_CTX *ctx, const char *name, int system)
{
SSL_CONF_CTX *cctx = NULL;
size_t i, idx, cmd_count;
- int rv = 0;
+ int err = 1;
unsigned int flags;
const SSL_METHOD *meth;
const SSL_CONF_CMD *cmds;
@@ -66,24 +66,22 @@ static int ssl_do_config(SSL *s, SSL_CTX *ctx, const char *name, int system)
flags |= SSL_CONF_FLAG_CLIENT;
SSL_CONF_CTX_set_flags(cctx, flags);
prev_libctx = OSSL_LIB_CTX_set0_default(libctx);
+ err = 0;
for (i = 0; i < cmd_count; i++) {
char *cmdstr, *arg;
+ int rv;
conf_ssl_get_cmd(cmds, i, &cmdstr, &arg);
rv = SSL_CONF_cmd(cctx, cmdstr, arg);
- if (rv <= 0) {
- int errcode = rv == -2 ? SSL_R_UNKNOWN_COMMAND : SSL_R_BAD_VALUE;
-
- ERR_raise_data(ERR_LIB_SSL, errcode,
- "section=%s, cmd=%s, arg=%s", name, cmdstr, arg);
- goto err;
- }
+ if (rv <= 0)
+ ++err;
}
- rv = SSL_CONF_CTX_finish(cctx);
+ if (!SSL_CONF_CTX_finish(cctx))
+ ++err;
err:
OSSL_LIB_CTX_set0_default(prev_libctx);
SSL_CONF_CTX_free(cctx);
- return rv <= 0 ? 0 : 1;
+ return err == 0;
}
int SSL_config(SSL *s, const char *name)
diff --git a/ssl/statem/extensions_cust.c b/ssl/statem/extensions_cust.c
index 401a4c5c76b1..d75ee7df662b 100644
--- a/ssl/statem/extensions_cust.c
+++ b/ssl/statem/extensions_cust.c
@@ -220,6 +220,8 @@ int custom_ext_add(SSL *s, int context, WPACKET *pkt, X509 *x, size_t chainidx,
|| !WPACKET_start_sub_packet_u16(pkt)
|| (outlen > 0 && !WPACKET_memcpy(pkt, out, outlen))
|| !WPACKET_close(pkt)) {
+ if (meth->free_cb != NULL)
+ meth->free_cb(s, meth->ext_type, context, out, meth->add_arg);
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
return 0;
}
@@ -228,6 +230,9 @@ int custom_ext_add(SSL *s, int context, WPACKET *pkt, X509 *x, size_t chainidx,
* We can't send duplicates: code logic should prevent this.
*/
if (!ossl_assert((meth->ext_flags & SSL_EXT_FLAG_SENT) == 0)) {
+ if (meth->free_cb != NULL)
+ meth->free_cb(s, meth->ext_type, context, out,
+ meth->add_arg);
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
return 0;
}
@@ -328,6 +333,8 @@ void custom_exts_free(custom_ext_methods *exts)
OPENSSL_free(meth->parse_arg);
}
OPENSSL_free(exts->meths);
+ exts->meths = NULL;
+ exts->meths_count = 0;
}
/* Return true if a client custom extension exists, false otherwise */
diff --git a/ssl/statem/statem_dtls.c b/ssl/statem/statem_dtls.c
index 788d0eff656b..040c23035c99 100644
--- a/ssl/statem/statem_dtls.c
+++ b/ssl/statem/statem_dtls.c
@@ -59,7 +59,7 @@ static hm_fragment *dtls1_hm_fragment_new(size_t frag_len, int reassembly)
unsigned char *buf = NULL;
unsigned char *bitmask = NULL;
- if ((frag = OPENSSL_malloc(sizeof(*frag))) == NULL) {
+ if ((frag = OPENSSL_zalloc(sizeof(*frag))) == NULL) {
ERR_raise(ERR_LIB_SSL, ERR_R_MALLOC_FAILURE);
return NULL;
}
@@ -95,11 +95,7 @@ void dtls1_hm_fragment_free(hm_fragment *frag)
{
if (!frag)
return;
- if (frag->msg_header.is_ccs) {
- EVP_CIPHER_CTX_free(frag->msg_header.
- saved_retransmit_state.enc_write_ctx);
- EVP_MD_CTX_free(frag->msg_header.saved_retransmit_state.write_hash);
- }
+
OPENSSL_free(frag->fragment);
OPENSSL_free(frag->reassembly);
OPENSSL_free(frag);
diff --git a/ssl/t1_enc.c b/ssl/t1_enc.c
index 91238e6457b8..6cb7baaf7c9c 100644
--- a/ssl/t1_enc.c
+++ b/ssl/t1_enc.c
@@ -427,7 +427,12 @@ int tls1_change_cipher_state(SSL *s, int which)
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
goto err;
}
- if (EVP_CIPHER_get0_provider(c) != NULL
+
+ /*
+ * The cipher we actually ended up using in the EVP_CIPHER_CTX may be
+ * different to that in c if we have an ENGINE in use
+ */
+ if (EVP_CIPHER_get0_provider(EVP_CIPHER_CTX_get0_cipher(dd)) != NULL
&& !tls_provider_set_tls_params(s, dd, c, m)) {
/* SSLfatal already called */
goto err;
diff --git a/test/CAtsa.cnf b/test/CAtsa.cnf
new file mode 100644
index 000000000000..50f68cbc1966
--- /dev/null
+++ b/test/CAtsa.cnf
@@ -0,0 +1,164 @@
+
+#
+# This config is used by the Time Stamp Authority tests.
+#
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+# Extra OBJECT IDENTIFIER info:
+oid_section = new_oids
+
+TSDNSECT = ts_cert_dn
+INDEX = 1
+
+[ new_oids ]
+
+# Policies used by the TSA tests.
+tsa_policy1 = 1.2.3.4.1
+tsa_policy2 = 1.2.3.4.5.6
+tsa_policy3 = 1.2.3.4.5.7
+
+#----------------------------------------------------------------------
+[ ca ]
+default_ca = CA_default # The default ca section
+
+[ CA_default ]
+
+dir = ./demoCA
+certs = $dir/certs # Where the issued certs are kept
+database = $dir/index.txt # database index file.
+new_certs_dir = $dir/newcerts # default place for new certs.
+
+certificate = $dir/cacert.pem # The CA certificate
+serial = $dir/serial # The current serial number
+private_key = $dir/private/cakey.pem# The private key
+
+default_days = 365 # how long to certify for
+default_md = sha256 # which md to use.
+preserve = no # keep passed DN ordering
+
+policy = policy_match
+
+# For the CA policy
+[ policy_match ]
+countryName = supplied
+stateOrProvinceName = supplied
+organizationName = supplied
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+#----------------------------------------------------------------------
+[ req ]
+default_md = sha1
+distinguished_name = $ENV::TSDNSECT
+encrypt_rsa_key = no
+prompt = no
+# attributes = req_attributes
+x509_extensions = v3_ca # The extensions to add to the self signed cert
+
+string_mask = nombstr
+
+[ ts_ca_dn ]
+countryName = HU
+stateOrProvinceName = Budapest
+localityName = Budapest
+organizationName = Gov-CA Ltd.
+commonName = ca1
+
+[ ts_cert_dn ]
+countryName = HU
+stateOrProvinceName = Budapest
+localityName = Buda
+organizationName = Hun-TSA Ltd.
+commonName = tsa$ENV::INDEX
+
+[ tsa_cert ]
+
+# TSA server cert is not a CA cert.
+basicConstraints=CA:FALSE
+
+# The following key usage flags are needed for TSA server certificates.
+keyUsage = nonRepudiation, digitalSignature
+extendedKeyUsage = critical,timeStamping
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer:always
+
+[ non_tsa_cert ]
+
+# This is not a CA cert and not a TSA cert, either (timeStamping usage missing)
+basicConstraints=CA:FALSE
+
+# The following key usage flags are needed for TSA server certificates.
+keyUsage = nonRepudiation, digitalSignature
+# timeStamping is not supported by this certificate
+# extendedKeyUsage = critical,timeStamping
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer:always
+
+[ v3_req ]
+
+# Extensions to add to a certificate request
+basicConstraints = CA:FALSE
+keyUsage = nonRepudiation, digitalSignature
+
+[ v3_ca ]
+
+# Extensions for a typical CA
+
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true
+keyUsage = cRLSign, keyCertSign
+
+#----------------------------------------------------------------------
+[ tsa ]
+
+default_tsa = tsa_config1 # the default TSA section
+
+[ tsa_config1 ]
+
+# These are used by the TSA reply generation only.
+dir = . # TSA root directory
+serial = $dir/tsa_serial # The current serial number (mandatory)
+signer_cert = $dir/tsa_cert1.pem # The TSA signing certificate
+ # (optional)
+certs = $dir/tsaca.pem # Certificate chain to include in reply
+ # (optional)
+signer_key = $dir/tsa_key1.pem # The TSA private key (optional)
+signer_digest = sha256 # Signing digest to use. (Optional)
+default_policy = tsa_policy1 # Policy if request did not specify it
+ # (optional)
+other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
+digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory)
+accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
+ordering = yes # Is ordering defined for timestamps?
+ # (optional, default: no)
+tsa_name = yes # Must the TSA name be included in the reply?
+ # (optional, default: no)
+ess_cert_id_chain = yes # Must the ESS cert id chain be included?
+ # (optional, default: no)
+ess_cert_id_alg = sha256 # algorithm to compute certificate
+ # identifier (optional, default: sha1)
+
+[ tsa_config2 ]
+
+# This configuration uses a certificate which doesn't have timeStamping usage.
+# These are used by the TSA reply generation only.
+dir = . # TSA root directory
+serial = $dir/tsa_serial # The current serial number (mandatory)
+signer_cert = $dir/tsa_cert2.pem # The TSA signing certificate
+ # (optional)
+certs = $dir/demoCA/cacert.pem# Certificate chain to include in reply
+ # (optional)
+signer_key = $dir/tsa_key2.pem # The TSA private key (optional)
+signer_digest = sha256 # Signing digest to use. (Optional)
+default_policy = tsa_policy1 # Policy if request did not specify it
+ # (optional)
+other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
+digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory)
diff --git a/test/README-dev.md b/test/README-dev.md
new file mode 100644
index 000000000000..d8922de00080
--- /dev/null
+++ b/test/README-dev.md
@@ -0,0 +1,160 @@
+Guidelines for test developers
+==============================
+
+How to add recipes
+------------------
+
+For any test that you want to perform, you write a script located in
+`test/recipes/`, named `{nn}-test_{name}.t`,
+where `{nn}` is a two digit number and
+`{name}` is a unique name of your choice.
+
+Please note that if a test involves a new testing executable, you will need to
+do some additions in test/build.info. Please refer to the section
+["Changes to test/build.info"](README.md#changes-to-testbuildinfo) below.
+
+Naming conventions
+------------------
+
+A test executable is named `test/{name}test.c`
+
+A test recipe is named `test/recipes/{nn}-test_{name}.t`, where `{nn}` is a two
+digit number and `{name}` is a unique name of your choice.
+
+The number `{nn}` is (somewhat loosely) grouped as follows:
+
+ 00-04 sanity, internal and essential API tests
+ 05-09 individual symmetric cipher algorithms
+ 10-14 math (bignum)
+ 15-19 individual asymmetric cipher algorithms
+ 20-24 openssl commands (some otherwise not tested)
+ 25-29 certificate forms, generation and verification
+ 30-35 engine and evp
+ 60-79 APIs:
+ 60 X509 subsystem
+ 61 BIO subsystem
+ 65 CMP subsystem
+ 70 PACKET layer
+ 80-89 "larger" protocols (CA, CMS, OCSP, SSL, TSA)
+ 90-98 misc
+ 99 most time consuming tests [such as test_fuzz]
+
+A recipe that just runs a test executable
+-----------------------------------------
+
+A script that just runs a program looks like this:
+
+ #! /usr/bin/env perl
+
+ use OpenSSL::Test::Simple;
+
+ simple_test("test_{name}", "{name}test", "{name}");
+
+`{name}` is the unique name you have chosen for your test.
+
+The second argument to `simple_test` is the test executable, and `simple_test`
+expects it to be located in `test/`
+
+For documentation on `OpenSSL::Test::Simple`,
+do `perldoc util/perl/OpenSSL/Test/Simple.pm`.
+
+A recipe that runs a more complex test
+--------------------------------------
+
+For more complex tests, you will need to read up on Test::More and
+OpenSSL::Test. Test::More is normally preinstalled, do `man Test::More` for
+documentation. For OpenSSL::Test, do `perldoc util/perl/OpenSSL/Test.pm`.
+
+A script to start from could be this:
+
+ #! /usr/bin/env perl
+
+ use strict;
+ use warnings;
+ use OpenSSL::Test;
+
+ setup("test_{name}");
+
+ plan tests => 2; # The number of tests being performed
+
+ ok(test1, "test1");
+ ok(test2, "test1");
+
+ sub test1
+ {
+ # test feature 1
+ }
+
+ sub test2
+ {
+ # test feature 2
+ }
+
+Changes to test/build.info
+--------------------------
+
+Whenever a new test involves a new test executable you need to do the
+following (at all times, replace {NAME} and {name} with the name of your
+test):
+
+ * add `{name}` to the list of programs under `PROGRAMS_NO_INST`
+
+ * create a three line description of how to build the test, you will have
+ to modify the include paths and source files if you don't want to use the
+ basic test framework:
+
+ SOURCE[{name}]={name}.c
+ INCLUDE[{name}]=.. ../include ../apps/include
+ DEPEND[{name}]=../libcrypto libtestutil.a
+
+Generic form of C test executables
+----------------------------------
+
+ #include "testutil.h"
+
+ static int my_test(void)
+ {
+ int testresult = 0; /* Assume the test will fail */
+ int observed;
+
+ observed = function(); /* Call the code under test */
+ if (!TEST_int_eq(observed, 2)) /* Check the result is correct */
+ goto end; /* Exit on failure - optional */
+
+ testresult = 1; /* Mark the test case a success */
+ end:
+ cleanup(); /* Any cleanup you require */
+ return testresult;
+ }
+
+ int setup_tests(void)
+ {
+ ADD_TEST(my_test); /* Add each test separately */
+ return 1; /* Indicates success. Return 0 */
+ /* to produce an error with a */
+ /* usage message and -1 for */
+ /* failure to set up with no */
+ /* usage message. */
+ }
+
+You should use the `TEST_xxx` macros provided by `testutil.h` to test all failure
+conditions. These macros produce an error message in a standard format if the
+condition is not met (and nothing if the condition is met). Additional
+information can be presented with the `TEST_info` macro that takes a `printf`
+format string and arguments. `TEST_error` is useful for complicated conditions,
+it also takes a `printf` format string and argument. In all cases the `TEST_xxx`
+macros are guaranteed to evaluate their arguments exactly once. This means
+that expressions with side effects are allowed as parameters. Thus,
+
+ if (!TEST_ptr(ptr = OPENSSL_malloc(..)))
+
+works fine and can be used in place of:
+
+ ptr = OPENSSL_malloc(..);
+ if (!TEST_ptr(ptr))
+
+The former produces a more meaningful message on failure than the latter.
+
+Note that the test infrastructure automatically sets up all required environment
+variables (such as `OPENSSL_MODULES`, `OPENSSL_CONF`, etc.) for the tests.
+Individual tests may choose to override the default settings as required.
diff --git a/test/README-external.md b/test/README-external.md
new file mode 100644
index 000000000000..3e10526b852f
--- /dev/null
+++ b/test/README-external.md
@@ -0,0 +1,116 @@
+Running external test suites with OpenSSL
+=========================================
+
+It is possible to integrate external test suites into OpenSSL's `make test`.
+This capability is considered a developer option and does not work on all
+platforms.
+
+Python PYCA/Cryptography test suite
+===================================
+
+This python test suite runs cryptographic tests with a local OpenSSL build as
+the implementation.
+
+First checkout the `PYCA/Cryptography` module into `./pyca-cryptography` using:
+
+ $ git submodule update --init
+
+Then configure/build OpenSSL compatible with the python module:
+
+ $ ./config shared enable-external-tests
+ $ make
+
+The tests will run in a python virtual environment which requires virtualenv
+to be installed.
+
+ $ make test VERBOSE=1 TESTS=test_external_pyca
+
+Test failures and suppressions
+------------------------------
+
+Some tests target older (<=1.0.2) versions so will not run. Other tests target
+other crypto implementations so are not relevant. Currently no tests fail.
+
+krb5 test suite
+===============
+
+Much like the PYCA/Cryptography test suite, this builds and runs the krb5
+tests against the local OpenSSL build.
+
+You will need a git checkout of krb5 at the top level:
+
+ $ git clone https://github.com/krb5/krb5
+
+krb5's master has to pass this same CI, but a known-good version is
+krb5-1.15.1-final if you want to be sure.
+
+ $ cd krb5
+ $ git checkout krb5-1.15.1-final
+ $ cd ..
+
+OpenSSL must be built with external tests enabled:
+
+ $ ./config enable-external-tests
+ $ make
+
+krb5's tests will then be run as part of the rest of the suite, or can be
+explicitly run (with more debugging):
+
+ $ VERBOSE=1 make TESTS=test_external_krb5 test
+
+Test-failures suppressions
+--------------------------
+
+krb5 will automatically adapt its test suite to account for the configuration
+of your system. Certain tests may require more installed packages to run. No
+tests are expected to fail.
+
+GOST engine test suite
+===============
+
+Much like the PYCA/Cryptography test suite, this builds and runs the GOST engine
+tests against the local OpenSSL build.
+
+You will need a git checkout of gost-engine at the top level:
+
+ $ git submodule update --init
+
+Then configure/build OpenSSL enabling external tests:
+
+ $ ./config shared enable-external-tests
+ $ make
+
+GOST engine requires CMake for the build process.
+
+GOST engine tests will then be run as part of the rest of the suite, or can be
+explicitly run (with more debugging):
+
+ $ make test VERBOSE=1 TESTS=test_external_gost_engine
+
+Updating test suites
+====================
+
+To update the commit for any of the above test suites:
+
+- Make sure the submodules are cloned locally:
+
+ $ git submodule update --init --recursive
+
+- Enter subdirectory and pull from the repository (use a specific branch/tag if required):
+
+ $ cd `<submodule-dir>`
+ $ git pull origin master
+
+- Go to root directory, there should be a new git status:
+
+ $ cd ../
+ $ git status
+ ...
+ # modified: `<submodule-dir>` (new commits)
+ ...
+
+- Add/commit/push the update
+
+ $ git add `<submodule-dir>`
+ $ git commit -m `"Updated <submodule> to latest commit"`
+ $ git push
diff --git a/test/README.md b/test/README.md
new file mode 100644
index 000000000000..14ce32ecd62e
--- /dev/null
+++ b/test/README.md
@@ -0,0 +1,170 @@
+Using OpenSSL Tests
+===================
+
+After a successful build, and before installing, the libraries should be tested.
+Run:
+
+ $ make test # Unix
+ $ mms test ! OpenVMS
+ $ nmake test # Windows
+
+**Warning:** you MUST run the tests from an unprivileged account
+(or disable your privileges temporarily if your platform allows it).
+
+If some tests fail, take a look at the section Test Failures below.
+
+Test Failures
+-------------
+
+If some tests fail, look at the output. There may be reasons for the failure
+that isn't a problem in OpenSSL itself (like an OS malfunction or a Perl issue).
+You may want increased verbosity, that can be accomplished like this:
+
+Full verbosity, showing full output of all successful and failed test cases
+(`make` macro `VERBOSE` or `V`):
+
+ $ make V=1 test # Unix
+ $ mms /macro=(V=1) test ! OpenVMS
+ $ nmake V=1 test # Windows
+
+Verbosity on failed (sub-)tests only
+(`VERBOSE_FAILURE` or `VF` or `REPORT_FAILURES`):
+
+ $ make test VF=1
+
+Verbosity on failed (sub-)tests, in addition progress on succeeded (sub-)tests
+(`VERBOSE_FAILURE_PROGRESS` or `VFP` or `REPORT_FAILURES_PROGRESS`):
+
+ $ make test VFP=1
+
+If you want to run just one or a few specific tests, you can use
+the make variable TESTS to specify them, like this:
+
+ $ make TESTS='test_rsa test_dsa' test # Unix
+ $ mms/macro="TESTS=test_rsa test_dsa" test ! OpenVMS
+ $ nmake TESTS="test_rsa test_dsa" test # Windows
+
+And of course, you can combine (Unix examples shown):
+
+ $ make test TESTS='test_rsa test_dsa' VF=1
+ $ make test TESTS="test_cmp_*" VFP=1
+
+You can find the list of available tests like this:
+
+ $ make list-tests # Unix
+ $ mms list-tests ! OpenVMS
+ $ nmake list-tests # Windows
+
+Have a look at the manual for the perl module Test::Harness to
+see what other HARNESS_* variables there are.
+
+To report a bug please open an issue on GitHub, at
+<https://github.com/openssl/openssl/issues>.
+
+For more details on how the `make` variables `TESTS` can be used,
+see section Running Selected Tests below.
+
+Running Selected Tests
+----------------------
+
+The `make` variable `TESTS` supports a versatile set of space separated tokens
+with which you can specify a set of tests to be performed. With a "current
+set of tests" in mind, initially being empty, here are the possible tokens:
+
+ alltests The current set of tests becomes the whole set of available
+ tests (as listed when you do 'make list-tests' or similar).
+
+ xxx Adds the test 'xxx' to the current set of tests.
+
+ -xxx Removes 'xxx' from the current set of tests. If this is the
+ first token in the list, the current set of tests is first
+ assigned the whole set of available tests, effectively making
+ this token equivalent to TESTS="alltests -xxx".
+
+ nn Adds the test group 'nn' (which is a number) to the current
+ set of tests.
+
+ -nn Removes the test group 'nn' from the current set of tests.
+ If this is the first token in the list, the current set of
+ tests is first assigned the whole set of available tests,
+ effectively making this token equivalent to
+ TESTS="alltests -xxx".
+
+Also, all tokens except for "alltests" may have wildcards, such as *.
+(on Unix and Windows, BSD style wildcards are supported, while on VMS,
+it's VMS style wildcards)
+
+### Examples
+
+Run all tests except for the fuzz tests:
+
+ $ make TESTS='-test_fuzz*' test
+
+or, if you want to be explicit:
+
+ $ make TESTS='alltests -test_fuzz*' test
+
+Run all tests that have a name starting with "test_ssl" but not those
+starting with "test_ssl_":
+
+ $ make TESTS='test_ssl* -test_ssl_*' test
+
+Run only test group 10:
+
+ $ make TESTS='10' test
+
+Run all tests except the slow group (group 99):
+
+ $ make TESTS='-99' test
+
+Run all tests in test groups 80 to 99 except for tests in group 90:
+
+ $ make TESTS='[89]? -90' test
+
+To run specific fuzz tests you can use for instance:
+
+ $ make test TESTS='test_fuzz_cmp test_fuzz_cms'
+
+To stochastically verify that the algorithm that produces uniformly distributed
+random numbers is operating correctly (with a false positive rate of 0.01%):
+
+ $ ./util/wrap.sh test/bntest -stochastic
+
+Running Tests in Parallel
+-------------------------
+
+By default the test harness will execute the selected tests sequentially.
+Depending on the platform characteristics, running more than one test job in
+parallel may speed up test execution.
+This can be requested by setting the `HARNESS_JOBS` environment variable to a
+positive integer value. This specifies the maximum number of test jobs to run in
+parallel.
+
+Depending on the Perl version different strategies could be adopted to select
+which test recipes can be run in parallel. In recent versions of Perl, unless
+specified otherwise, any task can be run in parallel. Consult the documentation
+for `TAP::Harness` to know more.
+
+To run up to four tests in parallel at any given time:
+
+ $ make HARNESS_JOBS=4 test
+
+Randomisation of Test Ordering
+------------------------------
+
+By default, the test harness will execute tests in the order they were added.
+By setting the `OPENSSL_TEST_RAND_ORDER` environment variable to zero, the
+test ordering will be randomised. If a randomly ordered test fails, the
+seed value used will be reported. Setting the `OPENSSL_TEST_RAND_ORDER`
+environment variable to this value will rerun the tests in the same
+order. This assures repeatability of randomly ordered test runs.
+This repeatability is independent of the operating system, processor or
+platform used.
+
+To randomise the test ordering:
+
+ $ make OPENSSL_TEST_RAND_ORDER=0 test
+
+To run the tests using the order defined by the random seed `42`:
+
+ $ make OPENSSL_TEST_RAND_ORDER=42 test
diff --git a/test/README.ssltest.md b/test/README.ssltest.md
new file mode 100644
index 000000000000..81ee7dfdb8d0
--- /dev/null
+++ b/test/README.ssltest.md
@@ -0,0 +1,285 @@
+SSL tests
+=========
+
+SSL testcases are configured in the `ssl-tests` directory.
+
+Each `ssl_*.cnf.in` file contains a number of test configurations. These files
+are used to generate testcases in the OpenSSL CONF format.
+
+The precise test output can be dependent on the library configuration. The test
+harness generates the output files on the fly.
+
+However, for verification, we also include checked-in configuration outputs
+corresponding to the default configuration. These testcases live in
+`test/ssl-tests/*.cnf` files.
+
+For more details, see `ssl-tests/01-simple.cnf.in` for an example.
+
+Configuring the test
+--------------------
+
+First, give your test a name. The names do not have to be unique.
+
+An example test input looks like this:
+
+ {
+ name => "test-default",
+ server => { "CipherString" => "DEFAULT" },
+ client => { "CipherString" => "DEFAULT" },
+ test => { "ExpectedResult" => "Success" },
+ }
+
+The test section supports the following options
+
+### Test mode
+
+* Method - the method to test. One of DTLS or TLS.
+
+* HandshakeMode - which handshake flavour to test:
+ - Simple - plain handshake (default)
+ - Resume - test resumption
+ - RenegotiateServer - test server initiated renegotiation
+ - RenegotiateClient - test client initiated renegotiation
+
+When HandshakeMode is Resume or Renegotiate, the original handshake is expected
+to succeed. All configured test expectations are verified against the second
+handshake.
+
+* ApplicationData - amount of application data bytes to send (integer, defaults
+ to 256 bytes). Applies to both client and server. Application data is sent in
+ 64kB chunks (but limited by MaxFragmentSize and available parallelization, see
+ below).
+
+* MaxFragmentSize - maximum send fragment size (integer, defaults to 512 in
+ tests - see `SSL_CTX_set_max_send_fragment` for documentation). Applies to
+ both client and server. Lowering the fragment size will split handshake and
+ application data up between more `SSL_write` calls, thus allowing to exercise
+ different code paths. In particular, if the buffer size (64kB) is at least
+ four times as large as the maximum fragment, interleaved multi-buffer crypto
+ implementations may be used on some platforms.
+
+### Test expectations
+
+* ExpectedResult - expected handshake outcome. One of
+ - Success - handshake success
+ - ServerFail - serverside handshake failure
+ - ClientFail - clientside handshake failure
+ - InternalError - some other error
+
+* ExpectedClientAlert, ExpectedServerAlert - expected alert. See
+ `test/helpers/ssl_test_ctx.c` for known values. Note: the expected alert is currently
+ matched against the _last_ received alert (i.e., a fatal alert or a
+ `close_notify`). Warning alert expectations are not yet supported. (A warning
+ alert will not be correctly matched, if followed by a `close_notify` or
+ another alert.)
+
+* ExpectedProtocol - expected negotiated protocol. One of
+ SSLv3, TLSv1, TLSv1.1, TLSv1.2.
+
+* SessionTicketExpected - whether or not a session ticket is expected
+ - Ignore - do not check for a session ticket (default)
+ - Yes - a session ticket is expected
+ - No - a session ticket is not expected
+
+* SessionIdExpected - whether or not a session id is expected
+ - Ignore - do not check for a session id (default)
+ - Yes - a session id is expected
+ - No - a session id is not expected
+
+* ResumptionExpected - whether or not resumption is expected (Resume mode only)
+ - Yes - resumed handshake
+ - No - full handshake (default)
+
+* ExpectedNPNProtocol, ExpectedALPNProtocol - NPN and ALPN expectations.
+
+* ExpectedTmpKeyType - the expected algorithm or curve of server temp key
+
+* ExpectedServerCertType, ExpectedClientCertType - the expected algorithm or
+ curve of server or client certificate
+
+* ExpectedServerSignHash, ExpectedClientSignHash - the expected
+ signing hash used by server or client certificate
+
+* ExpectedServerSignType, ExpectedClientSignType - the expected
+ signature type used by server or client when signing messages
+
+* ExpectedClientCANames - for client auth list of CA names the server must
+ send. If this is "empty" the list is expected to be empty otherwise it
+ is a file of certificates whose subject names form the list.
+
+* ExpectedServerCANames - list of CA names the client must send, TLS 1.3 only.
+ If this is "empty" the list is expected to be empty otherwise it is a file
+ of certificates whose subject names form the list.
+
+Configuring the client and server
+---------------------------------
+
+The client and server configurations can be any valid `SSL_CTX`
+configurations. For details, see the manpages for `SSL_CONF_cmd`.
+
+Give your configurations as a dictionary of CONF commands, e.g.
+
+ server => {
+ "CipherString" => "DEFAULT",
+ "MinProtocol" => "TLSv1",
+ }
+
+The following sections may optionally be defined:
+
+* server2 - this section configures a secondary context that is selected via the
+ ServerName test option. This context is used whenever a ServerNameCallback is
+ specified. If the server2 section is not present, then the configuration
+ matches server.
+* resume_server - this section configures the client to resume its session
+ against a different server. This context is used whenever HandshakeMode is
+ Resume. If the resume_server section is not present, then the configuration
+ matches server.
+* resume_client - this section configures the client to resume its session with
+ a different configuration. In practice this may occur when, for example,
+ upgraded clients reuse sessions persisted on disk. This context is used
+ whenever HandshakeMode is Resume. If the resume_client section is not present,
+ then the configuration matches client.
+
+### Configuring callbacks and additional options
+
+Additional handshake settings can be configured in the `extra` section of each
+client and server:
+
+ client => {
+ "CipherString" => "DEFAULT",
+ extra => {
+ "ServerName" => "server2",
+ }
+ }
+
+#### Supported client-side options
+
+* ClientVerifyCallback - the client's custom certificate verify callback.
+ Used to test callback behaviour. One of
+ - None - no custom callback (default)
+ - AcceptAll - accepts all certificates.
+ - RejectAll - rejects all certificates.
+
+* ServerName - the server the client should attempt to connect to. One of
+ - None - do not use SNI (default)
+ - server1 - the initial context
+ - server2 - the secondary context
+ - invalid - an unknown context
+
+* CTValidation - Certificate Transparency validation strategy. One of
+ - None - no validation (default)
+ - Permissive - SSL_CT_VALIDATION_PERMISSIVE
+ - Strict - SSL_CT_VALIDATION_STRICT
+
+#### Supported server-side options
+
+* ServerNameCallback - the SNI switching callback to use
+ - None - no callback (default)
+ - IgnoreMismatch - continue the handshake on SNI mismatch
+ - RejectMismatch - abort the handshake on SNI mismatch
+
+* BrokenSessionTicket - a special test case where the session ticket callback
+ does not initialize crypto.
+ - No (default)
+ - Yes
+
+#### Mutually supported options
+
+* NPNProtocols, ALPNProtocols - NPN and ALPN settings. Server and client
+ protocols can be specified as a comma-separated list, and a callback with the
+ recommended behaviour will be installed automatically.
+
+* SRPUser, SRPPassword - SRP settings. For client, this is the SRP user to
+ connect as; for server, this is a known SRP user.
+
+### Default server and client configurations
+
+The default server certificate and CA files are added to the configurations
+automatically. Server certificate verification is requested by default.
+
+You can override these options by redefining them:
+
+ client => {
+ "VerifyCAFile" => "/path/to/custom/file"
+ }
+
+or by deleting them
+
+ client => {
+ "VerifyCAFile" => undef
+ }
+
+Adding a test to the test harness
+---------------------------------
+
+1. Add a new test configuration to `test/ssl-tests`, following the examples of
+ existing `*.cnf.in` files (for example, `01-simple.cnf.in`).
+
+2. Generate the generated `*.cnf` test input file. You can do so by running
+ `generate_ssl_tests.pl`:
+
+ $ ./config
+ $ cd test
+ $ TOP=.. perl -I ../util/perl/ generate_ssl_tests.pl \
+ ssl-tests/my.cnf.in default > ssl-tests/my.cnf
+
+where `my.cnf.in` is your test input file and `default` is the provider to use.
+For all the pre-generated test files you should use the default provider.
+
+For example, to generate the test cases in `ssl-tests/01-simple.cnf.in`, do
+
+ $ TOP=.. perl -I ../util/perl/ generate_ssl_tests.pl \
+ ssl-tests/01-simple.cnf.in default > ssl-tests/01-simple.cnf
+
+Alternatively (hackish but simple), you can comment out
+
+ unlink glob $tmp_file;
+
+in `test/recipes/80-test_ssl_new.t` and run
+
+ $ make TESTS=test_ssl_new test
+
+This will save the generated output in a `*.tmp` file in the build directory.
+
+3. Update the number of tests planned in `test/recipes/80-test_ssl_new.t`. If
+ the test suite has any skip conditions, update those too (see
+ `test/recipes/80-test_ssl_new.t` for details).
+
+Running the tests with the test harness
+---------------------------------------
+
+ HARNESS_VERBOSE=yes make TESTS=test_ssl_new test
+
+Running a test manually
+-----------------------
+
+These steps are only needed during development. End users should run `make test`
+or follow the instructions above to run the SSL test suite.
+
+To run an SSL test manually from the command line, the `TEST_CERTS_DIR`
+environment variable to point to the location of the certs. E.g., from the root
+OpenSSL directory, do
+
+ $ CTLOG_FILE=test/ct/log_list.cnf TEST_CERTS_DIR=test/certs test/ssl_test \
+ test/ssl-tests/01-simple.cnf default
+
+or for shared builds
+
+ $ CTLOG_FILE=test/ct/log_list.cnf TEST_CERTS_DIR=test/certs \
+ util/wrap.pl test/ssl_test test/ssl-tests/01-simple.cnf default
+
+In the above examples, `default` is the provider to use.
+
+Note that the test expectations sometimes depend on the Configure settings. For
+example, the negotiated protocol depends on the set of available (enabled)
+protocols: a build with `enable-ssl3` has different test expectations than a
+build with `no-ssl3`.
+
+The Perl test harness automatically generates expected outputs, so users who
+just run `make test` do not need any extra steps.
+
+However, when running a test manually, keep in mind that the repository version
+of the generated `test/ssl-tests/*.cnf` correspond to expected outputs in with
+the default Configure options. To run `ssl_test` manually from the command line
+in a build with a different configuration, you may need to generate the right
+`*.cnf` file from the `*.cnf.in` input first.
diff --git a/test/aborttest.c b/test/aborttest.c
new file mode 100644
index 000000000000..5a7e5df53784
--- /dev/null
+++ b/test/aborttest.c
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2016 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/crypto.h>
+
+int main(int argc, char **argv)
+{
+ OPENSSL_die("Voluntary abort", __FILE__, __LINE__);
+ return 0;
+}
diff --git a/test/acvp_test.c b/test/acvp_test.c
new file mode 100644
index 000000000000..fee880d441b0
--- /dev/null
+++ b/test/acvp_test.c
@@ -0,0 +1,1502 @@
+/*
+ * Copyright 2020-2022 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
+ */
+
+/*
+ * A set of tests demonstrating uses cases for CAVS/ACVP testing.
+ *
+ * For examples of testing KDF's, Digests, KeyAgreement & DRBG's refer to
+ * providers/fips/self_test_kats.c
+ */
+
+#include <string.h>
+#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_EC is defined */
+#include <openssl/core_names.h>
+#include <openssl/evp.h>
+#include <openssl/ec.h>
+#include <openssl/dh.h>
+#include <openssl/dsa.h>
+#include <openssl/rsa.h>
+#include <openssl/param_build.h>
+#include <openssl/provider.h>
+#include <openssl/self_test.h>
+#include "testutil.h"
+#include "testutil/output.h"
+#include "acvp_test.inc"
+#include "internal/nelem.h"
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_CONFIG_FILE,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+typedef struct st_args {
+ int enable;
+ int called;
+} SELF_TEST_ARGS;
+
+static OSSL_PROVIDER *prov_null = NULL;
+static OSSL_LIB_CTX *libctx = NULL;
+static SELF_TEST_ARGS self_test_args = { 0 };
+static OSSL_CALLBACK self_test_events;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "config", OPT_CONFIG_FILE, '<',
+ "The configuration file to use for the libctx" },
+ { NULL }
+ };
+ return test_options;
+}
+
+static int pkey_get_bn_bytes(EVP_PKEY *pkey, const char *name,
+ unsigned char **out, size_t *out_len)
+{
+ unsigned char *buf = NULL;
+ BIGNUM *bn = NULL;
+ int sz;
+
+ if (!EVP_PKEY_get_bn_param(pkey, name, &bn))
+ goto err;
+ sz = BN_num_bytes(bn);
+ buf = OPENSSL_zalloc(sz);
+ if (buf == NULL)
+ goto err;
+ if (BN_bn2binpad(bn, buf, sz) <= 0)
+ goto err;
+
+ *out_len = sz;
+ *out = buf;
+ BN_free(bn);
+ return 1;
+err:
+ OPENSSL_free(buf);
+ BN_free(bn);
+ return 0;
+}
+
+static int sig_gen(EVP_PKEY *pkey, OSSL_PARAM *params, const char *digest_name,
+ const unsigned char *msg, size_t msg_len,
+ unsigned char **sig_out, size_t *sig_out_len)
+{
+ int ret = 0;
+ EVP_MD_CTX *md_ctx = NULL;
+ unsigned char *sig = NULL;
+ size_t sig_len;
+ size_t sz = EVP_PKEY_get_size(pkey);
+
+ sig_len = sz;
+ if (!TEST_ptr(sig = OPENSSL_malloc(sz))
+ || !TEST_ptr(md_ctx = EVP_MD_CTX_new())
+ || !TEST_int_eq(EVP_DigestSignInit_ex(md_ctx, NULL, digest_name, libctx,
+ NULL, pkey, NULL), 1)
+ || !TEST_int_gt(EVP_DigestSign(md_ctx, sig, &sig_len, msg, msg_len), 0))
+ goto err;
+ *sig_out = sig;
+ *sig_out_len = sig_len;
+ sig = NULL;
+ ret = 1;
+err:
+ OPENSSL_free(sig);
+ EVP_MD_CTX_free(md_ctx);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_EC
+static int ecdsa_keygen_test(int id)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ unsigned char *priv = NULL;
+ unsigned char *pubx = NULL, *puby = NULL;
+ size_t priv_len = 0, pubx_len = 0, puby_len = 0;
+ const struct ecdsa_keygen_st *tst = &ecdsa_keygen_data[id];
+
+ self_test_args.called = 0;
+ self_test_args.enable = 1;
+ if (!TEST_ptr(pkey = EVP_PKEY_Q_keygen(libctx, NULL, "EC", tst->curve_name))
+ || !TEST_int_ge(self_test_args.called, 3)
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_PRIV_KEY, &priv,
+ &priv_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_EC_PUB_X, &pubx,
+ &pubx_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_EC_PUB_Y, &puby,
+ &puby_len)))
+ goto err;
+
+ test_output_memory("qy", puby, puby_len);
+ test_output_memory("qx", pubx, pubx_len);
+ test_output_memory("d", priv, priv_len);
+ ret = 1;
+err:
+ self_test_args.enable = 0;
+ self_test_args.called = 0;
+ OPENSSL_clear_free(priv, priv_len);
+ OPENSSL_free(pubx);
+ OPENSSL_free(puby);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static int ecdsa_create_pkey(EVP_PKEY **pkey, const char *curve_name,
+ const unsigned char *pub, size_t pub_len,
+ int expected)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || (curve_name != NULL
+ && !TEST_true(OSSL_PARAM_BLD_push_utf8_string(
+ bld, OSSL_PKEY_PARAM_GROUP_NAME, curve_name, 0) > 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_PUB_KEY,
+ pub, pub_len) > 0)
+ || !TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "EC", NULL))
+ || !TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, pkey, EVP_PKEY_PUBLIC_KEY,
+ params), expected))
+ goto err;
+
+ ret = 1;
+err:
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
+}
+
+static int ecdsa_pub_verify_test(int id)
+{
+ const struct ecdsa_pub_verify_st *tst = &ecdsa_pv_data[id];
+
+ int ret = 0;
+ EVP_PKEY_CTX *key_ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+
+ if (!TEST_true(ecdsa_create_pkey(&pkey, tst->curve_name,
+ tst->pub, tst->pub_len, tst->pass)))
+ goto err;
+
+ if (tst->pass) {
+ if (!TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, ""))
+ || !TEST_int_eq(EVP_PKEY_public_check(key_ctx), tst->pass))
+ goto err;
+ }
+ ret = 1;
+err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(key_ctx);
+ return ret;
+}
+
+/* Extract r and s from an ecdsa signature */
+static int get_ecdsa_sig_rs_bytes(const unsigned char *sig, size_t sig_len,
+ unsigned char **r, unsigned char **s,
+ size_t *rlen, size_t *slen)
+{
+ int ret = 0;
+ unsigned char *rbuf = NULL, *sbuf = NULL;
+ size_t r1_len, s1_len;
+ const BIGNUM *r1, *s1;
+ ECDSA_SIG *sign = d2i_ECDSA_SIG(NULL, &sig, sig_len);
+
+ if (sign == NULL)
+ return 0;
+ r1 = ECDSA_SIG_get0_r(sign);
+ s1 = ECDSA_SIG_get0_s(sign);
+ if (r1 == NULL || s1 == NULL)
+ goto err;
+
+ r1_len = BN_num_bytes(r1);
+ s1_len = BN_num_bytes(s1);
+ rbuf = OPENSSL_zalloc(r1_len);
+ sbuf = OPENSSL_zalloc(s1_len);
+ if (rbuf == NULL || sbuf == NULL)
+ goto err;
+ if (BN_bn2binpad(r1, rbuf, r1_len) <= 0)
+ goto err;
+ if (BN_bn2binpad(s1, sbuf, s1_len) <= 0)
+ goto err;
+ *r = rbuf;
+ *s = sbuf;
+ *rlen = r1_len;
+ *slen = s1_len;
+ ret = 1;
+err:
+ if (ret == 0) {
+ OPENSSL_free(rbuf);
+ OPENSSL_free(sbuf);
+ }
+ ECDSA_SIG_free(sign);
+ return ret;
+}
+
+static int ecdsa_siggen_test(int id)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ size_t sig_len = 0, rlen = 0, slen = 0;
+ unsigned char *sig = NULL;
+ unsigned char *r = NULL, *s = NULL;
+ const struct ecdsa_siggen_st *tst = &ecdsa_siggen_data[id];
+
+ if (!TEST_ptr(pkey = EVP_PKEY_Q_keygen(libctx, NULL, "EC", tst->curve_name)))
+ goto err;
+
+ if (!TEST_true(sig_gen(pkey, NULL, tst->digest_alg, tst->msg, tst->msg_len,
+ &sig, &sig_len))
+ || !TEST_true(get_ecdsa_sig_rs_bytes(sig, sig_len, &r, &s, &rlen, &slen)))
+ goto err;
+ test_output_memory("r", r, rlen);
+ test_output_memory("s", s, slen);
+ ret = 1;
+err:
+ OPENSSL_free(r);
+ OPENSSL_free(s);
+ OPENSSL_free(sig);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static int ecdsa_sigver_test(int id)
+{
+ int ret = 0;
+ EVP_MD_CTX *md_ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ ECDSA_SIG *sign = NULL;
+ size_t sig_len;
+ unsigned char *sig = NULL;
+ BIGNUM *rbn = NULL, *sbn = NULL;
+ const struct ecdsa_sigver_st *tst = &ecdsa_sigver_data[id];
+
+ if (!TEST_true(ecdsa_create_pkey(&pkey, tst->curve_name,
+ tst->pub, tst->pub_len, 1)))
+ goto err;
+
+ if (!TEST_ptr(sign = ECDSA_SIG_new())
+ || !TEST_ptr(rbn = BN_bin2bn(tst->r, tst->r_len, NULL))
+ || !TEST_ptr(sbn = BN_bin2bn(tst->s, tst->s_len, NULL))
+ || !TEST_true(ECDSA_SIG_set0(sign, rbn, sbn)))
+ goto err;
+ rbn = sbn = NULL;
+
+ ret = TEST_int_gt((sig_len = i2d_ECDSA_SIG(sign, &sig)), 0)
+ && TEST_ptr(md_ctx = EVP_MD_CTX_new())
+ && TEST_true(EVP_DigestVerifyInit_ex(md_ctx, NULL, tst->digest_alg,
+ libctx, NULL, pkey, NULL)
+ && TEST_int_eq(EVP_DigestVerify(md_ctx, sig, sig_len,
+ tst->msg, tst->msg_len), tst->pass));
+err:
+ BN_free(rbn);
+ BN_free(sbn);
+ OPENSSL_free(sig);
+ ECDSA_SIG_free(sign);
+ EVP_PKEY_free(pkey);
+ EVP_MD_CTX_free(md_ctx);
+ return ret;
+
+}
+#endif /* OPENSSL_NO_EC */
+
+#ifndef OPENSSL_NO_DSA
+static int pkey_get_octet_bytes(EVP_PKEY *pkey, const char *name,
+ unsigned char **out, size_t *out_len)
+{
+ size_t len = 0;
+ unsigned char *buf = NULL;
+
+ if (!EVP_PKEY_get_octet_string_param(pkey, name, NULL, 0, &len))
+ goto err;
+
+ buf = OPENSSL_zalloc(len);
+ if (buf == NULL)
+ goto err;
+
+ if (!EVP_PKEY_get_octet_string_param(pkey, name, buf, len, out_len))
+ goto err;
+ *out = buf;
+ return 1;
+err:
+ OPENSSL_free(buf);
+ return 0;
+}
+
+static EVP_PKEY *dsa_paramgen(int L, int N)
+{
+ EVP_PKEY_CTX *paramgen_ctx = NULL;
+ EVP_PKEY *param_key = NULL;
+
+ if (!TEST_ptr(paramgen_ctx = EVP_PKEY_CTX_new_from_name(libctx, "DSA", NULL))
+ || !TEST_int_gt(EVP_PKEY_paramgen_init(paramgen_ctx), 0)
+ || !TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_bits(paramgen_ctx, L))
+ || !TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_q_bits(paramgen_ctx, N))
+ || !TEST_true(EVP_PKEY_paramgen(paramgen_ctx, &param_key)))
+ return NULL;
+ EVP_PKEY_CTX_free(paramgen_ctx);
+ return param_key;
+}
+
+static EVP_PKEY *dsa_keygen(int L, int N)
+{
+ EVP_PKEY *param_key = NULL, *key = NULL;
+ EVP_PKEY_CTX *keygen_ctx = NULL;
+
+ if (!TEST_ptr(param_key = dsa_paramgen(L, N))
+ || !TEST_ptr(keygen_ctx = EVP_PKEY_CTX_new_from_pkey(libctx, param_key,
+ NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(keygen_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_keygen(keygen_ctx, &key), 0))
+ goto err;
+err:
+ EVP_PKEY_free(param_key);
+ EVP_PKEY_CTX_free(keygen_ctx);
+ return key;
+}
+
+static int dsa_keygen_test(int id)
+{
+ int ret = 0, i;
+ EVP_PKEY_CTX *paramgen_ctx = NULL, *keygen_ctx = NULL;
+ EVP_PKEY *param_key = NULL, *key = NULL;
+ unsigned char *priv = NULL, *pub = NULL;
+ size_t priv_len = 0, pub_len = 0;
+ const struct dsa_paramgen_st *tst = &dsa_keygen_data[id];
+
+ if (!TEST_ptr(param_key = dsa_paramgen(tst->L, tst->N))
+ || !TEST_ptr(keygen_ctx = EVP_PKEY_CTX_new_from_pkey(libctx, param_key,
+ NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(keygen_ctx), 0))
+ goto err;
+ for (i = 0; i < 2; ++i) {
+ if (!TEST_int_gt(EVP_PKEY_keygen(keygen_ctx, &key), 0)
+ || !TEST_true(pkey_get_bn_bytes(key, OSSL_PKEY_PARAM_PRIV_KEY,
+ &priv, &priv_len))
+ || !TEST_true(pkey_get_bn_bytes(key, OSSL_PKEY_PARAM_PUB_KEY,
+ &pub, &pub_len)))
+ goto err;
+ test_output_memory("y", pub, pub_len);
+ test_output_memory("x", priv, priv_len);
+ EVP_PKEY_free(key);
+ OPENSSL_clear_free(priv, priv_len);
+ OPENSSL_free(pub);
+ key = NULL;
+ pub = priv = NULL;
+ }
+ ret = 1;
+err:
+ OPENSSL_clear_free(priv, priv_len);
+ OPENSSL_free(pub);
+ EVP_PKEY_free(param_key);
+ EVP_PKEY_free(key);
+ EVP_PKEY_CTX_free(keygen_ctx);
+ EVP_PKEY_CTX_free(paramgen_ctx);
+ return ret;
+}
+
+static int dsa_paramgen_test(int id)
+{
+ int ret = 0, counter = 0;
+ EVP_PKEY_CTX *paramgen_ctx = NULL;
+ EVP_PKEY *param_key = NULL;
+ unsigned char *p = NULL, *q = NULL, *seed = NULL;
+ size_t plen = 0, qlen = 0, seedlen = 0;
+ const struct dsa_paramgen_st *tst = &dsa_paramgen_data[id];
+
+ if (!TEST_ptr(paramgen_ctx = EVP_PKEY_CTX_new_from_name(libctx, "DSA", NULL))
+ || !TEST_int_gt(EVP_PKEY_paramgen_init(paramgen_ctx), 0)
+ || !TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_bits(paramgen_ctx, tst->L))
+ || !TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_q_bits(paramgen_ctx, tst->N))
+ || !TEST_true(EVP_PKEY_paramgen(paramgen_ctx, &param_key))
+ || !TEST_true(pkey_get_bn_bytes(param_key, OSSL_PKEY_PARAM_FFC_P,
+ &p, &plen))
+ || !TEST_true(pkey_get_bn_bytes(param_key, OSSL_PKEY_PARAM_FFC_Q,
+ &q, &qlen))
+ || !TEST_true(pkey_get_octet_bytes(param_key, OSSL_PKEY_PARAM_FFC_SEED,
+ &seed, &seedlen))
+ || !TEST_true(EVP_PKEY_get_int_param(param_key,
+ OSSL_PKEY_PARAM_FFC_PCOUNTER,
+ &counter)))
+ goto err;
+
+ test_output_memory("p", p, plen);
+ test_output_memory("q", q, qlen);
+ test_output_memory("domainSeed", seed, seedlen);
+ test_printf_stderr("%s: %d\n", "counter", counter);
+ ret = 1;
+err:
+ OPENSSL_free(p);
+ OPENSSL_free(q);
+ OPENSSL_free(seed);
+ EVP_PKEY_free(param_key);
+ EVP_PKEY_CTX_free(paramgen_ctx);
+ return ret;
+}
+
+static int dsa_create_pkey(EVP_PKEY **pkey,
+ const unsigned char *p, size_t p_len,
+ const unsigned char *q, size_t q_len,
+ const unsigned char *g, size_t g_len,
+ const unsigned char *seed, size_t seed_len,
+ int counter,
+ int validate_pq, int validate_g,
+ const unsigned char *pub, size_t pub_len,
+ BN_CTX *bn_ctx)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+ BIGNUM *p_bn = NULL, *q_bn = NULL, *g_bn = NULL, *pub_bn = NULL;
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(p_bn = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(BN_bin2bn(p, p_len, p_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_int(bld,
+ OSSL_PKEY_PARAM_FFC_VALIDATE_PQ,
+ validate_pq))
+ || !TEST_true(OSSL_PARAM_BLD_push_int(bld,
+ OSSL_PKEY_PARAM_FFC_VALIDATE_G,
+ validate_g))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p_bn))
+ || !TEST_ptr(q_bn = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(BN_bin2bn(q, q_len, q_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_Q, q_bn)))
+ goto err;
+
+ if (g != NULL) {
+ if (!TEST_ptr(g_bn = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(BN_bin2bn(g, g_len, g_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld,
+ OSSL_PKEY_PARAM_FFC_G, g_bn)))
+ goto err;
+ }
+ if (seed != NULL) {
+ if (!TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_FFC_SEED, seed, seed_len)))
+ goto err;
+ }
+ if (counter != -1) {
+ if (!TEST_true(OSSL_PARAM_BLD_push_int(bld,
+ OSSL_PKEY_PARAM_FFC_PCOUNTER,
+ counter)))
+ goto err;
+ }
+ if (pub != NULL) {
+ if (!TEST_ptr(pub_bn = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(BN_bin2bn(pub, pub_len, pub_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld,
+ OSSL_PKEY_PARAM_PUB_KEY,
+ pub_bn)))
+ goto err;
+ }
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "DSA", NULL))
+ || !TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, pkey, EVP_PKEY_PUBLIC_KEY,
+ params), 1))
+ goto err;
+
+ ret = 1;
+err:
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
+}
+
+static int dsa_pqver_test(int id)
+{
+ int ret = 0;
+ BN_CTX *bn_ctx = NULL;
+ EVP_PKEY_CTX *key_ctx = NULL;
+ EVP_PKEY *param_key = NULL;
+ const struct dsa_pqver_st *tst = &dsa_pqver_data[id];
+
+ if (!TEST_ptr(bn_ctx = BN_CTX_new_ex(libctx))
+ || !TEST_true(dsa_create_pkey(&param_key, tst->p, tst->p_len,
+ tst->q, tst->q_len, NULL, 0,
+ tst->seed, tst->seed_len, tst->counter,
+ 1, 0,
+ NULL, 0,
+ bn_ctx))
+ || !TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(libctx, param_key,
+ NULL))
+ || !TEST_int_eq(EVP_PKEY_param_check(key_ctx), tst->pass))
+ goto err;
+
+ ret = 1;
+err:
+ BN_CTX_free(bn_ctx);
+ EVP_PKEY_free(param_key);
+ EVP_PKEY_CTX_free(key_ctx);
+ return ret;
+}
+
+/* Extract r and s from a dsa signature */
+static int get_dsa_sig_rs_bytes(const unsigned char *sig, size_t sig_len,
+ unsigned char **r, unsigned char **s,
+ size_t *r_len, size_t *s_len)
+{
+ int ret = 0;
+ unsigned char *rbuf = NULL, *sbuf = NULL;
+ size_t r1_len, s1_len;
+ const BIGNUM *r1, *s1;
+ DSA_SIG *sign = d2i_DSA_SIG(NULL, &sig, sig_len);
+
+ if (sign == NULL)
+ return 0;
+ DSA_SIG_get0(sign, &r1, &s1);
+ if (r1 == NULL || s1 == NULL)
+ goto err;
+
+ r1_len = BN_num_bytes(r1);
+ s1_len = BN_num_bytes(s1);
+ rbuf = OPENSSL_zalloc(r1_len);
+ sbuf = OPENSSL_zalloc(s1_len);
+ if (rbuf == NULL || sbuf == NULL)
+ goto err;
+ if (BN_bn2binpad(r1, rbuf, r1_len) <= 0)
+ goto err;
+ if (BN_bn2binpad(s1, sbuf, s1_len) <= 0)
+ goto err;
+ *r = rbuf;
+ *s = sbuf;
+ *r_len = r1_len;
+ *s_len = s1_len;
+ ret = 1;
+err:
+ if (ret == 0) {
+ OPENSSL_free(rbuf);
+ OPENSSL_free(sbuf);
+ }
+ DSA_SIG_free(sign);
+ return ret;
+}
+
+static int dsa_siggen_test(int id)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ unsigned char *sig = NULL, *r = NULL, *s = NULL;
+ size_t sig_len = 0, rlen = 0, slen = 0;
+ const struct dsa_siggen_st *tst = &dsa_siggen_data[id];
+
+ if (!TEST_ptr(pkey = dsa_keygen(tst->L, tst->N)))
+ goto err;
+
+ if (!TEST_true(sig_gen(pkey, NULL, tst->digest_alg, tst->msg, tst->msg_len,
+ &sig, &sig_len))
+ || !TEST_true(get_dsa_sig_rs_bytes(sig, sig_len, &r, &s, &rlen, &slen)))
+ goto err;
+ test_output_memory("r", r, rlen);
+ test_output_memory("s", s, slen);
+ ret = 1;
+err:
+ OPENSSL_free(r);
+ OPENSSL_free(s);
+ OPENSSL_free(sig);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static int dsa_sigver_test(int id)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ DSA_SIG *sign = NULL;
+ size_t sig_len;
+ unsigned char *sig = NULL;
+ BIGNUM *rbn = NULL, *sbn = NULL;
+ EVP_MD *md = NULL;
+ unsigned char digest[EVP_MAX_MD_SIZE];
+ unsigned int digest_len;
+ BN_CTX *bn_ctx = NULL;
+ const struct dsa_sigver_st *tst = &dsa_sigver_data[id];
+
+ if (!TEST_ptr(bn_ctx = BN_CTX_new())
+ || !TEST_true(dsa_create_pkey(&pkey, tst->p, tst->p_len,
+ tst->q, tst->q_len, tst->g, tst->g_len,
+ NULL, 0, 0, 0, 0, tst->pub, tst->pub_len,
+ bn_ctx)))
+ goto err;
+
+ if (!TEST_ptr(sign = DSA_SIG_new())
+ || !TEST_ptr(rbn = BN_bin2bn(tst->r, tst->r_len, NULL))
+ || !TEST_ptr(sbn = BN_bin2bn(tst->s, tst->s_len, NULL))
+ || !TEST_true(DSA_SIG_set0(sign, rbn, sbn)))
+ goto err;
+ rbn = sbn = NULL;
+
+ if (!TEST_ptr(md = EVP_MD_fetch(libctx, tst->digest_alg, ""))
+ || !TEST_true(EVP_Digest(tst->msg, tst->msg_len,
+ digest, &digest_len, md, NULL)))
+ goto err;
+
+ if (!TEST_int_gt((sig_len = i2d_DSA_SIG(sign, &sig)), 0)
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, ""))
+ || !TEST_int_gt(EVP_PKEY_verify_init(ctx), 0)
+ || !TEST_int_eq(EVP_PKEY_verify(ctx, sig, sig_len, digest, digest_len),
+ tst->pass))
+ goto err;
+ ret = 1;
+err:
+ EVP_PKEY_CTX_free(ctx);
+ OPENSSL_free(sig);
+ EVP_MD_free(md);
+ DSA_SIG_free(sign);
+ EVP_PKEY_free(pkey);
+ BN_free(rbn);
+ BN_free(sbn);
+ BN_CTX_free(bn_ctx);
+ return ret;
+}
+#endif /* OPENSSL_NO_DSA */
+
+
+/* cipher encrypt/decrypt */
+static int cipher_enc(const char *alg,
+ const unsigned char *pt, size_t pt_len,
+ const unsigned char *key, size_t key_len,
+ const unsigned char *iv, size_t iv_len,
+ const unsigned char *ct, size_t ct_len,
+ int enc)
+{
+ int ret = 0, out_len = 0, len = 0;
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_CIPHER *cipher = NULL;
+ unsigned char out[256] = { 0 };
+
+ TEST_note("%s : %s", alg, enc ? "encrypt" : "decrypt");
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_ptr(cipher = EVP_CIPHER_fetch(libctx, alg, ""))
+ || !TEST_true(EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, enc))
+ || !TEST_true(EVP_CIPHER_CTX_set_padding(ctx, 0))
+ || !TEST_true(EVP_CipherUpdate(ctx, out, &len, pt, pt_len))
+ || !TEST_true(EVP_CipherFinal_ex(ctx, out + len, &out_len)))
+ goto err;
+ out_len += len;
+ if (!TEST_mem_eq(out, out_len, ct, ct_len))
+ goto err;
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+static int cipher_enc_dec_test(int id)
+{
+ const struct cipher_st *tst = &cipher_enc_data[id];
+ const int enc = 1;
+
+ return TEST_true(cipher_enc(tst->alg, tst->pt, tst->pt_len,
+ tst->key, tst->key_len,
+ tst->iv, tst->iv_len,
+ tst->ct, tst->ct_len, enc))
+ && TEST_true(cipher_enc(tst->alg, tst->ct, tst->ct_len,
+ tst->key, tst->key_len,
+ tst->iv, tst->iv_len,
+ tst->pt, tst->pt_len, !enc));
+}
+
+static int aes_ccm_enc_dec(const char *alg,
+ const unsigned char *pt, size_t pt_len,
+ const unsigned char *key, size_t key_len,
+ const unsigned char *iv, size_t iv_len,
+ const unsigned char *aad, size_t aad_len,
+ const unsigned char *ct, size_t ct_len,
+ const unsigned char *tag, size_t tag_len,
+ int enc, int pass)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int out_len, len;
+ unsigned char out[1024];
+
+ TEST_note("%s : %s : expected to %s", alg, enc ? "encrypt" : "decrypt",
+ pass ? "pass" : "fail");
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_ptr(cipher = EVP_CIPHER_fetch(libctx, alg, ""))
+ || !TEST_true(EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc))
+ || !TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, iv_len,
+ NULL), 0)
+ || !TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, tag_len,
+ enc ? NULL : (void *)tag), 0)
+ || !TEST_true(EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc))
+ || !TEST_true(EVP_CIPHER_CTX_set_padding(ctx, 0))
+ || !TEST_true(EVP_CipherUpdate(ctx, NULL, &len, NULL, pt_len))
+ || !TEST_true(EVP_CipherUpdate(ctx, NULL, &len, aad, aad_len))
+ || !TEST_int_eq(EVP_CipherUpdate(ctx, out, &len, pt, pt_len), pass))
+ goto err;
+
+ if (!pass) {
+ ret = 1;
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherFinal_ex(ctx, out + len, &out_len)))
+ goto err;
+ if (enc) {
+ out_len += len;
+ if (!TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG,
+ tag_len, out + out_len), 0)
+ || !TEST_mem_eq(out, out_len, ct, ct_len)
+ || !TEST_mem_eq(out + out_len, tag_len, tag, tag_len))
+ goto err;
+ } else {
+ if (!TEST_mem_eq(out, out_len + len, ct, ct_len))
+ goto err;
+ }
+
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+static int aes_ccm_enc_dec_test(int id)
+{
+ const struct cipher_ccm_st *tst = &aes_ccm_enc_data[id];
+
+ /* The tag is on the end of the cipher text */
+ const size_t tag_len = tst->ct_len - tst->pt_len;
+ const size_t ct_len = tst->ct_len - tag_len;
+ const unsigned char *tag = tst->ct + ct_len;
+ const int enc = 1;
+ const int pass = 1;
+
+ if (ct_len < 1)
+ return 0;
+
+ return aes_ccm_enc_dec(tst->alg, tst->pt, tst->pt_len,
+ tst->key, tst->key_len,
+ tst->iv, tst->iv_len, tst->aad, tst->aad_len,
+ tst->ct, ct_len, tag, tag_len, enc, pass)
+ && aes_ccm_enc_dec(tst->alg, tst->ct, ct_len,
+ tst->key, tst->key_len,
+ tst->iv, tst->iv_len, tst->aad, tst->aad_len,
+ tst->pt, tst->pt_len, tag, tag_len, !enc, pass)
+ /* test that it fails if the tag is incorrect */
+ && aes_ccm_enc_dec(tst->alg, tst->ct, ct_len,
+ tst->key, tst->key_len,
+ tst->iv, tst->iv_len, tst->aad, tst->aad_len,
+ tst->pt, tst->pt_len,
+ tag - 1, tag_len, !enc, !pass);
+}
+
+static int aes_gcm_enc_dec(const char *alg,
+ const unsigned char *pt, size_t pt_len,
+ const unsigned char *key, size_t key_len,
+ const unsigned char *iv, size_t iv_len,
+ const unsigned char *aad, size_t aad_len,
+ const unsigned char *ct, size_t ct_len,
+ const unsigned char *tag, size_t tag_len,
+ int enc, int pass)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int out_len, len;
+ unsigned char out[1024];
+
+ TEST_note("%s : %s : expected to %s", alg, enc ? "encrypt" : "decrypt",
+ pass ? "pass" : "fail");
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_ptr(cipher = EVP_CIPHER_fetch(libctx, alg, ""))
+ || !TEST_true(EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc))
+ || !TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, iv_len,
+ NULL), 0))
+ goto err;
+
+ if (!enc) {
+ if (!TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, tag_len,
+ (void *)tag), 0))
+ goto err;
+ }
+ /*
+ * For testing purposes the IV it being set here. In a compliant application
+ * the IV would be generated internally. A fake entropy source could also
+ * be used to feed in the random IV bytes (see fake_random.c)
+ */
+ if (!TEST_true(EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc))
+ || !TEST_true(EVP_CIPHER_CTX_set_padding(ctx, 0))
+ || !TEST_true(EVP_CipherUpdate(ctx, NULL, &len, aad, aad_len))
+ || !TEST_true(EVP_CipherUpdate(ctx, out, &len, pt, pt_len)))
+ goto err;
+
+ if (!TEST_int_eq(EVP_CipherFinal_ex(ctx, out + len, &out_len), pass))
+ goto err;
+ if (!pass) {
+ ret = 1;
+ goto err;
+ }
+ out_len += len;
+ if (enc) {
+ if (!TEST_mem_eq(out, out_len, ct, ct_len)
+ || !TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG,
+ tag_len, out + out_len), 0)
+ || !TEST_mem_eq(out + out_len, tag_len, tag, tag_len))
+ goto err;
+ } else {
+ if (!TEST_mem_eq(out, out_len, ct, ct_len))
+ goto err;
+ }
+
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+static int aes_gcm_enc_dec_test(int id)
+{
+ const struct cipher_gcm_st *tst = &aes_gcm_enc_data[id];
+ int enc = 1;
+ int pass = 1;
+
+ return aes_gcm_enc_dec(tst->alg, tst->pt, tst->pt_len,
+ tst->key, tst->key_len,
+ tst->iv, tst->iv_len, tst->aad, tst->aad_len,
+ tst->ct, tst->ct_len, tst->tag, tst->tag_len,
+ enc, pass)
+ && aes_gcm_enc_dec(tst->alg, tst->ct, tst->ct_len,
+ tst->key, tst->key_len,
+ tst->iv, tst->iv_len, tst->aad, tst->aad_len,
+ tst->pt, tst->pt_len, tst->tag, tst->tag_len,
+ !enc, pass)
+ /* Fail if incorrect tag passed to decrypt */
+ && aes_gcm_enc_dec(tst->alg, tst->ct, tst->ct_len,
+ tst->key, tst->key_len,
+ tst->iv, tst->iv_len, tst->aad, tst->aad_len,
+ tst->pt, tst->pt_len, tst->aad, tst->tag_len,
+ !enc, !pass);
+}
+
+#ifndef OPENSSL_NO_DH
+static int dh_create_pkey(EVP_PKEY **pkey, const char *group_name,
+ const unsigned char *pub, size_t pub_len,
+ const unsigned char *priv, size_t priv_len,
+ BN_CTX *bn_ctx, int pass)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+ BIGNUM *pub_bn = NULL, *priv_bn = NULL;
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || (group_name != NULL
+ && !TEST_int_gt(OSSL_PARAM_BLD_push_utf8_string(
+ bld, OSSL_PKEY_PARAM_GROUP_NAME,
+ group_name, 0), 0)))
+ goto err;
+
+ if (pub != NULL) {
+ if (!TEST_ptr(pub_bn = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(BN_bin2bn(pub, pub_len, pub_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY,
+ pub_bn)))
+ goto err;
+ }
+ if (priv != NULL) {
+ if (!TEST_ptr(priv_bn = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(BN_bin2bn(priv, priv_len, priv_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY,
+ priv_bn)))
+ goto err;
+ }
+
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "DH", NULL))
+ || !TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, pkey, EVP_PKEY_KEYPAIR, params),
+ pass))
+ goto err;
+
+ ret = 1;
+err:
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
+}
+
+static int dh_safe_prime_keygen_test(int id)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ unsigned char *priv = NULL;
+ unsigned char *pub = NULL;
+ size_t priv_len = 0, pub_len = 0;
+ OSSL_PARAM params[2];
+ const struct dh_safe_prime_keygen_st *tst = &dh_safe_prime_keygen_data[id];
+
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME,
+ (char *)tst->group_name, 0);
+ params[1] = OSSL_PARAM_construct_end();
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "DH", NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0)
+ || !TEST_true(EVP_PKEY_CTX_set_params(ctx, params))
+ || !TEST_int_gt(EVP_PKEY_keygen(ctx, &pkey), 0)
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_PRIV_KEY,
+ &priv, &priv_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_PUB_KEY,
+ &pub, &pub_len)))
+ goto err;
+
+ test_output_memory("x", priv, priv_len);
+ test_output_memory("y", pub, pub_len);
+ ret = 1;
+err:
+ OPENSSL_clear_free(priv, priv_len);
+ OPENSSL_free(pub);
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
+}
+
+static int dh_safe_prime_keyver_test(int id)
+{
+ int ret = 0;
+ BN_CTX *bn_ctx = NULL;
+ EVP_PKEY_CTX *key_ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ const struct dh_safe_prime_keyver_st *tst = &dh_safe_prime_keyver_data[id];
+
+ if (!TEST_ptr(bn_ctx = BN_CTX_new_ex(libctx))
+ || !TEST_true(dh_create_pkey(&pkey, tst->group_name,
+ tst->pub, tst->pub_len,
+ tst->priv, tst->priv_len, bn_ctx, 1))
+ || !TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, ""))
+ || !TEST_int_eq(EVP_PKEY_check(key_ctx), tst->pass))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(key_ctx);
+ BN_CTX_free(bn_ctx);
+ return ret;
+}
+#endif /* OPENSSL_NO_DH */
+
+
+static int rsa_create_pkey(EVP_PKEY **pkey,
+ const unsigned char *n, size_t n_len,
+ const unsigned char *e, size_t e_len,
+ const unsigned char *d, size_t d_len,
+ BN_CTX *bn_ctx)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+ BIGNUM *e_bn = NULL, *d_bn = NULL, *n_bn = NULL;
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(n_bn = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(BN_bin2bn(n, n_len, n_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_N, n_bn)))
+ goto err;
+
+ if (e != NULL) {
+ if (!TEST_ptr(e_bn = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(BN_bin2bn(e, e_len, e_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_E,
+ e_bn)))
+ goto err;
+ }
+ if (d != NULL) {
+ if (!TEST_ptr(d_bn = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(BN_bin2bn(d, d_len, d_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_D,
+ d_bn)))
+ goto err;
+ }
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", NULL))
+ || !TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, pkey, EVP_PKEY_KEYPAIR, params),
+ 1))
+ goto err;
+
+ ret = 1;
+err:
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
+}
+
+static int rsa_keygen_test(int id)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ BIGNUM *e_bn = NULL;
+ BIGNUM *xp1_bn = NULL, *xp2_bn = NULL, *xp_bn = NULL;
+ BIGNUM *xq1_bn = NULL, *xq2_bn = NULL, *xq_bn = NULL;
+ unsigned char *n = NULL, *d = NULL;
+ unsigned char *p = NULL, *p1 = NULL, *p2 = NULL;
+ unsigned char *q = NULL, *q1 = NULL, *q2 = NULL;
+ size_t n_len = 0, d_len = 0;
+ size_t p_len = 0, p1_len = 0, p2_len = 0;
+ size_t q_len = 0, q1_len = 0, q2_len = 0;
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+ const struct rsa_keygen_st *tst = &rsa_keygen_data[id];
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(xp1_bn = BN_bin2bn(tst->xp1, tst->xp1_len, NULL))
+ || !TEST_ptr(xp2_bn = BN_bin2bn(tst->xp2, tst->xp2_len, NULL))
+ || !TEST_ptr(xp_bn = BN_bin2bn(tst->xp, tst->xp_len, NULL))
+ || !TEST_ptr(xq1_bn = BN_bin2bn(tst->xq1, tst->xq1_len, NULL))
+ || !TEST_ptr(xq2_bn = BN_bin2bn(tst->xq2, tst->xq2_len, NULL))
+ || !TEST_ptr(xq_bn = BN_bin2bn(tst->xq, tst->xq_len, NULL))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_TEST_XP1,
+ xp1_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_TEST_XP2,
+ xp2_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_TEST_XP,
+ xp_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_TEST_XQ1,
+ xq1_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_TEST_XQ2,
+ xq2_bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_TEST_XQ,
+ xq_bn))
+ || !TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", NULL))
+ || !TEST_ptr(e_bn = BN_bin2bn(tst->e, tst->e_len, NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_params(ctx, params), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, tst->mod), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set1_rsa_keygen_pubexp(ctx, e_bn), 0)
+ || !TEST_int_gt(EVP_PKEY_keygen(ctx, &pkey), 0)
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_TEST_P1,
+ &p1, &p1_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_TEST_P2,
+ &p2, &p2_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_TEST_Q1,
+ &q1, &q1_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_TEST_Q2,
+ &q2, &q2_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_FACTOR1,
+ &p, &p_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_FACTOR2,
+ &q, &q_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_N,
+ &n, &n_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_D,
+ &d, &d_len)))
+ goto err;
+
+ if (!TEST_mem_eq(tst->p1, tst->p1_len, p1, p1_len)
+ || !TEST_mem_eq(tst->p2, tst->p2_len, p2, p2_len)
+ || !TEST_mem_eq(tst->p, tst->p_len, p, p_len)
+ || !TEST_mem_eq(tst->q1, tst->q1_len, q1, q1_len)
+ || !TEST_mem_eq(tst->q2, tst->q2_len, q2, q2_len)
+ || !TEST_mem_eq(tst->q, tst->q_len, q, q_len)
+ || !TEST_mem_eq(tst->n, tst->n_len, n, n_len)
+ || !TEST_mem_eq(tst->d, tst->d_len, d, d_len))
+ goto err;
+
+ test_output_memory("p1", p1, p1_len);
+ test_output_memory("p2", p2, p2_len);
+ test_output_memory("p", p, p_len);
+ test_output_memory("q1", q1, q1_len);
+ test_output_memory("q2", q2, q2_len);
+ test_output_memory("q", q, q_len);
+ test_output_memory("n", n, n_len);
+ test_output_memory("d", d, d_len);
+ ret = 1;
+err:
+ BN_free(xp1_bn);
+ BN_free(xp2_bn);
+ BN_free(xp_bn);
+ BN_free(xq1_bn);
+ BN_free(xq2_bn);
+ BN_free(xq_bn);
+ BN_free(e_bn);
+ OPENSSL_free(p1);
+ OPENSSL_free(p2);
+ OPENSSL_free(q1);
+ OPENSSL_free(q2);
+ OPENSSL_free(p);
+ OPENSSL_free(q);
+ OPENSSL_free(n);
+ OPENSSL_free(d);
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(ctx);
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ return ret;
+}
+
+static int rsa_siggen_test(int id)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ unsigned char *sig = NULL, *n = NULL, *e = NULL;
+ size_t sig_len = 0, n_len = 0, e_len = 0;
+ OSSL_PARAM params[4], *p;
+ const struct rsa_siggen_st *tst = &rsa_siggen_data[id];
+ int salt_len = tst->pss_salt_len;
+
+ TEST_note("RSA %s signature generation", tst->sig_pad_mode);
+
+ p = params;
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE,
+ (char *)tst->sig_pad_mode, 0);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST,
+ (char *)tst->digest_alg, 0);
+ if (salt_len >= 0)
+ *p++ = OSSL_PARAM_construct_int(OSSL_SIGNATURE_PARAM_PSS_SALTLEN,
+ &salt_len);
+ *p++ = OSSL_PARAM_construct_end();
+
+ if (!TEST_ptr(pkey = EVP_PKEY_Q_keygen(libctx, NULL, "RSA", tst->mod))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_N, &n, &n_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_E, &e, &e_len))
+ || !TEST_true(sig_gen(pkey, params, tst->digest_alg,
+ tst->msg, tst->msg_len,
+ &sig, &sig_len)))
+ goto err;
+ test_output_memory("n", n, n_len);
+ test_output_memory("e", e, e_len);
+ test_output_memory("sig", sig, sig_len);
+ ret = 1;
+err:
+ OPENSSL_free(n);
+ OPENSSL_free(e);
+ OPENSSL_free(sig);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static int rsa_sigver_test(int id)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *pkey_ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ EVP_MD_CTX *md_ctx = NULL;
+ BN_CTX *bn_ctx = NULL;
+ OSSL_PARAM params[4], *p;
+ const struct rsa_sigver_st *tst = &rsa_sigver_data[id];
+ int salt_len = tst->pss_salt_len;
+
+ TEST_note("RSA %s Signature Verify : expected to %s ", tst->sig_pad_mode,
+ tst->pass == PASS ? "pass" : "fail");
+
+ p = params;
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE,
+ (char *)tst->sig_pad_mode, 0);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST,
+ (char *)tst->digest_alg, 0);
+ if (salt_len >= 0)
+ *p++ = OSSL_PARAM_construct_int(OSSL_SIGNATURE_PARAM_PSS_SALTLEN,
+ &salt_len);
+ *p++ = OSSL_PARAM_construct_end();
+
+ if (!TEST_ptr(bn_ctx = BN_CTX_new())
+ || !TEST_true(rsa_create_pkey(&pkey, tst->n, tst->n_len,
+ tst->e, tst->e_len, NULL, 0, bn_ctx))
+ || !TEST_ptr(md_ctx = EVP_MD_CTX_new())
+ || !TEST_true(EVP_DigestVerifyInit_ex(md_ctx, &pkey_ctx,
+ tst->digest_alg, libctx, NULL,
+ pkey, NULL))
+ || !TEST_true(EVP_PKEY_CTX_set_params(pkey_ctx, params))
+ || !TEST_int_eq(EVP_DigestVerify(md_ctx, tst->sig, tst->sig_len,
+ tst->msg, tst->msg_len), tst->pass))
+ goto err;
+ ret = 1;
+err:
+ EVP_PKEY_free(pkey);
+ BN_CTX_free(bn_ctx);
+ EVP_MD_CTX_free(md_ctx);
+ return ret;
+}
+
+static int rsa_decryption_primitive_test(int id)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ unsigned char pt[2048];
+ size_t pt_len = sizeof(pt);
+ unsigned char *n = NULL, *e = NULL;
+ size_t n_len = 0, e_len = 0;
+ BN_CTX *bn_ctx = NULL;
+ const struct rsa_decrypt_prim_st *tst = &rsa_decrypt_prim_data[id];
+
+ if (!TEST_ptr(pkey = EVP_PKEY_Q_keygen(libctx, NULL, "RSA", 2048))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_N, &n, &n_len))
+ || !TEST_true(pkey_get_bn_bytes(pkey, OSSL_PKEY_PARAM_RSA_E, &e, &e_len))
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, ""))
+ || !TEST_int_gt(EVP_PKEY_decrypt_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_NO_PADDING), 0))
+ goto err;
+
+ test_output_memory("n", n, n_len);
+ test_output_memory("e", e, e_len);
+ if (EVP_PKEY_decrypt(ctx, pt, &pt_len, tst->ct, tst->ct_len) <= 0)
+ TEST_note("Decryption Failed");
+ else
+ test_output_memory("pt", pt, pt_len);
+ ret = 1;
+err:
+ OPENSSL_free(n);
+ OPENSSL_free(e);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ BN_CTX_free(bn_ctx);
+ return ret;
+}
+
+static int self_test_events(const OSSL_PARAM params[], void *varg)
+{
+ SELF_TEST_ARGS *args = varg;
+ const OSSL_PARAM *p = NULL;
+ const char *phase = NULL, *type = NULL, *desc = NULL;
+ int ret = 0;
+
+ if (!args->enable)
+ return 1;
+
+ args->called++;
+ p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_PHASE);
+ if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
+ goto err;
+ phase = (const char *)p->data;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_DESC);
+ if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
+ goto err;
+ desc = (const char *)p->data;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_TYPE);
+ if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
+ goto err;
+ type = (const char *)p->data;
+
+ BIO_printf(bio_out, "%s %s %s\n", phase, desc, type);
+ ret = 1;
+err:
+ return ret;
+}
+
+static int drbg_test(int id)
+{
+ OSSL_PARAM params[3];
+ EVP_RAND *rand = NULL;
+ EVP_RAND_CTX *ctx = NULL, *parent = NULL;
+ unsigned char returned_bits[64];
+ const size_t returned_bits_len = sizeof(returned_bits);
+ unsigned int strength = 256;
+ const struct drbg_st *tst = &drbg_data[id];
+ int res = 0;
+
+ /* Create the seed source */
+ if (!TEST_ptr(rand = EVP_RAND_fetch(libctx, "TEST-RAND", "-fips"))
+ || !TEST_ptr(parent = EVP_RAND_CTX_new(rand, NULL)))
+ goto err;
+ EVP_RAND_free(rand);
+ rand = NULL;
+
+ params[0] = OSSL_PARAM_construct_uint(OSSL_RAND_PARAM_STRENGTH, &strength);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!TEST_true(EVP_RAND_CTX_set_params(parent, params)))
+ goto err;
+
+ /* Get the DRBG */
+ if (!TEST_ptr(rand = EVP_RAND_fetch(libctx, tst->drbg_name, ""))
+ || !TEST_ptr(ctx = EVP_RAND_CTX_new(rand, parent)))
+ goto err;
+
+ /* Set the DRBG up */
+ params[0] = OSSL_PARAM_construct_int(OSSL_DRBG_PARAM_USE_DF,
+ (int *)&tst->use_df);
+ params[1] = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_CIPHER,
+ (char *)tst->cipher, 0);
+ params[2] = OSSL_PARAM_construct_end();
+ if (!TEST_true(EVP_RAND_CTX_set_params(ctx, params)))
+ goto err;
+
+ /* Feed in the entropy and nonce */
+ params[0] = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
+ (void *)tst->entropy_input,
+ tst->entropy_input_len);
+ params[1] = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_NONCE,
+ (void *)tst->nonce,
+ tst->nonce_len);
+ params[2] = OSSL_PARAM_construct_end();
+ if (!TEST_true(EVP_RAND_CTX_set_params(parent, params)))
+ goto err;
+
+ /*
+ * Run the test
+ * A NULL personalisation string defaults to the built in so something
+ * non-NULL is needed if there is no personalisation string
+ */
+ if (!TEST_true(EVP_RAND_instantiate(ctx, 0, 0, (void *)"", 0, NULL))
+ || !TEST_true(EVP_RAND_generate(ctx, returned_bits, returned_bits_len,
+ 0, 0, NULL, 0))
+ || !TEST_true(EVP_RAND_generate(ctx, returned_bits, returned_bits_len,
+ 0, 0, NULL, 0)))
+ goto err;
+
+ test_output_memory("returned bits", returned_bits, returned_bits_len);
+
+ /* Clean up */
+ if (!TEST_true(EVP_RAND_uninstantiate(ctx))
+ || !TEST_true(EVP_RAND_uninstantiate(parent)))
+ goto err;
+
+ /* Verify the output */
+ if (!TEST_mem_eq(returned_bits, returned_bits_len,
+ tst->returned_bits, tst->returned_bits_len))
+ goto err;
+ res = 1;
+err:
+ EVP_RAND_CTX_free(ctx);
+ EVP_RAND_CTX_free(parent);
+ EVP_RAND_free(rand);
+ return res;
+}
+
+static int aes_cfb1_bits_test(void)
+{
+ int ret = 0;
+ EVP_CIPHER *cipher = NULL;
+ EVP_CIPHER_CTX *ctx = NULL;
+ unsigned char out[16] = { 0 };
+ int outlen;
+ const OSSL_PARAM *params, *p;
+
+ static const unsigned char key[] = {
+ 0x12, 0x22, 0x58, 0x2F, 0x1C, 0x1A, 0x8A, 0x88,
+ 0x30, 0xFC, 0x18, 0xB7, 0x24, 0x89, 0x7F, 0xC0
+ };
+ static const unsigned char iv[] = {
+ 0x05, 0x28, 0xB5, 0x2B, 0x58, 0x27, 0x63, 0x5C,
+ 0x81, 0x86, 0xD3, 0x63, 0x60, 0xB0, 0xAA, 0x2B
+ };
+ static const unsigned char pt[] = {
+ 0xB4
+ };
+ static const unsigned char expected[] = {
+ 0x6C
+ };
+
+ if (!TEST_ptr(cipher = EVP_CIPHER_fetch(libctx, "AES-128-CFB1", "fips=yes")))
+ goto err;
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new()))
+ goto err;
+ if (!TEST_int_gt(EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, 1), 0))
+ goto err;
+ if (!TEST_ptr(params = EVP_CIPHER_CTX_settable_params(ctx))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(params,
+ OSSL_CIPHER_PARAM_USE_BITS)))
+ goto err;
+ EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS);
+ if (!TEST_int_gt(EVP_CipherUpdate(ctx, out, &outlen, pt, 7), 0))
+ goto err;
+ if (!TEST_int_eq(outlen, 7))
+ goto err;
+ if (!TEST_mem_eq(out, (outlen + 7) / 8, expected, sizeof(expected)))
+ goto err;
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ char *config_file = NULL;
+
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_CONFIG_FILE:
+ config_file = opt_arg();
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+
+ if (!test_get_libctx(&libctx, &prov_null, config_file, NULL, NULL))
+ return 0;
+
+ OSSL_SELF_TEST_set_callback(libctx, self_test_events, &self_test_args);
+
+ ADD_TEST(aes_cfb1_bits_test);
+ ADD_ALL_TESTS(cipher_enc_dec_test, OSSL_NELEM(cipher_enc_data));
+ ADD_ALL_TESTS(aes_ccm_enc_dec_test, OSSL_NELEM(aes_ccm_enc_data));
+ ADD_ALL_TESTS(aes_gcm_enc_dec_test, OSSL_NELEM(aes_gcm_enc_data));
+
+ ADD_ALL_TESTS(rsa_keygen_test, OSSL_NELEM(rsa_keygen_data));
+ ADD_ALL_TESTS(rsa_siggen_test, OSSL_NELEM(rsa_siggen_data));
+ ADD_ALL_TESTS(rsa_sigver_test, OSSL_NELEM(rsa_sigver_data));
+ ADD_ALL_TESTS(rsa_decryption_primitive_test,
+ OSSL_NELEM(rsa_decrypt_prim_data));
+
+#ifndef OPENSSL_NO_DH
+ ADD_ALL_TESTS(dh_safe_prime_keygen_test,
+ OSSL_NELEM(dh_safe_prime_keygen_data));
+ ADD_ALL_TESTS(dh_safe_prime_keyver_test,
+ OSSL_NELEM(dh_safe_prime_keyver_data));
+#endif /* OPENSSL_NO_DH */
+
+#ifndef OPENSSL_NO_DSA
+ ADD_ALL_TESTS(dsa_keygen_test, OSSL_NELEM(dsa_keygen_data));
+ ADD_ALL_TESTS(dsa_paramgen_test, OSSL_NELEM(dsa_paramgen_data));
+ ADD_ALL_TESTS(dsa_pqver_test, OSSL_NELEM(dsa_pqver_data));
+ ADD_ALL_TESTS(dsa_siggen_test, OSSL_NELEM(dsa_siggen_data));
+ ADD_ALL_TESTS(dsa_sigver_test, OSSL_NELEM(dsa_sigver_data));
+#endif /* OPENSSL_NO_DSA */
+
+#ifndef OPENSSL_NO_EC
+ ADD_ALL_TESTS(ecdsa_keygen_test, OSSL_NELEM(ecdsa_keygen_data));
+ ADD_ALL_TESTS(ecdsa_pub_verify_test, OSSL_NELEM(ecdsa_pv_data));
+ ADD_ALL_TESTS(ecdsa_siggen_test, OSSL_NELEM(ecdsa_siggen_data));
+ ADD_ALL_TESTS(ecdsa_sigver_test, OSSL_NELEM(ecdsa_sigver_data));
+#endif /* OPENSSL_NO_EC */
+
+ ADD_ALL_TESTS(drbg_test, OSSL_NELEM(drbg_data));
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OSSL_PROVIDER_unload(prov_null);
+ OSSL_LIB_CTX_free(libctx);
+}
diff --git a/test/acvp_test.inc b/test/acvp_test.inc
new file mode 100644
index 000000000000..ad11d3ae1eb5
--- /dev/null
+++ b/test/acvp_test.inc
@@ -0,0 +1,2035 @@
+/*
+ * 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
+ */
+
+#define PASS 1
+#define FAIL 0
+#define ITM(x) x, sizeof(x)
+
+#ifndef OPENSSL_NO_EC
+
+struct ecdsa_keygen_st {
+ const char *curve_name;
+};
+
+struct ecdsa_pub_verify_st {
+ const char *curve_name;
+ const unsigned char *pub;
+ size_t pub_len;
+ int pass;
+};
+
+struct ecdsa_siggen_st {
+ const char *digest_alg;
+ const char *curve_name;
+ const unsigned char *msg;
+ size_t msg_len;
+};
+
+struct ecdsa_sigver_st {
+ const char *digest_alg;
+ const char *curve_name;
+ const unsigned char *msg;
+ size_t msg_len;
+ const unsigned char *pub;
+ size_t pub_len;
+ const unsigned char *r;
+ size_t r_len;
+ const unsigned char *s;
+ size_t s_len;
+ int pass;
+};
+
+static const struct ecdsa_keygen_st ecdsa_keygen_data[] = {
+ { "P-224" },
+};
+
+static const unsigned char ecdsa_pv_pub0[] = {
+ POINT_CONVERSION_UNCOMPRESSED,
+ 0x50, 0x0F, 0x05, 0x86, 0xD3, 0xAA, 0x8A, 0x48,
+ 0x46, 0x63, 0x0D, 0xD7, 0xC7, 0x5D, 0x5F, 0x1D,
+ 0xB2, 0xA7, 0x9B, 0xE8, 0xC8, 0xBB, 0xBE, 0x2C,
+ 0x93, 0x33, 0xDC, 0xCB, 0xBB, 0x2F, 0xB3, 0xCF,
+ 0x55, 0x88, 0x7A, 0x97, 0xD1, 0x75, 0x73, 0xFE,
+ 0x92, 0x02, 0x5C, 0xC8, 0xE3, 0xF4, 0x35, 0x4B,
+ 0x08, 0x7E, 0xF4, 0xD3, 0x7D, 0x86, 0x06, 0x92,
+ 0xBA, 0x15, 0x3F, 0xCF, 0x0C, 0xC4, 0xBF, 0xBC,
+};
+static const unsigned char ecdsa_pv_pub1[] = {
+ POINT_CONVERSION_UNCOMPRESSED,
+ 0x1F, 0x74, 0xD6, 0x99, 0xEB, 0x1D, 0x4F, 0x26,
+ 0x25, 0x5E, 0xD4, 0x6A, 0xA6, 0xD5, 0x23, 0xB3,
+ 0xF5, 0x5D, 0x14, 0x38, 0xE0, 0x4D, 0x23, 0x7F,
+ 0x9A, 0xE5, 0xB7, 0x1B, 0xF9, 0x7F, 0xAD, 0x7E,
+ 0x0E, 0x1C, 0x06, 0xF4, 0x20, 0xF3, 0x8E, 0x93,
+ 0x79, 0x11, 0x15, 0xD6, 0x82, 0x12, 0x14, 0xC2,
+ 0xF9, 0x30, 0x61, 0x9A, 0xC3, 0x12, 0xE3, 0x88,
+ 0x4E, 0xB1, 0x1A, 0x4B, 0x54, 0x6D, 0xEA, 0xCF,
+};
+static const struct ecdsa_pub_verify_st ecdsa_pv_data[] = {
+ {
+ "P-256",
+ ITM(ecdsa_pv_pub0),
+ PASS
+ },
+ {
+ "P-256",
+ ITM(ecdsa_pv_pub1),
+ FAIL
+ },
+};
+
+static const unsigned char ecdsa_siggen_msg0[] = {
+ 0xB8, 0x65, 0x55, 0x9D, 0x54, 0x5C, 0xD2, 0xC7,
+ 0xC2, 0xCA, 0x96, 0xDF, 0xF3, 0x9B, 0x26, 0xED,
+ 0xF8, 0x16, 0x99, 0x05, 0x94, 0xA9, 0x3F, 0x69,
+ 0x5F, 0xE8, 0x73, 0xC5, 0xFE, 0x78, 0x28, 0x84,
+ 0xC0, 0xA7, 0xFA, 0x29, 0xBE, 0x37, 0x82, 0xC0,
+ 0x56, 0x41, 0x49, 0xAF, 0xF3, 0x59, 0xBB, 0x96,
+ 0xF6, 0x4B, 0x87, 0x45, 0xAB, 0x1F, 0xB2, 0xB3,
+ 0x8F, 0x14, 0xD4, 0xD7, 0x1C, 0x29, 0x08, 0x0C,
+ 0x79, 0x8A, 0x38, 0xAE, 0x32, 0x1C, 0x38, 0x80,
+ 0x5B, 0x45, 0x25, 0x46, 0x5D, 0xCE, 0x7D, 0x34,
+ 0xC0, 0x90, 0xEF, 0x06, 0x84, 0xA1, 0x0F, 0xF8,
+ 0x56, 0x2D, 0x46, 0xF7, 0xB7, 0xDE, 0x06, 0x7C,
+ 0x87, 0xA6, 0x7E, 0x71, 0x8D, 0x7B, 0x27, 0xE5,
+ 0x51, 0x0C, 0xE7, 0xBA, 0x18, 0x08, 0xE0, 0xD5,
+ 0x0B, 0x8C, 0xB6, 0x22, 0xA5, 0x8F, 0xB3, 0xF7,
+ 0xFB, 0xC6, 0x2A, 0x59, 0x02, 0x8A, 0x8C, 0x42,
+};
+static const struct ecdsa_siggen_st ecdsa_siggen_data[] = {
+ {
+ "SHA2-256",
+ "P-384",
+ ITM(ecdsa_siggen_msg0),
+ },
+};
+
+static const unsigned char ecdsa_sigver_msg0[] = {
+ 0x0b, 0x00, 0xc4, 0x3f, 0xb9, 0xcb, 0x92, 0xd3,
+ 0x56, 0x83, 0xc6, 0x97, 0x23, 0xf8, 0xf1, 0x0b,
+ 0x0a, 0xa6, 0x60, 0xca, 0x3a, 0xed, 0xba, 0x38,
+ 0xf7, 0x86, 0xc2, 0x6d, 0xa1, 0xb6, 0x40, 0x2c,
+ 0x92, 0xfe, 0x44, 0x1a, 0x19, 0x61, 0x5c, 0x02,
+ 0xfa, 0xd3, 0x79, 0x99, 0xb8, 0x99, 0xe8, 0x70,
+ 0xaa, 0x26, 0x01, 0xf2, 0xe7, 0xdc, 0x69, 0xce,
+ 0x9a, 0xd2, 0xaa, 0x02, 0x15, 0xab, 0x0d, 0xcb,
+ 0x77, 0xaf, 0xe0, 0x81, 0x6d, 0x92, 0x6e, 0x09,
+ 0xcd, 0x93, 0xd6, 0x22, 0x67, 0xc2, 0xd3, 0x7c,
+ 0x58, 0x11, 0xc8, 0x77, 0x4e, 0x97, 0x92, 0x87,
+ 0xcd, 0xe4, 0xc9, 0x2a, 0x77, 0xb2, 0xf0, 0xe7,
+ 0xd3, 0x5a, 0x20, 0x36, 0x91, 0x75, 0x23, 0xa8,
+ 0xcb, 0x4a, 0xd0, 0xe5, 0x95, 0x3b, 0x24, 0x2a,
+ 0x86, 0xa0, 0xaa, 0xbe, 0xac, 0x59, 0xd7, 0xd0,
+ 0xfb, 0xdf, 0x33, 0xc9, 0x73, 0xaf, 0x8a, 0x06,
+};
+static const unsigned char ecdsa_sigver_msg1[] = {
+ 0x45, 0xBB, 0x9D, 0xDC, 0x1D, 0x0A, 0xF2, 0xD7,
+ 0x56, 0x07, 0x1F, 0x47, 0x2A, 0x17, 0xCE, 0x38,
+ 0xA8, 0x7E, 0x75, 0xED, 0x4F, 0xE4, 0x17, 0x65,
+ 0x11, 0x69, 0xDF, 0x04, 0xF0, 0x39, 0x28, 0xD0,
+ 0x75, 0xD5, 0xF0, 0x1C, 0x32, 0x84, 0x16, 0x74,
+ 0x7D, 0x61, 0x57, 0xDB, 0x92, 0x24, 0x60, 0xBA,
+ 0x58, 0x7B, 0x48, 0xB4, 0x44, 0xFB, 0xD7, 0x35,
+ 0xD7, 0xCF, 0x61, 0x34, 0x7F, 0x70, 0x38, 0xAE,
+ 0xE2, 0xB2, 0x6C, 0x8A, 0xD1, 0x27, 0xB4, 0xF0,
+ 0x33, 0xB9, 0xE9, 0x27, 0x1A, 0xEE, 0x34, 0x72,
+ 0x9D, 0x5E, 0x74, 0x28, 0xE7, 0x0B, 0x82, 0xE1,
+ 0x60, 0xC2, 0x43, 0xE6, 0x75, 0x4A, 0x2E, 0x66,
+ 0x88, 0x72, 0xCA, 0xC7, 0x97, 0xFE, 0x19, 0xCD,
+ 0xA4, 0x30, 0xBF, 0xC7, 0xDC, 0x37, 0xF8, 0x1B,
+ 0xB6, 0xD7, 0x7E, 0xAD, 0xD6, 0xC1, 0x20, 0xAC,
+ 0x79, 0x03, 0x89, 0xEA, 0xF4, 0x59, 0x21, 0xF2,
+};
+
+static const unsigned char ecdsa_sigver_pub0[] = {
+ POINT_CONVERSION_UNCOMPRESSED,
+ 0x2c, 0xdf, 0x6f, 0x23, 0x3d, 0x73, 0x86, 0x25,
+ 0x1a, 0x29, 0xd6, 0xde, 0x98, 0xcf, 0x85, 0xf7,
+ 0x6a, 0x55, 0xba, 0xdb, 0x0f, 0x35, 0x94, 0x92,
+ 0xb3, 0x58, 0xf3, 0x89, 0x7f, 0x6c, 0x22, 0x10,
+ 0xd9, 0xd3, 0x54, 0xd2, 0x74, 0x9f, 0x64, 0x0d,
+ 0xd2, 0xf8, 0x3e, 0xfc, 0x7f, 0xb7, 0x16, 0x36,
+};
+static const unsigned char ecdsa_sigver_pub1[] = {
+ POINT_CONVERSION_UNCOMPRESSED,
+ 0x00, 0xD4, 0x79, 0x9F, 0xD9, 0x99, 0xEC, 0x21,
+ 0x1E, 0xE6, 0x06, 0x58, 0xB7, 0xFB, 0x76, 0xFC,
+ 0xF5, 0x9A, 0xE1, 0x1E, 0x5A, 0x87, 0xD7, 0x0E,
+ 0x21, 0x7B, 0xDE, 0x21, 0x52, 0xE6, 0xE4, 0x09,
+ 0x2C, 0xB8, 0x5D, 0x99, 0xE2, 0x6A, 0xB1, 0xE5,
+ 0x79, 0x11, 0x49, 0xBD, 0x3D, 0xC7, 0x1C, 0x48,
+ 0xF5, 0x83, 0xFC, 0x9E, 0xF3, 0xAB, 0x2D, 0x30,
+ 0x64, 0xEC, 0x22, 0xCB, 0xEB, 0x95, 0xBF, 0xF2,
+ 0x2D, 0xCE,
+
+ 0x01, 0xB9, 0xFE, 0xBD, 0x4C, 0x4B, 0xDA, 0x1F,
+ 0x30, 0xC3, 0x5C, 0x0F, 0x5D, 0x3E, 0x36, 0x51,
+ 0xF2, 0xC0, 0xF7, 0xFC, 0x79, 0x25, 0x98, 0xF2,
+ 0x4B, 0x2B, 0x61, 0xFC, 0xD9, 0xC4, 0x5C, 0xC0,
+ 0x13, 0xA2, 0x4F, 0x2E, 0x34, 0xD4, 0x15, 0xC4,
+ 0x25, 0x13, 0xA9, 0x30, 0x35, 0x56, 0xB7, 0xCD,
+ 0xD0, 0xC4, 0x65, 0x5D, 0xFB, 0xB2, 0xE4, 0xBF,
+ 0x22, 0x67, 0xEF, 0xA1, 0x2E, 0xA2, 0x1B, 0x33,
+ 0xE4, 0x3D,
+};
+static const unsigned char ecdsa_sigver_r0[] = {
+ 0x6b, 0x35, 0x62, 0x67, 0xa3, 0xbd, 0x76, 0xc8,
+ 0xa3, 0xdc, 0x93, 0x18, 0x82, 0x6f, 0xd2, 0x43,
+ 0x52, 0x18, 0x93, 0x21, 0x8e, 0xce, 0x12, 0x65,
+};
+static const unsigned char ecdsa_sigver_r1[] = {
+ 0x01, 0xBF, 0xA6, 0x46, 0x6D, 0x4E, 0x1C, 0x42,
+ 0x18, 0x7D, 0x46, 0xC6, 0x5F, 0xA5, 0x05, 0xEA,
+ 0x1A, 0xEF, 0xDB, 0x46, 0xD1, 0x79, 0x3F, 0x2B,
+ 0xE2, 0x70, 0x0F, 0x14, 0x26, 0x30, 0x7F, 0x2D,
+ 0x1A, 0x41, 0xFD, 0x11, 0xC0, 0xBB, 0xD0, 0xD5,
+ 0x09, 0xAA, 0xE0, 0x1A, 0xFE, 0x59, 0x23, 0x7D,
+ 0x1B, 0x5C, 0xB9, 0x51, 0xCD, 0x3A, 0xA1, 0x32,
+ 0xC6, 0x92, 0xB0, 0x7D, 0x91, 0xC6, 0x30, 0xC0,
+ 0xA4, 0x2A,
+};
+static const unsigned char ecdsa_sigver_s0[] = {
+ 0x7b, 0x92, 0x4a, 0x13, 0x8d, 0x74, 0x87, 0xb2,
+ 0xd4, 0xc7, 0x21, 0x73, 0x2c, 0x8a, 0x09, 0x25,
+ 0xac, 0x19, 0xcf, 0x9c, 0xbc, 0xd7, 0x7b, 0xf8,
+};
+static const unsigned char ecdsa_sigver_s1[] = {
+ 0x00, 0x8D, 0x56, 0xBA, 0x60, 0x38, 0x23, 0x47,
+ 0xB8, 0x32, 0x73, 0x29, 0x40, 0x84, 0xF0, 0x2C,
+ 0x90, 0xB2, 0x1D, 0x56, 0xFF, 0x38, 0x68, 0xAA,
+ 0x42, 0xBA, 0x48, 0xA1, 0x52, 0x8C, 0xB4, 0xD6,
+ 0x15, 0xB7, 0x88, 0xB3, 0x71, 0xC6, 0x69, 0x60,
+ 0x6C, 0xEB, 0x4B, 0xF6, 0x19, 0x6A, 0x95, 0x8F,
+ 0x01, 0x09, 0xC6, 0x13, 0xE6, 0x17, 0x38, 0xC8,
+ 0x10, 0x49, 0x4F, 0x87, 0x43, 0x63, 0x62, 0x98,
+ 0xB1, 0xAC,
+};
+static const struct ecdsa_sigver_st ecdsa_sigver_data[] = {
+ {
+ "SHA-1",
+ "P-192",
+ ITM(ecdsa_sigver_msg0),
+ ITM(ecdsa_sigver_pub0),
+ ITM(ecdsa_sigver_r0),
+ ITM(ecdsa_sigver_s0),
+ PASS,
+ },
+ {
+ "SHA2-512",
+ "P-521",
+ ITM(ecdsa_sigver_msg1),
+ ITM(ecdsa_sigver_pub1),
+ ITM(ecdsa_sigver_r1),
+ ITM(ecdsa_sigver_s1),
+ FAIL,
+ },
+};
+
+#endif /* OPENSSL_NO_EC */
+
+
+#ifndef OPENSSL_NO_DSA
+
+struct dsa_paramgen_st {
+ size_t L;
+ size_t N;
+};
+
+struct dsa_pqver_st {
+ const unsigned char *p;
+ size_t p_len;
+ const unsigned char *q;
+ size_t q_len;
+ const unsigned char *seed;
+ size_t seed_len;
+ int counter;
+ int pass;
+};
+
+struct dsa_siggen_st {
+ const char *digest_alg;
+ size_t L;
+ size_t N;
+ const unsigned char *msg;
+ size_t msg_len;
+};
+
+struct dsa_sigver_st {
+ const char *digest_alg;
+ const unsigned char *p;
+ size_t p_len;
+ const unsigned char *q;
+ size_t q_len;
+ const unsigned char *g;
+ size_t g_len;
+ const unsigned char *pub;
+ size_t pub_len;
+ const unsigned char *msg;
+ size_t msg_len;
+ const unsigned char *r;
+ size_t r_len;
+ const unsigned char *s;
+ size_t s_len;
+ int pass;
+};
+
+static const struct dsa_paramgen_st dsa_keygen_data[] = {
+ { 2048, 224 },
+};
+
+static const struct dsa_paramgen_st dsa_paramgen_data[] = {
+ { 2048, 256 },
+};
+
+/* dsa_pqver */
+static const unsigned char dsa_pqver_p0[] = {
+ 0xEF, 0xC7, 0x95, 0xEB, 0x1E, 0x1C, 0x8F, 0x5E,
+ 0x4A, 0x85, 0xCD, 0x20, 0x66, 0xC7, 0xB9, 0x6C,
+ 0x4E, 0xC4, 0xE7, 0x3B, 0x7B, 0x8E, 0x0E, 0x8C,
+ 0x00, 0xF5, 0x2E, 0x68, 0xF5, 0xC2, 0x89, 0x47,
+ 0xA5, 0x7B, 0xA6, 0xA3, 0x30, 0xBC, 0xFA, 0x25,
+ 0x29, 0xBD, 0xE2, 0x4D, 0x05, 0x0B, 0x6D, 0x2D,
+ 0x49, 0x50, 0x53, 0xEF, 0x8C, 0xBE, 0xC3, 0xEC,
+ 0x92, 0xC1, 0x45, 0xE3, 0x95, 0x39, 0x72, 0x58,
+ 0xFD, 0x93, 0x23, 0x06, 0x37, 0xD6, 0x56, 0x1F,
+ 0x75, 0x92, 0xAD, 0x15, 0xA9, 0x88, 0x25, 0x3F,
+ 0xD6, 0x47, 0xB5, 0xB1, 0x32, 0x01, 0x2D, 0x70,
+ 0x55, 0xB9, 0x5D, 0xED, 0x1B, 0x40, 0x39, 0x78,
+ 0x74, 0xA6, 0xDF, 0x4B, 0xE4, 0x86, 0x8B, 0x56,
+ 0x46, 0x1E, 0xDB, 0x04, 0xD2, 0xD2, 0x50, 0xE9,
+ 0x5D, 0x88, 0xA8, 0x84, 0x55, 0xE3, 0xF3, 0xB7,
+ 0x07, 0x54, 0x9E, 0x98, 0x03, 0x9F, 0x31, 0x86,
+ 0xEB, 0x0D, 0x26, 0x97, 0x30, 0x31, 0x34, 0x64,
+ 0x35, 0x56, 0x40, 0x35, 0xEA, 0xE5, 0x00, 0x90,
+ 0xBD, 0x20, 0x93, 0xFC, 0xAD, 0x70, 0x9A, 0xF5,
+ 0xB8, 0xA4, 0xAD, 0xEC, 0xFE, 0x64, 0xF4, 0x2C,
+ 0x11, 0x25, 0x68, 0x27, 0x0E, 0x5C, 0x81, 0x57,
+ 0x64, 0x9A, 0x50, 0x86, 0xA3, 0x69, 0x61, 0x1E,
+ 0x0D, 0x62, 0xE9, 0x4D, 0x44, 0x1E, 0x1E, 0xE1,
+ 0x6D, 0x8F, 0x10, 0x67, 0x82, 0xB6, 0x6A, 0xD0,
+ 0x08, 0x59, 0xF3, 0xBA, 0xE8, 0x29, 0xE0, 0x60,
+ 0x1F, 0x3E, 0xBA, 0xAB, 0x6E, 0xB6, 0x5B, 0xAF,
+ 0xCC, 0x76, 0x5D, 0x70, 0x7F, 0x3A, 0xAA, 0x7E,
+ 0x27, 0x23, 0x6F, 0x8E, 0xF8, 0x06, 0xC1, 0x3E,
+ 0xAE, 0xBE, 0x22, 0x71, 0x93, 0xEC, 0x9A, 0x33,
+ 0x3C, 0xA4, 0x77, 0xD4, 0x76, 0x79, 0x10, 0x5A,
+ 0xF4, 0x07, 0x52, 0x66, 0x9D, 0xC5, 0xFD, 0xDA,
+ 0xA1, 0xE7, 0xA2, 0x45, 0x27, 0x08, 0x54, 0xB9,
+ 0x3B, 0xEC, 0x07, 0xFB, 0xE0, 0xF4, 0x4B, 0x7C,
+ 0xB1, 0x04, 0x2B, 0x0E, 0x65, 0x3A, 0xF7, 0x65,
+ 0x57, 0x65, 0xCF, 0x36, 0x28, 0x2A, 0x1C, 0x57,
+ 0x10, 0x28, 0x02, 0x26, 0xF7, 0x45, 0xAA, 0x1B,
+ 0x2E, 0xE3, 0x25, 0xEA, 0x28, 0xA1, 0x84, 0x1E,
+ 0xA1, 0xA3, 0xAB, 0x52, 0x25, 0xD4, 0x64, 0xB2,
+ 0xA8, 0xA5, 0xFD, 0x2F, 0x48, 0x90, 0x28, 0x8F,
+ 0x8B, 0x10, 0x7F, 0x6F, 0x80, 0xA9, 0x4B, 0xB3,
+ 0xC0, 0x5B, 0x27, 0xE9, 0x90, 0x90, 0x53, 0xA8,
+ 0x30, 0x88, 0xD4, 0x9B, 0x09, 0x62, 0xCD, 0x99,
+ 0x61, 0x63, 0x14, 0xDF, 0xC3, 0x5A, 0x60, 0xBE,
+ 0xA3, 0x40, 0xAB, 0x29, 0x3E, 0xB2, 0x02, 0x19,
+ 0x9D, 0x97, 0x75, 0x34, 0x0D, 0x71, 0x3B, 0xEC,
+ 0xF1, 0x13, 0x23, 0xE6, 0xCA, 0x35, 0x84, 0xFF,
+ 0x27, 0x4A, 0xE0, 0x11, 0x59, 0xEB, 0x1D, 0x8C,
+ 0xFF, 0xF3, 0x91, 0x90, 0x3C, 0xE9, 0x43, 0x31,
+};
+static const unsigned char dsa_pqver_p1[] = {
+ 0x83, 0xA6, 0x8F, 0xE5, 0xFE, 0xF0, 0x9D, 0x9E,
+ 0x8A, 0x80, 0x9C, 0x47, 0xEF, 0xBE, 0x1A, 0xD0,
+ 0x7F, 0xEA, 0x6D, 0x08, 0x59, 0x2D, 0x04, 0xB6,
+ 0xAC, 0x2A, 0x54, 0x47, 0x42, 0xB2, 0x5F, 0x28,
+ 0xF6, 0x30, 0x36, 0xE3, 0xDA, 0x4E, 0xDC, 0xC1,
+ 0x6E, 0x61, 0xCE, 0x45, 0x1C, 0x73, 0x87, 0x3E,
+ 0xB7, 0x94, 0xDB, 0x68, 0xEE, 0xFD, 0x8D, 0x93,
+ 0x5E, 0x5D, 0xAB, 0x77, 0xA2, 0xF0, 0xD6, 0x60,
+ 0xCD, 0x9D, 0x13, 0xE0, 0xA6, 0xE7, 0xEC, 0x45,
+ 0xBA, 0xD8, 0xB0, 0x3D, 0x4F, 0x75, 0x30, 0xB7,
+ 0x89, 0x96, 0x2B, 0x48, 0xFC, 0x73, 0xB8, 0x5C,
+ 0x59, 0xDC, 0x41, 0xEF, 0xCE, 0xC6, 0x7F, 0x66,
+ 0x4F, 0xB6, 0x1F, 0x9C, 0x91, 0xB4, 0xEE, 0xAA,
+ 0x2C, 0x4A, 0x7F, 0x1F, 0xBF, 0xE2, 0x9A, 0xF2,
+ 0x9F, 0x52, 0x83, 0x30, 0x97, 0x86, 0x7F, 0xA2,
+ 0x85, 0x20, 0x75, 0x75, 0xAD, 0x01, 0xE2, 0x40,
+ 0x3A, 0x82, 0xD8, 0x52, 0x91, 0x15, 0x67, 0x1B,
+ 0x00, 0x78, 0xFD, 0x3E, 0x61, 0x8A, 0xA8, 0x1D,
+ 0x1A, 0x07, 0x8E, 0x87, 0x48, 0x64, 0x1E, 0x5B,
+ 0x05, 0x34, 0x7E, 0x5D, 0xD6, 0x11, 0xC4, 0xB7,
+ 0x0E, 0xF3, 0x91, 0xC7, 0x2B, 0xAD, 0x22, 0x96,
+ 0xA3, 0xF7, 0x4E, 0xEB, 0xE4, 0x9F, 0x67, 0x91,
+ 0x9D, 0x65, 0x45, 0x8F, 0x92, 0x2F, 0x8B, 0x46,
+ 0xCC, 0x4B, 0xB9, 0xC5, 0xD0, 0x00, 0xFF, 0xBB,
+ 0x37, 0xD6, 0x20, 0x36, 0x7D, 0x4A, 0xC3, 0x75,
+ 0xAC, 0x58, 0xE5, 0x24, 0x54, 0x47, 0x80, 0x2C,
+ 0x83, 0xBD, 0xC8, 0xA7, 0x87, 0x20, 0x3D, 0xA8,
+ 0x78, 0xE2, 0xC5, 0x4E, 0xE8, 0x4E, 0x3C, 0xFA,
+ 0x75, 0xA0, 0x8D, 0x35, 0x8E, 0xF2, 0x61, 0x19,
+ 0x84, 0x9C, 0x71, 0x95, 0x5B, 0x09, 0xE1, 0xB6,
+ 0xC6, 0x6A, 0x7C, 0x34, 0x39, 0x67, 0x14, 0xAB,
+ 0xA7, 0x6B, 0x45, 0x01, 0xF0, 0x0F, 0x52, 0xB5,
+ 0x23, 0xD9, 0x67, 0x57, 0x91, 0x9F, 0xC2, 0xA9,
+ 0xB6, 0x7C, 0x15, 0x59, 0x3E, 0x22, 0x89, 0xD6,
+ 0x0B, 0x83, 0xB4, 0x29, 0xEF, 0x0B, 0x66, 0x30,
+ 0x2D, 0xE7, 0xC5, 0x04, 0x1F, 0x28, 0x7D, 0x9F,
+ 0xC9, 0x87, 0x05, 0xC6, 0x1B, 0x18, 0x1F, 0x3B,
+ 0x90, 0x00, 0x31, 0x5B, 0xDC, 0x19, 0x7D, 0x71,
+ 0xE4, 0xA4, 0x21, 0xB5, 0x37, 0xE7, 0x9B, 0xA4,
+ 0xBC, 0x04, 0xF8, 0x0A, 0x95, 0x3F, 0xDB, 0x30,
+ 0xA5, 0xC9, 0xC2, 0xD7, 0x19, 0x9D, 0x57, 0x77,
+ 0x44, 0xB7, 0x47, 0xBD, 0xA1, 0x01, 0xEB, 0x51,
+ 0xA4, 0xB2, 0x8B, 0x1A, 0x51, 0xA4, 0xCC, 0x07,
+ 0x57, 0x19, 0xFB, 0xFC, 0xAA, 0x42, 0xCC, 0x2A,
+ 0xCE, 0xF8, 0xFD, 0xF8, 0x92, 0xC4, 0xDC, 0x7B,
+ 0x0B, 0x92, 0x9A, 0xD7, 0xC5, 0xBC, 0x6D, 0x74,
+ 0x13, 0x0E, 0xD2, 0x8F, 0x86, 0xEB, 0x8D, 0xD7,
+ 0xC6, 0xAC, 0x43, 0xD8, 0x00, 0x80, 0x53, 0x57,
+};
+static const unsigned char dsa_pqver_q0[] = {
+ 0xCB, 0x74, 0xE6, 0x57, 0x37, 0x0F, 0x7A, 0x61,
+ 0x0B, 0x09, 0xCE, 0x91, 0x78, 0x06, 0x3C, 0x7F,
+ 0x20, 0xF5, 0xD1, 0x1E, 0x1D, 0xC2, 0x43, 0xBA,
+ 0x89, 0xC8, 0x4A, 0x49, 0x83, 0x38, 0xE1, 0x2D,
+};
+static const unsigned char dsa_pqver_q1[] = {
+ 0x85, 0x2B, 0x77, 0x9B, 0x1B, 0x70, 0x6F, 0x8C,
+ 0x10, 0xF3, 0x2F, 0xA9, 0xC2, 0xEE, 0xF6, 0x74,
+ 0x78, 0x5F, 0xD5, 0x5E, 0x2C, 0x34, 0xAF, 0xD1,
+ 0x25, 0x63, 0x96, 0x6D, 0x6D, 0x84, 0x68, 0x3F,
+};
+static const unsigned char dsa_pqver_seed0[] = {
+ 0x33, 0xDC, 0x43, 0xAF, 0xC4, 0x51, 0x5C, 0x3B,
+ 0x8B, 0x8A, 0x0D, 0x5D, 0xA2, 0x84, 0xDE, 0x6D,
+ 0xCC, 0x6C, 0xFD, 0x42, 0x37, 0x98, 0xFB, 0x66,
+ 0xAB, 0xD3, 0x73, 0x96, 0x1F, 0xC5, 0xD1, 0x46,
+};
+static const unsigned char dsa_pqver_seed1[] = {
+ 0xEE, 0xA4, 0x02, 0x70, 0x0B, 0x89, 0xB7, 0x96,
+ 0x52, 0x5C, 0x00, 0xC4, 0x8E, 0x14, 0x45, 0x0F,
+ 0x6A, 0x18, 0x00, 0xF7, 0x24, 0x52, 0x41, 0x0E,
+ 0x33, 0x41, 0xD2, 0x91, 0xC3, 0x16, 0x7D, 0x5D,
+};
+static const struct dsa_pqver_st dsa_pqver_data[] = {
+ {
+ ITM(dsa_pqver_p0),
+ ITM(dsa_pqver_q0),
+ ITM(dsa_pqver_seed0),
+ 1956,
+ PASS
+ },
+ {
+ ITM(dsa_pqver_p1),
+ ITM(dsa_pqver_q1),
+ ITM(dsa_pqver_seed1),
+ 685,
+ FAIL
+ },
+};
+
+/* dsa_siggen */
+static const unsigned char dsa_siggen_msg0[]= {
+ 0x85, 0x01, 0x2F, 0x61, 0x1C, 0x36, 0xA8, 0xE1,
+ 0x54, 0x55, 0x13, 0xFA, 0x00, 0x58, 0x1E, 0xD4,
+ 0xF2, 0x4C, 0x54, 0x67, 0xB3, 0xEA, 0x48, 0x2C,
+ 0xD1, 0x27, 0xBE, 0x5F, 0x26, 0x35, 0xD4, 0x00,
+ 0xDD, 0x6C, 0xD8, 0xE8, 0x3C, 0x6D, 0x2D, 0x50,
+ 0x01, 0x53, 0xC7, 0xB5, 0xA3, 0x8E, 0x9A, 0x85,
+ 0xA6, 0x53, 0x8C, 0x46, 0x55, 0x02, 0xA1, 0x5E,
+ 0xEA, 0x6C, 0xCF, 0x4A, 0x86, 0xA9, 0x34, 0x1B,
+ 0x0B, 0xB6, 0x88, 0x9A, 0xDE, 0xC4, 0x27, 0x7F,
+ 0x93, 0xAA, 0x69, 0x54, 0x48, 0x33, 0x98, 0xA0,
+ 0x71, 0x45, 0x09, 0x5A, 0x51, 0xDF, 0xB6, 0x66,
+ 0x06, 0xB7, 0xAD, 0x64, 0xED, 0xC1, 0xFA, 0x6B,
+ 0xA8, 0x0F, 0xE8, 0x3C, 0x2E, 0x0C, 0xCB, 0xB0,
+ 0xAE, 0xDE, 0x25, 0x0C, 0x68, 0xA8, 0x15, 0x97,
+ 0xD0, 0xBC, 0x0B, 0x81, 0x15, 0xDC, 0x2B, 0xF3,
+ 0xF2, 0xB7, 0xA7, 0xA9, 0x74, 0xD6, 0x5D, 0xB8,
+ 0xB7, 0xD1, 0xFC, 0x5D, 0xCA, 0x69, 0x5D, 0x7D,
+ 0xC6, 0x1E, 0x37, 0x7D, 0xD3, 0xA9, 0x1E, 0xAE,
+ 0x60, 0x22, 0x3A, 0x4B, 0x7A, 0xB1, 0x3D, 0xA4,
+ 0x6D, 0xB3, 0xA5, 0x8C, 0x89, 0x91, 0xCF, 0xE6,
+ 0x5B, 0xF9, 0xB6, 0x87, 0x56, 0x75, 0xB9, 0x0B,
+ 0x08, 0x85, 0x32, 0x52, 0x81, 0x99, 0xA7, 0x98,
+ 0x44, 0x30, 0x3B, 0x44, 0xBC, 0xB8, 0xB2, 0x6D,
+ 0x59, 0x52, 0xD3, 0x84, 0x74, 0x65, 0x02, 0xF9,
+ 0x71, 0xB9, 0x16, 0x7A, 0x42, 0x62, 0xDE, 0x9B,
+ 0x66, 0xF6, 0x04, 0x2C, 0x1F, 0x96, 0xF7, 0x41,
+ 0x38, 0x1A, 0xF1, 0x8C, 0x8A, 0x40, 0x9F, 0x72,
+ 0x73, 0xF9, 0xE9, 0x35, 0x11, 0x1F, 0x02, 0x0C,
+ 0xB1, 0x51, 0xE8, 0x78, 0xDB, 0xE0, 0xB2, 0x35,
+ 0xBD, 0xC5, 0x84, 0x5B, 0x2B, 0x25, 0x66, 0x42,
+ 0x87, 0xE5, 0xA4, 0x77, 0x71, 0xB4, 0x4A, 0x59,
+ 0x31, 0xF1, 0x5A, 0xF5, 0x98, 0x9C, 0x61, 0xEA,
+ 0x52, 0x2F, 0x51, 0x85, 0xD9, 0x7F, 0x26, 0xDD,
+ 0x91, 0x63, 0x41, 0xD5, 0x99, 0xD1, 0x64, 0xCE,
+ 0xEE, 0x82, 0xD1, 0x73, 0x0A, 0x54, 0x3B, 0x03,
+ 0xD7, 0xC1, 0xF7, 0x01, 0xBD, 0x44, 0x99, 0xFE,
+ 0x9B, 0x1E, 0x2C, 0x8F, 0xF4, 0x55, 0xC5, 0x59,
+ 0x58, 0xAF, 0xCB, 0xAD, 0xB8, 0x22, 0x1A, 0x29,
+ 0xF3, 0x18, 0x39, 0x31, 0x9B, 0xFC, 0x08, 0x7E,
+ 0xBE, 0x45, 0xDA, 0x9E, 0xD8, 0x7F, 0x8C, 0x5D,
+ 0x10, 0xF9, 0xF8, 0xB4, 0xFA, 0x58, 0xE6, 0x28,
+ 0xB4, 0x6C, 0x70, 0x12, 0xD2, 0xFA, 0x49, 0xB2,
+ 0x5F, 0xD0, 0x81, 0x4A, 0xA1, 0xAA, 0xF8, 0x93,
+ 0xD2, 0x26, 0xE7, 0xDA, 0x7D, 0x79, 0xC5, 0xC8,
+ 0xC2, 0x9E, 0xA7, 0x01, 0xD5, 0x7A, 0xF9, 0x75,
+ 0x62, 0xDB, 0xDC, 0x93, 0x90, 0xDA, 0xA5, 0xA6,
+ 0x20, 0x58, 0x17, 0x9E, 0x47, 0x4E, 0xFB, 0xB8,
+ 0xFB, 0xCD, 0x2E, 0xF4, 0xCD, 0x49, 0x03, 0x90,
+};
+static struct dsa_siggen_st dsa_siggen_data[] = {
+ {
+ "SHA2-384",
+ 3072,
+ 256,
+ ITM(dsa_siggen_msg0),
+ },
+};
+
+/* dsa_sigver */
+static const unsigned char dsa_sigver_p0[] = {
+ 0xD2, 0x90, 0x2E, 0x38, 0xA5, 0x32, 0xBB, 0x63,
+ 0xE0, 0xC3, 0x20, 0xD9, 0x26, 0x06, 0x21, 0x06,
+ 0x85, 0x3A, 0x4C, 0xE3, 0x13, 0x83, 0xCA, 0x43,
+ 0x8C, 0x9C, 0x76, 0xC0, 0x65, 0x60, 0x27, 0x7E,
+ 0x7C, 0xA0, 0x83, 0x9F, 0x65, 0x91, 0xF9, 0x16,
+ 0x5F, 0xE8, 0x60, 0x0C, 0xC6, 0x91, 0x20, 0x35,
+ 0xE7, 0xF1, 0x83, 0xE6, 0xF8, 0x8C, 0xBB, 0x4C,
+ 0xFF, 0xF5, 0x4D, 0x09, 0x8E, 0x83, 0x72, 0xCB,
+ 0x22, 0x5F, 0xD0, 0x85, 0xA9, 0x60, 0x3C, 0x4A,
+ 0xA6, 0xDD, 0x73, 0x1F, 0xCF, 0xD0, 0xD7, 0x42,
+ 0xB8, 0x72, 0x61, 0xDB, 0x91, 0xE3, 0xBB, 0x5C,
+ 0x21, 0x41, 0xFD, 0x97, 0xD0, 0x81, 0x72, 0x53,
+ 0x77, 0xE0, 0x15, 0x9E, 0xC0, 0xD0, 0x6A, 0xB4,
+ 0x7F, 0xF8, 0x63, 0x39, 0x1A, 0x25, 0x63, 0x84,
+ 0x4D, 0xBA, 0x2C, 0x29, 0x94, 0x28, 0xCE, 0x5B,
+ 0x9A, 0xC3, 0x14, 0xAD, 0x9D, 0x82, 0x1D, 0x8F,
+ 0xF3, 0xE9, 0x60, 0x65, 0x28, 0x0B, 0x0E, 0x48,
+ 0x6B, 0xCC, 0x05, 0x9D, 0x3B, 0x1F, 0x1D, 0x0A,
+ 0xA7, 0xF8, 0x22, 0xB0, 0xE1, 0x52, 0xB0, 0x25,
+ 0x8F, 0xEA, 0x25, 0x28, 0xC9, 0x6F, 0x44, 0xCD,
+ 0xA4, 0x16, 0x13, 0xE8, 0xD0, 0xDB, 0x43, 0x6E,
+ 0xCE, 0xEC, 0x0B, 0xA8, 0x3E, 0x53, 0x10, 0xA2,
+ 0x52, 0x0E, 0xBB, 0x63, 0x63, 0x84, 0x2C, 0x12,
+ 0x93, 0x29, 0x98, 0xAF, 0x38, 0x8F, 0x0B, 0x86,
+ 0x16, 0x99, 0x0E, 0x39, 0xA8, 0x4A, 0x0B, 0xCD,
+ 0xAA, 0x66, 0x8F, 0x4C, 0x15, 0xB7, 0xA5, 0xBB,
+ 0x22, 0x77, 0x8D, 0xE8, 0x05, 0x35, 0x2D, 0xAA,
+ 0x8D, 0x83, 0xDE, 0xBC, 0x15, 0x3D, 0xC2, 0x95,
+ 0x0E, 0x47, 0x85, 0x41, 0xAD, 0xE3, 0xB1, 0x70,
+ 0x76, 0x1B, 0x62, 0x9E, 0x96, 0x8B, 0x18, 0xD7,
+ 0xE3, 0xB5, 0xF8, 0x6E, 0x85, 0x67, 0x61, 0x54,
+ 0x7C, 0x85, 0x08, 0x91, 0xF4, 0x46, 0x3F, 0x01,
+ 0x99, 0x48, 0x18, 0x3C, 0x0D, 0xC7, 0x2D, 0xEC,
+ 0xA4, 0x11, 0x1D, 0x4F, 0x7F, 0xBF, 0x3A, 0xE8,
+ 0x9C, 0x1C, 0xAE, 0x9E, 0x30, 0x32, 0x1F, 0x81,
+ 0xEF, 0x14, 0xFE, 0x5C, 0xC2, 0x5C, 0xD0, 0x6A,
+ 0x7C, 0x18, 0x88, 0x9F, 0xC4, 0x97, 0x7D, 0x4B,
+ 0x3B, 0x01, 0xEB, 0x59, 0x58, 0x1C, 0x00, 0x6B,
+ 0x3E, 0xD6, 0x80, 0x80, 0x86, 0x06, 0x39, 0x88,
+ 0x0D, 0x23, 0x1E, 0xD6, 0x5E, 0x1F, 0x92, 0x3B,
+ 0xEC, 0x50, 0x0B, 0xA0, 0x83, 0x4F, 0x10, 0xDE,
+ 0xAF, 0x7B, 0x19, 0xBC, 0xBD, 0x72, 0xE6, 0x42,
+ 0xFE, 0xD7, 0xEF, 0x22, 0xD3, 0x83, 0x6B, 0x30,
+ 0xA3, 0x95, 0x0D, 0x3E, 0x61, 0x9E, 0xBC, 0x0E,
+ 0x14, 0x7E, 0x61, 0x05, 0x3D, 0xBA, 0x4E, 0xEF,
+ 0x31, 0x75, 0x5D, 0x10, 0x1E, 0xBA, 0xBD, 0xBA,
+ 0x89, 0x4D, 0x3A, 0x5B, 0x03, 0xB1, 0xAE, 0x27,
+ 0x47, 0x2D, 0x03, 0xB1, 0x8A, 0x74, 0x1B, 0xF3,
+};
+static const unsigned char dsa_sigver_q0[] = {
+ 0xAC, 0x71, 0x8D, 0x81, 0x05, 0x2F, 0xAB, 0x72,
+ 0xB9, 0x96, 0x94, 0x98, 0xB5, 0x19, 0x2B, 0xE2,
+ 0x78, 0x06, 0xAA, 0x32, 0xFC, 0xB9, 0xD2, 0xFD,
+ 0x26, 0xC4, 0x50, 0x6F, 0x81, 0xD8, 0x04, 0xAB,
+};
+static const unsigned char dsa_sigver_g0[] = {
+ 0x3D, 0x0B, 0x46, 0x39, 0x13, 0xFF, 0x67, 0xA8,
+ 0x8C, 0xE8, 0x8A, 0x46, 0x46, 0x9A, 0xE6, 0x70,
+ 0xA1, 0xF5, 0x48, 0xF5, 0x84, 0xF8, 0x93, 0x57,
+ 0x9A, 0x4F, 0x2C, 0xD4, 0x26, 0x49, 0x1C, 0x83,
+ 0x64, 0x14, 0x0B, 0x5B, 0xEF, 0x6F, 0x6F, 0x91,
+ 0x14, 0xC5, 0x4D, 0xE8, 0x86, 0x47, 0x5C, 0xFC,
+ 0xAE, 0xBF, 0xD8, 0x32, 0xE2, 0x96, 0xB9, 0x61,
+ 0x70, 0x3F, 0x24, 0x29, 0xFA, 0x41, 0x5D, 0x8E,
+ 0xD0, 0xB0, 0xF1, 0x26, 0xD5, 0x7C, 0xE6, 0x17,
+ 0x48, 0xE5, 0x04, 0x0E, 0x58, 0x14, 0xEE, 0xBA,
+ 0x64, 0xE9, 0xF1, 0x6A, 0x7C, 0x17, 0xAB, 0x7B,
+ 0x28, 0xCF, 0x69, 0x7D, 0xDC, 0x54, 0xCA, 0xF2,
+ 0x4C, 0x22, 0x17, 0xDD, 0xC3, 0x1A, 0x02, 0xE2,
+ 0x8E, 0xE6, 0xA4, 0xFB, 0x84, 0x27, 0x2B, 0xE8,
+ 0x14, 0xF3, 0x3D, 0xAC, 0x59, 0x0C, 0xAB, 0x69,
+ 0x0E, 0x73, 0xDF, 0x82, 0xC1, 0xDE, 0xD7, 0xD9,
+ 0xA7, 0xCA, 0x8F, 0x4B, 0xCE, 0x8A, 0x05, 0xBD,
+ 0x07, 0xC8, 0x29, 0xBB, 0x46, 0x29, 0x2A, 0x4F,
+ 0xA7, 0x12, 0x19, 0x91, 0x01, 0xA0, 0xAE, 0x16,
+ 0xEF, 0xC1, 0xC5, 0x4B, 0x03, 0xF0, 0x53, 0xDC,
+ 0xFC, 0x1C, 0xC4, 0x73, 0xB7, 0xBF, 0x53, 0xEB,
+ 0x19, 0x63, 0xCA, 0x30, 0x53, 0x54, 0x12, 0x90,
+ 0x0E, 0x43, 0xC7, 0x66, 0xFF, 0x29, 0xFC, 0xA4,
+ 0xE8, 0xF6, 0x4B, 0x76, 0x3B, 0xA2, 0x65, 0x6B,
+ 0x9E, 0xFA, 0xBA, 0x5B, 0x54, 0x94, 0x34, 0xF6,
+ 0xD1, 0x20, 0x2A, 0xF7, 0x39, 0x72, 0xA3, 0xDB,
+ 0xD1, 0x8F, 0xA6, 0x4D, 0x1B, 0xB1, 0x2D, 0xC5,
+ 0x7F, 0xC5, 0x2C, 0x7E, 0x6D, 0xD9, 0xC8, 0xC2,
+ 0x19, 0xC0, 0xC4, 0xC2, 0x77, 0xD9, 0x4C, 0x63,
+ 0x77, 0x59, 0x0C, 0x5B, 0xFE, 0x69, 0xEF, 0xBF,
+ 0x58, 0x47, 0x69, 0x3E, 0x49, 0xA7, 0x1B, 0x98,
+ 0x6C, 0xE5, 0xA7, 0x42, 0x8B, 0x0E, 0x68, 0x05,
+ 0x48, 0x80, 0x39, 0xF4, 0x02, 0x9E, 0xE2, 0x9F,
+ 0x1C, 0xDA, 0x24, 0xC5, 0xB8, 0xEC, 0x03, 0xEA,
+ 0x7A, 0x00, 0xDF, 0xCF, 0x58, 0xD0, 0xE7, 0xB7,
+ 0xF3, 0xE7, 0x36, 0xDD, 0x1F, 0x65, 0xF9, 0x2D,
+ 0x6F, 0xC3, 0xE4, 0x72, 0xFD, 0xBA, 0x58, 0x8D,
+ 0xB5, 0xDF, 0x61, 0x3D, 0x3B, 0xB5, 0xF3, 0x08,
+ 0xE7, 0x21, 0x5A, 0x7D, 0xFF, 0x02, 0x1E, 0x0E,
+ 0x4E, 0xB5, 0x0D, 0x3D, 0x33, 0xF4, 0xA7, 0x6D,
+ 0xF7, 0x96, 0xC2, 0x96, 0x85, 0x33, 0x9C, 0x58,
+ 0x72, 0x5C, 0x97, 0x73, 0x0E, 0xDC, 0x5C, 0x6B,
+ 0x3D, 0x68, 0xF7, 0xF0, 0x0F, 0xCC, 0x01, 0xBB,
+ 0x47, 0x01, 0x3C, 0xB0, 0x52, 0x48, 0x70, 0xB8,
+ 0x0C, 0x0F, 0x04, 0xB5, 0x8F, 0x70, 0x50, 0x12,
+ 0x7C, 0x9D, 0xD1, 0xC1, 0x2B, 0xFE, 0x95, 0x31,
+ 0x8F, 0x2D, 0xFA, 0xAC, 0xAE, 0x24, 0xDD, 0x13,
+ 0xDA, 0x76, 0xC2, 0x34, 0xB9, 0x4A, 0x3E, 0xC3,
+};
+static const unsigned char dsa_sigver_pub0[] = {
+ 0x91, 0x78, 0x1C, 0xBA, 0x8A, 0x2F, 0xF6, 0xEC,
+ 0x9B, 0xD4, 0x73, 0x2C, 0x1F, 0xC0, 0xFE, 0x79,
+ 0xCF, 0xAC, 0x0C, 0x3C, 0x0D, 0x81, 0x85, 0x3D,
+ 0xCD, 0x67, 0x2B, 0x77, 0x99, 0x4A, 0x51, 0x48,
+ 0x58, 0x03, 0xC9, 0x68, 0xE6, 0x19, 0x26, 0x28,
+ 0xDC, 0x86, 0x9F, 0x8F, 0xCE, 0xDD, 0x1B, 0xCD,
+ 0xDD, 0x63, 0x4E, 0xCE, 0x76, 0x4D, 0xD5, 0x0D,
+ 0x71, 0x73, 0x04, 0x03, 0x9C, 0x35, 0xD0, 0x56,
+ 0x98, 0x25, 0xA7, 0x06, 0xF2, 0x6B, 0xA9, 0x9F,
+ 0x9A, 0xB1, 0x2A, 0xBD, 0xB7, 0x71, 0x62, 0x99,
+ 0x06, 0x47, 0x77, 0x22, 0x57, 0xFA, 0x24, 0x21,
+ 0x21, 0xB0, 0x78, 0x26, 0x7E, 0xEC, 0xB6, 0xEB,
+ 0x82, 0x15, 0x53, 0x68, 0xAE, 0xAC, 0x5B, 0xDC,
+ 0xA6, 0x7F, 0x6B, 0x26, 0xE6, 0x59, 0x22, 0x55,
+ 0x1C, 0x3B, 0xFD, 0xD5, 0x90, 0xA9, 0x6F, 0xB3,
+ 0xE6, 0x99, 0x8E, 0x26, 0x72, 0xA1, 0x02, 0xAA,
+ 0x37, 0xF6, 0x89, 0x68, 0xF1, 0x5A, 0x6D, 0x54,
+ 0xAD, 0x9D, 0xF3, 0x03, 0xBE, 0x3F, 0x9D, 0x85,
+ 0x38, 0x25, 0xB8, 0xDF, 0xB8, 0x43, 0x21, 0xCA,
+ 0xF8, 0xDC, 0x12, 0x40, 0x1E, 0xEF, 0x37, 0x40,
+ 0xCE, 0x0E, 0x02, 0x88, 0x63, 0x98, 0x2E, 0x93,
+ 0x89, 0xB0, 0x43, 0xAC, 0x0E, 0x62, 0x4C, 0x38,
+ 0x14, 0xAC, 0x0C, 0xA3, 0x03, 0x10, 0x8E, 0xB4,
+ 0x60, 0x10, 0x9B, 0xCC, 0x16, 0xA7, 0xB8, 0x1D,
+ 0x73, 0x81, 0x26, 0x12, 0xA8, 0x9A, 0xFE, 0x17,
+ 0xBB, 0x2D, 0x33, 0x5E, 0x8C, 0xA4, 0x80, 0xBF,
+ 0x84, 0x37, 0xCA, 0x0F, 0x50, 0x23, 0x79, 0x20,
+ 0x2A, 0x8E, 0xD1, 0x1F, 0x9F, 0x89, 0x98, 0x4F,
+ 0xF5, 0xB6, 0x0F, 0xB9, 0x3C, 0xFC, 0x6C, 0x00,
+ 0xBC, 0x76, 0x2F, 0xB4, 0xFD, 0x22, 0x13, 0x37,
+ 0x26, 0xCD, 0x9B, 0xAF, 0x4C, 0x89, 0x16, 0xD0,
+ 0x73, 0x44, 0xF9, 0x71, 0x60, 0xA2, 0x3E, 0xFE,
+ 0x24, 0xFE, 0xFC, 0xFE, 0x90, 0x91, 0xED, 0x92,
+ 0x57, 0x0A, 0xFA, 0xEB, 0x21, 0x99, 0xE3, 0x9A,
+ 0xFF, 0x5C, 0x74, 0x85, 0xC2, 0x6D, 0x83, 0x90,
+ 0xEE, 0x84, 0x05, 0x1A, 0x00, 0xAC, 0x87, 0xA7,
+ 0x78, 0x87, 0xCA, 0x70, 0xFC, 0xB0, 0xF4, 0x3B,
+ 0x61, 0x7C, 0xD0, 0x09, 0x63, 0x2B, 0x5E, 0xC2,
+ 0xFE, 0x15, 0x41, 0xB3, 0x9F, 0xFC, 0x19, 0xE3,
+ 0x4D, 0x3C, 0x6F, 0x89, 0xEB, 0x8A, 0x43, 0xEC,
+ 0x8E, 0xFB, 0xEC, 0xCD, 0x99, 0x2E, 0x4B, 0x02,
+ 0x99, 0xAC, 0xC6, 0x62, 0xAA, 0xC5, 0x0F, 0xA3,
+ 0x0B, 0xBB, 0xCD, 0x51, 0x0C, 0x19, 0xA7, 0x7A,
+ 0x43, 0x6C, 0xAA, 0x26, 0x28, 0x2A, 0xC9, 0x9D,
+ 0x97, 0xAE, 0x83, 0x74, 0xDA, 0xC4, 0x03, 0x98,
+ 0x94, 0x58, 0x28, 0xBC, 0x32, 0x1D, 0xD4, 0xF2,
+ 0x6F, 0x89, 0x92, 0xD4, 0x80, 0x9B, 0xDE, 0x6B,
+ 0xC5, 0x6F, 0xDB, 0x7A, 0x03, 0x1C, 0xF5, 0x55,
+};
+static const unsigned char dsa_sigver_msg0[] = {
+ 0x32, 0xE9, 0x64, 0x47, 0xED, 0x3B, 0xF0, 0xC0,
+ 0xCA, 0xC2, 0x90, 0xF5, 0x10, 0x60, 0x99, 0x82,
+ 0x4D, 0x13, 0x44, 0xFA, 0x92, 0xD1, 0xFD, 0x50,
+ 0x26, 0x80, 0xEA, 0x7B, 0x7D, 0xC5, 0xF0, 0xB7,
+};
+static const unsigned char dsa_sigver_msg1[] = {
+ 0x31, 0xE9, 0x64, 0x47, 0xED, 0x3B, 0xF0, 0xC0,
+ 0xCA, 0xC2, 0x90, 0xF5, 0x10, 0x60, 0x99, 0x82,
+ 0x4D, 0x13, 0x44, 0xFA, 0x92, 0xD1, 0xFD, 0x50,
+ 0x26, 0x80, 0xEA, 0x7B, 0x7D, 0xC5, 0xF0, 0xB7
+};
+static const unsigned char dsa_sigver_r0[] = {
+ 0x2A, 0x24, 0x0F, 0xA7, 0x04, 0xF1, 0xE0, 0x60,
+ 0x3B, 0x07, 0xDE, 0xB6, 0x5F, 0x01, 0x20, 0x81,
+ 0xDD, 0x64, 0x22, 0x0F, 0x9F, 0x2E, 0x67, 0x33,
+ 0xB7, 0x56, 0xDE, 0x17, 0xD0, 0xED, 0x9D, 0x30,
+};
+static const unsigned char dsa_sigver_s0[] = {
+ 0x15, 0x93, 0x81, 0x6E, 0xC2, 0x07, 0x6E, 0x06,
+ 0x6A, 0xBF, 0x62, 0xBF, 0x93, 0xA6, 0xCB, 0x6E,
+ 0xBA, 0x1E, 0x72, 0x57, 0x27, 0x0E, 0x85, 0x9E,
+ 0x8C, 0x42, 0x9A, 0x41, 0x63, 0x27, 0x74, 0x4F,
+};
+static const struct dsa_sigver_st dsa_sigver_data[] = {
+ {
+ "SHA2-512",
+ ITM(dsa_sigver_p0),
+ ITM(dsa_sigver_q0),
+ ITM(dsa_sigver_g0),
+ ITM(dsa_sigver_pub0),
+ ITM(dsa_sigver_msg0),
+ ITM(dsa_sigver_r0),
+ ITM(dsa_sigver_s0),
+ PASS,
+ },
+ {
+ "SHA2-512",
+ ITM(dsa_sigver_p0),
+ ITM(dsa_sigver_q0),
+ ITM(dsa_sigver_g0),
+ ITM(dsa_sigver_pub0),
+ ITM(dsa_sigver_msg1),
+ ITM(dsa_sigver_r0),
+ ITM(dsa_sigver_s0),
+ FAIL,
+ },
+};
+
+#endif /* OPENSSL_NO_DSA */
+
+struct cipher_st {
+ const char *alg;
+ const unsigned char *key;
+ size_t key_len;
+ const unsigned char *iv;
+ size_t iv_len;
+ const unsigned char *pt;
+ size_t pt_len;
+ const unsigned char *ct;
+ size_t ct_len;
+};
+
+struct cipher_ccm_st {
+ const char *alg;
+ const unsigned char *key;
+ size_t key_len;
+ const unsigned char *iv;
+ size_t iv_len;
+ const unsigned char *aad;
+ size_t aad_len;
+ const unsigned char *pt;
+ size_t pt_len;
+ const unsigned char *ct; /* includes the tag */
+ size_t ct_len;
+};
+
+struct cipher_gcm_st {
+ const char *alg;
+ const unsigned char *key;
+ size_t key_len;
+ const unsigned char *iv;
+ size_t iv_len;
+ const unsigned char *aad;
+ size_t aad_len;
+ const unsigned char *pt;
+ size_t pt_len;
+ const unsigned char *ct;
+ size_t ct_len;
+ const unsigned char *tag;
+ size_t tag_len;
+};
+
+
+static const unsigned char cipher_enc_pt0[] = {
+ 0xF3, 0x44, 0x81, 0xEC, 0x3C, 0xC6, 0x27, 0xBA,
+ 0xCD, 0x5D, 0xC3, 0xFB, 0x08, 0xF2, 0x73, 0xE6,
+};
+static const unsigned char cipher_enc_pt1[] = {
+ 0x1B, 0x07, 0x7A, 0x6A, 0xF4, 0xB7, 0xF9, 0x82,
+ 0x29, 0xDE, 0x78, 0x6D, 0x75, 0x16, 0xB6, 0x39,
+};
+static const unsigned char cipher_enc_pt2[] = {
+ 0x91, 0x07, 0x41, 0x31, 0xF1, 0xF8, 0x6C, 0xCD,
+ 0x54, 0x8D, 0x22, 0xA6, 0x93, 0x40, 0xFF, 0x39,
+};
+static const unsigned char cipher_enc_pt3[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13
+};
+static const unsigned char cipher_enc_key0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+static const unsigned char cipher_enc_key1[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+static const unsigned char cipher_enc_key2[] = {
+ 0xE8, 0x70, 0x13, 0x1C, 0xE7, 0x03, 0xD6, 0x51,
+ 0x4E, 0x76, 0x1F, 0x95, 0xE6, 0xEE, 0x9E, 0xFB,
+};
+static const unsigned char cipher_enc_key3[] = {
+ 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
+ 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,
+ 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb8,
+ 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0,
+};
+static const unsigned char cipher_enc_ct0[] = {
+ 0x03, 0x36, 0x76, 0x3E, 0x96, 0x6D, 0x92, 0x59,
+ 0x5A, 0x56, 0x7C, 0xC9, 0xCE, 0x53, 0x7F, 0x5E,
+};
+static const unsigned char cipher_enc_ct1[] = {
+ 0x27, 0x5C, 0xFC, 0x04, 0x13, 0xD8, 0xCC, 0xB7,
+ 0x05, 0x13, 0xC3, 0x85, 0x9B, 0x1D, 0x0F, 0x72,
+};
+static const unsigned char cipher_enc_ct2[] = {
+ 0x3A, 0xF6, 0x4C, 0x70, 0x37, 0xEE, 0x48, 0x13,
+ 0xD8, 0x5F, 0xE9, 0xB3, 0x7F, 0xE6, 0x6A, 0xD4,
+};
+static const unsigned char cipher_enc_ct3[] = {
+ 0x9d, 0x84, 0xc8, 0x13, 0xf7, 0x19, 0xaa, 0x2c,
+ 0x7b, 0xe3, 0xf6, 0x61, 0x71, 0xc7, 0xc5, 0xc2,
+ 0xed, 0xbf, 0x9d, 0xac,
+};
+static const unsigned char cipher_enc_iv0[] = {
+ 0x00,
+};
+static const unsigned char cipher_enc_iv1[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+static const unsigned char cipher_enc_iv2[] = {
+ 0x53, 0xF2, 0x25, 0xD8, 0xDE, 0x97, 0xF1, 0x4B,
+ 0xFE, 0x3E, 0xC6, 0x5E, 0xC3, 0xFF, 0xF7, 0xD3,
+};
+static const unsigned char cipher_enc_iv3[] = {
+ 0x9a, 0x78, 0x56, 0x34, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+static const struct cipher_st cipher_enc_data[] = {
+ {
+ "AES-128-ECB",
+ ITM(cipher_enc_key0),
+ NULL, 0, /* iv */
+ ITM(cipher_enc_pt0),
+ ITM(cipher_enc_ct0),
+ },
+ {
+ "AES-192-CBC",
+ ITM(cipher_enc_key1),
+ ITM(cipher_enc_iv1),
+ ITM(cipher_enc_pt1),
+ ITM(cipher_enc_ct1),
+ },
+ {
+ "AES-128-CTR",
+ ITM(cipher_enc_key2),
+ ITM(cipher_enc_iv2),
+ ITM(cipher_enc_pt2),
+ ITM(cipher_enc_ct2),
+ },
+ {
+ "AES-128-XTS",
+ ITM(cipher_enc_key3),
+ ITM(cipher_enc_iv3),
+ ITM(cipher_enc_pt3),
+ ITM(cipher_enc_ct3),
+ }
+};
+
+static const unsigned char aes_ccm_enc_pt0[] = {
+ 0xDA, 0x6A, 0xDC, 0xB2, 0xA5, 0xCC, 0xC3, 0xE7,
+ 0xFC, 0x4C, 0xDF, 0x0A, 0xAB, 0xDC, 0x3B, 0x38,
+ 0x26, 0x8B, 0x21, 0x82, 0xCA, 0x26, 0xE6, 0x2C,
+};
+static const unsigned char aes_ccm_enc_key0[] = {
+ 0xDE, 0xF8, 0x67, 0xBC, 0x40, 0xB6, 0x7C, 0xAA,
+ 0x4A, 0x00, 0xE8, 0x07, 0x24, 0x52, 0xAE, 0x72,
+};
+static const unsigned char aes_ccm_enc_aad0[] = {
+ 0x29, 0x8D, 0x01, 0x92, 0x3B, 0x50, 0x1F, 0x66,
+ 0xCE, 0xD3, 0x57, 0x4B, 0x7B, 0x4F, 0x07, 0x57,
+};
+static const unsigned char aes_ccm_enc_iv0[] = {
+ 0x44, 0xEE, 0x48, 0x11, 0x4D, 0x3B, 0x71, 0x33,
+ 0xF0, 0xF7, 0x12, 0xA2, 0xA5,
+};
+static const unsigned char aes_ccm_enc_ct0[] = {
+ 0x30, 0x4D, 0x19, 0x31, 0x02, 0x66, 0x95, 0x2E,
+ 0x23, 0x6D, 0xF4, 0xB9, 0xDF, 0xFE, 0xCA, 0x92,
+ 0x04, 0x2A, 0x32, 0xB5, 0x08, 0x2C, 0x8B, 0x6F,
+ 0x1B, 0x14, 0xB8, 0x62, 0x8B, 0xA0, 0x12, 0x4E,
+ 0x6A, 0x6F, 0x85, 0x86, 0x24, 0x6A, 0x83, 0xE0,
+};
+static const struct cipher_ccm_st aes_ccm_enc_data[] = {
+ {
+ "AES-128-CCM",
+ ITM(aes_ccm_enc_key0),
+ ITM(aes_ccm_enc_iv0),
+ ITM(aes_ccm_enc_aad0),
+ ITM(aes_ccm_enc_pt0),
+ ITM(aes_ccm_enc_ct0),
+ },
+};
+
+static const unsigned char aes_gcm_enc_pt0[] = {
+ 0x97,
+};
+static const unsigned char aes_gcm_enc_key0[] = {
+ 0x3E, 0x77, 0x38, 0xA6, 0x0A, 0xB3, 0x95, 0x90,
+ 0xFA, 0x8B, 0x3B, 0xCF, 0xE1, 0xA3, 0x8C, 0x7D,
+};
+static const unsigned char aes_gcm_enc_aad0[] = {
+ 0xE7, 0xEF, 0xCB, 0x0F, 0x3D, 0x94, 0x1D, 0x0F,
+ 0x3D, 0x65, 0x69, 0xFC, 0xDA, 0x77, 0x36, 0x5E,
+ 0xB9, 0x20, 0xF8, 0xDA, 0x81, 0xDF, 0x6B, 0x4C,
+ 0x2A, 0x70, 0x5E, 0xE3, 0x07, 0xCE, 0xCF, 0x62,
+ 0x84,
+};
+static const unsigned char aes_gcm_enc_iv0[] = {
+ 0x01, 0x02, 0x03, 0x04, 0xEB, 0xED, 0x2F, 0x4B,
+ 0xD1, 0x20, 0x2C, 0xCD,
+};
+static const unsigned char aes_gcm_enc_ct0[] = {
+ 0x63,
+};
+static const unsigned char aes_gcm_enc_tag0[] = {
+ 0xA2, 0x8E, 0xA5, 0xF6, 0x6A, 0x1C, 0xE6, 0xD7,
+ 0xFF, 0xCD, 0x7F, 0x49,
+};
+static const struct cipher_gcm_st aes_gcm_enc_data[] = {
+ {
+ "AES-128-GCM",
+ ITM(aes_gcm_enc_key0),
+ ITM(aes_gcm_enc_iv0),
+ ITM(aes_gcm_enc_aad0),
+ ITM(aes_gcm_enc_pt0),
+ ITM(aes_gcm_enc_ct0),
+ ITM(aes_gcm_enc_tag0),
+ },
+};
+
+#ifndef OPENSSL_NO_DH
+
+struct dh_safe_prime_keygen_st {
+ const char *group_name;
+};
+
+struct dh_safe_prime_keyver_st {
+ const char *group_name;
+ const unsigned char *pub;
+ size_t pub_len;
+ const unsigned char *priv;
+ size_t priv_len;
+ int pass;
+};
+
+static const struct dh_safe_prime_keygen_st dh_safe_prime_keygen_data[] = {
+ { "ffdhe2048" },
+};
+
+static const unsigned char dh_safe_prime_keyver_priv0[] = {
+ 0x39, 0x9C, 0x08, 0x8E, 0x4A, 0x1E, 0x1A, 0x03,
+ 0x18, 0x5A, 0x72, 0x4F, 0xCB, 0x13, 0xFB, 0x8F,
+ 0x7F, 0x14, 0x12, 0x48, 0x9A, 0x18, 0x03, 0x1C,
+ 0x03, 0x98, 0x7E, 0x3C, 0xEF, 0x57, 0xF2, 0x1E,
+ 0xD5, 0x54, 0x5C, 0x0F, 0x36, 0x5E, 0xB0, 0xF8,
+ 0xD1, 0x27, 0x79, 0x24, 0x69, 0xB5, 0x7C, 0xF1,
+ 0x39, 0xFC, 0xE3, 0x79, 0xF0, 0xD6, 0xA0, 0xE1,
+ 0xA5, 0xA7, 0x65, 0x01, 0xBA, 0xFE, 0xBB, 0x28,
+ 0xF0, 0x9C, 0x49, 0x90, 0x68, 0xB4, 0xE7, 0xE2,
+ 0xB6, 0xBF, 0xB9, 0xF8, 0x96, 0xAA, 0xF9, 0xE6,
+ 0x0B, 0x8A, 0x86, 0x0D, 0x31, 0x2C, 0x90, 0xDA,
+ 0x4E, 0xFB, 0xE3, 0x59, 0x3F, 0xFB, 0x14, 0x33,
+ 0xF6, 0xBD, 0xDA, 0x5D, 0x27, 0xCC, 0x7C, 0x1C,
+ 0x30, 0xC8, 0xB2, 0xAF, 0x2A, 0xA8, 0x25, 0x97,
+ 0xDC, 0x5E, 0xEF, 0x22, 0xCB, 0xF6, 0x88, 0x83,
+ 0xD0, 0x47, 0x3F, 0x5D, 0xF3, 0x2A, 0xE0, 0xCC,
+ 0x86, 0x49, 0x5A, 0x8F, 0x67, 0xF6, 0xC4, 0xD8,
+ 0x3F, 0x09, 0xE8, 0x49, 0x89, 0x2E, 0xC0, 0xB4,
+ 0x9C, 0x06, 0x9C, 0x40, 0x10, 0xFB, 0x20, 0xC6,
+ 0xF1, 0x5F, 0x52, 0x3F, 0x21, 0xBF, 0xBB, 0x13,
+ 0x6A, 0x81, 0x1C, 0xFF, 0x19, 0x2A, 0x36, 0xD2,
+ 0x13, 0x23, 0x33, 0xD1, 0xEF, 0x34, 0xF3, 0xA6,
+ 0xD5, 0x56, 0xAF, 0x1A, 0x63, 0xFC, 0x95, 0x86,
+ 0xD5, 0xEB, 0xBF, 0x49, 0x84, 0x73, 0x30, 0x1D,
+ 0xE2, 0xA1, 0xAE, 0x6D, 0x20, 0x69, 0xAE, 0xB6,
+ 0x1A, 0xB9, 0xF2, 0x7A, 0xE3, 0x17, 0x4E, 0x7C,
+ 0x8F, 0xE8, 0x34, 0x02, 0x59, 0xB4, 0x54, 0x9A,
+ 0x8D, 0x19, 0x04, 0x2A, 0x8E, 0xF8, 0x05, 0xA3,
+ 0x98, 0x5B, 0xBD, 0xB4, 0x6A, 0xDA, 0xAA, 0x1F,
+ 0xFC, 0x56, 0xA0, 0x4D, 0x22, 0x66, 0x31, 0xEA,
+ 0x8A, 0xC8, 0x61, 0x12, 0x40, 0xF0, 0x38, 0x0B,
+ 0xA3, 0x23, 0x40, 0x97, 0x7A, 0x18, 0xE3, 0x42,
+};
+static const unsigned char dh_safe_prime_keyver_pub0[] = {
+ 0xFA, 0xDA, 0x86, 0x67, 0xE9, 0x12, 0x67, 0x79,
+ 0x50, 0xAE, 0x64, 0x0B, 0x07, 0x47, 0x8F, 0xA5,
+ 0xD1, 0x27, 0x6C, 0xFC, 0x10, 0xD8, 0x90, 0x8D,
+ 0x93, 0x75, 0xAD, 0x31, 0xBD, 0x97, 0xBE, 0xD5,
+ 0xB5, 0x59, 0x2F, 0x37, 0x52, 0x32, 0x30, 0x75,
+ 0xD3, 0xA5, 0x36, 0x10, 0x62, 0x4C, 0x82, 0x06,
+ 0xB9, 0x29, 0xAE, 0x14, 0xD1, 0xB0, 0xD0, 0x23,
+ 0x7A, 0xE6, 0xEA, 0x7E, 0x8E, 0xE3, 0xC7, 0xEB,
+ 0x43, 0x78, 0xFA, 0x9A, 0x40, 0x9A, 0x6F, 0xF5,
+ 0x42, 0x8A, 0xF7, 0xF3, 0x92, 0xE6, 0x5D, 0x68,
+ 0x9B, 0x2A, 0x91, 0xB5, 0x37, 0x33, 0x3F, 0x35,
+ 0xA5, 0xFB, 0x54, 0xD1, 0x3C, 0x46, 0xC6, 0x3C,
+ 0x16, 0x3A, 0xD7, 0xF8, 0x55, 0x48, 0x9A, 0xB7,
+ 0xB1, 0x40, 0xBF, 0xAF, 0x26, 0x1B, 0x07, 0x0F,
+ 0x11, 0x04, 0x63, 0x06, 0xDA, 0x2D, 0x45, 0x0E,
+ 0x7F, 0x17, 0xA4, 0x38, 0xBD, 0x68, 0x5A, 0xA9,
+ 0xC4, 0x7F, 0x7E, 0xC7, 0xF0, 0xFC, 0x74, 0x87,
+ 0x55, 0xCD, 0x35, 0xA8, 0xAA, 0x59, 0xA7, 0xFA,
+ 0xC1, 0x34, 0x67, 0x04, 0xD8, 0xCC, 0xE1, 0x77,
+ 0x60, 0xE1, 0xBE, 0xC0, 0xA5, 0x52, 0xA4, 0x72,
+ 0x3A, 0x19, 0xFA, 0x76, 0xC8, 0x67, 0x60, 0x5E,
+ 0x1C, 0x43, 0xF4, 0x50, 0xA0, 0xCB, 0x33, 0x77,
+ 0x2D, 0x2D, 0x3B, 0x5D, 0x7D, 0x72, 0x2E, 0x38,
+ 0xCD, 0x71, 0xB1, 0xBF, 0xB5, 0x10, 0x80, 0xCD,
+ 0xA4, 0x5D, 0x70, 0x6E, 0xD5, 0x7E, 0xA2, 0xAA,
+ 0xDC, 0xA4, 0x7C, 0x7A, 0x7D, 0x21, 0x09, 0x6A,
+ 0x14, 0xB2, 0x21, 0x24, 0xA4, 0xF4, 0x6C, 0xD2,
+ 0xBA, 0x76, 0x99, 0xD7, 0x69, 0x44, 0xA8, 0x66,
+ 0x85, 0x08, 0x50, 0xBA, 0x42, 0x37, 0xA2, 0xC2,
+ 0xD5, 0x45, 0x7E, 0x7B, 0xE9, 0x4A, 0xAE, 0xEE,
+ 0x84, 0x2A, 0xEB, 0xA9, 0x4A, 0x69, 0x40, 0x83,
+ 0xBA, 0xCC, 0x1E, 0x1B, 0x25, 0x56, 0x13, 0x88,
+};
+static const struct dh_safe_prime_keyver_st dh_safe_prime_keyver_data[] = {
+ {
+ "ffdhe2048",
+ ITM(dh_safe_prime_keyver_pub0),
+ ITM(dh_safe_prime_keyver_priv0),
+ PASS
+ },
+};
+
+#endif /* OPENSSL_NO_DH */
+
+struct rsa_keygen_st {
+ size_t mod;
+ const unsigned char *e;
+ size_t e_len;
+ const unsigned char *xp1;
+ size_t xp1_len;
+ const unsigned char *xp2;
+ size_t xp2_len;
+ const unsigned char *xp;
+ size_t xp_len;
+ const unsigned char *xq1;
+ size_t xq1_len;
+ const unsigned char *xq2;
+ size_t xq2_len;
+ const unsigned char *xq;
+ size_t xq_len;
+
+ const unsigned char *p1;
+ size_t p1_len;
+ const unsigned char *p2;
+ size_t p2_len;
+ const unsigned char *q1;
+ size_t q1_len;
+ const unsigned char *q2;
+ size_t q2_len;
+ const unsigned char *p;
+ size_t p_len;
+ const unsigned char *q;
+ size_t q_len;
+ const unsigned char *n;
+ size_t n_len;
+ const unsigned char *d;
+ size_t d_len;
+};
+
+static const unsigned char rsa_keygen0_e[] = {
+ 0x01,0x00,0x01
+};
+static const unsigned char rsa_keygen0_xp[] = {
+ 0xcf,0x72,0x1b,0x9a,0xfd,0x0d,0x22,0x1a,0x74,0x50,0x97,0x22,0x76,0xd8,0xc0,
+ 0xc2,0xfd,0x08,0x81,0x05,0xdd,0x18,0x21,0x99,0x96,0xd6,0x5c,0x79,0xe3,0x02,
+ 0x81,0xd7,0x0e,0x3f,0x3b,0x34,0xda,0x61,0xc9,0x2d,0x84,0x86,0x62,0x1e,0x3d,
+ 0x5d,0xbf,0x92,0x2e,0xcd,0x35,0x3d,0x6e,0xb9,0x59,0x16,0xc9,0x82,0x50,0x41,
+ 0x30,0x45,0x67,0xaa,0xb7,0xbe,0xec,0xea,0x4b,0x9e,0xa0,0xc3,0x05,0xb3,0x88,
+ 0xd4,0x4c,0xac,0xeb,0xe4,0x03,0xc6,0xca,0xcb,0xd9,0xd3,0x4e,0xf6,0x7f,0x2c,
+ 0x27,0x1e,0x08,0x6c,0xc2,0xd6,0x45,0x1f,0x84,0xe4,0x3c,0x97,0x19,0xde,0xb8,
+ 0x55,0xaf,0x0e,0xcf,0x9e,0xb0,0x9c,0x20,0xd3,0x1f,0xa8,0xd7,0x52,0xc2,0x95,
+ 0x1c,0x80,0x15,0x42,0x4d,0x4f,0x19,0x16
+};
+static const unsigned char rsa_keygen0_xp1[] = {
+ 0xac,0x5f,0x7f,0x6e,0x33,0x3e,0x97,0x3a,0xb3,0x17,0x44,0xa9,0x0f,0x7a,0x54,
+ 0x70,0x27,0x06,0x93,0xd5,0x49,0xde,0x91,0x83,0xbc,0x8a,0x7b,0x95
+};
+static const unsigned char rsa_keygen0_xp2[] = {
+ 0x0b,0xf6,0xe8,0x79,0x5a,0x81,0xae,0x90,0x1d,0xa4,0x38,0x74,0x9c,0x0e,0x6f,
+ 0xe0,0x03,0xcf,0xc4,0x53,0x16,0x32,0x17,0xf7,0x09,0x5f,0xd9
+};
+static const unsigned char rsa_keygen0_xq[] = {
+ 0xfe,0xab,0xf2,0x7c,0x16,0x4a,0xf0,0x8d,0x31,0xc6,0x0a,0x82,0xe2,0xae,0xbb,
+ 0x03,0x7e,0x7b,0x20,0x4e,0x64,0xb0,0x16,0xad,0x3c,0x01,0x1a,0xd3,0x54,0xbf,
+ 0x2b,0xa4,0x02,0x9e,0xc3,0x0d,0x60,0x3d,0x1f,0xb9,0xc0,0x0d,0xe6,0x97,0x68,
+ 0xbb,0x8c,0x81,0xd5,0xc1,0x54,0x96,0x0f,0x99,0xf0,0xa8,0xa2,0xf3,0xc6,0x8e,
+ 0xec,0xbc,0x31,0x17,0x70,0x98,0x24,0xa3,0x36,0x51,0xa8,0x54,0xbd,0x9a,0x89,
+ 0x99,0x6e,0x57,0x5e,0xd0,0x39,0x86,0xc3,0xa3,0x1b,0xc7,0xcf,0xc4,0x4f,0x47,
+ 0x25,0x9e,0x2c,0x79,0xe1,0x2c,0xcc,0xe4,0x63,0xf4,0x02,0x84,0xf8,0xf6,0xa1,
+ 0x5c,0x93,0x14,0xf2,0x68,0x5f,0x3a,0x90,0x2f,0x4e,0x5e,0xf9,0x16,0x05,0xcf,
+ 0x21,0x63,0xca,0xfa,0xb0,0x08,0x02,0xc0
+};
+static const unsigned char rsa_keygen0_xq1[] = {
+ 0x9b,0x02,0xd4,0xba,0xf0,0xaa,0x14,0x99,0x6d,0xc0,0xb7,0xa5,0xe1,0xd3,0x70,
+ 0xb6,0x5a,0xa2,0x9b,0x59,0xd5,0x8c,0x1e,0x9f,0x3f,0x9a,0xde,0xeb,0x9e,0x9c,
+ 0x61,0xd6,0x5a,0xe1
+};
+static const unsigned char rsa_keygen0_xq2[] = {
+ 0x06,0x81,0x53,0xfd,0xa8,0x7b,0xa3,0x85,0x90,0x15,0x2c,0x97,0xb2,0xa0,0x17,
+ 0x48,0xb0,0x7f,0x0a,0x01,0x6d
+};
+/* expected values */
+static const unsigned char rsa_keygen0_p1[] = {
+ 0xac,0x5f,0x7f,0x6e,0x33,0x3e,0x97,0x3a,0xb3,0x17,0x44,0xa9,0x0f,0x7a,0x54,
+ 0x70,0x27,0x06,0x93,0xd5,0x49,0xde,0x91,0x83,0xbc,0x8a,0x7b,0xc3
+};
+static const unsigned char rsa_keygen0_p2[] = {
+ 0x0b,0xf6,0xe8,0x79,0x5a,0x81,0xae,0x90,0x1d,0xa4,0x38,0x74,0x9c,0x0e,0x6f,
+ 0xe0,0x03,0xcf,0xc4,0x53,0x16,0x32,0x17,0xf7,0x09,0x5f,0xd9
+};
+static const unsigned char rsa_keygen0_q1[] = {
+ 0x9b,0x02,0xd4,0xba,0xf0,0xaa,0x14,0x99,0x6d,0xc0,0xb7,0xa5,0xe1,0xd3,0x70,
+ 0xb6,0x5a,0xa2,0x9b,0x59,0xd5,0x8c,0x1e,0x9f,0x3f,0x9a,0xde,0xeb,0x9e,0x9c,
+ 0x61,0xd6,0x5d,0x47
+};
+static const unsigned char rsa_keygen0_q2[] = {
+ 0x06,0x81,0x53,0xfd,0xa8,0x7b,0xa3,0x85,0x90,0x15,0x2c,0x97,0xb2,0xa0,0x17,
+ 0x48,0xb0,0x7f,0x0a,0x01,0x8f
+};
+static const unsigned char rsa_keygen0_p[] = {
+ 0xcf,0x72,0x1b,0x9a,0xfd,0x0d,0x22,0x1a,0x74,0x50,0x97,0x22,0x76,0xd8,0xc0,
+ 0xc2,0xfd,0x08,0x81,0x05,0xdd,0x18,0x21,0x99,0x96,0xd6,0x5c,0x79,0xe3,0x02,
+ 0x81,0xd7,0x0e,0x3f,0x3b,0x34,0xda,0x61,0xc9,0x2d,0x84,0x86,0x62,0x1e,0x3d,
+ 0x5d,0xbf,0x92,0x2e,0xcd,0x35,0x3d,0x6e,0xb9,0x59,0x16,0xc9,0x82,0x50,0x41,
+ 0x30,0x45,0x67,0xaa,0xb7,0xbe,0xec,0xea,0x4b,0x9e,0xa0,0xc3,0x05,0xbc,0x4c,
+ 0x01,0xa5,0x4b,0xbd,0xa4,0x20,0xb5,0x20,0xd5,0x59,0x6f,0x82,0x5c,0x8f,0x4f,
+ 0xe0,0x3a,0x4e,0x7e,0xfe,0x44,0xf3,0x3c,0xc0,0x0e,0x14,0x2b,0x32,0xe6,0x28,
+ 0x8b,0x63,0x87,0x00,0xc3,0x53,0x4a,0x5b,0x71,0x7a,0x5b,0x28,0x40,0xc4,0x18,
+ 0xb6,0x77,0x0b,0xab,0x59,0xa4,0x96,0x7d
+};
+static const unsigned char rsa_keygen0_q[] = {
+ 0xfe,0xab,0xf2,0x7c,0x16,0x4a,0xf0,0x8d,0x31,0xc6,0x0a,0x82,0xe2,0xae,0xbb,
+ 0x03,0x7e,0x7b,0x20,0x4e,0x64,0xb0,0x16,0xad,0x3c,0x01,0x1a,0xd3,0x54,0xbf,
+ 0x2b,0xa4,0x02,0x9e,0xc3,0x0d,0x60,0x3d,0x1f,0xb9,0xc0,0x0d,0xe6,0x97,0x68,
+ 0xbb,0x8c,0x81,0xd5,0xc1,0x54,0x96,0x0f,0x99,0xf0,0xa8,0xa2,0xf3,0xc6,0x8e,
+ 0xec,0xbc,0x31,0x17,0x70,0x98,0x24,0xa3,0x36,0x51,0xa8,0x54,0xc4,0x44,0xdd,
+ 0xf7,0x7e,0xda,0x47,0x4a,0x67,0x44,0x5d,0x4e,0x75,0xf0,0x4d,0x00,0x68,0xe1,
+ 0x4a,0xec,0x1f,0x45,0xf9,0xe6,0xca,0x38,0x95,0x48,0x6f,0xdc,0x9d,0x1b,0xa3,
+ 0x4b,0xfd,0x08,0x4b,0x54,0xcd,0xeb,0x3d,0xef,0x33,0x11,0x6e,0xce,0xe4,0x5d,
+ 0xef,0xa9,0x58,0x5c,0x87,0x4d,0xc8,0xcf
+};
+static const unsigned char rsa_keygen0_n[] = {
+ 0xce,0x5e,0x8d,0x1a,0xa3,0x08,0x7a,0x2d,0xb4,0x49,0x48,0xf0,0x06,0xb6,0xfe,
+ 0xba,0x2f,0x39,0x7c,0x7b,0xe0,0x5d,0x09,0x2d,0x57,0x4e,0x54,0x60,0x9c,0xe5,
+ 0x08,0x4b,0xe1,0x1a,0x73,0xc1,0x5e,0x2f,0xb6,0x46,0xd7,0x81,0xca,0xbc,0x98,
+ 0xd2,0xf9,0xef,0x1c,0x92,0x8c,0x8d,0x99,0x85,0x28,0x52,0xd6,0xd5,0xab,0x70,
+ 0x7e,0x9e,0xa9,0x87,0x82,0xc8,0x95,0x64,0xeb,0xf0,0x6c,0x0f,0x3f,0xe9,0x02,
+ 0x29,0x2e,0x6d,0xa1,0xec,0xbf,0xdc,0x23,0xdf,0x82,0x4f,0xab,0x39,0x8d,0xcc,
+ 0xac,0x21,0x51,0x14,0xf8,0xef,0xec,0x73,0x80,0x86,0xa3,0xcf,0x8f,0xd5,0xcf,
+ 0x22,0x1f,0xcc,0x23,0x2f,0xba,0xcb,0xf6,0x17,0xcd,0x3a,0x1f,0xd9,0x84,0xb9,
+ 0x88,0xa7,0x78,0x0f,0xaa,0xc9,0x04,0x01,0x20,0x72,0x5d,0x2a,0xfe,0x5b,0xdd,
+ 0x16,0x5a,0xed,0x83,0x02,0x96,0x39,0x46,0x37,0x30,0xc1,0x0d,0x87,0xc2,0xc8,
+ 0x33,0x38,0xed,0x35,0x72,0xe5,0x29,0xf8,0x1f,0x23,0x60,0xe1,0x2a,0x5b,0x1d,
+ 0x6b,0x53,0x3f,0x07,0xc4,0xd9,0xbb,0x04,0x0c,0x5c,0x3f,0x0b,0xc4,0xd4,0x61,
+ 0x96,0x94,0xf1,0x0f,0x4a,0x49,0xac,0xde,0xd2,0xe8,0x42,0xb3,0x4a,0x0b,0x64,
+ 0x7a,0x32,0x5f,0x2b,0x5b,0x0f,0x8b,0x8b,0xe0,0x33,0x23,0x34,0x64,0xf8,0xb5,
+ 0x7f,0x69,0x60,0xb8,0x71,0xe9,0xff,0x92,0x42,0xb1,0xf7,0x23,0xa8,0xa7,0x92,
+ 0x04,0x3d,0x6b,0xff,0xf7,0xab,0xbb,0x14,0x1f,0x4c,0x10,0x97,0xd5,0x6b,0x71,
+ 0x12,0xfd,0x93,0xa0,0x4a,0x3b,0x75,0x72,0x40,0x96,0x1c,0x5f,0x40,0x40,0x57,
+ 0x13
+};
+static const unsigned char rsa_keygen0_d[] = {
+ 0x47,0x47,0x49,0x1d,0x66,0x2a,0x4b,0x68,0xf5,0xd8,0x4a,0x24,0xfd,0x6c,0xbf,
+ 0x56,0xb7,0x70,0xf7,0x9a,0x21,0xc8,0x80,0x9e,0xf4,0x84,0xcd,0x88,0x01,0x28,
+ 0xea,0x50,0xab,0x13,0x63,0xdf,0xea,0x14,0x38,0xb5,0x07,0x42,0x81,0x2f,0xda,
+ 0xe9,0x24,0x02,0x7e,0xaf,0xef,0x74,0x09,0x0e,0x80,0xfa,0xfb,0xd1,0x19,0x41,
+ 0xe5,0xba,0x0f,0x7c,0x0a,0xa4,0x15,0x55,0xa2,0x58,0x8c,0x3a,0x48,0x2c,0xc6,
+ 0xde,0x4a,0x76,0xfb,0x72,0xb6,0x61,0xe6,0xd2,0x10,0x44,0x4c,0x33,0xb8,0xd2,
+ 0x74,0xb1,0x9d,0x3b,0xcd,0x2f,0xb1,0x4f,0xc3,0x98,0xbd,0x83,0xb7,0x7e,0x75,
+ 0xe8,0xa7,0x6a,0xee,0xcc,0x51,0x8c,0x99,0x17,0x67,0x7f,0x27,0xf9,0x0d,0x6a,
+ 0xb7,0xd4,0x80,0x17,0x89,0x39,0x9c,0xf3,0xd7,0x0f,0xdf,0xb0,0x55,0x80,0x1d,
+ 0xaf,0x57,0x2e,0xd0,0xf0,0x4f,0x42,0x69,0x55,0xbc,0x83,0xd6,0x97,0x83,0x7a,
+ 0xe6,0xc6,0x30,0x6d,0x3d,0xb5,0x21,0xa7,0xc4,0x62,0x0a,0x20,0xce,0x5e,0x5a,
+ 0x17,0x98,0xb3,0x6f,0x6b,0x9a,0xeb,0x6b,0xa3,0xc4,0x75,0xd8,0x2b,0xdc,0x5c,
+ 0x6f,0xec,0x5d,0x49,0xac,0xa8,0xa4,0x2f,0xb8,0x8c,0x4f,0x2e,0x46,0x21,0xee,
+ 0x72,0x6a,0x0e,0x22,0x80,0x71,0xc8,0x76,0x40,0x44,0x61,0x16,0xbf,0xa5,0xf8,
+ 0x89,0xc7,0xe9,0x87,0xdf,0xbd,0x2e,0x4b,0x4e,0xc2,0x97,0x53,0xe9,0x49,0x1c,
+ 0x05,0xb0,0x0b,0x9b,0x9f,0x21,0x19,0x41,0xe9,0xf5,0x61,0xd7,0x33,0x2e,0x2c,
+ 0x94,0xb8,0xa8,0x9a,0x3a,0xcc,0x6a,0x24,0x8d,0x19,0x13,0xee,0xb9,0xb0,0x48,
+ 0x61
+};
+
+static const struct rsa_keygen_st rsa_keygen_data[] = {
+ {
+ 2048,
+ ITM(rsa_keygen0_e),
+ ITM(rsa_keygen0_xp1),
+ ITM(rsa_keygen0_xp2),
+ ITM(rsa_keygen0_xp),
+ ITM(rsa_keygen0_xq1),
+ ITM(rsa_keygen0_xq2),
+ ITM(rsa_keygen0_xq),
+
+ ITM(rsa_keygen0_p1),
+ ITM(rsa_keygen0_p2),
+ ITM(rsa_keygen0_q1),
+ ITM(rsa_keygen0_q2),
+
+ ITM(rsa_keygen0_p),
+ ITM(rsa_keygen0_q),
+ ITM(rsa_keygen0_n),
+ ITM(rsa_keygen0_d),
+ },
+};
+
+#define NO_PSS_SALT_LEN -1
+struct rsa_siggen_st {
+ const char *sig_pad_mode;
+ size_t mod;
+ const char *digest_alg;
+ const unsigned char *msg;
+ size_t msg_len;
+ int pss_salt_len;
+};
+static const unsigned char rsa_siggen0_msg[] = {
+ 0xa3, 0x76, 0x35, 0xc2, 0x6d, 0x6b, 0xa0, 0xe1,
+ 0x2e, 0x0b, 0x58, 0x33, 0x0d, 0x30, 0xdd, 0x07,
+ 0xa9, 0x53, 0xd6, 0x37, 0x07, 0xad, 0xa8, 0x67,
+};
+static const struct rsa_siggen_st rsa_siggen_data[] = {
+ {
+ "pkcs1", /* pkcs1v1.5 */
+ 2048,
+ "SHA384",
+ ITM(rsa_siggen0_msg),
+ NO_PSS_SALT_LEN,
+ },
+ {
+ "x931",
+ 2048,
+ "SHA384",
+ ITM(rsa_siggen0_msg),
+ NO_PSS_SALT_LEN,
+ },
+ {
+ "pss",
+ 2048,
+ "SHA384",
+ ITM(rsa_siggen0_msg),
+ 62
+ },
+};
+
+struct rsa_sigver_st {
+ const char *sig_pad_mode;
+ size_t mod;
+ const char *digest_alg;
+ const unsigned char *msg;
+ size_t msg_len;
+ const unsigned char *n;
+ size_t n_len;
+ const unsigned char *e;
+ size_t e_len;
+ const unsigned char *sig;
+ size_t sig_len;
+ int pss_salt_len;
+ int pass;
+};
+
+static const unsigned char rsa_sigver15_0_n[] = {
+ 0xbb, 0xbc, 0xf3, 0x35, 0x6f, 0x8e, 0x2e, 0x4f,
+ 0x32, 0xb5, 0xbb, 0x47, 0x9d, 0x02, 0x2a, 0xac,
+ 0x93, 0x9e, 0x70, 0x50, 0x0f, 0x59, 0x0d, 0x38,
+ 0x1c, 0xe5, 0xda, 0x87, 0x61, 0x6b, 0xbf, 0xa8,
+ 0x2c, 0x2f, 0x97, 0xbc, 0x4b, 0xd4, 0xae, 0x21,
+ 0xed, 0xbe, 0x7a, 0x98, 0x15, 0xa8, 0xe2, 0xf0,
+ 0x5f, 0x4d, 0xf8, 0xe2, 0x7c, 0x7e, 0x87, 0x52,
+ 0x8e, 0xbf, 0xb6, 0x3f, 0x1a, 0x12, 0x96, 0x87,
+ 0x2c, 0xd2, 0xac, 0x85, 0x87, 0xe5, 0xcd, 0x4c,
+ 0x31, 0x2b, 0x98, 0x16, 0x9f, 0xcf, 0x3e, 0xef,
+ 0x50, 0xaa, 0xee, 0xc0, 0x6c, 0x80, 0x94, 0xc5,
+ 0xb1, 0xc7, 0x0d, 0xd4, 0x24, 0x94, 0x44, 0x3a,
+ 0x44, 0xdb, 0x10, 0xdc, 0x21, 0x57, 0xe0, 0x77,
+ 0xe5, 0x9c, 0xc4, 0x49, 0x06, 0xe3, 0x5a, 0xea,
+ 0x64, 0xf4, 0x54, 0xca, 0xfc, 0x5a, 0x2b, 0x92,
+ 0x76, 0xe1, 0x86, 0x6f, 0x3b, 0x4e, 0x7d, 0xe7,
+ 0xb9, 0x62, 0xc4, 0x63, 0x12, 0x65, 0x16, 0x58,
+ 0x11, 0x23, 0xba, 0x1b, 0x95, 0x06, 0x1c, 0xdd,
+ 0xdc, 0x49, 0x0b, 0x67, 0x7c, 0xb0, 0xdb, 0x45,
+ 0x88, 0x6e, 0x42, 0xdd, 0x67, 0xbf, 0xec, 0x0e,
+ 0xfa, 0x64, 0x06, 0x3e, 0xb9, 0x40, 0xee, 0xc6,
+ 0x56, 0xdf, 0xe7, 0xd8, 0xed, 0xf1, 0xf7, 0x53,
+ 0xec, 0xd6, 0x1e, 0xb1, 0x66, 0x66, 0x80, 0x16,
+ 0x5b, 0xba, 0x8c, 0x75, 0xe2, 0x6c, 0x19, 0xe7,
+ 0xf9, 0xc8, 0xae, 0x75, 0xc9, 0xc4, 0x19, 0xe6,
+ 0xba, 0xfd, 0x3e, 0x12, 0xf0, 0x88, 0x90, 0xee,
+ 0x39, 0xf8, 0x85, 0x3c, 0x20, 0x3b, 0xfe, 0xb9,
+ 0xa0, 0x07, 0x93, 0x6d, 0x20, 0x78, 0xf2, 0xc2,
+ 0xa5, 0x49, 0x51, 0xa3, 0xb7, 0x13, 0x83, 0xeb,
+ 0x19, 0x55, 0x08, 0x4f, 0x28, 0x32, 0x1a, 0x9b,
+ 0xab, 0x05, 0x9a, 0xaa, 0x28, 0xdc, 0xfa, 0xbf,
+ 0xf3, 0x52, 0x40, 0x0c, 0x4a, 0xb3, 0xd6, 0xb5,
+};
+static const unsigned char rsa_sigver15_0_e[] = {
+ 0x01, 0x00, 0x01,
+};
+static const unsigned char rsa_sigver15_0_msg[] = {
+ 0xba, 0x1a, 0x03, 0xda, 0x95, 0xd4, 0x36, 0x60,
+ 0xe6, 0x77, 0xc7, 0x80, 0x49, 0x42, 0xc7, 0x98,
+ 0xf6, 0x9e, 0xcf, 0x6f, 0xe5, 0xaf, 0x41, 0x6c,
+ 0x36, 0x29, 0xd0, 0x06, 0xcf, 0x65, 0x43, 0x7c,
+ 0x47, 0xb4, 0x75, 0xc6, 0x03, 0xf3, 0xa1, 0xcb,
+ 0x9e, 0x5f, 0xdc, 0xd4, 0x8e, 0xab, 0xe3, 0x41,
+ 0x05, 0x50, 0x17, 0x7b, 0x16, 0x25, 0xc6, 0x29,
+ 0x19, 0x2f, 0xac, 0xa7, 0x50, 0xba, 0xba, 0xb3,
+ 0xcb, 0xa8, 0x16, 0x6a, 0x88, 0x0a, 0x62, 0x74,
+ 0xdf, 0xed, 0x41, 0x7b, 0x1d, 0x76, 0x17, 0xe1,
+ 0x70, 0x32, 0x11, 0xb2, 0x03, 0xa7, 0x66, 0xd7,
+ 0x69, 0x2f, 0xdc, 0x8d, 0x3f, 0x06, 0x8d, 0x16,
+ 0x0d, 0xa1, 0xeb, 0xae, 0x6e, 0x41, 0x02, 0xc1,
+ 0x71, 0xc9, 0xfd, 0x5b, 0x3e, 0xcc, 0xec, 0xe0,
+ 0xfd, 0xeb, 0xc4, 0xfd, 0xf3, 0x5e, 0xa7, 0xde,
+ 0xee, 0xd0, 0x66, 0xa2, 0xe4, 0x70, 0x45, 0x0c,
+};
+static const unsigned char rsa_sigver15_0_sig[] = {
+ 0x4a, 0x8a, 0xcb, 0x88, 0x89, 0xd3, 0xa9, 0x48,
+ 0x84, 0x09, 0x2e, 0x2c, 0x50, 0x02, 0xb9, 0xad,
+ 0xe5, 0x10, 0xac, 0x27, 0x8f, 0x2d, 0x36, 0x7e,
+ 0x6e, 0x32, 0x5c, 0x1d, 0xcb, 0xfa, 0xb8, 0xc7,
+ 0x1a, 0x27, 0x11, 0x2b, 0x34, 0xf4, 0xa9, 0xda,
+ 0xa0, 0x99, 0x86, 0xbe, 0x81, 0xd0, 0xd9, 0x2a,
+ 0x88, 0x25, 0x99, 0xb3, 0x02, 0x50, 0xf1, 0xa5,
+ 0x4f, 0x3a, 0x1d, 0x7f, 0xcf, 0x7d, 0x76, 0x00,
+ 0x06, 0x87, 0x9f, 0x39, 0x3a, 0x3c, 0xc0, 0xc6,
+ 0x46, 0x7a, 0x65, 0x0d, 0x85, 0x06, 0xd8, 0x51,
+ 0xbe, 0xc5, 0x00, 0x80, 0xeb, 0x73, 0xbb, 0x71,
+ 0x8c, 0xcc, 0x72, 0x83, 0x1f, 0x9d, 0x73, 0x75,
+ 0xb8, 0xc8, 0x4c, 0x07, 0x5b, 0xda, 0x8c, 0x9b,
+ 0x6f, 0x65, 0x8c, 0x2e, 0x23, 0x62, 0x6c, 0x8d,
+ 0x94, 0x54, 0x5b, 0x7f, 0xe6, 0x5c, 0x90, 0xa3,
+ 0x07, 0xe2, 0x14, 0x4d, 0xe7, 0x71, 0x6c, 0xfd,
+ 0x64, 0x12, 0x14, 0x12, 0x14, 0x00, 0x1b, 0xc4,
+ 0x65, 0xe7, 0x28, 0x5c, 0x34, 0x2d, 0xda, 0x94,
+ 0xfd, 0x71, 0xcb, 0x27, 0xa6, 0x0e, 0x63, 0xd4,
+ 0xd6, 0x14, 0x65, 0xc0, 0xe3, 0x65, 0x94, 0x61,
+ 0x59, 0xb8, 0xc9, 0x3b, 0x9b, 0xc2, 0x82, 0xe2,
+ 0x76, 0xe7, 0x17, 0xf1, 0xef, 0x32, 0x9e, 0x8a,
+ 0x04, 0xf3, 0x1e, 0xcc, 0x16, 0xb4, 0x45, 0x0e,
+ 0x77, 0xdb, 0x8b, 0x38, 0x6c, 0xcc, 0x98, 0xf4,
+ 0xf8, 0xb5, 0x45, 0x2c, 0xde, 0x23, 0x36, 0xe7,
+ 0x83, 0xf0, 0xb4, 0xb5, 0xe3, 0xd3, 0xd4, 0x59,
+ 0xf1, 0x46, 0x7f, 0x0f, 0x55, 0x58, 0xff, 0x75,
+ 0xc7, 0x7f, 0xee, 0xf8, 0xe0, 0xb2, 0x52, 0xd8,
+ 0xba, 0x37, 0x4f, 0x7b, 0xba, 0xa3, 0xf0, 0x13,
+ 0xa7, 0x3a, 0x21, 0xac, 0xdc, 0x9e, 0x63, 0x36,
+ 0x38, 0xe7, 0x90, 0xeb, 0xea, 0x7f, 0x83, 0xf4,
+ 0x9d, 0xf3, 0x6b, 0x31, 0x44, 0x47, 0x27, 0x8e,
+};
+
+#define rsa_sigver15_1_n rsa_sigver15_0_n
+#define rsa_sigver15_1_e rsa_sigver15_0_e
+static const unsigned char rsa_sigver15_1_msg[] = {
+ 0x52, 0x68, 0x35, 0xd6, 0x4a, 0x95, 0xaa, 0xbd,
+ 0x02, 0x69, 0x7f, 0x92, 0xc7, 0x8c, 0x04, 0x71,
+ 0x17, 0x10, 0x5a, 0x0d, 0xab, 0x5e, 0x91, 0x45,
+ 0xb5, 0x70, 0x0d, 0xf8, 0x66, 0x41, 0x2e, 0x19,
+ 0xb3, 0x82, 0x30, 0x06, 0x59, 0x8f, 0x4f, 0x15,
+ 0x1e, 0xa1, 0x2f, 0x70, 0x5a, 0x45, 0x7c, 0x24,
+ 0xb7, 0x0d, 0xcd, 0x74, 0x35, 0x85, 0xcf, 0x73,
+ 0x71, 0x68, 0x9f, 0xd2, 0x26, 0x14, 0x77, 0xf6,
+ 0xf4, 0x3c, 0x8d, 0x4d, 0x60, 0xdd, 0x38, 0xe3,
+ 0x1d, 0x73, 0x55, 0x30, 0x8a, 0x6c, 0xe9, 0x35,
+ 0x7b, 0xdd, 0x08, 0xc7, 0x3c, 0x74, 0xf5, 0x2a,
+ 0xd3, 0xae, 0x8a, 0xe1, 0x86, 0x49, 0xda, 0xc5,
+ 0x9d, 0xfd, 0x16, 0x55, 0x69, 0x67, 0xad, 0x4d,
+ 0x85, 0x46, 0xb7, 0x7a, 0x5c, 0xe9, 0x94, 0xcc,
+ 0xeb, 0xe8, 0xd0, 0xad, 0xc9, 0x13, 0x4a, 0x91,
+ 0x64, 0xa8, 0x96, 0xce, 0x8d, 0xc9, 0x9f, 0xaf,
+};
+static const unsigned char rsa_sigver15_1_sig[] = {
+ 0x81, 0x96, 0xdb, 0x65, 0x66, 0x5d, 0xec, 0x14,
+ 0xb3, 0x42, 0xf6, 0x93, 0x89, 0xae, 0x49, 0x81,
+ 0x98, 0xda, 0x71, 0x6d, 0x72, 0x9b, 0xcb, 0x39,
+ 0xe4, 0x85, 0xd1, 0x9f, 0xbe, 0xb8, 0x69, 0x0e,
+ 0xbe, 0xc0, 0x07, 0x88, 0xee, 0xbf, 0xf9, 0x5d,
+ 0x20, 0x0f, 0x90, 0x48, 0x93, 0x53, 0xbb, 0xc6,
+ 0x2f, 0xf8, 0xb7, 0x1d, 0xd2, 0x15, 0x0f, 0x1f,
+ 0x25, 0xab, 0x5b, 0xae, 0x52, 0xe6, 0x8e, 0x06,
+ 0x43, 0xe1, 0xd9, 0x4a, 0x4c, 0xee, 0x24, 0x0e,
+ 0xeb, 0x4f, 0x9b, 0x1a, 0xcb, 0x6d, 0x22, 0x93,
+ 0xa8, 0xa8, 0xcd, 0x4b, 0xa2, 0xf6, 0x88, 0x1a,
+ 0xaf, 0x3b, 0x2b, 0xdf, 0x04, 0x2d, 0x2b, 0x27,
+ 0x54, 0x90, 0x41, 0xb0, 0x4a, 0xda, 0xb1, 0xdf,
+ 0xce, 0x39, 0xda, 0xd7, 0xda, 0x00, 0x97, 0x89,
+ 0x9a, 0xaf, 0x4c, 0xc3, 0x0b, 0x6d, 0xb3, 0xce,
+ 0x59, 0x0b, 0xd9, 0x91, 0x17, 0x31, 0x6a, 0xe7,
+ 0x92, 0xec, 0x62, 0xe1, 0xe9, 0x73, 0xc7, 0x14,
+ 0x06, 0x16, 0x42, 0x8a, 0x68, 0xb1, 0x7c, 0xb8,
+ 0xa1, 0x45, 0xf0, 0x06, 0xf6, 0x85, 0xb5, 0x93,
+ 0xf1, 0x45, 0xc4, 0xe5, 0xf1, 0x76, 0x71, 0xb4,
+ 0xdc, 0x03, 0x55, 0xde, 0xb1, 0xd3, 0x5a, 0x0f,
+ 0x1f, 0x4f, 0xdd, 0xaa, 0x87, 0x8e, 0x46, 0x4d,
+ 0xe3, 0xd0, 0x5b, 0x28, 0x01, 0xc4, 0x94, 0xf7,
+ 0x00, 0x93, 0xae, 0xa3, 0xb5, 0x64, 0x65, 0xa1,
+ 0x16, 0x29, 0x2e, 0xc7, 0xbb, 0xeb, 0x71, 0x02,
+ 0xf9, 0x26, 0xb6, 0xa6, 0x24, 0xdc, 0x6a, 0x0e,
+ 0x0d, 0xad, 0x50, 0xf5, 0x4b, 0xe7, 0x0e, 0x9a,
+ 0x39, 0x20, 0x70, 0xe2, 0xdf, 0x3b, 0x6f, 0x9d,
+ 0xe3, 0x8f, 0x15, 0x6d, 0x5a, 0xaf, 0x12, 0xf7,
+ 0xf7, 0x85, 0x6f, 0x0e, 0xe4, 0x6e, 0x27, 0xf7,
+ 0xb3, 0x44, 0x38, 0x73, 0x45, 0x80, 0x7a, 0x72,
+ 0x82, 0xf3, 0xc8, 0x32, 0xb8, 0x25, 0xef, 0xdc,
+};
+
+static const unsigned char rsa_sigverpss_0_n[] = {
+ 0xb2, 0xee, 0xdd, 0xdf, 0xa0, 0x35, 0x92, 0x21,
+ 0xf4, 0x8e, 0xc3, 0x24, 0x39, 0xed, 0xe2, 0x38,
+ 0xc0, 0xaa, 0xff, 0x35, 0x75, 0x27, 0x05, 0xd4,
+ 0x84, 0x78, 0x23, 0x50, 0xa5, 0x64, 0x1e, 0x11,
+ 0x45, 0x2a, 0xb1, 0xeb, 0x97, 0x07, 0x0b, 0xff,
+ 0xb3, 0x1f, 0xc4, 0xa4, 0x80, 0xae, 0x1c, 0x8c,
+ 0x66, 0x71, 0x95, 0x80, 0x60, 0xea, 0x4d, 0xde,
+ 0x90, 0x98, 0xe8, 0xe2, 0x96, 0xa7, 0x0e, 0x5f,
+ 0x00, 0x74, 0xed, 0x79, 0xc3, 0xe2, 0xc2, 0x4e,
+ 0xbe, 0x07, 0xbd, 0xb1, 0xb2, 0xeb, 0x6c, 0x29,
+ 0x9a, 0x59, 0x29, 0x81, 0xa3, 0x83, 0xa3, 0x00,
+ 0x24, 0xa8, 0xfd, 0x45, 0xbb, 0xca, 0x1e, 0x44,
+ 0x47, 0xbb, 0x82, 0x4a, 0x5b, 0x71, 0x46, 0xc0,
+ 0xb4, 0xcc, 0x1b, 0x5e, 0x88, 0x9c, 0x89, 0x69,
+ 0xb4, 0xb0, 0x7c, 0x8e, 0xea, 0x24, 0xc0, 0x2f,
+ 0xc8, 0x3f, 0x9d, 0x9f, 0x43, 0xd3, 0xf0, 0x25,
+ 0x67, 0xf1, 0xf0, 0x9b, 0xd4, 0xff, 0x17, 0x9f,
+ 0xc3, 0x41, 0x2f, 0x53, 0x33, 0xdd, 0x73, 0x8a,
+ 0x5c, 0x74, 0x04, 0x3b, 0x60, 0xcc, 0x9f, 0xca,
+ 0x01, 0xb0, 0x0d, 0xe0, 0xcf, 0xb2, 0xf0, 0x08,
+ 0x73, 0xb6, 0x67, 0x6c, 0x54, 0x9e, 0x1c, 0x01,
+ 0xb5, 0x34, 0xab, 0xcf, 0x77, 0xfe, 0x04, 0x01,
+ 0xc1, 0xd2, 0x4d, 0x47, 0x60, 0x5c, 0x68, 0x47,
+ 0x8a, 0x47, 0x3c, 0x3a, 0xa3, 0xb2, 0x75, 0x87,
+ 0x6e, 0x01, 0x7b, 0xdb, 0xe9, 0x6e, 0x63, 0xb2,
+ 0x65, 0xab, 0xc6, 0xed, 0x0d, 0xa6, 0x84, 0xff,
+ 0xf3, 0xcf, 0xd3, 0x9a, 0x96, 0x9b, 0x5c, 0x22,
+ 0xf8, 0x07, 0x7d, 0x63, 0x75, 0x50, 0x91, 0x5b,
+ 0xc4, 0x1f, 0x29, 0x1f, 0x5d, 0xb0, 0x6e, 0xfa,
+ 0x9b, 0x16, 0xf0, 0xe4, 0xda, 0x2c, 0x94, 0x20,
+ 0x9b, 0x44, 0x51, 0x38, 0xd0, 0xe4, 0x86, 0xc9,
+ 0x76, 0x12, 0x04, 0x1a, 0x25, 0x14, 0xb7, 0x14,
+ 0xdb, 0x6e, 0xd2, 0xc3, 0x57, 0x2c, 0x4c, 0xec,
+ 0xfe, 0x25, 0xed, 0x3e, 0xe3, 0x26, 0xa8, 0xd4,
+ 0xd0, 0x21, 0xbc, 0x09, 0x7e, 0xb0, 0x02, 0x3c,
+ 0xa3, 0x43, 0xa4, 0x1f, 0x73, 0x54, 0x5f, 0xa3,
+ 0xe2, 0x49, 0x4e, 0x25, 0xe8, 0xfc, 0xfb, 0xa9,
+ 0x29, 0xc0, 0x7d, 0xd0, 0x06, 0xd5, 0x5c, 0x52,
+ 0x68, 0x3c, 0xf8, 0xc5, 0xdb, 0x92, 0x27, 0x7c,
+ 0xd8, 0x56, 0x1a, 0x7d, 0xe3, 0x32, 0xe5, 0x08,
+ 0xc9, 0x36, 0x9d, 0x7e, 0xd2, 0x2d, 0xc2, 0x53,
+ 0xf2, 0x7e, 0xce, 0x8a, 0x10, 0x5c, 0xf7, 0xe9,
+ 0x99, 0xa6, 0xa8, 0xf5, 0x8d, 0x6c, 0xed, 0xf3,
+ 0xa1, 0xc8, 0x2a, 0x75, 0x77, 0x99, 0x18, 0xe1,
+ 0x32, 0xdb, 0x35, 0x4a, 0x8b, 0x4a, 0xec, 0xc2,
+ 0x15, 0xe9, 0x4b, 0x89, 0x13, 0x81, 0xfb, 0x0c,
+ 0xf9, 0xb4, 0xd8, 0xee, 0xb5, 0xba, 0x45, 0xa1,
+ 0xea, 0x01, 0xf9, 0xbb, 0xd5, 0xa1, 0x73, 0xa1,
+ 0x5b, 0xef, 0x98, 0xa8, 0xcf, 0x74, 0xf4, 0xd5,
+ 0x1a, 0xe2, 0xa7, 0xb9, 0x37, 0x43, 0xb1, 0x29,
+ 0x94, 0xc3, 0x71, 0x74, 0x34, 0x7d, 0x6f, 0xac,
+ 0x97, 0xb3, 0x5b, 0x3a, 0x0a, 0x3c, 0xe2, 0x94,
+ 0x6c, 0x39, 0xb8, 0xe9, 0x2c, 0xf9, 0xc3, 0x8b,
+ 0xd1, 0x80, 0x4d, 0x22, 0x64, 0x63, 0x20, 0x1b,
+ 0xeb, 0xf9, 0x09, 0x14, 0x86, 0x6e, 0xf4, 0x6d,
+ 0xfc, 0xe5, 0x1b, 0xf7, 0xf2, 0xe0, 0x4d, 0xc8,
+ 0xeb, 0x24, 0x35, 0x16, 0x0a, 0x81, 0x9f, 0x9e,
+ 0x47, 0xd8, 0xea, 0x85, 0xda, 0x77, 0x6c, 0x3d,
+ 0xd4, 0xa9, 0x15, 0xbd, 0xda, 0x5d, 0xf0, 0x72,
+ 0x8d, 0xb5, 0x12, 0x72, 0xb1, 0x62, 0xa0, 0xad,
+ 0xc8, 0x0e, 0x5b, 0x47, 0x4c, 0x69, 0xf7, 0x07,
+ 0xe8, 0xd9, 0x9b, 0xc7, 0x2f, 0xd5, 0x68, 0x1e,
+ 0x1c, 0xe0, 0x8f, 0x40, 0x45, 0x5f, 0x08, 0xc8,
+ 0x95, 0x57, 0xb7, 0x35, 0x92, 0x97, 0xf9, 0x7d,
+};
+static const unsigned char rsa_sigverpss_0_e[] = {
+ 0x01, 0x00, 0x01,
+};
+static const unsigned char rsa_sigverpss_0_msg[] = {
+ 0x32, 0x03, 0x0c, 0x2e, 0x06, 0xfc, 0x0f, 0xa5,
+ 0x65, 0xcd, 0x0f, 0x88, 0x52, 0x80, 0xc3, 0x43,
+ 0xda, 0x01, 0x36, 0x48, 0xf5, 0x76, 0xc8, 0x03,
+ 0xae, 0xce, 0x76, 0x0f, 0x83, 0x9d, 0x5c, 0xaa,
+ 0x0f, 0x27, 0x78, 0x66, 0xe6, 0xba, 0xb1, 0x22,
+ 0xc1, 0x42, 0x18, 0x39, 0xdb, 0x17, 0x6d, 0xf9,
+ 0x9a, 0x19, 0xe5, 0x57, 0x72, 0xff, 0x2a, 0xe0,
+ 0x07, 0xec, 0xa4, 0xf3, 0x91, 0x43, 0xf7, 0x2e,
+ 0x85, 0xbd, 0xcd, 0x26, 0x72, 0xb9, 0xd5, 0x5b,
+ 0x28, 0xd3, 0x0c, 0x6b, 0x20, 0xb7, 0x3b, 0x85,
+ 0x18, 0x38, 0xc0, 0x21, 0xfe, 0x9c, 0x92, 0xee,
+ 0x0f, 0x3a, 0x80, 0x0c, 0x40, 0x48, 0xb9, 0x7c,
+ 0xdd, 0xee, 0x91, 0xd5, 0x70, 0x9e, 0x82, 0x38,
+ 0xe4, 0xa8, 0x71, 0x85, 0xea, 0x09, 0x33, 0xcf,
+ 0x9c, 0x84, 0x50, 0x0e, 0x60, 0xf5, 0x07, 0x14,
+ 0x10, 0xe1, 0x92, 0xc3, 0x58, 0x51, 0xab, 0x7c,
+};
+static const unsigned char rsa_sigverpss_0_sig[] = {
+ 0x43, 0xb2, 0x4a, 0x50, 0xa7, 0xe2, 0x6c, 0x5d,
+ 0x50, 0xc5, 0x39, 0xc1, 0xc1, 0x35, 0xbd, 0x66,
+ 0xbd, 0x86, 0x54, 0xc5, 0x2e, 0x65, 0xfc, 0x19,
+ 0x19, 0x6a, 0x22, 0x43, 0x22, 0x11, 0x26, 0xae,
+ 0x51, 0x78, 0xfa, 0xfa, 0xc1, 0xf0, 0x77, 0x1b,
+ 0xd6, 0x5b, 0x93, 0xbd, 0x84, 0xe4, 0x35, 0xbd,
+ 0x8d, 0x91, 0xb2, 0x7c, 0xb2, 0xb1, 0xda, 0xd7,
+ 0x72, 0x62, 0x88, 0x3e, 0xe9, 0x40, 0x27, 0x4e,
+ 0xa5, 0x17, 0x94, 0xf1, 0xe9, 0xdd, 0x8c, 0x6c,
+ 0x5b, 0xc0, 0x0b, 0xe3, 0x7c, 0x8b, 0xc8, 0x10,
+ 0x57, 0x35, 0x69, 0xb7, 0x56, 0xe0, 0x2f, 0x61,
+ 0x2e, 0x13, 0x11, 0x79, 0xfa, 0x60, 0x8f, 0x2a,
+ 0x65, 0x73, 0xf5, 0x17, 0x34, 0x74, 0x72, 0x22,
+ 0xff, 0x22, 0x5b, 0x97, 0x59, 0x44, 0xf4, 0xfb,
+ 0x4a, 0x2b, 0x7e, 0x28, 0xe3, 0x79, 0x84, 0x24,
+ 0x63, 0xeb, 0xde, 0x63, 0x88, 0xe0, 0xbd, 0x28,
+ 0xef, 0x49, 0x6d, 0xd4, 0x2a, 0x87, 0x53, 0xba,
+ 0x5f, 0xde, 0xe3, 0xd4, 0xb2, 0xc2, 0x6f, 0x49,
+ 0x10, 0xae, 0x5e, 0x15, 0xdd, 0x0f, 0x91, 0xe2,
+ 0xeb, 0x1e, 0xc5, 0x36, 0x8e, 0xdf, 0xa6, 0x17,
+ 0x25, 0x21, 0x16, 0x06, 0x72, 0x37, 0x77, 0x19,
+ 0xe5, 0x88, 0x1b, 0x0b, 0x5b, 0x80, 0x44, 0x8f,
+ 0x13, 0xef, 0xbb, 0xfa, 0xf6, 0x4a, 0x11, 0x6a,
+ 0x6a, 0x0c, 0xe0, 0x42, 0x6b, 0x7d, 0xfd, 0xad,
+ 0xb0, 0x4b, 0xff, 0x3f, 0x20, 0xca, 0x5f, 0x64,
+ 0xcc, 0xc9, 0x5b, 0x89, 0xc2, 0x05, 0x33, 0xf9,
+ 0xa5, 0x31, 0x55, 0xfb, 0xdc, 0xeb, 0xd1, 0x24,
+ 0xbf, 0x17, 0x0f, 0xc8, 0xfd, 0xe9, 0x6a, 0xc1,
+ 0xa7, 0x94, 0x36, 0x72, 0x22, 0x29, 0x2c, 0x1c,
+ 0xd1, 0x8b, 0x7b, 0x37, 0x42, 0x25, 0x8d, 0xe3,
+ 0xcc, 0x06, 0x5f, 0x3c, 0x15, 0xfa, 0x74, 0x8a,
+ 0x83, 0xf0, 0xcc, 0xf5, 0x30, 0xd1, 0xa8, 0x88,
+ 0x9f, 0x4e, 0x1d, 0xd8, 0xe3, 0x1b, 0xb5, 0xe3,
+ 0xdb, 0xce, 0xbc, 0x03, 0xfe, 0xe6, 0xa2, 0xb4,
+ 0x94, 0x76, 0xd1, 0xb7, 0xce, 0xae, 0x6a, 0x7c,
+ 0xbd, 0x4f, 0xd6, 0xfe, 0x60, 0xd0, 0x78, 0xd4,
+ 0x04, 0x3f, 0xe0, 0x17, 0x2a, 0x41, 0x26, 0x5a,
+ 0x81, 0x80, 0xcd, 0x40, 0x7c, 0x4f, 0xd6, 0xd6,
+ 0x1d, 0x1f, 0x58, 0x59, 0xaf, 0xa8, 0x00, 0x91,
+ 0x69, 0xb1, 0xf8, 0x3b, 0xef, 0x59, 0x7e, 0x83,
+ 0x4e, 0xca, 0x1d, 0x33, 0x35, 0xb6, 0xa5, 0x9a,
+ 0x0e, 0xc5, 0xe5, 0x11, 0xdd, 0x5d, 0xb7, 0x32,
+ 0x66, 0x23, 0x63, 0x08, 0xbc, 0x2e, 0x9c, 0x10,
+ 0x30, 0xa4, 0x13, 0x38, 0xee, 0xc7, 0x10, 0xf6,
+ 0xed, 0xe9, 0xe1, 0xd1, 0x89, 0x8b, 0x94, 0x21,
+ 0xde, 0x76, 0x72, 0x90, 0xc4, 0xbc, 0x59, 0x31,
+ 0x1b, 0x1b, 0xd7, 0xa0, 0xd0, 0x3d, 0xaa, 0x43,
+ 0x66, 0xfa, 0x43, 0x8d, 0xcc, 0x37, 0xdc, 0x60,
+ 0x59, 0xaf, 0x02, 0x98, 0xe5, 0xe0, 0x17, 0xd6,
+ 0xc3, 0x84, 0xf2, 0xaa, 0x5d, 0x88, 0xa8, 0x78,
+ 0xbf, 0xbd, 0x18, 0x34, 0x9f, 0x5c, 0x6d, 0x22,
+ 0x0c, 0x77, 0x4f, 0x16, 0xf2, 0x85, 0x88, 0x2e,
+ 0x9a, 0x2b, 0x30, 0x1e, 0x17, 0xc8, 0xc7, 0xd4,
+ 0x20, 0x93, 0x47, 0x0d, 0x32, 0x7d, 0xcb, 0x77,
+ 0x85, 0x82, 0xc3, 0x80, 0x75, 0x10, 0x83, 0x33,
+ 0xd5, 0xde, 0x47, 0xd4, 0x22, 0x55, 0x4d, 0xca,
+ 0x4f, 0x90, 0xd2, 0x9f, 0x80, 0x58, 0x22, 0x4c,
+ 0x5a, 0xaa, 0x53, 0x9e, 0xeb, 0xde, 0x62, 0x8a,
+ 0xfb, 0xd7, 0x4b, 0x28, 0xd5, 0xe1, 0x02, 0xf9,
+ 0x61, 0x74, 0x42, 0x12, 0x32, 0x5d, 0x1b, 0x10,
+ 0x8f, 0x51, 0x8d, 0x7c, 0x59, 0xc5, 0xb7, 0x5a,
+ 0x68, 0xe7, 0xdd, 0xb0, 0xc0, 0x22, 0xbc, 0xf1,
+ 0x37, 0xcc, 0x63, 0xa2, 0x85, 0xb9, 0x11, 0x91,
+ 0x43, 0xb9, 0x7b, 0xfb, 0x4a, 0x21, 0xc9, 0xd5,
+};
+
+#define rsa_sigverpss_1_n rsa_sigverpss_0_n
+#define rsa_sigverpss_1_e rsa_sigverpss_0_e
+static const unsigned char rsa_sigverpss_1_msg[] = {
+ 0x29, 0xdc, 0x70, 0xd8, 0xa5, 0xde, 0x41, 0x1d,
+ 0xed, 0x05, 0x16, 0x04, 0x48, 0x05, 0x21, 0x05,
+ 0x1c, 0x40, 0x8a, 0xbb, 0x6c, 0x3c, 0x11, 0xf3,
+ 0x9f, 0x55, 0xf4, 0x03, 0x83, 0xaf, 0x13, 0x5d,
+ 0x91, 0x6f, 0x52, 0x63, 0x73, 0x2b, 0x3f, 0x7d,
+ 0xc3, 0x9e, 0xf5, 0x69, 0x16, 0xa1, 0x40, 0xd3,
+ 0x39, 0x57, 0x01, 0x26, 0xba, 0xa7, 0xd4, 0xa1,
+ 0xaa, 0xef, 0xf1, 0xad, 0xa2, 0xf6, 0x50, 0x6e,
+ 0x04, 0x23, 0x11, 0x98, 0x83, 0xed, 0x1a, 0x84,
+ 0xe6, 0x93, 0x02, 0x83, 0x08, 0x0d, 0x2e, 0x72,
+ 0x24, 0x42, 0x39, 0x8e, 0x4f, 0x7b, 0x99, 0x8a,
+ 0x46, 0x18, 0x80, 0xdf, 0x6a, 0x82, 0x01, 0x64,
+ 0x09, 0x60, 0x74, 0x1e, 0xdf, 0x0e, 0x1b, 0x59,
+ 0xdd, 0x4a, 0x06, 0xf7, 0x29, 0x31, 0x33, 0x09,
+ 0x65, 0x6b, 0xfa, 0x9c, 0x34, 0xa2, 0xa8, 0xd5,
+ 0xfa, 0x38, 0x6b, 0x41, 0xe4, 0x39, 0x6e, 0x66,
+};
+static const unsigned char rsa_sigverpss_1_sig[] = {
+ 0x48, 0x7f, 0x71, 0x82, 0x63, 0x1d, 0xf2, 0xee,
+ 0xe8, 0x79, 0xeb, 0x3a, 0xaf, 0x41, 0x8a, 0x7c,
+ 0xab, 0x0b, 0xd4, 0x57, 0xb6, 0x62, 0x9f, 0x6f,
+ 0xec, 0xc1, 0xd4, 0xef, 0x55, 0x51, 0xd1, 0x0a,
+ 0x0e, 0x1d, 0x8a, 0x64, 0x69, 0x08, 0x57, 0xf5,
+ 0x04, 0xa8, 0x6c, 0xde, 0x76, 0x4d, 0x81, 0xf4,
+ 0x95, 0x7e, 0x95, 0x6d, 0x41, 0x31, 0x2f, 0x9d,
+ 0xe7, 0x47, 0x45, 0x45, 0x9f, 0xa8, 0xf8, 0xe3,
+ 0x30, 0xa6, 0x41, 0x0f, 0x12, 0x05, 0x6d, 0x2b,
+ 0x1a, 0xae, 0xef, 0xd4, 0x6b, 0xc6, 0xf4, 0x61,
+ 0xa5, 0x07, 0xfe, 0xe8, 0xd0, 0xfd, 0xa3, 0x93,
+ 0x58, 0xb4, 0x22, 0x37, 0x1b, 0x84, 0xcb, 0xef,
+ 0xae, 0x24, 0xec, 0x62, 0xe2, 0x7d, 0xf4, 0x09,
+ 0x5a, 0xc3, 0x0f, 0x4b, 0x49, 0xb7, 0xe7, 0xb2,
+ 0x9b, 0x01, 0x2c, 0x8a, 0x39, 0xdd, 0x10, 0xec,
+ 0x30, 0xb9, 0x7e, 0x39, 0x98, 0x94, 0x2a, 0xa4,
+ 0xb3, 0x97, 0x7f, 0x85, 0x6e, 0x19, 0x75, 0x9e,
+ 0x91, 0x94, 0xaa, 0xb5, 0xb0, 0x1f, 0x72, 0x50,
+ 0xb5, 0x6d, 0x7a, 0xff, 0x90, 0xcc, 0x24, 0x80,
+ 0x20, 0x23, 0x1c, 0xf3, 0xbd, 0x01, 0xc7, 0x82,
+ 0x63, 0x04, 0xcc, 0xbd, 0xfb, 0x41, 0x9a, 0xb8,
+ 0xeb, 0x6d, 0x78, 0x02, 0xee, 0x4a, 0x6d, 0xbb,
+ 0xf7, 0xb7, 0xcf, 0x91, 0xca, 0x11, 0xf2, 0x62,
+ 0xec, 0x18, 0x14, 0xcd, 0x10, 0xd8, 0x60, 0xe5,
+ 0x20, 0x86, 0x74, 0x84, 0xd5, 0x35, 0x34, 0x69,
+ 0x65, 0x93, 0x31, 0x99, 0xb6, 0x2d, 0x43, 0x23,
+ 0x1d, 0x73, 0x55, 0xfa, 0x03, 0x76, 0x22, 0xcc,
+ 0x66, 0xbc, 0x20, 0x2f, 0x7f, 0x4f, 0x78, 0xdd,
+ 0xd1, 0x1f, 0xb6, 0x79, 0x6b, 0x58, 0x58, 0x57,
+ 0x56, 0x87, 0xbc, 0x72, 0x6c, 0x81, 0x0a, 0xe2,
+ 0xae, 0xb2, 0x4b, 0x66, 0x5b, 0x65, 0x35, 0x2b,
+ 0x89, 0x0b, 0xa8, 0x5c, 0x34, 0xb3, 0x5f, 0xb0,
+ 0x21, 0x5d, 0x4c, 0x60, 0x57, 0x73, 0xb6, 0x16,
+ 0x94, 0xa7, 0x55, 0x52, 0x2a, 0x87, 0x10, 0xc9,
+ 0x7c, 0x86, 0xb9, 0xdd, 0xf5, 0xb9, 0x30, 0xc0,
+ 0xe6, 0x2a, 0xc9, 0x08, 0x3a, 0x88, 0xdc, 0x27,
+ 0xea, 0x2f, 0xd9, 0x37, 0x06, 0x36, 0xd8, 0xe5,
+ 0x66, 0x11, 0x54, 0x72, 0x4c, 0xc8, 0xa2, 0xc1,
+ 0xed, 0xf5, 0x17, 0x3b, 0x06, 0x2b, 0x4c, 0xc9,
+ 0x49, 0x2b, 0x98, 0x6f, 0xb8, 0x77, 0x96, 0x0c,
+ 0x6b, 0x47, 0x81, 0x6c, 0xf3, 0x94, 0x3d, 0x3b,
+ 0x24, 0x2d, 0x26, 0x9c, 0x40, 0xc1, 0x1f, 0xa7,
+ 0xb2, 0xb4, 0x29, 0xb6, 0x05, 0xe5, 0x6e, 0x3c,
+ 0xab, 0xd4, 0xaa, 0x3d, 0x78, 0x63, 0x3e, 0xf2,
+ 0x75, 0x0d, 0xc3, 0x46, 0x0e, 0x68, 0xd7, 0x3d,
+ 0xb9, 0xcb, 0x9a, 0x0a, 0xce, 0xec, 0x6f, 0x21,
+ 0x8c, 0x86, 0xaa, 0xeb, 0x7b, 0x56, 0x41, 0xa6,
+ 0x7a, 0xd3, 0x03, 0x02, 0x5c, 0x76, 0x01, 0xf7,
+ 0x5d, 0x5e, 0x8e, 0x7d, 0xac, 0x35, 0x84, 0x11,
+ 0xc6, 0xbc, 0x9a, 0x53, 0xcc, 0x3b, 0x4f, 0x5b,
+ 0x23, 0x79, 0x30, 0x52, 0xc3, 0x73, 0x5d, 0xc8,
+ 0xf1, 0xec, 0x2e, 0x0d, 0xda, 0x64, 0x90, 0x50,
+ 0x62, 0xcf, 0x18, 0xc5, 0x52, 0x45, 0xe7, 0x38,
+ 0x1a, 0xec, 0x01, 0x18, 0xbb, 0x85, 0x97, 0x7f,
+ 0x68, 0x2b, 0x6f, 0xfc, 0xcd, 0x08, 0xc8, 0xe2,
+ 0xca, 0x7e, 0xa6, 0x4f, 0xca, 0x5d, 0xdd, 0xf8,
+ 0xfa, 0x52, 0x1c, 0x91, 0x82, 0x56, 0x07, 0xb2,
+ 0x03, 0x3e, 0xa2, 0x8d, 0x60, 0xff, 0x78, 0x05,
+ 0x1a, 0xfc, 0x6e, 0x27, 0x80, 0xbd, 0x90, 0x98,
+ 0x83, 0x46, 0xba, 0xec, 0xee, 0x89, 0xe3, 0x1b,
+ 0xc0, 0xcd, 0x2f, 0x05, 0x37, 0x18, 0xb5, 0xfa,
+ 0xc3, 0x91, 0x85, 0x0f, 0xb7, 0x74, 0x1c, 0x64,
+ 0xf0, 0xf8, 0x56, 0x35, 0xb8, 0x1d, 0xc3, 0x39,
+ 0x5c, 0xea, 0x8a, 0x92, 0x31, 0xd2, 0x11, 0x4b,
+};
+
+static const unsigned char rsa_sigverx931_0_n[] = {
+ 0xa0, 0x16, 0x14, 0x80, 0x8b, 0x17, 0x2b, 0xad,
+ 0xd7, 0x07, 0x31, 0x6d, 0xfc, 0xba, 0x25, 0x83,
+ 0x09, 0xa0, 0xf7, 0x71, 0xc6, 0x06, 0x22, 0x87,
+ 0xd6, 0xbd, 0x13, 0xd9, 0xfe, 0x7c, 0xf7, 0xe6,
+ 0x48, 0xdb, 0x27, 0xd8, 0xa5, 0x49, 0x8e, 0x8c,
+ 0xea, 0xbe, 0xe0, 0x04, 0x6f, 0x3d, 0x3b, 0x73,
+ 0xdc, 0xc5, 0xd4, 0xdc, 0x85, 0xef, 0xea, 0x10,
+ 0x46, 0xf3, 0x88, 0xb9, 0x93, 0xbc, 0xa0, 0xb6,
+ 0x06, 0x02, 0x82, 0xb4, 0x2d, 0x54, 0xec, 0x79,
+ 0x50, 0x8a, 0xfc, 0xfa, 0x62, 0x45, 0xbb, 0xd7,
+ 0x26, 0xcd, 0x88, 0xfa, 0xe8, 0x0f, 0x26, 0x5b,
+ 0x1f, 0x21, 0x3f, 0x3b, 0x5d, 0x98, 0x3f, 0x02,
+ 0x8c, 0xa1, 0xbf, 0xc0, 0x70, 0x4d, 0xd1, 0x41,
+ 0xfd, 0xb9, 0x55, 0x12, 0x90, 0xc8, 0x6e, 0x0f,
+ 0x19, 0xa8, 0x5c, 0x31, 0xd6, 0x16, 0x0e, 0xdf,
+ 0x08, 0x84, 0xcd, 0x4b, 0xfd, 0x28, 0x8d, 0x7d,
+ 0x6e, 0xea, 0xc7, 0x95, 0x4a, 0xc3, 0x84, 0x54,
+ 0x7f, 0xb0, 0x20, 0x29, 0x96, 0x39, 0x4c, 0x3e,
+ 0x85, 0xec, 0x22, 0xdd, 0xb9, 0x14, 0xbb, 0x04,
+ 0x2f, 0x4c, 0x0c, 0xe3, 0xfa, 0xae, 0x47, 0x79,
+ 0x59, 0x8e, 0x4e, 0x7d, 0x4a, 0x17, 0xae, 0x16,
+ 0x38, 0x66, 0x4e, 0xff, 0x45, 0x7f, 0xac, 0x5e,
+ 0x75, 0x9f, 0x51, 0x18, 0xe6, 0xad, 0x6b, 0x8b,
+ 0x3d, 0x08, 0x4d, 0x9a, 0xd2, 0x11, 0xba, 0xa8,
+ 0xc3, 0xb5, 0x17, 0xb5, 0xdf, 0xe7, 0x39, 0x89,
+ 0x27, 0x7b, 0xeb, 0xf4, 0xe5, 0x7e, 0xa9, 0x7b,
+ 0x39, 0x40, 0x6f, 0xe4, 0x82, 0x14, 0x3d, 0x62,
+ 0xb6, 0xd4, 0x43, 0xd0, 0x0a, 0x2f, 0xc1, 0x73,
+ 0x3d, 0x99, 0x37, 0xbe, 0x62, 0x13, 0x6a, 0x8b,
+ 0xeb, 0xc5, 0x64, 0xd5, 0x2a, 0x8b, 0x4f, 0x7f,
+ 0x82, 0x48, 0x69, 0x3e, 0x08, 0x1b, 0xb5, 0x77,
+ 0xd3, 0xdc, 0x1b, 0x2c, 0xe5, 0x59, 0xf6, 0x33,
+ 0x47, 0xa0, 0x0f, 0xff, 0x8a, 0x6a, 0x1d, 0x66,
+ 0x24, 0x67, 0x36, 0x7d, 0x21, 0xda, 0xc1, 0xd4,
+ 0x11, 0x6c, 0xe8, 0x5f, 0xd7, 0x8a, 0x53, 0x5c,
+ 0xb2, 0xe2, 0xf9, 0x14, 0x29, 0x0f, 0xcf, 0x28,
+ 0x32, 0x4f, 0xc6, 0x17, 0xf6, 0xbc, 0x0e, 0xb8,
+ 0x99, 0x7c, 0x14, 0xa3, 0x40, 0x3f, 0xf3, 0xe4,
+ 0x31, 0xbe, 0x54, 0x64, 0x5a, 0xad, 0x1d, 0xb0,
+ 0x37, 0xcc, 0xd9, 0x0b, 0xa4, 0xbc, 0xe0, 0x07,
+ 0x37, 0xd1, 0xe1, 0x65, 0xc6, 0x53, 0xfe, 0x60,
+ 0x6a, 0x64, 0xa4, 0x01, 0x00, 0xf3, 0x5b, 0x9a,
+ 0x28, 0x61, 0xde, 0x7a, 0xd7, 0x0d, 0x56, 0x1e,
+ 0x4d, 0xa8, 0x6a, 0xb5, 0xf2, 0x86, 0x2a, 0x4e,
+ 0xaa, 0x37, 0x23, 0x5a, 0x3b, 0x69, 0x66, 0x81,
+ 0xc8, 0x8e, 0x1b, 0x31, 0x0f, 0x28, 0x31, 0x9a,
+ 0x2d, 0xe5, 0x79, 0xcc, 0xa4, 0xca, 0x60, 0x45,
+ 0xf7, 0x83, 0x73, 0x5a, 0x01, 0x29, 0xda, 0xf7,
+
+};
+static const unsigned char rsa_sigverx931_0_e[] = {
+ 0x01, 0x00, 0x01,
+};
+static const unsigned char rsa_sigverx931_0_msg[] = {
+ 0x82, 0x2e, 0x41, 0x70, 0x9d, 0x1f, 0xe9, 0x47,
+ 0xec, 0xf1, 0x79, 0xcc, 0x05, 0xef, 0xdb, 0xcd,
+ 0xca, 0x8b, 0x8e, 0x61, 0x45, 0xad, 0xa6, 0xd9,
+ 0xd7, 0x4b, 0x15, 0xf4, 0x92, 0x3a, 0x2a, 0x52,
+ 0xe3, 0x44, 0x57, 0x2b, 0x74, 0x7a, 0x37, 0x41,
+ 0x50, 0xcb, 0xcf, 0x13, 0x49, 0xd6, 0x15, 0x54,
+ 0x97, 0xfd, 0xae, 0x9b, 0xc1, 0xbb, 0xfc, 0x5c,
+ 0xc1, 0x37, 0x58, 0x17, 0x63, 0x19, 0x9c, 0xcf,
+ 0xee, 0x9c, 0xe5, 0xbe, 0x06, 0xe4, 0x97, 0x47,
+ 0xd1, 0x93, 0xa1, 0x2c, 0x59, 0x97, 0x02, 0x01,
+ 0x31, 0x45, 0x8c, 0xe1, 0x5c, 0xac, 0xe7, 0x5f,
+ 0x6a, 0x23, 0xda, 0xbf, 0xe4, 0x25, 0xc6, 0x67,
+ 0xea, 0x5f, 0x73, 0x90, 0x1b, 0x06, 0x0f, 0x41,
+ 0xb5, 0x6e, 0x74, 0x7e, 0xfd, 0xd9, 0xaa, 0xbd,
+ 0xe2, 0x8d, 0xad, 0x99, 0xdd, 0x29, 0x70, 0xca,
+ 0x1b, 0x38, 0x21, 0x55, 0xde, 0x07, 0xaf, 0x00,
+
+};
+static const unsigned char rsa_sigverx931_0_sig[] = {
+ 0x29, 0xa9, 0x3a, 0x8e, 0x9e, 0x90, 0x1b, 0xdb,
+ 0xaf, 0x0b, 0x47, 0x5b, 0xb5, 0xc3, 0x8c, 0xc3,
+ 0x70, 0xbe, 0x73, 0xf9, 0x65, 0x8e, 0xc6, 0x1e,
+ 0x95, 0x0b, 0xdb, 0x24, 0x76, 0x79, 0xf1, 0x00,
+ 0x71, 0xcd, 0xc5, 0x6a, 0x7b, 0xd2, 0x8b, 0x18,
+ 0xc4, 0xdd, 0xf1, 0x2a, 0x31, 0x04, 0x3f, 0xfc,
+ 0x36, 0x06, 0x20, 0x71, 0x3d, 0x62, 0xf2, 0xb5,
+ 0x79, 0x0a, 0xd5, 0xd2, 0x81, 0xf1, 0xb1, 0x4f,
+ 0x9a, 0x17, 0xe8, 0x67, 0x64, 0x48, 0x09, 0x75,
+ 0xff, 0x2d, 0xee, 0x36, 0xca, 0xca, 0x1d, 0x74,
+ 0x99, 0xbe, 0x5c, 0x94, 0x31, 0xcc, 0x12, 0xf4,
+ 0x59, 0x7e, 0x17, 0x00, 0x4f, 0x7b, 0xa4, 0xb1,
+ 0xda, 0xdb, 0x3e, 0xa4, 0x34, 0x10, 0x4a, 0x19,
+ 0x0a, 0xd2, 0xa7, 0xa0, 0xc5, 0xe6, 0xef, 0x82,
+ 0xd4, 0x2e, 0x21, 0xbe, 0x15, 0x73, 0xac, 0xef,
+ 0x05, 0xdb, 0x6a, 0x8a, 0x1a, 0xcb, 0x8e, 0xa5,
+ 0xee, 0xfb, 0x28, 0xbf, 0x96, 0xa4, 0x2b, 0xd2,
+ 0x85, 0x2b, 0x20, 0xc3, 0xaf, 0x9a, 0x32, 0x04,
+ 0xa0, 0x49, 0x24, 0x47, 0xd0, 0x09, 0xf7, 0xcf,
+ 0x73, 0xb6, 0xf6, 0x70, 0xda, 0x3b, 0xf8, 0x5a,
+ 0x28, 0x2e, 0x14, 0x6c, 0x52, 0xbd, 0x2a, 0x7c,
+ 0x8e, 0xc1, 0xa8, 0x0e, 0xb1, 0x1e, 0x6b, 0x8d,
+ 0x76, 0xea, 0x70, 0x81, 0xa0, 0x02, 0x63, 0x74,
+ 0xbc, 0x7e, 0xb9, 0xac, 0x0e, 0x7b, 0x1b, 0x75,
+ 0x82, 0xe2, 0x98, 0x4e, 0x24, 0x55, 0xd4, 0xbd,
+ 0x14, 0xde, 0x58, 0x56, 0x3a, 0x5d, 0x4e, 0x57,
+ 0x0d, 0x54, 0x74, 0xe8, 0x86, 0x8c, 0xcb, 0x07,
+ 0x9f, 0x0b, 0xfb, 0xc2, 0x08, 0x5c, 0xd7, 0x05,
+ 0x3b, 0xc8, 0xd2, 0x15, 0x68, 0x8f, 0x3d, 0x3c,
+ 0x4e, 0x85, 0xa9, 0x25, 0x6f, 0xf5, 0x2e, 0xca,
+ 0xca, 0xa8, 0x27, 0x89, 0x61, 0x4e, 0x1f, 0x57,
+ 0x2d, 0x99, 0x10, 0x3f, 0xbc, 0x9e, 0x96, 0x5e,
+ 0x2f, 0x0a, 0x25, 0xa7, 0x5c, 0xea, 0x65, 0x2a,
+ 0x22, 0x35, 0xa3, 0xf9, 0x13, 0x89, 0x05, 0x2e,
+ 0x19, 0x73, 0x1d, 0x70, 0x74, 0x98, 0x15, 0x4b,
+ 0xab, 0x56, 0x52, 0xe0, 0x01, 0x42, 0x95, 0x6a,
+ 0x46, 0x2c, 0x78, 0xff, 0x26, 0xbc, 0x48, 0x10,
+ 0x38, 0x25, 0xab, 0x32, 0x7c, 0x79, 0x7c, 0x5d,
+ 0x6f, 0x45, 0x54, 0x74, 0x2d, 0x93, 0x56, 0x52,
+ 0x11, 0x34, 0x1e, 0xe3, 0x4b, 0x6a, 0x17, 0x4f,
+ 0x37, 0x14, 0x75, 0xac, 0xa3, 0xa1, 0xca, 0xda,
+ 0x38, 0x06, 0xa9, 0x78, 0xb9, 0x5d, 0xd0, 0x59,
+ 0x1b, 0x5d, 0x1e, 0xc2, 0x0b, 0xfb, 0x39, 0x37,
+ 0x44, 0x85, 0xb6, 0x36, 0x06, 0x95, 0xbc, 0x15,
+ 0x35, 0xb9, 0xe6, 0x27, 0x42, 0xe3, 0xc8, 0xec,
+ 0x30, 0x37, 0x20, 0x26, 0x9a, 0x11, 0x61, 0xc0,
+ 0xdb, 0xb2, 0x5a, 0x26, 0x78, 0x27, 0xb9, 0x13,
+ 0xc9, 0x1a, 0xa7, 0x67, 0x93, 0xe8, 0xbe, 0xcb,
+};
+
+#define rsa_sigverx931_1_n rsa_sigverx931_0_n
+#define rsa_sigverx931_1_e rsa_sigverx931_0_e
+static const unsigned char rsa_sigverx931_1_msg[] = {
+ 0x79, 0x02, 0xb9, 0xd2, 0x3e, 0x84, 0x02, 0xc8,
+ 0x2a, 0x94, 0x92, 0x14, 0x8d, 0xd5, 0xd3, 0x8d,
+ 0xb2, 0xf6, 0x00, 0x8b, 0x61, 0x2c, 0xd2, 0xf9,
+ 0xa8, 0xe0, 0x5d, 0xac, 0xdc, 0xa5, 0x34, 0xf3,
+ 0xda, 0x6c, 0xd4, 0x70, 0x92, 0xfb, 0x40, 0x26,
+ 0xc7, 0x9b, 0xe8, 0xd2, 0x10, 0x11, 0xcf, 0x7f,
+ 0x23, 0xd0, 0xed, 0x55, 0x52, 0x6d, 0xd3, 0xb2,
+ 0x56, 0x53, 0x8d, 0x7c, 0x4c, 0xb8, 0xcc, 0xb5,
+ 0xfd, 0xd0, 0x45, 0x4f, 0x62, 0x40, 0x54, 0x42,
+ 0x68, 0xd5, 0xe5, 0xdd, 0xf0, 0x76, 0x94, 0x59,
+ 0x1a, 0x57, 0x13, 0xb4, 0xc3, 0x70, 0xcc, 0xbd,
+ 0x4c, 0x2e, 0xc8, 0x6b, 0x9d, 0x68, 0xd0, 0x72,
+ 0x6a, 0x94, 0xd2, 0x18, 0xb5, 0x3b, 0x86, 0x45,
+ 0x95, 0xaa, 0x50, 0xda, 0x35, 0xeb, 0x69, 0x44,
+ 0x1f, 0xf3, 0x3a, 0x51, 0xbb, 0x1d, 0x08, 0x42,
+ 0x12, 0xd7, 0xd6, 0x21, 0xd8, 0x9b, 0x87, 0x55,
+};
+
+static const unsigned char rsa_sigverx931_1_sig[] = {
+ 0x3b, 0xba, 0xb3, 0xb1, 0xb2, 0x6a, 0x29, 0xb5,
+ 0xf9, 0x94, 0xf1, 0x00, 0x5c, 0x16, 0x67, 0x67,
+ 0x73, 0xd3, 0xde, 0x7e, 0x07, 0xfa, 0xaa, 0x95,
+ 0xeb, 0x5a, 0x55, 0xdc, 0xb2, 0xa9, 0x70, 0x5a,
+ 0xee, 0x8f, 0x8d, 0x69, 0x85, 0x2b, 0x00, 0xe3,
+ 0xdc, 0xe2, 0x73, 0x9b, 0x68, 0xeb, 0x93, 0x69,
+ 0x08, 0x03, 0x17, 0xd6, 0x50, 0x21, 0x14, 0x23,
+ 0x8c, 0xe6, 0x54, 0x3a, 0xd9, 0xfc, 0x8b, 0x14,
+ 0x81, 0xb1, 0x8b, 0x9d, 0xd2, 0xbe, 0x58, 0x75,
+ 0x94, 0x74, 0x93, 0xc9, 0xbb, 0x4e, 0xf6, 0x1f,
+ 0x73, 0x7d, 0x1a, 0x5f, 0xbd, 0xbf, 0x59, 0x37,
+ 0x5b, 0x98, 0x54, 0xad, 0x3a, 0xef, 0xa0, 0xef,
+ 0xcb, 0xc3, 0xe8, 0x84, 0xd8, 0x3d, 0xf5, 0x60,
+ 0xb8, 0xc3, 0x8d, 0x1e, 0x78, 0xa0, 0x91, 0x94,
+ 0xb7, 0xd7, 0xb1, 0xd4, 0xe2, 0xee, 0x81, 0x93,
+ 0xfc, 0x41, 0xf0, 0x31, 0xbb, 0x03, 0x52, 0xde,
+ 0x80, 0x20, 0x3a, 0x68, 0xe6, 0xc5, 0x50, 0x1b,
+ 0x08, 0x3f, 0x40, 0xde, 0xb3, 0xe5, 0x81, 0x99,
+ 0x7f, 0xdb, 0xb6, 0x5d, 0x61, 0x27, 0xd4, 0xfb,
+ 0xcd, 0xc5, 0x7a, 0xea, 0xde, 0x7a, 0x66, 0xef,
+ 0x55, 0x3f, 0x85, 0xea, 0x84, 0xc5, 0x0a, 0xf6,
+ 0x3c, 0x40, 0x38, 0xf7, 0x6c, 0x66, 0xe5, 0xbe,
+ 0x61, 0x41, 0xd3, 0xb1, 0x08, 0xe1, 0xb4, 0xf9,
+ 0x6e, 0xf6, 0x0e, 0x4a, 0x72, 0x6c, 0x61, 0x63,
+ 0x3e, 0x41, 0x33, 0x94, 0xd6, 0x27, 0xa4, 0xd9,
+ 0x3a, 0x20, 0x2b, 0x39, 0xea, 0xe5, 0x82, 0x48,
+ 0xd6, 0x5b, 0x58, 0x85, 0x44, 0xb0, 0xd2, 0xfd,
+ 0xfb, 0x3e, 0xeb, 0x78, 0xac, 0xbc, 0xba, 0x16,
+ 0x92, 0x0e, 0x20, 0xc1, 0xb2, 0xd1, 0x92, 0xa8,
+ 0x00, 0x88, 0xc0, 0x41, 0x46, 0x38, 0xb6, 0x54,
+ 0x70, 0x0c, 0x00, 0x62, 0x97, 0x6a, 0x8e, 0x66,
+ 0x5a, 0xa1, 0x6c, 0xf7, 0x6d, 0xc2, 0x27, 0x56,
+ 0x60, 0x5b, 0x0c, 0x52, 0xac, 0x5c, 0xae, 0x99,
+ 0x55, 0x11, 0x62, 0x52, 0x09, 0x48, 0x53, 0x90,
+ 0x3c, 0x0b, 0xd4, 0xdc, 0x7b, 0xe3, 0x4c, 0xe3,
+ 0xa8, 0x6d, 0xc5, 0xdf, 0xc1, 0x5c, 0x59, 0x25,
+ 0x99, 0x30, 0xde, 0x57, 0x6a, 0x84, 0x25, 0x34,
+ 0x3e, 0x64, 0x11, 0xdb, 0x7a, 0x82, 0x8e, 0x70,
+ 0xd2, 0x5c, 0x0e, 0x81, 0xa0, 0x24, 0x53, 0x75,
+ 0x98, 0xd6, 0x10, 0x01, 0x6a, 0x14, 0xed, 0xc3,
+ 0x6f, 0xc4, 0x18, 0xb8, 0xd2, 0x9f, 0x59, 0x53,
+ 0x81, 0x3a, 0x86, 0x31, 0xfc, 0x9e, 0xbf, 0x6c,
+ 0x52, 0x93, 0x86, 0x9c, 0xaa, 0x6c, 0x6f, 0x07,
+ 0x8a, 0x40, 0x33, 0x64, 0xb2, 0x70, 0x48, 0x85,
+ 0x05, 0x59, 0x65, 0x2d, 0x6b, 0x9a, 0xad, 0xab,
+ 0x20, 0x7e, 0x02, 0x6d, 0xde, 0xcf, 0x22, 0x0b,
+ 0xea, 0x6e, 0xbd, 0x1c, 0x39, 0x3a, 0xfd, 0xa4,
+ 0xde, 0x54, 0xae, 0xde, 0x5e, 0xf7, 0xb0, 0x6d,
+};
+
+static const struct rsa_sigver_st rsa_sigver_data[] = {
+ {
+ "pkcs1", /* pkcs1v1.5 */
+ 2048,
+ "SHA224",
+ ITM(rsa_sigver15_0_msg),
+ ITM(rsa_sigver15_0_n),
+ ITM(rsa_sigver15_0_e),
+ ITM(rsa_sigver15_0_sig),
+ NO_PSS_SALT_LEN,
+ PASS
+ },
+ {
+ "pkcs1", /* pkcs1v1.5 */
+ 2048,
+ "SHA224",
+ ITM(rsa_sigver15_1_msg),
+ ITM(rsa_sigver15_1_n),
+ ITM(rsa_sigver15_1_e),
+ ITM(rsa_sigver15_1_sig),
+ NO_PSS_SALT_LEN,
+ FAIL
+ },
+ {
+ "x931",
+ 3072,
+ "SHA1",
+ ITM(rsa_sigverx931_0_msg),
+ ITM(rsa_sigverx931_0_n),
+ ITM(rsa_sigverx931_0_e),
+ ITM(rsa_sigverx931_0_sig),
+ NO_PSS_SALT_LEN,
+ PASS
+ },
+ {
+ "x931",
+ 3072,
+ "SHA256",
+ ITM(rsa_sigverx931_1_msg),
+ ITM(rsa_sigverx931_1_n),
+ ITM(rsa_sigverx931_1_e),
+ ITM(rsa_sigverx931_1_sig),
+ NO_PSS_SALT_LEN,
+ FAIL
+ },
+ {
+ "pss",
+ 4096,
+ "SHA384",
+ ITM(rsa_sigverpss_0_msg),
+ ITM(rsa_sigverpss_0_n),
+ ITM(rsa_sigverpss_0_e),
+ ITM(rsa_sigverpss_0_sig),
+ 62,
+ PASS
+ },
+ {
+ "pss",
+ 4096,
+ "SHA384",
+ ITM(rsa_sigverpss_1_msg),
+ ITM(rsa_sigverpss_1_n),
+ ITM(rsa_sigverpss_1_e),
+ ITM(rsa_sigverpss_1_sig),
+ 62,
+ FAIL
+ },
+};
+
+struct rsa_decrypt_prim_st {
+ const unsigned char *ct;
+ size_t ct_len;
+};
+
+static const unsigned char rsa_decrypt_prim_0_ct[] = {
+ 0x09, 0x7e, 0x82, 0xfe, 0xc7, 0x24, 0x65, 0xe0,
+ 0x49, 0x2e, 0x78, 0xed, 0xf4, 0x7d, 0x05, 0x0d,
+ 0xff, 0x2f, 0x1a, 0x95, 0xeb, 0x74, 0x60, 0x3d,
+ 0xd3, 0x3a, 0xec, 0x8a, 0x2c, 0x8b, 0x00, 0xa5,
+ 0x75, 0x2c, 0x87, 0x7b, 0xa5, 0x76, 0x08, 0xee,
+ 0x99, 0xab, 0x5b, 0x21, 0x69, 0x90, 0x72, 0x0d,
+ 0x55, 0xe4, 0x7d, 0x1d, 0xcb, 0xaa, 0xeb, 0x32,
+ 0x24, 0xf7, 0xce, 0x95, 0xb5, 0x3e, 0x0e, 0x57,
+ 0xd4, 0x2a, 0x5b, 0xfc, 0x1f, 0xf7, 0x28, 0x3f,
+ 0xd6, 0x31, 0x36, 0x92, 0xc5, 0x13, 0xe3, 0x4e,
+ 0x28, 0x53, 0xbe, 0x60, 0x5f, 0x82, 0x12, 0x7a,
+ 0x50, 0xe6, 0x91, 0x40, 0xcf, 0x52, 0x3a, 0xd2,
+ 0x15, 0x20, 0xd5, 0x82, 0x6d, 0x5e, 0xab, 0x47,
+ 0xd1, 0x2d, 0x00, 0xf5, 0xea, 0xf4, 0x68, 0x88,
+ 0x38, 0x43, 0xd6, 0xcb, 0xaa, 0xd0, 0xd1, 0x75,
+ 0xe6, 0x87, 0x5f, 0xd1, 0x89, 0xd3, 0x57, 0x1b,
+ 0xf2, 0x45, 0x8a, 0x92, 0xe6, 0x95, 0xb8, 0x99,
+ 0x80, 0xe9, 0xe6, 0x5f, 0x2b, 0x48, 0x2b, 0xb3,
+ 0x2b, 0x80, 0x56, 0xf8, 0xd4, 0x96, 0x44, 0xb5,
+ 0xae, 0x6d, 0x4a, 0x3d, 0x7b, 0x0a, 0x54, 0x3c,
+ 0xa8, 0x21, 0x8b, 0x64, 0x96, 0xea, 0xc2, 0xef,
+ 0x60, 0xbb, 0xd3, 0x4e, 0xaf, 0x6c, 0x5b, 0x06,
+ 0x57, 0xe8, 0x5e, 0x2c, 0x87, 0x46, 0x12, 0xeb,
+ 0xfb, 0xe2, 0xdb, 0x7b, 0xac, 0x09, 0x8b, 0xa0,
+ 0x98, 0x6e, 0xc6, 0x3f, 0x98, 0xdd, 0x7d, 0xc6,
+ 0xc6, 0x32, 0xc2, 0xcc, 0x73, 0xe2, 0x15, 0xde,
+ 0xb2, 0x0f, 0x41, 0x08, 0x1e, 0x2e, 0xba, 0x93,
+ 0x65, 0x94, 0xab, 0x84, 0x0e, 0x1e, 0xda, 0x1b,
+ 0xf0, 0xe0, 0x13, 0x13, 0xe2, 0xa5, 0x31, 0xb8,
+ 0x80, 0xc1, 0x38, 0xc5, 0x08, 0x09, 0x0a, 0xe2,
+ 0x78, 0x7d, 0xd6, 0xcf, 0x8d, 0x6b, 0xe8, 0x1b,
+ 0x47, 0x83, 0x80, 0x71, 0xe2, 0xd3, 0x01, 0xbc,
+};
+
+static const unsigned char rsa_decrypt_prim_1_ct[] = {
+ 0xff, 0xd5, 0xaa, 0x3f, 0x0c, 0x7c, 0x78, 0x7e,
+ 0xe3, 0x8a, 0x4f, 0xcc, 0x20, 0x3f, 0x51, 0xe5,
+ 0xf4, 0x9c, 0xc5, 0x62, 0xcc, 0xa3, 0xcb, 0xce,
+ 0x39, 0x80, 0x35, 0xef, 0xd5, 0x95, 0x56, 0xcb,
+ 0xb2, 0x62, 0x8c, 0xe6, 0x8b, 0x20, 0xe4, 0x36,
+ 0xae, 0xe8, 0x07, 0x07, 0xc2, 0x23, 0x6a, 0xfc,
+ 0x83, 0xf0, 0x04, 0x88, 0x19, 0xf8, 0x9f, 0x5c,
+ 0x59, 0x4d, 0xb3, 0x81, 0x86, 0x9d, 0x3b, 0x61,
+ 0x73, 0x31, 0x03, 0xec, 0x9c, 0xdd, 0x75, 0xb7,
+ 0x37, 0x0a, 0x8d, 0x94, 0xd9, 0x9f, 0x6d, 0x85,
+ 0xb0, 0x5c, 0x08, 0xcc, 0xb4, 0x27, 0x8c, 0xf0,
+ 0xe6, 0xd6, 0xe0, 0xc1, 0x57, 0x59, 0xaa, 0xc7,
+ 0x8f, 0x5c, 0xa7, 0x4b, 0x3c, 0x81, 0x4a, 0xa3,
+ 0x9b, 0x18, 0x88, 0x04, 0x98, 0x54, 0x3d, 0x87,
+ 0x2a, 0x89, 0xb6, 0x41, 0xe8, 0xbd, 0x37, 0x17,
+ 0x03, 0xa8, 0xf1, 0x37, 0xa5, 0x5e, 0x02, 0x13,
+ 0x67, 0x08, 0xec, 0x9e, 0x97, 0xf5, 0xcc, 0x5f,
+ 0x75, 0x37, 0xbe, 0xce, 0xe8, 0x5e, 0xa1, 0xca,
+ 0x46, 0xa3, 0xda, 0xe4, 0x1f, 0xf8, 0xc4, 0xa3,
+ 0x26, 0xbb, 0xed, 0xa2, 0x71, 0xb2, 0x44, 0x00,
+ 0xd3, 0xe5, 0x06, 0xf1, 0xb4, 0xc1, 0xe0, 0x29,
+ 0xca, 0xeb, 0xe0, 0xdf, 0xd1, 0x69, 0x5f, 0xa9,
+ 0x03, 0x7c, 0x49, 0x93, 0xfb, 0xc2, 0xdf, 0x39,
+ 0xbc, 0x2a, 0x6b, 0x59, 0x7d, 0xf4, 0x84, 0x93,
+ 0xa2, 0x8b, 0x7a, 0x5a, 0x7a, 0xa9, 0xff, 0x41,
+ 0x4c, 0x52, 0x5c, 0xf9, 0x59, 0xd2, 0x91, 0xc3,
+ 0xa9, 0xe8, 0x23, 0x36, 0x5f, 0x2f, 0xb9, 0xbe,
+ 0x22, 0xc4, 0xfd, 0x84, 0x5f, 0x81, 0x3d, 0x94,
+ 0xf8, 0xa4, 0x9b, 0xae, 0xc0, 0xb5, 0x78, 0x4f,
+ 0x91, 0x76, 0x02, 0x5d, 0x60, 0x71, 0x8b, 0xeb,
+ 0x08, 0x42, 0xe3, 0xb3, 0x63, 0x05, 0x60, 0x59,
+ 0x98, 0xc1, 0x6d, 0x66, 0xb3, 0xc5, 0x8a, 0xbc,
+};
+
+static const struct rsa_decrypt_prim_st rsa_decrypt_prim_data[] = {
+ {
+ ITM(rsa_decrypt_prim_0_ct),
+ },
+ {
+ ITM(rsa_decrypt_prim_1_ct),
+ },
+};
+
+struct drbg_st {
+ const char *drbg_name;
+ const char *cipher;
+ int use_df;
+
+ const unsigned char *entropy_input;
+ size_t entropy_input_len;
+ const unsigned char *nonce;
+ size_t nonce_len;
+ const unsigned char *returned_bits;
+ size_t returned_bits_len;
+};
+
+static const unsigned char drbg_entropy_input[] = {
+ 0x36, 0x40, 0x19, 0x40, 0xfa, 0x8b, 0x1f, 0xba,
+ 0x91, 0xa1, 0x66, 0x1f, 0x21, 0x1d, 0x78, 0xa0,
+ 0xb9, 0x38, 0x9a, 0x74, 0xe5, 0xbc, 0xcf, 0xec,
+ 0xe8, 0xd7, 0x66, 0xaf, 0x1a, 0x6d, 0x3b, 0x14
+};
+
+static const unsigned char drbg_nonce[] = {
+ 0x49, 0x6f, 0x25, 0xb0, 0xf1, 0x30, 0x1b, 0x4f,
+ 0x50, 0x1b, 0xe3, 0x03, 0x80, 0xa1, 0x37, 0xeb
+};
+
+static const unsigned char drbg_returned_bits[] = {
+ 0x58, 0x62, 0xeb, 0x38, 0xbd, 0x55, 0x8d, 0xd9,
+ 0x78, 0xa6, 0x96, 0xe6, 0xdf, 0x16, 0x47, 0x82,
+ 0xdd, 0xd8, 0x87, 0xe7, 0xe9, 0xa6, 0xc9, 0xf3,
+ 0xf1, 0xfb, 0xaf, 0xb7, 0x89, 0x41, 0xb5, 0x35,
+ 0xa6, 0x49, 0x12, 0xdf, 0xd2, 0x24, 0xc6, 0xdc,
+ 0x74, 0x54, 0xe5, 0x25, 0x0b, 0x3d, 0x97, 0x16,
+ 0x5e, 0x16, 0x26, 0x0c, 0x2f, 0xaf, 0x1c, 0xc7,
+ 0x73, 0x5c, 0xb7, 0x5f, 0xb4, 0xf0, 0x7e, 0x1d
+};
+
+static const unsigned char drbg_key_0[] = {
+ 0x33, 0x63, 0xd9, 0x00, 0x0e, 0x6d, 0xb4, 0x7c,
+ 0x16, 0xd3, 0xfc, 0x65, 0xf2, 0x87, 0x2c, 0x08,
+ 0xa3, 0x5f, 0x99, 0xb2, 0xd1, 0x74, 0xaf, 0xa5,
+ 0x37, 0xa6, 0x6e, 0xc1, 0x53, 0x05, 0x2d, 0x98
+};
+
+static const struct drbg_st drbg_data[] = {
+ {
+ "CTR-DRBG",
+ "AES-256-CTR",
+ 1,
+ ITM(drbg_entropy_input),
+ ITM(drbg_nonce),
+ ITM(drbg_returned_bits)
+ }
+};
diff --git a/test/aesgcmtest.c b/test/aesgcmtest.c
new file mode 100644
index 000000000000..cdb0cbd0216d
--- /dev/null
+++ b/test/aesgcmtest.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2019-2022 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 "testutil.h"
+
+static const unsigned char gcm_key[] = {
+ 0xee, 0xbc, 0x1f, 0x57, 0x48, 0x7f, 0x51, 0x92, 0x1c, 0x04, 0x65, 0x66,
+ 0x5f, 0x8a, 0xe6, 0xd1, 0x65, 0x8b, 0xb2, 0x6d, 0xe6, 0xf8, 0xa0, 0x69,
+ 0xa3, 0x52, 0x02, 0x93, 0xa5, 0x72, 0x07, 0x8f
+};
+static const unsigned char gcm_iv[] = {
+ 0x99, 0xaa, 0x3e, 0x68, 0xed, 0x81, 0x73, 0xa0, 0xee, 0xd0, 0x66, 0x84
+};
+static const unsigned char gcm_pt[] = {
+ 0xf5, 0x6e, 0x87, 0x05, 0x5b, 0xc3, 0x2d, 0x0e, 0xeb, 0x31, 0xb2, 0xea,
+ 0xcc, 0x2b, 0xf2, 0xa5
+};
+static const unsigned char gcm_aad[] = {
+ 0x4d, 0x23, 0xc3, 0xce, 0xc3, 0x34, 0xb4, 0x9b, 0xdb, 0x37, 0x0c, 0x43,
+ 0x7f, 0xec, 0x78, 0xde
+};
+static const unsigned char gcm_ct[] = {
+ 0xf7, 0x26, 0x44, 0x13, 0xa8, 0x4c, 0x0e, 0x7c, 0xd5, 0x36, 0x86, 0x7e,
+ 0xb9, 0xf2, 0x17, 0x36
+};
+static const unsigned char gcm_tag[] = {
+ 0x67, 0xba, 0x05, 0x10, 0x26, 0x2a, 0xe4, 0x87, 0xd7, 0x37, 0xee, 0x62,
+ 0x98, 0xf7, 0x7e, 0x0c
+};
+
+static int do_encrypt(unsigned char *iv_gen, unsigned char *ct, int *ct_len,
+ unsigned char *tag, int *tag_len)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx = NULL;
+ int outlen;
+ unsigned char outbuf[64];
+
+ *tag_len = 16;
+ ret = TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ && TEST_true(EVP_EncryptInit_ex(ctx, EVP_aes_256_gcm(), NULL, NULL,
+ NULL) > 0)
+ && TEST_true(EVP_EncryptInit_ex(ctx, NULL, NULL, gcm_key,
+ iv_gen != NULL ? NULL : gcm_iv) > 0)
+ && TEST_true(EVP_EncryptUpdate(ctx, NULL, &outlen, gcm_aad,
+ sizeof(gcm_aad)) > 0)
+ && TEST_true(EVP_EncryptUpdate(ctx, ct, ct_len, gcm_pt,
+ sizeof(gcm_pt)) > 0)
+ && TEST_true(EVP_EncryptFinal_ex(ctx, outbuf, &outlen) > 0)
+ && TEST_int_eq(EVP_CIPHER_CTX_get_tag_length(ctx), 16)
+ && TEST_true(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, 16,
+ tag) > 0)
+ && TEST_true(iv_gen == NULL
+ || EVP_CIPHER_CTX_get_original_iv(ctx, iv_gen, 12));
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+static int do_decrypt(const unsigned char *iv, const unsigned char *ct,
+ int ct_len, const unsigned char *tag, int tag_len)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx = NULL;
+ int outlen, ptlen;
+ unsigned char pt[32];
+ unsigned char outbuf[32];
+
+ ret = TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ && TEST_true(EVP_DecryptInit_ex(ctx, EVP_aes_256_gcm(), NULL,
+ NULL, NULL) > 0)
+ && TEST_true(EVP_DecryptInit_ex(ctx, NULL, NULL, gcm_key, iv) > 0)
+ && TEST_int_eq(EVP_CIPHER_CTX_get_tag_length(ctx), 16)
+ && TEST_true(EVP_DecryptUpdate(ctx, NULL, &outlen, gcm_aad,
+ sizeof(gcm_aad)) > 0)
+ && TEST_true(EVP_DecryptUpdate(ctx, pt, &ptlen, ct,
+ ct_len) > 0)
+ && TEST_true(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG,
+ tag_len, (void *)tag) > 0)
+ && TEST_true(EVP_DecryptFinal_ex(ctx, outbuf, &outlen) > 0)
+ && TEST_mem_eq(gcm_pt, sizeof(gcm_pt), pt, ptlen);
+
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+static int kat_test(void)
+{
+ unsigned char tag[32];
+ unsigned char ct[32];
+ int ctlen = 0, taglen = 0;
+
+ return do_encrypt(NULL, ct, &ctlen, tag, &taglen)
+ && TEST_mem_eq(gcm_ct, sizeof(gcm_ct), ct, ctlen)
+ && TEST_mem_eq(gcm_tag, sizeof(gcm_tag), tag, taglen)
+ && do_decrypt(gcm_iv, ct, ctlen, tag, taglen);
+}
+
+static int badkeylen_test(void)
+{
+ int ret;
+ EVP_CIPHER_CTX *ctx = NULL;
+ const EVP_CIPHER *cipher;
+
+ ret = TEST_ptr(cipher = EVP_aes_192_gcm())
+ && TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ && TEST_true(EVP_EncryptInit_ex(ctx, cipher, NULL, NULL, NULL))
+ && TEST_int_le(EVP_CIPHER_CTX_set_key_length(ctx, 2), 0);
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+static int ivgen_test(void)
+{
+ unsigned char iv_gen[16];
+ unsigned char tag[32];
+ unsigned char ct[32];
+ int ctlen = 0, taglen = 0;
+
+ return do_encrypt(iv_gen, ct, &ctlen, tag, &taglen)
+ && do_decrypt(iv_gen, ct, ctlen, tag, taglen);
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(kat_test);
+ ADD_TEST(badkeylen_test);
+ ADD_TEST(ivgen_test);
+ return 1;
+}
diff --git a/test/afalgtest.c b/test/afalgtest.c
new file mode 100644
index 000000000000..02947c1ed365
--- /dev/null
+++ b/test/afalgtest.c
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* We need to use some engine deprecated APIs */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <stdio.h>
+#include <openssl/opensslconf.h>
+
+#include <string.h>
+#include <openssl/engine.h>
+#include <openssl/evp.h>
+#include <openssl/rand.h>
+#include "testutil.h"
+
+/* Use a buffer size which is not aligned to block size */
+#define BUFFER_SIZE 17
+
+#ifndef OPENSSL_NO_ENGINE
+static ENGINE *e;
+
+static int test_afalg_aes_cbc(int keysize_idx)
+{
+ EVP_CIPHER_CTX *ctx;
+ const EVP_CIPHER *cipher;
+ unsigned char ebuf[BUFFER_SIZE + 32];
+ unsigned char dbuf[BUFFER_SIZE + 32];
+ const unsigned char *enc_result = NULL;
+ int encl, encf, decl, decf;
+ int ret = 0;
+ static const unsigned char key[] =
+ "\x06\xa9\x21\x40\x36\xb8\xa1\x5b\x51\x2e\x03\xd5\x34\x12\x00\x06"
+ "\x06\xa9\x21\x40\x36\xb8\xa1\x5b\x51\x2e\x03\xd5\x34\x12\x00\x06";
+ static const unsigned char iv[] =
+ "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30\xb4\x22\xda\x80\x2c\x9f\xac\x41";
+ /* input = "Single block msg\n" 17 Bytes*/
+ static const unsigned char in[BUFFER_SIZE] =
+ "\x53\x69\x6e\x67\x6c\x65\x20\x62\x6c\x6f\x63\x6b\x20\x6d\x73\x67"
+ "\x0a";
+ static const unsigned char encresult_128[BUFFER_SIZE] =
+ "\xe3\x53\x77\x9c\x10\x79\xae\xb8\x27\x08\x94\x2d\xbe\x77\x18\x1a"
+ "\x2d";
+ static const unsigned char encresult_192[BUFFER_SIZE] =
+ "\xf7\xe4\x26\xd1\xd5\x4f\x8f\x39\xb1\x9e\xe0\xdf\x61\xb9\xc2\x55"
+ "\xeb";
+ static const unsigned char encresult_256[BUFFER_SIZE] =
+ "\xa0\x76\x85\xfd\xc1\x65\x71\x9d\xc7\xe9\x13\x6e\xae\x55\x49\xb4"
+ "\x13";
+
+#ifdef OSSL_SANITIZE_MEMORY
+ /*
+ * Initialise the encryption & decryption buffers to pacify the memory
+ * sanitiser. The sanitiser doesn't know that this memory is modified
+ * by the engine, this tells it that all is good.
+ */
+ OPENSSL_cleanse(ebuf, sizeof(ebuf));
+ OPENSSL_cleanse(dbuf, sizeof(dbuf));
+#endif
+
+ switch (keysize_idx) {
+ case 0:
+ cipher = EVP_aes_128_cbc();
+ enc_result = &encresult_128[0];
+ break;
+ case 1:
+ cipher = EVP_aes_192_cbc();
+ enc_result = &encresult_192[0];
+ break;
+ case 2:
+ cipher = EVP_aes_256_cbc();
+ enc_result = &encresult_256[0];
+ break;
+ default:
+ cipher = NULL;
+ }
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new()))
+ return 0;
+
+ if (!TEST_true(EVP_CipherInit_ex(ctx, cipher, e, key, iv, 1))
+ || !TEST_true(EVP_CipherUpdate(ctx, ebuf, &encl, in, BUFFER_SIZE))
+ || !TEST_true(EVP_CipherFinal_ex(ctx, ebuf + encl, &encf)))
+ goto end;
+ encl += encf;
+
+ if (!TEST_mem_eq(enc_result, BUFFER_SIZE, ebuf, BUFFER_SIZE))
+ goto end;
+
+ if (!TEST_true(EVP_CIPHER_CTX_reset(ctx))
+ || !TEST_true(EVP_CipherInit_ex(ctx, cipher, e, key, iv, 0))
+ || !TEST_true(EVP_CipherUpdate(ctx, dbuf, &decl, ebuf, encl))
+ || !TEST_true(EVP_CipherFinal_ex(ctx, dbuf + decl, &decf)))
+ goto end;
+ decl += decf;
+
+ if (!TEST_int_eq(decl, BUFFER_SIZE)
+ || !TEST_mem_eq(dbuf, BUFFER_SIZE, in, BUFFER_SIZE))
+ goto end;
+
+ ret = 1;
+
+ end:
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+static int test_pr16743(void)
+{
+ int ret = 0;
+ const EVP_CIPHER * cipher;
+ EVP_CIPHER_CTX *ctx;
+
+ if (!TEST_true(ENGINE_init(e)))
+ return 0;
+ cipher = ENGINE_get_cipher(e, NID_aes_128_cbc);
+ ctx = EVP_CIPHER_CTX_new();
+ if (cipher != NULL && ctx != NULL)
+ ret = EVP_EncryptInit_ex(ctx, cipher, e, NULL, NULL);
+ TEST_true(ret);
+ EVP_CIPHER_CTX_free(ctx);
+ ENGINE_finish(e);
+ return ret;
+}
+
+int global_init(void)
+{
+ ENGINE_load_builtin_engines();
+# ifndef OPENSSL_NO_STATIC_ENGINE
+ OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL);
+# endif
+ return 1;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_ENGINE
+ if ((e = ENGINE_by_id("afalg")) == NULL) {
+ /* Probably a platform env issue, not a test failure. */
+ TEST_info("Can't load AFALG engine");
+ } else {
+ ADD_ALL_TESTS(test_afalg_aes_cbc, 3);
+ ADD_TEST(test_pr16743);
+ }
+#endif
+
+ return 1;
+}
+
+#ifndef OPENSSL_NO_ENGINE
+void cleanup_tests(void)
+{
+ ENGINE_free(e);
+}
+#endif
diff --git a/test/algorithmid_test.c b/test/algorithmid_test.c
new file mode 100644
index 000000000000..0104425c1d4a
--- /dev/null
+++ b/test/algorithmid_test.c
@@ -0,0 +1,328 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/asn1.h>
+#include <openssl/pem.h>
+#include "internal/sizes.h"
+#include "crypto/evp.h"
+#include "testutil.h"
+
+/* Collected arguments */
+static const char *eecert_filename = NULL; /* For test_x509_file() */
+static const char *cacert_filename = NULL; /* For test_x509_file() */
+static const char *pubkey_filename = NULL; /* For test_spki_file() */
+
+#define ALGORITHMID_NAME "algorithm-id"
+
+static int test_spki_aid(X509_PUBKEY *pubkey, const char *filename)
+{
+ const ASN1_OBJECT *oid;
+ X509_ALGOR *alg = NULL;
+ EVP_PKEY *pkey = NULL;
+ EVP_KEYMGMT *keymgmt = NULL;
+ void *keydata = NULL;
+ char name[OSSL_MAX_NAME_SIZE] = "";
+ unsigned char *algid_legacy = NULL;
+ int algid_legacy_len = 0;
+ static unsigned char algid_prov[OSSL_MAX_ALGORITHM_ID_SIZE];
+ size_t algid_prov_len = 0;
+ const OSSL_PARAM *gettable_params = NULL;
+ OSSL_PARAM params[] = {
+ OSSL_PARAM_octet_string(ALGORITHMID_NAME,
+ &algid_prov, sizeof(algid_prov)),
+ OSSL_PARAM_END
+ };
+ int ret = 0;
+
+ if (!TEST_true(X509_PUBKEY_get0_param(NULL, NULL, NULL, &alg, pubkey))
+ || !TEST_ptr(pkey = X509_PUBKEY_get0(pubkey)))
+ goto end;
+
+ if (!TEST_int_ge(algid_legacy_len = i2d_X509_ALGOR(alg, &algid_legacy), 0))
+ goto end;
+
+ X509_ALGOR_get0(&oid, NULL, NULL, alg);
+ if (!TEST_int_gt(OBJ_obj2txt(name, sizeof(name), oid, 0), 0))
+ goto end;
+
+ /*
+ * We use an internal functions to ensure we have a provided key.
+ * Note that |keydata| should not be freed, as it's cached in |pkey|.
+ * The |keymgmt|, however, should, as its reference count is incremented
+ * in this function.
+ */
+ if ((keydata = evp_pkey_export_to_provider(pkey, NULL,
+ &keymgmt, NULL)) == NULL) {
+ TEST_info("The public key found in '%s' doesn't have provider support."
+ " Skipping...",
+ filename);
+ ret = 1;
+ goto end;
+ }
+
+ if (!TEST_true(EVP_KEYMGMT_is_a(keymgmt, name))) {
+ TEST_info("The AlgorithmID key type (%s) for the public key found in"
+ " '%s' doesn't match the key type of the extracted public"
+ " key.",
+ name, filename);
+ ret = 1;
+ goto end;
+ }
+
+ if (!TEST_ptr(gettable_params = EVP_KEYMGMT_gettable_params(keymgmt))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable_params, ALGORITHMID_NAME))) {
+ TEST_info("The %s provider keymgmt appears to lack support for algorithm-id."
+ " Skipping...",
+ name);
+ ret = 1;
+ goto end;
+ }
+
+ algid_prov[0] = '\0';
+ if (!TEST_true(evp_keymgmt_get_params(keymgmt, keydata, params)))
+ goto end;
+ algid_prov_len = params[0].return_size;
+
+ /* We now have all the algorithm IDs we need, let's compare them */
+ if (TEST_mem_eq(algid_legacy, algid_legacy_len,
+ algid_prov, algid_prov_len))
+ ret = 1;
+
+ end:
+ EVP_KEYMGMT_free(keymgmt);
+ OPENSSL_free(algid_legacy);
+ return ret;
+}
+
+static int test_x509_spki_aid(X509 *cert, const char *filename)
+{
+ X509_PUBKEY *pubkey = X509_get_X509_PUBKEY(cert);
+
+ return test_spki_aid(pubkey, filename);
+}
+
+static int test_x509_sig_aid(X509 *eecert, const char *ee_filename,
+ X509 *cacert, const char *ca_filename)
+{
+ const ASN1_OBJECT *sig_oid = NULL;
+ const X509_ALGOR *alg = NULL;
+ int sig_nid = NID_undef, dig_nid = NID_undef, pkey_nid = NID_undef;
+ EVP_MD_CTX *mdctx = NULL;
+ EVP_PKEY_CTX *pctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ unsigned char *algid_legacy = NULL;
+ int algid_legacy_len = 0;
+ static unsigned char algid_prov[OSSL_MAX_ALGORITHM_ID_SIZE];
+ size_t algid_prov_len = 0;
+ const OSSL_PARAM *gettable_params = NULL;
+ OSSL_PARAM params[] = {
+ OSSL_PARAM_octet_string("algorithm-id",
+ &algid_prov, sizeof(algid_prov)),
+ OSSL_PARAM_END
+ };
+ int ret = 0;
+
+ X509_get0_signature(NULL, &alg, eecert);
+ X509_ALGOR_get0(&sig_oid, NULL, NULL, alg);
+ if (!TEST_int_eq(X509_ALGOR_cmp(alg, X509_get0_tbs_sigalg(eecert)), 0))
+ goto end;
+ if (!TEST_int_ne(sig_nid = OBJ_obj2nid(sig_oid), NID_undef)
+ || !TEST_true(OBJ_find_sigid_algs(sig_nid, &dig_nid, &pkey_nid))
+ || !TEST_ptr(pkey = X509_get0_pubkey(cacert)))
+ goto end;
+
+ if (!TEST_true(EVP_PKEY_is_a(pkey, OBJ_nid2sn(pkey_nid)))) {
+ TEST_info("The '%s' pubkey can't be used to verify the '%s' signature",
+ ca_filename, ee_filename);
+ TEST_info("Signature algorithm is %s (pkey type %s, hash type %s)",
+ OBJ_nid2sn(sig_nid), OBJ_nid2sn(pkey_nid), OBJ_nid2sn(dig_nid));
+ TEST_info("Pkey key type is %s", EVP_PKEY_get0_type_name(pkey));
+ goto end;
+ }
+
+ if (!TEST_int_ge(algid_legacy_len = i2d_X509_ALGOR(alg, &algid_legacy), 0))
+ goto end;
+
+ if (!TEST_ptr(mdctx = EVP_MD_CTX_new())
+ || !TEST_true(EVP_DigestVerifyInit_ex(mdctx, &pctx,
+ OBJ_nid2sn(dig_nid),
+ NULL, NULL, pkey, NULL))) {
+ TEST_info("Couldn't initialize a DigestVerify operation with "
+ "pkey type %s and hash type %s",
+ OBJ_nid2sn(pkey_nid), OBJ_nid2sn(dig_nid));
+ goto end;
+ }
+
+ if (!TEST_ptr(gettable_params = EVP_PKEY_CTX_gettable_params(pctx))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable_params, ALGORITHMID_NAME))) {
+ TEST_info("The %s provider keymgmt appears to lack support for algorithm-id"
+ " Skipping...",
+ OBJ_nid2sn(pkey_nid));
+ ret = 1;
+ goto end;
+ }
+
+ algid_prov[0] = '\0';
+ if (!TEST_true(EVP_PKEY_CTX_get_params(pctx, params)))
+ goto end;
+ algid_prov_len = params[0].return_size;
+
+ /* We now have all the algorithm IDs we need, let's compare them */
+ if (TEST_mem_eq(algid_legacy, algid_legacy_len,
+ algid_prov, algid_prov_len))
+ ret = 1;
+
+ end:
+ EVP_MD_CTX_free(mdctx);
+ /* pctx is free by EVP_MD_CTX_free() */
+ OPENSSL_free(algid_legacy);
+ return ret;
+}
+
+static int test_spki_file(void)
+{
+ X509_PUBKEY *pubkey = NULL;
+ BIO *b = BIO_new_file(pubkey_filename, "r");
+ int ret = 0;
+
+ if (b == NULL) {
+ TEST_error("Couldn't open '%s' for reading\n", pubkey_filename);
+ TEST_openssl_errors();
+ goto end;
+ }
+
+ if ((pubkey = PEM_read_bio_X509_PUBKEY(b, NULL, NULL, NULL)) == NULL) {
+ TEST_error("'%s' doesn't appear to be a SubjectPublicKeyInfo in PEM format\n",
+ pubkey_filename);
+ TEST_openssl_errors();
+ goto end;
+ }
+
+ ret = test_spki_aid(pubkey, pubkey_filename);
+ end:
+ BIO_free(b);
+ X509_PUBKEY_free(pubkey);
+ return ret;
+}
+
+static int test_x509_files(void)
+{
+ X509 *eecert = NULL, *cacert = NULL;
+ BIO *bee = NULL, *bca = NULL;
+ int ret = 0;
+
+ if ((bee = BIO_new_file(eecert_filename, "r")) == NULL) {
+ TEST_error("Couldn't open '%s' for reading\n", eecert_filename);
+ TEST_openssl_errors();
+ goto end;
+ }
+ if ((bca = BIO_new_file(cacert_filename, "r")) == NULL) {
+ TEST_error("Couldn't open '%s' for reading\n", cacert_filename);
+ TEST_openssl_errors();
+ goto end;
+ }
+
+ if ((eecert = PEM_read_bio_X509(bee, NULL, NULL, NULL)) == NULL) {
+ TEST_error("'%s' doesn't appear to be a X.509 certificate in PEM format\n",
+ eecert_filename);
+ TEST_openssl_errors();
+ goto end;
+ }
+ if ((cacert = PEM_read_bio_X509(bca, NULL, NULL, NULL)) == NULL) {
+ TEST_error("'%s' doesn't appear to be a X.509 certificate in PEM format\n",
+ cacert_filename);
+ TEST_openssl_errors();
+ goto end;
+ }
+
+ ret = test_x509_sig_aid(eecert, eecert_filename, cacert, cacert_filename)
+ & test_x509_spki_aid(eecert, eecert_filename)
+ & test_x509_spki_aid(cacert, cacert_filename);
+ end:
+ BIO_free(bee);
+ BIO_free(bca);
+ X509_free(eecert);
+ X509_free(cacert);
+ return ret;
+}
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_X509,
+ OPT_SPKI,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("file...\n"),
+ { "x509", OPT_X509, '-', "Test X.509 certificates. Requires two files" },
+ { "spki", OPT_SPKI, '-', "Test public keys in SubjectPublicKeyInfo form. Requires one file" },
+ { OPT_HELP_STR, 1, '-',
+ "file...\tFile(s) to run tests on. All files must be PEM encoded.\n" },
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+ int n, x509 = 0, spki = 0, testcount = 0;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_X509:
+ x509 = 1;
+ break;
+ case OPT_SPKI:
+ spki = 1;
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+
+ /* |testcount| adds all the given test types together */
+ testcount = x509 + spki;
+
+ if (testcount < 1)
+ BIO_printf(bio_err, "No test type given\n");
+ else if (testcount > 1)
+ BIO_printf(bio_err, "Only one test type may be given\n");
+ if (testcount != 1)
+ return 0;
+
+ n = test_get_argument_count();
+ if (spki && n == 1) {
+ pubkey_filename = test_get_argument(0);
+ } else if (x509 && n == 2) {
+ eecert_filename = test_get_argument(0);
+ cacert_filename = test_get_argument(1);
+ }
+
+ if (spki && pubkey_filename == NULL) {
+ BIO_printf(bio_err, "Missing -spki argument\n");
+ return 0;
+ } else if (x509 && (eecert_filename == NULL || cacert_filename == NULL)) {
+ BIO_printf(bio_err, "Missing -x509 argument(s)\n");
+ return 0;
+ }
+
+ if (x509)
+ ADD_TEST(test_x509_files);
+ if (spki)
+ ADD_TEST(test_spki_file);
+ return 1;
+}
diff --git a/test/asn1_decode_test.c b/test/asn1_decode_test.c
new file mode 100644
index 000000000000..9c676d3dccd7
--- /dev/null
+++ b/test/asn1_decode_test.c
@@ -0,0 +1,235 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/rand.h>
+#include <openssl/asn1t.h>
+#include <openssl/obj_mac.h>
+#include "internal/numbers.h"
+#include "testutil.h"
+
+#ifdef __GNUC__
+# pragma GCC diagnostic ignored "-Wunused-function"
+#endif
+#ifdef __clang__
+# pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
+/* Badly coded ASN.1 INTEGER zero wrapped in a sequence */
+static unsigned char t_invalid_zero[] = {
+ 0x30, 0x02, /* SEQUENCE tag + length */
+ 0x02, 0x00 /* INTEGER tag + length */
+};
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+/* LONG case ************************************************************* */
+
+typedef struct {
+ long test_long;
+} ASN1_LONG_DATA;
+
+ASN1_SEQUENCE(ASN1_LONG_DATA) = {
+ ASN1_EMBED(ASN1_LONG_DATA, test_long, LONG),
+} static_ASN1_SEQUENCE_END(ASN1_LONG_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_LONG_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_LONG_DATA)
+
+static int test_long(void)
+{
+ const unsigned char *p = t_invalid_zero;
+ ASN1_LONG_DATA *dectst =
+ d2i_ASN1_LONG_DATA(NULL, &p, sizeof(t_invalid_zero));
+
+ if (dectst == NULL)
+ return 0; /* Fail */
+
+ ASN1_LONG_DATA_free(dectst);
+ return 1;
+}
+#endif
+
+/* INT32 case ************************************************************* */
+
+typedef struct {
+ int32_t test_int32;
+} ASN1_INT32_DATA;
+
+ASN1_SEQUENCE(ASN1_INT32_DATA) = {
+ ASN1_EMBED(ASN1_INT32_DATA, test_int32, INT32),
+} static_ASN1_SEQUENCE_END(ASN1_INT32_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_INT32_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_INT32_DATA)
+
+static int test_int32(void)
+{
+ const unsigned char *p = t_invalid_zero;
+ ASN1_INT32_DATA *dectst =
+ d2i_ASN1_INT32_DATA(NULL, &p, sizeof(t_invalid_zero));
+
+ if (dectst == NULL)
+ return 0; /* Fail */
+
+ ASN1_INT32_DATA_free(dectst);
+ return 1;
+}
+
+/* UINT32 case ************************************************************* */
+
+typedef struct {
+ uint32_t test_uint32;
+} ASN1_UINT32_DATA;
+
+ASN1_SEQUENCE(ASN1_UINT32_DATA) = {
+ ASN1_EMBED(ASN1_UINT32_DATA, test_uint32, UINT32),
+} static_ASN1_SEQUENCE_END(ASN1_UINT32_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_UINT32_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_UINT32_DATA)
+
+static int test_uint32(void)
+{
+ const unsigned char *p = t_invalid_zero;
+ ASN1_UINT32_DATA *dectst =
+ d2i_ASN1_UINT32_DATA(NULL, &p, sizeof(t_invalid_zero));
+
+ if (dectst == NULL)
+ return 0; /* Fail */
+
+ ASN1_UINT32_DATA_free(dectst);
+ return 1;
+}
+
+/* INT64 case ************************************************************* */
+
+typedef struct {
+ int64_t test_int64;
+} ASN1_INT64_DATA;
+
+ASN1_SEQUENCE(ASN1_INT64_DATA) = {
+ ASN1_EMBED(ASN1_INT64_DATA, test_int64, INT64),
+} static_ASN1_SEQUENCE_END(ASN1_INT64_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_INT64_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_INT64_DATA)
+
+static int test_int64(void)
+{
+ const unsigned char *p = t_invalid_zero;
+ ASN1_INT64_DATA *dectst =
+ d2i_ASN1_INT64_DATA(NULL, &p, sizeof(t_invalid_zero));
+
+ if (dectst == NULL)
+ return 0; /* Fail */
+
+ ASN1_INT64_DATA_free(dectst);
+ return 1;
+}
+
+/* UINT64 case ************************************************************* */
+
+typedef struct {
+ uint64_t test_uint64;
+} ASN1_UINT64_DATA;
+
+ASN1_SEQUENCE(ASN1_UINT64_DATA) = {
+ ASN1_EMBED(ASN1_UINT64_DATA, test_uint64, UINT64),
+} static_ASN1_SEQUENCE_END(ASN1_UINT64_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_UINT64_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_UINT64_DATA)
+
+static int test_uint64(void)
+{
+ const unsigned char *p = t_invalid_zero;
+ ASN1_UINT64_DATA *dectst =
+ d2i_ASN1_UINT64_DATA(NULL, &p, sizeof(t_invalid_zero));
+
+ if (dectst == NULL)
+ return 0; /* Fail */
+
+ ASN1_UINT64_DATA_free(dectst);
+ return 1;
+}
+
+typedef struct {
+ ASN1_STRING *invalidDirString;
+} INVALIDTEMPLATE;
+
+ASN1_SEQUENCE(INVALIDTEMPLATE) = {
+ /*
+ * DirectoryString is a CHOICE type so it must use explicit tagging -
+ * but we deliberately use implicit here, which makes this template invalid.
+ */
+ ASN1_IMP(INVALIDTEMPLATE, invalidDirString, DIRECTORYSTRING, 12)
+} static_ASN1_SEQUENCE_END(INVALIDTEMPLATE)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(INVALIDTEMPLATE)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(INVALIDTEMPLATE)
+
+/* Empty sequence for invalid template test */
+static unsigned char t_invalid_template[] = {
+ 0x30, 0x03, /* SEQUENCE tag + length */
+ 0x0c, 0x01, 0x41 /* UTF8String, length 1, "A" */
+};
+
+static int test_invalid_template(void)
+{
+ const unsigned char *p = t_invalid_template;
+ INVALIDTEMPLATE *tmp = d2i_INVALIDTEMPLATE(NULL, &p,
+ sizeof(t_invalid_template));
+
+ /* We expect a NULL pointer return */
+ if (TEST_ptr_null(tmp))
+ return 1;
+
+ INVALIDTEMPLATE_free(tmp);
+ return 0;
+}
+
+static int test_reuse_asn1_object(void)
+{
+ static unsigned char cn_der[] = { 0x06, 0x03, 0x55, 0x04, 0x06 };
+ static unsigned char oid_der[] = {
+ 0x06, 0x06, 0x2a, 0x03, 0x04, 0x05, 0x06, 0x07
+ };
+ int ret = 0;
+ ASN1_OBJECT *obj;
+ unsigned char const *p = oid_der;
+
+ /* Create an object that owns dynamically allocated 'sn' and 'ln' fields */
+
+ if (!TEST_ptr(obj = ASN1_OBJECT_create(NID_undef, cn_der, sizeof(cn_der),
+ "C", "countryName")))
+ goto err;
+ /* reuse obj - this should not leak sn and ln */
+ if (!TEST_ptr(d2i_ASN1_OBJECT(&obj, &p, sizeof(oid_der))))
+ goto err;
+ ret = 1;
+err:
+ ASN1_OBJECT_free(obj);
+ return ret;
+}
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ADD_TEST(test_long);
+#endif
+ ADD_TEST(test_int32);
+ ADD_TEST(test_uint32);
+ ADD_TEST(test_int64);
+ ADD_TEST(test_uint64);
+ ADD_TEST(test_invalid_template);
+ ADD_TEST(test_reuse_asn1_object);
+ return 1;
+}
diff --git a/test/asn1_dsa_internal_test.c b/test/asn1_dsa_internal_test.c
new file mode 100644
index 000000000000..9beb382af762
--- /dev/null
+++ b/test/asn1_dsa_internal_test.c
@@ -0,0 +1,184 @@
+/*
+ * Copyright 2019-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 <string.h>
+
+#include <openssl/bn.h>
+#include "crypto/asn1_dsa.h"
+#include "testutil.h"
+
+static unsigned char t_dsa_sig[] = {
+ 0x30, 0x06, /* SEQUENCE tag + length */
+ 0x02, 0x01, 0x01, /* INTEGER tag + length + content */
+ 0x02, 0x01, 0x02 /* INTEGER tag + length + content */
+};
+
+static unsigned char t_dsa_sig_extra[] = {
+ 0x30, 0x06, /* SEQUENCE tag + length */
+ 0x02, 0x01, 0x01, /* INTEGER tag + length + content */
+ 0x02, 0x01, 0x02, /* INTEGER tag + length + content */
+ 0x05, 0x00 /* NULL tag + length */
+};
+
+static unsigned char t_dsa_sig_msb[] = {
+ 0x30, 0x08, /* SEQUENCE tag + length */
+ 0x02, 0x02, 0x00, 0x81, /* INTEGER tag + length + content */
+ 0x02, 0x02, 0x00, 0x82 /* INTEGER tag + length + content */
+};
+
+static unsigned char t_dsa_sig_two[] = {
+ 0x30, 0x08, /* SEQUENCE tag + length */
+ 0x02, 0x02, 0x01, 0x00, /* INTEGER tag + length + content */
+ 0x02, 0x02, 0x02, 0x00 /* INTEGER tag + length + content */
+};
+
+/*
+ * Badly coded ASN.1 INTEGER zero wrapped in a sequence along with another
+ * (valid) INTEGER.
+ */
+static unsigned char t_invalid_int_zero[] = {
+ 0x30, 0x05, /* SEQUENCE tag + length */
+ 0x02, 0x00, /* INTEGER tag + length */
+ 0x02, 0x01, 0x2a /* INTEGER tag + length */
+};
+
+/*
+ * Badly coded ASN.1 INTEGER (with leading zeros) wrapped in a sequence along
+ * with another (valid) INTEGER.
+ */
+static unsigned char t_invalid_int[] = {
+ 0x30, 0x07, /* SEQUENCE tag + length */
+ 0x02, 0x02, 0x00, 0x7f, /* INTEGER tag + length */
+ 0x02, 0x01, 0x2a /* INTEGER tag + length */
+};
+
+/*
+ * Negative ASN.1 INTEGER wrapped in a sequence along with another
+ * (valid) INTEGER.
+ */
+static unsigned char t_neg_int[] = {
+ 0x30, 0x06, /* SEQUENCE tag + length */
+ 0x02, 0x01, 0xaa, /* INTEGER tag + length */
+ 0x02, 0x01, 0x2a /* INTEGER tag + length */
+};
+
+static unsigned char t_trunc_der[] = {
+ 0x30, 0x08, /* SEQUENCE tag + length */
+ 0x02, 0x02, 0x00, 0x81, /* INTEGER tag + length */
+ 0x02, 0x02, 0x00 /* INTEGER tag + length */
+};
+
+static unsigned char t_trunc_seq[] = {
+ 0x30, 0x07, /* SEQUENCE tag + length */
+ 0x02, 0x02, 0x00, 0x81, /* INTEGER tag + length */
+ 0x02, 0x02, 0x00, 0x82 /* INTEGER tag + length */
+};
+
+static int test_decode(void)
+{
+ int rv = 0;
+ BIGNUM *r;
+ BIGNUM *s;
+ const unsigned char *pder;
+
+ r = BN_new();
+ s = BN_new();
+
+ /* Positive tests */
+ pder = t_dsa_sig;
+ if (ossl_decode_der_dsa_sig(r, s, &pder, sizeof(t_dsa_sig)) == 0
+ || !TEST_ptr_eq(pder, (t_dsa_sig + sizeof(t_dsa_sig)))
+ || !TEST_BN_eq_word(r, 1) || !TEST_BN_eq_word(s, 2)) {
+ TEST_info("asn1_dsa test_decode: t_dsa_sig failed");
+ goto fail;
+ }
+
+ BN_clear(r);
+ BN_clear(s);
+ pder = t_dsa_sig_extra;
+ if (ossl_decode_der_dsa_sig(r, s, &pder, sizeof(t_dsa_sig_extra)) == 0
+ || !TEST_ptr_eq(pder,
+ (t_dsa_sig_extra + sizeof(t_dsa_sig_extra) - 2))
+ || !TEST_BN_eq_word(r, 1) || !TEST_BN_eq_word(s, 2)) {
+ TEST_info("asn1_dsa test_decode: t_dsa_sig_extra failed");
+ goto fail;
+ }
+
+ BN_clear(r);
+ BN_clear(s);
+ pder = t_dsa_sig_msb;
+ if (ossl_decode_der_dsa_sig(r, s, &pder, sizeof(t_dsa_sig_msb)) == 0
+ || !TEST_ptr_eq(pder, (t_dsa_sig_msb + sizeof(t_dsa_sig_msb)))
+ || !TEST_BN_eq_word(r, 0x81) || !TEST_BN_eq_word(s, 0x82)) {
+ TEST_info("asn1_dsa test_decode: t_dsa_sig_msb failed");
+ goto fail;
+ }
+
+ BN_clear(r);
+ BN_clear(s);
+ pder = t_dsa_sig_two;
+ if (ossl_decode_der_dsa_sig(r, s, &pder, sizeof(t_dsa_sig_two)) == 0
+ || !TEST_ptr_eq(pder, (t_dsa_sig_two + sizeof(t_dsa_sig_two)))
+ || !TEST_BN_eq_word(r, 0x100) || !TEST_BN_eq_word(s, 0x200)) {
+ TEST_info("asn1_dsa test_decode: t_dsa_sig_two failed");
+ goto fail;
+ }
+
+ /* Negative tests */
+ pder = t_invalid_int_zero;
+ if (ossl_decode_der_dsa_sig(r, s, &pder, sizeof(t_invalid_int_zero)) != 0) {
+ TEST_info("asn1_dsa test_decode: Expected t_invalid_int_zero to fail");
+ goto fail;
+ }
+
+ BN_clear(r);
+ BN_clear(s);
+ pder = t_invalid_int;
+ if (ossl_decode_der_dsa_sig(r, s, &pder, sizeof(t_invalid_int)) != 0) {
+ TEST_info("asn1_dsa test_decode: Expected t_invalid_int to fail");
+ goto fail;
+ }
+
+ BN_clear(r);
+ BN_clear(s);
+ pder = t_neg_int;
+ if (ossl_decode_der_dsa_sig(r, s, &pder, sizeof(t_neg_int)) != 0) {
+ TEST_info("asn1_dsa test_decode: Expected t_neg_int to fail");
+ goto fail;
+ }
+
+ BN_clear(r);
+ BN_clear(s);
+ pder = t_trunc_der;
+ if (ossl_decode_der_dsa_sig(r, s, &pder, sizeof(t_trunc_der)) != 0) {
+ TEST_info("asn1_dsa test_decode: Expected fail t_trunc_der");
+ goto fail;
+ }
+
+ BN_clear(r);
+ BN_clear(s);
+ pder = t_trunc_seq;
+ if (ossl_decode_der_dsa_sig(r, s, &pder, sizeof(t_trunc_seq)) != 0) {
+ TEST_info("asn1_dsa test_decode: Expected fail t_trunc_seq");
+ goto fail;
+ }
+
+ rv = 1;
+fail:
+ BN_free(r);
+ BN_free(s);
+ return rv;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_decode);
+ return 1;
+}
diff --git a/test/asn1_encode_test.c b/test/asn1_encode_test.c
new file mode 100644
index 000000000000..335f24e1133f
--- /dev/null
+++ b/test/asn1_encode_test.c
@@ -0,0 +1,908 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/rand.h>
+#include <openssl/asn1t.h>
+#include "internal/numbers.h"
+#include "testutil.h"
+
+#ifdef __GNUC__
+# pragma GCC diagnostic ignored "-Wunused-function"
+# pragma GCC diagnostic ignored "-Wformat"
+#endif
+#ifdef __clang__
+# pragma clang diagnostic ignored "-Wunused-function"
+# pragma clang diagnostic ignored "-Wformat"
+#endif
+
+/***** Custom test data ******************************************************/
+
+/*
+ * We conduct tests with these arrays for every type we try out.
+ * You will find the expected results together with the test structures
+ * for each type, further down.
+ */
+
+static unsigned char t_zero[] = {
+ 0x00
+};
+static unsigned char t_one[] = {
+ 0x01
+};
+static unsigned char t_one_neg[] = {
+ 0xff
+};
+static unsigned char t_minus_256[] = {
+ 0xff, 0x00
+};
+static unsigned char t_longundef[] = {
+ 0x7f, 0xff, 0xff, 0xff
+};
+static unsigned char t_9bytes_1[] = {
+ 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static unsigned char t_8bytes_1[] = {
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static unsigned char t_8bytes_2[] = {
+ 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static unsigned char t_8bytes_3_pad[] = {
+ 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static unsigned char t_8bytes_4_neg[] = {
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static unsigned char t_8bytes_5_negpad[] = {
+ 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/* 32-bit long */
+static unsigned char t_5bytes_1[] = {
+ 0x01, 0xff, 0xff, 0xff, 0xff
+};
+static unsigned char t_4bytes_1[] = {
+ 0x00, 0x80, 0x00, 0x00, 0x00
+};
+/* We make the last byte 0xfe to avoid a clash with ASN1_LONG_UNDEF */
+static unsigned char t_4bytes_2[] = {
+ 0x7f, 0xff, 0xff, 0xfe
+};
+static unsigned char t_4bytes_3_pad[] = {
+ 0x00, 0x7f, 0xff, 0xff, 0xfe
+};
+static unsigned char t_4bytes_4_neg[] = {
+ 0x80, 0x00, 0x00, 0x00
+};
+static unsigned char t_4bytes_5_negpad[] = {
+ 0xff, 0x80, 0x00, 0x00, 0x00
+};
+
+typedef struct {
+ unsigned char *bytes1;
+ size_t nbytes1;
+ unsigned char *bytes2;
+ size_t nbytes2;
+} TEST_CUSTOM_DATA;
+#define CUSTOM_DATA(v) \
+ { v, sizeof(v), t_one, sizeof(t_one) }, \
+ { t_one, sizeof(t_one), v, sizeof(v) }
+
+static TEST_CUSTOM_DATA test_custom_data[] = {
+ CUSTOM_DATA(t_zero),
+ CUSTOM_DATA(t_longundef),
+ CUSTOM_DATA(t_one),
+ CUSTOM_DATA(t_one_neg),
+ CUSTOM_DATA(t_minus_256),
+ CUSTOM_DATA(t_9bytes_1),
+ CUSTOM_DATA(t_8bytes_1),
+ CUSTOM_DATA(t_8bytes_2),
+ CUSTOM_DATA(t_8bytes_3_pad),
+ CUSTOM_DATA(t_8bytes_4_neg),
+ CUSTOM_DATA(t_8bytes_5_negpad),
+ CUSTOM_DATA(t_5bytes_1),
+ CUSTOM_DATA(t_4bytes_1),
+ CUSTOM_DATA(t_4bytes_2),
+ CUSTOM_DATA(t_4bytes_3_pad),
+ CUSTOM_DATA(t_4bytes_4_neg),
+ CUSTOM_DATA(t_4bytes_5_negpad),
+};
+
+
+/***** Type specific test data ***********************************************/
+
+/*
+ * First, a few utility things that all type specific data can use, or in some
+ * cases, MUST use.
+ */
+
+/*
+ * For easy creation of arrays of expected data. These macros correspond to
+ * the uses of CUSTOM_DATA above.
+ */
+#define CUSTOM_EXPECTED_SUCCESS(num, znum) \
+ { 0xff, num, 1 }, \
+ { 0xff, 1, znum }
+#define CUSTOM_EXPECTED_FAILURE \
+ { 0, 0, 0 }, \
+ { 0, 0, 0 }
+
+/*
+ * A structure to collect all test information in. There MUST be one instance
+ * of this for each test
+ */
+typedef int i2d_fn(void *a, unsigned char **pp);
+typedef void *d2i_fn(void **a, unsigned char **pp, long length);
+typedef void ifree_fn(void *a);
+typedef struct {
+ ASN1_ITEM_EXP *asn1_type;
+ const char *name;
+ int skip; /* 1 if this package should be skipped */
+
+ /* An array of structures to compare decoded custom data with */
+ void *encode_expectations;
+ size_t encode_expectations_size;
+ size_t encode_expectations_elem_size;
+
+ /*
+ * An array of structures that are encoded into a DER blob, which is
+ * then decoded, and result gets compared with the original.
+ */
+ void *encdec_data;
+ size_t encdec_data_size;
+ size_t encdec_data_elem_size;
+
+ /* The i2d function to use with this type */
+ i2d_fn *i2d;
+ /* The d2i function to use with this type */
+ d2i_fn *d2i;
+ /* Function to free a decoded structure */
+ ifree_fn *ifree;
+} TEST_PACKAGE;
+
+/* To facilitate the creation of an encdec_data array */
+#define ENCDEC_DATA(num, znum) \
+ { 0xff, num, 1 }, { 0xff, 1, znum }
+#define ENCDEC_ARRAY(max, zmax, min, zmin) \
+ ENCDEC_DATA(max,zmax), \
+ ENCDEC_DATA(min,zmin), \
+ ENCDEC_DATA(1, 1), \
+ ENCDEC_DATA(-1, -1), \
+ ENCDEC_DATA(0, ASN1_LONG_UNDEF)
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+/***** LONG ******************************************************************/
+
+typedef struct {
+ /* If decoding is expected to succeed, set this to 1, otherwise 0 */
+ ASN1_BOOLEAN success;
+ long test_long;
+ long test_zlong;
+} ASN1_LONG_DATA;
+
+ASN1_SEQUENCE(ASN1_LONG_DATA) = {
+ ASN1_SIMPLE(ASN1_LONG_DATA, success, ASN1_BOOLEAN),
+ ASN1_SIMPLE(ASN1_LONG_DATA, test_long, LONG),
+ ASN1_EXP_OPT(ASN1_LONG_DATA, test_zlong, ZLONG, 0)
+} static_ASN1_SEQUENCE_END(ASN1_LONG_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_LONG_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_LONG_DATA)
+
+static ASN1_LONG_DATA long_expected_32bit[] = {
+ /* The following should fail on the second because it's the default */
+ { 0xff, 0, 1 }, { 0, 0, 0 }, /* t_zero */
+ { 0, 0, 0 }, { 0xff, 1, 0x7fffffff }, /* t_longundef */
+ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */
+ CUSTOM_EXPECTED_SUCCESS(-1, -1), /* t_one_neg */
+ CUSTOM_EXPECTED_SUCCESS(-256, -256), /* t_minus_256 */
+ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_3_pad */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_5_negpad */
+ CUSTOM_EXPECTED_FAILURE, /* t_5bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_1 (too large positive) */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MAX - 1, INT32_MAX -1), /* t_4bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_3_pad (illegal padding) */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MIN, INT32_MIN), /* t_4bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_5_negpad (illegal padding) */
+};
+static ASN1_LONG_DATA long_encdec_data_32bit[] = {
+ ENCDEC_ARRAY(LONG_MAX - 1, LONG_MAX, LONG_MIN, LONG_MIN),
+ /* Check that default numbers fail */
+ { 0, ASN1_LONG_UNDEF, 1 }, { 0, 1, 0 }
+};
+
+static TEST_PACKAGE long_test_package_32bit = {
+ ASN1_ITEM_ref(ASN1_LONG_DATA), "LONG", sizeof(long) != 4,
+ long_expected_32bit,
+ sizeof(long_expected_32bit), sizeof(long_expected_32bit[0]),
+ long_encdec_data_32bit,
+ sizeof(long_encdec_data_32bit), sizeof(long_encdec_data_32bit[0]),
+ (i2d_fn *)i2d_ASN1_LONG_DATA, (d2i_fn *)d2i_ASN1_LONG_DATA,
+ (ifree_fn *)ASN1_LONG_DATA_free
+};
+
+static ASN1_LONG_DATA long_expected_64bit[] = {
+ /* The following should fail on the second because it's the default */
+ { 0xff, 0, 1 }, { 0, 0, 0 }, /* t_zero */
+ { 0, 0, 0 }, { 0xff, 1, 0x7fffffff }, /* t_longundef */
+ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */
+ CUSTOM_EXPECTED_SUCCESS(-1, -1), /* t_one_neg */
+ CUSTOM_EXPECTED_SUCCESS(-256, -256), /* t_minus_256 */
+ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS(LONG_MAX, LONG_MAX), /* t_8bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_3_pad (illegal padding) */
+ CUSTOM_EXPECTED_SUCCESS(LONG_MIN, LONG_MIN), /* t_8bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_5_negpad (illegal padding) */
+ CUSTOM_EXPECTED_SUCCESS((long)0x1ffffffff, (long)0x1ffffffff), /* t_5bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS((long)0x80000000, (long)0x80000000), /* t_4bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MAX - 1, INT32_MAX -1), /* t_4bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_3_pad (illegal padding) */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MIN, INT32_MIN), /* t_4bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_5_negpad (illegal padding) */
+};
+static ASN1_LONG_DATA long_encdec_data_64bit[] = {
+ ENCDEC_ARRAY(LONG_MAX, LONG_MAX, LONG_MIN, LONG_MIN),
+ /* Check that default numbers fail */
+ { 0, ASN1_LONG_UNDEF, 1 }, { 0, 1, 0 }
+};
+
+static TEST_PACKAGE long_test_package_64bit = {
+ ASN1_ITEM_ref(ASN1_LONG_DATA), "LONG", sizeof(long) != 8,
+ long_expected_64bit,
+ sizeof(long_expected_64bit), sizeof(long_expected_64bit[0]),
+ long_encdec_data_64bit,
+ sizeof(long_encdec_data_64bit), sizeof(long_encdec_data_64bit[0]),
+ (i2d_fn *)i2d_ASN1_LONG_DATA, (d2i_fn *)d2i_ASN1_LONG_DATA,
+ (ifree_fn *)ASN1_LONG_DATA_free
+};
+#endif
+
+/***** INT32 *****************************************************************/
+
+typedef struct {
+ ASN1_BOOLEAN success;
+ int32_t test_int32;
+ int32_t test_zint32;
+} ASN1_INT32_DATA;
+
+ASN1_SEQUENCE(ASN1_INT32_DATA) = {
+ ASN1_SIMPLE(ASN1_INT32_DATA, success, ASN1_BOOLEAN),
+ ASN1_EMBED(ASN1_INT32_DATA, test_int32, INT32),
+ ASN1_EXP_OPT_EMBED(ASN1_INT32_DATA, test_zint32, ZINT32, 0)
+} static_ASN1_SEQUENCE_END(ASN1_INT32_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_INT32_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_INT32_DATA)
+
+static ASN1_INT32_DATA int32_expected[] = {
+ CUSTOM_EXPECTED_SUCCESS(0, 0), /* t_zero */
+ CUSTOM_EXPECTED_SUCCESS(ASN1_LONG_UNDEF, ASN1_LONG_UNDEF), /* t_zero */
+ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */
+ CUSTOM_EXPECTED_SUCCESS(-1, -1), /* t_one_neg */
+ CUSTOM_EXPECTED_SUCCESS(-256, -256), /* t_minus_256 */
+ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_3_pad */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_5_negpad */
+ CUSTOM_EXPECTED_FAILURE, /* t_5bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_1 (too large positive) */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MAX - 1, INT32_MAX -1), /* t_4bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_3_pad (illegal padding) */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MIN, INT32_MIN), /* t_4bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_5_negpad (illegal padding) */
+};
+static ASN1_INT32_DATA int32_encdec_data[] = {
+ ENCDEC_ARRAY(INT32_MAX, INT32_MAX, INT32_MIN, INT32_MIN),
+};
+
+static TEST_PACKAGE int32_test_package = {
+ ASN1_ITEM_ref(ASN1_INT32_DATA), "INT32", 0,
+ int32_expected, sizeof(int32_expected), sizeof(int32_expected[0]),
+ int32_encdec_data, sizeof(int32_encdec_data), sizeof(int32_encdec_data[0]),
+ (i2d_fn *)i2d_ASN1_INT32_DATA, (d2i_fn *)d2i_ASN1_INT32_DATA,
+ (ifree_fn *)ASN1_INT32_DATA_free
+};
+
+/***** UINT32 ****************************************************************/
+
+typedef struct {
+ ASN1_BOOLEAN success;
+ uint32_t test_uint32;
+ uint32_t test_zuint32;
+} ASN1_UINT32_DATA;
+
+ASN1_SEQUENCE(ASN1_UINT32_DATA) = {
+ ASN1_SIMPLE(ASN1_UINT32_DATA, success, ASN1_BOOLEAN),
+ ASN1_EMBED(ASN1_UINT32_DATA, test_uint32, UINT32),
+ ASN1_EXP_OPT_EMBED(ASN1_UINT32_DATA, test_zuint32, ZUINT32, 0)
+} static_ASN1_SEQUENCE_END(ASN1_UINT32_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_UINT32_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_UINT32_DATA)
+
+static ASN1_UINT32_DATA uint32_expected[] = {
+ CUSTOM_EXPECTED_SUCCESS(0, 0), /* t_zero */
+ CUSTOM_EXPECTED_SUCCESS(ASN1_LONG_UNDEF, ASN1_LONG_UNDEF), /* t_zero */
+ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */
+ CUSTOM_EXPECTED_FAILURE, /* t_one_neg (illegal negative value) */
+ CUSTOM_EXPECTED_FAILURE, /* t_minus_256 (illegal negative value) */
+ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_3_pad */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_5_negpad */
+ CUSTOM_EXPECTED_FAILURE, /* t_5bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS(0x80000000, 0x80000000), /* t_4bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MAX - 1, INT32_MAX -1), /* t_4bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_3_pad (illegal padding) */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_4_neg (illegal negative value) */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_5_negpad (illegal padding) */
+};
+static ASN1_UINT32_DATA uint32_encdec_data[] = {
+ ENCDEC_ARRAY(UINT32_MAX, UINT32_MAX, 0, 0),
+};
+
+static TEST_PACKAGE uint32_test_package = {
+ ASN1_ITEM_ref(ASN1_UINT32_DATA), "UINT32", 0,
+ uint32_expected, sizeof(uint32_expected), sizeof(uint32_expected[0]),
+ uint32_encdec_data, sizeof(uint32_encdec_data), sizeof(uint32_encdec_data[0]),
+ (i2d_fn *)i2d_ASN1_UINT32_DATA, (d2i_fn *)d2i_ASN1_UINT32_DATA,
+ (ifree_fn *)ASN1_UINT32_DATA_free
+};
+
+/***** INT64 *****************************************************************/
+
+typedef struct {
+ ASN1_BOOLEAN success;
+ int64_t test_int64;
+ int64_t test_zint64;
+} ASN1_INT64_DATA;
+
+ASN1_SEQUENCE(ASN1_INT64_DATA) = {
+ ASN1_SIMPLE(ASN1_INT64_DATA, success, ASN1_BOOLEAN),
+ ASN1_EMBED(ASN1_INT64_DATA, test_int64, INT64),
+ ASN1_EXP_OPT_EMBED(ASN1_INT64_DATA, test_zint64, ZINT64, 0)
+} static_ASN1_SEQUENCE_END(ASN1_INT64_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_INT64_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_INT64_DATA)
+
+static ASN1_INT64_DATA int64_expected[] = {
+ CUSTOM_EXPECTED_SUCCESS(0, 0), /* t_zero */
+ CUSTOM_EXPECTED_SUCCESS(ASN1_LONG_UNDEF, ASN1_LONG_UNDEF), /* t_zero */
+ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */
+ CUSTOM_EXPECTED_SUCCESS(-1, -1), /* t_one_neg */
+ CUSTOM_EXPECTED_SUCCESS(-256, -256), /* t_minus_256 */
+ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 (too large positive) */
+ CUSTOM_EXPECTED_SUCCESS(INT64_MAX, INT64_MAX), /* t_8bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_3_pad (illegal padding) */
+ CUSTOM_EXPECTED_SUCCESS(INT64_MIN, INT64_MIN), /* t_8bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_5_negpad (illegal padding) */
+ CUSTOM_EXPECTED_SUCCESS(0x1ffffffffULL, 0x1ffffffffULL), /* t_5bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS(0x80000000, 0x80000000), /* t_4bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MAX - 1, INT32_MAX -1), /* t_4bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_3_pad (illegal padding) */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MIN, INT32_MIN), /* t_4bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_5_negpad (illegal padding) */
+};
+static ASN1_INT64_DATA int64_encdec_data[] = {
+ ENCDEC_ARRAY(INT64_MAX, INT64_MAX, INT64_MIN, INT64_MIN),
+ ENCDEC_ARRAY(INT32_MAX, INT32_MAX, INT32_MIN, INT32_MIN),
+};
+
+static TEST_PACKAGE int64_test_package = {
+ ASN1_ITEM_ref(ASN1_INT64_DATA), "INT64", 0,
+ int64_expected, sizeof(int64_expected), sizeof(int64_expected[0]),
+ int64_encdec_data, sizeof(int64_encdec_data), sizeof(int64_encdec_data[0]),
+ (i2d_fn *)i2d_ASN1_INT64_DATA, (d2i_fn *)d2i_ASN1_INT64_DATA,
+ (ifree_fn *)ASN1_INT64_DATA_free
+};
+
+/***** UINT64 ****************************************************************/
+
+typedef struct {
+ ASN1_BOOLEAN success;
+ uint64_t test_uint64;
+ uint64_t test_zuint64;
+} ASN1_UINT64_DATA;
+
+ASN1_SEQUENCE(ASN1_UINT64_DATA) = {
+ ASN1_SIMPLE(ASN1_UINT64_DATA, success, ASN1_BOOLEAN),
+ ASN1_EMBED(ASN1_UINT64_DATA, test_uint64, UINT64),
+ ASN1_EXP_OPT_EMBED(ASN1_UINT64_DATA, test_zuint64, ZUINT64, 0)
+} static_ASN1_SEQUENCE_END(ASN1_UINT64_DATA)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(ASN1_UINT64_DATA)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(ASN1_UINT64_DATA)
+
+static ASN1_UINT64_DATA uint64_expected[] = {
+ CUSTOM_EXPECTED_SUCCESS(0, 0), /* t_zero */
+ CUSTOM_EXPECTED_SUCCESS(ASN1_LONG_UNDEF, ASN1_LONG_UNDEF), /* t_zero */
+ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */
+ CUSTOM_EXPECTED_FAILURE, /* t_one_neg (illegal negative value) */
+ CUSTOM_EXPECTED_FAILURE, /* t_minus_256 (illegal negative value) */
+ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS((uint64_t)INT64_MAX+1, (uint64_t)INT64_MAX+1),
+ /* t_8bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS(INT64_MAX, INT64_MAX), /* t_8bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_3_pad */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_4_neg */
+ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_5_negpad */
+ CUSTOM_EXPECTED_SUCCESS(0x1ffffffffULL, 0x1ffffffffULL), /* t_5bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS(0x80000000, 0x80000000), /* t_4bytes_1 */
+ CUSTOM_EXPECTED_SUCCESS(INT32_MAX - 1, INT32_MAX -1), /* t_4bytes_2 */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_3_pad (illegal padding) */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_4_neg (illegal negative value) */
+ CUSTOM_EXPECTED_FAILURE, /* t_4bytes_5_negpad (illegal padding) */
+};
+static ASN1_UINT64_DATA uint64_encdec_data[] = {
+ ENCDEC_ARRAY(UINT64_MAX, UINT64_MAX, 0, 0),
+};
+
+static TEST_PACKAGE uint64_test_package = {
+ ASN1_ITEM_ref(ASN1_UINT64_DATA), "UINT64", 0,
+ uint64_expected, sizeof(uint64_expected), sizeof(uint64_expected[0]),
+ uint64_encdec_data, sizeof(uint64_encdec_data), sizeof(uint64_encdec_data[0]),
+ (i2d_fn *)i2d_ASN1_UINT64_DATA, (d2i_fn *)d2i_ASN1_UINT64_DATA,
+ (ifree_fn *)ASN1_UINT64_DATA_free
+};
+
+/***** General testing functions *********************************************/
+
+
+/* Template structure to map onto any test data structure */
+typedef struct {
+ ASN1_BOOLEAN success;
+ unsigned char bytes[1]; /* In reality, there's more */
+} EXPECTED;
+
+/*
+ * do_decode returns a tristate:
+ *
+ * -1 Couldn't decode
+ * 0 decoded structure wasn't what was expected (failure)
+ * 1 decoded structure was what was expected (success)
+ */
+static int do_decode(unsigned char *bytes, long nbytes,
+ const EXPECTED *expected, size_t expected_size,
+ const TEST_PACKAGE *package)
+{
+ EXPECTED *enctst = NULL;
+ const unsigned char *start;
+ int ret = 0;
+
+ start = bytes;
+ enctst = package->d2i(NULL, &bytes, nbytes);
+ if (enctst == NULL) {
+ if (expected->success == 0) {
+ ret = 1;
+ ERR_clear_error();
+ } else {
+ ret = -1;
+ }
+ } else {
+ if (start + nbytes == bytes
+ && memcmp(enctst, expected, expected_size) == 0)
+ ret = 1;
+ else
+ ret = 0;
+ }
+
+ package->ifree(enctst);
+ return ret;
+}
+
+/*
+ * do_encode returns a tristate:
+ *
+ * -1 Couldn't encode
+ * 0 encoded DER wasn't what was expected (failure)
+ * 1 encoded DER was what was expected (success)
+ */
+static int do_encode(EXPECTED *input,
+ const unsigned char *expected, size_t expected_len,
+ const TEST_PACKAGE *package)
+{
+ unsigned char *data = NULL;
+ int len;
+ int ret = 0;
+
+ len = package->i2d(input, &data);
+ if (len < 0)
+ return -1;
+
+ if ((size_t)len != expected_len
+ || memcmp(data, expected, expected_len) != 0) {
+ if (input->success == 0) {
+ ret = 1;
+ ERR_clear_error();
+ } else {
+ ret = 0;
+ }
+ } else {
+ ret = 1;
+ }
+
+ OPENSSL_free(data);
+ return ret;
+}
+
+/* Do an encode/decode round trip */
+static int do_enc_dec(EXPECTED *bytes, long nbytes,
+ const TEST_PACKAGE *package)
+{
+ unsigned char *data = NULL;
+ int len;
+ int ret = 0;
+ void *p = bytes;
+
+ len = package->i2d(p, &data);
+ if (len < 0)
+ return -1;
+
+ ret = do_decode(data, len, bytes, nbytes, package);
+ OPENSSL_free(data);
+ return ret;
+}
+
+static size_t der_encode_length(size_t len, unsigned char **pp)
+{
+ size_t lenbytes;
+
+ OPENSSL_assert(len < 0x8000);
+ if (len > 255)
+ lenbytes = 3;
+ else if (len > 127)
+ lenbytes = 2;
+ else
+ lenbytes = 1;
+
+ if (pp != NULL) {
+ if (lenbytes == 1) {
+ *(*pp)++ = (unsigned char)len;
+ } else {
+ *(*pp)++ = (unsigned char)(lenbytes - 1);
+ if (lenbytes == 2) {
+ *(*pp)++ = (unsigned char)(0x80 | len);
+ } else {
+ *(*pp)++ = (unsigned char)(0x80 | (len >> 8));
+ *(*pp)++ = (unsigned char)(len);
+ }
+ }
+ }
+ return lenbytes;
+}
+
+static size_t make_custom_der(const TEST_CUSTOM_DATA *custom_data,
+ unsigned char **encoding, int explicit_default)
+{
+ size_t firstbytes, secondbytes = 0, secondbytesinner = 0, seqbytes;
+ const unsigned char t_true[] = { V_ASN1_BOOLEAN, 0x01, 0xff };
+ unsigned char *p = NULL;
+ size_t i;
+
+ /*
+ * The first item is just an INTEGER tag, INTEGER length and INTEGER content
+ */
+ firstbytes =
+ 1 + der_encode_length(custom_data->nbytes1, NULL)
+ + custom_data->nbytes1;
+
+ for (i = custom_data->nbytes2; i > 0; i--) {
+ if (custom_data->bytes2[i - 1] != '\0')
+ break;
+ }
+ if (explicit_default || i > 0) {
+ /*
+ * The second item is an explicit tag, content length, INTEGER tag,
+ * INTEGER length, INTEGER bytes
+ */
+ secondbytesinner =
+ 1 + der_encode_length(custom_data->nbytes2, NULL)
+ + custom_data->nbytes2;
+ secondbytes =
+ 1 + der_encode_length(secondbytesinner, NULL) + secondbytesinner;
+ }
+
+ /*
+ * The whole sequence is the sequence tag, content length, BOOLEAN true
+ * (copied from t_true), the first (firstbytes) and second (secondbytes)
+ * items
+ */
+ seqbytes =
+ 1 + der_encode_length(sizeof(t_true) + firstbytes + secondbytes, NULL)
+ + sizeof(t_true) + firstbytes + secondbytes;
+
+ *encoding = p = OPENSSL_malloc(seqbytes);
+ if (*encoding == NULL)
+ return 0;
+
+ /* Sequence tag */
+ *p++ = 0x30;
+ der_encode_length(sizeof(t_true) + firstbytes + secondbytes, &p);
+
+ /* ASN1_BOOLEAN TRUE */
+ memcpy(p, t_true, sizeof(t_true)); /* Marks decoding success */
+ p += sizeof(t_true);
+
+ /* First INTEGER item (non-optional) */
+ *p++ = V_ASN1_INTEGER;
+ der_encode_length(custom_data->nbytes1, &p);
+ memcpy(p, custom_data->bytes1, custom_data->nbytes1);
+ p += custom_data->nbytes1;
+
+ if (secondbytes > 0) {
+ /* Second INTEGER item (optional) */
+ /* Start with the explicit optional tag */
+ *p++ = 0xa0;
+ der_encode_length(secondbytesinner, &p);
+ *p++ = V_ASN1_INTEGER;
+ der_encode_length(custom_data->nbytes2, &p);
+ memcpy(p, custom_data->bytes2, custom_data->nbytes2);
+ p += custom_data->nbytes2;
+ }
+
+ OPENSSL_assert(seqbytes == (size_t)(p - *encoding));
+
+ return seqbytes;
+}
+
+/* Attempt to decode a custom encoding of the test structure */
+static int do_decode_custom(const TEST_CUSTOM_DATA *custom_data,
+ const EXPECTED *expected, size_t expected_size,
+ const TEST_PACKAGE *package)
+{
+ unsigned char *encoding = NULL;
+ /*
+ * We force the defaults to be explicitly encoded to make sure we test
+ * for defaults that shouldn't be present (i.e. we check for failure)
+ */
+ size_t encoding_length = make_custom_der(custom_data, &encoding, 1);
+ int ret;
+
+ if (encoding_length == 0)
+ return -1;
+
+ ret = do_decode(encoding, encoding_length, expected, expected_size,
+ package);
+ OPENSSL_free(encoding);
+
+ return ret;
+}
+
+/* Attempt to encode the test structure and compare it to custom DER */
+static int do_encode_custom(EXPECTED *input,
+ const TEST_CUSTOM_DATA *custom_data,
+ const TEST_PACKAGE *package)
+{
+ unsigned char *expected = NULL;
+ size_t expected_length = make_custom_der(custom_data, &expected, 0);
+ int ret;
+
+ if (expected_length == 0)
+ return -1;
+
+ ret = do_encode(input, expected, expected_length, package);
+ OPENSSL_free(expected);
+
+ return ret;
+}
+
+static int do_print_item(const TEST_PACKAGE *package)
+{
+#define DATA_BUF_SIZE 256
+ const ASN1_ITEM *i = ASN1_ITEM_ptr(package->asn1_type);
+ ASN1_VALUE *o;
+ int ret;
+
+ OPENSSL_assert(package->encode_expectations_elem_size <= DATA_BUF_SIZE);
+ if ((o = OPENSSL_malloc(DATA_BUF_SIZE)) == NULL)
+ return 0;
+
+ (void)RAND_bytes((unsigned char*)o,
+ (int)package->encode_expectations_elem_size);
+ ret = ASN1_item_print(bio_err, o, 0, i, NULL);
+ OPENSSL_free(o);
+
+ return ret;
+}
+
+
+static int test_intern(const TEST_PACKAGE *package)
+{
+ unsigned int i;
+ size_t nelems;
+ int fail = 0;
+
+ if (package->skip)
+ return 1;
+
+ /* Do decode_custom checks */
+ nelems = package->encode_expectations_size
+ / package->encode_expectations_elem_size;
+ OPENSSL_assert(nelems ==
+ sizeof(test_custom_data) / sizeof(test_custom_data[0]));
+ for (i = 0; i < nelems; i++) {
+ size_t pos = i * package->encode_expectations_elem_size;
+ EXPECTED *expected
+ = (EXPECTED *)&((unsigned char *)package->encode_expectations)[pos];
+
+ switch (do_encode_custom(expected, &test_custom_data[i], package)) {
+ case -1:
+ if (expected->success) {
+ TEST_error("Failed custom encode round trip %u of %s",
+ i, package->name);
+ TEST_openssl_errors();
+ fail++;
+ }
+ break;
+ case 0:
+ TEST_error("Custom encode round trip %u of %s mismatch",
+ i, package->name);
+ TEST_openssl_errors();
+ fail++;
+ break;
+ case 1:
+ break;
+ default:
+ OPENSSL_die("do_encode_custom() return unknown value",
+ __FILE__, __LINE__);
+ }
+ switch (do_decode_custom(&test_custom_data[i], expected,
+ package->encode_expectations_elem_size,
+ package)) {
+ case -1:
+ if (expected->success) {
+ TEST_error("Failed custom decode round trip %u of %s",
+ i, package->name);
+ TEST_openssl_errors();
+ fail++;
+ }
+ break;
+ case 0:
+ TEST_error("Custom decode round trip %u of %s mismatch",
+ i, package->name);
+ TEST_openssl_errors();
+ fail++;
+ break;
+ case 1:
+ break;
+ default:
+ OPENSSL_die("do_decode_custom() return unknown value",
+ __FILE__, __LINE__);
+ }
+ }
+
+ /* Do enc_dec checks */
+ nelems = package->encdec_data_size / package->encdec_data_elem_size;
+ for (i = 0; i < nelems; i++) {
+ size_t pos = i * package->encdec_data_elem_size;
+ EXPECTED *expected
+ = (EXPECTED *)&((unsigned char *)package->encdec_data)[pos];
+
+ switch (do_enc_dec(expected, package->encdec_data_elem_size, package)) {
+ case -1:
+ if (expected->success) {
+ TEST_error("Failed encode/decode round trip %u of %s",
+ i, package->name);
+ TEST_openssl_errors();
+ fail++;
+ }
+ break;
+ case 0:
+ TEST_error("Encode/decode round trip %u of %s mismatch",
+ i, package->name);
+ fail++;
+ break;
+ case 1:
+ break;
+ default:
+ OPENSSL_die("do_enc_dec() return unknown value",
+ __FILE__, __LINE__);
+ }
+ }
+
+ if (!do_print_item(package)) {
+ TEST_error("Printing of %s failed", package->name);
+ TEST_openssl_errors();
+ fail++;
+ }
+
+ return fail == 0;
+}
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+static int test_long_32bit(void)
+{
+ return test_intern(&long_test_package_32bit);
+}
+
+static int test_long_64bit(void)
+{
+ return test_intern(&long_test_package_64bit);
+}
+#endif
+
+static int test_int32(void)
+{
+ return test_intern(&int32_test_package);
+}
+
+static int test_uint32(void)
+{
+ return test_intern(&uint32_test_package);
+}
+
+static int test_int64(void)
+{
+ return test_intern(&int64_test_package);
+}
+
+static int test_uint64(void)
+{
+ return test_intern(&uint64_test_package);
+}
+
+typedef struct {
+ ASN1_STRING *invalidDirString;
+} INVALIDTEMPLATE;
+
+ASN1_SEQUENCE(INVALIDTEMPLATE) = {
+ /*
+ * DirectoryString is a CHOICE type so it must use explicit tagging -
+ * but we deliberately use implicit here, which makes this template invalid.
+ */
+ ASN1_IMP(INVALIDTEMPLATE, invalidDirString, DIRECTORYSTRING, 12)
+} static_ASN1_SEQUENCE_END(INVALIDTEMPLATE)
+
+IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(INVALIDTEMPLATE)
+IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(INVALIDTEMPLATE)
+
+static int test_invalid_template(void)
+{
+ INVALIDTEMPLATE *temp = INVALIDTEMPLATE_new();
+ int ret;
+
+ if (!TEST_ptr(temp))
+ return 0;
+
+ ret = i2d_INVALIDTEMPLATE(temp, NULL);
+
+ INVALIDTEMPLATE_free(temp);
+
+ /* We expect the i2d operation to fail */
+ return ret < 0;
+}
+
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ADD_TEST(test_long_32bit);
+ ADD_TEST(test_long_64bit);
+#endif
+ ADD_TEST(test_int32);
+ ADD_TEST(test_uint32);
+ ADD_TEST(test_int64);
+ ADD_TEST(test_uint64);
+ ADD_TEST(test_invalid_template);
+ return 1;
+}
diff --git a/test/asn1_internal_test.c b/test/asn1_internal_test.c
new file mode 100644
index 000000000000..61e4265c8b71
--- /dev/null
+++ b/test/asn1_internal_test.c
@@ -0,0 +1,200 @@
+/*
+ * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Internal tests for the asn1 module */
+
+/*
+ * RSA low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/asn1.h>
+#include <openssl/evp.h>
+#include <openssl/objects.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+
+/**********************************************************************
+ *
+ * Test of a_strnid's tbl_standard
+ *
+ ***/
+
+#include "../crypto/asn1/tbl_standard.h"
+
+static int test_tbl_standard(void)
+{
+ const ASN1_STRING_TABLE *tmp;
+ int last_nid = -1;
+ size_t i;
+
+ for (tmp = tbl_standard, i = 0; i < OSSL_NELEM(tbl_standard); i++, tmp++) {
+ if (tmp->nid < last_nid) {
+ last_nid = 0;
+ break;
+ }
+ last_nid = tmp->nid;
+ }
+
+ if (TEST_int_ne(last_nid, 0)) {
+ TEST_info("asn1 tbl_standard: Table order OK");
+ return 1;
+ }
+
+ TEST_info("asn1 tbl_standard: out of order");
+ for (tmp = tbl_standard, i = 0; i < OSSL_NELEM(tbl_standard); i++, tmp++)
+ TEST_note("asn1 tbl_standard: Index %zu, NID %d, Name=%s",
+ i, tmp->nid, OBJ_nid2ln(tmp->nid));
+
+ return 0;
+}
+
+/**********************************************************************
+ *
+ * Test of ameth_lib's standard_methods
+ *
+ ***/
+
+#include "crypto/asn1.h"
+#include "../crypto/asn1/standard_methods.h"
+
+static int test_standard_methods(void)
+{
+ const EVP_PKEY_ASN1_METHOD **tmp;
+ int last_pkey_id = -1;
+ size_t i;
+ int ok = 1;
+
+ for (tmp = standard_methods, i = 0; i < OSSL_NELEM(standard_methods);
+ i++, tmp++) {
+ if ((*tmp)->pkey_id < last_pkey_id) {
+ last_pkey_id = 0;
+ break;
+ }
+ last_pkey_id = (*tmp)->pkey_id;
+
+ /*
+ * One of the following must be true:
+ *
+ * pem_str == NULL AND ASN1_PKEY_ALIAS is set
+ * pem_str != NULL AND ASN1_PKEY_ALIAS is clear
+ *
+ * Anything else is an error and may lead to a corrupt ASN1 method table
+ */
+ if (!TEST_true(((*tmp)->pem_str == NULL && ((*tmp)->pkey_flags & ASN1_PKEY_ALIAS) != 0)
+ || ((*tmp)->pem_str != NULL && ((*tmp)->pkey_flags & ASN1_PKEY_ALIAS) == 0))) {
+ TEST_note("asn1 standard methods: Index %zu, pkey ID %d, Name=%s",
+ i, (*tmp)->pkey_id, OBJ_nid2sn((*tmp)->pkey_id));
+ ok = 0;
+ }
+ }
+
+ if (TEST_int_ne(last_pkey_id, 0)) {
+ TEST_info("asn1 standard methods: Table order OK");
+ return ok;
+ }
+
+ TEST_note("asn1 standard methods: out of order");
+ for (tmp = standard_methods, i = 0; i < OSSL_NELEM(standard_methods);
+ i++, tmp++)
+ TEST_note("asn1 standard methods: Index %zu, pkey ID %d, Name=%s",
+ i, (*tmp)->pkey_id, OBJ_nid2sn((*tmp)->pkey_id));
+
+ return 0;
+}
+
+/**********************************************************************
+ *
+ * Test of that i2d fail on non-existing non-optional items
+ *
+ ***/
+
+#include <openssl/rsa.h>
+
+static int test_empty_nonoptional_content(void)
+{
+ RSA *rsa = NULL;
+ BIGNUM *n = NULL;
+ BIGNUM *e = NULL;
+ int ok = 0;
+
+ if (!TEST_ptr(rsa = RSA_new())
+ || !TEST_ptr(n = BN_new())
+ || !TEST_ptr(e = BN_new())
+ || !TEST_true(RSA_set0_key(rsa, n, e, NULL)))
+ goto end;
+
+ n = e = NULL; /* They are now "owned" by |rsa| */
+
+ /*
+ * This SHOULD fail, as we're trying to encode a public key as a private
+ * key. The private key bits MUST be present for a proper RSAPrivateKey.
+ */
+ if (TEST_int_le(i2d_RSAPrivateKey(rsa, NULL), 0))
+ ok = 1;
+
+ end:
+ RSA_free(rsa);
+ BN_free(n);
+ BN_free(e);
+ return ok;
+}
+
+/**********************************************************************
+ *
+ * Tests of the Unicode code point range
+ *
+ ***/
+
+static int test_unicode(const unsigned char *univ, size_t len, int expected)
+{
+ const unsigned char *end = univ + len;
+ int ok = 1;
+
+ for (; univ < end; univ += 4) {
+ if (!TEST_int_eq(ASN1_mbstring_copy(NULL, univ, 4, MBSTRING_UNIV,
+ B_ASN1_UTF8STRING),
+ expected))
+ ok = 0;
+ }
+ return ok;
+}
+
+static int test_unicode_range(void)
+{
+ const unsigned char univ_ok[] = "\0\0\0\0"
+ "\0\0\xd7\xff"
+ "\0\0\xe0\x00"
+ "\0\x10\xff\xff";
+ const unsigned char univ_bad[] = "\0\0\xd8\x00"
+ "\0\0\xdf\xff"
+ "\0\x11\x00\x00"
+ "\x80\x00\x00\x00"
+ "\xff\xff\xff\xff";
+ int ok = 1;
+
+ if (!test_unicode(univ_ok, sizeof univ_ok - 1, V_ASN1_UTF8STRING))
+ ok = 0;
+ if (!test_unicode(univ_bad, sizeof univ_bad - 1, -1))
+ ok = 0;
+ return ok;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_tbl_standard);
+ ADD_TEST(test_standard_methods);
+ ADD_TEST(test_empty_nonoptional_content);
+ ADD_TEST(test_unicode_range);
+ return 1;
+}
diff --git a/test/asn1_stable_parse_test.c b/test/asn1_stable_parse_test.c
new file mode 100644
index 000000000000..2cda581afc5a
--- /dev/null
+++ b/test/asn1_stable_parse_test.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2023-2024 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 "testutil.h"
+
+static char *config_file = NULL;
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_CONFIG_FILE,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "config", OPT_CONFIG_FILE, '<',
+ "The configuration file to use for the libctx" },
+ { NULL }
+ };
+ return options;
+}
+
+
+/*
+ * Test that parsing a config file with incorrect stable settings aren't parsed
+ * and appropriate errors are raised
+ */
+static int test_asn1_stable_parse(void)
+{
+ int testret = 0;
+ unsigned long errcode;
+ OSSL_LIB_CTX *newctx = OSSL_LIB_CTX_new();
+
+ if (!TEST_ptr(newctx))
+ goto out;
+
+ if (!TEST_int_eq(OSSL_LIB_CTX_load_config(newctx, config_file), 0))
+ goto err;
+
+ errcode = ERR_peek_error();
+ if (ERR_GET_LIB(errcode) != ERR_LIB_ASN1)
+ goto err;
+ if (ERR_GET_REASON(errcode) != ASN1_R_INVALID_STRING_TABLE_VALUE)
+ goto err;
+
+ ERR_clear_error();
+
+ testret = 1;
+err:
+ OSSL_LIB_CTX_free(newctx);
+out:
+ return testret;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_CONFIG_FILE:
+ config_file = opt_arg();
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ ADD_TEST(test_asn1_stable_parse);
+ return 1;
+}
diff --git a/test/asn1_string_table_test.c b/test/asn1_string_table_test.c
new file mode 100644
index 000000000000..5c3501b210c9
--- /dev/null
+++ b/test/asn1_string_table_test.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2017 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 for the ASN1_STRING_TABLE_* functions */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/asn1.h>
+#include "testutil.h"
+
+static int test_string_tbl(void)
+{
+ const ASN1_STRING_TABLE *tmp = NULL;
+ int nid = 12345678, nid2 = 87654321, rv = 0, ret = 0;
+
+ tmp = ASN1_STRING_TABLE_get(nid);
+ if (!TEST_ptr_null(tmp)) {
+ TEST_info("asn1 string table: ASN1_STRING_TABLE_get non-exist nid");
+ goto out;
+ }
+
+ ret = ASN1_STRING_TABLE_add(nid, -1, -1, MBSTRING_ASC, 0);
+ if (!TEST_true(ret)) {
+ TEST_info("asn1 string table: add NID(%d) failed", nid);
+ goto out;
+ }
+
+ ret = ASN1_STRING_TABLE_add(nid2, -1, -1, MBSTRING_ASC, 0);
+ if (!TEST_true(ret)) {
+ TEST_info("asn1 string table: add NID(%d) failed", nid2);
+ goto out;
+ }
+
+ tmp = ASN1_STRING_TABLE_get(nid);
+ if (!TEST_ptr(tmp)) {
+ TEST_info("asn1 string table: get NID(%d) failed", nid);
+ goto out;
+ }
+
+ tmp = ASN1_STRING_TABLE_get(nid2);
+ if (!TEST_ptr(tmp)) {
+ TEST_info("asn1 string table: get NID(%d) failed", nid2);
+ goto out;
+ }
+
+ ASN1_STRING_TABLE_cleanup();
+
+ /* check if all newly added NIDs are cleaned up */
+ tmp = ASN1_STRING_TABLE_get(nid);
+ if (!TEST_ptr_null(tmp)) {
+ TEST_info("asn1 string table: get NID(%d) failed", nid);
+ goto out;
+ }
+
+ tmp = ASN1_STRING_TABLE_get(nid2);
+ if (!TEST_ptr_null(tmp)) {
+ TEST_info("asn1 string table: get NID(%d) failed", nid2);
+ goto out;
+ }
+
+ rv = 1;
+ out:
+ return rv;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_string_tbl);
+ return 1;
+}
diff --git a/test/asn1_time_test.c b/test/asn1_time_test.c
new file mode 100644
index 000000000000..9dbad22a2deb
--- /dev/null
+++ b/test/asn1_time_test.c
@@ -0,0 +1,418 @@
+/*
+ * Copyright 1999-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
+ */
+
+/* Time tests for the asn1 module */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/asn1.h>
+#include <openssl/evp.h>
+#include <openssl/objects.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+
+struct testdata {
+ char *data; /* TIME string value */
+ int type; /* GENERALIZED OR UTC */
+ int expected_type; /* expected type after set/set_string_gmt */
+ int check_result; /* check result */
+ time_t t; /* expected time_t*/
+ int cmp_result; /* comparison to baseline result */
+ int convert_result; /* conversion result */
+};
+
+static struct testdata tbl_testdata_pos[] = {
+ { "0", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, }, /* Bad time */
+ { "ABCD", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "0ABCD", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "1-700101000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "`9700101000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "19700101000000Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 0, 0, 0, 0, },
+ { "A00101000000Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 0, 0, 0, 0, },
+ { "A9700101000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "1A700101000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "19A00101000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "197A0101000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "1970A101000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "19700A01000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "197001A1000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "1970010A000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "19700101A00000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "197001010A0000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "1970010100A000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "19700101000A00Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "197001010000A0Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "1970010100000AZ", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "700101000000X", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 0, 0, 0, 0, },
+ { "19700101000000X", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 0, 0, 0, 0, },
+ { "19700101000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 0, -1, 1, }, /* Epoch begins */
+ { "700101000000Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 0, -1, 1, }, /* ditto */
+ { "20380119031407Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 0x7FFFFFFF, 1, 1, }, /* Max 32bit time_t */
+ { "380119031407Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 0x7FFFFFFF, 1, 1, },
+ { "20371231235959Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 2145916799, 1, 1, }, /* Just before 2038 */
+ { "20371231235959Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 0, 0, 0, 1, }, /* Bad UTC time */
+ { "371231235959Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 2145916799, 1, 1, },
+ { "19701006121456Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 24063296, -1, 1, },
+ { "701006121456Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 24063296, -1, 1, },
+ { "19991231000000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, }, /* Match baseline */
+ { "199912310000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, }, /* In various flavors */
+ { "991231000000Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+ { "9912310000Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+ { "9912310000+0000", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+ { "199912310000+0000", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+ { "9912310000-0000", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+ { "199912310000-0000", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+ { "199912310100+0100", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+ { "199912302300-0100", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+ { "199912302300-A000", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 0, 946598400, 0, 1, },
+ { "199912302300-0A00", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 0, 946598400, 0, 1, },
+ { "9912310100+0100", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+ { "9912302300-0100", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 946598400, 0, 1, },
+};
+
+/* ASSUMES SIGNED TIME_T */
+static struct testdata tbl_testdata_neg[] = {
+ { "19011213204552Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, INT_MIN, -1, 0, },
+ { "691006121456Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, -7472704, -1, 1, },
+ { "19691006121456Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, -7472704, -1, 1, },
+};
+
+/* explicit casts to time_t short warnings on systems with 32-bit time_t */
+static struct testdata tbl_testdata_pos_64bit[] = {
+ { "20380119031408Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, (time_t)0x80000000, 1, 1, },
+ { "20380119031409Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, (time_t)0x80000001, 1, 1, },
+ { "380119031408Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, (time_t)0x80000000, 1, 1, },
+ { "20500101120000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, (time_t)0x967b1ec0, 1, 0, },
+};
+
+/* ASSUMES SIGNED TIME_T */
+static struct testdata tbl_testdata_neg_64bit[] = {
+ { "19011213204551Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, (time_t)-2147483649LL, -1, 0, },
+ { "19000101120000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, (time_t)-2208945600LL, -1, 0, },
+};
+
+/* A baseline time to compare to */
+static ASN1_TIME gtime = {
+ 15,
+ V_ASN1_GENERALIZEDTIME,
+ (unsigned char*)"19991231000000Z",
+ 0
+};
+static time_t gtime_t = 946598400;
+
+static int test_table(struct testdata *tbl, int idx)
+{
+ int error = 0;
+ ASN1_TIME atime;
+ ASN1_TIME *ptime;
+ struct testdata *td = &tbl[idx];
+ int day, sec;
+
+ atime.data = (unsigned char*)td->data;
+ atime.length = strlen((char*)atime.data);
+ atime.type = td->type;
+ atime.flags = 0;
+
+ if (!TEST_int_eq(ASN1_TIME_check(&atime), td->check_result)) {
+ TEST_info("ASN1_TIME_check(%s) unexpected result", atime.data);
+ error = 1;
+ }
+ if (td->check_result == 0)
+ return 1;
+
+ if (!TEST_int_eq(ASN1_TIME_cmp_time_t(&atime, td->t), 0)) {
+ TEST_info("ASN1_TIME_cmp_time_t(%s vs %ld) compare failed", atime.data, (long)td->t);
+ error = 1;
+ }
+
+ if (!TEST_true(ASN1_TIME_diff(&day, &sec, &atime, &atime))) {
+ TEST_info("ASN1_TIME_diff(%s) to self failed", atime.data);
+ error = 1;
+ }
+ if (!TEST_int_eq(day, 0) || !TEST_int_eq(sec, 0)) {
+ TEST_info("ASN1_TIME_diff(%s) to self not equal", atime.data);
+ error = 1;
+ }
+
+ if (!TEST_true(ASN1_TIME_diff(&day, &sec, &gtime, &atime))) {
+ TEST_info("ASN1_TIME_diff(%s) to baseline failed", atime.data);
+ error = 1;
+ } else if (!((td->cmp_result == 0 && TEST_true((day == 0 && sec == 0))) ||
+ (td->cmp_result == -1 && TEST_true((day < 0 || sec < 0))) ||
+ (td->cmp_result == 1 && TEST_true((day > 0 || sec > 0))))) {
+ TEST_info("ASN1_TIME_diff(%s) to baseline bad comparison", atime.data);
+ error = 1;
+ }
+
+ if (!TEST_int_eq(ASN1_TIME_cmp_time_t(&atime, gtime_t), td->cmp_result)) {
+ TEST_info("ASN1_TIME_cmp_time_t(%s) to baseline bad comparison", atime.data);
+ error = 1;
+ }
+
+ ptime = ASN1_TIME_set(NULL, td->t);
+ if (!TEST_ptr(ptime)) {
+ TEST_info("ASN1_TIME_set(%ld) failed", (long)td->t);
+ error = 1;
+ } else {
+ int local_error = 0;
+ if (!TEST_int_eq(ASN1_TIME_cmp_time_t(ptime, td->t), 0)) {
+ TEST_info("ASN1_TIME_set(%ld) compare failed (%s->%s)",
+ (long)td->t, td->data, ptime->data);
+ local_error = error = 1;
+ }
+ if (!TEST_int_eq(ptime->type, td->expected_type)) {
+ TEST_info("ASN1_TIME_set(%ld) unexpected type", (long)td->t);
+ local_error = error = 1;
+ }
+ if (local_error)
+ TEST_info("ASN1_TIME_set() = %*s", ptime->length, ptime->data);
+ ASN1_TIME_free(ptime);
+ }
+
+ ptime = ASN1_TIME_new();
+ if (!TEST_ptr(ptime)) {
+ TEST_info("ASN1_TIME_new() failed");
+ error = 1;
+ } else {
+ int local_error = 0;
+ if (!TEST_int_eq(ASN1_TIME_set_string(ptime, td->data), td->check_result)) {
+ TEST_info("ASN1_TIME_set_string_gmt(%s) failed", td->data);
+ local_error = error = 1;
+ }
+ if (!TEST_int_eq(ASN1_TIME_normalize(ptime), td->check_result)) {
+ TEST_info("ASN1_TIME_normalize(%s) failed", td->data);
+ local_error = error = 1;
+ }
+ if (!TEST_int_eq(ptime->type, td->expected_type)) {
+ TEST_info("ASN1_TIME_set_string_gmt(%s) unexpected type", td->data);
+ local_error = error = 1;
+ }
+ day = sec = 0;
+ if (!TEST_true(ASN1_TIME_diff(&day, &sec, ptime, &atime)) || !TEST_int_eq(day, 0) || !TEST_int_eq(sec, 0)) {
+ TEST_info("ASN1_TIME_diff(day=%d, sec=%d, %s) after ASN1_TIME_set_string_gmt() failed", day, sec, td->data);
+ local_error = error = 1;
+ }
+ if (!TEST_int_eq(ASN1_TIME_cmp_time_t(ptime, gtime_t), td->cmp_result)) {
+ TEST_info("ASN1_TIME_cmp_time_t(%s) after ASN1_TIME_set_string_gnt() to baseline bad comparison", td->data);
+ local_error = error = 1;
+ }
+ if (local_error)
+ TEST_info("ASN1_TIME_set_string_gmt() = %*s", ptime->length, ptime->data);
+ ASN1_TIME_free(ptime);
+ }
+
+ ptime = ASN1_TIME_new();
+ if (!TEST_ptr(ptime)) {
+ TEST_info("ASN1_TIME_new() failed");
+ error = 1;
+ } else {
+ int local_error = 0;
+ if (!TEST_int_eq(ASN1_TIME_set_string(ptime, td->data), td->check_result)) {
+ TEST_info("ASN1_TIME_set_string(%s) failed", td->data);
+ local_error = error = 1;
+ }
+ day = sec = 0;
+ if (!TEST_true(ASN1_TIME_diff(&day, &sec, ptime, &atime)) || !TEST_int_eq(day, 0) || !TEST_int_eq(sec, 0)) {
+ TEST_info("ASN1_TIME_diff(day=%d, sec=%d, %s) after ASN1_TIME_set_string() failed", day, sec, td->data);
+ local_error = error = 1;
+ }
+ if (!TEST_int_eq(ASN1_TIME_cmp_time_t(ptime, gtime_t), td->cmp_result)) {
+ TEST_info("ASN1_TIME_cmp_time_t(%s) after ASN1_TIME_set_string() to baseline bad comparison", td->data);
+ local_error = error = 1;
+ }
+ if (local_error)
+ TEST_info("ASN1_TIME_set_string() = %*s", ptime->length, ptime->data);
+ ASN1_TIME_free(ptime);
+ }
+
+ if (td->type == V_ASN1_UTCTIME) {
+ ptime = ASN1_TIME_to_generalizedtime(&atime, NULL);
+ if (td->convert_result == 1 && !TEST_ptr(ptime)) {
+ TEST_info("ASN1_TIME_to_generalizedtime(%s) failed", atime.data);
+ error = 1;
+ } else if (td->convert_result == 0 && !TEST_ptr_null(ptime)) {
+ TEST_info("ASN1_TIME_to_generalizedtime(%s) should have failed", atime.data);
+ error = 1;
+ }
+ if (ptime != NULL && !TEST_int_eq(ASN1_TIME_cmp_time_t(ptime, td->t), 0)) {
+ TEST_info("ASN1_TIME_to_generalizedtime(%s->%s) bad result", atime.data, ptime->data);
+ error = 1;
+ }
+ ASN1_TIME_free(ptime);
+ }
+ /* else cannot simply convert GENERALIZEDTIME to UTCTIME */
+
+ if (error)
+ TEST_error("atime=%s", atime.data);
+
+ return !error;
+}
+
+static int test_table_pos(int idx)
+{
+ return test_table(tbl_testdata_pos, idx);
+}
+
+static int test_table_neg(int idx)
+{
+ return test_table(tbl_testdata_neg, idx);
+}
+
+static int test_table_pos_64bit(int idx)
+{
+ return test_table(tbl_testdata_pos_64bit, idx);
+}
+
+static int test_table_neg_64bit(int idx)
+{
+ return test_table(tbl_testdata_neg_64bit, idx);
+}
+
+struct compare_testdata {
+ ASN1_TIME t1;
+ ASN1_TIME t2;
+ int result;
+};
+
+static unsigned char TODAY_GEN_STR[] = "20170825000000Z";
+static unsigned char TOMORROW_GEN_STR[] = "20170826000000Z";
+static unsigned char TODAY_UTC_STR[] = "170825000000Z";
+static unsigned char TOMORROW_UTC_STR[] = "170826000000Z";
+
+#define TODAY_GEN { sizeof(TODAY_GEN_STR)-1, V_ASN1_GENERALIZEDTIME, TODAY_GEN_STR, 0 }
+#define TOMORROW_GEN { sizeof(TOMORROW_GEN_STR)-1, V_ASN1_GENERALIZEDTIME, TOMORROW_GEN_STR, 0 }
+#define TODAY_UTC { sizeof(TODAY_UTC_STR)-1, V_ASN1_UTCTIME, TODAY_UTC_STR, 0 }
+#define TOMORROW_UTC { sizeof(TOMORROW_UTC_STR)-1, V_ASN1_UTCTIME, TOMORROW_UTC_STR, 0 }
+
+static struct compare_testdata tbl_compare_testdata[] = {
+ { TODAY_GEN, TODAY_GEN, 0 },
+ { TODAY_GEN, TODAY_UTC, 0 },
+ { TODAY_GEN, TOMORROW_GEN, -1 },
+ { TODAY_GEN, TOMORROW_UTC, -1 },
+
+ { TODAY_UTC, TODAY_GEN, 0 },
+ { TODAY_UTC, TODAY_UTC, 0 },
+ { TODAY_UTC, TOMORROW_GEN, -1 },
+ { TODAY_UTC, TOMORROW_UTC, -1 },
+
+ { TOMORROW_GEN, TODAY_GEN, 1 },
+ { TOMORROW_GEN, TODAY_UTC, 1 },
+ { TOMORROW_GEN, TOMORROW_GEN, 0 },
+ { TOMORROW_GEN, TOMORROW_UTC, 0 },
+
+ { TOMORROW_UTC, TODAY_GEN, 1 },
+ { TOMORROW_UTC, TODAY_UTC, 1 },
+ { TOMORROW_UTC, TOMORROW_GEN, 0 },
+ { TOMORROW_UTC, TOMORROW_UTC, 0 }
+};
+
+static int test_table_compare(int idx)
+{
+ struct compare_testdata *td = &tbl_compare_testdata[idx];
+
+ return TEST_int_eq(ASN1_TIME_compare(&td->t1, &td->t2), td->result);
+}
+
+static int test_time_dup(void)
+{
+ int ret = 0;
+ ASN1_TIME *asn1_time = NULL;
+ ASN1_TIME *asn1_time_dup = NULL;
+ ASN1_TIME *asn1_gentime = NULL;
+
+ asn1_time = ASN1_TIME_adj(NULL, time(NULL), 0, 0);
+ if (asn1_time == NULL) {
+ TEST_info("Internal error.");
+ goto err;
+ }
+
+ asn1_gentime = ASN1_TIME_to_generalizedtime(asn1_time, NULL);
+ if (asn1_gentime == NULL) {
+ TEST_info("Internal error.");
+ goto err;
+ }
+
+ asn1_time_dup = ASN1_TIME_dup(asn1_time);
+ if (!TEST_ptr_ne(asn1_time_dup, NULL)) {
+ TEST_info("ASN1_TIME_dup() failed.");
+ goto err;
+ }
+ if (!TEST_int_eq(ASN1_TIME_compare(asn1_time, asn1_time_dup), 0)) {
+ TEST_info("ASN1_TIME_dup() duplicated non-identical value.");
+ goto err;
+ }
+ ASN1_STRING_free(asn1_time_dup);
+
+ asn1_time_dup = ASN1_UTCTIME_dup(asn1_time);
+ if (!TEST_ptr_ne(asn1_time_dup, NULL)) {
+ TEST_info("ASN1_UTCTIME_dup() failed.");
+ goto err;
+ }
+ if (!TEST_int_eq(ASN1_TIME_compare(asn1_time, asn1_time_dup), 0)) {
+ TEST_info("ASN1_UTCTIME_dup() duplicated non-identical UTCTIME value.");
+ goto err;
+ }
+ ASN1_STRING_free(asn1_time_dup);
+
+ asn1_time_dup = ASN1_GENERALIZEDTIME_dup(asn1_gentime);
+ if (!TEST_ptr_ne(asn1_time_dup, NULL)) {
+ TEST_info("ASN1_GENERALIZEDTIME_dup() failed.");
+ goto err;
+ }
+ if (!TEST_int_eq(ASN1_TIME_compare(asn1_gentime, asn1_time_dup), 0)) {
+ TEST_info("ASN1_GENERALIZEDTIME_dup() dup'ed non-identical value.");
+ goto err;
+ }
+
+ ret = 1;
+ err:
+ ASN1_STRING_free(asn1_time);
+ ASN1_STRING_free(asn1_gentime);
+ ASN1_STRING_free(asn1_time_dup);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ /*
+ * On platforms where |time_t| is an unsigned integer, t will be a
+ * positive number.
+ *
+ * We check if we're on a platform with a signed |time_t| with '!(t > 0)'
+ * because some compilers are picky if you do 't < 0', or even 't <= 0'
+ * if |t| is unsigned.
+ */
+ time_t t = -1;
+ /*
+ * On some platforms, |time_t| is signed, but a negative value is an
+ * error, and using it with gmtime() or localtime() generates a NULL.
+ * If that is the case, we can't perform tests on negative values.
+ */
+ struct tm *ptm = localtime(&t);
+
+ ADD_ALL_TESTS(test_table_pos, OSSL_NELEM(tbl_testdata_pos));
+ if (!(t > 0) && ptm != NULL) {
+ TEST_info("Adding negative-sign time_t tests");
+ ADD_ALL_TESTS(test_table_neg, OSSL_NELEM(tbl_testdata_neg));
+ }
+ if (sizeof(time_t) > sizeof(uint32_t)) {
+ TEST_info("Adding 64-bit time_t tests");
+ ADD_ALL_TESTS(test_table_pos_64bit, OSSL_NELEM(tbl_testdata_pos_64bit));
+#ifndef __hpux
+ if (!(t > 0) && ptm != NULL) {
+ TEST_info("Adding negative-sign 64-bit time_t tests");
+ ADD_ALL_TESTS(test_table_neg_64bit, OSSL_NELEM(tbl_testdata_neg_64bit));
+ }
+#endif
+ }
+ ADD_ALL_TESTS(test_table_compare, OSSL_NELEM(tbl_compare_testdata));
+ ADD_TEST(test_time_dup);
+ return 1;
+}
diff --git a/test/asynciotest.c b/test/asynciotest.c
new file mode 100644
index 000000000000..10c958f667fb
--- /dev/null
+++ b/test/asynciotest.c
@@ -0,0 +1,417 @@
+/*
+ * Copyright 2016-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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <string.h>
+#include <openssl/ssl.h>
+#include <openssl/bio.h>
+#include <openssl/err.h>
+
+#include "internal/packet.h"
+
+#include "helpers/ssltestlib.h"
+#include "testutil.h"
+
+/* Should we fragment records or not? 0 = no, !0 = yes*/
+static int fragment = 0;
+
+static char *cert = NULL;
+static char *privkey = NULL;
+
+static int async_new(BIO *bi);
+static int async_free(BIO *a);
+static int async_read(BIO *b, char *out, int outl);
+static int async_write(BIO *b, const char *in, int inl);
+static long async_ctrl(BIO *b, int cmd, long num, void *ptr);
+static int async_gets(BIO *bp, char *buf, int size);
+static int async_puts(BIO *bp, const char *str);
+
+/* Choose a sufficiently large type likely to be unused for this custom BIO */
+# define BIO_TYPE_ASYNC_FILTER (0x80 | BIO_TYPE_FILTER)
+
+static BIO_METHOD *methods_async = NULL;
+
+struct async_ctrs {
+ unsigned int rctr;
+ unsigned int wctr;
+};
+
+static const BIO_METHOD *bio_f_async_filter(void)
+{
+ if (methods_async == NULL) {
+ methods_async = BIO_meth_new(BIO_TYPE_ASYNC_FILTER, "Async filter");
+ if ( methods_async == NULL
+ || !BIO_meth_set_write(methods_async, async_write)
+ || !BIO_meth_set_read(methods_async, async_read)
+ || !BIO_meth_set_puts(methods_async, async_puts)
+ || !BIO_meth_set_gets(methods_async, async_gets)
+ || !BIO_meth_set_ctrl(methods_async, async_ctrl)
+ || !BIO_meth_set_create(methods_async, async_new)
+ || !BIO_meth_set_destroy(methods_async, async_free))
+ return NULL;
+ }
+ return methods_async;
+}
+
+static int async_new(BIO *bio)
+{
+ struct async_ctrs *ctrs;
+
+ ctrs = OPENSSL_zalloc(sizeof(struct async_ctrs));
+ if (ctrs == NULL)
+ return 0;
+
+ BIO_set_data(bio, ctrs);
+ BIO_set_init(bio, 1);
+ return 1;
+}
+
+static int async_free(BIO *bio)
+{
+ struct async_ctrs *ctrs;
+
+ if (bio == NULL)
+ return 0;
+ ctrs = BIO_get_data(bio);
+ OPENSSL_free(ctrs);
+ BIO_set_data(bio, NULL);
+ BIO_set_init(bio, 0);
+
+ return 1;
+}
+
+static int async_read(BIO *bio, char *out, int outl)
+{
+ struct async_ctrs *ctrs;
+ int ret = 0;
+ BIO *next = BIO_next(bio);
+
+ if (outl <= 0)
+ return 0;
+ if (next == NULL)
+ return 0;
+
+ ctrs = BIO_get_data(bio);
+
+ BIO_clear_retry_flags(bio);
+
+ if (ctrs->rctr > 0) {
+ ret = BIO_read(next, out, 1);
+ if (ret <= 0 && BIO_should_read(next))
+ BIO_set_retry_read(bio);
+ ctrs->rctr = 0;
+ } else {
+ ctrs->rctr++;
+ BIO_set_retry_read(bio);
+ }
+
+ return ret;
+}
+
+#define MIN_RECORD_LEN 6
+
+#define CONTENTTYPEPOS 0
+#define VERSIONHIPOS 1
+#define VERSIONLOPOS 2
+#define DATAPOS 5
+
+static int async_write(BIO *bio, const char *in, int inl)
+{
+ struct async_ctrs *ctrs;
+ int ret = 0;
+ size_t written = 0;
+ BIO *next = BIO_next(bio);
+
+ if (inl <= 0)
+ return 0;
+ if (next == NULL)
+ return 0;
+
+ ctrs = BIO_get_data(bio);
+
+ BIO_clear_retry_flags(bio);
+
+ if (ctrs->wctr > 0) {
+ ctrs->wctr = 0;
+ if (fragment) {
+ PACKET pkt;
+
+ if (!PACKET_buf_init(&pkt, (const unsigned char *)in, inl))
+ return -1;
+
+ while (PACKET_remaining(&pkt) > 0) {
+ PACKET payload, wholebody, sessionid, extensions;
+ unsigned int contenttype, versionhi, versionlo, data;
+ unsigned int msgtype = 0, negversion = 0;
+
+ if (!PACKET_get_1(&pkt, &contenttype)
+ || !PACKET_get_1(&pkt, &versionhi)
+ || !PACKET_get_1(&pkt, &versionlo)
+ || !PACKET_get_length_prefixed_2(&pkt, &payload))
+ return -1;
+
+ /* Pretend we wrote out the record header */
+ written += SSL3_RT_HEADER_LENGTH;
+
+ wholebody = payload;
+ if (contenttype == SSL3_RT_HANDSHAKE
+ && !PACKET_get_1(&wholebody, &msgtype))
+ return -1;
+
+ if (msgtype == SSL3_MT_SERVER_HELLO) {
+ if (!PACKET_forward(&wholebody,
+ SSL3_HM_HEADER_LENGTH - 1)
+ || !PACKET_get_net_2(&wholebody, &negversion)
+ /* Skip random (32 bytes) */
+ || !PACKET_forward(&wholebody, 32)
+ /* Skip session id */
+ || !PACKET_get_length_prefixed_1(&wholebody,
+ &sessionid)
+ /*
+ * Skip ciphersuite (2 bytes) and compression
+ * method (1 byte)
+ */
+ || !PACKET_forward(&wholebody, 2 + 1)
+ || !PACKET_get_length_prefixed_2(&wholebody,
+ &extensions))
+ return -1;
+
+ /*
+ * Find the negotiated version in supported_versions
+ * extension, if present.
+ */
+ while (PACKET_remaining(&extensions)) {
+ unsigned int type;
+ PACKET extbody;
+
+ if (!PACKET_get_net_2(&extensions, &type)
+ || !PACKET_get_length_prefixed_2(&extensions,
+ &extbody))
+ return -1;
+
+ if (type == TLSEXT_TYPE_supported_versions
+ && (!PACKET_get_net_2(&extbody, &negversion)
+ || PACKET_remaining(&extbody) != 0))
+ return -1;
+ }
+ }
+
+ while (PACKET_get_1(&payload, &data)) {
+ /* Create a new one byte long record for each byte in the
+ * record in the input buffer
+ */
+ char smallrec[MIN_RECORD_LEN] = {
+ 0, /* Content type */
+ 0, /* Version hi */
+ 0, /* Version lo */
+ 0, /* Length hi */
+ 1, /* Length lo */
+ 0 /* Data */
+ };
+
+ smallrec[CONTENTTYPEPOS] = contenttype;
+ smallrec[VERSIONHIPOS] = versionhi;
+ smallrec[VERSIONLOPOS] = versionlo;
+ smallrec[DATAPOS] = data;
+ ret = BIO_write(next, smallrec, MIN_RECORD_LEN);
+ if (ret <= 0)
+ return -1;
+ written++;
+ }
+ /*
+ * We can't fragment anything after the ServerHello (or CCS <=
+ * TLS1.2), otherwise we get a bad record MAC
+ */
+ if (contenttype == SSL3_RT_CHANGE_CIPHER_SPEC
+ || (negversion == TLS1_3_VERSION
+ && msgtype == SSL3_MT_SERVER_HELLO)) {
+ fragment = 0;
+ break;
+ }
+ }
+ }
+ /* Write any data we have left after fragmenting */
+ ret = 0;
+ if ((int)written < inl) {
+ ret = BIO_write(next, in + written, inl - written);
+ }
+
+ if (ret <= 0 && BIO_should_write(next))
+ BIO_set_retry_write(bio);
+ else
+ ret += written;
+ } else {
+ ctrs->wctr++;
+ BIO_set_retry_write(bio);
+ }
+
+ return ret;
+}
+
+static long async_ctrl(BIO *bio, int cmd, long num, void *ptr)
+{
+ long ret;
+ BIO *next = BIO_next(bio);
+
+ if (next == NULL)
+ return 0;
+
+ switch (cmd) {
+ case BIO_CTRL_DUP:
+ ret = 0L;
+ break;
+ default:
+ ret = BIO_ctrl(next, cmd, num, ptr);
+ break;
+ }
+ return ret;
+}
+
+static int async_gets(BIO *bio, char *buf, int size)
+{
+ /* We don't support this - not needed anyway */
+ return -1;
+}
+
+static int async_puts(BIO *bio, const char *str)
+{
+ return async_write(bio, str, strlen(str));
+}
+
+#define MAX_ATTEMPTS 100
+
+static int test_asyncio(int test)
+{
+ SSL_CTX *serverctx = NULL, *clientctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ BIO *s_to_c_fbio = NULL, *c_to_s_fbio = NULL;
+ int testresult = 0, ret;
+ size_t i, j;
+ const char testdata[] = "Test data";
+ char buf[sizeof(testdata)];
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, 0,
+ &serverctx, &clientctx, cert, privkey)))
+ goto end;
+
+ /*
+ * We do 2 test runs. The first time around we just do a normal handshake
+ * with lots of async io going on. The second time around we also break up
+ * all records so that the content is only one byte length (up until the
+ * CCS)
+ */
+ if (test == 1)
+ fragment = 1;
+
+
+ s_to_c_fbio = BIO_new(bio_f_async_filter());
+ c_to_s_fbio = BIO_new(bio_f_async_filter());
+ if (!TEST_ptr(s_to_c_fbio)
+ || !TEST_ptr(c_to_s_fbio)) {
+ BIO_free(s_to_c_fbio);
+ BIO_free(c_to_s_fbio);
+ goto end;
+ }
+
+ /* BIOs get freed on error */
+ if (!TEST_true(create_ssl_objects(serverctx, clientctx, &serverssl,
+ &clientssl, s_to_c_fbio, c_to_s_fbio))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ /*
+ * Send and receive some test data. Do the whole thing twice to ensure
+ * we hit at least one async event in both reading and writing
+ */
+ for (j = 0; j < 2; j++) {
+ int len;
+
+ /*
+ * Write some test data. It should never take more than 2 attempts
+ * (the first one might be a retryable fail).
+ */
+ for (ret = -1, i = 0, len = 0; len != sizeof(testdata) && i < 2;
+ i++) {
+ ret = SSL_write(clientssl, testdata + len,
+ sizeof(testdata) - len);
+ if (ret > 0) {
+ len += ret;
+ } else {
+ int ssl_error = SSL_get_error(clientssl, ret);
+
+ if (!TEST_false(ssl_error == SSL_ERROR_SYSCALL ||
+ ssl_error == SSL_ERROR_SSL))
+ goto end;
+ }
+ }
+ if (!TEST_size_t_eq(len, sizeof(testdata)))
+ goto end;
+
+ /*
+ * Now read the test data. It may take more attempts here because
+ * it could fail once for each byte read, including all overhead
+ * bytes from the record header/padding etc.
+ */
+ for (ret = -1, i = 0, len = 0; len != sizeof(testdata) &&
+ i < MAX_ATTEMPTS; i++) {
+ ret = SSL_read(serverssl, buf + len, sizeof(buf) - len);
+ if (ret > 0) {
+ len += ret;
+ } else {
+ int ssl_error = SSL_get_error(serverssl, ret);
+
+ if (!TEST_false(ssl_error == SSL_ERROR_SYSCALL ||
+ ssl_error == SSL_ERROR_SSL))
+ goto end;
+ }
+ }
+ if (!TEST_mem_eq(testdata, sizeof(testdata), buf, len))
+ goto end;
+ }
+
+ /* Also frees the BIOs */
+ SSL_free(clientssl);
+ SSL_free(serverssl);
+ clientssl = serverssl = NULL;
+
+ testresult = 1;
+
+ end:
+ SSL_free(clientssl);
+ SSL_free(serverssl);
+ SSL_CTX_free(clientctx);
+ SSL_CTX_free(serverctx);
+
+ return testresult;
+}
+
+OPT_TEST_DECLARE_USAGE("certname privkey\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(cert = test_get_argument(0))
+ || !TEST_ptr(privkey = test_get_argument(1)))
+ return 0;
+
+ ADD_ALL_TESTS(test_asyncio, 2);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ BIO_meth_free(methods_async);
+}
diff --git a/test/asynctest.c b/test/asynctest.c
new file mode 100644
index 000000000000..a83541ea5e98
--- /dev/null
+++ b/test/asynctest.c
@@ -0,0 +1,435 @@
+/*
+ * Copyright 2015-2022 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
+ */
+
+#ifdef _WIN32
+# include <windows.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <openssl/async.h>
+#include <openssl/crypto.h>
+
+static int ctr = 0;
+static ASYNC_JOB *currjob = NULL;
+
+static int only_pause(void *args)
+{
+ ASYNC_pause_job();
+
+ return 1;
+}
+
+static int add_two(void *args)
+{
+ ctr++;
+ ASYNC_pause_job();
+ ctr++;
+
+ return 2;
+}
+
+static int save_current(void *args)
+{
+ currjob = ASYNC_get_current_job();
+ ASYNC_pause_job();
+
+ return 1;
+}
+
+static int change_deflt_libctx(void *args)
+{
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
+ OSSL_LIB_CTX *oldctx, *tmpctx;
+ int ret = 0;
+
+ if (libctx == NULL)
+ return 0;
+
+ oldctx = OSSL_LIB_CTX_set0_default(libctx);
+ ASYNC_pause_job();
+
+ /* Check the libctx is set up as we expect */
+ tmpctx = OSSL_LIB_CTX_set0_default(oldctx);
+ if (tmpctx != libctx)
+ goto err;
+
+ /* Set it back again to continue to use our own libctx */
+ oldctx = OSSL_LIB_CTX_set0_default(libctx);
+ ASYNC_pause_job();
+
+ /* Check the libctx is set up as we expect */
+ tmpctx = OSSL_LIB_CTX_set0_default(oldctx);
+ if (tmpctx != libctx)
+ goto err;
+
+ ret = 1;
+ err:
+ OSSL_LIB_CTX_free(libctx);
+ return ret;
+}
+
+
+#define MAGIC_WAIT_FD ((OSSL_ASYNC_FD)99)
+static int waitfd(void *args)
+{
+ ASYNC_JOB *job;
+ ASYNC_WAIT_CTX *waitctx;
+ job = ASYNC_get_current_job();
+ if (job == NULL)
+ return 0;
+ waitctx = ASYNC_get_wait_ctx(job);
+ if (waitctx == NULL)
+ return 0;
+
+ /* First case: no fd added or removed */
+ ASYNC_pause_job();
+
+ /* Second case: one fd added */
+ if (!ASYNC_WAIT_CTX_set_wait_fd(waitctx, waitctx, MAGIC_WAIT_FD, NULL, NULL))
+ return 0;
+ ASYNC_pause_job();
+
+ /* Third case: all fd removed */
+ if (!ASYNC_WAIT_CTX_clear_fd(waitctx, waitctx))
+ return 0;
+ ASYNC_pause_job();
+
+ /* Last case: fd added and immediately removed */
+ if (!ASYNC_WAIT_CTX_set_wait_fd(waitctx, waitctx, MAGIC_WAIT_FD, NULL, NULL))
+ return 0;
+ if (!ASYNC_WAIT_CTX_clear_fd(waitctx, waitctx))
+ return 0;
+
+ return 1;
+}
+
+static int blockpause(void *args)
+{
+ ASYNC_block_pause();
+ ASYNC_pause_job();
+ ASYNC_unblock_pause();
+ ASYNC_pause_job();
+
+ return 1;
+}
+
+static int test_ASYNC_init_thread(void)
+{
+ ASYNC_JOB *job1 = NULL, *job2 = NULL, *job3 = NULL;
+ int funcret1, funcret2, funcret3;
+ ASYNC_WAIT_CTX *waitctx = NULL;
+
+ if ( !ASYNC_init_thread(2, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_start_job(&job1, waitctx, &funcret1, only_pause, NULL, 0)
+ != ASYNC_PAUSE
+ || ASYNC_start_job(&job2, waitctx, &funcret2, only_pause, NULL, 0)
+ != ASYNC_PAUSE
+ || ASYNC_start_job(&job3, waitctx, &funcret3, only_pause, NULL, 0)
+ != ASYNC_NO_JOBS
+ || ASYNC_start_job(&job1, waitctx, &funcret1, only_pause, NULL, 0)
+ != ASYNC_FINISH
+ || ASYNC_start_job(&job3, waitctx, &funcret3, only_pause, NULL, 0)
+ != ASYNC_PAUSE
+ || ASYNC_start_job(&job2, waitctx, &funcret2, only_pause, NULL, 0)
+ != ASYNC_FINISH
+ || ASYNC_start_job(&job3, waitctx, &funcret3, only_pause, NULL, 0)
+ != ASYNC_FINISH
+ || funcret1 != 1
+ || funcret2 != 1
+ || funcret3 != 1) {
+ fprintf(stderr, "test_ASYNC_init_thread() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 0;
+ }
+
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 1;
+}
+
+static int test_callback(void *arg)
+{
+ printf("callback test pass\n");
+ return 1;
+}
+
+static int test_ASYNC_callback_status(void)
+{
+ ASYNC_WAIT_CTX *waitctx = NULL;
+ int set_arg = 100;
+ ASYNC_callback_fn get_callback;
+ void *get_arg;
+ int set_status = 1;
+
+ if ( !ASYNC_init_thread(1, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_WAIT_CTX_set_callback(waitctx, test_callback, (void*)&set_arg)
+ != 1
+ || ASYNC_WAIT_CTX_get_callback(waitctx, &get_callback, &get_arg)
+ != 1
+ || test_callback != get_callback
+ || get_arg != (void*)&set_arg
+ || (*get_callback)(get_arg) != 1
+ || ASYNC_WAIT_CTX_set_status(waitctx, set_status) != 1
+ || set_status != ASYNC_WAIT_CTX_get_status(waitctx)) {
+ fprintf(stderr, "test_ASYNC_callback_status() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 0;
+ }
+
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 1;
+
+}
+
+static int test_ASYNC_start_job(void)
+{
+ ASYNC_JOB *job = NULL;
+ int funcret;
+ ASYNC_WAIT_CTX *waitctx = NULL;
+
+ ctr = 0;
+
+ if ( !ASYNC_init_thread(1, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_start_job(&job, waitctx, &funcret, add_two, NULL, 0)
+ != ASYNC_PAUSE
+ || ctr != 1
+ || ASYNC_start_job(&job, waitctx, &funcret, add_two, NULL, 0)
+ != ASYNC_FINISH
+ || ctr != 2
+ || funcret != 2) {
+ fprintf(stderr, "test_ASYNC_start_job() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 0;
+ }
+
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 1;
+}
+
+static int test_ASYNC_get_current_job(void)
+{
+ ASYNC_JOB *job = NULL;
+ int funcret;
+ ASYNC_WAIT_CTX *waitctx = NULL;
+
+ currjob = NULL;
+
+ if ( !ASYNC_init_thread(1, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_start_job(&job, waitctx, &funcret, save_current, NULL, 0)
+ != ASYNC_PAUSE
+ || currjob != job
+ || ASYNC_start_job(&job, waitctx, &funcret, save_current, NULL, 0)
+ != ASYNC_FINISH
+ || funcret != 1) {
+ fprintf(stderr, "test_ASYNC_get_current_job() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 0;
+ }
+
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 1;
+}
+
+static int test_ASYNC_WAIT_CTX_get_all_fds(void)
+{
+ ASYNC_JOB *job = NULL;
+ int funcret;
+ ASYNC_WAIT_CTX *waitctx = NULL;
+ OSSL_ASYNC_FD fd = OSSL_BAD_ASYNC_FD, delfd = OSSL_BAD_ASYNC_FD;
+ size_t numfds, numdelfds;
+
+ if ( !ASYNC_init_thread(1, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ /* On first run we're not expecting any wait fds */
+ || ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
+ != ASYNC_PAUSE
+ || !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
+ || numfds != 0
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
+ &numdelfds)
+ || numfds != 0
+ || numdelfds != 0
+ /* On second run we're expecting one added fd */
+ || ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
+ != ASYNC_PAUSE
+ || !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
+ || numfds != 1
+ || !ASYNC_WAIT_CTX_get_all_fds(waitctx, &fd, &numfds)
+ || fd != MAGIC_WAIT_FD
+ || (fd = OSSL_BAD_ASYNC_FD, 0) /* Assign to something else */
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
+ &numdelfds)
+ || numfds != 1
+ || numdelfds != 0
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, &fd, &numfds, NULL,
+ &numdelfds)
+ || fd != MAGIC_WAIT_FD
+ /* On third run we expect one deleted fd */
+ || ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
+ != ASYNC_PAUSE
+ || !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
+ || numfds != 0
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
+ &numdelfds)
+ || numfds != 0
+ || numdelfds != 1
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, &delfd,
+ &numdelfds)
+ || delfd != MAGIC_WAIT_FD
+ /* On last run we are not expecting any wait fd */
+ || ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
+ != ASYNC_FINISH
+ || !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
+ || numfds != 0
+ || !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
+ &numdelfds)
+ || numfds != 0
+ || numdelfds != 0
+ || funcret != 1) {
+ fprintf(stderr, "test_ASYNC_get_wait_fd() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 0;
+ }
+
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 1;
+}
+
+static int test_ASYNC_block_pause(void)
+{
+ ASYNC_JOB *job = NULL;
+ int funcret;
+ ASYNC_WAIT_CTX *waitctx = NULL;
+
+ if ( !ASYNC_init_thread(1, 0)
+ || (waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_start_job(&job, waitctx, &funcret, blockpause, NULL, 0)
+ != ASYNC_PAUSE
+ || ASYNC_start_job(&job, waitctx, &funcret, blockpause, NULL, 0)
+ != ASYNC_FINISH
+ || funcret != 1) {
+ fprintf(stderr, "test_ASYNC_block_pause() failed\n");
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 0;
+ }
+
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ return 1;
+}
+
+static int test_ASYNC_start_job_ex(void)
+{
+ ASYNC_JOB *job = NULL;
+ int funcret;
+ ASYNC_WAIT_CTX *waitctx = NULL;
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
+ OSSL_LIB_CTX *oldctx, *tmpctx, *globalctx;
+ int ret = 0;
+
+ if (libctx == NULL) {
+ fprintf(stderr,
+ "test_ASYNC_start_job_ex() failed to create libctx\n");
+ goto err;
+ }
+
+ globalctx = oldctx = OSSL_LIB_CTX_set0_default(libctx);
+
+ if ((waitctx = ASYNC_WAIT_CTX_new()) == NULL
+ || ASYNC_start_job(&job, waitctx, &funcret, change_deflt_libctx,
+ NULL, 0)
+ != ASYNC_PAUSE) {
+ fprintf(stderr,
+ "test_ASYNC_start_job_ex() failed to start job\n");
+ goto err;
+ }
+
+ /* Reset the libctx temporarily to find out what it is*/
+ tmpctx = OSSL_LIB_CTX_set0_default(oldctx);
+ oldctx = OSSL_LIB_CTX_set0_default(tmpctx);
+ if (tmpctx != libctx) {
+ fprintf(stderr,
+ "test_ASYNC_start_job_ex() failed - unexpected libctx\n");
+ goto err;
+ }
+
+ if (ASYNC_start_job(&job, waitctx, &funcret, change_deflt_libctx, NULL, 0)
+ != ASYNC_PAUSE) {
+ fprintf(stderr,
+ "test_ASYNC_start_job_ex() - restarting job failed\n");
+ goto err;
+ }
+
+ /* Reset the libctx and continue with the global default libctx */
+ tmpctx = OSSL_LIB_CTX_set0_default(oldctx);
+ if (tmpctx != libctx) {
+ fprintf(stderr,
+ "test_ASYNC_start_job_ex() failed - unexpected libctx\n");
+ goto err;
+ }
+
+ if (ASYNC_start_job(&job, waitctx, &funcret, change_deflt_libctx, NULL, 0)
+ != ASYNC_FINISH
+ || funcret != 1) {
+ fprintf(stderr,
+ "test_ASYNC_start_job_ex() - finishing job failed\n");
+ goto err;
+ }
+
+ /* Reset the libctx temporarily to find out what it is*/
+ tmpctx = OSSL_LIB_CTX_set0_default(libctx);
+ OSSL_LIB_CTX_set0_default(tmpctx);
+ if (tmpctx != globalctx) {
+ fprintf(stderr,
+ "test_ASYNC_start_job_ex() failed - global libctx check failed\n");
+ goto err;
+ }
+
+ ret = 1;
+ err:
+ ASYNC_WAIT_CTX_free(waitctx);
+ ASYNC_cleanup_thread();
+ OSSL_LIB_CTX_free(libctx);
+ return ret;
+}
+
+int main(int argc, char **argv)
+{
+ if (!ASYNC_is_capable()) {
+ fprintf(stderr,
+ "OpenSSL build is not ASYNC capable - skipping async tests\n");
+ } else {
+ if (!test_ASYNC_init_thread()
+ || !test_ASYNC_callback_status()
+ || !test_ASYNC_start_job()
+ || !test_ASYNC_get_current_job()
+ || !test_ASYNC_WAIT_CTX_get_all_fds()
+ || !test_ASYNC_block_pause()
+ || !test_ASYNC_start_job_ex()) {
+ return 1;
+ }
+ }
+ printf("PASS\n");
+ return 0;
+}
diff --git a/test/bad_dtls_test.c b/test/bad_dtls_test.c
new file mode 100644
index 000000000000..e6ee1ea09f6d
--- /dev/null
+++ b/test/bad_dtls_test.c
@@ -0,0 +1,607 @@
+/*
+ * Copyright 2016-2022 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
+ */
+
+/*
+ * Unit test for Cisco DTLS1_BAD_VER session resume, as used by
+ * AnyConnect VPN protocol.
+ *
+ * This is designed to exercise the code paths in
+ * http://git.infradead.org/users/dwmw2/openconnect.git/blob/HEAD:/dtls.c
+ * which have frequently been affected by regressions in DTLS1_BAD_VER
+ * support.
+ *
+ * Note that unlike other SSL tests, we don't test against our own SSL
+ * server method. Firstly because we don't have one; we *only* support
+ * DTLS1_BAD_VER as a client. And secondly because even if that were
+ * fixed up it's the wrong thing to test against - because if changes
+ * are made in generic DTLS code which don't take DTLS1_BAD_VER into
+ * account, there's plenty of scope for making those changes such that
+ * they break *both* the client and the server in the same way.
+ *
+ * So we handle the server side manually. In a session resume there isn't
+ * much to be done anyway.
+ */
+#include <string.h>
+
+#include <openssl/core_names.h>
+#include <openssl/params.h>
+#include <openssl/opensslconf.h>
+#include <openssl/bio.h>
+#include <openssl/crypto.h>
+#include <openssl/evp.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include <openssl/kdf.h>
+#include "internal/packet.h"
+#include "internal/nelem.h"
+#include "testutil.h"
+
+/* For DTLS1_BAD_VER packets the MAC doesn't include the handshake header */
+#define MAC_OFFSET (DTLS1_RT_HEADER_LENGTH + DTLS1_HM_HEADER_LENGTH)
+
+static unsigned char client_random[SSL3_RANDOM_SIZE];
+static unsigned char server_random[SSL3_RANDOM_SIZE];
+
+/* These are all generated locally, sized purely according to our own whim */
+static unsigned char session_id[32];
+static unsigned char master_secret[48];
+static unsigned char cookie[20];
+
+/* We've hard-coded the cipher suite; we know it's 104 bytes */
+static unsigned char key_block[104];
+#define mac_key (key_block + 20)
+#define dec_key (key_block + 40)
+#define enc_key (key_block + 56)
+
+static EVP_MD_CTX *handshake_md;
+
+static int do_PRF(const void *seed1, int seed1_len,
+ const void *seed2, int seed2_len,
+ const void *seed3, int seed3_len,
+ unsigned char *out, int olen)
+{
+ EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_TLS1_PRF, NULL);
+ size_t outlen = olen;
+
+ /* No error handling. If it all screws up, the test will fail anyway */
+ EVP_PKEY_derive_init(pctx);
+ EVP_PKEY_CTX_set_tls1_prf_md(pctx, EVP_md5_sha1());
+ EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, master_secret, sizeof(master_secret));
+ EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed1, seed1_len);
+ EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed2, seed2_len);
+ EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed3, seed3_len);
+ EVP_PKEY_derive(pctx, out, &outlen);
+ EVP_PKEY_CTX_free(pctx);
+ return 1;
+}
+
+static SSL_SESSION *client_session(void)
+{
+ static unsigned char session_asn1[] = {
+ 0x30, 0x5F, /* SEQUENCE, length 0x5F */
+ 0x02, 0x01, 0x01, /* INTEGER, SSL_SESSION_ASN1_VERSION */
+ 0x02, 0x02, 0x01, 0x00, /* INTEGER, DTLS1_BAD_VER */
+ 0x04, 0x02, 0x00, 0x2F, /* OCTET_STRING, AES128-SHA */
+ 0x04, 0x20, /* OCTET_STRING, session id */
+#define SS_SESSID_OFS 15 /* Session ID goes here */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x30, /* OCTET_STRING, master secret */
+#define SS_SECRET_OFS 49 /* Master secret goes here */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ };
+ const unsigned char *p = session_asn1;
+
+ /* Copy the randomly-generated fields into the above ASN1 */
+ memcpy(session_asn1 + SS_SESSID_OFS, session_id, sizeof(session_id));
+ memcpy(session_asn1 + SS_SECRET_OFS, master_secret, sizeof(master_secret));
+
+ return d2i_SSL_SESSION(NULL, &p, sizeof(session_asn1));
+}
+
+/* Returns 1 for initial ClientHello, 2 for ClientHello with cookie */
+static int validate_client_hello(BIO *wbio)
+{
+ PACKET pkt, pkt2;
+ long len;
+ unsigned char *data;
+ int cookie_found = 0;
+ unsigned int u = 0;
+
+ if ((len = BIO_get_mem_data(wbio, (char **)&data)) < 0)
+ return 0;
+ if (!PACKET_buf_init(&pkt, data, len))
+ return 0;
+
+ /* Check record header type */
+ if (!PACKET_get_1(&pkt, &u) || u != SSL3_RT_HANDSHAKE)
+ return 0;
+ /* Version */
+ if (!PACKET_get_net_2(&pkt, &u) || u != DTLS1_BAD_VER)
+ return 0;
+ /* Skip the rest of the record header */
+ if (!PACKET_forward(&pkt, DTLS1_RT_HEADER_LENGTH - 3))
+ return 0;
+
+ /* Check it's a ClientHello */
+ if (!PACKET_get_1(&pkt, &u) || u != SSL3_MT_CLIENT_HELLO)
+ return 0;
+ /* Skip the rest of the handshake message header */
+ if (!PACKET_forward(&pkt, DTLS1_HM_HEADER_LENGTH - 1))
+ return 0;
+
+ /* Check client version */
+ if (!PACKET_get_net_2(&pkt, &u) || u != DTLS1_BAD_VER)
+ return 0;
+
+ /* Store random */
+ if (!PACKET_copy_bytes(&pkt, client_random, SSL3_RANDOM_SIZE))
+ return 0;
+
+ /* Check session id length and content */
+ if (!PACKET_get_length_prefixed_1(&pkt, &pkt2) ||
+ !PACKET_equal(&pkt2, session_id, sizeof(session_id)))
+ return 0;
+
+ /* Check cookie */
+ if (!PACKET_get_length_prefixed_1(&pkt, &pkt2))
+ return 0;
+ if (PACKET_remaining(&pkt2)) {
+ if (!PACKET_equal(&pkt2, cookie, sizeof(cookie)))
+ return 0;
+ cookie_found = 1;
+ }
+
+ /* Skip ciphers */
+ if (!PACKET_get_net_2(&pkt, &u) || !PACKET_forward(&pkt, u))
+ return 0;
+
+ /* Skip compression */
+ if (!PACKET_get_1(&pkt, &u) || !PACKET_forward(&pkt, u))
+ return 0;
+
+ /* Skip extensions */
+ if (!PACKET_get_net_2(&pkt, &u) || !PACKET_forward(&pkt, u))
+ return 0;
+
+ /* Now we are at the end */
+ if (PACKET_remaining(&pkt))
+ return 0;
+
+ /* Update handshake MAC for second ClientHello (with cookie) */
+ if (cookie_found && !EVP_DigestUpdate(handshake_md, data + MAC_OFFSET,
+ len - MAC_OFFSET))
+ return 0;
+
+ (void)BIO_reset(wbio);
+
+ return 1 + cookie_found;
+}
+
+static int send_hello_verify(BIO *rbio)
+{
+ static unsigned char hello_verify[] = {
+ 0x16, /* Handshake */
+ 0x01, 0x00, /* DTLS1_BAD_VER */
+ 0x00, 0x00, /* Epoch 0 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Seq# 0 */
+ 0x00, 0x23, /* Length */
+ 0x03, /* Hello Verify */
+ 0x00, 0x00, 0x17, /* Length */
+ 0x00, 0x00, /* Seq# 0 */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x17, /* Fragment length */
+ 0x01, 0x00, /* DTLS1_BAD_VER */
+ 0x14, /* Cookie length */
+#define HV_COOKIE_OFS 28 /* Cookie goes here */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ };
+
+ memcpy(hello_verify + HV_COOKIE_OFS, cookie, sizeof(cookie));
+
+ BIO_write(rbio, hello_verify, sizeof(hello_verify));
+
+ return 1;
+}
+
+static int send_server_hello(BIO *rbio)
+{
+ static unsigned char server_hello[] = {
+ 0x16, /* Handshake */
+ 0x01, 0x00, /* DTLS1_BAD_VER */
+ 0x00, 0x00, /* Epoch 0 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* Seq# 1 */
+ 0x00, 0x52, /* Length */
+ 0x02, /* Server Hello */
+ 0x00, 0x00, 0x46, /* Length */
+ 0x00, 0x01, /* Seq# */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x46, /* Fragment length */
+ 0x01, 0x00, /* DTLS1_BAD_VER */
+#define SH_RANDOM_OFS 27 /* Server random goes here */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, /* Session ID length */
+#define SH_SESSID_OFS 60 /* Session ID goes here */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x2f, /* Cipher suite AES128-SHA */
+ 0x00, /* Compression null */
+ };
+ static unsigned char change_cipher_spec[] = {
+ 0x14, /* Change Cipher Spec */
+ 0x01, 0x00, /* DTLS1_BAD_VER */
+ 0x00, 0x00, /* Epoch 0 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, /* Seq# 2 */
+ 0x00, 0x03, /* Length */
+ 0x01, 0x00, 0x02, /* Message */
+ };
+
+ memcpy(server_hello + SH_RANDOM_OFS, server_random, sizeof(server_random));
+ memcpy(server_hello + SH_SESSID_OFS, session_id, sizeof(session_id));
+
+ if (!EVP_DigestUpdate(handshake_md, server_hello + MAC_OFFSET,
+ sizeof(server_hello) - MAC_OFFSET))
+ return 0;
+
+ BIO_write(rbio, server_hello, sizeof(server_hello));
+ BIO_write(rbio, change_cipher_spec, sizeof(change_cipher_spec));
+
+ return 1;
+}
+
+/* Create header, HMAC, pad, encrypt and send a record */
+static int send_record(BIO *rbio, unsigned char type, uint64_t seqnr,
+ const void *msg, size_t len)
+{
+ /* Note that the order of the record header fields on the wire,
+ * and in the HMAC, is different. So we just keep them in separate
+ * variables and handle them individually. */
+ static unsigned char epoch[2] = { 0x00, 0x01 };
+ static unsigned char seq[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ static unsigned char ver[2] = { 0x01, 0x00 }; /* DTLS1_BAD_VER */
+ unsigned char lenbytes[2];
+ EVP_MAC *hmac = NULL;
+ EVP_MAC_CTX *ctx = NULL;
+ EVP_CIPHER_CTX *enc_ctx = NULL;
+ unsigned char iv[16];
+ unsigned char pad;
+ unsigned char *enc;
+ OSSL_PARAM params[2];
+ int ret = 0;
+
+ seq[0] = (seqnr >> 40) & 0xff;
+ seq[1] = (seqnr >> 32) & 0xff;
+ seq[2] = (seqnr >> 24) & 0xff;
+ seq[3] = (seqnr >> 16) & 0xff;
+ seq[4] = (seqnr >> 8) & 0xff;
+ seq[5] = seqnr & 0xff;
+
+ pad = 15 - ((len + SHA_DIGEST_LENGTH) % 16);
+ enc = OPENSSL_malloc(len + SHA_DIGEST_LENGTH + 1 + pad);
+ if (enc == NULL)
+ return 0;
+
+ /* Copy record to encryption buffer */
+ memcpy(enc, msg, len);
+
+ /* Append HMAC to data */
+ if (!TEST_ptr(hmac = EVP_MAC_fetch(NULL, "HMAC", NULL))
+ || !TEST_ptr(ctx = EVP_MAC_CTX_new(hmac)))
+ goto end;
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST,
+ "SHA1", 0);
+ params[1] = OSSL_PARAM_construct_end();
+ lenbytes[0] = (unsigned char)(len >> 8);
+ lenbytes[1] = (unsigned char)(len);
+ if (!EVP_MAC_init(ctx, mac_key, 20, params)
+ || !EVP_MAC_update(ctx, epoch, 2)
+ || !EVP_MAC_update(ctx, seq, 6)
+ || !EVP_MAC_update(ctx, &type, 1)
+ || !EVP_MAC_update(ctx, ver, 2) /* Version */
+ || !EVP_MAC_update(ctx, lenbytes, 2) /* Length */
+ || !EVP_MAC_update(ctx, enc, len) /* Finally the data itself */
+ || !EVP_MAC_final(ctx, enc + len, NULL, SHA_DIGEST_LENGTH))
+ goto end;
+
+ /* Append padding bytes */
+ len += SHA_DIGEST_LENGTH;
+ do {
+ enc[len++] = pad;
+ } while (len % 16);
+
+ /* Generate IV, and encrypt */
+ if (!TEST_int_gt(RAND_bytes(iv, sizeof(iv)), 0)
+ || !TEST_ptr(enc_ctx = EVP_CIPHER_CTX_new())
+ || !TEST_true(EVP_CipherInit_ex(enc_ctx, EVP_aes_128_cbc(), NULL,
+ enc_key, iv, 1))
+ || !TEST_int_ge(EVP_Cipher(enc_ctx, enc, enc, len), 0))
+ goto end;
+
+ /* Finally write header (from fragmented variables), IV and encrypted record */
+ BIO_write(rbio, &type, 1);
+ BIO_write(rbio, ver, 2);
+ BIO_write(rbio, epoch, 2);
+ BIO_write(rbio, seq, 6);
+ lenbytes[0] = (unsigned char)((len + sizeof(iv)) >> 8);
+ lenbytes[1] = (unsigned char)(len + sizeof(iv));
+ BIO_write(rbio, lenbytes, 2);
+
+ BIO_write(rbio, iv, sizeof(iv));
+ BIO_write(rbio, enc, len);
+ ret = 1;
+ end:
+ EVP_MAC_free(hmac);
+ EVP_MAC_CTX_free(ctx);
+ EVP_CIPHER_CTX_free(enc_ctx);
+ OPENSSL_free(enc);
+ return ret;
+}
+
+static int send_finished(SSL *s, BIO *rbio)
+{
+ static unsigned char finished_msg[DTLS1_HM_HEADER_LENGTH +
+ TLS1_FINISH_MAC_LENGTH] = {
+ 0x14, /* Finished */
+ 0x00, 0x00, 0x0c, /* Length */
+ 0x00, 0x03, /* Seq# 3 */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x0c, /* Fragment length */
+ /* Finished MAC (12 bytes) */
+ };
+ unsigned char handshake_hash[EVP_MAX_MD_SIZE];
+
+ /* Derive key material */
+ do_PRF(TLS_MD_KEY_EXPANSION_CONST, TLS_MD_KEY_EXPANSION_CONST_SIZE,
+ server_random, SSL3_RANDOM_SIZE,
+ client_random, SSL3_RANDOM_SIZE,
+ key_block, sizeof(key_block));
+
+ /* Generate Finished MAC */
+ if (!EVP_DigestFinal_ex(handshake_md, handshake_hash, NULL))
+ return 0;
+
+ do_PRF(TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
+ handshake_hash, EVP_MD_CTX_get_size(handshake_md),
+ NULL, 0,
+ finished_msg + DTLS1_HM_HEADER_LENGTH, TLS1_FINISH_MAC_LENGTH);
+
+ return send_record(rbio, SSL3_RT_HANDSHAKE, 0,
+ finished_msg, sizeof(finished_msg));
+}
+
+static int validate_ccs(BIO *wbio)
+{
+ PACKET pkt;
+ long len;
+ unsigned char *data;
+ unsigned int u;
+
+ len = BIO_get_mem_data(wbio, (char **)&data);
+ if (len < 0)
+ return 0;
+
+ if (!PACKET_buf_init(&pkt, data, len))
+ return 0;
+
+ /* Check record header type */
+ if (!PACKET_get_1(&pkt, &u) || u != SSL3_RT_CHANGE_CIPHER_SPEC)
+ return 0;
+ /* Version */
+ if (!PACKET_get_net_2(&pkt, &u) || u != DTLS1_BAD_VER)
+ return 0;
+ /* Skip the rest of the record header */
+ if (!PACKET_forward(&pkt, DTLS1_RT_HEADER_LENGTH - 3))
+ return 0;
+
+ /* Check ChangeCipherSpec message */
+ if (!PACKET_get_1(&pkt, &u) || u != SSL3_MT_CCS)
+ return 0;
+ /* A DTLS1_BAD_VER ChangeCipherSpec also contains the
+ * handshake sequence number (which is 2 here) */
+ if (!PACKET_get_net_2(&pkt, &u) || u != 0x0002)
+ return 0;
+
+ /* Now check the Finished packet */
+ if (!PACKET_get_1(&pkt, &u) || u != SSL3_RT_HANDSHAKE)
+ return 0;
+ if (!PACKET_get_net_2(&pkt, &u) || u != DTLS1_BAD_VER)
+ return 0;
+
+ /* Check epoch is now 1 */
+ if (!PACKET_get_net_2(&pkt, &u) || u != 0x0001)
+ return 0;
+
+ /* That'll do for now. If OpenSSL accepted *our* Finished packet
+ * then it's evidently remembered that DTLS1_BAD_VER doesn't
+ * include the handshake header in the MAC. There's not a lot of
+ * point in implementing decryption here, just to check that it
+ * continues to get it right for one more packet. */
+
+ return 1;
+}
+
+#define NODROP(x) { x##UL, 0 }
+#define DROP(x) { x##UL, 1 }
+
+static struct {
+ uint64_t seq;
+ int drop;
+} tests[] = {
+ NODROP(1), NODROP(3), NODROP(2),
+ NODROP(0x1234), NODROP(0x1230), NODROP(0x1235),
+ NODROP(0xffff), NODROP(0x10001), NODROP(0xfffe), NODROP(0x10000),
+ DROP(0x10001), DROP(0xff), NODROP(0x100000), NODROP(0x800000), NODROP(0x7fffe1),
+ NODROP(0xffffff), NODROP(0x1000000), NODROP(0xfffffe), DROP(0xffffff), NODROP(0x1000010),
+ NODROP(0xfffffd), NODROP(0x1000011), DROP(0x12), NODROP(0x1000012),
+ NODROP(0x1ffffff), NODROP(0x2000000), DROP(0x1ff00fe), NODROP(0x2000001),
+ NODROP(0x20fffff), NODROP(0x2105500), DROP(0x20ffffe), NODROP(0x21054ff),
+ NODROP(0x211ffff), DROP(0x2110000), NODROP(0x2120000)
+ /* The last test should be NODROP, because a DROP wouldn't get tested. */
+};
+
+static int test_bad_dtls(void)
+{
+ SSL_SESSION *sess = NULL;
+ SSL_CTX *ctx = NULL;
+ SSL *con = NULL;
+ BIO *rbio = NULL;
+ BIO *wbio = NULL;
+ time_t now = 0;
+ int testresult = 0;
+ int ret;
+ int i;
+
+ RAND_bytes(session_id, sizeof(session_id));
+ RAND_bytes(master_secret, sizeof(master_secret));
+ RAND_bytes(cookie, sizeof(cookie));
+ RAND_bytes(server_random + 4, sizeof(server_random) - 4);
+
+ now = time(NULL);
+ memcpy(server_random, &now, sizeof(now));
+
+ sess = client_session();
+ if (!TEST_ptr(sess))
+ goto end;
+
+ handshake_md = EVP_MD_CTX_new();
+ if (!TEST_ptr(handshake_md)
+ || !TEST_true(EVP_DigestInit_ex(handshake_md, EVP_md5_sha1(),
+ NULL)))
+ goto end;
+
+ ctx = SSL_CTX_new(DTLS_client_method());
+ if (!TEST_ptr(ctx)
+ || !TEST_true(SSL_CTX_set_min_proto_version(ctx, DTLS1_BAD_VER))
+ || !TEST_true(SSL_CTX_set_max_proto_version(ctx, DTLS1_BAD_VER))
+ || !TEST_true(SSL_CTX_set_options(ctx,
+ SSL_OP_LEGACY_SERVER_CONNECT))
+ || !TEST_true(SSL_CTX_set_cipher_list(ctx, "AES128-SHA")))
+ goto end;
+
+ con = SSL_new(ctx);
+ if (!TEST_ptr(con)
+ || !TEST_true(SSL_set_session(con, sess)))
+ goto end;
+ SSL_SESSION_free(sess);
+
+ rbio = BIO_new(BIO_s_mem());
+ wbio = BIO_new(BIO_s_mem());
+
+ if (!TEST_ptr(rbio)
+ || !TEST_ptr(wbio))
+ goto end;
+
+ SSL_set_bio(con, rbio, wbio);
+
+ if (!TEST_true(BIO_up_ref(rbio))) {
+ /*
+ * We can't up-ref but we assigned ownership to con, so we shouldn't
+ * free in the "end" block
+ */
+ rbio = wbio = NULL;
+ goto end;
+ }
+
+ if (!TEST_true(BIO_up_ref(wbio))) {
+ wbio = NULL;
+ goto end;
+ }
+
+ SSL_set_connect_state(con);
+
+ /* Send initial ClientHello */
+ ret = SSL_do_handshake(con);
+ if (!TEST_int_le(ret, 0)
+ || !TEST_int_eq(SSL_get_error(con, ret), SSL_ERROR_WANT_READ)
+ || !TEST_int_eq(validate_client_hello(wbio), 1)
+ || !TEST_true(send_hello_verify(rbio)))
+ goto end;
+
+ ret = SSL_do_handshake(con);
+ if (!TEST_int_le(ret, 0)
+ || !TEST_int_eq(SSL_get_error(con, ret), SSL_ERROR_WANT_READ)
+ || !TEST_int_eq(validate_client_hello(wbio), 2)
+ || !TEST_true(send_server_hello(rbio)))
+ goto end;
+
+ ret = SSL_do_handshake(con);
+ if (!TEST_int_le(ret, 0)
+ || !TEST_int_eq(SSL_get_error(con, ret), SSL_ERROR_WANT_READ)
+ || !TEST_true(send_finished(con, rbio)))
+ goto end;
+
+ ret = SSL_do_handshake(con);
+ if (!TEST_int_gt(ret, 0)
+ || !TEST_true(validate_ccs(wbio)))
+ goto end;
+
+ /* While we're here and crafting packets by hand, we might as well do a
+ bit of a stress test on the DTLS record replay handling. Not Cisco-DTLS
+ specific but useful anyway for the general case. It's been broken
+ before, and in fact was broken even for a basic 0, 2, 1 test case
+ when this test was first added.... */
+ for (i = 0; i < (int)OSSL_NELEM(tests); i++) {
+ uint64_t recv_buf[2];
+
+ if (!TEST_true(send_record(rbio, SSL3_RT_APPLICATION_DATA, tests[i].seq,
+ &tests[i].seq, sizeof(uint64_t)))) {
+ TEST_error("Failed to send data seq #0x%x%08x (%d)\n",
+ (unsigned int)(tests[i].seq >> 32), (unsigned int)tests[i].seq, i);
+ goto end;
+ }
+
+ if (tests[i].drop)
+ continue;
+
+ ret = SSL_read(con, recv_buf, 2 * sizeof(uint64_t));
+ if (!TEST_int_eq(ret, (int)sizeof(uint64_t))) {
+ TEST_error("SSL_read failed or wrong size on seq#0x%x%08x (%d)\n",
+ (unsigned int)(tests[i].seq >> 32), (unsigned int)tests[i].seq, i);
+ goto end;
+ }
+ if (!TEST_true(recv_buf[0] == tests[i].seq))
+ goto end;
+ }
+
+ /* The last test cannot be DROP() */
+ if (!TEST_false(tests[i-1].drop))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ BIO_free(rbio);
+ BIO_free(wbio);
+ SSL_free(con);
+ SSL_CTX_free(ctx);
+ EVP_MD_CTX_free(handshake_md);
+
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_bad_dtls);
+ return 1;
+}
diff --git a/test/bftest.c b/test/bftest.c
new file mode 100644
index 000000000000..8da47bc795f1
--- /dev/null
+++ b/test/bftest.c
@@ -0,0 +1,487 @@
+/*
+ * 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
+ */
+
+/*
+ * BF low level APIs are deprecated for public use, but still ok for internal
+ * use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_BF is defined */
+#include "testutil.h"
+
+#include "internal/nelem.h"
+
+#ifndef OPENSSL_NO_BF
+# include <openssl/blowfish.h>
+
+# ifdef CHARSET_EBCDIC
+# include <openssl/ebcdic.h>
+# endif
+
+static char bf_key[2][30] = {
+ "abcdefghijklmnopqrstuvwxyz",
+ "Who is John Galt?"
+};
+
+/* big endian */
+static BF_LONG bf_plain[2][2] = {
+ {0x424c4f57L, 0x46495348L},
+ {0xfedcba98L, 0x76543210L}
+};
+
+static BF_LONG bf_cipher[2][2] = {
+ {0x324ed0feL, 0xf413a203L},
+ {0xcc91732bL, 0x8022f684L}
+};
+
+/************/
+
+/* Lets use the DES test vectors :-) */
+# define NUM_TESTS 34
+static unsigned char ecb_data[NUM_TESTS][8] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
+ {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57},
+ {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E},
+ {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86},
+ {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E},
+ {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6},
+ {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE},
+ {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6},
+ {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE},
+ {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16},
+ {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F},
+ {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46},
+ {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E},
+ {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76},
+ {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07},
+ {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F},
+ {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7},
+ {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF},
+ {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6},
+ {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF},
+ {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
+ {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E},
+ {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}
+};
+
+static unsigned char plain_data[NUM_TESTS][8] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
+ {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42},
+ {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA},
+ {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72},
+ {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A},
+ {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2},
+ {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A},
+ {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2},
+ {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A},
+ {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02},
+ {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A},
+ {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32},
+ {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA},
+ {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62},
+ {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2},
+ {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA},
+ {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92},
+ {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A},
+ {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2},
+ {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
+};
+
+static unsigned char cipher_data[NUM_TESTS][8] = {
+ {0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78},
+ {0x51, 0x86, 0x6F, 0xD5, 0xB8, 0x5E, 0xCB, 0x8A},
+ {0x7D, 0x85, 0x6F, 0x9A, 0x61, 0x30, 0x63, 0xF2},
+ {0x24, 0x66, 0xDD, 0x87, 0x8B, 0x96, 0x3C, 0x9D},
+ {0x61, 0xF9, 0xC3, 0x80, 0x22, 0x81, 0xB0, 0x96},
+ {0x7D, 0x0C, 0xC6, 0x30, 0xAF, 0xDA, 0x1E, 0xC7},
+ {0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78},
+ {0x0A, 0xCE, 0xAB, 0x0F, 0xC6, 0xA0, 0xA2, 0x8D},
+ {0x59, 0xC6, 0x82, 0x45, 0xEB, 0x05, 0x28, 0x2B},
+ {0xB1, 0xB8, 0xCC, 0x0B, 0x25, 0x0F, 0x09, 0xA0},
+ {0x17, 0x30, 0xE5, 0x77, 0x8B, 0xEA, 0x1D, 0xA4},
+ {0xA2, 0x5E, 0x78, 0x56, 0xCF, 0x26, 0x51, 0xEB},
+ {0x35, 0x38, 0x82, 0xB1, 0x09, 0xCE, 0x8F, 0x1A},
+ {0x48, 0xF4, 0xD0, 0x88, 0x4C, 0x37, 0x99, 0x18},
+ {0x43, 0x21, 0x93, 0xB7, 0x89, 0x51, 0xFC, 0x98},
+ {0x13, 0xF0, 0x41, 0x54, 0xD6, 0x9D, 0x1A, 0xE5},
+ {0x2E, 0xED, 0xDA, 0x93, 0xFF, 0xD3, 0x9C, 0x79},
+ {0xD8, 0x87, 0xE0, 0x39, 0x3C, 0x2D, 0xA6, 0xE3},
+ {0x5F, 0x99, 0xD0, 0x4F, 0x5B, 0x16, 0x39, 0x69},
+ {0x4A, 0x05, 0x7A, 0x3B, 0x24, 0xD3, 0x97, 0x7B},
+ {0x45, 0x20, 0x31, 0xC1, 0xE4, 0xFA, 0xDA, 0x8E},
+ {0x75, 0x55, 0xAE, 0x39, 0xF5, 0x9B, 0x87, 0xBD},
+ {0x53, 0xC5, 0x5F, 0x9C, 0xB4, 0x9F, 0xC0, 0x19},
+ {0x7A, 0x8E, 0x7B, 0xFA, 0x93, 0x7E, 0x89, 0xA3},
+ {0xCF, 0x9C, 0x5D, 0x7A, 0x49, 0x86, 0xAD, 0xB5},
+ {0xD1, 0xAB, 0xB2, 0x90, 0x65, 0x8B, 0xC7, 0x78},
+ {0x55, 0xCB, 0x37, 0x74, 0xD1, 0x3E, 0xF2, 0x01},
+ {0xFA, 0x34, 0xEC, 0x48, 0x47, 0xB2, 0x68, 0xB2},
+ {0xA7, 0x90, 0x79, 0x51, 0x08, 0xEA, 0x3C, 0xAE},
+ {0xC3, 0x9E, 0x07, 0x2D, 0x9F, 0xAC, 0x63, 0x1D},
+ {0x01, 0x49, 0x33, 0xE0, 0xCD, 0xAF, 0xF6, 0xE4},
+ {0xF2, 0x1E, 0x9A, 0x77, 0xB7, 0x1C, 0x49, 0xBC},
+ {0x24, 0x59, 0x46, 0x88, 0x57, 0x54, 0x36, 0x9A},
+ {0x6B, 0x5C, 0x5A, 0x9C, 0x5D, 0x9E, 0x0A, 0x5A},
+};
+
+static unsigned char cbc_key[16] = {
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
+ 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87
+};
+static unsigned char cbc_iv[8] =
+ { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
+static char cbc_data[40] = "7654321 Now is the time for ";
+static unsigned char cbc_ok[32] = {
+ 0x6B, 0x77, 0xB4, 0xD6, 0x30, 0x06, 0xDE, 0xE6,
+ 0x05, 0xB1, 0x56, 0xE2, 0x74, 0x03, 0x97, 0x93,
+ 0x58, 0xDE, 0xB9, 0xE7, 0x15, 0x46, 0x16, 0xD9,
+ 0x59, 0xF1, 0x65, 0x2B, 0xD5, 0xFF, 0x92, 0xCC
+};
+
+static unsigned char cfb64_ok[] = {
+ 0xE7, 0x32, 0x14, 0xA2, 0x82, 0x21, 0x39, 0xCA,
+ 0xF2, 0x6E, 0xCF, 0x6D, 0x2E, 0xB9, 0xE7, 0x6E,
+ 0x3D, 0xA3, 0xDE, 0x04, 0xD1, 0x51, 0x72, 0x00,
+ 0x51, 0x9D, 0x57, 0xA6, 0xC3
+};
+
+static unsigned char ofb64_ok[] = {
+ 0xE7, 0x32, 0x14, 0xA2, 0x82, 0x21, 0x39, 0xCA,
+ 0x62, 0xB3, 0x43, 0xCC, 0x5B, 0x65, 0x58, 0x73,
+ 0x10, 0xDD, 0x90, 0x8D, 0x0C, 0x24, 0x1B, 0x22,
+ 0x63, 0xC2, 0xCF, 0x80, 0xDA
+};
+
+# define KEY_TEST_NUM 25
+static unsigned char key_test[KEY_TEST_NUM] = {
+ 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
+ 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
+ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+ 0x88
+};
+
+static unsigned char key_data[8] =
+ { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 };
+
+static unsigned char key_out[KEY_TEST_NUM][8] = {
+ {0xF9, 0xAD, 0x59, 0x7C, 0x49, 0xDB, 0x00, 0x5E},
+ {0xE9, 0x1D, 0x21, 0xC1, 0xD9, 0x61, 0xA6, 0xD6},
+ {0xE9, 0xC2, 0xB7, 0x0A, 0x1B, 0xC6, 0x5C, 0xF3},
+ {0xBE, 0x1E, 0x63, 0x94, 0x08, 0x64, 0x0F, 0x05},
+ {0xB3, 0x9E, 0x44, 0x48, 0x1B, 0xDB, 0x1E, 0x6E},
+ {0x94, 0x57, 0xAA, 0x83, 0xB1, 0x92, 0x8C, 0x0D},
+ {0x8B, 0xB7, 0x70, 0x32, 0xF9, 0x60, 0x62, 0x9D},
+ {0xE8, 0x7A, 0x24, 0x4E, 0x2C, 0xC8, 0x5E, 0x82},
+ {0x15, 0x75, 0x0E, 0x7A, 0x4F, 0x4E, 0xC5, 0x77},
+ {0x12, 0x2B, 0xA7, 0x0B, 0x3A, 0xB6, 0x4A, 0xE0},
+ {0x3A, 0x83, 0x3C, 0x9A, 0xFF, 0xC5, 0x37, 0xF6},
+ {0x94, 0x09, 0xDA, 0x87, 0xA9, 0x0F, 0x6B, 0xF2},
+ {0x88, 0x4F, 0x80, 0x62, 0x50, 0x60, 0xB8, 0xB4},
+ {0x1F, 0x85, 0x03, 0x1C, 0x19, 0xE1, 0x19, 0x68},
+ {0x79, 0xD9, 0x37, 0x3A, 0x71, 0x4C, 0xA3, 0x4F},
+ {0x93, 0x14, 0x28, 0x87, 0xEE, 0x3B, 0xE1, 0x5C},
+ {0x03, 0x42, 0x9E, 0x83, 0x8C, 0xE2, 0xD1, 0x4B},
+ {0xA4, 0x29, 0x9E, 0x27, 0x46, 0x9F, 0xF6, 0x7B},
+ {0xAF, 0xD5, 0xAE, 0xD1, 0xC1, 0xBC, 0x96, 0xA8},
+ {0x10, 0x85, 0x1C, 0x0E, 0x38, 0x58, 0xDA, 0x9F},
+ {0xE6, 0xF5, 0x1E, 0xD7, 0x9B, 0x9D, 0xB2, 0x1F},
+ {0x64, 0xA6, 0xE1, 0x4A, 0xFD, 0x36, 0xB4, 0x6F},
+ {0x80, 0xC7, 0xD7, 0xD4, 0x5A, 0x54, 0x79, 0xAD},
+ {0x05, 0x04, 0x4B, 0x62, 0xFA, 0x52, 0xD0, 0x80},
+};
+
+static int print_test_data(void)
+{
+ unsigned int i, j;
+
+ printf("ecb test data\n");
+ printf("key bytes\t\tclear bytes\t\tcipher bytes\n");
+ for (i = 0; i < NUM_TESTS; i++) {
+ for (j = 0; j < 8; j++)
+ printf("%02X", ecb_data[i][j]);
+ printf("\t");
+ for (j = 0; j < 8; j++)
+ printf("%02X", plain_data[i][j]);
+ printf("\t");
+ for (j = 0; j < 8; j++)
+ printf("%02X", cipher_data[i][j]);
+ printf("\n");
+ }
+
+ printf("set_key test data\n");
+ printf("data[8]= ");
+ for (j = 0; j < 8; j++)
+ printf("%02X", key_data[j]);
+ printf("\n");
+ for (i = 0; i < KEY_TEST_NUM - 1; i++) {
+ printf("c=");
+ for (j = 0; j < 8; j++)
+ printf("%02X", key_out[i][j]);
+ printf(" k[%2u]=", i + 1);
+ for (j = 0; j < i + 1; j++)
+ printf("%02X", key_test[j]);
+ printf("\n");
+ }
+
+ printf("\nchaining mode test data\n");
+ printf("key[16] = ");
+ for (j = 0; j < 16; j++)
+ printf("%02X", cbc_key[j]);
+ printf("\niv[8] = ");
+ for (j = 0; j < 8; j++)
+ printf("%02X", cbc_iv[j]);
+ printf("\ndata[%d] = '%s'", (int)strlen(cbc_data) + 1, cbc_data);
+ printf("\ndata[%d] = ", (int)strlen(cbc_data) + 1);
+ for (j = 0; j < strlen(cbc_data) + 1; j++)
+ printf("%02X", cbc_data[j]);
+ printf("\n");
+ printf("cbc cipher text\n");
+ printf("cipher[%d]= ", 32);
+ for (j = 0; j < 32; j++)
+ printf("%02X", cbc_ok[j]);
+ printf("\n");
+
+ printf("cfb64 cipher text\n");
+ printf("cipher[%d]= ", (int)strlen(cbc_data) + 1);
+ for (j = 0; j < strlen(cbc_data) + 1; j++)
+ printf("%02X", cfb64_ok[j]);
+ printf("\n");
+
+ printf("ofb64 cipher text\n");
+ printf("cipher[%d]= ", (int)strlen(cbc_data) + 1);
+ for (j = 0; j < strlen(cbc_data) + 1; j++)
+ printf("%02X", ofb64_ok[j]);
+ printf("\n");
+ return 0;
+}
+
+static int test_bf_ecb_raw(int n)
+{
+ int ret = 1;
+ BF_KEY key;
+ BF_LONG data[2];
+
+ BF_set_key(&key, strlen(bf_key[n]), (unsigned char *)bf_key[n]);
+
+ data[0] = bf_plain[n][0];
+ data[1] = bf_plain[n][1];
+ BF_encrypt(data, &key);
+ if (!TEST_mem_eq(&(bf_cipher[n][0]), BF_BLOCK, &(data[0]), BF_BLOCK))
+ ret = 0;
+
+ BF_decrypt(&(data[0]), &key);
+ if (!TEST_mem_eq(&(bf_plain[n][0]), BF_BLOCK, &(data[0]), BF_BLOCK))
+ ret = 0;
+
+ return ret;
+}
+
+static int test_bf_ecb(int n)
+{
+ int ret = 1;
+ BF_KEY key;
+ unsigned char out[8];
+
+ BF_set_key(&key, 8, ecb_data[n]);
+
+ BF_ecb_encrypt(&(plain_data[n][0]), out, &key, BF_ENCRYPT);
+ if (!TEST_mem_eq(&(cipher_data[n][0]), BF_BLOCK, out, BF_BLOCK))
+ ret = 0;
+
+ BF_ecb_encrypt(out, out, &key, BF_DECRYPT);
+ if (!TEST_mem_eq(&(plain_data[n][0]), BF_BLOCK, out, BF_BLOCK))
+ ret = 0;
+
+ return ret;
+}
+
+static int test_bf_set_key(int n)
+{
+ int ret = 1;
+ BF_KEY key;
+ unsigned char out[8];
+
+ BF_set_key(&key, n+1, key_test);
+ BF_ecb_encrypt(key_data, out, &key, BF_ENCRYPT);
+ /* mips-sgi-irix6.5-gcc vv -mabi=64 bug workaround */
+ if (!TEST_mem_eq(out, 8, &(key_out[n][0]), 8))
+ ret = 0;
+
+ return ret;
+}
+
+static int test_bf_cbc(void)
+{
+ unsigned char cbc_in[40], cbc_out[40], iv[8];
+ int ret = 1;
+ BF_KEY key;
+ BF_LONG len;
+
+ len = strlen(cbc_data) + 1;
+
+ BF_set_key(&key, 16, cbc_key);
+ memset(cbc_in, 0, sizeof(cbc_in));
+ memset(cbc_out, 0, sizeof(cbc_out));
+ memcpy(iv, cbc_iv, sizeof(iv));
+ BF_cbc_encrypt((unsigned char *)cbc_data, cbc_out, len,
+ &key, iv, BF_ENCRYPT);
+ if (!TEST_mem_eq(cbc_out, 32, cbc_ok, 32))
+ ret = 0;
+
+ memcpy(iv, cbc_iv, 8);
+ BF_cbc_encrypt(cbc_out, cbc_in, len, &key, iv, BF_DECRYPT);
+ if (!TEST_mem_eq(cbc_in, len, cbc_data, strlen(cbc_data) + 1))
+ ret = 0;
+
+ return ret;
+}
+
+static int test_bf_cfb64(void)
+{
+ unsigned char cbc_in[40], cbc_out[40], iv[8];
+ int n, ret = 1;
+ BF_KEY key;
+ BF_LONG len;
+
+ len = strlen(cbc_data) + 1;
+
+ BF_set_key(&key, 16, cbc_key);
+ memset(cbc_in, 0, 40);
+ memset(cbc_out, 0, 40);
+ memcpy(iv, cbc_iv, 8);
+ n = 0;
+ BF_cfb64_encrypt((unsigned char *)cbc_data, cbc_out, (long)13,
+ &key, iv, &n, BF_ENCRYPT);
+ BF_cfb64_encrypt((unsigned char *)&(cbc_data[13]), &(cbc_out[13]),
+ len - 13, &key, iv, &n, BF_ENCRYPT);
+ if (!TEST_mem_eq(cbc_out, (int)len, cfb64_ok, (int)len))
+ ret = 0;
+
+ n = 0;
+ memcpy(iv, cbc_iv, 8);
+ BF_cfb64_encrypt(cbc_out, cbc_in, 17, &key, iv, &n, BF_DECRYPT);
+ BF_cfb64_encrypt(&(cbc_out[17]), &(cbc_in[17]), len - 17,
+ &key, iv, &n, BF_DECRYPT);
+ if (!TEST_mem_eq(cbc_in, (int)len, cbc_data, (int)len))
+ ret = 0;
+
+ return ret;
+}
+
+static int test_bf_ofb64(void)
+{
+ unsigned char cbc_in[40], cbc_out[40], iv[8];
+ int n, ret = 1;
+ BF_KEY key;
+ BF_LONG len;
+
+ len = strlen(cbc_data) + 1;
+
+ BF_set_key(&key, 16, cbc_key);
+ memset(cbc_in, 0, 40);
+ memset(cbc_out, 0, 40);
+ memcpy(iv, cbc_iv, 8);
+ n = 0;
+ BF_ofb64_encrypt((unsigned char *)cbc_data, cbc_out, (long)13, &key, iv,
+ &n);
+ BF_ofb64_encrypt((unsigned char *)&(cbc_data[13]), &(cbc_out[13]),
+ len - 13, &key, iv, &n);
+ if (!TEST_mem_eq(cbc_out, (int)len, ofb64_ok, (int)len))
+ ret = 0;
+
+ n = 0;
+ memcpy(iv, cbc_iv, 8);
+ BF_ofb64_encrypt(cbc_out, cbc_in, 17, &key, iv, &n);
+ BF_ofb64_encrypt(&(cbc_out[17]), &(cbc_in[17]), len - 17, &key, iv, &n);
+ if (!TEST_mem_eq(cbc_in, (int)len, cbc_data, (int)len))
+ ret = 0;
+
+ return ret;
+}
+#endif
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_PRINT,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "print", OPT_PRINT, '-', "Output test tables instead of running tests"},
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_BF
+ OPTION_CHOICE o;
+# ifdef CHARSET_EBCDIC
+ int n;
+ ebcdic2ascii(cbc_data, cbc_data, strlen(cbc_data));
+ for (n = 0; n < 2; n++) {
+ ebcdic2ascii(bf_key[n], bf_key[n], strlen(bf_key[n]));
+ }
+# endif
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch(o) {
+ case OPT_PRINT:
+ print_test_data();
+ return 1;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ ADD_ALL_TESTS(test_bf_ecb_raw, 2);
+ ADD_ALL_TESTS(test_bf_ecb, NUM_TESTS);
+ ADD_ALL_TESTS(test_bf_set_key, KEY_TEST_NUM-1);
+ ADD_TEST(test_bf_cbc);
+ ADD_TEST(test_bf_cfb64);
+ ADD_TEST(test_bf_ofb64);
+#endif
+ return 1;
+}
diff --git a/test/bio_callback_test.c b/test/bio_callback_test.c
new file mode 100644
index 000000000000..c84346814e14
--- /dev/null
+++ b/test/bio_callback_test.c
@@ -0,0 +1,360 @@
+/*
+ * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+#define OPENSSL_SUPPRESS_DEPRECATED
+#include <stdio.h>
+#include <string.h>
+#include <openssl/bio.h>
+
+#include "testutil.h"
+
+#define MAXCOUNT 5
+static int my_param_count;
+static BIO *my_param_b[MAXCOUNT];
+static int my_param_oper[MAXCOUNT];
+static const char *my_param_argp[MAXCOUNT];
+static int my_param_argi[MAXCOUNT];
+static long my_param_argl[MAXCOUNT];
+static long my_param_ret[MAXCOUNT];
+static size_t my_param_len[MAXCOUNT];
+static size_t my_param_processed[MAXCOUNT];
+
+static long my_bio_cb_ex(BIO *b, int oper, const char *argp, size_t len,
+ int argi, long argl, int ret, size_t *processed)
+{
+ if (my_param_count >= MAXCOUNT)
+ return -1;
+ my_param_b[my_param_count] = b;
+ my_param_oper[my_param_count] = oper;
+ my_param_argp[my_param_count] = argp;
+ my_param_argi[my_param_count] = argi;
+ my_param_argl[my_param_count] = argl;
+ my_param_ret[my_param_count] = ret;
+ my_param_len[my_param_count] = len;
+ my_param_processed[my_param_count] = processed != NULL ? *processed : 0;
+
+ my_param_count++;
+ return ret;
+}
+
+static int test_bio_callback_ex(void)
+{
+ int ok = 0;
+ BIO *bio;
+ int i;
+ char test1[] = "test";
+ const size_t test1len = sizeof(test1) - 1;
+ char test2[] = "hello";
+ const size_t test2len = sizeof(test2) - 1;
+ char buf[16];
+
+ my_param_count = 0;
+
+ bio = BIO_new(BIO_s_mem());
+ if (bio == NULL)
+ goto err;
+
+ BIO_set_callback_ex(bio, my_bio_cb_ex);
+ i = BIO_write(bio, test1, test1len);
+ if (!TEST_int_eq(i, test1len)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_WRITE)
+ || !TEST_ptr_eq(my_param_argp[0], test1)
+ || !TEST_size_t_eq(my_param_len[0], test1len)
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_int_eq((int)my_param_ret[0], 1)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_WRITE | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], test1)
+ || !TEST_size_t_eq(my_param_len[1], test1len)
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_size_t_eq(my_param_processed[1], test1len)
+ || !TEST_int_eq((int)my_param_ret[1], 1))
+ goto err;
+
+ my_param_count = 0;
+ i = BIO_read(bio, buf, sizeof(buf));
+ if (!TEST_mem_eq(buf, i, test1, test1len)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_READ)
+ || !TEST_ptr_eq(my_param_argp[0], buf)
+ || !TEST_size_t_eq(my_param_len[0], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_int_eq((int)my_param_ret[0], 1)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_READ | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], buf)
+ || !TEST_size_t_eq(my_param_len[1], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_size_t_eq(my_param_processed[1], test1len)
+ || !TEST_int_eq((int)my_param_ret[1], 1))
+ goto err;
+
+ /* By default a mem bio returns -1 if it has run out of data */
+ my_param_count = 0;
+ i = BIO_read(bio, buf, sizeof(buf));
+ if (!TEST_int_eq(i, -1)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_READ)
+ || !TEST_ptr_eq(my_param_argp[0], buf)
+ || !TEST_size_t_eq(my_param_len[0], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_int_eq((int)my_param_ret[0], 1)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_READ | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], buf)
+ || !TEST_size_t_eq(my_param_len[1], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_size_t_eq(my_param_processed[1], 0)
+ || !TEST_int_eq((int)my_param_ret[1], -1))
+ goto err;
+
+ /* Force the mem bio to return 0 if it has run out of data */
+ my_param_count = 0;
+ i = BIO_set_mem_eof_return(bio, 0);
+ if (!TEST_int_eq(i, 1)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_CTRL)
+ || !TEST_ptr_eq(my_param_argp[0], NULL)
+ || !TEST_int_eq(my_param_argi[0], BIO_C_SET_BUF_MEM_EOF_RETURN)
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_int_eq((int)my_param_ret[0], 1)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_CTRL | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], NULL)
+ || !TEST_int_eq(my_param_argi[1], BIO_C_SET_BUF_MEM_EOF_RETURN)
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_int_eq((int)my_param_ret[1], 1))
+ goto err;
+ my_param_count = 0;
+ i = BIO_read(bio, buf, sizeof(buf));
+ if (!TEST_int_eq(i, 0)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_READ)
+ || !TEST_ptr_eq(my_param_argp[0], buf)
+ || !TEST_size_t_eq(my_param_len[0], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_int_eq((int)my_param_ret[0], 1)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_READ | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], buf)
+ || !TEST_size_t_eq(my_param_len[1], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_size_t_eq(my_param_processed[1], 0)
+ || !TEST_int_eq((int)my_param_ret[1], 0))
+ goto err;
+
+ my_param_count = 0;
+ i = BIO_puts(bio, test2);
+ if (!TEST_int_eq(i, 5)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_PUTS)
+ || !TEST_ptr_eq(my_param_argp[0], test2)
+ || !TEST_int_eq(my_param_argi[0], 0)
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_int_eq((int)my_param_ret[0], 1)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_PUTS | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], test2)
+ || !TEST_int_eq(my_param_argi[1], 0)
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_size_t_eq(my_param_processed[1], test2len)
+ || !TEST_int_eq((int)my_param_ret[1], 1))
+ goto err;
+
+ my_param_count = 0;
+ i = BIO_free(bio);
+ if (!TEST_int_eq(i, 1)
+ || !TEST_int_eq(my_param_count, 1)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_FREE)
+ || !TEST_ptr_eq(my_param_argp[0], NULL)
+ || !TEST_int_eq(my_param_argi[0], 0)
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_int_eq((int)my_param_ret[0], 1))
+ goto finish;
+
+ ok = 1;
+ goto finish;
+
+err:
+ BIO_free(bio);
+
+finish:
+ /* This helps finding memory leaks with ASAN */
+ memset(my_param_b, 0, sizeof(my_param_b));
+ memset(my_param_argp, 0, sizeof(my_param_argp));
+ return ok;
+}
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+static long my_bio_callback(BIO *b, int oper, const char *argp, int argi,
+ long argl, long ret)
+{
+ if (my_param_count >= MAXCOUNT)
+ return -1;
+ my_param_b[my_param_count] = b;
+ my_param_oper[my_param_count] = oper;
+ my_param_argp[my_param_count] = argp;
+ my_param_argi[my_param_count] = argi;
+ my_param_argl[my_param_count] = argl;
+ my_param_ret[my_param_count] = ret;
+ my_param_count++;
+ return ret;
+}
+
+static int test_bio_callback(void)
+{
+ int ok = 0;
+ BIO *bio;
+ int i;
+ char test1[] = "test";
+ const int test1len = sizeof(test1) - 1;
+ char test2[] = "hello";
+ const int test2len = sizeof(test2) - 1;
+ char buf[16];
+
+ my_param_count = 0;
+
+ bio = BIO_new(BIO_s_mem());
+ if (bio == NULL)
+ goto err;
+
+ BIO_set_callback(bio, my_bio_callback);
+ i = BIO_write(bio, test1, test1len);
+ if (!TEST_int_eq(i, test1len)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_WRITE)
+ || !TEST_ptr_eq(my_param_argp[0], test1)
+ || !TEST_int_eq(my_param_argi[0], test1len)
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_long_eq(my_param_ret[0], 1L)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_WRITE | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], test1)
+ || !TEST_int_eq(my_param_argi[1], test1len)
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_long_eq(my_param_ret[1], (long)test1len))
+ goto err;
+
+ my_param_count = 0;
+ i = BIO_read(bio, buf, sizeof(buf));
+ if (!TEST_mem_eq(buf, i, test1, test1len)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_READ)
+ || !TEST_ptr_eq(my_param_argp[0], buf)
+ || !TEST_int_eq(my_param_argi[0], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_long_eq(my_param_ret[0], 1L)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_READ | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], buf)
+ || !TEST_int_eq(my_param_argi[1], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_long_eq(my_param_ret[1], (long)test1len))
+ goto err;
+
+ /* By default a mem bio returns -1 if it has run out of data */
+ my_param_count = 0;
+ i = BIO_read(bio, buf, sizeof(buf));
+ if (!TEST_int_eq(i, -1)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_READ)
+ || !TEST_ptr_eq(my_param_argp[0], buf)
+ || !TEST_int_eq(my_param_argi[0], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_long_eq(my_param_ret[0], 1L)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_READ | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], buf)
+ || !TEST_int_eq(my_param_argi[1], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_long_eq(my_param_ret[1], -1L))
+ goto err;
+
+ /* Force the mem bio to return 0 if it has run out of data */
+ BIO_set_mem_eof_return(bio, 0);
+ my_param_count = 0;
+ i = BIO_read(bio, buf, sizeof(buf));
+ if (!TEST_int_eq(i, 0)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_READ)
+ || !TEST_ptr_eq(my_param_argp[0], buf)
+ || !TEST_int_eq(my_param_argi[0], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_long_eq(my_param_ret[0], 1L)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_READ | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], buf)
+ || !TEST_int_eq(my_param_argi[1], sizeof(buf))
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_long_eq(my_param_ret[1], 0L))
+ goto err;
+
+ my_param_count = 0;
+ i = BIO_puts(bio, test2);
+ if (!TEST_int_eq(i, 5)
+ || !TEST_int_eq(my_param_count, 2)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_PUTS)
+ || !TEST_ptr_eq(my_param_argp[0], test2)
+ || !TEST_int_eq(my_param_argi[0], 0)
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_long_eq(my_param_ret[0], 1L)
+ || !TEST_ptr_eq(my_param_b[1], bio)
+ || !TEST_int_eq(my_param_oper[1], BIO_CB_PUTS | BIO_CB_RETURN)
+ || !TEST_ptr_eq(my_param_argp[1], test2)
+ || !TEST_int_eq(my_param_argi[1], 0)
+ || !TEST_long_eq(my_param_argl[1], 0L)
+ || !TEST_long_eq(my_param_ret[1], (long)test2len))
+ goto err;
+
+ my_param_count = 0;
+ i = BIO_free(bio);
+ if (!TEST_int_eq(i, 1)
+ || !TEST_int_eq(my_param_count, 1)
+ || !TEST_ptr_eq(my_param_b[0], bio)
+ || !TEST_int_eq(my_param_oper[0], BIO_CB_FREE)
+ || !TEST_ptr_eq(my_param_argp[0], NULL)
+ || !TEST_int_eq(my_param_argi[0], 0)
+ || !TEST_long_eq(my_param_argl[0], 0L)
+ || !TEST_long_eq(my_param_ret[0], 1L))
+ goto finish;
+
+ ok = 1;
+ goto finish;
+
+err:
+ BIO_free(bio);
+
+finish:
+ /* This helps finding memory leaks with ASAN */
+ memset(my_param_b, 0, sizeof(my_param_b));
+ memset(my_param_argp, 0, sizeof(my_param_argp));
+ return ok;
+}
+#endif
+
+int setup_tests(void)
+{
+ ADD_TEST(test_bio_callback_ex);
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ADD_TEST(test_bio_callback);
+#endif
+ return 1;
+}
diff --git a/test/bio_core_test.c b/test/bio_core_test.c
new file mode 100644
index 000000000000..77e846735f76
--- /dev/null
+++ b/test/bio_core_test.c
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/bio.h>
+#include "testutil.h"
+
+struct ossl_core_bio_st {
+ int dummy;
+ BIO *bio;
+};
+
+static int tst_bio_core_read_ex(OSSL_CORE_BIO *bio, char *data, size_t data_len,
+ size_t *bytes_read)
+{
+ return BIO_read_ex(bio->bio, data, data_len, bytes_read);
+}
+
+static int tst_bio_core_write_ex(OSSL_CORE_BIO *bio, const char *data,
+ size_t data_len, size_t *written)
+{
+ return BIO_write_ex(bio->bio, data, data_len, written);
+}
+
+static int tst_bio_core_gets(OSSL_CORE_BIO *bio, char *buf, int size)
+{
+ return BIO_gets(bio->bio, buf, size);
+}
+
+static int tst_bio_core_puts(OSSL_CORE_BIO *bio, const char *str)
+{
+ return BIO_puts(bio->bio, str);
+}
+
+static long tst_bio_core_ctrl(OSSL_CORE_BIO *bio, int cmd, long num, void *ptr)
+{
+ return BIO_ctrl(bio->bio, cmd, num, ptr);
+}
+
+static int tst_bio_core_up_ref(OSSL_CORE_BIO *bio)
+{
+ return BIO_up_ref(bio->bio);
+}
+
+static int tst_bio_core_free(OSSL_CORE_BIO *bio)
+{
+ return BIO_free(bio->bio);
+}
+
+static const OSSL_DISPATCH biocbs[] = {
+ { OSSL_FUNC_BIO_READ_EX, (void (*)(void))tst_bio_core_read_ex },
+ { OSSL_FUNC_BIO_WRITE_EX, (void (*)(void))tst_bio_core_write_ex },
+ { OSSL_FUNC_BIO_GETS, (void (*)(void))tst_bio_core_gets },
+ { OSSL_FUNC_BIO_PUTS, (void (*)(void))tst_bio_core_puts },
+ { OSSL_FUNC_BIO_CTRL, (void (*)(void))tst_bio_core_ctrl },
+ { OSSL_FUNC_BIO_UP_REF, (void (*)(void))tst_bio_core_up_ref },
+ { OSSL_FUNC_BIO_FREE, (void (*)(void))tst_bio_core_free },
+ { 0, NULL }
+};
+
+static int test_bio_core(void)
+{
+ BIO *cbio = NULL, *cbiobad = NULL;
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new_from_dispatch(NULL, biocbs);
+ int testresult = 0;
+ OSSL_CORE_BIO corebio;
+ const char *msg = "Hello world";
+ char buf[80];
+
+ corebio.bio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(corebio.bio)
+ || !TEST_ptr(libctx)
+ /*
+ * Attempting to create a corebio in a libctx that was not
+ * created via OSSL_LIB_CTX_new_from_dispatch() should fail.
+ */
+ || !TEST_ptr_null((cbiobad = BIO_new_from_core_bio(NULL, &corebio)))
+ || !TEST_ptr((cbio = BIO_new_from_core_bio(libctx, &corebio))))
+ goto err;
+
+ if (!TEST_int_gt(BIO_puts(corebio.bio, msg), 0)
+ /* Test a ctrl via BIO_eof */
+ || !TEST_false(BIO_eof(cbio))
+ || !TEST_int_gt(BIO_gets(cbio, buf, sizeof(buf)), 0)
+ || !TEST_true(BIO_eof(cbio))
+ || !TEST_str_eq(buf, msg))
+ goto err;
+
+ buf[0] = '\0';
+ if (!TEST_int_gt(BIO_write(cbio, msg, strlen(msg) + 1), 0)
+ || !TEST_int_gt(BIO_read(cbio, buf, sizeof(buf)), 0)
+ || !TEST_str_eq(buf, msg))
+ goto err;
+
+ testresult = 1;
+ err:
+ BIO_free(cbiobad);
+ BIO_free(cbio);
+ BIO_free(corebio.bio);
+ OSSL_LIB_CTX_free(libctx);
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ ADD_TEST(test_bio_core);
+ return 1;
+}
diff --git a/test/bio_enc_test.c b/test/bio_enc_test.c
new file mode 100644
index 000000000000..accb74e7df41
--- /dev/null
+++ b/test/bio_enc_test.c
@@ -0,0 +1,266 @@
+/*
+ * Copyright 2016-2022 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 <string.h>
+#include <openssl/evp.h>
+#include <openssl/bio.h>
+#include <openssl/rand.h>
+
+#include "testutil.h"
+
+#define ENCRYPT 1
+#define DECRYPT 0
+
+#define DATA_SIZE 1024
+#define MAX_IV 32
+#define BUF_SIZE (DATA_SIZE + MAX_IV)
+
+static const unsigned char KEY[] = {
+ 0x51, 0x50, 0xd1, 0x77, 0x2f, 0x50, 0x83, 0x4a,
+ 0x50, 0x3e, 0x06, 0x9a, 0x97, 0x3f, 0xbd, 0x7c,
+ 0xe6, 0x1c, 0x43, 0x2b, 0x72, 0x0b, 0x19, 0xd1,
+ 0x8e, 0xc8, 0xd8, 0x4b, 0xdc, 0x63, 0x15, 0x1b
+};
+
+static const unsigned char IV[] = {
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
+};
+
+static int do_bio_cipher(const EVP_CIPHER* cipher, const unsigned char* key,
+ const unsigned char* iv)
+{
+ BIO *b, *mem;
+ static unsigned char inp[BUF_SIZE] = { 0 };
+ unsigned char out[BUF_SIZE], ref[BUF_SIZE];
+ int i, lref, len;
+
+ /* Fill buffer with non-zero data so that over steps can be detected */
+ if (!TEST_int_gt(RAND_bytes(inp, DATA_SIZE), 0))
+ return 0;
+
+ /* Encrypt tests */
+
+ /* reference output for single-chunk operation */
+ b = BIO_new(BIO_f_cipher());
+ if (!TEST_ptr(b))
+ return 0;
+ if (!TEST_true(BIO_set_cipher(b, cipher, key, iv, ENCRYPT)))
+ goto err;
+ mem = BIO_new_mem_buf(inp, DATA_SIZE);
+ if (!TEST_ptr(mem))
+ goto err;
+ BIO_push(b, mem);
+ lref = BIO_read(b, ref, sizeof(ref));
+ BIO_free_all(b);
+
+ /* perform split operations and compare to reference */
+ for (i = 1; i < lref; i++) {
+ b = BIO_new(BIO_f_cipher());
+ if (!TEST_ptr(b))
+ return 0;
+ if (!TEST_true(BIO_set_cipher(b, cipher, key, iv, ENCRYPT))) {
+ TEST_info("Split encrypt failed @ operation %d", i);
+ goto err;
+ }
+ mem = BIO_new_mem_buf(inp, DATA_SIZE);
+ if (!TEST_ptr(mem))
+ goto err;
+ BIO_push(b, mem);
+ memset(out, 0, sizeof(out));
+ out[i] = ~ref[i];
+ len = BIO_read(b, out, i);
+ /* check for overstep */
+ if (!TEST_uchar_eq(out[i], (unsigned char)~ref[i])) {
+ TEST_info("Encrypt overstep check failed @ operation %d", i);
+ goto err;
+ }
+ len += BIO_read(b, out + len, sizeof(out) - len);
+ BIO_free_all(b);
+
+ if (!TEST_mem_eq(out, len, ref, lref)) {
+ TEST_info("Encrypt compare failed @ operation %d", i);
+ return 0;
+ }
+ }
+
+ /* perform small-chunk operations and compare to reference */
+ for (i = 1; i < lref / 2; i++) {
+ int delta;
+
+ b = BIO_new(BIO_f_cipher());
+ if (!TEST_ptr(b))
+ return 0;
+ if (!TEST_true(BIO_set_cipher(b, cipher, key, iv, ENCRYPT))) {
+ TEST_info("Small chunk encrypt failed @ operation %d", i);
+ goto err;
+ }
+ mem = BIO_new_mem_buf(inp, DATA_SIZE);
+ if (!TEST_ptr(mem))
+ goto err;
+ BIO_push(b, mem);
+ memset(out, 0, sizeof(out));
+ for (len = 0; (delta = BIO_read(b, out + len, i)); ) {
+ len += delta;
+ }
+ BIO_free_all(b);
+
+ if (!TEST_mem_eq(out, len, ref, lref)) {
+ TEST_info("Small chunk encrypt compare failed @ operation %d", i);
+ return 0;
+ }
+ }
+
+ /* Decrypt tests */
+
+ /* reference output for single-chunk operation */
+ b = BIO_new(BIO_f_cipher());
+ if (!TEST_ptr(b))
+ return 0;
+ if (!TEST_true(BIO_set_cipher(b, cipher, key, iv, DECRYPT)))
+ goto err;
+ /* Use original reference output as input */
+ mem = BIO_new_mem_buf(ref, lref);
+ if (!TEST_ptr(mem))
+ goto err;
+ BIO_push(b, mem);
+ (void)BIO_flush(b);
+ memset(out, 0, sizeof(out));
+ len = BIO_read(b, out, sizeof(out));
+ BIO_free_all(b);
+
+ if (!TEST_mem_eq(inp, DATA_SIZE, out, len))
+ return 0;
+
+ /* perform split operations and compare to reference */
+ for (i = 1; i < lref; i++) {
+ b = BIO_new(BIO_f_cipher());
+ if (!TEST_ptr(b))
+ return 0;
+ if (!TEST_true(BIO_set_cipher(b, cipher, key, iv, DECRYPT))) {
+ TEST_info("Split decrypt failed @ operation %d", i);
+ goto err;
+ }
+ mem = BIO_new_mem_buf(ref, lref);
+ if (!TEST_ptr(mem))
+ goto err;
+ BIO_push(b, mem);
+ memset(out, 0, sizeof(out));
+ out[i] = ~ref[i];
+ len = BIO_read(b, out, i);
+ /* check for overstep */
+ if (!TEST_uchar_eq(out[i], (unsigned char)~ref[i])) {
+ TEST_info("Decrypt overstep check failed @ operation %d", i);
+ goto err;
+ }
+ len += BIO_read(b, out + len, sizeof(out) - len);
+ BIO_free_all(b);
+
+ if (!TEST_mem_eq(inp, DATA_SIZE, out, len)) {
+ TEST_info("Decrypt compare failed @ operation %d", i);
+ return 0;
+ }
+ }
+
+ /* perform small-chunk operations and compare to reference */
+ for (i = 1; i < lref / 2; i++) {
+ int delta;
+
+ b = BIO_new(BIO_f_cipher());
+ if (!TEST_ptr(b))
+ return 0;
+ if (!TEST_true(BIO_set_cipher(b, cipher, key, iv, DECRYPT))) {
+ TEST_info("Small chunk decrypt failed @ operation %d", i);
+ goto err;
+ }
+ mem = BIO_new_mem_buf(ref, lref);
+ if (!TEST_ptr(mem))
+ goto err;
+ BIO_push(b, mem);
+ memset(out, 0, sizeof(out));
+ for (len = 0; (delta = BIO_read(b, out + len, i)); ) {
+ len += delta;
+ }
+ BIO_free_all(b);
+
+ if (!TEST_mem_eq(inp, DATA_SIZE, out, len)) {
+ TEST_info("Small chunk decrypt compare failed @ operation %d", i);
+ return 0;
+ }
+ }
+
+ return 1;
+
+err:
+ BIO_free_all(b);
+ return 0;
+}
+
+static int do_test_bio_cipher(const EVP_CIPHER* cipher, int idx)
+{
+ switch(idx)
+ {
+ case 0:
+ return do_bio_cipher(cipher, KEY, NULL);
+ case 1:
+ return do_bio_cipher(cipher, KEY, IV);
+ }
+ return 0;
+}
+
+static int test_bio_enc_aes_128_cbc(int idx)
+{
+ return do_test_bio_cipher(EVP_aes_128_cbc(), idx);
+}
+
+static int test_bio_enc_aes_128_ctr(int idx)
+{
+ return do_test_bio_cipher(EVP_aes_128_ctr(), idx);
+}
+
+static int test_bio_enc_aes_256_cfb(int idx)
+{
+ return do_test_bio_cipher(EVP_aes_256_cfb(), idx);
+}
+
+static int test_bio_enc_aes_256_ofb(int idx)
+{
+ return do_test_bio_cipher(EVP_aes_256_ofb(), idx);
+}
+
+# ifndef OPENSSL_NO_CHACHA
+static int test_bio_enc_chacha20(int idx)
+{
+ return do_test_bio_cipher(EVP_chacha20(), idx);
+}
+
+# ifndef OPENSSL_NO_POLY1305
+static int test_bio_enc_chacha20_poly1305(int idx)
+{
+ return do_test_bio_cipher(EVP_chacha20_poly1305(), idx);
+}
+# endif
+# endif
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_bio_enc_aes_128_cbc, 2);
+ ADD_ALL_TESTS(test_bio_enc_aes_128_ctr, 2);
+ ADD_ALL_TESTS(test_bio_enc_aes_256_cfb, 2);
+ ADD_ALL_TESTS(test_bio_enc_aes_256_ofb, 2);
+# ifndef OPENSSL_NO_CHACHA
+ ADD_ALL_TESTS(test_bio_enc_chacha20, 2);
+# ifndef OPENSSL_NO_POLY1305
+ ADD_ALL_TESTS(test_bio_enc_chacha20_poly1305, 2);
+# endif
+# endif
+ return 1;
+}
diff --git a/test/bio_memleak_test.c b/test/bio_memleak_test.c
new file mode 100644
index 000000000000..d9c744ff49cc
--- /dev/null
+++ b/test/bio_memleak_test.c
@@ -0,0 +1,291 @@
+/*
+ * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+#include <stdio.h>
+#include <string.h>
+#include <openssl/buffer.h>
+#include <openssl/bio.h>
+
+#include "testutil.h"
+
+static int test_bio_memleak(void)
+{
+ int ok = 0;
+ BIO *bio;
+ BUF_MEM bufmem;
+ static const char str[] = "BIO test\n";
+ char buf[100];
+
+ bio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(bio))
+ goto finish;
+ bufmem.length = sizeof(str);
+ bufmem.data = (char *) str;
+ bufmem.max = bufmem.length;
+ BIO_set_mem_buf(bio, &bufmem, BIO_NOCLOSE);
+ BIO_set_flags(bio, BIO_FLAGS_MEM_RDONLY);
+ if (!TEST_int_eq(BIO_read(bio, buf, sizeof(buf)), sizeof(str)))
+ goto finish;
+ if (!TEST_mem_eq(buf, sizeof(str), str, sizeof(str)))
+ goto finish;
+ ok = 1;
+
+ finish:
+ BIO_free(bio);
+ return ok;
+}
+
+static int test_bio_get_mem(void)
+{
+ int ok = 0;
+ BIO *bio = NULL;
+ BUF_MEM *bufmem = NULL;
+
+ bio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(bio))
+ goto finish;
+ if (!TEST_int_eq(BIO_puts(bio, "Hello World\n"), 12))
+ goto finish;
+ BIO_get_mem_ptr(bio, &bufmem);
+ if (!TEST_ptr(bufmem))
+ goto finish;
+ if (!TEST_int_gt(BIO_set_close(bio, BIO_NOCLOSE), 0))
+ goto finish;
+ BIO_free(bio);
+ bio = NULL;
+ if (!TEST_mem_eq(bufmem->data, bufmem->length, "Hello World\n", 12))
+ goto finish;
+ ok = 1;
+
+ finish:
+ BIO_free(bio);
+ BUF_MEM_free(bufmem);
+ return ok;
+}
+
+static int test_bio_new_mem_buf(void)
+{
+ int ok = 0;
+ BIO *bio;
+ BUF_MEM *bufmem;
+ char data[16];
+
+ bio = BIO_new_mem_buf("Hello World\n", 12);
+ if (!TEST_ptr(bio))
+ goto finish;
+ if (!TEST_int_eq(BIO_read(bio, data, 5), 5))
+ goto finish;
+ if (!TEST_mem_eq(data, 5, "Hello", 5))
+ goto finish;
+ if (!TEST_int_gt(BIO_get_mem_ptr(bio, &bufmem), 0))
+ goto finish;
+ if (!TEST_int_lt(BIO_write(bio, "test", 4), 0))
+ goto finish;
+ if (!TEST_int_eq(BIO_read(bio, data, 16), 7))
+ goto finish;
+ if (!TEST_mem_eq(data, 7, " World\n", 7))
+ goto finish;
+ if (!TEST_int_gt(BIO_reset(bio), 0))
+ goto finish;
+ if (!TEST_int_eq(BIO_read(bio, data, 16), 12))
+ goto finish;
+ if (!TEST_mem_eq(data, 12, "Hello World\n", 12))
+ goto finish;
+ ok = 1;
+
+ finish:
+ BIO_free(bio);
+ return ok;
+}
+
+static int test_bio_rdonly_mem_buf(void)
+{
+ int ok = 0;
+ BIO *bio, *bio2 = NULL;
+ BUF_MEM *bufmem;
+ char data[16];
+
+ bio = BIO_new_mem_buf("Hello World\n", 12);
+ if (!TEST_ptr(bio))
+ goto finish;
+ if (!TEST_int_eq(BIO_read(bio, data, 5), 5))
+ goto finish;
+ if (!TEST_mem_eq(data, 5, "Hello", 5))
+ goto finish;
+ if (!TEST_int_gt(BIO_get_mem_ptr(bio, &bufmem), 0))
+ goto finish;
+ (void)BIO_set_close(bio, BIO_NOCLOSE);
+
+ bio2 = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(bio2))
+ goto finish;
+ BIO_set_mem_buf(bio2, bufmem, BIO_CLOSE);
+ BIO_set_flags(bio2, BIO_FLAGS_MEM_RDONLY);
+
+ if (!TEST_int_eq(BIO_read(bio2, data, 16), 7))
+ goto finish;
+ if (!TEST_mem_eq(data, 7, " World\n", 7))
+ goto finish;
+ if (!TEST_int_gt(BIO_reset(bio2), 0))
+ goto finish;
+ if (!TEST_int_eq(BIO_read(bio2, data, 16), 7))
+ goto finish;
+ if (!TEST_mem_eq(data, 7, " World\n", 7))
+ goto finish;
+ ok = 1;
+
+ finish:
+ BIO_free(bio);
+ BIO_free(bio2);
+ return ok;
+}
+
+static int test_bio_rdwr_rdonly(void)
+{
+ int ok = 0;
+ BIO *bio = NULL;
+ char data[16];
+
+ bio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(bio))
+ goto finish;
+ if (!TEST_int_eq(BIO_puts(bio, "Hello World\n"), 12))
+ goto finish;
+
+ BIO_set_flags(bio, BIO_FLAGS_MEM_RDONLY);
+ if (!TEST_int_eq(BIO_read(bio, data, 16), 12))
+ goto finish;
+ if (!TEST_mem_eq(data, 12, "Hello World\n", 12))
+ goto finish;
+ if (!TEST_int_gt(BIO_reset(bio), 0))
+ goto finish;
+
+ BIO_clear_flags(bio, BIO_FLAGS_MEM_RDONLY);
+ if (!TEST_int_eq(BIO_puts(bio, "Hi!\n"), 4))
+ goto finish;
+ if (!TEST_int_eq(BIO_read(bio, data, 16), 16))
+ goto finish;
+
+ if (!TEST_mem_eq(data, 16, "Hello World\nHi!\n", 16))
+ goto finish;
+
+ ok = 1;
+
+ finish:
+ BIO_free(bio);
+ return ok;
+}
+
+static int test_bio_nonclear_rst(void)
+{
+ int ok = 0;
+ BIO *bio = NULL;
+ char data[16];
+
+ bio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(bio))
+ goto finish;
+ if (!TEST_int_eq(BIO_puts(bio, "Hello World\n"), 12))
+ goto finish;
+
+ BIO_set_flags(bio, BIO_FLAGS_NONCLEAR_RST);
+
+ if (!TEST_int_eq(BIO_read(bio, data, 16), 12))
+ goto finish;
+ if (!TEST_mem_eq(data, 12, "Hello World\n", 12))
+ goto finish;
+ if (!TEST_int_gt(BIO_reset(bio), 0))
+ goto finish;
+
+ if (!TEST_int_eq(BIO_read(bio, data, 16), 12))
+ goto finish;
+ if (!TEST_mem_eq(data, 12, "Hello World\n", 12))
+ goto finish;
+
+ BIO_clear_flags(bio, BIO_FLAGS_NONCLEAR_RST);
+ if (!TEST_int_gt(BIO_reset(bio), 0))
+ goto finish;
+
+ if (!TEST_int_lt(BIO_read(bio, data, 16), 1))
+ goto finish;
+
+ ok = 1;
+
+ finish:
+ BIO_free(bio);
+ return ok;
+}
+
+static int error_callback_fired;
+static long BIO_error_callback(BIO *bio, int cmd, const char *argp,
+ size_t len, int argi,
+ long argl, int ret, size_t *processed)
+{
+ if ((cmd & (BIO_CB_READ | BIO_CB_RETURN)) != 0) {
+ error_callback_fired = 1;
+ ret = 0; /* fail for read operations to simulate error in input BIO */
+ }
+ return ret;
+}
+
+/* Checks i2d_ASN1_bio_stream() is freeing all memory when input BIO ends unexpectedly. */
+static int test_bio_i2d_ASN1_mime(void)
+{
+ int ok = 0;
+ BIO *bio = NULL, *out = NULL;
+ BUF_MEM bufmem;
+ static const char str[] = "BIO mime test\n";
+ PKCS7 *p7 = NULL;
+
+ if (!TEST_ptr(bio = BIO_new(BIO_s_mem())))
+ goto finish;
+
+ bufmem.length = sizeof(str);
+ bufmem.data = (char *) str;
+ bufmem.max = bufmem.length;
+ BIO_set_mem_buf(bio, &bufmem, BIO_NOCLOSE);
+ BIO_set_flags(bio, BIO_FLAGS_MEM_RDONLY);
+ BIO_set_callback_ex(bio, BIO_error_callback);
+
+ if (!TEST_ptr(out = BIO_new(BIO_s_mem())))
+ goto finish;
+ if (!TEST_ptr(p7 = PKCS7_new()))
+ goto finish;
+ if (!TEST_true(PKCS7_set_type(p7, NID_pkcs7_data)))
+ goto finish;
+
+ error_callback_fired = 0;
+
+ if (!TEST_false(i2d_ASN1_bio_stream(out, (ASN1_VALUE*) p7, bio,
+ SMIME_STREAM | SMIME_BINARY,
+ ASN1_ITEM_rptr(PKCS7))))
+ goto finish;
+
+ if (!TEST_int_eq(error_callback_fired, 1))
+ goto finish;
+
+ ok = 1;
+
+ finish:
+ BIO_free(bio);
+ BIO_free(out);
+ PKCS7_free(p7);
+ return ok;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_bio_memleak);
+ ADD_TEST(test_bio_get_mem);
+ ADD_TEST(test_bio_new_mem_buf);
+ ADD_TEST(test_bio_rdonly_mem_buf);
+ ADD_TEST(test_bio_rdwr_rdonly);
+ ADD_TEST(test_bio_nonclear_rst);
+ ADD_TEST(test_bio_i2d_ASN1_mime);
+ return 1;
+}
diff --git a/test/bio_prefix_text.c b/test/bio_prefix_text.c
new file mode 100644
index 000000000000..d31b71b4ce08
--- /dev/null
+++ b/test/bio_prefix_text.c
@@ -0,0 +1,267 @@
+/*
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <stdarg.h>
+#include <openssl/bio.h>
+#include <openssl/safestack.h>
+#include "opt.h"
+
+static BIO *bio_in = NULL;
+static BIO *bio_out = NULL;
+static BIO *bio_err = NULL;
+
+/*-
+ * This program sets up a chain of BIO_f_filter() on top of bio_out, how
+ * many is governed by the user through -n. It allows the user to set the
+ * indentation for each individual filter using -i and -p. Then it reads
+ * text from bio_in and prints it out through the BIO chain.
+ *
+ * The filter index is counted from the source/sink, i.e. index 0 is closest
+ * to it.
+ *
+ * Example:
+ *
+ * $ echo foo | ./bio_prefix_text -n 2 -i 1:32 -p 1:FOO -i 0:3
+ * FOO foo
+ * ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * | |
+ * | +------ 32 spaces from filter 1
+ * +-------------------------- 3 spaces from filter 0
+ */
+
+static size_t amount = 0;
+static BIO **chain = NULL;
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_AMOUNT,
+ OPT_INDENT,
+ OPT_PREFIX
+} OPTION_CHOICE;
+
+static const OPTIONS options[] = {
+ { "n", OPT_AMOUNT, 'p', "Amount of BIO_f_prefix() filters" },
+ /*
+ * idx is the index to the BIO_f_filter chain(), where 0 is closest
+ * to the source/sink BIO. If idx isn't given, 0 is assumed
+ */
+ { "i", OPT_INDENT, 's', "Indentation in form '[idx:]indent'" },
+ { "p", OPT_PREFIX, 's', "Prefix in form '[idx:]prefix'" },
+ { NULL }
+};
+
+int opt_printf_stderr(const char *fmt, ...)
+{
+ va_list ap;
+ int ret;
+
+ va_start(ap, fmt);
+ ret = BIO_vprintf(bio_err, fmt, ap);
+ va_end(ap);
+ return ret;
+}
+
+static int run_pipe(void)
+{
+ char buf[4096];
+
+ while (!BIO_eof(bio_in)) {
+ size_t bytes_in;
+ size_t bytes_out;
+
+ if (!BIO_read_ex(bio_in, buf, sizeof(buf), &bytes_in))
+ return 0;
+ bytes_out = 0;
+ while (bytes_out < bytes_in) {
+ size_t bytes;
+
+ if (!BIO_write_ex(chain[amount - 1], buf, bytes_in, &bytes))
+ return 0;
+ bytes_out += bytes;
+ }
+ }
+ return 1;
+}
+
+static int setup_bio_chain(const char *progname)
+{
+ BIO *next = NULL;
+ size_t n = amount;
+
+ chain = OPENSSL_zalloc(sizeof(*chain) * n);
+
+ if (chain != NULL) {
+ size_t i;
+
+ next = bio_out;
+ BIO_up_ref(next); /* Protection against freeing */
+
+ for (i = 0; n > 0; i++, n--) {
+ BIO *curr = BIO_new(BIO_f_prefix());
+
+ if (curr == NULL)
+ goto err;
+ chain[i] = BIO_push(curr, next);
+ if (chain[i] == NULL)
+ goto err;
+ next = chain[i];
+ }
+ }
+ return chain != NULL;
+ err:
+ /* Free the chain we built up */
+ BIO_free_all(next);
+ OPENSSL_free(chain);
+ return 0;
+}
+
+static void cleanup(void)
+{
+ if (chain != NULL) {
+ BIO_free_all(chain[amount - 1]);
+ OPENSSL_free(chain);
+ }
+
+ BIO_free_all(bio_in);
+ BIO_free_all(bio_out);
+ BIO_free_all(bio_err);
+}
+
+static int setup(void)
+{
+ OPTION_CHOICE o;
+ char *arg;
+ char *colon;
+ char *endptr;
+ size_t idx, indent;
+ const char *progname = opt_getprog();
+
+ bio_in = BIO_new_fp(stdin, BIO_NOCLOSE | BIO_FP_TEXT);
+ bio_out = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT);
+ bio_err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT);
+#ifdef __VMS
+ bio_out = BIO_push(BIO_new(BIO_f_linebuffer()), bio_out);
+ bio_err = BIO_push(BIO_new(BIO_f_linebuffer()), bio_err);
+#endif
+
+ OPENSSL_assert(bio_in != NULL);
+ OPENSSL_assert(bio_out != NULL);
+ OPENSSL_assert(bio_err != NULL);
+
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_AMOUNT:
+ arg = opt_arg();
+ amount = strtoul(arg, &endptr, 10);
+ if (endptr[0] != '\0') {
+ BIO_printf(bio_err,
+ "%s: -n argument isn't a decimal number: %s",
+ progname, arg);
+ return 0;
+ }
+ if (amount < 1) {
+ BIO_printf(bio_err, "%s: must set up at least one filter",
+ progname);
+ return 0;
+ }
+ if (!setup_bio_chain(progname)) {
+ BIO_printf(bio_err, "%s: failed setting up filter chain",
+ progname);
+ return 0;
+ }
+ break;
+ case OPT_INDENT:
+ if (chain == NULL) {
+ BIO_printf(bio_err, "%s: -i given before -n", progname);
+ return 0;
+ }
+ arg = opt_arg();
+ colon = strchr(arg, ':');
+ idx = 0;
+ if (colon != NULL) {
+ idx = strtoul(arg, &endptr, 10);
+ if (endptr[0] != ':') {
+ BIO_printf(bio_err,
+ "%s: -i index isn't a decimal number: %s",
+ progname, arg);
+ return 0;
+ }
+ colon++;
+ } else {
+ colon = arg;
+ }
+ indent = strtoul(colon, &endptr, 10);
+ if (endptr[0] != '\0') {
+ BIO_printf(bio_err,
+ "%s: -i value isn't a decimal number: %s",
+ progname, arg);
+ return 0;
+ }
+ if (idx >= amount) {
+ BIO_printf(bio_err, "%s: index (%zu) not within range 0..%zu",
+ progname, idx, amount - 1);
+ return 0;
+ }
+ if (BIO_set_indent(chain[idx], (long)indent) <= 0) {
+ BIO_printf(bio_err, "%s: failed setting indentation: %s",
+ progname, arg);
+ return 0;
+ }
+ break;
+ case OPT_PREFIX:
+ if (chain == NULL) {
+ BIO_printf(bio_err, "%s: -p given before -n", progname);
+ return 0;
+ }
+ arg = opt_arg();
+ colon = strchr(arg, ':');
+ idx = 0;
+ if (colon != NULL) {
+ idx = strtoul(arg, &endptr, 10);
+ if (endptr[0] != ':') {
+ BIO_printf(bio_err,
+ "%s: -p index isn't a decimal number: %s",
+ progname, arg);
+ return 0;
+ }
+ colon++;
+ } else {
+ colon = arg;
+ }
+ if (idx >= amount) {
+ BIO_printf(bio_err, "%s: index (%zu) not within range 0..%zu",
+ progname, idx, amount - 1);
+ return 0;
+ }
+ if (BIO_set_prefix(chain[idx], colon) <= 0) {
+ BIO_printf(bio_err, "%s: failed setting prefix: %s",
+ progname, arg);
+ return 0;
+ }
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+ return 1;
+}
+
+int main(int argc, char **argv)
+{
+ int rv = EXIT_SUCCESS;
+
+ opt_init(argc, argv, options);
+ rv = (setup() && run_pipe()) ? EXIT_SUCCESS : EXIT_FAILURE;
+ cleanup();
+ return rv;
+}
diff --git a/test/bio_readbuffer_test.c b/test/bio_readbuffer_test.c
new file mode 100644
index 000000000000..58a03c216365
--- /dev/null
+++ b/test/bio_readbuffer_test.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/bio.h>
+#include "testutil.h"
+
+static const char *filename = NULL;
+
+/*
+ * Test that a BIO_f_readbuffer() with a BIO_new_file() behaves nicely if
+ * BIO_gets() and BIO_read_ex() are both called.
+ * Since the BIO_gets() calls buffer the reads, the BIO_read_ex() should
+ * still be able to read the buffered data if we seek back to the start.
+ *
+ * The following cases are tested using tstid:
+ * 0 : Just use BIO_read_ex().
+ * 1 : Try a few reads using BIO_gets() before using BIO_read_ex()
+ * 2 : Read the entire file using BIO_gets() before using BIO_read_ex().
+ */
+static int test_readbuffer_file_bio(int tstid)
+{
+ int ret = 0, len, partial;
+ BIO *in = NULL, *in_bio = NULL, *readbuf_bio = NULL;
+ char buf[255];
+ char expected[4096];
+ size_t readbytes = 0, bytes = 0, count = 0;
+
+ /* Open a file BIO and read all the data */
+ if (!TEST_ptr(in = BIO_new_file(filename, "r"))
+ || !TEST_int_eq(BIO_read_ex(in, expected, sizeof(expected),
+ &readbytes), 1)
+ || !TEST_int_lt(readbytes, sizeof(expected)))
+ goto err;
+ BIO_free(in);
+ in = NULL;
+
+ /* Create a new file bio that sits under a readbuffer BIO */
+ if (!TEST_ptr(readbuf_bio = BIO_new(BIO_f_readbuffer()))
+ || !TEST_ptr(in_bio = BIO_new_file(filename, "r")))
+ goto err;
+
+ in_bio = BIO_push(readbuf_bio, in_bio);
+ readbuf_bio = NULL;
+
+ if (!TEST_int_eq(BIO_tell(in_bio), 0))
+ goto err;
+
+ if (tstid != 0) {
+ partial = 4;
+ while (!BIO_eof(in_bio)) {
+ len = BIO_gets(in_bio, buf, sizeof(buf));
+ if (len == 0) {
+ if (!TEST_true(BIO_eof(in_bio)))
+ goto err;
+ } else {
+ if (!TEST_int_gt(len, 0)
+ || !TEST_int_le(len, (int)sizeof(buf) - 1))
+ goto err;
+ if (!TEST_true(buf[len] == 0))
+ goto err;
+ if (len > 1
+ && !BIO_eof(in_bio)
+ && len != ((int)sizeof(buf) - 1)
+ && !TEST_true(buf[len - 1] == '\n'))
+ goto err;
+ }
+ if (tstid == 1 && --partial == 0)
+ break;
+ }
+ }
+ if (!TEST_int_eq(BIO_seek(in_bio, 0), 1))
+ goto err;
+
+ len = 8; /* Do a small partial read to start with */
+ while (!BIO_eof(in_bio)) {
+ if (!TEST_int_eq(BIO_read_ex(in_bio, buf, len, &bytes), 1))
+ break;
+ if (!TEST_mem_eq(buf, bytes, expected + count, bytes))
+ goto err;
+ count += bytes;
+ len = sizeof(buf); /* fill the buffer on subsequent reads */
+ }
+ if (!TEST_int_eq(count, readbytes))
+ goto err;
+ ret = 1;
+err:
+ BIO_free(in);
+ BIO_free_all(in_bio);
+ BIO_free(readbuf_bio);
+ return ret;
+}
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("file\n"),
+ { OPT_HELP_STR, 1, '-', "file\tFile to run tests on.\n" },
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_TEST_CASES:
+ break;
+ default:
+ return 0;
+ }
+ }
+ filename = test_get_argument(0);
+
+ ADD_ALL_TESTS(test_readbuffer_file_bio, 3);
+ return 1;
+}
diff --git a/test/bioprinttest.c b/test/bioprinttest.c
new file mode 100644
index 000000000000..04d1613c6cf4
--- /dev/null
+++ b/test/bioprinttest.c
@@ -0,0 +1,362 @@
+/*
+ * Copyright 2016-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
+ */
+
+#define TESTUTIL_NO_size_t_COMPARISON
+
+#include <stdio.h>
+#include <string.h>
+#include <openssl/bio.h>
+#include "internal/numbers.h"
+#include "testutil.h"
+#include "testutil/output.h"
+
+#define nelem(x) (int)(sizeof(x) / sizeof((x)[0]))
+
+static int justprint = 0;
+
+static char *fpexpected[][10][5] = {
+ {
+ /* 00 */ { "0.0000e+00", "0.0000", "0", "0.0000E+00", "0" },
+ /* 01 */ { "6.7000e-01", "0.6700", "0.67", "6.7000E-01", "0.67" },
+ /* 02 */ { "6.6667e-01", "0.6667", "0.6667", "6.6667E-01", "0.6667" },
+ /* 03 */ { "6.6667e-04", "0.0007", "0.0006667", "6.6667E-04", "0.0006667" },
+ /* 04 */ { "6.6667e-05", "0.0001", "6.667e-05", "6.6667E-05", "6.667E-05" },
+ /* 05 */ { "6.6667e+00", "6.6667", "6.667", "6.6667E+00", "6.667" },
+ /* 06 */ { "6.6667e+01", "66.6667", "66.67", "6.6667E+01", "66.67" },
+ /* 07 */ { "6.6667e+02", "666.6667", "666.7", "6.6667E+02", "666.7" },
+ /* 08 */ { "6.6667e+03", "6666.6667", "6667", "6.6667E+03", "6667" },
+ /* 09 */ { "6.6667e+04", "66666.6667", "6.667e+04", "6.6667E+04", "6.667E+04" },
+ },
+ {
+ /* 10 */ { "0.00000e+00", "0.00000", "0", "0.00000E+00", "0" },
+ /* 11 */ { "6.70000e-01", "0.67000", "0.67", "6.70000E-01", "0.67" },
+ /* 12 */ { "6.66667e-01", "0.66667", "0.66667", "6.66667E-01", "0.66667" },
+ /* 13 */ { "6.66667e-04", "0.00067", "0.00066667", "6.66667E-04", "0.00066667" },
+ /* 14 */ { "6.66667e-05", "0.00007", "6.6667e-05", "6.66667E-05", "6.6667E-05" },
+ /* 15 */ { "6.66667e+00", "6.66667", "6.6667", "6.66667E+00", "6.6667" },
+ /* 16 */ { "6.66667e+01", "66.66667", "66.667", "6.66667E+01", "66.667" },
+ /* 17 */ { "6.66667e+02", "666.66667", "666.67", "6.66667E+02", "666.67" },
+ /* 18 */ { "6.66667e+03", "6666.66667", "6666.7", "6.66667E+03", "6666.7" },
+ /* 19 */ { "6.66667e+04", "66666.66667", "66667", "6.66667E+04", "66667" },
+ },
+ {
+ /* 20 */ { " 0.0000e+00", " 0.0000", " 0", " 0.0000E+00", " 0" },
+ /* 21 */ { " 6.7000e-01", " 0.6700", " 0.67", " 6.7000E-01", " 0.67" },
+ /* 22 */ { " 6.6667e-01", " 0.6667", " 0.6667", " 6.6667E-01", " 0.6667" },
+ /* 23 */ { " 6.6667e-04", " 0.0007", " 0.0006667", " 6.6667E-04", " 0.0006667" },
+ /* 24 */ { " 6.6667e-05", " 0.0001", " 6.667e-05", " 6.6667E-05", " 6.667E-05" },
+ /* 25 */ { " 6.6667e+00", " 6.6667", " 6.667", " 6.6667E+00", " 6.667" },
+ /* 26 */ { " 6.6667e+01", " 66.6667", " 66.67", " 6.6667E+01", " 66.67" },
+ /* 27 */ { " 6.6667e+02", " 666.6667", " 666.7", " 6.6667E+02", " 666.7" },
+ /* 28 */ { " 6.6667e+03", " 6666.6667", " 6667", " 6.6667E+03", " 6667" },
+ /* 29 */ { " 6.6667e+04", " 66666.6667", " 6.667e+04", " 6.6667E+04", " 6.667E+04" },
+ },
+ {
+ /* 30 */ { " 0.00000e+00", " 0.00000", " 0", " 0.00000E+00", " 0" },
+ /* 31 */ { " 6.70000e-01", " 0.67000", " 0.67", " 6.70000E-01", " 0.67" },
+ /* 32 */ { " 6.66667e-01", " 0.66667", " 0.66667", " 6.66667E-01", " 0.66667" },
+ /* 33 */ { " 6.66667e-04", " 0.00067", " 0.00066667", " 6.66667E-04", " 0.00066667" },
+ /* 34 */ { " 6.66667e-05", " 0.00007", " 6.6667e-05", " 6.66667E-05", " 6.6667E-05" },
+ /* 35 */ { " 6.66667e+00", " 6.66667", " 6.6667", " 6.66667E+00", " 6.6667" },
+ /* 36 */ { " 6.66667e+01", " 66.66667", " 66.667", " 6.66667E+01", " 66.667" },
+ /* 37 */ { " 6.66667e+02", " 666.66667", " 666.67", " 6.66667E+02", " 666.67" },
+ /* 38 */ { " 6.66667e+03", " 6666.66667", " 6666.7", " 6.66667E+03", " 6666.7" },
+ /* 39 */ { " 6.66667e+04", " 66666.66667", " 66667", " 6.66667E+04", " 66667" },
+ },
+ {
+ /* 40 */ { "0e+00", "0", "0", "0E+00", "0" },
+ /* 41 */ { "7e-01", "1", "0.7", "7E-01", "0.7" },
+ /* 42 */ { "7e-01", "1", "0.7", "7E-01", "0.7" },
+ /* 43 */ { "7e-04", "0", "0.0007", "7E-04", "0.0007" },
+ /* 44 */ { "7e-05", "0", "7e-05", "7E-05", "7E-05" },
+ /* 45 */ { "7e+00", "7", "7", "7E+00", "7" },
+ /* 46 */ { "7e+01", "67", "7e+01", "7E+01", "7E+01" },
+ /* 47 */ { "7e+02", "667", "7e+02", "7E+02", "7E+02" },
+ /* 48 */ { "7e+03", "6667", "7e+03", "7E+03", "7E+03" },
+ /* 49 */ { "7e+04", "66667", "7e+04", "7E+04", "7E+04" },
+ },
+ {
+ /* 50 */ { "0.000000e+00", "0.000000", "0", "0.000000E+00", "0" },
+ /* 51 */ { "6.700000e-01", "0.670000", "0.67", "6.700000E-01", "0.67" },
+ /* 52 */ { "6.666667e-01", "0.666667", "0.666667", "6.666667E-01", "0.666667" },
+ /* 53 */ { "6.666667e-04", "0.000667", "0.000666667", "6.666667E-04", "0.000666667" },
+ /* 54 */ { "6.666667e-05", "0.000067", "6.66667e-05", "6.666667E-05", "6.66667E-05" },
+ /* 55 */ { "6.666667e+00", "6.666667", "6.66667", "6.666667E+00", "6.66667" },
+ /* 56 */ { "6.666667e+01", "66.666667", "66.6667", "6.666667E+01", "66.6667" },
+ /* 57 */ { "6.666667e+02", "666.666667", "666.667", "6.666667E+02", "666.667" },
+ /* 58 */ { "6.666667e+03", "6666.666667", "6666.67", "6.666667E+03", "6666.67" },
+ /* 59 */ { "6.666667e+04", "66666.666667", "66666.7", "6.666667E+04", "66666.7" },
+ },
+ {
+ /* 60 */ { "0.0000e+00", "000.0000", "00000000", "0.0000E+00", "00000000" },
+ /* 61 */ { "6.7000e-01", "000.6700", "00000.67", "6.7000E-01", "00000.67" },
+ /* 62 */ { "6.6667e-01", "000.6667", "000.6667", "6.6667E-01", "000.6667" },
+ /* 63 */ { "6.6667e-04", "000.0007", "0.0006667", "6.6667E-04", "0.0006667" },
+ /* 64 */ { "6.6667e-05", "000.0001", "6.667e-05", "6.6667E-05", "6.667E-05" },
+ /* 65 */ { "6.6667e+00", "006.6667", "0006.667", "6.6667E+00", "0006.667" },
+ /* 66 */ { "6.6667e+01", "066.6667", "00066.67", "6.6667E+01", "00066.67" },
+ /* 67 */ { "6.6667e+02", "666.6667", "000666.7", "6.6667E+02", "000666.7" },
+ /* 68 */ { "6.6667e+03", "6666.6667", "00006667", "6.6667E+03", "00006667" },
+ /* 69 */ { "6.6667e+04", "66666.6667", "6.667e+04", "6.6667E+04", "6.667E+04" },
+ },
+};
+
+typedef struct z_data_st {
+ size_t value;
+ const char *format;
+ const char *expected;
+} z_data;
+
+static z_data zu_data[] = {
+ { SIZE_MAX, "%zu", (sizeof(size_t) == 4 ? "4294967295"
+ : sizeof(size_t) == 8 ? "18446744073709551615"
+ : "") },
+ /*
+ * in 2-complement, the unsigned number divided by two plus one becomes the
+ * smallest possible negative signed number of the corresponding type
+ */
+ { SIZE_MAX / 2 + 1, "%zi", (sizeof(size_t) == 4 ? "-2147483648"
+ : sizeof(size_t) == 8 ? "-9223372036854775808"
+ : "") },
+ { 0, "%zu", "0" },
+ { 0, "%zi", "0" },
+};
+
+static int test_zu(int i)
+{
+ char bio_buf[80];
+ const z_data *data = &zu_data[i];
+
+ BIO_snprintf(bio_buf, sizeof(bio_buf) - 1, data->format, data->value);
+ if (!TEST_str_eq(bio_buf, data->expected))
+ return 0;
+ return 1;
+}
+
+typedef struct j_data_st {
+ uint64_t value;
+ const char *format;
+ const char *expected;
+} j_data;
+
+static j_data jf_data[] = {
+ { 0xffffffffffffffffULL, "%ju", "18446744073709551615" },
+ { 0xffffffffffffffffULL, "%jx", "ffffffffffffffff" },
+ { 0x8000000000000000ULL, "%ju", "9223372036854775808" },
+ /*
+ * These tests imply two's-complement, but it's the only binary
+ * representation we support, see test/sanitytest.c...
+ */
+ { 0x8000000000000000ULL, "%ji", "-9223372036854775808" },
+};
+
+static int test_j(int i)
+{
+ const j_data *data = &jf_data[i];
+ char bio_buf[80];
+
+ BIO_snprintf(bio_buf, sizeof(bio_buf) - 1, data->format, data->value);
+ if (!TEST_str_eq(bio_buf, data->expected))
+ return 0;
+ return 1;
+}
+
+
+/* Precision and width. */
+typedef struct pw_st {
+ int p;
+ const char *w;
+} pw;
+
+static pw pw_params[] = {
+ { 4, "" },
+ { 5, "" },
+ { 4, "12" },
+ { 5, "12" },
+ { 0, "" },
+ { -1, "" },
+ { 4, "08" }
+};
+
+static int dofptest(int test, int sub, double val, const char *width, int prec)
+{
+ static const char *fspecs[] = {
+ "e", "f", "g", "E", "G"
+ };
+ char format[80], result[80];
+ int ret = 1, i;
+
+ for (i = 0; i < nelem(fspecs); i++) {
+ const char *fspec = fspecs[i];
+
+ if (prec >= 0)
+ BIO_snprintf(format, sizeof(format), "%%%s.%d%s", width, prec,
+ fspec);
+ else
+ BIO_snprintf(format, sizeof(format), "%%%s%s", width, fspec);
+ BIO_snprintf(result, sizeof(result), format, val);
+
+ if (justprint) {
+ if (i == 0)
+ printf(" /* %d%d */ { \"%s\"", test, sub, result);
+ else
+ printf(", \"%s\"", result);
+ } else if (!TEST_str_eq(fpexpected[test][sub][i], result)) {
+ TEST_info("test %d format=|%s| exp=|%s|, ret=|%s|",
+ test, format, fpexpected[test][sub][i], result);
+ ret = 0;
+ }
+ }
+ if (justprint)
+ printf(" },\n");
+ return ret;
+}
+
+static int test_fp(int i)
+{
+ int t = 0, r;
+ const double frac = 2.0 / 3.0;
+ const pw *pwp = &pw_params[i];
+
+ if (justprint)
+ printf(" {\n");
+ r = TEST_true(dofptest(i, t++, 0.0, pwp->w, pwp->p))
+ && TEST_true(dofptest(i, t++, 0.67, pwp->w, pwp->p))
+ && TEST_true(dofptest(i, t++, frac, pwp->w, pwp->p))
+ && TEST_true(dofptest(i, t++, frac / 1000, pwp->w, pwp->p))
+ && TEST_true(dofptest(i, t++, frac / 10000, pwp->w, pwp->p))
+ && TEST_true(dofptest(i, t++, 6.0 + frac, pwp->w, pwp->p))
+ && TEST_true(dofptest(i, t++, 66.0 + frac, pwp->w, pwp->p))
+ && TEST_true(dofptest(i, t++, 666.0 + frac, pwp->w, pwp->p))
+ && TEST_true(dofptest(i, t++, 6666.0 + frac, pwp->w, pwp->p))
+ && TEST_true(dofptest(i, t++, 66666.0 + frac, pwp->w, pwp->p));
+ if (justprint)
+ printf(" },\n");
+ return r;
+}
+
+static int test_big(void)
+{
+ char buf[80];
+
+ /* Test excessively big number. Should fail */
+ if (!TEST_int_eq(BIO_snprintf(buf, sizeof(buf),
+ "%f\n", 2 * (double)ULONG_MAX), -1))
+ return 0;
+
+ return 1;
+}
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_PRINT,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "expected", OPT_PRINT, '-', "Output values" },
+ { NULL }
+ };
+ return options;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_PRINT:
+ justprint = 1;
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ ADD_TEST(test_big);
+ ADD_ALL_TESTS(test_fp, nelem(pw_params));
+ ADD_ALL_TESTS(test_zu, nelem(zu_data));
+ ADD_ALL_TESTS(test_j, nelem(jf_data));
+ return 1;
+}
+
+/*
+ * Replace testutil output routines. We do this to eliminate possible sources
+ * of BIO error
+ */
+BIO *bio_out = NULL;
+BIO *bio_err = NULL;
+
+static int tap_level = 0;
+
+void test_open_streams(void)
+{
+}
+
+void test_adjust_streams_tap_level(int level)
+{
+ tap_level = level;
+}
+
+void test_close_streams(void)
+{
+}
+
+/*
+ * This works out as long as caller doesn't use any "fancy" formats.
+ * But we are caller's caller, and test_str_eq is the only one called,
+ * and it uses only "%s", which is not "fancy"...
+ */
+int test_vprintf_stdout(const char *fmt, va_list ap)
+{
+ return fprintf(stdout, "%*s# ", tap_level, "") + vfprintf(stdout, fmt, ap);
+}
+
+int test_vprintf_stderr(const char *fmt, va_list ap)
+{
+ return fprintf(stderr, "%*s# ", tap_level, "") + vfprintf(stderr, fmt, ap);
+}
+
+int test_flush_stdout(void)
+{
+ return fflush(stdout);
+}
+
+int test_flush_stderr(void)
+{
+ return fflush(stderr);
+}
+
+int test_vprintf_tapout(const char *fmt, va_list ap)
+{
+ return fprintf(stdout, "%*s", tap_level, "") + vfprintf(stdout, fmt, ap);
+}
+
+int test_vprintf_taperr(const char *fmt, va_list ap)
+{
+ return fprintf(stderr, "%*s", tap_level, "") + vfprintf(stderr, fmt, ap);
+}
+
+int test_flush_tapout(void)
+{
+ return fflush(stdout);
+}
+
+int test_flush_taperr(void)
+{
+ return fflush(stderr);
+}
+
diff --git a/test/bn_internal_test.c b/test/bn_internal_test.c
new file mode 100644
index 000000000000..7ef398a8b3ed
--- /dev/null
+++ b/test/bn_internal_test.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <openssl/bn.h>
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include "internal/nelem.h"
+#include "internal/numbers.h"
+#include "testutil.h"
+#include "bn_prime.h"
+#include "crypto/bn.h"
+
+static BN_CTX *ctx;
+
+static int test_is_prime_enhanced(void)
+{
+ int ret;
+ int status = 0;
+ BIGNUM *bn = NULL;
+
+ ret = TEST_ptr(bn = BN_new())
+ /* test passing a prime returns the correct status */
+ && TEST_true(BN_set_word(bn, 11))
+ /* return extra parameters related to composite */
+ && TEST_true(ossl_bn_miller_rabin_is_prime(bn, 10, ctx, NULL, 1,
+ &status))
+ && TEST_int_eq(status, BN_PRIMETEST_PROBABLY_PRIME);
+ BN_free(bn);
+ return ret;
+}
+
+static int composites[] = {
+ 9, 21, 77, 81, 265
+};
+
+static int test_is_composite_enhanced(int id)
+{
+ int ret;
+ int status = 0;
+ BIGNUM *bn = NULL;
+
+ ret = TEST_ptr(bn = BN_new())
+ /* negative tests for different composite numbers */
+ && TEST_true(BN_set_word(bn, composites[id]))
+ && TEST_true(ossl_bn_miller_rabin_is_prime(bn, 10, ctx, NULL, 1,
+ &status))
+ && TEST_int_ne(status, BN_PRIMETEST_PROBABLY_PRIME);
+
+ BN_free(bn);
+ return ret;
+}
+
+/* Test that multiplying all the small primes from 3 to 751 equals a constant.
+ * This test is mainly used to test that both 32 and 64 bit are correct.
+ */
+static int test_bn_small_factors(void)
+{
+ int ret = 0, i;
+ BIGNUM *b = NULL;
+
+ if (!(TEST_ptr(b = BN_new()) && TEST_true(BN_set_word(b, 3))))
+ goto err;
+
+ for (i = 1; i < NUMPRIMES; i++) {
+ prime_t p = primes[i];
+ if (p > 3 && p <= 751 && !BN_mul_word(b, p))
+ goto err;
+ if (p > 751)
+ break;
+ }
+ ret = TEST_BN_eq(ossl_bn_get0_small_factors(), b);
+err:
+ BN_free(b);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ if (!TEST_ptr(ctx = BN_CTX_new()))
+ return 0;
+
+ ADD_TEST(test_is_prime_enhanced);
+ ADD_ALL_TESTS(test_is_composite_enhanced, (int)OSSL_NELEM(composites));
+ ADD_TEST(test_bn_small_factors);
+
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ BN_CTX_free(ctx);
+}
+
diff --git a/test/bn_rand_range.h b/test/bn_rand_range.h
new file mode 100644
index 000000000000..2a63ef721966
--- /dev/null
+++ b/test/bn_rand_range.h
@@ -0,0 +1,58 @@
+/*
+ * WARNING: do not edit!
+ * Generated by statistics/bn_rand_range.py in the OpenSSL tool repository.
+ *
+ * Copyright 2019 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
+ */
+
+static const struct {
+ unsigned int range;
+ unsigned int iterations;
+ double critical;
+} rand_range_cases[] = {
+ { 2, 200, 3.841459 },
+ { 3, 300, 5.991465 },
+ { 4, 400, 7.814728 },
+ { 5, 500, 9.487729 },
+ { 6, 600, 11.070498 },
+ { 7, 700, 12.591587 },
+ { 8, 800, 14.067140 },
+ { 9, 900, 15.507313 },
+ { 10, 1000, 16.918978 },
+ { 11, 1100, 18.307038 },
+ { 12, 1200, 19.675138 },
+ { 13, 1300, 21.026070 },
+ { 14, 1400, 22.362032 },
+ { 15, 1500, 23.684791 },
+ { 16, 1600, 24.995790 },
+ { 17, 1700, 26.296228 },
+ { 18, 1800, 27.587112 },
+ { 19, 1900, 28.869299 },
+ { 20, 2000, 30.143527 },
+ { 30, 3000, 42.556968 },
+ { 40, 4000, 54.572228 },
+ { 50, 5000, 66.338649 },
+ { 60, 6000, 77.930524 },
+ { 70, 7000, 89.391208 },
+ { 80, 8000, 100.748619 },
+ { 90, 9000, 112.021986 },
+ { 100, 10000, 123.225221 },
+ { 1000, 10000, 1073.642651 },
+ { 2000, 20000, 2104.128222 },
+ { 3000, 30000, 3127.515432 },
+ { 4000, 40000, 4147.230012 },
+ { 5000, 50000, 5164.598069 },
+ { 6000, 60000, 6180.299514 },
+ { 7000, 70000, 7194.738181 },
+ { 8000, 80000, 8208.177159 },
+ { 9000, 90000, 9220.799176 },
+ { 10000, 100000, 10232.737266 },
+};
+
+static const int binomial_critical = 29;
+
diff --git a/test/bntest.c b/test/bntest.c
new file mode 100644
index 000000000000..2e0dcb9ae379
--- /dev/null
+++ b/test/bntest.c
@@ -0,0 +1,3195 @@
+/*
+ * Copyright 1995-2022 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 <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <openssl/bn.h>
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include "internal/nelem.h"
+#include "internal/numbers.h"
+#include "testutil.h"
+
+/*
+ * Things in boring, not in openssl.
+ */
+#define HAVE_BN_SQRT 0
+
+typedef struct filetest_st {
+ const char *name;
+ int (*func)(STANZA *s);
+} FILETEST;
+
+typedef struct mpitest_st {
+ const char *base10;
+ const char *mpi;
+ size_t mpi_len;
+} MPITEST;
+
+static const int NUM0 = 100; /* number of tests */
+static const int NUM1 = 50; /* additional tests for some functions */
+static BN_CTX *ctx;
+
+/*
+ * Polynomial coefficients used in GFM tests.
+ */
+#ifndef OPENSSL_NO_EC2M
+static int p0[] = { 163, 7, 6, 3, 0, -1 };
+static int p1[] = { 193, 15, 0, -1 };
+#endif
+
+/*
+ * Look for |key| in the stanza and return it or NULL if not found.
+ */
+static const char *findattr(STANZA *s, const char *key)
+{
+ int i = s->numpairs;
+ PAIR *pp = s->pairs;
+
+ for ( ; --i >= 0; pp++)
+ if (OPENSSL_strcasecmp(pp->key, key) == 0)
+ return pp->value;
+ return NULL;
+}
+
+/*
+ * Parse BIGNUM from sparse hex-strings, return |BN_hex2bn| result.
+ */
+static int parse_bigBN(BIGNUM **out, const char *bn_strings[])
+{
+ char *bigstring = glue_strings(bn_strings, NULL);
+ int ret = BN_hex2bn(out, bigstring);
+
+ OPENSSL_free(bigstring);
+ return ret;
+}
+
+/*
+ * Parse BIGNUM, return number of bytes parsed.
+ */
+static int parseBN(BIGNUM **out, const char *in)
+{
+ *out = NULL;
+ return BN_hex2bn(out, in);
+}
+
+static int parsedecBN(BIGNUM **out, const char *in)
+{
+ *out = NULL;
+ return BN_dec2bn(out, in);
+}
+
+static BIGNUM *getBN(STANZA *s, const char *attribute)
+{
+ const char *hex;
+ BIGNUM *ret = NULL;
+
+ if ((hex = findattr(s, attribute)) == NULL) {
+ TEST_error("%s:%d: Can't find %s", s->test_file, s->start, attribute);
+ return NULL;
+ }
+
+ if (parseBN(&ret, hex) != (int)strlen(hex)) {
+ TEST_error("Could not decode '%s'", hex);
+ return NULL;
+ }
+ return ret;
+}
+
+static int getint(STANZA *s, int *out, const char *attribute)
+{
+ BIGNUM *ret;
+ BN_ULONG word;
+ int st = 0;
+
+ if (!TEST_ptr(ret = getBN(s, attribute))
+ || !TEST_ulong_le(word = BN_get_word(ret), INT_MAX))
+ goto err;
+
+ *out = (int)word;
+ st = 1;
+ err:
+ BN_free(ret);
+ return st;
+}
+
+static int equalBN(const char *op, const BIGNUM *expected, const BIGNUM *actual)
+{
+ if (BN_cmp(expected, actual) == 0)
+ return 1;
+
+ TEST_error("unexpected %s value", op);
+ TEST_BN_eq(expected, actual);
+ return 0;
+}
+
+/*
+ * Return a "random" flag for if a BN should be negated.
+ */
+static int rand_neg(void)
+{
+ static unsigned int neg = 0;
+ static int sign[8] = { 0, 0, 0, 1, 1, 0, 1, 1 };
+
+ return sign[(neg++) % 8];
+}
+
+static int test_swap(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL;
+ int top, cond, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new()))
+ goto err;
+
+ if (!(TEST_true(BN_bntest_rand(a, 1024, 1, 0))
+ && TEST_true(BN_bntest_rand(b, 1024, 1, 0))
+ && TEST_ptr(BN_copy(c, a))
+ && TEST_ptr(BN_copy(d, b))))
+ goto err;
+ top = BN_num_bits(a) / BN_BITS2;
+
+ /* regular swap */
+ BN_swap(a, b);
+ if (!equalBN("swap", a, d)
+ || !equalBN("swap", b, c))
+ goto err;
+
+ /* conditional swap: true */
+ cond = 1;
+ BN_consttime_swap(cond, a, b, top);
+ if (!equalBN("cswap true", a, c)
+ || !equalBN("cswap true", b, d))
+ goto err;
+
+ /* conditional swap: false */
+ cond = 0;
+ BN_consttime_swap(cond, a, b, top);
+ if (!equalBN("cswap false", a, c)
+ || !equalBN("cswap false", b, d))
+ goto err;
+
+ /* same tests but checking flag swap */
+ BN_set_flags(a, BN_FLG_CONSTTIME);
+
+ BN_swap(a, b);
+ if (!equalBN("swap, flags", a, d)
+ || !equalBN("swap, flags", b, c)
+ || !TEST_true(BN_get_flags(b, BN_FLG_CONSTTIME))
+ || !TEST_false(BN_get_flags(a, BN_FLG_CONSTTIME)))
+ goto err;
+
+ cond = 1;
+ BN_consttime_swap(cond, a, b, top);
+ if (!equalBN("cswap true, flags", a, c)
+ || !equalBN("cswap true, flags", b, d)
+ || !TEST_true(BN_get_flags(a, BN_FLG_CONSTTIME))
+ || !TEST_false(BN_get_flags(b, BN_FLG_CONSTTIME)))
+ goto err;
+
+ cond = 0;
+ BN_consttime_swap(cond, a, b, top);
+ if (!equalBN("cswap false, flags", a, c)
+ || !equalBN("cswap false, flags", b, d)
+ || !TEST_true(BN_get_flags(a, BN_FLG_CONSTTIME))
+ || !TEST_false(BN_get_flags(b, BN_FLG_CONSTTIME)))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ BN_free(d);
+ return st;
+}
+
+static int test_sub(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL;
+ int i, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(c = BN_new()))
+ goto err;
+
+ for (i = 0; i < NUM0 + NUM1; i++) {
+ if (i < NUM1) {
+ if (!(TEST_true(BN_bntest_rand(a, 512, 0, 0)))
+ && TEST_ptr(BN_copy(b, a))
+ && TEST_int_ne(BN_set_bit(a, i), 0)
+ && TEST_true(BN_add_word(b, i)))
+ goto err;
+ } else {
+ if (!TEST_true(BN_bntest_rand(b, 400 + i - NUM1, 0, 0)))
+ goto err;
+ BN_set_negative(a, rand_neg());
+ BN_set_negative(b, rand_neg());
+ }
+ if (!(TEST_true(BN_sub(c, a, b))
+ && TEST_true(BN_add(c, c, b))
+ && TEST_true(BN_sub(c, c, a))
+ && TEST_BN_eq_zero(c)))
+ goto err;
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ return st;
+}
+
+static int test_div_recip(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL, *e = NULL;
+ BN_RECP_CTX *recp = NULL;
+ int st = 0, i;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new())
+ || !TEST_ptr(e = BN_new())
+ || !TEST_ptr(recp = BN_RECP_CTX_new()))
+ goto err;
+
+ for (i = 0; i < NUM0 + NUM1; i++) {
+ if (i < NUM1) {
+ if (!(TEST_true(BN_bntest_rand(a, 400, 0, 0))
+ && TEST_ptr(BN_copy(b, a))
+ && TEST_true(BN_lshift(a, a, i))
+ && TEST_true(BN_add_word(a, i))))
+ goto err;
+ } else {
+ if (!(TEST_true(BN_bntest_rand(b, 50 + 3 * (i - NUM1), 0, 0))))
+ goto err;
+ }
+ BN_set_negative(a, rand_neg());
+ BN_set_negative(b, rand_neg());
+ if (!(TEST_true(BN_RECP_CTX_set(recp, b, ctx))
+ && TEST_true(BN_div_recp(d, c, a, recp, ctx))
+ && TEST_true(BN_mul(e, d, b, ctx))
+ && TEST_true(BN_add(d, e, c))
+ && TEST_true(BN_sub(d, d, a))
+ && TEST_BN_eq_zero(d)))
+ goto err;
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ BN_free(d);
+ BN_free(e);
+ BN_RECP_CTX_free(recp);
+ return st;
+}
+
+static struct {
+ int n, divisor, result, remainder;
+} signed_mod_tests[] = {
+ { 10, 3, 3, 1 },
+ { -10, 3, -3, -1 },
+ { 10, -3, -3, 1 },
+ { -10, -3, 3, -1 },
+};
+
+static BIGNUM *set_signed_bn(int value)
+{
+ BIGNUM *bn = BN_new();
+
+ if (bn == NULL)
+ return NULL;
+ if (!BN_set_word(bn, value < 0 ? -value : value)) {
+ BN_free(bn);
+ return NULL;
+ }
+ BN_set_negative(bn, value < 0);
+ return bn;
+}
+
+static int test_signed_mod_replace_ab(int n)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = set_signed_bn(signed_mod_tests[n].n))
+ || !TEST_ptr(b = set_signed_bn(signed_mod_tests[n].divisor))
+ || !TEST_ptr(c = set_signed_bn(signed_mod_tests[n].result))
+ || !TEST_ptr(d = set_signed_bn(signed_mod_tests[n].remainder)))
+ goto err;
+
+ if (TEST_true(BN_div(a, b, a, b, ctx))
+ && TEST_BN_eq(a, c)
+ && TEST_BN_eq(b, d))
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ BN_free(d);
+ return st;
+}
+
+static int test_signed_mod_replace_ba(int n)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = set_signed_bn(signed_mod_tests[n].n))
+ || !TEST_ptr(b = set_signed_bn(signed_mod_tests[n].divisor))
+ || !TEST_ptr(c = set_signed_bn(signed_mod_tests[n].result))
+ || !TEST_ptr(d = set_signed_bn(signed_mod_tests[n].remainder)))
+ goto err;
+
+ if (TEST_true(BN_div(b, a, a, b, ctx))
+ && TEST_BN_eq(b, c)
+ && TEST_BN_eq(a, d))
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ BN_free(d);
+ return st;
+}
+
+static int test_mod(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL, *e = NULL;
+ int st = 0, i;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new())
+ || !TEST_ptr(e = BN_new()))
+ goto err;
+
+ if (!(TEST_true(BN_bntest_rand(a, 1024, 0, 0))))
+ goto err;
+ for (i = 0; i < NUM0; i++) {
+ if (!(TEST_true(BN_bntest_rand(b, 450 + i * 10, 0, 0))))
+ goto err;
+ BN_set_negative(a, rand_neg());
+ BN_set_negative(b, rand_neg());
+ if (!(TEST_true(BN_mod(c, a, b, ctx))
+ && TEST_true(BN_div(d, e, a, b, ctx))
+ && TEST_BN_eq(e, c)
+ && TEST_true(BN_mul(c, d, b, ctx))
+ && TEST_true(BN_add(d, c, e))
+ && TEST_BN_eq(d, a)))
+ goto err;
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ BN_free(d);
+ BN_free(e);
+ return st;
+}
+
+static const char *bn1strings[] = {
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFF00",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF",
+ NULL
+};
+
+static const char *bn2strings[] = {
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFF0000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "0000000000000000000000000000000000000000000000000000000000000000",
+ "000000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000",
+ NULL
+};
+
+/*
+ * Test constant-time modular exponentiation with 1024-bit inputs, which on
+ * x86_64 cause a different code branch to be taken.
+ */
+static int test_modexp_mont5(void)
+{
+ BIGNUM *a = NULL, *p = NULL, *m = NULL, *d = NULL, *e = NULL;
+ BIGNUM *b = NULL, *n = NULL, *c = NULL;
+ BN_MONT_CTX *mont = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(p = BN_new())
+ || !TEST_ptr(m = BN_new())
+ || !TEST_ptr(d = BN_new())
+ || !TEST_ptr(e = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(n = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(mont = BN_MONT_CTX_new()))
+ goto err;
+
+ /* must be odd for montgomery */
+ if (!(TEST_true(BN_bntest_rand(m, 1024, 0, 1))
+ /* Zero exponent */
+ && TEST_true(BN_bntest_rand(a, 1024, 0, 0))))
+ goto err;
+ BN_zero(p);
+
+ if (!TEST_true(BN_mod_exp_mont_consttime(d, a, p, m, ctx, NULL)))
+ goto err;
+ if (!TEST_BN_eq_one(d))
+ goto err;
+
+ /* Regression test for carry bug in mulx4x_mont */
+ if (!(TEST_true(BN_hex2bn(&a,
+ "7878787878787878787878787878787878787878787878787878787878787878"
+ "7878787878787878787878787878787878787878787878787878787878787878"
+ "7878787878787878787878787878787878787878787878787878787878787878"
+ "7878787878787878787878787878787878787878787878787878787878787878"))
+ && TEST_true(BN_hex2bn(&b,
+ "095D72C08C097BA488C5E439C655A192EAFB6380073D8C2664668EDDB4060744"
+ "E16E57FB4EDB9AE10A0CEFCDC28A894F689A128379DB279D48A2E20849D68593"
+ "9B7803BCF46CEBF5C533FB0DD35B080593DE5472E3FE5DB951B8BFF9B4CB8F03"
+ "9CC638A5EE8CDD703719F8000E6A9F63BEED5F2FCD52FF293EA05A251BB4AB81"))
+ && TEST_true(BN_hex2bn(&n,
+ "D78AF684E71DB0C39CFF4E64FB9DB567132CB9C50CC98009FEB820B26F2DED9B"
+ "91B9B5E2B83AE0AE4EB4E0523CA726BFBE969B89FD754F674CE99118C3F2D1C5"
+ "D81FDC7C54E02B60262B241D53C040E99E45826ECA37A804668E690E1AFC1CA4"
+ "2C9A15D84D4954425F0B7642FC0BD9D7B24E2618D2DCC9B729D944BADACFDDAF"))))
+ goto err;
+
+ if (!(TEST_true(BN_MONT_CTX_set(mont, n, ctx))
+ && TEST_true(BN_mod_mul_montgomery(c, a, b, mont, ctx))
+ && TEST_true(BN_mod_mul_montgomery(d, b, a, mont, ctx))
+ && TEST_BN_eq(c, d)))
+ goto err;
+
+ /* Regression test for carry bug in sqr[x]8x_mont */
+ if (!(TEST_true(parse_bigBN(&n, bn1strings))
+ && TEST_true(parse_bigBN(&a, bn2strings))))
+ goto err;
+ BN_free(b);
+ if (!(TEST_ptr(b = BN_dup(a))
+ && TEST_true(BN_MONT_CTX_set(mont, n, ctx))
+ && TEST_true(BN_mod_mul_montgomery(c, a, a, mont, ctx))
+ && TEST_true(BN_mod_mul_montgomery(d, a, b, mont, ctx))
+ && TEST_BN_eq(c, d)))
+ goto err;
+
+ /* Regression test for carry bug in bn_sqrx8x_internal */
+ {
+ static const char *ahex[] = {
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFEADBCFC4DAE7FFF908E92820306B",
+ "9544D954000000006C0000000000000000000000000000000000000000000000",
+ "00000000000000000000FF030202FFFFF8FFEBDBCFC4DAE7FFF908E92820306B",
+ "9544D954000000006C000000FF0302030000000000FFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01FC00FF02FFFFFFFF",
+ "00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FCFD",
+ "FCFFFFFFFFFF000000000000000000FF0302030000000000FFFFFFFFFFFFFFFF",
+ "FF00FCFDFDFF030202FF00000000FFFFFFFFFFFFFFFFFF00FCFDFCFFFFFFFFFF",
+ NULL
+ };
+ static const char *nhex[] = {
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8000000",
+ "00000010000000006C0000000000000000000000000000000000000000000000",
+ "00000000000000000000000000000000000000FFFFFFFFFFFFF8F8F8F8000000",
+ "00000010000000006C000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFF000000000000000000000000000000000000FFFFFFFFFFFFFFFF",
+ "FFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+ NULL
+ };
+
+ if (!(TEST_true(parse_bigBN(&a, ahex))
+ && TEST_true(parse_bigBN(&n, nhex))))
+ goto err;
+ }
+ BN_free(b);
+ if (!(TEST_ptr(b = BN_dup(a))
+ && TEST_true(BN_MONT_CTX_set(mont, n, ctx))))
+ goto err;
+
+ if (!TEST_true(BN_mod_mul_montgomery(c, a, a, mont, ctx))
+ || !TEST_true(BN_mod_mul_montgomery(d, a, b, mont, ctx))
+ || !TEST_BN_eq(c, d))
+ goto err;
+
+ /* Regression test for bug in BN_from_montgomery_word */
+ if (!(TEST_true(BN_hex2bn(&a,
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"))
+ && TEST_true(BN_hex2bn(&n,
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"))
+ && TEST_true(BN_MONT_CTX_set(mont, n, ctx))
+ && TEST_false(BN_mod_mul_montgomery(d, a, a, mont, ctx))))
+ goto err;
+
+ /* Regression test for bug in rsaz_1024_mul_avx2 */
+ if (!(TEST_true(BN_hex2bn(&a,
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2020202020DF"))
+ && TEST_true(BN_hex2bn(&b,
+ "2020202020202020202020202020202020202020202020202020202020202020"
+ "2020202020202020202020202020202020202020202020202020202020202020"
+ "20202020202020FF202020202020202020202020202020202020202020202020"
+ "2020202020202020202020202020202020202020202020202020202020202020"))
+ && TEST_true(BN_hex2bn(&n,
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2020202020FF"))
+ && TEST_true(BN_MONT_CTX_set(mont, n, ctx))
+ && TEST_true(BN_mod_exp_mont_consttime(c, a, b, n, ctx, mont))
+ && TEST_true(BN_mod_exp_mont(d, a, b, n, ctx, mont))
+ && TEST_BN_eq(c, d)))
+ goto err;
+
+ /*
+ * rsaz_1024_mul_avx2 expects fully-reduced inputs.
+ * BN_mod_exp_mont_consttime should reduce the input first.
+ */
+ if (!(TEST_true(BN_hex2bn(&a,
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2020202020DF"))
+ && TEST_true(BN_hex2bn(&b,
+ "1FA53F26F8811C58BE0357897AA5E165693230BC9DF5F01DFA6A2D59229EC69D"
+ "9DE6A89C36E3B6957B22D6FAAD5A3C73AE587B710DBE92E83D3A9A3339A085CB"
+ "B58F508CA4F837924BB52CC1698B7FDC2FD74362456A595A5B58E38E38E38E38"
+ "E38E38E38E38E38E38E38E38E38E38E38E38E38E38E38E38E38E38E38E38E38E"))
+ && TEST_true(BN_hex2bn(&n,
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2020202020DF"))
+ && TEST_true(BN_MONT_CTX_set(mont, n, ctx))
+ && TEST_true(BN_mod_exp_mont_consttime(c, a, b, n, ctx, mont))))
+ goto err;
+ BN_zero(d);
+ if (!TEST_BN_eq(c, d))
+ goto err;
+
+ /*
+ * Regression test for overflow bug in bn_sqr_comba4/8 for
+ * mips-linux-gnu and mipsel-linux-gnu 32bit targets.
+ */
+ {
+ static const char *ehex[] = {
+ "95564994a96c45954227b845a1e99cb939d5a1da99ee91acc962396ae999a9ee",
+ "38603790448f2f7694c242a875f0cad0aae658eba085f312d2febbbd128dd2b5",
+ "8f7d1149f03724215d704344d0d62c587ae3c5939cba4b9b5f3dc5e8e911ef9a",
+ "5ce1a5a749a4989d0d8368f6e1f8cdf3a362a6c97fb02047ff152b480a4ad985",
+ "2d45efdf0770542992afca6a0590d52930434bba96017afbc9f99e112950a8b1",
+ "a359473ec376f329bdae6a19f503be6d4be7393c4e43468831234e27e3838680",
+ "b949390d2e416a3f9759e5349ab4c253f6f29f819a6fe4cbfd27ada34903300e",
+ "da021f62839f5878a36f1bc3085375b00fd5fa3e68d316c0fdace87a97558465",
+ NULL};
+ static const char *phex[] = {
+ "f95dc0f980fbd22e90caa5a387cc4a369f3f830d50dd321c40db8c09a7e1a241",
+ "a536e096622d3280c0c1ba849c1f4a79bf490f60006d081e8cf69960189f0d31",
+ "2cd9e17073a3fba7881b21474a13b334116cb2f5dbf3189a6de3515d0840f053",
+ "c776d3982d391b6d04d642dda5cc6d1640174c09875addb70595658f89efb439",
+ "dc6fbd55f903aadd307982d3f659207f265e1ec6271b274521b7a5e28e8fd7a5",
+ "5df089292820477802a43cf5b6b94e999e8c9944ddebb0d0e95a60f88cb7e813",
+ "ba110d20e1024774107dd02949031864923b3cb8c3f7250d6d1287b0a40db6a4",
+ "7bd5a469518eb65aa207ddc47d8c6e5fc8e0c105be8fc1d4b57b2e27540471d5",
+ NULL};
+ static const char *mhex[] = {
+ "fef15d5ce4625f1bccfbba49fc8439c72bf8202af039a2259678941b60bb4a8f",
+ "2987e965d58fd8cf86a856674d519763d0e1211cc9f8596971050d56d9b35db3",
+ "785866cfbca17cfdbed6060be3629d894f924a89fdc1efc624f80d41a22f1900",
+ "9503fcc3824ef62ccb9208430c26f2d8ceb2c63488ec4c07437aa4c96c43dd8b",
+ "9289ed00a712ff66ee195dc71f5e4ead02172b63c543d69baf495f5fd63ba7bc",
+ "c633bd309c016e37736da92129d0b053d4ab28d21ad7d8b6fab2a8bbdc8ee647",
+ "d2fbcf2cf426cf892e6f5639e0252993965dfb73ccd277407014ea784aaa280c",
+ "b7b03972bc8b0baa72360bdb44b82415b86b2f260f877791cd33ba8f2d65229b",
+ NULL};
+
+ if (!TEST_true(parse_bigBN(&e, ehex))
+ || !TEST_true(parse_bigBN(&p, phex))
+ || !TEST_true(parse_bigBN(&m, mhex))
+ || !TEST_true(BN_mod_exp_mont_consttime(d, e, p, m, ctx, NULL))
+ || !TEST_true(BN_mod_exp_simple(a, e, p, m, ctx))
+ || !TEST_BN_eq(a, d))
+ goto err;
+ }
+
+ /* Zero input */
+ if (!TEST_true(BN_bntest_rand(p, 1024, 0, 0)))
+ goto err;
+ BN_zero(a);
+ if (!TEST_true(BN_mod_exp_mont_consttime(d, a, p, m, ctx, NULL))
+ || !TEST_BN_eq_zero(d))
+ goto err;
+
+ /*
+ * Craft an input whose Montgomery representation is 1, i.e., shorter
+ * than the modulus m, in order to test the const time precomputation
+ * scattering/gathering.
+ */
+ if (!(TEST_true(BN_one(a))
+ && TEST_true(BN_MONT_CTX_set(mont, m, ctx))))
+ goto err;
+ if (!TEST_true(BN_from_montgomery(e, a, mont, ctx))
+ || !TEST_true(BN_mod_exp_mont_consttime(d, e, p, m, ctx, NULL))
+ || !TEST_true(BN_mod_exp_simple(a, e, p, m, ctx))
+ || !TEST_BN_eq(a, d))
+ goto err;
+
+ /* Finally, some regular test vectors. */
+ if (!(TEST_true(BN_bntest_rand(e, 1024, 0, 0))
+ && TEST_true(BN_mod_exp_mont_consttime(d, e, p, m, ctx, NULL))
+ && TEST_true(BN_mod_exp_simple(a, e, p, m, ctx))
+ && TEST_BN_eq(a, d)))
+ goto err;
+
+ st = 1;
+
+ err:
+ BN_MONT_CTX_free(mont);
+ BN_free(a);
+ BN_free(p);
+ BN_free(m);
+ BN_free(d);
+ BN_free(e);
+ BN_free(b);
+ BN_free(n);
+ BN_free(c);
+ return st;
+}
+
+#ifndef OPENSSL_NO_EC2M
+static int test_gf2m_add(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL;
+ int i, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(c = BN_new()))
+ goto err;
+
+ for (i = 0; i < NUM0; i++) {
+ if (!(TEST_true(BN_rand(a, 512, 0, 0))
+ && TEST_ptr(BN_copy(b, BN_value_one()))))
+ goto err;
+ BN_set_negative(a, rand_neg());
+ BN_set_negative(b, rand_neg());
+ if (!(TEST_true(BN_GF2m_add(c, a, b))
+ /* Test that two added values have the correct parity. */
+ && TEST_false((BN_is_odd(a) && BN_is_odd(c))
+ || (!BN_is_odd(a) && !BN_is_odd(c)))))
+ goto err;
+ if (!(TEST_true(BN_GF2m_add(c, c, c))
+ /* Test that c + c = 0. */
+ && TEST_BN_eq_zero(c)))
+ goto err;
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ return st;
+}
+
+static int test_gf2m_mod(void)
+{
+ BIGNUM *a = NULL, *b[2] = {NULL,NULL}, *c = NULL, *d = NULL, *e = NULL;
+ int i, j, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b[0] = BN_new())
+ || !TEST_ptr(b[1] = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new())
+ || !TEST_ptr(e = BN_new()))
+ goto err;
+
+ if (!(TEST_true(BN_GF2m_arr2poly(p0, b[0]))
+ && TEST_true(BN_GF2m_arr2poly(p1, b[1]))))
+ goto err;
+
+ for (i = 0; i < NUM0; i++) {
+ if (!TEST_true(BN_bntest_rand(a, 1024, 0, 0)))
+ goto err;
+ for (j = 0; j < 2; j++) {
+ if (!(TEST_true(BN_GF2m_mod(c, a, b[j]))
+ && TEST_true(BN_GF2m_add(d, a, c))
+ && TEST_true(BN_GF2m_mod(e, d, b[j]))
+ /* Test that a + (a mod p) mod p == 0. */
+ && TEST_BN_eq_zero(e)))
+ goto err;
+ }
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b[0]);
+ BN_free(b[1]);
+ BN_free(c);
+ BN_free(d);
+ BN_free(e);
+ return st;
+}
+
+static int test_gf2m_mul(void)
+{
+ BIGNUM *a, *b[2] = {NULL, NULL}, *c = NULL, *d = NULL;
+ BIGNUM *e = NULL, *f = NULL, *g = NULL, *h = NULL;
+ int i, j, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b[0] = BN_new())
+ || !TEST_ptr(b[1] = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new())
+ || !TEST_ptr(e = BN_new())
+ || !TEST_ptr(f = BN_new())
+ || !TEST_ptr(g = BN_new())
+ || !TEST_ptr(h = BN_new()))
+ goto err;
+
+ if (!(TEST_true(BN_GF2m_arr2poly(p0, b[0]))
+ && TEST_true(BN_GF2m_arr2poly(p1, b[1]))))
+ goto err;
+
+ for (i = 0; i < NUM0; i++) {
+ if (!(TEST_true(BN_bntest_rand(a, 1024, 0, 0))
+ && TEST_true(BN_bntest_rand(c, 1024, 0, 0))
+ && TEST_true(BN_bntest_rand(d, 1024, 0, 0))))
+ goto err;
+ for (j = 0; j < 2; j++) {
+ if (!(TEST_true(BN_GF2m_mod_mul(e, a, c, b[j], ctx))
+ && TEST_true(BN_GF2m_add(f, a, d))
+ && TEST_true(BN_GF2m_mod_mul(g, f, c, b[j], ctx))
+ && TEST_true(BN_GF2m_mod_mul(h, d, c, b[j], ctx))
+ && TEST_true(BN_GF2m_add(f, e, g))
+ && TEST_true(BN_GF2m_add(f, f, h))
+ /* Test that (a+d)*c = a*c + d*c. */
+ && TEST_BN_eq_zero(f)))
+ goto err;
+ }
+ }
+ st = 1;
+
+ err:
+ BN_free(a);
+ BN_free(b[0]);
+ BN_free(b[1]);
+ BN_free(c);
+ BN_free(d);
+ BN_free(e);
+ BN_free(f);
+ BN_free(g);
+ BN_free(h);
+ return st;
+}
+
+static int test_gf2m_sqr(void)
+{
+ BIGNUM *a = NULL, *b[2] = {NULL,NULL}, *c = NULL, *d = NULL;
+ int i, j, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b[0] = BN_new())
+ || !TEST_ptr(b[1] = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new()))
+ goto err;
+
+ if (!(TEST_true(BN_GF2m_arr2poly(p0, b[0]))
+ && TEST_true(BN_GF2m_arr2poly(p1, b[1]))))
+ goto err;
+
+ for (i = 0; i < NUM0; i++) {
+ if (!TEST_true(BN_bntest_rand(a, 1024, 0, 0)))
+ goto err;
+ for (j = 0; j < 2; j++) {
+ if (!(TEST_true(BN_GF2m_mod_sqr(c, a, b[j], ctx))
+ && TEST_true(BN_copy(d, a))
+ && TEST_true(BN_GF2m_mod_mul(d, a, d, b[j], ctx))
+ && TEST_true(BN_GF2m_add(d, c, d))
+ /* Test that a*a = a^2. */
+ && TEST_BN_eq_zero(d)))
+ goto err;
+ }
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b[0]);
+ BN_free(b[1]);
+ BN_free(c);
+ BN_free(d);
+ return st;
+}
+
+static int test_gf2m_modinv(void)
+{
+ BIGNUM *a = NULL, *b[2] = {NULL,NULL}, *c = NULL, *d = NULL;
+ int i, j, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b[0] = BN_new())
+ || !TEST_ptr(b[1] = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new()))
+ goto err;
+
+ /* Test that a non-sensical, too small value causes a failure */
+ if (!TEST_true(BN_one(b[0])))
+ goto err;
+ if (!TEST_true(BN_bntest_rand(a, 512, 0, 0)))
+ goto err;
+ if (!TEST_false(BN_GF2m_mod_inv(c, a, b[0], ctx)))
+ goto err;
+
+ if (!(TEST_true(BN_GF2m_arr2poly(p0, b[0]))
+ && TEST_true(BN_GF2m_arr2poly(p1, b[1]))))
+ goto err;
+
+ for (i = 0; i < NUM0; i++) {
+ if (!TEST_true(BN_bntest_rand(a, 512, 0, 0)))
+ goto err;
+ for (j = 0; j < 2; j++) {
+ if (!(TEST_true(BN_GF2m_mod_inv(c, a, b[j], ctx))
+ && TEST_true(BN_GF2m_mod_mul(d, a, c, b[j], ctx))
+ /* Test that ((1/a)*a) = 1. */
+ && TEST_BN_eq_one(d)))
+ goto err;
+ }
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b[0]);
+ BN_free(b[1]);
+ BN_free(c);
+ BN_free(d);
+ return st;
+}
+
+static int test_gf2m_moddiv(void)
+{
+ BIGNUM *a = NULL, *b[2] = {NULL,NULL}, *c = NULL, *d = NULL;
+ BIGNUM *e = NULL, *f = NULL;
+ int i, j, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b[0] = BN_new())
+ || !TEST_ptr(b[1] = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new())
+ || !TEST_ptr(e = BN_new())
+ || !TEST_ptr(f = BN_new()))
+ goto err;
+
+ if (!(TEST_true(BN_GF2m_arr2poly(p0, b[0]))
+ && TEST_true(BN_GF2m_arr2poly(p1, b[1]))))
+ goto err;
+
+ for (i = 0; i < NUM0; i++) {
+ if (!(TEST_true(BN_bntest_rand(a, 512, 0, 0))
+ && TEST_true(BN_bntest_rand(c, 512, 0, 0))))
+ goto err;
+ for (j = 0; j < 2; j++) {
+ if (!(TEST_true(BN_GF2m_mod_div(d, a, c, b[j], ctx))
+ && TEST_true(BN_GF2m_mod_mul(e, d, c, b[j], ctx))
+ && TEST_true(BN_GF2m_mod_div(f, a, e, b[j], ctx))
+ /* Test that ((a/c)*c)/a = 1. */
+ && TEST_BN_eq_one(f)))
+ goto err;
+ }
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b[0]);
+ BN_free(b[1]);
+ BN_free(c);
+ BN_free(d);
+ BN_free(e);
+ BN_free(f);
+ return st;
+}
+
+static int test_gf2m_modexp(void)
+{
+ BIGNUM *a = NULL, *b[2] = {NULL,NULL}, *c = NULL, *d = NULL;
+ BIGNUM *e = NULL, *f = NULL;
+ int i, j, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b[0] = BN_new())
+ || !TEST_ptr(b[1] = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new())
+ || !TEST_ptr(e = BN_new())
+ || !TEST_ptr(f = BN_new()))
+ goto err;
+
+ if (!(TEST_true(BN_GF2m_arr2poly(p0, b[0]))
+ && TEST_true(BN_GF2m_arr2poly(p1, b[1]))))
+ goto err;
+
+ for (i = 0; i < NUM0; i++) {
+ if (!(TEST_true(BN_bntest_rand(a, 512, 0, 0))
+ && TEST_true(BN_bntest_rand(c, 512, 0, 0))
+ && TEST_true(BN_bntest_rand(d, 512, 0, 0))))
+ goto err;
+ for (j = 0; j < 2; j++) {
+ if (!(TEST_true(BN_GF2m_mod_exp(e, a, c, b[j], ctx))
+ && TEST_true(BN_GF2m_mod_exp(f, a, d, b[j], ctx))
+ && TEST_true(BN_GF2m_mod_mul(e, e, f, b[j], ctx))
+ && TEST_true(BN_add(f, c, d))
+ && TEST_true(BN_GF2m_mod_exp(f, a, f, b[j], ctx))
+ && TEST_true(BN_GF2m_add(f, e, f))
+ /* Test that a^(c+d)=a^c*a^d. */
+ && TEST_BN_eq_zero(f)))
+ goto err;
+ }
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b[0]);
+ BN_free(b[1]);
+ BN_free(c);
+ BN_free(d);
+ BN_free(e);
+ BN_free(f);
+ return st;
+}
+
+static int test_gf2m_modsqrt(void)
+{
+ BIGNUM *a = NULL, *b[2] = {NULL,NULL}, *c = NULL, *d = NULL;
+ BIGNUM *e = NULL, *f = NULL;
+ int i, j, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b[0] = BN_new())
+ || !TEST_ptr(b[1] = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new())
+ || !TEST_ptr(e = BN_new())
+ || !TEST_ptr(f = BN_new()))
+ goto err;
+
+ if (!(TEST_true(BN_GF2m_arr2poly(p0, b[0]))
+ && TEST_true(BN_GF2m_arr2poly(p1, b[1]))))
+ goto err;
+
+ for (i = 0; i < NUM0; i++) {
+ if (!TEST_true(BN_bntest_rand(a, 512, 0, 0)))
+ goto err;
+
+ for (j = 0; j < 2; j++) {
+ if (!(TEST_true(BN_GF2m_mod(c, a, b[j]))
+ && TEST_true(BN_GF2m_mod_sqrt(d, a, b[j], ctx))
+ && TEST_true(BN_GF2m_mod_sqr(e, d, b[j], ctx))
+ && TEST_true(BN_GF2m_add(f, c, e))
+ /* Test that d^2 = a, where d = sqrt(a). */
+ && TEST_BN_eq_zero(f)))
+ goto err;
+ }
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b[0]);
+ BN_free(b[1]);
+ BN_free(c);
+ BN_free(d);
+ BN_free(e);
+ BN_free(f);
+ return st;
+}
+
+static int test_gf2m_modsolvequad(void)
+{
+ BIGNUM *a = NULL, *b[2] = {NULL,NULL}, *c = NULL, *d = NULL;
+ BIGNUM *e = NULL;
+ int i, j, s = 0, t, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b[0] = BN_new())
+ || !TEST_ptr(b[1] = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new())
+ || !TEST_ptr(e = BN_new()))
+ goto err;
+
+ if (!(TEST_true(BN_GF2m_arr2poly(p0, b[0]))
+ && TEST_true(BN_GF2m_arr2poly(p1, b[1]))))
+ goto err;
+
+ for (i = 0; i < NUM0; i++) {
+ if (!TEST_true(BN_bntest_rand(a, 512, 0, 0)))
+ goto err;
+ for (j = 0; j < 2; j++) {
+ t = BN_GF2m_mod_solve_quad(c, a, b[j], ctx);
+ if (t) {
+ s++;
+ if (!(TEST_true(BN_GF2m_mod_sqr(d, c, b[j], ctx))
+ && TEST_true(BN_GF2m_add(d, c, d))
+ && TEST_true(BN_GF2m_mod(e, a, b[j]))
+ && TEST_true(BN_GF2m_add(e, e, d))
+ /*
+ * Test that solution of quadratic c
+ * satisfies c^2 + c = a.
+ */
+ && TEST_BN_eq_zero(e)))
+ goto err;
+ }
+ }
+ }
+ if (!TEST_int_ge(s, 0)) {
+ TEST_info("%d tests found no roots; probably an error", NUM0);
+ goto err;
+ }
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b[0]);
+ BN_free(b[1]);
+ BN_free(c);
+ BN_free(d);
+ BN_free(e);
+ return st;
+}
+#endif
+
+static int test_kronecker(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *r = NULL, *t = NULL;
+ int i, legendre, kronecker, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(r = BN_new())
+ || !TEST_ptr(t = BN_new()))
+ goto err;
+
+ /*
+ * We test BN_kronecker(a, b, ctx) just for b odd (Jacobi symbol). In
+ * this case we know that if b is prime, then BN_kronecker(a, b, ctx) is
+ * congruent to $a^{(b-1)/2}$, modulo $b$ (Legendre symbol). So we
+ * generate a random prime b and compare these values for a number of
+ * random a's. (That is, we run the Solovay-Strassen primality test to
+ * confirm that b is prime, except that we don't want to test whether b
+ * is prime but whether BN_kronecker works.)
+ */
+
+ if (!TEST_true(BN_generate_prime_ex(b, 512, 0, NULL, NULL, NULL)))
+ goto err;
+ BN_set_negative(b, rand_neg());
+
+ for (i = 0; i < NUM0; i++) {
+ if (!TEST_true(BN_bntest_rand(a, 512, 0, 0)))
+ goto err;
+ BN_set_negative(a, rand_neg());
+
+ /* t := (|b|-1)/2 (note that b is odd) */
+ if (!TEST_true(BN_copy(t, b)))
+ goto err;
+ BN_set_negative(t, 0);
+ if (!TEST_true(BN_sub_word(t, 1)))
+ goto err;
+ if (!TEST_true(BN_rshift1(t, t)))
+ goto err;
+ /* r := a^t mod b */
+ BN_set_negative(b, 0);
+
+ if (!TEST_true(BN_mod_exp_recp(r, a, t, b, ctx)))
+ goto err;
+ BN_set_negative(b, 1);
+
+ if (BN_is_word(r, 1))
+ legendre = 1;
+ else if (BN_is_zero(r))
+ legendre = 0;
+ else {
+ if (!TEST_true(BN_add_word(r, 1)))
+ goto err;
+ if (!TEST_int_eq(BN_ucmp(r, b), 0)) {
+ TEST_info("Legendre symbol computation failed");
+ goto err;
+ }
+ legendre = -1;
+ }
+
+ if (!TEST_int_ge(kronecker = BN_kronecker(a, b, ctx), -1))
+ goto err;
+ /* we actually need BN_kronecker(a, |b|) */
+ if (BN_is_negative(a) && BN_is_negative(b))
+ kronecker = -kronecker;
+
+ if (!TEST_int_eq(legendre, kronecker))
+ goto err;
+ }
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(r);
+ BN_free(t);
+ return st;
+}
+
+static int file_sum(STANZA *s)
+{
+ BIGNUM *a = NULL, *b = NULL, *sum = NULL, *ret = NULL;
+ BN_ULONG b_word;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(b = getBN(s, "B"))
+ || !TEST_ptr(sum = getBN(s, "Sum"))
+ || !TEST_ptr(ret = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_add(ret, a, b))
+ || !equalBN("A + B", sum, ret)
+ || !TEST_true(BN_sub(ret, sum, a))
+ || !equalBN("Sum - A", b, ret)
+ || !TEST_true(BN_sub(ret, sum, b))
+ || !equalBN("Sum - B", a, ret))
+ goto err;
+
+ /*
+ * Test that the functions work when |r| and |a| point to the same BIGNUM,
+ * or when |r| and |b| point to the same BIGNUM.
+ * There is no test for all of |r|, |a|, and |b| pointint to the same BIGNUM.
+ */
+ if (!TEST_true(BN_copy(ret, a))
+ || !TEST_true(BN_add(ret, ret, b))
+ || !equalBN("A + B (r is a)", sum, ret)
+ || !TEST_true(BN_copy(ret, b))
+ || !TEST_true(BN_add(ret, a, ret))
+ || !equalBN("A + B (r is b)", sum, ret)
+ || !TEST_true(BN_copy(ret, sum))
+ || !TEST_true(BN_sub(ret, ret, a))
+ || !equalBN("Sum - A (r is a)", b, ret)
+ || !TEST_true(BN_copy(ret, a))
+ || !TEST_true(BN_sub(ret, sum, ret))
+ || !equalBN("Sum - A (r is b)", b, ret)
+ || !TEST_true(BN_copy(ret, sum))
+ || !TEST_true(BN_sub(ret, ret, b))
+ || !equalBN("Sum - B (r is a)", a, ret)
+ || !TEST_true(BN_copy(ret, b))
+ || !TEST_true(BN_sub(ret, sum, ret))
+ || !equalBN("Sum - B (r is b)", a, ret))
+ goto err;
+
+ /*
+ * Test BN_uadd() and BN_usub() with the prerequisites they are
+ * documented as having. Note that these functions are frequently used
+ * when the prerequisites don't hold. In those cases, they are supposed
+ * to work as if the prerequisite hold, but we don't test that yet.
+ */
+ if (!BN_is_negative(a) && !BN_is_negative(b) && BN_cmp(a, b) >= 0) {
+ if (!TEST_true(BN_uadd(ret, a, b))
+ || !equalBN("A +u B", sum, ret)
+ || !TEST_true(BN_usub(ret, sum, a))
+ || !equalBN("Sum -u A", b, ret)
+ || !TEST_true(BN_usub(ret, sum, b))
+ || !equalBN("Sum -u B", a, ret))
+ goto err;
+ /*
+ * Test that the functions work when |r| and |a| point to the same
+ * BIGNUM, or when |r| and |b| point to the same BIGNUM.
+ * There is no test for all of |r|, |a|, and |b| pointint to the same
+ * BIGNUM.
+ */
+ if (!TEST_true(BN_copy(ret, a))
+ || !TEST_true(BN_uadd(ret, ret, b))
+ || !equalBN("A +u B (r is a)", sum, ret)
+ || !TEST_true(BN_copy(ret, b))
+ || !TEST_true(BN_uadd(ret, a, ret))
+ || !equalBN("A +u B (r is b)", sum, ret)
+ || !TEST_true(BN_copy(ret, sum))
+ || !TEST_true(BN_usub(ret, ret, a))
+ || !equalBN("Sum -u A (r is a)", b, ret)
+ || !TEST_true(BN_copy(ret, a))
+ || !TEST_true(BN_usub(ret, sum, ret))
+ || !equalBN("Sum -u A (r is b)", b, ret)
+ || !TEST_true(BN_copy(ret, sum))
+ || !TEST_true(BN_usub(ret, ret, b))
+ || !equalBN("Sum -u B (r is a)", a, ret)
+ || !TEST_true(BN_copy(ret, b))
+ || !TEST_true(BN_usub(ret, sum, ret))
+ || !equalBN("Sum -u B (r is b)", a, ret))
+ goto err;
+ }
+
+ /*
+ * Test with BN_add_word() and BN_sub_word() if |b| is small enough.
+ */
+ b_word = BN_get_word(b);
+ if (!BN_is_negative(b) && b_word != (BN_ULONG)-1) {
+ if (!TEST_true(BN_copy(ret, a))
+ || !TEST_true(BN_add_word(ret, b_word))
+ || !equalBN("A + B (word)", sum, ret)
+ || !TEST_true(BN_copy(ret, sum))
+ || !TEST_true(BN_sub_word(ret, b_word))
+ || !equalBN("Sum - B (word)", a, ret))
+ goto err;
+ }
+ st = 1;
+
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(sum);
+ BN_free(ret);
+ return st;
+}
+
+static int file_lshift1(STANZA *s)
+{
+ BIGNUM *a = NULL, *lshift1 = NULL, *zero = NULL, *ret = NULL;
+ BIGNUM *two = NULL, *remainder = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(lshift1 = getBN(s, "LShift1"))
+ || !TEST_ptr(zero = BN_new())
+ || !TEST_ptr(ret = BN_new())
+ || !TEST_ptr(two = BN_new())
+ || !TEST_ptr(remainder = BN_new()))
+ goto err;
+
+ BN_zero(zero);
+
+ if (!TEST_true(BN_set_word(two, 2))
+ || !TEST_true(BN_add(ret, a, a))
+ || !equalBN("A + A", lshift1, ret)
+ || !TEST_true(BN_mul(ret, a, two, ctx))
+ || !equalBN("A * 2", lshift1, ret)
+ || !TEST_true(BN_div(ret, remainder, lshift1, two, ctx))
+ || !equalBN("LShift1 / 2", a, ret)
+ || !equalBN("LShift1 % 2", zero, remainder)
+ || !TEST_true(BN_lshift1(ret, a))
+ || !equalBN("A << 1", lshift1, ret)
+ || !TEST_true(BN_rshift1(ret, lshift1))
+ || !equalBN("LShift >> 1", a, ret)
+ || !TEST_true(BN_rshift1(ret, lshift1))
+ || !equalBN("LShift >> 1", a, ret))
+ goto err;
+
+ /* Set the LSB to 1 and test rshift1 again. */
+ if (!TEST_true(BN_set_bit(lshift1, 0))
+ || !TEST_true(BN_div(ret, NULL /* rem */ , lshift1, two, ctx))
+ || !equalBN("(LShift1 | 1) / 2", a, ret)
+ || !TEST_true(BN_rshift1(ret, lshift1))
+ || !equalBN("(LShift | 1) >> 1", a, ret))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(lshift1);
+ BN_free(zero);
+ BN_free(ret);
+ BN_free(two);
+ BN_free(remainder);
+
+ return st;
+}
+
+static int file_lshift(STANZA *s)
+{
+ BIGNUM *a = NULL, *lshift = NULL, *ret = NULL;
+ int n = 0, st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(lshift = getBN(s, "LShift"))
+ || !TEST_ptr(ret = BN_new())
+ || !getint(s, &n, "N"))
+ goto err;
+
+ if (!TEST_true(BN_lshift(ret, a, n))
+ || !equalBN("A << N", lshift, ret)
+ || !TEST_true(BN_rshift(ret, lshift, n))
+ || !equalBN("A >> N", a, ret))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(lshift);
+ BN_free(ret);
+ return st;
+}
+
+static int file_rshift(STANZA *s)
+{
+ BIGNUM *a = NULL, *rshift = NULL, *ret = NULL;
+ int n = 0, st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(rshift = getBN(s, "RShift"))
+ || !TEST_ptr(ret = BN_new())
+ || !getint(s, &n, "N"))
+ goto err;
+
+ if (!TEST_true(BN_rshift(ret, a, n))
+ || !equalBN("A >> N", rshift, ret))
+ goto err;
+
+ /* If N == 1, try with rshift1 as well */
+ if (n == 1) {
+ if (!TEST_true(BN_rshift1(ret, a))
+ || !equalBN("A >> 1 (rshift1)", rshift, ret))
+ goto err;
+ }
+ st = 1;
+
+ err:
+ BN_free(a);
+ BN_free(rshift);
+ BN_free(ret);
+ return st;
+}
+
+static int file_square(STANZA *s)
+{
+ BIGNUM *a = NULL, *square = NULL, *zero = NULL, *ret = NULL;
+ BIGNUM *remainder = NULL, *tmp = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(square = getBN(s, "Square"))
+ || !TEST_ptr(zero = BN_new())
+ || !TEST_ptr(ret = BN_new())
+ || !TEST_ptr(remainder = BN_new()))
+ goto err;
+
+ BN_zero(zero);
+ if (!TEST_true(BN_sqr(ret, a, ctx))
+ || !equalBN("A^2", square, ret)
+ || !TEST_true(BN_mul(ret, a, a, ctx))
+ || !equalBN("A * A", square, ret)
+ || !TEST_true(BN_div(ret, remainder, square, a, ctx))
+ || !equalBN("Square / A", a, ret)
+ || !equalBN("Square % A", zero, remainder))
+ goto err;
+
+#if HAVE_BN_SQRT
+ BN_set_negative(a, 0);
+ if (!TEST_true(BN_sqrt(ret, square, ctx))
+ || !equalBN("sqrt(Square)", a, ret))
+ goto err;
+
+ /* BN_sqrt should fail on non-squares and negative numbers. */
+ if (!TEST_BN_eq_zero(square)) {
+ if (!TEST_ptr(tmp = BN_new())
+ || !TEST_true(BN_copy(tmp, square)))
+ goto err;
+ BN_set_negative(tmp, 1);
+
+ if (!TEST_int_eq(BN_sqrt(ret, tmp, ctx), 0))
+ goto err;
+ ERR_clear_error();
+
+ BN_set_negative(tmp, 0);
+ if (BN_add(tmp, tmp, BN_value_one()))
+ goto err;
+ if (!TEST_int_eq(BN_sqrt(ret, tmp, ctx)))
+ goto err;
+ ERR_clear_error();
+ }
+#endif
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(square);
+ BN_free(zero);
+ BN_free(ret);
+ BN_free(remainder);
+ BN_free(tmp);
+ return st;
+}
+
+static int file_product(STANZA *s)
+{
+ BIGNUM *a = NULL, *b = NULL, *product = NULL, *ret = NULL;
+ BIGNUM *remainder = NULL, *zero = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(b = getBN(s, "B"))
+ || !TEST_ptr(product = getBN(s, "Product"))
+ || !TEST_ptr(ret = BN_new())
+ || !TEST_ptr(remainder = BN_new())
+ || !TEST_ptr(zero = BN_new()))
+ goto err;
+
+ BN_zero(zero);
+
+ if (!TEST_true(BN_mul(ret, a, b, ctx))
+ || !equalBN("A * B", product, ret)
+ || !TEST_true(BN_div(ret, remainder, product, a, ctx))
+ || !equalBN("Product / A", b, ret)
+ || !equalBN("Product % A", zero, remainder)
+ || !TEST_true(BN_div(ret, remainder, product, b, ctx))
+ || !equalBN("Product / B", a, ret)
+ || !equalBN("Product % B", zero, remainder))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(product);
+ BN_free(ret);
+ BN_free(remainder);
+ BN_free(zero);
+ return st;
+}
+
+static int file_quotient(STANZA *s)
+{
+ BIGNUM *a = NULL, *b = NULL, *quotient = NULL, *remainder = NULL;
+ BIGNUM *ret = NULL, *ret2 = NULL, *nnmod = NULL;
+ BN_ULONG b_word, ret_word;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(b = getBN(s, "B"))
+ || !TEST_ptr(quotient = getBN(s, "Quotient"))
+ || !TEST_ptr(remainder = getBN(s, "Remainder"))
+ || !TEST_ptr(ret = BN_new())
+ || !TEST_ptr(ret2 = BN_new())
+ || !TEST_ptr(nnmod = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_div(ret, ret2, a, b, ctx))
+ || !equalBN("A / B", quotient, ret)
+ || !equalBN("A % B", remainder, ret2)
+ || !TEST_true(BN_mul(ret, quotient, b, ctx))
+ || !TEST_true(BN_add(ret, ret, remainder))
+ || !equalBN("Quotient * B + Remainder", a, ret))
+ goto err;
+
+ /*
+ * Test with BN_mod_word() and BN_div_word() if the divisor is
+ * small enough.
+ */
+ b_word = BN_get_word(b);
+ if (!BN_is_negative(b) && b_word != (BN_ULONG)-1) {
+ BN_ULONG remainder_word = BN_get_word(remainder);
+
+ assert(remainder_word != (BN_ULONG)-1);
+ if (!TEST_ptr(BN_copy(ret, a)))
+ goto err;
+ ret_word = BN_div_word(ret, b_word);
+ if (ret_word != remainder_word) {
+#ifdef BN_DEC_FMT1
+ TEST_error(
+ "Got A %% B (word) = " BN_DEC_FMT1 ", wanted " BN_DEC_FMT1,
+ ret_word, remainder_word);
+#else
+ TEST_error("Got A %% B (word) mismatch");
+#endif
+ goto err;
+ }
+ if (!equalBN ("A / B (word)", quotient, ret))
+ goto err;
+
+ ret_word = BN_mod_word(a, b_word);
+ if (ret_word != remainder_word) {
+#ifdef BN_DEC_FMT1
+ TEST_error(
+ "Got A %% B (word) = " BN_DEC_FMT1 ", wanted " BN_DEC_FMT1 "",
+ ret_word, remainder_word);
+#else
+ TEST_error("Got A %% B (word) mismatch");
+#endif
+ goto err;
+ }
+ }
+
+ /* Test BN_nnmod. */
+ if (!BN_is_negative(b)) {
+ if (!TEST_true(BN_copy(nnmod, remainder))
+ || (BN_is_negative(nnmod)
+ && !TEST_true(BN_add(nnmod, nnmod, b)))
+ || !TEST_true(BN_nnmod(ret, a, b, ctx))
+ || !equalBN("A % B (non-negative)", nnmod, ret))
+ goto err;
+ }
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(quotient);
+ BN_free(remainder);
+ BN_free(ret);
+ BN_free(ret2);
+ BN_free(nnmod);
+ return st;
+}
+
+static int file_modmul(STANZA *s)
+{
+ BIGNUM *a = NULL, *b = NULL, *m = NULL, *mod_mul = NULL, *ret = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(b = getBN(s, "B"))
+ || !TEST_ptr(m = getBN(s, "M"))
+ || !TEST_ptr(mod_mul = getBN(s, "ModMul"))
+ || !TEST_ptr(ret = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_mod_mul(ret, a, b, m, ctx))
+ || !equalBN("A * B (mod M)", mod_mul, ret))
+ goto err;
+
+ if (BN_is_odd(m)) {
+ /* Reduce |a| and |b| and test the Montgomery version. */
+ BN_MONT_CTX *mont = BN_MONT_CTX_new();
+ BIGNUM *a_tmp = BN_new();
+ BIGNUM *b_tmp = BN_new();
+
+ if (mont == NULL || a_tmp == NULL || b_tmp == NULL
+ || !TEST_true(BN_MONT_CTX_set(mont, m, ctx))
+ || !TEST_true(BN_nnmod(a_tmp, a, m, ctx))
+ || !TEST_true(BN_nnmod(b_tmp, b, m, ctx))
+ || !TEST_true(BN_to_montgomery(a_tmp, a_tmp, mont, ctx))
+ || !TEST_true(BN_to_montgomery(b_tmp, b_tmp, mont, ctx))
+ || !TEST_true(BN_mod_mul_montgomery(ret, a_tmp, b_tmp,
+ mont, ctx))
+ || !TEST_true(BN_from_montgomery(ret, ret, mont, ctx))
+ || !equalBN("A * B (mod M) (mont)", mod_mul, ret))
+ st = 0;
+ else
+ st = 1;
+ BN_MONT_CTX_free(mont);
+ BN_free(a_tmp);
+ BN_free(b_tmp);
+ if (st == 0)
+ goto err;
+ }
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(m);
+ BN_free(mod_mul);
+ BN_free(ret);
+ return st;
+}
+
+static int file_modexp(STANZA *s)
+{
+ BIGNUM *a = NULL, *e = NULL, *m = NULL, *mod_exp = NULL, *ret = NULL;
+ BIGNUM *b = NULL, *c = NULL, *d = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(e = getBN(s, "E"))
+ || !TEST_ptr(m = getBN(s, "M"))
+ || !TEST_ptr(mod_exp = getBN(s, "ModExp"))
+ || !TEST_ptr(ret = BN_new())
+ || !TEST_ptr(d = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_mod_exp(ret, a, e, m, ctx))
+ || !equalBN("A ^ E (mod M)", mod_exp, ret))
+ goto err;
+
+ if (BN_is_odd(m)) {
+ if (!TEST_true(BN_mod_exp_mont(ret, a, e, m, ctx, NULL))
+ || !equalBN("A ^ E (mod M) (mont)", mod_exp, ret)
+ || !TEST_true(BN_mod_exp_mont_consttime(ret, a, e, m,
+ ctx, NULL))
+ || !equalBN("A ^ E (mod M) (mont const", mod_exp, ret))
+ goto err;
+ }
+
+ /* Regression test for carry propagation bug in sqr8x_reduction */
+ BN_hex2bn(&a, "050505050505");
+ BN_hex2bn(&b, "02");
+ BN_hex2bn(&c,
+ "4141414141414141414141274141414141414141414141414141414141414141"
+ "4141414141414141414141414141414141414141414141414141414141414141"
+ "4141414141414141414141800000000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000000000000000000001");
+ if (!TEST_true(BN_mod_exp(d, a, b, c, ctx))
+ || !TEST_true(BN_mul(e, a, a, ctx))
+ || !TEST_BN_eq(d, e))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ BN_free(d);
+ BN_free(e);
+ BN_free(m);
+ BN_free(mod_exp);
+ BN_free(ret);
+ return st;
+}
+
+static int file_exp(STANZA *s)
+{
+ BIGNUM *a = NULL, *e = NULL, *exp = NULL, *ret = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(e = getBN(s, "E"))
+ || !TEST_ptr(exp = getBN(s, "Exp"))
+ || !TEST_ptr(ret = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_exp(ret, a, e, ctx))
+ || !equalBN("A ^ E", exp, ret))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(e);
+ BN_free(exp);
+ BN_free(ret);
+ return st;
+}
+
+static int file_modsqrt(STANZA *s)
+{
+ BIGNUM *a = NULL, *p = NULL, *mod_sqrt = NULL, *ret = NULL, *ret2 = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(p = getBN(s, "P"))
+ || !TEST_ptr(mod_sqrt = getBN(s, "ModSqrt"))
+ || !TEST_ptr(ret = BN_new())
+ || !TEST_ptr(ret2 = BN_new()))
+ goto err;
+
+ if (BN_is_negative(mod_sqrt)) {
+ /* A negative testcase */
+ if (!TEST_ptr_null(BN_mod_sqrt(ret, a, p, ctx)))
+ goto err;
+
+ st = 1;
+ goto err;
+ }
+
+ /* There are two possible answers. */
+ if (!TEST_ptr(BN_mod_sqrt(ret, a, p, ctx))
+ || !TEST_true(BN_sub(ret2, p, ret)))
+ goto err;
+
+ /* The first condition should NOT be a test. */
+ if (BN_cmp(ret2, mod_sqrt) != 0
+ && !equalBN("sqrt(A) (mod P)", mod_sqrt, ret))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(p);
+ BN_free(mod_sqrt);
+ BN_free(ret);
+ BN_free(ret2);
+ return st;
+}
+
+static int file_gcd(STANZA *s)
+{
+ BIGNUM *a = NULL, *b = NULL, *gcd = NULL, *ret = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = getBN(s, "A"))
+ || !TEST_ptr(b = getBN(s, "B"))
+ || !TEST_ptr(gcd = getBN(s, "GCD"))
+ || !TEST_ptr(ret = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_gcd(ret, a, b, ctx))
+ || !equalBN("gcd(A,B)", gcd, ret))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(gcd);
+ BN_free(ret);
+ return st;
+}
+
+static int test_bn2padded(void)
+{
+ uint8_t zeros[256], out[256], reference[128];
+ size_t bytes;
+ BIGNUM *n;
+ int st = 0;
+
+ /* Test edge case at 0. */
+ if (!TEST_ptr((n = BN_new())))
+ goto err;
+ if (!TEST_int_eq(BN_bn2binpad(n, NULL, 0), 0))
+ goto err;
+ memset(out, -1, sizeof(out));
+ if (!TEST_int_eq(BN_bn2binpad(n, out, sizeof(out)), sizeof(out)))
+ goto err;
+ memset(zeros, 0, sizeof(zeros));
+ if (!TEST_mem_eq(zeros, sizeof(zeros), out, sizeof(out)))
+ goto err;
+
+ /* Test a random numbers at various byte lengths. */
+ for (bytes = 128 - 7; bytes <= 128; bytes++) {
+# define TOP_BIT_ON 0
+# define BOTTOM_BIT_NOTOUCH 0
+ if (!TEST_true(BN_rand(n, bytes * 8, TOP_BIT_ON, BOTTOM_BIT_NOTOUCH)))
+ goto err;
+ if (!TEST_int_eq(BN_num_bytes(n), bytes)
+ || !TEST_int_eq(BN_bn2bin(n, reference), bytes))
+ goto err;
+ /* Empty buffer should fail. */
+ if (!TEST_int_eq(BN_bn2binpad(n, NULL, 0), -1))
+ goto err;
+ /* One byte short should fail. */
+ if (!TEST_int_eq(BN_bn2binpad(n, out, bytes - 1), -1))
+ goto err;
+ /* Exactly right size should encode. */
+ if (!TEST_int_eq(BN_bn2binpad(n, out, bytes), bytes)
+ || !TEST_mem_eq(out, bytes, reference, bytes))
+ goto err;
+ /* Pad up one byte extra. */
+ if (!TEST_int_eq(BN_bn2binpad(n, out, bytes + 1), bytes + 1)
+ || !TEST_mem_eq(out + 1, bytes, reference, bytes)
+ || !TEST_mem_eq(out, 1, zeros, 1))
+ goto err;
+ /* Pad up to 256. */
+ if (!TEST_int_eq(BN_bn2binpad(n, out, sizeof(out)), sizeof(out))
+ || !TEST_mem_eq(out + sizeof(out) - bytes, bytes,
+ reference, bytes)
+ || !TEST_mem_eq(out, sizeof(out) - bytes,
+ zeros, sizeof(out) - bytes))
+ goto err;
+ }
+
+ st = 1;
+ err:
+ BN_free(n);
+ return st;
+}
+
+static int test_dec2bn(void)
+{
+ BIGNUM *bn = NULL;
+ int st = 0;
+
+ if (!TEST_int_eq(parsedecBN(&bn, "0"), 1)
+ || !TEST_BN_eq_word(bn, 0)
+ || !TEST_BN_eq_zero(bn)
+ || !TEST_BN_le_zero(bn)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parsedecBN(&bn, "256"), 3)
+ || !TEST_BN_eq_word(bn, 256)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_gt_zero(bn)
+ || !TEST_BN_ne_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parsedecBN(&bn, "-42"), 3)
+ || !TEST_BN_abs_eq_word(bn, 42)
+ || !TEST_BN_lt_zero(bn)
+ || !TEST_BN_le_zero(bn)
+ || !TEST_BN_ne_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parsedecBN(&bn, "1"), 1)
+ || !TEST_BN_eq_word(bn, 1)
+ || !TEST_BN_ne_zero(bn)
+ || !TEST_BN_gt_zero(bn)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_eq_one(bn)
+ || !TEST_BN_odd(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parsedecBN(&bn, "-0"), 2)
+ || !TEST_BN_eq_zero(bn)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_le_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parsedecBN(&bn, "42trailing garbage is ignored"), 2)
+ || !TEST_BN_abs_eq_word(bn, 42)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_gt_zero(bn)
+ || !TEST_BN_ne_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(bn);
+ return st;
+}
+
+static int test_hex2bn(void)
+{
+ BIGNUM *bn = NULL;
+ int st = 0;
+
+ if (!TEST_int_eq(parseBN(&bn, "0"), 1)
+ || !TEST_BN_eq_zero(bn)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parseBN(&bn, "256"), 3)
+ || !TEST_BN_eq_word(bn, 0x256)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_gt_zero(bn)
+ || !TEST_BN_ne_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parseBN(&bn, "-42"), 3)
+ || !TEST_BN_abs_eq_word(bn, 0x42)
+ || !TEST_BN_lt_zero(bn)
+ || !TEST_BN_le_zero(bn)
+ || !TEST_BN_ne_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parseBN(&bn, "cb"), 2)
+ || !TEST_BN_eq_word(bn, 0xCB)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_gt_zero(bn)
+ || !TEST_BN_ne_zero(bn)
+ || !TEST_BN_odd(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parseBN(&bn, "-0"), 2)
+ || !TEST_BN_eq_zero(bn)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_le_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+ BN_free(bn);
+ bn = NULL;
+
+ if (!TEST_int_eq(parseBN(&bn, "abctrailing garbage is ignored"), 3)
+ || !TEST_BN_eq_word(bn, 0xabc)
+ || !TEST_BN_ge_zero(bn)
+ || !TEST_BN_gt_zero(bn)
+ || !TEST_BN_ne_zero(bn)
+ || !TEST_BN_even(bn))
+ goto err;
+ st = 1;
+
+ err:
+ BN_free(bn);
+ return st;
+}
+
+static int test_asc2bn(void)
+{
+ BIGNUM *bn = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(bn = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_asc2bn(&bn, "0"))
+ || !TEST_BN_eq_zero(bn)
+ || !TEST_BN_ge_zero(bn))
+ goto err;
+
+ if (!TEST_true(BN_asc2bn(&bn, "256"))
+ || !TEST_BN_eq_word(bn, 256)
+ || !TEST_BN_ge_zero(bn))
+ goto err;
+
+ if (!TEST_true(BN_asc2bn(&bn, "-42"))
+ || !TEST_BN_abs_eq_word(bn, 42)
+ || !TEST_BN_lt_zero(bn))
+ goto err;
+
+ if (!TEST_true(BN_asc2bn(&bn, "0x1234"))
+ || !TEST_BN_eq_word(bn, 0x1234)
+ || !TEST_BN_ge_zero(bn))
+ goto err;
+
+ if (!TEST_true(BN_asc2bn(&bn, "0X1234"))
+ || !TEST_BN_eq_word(bn, 0x1234)
+ || !TEST_BN_ge_zero(bn))
+ goto err;
+
+ if (!TEST_true(BN_asc2bn(&bn, "-0xabcd"))
+ || !TEST_BN_abs_eq_word(bn, 0xabcd)
+ || !TEST_BN_lt_zero(bn))
+ goto err;
+
+ if (!TEST_true(BN_asc2bn(&bn, "-0"))
+ || !TEST_BN_eq_zero(bn)
+ || !TEST_BN_ge_zero(bn))
+ goto err;
+
+ if (!TEST_true(BN_asc2bn(&bn, "123trailing garbage is ignored"))
+ || !TEST_BN_eq_word(bn, 123)
+ || !TEST_BN_ge_zero(bn))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(bn);
+ return st;
+}
+
+static const MPITEST kMPITests[] = {
+ {"0", "\x00\x00\x00\x00", 4},
+ {"1", "\x00\x00\x00\x01\x01", 5},
+ {"-1", "\x00\x00\x00\x01\x81", 5},
+ {"128", "\x00\x00\x00\x02\x00\x80", 6},
+ {"256", "\x00\x00\x00\x02\x01\x00", 6},
+ {"-256", "\x00\x00\x00\x02\x81\x00", 6},
+};
+
+static int test_mpi(int i)
+{
+ uint8_t scratch[8];
+ const MPITEST *test = &kMPITests[i];
+ size_t mpi_len, mpi_len2;
+ BIGNUM *bn = NULL;
+ BIGNUM *bn2 = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(bn = BN_new())
+ || !TEST_true(BN_asc2bn(&bn, test->base10)))
+ goto err;
+ mpi_len = BN_bn2mpi(bn, NULL);
+ if (!TEST_size_t_le(mpi_len, sizeof(scratch)))
+ goto err;
+
+ if (!TEST_size_t_eq(mpi_len2 = BN_bn2mpi(bn, scratch), mpi_len)
+ || !TEST_mem_eq(test->mpi, test->mpi_len, scratch, mpi_len))
+ goto err;
+
+ if (!TEST_ptr(bn2 = BN_mpi2bn(scratch, mpi_len, NULL)))
+ goto err;
+
+ if (!TEST_BN_eq(bn, bn2)) {
+ BN_free(bn2);
+ goto err;
+ }
+ BN_free(bn2);
+
+ st = 1;
+ err:
+ BN_free(bn);
+ return st;
+}
+
+static int test_rand(void)
+{
+ BIGNUM *bn = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(bn = BN_new()))
+ return 0;
+
+ /* Test BN_rand for degenerate cases with |top| and |bottom| parameters. */
+ if (!TEST_false(BN_rand(bn, 0, 0 /* top */ , 0 /* bottom */ ))
+ || !TEST_false(BN_rand(bn, 0, 1 /* top */ , 1 /* bottom */ ))
+ || !TEST_true(BN_rand(bn, 1, 0 /* top */ , 0 /* bottom */ ))
+ || !TEST_BN_eq_one(bn)
+ || !TEST_false(BN_rand(bn, 1, 1 /* top */ , 0 /* bottom */ ))
+ || !TEST_true(BN_rand(bn, 1, -1 /* top */ , 1 /* bottom */ ))
+ || !TEST_BN_eq_one(bn)
+ || !TEST_true(BN_rand(bn, 2, 1 /* top */ , 0 /* bottom */ ))
+ || !TEST_BN_eq_word(bn, 3))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(bn);
+ return st;
+}
+
+/*
+ * Run some statistical tests to provide a degree confidence that the
+ * BN_rand_range() function works as expected. The test cases and
+ * critical values are generated by the bn_rand_range script.
+ *
+ * Each individual test is a Chi^2 goodness of fit for a specified number
+ * of samples and range. The samples are assumed to be independent and
+ * that they are from a discrete uniform distribution.
+ *
+ * Some of these individual tests are expected to fail, the success/failure
+ * of each is an independent Bernoulli trial. The number of such successes
+ * will form a binomial distribution. The count of the successes is compared
+ * against a precomputed critical value to determine the overall outcome.
+ */
+struct rand_range_case {
+ unsigned int range;
+ unsigned int iterations;
+ double critical;
+};
+
+#include "bn_rand_range.h"
+
+static int test_rand_range_single(size_t n)
+{
+ const unsigned int range = rand_range_cases[n].range;
+ const unsigned int iterations = rand_range_cases[n].iterations;
+ const double critical = rand_range_cases[n].critical;
+ const double expected = iterations / (double)range;
+ double sum = 0;
+ BIGNUM *rng = NULL, *val = NULL;
+ size_t *counts;
+ unsigned int i, v;
+ int res = 0;
+
+ if (!TEST_ptr(counts = OPENSSL_zalloc(sizeof(*counts) * range))
+ || !TEST_ptr(rng = BN_new())
+ || !TEST_ptr(val = BN_new())
+ || !TEST_true(BN_set_word(rng, range)))
+ goto err;
+ for (i = 0; i < iterations; i++) {
+ if (!TEST_true(BN_rand_range(val, rng))
+ || !TEST_uint_lt(v = (unsigned int)BN_get_word(val), range))
+ goto err;
+ counts[v]++;
+ }
+
+ for (i = 0; i < range; i++) {
+ const double delta = counts[i] - expected;
+ sum += delta * delta;
+ }
+ sum /= expected;
+
+ if (sum > critical) {
+ TEST_info("Chi^2 test negative %.4f > %4.f", sum, critical);
+ TEST_note("test case %zu range %u iterations %u", n + 1, range,
+ iterations);
+ goto err;
+ }
+
+ res = 1;
+err:
+ BN_free(rng);
+ BN_free(val);
+ OPENSSL_free(counts);
+ return res;
+}
+
+static int test_rand_range(void)
+{
+ int n_success = 0;
+ size_t i;
+
+ for (i = 0; i < OSSL_NELEM(rand_range_cases); i++)
+ n_success += test_rand_range_single(i);
+ if (TEST_int_ge(n_success, binomial_critical))
+ return 1;
+ TEST_note("This test is expected to fail by chance 0.01%% of the time.");
+ return 0;
+}
+
+static int test_negzero(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL;
+ BIGNUM *numerator = NULL, *denominator = NULL;
+ int consttime, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(c = BN_new())
+ || !TEST_ptr(d = BN_new()))
+ goto err;
+
+ /* Test that BN_mul never gives negative zero. */
+ if (!TEST_true(BN_set_word(a, 1)))
+ goto err;
+ BN_set_negative(a, 1);
+ BN_zero(b);
+ if (!TEST_true(BN_mul(c, a, b, ctx)))
+ goto err;
+ if (!TEST_BN_eq_zero(c)
+ || !TEST_BN_ge_zero(c))
+ goto err;
+
+ for (consttime = 0; consttime < 2; consttime++) {
+ if (!TEST_ptr(numerator = BN_new())
+ || !TEST_ptr(denominator = BN_new()))
+ goto err;
+ if (consttime) {
+ BN_set_flags(numerator, BN_FLG_CONSTTIME);
+ BN_set_flags(denominator, BN_FLG_CONSTTIME);
+ }
+ /* Test that BN_div never gives negative zero in the quotient. */
+ if (!TEST_true(BN_set_word(numerator, 1))
+ || !TEST_true(BN_set_word(denominator, 2)))
+ goto err;
+ BN_set_negative(numerator, 1);
+ if (!TEST_true(BN_div(a, b, numerator, denominator, ctx))
+ || !TEST_BN_eq_zero(a)
+ || !TEST_BN_ge_zero(a))
+ goto err;
+
+ /* Test that BN_div never gives negative zero in the remainder. */
+ if (!TEST_true(BN_set_word(denominator, 1))
+ || !TEST_true(BN_div(a, b, numerator, denominator, ctx))
+ || !TEST_BN_eq_zero(b)
+ || !TEST_BN_ge_zero(b))
+ goto err;
+ BN_free(numerator);
+ BN_free(denominator);
+ numerator = denominator = NULL;
+ }
+
+ /* Test that BN_set_negative will not produce a negative zero. */
+ BN_zero(a);
+ BN_set_negative(a, 1);
+ if (BN_is_negative(a))
+ goto err;
+ st = 1;
+
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ BN_free(d);
+ BN_free(numerator);
+ BN_free(denominator);
+ return st;
+}
+
+static int test_badmod(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *zero = NULL;
+ BN_MONT_CTX *mont = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(zero = BN_new())
+ || !TEST_ptr(mont = BN_MONT_CTX_new()))
+ goto err;
+ BN_zero(zero);
+
+ if (!TEST_false(BN_div(a, b, BN_value_one(), zero, ctx)))
+ goto err;
+ ERR_clear_error();
+
+ if (!TEST_false(BN_mod_mul(a, BN_value_one(), BN_value_one(), zero, ctx)))
+ goto err;
+ ERR_clear_error();
+
+ if (!TEST_false(BN_mod_exp(a, BN_value_one(), BN_value_one(), zero, ctx)))
+ goto err;
+ ERR_clear_error();
+
+ if (!TEST_false(BN_mod_exp_mont(a, BN_value_one(), BN_value_one(),
+ zero, ctx, NULL)))
+ goto err;
+ ERR_clear_error();
+
+ if (!TEST_false(BN_mod_exp_mont_consttime(a, BN_value_one(), BN_value_one(),
+ zero, ctx, NULL)))
+ goto err;
+ ERR_clear_error();
+
+ if (!TEST_false(BN_MONT_CTX_set(mont, zero, ctx)))
+ goto err;
+ ERR_clear_error();
+
+ /* Some operations also may not be used with an even modulus. */
+ if (!TEST_true(BN_set_word(b, 16)))
+ goto err;
+
+ if (!TEST_false(BN_MONT_CTX_set(mont, b, ctx)))
+ goto err;
+ ERR_clear_error();
+
+ if (!TEST_false(BN_mod_exp_mont(a, BN_value_one(), BN_value_one(),
+ b, ctx, NULL)))
+ goto err;
+ ERR_clear_error();
+
+ if (!TEST_false(BN_mod_exp_mont_consttime(a, BN_value_one(), BN_value_one(),
+ b, ctx, NULL)))
+ goto err;
+ ERR_clear_error();
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(zero);
+ BN_MONT_CTX_free(mont);
+ return st;
+}
+
+static int test_expmodzero(void)
+{
+ BIGNUM *a = NULL, *r = NULL, *zero = NULL;
+ int st = 0;
+
+ if (!TEST_ptr(zero = BN_new())
+ || !TEST_ptr(a = BN_new())
+ || !TEST_ptr(r = BN_new()))
+ goto err;
+ BN_zero(zero);
+
+ if (!TEST_true(BN_mod_exp(r, a, zero, BN_value_one(), NULL))
+ || !TEST_BN_eq_zero(r)
+ || !TEST_true(BN_mod_exp_mont(r, a, zero, BN_value_one(),
+ NULL, NULL))
+ || !TEST_BN_eq_zero(r)
+ || !TEST_true(BN_mod_exp_mont_consttime(r, a, zero,
+ BN_value_one(),
+ NULL, NULL))
+ || !TEST_BN_eq_zero(r)
+ || !TEST_true(BN_mod_exp_mont_word(r, 42, zero,
+ BN_value_one(), NULL, NULL))
+ || !TEST_BN_eq_zero(r))
+ goto err;
+
+ st = 1;
+ err:
+ BN_free(zero);
+ BN_free(a);
+ BN_free(r);
+ return st;
+}
+
+static int test_expmodone(void)
+{
+ int ret = 0, i;
+ BIGNUM *r = BN_new();
+ BIGNUM *a = BN_new();
+ BIGNUM *p = BN_new();
+ BIGNUM *m = BN_new();
+
+ if (!TEST_ptr(r)
+ || !TEST_ptr(a)
+ || !TEST_ptr(p)
+ || !TEST_ptr(p)
+ || !TEST_ptr(m)
+ || !TEST_true(BN_set_word(a, 1))
+ || !TEST_true(BN_set_word(p, 0))
+ || !TEST_true(BN_set_word(m, 1)))
+ goto err;
+
+ /* Calculate r = 1 ^ 0 mod 1, and check the result is always 0 */
+ for (i = 0; i < 2; i++) {
+ if (!TEST_true(BN_mod_exp(r, a, p, m, NULL))
+ || !TEST_BN_eq_zero(r)
+ || !TEST_true(BN_mod_exp_mont(r, a, p, m, NULL, NULL))
+ || !TEST_BN_eq_zero(r)
+ || !TEST_true(BN_mod_exp_mont_consttime(r, a, p, m, NULL, NULL))
+ || !TEST_BN_eq_zero(r)
+ || !TEST_true(BN_mod_exp_mont_word(r, 1, p, m, NULL, NULL))
+ || !TEST_BN_eq_zero(r)
+ || !TEST_true(BN_mod_exp_simple(r, a, p, m, NULL))
+ || !TEST_BN_eq_zero(r)
+ || !TEST_true(BN_mod_exp_recp(r, a, p, m, NULL))
+ || !TEST_BN_eq_zero(r))
+ goto err;
+ /* Repeat for r = 1 ^ 0 mod -1 */
+ if (i == 0)
+ BN_set_negative(m, 1);
+ }
+
+ ret = 1;
+ err:
+ BN_free(r);
+ BN_free(a);
+ BN_free(p);
+ BN_free(m);
+ return ret;
+}
+
+static int test_smallprime(int kBits)
+{
+ BIGNUM *r;
+ int st = 0;
+
+ if (!TEST_ptr(r = BN_new()))
+ goto err;
+
+ if (kBits <= 1) {
+ if (!TEST_false(BN_generate_prime_ex(r, kBits, 0,
+ NULL, NULL, NULL)))
+ goto err;
+ } else {
+ if (!TEST_true(BN_generate_prime_ex(r, kBits, 0,
+ NULL, NULL, NULL))
+ || !TEST_int_eq(BN_num_bits(r), kBits))
+ goto err;
+ }
+
+ st = 1;
+ err:
+ BN_free(r);
+ return st;
+}
+
+static int test_smallsafeprime(int kBits)
+{
+ BIGNUM *r;
+ int st = 0;
+
+ if (!TEST_ptr(r = BN_new()))
+ goto err;
+
+ if (kBits <= 5 && kBits != 3) {
+ if (!TEST_false(BN_generate_prime_ex(r, kBits, 1,
+ NULL, NULL, NULL)))
+ goto err;
+ } else {
+ if (!TEST_true(BN_generate_prime_ex(r, kBits, 1,
+ NULL, NULL, NULL))
+ || !TEST_int_eq(BN_num_bits(r), kBits))
+ goto err;
+ }
+
+ st = 1;
+ err:
+ BN_free(r);
+ return st;
+}
+
+static int primes[] = { 2, 3, 5, 7, 17863 };
+
+static int test_is_prime(int i)
+{
+ int ret = 0;
+ BIGNUM *r = NULL;
+ int trial;
+
+ if (!TEST_ptr(r = BN_new()))
+ goto err;
+
+ for (trial = 0; trial <= 1; ++trial) {
+ if (!TEST_true(BN_set_word(r, primes[i]))
+ || !TEST_int_eq(BN_check_prime(r, ctx, NULL),
+ 1))
+ goto err;
+ }
+
+ ret = 1;
+ err:
+ BN_free(r);
+ return ret;
+}
+
+static int not_primes[] = { -1, 0, 1, 4 };
+
+static int test_not_prime(int i)
+{
+ int ret = 0;
+ BIGNUM *r = NULL;
+ int trial;
+
+ if (!TEST_ptr(r = BN_new()))
+ goto err;
+
+ for (trial = 0; trial <= 1; ++trial) {
+ if (!TEST_true(BN_set_word(r, not_primes[i]))
+ || !TEST_false(BN_check_prime(r, ctx, NULL)))
+ goto err;
+ }
+
+ ret = 1;
+ err:
+ BN_free(r);
+ return ret;
+}
+
+static int test_ctx_set_ct_flag(BN_CTX *c)
+{
+ int st = 0;
+ size_t i;
+ BIGNUM *b[15];
+
+ BN_CTX_start(c);
+ for (i = 0; i < OSSL_NELEM(b); i++) {
+ if (!TEST_ptr(b[i] = BN_CTX_get(c)))
+ goto err;
+ if (i % 2 == 1)
+ BN_set_flags(b[i], BN_FLG_CONSTTIME);
+ }
+
+ st = 1;
+ err:
+ BN_CTX_end(c);
+ return st;
+}
+
+static int test_ctx_check_ct_flag(BN_CTX *c)
+{
+ int st = 0;
+ size_t i;
+ BIGNUM *b[30];
+
+ BN_CTX_start(c);
+ for (i = 0; i < OSSL_NELEM(b); i++) {
+ if (!TEST_ptr(b[i] = BN_CTX_get(c)))
+ goto err;
+ if (!TEST_false(BN_get_flags(b[i], BN_FLG_CONSTTIME)))
+ goto err;
+ }
+
+ st = 1;
+ err:
+ BN_CTX_end(c);
+ return st;
+}
+
+static int test_ctx_consttime_flag(void)
+{
+ /*-
+ * The constant-time flag should not "leak" among BN_CTX frames:
+ *
+ * - test_ctx_set_ct_flag() starts a frame in the given BN_CTX and
+ * sets the BN_FLG_CONSTTIME flag on some of the BIGNUMs obtained
+ * from the frame before ending it.
+ * - test_ctx_check_ct_flag() then starts a new frame and gets a
+ * number of BIGNUMs from it. In absence of leaks, none of the
+ * BIGNUMs in the new frame should have BN_FLG_CONSTTIME set.
+ *
+ * In actual BN_CTX usage inside libcrypto the leak could happen at
+ * any depth level in the BN_CTX stack, with varying results
+ * depending on the patterns of sibling trees of nested function
+ * calls sharing the same BN_CTX object, and the effect of
+ * unintended BN_FLG_CONSTTIME on the called BN_* functions.
+ *
+ * This simple unit test abstracts away this complexity and verifies
+ * that the leak does not happen between two sibling functions
+ * sharing the same BN_CTX object at the same level of nesting.
+ *
+ */
+ BN_CTX *nctx = NULL;
+ BN_CTX *sctx = NULL;
+ size_t i = 0;
+ int st = 0;
+
+ if (!TEST_ptr(nctx = BN_CTX_new())
+ || !TEST_ptr(sctx = BN_CTX_secure_new()))
+ goto err;
+
+ for (i = 0; i < 2; i++) {
+ BN_CTX *c = i == 0 ? nctx : sctx;
+ if (!TEST_true(test_ctx_set_ct_flag(c))
+ || !TEST_true(test_ctx_check_ct_flag(c)))
+ goto err;
+ }
+
+ st = 1;
+ err:
+ BN_CTX_free(nctx);
+ BN_CTX_free(sctx);
+ return st;
+}
+
+static int test_gcd_prime(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *gcd = NULL;
+ int i, st = 0;
+
+ if (!TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(gcd = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_generate_prime_ex(a, 1024, 0, NULL, NULL, NULL)))
+ goto err;
+ for (i = 0; i < NUM0; i++) {
+ if (!TEST_true(BN_generate_prime_ex(b, 1024, 0,
+ NULL, NULL, NULL))
+ || !TEST_true(BN_gcd(gcd, a, b, ctx))
+ || !TEST_true(BN_is_one(gcd)))
+ goto err;
+ }
+
+ st = 1;
+ err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(gcd);
+ return st;
+}
+
+typedef struct mod_exp_test_st
+{
+ const char *base;
+ const char *exp;
+ const char *mod;
+ const char *res;
+} MOD_EXP_TEST;
+
+static const MOD_EXP_TEST ModExpTests[] = {
+ /* original test vectors for rsaz_512_sqr bug, by OSS-Fuzz */
+ {
+ "1166180238001879113042182292626169621106255558914000595999312084"
+ "4627946820899490684928760491249738643524880720584249698100907201"
+ "002086675047927600340800371",
+ "8000000000000000000000000000000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000000"
+ "00000000",
+ "1340780792684523720980737645613191762604395855615117867483316354"
+ "3294276330515137663421134775482798690129946803802212663956180562"
+ "088664022929883876655300863",
+ "8243904058268085430037326628480645845409758077568738532059032482"
+ "8294114415890603594730158120426756266457928475330450251339773498"
+ "26758407619521544102068438"
+ },
+ {
+ "4974270041410803822078866696159586946995877618987010219312844726"
+ "0284386121835740784990869050050504348861513337232530490826340663"
+ "197278031692737429054",
+ "4974270041410803822078866696159586946995877428188754995041148539"
+ "1663243362592271353668158565195557417149981094324650322556843202"
+ "946445882670777892608",
+ "1340780716511420227215592830971452482815377482627251725537099028"
+ "4429769497230131760206012644403029349547320953206103351725462999"
+ "947509743623340557059752191",
+ "5296244594780707015616522701706118082963369547253192207884519362"
+ "1767869984947542695665420219028522815539559194793619684334900442"
+ "49304558011362360473525933"
+ },
+ /* test vectors for rsaz_512_srq bug, with rcx/rbx=1 */
+ { /* between first and second iteration */
+ "5148719036160389201525610950887605325980251964889646556085286545"
+ "3931548809178823413169359635978762036512397113080988070677858033"
+ "36463909753993540214027190",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between second and third iteration */
+ "8908340854353752577419678771330460827942371434853054158622636544"
+ "8151360109722890949471912566649465436296659601091730745087014189"
+ "2672764191218875181826063",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between third and fourth iteration */
+ "3427446396505596330634350984901719674479522569002785244080234738"
+ "4288743635435746136297299366444548736533053717416735379073185344"
+ "26985272974404612945608761",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between fourth and fifth iteration */
+ "3472743044917564564078857826111874560045331237315597383869652985"
+ "6919870028890895988478351133601517365908445058405433832718206902"
+ "4088133164805266956353542",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between fifth and sixth iteration */
+ "3608632990153469264412378349742339216742409743898601587274768025"
+ "0110772032985643555192767717344946174122842255204082586753499651"
+ "14483434992887431333675068",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between sixth and seventh iteration */
+ "8455374370234070242910508226941981520235709767260723212165264877"
+ "8689064388017521524568434328264431772644802567028663962962025746"
+ "9283458217850119569539086",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between seventh and eighth iteration */
+ "5155371529688532178421209781159131443543419764974688878527112131"
+ "7446518205609427412336183157918981038066636807317733319323257603"
+ "04416292040754017461076359",
+ "1005585594745694782468051874865438459560952436544429503329267108"
+ "2791323022555160232601405723625177570767523893639864538140315412"
+ "108959927459825236754563832",
+ "1005585594745694782468051874865438459560952436544429503329267108"
+ "2791323022555160232601405723625177570767523893639864538140315412"
+ "108959927459825236754563833",
+ "1"
+ },
+ /* test vectors for rsaz_512_srq bug, with rcx/rbx=2 */
+ { /* between first and second iteration */
+ "3155666506033786929967309937640790361084670559125912405342594979"
+ "4345142818528956285490897841406338022378565972533508820577760065"
+ "58494345853302083699912572",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between second and third iteration */
+ "3789819583801342198190405714582958759005991915505282362397087750"
+ "4213544724644823098843135685133927198668818185338794377239590049"
+ "41019388529192775771488319",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between third and forth iteration */
+ "4695752552040706867080542538786056470322165281761525158189220280"
+ "4025547447667484759200742764246905647644662050122968912279199065"
+ "48065034299166336940507214",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between forth and fifth iteration */
+ "2159140240970485794188159431017382878636879856244045329971239574"
+ "8919691133560661162828034323196457386059819832804593989740268964"
+ "74502911811812651475927076",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between fifth and sixth iteration */
+ "5239312332984325668414624633307915097111691815000872662334695514"
+ "5436533521392362443557163429336808208137221322444780490437871903"
+ "99972784701334569424519255",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between sixth and seventh iteration */
+ "1977953647322612860406858017869125467496941904523063466791308891"
+ "1172796739058531929470539758361774569875505293428856181093904091"
+ "33788264851714311303725089",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042158",
+ "6703903964971298549787012499102923063739682910296196688861780721"
+ "8608820150367734884009371490834517138450159290932430254268769414"
+ "05973284973216824503042159",
+ "1"
+ },
+ { /* between seventh and eighth iteration */
+ "6456987954117763835533395796948878140715006860263624787492985786"
+ "8514630216966738305923915688821526449499763719943997120302368211"
+ "04813318117996225041943964",
+ "1340780792994259709957402499820584612747936582059239337772356144"
+ "3721764030073546976801874298166903427690031858186486050853753882"
+ "811946551499689575296532556",
+ "1340780792994259709957402499820584612747936582059239337772356144"
+ "3721764030073546976801874298166903427690031858186486050853753882"
+ "811946551499689575296532557",
+ "1"
+ }
+};
+
+static int test_mod_exp(int i)
+{
+ const MOD_EXP_TEST *test = &ModExpTests[i];
+ int res = 0;
+ BIGNUM* result = NULL;
+ BIGNUM *base = NULL, *exponent = NULL, *modulo = NULL;
+ char *s = NULL;
+
+ if (!TEST_ptr(result = BN_new())
+ || !TEST_true(BN_dec2bn(&base, test->base))
+ || !TEST_true(BN_dec2bn(&exponent, test->exp))
+ || !TEST_true(BN_dec2bn(&modulo, test->mod)))
+ goto err;
+
+ if (!TEST_int_eq(BN_mod_exp(result, base, exponent, modulo, ctx), 1))
+ goto err;
+
+ if (!TEST_ptr(s = BN_bn2dec(result)))
+ goto err;
+
+ if (!TEST_mem_eq(s, strlen(s), test->res, strlen(test->res)))
+ goto err;
+
+ res = 1;
+
+ err:
+ OPENSSL_free(s);
+ BN_free(result);
+ BN_free(base);
+ BN_free(exponent);
+ BN_free(modulo);
+ return res;
+}
+
+static int test_mod_exp_consttime(int i)
+{
+ const MOD_EXP_TEST *test = &ModExpTests[i];
+ int res = 0;
+ BIGNUM* result = NULL;
+ BIGNUM *base = NULL, *exponent = NULL, *modulo = NULL;
+ char *s = NULL;
+
+ if (!TEST_ptr(result = BN_new())
+ || !TEST_true(BN_dec2bn(&base, test->base))
+ || !TEST_true(BN_dec2bn(&exponent, test->exp))
+ || !TEST_true(BN_dec2bn(&modulo, test->mod)))
+ goto err;
+
+ BN_set_flags(base, BN_FLG_CONSTTIME);
+ BN_set_flags(exponent, BN_FLG_CONSTTIME);
+ BN_set_flags(modulo, BN_FLG_CONSTTIME);
+
+ if (!TEST_int_eq(BN_mod_exp(result, base, exponent, modulo, ctx), 1))
+ goto err;
+
+ if (!TEST_ptr(s = BN_bn2dec(result)))
+ goto err;
+
+ if (!TEST_mem_eq(s, strlen(s), test->res, strlen(test->res)))
+ goto err;
+
+ res = 1;
+
+ err:
+ OPENSSL_free(s);
+ BN_free(result);
+ BN_free(base);
+ BN_free(exponent);
+ BN_free(modulo);
+ return res;
+}
+
+/*
+ * Regression test to ensure BN_mod_exp2_mont fails safely if argument m is
+ * zero.
+ */
+static int test_mod_exp2_mont(void)
+{
+ int res = 0;
+ BIGNUM *exp_result = NULL;
+ BIGNUM *exp_a1 = NULL, *exp_p1 = NULL, *exp_a2 = NULL, *exp_p2 = NULL,
+ *exp_m = NULL;
+
+ if (!TEST_ptr(exp_result = BN_new())
+ || !TEST_ptr(exp_a1 = BN_new())
+ || !TEST_ptr(exp_p1 = BN_new())
+ || !TEST_ptr(exp_a2 = BN_new())
+ || !TEST_ptr(exp_p2 = BN_new())
+ || !TEST_ptr(exp_m = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_one(exp_a1))
+ || !TEST_true(BN_one(exp_p1))
+ || !TEST_true(BN_one(exp_a2))
+ || !TEST_true(BN_one(exp_p2)))
+ goto err;
+
+ BN_zero(exp_m);
+
+ /* input of 0 is even, so must fail */
+ if (!TEST_int_eq(BN_mod_exp2_mont(exp_result, exp_a1, exp_p1, exp_a2,
+ exp_p2, exp_m, ctx, NULL), 0))
+ goto err;
+
+ res = 1;
+
+err:
+ BN_free(exp_result);
+ BN_free(exp_a1);
+ BN_free(exp_p1);
+ BN_free(exp_a2);
+ BN_free(exp_p2);
+ BN_free(exp_m);
+ return res;
+}
+
+static int test_mod_inverse(void)
+{
+ int res = 0;
+ char *str = NULL;
+ BIGNUM *a = NULL;
+ BIGNUM *b = NULL;
+ BIGNUM *r = NULL;
+
+ if (!TEST_true(BN_dec2bn(&a, "5193817943")))
+ goto err;
+ if (!TEST_true(BN_dec2bn(&b, "3259122431")))
+ goto err;
+ if (!TEST_ptr(r = BN_new()))
+ goto err;
+ if (!TEST_ptr_eq(BN_mod_inverse(r, a, b, ctx), r))
+ goto err;
+ if (!TEST_ptr_ne(str = BN_bn2dec(r), NULL))
+ goto err;
+ if (!TEST_int_eq(strcmp(str, "2609653924"), 0))
+ goto err;
+
+ /* Note that this aliases the result with the modulus. */
+ if (!TEST_ptr_null(BN_mod_inverse(b, a, b, ctx)))
+ goto err;
+
+ res = 1;
+
+err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(r);
+ OPENSSL_free(str);
+ return res;
+}
+
+static int test_mod_exp_alias(int idx)
+{
+ int res = 0;
+ char *str = NULL;
+ BIGNUM *a = NULL;
+ BIGNUM *b = NULL;
+ BIGNUM *c = NULL;
+ BIGNUM *r = NULL;
+
+ if (!TEST_true(BN_dec2bn(&a, "15")))
+ goto err;
+ if (!TEST_true(BN_dec2bn(&b, "10")))
+ goto err;
+ if (!TEST_true(BN_dec2bn(&c, "39")))
+ goto err;
+ if (!TEST_ptr(r = BN_new()))
+ goto err;
+
+ if (!TEST_int_eq((idx == 0 ? BN_mod_exp_simple
+ : BN_mod_exp_recp)(r, a, b, c, ctx), 1))
+ goto err;
+ if (!TEST_ptr_ne(str = BN_bn2dec(r), NULL))
+ goto err;
+ if (!TEST_str_eq(str, "36"))
+ goto err;
+
+ OPENSSL_free(str);
+ str = NULL;
+
+ BN_copy(r, b);
+
+ /* Aliasing with exponent must work. */
+ if (!TEST_int_eq((idx == 0 ? BN_mod_exp_simple
+ : BN_mod_exp_recp)(r, a, r, c, ctx), 1))
+ goto err;
+ if (!TEST_ptr_ne(str = BN_bn2dec(r), NULL))
+ goto err;
+ if (!TEST_str_eq(str, "36"))
+ goto err;
+
+ OPENSSL_free(str);
+ str = NULL;
+
+ /* Aliasing with modulus should return failure for the simple call. */
+ if (idx == 0) {
+ if (!TEST_int_eq(BN_mod_exp_simple(c, a, b, c, ctx), 0))
+ goto err;
+ } else {
+ if (!TEST_int_eq(BN_mod_exp_recp(c, a, b, c, ctx), 1))
+ goto err;
+ if (!TEST_ptr_ne(str = BN_bn2dec(c), NULL))
+ goto err;
+ if (!TEST_str_eq(str, "36"))
+ goto err;
+ }
+
+ res = 1;
+
+err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ BN_free(r);
+ OPENSSL_free(str);
+ return res;
+}
+
+static int file_test_run(STANZA *s)
+{
+ static const FILETEST filetests[] = {
+ {"Sum", file_sum},
+ {"LShift1", file_lshift1},
+ {"LShift", file_lshift},
+ {"RShift", file_rshift},
+ {"Square", file_square},
+ {"Product", file_product},
+ {"Quotient", file_quotient},
+ {"ModMul", file_modmul},
+ {"ModExp", file_modexp},
+ {"Exp", file_exp},
+ {"ModSqrt", file_modsqrt},
+ {"GCD", file_gcd},
+ };
+ int numtests = OSSL_NELEM(filetests);
+ const FILETEST *tp = filetests;
+
+ for ( ; --numtests >= 0; tp++) {
+ if (findattr(s, tp->name) != NULL) {
+ if (!tp->func(s)) {
+ TEST_info("%s:%d: Failed %s test",
+ s->test_file, s->start, tp->name);
+ return 0;
+ }
+ return 1;
+ }
+ }
+ TEST_info("%s:%d: Unknown test", s->test_file, s->start);
+ return 0;
+}
+
+static int run_file_tests(int i)
+{
+ STANZA *s = NULL;
+ char *testfile = test_get_argument(i);
+ int c;
+
+ if (!TEST_ptr(s = OPENSSL_zalloc(sizeof(*s))))
+ return 0;
+ if (!test_start_file(s, testfile)) {
+ OPENSSL_free(s);
+ return 0;
+ }
+
+ /* Read test file. */
+ while (!BIO_eof(s->fp) && test_readstanza(s)) {
+ if (s->numpairs == 0)
+ continue;
+ if (!file_test_run(s))
+ s->errors++;
+ s->numtests++;
+ test_clearstanza(s);
+ }
+ test_end_file(s);
+ c = s->errors;
+ OPENSSL_free(s);
+
+ return c == 0;
+}
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_STOCHASTIC_TESTS,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("[file...]\n"),
+ { "stochastic", OPT_STOCHASTIC_TESTS, '-', "Run stochastic tests" },
+ { OPT_HELP_STR, 1, '-',
+ "file\tFile to run tests on. Normal tests are not run\n" },
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+ int n, stochastic = 0;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_STOCHASTIC_TESTS:
+ stochastic = 1;
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+ n = test_get_argument_count();
+
+ if (!TEST_ptr(ctx = BN_CTX_new()))
+ return 0;
+
+ if (n == 0) {
+ ADD_TEST(test_sub);
+ ADD_TEST(test_div_recip);
+ ADD_ALL_TESTS(test_signed_mod_replace_ab, OSSL_NELEM(signed_mod_tests));
+ ADD_ALL_TESTS(test_signed_mod_replace_ba, OSSL_NELEM(signed_mod_tests));
+ ADD_TEST(test_mod);
+ ADD_TEST(test_mod_inverse);
+ ADD_ALL_TESTS(test_mod_exp_alias, 2);
+ ADD_TEST(test_modexp_mont5);
+ ADD_TEST(test_kronecker);
+ ADD_TEST(test_rand);
+ ADD_TEST(test_bn2padded);
+ ADD_TEST(test_dec2bn);
+ ADD_TEST(test_hex2bn);
+ ADD_TEST(test_asc2bn);
+ ADD_ALL_TESTS(test_mpi, (int)OSSL_NELEM(kMPITests));
+ ADD_TEST(test_negzero);
+ ADD_TEST(test_badmod);
+ ADD_TEST(test_expmodzero);
+ ADD_TEST(test_expmodone);
+ ADD_ALL_TESTS(test_smallprime, 16);
+ ADD_ALL_TESTS(test_smallsafeprime, 16);
+ ADD_TEST(test_swap);
+ ADD_TEST(test_ctx_consttime_flag);
+#ifndef OPENSSL_NO_EC2M
+ ADD_TEST(test_gf2m_add);
+ ADD_TEST(test_gf2m_mod);
+ ADD_TEST(test_gf2m_mul);
+ ADD_TEST(test_gf2m_sqr);
+ ADD_TEST(test_gf2m_modinv);
+ ADD_TEST(test_gf2m_moddiv);
+ ADD_TEST(test_gf2m_modexp);
+ ADD_TEST(test_gf2m_modsqrt);
+ ADD_TEST(test_gf2m_modsolvequad);
+#endif
+ ADD_ALL_TESTS(test_is_prime, (int)OSSL_NELEM(primes));
+ ADD_ALL_TESTS(test_not_prime, (int)OSSL_NELEM(not_primes));
+ ADD_TEST(test_gcd_prime);
+ ADD_ALL_TESTS(test_mod_exp, (int)OSSL_NELEM(ModExpTests));
+ ADD_ALL_TESTS(test_mod_exp_consttime, (int)OSSL_NELEM(ModExpTests));
+ ADD_TEST(test_mod_exp2_mont);
+ if (stochastic)
+ ADD_TEST(test_rand_range);
+ } else {
+ ADD_ALL_TESTS(run_file_tests, n);
+ }
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ BN_CTX_free(ctx);
+}
diff --git a/test/bntests.pl b/test/bntests.pl
new file mode 100755
index 000000000000..1bba4dcc4f0e
--- /dev/null
+++ b/test/bntests.pl
@@ -0,0 +1,156 @@
+#! /usr/bin/env perl
+# Copyright 2008-2016 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
+
+# Run the tests specified in bntests.txt, as a check against OpenSSL.
+use strict;
+use warnings;
+use Math::BigInt;
+
+my $EXPECTED_FAILURES = 0;
+my $failures = 0;
+
+sub bn
+{
+ my $x = shift;
+ my ($sign, $hex) = ($x =~ /^([+\-]?)(.*)$/);
+
+ $hex = '0x' . $hex if $hex !~ /^0x/;
+ return Math::BigInt->from_hex($sign.$hex);
+}
+
+sub evaluate
+{
+ my $lineno = shift;
+ my %s = @_;
+
+ if ( defined $s{'Sum'} ) {
+ # Sum = A + B
+ my $sum = bn($s{'Sum'});
+ my $a = bn($s{'A'});
+ my $b = bn($s{'B'});
+ return if $sum == $a + $b;
+ } elsif ( defined $s{'LShift1'} ) {
+ # LShift1 = A * 2
+ my $lshift1 = bn($s{'LShift1'});
+ my $a = bn($s{'A'});
+ return if $lshift1 == $a->bmul(2);
+ } elsif ( defined $s{'LShift'} ) {
+ # LShift = A * 2**N
+ my $lshift = bn($s{'LShift'});
+ my $a = bn($s{'A'});
+ my $n = bn($s{'N'});
+ return if $lshift == $a->blsft($n);
+ } elsif ( defined $s{'RShift'} ) {
+ # RShift = A / 2**N
+ my $rshift = bn($s{'RShift'});
+ my $a = bn($s{'A'});
+ my $n = bn($s{'N'});
+ return if $rshift == $a->brsft($n);
+ } elsif ( defined $s{'Square'} ) {
+ # Square = A * A
+ my $square = bn($s{'Square'});
+ my $a = bn($s{'A'});
+ return if $square == $a->bmul($a);
+ } elsif ( defined $s{'Product'} ) {
+ # Product = A * B
+ my $product = bn($s{'Product'});
+ my $a = bn($s{'A'});
+ my $b = bn($s{'B'});
+ return if $product == $a->bmul($b);
+ } elsif ( defined $s{'Quotient'} ) {
+ # Quotient = A / B
+ # Remainder = A - B * Quotient
+ my $quotient = bn($s{'Quotient'});
+ my $remainder = bn($s{'Remainder'});
+ my $a = bn($s{'A'});
+ my $b = bn($s{'B'});
+
+ # First the remainder test.
+ $b->bmul($quotient);
+ my $rempassed = $remainder == $a->bsub($b) ? 1 : 0;
+
+ # Math::BigInt->bdiv() is documented to do floored division,
+ # i.e. 1 / -4 = -1, while OpenSSL BN_div does truncated
+ # division, i.e. 1 / -4 = 0. We need to make the operation
+ # work like OpenSSL's BN_div to be able to verify.
+ $a = bn($s{'A'});
+ $b = bn($s{'B'});
+ my $neg = $a->is_neg() ? !$b->is_neg() : $b->is_neg();
+ $a->babs();
+ $b->babs();
+ $a->bdiv($b);
+ $a->bneg() if $neg;
+ return if $rempassed && $quotient == $a;
+ } elsif ( defined $s{'ModMul'} ) {
+ # ModMul = (A * B) mod M
+ my $modmul = bn($s{'ModMul'});
+ my $a = bn($s{'A'});
+ my $b = bn($s{'B'});
+ my $m = bn($s{'M'});
+ $a->bmul($b);
+ return if $modmul == $a->bmod($m);
+ } elsif ( defined $s{'ModExp'} ) {
+ # ModExp = (A ** E) mod M
+ my $modexp = bn($s{'ModExp'});
+ my $a = bn($s{'A'});
+ my $e = bn($s{'E'});
+ my $m = bn($s{'M'});
+ return if $modexp == $a->bmodpow($e, $m);
+ } elsif ( defined $s{'Exp'} ) {
+ my $exp = bn($s{'Exp'});
+ my $a = bn($s{'A'});
+ my $e = bn($s{'E'});
+ return if $exp == $a ** $e;
+ } elsif ( defined $s{'ModSqrt'} ) {
+ # (ModSqrt * ModSqrt) mod P = A mod P
+ my $modsqrt = bn($s{'ModSqrt'});
+ my $a = bn($s{'A'});
+ my $p = bn($s{'P'});
+ $modsqrt->bmul($modsqrt);
+ $modsqrt->bmod($p);
+ $a->bmod($p);
+ return if $modsqrt == $a;
+ } else {
+ print "# Unknown test: ";
+ }
+ $failures++;
+ print "# #$failures Test (before line $lineno) failed\n";
+ foreach ( keys %s ) {
+ print "$_ = $s{$_}\n";
+ }
+ print "\n";
+}
+
+my $infile = shift || 'bntests.txt';
+die "No such file, $infile" unless -f $infile;
+open my $IN, $infile || die "Can't read $infile, $!\n";
+
+my %stanza = ();
+my $l = 0;
+while ( <$IN> ) {
+ $l++;
+ s|\R$||;
+ next if /^#/;
+ if ( /^$/ ) {
+ if ( keys %stanza ) {
+ evaluate($l, %stanza);
+ %stanza = ();
+ }
+ next;
+ }
+ # Parse 'key = value'
+ if ( ! /\s*([^\s]*)\s*=\s*(.*)\s*/ ) {
+ print "Skipping $_\n";
+ next;
+ }
+ $stanza{$1} = $2;
+};
+evaluate($l, %stanza) if keys %stanza;
+die "Got $failures, expected $EXPECTED_FAILURES"
+ if $infile eq 'bntests.txt' and $failures != $EXPECTED_FAILURES;
+close($IN)
diff --git a/test/build.info b/test/build.info
new file mode 100644
index 000000000000..416c2270771a
--- /dev/null
+++ b/test/build.info
@@ -0,0 +1,976 @@
+# TODO: use ../apps/libapps.a instead of direct ../apps/lib source.
+# This can't currently be done, because some of its units drag in too many
+# unresolved references that don't apply here.
+# Most of all, ../apps/lib/apps.c needs to be divided in smaller pieces to
+# be useful here.
+#
+# Auxiliary program source (copied from ../apps/build.info)
+IF[{- $config{target} =~ /^(?:VC-|mingw|BC-)/ -}]
+ # It's called 'init', but doesn't have much 'init' in it...
+ $AUXLIBAPPSSRC=../apps/lib/win32_init.c
+ENDIF
+IF[{- $config{target} =~ /^vms-/ -}]
+ $AUXLIBAPPSSRC=../apps/lib/vms_term_sock.c ../apps/lib/vms_decc_argv.c
+ENDIF
+# Program init source, that don't have direct linkage with the rest of the
+# source, and can therefore not be part of a library.
+IF[{- !$disabled{uplink} -}]
+ $INITSRC=../ms/applink.c
+ENDIF
+$LIBAPPSSRC=../apps/lib/opt.c $AUXLIBAPPSSRC
+
+IF[{- !$disabled{tests} -}]
+ LIBS{noinst,has_main}=libtestutil.a
+ SOURCE[libtestutil.a]=testutil/basic_output.c testutil/output.c \
+ testutil/driver.c testutil/tests.c testutil/cb.c testutil/stanza.c \
+ testutil/format_output.c testutil/load.c testutil/fake_random.c \
+ testutil/test_cleanup.c testutil/main.c testutil/testutil_init.c \
+ testutil/options.c testutil/test_options.c testutil/provider.c \
+ testutil/apps_shims.c testutil/random.c $LIBAPPSSRC
+ INCLUDE[libtestutil.a]=../include ../apps/include ..
+ DEPEND[libtestutil.a]=../libcrypto
+
+ PROGRAMS{noinst}= \
+ confdump \
+ versions \
+ aborttest test_test pkcs12_format_test \
+ sanitytest rsa_complex exdatatest bntest \
+ ecstresstest gmdifftest pbelutest \
+ destest mdc2test sha_test \
+ exptest pbetest localetest evp_pkey_ctx_new_from_name\
+ evp_pkey_provided_test evp_test evp_extra_test evp_extra_test2 \
+ evp_fetch_prov_test evp_libctx_test ossl_store_test \
+ v3nametest v3ext punycode_test \
+ crltest danetest bad_dtls_test lhash_test sparse_array_test \
+ conf_include_test params_api_test params_conversion_test \
+ constant_time_test verify_extra_test clienthellotest \
+ packettest asynctest secmemtest srptest memleaktest stack_test \
+ dtlsv1listentest ct_test threadstest afalgtest d2i_test \
+ ssl_test_ctx_test ssl_test x509aux cipherlist_test asynciotest \
+ bio_callback_test bio_memleak_test bio_core_test param_build_test \
+ bioprinttest sslapitest dtlstest sslcorrupttest \
+ bio_enc_test pkey_meth_test pkey_meth_kdf_test evp_kdf_test uitest \
+ cipherbytes_test threadstest_fips \
+ asn1_encode_test asn1_decode_test asn1_string_table_test asn1_stable_parse_test \
+ x509_time_test x509_dup_cert_test x509_check_cert_pkey_test \
+ recordlentest drbgtest rand_status_test sslbuffertest \
+ time_offset_test pemtest ssl_cert_table_internal_test ciphername_test \
+ http_test servername_test ocspapitest fatalerrtest tls13ccstest \
+ sysdefaulttest errtest ssl_ctx_test \
+ context_internal_test aesgcmtest params_test evp_pkey_dparams_test \
+ keymgmt_internal_test hexstr_test provider_status_test defltfips_test \
+ bio_readbuffer_test user_property_test pkcs7_test upcallstest \
+ provfetchtest prov_config_test rand_test fips_version_test \
+ nodefltctxtest
+
+ IF[{- !$disabled{'deprecated-3.0'} -}]
+ PROGRAMS{noinst}=enginetest
+ ENDIF
+
+ SOURCE[confdump]=confdump.c
+ INCLUDE[confdump]=../include ../apps/include
+ DEPEND[confdump]=../libcrypto
+
+ SOURCE[versions]=versions.c
+ INCLUDE[versions]=../include ../apps/include
+ DEPEND[versions]=../libcrypto
+
+ SOURCE[aborttest]=aborttest.c
+ INCLUDE[aborttest]=../include ../apps/include
+ DEPEND[aborttest]=../libcrypto
+
+ SOURCE[sanitytest]=sanitytest.c
+ INCLUDE[sanitytest]=../include ../apps/include
+ DEPEND[sanitytest]=../libcrypto libtestutil.a
+
+ SOURCE[rand_test]=rand_test.c
+ INCLUDE[rand_test]=../include ../apps/include
+ DEPEND[rand_test]=../libcrypto libtestutil.a
+
+ SOURCE[rsa_complex]=rsa_complex.c
+ INCLUDE[rsa_complex]=../include ../apps/include
+
+ SOURCE[test_test]=test_test.c
+ INCLUDE[test_test]=../include ../apps/include
+ DEPEND[test_test]=../libcrypto libtestutil.a
+
+ SOURCE[exdatatest]=exdatatest.c
+ INCLUDE[exdatatest]=../include ../apps/include
+ DEPEND[exdatatest]=../libcrypto libtestutil.a
+
+ SOURCE[bntest]=bntest.c
+ INCLUDE[bntest]=../include ../apps/include
+ DEPEND[bntest]=../libcrypto libtestutil.a
+
+ SOURCE[ectest]=ectest.c
+ INCLUDE[ectest]=../include ../apps/include
+ DEPEND[ectest]=../libcrypto.a libtestutil.a
+
+ SOURCE[ecstresstest]=ecstresstest.c
+ INCLUDE[ecstresstest]=../include ../apps/include
+ DEPEND[ecstresstest]=../libcrypto libtestutil.a
+
+ SOURCE[gmdifftest]=gmdifftest.c
+ INCLUDE[gmdifftest]=../include ../apps/include
+ DEPEND[gmdifftest]=../libcrypto libtestutil.a
+
+ SOURCE[pbelutest]=pbelutest.c
+ INCLUDE[pbelutest]=../include ../apps/include
+ DEPEND[pbelutest]=../libcrypto libtestutil.a
+
+ SOURCE[mdc2test]=mdc2test.c
+ INCLUDE[mdc2test]=../include ../apps/include
+ DEPEND[mdc2test]=../libcrypto libtestutil.a
+
+ SOURCE[sha_test]=sha_test.c
+ INCLUDE[sha_test]=../include ../apps/include
+ DEPEND[sha_test]=../libcrypto libtestutil.a
+
+ SOURCE[enginetest]=enginetest.c
+ INCLUDE[enginetest]=../include ../apps/include
+ DEPEND[enginetest]=../libcrypto libtestutil.a
+
+ SOURCE[exptest]=exptest.c
+ INCLUDE[exptest]=../include ../apps/include
+ DEPEND[exptest]=../libcrypto libtestutil.a
+
+ SOURCE[localetest]=localetest.c
+ INCLUDE[localetest]=../include ../apps/include
+ DEPEND[localetest]=../libcrypto libtestutil.a
+
+ SOURCE[evp_pkey_ctx_new_from_name]=evp_pkey_ctx_new_from_name.c
+ INCLUDE[evp_pkey_ctx_new_from_name]=../include ../apps/include
+ DEPEND[evp_pkey_ctx_new_from_name]=../libcrypto
+
+ SOURCE[pbetest]=pbetest.c
+ INCLUDE[pbetest]=../include ../apps/include
+ DEPEND[pbetest]=../libcrypto libtestutil.a
+
+ SOURCE[fatalerrtest]=fatalerrtest.c helpers/ssltestlib.c
+ INCLUDE[fatalerrtest]=../include ../apps/include
+ DEPEND[fatalerrtest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[tls13ccstest]=tls13ccstest.c helpers/ssltestlib.c
+ INCLUDE[tls13ccstest]=../include ../apps/include
+ DEPEND[tls13ccstest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[upcallstest]=upcallstest.c
+ INCLUDE[upcallstest]=../include ../apps/include
+ DEPEND[upcallstest]=../libcrypto libtestutil.a
+
+ SOURCE[user_property_test]=user_property_test.c
+ INCLUDE[user_property_test]=../include ../apps/include
+ DEPEND[user_property_test]=../libcrypto libtestutil.a
+
+ SOURCE[evp_test]=evp_test.c
+ INCLUDE[evp_test]=../include ../apps/include
+ DEPEND[evp_test]=../libcrypto libtestutil.a
+ IF[{- $disabled{legacy} || !$target{dso_scheme} -}]
+ DEFINE[evp_test]=NO_LEGACY_MODULE
+ ENDIF
+
+ SOURCE[evp_extra_test]=evp_extra_test.c
+ INCLUDE[evp_extra_test]=../include ../apps/include
+ DEPEND[evp_extra_test]=../libcrypto.a libtestutil.a
+ IF[{- !$disabled{module} && !$disabled{legacy} -}]
+ DEFINE[evp_extra_test]=STATIC_LEGACY
+ SOURCE[evp_extra_test]=../providers/legacyprov.c
+ INCLUDE[evp_extra_test]=../providers/common/include \
+ ../providers/implementations/include
+ DEPEND[evp_extra_test]=../providers/liblegacy.a \
+ ../providers/libcommon.a
+ ENDIF
+
+ SOURCE[evp_extra_test2]=evp_extra_test2.c
+ INCLUDE[evp_extra_test2]=../include ../apps/include
+ DEPEND[evp_extra_test2]=../libcrypto libtestutil.a
+
+ SOURCE[evp_libctx_test]=evp_libctx_test.c
+ INCLUDE[evp_libctx_test]=../include ../apps/include
+ DEPEND[evp_libctx_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[evp_fetch_prov_test]=evp_fetch_prov_test.c
+ INCLUDE[evp_fetch_prov_test]=../include ../apps/include
+ DEPEND[evp_fetch_prov_test]=../libcrypto libtestutil.a
+
+ SOURCE[provfetchtest]=provfetchtest.c
+ INCLUDE[provfetchtest]=../include ../apps/include
+ DEPEND[provfetchtest]=../libcrypto.a libtestutil.a
+
+ SOURCE[prov_config_test]=prov_config_test.c
+ INCLUDE[prov_config_test]=../include ../apps/include
+ DEPEND[prov_config_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[evp_pkey_provided_test]=evp_pkey_provided_test.c
+ INCLUDE[evp_pkey_provided_test]=../include ../apps/include
+ DEPEND[evp_pkey_provided_test]=../libcrypto.a libtestutil.a
+
+ IF[{- !$disabled{'acvp-tests'} -}]
+ PROGRAMS{noinst}=acvp_test
+
+ SOURCE[acvp_test]=acvp_test.c
+ INCLUDE[acvp_test]=../include ../apps/include
+ DEPEND[acvp_test]=../libcrypto.a libtestutil.a
+ ENDIF
+
+ SOURCE[ossl_store_test]=ossl_store_test.c
+ INCLUDE[ossl_store_test]=../include ../apps/include
+ DEPEND[ossl_store_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[provider_status_test]=provider_status_test.c
+ INCLUDE[provider_status_test]=../include ../apps/include
+ DEPEND[provider_status_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[nodefltctxtest]=nodefltctxtest.c
+ INCLUDE[nodefltctxtest]=../include ../apps/include
+ DEPEND[nodefltctxtest]=../libcrypto.a libtestutil.a
+
+ IF[{- !$disabled{'deprecated-3.0'} -}]
+ PROGRAMS{noinst}=igetest bftest casttest
+
+ SOURCE[igetest]=igetest.c
+ INCLUDE[igetest]=../include ../apps/include
+ DEPEND[igetest]=../libcrypto libtestutil.a
+
+ SOURCE[bftest]=bftest.c
+ INCLUDE[bftest]=../include ../apps/include
+ DEPEND[bftest]=../libcrypto libtestutil.a
+
+ SOURCE[casttest]=casttest.c
+ INCLUDE[casttest]=../include ../apps/include
+ DEPEND[casttest]=../libcrypto libtestutil.a
+ ENDIF
+
+ SOURCE[v3nametest]=v3nametest.c
+ INCLUDE[v3nametest]=../include ../apps/include
+ DEPEND[v3nametest]=../libcrypto libtestutil.a
+
+ SOURCE[crltest]=crltest.c
+ INCLUDE[crltest]=../include ../apps/include
+ DEPEND[crltest]=../libcrypto libtestutil.a
+
+ SOURCE[v3ext]=v3ext.c
+ INCLUDE[v3ext]=../include ../apps/include
+ DEPEND[v3ext]=../libcrypto libtestutil.a
+
+ SOURCE[danetest]=danetest.c
+ INCLUDE[danetest]=../include ../apps/include
+ DEPEND[danetest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[constant_time_test]=constant_time_test.c
+ INCLUDE[constant_time_test]=../include ../apps/include
+ DEPEND[constant_time_test]=../libcrypto libtestutil.a
+
+ SOURCE[verify_extra_test]=verify_extra_test.c
+ INCLUDE[verify_extra_test]=../include ../apps/include
+ DEPEND[verify_extra_test]=../libcrypto libtestutil.a
+
+ SOURCE[clienthellotest]=clienthellotest.c
+ INCLUDE[clienthellotest]=../include ../apps/include
+ DEPEND[clienthellotest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[bad_dtls_test]=bad_dtls_test.c
+ INCLUDE[bad_dtls_test]=../include ../apps/include
+ DEPEND[bad_dtls_test]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[packettest]=packettest.c
+ INCLUDE[packettest]=../include ../apps/include
+ DEPEND[packettest]=../libcrypto libtestutil.a
+
+ SOURCE[asynctest]=asynctest.c
+ INCLUDE[asynctest]=../include ../apps/include
+ DEPEND[asynctest]=../libcrypto
+
+ SOURCE[secmemtest]=secmemtest.c
+ INCLUDE[secmemtest]=../include ../apps/include
+ DEPEND[secmemtest]=../libcrypto libtestutil.a
+
+ SOURCE[srptest]=srptest.c
+ INCLUDE[srptest]=../include ../apps/include
+ DEPEND[srptest]=../libcrypto libtestutil.a
+
+ SOURCE[memleaktest]=memleaktest.c
+ INCLUDE[memleaktest]=../include ../apps/include
+ DEPEND[memleaktest]=../libcrypto libtestutil.a
+
+ SOURCE[pkcs12_format_test]=pkcs12_format_test.c helpers/pkcs12.c
+ INCLUDE[pkcs12_format_test]=../include ../apps/include
+ DEPEND[pkcs12_format_test]=../libcrypto libtestutil.a
+
+ SOURCE[pkcs7_test]=pkcs7_test.c
+ INCLUDE[pkcs7_test]=../include ../apps/include
+ DEPEND[pkcs7_test]=../libcrypto libtestutil.a
+
+ SOURCE[punycode_test]=punycode_test.c
+ INCLUDE[punycode_test]=../include ../apps/include
+ DEPEND[punycode_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[stack_test]=stack_test.c
+ INCLUDE[stack_test]=../include ../apps/include
+ DEPEND[stack_test]=../libcrypto libtestutil.a
+
+ SOURCE[lhash_test]=lhash_test.c
+ INCLUDE[lhash_test]=../include ../apps/include
+ DEPEND[lhash_test]=../libcrypto libtestutil.a
+
+ SOURCE[dtlsv1listentest]=dtlsv1listentest.c
+ INCLUDE[dtlsv1listentest]=../include ../apps/include
+ DEPEND[dtlsv1listentest]=../libssl libtestutil.a
+
+ SOURCE[ct_test]=ct_test.c
+ INCLUDE[ct_test]=../include ../apps/include
+ DEPEND[ct_test]=../libcrypto libtestutil.a
+
+ SOURCE[threadstest]=threadstest.c
+ INCLUDE[threadstest]=../include ../apps/include
+ DEPEND[threadstest]=../libcrypto libtestutil.a
+
+ SOURCE[threadstest_fips]=threadstest_fips.c
+ INCLUDE[threadstest_fips]=../include ../apps/include
+ DEPEND[threadstest_fips]=../libcrypto libtestutil.a
+
+ SOURCE[afalgtest]=afalgtest.c
+ INCLUDE[afalgtest]=../include ../apps/include
+ DEPEND[afalgtest]=../libcrypto libtestutil.a
+
+ SOURCE[d2i_test]=d2i_test.c
+ INCLUDE[d2i_test]=../include ../apps/include
+ DEPEND[d2i_test]=../libcrypto libtestutil.a
+
+ SOURCE[ssl_test_ctx_test]=ssl_test_ctx_test.c helpers/ssl_test_ctx.c
+ INCLUDE[ssl_test_ctx_test]=../include ../apps/include
+ DEPEND[ssl_test_ctx_test]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[ssl_test]=ssl_test.c helpers/ssl_test_ctx.c helpers/handshake.c
+ IF[{- !$disabled{'srp'} -}]
+ SOURCE[ssl_test]=helpers/handshake_srp.c
+ ENDIF
+ INCLUDE[ssl_test]=../include ../apps/include
+ DEPEND[ssl_test]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[cipherlist_test]=cipherlist_test.c
+ INCLUDE[cipherlist_test]=../include ../apps/include
+ DEPEND[cipherlist_test]=../libcrypto ../libssl libtestutil.a
+
+ INCLUDE[helpers/ssl_test_ctx.o]=../include
+ INCLUDE[helpers/handshake.o]=.. ../include
+ INCLUDE[helpers/pkcs12.o]=.. ../include
+ INCLUDE[helpers/ssltestlib.o]=.. ../include
+ INCLUDE[helpers/cmp_testlib.o]=.. ../include ../apps/include
+
+ SOURCE[x509aux]=x509aux.c
+ INCLUDE[x509aux]=../include ../apps/include
+ DEPEND[x509aux]=../libcrypto libtestutil.a
+
+ SOURCE[asynciotest]=asynciotest.c helpers/ssltestlib.c
+ INCLUDE[asynciotest]=../include ../apps/include
+ DEPEND[asynciotest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[bio_callback_test]=bio_callback_test.c
+ INCLUDE[bio_callback_test]=../include ../apps/include
+ DEPEND[bio_callback_test]=../libcrypto libtestutil.a
+
+ SOURCE[bio_readbuffer_test]=bio_readbuffer_test.c
+ INCLUDE[bio_readbuffer_test]=../include ../apps/include
+ DEPEND[bio_readbuffer_test]=../libcrypto libtestutil.a
+
+ SOURCE[bio_memleak_test]=bio_memleak_test.c
+ INCLUDE[bio_memleak_test]=../include ../apps/include
+ DEPEND[bio_memleak_test]=../libcrypto libtestutil.a
+
+ SOURCE[bioprinttest]=bioprinttest.c
+ INCLUDE[bioprinttest]=../include ../apps/include
+ DEPEND[bioprinttest]=../libcrypto libtestutil.a
+
+ SOURCE[bio_core_test]=bio_core_test.c
+ INCLUDE[bio_core_test]=../include ../apps/include
+ DEPEND[bio_core_test]=../libcrypto libtestutil.a
+
+ SOURCE[params_api_test]=params_api_test.c
+ INCLUDE[params_api_test]=../include ../apps/include
+ DEPEND[params_api_test]=../libcrypto libtestutil.a
+
+ SOURCE[params_conversion_test]=params_conversion_test.c
+ INCLUDE[params_conversion_test]=../include ../apps/include
+ DEPEND[params_conversion_test]=../libcrypto libtestutil.a
+
+ SOURCE[param_build_test]=param_build_test.c
+ INCLUDE[param_build_test]=../include ../apps/include
+ DEPEND[param_build_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[sslapitest]=sslapitest.c helpers/ssltestlib.c filterprov.c tls-provider.c
+ INCLUDE[sslapitest]=../include ../apps/include ..
+ DEPEND[sslapitest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[defltfips_test]=defltfips_test.c
+ INCLUDE[defltfips_test]=../include ../apps/include
+ DEPEND[defltfips_test]=../libcrypto libtestutil.a
+
+ SOURCE[fips_version_test]=fips_version_test.c
+ INCLUDE[fips_version_test]=../include ../apps/include
+ DEPEND[fips_version_test]=../libcrypto libtestutil.a
+
+ SOURCE[ocspapitest]=ocspapitest.c
+ INCLUDE[ocspapitest]=../include ../apps/include
+ DEPEND[ocspapitest]=../libcrypto libtestutil.a
+
+ IF[{- !$disabled{sock} -}]
+ PROGRAMS{noinst}=http_test
+ ENDIF
+
+ SOURCE[http_test]=http_test.c
+ INCLUDE[http_test]=../include ../apps/include
+ DEPEND[http_test]=../libcrypto libtestutil.a
+
+ SOURCE[dtlstest]=dtlstest.c helpers/ssltestlib.c
+ INCLUDE[dtlstest]=../include ../apps/include
+ DEPEND[dtlstest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[sslcorrupttest]=sslcorrupttest.c helpers/ssltestlib.c
+ INCLUDE[sslcorrupttest]=../include ../apps/include
+ DEPEND[sslcorrupttest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[bio_enc_test]=bio_enc_test.c
+ INCLUDE[bio_enc_test]=../include ../apps/include
+ DEPEND[bio_enc_test]=../libcrypto libtestutil.a
+
+ SOURCE[pkey_meth_test]=pkey_meth_test.c
+ INCLUDE[pkey_meth_test]=../include ../apps/include
+ DEPEND[pkey_meth_test]=../libcrypto libtestutil.a
+
+ SOURCE[pkey_meth_kdf_test]=pkey_meth_kdf_test.c
+ INCLUDE[pkey_meth_kdf_test]=../include ../apps/include
+ DEPEND[pkey_meth_kdf_test]=../libcrypto libtestutil.a
+
+ SOURCE[evp_kdf_test]=evp_kdf_test.c
+ INCLUDE[evp_kdf_test]=../include ../apps/include
+ DEPEND[evp_kdf_test]=../libcrypto libtestutil.a
+
+ SOURCE[evp_pkey_dparams_test]=evp_pkey_dparams_test.c
+ INCLUDE[evp_pkey_dparams_test]=../include ../apps/include
+ DEPEND[evp_pkey_dparams_test]=../libcrypto libtestutil.a
+
+ SOURCE[x509_time_test]=x509_time_test.c
+ INCLUDE[x509_time_test]=../include ../apps/include
+ DEPEND[x509_time_test]=../libcrypto libtestutil.a
+
+ SOURCE[recordlentest]=recordlentest.c helpers/ssltestlib.c
+ INCLUDE[recordlentest]=../include ../apps/include
+ DEPEND[recordlentest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[drbgtest]=drbgtest.c
+ INCLUDE[drbgtest]=../include ../apps/include ../providers/common/include
+ DEPEND[drbgtest]=../libcrypto.a libtestutil.a
+
+ SOURCE[rand_status_test]=rand_status_test.c
+ INCLUDE[rand_status_test]=../include ../apps/include
+ DEPEND[rand_status_test]=../libcrypto libtestutil.a
+
+ SOURCE[x509_dup_cert_test]=x509_dup_cert_test.c
+ INCLUDE[x509_dup_cert_test]=../include ../apps/include
+ DEPEND[x509_dup_cert_test]=../libcrypto libtestutil.a
+
+ SOURCE[x509_check_cert_pkey_test]=x509_check_cert_pkey_test.c
+ INCLUDE[x509_check_cert_pkey_test]=../include ../apps/include
+ DEPEND[x509_check_cert_pkey_test]=../libcrypto libtestutil.a
+
+ SOURCE[pemtest]=pemtest.c
+ INCLUDE[pemtest]=../include ../apps/include
+ DEPEND[pemtest]=../libcrypto libtestutil.a
+
+ SOURCE[ssl_cert_table_internal_test]=ssl_cert_table_internal_test.c
+ INCLUDE[ssl_cert_table_internal_test]=.. ../include ../apps/include
+ DEPEND[ssl_cert_table_internal_test]=../libcrypto libtestutil.a
+
+ SOURCE[ciphername_test]=ciphername_test.c
+ INCLUDE[ciphername_test]=../include ../apps/include
+ DEPEND[ciphername_test]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[http_test]=http_test.c
+ INCLUDE[http_test]=../include ../apps/include
+ DEPEND[http_test]=../libcrypto libtestutil.a
+
+ SOURCE[servername_test]=servername_test.c helpers/ssltestlib.c
+ INCLUDE[servername_test]=../include ../apps/include
+ DEPEND[servername_test]=../libcrypto ../libssl libtestutil.a
+
+ IF[{- !$disabled{cms} -}]
+ PROGRAMS{noinst}=cmsapitest
+ SOURCE[cmsapitest]=cmsapitest.c
+ INCLUDE[cmsapitest]=../include ../apps/include
+ DEPEND[cmsapitest]=../libcrypto libtestutil.a
+ ENDIF
+
+ IF[{- !$disabled{psk} -}]
+ PROGRAMS{noinst}=dtls_mtu_test
+ SOURCE[dtls_mtu_test]=dtls_mtu_test.c helpers/ssltestlib.c
+ INCLUDE[dtls_mtu_test]=.. ../include ../apps/include
+ DEPEND[dtls_mtu_test]=../libcrypto ../libssl libtestutil.a
+ ENDIF
+
+ IF[{- !$disabled{shared} -}]
+ PROGRAMS{noinst}=shlibloadtest
+ SOURCE[shlibloadtest]=shlibloadtest.c simpledynamic.c
+ INCLUDE[shlibloadtest]=../include ../apps/include
+
+ PROGRAMS{noinst}=moduleloadtest
+ SOURCE[moduleloadtest]=moduleloadtest.c simpledynamic.c
+ INCLUDE[moduleloadtest]=../include ../apps/include
+ ENDIF
+
+ # cipher_overhead_test uses internal symbols, so it must be linked with
+ # the static libraries
+ PROGRAMS{noinst}=cipher_overhead_test
+ SOURCE[cipher_overhead_test]=cipher_overhead_test.c
+ INCLUDE[cipher_overhead_test]=.. ../include ../apps/include
+ DEPEND[cipher_overhead_test]=../libcrypto.a ../libssl.a libtestutil.a
+
+ SOURCE[uitest]=uitest.c ../apps/lib/apps_ui.c
+ INCLUDE[uitest]=.. ../include ../apps/include
+ DEPEND[uitest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[cipherbytes_test]=cipherbytes_test.c
+ INCLUDE[cipherbytes_test]=../include ../apps/include
+ DEPEND[cipherbytes_test]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[asn1_encode_test]=asn1_encode_test.c
+ INCLUDE[asn1_encode_test]=../include ../apps/include
+ DEPEND[asn1_encode_test]=../libcrypto libtestutil.a
+
+ SOURCE[asn1_decode_test]=asn1_decode_test.c
+ INCLUDE[asn1_decode_test]=../include ../apps/include
+ DEPEND[asn1_decode_test]=../libcrypto libtestutil.a
+
+ SOURCE[asn1_string_table_test]=asn1_string_table_test.c
+ INCLUDE[asn1_string_table_test]=../include ../apps/include
+ DEPEND[asn1_string_table_test]=../libcrypto libtestutil.a
+
+ SOURCE[asn1_stable_parse_test]=asn1_stable_parse_test.c
+ INCLUDE[asn1_stable_parse_test]=../include ../apps/include
+ DEPEND[asn1_stable_parse_test]=../libcrypto libtestutil.a
+
+ SOURCE[time_offset_test]=time_offset_test.c
+ INCLUDE[time_offset_test]=../include ../apps/include
+ DEPEND[time_offset_test]=../libcrypto libtestutil.a
+
+ SOURCE[conf_include_test]=conf_include_test.c
+ INCLUDE[conf_include_test]=../include ../apps/include
+ DEPEND[conf_include_test]=../libcrypto libtestutil.a
+
+ IF[{- !$disabled{cmp} -}]
+ PROGRAMS{noinst}=cmp_asn_test cmp_ctx_test cmp_status_test cmp_hdr_test \
+ cmp_protect_test cmp_msg_test cmp_vfy_test \
+ cmp_server_test cmp_client_test
+ ENDIF
+
+ SOURCE[cmp_asn_test]=cmp_asn_test.c helpers/cmp_testlib.c
+ INCLUDE[cmp_asn_test]=.. ../include ../apps/include
+ DEPEND[cmp_asn_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[cmp_ctx_test]=cmp_ctx_test.c helpers/cmp_testlib.c
+ INCLUDE[cmp_ctx_test]=.. ../include ../apps/include
+ DEPEND[cmp_ctx_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[cmp_hdr_test]=cmp_hdr_test.c helpers/cmp_testlib.c
+ INCLUDE[cmp_hdr_test]=.. ../include ../apps/include
+ DEPEND[cmp_hdr_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[cmp_status_test]=cmp_status_test.c helpers/cmp_testlib.c
+ INCLUDE[cmp_status_test]=.. ../include ../apps/include
+ DEPEND[cmp_status_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[cmp_protect_test]=cmp_protect_test.c helpers/cmp_testlib.c
+ INCLUDE[cmp_protect_test]=.. ../include ../apps/include
+ DEPEND[cmp_protect_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[cmp_msg_test]=cmp_msg_test.c helpers/cmp_testlib.c
+ INCLUDE[cmp_msg_test]=.. ../include ../apps/include
+ DEPEND[cmp_msg_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[cmp_vfy_test]=cmp_vfy_test.c helpers/cmp_testlib.c
+ INCLUDE[cmp_vfy_test]=.. ../include ../apps/include
+ DEPEND[cmp_vfy_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[cmp_server_test]=cmp_server_test.c helpers/cmp_testlib.c
+ INCLUDE[cmp_server_test]=.. ../include ../apps/include
+ DEPEND[cmp_server_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[cmp_client_test]=cmp_client_test.c helpers/cmp_testlib.c ../apps/lib/cmp_mock_srv.c
+ INCLUDE[cmp_client_test]=.. ../include ../apps/include
+ DEPEND[cmp_client_test]=../libcrypto.a libtestutil.a
+
+ # Internal test programs. These are essentially a collection of internal
+ # test routines. Some of them need to reach internal symbols that aren't
+ # available through the shared library (at least on Linux, Solaris, Windows
+ # and VMS, where the exported symbols are those listed in util/*.num), these
+ # programs are forcibly linked with the static libraries, where all symbols
+ # are always available.
+ IF[1]
+ PROGRAMS{noinst}=asn1_internal_test modes_internal_test x509_internal_test \
+ tls13encryptiontest wpackettest ctype_internal_test \
+ rdrand_sanitytest property_test ideatest rsa_mp_test \
+ rsa_sp800_56b_test bn_internal_test ecdsatest rsa_test \
+ rc2test rc4test rc5test hmactest ffc_internal_test \
+ asn1_dsa_internal_test dsatest dsa_no_digest_size_test \
+ dhtest ssl_old_test
+
+ IF[{- !$disabled{poly1305} -}]
+ PROGRAMS{noinst}=poly1305_internal_test
+ ENDIF
+ IF[{- !$disabled{chacha} -}]
+ PROGRAMS{noinst}=chacha_internal_test
+ ENDIF
+ IF[{- !$disabled{siphash} -}]
+ PROGRAMS{noinst}=siphash_internal_test
+ ENDIF
+ IF[{- !$disabled{sm2} -}]
+ PROGRAMS{noinst}=sm2_internal_test
+ ENDIF
+ IF[{- !$disabled{sm3} -}]
+ PROGRAMS{noinst}=sm3_internal_test
+ ENDIF
+ IF[{- !$disabled{sm4} -}]
+ PROGRAMS{noinst}=sm4_internal_test
+ ENDIF
+ IF[{- !$disabled{ec} -}]
+ PROGRAMS{noinst}=ectest ec_internal_test curve448_internal_test
+ ENDIF
+ IF[{- !$disabled{cmac} -}]
+ PROGRAMS{noinst}=cmactest
+ ENDIF
+
+ SOURCE[poly1305_internal_test]=poly1305_internal_test.c
+ INCLUDE[poly1305_internal_test]=.. ../include ../apps/include
+ DEPEND[poly1305_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[chacha_internal_test]=chacha_internal_test.c
+ INCLUDE[chacha_internal_test]=.. ../include ../apps/include
+ DEPEND[chacha_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[asn1_internal_test]=asn1_internal_test.c
+ INCLUDE[asn1_internal_test]=.. ../include ../apps/include
+ DEPEND[asn1_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[modes_internal_test]=modes_internal_test.c
+ INCLUDE[modes_internal_test]=.. ../include ../apps/include
+ DEPEND[modes_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[x509_internal_test]=x509_internal_test.c
+ INCLUDE[x509_internal_test]=.. ../include ../apps/include
+ DEPEND[x509_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[rsa_test]=rsa_test.c
+ INCLUDE[rsa_test]=../include ../apps/include
+ DEPEND[rsa_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[rsa_mp_test]=rsa_mp_test.c
+ INCLUDE[rsa_mp_test]=../include ../apps/include
+ DEPEND[rsa_mp_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[ecdsatest]=ecdsatest.c
+ INCLUDE[ecdsatest]=../include ../apps/include
+ DEPEND[ecdsatest]=../libcrypto.a libtestutil.a
+
+ SOURCE[dsatest]=dsatest.c
+ INCLUDE[dsatest]=../include ../apps/include
+ DEPEND[dsatest]=../libcrypto.a libtestutil.a
+
+ SOURCE[dsa_no_digest_size_test]=dsa_no_digest_size_test.c
+ INCLUDE[dsa_no_digest_size_test]=../include ../apps/include
+ DEPEND[dsa_no_digest_size_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[tls13encryptiontest]=tls13encryptiontest.c
+ INCLUDE[tls13encryptiontest]=.. ../include ../apps/include
+ DEPEND[tls13encryptiontest]=../libcrypto.a ../libssl.a libtestutil.a
+
+ SOURCE[ideatest]=ideatest.c
+ INCLUDE[ideatest]=../include ../apps/include
+ DEPEND[ideatest]=../libcrypto.a libtestutil.a
+
+ SOURCE[wpackettest]=wpackettest.c
+ INCLUDE[wpackettest]=../include ../apps/include
+ DEPEND[wpackettest]=../libcrypto.a ../libssl.a libtestutil.a
+
+ SOURCE[property_test]=property_test.c
+ INCLUDE[property_test]=.. ../include ../apps/include
+ DEPEND[property_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[ctype_internal_test]=ctype_internal_test.c
+ INCLUDE[ctype_internal_test]=.. ../include ../apps/include
+ DEPEND[ctype_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[sparse_array_test]=sparse_array_test.c
+ INCLUDE[sparse_array_test]=../include ../apps/include
+ DEPEND[sparse_array_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[dhtest]=dhtest.c
+ INCLUDE[dhtest]=../include ../apps/include
+ DEPEND[dhtest]=../libcrypto.a libtestutil.a
+
+ SOURCE[hmactest]=hmactest.c
+ INCLUDE[hmactest]=../include ../apps/include
+ DEPEND[hmactest]=../libcrypto.a libtestutil.a
+
+ IF[{- !$disabled{cmac} -}]
+ SOURCE[cmactest]=cmactest.c
+ INCLUDE[cmactest]=../include ../apps/include
+ DEPEND[cmactest]=../libcrypto.a libtestutil.a
+ ENDIF
+
+ SOURCE[siphash_internal_test]=siphash_internal_test.c
+ INCLUDE[siphash_internal_test]=.. ../include ../apps/include
+ DEPEND[siphash_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[sm2_internal_test]=sm2_internal_test.c
+ INCLUDE[sm2_internal_test]=../include ../apps/include
+ DEPEND[sm2_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[sm3_internal_test]=sm3_internal_test.c
+ INCLUDE[sm3_internal_test]=../include ../apps/include
+ DEPEND[sm3_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[sm4_internal_test]=sm4_internal_test.c
+ INCLUDE[sm4_internal_test]=.. ../include ../apps/include
+ DEPEND[sm4_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[destest]=destest.c
+ INCLUDE[destest]=../include ../apps/include
+ DEPEND[destest]=../libcrypto.a libtestutil.a
+
+ SOURCE[rc2test]=rc2test.c
+ INCLUDE[rc2test]=../include ../apps/include
+ DEPEND[rc2test]=../libcrypto.a libtestutil.a
+
+ SOURCE[rc4test]=rc4test.c
+ INCLUDE[rc4test]=../include ../apps/include
+ DEPEND[rc4test]=../libcrypto.a libtestutil.a
+
+ SOURCE[rc5test]=rc5test.c
+ INCLUDE[rc5test]=../include ../apps/include
+ DEPEND[rc5test]=../libcrypto.a libtestutil.a
+
+ SOURCE[ec_internal_test]=ec_internal_test.c $INITSRC
+ INCLUDE[ec_internal_test]=../include ../crypto/ec ../apps/include
+ DEPEND[ec_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[curve448_internal_test]=curve448_internal_test.c
+ INCLUDE[curve448_internal_test]=.. ../include ../apps/include ../crypto/ec/curve448
+ DEPEND[curve448_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[rc4test]=rc4test.c
+ INCLUDE[rc4test]=../include ../apps/include
+ DEPEND[rc4test]=../libcrypto.a libtestutil.a
+
+ SOURCE[rdrand_sanitytest]=rdrand_sanitytest.c
+ INCLUDE[rdrand_sanitytest]=../include ../apps/include
+ DEPEND[rdrand_sanitytest]=../libcrypto.a libtestutil.a
+
+ SOURCE[rsa_sp800_56b_test]=rsa_sp800_56b_test.c
+ INCLUDE[rsa_sp800_56b_test]=.. ../include ../crypto/rsa ../apps/include
+ DEPEND[rsa_sp800_56b_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[bn_internal_test]=bn_internal_test.c
+ INCLUDE[bn_internal_test]=.. ../include ../crypto/bn ../apps/include
+ DEPEND[bn_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[asn1_dsa_internal_test]=asn1_dsa_internal_test.c
+ INCLUDE[asn1_dsa_internal_test]=.. ../include ../apps/include
+ DEPEND[asn1_dsa_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[keymgmt_internal_test]=keymgmt_internal_test.c
+ INCLUDE[keymgmt_internal_test]=.. ../include ../apps/include
+ DEPEND[keymgmt_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[ffc_internal_test]=ffc_internal_test.c
+ INCLUDE[ffc_internal_test]=.. ../include ../apps/include
+ DEPEND[ffc_internal_test]=../libcrypto.a libtestutil.a
+
+ IF[{- !$disabled{mdc2} -}]
+ PROGRAMS{noinst}=mdc2_internal_test
+ ENDIF
+
+ SOURCE[mdc2_internal_test]=mdc2_internal_test.c
+ INCLUDE[mdc2_internal_test]=.. ../include ../apps/include
+ DEPEND[mdc2_internal_test]=../libcrypto.a libtestutil.a
+
+ SOURCE[ssl_old_test]=ssl_old_test.c helpers/predefined_dhparams.c
+ INCLUDE[ssl_old_test]=.. ../include ../apps/include
+ DEPEND[ssl_old_test]=../libcrypto.a ../libssl.a libtestutil.a
+
+ PROGRAMS{noinst}=ext_internal_test
+ SOURCE[ext_internal_test]=ext_internal_test.c
+ INCLUDE[ext_internal_test]=.. ../include ../apps/include
+ DEPEND[ext_internal_test]=../libcrypto.a ../libssl.a libtestutil.a
+
+ PROGRAMS{noinst}=algorithmid_test
+ SOURCE[algorithmid_test]=algorithmid_test.c
+ INCLUDE[algorithmid_test]=../include ../apps/include
+ DEPEND[algorithmid_test]=../libcrypto.a libtestutil.a
+ ENDIF
+
+ PROGRAMS{noinst}=asn1_time_test
+ SOURCE[asn1_time_test]=asn1_time_test.c
+ INCLUDE[asn1_time_test]=../include ../apps/include
+ DEPEND[asn1_time_test]=../libcrypto libtestutil.a
+
+ # We disable this test completely in a shared build because it deliberately
+ # redefines some internal libssl symbols. This doesn't work in a non-shared
+ # build
+ IF[{- !$disabled{shared} -}]
+ PROGRAMS{noinst}=tls13secretstest
+ SOURCE[tls13secretstest]=tls13secretstest.c
+ DEFINE[tls13secretstest]=OPENSSL_NO_KTLS
+ SOURCE[tls13secretstest]= ../ssl/tls13_enc.c ../crypto/packet.c
+ INCLUDE[tls13secretstest]=.. ../include ../apps/include
+ DEPEND[tls13secretstest]=../libcrypto ../libssl libtestutil.a
+ ENDIF
+
+ SOURCE[sslbuffertest]=sslbuffertest.c helpers/ssltestlib.c
+ INCLUDE[sslbuffertest]=../include ../apps/include
+ DEPEND[sslbuffertest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[sysdefaulttest]=sysdefaulttest.c
+ INCLUDE[sysdefaulttest]=../include ../apps/include
+ DEPEND[sysdefaulttest]=../libcrypto ../libssl libtestutil.a
+
+ SOURCE[errtest]=errtest.c
+ INCLUDE[errtest]=../include ../apps/include
+ DEPEND[errtest]=../libcrypto libtestutil.a
+
+ SOURCE[aesgcmtest]=aesgcmtest.c
+ INCLUDE[aesgcmtest]=../include ../apps/include ..
+ DEPEND[aesgcmtest]=../libcrypto libtestutil.a
+
+ PROGRAMS{noinst}=context_internal_test
+ SOURCE[context_internal_test]=context_internal_test.c
+ INCLUDE[context_internal_test]=.. ../include ../apps/include
+ DEPEND[context_internal_test]=../libcrypto.a libtestutil.a
+
+ PROGRAMS{noinst}=provider_internal_test
+ DEFINE[provider_internal_test]=PROVIDER_INIT_FUNCTION_NAME=p_test_init
+ SOURCE[provider_internal_test]=provider_internal_test.c p_test.c
+ INCLUDE[provider_internal_test]=../include ../apps/include ..
+ DEPEND[provider_internal_test]=../libcrypto.a libtestutil.a
+ PROGRAMS{noinst}=provider_test
+ DEFINE[provider_test]=PROVIDER_INIT_FUNCTION_NAME=p_test_init
+ SOURCE[provider_test]=provider_test.c p_test.c
+ INCLUDE[provider_test]=../include ../apps/include ..
+ DEPEND[provider_test]=../libcrypto.a libtestutil.a
+ IF[{- !$disabled{module} -}]
+ MODULES{noinst}=p_test
+ SOURCE[p_test]=p_test.c
+ INCLUDE[p_test]=../include ..
+ IF[{- defined $target{shared_defflag} -}]
+ SOURCE[p_test]=p_test.ld
+ GENERATE[p_test.ld]=../util/providers.num
+ ENDIF
+ MODULES{noinst}=p_minimal
+ SOURCE[p_minimal]=p_minimal.c
+ INCLUDE[p_minimal]=../include ..
+ IF[{- defined $target{shared_defflag} -}]
+ SOURCE[p_minimal]=p_minimal.ld
+ GENERATE[p_minimal.ld]=../util/providers.num
+ ENDIF
+ ENDIF
+ IF[{- $disabled{module} || !$target{dso_scheme} -}]
+ DEFINE[provider_test]=NO_PROVIDER_MODULE
+ DEFINE[provider_internal_test]=NO_PROVIDER_MODULE
+ ENDIF
+ DEPEND[]=provider_internal_test.cnf
+ GENERATE[provider_internal_test.cnf]=provider_internal_test.cnf.in
+
+ PROGRAMS{noinst}=provider_fallback_test
+ SOURCE[provider_fallback_test]=provider_fallback_test.c
+ INCLUDE[provider_fallback_test]=../include ../apps/include
+ DEPEND[provider_fallback_test]=../libcrypto libtestutil.a
+
+ PROGRAMS{noinst}=provider_pkey_test
+ SOURCE[provider_pkey_test]=provider_pkey_test.c fake_rsaprov.c
+ INCLUDE[provider_pkey_test]=../include ../apps/include
+ DEPEND[provider_pkey_test]=../libcrypto libtestutil.a
+
+ PROGRAMS{noinst}=params_test
+ SOURCE[params_test]=params_test.c
+ INCLUDE[params_test]=.. ../include ../apps/include
+ DEPEND[params_test]=../libcrypto.a libtestutil.a
+
+ PROGRAMS{noinst}=hexstr_test
+ SOURCE[hexstr_test]=hexstr_test.c
+ INCLUDE[hexstr_test]=.. ../include ../apps/include
+ DEPEND[hexstr_test]=../libcrypto.a libtestutil.a
+
+ PROGRAMS{noinst}=trace_api_test
+ SOURCE[trace_api_test]=trace_api_test.c
+ INCLUDE[trace_api_test]=.. ../include ../apps/include
+ DEPEND[trace_api_test]=../libcrypto.a libtestutil.a
+
+ PROGRAMS{noinst}=endecode_test
+ SOURCE[endecode_test]=endecode_test.c helpers/predefined_dhparams.c
+ INCLUDE[endecode_test]=.. ../include ../apps/include
+ DEPEND[endecode_test]=../libcrypto.a libtestutil.a
+
+ IF[{- !$disabled{'deprecated-3.0'} -}]
+ PROGRAMS{noinst}=endecoder_legacy_test
+ SOURCE[endecoder_legacy_test]=endecoder_legacy_test.c
+ INCLUDE[endecoder_legacy_test]=.. ../include ../apps/include
+ DEPEND[endecoder_legacy_test]=../libcrypto.a libtestutil.a
+ ENDIF
+
+ PROGRAMS{noinst}=namemap_internal_test
+ SOURCE[namemap_internal_test]=namemap_internal_test.c
+ INCLUDE[namemap_internal_test]=.. ../include ../apps/include
+ DEPEND[namemap_internal_test]=../libcrypto.a libtestutil.a
+
+ PROGRAMS{noinst}=bio_prefix_text
+ SOURCE[bio_prefix_text]=bio_prefix_text.c
+ INCLUDE[bio_prefix_text]=.. ../include ../apps/include
+ DEPEND[bio_prefix_text]=../libcrypto libtestutil.a
+
+ IF[{- !$disabled{'deprecated-3.0'} -}]
+ PROGRAMS{noinst}=pem_read_depr_test
+ SOURCE[pem_read_depr_test]=pem_read_depr_test.c
+ INCLUDE[pem_read_depr_test]=../include ../apps/include
+ DEPEND[pem_read_depr_test]=../libcrypto libtestutil.a
+ ENDIF
+ENDIF
+
+ SOURCE[ssl_ctx_test]=ssl_ctx_test.c
+ INCLUDE[ssl_ctx_test]=../include ../apps/include
+ DEPEND[ssl_ctx_test]=../libcrypto ../libssl libtestutil.a
+
+{-
+ use File::Spec::Functions;
+ use File::Basename;
+ use OpenSSL::Glob;
+
+ my @nogo_headers = ( "asn1_mac.h",
+ "opensslconf.h",
+ "__decc_include_prologue.h",
+ "__decc_include_epilogue.h" );
+ my @nogo_headers_re = ( qr/.*err\.h/ );
+ my @headerfiles = glob catfile($sourcedir,
+ updir(), "include", "openssl", "*.h");
+
+ foreach my $headerfile (@headerfiles) {
+ my $name = basename($headerfile, ".h");
+ next if $disabled{$name};
+ next if grep { $_ eq lc("$name.h") } @nogo_headers;
+ next if grep { lc("$name.h") =~ m/$_/i } @nogo_headers_re;
+ $OUT .= <<"_____";
+
+ PROGRAMS{noinst}=buildtest_c_$name
+ SOURCE[buildtest_c_$name]=buildtest_$name.c
+ GENERATE[buildtest_$name.c]=generate_buildtest.pl $name
+ INCLUDE[buildtest_c_$name]=../include
+ DEPEND[buildtest_c_$name]=../libssl ../libcrypto
+_____
+ $OUT .= <<"_____" if $config{CXX} && !$disabled{"buildtest-c++"};
+
+ PROGRAMS{noinst}=buildtest_cc_$name
+ SOURCE[buildtest_cc_$name]=buildtest_$name.cc
+ GENERATE[buildtest_$name.cc]=generate_buildtest.pl $name
+ INCLUDE[buildtest_cc_$name]=../include
+ DEPEND[buildtest_cc_$name]=../libssl ../libcrypto
+_____
+ }
+-}
diff --git a/test/ca-and-certs.cnf b/test/ca-and-certs.cnf
new file mode 100644
index 000000000000..463b49954c63
--- /dev/null
+++ b/test/ca-and-certs.cnf
@@ -0,0 +1,89 @@
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+CN2 = Brother 2
+
+####################################################################
+[ req ]
+distinguished_name = req_distinguished_name
+encrypt_rsa_key = no
+default_md = sha1
+
+[ req_distinguished_name ]
+countryName = Country Name (2 letter code)
+countryName_value = AU
+organizationName = Organization Name (eg, company)
+organizationName_value = Dodgy Brothers
+commonName = Common Name (eg, YOUR name)
+commonName_value = Dodgy CA
+
+####################################################################
+[ userreq ]
+distinguished_name = user_dn
+encrypt_rsa_key = no
+default_md = sha256
+prompt = no
+
+[ user_dn ]
+countryName = AU
+organizationName = Dodgy Brothers
+0.commonName = Brother 1
+1.commonName = $ENV::CN2
+
+[ v3_ee ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid,issuer:always
+basicConstraints = CA:false
+keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+[ v3_ee_dsa ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always
+basicConstraints = CA:false
+keyUsage = nonRepudiation, digitalSignature
+
+[ v3_ee_ec ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always
+basicConstraints = CA:false
+keyUsage = nonRepudiation, digitalSignature, keyAgreement
+
+####################################################################
+[ ca ]
+default_ca = CA_default
+
+[ CA_default ]
+dir = ./demoCA
+certs = $dir/certs
+crl_dir = $dir/crl
+database = $dir/index.txt
+new_certs_dir = $dir/newcerts
+certificate = $dir/cacert.pem
+serial = $dir/serial
+crl = $dir/crl.pem
+private_key = $dir/private/cakey.pem
+x509_extensions = v3_ca
+name_opt = ca_default
+cert_opt = ca_default
+default_days = 365
+default_crl_days= 30
+default_md = sha1
+preserve = no
+policy = policy_anything
+
+[ policy_anything ]
+countryName = optional
+stateOrProvinceName = optional
+localityName = optional
+organizationName = optional
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+[ v3_ca ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always,issuer:always
+basicConstraints = critical,CA:true,pathlen:1
+keyUsage = cRLSign, keyCertSign
+issuerAltName = issuer:copy
diff --git a/test/casttest.c b/test/casttest.c
new file mode 100644
index 000000000000..5bc47e824ad2
--- /dev/null
+++ b/test/casttest.c
@@ -0,0 +1,118 @@
+/*
+ * 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
+ */
+
+/*
+ * CAST low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_CAST is defined */
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_CAST
+# include <openssl/cast.h>
+
+static unsigned char k[16] = {
+ 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
+ 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A
+};
+
+static unsigned char in[8] =
+ { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };
+
+static int k_len[3] = { 16, 10, 5 };
+
+static unsigned char c[3][8] = {
+ {0x23, 0x8B, 0x4F, 0xE5, 0x84, 0x7E, 0x44, 0xB2},
+ {0xEB, 0x6A, 0x71, 0x1A, 0x2C, 0x02, 0x27, 0x1B},
+ {0x7A, 0xC8, 0x16, 0xD1, 0x6E, 0x9B, 0x30, 0x2E},
+};
+
+static unsigned char in_a[16] = {
+ 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
+ 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A
+};
+
+static unsigned char in_b[16] = {
+ 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
+ 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A
+};
+
+static unsigned char c_a[16] = {
+ 0xEE, 0xA9, 0xD0, 0xA2, 0x49, 0xFD, 0x3B, 0xA6,
+ 0xB3, 0x43, 0x6F, 0xB8, 0x9D, 0x6D, 0xCA, 0x92
+};
+
+static unsigned char c_b[16] = {
+ 0xB2, 0xC9, 0x5E, 0xB0, 0x0C, 0x31, 0xAD, 0x71,
+ 0x80, 0xAC, 0x05, 0xB8, 0xE8, 0x3D, 0x69, 0x6E
+};
+
+static int cast_test_vector(int z)
+{
+ int testresult = 1;
+ CAST_KEY key;
+ unsigned char out[80];
+
+ CAST_set_key(&key, k_len[z], k);
+ CAST_ecb_encrypt(in, out, &key, CAST_ENCRYPT);
+ if (!TEST_mem_eq(out, sizeof(c[z]), c[z], sizeof(c[z]))) {
+ TEST_info("CAST_ENCRYPT iteration %d failed (len=%d)", z, k_len[z]);
+ testresult = 0;
+ }
+
+ CAST_ecb_encrypt(out, out, &key, CAST_DECRYPT);
+ if (!TEST_mem_eq(out, sizeof(in), in, sizeof(in))) {
+ TEST_info("CAST_DECRYPT iteration %d failed (len=%d)", z, k_len[z]);
+ testresult = 0;
+ }
+ return testresult;
+}
+
+static int cast_test_iterations(void)
+{
+ long l;
+ int testresult = 1;
+ CAST_KEY key, key_b;
+ unsigned char out_a[16], out_b[16];
+
+ memcpy(out_a, in_a, sizeof(in_a));
+ memcpy(out_b, in_b, sizeof(in_b));
+
+ for (l = 0; l < 1000000L; l++) {
+ CAST_set_key(&key_b, 16, out_b);
+ CAST_ecb_encrypt(&(out_a[0]), &(out_a[0]), &key_b, CAST_ENCRYPT);
+ CAST_ecb_encrypt(&(out_a[8]), &(out_a[8]), &key_b, CAST_ENCRYPT);
+ CAST_set_key(&key, 16, out_a);
+ CAST_ecb_encrypt(&(out_b[0]), &(out_b[0]), &key, CAST_ENCRYPT);
+ CAST_ecb_encrypt(&(out_b[8]), &(out_b[8]), &key, CAST_ENCRYPT);
+ }
+
+ if (!TEST_mem_eq(out_a, sizeof(c_a), c_a, sizeof(c_a))
+ || !TEST_mem_eq(out_b, sizeof(c_b), c_b, sizeof(c_b)))
+ testresult = 0;
+
+ return testresult;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_CAST
+ ADD_ALL_TESTS(cast_test_vector, OSSL_NELEM(k_len));
+ ADD_TEST(cast_test_iterations);
+#endif
+ return 1;
+}
diff --git a/test/certs/alt1-cert.pem b/test/certs/alt1-cert.pem
new file mode 100644
index 000000000000..d68b0e519305
--- /dev/null
+++ b/test/certs/alt1-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDgTCCAmmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMTgwNTE2MDIzODEzWhgPMjExODA1MTcwMjM4MTNaMFQxIzAh
+BgNVBAoMGkdvb2QgTkMgVGVzdCBDZXJ0aWZpY2F0ZSAxMRgwFgYDVQQDDA93d3cu
+ZXhhbXBsZS5uZXQxEzARBgNVBAMMCkpvZSBCbG9nZ3MwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQDTqvf6j+WxCtn4RU8/6uXXgCTcksv6NDXCZ9JAz4Vv
+cQbJfhFbDWpGZQZDOCqwtj+7CSVIraxItHzPlrt36cevsoPmpuqGbHrUaOLneme2
+x81SXUq0z/DmDvwxVENmRj1u7iCt3sL7awcid4SiotLOY2F1jBazmqprqKZBUiyQ
+XqpSp+9uSav77ydwDXCrQozBdns1YRshgU9omQrTcIqHCj1f9Lo+A2y4+TZYZkvS
+DuUZiTfPTPouR6sopM8JLyAZc+TvFFncEg24N+zz3O3jwH82BZEjzavw92J9npJB
+UXvKb8O9z7UA65WYuL2he7kSQCsPNLoRWZnVpchwr3VHAgMBAAGjgZgwgZUwHQYD
+VR0OBBYEFHvLhGWckFjVXdDI3ds9Wti6zgXAMB8GA1UdIwQYMBaAFAjRm/nm1WRw
+oPFrGp7tUtrd9VBDMAkGA1UdEwQCMAAwSAYDVR0RBEEwP4IMd3d3Lmdvb2Qub3Jn
+ggxhbnkuZ29vZC5jb22BDWdvb2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbYcEwKgA
+ATANBgkqhkiG9w0BAQsFAAOCAQEATVcTyrAxsehdQNrkL6kquXxWlyegJcxvVxUe
+hfh9+Lw4620b2S1/l2YxFM3peLAsRgJOznmJOeG18+y7/kx/3UNqYGY7e8iJQ3Gl
+JwDIJp5JCaUOlodjhMJtRc7jn9RcsL97oizXdcryyWT0vSlM9Pie9NtHG5iq5X4+
+oL3X8+OG25MOkF2h3YVCEG3vDu7quyTlHc2ebwpdLZRndcOewO2Cap1ettyWXUPP
+Mha6wyJE8LJhrGmrI8Lw+i7gGscP0xYZn3yCLk5BtOabn4dvCiDmb+TPruKQQARw
+BG45LEZzGxz+Ad3xRdZyVi1I67v9YShoYTCpMTSxJaR0erH74g==
+-----END CERTIFICATE-----
diff --git a/test/certs/alt1-key.pem b/test/certs/alt1-key.pem
new file mode 100644
index 000000000000..6df050a38f3a
--- /dev/null
+++ b/test/certs/alt1-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDTqvf6j+WxCtn4
+RU8/6uXXgCTcksv6NDXCZ9JAz4VvcQbJfhFbDWpGZQZDOCqwtj+7CSVIraxItHzP
+lrt36cevsoPmpuqGbHrUaOLneme2x81SXUq0z/DmDvwxVENmRj1u7iCt3sL7awci
+d4SiotLOY2F1jBazmqprqKZBUiyQXqpSp+9uSav77ydwDXCrQozBdns1YRshgU9o
+mQrTcIqHCj1f9Lo+A2y4+TZYZkvSDuUZiTfPTPouR6sopM8JLyAZc+TvFFncEg24
+N+zz3O3jwH82BZEjzavw92J9npJBUXvKb8O9z7UA65WYuL2he7kSQCsPNLoRWZnV
+pchwr3VHAgMBAAECggEACPTB+1sdV+lioaulF8pDoWOtq5uWf+a3o5sq/U0Kk1WP
++PSZnWWq6oGZyzxUKhf8CFjxt+qJUKY6Zbo2AnPk3B1MkXTclYV/iP9LIoo+WzCH
+EoYaBB6MTd+ycg/jri8oqEnxHgo/681yhtXRyePj0ZHI7OVZjI3tyhJfvoHQmuci
+u6qYYUP0GWuyM+kHS11vn6Q1U8nOZWvXpEDXDDdJ7+2QRuv01AXcjFxpbFzkMn2W
+JkhKkCTIQpUU66VMRHwNexi+TR2rRESq0G+fa+6gaVFVIs0vBukq48IeC5W21j1L
+zyftHxci67FlYC9iaiUxDVt3KB+lcukx6Cz5mjtzqQKBgQD/GrAtFfjiXKj9O5ld
+K7dnnBHE8fzyWQWyOfwpVjNAC1J7tgwFvDpBpTHOwS5JnCwMWWM3rkBPRhCusmrF
+AtfE8b643G+cJbTgDuEhGh11QR0p9VWMVFQL9kZxx12PegDtFBfzcfcI3XQwKVKL
+ZbQn4ibW3BKSt9+Nh3APa0s5iwKBgQDUaTxZBajTdzoDd6Pg3warL5BhsxWr2tUQ
+qf+iVoba2Y9NTBdxBht2whSaYweU9kxmeNZvnCu95B8HeRGE69Dxb7IWwpsaxoaf
+ND0NcCF7aPZgx7hvhbHF7duzt3nuv+q5sOuuyHPzm+nF2snAuY3Zg+Bpv3nlYekf
+18aXZdwStQKBgEpF8e9ei1UUl1sLZC6dUMvIw9+sePHye1cVzNYYM9m8sio0qbFt
+ySRdvW+uDRT/dE+wItQOVsj95FOIvM9ZcYr0u4vFGnXDALOPgXqKyPLfn2cc9+hg
+kQvei0oLOrFQWz6rcAHAN6WMHIz9KvxNAzPtg1NhRcMT5/Gj8jt7CK7bAoGAIeKz
+7OO5Phr8F0eDzkDmGHMbDmr6XxMnAGSOUoCJPOqOMN+dsbsusHBfxw1bTUlJgONw
+GhgI5l85EAEhaVoRWCLgfz8GbWwUV9uGjdlAjiZ9f4z9AFWMua2rae0wN4VIVd1C
+i/yQeuF5lsXDf8paNcQTDeus74oCHcFXfhmS1S0CgYB2q8E+H0kFHbUxkIZYwhsM
+r0lTecn+kVsyPPje2UlzfTwvcC9dFIC4ppCdJGUJAwi/PJnr6xNyOH6I1pjUA8ER
+Aofm4Oj2DwX8W+81oO71/RXSfEFUjdOw0H6iRDyvWa1gqftj2/aWjV7Ifdo49thx
+EzX/9GdsRInifN6FfOfo/A==
+-----END PRIVATE KEY-----
diff --git a/test/certs/alt2-cert.pem b/test/certs/alt2-cert.pem
new file mode 100644
index 000000000000..0e0f1400bbee
--- /dev/null
+++ b/test/certs/alt2-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVjCCAj6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDIwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMCUxIzAh
+BgNVBAoMGkdvb2QgTkMgVGVzdCBDZXJ0aWZpY2F0ZSAyMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAw+bG1zr36IgcElBxX1vFcfq1NhdwjzUWlYt88oVr
+Zbn2cKzOZWTA2ft8slJf5b5AgWWuJ1Ph1EdX9evBvUE3qVUPDpJQ7UNBMvScqL8J
+pCjWBcRK9WWguV6MTqF8dJnadup7qfN0i6IWquA4yDEcJDQR4j0BjoAEsQgkASYi
+maYN5W7PW5swj7AR4K0W5Cwy+KF4+UXKkHPCmYUlbBa6lXZRp3uwU/gXT0fmLz3W
+O8eT1PdoPnbRVFIKPhZrHcNAORti4xr4Cn8IEhTaqxIQnCjSCjhksoOuoojhW0qR
+s9t1lTDxyBX5Uz6smanEyCQ6TQFOdMj4m8ULNYTSZbGYcwIDAQABo4GcMIGZMB0G
+A1UdDgQWBBT4YmD7D7JsE8BJzNs/5cIpbtZxhjAfBgNVHSMEGDAWgBS6A5+dBiSk
+V+Zz+vU6Cfm6hcyp+jAJBgNVHRMEAjAAMEwGA1UdEQRFMEOCEHd3dy5hbnl0aGlu
+Zy5vcmeCDWFueS5vdGhlci5jb22BDW90aGVyQGJhZC5vcmeBEWFueUBzb21ldGhp
+bmcuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQBaH8qg41pSXo2ViEsZWVyUmB7QwVVW
+bWeR191XTQPfPNEDFmUzzeBllMUedF4HyD36v7Flpo/LdPdXQnZQ/eyKalztFHgm
+uePN5DNdS5xn9aqiKNF5pkO9WDhhYuwLRM50JeiyvKk2NvNx9oDFUQ7G6jEJu/r9
+rd+8PCUa0SK1dDPJ9dpGrfsAYwk8kST5/JfyDMrocsijOu3v1uGTttMQ0h0A6w6g
+EW8p77dVS/a2S3wJo9EiFHhnrAN493cwSXgBZUhKoKOri2u6XKV2D3g8N6bp22Ut
+S5wx0pC8o3wW5upPsDAnEUt9kJJgVkS0FfCEHhHZ8iQyuwX15Yft2Qsj
+-----END CERTIFICATE-----
diff --git a/test/certs/alt2-key.pem b/test/certs/alt2-key.pem
new file mode 100644
index 000000000000..4c128006172e
--- /dev/null
+++ b/test/certs/alt2-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDD5sbXOvfoiBwS
+UHFfW8Vx+rU2F3CPNRaVi3zyhWtlufZwrM5lZMDZ+3yyUl/lvkCBZa4nU+HUR1f1
+68G9QTepVQ8OklDtQ0Ey9JyovwmkKNYFxEr1ZaC5XoxOoXx0mdp26nup83SLohaq
+4DjIMRwkNBHiPQGOgASxCCQBJiKZpg3lbs9bmzCPsBHgrRbkLDL4oXj5RcqQc8KZ
+hSVsFrqVdlGne7BT+BdPR+YvPdY7x5PU92g+dtFUUgo+Fmsdw0A5G2LjGvgKfwgS
+FNqrEhCcKNIKOGSyg66iiOFbSpGz23WVMPHIFflTPqyZqcTIJDpNAU50yPibxQs1
+hNJlsZhzAgMBAAECggEAfuMureALDTmD/TTPijV1+TKrRyL9jDSVsT1NLATRIG3I
+OwkjErek1kw3Y4VJihSl0Wpb2CtT3dxsE+Slc4EXnX1zqDuLYXKre2bHReGfTA4L
+Omb/Kl2uMgMUnCWq6BdzUozklpsTRRIy3nEnNjvg/24em0xqgrNW1pfwQjJCPQQX
+5ZLma+msDjT0BW2V7cnVh76A8qjDVRvJzKGRseVZEh+8Uke+SIKKLi1qICcK6MmX
+1TpGs/Yy+GaXk7HajmKEYEEDSRdS9sqFnvqkf1TsbHrZQqKdtWuXtIvss1ap7y1c
+PL5Y1z0/zf5WXV9nV3Yjd7F1tTN6S4sY7exOgNenmQKBgQDtkElQSwPHI3GCddfp
+Eo79w0K0N+PkkQTXkP/3566xTCg78xGU1HW0aw8jabVsSpHC2uD0dBJbkQ0iBa24
+VOwwGUUy8ZME14M0ToCDm2vXTR8oOw05DBcM4RwQQdGVxdnwScUJnDzefJEUyx57
+3HO4QWu+h4nBqp5CTk+Y5gu4ZQKBgQDTGsgtIcdQevWay4nXKp+kcUYJy2zmCnBO
+RFryyvdSSr3Tf7eeEZTicBiBp20fzppHc8/hdWnaF8+jlRx/hYY0M6hO2DEvXg78
+BbkqxwGV3dOZXEVusy8CPCQuRfQNY8XhQ195VyFdfsRKZ1dKD7C1Gky7dXgA26Ms
+KdWarvuD9wKBgQCi/h0fBujnp6zIqtvhoQcUmvTYO4STnOAqmuTUjVQxdyQfxazp
+ZUAA8ndnf66nRx5tB8nSTxUNWB8fma/QSgvnEF+HDXImn0r5B2drZKaACPz4mFOB
+MYdbIdQkX1RSI3ZdQ+/5oQWuTN8p2hbnOqD26YPoLIxaoRqGOb6pFCU0dQKBgDUm
++CHM8HdGDlLkTpd7ZuirkJvkuU2OcUpzkYayLeVtZjA7ZwsImDkPSkxS0HoCtfup
+oDy/KGC+QAyK/brp7ql0HDuF2ZR4lUNFWaL4qmCGksF5Zw4BVaO1atKv0EwSw/78
+zKwrkP4ObfPh4yuFmdNvhMRqRkXJB2OWQO8Kgc9vAoGBALXo6IGSM6TtHoNrnEwi
+LozF+eV6ZmYb1miBEBVOyCDl0BVx+6n3iNt17v2EmWLcFYS4ZE+AF9EuRfxuDv+V
+ZSK8sQKka0YgQmLPIoBXksZGwTUYBaO1ojFKuVzrE0ATnbVzuu5wHLZeyK2soCQF
+slY5WVhO5Oo2YTGB7Wxzs4Ut
+-----END PRIVATE KEY-----
diff --git a/test/certs/alt3-cert.pem b/test/certs/alt3-cert.pem
new file mode 100644
index 000000000000..877734f4a9ce
--- /dev/null
+++ b/test/certs/alt3-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDeDCCAmCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5UZXN0
+IE5DIHN1YiBDQTAgFw0xNjA3MDkxNDQ4MTFaGA8yMTE2MDcxMDE0NDgxMVowVDEj
+MCEGA1UECgwaR29vZCBOQyBUZXN0IENlcnRpZmljYXRlIDMxGDAWBgNVBAMMD3d3
+dy5vay5nb29kLmNvbTETMBEGA1UEAwwKSm9lIEJsb2dnczCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBANF68Ty4b18vK4fqVqJMIbwj/mLnF+WA6lvrzEE2
+79mtKLn6jHAjXWJCJ8U+ib23dRf7K3F3qJcQF3sEZpY3VgbmBMZe6mQ1A4Kfza3k
+Wm+D2vNy8BTh8esu3P9TsD89679qUaZ2/85RykFmnV8NdJnAgFEQ+NZuBeQck2Ya
+cZiYyjNCfWEnSsvmO66M99VXzzD9kkpEUXpe2GbLfzE1iP+79sFGGFHYAvmTmhKY
+DFIEJqKY56bnYBlFtQFTWGqjDe8irV8vFJ+VoXR73DXq/J/k9UvwytwDtsJMeRsj
+O61UpbBDV+QipZeGC6cXtRzxPDsxz0BAXQeWQl7F4xavc78CAwEAAaOBjTCBijAd
+BgNVHQ4EFgQU0K7Prr9eRi5yL/vKPFPpfIBCRUwwHwYDVR0jBBgwFoAU8FOJh91W
+GcAZ5iBVbwv8FBXXo7IwCQYDVR0TBAIwADA9BgNVHREENjA0gg93d3cub2suZ29v
+ZC5jb22BDWdvb2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbYcEwKgAATANBgkqhkiG
+9w0BAQsFAAOCAQEAfJyYbBQfCHNwPeKi1/OYZA5CLOzktiiR8Uh/1YQLb80jNtcn
+f4zZOHURqd4mLDrKNnQ7MVqlj+CC3oN4c/L58yQqLm1fbTKXgH6t6OGgg2IL3Aet
+XWbHOg0arknwyOKY5jjVkzbZthZ9EaS0QTlN8eULHV3nwImlfc5IFDetzIvPJkz9
+82fYuUO5jeCB4vjKBX5Ha7rvg/6rnNX71vA3++JrFc0PRFoJvnQ6GQTtBSZE4dFK
+TOH5jE60bjDUL48jl267HLF5RklGuQRgZ3XfIU8JqDtEQuWJTWHc3NPEl2GOJO86
+QDfXLy4+TUfWsoAEuoVeOvR5zitzy3Wqcm3Idw==
+-----END CERTIFICATE-----
diff --git a/test/certs/alt3-key.pem b/test/certs/alt3-key.pem
new file mode 100644
index 000000000000..cc4186072b44
--- /dev/null
+++ b/test/certs/alt3-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDRevE8uG9fLyuH
+6laiTCG8I/5i5xflgOpb68xBNu/ZrSi5+oxwI11iQifFPom9t3UX+ytxd6iXEBd7
+BGaWN1YG5gTGXupkNQOCn82t5Fpvg9rzcvAU4fHrLtz/U7A/Peu/alGmdv/OUcpB
+Zp1fDXSZwIBREPjWbgXkHJNmGnGYmMozQn1hJ0rL5juujPfVV88w/ZJKRFF6Xthm
+y38xNYj/u/bBRhhR2AL5k5oSmAxSBCaimOem52AZRbUBU1hqow3vIq1fLxSflaF0
+e9w16vyf5PVL8MrcA7bCTHkbIzutVKWwQ1fkIqWXhgunF7Uc8Tw7Mc9AQF0HlkJe
+xeMWr3O/AgMBAAECggEBAJFEuNZq8JEJnR58G+gg86QNMfRUXfYCGIP2WYdAGcTS
+mFOgtJNvcusZBYt7evndp44h2FavrHJV7nKY8qtpZHcUPGt0lwc23GBRgcj9etmq
+jsQVCPjyV1nI/ejymF7DCiGMEWNnUq45ehEwoCGyqxGUtWeCZY4Obndqea1s2SoA
+SIwrP74kSP+cjcOb+KEg5jF5aT0Mzo9ipQuuoxLzjXJhtQuyDYOulq4g/jalMewk
+GLgRgbzrEDK8/DMVu35rNJ+CHWHowo+1G4lLY4DhajPMXMqb0dgR1JlFF5qyBoTN
+CJXq4mpuf4ApEd61MTCm0FoqSm/AprSAIISCqapytQECgYEA/ND+C9ZnOOtTxgqI
+nuq2r1yGFlNnbovcfiU3vrceUvmN+ne1tBtXSTNB4H95AUuoBeVAeYApBKxc0c9K
+5Pnwp5NdPbana2cfuorzJrIHM09RP/obDP8VTnNJeO7wd+00Cx5ZnV5g8UcicebH
+hbjfsc/lkd8G8YCIx+DBigzjIO8CgYEA1B4/JjCOuzM7Ag3y+XIIl3Ud4n15uog1
+5tDD1y3xWzZbL7fh0APf4mT8cTTU0ms4i9Rnpraw8ds9EfhMDXxJBs+LO6Ivw5RY
+RxWoAB1YTPU+T8EuTzZzIp/jrWTgsvLkjNq25W/lbZLO1n8ofFMgAAbWsN0J40ZN
+70Sib/JAOjECgYBSiJvXG3h5QYIIzhmJ39Ah8Y+orDPBCBHEcLwBG+Dfb67lDL2Z
+/a8CK6Se+J51SNCilBP3VlqNtwNaT1UA6YOiAV7YLc/8JR9bk88LW+Uz3/oDa8/2
+7zNyd/qNa1u/mwV5d8ADuvLk8bcR/ig2xILqlpc4htnKb463ye0E924SqwKBgHKL
+OtKmmgzg51Z+rdyiBZ20MsUhuOBPubvAtGC4gIMe4TLte1VXIkkg+2kufFZ8a/am
+ZqqSMQ8JsvrHOFp36P9yh99V/7D/pIQOX8BgGFTGgjWTPiysXJQv/0SdGvHHVD/z
+w5w2RpBbHLKbzAMG6FrbVof/dN10E5XHXGhTSvehAoGAHA6WgpPFp7iJBoC13NrZ
+q3DKluiytegvljyDW5hOlRGqdWp7551EGYLnWtc4bSHboIf89Iz4mW/hyYr7frzE
+A3Ksob4NIUCGMFJGSyTuK7eyhAxlVZbzqepZ+YftfTvW3iVXkxXx6kEgdzwPrNMx
+DXwfc6G23PX5tUayTZqKC+g=
+-----END PRIVATE KEY-----
diff --git a/test/certs/bad-othername-cert.pem b/test/certs/bad-othername-cert.pem
new file mode 100644
index 000000000000..cf279de5ea74
--- /dev/null
+++ b/test/certs/bad-othername-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDRDCCAiygAwIBAgIBAjANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRUZXN0
+IE5DIENBIG90aGVybmFtZTAgFw0yMjEyMTMxODMzMTZaGA8yMTIyMTIxNDE4MzMx
+NlowMTEvMC0GA1UECgwmTkMgZW1haWwgaW4gb3RoZXJuYW1lIFRlc3QgQ2VydGlm
+aWNhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPgeoakqHk1zYt
+JZpEC0qkJPU/X0lfI+6GY2LHFY9KOSFqqmTXxrUtjQc3SdpQvBZhPuMZ8p82Jid2
+kkRHnWs0uqX9NtLO923yQalYvP6Mt3fokcYgw/C9b+I/q1PKUyN0kPB6McROguD5
+Jz2DcEufJBhbpyay1bFjEI2DAQJKDP/U7uH0EA7kH/27UMk0vfvL5uVjDvlo8i6S
+Ul8+u0cDV5ZFJW2VAJKLU3wp6IY4fZl9UqkHZuRQpMJGqAjAleWOIEpyyvfGGh0b
+75n3GJ+4YZ7CIBEgY7K0nIbKxtcDZPvmtbYg3g1tkPMTHcodFT7yEdqkBTJ5AGL7
+6U850OhjAgMBAAGjdzB1MB0GA1UdDgQWBBTBz0k+q6d4c3aM+s2IyOF/QP6zCTAf
+BgNVHSMEGDAWgBTwhghX7uNdMejZ3f4XorqOQoMqwTAJBgNVHRMEAjAAMCgGA1Ud
+EQQhMB+gHQYIKwYBBQUHCAegEQwPZm9vQGV4YW1wbGUub3JnMA0GCSqGSIb3DQEB
+CwUAA4IBAQAhxbCEVH8pq0aUMaLWaodyXdCqA0AKTFG6Mz9Rpwn89OwC8FylTEru
+t+Bqx/ZuTo8YzON8h9m7DIrQIjZKDLW/g5YbvIsxIVV9gWhAGohdsIyMKRBepSmr
+NxJQkO74RLBTamfl0WUCVM4HqroflFjBBG67CTJaQ9cH9ug3TKxaXCK1L6iQAXtq
+enILGai98Byo0LCFH4MQOhmhV1BDT2boIG/iYb5VKCTSX25vhaF+PNBhUoysjW0O
+vhQX8vrw42QRr4Qi7VfUBXzrbRTzxjOc4yqki7h2DcEdpginqe+aGyaFY+H9m/ka
+1AR5KN8h5SYKltSXknjs0pp1w4k49aHl
+-----END CERTIFICATE-----
diff --git a/test/certs/bad-othername-namec-inter.pem b/test/certs/bad-othername-namec-inter.pem
new file mode 100644
index 000000000000..2480c8ccb7a1
--- /dev/null
+++ b/test/certs/bad-othername-namec-inter.pem
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICyTCCAbGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZSb290
+IDIwHhcNMjEwNjAyMTMwMzExWhcNMjEwNzAyMTMwMzExWjAPMQ0wCwYDVQQDDARS
+b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvfhnjWl5hnF1ecJv
+kq21AWOfHhPsQT/5juFA/v/goAFatKr40+k7Jy3qQ79FRLBf2l4yMun8K7ZPMFfV
+q7q3SliOmLqRq0Uf1Eyh8KdQTWc5QIhNttlDaP8EMDuoTJK2NIUTenV/y5errWNJ
+l1a8l+kbI6PuKTyziAi524Hja7BH4nQ5rk2vb3nc4vlRAYZtke2MMeHSxZhvkZj/
+UtAfAu2Ql9auc6sfViGuaBc4sShS2F7rmQnJmmf0+qW6y9VoYV68HC7EsO22UDXd
+aYhY2To9al04rdL0rDDw018Z8VbcW6lwPOkgfbpQDl9fvuFFfxb/2t7soRsAcuKr
++gbWmQIDAQABoy4wLDAPBgNVHRMBAf8EBTADAQH/MBkGA1UdHgQSMBCgDDAKgQgu
+Zm9vLmNvbaEAMA0GCSqGSIb3DQEBCwUAA4IBAQCA9aWhpHdUM/9yx0HRgkW5M8IS
+zc83Fzbhv3/32s8H2gplxq+XqfIIdoOosgnaEi01ynPncG6IWqj4hfOuoyoorZA3
+cmubAjkHrTu8VaMgZL43SwvyWda7atpCOo7rGdz+LL9hH/jcwhLtEqoB+Tdj6wOp
+1O14ndCLi0XXoBezsCpmGtjF7aIunsu6yxJN7b/nTcKh/XSAxjpsa6GlNXTbfJyL
+BAUiksQ1KTiW8LyF9IRjckpkf1RH9pqBD8vVeunEpXOUPGOfseL5AAXbvYI6iN70
+aCxKkiRwqX7ZK0lL9Oh+hhaVqqdPnGxb+O3ZX/88FvKvWiicnftMx56lzv4H
+-----END CERTIFICATE-----
diff --git a/test/certs/bad-othername-namec-key.pem b/test/certs/bad-othername-namec-key.pem
new file mode 100644
index 000000000000..88f9d967a8a7
--- /dev/null
+++ b/test/certs/bad-othername-namec-key.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEArQTbBNa+PaMZw/guenN8vEa/Q8dhG0jnwSt78qkaXt1a/CKp
+M/NWG1FL9TnOa0j3mjrZJ9/ePzd8TfJw8arpNToFL9rZ6eqs3QB45OIf0gAIvkN4
+NNre7UInM9CpdiMdNf/jldJWi8yPIyogDOrhB5mtAVJfCsd9cn4JmMncqQcZ0Mto
+Jjm10y+Nn6Li1efV9zQ974M8KY14vhPyxGklqiRWM/+M3UzhhklCdxyYLGpp9tou
+KjwaO3nnGQ1lqgbJIfs0ciRHdcrh/CkK5zSySpCeep1NumjwzmN7s+jPtjoBmbWW
+jc3KFnEfTBet3FgXXath2fpxKYZSHD044/63kQIDAQABAoIBACx6oxOLYTzXQThw
+BQLVzatZRLJX/07UXz/5vdOURYM9xLYs8vK4C9rZ+3z/b2GFUKIFnu3xT2FRElO3
+j/GQzoMwd0TmLj9EZUwrYuj0eNmzyIuhLLXpzoWQDCP18Jq+TDQlpIxPlpA59lJD
+8hlgCJm7mA5O7sAGqOlWHYF545BQJq/wNcsgKjLZ4y5Ef8SRT9v/JZOVhCMTX4pV
+kn67XTQ9qNH51E963QCMOxa4DSHeduZWLpEwBbpJpXvVLKuUmb8JYWfgjdAjtm3W
+qyQzjeGnjX1ZNkvBIBmfYYZ99pNtoy/tdbb0G87GYNf/WHFUtckU1/IqPeMuG5Q1
+8m8SGwECgYEA3FwGueYji4IFL9lyIgccnzssQ2lQ4Xh75R1JMKvi3usFFPby38EY
+z8Fpyqa/vLQtg+6ne5L1Qxl2U4Vqyzw3RKNOONkCd0qCIG7/NDRoxUmE+6ojHrbi
+4F5sTPZDmGrwGdVKUjeVK/nKIHTDyZjuJl9Mb6BG0xZj6waFnQxGoT0CgYEAyQCy
+mmLC8GjtvTHGDjlDAI+OZbJGal0UdE0VMxQuVJwxDAB5QMhXX+DvF/tYqnPtwMMy
+n4QXkiy4dRqlJfcmtwHpBoTsfApwxSyw38WJR9mUCVWaOC06CEBSquIe0WhmAZMO
+je79veqJlZjYI7S/px7Jaje5NVTWFVztPHciLOUCgYBpNIJ9lJOZ0myZiK5F8rFG
+kGC0mn5j9zrnixDbbOT22qvlc3VHQJCQ992DRBM8i6VDXNiXVfVEoM5uV79B4rDc
+Uz9QQsM7otX3mCa9jNwMfOpBoNv9mQE+b7YzFEv3Y+7X1o4SLLlKcop+7mBfSmVA
+6rS6goHt272+grGd5jN+XQKBgBIsCvmkNiWQBvZU2qgMiz8wu1n8XRteoOvG0ETW
+7T1fBZwlKtEti6CycEtFwQVgB72mqBv90De57U9BAm9FQe3HsW6Sc+Le+sUIvlDs
+xfWF+TlC0PeFNzrpvc+PM+QQwTAhQG6ajbwuyROKRvgrbixIv0LoGMl2iwhRZ21R
+A/j1AoGBAJqUpT30dWSSDnUMir0TNnD//01+0R2eu8EPQu9h443KuKP9nf4GCJ9s
+qP3MKE0iKmsQ6ybPkCDc+mbViFqY5LQOssffHCMwWjv4vVnJt6N5SqNT5T2+Ctxy
+ZVwsbqSjxBsew6jBA8aDpI2igcBaZhBl8+ZmQph+723N3iBk1FXl
+-----END RSA PRIVATE KEY-----
diff --git a/test/certs/bad-othername-namec.pem b/test/certs/bad-othername-namec.pem
new file mode 100644
index 000000000000..ffaba405cf6a
--- /dev/null
+++ b/test/certs/bad-othername-namec.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIICzTCCAbWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
+MB4XDTIxMDYwMjEzNDIzNVoXDTIxMDcwMjEzNDIzNVowDTELMAkGA1UEAwwCRUUw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtBNsE1r49oxnD+C56c3y8
+Rr9Dx2EbSOfBK3vyqRpe3Vr8Iqkz81YbUUv1Oc5rSPeaOtkn394/N3xN8nDxquk1
+OgUv2tnp6qzdAHjk4h/SAAi+Q3g02t7tQicz0Kl2Ix01/+OV0laLzI8jKiAM6uEH
+ma0BUl8Kx31yfgmYydypBxnQy2gmObXTL42fouLV59X3ND3vgzwpjXi+E/LEaSWq
+JFYz/4zdTOGGSUJ3HJgsamn22i4qPBo7eecZDWWqBskh+zRyJEd1yuH8KQrnNLJK
+kJ56nU26aPDOY3uz6M+2OgGZtZaNzcoWcR9MF63cWBddq2HZ+nEphlIcPTjj/reR
+AgMBAAGjNjA0MAwGA1UdEwEB/wQCMAAwJAYDVR0RBB0wG6AOBggrBgEFBQcICaAC
+BQCCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAa12YtetxpZT+llksQiec
+acdRVyWupsENMHeE+hHcDwc09M3c6JvjF0YB03cVBSRRra8MCV4pNNK1fGSfKb0Q
+0ZE06bM6v+rjJW/CdUeb7yoq1Vk60ppevbDsf+EmSq76kGJoocYh88qLpL7QVINQ
+G0fcuMfBs2oTonJbIGcXWSrj5yIaZMRrARlp97ynR6phArufKblBYk1NQIJZUO+V
+IItENBfAPe4QZMnvjFO+hqmLzvVAz0480iNMa1++RmO66TxYi7b+nKGIUtonTGpt
+HspWZDtnB+y+qd6WbH1Yev5BoZLxdQAm4CFIESB4DrDBBV3QZPlVF0ZrLWFqMpBr
+Uw==
+-----END CERTIFICATE-----
diff --git a/test/certs/bad-pc3-cert.pem b/test/certs/bad-pc3-cert.pem
new file mode 100644
index 000000000000..f8e76ff520e6
--- /dev/null
+++ b/test/certs/bad-pc3-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDajCCAlKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQDDA5zZXJ2
+ZXIuZXhhbXBsZTEQMA4GA1UEAwwHcHJveHkgMTAgFw0xNjA2MTgxOTU0NDZaGA8y
+MTE2MDYxOTE5NTQ0NlowKzEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGUxEDAOBgNV
+BAMMB3Byb3h5IDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfkPXh
+tGaOG5MRdMZ6mSI+OVj13SjQEMO741bjZmZM7/WwJwNx4/ozwy5w3hbcvEom2qe6
+WCKThzpB+hufIgsElrLL6YHu/eExxfMqSkuUnlYye8JLriqs54i47bvtLn+h/vZd
+MnsIrS/WGmGCDfVGC3u21h3tTmcVd/jC8vUueXdgoFVCq4elMidmM0ar5+tNAJRc
+G9ZSeuuGiVbYCiGaYY+7PkyyYy1UiWyrhBPNvdQ3xcakygpWOXSQ19INYTLcAM6G
+MSnEBK6F55zZyvuq3Ob60+okaSYWAo+7D0/BrzVfCWlzmWeFyJVR3Ps3nLxteahs
++Fl7D7a9DbgPbY2HAgMBAAGjgZYwgZMwHQYDVR0OBBYEFH18o4bnybHle31aYNRi
+QZSGJ96XMEEGA1UdIwQ6MDiAFNOib4aG0AVcbb7pbh224iVD3Jx8oR2kGzAZMRcw
+FQYDVQQDDA5zZXJ2ZXIuZXhhbXBsZYIBAjAJBgNVHRMEAjAAMCQGCCsGAQUFBwEO
+AQH/BBUwEwIBADAOBggrBgEFBQcVAAQCQUIwDQYJKoZIhvcNAQELBQADggEBAGKD
+jTgyuFlwNRgrw0g4IZMmbEWcgW4r1v2yMRyAXhZuVyc8lkUZoe14eM4kqwJ5ayti
+peN+ETpRk6AS4eaCEBnn4tE/S8TD4KRovio1EWy5TvjPE6M9jPonF5IfNKgGuR3o
+7gN0KKJpzf9jj5JEJPV/d5AKw9fMdSZseea7bZ6JV8kKCW+9WCSMFnwR7POPWSQa
+ZNJy1PN6GlvHykdK4QwZT3jHaQMVY/uIC1BXrN3sC3l79jnL5tTeK8JLvZAqjfy5
++5pNH71k8zqVR2z0fC4oiv8TNsDn2g07wCCcQmzg8JHsP5p/hyUg51RqrQJhAbaf
+eUmD8lyBBdfcia2UqJM=
+-----END CERTIFICATE-----
diff --git a/test/certs/bad-pc3-key.pem b/test/certs/bad-pc3-key.pem
new file mode 100644
index 000000000000..8ddee57ab4a0
--- /dev/null
+++ b/test/certs/bad-pc3-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDfkPXhtGaOG5MR
+dMZ6mSI+OVj13SjQEMO741bjZmZM7/WwJwNx4/ozwy5w3hbcvEom2qe6WCKThzpB
++hufIgsElrLL6YHu/eExxfMqSkuUnlYye8JLriqs54i47bvtLn+h/vZdMnsIrS/W
+GmGCDfVGC3u21h3tTmcVd/jC8vUueXdgoFVCq4elMidmM0ar5+tNAJRcG9ZSeuuG
+iVbYCiGaYY+7PkyyYy1UiWyrhBPNvdQ3xcakygpWOXSQ19INYTLcAM6GMSnEBK6F
+55zZyvuq3Ob60+okaSYWAo+7D0/BrzVfCWlzmWeFyJVR3Ps3nLxteahs+Fl7D7a9
+DbgPbY2HAgMBAAECggEASAMzkG5BkojDSJ4qyJbG9vAV/awtV0fvJHhIJpt3XFT2
++LS4YVkj4MSAEw8WoidsYzOPT3DQQmEOnO3pM8sNbX71PMWMeuUAQr4WY4rm6YpP
+DZfbr/D8AhHacmbxX6bYqd+sj7yQ8OyIOhjpS7EfTl6ojO5PWX8lqT6pvHHyE/Ol
+1ZH2MG4GaX10IfrF7bw88XozmFfsw6eVX6t3cBK3PNapxj+RNEwcYBAgtXBNVVAJ
+mSMkgSZ8/kTggRr3ntKvXCiOrm8Iud6Bwqp+aXB8+etT9p6gWDs0J4MCfkWvva+1
+WuZDgryiVnIdqwalrLMg2IfwJhjtlqZjj0R1Oe2isQKBgQD/JSlg+/ZYAmm/BzzV
+C3mII94Vw0lvX6qpeKMXvcwVcWRSwJMnMPMxnxebyEZopn0t25CRu0+N+sHNUZKg
+JVw5wL9nA7815JGTfVV9znN8leSYdhvWh6amrKT+Ku+1vXTBONFAR85eilzYUtff
+jKGVDhBuZ7a5YIT6+DOLoPbMdQKBgQDgULasEUxNTeVSq6qzM/1tvSR4Z9W2JIFr
+nDxC/RyPq5LN+3Pg5JiA3FFION6C2Rb+rb2RBlpSxuO4Jv+gPWnqZfuXZiTusiDd
+dnyFsAoGPnb2SIm3OAO2N3w/7ttmRCsWnm0mkFLkd4XJG/mtDcHrit1SZTEWima2
+wKf2RJEiiwKBgQCH5+aTp4K/vIFRZOyNWvBgiSJ6GyzZq26/mOfe9JVp8p2KytNX
+c+aGzwSHUXXXtp9FNwhZ6BlnOmPTFxlwPpZSmQ4bNE68yUSV+JP6UGcJvNooL/mC
+G320mI/GZ16KQyGW7snfYKBXkYIFJJOim0lSmUw9Uvds5THQcTcbsCDmJQKBgQDE
+F2sJUnncXkspkO5BiCJ0a1NVepgFiTYmJ0c63F+6bKeCL94l7FAw3eikdSp3QmXq
+r2E3RVFyaXGqi1UN9IIBqbNdr6p7i/ZVA35ps/Gfcb23IMRbCbmc8jZJAXqElPUB
+6e7LNoFwPdgTbcQ+9vbd/N/rZpCZ/tU5z4NFMr2ZbwKBgQCPN9KsqsRRK2v+j0wt
+ArKrWHK5w1Cj5rRbedOn8659edTB5tqrFtZh4YJB842oe4s2XYXtk+Kq9HBRh4Em
+CkO/JSH7lgVXT1zsf0ZYojaZWLhVTNHa3PO6R0FtyC0h7MtHV9aquPNCeiQDkwbT
+RBV8wc0Stpj+QEShPIS9gEQVNA==
+-----END PRIVATE KEY-----
diff --git a/test/certs/bad-pc4-cert.pem b/test/certs/bad-pc4-cert.pem
new file mode 100644
index 000000000000..5e47992ac769
--- /dev/null
+++ b/test/certs/bad-pc4-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQDDA5zZXJ2
+ZXIuZXhhbXBsZTEQMA4GA1UEAwwHcHJveHkgMTAgFw0xNjA2MTgxOTU0NTBaGA8y
+MTE2MDYxOTE5NTQ1MFowPTEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGUxEDAOBgNV
+BAMMB3Byb3h5IDExEDAOBgNVBAMMB3Byb3h5IDQwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQC2xxl2G3u38wzrx5uWgKiZ557ZIbLQECZgwmMbGzdrNqbD
+veVgTEdkIxRk0py1QUqqukhTk9OpkUrYiSUpkAMkc3yRtpCp2KZeuN6OwyeAm8Jf
+KUHeEvvM+GNZw/AoahgRJ5Cd9OykI4Uv3y0BzwZGXCrKDWr0Bpwcg6aQ/0+dFtd0
+ElBKq2v2hHpKn4P7ZM0mpvPSEwJ5nPUDY6iuRZNVrihmuZ4UZtKsz7EFbXfqaiLz
+zfns+Kmh4j5OK3Iunm7gQLpv9RrXxsad2s7gKzgRhuEi6sECg/+4qOKwhUUxVWRX
+iJYTxJfKfyIb8fjtrQrEWxNb1n/1Ea9nWuOk1N3XAgMBAAGjgZYwgZMwHQYDVR0O
+BBYEFLFSiWVtSRQ48ziWfxHBtmC/PwPiMEEGA1UdIwQ6MDiAFNOib4aG0AVcbb7p
+bh224iVD3Jx8oR2kGzAZMRcwFQYDVQQDDA5zZXJ2ZXIuZXhhbXBsZYIBAjAJBgNV
+HRMEAjAAMCQGCCsGAQUFBwEOAQH/BBUwEwIBATAOBggrBgEFBQcVAAQCQUIwDQYJ
+KoZIhvcNAQELBQADggEBAEg+p78n5eTkl7D6OPecC47nqFp7pNQtWTksTxMgBtz4
+LeZR0nBX1kZdA0arVd7RAeqjR5wCwGIbdc3hFu/xeoPeTUBFv/7tiTWsCFBmfoSK
+Tu/NeYrfIc3Qd6KhW9iwUxN7GFAZZFhJ3xVpaDhjpMDlgp9UZ24vN+eY0KRhuHQv
+hGJcyWs5M0dYGVyTSS5VueJSWlXD98KT49LzdyAfaveQoIMFaSH3rmR4BXvUMjEw
+ByFwvFeG0lrtvcx3RhvlJQYixUPME6TcNOAWJARJ0qiO1PCufFDlOSjq8GjtxGbc
+JjMc3GfdaieMM8afXWQPflfLw/Jb1rPOKpikva05ZMI=
+-----END CERTIFICATE-----
diff --git a/test/certs/bad-pc4-key.pem b/test/certs/bad-pc4-key.pem
new file mode 100644
index 000000000000..49406bce5bcb
--- /dev/null
+++ b/test/certs/bad-pc4-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2xxl2G3u38wzr
+x5uWgKiZ557ZIbLQECZgwmMbGzdrNqbDveVgTEdkIxRk0py1QUqqukhTk9OpkUrY
+iSUpkAMkc3yRtpCp2KZeuN6OwyeAm8JfKUHeEvvM+GNZw/AoahgRJ5Cd9OykI4Uv
+3y0BzwZGXCrKDWr0Bpwcg6aQ/0+dFtd0ElBKq2v2hHpKn4P7ZM0mpvPSEwJ5nPUD
+Y6iuRZNVrihmuZ4UZtKsz7EFbXfqaiLzzfns+Kmh4j5OK3Iunm7gQLpv9RrXxsad
+2s7gKzgRhuEi6sECg/+4qOKwhUUxVWRXiJYTxJfKfyIb8fjtrQrEWxNb1n/1Ea9n
+WuOk1N3XAgMBAAECggEAQbq33VFk3HH7Y48U1LrP5wj0hwEnXMtyAbnmCglvlI7C
+ygGwS0EjK0+yNc/HqycfwuXavLOcmo41bEllo9y2RJWDZqNQwsO2kLnKz2w++HEL
+JU2g8kvBYaSxlcZwxxfgL8saprM9polfjCel99CLYSIkASVyIO9/lIGDlQE7kDHb
+B+YdDzucQtyi3LXsdcfW8so2DsZla2Qa9305ZAZPEOFXFjsvKR41WdI5r1uwsrYU
+voMcH9k3aefOd62+e1KodO5w9TxSYTw2bLrGhjB1UzEzRGIgOY7L+VSmYzTn+ARY
+loXqK4sA9yvr7z+ZXHeA1y0XuMRzkG7qf5Z0pc29AQKBgQDd4piLIt0Rygzud4WQ
+5UBwwLd1u1A3jdU5EACvG4GBlJiQQPU0hHcTGoFbnTNy+y7QSBl/3viRH5WPx8Cx
+O1nJ2Qc7mlAmoKq3Gs4gso6utPP2x9Rs/bIPkL/LhAdi9BBnp6H/5dyrvtv8O1OQ
+S1rXpYTjmYj9X7BSU1PsDUiyWQKBgQDS4TwxXycJYClGufq9mrNuAoMfReXaiwv3
+b7wfRfOn1cL0hjLjLAhxn8eau+/7ZKS8ScXqHszrz0yXPfxTtWJ/DvhuobWOOWJd
+RmHN+OAxCLvcZD1hy6bzXqYuuX2WrARUKWZRg7RXxlOwnkcR8/7OrmnsnEiCh8wg
+9h/GGd4rrwKBgQCXV4BOnrgE8zjAyrtKqmO6xGgeIGZFjjNaWYTt6yf5V358HiJh
+8Nw7JoAHGgFGsvcqT5M8+bu3WMCtskTHXkEPAT4CtG1o+3uVqu3ftYrGtVwV/hTx
+RlVWcpevW92h6/DokplXrtRGPMdVkq2bpRpQLnCmwUmD8OmWLYn3XtQv+QKBgCA6
+jBh/kle8epJ0mf2gRwvpFmERLa/Y0FtgmD+vUS21XbZBTEWr1R6IbNkZH/QrzYF5
+ROYjDu57IBl9P7MLZaJFh3JhBH5YBtB6kTgJcToNO6jTKQ5pMXrAXGWHs8nzQDYc
+naaXmlhP1zqG9hWoVKkBvu6KdAp+9pOTCggcq/fBAoGBALHpj0QFvEzROBpLiNtW
+zrU7jcl4TwAbTh26cjb3Nj/2J+JH3lmLilxT6ltKUvtXFMmAT20at46RMGqY8z7R
+Z1OgtiraQtSG7BeSMRLJ2aCM8+JotvYMjRauiC00jXZCsusyJ1mLqgWlHu+YORVE
+9fO6/M0yLLz4mk5z2gdrP9MA
+-----END PRIVATE KEY-----
diff --git a/test/certs/bad-pc6-cert.pem b/test/certs/bad-pc6-cert.pem
new file mode 100644
index 000000000000..d529091708f8
--- /dev/null
+++ b/test/certs/bad-pc6-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDejCCAmKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQDDA5zZXJ2
+ZXIuZXhhbXBsZTEQMA4GA1UEAwwHcHJveHkgMTAgFw0xNjA2MjAxODAwMjRaGA8y
+MTE2MDYyMTE4MDAyNFowOzEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGUxIDAOBgNV
+BAMMB3Byb3h5IDEwDgYDVQQDDAdwcm94eSA2MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA5hE+Hzx8w4tAPaYsbdY9ZJSzpzpa8ZBsZxhiJr9ayIU4C71m
+uV7EMZtUGyAbl1pXzBcvNQq/lUnXL4hpl612h9Pg7H+oaNM1ZVDnRFyIWvaq/oVu
+msi//4z5QetkM2zRa9T3BtSWNJF+9BnDsdDxi2qLW5xY9xN3tFr234ueri9HNK4O
+V0vJX67wgmVgGmIX6EQlgX5RF+PdU4SYjqxZZe2v0+ND334svlDAdQfKYf4pYqMB
+Vs5hi4PYiuU2QDhLOms0m4Fs54mRjRQ/m/I4L/j2R4051xLO1ya5UrZWepkvd4Uk
+rW7lC5JyFvG3Mp/QChrGZF0cb9iHi81iUNULAwIDAQABo4GWMIGTMB0GA1UdDgQW
+BBQwWHApUcXg5oqkZdg2JpLWKfsUVjBBBgNVHSMEOjA4gBTTom+GhtAFXG2+6W4d
+tuIlQ9ycfKEdpBswGTEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGWCAQIwCQYDVR0T
+BAIwADAkBggrBgEFBQcBDgEB/wQVMBMCAQAwDgYIKwYBBQUHFQAEAkFCMA0GCSqG
+SIb3DQEBCwUAA4IBAQBe/pghhwiZk++TtmV/eTLbQ/tMOxlb1Q5MhX+nF42eI52G
+Hwsg3dBHgy2RSgTE6fzMUt8cyEplG4nqCpR7qm2ZGcHmn/IEO7exZmWTvurun4tF
+56L2W0oe5hLLJV9W4akVTH6LpRZOR/CgMcew6tvzmuAADcP0KidFSxkd/Y7plhSy
+hptq50Qey2yyA1UVTCQ8k7OSvL2lyD6F3EasejmK0FuHekgewB54cTMCBBw/7aZc
+08rvhIi9X/yQKFD1o5kvbTi5//zcCx0RbMVZRFcrFUD+PNwt7QLpFrMs4u08aok4
+/QzS0G+801JZa1zoUMnnNPNGlfybvANVbovUCc2h
+-----END CERTIFICATE-----
diff --git a/test/certs/bad-pc6-key.pem b/test/certs/bad-pc6-key.pem
new file mode 100644
index 000000000000..ef7541cd6731
--- /dev/null
+++ b/test/certs/bad-pc6-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDmET4fPHzDi0A9
+pixt1j1klLOnOlrxkGxnGGImv1rIhTgLvWa5XsQxm1QbIBuXWlfMFy81Cr+VSdcv
+iGmXrXaH0+Dsf6ho0zVlUOdEXIha9qr+hW6ayL//jPlB62QzbNFr1PcG1JY0kX70
+GcOx0PGLaotbnFj3E3e0Wvbfi56uL0c0rg5XS8lfrvCCZWAaYhfoRCWBflEX491T
+hJiOrFll7a/T40Pffiy+UMB1B8ph/iliowFWzmGLg9iK5TZAOEs6azSbgWzniZGN
+FD+b8jgv+PZHjTnXEs7XJrlStlZ6mS93hSStbuULknIW8bcyn9AKGsZkXRxv2IeL
+zWJQ1QsDAgMBAAECggEAV8MsF25TiaSNFPdW629WbA/tmFVCa/PT5l/+0Rkd4HAx
+OQk/LmdgICxIoTBWVh44b7pIX8uB2ckZNSCsZxfcp2PD4XOxIouvSr7Z+dHykgCW
+qhDsaE88LpfwXZ0V1CgmmyPaN9jQk60M6MELTcGO4sf58TBrH5VljH9GvW/dUEQv
+f85PsN8VMWdZYx5AU97oLxNlZgRgZa72rtRfW3xi+Nnf/TbyqQ7pJAHdGju7kR7C
+Mv7Kp+us/FzPXJxHdumh8BSAbqn2Fr1hgUyH7v/7n7oSLpBATLOQ49K0X4OnEN3m
++GYzj9rpnza9QAX3too3EP0tDYZaJUUZiQqdtFIzgQKBgQD6KISBQq7LjRGNOr+R
+ayA27HlrZ0O0STyOkxOCx8GqdHQjLS/REGnLAJy6ggm3Col4ACXkD8zNLenFCCsA
+CVq6iEQcGiT5bZyJa7cwLEGdoj8Aqd6OM30TgJ1u9ZJSWukys0BhhQ7huBmxdpm3
+ykIGQ5DxhnecXJdYylzdunktmwKBgQDrcJ5fyYFSheQjW2TkNTRSDccToGVPIECd
+/a/FvhzqhwLWt1d0Hpub9M37AwpN3V8IM7PHcDqgpzrD3q+vLW726h68ETAqZX4H
+FDHLPiENkoBZoj6yjS5fmAkVa7jhGQBFSIQ1s6eYkAHCRwSbF2jfNK1no8fERwkp
+XjEf6yWiuQKBgFPfQ9Xm2p4qlQjp+pKx/SINFQSaocuPhnsy+qatfNQ+qTWmD9Mj
+kqTadrHdqY4yPTb7rbiSR5M/YpKKE4i2mjHSQCu/5EewpXw5njjLjdBhNohta833
+m2bvh1lNgpqUGn3CNcK8junFBPBIGG/To2FgQ/eGoxHMxX2ik5JP1BMjAoGBAJ+K
+ryeFqua66D+1XQbvrsazo2V/WWdnGaJ2GDhNfdbHKntJvi9n1la2ayZfhwoAqrcq
+IfdR68iVydKVAkQY64rSV4VluFficqZlXuC09zz1O5iBwy7HUNdidTVYy+1tPau1
+WjHxze4qF6cI7OwTzvMCBUenymUNJf4sX+mbNOOxAoGAHYK/AbJtXFKcYx8uj0MA
+YnkWWjTKMJ2TQIu94CaSf1oR4M6fuskgPfuRjW/CyBFQ3zh9+F4l7lG2Ywv16rBb
+/1B7W5euucM8JYxSGAicqKX7iYV6Ikz0l21Slw6fy+e1U4gIDfZPgx56iV7yVoGc
+IywUjiA/G1N3M5WBVqBl3K8=
+-----END PRIVATE KEY-----
diff --git a/test/certs/bad.key b/test/certs/bad.key
new file mode 100644
index 000000000000..4708495204d3
--- /dev/null
+++ b/test/certs/bad.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAwTqNko5vQiQ5BQohPJ3sySrjT6JedjsKtt1OZ8ndR2C1asUi
+HgpVO8QDHKID88Qklx6UCieeKAwIY0VzqWzTyZWTwdqTU9t8arHHJu7IcFlmWsAL
+fwTmARWJmpY+K8fGnQx1Kxfi6nQJ8Whq4bcAqJ2HXzG69Wjs3Ki70ScNbQ9RUwXJ
+n/FeNrsphKAv5K22zBqjWAQdYMg6vtKZAXCET8jw6OkPVnUb/QvyoBEijWt0+HBh
+7wLkSUvMj/7fc88+xtvGqZPyG2Py4DdWW1stpgiZ3TTohEk84t1u5L3qQaRQmVE6
+y5RMImyVY8hegC4zc6aGZDFRv8MR+gk6prcuUwIDAQABAoIBAEkz4YZwJ34rMt7R
+452PRrE/ajY1EQxBeeGlHZr8QrRT0ubMIAy5ZWjq7TLfvhePaz1E/FiMgcIyLMtO
++G5rKCDqZbu/DqlqMUxKZWQ+efj2JWyj7LcGKAypGCRUXuE/IeNFYO4ecnzX0Rx/
+rl4scjdu1mYd9PIb+f/ufJjT7qYtykmwlb0MbEJ25yjTC4iHzacvFLJgdXrPp8b9
+ZGlVBKyuk9ZrZDC8/a4QrKt7Hp2SqqO4WqaTgM1G+cQFYuVBmj74bQhJHMmQ+Opr
+5KXwBKEHMtJkq1GPVZ34W90V82d+8MJAxymuPomwRXKl1dKgnvny+0eobXkiBDcF
+XCBCmIECgYEA8c/fE7Sa1vLZriw0Meq+TxU5hru4YM6OmQ+idc6diCp2U9lW+KJr
+YrIRTZFcmhEGmRjAEZrdK0oFY7h5RhsZ+gTftmNZuL8WJCK9+y2DE9dB++md3oVC
+PK0d4SmQKsivOTTeiK/VYFGoLc8t8Ud/anu2Q1kFdC+7cH/TrRseV4MCgYEAzJDw
+MTil055rYlrAAH8ePEuONomu2MoZRRCX/tWuVvz+eIzA35mryW3OR45l5qNluQoZ
+AdpVE68kBak2wIrF2oyWcF1s8VzSbAJCoqK42lKiSGVDVnr6jb69WUujCkYUZIwR
+Q20QYBUUQu0JiFBU22tRgILIAK+rRah37EP4RPECgYBN3hKH1fDGpw1R+QoVyPHf
+pYYQzQJiqiFhSJeYOCCiaIoSFjrbdfH+pjjMMbMQKctmIYI4KRZvijaSFiV3XeLP
+kCI6KWQLCf2nRUjISa+cBAVLib88mMzrnROyHiA+psFGOrAuc/DSQ3lUxxKUT+HH
++G6I4XHQKE7Du2X+qGzs4QKBgBZyJNjRxWhF7rR5Dq4/RHsLM0yKqPPCoSkx2+ur
+WJjU47sofpVKUE4mzUaOumGnNicqk3nfkgw54HL6kTZpQ7JqUKt9pNGLBM+zI8qi
+njPec04MRmo7zjg1YKNmqDodXGl38QD7+5r/VRzO04fwgI8e5G98aiOhIuLezGHR
+R3GRAoGAAyhwtKoC87fSGrpyZQ16UAYuqNy0fVAQtrDgRgP5Nu4esr9QxS/hWjcR
+8s2P82wsR4gZna6l6vSz4awGVG4PGKnVjteAtZxok3nBHxPmRke5o7IpdObPjpQP
+RJNZYbJ9G/PbYDhciEoTjVyig6Ol5BRe9stSbO7+JIxEYr7VSpA=
+-----END RSA PRIVATE KEY-----
diff --git a/test/certs/bad.pem b/test/certs/bad.pem
new file mode 100644
index 000000000000..876923151691
--- /dev/null
+++ b/test/certs/bad.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIJAJgwOOciuxjSMA0GCSqGSIb3DQEBCwUAMFQxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDTALBgNVBAMTBGxlYWYwHhcNMTUwNzAyMTMyMDQ2WhcN
+MzUwNzAyMTMyMDQ2WjBTMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0
+ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQwwCgYDVQQDEwNi
+YWQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBOo2Sjm9CJDkFCiE8
+nezJKuNPol52Owq23U5nyd1HYLVqxSIeClU7xAMcogPzxCSXHpQKJ54oDAhjRXOp
+bNPJlZPB2pNT23xqsccm7shwWWZawAt/BOYBFYmalj4rx8adDHUrF+LqdAnxaGrh
+twConYdfMbr1aOzcqLvRJw1tD1FTBcmf8V42uymEoC/krbbMGqNYBB1gyDq+0pkB
+cIRPyPDo6Q9WdRv9C/KgESKNa3T4cGHvAuRJS8yP/t9zzz7G28apk/IbY/LgN1Zb
+Wy2mCJndNOiESTzi3W7kvepBpFCZUTrLlEwibJVjyF6ALjNzpoZkMVG/wxH6CTqm
+ty5TAgMBAAGjTTBLMAkGA1UdEwQCMAAwHQYDVR0OBBYEFJoH29IULbskIG8BwYp4
+9yD+q7wbMB8GA1UdIwQYMBaAFBwdxP7xJUYhGU31hO4z2uXPtRl/MA0GCSqGSIb3
+DQEBCwUAA4IBAQBl0tHkWMBHW6r3ywBlWWFdok04xlt2QD8eA4ywwz97t/8JgLht
+OpuHO1bQtrZR6bxAgYT1+yHQnYBTfjKxFq+S9EP6nxBe94mEgizLmMv9pf7x5q+H
+pfT8ejcY54E/oXlFXSbLDE1BDpfgkWll2/TIsTRJNoM2n8mytEdPqzRburwWnoFR
+VchcfO968asdc9/8glSLJSNO+Wh9vQlbtcPzfbd4ZVE5E/P6drQzSwNjWvHQdswJ
+ujkY1zkTP2rtVBGN4OyOfkE6enVKpt5lN6AqjEMhJ5i/yFM/jDndTrgd/JkAvyUJ
+O2ELtifCd8DeSYNA9Qm8/MEUYq1xXQrGJHCE
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt1-cert.pem b/test/certs/badalt1-cert.pem
new file mode 100644
index 000000000000..99f1e26b9cf5
--- /dev/null
+++ b/test/certs/badalt1-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMCQxIjAg
+BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDMwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCiqb6LYFYj1uPeIVuzuDL1bfV8+xlrws67I+9yVDiH
+slYdA7ygv41gYKEmKSbL2SvAOnfjgDEb8RYfLhF3LQUvXyON0LkjkZseXVFLNokD
+BXoNVeP1QjWfznPxHpgGN/xF7OQpkX3FVByCIVUOpiXBbq5FtsuLhquHK0yAsY1g
+JYP8QFHUbCnE5vrpK8lOv4MZEc9rS6ZrSKn69+s3nGx9QheboiDVTWqynxDQn2W5
+ZyTyKQX0IRnKg2zLJ6Dg2ec8OUh5nvzzUdnsAJ/pN2Yc3ri53OPodTkmrRha31N4
+8TA7st35XepAk4vZnSq7cml+85xs8Az/OZDSHH1EV5sDAgMBAAGjgZMwgZAwHQYD
+VR0OBBYEFOI3TVHkhEPOWw3mh25Ri85AMqJmMB8GA1UdIwQYMBaAFAjRm/nm1WRw
+oPFrGp7tUtrd9VBDMAkGA1UdEwQCMAAwQwYDVR0RBDwwOoIMd3d3Lmdvb2Qub3Jn
+ggxhbnkuZ29vZC5jb22BDm90aGVyQGdvb2Qub3JngQxhbnlAZ29vZC5jb20wDQYJ
+KoZIhvcNAQELBQADggEBAGpxmDDbqtgDry35nKv2pTDMHW9Yqv80ZQmy61kQiatN
+vJzxdb+admW+CNXHHqsAeRr6ai2aQkn2bJrMkGuosNrkVOg43Qw7k45nIK4jUgUc
+dcH7vVp+8isjSYXo2fIxulhE8N8fhhMVAQrhQywkdJW98fDlq+lHqUAEHJ7vNtlb
+4LssY78+hq1ftjYiItAybc8peU3iDjUl+TTk0ZLTX6E9XE0xRYV9berAyTIUDSIE
+GpzEtsBqZlTdkvZOfsTs4s4tpkOoZQ1aHniCk8fQ+/nI3CS9EHuWqt/s573rCRl4
+HfiXnUmwyOm6IKzBLsbgxlByfI7fAS1Nm/hLhgtglfk=
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt1-key.pem b/test/certs/badalt1-key.pem
new file mode 100644
index 000000000000..8d70885fc6d5
--- /dev/null
+++ b/test/certs/badalt1-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC8n4gY4wOae4Sg
+pyqOZf4bg5JDa/NvzZV/g6PawamFQJIAjf41ylZ5Cjdi9+2H9CuFZ4e3im9L6Hu4
+2ihsTeLmxtIabr2w0bFxTW5ZQ/NogfyNGgdcSqUrQLF8nSqE2NJ88sNVyrMQPLMk
+LllqvVFhXEBntFfZSXKIz2sA6LIeC/t8UReznRfAKF5lJoBjjDXJLOYmgz44rxqq
+L7m84ABJYD119LXRc8N5XfEvC7ff61ZrBOrmxtwZY8FJWODsS/CC+RBN8nnt8rh8
+ICyfh/2gA4x6Mwt6dVMax2dw4u/esgbokjQ16wvFGjWKzufdSPa3Tk7hrhvRC38h
+8jAqpxtZAgMBAAECggEADW9fhkZFL2+01qyRf2sMWnFYray2vjPqfhamSSKaLH+Y
+5qk2fiZXWm+72jTGmnRt1Sa2qAAYRVPd3CDN2EkD7GQk+vUAVePZu7REM99/KuZ3
+UqWT+KLoeNg2zCV1rdizxWqVNzsk3fc021Lh05SAg2rKu5hA2Z09pzj+6iWo6jLY
+0pFml3LgNjYy7VQ1V8978vtaVhVYklOiAT4dfNirt42F1NBGgaRCLhOlROOJYPz1
+LCjSlKzF2T6e/4hNvxQXGt2yJ1fq9dIj9h2XaGBbyPhiy7gUvMNC46LB66kOkPwL
+4rX7OGAEgr/vHpZvPiCVALK7dm92Z87+yem92UrDwQKBgQDzj+HvgfxDsezpZUHh
+rFEobTx98XOtCDDn9uS1dODGB+DaRROzybqfcf1D3ayWoS0ucajoOsv+/brq5FsA
+f7aNMbSTZNIIqjOyioWAz/4Jqupcr3RFczaVG+mX+OPHq1WnvCWfD/yNI8MSy+FO
+b7LdO7idN12M9HNurZGmO0Jv9QKBgQDGQW0efsO55DN/Ve6QdLeqSjVvXhmDKv9i
+6bBu8zQQWD5hFqirDl8144VY1SqTua3N+QfX0DX0QAxqkVeG9O2sNERumElWaBm+
+MnOKW/IklXIK7shmjtAzarRD0cX/8di0Wwv0qZfL6iU8tkmh89kNyUE6tHbmpeUj
+fVeO0G3TVQKBgCWAkw5Y2mnl/I+XasR/zuNFppnR0rji2PzulBqoi2+SiPmyxyzY
+s+aXG6MWf9uVp6pOD+7qFr0FfoFqdeSmxYoKDD7huEFjS6CDGblSzU/ZxEpPLbz/
+13iwGpCu3wvAgujX3IcYZA+rYP8E64UzR7wu1OdIPhxVC20QRqvs1fb9AoGAPCgy
+IiS44zkZXzQF9ZNU/7kQycA14ZU0dSEPxjrJu4PrOa6Uc4Mi5Mkq9y+Hgde/o1ZD
+SPsGxByDJ/r+IhdD3xLlCOHwruVbmljYsk0ABpXKSwL1kBkZl+By3nlSqT0LUn6l
+/BFR3DAqKGfvo9LIM+SzhEqqIYaJJuGrpcwc5xkCgYBu0Q1goQd3me/U1KCIRYN1
+u0f8H1uav2zGp9818PvLny6tMa83Kfam/zT8zGIOBEty530jPFWDnky+CLAm6qYL
+ANLPHiCErO+3n15C80porioSFnUL7QY/5uRfTwDjcgCjGQgDiL1RhwZJurmFgwM3
+RBPODQ6vGkTdrJOJr2AWCA==
+-----END PRIVATE KEY-----
diff --git a/test/certs/badalt10-cert.pem b/test/certs/badalt10-cert.pem
new file mode 100644
index 000000000000..9db1768459b6
--- /dev/null
+++ b/test/certs/badalt10-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDiTCCAnGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5UZXN0
+IE5DIHN1YiBDQTAgFw0xNjA3MDkxNDQ4MTJaGA8yMTE2MDcxMDE0NDgxMlowVDEj
+MCEGA1UECgwaQmFkIE5DIFRlc3QgQ2VydGlmaWNhdGUgMTAxGDAWBgNVBAMMD3d3
+dy5vay5nb29kLmNvbTETMBEGA1UEAwwKSm9lIEJsb2dnczCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAM273Y+gNkheA8Ifd/zsmibA0KmeuEKGZsLvv4Vl
+HXABoOtYli7wkfyZPexHgUUdNe6Tu9de7nYDCx/iWoSdrcKl+/5BBiFcLY72Buqk
+DF2vmC+un8z4ykHa+dqJ2KaL7j8uLsiSPCOk9+tM+bvCYv4o1wPBsoDmPg50yvXp
+RVR7487cN29h4BnZC1BMXuwUzEexpYCy7i2GQTI4DrQ+oN1OsIUbHS9qQxrfx+vG
+TYpeZOkR2Mb6OtPEHCGpCsxNCDzhPAmlH6jaxT2kCkhuAWkqkhHLTuga3kmXuH2r
+OBOpq9TRhC2kPipcuOcIdnhexovcODVJ0X0prkS3P10K3fcCAwEAAaOBnjCBmzAd
+BgNVHQ4EFgQUmGUQRhEili5u8F+d8jSgSLailgUwHwYDVR0jBBgwFoAU8FOJh91W
+GcAZ5iBVbwv8FBXXo7IwCQYDVR0TBAIwADBOBgNVHREERzBFgg93d3cub2suZ29v
+ZC5jb22CD2JhZC5vay5nb29kLmNvbYENZ29vZEBnb29kLm9yZ4EMYW55QGdvb2Qu
+Y29thwTAqAABMA0GCSqGSIb3DQEBCwUAA4IBAQBZ4RTnIR7Tgv4rq1Qx7pbx3Hlw
+Y68L0Nt/8GaFZK0pOrKHuY6HUcUOSabtchcm/CYF1ZowKT5KGWmR8X1WzgHe9Aay
+4njzcnTu66hc1osZdH2lF1+lkNA+HLvzNNcBu0XwqzCs2f/yp4uznuHZKvX45y4L
+x5TUh570LVUnnoosdTmzicZdXcw0nzikbueNAFSrZFLPt+lH/t1P7d+gNj6hAOYi
+6Ac+JEjSAPXZOzbNrf56SC77cvkkFrYONjXgrJfNpZHMCNj1M3bqileTYIV5Leyh
+PgoXCRyteMyNjwTih90SZPq4dLPx3Mf/WNG2/hXIkC1AvFXpp/u0iuwlw7AO
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt10-key.pem b/test/certs/badalt10-key.pem
new file mode 100644
index 000000000000..e62c0e17d593
--- /dev/null
+++ b/test/certs/badalt10-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDNu92PoDZIXgPC
+H3f87JomwNCpnrhChmbC77+FZR1wAaDrWJYu8JH8mT3sR4FFHTXuk7vXXu52Awsf
+4lqEna3Cpfv+QQYhXC2O9gbqpAxdr5gvrp/M+MpB2vnaidimi+4/Li7IkjwjpPfr
+TPm7wmL+KNcDwbKA5j4OdMr16UVUe+PO3DdvYeAZ2QtQTF7sFMxHsaWAsu4thkEy
+OA60PqDdTrCFGx0vakMa38frxk2KXmTpEdjG+jrTxBwhqQrMTQg84TwJpR+o2sU9
+pApIbgFpKpIRy07oGt5Jl7h9qzgTqavU0YQtpD4qXLjnCHZ4XsaL3Dg1SdF9Ka5E
+tz9dCt33AgMBAAECggEBAJzXPb+C2h8tXRwetXCiR5qHoAvPrpU4tRqjf5SIU3rS
+IwWIEWZTjFfP039Pu+Mes8Df63HzM0PQaiiyfWNgedlMhOF+XNgN18WHFhrHWY4K
+kbC4Jacze63c7GGIeRvuzYBpCs1pfmOGHmLJ2hEjzigIpnJ8tkLCREjtDNWQMoSG
+V5LznbgZ9S/2KjyvTW5ff6m4GQH3BShPPkFDICgQTulwdZT/Y8SDKx5+qX2RAtjY
+RguaaNSKQnOHroF+FPNPMUsK5gLZLWIdIECTi6YHaba1BThKzeKFKtQ0lWI5ebxg
+R4kzEPFJmEHbNplxUHSkY4ZIsWK9m09Sn72IrmVY6fECgYEA9e4+w2x/YLtnfwYT
+tVj+kR5MRTn6t+gOR7o6lsWGvkFqwSi0syfN8D6u3KeoYORUUY7ISCFJgIag5Y5V
+Hp8T23O4rRcWuoAmolxNyvYiUYsVdflDbAZFKMSvrAv3XlRRf0vJYXym32k8KAhx
+1qo1zTl7THWM/skv/SF+VMItnO0CgYEA1ihKz8LbtPcbsOaivJX7cXVf1AuRty6F
+lKX8QIGg0ppq/EFkZDWg7+OCVneO53bFVDDqKoiM4Dq9+aA6Dgx4fjFof8rUaCet
+H/isEkjcvEmG2a71PU/moamDuZDu8yRodUl4zyjqthQgc2n6ryV/ZIU8vNZmjpIr
+EhITW8/mbfMCgYEA7UMjpDA5l55VlDPNscihGGpNlQABxYmItWSSf8EjZMwB7UaT
+RsChKyWeV90cUhYWzvRcf1I18lxwP+eYcUlxw+eaBMvgrp9SJpO8rZHWvCrd0opf
+pIlMEa/n96k3xva8BX6dU4MKD0IculajVUGzVEIflT1XgLuio6i7k5Qeo2UCgYA3
+I8SvXbKIE5/Tmm6IM+27tsbnp9rq2VWXgm1Chp3L2+pz7LpWeuBnI6LpdHsc6Z3B
+IZ8JOINdMIK9hR2thFR52WrYjHbIIn8W3kYfpxb+e8f2wG9wS+RL94NtAf4kKFmk
+6TfrztMv8lqwnLbo5bS5QvzyehmJ1+SzEGhfmVXxNQKBgQCULij+SMWsFC/gPJHh
+BCnx12Dx9t5+qE4vrjtNumCCnj9i0nRPludbWapRfHyfe0WlhpnnHo2OTFcl3qna
+wBln8Km2CWNsX/QeosZBPr5KAakfD+l8LieK350t7yE1LEboYCZkBNCG2gJXIyTs
+o5DsYNoxX/IWq2EbB6qQ3Cys6w==
+-----END PRIVATE KEY-----
diff --git a/test/certs/badalt2-cert.pem b/test/certs/badalt2-cert.pem
new file mode 100644
index 000000000000..890c551c5a6e
--- /dev/null
+++ b/test/certs/badalt2-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDIwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMCQxIjAg
+BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDIwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCy5dZH9k2pwH5jw7iWD1TwOIqtmkNBOGDDk9jKvovm
+VUYm7nvLOrx4amqi7OUEpYaJTroPS1UxFo1E7/0yqjIesNPVvqzn2wzuii4VsfDn
+qN1lqbpg/unr2g2gd095AyY8VQwuqYa3bXOQHSOHNgzm108XfpubuqleEy+ykHhX
+bgzqVTQ0Y3UjD53f6P9kSUnjnODG0RK0dgHWQDWKE8TiQiGzb0sXWdkXvPt+zGw2
++C76lID3p7y1+8G4rpfGpi2aPOH6m4beqNAkekUzu/dauhHY4aGRoX/EsDTN8K4F
+YtGGaoViFIh9Twc3nWvERXbjXSayeu08f+7CNiSo6WMzAgMBAAGjgZEwgY4wHQYD
+VR0OBBYEFPIaUwk0/m0BQNvG30Cm6oNqQFIXMB8GA1UdIwQYMBaAFLoDn50GJKRX
+5nP69ToJ+bqFzKn6MAkGA1UdEwQCMAAwQQYDVR0RBDowOIIMd3d3Lmdvb2Qub3Jn
+ggthbnkuYmFkLmNvbYENZ29vZEBnb29kLm9yZ4EMYW55QGdvb2QuY29tMA0GCSqG
+SIb3DQEBCwUAA4IBAQBjicKVS7UDgLCb15ucoKfnrVGvKUs7XSKfF/xae+c/2xWP
++jCCqbilW0QhVuAYyK6GgVO9cG3PKhCH/Us2Az0oCzwLXibRHcDSRfrjJJ9uiofc
+f71p9AzAtRMlSwl3UhSLS8xbHLRbniNXi928+1iMoKb8Ua2ZVHzF3s/T3J26EEkR
+D2DtWq+y7ETlTPS/GklldW1x6qzWRgi4IriApX2taccJtFhaZH/Ih0XtnEWkmtOL
+dwsadu9bjbLtUsFBeW/bcRBqZoI/7xbSxVwHVXF2MZwHkdFuq/3eJE9RXVGpy86+
+JXOcEouXyLAVjj9XCWLW8ilVTkYE6EmUvKSF4aON
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt2-key.pem b/test/certs/badalt2-key.pem
new file mode 100644
index 000000000000..895900db9ef7
--- /dev/null
+++ b/test/certs/badalt2-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCy5dZH9k2pwH5j
+w7iWD1TwOIqtmkNBOGDDk9jKvovmVUYm7nvLOrx4amqi7OUEpYaJTroPS1UxFo1E
+7/0yqjIesNPVvqzn2wzuii4VsfDnqN1lqbpg/unr2g2gd095AyY8VQwuqYa3bXOQ
+HSOHNgzm108XfpubuqleEy+ykHhXbgzqVTQ0Y3UjD53f6P9kSUnjnODG0RK0dgHW
+QDWKE8TiQiGzb0sXWdkXvPt+zGw2+C76lID3p7y1+8G4rpfGpi2aPOH6m4beqNAk
+ekUzu/dauhHY4aGRoX/EsDTN8K4FYtGGaoViFIh9Twc3nWvERXbjXSayeu08f+7C
+NiSo6WMzAgMBAAECggEAe5D7MBt1S0H1Ss1+as/OOFqllwGNYLgjRhOR04BHu2G9
+Idjp0tcQJRBD9aMxEMOQKLkjFLtQ7aYJD8vAFMWv9rjmqKWaYk9QIFd7O2r73dcq
+jTTt0l9gjZLAhMzELO6680M/Nd/MeFf2UV1/E76GrM+dBrphmvAUWjFgabMWHDR0
+vFmZW46MGyDLAmihSYXXtwamYxf4UHYC9QxW2KNu1l+llalrRqzT0tQde93W+lM7
+fZBXgjdLayqdPpYhKd6QkEfVYrgtkuZern+DlIhfQcBwVqj+2gVfO87hFVEb5V2+
+Rt4v6xpL2Um+MvojE1NO353WPDBFMYOmoMjSBL+CoQKBgQDXzk0ke/+ZZoOIWLfd
+z57s9HyoTbiUHNELIhCNjJmpEVMlUn6TSRu8r8s4EciOb9yj4j5dr0p5tdsmP0eL
+KJZyTvNlEsq93azCuzG82Z+963iqq/1msncjvcbnIll8kGwpr38sLAN/qjc11/o1
+gLbWuiztGyTPuFtM/Hy/UvkV4wKBgQDUN78TSEGzuKDtyuZNMCnvSJdXm2p3XMaz
+d52ooRtZ0REH/MGMFW5u1xJxnDflcgnzXRVq8xaw3TMo/3Fx+Op6PGq8zVEwGDBQ
+0WQqBVB/b4Rw21Kf9fMVMtXvOxIsQcdz2583s6Lojr63H4P11fF60EEVmEW2cXs7
+MviuHdt+cQKBgQCpgS0ufwbgYpjlu2mQG8fkrpRLTeCw1YGMkREXXVxEY4s/QXCS
+F1Zl+l5QiAdTeaGAR/BcfZatyp17iTCUqSiiWEjtFrmQMFHGEmqavwStlAqPY9AB
+niPeOu3EFkLbiESs6V+mPlvxJq1+6UlqRNNYDZvEERH05gUwjxEc5fsnqQKBgQCo
+Q2cqJ8GIeVyIDreZ/hVR15G/8cdxysr1o2MLQGpKRb0mQx9HLfr4wWirUfzz3P7M
+ykJgIUwdgdW9rQRLJNztfJf5CSZVZuhwPAYaV0pjMI2nWg7iLAXICh2caI7ZLnKx
+hzJv3OvPTtcipUdhFXg5M4RXVfv4U3QtFRYeIChX0QKBgQDDQ7mGmWkuR++svxXG
+A5ITe+7RBRO8kVhXEGYQbIiuk4fM2ZXWnw/MwMVX3cZRfL2DPVmRa5Xcgs9OLwQD
+hoGqX9LBAkyB1p+ZBqNJaHa86awXR01gWNPW7/GJTp4Q7V4KkGvjIbWVWH/7TpMe
+d6YkymUz7h0qMN/M5nsB5Xg4jg==
+-----END PRIVATE KEY-----
diff --git a/test/certs/badalt3-cert.pem b/test/certs/badalt3-cert.pem
new file mode 100644
index 000000000000..cd44b22a8b76
--- /dev/null
+++ b/test/certs/badalt3-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDaTCCAlGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMTYwNzAxMTMzNjIzWhgPMjExNjA3MDIxMzM2MjNaMEIxIjAg
+BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDQxHDAaBgkqhkiG9w0BCQEW
+DWFueUBvdGhlci5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD7
+yQbYxTDmAxcJzHqauQqtUWWDj96qO481h0oELUC1VEbmV9Qr1v2OPebjVQfa+gSc
+YYqC96IrJRwtg+z/mQzGE2QbLdVrCwktLmd0e3udfT4DObkKFJ63G9wH1kkBcsXy
+esNTqmUvUS6uXMZYlAGX3uml7UmwXJ+E3zHzFILTeZcQxqjLm1BLGbSFZzT37euc
+ymsZucA6pZwGiJQdRieSDTliXCkECZJhRf+tFBvcGuTnbYHsK6RnAlAN1Y8LSLrq
+sjJunJA9U+5y++QR+xSzDrwjQ2RjiCDO6HU5k6x67x0g8tdkhS8yjT+lBIxOuU6T
+I3GC4vN3U9LvZrWTj26DAgMBAAGjgZIwgY8wHQYDVR0OBBYEFIcSdFjChgdLODYp
+IIL3Cx40pmomMB8GA1UdIwQYMBaAFAjRm/nm1WRwoPFrGp7tUtrd9VBDMAkGA1Ud
+EwQCMAAwQgYDVR0RBDswOYIMd3d3Lmdvb2Qub3JnggxhbnkuZ29vZC5jb22BDWdv
+b2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAZSDs
+XlhVEqGRU5Y/n6EIznEBdDSMSxjrZ62Nf4rWzrQGYT+R9CjUQra9/6wXyjvlTZZO
+w+BP3y0n2vH1TrCP22fA3n4Tw8WoJfq4Sb3x/eSgTlUYAiZvHv6vfugC7y36c7xh
+3dCgKWCDxaAplRsMkXIQXgfCNp360Z+OMMeNpcpVnxnp3LfMKCpsDWUKuWvN1AJE
+mi1VCWQuQIC3vmiZbZc/YKF1kAgUHxCnqHcLtU3GAZUuCVyNrdWXk8IjzjzX+ZpN
+qr/RUVVZ4IYDUUiGLHW2AvpVv9mt+SBspsCDXyiAf5O6xdek+tiTYLmU9uUOmtJ3
+ndvhdtnodLRvtBeJUg==
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt3-key.pem b/test/certs/badalt3-key.pem
new file mode 100644
index 000000000000..398b52f76ab0
--- /dev/null
+++ b/test/certs/badalt3-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCiqb6LYFYj1uPe
+IVuzuDL1bfV8+xlrws67I+9yVDiHslYdA7ygv41gYKEmKSbL2SvAOnfjgDEb8RYf
+LhF3LQUvXyON0LkjkZseXVFLNokDBXoNVeP1QjWfznPxHpgGN/xF7OQpkX3FVByC
+IVUOpiXBbq5FtsuLhquHK0yAsY1gJYP8QFHUbCnE5vrpK8lOv4MZEc9rS6ZrSKn6
+9+s3nGx9QheboiDVTWqynxDQn2W5ZyTyKQX0IRnKg2zLJ6Dg2ec8OUh5nvzzUdns
+AJ/pN2Yc3ri53OPodTkmrRha31N48TA7st35XepAk4vZnSq7cml+85xs8Az/OZDS
+HH1EV5sDAgMBAAECggEAUIndN2NGo04l2vkHT4/XY1/DWdN1/b4h39TmHOSIbN+m
+9YzBG5JcbKjLgXqEpA/uMqqAa9sv9ZbEDkIgEbLvy0m+79u1n1/bvwgTVTs2UZGn
+oeyyBuB2bp6pF2y/duzHctPdEJvh+w8vYlsgozUuonyruwbL91SBn1aX9Wx0BHMk
+rReJHuLxnGGgUVJzmNqKaGKBpuBaLhpytcIuwkNErDHUfzyxDcpu8IPo70jCafrE
+hlrbs9o8vKcnWF3XZ2LVPdrF0MQeXfvOPc0txiAOU4DQ91gsoZsVsYJCXY4Qw+4S
+ajpxidF6nQDtRtB/aTq+OCMzCVGog6V8Mg7VbA8u4QKBgQDQSHDEBgvPfoA/6Sxp
+uzFV7T0Vgl58oV35EqPFl81cBUSwTElx8ueP4kK00964j47Qe/N5TQOzvH+rxlGQ
+cBgQzG3W83c9HmfHjdx6lSQIruRW/HwqOsJtPcxP3XyxSO73+hqwf3hsOWRq74Lq
+MHcgvWZ1iy/A0smVQu2sDLDk8QKBgQDH7b+FbKSngDZU+9uEYKkPpmhh0qGXVgSX
+1W1BKYxIKd2y6aDOCxZJDTJGNBMpVdOTm1VNrL2J+cF73XOJWaG7KnSbxl/tkrS4
+9hwJ+Ut2VOumFWHEUqp+nxLxwJdCtA2f/YTNqJPLj3GiGJB+xp+dZr4ARn/+P5/N
+DC5G6S3vMwKBgQCreWg1ShEBI9FsTIi/B1kHuAgZJDqr+qIGQ/1G2MI+Jyw0xKmW
+wXc48vseKmvroGzgYZvCWtBYcjDd96kA8/gsJFGtrMWXMOgZ10YUOaLv7ySYJMgI
+cFXPYBhMDDnzLutmhqbgdiFrYBi3HTa3nW0GLEglL5EB+8fwNai8g7pC0QKBgG6A
+su3NGcjW7bDVMASf5HGY+XKwF85spcdCGMv+aeHs+fOMe+vGZv/jglkZKUocfP/F
+yEVRZ8WePNn4kYZl+yVXFvKOl7DY+HiO1vqQRqxVzZWTleEMC95GkBL87t3YZPt8
+BW4iceX+F8GPMDZSFCDMi9HdJZtikTGlPOLGuTPPAoGAAjVUGfbNqnpQv6aDpyWX
+Szd2uA9TzBCkh1hf7x4+E/Wr0leTGgXVez9uNarfpnVfgHTDv+OYK+Qnrq+UEHQr
+9xRAgXLEZWXPbkUakB1o7ZW52MxR6C1zZgitTZYVzeX0EMeWc+1Ujjwe7Qu3L6RN
+kEI6l4ZQL9buxDhqXH1UFbw=
+-----END PRIVATE KEY-----
diff --git a/test/certs/badalt4-cert.pem b/test/certs/badalt4-cert.pem
new file mode 100644
index 000000000000..3c041cf34546
--- /dev/null
+++ b/test/certs/badalt4-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDaTCCAlGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMEIxIjAg
+BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDQxHDAaBgkqhkiG9w0BCQEW
+DWFueUBvdGhlci5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD7
+yQbYxTDmAxcJzHqauQqtUWWDj96qO481h0oELUC1VEbmV9Qr1v2OPebjVQfa+gSc
+YYqC96IrJRwtg+z/mQzGE2QbLdVrCwktLmd0e3udfT4DObkKFJ63G9wH1kkBcsXy
+esNTqmUvUS6uXMZYlAGX3uml7UmwXJ+E3zHzFILTeZcQxqjLm1BLGbSFZzT37euc
+ymsZucA6pZwGiJQdRieSDTliXCkECZJhRf+tFBvcGuTnbYHsK6RnAlAN1Y8LSLrq
+sjJunJA9U+5y++QR+xSzDrwjQ2RjiCDO6HU5k6x67x0g8tdkhS8yjT+lBIxOuU6T
+I3GC4vN3U9LvZrWTj26DAgMBAAGjgZIwgY8wHQYDVR0OBBYEFIcSdFjChgdLODYp
+IIL3Cx40pmomMB8GA1UdIwQYMBaAFAjRm/nm1WRwoPFrGp7tUtrd9VBDMAkGA1Ud
+EwQCMAAwQgYDVR0RBDswOYIMd3d3Lmdvb2Qub3JnggxhbnkuZ29vZC5jb22BDWdv
+b2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAiF/+
+jEoLAFll7JZN9PioyP0i7EEYCCVc7omFaKnIV0A9ZfV/TlHBZH/IQKdUXbSPF6eF
+4UwOQbkc2gwYEliNsU+rw5PANBEwPhCGKBIClWhReIzQqY8oTRxKOpq3cHd6hsab
+P3NYRUtinFdoOGlUHQQcql3zYwD/guOvA/zG8sR58ed9Fd0gt3OnSEvUSiR4e9bg
+gbqgSYgagIDcZn4kEJWVHQGj7lA4ot60X3VYk6vWSB/RmWqbmsGxzoNayGWaCw7l
+CuipVdk9yi4eROoQAxWvVBDz+7Q9CF7j1PkDMYB+QwiXwNfGplOMAWv6nQUNJPs5
+dIn/eeha7QWrqG/45A==
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt4-key.pem b/test/certs/badalt4-key.pem
new file mode 100644
index 000000000000..aad778dd4724
--- /dev/null
+++ b/test/certs/badalt4-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD7yQbYxTDmAxcJ
+zHqauQqtUWWDj96qO481h0oELUC1VEbmV9Qr1v2OPebjVQfa+gScYYqC96IrJRwt
+g+z/mQzGE2QbLdVrCwktLmd0e3udfT4DObkKFJ63G9wH1kkBcsXyesNTqmUvUS6u
+XMZYlAGX3uml7UmwXJ+E3zHzFILTeZcQxqjLm1BLGbSFZzT37eucymsZucA6pZwG
+iJQdRieSDTliXCkECZJhRf+tFBvcGuTnbYHsK6RnAlAN1Y8LSLrqsjJunJA9U+5y
+++QR+xSzDrwjQ2RjiCDO6HU5k6x67x0g8tdkhS8yjT+lBIxOuU6TI3GC4vN3U9Lv
+ZrWTj26DAgMBAAECggEAB5KFLTHJBbHkGHxY15xnEM1Y4zsJdE80QGTgOf3ua0Ws
+mDLeA6+EkqmT7xRYlyJbzyQz2Tp/WxLTpR7JmupMcwyUPykCuSRs0zoJDHzGO/dP
+TSOISCBUoacp1+Z+7Zc5EtDUXQjL4D9tyvqpUHKrFZkzp7TaOX6foYxg4TGluZxo
+RDp6qlAOzZJiAcmavgqPpvfgbkNs4cfdh9yu7FDX2Orqa0pQNsPDWp2VyOkDEPiR
+7LTK0OxQiHLdBbLvjiW34eElyJl2tJhCb08JcRrfbYpeS43j0rOcyDJQZX6tkpxK
+BJwgWVwqwuKBlZyGT2inASNeqON1tAGWhz59cWXcyQKBgQD++LSllDv7fOZTRKgC
+e+MGbkCKrPgjUr9NJgcrQhQ+kxE69E3p4iUtj/YTwIc23qxjuZ+jyG1wOFIULRYz
+KjBbuyEugfmcgWtFWeJokl71IHBk1QUT4xlSSMvccs8pTseBCdVWIkPRIc4qeGRB
+3RCPrJmmcvsJ7gnYPFfmKL1tRQKBgQD8zQflPYNLPgGPNaCbFiy0aCNYzvd+4ETz
+3TsKbmITXnq3W2Mf80RctzasFkTxM4Kma2fXbDNt4Z26s2x12FuEg7oaKtGKZBy9
+anmg4u4Cr1lk9BSSqlQeKsqQOp0mI3hyBW6v9CDhgCbMbKT6DgskwZpQjHLPf8UK
+DCfJ2Mq1JwKBgFuy8rVCNLhj2SpFXO9XwvSDHm9BehSqI+cJMDbckw9WMTI0vvjI
+vno+dk/wRDD1sKZFEicDZGihuNNMy9km6TF0gaCKWk1xNjVA+G6HheM/AW0iN6tJ
+V8gCKl9kYyEGFjZQZQuPUziZod4gYl5VtSkW+EOmwqZ1l9DPEwXRzR7JAoGAAu2A
+9Oe0eI+cRwNQ+9rS47f9CM9E0IRaaBSc1W8X1a+Xbj4xtLIFjalVicKsQ7rb/X9q
+8XTAV7pwMDRZwjeiP7Oi2SC70oV8S7lK9VELfp53Q5MMFfLBDKRkOi1jmoh4oaFs
+eb8zDkmEqYNsmbTF7kQLvHkT71FEf+xKHa1UE6sCgYEA+9bRKxPgngVA1qAhwrDM
+jjODdUhrlJZDZ7oAVs/CelAO6sSXZ7Yqyujs2YonuQ9aUiLLA/b3b26XEqW/iMzG
+onhxrQXGlsvqK+V5u+x8yBpBUj9KBw8RXBtdhPEl5iRIeQ17xKRi+9WilOuhwdKJ
+dlpiKXP638lF4t5jvaCy28o=
+-----END PRIVATE KEY-----
diff --git a/test/certs/badalt5-cert.pem b/test/certs/badalt5-cert.pem
new file mode 100644
index 000000000000..bd67898bd401
--- /dev/null
+++ b/test/certs/badalt5-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDUTCCAjmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMCQxIjAg
+BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDUwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCzgx886aURB161wWGRp4rr45Di4KhS/wUUSaHTQo5n
+9jD+7glAOBTrbQYb+Gz/tusDsuHvZOGOvQ45D05MJVvWsz7M42lA8GLJfKIX90aN
+PMkX0pjNbx4admrAf4PYGabkihF9iPJ/ONiAYuoGoT0gjOEqtoxyEu/buXgNMTdt
+lZ+wL30WKL518MCm1KIsqFpSrNRYZq5E206Umsna7uje5tBI3CwYy0OD/XVwnSEx
+OgWkQ71RAqciVV3bCptBpheWSL8RH2Zom//INa6g5ArJy6TCy3IsmE0hCwteaHKB
+jcFUPfLQKqJZiIg5DgJjjdwZ3KAWMljo3GjdSVbdZ6hNAgMBAAGjgZgwgZUwHQYD
+VR0OBBYEFHecitO/eIltLUNkgT19Gn4TVkc2MB8GA1UdIwQYMBaAFAjRm/nm1WRw
+oPFrGp7tUtrd9VBDMAkGA1UdEwQCMAAwSAYDVR0RBEEwP4IMd3d3Lmdvb2Qub3Jn
+ggxhbnkuZ29vZC5jb22BDWdvb2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbYcEfwAA
+AjANBgkqhkiG9w0BAQsFAAOCAQEAOBZXBSNNAAAaII+l4mMoeXCpvofbaHuNlJur
+G+1uu5ra6VF5Juc5/uBa9zVQa2npe0kKOtx8xcI6QMQW+usphaUEh8t7AgR3efyK
+bsSKPnGxXtCSaYZIEiwFyAFTx1idzZixEfHUHTO+LQUwNTskDGCWK46V1P1wL478
+jXikGqc76DSmOXTc93asCMxCBIbHN7LLJIRhbUpiL2JrBPydzERPVoqiEZ9SWG4p
+DB4T0hHq5FUUnR1Wg7yQoClhyButeB4A2eGwLjhpSeLeXo+w6ENlcm9Lp5rOhbOo
+xqwgz6kUtU6smxWv0HruLT8Pq9hIKuPz6DWG/vIpiSLwz4B25A==
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt5-key.pem b/test/certs/badalt5-key.pem
new file mode 100644
index 000000000000..89cdf2539fe7
--- /dev/null
+++ b/test/certs/badalt5-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCzgx886aURB161
+wWGRp4rr45Di4KhS/wUUSaHTQo5n9jD+7glAOBTrbQYb+Gz/tusDsuHvZOGOvQ45
+D05MJVvWsz7M42lA8GLJfKIX90aNPMkX0pjNbx4admrAf4PYGabkihF9iPJ/ONiA
+YuoGoT0gjOEqtoxyEu/buXgNMTdtlZ+wL30WKL518MCm1KIsqFpSrNRYZq5E206U
+msna7uje5tBI3CwYy0OD/XVwnSExOgWkQ71RAqciVV3bCptBpheWSL8RH2Zom//I
+Na6g5ArJy6TCy3IsmE0hCwteaHKBjcFUPfLQKqJZiIg5DgJjjdwZ3KAWMljo3Gjd
+SVbdZ6hNAgMBAAECggEAcNWYiwcptFx3kbNuCsnPLpqp9ZHU++ZEYQ4vY8VQEdTT
+00n4Ep+ttpWe43HxwYJOktKb5Yf5p2j6Sa9vPbm10mx0qwC+pgzza0al9H5/oEN2
++zxqw6Z2u5d3XmxIiUsGdly6xbeRBZrLq1eBVo1/CLjEx75a5VE151zbMx+egYge
+xETVRushMINQwkMbVUQp6MLX+M5eqEP8c2xyzPVEtxtxpu4yxZWbDuFezModhdvj
+ncV0QTBvlvB5Eg+4CeZiOvgu8ulnNUJsYGvMGCK8b9FwJhpM1CVtmw070CnRL0hx
+6Xrhgw26oAUmxWkvzzXsgwxAZFJMpM5Rg3rwrNDzWQKBgQDnR9FIh24gOK6g9dOx
+i/LVKFZ1V1/HVXTXiBjPHwecNkBXLLlgE46fxSHd1mt1yoHnyp3qOXbCIsqnk0S9
+KyMN0y7YG0P6QHxdrnhhr2zsZaVBEoLXmBn7vp6M50xt/Je4qvOGwkPTrU2Uftil
+qMIexti5oO/tOksmWw0Bm0R0WwKBgQDGsthSr9y1zpACJnu9rdMkwqZoxn8n7CPN
+y2L66WSpCopBKighfvn9ymOkV07TdcY9PEo/Yb5G3jT23trY2GOd6EYTSa0S8yDt
+lslXTzZJGAK+RiMf5zHBwIS800XSBqXCjL+yJ3w0sQd9uRcQr8XjIJLZfbT10sRg
+1jQBMK1WdwKBgQDJdsXXaCGF79ouW/ULs9zT0U9+552HBenB1cvGoEEA0kE5rrvL
+9T1H73CQzTbOZJjEULs+TNAmTCg70Q0Pu4PNhyhHF3kfhQzQjipO7YD0a5aIGJfh
+NZ1srZ9vHgx1wpJnSoLX4GE1AsGRmO0fYOG37X7cNFTLUPwlbSrnO1lmAQKBgHdR
+kJve5X/7wfi4mVgnGQMbLIkAof0cTcfYGeEo5HyqSqmlIiIzOPYRYlKe50QOlnPR
+T5jOHlA6Qb35x5uuHewGPoZ4mMknXR+vi8q1U5kDJSqTvaX71KJP9KXbjTL5MPMq
+SDc4hNqzcBcsXdB0bTXeKrEWTuPLpIeuOd55F64zAoGBAMooy318nDZ0c2Qek3/N
++SN+cG5tLH7HjbI9C4XBYVbxXHIvg/nSzFRxBbC2ZFetJ27xvweM1J/Clk7d1Lvq
+PM7fcVgcc+ccHNM7KX77k0/J+FJF1uNsj9Rgg2TFveLKbtHfmaZd31k1HIYhSS5E
+a0BZeU4ZpKQJxpf8YbXbPi2Z
+-----END PRIVATE KEY-----
diff --git a/test/certs/badalt6-cert.pem b/test/certs/badalt6-cert.pem
new file mode 100644
index 000000000000..f41568f6eefa
--- /dev/null
+++ b/test/certs/badalt6-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDeDCCAmCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMTgwNTE2MDMyNjMyWhgPMjExODA1MTcwMzI2MzJaMGkxIjAg
+BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDYxFzAVBgNVBAMMDm90aGVy
+Lmdvb2Qub3JnMRMwEQYDVQQDDApKb2UgQmxvZ2dzMRUwEwYDVQQDDAxhbnkuZ29v
+ZC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDl46xhstHmmYhp
+XY/FcnQStR4XHtHcNRyvq1perl0fezeCY85KkddGppic5qIWQDL4ViP3HfvhMlDZ
+E0tAjEfr8Auac9gpa2IFVJAzMnnzOkhO6cr5kmid4392tNCG5sUWS99t2Z4f9sOP
+DQKdoN7lnmxnpZqNf9NUERsN5i4fcvErfQZ4LqV5ld810ZAQZUfarn1rg6/U/ADc
+qA0uQgk9RxVgSDt3M5mi8AaC73Be9nAefXQUybzs6J8EfsDijhD85msxs4Fha4pg
+gM+bXHv9C7whxM5F2WTeET0cIcAfE3+jzQlkjcjlS1rTEq4d0Pd+1rXkhMwZeze2
+KRL2Le8jAgMBAAGjezB5MB0GA1UdDgQWBBRJJljvheyfKr9neNplhIMIFx25QjAf
+BgNVHSMEGDAWgBQI0Zv55tVkcKDxaxqe7VLa3fVQQzAJBgNVHRMEAjAAMCwGA1Ud
+EQQlMCOBDWdvb2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbYcEwKgAATANBgkqhkiG
+9w0BAQsFAAOCAQEAPfRFkpkTsPlH54n/i3kxR8Hw17kUOV0/v39fnNzV+PXS/IIU
+9OFfP7qNeuoWVQKXCwNWGWYXb7O0LNJMJQWWtyXtzWH3rOSxdSRIrTsCVHA41Lbo
+te2nrfnGMtg6em51Do6Kk0JM304sVAWl5OY/eckBmuDgN/5WfZudOLd8Ohv8vZ6U
+ZNoSBNpu1x5gfEPywMUGAgbkNZVpzNAfulx3/D2kWk0qwEKqnphUyaXiTVqO49gr
+n1LwSVdqBcmapBmEO3puV4TBWFwM49iMMNGn0fp/JBVsLjt+q7TK96qGBo/BSEL+
+e2TXTNpdkn3l+ZK2FYdf7s8fytoe+6o92dN+fA==
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt6-key.pem b/test/certs/badalt6-key.pem
new file mode 100644
index 000000000000..782d69334a40
--- /dev/null
+++ b/test/certs/badalt6-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDl46xhstHmmYhp
+XY/FcnQStR4XHtHcNRyvq1perl0fezeCY85KkddGppic5qIWQDL4ViP3HfvhMlDZ
+E0tAjEfr8Auac9gpa2IFVJAzMnnzOkhO6cr5kmid4392tNCG5sUWS99t2Z4f9sOP
+DQKdoN7lnmxnpZqNf9NUERsN5i4fcvErfQZ4LqV5ld810ZAQZUfarn1rg6/U/ADc
+qA0uQgk9RxVgSDt3M5mi8AaC73Be9nAefXQUybzs6J8EfsDijhD85msxs4Fha4pg
+gM+bXHv9C7whxM5F2WTeET0cIcAfE3+jzQlkjcjlS1rTEq4d0Pd+1rXkhMwZeze2
+KRL2Le8jAgMBAAECggEBAMcDjTTa2GmYWoZUr+UPizqyvsTnMmg/NoFBhy9WJVne
+kpR3kJvvm30XNiEGbCV1GGryL5p7w5UVuPXjhQ7xIkY3feQNC4H361iP93HK7dXJ
+i9V9AfGCdLzSuILsT2Wpm88MifUQIpqrRmqtqakKHkyMFG655409rpYlZNVogl9H
+vzrTE8rjysNMjP+bpbgkxUJfeATw8OYhEwd9ahj/E0r0r2enYhGEP3j+1zYsGdmM
+L2Uy4M+modaAWpZg5pUWpFjxl+V2cSJHdaQc8KYg8Z8RUyzYipFk3YzjP5jtprq5
+dHf9FqlcXk+MtzcYe+x8mIb3uwZhOtdpnUqe5l+GTyECgYEA9j++rS9sajQzMqp0
+p+EptacD/p7A3wldIDGEpPJsSQL+vhcigyn4iPCM1pGWR4iuR7Od9RpQSf3Tfnqc
+ZwUJQOpiYpxo1+QlqlBJkDjDRztp+kETZAgzc084ZhwQv9PfYyxa+8layQFhnClt
+Z9G0o4AV1povVeQLO5+9CQZQ4VMCgYEA7v4WuydzlLGKppsJEG8vvieR64mjOfO4
+gHBMEYnzEeTZPDvIfEfguM1upJCvt5GXp3huVHCAsFgs6kDjVbpIL1A2HzrMPtOa
+MNDSOrpuLcakAgEgx2VFv4TMnA1QKPg3//YCqEqqTJyX0C4OwaADRZJS7YfHp9lg
+mpv90baE8PECgYAv3oxulj15F9SsEL7Es9yr11/La4kK0oMr8vRaLFYoi1CCG3U2
+Ej6iQEDgpUSVe1iFz8DxGMBq4dDvUV5+GFiIKggeK1GmRk+cICdsxdwQSNh9MZFX
+bNCzpb7M+r+2yrUuTj0RnT7svDwBY3xFJlr7PbcBFNAG3mHgoVjaHEQ0yQKBgHbS
+zepvSv/65bzACFmrbklU0zAQVp9RlcIGE0wFEl0rMvbHon5oHkrDmOcpKLRUJtqU
+/gXtiY4jyPEPIfhVjd44OzB7w2DZRChRKrUYS/9ma9SzSuDYcT0vgat00w4Lm4wf
+fGK//Lvqf3B59cw/CmFkxuZiQ9ooMees9x11adOBAoGBAMdb0r8sAtgh+KTbA8Kq
+guIWiknOk6/LYUTuT3fidPIPbErrUQQR9WWHuXjrj2RyHI/RLjYLFamikvhU7PmE
+jPjPAo4p1a0WBwrYgjGDIRjTVjbUK282vuYkunGWYfgnZurAyjJCndL/eNZuX2F5
+m1rTfab8O+tOOGKGyzfouD2A
+-----END PRIVATE KEY-----
diff --git a/test/certs/badalt7-cert.pem b/test/certs/badalt7-cert.pem
new file mode 100644
index 000000000000..4fa81b3c6f8d
--- /dev/null
+++ b/test/certs/badalt7-cert.pem
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDtjCCAp6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMTgwNTE2MDMyNzA5WhgPMjExODA1MTcwMzI3MDlaMIGmMTsw
+OQYDVQQKHjIAQgBhAGQAIABOAEMAIABUAGUAcwB0ACAAQwBlAHIAdABpAGYAaQBj
+AGEAdABlACAANzElMCMGA1UEAx4cAG8AdABoAGUAcgAuAGcAbwBvAGQALgBvAHIA
+ZzEdMBsGA1UEAx4UAEoAbwBlACAAQgBsAG8AZwBnAHMxITAfBgNVBAMeGABhAG4A
+eQAuAGcAbwBvAGQALgBjAG8AbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAOG4PegItzkmJDwlSA/FyVHWLWUIQrnxgS0KSds3On2CMsjDJ+X77B4s1IPI
+yKHuqNbXqV/hJGAxKnZRZe0D6VsmKlYOYpz9QtFxvpo5DwA3q6BTx6sIElFn/lip
+Pbu5ZeIMNeN4bot7x5sBobr6OgidAVaAuqQHHJnD7mQ1s22qY0UqkBqNBhhJWOmx
+YC0Q56WDi9+C7Cy2+kiiSlT4jCZ8m1K0F7tTK5mF0p4HppXmXLzcecZ/Sw8jOqQK
+JM/4UCj/nxWCGYKWkv8zLJtG+ryfZMf15/0Cd1dzHAS9mYU4mFssPdFyT+WFpw7b
+K3TOTXkS/tAPbj0xin2wqBJz8m8CAwEAAaN7MHkwHQYDVR0OBBYEFOWYNq+H1LH6
+lZUpgijb/S/sAiDsMB8GA1UdIwQYMBaAFAjRm/nm1WRwoPFrGp7tUtrd9VBDMAkG
+A1UdEwQCMAAwLAYDVR0RBCUwI4ENZ29vZEBnb29kLm9yZ4EMYW55QGdvb2QuY29t
+hwTAqAABMA0GCSqGSIb3DQEBCwUAA4IBAQAwUxnqq0gBgKmEHIRgZVu10KtOknjt
+p/wEcqQ9METvXb+4/a4U6ftjTgaOrPVjamNFlaoUcTgx2nk2zRsjM+e+tpnxDgRR
+/yoVB3HsISpdeN70s/WYAgvev/FdV3O+JWhUYHdKrDB4DMfPhlRIfSgOymJljo6+
+wL8qa7lVonF91Im4SCbq4dqtAnbg4ttblQ3yjFfQtuwzyJD/3ism6FQPLbg1K4eu
+1Si0EDL4Fct581Gb5D+NU8PYiwg7Nk8ubNlRHXydoVGDLmT0hLE+/IsPd1M8tMqm
+sifRl2Is+lGVeg4pPHFjB0npTNkaYafu89dz/3PNRRr5If06B+apk4AX
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt7-key.pem b/test/certs/badalt7-key.pem
new file mode 100644
index 000000000000..b453f1ff30a2
--- /dev/null
+++ b/test/certs/badalt7-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDhuD3oCLc5JiQ8
+JUgPxclR1i1lCEK58YEtCknbNzp9gjLIwyfl++weLNSDyMih7qjW16lf4SRgMSp2
+UWXtA+lbJipWDmKc/ULRcb6aOQ8AN6ugU8erCBJRZ/5YqT27uWXiDDXjeG6Le8eb
+AaG6+joInQFWgLqkBxyZw+5kNbNtqmNFKpAajQYYSVjpsWAtEOelg4vfguwstvpI
+okpU+IwmfJtStBe7UyuZhdKeB6aV5ly83HnGf0sPIzqkCiTP+FAo/58VghmClpL/
+MyybRvq8n2TH9ef9AndXcxwEvZmFOJhbLD3Rck/lhacO2yt0zk15Ev7QD249MYp9
+sKgSc/JvAgMBAAECggEAZG2cJawTEXtV7ejMii//Jck8g1JMlfzM86Q7Pizxejw+
+qjKiguI2qSpbF5NzKRFNz+E+e+lpTN8zPFd1GSJ/Zk2x0n4uBBlu7E9GdcnjUb5z
+Py9njEJYHB4//WS3kdmoag3ywBWqYaceJWpxcga5YXGx0bIO2MJNSGDzpWR7Q9QQ
+tG/lWmno5goY2BxI08BTKSlqNIBkg/rr9jJo3axRcEmbx7hj4vUkAlypFKtmR4dW
+bNo0f6VAd5Y6c9YbnKybR/44lScBksuSkZjm076cbbbp5PpsiLGe/12bqUcwCH+T
+8hRVndmOLdOxC11OZOvMbX6x2uXNh3/Qr/GMyfzZcQKBgQD4we7E9vOygk1J5Vbl
+1zETR9x3dujpBBx3xaHXUSJNUTNwmnZ+0JoFTqPkRmmPMNK7XfZuPymBehtk8WYt
+NnezM2UNTdbfVOnJWnU6igRNGBaDW6F9AezlADBNwIbFVw6RqP4fTUFsmm9TQ/8M
+4kZmmlW4uLZyX0WQO+AJa7NShwKBgQDoSpnQgmWqXMcaHwY2l8fEDuDc41nDoJIm
+/CMppPbr7GkUX4OU785p6E0N0o1ONt+xCBT1lxHwWEeMAKZXrNC1XGpfvhpVZ72v
+VruATDFs1rcL3S2Sty7A+jhFKKXlGeDWNcpaKY8nDvv2uJG0+J3bLprdMqnY/gQ1
+C+FzyQ6S2QKBgDnHIaRSD6xoo3cEc7iS0O0/ha+hyNtGfy46kyqlx6fZsm73EYrG
+/N86ssp0qFP/7RJj8rcMqKFQMUiy4R6jRg4zY8dBSyU4XczM2+mq4PDfJWuBPvMA
+HXvbHV0R2LvBSrr+W3f9w7Jr9GuMoZLmg5+VPU/YZ1gNVOT5Y0IM5+vFAoGBANx9
+CzlGvLeTrw1VS3GAaobn1Hr2dlrhTDki9UFvK03PLgK/ksdJRLV0YcdwBt6p6XRB
+hpuC1O087lSuvTXVfJnZacMNUDOm7/7BpeJm8DcuK7tgKwTrSb61A7ppleY7xRWv
+Iy6n6hCaAYIzuWJ85mGJAEhb8apdmqK7bzmXK3UpAoGBALdOvJfqbF0YlHbdQCVi
+ftjtxs/dZKdF1rNARR0VMqUtZX+WP2b6OPXlwux94Cr//iNv5ih3B4Z4LIgTpgBJ
+AKGXEBGMMthAlptC4BcOAEs9cYeWGLAoYk8jpNmXvXjhGqvzhPO2YrX5xy46dVOG
+iiCseyA7Kr8Axt9QhUzoi5f7
+-----END PRIVATE KEY-----
diff --git a/test/certs/badalt8-cert.pem b/test/certs/badalt8-cert.pem
new file mode 100644
index 000000000000..20560602669b
--- /dev/null
+++ b/test/certs/badalt8-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDgjCCAmqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5UZXN0
+IE5DIHN1YiBDQTAgFw0xNjA3MDkxNDQ4MTFaGA8yMTE2MDcxMDE0NDgxMVowUDEi
+MCAGA1UECgwZQmFkIE5DIFRlc3QgQ2VydGlmaWNhdGUgODEVMBMGA1UEAwwMd3d3
+Lmdvb2QuY29tMRMwEQYDVQQDDApKb2UgQmxvZ2dzMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAp5T7voqwIiauadaESOe4RMhRVU9tHp5JZlz1yJ7ZYF81
+PJJ9XfERTCJQow3BNRbVeXEyI4mvMMcuFwd5cKqy/gP5yfEV01QbpqACKhIK90Nj
+9fM2QOiYE81FmvQzP6j7QFYt0E6J4kupvj0D8Z2Nri0kXDGe5+hbgLPkZvnh0vvJ
+Ck7AEQ2iqO4Npe4uHoDx3GXNo2Jb6BKNf+nMsJPLo7sqUuZA0/mFDVPNRvKfiq6b
+ObFUdbY/qPVPHk9VBWZuO9etk35G2yTSQ9KiGRNgcoWQAozAyLRx0yECHZEbrZ5J
+JFuPXO/r7saqNuV7L8UpR0Z0SpyXKs7suLGBpYnO/wIDAQABo4GbMIGYMB0GA1Ud
+DgQWBBRkrc1ZEOlR+93o/6EPrgFeM37AsjAfBgNVHSMEGDAWgBTwU4mH3VYZwBnm
+IFVvC/wUFdejsjAJBgNVHRMEAjAAMEsGA1UdEQREMEKCD3d3dy5vay5nb29kLmNv
+bYIMd3d3Lmdvb2QubmV0gQ1nb29kQGdvb2Qub3JngQxhbnlAZ29vZC5jb22HBMCo
+AAEwDQYJKoZIhvcNAQELBQADggEBAJ/gHSUGV0LahCqlFzhi4iP5JTleZlhsqOQd
+S2I6KV24gC+Hz4NHv4XhYv9mqZbivNSpf6+TV+77wcncfmkeAGqYMVXVt8DlJ7co
+NiKJZu3e2InmhLm5b6cYRidPhPEM7qYpxIhjpia1v7U83nNWvwEITmC0H0Qp3Cuf
+dv1EjAyGZsER05jBsy0qqH/64+djqd92zKNKCEaWXkTlC1XE+/PbEb94X8YbQaUn
+/wpvioqQ5rv+Bk2Jss23DDh0zOdWrCbKPc9BfsWCfLZYfOAyn5iH1vNdCVd85ggJ
+YyHBQ4JiF/uqkHZ7iQJ1QinJIJruAsC0BV0S3mdGgGQAmTT3m84=
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt8-key.pem b/test/certs/badalt8-key.pem
new file mode 100644
index 000000000000..1b5cfbce40d7
--- /dev/null
+++ b/test/certs/badalt8-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCnlPu+irAiJq5p
+1oRI57hEyFFVT20enklmXPXIntlgXzU8kn1d8RFMIlCjDcE1FtV5cTIjia8wxy4X
+B3lwqrL+A/nJ8RXTVBumoAIqEgr3Q2P18zZA6JgTzUWa9DM/qPtAVi3QToniS6m+
+PQPxnY2uLSRcMZ7n6FuAs+Rm+eHS+8kKTsARDaKo7g2l7i4egPHcZc2jYlvoEo1/
+6cywk8ujuypS5kDT+YUNU81G8p+Krps5sVR1tj+o9U8eT1UFZm47162TfkbbJNJD
+0qIZE2ByhZACjMDItHHTIQIdkRutnkkkW49c7+vuxqo25XsvxSlHRnRKnJcqzuy4
+sYGlic7/AgMBAAECggEAEnrYZAOxNqLjWuKABfYfmN4qMeknVFgKKhKYO/5gZEM7
+gKl6z7A0wxuJnuF2a99PvSuhZs/ZFNzyFTIKz0TTpjVUB1Phn0NIJVDBzFffA7NX
+w5iFZBUCKDTbtyG0wRFmW4rlVHJEvEKxvjvGQo+oPwvVVaFXL6Ws6X1s83oc0AIs
+U3NKt8Q69o5pMHUo4Cv8Lgv41J2dfmxqf81FPLPl8NO+E5zV8OKT1AEisYh98P8R
+l7E6qWdPVv8hbqmtpXx2rDvUdooaNZPBczjbb/b6zdqxkR3Weu6xBFKTIJAsb7hi
+QI/DNxRTKnlDt8QFZi37KwkXAtSIQb7rjZ2OVOGfgQKBgQDQs5+u1ufRxi65Vw/8
+lkVjuB0L5+2Z58HlNrB8+iXqh9eovph17Y23ADaCUGEgEUyK3SfA2SFaj0C9nGtf
+SgqI2btQQm53sYq/MDNxKf9f0hJ0K0EK0LVyyl4fmGTSexrz+sEYPmp27/RhFSAR
+f+uccT0lI/V1V8NKkSKAK30zvwKBgQDNj7FK/+ER7e1+gE5CWKEimOPys3hd91Il
+2hNWOzllPtOj5C9qayG18XNYZm0+YqQtYZLhV5REMxY2sNtpfMxtqkjUrZnuaqy0
+thhQQP8BRS7eoyOgZ4lAvizsroAqvM9Hqxu7EMspBVLvKDoyGf+L4QsvWB6A7K9q
+4EjDrx00wQKBgCxh1paG6zuoKq2Nfz/W8SC4uaybgOLW71wAWl3pkICkrM8c4S1K
+/HUrXWwvDciVBTMOvvJ6+mXYywrHpenYxA7ARt5Vkkpv/jKUXIw3QzCsavI7dJSJ
+N90Wfhe3/9DnDx9NdxzhwSBT/SNcK7qs+n0Fc9xfHkb7B/Pmk3CwTurfAoGAKlf7
+MXPcLRFR5skPVeNj7fiInCoUFWco6NsvOIginpR+jDgo/EbtPslp9T/EKSGwqBh9
+ZSXhSNstLD7qM6Sdh8mYDxdjqhUXVnJcN8vru5tAuGPqptQtFcUXA/o+NI+IMz8w
+Cyy+bMjH+LPUqRVp6qqE30/LmMsop19kHcsovQECgYEArGQs1WwBCkKCyjAbUOXF
+m7pTgqrVEA/+ACrB2/4lCNgBwRvo2/b23pceEIekfcfzlJnsy0i73Jbh6OV5yk1N
+Glq+druyWBpK6Ao9emVeLWBJVinSB7WMZ2XPPKEUHVQkYSN0rMuBisEa07lai01E
+RxbCxTFtyUMpmWzDwgiwPbM=
+-----END PRIVATE KEY-----
diff --git a/test/certs/badalt9-cert.pem b/test/certs/badalt9-cert.pem
new file mode 100644
index 000000000000..f3d78208ee6e
--- /dev/null
+++ b/test/certs/badalt9-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDgTCCAmmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5UZXN0
+IE5DIHN1YiBDQTAgFw0xNjA3MDkxNDQ4MTJaGA8yMTE2MDcxMDE0NDgxMlowUDEi
+MCAGA1UECgwZQmFkIE5DIFRlc3QgQ2VydGlmaWNhdGUgOTEVMBMGA1UEAwwMd3d3
+Lmdvb2QuY29tMRMwEQYDVQQDDApKb2UgQmxvZ2dzMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEA9Y+SgizcSJ9TIHvJf0k3cnBDWx8xJKurrmpiuvQMl1YY
+lzmI4Qxojr5CRDSvCZh50xtF4CDMXW1MnTtYelFhfSmQ09M6lyfjMF+hrYTFkDMX
+Rz8WhtN6/YP80xuy7NuhsA00/hUJKqsAKT8ggwlf++0e+L0ELiu9dmB46zaxWzr4
+z+DigvrA+O7xrpiD/NscLNK02uIURKPKqlPL5LxUenC9ROFGNAIYJoWzsjxoVD0D
+X4bf0COBRzGlLFUHN4FY8LBwGhTcQ+hvsYn0JbT913daX46BuEkrT2V2plCsFDXz
+TOtKAHEBm/U4slrp1F3CPsXeqdqnB+3Ktaj+UQ5ZRwIDAQABo4GaMIGXMB0GA1Ud
+DgQWBBSauJ1kxBbvxrSyMER4Eh+hEnOo/TAfBgNVHSMEGDAWgBTwU4mH3VYZwBnm
+IFVvC/wUFdejsjAJBgNVHRMEAjAAMEoGA1UdEQRDMEGCDHd3dy5nb29kLmNvbYIO
+b3RoZXIuZ29vZC5jb22BDWdvb2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbYcEwKgA
+ATANBgkqhkiG9w0BAQsFAAOCAQEAGrRJCrSxYLrkJ2MUyaMmJTrhfijIw9ZdYRLx
+lkCeW+i6qIV58JQKZeRQVVRJSUEV9OGWn6/46xZZdZWpJIab0EtoNHlMQoB1xni/
+1D8+gyOdiWy4jgg83arMMulre37T256vOGtNOu7PpDQCoPWCJkb9xuMt3RJrK8N/
+tFYB8TvWATtY/LGzk9Tmm+C7hNxsWx0l+ewxlqdHvpc7xwXuf8u7Ise0JkCDi8NY
+z6BxnUyWJ83G20npGnAWXJoaXNDcY0H75dGni3WcRPTAayboEr4xjR9Xqiu3bzlZ
+eVdPGwLwbgkvj7NDCQDphHl0HseTUToHGJrVj8dbR4lV10gogA==
+-----END CERTIFICATE-----
diff --git a/test/certs/badalt9-key.pem b/test/certs/badalt9-key.pem
new file mode 100644
index 000000000000..873bae8af1f3
--- /dev/null
+++ b/test/certs/badalt9-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD1j5KCLNxIn1Mg
+e8l/STdycENbHzEkq6uuamK69AyXVhiXOYjhDGiOvkJENK8JmHnTG0XgIMxdbUyd
+O1h6UWF9KZDT0zqXJ+MwX6GthMWQMxdHPxaG03r9g/zTG7Ls26GwDTT+FQkqqwAp
+PyCDCV/77R74vQQuK712YHjrNrFbOvjP4OKC+sD47vGumIP82xws0rTa4hREo8qq
+U8vkvFR6cL1E4UY0AhgmhbOyPGhUPQNfht/QI4FHMaUsVQc3gVjwsHAaFNxD6G+x
+ifQltP3Xd1pfjoG4SStPZXamUKwUNfNM60oAcQGb9TiyWunUXcI+xd6p2qcH7cq1
+qP5RDllHAgMBAAECggEBAJYazkcOnxUxd0HrCU/qdJ9aqoG//m1ZFxgF5hY76ppz
+wZJnVBmlWSCwgpdo0Pp/nzCBgmQwCFyv3F5ckYgryPkWeHZTr4QImOLQAmesOowb
+/wXJNb7y9UKU9O4jB2usEhko6ZTLTRAs+Ws9MGWJTIgV+ZG5ER4cFLOQ4zl89Es7
+/Z9dQFs4c9SqLfyEY3kbXqSQ2uwbUPvZxk22gEmT1OPJGCLAV/fVIaHlGMwacvDV
+W2xqNd+uhkqm2ym5u/ROKOCg0jNDkbyHvfTaqCuM1um92nV5kE+JdPiZvAF9XYsf
+BDWCaYZW7b97drptp3LOCCptjNAqXc0PH8inVvqbjnkCgYEA/jK6BnXM4lzlLUPt
+Bzec+poqyS6uUjP81Ug5CRP5kr+H9GkpBT3iUIU73S+F6Tg6YpobiSP4vpp5kB1p
+iZxApte404EtVtOd1M08fx1rQVnyc8RjDENvYQk5hefOg3DrJ28iQzN/c+m8tHfb
+OjBp90PFDGSsVvvQjJlwtB5oj+0CgYEA900sE2hBGpm5jXgER7CaahcDnHp9qSlB
+lsQYDTDu751V11iRyUVUqZ8IzmgOu53vXbuCpfuQO0H2aFhbe16fCk223eLPJHWh
+cGl3FUeLi+uwShMiRWAikMSQ/fUxoOfeal+N+VgiGYZtT7u2s1mpm83/mw3J/gaT
+CQI19A67H4MCgYBX7xZZC8EvgTEqYngJahycuF4asFJPT3qkEVLhqA5KzITscMBm
+9sxmTGC0GC97yR6xY1wpKc9vqCJrTzFmEC5xSOjACcy0X4oWxlSqKHQk7Eep8oLN
+CDrsV3OVteXDpHlEb/ZrRtJNN8s2psuoqnzNs5zjt6PCh2PSb3YEaQyE1QKBgQCp
+6VfzLZotkJkwXdly+B/f7FgK1w4nf7UUxT5RMeG4uD0WbEAeLYhx0lbWmiAlP+oK
+WJ73M9RxIm0OXEbeiLB0/9g4s3Dm9/snpQ6wjCuQwyqoemT9jYOyO5vzINgsWaMz
+Ktv9CVTEfNv2AF8S8vPZnLuV6O9znUjA08gGG2jtyQKBgBisaBV0L3zTllp/KxiN
+rFf3u42XibhfTuiyaJtUDQftkvfW727nE4nTZ9Q7uVXuK4xdmihfA0htsMbHX7Jc
+1R6SzJ8x8T/2HXsiHLubqbANWfOYxYxlvmfZ7/Bv1GhBIq4d7A8a/Eyz34j9w/xs
+C34TbBAlm79KVANPHT+CJoR1
+-----END PRIVATE KEY-----
diff --git a/test/certs/badcn1-cert.pem b/test/certs/badcn1-cert.pem
new file mode 100644
index 000000000000..3b3bad658bc4
--- /dev/null
+++ b/test/certs/badcn1-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDQDCCAiigAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMTgwNTE2MDI0MTMyWhgPMjExODA1MTcwMjQxMzJaME4xIzAh
+BgNVBAoMGkdvb2QgTkMgVGVzdCBDZXJ0aWZpY2F0ZSAxMRUwEwYDVQQDDAx3d3cu
+Z29vZC5vcmcxEDAOBgNVBAMMB2JhZC5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDN9WI6OyxnW+R98FqrWwMo3JE165bRB8iQOdDP3xE1+bvUMDYh
+8wFR9gfNrKhqXubJ3lCHKgaApTXNKM/jwrT/pqhF6iNfPIbKAMTT4VZPy4/eI45R
+03Yn+dJnZLDz7BDpnuhORp8XzQqfxSGBX0Rdr17xYOwGHcruwoitRyS/w8p8EKos
+/LIDvjzye5GaPXqXkAkcBcLBpWlgMm+j8xE+LzGw1NVw8vWMSpP2WX9kp7aPbh+A
+jSbT522yHy1r6WeElbSY7WOFvnmgbZ19pUdyz8CN6KKb87dBA0joyWSly5ZsNbjh
+/YuRhCgRExvdQ6kImwdKAfO7RLkxho6jny1HAgMBAAGjXjBcMB0GA1UdDgQWBBT5
+fenRjyFKUb1XvUnm4GV9kZmONDAfBgNVHSMEGDAWgBQI0Zv55tVkcKDxaxqe7VLa
+3fVQQzAJBgNVHRMEAjAAMA8GA1UdEQQIMAaHBMCoAAEwDQYJKoZIhvcNAQELBQAD
+ggEBACKtfZCcP/pY8Bu+lb/pGZj5txsmNbJ1l2RVACQA7CGjwfUr7VaQGMuT+FuA
+Erlh+UnEC3R/e1xQwgJeuAXBOWFkxA61isVSrmM7YM6vDB0+t8N9lMUFjPbRyEkM
+A5kaSLPrgSOg7ONsO6YGbaWm1XCoUC6Ilrdzy+ckzklgjYRth99b2d5WrjIxEWIq
+BX2DI2ruetjXYGRzsqSK+O9d4fsqrb5M0ZCNWQZ4WnrMNaAeHWpW6NqSvof/N21x
+WC5zcU7GXLrDigwWPMDLQhVtu4OihWjsqugh6Jl7DxDBhi8JKO6tJQAISHjKaL98
+yXZFsQ//q7ATwlcHyB81B+X16AI=
+-----END CERTIFICATE-----
diff --git a/test/certs/badcn1-key.pem b/test/certs/badcn1-key.pem
new file mode 100644
index 000000000000..dbcf4b5d44ca
--- /dev/null
+++ b/test/certs/badcn1-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDN9WI6OyxnW+R9
+8FqrWwMo3JE165bRB8iQOdDP3xE1+bvUMDYh8wFR9gfNrKhqXubJ3lCHKgaApTXN
+KM/jwrT/pqhF6iNfPIbKAMTT4VZPy4/eI45R03Yn+dJnZLDz7BDpnuhORp8XzQqf
+xSGBX0Rdr17xYOwGHcruwoitRyS/w8p8EKos/LIDvjzye5GaPXqXkAkcBcLBpWlg
+Mm+j8xE+LzGw1NVw8vWMSpP2WX9kp7aPbh+AjSbT522yHy1r6WeElbSY7WOFvnmg
+bZ19pUdyz8CN6KKb87dBA0joyWSly5ZsNbjh/YuRhCgRExvdQ6kImwdKAfO7RLkx
+ho6jny1HAgMBAAECggEBAKDxiUHx7cATShm0ElZnd6+dtQfKwv8zsuIpm+hk62Ef
+d0zYI+UhrT1sIiryKmV9JaJITOtixtQOxl088D+Obrx8cnC4B84rUTVXpnfgVf9j
+FljDtjpxIZsZmPbc836ZUZoOaICKpVYHD69Mb+NWG+mN2oaLc8VP0L4FXKLzvl7u
+69NQlTPG2CS61BktVqMtWWc/9CvdOwqwVbckyISj9QLUgSXIyB4IP3bjp0RYSpOu
+m3nhuhil1G3c05R4UfiE2d9Er7SBBoQ304ld892YRinSgtZqC1G25uZmWJ3ekAAM
+bg6P0hBd86F/G2TxNdelYrxTazjqZShYi1N48SK6kUECgYEA+51O19Q5XkskD/Dn
+VfaCjSOTFwDlb5ATmVCrJu+13/5IJfmJgWA6xdqfWoqxSOsJzXBEETKWgkahoo4K
+OU1UaBTHEJ588xOpoMzbJkKlb5hPseEQsvu055Ky0euMgmlrALPQQ9e1DUSlowui
+Cq9wCak4dqq9NNs6FMIeGhqczGECgYEA0YxcajJFxPHJsdFCVa4tdy9jgfC64t4Y
+CWDzRfUnuX24ILbW9+olvvoZkMSzoVpiQ9YU8kPJUaOyFrw6jUV5GRHUCMgfkx2Y
+nqe+7aSFmv0Nlo0RMV2PqaOZzlxnG9FzyNE+4PygZqtFhN21b5Idc69k2Ltu7K4J
+J4MG1kMUGqcCgYEA0ttUPEisPtoHgZhntUFczHx4gnmMzH5X/k5876dIqkrFGZXR
+5urGthHtIwpBYZMeZtxjHmpfeRNJ1xjjdnvYdVScMdAvc+ERcSDbsmd9jlR8zNuI
+jAWl576nPoX//TXspu0JZiE5p8HUcRuJkxzMbjwyhje1Ubs6JDU81rFgn2ECgYAG
+3WVNqVX1zMIBzEwzCGC+7dOBt0Q4GHSLIhz2JsDlZ8P3dmX2ezo/Vmwt/POxjod3
+l3TaNvRKc2VrL0FvzV3ZP2dF3mCCbk7Iq9AqcuBZon6mdvqgNmN1eEGarBZIqAT2
+CDzaHAyZMHU3lBfUjuHeH1nba9CHenAcVkOME2h+MwKBgQDiHAnTK4ovCNmT5E9i
+03x/wPSH8FZ3Wrb1GMtNlTc7lOtB5eYIvwkaloJkNKHbUDv57V66hnYT6CyH4u45
+dPtuohtafL9mdScYqmicGLtbLLglSQpJYt4J59hffNZ30E84dKXtyDN7E5P5Z00Z
+8PbOMUy3oK6j+GMP/xRNI76RtA==
+-----END PRIVATE KEY-----
diff --git a/test/certs/ca+anyEKU.pem b/test/certs/ca+anyEKU.pem
new file mode 100644
index 000000000000..36ed837cf4a5
--- /dev/null
+++ b/test/certs/ca+anyEKU.pem
@@ -0,0 +1,18 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wCDAGBgRVHSUA
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ca+clientAuth.pem b/test/certs/ca+clientAuth.pem
new file mode 100644
index 000000000000..bb940076b94b
--- /dev/null
+++ b/test/certs/ca+clientAuth.pem
@@ -0,0 +1,18 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wDDAKBggrBgEFBQcDAg==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ca+serverAuth.pem b/test/certs/ca+serverAuth.pem
new file mode 100644
index 000000000000..a07c7771d602
--- /dev/null
+++ b/test/certs/ca+serverAuth.pem
@@ -0,0 +1,18 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wDDAKBggrBgEFBQcDAQ==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ca-anyEKU.pem b/test/certs/ca-anyEKU.pem
new file mode 100644
index 000000000000..241d7b4986c6
--- /dev/null
+++ b/test/certs/ca-anyEKU.pem
@@ -0,0 +1,18 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wCKAGBgRVHSUA
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ca-cert-768.pem b/test/certs/ca-cert-768.pem
new file mode 100644
index 000000000000..71c95415ab7c
--- /dev/null
+++ b/test/certs/ca-cert-768.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICVDCCATygAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTB8MA0GCSqGSIb3DQEBAQUAA2sAMGgCYQC3wNLc1A9gAjz1H94ozPrLOhE2
+R8c6RQjkUIALCOuw8xbZV+AEDSqP11Bw8MVzvmpksR9s1idJhLOugwMNTHfTXJjV
+DWoQh9ofR51J5sOph4yDhQBXRmiuvqMDj+a81UkCAwEAAaNgMF4wDwYDVR0TAQH/
+BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFKrzei/LKJop6yShiJupKskW
+0ZQcMB8GA1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMA0GCSqGSIb3DQEB
+CwUAA4IBAQDTEFRFx4DczHVSiHSFrwWLaAvCvwGVOAXQIk5c1ApUT4IcMr2CGuYI
+xOXheZBAJ4yp6PidB6Xf/rVcEFsEURxQBL4a0+FW7CDfHLbSh5p/OWM/CmM/n154
+9rf+g5CoZ5dIVdCgH4Gn6Xe5iVeIfvvusFBVHUtScFU+QmXMWGMCcyE2AV0hCY1E
+7eJGQ1PyogGof2pI0W7ywXhZzt0xcTsvf65uoFKycck0hRZPZKSaEJ2ti17m1hXD
+gNg+g8MSxYAmzT2yw00Kky+Q0Ami9zYZdhxnvb3Xi910M72QcO+rhqEarmt9ggWx
++5+1gg+oPbsTFDa9RspXsCN3zCD+o9c6
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-cert-768i.pem b/test/certs/ca-cert-768i.pem
new file mode 100644
index 000000000000..e0adb9a77f35
--- /dev/null
+++ b/test/certs/ca-cert-768i.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICWjCCAeSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNgMF4wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFFjzE/eu8wvK
+wzb2aODw52C+0gLVMA0GCSqGSIb3DQEBCwUAA2EAgYsusTJvfb3SqqD3izIlgJ/9
+i+HwTT/Tu56owj8bVAFl+M1U0BLh0XSYxCYmpk6HFN76yoen/PM3+254sV/meHuX
+AOBOwEMZEYcDbR0awc6gsW1aNa/0V+AcwAu/Cj5w
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-cert-ec-explicit.pem b/test/certs/ca-cert-ec-explicit.pem
new file mode 100644
index 000000000000..77207484d560
--- /dev/null
+++ b/test/certs/ca-cert-ec-explicit.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDJTCCAg2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCAUswggEDBgcqhkjOPQIBMIH3AgEBMCwGByqGSM49AQECIQD/////AAAA
+AQAAAAAAAAAAAAAAAP///////////////zBbBCD/////AAAAAQAAAAAAAAAAAAAA
+AP///////////////AQgWsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsD
+FQDEnTYIhucEk2pmeOETnSa3gZ9+kARBBGsX0fLhLEJH+Lzm5WOkQPJ3A32BLesz
+oPShOUXYmMKWT+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfUCIQD/////
+AAAAAP//////////vOb6racXnoTzucrC/GMlUQIBAQNCAASlXna3kSD/Yol3RA5I
+icjIxYb9UJoCTzb/LsxjlOvIS5OqCTzpqP0p3JrnvLPsbzq7Cf/g0bNlxAGs1iVM
+5NDco2AwXjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU
+Fk6ucH6gMXeadmuV7a1iWEnU/CIwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOc
+TXL3o1IwDQYJKoZIhvcNAQELBQADggEBAJodbCIVJypVoZM/FHZKO1/WACRoN47s
+1ZBzUDBvCIO44uv4Umv8iYtiP4qxIr9FkK+DQNZ5LUaqhwiMk7wIGGfRK8hJ8+7A
+bhNYtsIRoPJNyM9cTmDhA04OBJcEiqHHEfngq9YkGkX1qPByzKuFqEeLp3+vskew
+OvJ4lMSBC+OwC/8xJIfv9BG8U2im34V5MX/xgorWzsG0C+8d4eQiPDtbY+SImN03
+HpUJIXiEispX/6SIXqYA7Y/7yf2YefOtcrhVV3HdtgDvq9mgPJRjMLgCyg8OeVr+
+b0dJ1GAZ5B7acCn4fK96dMGGJKZcQhquogTLyw+gpe4wm7cxuHjlbjw=
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-cert-ec-named.pem b/test/certs/ca-cert-ec-named.pem
new file mode 100644
index 000000000000..a2ca88d240cb
--- /dev/null
+++ b/test/certs/ca-cert-ec-named.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICMTCCARmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPt+MXCi9+wztEvmdG2EVSk7
+bAiJMXJXW/u0NbcGCrrbhO1NJSHHV3Lks888sqeSPh/bif/ASJ0HX+VarMUoFIKj
+YDBeMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBRjigU5
+REz8Lwf1iD6mALVhsHIanjAfBgNVHSMEGDAWgBSO9SWvHptrhD18gJrJU5xNcvej
+UjANBgkqhkiG9w0BAQsFAAOCAQEAasFD2s0bM5csgXN+iVVFOHstzD70mayWkpIj
+Kb9S2l7yEQ/kCh4jD3nLHuN/aOKi9pcFLfZsqSCKfY5DRpjKFXLRgX3U5UW/+vdQ
+d4Ygyca280c5p8IAjDFvhKCsbFrOAZx3QMqSQFHqAM3G2Pw8ZJVDVRudWSiEY1DV
+8ZtOYy/zV0N3Lpzxf5wGLNfoo8pygV4vjRrcax5DnZV3ZqMRnzA32+R7uNQUO9rd
+q3D85ojh7mtlIos4a7GwkWSLHU7bWanJVaUxrYbi6CUtA4C+u3Qgkx/pitKQraSa
+ZtWxZAg2GV0XedBgBPQ4TlTggnXwP8kptaqjz+pA5BBOUh7iOQ==
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-cert-md5-any.pem b/test/certs/ca-cert-md5-any.pem
new file mode 100644
index 000000000000..c4c1d6af9f84
--- /dev/null
+++ b/test/certs/ca-cert-md5-any.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC/DCCAeSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNgMF4wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMA0GCSqGSIb3DQEBBAUAA4IBAQB8mcy5HS7TmJCuoghu+8pB
+WG+sP3GP7Zqo1nkb7DRZsKTzt3sx6XDR4/ZnD4SUTycsGp1YbkDkvc5fV3tXjdPl
+utXd17tkbs6SsNtbyUdUzqVbV7/rzquBG6hAXbF+2lehob33r3ntQpOMb/64+mrd
+9KaWwOMQlfNXH2gqGKnmOPYUAaTOQzxBoro8hodXeTBKYZXx0mFOeCrhNtluyxE8
+VO85zaaVjJ6viuBV7/fPwtgRGHhn5yqzQjLBleGZvL8v9m4vEhYoOrDmw/T78C8o
+XJhJ/4I039ZdPimeyTHv0JtkX2YKs5MATmBv8VwngHQdMbf/yolRCQVfVYATW021
+MAgwBgYEVR0lAA==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ca-cert-md5.pem b/test/certs/ca-cert-md5.pem
new file mode 100644
index 000000000000..5752db101229
--- /dev/null
+++ b/test/certs/ca-cert-md5.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC/DCCAeSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNgMF4wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMA0GCSqGSIb3DQEBBAUAA4IBAQB8mcy5HS7TmJCuoghu+8pB
+WG+sP3GP7Zqo1nkb7DRZsKTzt3sx6XDR4/ZnD4SUTycsGp1YbkDkvc5fV3tXjdPl
+utXd17tkbs6SsNtbyUdUzqVbV7/rzquBG6hAXbF+2lehob33r3ntQpOMb/64+mrd
+9KaWwOMQlfNXH2gqGKnmOPYUAaTOQzxBoro8hodXeTBKYZXx0mFOeCrhNtluyxE8
+VO85zaaVjJ6viuBV7/fPwtgRGHhn5yqzQjLBleGZvL8v9m4vEhYoOrDmw/T78C8o
+XJhJ/4I039ZdPimeyTHv0JtkX2YKs5MATmBv8VwngHQdMbf/yolRCQVfVYATW021
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-cert.pem b/test/certs/ca-cert.pem
new file mode 100644
index 000000000000..58f45bd97af1
--- /dev/null
+++ b/test/certs/ca-cert.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC/DCCAeSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTY1MFoYDzIxMjAxMjEzMjAxNjUwWjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNgMF4wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMA0GCSqGSIb3DQEBCwUAA4IBAQDacg5HHo+yaApPb6mk/SP8
+J3CjQWhRzv91kwsGLnhPgZI4HcspdJgTaznrstiiA1VRjkQ/kwzd29Sftb1kBio0
+pAyblmravufRdojfTgkMnFyRSaj4FHuOQq8lnX3gwlKn5hBtEF6Qd+U79MkpMALa
+cxPdyJs2tgDOpP1jweubOawqsKlxhAjwgdeX0Qp8iUj4BrY0zg4Q5im0mEKo4hij
+49dQQqoWakCejH4QP2+T1urJsRGn9rXk/nkW9daNYaQDyoAPlnhr5oU+pP3+hSec
+Ol83n08VZ8BizTSPkG0J66sZGC5jvsf5rX8YHURv0jNxHcG8QVEmyCwPqfDTI4fz
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-cert2.pem b/test/certs/ca-cert2.pem
new file mode 100644
index 000000000000..6e164cfbbf71
--- /dev/null
+++ b/test/certs/ca-cert2.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC/DCCAeSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTcwNFoYDzIxMjAxMjEzMjAxNzA0WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOsBxQ3RD9TDABcU
+Uddp+r5s2pLcA/IUN8MnH2PoemxgfJUKfWm+t0VR2mFqyiSeym1V1TkDnuhzui1Y
+ftOuiN1qVs0s6xBcU0+S9vWzYIu5SFTkOgB5APYamCLfbDw3xFTQvRs55UfR+yof
+T/sN6Enq6AhptqnJ/eYVX9EuLTDwV55Kptb4gv9JQs6v01aEHzJ9KGlK2zKpS9Am
+E67xNkwPeXwbzDdqXgr2a+aSrZjtHUfOsV5gZwH8XPAY0kFmrwhHIJsYZInsZhFo
+nil/9pMB8gHFU2EHq3LXbs4GUouQoIf+m3OmgeHCI+t7nAfQgU94FJzq+r6p4WxQ
+KI7cotkCAwEAAaNgMF4wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFAFonW/5R1NkYk6W28NxJdMyTlCtMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMA0GCSqGSIb3DQEBCwUAA4IBAQBQk6NQbaZhc8WuyE+dbori
+U4BG8309syKWKVLwYwzhHFic4CfqL8B9zvO7Z7XHgnSTBhR31GkqUrUA2mV8p5js
+45hi4GpuPTJFYammeTBdMJTeHfNrmKaFFnz1QM4zpyE5t8QyhIqQrvQqtONF2niI
+XrM0fzd0UWuTkpSJP6F51+XMoS/KXSoSfyuImIKhJe7M8XXhYe70gQa/TIw9cVko
+K8OTtKnEL9JLz5nIIe0nP9Ib/ejC7OZzwVMCrGqs5m9M4T6rv9vPTtke3fBCk4cZ
+ukAjSY/i44LcEqxa6WOqc5rnWqy4jrglA8gPP300FsR6NgfOttkx93udwCMiL8dH
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-clientAuth.pem b/test/certs/ca-clientAuth.pem
new file mode 100644
index 000000000000..838c70ee32be
--- /dev/null
+++ b/test/certs/ca-clientAuth.pem
@@ -0,0 +1,18 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wDKAKBggrBgEFBQcDAg==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ca-expired.pem b/test/certs/ca-expired.pem
new file mode 100644
index 000000000000..fd82b14a5ce2
--- /dev/null
+++ b/test/certs/ca-expired.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC+jCCAeKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMB4XDTIwMTIxMjIwMTcwNFoXDTIwMTIxMTIwMTcwNFowDTELMAkGA1UEAwwC
+Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWnaQ9AEscX8bL3Y/S
+MbKIFczEhixc4mmLhPSno1PfkeO/UYn78HwQDTutrDVidfV///RuVI8FppIjs59Z
+OdA5GLAQQN5ic4pOsI7f3OfJQSJUhIAIKbw1PIbfMN7dtCT/fmKlwHroKhY/1pfa
+xULbL2lkkcsI11ZaeX8bhEHpTZ13CRCobCkzRMbAVGXm6OPydQVqZJVswPT9JWFu
+SDbwwAMHBdZ85RH9GOhKLdNyDDcoNjExOIXocY3YAknIvBmJxYqxP6I16qqQHGRo
+e69naloGVA9Q4fm09r461M4/Hkx9xncyPqJY7dvddNiSFGqo98s0WJGofBSxfQiz
+TbFHAgMBAAGjYDBeMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
+DgQWBBS0ETPx1+Je91OeICIQT4YGvx/JXjAfBgNVHSMEGDAWgBSO9SWvHptrhD18
+gJrJU5xNcvejUjANBgkqhkiG9w0BAQsFAAOCAQEACUyrkuz/34jLKGBj2m8RWm15
+tyZmjFMNEFi1uqLgo25WtDCgdnXp8N0/lULVKJ+cFcIjzbTXmJQ0LeWYrXB436XH
+ky2DZ/M0WVcduiQvuEF2v2xGDDhvcvLedN5h/mqSaN/lav5OLHiArYTTYJ7cEphg
+gGnoqC4qJ+KYyXAojL9owpUeJ1QsJVrbiA0RUxyQ6P62ZlyZ9fzNLGpQvymJCUqz
+MqaAdcmlJxWvHF/CWJnks9Uu+83jvihuwryWtwj4ZydFzyx9WB0ueZQBAVdwhzjk
+UWwxI5OG7CqtBONjeB63C0X/DDmSmaiQM9n9E0USRgg5r31+lXVotA7r/d8mog==
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-key-768.pem b/test/certs/ca-key-768.pem
new file mode 100644
index 000000000000..7aea5eda13c0
--- /dev/null
+++ b/test/certs/ca-key-768.pem
@@ -0,0 +1,13 @@
+-----BEGIN PRIVATE KEY-----
+MIIB5QIBADANBgkqhkiG9w0BAQEFAASCAc8wggHLAgEAAmEAt8DS3NQPYAI89R/e
+KMz6yzoRNkfHOkUI5FCACwjrsPMW2VfgBA0qj9dQcPDFc75qZLEfbNYnSYSzroMD
+DUx301yY1Q1qEIfaH0edSebDqYeMg4UAV0Zorr6jA4/mvNVJAgMBAAECYQCJAsu3
+QJ9eNQ0CsQpTXdO6aMegs5CHkCX7J1Lx52rl+7uTv4QXQUH1EtS2AbEYhmdGzMFN
+ZlBrg1vDsW/yn02NZzvT6xT/kvzFhQVw1i8B0YyB8wPao3f2ZxPkAfeoAAECMQDa
+6VkNYlHgPOlTtwU1WYUirFczpipQsuk/lIf7B3+rVRUHoAE4nbeIRJgkKZaJEAEC
+MQDW4pYsyN79HEqFpOFlfsrERw3y4hLRXGeHxbfJFdAe7SUfNj28ZI2EPFE0DJhX
+RUkCMA39M2+jhM/rlI2A+Jg8LEHW+YuXZsTZagZiG35zMDlmqn1eQDW5/mx61a4Z
+6kDAAQIwIlbZWtTK1bX0rsC3iEmny4/zSbIZAb37iXXuNcM3nAmXmhJH8Vg8STp+
+W4v7uE6JAjEAwiB9wCVwG4UhvKNQ4Wd2mfJiKZQNF4rL4ID0g+Wk6kX67c7u2hfH
+sSaluw9nM91s
+-----END PRIVATE KEY-----
diff --git a/test/certs/ca-key-ec-explicit.pem b/test/certs/ca-key-ec-explicit.pem
new file mode 100644
index 000000000000..08add31ca5c4
--- /dev/null
+++ b/test/certs/ca-key-ec-explicit.pem
@@ -0,0 +1,10 @@
+-----BEGIN PRIVATE KEY-----
+MIIBeQIBADCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAAB
+AAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA
+///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMV
+AMSdNgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg
+9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8A
+AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBBG0wawIBAQQgdEf20fpuqEZU
+tZ4ORoq4vb5ETV4a6QOl/iGnDQt++/ihRANCAASlXna3kSD/Yol3RA5IicjIxYb9
+UJoCTzb/LsxjlOvIS5OqCTzpqP0p3JrnvLPsbzq7Cf/g0bNlxAGs1iVM5NDc
+-----END PRIVATE KEY-----
diff --git a/test/certs/ca-key-ec-named.pem b/test/certs/ca-key-ec-named.pem
new file mode 100644
index 000000000000..cff7a64e84d1
--- /dev/null
+++ b/test/certs/ca-key-ec-named.pem
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCTrYrMKcyV49+w4B
+TWr2WTZsMM4aFpaYulKAuhiuQ7mhRANCAAT7fjFwovfsM7RL5nRthFUpO2wIiTFy
+V1v7tDW3Bgq624TtTSUhx1dy5LPPPLKnkj4f24n/wEidB1/lWqzFKBSC
+-----END PRIVATE KEY-----
diff --git a/test/certs/ca-key.pem b/test/certs/ca-key.pem
new file mode 100644
index 000000000000..d84dcd23734e
--- /dev/null
+++ b/test/certs/ca-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCWnaQ9AEscX8bL
+3Y/SMbKIFczEhixc4mmLhPSno1PfkeO/UYn78HwQDTutrDVidfV///RuVI8FppIj
+s59ZOdA5GLAQQN5ic4pOsI7f3OfJQSJUhIAIKbw1PIbfMN7dtCT/fmKlwHroKhY/
+1pfaxULbL2lkkcsI11ZaeX8bhEHpTZ13CRCobCkzRMbAVGXm6OPydQVqZJVswPT9
+JWFuSDbwwAMHBdZ85RH9GOhKLdNyDDcoNjExOIXocY3YAknIvBmJxYqxP6I16qqQ
+HGRoe69naloGVA9Q4fm09r461M4/Hkx9xncyPqJY7dvddNiSFGqo98s0WJGofBSx
+fQizTbFHAgMBAAECggEABdXHpiFbx5aiUgWca81HGGSX0UlNcK/I3QHipJf8SN4T
+D7dt/Be+BrUsibbxPoZJY5Mb+iZGgDaK1N1BoChQO9YMBCUvOGs3gYLvlhat2Csw
+1Etp1mcfhoR4yS7Qg5BWGpvf4IILgPEYeZKrwWsBAxLcJ2xKjGYjT1ADr6I5F3u+
+FYN+bvlXxr07GccfS+UHt04oT0dHwxQzFaJj+yqKWGo2IFtPqtr6Sgoh9a+yFYIi
+8a9MigTTt+IyJ55OuC/FHRf1PofprftADFts78k43qxWtrxSrQVdlNXp1lpZOtuR
+7gvB/r3a2byDYxCxYVu98tQuOfW909TdDgPmEJjcAQKBgQDHcTYi+zcGKooN3tfK
+Oc6hnFXAYTNpYp074NfIYB8i10CwbvWta1FDoi3iRqlQFwg+pu12UefZsj21F+aF
+v2eGP33kQ6yiXJQ3j7jam7dY+tZ6xb0dthm+X/INuHp/HbSb1qKFmSO2rmMDQg+e
+Crqts9+t5Xk04ewTgpySLZjvRwKBgQDBU85Ls3s8osre5EmVBRd5qBt6ILnjtdoa
+UxrrrWopRx2q3HsI41VhKFx0PGs6ia0c6+9GFR6wX/Qevj85DADbzHDA5XEZq98q
+8yH4lme2Uj2gOlWqyhDeC/g4S+MsbNoIaUOZbMGg/phyAe20HvtvD7MUhZ/2rkta
+U5UjFpouAQKBgQC/+vU+tQ0hTV94vJKBoiWKIX/V4HrprbhmxCdSRVyTYBpv+09X
+8J7X+MwsLRKb+p/AF1UreOox/sYxhOEsy7MuYf2f9Zi+7VjrJtis7gmOiF5e7er+
+J6UeQSMyG+smY4TQIcptyZy8I59Bqpx36CIMRMJClUqYIgTqPubSOzwkzwKBgENB
+9LNBbc5alFmW8kJ10wTwBx8l44Xk7kvaPbNgUV6q7xdSPTuKW1nBwOhvXJ6w5xj4
+u/WVw2d4+mT3qucd1e6h4Vg6em6D7M/0Zg0lxk8XrXjg0ozoX5XgdCqhvBboh7IF
+bQ8jVvm7mS2QnjHb1X196L9q/YvEd1KlYW0jn+ABAoGBAKwArjjmr3zRhJurujA5
+x/+V28hUf8m8P2NxP5ALaDZagdaMfzjGZo3O3wDv33Cds0P5GMGQYnRXDxcZN/2L
+/453f0uUObRwFepuv9HzuvPgkTRGpcLFiIHCThiKdyBgPKoq39qjbAyWQcfmW8+S
+2k24wuH7oUtLlvf05p4cqfEx
+-----END PRIVATE KEY-----
diff --git a/test/certs/ca-key2.pem b/test/certs/ca-key2.pem
new file mode 100644
index 000000000000..6ddf16f920a3
--- /dev/null
+++ b/test/certs/ca-key2.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDrAcUN0Q/UwwAX
+FFHXafq+bNqS3APyFDfDJx9j6HpsYHyVCn1pvrdFUdphasoknsptVdU5A57oc7ot
+WH7TrojdalbNLOsQXFNPkvb1s2CLuUhU5DoAeQD2Gpgi32w8N8RU0L0bOeVH0fsq
+H0/7DehJ6ugIabapyf3mFV/RLi0w8FeeSqbW+IL/SULOr9NWhB8yfShpStsyqUvQ
+JhOu8TZMD3l8G8w3al4K9mvmkq2Y7R1HzrFeYGcB/FzwGNJBZq8IRyCbGGSJ7GYR
+aJ4pf/aTAfIBxVNhB6ty127OBlKLkKCH/ptzpoHhwiPre5wH0IFPeBSc6vq+qeFs
+UCiO3KLZAgMBAAECggEAWrrGLz1llUjrwf1QU5BRBC/WexiCVXXEyY1TKylYCnt9
+3bS9EpRVAWhGnZGzFUxQ7sFSnr5tHWWAnX0rCeK6aHFjrbcH0bszVudwfQ+R2J/h
+8xRh6EjPPDSsQ9pqWR1WqUAloltJz96bz3ljUZPe+Jq+lnDp2sdnROs/oOzo+Zkz
+ZkesMwX+aR9prRhnT60A0UeQXZyDJFrWMCVnaeO3JUI5RvjZ3xdEgi5jj4AiNUvH
+x1k/CApynTvJN4LTFncc6qfnyNH/BU0521WKOcTVCI7tWioRIhiX369xR9qqgRfL
+woifc3UjW1f66eMRTsIeh+smcoG4WkHvmpknVDG74QKBgQD7lOtCRMZr9gKIEWNy
+pwm1sMS91zuJnaVLEHjIc6Glc9TqDlZOGp5KcAgXA8Tm7TblQXJ+QlGjX6RBdRD6
+XTHbQcyCJ/5rUU+2a6BBga++moBp2ugLSjc/YSTpzVTRC9+Lw1dZ5czrn3exozQj
+1/jxdOUVToOomwhpGHoXxVqv3QKBgQDvIlUbvHxrwE8EmBWYjhYZeOTREmzhWNCo
+6p7zibZPvKyfZxzXSonJ+T1k/pxNlkMg3SuhZozOCdhQtQupauRlrQ4Hzw3Vc6gr
+Dv5Qew/UwxB02zWjG2PhAfDV1KQgZAwC1g1TCWwqQcV52g5p0kdUgKaPte1P336l
+YvwmTduNLQKBgQDutNsQEr+OWmsGfjE07Sb6XRIf6qOULJ9UfPmNgKGkoiYoOphL
+HViJ2ojihXIDhppqplGjWPurHylz7kbAt0KB/om0CYyOeSVAOhhhb1K4cFJdnhZD
++BQ5r8vdhzTt8O0X6K3uH2vzOWjRhMAJLngHalmegNPNW+R8C3x1J42nhQKBgF9s
+q9mtlVjKHL4Qkk2WJWt0uppTZ+9kqZ8+QL+eLIoVGC1j0DZ5IBLgyocKswSi+Zab
+q1V0vqtZcmCCXmz0or+QFxE2pqaOyISmLwWeleqpDGAVOYok2+5l/9zURcpHIiPf
+luGT2P3j0RGW2jmQF7a4v76JMnG1FayZm1UNrJbhAoGAGM8s9YbDW2+DaTbbSQbg
+IBmT+8MLjVczRUmv5Yi8y4z/aEGjsM7032LjFRiR1PUTeAnkKLnII5rdbEo96UDb
+OMv8SAH3G4lhfS+lq2TSy+XjlAAIOkiI9xW6Xo/KakIOepDzORzY74ayrxqjiyQv
+uchNPF6GhCMnLZC9AxZs4Fg=
+-----END PRIVATE KEY-----
diff --git a/test/certs/ca-name2.pem b/test/certs/ca-name2.pem
new file mode 100644
index 000000000000..67f7d2ad15d8
--- /dev/null
+++ b/test/certs/ca-name2.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIC/TCCAeWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTcwNFoYDzIxMjAxMjEzMjAxNzA0WjAOMQwwCgYDVQQD
+DANDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWnaQ9AEscX8bL
+3Y/SMbKIFczEhixc4mmLhPSno1PfkeO/UYn78HwQDTutrDVidfV///RuVI8FppIj
+s59ZOdA5GLAQQN5ic4pOsI7f3OfJQSJUhIAIKbw1PIbfMN7dtCT/fmKlwHroKhY/
+1pfaxULbL2lkkcsI11ZaeX8bhEHpTZ13CRCobCkzRMbAVGXm6OPydQVqZJVswPT9
+JWFuSDbwwAMHBdZ85RH9GOhKLdNyDDcoNjExOIXocY3YAknIvBmJxYqxP6I16qqQ
+HGRoe69naloGVA9Q4fm09r461M4/Hkx9xncyPqJY7dvddNiSFGqo98s0WJGofBSx
+fQizTbFHAgMBAAGjYDBeMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0G
+A1UdDgQWBBS0ETPx1+Je91OeICIQT4YGvx/JXjAfBgNVHSMEGDAWgBSO9SWvHptr
+hD18gJrJU5xNcvejUjANBgkqhkiG9w0BAQsFAAOCAQEAa+4h7d7XCtWfWLes/m+V
+v1bqar9Ed0mlM6X5bT/uneQ29NaGNB63D4IdnzM1ejYozCia9gg+EU59eVAxcM3i
+EdzYV9WD0YOTB0l97daiF00kYKVP3Dvw7DrRdrENdKgTM+FvoHKKSoIBf4zCr6Nm
+ohLUDFbkVzHZPNrm/M9S0AWvXDUn7V/EpuA0+r1eiAMNRNnJrZnrI64ckSuU3qYi
+w6Cp935dm5t+qEJD4JmEgbsS6P1Os9WgpBs6YPb/BBG/i18ualQ2G3oQMNEycxlM
+lCbfTQIj8KJIrX9hNU/zQUnxXb03TB+2JxOkwPoLpfzxI2pbgYP/hDR+L69ooCmk
+zA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-nonbc.pem b/test/certs/ca-nonbc.pem
new file mode 100644
index 000000000000..f52803041470
--- /dev/null
+++ b/test/certs/ca-nonbc.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC6zCCAdOgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTcwNFoYDzIxMjAxMjEzMjAxNzA0WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNPME0wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAsGA1UdDwQEAwIBBjANBgkq
+hkiG9w0BAQsFAAOCAQEAOleg/SyxNbMMGkPd5ZVJgvXixrmwvBF/xjDKLqXPZmPM
+w9SSffDAgi4rf/7NiRPEwkBlNpJmut+c9eiHjojc2R3k4O2JFlDCQW4rBjJGecI2
+DUAFPaR2eJb7aR2PcniB8wwlStuoej3FKVPYegUGhhQwpn9WOWZyEMgy5Zm//kAC
+vFeEapDE/Wpp+SCoZ8WStkZ4URZN4uejbLfwEk+8MF8HXkwynGktzst50nkReWPi
+6fSrbt4O2n8l1ThhhxMLEY6ZvBgwL4h4RP+IojKiK1E0lW42UTy13toR9JRJj5G8
+DAZbYsq6aXwdu6E58/EQVQ4yIFd8iEiU+da+AGdYGw==
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-nonca.pem b/test/certs/ca-nonca.pem
new file mode 100644
index 000000000000..239cd64ead6d
--- /dev/null
+++ b/test/certs/ca-nonca.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDDTCCAfWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTcwNFoYDzIxMjAxMjEzMjAxNzA0WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNxMG8wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAkGA1UdEwQCMAAwEwYDVR0l
+BAwwCgYIKwYBBQUHAwEwDQYDVR0RBAYwBIICQ0EwDQYJKoZIhvcNAQELBQADggEB
+AGMZ+jXtPoEaGGj3vBOxw4Uf9h8G5PWIZOqV8EGdJkPVWSUJ7NM12vqTN8Lfv7UO
++gv1VJL02UO1UWrvDcid37XWBbVLwSjk963se+S8Xzd+I2FQY8+Yy4m5VN6m6Krc
+pZt64zsgYROre5yP3gWIvzNa8Ayk/1nmQX1ADAe2tQJeWHROFBim0K3FcjIrhqZ8
+3MUAVJ5Nt3THrVrt3ojIWBOatBJHv+Q2Ii52UZVKG5HMGogRuMjFQy/mwshcBQSz
+pxAWfqT2oVmP+K/iBGxikYjtrOOYNW8L8RwShU3j1dFulQZb2SLRRj8/eDBSV++6
+KsEzVayX0uF80Hohuxbq7OA=
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-pol-cert.pem b/test/certs/ca-pol-cert.pem
new file mode 100644
index 000000000000..244af3292b21
--- /dev/null
+++ b/test/certs/ca-pol-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDFzCCAf+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIzMDMwODEyMjMxNloYDzIxMjMwMzA5MTIyMzE2WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN7MHkwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBkGA1UdIAQSMBAwDgYMKwYBBAGBgVy8+0cBMA0GCSqGSIb3
+DQEBCwUAA4IBAQBbE+MO9mewWIUY2kt85yhl0oZtvVxbn9K2Hty59ItwJGRNfzx7
+Ge7KgawkvNzMOXmj6qf8TpbJnf41ZLWdRyVZBVyIwrAKIVw1VxfGh8aEifHKN97H
+unZkBPcUkAhUJSiC1BOD/euaMYqOi8QwiI702Q6q1NBY1/UKnV/ZIBLecnqfj9vZ
+7T0wKxrwGYBztP4pNcxCmBoD9Dg+Dx3ZElo0WXyO4SOh/BgrsKJHKyhbuTpjrI/g
+DhcINRp6+lIzuFBtJ67+YXnAEspb3lKMk0YL/LXrCNF2scdmNfOPwHi+OKBqt69C
+9FJyWFEMxx2qm/ENE9sbOswgJRnKkaAqHBHx
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-pss-cert.pem b/test/certs/ca-pss-cert.pem
new file mode 100644
index 000000000000..566b63a800f7
--- /dev/null
+++ b/test/certs/ca-pss-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDXjCCAhagAwIBAgIBAjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEa
+MBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIDASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIxMDEyNjEwMDUwOFoYDzIxMjEwMTI3MTAwNTA4WjARMQ8wDQYDVQQD
+DAZDQS1QU1MwggEgMAsGCSqGSIb3DQEBCgOCAQ8AMIIBCgKCAQEAtclsFtJOQgAC
+ZxTPn2T2ksmibRNVAnEfVCgfJxsPN3aEERgqqhWbC4LmGHRIIjQ9DpobarydJivw
+epDaiu11rgwXgenIobIVvVr2+L3ngalYdkwmmPVImNN8Ef575ybE/kVgTu9X37DJ
+t+8psfVGeFg4RKykOi7SfPCSKHKSeZUXPj9AYwZDw4HX2rhstRopXAmUzz2/uAaR
+fmU7tYOG5qhfMUpP+Ce0ZBlLE9JjasY+d20/mDFuvFEc5qjfzNqv/7okyBjaWB4h
+gwnjXASrqKlqHKVU1UyrJc76yAniimy+IoXKAELetIJGSN15GYaWJcAIs0Eybjyk
+gyAu7Zlf/wIDAQABo2AwXjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAd
+BgNVHQ4EFgQUGfmhA/VcxWkh7VUBHxUdHHQLgrAwHwYDVR0jBBgwFoAUjvUlrx6b
+a4Q9fICayVOcTXL3o1IwPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAY
+BgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCASADggEBAF6rSSBj+dkv0UGuE1El
+lB9zVpqVlV72RY8gAkmSJmbzblHEO/PYV/UnNJ2C2IXEhAQaE0xKCg+WC2RO56oc
+qZc6UXBCN8G9rJKVxgXVbciP4pQYN6POpmhJfQqzNPwzTADt3HY6X9gQtyG0fuQF
+OPDc+mXjRvBrcYMkAgYiKe+oA45WDWYpIvipWVQ3xP/BSGJqrdKx5SOrJA72+BLM
+bPbD3tBC2SVirDjv0N926Wcb/JQFkM+5YY2/yKNybstngr4Pb1T/tESsIZvGG2Tk
+3IhBl1dJtC9gpGTRa8NzQvcmPK9VUjWtv5YNA+FxD9FTxGibh7Aw1fbFCV91Qjc3
+JQQ=
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-pss-key.pem b/test/certs/ca-pss-key.pem
new file mode 100644
index 000000000000..9270c3648447
--- /dev/null
+++ b/test/certs/ca-pss-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADALBgkqhkiG9w0BAQoEggSpMIIEpQIBAAKCAQEAtclsFtJOQgACZxTP
+n2T2ksmibRNVAnEfVCgfJxsPN3aEERgqqhWbC4LmGHRIIjQ9DpobarydJivwepDa
+iu11rgwXgenIobIVvVr2+L3ngalYdkwmmPVImNN8Ef575ybE/kVgTu9X37DJt+8p
+sfVGeFg4RKykOi7SfPCSKHKSeZUXPj9AYwZDw4HX2rhstRopXAmUzz2/uAaRfmU7
+tYOG5qhfMUpP+Ce0ZBlLE9JjasY+d20/mDFuvFEc5qjfzNqv/7okyBjaWB4hgwnj
+XASrqKlqHKVU1UyrJc76yAniimy+IoXKAELetIJGSN15GYaWJcAIs0EybjykgyAu
+7Zlf/wIDAQABAoIBAErkiNt+GS+nwVWmhUMt3UfsOjal2EgBQt7xCKSbyVEYSqCg
+TDN2Y0IC07kPbwhobR8u7kyzGCs5vwE/3EmQOwNRh/3FyxqSu9IfP9CKrG4GzqMu
+DFjH9PjBaEQhi/pXRqFbA6qBgLpvoytcJNlkK3w5HDVuytoNoDpJAm4XhbEAwVG2
+u3De40lPKXBFaGjSrUQETnrm0Fhj+J7+VMheQZVjEHwMIOmbIDcckV0OSIWn00XG
+/Md0y0i/U8S0TkP9sVC+cKkKMCNL+BJYf5YucUIna/9PgBD36RRRq2D0e8/iP8m+
+ftnmW7fxlL2neTZ2sAS+4sm7sOoudaeAta+JoEECgYEA5ZjbBJf+FhyFOBFRoYow
+OHP+JfU7rdi8n5GpNswVmtNx3FK+eoUz+PlXTluUydS3L40ba7/mzYFzAZETF6YO
+Z8STkmvLxRTDzvZoE0SCJQAcG9I1oVWMufDVnHvljflH+IBjvMQM527dfFgaebvD
+TkRvnCup2oV3uT430++15K0CgYEAyrESfgP5f9+zZqz30N+QTWHZCzCUqSDcGhke
+Irvjs5tSrCQibbSGkGNHZ/V019K8rKJQlvNbEEzlRRcohuqIuUPgPmXBbbruqCBP
+a1+DD/HRg6BrTsNo67SbUJ6EsV5D80Ie76Yzye3By7E71xvFzFxbMwcwPFHBDViR
+m4oRwNsCgYEAtdb/N78tVNPXytUkot0wXbW4RtXYI1Lx6StTKnwubEYk+otqIt1W
+kUzhkcTEralUQEvwuMDvCjoJHOeKiINTC2pMOn43j+pnPoY3XXM35BgXKw2svg9k
+emu8ssgJwgz5rF37ICjh03Yh4vZgWaOVBmr7PmPyjYiBjuwxCSDkHa0CgYEAkqwP
+9aBqq131NBd2PG+KvHRR2wcMjFZ672e9puTPoOiEqox7XWeE+Hbe9RtpscONRF8w
+cgsnmmQKhDR93yNYTLgRTRXVItJiYMcAsXIsJR2XvugWvqgpBGds/Km426CbCyyN
+tl1OnJCv6/YUl1RBjeBHHmXVQdDnIgE1XJhMwIECgYEAt4zgPqswoicfDBqakP6X
+ZND0s7fiki2YBmXyASIoUACnpJEWsOOEJrAcW7xtgXgjNxKdk1JqYV3ggU8wgCvv
+9Ugsx0FiuPmIBhYNZMWIItNmpYqPm8KbEwIPqChs9OA+5FREFwFjJgGK2ublfmVj
+dN2I3LilMIXTE4/MQ8Lhcjc=
+-----END PRIVATE KEY-----
diff --git a/test/certs/ca-root2.pem b/test/certs/ca-root2.pem
new file mode 100644
index 000000000000..05e478bcf040
--- /dev/null
+++ b/test/certs/ca-root2.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC/DCCAeSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTcwNFoYDzIxMjAxMjEzMjAxNzA0WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNgMF4wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFJzOZkIwqxwI
+Jl9zGW3fD6euWFIeMA0GCSqGSIb3DQEBCwUAA4IBAQArn3lUKgZl1GzvnQy2g4cI
+1BDeh7nSDu9ry5qIG1VDPFstL4zCe7L3ANI95QwXDgCH5Pfn+4G4h+AuL6qTmMcB
+Xhp04tz5G2dcS3F7NJCNkmgCf34GGi0+OPxyE29hhab+gtEbT/ZMxQuiKtIagYf4
+ZfWLKHzI2WmCEiPplATqQ1jJjO9SpdLMkYo9o+hCt4cVUSY5T5GujmnA8bLELy/Z
+EUF3bT3sIHQG3UIkTgDRvnP2ORlLoJwVNqGHYbrtpq8TzzxZ+2UIQk89KQSBWcVW
+PO5xmW7+rEEbuJjgBu1lCgDMmYA6E8eGe/6pVVF6s3WlrvH3OGaOOPNNkr7Yh222
+-----END CERTIFICATE-----
diff --git a/test/certs/ca-serverAuth.pem b/test/certs/ca-serverAuth.pem
new file mode 100644
index 000000000000..f10155d99a2d
--- /dev/null
+++ b/test/certs/ca-serverAuth.pem
@@ -0,0 +1,18 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wDKAKBggrBgEFBQcDAQ==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/cca+anyEKU.pem b/test/certs/cca+anyEKU.pem
new file mode 100644
index 000000000000..fc671d40ab4e
--- /dev/null
+++ b/test/certs/cca+anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUA
+A4IBAQBgOqmevOO5WbDV6ZbDKzceW6xPukiq13Z0DU0moC5rF01ayrLL/GFFNndP
+YZYCppu6PTwp3UYgAFw6VN+2Hv6fWCwu2rsWLcqkJIJPkmjYATZJU2RkWrRpn23D
+SWwnam7i+uiJpot8uKhOCIQtrCtP+0Q8lG+6reWHpaNRU3Gcsrc+I98wyWhsx5jd
+fiLl1Cgb5G7Xz3Ff1ObdR6JdP4Wc9krj3Czbjv3oYFZ2p8LPgui+C7XDb4RBxGUu
+c4mETHtGSRoX6n25uEXvIia2KCcS44VfA6wYaZtO/Lq7FmJI0QwI8tsm7FG6ccj+
+y54iNhHRG7FCAXOLy2RBrEwQddq5MAgwBgYEVR0lAA==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/cca+clientAuth.pem b/test/certs/cca+clientAuth.pem
new file mode 100644
index 000000000000..0f31101ff4bf
--- /dev/null
+++ b/test/certs/cca+clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUA
+A4IBAQBgOqmevOO5WbDV6ZbDKzceW6xPukiq13Z0DU0moC5rF01ayrLL/GFFNndP
+YZYCppu6PTwp3UYgAFw6VN+2Hv6fWCwu2rsWLcqkJIJPkmjYATZJU2RkWrRpn23D
+SWwnam7i+uiJpot8uKhOCIQtrCtP+0Q8lG+6reWHpaNRU3Gcsrc+I98wyWhsx5jd
+fiLl1Cgb5G7Xz3Ff1ObdR6JdP4Wc9krj3Czbjv3oYFZ2p8LPgui+C7XDb4RBxGUu
+c4mETHtGSRoX6n25uEXvIia2KCcS44VfA6wYaZtO/Lq7FmJI0QwI8tsm7FG6ccj+
+y54iNhHRG7FCAXOLy2RBrEwQddq5MAwwCgYIKwYBBQUHAwI=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/cca+serverAuth.pem b/test/certs/cca+serverAuth.pem
new file mode 100644
index 000000000000..a0e0e2e5fef3
--- /dev/null
+++ b/test/certs/cca+serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUA
+A4IBAQBgOqmevOO5WbDV6ZbDKzceW6xPukiq13Z0DU0moC5rF01ayrLL/GFFNndP
+YZYCppu6PTwp3UYgAFw6VN+2Hv6fWCwu2rsWLcqkJIJPkmjYATZJU2RkWrRpn23D
+SWwnam7i+uiJpot8uKhOCIQtrCtP+0Q8lG+6reWHpaNRU3Gcsrc+I98wyWhsx5jd
+fiLl1Cgb5G7Xz3Ff1ObdR6JdP4Wc9krj3Czbjv3oYFZ2p8LPgui+C7XDb4RBxGUu
+c4mETHtGSRoX6n25uEXvIia2KCcS44VfA6wYaZtO/Lq7FmJI0QwI8tsm7FG6ccj+
+y54iNhHRG7FCAXOLy2RBrEwQddq5MAwwCgYIKwYBBQUHAwE=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/cca-anyEKU.pem b/test/certs/cca-anyEKU.pem
new file mode 100644
index 000000000000..66be5f6814b0
--- /dev/null
+++ b/test/certs/cca-anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUA
+A4IBAQBgOqmevOO5WbDV6ZbDKzceW6xPukiq13Z0DU0moC5rF01ayrLL/GFFNndP
+YZYCppu6PTwp3UYgAFw6VN+2Hv6fWCwu2rsWLcqkJIJPkmjYATZJU2RkWrRpn23D
+SWwnam7i+uiJpot8uKhOCIQtrCtP+0Q8lG+6reWHpaNRU3Gcsrc+I98wyWhsx5jd
+fiLl1Cgb5G7Xz3Ff1ObdR6JdP4Wc9krj3Czbjv3oYFZ2p8LPgui+C7XDb4RBxGUu
+c4mETHtGSRoX6n25uEXvIia2KCcS44VfA6wYaZtO/Lq7FmJI0QwI8tsm7FG6ccj+
+y54iNhHRG7FCAXOLy2RBrEwQddq5MAigBgYEVR0lAA==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/cca-cert.pem b/test/certs/cca-cert.pem
new file mode 100644
index 000000000000..09a114946efd
--- /dev/null
+++ b/test/certs/cca-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUA
+A4IBAQBgOqmevOO5WbDV6ZbDKzceW6xPukiq13Z0DU0moC5rF01ayrLL/GFFNndP
+YZYCppu6PTwp3UYgAFw6VN+2Hv6fWCwu2rsWLcqkJIJPkmjYATZJU2RkWrRpn23D
+SWwnam7i+uiJpot8uKhOCIQtrCtP+0Q8lG+6reWHpaNRU3Gcsrc+I98wyWhsx5jd
+fiLl1Cgb5G7Xz3Ff1ObdR6JdP4Wc9krj3Czbjv3oYFZ2p8LPgui+C7XDb4RBxGUu
+c4mETHtGSRoX6n25uEXvIia2KCcS44VfA6wYaZtO/Lq7FmJI0QwI8tsm7FG6ccj+
+y54iNhHRG7FCAXOLy2RBrEwQddq5
+-----END CERTIFICATE-----
diff --git a/test/certs/cca-clientAuth.pem b/test/certs/cca-clientAuth.pem
new file mode 100644
index 000000000000..5e44dce78702
--- /dev/null
+++ b/test/certs/cca-clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUA
+A4IBAQBgOqmevOO5WbDV6ZbDKzceW6xPukiq13Z0DU0moC5rF01ayrLL/GFFNndP
+YZYCppu6PTwp3UYgAFw6VN+2Hv6fWCwu2rsWLcqkJIJPkmjYATZJU2RkWrRpn23D
+SWwnam7i+uiJpot8uKhOCIQtrCtP+0Q8lG+6reWHpaNRU3Gcsrc+I98wyWhsx5jd
+fiLl1Cgb5G7Xz3Ff1ObdR6JdP4Wc9krj3Czbjv3oYFZ2p8LPgui+C7XDb4RBxGUu
+c4mETHtGSRoX6n25uEXvIia2KCcS44VfA6wYaZtO/Lq7FmJI0QwI8tsm7FG6ccj+
+y54iNhHRG7FCAXOLy2RBrEwQddq5MAygCgYIKwYBBQUHAwI=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/cca-serverAuth.pem b/test/certs/cca-serverAuth.pem
new file mode 100644
index 000000000000..828c6e225b2b
--- /dev/null
+++ b/test/certs/cca-serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUA
+A4IBAQBgOqmevOO5WbDV6ZbDKzceW6xPukiq13Z0DU0moC5rF01ayrLL/GFFNndP
+YZYCppu6PTwp3UYgAFw6VN+2Hv6fWCwu2rsWLcqkJIJPkmjYATZJU2RkWrRpn23D
+SWwnam7i+uiJpot8uKhOCIQtrCtP+0Q8lG+6reWHpaNRU3Gcsrc+I98wyWhsx5jd
+fiLl1Cgb5G7Xz3Ff1ObdR6JdP4Wc9krj3Czbjv3oYFZ2p8LPgui+C7XDb4RBxGUu
+c4mETHtGSRoX6n25uEXvIia2KCcS44VfA6wYaZtO/Lq7FmJI0QwI8tsm7FG6ccj+
+y54iNhHRG7FCAXOLy2RBrEwQddq5MAygCgYIKwYBBQUHAwE=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/cert-key-cert.pem b/test/certs/cert-key-cert.pem
new file mode 100644
index 000000000000..bf6fd9c34b93
--- /dev/null
+++ b/test/certs/cert-key-cert.pem
@@ -0,0 +1,90 @@
+Some garbage at the beginning
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
+Some garbage in the middle
+And more
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7MOIrqH+ZIJiZ
+droKMrelKMSvvRKg2MEgj/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN
+2SLr1ZsPftCHIY12LF560WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8S
+JSqUskf03MpcwnLbVfSphwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev
+/Ccmqqt81NFkb1WVejvN5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzW
+qF77u/crHufIhoEa7NkZhSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2I
+GLDLoA0XAgMBAAECggEAcEBMIGoWuji1ybFMtrjbL4tXBxuWhCX3ChPNSpQFctmN
+Cba7+c4GTIqaHG9cHcJ8dCgCZjpGdNYKXZKMQmgBaDVfzujr76WDsprFb3hsCbkE
+YRJ/mIa5cTH7ySaGoLf+5/lDJxcmWqiT/YmUEz8lr0yHfUCNp8HPyalUvYKafbos
+5BiXs8lr4XQ/vxL0CtVQx+5T8pmgU6CmP1jjgBqV4Y9RPewSmPNhxKAqm82JYMND
+9evNHNpZmDpwTMygwwL0oJ0DV0nq0uqzuk1ORcp7YIph7IFGcdi4n7Y4Y2U6B8Ok
+ITY684qpcXgy+qO1A8AwDEJ34wiIWb8Mi8S84KdTIQKBgQDhHmCdpWKzwLETlHQR
+V9wT3ulySmxG0t8kSgNOFRVUZNXQ0ij2v8rOJ7R0QzJ+kCqvdxJ5QHNlUFKkOFMA
+SnSy098iEz5skwRhHof7ZNa3U6oRRSauUcZcThWL+z14nhTIC1m99KpACV6fl3jj
+MVEYYpG6n7jZ0wKUGMStxT1q9QKBgQDU3pOgNLnFasMIujvXI3ARSK6xIpkBTq89
+n6pmn9XeMWs/H6wQRO5wpUXbg+/3/d4tnezrDG9Lg5aPV8ca/zJ7IP8iNyLnhiUY
+c9O6hKAW1fxddt9megzBDvsBgRzhytnv3OSpM+idgtsJ7Tvkevmt4K5j6gitpJpb
+1A1erknoWwKBgCM5zKZ+bZ5xBYRp02uvUtmtJNxkduLyNkaIalH6jJbjHG4LpKtP
+wZ1Wqy8SIMGbL4K7YCGnCyeMVRIrWhmOjQo6iwza9AarTqEf1OlqkwqmxdLj/jSC
+yUZCVa7MxoasPdY7qHRH56gTj0HrwtfSLL1jFyibu6IiGaIw6f3DAmRNAoGAL2sx
+iYOVSnPg5GXQBLnBMih1ucHSQadMhDa4F8pNMwThNhuREcK5NuCqMh8u6phj0NeY
+Ojf35uN2O5I7KTll/mW4T9/mZ5rLUqoipS78FnoukId1dneDtdHnektPqsCsUbFs
+QoDstYG713dAW0JFskUVs+4jZsL/G6ueGtRKZHcCgYEA27sBEJtHGLAgEUGSlwSA
+acmaIlKpF3EMImgWhlzRN3JC7+z8HJAhoHTxQUdnWfJt2Xl4Z+WmXvv+E7U9ofH7
+kH8fbLcaxwvylPm4hAMlhtL3EqnRDSL4hfZHBrqqf3C0Kv+C8naNxzeCNG6iHxcp
+3c7vY4BXTz0dGBGHml6qu5Y=
+-----END PRIVATE KEY-----
+More garbage in the middle
+And more
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
+Some garbage at the end
diff --git a/test/certs/client-ed25519-cert.pem b/test/certs/client-ed25519-cert.pem
new file mode 100644
index 000000000000..5cd01f669af8
--- /dev/null
+++ b/test/certs/client-ed25519-cert.pem
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIICJjCCAQ6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNzA2MTgxNjMzMjBaGA8yMTE3MDYxOTE2MzMyMFowGTEXMBUGA1UEAwwOQ2xp
+ZW50LUVkMjU1MTkwKjAFBgMrZXADIQDWm1IkIasMcyVYSiKuFl6zZMRM4x7h/Qbf
+fmpdgcM8/6N9MHswHQYDVR0OBBYEFDAIOfJie9HYZehOjFLE+amS8RH7MB8GA1Ud
+IwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwIwGQYDVR0RBBIwEIIOQ2xpZW50LUVkMjU1MTkwDQYJKoZIhvcN
+AQELBQADggEBAFvF2AWOELLBafWwmemtFALQcJbXndS8QyBAkBSPwIp6Q8Oledeh
+gynamdc+66c5Ozdl4lNknXPGVGcNaW0RmlkqcqSMksuL11OGba0iIZkiUU2QPA07
+BRunnV4/pgFsy0ewYKEdaSplyfoBoIJwuxPHL1ExlzAmhSYWYYOFMgD302Be4dXr
+pm0c4hj1XcJmtsD5wBcBCRrvOj+uCdqIwtWgdwo6poqzsO1AofuAgsjE9WWyi/NQ
+ule8nVKIVbwVFP8/dI240v0RF1VLyE+8lPf2nYuFAXbzL/8MRwJeeFVIYNiy+51B
+10ZVx5WtbbMjbr7e+xSU5jIAPZQS0r/4M8U=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4=
+-----END CERTIFICATE-----
diff --git a/test/certs/client-ed25519-key.pem b/test/certs/client-ed25519-key.pem
new file mode 100644
index 000000000000..3f673b311bb8
--- /dev/null
+++ b/test/certs/client-ed25519-key.pem
@@ -0,0 +1,3 @@
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEINZzpIpIiXXsKx4M7mUr2cb+DMfgHyu2msRAgNa5CxJJ
+-----END PRIVATE KEY-----
diff --git a/test/certs/client-ed448-cert.pem b/test/certs/client-ed448-cert.pem
new file mode 100644
index 000000000000..3d6d5e87c975
--- /dev/null
+++ b/test/certs/client-ed448-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICQDCCASigAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE4MDIyNzE3MTAxN1oYDzIxMTgwMjI4MTcxMDE3WjAXMRUwEwYDVQQD
+DAxDbGllbnQtRWQ0NDgwQzAFBgMrZXEDOgB4bFbdmw9IviAHXKt/2/hRDaiEr6JH
+bsLr3IPNQq3XIYxYh4AIPx3YffYW3xukHDGWTQ50dptQiwCjezB5MB0GA1UdDgQW
+BBTEno3ezhmTYZzGdD65nVRMp3f2hzAfBgNVHSMEGDAWgBSO9SWvHptrhD18gJrJ
+U5xNcvejUjAJBgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMBcGA1UdEQQQ
+MA6CDENsaWVudC1FZDQ0ODANBgkqhkiG9w0BAQsFAAOCAQEAP2/y30iko57i8lUY
+ju9Vb4V0TCATKa+HNnzHG1jyWAgiWpPtHe269Cnb8AvdwWKVeppKkG6LeWHo3btP
+LOd8xEFhnklM4rPkxMYMCQ0lcw2xagbw3CW12mLs15N3QCjxSnA/kuuftzor9fRl
+gzazVh4Kf/jXtlRyBI6R4+bXSGgKhIipdBF5xWmTPvZBViWKxgysQuP1bNzw9AC4
+QMGm4ApOVuY9iE8dPYKgJUVGWc3d9l23fkd422kEgz5euK66HovjYaBj0S0kZhEZ
+tWUCRTcv4k40ke2jr8/Zm3Ugab09XWU2T98k/OvXu+Y0AlLMZp2ehC6wXObprEXv
+dY5URg==
+-----END CERTIFICATE-----
diff --git a/test/certs/client-ed448-key.pem b/test/certs/client-ed448-key.pem
new file mode 100644
index 000000000000..ab4d7ff3de29
--- /dev/null
+++ b/test/certs/client-ed448-key.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOWmRn7GCRupyB1q/qQZ+h1lEt+TGtZSNJ5U+Saa+X+hk
+gWpeKJP9MTpw7kdMAeAhb6XlhCANH2zV9A==
+-----END PRIVATE KEY-----
diff --git a/test/certs/croot+anyEKU.pem b/test/certs/croot+anyEKU.pem
new file mode 100644
index 000000000000..88ce120df03b
--- /dev/null
+++ b/test/certs/croot+anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
+bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
+6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
+32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
+XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
+tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
+4PR8O0S5WC0PlzAIMAYGBFUdJQA=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/croot+clientAuth.pem b/test/certs/croot+clientAuth.pem
new file mode 100644
index 000000000000..aa45a06ba138
--- /dev/null
+++ b/test/certs/croot+clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
+bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
+6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
+32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
+XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
+tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
+4PR8O0S5WC0PlzAMMAoGCCsGAQUFBwMC
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/croot+serverAuth.pem b/test/certs/croot+serverAuth.pem
new file mode 100644
index 000000000000..35647691e206
--- /dev/null
+++ b/test/certs/croot+serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
+bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
+6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
+32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
+XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
+tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
+4PR8O0S5WC0PlzAMMAoGCCsGAQUFBwMB
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/croot-anyEKU.pem b/test/certs/croot-anyEKU.pem
new file mode 100644
index 000000000000..50fffbfee5da
--- /dev/null
+++ b/test/certs/croot-anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
+bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
+6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
+32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
+XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
+tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
+4PR8O0S5WC0PlzAIoAYGBFUdJQA=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/croot-cert.pem b/test/certs/croot-cert.pem
new file mode 100644
index 000000000000..33a605896ac6
--- /dev/null
+++ b/test/certs/croot-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDFjCCAf6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTEyOFoYDzIxMjAxMjEzMjAxMTI4WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo3UwczAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB
+BjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3o1IwHwYDVR0jBBgwFoAUjvUl
+rx6ba4Q9fICayVOcTXL3o1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcN
+AQELBQADggEBANnzv3Vd0oYUdxlq9EkvGguR3/GNF1S6mDz3MiAyadXNGiJ6Fx3U
+cJulbeqGpr5B4o5ynMVnvKfRrmulaOzUMOpZDlgF/U55bXKUNuOdUpESOg0szlek
+KBf1xf3A5MDHD68lxKNt4NMaW+KmStQjr/Ahr/xF7xKtQCj+B7WcDibKBKLPICSf
+PjqjV+CnkD/Q4E1pUpZ2rM+MPRDX8/5X9pg2UhoD0iEd5BubT+YvhLlHHRERtHUx
+yRysl7uNzcSBe2WHPTcVdOowNKsymgeuoN63WmkiY2Oy4wn9Nu3w3CcIDm/wZBVX
+LUdqS+uGmu2lMbIVjMWrdDkBq8ePVy0ezb8=
+-----END CERTIFICATE-----
diff --git a/test/certs/croot-clientAuth.pem b/test/certs/croot-clientAuth.pem
new file mode 100644
index 000000000000..78456413e894
--- /dev/null
+++ b/test/certs/croot-clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
+bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
+6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
+32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
+XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
+tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
+4PR8O0S5WC0PlzAMoAoGCCsGAQUFBwMC
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/croot-serverAuth.pem b/test/certs/croot-serverAuth.pem
new file mode 100644
index 000000000000..7e4ffa7d6921
--- /dev/null
+++ b/test/certs/croot-serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
+bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
+6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
+32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
+XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
+tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
+4PR8O0S5WC0PlzAMoAoGCCsGAQUFBwMB
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/cross-key.pem b/test/certs/cross-key.pem
new file mode 100644
index 000000000000..93cd467ac702
--- /dev/null
+++ b/test/certs/cross-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCSkfwkYXTJFL4I
+ICRQFXji6eX9I1NI97GBu2Yk8ejwctMttcJTlBLYpYRFQnZgsLwVEhA25KKlSNPz
+PPrEVipT5Ll5J6uhWEBGLHETh8Qx4sI508B2zUP+2tnDapYtk5MNSVdQZXVt6wJu
+sXY8vd58nHPLo4zr61MTwrj3Ld0lU18YHtxnGSMMYPPTxecE0mjYU038ELxZMdlT
++VSC0KOBJddj64+kXRdiDtQGVWE58MtX5/18LgSY3J/hvNhmcWuY611pgXcmwDPr
+Sn1fDeRqG87Qs8KniS1dtWHDCVW/5KZOQeLcK6VTaEdnwdPYQ7BiJp4+3ypKmErd
+T9TYBs8XAgMBAAECggEABIxdeGpm8DjGRgSQLjLg88CNPWG89sBrQk0SbvQ1HJfq
+dJXRDxgMFtBsFTfX6kla3xfyHpQ/dY4qJZvmQNBXIQ/oiqumw9Ah153qlGJJmXdG
+PEQDEz7+2lExawwmjgk6Uvs58LMHmCNUibUdzHgsdZcwudq8R6FWZ8lvIIo6GOJg
+1gOoPbeAQtNAx8LPr+eDvpXoWJrCKJKuZCSRLV2CDmEH/+KH123cD4Lg+MsPNBJd
+DsOitnVczlqnKDf5gSUXy3cwQlKFtOBa/0pN9wZvZDEWa30RmJmXI2bLo/h6GxGB
+JXK57mTJG3UboWFIgNBU9IudPOdzDfJE1ul/Jon/AQKBgQC7/mmZg31a/8zlPLji
+oWoEEutyNu0O28BCbBrw9t1SqtPFLm53AzIzB4RFVjn9i5dnxljh618KQiY4FbKM
+mz1Yuzf7zCV7n8c1NakGwmW9Ezl8ZoLE44Nu7Pccukorl6uEY7kZa2vGa7krmIcI
+6kFbvVbl4scbXlDL88hGHezhoQKBgQDHl3O8kOvOhIwfVH6qIjIO+0oR57Tqtwaw
+A3oq6Ppdp65GK9G4f+/5L0z/Ay69MyauBLRA6+9LlW6SmAACSK69juvPMK6gd5uS
+yWQ8imh6l304BAryjOHiNXHtpnmiaPAGNgFZKPsPbWlOo4ZexTEBq23i4JM1TUph
+xpCmGY1ltwKBgEuYyPo0iAo55zkfq/Fmm2079nYdZEKfV7beJg9UFjgR/crDGyS8
+okkm8qe3PuaYZbATcNaYgcVsSFYxU3V7T7YIw0B8HW6TF9Zr16aiMatQucMurdNi
+8g1/OPfSadURzqUUPPDd458M3o+LbHHHUbUEdJdJFGwLB06cn6KikglBAoGAMz8M
+xV7EXOsleynbt9090yDsPLqsdhN2UR0jcf8NwZw7H+NCXsfimq1tbJCpoISQqt+k
+VIL/lv2QPW1vmyaET0FyBGmwfJ0ZQdAZv32eI9Pfn9FR6kMIAGfOj8FNu8iL0Fxv
+bjAafjSOdFWCO7UPxyj39ufIhEgLEB3GqA8pgfMCgYEAn/1Ov1Lu4MWq+72LygqG
+78rxk6rIGGET64grG1CSjkylQ9mo14jG6O1lM4fwTjlbGQrKGtzQtL785dW+t5uH
+zC2lDRDp8of+ErC31e+N4YDMdUHWeRBgHDYgsx4EgI0jNb02/UlziL1eARBpnfz6
+tw1erVdMmlA3LRBR5Mj+xso=
+-----END PRIVATE KEY-----
diff --git a/test/certs/cross-root.pem b/test/certs/cross-root.pem
new file mode 100644
index 000000000000..dca5b10b91fa
--- /dev/null
+++ b/test/certs/cross-root.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC+jCCAeKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApDcm9z
+cyBSb290MCAXDTIxMDgzMDE4MzMyNloYDzIxMjEwODMxMTgzMzI2WjAVMRMwEQYD
+VQQDDApDcm9zcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+kpH8JGF0yRS+CCAkUBV44unl/SNTSPexgbtmJPHo8HLTLbXCU5QS2KWERUJ2YLC8
+FRIQNuSipUjT8zz6xFYqU+S5eSeroVhARixxE4fEMeLCOdPAds1D/trZw2qWLZOT
+DUlXUGV1besCbrF2PL3efJxzy6OM6+tTE8K49y3dJVNfGB7cZxkjDGDz08XnBNJo
+2FNN/BC8WTHZU/lUgtCjgSXXY+uPpF0XYg7UBlVhOfDLV+f9fC4EmNyf4bzYZnFr
+mOtdaYF3JsAz60p9Xw3kahvO0LPCp4ktXbVhwwlVv+SmTkHi3CulU2hHZ8HT2EOw
+YiaePt8qSphK3U/U2AbPFwIDAQABo1MwUTAdBgNVHQ4EFgQUL16/ihJvr2w9I5k6
+3jjZ13SPW20wHwYDVR0jBBgwFoAUL16/ihJvr2w9I5k63jjZ13SPW20wDwYDVR0T
+AQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAUiqf8oQaPX3aW6I+dcRhsq5g
+bpYF0X5jePk6UqWu86YcmpoRtGLH7e5aHGJYqrVrkOoo0q4eTL3Pm1/sB3omPRMb
+ey/i7Z70wwd5yI8iz/WBmQDahYxq5wSDsUSdZDL0kSyoU2jCwXUPtuC6F1kMZBFI
+uUeaFcF8oKVGuOHvZgj/FMBpT7tyjdPpDG4uo6AT04AKGhf5xO5UY2N+uqmEsXHK
+HsKAEMrVhdeU5mbrfifvSkMYcYgJOX1KFP+t4U+ogqCHy1/Nfhq+WG1XN5GwhtuO
+ze25NqI6ZvA2og4AoeIzvJ/+Nfl5PNtClm0IjbGvR77oOBMs71lO4GjUYj9eiw==
+-----END CERTIFICATE-----
diff --git a/test/certs/ct-server-key-public.pem b/test/certs/ct-server-key-public.pem
new file mode 100644
index 000000000000..c35ce3f483b6
--- /dev/null
+++ b/test/certs/ct-server-key-public.pem
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmXg8sUUzwBYaWrRb+V0IopzQ6o3U
+yEJ04r5ZrRXGdpYM8K+hB0pXrGRLI0eeWz+3skXrS0IO83AhA3GpRL6s6w==
+-----END PUBLIC KEY-----
diff --git a/test/certs/ct-server-key.pem b/test/certs/ct-server-key.pem
new file mode 100644
index 000000000000..ab6a5575bb01
--- /dev/null
+++ b/test/certs/ct-server-key.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PRIVATE KEY-----
+MHcCAQEEIFLw4uhuCruGKjrS9MoNeXFbypqZe+Sgh+EL1gnRn1d4oAoGCCqGSM49
+AwEHoUQDQgAEmXg8sUUzwBYaWrRb+V0IopzQ6o3UyEJ04r5ZrRXGdpYM8K+hB0pX
+rGRLI0eeWz+3skXrS0IO83AhA3GpRL6s6w==
+-----END EC PRIVATE KEY-----
diff --git a/test/certs/cyrillic.msb b/test/certs/cyrillic.msb
new file mode 100644
index 000000000000..aeae813f45f3
--- /dev/null
+++ b/test/certs/cyrillic.msb
@@ -0,0 +1,79 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 123456 (0x1e240)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=\U8A8D\U8A3C\U5C40
+ Validity
+ Not Before: Mar 3 09:24:52 2021 GMT
+ Not After : Apr 2 09:24:52 2021 GMT
+ Subject: C=RU, ST=\U041C\U043E\U0441\U043A\U0432\U0430, L=\U041C\U043E\U0441\U043A\U0432\U0430, O=\U0414\U043C\U0438\U0442\U0440\U0438\U0439 \U0411\U0435\U043B\U044F\U0432\U0441\U043A\U0438\U0439, OU=\U042F, CN=Dmitry Belyavskiy, emailAddress=beldmit@example.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:a4:57:96:36:55:6d:95:21:25:17:f8:85:87:53:
+ ba:bc:d5:9a:d6:dc:21:66:72:30:36:ca:94:43:3c:
+ 37:22:81:31:af:bb:8f:31:df:20:e2:6a:04:ee:12:
+ a1:ea:8c:94:63:84:ab:66:ca:e7:cf:ae:3f:f0:c0:
+ 38:7f:67:a8:bf:f4:8a:70:65:3d:5c:1f:60:0c:6a:
+ 86:b9:68:4f:45:37:0c:89:ef:45:e8:ab:c4:bd:1a:
+ 88:49:05:4b:5f:f4:a2:8d:1c:38:e4:50:54:aa:25:
+ a6:4d:5c:64:eb:1c:31:91:d1:38:f0:b4:82:4c:c4:
+ 58:60:4f:21:95:94:56:16:dc:d9:a7:30:46:54:bc:
+ cd:3a:3f:a4:54:58:a4:ea:0b:b0:7d:72:03:15:49:
+ 52:22:0f:a1:9b:aa:ca:0b:05:c6:ee:0c:0b:f4:58:
+ 0d:4c:1a:71:29:93:db:f7:12:f5:dc:df:01:15:18:
+ 07:d4:e4:f6:e0:c9:a9:09:da:03:23:da:fc:b4:07:
+ f3:86:18:87:1b:db:3f:50:fe:21:7a:9c:c1:00:5d:
+ 93:ec:f1:b9:5f:78:14:57:e1:01:b8:a9:e6:07:fd:
+ d3:77:bb:71:b4:1d:86:65:a8:0a:0a:a3:fe:f9:f5:
+ 83:a5:5c:cd:5d:ea:29:3c:1a:d8:63:6b:c5:c5:3e:
+ b2:d1
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Key Identifier:
+ 11:49:46:19:2A:4E:4D:D1:C8:FB:79:55:3D:81:99:22:EE:34:4F:22
+ X509v3 Authority Key Identifier:
+ A5:77:E3:20:78:77:2A:94:BF:62:8B:0E:61:4B:23:3E:BA:B7:04:1C
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Signature Algorithm: sha256WithRSAEncryption
+ Signature Value:
+ 31:92:d1:a9:5e:0e:fb:cc:1c:b7:2d:5e:e8:7e:69:3f:8c:7e:
+ c5:c9:e1:d0:70:c0:bf:5d:21:58:da:df:4e:cf:27:6a:1b:bc:
+ df:a1:d4:df:76:4b:40:60:10:42:62:c4:f9:18:83:db:ff:a0:
+ 02:0f:4b:20:7a:cb:83:3f:95:00:5b:1a:7a:3c:d7:dc:7a:cd:
+ 1e:6f:8c:4f:78:d0:ec:06:89:6f:2b:a8:92:05:d9:39:08:55:
+ 95:5f:2a:d0:5c:ac:b8:5c:08:38:ea:e0:22:7a:aa:b7:af:36:
+ 22:7a:2e:81:ba:3c:e4:d4:f9:3f:f0:ce:a5:e2:3f:2f:c1:57:
+ 37:0b:1a:74:73:49:22:09:d5:ff:e2:c0:2c:2a:8f:bb:1b:61:
+ 73:19:50:74:06:48:95:34:b5:08:57:49:11:09:d3:9c:74:11:
+ e2:7b:9a:98:6e:33:b5:e4:ed:2f:2f:f9:59:28:3a:e6:fa:8d:
+ 56:8a:cf:e0:b9:d6:4d:4c:43:8e:11:2f:9e:79:34:79:66:5e:
+ be:20:78:34:8d:aa:05:30:0c:dc:b1:dc:85:ee:81:37:bf:81:
+ 93:d0:05:c6:f6:36:2e:12:f8:11:91:d3:a1:fd:08:bf:5f:62:
+ c9:a5:a5:98:e4:8f:8b:57:1f:aa:fb:1e:38:0c:a9:cd:d1:30:
+ 3f:a5:6f:d8
+-----BEGIN CERTIFICATE-----
+MIIDkzCCAnugAwIBAgIDAeJAMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNVBAMMCeiq
+jeiovOWxgDAeFw0yMTAzMDMwOTI0NTJaFw0yMTA0MDIwOTI0NTJaMIG0MQswCQYD
+VQQGEwJSVTEVMBMGA1UECAwM0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQ
+utCy0LAxKjAoBgNVBAoMIdCU0LzQuNGC0YDQuNC5INCR0LXQu9GP0LLRgdC60LjQ
+uTELMAkGA1UECwwC0K8xGjAYBgNVBAMMEURtaXRyeSBCZWx5YXZza2l5MSIwIAYJ
+KoZIhvcNAQkBFhNiZWxkbWl0QGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEApFeWNlVtlSElF/iFh1O6vNWa1twhZnIwNsqUQzw3IoEx
+r7uPMd8g4moE7hKh6oyUY4SrZsrnz64/8MA4f2eov/SKcGU9XB9gDGqGuWhPRTcM
+ie9F6KvEvRqISQVLX/SijRw45FBUqiWmTVxk6xwxkdE48LSCTMRYYE8hlZRWFtzZ
+pzBGVLzNOj+kVFik6guwfXIDFUlSIg+hm6rKCwXG7gwL9FgNTBpxKZPb9xL13N8B
+FRgH1OT24MmpCdoDI9r8tAfzhhiHG9s/UP4hepzBAF2T7PG5X3gUV+EBuKnmB/3T
+d7txtB2GZagKCqP++fWDpVzNXeopPBrYY2vFxT6y0QIDAQABo00wSzAdBgNVHQ4E
+FgQUEUlGGSpOTdHI+3lVPYGZIu40TyIwHwYDVR0jBBgwFoAUpXfjIHh3KpS/YosO
+YUsjPrq3BBwwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAMZLRqV4O+8wc
+ty1e6H5pP4x+xcnh0HDAv10hWNrfTs8nahu836HU33ZLQGAQQmLE+RiD2/+gAg9L
+IHrLgz+VAFsaejzX3HrNHm+MT3jQ7AaJbyuokgXZOQhVlV8q0FysuFwIOOrgInqq
+t682Inougbo85NT5P/DOpeI/L8FXNwsadHNJIgnV/+LALCqPuxthcxlQdAZIlTS1
+CFdJEQnTnHQR4nuamG4zteTtLy/5WSg65vqNVorP4LnWTUxDjhEvnnk0eWZeviB4
+NI2qBTAM3LHche6BN7+Bk9AFxvY2LhL4EZHTof0Iv19iyaWlmOSPi1cfqvseOAyp
+zdEwP6Vv2A==
+-----END CERTIFICATE-----
diff --git a/test/certs/cyrillic.pem b/test/certs/cyrillic.pem
new file mode 100644
index 000000000000..7e479b3ed7ff
--- /dev/null
+++ b/test/certs/cyrillic.pem
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkzCCAnugAwIBAgIDAeJAMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNVBAMMCeiq
+jeiovOWxgDAeFw0yMTAzMDMwOTI0NTJaFw0yMTA0MDIwOTI0NTJaMIG0MQswCQYD
+VQQGEwJSVTEVMBMGA1UECAwM0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQ
+utCy0LAxKjAoBgNVBAoMIdCU0LzQuNGC0YDQuNC5INCR0LXQu9GP0LLRgdC60LjQ
+uTELMAkGA1UECwwC0K8xGjAYBgNVBAMMEURtaXRyeSBCZWx5YXZza2l5MSIwIAYJ
+KoZIhvcNAQkBFhNiZWxkbWl0QGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEApFeWNlVtlSElF/iFh1O6vNWa1twhZnIwNsqUQzw3IoEx
+r7uPMd8g4moE7hKh6oyUY4SrZsrnz64/8MA4f2eov/SKcGU9XB9gDGqGuWhPRTcM
+ie9F6KvEvRqISQVLX/SijRw45FBUqiWmTVxk6xwxkdE48LSCTMRYYE8hlZRWFtzZ
+pzBGVLzNOj+kVFik6guwfXIDFUlSIg+hm6rKCwXG7gwL9FgNTBpxKZPb9xL13N8B
+FRgH1OT24MmpCdoDI9r8tAfzhhiHG9s/UP4hepzBAF2T7PG5X3gUV+EBuKnmB/3T
+d7txtB2GZagKCqP++fWDpVzNXeopPBrYY2vFxT6y0QIDAQABo00wSzAdBgNVHQ4E
+FgQUEUlGGSpOTdHI+3lVPYGZIu40TyIwHwYDVR0jBBgwFoAUpXfjIHh3KpS/YosO
+YUsjPrq3BBwwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAMZLRqV4O+8wc
+ty1e6H5pP4x+xcnh0HDAv10hWNrfTs8nahu836HU33ZLQGAQQmLE+RiD2/+gAg9L
+IHrLgz+VAFsaejzX3HrNHm+MT3jQ7AaJbyuokgXZOQhVlV8q0FysuFwIOOrgInqq
+t682Inougbo85NT5P/DOpeI/L8FXNwsadHNJIgnV/+LALCqPuxthcxlQdAZIlTS1
+CFdJEQnTnHQR4nuamG4zteTtLy/5WSg65vqNVorP4LnWTUxDjhEvnnk0eWZeviB4
+NI2qBTAM3LHche6BN7+Bk9AFxvY2LhL4EZHTof0Iv19iyaWlmOSPi1cfqvseOAyp
+zdEwP6Vv2A==
+-----END CERTIFICATE-----
diff --git a/test/certs/cyrillic.utf8 b/test/certs/cyrillic.utf8
new file mode 100644
index 000000000000..b444f98e9d95
--- /dev/null
+++ b/test/certs/cyrillic.utf8
@@ -0,0 +1,79 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 123456 (0x1e240)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: CN=èªè¨¼å±€
+ Validity
+ Not Before: Mar 3 09:24:52 2021 GMT
+ Not After : Apr 2 09:24:52 2021 GMT
+ Subject: C=RU, ST=МоÑква, L=МоÑква, O=Дмитрий БелÑвÑкий, OU=Я, CN=Dmitry Belyavskiy, emailAddress=beldmit@example.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:a4:57:96:36:55:6d:95:21:25:17:f8:85:87:53:
+ ba:bc:d5:9a:d6:dc:21:66:72:30:36:ca:94:43:3c:
+ 37:22:81:31:af:bb:8f:31:df:20:e2:6a:04:ee:12:
+ a1:ea:8c:94:63:84:ab:66:ca:e7:cf:ae:3f:f0:c0:
+ 38:7f:67:a8:bf:f4:8a:70:65:3d:5c:1f:60:0c:6a:
+ 86:b9:68:4f:45:37:0c:89:ef:45:e8:ab:c4:bd:1a:
+ 88:49:05:4b:5f:f4:a2:8d:1c:38:e4:50:54:aa:25:
+ a6:4d:5c:64:eb:1c:31:91:d1:38:f0:b4:82:4c:c4:
+ 58:60:4f:21:95:94:56:16:dc:d9:a7:30:46:54:bc:
+ cd:3a:3f:a4:54:58:a4:ea:0b:b0:7d:72:03:15:49:
+ 52:22:0f:a1:9b:aa:ca:0b:05:c6:ee:0c:0b:f4:58:
+ 0d:4c:1a:71:29:93:db:f7:12:f5:dc:df:01:15:18:
+ 07:d4:e4:f6:e0:c9:a9:09:da:03:23:da:fc:b4:07:
+ f3:86:18:87:1b:db:3f:50:fe:21:7a:9c:c1:00:5d:
+ 93:ec:f1:b9:5f:78:14:57:e1:01:b8:a9:e6:07:fd:
+ d3:77:bb:71:b4:1d:86:65:a8:0a:0a:a3:fe:f9:f5:
+ 83:a5:5c:cd:5d:ea:29:3c:1a:d8:63:6b:c5:c5:3e:
+ b2:d1
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Key Identifier:
+ 11:49:46:19:2A:4E:4D:D1:C8:FB:79:55:3D:81:99:22:EE:34:4F:22
+ X509v3 Authority Key Identifier:
+ A5:77:E3:20:78:77:2A:94:BF:62:8B:0E:61:4B:23:3E:BA:B7:04:1C
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Signature Algorithm: sha256WithRSAEncryption
+ Signature Value:
+ 31:92:d1:a9:5e:0e:fb:cc:1c:b7:2d:5e:e8:7e:69:3f:8c:7e:
+ c5:c9:e1:d0:70:c0:bf:5d:21:58:da:df:4e:cf:27:6a:1b:bc:
+ df:a1:d4:df:76:4b:40:60:10:42:62:c4:f9:18:83:db:ff:a0:
+ 02:0f:4b:20:7a:cb:83:3f:95:00:5b:1a:7a:3c:d7:dc:7a:cd:
+ 1e:6f:8c:4f:78:d0:ec:06:89:6f:2b:a8:92:05:d9:39:08:55:
+ 95:5f:2a:d0:5c:ac:b8:5c:08:38:ea:e0:22:7a:aa:b7:af:36:
+ 22:7a:2e:81:ba:3c:e4:d4:f9:3f:f0:ce:a5:e2:3f:2f:c1:57:
+ 37:0b:1a:74:73:49:22:09:d5:ff:e2:c0:2c:2a:8f:bb:1b:61:
+ 73:19:50:74:06:48:95:34:b5:08:57:49:11:09:d3:9c:74:11:
+ e2:7b:9a:98:6e:33:b5:e4:ed:2f:2f:f9:59:28:3a:e6:fa:8d:
+ 56:8a:cf:e0:b9:d6:4d:4c:43:8e:11:2f:9e:79:34:79:66:5e:
+ be:20:78:34:8d:aa:05:30:0c:dc:b1:dc:85:ee:81:37:bf:81:
+ 93:d0:05:c6:f6:36:2e:12:f8:11:91:d3:a1:fd:08:bf:5f:62:
+ c9:a5:a5:98:e4:8f:8b:57:1f:aa:fb:1e:38:0c:a9:cd:d1:30:
+ 3f:a5:6f:d8
+-----BEGIN CERTIFICATE-----
+MIIDkzCCAnugAwIBAgIDAeJAMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNVBAMMCeiq
+jeiovOWxgDAeFw0yMTAzMDMwOTI0NTJaFw0yMTA0MDIwOTI0NTJaMIG0MQswCQYD
+VQQGEwJSVTEVMBMGA1UECAwM0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQ
+utCy0LAxKjAoBgNVBAoMIdCU0LzQuNGC0YDQuNC5INCR0LXQu9GP0LLRgdC60LjQ
+uTELMAkGA1UECwwC0K8xGjAYBgNVBAMMEURtaXRyeSBCZWx5YXZza2l5MSIwIAYJ
+KoZIhvcNAQkBFhNiZWxkbWl0QGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEApFeWNlVtlSElF/iFh1O6vNWa1twhZnIwNsqUQzw3IoEx
+r7uPMd8g4moE7hKh6oyUY4SrZsrnz64/8MA4f2eov/SKcGU9XB9gDGqGuWhPRTcM
+ie9F6KvEvRqISQVLX/SijRw45FBUqiWmTVxk6xwxkdE48LSCTMRYYE8hlZRWFtzZ
+pzBGVLzNOj+kVFik6guwfXIDFUlSIg+hm6rKCwXG7gwL9FgNTBpxKZPb9xL13N8B
+FRgH1OT24MmpCdoDI9r8tAfzhhiHG9s/UP4hepzBAF2T7PG5X3gUV+EBuKnmB/3T
+d7txtB2GZagKCqP++fWDpVzNXeopPBrYY2vFxT6y0QIDAQABo00wSzAdBgNVHQ4E
+FgQUEUlGGSpOTdHI+3lVPYGZIu40TyIwHwYDVR0jBBgwFoAUpXfjIHh3KpS/YosO
+YUsjPrq3BBwwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAMZLRqV4O+8wc
+ty1e6H5pP4x+xcnh0HDAv10hWNrfTs8nahu836HU33ZLQGAQQmLE+RiD2/+gAg9L
+IHrLgz+VAFsaejzX3HrNHm+MT3jQ7AaJbyuokgXZOQhVlV8q0FysuFwIOOrgInqq
+t682Inougbo85NT5P/DOpeI/L8FXNwsadHNJIgnV/+LALCqPuxthcxlQdAZIlTS1
+CFdJEQnTnHQR4nuamG4zteTtLy/5WSg65vqNVorP4LnWTUxDjhEvnnk0eWZeviB4
+NI2qBTAM3LHche6BN7+Bk9AFxvY2LhL4EZHTof0Iv19iyaWlmOSPi1cfqvseOAyp
+zdEwP6Vv2A==
+-----END CERTIFICATE-----
diff --git a/test/certs/cyrillic_crl.pem b/test/certs/cyrillic_crl.pem
new file mode 100644
index 000000000000..5ba2b2c9771b
--- /dev/null
+++ b/test/certs/cyrillic_crl.pem
@@ -0,0 +1,13 @@
+-----BEGIN X509 CRL-----
+MIIB6DCB0QIBATANBgkqhkiG9w0BAQsFADCBjjELMAkGA1UEBhMCUlUxFTATBgNV
+BAgMDNCc0L7RgdC60LLQsDELMAkGA1UECgwC0K8xCzAJBgNVBAsMAtCvMSowKAYD
+VQQDDCHQlNC80LjRgtGA0LjQuSDQkdC10LvRj9Cy0YHQutC40LkxIjAgBgkqhkiG
+9w0BCQEWE2JlbGRtaXRAZXhhbXBsZS5jb20XDTE3MDQyNDEzMjUzMVoXDTE3MDUy
+NDEzMjUzMVqgDjAMMAoGA1UdFAQDAgEBMA0GCSqGSIb3DQEBCwUAA4IBAQCF5eX+
+1BM/BxoHU2/3pQHJgPSKevN0/K/daiFHiJl7Kb9GCwKY14B1RvbN2rUP/58Mt+aq
+jvauf1yBzlaJQeJKZcsCmG9p6Tr1y0BJXhrq5kC0SLyNDsfGUTfuxnwmo+clHXRU
++gKuk+h0WkJL022ZYbJ38w588k4NT3CWVHeE23EDC264p942mlDE7en6MyL152Pe
+Ld9YrWiq5iOIOrIbQLErq0EjwxvHG9sMiYFUa6VrwmRf26nyZ7u9RKJDP+o2dltw
+diBaSXC3Qt3pZ8BIfv/l81lwp8Dr63SwCII2pIRplyICdQqmX/a+1q8kThXIP2Kx
++X48g7VE2o2X4cfy
+-----END X509 CRL-----
diff --git a/test/certs/cyrillic_crl.utf8 b/test/certs/cyrillic_crl.utf8
new file mode 100644
index 000000000000..c36a3fd0f07a
--- /dev/null
+++ b/test/certs/cyrillic_crl.utf8
@@ -0,0 +1,40 @@
+Certificate Revocation List (CRL):
+ Version 2 (0x1)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=RU, ST=МоÑква, O=Я, OU=Я, CN=Дмитрий БелÑвÑкий, emailAddress=beldmit@example.com
+ Last Update: Apr 24 13:25:31 2017 GMT
+ Next Update: May 24 13:25:31 2017 GMT
+ CRL extensions:
+ X509v3 CRL Number:
+ 1
+No Revoked Certificates.
+ Signature Algorithm: sha256WithRSAEncryption
+ Signature Value:
+ 85:e5:e5:fe:d4:13:3f:07:1a:07:53:6f:f7:a5:01:c9:80:f4:
+ 8a:7a:f3:74:fc:af:dd:6a:21:47:88:99:7b:29:bf:46:0b:02:
+ 98:d7:80:75:46:f6:cd:da:b5:0f:ff:9f:0c:b7:e6:aa:8e:f6:
+ ae:7f:5c:81:ce:56:89:41:e2:4a:65:cb:02:98:6f:69:e9:3a:
+ f5:cb:40:49:5e:1a:ea:e6:40:b4:48:bc:8d:0e:c7:c6:51:37:
+ ee:c6:7c:26:a3:e7:25:1d:74:54:fa:02:ae:93:e8:74:5a:42:
+ 4b:d3:6d:99:61:b2:77:f3:0e:7c:f2:4e:0d:4f:70:96:54:77:
+ 84:db:71:03:0b:6e:b8:a7:de:36:9a:50:c4:ed:e9:fa:33:22:
+ f5:e7:63:de:2d:df:58:ad:68:aa:e6:23:88:3a:b2:1b:40:b1:
+ 2b:ab:41:23:c3:1b:c7:1b:db:0c:89:81:54:6b:a5:6b:c2:64:
+ 5f:db:a9:f2:67:bb:bd:44:a2:43:3f:ea:36:76:5b:70:76:20:
+ 5a:49:70:b7:42:dd:e9:67:c0:48:7e:ff:e5:f3:59:70:a7:c0:
+ eb:eb:74:b0:08:82:36:a4:84:69:97:22:02:75:0a:a6:5f:f6:
+ be:d6:af:24:4e:15:c8:3f:62:b1:f9:7e:3c:83:b5:44:da:8d:
+ 97:e1:c7:f2
+-----BEGIN X509 CRL-----
+MIIB6DCB0QIBATANBgkqhkiG9w0BAQsFADCBjjELMAkGA1UEBhMCUlUxFTATBgNV
+BAgMDNCc0L7RgdC60LLQsDELMAkGA1UECgwC0K8xCzAJBgNVBAsMAtCvMSowKAYD
+VQQDDCHQlNC80LjRgtGA0LjQuSDQkdC10LvRj9Cy0YHQutC40LkxIjAgBgkqhkiG
+9w0BCQEWE2JlbGRtaXRAZXhhbXBsZS5jb20XDTE3MDQyNDEzMjUzMVoXDTE3MDUy
+NDEzMjUzMVqgDjAMMAoGA1UdFAQDAgEBMA0GCSqGSIb3DQEBCwUAA4IBAQCF5eX+
+1BM/BxoHU2/3pQHJgPSKevN0/K/daiFHiJl7Kb9GCwKY14B1RvbN2rUP/58Mt+aq
+jvauf1yBzlaJQeJKZcsCmG9p6Tr1y0BJXhrq5kC0SLyNDsfGUTfuxnwmo+clHXRU
++gKuk+h0WkJL022ZYbJ38w588k4NT3CWVHeE23EDC264p942mlDE7en6MyL152Pe
+Ld9YrWiq5iOIOrIbQLErq0EjwxvHG9sMiYFUa6VrwmRf26nyZ7u9RKJDP+o2dltw
+diBaSXC3Qt3pZ8BIfv/l81lwp8Dr63SwCII2pIRplyICdQqmX/a+1q8kThXIP2Kx
++X48g7VE2o2X4cfy
+-----END X509 CRL-----
diff --git a/test/certs/dhk2048.pem b/test/certs/dhk2048.pem
new file mode 100644
index 000000000000..1e1cef4b8c37
--- /dev/null
+++ b/test/certs/dhk2048.pem
@@ -0,0 +1,14 @@
+-----BEGIN PRIVATE KEY-----
+MIICKgIBADCCARsGCSqGSIb3DQEDATCCAQwCggEBAP//////////yQ/aoiFowjTE
+xmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJRSgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP
+4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJ
+KGZR7ORbPcIAfLihY78FmNpINhxV05ppFj+o/STPX4NlXSPco62WHGLzViCFUrue
+1SkHcJaWbWcMNU5KvJgE8XRsCMoYIXwykF5GLjbOO+OedywYDoYDmyeDouwHoo+1
+xV3wb0xSyd4ry/aVWBcYOZVJfOqVauUV0iYYmPoFEBVyjlqKrKpo//////////8C
+AQICAgf/BIIBBAKCAQBPXxEkDA2EWknARF2EzUo6gc1eFNdKMVwa7aT3e2ClTIkN
+B4Y6XsJCS5C4q0vKhHtdH5LswCxUPfTQQAOlKPzcdMcGuOvx8gl90kvaOuxnD0wQ
+rpRmC64FbN+h503UJuGuNTFO2AvgLVb6EA637soAcWR6qLtRJ3wDpr1OW/ertIUj
+jhzD1i255j+z6UVQBNLy882AUSHfjr1UzWTYfcyn1zpQbZtbIh+0O5cloIl6Ek4N
+c3NtCgwAmTROrsKqHGmaW+pw4sOAAtNJByPT0y725s7tq4mAJKJgCc2J8Lbwbx9Z
+s+tEoCidGYuBRNouVH6I6POwjIhdpU0kIscdv+w8
+-----END PRIVATE KEY-----
diff --git a/test/certs/dhp2048.pem b/test/certs/dhp2048.pem
new file mode 100644
index 000000000000..5e32efe77972
--- /dev/null
+++ b/test/certs/dhp2048.pem
@@ -0,0 +1,8 @@
+-----BEGIN DH PARAMETERS-----
+MIIBDAKCAQEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxOb
+IlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjft
+awv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXT
+mmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhgh
+fDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq
+5RXSJhiY+gUQFXKOWoqsqmj//////////wIBAgICB/8=
+-----END DH PARAMETERS-----
diff --git a/test/certs/ec_privkey_with_chain.pem b/test/certs/ec_privkey_with_chain.pem
new file mode 100644
index 000000000000..fcdf42a12108
--- /dev/null
+++ b/test/certs/ec_privkey_with_chain.pem
@@ -0,0 +1,74 @@
+Private Key for CN=Ca-ENROLLMENT-INTERMEDIATE-3
+-----BEGIN EC PRIVATE KEY-----
+MHcCAQEEIFGgYhBJYVKeQgTP0hsIv3NGTcG1+dooIFdRbEbCWrUvoAoGCCqGSM49
+AwEHoUQDQgAEYJfmnfC2iI6xjUarHNOY5TbNFD8MZVdb1PszPdbeuGs7hgiEcSWI
+hRjawFslN3XiubZeMPtN5nX8vudvtnNYVA==
+-----END EC PRIVATE KEY-----
+
+Subject: CN=Ca-ENROLLMENT-INTERMEDIATE-3
+Issuer: CN=Ca-ENROLLMENT-INTERMEDIATE-2
+Valid from Thu Sep 03 10:45:37 CEST 2020 to Sun Sep 01 10:45:37 CEST 2030
+Serial: 1599122797485
+-----BEGIN CERTIFICATE-----
+MIIB3zCCAYWgAwIBAgIGAXRTJXOtMAoGCCqGSM49BAMCMCcxJTAjBgNVBAMMHENh
+LUVOUk9MTE1FTlQtSU5URVJNRURJQVRFLTIwHhcNMjAwOTAzMDg0NTM3WhcNMzAw
+OTAxMDg0NTM3WjAnMSUwIwYDVQQDDBxDYS1FTlJPTExNRU5ULUlOVEVSTUVESUFU
+RS0zMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYJfmnfC2iI6xjUarHNOY5TbN
+FD8MZVdb1PszPdbeuGs7hgiEcSWIhRjawFslN3XiubZeMPtN5nX8vudvtnNYVKOB
+nDCBmTAdBgNVHQ4EFgQUpdEIxYuP40cHdbcVTKRsT5/1PEMwVAYDVR0jBE0wS4AU
+TfcTbSV0o6Zwb+Rg0fvscn3R97WhK6QpMCcxJTAjBgNVBAMMHENhLUVOUk9MTE1F
+TlQtSU5URVJNRURJQVRFLTGCBgF0UyVzpDASBgNVHRMBAf8ECDAGAQH/AgECMA4G
+A1UdDwEB/wQEAwIBhjAKBggqhkjOPQQDAgNIADBFAiEAmIyD1fuTtMTuJwSccOg2
+jR+7HX67yTx1ozZOOrAsdBACIAo14mDvZYrFUke3r69690gCbiNUEQgbhIwCLYTQ
+2qbo
+-----END CERTIFICATE-----
+
+Subject: CN=Ca-ENROLLMENT-INTERMEDIATE-2
+Issuer: CN=Ca-ENROLLMENT-INTERMEDIATE-1
+Valid from Thu Sep 03 10:45:37 CEST 2020 to Sun Sep 01 10:45:37 CEST 2030
+Serial: 1599122797476
+-----BEGIN CERTIFICATE-----
+MIIB1jCCAXugAwIBAgIGAXRTJXOkMAoGCCqGSM49BAMCMCcxJTAjBgNVBAMMHENh
+LUVOUk9MTE1FTlQtSU5URVJNRURJQVRFLTEwHhcNMjAwOTAzMDg0NTM3WhcNMzAw
+OTAxMDg0NTM3WjAnMSUwIwYDVQQDDBxDYS1FTlJPTExNRU5ULUlOVEVSTUVESUFU
+RS0yMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEU4USFKQ1laHIiT1hC+ynawpl
+GFrEqt51RroMKIJclV+y+V8PQIAOAIMIDvpuxmDsnLr/I1QZO5Ui8pZdX379F6OB
+kjCBjzAdBgNVHQ4EFgQUTfcTbSV0o6Zwb+Rg0fvscn3R97UwSgYDVR0jBEMwQYAU
+HSCEFJcZjBVN6QtcmyGcFap0KR2hIaQfMB0xGzAZBgNVBAMMEkNhLUVOUk9MTE1F
+TlQtUk9PVIIGAXRTJXOfMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQD
+AgGGMAoGCCqGSM49BAMCA0kAMEYCIQC8F6GxJoW9XiD8m/rEECipJntU3iVNstHk
+Mdyx/wWvEAIhAIbw3IddLmt4dt1ce+sweFzrYSuGMH3LVSoIs6XhRqHx
+-----END CERTIFICATE-----
+
+Subject: CN=Ca-ENROLLMENT-INTERMEDIATE-1
+Issuer: CN=Ca-ENROLLMENT-ROOT
+Valid from Thu Sep 03 10:45:37 CEST 2020 to Sun Sep 01 10:45:37 CEST 2030
+Serial: 1599122797471
+-----BEGIN CERTIFICATE-----
+MIIByjCCAXGgAwIBAgIGAXRTJXOfMAoGCCqGSM49BAMCMB0xGzAZBgNVBAMMEkNh
+LUVOUk9MTE1FTlQtUk9PVDAeFw0yMDA5MDMwODQ1MzdaFw0zMDA5MDEwODQ1Mzda
+MCcxJTAjBgNVBAMMHENhLUVOUk9MTE1FTlQtSU5URVJNRURJQVRFLTEwWTATBgcq
+hkjOPQIBBggqhkjOPQMBBwNCAAR9uWgfHScQFcB87LaQKvSFPhngP4hHIsFdh5cY
+7ji2HYNfrkl2uWLKJfMiOFT06c1byplGzyj0ju8VWNV5Tee7o4GSMIGPMB0GA1Ud
+DgQWBBQdIIQUlxmMFU3pC1ybIZwVqnQpHTBKBgNVHSMEQzBBgBScYjWnQ+g/rclT
+YjwpMptoEfes3KEhpB8wHTEbMBkGA1UEAwwSQ2EtRU5ST0xMTUVOVC1ST09UggYB
+dFMlc5owEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZI
+zj0EAwIDRwAwRAIgRXLkNZAXLbhCyyL4614DuSm++fJ90A9JPU/uVpivz+MCIGlR
+G8F6eiU7ZeKPr/JON1BxLRXBZyI+Pfidj06Zvfvx
+-----END CERTIFICATE-----
+
+Subject: CN=Ca-ENROLLMENT-ROOT
+Issuer: CN=Ca-ENROLLMENT-ROOT
+Valid from Thu Sep 03 10:45:37 CEST 2020 to Sun Sep 01 10:45:37 CEST 2030
+Serial: 1599122797466
+-----BEGIN CERTIFICATE-----
+MIIBczCCARmgAwIBAgIGAXRTJXOaMAoGCCqGSM49BAMCMB0xGzAZBgNVBAMMEkNh
+LUVOUk9MTE1FTlQtUk9PVDAeFw0yMDA5MDMwODQ1MzdaFw0zMDA5MDEwODQ1Mzda
+MB0xGzAZBgNVBAMMEkNhLUVOUk9MTE1FTlQtUk9PVDBZMBMGByqGSM49AgEGCCqG
+SM49AwEHA0IABJd2nkxUVJqZ0NkEloOc3I7atQvkYmHg7UAOXp/QtwusVXfgG5lZ
+5qLayDuxlQNgcBDMilKBMnB2SNT+/IcQwEyjRTBDMB0GA1UdDgQWBBScYjWnQ+g/
+rclTYjwpMptoEfes3DASBgNVHRMBAf8ECDAGAQH/AgEKMA4GA1UdDwEB/wQEAwIB
+hjAKBggqhkjOPQQDAgNIADBFAiEAqGN70wgX6B1KU++k2inz04EPRTRqk5KLxHaW
+1jBXCbwCIGTNjmSi5J2mp+RL5UCP0ji41uPtwENC4mX4hJ+pOMIa
+-----END CERTIFICATE-----
+
diff --git a/test/certs/ee+clientAuth.pem b/test/certs/ee+clientAuth.pem
new file mode 100644
index 000000000000..850a868ff979
--- /dev/null
+++ b/test/certs/ee+clientAuth.pem
@@ -0,0 +1,20 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAxMTUwODE5NTBaGA8yMTE2MDExNjA4MTk1MFowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMCMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQB+x23yjviJ9/n0G65xjntoPCLpsZtqId+WvN/9
+sXGqRZyAnBWPFpWrf9qXdxXZpTw7KRfywnEVsUQP12XKCc9JH4tG4l/wCDaHi9qO
+pLstQskcXk40gWaU83ojjchdtDFBaxR5KxC83SR669Rw9mn66bWz/6zpK9VYohVh
+A5/3RqteQaeQETFbZdlb6e7jAjiGp6DmAiH/WLrVvMY8k0z81TD0+UjJqI9097mF
+VtNX0l+46/tR4zvyA4yYqxK+L8M57SjfwxvwUpDxxVVnRsf3kHhudeAc+UDWzqws
+n5P71o+AfbkYzhHsSFIZyYUnGv+JApFpcGEMEiHL2iBhCRdxMAwwCgYIKwYBBQUH
+AwI=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ee+serverAuth.pem b/test/certs/ee+serverAuth.pem
new file mode 100644
index 000000000000..61d03ace46f6
--- /dev/null
+++ b/test/certs/ee+serverAuth.pem
@@ -0,0 +1,20 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAxMTUwODE5NDlaGA8yMTE2MDExNjA4MTk0OVowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQBBtDxPYULl5b7VFC7/U0NgV8vTJk4zpPnUMMQ4
+QF2AWDFAek8oLKrz18KQ8M/DEhDxgkaoeXEMLT6BJUEVNYuFEYHEDGarl0nMDRXL
+xOgAExfz3Tf/pjsLaha5aWH7NyCSKWC+lYkIOJ/Kb/m/6QsDJoXsEC8AhrPfqJhz
+UzsCoxIlaDWqawH4+S8bdeX0tvs2VtJk/WOJHxMqXra6kgI4fAgyvr2kIZHinQ3y
+cgX40uAC38bwpE95kJ7FhSfQlE1Rt7sOspUj098Dd0RNDn2uKyOTxEqIELHfw4AX
+O3XAzt8qDyho8nEd/xiQ6qgsQnvXa+hSRJw42g3/czVskxRxMAwwCgYIKwYBBQUH
+AwE=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ee-cert-1024.pem b/test/certs/ee-cert-1024.pem
new file mode 100644
index 000000000000..0d97ca461dfd
--- /dev/null
+++ b/test/certs/ee-cert-1024.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICnDCCAYSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMDEwMzAxMTMwMzdaGA8yMTIwMTAzMTExMzAzN1owGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMF7WhfgK/SV
+sZuatHn3zm/MBe70jdr6zoRozB5M/1NmbVdsltVk1F0A5QERefKT0ri6SxYaYq/D
+3dtIo/y0koeMh7pmdRj4wPmoD2rty2P3vnGLfla51VMrsXvVbYr+f2AQ7Y0DFwwU
+E1R/bnL3gRnJhAjg48ac0nKKYEAmM9vFAgMBAAGjfTB7MB0GA1UdDgQWBBR95tKu
+5TTscTOTJQSZ089kbmnKKjAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/J
+XjAJBgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNl
+cnZlci5leGFtcGxlMA0GCSqGSIb3DQEBCwUAA4IBAQB2cVVWl8qqyTakCb0xMeB+
+8kq1fKBGlNvnngfPsV9zgHn5eoqRNyvsUeOALTz3rJXnmcQnhzDoGVKzmHDXHKrI
+WfiDegb9cXEKWkOQhmuUspTh+Y2ata4pMRllU3ry9rKY97ZapSwezLvV/fRLpZeK
+9gFyFKXAa/oUtEis9lu13TZ/CZT1NKOz2hC3VAybArQkOWl+cy5VSaV473O1s8oR
+SZ66SsY5x5iWUzAA0ECA9cTk8eiVNvhQekNB4QlcAMJGbHAEHab6MjcghzljkmJ9
+1hFnLXkRArqXTPP33UWUvhkL4Le5YHdeS8aBRhflOKnc+bHLX2y1uS/AZhcaNPQE
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-3072.pem b/test/certs/ee-cert-3072.pem
new file mode 100644
index 000000000000..c018267e55ea
--- /dev/null
+++ b/test/certs/ee-cert-3072.pem
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMDEwMzAxMTMwMzhaGA8yMTIwMTAzMTExMzAzOFowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCX3qH/
++MSc4mzbdaOIobBDJ4s4+NGOTpA7k6D6th54CgD6CbJFULLdmb1ZLZUd0PUxVpoV
+S8mUS70uJX+xSodgee4OliI3dJpaaLdtr8SUWmOIryPK6SElOuRFNtAiv5dwX3Gg
+bcK5R9G9MFnRmdSfMFmPpTKQXi3KzN8GCeV0CY2CqpHTPcMSLFckPLS0vXX532mK
+wQMj4Lt16qNRYUTllxyp8U4wHjy8dc0aLm7/fkexZYEyxceCqxfV7JXlQkbeSHMQ
+1Wby7bL78xrwmEQpQHYxG8kkvtEN1drBkNUPM7PXrT0pT+yZdDhn9hWEoYYgUQVe
+lWr8zaDpFDjDK64vpAl/hqEmxvvKKXcRM6AL8S40csQfMLQYzKVaDMFF+D/ZYbIW
+STQ++ipv8Czo7jIB0W/6CBxRvU/gJAQnfjDU3NPaSsC5d5LF5nPKPMRjP9O1jNBd
+pOpf2X2gWNBr+9fldpuFRvEYIx273FPyR/VgBDOONYx2gd1LqyFD6Z2/gWkCAwEA
+AaN9MHswHQYDVR0OBBYEFPbCRavcThg3gkDURzgxXBst3XYRMB8GA1UdIwQYMBaA
+FLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYB
+BQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1wbGUwDQYJKoZIhvcNAQELBQAD
+ggEBACdi4db3A97eMsFQBo4Mut5TXtJvYhnKNspUKwKIaRiue4Sk6B5TJvfonXji
+YIPCH+B0U2imwXcY9H5YwyjfGCzECCK8v+HgYJmp3NETVD3JcIt6a3qDjKl7ad7e
+m+08U/yWDOB9Hb9/tjmNyPMx4ttrhnsvTMwtEafYod0hTsDpyGpz0icjE6GrX/Y4
+7dBIzXiJBEMl+Uo22hdGwe5+6tHhHxz3R9XDxF58k6SDI04DCrh3w4SKBqGcZMTD
+lP0ra70NlDh+93thJIyxyAR2QyJDD9Bc429rbqBFbfNdDCvecWzzWLqg8JixhwNd
+60w1dz3OhCHbnBeY6gdoLAfsTqc=
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-4096.pem b/test/certs/ee-cert-4096.pem
new file mode 100644
index 000000000000..9ea1aba32239
--- /dev/null
+++ b/test/certs/ee-cert-4096.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMDEwMjkxNjQ1MjFaGA8yMTIwMTAzMDE2NDUyMVowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLvapx
+pa2O+SD5omABQRE9kRg34LRXcTi2Kqc2d1J8yEF+aPXcNj3gtKJ9dgMkrWEPbG7z
+RtpmbIgxr9O7e0Z4j7KziPjmhb9Rr39YtqKmH0zsqk9l1umI3Y+SYBN02qReUxcZ
+9OP2z6W5KNDhXp2H5n73Ol3iNGhlXz+OaxMricOyagwMKkvKXtoYa6U+04yrP1a+
+ud3itNEFNpGxW5blGGH15Bgylsqq3An+bJkCUE038/NIM1tYRDcFbxjJ1QZ4OeAM
+cc6AcjiPlMgYfs4JJFb7FahtgZlDnC7217eMFBbMde7SNaj0XcTt7P0I8tX91Bo7
+PqQtGWZzFQWE4nKY5Drvv0yvhhlixzXC+r1x5EKrWvc75EKr1RQkTNUyXhUMM5DA
+SI6pT1Tx0iWzG8konzRQ9EQXMDVVwlLmaNPgZTU0qgaGRMHdEgf8KYoh6fM9WRH4
+K8cKrthZenORwANg1SE3uXFFk86gE2Q6XyMIjK9xl/g8FA3hdM4NelVOw7IAdYEf
+0taAGygmHRcUS8UYX/8aBACp6RDyYeXS9/57SBm+aCdAaiy2TZgUl889zF7chXCA
+wUGk4rV0NtA6RYKwKJCR1nXccg0c2kDR+WZHFwqWLCKVtO18eMeCFdhyenuvYAtu
+ObWvluu/d6wu6+tS3nmRE1htNkgMNSTY4j+8+wIDAQABo30wezAdBgNVHQ4EFgQU
+h6+wtpPcwlG/dUr1BUrSi2b6dRYwHwYDVR0jBBgwFoAUtBEz8dfiXvdTniAiEE+G
+Br8fyV4wCQYDVR0TBAIwADATBgNVHSUEDDAKBggrBgEFBQcDATAZBgNVHREEEjAQ
+gg5zZXJ2ZXIuZXhhbXBsZTANBgkqhkiG9w0BAQsFAAOCAQEAaTmowdWbVDzRxQJJ
+0x0p6PjSkM/CHnBSZkgpAV1M5YwtVdH3xyaiP3r1sj/4BG3MGJXvbEeYoxy22V+R
+/pJNe/2mJ9rUNG6ZRTbEYXVKh61KoxCjmpDUU/z3hVYXN/MBNY0GEU0mpt9JoBwX
+su3Op3IOQid5itlvFQ1SVQnGLSks/eLKxioa+igMWLPuvDWHCGWTbQZ7jjOLBG9h
+kD1Xnm2QvIgDGHV9E5+bRjck0f1I1wq/DOpYP4Cg5caJlAWCn391p6r1YVB/Hs3X
+2uLQTtgeOKLtpDqhuvIriT0KTidm+NkAnbcxuLnJVlqa8XEx2P256juk9ce68CND
+n8e4xA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-768.pem b/test/certs/ee-cert-768.pem
new file mode 100644
index 000000000000..794f93c0126d
--- /dev/null
+++ b/test/certs/ee-cert-768.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICeDCCAWCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAzMjAwNjI3MjdaGA8yMTE2MDMyMTA2MjcyN1owGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwfDANBgkqhkiG9w0BAQEFAANrADBoAmEAwCvrPAynx+7VtpFz
+4cWZW3/n3/nMwK4fxkWSB0kbVUhQaYiaQGWEfB4JpRz5rPt8NW5m2aVGT7mMjScu
+8YyFa3IDdpBeQL1n8VQUH3FLySgQHC1bkkzwyzQM8JirCdl/AgMBAAGjfTB7MB0G
+A1UdDgQWBBSRBasp1P/UDCesreviw4Lwz8tFBDAfBgNVHSMEGDAWgBS0ETPx1+Je
+91OeICIQT4YGvx/JXjAJBgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkG
+A1UdEQQSMBCCDnNlcnZlci5leGFtcGxlMA0GCSqGSIb3DQEBCwUAA4IBAQB5xled
+do7U++n86KmJDGnXd4XMpr1QbTFVSO7fhSiObeGm961re/TI7AhuLlsZYP601YhZ
+pRe9B7tiEuzu3iCD4kKB0yxgUCSsF0u1KbHSUNe2H5bBJC21c2eLZh6U54y014nL
+gFSDOsA8M1301+Hlh5AS+4iTR0Ra02RaZb3L5HCR2wtkJubh3rSj8eBzb6fx+Lhw
+JoeRg34lhycGC4bBVwkRT8bo73Nrs71JUP2A6/PjdsIfF2rtVMEuIq8AMQ5wInZ+
+2mIxJ4MwCClwLCq3VxI1bzdf1TYsPNxYTUS1POb2VgNofG0mBTHNUYUO20aF0ct8
+PCQqIqxUIegfS3f5
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-768i.pem b/test/certs/ee-cert-768i.pem
new file mode 100644
index 000000000000..d6532fb5d27b
--- /dev/null
+++ b/test/certs/ee-cert-768i.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICfjCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAzMjAwNjI3MjdaGA8yMTE2MDMyMTA2MjcyN1owGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBSq83ovyyiaKeskoYibqSrJFtGUHDAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA2EASAwDwXsYGnhQDyWixI9eKZwXAA9E4rEIdmKNvVjU
+jWkMh1oC0FZl4TTHU+sAaXmv2QItZOcG2QEHoTIZDPYiy+7eZC7pPQY25dkxeSZ9
+TIlMnfePzYTc3BnfxZj82Mny
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-8192.pem b/test/certs/ee-cert-8192.pem
new file mode 100644
index 000000000000..4c23a4bf8b21
--- /dev/null
+++ b/test/certs/ee-cert-8192.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGIDCCBQigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMDEwMjkxNjQ1MjRaGA8yMTIwMTAzMDE2NDUyNFowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggQiMA0GCSqGSIb3DQEBAQUAA4IEDwAwggQKAoIEAQDNaO0T
+IBXbjdhQeIZu9YYZNyCqHRDbwjInO/RjdbasSFgukI3mEaq53eKGGK/ESYZLMqwB
+8Xs1WZmvtgJgDa+nhkAmIxnD3iZ+asdxlmI/S8VXVeOAcsYuifooDAxM3GpInGBI
+PwuGzJa+/zrPP+JNp7iayAaqlLMVsSB0ZusPVy6vnfOz18lQNvhkGbVbGbt0YEqw
+DFNjAPApcjjG36i93ynMLVP4BJSDrwcvuoIWKjvtuQ98JmBeGC9SQZuQOLLHpd9i
+h2iAiNgEPMnqWqN9eoKEMBq4NKBE4jLm51DfvG0rHxSETULop8pLS9qZBB3HDTnU
+2BvW/zSWpz2K18nDlKk2XkCcYFJbu/nwBJjjowFN0dlJGM7YTYIzKLO0p7kZ4FMz
+OCwe0nbk/bY5OmlK0m3dja3MOYK31bSwqIwkgKpolpkp0CXmoKwwKivvFEZFUym1
+eyETqpp+CvOhmZTuzAw5lkw64Wi7dWEWQfKz4UD36PiNmeRt3K5N12622VPSxIHw
+Ph3n6nxv5o+LhnG+e4LvWqRqNxgzefGLnzEfqc8z3kM1o5HEj8ftevSVZsHceDIP
+D7AdT8EGNo+K8V/BFb68ZMRgEqpnqNLJ9wDSV1Lht2nRYH570R8l+n9+k0gJUGYR
+YF188NbPoCnfG3VLVLObqPuOiMBupcCDR+1TkuKexVsnjeRuD2oPypY5J/Z78m+d
+/FdrvwjSB9jtCbzb4Xv5TiDFNPXzVHYEVIexm5dyktl3SE2xj/mLtA7Avd0AAHpy
+zGvraMlyw//kL7qu9lREigFNKkdrUZ5Qehc5xT+OAuWUzzDWbeA3iYDt0+cl6lB8
+RBezp9bwkLn1X+RFrq3lKSMBMJXeDGVhuDAZ3DjEJCZ9pmod2M2cIBJREkYZkjhQ
+bRPsGlfJsnJJlwmvUBTp4RXwXj2JvIQKYcPmqjJQW23rHQ5Dbux6WXs+6F8py/os
+Ypui+6RCae2RHbyaQ9KUbB94bgaGsyb0etKLn1AeYTydt0EYO2+A6CAd0lr0vLT1
+AYEf3U1yEoWFKHQfGUWsxUcANHihSY3DISJfYLASWtQ4FlB0l5va/+v5G3Gylug/
+NIUzcAqZNP15IWcaQy9NHayuEnW+V6m5pw2HauI+fEVz0ppJeG7FxbM0Q9MsgYRg
+XgMc0ZjWVEVEGqVGgVhCckDSbVHt8kti2E/x5i9FqeXWW6/h1ah13NcpDm/9XR98
+LJe7nx+PGiFR9/SvooZ1jfN/OUIn6Kk0oY4osVEDWHkLDkKmGOw3fZ9LpMTh8BTG
+G50qaFup1u3DB0i5oUs5Os/+mUuQSDW5Ck+dYYgWARoWOgTS6FtRah+WMCVI6Vdf
+Ecuox4V1zNEYcXI7AgMBAAGjfTB7MB0GA1UdDgQWBBSA+VGVgf8T9UbziRxM+S8e
+g/cU5TAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQCFzSgb/Jryu4XEdFFPeN9984QeLcasi4Ds9rhe
+/Ys3eJo2mXr+iJTQVgPpva8LKFQZxi16NdV8J3hbrxtOqvujQZvgFOQ2BgjXXeHF
+KooGLFzp3C8ykvLEc/vJDQBAsTacLTzegyo/La3xIMpQSupN5HLPZn90fKvQ8fpj
+XMPXlLWNyfjqQjNa0z5udMXzKK7dMJjXoMyag0wQ/eitatPWHNQwAsxoPklM6lQC
+vP3szVDTc+JfsUSwI2bam343/zTDOuEaru8euT+nwYUXLQpBnU0HMDhHSft8ytq+
+ffF6A9SDTDopBtpthiHsnj0LQqLdwa1P3EL+cAeyMc/F3Xci
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-crit-unknown-ext.pem b/test/certs/ee-cert-crit-unknown-ext.pem
new file mode 100644
index 000000000000..34f69357c1d6
--- /dev/null
+++ b/test/certs/ee-cert-crit-unknown-ext.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDMDCCAhigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMDA5MjMxMDM5MTNaGA8yMTIwMDkyNDEwMzkxM1owGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjgYwwgYkwHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4H
+mCKX4XOiMB8GA1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQC
+MAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1w
+bGUwDAYDKgMEAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAOjBX/mPKtROMdd3S
+jGMxScTndXy+OMCTGmRMpFGrR8yQAgUDhcPytxN7FU+5Uo1qaV6+9xH9Q80mtJ6i
+Db5qHdxAw/1CTDKMzVUU3eVq1AMPbERSC/JYSeQct+rQ0N4QfOjEpTXnVMbeaL+Q
+yCsetPK2I8o8e63wuCYgWWIFQtszunGnKdbF60n9MI8uAryaCCDUptOdXIiHBDIW
+1ZLnhAAr9RvwK5+ph4pBefHMC9P/tZ/eB14kszaAPBhv8cJKEvM6dgboEbU1KMoz
+VY7rT7+7rTE6/2AoL6c5z+RE0oC/UE/i1vgEjO9GwBuL9QVhmkt7ejJR0+oM9EqA
+0l7sxw==
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-ec-explicit.pem b/test/certs/ee-cert-ec-explicit.pem
new file mode 100644
index 000000000000..eccb3342caaa
--- /dev/null
+++ b/test/certs/ee-cert-ec-explicit.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIIChzCCAi6gAwIBAgIBAjAKBggqhkjOPQQDAjANMQswCQYDVQQDDAJDQTAgFw0y
+MDA5MTUxMzE0MzlaGA8yMTIwMDkxNjEzMTQzOVowGTEXMBUGA1UEAwwOc2VydmVy
+LmV4YW1wbGUwggFLMIIBAwYHKoZIzj0CATCB9wIBATAsBgcqhkjOPQEBAiEA////
+/wAAAAEAAAAAAAAAAAAAAAD///////////////8wWwQg/////wAAAAEAAAAAAAAA
+AAAAAAD///////////////wEIFrGNdiqOpPns+u9VXaYhrxlHQawzFOw9jvOPD4n
+0mBLAxUAxJ02CIbnBJNqZnjhE50mt4GffpAEQQRrF9Hy4SxCR/i85uVjpEDydwN9
+gS3rM6D0oTlF2JjClk/jQuL+Gn+bjufrSnwPnhYrzjNXazFezsu2QGg3v1H1AiEA
+/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVECAQEDQgAE+7TDP7C9VqQP
+TnqoJc/Fvf/N45BX+lBfmfiGBeRKtSsvrERUlymzQ4/nxVtymozAgFxQ0my998HH
+TSVCj7Sq56N9MHswHQYDVR0OBBYEFKKwEfKYhNv6fbQf0Xd0te7J3GZdMB8GA1Ud
+IwQYMBaAFGOKBTlETPwvB/WIPqYAtWGwchqeMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1wbGUwCgYIKoZIzj0E
+AwIDRwAwRAIgb4UITAOFlATeaayWQX9r5gf61qcnzT7TjXCekf7ww9oCIBDltg/u
+ZvS9gqviMFuPjTuk/FhsCTAUzTT7WmgcWeH7
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-ec-named-explicit.pem b/test/certs/ee-cert-ec-named-explicit.pem
new file mode 100644
index 000000000000..db13c0e5ef54
--- /dev/null
+++ b/test/certs/ee-cert-ec-named-explicit.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATqgAwIBAgIBAjAKBggqhkjOPQQDAjANMQswCQYDVQQDDAJDQTAgFw0y
+MDA5MTUxMzE0NDVaGA8yMTIwMDkxNjEzMTQ0NVowGTEXMBUGA1UEAwwOc2VydmVy
+LmV4YW1wbGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQv5PnMStW/Wx9lpvjl
+JTsFIjc2wBv14sNuMh1hfNX8ZJcoCfAAKYu6ujxXt328GWBMaubRbBjOd/eqpEst
+tYKzo30wezAdBgNVHQ4EFgQUmb/qcE413hkpmtjEMyRZZFcN1TYwHwYDVR0jBBgw
+FoAUFk6ucH6gMXeadmuV7a1iWEnU/CIwCQYDVR0TBAIwADATBgNVHSUEDDAKBggr
+BgEFBQcDATAZBgNVHREEEjAQgg5zZXJ2ZXIuZXhhbXBsZTAKBggqhkjOPQQDAgNI
+ADBFAiEA9y6J8rdAbO0mDZscIb8rIn6HgxBW4WAqTlFeZeHjjOYCIAmt2ldyObOL
+tXaiaxYX3WAOR1vmfzsdrkCAOCfAkpbo
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-ec-named-named.pem b/test/certs/ee-cert-ec-named-named.pem
new file mode 100644
index 000000000000..0730febf4680
--- /dev/null
+++ b/test/certs/ee-cert-ec-named-named.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBkzCCATqgAwIBAgIBAjAKBggqhkjOPQQDAjANMQswCQYDVQQDDAJDQTAgFw0y
+MDA5MTUxNDEwNDhaGA8yMTIwMDkxNjE0MTA0OFowGTEXMBUGA1UEAwwOc2VydmVy
+LmV4YW1wbGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS0YU57+RFRWxr/frnL
++vOYkY3h9roKnvxCG07wK5tevEYtSdKz0KsHvDBDatw1r3JNv+m2p54/3AqFPAZ3
+5b0Po30wezAdBgNVHQ4EFgQUypypuZrUl0BEmbuhfJpo3QFNIvUwHwYDVR0jBBgw
+FoAUY4oFOURM/C8H9Yg+pgC1YbByGp4wCQYDVR0TBAIwADATBgNVHSUEDDAKBggr
+BgEFBQcDATAZBgNVHREEEjAQgg5zZXJ2ZXIuZXhhbXBsZTAKBggqhkjOPQQDAgNH
+ADBEAiAEkKD7H5uxQ4YbQOiN4evbu5RCV5W7TVE80iBfcY5u4wIgGcwr++lVNX0Q
+CTT+M3ukDjOA8OEvKUz1TiDuRAQ29qU=
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-md5.pem b/test/certs/ee-cert-md5.pem
new file mode 100644
index 000000000000..8c26422fca04
--- /dev/null
+++ b/test/certs/ee-cert-md5.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQQFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAzMjAwNjI3MjdaGA8yMTE2MDMyMTA2MjcyN1owGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBBAUAA4IBAQBqCPfIEZOVUiq2exiRFoxVOvq668Y55lJZ9+4j
+E5Ncq9mdbuD7GIxJSKByf899yBJUG32ZIbmwnSHfBkPolc/LjQhUDxJtSBE8vFaA
+8AZ1rsOcaWapPQ94gYIgncBS15t7RjTX1l04fY0NPqVsWmTji+ummA5e7iCj6l6t
+CqRGhMeSZWa1mc+Plurmz7oWEqkUK5cfTrlDnXeQNOI8EK8lc636elqqdnw0amO4
+yKJlaXRlm/I1nQdUQ0G5Bk2Tp/QGoJCtJ25XsoIbnCs0tIbpQllTdLsRQmOussAP
+NvdwbKtAAolgMAxH9pl1Mc6OIo2e8405EWs1jvGEMgE0IFAY
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-noncrit-unknown-ext.pem b/test/certs/ee-cert-noncrit-unknown-ext.pem
new file mode 100644
index 000000000000..8c4695a5d859
--- /dev/null
+++ b/test/certs/ee-cert-noncrit-unknown-ext.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDLTCCAhWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMDA5MjMxMDM5NTJaGA8yMTIwMDkyNDEwMzk1MlowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjgYkwgYYwHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4H
+mCKX4XOiMB8GA1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQC
+MAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1w
+bGUwCQYDKgMEBAIFADANBgkqhkiG9w0BAQsFAAOCAQEAGPgQHSiAqGMAur2KW4BS
+opArthSh7ZT1wVEX0lP5lI/BUv/Q1YYnKEWuR9o+8vP1w4gUhFzg9Zrwj3rCNoC5
+x2JipZt8kRo5ycXv4tzr6V4n1zSgGByjradc0VEfuqmw1WpxvLoHeV9hbiXFQf8/
+PiLVF5BZ0ZSJjTDqMWfqYGSZnWqLglAqhZtHXkdaGIS+MJ2MhwPaUgLNATzptJ4a
+fjUF9apbCLtz0UzvojF/Wmby/fzbnPbKDyV6P8IzsfLgrH9NXN/9OBG5evVZo4PR
+32eZwgjdftu64b2QwoZi0dInHOwJO30UfgkeypYTjnQLSXhrz56EPu9sWCNGXs61
+LA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-ocsp-nocheck.pem b/test/certs/ee-cert-ocsp-nocheck.pem
new file mode 100644
index 000000000000..d70ffa7553d1
--- /dev/null
+++ b/test/certs/ee-cert-ocsp-nocheck.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAh6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMDA5MjMxMDM4NDlaGA8yMTIwMDkyNDEwMzg0OVowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjgZIwgY8wHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4H
+mCKX4XOiMB8GA1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQC
+MAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1w
+bGUwEgYJKwYBBQUHMAEFAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEADK7EvoaQ
+Q/hwA48Vt+umuaquwUTn7IP5eWD6TivgTxnx5Qj1vqCC4AqZF4L8fV4RW2kXhbW+
+gwJIWr0w2EzzZnaObJK/zWyXdb+fpyLsl65BAABDjm2GVZEuX7Zvm+4cJ9mUozWz
+/r1d4x9s2bmuo+6S3HH+ceXhyYPHnMc9gkzLubMZp7yO9FaDNmC9UoSnv1W0Ijkf
+D+jV4ErjON9eCuFTt7xxa9xVNCnB1shXLvoyiGd9yCyO4cScpxNPl3/VY9kx5W2G
+OeRYsJw4DZOY6hRkJq2ftDiOsDWiAXBkWuItf0hynOkSyBh1bcW+h94iBZ9uB1X+
+LRAbn7Qf3ITyCw==
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-policies-bad.pem b/test/certs/ee-cert-policies-bad.pem
new file mode 100644
index 000000000000..0fcd6372b317
--- /dev/null
+++ b/test/certs/ee-cert-policies-bad.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDTTCCAjWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMzAzMDgxMjIzMzJaGA8yMTIzMDMwOTEyMjMzMlowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjgakwgaYwHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4H
+mCKX4XOiMB8GA1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQC
+MAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1w
+bGUwKQYDVR0gBCIwIDAOBgwrBgEEAYGBXLz7RwEwDgYMKwYBBAGBgVy8+0cBMA0G
+CSqGSIb3DQEBCwUAA4IBAQArwtwNO++7kStcJeMg3ekz2D/m/8UEjTA1rknBjQiQ
+P0FK7tNeRqus9i8PxthNWk+biRayvDzaGIBV7igpDBPfXemDgmW9Adc4MKyiQDfs
+YfkHi3xJKvsK2fQmyCs2InVDaKpVAkNFcgAW8nSOhGliqIxLb0EOLoLNwaktou0N
+XQHmRzY8S7aIr8K9Qo9y/+MLar+PS4h8l6FkLLkTICiFzE4/wje5S3NckAnadRJa
+QpjwM2S6NuA+tYWuOcN//r7BSpW/AZKanYWPzHMrKlqCh+9o7sthPd72+hObG9kx
+wSGdzfStNK1I1zM5LiI08WtXCvR6AfLANTo2x1AYhSxF
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert-policies.pem b/test/certs/ee-cert-policies.pem
new file mode 100644
index 000000000000..2f06d7433fd9
--- /dev/null
+++ b/test/certs/ee-cert-policies.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDPTCCAiWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMzAzMDgxMjIzMjNaGA8yMTIzMDMwOTEyMjMyM1owGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjgZkwgZYwHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4H
+mCKX4XOiMB8GA1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQC
+MAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1w
+bGUwGQYDVR0gBBIwEDAOBgwrBgEEAYGBXLz7RwEwDQYJKoZIhvcNAQELBQADggEB
+AGbWslmAAdMX3+5ChcnFrX+NqDGoyhb3PTgWdtlQB5qtWdIt4rSxN50OcQxFTX0D
+QOBabSzR0DDKrgfBe4waL19WsdEvR9GyO4M7ASze/A3IEZue9C9k0n7Vq8zDaAZl
+CiR/Zqo9nAOuhKHMgmC/NjUlX7STv5pJVgc4SH8VEKmSRZDmNihaOalUtK5X8/Oa
+dawKxsZcaP5IKnOEPPKjtVNJxBu5CXywJHsO0GcoDEnEx1/NLdFoJ6WFw8NuTyDK
+NGLq2MHEdyKaigHQlptEs9bXyu9McJjzbx0uXj3BenRULASreccFej0L1RU6jDlk
+D3brBn24UISaFRZoB7jsjok=
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert.pem b/test/certs/ee-cert.pem
new file mode 100644
index 000000000000..05d2318db17a
--- /dev/null
+++ b/test/certs/ee-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAxMTUwODE5NDlaGA8yMTE2MDExNjA4MTk0OVowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQBBtDxPYULl5b7VFC7/U0NgV8vTJk4zpPnUMMQ4
+QF2AWDFAek8oLKrz18KQ8M/DEhDxgkaoeXEMLT6BJUEVNYuFEYHEDGarl0nMDRXL
+xOgAExfz3Tf/pjsLaha5aWH7NyCSKWC+lYkIOJ/Kb/m/6QsDJoXsEC8AhrPfqJhz
+UzsCoxIlaDWqawH4+S8bdeX0tvs2VtJk/WOJHxMqXra6kgI4fAgyvr2kIZHinQ3y
+cgX40uAC38bwpE95kJ7FhSfQlE1Rt7sOspUj098Dd0RNDn2uKyOTxEqIELHfw4AX
+O3XAzt8qDyho8nEd/xiQ6qgsQnvXa+hSRJw42g3/czVskxRx
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-cert2.pem b/test/certs/ee-cert2.pem
new file mode 100644
index 000000000000..b6ad97696a05
--- /dev/null
+++ b/test/certs/ee-cert2.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAxMTUwODE5NDlaGA8yMTE2MDExNjA4MTk0OVowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBQBaJ1v+UdTZGJOltvDcSXTMk5QrTAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQC8XKL6Bh01xQv+3BTk4Kqu95/TEecZdBPsxU4r
+mCT829HsTw54Od7ID64Kzxi52RtJKPDnd3GB1tDAChEYI+U0g3582JiZCXPwxkC0
+y2YEhsXgatfOj0h5eT47FdmH7YeY4S6PxNo7Ek3ma5523M6dqcbP71fLvFptu5DZ
+dP9+I9hxeojAeumKONzVK4ADWthqgMgVKqjV34lqNNcWDEXgOUjJwT1HXnlwnCMk
+PtdnDSvzHEQFt25RZwkiOjimC97FZAPmsyYmLHc4q6s81ms5M4S9dackCA6TDRvv
+sOzivaeM07/94iKBINFpoHpJmD9Z5zE+vH2weMVjhSQnFsGc
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-client-chain.pem b/test/certs/ee-client-chain.pem
new file mode 100644
index 000000000000..27652fa29ae8
--- /dev/null
+++ b/test/certs/ee-client-chain.pem
@@ -0,0 +1,37 @@
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAxMTUwODE5NTBaGA8yMTE2MDExNjA4MTk1MFowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMCMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQB+x23yjviJ9/n0G65xjntoPCLpsZtqId+WvN/9
+sXGqRZyAnBWPFpWrf9qXdxXZpTw7KRfywnEVsUQP12XKCc9JH4tG4l/wCDaHi9qO
+pLstQskcXk40gWaU83ojjchdtDFBaxR5KxC83SR669Rw9mn66bWz/6zpK9VYohVh
+A5/3RqteQaeQETFbZdlb6e7jAjiGp6DmAiH/WLrVvMY8k0z81TD0+UjJqI9097mF
+VtNX0l+46/tR4zvyA4yYqxK+L8M57SjfwxvwUpDxxVVnRsf3kHhudeAc+UDWzqws
+n5P71o+AfbkYzhHsSFIZyYUnGv+JApFpcGEMEiHL2iBhCRdx
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4=
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-client.pem b/test/certs/ee-client.pem
new file mode 100644
index 000000000000..a6105b24c506
--- /dev/null
+++ b/test/certs/ee-client.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAxMTUwODE5NTBaGA8yMTE2MDExNjA4MTk1MFowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMCMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQB+x23yjviJ9/n0G65xjntoPCLpsZtqId+WvN/9
+sXGqRZyAnBWPFpWrf9qXdxXZpTw7KRfywnEVsUQP12XKCc9JH4tG4l/wCDaHi9qO
+pLstQskcXk40gWaU83ojjchdtDFBaxR5KxC83SR669Rw9mn66bWz/6zpK9VYohVh
+A5/3RqteQaeQETFbZdlb6e7jAjiGp6DmAiH/WLrVvMY8k0z81TD0+UjJqI9097mF
+VtNX0l+46/tR4zvyA4yYqxK+L8M57SjfwxvwUpDxxVVnRsf3kHhudeAc+UDWzqws
+n5P71o+AfbkYzhHsSFIZyYUnGv+JApFpcGEMEiHL2iBhCRdx
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-clientAuth.pem b/test/certs/ee-clientAuth.pem
new file mode 100644
index 000000000000..e6b88a75fd4b
--- /dev/null
+++ b/test/certs/ee-clientAuth.pem
@@ -0,0 +1,20 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAxMTUwODE5NTBaGA8yMTE2MDExNjA4MTk1MFowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMCMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQB+x23yjviJ9/n0G65xjntoPCLpsZtqId+WvN/9
+sXGqRZyAnBWPFpWrf9qXdxXZpTw7KRfywnEVsUQP12XKCc9JH4tG4l/wCDaHi9qO
+pLstQskcXk40gWaU83ojjchdtDFBaxR5KxC83SR669Rw9mn66bWz/6zpK9VYohVh
+A5/3RqteQaeQETFbZdlb6e7jAjiGp6DmAiH/WLrVvMY8k0z81TD0+UjJqI9097mF
+VtNX0l+46/tR4zvyA4yYqxK+L8M57SjfwxvwUpDxxVVnRsf3kHhudeAc+UDWzqws
+n5P71o+AfbkYzhHsSFIZyYUnGv+JApFpcGEMEiHL2iBhCRdxMAygCgYIKwYBBQUH
+AwI=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ee-ecdsa-client-chain.pem b/test/certs/ee-ecdsa-client-chain.pem
new file mode 100644
index 000000000000..ba04fdbd793e
--- /dev/null
+++ b/test/certs/ee-ecdsa-client-chain.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIICXDCCAUSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNzAyMTUxOTMxMTBaGA8yMTE3MDIxNjE5MzExMFowHDEaMBgGA1UEAwwRRUNE
+U0EgQ2xpZW50IEF1dGgwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATpeZcBUFBT
+zmRIEaNlNcLA3+dvPgc5T3y2/Cut6ixNHjGCM1KzMSyZC2LwBhtKAl1CJxAfPvoP
+WECveS18FWXWo4GAMH4wHQYDVR0OBBYEFKP225wj9a3okk5Y2GvNHvJqH8sAMB8G
+A1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQCMAAwEwYDVR0l
+BAwwCgYIKwYBBQUHAwIwHAYDVR0RBBUwE4IRRUNEU0EgQ2xpZW50IEF1dGgwDQYJ
+KoZIhvcNAQELBQADggEBAG8P/XEQnwHrd3O6GIAE5/Yloxqrjw5CoxbKmmVwrojz
+JGMHXPqE+V+RGUUnvP9Za8mIxtTi6hfvPRGNxRUhsPHXcQ52kwYf6r/ZeSXT0yFF
+ITVFFXM63p/jfF1NQgeEQ2NgPYJ9H6WTQbOu7EkaF/2E//DPUf93is8DKUgFLtdM
+p5Afb4yMul64wS2nHZIa3oR+15BDCQJ0FQtYX5bM2+6AZ0EZZT6q6t1cRRW8Tk4d
+YyUS5SSfxEdhdxnLPM5n88IYFhHV5klhgfp42CRXOWgLSBQeBZ8LqgUs7buHSxv5
+duOKJn5+mGvktlxvThrXpKgBx3yApThRKmBvb6Avrq8=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4=
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-ecdsa-key.pem b/test/certs/ee-ecdsa-key.pem
new file mode 100644
index 000000000000..6844a0b363ba
--- /dev/null
+++ b/test/certs/ee-ecdsa-key.pem
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi5sKk1Y8QjhMSK6P
+69wCABpFCv9/aCaMpLhlzAMfEjOhRANCAATpeZcBUFBTzmRIEaNlNcLA3+dvPgc5
+T3y2/Cut6ixNHjGCM1KzMSyZC2LwBhtKAl1CJxAfPvoPWECveS18FWXW
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-ed25519.pem b/test/certs/ee-ed25519.pem
new file mode 100644
index 000000000000..559179d018f7
--- /dev/null
+++ b/test/certs/ee-ed25519.pem
@@ -0,0 +1,38 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 6197312946105598768 (0x5601474a2a8dc330)
+ Signature Algorithm: ED25519
+ Issuer: CN = IETF Test Demo
+ Validity
+ Not Before: Aug 1 12:19:24 2016 GMT
+ Not After : Nov 11 16:34:03 2121 GMT
+ Subject: CN = IETF Test Demo
+ Subject Public Key Info:
+ Public Key Algorithm: X25519
+ X25519 Public-Key:
+ pub:
+ 85:20:f0:09:89:30:a7:54:74:8b:7d:dc:b4:3e:f7:
+ 5a:0d:bf:3a:0d:26:38:1a:f4:eb:a4:a9:8e:aa:9b:
+ 4e:6a
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ X509v3 Key Usage:
+ Key Agreement
+ X509v3 Subject Key Identifier:
+ 9B:1F:5E:ED:ED:04:33:85:E4:F7:BC:62:3C:59:75:B9:0B:C8:BB:3B
+ Signature Algorithm: ED25519
+ 72:b4:22:9c:d5:7b:85:10:ff:7c:28:59:e5:bb:1e:e8:b6:5f:
+ 74:39:94:dd:2f:8a:3d:6c:f3:23:28:d1:5e:3c:d1:56:e7:0a:
+ ea:99:ff:62:5c:48:0f:1c:24:24:35:98:1a:bb:ae:96:b9:93:
+ b3:cb:8e:45:e3:c0:ef:2e:5c:07
+-----BEGIN CERTIFICATE-----
+MIIBLjCB4aADAgECAghWAUdKKo3DMDAFBgMrZXAwGTEXMBUGA1UEAwwOSUVURiBU
+ZXN0IERlbW8wIBcNMTYwODAxMTIxOTI0WhgPMjEyMTExMTExNjM0MDNaMBkxFzAV
+BgNVBAMMDklFVEYgVGVzdCBEZW1vMCowBQYDK2VuAyEAhSDwCYkwp1R0i33ctD73
+Wg2/Og0mOBr066SpjqqbTmqjRTBDMA8GA1UdEwEB/wQFMAMBAQAwDgYDVR0PAQEA
+BAQDAgMIMCAGA1UdDgEBAAQWBBSbH17t7QQzheT3vGI8WXW5C8i7OzAFBgMrZXAD
+QQBytCKc1XuFEP98KFnlux7otl90OZTdL4o9bPMjKNFePNFW5wrqmf9iXEgPHCQk
+NZgau66WuZOzy45F48DvLlwH
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-expired.pem b/test/certs/ee-expired.pem
new file mode 100644
index 000000000000..bc490029dafa
--- /dev/null
+++ b/test/certs/ee-expired.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAe
+Fw0xNjAxMTUwODE5NDlaFw0xNjAxMTQwODE5NDlaMBkxFzAVBgNVBAMMDnNlcnZl
+ci5leGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqP+JWGGF
+rt7bLA/Vc/vit6gbenVgK9R9PHN2ta7eky9/JJBtyRz0ijjNn6KAFlbLtCy7k+UX
+H/8NxkP+MTT4KNh16aO7iILvo3LiU2IFRU3gMZfvqp0Q0lgNngaeMrsbCFZdZQ8/
+Zo7CNqAR/8BZNf1JHN0cQjMGeK4EOCPl53Vn05StWqlAH6xZEPUMwWStSsTGNVOz
+lmqCGxWL0Zmr5J5vlKrSluVX+4yRZIo8JBbG0hm+gmATO2Kw7T4ds8r5a98xuXqe
+S0dopynHP0riIie075Bj1+/Qckk+W625G9Qrb4Zo3dVzErhDydxBD6KjRk+LZ4iE
+D2H+eTQfSokftwIDAQABo30wezAdBgNVHQ4EFgQU55viKq2KbDrLdlHljgeYIpfh
+c6IwHwYDVR0jBBgwFoAUtBEz8dfiXvdTniAiEE+GBr8fyV4wCQYDVR0TBAIwADAT
+BgNVHSUEDDAKBggrBgEFBQcDATAZBgNVHREEEjAQgg5zZXJ2ZXIuZXhhbXBsZTAN
+BgkqhkiG9w0BAQsFAAOCAQEAaxdo2UEbO7GovfQ18HNQ8hTwZGTyv8h4nZuUcgkf
+6L63FLoeyakcNtg1jgpsXmIEuCvWGNrUZJiNt7IiWW8fqmEgVMsYNtldUrQfIhUC
+I91SQveIy16Yoebx+1o8JPGIwoN19mqRWXC48gnF6Tmb5XuPVA5niidVryJR2U1m
+xciwaDZMNFvEogWopMajZrRTt/hjZYXdFuBVrJPwoP0uc/qYO9e8r5rKdthE3A9B
+sRezBb1FRe1ssFshgHcCwXl8AWRlaDFOW3TJvzJgvW3hjEm9z9booKD5dNuUeWWN
+CgM8Igp1gjCLXo0a/ZhCwiyE+7uGsLkDjHoGclcGwW17YA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-key-1024.pem b/test/certs/ee-key-1024.pem
new file mode 100644
index 000000000000..ae53c1dec4c2
--- /dev/null
+++ b/test/certs/ee-key-1024.pem
@@ -0,0 +1,16 @@
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMF7WhfgK/SVsZua
+tHn3zm/MBe70jdr6zoRozB5M/1NmbVdsltVk1F0A5QERefKT0ri6SxYaYq/D3dtI
+o/y0koeMh7pmdRj4wPmoD2rty2P3vnGLfla51VMrsXvVbYr+f2AQ7Y0DFwwUE1R/
+bnL3gRnJhAjg48ac0nKKYEAmM9vFAgMBAAECgYAQTifqiS7LHu5n0aLSAIs6KrR5
+TczCno5W5EoHZ6/AxIoEaxdPBn9LEy85ZtKjGcgRX0nCpBia/WOt/jIrssACXMAN
+896k5PQVeA0ngaru/1nUlQDmNRZIhg5igQ5NGu3GzSsAdRrylDHIfOOgfYGpF4po
+DUr3C41rNu3l2K14RQJBAO6pxDNnlg5s1sxStLGb1w641mcuBgWroigu1GE6khrj
+Fwt8AWeIozyaDvln5ZRf9d7T1o+/fFXsKVHMBRObswMCQQDPiWI/ofyPht8h4nZq
+y4oF9Aq3yENypTCyWlk9ANvQ49F7pjfYZa5cz4AUsMjB6Vn/8MiCmSB9evJLq7Hw
+GBeXAkEA45id9G+aWBNPG/bbPmzhP7bhL/Bh6dJth2hxPG+AmYdqmJcfN77D/Kzm
+Ds4Xz9FbRa469UakqcPW+5xWUwauRQJABfJz5ErqB9rfjgMFTa4jeGQz4mxUsnZV
+XOcF45+grO26VQbAVu0i//naO72NIzFiqNjnhgaJTc82HkD/SlgGZQJAY5hpFMnl
+dG32dM26PsroXaXzgdfAnH9sBjmVV6gapM+O5wHBA30kvOb3ADp7CgAWH/I0xucY
+HaAbZ6gFL8le+g==
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-key-3072.pem b/test/certs/ee-key-3072.pem
new file mode 100644
index 000000000000..b0cdacb4afb4
--- /dev/null
+++ b/test/certs/ee-key-3072.pem
@@ -0,0 +1,40 @@
+-----BEGIN PRIVATE KEY-----
+MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQCX3qH/+MSc4mzb
+daOIobBDJ4s4+NGOTpA7k6D6th54CgD6CbJFULLdmb1ZLZUd0PUxVpoVS8mUS70u
+JX+xSodgee4OliI3dJpaaLdtr8SUWmOIryPK6SElOuRFNtAiv5dwX3GgbcK5R9G9
+MFnRmdSfMFmPpTKQXi3KzN8GCeV0CY2CqpHTPcMSLFckPLS0vXX532mKwQMj4Lt1
+6qNRYUTllxyp8U4wHjy8dc0aLm7/fkexZYEyxceCqxfV7JXlQkbeSHMQ1Wby7bL7
+8xrwmEQpQHYxG8kkvtEN1drBkNUPM7PXrT0pT+yZdDhn9hWEoYYgUQVelWr8zaDp
+FDjDK64vpAl/hqEmxvvKKXcRM6AL8S40csQfMLQYzKVaDMFF+D/ZYbIWSTQ++ipv
+8Czo7jIB0W/6CBxRvU/gJAQnfjDU3NPaSsC5d5LF5nPKPMRjP9O1jNBdpOpf2X2g
+WNBr+9fldpuFRvEYIx273FPyR/VgBDOONYx2gd1LqyFD6Z2/gWkCAwEAAQKCAYAK
+LOF/zAQoWsdeYOBnHCY6KaEbXRh1R3BEfZywj5k1A76TAilOmZySWmWkXvh5ufFj
+r+C9AonsBLMVL3AByfOOFD1N/uMmAgsBebiogblTE0dN9iYYx0vwOaTnukdxvJKB
+9fMgA5qjXVuBKIcsEvl6/PtTM4dSwuyghN+AgRM9lhJEKfeBRscWJaBlDigxX+xS
+pJRmto3mTn1g5iqxHipGk7xY6pEJik0Zd28ZjPjk52oYSavBYhz+9UWwkJxucuVA
+PAy4fI/dD3LTYtAmO/eORxI4TP5O5/GSyz6yt/74LyatA8b+9Utrrw7/oR6nmBPp
+I8b0kJt6956+2VffMGqsqrU7D7qugLLZakECklgLriRZoZN/g2a9ig2XA8rIseOn
+QVilPc3zhEvsA87ypdgXz/8R4NZ6rxBGXv/HDziqAOq33lq3a58+uZ1VccWqgfZC
+yalukOBm6tdkYHFHaTeCkA+3QJagN9GUvHTkTjxvK4k22iI+mQg/488oLpPBhYEC
+gcEAyRDj/BbZH/yvw7uZsUUdJDuq5SwYifXgRAEJBsiGgfWZPn5Q+GuZrPKVZHOV
+xg8SmWJfFV78X4Ld076i3QAm8XvXeY1HwWqihl+AZLVmj0B/LVzh2t55W0ailIOF
+30w5MnXvnCnf9EWsGqgCSdPUUa5qSUY7U3XykxBTpeh89QiHXbtKdpSfOwup2XJ2
+bI+jbw2ylyF0RnwAd7EFvm7Ip/zANl176sFkLYCPYptH+x+N4RHRg+XT/COK2NrA
+WFexAoHBAMFc0N8mMWFpPGwvIvjGE3l3vB3dspe9E9e3ssYcVjyp2jltMAKzVDUu
+DTK6CxnFQqh5OcSLfZ9ikMzrUafjPi/K628mx9zp//Dg97u/T5TuttpuYJmfHSB4
+8aCNCIi9JW0z8TNCpgLdGo/U9ztNvovPXfcwvyXzPQkGCdHseIK/NcL73iq66wKc
+/Hvy4CqZDnmwfAj1cRjidKJW49Bxx3v/7tIhQkquZwcZCOdpAUQDWXRGlrM4WbZe
+ineMzH1rOQKBwAox5A11Lx8zFcpr6bgWVArxR5IFMV1VbUCleMqyQje2t0V27C4c
+bpdZWX/VaIO5Ye0LEt0nis5g+VRyNxnTlyXpbJyKMFg7SvBbSUxR8lhTId+v9Pe/
+DhI1u6qiHJic6c2IM1UMvoFJQxe66xrJNdvKZzM972Yk9d7FFii0aBmYjByRkY3/
+rS82QS94YU7R3ayU2jhVhurIANIQ1MS6I0x5QVnAVbcqhSTVfu+2BelSyUPfPmtc
+rOn8915VgSk5kQKBwQCXz8V1zcirUDJORdvRMcKMdYNOd4cGNz7i+Kj1fb3/NuPM
+fntZQ25zqkpWb1bTztn85+CA/XuNrZc+K+saQwHKCCk8RVhZi6aUeixGTXev2JPb
+fxl8wz3dBte+U7xFjytZR5SxyDwKt4lpL61D9FAL+K0vrCgHJaff88u181DSZklR
+YuoU5lgo3xQkRJXXHAAPbo6TghBflzw3ULzgJNSX+GKKu+4OMEtXeUJSXVDPE0oi
+TmF3KGDXG/be0b6jIZECgcEAxID4P2MxTLq8rZF2qtQS/H+LJuCEVO4pcf40XmJg
+h4oQZyHNnmVUbgpHx/J+q3vgzcmcEdCxI9ii5WRwCmjWYeh0mSfhbPcv8yHPl+76
+fjdrLqc14hH9pHYd0tL/SMD8QiA+9JY8j+bT7439IfK/Zn36v1ngYkEMCzHZC1hN
+NoLFt9epDr1hbe1eoiOsTZXBMj5guNRqfCUEfEVVbn8aeMCCCQbfwTuxQDvbUBVn
+uvykSnGTciZF/7JrWgG28GD+
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-key-4096.pem b/test/certs/ee-key-4096.pem
new file mode 100644
index 000000000000..be076e696dec
--- /dev/null
+++ b/test/certs/ee-key-4096.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDLvapxpa2O+SD5
+omABQRE9kRg34LRXcTi2Kqc2d1J8yEF+aPXcNj3gtKJ9dgMkrWEPbG7zRtpmbIgx
+r9O7e0Z4j7KziPjmhb9Rr39YtqKmH0zsqk9l1umI3Y+SYBN02qReUxcZ9OP2z6W5
+KNDhXp2H5n73Ol3iNGhlXz+OaxMricOyagwMKkvKXtoYa6U+04yrP1a+ud3itNEF
+NpGxW5blGGH15Bgylsqq3An+bJkCUE038/NIM1tYRDcFbxjJ1QZ4OeAMcc6AcjiP
+lMgYfs4JJFb7FahtgZlDnC7217eMFBbMde7SNaj0XcTt7P0I8tX91Bo7PqQtGWZz
+FQWE4nKY5Drvv0yvhhlixzXC+r1x5EKrWvc75EKr1RQkTNUyXhUMM5DASI6pT1Tx
+0iWzG8konzRQ9EQXMDVVwlLmaNPgZTU0qgaGRMHdEgf8KYoh6fM9WRH4K8cKrthZ
+enORwANg1SE3uXFFk86gE2Q6XyMIjK9xl/g8FA3hdM4NelVOw7IAdYEf0taAGygm
+HRcUS8UYX/8aBACp6RDyYeXS9/57SBm+aCdAaiy2TZgUl889zF7chXCAwUGk4rV0
+NtA6RYKwKJCR1nXccg0c2kDR+WZHFwqWLCKVtO18eMeCFdhyenuvYAtuObWvluu/
+d6wu6+tS3nmRE1htNkgMNSTY4j+8+wIDAQABAoICAQCjG+W/dCcdhh87Gx6HAoN9
+6ZIc8f0O4CrJ1B3oAeD82wlr3TWvpZEmOxa3IGply5Qf1+x/QOMKCquCM8RrnMaP
+MGOdTfQOAVdoWvq1mAlgu0BHXBWSb1qpYs9VHSuWapAan6Sn+CEk75o6QQ3wz2GI
+ciSFYqnUtaY6OeXU663+Nh2A0Vtxxc7FZehukodJY+2DD4Mvz/duTtnjtYswFSYZ
+pMqQI5qnrYb1AJHTqTdZ3dXkDJ5g2BSx9nKiHA4ZTz0NtS/EZrwuosLbV/5VdfcW
+5IvqGa2sdYuwz/HdVlewgki6SVP34FOxxvwoiokMx/Q/cLXLZlvjaylUyqiPeQbK
+J8pUUVFtkMdm7Tpo6GcI+WPsn0uS7Zx6taaRnBdaz4j0GxGFav16p6phvyv+qjI+
+vi6WXvZBzKtUsMaZwRiWtaXl+4+buVrdqFN+qpamVSjTmksD7rIHoNbpe7OPjoB2
+DXw0fVinxCRu5gA/CINE+BETcBLEjMfRtp/CEGbsvCrs3YgOVTA/3su8Mk7AUFJm
+sUiiDPGoA4aXZgr08vx0+74bBPLIvabctIC2XUe9g/aObGY06Yq9BMc0i0nWt45j
+g89u2vpdFSROZKg/kDNH7NbsMUTm2Rqqu2UCwTfG7uRFyJ9AmM6Nw5i/zoa/2PHr
+sBLHmk5/CszS0abKC98xkQKCAQEA82oPsIalA69URrxQcMXwPD2RJ32jP0g9Zr7K
+crYwvbGwvUQSptDKTXyIxwz1w5ggrJFq/e1rH/KjHHvs6LHk6dNcDGA67vFiucOy
+1L72cZMCsIr2TL0ccS3OXQmeFPQrJCmQriJ5F1Dia4iPLHRuVORbV2WjtamLkijT
+BFqwFAvaddYIZti4n2wGS6El4+zFK5UMdbnbmEzRk7oqLeXsA6L6YZa2rK69tJUO
+JYDfDY6QyD1Xz3KGcW8D/MCGfw5Cnqb5OOtUJ1Gc35Mv74GseY9Rg2Q6zSfeqp+P
+wpDugGVVTXNaCUl64bjYejPdWQxvVQVRGmsUhtm0jbGn/BfD8wKCAQEA1kZ4PRQ4
+0oRn9IBiky3cDCDOhJE5tTRlN+Ooe6Es+DEGTKgpdcF0SFI4Dsqfnn9HrbcXQTUs
+HDgN7u36TB0Bpy9qe94bUZEIaccUcc3dEP0Qc8AUMbuNtJXvzh2wEhb4TPw6uNLA
+u6+0SRArXNPc6m612h3y2NSJVv5v9gy+4kchLj8AgLXvz2gCxFNyT6ZxvZzOK+DG
+pjfuzLR9BxRtU4uXcFBPG+IceR0z+tKGmcAehfBuAH4RHB3K58fSLQppOXfqfMGf
+sLx84E2AMaUiTAXnAri0UBaD66hD9ESSlka2NUpP67UVpo2+CsNk2mgV59EQkKlr
+q0UJVbbtJHfM2QKCAQB2+qbEoGvUS0UkdjPTi80LhQSIiw7ahdMNf8CxJYDZmBtN
+yBJd27ym93Jb6WfPvXJrJ4FmsUAlk5JLAAAjFaFQ8fESU4868F5TcubcuqL3jOZJ
+qQMPK3jVkZBHRcYxc9AKkw6XL16FGRIzgcKJ9jdf42cKZzIIP+FrBe1vOWzLv6d+
+5amhq9lCg6joGtLMgBU4Ylh+yuQdo57lWJ/5Y2Nju6wrO2H7MkakGB+cEUv18nOu
+jN15Fv/EPoFycCDNxgimR/OV8OFnfqrxVZ6esYG+wWEUmk9rrEtYlznL3s/VjrKN
+cw7Vb0dTQej+go91UXCx3DFyeljEOXHZuLblsDAlAoIBAHyComfLkmExsz5uQ9mG
+MnGRtq9tu/zBn3dkgIimVX0675Anvz+/1BQaQpzFvQ7aowocdBTeEu2q3N3Txzfn
+OwitEtE7dOBmyF6+4fBnUWgHxUGdgZ6Mf4FKBvjcY21/j3Ucs/ql7HyjUr2J+ciN
+C7fl8SH3eR/qEIxOeTyel2ThNDStQ1uHXPxGUiVG4AvMihdGQL9ac9QueELXNjeg
+9Q4w9SS8Zdur/iOahpPfNXuuGY528VSz7LlLzpX0lPq7K/3K4qTv1h1aya2FG1K9
+xDosy9nW/l/zVWDge+w61HsiR8qbjelHZndLsfyLIdWP2frEjz2gVQJGsW/vRcmF
+G7ECggEAWItQ0NV2EhiWyB6+9lzEx7yCb4UyAOxZ+QmISVN27NFS+0uz5MKYtZ1s
+ELjbL2z4TMYlcdmV2knAqrEqZS8rstPL4c6Dj/hRm0QeWKzi4FXZXC8nYjHrCTtN
++l0VSEPc9P8eajRYsG3lDJT/E7i9UQLRJNbd9uNk9r1L907myRv1rE7P/+nUmYna
+7iRto8ID4Qm+we3xZDkRuJVzksyz3TMGEhpE3Y2yM12Lc2UL9e9khWTvQj7rUAvY
+7HdTVBtYZO+4H3zG++dLefYK9SHixe1hfdRmmcDi0MbX777j3HOakhAKw6TvT9R6
+Jo4wAiS72oydZ4JQ82eli3BipOQa6w==
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-key-768.pem b/test/certs/ee-key-768.pem
new file mode 100644
index 000000000000..0d44f8552932
--- /dev/null
+++ b/test/certs/ee-key-768.pem
@@ -0,0 +1,13 @@
+-----BEGIN PRIVATE KEY-----
+MIIB5QIBADANBgkqhkiG9w0BAQEFAASCAc8wggHLAgEAAmEAwCvrPAynx+7VtpFz
+4cWZW3/n3/nMwK4fxkWSB0kbVUhQaYiaQGWEfB4JpRz5rPt8NW5m2aVGT7mMjScu
+8YyFa3IDdpBeQL1n8VQUH3FLySgQHC1bkkzwyzQM8JirCdl/AgMBAAECYQCzO0MW
+qqcBrhvdPyPZerZhxJW7K/xv6PbxsYlVCjZYAC4ff6x+SzCZolpUiQXE9Hdyhlyk
+alcqn2vT5TagWk64YUmIMP7BCT2Ps/IW0nQl07k27c2BNq3IzdRnBz5SbQECMQDg
+9UxISqFOG6sLdZIKA88Q+M2HE/MdzwiJby/bSUXhn5aluZqjR60nGPqAb2S/r98C
+MQDasGzUTXqEYOPsAL4irzKMMiMdqbj6dNHsmo1GIYKx8PuN193i/cNd5XDv78Gm
+imECMQC10IvewbKtVl9f2540ye9JYE18pvsPVI0pxtt++DGqsTkoqGH7JasktmN/
++ogLBTECMBf9/xKTpXtcfeTod/OqMOt8nKmmcyrXIijJE/K7vnDzNUXshuVeXc6x
+W2CXdzFkQQIweyLLA6etAJGsmCRwIgnfp1ubmVdfPou68byHSnzAf4/GxBriSd5b
+EQcYwjE7SDI7
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-key-8192.pem b/test/certs/ee-key-8192.pem
new file mode 100644
index 000000000000..febc0a15e384
--- /dev/null
+++ b/test/certs/ee-key-8192.pem
@@ -0,0 +1,100 @@
+-----BEGIN PRIVATE KEY-----
+MIISRAIBADANBgkqhkiG9w0BAQEFAASCEi4wghIqAgEAAoIEAQDNaO0TIBXbjdhQ
+eIZu9YYZNyCqHRDbwjInO/RjdbasSFgukI3mEaq53eKGGK/ESYZLMqwB8Xs1WZmv
+tgJgDa+nhkAmIxnD3iZ+asdxlmI/S8VXVeOAcsYuifooDAxM3GpInGBIPwuGzJa+
+/zrPP+JNp7iayAaqlLMVsSB0ZusPVy6vnfOz18lQNvhkGbVbGbt0YEqwDFNjAPAp
+cjjG36i93ynMLVP4BJSDrwcvuoIWKjvtuQ98JmBeGC9SQZuQOLLHpd9ih2iAiNgE
+PMnqWqN9eoKEMBq4NKBE4jLm51DfvG0rHxSETULop8pLS9qZBB3HDTnU2BvW/zSW
+pz2K18nDlKk2XkCcYFJbu/nwBJjjowFN0dlJGM7YTYIzKLO0p7kZ4FMzOCwe0nbk
+/bY5OmlK0m3dja3MOYK31bSwqIwkgKpolpkp0CXmoKwwKivvFEZFUym1eyETqpp+
+CvOhmZTuzAw5lkw64Wi7dWEWQfKz4UD36PiNmeRt3K5N12622VPSxIHwPh3n6nxv
+5o+LhnG+e4LvWqRqNxgzefGLnzEfqc8z3kM1o5HEj8ftevSVZsHceDIPD7AdT8EG
+No+K8V/BFb68ZMRgEqpnqNLJ9wDSV1Lht2nRYH570R8l+n9+k0gJUGYRYF188NbP
+oCnfG3VLVLObqPuOiMBupcCDR+1TkuKexVsnjeRuD2oPypY5J/Z78m+d/FdrvwjS
+B9jtCbzb4Xv5TiDFNPXzVHYEVIexm5dyktl3SE2xj/mLtA7Avd0AAHpyzGvraMly
+w//kL7qu9lREigFNKkdrUZ5Qehc5xT+OAuWUzzDWbeA3iYDt0+cl6lB8RBezp9bw
+kLn1X+RFrq3lKSMBMJXeDGVhuDAZ3DjEJCZ9pmod2M2cIBJREkYZkjhQbRPsGlfJ
+snJJlwmvUBTp4RXwXj2JvIQKYcPmqjJQW23rHQ5Dbux6WXs+6F8py/osYpui+6RC
+ae2RHbyaQ9KUbB94bgaGsyb0etKLn1AeYTydt0EYO2+A6CAd0lr0vLT1AYEf3U1y
+EoWFKHQfGUWsxUcANHihSY3DISJfYLASWtQ4FlB0l5va/+v5G3Gylug/NIUzcAqZ
+NP15IWcaQy9NHayuEnW+V6m5pw2HauI+fEVz0ppJeG7FxbM0Q9MsgYRgXgMc0ZjW
+VEVEGqVGgVhCckDSbVHt8kti2E/x5i9FqeXWW6/h1ah13NcpDm/9XR98LJe7nx+P
+GiFR9/SvooZ1jfN/OUIn6Kk0oY4osVEDWHkLDkKmGOw3fZ9LpMTh8BTGG50qaFup
+1u3DB0i5oUs5Os/+mUuQSDW5Ck+dYYgWARoWOgTS6FtRah+WMCVI6VdfEcuox4V1
+zNEYcXI7AgMBAAECggQBAL3u0qBHn85m52jpOS0qe/ee4OZLgAYkF+ntZzn8Y5AE
+SP2tjnf5SAsbX1UtSIFQlwu7bA9T8eBP3Gr7+lBE93IJEhHxjOZu6Nsl8wtVybzL
+XEs4UOe5uQTZcmVLVqhPeztu1RyYpxja3lz3dbKjWKcDehAs+vUKEFnzcZYQgDOs
+IrAidnCKDEzOt3kfyHDXZ1zhmM4WZ5h5CpjYVCWYM9h1nJl+JFGGMqlc02FPrO+/
+17Al2WqrtZnr9P2zSpvdwXoYJ2lc2cVYQ54Pc4jujJP/DuYZ8Or5RmTLX9PgegiX
+m74uu/Ll2gN0+voKxrOMedhPo3Tq6zsuubrAI4jZpWfic2ChYE74Rc8rDp3gMlry
+o8cITkln1gNuEAEsFpbqK58ArQ4EV8+cPnHZI4DhQPD9iLc/RUA8wWEpCy36e7NZ
+Abk536ApJpKNaQoURJGKBrwdfMihdOFRdA8uIz7+2xa/uGIbVptvSD9l9wL0se2g
+UEmrswCEFxN65fV2SZprdDXEnH2/gjmquati3sJd65j9bgHSp4rLLOaUUEQRTAQC
+KWTFlRHpEGVXqb8uXTA0Vvd8cJU6pVdFIq+TDcGlFSxd5gMfjfFj8QtusJItgiX8
+ttedmAwRlIL6yDl+2hr5JrfuDqLsnyVjMM3FRFJXemrQhE9fvlN6oazuOQdrH8iQ
+tUxYZSmIz79VxCReInEkofePziEmqytYgW5M3WKo4Q7GegZZhR3b7HNT16JrDvfi
+jpWGVmyxHuwzKDj+shco29WK+Dh0pNXBmnLk3iHcpOv2W/dl47kiH6COvoVTU+7D
+TNFDJRQU86CkkFx6adwj0UQGDmkz6h22i1f/Q0zGUwVHgbFU53Lzr3o+lpPvxtXM
+W6Gt0aLVWi63AKPSMc3Sl80yZiujvfXKtesceD/cLExg5zOPLLZK/8WY2r4qKznB
+gLx6n2xQDHoD4EUMxY0o4qwkxtQK/aD1MyaX+kF54Fa8gR/ZrCQt8/wKCNBLG6dT
+gDELMzLQO7n23NIxbWNQKepcK7inrXa4CfpGGUTT/cZTASSCTKMPsIc3a4AEi7b5
+oj9foLXCxtwEcUVzI5IIpO9uKvnWqLMrnkak4FHLmKVkIGjkNanYlSKB0FidZAKV
+a9dxnzKf2sZLGedK2Dqyiva/yJDUGSJvuU4Tu42F8+Oyw1EvdojaR5pVyuxb9iwi
+0plvG5Lrz5thvppF0phcppONf+J7XODOLxBX28L5vxutbCwxR/v/9i/k8eDSdPzA
+lVn0IZLsHvaf2XKQMu2Xvr/ps4nbXovKQInFf69bxfFPXH2DafXhEHrQ4w/kJZcy
+n7JSgO6h49PfbmjagcmJjNsqi1wOFrbNoqCyQWEHHAkCggIBAPVjU6EbW0hNba9n
+QQQefeJqBabRx4xKGXREn6XgXXdFGmg2mZS2gwc6qA82z89TSOm119DcA9ON2OVf
+Exp59lRJX3bRk7H62VDU0fV9OoaGOwbsGXlT+W+ufIXavVtD42xwCDI3UHquntDm
+a3+hZwgOFu3WUBUnv+52HegggNuBrjTq6W2vL4huDNzPRplu5enNJZ4kwumDVEBD
+MZpTIa6m59KbrjYvXy5hUj0Fgw8Web9xLdg6bZ4Z12sJu3M28lhClE2z7iGSRk6+
+rTG+acjOoWXWnZ+n6IszhdkFn6rS0NbwmEWw41FAnb8gESezfF7bFuxLUiAG/Uva
+VnQ1krtPswIIwAYq5vh6IFQhIIB53MmR5oZRMk1QvHE0rBrR8bBAd3FnnyWOvMDs
+PVd4c6pVnEDxtvyZxJoXwiAt/HL+PmlZq/v8kVrejH5Vk5wPawB1TabAEKBxSW6x
+K62RQbZVXzpQB8/eaxqwqGFdr3lAczdnAYRNS0jq2HT4HMmgV+Y1uvIQzLKbNlQ0
+Dac0E3JXPGDNxnx73vn7mP5EO52QB2wCIPDryoOT8AiyraoLP6wZRTbsS92sYsXp
+0gkmFbPKYCLM2iBt9EeD7GcKm6Ck0gBHBgBJwbuVe3O+EemUllryg3by0qdORBla
+08kpRDqfk3oTW4/Vqt3Di3w/cwalAoICAQDWSwEcwNH4HXt6g1osN3iKokBfGMr7
+NMKAiZy4OXJ8d3JRXONzHUlJSx5S2F9ZRFToPwBoj763+Ng8LOdWjkD60cfVg29t
+lI6+YeJwgUxpLZsDv1T4VQYAzzp+5jpH41CDKo0yNoybbLSMAb1tcoo+HYCIY4af
+sv4JKB1lGwmTY8lsX1E7frpuCgxY3NXkQbMco2b/rYwscFGMYGJcXRuEq8I/SdDK
+2ObCfcvsMp3OdzSIiywaRhBdiFF61DrA9PIxtCMGnqBetwvNzLf5R3QbaR0bjrzN
+h0lFtkCJwoy5mUNw7WB2hGbNrtNaH8UDhvdpPHL9iNAom3P0up8kFjADXabs/Cry
+RH2K00TJtILBU4GGEGvMpVdpqPypFABox/vL5HN//cIpkFVADPE9URdGolhHe5TE
+Glvqbo1I2KThybJp0875HRWNwBwzOb08UPjLs2ckE6lzesn/AGa0dOUIXgO8iERq
+S4oEggow35tLrvgAGcclNcfnW3IxFRPDfSK8NDOwXIK9hfNEAEtKcZkCGcb8Nxxe
+4ec5UKTLoOTMRWRHS6Vl2JeMS2O/lpRYtt7vgyxKVz36bBG+qHBu31uNRtLxmXuU
+rPi1n//jOHEb7vPpWA8oDU6ZQMGBE4FZsF2dVCXKxrCJKZCQ7R3FqQ9bxOtuLBOz
+mRDhLGCXpOQfXwKCAgEAwDwAzuxMdXba35dnEqAEhDQEm2wqBFgkWrZLzznWXtJO
+3qcvZ5YXTbmA4PJSmBupuhUPrfo+MSQlb4MsxwgWlm8ojz+dkcdvKWif1s405CAR
+69lYF3lWpkwuFvqGbxHe/xtBAH3e2U0k84gfXMwHmALZqZbEA96w+FGmGiwkZlHQ
+NHp3RcsA1MNJ5k2nBBohmShyONKZsy+D+BfrqvdHIrh0UcROFPrFeOMa9tzzkAVO
+eVBj1snnB/08igkExTydW9FEtx6nBbu+wn+T1K1T19EwFUStFN8ISMyjJaHHNJ6U
+pl2zHJ13ZzbUnV60scJlQzYlXhWfj6GKGzs/kShK+9xy4rwSGoLPkIaz/tQ4zw0o
+juxyiHThkDoYdiMKVLR1v1qxd7Dytwx8CDLJ11VwX1dT4ni5nmej4geMt4LvCvLr
+18I8/lodUO+ZZnsJ+S8G50P+AgziuZ4mJcY77mwl634z7M23YPvgMfeE4UnwZm+8
+EwHp6UhYGxaHXhLlEns/gQREoM/SXHVFeW+R5pPgTCnVDg0GWoz74CBe+YpgnY2w
+kseUIMjHTI6/c0Du1ZCcX+koFN/GizE568vCFBK227NF3t1WYCNjRAcwUoS36IBW
+V4tMQzuEvrxbCxAyniceJr9nh+6wYgrpRGeoFCX04mwSr4asqyB7C+Hdywc1yFUC
+ggIBAIZRIPNa0MEKCbly13RbmIycwmhY6/Gk0j0rBDZcm6v0Wo0xAcfHlYYBNZKL
+2MflEqs3whPH9azupuqg4qfYJlaQYwcriQ5QTWB7jikigjhyw3UH2kSFVmvveCTO
+Pb2Nd4ufgjz1ABDzg/81n/wYDRp993CFoX47/QrUQAh9d/UQWNI6tHnsJwKN/cs9
+MDwQCiprKUYdC31XMWYhi8WE/pib5/cvV1WtuoYxvz3fRBaDlUP4p74YKG3X4epx
+WBpV7fDFjia6Cp8TcKygIrh21wnPStVZFHJm18CASdePQBGdRS5lO09OEfneGM+m
+liBt2mn138WWmZK6TWYaC2HdHl8dtmFYdbrAv0fiwH0FTefLZaYYaNku0amCqEt6
+I/+JSgQ0v0h8T9UpiKXK9vKN/17gpyC3DzoTo4U/ogME9+QmPlQi1NpEJpxgy8w3
+5qsFvcxAOOfeAxpE3pOdNsLpeh1SgFkNuIQ/sNS+hZC4t2gq1XuKrM5f9VrIcLzf
+DzI7HyiEN9nVQoV0jlQTMx4IMfWlHpo8GOZIBlxgdcrEoGSBIiel/JfnuKXRI0aV
+JYqtpPLPb1VxdYGfd0ff4Ak+qu3UdKfGojVAbeu5y/QqDouJrQyXi3h5Tsi0VBWJ
+mkwTRbo1YjLFcyWmDd0pIr4gB2Zn+YFm0zqBOJlK7YhfbDVVAoICAB0rjXDlqNvy
+rtfomcIDs/fUPdiEvAOyphJowYT99JzRGAGGcXkQcuHIMlzftkwJ/x3uDD9tEwrS
+lUAGvKOR5hXbNkH4MJM+4wXAfo+4CJV/+U6pLtasuYXo+OZnB9D0jEf1WnXJPyQ5
+Jai63gwGUumBhReVxXMgPDhvyWT03c5nhQrGXz65A4q7K3g0CoqZVCtljEbDUxVZ
+6HtwCPtOli20GDJtZyNRX+8HwWBtEVey0MQPpb9vqxjouEJaLSpIMNHvdRcVIPmv
+v2IPSs3t+JOzpJlY4cgtDvDo5e/IMvQkWEMR/FaKDeOEI6cWp+DqOqX5CHpyYHYo
+JtcndBhBh86LDFugdS0y02yCvWcSaoebql7wl7/SR92iyfuOlbcIlrowKc8i/lrq
+rKmga43AehuKgtEZ/Ko9nGF3/iWqmwE6WfwnLMHCrztHrPoAH22+KIFiadxCcS3r
+FUDrToF5vtFVcp92DkSnTfxjKTrdLOMaxLkCm7Bdy61zscr8Pt+4j7grZQiOf5hV
+9G5TRJ4FzCeQlRYFf6GYqq/sXyEfqcl5/t3e2MAhAQXb+7TToKpTXHB8Giu4kwof
++5Z4S51thYRBoBiyWndp+4Ik9MIojEeFC6mPQYXj0Mp19kliGmBos9GY0xvqi9Es
+DGbpgiDY22rJfsfOSuuto687FIjKyo5T
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-key-ec-explicit.pem b/test/certs/ee-key-ec-explicit.pem
new file mode 100644
index 000000000000..d847d85dbec2
--- /dev/null
+++ b/test/certs/ee-key-ec-explicit.pem
@@ -0,0 +1,10 @@
+-----BEGIN PRIVATE KEY-----
+MIIBeQIBADCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAAB
+AAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA
+///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMV
+AMSdNgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg
+9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8A
+AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBBG0wawIBAQQg0cmpcTcEYG5G
+ZaVkGjtsBc3sLZn1EuV9qNK2qx6iNzmhRANCAAT7tMM/sL1WpA9Oeqglz8W9/83j
+kFf6UF+Z+IYF5Eq1Ky+sRFSXKbNDj+fFW3KajMCAXFDSbL33wcdNJUKPtKrn
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-key-ec-named-explicit.pem b/test/certs/ee-key-ec-named-explicit.pem
new file mode 100644
index 000000000000..28f81e9569a7
--- /dev/null
+++ b/test/certs/ee-key-ec-named-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg2ue+X5ZFJPJPQG2E
+WQY4ALv2PkPp2Gy6KrMiokgmjkehRANCAAQv5PnMStW/Wx9lpvjlJTsFIjc2wBv1
+4sNuMh1hfNX8ZJcoCfAAKYu6ujxXt328GWBMaubRbBjOd/eqpEsttYKz
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-key-ec-named-named.pem b/test/certs/ee-key-ec-named-named.pem
new file mode 100644
index 000000000000..d627bcf0dd7b
--- /dev/null
+++ b/test/certs/ee-key-ec-named-named.pem
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGSoneIKG3//ujXGu
+/EoJdNhpKZj026EF/YQ5FblUBWahRANCAAS0YU57+RFRWxr/frnL+vOYkY3h9roK
+nvxCG07wK5tevEYtSdKz0KsHvDBDatw1r3JNv+m2p54/3AqFPAZ35b0P
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-key.pem b/test/certs/ee-key.pem
new file mode 100644
index 000000000000..9bc2a84837fd
--- /dev/null
+++ b/test/certs/ee-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCo/4lYYYWu3tss
+D9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT5Rcf/w3G
+Q/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1lDz9mjsI2
+oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1U7OWaoIb
+FYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5ep5LR2in
+Kcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tniIQPYf55
+NB9KiR+3AgMBAAECggEAFvp/40uHUMquhGQ2wsl5/zzVV6ZECFGhIaoVdwiq7Npl
+cERPGSxdt7mXg+AliGQO2JXIf4iDx273oYC3PFuWbn9YMQd5RUuAZ/oD+hB25QB8
+vmGJTeqDUgZ0+4qs0fsM5upPUqFrHnfEwoarS9oMh0HEQi9yWzHy7E/E9Rk0dm8Q
+qAwfKKqqwBe0RIp6GOwRJ2AO4NLvPh1oddVX15zvVeDP5pmHScZKtGXf9sIKfJJo
+JN7N5UaviOKEGpQtxKVNOjn1wYusvzrvz3U3TmvyXTGkPCdSxK/6bz0LN+Lwyfzw
+RpSoNUe/cREZJkXDIIaqvmzlQVk1aKDdAx4+8ltyWQKBgQDahgSMZAAeGuQwtI+S
+jor9dNWcxEr5Uf/iw5gWmp5E59CSyc35Zj5rdf4M12X7jPRqAbFcM6FgERtbKyYd
+lg+PGgcKMYXKXJWimA6xU06+wwRl1iI/j718FCLeov6Lt17VHr8sjO3GiZ/WtHz1
+H6mqV8i9vcClmA6IyS+EQvtkBQKBgQDF+y0JwcbEzS3YqTHy4DGQtcCOkcLi+WM5
+APch7pev4I9MTgZdRnC6ZjnYKXQU9nzALZrH1PoHnFRZbsXbCFsmTdh/6g1L0b7B
+/zfZhB+9LiB7NBpfHiUydj1JQfkw/EvnLbs7r5EYGbpkMhpzmmzE9Yv0d+xj1CPd
+6kz/6CRdiwKBgBE1ZpxLr7qvMXModPn8obNuBPhweNsDexw3fP2itX4Fp2Y34DGY
+vKenxhbqy4wwwHqsoXP6WOYA0t+uGTVRQO5rBUznM3sJKXuBb/7E6bmaD/mZEF9j
+CXABAfH4cgU8roon/rQacQsmgWDeG80N7kWM3jEbBVXFELfy5/wJblSlAoGAUZax
+eNPiljf4LNGNRAogYwKD2D05k1AzE8rSDanF2TUx2MBO3yGoUyjNrcdnjzwFLS2e
+G7wpTfmeyTxdTWakKaTrE8vgrt5BPrFu0rUgX1YjDKLsO0axDZqspwQJLabLoPm3
+r2Eq6kOwDJqZTArXyFNo2daSFJHYNhvYn52LXwECgYB9CRrPMe0sWdbVPm55bXGM
+Ern05LQuaLaDZjsbsaH9Q5YPk99Sq7jklyQ3ZuHodSLAArHGu/96uu66xtMrRYcj
+c89fqFeqc/BwnkodvWJ3K80UNulnjfOcPVAPHaAr9GE9rJcjICNpu2+wJ2wi4JAF
+rLxFTZXBDbnGZ9QtcGcJSw==
+-----END PRIVATE KEY-----
diff --git a/test/certs/ee-name2.pem b/test/certs/ee-name2.pem
new file mode 100644
index 000000000000..234704efefee
--- /dev/null
+++ b/test/certs/ee-name2.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDITCCAgmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAOMQwwCgYDVQQDDANDQTIw
+IBcNMTYwMTE1MDgxOTQ5WhgPMjExNjAxMTYwODE5NDlaMBkxFzAVBgNVBAMMDnNl
+cnZlci5leGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqP+J
+WGGFrt7bLA/Vc/vit6gbenVgK9R9PHN2ta7eky9/JJBtyRz0ijjNn6KAFlbLtCy7
+k+UXH/8NxkP+MTT4KNh16aO7iILvo3LiU2IFRU3gMZfvqp0Q0lgNngaeMrsbCFZd
+ZQ8/Zo7CNqAR/8BZNf1JHN0cQjMGeK4EOCPl53Vn05StWqlAH6xZEPUMwWStSsTG
+NVOzlmqCGxWL0Zmr5J5vlKrSluVX+4yRZIo8JBbG0hm+gmATO2Kw7T4ds8r5a98x
+uXqeS0dopynHP0riIie075Bj1+/Qckk+W625G9Qrb4Zo3dVzErhDydxBD6KjRk+L
+Z4iED2H+eTQfSokftwIDAQABo30wezAdBgNVHQ4EFgQU55viKq2KbDrLdlHljgeY
+Ipfhc6IwHwYDVR0jBBgwFoAUtBEz8dfiXvdTniAiEE+GBr8fyV4wCQYDVR0TBAIw
+ADATBgNVHSUEDDAKBggrBgEFBQcDATAZBgNVHREEEjAQgg5zZXJ2ZXIuZXhhbXBs
+ZTANBgkqhkiG9w0BAQsFAAOCAQEAS963QA7e4VCU5bdx4fBV9j5I6KhlEZnLOj5h
+MYH1gr3/+V2cdbjctMvsZHB9NLfha7PcDyYHhPDjFuSwu834r31opR4LaSJKlGiW
+l+K6mhGk1ofLIQLJedFFdBCuUAHMsTN7yWY6398y72XglJ+KtQh9wUd9g6H6QMzN
+OWlZZmVQjVllFOj3y5v1YsJ9JlUFDDzdJVB9KgiyAIj6hcz7pJX42nFtsQvTHBUT
+r6J+ViasAnOGjBSVsE5MQw9dYVgSbVd3ftUZkDkLQ5ShTZ5N2ndIMY2xzw7lifrX
+O34gCkt55vyZNkOzZgCfMglkloYm7ww7pofZVfjmkmm3k/HGFw==
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-pathlen.pem b/test/certs/ee-pathlen.pem
new file mode 100644
index 000000000000..b678a3a870b6
--- /dev/null
+++ b/test/certs/ee-pathlen.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC8zCCAdugAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0yMTAzMDIxMTU3NDlaGA8yMTIxMDMwMzExNTc0OVowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjUDBOMAwGA1UdEwQFMAMCAQAwHQYDVR0OBBYEFOeb
+4iqtimw6y3ZR5Y4HmCKX4XOiMB8GA1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/
+H8leMA0GCSqGSIb3DQEBCwUAA4IBAQB2B+oEG+TZGSG4A2MTYF/Oa3if1bQQeWm6
+ysqitpvrfcGsFGGy6bHJgS2NHcmNuCqN6YBDJEMKoLSz+t4GDkmMghQ1HUpXZPzt
+A+Wzg3MTKvWbXeCJroVK/pq4kXWMJ5GihzVsgWHBYFDmzzcnDf/R1Y0XKOAld/vP
+ePVTDh1mAyjXHdUPsPi35GUny38+PyPRoyCN2399D35CJAGqyNNvTtygoS3ncjbe
+URXjfoDLQh4+y17aOPm8SAZQ4h5zyi6ioRuq+je1Cd+y2erhRyFzlvXDRlUlP9XA
+r4OtgpusNyeuAWGRx168TD8aOt+dcc9JiDqTnLpBCwQYI0Q3LASO
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-pss-cert.pem b/test/certs/ee-pss-cert.pem
new file mode 100644
index 000000000000..e908783b5536
--- /dev/null
+++ b/test/certs/ee-pss-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdDCCAiygAwIBAgIBAjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEa
+MBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIDARMQ8wDQYDVQQDDAZDQS1Q
+U1MwIBcNMjEwMTI2MTAwNjMzWhgPMjEyMTAxMjcxMDA2MzNaMBExDzANBgNVBAMM
+BkVFLVBTUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKj/iVhhha7e
+2ywP1XP74reoG3p1YCvUfTxzdrWu3pMvfySQbckc9Io4zZ+igBZWy7Qsu5PlFx//
+DcZD/jE0+CjYdemju4iC76Ny4lNiBUVN4DGX76qdENJYDZ4GnjK7GwhWXWUPP2aO
+wjagEf/AWTX9SRzdHEIzBniuBDgj5ed1Z9OUrVqpQB+sWRD1DMFkrUrExjVTs5Zq
+ghsVi9GZq+Seb5Sq0pblV/uMkWSKPCQWxtIZvoJgEztisO0+HbPK+WvfMbl6nktH
+aKcpxz9K4iIntO+QY9fv0HJJPlutuRvUK2+GaN3VcxK4Q8ncQQ+io0ZPi2eIhA9h
+/nk0H0qJH7cCAwEAAaN1MHMwHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4HmCKX4XOi
+MB8GA1UdIwQYMBaAFBn5oQP1XMVpIe1VAR8VHRx0C4KwMAkGA1UdEwQCMAAwEwYD
+VR0lBAwwCgYIKwYBBQUHAwEwEQYDVR0RBAowCIIGRUUtUFNTMD0GCSqGSIb3DQEB
+CjAwoA0wCwYJYIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaID
+AgEgA4IBAQCzCXb5XpMvhuwWso9wj4B8AJjCugMlGdrLXIj3ueqyS1qSEcFp1meO
+9jMDCjAkitTdZjf3gqEghC/joUd+XAw3JfOPOl36WlNrm9bwZTnfnCYFRrdprfMo
+Q1Kqy9SNvDeHZZVcGeU3PZSt+EabmR9mQODg/qfpa9/3WktzFbvxlPOS7Tb0n2tn
+vQnTmyrmGN2/o8X1qGQgETw5bH3csKgsPh668zN/gv3DxNN0EVACLaOSahNsNQa7
+KCcl1ez5KcFc0QIlQajhorTYOIeTb8UmR4wdy5C4Nd9P5OKv1sQvVO9PtswAv/s7
+Vs48cDO1+ASn0KjN41hXN5+fOIlNqOeU
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-pss-sha1-cert.pem b/test/certs/ee-pss-sha1-cert.pem
new file mode 100644
index 000000000000..b504aea5813a
--- /dev/null
+++ b/test/certs/ee-pss-sha1-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDFDCCAfygAwIBAgIBAjANBgkqhkiG9w0BAQowADANMQswCQYDVQQDDAJDQTAg
+Fw0xNzA0MjQyMTE5NDlaGA8yMTE3MDQyNTIxMTk0OVowEzERMA8GA1UEAwwIUFNT
+LVNIQTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lYYYWu3tss
+D9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT5Rcf/w3G
+Q/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1lDz9mjsI2
+oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1U7OWaoIb
+FYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5ep5LR2in
+Kcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tniIQPYf55
+NB9KiR+3AgMBAAGjdzB1MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gil+FzojAf
+BgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAAMBMGA1Ud
+JQQMMAoGCCsGAQUFBwMBMBMGA1UdEQQMMAqCCFBTUy1TSEExMA0GCSqGSIb3DQEB
+CjAAA4IBAQCC4qIOu7FVYMvRx13IrvzviF+RFRRfAD5NZSPFw5+riLMeRlA4Pdw/
+vCctNIpqjDaSFu8BRTUuyHPXSIvPo0Rl64TsfQNHP1Ut1/8XCecYCEBx/ROJHbM5
+YjoHMCAy+mR3f4BK1827Mp5U/wRJ6ljvE5EbALQ06ZEuIO6zqEAO6AROUCjWSyFd
+z9fkEHS0XmploIywH4QXR7X+ueWOE3n76x+vziM4qoGsYxy0sxePfTWM1DscT1Kt
+l5skZdZEKo6J8m8ImxfmtLutky2/tw5cdeWbovX3xfipabjPqpzO9Tf9aa4iblJa
+AEQwRss+D6ixFO1rNKs1fjFva7A+9lrO
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-pss-sha256-cert.pem b/test/certs/ee-pss-sha256-cert.pem
new file mode 100644
index 000000000000..cde508992639
--- /dev/null
+++ b/test/certs/ee-pss-sha256-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDeDCCAjCgAwIBAgIBAjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEa
+MBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIDANMQswCQYDVQQDDAJDQTAg
+Fw0xNzA0MjQyMTE5NDlaGA8yMTE3MDQyNTIxMTk0OVowFTETMBEGA1UEAwwKUFNT
+LVNIQTI1NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKj/iVhhha7e
+2ywP1XP74reoG3p1YCvUfTxzdrWu3pMvfySQbckc9Io4zZ+igBZWy7Qsu5PlFx//
+DcZD/jE0+CjYdemju4iC76Ny4lNiBUVN4DGX76qdENJYDZ4GnjK7GwhWXWUPP2aO
+wjagEf/AWTX9SRzdHEIzBniuBDgj5ed1Z9OUrVqpQB+sWRD1DMFkrUrExjVTs5Zq
+ghsVi9GZq+Seb5Sq0pblV/uMkWSKPCQWxtIZvoJgEztisO0+HbPK+WvfMbl6nktH
+aKcpxz9K4iIntO+QY9fv0HJJPlutuRvUK2+GaN3VcxK4Q8ncQQ+io0ZPi2eIhA9h
+/nk0H0qJH7cCAwEAAaN5MHcwHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4HmCKX4XOi
+MB8GA1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQCMAAwEwYD
+VR0lBAwwCgYIKwYBBQUHAwEwFQYDVR0RBA4wDIIKUFNTLVNIQTI1NjA9BgkqhkiG
+9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQME
+AgGiAwIBIAOCAQEAfKQyXj7HSdUQJA599+SBjalw3dsaxYg6wgLH1IW3GHXPR+c0
+4cugrsPFNRTZL2u/xwHfdxcR3N2vzsdqa+Ep3iyC6egiwxmhIkw0OI+uk/WO9P8Z
+42bznkeDjOQ3Y04IIt7a5VbMY7AuWdQfnuVRFiJFAZi7s4+b6QL7+iwydZESVNRL
+K+Y6rjMEOrGK7codcRKxrwIt7kxkcT7MI/O7Jt5aa1XDvdSzrieo/CpNVCLCm/zq
+Hn1MZ7SAxjTlvwZIj1FhDrFJJppPc5fS7rQDcEaEV6qkBMowtccQR61Iim4834gV
+ZTesKQBRtAgW/h4OD5Za98hSEesP6YNhE3GK7A==
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-pss-wrong1.5-cert.pem b/test/certs/ee-pss-wrong1.5-cert.pem
new file mode 100644
index 000000000000..e4b9ba830786
--- /dev/null
+++ b/test/certs/ee-pss-wrong1.5-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDIjCCAgygAwIBAgIBAjALBgkqhkiG9w0BAQswETEPMA0GA1UEAwwGQ0EtUFNT
+MCAXDTIxMDEyNzA2NTIzMloYDzIxMjEwMTI4MDY1MjMyWjAaMRgwFgYDVQQDDA9F
+RS1QU1Mtd3JvbmcxLjUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo
+/4lYYYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0
+LLuT5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsI
+Vl1lDz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1K
+xMY1U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr
+3zG5ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNG
+T4tniIQPYf55NB9KiR+3AgMBAAGjfjB8MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWO
+B5gil+FzojAfBgNVHSMEGDAWgBQZ+aED9VzFaSHtVQEfFR0cdAuCsDAJBgNVHRME
+AjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMBoGA1UdEQQTMBGCD0VFLVBTUy13cm9u
+ZzEuNTALBgkqhkiG9w0BAQsDggEBAJYxCmTZfgjCfhf1r4dS+nebCM1qQ2WsOvwS
+SXSMOxVs0sRc2KUjiTR00j/pgASaRVPauom5y+Qp6J2NUUBcwkQhGbQPDr8pdmWv
+NPXX3UwfIl2gO9Bo5z0G0BOZmhCgNqbHcuJrW1tLRLwQWHsqm7gcqIq+/0Wsz5SA
+QETZfmMbPAlj+aotLJmc2UvcGyz7jAeEJ3xIikey9c8HK73c4UyXepeUckQKsTRe
+hs6+TluxaJerm3/1MRTOrq9aBGxoxNUc5cpJDZFF1rG9BtQgXxyGpiItkZX60N/3
+P1js8/l2FH8fEcb63WeChKMmqnw18fQUmunVyZWvsFiQVRHterM=
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-self-signed.pem b/test/certs/ee-self-signed.pem
new file mode 100644
index 000000000000..ad1e37ba0e79
--- /dev/null
+++ b/test/certs/ee-self-signed.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIICzzCCAbegAwIBAgIUBP7iEKPlKuinZGQNFxSY3IBIb0swDQYJKoZIhvcNAQEL
+BQAwGTEXMBUGA1UEAwwOZWUtc2VsZi1zaWduZWQwHhcNMjAwNjI4MTA1MTQ1WhcN
+MjAwNzI4MTA1MTQ1WjAZMRcwFQYDVQQDDA5lZS1zZWxmLXNpZ25lZDCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKj/iVhhha7e2ywP1XP74reoG3p1YCvU
+fTxzdrWu3pMvfySQbckc9Io4zZ+igBZWy7Qsu5PlFx//DcZD/jE0+CjYdemju4iC
+76Ny4lNiBUVN4DGX76qdENJYDZ4GnjK7GwhWXWUPP2aOwjagEf/AWTX9SRzdHEIz
+BniuBDgj5ed1Z9OUrVqpQB+sWRD1DMFkrUrExjVTs5ZqghsVi9GZq+Seb5Sq0pbl
+V/uMkWSKPCQWxtIZvoJgEztisO0+HbPK+WvfMbl6nktHaKcpxz9K4iIntO+QY9fv
+0HJJPlutuRvUK2+GaN3VcxK4Q8ncQQ+io0ZPi2eIhA9h/nk0H0qJH7cCAwEAAaMP
+MA0wCwYDVR0PBAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IBAQBiLmIUCGb+hmRGbmpO
+lDqEwiRVdxHBs4OSb3IA9QgU1QKUDRqn7q27RRelmzTXllubZZcX3K6o+dunRW5G
+d3f3FVr+3Z7wnmkQtC2y3NWtGuWNczss+6rMLzKvla5CjRiNPlSvluMNpcs7BJxI
+ppk1LxlaiYlQkDW32OPyxzXWDNv1ZkphcOcoCkHAagnq9x1SszvLTjAlo5XpYrm5
+CPgBOEnVwFCgne5Ab4QPTgkxPh/Ta508I/FKaPLJqci1EfGKipZkS7mMGTUJEeVK
+wZrn4z7RiTfJ4PdqO5iv8eOpt03fqdPEXQWe8DrKyfGM6/e369FaXMFhcd2ZxZy2
+WHoc
+-----END CERTIFICATE-----
diff --git a/test/certs/ee-serverAuth.pem b/test/certs/ee-serverAuth.pem
new file mode 100644
index 000000000000..fd6ab2821d83
--- /dev/null
+++ b/test/certs/ee-serverAuth.pem
@@ -0,0 +1,20 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAxMTUwODE5NDlaGA8yMTE2MDExNjA4MTk0OVowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQBBtDxPYULl5b7VFC7/U0NgV8vTJk4zpPnUMMQ4
+QF2AWDFAek8oLKrz18KQ8M/DEhDxgkaoeXEMLT6BJUEVNYuFEYHEDGarl0nMDRXL
+xOgAExfz3Tf/pjsLaha5aWH7NyCSKWC+lYkIOJ/Kb/m/6QsDJoXsEC8AhrPfqJhz
+UzsCoxIlaDWqawH4+S8bdeX0tvs2VtJk/WOJHxMqXra6kgI4fAgyvr2kIZHinQ3y
+cgX40uAC38bwpE95kJ7FhSfQlE1Rt7sOspUj098Dd0RNDn2uKyOTxEqIELHfw4AX
+O3XAzt8qDyho8nEd/xiQ6qgsQnvXa+hSRJw42g3/czVskxRxMAygCgYIKwYBBQUH
+AwE=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ee-ss-with-keyCertSign.pem b/test/certs/ee-ss-with-keyCertSign.pem
new file mode 100644
index 000000000000..a2f3bbe3b6cc
--- /dev/null
+++ b/test/certs/ee-ss-with-keyCertSign.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAfugAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBNFRSB3
+aXRoIGtleUNlcnRTaWduMCAXDTIxMDYwODA5MzYyMFoYDzIxMjEwNjA5MDkzNjIw
+WjAeMRwwGgYDVQQDDBNFRSB3aXRoIGtleUNlcnRTaWduMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAqP+JWGGFrt7bLA/Vc/vit6gbenVgK9R9PHN2ta7e
+ky9/JJBtyRz0ijjNn6KAFlbLtCy7k+UXH/8NxkP+MTT4KNh16aO7iILvo3LiU2IF
+RU3gMZfvqp0Q0lgNngaeMrsbCFZdZQ8/Zo7CNqAR/8BZNf1JHN0cQjMGeK4EOCPl
+53Vn05StWqlAH6xZEPUMwWStSsTGNVOzlmqCGxWL0Zmr5J5vlKrSluVX+4yRZIo8
+JBbG0hm+gmATO2Kw7T4ds8r5a98xuXqeS0dopynHP0riIie075Bj1+/Qckk+W625
+G9Qrb4Zo3dVzErhDydxBD6KjRk+LZ4iED2H+eTQfSokftwIDAQABo1owWDAJBgNV
+HRMEAjAAMAsGA1UdDwQEAwIChDAdBgNVHQ4EFgQU55viKq2KbDrLdlHljgeYIpfh
+c6IwHwYDVR0jBBgwFoAU55viKq2KbDrLdlHljgeYIpfhc6IwDQYJKoZIhvcNAQEL
+BQADggEBAJGmRJpl4aa34SRZPb02TMTYCU/ieL6wqNJ2qXHinJQtHRuvEIVVaW4c
+k3u/hNftu0ZtI2Y/dxQ2tybA4qP1ICkGU6VWAMJLSH83Fvz+6WsQB69zWNAwvVtz
+8BVggIEv13RdZbpn10h3lNeLejBGAzYbwLMWpsjYHSNsYC5aqpg+y7mgPyuRDjRR
+N26FdQjJEe9Px92h32dK6xxTS2LCiqHlimQCq+gRP/97rZLXNoyHLC6cfGCJpsEV
+fFAH44emO2ouODBrQqZRvn+SV7ubWTTeJwY/aK+Wdvu/w3mEwNNDCDqCfE6c6p9h
+zAk0no0/4w1o15ua7N+j/9q4iGJxx3k=
+-----END CERTIFICATE-----
diff --git a/test/certs/embeddedSCTs1-key.pem b/test/certs/embeddedSCTs1-key.pem
new file mode 100644
index 000000000000..28dd206dbe8d
--- /dev/null
+++ b/test/certs/embeddedSCTs1-key.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEAuIjpA4/iCpDA2mjywI5zG6IBX6bNcRQYDsB7Cv0VonNXtJBw
+XxMENP4jVpvEmWpJ5iMBknGHV+XWBkngYapczIsY4LGn6aMU6ySABBVQpNOQSRfT
+48xGGPR9mzOBG/yplmpFOVq1j+b65lskvAXKYaLFpFn3oY/pBSdcCNBP8LypVXAJ
+b3IqEXsBL/ErgHG9bgIRP8VxBAaryCz77kLzAXkfHL2LfSGIfNONyEKB3xI94S4L
+eouOSoWL1VkEfJs87vG4G5xoXw3KOHyiueQUUlMnu8p+Bx0xPVKPEsLje3R9k0rG
+a5ca7dXAn9UypKKp25x4NXpnjGX5txVEYfNvqQIDAQABAoIBAE0zqhh9Z5n3+Vbm
+tTht4CZdXqm/xQ9b0rzJNjDgtN5j1vuJuhlsgUQSVoJzZIqydvw7BPtZV8AkPagf
+3Cm/9lb0kpHegVsziRrfCFes+zIZ+LE7sMAKxADIuIvnvkoRKHnvN8rI8lCj16/r
+zbCD06mJSZp6sSj8ZgZr8wsU63zRGt1TeGM67uVW4agphfzuKGlXstPLsSMwknpF
+nxFS2TYbitxa9oH76oCpEk5fywYsYgUP4TdzOzfVAgMzNSu0FobvWl0CECB+G3RQ
+XQ5VWbYkFoj5XbE5kYz6sYHMQWL1NQpglUp+tAQ1T8Nca0CvbSpD77doRGm7UqYw
+ziVQKokCgYEA6BtHwzyD1PHdAYtOcy7djrpnIMaiisSxEtMhctoxg8Vr2ePEvMpZ
+S1ka8A1Pa9GzjaUk+VWKWsTf+VkmMHGtpB1sv8S7HjujlEmeQe7p8EltjstvLDmi
+BhAA7ixvZpXXjQV4GCVdUVu0na6gFGGueZb2FHEXB8j1amVwleJj2lcCgYEAy4f3
+2wXqJfz15+YdJPpG9BbH9d/plKJm5ID3p2ojAGo5qvVuIJMNJA4elcfHDwzCWVmn
+MtR/WwtxYVVmy1BAnmk6HPSYc3CStvv1800vqN3fyJWtZ1P+8WBVZWZzIQdjdiaU
+JSRevPnjQGc+SAZQQIk1yVclbz5790yuXsdIxf8CgYEApqlABC5lsvfga4Vt1UMn
+j57FAkHe4KmPRCcZ83A88ZNGd/QWhkD9kR7wOsIz7wVqWiDkxavoZnjLIi4jP9HA
+jwEZ3zER8wl70bRy0IEOtZzj8A6fSzAu6Q+Au4RokU6yse3lZ+EcepjQvhBvnXLu
+ZxxAojj6AnsHzVf9WYJvlI0CgYEAoATIw/TEgRV/KNHs/BOiEWqP0Co5dVix2Nnk
+3EVAO6VIrbbE3OuAm2ZWeaBWSujXLHSmVfpoHubCP6prZVI1W9aTkAxmh+xsDV3P
+o3h+DiBTP1seuGx7tr7spQqFXeR3OH9gXktYCO/W0d3aQ7pjAjpehWv0zJ+ty2MI
+fQ/lkXUCgYEAgbP+P5UmY7Fqm/mi6TprEJ/eYktji4Ne11GDKGFQCfjF5RdKhdw1
+5+elGhZes+cpzu5Ak6zBDu4bviT+tRTWJu5lVLEzlHHv4nAU7Ks5Aj67ApH21AnP
+RtlATdhWOt5Dkdq1WSpDfz5bvWgvyBx9D66dSmQdbKKe2dH327eQll4=
+-----END RSA PRIVATE KEY-----
diff --git a/test/certs/embeddedSCTs1.pem b/test/certs/embeddedSCTs1.pem
new file mode 100644
index 000000000000..c9c649071646
--- /dev/null
+++ b/test/certs/embeddedSCTs1.pem
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIID+TCCAuGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBVMQswCQYDVQQGEwJHQjEk
+MCIGA1UEChMbQ2VydGlmaWNhdGUgVHJhbnNwYXJlbmN5IENBMQ4wDAYDVQQIEwVX
+YWxlczEQMA4GA1UEBxMHRXJ3IFdlbjAgFw0yMDAxMjUxMTUwMTNaGA8yMTIwMDEy
+NjExNTAxM1owGTEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQC4iOkDj+IKkMDaaPLAjnMbogFfps1xFBgOwHsK
+/RWic1e0kHBfEwQ0/iNWm8SZaknmIwGScYdX5dYGSeBhqlzMixjgsafpoxTrJIAE
+FVCk05BJF9PjzEYY9H2bM4Eb/KmWakU5WrWP5vrmWyS8BcphosWkWfehj+kFJ1wI
+0E/wvKlVcAlvcioRewEv8SuAcb1uAhE/xXEEBqvILPvuQvMBeR8cvYt9IYh8043I
+QoHfEj3hLgt6i45KhYvVWQR8mzzu8bgbnGhfDco4fKK55BRSUye7yn4HHTE9Uo8S
+wuN7dH2TSsZrlxrt1cCf1TKkoqnbnHg1emeMZfm3FURh82+pAgMBAAGjggEMMIIB
+CDAdBgNVHQ4EFgQUtMa8XD5ylrF9AqCdnPEhXa63H2owHwYDVR0jBBgwFoAUX52I
+Dchz5lTU+A3Y5rDBJLRHw1UwCQYDVR0TBAIwADATBgNVHSUEDDAKBggrBgEFBQcD
+ATCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN8cLsEVAJRSR6lhaDJd3Fx5Wej3xtOI
+/AAuC70/dNdkAAABb15m6AAAAAQDAEcwRQIgVVLvhQAex2omlFnb+MczYTjvUETM
+SW6EeAIxPuicWWcCIQCYJYPr1uLeBMcq2RJCtoWgs/F0BsfUFnhJk/lav8NoNDAZ
+BgNVHREEEjAQgg5zZXJ2ZXIuZXhhbXBsZTANBgkqhkiG9w0BAQsFAAOCAQEATRog
+ZfvqRl9hMgYODL8VVRJNgqQqKVLCGME4ksBudWKPO0ulfD+de81WCFEHINBu2sPa
+NSs3YHv/5eaw0tJAd4lPGGhGCl/qEIqQxN6wKcenIWu2M4QzsH6V4D7IuR+OUZCC
+vNN//NpdIH1KbNGViQCw7o5ClL1+ow0MT+PuzGCI7LkdHTJzyoftzGSHqF/DzDDd
+uO4ez6fQR4aj/CvQ6UZAy8ihYc2B+dz6NR/nGdCkIs7eEWISOxCgmH8NAJLgPOaU
+Odw3qk4hXEyTiPkMsSjl9QSfQi5s6d9rbEuQ22ow6H092n7Du15AZS4kKlHxDa5s
+G8vj2f3xch0fyx+c+w==
+-----END CERTIFICATE-----
diff --git a/test/certs/embeddedSCTs1.sct b/test/certs/embeddedSCTs1.sct
new file mode 100644
index 000000000000..475d7b8f770c
--- /dev/null
+++ b/test/certs/embeddedSCTs1.sct
@@ -0,0 +1,12 @@
+Signed Certificate Timestamp:
+ Version : v1 (0x0)
+ Log ID : DF:1C:2E:C1:15:00:94:52:47:A9:61:68:32:5D:DC:5C:
+ 79:59:E8:F7:C6:D3:88:FC:00:2E:0B:BD:3F:74:D7:64
+ Timestamp : Jan 1 00:00:00.000 2020 GMT
+ Extensions: none
+ Signature : ecdsa-with-SHA256
+ 30:45:02:20:55:52:EF:85:00:1E:C7:6A:26:94:59:DB:
+ F8:C7:33:61:38:EF:50:44:CC:49:6E:84:78:02:31:3E:
+ E8:9C:59:67:02:21:00:98:25:83:EB:D6:E2:DE:04:C7:
+ 2A:D9:12:42:B6:85:A0:B3:F1:74:06:C7:D4:16:78:49:
+ 93:F9:5A:BF:C3:68:34
diff --git a/test/certs/embeddedSCTs1.tlssct b/test/certs/embeddedSCTs1.tlssct
new file mode 100644
index 000000000000..0586c94ab0b7
--- /dev/null
+++ b/test/certs/embeddedSCTs1.tlssct
Binary files differ
diff --git a/test/certs/embeddedSCTs1_issuer-key.pem b/test/certs/embeddedSCTs1_issuer-key.pem
new file mode 100644
index 000000000000..0cb59e43cb95
--- /dev/null
+++ b/test/certs/embeddedSCTs1_issuer-key.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAwckj9DNhinn9gUivB5TNOW8vsn8Kn5UXms8V3TlYQx9I37mW
+kabOB5meZ6221is1oANJkQk9MZv3Jlap/8P3Vt4yAmslclbuT7oOoZdpX8x5yoED
+L3PoSNARLj25PvWR7Djtd9O9pTuZcUEbd5guJddw5Pj3HA0Q7a+5tHOSWG63p3pF
+ZONyticwBVWfvBkMHbWkA8g6EDvAbKmz26r5FQlfsOw/0U6CP0oJKkhJHSchFYG8
+IsjfkV3LXNbCwV4n9vOCx4cZNUznjaF0uUsOj0kmvP0bprVSEXMIGxitl4Z/vUru
+WaR3mN2/Od/TnicxyMohAKqeeG16QK2Z4uXe8wIDAQABAoIBADYYp1/JZCZbDaik
+mK/eGzg4ULFcg6Ou5CsEOk9Kbdg3CInj7iN01DkM6kp5FPxOjabApC3HzXxm1KSw
+Nr6+fvKSDpXcQVTc7aP2BZWYhgMHOsyMHU6G5cZFxzYIZwkrVnQCJFB6HIveymPy
+T++f3OoVbV+OHLWI9DvV/VphlO34ZaWHtDjor4+ycNSkdpH2t1ecmob/zs/5lt+T
+5xfQ38qpuWWJiXstd6O4THgTU9u8/E6CIAdS5CiYORoW/EqRMlV8lt10dfG75feF
+WvZD+w/DHgFi1izLaSRsHqHHT1hc3h1tFl1c1XDvkTFPgTqbk01VK9IvsPn9QKcc
++Sw7o0ECgYEA8ghy34lSSbGrvk+djU+vwQ7VEPE5+gicp4Dl2E0tEeZyRt3q4Vt5
+QF60D7Q6E6NjzIEVsm7Ic/qo12klOSMJ4NB5r+oMTJ6R+09/9gzyWx9sYb1rzgYh
+FtOex6fzYQnqPydb06u/crdL7lbxmYlK09rr/wcqzMx7gmkqMBmtS9MCgYEAzPfv
+Uc+wN8ZPzpRbGabenoyTf+v4+f+VfIGMUw9TKQZozsGVypZeAy++l9sAymaty3FH
+oob5P8i9dwFHhaaXmWCBZyWxRJbQ+tTYAulQd/FZoaGX8SdENPmcLnTTXnDPXJTT
+YyDQwpYFl2Qv6n0DPY0HvtR3iG/0VoM9Rt7wzGECgYApYYJqb6sPCH6JokkYsQgm
+pOeO5v93nWNTTDl/+un6xoDBVw3ii+Y2ODrm+HR5iRT2ERfpkwFYuwGFGugPVctJ
+kbtMdWK28uGYqyYApoQFSmEYcO9uoSOlKHdcQX3eGHjhZVRQ42tvLKGh1WGnU47k
+m+h/iPUrYMa5LEvXP3yemwKBgDhWCSxGVlvuIO9ZrXRufg+7+aqWVDd6fT7caJJH
+ywaioVn6sU4eaDad/9fDNQNsl2Yse5D7YjSa2yCDdIISmOZqNQcBwChm/4eByuF5
++UkOSCF5xcZdkYyx8rB+Ib56aTQ8H6HGWjqxe1XyDo130NUxFyjnQvd4NgM1TTlW
+e37hAoGAGj8eUtfqyChkIYFqnDZM/cH9a/hISTXItFwMVltY46s+IoxrQK9xG8Ke
+K1pGSiKs3m0L/qKLmKGThBdR1DjFw6Y7qajg0JZtzdcnyWRQpOrTC7mxtjSkcQ3e
+56h1nvYF3IgtobIOyxoO05oiQHv1fn8hK5PjdBMdeDxkWJT/a2s=
+-----END RSA PRIVATE KEY-----
diff --git a/test/certs/embeddedSCTs1_issuer.pem b/test/certs/embeddedSCTs1_issuer.pem
new file mode 100644
index 000000000000..ebcd4b4861e2
--- /dev/null
+++ b/test/certs/embeddedSCTs1_issuer.pem
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID1zCCAr+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBVMQswCQYDVQQGEwJHQjEk
+MCIGA1UEChMbQ2VydGlmaWNhdGUgVHJhbnNwYXJlbmN5IENBMQ4wDAYDVQQIEwVX
+YWxlczEQMA4GA1UEBxMHRXJ3IFdlbjAgFw0yMjA2MDExMDM4MDJaGA8yMTIyMDUw
+ODEwMzgwMlowVTELMAkGA1UEBhMCR0IxJDAiBgNVBAoTG0NlcnRpZmljYXRlIFRy
+YW5zcGFyZW5jeSBDQTEOMAwGA1UECBMFV2FsZXMxEDAOBgNVBAcTB0VydyBXZW4w
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBySP0M2GKef2BSK8HlM05
+by+yfwqflReazxXdOVhDH0jfuZaRps4HmZ5nrbbWKzWgA0mRCT0xm/cmVqn/w/dW
+3jICayVyVu5Pug6hl2lfzHnKgQMvc+hI0BEuPbk+9ZHsOO13072lO5lxQRt3mC4l
+13Dk+PccDRDtr7m0c5JYbrenekVk43K2JzAFVZ+8GQwdtaQDyDoQO8BsqbPbqvkV
+CV+w7D/RToI/SgkqSEkdJyEVgbwiyN+RXctc1sLBXif284LHhxk1TOeNoXS5Sw6P
+SSa8/RumtVIRcwgbGK2Xhn+9Su5ZpHeY3b8539OeJzHIyiEAqp54bXpArZni5d7z
+AgMBAAGjga8wgawwHQYDVR0OBBYEFF+diA3Ic+ZU1PgN2OawwSS0R8NVMH0GA1Ud
+IwR2MHSAFF+diA3Ic+ZU1PgN2OawwSS0R8NVoVmkVzBVMQswCQYDVQQGEwJHQjEk
+MCIGA1UEChMbQ2VydGlmaWNhdGUgVHJhbnNwYXJlbmN5IENBMQ4wDAYDVQQIEwVX
+YWxlczEQMA4GA1UEBxMHRXJ3IFdlboIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3
+DQEBCwUAA4IBAQAx4nGkweUG9fE1IpAsRSNoW+OzxWmzhLXHWFslPHe8P7OODW+y
+t5nUWdAwPej7vGo/y2nF9Y2WbRKwJrAcNFn6rLnrA5nuzH+mOJt5EckajWWU2MqF
+9nLfQiNsds85//r3ENQ3wfh6hZojvh98o+5mC5AV8JzORyj5NxzDXp5zdf8dt00s
+D612d/RTFMPPzVK5vYBOoCusafV5qI/c4DYi02B00xtkUj3lFZc5afGpWIbJIarc
+ESlqR3J66UetqbK4bP/nwQlW3PgZCpJXSHVPuwK3V+4ZTSVd5+FbYVp1DXp/qbq8
+P6RD7n+MnBgdEH0AFtgQ28effUXaSWDTXxze
+-----END CERTIFICATE-----
diff --git a/test/certs/embeddedSCTs3.pem b/test/certs/embeddedSCTs3.pem
new file mode 100644
index 000000000000..bce8918ecac2
--- /dev/null
+++ b/test/certs/embeddedSCTs3.pem
@@ -0,0 +1,44 @@
+-----BEGIN CERTIFICATE-----
+MIIHvzCCBqegAwIBAgIRANSYNM/GMmLagfa+3OOk63swDQYJKoZIhvcNAQELBQAw
+gZIxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTgwNgYD
+VQQDEy9DT01PRE8gUlNBIEV4dGVuZGVkIFZhbGlkYXRpb24gU2VjdXJlIFNlcnZl
+ciBDQTAeFw0xNTEyMDEwMDAwMDBaFw0xODAyMjUyMzU5NTlaMIIBMzEQMA4GA1UE
+BRMHMzgzMDEzODETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgEC
+EwhEZWxhd2FyZTEdMBsGA1UEDxMUUHJpdmF0ZSBPcmdhbml6YXRpb24xCzAJBgNV
+BAYTAlVTMQ4wDAYDVQQREwUwNzAxMzELMAkGA1UECBMCTkoxEDAOBgNVBAcTB0Ns
+aWZ0b24xEjAQBgNVBAkTCVN1aXRlIDEwMDEXMBUGA1UECRMOMTI1NSBCcm9hZCBT
+dC4xGjAYBgNVBAoTEUNvbW9kbyBHcm91cCBJbmMuMRYwFAYDVQQLEw1DT01PRE8g
+RVYgU1NMMRowGAYDVQQLExFDT01PRE8gRVYgU0dDIFNTTDEXMBUGA1UEAxMOd3d3
+LmNvbW9kby5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5S2RD
+XGjch2spb10rLVCA4TgeB/TiNLHPczeKMJzIY9qKUGQfcYCTwfWe2E1xBer/i0OX
+IUca+/Br3HTK2qkNoc/nuFkJJ3ej17A9Kv1EYhsN+2gHobKEy+sMTJyGmFVo98nu
+V9mmiEWM7Bi0Y6YRVYCOey4K2yUwSK1MOgc10RzbwDsk+P2mvTzvPi8QZzd4I36/
+xlFFhk39VKY94PorJCzF/6qifmNnIjxMkrmSKJKKQaZu8vgbshqlj3+TkeCtIjdR
+77OcZuROMFdnKsp8JKAq9bzXmDkwlDmUzxAzgYmAvqCwQvNWtJrm0SeiEkNsoK5F
+xadrfw6OO7BCGXiNAgMBAAGjggNqMIIDZjAfBgNVHSMEGDAWgBQ52v/KKBSKqHQT
+CLnkDqnS+n6daTAdBgNVHQ4EFgQURD5zMOsLG6ennQ/aeZZNGofpnSEwDgYDVR0P
+AQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwNAYDVR0lBC0wKwYIKwYBBQUHAwEGCCsG
+AQUFBwMCBgorBgEEAYI3CgMDBglghkgBhvhCBAEwRgYDVR0gBD8wPTA7BgwrBgEE
+AbIxAQIBBQEwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNv
+bS9DUFMwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5jb21vZG9jYS5jb20v
+Q09NT0RPUlNBRXh0ZW5kZWRWYWxpZGF0aW9uU2VjdXJlU2VydmVyQ0EuY3JsMIGH
+BggrBgEFBQcBAQR7MHkwUQYIKwYBBQUHMAKGRWh0dHA6Ly9jcnQuY29tb2RvY2Eu
+Y29tL0NPTU9ET1JTQUV4dGVuZGVkVmFsaWRhdGlvblNlY3VyZVNlcnZlckNBLmNy
+dDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMCUGA1UdEQQe
+MByCDnd3dy5jb21vZG8uY29tggpjb21vZG8uY29tMIIBfQYKKwYBBAHWeQIEAgSC
+AW0EggFpAWcAdQBo9pj4H2SCvjqM7rkoHUz8cVFdZ5PURNEKZ6y7T0/7xAAAAVFd
+vZuJAAAEAwBGMEQCIFgtCr54QYrnialeZiHFahZ53zOFitPzHXGvdTD7zE5FAiBB
+nIm4gBmHRmwcOpULvvSYddTKSZf9JS7jeLU2MCAmTQB2AFYUBpov18Ls0/XhvUSy
+PsdGdrm8mRFcwO+UmFXWidDdAAABUV29mSgAAAQDAEcwRQIgeWjpcDhaY/OmsZcO
+ftDFcRt2BssJY0ge4SDzp+8qTnQCIQCOt7vthV2FG1RePMXs8hOcCdEKAcJZX3wx
+GaGd4RfHHwB2AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABUV29
+m5wAAAQDAEcwRQIgKwZCD9lxvSFCpfnFVYPSneWhjbY9pnOJQjKckQ87anQCIQCG
+7hD5EOZ7F2XZLTdTSjvwrgPkIXY376+0RC4r9VzGkTANBgkqhkiG9w0BAQsFAAOC
+AQEAHVZgKwtIKcxJg6k5THIICJ63vZyaPJN21HVYPAN/heDUcbYzOqP0F+v+ahj5
+yNiRhSji/xxcOf5bWT158dHQoMtC1Ld1dI3lttVAvDTgXOApbmc8N0Xpjvapag3r
+b0IYW5SJio0qn1VxgeSsf0UCBTyw0N8lgbaIr3FHw2SP2rUS8PUixFRK52MYnyEp
+6Imz730Adl0RgUvp7mzRcWVDK4i6sPRqV6my68XsyaBcQr2qKALQK0Js+mE/0850
+47USqZ1XjbUke47OPxdlF85uUtIUSGquHTWnxrqy7FLMPIu9HL8XGo3vVlTYCCsb
+d6V/RWexyzZiHDGA1ToA0Y16Aw==
+-----END CERTIFICATE-----
diff --git a/test/certs/embeddedSCTs3.sct b/test/certs/embeddedSCTs3.sct
new file mode 100644
index 000000000000..579a890a9a8a
--- /dev/null
+++ b/test/certs/embeddedSCTs3.sct
@@ -0,0 +1,36 @@
+Signed Certificate Timestamp:
+ Version : v1 (0x0)
+ Log ID : 68:F6:98:F8:1F:64:82:BE:3A:8C:EE:B9:28:1D:4C:FC:
+ 71:51:5D:67:93:D4:44:D1:0A:67:AC:BB:4F:4F:FB:C4
+ Timestamp : Dec 1 13:31:25.961 2015 GMT
+ Extensions: none
+ Signature : ecdsa-with-SHA256
+ 30:44:02:20:58:2D:0A:BE:78:41:8A:E7:89:A9:5E:66:
+ 21:C5:6A:16:79:DF:33:85:8A:D3:F3:1D:71:AF:75:30:
+ FB:CC:4E:45:02:20:41:9C:89:B8:80:19:87:46:6C:1C:
+ 3A:95:0B:BE:F4:98:75:D4:CA:49:97:FD:25:2E:E3:78:
+ B5:36:30:20:26:4D
+Signed Certificate Timestamp:
+ Version : v1 (0x0)
+ Log ID : 56:14:06:9A:2F:D7:C2:EC:D3:F5:E1:BD:44:B2:3E:C7:
+ 46:76:B9:BC:99:11:5C:C0:EF:94:98:55:D6:89:D0:DD
+ Timestamp : Dec 1 13:31:25.352 2015 GMT
+ Extensions: none
+ Signature : ecdsa-with-SHA256
+ 30:45:02:20:79:68:E9:70:38:5A:63:F3:A6:B1:97:0E:
+ 7E:D0:C5:71:1B:76:06:CB:09:63:48:1E:E1:20:F3:A7:
+ EF:2A:4E:74:02:21:00:8E:B7:BB:ED:85:5D:85:1B:54:
+ 5E:3C:C5:EC:F2:13:9C:09:D1:0A:01:C2:59:5F:7C:31:
+ 19:A1:9D:E1:17:C7:1F
+Signed Certificate Timestamp:
+ Version : v1 (0x0)
+ Log ID : A4:B9:09:90:B4:18:58:14:87:BB:13:A2:CC:67:70:0A:
+ 3C:35:98:04:F9:1B:DF:B8:E3:77:CD:0E:C8:0D:DC:10
+ Timestamp : Dec 1 13:31:25.980 2015 GMT
+ Extensions: none
+ Signature : ecdsa-with-SHA256
+ 30:45:02:20:2B:06:42:0F:D9:71:BD:21:42:A5:F9:C5:
+ 55:83:D2:9D:E5:A1:8D:B6:3D:A6:73:89:42:32:9C:91:
+ 0F:3B:6A:74:02:21:00:86:EE:10:F9:10:E6:7B:17:65:
+ D9:2D:37:53:4A:3B:F0:AE:03:E4:21:76:37:EF:AF:B4:
+ 44:2E:2B:F5:5C:C6:91
diff --git a/test/certs/embeddedSCTs3_issuer.pem b/test/certs/embeddedSCTs3_issuer.pem
new file mode 100644
index 000000000000..f4bc31274b97
--- /dev/null
+++ b/test/certs/embeddedSCTs3_issuer.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGDjCCA/agAwIBAgIQBqdDgNTr/tQ1taP34Wq92DANBgkqhkiG9w0BAQwFADCB
+hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
+BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTIwMjEy
+MDAwMDAwWhcNMjcwMjExMjM1OTU5WjCBkjELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
+EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxODA2BgNVBAMTL0NPTU9ETyBSU0EgRXh0ZW5kZWQg
+VmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAlVbeVLTf1QJJe9FbXKKyHo+cK2JMK40SKPMalaPGEP0p3uGf
+CzhAk9HvbpUQ/OGQF3cs7nU+e2PsYZJuTzurgElr3wDqAwB/L3XVKC/sVmePgIOj
+vdwDmZOLlJFWW6G4ajo/Br0OksxgnP214J9mMF/b5pTwlWqvyIqvgNnmiDkBfBzA
+xSr3e5Wg8narbZtyOTDr0VdVAZ1YEZ18bYSPSeidCfw8/QpKdhQhXBZzQCMZdMO6
+WAqmli7eNuWf0MLw4eDBYuPCGEUZUaoXHugjddTI0JYT/8ck0YwLJ66eetw6YWNg
+iJctXQUL5Tvrrs46R3N2qPos3cCHF+msMJn4HwIDAQABo4IBaTCCAWUwHwYDVR0j
+BBgwFoAUu69+Aj36pvE8hI6t7jiY7NkyMtQwHQYDVR0OBBYEFDna/8ooFIqodBMI
+ueQOqdL6fp1pMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMD4G
+A1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5j
+b21vZG8uY29tL0NQUzBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLmNvbW9k
+b2NhLmNvbS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBxBggr
+BgEFBQcBAQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29tb2RvY2EuY29t
+L0NPTU9ET1JTQUFkZFRydXN0Q0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2Nz
+cC5jb21vZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggIBAERCnUFRK0iIXZebeV4R
+AUpSGXtBLMeJPNBy3IX6WK/VJeQT+FhlZ58N/1eLqYVeyqZLsKeyLeCMIs37/3mk
+jCuN/gI9JN6pXV/kD0fQ22YlPodHDK4ixVAihNftSlka9pOlk7DgG4HyVsTIEFPk
+1Hax0VtpS3ey4E/EhOfUoFDuPPpE/NBXueEoU/1Tzdy5H3pAvTA/2GzS8+cHnx8i
+teoiccsq8FZ8/qyo0QYPFBRSTP5kKwxpKrgNUG4+BAe/eiCL+O5lCeHHSQgyPQ0o
+fkkdt0rvAucNgBfIXOBhYsvss2B5JdoaZXOcOBCgJjqwyBZ9kzEi7nQLiMBciUEA
+KKlHMd99SUWa9eanRRrSjhMQ34Ovmw2tfn6dNVA0BM7pINae253UqNpktNEvWS5e
+ojZh1CSggjMziqHRbO9haKPl0latxf1eYusVqHQSTC8xjOnB3xBLAer2VBvNfzu9
+XJ/B288ByvK6YBIhMe2pZLiySVgXbVrXzYxtvp5/4gJYp9vDLVj2dAZqmvZh+fYA
+tmnYOosxWd2R5nwnI4fdAw+PKowegwFOAWEMUnNt/AiiuSpm5HZNMaBWm9lTjaK2
+jwLI5jqmBNFI+8NKAnb9L9K8E7bobTQk+p0pisehKxTxlgBzuRPpwLk6R1YCcYAn
+pLwltum95OmYdBbxN4SBB7SC
+-----END CERTIFICATE-----
diff --git a/test/certs/ext-check.csr b/test/certs/ext-check.csr
new file mode 100644
index 000000000000..ee974e05ceca
--- /dev/null
+++ b/test/certs/ext-check.csr
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIICzTCCAbcCAQAwVDELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx
+ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDENMAsGA1UEAwwEdGVz
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvdj9Ix
+sogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOzn1k5
+0DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/Wl9rF
+QtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0lYW5I
+NvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAcZGh7
+r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9CLNN
+sUcCAwEAAaA2MBYGCSqGSIb3DQEJAjEJDAdDb21wYW55MBwGCSqGSIb3DQEJDjEP
+MA0wCwYDVR0PBAQDAgeAMAsGCSqGSIb3DQEBCwOCAQEAYd4B+FkWRuVVDPYfrN8P
+UdZbLTggUGrpdhRibnoAsLNQ3cCS90OsCq5FLD6TVUCNb1gnp15Jp1WChQSyD3zC
+jb8VgivDeDOuk08Zy2Fl2+QvuwyQ9hKTAOTdAmP/bapAi7zniElSTP6BZ8vyEtuP
+FCEWJ5UjhvUYbZOG5WIHxhT+24CtYH3iHNir4OlDbsYrUBKEmQZIDj6WC01UT+4U
+/up2xKq1Y+rOUv2Xy3K9O/U1W/3AF7IvcDyd7+qQTGD8U2X3efzZYOffhTN+9Rvn
+5t82CnHLjFn4Co43RBiOcbjSDbvtaghtDiYB2tSUuqafHiuAJKx6zAm0Y2FR8X+z
+gg==
+-----END CERTIFICATE REQUEST-----
diff --git a/test/certs/fake-gp.pem b/test/certs/fake-gp.pem
new file mode 100644
index 000000000000..c25f172428f9
--- /dev/null
+++ b/test/certs/fake-gp.pem
@@ -0,0 +1,36 @@
+-----BEGIN CERTIFICATE-----
+MIIGTzCCBTegAwIBAgIEAJiW+zANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJO
+TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTowOAYDVQQDDDFTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gT3JnYW5pc2F0aWUgUGVyc29vbiBDQSAtIEczMB4X
+DTIwMDQxNjE0MDUyMFoXDTIwMDUxNjE0MDUyMFowbDERMA8GA1UEDAwISHVpc2Fy
+dHMxEjAQBgNVBAUTCTAwMDA2NjYwMDEaMBgGA1UEAwwRSGVybWFudXMgQm9lcmhh
+dmUxGjAYBgNVBAoMEUhlcm1hbnVzIEJvZXJoYXZlMQswCQYDVQQGEwJOTDCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALs6G9LEt9nOBxjdyjD8nRH3mkDp
+oltjjMB9USuY2jHy5TTEzCwQW6ohJuN6s+TbwQYvJns+keJKWB5d2u7EtEuiND1O
+4QIkH2j044DYdeomcuZ3Tt56rptA9oJ2OGDvT0/PZOQlFzXcNkf+3Bo40Ppr372X
+dam/6eOZ928b+pfTmUDOyMPU40hyJimi+hxnLuPPYhQipIpkpGXtyA9r9qBuXqja
+I0Ramdi/+WuBch2NkvjWw36tMO4MREdF2cOxLXtiMMD5404bI68ugH6sJeg3pTWd
+9fMzmoD4TH0eR2u5Ayn70fGiYY9xCdLckRas2R4txC4BvUHVYimrhsc/yekCAwEA
+AaOCAvowggL2MAkGA1UdEwQCMAAwMQYDVR0lBCowKAYIKwYBBQUHAwEGCCsGAQUF
+BwMCBggrBgEFBQcDAwYIKwYBBQUHAwQwHQYDVR0OBBYEFJRP8jB2vCG/hWC52q3r
+wU7AIkbQMG0GA1UdIwRmMGShXqRcMFoxKzApBgNVBAMMIlN0YWF0IGRlciBOZWRl
+cmxhbmRlbiBSb290IENBIC0gRzMxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxh
+bmRlbjELMAkGA1UEBhMCTkyCAgPyMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcw
+AYYbaHR0cDovL29jc3AudXppLXJlZ2lzdGVyLm5sMFAGA1UdHwRJMEcwRaBDoEGG
+P2h0dHA6Ly93d3cudXppLXJlZ2lzdGVyLm5sL2NkcC91emktcmVnaXN0ZXJfem9y
+Z3ZlcmxlbmVyX2NhLmNybDCCASoGA1UdIASCASEwggEdMIIBGQYKYIQQAYdrAQIC
+AjCCAQkwNAYIKwYBBQUHAgEWKGh0dHBzOi8vd3d3LnV6aS1yZWdpc3Rlci5ubC9j
+cHMvY3BzLmh0bWwwgdAGCCsGAQUFBwICMIHDGoHASGV0IHRvZXBhc3NpbmdzZ2Vi
+aWVkIHZhbiBkaXQgY2VydGlmaWNhYXQgaXMgYmVwZXJrdCB0b3QgY29tbXVuaWNh
+dGllIGJpbm5lbiBoZXQgZG9tZWluIE92ZXJoZWlkIHpvYWxzIGFhbmdlZ2V2ZW4g
+aW4gaGV0IFByb2dyYW1tYSB2YW4gRWlzZW4gdmFuIGRlIFBLSSB2b29yIGRlIE92
+ZXJoZWlkLiBaaWUgd3d3LnBraW92ZXJoZWlkLm5sMFUGA1UdEQROMEygSgYDVQUF
+oEMWQTIuMTYuNTI4LjEuMTAwMy4xLjMuNS41LjItMS0wMDAwMDA2NjY2LVotMTIz
+NDU2NzgtMDEuMDE1LTEyMzQ1Njc4MBgGCCsGAQUFBwEDBAwwCjAIBgYEAI5GAQEw
+DQYJKoZIhvcNAQELBQADggEBACqw60ermDQAmqra5eaJS6RC6WPNzm28V1/CaBYd
+7TD6s+hdmjrxCXsXjQNBea4+f6Ig1usJOF/G1GR4znfBIWeB73ve5lZ19qwoJf2P
+OgajStG2qgWMGPuCbsDQVQDIDWVd99C1/iTq9te3Ljp9A8baWQMcDLGifkzRFnWU
+k+toRfZE5K4WmD+8GL7gp1We1egMuBvCO4z3uACcKWK5FKFSvLdhuOXf3jIe9T6+
+xo4RbfzLaF9EjgcGeXdZvDYfu6TZv/ZW6yh3vAtRlxhhymHsA19Bl70k1Im1Xkuy
+Um0W+wwXjUcRfiuXarWwbSZxOZZcSFjYQuiQlvUgWSEeiR0=
+-----END CERTIFICATE-----
diff --git a/test/certs/goodcn1-cert.pem b/test/certs/goodcn1-cert.pem
new file mode 100644
index 000000000000..d9205e03b005
--- /dev/null
+++ b/test/certs/goodcn1-cert.pem
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkTCCAnmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMTgwNTE2MDI0MDA0WhgPMjExODA1MTcwMjQwMDRaMIGeMSMw
+IQYDVQQKDBpHb29kIE5DIFRlc3QgQ2VydGlmaWNhdGUgMTEVMBMGA1UEAwwMd3d3
+Lmdvb2Qub3JnMRUwEwYDVQQDDAxhbnkuZ29vZC5jb20xETAPBgNVBAMMCG5vdC4u
+ZG5zMRAwDgYDVQQDDAdub3RAZG5zMREwDwYDVQQDDAhub3QtLmRuczERMA8GA1UE
+AwwIbm90LmRucy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDigxI
+nlYVjHtrFI+Iv/3b0jeZbs1jVnPF6ZREk46BTNAVNZsq24jKFG6yK4n9vKA/JuS7
+jZe+gMX+sWh/S1IlsNDY8/Io1UsG/s1tmsvE2UrURUX4s8HnqB6AZ4Y9Cp4rSADe
+mD/YdekRf3HFA0IKQvIFRkpegj8uuWwILC0n/ozMNUlNmxCBlOmtFwjFxmNr9Txa
+ZeFvWvvc6oTubAETK4HcjLdimx1tePdd4+0mxJ/akQ3wVzUAI2ysijMmMJDzTxLs
+FPkw4yUtJHK0/H2yJtpoJ4wQjsWd6a8F7wY/pHszAud1M8QZJKQDzkJOMnqLKNLT
+OKw6dm1UG2J7iuqtAgMBAAGjXjBcMB0GA1UdDgQWBBSTKvqap2ab0z/UPrdDgc0V
+m88R3TAfBgNVHSMEGDAWgBQI0Zv55tVkcKDxaxqe7VLa3fVQQzAJBgNVHRMEAjAA
+MA8GA1UdEQQIMAaHBMCoAAEwDQYJKoZIhvcNAQELBQADggEBADcdm62qaOHbIDoa
+5oUjXGHSQjV1g4BFe6DLH5/CZ0wOws3QzfQbPIxJrp3yJgDcQyZNOE/xQlq/nASS
+thU6cUTB07voFVnbotB8YQuNU1wM9TAJOHC9LT1Y0J2GIP6QeXts6Cz6aBlqaQEZ
+IrGRLuKVZePTO0Haup0mZ91XoXs3CBzkSerl0XpFL7BeugSigrhprFRPB4UC3IWb
+pdNar61Wk4bN/COb6utRkK3iYk5YUTqYFib9EG4VBdxYfXv/tiBIGqQLnqPbId6w
+q+McpSEPF1DIcCyL0vEDdIVN0SzxMfnfHMx0Qp0sh2aydIZk4xfEqXHZgZthSrse
+u7nhn7s=
+-----END CERTIFICATE-----
diff --git a/test/certs/goodcn1-key.pem b/test/certs/goodcn1-key.pem
new file mode 100644
index 000000000000..2ad660c6dbfa
--- /dev/null
+++ b/test/certs/goodcn1-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDigxInlYVjHtr
+FI+Iv/3b0jeZbs1jVnPF6ZREk46BTNAVNZsq24jKFG6yK4n9vKA/JuS7jZe+gMX+
+sWh/S1IlsNDY8/Io1UsG/s1tmsvE2UrURUX4s8HnqB6AZ4Y9Cp4rSADemD/YdekR
+f3HFA0IKQvIFRkpegj8uuWwILC0n/ozMNUlNmxCBlOmtFwjFxmNr9TxaZeFvWvvc
+6oTubAETK4HcjLdimx1tePdd4+0mxJ/akQ3wVzUAI2ysijMmMJDzTxLsFPkw4yUt
+JHK0/H2yJtpoJ4wQjsWd6a8F7wY/pHszAud1M8QZJKQDzkJOMnqLKNLTOKw6dm1U
+G2J7iuqtAgMBAAECggEAeQ1xZVOAf36kuTnVUhdplTii6v3JcQIIUjG0dG/U/P8M
+otS45uNZ36CelvaVStwHaJEvcVzK4EjgSjiSNJvwkxzPbkA3XkgNVptPmdcG5yqO
+RLNOChVeqYdOurdcR1XXbXv57dPbUqpMS2TWjdzieW/QXKuTRsbjTo3D75tJqUO6
+1Bm4sSM3PogmsQwTP8HlZAmJXuSD+ZSB22Np5pT1dn5TvQU6xeA3NJR4ZO/HEZz4
+CHJEiOx2BuGD6M0V1ZL6DzEsyIS/KKsvj4I2F4ROAK1j3lSD5VqrYPXn3oEsQdlm
+OW8aVnHPYO6FI0LVLgcIEKxhdwGV3i6v/GRUe0Y9kQKBgQD0Zqn1trAuP5Peiy1K
+Wc91yRjQxQTwSD00hzXMtvKzkEIiLEuVZq9qrqQ2TRRa5xneDGHDuUY9eZY8JwEr
+l7f8CcfYC93PXLyRM2Gaz0jMxZxVPz5w7zssK3DZ+7JvH3nKkCUl7+Y0tH26qTO0
+wTD9w9jd9bf85SLVgk3zSbUDwwKBgQDM0b2ffZpxyA16h7w8ZBuk1Z+iumrxnn5/
+lKtffR2b4dZN37KiWw2c265vYhRfe/ANnVuagXb9aRM97yeQloRlWR10AaXJz3EB
+sromqFShkorYRhwZoRiJC0laLG3W76wKMRr2T6TM1UG9gJ0szdGFG/yUDU+9pTRo
+uq514rGgzwKBgQCGtsAgLF7YXzsGg/im7vInnn0LNk4OlAMInS7OdFk7GN0bMQdI
+hp1SVIk3VS1PHetoNbL9y3YoFIj3BxjiCnLjfhClyYSt9BQMhSHbzz31gUc2xfGJ
+FpSrOBawUMh97/+V4/ZV/vIJQyO6a+GQVJzIg9daIUMVJsgYoAaPf6VDOQKBgFyH
+eHnf/XDfpq8vOOuzcgWieG7EduHW72DlohIObNzqRq2BnKraJakyWXh6P6fvTsBn
+0WVYjY/n80hsjVw1k3RRsQuiXupv66aPvqcOLsWbdVxFOBaf/3yR+75gCfMq7Xbh
+PkP+MP5UbVGWE+uUw821mgKsjNSpGKcjhwM8uXBjAoGAFEU3O8gQXfocVB8lxUeU
+c0inLdAIgiw/36NPuW4NwKxzLOmHzlmvn7C98ihnbnGoQ0XBRfLw8siTbD3INgHY
+NA0JeK8Qrt56b6wK14w9RzLQTu9gy1pULW21p1wswdNK4tlxfnnnozISZAYxeqAx
+YMTtYZN77nb+yY4oE6XEugQ=
+-----END PRIVATE KEY-----
diff --git a/test/certs/goodcn2-cert.pem b/test/certs/goodcn2-cert.pem
new file mode 100644
index 000000000000..d22f899636e7
--- /dev/null
+++ b/test/certs/goodcn2-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDHTCCAgWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMjExMjAyMTcyNTAyWhgPMjEyMTEyMDMxNzI1MDJaMDwxIzAh
+BgNVBAoMGkdvb2QgTkMgVGVzdCBDZXJ0aWZpY2F0ZSAxMRUwEwYDVQQDDAx3d3cu
+Z29vZC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqx1t7HiPe
+kRAWdiGUt4pklKGZ7338An6R7/y0e/8Grx2jeUfyc19BAB7MW1p8L+zdMjbclNE0
+UZ6RZZNexfgMksNI/nW+4Lzu8qu2wFx1MjbTpMT8w/vnsGBMthxLu6+2wdnpdD1B
+0led8xu7PSBgVULqyHcUvoLeRGEsB14yGx7dbIsokYxno1nr4u3BK5ic9KTTSxJR
+Ig93qwo2pAZR7mfnOo33B9alhzvSwmEKJ9v7pERDnIP5ED0HaWFAeXl7GFgoH2y9
+QDyJVuwWsoSWIx4Mr8UIr0IbVJU6KsqEiqqc5P5rX/y4tYMkpHZd9U1EONd2uwmX
+dwSp0LEmQb/DAgMBAAGjTTBLMB0GA1UdDgQWBBSfJPZqs1tk+xjjDrovr13ORDWn
+ojAfBgNVHSMEGDAWgBQI0Zv55tVkcKDxaxqe7VLa3fVQQzAJBgNVHRMEAjAAMA0G
+CSqGSIb3DQEBCwUAA4IBAQAEKXs56hB4DOO1vJe7pByfCHU33ij/ux7u68BdkDQ8
+S9SNaoD7h1XNSmC8kKULvpoKctJzJxh1IH4wtvGGGXsUt1By0a6Y5SnKW9/mG4NM
+D4fGea0G2AeI8BHFs6vl8voYK9wgx9Ygus3Kj/8h6V7t2zB8ZhhVqpZkAQEjj0C2
+1IV273wD0VdZl7uB+MEKk+7eTjNMeo6JzlBBf5GhtA1WbLNdszMfI0ljo7HAX+9L
+yco0xKSKkZQ+v7VdJBfC6odp+epPMZqfyHrkFzUr8XRJfriP1lydPK7AbXLVrLJg
+fIXCvUdxQx4B1LaclUDORL5r2tRhRYdAEKtUz7RpQzJK
+-----END CERTIFICATE-----
diff --git a/test/certs/goodcn2-chain.pem b/test/certs/goodcn2-chain.pem
new file mode 100644
index 000000000000..01b7f47f7d65
--- /dev/null
+++ b/test/certs/goodcn2-chain.pem
@@ -0,0 +1,40 @@
+-----BEGIN CERTIFICATE-----
+MIIDHTCCAgWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMjExMjAyMTcyNTAyWhgPMjEyMTEyMDMxNzI1MDJaMDwxIzAh
+BgNVBAoMGkdvb2QgTkMgVGVzdCBDZXJ0aWZpY2F0ZSAxMRUwEwYDVQQDDAx3d3cu
+Z29vZC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqx1t7HiPe
+kRAWdiGUt4pklKGZ7338An6R7/y0e/8Grx2jeUfyc19BAB7MW1p8L+zdMjbclNE0
+UZ6RZZNexfgMksNI/nW+4Lzu8qu2wFx1MjbTpMT8w/vnsGBMthxLu6+2wdnpdD1B
+0led8xu7PSBgVULqyHcUvoLeRGEsB14yGx7dbIsokYxno1nr4u3BK5ic9KTTSxJR
+Ig93qwo2pAZR7mfnOo33B9alhzvSwmEKJ9v7pERDnIP5ED0HaWFAeXl7GFgoH2y9
+QDyJVuwWsoSWIx4Mr8UIr0IbVJU6KsqEiqqc5P5rX/y4tYMkpHZd9U1EONd2uwmX
+dwSp0LEmQb/DAgMBAAGjTTBLMB0GA1UdDgQWBBSfJPZqs1tk+xjjDrovr13ORDWn
+ojAfBgNVHSMEGDAWgBQI0Zv55tVkcKDxaxqe7VLa3fVQQzAJBgNVHRMEAjAAMA0G
+CSqGSIb3DQEBCwUAA4IBAQAEKXs56hB4DOO1vJe7pByfCHU33ij/ux7u68BdkDQ8
+S9SNaoD7h1XNSmC8kKULvpoKctJzJxh1IH4wtvGGGXsUt1By0a6Y5SnKW9/mG4NM
+D4fGea0G2AeI8BHFs6vl8voYK9wgx9Ygus3Kj/8h6V7t2zB8ZhhVqpZkAQEjj0C2
+1IV273wD0VdZl7uB+MEKk+7eTjNMeo6JzlBBf5GhtA1WbLNdszMfI0ljo7HAX+9L
+yco0xKSKkZQ+v7VdJBfC6odp+epPMZqfyHrkFzUr8XRJfriP1lydPK7AbXLVrLJg
+fIXCvUdxQx4B1LaclUDORL5r2tRhRYdAEKtUz7RpQzJK
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDZjCCAk6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTk0NFoYDzIxMjAxMjEzMjAxOTQ0WjAXMRUwEwYDVQQD
+DAxUZXN0IE5DIENBIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC
+XjL5JEImsGFW5whlXCfDTeqjZAVb+rSXAhZQ25bP9YvhsbmPVYe8A61zwGStl2rF
+mChzN9/+LA40/lh0mjCV82mfNp1XLRPhE9sPGXwfLgJGCy/d6pp/8yGuFmkWPus9
+bhxlOk7ADw4e3R3kVdwn9I3O3mIrI+I45ywZpzrbs/NGFiqhRxXbZTAKyI4INxgB
+VZfkoxqesnjD1j36fq7qEVas6gVm27YA9b+31ofFLM7WN811LQELwTdWiF0/xXiO
+XawU1QnkrNPxCSPWyeaM4tN50ZPRQA/ArV4I7szKhKskRzGwFgdaxorYn8c+2gTq
+fedLPvNw1WPryAumidqTAgMBAAGjgb8wgbwwDwYDVR0TAQH/BAUwAwEB/zALBgNV
+HQ8EBAMCAQYwHQYDVR0OBBYEFAjRm/nm1WRwoPFrGp7tUtrd9VBDMB8GA1UdIwQY
+MBaAFI71Ja8em2uEPXyAmslTnE1y96NSMFwGA1UdHgRVMFOgUTAOggx3d3cuZ29v
+ZC5vcmcwCoIIZ29vZC5jb20wD4ENZ29vZEBnb29kLm9yZzAKgQhnb29kLmNvbTAK
+hwh/AAAB/////zAKhwjAqAAA//8AADANBgkqhkiG9w0BAQsFAAOCAQEAVyRsB6B8
+iCYZxBTOO10Bor+Q4xxgs0udVR90/tM57P8GHd10e8suaW2Dtg9stxZJ3cmsn3zd
++QNxNIQuwHTNtVU0OSqKv6puj6ZQETSya4jDAmRqY47R866MHkSwLUYDMFtuM1Wy
+gnoD5m1/Uy1K/Wvbnp1Zq4jtTB6su8TmIdJgtpEmte7tIQu5kPXsuJrz/x5a1TfR
+hu7h4LJYwKlQtd/LRINnHKd241YSE7PVdG8SPxyrX11hJSC+1Z5Epxc6BCVDVN1E
+fyVDdLXvKf30Nlbg2hZfO/cGTmwOt7RImygzhV/s41v4wtMW0EPuVanGQusRgHFm
+3JC//UMgfkkwAA==
+-----END CERTIFICATE-----
diff --git a/test/certs/goodcn2-key.pem b/test/certs/goodcn2-key.pem
new file mode 100644
index 000000000000..09337552a7fa
--- /dev/null
+++ b/test/certs/goodcn2-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDqx1t7HiPekRAW
+diGUt4pklKGZ7338An6R7/y0e/8Grx2jeUfyc19BAB7MW1p8L+zdMjbclNE0UZ6R
+ZZNexfgMksNI/nW+4Lzu8qu2wFx1MjbTpMT8w/vnsGBMthxLu6+2wdnpdD1B0led
+8xu7PSBgVULqyHcUvoLeRGEsB14yGx7dbIsokYxno1nr4u3BK5ic9KTTSxJRIg93
+qwo2pAZR7mfnOo33B9alhzvSwmEKJ9v7pERDnIP5ED0HaWFAeXl7GFgoH2y9QDyJ
+VuwWsoSWIx4Mr8UIr0IbVJU6KsqEiqqc5P5rX/y4tYMkpHZd9U1EONd2uwmXdwSp
+0LEmQb/DAgMBAAECggEAIdXrXDoCx1+2ptYNjuZIvqghBhNa38foP9YLYGOCZI82
+QUoIUWvJLY/74E3GI6GwjExhVbbo05ZzuNafv4fecMlx9YIerAytje5RSvw8FvPO
+rP/RF/CSzFhB+KxCNbPt5fPYGOoUrfjHgc74jyqHEPsYsseDSe0O5UOLkZHaRHQX
+bOhj/lXCN1KKsK+UXscRO55T5SRmHAe4RWaXX3Z4H6FGabKY+AVkT5GWq814PIFU
+amoch4TwAKgAY8h7kpkfVgLNe3hLddLU0roakfM1cZdpf9n0EGGi21KluNvSa09a
+tiDifv5WDkIQ/Ca2fUvE27atMb1gm4bUzp5OoTWhoQKBgQDrfuxqvouVvM3AyxUY
+e6r7vegg5NiODjpBlT/QUqJjhqTSw6Tq4/f5VWnLy3bzipwvzxFQ8E2LjQMtl2Su
+aQ8jSb9jwpmmWCoOecRExWgboYPzpczhnXpF4DIYhyomBKTBVbk9EI0wJ/tx9F1B
+XCHhA3z8tJvkPTM+QAGGJxdcEQKBgQD/OHN4ujRZ5NgXZp4L9VDosMREvRUbwz+4
+7fgQ70JKdWIVbKFa5/TVIObspLZoRI0jaa4OaaE3v6rqF/yxdPsaPAXW7URR7K52
+HbI41skH0bcflISDdeTpqmlIRAzHG7MeAobV/ARmCnLpa7Lt4p8wT+zAzuY+ncv3
+DabNjePCkwKBgQDoVH/Jj9MGFw6mdbSKQvedBO5OBXfgLgkrSqN6UwwCRIO3q2y4
+j8/FHI8Tj9f6zXTpddAPmgPm+Wd5QzMBHoTgu5EmSoZrpe9X+Km5b0gWenJDnf9T
+Vpma9mR17mOWvl4MnxXxOLMSH1/iPMMECHEkHNziMwzZT8eOUncucsKJAQKBgEnp
+62c3ZhnysLJ2Qads8HWzW+QcbpSPw1CneoRNBoHR5QoXX9OYAcwHr1kxirI/yDBN
+Vt9NsCcZF0Kcl8489svuPjK0nGithwkmKItViPr+vW4j8QyxhA44EC2hp6GyX/l8
++dfXGN8Ef6siSbujOj8fpo1gXkYcJQnzpi85vJCJAoGAdheX12Afx94YbljuaCdT
+T/E+t6xHHnDCpETHmsLh53H03Kv91JCrANMu+BZzKUXI+FW06GJB43S26hF5s+k5
+ZAjJKpgbVC1Jo4Zq5SjlCQhiOvwJ9rt2/6g7qzHZsQMjY/FZKd+8PMgPxWkvjeI7
+lAagooTJyC/VDf6LB05mitg=
+-----END PRIVATE KEY-----
diff --git a/test/certs/grfc.pem b/test/certs/grfc.pem
new file mode 100644
index 000000000000..952818275be1
--- /dev/null
+++ b/test/certs/grfc.pem
@@ -0,0 +1,30 @@
+-----BEGIN CERTIFICATE-----
+MIIFGDCCBMegAwIBAgIQDIxAk7vmk71DC/UYJgMdBTAIBgYqhQMCAgMwggEWMRgw
+FgYFKoUDZAESDTEwMjc3MzkzMzQ0NzkxGjAYBggqhQMDgQMBARIMMDA3NzA2MjI4
+MjE4MTowOAYDVQQJDDHQlNC10YDQsdC10L3QtdCy0YHQutCw0Y8g0L3QsNCxLiDQ
+tC4gNyDRgdGC0YAuIDE1MR8wHQYJKoZIhvcNAQkBFhBwa2ktZ3JmY0BncmZjLnJ1
+MQswCQYDVQQGEwJSVTEcMBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDEVMBMG
+A1UEBwwM0JzQvtGB0LrQstCwMRwwGgYDVQQKDBPQpNCT0KPQnyAi0JPQoNCn0KYi
+MSEwHwYDVQQDDBjQo9CmINCk0JPQo9CfICLQk9Cg0KfQpiIwHhcNMTMwMzEyMDcz
+ODI2WhcNMjgwMzEyMDc0NjAwWjCCARYxGDAWBgUqhQNkARINMTAyNzczOTMzNDQ3
+OTEaMBgGCCqFAwOBAwEBEgwwMDc3MDYyMjgyMTgxOjA4BgNVBAkMMdCU0LXRgNCx
+0LXQvdC10LLRgdC60LDRjyDQvdCw0LEuINC0LiA3INGB0YLRgC4gMTUxHzAdBgkq
+hkiG9w0BCQEWEHBraS1ncmZjQGdyZmMucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQI
+DBM3NyDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxHDAa
+BgNVBAoME9Ck0JPQo9CfICLQk9Cg0KfQpiIxITAfBgNVBAMMGNCj0KYg0KTQk9Cj
+0J8gItCT0KDQp9CmIjBjMBwGBiqFAwICEzASBgcqhQMCAiMBBgcqhQMCAh4BA0MA
+BECWU7YnkJgff0sdJ+i50FXAYZlpcSz8wO/2AnfCzGC+PMj/NGOKMMWcv8I9eN7W
+eEXwIuRc96StDM8zJigQGd/1o4IB6TCCAeUwNgYFKoUDZG8ELQwrItCa0YDQuNC/
+0YLQvtCf0YDQviBDU1AiICjQstC10YDRgdC40Y8gMy42KTCCATMGBSqFA2RwBIIB
+KDCCASQMKyLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDMu
+NikMUyLQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAgItCa
+0YDQuNC/0YLQvtCf0YDQviDQo9CmIiDQstC10YDRgdC40LggMS41DE/QodC10YDR
+gtC40YTQuNC60LDRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQv
+MTIxLTE4NTkg0L7RgiAxNy4wNi4yMDEyDE/QodC10YDRgtC40YTQuNC60LDRgiDR
+gdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQvMTI4LTE4MjIg0L7RgiAw
+MS4wNi4yMDEyMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRrAIaDidIAz1a4a+TjNhAeH3KuwzAQBgkrBgEEAYI3FQEEAwIBADAlBgNVHSAE
+HjAcMAgGBiqFA2RxATAIBgYqhQNkcQIwBgYEVR0gADAIBgYqhQMCAgMDQQC9ld1f
+Oit0pSliIMIkqIugExoh9UrWLrE/9VDplqCiyXkJFaJBwGDhHT8ljYj0TGDzD07j
+KW64bgG0AywHjyc3
+-----END CERTIFICATE-----
diff --git a/test/certs/interCA.key b/test/certs/interCA.key
new file mode 100644
index 000000000000..c32fe26bc979
--- /dev/null
+++ b/test/certs/interCA.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAu7NHo76UDp738A/nuEfvVkKL7a7Kjk8PJIYkRKouSZZgBW6Q
+xBWptfJ6UZLeoDnBjJ47hc7s+ohLkJnnsodAalgMKTIFjDLXhMyzgGqpBJf/ydvl
+oEWwP/KZsB32z1v3fn926euBaA9YUAHpwc15i8VaIREPQQPsRA0ZC/3AN2PpPztQ
+vTkYUkKyTbAfWhN8ymxR3fZjph+GjUrBfDp90qpUVTgkIp3uXOgAkndB1BI2MvWj
+m6mOO8kjVC281auculTozLNFvthv16q3FZMc3/W1aslQa6wCa529+f8v4itM1oCQ
+T/h14cK+ZjE7zbhIqwXlWLs/uoVHq1G7iYa9BQIDAQABAoIBABa8FldNBB3pP1rC
+cmytud2W3eACJeKqzMi9vrLachTTs/m0dLBrd0zke9BZm8GIfVsM52TDtYx66bww
+CBJls3WuCHsM5gMfPV+Gc8+AG8zEpGTMz7lj938nYVolpvliyE14Hu0ia2AxS58V
+PD0PKEO3ubz7lf9n/DwZ4gjDyX5r1Cq+thwPlIf4PbEcGHk5SYxNm2DGR0DNL676
+X7CrRu3JBa2mY+moTV/pMrjvwAInmSxs4RBO7ggdYEief/4cBYyzMdiQ1v0UxvdO
+674dBJJFG32akPrnPqza7U41ivoDPlgCpKWHDaZadI0Joozd2pw0Mq0a8cyig0BJ
+Wa3d9xkCgYEA9T3j8F52u+QMaMzV1VENUAwo0Sqhk8xU0r/4l5PsvCjOuJ7NZkkW
+EQnNOI++zaPCeBRV55X0A5E8Pi3uEdKt6m+wsncJzGEVNRwixfd0Ul7Itntq7u9L
+/DHTlwpQ4t4PLNu8/uSBDN9A2slY2WsoXkJsdYPgjkrS2rYkt5bHFN8CgYEAw+8w
+Qw/zTCBmerzYLJSsjz9rcD2hTtDw72UF1rvEg4QP/9v0I/OU7Lu0ds0KmKJcJfay
+ZDMeBT8tW6LFztqdFi24tKISfodfYdET32lNd4QnMtWhoqXXXNiJY5gQC16YmSJm
+R7Dgw9hBrr0323/lhhwDDysq1lgD9QbUVEacJpsCgYAoau/TIK5u3vHQn9mqE3af
+N7HObzk785QTO8JLsPx2Mj+Hm9x8PBVf736cEMzAdXnKcoeJ6GPT5q7IDKfM1i0F
+kyzK7OV3gpSNMTrl55eLL8XilUqVYGjkgo29udyE11Ym7XwjgiNmrLCynjZ/drKr
+fkUDxR1QNjK0CwrYGwhqfwKBgQDAYGn3foK4nRthqWdrJjLjlzZLBwgJldbqhjsc
+YlIJezImWnU0k2YGpioDd0DPKqLlV3pCLXptVmGXlpM3jags7YlsObGE8C+zoBAu
+DHtWPLgsDltckg6Jh8YltlkSgLe9q2vXOhEF2aBsDDb62nGmonxSeWTe/Z4tB56U
+fJu2vwKBgFnGbZIcH8sDR7Vwh0sjSKnFkZ1v0T4qsBKpDz9yCvZVIgIFXPkKnALT
++OEpQTuLVN/MZxVlc8qo8UFflJprDsK1/Rm3iPaw+lwErswgddNUKNLnLPjlxcEe
+nTinsfyf4i48+IW55UFVU118nyufNeDdasoU6SSBH/MdeNq4hrTa
+-----END RSA PRIVATE KEY-----
diff --git a/test/certs/interCA.pem b/test/certs/interCA.pem
new file mode 100644
index 000000000000..35568abe17a9
--- /dev/null
+++ b/test/certs/interCA.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAmigAwIBAgIJANnoWlLlEsTgMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE3MDVa
+Fw0zNTA3MDIxMzE3MDVaMFcxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0
+YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMT
+B2ludGVyQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7s0ejvpQO
+nvfwD+e4R+9WQovtrsqOTw8khiREqi5JlmAFbpDEFam18npRkt6gOcGMnjuFzuz6
+iEuQmeeyh0BqWAwpMgWMMteEzLOAaqkEl//J2+WgRbA/8pmwHfbPW/d+f3bp64Fo
+D1hQAenBzXmLxVohEQ9BA+xEDRkL/cA3Y+k/O1C9ORhSQrJNsB9aE3zKbFHd9mOm
+H4aNSsF8On3SqlRVOCQine5c6ACSd0HUEjYy9aObqY47ySNULbzVq5y6VOjMs0W+
+2G/XqrcVkxzf9bVqyVBrrAJrnb35/y/iK0zWgJBP+HXhwr5mMTvNuEirBeVYuz+6
+hUerUbuJhr0FAgMBAAGjUDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFBj61iO5
+j11dE30+j6iRx9lhwBcuMB8GA1UdIwQYMBaAFIVWiTXinwAa4YYDC0uvdhJrM239
+MA0GCSqGSIb3DQEBCwUAA4IBAQDAU0MvL/yZpmibhxUsoSsa97UJbejn5IbxpPzZ
+4WHw8lsoUGs12ZHzQJ9LxkZVeuccFXy9yFEHW56GTlkBmD2qrddlmQCfQ3m8jtZ9
+Hh5feKAyrqfmfsWF5QPjAmdj/MFdq+yMJVosDftkmUmaBHjzbvbcq1sWh/6drH8U
+7pdYRpfeEY8dHSU6FHwVN/H8VaBB7vYYc2wXwtk8On7z2ocIVHn9RPkcLwmwJjb/
+e4jmcYiyZev22KXQudeHc4w6crWiEFkVspomn5PqDmza3rkdB3baXFVZ6sd23ufU
+wjkiKKtwRBwU+5tCCagQZoeQ5dZXQThkiH2XEIOCOLxyD/tb
+-----END CERTIFICATE-----
diff --git a/test/certs/invalid-cert.pem b/test/certs/invalid-cert.pem
new file mode 100644
index 000000000000..a8951305a3dc
--- /dev/null
+++ b/test/certs/invalid-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDJTCCAg2gAwIBAgIUEUSW5o7qpgNCWyXic9Fc9tCLS0gwDQYJKoZIhvcNAQEL
+BQAwEzERMA8GA1UEAwwIUGVyc29TaW0wHhcNMjAxMjE2MDY1NjM5WhcNMzAxMjE2
+MDY1NjM5WjATMREwDwYDVQQDDAhQZXJzb1NpbTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAMsgRKnnZbQtG9bB9Hn+CoOOsanmnRELSlGq521qi/eBgs2w
+SdHYM6rsJFwY89RvINLGeUZh/pu7c+ODtTafAWE3JkynG01d2Zrvp1V1r97+FGyD
+f+b1hAggxBy70bTRyr1gAoKQTAm74U/1lj13EpWz7zshgXJ/Pn/hUyTmpNW+fTRE
+xaifN0jkl5tZUURGA6w3+BRhVDQtt92vLihqUGaEFpL8yqqFnN44AoQ5+lgMafWi
+UyYMHcK75ZB8WWklq8zjRP3xC1h56k01rT6KJO6i+BxMcADerYsn5qTlcUiKcpRU
+b6RzLvCUwj91t1aX6npDI3BzSP+wBUUANBfuHEMCAwEAAaNxMG8wFwYDVR0OBBA8
+yBBnvz1Zt6pHm2GwBaRyMBcGA1UdIwQQPMgQZ789WbeqR5thsAWkcjAPBgNVHRMB
+Af8EBTADAQH/MAsGA1UdDwQEAwIChDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
+BQUHAwIwDQYJKoZIhvcNAQELBQADggEBAIEzVbttOUc7kK4aY+74TANFZK/qtBQ7
+94a/P30TGWSRUq2HnDsR8Vo4z8xm5oKeC+SIi6NGzviWYquuzpJ7idcbr0MIuSyD
++Vg6n1sG64DxWNdGO9lR5c4mWFdIajShczS2+4QIRB/lFZCf7GhPMtIcbP1o9ckY
+2vyv5ZAEU9Z5n0PY+abrKsj0XyvJwdycEsUTywa36fuv6hP3UboLtvK6naXLMrTj
+WtSA6PXjHy7h8h0NC8XLk64mc0lcRC4WM+xJ/C+NHglpmBqBxnStpnZykMZYD1Vy
+JJ1wNc+Y3e2uMBDxZviH3dIPIgqP1Vpi2TWfqr3DTBNCRf4dl/wwNU8=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/key-pass-12345.pem b/test/certs/key-pass-12345.pem
new file mode 100644
index 000000000000..e1aabfeb79a5
--- /dev/null
+++ b/test/certs/key-pass-12345.pem
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIuH8X1xWl9ygCAggA
+MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCw27UHDuBtxWa928AXEEb1BIIE
+0A/aH/nMGoifA4TKpLg1SobskugzWV7+N2qh3j9LZrz6GxB9jR64JBx8+eKBu5lv
+VeMp/cIuGZscJ56QFZ01tTEyIiP1eeD68eQol2n7KEwk9DKkR2QbQuLDOaR4voqM
+rm02uehLnNPJ7d81CrgfqIRi5OF4cWVV20jN7pQMxn8KqW4OYPdOrV1i6mTnsbNz
+M5hL9YMud4wppWwA93MLD4TGvQBQSTvreYtLNy1atq1uK4k2KZh2tw/CTNiCo47R
+N6Ft+CDJblikodpj/a6ZPJ84qBMonTbc7IMvkeWP0mnzA25ohOW7RfhgWzz/mfx3
+/ypX8xqLd8JzmdRFOcc5MFdVcYPmgFzFVtEJ0bBZx6WCW+6OszLkt/7p7raRKirA
+/zJJSBmEvQKvwtZ6I/rG6SqMFiTseRuWq0sXa1NX2zlH9y+g68K+7Bt5816l93WD
+p0GQgWxXV2J+QJ3fGvxMdQG7qmGWx6dc6yZkFw9e94sTHH74fShTv53OekCgWg2B
+58pFBTK9NGtiG5LawtDKMqlYcSKvfqjvKwDokQS104DwM+om0QBLTH+RRxh05jYv
+2hx1uwSXoo8oO+AYaYsEQE8z7mYxQr5Ea1gKbtyYPE0Eo5rrH9fYzXN8A1LH7wbL
+ywQIZq/lthuJGarTPCFjoHrPW9O+FiQBLsn5Ej2VVm2MQpS3v6m7SnHTWBaPZvkq
+GEGw/MZiwkzyULsg7zRKfnNhYBfxdg+gmwIR6x1e4vT6hAFjZbvn1eOlFTLqIBpE
+XQCqxaITtW6bCEhvl/c0AKkAWM39XEs/ff1giYza+6SLgLQObHApp+Q/Hk3PaUDq
+Wnm/5w8IyQcGDAik0f6JqbQ+licBk5lHlOifO0GFKqePlKLY/Mvx9al2UflzOydG
+u9BpXx8sLooLuyycXFhgpZZLp19+79KgPm+ZrXKlKKwTDQwuB+eGxr2wKWCbJb2y
+gmnBCtml5apTQx+l630GldMjkhwxOSZJoXy6XKQew85L/J9Jknta3bjGbyL2lEeW
+/gfT+L6WrmG3Hf4xGhpkkx6UITzujJbE2/YyxJ+sXlRuYd4ld0Hfn6Ihsajknj8G
+jvLb77FvgNndf5SXlqU3sMGcOPizQkMr/AmtHPzBLT8O6OxpeAOWzG3jOvznRsmZ
+27nmW4cM/6t/86PvnAssPETFcrC3GqFYWnzdVaWunCz5zn4xIot3633VGR1lbxX4
+kTQLBzgBjKuajgVim5Q4obfaqnJEvHkbJaAFJg0y6uId2RIzYo5/onHrVOQR5ulB
+qyR8YJjWu3pyq8t5q9Iw3L+pWDOh4AH7/ay0IBu/qxapvybqEXyol3kAJIsY0AKZ
+Y5dPA4duWjW0MHNDgliAssKr2t3CTALU9nrBVX1fEPR4Y05JZ9f4OIueu/IGdDIE
+snLdqtkY0sOTma9FhKDv1RwsumT/UfOqUJ3ZSJCaKgE/RnzS3YN+j5BYv788micZ
+S9nl5KX+q/VSVXxial0nxkGiqs73mASF5JP4iarRihSntGMvn4PPB7Oid5SVLrqk
+JFFy7pjL8xuERx0hlShUl2q8/C3DSi0u+QkIhNrUBKZRADzNDkJcfWmKwbhq7HPp
+ghzvaDrFtH/4o8t7kd+TVdKjnS0cna43Sj94w3J5/y5Y
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/test/certs/leaf-chain.pem b/test/certs/leaf-chain.pem
new file mode 100644
index 000000000000..a2e4a505135e
--- /dev/null
+++ b/test/certs/leaf-chain.pem
@@ -0,0 +1,84 @@
+-----BEGIN CERTIFICATE-----
+MIIDfjCCAmagAwIBAgIJAKRNsDKacUqNMA0GCSqGSIb3DQEBCwUAMFoxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEzARBgNVBAMTCnN1YmludGVyQ0EwHhcNMTUwNzAyMTMx
+OTQ5WhcNMzUwNzAyMTMxOTQ5WjBUMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29t
+ZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ0wCwYD
+VQQDEwRsZWFmMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv0Qo9WC/
+BKA70LtQJdwVGSXqr9dut3cQmiFzTb/SaWldjOT1sRNDFxSzdTJjU/8cIDEZvaTI
+wRxP/dtVQLjc+4jzrUwz93NuZYlsEWUEUg4Lrnfs0Nz50yHk4rJhVxWjb8Ii/wRB
+ViWHFExP7CwTkXiTclC1bCqTuWkjxF3thTfTsttRyY7qNkz2JpNx0guD8v4otQoY
+jA5AEZvK4IXLwOwxol5xBTMvIrvvff2kkh+c7OC2QVbUTow/oppjqIKCx2maNHCt
+LFTJELf3fwtRJLJsy4fKGP0/6kpZc8Sp88WK4B4FauF9IV1CmoAJUC1vJxhagHIK
+fVtFjUWs8GPobQIDAQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQcHcT+8SVG
+IRlN9YTuM9rlz7UZfzAfBgNVHSMEGDAWgBTpZ30QdMGarrhMPwk+HHAV3R8aTzAN
+BgkqhkiG9w0BAQsFAAOCAQEAGjmSkF8is+v0/RLcnSRiCXENz+yNi4pFCAt6dOtT
+6Gtpqa1tY5It9lVppfWb26JrygMIzOr/fB0r1Q7FtZ/7Ft3P6IXVdk3GDO0QsORD
+2dRAejhYpc5c7joHxAw9oRfKrEqE+ihVPUTcfcIuBaalvuhkpQRmKP71ws5DVzOw
+QhnMd0TtIrbKHaNQ4kNsmSY5fQolwB0LtNfTus7OEFdcZWhOXrWImKXN9jewPKdV
+mSG34NfXOnA6qx0eQg06z+TkdrptH6j1Va2vS1/bL+h1GxjpTHlvTGaZYxaloIjw
+y/EzY5jygRoABnR3eBm15CYZwwKL9izIq1H3OhymEi/Ycg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAmygAwIBAgIJAJkv2OGshkmUMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMTB2ludGVyQ0EwHhcNMTUwNzAyMTMxODIz
+WhcNMzUwNzAyMTMxODIzWjBaMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1T
+dGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQD
+EwpzdWJpbnRlckNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/zQj
+vhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb2ARVkYZP5e9gHb04wPVz
+2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1nJeSv3na8gyOoCheG64kW
+VbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/CpdCHE3DKAzAiri3GVc90
+OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMywtz4hhY/XZTvdEn290aL
+857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRFHONWZG1T4mRY1Drh6VbJ
+Gb+0GNIldNLQqigkfwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBTp
+Z30QdMGarrhMPwk+HHAV3R8aTzAfBgNVHSMEGDAWgBQY+tYjuY9dXRN9Po+okcfZ
+YcAXLjANBgkqhkiG9w0BAQsFAAOCAQEAgVUsOf9rdHlQDw4clP8GMY7QahfXbvd8
+8o++P18KeInQXH6+sCg0axZXzhOmKwn+Ina3EsOP7xk4aKIYwJ4A1xBuT7fKxquQ
+pbJyjkEBsNRVLC9t4gOA0FC791v5bOCZjyff5uN+hy8r0828nVxha6CKLqwrPd+E
+mC7DtilSZIgO2vwbTBL6ifmw9n1dd/Bl8Wdjnl7YJqTIf0Ozc2SZSMRUq9ryn4Wq
+YrjRl8NwioGb1LfjEJ0wJi2ngL3IgaN94qmDn10OJs8hlsufwP1n+Bca3fsl0m5U
+gUMG+CXxbF0kdCKZ9kQb1MJE4vOk6zfyBGQndmQnxHjt5botI/xpXg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAmigAwIBAgIJANnoWlLlEsTgMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE3MDVa
+Fw0zNTA3MDIxMzE3MDVaMFcxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0
+YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMT
+B2ludGVyQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7s0ejvpQO
+nvfwD+e4R+9WQovtrsqOTw8khiREqi5JlmAFbpDEFam18npRkt6gOcGMnjuFzuz6
+iEuQmeeyh0BqWAwpMgWMMteEzLOAaqkEl//J2+WgRbA/8pmwHfbPW/d+f3bp64Fo
+D1hQAenBzXmLxVohEQ9BA+xEDRkL/cA3Y+k/O1C9ORhSQrJNsB9aE3zKbFHd9mOm
+H4aNSsF8On3SqlRVOCQine5c6ACSd0HUEjYy9aObqY47ySNULbzVq5y6VOjMs0W+
+2G/XqrcVkxzf9bVqyVBrrAJrnb35/y/iK0zWgJBP+HXhwr5mMTvNuEirBeVYuz+6
+hUerUbuJhr0FAgMBAAGjUDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFBj61iO5
+j11dE30+j6iRx9lhwBcuMB8GA1UdIwQYMBaAFIVWiTXinwAa4YYDC0uvdhJrM239
+MA0GCSqGSIb3DQEBCwUAA4IBAQDAU0MvL/yZpmibhxUsoSsa97UJbejn5IbxpPzZ
+4WHw8lsoUGs12ZHzQJ9LxkZVeuccFXy9yFEHW56GTlkBmD2qrddlmQCfQ3m8jtZ9
+Hh5feKAyrqfmfsWF5QPjAmdj/MFdq+yMJVosDftkmUmaBHjzbvbcq1sWh/6drH8U
+7pdYRpfeEY8dHSU6FHwVN/H8VaBB7vYYc2wXwtk8On7z2ocIVHn9RPkcLwmwJjb/
+e4jmcYiyZev22KXQudeHc4w6crWiEFkVspomn5PqDmza3rkdB3baXFVZ6sd23ufU
+wjkiKKtwRBwU+5tCCagQZoeQ5dZXQThkiH2XEIOCOLxyD/tb
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDfzCCAmegAwIBAgIJAIhDKcvC6xWaMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE1MTFa
+Fw0zNTA3MDIxMzE1MTFaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0
+YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMM
+BnJvb3RDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMDxa3eIrDXf
++3NTL5KAL3QWMk31ECBvbDqO0dxr4S4+wwQPv5vEyRLR5AtFl+UGzWY64eDiK9+i
+xOx70z08iv9edKCrpwNqFlteksR+W3mKadS8g16uQpJ0pSvnAMGp3NWxUwcPc/eO
+rRQ+JZ7lHubMkc2VDIBEIMP9F8+RPWMQHBRb+8OowYiyd/+c2/xqRERE94XsCCzU
+34Gjecn+HpuTFlO3l6u+Txql4vpGBeQNnCqkzLkeIaBsxKtZsEA5u/mIrf3fjbQL
+r35B4CE8yDNFSYQvkwbu/U/tT/O8m978JV5V1XXUxXs6QDUGn8SEtGyTDK83Wq+2
+QU0mIxy4ArMCAwEAAaNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUhVaJNeKf
+ABrhhgMLS692Emszbf0wHwYDVR0jBBgwFoAUhVaJNeKfABrhhgMLS692Emszbf0w
+DQYJKoZIhvcNAQELBQADggEBADIKvyoK4rtPQ86I2lo5EDeAuzctXi2I3SZpnOe0
+mCCxJeZhWW0S7JuHvlfhEgXFBPEXzhS4HJLUlZUsWyiJ+3KcINMygaiF7MgIe6hZ
+WzpsMatS4mbNFElc89M+YryRFrQc9d1Uqjxhl3ms5MhDNcMP/PNwHa/wnIoqkpNI
+qtDoR741wcZ7bdr6XVdF8+pBjzbBPPRSf24x3bqavHBWcTjcSVcM/ZEXxeqH5SN0
+GbK2mQxrogX4UWjtl+DfYvl+ejpEcYNXKEmIabUUHtpG42544cuPtZizLW5bt/aT
+JBQfpPZpvf9MUlACxUONFOLQdZ8SXpSJ0e93iX2J2Z52mSQ=
+-----END CERTIFICATE-----
diff --git a/test/certs/leaf-encrypted.key b/test/certs/leaf-encrypted.key
new file mode 100644
index 000000000000..99a802dbe6ad
--- /dev/null
+++ b/test/certs/leaf-encrypted.key
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIEBBNanZFjs8CAggA
+MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBDr8bhquxPf762O3jk0LAtJBIIE
+0FQB7c06dpoHn1KBn8jTzsLIdVR0SeKUvq4edZfUPbB/6go97j48BwSzAaXY7BNL
+90GRMrNNjKZDLeNf0wwf1+67YX7neGnb+LdxpQdqEjOTGQdwTx9SG6XIqT8x4R67
+rI2DQqI937FSor9292koXQNM9Asoenn6kOCITaa8chsPdKCtFjfVmqZRMaewr5PW
+W1rooFuCVAIfgBOOaEeN7OMTJRdAGtWWOJqyLB29gXxwaI1+PnXmkHPgRGXZYz7W
+N5lTp1xvFPY+Rp/cK0DfeR5MrMYSVvrXbi6usjteJ2h0Rzcy8SY6Jnvuaoowi+rj
+lDUP0K/51tTQBd6bpsvcmc2cBx+7pg4BAkf9SnuKQpYCWPjiwrCiDJIP/o5GYIn2
+m/3K2pLahjOeGZAmhGUi0fZPZhaq37IQKwuzLDuYw1CkR7LhaJcJ9V1vXMPePgCY
++BvjFG5z0mLDwUNvzCHQokav3Z/QT6CfOgTL10qKuBgylT1d5Cw7bfv8Lnc6C/YK
+aVXosCaKTJO8r4t7NgJX4PYQP/DZIl5CJIoUzJkrAkShLwcGtXMHVNSWx4LS60QY
+lfjz80cWWE6Tx/XjBkae0AQJW8S9nDB8/X80ox8jJ/sdd5XNZqUQhDxBP5/4GiAS
+pZlgp/IwssoG5HUnwn/4AUgD7Gdo5QRqFlkXeCFlHgjBrEHBkevHECRHAdWwrK7X
+5td662K1B9hm6EfA1R51jiOKBuM0bwYtI+tpmpT5zeDGeaOWuPUYPUFjfo9xt1Lx
+cmX3ouBt34uT/cQesPxP8gJwRdo0KqPK+KLjtQazXmHFu+FStZ29gUvhqAw9kcxq
+ps9neGAl3DJgYbB1QqqefGqFWBhJzt4toqxcgm6Z0PJSYQlxJEC3yWWs5w5wfLJJ
+KGfnpsY1IGYsbw9Caa84XqnzHosGWx724GJeb3YSwwMj311oMi9s8J/d/NpJZHOu
+uk/mQWezCfdEFSnkOtIDJWTQUtRtRfIZQp243c25E3/rJySuSoMfn4eolAGurse8
+6r7SEJ6MUjCTd3ZcA+XZAtFxPQnNBYm691hvGE6uclxYy9L6bmws9dosNlpCyvIQ
++OYdB9Mvx9hs0KwAWZ6bnIxa3tc6Ob9mxV7ycMS43d4ShEqzy44DZD02Z0iQIRym
+1AoGwgLbc2d9NouUiw2ur5n6ByYCTHwmMSAstVovuBoS2XDF23BzLL7KuCnkHH0y
++M6CRaXW0ceTP4DfEvBphxfj4NNEZpjm8j6ERvnnQvC5tRAaMglhg1WOvUVUtPg5
+cJPIiSn+yVuoFDnLKJ53N9NzDtUKSBQgwNGyVVPTzpfxLmjg00bNQ7eyoRr6uK0l
+ezmHemo52JpCaBGV01tnvVKzGouFN/KxP9GxvPQY8UQxVkE+E/p0UjGOpNLIDmzl
+/qVKxky9lMBoHc+neeCbOrtgwkyYgpPkKlmTTsi/yUxpbUmobFZJTUbOWrpeRbw3
+Pt9u8NeVmD4Ys/NenHIJwksOqmWxSy7IjJpzQsee1CZXV7McAYsg24tP4Bdj9aGT
+hsMyiaiNB+rjkNxhUCm39nJsaN1AoTZ3Br1UYfHrfocif12yNGOEBy2swfjQIGNH
+fjGk3px34MZZv3S0bM/ZPi9ankzAZnf8qkHoDVtsP+Gk
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/test/certs/leaf.key b/test/certs/leaf.key
new file mode 100644
index 000000000000..a1b1721245b7
--- /dev/null
+++ b/test/certs/leaf.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAv0Qo9WC/BKA70LtQJdwVGSXqr9dut3cQmiFzTb/SaWldjOT1
+sRNDFxSzdTJjU/8cIDEZvaTIwRxP/dtVQLjc+4jzrUwz93NuZYlsEWUEUg4Lrnfs
+0Nz50yHk4rJhVxWjb8Ii/wRBViWHFExP7CwTkXiTclC1bCqTuWkjxF3thTfTsttR
+yY7qNkz2JpNx0guD8v4otQoYjA5AEZvK4IXLwOwxol5xBTMvIrvvff2kkh+c7OC2
+QVbUTow/oppjqIKCx2maNHCtLFTJELf3fwtRJLJsy4fKGP0/6kpZc8Sp88WK4B4F
+auF9IV1CmoAJUC1vJxhagHIKfVtFjUWs8GPobQIDAQABAoIBAB1fCiskQDElqgnT
+uesWcOb7u55lJstlrVb97Ab0fgtR8tvADTq0Colw1F4a7sXnVxpab+l/dJSzFFWX
+aPAXc1ftH/5sxU4qm7lb8Qx6xr8TCRgxslwgkvypJ8zoN6p32DFBTr56mM3x1Vx4
+m41Y92hPa9USL8n8f9LpImT1R5Q9ShI/RUCowPyzhC6OGkFSBJu72nyA3WK0znXn
+q5TNsTRdJLOug7eoJJvhOPfy3neNQV0f2jQ+2wDKCYvn6i4j9FSLgYC/vorqofEd
+vFBHxl374117F6DXdBChyD4CD5vsplB0zcExRUCT5+iBqf5uc8CbLHeyNk6vSaf5
+BljHWsECgYEA93QnlKsVycgCQqHt2q8EIZ5p7ksGYRVfBEzgetsNdpxvSwrLyLQE
+L5AKG3upndOofCeJnLuQF1j954FjCs5Y+8Sy2H1D1EPrHSBp4ig2F5aOxT3vYROd
+v+/mF4ZUzlIlv3jNDz5IoLaxm9vhXTtLLUtQyTueGDmqwlht0Kr3/gcCgYEAxd86
+Q23jT4DmJqUl+g0lWdc2dgej0jwFfJ2BEw/Q55vHjqj96oAX5QQZFOUhZU8Otd/D
+lLzlsFn0pOaSW/RB4l5Kv8ab+ZpxfAV6Gq47nlfzmEGGx4wcoL0xkHufiXg0sqaG
+UtEMSKFhxPQZhWojUimK/+YIF69molxA6G9miOsCgYEA8mICSytxwh55qE74rtXz
+1AJZfKJcc0f9tDahQ3XBsEb29Kh0h/lciEIsxFLTB9dFF6easb0/HL98pQElxHXu
+z14SWOAKSqbka7lOPcppgZ1l52oNSiduw4z28mAQPbBVbUGkiqPVfCa3vhUYoLvt
+nUZCsXoGF3CVBJydpGFzXI0CgYEAtt3Jg72PoM8YZEimI0R462F4xHXlEYtE6tjJ
+C+vG/fU65P4Kw+ijrJQv9d6YEX+RscXdg51bjLJl5OvuAStopCLOZBPR3Ei+bobF
+RNkW4gyYZHLSc6JqZqbSopuNYkeENEKvyuPFvW3f5FxPJbxkbi9UdZCKlBEXAh/O
+IMGregcCgYBC8bS7zk6KNDy8q2uC/m/g6LRMxpb8G4jsrcLoyuJs3zDckBjQuLJQ
+IOMXcQBWN1h+DKekF2ecr3fJAJyEv4pU4Ct2r/ZTYFMdJTyAbjw0mqOjUR4nsdOh
+t/vCbt0QW3HXYTcVdCnFqBtelKnI12KoC0jAO9EAJGZ6kE/NwG6dQg==
+-----END RSA PRIVATE KEY-----
diff --git a/test/certs/leaf.pem b/test/certs/leaf.pem
new file mode 100644
index 000000000000..bb94d126e93f
--- /dev/null
+++ b/test/certs/leaf.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDfjCCAmagAwIBAgIJAKRNsDKacUqNMA0GCSqGSIb3DQEBCwUAMFoxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEzARBgNVBAMTCnN1YmludGVyQ0EwHhcNMTUwNzAyMTMx
+OTQ5WhcNMzUwNzAyMTMxOTQ5WjBUMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29t
+ZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ0wCwYD
+VQQDEwRsZWFmMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv0Qo9WC/
+BKA70LtQJdwVGSXqr9dut3cQmiFzTb/SaWldjOT1sRNDFxSzdTJjU/8cIDEZvaTI
+wRxP/dtVQLjc+4jzrUwz93NuZYlsEWUEUg4Lrnfs0Nz50yHk4rJhVxWjb8Ii/wRB
+ViWHFExP7CwTkXiTclC1bCqTuWkjxF3thTfTsttRyY7qNkz2JpNx0guD8v4otQoY
+jA5AEZvK4IXLwOwxol5xBTMvIrvvff2kkh+c7OC2QVbUTow/oppjqIKCx2maNHCt
+LFTJELf3fwtRJLJsy4fKGP0/6kpZc8Sp88WK4B4FauF9IV1CmoAJUC1vJxhagHIK
+fVtFjUWs8GPobQIDAQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQcHcT+8SVG
+IRlN9YTuM9rlz7UZfzAfBgNVHSMEGDAWgBTpZ30QdMGarrhMPwk+HHAV3R8aTzAN
+BgkqhkiG9w0BAQsFAAOCAQEAGjmSkF8is+v0/RLcnSRiCXENz+yNi4pFCAt6dOtT
+6Gtpqa1tY5It9lVppfWb26JrygMIzOr/fB0r1Q7FtZ/7Ft3P6IXVdk3GDO0QsORD
+2dRAejhYpc5c7joHxAw9oRfKrEqE+ihVPUTcfcIuBaalvuhkpQRmKP71ws5DVzOw
+QhnMd0TtIrbKHaNQ4kNsmSY5fQolwB0LtNfTus7OEFdcZWhOXrWImKXN9jewPKdV
+mSG34NfXOnA6qx0eQg06z+TkdrptH6j1Va2vS1/bL+h1GxjpTHlvTGaZYxaloIjw
+y/EzY5jygRoABnR3eBm15CYZwwKL9izIq1H3OhymEi/Ycg==
+-----END CERTIFICATE-----
diff --git a/test/certs/many-constraints.pem b/test/certs/many-constraints.pem
new file mode 100644
index 000000000000..13b8ab29b68b
--- /dev/null
+++ b/test/certs/many-constraints.pem
@@ -0,0 +1,292 @@
+-----BEGIN CERTIFICATE-----
+MII2MzCCNRugAwIBAgIBATANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
+Fw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowDTELMAkGA1UEAxMCQ0Ew
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6C9qEGRIBQXV8Lj29vVu+
+U+tyXzSSinWIumK5ijPhCm3DLnv4RayxkFwemtnkGRZ/o94ZnsXkBfU/IlsYdkuq
+8wK9WI/ql3gwWjH+KARIhIQcSLGiJcLN6kGuG2nlRBKMcPgPiEq2B0yBXFf4tG3C
+Bbeae7+8G7uvOmv8NLyKj32neWpnUCTL5o2VwyPoxjLxT5gUR69v9XSVFj2irCZb
+sEedeKSb++LqyMhLfnRTzNv+ZHNh4izZHrktR25MvnT5QyBq32hx7AjZ2/xo70Om
+H7w10a2DwsVjJNMdxTEmgyvU9M6CeYRPX1Ykfg+sXCTtkTVAlBDUviIqY95CKy25
+AgMBAAGjgjOaMIIzljAOBgNVHQ8BAf8EBAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUH
+AwEwDwYDVR0TAQH/BAUwAwEB/zCCM1wGA1UdHgSCM1MwgjNPoIIZqDAJggd0MC50
+ZXN0MAmCB3QxLnRlc3QwCYIHdDIudGVzdDAJggd0My50ZXN0MAmCB3Q0LnRlc3Qw
+CYIHdDUudGVzdDAJggd0Ni50ZXN0MAmCB3Q3LnRlc3QwCYIHdDgudGVzdDAJggd0
+OS50ZXN0MAqCCHQxMC50ZXN0MAqCCHQxMS50ZXN0MAqCCHQxMi50ZXN0MAqCCHQx
+My50ZXN0MAqCCHQxNC50ZXN0MAqCCHQxNS50ZXN0MAqCCHQxNi50ZXN0MAqCCHQx
+Ny50ZXN0MAqCCHQxOC50ZXN0MAqCCHQxOS50ZXN0MAqCCHQyMC50ZXN0MAqCCHQy
+MS50ZXN0MAqCCHQyMi50ZXN0MAqCCHQyMy50ZXN0MAqCCHQyNC50ZXN0MAqCCHQy
+NS50ZXN0MAqCCHQyNi50ZXN0MAqCCHQyNy50ZXN0MAqCCHQyOC50ZXN0MAqCCHQy
+OS50ZXN0MAqCCHQzMC50ZXN0MAqCCHQzMS50ZXN0MAqCCHQzMi50ZXN0MAqCCHQz
+My50ZXN0MAqCCHQzNC50ZXN0MAqCCHQzNS50ZXN0MAqCCHQzNi50ZXN0MAqCCHQz
+Ny50ZXN0MAqCCHQzOC50ZXN0MAqCCHQzOS50ZXN0MAqCCHQ0MC50ZXN0MAqCCHQ0
+MS50ZXN0MAqCCHQ0Mi50ZXN0MAqCCHQ0My50ZXN0MAqCCHQ0NC50ZXN0MAqCCHQ0
+NS50ZXN0MAqCCHQ0Ni50ZXN0MAqCCHQ0Ny50ZXN0MAqCCHQ0OC50ZXN0MAqCCHQ0
+OS50ZXN0MAqCCHQ1MC50ZXN0MAqCCHQ1MS50ZXN0MAqCCHQ1Mi50ZXN0MAqCCHQ1
+My50ZXN0MAqCCHQ1NC50ZXN0MAqCCHQ1NS50ZXN0MAqCCHQ1Ni50ZXN0MAqCCHQ1
+Ny50ZXN0MAqCCHQ1OC50ZXN0MAqCCHQ1OS50ZXN0MAqCCHQ2MC50ZXN0MAqCCHQ2
+MS50ZXN0MAqCCHQ2Mi50ZXN0MAqCCHQ2My50ZXN0MAqCCHQ2NC50ZXN0MAqCCHQ2
+NS50ZXN0MAqCCHQ2Ni50ZXN0MAqCCHQ2Ny50ZXN0MAqCCHQ2OC50ZXN0MAqCCHQ2
+OS50ZXN0MAqCCHQ3MC50ZXN0MAqCCHQ3MS50ZXN0MAqCCHQ3Mi50ZXN0MAqCCHQ3
+My50ZXN0MAqCCHQ3NC50ZXN0MAqCCHQ3NS50ZXN0MAqCCHQ3Ni50ZXN0MAqCCHQ3
+Ny50ZXN0MAqCCHQ3OC50ZXN0MAqCCHQ3OS50ZXN0MAqCCHQ4MC50ZXN0MAqCCHQ4
+MS50ZXN0MAqCCHQ4Mi50ZXN0MAqCCHQ4My50ZXN0MAqCCHQ4NC50ZXN0MAqCCHQ4
+NS50ZXN0MAqCCHQ4Ni50ZXN0MAqCCHQ4Ny50ZXN0MAqCCHQ4OC50ZXN0MAqCCHQ4
+OS50ZXN0MAqCCHQ5MC50ZXN0MAqCCHQ5MS50ZXN0MAqCCHQ5Mi50ZXN0MAqCCHQ5
+My50ZXN0MAqCCHQ5NC50ZXN0MAqCCHQ5NS50ZXN0MAqCCHQ5Ni50ZXN0MAqCCHQ5
+Ny50ZXN0MAqCCHQ5OC50ZXN0MAqCCHQ5OS50ZXN0MAuCCXQxMDAudGVzdDALggl0
+MTAxLnRlc3QwC4IJdDEwMi50ZXN0MAuCCXQxMDMudGVzdDALggl0MTA0LnRlc3Qw
+C4IJdDEwNS50ZXN0MAuCCXQxMDYudGVzdDALggl0MTA3LnRlc3QwC4IJdDEwOC50
+ZXN0MAuCCXQxMDkudGVzdDALggl0MTEwLnRlc3QwC4IJdDExMS50ZXN0MAuCCXQx
+MTIudGVzdDALggl0MTEzLnRlc3QwC4IJdDExNC50ZXN0MAuCCXQxMTUudGVzdDAL
+ggl0MTE2LnRlc3QwC4IJdDExNy50ZXN0MAuCCXQxMTgudGVzdDALggl0MTE5LnRl
+c3QwC4IJdDEyMC50ZXN0MAuCCXQxMjEudGVzdDALggl0MTIyLnRlc3QwC4IJdDEy
+My50ZXN0MAuCCXQxMjQudGVzdDALggl0MTI1LnRlc3QwC4IJdDEyNi50ZXN0MAuC
+CXQxMjcudGVzdDALggl0MTI4LnRlc3QwC4IJdDEyOS50ZXN0MAuCCXQxMzAudGVz
+dDALggl0MTMxLnRlc3QwC4IJdDEzMi50ZXN0MAuCCXQxMzMudGVzdDALggl0MTM0
+LnRlc3QwC4IJdDEzNS50ZXN0MAuCCXQxMzYudGVzdDALggl0MTM3LnRlc3QwC4IJ
+dDEzOC50ZXN0MAuCCXQxMzkudGVzdDALggl0MTQwLnRlc3QwC4IJdDE0MS50ZXN0
+MAuCCXQxNDIudGVzdDALggl0MTQzLnRlc3QwC4IJdDE0NC50ZXN0MAuCCXQxNDUu
+dGVzdDALggl0MTQ2LnRlc3QwC4IJdDE0Ny50ZXN0MAuCCXQxNDgudGVzdDALggl0
+MTQ5LnRlc3QwC4IJdDE1MC50ZXN0MAuCCXQxNTEudGVzdDALggl0MTUyLnRlc3Qw
+C4IJdDE1My50ZXN0MAuCCXQxNTQudGVzdDALggl0MTU1LnRlc3QwC4IJdDE1Ni50
+ZXN0MAuCCXQxNTcudGVzdDALggl0MTU4LnRlc3QwC4IJdDE1OS50ZXN0MAuCCXQx
+NjAudGVzdDALggl0MTYxLnRlc3QwC4IJdDE2Mi50ZXN0MAuCCXQxNjMudGVzdDAL
+ggl0MTY0LnRlc3QwC4IJdDE2NS50ZXN0MAuCCXQxNjYudGVzdDALggl0MTY3LnRl
+c3QwC4IJdDE2OC50ZXN0MAuCCXQxNjkudGVzdDALggl0MTcwLnRlc3QwC4IJdDE3
+MS50ZXN0MAuCCXQxNzIudGVzdDALggl0MTczLnRlc3QwC4IJdDE3NC50ZXN0MAuC
+CXQxNzUudGVzdDALggl0MTc2LnRlc3QwC4IJdDE3Ny50ZXN0MAuCCXQxNzgudGVz
+dDALggl0MTc5LnRlc3QwC4IJdDE4MC50ZXN0MAuCCXQxODEudGVzdDALggl0MTgy
+LnRlc3QwC4IJdDE4My50ZXN0MAuCCXQxODQudGVzdDALggl0MTg1LnRlc3QwC4IJ
+dDE4Ni50ZXN0MAuCCXQxODcudGVzdDALggl0MTg4LnRlc3QwC4IJdDE4OS50ZXN0
+MAuCCXQxOTAudGVzdDALggl0MTkxLnRlc3QwC4IJdDE5Mi50ZXN0MAuCCXQxOTMu
+dGVzdDALggl0MTk0LnRlc3QwC4IJdDE5NS50ZXN0MAuCCXQxOTYudGVzdDALggl0
+MTk3LnRlc3QwC4IJdDE5OC50ZXN0MAuCCXQxOTkudGVzdDALggl0MjAwLnRlc3Qw
+C4IJdDIwMS50ZXN0MAuCCXQyMDIudGVzdDALggl0MjAzLnRlc3QwC4IJdDIwNC50
+ZXN0MAuCCXQyMDUudGVzdDALggl0MjA2LnRlc3QwC4IJdDIwNy50ZXN0MAuCCXQy
+MDgudGVzdDALggl0MjA5LnRlc3QwC4IJdDIxMC50ZXN0MAuCCXQyMTEudGVzdDAL
+ggl0MjEyLnRlc3QwC4IJdDIxMy50ZXN0MAuCCXQyMTQudGVzdDALggl0MjE1LnRl
+c3QwC4IJdDIxNi50ZXN0MAuCCXQyMTcudGVzdDALggl0MjE4LnRlc3QwC4IJdDIx
+OS50ZXN0MAuCCXQyMjAudGVzdDALggl0MjIxLnRlc3QwC4IJdDIyMi50ZXN0MAuC
+CXQyMjMudGVzdDALggl0MjI0LnRlc3QwC4IJdDIyNS50ZXN0MAuCCXQyMjYudGVz
+dDALggl0MjI3LnRlc3QwC4IJdDIyOC50ZXN0MAuCCXQyMjkudGVzdDALggl0MjMw
+LnRlc3QwC4IJdDIzMS50ZXN0MAuCCXQyMzIudGVzdDALggl0MjMzLnRlc3QwC4IJ
+dDIzNC50ZXN0MAuCCXQyMzUudGVzdDALggl0MjM2LnRlc3QwC4IJdDIzNy50ZXN0
+MAuCCXQyMzgudGVzdDALggl0MjM5LnRlc3QwC4IJdDI0MC50ZXN0MAuCCXQyNDEu
+dGVzdDALggl0MjQyLnRlc3QwC4IJdDI0My50ZXN0MAuCCXQyNDQudGVzdDALggl0
+MjQ1LnRlc3QwC4IJdDI0Ni50ZXN0MAuCCXQyNDcudGVzdDALggl0MjQ4LnRlc3Qw
+C4IJdDI0OS50ZXN0MAuCCXQyNTAudGVzdDALggl0MjUxLnRlc3QwC4IJdDI1Mi50
+ZXN0MAuCCXQyNTMudGVzdDALggl0MjU0LnRlc3QwC4IJdDI1NS50ZXN0MAuCCXQy
+NTYudGVzdDALggl0MjU3LnRlc3QwC4IJdDI1OC50ZXN0MAuCCXQyNTkudGVzdDAL
+ggl0MjYwLnRlc3QwC4IJdDI2MS50ZXN0MAuCCXQyNjIudGVzdDALggl0MjYzLnRl
+c3QwC4IJdDI2NC50ZXN0MAuCCXQyNjUudGVzdDALggl0MjY2LnRlc3QwC4IJdDI2
+Ny50ZXN0MAuCCXQyNjgudGVzdDALggl0MjY5LnRlc3QwC4IJdDI3MC50ZXN0MAuC
+CXQyNzEudGVzdDALggl0MjcyLnRlc3QwC4IJdDI3My50ZXN0MAuCCXQyNzQudGVz
+dDALggl0Mjc1LnRlc3QwC4IJdDI3Ni50ZXN0MAuCCXQyNzcudGVzdDALggl0Mjc4
+LnRlc3QwC4IJdDI3OS50ZXN0MAuCCXQyODAudGVzdDALggl0MjgxLnRlc3QwC4IJ
+dDI4Mi50ZXN0MAuCCXQyODMudGVzdDALggl0Mjg0LnRlc3QwC4IJdDI4NS50ZXN0
+MAuCCXQyODYudGVzdDALggl0Mjg3LnRlc3QwC4IJdDI4OC50ZXN0MAuCCXQyODku
+dGVzdDALggl0MjkwLnRlc3QwC4IJdDI5MS50ZXN0MAuCCXQyOTIudGVzdDALggl0
+MjkzLnRlc3QwC4IJdDI5NC50ZXN0MAuCCXQyOTUudGVzdDALggl0Mjk2LnRlc3Qw
+C4IJdDI5Ny50ZXN0MAuCCXQyOTgudGVzdDALggl0Mjk5LnRlc3QwC4IJdDMwMC50
+ZXN0MAuCCXQzMDEudGVzdDALggl0MzAyLnRlc3QwC4IJdDMwMy50ZXN0MAuCCXQz
+MDQudGVzdDALggl0MzA1LnRlc3QwC4IJdDMwNi50ZXN0MAuCCXQzMDcudGVzdDAL
+ggl0MzA4LnRlc3QwC4IJdDMwOS50ZXN0MAuCCXQzMTAudGVzdDALggl0MzExLnRl
+c3QwC4IJdDMxMi50ZXN0MAuCCXQzMTMudGVzdDALggl0MzE0LnRlc3QwC4IJdDMx
+NS50ZXN0MAuCCXQzMTYudGVzdDALggl0MzE3LnRlc3QwC4IJdDMxOC50ZXN0MAuC
+CXQzMTkudGVzdDALggl0MzIwLnRlc3QwC4IJdDMyMS50ZXN0MAuCCXQzMjIudGVz
+dDALggl0MzIzLnRlc3QwC4IJdDMyNC50ZXN0MAuCCXQzMjUudGVzdDALggl0MzI2
+LnRlc3QwC4IJdDMyNy50ZXN0MAuCCXQzMjgudGVzdDALggl0MzI5LnRlc3QwC4IJ
+dDMzMC50ZXN0MAuCCXQzMzEudGVzdDALggl0MzMyLnRlc3QwC4IJdDMzMy50ZXN0
+MAuCCXQzMzQudGVzdDALggl0MzM1LnRlc3QwC4IJdDMzNi50ZXN0MAuCCXQzMzcu
+dGVzdDALggl0MzM4LnRlc3QwC4IJdDMzOS50ZXN0MAuCCXQzNDAudGVzdDALggl0
+MzQxLnRlc3QwC4IJdDM0Mi50ZXN0MAuCCXQzNDMudGVzdDALggl0MzQ0LnRlc3Qw
+C4IJdDM0NS50ZXN0MAuCCXQzNDYudGVzdDALggl0MzQ3LnRlc3QwC4IJdDM0OC50
+ZXN0MAuCCXQzNDkudGVzdDALggl0MzUwLnRlc3QwC4IJdDM1MS50ZXN0MAuCCXQz
+NTIudGVzdDALggl0MzUzLnRlc3QwC4IJdDM1NC50ZXN0MAuCCXQzNTUudGVzdDAL
+ggl0MzU2LnRlc3QwC4IJdDM1Ny50ZXN0MAuCCXQzNTgudGVzdDALggl0MzU5LnRl
+c3QwC4IJdDM2MC50ZXN0MAuCCXQzNjEudGVzdDALggl0MzYyLnRlc3QwC4IJdDM2
+My50ZXN0MAuCCXQzNjQudGVzdDALggl0MzY1LnRlc3QwC4IJdDM2Ni50ZXN0MAuC
+CXQzNjcudGVzdDALggl0MzY4LnRlc3QwC4IJdDM2OS50ZXN0MAuCCXQzNzAudGVz
+dDALggl0MzcxLnRlc3QwC4IJdDM3Mi50ZXN0MAuCCXQzNzMudGVzdDALggl0Mzc0
+LnRlc3QwC4IJdDM3NS50ZXN0MAuCCXQzNzYudGVzdDALggl0Mzc3LnRlc3QwC4IJ
+dDM3OC50ZXN0MAuCCXQzNzkudGVzdDALggl0MzgwLnRlc3QwC4IJdDM4MS50ZXN0
+MAuCCXQzODIudGVzdDALggl0MzgzLnRlc3QwC4IJdDM4NC50ZXN0MAuCCXQzODUu
+dGVzdDALggl0Mzg2LnRlc3QwC4IJdDM4Ny50ZXN0MAuCCXQzODgudGVzdDALggl0
+Mzg5LnRlc3QwC4IJdDM5MC50ZXN0MAuCCXQzOTEudGVzdDALggl0MzkyLnRlc3Qw
+C4IJdDM5My50ZXN0MAuCCXQzOTQudGVzdDALggl0Mzk1LnRlc3QwC4IJdDM5Ni50
+ZXN0MAuCCXQzOTcudGVzdDALggl0Mzk4LnRlc3QwC4IJdDM5OS50ZXN0MAuCCXQ0
+MDAudGVzdDALggl0NDAxLnRlc3QwC4IJdDQwMi50ZXN0MAuCCXQ0MDMudGVzdDAL
+ggl0NDA0LnRlc3QwC4IJdDQwNS50ZXN0MAuCCXQ0MDYudGVzdDALggl0NDA3LnRl
+c3QwC4IJdDQwOC50ZXN0MAuCCXQ0MDkudGVzdDALggl0NDEwLnRlc3QwC4IJdDQx
+MS50ZXN0MAuCCXQ0MTIudGVzdDALggl0NDEzLnRlc3QwC4IJdDQxNC50ZXN0MAuC
+CXQ0MTUudGVzdDALggl0NDE2LnRlc3QwC4IJdDQxNy50ZXN0MAuCCXQ0MTgudGVz
+dDALggl0NDE5LnRlc3QwC4IJdDQyMC50ZXN0MAuCCXQ0MjEudGVzdDALggl0NDIy
+LnRlc3QwC4IJdDQyMy50ZXN0MAuCCXQ0MjQudGVzdDALggl0NDI1LnRlc3QwC4IJ
+dDQyNi50ZXN0MAuCCXQ0MjcudGVzdDALggl0NDI4LnRlc3QwC4IJdDQyOS50ZXN0
+MAuCCXQ0MzAudGVzdDALggl0NDMxLnRlc3QwC4IJdDQzMi50ZXN0MAuCCXQ0MzMu
+dGVzdDALggl0NDM0LnRlc3QwC4IJdDQzNS50ZXN0MAuCCXQ0MzYudGVzdDALggl0
+NDM3LnRlc3QwC4IJdDQzOC50ZXN0MAuCCXQ0MzkudGVzdDALggl0NDQwLnRlc3Qw
+C4IJdDQ0MS50ZXN0MAuCCXQ0NDIudGVzdDALggl0NDQzLnRlc3QwC4IJdDQ0NC50
+ZXN0MAuCCXQ0NDUudGVzdDALggl0NDQ2LnRlc3QwC4IJdDQ0Ny50ZXN0MAuCCXQ0
+NDgudGVzdDALggl0NDQ5LnRlc3QwC4IJdDQ1MC50ZXN0MAuCCXQ0NTEudGVzdDAL
+ggl0NDUyLnRlc3QwC4IJdDQ1My50ZXN0MAuCCXQ0NTQudGVzdDALggl0NDU1LnRl
+c3QwC4IJdDQ1Ni50ZXN0MAuCCXQ0NTcudGVzdDALggl0NDU4LnRlc3QwC4IJdDQ1
+OS50ZXN0MAuCCXQ0NjAudGVzdDALggl0NDYxLnRlc3QwC4IJdDQ2Mi50ZXN0MAuC
+CXQ0NjMudGVzdDALggl0NDY0LnRlc3QwC4IJdDQ2NS50ZXN0MAuCCXQ0NjYudGVz
+dDALggl0NDY3LnRlc3QwC4IJdDQ2OC50ZXN0MAuCCXQ0NjkudGVzdDALggl0NDcw
+LnRlc3QwC4IJdDQ3MS50ZXN0MAuCCXQ0NzIudGVzdDALggl0NDczLnRlc3QwC4IJ
+dDQ3NC50ZXN0MAuCCXQ0NzUudGVzdDALggl0NDc2LnRlc3QwC4IJdDQ3Ny50ZXN0
+MAuCCXQ0NzgudGVzdDALggl0NDc5LnRlc3QwC4IJdDQ4MC50ZXN0MAuCCXQ0ODEu
+dGVzdDALggl0NDgyLnRlc3QwC4IJdDQ4My50ZXN0MAuCCXQ0ODQudGVzdDALggl0
+NDg1LnRlc3QwC4IJdDQ4Ni50ZXN0MAuCCXQ0ODcudGVzdDALggl0NDg4LnRlc3Qw
+C4IJdDQ4OS50ZXN0MAuCCXQ0OTAudGVzdDALggl0NDkxLnRlc3QwC4IJdDQ5Mi50
+ZXN0MAuCCXQ0OTMudGVzdDALggl0NDk0LnRlc3QwC4IJdDQ5NS50ZXN0MAuCCXQ0
+OTYudGVzdDALggl0NDk3LnRlc3QwC4IJdDQ5OC50ZXN0MAuCCXQ0OTkudGVzdDAL
+ggl0NTAwLnRlc3QwC4IJdDUwMS50ZXN0MAuCCXQ1MDIudGVzdDALggl0NTAzLnRl
+c3QwC4IJdDUwNC50ZXN0MAuCCXQ1MDUudGVzdDALggl0NTA2LnRlc3QwC4IJdDUw
+Ny50ZXN0MAuCCXQ1MDgudGVzdDALggl0NTA5LnRlc3QwC4IJdDUxMC50ZXN0MAuC
+CXQ1MTEudGVzdDALggl0NTEyLnRlc3QwB4IFLnRlc3ShghmfMAmCB3gwLnRlc3Qw
+CYIHeDEudGVzdDAJggd4Mi50ZXN0MAmCB3gzLnRlc3QwCYIHeDQudGVzdDAJggd4
+NS50ZXN0MAmCB3g2LnRlc3QwCYIHeDcudGVzdDAJggd4OC50ZXN0MAmCB3g5LnRl
+c3QwCoIIeDEwLnRlc3QwCoIIeDExLnRlc3QwCoIIeDEyLnRlc3QwCoIIeDEzLnRl
+c3QwCoIIeDE0LnRlc3QwCoIIeDE1LnRlc3QwCoIIeDE2LnRlc3QwCoIIeDE3LnRl
+c3QwCoIIeDE4LnRlc3QwCoIIeDE5LnRlc3QwCoIIeDIwLnRlc3QwCoIIeDIxLnRl
+c3QwCoIIeDIyLnRlc3QwCoIIeDIzLnRlc3QwCoIIeDI0LnRlc3QwCoIIeDI1LnRl
+c3QwCoIIeDI2LnRlc3QwCoIIeDI3LnRlc3QwCoIIeDI4LnRlc3QwCoIIeDI5LnRl
+c3QwCoIIeDMwLnRlc3QwCoIIeDMxLnRlc3QwCoIIeDMyLnRlc3QwCoIIeDMzLnRl
+c3QwCoIIeDM0LnRlc3QwCoIIeDM1LnRlc3QwCoIIeDM2LnRlc3QwCoIIeDM3LnRl
+c3QwCoIIeDM4LnRlc3QwCoIIeDM5LnRlc3QwCoIIeDQwLnRlc3QwCoIIeDQxLnRl
+c3QwCoIIeDQyLnRlc3QwCoIIeDQzLnRlc3QwCoIIeDQ0LnRlc3QwCoIIeDQ1LnRl
+c3QwCoIIeDQ2LnRlc3QwCoIIeDQ3LnRlc3QwCoIIeDQ4LnRlc3QwCoIIeDQ5LnRl
+c3QwCoIIeDUwLnRlc3QwCoIIeDUxLnRlc3QwCoIIeDUyLnRlc3QwCoIIeDUzLnRl
+c3QwCoIIeDU0LnRlc3QwCoIIeDU1LnRlc3QwCoIIeDU2LnRlc3QwCoIIeDU3LnRl
+c3QwCoIIeDU4LnRlc3QwCoIIeDU5LnRlc3QwCoIIeDYwLnRlc3QwCoIIeDYxLnRl
+c3QwCoIIeDYyLnRlc3QwCoIIeDYzLnRlc3QwCoIIeDY0LnRlc3QwCoIIeDY1LnRl
+c3QwCoIIeDY2LnRlc3QwCoIIeDY3LnRlc3QwCoIIeDY4LnRlc3QwCoIIeDY5LnRl
+c3QwCoIIeDcwLnRlc3QwCoIIeDcxLnRlc3QwCoIIeDcyLnRlc3QwCoIIeDczLnRl
+c3QwCoIIeDc0LnRlc3QwCoIIeDc1LnRlc3QwCoIIeDc2LnRlc3QwCoIIeDc3LnRl
+c3QwCoIIeDc4LnRlc3QwCoIIeDc5LnRlc3QwCoIIeDgwLnRlc3QwCoIIeDgxLnRl
+c3QwCoIIeDgyLnRlc3QwCoIIeDgzLnRlc3QwCoIIeDg0LnRlc3QwCoIIeDg1LnRl
+c3QwCoIIeDg2LnRlc3QwCoIIeDg3LnRlc3QwCoIIeDg4LnRlc3QwCoIIeDg5LnRl
+c3QwCoIIeDkwLnRlc3QwCoIIeDkxLnRlc3QwCoIIeDkyLnRlc3QwCoIIeDkzLnRl
+c3QwCoIIeDk0LnRlc3QwCoIIeDk1LnRlc3QwCoIIeDk2LnRlc3QwCoIIeDk3LnRl
+c3QwCoIIeDk4LnRlc3QwCoIIeDk5LnRlc3QwC4IJeDEwMC50ZXN0MAuCCXgxMDEu
+dGVzdDALggl4MTAyLnRlc3QwC4IJeDEwMy50ZXN0MAuCCXgxMDQudGVzdDALggl4
+MTA1LnRlc3QwC4IJeDEwNi50ZXN0MAuCCXgxMDcudGVzdDALggl4MTA4LnRlc3Qw
+C4IJeDEwOS50ZXN0MAuCCXgxMTAudGVzdDALggl4MTExLnRlc3QwC4IJeDExMi50
+ZXN0MAuCCXgxMTMudGVzdDALggl4MTE0LnRlc3QwC4IJeDExNS50ZXN0MAuCCXgx
+MTYudGVzdDALggl4MTE3LnRlc3QwC4IJeDExOC50ZXN0MAuCCXgxMTkudGVzdDAL
+ggl4MTIwLnRlc3QwC4IJeDEyMS50ZXN0MAuCCXgxMjIudGVzdDALggl4MTIzLnRl
+c3QwC4IJeDEyNC50ZXN0MAuCCXgxMjUudGVzdDALggl4MTI2LnRlc3QwC4IJeDEy
+Ny50ZXN0MAuCCXgxMjgudGVzdDALggl4MTI5LnRlc3QwC4IJeDEzMC50ZXN0MAuC
+CXgxMzEudGVzdDALggl4MTMyLnRlc3QwC4IJeDEzMy50ZXN0MAuCCXgxMzQudGVz
+dDALggl4MTM1LnRlc3QwC4IJeDEzNi50ZXN0MAuCCXgxMzcudGVzdDALggl4MTM4
+LnRlc3QwC4IJeDEzOS50ZXN0MAuCCXgxNDAudGVzdDALggl4MTQxLnRlc3QwC4IJ
+eDE0Mi50ZXN0MAuCCXgxNDMudGVzdDALggl4MTQ0LnRlc3QwC4IJeDE0NS50ZXN0
+MAuCCXgxNDYudGVzdDALggl4MTQ3LnRlc3QwC4IJeDE0OC50ZXN0MAuCCXgxNDku
+dGVzdDALggl4MTUwLnRlc3QwC4IJeDE1MS50ZXN0MAuCCXgxNTIudGVzdDALggl4
+MTUzLnRlc3QwC4IJeDE1NC50ZXN0MAuCCXgxNTUudGVzdDALggl4MTU2LnRlc3Qw
+C4IJeDE1Ny50ZXN0MAuCCXgxNTgudGVzdDALggl4MTU5LnRlc3QwC4IJeDE2MC50
+ZXN0MAuCCXgxNjEudGVzdDALggl4MTYyLnRlc3QwC4IJeDE2My50ZXN0MAuCCXgx
+NjQudGVzdDALggl4MTY1LnRlc3QwC4IJeDE2Ni50ZXN0MAuCCXgxNjcudGVzdDAL
+ggl4MTY4LnRlc3QwC4IJeDE2OS50ZXN0MAuCCXgxNzAudGVzdDALggl4MTcxLnRl
+c3QwC4IJeDE3Mi50ZXN0MAuCCXgxNzMudGVzdDALggl4MTc0LnRlc3QwC4IJeDE3
+NS50ZXN0MAuCCXgxNzYudGVzdDALggl4MTc3LnRlc3QwC4IJeDE3OC50ZXN0MAuC
+CXgxNzkudGVzdDALggl4MTgwLnRlc3QwC4IJeDE4MS50ZXN0MAuCCXgxODIudGVz
+dDALggl4MTgzLnRlc3QwC4IJeDE4NC50ZXN0MAuCCXgxODUudGVzdDALggl4MTg2
+LnRlc3QwC4IJeDE4Ny50ZXN0MAuCCXgxODgudGVzdDALggl4MTg5LnRlc3QwC4IJ
+eDE5MC50ZXN0MAuCCXgxOTEudGVzdDALggl4MTkyLnRlc3QwC4IJeDE5My50ZXN0
+MAuCCXgxOTQudGVzdDALggl4MTk1LnRlc3QwC4IJeDE5Ni50ZXN0MAuCCXgxOTcu
+dGVzdDALggl4MTk4LnRlc3QwC4IJeDE5OS50ZXN0MAuCCXgyMDAudGVzdDALggl4
+MjAxLnRlc3QwC4IJeDIwMi50ZXN0MAuCCXgyMDMudGVzdDALggl4MjA0LnRlc3Qw
+C4IJeDIwNS50ZXN0MAuCCXgyMDYudGVzdDALggl4MjA3LnRlc3QwC4IJeDIwOC50
+ZXN0MAuCCXgyMDkudGVzdDALggl4MjEwLnRlc3QwC4IJeDIxMS50ZXN0MAuCCXgy
+MTIudGVzdDALggl4MjEzLnRlc3QwC4IJeDIxNC50ZXN0MAuCCXgyMTUudGVzdDAL
+ggl4MjE2LnRlc3QwC4IJeDIxNy50ZXN0MAuCCXgyMTgudGVzdDALggl4MjE5LnRl
+c3QwC4IJeDIyMC50ZXN0MAuCCXgyMjEudGVzdDALggl4MjIyLnRlc3QwC4IJeDIy
+My50ZXN0MAuCCXgyMjQudGVzdDALggl4MjI1LnRlc3QwC4IJeDIyNi50ZXN0MAuC
+CXgyMjcudGVzdDALggl4MjI4LnRlc3QwC4IJeDIyOS50ZXN0MAuCCXgyMzAudGVz
+dDALggl4MjMxLnRlc3QwC4IJeDIzMi50ZXN0MAuCCXgyMzMudGVzdDALggl4MjM0
+LnRlc3QwC4IJeDIzNS50ZXN0MAuCCXgyMzYudGVzdDALggl4MjM3LnRlc3QwC4IJ
+eDIzOC50ZXN0MAuCCXgyMzkudGVzdDALggl4MjQwLnRlc3QwC4IJeDI0MS50ZXN0
+MAuCCXgyNDIudGVzdDALggl4MjQzLnRlc3QwC4IJeDI0NC50ZXN0MAuCCXgyNDUu
+dGVzdDALggl4MjQ2LnRlc3QwC4IJeDI0Ny50ZXN0MAuCCXgyNDgudGVzdDALggl4
+MjQ5LnRlc3QwC4IJeDI1MC50ZXN0MAuCCXgyNTEudGVzdDALggl4MjUyLnRlc3Qw
+C4IJeDI1My50ZXN0MAuCCXgyNTQudGVzdDALggl4MjU1LnRlc3QwC4IJeDI1Ni50
+ZXN0MAuCCXgyNTcudGVzdDALggl4MjU4LnRlc3QwC4IJeDI1OS50ZXN0MAuCCXgy
+NjAudGVzdDALggl4MjYxLnRlc3QwC4IJeDI2Mi50ZXN0MAuCCXgyNjMudGVzdDAL
+ggl4MjY0LnRlc3QwC4IJeDI2NS50ZXN0MAuCCXgyNjYudGVzdDALggl4MjY3LnRl
+c3QwC4IJeDI2OC50ZXN0MAuCCXgyNjkudGVzdDALggl4MjcwLnRlc3QwC4IJeDI3
+MS50ZXN0MAuCCXgyNzIudGVzdDALggl4MjczLnRlc3QwC4IJeDI3NC50ZXN0MAuC
+CXgyNzUudGVzdDALggl4Mjc2LnRlc3QwC4IJeDI3Ny50ZXN0MAuCCXgyNzgudGVz
+dDALggl4Mjc5LnRlc3QwC4IJeDI4MC50ZXN0MAuCCXgyODEudGVzdDALggl4Mjgy
+LnRlc3QwC4IJeDI4My50ZXN0MAuCCXgyODQudGVzdDALggl4Mjg1LnRlc3QwC4IJ
+eDI4Ni50ZXN0MAuCCXgyODcudGVzdDALggl4Mjg4LnRlc3QwC4IJeDI4OS50ZXN0
+MAuCCXgyOTAudGVzdDALggl4MjkxLnRlc3QwC4IJeDI5Mi50ZXN0MAuCCXgyOTMu
+dGVzdDALggl4Mjk0LnRlc3QwC4IJeDI5NS50ZXN0MAuCCXgyOTYudGVzdDALggl4
+Mjk3LnRlc3QwC4IJeDI5OC50ZXN0MAuCCXgyOTkudGVzdDALggl4MzAwLnRlc3Qw
+C4IJeDMwMS50ZXN0MAuCCXgzMDIudGVzdDALggl4MzAzLnRlc3QwC4IJeDMwNC50
+ZXN0MAuCCXgzMDUudGVzdDALggl4MzA2LnRlc3QwC4IJeDMwNy50ZXN0MAuCCXgz
+MDgudGVzdDALggl4MzA5LnRlc3QwC4IJeDMxMC50ZXN0MAuCCXgzMTEudGVzdDAL
+ggl4MzEyLnRlc3QwC4IJeDMxMy50ZXN0MAuCCXgzMTQudGVzdDALggl4MzE1LnRl
+c3QwC4IJeDMxNi50ZXN0MAuCCXgzMTcudGVzdDALggl4MzE4LnRlc3QwC4IJeDMx
+OS50ZXN0MAuCCXgzMjAudGVzdDALggl4MzIxLnRlc3QwC4IJeDMyMi50ZXN0MAuC
+CXgzMjMudGVzdDALggl4MzI0LnRlc3QwC4IJeDMyNS50ZXN0MAuCCXgzMjYudGVz
+dDALggl4MzI3LnRlc3QwC4IJeDMyOC50ZXN0MAuCCXgzMjkudGVzdDALggl4MzMw
+LnRlc3QwC4IJeDMzMS50ZXN0MAuCCXgzMzIudGVzdDALggl4MzMzLnRlc3QwC4IJ
+eDMzNC50ZXN0MAuCCXgzMzUudGVzdDALggl4MzM2LnRlc3QwC4IJeDMzNy50ZXN0
+MAuCCXgzMzgudGVzdDALggl4MzM5LnRlc3QwC4IJeDM0MC50ZXN0MAuCCXgzNDEu
+dGVzdDALggl4MzQyLnRlc3QwC4IJeDM0My50ZXN0MAuCCXgzNDQudGVzdDALggl4
+MzQ1LnRlc3QwC4IJeDM0Ni50ZXN0MAuCCXgzNDcudGVzdDALggl4MzQ4LnRlc3Qw
+C4IJeDM0OS50ZXN0MAuCCXgzNTAudGVzdDALggl4MzUxLnRlc3QwC4IJeDM1Mi50
+ZXN0MAuCCXgzNTMudGVzdDALggl4MzU0LnRlc3QwC4IJeDM1NS50ZXN0MAuCCXgz
+NTYudGVzdDALggl4MzU3LnRlc3QwC4IJeDM1OC50ZXN0MAuCCXgzNTkudGVzdDAL
+ggl4MzYwLnRlc3QwC4IJeDM2MS50ZXN0MAuCCXgzNjIudGVzdDALggl4MzYzLnRl
+c3QwC4IJeDM2NC50ZXN0MAuCCXgzNjUudGVzdDALggl4MzY2LnRlc3QwC4IJeDM2
+Ny50ZXN0MAuCCXgzNjgudGVzdDALggl4MzY5LnRlc3QwC4IJeDM3MC50ZXN0MAuC
+CXgzNzEudGVzdDALggl4MzcyLnRlc3QwC4IJeDM3My50ZXN0MAuCCXgzNzQudGVz
+dDALggl4Mzc1LnRlc3QwC4IJeDM3Ni50ZXN0MAuCCXgzNzcudGVzdDALggl4Mzc4
+LnRlc3QwC4IJeDM3OS50ZXN0MAuCCXgzODAudGVzdDALggl4MzgxLnRlc3QwC4IJ
+eDM4Mi50ZXN0MAuCCXgzODMudGVzdDALggl4Mzg0LnRlc3QwC4IJeDM4NS50ZXN0
+MAuCCXgzODYudGVzdDALggl4Mzg3LnRlc3QwC4IJeDM4OC50ZXN0MAuCCXgzODku
+dGVzdDALggl4MzkwLnRlc3QwC4IJeDM5MS50ZXN0MAuCCXgzOTIudGVzdDALggl4
+MzkzLnRlc3QwC4IJeDM5NC50ZXN0MAuCCXgzOTUudGVzdDALggl4Mzk2LnRlc3Qw
+C4IJeDM5Ny50ZXN0MAuCCXgzOTgudGVzdDALggl4Mzk5LnRlc3QwC4IJeDQwMC50
+ZXN0MAuCCXg0MDEudGVzdDALggl4NDAyLnRlc3QwC4IJeDQwMy50ZXN0MAuCCXg0
+MDQudGVzdDALggl4NDA1LnRlc3QwC4IJeDQwNi50ZXN0MAuCCXg0MDcudGVzdDAL
+ggl4NDA4LnRlc3QwC4IJeDQwOS50ZXN0MAuCCXg0MTAudGVzdDALggl4NDExLnRl
+c3QwC4IJeDQxMi50ZXN0MAuCCXg0MTMudGVzdDALggl4NDE0LnRlc3QwC4IJeDQx
+NS50ZXN0MAuCCXg0MTYudGVzdDALggl4NDE3LnRlc3QwC4IJeDQxOC50ZXN0MAuC
+CXg0MTkudGVzdDALggl4NDIwLnRlc3QwC4IJeDQyMS50ZXN0MAuCCXg0MjIudGVz
+dDALggl4NDIzLnRlc3QwC4IJeDQyNC50ZXN0MAuCCXg0MjUudGVzdDALggl4NDI2
+LnRlc3QwC4IJeDQyNy50ZXN0MAuCCXg0MjgudGVzdDALggl4NDI5LnRlc3QwC4IJ
+eDQzMC50ZXN0MAuCCXg0MzEudGVzdDALggl4NDMyLnRlc3QwC4IJeDQzMy50ZXN0
+MAuCCXg0MzQudGVzdDALggl4NDM1LnRlc3QwC4IJeDQzNi50ZXN0MAuCCXg0Mzcu
+dGVzdDALggl4NDM4LnRlc3QwC4IJeDQzOS50ZXN0MAuCCXg0NDAudGVzdDALggl4
+NDQxLnRlc3QwC4IJeDQ0Mi50ZXN0MAuCCXg0NDMudGVzdDALggl4NDQ0LnRlc3Qw
+C4IJeDQ0NS50ZXN0MAuCCXg0NDYudGVzdDALggl4NDQ3LnRlc3QwC4IJeDQ0OC50
+ZXN0MAuCCXg0NDkudGVzdDALggl4NDUwLnRlc3QwC4IJeDQ1MS50ZXN0MAuCCXg0
+NTIudGVzdDALggl4NDUzLnRlc3QwC4IJeDQ1NC50ZXN0MAuCCXg0NTUudGVzdDAL
+ggl4NDU2LnRlc3QwC4IJeDQ1Ny50ZXN0MAuCCXg0NTgudGVzdDALggl4NDU5LnRl
+c3QwC4IJeDQ2MC50ZXN0MAuCCXg0NjEudGVzdDALggl4NDYyLnRlc3QwC4IJeDQ2
+My50ZXN0MAuCCXg0NjQudGVzdDALggl4NDY1LnRlc3QwC4IJeDQ2Ni50ZXN0MAuC
+CXg0NjcudGVzdDALggl4NDY4LnRlc3QwC4IJeDQ2OS50ZXN0MAuCCXg0NzAudGVz
+dDALggl4NDcxLnRlc3QwC4IJeDQ3Mi50ZXN0MAuCCXg0NzMudGVzdDALggl4NDc0
+LnRlc3QwC4IJeDQ3NS50ZXN0MAuCCXg0NzYudGVzdDALggl4NDc3LnRlc3QwC4IJ
+eDQ3OC50ZXN0MAuCCXg0NzkudGVzdDALggl4NDgwLnRlc3QwC4IJeDQ4MS50ZXN0
+MAuCCXg0ODIudGVzdDALggl4NDgzLnRlc3QwC4IJeDQ4NC50ZXN0MAuCCXg0ODUu
+dGVzdDALggl4NDg2LnRlc3QwC4IJeDQ4Ny50ZXN0MAuCCXg0ODgudGVzdDALggl4
+NDg5LnRlc3QwC4IJeDQ5MC50ZXN0MAuCCXg0OTEudGVzdDALggl4NDkyLnRlc3Qw
+C4IJeDQ5My50ZXN0MAuCCXg0OTQudGVzdDALggl4NDk1LnRlc3QwC4IJeDQ5Ni50
+ZXN0MAuCCXg0OTcudGVzdDALggl4NDk4LnRlc3QwC4IJeDQ5OS50ZXN0MAuCCXg1
+MDAudGVzdDALggl4NTAxLnRlc3QwC4IJeDUwMi50ZXN0MAuCCXg1MDMudGVzdDAL
+ggl4NTA0LnRlc3QwC4IJeDUwNS50ZXN0MAuCCXg1MDYudGVzdDALggl4NTA3LnRl
+c3QwC4IJeDUwOC50ZXN0MAuCCXg1MDkudGVzdDALggl4NTEwLnRlc3QwC4IJeDUx
+MS50ZXN0MAuCCXg1MTIudGVzdDANBgkqhkiG9w0BAQsFAAOCAQEAL2zj4W3+BzBa
+UA0pBD3K5mXq5H94uVT3YFiS1Yrrv1aGJjnb9iabNjdPNRFq7eBm1OajFTv8UtE/
+WJR0JDvBTs7yvpOgTy+JY9RY8NP72gdOOvpZ3DbJ0bbSUFqBVQlM8771Mz9RVQX9
+i9oCqVkakKI/9guAU2XHx9ztTB6N3mULB3QkeFmlyrqeeVK/2lFErArRxyKQXjxb
+cfD76JGADWpp6p1/QUGYmPNYGxHMtWzAhzX1zs/OdGwVVX7g6xxfFdOw0z2PVSPL
+otKS5E3GWvqe43Edz3D6AI7jp6ibtH32HX/D4lLLd9nSiQURvJJ0nrMYZI+7p1DE
+6BsnsA2jNg==
+-----END CERTIFICATE-----
diff --git a/test/certs/many-names1.pem b/test/certs/many-names1.pem
new file mode 100644
index 000000000000..cf6a0df3c662
--- /dev/null
+++ b/test/certs/many-names1.pem
@@ -0,0 +1,409 @@
+-----BEGIN CERTIFICATE-----
+MIJMMTCCSxmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
+Fw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgjO+MRAwDgYDVQQDEwd0
+MC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+MUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+M0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+NUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+N0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI
+dDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB
+Fgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B
+CQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3
+DQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI
+hvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq
+hkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG
+CSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw
+FQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx
+FzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz
+dDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0
+ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy
+QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0
+MzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW
+CHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ
+ARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN
+AQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG
+9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG
+SIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ
+KoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV
+BgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX
+MBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0
+MRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl
+c3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA
+dGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1
+N0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI
+dDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB
+Fgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B
+CQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3
+DQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI
+hvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq
+hkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG
+CSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw
+FQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx
+FzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz
+dDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0
+ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw
+QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0
+ODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW
+CHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ
+ARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN
+AQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG
+9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG
+SIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ
+KoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV
+BgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX
+MBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjMyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyMzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIz
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyMzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIzN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjQxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyNDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjUwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyNTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDI1NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyNTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyNjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjYyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI2NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjY1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyNjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjY4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjcxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI3M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjc0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyNzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0Mjc3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzhAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDI3OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyODFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyODRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0Mjg2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyODdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI4OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjg5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyOTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjkyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+Mjk1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI5N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjk4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyOTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwMEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzAxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDMwM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzMDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMw
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzMDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwOUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzEwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDMxMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzEzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzMTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxNUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MzE2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzE5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDMyMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzIyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzMjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMyNEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzI1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDMyN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzI4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzMjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMz
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzMzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzM0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMzVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDMzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzM3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzMzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzOUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MzQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDM0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzQ2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzNDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0OEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDM1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzUyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzNTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzNTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1N0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDM2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzYxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzNjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MzY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDM2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzcwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzNzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDM3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzNzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDM4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzg1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0Mzg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDM5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzk0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzOTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0Mzk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDM5OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQw
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0MDRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQwNUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDA2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQwOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDA5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0MTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxMUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDEyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDE1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQxN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDE4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0MTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyMEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDIxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQyM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQy
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0MjhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyOUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDMwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQzMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDMzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0MzRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzNUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDM2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDM5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQ0MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0NDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ0NEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDQ1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQ0N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQ4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDUxQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0NTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1M0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDU0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NTVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQ1NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDU3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0NThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1OUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDYwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDYzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQ2NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDY2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0NjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2OEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDY5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQ3MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDcyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDc1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0NzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3N0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDc4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQ4MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDgxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0ODJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDg0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDg3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQ4OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDkwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0OTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDkzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQ5NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ1MDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwMUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NTAyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDUwNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTA1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ1MDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwN0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NTA4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDUxMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NTExQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MTJAdGVzdDCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBALoL2oQZEgFBdXwuPb29W75T63JfNJKKdYi6YrmK
+M+EKbcMue/hFrLGQXB6a2eQZFn+j3hmexeQF9T8iWxh2S6rzAr1Yj+qXeDBaMf4o
+BEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFcV/i0bcIFt5p7v7wbu686a/w0
+vIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUWPaKsJluwR514pJv74urIyEt+
+dFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb/GjvQ6YfvDXRrYPCxWMk0x3F
+MSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj3kIrLbkCAwEAAaOCFeUwghXh
+MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8E
+AjAAMIIVqgYDVR0RBIIVoTCCFZ2CB3QwLnRlc3SCB3QxLnRlc3SCB3QyLnRlc3SC
+B3QzLnRlc3SCB3Q0LnRlc3SCB3Q1LnRlc3SCB3Q2LnRlc3SCB3Q3LnRlc3SCB3Q4
+LnRlc3SCB3Q5LnRlc3SCCHQxMC50ZXN0ggh0MTEudGVzdIIIdDEyLnRlc3SCCHQx
+My50ZXN0ggh0MTQudGVzdIIIdDE1LnRlc3SCCHQxNi50ZXN0ggh0MTcudGVzdIII
+dDE4LnRlc3SCCHQxOS50ZXN0ggh0MjAudGVzdIIIdDIxLnRlc3SCCHQyMi50ZXN0
+ggh0MjMudGVzdIIIdDI0LnRlc3SCCHQyNS50ZXN0ggh0MjYudGVzdIIIdDI3LnRl
+c3SCCHQyOC50ZXN0ggh0MjkudGVzdIIIdDMwLnRlc3SCCHQzMS50ZXN0ggh0MzIu
+dGVzdIIIdDMzLnRlc3SCCHQzNC50ZXN0ggh0MzUudGVzdIIIdDM2LnRlc3SCCHQz
+Ny50ZXN0ggh0MzgudGVzdIIIdDM5LnRlc3SCCHQ0MC50ZXN0ggh0NDEudGVzdIII
+dDQyLnRlc3SCCHQ0My50ZXN0ggh0NDQudGVzdIIIdDQ1LnRlc3SCCHQ0Ni50ZXN0
+ggh0NDcudGVzdIIIdDQ4LnRlc3SCCHQ0OS50ZXN0ggh0NTAudGVzdIIIdDUxLnRl
+c3SCCHQ1Mi50ZXN0ggh0NTMudGVzdIIIdDU0LnRlc3SCCHQ1NS50ZXN0ggh0NTYu
+dGVzdIIIdDU3LnRlc3SCCHQ1OC50ZXN0ggh0NTkudGVzdIIIdDYwLnRlc3SCCHQ2
+MS50ZXN0ggh0NjIudGVzdIIIdDYzLnRlc3SCCHQ2NC50ZXN0ggh0NjUudGVzdIII
+dDY2LnRlc3SCCHQ2Ny50ZXN0ggh0NjgudGVzdIIIdDY5LnRlc3SCCHQ3MC50ZXN0
+ggh0NzEudGVzdIIIdDcyLnRlc3SCCHQ3My50ZXN0ggh0NzQudGVzdIIIdDc1LnRl
+c3SCCHQ3Ni50ZXN0ggh0NzcudGVzdIIIdDc4LnRlc3SCCHQ3OS50ZXN0ggh0ODAu
+dGVzdIIIdDgxLnRlc3SCCHQ4Mi50ZXN0ggh0ODMudGVzdIIIdDg0LnRlc3SCCHQ4
+NS50ZXN0ggh0ODYudGVzdIIIdDg3LnRlc3SCCHQ4OC50ZXN0ggh0ODkudGVzdIII
+dDkwLnRlc3SCCHQ5MS50ZXN0ggh0OTIudGVzdIIIdDkzLnRlc3SCCHQ5NC50ZXN0
+ggh0OTUudGVzdIIIdDk2LnRlc3SCCHQ5Ny50ZXN0ggh0OTgudGVzdIIIdDk5LnRl
+c3SCCXQxMDAudGVzdIIJdDEwMS50ZXN0ggl0MTAyLnRlc3SCCXQxMDMudGVzdIIJ
+dDEwNC50ZXN0ggl0MTA1LnRlc3SCCXQxMDYudGVzdIIJdDEwNy50ZXN0ggl0MTA4
+LnRlc3SCCXQxMDkudGVzdIIJdDExMC50ZXN0ggl0MTExLnRlc3SCCXQxMTIudGVz
+dIIJdDExMy50ZXN0ggl0MTE0LnRlc3SCCXQxMTUudGVzdIIJdDExNi50ZXN0ggl0
+MTE3LnRlc3SCCXQxMTgudGVzdIIJdDExOS50ZXN0ggl0MTIwLnRlc3SCCXQxMjEu
+dGVzdIIJdDEyMi50ZXN0ggl0MTIzLnRlc3SCCXQxMjQudGVzdIIJdDEyNS50ZXN0
+ggl0MTI2LnRlc3SCCXQxMjcudGVzdIIJdDEyOC50ZXN0ggl0MTI5LnRlc3SCCXQx
+MzAudGVzdIIJdDEzMS50ZXN0ggl0MTMyLnRlc3SCCXQxMzMudGVzdIIJdDEzNC50
+ZXN0ggl0MTM1LnRlc3SCCXQxMzYudGVzdIIJdDEzNy50ZXN0ggl0MTM4LnRlc3SC
+CXQxMzkudGVzdIIJdDE0MC50ZXN0ggl0MTQxLnRlc3SCCXQxNDIudGVzdIIJdDE0
+My50ZXN0ggl0MTQ0LnRlc3SCCXQxNDUudGVzdIIJdDE0Ni50ZXN0ggl0MTQ3LnRl
+c3SCCXQxNDgudGVzdIIJdDE0OS50ZXN0ggl0MTUwLnRlc3SCCXQxNTEudGVzdIIJ
+dDE1Mi50ZXN0ggl0MTUzLnRlc3SCCXQxNTQudGVzdIIJdDE1NS50ZXN0ggl0MTU2
+LnRlc3SCCXQxNTcudGVzdIIJdDE1OC50ZXN0ggl0MTU5LnRlc3SCCXQxNjAudGVz
+dIIJdDE2MS50ZXN0ggl0MTYyLnRlc3SCCXQxNjMudGVzdIIJdDE2NC50ZXN0ggl0
+MTY1LnRlc3SCCXQxNjYudGVzdIIJdDE2Ny50ZXN0ggl0MTY4LnRlc3SCCXQxNjku
+dGVzdIIJdDE3MC50ZXN0ggl0MTcxLnRlc3SCCXQxNzIudGVzdIIJdDE3My50ZXN0
+ggl0MTc0LnRlc3SCCXQxNzUudGVzdIIJdDE3Ni50ZXN0ggl0MTc3LnRlc3SCCXQx
+NzgudGVzdIIJdDE3OS50ZXN0ggl0MTgwLnRlc3SCCXQxODEudGVzdIIJdDE4Mi50
+ZXN0ggl0MTgzLnRlc3SCCXQxODQudGVzdIIJdDE4NS50ZXN0ggl0MTg2LnRlc3SC
+CXQxODcudGVzdIIJdDE4OC50ZXN0ggl0MTg5LnRlc3SCCXQxOTAudGVzdIIJdDE5
+MS50ZXN0ggl0MTkyLnRlc3SCCXQxOTMudGVzdIIJdDE5NC50ZXN0ggl0MTk1LnRl
+c3SCCXQxOTYudGVzdIIJdDE5Ny50ZXN0ggl0MTk4LnRlc3SCCXQxOTkudGVzdIIJ
+dDIwMC50ZXN0ggl0MjAxLnRlc3SCCXQyMDIudGVzdIIJdDIwMy50ZXN0ggl0MjA0
+LnRlc3SCCXQyMDUudGVzdIIJdDIwNi50ZXN0ggl0MjA3LnRlc3SCCXQyMDgudGVz
+dIIJdDIwOS50ZXN0ggl0MjEwLnRlc3SCCXQyMTEudGVzdIIJdDIxMi50ZXN0ggl0
+MjEzLnRlc3SCCXQyMTQudGVzdIIJdDIxNS50ZXN0ggl0MjE2LnRlc3SCCXQyMTcu
+dGVzdIIJdDIxOC50ZXN0ggl0MjE5LnRlc3SCCXQyMjAudGVzdIIJdDIyMS50ZXN0
+ggl0MjIyLnRlc3SCCXQyMjMudGVzdIIJdDIyNC50ZXN0ggl0MjI1LnRlc3SCCXQy
+MjYudGVzdIIJdDIyNy50ZXN0ggl0MjI4LnRlc3SCCXQyMjkudGVzdIIJdDIzMC50
+ZXN0ggl0MjMxLnRlc3SCCXQyMzIudGVzdIIJdDIzMy50ZXN0ggl0MjM0LnRlc3SC
+CXQyMzUudGVzdIIJdDIzNi50ZXN0ggl0MjM3LnRlc3SCCXQyMzgudGVzdIIJdDIz
+OS50ZXN0ggl0MjQwLnRlc3SCCXQyNDEudGVzdIIJdDI0Mi50ZXN0ggl0MjQzLnRl
+c3SCCXQyNDQudGVzdIIJdDI0NS50ZXN0ggl0MjQ2LnRlc3SCCXQyNDcudGVzdIIJ
+dDI0OC50ZXN0ggl0MjQ5LnRlc3SCCXQyNTAudGVzdIIJdDI1MS50ZXN0ggl0MjUy
+LnRlc3SCCXQyNTMudGVzdIIJdDI1NC50ZXN0ggl0MjU1LnRlc3SCCXQyNTYudGVz
+dIIJdDI1Ny50ZXN0ggl0MjU4LnRlc3SCCXQyNTkudGVzdIIJdDI2MC50ZXN0ggl0
+MjYxLnRlc3SCCXQyNjIudGVzdIIJdDI2My50ZXN0ggl0MjY0LnRlc3SCCXQyNjUu
+dGVzdIIJdDI2Ni50ZXN0ggl0MjY3LnRlc3SCCXQyNjgudGVzdIIJdDI2OS50ZXN0
+ggl0MjcwLnRlc3SCCXQyNzEudGVzdIIJdDI3Mi50ZXN0ggl0MjczLnRlc3SCCXQy
+NzQudGVzdIIJdDI3NS50ZXN0ggl0Mjc2LnRlc3SCCXQyNzcudGVzdIIJdDI3OC50
+ZXN0ggl0Mjc5LnRlc3SCCXQyODAudGVzdIIJdDI4MS50ZXN0ggl0MjgyLnRlc3SC
+CXQyODMudGVzdIIJdDI4NC50ZXN0ggl0Mjg1LnRlc3SCCXQyODYudGVzdIIJdDI4
+Ny50ZXN0ggl0Mjg4LnRlc3SCCXQyODkudGVzdIIJdDI5MC50ZXN0ggl0MjkxLnRl
+c3SCCXQyOTIudGVzdIIJdDI5My50ZXN0ggl0Mjk0LnRlc3SCCXQyOTUudGVzdIIJ
+dDI5Ni50ZXN0ggl0Mjk3LnRlc3SCCXQyOTgudGVzdIIJdDI5OS50ZXN0ggl0MzAw
+LnRlc3SCCXQzMDEudGVzdIIJdDMwMi50ZXN0ggl0MzAzLnRlc3SCCXQzMDQudGVz
+dIIJdDMwNS50ZXN0ggl0MzA2LnRlc3SCCXQzMDcudGVzdIIJdDMwOC50ZXN0ggl0
+MzA5LnRlc3SCCXQzMTAudGVzdIIJdDMxMS50ZXN0ggl0MzEyLnRlc3SCCXQzMTMu
+dGVzdIIJdDMxNC50ZXN0ggl0MzE1LnRlc3SCCXQzMTYudGVzdIIJdDMxNy50ZXN0
+ggl0MzE4LnRlc3SCCXQzMTkudGVzdIIJdDMyMC50ZXN0ggl0MzIxLnRlc3SCCXQz
+MjIudGVzdIIJdDMyMy50ZXN0ggl0MzI0LnRlc3SCCXQzMjUudGVzdIIJdDMyNi50
+ZXN0ggl0MzI3LnRlc3SCCXQzMjgudGVzdIIJdDMyOS50ZXN0ggl0MzMwLnRlc3SC
+CXQzMzEudGVzdIIJdDMzMi50ZXN0ggl0MzMzLnRlc3SCCXQzMzQudGVzdIIJdDMz
+NS50ZXN0ggl0MzM2LnRlc3SCCXQzMzcudGVzdIIJdDMzOC50ZXN0ggl0MzM5LnRl
+c3SCCXQzNDAudGVzdIIJdDM0MS50ZXN0ggl0MzQyLnRlc3SCCXQzNDMudGVzdIIJ
+dDM0NC50ZXN0ggl0MzQ1LnRlc3SCCXQzNDYudGVzdIIJdDM0Ny50ZXN0ggl0MzQ4
+LnRlc3SCCXQzNDkudGVzdIIJdDM1MC50ZXN0ggl0MzUxLnRlc3SCCXQzNTIudGVz
+dIIJdDM1My50ZXN0ggl0MzU0LnRlc3SCCXQzNTUudGVzdIIJdDM1Ni50ZXN0ggl0
+MzU3LnRlc3SCCXQzNTgudGVzdIIJdDM1OS50ZXN0ggl0MzYwLnRlc3SCCXQzNjEu
+dGVzdIIJdDM2Mi50ZXN0ggl0MzYzLnRlc3SCCXQzNjQudGVzdIIJdDM2NS50ZXN0
+ggl0MzY2LnRlc3SCCXQzNjcudGVzdIIJdDM2OC50ZXN0ggl0MzY5LnRlc3SCCXQz
+NzAudGVzdIIJdDM3MS50ZXN0ggl0MzcyLnRlc3SCCXQzNzMudGVzdIIJdDM3NC50
+ZXN0ggl0Mzc1LnRlc3SCCXQzNzYudGVzdIIJdDM3Ny50ZXN0ggl0Mzc4LnRlc3SC
+CXQzNzkudGVzdIIJdDM4MC50ZXN0ggl0MzgxLnRlc3SCCXQzODIudGVzdIIJdDM4
+My50ZXN0ggl0Mzg0LnRlc3SCCXQzODUudGVzdIIJdDM4Ni50ZXN0ggl0Mzg3LnRl
+c3SCCXQzODgudGVzdIIJdDM4OS50ZXN0ggl0MzkwLnRlc3SCCXQzOTEudGVzdIIJ
+dDM5Mi50ZXN0ggl0MzkzLnRlc3SCCXQzOTQudGVzdIIJdDM5NS50ZXN0ggl0Mzk2
+LnRlc3SCCXQzOTcudGVzdIIJdDM5OC50ZXN0ggl0Mzk5LnRlc3SCCXQ0MDAudGVz
+dIIJdDQwMS50ZXN0ggl0NDAyLnRlc3SCCXQ0MDMudGVzdIIJdDQwNC50ZXN0ggl0
+NDA1LnRlc3SCCXQ0MDYudGVzdIIJdDQwNy50ZXN0ggl0NDA4LnRlc3SCCXQ0MDku
+dGVzdIIJdDQxMC50ZXN0ggl0NDExLnRlc3SCCXQ0MTIudGVzdIIJdDQxMy50ZXN0
+ggl0NDE0LnRlc3SCCXQ0MTUudGVzdIIJdDQxNi50ZXN0ggl0NDE3LnRlc3SCCXQ0
+MTgudGVzdIIJdDQxOS50ZXN0ggl0NDIwLnRlc3SCCXQ0MjEudGVzdIIJdDQyMi50
+ZXN0ggl0NDIzLnRlc3SCCXQ0MjQudGVzdIIJdDQyNS50ZXN0ggl0NDI2LnRlc3SC
+CXQ0MjcudGVzdIIJdDQyOC50ZXN0ggl0NDI5LnRlc3SCCXQ0MzAudGVzdIIJdDQz
+MS50ZXN0ggl0NDMyLnRlc3SCCXQ0MzMudGVzdIIJdDQzNC50ZXN0ggl0NDM1LnRl
+c3SCCXQ0MzYudGVzdIIJdDQzNy50ZXN0ggl0NDM4LnRlc3SCCXQ0MzkudGVzdIIJ
+dDQ0MC50ZXN0ggl0NDQxLnRlc3SCCXQ0NDIudGVzdIIJdDQ0My50ZXN0ggl0NDQ0
+LnRlc3SCCXQ0NDUudGVzdIIJdDQ0Ni50ZXN0ggl0NDQ3LnRlc3SCCXQ0NDgudGVz
+dIIJdDQ0OS50ZXN0ggl0NDUwLnRlc3SCCXQ0NTEudGVzdIIJdDQ1Mi50ZXN0ggl0
+NDUzLnRlc3SCCXQ0NTQudGVzdIIJdDQ1NS50ZXN0ggl0NDU2LnRlc3SCCXQ0NTcu
+dGVzdIIJdDQ1OC50ZXN0ggl0NDU5LnRlc3SCCXQ0NjAudGVzdIIJdDQ2MS50ZXN0
+ggl0NDYyLnRlc3SCCXQ0NjMudGVzdIIJdDQ2NC50ZXN0ggl0NDY1LnRlc3SCCXQ0
+NjYudGVzdIIJdDQ2Ny50ZXN0ggl0NDY4LnRlc3SCCXQ0NjkudGVzdIIJdDQ3MC50
+ZXN0ggl0NDcxLnRlc3SCCXQ0NzIudGVzdIIJdDQ3My50ZXN0ggl0NDc0LnRlc3SC
+CXQ0NzUudGVzdIIJdDQ3Ni50ZXN0ggl0NDc3LnRlc3SCCXQ0NzgudGVzdIIJdDQ3
+OS50ZXN0ggl0NDgwLnRlc3SCCXQ0ODEudGVzdIIJdDQ4Mi50ZXN0ggl0NDgzLnRl
+c3SCCXQ0ODQudGVzdIIJdDQ4NS50ZXN0ggl0NDg2LnRlc3SCCXQ0ODcudGVzdIIJ
+dDQ4OC50ZXN0ggl0NDg5LnRlc3SCCXQ0OTAudGVzdIIJdDQ5MS50ZXN0ggl0NDky
+LnRlc3SCCXQ0OTMudGVzdIIJdDQ5NC50ZXN0ggl0NDk1LnRlc3SCCXQ0OTYudGVz
+dIIJdDQ5Ny50ZXN0ggl0NDk4LnRlc3SCCXQ0OTkudGVzdIIJdDUwMC50ZXN0ggl0
+NTAxLnRlc3SCCXQ1MDIudGVzdIIJdDUwMy50ZXN0ggl0NTA0LnRlc3SCCXQ1MDUu
+dGVzdIIJdDUwNi50ZXN0ggl0NTA3LnRlc3SCCXQ1MDgudGVzdIIJdDUwOS50ZXN0
+ggl0NTEwLnRlc3SCCXQ1MTEudGVzdIIJdDUxMi50ZXN0MA0GCSqGSIb3DQEBCwUA
+A4IBAQCp6JcB0NWRQJSgjsI0ycv1gpuoo2k/NjPlkYCcsLwmTPRVdpBHi9MJNS2i
+MKPk7Wek2y9wJw6QPq9fMi/XSmEqRcFC8uBZ9evyTwmVbzzRsEN3qGHCrVdOnVLa
+D7x7NjoTLApVNelYTxMPEennTd9+we8cl0T2TqosTnbxyvP+pnwtpazjDAFKlt8e
+JpLRlRtWR/aScZ+P8CGj4b3prp12NJIAPG9W2ZqiHNLNMhTQG4Bz+O5+zMnIbC+e
+Ahc4co+A/7qzselNZL1pcFFyRtTeLAcREuZVTTRa/EXmlLqzMe+UEEinEtdktnPL
+KO0ED3qPXggpBbFaa4/PVubBS4QU
+-----END CERTIFICATE-----
diff --git a/test/certs/many-names2.pem b/test/certs/many-names2.pem
new file mode 100644
index 000000000000..842ac608963b
--- /dev/null
+++ b/test/certs/many-names2.pem
@@ -0,0 +1,251 @@
+-----BEGIN CERTIFICATE-----
+MIIunDCCLYSgAwIBAgIBAzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
+Fw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowEjEQMA4GA1UEAxMHdDAu
+dGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoL2oQZEgFBdXwu
+Pb29W75T63JfNJKKdYi6YrmKM+EKbcMue/hFrLGQXB6a2eQZFn+j3hmexeQF9T8i
+Wxh2S6rzAr1Yj+qXeDBaMf4oBEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFc
+V/i0bcIFt5p7v7wbu686a/w0vIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUW
+PaKsJluwR514pJv74urIyEt+dFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb
+/GjvQ6YfvDXRrYPCxWMk0x3FMSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj
+3kIrLbkCAwEAAaOCK/4wgiv6MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggr
+BgEFBQcDATAMBgNVHRMBAf8EAjAAMIIrwwYDVR0RBIIrujCCK7aCB3QwLnRlc3SC
+B3QxLnRlc3SCB3QyLnRlc3SCB3QzLnRlc3SCB3Q0LnRlc3SCB3Q1LnRlc3SCB3Q2
+LnRlc3SCB3Q3LnRlc3SCB3Q4LnRlc3SCB3Q5LnRlc3SCCHQxMC50ZXN0ggh0MTEu
+dGVzdIIIdDEyLnRlc3SCCHQxMy50ZXN0ggh0MTQudGVzdIIIdDE1LnRlc3SCCHQx
+Ni50ZXN0ggh0MTcudGVzdIIIdDE4LnRlc3SCCHQxOS50ZXN0ggh0MjAudGVzdIII
+dDIxLnRlc3SCCHQyMi50ZXN0ggh0MjMudGVzdIIIdDI0LnRlc3SCCHQyNS50ZXN0
+ggh0MjYudGVzdIIIdDI3LnRlc3SCCHQyOC50ZXN0ggh0MjkudGVzdIIIdDMwLnRl
+c3SCCHQzMS50ZXN0ggh0MzIudGVzdIIIdDMzLnRlc3SCCHQzNC50ZXN0ggh0MzUu
+dGVzdIIIdDM2LnRlc3SCCHQzNy50ZXN0ggh0MzgudGVzdIIIdDM5LnRlc3SCCHQ0
+MC50ZXN0ggh0NDEudGVzdIIIdDQyLnRlc3SCCHQ0My50ZXN0ggh0NDQudGVzdIII
+dDQ1LnRlc3SCCHQ0Ni50ZXN0ggh0NDcudGVzdIIIdDQ4LnRlc3SCCHQ0OS50ZXN0
+ggh0NTAudGVzdIIIdDUxLnRlc3SCCHQ1Mi50ZXN0ggh0NTMudGVzdIIIdDU0LnRl
+c3SCCHQ1NS50ZXN0ggh0NTYudGVzdIIIdDU3LnRlc3SCCHQ1OC50ZXN0ggh0NTku
+dGVzdIIIdDYwLnRlc3SCCHQ2MS50ZXN0ggh0NjIudGVzdIIIdDYzLnRlc3SCCHQ2
+NC50ZXN0ggh0NjUudGVzdIIIdDY2LnRlc3SCCHQ2Ny50ZXN0ggh0NjgudGVzdIII
+dDY5LnRlc3SCCHQ3MC50ZXN0ggh0NzEudGVzdIIIdDcyLnRlc3SCCHQ3My50ZXN0
+ggh0NzQudGVzdIIIdDc1LnRlc3SCCHQ3Ni50ZXN0ggh0NzcudGVzdIIIdDc4LnRl
+c3SCCHQ3OS50ZXN0ggh0ODAudGVzdIIIdDgxLnRlc3SCCHQ4Mi50ZXN0ggh0ODMu
+dGVzdIIIdDg0LnRlc3SCCHQ4NS50ZXN0ggh0ODYudGVzdIIIdDg3LnRlc3SCCHQ4
+OC50ZXN0ggh0ODkudGVzdIIIdDkwLnRlc3SCCHQ5MS50ZXN0ggh0OTIudGVzdIII
+dDkzLnRlc3SCCHQ5NC50ZXN0ggh0OTUudGVzdIIIdDk2LnRlc3SCCHQ5Ny50ZXN0
+ggh0OTgudGVzdIIIdDk5LnRlc3SCCXQxMDAudGVzdIIJdDEwMS50ZXN0ggl0MTAy
+LnRlc3SCCXQxMDMudGVzdIIJdDEwNC50ZXN0ggl0MTA1LnRlc3SCCXQxMDYudGVz
+dIIJdDEwNy50ZXN0ggl0MTA4LnRlc3SCCXQxMDkudGVzdIIJdDExMC50ZXN0ggl0
+MTExLnRlc3SCCXQxMTIudGVzdIIJdDExMy50ZXN0ggl0MTE0LnRlc3SCCXQxMTUu
+dGVzdIIJdDExNi50ZXN0ggl0MTE3LnRlc3SCCXQxMTgudGVzdIIJdDExOS50ZXN0
+ggl0MTIwLnRlc3SCCXQxMjEudGVzdIIJdDEyMi50ZXN0ggl0MTIzLnRlc3SCCXQx
+MjQudGVzdIIJdDEyNS50ZXN0ggl0MTI2LnRlc3SCCXQxMjcudGVzdIIJdDEyOC50
+ZXN0ggl0MTI5LnRlc3SCCXQxMzAudGVzdIIJdDEzMS50ZXN0ggl0MTMyLnRlc3SC
+CXQxMzMudGVzdIIJdDEzNC50ZXN0ggl0MTM1LnRlc3SCCXQxMzYudGVzdIIJdDEz
+Ny50ZXN0ggl0MTM4LnRlc3SCCXQxMzkudGVzdIIJdDE0MC50ZXN0ggl0MTQxLnRl
+c3SCCXQxNDIudGVzdIIJdDE0My50ZXN0ggl0MTQ0LnRlc3SCCXQxNDUudGVzdIIJ
+dDE0Ni50ZXN0ggl0MTQ3LnRlc3SCCXQxNDgudGVzdIIJdDE0OS50ZXN0ggl0MTUw
+LnRlc3SCCXQxNTEudGVzdIIJdDE1Mi50ZXN0ggl0MTUzLnRlc3SCCXQxNTQudGVz
+dIIJdDE1NS50ZXN0ggl0MTU2LnRlc3SCCXQxNTcudGVzdIIJdDE1OC50ZXN0ggl0
+MTU5LnRlc3SCCXQxNjAudGVzdIIJdDE2MS50ZXN0ggl0MTYyLnRlc3SCCXQxNjMu
+dGVzdIIJdDE2NC50ZXN0ggl0MTY1LnRlc3SCCXQxNjYudGVzdIIJdDE2Ny50ZXN0
+ggl0MTY4LnRlc3SCCXQxNjkudGVzdIIJdDE3MC50ZXN0ggl0MTcxLnRlc3SCCXQx
+NzIudGVzdIIJdDE3My50ZXN0ggl0MTc0LnRlc3SCCXQxNzUudGVzdIIJdDE3Ni50
+ZXN0ggl0MTc3LnRlc3SCCXQxNzgudGVzdIIJdDE3OS50ZXN0ggl0MTgwLnRlc3SC
+CXQxODEudGVzdIIJdDE4Mi50ZXN0ggl0MTgzLnRlc3SCCXQxODQudGVzdIIJdDE4
+NS50ZXN0ggl0MTg2LnRlc3SCCXQxODcudGVzdIIJdDE4OC50ZXN0ggl0MTg5LnRl
+c3SCCXQxOTAudGVzdIIJdDE5MS50ZXN0ggl0MTkyLnRlc3SCCXQxOTMudGVzdIIJ
+dDE5NC50ZXN0ggl0MTk1LnRlc3SCCXQxOTYudGVzdIIJdDE5Ny50ZXN0ggl0MTk4
+LnRlc3SCCXQxOTkudGVzdIIJdDIwMC50ZXN0ggl0MjAxLnRlc3SCCXQyMDIudGVz
+dIIJdDIwMy50ZXN0ggl0MjA0LnRlc3SCCXQyMDUudGVzdIIJdDIwNi50ZXN0ggl0
+MjA3LnRlc3SCCXQyMDgudGVzdIIJdDIwOS50ZXN0ggl0MjEwLnRlc3SCCXQyMTEu
+dGVzdIIJdDIxMi50ZXN0ggl0MjEzLnRlc3SCCXQyMTQudGVzdIIJdDIxNS50ZXN0
+ggl0MjE2LnRlc3SCCXQyMTcudGVzdIIJdDIxOC50ZXN0ggl0MjE5LnRlc3SCCXQy
+MjAudGVzdIIJdDIyMS50ZXN0ggl0MjIyLnRlc3SCCXQyMjMudGVzdIIJdDIyNC50
+ZXN0ggl0MjI1LnRlc3SCCXQyMjYudGVzdIIJdDIyNy50ZXN0ggl0MjI4LnRlc3SC
+CXQyMjkudGVzdIIJdDIzMC50ZXN0ggl0MjMxLnRlc3SCCXQyMzIudGVzdIIJdDIz
+My50ZXN0ggl0MjM0LnRlc3SCCXQyMzUudGVzdIIJdDIzNi50ZXN0ggl0MjM3LnRl
+c3SCCXQyMzgudGVzdIIJdDIzOS50ZXN0ggl0MjQwLnRlc3SCCXQyNDEudGVzdIIJ
+dDI0Mi50ZXN0ggl0MjQzLnRlc3SCCXQyNDQudGVzdIIJdDI0NS50ZXN0ggl0MjQ2
+LnRlc3SCCXQyNDcudGVzdIIJdDI0OC50ZXN0ggl0MjQ5LnRlc3SCCXQyNTAudGVz
+dIIJdDI1MS50ZXN0ggl0MjUyLnRlc3SCCXQyNTMudGVzdIIJdDI1NC50ZXN0ggl0
+MjU1LnRlc3SCCXQyNTYudGVzdIIJdDI1Ny50ZXN0ggl0MjU4LnRlc3SCCXQyNTku
+dGVzdIIJdDI2MC50ZXN0ggl0MjYxLnRlc3SCCXQyNjIudGVzdIIJdDI2My50ZXN0
+ggl0MjY0LnRlc3SCCXQyNjUudGVzdIIJdDI2Ni50ZXN0ggl0MjY3LnRlc3SCCXQy
+NjgudGVzdIIJdDI2OS50ZXN0ggl0MjcwLnRlc3SCCXQyNzEudGVzdIIJdDI3Mi50
+ZXN0ggl0MjczLnRlc3SCCXQyNzQudGVzdIIJdDI3NS50ZXN0ggl0Mjc2LnRlc3SC
+CXQyNzcudGVzdIIJdDI3OC50ZXN0ggl0Mjc5LnRlc3SCCXQyODAudGVzdIIJdDI4
+MS50ZXN0ggl0MjgyLnRlc3SCCXQyODMudGVzdIIJdDI4NC50ZXN0ggl0Mjg1LnRl
+c3SCCXQyODYudGVzdIIJdDI4Ny50ZXN0ggl0Mjg4LnRlc3SCCXQyODkudGVzdIIJ
+dDI5MC50ZXN0ggl0MjkxLnRlc3SCCXQyOTIudGVzdIIJdDI5My50ZXN0ggl0Mjk0
+LnRlc3SCCXQyOTUudGVzdIIJdDI5Ni50ZXN0ggl0Mjk3LnRlc3SCCXQyOTgudGVz
+dIIJdDI5OS50ZXN0ggl0MzAwLnRlc3SCCXQzMDEudGVzdIIJdDMwMi50ZXN0ggl0
+MzAzLnRlc3SCCXQzMDQudGVzdIIJdDMwNS50ZXN0ggl0MzA2LnRlc3SCCXQzMDcu
+dGVzdIIJdDMwOC50ZXN0ggl0MzA5LnRlc3SCCXQzMTAudGVzdIIJdDMxMS50ZXN0
+ggl0MzEyLnRlc3SCCXQzMTMudGVzdIIJdDMxNC50ZXN0ggl0MzE1LnRlc3SCCXQz
+MTYudGVzdIIJdDMxNy50ZXN0ggl0MzE4LnRlc3SCCXQzMTkudGVzdIIJdDMyMC50
+ZXN0ggl0MzIxLnRlc3SCCXQzMjIudGVzdIIJdDMyMy50ZXN0ggl0MzI0LnRlc3SC
+CXQzMjUudGVzdIIJdDMyNi50ZXN0ggl0MzI3LnRlc3SCCXQzMjgudGVzdIIJdDMy
+OS50ZXN0ggl0MzMwLnRlc3SCCXQzMzEudGVzdIIJdDMzMi50ZXN0ggl0MzMzLnRl
+c3SCCXQzMzQudGVzdIIJdDMzNS50ZXN0ggl0MzM2LnRlc3SCCXQzMzcudGVzdIIJ
+dDMzOC50ZXN0ggl0MzM5LnRlc3SCCXQzNDAudGVzdIIJdDM0MS50ZXN0ggl0MzQy
+LnRlc3SCCXQzNDMudGVzdIIJdDM0NC50ZXN0ggl0MzQ1LnRlc3SCCXQzNDYudGVz
+dIIJdDM0Ny50ZXN0ggl0MzQ4LnRlc3SCCXQzNDkudGVzdIIJdDM1MC50ZXN0ggl0
+MzUxLnRlc3SCCXQzNTIudGVzdIIJdDM1My50ZXN0ggl0MzU0LnRlc3SCCXQzNTUu
+dGVzdIIJdDM1Ni50ZXN0ggl0MzU3LnRlc3SCCXQzNTgudGVzdIIJdDM1OS50ZXN0
+ggl0MzYwLnRlc3SCCXQzNjEudGVzdIIJdDM2Mi50ZXN0ggl0MzYzLnRlc3SCCXQz
+NjQudGVzdIIJdDM2NS50ZXN0ggl0MzY2LnRlc3SCCXQzNjcudGVzdIIJdDM2OC50
+ZXN0ggl0MzY5LnRlc3SCCXQzNzAudGVzdIIJdDM3MS50ZXN0ggl0MzcyLnRlc3SC
+CXQzNzMudGVzdIIJdDM3NC50ZXN0ggl0Mzc1LnRlc3SCCXQzNzYudGVzdIIJdDM3
+Ny50ZXN0ggl0Mzc4LnRlc3SCCXQzNzkudGVzdIIJdDM4MC50ZXN0ggl0MzgxLnRl
+c3SCCXQzODIudGVzdIIJdDM4My50ZXN0ggl0Mzg0LnRlc3SCCXQzODUudGVzdIIJ
+dDM4Ni50ZXN0ggl0Mzg3LnRlc3SCCXQzODgudGVzdIIJdDM4OS50ZXN0ggl0Mzkw
+LnRlc3SCCXQzOTEudGVzdIIJdDM5Mi50ZXN0ggl0MzkzLnRlc3SCCXQzOTQudGVz
+dIIJdDM5NS50ZXN0ggl0Mzk2LnRlc3SCCXQzOTcudGVzdIIJdDM5OC50ZXN0ggl0
+Mzk5LnRlc3SCCXQ0MDAudGVzdIIJdDQwMS50ZXN0ggl0NDAyLnRlc3SCCXQ0MDMu
+dGVzdIIJdDQwNC50ZXN0ggl0NDA1LnRlc3SCCXQ0MDYudGVzdIIJdDQwNy50ZXN0
+ggl0NDA4LnRlc3SCCXQ0MDkudGVzdIIJdDQxMC50ZXN0ggl0NDExLnRlc3SCCXQ0
+MTIudGVzdIIJdDQxMy50ZXN0ggl0NDE0LnRlc3SCCXQ0MTUudGVzdIIJdDQxNi50
+ZXN0ggl0NDE3LnRlc3SCCXQ0MTgudGVzdIIJdDQxOS50ZXN0ggl0NDIwLnRlc3SC
+CXQ0MjEudGVzdIIJdDQyMi50ZXN0ggl0NDIzLnRlc3SCCXQ0MjQudGVzdIIJdDQy
+NS50ZXN0ggl0NDI2LnRlc3SCCXQ0MjcudGVzdIIJdDQyOC50ZXN0ggl0NDI5LnRl
+c3SCCXQ0MzAudGVzdIIJdDQzMS50ZXN0ggl0NDMyLnRlc3SCCXQ0MzMudGVzdIIJ
+dDQzNC50ZXN0ggl0NDM1LnRlc3SCCXQ0MzYudGVzdIIJdDQzNy50ZXN0ggl0NDM4
+LnRlc3SCCXQ0MzkudGVzdIIJdDQ0MC50ZXN0ggl0NDQxLnRlc3SCCXQ0NDIudGVz
+dIIJdDQ0My50ZXN0ggl0NDQ0LnRlc3SCCXQ0NDUudGVzdIIJdDQ0Ni50ZXN0ggl0
+NDQ3LnRlc3SCCXQ0NDgudGVzdIIJdDQ0OS50ZXN0ggl0NDUwLnRlc3SCCXQ0NTEu
+dGVzdIIJdDQ1Mi50ZXN0ggl0NDUzLnRlc3SCCXQ0NTQudGVzdIIJdDQ1NS50ZXN0
+ggl0NDU2LnRlc3SCCXQ0NTcudGVzdIIJdDQ1OC50ZXN0ggl0NDU5LnRlc3SCCXQ0
+NjAudGVzdIIJdDQ2MS50ZXN0ggl0NDYyLnRlc3SCCXQ0NjMudGVzdIIJdDQ2NC50
+ZXN0ggl0NDY1LnRlc3SCCXQ0NjYudGVzdIIJdDQ2Ny50ZXN0ggl0NDY4LnRlc3SC
+CXQ0NjkudGVzdIIJdDQ3MC50ZXN0ggl0NDcxLnRlc3SCCXQ0NzIudGVzdIIJdDQ3
+My50ZXN0ggl0NDc0LnRlc3SCCXQ0NzUudGVzdIIJdDQ3Ni50ZXN0ggl0NDc3LnRl
+c3SCCXQ0NzgudGVzdIIJdDQ3OS50ZXN0ggl0NDgwLnRlc3SCCXQ0ODEudGVzdIIJ
+dDQ4Mi50ZXN0ggl0NDgzLnRlc3SCCXQ0ODQudGVzdIIJdDQ4NS50ZXN0ggl0NDg2
+LnRlc3SCCXQ0ODcudGVzdIIJdDQ4OC50ZXN0ggl0NDg5LnRlc3SCCXQ0OTAudGVz
+dIIJdDQ5MS50ZXN0ggl0NDkyLnRlc3SCCXQ0OTMudGVzdIIJdDQ5NC50ZXN0ggl0
+NDk1LnRlc3SCCXQ0OTYudGVzdIIJdDQ5Ny50ZXN0ggl0NDk4LnRlc3SCCXQ0OTku
+dGVzdIIJdDUwMC50ZXN0ggl0NTAxLnRlc3SCCXQ1MDIudGVzdIIJdDUwMy50ZXN0
+ggl0NTA0LnRlc3SCCXQ1MDUudGVzdIIJdDUwNi50ZXN0ggl0NTA3LnRlc3SCCXQ1
+MDgudGVzdIIJdDUwOS50ZXN0ggl0NTEwLnRlc3SCCXQ1MTEudGVzdIIJdDUxMi50
+ZXN0ggl0NTEzLnRlc3SCCXQ1MTQudGVzdIIJdDUxNS50ZXN0ggl0NTE2LnRlc3SC
+CXQ1MTcudGVzdIIJdDUxOC50ZXN0ggl0NTE5LnRlc3SCCXQ1MjAudGVzdIIJdDUy
+MS50ZXN0ggl0NTIyLnRlc3SCCXQ1MjMudGVzdIIJdDUyNC50ZXN0ggl0NTI1LnRl
+c3SCCXQ1MjYudGVzdIIJdDUyNy50ZXN0ggl0NTI4LnRlc3SCCXQ1MjkudGVzdIIJ
+dDUzMC50ZXN0ggl0NTMxLnRlc3SCCXQ1MzIudGVzdIIJdDUzMy50ZXN0ggl0NTM0
+LnRlc3SCCXQ1MzUudGVzdIIJdDUzNi50ZXN0ggl0NTM3LnRlc3SCCXQ1MzgudGVz
+dIIJdDUzOS50ZXN0ggl0NTQwLnRlc3SCCXQ1NDEudGVzdIIJdDU0Mi50ZXN0ggl0
+NTQzLnRlc3SCCXQ1NDQudGVzdIIJdDU0NS50ZXN0ggl0NTQ2LnRlc3SCCXQ1NDcu
+dGVzdIIJdDU0OC50ZXN0ggl0NTQ5LnRlc3SCCXQ1NTAudGVzdIIJdDU1MS50ZXN0
+ggl0NTUyLnRlc3SCCXQ1NTMudGVzdIIJdDU1NC50ZXN0ggl0NTU1LnRlc3SCCXQ1
+NTYudGVzdIIJdDU1Ny50ZXN0ggl0NTU4LnRlc3SCCXQ1NTkudGVzdIIJdDU2MC50
+ZXN0ggl0NTYxLnRlc3SCCXQ1NjIudGVzdIIJdDU2My50ZXN0ggl0NTY0LnRlc3SC
+CXQ1NjUudGVzdIIJdDU2Ni50ZXN0ggl0NTY3LnRlc3SCCXQ1NjgudGVzdIIJdDU2
+OS50ZXN0ggl0NTcwLnRlc3SCCXQ1NzEudGVzdIIJdDU3Mi50ZXN0ggl0NTczLnRl
+c3SCCXQ1NzQudGVzdIIJdDU3NS50ZXN0ggl0NTc2LnRlc3SCCXQ1NzcudGVzdIIJ
+dDU3OC50ZXN0ggl0NTc5LnRlc3SCCXQ1ODAudGVzdIIJdDU4MS50ZXN0ggl0NTgy
+LnRlc3SCCXQ1ODMudGVzdIIJdDU4NC50ZXN0ggl0NTg1LnRlc3SCCXQ1ODYudGVz
+dIIJdDU4Ny50ZXN0ggl0NTg4LnRlc3SCCXQ1ODkudGVzdIIJdDU5MC50ZXN0ggl0
+NTkxLnRlc3SCCXQ1OTIudGVzdIIJdDU5My50ZXN0ggl0NTk0LnRlc3SCCXQ1OTUu
+dGVzdIIJdDU5Ni50ZXN0ggl0NTk3LnRlc3SCCXQ1OTgudGVzdIIJdDU5OS50ZXN0
+ggl0NjAwLnRlc3SCCXQ2MDEudGVzdIIJdDYwMi50ZXN0ggl0NjAzLnRlc3SCCXQ2
+MDQudGVzdIIJdDYwNS50ZXN0ggl0NjA2LnRlc3SCCXQ2MDcudGVzdIIJdDYwOC50
+ZXN0ggl0NjA5LnRlc3SCCXQ2MTAudGVzdIIJdDYxMS50ZXN0ggl0NjEyLnRlc3SC
+CXQ2MTMudGVzdIIJdDYxNC50ZXN0ggl0NjE1LnRlc3SCCXQ2MTYudGVzdIIJdDYx
+Ny50ZXN0ggl0NjE4LnRlc3SCCXQ2MTkudGVzdIIJdDYyMC50ZXN0ggl0NjIxLnRl
+c3SCCXQ2MjIudGVzdIIJdDYyMy50ZXN0ggl0NjI0LnRlc3SCCXQ2MjUudGVzdIIJ
+dDYyNi50ZXN0ggl0NjI3LnRlc3SCCXQ2MjgudGVzdIIJdDYyOS50ZXN0ggl0NjMw
+LnRlc3SCCXQ2MzEudGVzdIIJdDYzMi50ZXN0ggl0NjMzLnRlc3SCCXQ2MzQudGVz
+dIIJdDYzNS50ZXN0ggl0NjM2LnRlc3SCCXQ2MzcudGVzdIIJdDYzOC50ZXN0ggl0
+NjM5LnRlc3SCCXQ2NDAudGVzdIIJdDY0MS50ZXN0ggl0NjQyLnRlc3SCCXQ2NDMu
+dGVzdIIJdDY0NC50ZXN0ggl0NjQ1LnRlc3SCCXQ2NDYudGVzdIIJdDY0Ny50ZXN0
+ggl0NjQ4LnRlc3SCCXQ2NDkudGVzdIIJdDY1MC50ZXN0ggl0NjUxLnRlc3SCCXQ2
+NTIudGVzdIIJdDY1My50ZXN0ggl0NjU0LnRlc3SCCXQ2NTUudGVzdIIJdDY1Ni50
+ZXN0ggl0NjU3LnRlc3SCCXQ2NTgudGVzdIIJdDY1OS50ZXN0ggl0NjYwLnRlc3SC
+CXQ2NjEudGVzdIIJdDY2Mi50ZXN0ggl0NjYzLnRlc3SCCXQ2NjQudGVzdIIJdDY2
+NS50ZXN0ggl0NjY2LnRlc3SCCXQ2NjcudGVzdIIJdDY2OC50ZXN0ggl0NjY5LnRl
+c3SCCXQ2NzAudGVzdIIJdDY3MS50ZXN0ggl0NjcyLnRlc3SCCXQ2NzMudGVzdIIJ
+dDY3NC50ZXN0ggl0Njc1LnRlc3SCCXQ2NzYudGVzdIIJdDY3Ny50ZXN0ggl0Njc4
+LnRlc3SCCXQ2NzkudGVzdIIJdDY4MC50ZXN0ggl0NjgxLnRlc3SCCXQ2ODIudGVz
+dIIJdDY4My50ZXN0ggl0Njg0LnRlc3SCCXQ2ODUudGVzdIIJdDY4Ni50ZXN0ggl0
+Njg3LnRlc3SCCXQ2ODgudGVzdIIJdDY4OS50ZXN0ggl0NjkwLnRlc3SCCXQ2OTEu
+dGVzdIIJdDY5Mi50ZXN0ggl0NjkzLnRlc3SCCXQ2OTQudGVzdIIJdDY5NS50ZXN0
+ggl0Njk2LnRlc3SCCXQ2OTcudGVzdIIJdDY5OC50ZXN0ggl0Njk5LnRlc3SCCXQ3
+MDAudGVzdIIJdDcwMS50ZXN0ggl0NzAyLnRlc3SCCXQ3MDMudGVzdIIJdDcwNC50
+ZXN0ggl0NzA1LnRlc3SCCXQ3MDYudGVzdIIJdDcwNy50ZXN0ggl0NzA4LnRlc3SC
+CXQ3MDkudGVzdIIJdDcxMC50ZXN0ggl0NzExLnRlc3SCCXQ3MTIudGVzdIIJdDcx
+My50ZXN0ggl0NzE0LnRlc3SCCXQ3MTUudGVzdIIJdDcxNi50ZXN0ggl0NzE3LnRl
+c3SCCXQ3MTgudGVzdIIJdDcxOS50ZXN0ggl0NzIwLnRlc3SCCXQ3MjEudGVzdIIJ
+dDcyMi50ZXN0ggl0NzIzLnRlc3SCCXQ3MjQudGVzdIIJdDcyNS50ZXN0ggl0NzI2
+LnRlc3SCCXQ3MjcudGVzdIIJdDcyOC50ZXN0ggl0NzI5LnRlc3SCCXQ3MzAudGVz
+dIIJdDczMS50ZXN0ggl0NzMyLnRlc3SCCXQ3MzMudGVzdIIJdDczNC50ZXN0ggl0
+NzM1LnRlc3SCCXQ3MzYudGVzdIIJdDczNy50ZXN0ggl0NzM4LnRlc3SCCXQ3Mzku
+dGVzdIIJdDc0MC50ZXN0ggl0NzQxLnRlc3SCCXQ3NDIudGVzdIIJdDc0My50ZXN0
+ggl0NzQ0LnRlc3SCCXQ3NDUudGVzdIIJdDc0Ni50ZXN0ggl0NzQ3LnRlc3SCCXQ3
+NDgudGVzdIIJdDc0OS50ZXN0ggl0NzUwLnRlc3SCCXQ3NTEudGVzdIIJdDc1Mi50
+ZXN0ggl0NzUzLnRlc3SCCXQ3NTQudGVzdIIJdDc1NS50ZXN0ggl0NzU2LnRlc3SC
+CXQ3NTcudGVzdIIJdDc1OC50ZXN0ggl0NzU5LnRlc3SCCXQ3NjAudGVzdIIJdDc2
+MS50ZXN0ggl0NzYyLnRlc3SCCXQ3NjMudGVzdIIJdDc2NC50ZXN0ggl0NzY1LnRl
+c3SCCXQ3NjYudGVzdIIJdDc2Ny50ZXN0ggl0NzY4LnRlc3SCCXQ3NjkudGVzdIIJ
+dDc3MC50ZXN0ggl0NzcxLnRlc3SCCXQ3NzIudGVzdIIJdDc3My50ZXN0ggl0Nzc0
+LnRlc3SCCXQ3NzUudGVzdIIJdDc3Ni50ZXN0ggl0Nzc3LnRlc3SCCXQ3NzgudGVz
+dIIJdDc3OS50ZXN0ggl0NzgwLnRlc3SCCXQ3ODEudGVzdIIJdDc4Mi50ZXN0ggl0
+NzgzLnRlc3SCCXQ3ODQudGVzdIIJdDc4NS50ZXN0ggl0Nzg2LnRlc3SCCXQ3ODcu
+dGVzdIIJdDc4OC50ZXN0ggl0Nzg5LnRlc3SCCXQ3OTAudGVzdIIJdDc5MS50ZXN0
+ggl0NzkyLnRlc3SCCXQ3OTMudGVzdIIJdDc5NC50ZXN0ggl0Nzk1LnRlc3SCCXQ3
+OTYudGVzdIIJdDc5Ny50ZXN0ggl0Nzk4LnRlc3SCCXQ3OTkudGVzdIIJdDgwMC50
+ZXN0ggl0ODAxLnRlc3SCCXQ4MDIudGVzdIIJdDgwMy50ZXN0ggl0ODA0LnRlc3SC
+CXQ4MDUudGVzdIIJdDgwNi50ZXN0ggl0ODA3LnRlc3SCCXQ4MDgudGVzdIIJdDgw
+OS50ZXN0ggl0ODEwLnRlc3SCCXQ4MTEudGVzdIIJdDgxMi50ZXN0ggl0ODEzLnRl
+c3SCCXQ4MTQudGVzdIIJdDgxNS50ZXN0ggl0ODE2LnRlc3SCCXQ4MTcudGVzdIIJ
+dDgxOC50ZXN0ggl0ODE5LnRlc3SCCXQ4MjAudGVzdIIJdDgyMS50ZXN0ggl0ODIy
+LnRlc3SCCXQ4MjMudGVzdIIJdDgyNC50ZXN0ggl0ODI1LnRlc3SCCXQ4MjYudGVz
+dIIJdDgyNy50ZXN0ggl0ODI4LnRlc3SCCXQ4MjkudGVzdIIJdDgzMC50ZXN0ggl0
+ODMxLnRlc3SCCXQ4MzIudGVzdIIJdDgzMy50ZXN0ggl0ODM0LnRlc3SCCXQ4MzUu
+dGVzdIIJdDgzNi50ZXN0ggl0ODM3LnRlc3SCCXQ4MzgudGVzdIIJdDgzOS50ZXN0
+ggl0ODQwLnRlc3SCCXQ4NDEudGVzdIIJdDg0Mi50ZXN0ggl0ODQzLnRlc3SCCXQ4
+NDQudGVzdIIJdDg0NS50ZXN0ggl0ODQ2LnRlc3SCCXQ4NDcudGVzdIIJdDg0OC50
+ZXN0ggl0ODQ5LnRlc3SCCXQ4NTAudGVzdIIJdDg1MS50ZXN0ggl0ODUyLnRlc3SC
+CXQ4NTMudGVzdIIJdDg1NC50ZXN0ggl0ODU1LnRlc3SCCXQ4NTYudGVzdIIJdDg1
+Ny50ZXN0ggl0ODU4LnRlc3SCCXQ4NTkudGVzdIIJdDg2MC50ZXN0ggl0ODYxLnRl
+c3SCCXQ4NjIudGVzdIIJdDg2My50ZXN0ggl0ODY0LnRlc3SCCXQ4NjUudGVzdIIJ
+dDg2Ni50ZXN0ggl0ODY3LnRlc3SCCXQ4NjgudGVzdIIJdDg2OS50ZXN0ggl0ODcw
+LnRlc3SCCXQ4NzEudGVzdIIJdDg3Mi50ZXN0ggl0ODczLnRlc3SCCXQ4NzQudGVz
+dIIJdDg3NS50ZXN0ggl0ODc2LnRlc3SCCXQ4NzcudGVzdIIJdDg3OC50ZXN0ggl0
+ODc5LnRlc3SCCXQ4ODAudGVzdIIJdDg4MS50ZXN0ggl0ODgyLnRlc3SCCXQ4ODMu
+dGVzdIIJdDg4NC50ZXN0ggl0ODg1LnRlc3SCCXQ4ODYudGVzdIIJdDg4Ny50ZXN0
+ggl0ODg4LnRlc3SCCXQ4ODkudGVzdIIJdDg5MC50ZXN0ggl0ODkxLnRlc3SCCXQ4
+OTIudGVzdIIJdDg5My50ZXN0ggl0ODk0LnRlc3SCCXQ4OTUudGVzdIIJdDg5Ni50
+ZXN0ggl0ODk3LnRlc3SCCXQ4OTgudGVzdIIJdDg5OS50ZXN0ggl0OTAwLnRlc3SC
+CXQ5MDEudGVzdIIJdDkwMi50ZXN0ggl0OTAzLnRlc3SCCXQ5MDQudGVzdIIJdDkw
+NS50ZXN0ggl0OTA2LnRlc3SCCXQ5MDcudGVzdIIJdDkwOC50ZXN0ggl0OTA5LnRl
+c3SCCXQ5MTAudGVzdIIJdDkxMS50ZXN0ggl0OTEyLnRlc3SCCXQ5MTMudGVzdIIJ
+dDkxNC50ZXN0ggl0OTE1LnRlc3SCCXQ5MTYudGVzdIIJdDkxNy50ZXN0ggl0OTE4
+LnRlc3SCCXQ5MTkudGVzdIIJdDkyMC50ZXN0ggl0OTIxLnRlc3SCCXQ5MjIudGVz
+dIIJdDkyMy50ZXN0ggl0OTI0LnRlc3SCCXQ5MjUudGVzdIIJdDkyNi50ZXN0ggl0
+OTI3LnRlc3SCCXQ5MjgudGVzdIIJdDkyOS50ZXN0ggl0OTMwLnRlc3SCCXQ5MzEu
+dGVzdIIJdDkzMi50ZXN0ggl0OTMzLnRlc3SCCXQ5MzQudGVzdIIJdDkzNS50ZXN0
+ggl0OTM2LnRlc3SCCXQ5MzcudGVzdIIJdDkzOC50ZXN0ggl0OTM5LnRlc3SCCXQ5
+NDAudGVzdIIJdDk0MS50ZXN0ggl0OTQyLnRlc3SCCXQ5NDMudGVzdIIJdDk0NC50
+ZXN0ggl0OTQ1LnRlc3SCCXQ5NDYudGVzdIIJdDk0Ny50ZXN0ggl0OTQ4LnRlc3SC
+CXQ5NDkudGVzdIIJdDk1MC50ZXN0ggl0OTUxLnRlc3SCCXQ5NTIudGVzdIIJdDk1
+My50ZXN0ggl0OTU0LnRlc3SCCXQ5NTUudGVzdIIJdDk1Ni50ZXN0ggl0OTU3LnRl
+c3SCCXQ5NTgudGVzdIIJdDk1OS50ZXN0ggl0OTYwLnRlc3SCCXQ5NjEudGVzdIIJ
+dDk2Mi50ZXN0ggl0OTYzLnRlc3SCCXQ5NjQudGVzdIIJdDk2NS50ZXN0ggl0OTY2
+LnRlc3SCCXQ5NjcudGVzdIIJdDk2OC50ZXN0ggl0OTY5LnRlc3SCCXQ5NzAudGVz
+dIIJdDk3MS50ZXN0ggl0OTcyLnRlc3SCCXQ5NzMudGVzdIIJdDk3NC50ZXN0ggl0
+OTc1LnRlc3SCCXQ5NzYudGVzdIIJdDk3Ny50ZXN0ggl0OTc4LnRlc3SCCXQ5Nzku
+dGVzdIIJdDk4MC50ZXN0ggl0OTgxLnRlc3SCCXQ5ODIudGVzdIIJdDk4My50ZXN0
+ggl0OTg0LnRlc3SCCXQ5ODUudGVzdIIJdDk4Ni50ZXN0ggl0OTg3LnRlc3SCCXQ5
+ODgudGVzdIIJdDk4OS50ZXN0ggl0OTkwLnRlc3SCCXQ5OTEudGVzdIIJdDk5Mi50
+ZXN0ggl0OTkzLnRlc3SCCXQ5OTQudGVzdIIJdDk5NS50ZXN0ggl0OTk2LnRlc3SC
+CXQ5OTcudGVzdIIJdDk5OC50ZXN0ggl0OTk5LnRlc3SCCnQxMDAwLnRlc3SCCnQx
+MDAxLnRlc3SCCnQxMDAyLnRlc3SCCnQxMDAzLnRlc3SCCnQxMDA0LnRlc3SCCnQx
+MDA1LnRlc3SCCnQxMDA2LnRlc3SCCnQxMDA3LnRlc3SCCnQxMDA4LnRlc3SCCnQx
+MDA5LnRlc3SCCnQxMDEwLnRlc3SCCnQxMDExLnRlc3SCCnQxMDEyLnRlc3SCCnQx
+MDEzLnRlc3SCCnQxMDE0LnRlc3SCCnQxMDE1LnRlc3SCCnQxMDE2LnRlc3SCCnQx
+MDE3LnRlc3SCCnQxMDE4LnRlc3SCCnQxMDE5LnRlc3SCCnQxMDIwLnRlc3SCCnQx
+MDIxLnRlc3SCCnQxMDIyLnRlc3SCCnQxMDIzLnRlc3SCCnQxMDI0LnRlc3QwDQYJ
+KoZIhvcNAQELBQADggEBAGfZxjrjcjFw5FnJMzq7SIad+JpmvMar7VnzXj84hjoV
+FuUqiclqjg1KRD7aIh5M1VEQv+AAk8UP6jMrvLJpoi5OD8ljivNA8zycj1N/LhNq
+8MjZauCTS+tuXIoh5hOE/TQqY6cUxY4LRBLIFIcbH0FGF22amCtowMVbRoaUpPvr
+GR5OXPAS3yRiEWrp703c21o3hw9QckB82z7Lxnt3oOFPg62EFPXiqE07Wkw/1xH4
+J9yy45XW5A77kfel22hVs873QVHI+GkKoTPe/q6eQVgesR2vpDRytKDP9K4tK4KS
+6hqVxj6a8Eqund0izSV+UXkskc9iN6EPXvVTELo3hD8=
+-----END CERTIFICATE-----
diff --git a/test/certs/many-names3.pem b/test/certs/many-names3.pem
new file mode 100644
index 000000000000..dbfa04281945
--- /dev/null
+++ b/test/certs/many-names3.pem
@@ -0,0 +1,571 @@
+-----BEGIN CERTIFICATE-----
+MIJqmDCCaYCgAwIBAgIBBDANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
+Fw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgmfXMRAwDgYDVQQDEwd0
+MC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+MUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+M0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+NUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+N0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI
+dDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB
+Fgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B
+CQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3
+DQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI
+hvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq
+hkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG
+CSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw
+FQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx
+FzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz
+dDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0
+ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy
+QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0
+MzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW
+CHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ
+ARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN
+AQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG
+9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG
+SIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ
+KoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV
+BgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX
+MBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0
+MRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl
+c3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA
+dGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1
+N0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI
+dDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB
+Fgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B
+CQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3
+DQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI
+hvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq
+hkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG
+CSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw
+FQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx
+FzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz
+dDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0
+ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw
+QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0
+ODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW
+CHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ
+ARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN
+AQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG
+9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG
+SIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ
+KoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV
+BgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX
+MBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjMyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyMzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIz
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyMzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIzN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjQxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyNDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjUwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyNTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDI1NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyNTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyNjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjYyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI2NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjY1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyNjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjY4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjcxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI3M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjc0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyNzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0Mjc3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzhAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDI3OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyODFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyODRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0Mjg2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyODdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI4OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjg5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyOTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjkyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+Mjk1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI5N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjk4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyOTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwMEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzAxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDMwM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzMDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMw
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzMDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwOUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzEwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDMxMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzEzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzMTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxNUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MzE2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzE5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDMyMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzIyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzMjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMyNEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzI1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDMyN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzI4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzMjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMz
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzMzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzM0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMzVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDMzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzM3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzMzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzOUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MzQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDM0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzQ2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzNDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0OEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDM1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzUyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzNTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzNTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1N0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDM2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzYxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzNjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MzY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDM2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzcwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzNzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDM3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzNzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDM4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzg1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0Mzg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDM5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzk0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzOTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0Mzk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDM5OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQw
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0MDRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQwNUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDA2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQwOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDA5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0MTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxMUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDEyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDE1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQxN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDE4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0MTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyMEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDIxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQyM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQy
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0MjhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyOUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDMwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQzMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDMzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0MzRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzNUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDM2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDM5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQ0MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0NDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ0NEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDQ1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQ0N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQ4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDUxQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0NTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1M0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDU0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NTVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQ1NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDU3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0NThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1OUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDYwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDYzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQ2NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDY2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0NjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2OEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDY5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQ3MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDcyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDc1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0NzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3N0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDc4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQ4MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDgxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0ODJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDg0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDg3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQ4OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDkwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0OTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDkzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQ5NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ1MDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwMUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NTAyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDUwNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTA1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ1MDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwN0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NTA4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDUxMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NTExQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDUxM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTE0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ1MTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUxNkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NTE3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDUxOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTIwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ1MjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUy
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTIzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ1MjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUyNUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NTI2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MjdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDUyOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTI5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ1MzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUzMUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NTMyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MzNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDUzNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NTM1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MzZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDUzN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTM4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ1MzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU0MEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NTQxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NDJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDU0M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTQ0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ1NDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU0
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ1NDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU0OUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NTUwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDU1MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTUzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ1NTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU1NUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NTU2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDU1OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NTU5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NjBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDU2MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTYyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ1NjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU2NEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NTY1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NjZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDU2N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTY4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ1NjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU3
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTcxQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ1NzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU3M0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NTc0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NzVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDU3NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTc3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ1NzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU3OUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NTgwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1ODFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDU4MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NTgzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1ODRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDU4NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTg2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ1ODdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU4OEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NTg5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1OTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDU5MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTkyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ1OTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU5
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTk1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ1OTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU5N0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NTk4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1OTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDYwMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjAxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ2MDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYwM0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NjA0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MDVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDYwNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NjA3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MDhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDYwOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjEwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ2MTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYxMkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NjEzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MTRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDYxNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjE2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ2MTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYx
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjE5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ2MjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYyMUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NjIyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MjNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDYyNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjI1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ2MjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYyN0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NjI4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MjlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDYzMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NjMxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MzJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDYzM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjM0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ2MzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYzNkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NjM3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MzhAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDYzOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjQwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ2NDFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY0
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjQzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ2NDRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY0NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NjQ2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NDdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDY0OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjQ5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ2NTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY1MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NjUyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NTNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDY1NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NjU1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NTZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDY1N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjU4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ2NTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY2MEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NjYxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NjJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDY2M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjY0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ2NjVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY2
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjY3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ2NjhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY2OUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NjcwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NzFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDY3MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjczQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ2NzRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY3NUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0Njc2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NzdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDY3OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+Njc5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2ODBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDY4MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjgyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ2ODNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY4NEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0Njg1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2ODZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDY4N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Njg4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ2ODlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY5
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjkxQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ2OTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY5M0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0Njk0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2OTVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDY5NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Njk3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ2OThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY5OUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NzAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MDFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDcwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NzAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MDRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDcwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzA2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ3MDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcwOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NzA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDcxMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzEyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ3MTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcx
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ3MTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcxN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NzE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDcyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzIxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ3MjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcyM0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NzI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MjVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDcyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NzI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MjhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDcyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzMwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ3MzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDczMkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NzMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MzRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDczNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzM2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ3MzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcz
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ3NDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc0MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NzQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NDNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDc0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzQ1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ3NDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc0N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NzQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NDlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDc1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NzUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDc1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzU0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ3NTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc1NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NzU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDc1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzYwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ3NjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc2
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ3NjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc2NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NzY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NjdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDc2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzY5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ3NzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc3MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NzcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NzNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDc3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+Nzc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NzZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDc3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Nzc4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ3NzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc4MEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NzgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3ODJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDc4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Nzg0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ3ODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc4
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Nzg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ3ODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc4OUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NzkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3OTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDc5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzkzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ3OTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc5NUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0Nzk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3OTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDc5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+Nzk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MDBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDgwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODAyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ4MDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgwNEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0ODA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MDZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDgwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODA4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ4MDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgx
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODExQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ4MTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgxM0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0ODE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MTVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDgxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODE3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ4MThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgxOUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0ODIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MjFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDgyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+ODIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MjRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDgyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODI2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ4MjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgyOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0ODI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MzBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDgzMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODMyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ4MzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgz
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ4MzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgzN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0ODM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MzlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDg0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODQxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ4NDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg0M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0ODQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NDVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDg0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+ODQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NDhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDg0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODUwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ4NTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg1MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0ODUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NTRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDg1NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODU2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ4NTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg1
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODU5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ4NjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg2MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0ODYyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NjNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDg2NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODY1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ4NjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg2N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0ODY4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NjlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDg3MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+ODcxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NzJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDg3M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODc0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ4NzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg3NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0ODc3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NzhAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDg3OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODgwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ4ODFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg4
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODgzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ4ODRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg4NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0ODg2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4ODdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDg4OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODg5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ4OTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg5MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0ODkyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4OTNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDg5NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+ODk1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4OTZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDg5N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODk4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ4OTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkwMEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0OTAxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MDJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDkwM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTA0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ5MDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkw
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTA3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ5MDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkwOUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0OTEwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDkxMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTEzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ5MTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkxNUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0OTE2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDkxOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+OTE5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MjBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDkyMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTIyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ5MjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkyNEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0OTI1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MjZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDkyN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTI4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ5MjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkz
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ5MzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkzM0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0OTM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MzVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDkzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTM3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ5MzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkzOUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0OTQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NDFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDk0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+OTQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NDRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDk0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTQ2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ5NDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk0OEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0OTQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDk1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTUyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ5NTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk1
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ5NTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk1N0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0OTU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDk2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTYxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ5NjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk2M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0OTY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NjVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDk2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+OTY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NjhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDk2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTcwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ5NzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk3MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0OTczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NzRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDk3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTc2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ5NzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk3
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ5ODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk4MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0OTgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5ODNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDk4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTg1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ5ODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk4N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0OTg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5ODlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDk5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+OTkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5OTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDk5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTk0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ5OTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk5NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0OTk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5OThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDk5OUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwMEB0
+ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwMUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0
+MTAwMkB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwM0B0ZXN0MRkwFwYJKoZIhvcN
+AQkBFgp0MTAwNEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwNUB0ZXN0MRkwFwYJ
+KoZIhvcNAQkBFgp0MTAwNkB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwN0B0ZXN0
+MRkwFwYJKoZIhvcNAQkBFgp0MTAwOEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAw
+OUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxMEB0ZXN0MRkwFwYJKoZIhvcNAQkB
+Fgp0MTAxMUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxMkB0ZXN0MRkwFwYJKoZI
+hvcNAQkBFgp0MTAxM0B0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxNEB0ZXN0MRkw
+FwYJKoZIhvcNAQkBFgp0MTAxNUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxNkB0
+ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxN0B0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0
+MTAxOEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxOUB0ZXN0MRkwFwYJKoZIhvcN
+AQkBFgp0MTAyMEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAyMUB0ZXN0MRkwFwYJ
+KoZIhvcNAQkBFgp0MTAyMkB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAyM0B0ZXN0
+MRkwFwYJKoZIhvcNAQkBFgp0MTAyNEB0ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAugvahBkSAUF1fC49vb1bvlPrcl80kop1iLpiuYoz4Qptwy57
++EWssZBcHprZ5BkWf6PeGZ7F5AX1PyJbGHZLqvMCvViP6pd4MFox/igESISEHEix
+oiXCzepBrhtp5UQSjHD4D4hKtgdMgVxX+LRtwgW3mnu/vBu7rzpr/DS8io99p3lq
+Z1Aky+aNlcMj6MYy8U+YFEevb/V0lRY9oqwmW7BHnXikm/vi6sjIS350U8zb/mRz
+YeIs2R65LUduTL50+UMgat9ocewI2dv8aO9Dph+8NdGtg8LFYyTTHcUxJoMr1PTO
+gnmET19WJH4PrFwk7ZE1QJQQ1L4iKmPeQistuQIDAQABozUwMzAOBgNVHQ8BAf8E
+BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADANBgkqhkiG
+9w0BAQsFAAOCAQEAtMIpnGzOBkJXEBmCsRVbTrg9QgYRlGPG48+cXT2QbIutAmbj
+miF+OYg/bRsQtuqcKjnJYog+x6UCU3d34jaMEfEXfHSwF7xPQrqJm45MXhG3so4E
++el5GMAS+SKFQK3w8NPoGhGwn82sz4XV6HMG+ANUxMlCrOcx2jh5UW+7ITjdRwJd
+ReJ/JaMpneJdwGFSU9Vn+t7PFb51/pOYqO/PuEANzphovjMVcFZ6mtAQwYDkQZBJ
+Vy1/7bPoNmbKD0GAS6HpS+xaJ/DnjjD6Kal2T7GMyvRMogj5BeZ/uEkXCEhvoaBT
+os1gaqqnGpZ6JSEDctzjgpCtEPR40yiz1wv1CA==
+-----END CERTIFICATE-----
diff --git a/test/certs/mkcert.sh b/test/certs/mkcert.sh
new file mode 100755
index 000000000000..648d91cd9ebe
--- /dev/null
+++ b/test/certs/mkcert.sh
@@ -0,0 +1,411 @@
+#! /bin/bash
+#
+# Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2016 Viktor Dukhovni <openssl-users@dukhovni.org>.
+# 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
+
+# This file is dual-licensed and is also available under other terms.
+# Please contact the author.
+
+# 100 years should be enough for now
+if [ -z "$DAYS" ]; then
+ DAYS=36525
+fi
+
+if [ -z "$OPENSSL_SIGALG" ]; then
+ OPENSSL_SIGALG=sha256
+fi
+
+if [ -z "$REQMASK" ]; then
+ REQMASK=utf8only
+fi
+
+stderr_onerror() {
+ (
+ err=$("$@" >&3 2>&1) || {
+ printf "%s\n" "$err" >&2
+ exit 1
+ }
+ ) 3>&1
+}
+
+key() {
+ local key=$1; shift
+
+ local alg=rsa
+ if [ -n "$OPENSSL_KEYALG" ]; then
+ alg=$OPENSSL_KEYALG
+ fi
+
+ local bits=2048
+ if [ -n "$OPENSSL_KEYBITS" ]; then
+ bits=$OPENSSL_KEYBITS
+ fi
+
+ if [ ! -f "${key}.pem" ]; then
+ args=(-algorithm "$alg")
+ case $alg in
+ rsa) args=("${args[@]}" -pkeyopt rsa_keygen_bits:$bits );;
+ ec) args=("${args[@]}" -pkeyopt "ec_paramgen_curve:$bits")
+ args=("${args[@]}" -pkeyopt ec_param_enc:named_curve);;
+ dsa) args=(-paramfile "$bits");;
+ ed25519) ;;
+ ed448) ;;
+ *) printf "Unsupported key algorithm: %s\n" "$alg" >&2; return 1;;
+ esac
+ stderr_onerror \
+ openssl genpkey "${args[@]}" -out "${key}.pem"
+ fi
+}
+
+# Usage: $0 req keyname dn1 dn2 ...
+req() {
+ local key=$1; shift
+
+ key "$key"
+ local errs
+
+ stderr_onerror \
+ openssl req -new -"${OPENSSL_SIGALG}" -key "${key}.pem" \
+ -config <(printf "string_mask=%s\n[req]\n%s\n%s\n[dn]\n" \
+ "$REQMASK" "prompt = no" "distinguished_name = dn"
+ for dn in "$@"; do echo "$dn"; done)
+}
+
+req_nocn() {
+ local key=$1; shift
+
+ key "$key"
+ stderr_onerror \
+ openssl req -new -"${OPENSSL_SIGALG}" -subj / -key "${key}.pem" \
+ -config <(printf "[req]\n%s\n[dn]\nCN_default =\n" \
+ "distinguished_name = dn")
+}
+
+cert() {
+ local cert=$1; shift
+ local exts=$1; shift
+
+ stderr_onerror \
+ openssl x509 -req -"${OPENSSL_SIGALG}" -out "${cert}.pem" \
+ -extfile <(printf "%s\n" "$exts") "$@"
+}
+
+genroot() {
+ local cn=$1; shift
+ local key=$1; shift
+ local cert=$1; shift
+ local bcon="basicConstraints = critical,CA:true"
+ local ku="keyUsage = keyCertSign,cRLSign"
+ local skid="subjectKeyIdentifier = hash"
+ local akid="authorityKeyIdentifier = keyid"
+
+ exts=$(printf "%s\n%s\n%s\n" "$bcon" "$ku" "$skid" "$akid")
+ for eku in "$@"
+ do
+ exts=$(printf "%s\nextendedKeyUsage = %s\n" "$exts" "$eku")
+ done
+ csr=$(req "$key" "CN = $cn") || return 1
+ echo "$csr" |
+ cert "$cert" "$exts" -signkey "${key}.pem" -set_serial 1 -days "${DAYS}"
+}
+
+genca() {
+ local OPTIND=1
+ local purpose=
+
+ while getopts p:c: o
+ do
+ case $o in
+ p) purpose="$OPTARG";;
+ c) certpol="$OPTARG";;
+ *) echo "Usage: $0 genca [-p EKU][-c policyoid] cn keyname certname cakeyname cacertname" >&2
+ return 1;;
+ esac
+ done
+
+ shift $((OPTIND - 1))
+ local cn=$1; shift
+ local key=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local cacert=$1; shift
+ local bcon="basicConstraints = critical,CA:true"
+ local ku="keyUsage = keyCertSign,cRLSign"
+ local skid="subjectKeyIdentifier = hash"
+ local akid="authorityKeyIdentifier = keyid"
+
+ exts=$(printf "%s\n%s\n%s\n" "$bcon" "$ku" "$skid" "$akid")
+ if [ -n "$purpose" ]; then
+ exts=$(printf "%s\nextendedKeyUsage = %s\n" "$exts" "$purpose")
+ fi
+ if [ -n "$NC" ]; then
+ exts=$(printf "%s\nnameConstraints = %s\n" "$exts" "$NC")
+ fi
+ if [ -n "$certpol" ]; then
+ exts=$(printf "%s\ncertificatePolicies = %s\n" "$exts" "$certpol")
+ fi
+
+ csr=$(req "$key" "CN = $cn") || return 1
+ echo "$csr" |
+ cert "$cert" "$exts" -CA "${cacert}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}" "$@"
+}
+
+gen_nonbc_ca() {
+ local cn=$1; shift
+ local key=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local cacert=$1; shift
+ local skid="subjectKeyIdentifier = hash"
+ local akid="authorityKeyIdentifier = keyid"
+
+ exts=$(printf "%s\n%s\n%s\n" "$skid" "$akid")
+ exts=$(printf "%s\nkeyUsage = %s\n" "$exts" "keyCertSign, cRLSign")
+ for eku in "$@"
+ do
+ exts=$(printf "%s\nextendedKeyUsage = %s\n" "$exts" "$eku")
+ done
+ csr=$(req "$key" "CN = $cn") || return 1
+ echo "$csr" |
+ cert "$cert" "$exts" -CA "${cacert}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}"
+}
+
+# Usage: $0 genpc keyname certname eekeyname eecertname pcext1 pcext2 ...
+#
+# Note: takes csr on stdin, so must be used with $0 req like this:
+#
+# $0 req keyname dn | $0 genpc keyname certname eekeyname eecertname pcext ...
+genpc() {
+ local key=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local ca=$1; shift
+
+ exts=$(printf "%s\n%s\n%s\n%s\n" \
+ "subjectKeyIdentifier = hash" \
+ "authorityKeyIdentifier = keyid, issuer:always" \
+ "basicConstraints = CA:false" \
+ "proxyCertInfo = critical, @pcexts";
+ echo "[pcexts]";
+ for x in "$@"; do echo $x; done)
+ cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}"
+}
+
+geneeconfig() {
+ local key=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local ca=$1; shift
+ local conf=$1; shift
+
+ exts=$(printf "%s\n%s\n%s\n%s\n" \
+ "subjectKeyIdentifier = hash" \
+ "authorityKeyIdentifier = keyid" \
+ "basicConstraints = CA:false"; \
+ echo "$conf")
+
+ cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}"
+}
+
+# Usage: $0 geneealt keyname certname cakeyname cacertname alt1 alt2 ...
+#
+# Note: takes csr on stdin, so must be used with $0 req like this:
+#
+# $0 req keyname dn | $0 geneealt keyname certname cakeyname cacertname alt ...
+geneealt() {
+ local key=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local ca=$1; shift
+
+ conf=$(echo "subjectAltName = @alts"
+ echo "[alts]";
+ for x in "$@"; do echo "$x"; done)
+
+ geneeconfig $key $cert $cakey $ca "$conf"
+}
+
+genee() {
+ local OPTIND=1
+ local purpose=serverAuth
+
+ while getopts p: o
+ do
+ case $o in
+ p) purpose="$OPTARG";;
+ *) echo "Usage: $0 genee [-p EKU] cn keyname certname cakeyname cacertname" >&2
+ return 1;;
+ esac
+ done
+
+ shift $((OPTIND - 1))
+ local cn=$1; shift
+ local key=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local ca=$1; shift
+
+ exts=$(printf "%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \
+ "subjectKeyIdentifier = hash" \
+ "authorityKeyIdentifier = keyid, issuer" \
+ "basicConstraints = CA:false" \
+ "extendedKeyUsage = $purpose" \
+ "subjectAltName = @alts" "DNS=${cn}")
+ csr=$(req "$key" "CN = $cn") || return 1
+ echo "$csr" |
+ cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}" "$@"
+}
+
+geneeextra() {
+ local OPTIND=1
+ local purpose=serverAuth
+
+ while getopts p: o
+ do
+ case $o in
+ p) purpose="$OPTARG";;
+ *) echo "Usage: $0 geneeextra [-p EKU] cn keyname certname cakeyname cacertname extraext" >&2
+ return 1;;
+ esac
+ done
+
+ shift $((OPTIND - 1))
+ local cn=$1; shift
+ local key=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local ca=$1; shift
+ local extraext=$1; shift
+
+ exts=$(printf "%s\n%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \
+ "subjectKeyIdentifier = hash" \
+ "authorityKeyIdentifier = keyid, issuer" \
+ "basicConstraints = CA:false" \
+ "extendedKeyUsage = $purpose" \
+ "subjectAltName = @alts"\
+ "$extraext" "DNS=${cn}")
+ csr=$(req "$key" "CN = $cn") || return 1
+ echo "$csr" |
+ cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}" "$@"
+}
+
+geneenocsr() {
+ local OPTIND=1
+ local purpose=serverAuth
+
+ while getopts p: o
+ do
+ case $o in
+ p) purpose="$OPTARG";;
+ *) echo "Usage: $0 geneenocsr [-p EKU] cn certname cakeyname cacertname" >&2
+ return 1;;
+ esac
+ done
+
+ shift $((OPTIND - 1))
+ local cn=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local ca=$1; shift
+
+ exts=$(printf "%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \
+ "subjectKeyIdentifier = hash" \
+ "authorityKeyIdentifier = keyid, issuer" \
+ "basicConstraints = CA:false" \
+ "extendedKeyUsage = $purpose" \
+ "subjectAltName = @alts" "DNS=${cn}")
+ cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}" "$@"
+}
+
+genss() {
+ local cn=$1; shift
+ local key=$1; shift
+ local cert=$1; shift
+
+ exts=$(printf "%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \
+ "subjectKeyIdentifier = hash" \
+ "authorityKeyIdentifier = keyid, issuer" \
+ "basicConstraints = CA:false" \
+ "extendedKeyUsage = serverAuth" \
+ "subjectAltName = @alts" "DNS=${cn}")
+ csr=$(req "$key" "CN = $cn") || return 1
+ echo "$csr" |
+ cert "$cert" "$exts" -signkey "${key}.pem" \
+ -set_serial 1 -days "${DAYS}" "$@"
+}
+
+gennocn() {
+ local key=$1; shift
+ local cert=$1; shift
+
+ csr=$(req_nocn "$key") || return 1
+ echo "$csr" |
+ cert "$cert" "" -signkey "${key}.pem" -set_serial 1 -days -1 "$@"
+}
+
+genct() {
+ local OPTIND=1
+ local purpose=serverAuth
+
+ while getopts p: o
+ do
+ case $o in
+ p) purpose="$OPTARG";;
+ *) echo "Usage: $0 genct [-p EKU] cn keyname certname cakeyname cacertname ctlogkey" >&2
+ return 1;;
+ esac
+ done
+
+ shift $((OPTIND - 1))
+ local cn=$1; shift
+ local key=$1; shift
+ local cert=$1; shift
+ local cakey=$1; shift
+ local ca=$1; shift
+ local logkey=$1; shift
+
+ exts=$(printf "%s\n%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \
+ "subjectKeyIdentifier = hash" \
+ "authorityKeyIdentifier = keyid, issuer" \
+ "basicConstraints = CA:false" \
+ "extendedKeyUsage = $purpose" \
+ "1.3.6.1.4.1.11129.2.4.3 = critical,ASN1:NULL"\
+ "subjectAltName = @alts" "DNS=${cn}")
+ csr=$(req "$key" "CN = $cn") || return 1
+ echo "$csr" |
+ cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}" "$@"
+ cat ${cert}.pem ${ca}.pem > ${cert}-chain.pem
+ go run github.com/google/certificate-transparency-go/ctutil/sctgen \
+ --log_private_key ${logkey}.pem \
+ --timestamp="2020-01-01T00:00:00Z" \
+ --cert_chain ${cert}-chain.pem \
+ --tls_out ${cert}.tlssct
+ rm ${cert}-chain.pem
+ filesize=$(wc -c <${cert}.tlssct)
+ exts=$(printf "%s\n%s\n%s\n%s\n%s%04X%04X%s\n%s\n[alts]\n%s\n" \
+ "subjectKeyIdentifier = hash" \
+ "authorityKeyIdentifier = keyid, issuer" \
+ "basicConstraints = CA:false" \
+ "extendedKeyUsage = $purpose" \
+ "1.3.6.1.4.1.11129.2.4.2 = ASN1:FORMAT:HEX,OCT:" $((filesize+2)) $filesize `xxd -p ${cert}.tlssct | tr -d '\n'` \
+ "subjectAltName = @alts" "DNS=${cn}")
+ echo "$csr" |
+ cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \
+ -set_serial 2 -days "${DAYS}" "$@"
+}
+
+"$@"
diff --git a/test/certs/nca+anyEKU.pem b/test/certs/nca+anyEKU.pem
new file mode 100644
index 000000000000..3ebfede09ca8
--- /dev/null
+++ b/test/certs/nca+anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDDTCCAfWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTcwNFoYDzIxMjAxMjEzMjAxNzA0WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNxMG8wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAkGA1UdEwQCMAAwEwYDVR0l
+BAwwCgYIKwYBBQUHAwEwDQYDVR0RBAYwBIICQ0EwDQYJKoZIhvcNAQELBQADggEB
+AGMZ+jXtPoEaGGj3vBOxw4Uf9h8G5PWIZOqV8EGdJkPVWSUJ7NM12vqTN8Lfv7UO
++gv1VJL02UO1UWrvDcid37XWBbVLwSjk963se+S8Xzd+I2FQY8+Yy4m5VN6m6Krc
+pZt64zsgYROre5yP3gWIvzNa8Ayk/1nmQX1ADAe2tQJeWHROFBim0K3FcjIrhqZ8
+3MUAVJ5Nt3THrVrt3ojIWBOatBJHv+Q2Ii52UZVKG5HMGogRuMjFQy/mwshcBQSz
+pxAWfqT2oVmP+K/iBGxikYjtrOOYNW8L8RwShU3j1dFulQZb2SLRRj8/eDBSV++6
+KsEzVayX0uF80Hohuxbq7OAwCDAGBgRVHSUA
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/nca+serverAuth.pem b/test/certs/nca+serverAuth.pem
new file mode 100644
index 000000000000..b97a4559fa4a
--- /dev/null
+++ b/test/certs/nca+serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDDTCCAfWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNxMG8wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAkGA1UdEwQCMAAwEwYDVR0l
+BAwwCgYIKwYBBQUHAwEwDQYDVR0RBAYwBIICQ0EwDQYJKoZIhvcNAQELBQADggEB
+AL/aEy4Nk2W2UQNi/0h9MLkiq4J5IkjUocJp4grPUsdUJKu68GFYgWnJSBZjKMhs
+X390IUWrRJ8C7SJtyGOhbh2E6Zn7TveI77Mnw2CZpGhy+xieqTFmaIIWJgZVzaTT
+3hMhnXImn06k8eJiJiQQAHKr9XKDK9HIiESyBpujIW5hI7wrklkn0asl6DwiXcUw
+AuXqNffWpomWI4ZZceOJkr5dSFM9HyksQi4uzj0qYTDyDHJ6BLuGYWbUoB64pnKF
+wCn0cPOmbo866l0XqzJlxQYPvwOicAptX8jTjSpYsx5SLripS4KwyfxbGy5If8mT
+X4st+BN48+n9wHuDQJ97sBswDDAKBggrBgEFBQcDAQ==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/ncca-cert.pem b/test/certs/ncca-cert.pem
new file mode 100644
index 000000000000..a79bba6f55a5
--- /dev/null
+++ b/test/certs/ncca-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDeTCCAmGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDcwMTExMzQwMloYDzIxMTYwNzAyMTEzNDAyWjAVMRMwEQYDVQQD
+DApUZXN0IE5DIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmuWS
+Ozk+X7+BorU9o4nDc9jhk+Qajzav6yRFpJFlnxL5I4Az3wQiHFwyDWkR58FKYFLx
+adAahUYRIJioBwUhKEiMyJcT/Lr+lxioQog268nCUosqr5r3iaAQkXj9j49HXIdo
+qD+hbMH/82IqYP7vpJl8yvjRCZQ69KJZOQN4F4rHtUxJYLLmmbeIF02uNNib5hiH
+m3sdn1ic2Cxk1h1mHQqa5fPfKz2NSANKRYVQcOYiFSwroNFbgKo7++N59NGgYY0a
+n5uz+MZh/10+PsRF7WFsxt0TdExv++mN1fFRkBB4fD7fFp+52Qef27lv37X2JT5U
+C2gpXXUWQC8jJIijPwIDAQABo4HUMIHRMB0GA1UdDgQWBBRh7exLM2xCRHrP9Slp
+oxYhlykaqDAfBgNVHSMEGDAWgBSO9SWvHptrhD18gJrJU5xNcvejUjAPBgNVHRMB
+Af8EBTADAQH/MH4GA1UdHgR3MHWgOzAOggx3d3cuZ29vZC5vcmcwC4IJLmdvb2Qu
+Y29tMA+BDWdvb2RAZ29vZC5vcmcwC4EJQGdvb2QuY29toTYwDYILd3d3LmJhZC5v
+cmcwCoIILmJhZC5jb20wDYELYmFkQGJhZC5vcmcwCoEIQGJhZC5jb20wDQYJKoZI
+hvcNAQELBQADggEBAEFkGH/0mh93mMCWZ1QZOhlK48arnco0wjC5sYcVX5X/PoO1
+2DmHFiyHmHablH4d8uWUt9A63Akt0ogIPL4R0I3nOkUU38A1geXruSJDlDVsH75/
+MT7RVRTqJriVwqX6YlAVj2i0De20BLgyZiN3WaR+nngVC7JjdY+n1qskGByEWrin
+pwDVdFtWBTPDq1Nh9sm3FewrfOws7KQvjf0Pj88PIrNEDZm9SR512eH7EFPMvHJv
+7usU33GL34VRZAYtspQ5EwZbspHXe1FFwdhZLr71gChGeNpDfpqVDQQxhDNor7uQ
+z8L+Xuh7FvhjFgCp1Mnd6VN1q2Pwt5sG8Z3i29Q=
+-----END CERTIFICATE-----
diff --git a/test/certs/ncca-key.pem b/test/certs/ncca-key.pem
new file mode 100644
index 000000000000..d08554154929
--- /dev/null
+++ b/test/certs/ncca-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCa5ZI7OT5fv4Gi
+tT2jicNz2OGT5BqPNq/rJEWkkWWfEvkjgDPfBCIcXDINaRHnwUpgUvFp0BqFRhEg
+mKgHBSEoSIzIlxP8uv6XGKhCiDbrycJSiyqvmveJoBCReP2Pj0dch2ioP6Fswf/z
+Yipg/u+kmXzK+NEJlDr0olk5A3gXise1TElgsuaZt4gXTa402JvmGIebex2fWJzY
+LGTWHWYdCprl898rPY1IA0pFhVBw5iIVLCug0VuAqjv743n00aBhjRqfm7P4xmH/
+XT4+xEXtYWzG3RN0TG/76Y3V8VGQEHh8Pt8Wn7nZB5/buW/ftfYlPlQLaClddRZA
+LyMkiKM/AgMBAAECggEAfZqBDKMrkArDvUPIes9gfZU1vm3ul4kZ98wO6Ra519dT
+zVTNOx+n5WVhdPxpd4uGmztG5a3Jg57AjrUbM64WKAtElffkTkD352AoOOMp3eNa
+PwL4lzNLXP890CjTO9FMZZyr4hrO9FkQCrTkdojjnI6V4iUHpQPdFrh7Lz8/553v
+sfbXW0o6jRtnN8jslLs7LQY+n0QQeLuvwrJGJRdQSfubtjTOYzlE/WZJmitJMi2X
+0qnoVK5B91bo3NcdFxstSgv36RL5Txsas8PfXWrFzPxqgjPjlpw1xMrF5bT3rK72
+oPB+/HunqIJc0OHHs2mi38Jea0yBCaJHzniAp2INcQKBgQDLjP5STKvu+SSZGpBp
+T3m+i6hbmo1HzYZBSi9jJiyGB8G50G5rbGJ0c/BgjfkhfRhmJ5Ym4NVVgxQgrMHe
+pFP5L4yDtspFwbRWuuYHoWFupUbqnZfksDHB5xQHFbJPFKBQOKBgM4crDG6PTnYO
+2M+fNlY7IL/QTlJxUHYH07CPGQKBgQDCzytixBLPB/mmIZNhwyK8pyecu6tCEpBi
+QiG/gcaLejXMwGieTiZQ/5sCG+oQWywFXqbPsgQ/gAlXsZ0yZ5GW7TTtsOGksnmt
+W1+bxQQ3Pv99wpg/G71SLdK0em5lAodCT6gccqjbKRj23sRnmL+M2GeEGI5hsNyC
+OFmyYisIFwKBgHLNk8cRLUu8QzMC834h8BVTKWJ4+cQMm/MJB08Rgb0adN37O7vk
+xmbN2T5r9J45suAy5ZIJ7uiq5FhFd5a98gqyEbtcBhtv0+mywfh9wbkpCKVcuwWl
+hnrJfNc+GnJVvNFiDroTdeIGwfiblSRsjjVK7TmuD+FJu1/jtJ5Xe9ZJAoGASHwP
+N5ufJ/ter6r0jL6vsSQ8//twOJBxuq3CouAlwQYC+KFrC+QmK6M/yOQcDmPuGD1k
+sgkZvYrlbwS+ad/Rcyfltr9G5iImVhOWmn4PGINPSzrZrTmkEuzL5q1bYCg1rb23
+3oXnQEylZk3zJFzYgQ6QTb1ZVQ4arjVLYq1WN5cCgYEAxRBqa8ZfwlS5D6bBNgn3
+DDCwz2kZNXG5U3wIw905NNrpUC55W33qcKe9UzoRZEOzuUjq3EL2maMrJULldLGy
+g+elvsZhz7cfmestY2cnbxExqwrTrLWfA8s9Hyl7i9tkfRze5WfhNGc3kwm1qrVG
+5zFZgtb/mTLnvQVIYCX9ks4=
+-----END PRIVATE KEY-----
diff --git a/test/certs/ncca1-cert.pem b/test/certs/ncca1-cert.pem
new file mode 100644
index 000000000000..68cb870f18e1
--- /dev/null
+++ b/test/certs/ncca1-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDZjCCAk6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTk0NFoYDzIxMjAxMjEzMjAxOTQ0WjAXMRUwEwYDVQQD
+DAxUZXN0IE5DIENBIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC
+XjL5JEImsGFW5whlXCfDTeqjZAVb+rSXAhZQ25bP9YvhsbmPVYe8A61zwGStl2rF
+mChzN9/+LA40/lh0mjCV82mfNp1XLRPhE9sPGXwfLgJGCy/d6pp/8yGuFmkWPus9
+bhxlOk7ADw4e3R3kVdwn9I3O3mIrI+I45ywZpzrbs/NGFiqhRxXbZTAKyI4INxgB
+VZfkoxqesnjD1j36fq7qEVas6gVm27YA9b+31ofFLM7WN811LQELwTdWiF0/xXiO
+XawU1QnkrNPxCSPWyeaM4tN50ZPRQA/ArV4I7szKhKskRzGwFgdaxorYn8c+2gTq
+fedLPvNw1WPryAumidqTAgMBAAGjgb8wgbwwDwYDVR0TAQH/BAUwAwEB/zALBgNV
+HQ8EBAMCAQYwHQYDVR0OBBYEFAjRm/nm1WRwoPFrGp7tUtrd9VBDMB8GA1UdIwQY
+MBaAFI71Ja8em2uEPXyAmslTnE1y96NSMFwGA1UdHgRVMFOgUTAOggx3d3cuZ29v
+ZC5vcmcwCoIIZ29vZC5jb20wD4ENZ29vZEBnb29kLm9yZzAKgQhnb29kLmNvbTAK
+hwh/AAAB/////zAKhwjAqAAA//8AADANBgkqhkiG9w0BAQsFAAOCAQEAVyRsB6B8
+iCYZxBTOO10Bor+Q4xxgs0udVR90/tM57P8GHd10e8suaW2Dtg9stxZJ3cmsn3zd
++QNxNIQuwHTNtVU0OSqKv6puj6ZQETSya4jDAmRqY47R866MHkSwLUYDMFtuM1Wy
+gnoD5m1/Uy1K/Wvbnp1Zq4jtTB6su8TmIdJgtpEmte7tIQu5kPXsuJrz/x5a1TfR
+hu7h4LJYwKlQtd/LRINnHKd241YSE7PVdG8SPxyrX11hJSC+1Z5Epxc6BCVDVN1E
+fyVDdLXvKf30Nlbg2hZfO/cGTmwOt7RImygzhV/s41v4wtMW0EPuVanGQusRgHFm
+3JC//UMgfkkwAA==
+-----END CERTIFICATE-----
diff --git a/test/certs/ncca1-key.pem b/test/certs/ncca1-key.pem
new file mode 100644
index 000000000000..eef6b14b9c56
--- /dev/null
+++ b/test/certs/ncca1-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCXjL5JEImsGFW
+5whlXCfDTeqjZAVb+rSXAhZQ25bP9YvhsbmPVYe8A61zwGStl2rFmChzN9/+LA40
+/lh0mjCV82mfNp1XLRPhE9sPGXwfLgJGCy/d6pp/8yGuFmkWPus9bhxlOk7ADw4e
+3R3kVdwn9I3O3mIrI+I45ywZpzrbs/NGFiqhRxXbZTAKyI4INxgBVZfkoxqesnjD
+1j36fq7qEVas6gVm27YA9b+31ofFLM7WN811LQELwTdWiF0/xXiOXawU1QnkrNPx
+CSPWyeaM4tN50ZPRQA/ArV4I7szKhKskRzGwFgdaxorYn8c+2gTqfedLPvNw1WPr
+yAumidqTAgMBAAECggEAcIZCclQYa/eO0tW72ZppdrsEDQWZyK8yn33Y14TZIZnh
+Go9egumcRC/I2gtW/dx8NtqpCFMfvTFaJDnfkdm2KQmba04d9tsk+BgbqPkzD4X+
+UPinBI2OVma2Z+eXfQZ9/7lgfQYtkyjkHuAaLxe59fOxqUK7iIgkrpa+xDc5bvkR
+v3e/ipJ1lrLn7aaQUR87wIkG9hs5UpRHiTd8PgaVavX8SdeXsOChv89owIKya2d3
+HCZiFVPwHrn7FVmDD41sllC78r+qvsyRs1j9aU5hGk8XlslxrYehphCCUHTUWRfM
+Mc6iSzuJyHFj1faOSs64eab5FLWp612S709vcfhSqQKBgQD7ycj2VhoPII6sko+k
+iUS0hzX7qC17cP4RmqGKbyffNW0L5B5+XmqBrw13duSv7O388F9P0+ctxbLgg6ML
+2r0PxkNTNISJim+vWbwMAFevJ9mzsOMRaPZKqx1MghWJzjR2LdPD5x9nHrYi7uUC
+NJe6R6pjtPCSU4yMLgu0IOEm7wKBgQDFnocCLCNiHwaJZ0v1wgSpQmYcE6MOKp+1
+SqOAsWwRtEgMQFoAEC3gGotm0BYF0fwSbM8XFFWqO2NITSV7b8/RkADocvvHWfQN
+d/ETJy3iL1UZgr012jwa91VuhL4XbqON+CAZSgwmVnOhTaXg1imuorHrwR6f1JzT
+F9EQhiqmnQKBgCmsYS2cXJ3KVrLrYwjpi0yR4HZxhG2c6wBA5qHB+ghwkEbaj818
+lQY30fPG4tzXSyCFLFFLEkU6JnwQbYkFwCr/Np9r3s/g8NFF+eDGobykzNx3121H
+QRRks+m40hXH4lj5Bsay1zi7FYw8m/y8daxoNiRgizy8xVNiP5+lnX5TAoGAQ4bJ
+50ohxROI7kanxBBJ+3Q+4/Up0FtsO0yH1h/KJ7qMq/MJTeA5bMxlOfp8q/x2v+0C
+ToaaRxMH99q0phsszhUA2mz/77yjEj8b10mZ+iHmWFM+SDqMM0K0pJEjS2p45LgW
+b83HnQoJdOLNfahwkcXyOfbBeifydoc63wSZalkCgYEA2gNC+Fvtzv/Zm6yj6M2j
+RdU2Ncbi3fAKCiOhTcsXSWi0H7IYi/r8Su48946X7GTLgZIFM4HlGbQaStX5MUbJ
+BjtOyYaUGjzH/7KKiuyuoLVuWWi4llV+Xigc+WSqO5X/DUmjXA9ldbB5/vcDiHk0
+QZ/pla7vZ4cbNPFd2cFHk84=
+-----END PRIVATE KEY-----
diff --git a/test/certs/ncca2-cert.pem b/test/certs/ncca2-cert.pem
new file mode 100644
index 000000000000..67bb66881734
--- /dev/null
+++ b/test/certs/ncca2-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAj2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTk0NFoYDzIxMjAxMjEzMjAxOTQ0WjAXMRUwEwYDVQQD
+DAxUZXN0IE5DIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8
+Dg3FeyXgtP6MAYaLRCH1peDogKo0OI5dqERirJDymgg0eqUkGPD86n/ZRDFZMhqM
+2LATVNS9UHybb/8aBZaSNmCVGcQuhGFFI1STjtu34n8z7+XFE66I2cFUo20kUdTl
+OeUAj7Wd+a2paAtPW3G2mX6EIzm/6/3HMh/y1d0knCBRjialOCdhrRTvGcamYBqw
+PJd8X8nMtM320ZNDF5wBvx09/5KY1jLhdzBVbzezFogX0Bj1LX9UZRu+xN2dHAUn
+CuYevJJwkfiHeg0EZxr/p4AZ7GICWkpk+bRzQ16+IifXtc5qIns0VvWKtffsDExV
+mlM6af1eIjgLhKGAd9cZAgMBAAGjga4wgaswDwYDVR0TAQH/BAUwAwEB/zALBgNV
+HQ8EBAMCAQYwHQYDVR0OBBYEFLoDn50GJKRX5nP69ToJ+bqFzKn6MB8GA1UdIwQY
+MBaAFI71Ja8em2uEPXyAmslTnE1y96NSMEsGA1UdHgREMEKhQDANggt3d3cuYmFk
+Lm9yZzAJggdiYWQuY29tMA2BC2JhZEBiYWQub3JnMAmBB2JhZC5jb20wCocICgAA
+AP8AAAAwDQYJKoZIhvcNAQELBQADggEBAHD486rW57xvLnJ4IGfXkntdQXB6YqiV
+OFajRMkxuf88CtlLSaRFeSwL+cqsVDR2vjOPPEck10anRf1ziAOX17NQFDu7PvZs
+8ZJwtVz0oBNWgf5HHaLTfd+uRnSerenP8wEAW4ptYynEGAGGkPBU7IOfvWVAOTbc
+RsgSfVpXH2TQP7reJO4DjJ0fHzH9X1ejBCIRn7YGIN9ZvMqjmkI6a14H9FHrhegC
+oiIKWYC/OAI2S9b9AIKQgjaJaQvh5+x/fD81arQhLgiQF+6TlEcj/kp5DjhM3lNG
+vIB+ErixBOOzT1BBWygKCIITTa7NEdTMcLhmPBjupeVBfJoYDUNs8mQ=
+-----END CERTIFICATE-----
diff --git a/test/certs/ncca2-key.pem b/test/certs/ncca2-key.pem
new file mode 100644
index 000000000000..03eae6df4887
--- /dev/null
+++ b/test/certs/ncca2-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8Dg3FeyXgtP6M
+AYaLRCH1peDogKo0OI5dqERirJDymgg0eqUkGPD86n/ZRDFZMhqM2LATVNS9UHyb
+b/8aBZaSNmCVGcQuhGFFI1STjtu34n8z7+XFE66I2cFUo20kUdTlOeUAj7Wd+a2p
+aAtPW3G2mX6EIzm/6/3HMh/y1d0knCBRjialOCdhrRTvGcamYBqwPJd8X8nMtM32
+0ZNDF5wBvx09/5KY1jLhdzBVbzezFogX0Bj1LX9UZRu+xN2dHAUnCuYevJJwkfiH
+eg0EZxr/p4AZ7GICWkpk+bRzQ16+IifXtc5qIns0VvWKtffsDExVmlM6af1eIjgL
+hKGAd9cZAgMBAAECggEAT1t+5D87lL/MSzi5ljuCOS9u4a6qJK9ZJJzFfv5jjH0D
+yWGYHsuHprMukHj+ei1yls06QG4j+F/mtZFljY2eJMVdrI3bA+ZJRevK3RoEDm0+
+UKSDyc6scIOz2gu9Gv6NYM41nS8H7UpXxo1peGuWaQANK6XR0PO9fDni0Y7+a1vc
+mTbiI5m2mKcYRgLmDBXzTGANszBdgGK9UxHL+Jx+j04ZdcMSg3b/OE1RAZr9zS86
+2CiZgcEVdddXjQ0HufkeG7gozyX7Y4JulLuqLZiROyHiIv+8kXLyLi7MUBFuizKP
+GdmJxGhYfbYVLU5KXsLjf/oakYroatxabonn4HnpoQKBgQD3zhL2dEuyhPwxpGHu
+53hpZmNSbLj7pT441t4WwraoV8SyOb195yeX77IVT1FSctmYi2txXdfe1MAseKcf
+8P7XuWchEnro5dE7sTcZ4M3uLMDsEFPkWyRz3Y+CIg6IjMz0JsByyVVa8f4Kjw9G
+99ceZPd+M16YNwYgj/1GB9HOBwKBgQDCRiIlWz8BPnY6xltQPSC4AXffD4V5pzOo
+/b82y6+aeCvzwZGcXz9ac3fbRkiOKdPa0b+mYm/ZTpO0XIMALkpsQRN5Jnt5UeaP
+J3n7IAS13Gy2gDXuRrllXbbRZI4VPiI7gADzYYpu68sBnJwH2FC0w2l96Gj6woCI
+POoClgfp3wKBgQCMLqWHig5wdM59/rHwBj2V0ngJXrvej4H9gX+tfIT8AnqhIAzU
+Nnmtd8lUSMSGUbZKl0Q2o5HE2rHD9pUEer6PprBygxPIwIl2rS+wkf2s6OBSKoJq
+wiyC5ymRwlZaZNxkma9wv/hrNE40Bu3rhbTJ2vAvEjxG+4mZzhrHDRFg7QKBgGCK
+6b0WsyCzIZ3jpM0jE3ddg2xeEj56ULnSH4vjfMiOn4jq0Kmcy6bvasiVDMlZD+bW
+BR9yG5Mp8UzYDGGyn1lcnYi/Du0jPig1vfCF4NFfUMcAv8xBaTBuecNk7RaxYeGf
+otlPx7OHicKrSP69CJ5L3cisDj9PGQCbBM90L0qRAoGAcXUoDdI+EYBBqxIOXvvl
+ZuSOyNPZHwcPw+918uSpuh1xSn/qGD6EdlsBRIxBGk1ztQDNfhOmpFiPSeCmFzhS
++IEy2NMVWRoJTaVwN2UzpKfyDRIzs6DWTs8fJARNDWO+lp04skToFRPdY5L6RJhP
+dl0yHofPTNUz2lLmMOhTOw4=
+-----END PRIVATE KEY-----
diff --git a/test/certs/ncca3-cert.pem b/test/certs/ncca3-cert.pem
new file mode 100644
index 000000000000..8e32bba7c8ab
--- /dev/null
+++ b/test/certs/ncca3-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDUDCCAjigAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IE5DIENBIDEwIBcNMjAxMjEyMjAxOTQ0WhgPMjEyMDEyMTMyMDE5NDRaMBkxFzAV
+BgNVBAMMDlRlc3QgTkMgc3ViIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAu6gOQAcNel3NCbWCctR4Y4BqRNPbo6W3HpFyY+204kGimdNZvE2zkpfs
+HR6PB7AHUvq+44+NN/l1J//JkT/9rFVoGDbb/L354US/iBJ3zjBSqeeXvofSmsvf
+6+x6g9W7bFLETJ0mH+vjPQ2f3dS4O4Lc7W3HsldR/WUkesQb3+FsxBph6/84vylM
+oSsScd/2HFD7lrt+Fk1DGqkMI10tl6PozREAxSJgSFLUtr2P15a7wyi4m5LBM4+L
+YKMr/vuj7wFtH2BEwh2iRbJ2wYxxjKV42Hg+6l5XlahVr2rTpK6aP9R8spg+Og/P
+A+d2shD3+q6OkglEyq9rRGa2mRZrwwIDAQABo4GiMIGfMA8GA1UdEwEB/wQFMAMB
+Af8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwU4mH3VYZwBnmIFVvC/wUFdejsjAf
+BgNVHSMEGDAWgBQI0Zv55tVkcKDxaxqe7VLa3fVQQzA/BgNVHR4EODA2oB8wDoIM
+d3d3Lmdvb2QubmV0MA2CC29rLmdvb2QuY29toRMwEYIPYmFkLm9rLmdvb2QuY29t
+MA0GCSqGSIb3DQEBCwUAA4IBAQCas6HvdD3CfYPEooZryBngkCmdtUQjccoBXRHW
+ED1PisJUcZfvlMX5RH1s+yl3aVUJ1772MjRW2bXrBk/UdWLtkJVrZzbuSYRqEFQp
+KHulRCnf6hZeMNFXKcCrbOcJNtdKVkuV1tHaqQPj5CnA0mnVfhyvYxKQrkG/zFfJ
+RMgUIU62RFb/vddx2KZvwIBsYgw1gvUedNJ+uuBlGo5wf1jQNNn51N8yY21nx6lv
+mlGPomS93q1MU2FiK1r/M0mU7s9wBGK9j/BStxqNjJdDYNKJVjcEFLFhvPRPQrZJ
+QDOpJBdP3hIa3YN1STkq3NgpTu7b0jSVI7RGwLXTRDF07Ff0
+-----END CERTIFICATE-----
diff --git a/test/certs/ncca3-key.pem b/test/certs/ncca3-key.pem
new file mode 100644
index 000000000000..3277dd245f58
--- /dev/null
+++ b/test/certs/ncca3-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7qA5ABw16Xc0J
+tYJy1HhjgGpE09ujpbcekXJj7bTiQaKZ01m8TbOSl+wdHo8HsAdS+r7jj403+XUn
+/8mRP/2sVWgYNtv8vfnhRL+IEnfOMFKp55e+h9Kay9/r7HqD1btsUsRMnSYf6+M9
+DZ/d1Lg7gtztbceyV1H9ZSR6xBvf4WzEGmHr/zi/KUyhKxJx3/YcUPuWu34WTUMa
+qQwjXS2Xo+jNEQDFImBIUtS2vY/XlrvDKLibksEzj4tgoyv++6PvAW0fYETCHaJF
+snbBjHGMpXjYeD7qXleVqFWvatOkrpo/1HyymD46D88D53ayEPf6ro6SCUTKr2tE
+ZraZFmvDAgMBAAECggEALp/Lopbd/2gs2FuzpIoruzUdsiodKSS0QbELhc56obiD
+CMsdQY7grex3Kqj8CoHu3+wS34E8Kgsd06lW0HLguR+jNFj1AW/GFPU6zTkhcSZK
+c5Jp/lnKttEuunRP4E+LOJe70/k7jrTSCcpHzRrcB1U1RPyAoEvXwCiQDryI3G+9
+jDw1vUvQTlb3u/0j798N8a13ahi2cepauOrxS/Si0fHt9LxOnaRfVJWyQ5hmyh0j
+MFpAzpqGtI6hlq0HO0Kzu+zFIl9POcrMyAjPdfhIR7zC+pHsyOGXsRpRU0HKHQfC
+ukImc9wZ9xy2/lQVwWJnjksaZfM6qVG5IOkpIUskIQKBgQDtnhkkGo4BlGA/yCY+
+2Vt6dZOBEtJlqBVzL4Us0B5PLqE4L09r5pTil7pep8itM5u5Bn1zio839Q0iUDxc
+omfViJA/y/eJb0trLZXKen8QUcVkBvB4VL4vVPjULcKCpWPNcop2toJDJdDZuSvR
+DQUYvkd22MlBCg3YCVcDGPXisQKBgQDKLIB2sSwTph6XjBPnsC3br11ymSog5RAq
+zXpnBczre1CT7dLixbJP6ISbVJwlDrvFum33r3hEOUDE5BZo2aVyQoZ6tPTmIfkG
+C14xsnvyuGYBTWemd7dyt2rXbvZaq0a3U1IHxt/KQlj99DrSASyfKH0Hk44EZ3dS
+wsi7Vq4KswKBgAr7dKQDii6ugehQwtvCxgSZ7JBZo1nJc/xX5OrWT6BPQmpLXXta
+M+VpJ9b6ID9JFFhv4Vp2u/nVHJ9KYA/T/cKTxj78mVtDxpOUjsjF8pt5fAsMew7E
+s+mSHtIHr2bEaCF1usqT0t9xnv6BHXJTDLpBCSKIEH0uDse+XsQo4ixxAoGAVjgm
+TPf/8R0+HKkrb/pNhEvEUXQKaF7nxyk8EyWBH8fGNGAPOJDRG4zwyIGL2a3v3EJG
+VYPqiUXVXmJbQDnZeeHvEfOMIXzJg49ji1Qv0fJb5iBJnM+fV3frQ5bZzw8OKG6L
+JC/nDo2/AAag8yB3FCUjNRDzVuN9Grlg+6vaq0sCgYEAnpSh/EA1lxKpHFs8dh8l
+qtoKzBZzBFODMp8avJVYUYI3oVjm4CUXKbMdSNgQiFjfWKe6I0vzFxhIBOEI+5JR
+N29VMjeFxgXkD4qmz6qjCZr9tmJiiu3tMJfW13D94U5RKi5OFAzlPxtBLe+sx6nq
+NXMk2XIx1ndW+uWUjtU0EQc=
+-----END PRIVATE KEY-----
diff --git a/test/certs/nccaothername-cert.pem b/test/certs/nccaothername-cert.pem
new file mode 100644
index 000000000000..f9b9b07b8042
--- /dev/null
+++ b/test/certs/nccaothername-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDPjCCAiagAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIyMTIxMzE4MTgwM1oYDzIxMjIxMjE0MTgxODAzWjAfMR0wGwYDVQQD
+DBRUZXN0IE5DIENBIG90aGVybmFtZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAN0Dx+ei8CgtRKnDcYiLwX4vrA48at/o/zfX24X/WZZM1o9HUKo1FQBN
+vhESJu+gqPxuIePrk+/L25XdRqwCKk8wkWX0XIz18q5orOHUUFAWNK3g0FDj6N8H
+d8urNIbDJ44FCx+/0n8Ppiht/EYN3aVOW5enqbgZ+EEt+3AUG6ibieRdGri9g4oh
+IIx60MmVHLbuT/TcVZxaeWyTl6iWmsYosUyqlhTtu1uGtbVtkCAhBYloVvz4J5eA
+mVu/JuJbsNxbxVeO9Q8Kj6nb4jPPdGvZ3JPcabbWrz5LwaereBf5IPrXEVdQTlYB
+gI0pTz2CEDHSIrd7jzRUX/9EC2gMk6UCAwEAAaOBjzCBjDAPBgNVHRMBAf8EBTAD
+AQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU8IYIV+7jXTHo2d3+F6K6jkKDKsEw
+HwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwLAYDVR0eBCUwI6EhMB+g
+HQYIKwYBBQUHCAegEQwPZm9vQGV4YW1wbGUub3JnMA0GCSqGSIb3DQEBCwUAA4IB
+AQDPI5uZd8DhSNKMvYF5bxOshd6h6UJ7YzZS7K6fhiygltdqzkHQ/5+4yiuUkDe4
+hOZlH8MCfXQy5jVZDTk24yNchpdfie5Bswn4SmQVQh3QyzOLxizoh0rLCf2PHueu
+dNVNhfiiJNJ5kd8MIuVG7CPK68dP0QrVR+DihROuJgvGB3ClKttLrgle19t4PFRR
+2wW6hJT9aXEjzLNyN1QFZKoShuiGX4xwjZh7VyKkV64p8hjojhcLk6dQkel+Jw4y
+OP26XbVfM8/6KG8f6WAZ8P0qJwHlhmi0EvRTnEpAM8WuenOeZH6ERZ9uZbRGh6xx
+LKQu2Aw2+bOEZ2vUtz0dBhX8
+-----END CERTIFICATE-----
diff --git a/test/certs/nccaothername-key.pem b/test/certs/nccaothername-key.pem
new file mode 100644
index 000000000000..d3e300ac2f4e
--- /dev/null
+++ b/test/certs/nccaothername-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDdA8fnovAoLUSp
+w3GIi8F+L6wOPGrf6P8319uF/1mWTNaPR1CqNRUATb4REibvoKj8biHj65Pvy9uV
+3UasAipPMJFl9FyM9fKuaKzh1FBQFjSt4NBQ4+jfB3fLqzSGwyeOBQsfv9J/D6Yo
+bfxGDd2lTluXp6m4GfhBLftwFBuom4nkXRq4vYOKISCMetDJlRy27k/03FWcWnls
+k5eolprGKLFMqpYU7btbhrW1bZAgIQWJaFb8+CeXgJlbvybiW7DcW8VXjvUPCo+p
+2+Izz3Rr2dyT3Gm21q8+S8Gnq3gX+SD61xFXUE5WAYCNKU89ghAx0iK3e480VF//
+RAtoDJOlAgMBAAECggEAMFSJlCyEFlER3Qq9asXe9eRgXEuXdmfZ2aEVIuf8M/sR
+B0tpxxKtCUA24j5FL+0CzxKZTCFBnDRIzCyTbf1aOa9t+CzXyUZmP3/p4EdgmabF
+dcl93FZ+X7kfF/VUGu0Vmv+c12BH3Fu0cs5cVohlMecg7diu6zCYok43F+L5ymRy
+2mTcKkGc0ShWizj8Z9R3WJGssZOlxbxa/Zr4rZwRC24UVhfN8AfGWYx/StyQPQIw
+gtbbtOmwbyredQmY4jwNqgrnfZS9bkWwJbRuCmD5l7lxubBgcHQpoM+DQVeOLZIq
+uksFXeNfal9G5Bo747MMzpD7dJMCGmX+gbMY5oZF+QKBgQDs2MbY4nbxi+fV+KuV
+zUvis8m8Lpzf3T6NLkgSkUPRN9tGr95iLIrB/bRPJg5Ne02q/cT7d86B9rpE42w7
+eeIF9fANezX2AF8LUqNZhIR23J3tfB/eqGlJRZeMNia+lD09a7SWGwrS7sufY1I+
+JQGcHx77ntt+eQT1MUJ1skF06QKBgQDu4z+TW4QIA5ItxIReVdcfh5e3xLkzDEVP
+3KNo9tpXxvPwqapdeBh6c9z4Lqe3MKr5UPlDvVW+o40t6OjKxDCXczB8+JAM0OyX
+8V+K3zXXUxRgieSd3oMncTylSWIvouPP3aW37B67TKdRlRHgaBrpJT2wdk3kYR4t
+62J1eDdjXQKBgQDMsY0pZI/nskJrar7geM1c4IU5Xg+2aj/lRFqFsYYrC1s3fEd2
+EYjan6l1vi4eSLKXVTspGiIfsFzLrMGdpXjyLduJyzKXqTp7TrBebWkOUR0sYloo
+1OQprzuKskJJ81P6AVvRXw27vyW8Wtp5WwJJK5xbWq/YXj8qqagGkEiCAQKBgQCc
+RK3XAFurPmLGa7JHX5Hc/z8BKMAZo6JHrsZ6qFiGaRA0U1it0hz5JYfcFfECheSi
+ORUF+fn4PlbhPGXkFljPCbwjVBovOBA9CNl+J6u50pAW4r1ZhDB5gbqxSQLgtIaf
++JcqbFxiG6+sT36lNJS+BO2I3KrxhZJPaZY7z8szxQKBgQDRy70XzwOk8jXayiF2
+ej2IN7Ow9cgSE4tLEwR/vCjxvOlWhA3jC3wxoggshGJkpbP3DqLkQtwQm0h1lM8J
+QNtFwKzjtpf//bTlfFq08/YxWimTPMqzcV2PgRacB8P3yf1r8T7M4fA5TORCDWpW
+5FtOCFEmwQHTR8lu4c63qfxkEQ==
+-----END PRIVATE KEY-----
diff --git a/test/certs/nroot+anyEKU.pem b/test/certs/nroot+anyEKU.pem
new file mode 100644
index 000000000000..395b8446a37d
--- /dev/null
+++ b/test/certs/nroot+anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDFzCCAf+gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo3YwdDAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwCQYDVR0TBAIwADAT
+BgNVHSUEDDAKBggrBgEFBQcDATASBgNVHREECzAJggdSb290IENBMA0GCSqGSIb3
+DQEBCwUAA4IBAQCJLiUshLaVQxjnoxN4MISOIM7vy9jIfCEabtyOumjVXasvLqKS
+fF0nLoRb/6iCd0VnJlliTKky/p8aaG4+VooQPTxwpat6zir4G1N2dWwYbMTDpVfh
+836wHNPmmFvCUSKZcoLAEmMVRrNU9gBXkS64FfoP0FCoWeHb9NSlQY5YFb0BO8C/
+6AZlMGCt1HDPEK+gE/Uwayk7Yo3npSb+ZgnwZpA0ip0lPJ0Uf5cZ5Q/RBP0H+nxi
+KLKzBpY01IJ67/7R1Ioc27JiUpBGmKQzjg48POSMOECFolv0dH33O6aXJaXtw9Kq
+m8y3rPQqNPehWzbRq75txC/sayQZXNUrteVzMAgwBgYEVR0lAA==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/nroot+serverAuth.pem b/test/certs/nroot+serverAuth.pem
new file mode 100644
index 000000000000..7b84f262cfa3
--- /dev/null
+++ b/test/certs/nroot+serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDFzCCAf+gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo3YwdDAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwCQYDVR0TBAIwADAT
+BgNVHSUEDDAKBggrBgEFBQcDATASBgNVHREECzAJggdSb290IENBMA0GCSqGSIb3
+DQEBCwUAA4IBAQCJLiUshLaVQxjnoxN4MISOIM7vy9jIfCEabtyOumjVXasvLqKS
+fF0nLoRb/6iCd0VnJlliTKky/p8aaG4+VooQPTxwpat6zir4G1N2dWwYbMTDpVfh
+836wHNPmmFvCUSKZcoLAEmMVRrNU9gBXkS64FfoP0FCoWeHb9NSlQY5YFb0BO8C/
+6AZlMGCt1HDPEK+gE/Uwayk7Yo3npSb+ZgnwZpA0ip0lPJ0Uf5cZ5Q/RBP0H+nxi
+KLKzBpY01IJ67/7R1Ioc27JiUpBGmKQzjg48POSMOECFolv0dH33O6aXJaXtw9Kq
+m8y3rPQqNPehWzbRq75txC/sayQZXNUrteVzMAwwCgYIKwYBBQUHAwE=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/p256-server-cert.pem b/test/certs/p256-server-cert.pem
new file mode 100644
index 000000000000..f144e11dcd10
--- /dev/null
+++ b/test/certs/p256-server-cert.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIByjCCAU+gAwIBAgIBAjAKBggqhkjOPQQDAjAbMRkwFwYDVQQDDBBFQ0RTQSBQ
+LTM4NCByb290MCAXDTE3MDIxODE4NTA1NloYDzIxMTcwMjE5MTg1MDU2WjAcMRow
+GAYDVQQDDBFQLTI1NiBTZXJ2ZXIgQ2VydDBZMBMGByqGSM49AgEGCCqGSM49AwEH
+A0IABBQtneXPCnPgmqOCJdOnixLtRxYCYJoKLMTKpVRHg1toZa5hst1EmlfcIJ2q
+0mwDj2N7MZxHCQKrY7h2ussdSuujgYAwfjAdBgNVHQ4EFgQUXkNyi959A0GuCidm
+beH0E4OStLYwHwYDVR0jBBgwFoAUJtCPHXtf3B5/QYB9Y8ocdYHWhWkwCQYDVR0T
+BAIwADATBgNVHSUEDDAKBggrBgEFBQcDATAcBgNVHREEFTATghFQLTI1NiBTZXJ2
+ZXIgQ2VydDAKBggqhkjOPQQDAgNpADBmAjEA5Bli9loRg3x9jCo/Xyu6pxN9xmaA
+GzGrJ+sVfAoKCDPjfvXR3VA+auFR7c65R3lvAjEAuNC6+SIYdp0kOXB9W0s5RcMl
+e9e1+PVLCMU9PG1+lfy8cJV4iDymomx/+jX2f0R0
+-----END CERTIFICATE-----
diff --git a/test/certs/p256-server-key.pem b/test/certs/p256-server-key.pem
new file mode 100644
index 000000000000..b2ebd6957db8
--- /dev/null
+++ b/test/certs/p256-server-key.pem
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgJ51ke8aiotgRnxNb
+le4OYpOA/E5Cuj0+yU8lbeg0GgOhRANCAAQULZ3lzwpz4JqjgiXTp4sS7UcWAmCa
+CizEyqVUR4NbaGWuYbLdRJpX3CCdqtJsA49jezGcRwkCq2O4drrLHUrr
+-----END PRIVATE KEY-----
diff --git a/test/certs/p384-root-key.pem b/test/certs/p384-root-key.pem
new file mode 100644
index 000000000000..6556c56e1b2f
--- /dev/null
+++ b/test/certs/p384-root-key.pem
@@ -0,0 +1,6 @@
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAp+VkMpwM7uCJWk+fo
+bSxLtiF2nd/4YDJy2IjO+IjzoEDGJB4Ekr1AGxYmiS57IVWhZANiAAS/4vfY5YBd
+dvcJs81VXvm3gqwIvzycNtT48ZQ9bqGJBERMAXkmOgzPVz4cSIr33KfIKGhfgjVK
+xSAorUKfc0cWf0dZZh3UxpXeN1x3dxtK3hED1y8pemwuz3tYuuOBbtw=
+-----END PRIVATE KEY-----
diff --git a/test/certs/p384-root.pem b/test/certs/p384-root.pem
new file mode 100644
index 000000000000..df5057f94a3d
--- /dev/null
+++ b/test/certs/p384-root.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBtzCCAT2gAwIBAgIBATAKBggqhkjOPQQDAjAbMRkwFwYDVQQDDBBFQ0RTQSBQ
+LTM4NCByb290MCAXDTE3MDIxODEzNDUzN1oYDzIxMTcwMjE5MTM0NTM3WjAbMRkw
+FwYDVQQDDBBFQ0RTQSBQLTM4NCByb290MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE
+v+L32OWAXXb3CbPNVV75t4KsCL88nDbU+PGUPW6hiQRETAF5JjoMz1c+HEiK99yn
+yChoX4I1SsUgKK1Cn3NHFn9HWWYd1MaV3jdcd3cbSt4RA9cvKXpsLs97WLrjgW7c
+o1MwUTAdBgNVHQ4EFgQUJtCPHXtf3B5/QYB9Y8ocdYHWhWkwHwYDVR0jBBgwFoAU
+JtCPHXtf3B5/QYB9Y8ocdYHWhWkwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQD
+AgNoADBlAjEA9ZGtIjZhUPqqyjB2YdfXh7K+AUIXdxmtHmioVNbksIApEzbZ25rI
+o1WkqRowwbkNAjAw0TzgEv0q4MtQN0G5Lh/z0aVdaFICpXI6UhDXZyiZeRjt2Lbi
+3Da3rKRZdHHswY4=
+-----END CERTIFICATE-----
diff --git a/test/certs/p384-server-cert.pem b/test/certs/p384-server-cert.pem
new file mode 100644
index 000000000000..c6435122a13d
--- /dev/null
+++ b/test/certs/p384-server-cert.pem
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB5jCCAWygAwIBAgIBAjAKBggqhkjOPQQDAjAbMRkwFwYDVQQDDBBFQ0RTQSBQ
+LTM4NCByb290MCAXDTE3MDIxODE4NDk1NFoYDzIxMTcwMjE5MTg0OTU0WjAcMRow
+GAYDVQQDDBFQLTM4NCBTZXJ2ZXIgQ2VydDB2MBAGByqGSM49AgEGBSuBBAAiA2IA
+BNgfdX1zL/wbUQekHkIYpI9KKBDH5oxUbjeHqc0EkEDOLHs7zb3f7UdsqaZ/4Ukn
+Wqm8Kmcz5TOYpvg7gn+jPmtVpI2BCfxqYD2WceePkllWENoJFtt/VwOPMGMymeUH
+3KOBgDB+MB0GA1UdDgQWBBSY+ffqAKeBpiQl4b6hjUOXuBbIljAfBgNVHSMEGDAW
+gBQm0I8de1/cHn9BgH1jyhx1gdaFaTAJBgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMBwGA1UdEQQVMBOCEVAtMzg0IFNlcnZlciBDZXJ0MAoGCCqGSM49BAMC
+A2gAMGUCMQDD1uzmDMxAmkyokImzX4hW6f2Hxt/iZJhT6C15zCjYfoWcBdP/EiF5
+m2FMPUvxq+0CMAmKOndcfOwQ7OoaEUySx2q10iXgrkE42HsTvFER8FUN7repOUnD
+JhC9UKJW7I5A9w==
+-----END CERTIFICATE-----
diff --git a/test/certs/p384-server-key.pem b/test/certs/p384-server-key.pem
new file mode 100644
index 000000000000..438e8f47f925
--- /dev/null
+++ b/test/certs/p384-server-key.pem
@@ -0,0 +1,6 @@
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBg3D9RcSwjYqyeLmW+
+nw3mGtBTeNFH2heMO4uOl3EAzJAB8Q+1DjD9Prlrsc+JX7yhZANiAATYH3V9cy/8
+G1EHpB5CGKSPSigQx+aMVG43h6nNBJBAzix7O8293+1HbKmmf+FJJ1qpvCpnM+Uz
+mKb4O4J/oz5rVaSNgQn8amA9lnHnj5JZVhDaCRbbf1cDjzBjMpnlB9w=
+-----END PRIVATE KEY-----
diff --git a/test/certs/pathlen.pem b/test/certs/pathlen.pem
new file mode 100644
index 000000000000..c0ef75e2824a
--- /dev/null
+++ b/test/certs/pathlen.pem
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDjTCCAnWgAwIBAgIBGzANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJVUzEf
+MB0GA1UEChMWVGVzdCBDZXJ0aWZpY2F0ZXMgMjAxMTEVMBMGA1UEAxMMVHJ1c3Qg
+QW5jaG9yMB4XDTEwMDEwMTA4MzAwMFoXDTMwMTIzMTA4MzAwMFowTjELMAkGA1UE
+BhMCVVMxHzAdBgNVBAoTFlRlc3QgQ2VydGlmaWNhdGVzIDIwMTExHjAcBgNVBAMT
+FXBhdGhMZW5Db25zdHJhaW50NiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMhrG5ilLNK2JnW0V+GiT392lCKM4vUjPjAOxrg0mdIfK2AI1D9pgYUN
+h5jXFarP18NT65fkskd/NPPSbEePcEzi0ZjOBqnaUFS+tA425QiWkqdld/q+r4H/
+1ZF/f6Cz6CrguSUDNPT1a0cmv1t7dlLnae1UTP9HiVBLNCTfabBaTN95vzM3dyVR
+mcGYkT+ahiEgXDLYXuoWjqHjkz5Y8yd3+3TQ2IsyrmSN0NJCj4P/fC5sdpzFRDoB
+FYCXsCL0gXVUsvfzn/ds1BUqxcHw6O4UUadhBj+Khuleq0forX+77bxFhUnZkGo5
+iO+EZhvr6t32d7IG/MKfXt5nb25jypMCAwEAAaN/MH0wHwYDVR0jBBgwFoAU5H1f
+0VyVhggsBa6+dbZlp9ldqGYwHQYDVR0OBBYEFK+8ha7+TK7hjZcjiMilsWALuk7Y
+MA4GA1UdDwEB/wQEAwIBBjAXBgNVHSAEEDAOMAwGCmCGSAFlAwIBMAEwEgYDVR0T
+AQH/BAgwBgEB/wIBBjANBgkqhkiG9w0BAQsFAAOCAQEAMJCr70MBeik9uEqE4f27
+dR2O/kNaoqIOtzn+Y4PIzJGRspeGRjhkl4E+wafiPgHeyYCWIlO/R2E4BmI/ZNeD
+xQCHbIVzPDHeSI7DD6F9N/atZ/b3L3J4VnfU8gFdNq1wsGqf1hxHcvdpLXLTU0LX
+2j+th4jY/ogHv4kz3SHT7un1ktxQk2Rhb1u4PSBbQ6lI9oP4Jnda0jtakb1ZqhdZ
+8N/sJvsfEQuqxss/jp+j70dmIGH/bDJfxU1oG0xdyi1xP2qjqdrWHI/mEVlygfXi
+oxJ8JTfEcEHVsTffYR9fDUn0NylqCLdqFaDwLKqWl+C2inODNMpNusqleDAViw6B
+CA==
+-----END CERTIFICATE-----
diff --git a/test/certs/pc1-cert.pem b/test/certs/pc1-cert.pem
new file mode 100644
index 000000000000..e0a373a73164
--- /dev/null
+++ b/test/certs/pc1-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5zZXJ2
+ZXIuZXhhbXBsZTAgFw0xNjA2MTgxOTU0MzZaGA8yMTE2MDYxOTE5NTQzNlowKzEX
+MBUGA1UEAwwOc2VydmVyLmV4YW1wbGUxEDAOBgNVBAMMB3Byb3h5IDEwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCeF5hc7UW6KtJ/26YrZTeG5Pu7FrPd
+9W58Wq/xpll8sg2priHgomhwFG+EtBqxP/qfGQADwCBpynm+bxngsRX94+puCbdp
+DCRV19vZNfrrdH57PbUmujQfCAPuWnGye7TWbtilqkgJf88yfI+0Y2qmGWpvl3Pc
+ijZVbNxEan1FKkB5v1E25+UCDU4Y4nfyJ1jtqSA6RJeixCUE363iLanJL4Ph781u
+/GUhICeqj6oKdPzEmnzT9Udt8APpS2pfIjhfcw4w8A+pFXf0HsezGdcodiZqzs39
+mdmS8cmMk77xJ8BIOlT484Jg/bB9PfBfEB2LXO3jz/HyrRWQVHgyF2ONAgMBAAGj
+gYowgYcwHQYDVR0OBBYEFNOib4aG0AVcbb7pbh224iVD3Jx8MDUGA1UdIwQuMCyA
+FOeb4iqtimw6y3ZR5Y4HmCKX4XOioRGkDzANMQswCQYDVQQDDAJDQYIBAjAJBgNV
+HRMEAjAAMCQGCCsGAQUFBwEOAQH/BBUwEwIBATAOBggrBgEFBQcVAAQCQUIwDQYJ
+KoZIhvcNAQELBQADggEBAGCPfyKX74TwnX7sakAKq+IY5qbFnUAupiACsoqNyf2C
+J6/wsAHz51SA69UcOmQsLCtBzvr11Mh9tFG6uqAquMifP6Cx3274sHCglb5BYFQX
+eOwSc30FyaqUZzCWKHRjuzdBUUplS2NVl778xLEbWySLkpHehp7Hpj6mBT9lLNyw
+6L2ZXJcBmxCSB6+aKJ0v4h3wrTNkbYh1Pz9sQqKMgnK+dC5xNmQWWzaVnAPERmbT
+/11HRF2cGE6OKVmPrksI2NVOe0S0BmL2UwIeO1mIoQikJlOlCsa6QHS7KNQKGtrV
+0Z/z5ahapEq7+wlyrw+lsZf+rBKFzwbowl1K2YJva9Q=
+-----END CERTIFICATE-----
diff --git a/test/certs/pc1-key.pem b/test/certs/pc1-key.pem
new file mode 100644
index 000000000000..d879dbc09cbf
--- /dev/null
+++ b/test/certs/pc1-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCeF5hc7UW6KtJ/
+26YrZTeG5Pu7FrPd9W58Wq/xpll8sg2priHgomhwFG+EtBqxP/qfGQADwCBpynm+
+bxngsRX94+puCbdpDCRV19vZNfrrdH57PbUmujQfCAPuWnGye7TWbtilqkgJf88y
+fI+0Y2qmGWpvl3PcijZVbNxEan1FKkB5v1E25+UCDU4Y4nfyJ1jtqSA6RJeixCUE
+363iLanJL4Ph781u/GUhICeqj6oKdPzEmnzT9Udt8APpS2pfIjhfcw4w8A+pFXf0
+HsezGdcodiZqzs39mdmS8cmMk77xJ8BIOlT484Jg/bB9PfBfEB2LXO3jz/HyrRWQ
+VHgyF2ONAgMBAAECggEBAJtfoTUjVPYlBAD5RRU9QxdmkSlMpLYucsnw7x7WWPi+
+ncL4Cv+VXoNY8klAIUO3F3+puGP3PWP7xS8uTgaQxIZkq5A+KG4rqsJbhgyyistC
+ENTazuEi+/rLi+GELl42SoK9KluXQXlkjaSW2z10v+pC7GKEPTCw/blzZgAvkLKZ
+ykQgEEyKf/kNR4+exiJqdBi8gp0cB1+WwBYqYitNKahhf9sFjcLWhj8umYN/+Hb4
+6hH+8JMaHm0G3DvBUIGTkuUQVZB+BkOG7DRivgwNCFlUqvA100JGhoVnBoqj2pan
+eD7TtJfIW7UMoXFr0qCMMGvUXnhJb2v01oxpQTfBLEECgYEA0Ys2RjxUAQmh8j90
+jRV2dI/zL5t1NXxfSTn7JmLp2r2SEWfxiXwCs2bly6J8Xr07bY8DeM6+NfmQ7en1
+pdwxorIROhXRI2X6ZIdIfLwRw+l2TrQVzqgSnUI8GnU3gy57m1QLrcRW9Gxv7r1j
+DjlRMtf828C7oUd+2h0rXY6DeMUCgYEAwSQ20OJy9qDvT569cOMADgvZRKjU0ZLd
+2ER40WakK+6gyvSkUYpdSK5722xMo5CAFmE35xn5r/JX4QnIK3DGnJcm0e68GtyE
+qh5YGXqTlnvgl/+YxBjgrvL97OWKtvof/ZjGqF48sNB4trMz9+80M5oBsr7ZjoPQ
+1B1mFTi9nCkCgYBojLgQxSr4tZCq6MRDXHEU6XnhyAPsItj8FUTdOz8JF8rYim82
+NLy4PF/tgW3iazJKkK+fyC+ZiKKqQjCBh+LwFT6JJ7eInOoY3HLrYX7PrB2OWUYE
+LVHUSuboIJIJDtk3f/Cvy6XDIJOcn7vbrfd4kdGk5332k1CUjTdE38VzLQKBgQCl
+TbRoxVd1xDnuIEOtSWuzmeqDvCghkpyyy6/IMRwTybHu4sF8VHsQiN3S5/cUCsnF
+3cE112J/d2BFZ9TdcTFbtnZwOO7f4prc6wmmDOYiZrXMAeOi+lPbCHfR+IfnoV4d
+81MbqUQyZMrcO7Yf3qgD/iyz6mpTcngaA2tqgFywOQKBgFigb4O1tKsK16HwflMm
+6EQB/3TmdhIsoNEq6M6tOuV3uypze+97olwJMjsgIMxpIqnff55WLBmDjmoMZSoS
+6juHCqmKWKwTZPHPdWNVUgMOGVHFjcCgQjuqWYWupl6un/CefXPleImZ/wrXee5w
+f2DAK68puLIhIySfEIjrYh4P
+-----END PRIVATE KEY-----
diff --git a/test/certs/pc2-cert.pem b/test/certs/pc2-cert.pem
new file mode 100644
index 000000000000..2913b98599fa
--- /dev/null
+++ b/test/certs/pc2-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQDDA5zZXJ2
+ZXIuZXhhbXBsZTEQMA4GA1UEAwwHcHJveHkgMTAgFw0xNjA2MTgxOTU0NDFaGA8y
+MTE2MDYxOTE5NTQ0MVowPTEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGUxEDAOBgNV
+BAMMB3Byb3h5IDExEDAOBgNVBAMMB3Byb3h5IDIwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDgpvzv40QOQxRy6qhowyMfSRwn8TSUX/tt9U92ij/HDurM
+aT+89lLd6oOCohmXomg4t18Fik3yUyoKOi2Jo/ATV5ZYvhKOQzf4d7zTno3SsTSB
+s1i9aNVnwVd9QZA/Y1lHtEUETIr94neET6bvaV9DHrtmVaEC6rXxbLmm6dLEcqEh
++XnjoAi6PL/+U+RSQm6ekLEWwhwePUCr2QvGotjpUzDJngHCtxrVj6ZK8DPlgXpo
+2CWC2l6uwlakxkMQkCQQICywMKsmyMVPWFbalUezRDl7S/J9ybZYK61aq8mrBYzn
+tCaD3HwtjKmkAZ3tKcDfPidqwVtUAioBSzB6ztc/AgMBAAGjgZYwgZMwHQYDVR0O
+BBYEFPg3PONgEnnZVF3tRrg4aY4hBGVhMEEGA1UdIwQ6MDiAFNOib4aG0AVcbb7p
+bh224iVD3Jx8oR2kGzAZMRcwFQYDVQQDDA5zZXJ2ZXIuZXhhbXBsZYIBAjAJBgNV
+HRMEAjAAMCQGCCsGAQUFBwEOAQH/BBUwEwIBADAOBggrBgEFBQcVAAQCQUIwDQYJ
+KoZIhvcNAQELBQADggEBAJvmPj0eIOQEZSFrvbMEz5dp0udK+TIMKBmgPfCVrSPu
+g5wArKY5CqFzrrvXb8FWHuAuP9KsXaqU+oqaTrRlGDs0sl6LWkvamz9FLDbYS2+d
+9cGMdlEmWxPJg9Nkc557ng4b54xncyw+YQ/1vqkTtBX7w5Y4lFTOaZW3uq3iL1NU
+v1TO5fCNksndgw7tdilbps2BLeNcEJ7DZyS7ESPPe7NX78RCKsDLSj7C9bMlKvUc
+swUADTDhNTValfr2RQswlEPIt5qURe2vsvacQ701cPPwT+fgQj1N/XLFsBGTmnOP
+KpT6Adh+uk8xTHv2BUg+XDRAFOhoLMu1hnloiH14FgY=
+-----END CERTIFICATE-----
diff --git a/test/certs/pc2-key.pem b/test/certs/pc2-key.pem
new file mode 100644
index 000000000000..77ab6ff9468e
--- /dev/null
+++ b/test/certs/pc2-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDgpvzv40QOQxRy
+6qhowyMfSRwn8TSUX/tt9U92ij/HDurMaT+89lLd6oOCohmXomg4t18Fik3yUyoK
+Oi2Jo/ATV5ZYvhKOQzf4d7zTno3SsTSBs1i9aNVnwVd9QZA/Y1lHtEUETIr94neE
+T6bvaV9DHrtmVaEC6rXxbLmm6dLEcqEh+XnjoAi6PL/+U+RSQm6ekLEWwhwePUCr
+2QvGotjpUzDJngHCtxrVj6ZK8DPlgXpo2CWC2l6uwlakxkMQkCQQICywMKsmyMVP
+WFbalUezRDl7S/J9ybZYK61aq8mrBYzntCaD3HwtjKmkAZ3tKcDfPidqwVtUAioB
+SzB6ztc/AgMBAAECggEBAKMvCWpjZksJ1O/Inn5CyN9v5uDop+3jbqqn14ne0IcS
+weGrzh2/u9/w+ohIoVhxI02XfZFzrj0Ixe/Z5LwndjtGkzJxFt952k1FBMefU5up
+Ft/j2+DyJpoQajHVDyfMTcz1GHEP/KKA/5n/ld4wZ39E8pFaP/PzdCgjdxPUo0II
+OWvNehyLqiOQseYsnWTYFGgBFX5Dr8/cZH8duaNTkGzr+/4O3KmF04lTYS2SPkQ8
+8ospMX9a9N4+gDXF6KWlIJUEk4Xelv/BT7jygEz0K0bIcRGdmgFe57Rh9qTHxZrl
+YkHh3lHC5XD5sWuOjoEu54jJdL/u1zfaK/jpQXKMjtECgYEA+eCIg1vBPKl53s38
+Ch/nRuwmtu8qJlcN6aYBAdUn/Z95Qy5gKmL0hW7qJ5+kgwLJZEdLQ+xIHBdnWjdP
+7VJ7k6NEsy/EQ2NOYBzxysvnyYSAwY1Wb4StPO9ejqb02LrY6gBNfePE/wpR1EqK
+Suyzocf0x02blO8dQ3JaGn/IKlkCgYEA5ig4jtcKUzP2vRQ8tWaaJvLxP2fEzEgb
+J+r1zLrdMqZvWwjhbdIbQRnhwjpelVKpxGFiOP91bf9+6qiX8q3TOar3tDu2o2Nu
+yFNvExoqxfaD+IHfDo3KjTwohysbBXdZzqeOwL2N7HcQz5E11e0JDgTPLXtWk2UN
+qeYUNHeXq1cCgYAmKXWP4j6D3jo/nePlQ/QVb9GF1MbyLg9w5Kp4ti4yXN2vNfD3
+6D8B9euK+6WrYIyTZRQInphwud5N9+6cByHabW/7kcr+o7b/lMwUtcmDjFoBtW1D
+ANdYXBJr5PG1++tO6ZbsKBIZBWFz86JlSPsyNRCcM60UNOSaPWenbmaKmQKBgQC8
+qEt0CqDUAsxFwMjiiO/i7VEDADQ4nwJjfh1ta97VHcg5ftYKByd//Y8ofl/5VoEC
+EDFLN1syhzOpdfjXW9TAeHwCqM/UrjSo0HtD1Tcqfh8/HHWSoHdfvegapCLKIELl
+OkOxia9EHXUSL51JdbruWtLYHTmiKDtDAO2e9EjGkQKBgHOEZ0u07bCyz+EZHTQb
+sWt1U2LztJ/cNSNqgVc4NTTna0KisjXBTbtIQeArI42GHXNBazE+KbApnHQy8f7M
+DJIl2/70CRTfosDdSE6DnQk672BhJ4fr6Ln/VyvcATlcv34UYiGsDY3LCf0UTdjd
+GsR6pGtD+3qErri9pbdxDvRC
+-----END PRIVATE KEY-----
diff --git a/test/certs/pc5-cert.pem b/test/certs/pc5-cert.pem
new file mode 100644
index 000000000000..8663bdf3697f
--- /dev/null
+++ b/test/certs/pc5-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDeDCCAmCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQDDA5zZXJ2
+ZXIuZXhhbXBsZTEQMA4GA1UEAwwHcHJveHkgMTAgFw0xNjA2MTgxOTU0NTVaGA8y
+MTE2MDYxOTE5NTQ1NVowPTEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGUxEDAOBgNV
+BAMMB3Byb3h5IDExEDAOBgNVBAMMB3Byb3h5IDUwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCvDPn1fctKUE8+aHf036mHkIEsWn0iNFl2K/qAOMqjqOvs
+lj+zxhRqwj29v1Prb4ZYvjRrJ2GQdh7GXju4cP6wQKKHGOurJhYczcfqwAfi+21K
+Bn4gmM3i4GESuIC6GuXWqw24oMZYBi5H3zsBMr2mobSQJV3gN/5jfGIEtZW3GqVW
+iKAutNCbmV76NoRJm0sRzrFwyX1pomHCm9odwJQ0nNvyetMulY9tX9xYn01FLfiz
+JS2UmyOYxkSyKOSsmGJDVK/mZ86xYnQygUy6yIiz2hR2yq5M1oeRYOEONwt9mY/e
+ZVoIbquW28PEDQE6KtK/EYUdWn8482XQdRcdKmSlAgMBAAGjgZIwgY8wHQYDVR0O
+BBYEFEfQwyLv6WIDOf9VQ/ElxxcFKkX5MEEGA1UdIwQ6MDiAFNOib4aG0AVcbb7p
+bh224iVD3Jx8oR2kGzAZMRcwFQYDVQQDDA5zZXJ2ZXIuZXhhbXBsZYIBAjAJBgNV
+HRMEAjAAMCAGCCsGAQUFBwEOAQH/BBEwDwIBADAKBggrBgEFBQcVADANBgkqhkiG
+9w0BAQsFAAOCAQEAl93p1Pcw3hBbTTnm9oa9cOUvPBkUwLJmSJ1Il3HQQuLz5H+H
+OiF3ePaa7wmGmMTwHEYtOvIhGO5c6zilVRint03BaXRizZcqdjDiHUgVcr11pzX5
+F4ihFOF91c6DmUorRrtkjglLb/gAMdUE0eT/wukiMjJWgcw+O2EVxGjpAgRVNw/v
+byYx4TPmvnnigqfMY9lVFKJy0g5Ovw6Nb2ff8ndSEZsCDB8XdNg2u07zYu1dM/vF
+wpjsA/omrfXP3opH1ustvMQm9BPkySLRzNbIYHHRJX3Hkhn+EYzMmxv3cH0EEtn6
+taj7Gfsp7TfLpfSgP/Y88EsKhQAWsdFt2tT3FQ==
+-----END CERTIFICATE-----
diff --git a/test/certs/pc5-key.pem b/test/certs/pc5-key.pem
new file mode 100644
index 000000000000..1ad080553e86
--- /dev/null
+++ b/test/certs/pc5-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvDPn1fctKUE8+
+aHf036mHkIEsWn0iNFl2K/qAOMqjqOvslj+zxhRqwj29v1Prb4ZYvjRrJ2GQdh7G
+Xju4cP6wQKKHGOurJhYczcfqwAfi+21KBn4gmM3i4GESuIC6GuXWqw24oMZYBi5H
+3zsBMr2mobSQJV3gN/5jfGIEtZW3GqVWiKAutNCbmV76NoRJm0sRzrFwyX1pomHC
+m9odwJQ0nNvyetMulY9tX9xYn01FLfizJS2UmyOYxkSyKOSsmGJDVK/mZ86xYnQy
+gUy6yIiz2hR2yq5M1oeRYOEONwt9mY/eZVoIbquW28PEDQE6KtK/EYUdWn8482XQ
+dRcdKmSlAgMBAAECggEBAKqEmXjp8P2S/Z5tZWzD8wB7Y1kxTHPlSsAyVvJQYBTM
+mAT+107nxTu5uyr7FWRiXxxTK/y1f/SZG6FgagxhBbfrPmcbf3ZYw3GLgxLJvOT+
+xpc1e+eE8gnvSKBT2hFv4jQarGMNOijE3JBmg7PHGbcYDivcOnYQFV4T6+dqe0zA
+q2bLi/lko81Plunp7ev3i2ATjNxcYoannaTCq0HFxMLoOgrAoLqJqt8nkqXIY91z
+phx1x13HrHyikhuDBDb15TdJo68rbHngDolHFC7rHW65+vp0emJDtdEkBnQLDa5W
+a3ZeVe/xY0aaMPlcw//ZB8KMUD69VdCuiGXjrrHISAECgYEA2uIh82TIp+xG2Tk/
+2uZS1dOCCEEkkBqqgKwH2m2fctTHGMnKJaxSTCNKPEIpxaTt6EMp3jlviOmdrPtd
+pUS1OqkA99bzT8ZBEd8fg33XGCN5W7wvfo5077onwwJ+ocd//KJqQ2M6MioEp5im
+6Z8cDDdGA6NI3kJ+G3+CwczRTXECgYEAzLwKVkfd7TNJZQ7Z0n2x+O8hPJAaut2/
+qFIeItSBFo+ErQL8NnJPLMxBkWfVmnc4vFKc2bxgjz8S+cJCEucTrOAS7+ikP6KU
+Mo2NjbzA4omceuy3t+3eGJdYE44nBL/V+ZVAt6F0TQ7rayMAurcLJurHMiFYQEfs
+qAlsaYCiAHUCgYAmv7Wm8waaw7dfKUVmqTOs6v6wG2gvoqjgkpPpVVLO72A3wTFq
+LfF7zRuNQ2FFvgboAUveLWjTYhgp0W4onds/gT/MoF7+lmhak5dunc6AVXdciBoY
+W3vUHK6BVWW5minMPax2NZDN5KZiTSHvZd1/RCG+7x8tSbQthgtN58Z94QKBgHbH
+aZ/hFgo1xRESaqFKN2TbJ4dBe6CKYlU/Pyip7TKvlSPjJXxZGUI+RpQbj7uMC6iG
+rWVNex/gUhwA7eCVm76iSZpSeGhK5Hvn0AY5ShakC9rtVzEomb/enkTKJi0FNxkT
+1HY0/4pta3u+1P9+jsPHVkXpPpAcqlpbDUCwVky5AoGAJgwr1pxM7RDQon8Mpjxm
+XTJ36Vl+6dq/5yPBcKylQ49e5XrugS2trV1aSZKsiVuLGK9N8ND2N8OazxfpXbee
+q6b8GAqWWz4ewe30FKo0ipL1SfsJUTv8lPKIGo8oNk4vsUvv/bLJHpr6+g2d8lCw
+A0i6wzzrXUiXlynYm+VCKhs=
+-----END PRIVATE KEY-----
diff --git a/test/certs/pkitsta.pem b/test/certs/pkitsta.pem
new file mode 100644
index 000000000000..4cb5ec5b957d
--- /dev/null
+++ b/test/certs/pkitsta.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAi+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJVUzEf
+MB0GA1UEChMWVGVzdCBDZXJ0aWZpY2F0ZXMgMjAxMTEVMBMGA1UEAxMMVHJ1c3Qg
+QW5jaG9yMB4XDTEwMDEwMTA4MzAwMFoXDTMwMTIzMTA4MzAwMFowRTELMAkGA1UE
+BhMCVVMxHzAdBgNVBAoTFlRlc3QgQ2VydGlmaWNhdGVzIDIwMTExFTATBgNVBAMT
+DFRydXN0IEFuY2hvcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALmZ
+UYkRR+DNRbmEJ4ITAhbNRDmqrNsJw97iLE7bpFeflDUoNcJrZPZbC208bG+g5M0A
+TzV0vOqg88Ds1/FjFDK1oPItqsiDImJIq0xb/et5w72WNPxHVrcsr7Ap6DHfdwLp
+NMncqtzX92hU/iGVHLE/w/OCWwAIIbTHaxdrGMUG7DkJJ6iI7mzqpcyPvyAAo9O3
+SHjJr+uw5vSrHRretnV2un0bohvGslN64MY/UIiRnPFwd2gD76byDzoM1ioyLRCl
+lfBJ5sRDz9xrUHNigTAUdlblb6yrnNtNJmkrROYvkh6sLETUh9EYh0Ar+94fZVXf
+GVi57Sw7x1jyANTlA40CAwEAAaNCMEAwHQYDVR0OBBYEFOR9X9FclYYILAWuvnW2
+ZafZXahmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
+DQEBCwUAA4IBAQCYoa9uR55KJTkpwyPihIgXHq7/Z8dx3qZlCJQwE5qQBZXIsf5e
+C8Va/QjnTHOC4Gt4MwpnqqmoDqyqSW8pBVQgAUFAXqO91nLCQb4+/yfjiiNjzprp
+xQlcqIZYjJSVtckH1IDWFLFeuGW+OgPPEFgN4hjU5YFIsE2r1i4+ixkeuorxxsK1
+D/jYbVwQMXLqn1pjJttOPJwuA8+ho1f2c8FrKlqjHgOwxuHhsiGN6MKgs1baalpR
+/lnNFCIpq+/+3cnhufDjvxMy5lg+cwgMCiGzCxn4n4dBMw41C+4KhNF7ZtKuKSZ1
+eczztXD9NUkGUGw3LzpLDJazz3JhlZ/9pXzF
+-----END CERTIFICATE-----
diff --git a/test/certs/root+anyEKU.pem b/test/certs/root+anyEKU.pem
new file mode 100644
index 000000000000..97e07321895d
--- /dev/null
+++ b/test/certs/root+anyEKU.pem
@@ -0,0 +1,18 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo1AwTjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEAyRRJx27WYOogPXZpPfAMt8ptapr/ugLWGLlw
+bzKySoyLpoV2/YNAvTAGB90iFq6x/ujjrK41/ES0p3v38/Qfuxo24gcZgc/oYLV2
+UqR+uGCx68p2OWLYctBsARtYWOEgPhHFb9aVxcOQKyZHtivDX0wLGX+nqZoHX9IY
+mc0sbpRBRMzxRsChbzD5re9kZ5NrgkjA6DJ7jYh2GitOM6oIU3Dd9+pk3bCEkFUg
+Ry9qN/k+AyeqH1Qcb5LU+MTmlw8bmyzmMOBZgdegtO4HshcBMO054KSB3WSfBPDO
+bEhZ0vm/lw63TGi88yIMtlkmcU2g0RKpeQI96G6QeqHyKF3p8DAIMAYGBFUdJQA=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/root+clientAuth.pem b/test/certs/root+clientAuth.pem
new file mode 100644
index 000000000000..8004e63dc7ee
--- /dev/null
+++ b/test/certs/root+clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo1AwTjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEAyRRJx27WYOogPXZpPfAMt8ptapr/ugLWGLlw
+bzKySoyLpoV2/YNAvTAGB90iFq6x/ujjrK41/ES0p3v38/Qfuxo24gcZgc/oYLV2
+UqR+uGCx68p2OWLYctBsARtYWOEgPhHFb9aVxcOQKyZHtivDX0wLGX+nqZoHX9IY
+mc0sbpRBRMzxRsChbzD5re9kZ5NrgkjA6DJ7jYh2GitOM6oIU3Dd9+pk3bCEkFUg
+Ry9qN/k+AyeqH1Qcb5LU+MTmlw8bmyzmMOBZgdegtO4HshcBMO054KSB3WSfBPDO
+bEhZ0vm/lw63TGi88yIMtlkmcU2g0RKpeQI96G6QeqHyKF3p8DAMMAoGCCsGAQUF
+BwMC
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/root+serverAuth.pem b/test/certs/root+serverAuth.pem
new file mode 100644
index 000000000000..966676ddb3dc
--- /dev/null
+++ b/test/certs/root+serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo1AwTjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEAyRRJx27WYOogPXZpPfAMt8ptapr/ugLWGLlw
+bzKySoyLpoV2/YNAvTAGB90iFq6x/ujjrK41/ES0p3v38/Qfuxo24gcZgc/oYLV2
+UqR+uGCx68p2OWLYctBsARtYWOEgPhHFb9aVxcOQKyZHtivDX0wLGX+nqZoHX9IY
+mc0sbpRBRMzxRsChbzD5re9kZ5NrgkjA6DJ7jYh2GitOM6oIU3Dd9+pk3bCEkFUg
+Ry9qN/k+AyeqH1Qcb5LU+MTmlw8bmyzmMOBZgdegtO4HshcBMO054KSB3WSfBPDO
+bEhZ0vm/lw63TGi88yIMtlkmcU2g0RKpeQI96G6QeqHyKF3p8DAMMAoGCCsGAQUF
+BwMB
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/root-anyEKU.pem b/test/certs/root-anyEKU.pem
new file mode 100644
index 000000000000..712b1f572a6c
--- /dev/null
+++ b/test/certs/root-anyEKU.pem
@@ -0,0 +1,18 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo1AwTjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEAyRRJx27WYOogPXZpPfAMt8ptapr/ugLWGLlw
+bzKySoyLpoV2/YNAvTAGB90iFq6x/ujjrK41/ES0p3v38/Qfuxo24gcZgc/oYLV2
+UqR+uGCx68p2OWLYctBsARtYWOEgPhHFb9aVxcOQKyZHtivDX0wLGX+nqZoHX9IY
+mc0sbpRBRMzxRsChbzD5re9kZ5NrgkjA6DJ7jYh2GitOM6oIU3Dd9+pk3bCEkFUg
+Ry9qN/k+AyeqH1Qcb5LU+MTmlw8bmyzmMOBZgdegtO4HshcBMO054KSB3WSfBPDO
+bEhZ0vm/lw63TGi88yIMtlkmcU2g0RKpeQI96G6QeqHyKF3p8DAIoAYGBFUdJQA=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/root-cert-768.pem b/test/certs/root-cert-768.pem
new file mode 100644
index 000000000000..b2f12f6bb7b7
--- /dev/null
+++ b/test/certs/root-cert-768.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBtzCCAUGgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTA1MloYDzIxMjAxMjEzMjAxMDUyWjASMRAwDgYDVQQD
+DAdSb290IENBMHwwDQYJKoZIhvcNAQEBBQADawAwaAJhALntqSk2YVnhNalAikA2
+tuSOvHUKVSJlqjKmzlUPI+gQFyBWxtyQdwepI87tl8EW1in2IiOeN49W+OtVOlBi
+Mxwqi/BcBltTbbSrlRpoSKOH6V7zIXvfsqjwWsDi37V1xQIDAQABo2AwXjAPBgNV
+HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUWPMT967zC8rDNvZo
+4PDnYL7SAtUwHwYDVR0jBBgwFoAUWPMT967zC8rDNvZo4PDnYL7SAtUwDQYJKoZI
+hvcNAQELBQADYQCrTmsHAldrrX2EVpSqpAgrDc/SCO8B3HcuK/VCHqTch+d1eQaa
+Yb4BHrSFInOVOzHpwU2Y62MNJZisbxn9aAa7uI/MLJgRQ8QVG8gxjLtSayPcoO6j
+unRcNIEGydGfQX8=
+-----END CERTIFICATE-----
diff --git a/test/certs/root-cert-md5.pem b/test/certs/root-cert-md5.pem
new file mode 100644
index 000000000000..3c8cd99fd537
--- /dev/null
+++ b/test/certs/root-cert-md5.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDATCCAemgAwIBAgIBATANBgkqhkiG9w0BAQQFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTA1MloYDzIxMjAxMjEzMjAxMDUyWjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2AwXjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB
+BjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3o1IwHwYDVR0jBBgwFoAUjvUl
+rx6ba4Q9fICayVOcTXL3o1IwDQYJKoZIhvcNAQEEBQADggEBAOEN8Mh3mVaEHgNq
+lYpQLHw04QgpAQtsZpBmfHQ1w9XclsZ/49DBx/izo81SesJSybHsQuz9AnmZxtSS
+coD2yiNwl2nVbWfKA5IVAIQNqb6rvxtWjiL1+/trXT+t26Oz+L3tixexJuLbFZpZ
+38pZWSCm2al2hlsmVeLZ+5DVVqO7d6UTg9Aq3T9HrLi8Okki2ufjBdNDiUwiHymI
+ryVb74h6Gc7mkKJoHG8lxF6WyluwoORrhnV3fgIy5/RGjD8pgBWtOoldG0+t4/nY
+PVOb2TMyUNtA1au/1/h7JbSDyyhQZ5rbucCkxZNMcoe3vguI05JL28VhB0aORVGl
+qCKzkdI=
+-----END CERTIFICATE-----
diff --git a/test/certs/root-cert-rsa2.pem b/test/certs/root-cert-rsa2.pem
new file mode 100644
index 000000000000..b817fdf3e5dd
--- /dev/null
+++ b/test/certs/root-cert-rsa2.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBHTAIBgRVCAEBBQADggEPADCCAQoCggEBAOHmAPUGvKBGOHkP
+Px5xGRNtAt8rm3Zr/KywIe3WkQhCO6VjNexSW6CiSsXWAJQDl1o9uWco0n3jIVyk
+7cY8jY6E0Z1Uwz3ZdKKWdmdx+cYaUHez/XjuW+DjjIkjwpoi7D7UN54HzcArVREX
+OjRCHGkNOhiw7RWUXsb9nofGHOeUGpLAXwXBc0PlA94JkckkztiOi34u4DFI0YYq
+alUmeugLNk6XseCkydpcaUsDgAhWg6Mfsiq4wUz+xbFN1MABqu2+ziW97mmt9gfN
+biuhiVT1aOuYCe3JYGbLM2JKA7Bo1g6rX8E1VX79Ru6669y2oqPthX9337VoIkN+
+ZiQjr8UCAwEAAaNQME4wHQYDVR0OBBYEFI71Ja8em2uEPXyAmslTnE1y96NSMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBAJ0OIdog3uQ1pmsjv1Qtf1w4If1geOn5uK0EOj2wYBHt
+NxlFn7l8d9+51QMZFO+RlQJ0s3Webyo1ReuaL2dMn2LGJhWMoSBAwrMALAENU3lv
+8jioRbfO2OamsdpJpKxQUyUJYudNe+BoKNX/ry3rxezmsFsRr9nDMiJZpmBCXiMm
+mFFJOJkG0CheexBbMkua4kyStIOwO4rb5bSHszVso/9ucdGHBSC7oRcJXoWSDjBx
+PdQPPBK5g4yqL8Lz26ehgsmhRKL9k32eVyjDKcIzgpmgcPTfTqNbd1KHQJKx4ssb
+7nEpGKHalSo5Oq5L9s9qYrUv37kwBY4OpJFtmGaodoI=
+-----END CERTIFICATE-----
diff --git a/test/certs/root-cert.pem b/test/certs/root-cert.pem
new file mode 100644
index 000000000000..8c39e1197e96
--- /dev/null
+++ b/test/certs/root-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDATCCAemgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMDk0OVoYDzIxMjAxMjEzMjAwOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2AwXjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB
+BjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3o1IwHwYDVR0jBBgwFoAUjvUl
+rx6ba4Q9fICayVOcTXL3o1IwDQYJKoZIhvcNAQELBQADggEBAL2sqYB5P22c068E
+UNoMAfDgGxnuZ48ddWSWK/OWiS5U5VI7R/c8vjOCHU1OI/eQfhOenXxnHNF2QBuu
+bjdg5ImPsvgQNFs6ZUgenQh+E4JDkTpn7bKCgtK7qlAPUXZRZI6uAaH5zKu3yFPU
+2kow3LFCwYutrSfVg6JYeX+cuYsLHFzNzOhqh88Mu9yJ7pPJ8faeHFglHa51eoaw
+vurAVknk7tzUxLZN0PxD9nrduVwtiluFbCPz0EtP5Dt1KylGdPrKvCJNkFkRJX+S
+0t9VNIhyqLmslP5uSFtuTt8toXkizaYlxIVHckkvpuKZB8m7l8C/lom9sqagjZ1J
+If+teEc=
+-----END CERTIFICATE-----
diff --git a/test/certs/root-cert2.pem b/test/certs/root-cert2.pem
new file mode 100644
index 000000000000..65fe25071dfe
--- /dev/null
+++ b/test/certs/root-cert2.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDATCCAemgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTAzMFoYDzIxMjAxMjEzMjAxMDMwWjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyB6dJAD5
+wbStQf4HE0EhldtDShNVQ/jhDu6s2Ka30FdP4ml1+c2Py7ODUSjSCegXaBIOXCA+
+R0zaBAJ3ZeqXx3UrE9PiXaHRGZcoPtX4mK9IOHhIdxwPUa6ceSOJn4cHY+p0cFLp
+/5bnUErp4IqbL1bMd4v8fFxJ0ZDGJahfLiurnYUyalaNCHK+hK2+RaeRgPlsXfiU
+/vwhhjFhdhixbPm8l+S+2xNySV1JAAzrUvEDdNZ0iBvuVcS2mlhSKTht5Zeg+0C6
+7kYYqxM9CVZCwcV/aSUImwjeFsNMJsl/nFyEacu6vXz0rjvLwPzTAeVYZy592Gwv
+akWOtiDdap7WJQIDAQABo2AwXjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB
+BjAdBgNVHQ4EFgQUnM5mQjCrHAgmX3MZbd8Pp65YUh4wHwYDVR0jBBgwFoAUnM5m
+QjCrHAgmX3MZbd8Pp65YUh4wDQYJKoZIhvcNAQELBQADggEBAAjXsnCkJkm9r7F2
+pzzsa5UO3aLb4yBMeoi4ky7twg4nS0s9Dol/74TBPwBeiwsuNI7QxX1F5WdshBBX
+OgvviFDGa0tgTI9ehhR4YICrSIbpAe4pyo20YZbgX7msjS6eaebh+Xcbbe5rSNh+
+UAboVaa1VoER9/qQf2eA/qxZKzBV2wQ2/0LnbcZe2I4YEJschZD3/pGQHsRTNy15
+l+QlKZNhMCwgj2La+V3T9+Oo1/PQ5Vmz3oM6efAOaziZSIZ9/0F09vxT/DjJxMqf
+Y/jZkfB8+3DRBA8U4/rDqJF6gj90vrugxg1Pr3abAp7/7WUv/oh1Qo/UXCbVK7Mj
+Y9vRIwg=
+-----END CERTIFICATE-----
diff --git a/test/certs/root-clientAuth.pem b/test/certs/root-clientAuth.pem
new file mode 100644
index 000000000000..8d82866a4be7
--- /dev/null
+++ b/test/certs/root-clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo1AwTjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEAyRRJx27WYOogPXZpPfAMt8ptapr/ugLWGLlw
+bzKySoyLpoV2/YNAvTAGB90iFq6x/ujjrK41/ES0p3v38/Qfuxo24gcZgc/oYLV2
+UqR+uGCx68p2OWLYctBsARtYWOEgPhHFb9aVxcOQKyZHtivDX0wLGX+nqZoHX9IY
+mc0sbpRBRMzxRsChbzD5re9kZ5NrgkjA6DJ7jYh2GitOM6oIU3Dd9+pk3bCEkFUg
+Ry9qN/k+AyeqH1Qcb5LU+MTmlw8bmyzmMOBZgdegtO4HshcBMO054KSB3WSfBPDO
+bEhZ0vm/lw63TGi88yIMtlkmcU2g0RKpeQI96G6QeqHyKF3p8DAMoAoGCCsGAQUF
+BwMC
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/root-cross-cert.pem b/test/certs/root-cross-cert.pem
new file mode 100644
index 000000000000..1339c328733e
--- /dev/null
+++ b/test/certs/root-cross-cert.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC9zCCAd+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApDcm9z
+cyBSb290MCAXDTIxMDgzMDE4MzYzOFoYDzIxMjEwODMxMTgzNjM4WjASMRAwDgYD
+VQQDDAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA
+9Qa8oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25
+ZyjSfeMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3
+ngfNwCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6L
+fi7gMUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7O
+Jb3uaa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2F
+f3fftWgiQ35mJCOvxQIDAQABo1MwUTAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOc
+TXL3o1IwHwYDVR0jBBgwFoAUL16/ihJvr2w9I5k63jjZ13SPW20wDwYDVR0TAQH/
+BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAHi+qdZF/jJrR/F3L60JVLOOUhTpi
+LxFFBksZPVaiVf+6R8pSMy0WtDEkzGT430ji6V4i8O/70HXIG9n9pCye8sLsOl6D
+exXj/MkwwSd3J0Y58zd8ZwMrK9m/jyFrk9TlWokfIFL/eC8VFsu7qmSSRLIjMuxc
+YPPisgR5+WPcus7Jf8auqcYw8eW0GPc1ugJobwucs5e/TinksMfwQrzEydmOPoWI
+Pfur7MjPr5IQXROtQv+CihMigPIHvi73YzSe5zdPCw8JcuZ5vBi2pwquvzvGLtMM
+Btln/SwonyQMks5WV4dOk6NOB73mCMywCir4ybp9ElJMaUGEF9nLO+h8Fg==
+-----END CERTIFICATE-----
diff --git a/test/certs/root-ed25519.pem b/test/certs/root-ed25519.pem
new file mode 100644
index 000000000000..44077801ed3d
--- /dev/null
+++ b/test/certs/root-ed25519.pem
@@ -0,0 +1,40 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 84:f1:08:3d:1c:e3:2d:95
+ Signature Algorithm: ED25519
+ Issuer: CN = IETF Test Demo
+ Validity
+ Not Before: Apr 19 21:36:39 2017 GMT
+ Not After : Nov 11 15:37:05 2122 GMT
+ Subject: CN = IETF Test Demo
+ Subject Public Key Info:
+ Public Key Algorithm: ED25519
+ ED25519 Public-Key:
+ pub:
+ 19:bf:44:09:69:84:cd:fe:85:41:ba:c1:67:dc:3b:
+ 96:c8:50:86:aa:30:b6:b6:cb:0c:5c:38:ad:70:31:
+ 66:e1
+ X509v3 extensions:
+ X509v3 Subject Key Identifier:
+ A2:8C:C1:F8:6E:59:60:D3:E0:3A:E7:5C:96:2C:97:A8:D4:48:29:3C
+ X509v3 Authority Key Identifier:
+ keyid:A2:8C:C1:F8:6E:59:60:D3:E0:3A:E7:5C:96:2C:97:A8:D4:48:29:3C
+
+ X509v3 Basic Constraints:
+ CA:TRUE
+ Signature Algorithm: ED25519
+ 08:f9:fc:49:37:0c:03:64:ed:90:70:89:eb:f1:69:ca:75:3b:
+ 71:15:8f:eb:80:45:00:db:88:9b:66:46:9c:a4:e1:50:c5:59:
+ 43:98:66:37:6d:b7:59:51:5d:b4:9d:1d:89:25:b4:f6:87:43:
+ b7:d3:3b:85:b9:8e:e1:a8:46:04
+-----BEGIN CERTIFICATE-----
+MIIBOjCB7aADAgECAgkAhPEIPRzjLZUwBQYDK2VwMBkxFzAVBgNVBAMMDklFVEYg
+VGVzdCBEZW1vMCAXDTE3MDQxOTIxMzYzOVoYDzIxMjIxMTExMTUzNzA1WjAZMRcw
+FQYDVQQDDA5JRVRGIFRlc3QgRGVtbzAqMAUGAytlcAMhABm/RAlphM3+hUG6wWfc
+O5bIUIaqMLa2ywxcOK1wMWbho1AwTjAdBgNVHQ4EFgQUoozB+G5ZYNPgOudcliyX
+qNRIKTwwHwYDVR0jBBgwFoAUoozB+G5ZYNPgOudcliyXqNRIKTwwDAYDVR0TBAUw
+AwEB/zAFBgMrZXADQQAI+fxJNwwDZO2QcInr8WnKdTtxFY/rgEUA24ibZkacpOFQ
+xVlDmGY3bbdZUV20nR2JJbT2h0O30zuFuY7hqEYE
+-----END CERTIFICATE-----
diff --git a/test/certs/root-ed25519.privkey.pem b/test/certs/root-ed25519.privkey.pem
new file mode 100644
index 000000000000..e447080ae285
--- /dev/null
+++ b/test/certs/root-ed25519.privkey.pem
@@ -0,0 +1,3 @@
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC
+-----END PRIVATE KEY-----
diff --git a/test/certs/root-ed25519.pubkey.pem b/test/certs/root-ed25519.pubkey.pem
new file mode 100644
index 000000000000..41b0218e948a
--- /dev/null
+++ b/test/certs/root-ed25519.pubkey.pem
@@ -0,0 +1,3 @@
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=
+-----END PUBLIC KEY-----
diff --git a/test/certs/root-ed448-cert.pem b/test/certs/root-ed448-cert.pem
new file mode 100644
index 000000000000..c20f57eafcef
--- /dev/null
+++ b/test/certs/root-ed448-cert.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBhjCCAQagAwIBAgIBATAFBgMrZXEwFTETMBEGA1UEAwwKUm9vdCBFZDQ0ODAg
+Fw0yMTAxMTkxMTQ2MDZaGA8yMTIxMDEyMDExNDYwNlowFTETMBEGA1UEAwwKUm9v
+dCBFZDQ0ODBDMAUGAytlcQM6AG24bsDQP63ZYHS0skyelmglTTtYM3HCoiluqQgA
+zDHDAQjYkKlkreBCGx6ag3PnlqIimxure7Y1AKNgMF4wDwYDVR0TAQH/BAUwAwEB
+/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFFYNmkPsoVUYTrltZdfY7YMX04I/MB8G
+A1UdIwQYMBaAFFYNmkPsoVUYTrltZdfY7YMX04I/MAUGAytlcQNzAHr4TSwe5rUy
+rAkWPJ/O88P52nIjjUy2KgJjG8KTYZsJxWZmNfGV1X/LyBGfF8Q6sNkGt3loshs6
+gNoqcbslqsxbVwnFzRmMRTmA5YyrJAePC2WglskTG86lO2LPnSgaG542AykcxUqB
+Wdw+08Kl4uAfAA==
+-----END CERTIFICATE-----
diff --git a/test/certs/root-ed448-key.pem b/test/certs/root-ed448-key.pem
new file mode 100644
index 000000000000..e0c36ff43a52
--- /dev/null
+++ b/test/certs/root-ed448-key.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOQeryQn6L8gItRarrM0pRHxjNdtaIz3BrWU2mwhLZQaq
+8Cm6w5gP6aitAIde7Td3nQ55bIGC5roxFQ==
+-----END PRIVATE KEY-----
diff --git a/test/certs/root-expired.pem b/test/certs/root-expired.pem
new file mode 100644
index 000000000000..80a71c176e2d
--- /dev/null
+++ b/test/certs/root-expired.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIC/zCCAeegAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMB4XDTIwMTIxMjIwMTcwNFoXDTIwMTIxMTIwMTcwNFowEjEQMA4GA1UEAwwH
+Um9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOHmAPUGvKBG
+OHkPPx5xGRNtAt8rm3Zr/KywIe3WkQhCO6VjNexSW6CiSsXWAJQDl1o9uWco0n3j
+IVyk7cY8jY6E0Z1Uwz3ZdKKWdmdx+cYaUHez/XjuW+DjjIkjwpoi7D7UN54HzcAr
+VREXOjRCHGkNOhiw7RWUXsb9nofGHOeUGpLAXwXBc0PlA94JkckkztiOi34u4DFI
+0YYqalUmeugLNk6XseCkydpcaUsDgAhWg6Mfsiq4wUz+xbFN1MABqu2+ziW97mmt
+9gfNbiuhiVT1aOuYCe3JYGbLM2JKA7Bo1g6rX8E1VX79Ru6669y2oqPthX9337Vo
+IkN+ZiQjr8UCAwEAAaNgMF4wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYw
+HQYDVR0OBBYEFI71Ja8em2uEPXyAmslTnE1y96NSMB8GA1UdIwQYMBaAFI71Ja8e
+m2uEPXyAmslTnE1y96NSMA0GCSqGSIb3DQEBCwUAA4IBAQC2j5q0uIsZeCXAT/ak
+3zsJMsdeUK62XrctfDqGc71v+m09T+euPCpcpGkTVoO5ePijKcrlmbRQo5UZC/dM
+6P1L75PqkUyoD3f9Ge3qYO0e+MSyfzTRJR14O46vaNsv8EoyNUfLcw0hgq9beK8z
+34c/YA9vbaD18zdTlGR9L4VDIjeitkrwC16TCncuPfJiN6FbFyiYZLavOowTcEOW
+gcIh5fH+Fluz+9+1iZHTD1/6xEblU6h2Q1KUrbQgNPKxnEzLcC0KKEtihNmHYA9x
+RgddXkv2jsCnXZ7mK5mQgxegTedsucqcFF5RB43F5LYCiM6X2Kak468rqTbToM6T
+dRIt
+-----END CERTIFICATE-----
diff --git a/test/certs/root-key-768.pem b/test/certs/root-key-768.pem
new file mode 100644
index 000000000000..4ecdcd3fdb02
--- /dev/null
+++ b/test/certs/root-key-768.pem
@@ -0,0 +1,13 @@
+-----BEGIN PRIVATE KEY-----
+MIIB5AIBADANBgkqhkiG9w0BAQEFAASCAc4wggHKAgEAAmEAue2pKTZhWeE1qUCK
+QDa25I68dQpVImWqMqbOVQ8j6BAXIFbG3JB3B6kjzu2XwRbWKfYiI543j1b461U6
+UGIzHCqL8FwGW1NttKuVGmhIo4fpXvMhe9+yqPBawOLftXXFAgMBAAECYH1FP4Bg
+/16Lepg6v+tb8gY0lY1WFN5EGVRfRw3QUaT9kldboEjjnQ8wSswVEPYr56IHZ8mH
+Or8LtJVrB3fjriq5vNOt7lRscuV7IcVtOyVWu5+MoJmO67Q2vRJXLWTdAQIxANtp
+AiqObXo8vyT+EDcOEW104PfKNVh/4fhyrDwAk/yTcxkv4dcnuTykeLPvkXq4cQIx
+ANjvQa+9LubMy3N1uXIbWWsiEBi4BdNK+xuppJ2puckaiQU42Mfmw/Nj4LMEJLfc
+lQIwCYcv3uU8f9hvfI3D6oAj5Zrzwg737hXvnDhunlRwGMHWd7uKlStWcfm6fCXl
+LW0hAjEAneK0egVEp3IR+PyLdcL194UZFgSJKNj/nYiAaMdokjcf1o8jJ4qKvw/I
+MEIpvy9pAjAzaFHKRugCN01V2dgXYYGL8+zkcwG4ehDXH1XEs4v8r3WtHBPPKED6
+AemfAQJLvh8=
+-----END PRIVATE KEY-----
diff --git a/test/certs/root-key.pem b/test/certs/root-key.pem
new file mode 100644
index 000000000000..0e0ee11c70f1
--- /dev/null
+++ b/test/certs/root-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDh5gD1BrygRjh5
+Dz8ecRkTbQLfK5t2a/yssCHt1pEIQjulYzXsUlugokrF1gCUA5daPblnKNJ94yFc
+pO3GPI2OhNGdVMM92XSilnZncfnGGlB3s/147lvg44yJI8KaIuw+1DeeB83AK1UR
+Fzo0QhxpDToYsO0VlF7G/Z6HxhznlBqSwF8FwXND5QPeCZHJJM7Yjot+LuAxSNGG
+KmpVJnroCzZOl7HgpMnaXGlLA4AIVoOjH7IquMFM/sWxTdTAAartvs4lve5prfYH
+zW4roYlU9WjrmAntyWBmyzNiSgOwaNYOq1/BNVV+/UbuuuvctqKj7YV/d9+1aCJD
+fmYkI6/FAgMBAAECggEBAJWfUmL441cFK8KDZrszDfjf61cF+yKkw+ddghuWUtm1
+hOw2mjC9HBN5ay0+YYOoHUeYOoUpdMIM/rvuQc9brCcJsg0TZ34/2hEWt7Yst9OO
++l1OykSfHBwIm7z6Aps1JmU3Ct+RK6ZtDRsU12hloYuzRxezmFUCwQPsWGR1xA9d
+usQHGbhM6F0WXFiTUulwf5x/06egO4IcDQL/qi5B79Byou+YnEQXcvWlF+6shPb6
+dvQbHuNRWd7QJRU/nJ/yhUDQ8Kx8e1WB2QJemBbf3jzkrGxHxWojcr6avJOQuNk4
+DCo+ksUcpiJqKLF26dGyLTypqL3s1L6FXbQ2kvlGqMECgYEA+Bpv+uJAZk7N83+N
+9DSsDmzQ1I1pp9tnwHvHko3gaWBr2O0bC7kl2CyLlUZ8Fi1SuiZPkWBXbffZbLxb
+H7t8ppvsvnVC4+BWkdmQR9du6mtl16GojZxPE1GL0Gqqw8CyJGSATBm9UJs/roq1
+hQxnvWrbGZp2+PGJTndlb+UpIXMCgYEA6Raj0bHa4Lzb2CLxf5eo6p4iBNacD3as
+CokJmDETIAwXFpjnHLDEuq8W26OACCv6vZtHefhtO0ULqJC1pRLF5/3lxhp219pp
+5Q1bSIysOKUJtZyqNwvhvROoiFgTDRyfu48eKsAx18pzRJ/ZFHsHqNbNUVWjF2Nf
+1yNC6PErO+cCgYEAufImhyPXHFZnqN2qqKJpaY5InWU3EKUyB2M92isXTCMF8VkT
+ch/bqz8HhmODUKO7YuSfsddA75xYilRI/2lnLP+j2cLM1Tkn6LvklNNzv6GqfIge
+abQC1/nADf5D6d6cJQZl2aNY7fbNLaWsEgGQJrjVaUUJcd6lB/gYQFrCDt0CgYAb
+61RQB8e556VFrFnU+KuI/swAXFxxFbvhvyxhCG/MBOa3FDWKoDnQSqyoPltVnz73
+eyQCnhknYkvVMxAu56LA+Q6OvhjCHi1U/FaUyBTQ7CPPlyZkVY4CgdpMCpCtn2Ia
+qzfn0wGlYWCRNbxg0aPHO4N4XJOed47BTD31fP26vQKBgDWXNz5he9pLYYDiF4F3
+jdjbG/QCmO41VBdfd81pFajJKm4TaskuMLTaWa51KHcoW+ddQQLy72qtXH53X4SL
+lO/RacV9hRoSX5Nq7ivSO8sM1fnU55kBre+V/ZgKkG4Xe669P1Hd4TpmmpoYDhgO
+Jq+6oI4L87uoIoyqvltRK3hM
+-----END PRIVATE KEY-----
diff --git a/test/certs/root-key2.pem b/test/certs/root-key2.pem
new file mode 100644
index 000000000000..990b20d64237
--- /dev/null
+++ b/test/certs/root-key2.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDIHp0kAPnBtK1B
+/gcTQSGV20NKE1VD+OEO7qzYprfQV0/iaXX5zY/Ls4NRKNIJ6BdoEg5cID5HTNoE
+Andl6pfHdSsT0+JdodEZlyg+1fiYr0g4eEh3HA9Rrpx5I4mfhwdj6nRwUun/ludQ
+SungipsvVsx3i/x8XEnRkMYlqF8uK6udhTJqVo0Icr6Erb5Fp5GA+Wxd+JT+/CGG
+MWF2GLFs+byX5L7bE3JJXUkADOtS8QN01nSIG+5VxLaaWFIpOG3ll6D7QLruRhir
+Ez0JVkLBxX9pJQibCN4Ww0wmyX+cXIRpy7q9fPSuO8vA/NMB5VhnLn3YbC9qRY62
+IN1qntYlAgMBAAECggEAJgHieHcS+F43VcRIVbjWBx8orYX0eL9pByv/efpYCOK8
+UlUTSglnmRmUBDMLiUQiReq//XFGQsZu1boeMSYYA5LWRqLEaGIWU5To2N5Mo7sO
+rWLy6GRU6H+QSlWcisbbeXeK+9ZTiO6BKjfAKZxJkvkaRk44+umQP5QOfhJ3WU4t
+0wkwYOfm8uOEg48yZTgjUVzhIORHAq5RHH/5goLrNwO2bIqOHOqzSrXGQJJ+oDaL
+JykccyVAElUGd5JaSpm5z0a43C4A5q770ppiByGxJv1L3ID1hkik1ZpWfMtwPH1Y
+FIAINqlhVoeAEwOCpL9axZ5OCGQrgWLNV4LfJyG4NQKBgQDyHGDyp+ZpMJRxCtDt
+8QWtthuoOfwmXOR81ZJGD3GA8rEGcG1zH4F+B4Z76/Kwb/uabH9FPURS+kcDpsuM
+9Avx88JTg6YFhtpQQCcmhY7awgc+B4ve95ziz6DOMhCD8Yb36UjM7B1jY+zVLIYt
+yQhZOKQEzPFqfPMrzEDsabT+GwKBgQDTmY35/l13zYi21xmCL+309KzjbZEyX0NF
+SE2JjIdwcWvKSMPFlWv7l1ssIg1fF0Hu7mEbLB74eUU0fe4D0LPeoEX3ihjYej4N
+M/EdKv7+WhCr11lnWwWTM+aeeFAmwdD95Gdvv0hTnG/GqxiOt19HhGhMHJueAKDL
+Tmci9hPAvwKBgQCkjbM62fEZp4IMvtw4DKveYDq2AQsnC9XkHsh3Q8HScaDuDnXl
+XBGIFhdKnJhrYQEx+PIbnkOU3jRr/+6zE6AWx6VZW834TaqOBrxVS0tH1b5UY46m
+ccc4xQO3gYGGHB+u2ei4Fvb2eZEbZlKgRdWdxoh8FssypFAmgYHS7Rmt5wKBgEYu
+symM1aGL2WGTnJFSpmFN2h4g1DzZ3e0X2yfZJX8FD5RraAub0NIE1Kehr7+vbh36
+kNi7XJZbWrnbXtuDGHWpwSsmcbEzcmtcpAdhoGvqoYbtiWi/huzZFQ/Qpf0E4fWk
+ES6+ShX5WBWT4DRN29tTrmg4QOE6IhrsqUauScTvAoGAKxEzsSHPgZm5rGOfVPcI
+cFeSJFCsaPfVk97T9aNievhMMChKBV8vT3Unlk0RObcsMweo6OMmfnRxrHhgfVz8
+elpLOlzEHfELlR8HELvxCeWWzuPgNCAPcG3BmjRnm8g5xmmkfQuRKlkQTcGbHotI
+wIPT+bHg3fjx7CemHl+rZeo=
+-----END PRIVATE KEY-----
diff --git a/test/certs/root-name2.pem b/test/certs/root-name2.pem
new file mode 100644
index 000000000000..d1ecb69fbc1b
--- /dev/null
+++ b/test/certs/root-name2.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtSb290
+IENlcnQgMjAgFw0yMDEyMTIyMDEwMzBaGA8yMTIwMTIxMzIwMTAzMFowFjEUMBIG
+A1UEAwwLUm9vdCBDZXJ0IDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQDh5gD1BrygRjh5Dz8ecRkTbQLfK5t2a/yssCHt1pEIQjulYzXsUlugokrF1gCU
+A5daPblnKNJ94yFcpO3GPI2OhNGdVMM92XSilnZncfnGGlB3s/147lvg44yJI8Ka
+Iuw+1DeeB83AK1URFzo0QhxpDToYsO0VlF7G/Z6HxhznlBqSwF8FwXND5QPeCZHJ
+JM7Yjot+LuAxSNGGKmpVJnroCzZOl7HgpMnaXGlLA4AIVoOjH7IquMFM/sWxTdTA
+Aartvs4lve5prfYHzW4roYlU9WjrmAntyWBmyzNiSgOwaNYOq1/BNVV+/Ubuuuvc
+tqKj7YV/d9+1aCJDfmYkI6/FAgMBAAGjYDBeMA8GA1UdEwEB/wQFMAMBAf8wCwYD
+VR0PBAQDAgEGMB0GA1UdDgQWBBSO9SWvHptrhD18gJrJU5xNcvejUjAfBgNVHSME
+GDAWgBSO9SWvHptrhD18gJrJU5xNcvejUjANBgkqhkiG9w0BAQsFAAOCAQEARabJ
+b7cGq1uPfAu0Yw7OHIXu40yylNMLiUNjn1ihRasDSO+Arv4p+XbqE2uMs1yneviw
+pJA4XoUv6DcjDj3R9qc11ZXw3NbFpBgPsp2wzrPhcyqFH4zardrnMIj8AJNHv0rv
+JS2D3bhOHaaRMM0TFzrq5d4ep9dxb9VBeuwc7lF0yN2CCuVwWbCk4TO598ZtukJC
+KfmlWS9IOUX+usZxylCvwqsXz4olWaQoxGkBNgTv6jGuCL/2Kr4njtXOrDSVfzyH
+t0ABV3EyGTSre55Nqbhmuu2PaQT3UphWw4iws4PqPh85I04SMF03BP/IeHS31g/1
+1lqW0ORSWhvih/112Q==
+-----END CERTIFICATE-----
diff --git a/test/certs/root-nonca.pem b/test/certs/root-nonca.pem
new file mode 100644
index 000000000000..5c86abe5c624
--- /dev/null
+++ b/test/certs/root-nonca.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDFzCCAf+gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo3YwdDAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwCQYDVR0TBAIwADAT
+BgNVHSUEDDAKBggrBgEFBQcDATASBgNVHREECzAJggdSb290IENBMA0GCSqGSIb3
+DQEBCwUAA4IBAQCJLiUshLaVQxjnoxN4MISOIM7vy9jIfCEabtyOumjVXasvLqKS
+fF0nLoRb/6iCd0VnJlliTKky/p8aaG4+VooQPTxwpat6zir4G1N2dWwYbMTDpVfh
+836wHNPmmFvCUSKZcoLAEmMVRrNU9gBXkS64FfoP0FCoWeHb9NSlQY5YFb0BO8C/
+6AZlMGCt1HDPEK+gE/Uwayk7Yo3npSb+ZgnwZpA0ip0lPJ0Uf5cZ5Q/RBP0H+nxi
+KLKzBpY01IJ67/7R1Ioc27JiUpBGmKQzjg48POSMOECFolv0dH33O6aXJaXtw9Kq
+m8y3rPQqNPehWzbRq75txC/sayQZXNUrteVz
+-----END CERTIFICATE-----
diff --git a/test/certs/root-noserver.pem b/test/certs/root-noserver.pem
new file mode 100644
index 000000000000..0c7fb8d1da57
--- /dev/null
+++ b/test/certs/root-noserver.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNDIyMjkwNVoYDzIxMTYwMTE1MjIyOTA1WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv5oV1s3N
+us7SINg7omu5AxueEgK97mh5PU3hgZpliSFaESmL2qLGeP609oXs/68XDXVW4utU
+LCOjLh0np+5Xy3i3GRDXgBZ72QDe23WqqQqqaBlQVVm1WxG+amRtZJEWdSIsiFBt
+k+8dBElHh2WQDhDOWqHGHQarQgJPxGB97MRhMSlbTwK1T5KAWOlqi5mJW5L6vNrQ
+7Tra/YceH70fU0fJYOXhBxM92NwD1bbVd9GPYFSqrdrVj19bvo63XsxZduex5QHr
+RkWqT5w5mgAHaEgCqWrS/64q9TR9UEwrB8kiZZg3k9/im+zBwEULTZu0r8oMEkpj
+bTlXLmt8EMBqxwIDAQABo1AwTjAdBgNVHQ4EFgQUcH8uroNoWZgEIyrN6z4XzSTd
+AUkwHwYDVR0jBBgwFoAUcH8uroNoWZgEIyrN6z4XzSTdAUkwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEAuiLq2lhcOJHrwUP0txbHk2vy6rmGTPxqmcCo
+CUQFZ3KrvUQM+rtRqqQ0+LzU4wSTFogBz9KSMfT03gPegY3b/7L2TOaMmUFRzTdd
+c9PNT0lP8V3pNQrxp0IjKir791QkGe2Ux45iMKf/SXpeTWASp4zeMiD6/LXFzzaK
+BfNS5IrIWRDev41lFasDzudK5/kmVaMvDOFyW51KkKkqb64VS4UA81JIEzClvz+3
+Vp3k1AXup5+XnTvhqu2nRhrLpJR5w8OXQpcn6qjKlVc2BXtb3xwci1/ibHlZy3CZ
+n70e2NYihU5yYKccReP+fjLgVFsuhsDs/0hRML1u9bLp9nUbYDAMoAoGCCsGAQUF
+BwMB
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/root-serverAuth.pem b/test/certs/root-serverAuth.pem
new file mode 100644
index 000000000000..37b49f6a8646
--- /dev/null
+++ b/test/certs/root-serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo1AwTjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEAyRRJx27WYOogPXZpPfAMt8ptapr/ugLWGLlw
+bzKySoyLpoV2/YNAvTAGB90iFq6x/ujjrK41/ES0p3v38/Qfuxo24gcZgc/oYLV2
+UqR+uGCx68p2OWLYctBsARtYWOEgPhHFb9aVxcOQKyZHtivDX0wLGX+nqZoHX9IY
+mc0sbpRBRMzxRsChbzD5re9kZ5NrgkjA6DJ7jYh2GitOM6oIU3Dd9+pk3bCEkFUg
+Ry9qN/k+AyeqH1Qcb5LU+MTmlw8bmyzmMOBZgdegtO4HshcBMO054KSB3WSfBPDO
+bEhZ0vm/lw63TGi88yIMtlkmcU2g0RKpeQI96G6QeqHyKF3p8DAMoAoGCCsGAQUF
+BwMB
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/root2+clientAuth.pem b/test/certs/root2+clientAuth.pem
new file mode 100644
index 000000000000..41355b040e6c
--- /dev/null
+++ b/test/certs/root2+clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyB6dJAD5
+wbStQf4HE0EhldtDShNVQ/jhDu6s2Ka30FdP4ml1+c2Py7ODUSjSCegXaBIOXCA+
+R0zaBAJ3ZeqXx3UrE9PiXaHRGZcoPtX4mK9IOHhIdxwPUa6ceSOJn4cHY+p0cFLp
+/5bnUErp4IqbL1bMd4v8fFxJ0ZDGJahfLiurnYUyalaNCHK+hK2+RaeRgPlsXfiU
+/vwhhjFhdhixbPm8l+S+2xNySV1JAAzrUvEDdNZ0iBvuVcS2mlhSKTht5Zeg+0C6
+7kYYqxM9CVZCwcV/aSUImwjeFsNMJsl/nFyEacu6vXz0rjvLwPzTAeVYZy592Gwv
+akWOtiDdap7WJQIDAQABo1AwTjAdBgNVHQ4EFgQUnM5mQjCrHAgmX3MZbd8Pp65Y
+Uh4wHwYDVR0jBBgwFoAUnM5mQjCrHAgmX3MZbd8Pp65YUh4wDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEADkH6+rUX2QD5TMBn8x4PR9mTQsxhD2k8K2bv
+NpbsWX0ta2pDPhiBpIbrTrTmw656MMRkwMLYIAX7BFhyjO9gO0nVXfU1SSTDsso+
+qu/K1t2US/rLeJQn8gYiTw6AqmvxHOndLaZQrYef4rUzsYnahNzxcoS1FMVxoJFM
+o+1Wo0BFBlASv5Az0iFfjd1Uy3+AHB41+2vczNIWSki3mg4hzus2PSS4AA9IYeh+
+zU/HJMddnVedLKNstTAfR85ftACtsP6JhBqCBqC4mCVsN2ZlgucETbsOMyWYB4+y
+9b6JIYDA1wxNVBXwN+D4MyALxjmjwcTsL6pXgoVc0JEJWVqQ1zAMMAoGCCsGAQUF
+BwMC
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/root2+serverAuth.pem b/test/certs/root2+serverAuth.pem
new file mode 100644
index 000000000000..52053f1bf675
--- /dev/null
+++ b/test/certs/root2+serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyB6dJAD5
+wbStQf4HE0EhldtDShNVQ/jhDu6s2Ka30FdP4ml1+c2Py7ODUSjSCegXaBIOXCA+
+R0zaBAJ3ZeqXx3UrE9PiXaHRGZcoPtX4mK9IOHhIdxwPUa6ceSOJn4cHY+p0cFLp
+/5bnUErp4IqbL1bMd4v8fFxJ0ZDGJahfLiurnYUyalaNCHK+hK2+RaeRgPlsXfiU
+/vwhhjFhdhixbPm8l+S+2xNySV1JAAzrUvEDdNZ0iBvuVcS2mlhSKTht5Zeg+0C6
+7kYYqxM9CVZCwcV/aSUImwjeFsNMJsl/nFyEacu6vXz0rjvLwPzTAeVYZy592Gwv
+akWOtiDdap7WJQIDAQABo1AwTjAdBgNVHQ4EFgQUnM5mQjCrHAgmX3MZbd8Pp65Y
+Uh4wHwYDVR0jBBgwFoAUnM5mQjCrHAgmX3MZbd8Pp65YUh4wDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEADkH6+rUX2QD5TMBn8x4PR9mTQsxhD2k8K2bv
+NpbsWX0ta2pDPhiBpIbrTrTmw656MMRkwMLYIAX7BFhyjO9gO0nVXfU1SSTDsso+
+qu/K1t2US/rLeJQn8gYiTw6AqmvxHOndLaZQrYef4rUzsYnahNzxcoS1FMVxoJFM
+o+1Wo0BFBlASv5Az0iFfjd1Uy3+AHB41+2vczNIWSki3mg4hzus2PSS4AA9IYeh+
+zU/HJMddnVedLKNstTAfR85ftACtsP6JhBqCBqC4mCVsN2ZlgucETbsOMyWYB4+y
+9b6JIYDA1wxNVBXwN+D4MyALxjmjwcTsL6pXgoVc0JEJWVqQ1zAMMAoGCCsGAQUF
+BwMB
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/root2-serverAuth.pem b/test/certs/root2-serverAuth.pem
new file mode 100644
index 000000000000..dae848a1a9a3
--- /dev/null
+++ b/test/certs/root2-serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyB6dJAD5
+wbStQf4HE0EhldtDShNVQ/jhDu6s2Ka30FdP4ml1+c2Py7ODUSjSCegXaBIOXCA+
+R0zaBAJ3ZeqXx3UrE9PiXaHRGZcoPtX4mK9IOHhIdxwPUa6ceSOJn4cHY+p0cFLp
+/5bnUErp4IqbL1bMd4v8fFxJ0ZDGJahfLiurnYUyalaNCHK+hK2+RaeRgPlsXfiU
+/vwhhjFhdhixbPm8l+S+2xNySV1JAAzrUvEDdNZ0iBvuVcS2mlhSKTht5Zeg+0C6
+7kYYqxM9CVZCwcV/aSUImwjeFsNMJsl/nFyEacu6vXz0rjvLwPzTAeVYZy592Gwv
+akWOtiDdap7WJQIDAQABo1AwTjAdBgNVHQ4EFgQUnM5mQjCrHAgmX3MZbd8Pp65Y
+Uh4wHwYDVR0jBBgwFoAUnM5mQjCrHAgmX3MZbd8Pp65YUh4wDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEADkH6+rUX2QD5TMBn8x4PR9mTQsxhD2k8K2bv
+NpbsWX0ta2pDPhiBpIbrTrTmw656MMRkwMLYIAX7BFhyjO9gO0nVXfU1SSTDsso+
+qu/K1t2US/rLeJQn8gYiTw6AqmvxHOndLaZQrYef4rUzsYnahNzxcoS1FMVxoJFM
+o+1Wo0BFBlASv5Az0iFfjd1Uy3+AHB41+2vczNIWSki3mg4hzus2PSS4AA9IYeh+
+zU/HJMddnVedLKNstTAfR85ftACtsP6JhBqCBqC4mCVsN2ZlgucETbsOMyWYB4+y
+9b6JIYDA1wxNVBXwN+D4MyALxjmjwcTsL6pXgoVc0JEJWVqQ1zAMoAoGCCsGAQUF
+BwMB
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/rootCA.key b/test/certs/rootCA.key
new file mode 100644
index 000000000000..527f3ad75f8a
--- /dev/null
+++ b/test/certs/rootCA.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAwPFrd4isNd/7c1MvkoAvdBYyTfUQIG9sOo7R3GvhLj7DBA+/
+m8TJEtHkC0WX5QbNZjrh4OIr36LE7HvTPTyK/150oKunA2oWW16SxH5beYpp1LyD
+Xq5CknSlK+cAwanc1bFTBw9z946tFD4lnuUe5syRzZUMgEQgw/0Xz5E9YxAcFFv7
+w6jBiLJ3/5zb/GpERET3hewILNTfgaN5yf4em5MWU7eXq75PGqXi+kYF5A2cKqTM
+uR4hoGzEq1mwQDm7+Yit/d+NtAuvfkHgITzIM0VJhC+TBu79T+1P87yb3vwlXlXV
+ddTFezpANQafxIS0bJMMrzdar7ZBTSYjHLgCswIDAQABAoIBAC1EdwJEfqLlOgmE
+qtSkXn3N919y76Wsfqf+eh5M8Tf4YajCSSIyuTpBJE/AtDJ3thkWF4i7h6+gcLNL
+GfR0D+h6MMLBgx259iTZu3V+b9fEMbBHykqcd+IEm/wA5pyJTdaVE/XEGmEqiFEH
+g6wT9XwQ4uRo49X0JfvVlZCNcumapYfPY+BwPQloydm/cLtgUtc1RKUCG7i27aHM
+VaUm+NdYZIwwCQs0Aof/h7PkEWvHq0idaxY9qkLbbZHb1Np/IkmvqCo/PSS1whDj
+/KIQGJDBGuXX/V+cZ+DYkCXAq1fCto9MjarEVmlLW5Hr5QojdbpvwsxSmrGfCqdH
+bfc/9gECgYEA6y6EcYBuvCibmO4G2OA1sNSe5lJF911xUHuUl3CRORdeVFDi9Ch+
+LKzE+XEOlvA+qFSIA/KztevX3dvmvvBMwu0PUWDtBKJZ1mXt4Mgo63MHpYnKIzWz
+YuDaMKpvbl3iTFJlKPUkPlv+/uDccd0QYYvk4gbBrWVQDghV3ya9LqMCgYEA0gW6
+Cu5yRWodehCh0z8VtFfOGDkhZEav6B5mZvyDCk5f+zVeRlsTJwY4BsgnoMUJ+SjQ
+iQwQX3FbWrwcyYPOIA+ja6Hisgb9p/f+hxsQOOhN9nFsk2MNIHkwrMRcE8pj7pc1
+uBoYqpdX8blEs8wkJI+bTI3/SIZw6vjbogSqbLECgYEAhXuQho9byoXN0p3+2ude
+8e+sBJPbzEuH/iM2MkIc2ueNjZOfTO8Sti6VWfK2UisnlQjtbjg5kd67Vdvy+pqP
+Ju/ACvNVc5TmIo8V1cglmYVfaLBtP1DCcTOoA4ko196Hi8QUUIvat14lu+pKlIHh
+Q0xQa41kLhNbvaszegWVyLsCgYEAxhuGySbw/U9CbNDhhL1eANZOXoUNXWRcK6z5
+VS3dgcw6N2C5A86G+2mfUa5dywXyCWgZhRyvGQh5btZApUlCFvYJZc63Ysy7WkTQ
+f6rkm3ltiQimrURirn4CjwVOAZEIwJc7oeRj3g6Scz4acysd8KrRh93trwC55LtH
+mcWi6JECgYAlqCQvaAnvaWpR0RX7m/UMpqWOVgIperGR7hrN3d04RaWG4yv1+66T
+xANNBA8aDxhFwXjAKev4iOE/rp8SEjYXh3lbKmx+p9dk8REUdIFqoClX9tqctW9g
+AkDF34S0mSE4T34zhs2+InfohJa6ojsuiNJSQMBPBxfr6wV2C+UWMQ==
+-----END RSA PRIVATE KEY-----
diff --git a/test/certs/rootCA.pem b/test/certs/rootCA.pem
new file mode 100644
index 000000000000..c2abbf8a58a5
--- /dev/null
+++ b/test/certs/rootCA.pem
@@ -0,0 +1,79 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 88:43:29:cb:c2:eb:15:9a
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = rootCA
+ Validity
+ Not Before: Jul 2 13:15:11 2015 GMT
+ Not After : Jul 2 17:50:05 2122 GMT
+ Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = rootCA
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (2048 bit)
+ Modulus:
+ 00:c0:f1:6b:77:88:ac:35:df:fb:73:53:2f:92:80:
+ 2f:74:16:32:4d:f5:10:20:6f:6c:3a:8e:d1:dc:6b:
+ e1:2e:3e:c3:04:0f:bf:9b:c4:c9:12:d1:e4:0b:45:
+ 97:e5:06:cd:66:3a:e1:e0:e2:2b:df:a2:c4:ec:7b:
+ d3:3d:3c:8a:ff:5e:74:a0:ab:a7:03:6a:16:5b:5e:
+ 92:c4:7e:5b:79:8a:69:d4:bc:83:5e:ae:42:92:74:
+ a5:2b:e7:00:c1:a9:dc:d5:b1:53:07:0f:73:f7:8e:
+ ad:14:3e:25:9e:e5:1e:e6:cc:91:cd:95:0c:80:44:
+ 20:c3:fd:17:cf:91:3d:63:10:1c:14:5b:fb:c3:a8:
+ c1:88:b2:77:ff:9c:db:fc:6a:44:44:44:f7:85:ec:
+ 08:2c:d4:df:81:a3:79:c9:fe:1e:9b:93:16:53:b7:
+ 97:ab:be:4f:1a:a5:e2:fa:46:05:e4:0d:9c:2a:a4:
+ cc:b9:1e:21:a0:6c:c4:ab:59:b0:40:39:bb:f9:88:
+ ad:fd:df:8d:b4:0b:af:7e:41:e0:21:3c:c8:33:45:
+ 49:84:2f:93:06:ee:fd:4f:ed:4f:f3:bc:9b:de:fc:
+ 25:5e:55:d5:75:d4:c5:7b:3a:40:35:06:9f:c4:84:
+ b4:6c:93:0c:af:37:5a:af:b6:41:4d:26:23:1c:b8:
+ 02:b3
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:TRUE
+ X509v3 Subject Key Identifier:
+ 85:56:89:35:E2:9F:00:1A:E1:86:03:0B:4B:AF:76:12:6B:33:6D:FD
+ X509v3 Authority Key Identifier:
+ keyid:85:56:89:35:E2:9F:00:1A:E1:86:03:0B:4B:AF:76:12:6B:33:6D:FD
+
+ Signature Algorithm: sha256WithRSAEncryption
+ b9:5c:c3:39:31:e9:c1:63:f9:f1:29:2c:c6:84:80:ed:33:e5:
+ 72:3c:2c:e8:93:1f:07:03:65:cd:bb:04:ed:10:29:00:5f:ea:
+ 91:08:19:df:10:88:e9:00:5c:2e:eb:b5:af:98:70:c8:c4:8b:
+ 53:c4:26:c5:a1:d8:46:b9:9f:7d:48:e0:26:74:2c:61:b8:c1:
+ 89:06:b6:e5:b5:ba:6b:75:2b:16:ad:ca:88:26:25:73:9b:15:
+ 22:59:6a:94:dc:61:34:88:28:58:9f:de:fd:71:1e:37:af:90:
+ 74:7b:cf:bb:93:1c:73:24:15:26:7a:33:8c:5d:5b:81:97:14:
+ 62:01:7e:17:76:fb:aa:7a:4d:ed:81:2b:bd:d9:f3:12:69:86:
+ 01:b3:91:0a:8d:6b:bd:71:41:a9:93:63:c2:a1:ab:0d:48:05:
+ 99:7d:9e:a2:a4:ac:9f:73:0d:5b:5c:05:3a:52:64:fe:17:79:
+ 2a:27:51:d7:5b:af:dc:10:d5:23:6b:2c:62:51:00:c9:67:17:
+ 2d:29:a3:21:88:fd:14:48:0d:99:8c:d8:f8:c8:c7:ec:d2:83:
+ 3d:ba:d4:94:7b:df:39:61:4b:e3:7c:b9:ea:77:09:01:bc:ec:
+ db:1c:fa:42:1b:6d:1d:b1:51:5f:e4:87:dd:41:24:00:a2:52:
+ e0:1a:c0:1c
+-----BEGIN CERTIFICATE-----
+MIIDgTCCAmmgAwIBAgIJAIhDKcvC6xWaMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAgFw0xNTA3MDIxMzE1MTFa
+GA8yMTIyMDcwMjE3NTAwNVowVjELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUt
+U3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1UE
+AwwGcm9vdENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPFrd4is
+Nd/7c1MvkoAvdBYyTfUQIG9sOo7R3GvhLj7DBA+/m8TJEtHkC0WX5QbNZjrh4OIr
+36LE7HvTPTyK/150oKunA2oWW16SxH5beYpp1LyDXq5CknSlK+cAwanc1bFTBw9z
+946tFD4lnuUe5syRzZUMgEQgw/0Xz5E9YxAcFFv7w6jBiLJ3/5zb/GpERET3hewI
+LNTfgaN5yf4em5MWU7eXq75PGqXi+kYF5A2cKqTMuR4hoGzEq1mwQDm7+Yit/d+N
+tAuvfkHgITzIM0VJhC+TBu79T+1P87yb3vwlXlXVddTFezpANQafxIS0bJMMrzda
+r7ZBTSYjHLgCswIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBSFVok1
+4p8AGuGGAwtLr3YSazNt/TAfBgNVHSMEGDAWgBSFVok14p8AGuGGAwtLr3YSazNt
+/TANBgkqhkiG9w0BAQsFAAOCAQEAuVzDOTHpwWP58SksxoSA7TPlcjws6JMfBwNl
+zbsE7RApAF/qkQgZ3xCI6QBcLuu1r5hwyMSLU8QmxaHYRrmffUjgJnQsYbjBiQa2
+5bW6a3UrFq3KiCYlc5sVIllqlNxhNIgoWJ/e/XEeN6+QdHvPu5MccyQVJnozjF1b
+gZcUYgF+F3b7qnpN7YErvdnzEmmGAbORCo1rvXFBqZNjwqGrDUgFmX2eoqSsn3MN
+W1wFOlJk/hd5KidR11uv3BDVI2ssYlEAyWcXLSmjIYj9FEgNmYzY+MjH7NKDPbrU
+lHvfOWFL43y56ncJAbzs2xz6QhttHbFRX+SH3UEkAKJS4BrAHA==
+-----END CERTIFICATE-----
diff --git a/test/certs/rootcert.pem b/test/certs/rootcert.pem
new file mode 100644
index 000000000000..2b90ddb3ee1b
--- /dev/null
+++ b/test/certs/rootcert.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNDIyMjkwNVoYDzIxMTYwMTE1MjIyOTA1WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv5oV1s3N
+us7SINg7omu5AxueEgK97mh5PU3hgZpliSFaESmL2qLGeP609oXs/68XDXVW4utU
+LCOjLh0np+5Xy3i3GRDXgBZ72QDe23WqqQqqaBlQVVm1WxG+amRtZJEWdSIsiFBt
+k+8dBElHh2WQDhDOWqHGHQarQgJPxGB97MRhMSlbTwK1T5KAWOlqi5mJW5L6vNrQ
+7Tra/YceH70fU0fJYOXhBxM92NwD1bbVd9GPYFSqrdrVj19bvo63XsxZduex5QHr
+RkWqT5w5mgAHaEgCqWrS/64q9TR9UEwrB8kiZZg3k9/im+zBwEULTZu0r8oMEkpj
+bTlXLmt8EMBqxwIDAQABo1AwTjAdBgNVHQ4EFgQUcH8uroNoWZgEIyrN6z4XzSTd
+AUkwHwYDVR0jBBgwFoAUcH8uroNoWZgEIyrN6z4XzSTdAUkwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEAuiLq2lhcOJHrwUP0txbHk2vy6rmGTPxqmcCo
+CUQFZ3KrvUQM+rtRqqQ0+LzU4wSTFogBz9KSMfT03gPegY3b/7L2TOaMmUFRzTdd
+c9PNT0lP8V3pNQrxp0IjKir791QkGe2Ux45iMKf/SXpeTWASp4zeMiD6/LXFzzaK
+BfNS5IrIWRDev41lFasDzudK5/kmVaMvDOFyW51KkKkqb64VS4UA81JIEzClvz+3
+Vp3k1AXup5+XnTvhqu2nRhrLpJR5w8OXQpcn6qjKlVc2BXtb3xwci1/ibHlZy3CZ
+n70e2NYihU5yYKccReP+fjLgVFsuhsDs/0hRML1u9bLp9nUbYA==
+-----END CERTIFICATE-----
diff --git a/test/certs/rootkey.pem b/test/certs/rootkey.pem
new file mode 100644
index 000000000000..d85c96f898a1
--- /dev/null
+++ b/test/certs/rootkey.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC/mhXWzc26ztIg
+2Duia7kDG54SAr3uaHk9TeGBmmWJIVoRKYvaosZ4/rT2hez/rxcNdVbi61QsI6Mu
+HSen7lfLeLcZENeAFnvZAN7bdaqpCqpoGVBVWbVbEb5qZG1kkRZ1IiyIUG2T7x0E
+SUeHZZAOEM5aocYdBqtCAk/EYH3sxGExKVtPArVPkoBY6WqLmYlbkvq82tDtOtr9
+hx4fvR9TR8lg5eEHEz3Y3APVttV30Y9gVKqt2tWPX1u+jrdezFl257HlAetGRapP
+nDmaAAdoSAKpatL/rir1NH1QTCsHySJlmDeT3+Kb7MHARQtNm7SvygwSSmNtOVcu
+a3wQwGrHAgMBAAECggEBAL4rWle8JuCuHGNbGz1nO9d41tg7fnYdnZAaN6OiMfr8
+bl+wY84aV3GKJOS2InfYOcIy340UU5QHvxOq/kwwRVV/uAOZ8rqAFmZY9djOnhdv
+rZjq3xAHnPgJ0XvZt7XkR2z1AUw+v7Pf1WYGsYcSZ/t99MKB5Je0odA/aRqZRwLy
+YflbsnAJtxdJ6fsiVCSJcU76V8sxfiCimw6ppLMEp3zCjveQ5Lv0eVoL2zNYeh+l
+GiSwqTqaR+WJekkDiXRd9KYI19drf7OkTII1DtOd6bgvKX3zv2lNiere4J4k7cAP
+rW6fBFgtSq2oklTpWUlXRH7XQAgDtDvldXdlKaj96dkCgYEA8KPSu5ywg8pjCofE
+nLtJTfVyD2g9tgNLj9dI3kuSniZU51kOtk5rZZwL0S8piGczL908aV9DIWdXWsND
+5hlXquKUTSjxPYEzZvaN+tvf9e0AcY/D/UaK0mKPjEbh7vg6pS77aZZz2EL2inOs
+dam8famOOC9RUkxH5JWa3UV4UhsCgYEAy9T0wPQctjuvDkZQTqKEKsHrmrgY2PXT
+Re8DDGI8hxjYb8l+NoFQ7eiwTHir/DULupxQoBBUQtS+idQzUu02tzLMnGcjHNwh
+Tu+vZ4xlVnXxfgIRjDKkfQjiAC5SLzoNO9Jn8g4eS/1mEPXhQ0TXIsFonZDypp/n
+RMp21DkvdMUCgYAIMgwjR5rbYjEtUqJnlBlTBmD0FWDEqigQpgxdRcWgjT2nA2l0
+3AbcVwwv+6M2eg1MPASqsgvfP13CQZQ2afaKY10Zo6NTrOrLPupm+MYP4hp5w6Ox
+JI3lzGWHKYLYWKvmpEr7tZwMaXtsC7R77WP2A6hMUZA7dU2dg1ra3lrSsQKBgQDA
+sPIsUtmtwOBtqzUSEXrGfQqA+larDEGNVDVaiKfVwzwg+aeyWS+rqRS5Rj64L2GG
+KW3i020EvN/fplZap9vY9lIN7UZ5avSmDdqRFl1ajiccy1HRarKrbTFRoHibItMN
+4YvYfVZQ2h2aHQe2Myb6OULv6e4qbPIRyyDo4aKmTQKBgQCadq2JfICFIP9Q1aQn
+93oD7Z4WcYs+KsLYO+/uJxWMrn0/gv90cGrSfstJqDOHnRq4WKUcgK9ErxaE4LkW
+sD0mBhRM3SMxnRJZRO+6roRdehtjHkvzKu75KjcsuwefoMs2sFa4CLQ1YU2vO3Tx
+dgzpnKS2bH/i5yLwhelRfddZ6Q==
+-----END PRIVATE KEY-----
diff --git a/test/certs/roots.pem b/test/certs/roots.pem
new file mode 100644
index 000000000000..0bc69127df52
--- /dev/null
+++ b/test/certs/roots.pem
@@ -0,0 +1,42 @@
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAmigAwIBAgIJANnoWlLlEsTgMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE3MDVa
+Fw0zNTA3MDIxMzE3MDVaMFcxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0
+YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMT
+B2ludGVyQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7s0ejvpQO
+nvfwD+e4R+9WQovtrsqOTw8khiREqi5JlmAFbpDEFam18npRkt6gOcGMnjuFzuz6
+iEuQmeeyh0BqWAwpMgWMMteEzLOAaqkEl//J2+WgRbA/8pmwHfbPW/d+f3bp64Fo
+D1hQAenBzXmLxVohEQ9BA+xEDRkL/cA3Y+k/O1C9ORhSQrJNsB9aE3zKbFHd9mOm
+H4aNSsF8On3SqlRVOCQine5c6ACSd0HUEjYy9aObqY47ySNULbzVq5y6VOjMs0W+
+2G/XqrcVkxzf9bVqyVBrrAJrnb35/y/iK0zWgJBP+HXhwr5mMTvNuEirBeVYuz+6
+hUerUbuJhr0FAgMBAAGjUDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFBj61iO5
+j11dE30+j6iRx9lhwBcuMB8GA1UdIwQYMBaAFIVWiTXinwAa4YYDC0uvdhJrM239
+MA0GCSqGSIb3DQEBCwUAA4IBAQDAU0MvL/yZpmibhxUsoSsa97UJbejn5IbxpPzZ
+4WHw8lsoUGs12ZHzQJ9LxkZVeuccFXy9yFEHW56GTlkBmD2qrddlmQCfQ3m8jtZ9
+Hh5feKAyrqfmfsWF5QPjAmdj/MFdq+yMJVosDftkmUmaBHjzbvbcq1sWh/6drH8U
+7pdYRpfeEY8dHSU6FHwVN/H8VaBB7vYYc2wXwtk8On7z2ocIVHn9RPkcLwmwJjb/
+e4jmcYiyZev22KXQudeHc4w6crWiEFkVspomn5PqDmza3rkdB3baXFVZ6sd23ufU
+wjkiKKtwRBwU+5tCCagQZoeQ5dZXQThkiH2XEIOCOLxyD/tb
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDhzCCAm+gAwIBAgIJAJTed6XmFiu/MA0GCSqGSIb3DQEBCwUAMFoxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEzARBgNVBAMMCnN1YmludGVyQ0EwHhcNMTUwNzAyMTMy
+MTU4WhcNMzUwNzAyMTMyMTU4WjBaMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29t
+ZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYD
+VQQDDApzdWJpbnRlckNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+/zQjvhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb2ARVkYZP5e9gHb04
+wPVz2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1nJeSv3na8gyOoCheG
+64kWVbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/CpdCHE3DKAzAiri3G
+Vc90OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMywtz4hhY/XZTvdEn2
+90aL857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRFHONWZG1T4mRY1Drh
+6VbJGb+0GNIldNLQqigkfwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQW
+BBTpZ30QdMGarrhMPwk+HHAV3R8aTzAfBgNVHSMEGDAWgBTpZ30QdMGarrhMPwk+
+HHAV3R8aTzANBgkqhkiG9w0BAQsFAAOCAQEAF8UAMtV1DClUWRw1h+THdAhjeo8S
+9BOp6QphtlYuc9o+tQri5m+WqbyUZKIBEtumNhFb7QI1e4hO64y1kKbSs2AjWcJ2
+QxAyGiMM3wl2UfxPohDtgNhm0GFgQ1tUTeSnW3kAom9NqI7U/2lPpLh4rrFYTepR
+wy0FV3NpRuHPtJE0VfqYnwWiTRdCJ7w1XzknKOUSHP/hRbyJVlwQp3VEQ9SIOYU6
+C+QEVGIgQiST6MRlCvoNP43guaRtrMuBZJaHKy/hLPvkdRpXHoUeKQFDuH77sZsF
+sBv3EHNKoBvpSpSJndZN6UcH7Z1yn41Y6AnO4u492jiRAjQpP9+Nf/x1eg==
+-----END CERTIFICATE-----
diff --git a/test/certs/sca+anyEKU.pem b/test/certs/sca+anyEKU.pem
new file mode 100644
index 000000000000..20b36cffe360
--- /dev/null
+++ b/test/certs/sca+anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA
+A4IBAQADWiB2YGO7yxO/cHnSfSUFKrb+iDzAV0meO/PXiyZPXvRXrwDBW1YtKT1A
+98Ki9LAHVLeJLlPHzE4ihg0IF9m2UV92K0tUo0IFOM7h75I1JjsTXk1BZYfFkYXl
+ChZA7DjvemXU8wIqw12IHSk/MyckUN1VxI29PiGIYSCIDJSaEd8QsImF36yqMwGD
+ow3jFFN7RdH+gp0KJu1ziVvgc4BCALABTur4KlYxZlfjLRLxtoPO40m2hl4k/NJL
+qwBGVxUFGybliMbn5gOXC47DEWR91QfkIjb7zfcEhC9Qb4LXAWc8KWsZLUMLDz8E
+pd53w4iC9W6IVBRZEA3Lf9tr/b71MAgwBgYEVR0lAA==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sca+clientAuth.pem b/test/certs/sca+clientAuth.pem
new file mode 100644
index 000000000000..5dd7dc676af7
--- /dev/null
+++ b/test/certs/sca+clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA
+A4IBAQADWiB2YGO7yxO/cHnSfSUFKrb+iDzAV0meO/PXiyZPXvRXrwDBW1YtKT1A
+98Ki9LAHVLeJLlPHzE4ihg0IF9m2UV92K0tUo0IFOM7h75I1JjsTXk1BZYfFkYXl
+ChZA7DjvemXU8wIqw12IHSk/MyckUN1VxI29PiGIYSCIDJSaEd8QsImF36yqMwGD
+ow3jFFN7RdH+gp0KJu1ziVvgc4BCALABTur4KlYxZlfjLRLxtoPO40m2hl4k/NJL
+qwBGVxUFGybliMbn5gOXC47DEWR91QfkIjb7zfcEhC9Qb4LXAWc8KWsZLUMLDz8E
+pd53w4iC9W6IVBRZEA3Lf9tr/b71MAwwCgYIKwYBBQUHAwI=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sca+serverAuth.pem b/test/certs/sca+serverAuth.pem
new file mode 100644
index 000000000000..779a1c361e9e
--- /dev/null
+++ b/test/certs/sca+serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA
+A4IBAQADWiB2YGO7yxO/cHnSfSUFKrb+iDzAV0meO/PXiyZPXvRXrwDBW1YtKT1A
+98Ki9LAHVLeJLlPHzE4ihg0IF9m2UV92K0tUo0IFOM7h75I1JjsTXk1BZYfFkYXl
+ChZA7DjvemXU8wIqw12IHSk/MyckUN1VxI29PiGIYSCIDJSaEd8QsImF36yqMwGD
+ow3jFFN7RdH+gp0KJu1ziVvgc4BCALABTur4KlYxZlfjLRLxtoPO40m2hl4k/NJL
+qwBGVxUFGybliMbn5gOXC47DEWR91QfkIjb7zfcEhC9Qb4LXAWc8KWsZLUMLDz8E
+pd53w4iC9W6IVBRZEA3Lf9tr/b71MAwwCgYIKwYBBQUHAwE=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sca-anyEKU.pem b/test/certs/sca-anyEKU.pem
new file mode 100644
index 000000000000..d713edb468a3
--- /dev/null
+++ b/test/certs/sca-anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA
+A4IBAQADWiB2YGO7yxO/cHnSfSUFKrb+iDzAV0meO/PXiyZPXvRXrwDBW1YtKT1A
+98Ki9LAHVLeJLlPHzE4ihg0IF9m2UV92K0tUo0IFOM7h75I1JjsTXk1BZYfFkYXl
+ChZA7DjvemXU8wIqw12IHSk/MyckUN1VxI29PiGIYSCIDJSaEd8QsImF36yqMwGD
+ow3jFFN7RdH+gp0KJu1ziVvgc4BCALABTur4KlYxZlfjLRLxtoPO40m2hl4k/NJL
+qwBGVxUFGybliMbn5gOXC47DEWR91QfkIjb7zfcEhC9Qb4LXAWc8KWsZLUMLDz8E
+pd53w4iC9W6IVBRZEA3Lf9tr/b71MAigBgYEVR0lAA==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sca-cert.pem b/test/certs/sca-cert.pem
new file mode 100644
index 000000000000..86de3d0acc64
--- /dev/null
+++ b/test/certs/sca-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA
+A4IBAQADWiB2YGO7yxO/cHnSfSUFKrb+iDzAV0meO/PXiyZPXvRXrwDBW1YtKT1A
+98Ki9LAHVLeJLlPHzE4ihg0IF9m2UV92K0tUo0IFOM7h75I1JjsTXk1BZYfFkYXl
+ChZA7DjvemXU8wIqw12IHSk/MyckUN1VxI29PiGIYSCIDJSaEd8QsImF36yqMwGD
+ow3jFFN7RdH+gp0KJu1ziVvgc4BCALABTur4KlYxZlfjLRLxtoPO40m2hl4k/NJL
+qwBGVxUFGybliMbn5gOXC47DEWR91QfkIjb7zfcEhC9Qb4LXAWc8KWsZLUMLDz8E
+pd53w4iC9W6IVBRZEA3Lf9tr/b71
+-----END CERTIFICATE-----
diff --git a/test/certs/sca-clientAuth.pem b/test/certs/sca-clientAuth.pem
new file mode 100644
index 000000000000..6f7b6fc62ee3
--- /dev/null
+++ b/test/certs/sca-clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA
+A4IBAQADWiB2YGO7yxO/cHnSfSUFKrb+iDzAV0meO/PXiyZPXvRXrwDBW1YtKT1A
+98Ki9LAHVLeJLlPHzE4ihg0IF9m2UV92K0tUo0IFOM7h75I1JjsTXk1BZYfFkYXl
+ChZA7DjvemXU8wIqw12IHSk/MyckUN1VxI29PiGIYSCIDJSaEd8QsImF36yqMwGD
+ow3jFFN7RdH+gp0KJu1ziVvgc4BCALABTur4KlYxZlfjLRLxtoPO40m2hl4k/NJL
+qwBGVxUFGybliMbn5gOXC47DEWR91QfkIjb7zfcEhC9Qb4LXAWc8KWsZLUMLDz8E
+pd53w4iC9W6IVBRZEA3Lf9tr/b71MAygCgYIKwYBBQUHAwI=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sca-serverAuth.pem b/test/certs/sca-serverAuth.pem
new file mode 100644
index 000000000000..1e354b8b61da
--- /dev/null
+++ b/test/certs/sca-serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDETCCAfmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTgyN1oYDzIxMjAxMjEzMjAxODI3WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaN1MHMwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE
+PXyAmslTnE1y96NSMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA
+A4IBAQADWiB2YGO7yxO/cHnSfSUFKrb+iDzAV0meO/PXiyZPXvRXrwDBW1YtKT1A
+98Ki9LAHVLeJLlPHzE4ihg0IF9m2UV92K0tUo0IFOM7h75I1JjsTXk1BZYfFkYXl
+ChZA7DjvemXU8wIqw12IHSk/MyckUN1VxI29PiGIYSCIDJSaEd8QsImF36yqMwGD
+ow3jFFN7RdH+gp0KJu1ziVvgc4BCALABTur4KlYxZlfjLRLxtoPO40m2hl4k/NJL
+qwBGVxUFGybliMbn5gOXC47DEWR91QfkIjb7zfcEhC9Qb4LXAWc8KWsZLUMLDz8E
+pd53w4iC9W6IVBRZEA3Lf9tr/b71MAygCgYIKwYBBQUHAwE=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/server-cecdsa-cert.pem b/test/certs/server-cecdsa-cert.pem
new file mode 100644
index 000000000000..6446bbf08a4d
--- /dev/null
+++ b/test/certs/server-cecdsa-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICSDCCATCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE3MDIyNDE3MjgxOFoYDzIxMTcwMjI1MTcyODE4WjAfMR0wGwYDVQQD
+DBRFQ0RTQSBjb21wcmVzc2VkIGtleTA5MBMGByqGSM49AgEGCCqGSM49AwEHAyIA
+AuI7NNxE483tJyIKT6KOQM5Zlfrigh12BEcHxnzpudgVo4GEMIGBMB0GA1UdDgQW
+BBRYM6sJF9MGP6q5g0lxnwQzVozv2DAfBgNVHSMEGDAWgBRwfy6ug2hZmAQjKs3r
+PhfNJN0BSTAJBgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1UdEQQY
+MBaCFEVDRFNBIGNvbXByZXNzZWQga2V5MA0GCSqGSIb3DQEBCwUAA4IBAQCEmLt+
+eW36thd16Coscs4LYV8aFS6cyCw1dXUOAsDn8SH6zFkhidahgGY4cXdYeNpffYWZ
+yL1ydfL5ce76Ye4liLY0N/3tvsMTdyvtMxzVrC27W7yxfh65tPGhQtZNbzWZPkUr
+pBQ5w8pN9go/B/tCmflffzAXz5XOI2dRGxENfHV/6KTjn+ojbgWL2JmkbBuTSk7w
+18s5ae+T7rUFPTxlN9vFoFyCf+mjHArRhIHBR1AiZ9/Q1XN44u7EWYbKkiJgki1Q
+VBd4jvGz3GsH2DWMm1B1VqO0vddRNFDy7DtMO36VRz0k0k2ysOw1Y82XAniPboS7
+jC8uUGdh3iKWaOb5
+-----END CERTIFICATE-----
diff --git a/test/certs/server-cecdsa-key.pem b/test/certs/server-cecdsa-key.pem
new file mode 100644
index 000000000000..ae157dfe71d1
--- /dev/null
+++ b/test/certs/server-cecdsa-key.pem
@@ -0,0 +1,4 @@
+-----BEGIN EC PRIVATE KEY-----
+MFcCAQEEIEyOTc8v2AjaRLgE6+oxbbmQOVbNec21ziVORF5fiQHuoAoGCCqGSM49
+AwEHoSQDIgAC4js03ETjze0nIgpPoo5AzlmV+uKCHXYERwfGfOm52BU=
+-----END EC PRIVATE KEY-----
diff --git a/test/certs/server-dsa-cert.pem b/test/certs/server-dsa-cert.pem
new file mode 100644
index 000000000000..0ea18949295e
--- /dev/null
+++ b/test/certs/server-dsa-cert.pem
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFQzCCBCugAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE3MDIxNzE0MDgxOVoYDzIxMTcwMjE4MTQwODE5WjAVMRMwEQYDVQQD
+DApTZXJ2ZXIgRFNBMIIDSDCCAjoGByqGSM44BAEwggItAoIBAQD+P3LcpaA+AYu9
+M1gSsHi8fixl7VPCsKK96oaH7/ZJqvOD0TdASkn+4Td8SPvkc+KG2bBbmp39FCxG
+pa4d8CRLKVbIHAFtaKHIDFuMlPuFnsiaU0uWN/s3lROhAHWrTiODhehFM+NiPrAO
+JmtXQURBoeQ07t4HoyKz7sUyTF2qotw1JDvBRb6JXw+13Z2a1iZGJopLZN3Ricvo
+Hee3rYEsM5AHMS3cntYX2NhQUHjiQ451iL2OkFJtVeaUoX5JV6KYSzz4lzNlYwJf
+F/Tzac/+l1aFA1NDbNFcQ1UC0JXscKeT/J2Wo8kRwpx042UKaayw5jkOv3GndgKC
+OaCe29UrAiEAh8hMJV/kKTLolNr6kV87KV8eTaJfrnSRS2E3ToOhWH0CggEBAOd/
+YKl8svYqvJtThaOsmVETeXwEvz/MLqpj4hZr029Oqps7z6OmeZ2er7aldxC5+BKM
+xCfPlhFo0iQ9XITp+J7UqS3qrRZqAnxMjd6VmEGXKWOoeAc0CpEzR1QNkjKodzgs
+tQj5oYbiiPG0SgCtBV4I1b/IuKzkjcLxQaF+8Rob/lzLBwA6pFjZNa6FcDjthmtH
+2pC+zI760sv05rbZGcXDj8G0SLsvbkrfiRIn/8LkgBpoTWpKfa8BmvYtt9WI/CYk
+beQYIwM9sXUPwRSD1VONSg5bXTW3Sxmzy3Yfy9RYt+suMKzi78oSv81e5BoL1D2H
+tfxSAFQbiJU3kipxvhsDggEGAAKCAQEArDidnkCegHb/itBTFeyGsebv+I8Z93V3
+jGcKPOs3s1wqB/+HRL5ERlhQOq/lfYPigUFKhfC8tlCVAM+MtUDqXCzqAkomw0yX
+8oVkp9plswxHKlqjzKr6PWLOJGp/NDBAL1ZcUzHB1omvmkUHy9pYiapVVNUuUdL2
+Z5EvDze8jQoiR0k9zgMKiH+MyCfV0tLo8W8djFJPlIM9Ypa7DH4fazcEfRuzq1jv
+K/uX4+HWmg3Nswdh5eysb++RqtJSUBtGT3tAQY59WjBf2nXMG0nkZGkT7TCJ6icv
+NdbSl1AlAGMV/nZN3PFsFH17L8uMUYS7V5PWiqQTxe5COHqpGumo9KN5MHcwHQYD
+VR0OBBYEFDrWNm+9we7UIIpUiKJ8aOrCviIUMB8GA1UdIwQYMBaAFHB/Lq6DaFmY
+BCMqzes+F80k3QFJMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwFQYD
+VR0RBA4wDIIKU2VydmVyIERTQTANBgkqhkiG9w0BAQsFAAOCAQEAsKn2puy5BLfg
+eVnxJiDOxYeHHB82GBZjzG4kmroWqP/yKGLQa0CWw/GNcP2zVNKZ12fzQJRRhiHd
+MohKKSHJlmKwP/6qXhRConlIVzVHdAQHxIS6rr/hwctUpX1lFvxd7hUOnwyOlvvq
+Qu0R8OIYZVmCdQuoM+nFek25TxUI160/6H7UhY4t2Y0iry+QjQCBLw/yHb2a3iQE
+Ho84MDYGNWauDK/rohSRm/CzPSqfZaFyykwRRE47x4XOmtQPRZCIaHSA7LsNqJ42
+OJRAv3kePiW4XSWAbVJ8gRHRFg9wjrMV8zBL00durls1mZVNbh81I3Bdu62y0lY0
+L6LYw0U7GQ==
+-----END CERTIFICATE-----
diff --git a/test/certs/server-dsa-key.pem b/test/certs/server-dsa-key.pem
new file mode 100644
index 000000000000..fdd1da299c77
--- /dev/null
+++ b/test/certs/server-dsa-key.pem
@@ -0,0 +1,15 @@
+-----BEGIN PRIVATE KEY-----
+MIICZQIBADCCAjoGByqGSM44BAEwggItAoIBAQD+P3LcpaA+AYu9M1gSsHi8fixl
+7VPCsKK96oaH7/ZJqvOD0TdASkn+4Td8SPvkc+KG2bBbmp39FCxGpa4d8CRLKVbI
+HAFtaKHIDFuMlPuFnsiaU0uWN/s3lROhAHWrTiODhehFM+NiPrAOJmtXQURBoeQ0
+7t4HoyKz7sUyTF2qotw1JDvBRb6JXw+13Z2a1iZGJopLZN3RicvoHee3rYEsM5AH
+MS3cntYX2NhQUHjiQ451iL2OkFJtVeaUoX5JV6KYSzz4lzNlYwJfF/Tzac/+l1aF
+A1NDbNFcQ1UC0JXscKeT/J2Wo8kRwpx042UKaayw5jkOv3GndgKCOaCe29UrAiEA
+h8hMJV/kKTLolNr6kV87KV8eTaJfrnSRS2E3ToOhWH0CggEBAOd/YKl8svYqvJtT
+haOsmVETeXwEvz/MLqpj4hZr029Oqps7z6OmeZ2er7aldxC5+BKMxCfPlhFo0iQ9
+XITp+J7UqS3qrRZqAnxMjd6VmEGXKWOoeAc0CpEzR1QNkjKodzgstQj5oYbiiPG0
+SgCtBV4I1b/IuKzkjcLxQaF+8Rob/lzLBwA6pFjZNa6FcDjthmtH2pC+zI760sv0
+5rbZGcXDj8G0SLsvbkrfiRIn/8LkgBpoTWpKfa8BmvYtt9WI/CYkbeQYIwM9sXUP
+wRSD1VONSg5bXTW3Sxmzy3Yfy9RYt+suMKzi78oSv81e5BoL1D2HtfxSAFQbiJU3
+kipxvhsEIgIgFadGQ61c3i/D01zXhSsKyE0/BerqJmTrrlVK1o0ZFu8=
+-----END PRIVATE KEY-----
diff --git a/test/certs/server-dsa-pubkey.pem b/test/certs/server-dsa-pubkey.pem
new file mode 100644
index 000000000000..e5b5e6a5af09
--- /dev/null
+++ b/test/certs/server-dsa-pubkey.pem
@@ -0,0 +1,20 @@
+-----BEGIN PUBLIC KEY-----
+MIIDSDCCAjoGByqGSM44BAEwggItAoIBAQD+P3LcpaA+AYu9M1gSsHi8fixl7VPC
+sKK96oaH7/ZJqvOD0TdASkn+4Td8SPvkc+KG2bBbmp39FCxGpa4d8CRLKVbIHAFt
+aKHIDFuMlPuFnsiaU0uWN/s3lROhAHWrTiODhehFM+NiPrAOJmtXQURBoeQ07t4H
+oyKz7sUyTF2qotw1JDvBRb6JXw+13Z2a1iZGJopLZN3RicvoHee3rYEsM5AHMS3c
+ntYX2NhQUHjiQ451iL2OkFJtVeaUoX5JV6KYSzz4lzNlYwJfF/Tzac/+l1aFA1ND
+bNFcQ1UC0JXscKeT/J2Wo8kRwpx042UKaayw5jkOv3GndgKCOaCe29UrAiEAh8hM
+JV/kKTLolNr6kV87KV8eTaJfrnSRS2E3ToOhWH0CggEBAOd/YKl8svYqvJtThaOs
+mVETeXwEvz/MLqpj4hZr029Oqps7z6OmeZ2er7aldxC5+BKMxCfPlhFo0iQ9XITp
++J7UqS3qrRZqAnxMjd6VmEGXKWOoeAc0CpEzR1QNkjKodzgstQj5oYbiiPG0SgCt
+BV4I1b/IuKzkjcLxQaF+8Rob/lzLBwA6pFjZNa6FcDjthmtH2pC+zI760sv05rbZ
+GcXDj8G0SLsvbkrfiRIn/8LkgBpoTWpKfa8BmvYtt9WI/CYkbeQYIwM9sXUPwRSD
+1VONSg5bXTW3Sxmzy3Yfy9RYt+suMKzi78oSv81e5BoL1D2HtfxSAFQbiJU3kipx
+vhsDggEGAAKCAQEArDidnkCegHb/itBTFeyGsebv+I8Z93V3jGcKPOs3s1wqB/+H
+RL5ERlhQOq/lfYPigUFKhfC8tlCVAM+MtUDqXCzqAkomw0yX8oVkp9plswxHKlqj
+zKr6PWLOJGp/NDBAL1ZcUzHB1omvmkUHy9pYiapVVNUuUdL2Z5EvDze8jQoiR0k9
+zgMKiH+MyCfV0tLo8W8djFJPlIM9Ypa7DH4fazcEfRuzq1jvK/uX4+HWmg3Nswdh
+5eysb++RqtJSUBtGT3tAQY59WjBf2nXMG0nkZGkT7TCJ6icvNdbSl1AlAGMV/nZN
+3PFsFH17L8uMUYS7V5PWiqQTxe5COHqpGumo9A==
+-----END PUBLIC KEY-----
diff --git a/test/certs/server-ecdsa-brainpoolP256r1-cert.pem b/test/certs/server-ecdsa-brainpoolP256r1-cert.pem
new file mode 100644
index 000000000000..bb41f9990740
--- /dev/null
+++ b/test/certs/server-ecdsa-brainpoolP256r1-cert.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICgzCCAWugAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE4MTAyNDEzNDUwOFoYDzIxMTgxMDI1MTM0NTA4WjAsMSowKAYDVQQD
+DCFTZXJ2ZXIgRUNEU0EgYnJhaW5wb29sUDI1NnIxIGNlcnQwWjAUBgcqhkjOPQIB
+BgkrJAMDAggBAQcDQgAETYDLIgpvvoxSBJxB5apcNrTZ0vYpVyG18hDEOplqkyln
+W7kekN9a83WtIwPRoSwhczgFg/MhvLZ/BHQJW2SU3qOBkTCBjjAdBgNVHQ4EFgQU
+it8K0UIpDYE264JfNmQ/44H1WMUwHwYDVR0jBBgwFoAUcH8uroNoWZgEIyrN6z4X
+zSTdAUkwCQYDVR0TBAIwADATBgNVHSUEDDAKBggrBgEFBQcDATAsBgNVHREEJTAj
+giFTZXJ2ZXIgRUNEU0EgYnJhaW5wb29sUDI1NnIxIGNlcnQwDQYJKoZIhvcNAQEL
+BQADggEBAKCEUMQlB+M6crHe2zfGmQJnsEGzY4fJUFYdFfOM359dXR8Xs+JHF2XP
+0BHJ64BHLzy+3eoa9w/B+/i6OVJo3VhCoCChcP+gnGzQVQy5Maxq55DlsVdpellS
+Tml/BnLcqcZFAP63qEpcuZuC4CytZcHYCU+NLI/3JGzH1/xHxk4UgRTa2B7OhjXt
+Ptl3vLaSqJXEmVeCP0hibhhiszs0zR14fJqmVn0V5MKC7twmG8CBlW03ksLjzzvn
+m7WAy7q5WcFcAcrFR3zAPqcx4UQSS9FiwJ+OOZGqIasMk9i9zxqh0ic5M5ls7Qaf
+roudyLLkkvDFkcb88RwYGKrdVFGDgF0=
+-----END CERTIFICATE-----
diff --git a/test/certs/server-ecdsa-brainpoolP256r1-key.pem b/test/certs/server-ecdsa-brainpoolP256r1-key.pem
new file mode 100644
index 000000000000..c9d233fa544b
--- /dev/null
+++ b/test/certs/server-ecdsa-brainpoolP256r1-key.pem
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBBwRtMGsCAQEEIKZSRhbD6lGhKbIm
+5JVgxnN8MHGB0whroUsSf0zmsAz+oUQDQgAETYDLIgpvvoxSBJxB5apcNrTZ0vYp
+VyG18hDEOplqkylnW7kekN9a83WtIwPRoSwhczgFg/MhvLZ/BHQJW2SU3g==
+-----END PRIVATE KEY-----
diff --git a/test/certs/server-ecdsa-cert.pem b/test/certs/server-ecdsa-cert.pem
new file mode 100644
index 000000000000..e61026b50789
--- /dev/null
+++ b/test/certs/server-ecdsa-cert.pem
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICYTCCAUmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE3MDExMjE0NDUwMVoYDzIxMTcwMTEzMTQ0NTAxWjAcMRowGAYDVQQD
+DBFTZXJ2ZXIgRUNEU0EgY2VydDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOI7
+NNxE483tJyIKT6KOQM5Zlfrigh12BEcHxnzpudgVHYA4aL5D5JulYGFzL0LQ5Q55
+GpCub1V2j+AhyBMKPQqjgYAwfjAdBgNVHQ4EFgQUSDzlr0Ayx22BljPtY6YRLTes
+qgwwHwYDVR0jBBgwFoAUcH8uroNoWZgEIyrN6z4XzSTdAUkwCQYDVR0TBAIwADAT
+BgNVHSUEDDAKBggrBgEFBQcDATAcBgNVHREEFTATghFTZXJ2ZXIgRUNEU0EgY2Vy
+dDANBgkqhkiG9w0BAQsFAAOCAQEAOJDgr1hRNuxW1D93yDWFwP1o2KuaI0BMZVFS
+6rzzLThCo3FeS6X7DCrBP699PCYcKeyMDmQwg9mVMABSZzox2GBO3hoqtnUXjsK3
+Qxh+4O5EmIXX4v8szdSBP14O2c5krAk4lbVWxLHE78NAc8dL94VORndyTcmaXUTn
+FQeBaRJjXto3okPvwYlczPS9sq0AhuBh5hwsLOYwpLf6/loPLjl40iwPQ+iqQ1EV
+m0Sac3o+0qI0cKiz4nXgd4NkFvV3G8lwd0Um8KSS/EFuZbgJNKKD6+1+90sibM4a
+Y/JiO6weK/VTlqCLn7zV9LcDT4gU18UCn85UV1XlVYKXZlaXYQ==
+-----END CERTIFICATE-----
diff --git a/test/certs/server-ecdsa-key.pem b/test/certs/server-ecdsa-key.pem
new file mode 100644
index 000000000000..b4d075db139f
--- /dev/null
+++ b/test/certs/server-ecdsa-key.pem
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTI5Nzy/YCNpEuATr
+6jFtuZA5Vs15zbXOJU5EXl+JAe6hRANCAATiOzTcROPN7SciCk+ijkDOWZX64oId
+dgRHB8Z86bnYFR2AOGi+Q+SbpWBhcy9C0OUOeRqQrm9Vdo/gIcgTCj0K
+-----END PRIVATE KEY-----
diff --git a/test/certs/server-ed25519-cert.pem b/test/certs/server-ed25519-cert.pem
new file mode 100644
index 000000000000..729ccfbd06f1
--- /dev/null
+++ b/test/certs/server-ed25519-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICHTCCAQWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE3MDYxNDIzMzExOVoYDzIxMTcwNjE1MjMzMTE5WjASMRAwDgYDVQQD
+DAdFZDI1NTE5MCowBQYDK2VwAyEACkEMj+SRLjZSth3SIrG013cyYVN9frrVnfbN
+M2IqaT6jdjB0MB0GA1UdDgQWBBQqd22ipNHF0d+yJjFDgI/Jruq3rjAfBgNVHSME
+GDAWgBRwfy6ug2hZmAQjKs3rPhfNJN0BSTAJBgNVHRMEAjAAMBMGA1UdJQQMMAoG
+CCsGAQUFBwMBMBIGA1UdEQQLMAmCB0VkMjU1MTkwDQYJKoZIhvcNAQELBQADggEB
+AIdNMPRa2sgUW/qtCBWxmi0iVRoazl5pjU35cRl/ahBpI4pL5+fDVYuBzSOgEh7W
+6FUVix9mGvY9CK3ZkqrXCGRKeWnKrmdql5jrra5Qew43B+aZqa63639TGWqtm7Rk
+rWT14P7gma4K9Ea8eiXcT5NJ8sT7D2BOL0sL2alUmRT+k3YDUxiih7AiTkpo7f2Q
+x5l9f8qoRb6Skec+kuMQ4hIjBIe/3C+j4nqq9kDkJs8+VEaW7+7shSQzv0tnzBOl
+v5ty89x7LYAbGKvZNi8Z3814AWBWbYTskF0kW2/f6aZDpt239llYDazdErU1dEsS
+cc1gKHOG3zgz9wfih55M0dE=
+-----END CERTIFICATE-----
diff --git a/test/certs/server-ed25519-key.pem b/test/certs/server-ed25519-key.pem
new file mode 100644
index 000000000000..f9f150e0541c
--- /dev/null
+++ b/test/certs/server-ed25519-key.pem
@@ -0,0 +1,3 @@
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEINa5/E1IzuSLg1rwoHxl1VV7BdcnmMeul9pvsvzKorjm
+-----END PRIVATE KEY-----
diff --git a/test/certs/server-ed448-cert.pem b/test/certs/server-ed448-cert.pem
new file mode 100644
index 000000000000..ba050077c3e0
--- /dev/null
+++ b/test/certs/server-ed448-cert.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBlTCCARWgAwIBAgIBAjAFBgMrZXEwFTETMBEGA1UEAwwKUm9vdCBFZDQ0ODAg
+Fw0yMDAyMDkxMzMwMjJaGA8yMTIwMDIxMDEzMzAyMlowEDEOMAwGA1UEAwwFZWQ0
+NDgwQzAFBgMrZXEDOgAQYnGJYRtbNwKBuQRZmN6+dJSc40KBEeM8LonhHkE7ysSx
+FdOrxoe/VFjuskORcapsbzNRf18O0QCjdDByMB0GA1UdDgQWBBQMGtS+Jt6cAPPi
+BCeyv+Is64ySBzAfBgNVHSMEGDAWgBRWDZpD7KFVGE65bWXX2O2DF9OCPzAJBgNV
+HRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMBAGA1UdEQQJMAeCBWVkNDQ4MAUG
+AytlcQNzABLGZiaU6JPKa9eQ/VsE4HN9XjSogZBKIEHEWwyxrtGvjWiZ5MOnNJmQ
+7mX+Y2eJzfZ6MGHc63IlgPdIPFPzInnnAugw297kUNoLTg9SsGYeVGLbI3PNjwFL
+mQ3508f1Jobb8qZnf8YFUZrd85aurgoKAA==
+-----END CERTIFICATE-----
diff --git a/test/certs/server-ed448-key.pem b/test/certs/server-ed448-key.pem
new file mode 100644
index 000000000000..25a750fec806
--- /dev/null
+++ b/test/certs/server-ed448-key.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOTiHqANC9pFHbs8VAeqZ52cwKi0jPTSM5GjsKW4vbgG6
+BMFSdURqGj2FD02H7xsyrR20pIXI1GbE+A==
+-----END PRIVATE KEY-----
diff --git a/test/certs/server-pss-cert.pem b/test/certs/server-pss-cert.pem
new file mode 100644
index 000000000000..5777c4d29666
--- /dev/null
+++ b/test/certs/server-pss-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDGzCCAgOgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE3MDkxNDEyNTg0MVoYDzIxMTcwOTE1MTI1ODQxWjAVMRMwEQYDVQQD
+DApSU0FTU0EtUFNTMIIBIDALBgkqhkiG9w0BAQoDggEPADCCAQoCggEBAJzIk36B
+urRLuRWsMHUzcmoNDYEZw4VMN0ZNVGUYj7RJtCP6wKBcQEkHu667J3XGxUm3RHT8
+EBv2R+XKcVX+VOc8SSb5+k1/QCHXF1qamNFan7wtYjgbAXiA0/Wg9ydlhfwj5gp4
+n5168Lc/DnkFBdyMSylNOESUvtKyu811l+ecakeidUbUnLGF2XbqyK1WKp18t1n1
+rJYi/+oMm8xoJPMtWjoC2zit3wT1k8+9lClxWZFhLmDFy0lmT8FAVvMOk4Y/E+2e
+Q0sRrV+REsfyFEoytmoGKlwO9z2gK5n3WaJx+Y15EykMG6CsjBp84iCiFkd6LOND
+nXQBBLAvmg1Ci8UCAwEAAaN5MHcwHQYDVR0OBBYEFG+1oaEnl3Bs6E2vHFdWwUY0
+qdlhMB8GA1UdIwQYMBaAFHB/Lq6DaFmYBCMqzes+F80k3QFJMAkGA1UdEwQCMAAw
+EwYDVR0lBAwwCgYIKwYBBQUHAwEwFQYDVR0RBA4wDIIKUlNBU1NBLVBTUzANBgkq
+hkiG9w0BAQsFAAOCAQEAh1MrKKwdpsjT7Q+gfyAXQRgwBz15m08eZip7rznzieE0
++PuXaGQT9jOEmSKTtEHd07mJ0YMijdGvItrZaodUV0rscdCFd4lUe4uctirjVMIU
+OKALZ7HsobWvKWnob2GRQJ/vTB7plUeclFhX1FskiG7kh50cMeeL2Oy7Oy4csf7e
+2ab5q1dYri1Yk7HSi/XXGwomvWz8jGqUS9UGJrQQENrogg5Ue315u32lbR+N7gTB
+7w3KirvpP+wzJgiTqMJ9BuGo8vSoXA3qrmBaYS/FQ7x4gQ86Jb0oLRuTiyniWC/v
+A4exY19iM/j6/IQWM4IY7iuNAU3DMGdXOHkuxryizA==
+-----END CERTIFICATE-----
diff --git a/test/certs/server-pss-key.pem b/test/certs/server-pss-key.pem
new file mode 100644
index 000000000000..6b2d8cc7a287
--- /dev/null
+++ b/test/certs/server-pss-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAnMiTfoG6tEu5Faww
+dTNyag0NgRnDhUw3Rk1UZRiPtEm0I/rAoFxASQe7rrsndcbFSbdEdPwQG/ZH5cpx
+Vf5U5zxJJvn6TX9AIdcXWpqY0VqfvC1iOBsBeIDT9aD3J2WF/CPmCnifnXrwtz8O
+eQUF3IxLKU04RJS+0rK7zXWX55xqR6J1RtScsYXZdurIrVYqnXy3WfWsliL/6gyb
+zGgk8y1aOgLbOK3fBPWTz72UKXFZkWEuYMXLSWZPwUBW8w6Thj8T7Z5DSxGtX5ES
+x/IUSjK2agYqXA73PaArmfdZonH5jXkTKQwboKyMGnziIKIWR3os40OddAEEsC+a
+DUKLxQIDAQABAoIBAAGf1l9eKrgJfM5rrUjZkprkrbojsTHlW0FANdqiSYLdrJ8e
+zvYaXpQjH1+tEriWqZ6c5nmrzuLrR01rLodsjiajKkLcHirFYb24A8btiR3KKZOC
+iNz58qbz9r45v7XJyHyXRp/fJhA0oN/VKGo6khf54CF6alXTkLKQJX/4cu10XkJd
+lknXMiQsGBzt7WezRzqzbJsMSjhSPBowmapDRYqALIlINY96f3QUALiKh0WwkbEB
+MU71Hharv9+jwpu58NcGXHvNfqQYUU6QTXiOKTxt71VChO6lefazaTrCYan9Zpx/
+6rofVqkpZUebNI1gVa/FbzGaMhQYlMWEhvk+sZUCgYEAzftGwnoHbMoyXbw30bAJ
+MMEvc892o2qJPPnHJMwKIHDVEnY026c/TO5FSGhKcv9CPKe6bcdA6CtPjSGA484z
+ErLo9GfWigN4jVkn3eYKUKFn0+tQ4HKYoPZrBApQ9pm25/KpPSIsVJ6iuEN72CZU
+MM1y8NgCF2IlAvi04org8e8CgYEAwtrufdryJHQ+o69fhCMfYe1mCCuGeaueIEfa
+ccZUSfe1A7p5mqSjYTw4GW6E64uELUkVGkZpuVj3Qwr2BmCY7u4Hgp5Lg+WWVZt7
+qvHhDnb19ITL1nrXAKBr2XPlkUSnPJ+Dl20F8ErIb4zsnq7xH+AoDIZldh/wCflY
+mW7mwYsCgYEAxKs8vocg+8B7IoCJk05PGBv8IMlfb1xTOMMMX5fpu1vANWZjxa4E
+hIGj6SSaoP4T0jIbkKGE2agwxoHMvLWukhX80w8qCpCR0/PiWr4/7wiNSAwQJp2E
+GXvuZecrsqjFuOU6rcIpLYphtynH33OJQyeGrWqxZH4y9IlevEb5zEUCgYEAudis
+PVeVOdWxZNdAp7wEE5ekiEhTMzrPT4SYwYljHUVn3Y1+rFM5DOWtr/vsROhFghfB
+S9U6wzAqbURIER8S3lgiy58E8WEJeM8aLZoTiINH5Ra/f+qbpBpdowJaQ6qSQ0z0
+6nluf5gkAdkMWfELQ9a8++03WmntvOWYbocLCi8CgYASTpxnjl62YY201mIkVAKC
+b6XK+RQS2ZohTintLqzePwKR3XJrlwAz9smyMqUTFklkmrc6XQABVfnpZOnOZEdV
+kzsvLmQin9a9Mr6n1WYz9YQDuS2wY0NAbCzy61YYXO9IdNyQTWolWLmyzwpUXP/D
+T28vNzPfGv4WW1OjDtFmQg==
+-----END PRIVATE KEY-----
diff --git a/test/certs/server-pss-restrict-cert.pem b/test/certs/server-pss-restrict-cert.pem
new file mode 100644
index 000000000000..273363808a98
--- /dev/null
+++ b/test/certs/server-pss-restrict-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDYjCCAkqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE5MDgwODEwNDMxMFoYDzIxMTkwODA5MTA0MzEwWjAUMRIwEAYDVQQD
+DAlsb2NhbGhvc3QwggFSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIBoRow
+GAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgA4IBDwAwggEKAoIBAQDDlygk
+sUEAajpdVquo9XIAyTd9ZJ+55hNmhBfhn3lHz3ryPD+0XlgCE9qsKwfR7iYaqmnN
+ilQnsxWpMGXAgOlC1+w5zh8qHvrI5wX+A6U9N8leIOSgFuFNP0FMMG7I677QzRxG
+FqKX1o4V73JWqnHCfnfHRyZY9xM0tYbJKNbRO7Hy4jKBPl3ptPHUoTltr4WYTOpg
+stcEamdiiif+0U4bQvVltNg9pzFEjkAktTUGn92W5CgLnsbPXxBo6a/kUlHcgmhY
+bpOXEjCPufZLgsQo8iF2Bq8eWMEsByjr0chQjzrfZAUVtD8Hmh2uMVAPQFAHUkaL
+j2tHukL+s9tAaWKNAgMBAAGjgY4wgYswHQYDVR0OBBYEFLqlLFaNrS8hbX6voiGi
+AfMYfsivMB8GA1UdIwQYMBaAFHB/Lq6DaFmYBCMqzes+F80k3QFJMAkGA1UdEwQC
+MAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwKQYDVR0RBCIwIIIeU2VydmVyIFJTQS1Q
+U1MgcmVzdHJpY3RlZCBjZXJ0MA0GCSqGSIb3DQEBCwUAA4IBAQAEhm9Skn2XfEZo
+Q+YMu6HIQZovRT3IljHvesjIby7KfS86SU4r+CG7qaPLw7jeIR92YMnihnaXRGGJ
+POixpHY6gapEzR2Sqg7c0ApGenDZ3uKnBUjf9LEorPmhrEHUsnHREXoPx5Lt5Nh/
+7WRNB/GKvbnAby+5HQBOvU6P8t37/zK1JjJhGNv0uvaYthQGk3r6nEhQG+O6JBSw
+H/auU4ClIB4fg8GWaMuupN5VMNP9mxpL9tONH8QRKs+KIQWMOsr83rOKwSHrrkIL
+/vDI5hPj9RHvjjta6FQx140wA6c8ZB59x9YIv1alJWf6s3+TM8bv70L/aBBT8+IM
+vwjUz9Gp
+-----END CERTIFICATE-----
diff --git a/test/certs/server-pss-restrict-key.pem b/test/certs/server-pss-restrict-key.pem
new file mode 100644
index 000000000000..65032269c1e4
--- /dev/null
+++ b/test/certs/server-pss-restrict-key.pem
@@ -0,0 +1,29 @@
+-----BEGIN PRIVATE KEY-----
+MIIE7wIBADA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3
+DQEBCDALBglghkgBZQMEAgGiAwIBIASCBKkwggSlAgEAAoIBAQDDlygksUEAajpd
+Vquo9XIAyTd9ZJ+55hNmhBfhn3lHz3ryPD+0XlgCE9qsKwfR7iYaqmnNilQnsxWp
+MGXAgOlC1+w5zh8qHvrI5wX+A6U9N8leIOSgFuFNP0FMMG7I677QzRxGFqKX1o4V
+73JWqnHCfnfHRyZY9xM0tYbJKNbRO7Hy4jKBPl3ptPHUoTltr4WYTOpgstcEamdi
+iif+0U4bQvVltNg9pzFEjkAktTUGn92W5CgLnsbPXxBo6a/kUlHcgmhYbpOXEjCP
+ufZLgsQo8iF2Bq8eWMEsByjr0chQjzrfZAUVtD8Hmh2uMVAPQFAHUkaLj2tHukL+
+s9tAaWKNAgMBAAECggEBAIzgfwWOtmb6HHfGSXY085wlUlZ696EKWsboNdtI5i4W
+/1Mimi/sFC/K5SJFDCjlA4UJYZOuItdFYkCun1t8foaqx3cLQ98u2SuDWwmOzqG9
+YMjvoDy+viDJgtrBt8n4I0R5t/ezrgD3hPe/s/dAZRfVx6g9Ux2ZOLgqV57kT3X7
+6paEz3jrIMvuoXQCsi9Qh+eJQ23/sAcc7OHQ7uD8QJVudEBnSHQ+ttvOPXhr7tba
+8NuNVa6E/KewkKHRAZqBTJolCVyPtWmvfaDwdJtunCvyR1w3Rv1adZLK4YRFz+vc
+sOMK+K1c2aojA+/Fnba19inNq13j6Dwqmq8Ho7MZwHECgYEA6aSx7/93S1VGpxQ9
+KqFE4Fy9ylliC/hanc9qOcfEIo0tDus9lfpuPp+aOXML0msVkIfhCnaru32qtnaI
+AQkIbPhSZFvC/i6BibpArXINbDzTS/46zZHehXskjWFGw+iRm/YI7MBuCmWzSnFO
+YUwSKRIPKZKyXswFzP8RsQO/QbsCgYEA1k5SamQheuKdo/X40ShWTTOoDlpL4Sir
+b2zTnEqlHyMv8c7w880hPf4P+0pqrKyf7jmEykJvp1qSAmyMUCWzrKTr8gQ2sMyb
+zj90cEm++M5YIQh5lPJy4pGqmCliJXqkt+zT1xmnRASwMNQOnU2bBmXkve/ofb4M
+dEwyig/nZFcCgYBLWPilTD6dhce+NBGxwMZkkKQIMKEk+RfIEs7QCXNgLSUdzZFT
+36pT+caTxl1Go5AVxyw04qZpVZKLO1iK9O3Jrp9rjAgrTrYpw23+QWzAvjDqLfeq
+ueMIKvlTus5GeacTo9mm+DvEkJ2sYTQEvrKQmilXn950IdmxDYUYD/xK5wKBgQDQ
+5ON9BUGFUSQsUHVLG7CT7EhiRS41ubjyEfhrHm+53Ei9weQpIcjHbsERR8aXrmTu
+h26i4QOI88XjSv+ymC19mfzLmcPdrnQpJL1RPvFCAZDyEhrBT1sg8rCBRcV/lv68
+scMEpuLecFt2HR5pwt3b7LJ9Wj8bYoctTaDt5va8XQKBgQDCr4hZB5haAcKmNm/g
+PjlaLdrDEIuuBjxMzX1t3PXwsEene1cE731v6fbmrDUa8AuJyMY80xhGrTTDQfS3
+QOu/6wtcUv/JC/06OwEaUlT/kdYek+zYfBm3b1sKP3HVKSxCLTcPcC4aQoAFqbEy
+3kuSVh03vVBdaP//qMPyeue17w==
+-----END PRIVATE KEY-----
diff --git a/test/certs/server-trusted.pem b/test/certs/server-trusted.pem
new file mode 100644
index 000000000000..7508cfff5402
--- /dev/null
+++ b/test/certs/server-trusted.pem
@@ -0,0 +1,20 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDJTCCAg2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNDIyMjk0NloYDzIxMTYwMTE1MjIyOTQ2WjAZMRcwFQYDVQQD
+DA5zZXJ2ZXIuZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ANVdYGrf/GHuSKqMEUhDpW22Ul2qmEmxYZI1sfw6BCUMbXn/tNXJ6VwcO+Crs7h9
+o95tveDd11q/FEcRQl6mgtBhwX/dE0bmCYUHDvLU/Bpk0gqtIKsga5bwrczEGVNV
+3AEdpLPvirRJU12KBRzx3OFEv8XX4ncZV1yXC3XuiENxD8pswbSyUKd3RmxYDxG/
+8XYkWq45QrdRZynh0FUwbxfkkeqt+CjCQ2+iZKn7nZiSYkg+6w1PgkqK/z9y7pa1
+rqHBmLrvfZB1bf9aUp6r9cB+0IdD24UHBw99OHr90dPuZR3T6jlqhzfuStPgDW71
+cKzCvfFu85KVXqnwoWWVk40CAwEAAaN9MHswHQYDVR0OBBYEFMDnhL/oWSczELBS
+T1FSLwbWwHrNMB8GA1UdIwQYMBaAFHB/Lq6DaFmYBCMqzes+F80k3QFJMAkGA1Ud
+EwQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4
+YW1wbGUwDQYJKoZIhvcNAQELBQADggEBAHvTBEN1ig8RrsT716Ginv4gGNX0LzGI
+RrZ1jO7lm5emuaPNYJpGw0iX5Zdo91qGNXPZaZ75X3S55pQTActq3OPEBOll2pyk
+iyjz+Zp/v5cfRZLlBbFW5gv2R94eibYr4U3fSn4B0yPcl4xH/l/HzJhGDsSDW8qK
+8VIJvmvsPwmL0JMCv+FR59F+NFYZdND/KCXet59WUpF9ICmFCoBEX3EyJXEPwhbi
+X2sdPzJbCjx0HLli8e0HUKNttLQxCsBTRGo6iISLLamwN47mGDa9miBADwGSiz2q
+YeeuLO02zToHhnQ6KbPXOrQAqcL1kngO4g+j/ru+4AZThFkdkGnltvkwDDAKBggr
+BgEFBQcDAQ==
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/servercert.pem b/test/certs/servercert.pem
new file mode 100644
index 000000000000..cc17d3ffab4b
--- /dev/null
+++ b/test/certs/servercert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDJTCCAg2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNDIyMjk0NloYDzIxMTYwMTE1MjIyOTQ2WjAZMRcwFQYDVQQD
+DA5zZXJ2ZXIuZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ANVdYGrf/GHuSKqMEUhDpW22Ul2qmEmxYZI1sfw6BCUMbXn/tNXJ6VwcO+Crs7h9
+o95tveDd11q/FEcRQl6mgtBhwX/dE0bmCYUHDvLU/Bpk0gqtIKsga5bwrczEGVNV
+3AEdpLPvirRJU12KBRzx3OFEv8XX4ncZV1yXC3XuiENxD8pswbSyUKd3RmxYDxG/
+8XYkWq45QrdRZynh0FUwbxfkkeqt+CjCQ2+iZKn7nZiSYkg+6w1PgkqK/z9y7pa1
+rqHBmLrvfZB1bf9aUp6r9cB+0IdD24UHBw99OHr90dPuZR3T6jlqhzfuStPgDW71
+cKzCvfFu85KVXqnwoWWVk40CAwEAAaN9MHswHQYDVR0OBBYEFMDnhL/oWSczELBS
+T1FSLwbWwHrNMB8GA1UdIwQYMBaAFHB/Lq6DaFmYBCMqzes+F80k3QFJMAkGA1Ud
+EwQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4
+YW1wbGUwDQYJKoZIhvcNAQELBQADggEBAHvTBEN1ig8RrsT716Ginv4gGNX0LzGI
+RrZ1jO7lm5emuaPNYJpGw0iX5Zdo91qGNXPZaZ75X3S55pQTActq3OPEBOll2pyk
+iyjz+Zp/v5cfRZLlBbFW5gv2R94eibYr4U3fSn4B0yPcl4xH/l/HzJhGDsSDW8qK
+8VIJvmvsPwmL0JMCv+FR59F+NFYZdND/KCXet59WUpF9ICmFCoBEX3EyJXEPwhbi
+X2sdPzJbCjx0HLli8e0HUKNttLQxCsBTRGo6iISLLamwN47mGDa9miBADwGSiz2q
+YeeuLO02zToHhnQ6KbPXOrQAqcL1kngO4g+j/ru+4AZThFkdkGnltvk=
+-----END CERTIFICATE-----
diff --git a/test/certs/serverkey.pem b/test/certs/serverkey.pem
new file mode 100644
index 000000000000..0d7e4049fdc9
--- /dev/null
+++ b/test/certs/serverkey.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVXWBq3/xh7kiq
+jBFIQ6VttlJdqphJsWGSNbH8OgQlDG15/7TVyelcHDvgq7O4faPebb3g3ddavxRH
+EUJepoLQYcF/3RNG5gmFBw7y1PwaZNIKrSCrIGuW8K3MxBlTVdwBHaSz74q0SVNd
+igUc8dzhRL/F1+J3GVdclwt17ohDcQ/KbMG0slCnd0ZsWA8Rv/F2JFquOUK3UWcp
+4dBVMG8X5JHqrfgowkNvomSp+52YkmJIPusNT4JKiv8/cu6Wta6hwZi6732QdW3/
+WlKeq/XAftCHQ9uFBwcPfTh6/dHT7mUd0+o5aoc37krT4A1u9XCswr3xbvOSlV6p
+8KFllZONAgMBAAECggEADLTt7A+A2Vg2jamf0dztejY0e42QWjstI2b9PZc67fXq
+gyx+WYkX07t+uWegYWliG/oPJ9guXiIpE/5sJHToL37S5kmFP2CtynVcJ4wVo4DD
+nY0n9+kLX0bgIuS+2V6wpoRcbbbjXM9NHrH8kfe5ftT4UtEDlLI2qLX6IcDd7p4u
+OYjILChR8GSGTw96yIy2Ws/1Uq9PMw64JoT4RcK5QqnkcPMDFRH1SeLOL+zXP2c4
+nEl9yOy3HauZKxwl/Ry/XK1s3DdjopIAU29ut+hAuMiTb06kzZnumL9NoplKoZtU
+otw/gVcCKhT+Ep+p6i8InLF0XEME8A0qUR0niWebgQKBgQD6vkxR49B8ZZQrzjw4
+XKs1lI9cP7cgPiuWlDHMNjYou3WbOaGrMeScvbB1Ldh9A8pjAhxlw8AaV/xs4qcA
+trmVmSISVMVyc1wSGlJXWi2nUzTNs9OE3vj22SyStihf8UUZtWwX2b5Y4JrYhA/V
++ThGGqHR03oLNLShNLtJc2c7YQKBgQDZ1nkibEyrepexw/fnwkw61IJKq9wRIh1G
+PREakhbe9wU5ie0knuf9razt7awzQiwFmlixmWqsM7UEtLuXNnNPciwdrKhhbvrd
+vD/rkbIEHEPllIhFlDtOzn3hRBWTzWmXFjpou/2LvHTSbVis4IYVZymTp2jb1ZLs
+7VbiG9JTrQKBgQDc6n75g1szzpdehQT/r33U5j/syeJBUSU8NPMu9fB/sLHsgjlT
+SNEf2+y1QSBE/Or6kmiMrIv7advn30W+Vj9qc5HWTsPrk4HiHTjA553jl2alebN5
+lK4LZspjtIQcC8mS3goPdXPEgJdM/gWpwzr2YQ6DfOxBJT2j7n64NyoT4QKBgH7/
+yx+GhCx1DHtXBPDZFhg2TL+78lEK0oZgk9gp06up2CHzh44SFq6O0oLkTcCUk5Ww
+poTkLIy4mJBlzfgahp+KsK2cO46SZS9g0ONFzcMXt33hWpE2Gl2XhUwPpYTF/QlY
+rDTjZK5S8Mi9dzVSsNlJi7PJphiEK2R1+nFYRwcBAoGBANWoIG85jpXAOnq/Kcgx
+Rl3YivR0Ke6r1tFlP58rT7X3EkiboXyQl5vLIFCAwUte6RGrLl1dy3Qyh80B9ySL
+Jx6vj42CK7vgv6A96TuVYhnXTnEI6ZvwAQ2VGaw4BizhjALs/kdSE/og9aSCs3ws
+KQypwAFz0tbHxaNag/bSAN0J
+-----END PRIVATE KEY-----
diff --git a/test/certs/setup.sh b/test/certs/setup.sh
new file mode 100755
index 000000000000..76ceadc7d8de
--- /dev/null
+++ b/test/certs/setup.sh
@@ -0,0 +1,448 @@
+#! /bin/bash
+
+# Primary root: root-cert
+./mkcert.sh genroot "Root CA" root-key root-cert
+# root cert variants: CA:false, key2, DN2, expired
+./mkcert.sh genss "Root CA" root-key root-nonca
+./mkcert.sh genroot "Root CA" root-key2 root-cert2
+./mkcert.sh genroot "Root Cert 2" root-key root-name2
+DAYS=-1 ./mkcert.sh genroot "Root CA" root-key root-expired
+# cross root and root cross cert
+./mkcert.sh genroot "Cross Root" cross-key cross-root
+./mkcert.sh genca "Root CA" root-key root-cross-cert cross-key cross-root
+# trust variants: +serverAuth -serverAuth +clientAuth -clientAuth
+openssl x509 -in root-cert.pem -trustout \
+ -addtrust serverAuth -out root+serverAuth.pem
+openssl x509 -in root-cert.pem -trustout \
+ -addreject serverAuth -out root-serverAuth.pem
+openssl x509 -in root-cert.pem -trustout \
+ -addtrust clientAuth -out root+clientAuth.pem
+openssl x509 -in root-cert.pem -trustout \
+ -addreject clientAuth -out root-clientAuth.pem
+# trust variants: +anyEKU -anyEKU
+openssl x509 -in root-cert.pem -trustout \
+ -addtrust anyExtendedKeyUsage -out root+anyEKU.pem
+openssl x509 -in root-cert.pem -trustout \
+ -addreject anyExtendedKeyUsage -out root-anyEKU.pem
+# root-cert2 trust variants: +serverAuth -serverAuth +clientAuth
+openssl x509 -in root-cert2.pem -trustout \
+ -addtrust serverAuth -out root2+serverAuth.pem
+openssl x509 -in root-cert2.pem -trustout \
+ -addreject serverAuth -out root2-serverAuth.pem
+openssl x509 -in root-cert2.pem -trustout \
+ -addtrust clientAuth -out root2+clientAuth.pem
+# root-nonca trust variants: +serverAuth +anyEKU
+openssl x509 -in root-nonca.pem -trustout \
+ -addtrust serverAuth -out nroot+serverAuth.pem
+openssl x509 -in root-nonca.pem -trustout \
+ -addtrust anyExtendedKeyUsage -out nroot+anyEKU.pem
+
+# Root CA security level variants:
+# MD5 self-signature
+OPENSSL_SIGALG=md5 \
+./mkcert.sh genroot "Root CA" root-key root-cert-md5
+# 768-bit key
+OPENSSL_KEYBITS=768 \
+./mkcert.sh genroot "Root CA" root-key-768 root-cert-768
+
+# primary client-EKU root: croot-cert
+./mkcert.sh genroot "Root CA" root-key croot-cert clientAuth
+# trust variants: +serverAuth -serverAuth +clientAuth -clientAuth +anyEKU -anyEKU
+openssl x509 -in croot-cert.pem -trustout \
+ -addtrust serverAuth -out croot+serverAuth.pem
+openssl x509 -in croot-cert.pem -trustout \
+ -addreject serverAuth -out croot-serverAuth.pem
+openssl x509 -in croot-cert.pem -trustout \
+ -addtrust clientAuth -out croot+clientAuth.pem
+openssl x509 -in croot-cert.pem -trustout \
+ -addreject clientAuth -out croot-clientAuth.pem
+openssl x509 -in croot-cert.pem -trustout \
+ -addtrust anyExtendedKeyUsage -out croot+anyEKU.pem
+openssl x509 -in croot-cert.pem -trustout \
+ -addreject anyExtendedKeyUsage -out croot-anyEKU.pem
+
+# primary server-EKU root: sroot-cert
+./mkcert.sh genroot "Root CA" root-key sroot-cert serverAuth
+# trust variants: +serverAuth -serverAuth +clientAuth -clientAuth +anyEKU -anyEKU
+openssl x509 -in sroot-cert.pem -trustout \
+ -addtrust serverAuth -out sroot+serverAuth.pem
+openssl x509 -in sroot-cert.pem -trustout \
+ -addreject serverAuth -out sroot-serverAuth.pem
+openssl x509 -in sroot-cert.pem -trustout \
+ -addtrust clientAuth -out sroot+clientAuth.pem
+openssl x509 -in sroot-cert.pem -trustout \
+ -addreject clientAuth -out sroot-clientAuth.pem
+openssl x509 -in sroot-cert.pem -trustout \
+ -addtrust anyExtendedKeyUsage -out sroot+anyEKU.pem
+openssl x509 -in sroot-cert.pem -trustout \
+ -addreject anyExtendedKeyUsage -out sroot-anyEKU.pem
+
+# Primary intermediate ca: ca-cert
+./mkcert.sh genca "CA" ca-key ca-cert root-key root-cert
+# ca variants: CA:false, no bc, key2, DN2, issuer2, expired
+./mkcert.sh genee "CA" ca-key ca-nonca root-key root-cert
+./mkcert.sh gen_nonbc_ca "CA" ca-key ca-nonbc root-key root-cert
+./mkcert.sh genca "CA" ca-key2 ca-cert2 root-key root-cert
+./mkcert.sh genca "CA2" ca-key ca-name2 root-key root-cert
+./mkcert.sh genca "CA" ca-key ca-root2 root-key2 root-cert2
+DAYS=-1 ./mkcert.sh genca "CA" ca-key ca-expired root-key root-cert
+# trust variants: +serverAuth, -serverAuth, +clientAuth, -clientAuth
+openssl x509 -in ca-cert.pem -trustout \
+ -addtrust serverAuth -out ca+serverAuth.pem
+openssl x509 -in ca-cert.pem -trustout \
+ -addreject serverAuth -out ca-serverAuth.pem
+openssl x509 -in ca-cert.pem -trustout \
+ -addtrust clientAuth -out ca+clientAuth.pem
+openssl x509 -in ca-cert.pem -trustout \
+ -addreject clientAuth -out ca-clientAuth.pem
+# trust variants: +anyEKU, -anyEKU
+openssl x509 -in ca-cert.pem -trustout \
+ -addtrust anyExtendedKeyUsage -out ca+anyEKU.pem
+openssl x509 -in ca-cert.pem -trustout \
+ -addreject anyExtendedKeyUsage -out ca-anyEKU.pem
+# ca-nonca trust variants: +serverAuth, +anyEKU
+openssl x509 -in ca-nonca.pem -trustout \
+ -addtrust serverAuth -out nca+serverAuth.pem
+openssl x509 -in ca-nonca.pem -trustout \
+ -addtrust anyExtendedKeyUsage -out nca+anyEKU.pem
+
+# Intermediate CA security variants:
+# MD5 issuer signature,
+OPENSSL_SIGALG=md5 \
+./mkcert.sh genca "CA" ca-key ca-cert-md5 root-key root-cert
+openssl x509 -in ca-cert-md5.pem -trustout \
+ -addtrust anyExtendedKeyUsage -out ca-cert-md5-any.pem
+# Issuer has 768-bit key
+./mkcert.sh genca "CA" ca-key ca-cert-768i root-key-768 root-cert-768
+# CA has 768-bit key
+OPENSSL_KEYBITS=768 \
+./mkcert.sh genca "CA" ca-key-768 ca-cert-768 root-key root-cert
+# EC cert with explicit curve
+./mkcert.sh genca "CA" ca-key-ec-explicit ca-cert-ec-explicit root-key root-cert
+# EC cert with named curve
+./mkcert.sh genca "CA" ca-key-ec-named ca-cert-ec-named root-key root-cert
+
+# client intermediate ca: cca-cert
+./mkcert.sh genca -p clientAuth "CA" ca-key cca-cert root-key root-cert
+# trust variants: +serverAuth, -serverAuth, +clientAuth, -clientAuth, +anyEKU, -anyEKU
+openssl x509 -in cca-cert.pem -trustout \
+ -addtrust serverAuth -out cca+serverAuth.pem
+openssl x509 -in cca-cert.pem -trustout \
+ -addreject serverAuth -out cca-serverAuth.pem
+openssl x509 -in cca-cert.pem -trustout \
+ -addtrust clientAuth -out cca+clientAuth.pem
+openssl x509 -in cca-cert.pem -trustout \
+ -addreject clientAuth -out cca-clientAuth.pem
+openssl x509 -in cca-cert.pem -trustout \
+ -addtrust anyExtendedKeyUsage -out cca+anyEKU.pem
+openssl x509 -in cca-cert.pem -trustout \
+ -addreject anyExtendedKeyUsage -out cca-anyEKU.pem
+
+# server intermediate ca: sca-cert
+./mkcert.sh genca -p serverAuth "CA" ca-key sca-cert root-key root-cert
+# trust variants: +serverAuth, -serverAuth, +clientAuth, -clientAuth, +anyEKU, -anyEKU
+openssl x509 -in sca-cert.pem -trustout \
+ -addtrust serverAuth -out sca+serverAuth.pem
+openssl x509 -in sca-cert.pem -trustout \
+ -addreject serverAuth -out sca-serverAuth.pem
+openssl x509 -in sca-cert.pem -trustout \
+ -addtrust clientAuth -out sca+clientAuth.pem
+openssl x509 -in sca-cert.pem -trustout \
+ -addreject clientAuth -out sca-clientAuth.pem
+openssl x509 -in sca-cert.pem -trustout \
+ -addtrust anyExtendedKeyUsage -out sca+anyEKU.pem
+openssl x509 -in sca-cert.pem -trustout \
+ -addreject anyExtendedKeyUsage -out sca-anyEKU.pem
+
+# Primary leaf cert: ee-cert with default purpose: serverAuth
+./mkcert.sh genee server.example ee-key ee-cert ca-key ca-cert
+# ee variants: expired, issuer-key2, issuer-name2, bad-pathlen
+./mkcert.sh genee server.example ee-key ee-expired ca-key ca-cert -days -1
+./mkcert.sh genee server.example ee-key ee-cert2 ca-key2 ca-cert2
+./mkcert.sh genee server.example ee-key ee-name2 ca-key ca-name2
+./mkcert.sh genee server.example ee-key ee-pathlen ca-key ca-cert \
+ -extfile <(echo "basicConstraints=CA:false,pathlen:0") # bash needed here
+# purpose variants: clientAuth
+./mkcert.sh genee -p clientAuth server.example ee-key ee-client ca-key ca-cert
+# trust variants: +serverAuth, -serverAuth, +clientAuth, -clientAuth
+openssl x509 -in ee-cert.pem -trustout \
+ -addtrust serverAuth -out ee+serverAuth.pem
+openssl x509 -in ee-cert.pem -trustout \
+ -addreject serverAuth -out ee-serverAuth.pem
+openssl x509 -in ee-client.pem -trustout \
+ -addtrust clientAuth -out ee+clientAuth.pem
+openssl x509 -in ee-client.pem -trustout \
+ -addreject clientAuth -out ee-clientAuth.pem
+
+# Leaf cert security level variants
+# MD5 issuer signature
+OPENSSL_SIGALG=md5 \
+./mkcert.sh genee server.example ee-key ee-cert-md5 ca-key ca-cert
+# 768-bit issuer key
+./mkcert.sh genee server.example ee-key ee-cert-768i ca-key-768 ca-cert-768
+# 768-bit leaf key
+OPENSSL_KEYBITS=768 \
+./mkcert.sh genee server.example ee-key-768 ee-cert-768 ca-key ca-cert
+# EC cert with explicit curve signed by named curve ca
+./mkcert.sh genee server.example ee-key-ec-explicit ee-cert-ec-explicit ca-key-ec-named ca-cert-ec-named
+# EC cert with named curve signed by explicit curve ca
+./mkcert.sh genee server.example ee-key-ec-named-explicit \
+ ee-cert-ec-named-explicit ca-key-ec-explicit ca-cert-ec-explicit
+# EC cert with named curve signed by named curve ca
+./mkcert.sh genee server.example ee-key-ec-named-named \
+ ee-cert-ec-named-named ca-key-ec-named ca-cert-ec-named
+# 1024-bit leaf key
+OPENSSL_KEYBITS=1024 \
+./mkcert.sh genee server.example ee-key-1024 ee-cert-1024 ca-key ca-cert
+# 3072-bit leaf key
+OPENSSL_KEYBITS=3072 \
+./mkcert.sh genee server.example ee-key-3072 ee-cert-3072 ca-key ca-cert
+# 4096-bit leaf key
+OPENSSL_KEYBITS=4096 \
+./mkcert.sh genee server.example ee-key-4096 ee-cert-4096 ca-key ca-cert
+# 8192-bit leaf key
+OPENSSL_KEYBITS=8192 \
+./mkcert.sh genee server.example ee-key-8192 ee-cert-8192 ca-key ca-cert
+
+# self-signed end-entity cert with explicit keyUsage not including KeyCertSign
+openssl req -new -x509 -key ee-key.pem -subj /CN=ee-self-signed -out ee-self-signed.pem -addext keyUsage=digitalSignature -days 36525
+
+# Proxy certificates, off of ee-client
+# Start with some good ones
+./mkcert.sh req pc1-key "0.CN = server.example" "1.CN = proxy 1" | \
+ ./mkcert.sh genpc pc1-key pc1-cert ee-key ee-client \
+ "language = id-ppl-anyLanguage" "pathlen = 1" "policy = text:AB"
+./mkcert.sh req pc2-key "0.CN = server.example" "1.CN = proxy 1" "2.CN = proxy 2" | \
+ ./mkcert.sh genpc pc2-key pc2-cert pc1-key pc1-cert \
+ "language = id-ppl-anyLanguage" "pathlen = 0" "policy = text:AB"
+# And now a couple of bad ones
+# pc3: incorrect CN
+./mkcert.sh req bad-pc3-key "0.CN = server.example" "1.CN = proxy 3" | \
+ ./mkcert.sh genpc bad-pc3-key bad-pc3-cert pc1-key pc1-cert \
+ "language = id-ppl-anyLanguage" "pathlen = 0" "policy = text:AB"
+# pc4: incorrect pathlen
+./mkcert.sh req bad-pc4-key "0.CN = server.example" "1.CN = proxy 1" "2.CN = proxy 4" | \
+ ./mkcert.sh genpc bad-pc4-key bad-pc4-cert pc1-key pc1-cert \
+ "language = id-ppl-anyLanguage" "pathlen = 1" "policy = text:AB"
+# pc5: no policy
+./mkcert.sh req pc5-key "0.CN = server.example" "1.CN = proxy 1" "2.CN = proxy 5" | \
+ ./mkcert.sh genpc pc5-key pc5-cert pc1-key pc1-cert \
+ "language = id-ppl-anyLanguage" "pathlen = 0"
+# pc6: incorrect CN (made into a component of a multivalue RDN)
+./mkcert.sh req bad-pc6-key "0.CN = server.example" "1.CN = proxy 1" "2.+CN = proxy 6" | \
+ ./mkcert.sh genpc bad-pc6-key bad-pc6-cert pc1-key pc1-cert \
+ "language = id-ppl-anyLanguage" "pathlen = 0" "policy = text:AB"
+
+# Name constraints test certificates.
+
+# NC CA1 only permits the host www.good.org and *.good.com email address
+# good@good.org and *@good.com and IP addresses 127.0.0.1 and
+# 192.168.0.0/16
+
+NC="permitted;DNS:www.good.org, permitted;DNS:good.com,"
+NC="$NC permitted;email:good@good.org, permitted;email:good.com,"
+NC="$NC permitted;IP:127.0.0.1/255.255.255.255, permitted;IP:192.168.0.0/255.255.0.0"
+
+NC=$NC ./mkcert.sh genca "Test NC CA 1" ncca1-key ncca1-cert root-key root-cert
+
+# NC CA2 allows anything apart from hosts www.bad.org and *.bad.com
+# and email addresses bad@bad.org and *@bad.com
+
+NC="excluded;DNS:www.bad.org, excluded;DNS:bad.com,"
+NC="$NC excluded;email:bad@bad.org, excluded;email:bad.com, "
+NC="$NC excluded;IP:10.0.0.0/255.0.0.0"
+
+NC=$NC ./mkcert.sh genca "Test NC CA 2" ncca2-key ncca2-cert root-key root-cert
+
+# Name constraints subordinate CA. Adds www.good.net (which should be
+# disallowed because parent CA doesn't permit it) adds ok.good.com
+# (which should be allowed because parent allows *.good.com
+# and now excludes bad.ok.good.com (allowed in permitted subtrees
+# but explicitly excluded).
+
+NC="permitted;DNS:www.good.net, permitted;DNS:ok.good.com, "
+NC="$NC excluded;DNS:bad.ok.good.com"
+NC=$NC ./mkcert.sh genca "Test NC sub CA" ncca3-key ncca3-cert \
+ ncca1-key ncca1-cert
+
+# all subjectAltNames allowed by CA1. Some CNs are not!
+
+./mkcert.sh req alt1-key "O = Good NC Test Certificate 1" \
+ "1.CN=www.example.net" "2.CN=Joe Bloggs" | \
+ ./mkcert.sh geneealt alt1-key alt1-cert ncca1-key ncca1-cert \
+ "DNS.1 = www.good.org" "DNS.2 = any.good.com" \
+ "email.1 = good@good.org" "email.2 = any@good.com" \
+ "IP = 127.0.0.1" "IP = 192.168.0.1"
+
+# all DNS-like CNs allowed by CA1, no DNS SANs.
+
+./mkcert.sh req goodcn1-key "O = Good NC Test Certificate 1" \
+ "1.CN=www.good.org" "2.CN=any.good.com" \
+ "3.CN=not..dns" "4.CN=not@dns" "5.CN=not-.dns" "6.CN=not.dns." | \
+ ./mkcert.sh geneealt goodcn1-key goodcn1-cert ncca1-key ncca1-cert \
+ "IP = 127.0.0.1" "IP = 192.168.0.1"
+
+# all DNS-like CNs allowed by CA1, no SANs
+
+./mkcert.sh req goodcn2-key "O = Good NC Test Certificate 1" \
+ "CN=www.good.org" | \
+ ./mkcert.sh geneeconfig goodcn2-key goodcn2-cert ncca1-key ncca1-cert
+
+# Some DNS-like CNs not permitted by CA1, no DNS SANs.
+
+./mkcert.sh req badcn1-key "O = Good NC Test Certificate 1" \
+ "1.CN=www.good.org" "3.CN=bad.net" | \
+ ./mkcert.sh geneealt badcn1-key badcn1-cert ncca1-key ncca1-cert \
+ "IP = 127.0.0.1" "IP = 192.168.0.1"
+
+# no subjectAltNames excluded by CA2.
+
+./mkcert.sh req alt2-key "O = Good NC Test Certificate 2" | \
+ ./mkcert.sh geneealt alt2-key alt2-cert ncca2-key ncca2-cert \
+ "DNS.1 = www.anything.org" "DNS.2 = any.other.com" \
+ "email.1 = other@bad.org" "email.2 = any@something.com"
+
+# hostname other.good.org which is not allowed by CA1.
+
+./mkcert.sh req badalt1-key "O = Bad NC Test Certificate 1" | \
+ ./mkcert.sh geneealt badalt1-key badalt1-cert ncca1-key ncca1-cert \
+ "DNS.1 = other.good.org" "DNS.2 = any.good.com" \
+ "email.1 = good@good.org" "email.2 = any@good.com"
+
+# any.bad.com is excluded by CA2.
+
+./mkcert.sh req badalt2-key 'O = Bad NC Test Certificate 2' | \
+ ./mkcert.sh geneealt badalt2-key badalt2-cert ncca2-key ncca2-cert \
+ "DNS.1 = www.good.org" "DNS.2 = any.bad.com" \
+ "email.1 = good@good.org" "email.2 = any@good.com"
+
+# other@good.org not permitted by CA1
+
+./mkcert.sh req badalt3-key "O = Bad NC Test Certificate 3" | \
+ ./mkcert.sh geneealt badalt3-key badalt1-cert ncca1-key ncca1-cert \
+ "DNS.1 = www.good.org" "DNS.2 = any.good.com" \
+ "email.1 = other@good.org" "email.2 = any@good.com"
+
+# all subject alt names OK but subject email address not allowed by CA1.
+
+./mkcert.sh req badalt4-key 'O = Bad NC Test Certificate 4' \
+ "emailAddress = any@other.com" | \
+ ./mkcert.sh geneealt badalt4-key badalt4-cert ncca1-key ncca1-cert \
+ "DNS.1 = www.good.org" "DNS.2 = any.good.com" \
+ "email.1 = good@good.org" "email.2 = any@good.com"
+
+# IP address not allowed by CA1
+./mkcert.sh req badalt5-key "O = Bad NC Test Certificate 5" | \
+ ./mkcert.sh geneealt badalt5-key badalt5-cert ncca1-key ncca1-cert \
+ "DNS.1 = www.good.org" "DNS.2 = any.good.com" \
+ "email.1 = good@good.org" "email.2 = any@good.com" \
+ "IP = 127.0.0.2"
+
+# No DNS-ID SANs and subject CN not allowed by CA1.
+./mkcert.sh req badalt6-key "O = Bad NC Test Certificate 6" \
+ "1.CN=other.good.org" "2.CN=Joe Bloggs" "3.CN=any.good.com" | \
+ ./mkcert.sh geneealt badalt6-key badalt6-cert ncca1-key ncca1-cert \
+ "email.1 = good@good.org" "email.2 = any@good.com" \
+ "IP = 127.0.0.1" "IP = 192.168.0.1"
+
+# No DNS-ID SANS and subject CN not allowed by CA1, BMPSTRING
+REQMASK=MASK:0x800 ./mkcert.sh req badalt7-key "O = Bad NC Test Certificate 7" \
+ "1.CN=other.good.org" "2.CN=Joe Bloggs" "3.CN=any.good.com" | \
+ ./mkcert.sh geneealt badalt7-key badalt7-cert ncca1-key ncca1-cert \
+ "email.1 = good@good.org" "email.2 = any@good.com" \
+ "IP = 127.0.0.1" "IP = 192.168.0.1"
+
+# all subjectAltNames allowed by chain
+
+./mkcert.sh req alt3-key "O = Good NC Test Certificate 3" \
+ "1.CN=www.ok.good.com" "2.CN=Joe Bloggs" | \
+ ./mkcert.sh geneealt alt3-key alt3-cert ncca3-key ncca3-cert \
+ "DNS.1 = www.ok.good.com" \
+ "email.1 = good@good.org" "email.2 = any@good.com" \
+ "IP = 127.0.0.1" "IP = 192.168.0.1"
+
+# www.good.net allowed by parent CA but not parent of parent
+
+./mkcert.sh req badalt8-key "O = Bad NC Test Certificate 8" \
+ "1.CN=www.good.com" "2.CN=Joe Bloggs" | \
+ ./mkcert.sh geneealt badalt8-key badalt8-cert ncca3-key ncca3-cert \
+ "DNS.1 = www.ok.good.com" "DNS.2 = www.good.net" \
+ "email.1 = good@good.org" "email.2 = any@good.com" \
+ "IP = 127.0.0.1" "IP = 192.168.0.1"
+
+# other.good.com not allowed by parent CA but allowed by parent of parent
+
+./mkcert.sh req badalt9-key "O = Bad NC Test Certificate 9" \
+ "1.CN=www.good.com" "2.CN=Joe Bloggs" | \
+ ./mkcert.sh geneealt badalt9-key badalt9-cert ncca3-key ncca3-cert \
+ "DNS.1 = www.good.com" "DNS.2 = other.good.com" \
+ "email.1 = good@good.org" "email.2 = any@good.com" \
+ "IP = 127.0.0.1" "IP = 192.168.0.1"
+
+# www.bad.net excluded by parent CA.
+
+./mkcert.sh req badalt10-key "O = Bad NC Test Certificate 10" \
+ "1.CN=www.ok.good.com" "2.CN=Joe Bloggs" | \
+ ./mkcert.sh geneealt badalt10-key badalt10-cert ncca3-key ncca3-cert \
+ "DNS.1 = www.ok.good.com" "DNS.2 = bad.ok.good.com" \
+ "email.1 = good@good.org" "email.2 = any@good.com" \
+ "IP = 127.0.0.1" "IP = 192.168.0.1"
+
+# Certs for CVE-2022-4203 testcase
+
+NC="excluded;otherName:SRVName;UTF8STRING:foo@example.org" ./mkcert.sh genca \
+ "Test NC CA othername" nccaothername-key nccaothername-cert \
+ root-key root-cert
+
+./mkcert.sh req alt-email-key "O = NC email in othername Test Certificate" | \
+ ./mkcert.sh geneealt bad-othername-key bad-othername-cert \
+ nccaothername-key nccaothername-cert \
+ "otherName.1 = SRVName;UTF8STRING:foo@example.org"
+
+# RSA-PSS signatures
+# SHA1
+./mkcert.sh genee PSS-SHA1 ee-key ee-pss-sha1-cert ca-key ca-cert \
+ -sha1 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:digest
+# EE SHA256
+./mkcert.sh genee PSS-SHA256 ee-key ee-pss-sha256-cert ca-key ca-cert \
+ -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:digest
+# CA-PSS
+./mkcert.sh genca "CA-PSS" ca-pss-key ca-pss-cert root-key root-cert \
+ -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1
+./mkcert.sh genee "EE-PSS" ee-key ee-pss-cert ca-pss-key ca-pss-cert \
+ -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1
+# Should not have been possible to produce, see issue #13968:
+#./mkcert.sh genee "EE-PSS-wrong1.5" ee-key ee-pss-wrong1.5-cert ca-pss-key ca-pss-cert -sha256
+
+OPENSSL_KEYALG=ec OPENSSL_KEYBITS=brainpoolP256r1 ./mkcert.sh genee \
+ "Server ECDSA brainpoolP256r1 cert" server-ecdsa-brainpoolP256r1-key \
+ server-ecdsa-brainpoolP256r1-cert rootkey rootcert
+
+openssl req -new -noenc -subj "/CN=localhost" \
+ -newkey rsa-pss -keyout server-pss-restrict-key.pem \
+ -pkeyopt rsa_pss_keygen_md:sha256 -pkeyopt rsa_pss_keygen_saltlen:32 | \
+ ./mkcert.sh geneenocsr "Server RSA-PSS restricted cert" \
+ server-pss-restrict-cert rootkey rootcert
+
+# CT entry
+./mkcert.sh genct server.example embeddedSCTs1-key embeddedSCTs1 embeddedSCTs1_issuer-key embeddedSCTs1_issuer ct-server-key
+
+OPENSSL_SIGALG= OPENSSL_KEYALG=ed448 ./mkcert.sh genroot "Root Ed448" \
+ root-ed448-key root-ed448-cert
+OPENSSL_SIGALG=ED448 OPENSSL_KEYALG=ed448 ./mkcert.sh genee ed448 \
+ server-ed448-key server-ed448-cert root-ed448-key root-ed448-cert
+
+# non-critical unknown extension
+./mkcert.sh geneeextra server.example ee-key ee-cert-noncrit-unknown-ext ca-key ca-cert "1.2.3.4=DER:05:00"
+
+# critical unknown extension
+./mkcert.sh geneeextra server.example ee-key ee-cert-crit-unknown-ext ca-key ca-cert "1.2.3.4=critical,DER:05:00"
+
+# critical id-pkix-ocsp-no-check extension
+./mkcert.sh geneeextra server.example ee-key ee-cert-ocsp-nocheck ca-key ca-cert "1.3.6.1.5.5.7.48.1.5=critical,DER:05:00"
+
+# certificatePolicies extension
+./mkcert.sh genca -c "1.3.6.1.4.1.16604.998855.1" "CA" ca-key ca-pol-cert root-key root-cert
+./mkcert.sh geneeextra server.example ee-key ee-cert-policies ca-key ca-cert "certificatePolicies=1.3.6.1.4.1.16604.998855.1"
+# We can create a cert with a duplicate policy oid - but its actually invalid!
+./mkcert.sh geneeextra server.example ee-key ee-cert-policies-bad ca-key ca-cert "certificatePolicies=1.3.6.1.4.1.16604.998855.1,1.3.6.1.4.1.16604.998855.1"
diff --git a/test/certs/sm2-ca-cert.pem b/test/certs/sm2-ca-cert.pem
new file mode 100644
index 000000000000..70ce71e43091
--- /dev/null
+++ b/test/certs/sm2-ca-cert.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICJzCCAcygAwIBAgIJAOlkpDpSrmVbMAoGCCqBHM9VAYN1MGgxCzAJBgNVBAYT
+AkNOMQswCQYDVQQIDAJMTjERMA8GA1UEBwwIU2hlbnlhbmcxETAPBgNVBAoMCFRl
+c3QgT3JnMRAwDgYDVQQLDAdUZXN0IE9VMRQwEgYDVQQDDAtUZXN0IFNNMiBDQTAg
+Fw0yMjA2MDIxNTQ5MzlaGA8yMTIyMDUwOTE1NDkzOVowaDELMAkGA1UEBhMCQ04x
+CzAJBgNVBAgMAkxOMREwDwYDVQQHDAhTaGVueWFuZzERMA8GA1UECgwIVGVzdCBP
+cmcxEDAOBgNVBAsMB1Rlc3QgT1UxFDASBgNVBAMMC1Rlc3QgU00yIENBMFkwEwYH
+KoZIzj0CAQYIKoEcz1UBgi0DQgAEdFieoSuh8F1c+m2+87v4FJUnFyke5Madn5Q+
+ttTmRURQxpSc054wlmX+9EaKZkKb8CRF4mZF+dvXkRIdH6yynqNdMFswHQYDVR0O
+BBYEFMWNxa7/MmBJnlIpSVTlXHj/Rbl0MB8GA1UdIwQYMBaAFMWNxa7/MmBJnlIp
+SVTlXHj/Rbl0MAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMAoGCCqBHM9VAYN1
+A0kAMEYCIQC3c2TkO6Lyxt5GNZqoZNuMEphjL9K7W1TsX6mHzlhHDwIhAICXy2XC
+WsTzdrMZUXLtrDDFOq+3FaD4pe1HP2LZFNpu
+-----END CERTIFICATE-----
diff --git a/test/certs/sm2-csr.pem b/test/certs/sm2-csr.pem
new file mode 100644
index 000000000000..a6dcca874223
--- /dev/null
+++ b/test/certs/sm2-csr.pem
@@ -0,0 +1,9 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIBMTCB1wIBADB1MQswCQYDVQQGEwJDTjERMA8GA1UECAwITGlhb25pbmcxETAP
+BgNVBAcMCFNoZW55YW5nMQwwCgYDVQQKDANUZXQxDDAKBgNVBAsMA1RldDELMAkG
+A1UEAwwCb28xFzAVBgkqhkiG9w0BCQEWCG9vQG9vLm9vMFkwEwYHKoZIzj0CAQYI
+KoEcz1UBgi0DQgAE1NjdOpldcjTkuZpdGDNyHAnhK9cB2RZ7jAmFzt7jgEs9OHSg
+rb3crjz+qGZfqyJ5AyZulQ7gdARzb1H55jvw5qAAMAoGCCqBHM9VAYN1A0kAMEYC
+IQCacUXA8kyTTDwEm89Yz9qjsbfd8/N32lnzKxuKCcXJwQIhAIpugCbfeWuPxUQO
+7AvQS3yxBp1yn0FbTT2XVSyYy6To
+-----END CERTIFICATE REQUEST-----
diff --git a/test/certs/sm2-pub.key b/test/certs/sm2-pub.key
new file mode 100644
index 000000000000..ecb6b5c2d68e
--- /dev/null
+++ b/test/certs/sm2-pub.key
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEMKnjZFqe34rtSmZ7g5ALnKTPKYhM
+xEy9cpq3Kzgb7/JoTTZHm9tGrG1oBUCNszq0jPff7Fxp/azNv7rDPzJXGg==
+-----END PUBLIC KEY-----
diff --git a/test/certs/sm2-root.crt b/test/certs/sm2-root.crt
new file mode 100644
index 000000000000..70ce71e43091
--- /dev/null
+++ b/test/certs/sm2-root.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICJzCCAcygAwIBAgIJAOlkpDpSrmVbMAoGCCqBHM9VAYN1MGgxCzAJBgNVBAYT
+AkNOMQswCQYDVQQIDAJMTjERMA8GA1UEBwwIU2hlbnlhbmcxETAPBgNVBAoMCFRl
+c3QgT3JnMRAwDgYDVQQLDAdUZXN0IE9VMRQwEgYDVQQDDAtUZXN0IFNNMiBDQTAg
+Fw0yMjA2MDIxNTQ5MzlaGA8yMTIyMDUwOTE1NDkzOVowaDELMAkGA1UEBhMCQ04x
+CzAJBgNVBAgMAkxOMREwDwYDVQQHDAhTaGVueWFuZzERMA8GA1UECgwIVGVzdCBP
+cmcxEDAOBgNVBAsMB1Rlc3QgT1UxFDASBgNVBAMMC1Rlc3QgU00yIENBMFkwEwYH
+KoZIzj0CAQYIKoEcz1UBgi0DQgAEdFieoSuh8F1c+m2+87v4FJUnFyke5Madn5Q+
+ttTmRURQxpSc054wlmX+9EaKZkKb8CRF4mZF+dvXkRIdH6yynqNdMFswHQYDVR0O
+BBYEFMWNxa7/MmBJnlIpSVTlXHj/Rbl0MB8GA1UdIwQYMBaAFMWNxa7/MmBJnlIp
+SVTlXHj/Rbl0MAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMAoGCCqBHM9VAYN1
+A0kAMEYCIQC3c2TkO6Lyxt5GNZqoZNuMEphjL9K7W1TsX6mHzlhHDwIhAICXy2XC
+WsTzdrMZUXLtrDDFOq+3FaD4pe1HP2LZFNpu
+-----END CERTIFICATE-----
diff --git a/test/certs/sm2-root.key b/test/certs/sm2-root.key
new file mode 100644
index 000000000000..4bda65b5e68a
--- /dev/null
+++ b/test/certs/sm2-root.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQglktdVbLA5tyXMc+9
+KV4ikyDaFZNnXqfNAzUVqTlqn8GhRANCAAR0WJ6hK6HwXVz6bb7zu/gUlScXKR7k
+xp2flD621OZFRFDGlJzTnjCWZf70RopmQpvwJEXiZkX529eREh0frLKe
+-----END PRIVATE KEY-----
diff --git a/test/certs/sm2.key b/test/certs/sm2.key
new file mode 100644
index 000000000000..1efd3643b6e4
--- /dev/null
+++ b/test/certs/sm2.key
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgSKhk+4xGyDI+IS2H
+WVfFPDxh1qv5+wtrddaIsGNXGZihRANCAAQwqeNkWp7fiu1KZnuDkAucpM8piEzE
+TL1ymrcrOBvv8mhNNkeb20asbWgFQI2zOrSM99/sXGn9rM2/usM/Mlca
+-----END PRIVATE KEY-----
diff --git a/test/certs/sm2.pem b/test/certs/sm2.pem
new file mode 100644
index 000000000000..daf12926aff9
--- /dev/null
+++ b/test/certs/sm2.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICNDCCAdugAwIBAgIUOMbsiFLCy2BCPtfHQSdG4R1+3BowCgYIKoEcz1UBg3Uw
+aDELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkxOMREwDwYDVQQHDAhTaGVueWFuZzER
+MA8GA1UECgwIVGVzdCBPcmcxEDAOBgNVBAsMB1Rlc3QgT1UxFDASBgNVBAMMC1Rl
+c3QgU00yIENBMCAXDTIyMDYwMjE1NTU0OFoYDzIxMjIwNTA5MTU1NTQ4WjBvMQsw
+CQYDVQQGEwJDTjELMAkGA1UECAwCTE4xETAPBgNVBAcMCFNoZW55YW5nMREwDwYD
+VQQKDAhUZXN0IE9yZzEQMA4GA1UECwwHVGVzdCBPVTEbMBkGA1UEAwwSVGVzdCBT
+TTIgU2lnbiBDZXJ0MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEMKnjZFqe34rt
+SmZ7g5ALnKTPKYhMxEy9cpq3Kzgb7/JoTTZHm9tGrG1oBUCNszq0jPff7Fxp/azN
+v7rDPzJXGqNaMFgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBsAwHQYDVR0OBBYEFNPl
+u8JjXkhQPiJ5bYrrq+voqBUlMB8GA1UdIwQYMBaAFMWNxa7/MmBJnlIpSVTlXHj/
+Rbl0MAoGCCqBHM9VAYN1A0cAMEQCIG3gG1D7T7ltn6Gz1UksBZahgBE6jmkQ9Sp9
+/3aY5trlAiB5adxiK0avV0LEKfbzTdff9skoZpd7vje1QTW0l0HaGg==
+-----END CERTIFICATE-----
diff --git a/test/certs/some-names1.pem b/test/certs/some-names1.pem
new file mode 100644
index 000000000000..21eed833865b
--- /dev/null
+++ b/test/certs/some-names1.pem
@@ -0,0 +1,211 @@
+-----BEGIN CERTIFICATE-----
+MIInDDCCJfSgAwIBAgIBBTANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
+Fw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowghmkMRAwDgYDVQQDEwd0
+MC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+MUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+M0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+NUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+N0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI
+dDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB
+Fgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B
+CQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3
+DQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI
+hvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq
+hkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG
+CSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw
+FQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx
+FzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz
+dDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0
+ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy
+QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0
+MzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW
+CHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ
+ARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN
+AQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG
+9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG
+SIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ
+KoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV
+BgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX
+MBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0
+MRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl
+c3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA
+dGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1
+N0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI
+dDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB
+Fgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B
+CQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3
+DQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI
+hvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq
+hkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG
+CSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw
+FQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx
+FzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz
+dDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0
+ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw
+QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0
+ODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW
+CHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ
+ARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN
+AQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG
+9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG
+SIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ
+KoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV
+BgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX
+MBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjMyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyMzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIz
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyMzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIzN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjQxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyNDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjUwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyNTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDI1NUB0ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAugvahBkSAUF1fC49vb1bvlPrcl80kop1iLpiuYoz4Qptwy57+EWs
+sZBcHprZ5BkWf6PeGZ7F5AX1PyJbGHZLqvMCvViP6pd4MFox/igESISEHEixoiXC
+zepBrhtp5UQSjHD4D4hKtgdMgVxX+LRtwgW3mnu/vBu7rzpr/DS8io99p3lqZ1Ak
+y+aNlcMj6MYy8U+YFEevb/V0lRY9oqwmW7BHnXikm/vi6sjIS350U8zb/mRzYeIs
+2R65LUduTL50+UMgat9ocewI2dv8aO9Dph+8NdGtg8LFYyTTHcUxJoMr1PTOgnmE
+T19WJH4PrFwk7ZE1QJQQ1L4iKmPeQistuQIDAQABo4IK2jCCCtYwDgYDVR0PAQH/
+BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwggqfBgNV
+HREEggqWMIIKkoIHdDAudGVzdIIHdDEudGVzdIIHdDIudGVzdIIHdDMudGVzdIIH
+dDQudGVzdIIHdDUudGVzdIIHdDYudGVzdIIHdDcudGVzdIIHdDgudGVzdIIHdDku
+dGVzdIIIdDEwLnRlc3SCCHQxMS50ZXN0ggh0MTIudGVzdIIIdDEzLnRlc3SCCHQx
+NC50ZXN0ggh0MTUudGVzdIIIdDE2LnRlc3SCCHQxNy50ZXN0ggh0MTgudGVzdIII
+dDE5LnRlc3SCCHQyMC50ZXN0ggh0MjEudGVzdIIIdDIyLnRlc3SCCHQyMy50ZXN0
+ggh0MjQudGVzdIIIdDI1LnRlc3SCCHQyNi50ZXN0ggh0MjcudGVzdIIIdDI4LnRl
+c3SCCHQyOS50ZXN0ggh0MzAudGVzdIIIdDMxLnRlc3SCCHQzMi50ZXN0ggh0MzMu
+dGVzdIIIdDM0LnRlc3SCCHQzNS50ZXN0ggh0MzYudGVzdIIIdDM3LnRlc3SCCHQz
+OC50ZXN0ggh0MzkudGVzdIIIdDQwLnRlc3SCCHQ0MS50ZXN0ggh0NDIudGVzdIII
+dDQzLnRlc3SCCHQ0NC50ZXN0ggh0NDUudGVzdIIIdDQ2LnRlc3SCCHQ0Ny50ZXN0
+ggh0NDgudGVzdIIIdDQ5LnRlc3SCCHQ1MC50ZXN0ggh0NTEudGVzdIIIdDUyLnRl
+c3SCCHQ1My50ZXN0ggh0NTQudGVzdIIIdDU1LnRlc3SCCHQ1Ni50ZXN0ggh0NTcu
+dGVzdIIIdDU4LnRlc3SCCHQ1OS50ZXN0ggh0NjAudGVzdIIIdDYxLnRlc3SCCHQ2
+Mi50ZXN0ggh0NjMudGVzdIIIdDY0LnRlc3SCCHQ2NS50ZXN0ggh0NjYudGVzdIII
+dDY3LnRlc3SCCHQ2OC50ZXN0ggh0NjkudGVzdIIIdDcwLnRlc3SCCHQ3MS50ZXN0
+ggh0NzIudGVzdIIIdDczLnRlc3SCCHQ3NC50ZXN0ggh0NzUudGVzdIIIdDc2LnRl
+c3SCCHQ3Ny50ZXN0ggh0NzgudGVzdIIIdDc5LnRlc3SCCHQ4MC50ZXN0ggh0ODEu
+dGVzdIIIdDgyLnRlc3SCCHQ4My50ZXN0ggh0ODQudGVzdIIIdDg1LnRlc3SCCHQ4
+Ni50ZXN0ggh0ODcudGVzdIIIdDg4LnRlc3SCCHQ4OS50ZXN0ggh0OTAudGVzdIII
+dDkxLnRlc3SCCHQ5Mi50ZXN0ggh0OTMudGVzdIIIdDk0LnRlc3SCCHQ5NS50ZXN0
+ggh0OTYudGVzdIIIdDk3LnRlc3SCCHQ5OC50ZXN0ggh0OTkudGVzdIIJdDEwMC50
+ZXN0ggl0MTAxLnRlc3SCCXQxMDIudGVzdIIJdDEwMy50ZXN0ggl0MTA0LnRlc3SC
+CXQxMDUudGVzdIIJdDEwNi50ZXN0ggl0MTA3LnRlc3SCCXQxMDgudGVzdIIJdDEw
+OS50ZXN0ggl0MTEwLnRlc3SCCXQxMTEudGVzdIIJdDExMi50ZXN0ggl0MTEzLnRl
+c3SCCXQxMTQudGVzdIIJdDExNS50ZXN0ggl0MTE2LnRlc3SCCXQxMTcudGVzdIIJ
+dDExOC50ZXN0ggl0MTE5LnRlc3SCCXQxMjAudGVzdIIJdDEyMS50ZXN0ggl0MTIy
+LnRlc3SCCXQxMjMudGVzdIIJdDEyNC50ZXN0ggl0MTI1LnRlc3SCCXQxMjYudGVz
+dIIJdDEyNy50ZXN0ggl0MTI4LnRlc3SCCXQxMjkudGVzdIIJdDEzMC50ZXN0ggl0
+MTMxLnRlc3SCCXQxMzIudGVzdIIJdDEzMy50ZXN0ggl0MTM0LnRlc3SCCXQxMzUu
+dGVzdIIJdDEzNi50ZXN0ggl0MTM3LnRlc3SCCXQxMzgudGVzdIIJdDEzOS50ZXN0
+ggl0MTQwLnRlc3SCCXQxNDEudGVzdIIJdDE0Mi50ZXN0ggl0MTQzLnRlc3SCCXQx
+NDQudGVzdIIJdDE0NS50ZXN0ggl0MTQ2LnRlc3SCCXQxNDcudGVzdIIJdDE0OC50
+ZXN0ggl0MTQ5LnRlc3SCCXQxNTAudGVzdIIJdDE1MS50ZXN0ggl0MTUyLnRlc3SC
+CXQxNTMudGVzdIIJdDE1NC50ZXN0ggl0MTU1LnRlc3SCCXQxNTYudGVzdIIJdDE1
+Ny50ZXN0ggl0MTU4LnRlc3SCCXQxNTkudGVzdIIJdDE2MC50ZXN0ggl0MTYxLnRl
+c3SCCXQxNjIudGVzdIIJdDE2My50ZXN0ggl0MTY0LnRlc3SCCXQxNjUudGVzdIIJ
+dDE2Ni50ZXN0ggl0MTY3LnRlc3SCCXQxNjgudGVzdIIJdDE2OS50ZXN0ggl0MTcw
+LnRlc3SCCXQxNzEudGVzdIIJdDE3Mi50ZXN0ggl0MTczLnRlc3SCCXQxNzQudGVz
+dIIJdDE3NS50ZXN0ggl0MTc2LnRlc3SCCXQxNzcudGVzdIIJdDE3OC50ZXN0ggl0
+MTc5LnRlc3SCCXQxODAudGVzdIIJdDE4MS50ZXN0ggl0MTgyLnRlc3SCCXQxODMu
+dGVzdIIJdDE4NC50ZXN0ggl0MTg1LnRlc3SCCXQxODYudGVzdIIJdDE4Ny50ZXN0
+ggl0MTg4LnRlc3SCCXQxODkudGVzdIIJdDE5MC50ZXN0ggl0MTkxLnRlc3SCCXQx
+OTIudGVzdIIJdDE5My50ZXN0ggl0MTk0LnRlc3SCCXQxOTUudGVzdIIJdDE5Ni50
+ZXN0ggl0MTk3LnRlc3SCCXQxOTgudGVzdIIJdDE5OS50ZXN0ggl0MjAwLnRlc3SC
+CXQyMDEudGVzdIIJdDIwMi50ZXN0ggl0MjAzLnRlc3SCCXQyMDQudGVzdIIJdDIw
+NS50ZXN0ggl0MjA2LnRlc3SCCXQyMDcudGVzdIIJdDIwOC50ZXN0ggl0MjA5LnRl
+c3SCCXQyMTAudGVzdIIJdDIxMS50ZXN0ggl0MjEyLnRlc3SCCXQyMTMudGVzdIIJ
+dDIxNC50ZXN0ggl0MjE1LnRlc3SCCXQyMTYudGVzdIIJdDIxNy50ZXN0ggl0MjE4
+LnRlc3SCCXQyMTkudGVzdIIJdDIyMC50ZXN0ggl0MjIxLnRlc3SCCXQyMjIudGVz
+dIIJdDIyMy50ZXN0ggl0MjI0LnRlc3SCCXQyMjUudGVzdIIJdDIyNi50ZXN0ggl0
+MjI3LnRlc3SCCXQyMjgudGVzdIIJdDIyOS50ZXN0ggl0MjMwLnRlc3SCCXQyMzEu
+dGVzdIIJdDIzMi50ZXN0ggl0MjMzLnRlc3SCCXQyMzQudGVzdIIJdDIzNS50ZXN0
+ggl0MjM2LnRlc3SCCXQyMzcudGVzdIIJdDIzOC50ZXN0ggl0MjM5LnRlc3SCCXQy
+NDAudGVzdIIJdDI0MS50ZXN0ggl0MjQyLnRlc3SCCXQyNDMudGVzdIIJdDI0NC50
+ZXN0ggl0MjQ1LnRlc3SCCXQyNDYudGVzdIIJdDI0Ny50ZXN0ggl0MjQ4LnRlc3SC
+CXQyNDkudGVzdIIJdDI1MC50ZXN0ggl0MjUxLnRlc3SCCXQyNTIudGVzdIIJdDI1
+My50ZXN0ggl0MjU0LnRlc3SCCXQyNTUudGVzdDANBgkqhkiG9w0BAQsFAAOCAQEA
+JIFn5ymMVnj0DOFldXQzAjaosat0Z1dAca0BFO/4bf+IfvpaLvZCiSucInV0ejgR
+dP3UsoiXV8qXBax1nr5t4k+yOGYbhgj3imHFtKhFaqJ45AqEJOmzCHWIN0LkN+YL
+ME6JBJr86EB+diLPBS7iljmtvN7avvmJ8AbGFI6eB5BwSjewavWpv55u52zMWti7
+Ca2WpKffH74zhnGqkbMzEiiRa1L1+H/uQBJ0BEeAZbr+pSkJZJvzY/eH8a7fLHra
+LfBqD4epDm6RI6gSNeJ+G7qSfpVSk7l9bsVh7rUTSSCKBxhcImudqBuLfswoa0Ub
+ZoA33vstMRAur0m/blHQHA==
+-----END CERTIFICATE-----
diff --git a/test/certs/some-names2.pem b/test/certs/some-names2.pem
new file mode 100644
index 000000000000..328e3d1621d1
--- /dev/null
+++ b/test/certs/some-names2.pem
@@ -0,0 +1,133 @@
+-----BEGIN CERTIFICATE-----
+MIIYgzCCF2ugAwIBAgIBBjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
+Fw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowEjEQMA4GA1UEAxMHdDAu
+dGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoL2oQZEgFBdXwu
+Pb29W75T63JfNJKKdYi6YrmKM+EKbcMue/hFrLGQXB6a2eQZFn+j3hmexeQF9T8i
+Wxh2S6rzAr1Yj+qXeDBaMf4oBEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFc
+V/i0bcIFt5p7v7wbu686a/w0vIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUW
+PaKsJluwR514pJv74urIyEt+dFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb
+/GjvQ6YfvDXRrYPCxWMk0x3FMSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj
+3kIrLbkCAwEAAaOCFeUwghXhMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggr
+BgEFBQcDATAMBgNVHRMBAf8EAjAAMIIVqgYDVR0RBIIVoTCCFZ2CB3QwLnRlc3SC
+B3QxLnRlc3SCB3QyLnRlc3SCB3QzLnRlc3SCB3Q0LnRlc3SCB3Q1LnRlc3SCB3Q2
+LnRlc3SCB3Q3LnRlc3SCB3Q4LnRlc3SCB3Q5LnRlc3SCCHQxMC50ZXN0ggh0MTEu
+dGVzdIIIdDEyLnRlc3SCCHQxMy50ZXN0ggh0MTQudGVzdIIIdDE1LnRlc3SCCHQx
+Ni50ZXN0ggh0MTcudGVzdIIIdDE4LnRlc3SCCHQxOS50ZXN0ggh0MjAudGVzdIII
+dDIxLnRlc3SCCHQyMi50ZXN0ggh0MjMudGVzdIIIdDI0LnRlc3SCCHQyNS50ZXN0
+ggh0MjYudGVzdIIIdDI3LnRlc3SCCHQyOC50ZXN0ggh0MjkudGVzdIIIdDMwLnRl
+c3SCCHQzMS50ZXN0ggh0MzIudGVzdIIIdDMzLnRlc3SCCHQzNC50ZXN0ggh0MzUu
+dGVzdIIIdDM2LnRlc3SCCHQzNy50ZXN0ggh0MzgudGVzdIIIdDM5LnRlc3SCCHQ0
+MC50ZXN0ggh0NDEudGVzdIIIdDQyLnRlc3SCCHQ0My50ZXN0ggh0NDQudGVzdIII
+dDQ1LnRlc3SCCHQ0Ni50ZXN0ggh0NDcudGVzdIIIdDQ4LnRlc3SCCHQ0OS50ZXN0
+ggh0NTAudGVzdIIIdDUxLnRlc3SCCHQ1Mi50ZXN0ggh0NTMudGVzdIIIdDU0LnRl
+c3SCCHQ1NS50ZXN0ggh0NTYudGVzdIIIdDU3LnRlc3SCCHQ1OC50ZXN0ggh0NTku
+dGVzdIIIdDYwLnRlc3SCCHQ2MS50ZXN0ggh0NjIudGVzdIIIdDYzLnRlc3SCCHQ2
+NC50ZXN0ggh0NjUudGVzdIIIdDY2LnRlc3SCCHQ2Ny50ZXN0ggh0NjgudGVzdIII
+dDY5LnRlc3SCCHQ3MC50ZXN0ggh0NzEudGVzdIIIdDcyLnRlc3SCCHQ3My50ZXN0
+ggh0NzQudGVzdIIIdDc1LnRlc3SCCHQ3Ni50ZXN0ggh0NzcudGVzdIIIdDc4LnRl
+c3SCCHQ3OS50ZXN0ggh0ODAudGVzdIIIdDgxLnRlc3SCCHQ4Mi50ZXN0ggh0ODMu
+dGVzdIIIdDg0LnRlc3SCCHQ4NS50ZXN0ggh0ODYudGVzdIIIdDg3LnRlc3SCCHQ4
+OC50ZXN0ggh0ODkudGVzdIIIdDkwLnRlc3SCCHQ5MS50ZXN0ggh0OTIudGVzdIII
+dDkzLnRlc3SCCHQ5NC50ZXN0ggh0OTUudGVzdIIIdDk2LnRlc3SCCHQ5Ny50ZXN0
+ggh0OTgudGVzdIIIdDk5LnRlc3SCCXQxMDAudGVzdIIJdDEwMS50ZXN0ggl0MTAy
+LnRlc3SCCXQxMDMudGVzdIIJdDEwNC50ZXN0ggl0MTA1LnRlc3SCCXQxMDYudGVz
+dIIJdDEwNy50ZXN0ggl0MTA4LnRlc3SCCXQxMDkudGVzdIIJdDExMC50ZXN0ggl0
+MTExLnRlc3SCCXQxMTIudGVzdIIJdDExMy50ZXN0ggl0MTE0LnRlc3SCCXQxMTUu
+dGVzdIIJdDExNi50ZXN0ggl0MTE3LnRlc3SCCXQxMTgudGVzdIIJdDExOS50ZXN0
+ggl0MTIwLnRlc3SCCXQxMjEudGVzdIIJdDEyMi50ZXN0ggl0MTIzLnRlc3SCCXQx
+MjQudGVzdIIJdDEyNS50ZXN0ggl0MTI2LnRlc3SCCXQxMjcudGVzdIIJdDEyOC50
+ZXN0ggl0MTI5LnRlc3SCCXQxMzAudGVzdIIJdDEzMS50ZXN0ggl0MTMyLnRlc3SC
+CXQxMzMudGVzdIIJdDEzNC50ZXN0ggl0MTM1LnRlc3SCCXQxMzYudGVzdIIJdDEz
+Ny50ZXN0ggl0MTM4LnRlc3SCCXQxMzkudGVzdIIJdDE0MC50ZXN0ggl0MTQxLnRl
+c3SCCXQxNDIudGVzdIIJdDE0My50ZXN0ggl0MTQ0LnRlc3SCCXQxNDUudGVzdIIJ
+dDE0Ni50ZXN0ggl0MTQ3LnRlc3SCCXQxNDgudGVzdIIJdDE0OS50ZXN0ggl0MTUw
+LnRlc3SCCXQxNTEudGVzdIIJdDE1Mi50ZXN0ggl0MTUzLnRlc3SCCXQxNTQudGVz
+dIIJdDE1NS50ZXN0ggl0MTU2LnRlc3SCCXQxNTcudGVzdIIJdDE1OC50ZXN0ggl0
+MTU5LnRlc3SCCXQxNjAudGVzdIIJdDE2MS50ZXN0ggl0MTYyLnRlc3SCCXQxNjMu
+dGVzdIIJdDE2NC50ZXN0ggl0MTY1LnRlc3SCCXQxNjYudGVzdIIJdDE2Ny50ZXN0
+ggl0MTY4LnRlc3SCCXQxNjkudGVzdIIJdDE3MC50ZXN0ggl0MTcxLnRlc3SCCXQx
+NzIudGVzdIIJdDE3My50ZXN0ggl0MTc0LnRlc3SCCXQxNzUudGVzdIIJdDE3Ni50
+ZXN0ggl0MTc3LnRlc3SCCXQxNzgudGVzdIIJdDE3OS50ZXN0ggl0MTgwLnRlc3SC
+CXQxODEudGVzdIIJdDE4Mi50ZXN0ggl0MTgzLnRlc3SCCXQxODQudGVzdIIJdDE4
+NS50ZXN0ggl0MTg2LnRlc3SCCXQxODcudGVzdIIJdDE4OC50ZXN0ggl0MTg5LnRl
+c3SCCXQxOTAudGVzdIIJdDE5MS50ZXN0ggl0MTkyLnRlc3SCCXQxOTMudGVzdIIJ
+dDE5NC50ZXN0ggl0MTk1LnRlc3SCCXQxOTYudGVzdIIJdDE5Ny50ZXN0ggl0MTk4
+LnRlc3SCCXQxOTkudGVzdIIJdDIwMC50ZXN0ggl0MjAxLnRlc3SCCXQyMDIudGVz
+dIIJdDIwMy50ZXN0ggl0MjA0LnRlc3SCCXQyMDUudGVzdIIJdDIwNi50ZXN0ggl0
+MjA3LnRlc3SCCXQyMDgudGVzdIIJdDIwOS50ZXN0ggl0MjEwLnRlc3SCCXQyMTEu
+dGVzdIIJdDIxMi50ZXN0ggl0MjEzLnRlc3SCCXQyMTQudGVzdIIJdDIxNS50ZXN0
+ggl0MjE2LnRlc3SCCXQyMTcudGVzdIIJdDIxOC50ZXN0ggl0MjE5LnRlc3SCCXQy
+MjAudGVzdIIJdDIyMS50ZXN0ggl0MjIyLnRlc3SCCXQyMjMudGVzdIIJdDIyNC50
+ZXN0ggl0MjI1LnRlc3SCCXQyMjYudGVzdIIJdDIyNy50ZXN0ggl0MjI4LnRlc3SC
+CXQyMjkudGVzdIIJdDIzMC50ZXN0ggl0MjMxLnRlc3SCCXQyMzIudGVzdIIJdDIz
+My50ZXN0ggl0MjM0LnRlc3SCCXQyMzUudGVzdIIJdDIzNi50ZXN0ggl0MjM3LnRl
+c3SCCXQyMzgudGVzdIIJdDIzOS50ZXN0ggl0MjQwLnRlc3SCCXQyNDEudGVzdIIJ
+dDI0Mi50ZXN0ggl0MjQzLnRlc3SCCXQyNDQudGVzdIIJdDI0NS50ZXN0ggl0MjQ2
+LnRlc3SCCXQyNDcudGVzdIIJdDI0OC50ZXN0ggl0MjQ5LnRlc3SCCXQyNTAudGVz
+dIIJdDI1MS50ZXN0ggl0MjUyLnRlc3SCCXQyNTMudGVzdIIJdDI1NC50ZXN0ggl0
+MjU1LnRlc3SCCXQyNTYudGVzdIIJdDI1Ny50ZXN0ggl0MjU4LnRlc3SCCXQyNTku
+dGVzdIIJdDI2MC50ZXN0ggl0MjYxLnRlc3SCCXQyNjIudGVzdIIJdDI2My50ZXN0
+ggl0MjY0LnRlc3SCCXQyNjUudGVzdIIJdDI2Ni50ZXN0ggl0MjY3LnRlc3SCCXQy
+NjgudGVzdIIJdDI2OS50ZXN0ggl0MjcwLnRlc3SCCXQyNzEudGVzdIIJdDI3Mi50
+ZXN0ggl0MjczLnRlc3SCCXQyNzQudGVzdIIJdDI3NS50ZXN0ggl0Mjc2LnRlc3SC
+CXQyNzcudGVzdIIJdDI3OC50ZXN0ggl0Mjc5LnRlc3SCCXQyODAudGVzdIIJdDI4
+MS50ZXN0ggl0MjgyLnRlc3SCCXQyODMudGVzdIIJdDI4NC50ZXN0ggl0Mjg1LnRl
+c3SCCXQyODYudGVzdIIJdDI4Ny50ZXN0ggl0Mjg4LnRlc3SCCXQyODkudGVzdIIJ
+dDI5MC50ZXN0ggl0MjkxLnRlc3SCCXQyOTIudGVzdIIJdDI5My50ZXN0ggl0Mjk0
+LnRlc3SCCXQyOTUudGVzdIIJdDI5Ni50ZXN0ggl0Mjk3LnRlc3SCCXQyOTgudGVz
+dIIJdDI5OS50ZXN0ggl0MzAwLnRlc3SCCXQzMDEudGVzdIIJdDMwMi50ZXN0ggl0
+MzAzLnRlc3SCCXQzMDQudGVzdIIJdDMwNS50ZXN0ggl0MzA2LnRlc3SCCXQzMDcu
+dGVzdIIJdDMwOC50ZXN0ggl0MzA5LnRlc3SCCXQzMTAudGVzdIIJdDMxMS50ZXN0
+ggl0MzEyLnRlc3SCCXQzMTMudGVzdIIJdDMxNC50ZXN0ggl0MzE1LnRlc3SCCXQz
+MTYudGVzdIIJdDMxNy50ZXN0ggl0MzE4LnRlc3SCCXQzMTkudGVzdIIJdDMyMC50
+ZXN0ggl0MzIxLnRlc3SCCXQzMjIudGVzdIIJdDMyMy50ZXN0ggl0MzI0LnRlc3SC
+CXQzMjUudGVzdIIJdDMyNi50ZXN0ggl0MzI3LnRlc3SCCXQzMjgudGVzdIIJdDMy
+OS50ZXN0ggl0MzMwLnRlc3SCCXQzMzEudGVzdIIJdDMzMi50ZXN0ggl0MzMzLnRl
+c3SCCXQzMzQudGVzdIIJdDMzNS50ZXN0ggl0MzM2LnRlc3SCCXQzMzcudGVzdIIJ
+dDMzOC50ZXN0ggl0MzM5LnRlc3SCCXQzNDAudGVzdIIJdDM0MS50ZXN0ggl0MzQy
+LnRlc3SCCXQzNDMudGVzdIIJdDM0NC50ZXN0ggl0MzQ1LnRlc3SCCXQzNDYudGVz
+dIIJdDM0Ny50ZXN0ggl0MzQ4LnRlc3SCCXQzNDkudGVzdIIJdDM1MC50ZXN0ggl0
+MzUxLnRlc3SCCXQzNTIudGVzdIIJdDM1My50ZXN0ggl0MzU0LnRlc3SCCXQzNTUu
+dGVzdIIJdDM1Ni50ZXN0ggl0MzU3LnRlc3SCCXQzNTgudGVzdIIJdDM1OS50ZXN0
+ggl0MzYwLnRlc3SCCXQzNjEudGVzdIIJdDM2Mi50ZXN0ggl0MzYzLnRlc3SCCXQz
+NjQudGVzdIIJdDM2NS50ZXN0ggl0MzY2LnRlc3SCCXQzNjcudGVzdIIJdDM2OC50
+ZXN0ggl0MzY5LnRlc3SCCXQzNzAudGVzdIIJdDM3MS50ZXN0ggl0MzcyLnRlc3SC
+CXQzNzMudGVzdIIJdDM3NC50ZXN0ggl0Mzc1LnRlc3SCCXQzNzYudGVzdIIJdDM3
+Ny50ZXN0ggl0Mzc4LnRlc3SCCXQzNzkudGVzdIIJdDM4MC50ZXN0ggl0MzgxLnRl
+c3SCCXQzODIudGVzdIIJdDM4My50ZXN0ggl0Mzg0LnRlc3SCCXQzODUudGVzdIIJ
+dDM4Ni50ZXN0ggl0Mzg3LnRlc3SCCXQzODgudGVzdIIJdDM4OS50ZXN0ggl0Mzkw
+LnRlc3SCCXQzOTEudGVzdIIJdDM5Mi50ZXN0ggl0MzkzLnRlc3SCCXQzOTQudGVz
+dIIJdDM5NS50ZXN0ggl0Mzk2LnRlc3SCCXQzOTcudGVzdIIJdDM5OC50ZXN0ggl0
+Mzk5LnRlc3SCCXQ0MDAudGVzdIIJdDQwMS50ZXN0ggl0NDAyLnRlc3SCCXQ0MDMu
+dGVzdIIJdDQwNC50ZXN0ggl0NDA1LnRlc3SCCXQ0MDYudGVzdIIJdDQwNy50ZXN0
+ggl0NDA4LnRlc3SCCXQ0MDkudGVzdIIJdDQxMC50ZXN0ggl0NDExLnRlc3SCCXQ0
+MTIudGVzdIIJdDQxMy50ZXN0ggl0NDE0LnRlc3SCCXQ0MTUudGVzdIIJdDQxNi50
+ZXN0ggl0NDE3LnRlc3SCCXQ0MTgudGVzdIIJdDQxOS50ZXN0ggl0NDIwLnRlc3SC
+CXQ0MjEudGVzdIIJdDQyMi50ZXN0ggl0NDIzLnRlc3SCCXQ0MjQudGVzdIIJdDQy
+NS50ZXN0ggl0NDI2LnRlc3SCCXQ0MjcudGVzdIIJdDQyOC50ZXN0ggl0NDI5LnRl
+c3SCCXQ0MzAudGVzdIIJdDQzMS50ZXN0ggl0NDMyLnRlc3SCCXQ0MzMudGVzdIIJ
+dDQzNC50ZXN0ggl0NDM1LnRlc3SCCXQ0MzYudGVzdIIJdDQzNy50ZXN0ggl0NDM4
+LnRlc3SCCXQ0MzkudGVzdIIJdDQ0MC50ZXN0ggl0NDQxLnRlc3SCCXQ0NDIudGVz
+dIIJdDQ0My50ZXN0ggl0NDQ0LnRlc3SCCXQ0NDUudGVzdIIJdDQ0Ni50ZXN0ggl0
+NDQ3LnRlc3SCCXQ0NDgudGVzdIIJdDQ0OS50ZXN0ggl0NDUwLnRlc3SCCXQ0NTEu
+dGVzdIIJdDQ1Mi50ZXN0ggl0NDUzLnRlc3SCCXQ0NTQudGVzdIIJdDQ1NS50ZXN0
+ggl0NDU2LnRlc3SCCXQ0NTcudGVzdIIJdDQ1OC50ZXN0ggl0NDU5LnRlc3SCCXQ0
+NjAudGVzdIIJdDQ2MS50ZXN0ggl0NDYyLnRlc3SCCXQ0NjMudGVzdIIJdDQ2NC50
+ZXN0ggl0NDY1LnRlc3SCCXQ0NjYudGVzdIIJdDQ2Ny50ZXN0ggl0NDY4LnRlc3SC
+CXQ0NjkudGVzdIIJdDQ3MC50ZXN0ggl0NDcxLnRlc3SCCXQ0NzIudGVzdIIJdDQ3
+My50ZXN0ggl0NDc0LnRlc3SCCXQ0NzUudGVzdIIJdDQ3Ni50ZXN0ggl0NDc3LnRl
+c3SCCXQ0NzgudGVzdIIJdDQ3OS50ZXN0ggl0NDgwLnRlc3SCCXQ0ODEudGVzdIIJ
+dDQ4Mi50ZXN0ggl0NDgzLnRlc3SCCXQ0ODQudGVzdIIJdDQ4NS50ZXN0ggl0NDg2
+LnRlc3SCCXQ0ODcudGVzdIIJdDQ4OC50ZXN0ggl0NDg5LnRlc3SCCXQ0OTAudGVz
+dIIJdDQ5MS50ZXN0ggl0NDkyLnRlc3SCCXQ0OTMudGVzdIIJdDQ5NC50ZXN0ggl0
+NDk1LnRlc3SCCXQ0OTYudGVzdIIJdDQ5Ny50ZXN0ggl0NDk4LnRlc3SCCXQ0OTku
+dGVzdIIJdDUwMC50ZXN0ggl0NTAxLnRlc3SCCXQ1MDIudGVzdIIJdDUwMy50ZXN0
+ggl0NTA0LnRlc3SCCXQ1MDUudGVzdIIJdDUwNi50ZXN0ggl0NTA3LnRlc3SCCXQ1
+MDgudGVzdIIJdDUwOS50ZXN0ggl0NTEwLnRlc3SCCXQ1MTEudGVzdIIJdDUxMi50
+ZXN0MA0GCSqGSIb3DQEBCwUAA4IBAQBjxDfYTobCREWVHPrt1T9iT2t0gieS7hVw
+lQaezO1n+m0MerQ92DHhMXBROBiMXIWyvTa341xClpYAwPqqAIUEdS0L5r4Jq/Ep
+4uglb+eZXMvTAm89KH3L8xTugc8UtHMqbfyo92v96wgFXBrcDDXIkGdPkLyz2s2J
+QjpNVG/La/EYTQdHPgv6Rg0g+t6RNN1JJ0p1wQ5ItDc8d/bfWdlG/EViWVRsiSBh
+7YRbkGWdnHnorCe0yIg0jKCk3UhgXaYY66/alpmE/QVXSaLgNvdmJ5m9mixY0ZaB
+0niy+KzIgBczvDcxVdL5/fsxGvA4nI8Gi7Z+EJDKXeED+FwcTDJD
+-----END CERTIFICATE-----
diff --git a/test/certs/some-names3.pem b/test/certs/some-names3.pem
new file mode 100644
index 000000000000..a6d3ee790dfc
--- /dev/null
+++ b/test/certs/some-names3.pem
@@ -0,0 +1,293 @@
+-----BEGIN CERTIFICATE-----
+MII2fzCCNWegAwIBAgIBBzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
+Fw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgjO+MRAwDgYDVQQDEwd0
+MC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+MUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+M0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+NUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+N0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
+OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI
+dDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB
+Fgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B
+CQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3
+DQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI
+hvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq
+hkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG
+CSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw
+FQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx
+FzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz
+dDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0
+ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy
+QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0
+MzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW
+CHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ
+ARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN
+AQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG
+9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG
+SIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ
+KoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV
+BgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX
+MBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0
+MRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl
+c3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA
+dGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1
+N0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI
+dDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB
+Fgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B
+CQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3
+DQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI
+hvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq
+hkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG
+CSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw
+FQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx
+FzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz
+dDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0
+ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw
+QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0
+ODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW
+CHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ
+ARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN
+AQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG
+9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG
+SIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ
+KoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV
+BgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX
+MBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjMyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyMzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIz
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyMzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIzN0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjQxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyNDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjUwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyNTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MjUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDI1NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyNTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyNjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MjYyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI2NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjY1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyNjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjY4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MjcxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI3M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjc0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyNzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0Mjc3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzhAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDI3OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQyODFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQyODRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4NUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0Mjg2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyODdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDI4OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjg5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQyOTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5MUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MjkyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+Mjk1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDI5N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjk4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQyOTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwMEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzAxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDMwM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzMDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMw
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzMDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwOUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzEwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDMxMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzEzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzMTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxNUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MzE2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzE5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDMyMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzIyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzMjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMyNEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzI1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDMyN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzI4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzMjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMz
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzMzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzM0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMzVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDMzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzM3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzMzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzOUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MzQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDM0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzQ2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzNDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0OEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDM1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzUyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzNTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzNTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1N0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDM2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzYxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzNjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0MzY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDM2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzcwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzNzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0MzczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDM3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQzNzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQzODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4MUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0MzgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDM4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzg1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQzODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4N0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0Mzg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+MzkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOTJAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDM5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzk0QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQzOTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5NkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0Mzk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOThAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDM5OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAwQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQw
+MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAzQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0MDRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQwNUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDA2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDdAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQwOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDA5QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0MTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxMUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDEyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTNA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDE1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTZAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQxN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDE4QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0MTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyMEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDIxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjJAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQyM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI0QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQy
+NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI3QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0MjhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyOUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDMwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzFAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQzMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDMzQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0MzRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzNUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDM2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzdA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDM5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDBAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQ0MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQyQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0NDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ0NEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDQ1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDZAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQ0N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQ4QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1
+MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDUxQHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0NTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1M0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDU0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NTVAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQ1NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDU3QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0NThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1OUB0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDYwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjFA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDYzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjRAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQ2NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDY2QHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0NjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2OEB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDY5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzBAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQ3MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDcyQHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3
+NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDc1QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ0NzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3N0B0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NDc4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzlAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDQ4MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDgxQHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ0ODJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4M0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NDg0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODVA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NDg3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODhAdGVzdDEYMBYGCSqGSIb3DQEJ
+ARYJdDQ4OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDkwQHRlc3QxGDAWBgkqhkiG
+9w0BCQEWCXQ0OTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5MkB0ZXN0MRgwFgYJ
+KoZIhvcNAQkBFgl0NDkzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTRAdGVzdDEY
+MBYGCSqGSIb3DQEJARYJdDQ5NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk2QHRl
+c3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5
+OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk5QHRlc3QxGDAWBgkqhkiG9w0BCQEW
+CXQ1MDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwMUB0ZXN0MRgwFgYJKoZIhvcN
+AQkBFgl0NTAyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDNAdGVzdDEYMBYGCSqG
+SIb3DQEJARYJdDUwNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTA1QHRlc3QxGDAW
+BgkqhkiG9w0BCQEWCXQ1MDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwN0B0ZXN0
+MRgwFgYJKoZIhvcNAQkBFgl0NTA4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDlA
+dGVzdDEYMBYGCSqGSIb3DQEJARYJdDUxMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0
+NTExQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MTJAdGVzdDCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBALoL2oQZEgFBdXwuPb29W75T63JfNJKKdYi6YrmK
+M+EKbcMue/hFrLGQXB6a2eQZFn+j3hmexeQF9T8iWxh2S6rzAr1Yj+qXeDBaMf4o
+BEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFcV/i0bcIFt5p7v7wbu686a/w0
+vIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUWPaKsJluwR514pJv74urIyEt+
+dFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb/GjvQ6YfvDXRrYPCxWMk0x3F
+MSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj3kIrLbkCAwEAAaM1MDMwDgYD
+VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw
+DQYJKoZIhvcNAQELBQADggEBAH6ad2kFE0qGDe3ErMdwTGjbBz3T12dDvAUVhGHQ
+uZShOdPsXMHD2mUqFgLE0iJFeXB7jOSAKtzmKHNmxZ4W0UZ7eMPPogkgIbG3d3yR
+8zBO21CUyOQWChywpKcAou9ji3Kq6pb4+mqq0a5TGIYyGJKSUTv09KI+iHgwteCX
+DHzzhuTs8AhodmNO5K/F9YFWJWvQ1NrwyUmOFEw8/UcljyKxFrP2VEov0fWeiTRB
+Ps6VaFBW7SEEi8fAM9W5kfsl+iWRvwFcFdXGQt1HbeywCu58DLI4uceHCFb+3MMO
+Xv7wJ5UhQODuzwuq7CuZvlxR2tiFoPP+s5fPH0L8MBP5z6w=
+-----END CERTIFICATE-----
diff --git a/test/certs/sroot+anyEKU.pem b/test/certs/sroot+anyEKU.pem
new file mode 100644
index 000000000000..9beefa9b0f7a
--- /dev/null
+++ b/test/certs/sroot+anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAQEAknUQhKHR
+lI3BOPTuD+DMabjdfZ6Sb5ICpIOcvYFnlZV0lkyK3TuOw+iSlUUzHT3MlMos1w2a
+mYPb1BpACTpB1vOcRZPaoSZqiOJrKzes+oUZG7R75lz+TK4Y1lQlWObsnUlFUDzr
+c3P3mbCALr9RPee+Mqd10E/57jjIF0sb3Cq74l7MEzD/3JWKhxEtTmChG+Q29bzW
+foaDqVaePdyk4M+TMQMioGqXYqu/4bzCnZyls1J5FfwBCtPGJ1/3wxLwk+Pavu9w
+TSagWsC90QGRYH0EauS1KqlJ6dR6Tyf6G5HHmDPufzHT0ouL5Db6C59XSMWud6RG
+E3ODKNXOOP3jsDAIMAYGBFUdJQA=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sroot+clientAuth.pem b/test/certs/sroot+clientAuth.pem
new file mode 100644
index 000000000000..939e3e85e06a
--- /dev/null
+++ b/test/certs/sroot+clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAQEAknUQhKHR
+lI3BOPTuD+DMabjdfZ6Sb5ICpIOcvYFnlZV0lkyK3TuOw+iSlUUzHT3MlMos1w2a
+mYPb1BpACTpB1vOcRZPaoSZqiOJrKzes+oUZG7R75lz+TK4Y1lQlWObsnUlFUDzr
+c3P3mbCALr9RPee+Mqd10E/57jjIF0sb3Cq74l7MEzD/3JWKhxEtTmChG+Q29bzW
+foaDqVaePdyk4M+TMQMioGqXYqu/4bzCnZyls1J5FfwBCtPGJ1/3wxLwk+Pavu9w
+TSagWsC90QGRYH0EauS1KqlJ6dR6Tyf6G5HHmDPufzHT0ouL5Db6C59XSMWud6RG
+E3ODKNXOOP3jsDAMMAoGCCsGAQUFBwMC
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sroot+serverAuth.pem b/test/certs/sroot+serverAuth.pem
new file mode 100644
index 000000000000..447d2e3a2e90
--- /dev/null
+++ b/test/certs/sroot+serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAQEAknUQhKHR
+lI3BOPTuD+DMabjdfZ6Sb5ICpIOcvYFnlZV0lkyK3TuOw+iSlUUzHT3MlMos1w2a
+mYPb1BpACTpB1vOcRZPaoSZqiOJrKzes+oUZG7R75lz+TK4Y1lQlWObsnUlFUDzr
+c3P3mbCALr9RPee+Mqd10E/57jjIF0sb3Cq74l7MEzD/3JWKhxEtTmChG+Q29bzW
+foaDqVaePdyk4M+TMQMioGqXYqu/4bzCnZyls1J5FfwBCtPGJ1/3wxLwk+Pavu9w
+TSagWsC90QGRYH0EauS1KqlJ6dR6Tyf6G5HHmDPufzHT0ouL5Db6C59XSMWud6RG
+E3ODKNXOOP3jsDAMMAoGCCsGAQUFBwMB
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sroot-anyEKU.pem b/test/certs/sroot-anyEKU.pem
new file mode 100644
index 000000000000..7f1766a36364
--- /dev/null
+++ b/test/certs/sroot-anyEKU.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAQEAknUQhKHR
+lI3BOPTuD+DMabjdfZ6Sb5ICpIOcvYFnlZV0lkyK3TuOw+iSlUUzHT3MlMos1w2a
+mYPb1BpACTpB1vOcRZPaoSZqiOJrKzes+oUZG7R75lz+TK4Y1lQlWObsnUlFUDzr
+c3P3mbCALr9RPee+Mqd10E/57jjIF0sb3Cq74l7MEzD/3JWKhxEtTmChG+Q29bzW
+foaDqVaePdyk4M+TMQMioGqXYqu/4bzCnZyls1J5FfwBCtPGJ1/3wxLwk+Pavu9w
+TSagWsC90QGRYH0EauS1KqlJ6dR6Tyf6G5HHmDPufzHT0ouL5Db6C59XSMWud6RG
+E3ODKNXOOP3jsDAIoAYGBFUdJQA=
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sroot-cert.pem b/test/certs/sroot-cert.pem
new file mode 100644
index 000000000000..7fd65dfe924b
--- /dev/null
+++ b/test/certs/sroot-cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDFjCCAf6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTIwMTIxMjIwMTEzN1oYDzIxMjAxMjEzMjAxMTM3WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo3UwczAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB
+BjAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3o1IwHwYDVR0jBBgwFoAUjvUl
+rx6ba4Q9fICayVOcTXL3o1IwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcN
+AQELBQADggEBABWUjaqtkdRDhVAJZTxkJVgohjRrBwp86Y0JZWdCDua/sErmEaGu
+nQVxWWFWIgu6sb8tyQo3/7dBIQl3Rpij9bsgKhToO1OzoG3Oi3d0+zRDHfY6xNrj
+TUE00FeLHGNWsgZSIvu99DrGApT/+uPdWfJgMu5szillqW+4hcCUPLjG9ekVNt1s
+KhdEklo6PrP6eMbm6s22EIVUxqGE6xxAmrvyhlY1zJH9BJ23Ps+xabjG6OeMRZzT
+0F/fU7XIFieSO7rqUcjgo1eYc3ghsDxNUJ6TPBgv5z4SPnstoOBj59rjpJ7Qkpyd
+L17VfEadezat37Cpeha7vGDduCsyMfN4kiw=
+-----END CERTIFICATE-----
diff --git a/test/certs/sroot-clientAuth.pem b/test/certs/sroot-clientAuth.pem
new file mode 100644
index 000000000000..e91f1d2d6047
--- /dev/null
+++ b/test/certs/sroot-clientAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAQEAknUQhKHR
+lI3BOPTuD+DMabjdfZ6Sb5ICpIOcvYFnlZV0lkyK3TuOw+iSlUUzHT3MlMos1w2a
+mYPb1BpACTpB1vOcRZPaoSZqiOJrKzes+oUZG7R75lz+TK4Y1lQlWObsnUlFUDzr
+c3P3mbCALr9RPee+Mqd10E/57jjIF0sb3Cq74l7MEzD/3JWKhxEtTmChG+Q29bzW
+foaDqVaePdyk4M+TMQMioGqXYqu/4bzCnZyls1J5FfwBCtPGJ1/3wxLwk+Pavu9w
+TSagWsC90QGRYH0EauS1KqlJ6dR6Tyf6G5HHmDPufzHT0ouL5Db6C59XSMWud6RG
+E3ODKNXOOP3jsDAMoAoGCCsGAQUFBwMC
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/sroot-serverAuth.pem b/test/certs/sroot-serverAuth.pem
new file mode 100644
index 000000000000..2fd78ccfb87c
--- /dev/null
+++ b/test/certs/sroot-serverAuth.pem
@@ -0,0 +1,19 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
+oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
+feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
+wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
+MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
+aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
+tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
+o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
+/zATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAQEAknUQhKHR
+lI3BOPTuD+DMabjdfZ6Sb5ICpIOcvYFnlZV0lkyK3TuOw+iSlUUzHT3MlMos1w2a
+mYPb1BpACTpB1vOcRZPaoSZqiOJrKzes+oUZG7R75lz+TK4Y1lQlWObsnUlFUDzr
+c3P3mbCALr9RPee+Mqd10E/57jjIF0sb3Cq74l7MEzD/3JWKhxEtTmChG+Q29bzW
+foaDqVaePdyk4M+TMQMioGqXYqu/4bzCnZyls1J5FfwBCtPGJ1/3wxLwk+Pavu9w
+TSagWsC90QGRYH0EauS1KqlJ6dR6Tyf6G5HHmDPufzHT0ouL5Db6C59XSMWud6RG
+E3ODKNXOOP3jsDAMoAoGCCsGAQUFBwMB
+-----END TRUSTED CERTIFICATE-----
diff --git a/test/certs/subinterCA-ss.pem b/test/certs/subinterCA-ss.pem
new file mode 100644
index 000000000000..a436b4b00dbf
--- /dev/null
+++ b/test/certs/subinterCA-ss.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDhzCCAm+gAwIBAgIJAJTed6XmFiu/MA0GCSqGSIb3DQEBCwUAMFoxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEzARBgNVBAMMCnN1YmludGVyQ0EwHhcNMTUwNzAyMTMy
+MTU4WhcNMzUwNzAyMTMyMTU4WjBaMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29t
+ZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYD
+VQQDDApzdWJpbnRlckNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+/zQjvhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb2ARVkYZP5e9gHb04
+wPVz2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1nJeSv3na8gyOoCheG
+64kWVbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/CpdCHE3DKAzAiri3G
+Vc90OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMywtz4hhY/XZTvdEn2
+90aL857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRFHONWZG1T4mRY1Drh
+6VbJGb+0GNIldNLQqigkfwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQW
+BBTpZ30QdMGarrhMPwk+HHAV3R8aTzAfBgNVHSMEGDAWgBTpZ30QdMGarrhMPwk+
+HHAV3R8aTzANBgkqhkiG9w0BAQsFAAOCAQEAF8UAMtV1DClUWRw1h+THdAhjeo8S
+9BOp6QphtlYuc9o+tQri5m+WqbyUZKIBEtumNhFb7QI1e4hO64y1kKbSs2AjWcJ2
+QxAyGiMM3wl2UfxPohDtgNhm0GFgQ1tUTeSnW3kAom9NqI7U/2lPpLh4rrFYTepR
+wy0FV3NpRuHPtJE0VfqYnwWiTRdCJ7w1XzknKOUSHP/hRbyJVlwQp3VEQ9SIOYU6
+C+QEVGIgQiST6MRlCvoNP43guaRtrMuBZJaHKy/hLPvkdRpXHoUeKQFDuH77sZsF
+sBv3EHNKoBvpSpSJndZN6UcH7Z1yn41Y6AnO4u492jiRAjQpP9+Nf/x1eg==
+-----END CERTIFICATE-----
diff --git a/test/certs/subinterCA.key b/test/certs/subinterCA.key
new file mode 100644
index 000000000000..c867af9463dc
--- /dev/null
+++ b/test/certs/subinterCA.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEA/zQjvhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb
+2ARVkYZP5e9gHb04wPVz2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1n
+JeSv3na8gyOoCheG64kWVbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/C
+pdCHE3DKAzAiri3GVc90OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMy
+wtz4hhY/XZTvdEn290aL857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRF
+HONWZG1T4mRY1Drh6VbJGb+0GNIldNLQqigkfwIDAQABAoIBAQDg14MWGu+F4gqg
+nwI1OPt95UjmXaz7Sd0NmoNxTKJjgN/9v33emBL7n6YNIxU/nlK+ToLBGo0tPjfO
+ZHoskA1H/aiiMfKowcpV4PHbUZvpE0oYM/rIu+7mxR3ZPDT0jz3jjmgLHrEKFCXd
+SfTtwOSJVzYvGdCdDE1nUXiRMcGlrJYxPf+0k3sGK7G90rYJkgffz92yuJote/s5
+P5nsK1h30yjKaWEzvf3ABladplykFN3GkICRGaCq0Nj5YWiG7qX9H9smYrioG0VH
+VqgIbV2sHnmUYZaOTmC0RnwDWSZR25xOHVbugZ7rGnf4NdoM2S/oTI/SAXcDsaDX
+lDpiEEuBAoGBAP/TISpeDRtUWzfVQxH+wbMdSbABjawf5sT7op7IsWsurY7u+KVh
+ubhaSdeR7YbTyVUqbAc4mg9TIZxDe6+/I2S8LibQAa8wnv5aR1iPj/tZJOKrtu+Z
+uHUyXMDR+8pIjQS0N+ukFp0tw9nicPNUt23JpqDFMvpASF+kUlnHOWAvAoGBAP9g
+5rDid235QnnAhNJGkxE1ZwICPSo66AD/kF8XsMnAVasR0EPJCQ1+Zmh7wsXGq6Im
+S65F4m0tsw4jeD67D1o5yuAnk/LLcdOdHW1w7iHuIhYKuWf1fqsOIqJLy7gdzwj4
+hImECoE40cqlLTge7xByxeHJwKF9ssXcwHFBIJyxAoGBAI5SeyUC5e/KYmURdBrS
+zBhFtvUAKD0WEmCMTdBgfrPOaCgYsqPvVk9Fi8cuHCLiOCP1UdxClRLpgM1ajbkc
+cShduJ9HIWjBd/KxbvfKBqQi1+5y8Xci4gfxWMC9EYNcEXgIewPRafNPvqG85HG7
+M8EUamsOymmG0bzDwjzIJRdpAoGAOUoVtmy3ehZG0WVc5ocqitu+BfdWnViln0O1
+sX9xC3F4Rm4ymGJLA5ntg1bwNMoCytdodun6h5+O4YcXfIseQJFib7KxP/Bf0qcW
+aOzCnx36y5MQUMAD8H+1SU9TnjQhs9N8eBUE/kQu3BT99e8KllgJCEPoUNIP/s8s
+5LtFg6ECgYEAgLwJoJ3hBwr0LmUi3kpFYdbZ+tAKIvKQH3xYMnQulOqtlXJFy0bu
+ZcIAwsigRUqdCC2JuyAUw52HCtVVlpQjNs4BnUzaKooLOCm3w3i6X27mnHE0200S
+zqC0rcB0xNz/IltGc7IP+T8UK5xX38uhJ/vUW75OvAjqheJSBwR9h5c=
+-----END RSA PRIVATE KEY-----
diff --git a/test/certs/subinterCA.pem b/test/certs/subinterCA.pem
new file mode 100644
index 000000000000..2cdf48011398
--- /dev/null
+++ b/test/certs/subinterCA.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAmygAwIBAgIJAJkv2OGshkmUMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMTB2ludGVyQ0EwHhcNMTUwNzAyMTMxODIz
+WhcNMzUwNzAyMTMxODIzWjBaMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1T
+dGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQD
+EwpzdWJpbnRlckNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/zQj
+vhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb2ARVkYZP5e9gHb04wPVz
+2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1nJeSv3na8gyOoCheG64kW
+VbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/CpdCHE3DKAzAiri3GVc90
+OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMywtz4hhY/XZTvdEn290aL
+857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRFHONWZG1T4mRY1Drh6VbJ
+Gb+0GNIldNLQqigkfwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBTp
+Z30QdMGarrhMPwk+HHAV3R8aTzAfBgNVHSMEGDAWgBQY+tYjuY9dXRN9Po+okcfZ
+YcAXLjANBgkqhkiG9w0BAQsFAAOCAQEAgVUsOf9rdHlQDw4clP8GMY7QahfXbvd8
+8o++P18KeInQXH6+sCg0axZXzhOmKwn+Ina3EsOP7xk4aKIYwJ4A1xBuT7fKxquQ
+pbJyjkEBsNRVLC9t4gOA0FC791v5bOCZjyff5uN+hy8r0828nVxha6CKLqwrPd+E
+mC7DtilSZIgO2vwbTBL6ifmw9n1dd/Bl8Wdjnl7YJqTIf0Ozc2SZSMRUq9ryn4Wq
+YrjRl8NwioGb1LfjEJ0wJi2ngL3IgaN94qmDn10OJs8hlsufwP1n+Bca3fsl0m5U
+gUMG+CXxbF0kdCKZ9kQb1MJE4vOk6zfyBGQndmQnxHjt5botI/xpXg==
+-----END CERTIFICATE-----
diff --git a/test/certs/untrusted.pem b/test/certs/untrusted.pem
new file mode 100644
index 000000000000..d93d312ddb3d
--- /dev/null
+++ b/test/certs/untrusted.pem
@@ -0,0 +1,42 @@
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAmygAwIBAgIJAJkv2OGshkmUMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMTB2ludGVyQ0EwHhcNMTUwNzAyMTMxODIz
+WhcNMzUwNzAyMTMxODIzWjBaMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1T
+dGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQD
+EwpzdWJpbnRlckNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/zQj
+vhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb2ARVkYZP5e9gHb04wPVz
+2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1nJeSv3na8gyOoCheG64kW
+VbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/CpdCHE3DKAzAiri3GVc90
+OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMywtz4hhY/XZTvdEn290aL
+857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRFHONWZG1T4mRY1Drh6VbJ
+Gb+0GNIldNLQqigkfwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBTp
+Z30QdMGarrhMPwk+HHAV3R8aTzAfBgNVHSMEGDAWgBQY+tYjuY9dXRN9Po+okcfZ
+YcAXLjANBgkqhkiG9w0BAQsFAAOCAQEAgVUsOf9rdHlQDw4clP8GMY7QahfXbvd8
+8o++P18KeInQXH6+sCg0axZXzhOmKwn+Ina3EsOP7xk4aKIYwJ4A1xBuT7fKxquQ
+pbJyjkEBsNRVLC9t4gOA0FC791v5bOCZjyff5uN+hy8r0828nVxha6CKLqwrPd+E
+mC7DtilSZIgO2vwbTBL6ifmw9n1dd/Bl8Wdjnl7YJqTIf0Ozc2SZSMRUq9ryn4Wq
+YrjRl8NwioGb1LfjEJ0wJi2ngL3IgaN94qmDn10OJs8hlsufwP1n+Bca3fsl0m5U
+gUMG+CXxbF0kdCKZ9kQb1MJE4vOk6zfyBGQndmQnxHjt5botI/xpXg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDfjCCAmagAwIBAgIJAKRNsDKacUqNMA0GCSqGSIb3DQEBCwUAMFoxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEzARBgNVBAMTCnN1YmludGVyQ0EwHhcNMTUwNzAyMTMx
+OTQ5WhcNMzUwNzAyMTMxOTQ5WjBUMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29t
+ZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ0wCwYD
+VQQDEwRsZWFmMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv0Qo9WC/
+BKA70LtQJdwVGSXqr9dut3cQmiFzTb/SaWldjOT1sRNDFxSzdTJjU/8cIDEZvaTI
+wRxP/dtVQLjc+4jzrUwz93NuZYlsEWUEUg4Lrnfs0Nz50yHk4rJhVxWjb8Ii/wRB
+ViWHFExP7CwTkXiTclC1bCqTuWkjxF3thTfTsttRyY7qNkz2JpNx0guD8v4otQoY
+jA5AEZvK4IXLwOwxol5xBTMvIrvvff2kkh+c7OC2QVbUTow/oppjqIKCx2maNHCt
+LFTJELf3fwtRJLJsy4fKGP0/6kpZc8Sp88WK4B4FauF9IV1CmoAJUC1vJxhagHIK
+fVtFjUWs8GPobQIDAQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQcHcT+8SVG
+IRlN9YTuM9rlz7UZfzAfBgNVHSMEGDAWgBTpZ30QdMGarrhMPwk+HHAV3R8aTzAN
+BgkqhkiG9w0BAQsFAAOCAQEAGjmSkF8is+v0/RLcnSRiCXENz+yNi4pFCAt6dOtT
+6Gtpqa1tY5It9lVppfWb26JrygMIzOr/fB0r1Q7FtZ/7Ft3P6IXVdk3GDO0QsORD
+2dRAejhYpc5c7joHxAw9oRfKrEqE+ihVPUTcfcIuBaalvuhkpQRmKP71ws5DVzOw
+QhnMd0TtIrbKHaNQ4kNsmSY5fQolwB0LtNfTus7OEFdcZWhOXrWImKXN9jewPKdV
+mSG34NfXOnA6qx0eQg06z+TkdrptH6j1Va2vS1/bL+h1GxjpTHlvTGaZYxaloIjw
+y/EzY5jygRoABnR3eBm15CYZwwKL9izIq1H3OhymEi/Ycg==
+-----END CERTIFICATE-----
diff --git a/test/certs/v3-certs-RC2.p12 b/test/certs/v3-certs-RC2.p12
new file mode 100644
index 000000000000..0cdbcc1f2662
--- /dev/null
+++ b/test/certs/v3-certs-RC2.p12
Binary files differ
diff --git a/test/certs/v3-certs-TDES.p12 b/test/certs/v3-certs-TDES.p12
new file mode 100644
index 000000000000..d203dc29860a
--- /dev/null
+++ b/test/certs/v3-certs-TDES.p12
Binary files differ
diff --git a/test/certs/wrongcert.pem b/test/certs/wrongcert.pem
new file mode 100644
index 000000000000..b8b3cfdba365
--- /dev/null
+++ b/test/certs/wrongcert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIC/TCCAeWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1Xcm9u
+ZyBSb290IENBMCAXDTE2MDExNDIyMjkwMVoYDzIxMTYwMTE1MjIyOTAxWjAYMRYw
+FAYDVQQDDA1Xcm9uZyBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA1qOM0wmfvpzDnuZbMaZd5VtYPVYFoYMhlSmUQWCH/I17zxzzWi2SCRvc
+JXx+mZcK1l7KXYabewH1fxHzBGJYI/huxqEF3G7e0cqa60XAhyEKfop0VrKMpqDh
+sNRxqC3PWaQQzijlD2XEY5h3u97qn/m4mAMO1RvKUtv0l0Go9G3VZVp0HSPxW2VM
+0xDyOhlPSYzQ0solQgvb3Nir6dyxzOFz4kCJiVwOQQ4YFvRps72NcBV7q6OWpXHE
+URIGlVlc7p/8ysGNMgj/G3mtPjVtb+AKFDESO+l9ZGi5JU1LJJf23A2BVUgP4eL1
+huZGrTsVNdIYMds1yHyoDfHABLI+TQIDAQABo1AwTjAdBgNVHQ4EFgQU0sgStYvh
+Wvrkc0aam05HE5YMZFgwHwYDVR0jBBgwFoAU0sgStYvhWvrkc0aam05HE5YMZFgw
+DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAT4DDpFvHBIzhKR1/LJx6
+1gsXYCAp1fre5luek/kGTRrInWg6OLZ7B2wLtGcfNlfpRCvLHCh1ORgctNaYwBgE
+xOGWHTsbFDfq15cOcATXgDqRch8dLv/5XKm8rXDwmi6mUfbwUDF5qko4f3hpBWvA
+EBRJSqPvaRxfiJs3SXGnCbiIcYEz0nAwgqfJl7QFXnD22Fu0FGczwzW/7kh0EeIW
+tMsyrIvMR+s6AYzwYrRnUjXBNHjRxuiy5KmyvTMoFm5R6PsD2YfUN1xFkdRy48vb
+8fVYApmiXoNWMBgVSija261L81OY4yZZw3BK8nAGrko5VmXjbfYIScpiMlZkXLHN
+Ww==
+-----END CERTIFICATE-----
diff --git a/test/certs/wrongkey.pem b/test/certs/wrongkey.pem
new file mode 100644
index 000000000000..72ab17b0049a
--- /dev/null
+++ b/test/certs/wrongkey.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDWo4zTCZ++nMOe
+5lsxpl3lW1g9VgWhgyGVKZRBYIf8jXvPHPNaLZIJG9wlfH6ZlwrWXspdhpt7AfV/
+EfMEYlgj+G7GoQXcbt7RyprrRcCHIQp+inRWsoymoOGw1HGoLc9ZpBDOKOUPZcRj
+mHe73uqf+biYAw7VG8pS2/SXQaj0bdVlWnQdI/FbZUzTEPI6GU9JjNDSyiVCC9vc
+2Kvp3LHM4XPiQImJXA5BDhgW9GmzvY1wFXuro5alccRREgaVWVzun/zKwY0yCP8b
+ea0+NW1v4AoUMRI76X1kaLklTUskl/bcDYFVSA/h4vWG5katOxU10hgx2zXIfKgN
+8cAEsj5NAgMBAAECggEBAJBlHKMI0W/RVIT8oZMIQhi/V+CDk2wxpJENlNBamYFc
+yVLvPgOHrrv0Aykw1JaNF1xaDrfWi5i4G6jtsVhctMEWK6fywdemur3WGFx442nE
+36N7j4KXwamDh/GHKiMjFmBO0INw3ZB7PSBnfP1lnOAchoO1YvAZLwaJNMXhBUHR
+uoGrL2nv2F6EDe1whuNd6ifNPT8aX+8kOP0ooe6+rEvoe8Q6N+ktMLcl/b6y7nqt
+Tkl1CzuCnC/KJwY6LRRl6NUttw1c78IauqeNRuLYuaUKMXRjWkKTzPY7sHAdQbey
+szC6Rowso6i26n7a0yJFnML8NDZPJAsJqj7NA1rfn4ECgYEA8K51eqVe9C0uNdcG
+jxbzZZggPXM2SjGLwSz7DazN67kGkLY54B4BO1s428ZfpgsI364Cyg7vocDegAr2
+t9/+N+i/fF7c9yKICxefNcO/Q1i4hozTimQHEWpCDKgystBrWl+CopRrq/QMndGh
+oFfeLzIwQ3m69lFgTBwyTRCDsi0CgYEA5EzEI3uGVfP639x06/7h2kLeBYUlvIaA
+84O4t7oAvsIRHBsTvi5OKR2YB9ONkDLmdSEZaGg7KUgzPDBoJ2PDmGP6jEiW//bD
+9ftXb6UPUuHMyQu92wzJW6qrNSZu13NqkQ0XTBYBYlYGTvESljJhbWTDLpUd7dlV
+i4xxAkxJ8KECgYAD4MvDziZZiODVvUE9zQDfAjSCyPh2+ZVm53KkJcSrp6+TZVxJ
+YDJk4nNoFyozYroh4Ivq9ZKm6JStO3/+Nn3CKN3tAxpMYSIQC7FlDGJok2VlxZ8i
++7mhbjTiP1ORzgnsyt0wAXQ6sRQC9v3Dt6a82/IrJCr/DRCgKVQmKb31gQKBgQC5
+IctYHr5UC1KgoGysR3es/9Z9UXjFhakiT+nGC265QjSPvyFmcrRtQRNdHV/J1Izv
+5NRuxz9afbMWlwaPEqa1eDXf9qmEjf5hBd3kqkxf4L2pNv1Rme/bhu3pXu45ht2f
+HKeMyrd6n9njwDhbViWNiU2CA+hOTZTCYjPuMiEvoQKBgQCY4styVO7gKdNc3j9c
+iPAjnMjBBqLzEJdS4de2BFdKM4xhX4OWbNsO+GcMlq4k1Tt6dMKdcLmjnHWsdsqp
+UFGEMMZDd/ez6kOAGInYajr7rmRjxAolZwK7mc1OQcDiNgjb5Qs0E5zM4TEg5r56
+sU+ewyfUH6y1dTTJhjIldEfUtw==
+-----END PRIVATE KEY-----
diff --git a/test/certs/x509-check-key.pem b/test/certs/x509-check-key.pem
new file mode 100644
index 000000000000..20888d0437dd
--- /dev/null
+++ b/test/certs/x509-check-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCd6jpgFiM/ZW6d
+CJlEIxmKk7rH7MRL93wW32o5duTwtT1cs/y+ylfey0l5tYBzGMxjUPNeYGTBqiuz
+6ueVyMvbe3wymXPp+zzoaq3if3Jycb+1gurSyiQpF6T1PLmfJDgQQT0XnI7qRwHI
+5FJTvKM9mpv3iKohBseT/a8yfdk27zFYrSMZjfaqZc+0a18bHi/SgNN36Lj+vnPc
+s2DzS8ymBJ10Zq6icy6xL30sHDKPOKKrD8+EJ6suUm5CpLL4N6jPOmk9Dj7XQv2Y
+woX2S0Ys6dFpHuGBJ1NngBW/0Zm9oseDOxxqplPGIYa8nN7BIrTwAJEhkmKTEi9P
+8APIi6DVAgMBAAECggEAMWkKnuoOWVXJiIUaP8GjykJzHP8uZH6paxa4zAYxmEd9
+TbZbjO8PE30UHmr2KA1IVoMLwynyHM68Ie2MTMepUaGPuN1e8YVVB3vpsIckLj79
+NzQheZcaPWlSihFYGz1f9WYUUYEBDrjtDAi04dKSWUI5LviqEu9mHx4vZWMPRiqP
+mrtp3CH34ViJL4v4TtvEeuOvLf4mYpfWe1Il7U2eYSqcxO0lCwk7nd/JCzpPWA7C
+TQZSTtp5AQ4OT7LPFZIgs/87Qi8fuEEvN+6rt07r0j6/gPOVa2xoj4a7MJYsxi9O
+s1xA8Q+xjUEnjHth1MLCrmHYbJuWptIqgPTkVvB2OQKBgQDSAywBvs7PDdt+BLTc
+6J4g/gOL/17ATysmhUGJ6VxrNulViLtiFeyf3p4vj/fSa2y4ZnP/hHovzfces1Bd
+6YXtPGIuRNOnVdlYx2Y/OGrw0baxRAIW8D6Z4ms1n8hesGssteKZeaT4ojIPpJS1
+c1UtextX5OBLYaiFxwTb1Q6bAwKBgQDAfpbrlBN4936glc5uFmKNvFfNB8P30+Bk
+DFtth5TMsCL406aUlIl4lkBrXAgUTndRai2cWYD9ffsXQmm+yx1q5kO6akeAaueq
+WMo3ViZnxK8Fe4oF4M9OoaEQRcVmV5jFMKH9S268B8/x96lNh/i7M58nB5AeNDlV
+AMyHW2vhRwKBgAxduXKk3KKei0UhW9ECNYV1z5mnwNmMD9tlz1Uik5mQky7BLV96
+MQO85Q2h6ZLPVoiJJ91s3JECDMIXBu1wub0daB6XWOsqh/DNVPz2An4JqztG6OSW
+4ujGx09SCEdjFfx8/UnSOt+VFWOMamFA2EwkSpjjVj26E2VFMckMA58nAoGADabs
+vTh7SREEgg8d3ODpjHPXJktuspzsRSw7L8F15C55zHv2TINcXJkLaJHWYNpPzA5j
+vbr7Uv8kV7n2FfoB1BsQop/3AjySwZoafWI2xxVD9HeWimQvT7xW1/iaz29W/mU8
+l+JJsDw9m0OdVkpWcbBvkS0QI5RAnK650r/BHvECgYB6s9Qp5osOCdtPli7MYyD6
+mw+61DSgThUgKa7j96NG2ToYeNWTdf2Fd4Xa7s6MWryaGY+IMSRga24CM+WvaaAL
+iGZLY8dfpM/yDr0pva4WF66ARajDhNx1wvOBQJpHnldX0G4gYczIsIWgUhzo4eH8
+37OzKradFq+avGmtCBeV8A==
+-----END PRIVATE KEY-----
diff --git a/test/certs/x509-check.csr b/test/certs/x509-check.csr
new file mode 100644
index 000000000000..179d05a0adb5
--- /dev/null
+++ b/test/certs/x509-check.csr
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIICXzCCAUcCAQAwGjEYMBYGA1UEAwwPeDUwOS1jaGVjay10ZXN0MIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAneo6YBYjP2VunQiZRCMZipO6x+zES/d8
+Ft9qOXbk8LU9XLP8vspX3stJebWAcxjMY1DzXmBkwaors+rnlcjL23t8Mplz6fs8
+6Gqt4n9ycnG/tYLq0sokKRek9Ty5nyQ4EEE9F5yO6kcByORSU7yjPZqb94iqIQbH
+k/2vMn3ZNu8xWK0jGY32qmXPtGtfGx4v0oDTd+i4/r5z3LNg80vMpgSddGauonMu
+sS99LBwyjziiqw/PhCerLlJuQqSy+DeozzppPQ4+10L9mMKF9ktGLOnRaR7hgSdT
+Z4AVv9GZvaLHgzscaqZTxiGGvJzewSK08ACRIZJikxIvT/ADyIug1QIDAQABoAAw
+DQYJKoZIhvcNAQELBQADggEBABN+XkwFoyyN1+b5SYhUzdQFj0ZfhzNxiMXOFR/n
+ww0gW7KCAhZd90aPBtQjEORzsCUX2xhllglXaojw+wOaEMaJDMDzojJelan1TEWJ
+Vyvklj8OBoH25ur5Y8iWrnMivkb4hU1Mrd4QxF697FVVTniwVyUy8Xfn6D44vEII
+gyCUk/jCD6MAD6/hBaexetqrbUQyVrtPewYgXrJokRDGDzFlG3jcXvl3CV2iib2X
+hAbiaAJmlgZwIMeu/60YgJoIWwilG7dYq9hvcpyfQhYXa9BbOz62WRsLvT0Ewue9
+81kzAkwhfvGauPh/yjP+6K5HY09KdOtg30xtwUtT4IU5yHQ=
+-----END CERTIFICATE REQUEST-----
diff --git a/test/chacha_internal_test.c b/test/chacha_internal_test.c
new file mode 100644
index 000000000000..d316bfd7b361
--- /dev/null
+++ b/test/chacha_internal_test.c
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2017-2023 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
+ */
+
+/*
+ * Internal tests for the chacha module. EVP tests would exercise
+ * complete 32-byte blocks. This test goes per byte...
+ */
+
+#include <string.h>
+#include <openssl/opensslconf.h>
+#include "testutil.h"
+#include "crypto/chacha.h"
+
+static const unsigned int key[] = {
+ 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c,
+ 0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c
+};
+
+static const unsigned int ivp[] = {
+ 0x00000000, 0x00000000, 0x03020100, 0x07060504
+};
+
+static const unsigned char ref[] = {
+ 0xf7, 0x98, 0xa1, 0x89, 0xf1, 0x95, 0xe6, 0x69,
+ 0x82, 0x10, 0x5f, 0xfb, 0x64, 0x0b, 0xb7, 0x75,
+ 0x7f, 0x57, 0x9d, 0xa3, 0x16, 0x02, 0xfc, 0x93,
+ 0xec, 0x01, 0xac, 0x56, 0xf8, 0x5a, 0xc3, 0xc1,
+ 0x34, 0xa4, 0x54, 0x7b, 0x73, 0x3b, 0x46, 0x41,
+ 0x30, 0x42, 0xc9, 0x44, 0x00, 0x49, 0x17, 0x69,
+ 0x05, 0xd3, 0xbe, 0x59, 0xea, 0x1c, 0x53, 0xf1,
+ 0x59, 0x16, 0x15, 0x5c, 0x2b, 0xe8, 0x24, 0x1a,
+ 0x38, 0x00, 0x8b, 0x9a, 0x26, 0xbc, 0x35, 0x94,
+ 0x1e, 0x24, 0x44, 0x17, 0x7c, 0x8a, 0xde, 0x66,
+ 0x89, 0xde, 0x95, 0x26, 0x49, 0x86, 0xd9, 0x58,
+ 0x89, 0xfb, 0x60, 0xe8, 0x46, 0x29, 0xc9, 0xbd,
+ 0x9a, 0x5a, 0xcb, 0x1c, 0xc1, 0x18, 0xbe, 0x56,
+ 0x3e, 0xb9, 0xb3, 0xa4, 0xa4, 0x72, 0xf8, 0x2e,
+ 0x09, 0xa7, 0xe7, 0x78, 0x49, 0x2b, 0x56, 0x2e,
+ 0xf7, 0x13, 0x0e, 0x88, 0xdf, 0xe0, 0x31, 0xc7,
+ 0x9d, 0xb9, 0xd4, 0xf7, 0xc7, 0xa8, 0x99, 0x15,
+ 0x1b, 0x9a, 0x47, 0x50, 0x32, 0xb6, 0x3f, 0xc3,
+ 0x85, 0x24, 0x5f, 0xe0, 0x54, 0xe3, 0xdd, 0x5a,
+ 0x97, 0xa5, 0xf5, 0x76, 0xfe, 0x06, 0x40, 0x25,
+ 0xd3, 0xce, 0x04, 0x2c, 0x56, 0x6a, 0xb2, 0xc5,
+ 0x07, 0xb1, 0x38, 0xdb, 0x85, 0x3e, 0x3d, 0x69,
+ 0x59, 0x66, 0x09, 0x96, 0x54, 0x6c, 0xc9, 0xc4,
+ 0xa6, 0xea, 0xfd, 0xc7, 0x77, 0xc0, 0x40, 0xd7,
+ 0x0e, 0xaf, 0x46, 0xf7, 0x6d, 0xad, 0x39, 0x79,
+ 0xe5, 0xc5, 0x36, 0x0c, 0x33, 0x17, 0x16, 0x6a,
+ 0x1c, 0x89, 0x4c, 0x94, 0xa3, 0x71, 0x87, 0x6a,
+ 0x94, 0xdf, 0x76, 0x28, 0xfe, 0x4e, 0xaa, 0xf2,
+ 0xcc, 0xb2, 0x7d, 0x5a, 0xaa, 0xe0, 0xad, 0x7a,
+ 0xd0, 0xf9, 0xd4, 0xb6, 0xad, 0x3b, 0x54, 0x09,
+ 0x87, 0x46, 0xd4, 0x52, 0x4d, 0x38, 0x40, 0x7a,
+ 0x6d, 0xeb, 0x3a, 0xb7, 0x8f, 0xab, 0x78, 0xc9,
+ 0x42, 0x13, 0x66, 0x8b, 0xbb, 0xd3, 0x94, 0xc5,
+ 0xde, 0x93, 0xb8, 0x53, 0x17, 0x8a, 0xdd, 0xd6,
+ 0xb9, 0x7f, 0x9f, 0xa1, 0xec, 0x3e, 0x56, 0xc0,
+ 0x0c, 0x9d, 0xdf, 0xf0, 0xa4, 0x4a, 0x20, 0x42,
+ 0x41, 0x17, 0x5a, 0x4c, 0xab, 0x0f, 0x96, 0x1b,
+ 0xa5, 0x3e, 0xde, 0x9b, 0xdf, 0x96, 0x0b, 0x94,
+ 0xf9, 0x82, 0x9b, 0x1f, 0x34, 0x14, 0x72, 0x64,
+ 0x29, 0xb3, 0x62, 0xc5, 0xb5, 0x38, 0xe3, 0x91,
+ 0x52, 0x0f, 0x48, 0x9b, 0x7e, 0xd8, 0xd2, 0x0a,
+ 0xe3, 0xfd, 0x49, 0xe9, 0xe2, 0x59, 0xe4, 0x43,
+ 0x97, 0x51, 0x4d, 0x61, 0x8c, 0x96, 0xc4, 0x84,
+ 0x6b, 0xe3, 0xc6, 0x80, 0xbd, 0xc1, 0x1c, 0x71,
+ 0xdc, 0xbb, 0xe2, 0x9c, 0xcf, 0x80, 0xd6, 0x2a,
+ 0x09, 0x38, 0xfa, 0x54, 0x93, 0x91, 0xe6, 0xea,
+ 0x57, 0xec, 0xbe, 0x26, 0x06, 0x79, 0x0e, 0xc1,
+ 0x5d, 0x22, 0x24, 0xae, 0x30, 0x7c, 0x14, 0x42,
+ 0x26, 0xb7, 0xc4, 0xe8, 0xc2, 0xf9, 0x7d, 0x2a,
+ 0x1d, 0x67, 0x85, 0x2d, 0x29, 0xbe, 0xba, 0x11,
+ 0x0e, 0xdd, 0x44, 0x51, 0x97, 0x01, 0x20, 0x62,
+ 0xa3, 0x93, 0xa9, 0xc9, 0x28, 0x03, 0xad, 0x3b,
+ 0x4f, 0x31, 0xd7, 0xbc, 0x60, 0x33, 0xcc, 0xf7,
+ 0x93, 0x2c, 0xfe, 0xd3, 0xf0, 0x19, 0x04, 0x4d,
+ 0x25, 0x90, 0x59, 0x16, 0x77, 0x72, 0x86, 0xf8,
+ 0x2f, 0x9a, 0x4c, 0xc1, 0xff, 0xe4, 0x30, 0xff,
+ 0xd1, 0xdc, 0xfc, 0x27, 0xde, 0xed, 0x32, 0x7b,
+ 0x9f, 0x96, 0x30, 0xd2, 0xfa, 0x96, 0x9f, 0xb6,
+ 0xf0, 0x60, 0x3c, 0xd1, 0x9d, 0xd9, 0xa9, 0x51,
+ 0x9e, 0x67, 0x3b, 0xcf, 0xcd, 0x90, 0x14, 0x12,
+ 0x52, 0x91, 0xa4, 0x46, 0x69, 0xef, 0x72, 0x85,
+ 0xe7, 0x4e, 0xd3, 0x72, 0x9b, 0x67, 0x7f, 0x80,
+ 0x1c, 0x3c, 0xdf, 0x05, 0x8c, 0x50, 0x96, 0x31,
+ 0x68, 0xb4, 0x96, 0x04, 0x37, 0x16, 0xc7, 0x30,
+ 0x7c, 0xd9, 0xe0, 0xcd, 0xd1, 0x37, 0xfc, 0xcb,
+ 0x0f, 0x05, 0xb4, 0x7c, 0xdb, 0xb9, 0x5c, 0x5f,
+ 0x54, 0x83, 0x16, 0x22, 0xc3, 0x65, 0x2a, 0x32,
+ 0xb2, 0x53, 0x1f, 0xe3, 0x26, 0xbc, 0xd6, 0xe2,
+ 0xbb, 0xf5, 0x6a, 0x19, 0x4f, 0xa1, 0x96, 0xfb,
+ 0xd1, 0xa5, 0x49, 0x52, 0x11, 0x0f, 0x51, 0xc7,
+ 0x34, 0x33, 0x86, 0x5f, 0x76, 0x64, 0xb8, 0x36,
+ 0x68, 0x5e, 0x36, 0x64, 0xb3, 0xd8, 0x44, 0x4a,
+ 0xf8, 0x9a, 0x24, 0x28, 0x05, 0xe1, 0x8c, 0x97,
+ 0x5f, 0x11, 0x46, 0x32, 0x49, 0x96, 0xfd, 0xe1,
+ 0x70, 0x07, 0xcf, 0x3e, 0x6e, 0x8f, 0x4e, 0x76,
+ 0x40, 0x22, 0x53, 0x3e, 0xdb, 0xfe, 0x07, 0xd4,
+ 0x73, 0x3e, 0x48, 0xbb, 0x37, 0x2d, 0x75, 0xb0,
+ 0xef, 0x48, 0xec, 0x98, 0x3e, 0xb7, 0x85, 0x32,
+ 0x16, 0x1c, 0xc5, 0x29, 0xe5, 0xab, 0xb8, 0x98,
+ 0x37, 0xdf, 0xcc, 0xa6, 0x26, 0x1d, 0xbb, 0x37,
+ 0xc7, 0xc5, 0xe6, 0xa8, 0x74, 0x78, 0xbf, 0x41,
+ 0xee, 0x85, 0xa5, 0x18, 0xc0, 0xf4, 0xef, 0xa9,
+ 0xbd, 0xe8, 0x28, 0xc5, 0xa7, 0x1b, 0x8e, 0x46,
+ 0x59, 0x7b, 0x63, 0x4a, 0xfd, 0x20, 0x4d, 0x3c,
+ 0x50, 0x13, 0x34, 0x23, 0x9c, 0x34, 0x14, 0x28,
+ 0x5e, 0xd7, 0x2d, 0x3a, 0x91, 0x69, 0xea, 0xbb,
+ 0xd4, 0xdc, 0x25, 0xd5, 0x2b, 0xb7, 0x51, 0x6d,
+ 0x3b, 0xa7, 0x12, 0xd7, 0x5a, 0xd8, 0xc0, 0xae,
+ 0x5d, 0x49, 0x3c, 0x19, 0xe3, 0x8a, 0x77, 0x93,
+ 0x9e, 0x7a, 0x05, 0x8d, 0x71, 0x3e, 0x9c, 0xcc,
+ 0xca, 0x58, 0x04, 0x5f, 0x43, 0x6b, 0x43, 0x4b,
+ 0x1c, 0x80, 0xd3, 0x65, 0x47, 0x24, 0x06, 0xe3,
+ 0x92, 0x95, 0x19, 0x87, 0xdb, 0x69, 0x05, 0xc8,
+ 0x0d, 0x43, 0x1d, 0xa1, 0x84, 0x51, 0x13, 0x5b,
+ 0xe7, 0xe8, 0x2b, 0xca, 0xb3, 0x58, 0xcb, 0x39,
+ 0x71, 0xe6, 0x14, 0x05, 0xb2, 0xff, 0x17, 0x98,
+ 0x0d, 0x6e, 0x7e, 0x67, 0xe8, 0x61, 0xe2, 0x82,
+ 0x01, 0xc1, 0xee, 0x30, 0xb4, 0x41, 0x04, 0x0f,
+ 0xd0, 0x68, 0x78, 0xd6, 0x50, 0x42, 0xc9, 0x55,
+ 0x82, 0xa4, 0x31, 0x82, 0x07, 0xbf, 0xc7, 0x00,
+ 0xbe, 0x0c, 0xe3, 0x28, 0x89, 0xae, 0xc2, 0xff,
+ 0xe5, 0x08, 0x5e, 0x89, 0x67, 0x91, 0x0d, 0x87,
+ 0x9f, 0xa0, 0xe8, 0xc0, 0xff, 0x85, 0xfd, 0xc5,
+ 0x10, 0xb9, 0xff, 0x2f, 0xbf, 0x87, 0xcf, 0xcb,
+ 0x29, 0x57, 0x7d, 0x68, 0x09, 0x9e, 0x04, 0xff,
+ 0xa0, 0x5f, 0x75, 0x2a, 0x73, 0xd3, 0x77, 0xc7,
+ 0x0d, 0x3a, 0x8b, 0xc2, 0xda, 0x80, 0xe6, 0xe7,
+ 0x80, 0xec, 0x05, 0x71, 0x82, 0xc3, 0x3a, 0xd1,
+ 0xde, 0x38, 0x72, 0x52, 0x25, 0x8a, 0x1e, 0x18,
+ 0xe6, 0xfa, 0xd9, 0x10, 0x32, 0x7c, 0xe7, 0xf4,
+ 0x2f, 0xd1, 0xe1, 0xe0, 0x51, 0x5f, 0x95, 0x86,
+ 0xe2, 0xf2, 0xef, 0xcb, 0x9f, 0x47, 0x2b, 0x1d,
+ 0xbd, 0xba, 0xc3, 0x54, 0xa4, 0x16, 0x21, 0x51,
+ 0xe9, 0xd9, 0x2c, 0x79, 0xfb, 0x08, 0xbb, 0x4d,
+ 0xdc, 0x56, 0xf1, 0x94, 0x48, 0xc0, 0x17, 0x5a,
+ 0x46, 0xe2, 0xe6, 0xc4, 0x91, 0xfe, 0xc7, 0x14,
+ 0x19, 0xaa, 0x43, 0xa3, 0x49, 0xbe, 0xa7, 0x68,
+ 0xa9, 0x2c, 0x75, 0xde, 0x68, 0xfd, 0x95, 0x91,
+ 0xe6, 0x80, 0x67, 0xf3, 0x19, 0x70, 0x94, 0xd3,
+ 0xfb, 0x87, 0xed, 0x81, 0x78, 0x5e, 0xa0, 0x75,
+ 0xe4, 0xb6, 0x5e, 0x3e, 0x4c, 0x78, 0xf8, 0x1d,
+ 0xa9, 0xb7, 0x51, 0xc5, 0xef, 0xe0, 0x24, 0x15,
+ 0x23, 0x01, 0xc4, 0x8e, 0x63, 0x24, 0x5b, 0x55,
+ 0x6c, 0x4c, 0x67, 0xaf, 0xf8, 0x57, 0xe5, 0xea,
+ 0x15, 0xa9, 0x08, 0xd8, 0x3a, 0x1d, 0x97, 0x04,
+ 0xf8, 0xe5, 0x5e, 0x73, 0x52, 0xb2, 0x0b, 0x69,
+ 0x4b, 0xf9, 0x97, 0x02, 0x98, 0xe6, 0xb5, 0xaa,
+ 0xd3, 0x3e, 0xa2, 0x15, 0x5d, 0x10, 0x5d, 0x4e
+};
+
+static int test_cha_cha_internal(int n)
+{
+ unsigned char buf[sizeof(ref)];
+ unsigned int i = n + 1, j;
+
+ memset(buf, 0, i);
+ memcpy(buf + i, ref + i, sizeof(ref) - i);
+
+ ChaCha20_ctr32(buf, buf, i, key, ivp);
+
+ /*
+ * Idea behind checking for whole sizeof(ref) is that if
+ * ChaCha20_ctr32 oversteps i-th byte, then we'd know
+ */
+ for (j = 0; j < sizeof(ref); j++)
+ if (!TEST_uchar_eq(buf[j], ref[j])) {
+ TEST_info("%d failed at %u (%02x)\n", i, j, buf[j]);
+ return 0;
+ }
+ return 1;
+}
+
+int setup_tests(void)
+{
+#ifdef OPENSSL_CPUID_OBJ
+ OPENSSL_cpuid_setup();
+#endif
+
+ ADD_ALL_TESTS(test_cha_cha_internal, sizeof(ref));
+ return 1;
+}
diff --git a/test/cipher_overhead_test.c b/test/cipher_overhead_test.c
new file mode 100644
index 000000000000..2001b332958c
--- /dev/null
+++ b/test/cipher_overhead_test.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "internal/nelem.h"
+#include "testutil.h"
+#include "../ssl/ssl_local.h"
+
+static int cipher_enabled(const SSL_CIPHER *ciph)
+{
+ /*
+ * ssl_cipher_get_overhead() actually works with AEAD ciphers even if the
+ * underlying implementation is not present.
+ */
+ if ((ciph->algorithm_mac & SSL_AEAD) != 0)
+ return 1;
+
+ if (ciph->algorithm_enc != SSL_eNULL
+ && EVP_get_cipherbynid(SSL_CIPHER_get_cipher_nid(ciph)) == NULL)
+ return 0;
+
+ if (EVP_get_digestbynid(SSL_CIPHER_get_digest_nid(ciph)) == NULL)
+ return 0;
+
+ return 1;
+}
+
+static int cipher_overhead(void)
+{
+ int ret = 1, i, n = ssl3_num_ciphers();
+ const SSL_CIPHER *ciph;
+ size_t mac, in, blk, ex;
+
+ for (i = 0; i < n; i++) {
+ ciph = ssl3_get_cipher(i);
+ if (!ciph->min_dtls)
+ continue;
+ if (!cipher_enabled(ciph)) {
+ TEST_skip("Skipping disabled cipher %s", ciph->name);
+ continue;
+ }
+ if (!TEST_true(ssl_cipher_get_overhead(ciph, &mac, &in, &blk, &ex))) {
+ TEST_info("Failed getting %s", ciph->name);
+ ret = 0;
+ } else {
+ TEST_info("Cipher %s: %zu %zu %zu %zu",
+ ciph->name, mac, in, blk, ex);
+ }
+ }
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(cipher_overhead);
+ return 1;
+}
diff --git a/test/cipherbytes_test.c b/test/cipherbytes_test.c
new file mode 100644
index 000000000000..ed4eacbdf356
--- /dev/null
+++ b/test/cipherbytes_test.c
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2017-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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <string.h>
+#include <stdio.h>
+
+#include <openssl/opensslconf.h>
+#include <openssl/err.h>
+#include <openssl/e_os2.h>
+#include <openssl/ssl.h>
+#include <openssl/ssl3.h>
+#include <openssl/tls1.h>
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+static SSL_CTX *ctx;
+static SSL *s;
+
+static int test_empty(void)
+{
+ STACK_OF(SSL_CIPHER) *sk = NULL, *scsv = NULL;
+ const unsigned char bytes[] = {0x00};
+ int ret = 0;
+
+ if (!TEST_int_eq(SSL_bytes_to_cipher_list(s, bytes, 0, 0, &sk, &scsv), 0)
+ || !TEST_ptr_null(sk)
+ || !TEST_ptr_null(scsv))
+ goto err;
+ ret = 1;
+
+err:
+ sk_SSL_CIPHER_free(sk);
+ sk_SSL_CIPHER_free(scsv);
+ return ret;
+}
+
+static int test_unsupported(void)
+{
+ STACK_OF(SSL_CIPHER) *sk, *scsv;
+ /* ECDH-RSA-AES256 (unsupported), ECDHE-ECDSA-AES128, <unassigned> */
+ const unsigned char bytes[] = {0xc0, 0x0f, 0x00, 0x2f, 0x01, 0x00};
+ int ret = 0;
+
+ if (!TEST_true(SSL_bytes_to_cipher_list(s, bytes, sizeof(bytes),
+ 0, &sk, &scsv))
+ || !TEST_ptr(sk)
+ || !TEST_int_eq(sk_SSL_CIPHER_num(sk), 1)
+ || !TEST_ptr(scsv)
+ || !TEST_int_eq(sk_SSL_CIPHER_num(scsv), 0)
+ || !TEST_str_eq(SSL_CIPHER_get_name(sk_SSL_CIPHER_value(sk, 0)),
+ "AES128-SHA"))
+ goto err;
+
+ ret = 1;
+err:
+ sk_SSL_CIPHER_free(sk);
+ sk_SSL_CIPHER_free(scsv);
+ return ret;
+}
+
+static int test_v2(void)
+{
+ STACK_OF(SSL_CIPHER) *sk, *scsv;
+ /* ECDHE-ECDSA-AES256GCM, SSL2_RC4_1238_WITH_MD5,
+ * ECDHE-ECDSA-CHACHA20-POLY1305 */
+ const unsigned char bytes[] = {0x00, 0x00, 0x35, 0x01, 0x00, 0x80,
+ 0x00, 0x00, 0x33};
+ int ret = 0;
+
+ if (!TEST_true(SSL_bytes_to_cipher_list(s, bytes, sizeof(bytes), 1,
+ &sk, &scsv))
+ || !TEST_ptr(sk)
+ || !TEST_int_eq(sk_SSL_CIPHER_num(sk), 2)
+ || !TEST_ptr(scsv)
+ || !TEST_int_eq(sk_SSL_CIPHER_num(scsv), 0))
+ goto err;
+ if (strcmp(SSL_CIPHER_get_name(sk_SSL_CIPHER_value(sk, 0)),
+ "AES256-SHA") != 0 ||
+ strcmp(SSL_CIPHER_get_name(sk_SSL_CIPHER_value(sk, 1)),
+ "DHE-RSA-AES128-SHA") != 0)
+ goto err;
+
+ ret = 1;
+
+err:
+ sk_SSL_CIPHER_free(sk);
+ sk_SSL_CIPHER_free(scsv);
+ return ret;
+}
+
+static int test_v3(void)
+{
+ STACK_OF(SSL_CIPHER) *sk = NULL, *scsv = NULL;
+ /* ECDHE-ECDSA-AES256GCM, ECDHE-ECDSA-CHACHAPOLY, DHE-RSA-AES256GCM,
+ * EMPTY-RENEGOTIATION-INFO-SCSV, FALLBACK-SCSV */
+ const unsigned char bytes[] = {0x00, 0x2f, 0x00, 0x33, 0x00, 0x9f, 0x00, 0xff,
+ 0x56, 0x00};
+ int ret = 0;
+
+ if (!SSL_bytes_to_cipher_list(s, bytes, sizeof(bytes), 0, &sk, &scsv)
+ || !TEST_ptr(sk)
+ || !TEST_int_eq(sk_SSL_CIPHER_num(sk), 3)
+ || !TEST_ptr(scsv)
+ || !TEST_int_eq(sk_SSL_CIPHER_num(scsv), 2)
+ || !TEST_str_eq(SSL_CIPHER_get_name(sk_SSL_CIPHER_value(sk, 0)),
+ "AES128-SHA")
+ || !TEST_str_eq(SSL_CIPHER_get_name(sk_SSL_CIPHER_value(sk, 1)),
+ "DHE-RSA-AES128-SHA")
+ || !TEST_str_eq(SSL_CIPHER_get_name(sk_SSL_CIPHER_value(sk, 2)),
+ "DHE-RSA-AES256-GCM-SHA384")
+ || !TEST_str_eq(SSL_CIPHER_get_name(sk_SSL_CIPHER_value(scsv, 0)),
+ "TLS_EMPTY_RENEGOTIATION_INFO_SCSV")
+ || !TEST_str_eq(SSL_CIPHER_get_name(sk_SSL_CIPHER_value(scsv, 1)),
+ "TLS_FALLBACK_SCSV"))
+ goto err;
+
+ ret = 1;
+err:
+ sk_SSL_CIPHER_free(sk);
+ sk_SSL_CIPHER_free(scsv);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ if (!TEST_ptr(ctx = SSL_CTX_new(TLS_server_method()))
+ || !TEST_ptr(s = SSL_new(ctx)))
+ return 0;
+
+ ADD_TEST(test_empty);
+ ADD_TEST(test_unsupported);
+ ADD_TEST(test_v2);
+ ADD_TEST(test_v3);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ SSL_free(s);
+ SSL_CTX_free(ctx);
+}
diff --git a/test/cipherlist_test.c b/test/cipherlist_test.c
new file mode 100644
index 000000000000..2d166e2b4655
--- /dev/null
+++ b/test/cipherlist_test.c
@@ -0,0 +1,253 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/opensslconf.h>
+#include <openssl/err.h>
+#include <openssl/e_os2.h>
+#include <openssl/ssl.h>
+#include <openssl/ssl3.h>
+#include <openssl/tls1.h>
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+typedef struct cipherlist_test_fixture {
+ const char *test_case_name;
+ SSL_CTX *server;
+ SSL_CTX *client;
+} CIPHERLIST_TEST_FIXTURE;
+
+
+static void tear_down(CIPHERLIST_TEST_FIXTURE *fixture)
+{
+ if (fixture != NULL) {
+ SSL_CTX_free(fixture->server);
+ SSL_CTX_free(fixture->client);
+ fixture->server = fixture->client = NULL;
+ OPENSSL_free(fixture);
+ }
+}
+
+static CIPHERLIST_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CIPHERLIST_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ fixture->test_case_name = test_case_name;
+ if (!TEST_ptr(fixture->server = SSL_CTX_new(TLS_server_method()))
+ || !TEST_ptr(fixture->client = SSL_CTX_new(TLS_client_method()))) {
+ tear_down(fixture);
+ return NULL;
+ }
+ return fixture;
+}
+
+/*
+ * All ciphers in the DEFAULT cipherlist meet the default security level.
+ * However, default supported ciphers exclude SRP and PSK ciphersuites
+ * for which no callbacks have been set up.
+ *
+ * Supported ciphers also exclude TLSv1.2 ciphers if TLSv1.2 is disabled,
+ * and individual disabled algorithms. However, NO_RSA, NO_AES and NO_SHA
+ * are currently broken and should be considered mission impossible in libssl.
+ */
+static const uint32_t default_ciphers_in_order[] = {
+#ifndef OPENSSL_NO_TLS1_3
+ TLS1_3_CK_AES_256_GCM_SHA384,
+# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
+ TLS1_3_CK_CHACHA20_POLY1305_SHA256,
+# endif
+ TLS1_3_CK_AES_128_GCM_SHA256,
+#endif
+#ifndef OPENSSL_NO_TLS1_2
+# ifndef OPENSSL_NO_EC
+ TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+ TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
+# endif
+# ifndef OPENSSL_NO_DH
+ TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
+# endif
+
+# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
+# ifndef OPENSSL_NO_EC
+ TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
+ TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305,
+# endif
+# ifndef OPENSSL_NO_DH
+ TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305,
+# endif
+# endif /* !OPENSSL_NO_CHACHA && !OPENSSL_NO_POLY1305 */
+
+# ifndef OPENSSL_NO_EC
+ TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+ TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+# endif
+# ifndef OPENSSL_NO_DH
+ TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
+# endif
+# ifndef OPENSSL_NO_EC
+ TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
+ TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
+# endif
+# ifndef OPENSSL_NO_DH
+ TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
+# endif
+# ifndef OPENSSL_NO_EC
+ TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
+ TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
+# endif
+# ifndef OPENSSL_NO_DH
+ TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
+# endif
+#endif /* !OPENSSL_NO_TLS1_2 */
+
+#if !defined(OPENSSL_NO_TLS1_2) || defined(OPENSSL_NO_TLS1_3)
+ /* These won't be usable if TLSv1.3 is available but TLSv1.2 isn't */
+# ifndef OPENSSL_NO_EC
+ TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
+ TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
+# endif
+ #ifndef OPENSSL_NO_DH
+ TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
+# endif
+# ifndef OPENSSL_NO_EC
+ TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
+ TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
+# endif
+# ifndef OPENSSL_NO_DH
+ TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
+# endif
+#endif /* !defined(OPENSSL_NO_TLS1_2) || defined(OPENSSL_NO_TLS1_3) */
+
+#ifndef OPENSSL_NO_TLS1_2
+ TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
+ TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
+#endif
+#ifndef OPENSSL_NO_TLS1_2
+ TLS1_CK_RSA_WITH_AES_256_SHA256,
+ TLS1_CK_RSA_WITH_AES_128_SHA256,
+#endif
+#if !defined(OPENSSL_NO_TLS1_2) || defined(OPENSSL_NO_TLS1_3)
+ /* These won't be usable if TLSv1.3 is available but TLSv1.2 isn't */
+ TLS1_CK_RSA_WITH_AES_256_SHA,
+ TLS1_CK_RSA_WITH_AES_128_SHA,
+#endif
+};
+
+static int test_default_cipherlist(SSL_CTX *ctx)
+{
+ STACK_OF(SSL_CIPHER) *ciphers = NULL;
+ SSL *ssl = NULL;
+ int i, ret = 0, num_expected_ciphers, num_ciphers;
+ uint32_t expected_cipher_id, cipher_id;
+
+ if (ctx == NULL)
+ return 0;
+
+ if (!TEST_ptr(ssl = SSL_new(ctx))
+ || !TEST_ptr(ciphers = SSL_get1_supported_ciphers(ssl)))
+ goto err;
+
+ num_expected_ciphers = OSSL_NELEM(default_ciphers_in_order);
+ num_ciphers = sk_SSL_CIPHER_num(ciphers);
+ if (!TEST_int_eq(num_ciphers, num_expected_ciphers))
+ goto err;
+
+ for (i = 0; i < num_ciphers; i++) {
+ expected_cipher_id = default_ciphers_in_order[i];
+ cipher_id = SSL_CIPHER_get_id(sk_SSL_CIPHER_value(ciphers, i));
+ if (!TEST_int_eq(cipher_id, expected_cipher_id)) {
+ TEST_info("Wrong cipher at position %d", i);
+ goto err;
+ }
+ }
+
+ ret = 1;
+
+ err:
+ sk_SSL_CIPHER_free(ciphers);
+ SSL_free(ssl);
+ return ret;
+}
+
+static int execute_test(CIPHERLIST_TEST_FIXTURE *fixture)
+{
+ return fixture != NULL
+ && test_default_cipherlist(fixture->server)
+ && test_default_cipherlist(fixture->client);
+}
+
+#define SETUP_CIPHERLIST_TEST_FIXTURE() \
+ SETUP_TEST_FIXTURE(CIPHERLIST_TEST_FIXTURE, set_up)
+
+#define EXECUTE_CIPHERLIST_TEST() \
+ EXECUTE_TEST(execute_test, tear_down)
+
+static int test_default_cipherlist_implicit(void)
+{
+ SETUP_CIPHERLIST_TEST_FIXTURE();
+ EXECUTE_CIPHERLIST_TEST();
+ return result;
+}
+
+static int test_default_cipherlist_explicit(void)
+{
+ SETUP_CIPHERLIST_TEST_FIXTURE();
+ if (!TEST_true(SSL_CTX_set_cipher_list(fixture->server, "DEFAULT"))
+ || !TEST_true(SSL_CTX_set_cipher_list(fixture->client, "DEFAULT"))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_CIPHERLIST_TEST();
+ return result;
+}
+
+/* SSL_CTX_set_cipher_list() should fail if it clears all TLSv1.2 ciphers. */
+static int test_default_cipherlist_clear(void)
+{
+ SSL *s = NULL;
+ SETUP_CIPHERLIST_TEST_FIXTURE();
+
+ if (!TEST_int_eq(SSL_CTX_set_cipher_list(fixture->server, "no-such"), 0))
+ goto end;
+
+ if (!TEST_int_eq(ERR_GET_REASON(ERR_get_error()), SSL_R_NO_CIPHER_MATCH))
+ goto end;
+
+ s = SSL_new(fixture->client);
+
+ if (!TEST_ptr(s))
+ goto end;
+
+ if (!TEST_int_eq(SSL_set_cipher_list(s, "no-such"), 0))
+ goto end;
+
+ if (!TEST_int_eq(ERR_GET_REASON(ERR_get_error()),
+ SSL_R_NO_CIPHER_MATCH))
+ goto end;
+
+ result = 1;
+end:
+ SSL_free(s);
+ tear_down(fixture);
+ return result;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_default_cipherlist_implicit);
+ ADD_TEST(test_default_cipherlist_explicit);
+ ADD_TEST(test_default_cipherlist_clear);
+ return 1;
+}
diff --git a/test/ciphername_test.c b/test/ciphername_test.c
new file mode 100644
index 000000000000..c4ec6cadd740
--- /dev/null
+++ b/test/ciphername_test.c
@@ -0,0 +1,470 @@
+/*
+ * Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2017 BaishanCloud. 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/opensslconf.h>
+#include <openssl/err.h>
+#include <openssl/e_os2.h>
+#include <openssl/ssl.h>
+#include <openssl/ssl3.h>
+#include <openssl/tls1.h>
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+typedef struct cipher_id_name {
+ int id;
+ const char *name;
+} CIPHER_ID_NAME;
+
+/* Cipher suites, copied from t1_trce.c */
+static CIPHER_ID_NAME cipher_names[] = {
+ {0x0000, "TLS_NULL_WITH_NULL_NULL"},
+ {0x0001, "TLS_RSA_WITH_NULL_MD5"},
+ {0x0002, "TLS_RSA_WITH_NULL_SHA"},
+ {0x0003, "TLS_RSA_EXPORT_WITH_RC4_40_MD5"},
+ {0x0004, "TLS_RSA_WITH_RC4_128_MD5"},
+ {0x0005, "TLS_RSA_WITH_RC4_128_SHA"},
+ {0x0006, "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5"},
+ {0x0007, "TLS_RSA_WITH_IDEA_CBC_SHA"},
+ {0x0008, "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x0009, "TLS_RSA_WITH_DES_CBC_SHA"},
+ {0x000A, "TLS_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0x000B, "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x000C, "TLS_DH_DSS_WITH_DES_CBC_SHA"},
+ {0x000D, "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"},
+ {0x000E, "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x000F, "TLS_DH_RSA_WITH_DES_CBC_SHA"},
+ {0x0010, "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0x0011, "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x0012, "TLS_DHE_DSS_WITH_DES_CBC_SHA"},
+ {0x0013, "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"},
+ {0x0014, "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x0015, "TLS_DHE_RSA_WITH_DES_CBC_SHA"},
+ {0x0016, "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0x0017, "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"},
+ {0x0018, "TLS_DH_anon_WITH_RC4_128_MD5"},
+ {0x0019, "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x001A, "TLS_DH_anon_WITH_DES_CBC_SHA"},
+ {0x001B, "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"},
+ {0x001D, "SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA"},
+ {0x001E, "SSL_FORTEZZA_KEA_WITH_RC4_128_SHA"},
+ {0x001F, "TLS_KRB5_WITH_3DES_EDE_CBC_SHA"},
+ {0x0020, "TLS_KRB5_WITH_RC4_128_SHA"},
+ {0x0021, "TLS_KRB5_WITH_IDEA_CBC_SHA"},
+ {0x0022, "TLS_KRB5_WITH_DES_CBC_MD5"},
+ {0x0023, "TLS_KRB5_WITH_3DES_EDE_CBC_MD5"},
+ {0x0024, "TLS_KRB5_WITH_RC4_128_MD5"},
+ {0x0025, "TLS_KRB5_WITH_IDEA_CBC_MD5"},
+ {0x0026, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"},
+ {0x0027, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA"},
+ {0x0028, "TLS_KRB5_EXPORT_WITH_RC4_40_SHA"},
+ {0x0029, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"},
+ {0x002A, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5"},
+ {0x002B, "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"},
+ {0x002C, "TLS_PSK_WITH_NULL_SHA"},
+ {0x002D, "TLS_DHE_PSK_WITH_NULL_SHA"},
+ {0x002E, "TLS_RSA_PSK_WITH_NULL_SHA"},
+ {0x002F, "TLS_RSA_WITH_AES_128_CBC_SHA"},
+ {0x0030, "TLS_DH_DSS_WITH_AES_128_CBC_SHA"},
+ {0x0031, "TLS_DH_RSA_WITH_AES_128_CBC_SHA"},
+ {0x0032, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"},
+ {0x0033, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"},
+ {0x0034, "TLS_DH_anon_WITH_AES_128_CBC_SHA"},
+ {0x0035, "TLS_RSA_WITH_AES_256_CBC_SHA"},
+ {0x0036, "TLS_DH_DSS_WITH_AES_256_CBC_SHA"},
+ {0x0037, "TLS_DH_RSA_WITH_AES_256_CBC_SHA"},
+ {0x0038, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"},
+ {0x0039, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"},
+ {0x003A, "TLS_DH_anon_WITH_AES_256_CBC_SHA"},
+ {0x003B, "TLS_RSA_WITH_NULL_SHA256"},
+ {0x003C, "TLS_RSA_WITH_AES_128_CBC_SHA256"},
+ {0x003D, "TLS_RSA_WITH_AES_256_CBC_SHA256"},
+ {0x003E, "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"},
+ {0x003F, "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"},
+ {0x0040, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"},
+ {0x0041, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0042, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0043, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0044, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0045, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0046, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0067, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"},
+ {0x0068, "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"},
+ {0x0069, "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"},
+ {0x006A, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"},
+ {0x006B, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"},
+ {0x006C, "TLS_DH_anon_WITH_AES_128_CBC_SHA256"},
+ {0x006D, "TLS_DH_anon_WITH_AES_256_CBC_SHA256"},
+ {0x0084, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0085, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0086, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0087, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0088, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0089, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x008A, "TLS_PSK_WITH_RC4_128_SHA"},
+ {0x008B, "TLS_PSK_WITH_3DES_EDE_CBC_SHA"},
+ {0x008C, "TLS_PSK_WITH_AES_128_CBC_SHA"},
+ {0x008D, "TLS_PSK_WITH_AES_256_CBC_SHA"},
+ {0x008E, "TLS_DHE_PSK_WITH_RC4_128_SHA"},
+ {0x008F, "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA"},
+ {0x0090, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA"},
+ {0x0091, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA"},
+ {0x0092, "TLS_RSA_PSK_WITH_RC4_128_SHA"},
+ {0x0093, "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"},
+ {0x0094, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"},
+ {0x0095, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"},
+ {0x0096, "TLS_RSA_WITH_SEED_CBC_SHA"},
+ {0x0097, "TLS_DH_DSS_WITH_SEED_CBC_SHA"},
+ {0x0098, "TLS_DH_RSA_WITH_SEED_CBC_SHA"},
+ {0x0099, "TLS_DHE_DSS_WITH_SEED_CBC_SHA"},
+ {0x009A, "TLS_DHE_RSA_WITH_SEED_CBC_SHA"},
+ {0x009B, "TLS_DH_anon_WITH_SEED_CBC_SHA"},
+ {0x009C, "TLS_RSA_WITH_AES_128_GCM_SHA256"},
+ {0x009D, "TLS_RSA_WITH_AES_256_GCM_SHA384"},
+ {0x009E, "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"},
+ {0x009F, "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"},
+ {0x00A0, "TLS_DH_RSA_WITH_AES_128_GCM_SHA256"},
+ {0x00A1, "TLS_DH_RSA_WITH_AES_256_GCM_SHA384"},
+ {0x00A2, "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256"},
+ {0x00A3, "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"},
+ {0x00A4, "TLS_DH_DSS_WITH_AES_128_GCM_SHA256"},
+ {0x00A5, "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"},
+ {0x00A6, "TLS_DH_anon_WITH_AES_128_GCM_SHA256"},
+ {0x00A7, "TLS_DH_anon_WITH_AES_256_GCM_SHA384"},
+ {0x00A8, "TLS_PSK_WITH_AES_128_GCM_SHA256"},
+ {0x00A9, "TLS_PSK_WITH_AES_256_GCM_SHA384"},
+ {0x00AA, "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256"},
+ {0x00AB, "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384"},
+ {0x00AC, "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"},
+ {0x00AD, "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"},
+ {0x00AE, "TLS_PSK_WITH_AES_128_CBC_SHA256"},
+ {0x00AF, "TLS_PSK_WITH_AES_256_CBC_SHA384"},
+ {0x00B0, "TLS_PSK_WITH_NULL_SHA256"},
+ {0x00B1, "TLS_PSK_WITH_NULL_SHA384"},
+ {0x00B2, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256"},
+ {0x00B3, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384"},
+ {0x00B4, "TLS_DHE_PSK_WITH_NULL_SHA256"},
+ {0x00B5, "TLS_DHE_PSK_WITH_NULL_SHA384"},
+ {0x00B6, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"},
+ {0x00B7, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"},
+ {0x00B8, "TLS_RSA_PSK_WITH_NULL_SHA256"},
+ {0x00B9, "TLS_RSA_PSK_WITH_NULL_SHA384"},
+ {0x00BA, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BB, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BC, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BD, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BE, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BF, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00C0, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C1, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C2, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C3, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C4, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C5, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00FF, "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"},
+ {0x5600, "TLS_FALLBACK_SCSV"},
+ {0xC001, "TLS_ECDH_ECDSA_WITH_NULL_SHA"},
+ {0xC002, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"},
+ {0xC003, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC004, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"},
+ {0xC005, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"},
+ {0xC006, "TLS_ECDHE_ECDSA_WITH_NULL_SHA"},
+ {0xC007, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"},
+ {0xC008, "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC009, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"},
+ {0xC00A, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"},
+ {0xC00B, "TLS_ECDH_RSA_WITH_NULL_SHA"},
+ {0xC00C, "TLS_ECDH_RSA_WITH_RC4_128_SHA"},
+ {0xC00D, "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC00E, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"},
+ {0xC00F, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"},
+ {0xC010, "TLS_ECDHE_RSA_WITH_NULL_SHA"},
+ {0xC011, "TLS_ECDHE_RSA_WITH_RC4_128_SHA"},
+ {0xC012, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC013, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"},
+ {0xC014, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},
+ {0xC015, "TLS_ECDH_anon_WITH_NULL_SHA"},
+ {0xC016, "TLS_ECDH_anon_WITH_RC4_128_SHA"},
+ {0xC017, "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"},
+ {0xC018, "TLS_ECDH_anon_WITH_AES_128_CBC_SHA"},
+ {0xC019, "TLS_ECDH_anon_WITH_AES_256_CBC_SHA"},
+ {0xC01A, "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC01B, "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC01C, "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA"},
+ {0xC01D, "TLS_SRP_SHA_WITH_AES_128_CBC_SHA"},
+ {0xC01E, "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA"},
+ {0xC01F, "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA"},
+ {0xC020, "TLS_SRP_SHA_WITH_AES_256_CBC_SHA"},
+ {0xC021, "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA"},
+ {0xC022, "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA"},
+ {0xC023, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"},
+ {0xC024, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"},
+ {0xC025, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"},
+ {0xC026, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"},
+ {0xC027, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"},
+ {0xC028, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"},
+ {0xC029, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"},
+ {0xC02A, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"},
+ {0xC02B, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"},
+ {0xC02C, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"},
+ {0xC02D, "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"},
+ {0xC02E, "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"},
+ {0xC02F, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},
+ {0xC030, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"},
+ {0xC031, "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"},
+ {0xC032, "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"},
+ {0xC033, "TLS_ECDHE_PSK_WITH_RC4_128_SHA"},
+ {0xC034, "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA"},
+ {0xC035, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA"},
+ {0xC036, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA"},
+ {0xC037, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256"},
+ {0xC038, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384"},
+ {0xC039, "TLS_ECDHE_PSK_WITH_NULL_SHA"},
+ {0xC03A, "TLS_ECDHE_PSK_WITH_NULL_SHA256"},
+ {0xC03B, "TLS_ECDHE_PSK_WITH_NULL_SHA384"},
+ {0xC03C, "TLS_RSA_WITH_ARIA_128_CBC_SHA256"},
+ {0xC03D, "TLS_RSA_WITH_ARIA_256_CBC_SHA384"},
+ {0xC03E, "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256"},
+ {0xC03F, "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384"},
+ {0xC040, "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256"},
+ {0xC041, "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384"},
+ {0xC042, "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256"},
+ {0xC043, "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384"},
+ {0xC044, "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256"},
+ {0xC045, "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384"},
+ {0xC046, "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256"},
+ {0xC047, "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384"},
+ {0xC048, "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256"},
+ {0xC049, "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384"},
+ {0xC04A, "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256"},
+ {0xC04B, "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384"},
+ {0xC04C, "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256"},
+ {0xC04D, "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384"},
+ {0xC04E, "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256"},
+ {0xC04F, "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384"},
+ {0xC050, "TLS_RSA_WITH_ARIA_128_GCM_SHA256"},
+ {0xC051, "TLS_RSA_WITH_ARIA_256_GCM_SHA384"},
+ {0xC052, "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256"},
+ {0xC053, "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384"},
+ {0xC054, "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256"},
+ {0xC055, "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384"},
+ {0xC056, "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256"},
+ {0xC057, "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384"},
+ {0xC058, "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256"},
+ {0xC059, "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384"},
+ {0xC05A, "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256"},
+ {0xC05B, "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384"},
+ {0xC05C, "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256"},
+ {0xC05D, "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384"},
+ {0xC05E, "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256"},
+ {0xC05F, "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384"},
+ {0xC060, "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256"},
+ {0xC061, "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384"},
+ {0xC062, "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256"},
+ {0xC063, "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384"},
+ {0xC064, "TLS_PSK_WITH_ARIA_128_CBC_SHA256"},
+ {0xC065, "TLS_PSK_WITH_ARIA_256_CBC_SHA384"},
+ {0xC066, "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256"},
+ {0xC067, "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384"},
+ {0xC068, "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256"},
+ {0xC069, "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384"},
+ {0xC06A, "TLS_PSK_WITH_ARIA_128_GCM_SHA256"},
+ {0xC06B, "TLS_PSK_WITH_ARIA_256_GCM_SHA384"},
+ {0xC06C, "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256"},
+ {0xC06D, "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384"},
+ {0xC06E, "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256"},
+ {0xC06F, "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384"},
+ {0xC070, "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256"},
+ {0xC071, "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384"},
+ {0xC072, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0xC073, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"},
+ {0xC074, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0xC075, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"},
+ {0xC076, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0xC077, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384"},
+ {0xC078, "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0xC079, "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384"},
+ {0xC07A, "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC07B, "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC07C, "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC07D, "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC07E, "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC07F, "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC080, "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC081, "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC082, "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC083, "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC084, "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC085, "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC086, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC087, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC088, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC089, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC08A, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC08B, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC08C, "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC08D, "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC08E, "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC08F, "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC090, "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC091, "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC092, "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256"},
+ {0xC093, "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384"},
+ {0xC094, "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0xC095, "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384"},
+ {0xC096, "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0xC097, "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"},
+ {0xC098, "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0xC099, "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384"},
+ {0xC09A, "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0xC09B, "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"},
+ {0xC09C, "TLS_RSA_WITH_AES_128_CCM"},
+ {0xC09D, "TLS_RSA_WITH_AES_256_CCM"},
+ {0xC09E, "TLS_DHE_RSA_WITH_AES_128_CCM"},
+ {0xC09F, "TLS_DHE_RSA_WITH_AES_256_CCM"},
+ {0xC0A0, "TLS_RSA_WITH_AES_128_CCM_8"},
+ {0xC0A1, "TLS_RSA_WITH_AES_256_CCM_8"},
+ {0xC0A2, "TLS_DHE_RSA_WITH_AES_128_CCM_8"},
+ {0xC0A3, "TLS_DHE_RSA_WITH_AES_256_CCM_8"},
+ {0xC0A4, "TLS_PSK_WITH_AES_128_CCM"},
+ {0xC0A5, "TLS_PSK_WITH_AES_256_CCM"},
+ {0xC0A6, "TLS_DHE_PSK_WITH_AES_128_CCM"},
+ {0xC0A7, "TLS_DHE_PSK_WITH_AES_256_CCM"},
+ {0xC0A8, "TLS_PSK_WITH_AES_128_CCM_8"},
+ {0xC0A9, "TLS_PSK_WITH_AES_256_CCM_8"},
+ {0xC0AA, "TLS_PSK_DHE_WITH_AES_128_CCM_8"},
+ {0xC0AB, "TLS_PSK_DHE_WITH_AES_256_CCM_8"},
+ {0xC0AC, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM"},
+ {0xC0AD, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM"},
+ {0xC0AE, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8"},
+ {0xC0AF, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8"},
+ {0xCCA8, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"},
+ {0xCCA9, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"},
+ {0xCCAA, "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256"},
+ {0xCCAB, "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256"},
+ {0xCCAC, "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256"},
+ {0xCCAD, "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256"},
+ {0xCCAE, "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256"},
+ {0x1301, "TLS_AES_128_GCM_SHA256"},
+ {0x1302, "TLS_AES_256_GCM_SHA384"},
+ {0x1303, "TLS_CHACHA20_POLY1305_SHA256"},
+ {0x1304, "TLS_AES_128_CCM_SHA256"},
+ {0x1305, "TLS_AES_128_CCM_8_SHA256"},
+ {0xFEFE, "SSL_RSA_FIPS_WITH_DES_CBC_SHA"},
+ {0xFEFF, "SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA"},
+};
+
+static const char *get_std_name_by_id(int id)
+{
+ size_t i;
+
+ for (i = 0; i < OSSL_NELEM(cipher_names); i++)
+ if (cipher_names[i].id == id)
+ return cipher_names[i].name;
+
+ return NULL;
+}
+
+static int test_cipher_name(void)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *ssl = NULL;
+ const SSL_CIPHER *c;
+ STACK_OF(SSL_CIPHER) *sk = NULL;
+ const char *ciphers = "ALL:eNULL", *p, *q, *r;
+ int i, id = 0, ret = 0;
+
+ /* tests for invalid input */
+ p = SSL_CIPHER_standard_name(NULL);
+ if (!TEST_str_eq(p, "(NONE)")) {
+ TEST_info("test_cipher_name(std) failed: NULL input doesn't return \"(NONE)\"\n");
+ goto err;
+ }
+
+ p = OPENSSL_cipher_name(NULL);
+ if (!TEST_str_eq(p, "(NONE)")) {
+ TEST_info("test_cipher_name(ossl) failed: NULL input doesn't return \"(NONE)\"\n");
+ goto err;
+ }
+
+ p = OPENSSL_cipher_name("This is not a valid cipher");
+ if (!TEST_str_eq(p, "(NONE)")) {
+ TEST_info("test_cipher_name(ossl) failed: invalid input doesn't return \"(NONE)\"\n");
+ goto err;
+ }
+
+ /* tests for valid input */
+ ctx = SSL_CTX_new(TLS_server_method());
+ if (ctx == NULL) {
+ TEST_info("test_cipher_name failed: internal error\n");
+ goto err;
+ }
+
+ if (!SSL_CTX_set_cipher_list(ctx, ciphers)) {
+ TEST_info("test_cipher_name failed: internal error\n");
+ goto err;
+ }
+
+ ssl = SSL_new(ctx);
+ if (ssl == NULL) {
+ TEST_info("test_cipher_name failed: internal error\n");
+ goto err;
+ }
+
+ sk = SSL_get_ciphers(ssl);
+ if (sk == NULL) {
+ TEST_info("test_cipher_name failed: internal error\n");
+ goto err;
+ }
+
+ for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
+ c = sk_SSL_CIPHER_value(sk, i);
+ id = SSL_CIPHER_get_id(c) & 0xFFFF;
+ if ((id == 0xC102) || (id == 0xFF85) ||(id == 0xFF87))
+ /* skip GOST2012-GOST8912-GOST891 and GOST2012-NULL-GOST12 */
+ continue;
+ p = SSL_CIPHER_standard_name(c);
+ q = get_std_name_by_id(id);
+ if (!TEST_ptr(p)) {
+ TEST_info("test_cipher_name failed: expected %s, got NULL, cipher %x\n",
+ q, id);
+ goto err;
+ }
+ /* check if p is a valid standard name */
+ if (!TEST_str_eq(p, q)) {
+ TEST_info("test_cipher_name(std) failed: expected %s, got %s, cipher %x\n",
+ q, p, id);
+ goto err;
+ }
+ /* test OPENSSL_cipher_name */
+ q = SSL_CIPHER_get_name(c);
+ r = OPENSSL_cipher_name(p);
+ if (!TEST_str_eq(r, q)) {
+ TEST_info("test_cipher_name(ossl) failed: expected %s, got %s, cipher %x\n",
+ q, r, id);
+ goto err;
+ }
+ }
+ ret = 1;
+err:
+ SSL_CTX_free(ctx);
+ SSL_free(ssl);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_cipher_name);
+ return 1;
+}
diff --git a/test/clienthellotest.c b/test/clienthellotest.c
new file mode 100644
index 000000000000..2f6d336dbc15
--- /dev/null
+++ b/test/clienthellotest.c
@@ -0,0 +1,269 @@
+/*
+ * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+
+#include <openssl/opensslconf.h>
+#include <openssl/bio.h>
+#include <openssl/crypto.h>
+#include <openssl/evp.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+#include <time.h>
+
+#include "internal/packet.h"
+
+#include "testutil.h"
+
+#define CLIENT_VERSION_LEN 2
+
+#define TOTAL_NUM_TESTS 4
+
+/*
+ * Test that explicitly setting ticket data results in it appearing in the
+ * ClientHello for a negotiated SSL/TLS version
+ */
+#define TEST_SET_SESSION_TICK_DATA_VER_NEG 0
+/* Enable padding and make sure ClientHello is long enough to require it */
+#define TEST_ADD_PADDING 1
+/* Enable padding and make sure ClientHello is short enough to not need it */
+#define TEST_PADDING_NOT_NEEDED 2
+/*
+ * Enable padding and add a PSK to the ClientHello (this will also ensure the
+ * ClientHello is long enough to need padding)
+ */
+#define TEST_ADD_PADDING_AND_PSK 3
+
+#define F5_WORKAROUND_MIN_MSG_LEN 0x7f
+#define F5_WORKAROUND_MAX_MSG_LEN 0x200
+
+static const char *sessionfile = NULL;
+/* Dummy ALPN protocols used to pad out the size of the ClientHello */
+/* ASCII 'O' = 79 = 0x4F = EBCDIC '|'*/
+#ifdef CHARSET_EBCDIC
+static const char alpn_prots[] =
+ "|1234567890123456789012345678901234567890123456789012345678901234567890123456789"
+ "|1234567890123456789012345678901234567890123456789012345678901234567890123456789";
+#else
+static const char alpn_prots[] =
+ "O1234567890123456789012345678901234567890123456789012345678901234567890123456789"
+ "O1234567890123456789012345678901234567890123456789012345678901234567890123456789";
+#endif
+
+static int test_client_hello(int currtest)
+{
+ SSL_CTX *ctx;
+ SSL *con = NULL;
+ BIO *rbio;
+ BIO *wbio;
+ long len;
+ unsigned char *data;
+ PACKET pkt, pkt2, pkt3;
+ char *dummytick = "Hello World!";
+ unsigned int type = 0;
+ int testresult = 0;
+ size_t msglen;
+ BIO *sessbio = NULL;
+ SSL_SESSION *sess = NULL;
+
+#ifdef OPENSSL_NO_TLS1_3
+ if (currtest == TEST_ADD_PADDING_AND_PSK)
+ return 1;
+#endif
+
+ memset(&pkt, 0, sizeof(pkt));
+ memset(&pkt2, 0, sizeof(pkt2));
+ memset(&pkt3, 0, sizeof(pkt3));
+
+ /*
+ * For each test set up an SSL_CTX and SSL and see what ClientHello gets
+ * produced when we try to connect
+ */
+ ctx = SSL_CTX_new(TLS_method());
+ if (!TEST_ptr(ctx))
+ goto end;
+ if (!TEST_true(SSL_CTX_set_max_proto_version(ctx, 0)))
+ goto end;
+
+ switch(currtest) {
+ case TEST_SET_SESSION_TICK_DATA_VER_NEG:
+#if !defined(OPENSSL_NO_TLS1_3) && defined(OPENSSL_NO_TLS1_2)
+ /* TLSv1.3 is enabled and TLSv1.2 is disabled so can't do this test */
+ SSL_CTX_free(ctx);
+ return 1;
+#else
+ /* Testing for session tickets <= TLS1.2; not relevant for 1.3 */
+ if (!TEST_true(SSL_CTX_set_max_proto_version(ctx, TLS1_2_VERSION)))
+ goto end;
+#endif
+ break;
+
+ case TEST_ADD_PADDING_AND_PSK:
+ /*
+ * In this case we're doing TLSv1.3 and we're sending a PSK so the
+ * ClientHello is already going to be quite long. To avoid getting one
+ * that is too long for this test we use a restricted ciphersuite list
+ */
+ if (!TEST_false(SSL_CTX_set_cipher_list(ctx, "")))
+ goto end;
+ ERR_clear_error();
+ /* Fall through */
+ case TEST_ADD_PADDING:
+ case TEST_PADDING_NOT_NEEDED:
+ SSL_CTX_set_options(ctx, SSL_OP_TLSEXT_PADDING);
+ /* Make sure we get a consistent size across TLS versions */
+ SSL_CTX_clear_options(ctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
+ /*
+ * Add some dummy ALPN protocols so that the ClientHello is at least
+ * F5_WORKAROUND_MIN_MSG_LEN bytes long - meaning padding will be
+ * needed.
+ */
+ if (currtest == TEST_ADD_PADDING) {
+ if (!TEST_false(SSL_CTX_set_alpn_protos(ctx,
+ (unsigned char *)alpn_prots,
+ sizeof(alpn_prots) - 1)))
+ goto end;
+ /*
+ * Otherwise we need to make sure we have a small enough message to
+ * not need padding.
+ */
+ } else if (!TEST_true(SSL_CTX_set_cipher_list(ctx,
+ "AES128-SHA"))
+ || !TEST_true(SSL_CTX_set_ciphersuites(ctx,
+ "TLS_AES_128_GCM_SHA256"))) {
+ goto end;
+ }
+ break;
+
+ default:
+ goto end;
+ }
+
+ con = SSL_new(ctx);
+ if (!TEST_ptr(con))
+ goto end;
+
+ if (currtest == TEST_ADD_PADDING_AND_PSK) {
+ sessbio = BIO_new_file(sessionfile, "r");
+ if (!TEST_ptr(sessbio)) {
+ TEST_info("Unable to open session.pem");
+ goto end;
+ }
+ sess = PEM_read_bio_SSL_SESSION(sessbio, NULL, NULL, NULL);
+ if (!TEST_ptr(sess)) {
+ TEST_info("Unable to load SSL_SESSION");
+ goto end;
+ }
+ /*
+ * We reset the creation time so that we don't discard the session as
+ * too old.
+ */
+ if (!TEST_true(SSL_SESSION_set_time(sess, (long)time(NULL)))
+ || !TEST_true(SSL_set_session(con, sess)))
+ goto end;
+ }
+
+ rbio = BIO_new(BIO_s_mem());
+ wbio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(rbio)|| !TEST_ptr(wbio)) {
+ BIO_free(rbio);
+ BIO_free(wbio);
+ goto end;
+ }
+
+ SSL_set_bio(con, rbio, wbio);
+ SSL_set_connect_state(con);
+
+ if (currtest == TEST_SET_SESSION_TICK_DATA_VER_NEG) {
+ if (!TEST_true(SSL_set_session_ticket_ext(con, dummytick,
+ strlen(dummytick))))
+ goto end;
+ }
+
+ if (!TEST_int_le(SSL_connect(con), 0)) {
+ /* This shouldn't succeed because we don't have a server! */
+ goto end;
+ }
+
+ if (!TEST_long_ge(len = BIO_get_mem_data(wbio, (char **)&data), 0)
+ || !TEST_true(PACKET_buf_init(&pkt, data, len))
+ /* Skip the record header */
+ || !PACKET_forward(&pkt, SSL3_RT_HEADER_LENGTH))
+ goto end;
+
+ msglen = PACKET_remaining(&pkt);
+
+ /* Skip the handshake message header */
+ if (!TEST_true(PACKET_forward(&pkt, SSL3_HM_HEADER_LENGTH))
+ /* Skip client version and random */
+ || !TEST_true(PACKET_forward(&pkt, CLIENT_VERSION_LEN
+ + SSL3_RANDOM_SIZE))
+ /* Skip session id */
+ || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
+ /* Skip ciphers */
+ || !TEST_true(PACKET_get_length_prefixed_2(&pkt, &pkt2))
+ /* Skip compression */
+ || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
+ /* Extensions len */
+ || !TEST_true(PACKET_as_length_prefixed_2(&pkt, &pkt2)))
+ goto end;
+
+ /* Loop through all extensions */
+ while (PACKET_remaining(&pkt2)) {
+
+ if (!TEST_true(PACKET_get_net_2(&pkt2, &type))
+ || !TEST_true(PACKET_get_length_prefixed_2(&pkt2, &pkt3)))
+ goto end;
+
+ if (type == TLSEXT_TYPE_session_ticket) {
+ if (currtest == TEST_SET_SESSION_TICK_DATA_VER_NEG) {
+ if (TEST_true(PACKET_equal(&pkt3, dummytick,
+ strlen(dummytick)))) {
+ /* Ticket data is as we expected */
+ testresult = 1;
+ }
+ goto end;
+ }
+ }
+ if (type == TLSEXT_TYPE_padding) {
+ if (!TEST_false(currtest == TEST_PADDING_NOT_NEEDED))
+ goto end;
+ else if (TEST_true(currtest == TEST_ADD_PADDING
+ || currtest == TEST_ADD_PADDING_AND_PSK))
+ testresult = TEST_true(msglen == F5_WORKAROUND_MAX_MSG_LEN);
+ }
+ }
+
+ if (currtest == TEST_PADDING_NOT_NEEDED)
+ testresult = 1;
+
+end:
+ SSL_free(con);
+ SSL_CTX_free(ctx);
+ SSL_SESSION_free(sess);
+ BIO_free(sessbio);
+
+ return testresult;
+}
+
+OPT_TEST_DECLARE_USAGE("sessionfile\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(sessionfile = test_get_argument(0)))
+ return 0;
+
+ ADD_ALL_TESTS(test_client_hello, TOTAL_NUM_TESTS);
+ return 1;
+}
diff --git a/test/cmactest.c b/test/cmactest.c
new file mode 100644
index 000000000000..cb2b273b0f4f
--- /dev/null
+++ b/test/cmactest.c
@@ -0,0 +1,216 @@
+/*
+ * 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
+ */
+
+/*
+ * CMAC low level APIs are deprecated for public use, but still ok for internal
+ * use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "internal/nelem.h"
+
+#include <openssl/cmac.h>
+#include <openssl/aes.h>
+#include <openssl/evp.h>
+
+#include "testutil.h"
+
+static const char xtskey[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
+};
+
+static struct test_st {
+ const char key[32];
+ int key_len;
+ const unsigned char data[64];
+ int data_len;
+ const char *mac;
+} test[3] = {
+ {
+ {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
+ },
+ 16,
+ "My test data",
+ 12,
+ "29cec977c48f63c200bd5c4a6881b224"
+ },
+ {
+ {
+ 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
+ },
+ 32,
+ "My test data",
+ 12,
+ "db6493aa04e4761f473b2b453c031c9a"
+ },
+ {
+ {
+ 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
+ },
+ 32,
+ "My test data again",
+ 18,
+ "65c11c75ecf590badd0a5e56cbb8af60"
+ },
+};
+
+static char *pt(unsigned char *md, unsigned int len);
+
+static int test_cmac_bad(void)
+{
+ CMAC_CTX *ctx = NULL;
+ int ret = 0;
+
+ ctx = CMAC_CTX_new();
+ if (!TEST_ptr(ctx)
+ || !TEST_false(CMAC_Init(ctx, NULL, 0, NULL, NULL))
+ || !TEST_false(CMAC_Update(ctx, test[0].data, test[0].data_len))
+ /* Should be able to pass cipher first, and then key */
+ || !TEST_true(CMAC_Init(ctx, NULL, 0, EVP_aes_128_cbc(), NULL))
+ /* Must have a key */
+ || !TEST_false(CMAC_Update(ctx, test[0].data, test[0].data_len))
+ /* Now supply the key */
+ || !TEST_true(CMAC_Init(ctx, test[0].key, test[0].key_len, NULL, NULL))
+ /* Update should now work */
+ || !TEST_true(CMAC_Update(ctx, test[0].data, test[0].data_len))
+ /* XTS is not a suitable cipher to use */
+ || !TEST_false(CMAC_Init(ctx, xtskey, sizeof(xtskey), EVP_aes_128_xts(),
+ NULL))
+ || !TEST_false(CMAC_Update(ctx, test[0].data, test[0].data_len)))
+ goto err;
+
+ ret = 1;
+err:
+ CMAC_CTX_free(ctx);
+ return ret;
+}
+
+static int test_cmac_run(void)
+{
+ char *p;
+ CMAC_CTX *ctx = NULL;
+ unsigned char buf[AES_BLOCK_SIZE];
+ size_t len;
+ int ret = 0;
+
+ ctx = CMAC_CTX_new();
+
+ if (!TEST_true(CMAC_Init(ctx, test[0].key, test[0].key_len,
+ EVP_aes_128_cbc(), NULL))
+ || !TEST_true(CMAC_Update(ctx, test[0].data, test[0].data_len))
+ || !TEST_true(CMAC_Final(ctx, buf, &len)))
+ goto err;
+
+ p = pt(buf, len);
+ if (!TEST_str_eq(p, test[0].mac))
+ goto err;
+
+ if (!TEST_true(CMAC_Init(ctx, test[1].key, test[1].key_len,
+ EVP_aes_256_cbc(), NULL))
+ || !TEST_true(CMAC_Update(ctx, test[1].data, test[1].data_len))
+ || !TEST_true(CMAC_Final(ctx, buf, &len)))
+ goto err;
+
+ p = pt(buf, len);
+ if (!TEST_str_eq(p, test[1].mac))
+ goto err;
+
+ if (!TEST_true(CMAC_Init(ctx, test[2].key, test[2].key_len, NULL, NULL))
+ || !TEST_true(CMAC_Update(ctx, test[2].data, test[2].data_len))
+ || !TEST_true(CMAC_Final(ctx, buf, &len)))
+ goto err;
+ p = pt(buf, len);
+ if (!TEST_str_eq(p, test[2].mac))
+ goto err;
+ /* Test reusing a key */
+ if (!TEST_true(CMAC_Init(ctx, NULL, 0, NULL, NULL))
+ || !TEST_true(CMAC_Update(ctx, test[2].data, test[2].data_len))
+ || !TEST_true(CMAC_Final(ctx, buf, &len)))
+ goto err;
+ p = pt(buf, len);
+ if (!TEST_str_eq(p, test[2].mac))
+ goto err;
+
+ /* Test setting the cipher and key separately */
+ if (!TEST_true(CMAC_Init(ctx, NULL, 0, EVP_aes_256_cbc(), NULL))
+ || !TEST_true(CMAC_Init(ctx, test[2].key, test[2].key_len, NULL, NULL))
+ || !TEST_true(CMAC_Update(ctx, test[2].data, test[2].data_len))
+ || !TEST_true(CMAC_Final(ctx, buf, &len)))
+ goto err;
+ p = pt(buf, len);
+ if (!TEST_str_eq(p, test[2].mac))
+ goto err;
+
+ ret = 1;
+err:
+ CMAC_CTX_free(ctx);
+ return ret;
+}
+
+static int test_cmac_copy(void)
+{
+ char *p;
+ CMAC_CTX *ctx = NULL, *ctx2 = NULL;
+ unsigned char buf[AES_BLOCK_SIZE];
+ size_t len;
+ int ret = 0;
+
+ ctx = CMAC_CTX_new();
+ ctx2 = CMAC_CTX_new();
+ if (!TEST_ptr(ctx) || !TEST_ptr(ctx2))
+ goto err;
+
+ if (!TEST_true(CMAC_Init(ctx, test[0].key, test[0].key_len,
+ EVP_aes_128_cbc(), NULL))
+ || !TEST_true(CMAC_Update(ctx, test[0].data, test[0].data_len))
+ || !TEST_true(CMAC_CTX_copy(ctx2, ctx))
+ || !TEST_true(CMAC_Final(ctx2, buf, &len)))
+ goto err;
+
+ p = pt(buf, len);
+ if (!TEST_str_eq(p, test[0].mac))
+ goto err;
+
+ ret = 1;
+err:
+ CMAC_CTX_free(ctx2);
+ CMAC_CTX_free(ctx);
+ return ret;
+}
+
+static char *pt(unsigned char *md, unsigned int len)
+{
+ unsigned int i;
+ static char buf[80];
+
+ for (i = 0; i < len; i++)
+ sprintf(&(buf[i * 2]), "%02x", md[i]);
+ return buf;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_cmac_bad);
+ ADD_TEST(test_cmac_run);
+ ADD_TEST(test_cmac_copy);
+ return 1;
+}
+
diff --git a/test/cmp_asn_test.c b/test/cmp_asn_test.c
new file mode 100644
index 000000000000..42a6b93b6b27
--- /dev/null
+++ b/test/cmp_asn_test.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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 "helpers/cmp_testlib.h"
+
+static unsigned char rand_data[OSSL_CMP_TRANSACTIONID_LENGTH];
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ int expected;
+ ASN1_OCTET_STRING *src_string;
+ ASN1_OCTET_STRING *tgt_string;
+
+} CMP_ASN_TEST_FIXTURE;
+
+static CMP_ASN_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CMP_ASN_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ fixture->test_case_name = test_case_name;
+ return fixture;
+}
+
+static void tear_down(CMP_ASN_TEST_FIXTURE *fixture)
+{
+ ASN1_OCTET_STRING_free(fixture->src_string);
+ if (fixture->tgt_string != fixture->src_string)
+ ASN1_OCTET_STRING_free(fixture->tgt_string);
+
+ OPENSSL_free(fixture);
+}
+
+static int execute_cmp_asn1_get_int_test(CMP_ASN_TEST_FIXTURE *fixture)
+{
+ int res = 0;
+ ASN1_INTEGER *asn1integer = ASN1_INTEGER_new();
+ const int good_int = 77;
+ const int64_t max_int = INT_MAX;
+
+ if (!TEST_ptr(asn1integer))
+ return res;
+
+ if (!TEST_true(ASN1_INTEGER_set(asn1integer, good_int))) {
+ ASN1_INTEGER_free(asn1integer);
+ return 0;
+ }
+ res = TEST_int_eq(good_int, ossl_cmp_asn1_get_int(asn1integer));
+ if (res == 0)
+ goto err;
+
+ res = 0;
+ if (!TEST_true(ASN1_INTEGER_set_int64(asn1integer, max_int + 1)))
+ goto err;
+ res = TEST_int_eq(-2, ossl_cmp_asn1_get_int(asn1integer));
+
+ err:
+ ASN1_INTEGER_free(asn1integer);
+ return res;
+}
+
+static int test_cmp_asn1_get_int(void)
+{
+ SETUP_TEST_FIXTURE(CMP_ASN_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_cmp_asn1_get_int_test, tear_down);
+ return result;
+}
+
+static int execute_CMP_ASN1_OCTET_STRING_set1_test(CMP_ASN_TEST_FIXTURE *
+ fixture)
+{
+ if (!TEST_int_eq(fixture->expected,
+ ossl_cmp_asn1_octet_string_set1(&fixture->tgt_string,
+ fixture->src_string)))
+ return 0;
+ if (fixture->expected != 0)
+ return TEST_int_eq(0, ASN1_OCTET_STRING_cmp(fixture->tgt_string,
+ fixture->src_string));
+ return 1;
+}
+
+static int test_ASN1_OCTET_STRING_set(void)
+{
+ SETUP_TEST_FIXTURE(CMP_ASN_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ if (!TEST_ptr(fixture->tgt_string = ASN1_OCTET_STRING_new())
+ || !TEST_ptr(fixture->src_string = ASN1_OCTET_STRING_new())
+ || !TEST_true(ASN1_OCTET_STRING_set(fixture->src_string, rand_data,
+ sizeof(rand_data)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_CMP_ASN1_OCTET_STRING_set1_test, tear_down);
+ return result;
+}
+
+static int test_ASN1_OCTET_STRING_set_tgt_is_src(void)
+{
+ SETUP_TEST_FIXTURE(CMP_ASN_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ if (!TEST_ptr(fixture->src_string = ASN1_OCTET_STRING_new())
+ || !(fixture->tgt_string = fixture->src_string)
+ || !TEST_true(ASN1_OCTET_STRING_set(fixture->src_string, rand_data,
+ sizeof(rand_data)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_CMP_ASN1_OCTET_STRING_set1_test, tear_down);
+ return result;
+}
+
+
+void cleanup_tests(void)
+{
+ return;
+}
+
+int setup_tests(void)
+{
+ RAND_bytes(rand_data, OSSL_CMP_TRANSACTIONID_LENGTH);
+ /* ASN.1 related tests */
+ ADD_TEST(test_cmp_asn1_get_int);
+ ADD_TEST(test_ASN1_OCTET_STRING_set);
+ ADD_TEST(test_ASN1_OCTET_STRING_set_tgt_is_src);
+ return 1;
+}
diff --git a/test/cmp_client_test.c b/test/cmp_client_test.c
new file mode 100644
index 000000000000..c1148b82aa00
--- /dev/null
+++ b/test/cmp_client_test.c
@@ -0,0 +1,555 @@
+/*
+ * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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 "helpers/cmp_testlib.h"
+
+#include "cmp_mock_srv.h"
+
+#ifndef NDEBUG /* tests need mock server, which is available only if !NDEBUG */
+
+static const char *server_key_f;
+static const char *server_cert_f;
+static const char *client_key_f;
+static const char *client_cert_f;
+static const char *pkcs10_f;
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ OSSL_CMP_CTX *cmp_ctx;
+ OSSL_CMP_SRV_CTX *srv_ctx;
+ int req_type;
+ int expected;
+ STACK_OF(X509) *caPubs;
+} CMP_SES_TEST_FIXTURE;
+
+static OSSL_LIB_CTX *libctx = NULL;
+static OSSL_PROVIDER *default_null_provider = NULL, *provider = NULL;
+
+static EVP_PKEY *server_key = NULL;
+static X509 *server_cert = NULL;
+static EVP_PKEY *client_key = NULL;
+static X509 *client_cert = NULL;
+static unsigned char ref[CMP_TEST_REFVALUE_LENGTH];
+
+/*
+ * For these unit tests, the client abandons message protection, and for
+ * error messages the mock server does so as well.
+ * Message protection and verification is tested in cmp_lib_test.c
+ */
+
+static void tear_down(CMP_SES_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX_free(fixture->cmp_ctx);
+ ossl_cmp_mock_srv_free(fixture->srv_ctx);
+ sk_X509_free(fixture->caPubs);
+ OPENSSL_free(fixture);
+}
+
+static CMP_SES_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CMP_SES_TEST_FIXTURE *fixture;
+ OSSL_CMP_CTX *srv_cmp_ctx = NULL;
+ OSSL_CMP_CTX *ctx = NULL; /* for client */
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ fixture->test_case_name = test_case_name;
+ if (!TEST_ptr(fixture->srv_ctx = ossl_cmp_mock_srv_new(libctx, NULL))
+ || !OSSL_CMP_SRV_CTX_set_accept_unprotected(fixture->srv_ctx, 1)
+ || !ossl_cmp_mock_srv_set1_certOut(fixture->srv_ctx, client_cert)
+ || (srv_cmp_ctx =
+ OSSL_CMP_SRV_CTX_get0_cmp_ctx(fixture->srv_ctx)) == NULL
+ || !OSSL_CMP_CTX_set1_cert(srv_cmp_ctx, server_cert)
+ || !OSSL_CMP_CTX_set1_pkey(srv_cmp_ctx, server_key))
+ goto err;
+ if (!TEST_ptr(fixture->cmp_ctx = ctx = OSSL_CMP_CTX_new(libctx, NULL))
+ || !OSSL_CMP_CTX_set_log_cb(fixture->cmp_ctx, print_to_bio_out)
+ || !OSSL_CMP_CTX_set_transfer_cb(ctx, OSSL_CMP_CTX_server_perform)
+ || !OSSL_CMP_CTX_set_transfer_cb_arg(ctx, fixture->srv_ctx)
+ || !OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_UNPROTECTED_SEND, 1)
+ || !OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_UNPROTECTED_ERRORS, 1)
+ || !OSSL_CMP_CTX_set1_oldCert(ctx, client_cert)
+ || !OSSL_CMP_CTX_set1_pkey(ctx, client_key)
+ /* client_key is by default used also for newPkey */
+ || !OSSL_CMP_CTX_set1_srvCert(ctx, server_cert)
+ || !OSSL_CMP_CTX_set1_referenceValue(ctx, ref, sizeof(ref)))
+ goto err;
+ fixture->req_type = -1;
+ return fixture;
+
+ err:
+ tear_down(fixture);
+ return NULL;
+}
+
+static int execute_exec_RR_ses_test(CMP_SES_TEST_FIXTURE *fixt)
+{
+ return TEST_int_eq(OSSL_CMP_CTX_get_status(fixt->cmp_ctx),
+ OSSL_CMP_PKISTATUS_unspecified)
+ && TEST_int_eq(OSSL_CMP_exec_RR_ses(fixt->cmp_ctx),
+ fixt->expected == OSSL_CMP_PKISTATUS_accepted)
+ && TEST_int_eq(OSSL_CMP_CTX_get_status(fixt->cmp_ctx), fixt->expected);
+}
+
+static int execute_exec_GENM_ses_test_single(CMP_SES_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX *ctx = fixture->cmp_ctx;
+ ASN1_OBJECT *type = OBJ_txt2obj("1.3.6.1.5.5.7.4.2", 1);
+ OSSL_CMP_ITAV *itav = OSSL_CMP_ITAV_create(type, NULL);
+ STACK_OF(OSSL_CMP_ITAV) *itavs;
+
+ OSSL_CMP_CTX_push0_genm_ITAV(ctx, itav);
+ itavs = OSSL_CMP_exec_GENM_ses(ctx);
+
+ sk_OSSL_CMP_ITAV_pop_free(itavs, OSSL_CMP_ITAV_free);
+ return TEST_int_eq(OSSL_CMP_CTX_get_status(ctx), fixture->expected)
+ && fixture->expected == OSSL_CMP_PKISTATUS_accepted ?
+ TEST_ptr(itavs) : TEST_ptr_null(itavs);
+}
+
+static int execute_exec_GENM_ses_test(CMP_SES_TEST_FIXTURE *fixture)
+{
+ return execute_exec_GENM_ses_test_single(fixture)
+ && OSSL_CMP_CTX_reinit(fixture->cmp_ctx)
+ && execute_exec_GENM_ses_test_single(fixture);
+}
+
+static int execute_exec_certrequest_ses_test(CMP_SES_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX *ctx = fixture->cmp_ctx;
+ X509 *res = OSSL_CMP_exec_certreq(ctx, fixture->req_type, NULL);
+ int status = OSSL_CMP_CTX_get_status(ctx);
+
+ OSSL_CMP_CTX_print_errors(ctx);
+ if (!TEST_int_eq(status, fixture->expected)
+ && !(fixture->expected == OSSL_CMP_PKISTATUS_waiting
+ && TEST_int_eq(status, OSSL_CMP_PKISTATUS_trans)))
+ return 0;
+ if (fixture->expected != OSSL_CMP_PKISTATUS_accepted)
+ return TEST_ptr_null(res);
+
+ if (!TEST_ptr(res) || !TEST_int_eq(X509_cmp(res, client_cert), 0))
+ return 0;
+ if (fixture->caPubs != NULL) {
+ STACK_OF(X509) *caPubs = OSSL_CMP_CTX_get1_caPubs(fixture->cmp_ctx);
+ int ret = TEST_int_eq(STACK_OF_X509_cmp(fixture->caPubs, caPubs), 0);
+
+ sk_X509_pop_free(caPubs, X509_free);
+ return ret;
+ }
+ return 1;
+}
+
+static int test_exec_RR_ses(int request_error)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ if (request_error)
+ OSSL_CMP_CTX_set1_oldCert(fixture->cmp_ctx, NULL);
+ fixture->expected = request_error ? OSSL_CMP_PKISTATUS_request
+ : OSSL_CMP_PKISTATUS_accepted;
+ EXECUTE_TEST(execute_exec_RR_ses_test, tear_down);
+ return result;
+}
+
+static int test_exec_RR_ses_ok(void)
+{
+ return test_exec_RR_ses(0);
+}
+
+static int test_exec_RR_ses_request_error(void)
+{
+ return test_exec_RR_ses(1);
+}
+
+static int test_exec_RR_ses_receive_error(void)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ ossl_cmp_mock_srv_set_statusInfo(fixture->srv_ctx,
+ OSSL_CMP_PKISTATUS_rejection,
+ OSSL_CMP_CTX_FAILINFO_signerNotTrusted,
+ "test string");
+ ossl_cmp_mock_srv_set_sendError(fixture->srv_ctx, OSSL_CMP_PKIBODY_RR);
+ fixture->expected = OSSL_CMP_PKISTATUS_rejection;
+ EXECUTE_TEST(execute_exec_RR_ses_test, tear_down);
+ return result;
+}
+
+static int test_exec_IR_ses(void)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ fixture->req_type = OSSL_CMP_IR;
+ fixture->expected = OSSL_CMP_PKISTATUS_accepted;
+ fixture->caPubs = sk_X509_new_null();
+ sk_X509_push(fixture->caPubs, server_cert);
+ sk_X509_push(fixture->caPubs, server_cert);
+ ossl_cmp_mock_srv_set1_caPubsOut(fixture->srv_ctx, fixture->caPubs);
+ EXECUTE_TEST(execute_exec_certrequest_ses_test, tear_down);
+ return result;
+}
+
+static int test_exec_IR_ses_poll(int check_after, int poll_count,
+ int total_timeout, int expect)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ fixture->req_type = OSSL_CMP_IR;
+ fixture->expected = expect;
+ ossl_cmp_mock_srv_set_checkAfterTime(fixture->srv_ctx, check_after);
+ ossl_cmp_mock_srv_set_pollCount(fixture->srv_ctx, poll_count);
+ OSSL_CMP_CTX_set_option(fixture->cmp_ctx,
+ OSSL_CMP_OPT_TOTAL_TIMEOUT, total_timeout);
+ EXECUTE_TEST(execute_exec_certrequest_ses_test, tear_down);
+ return result;
+}
+
+static int checkAfter = 1;
+static int test_exec_IR_ses_poll_ok(void)
+{
+ return test_exec_IR_ses_poll(checkAfter, 2, 0, OSSL_CMP_PKISTATUS_accepted);
+}
+
+static int test_exec_IR_ses_poll_no_timeout(void)
+{
+ return test_exec_IR_ses_poll(checkAfter, 1 /* pollCount */, checkAfter + 1,
+ OSSL_CMP_PKISTATUS_accepted);
+}
+
+static int test_exec_IR_ses_poll_total_timeout(void)
+{
+ return test_exec_IR_ses_poll(checkAfter + 1, 2 /* pollCount */, checkAfter,
+ OSSL_CMP_PKISTATUS_waiting);
+}
+
+static int test_exec_CR_ses(int implicit_confirm, int granted, int reject)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ fixture->req_type = OSSL_CMP_CR;
+ OSSL_CMP_CTX_set_option(fixture->cmp_ctx,
+ OSSL_CMP_OPT_IMPLICIT_CONFIRM, implicit_confirm);
+ OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(fixture->srv_ctx, granted);
+ ossl_cmp_mock_srv_set_sendError(fixture->srv_ctx,
+ reject ? OSSL_CMP_PKIBODY_CERTCONF : -1);
+ fixture->expected = reject ? OSSL_CMP_PKISTATUS_rejection
+ : OSSL_CMP_PKISTATUS_accepted;
+ EXECUTE_TEST(execute_exec_certrequest_ses_test, tear_down);
+ return result;
+}
+
+static int test_exec_CR_ses_explicit_confirm(void)
+{
+ return test_exec_CR_ses(0, 0, 0)
+ && test_exec_CR_ses(0, 0, 1 /* reject */);
+}
+
+static int test_exec_CR_ses_implicit_confirm(void)
+{
+ return test_exec_CR_ses(1, 0, 0)
+ && test_exec_CR_ses(1, 1 /* granted */, 0);
+}
+
+static int test_exec_KUR_ses(int transfer_error, int pubkey, int raverified)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ fixture->req_type = OSSL_CMP_KUR;
+ /* ctx->oldCert has already been set */
+
+ if (transfer_error)
+ OSSL_CMP_CTX_set_transfer_cb_arg(fixture->cmp_ctx, NULL);
+ if (pubkey) {
+ EVP_PKEY *key = raverified /* wrong key */ ? server_key : client_key;
+
+ EVP_PKEY_up_ref(key);
+ OSSL_CMP_CTX_set0_newPkey(fixture->cmp_ctx, 0 /* not priv */, key);
+ OSSL_CMP_SRV_CTX_set_accept_raverified(fixture->srv_ctx, 1);
+ }
+ if (pubkey || raverified)
+ OSSL_CMP_CTX_set_option(fixture->cmp_ctx, OSSL_CMP_OPT_POPO_METHOD,
+ OSSL_CRMF_POPO_RAVERIFIED);
+ fixture->expected = transfer_error ? OSSL_CMP_PKISTATUS_trans :
+ raverified ? OSSL_CMP_PKISTATUS_rejection : OSSL_CMP_PKISTATUS_accepted;
+ EXECUTE_TEST(execute_exec_certrequest_ses_test, tear_down);
+ return result;
+}
+
+static int test_exec_KUR_ses_ok(void)
+{
+ return test_exec_KUR_ses(0, 0, 0);
+}
+
+static int test_exec_KUR_ses_transfer_error(void)
+{
+ return test_exec_KUR_ses(1, 0, 0);
+}
+
+static int test_exec_KUR_ses_wrong_popo(void)
+{
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION /* cf ossl_cmp_verify_popo() */
+ return test_exec_KUR_ses(0, 0, 1);
+#else
+ return 1;
+#endif
+}
+
+static int test_exec_KUR_ses_pub(void)
+{
+ return test_exec_KUR_ses(0, 1, 0);
+}
+
+static int test_exec_KUR_ses_wrong_pub(void)
+{
+ return test_exec_KUR_ses(0, 1, 1);
+}
+
+static int test_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info,
+ const char **txt)
+{
+ int *reject = OSSL_CMP_CTX_get_certConf_cb_arg(ctx);
+
+ if (*reject) {
+ *txt = "not to my taste";
+ fail_info = OSSL_CMP_PKIFAILUREINFO_badCertTemplate;
+ }
+ return fail_info;
+}
+
+static int test_exec_P10CR_ses(int reject)
+{
+ OSSL_CMP_CTX *ctx;
+ X509_REQ *csr = NULL;
+
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ fixture->req_type = OSSL_CMP_P10CR;
+ fixture->expected = reject ? OSSL_CMP_PKISTATUS_rejection
+ : OSSL_CMP_PKISTATUS_accepted;
+ ctx = fixture->cmp_ctx;
+ if (!TEST_ptr(csr = load_csr_der(pkcs10_f, libctx))
+ || !TEST_true(OSSL_CMP_CTX_set1_p10CSR(ctx, csr))
+ || !TEST_true(OSSL_CMP_CTX_set_certConf_cb(ctx, test_certConf_cb))
+ || !TEST_true(OSSL_CMP_CTX_set_certConf_cb_arg(ctx, &reject))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ X509_REQ_free(csr);
+ EXECUTE_TEST(execute_exec_certrequest_ses_test, tear_down);
+ return result;
+}
+
+static int test_exec_P10CR_ses_ok(void)
+{
+ return test_exec_P10CR_ses(0);
+}
+
+static int test_exec_P10CR_ses_reject(void)
+{
+ return test_exec_P10CR_ses(1);
+}
+
+static int execute_try_certreq_poll_test(CMP_SES_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX *ctx = fixture->cmp_ctx;
+ int check_after;
+ const int CHECK_AFTER = 5;
+ const int TYPE = OSSL_CMP_KUR;
+
+ ossl_cmp_mock_srv_set_pollCount(fixture->srv_ctx, 3);
+ ossl_cmp_mock_srv_set_checkAfterTime(fixture->srv_ctx, CHECK_AFTER);
+ return TEST_int_eq(-1, OSSL_CMP_try_certreq(ctx, TYPE, NULL, &check_after))
+ && check_after == CHECK_AFTER
+ && TEST_ptr_eq(OSSL_CMP_CTX_get0_newCert(ctx), NULL)
+ && TEST_int_eq(-1, OSSL_CMP_try_certreq(ctx, TYPE, NULL, &check_after))
+ && check_after == CHECK_AFTER
+ && TEST_ptr_eq(OSSL_CMP_CTX_get0_newCert(ctx), NULL)
+ && TEST_int_eq(fixture->expected,
+ OSSL_CMP_try_certreq(ctx, TYPE, NULL, NULL))
+ && TEST_int_eq(0,
+ X509_cmp(OSSL_CMP_CTX_get0_newCert(ctx), client_cert));
+}
+
+static int test_try_certreq_poll(void)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_try_certreq_poll_test, tear_down);
+ return result;
+}
+
+static int execute_try_certreq_poll_abort_test(CMP_SES_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX *ctx = fixture->cmp_ctx;
+ int check_after;
+ const int CHECK_AFTER = 99;
+ const int TYPE = OSSL_CMP_CR;
+
+ ossl_cmp_mock_srv_set_pollCount(fixture->srv_ctx, 3);
+ ossl_cmp_mock_srv_set_checkAfterTime(fixture->srv_ctx, CHECK_AFTER);
+ return TEST_int_eq(-1, OSSL_CMP_try_certreq(ctx, TYPE, NULL, &check_after))
+ && check_after == CHECK_AFTER
+ && TEST_ptr_eq(OSSL_CMP_CTX_get0_newCert(ctx), NULL)
+ && TEST_int_eq(fixture->expected,
+ OSSL_CMP_try_certreq(ctx, -1 /* abort */, NULL, NULL))
+ && TEST_ptr_eq(OSSL_CMP_CTX_get0_newCert(fixture->cmp_ctx), NULL);
+}
+
+static int test_try_certreq_poll_abort(void)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_try_certreq_poll_abort_test, tear_down);
+ return result;
+}
+
+static int test_exec_GENM_ses(int transfer_error, int total_timeout, int expect)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ if (transfer_error)
+ OSSL_CMP_CTX_set_transfer_cb_arg(fixture->cmp_ctx, NULL);
+ /*
+ * cannot use OSSL_CMP_CTX_set_option(... OSSL_CMP_OPT_TOTAL_TIMEOUT)
+ * here because this will correct total_timeout to be >= 0
+ */
+ fixture->cmp_ctx->total_timeout = total_timeout;
+ fixture->expected = expect;
+ EXECUTE_TEST(execute_exec_GENM_ses_test, tear_down);
+ return result;
+}
+
+static int test_exec_GENM_ses_ok(void)
+{
+ return test_exec_GENM_ses(0, 0, OSSL_CMP_PKISTATUS_accepted);
+}
+
+static int test_exec_GENM_ses_transfer_error(void)
+{
+ return test_exec_GENM_ses(1, 0, OSSL_CMP_PKISTATUS_trans);
+}
+
+static int test_exec_GENM_ses_total_timeout(void)
+{
+ return test_exec_GENM_ses(0, -1, OSSL_CMP_PKISTATUS_trans);
+}
+
+static int execute_exchange_certConf_test(CMP_SES_TEST_FIXTURE *fixture)
+{
+ int res =
+ ossl_cmp_exchange_certConf(fixture->cmp_ctx, OSSL_CMP_CERTREQID,
+ OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable,
+ "abcdefg");
+ return TEST_int_eq(fixture->expected, res);
+}
+
+static int execute_exchange_error_test(CMP_SES_TEST_FIXTURE *fixture)
+{
+ int res =
+ ossl_cmp_exchange_error(fixture->cmp_ctx,
+ OSSL_CMP_PKISTATUS_rejection,
+ 1 << OSSL_CMP_PKIFAILUREINFO_unsupportedVersion,
+ "foo_status", 999, "foo_details");
+
+ return TEST_int_eq(fixture->expected, res);
+}
+
+static int test_exchange_certConf(void)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ fixture->expected = 0; /* client should not send certConf immediately */
+ if (!ossl_cmp_ctx_set0_newCert(fixture->cmp_ctx, X509_dup(client_cert))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_exchange_certConf_test, tear_down);
+ return result;
+}
+
+static int test_exchange_error(void)
+{
+ SETUP_TEST_FIXTURE(CMP_SES_TEST_FIXTURE, set_up);
+ fixture->expected = 1; /* client may send error any time */
+ EXECUTE_TEST(execute_exchange_error_test, tear_down);
+ return result;
+}
+
+void cleanup_tests(void)
+{
+ X509_free(server_cert);
+ EVP_PKEY_free(server_key);
+ X509_free(client_cert);
+ EVP_PKEY_free(client_key);
+ OSSL_PROVIDER_unload(default_null_provider);
+ OSSL_PROVIDER_unload(provider);
+ OSSL_LIB_CTX_free(libctx);
+ return;
+}
+
+# define USAGE "server.key server.crt client.key client.crt client.csr module_name [module_conf_file]\n"
+OPT_TEST_DECLARE_USAGE(USAGE)
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(server_key_f = test_get_argument(0))
+ || !TEST_ptr(server_cert_f = test_get_argument(1))
+ || !TEST_ptr(client_key_f = test_get_argument(2))
+ || !TEST_ptr(client_cert_f = test_get_argument(3))
+ || !TEST_ptr(pkcs10_f = test_get_argument(4))) {
+ TEST_error("usage: cmp_client_test %s", USAGE);
+ return 0;
+ }
+
+ if (!test_arg_libctx(&libctx, &default_null_provider, &provider, 5, USAGE))
+ return 0;
+
+ if (!TEST_ptr(server_key = load_pkey_pem(server_key_f, libctx))
+ || !TEST_ptr(server_cert = load_cert_pem(server_cert_f, libctx))
+ || !TEST_ptr(client_key = load_pkey_pem(client_key_f, libctx))
+ || !TEST_ptr(client_cert = load_cert_pem(client_cert_f, libctx))
+ || !TEST_int_eq(1, RAND_bytes_ex(libctx, ref, sizeof(ref), 0))) {
+ cleanup_tests();
+ return 0;
+ }
+
+ ADD_TEST(test_exec_RR_ses_ok);
+ ADD_TEST(test_exec_RR_ses_request_error);
+ ADD_TEST(test_exec_RR_ses_receive_error);
+ ADD_TEST(test_exec_CR_ses_explicit_confirm);
+ ADD_TEST(test_exec_CR_ses_implicit_confirm);
+ ADD_TEST(test_exec_IR_ses);
+ ADD_TEST(test_exec_IR_ses_poll_ok);
+ ADD_TEST(test_exec_IR_ses_poll_no_timeout);
+ ADD_TEST(test_exec_IR_ses_poll_total_timeout);
+ ADD_TEST(test_exec_KUR_ses_ok);
+ ADD_TEST(test_exec_KUR_ses_transfer_error);
+ ADD_TEST(test_exec_KUR_ses_wrong_popo);
+ ADD_TEST(test_exec_KUR_ses_pub);
+ ADD_TEST(test_exec_KUR_ses_wrong_pub);
+ ADD_TEST(test_exec_P10CR_ses_ok);
+ ADD_TEST(test_exec_P10CR_ses_reject);
+ ADD_TEST(test_try_certreq_poll);
+ ADD_TEST(test_try_certreq_poll_abort);
+ ADD_TEST(test_exec_GENM_ses_ok);
+ ADD_TEST(test_exec_GENM_ses_transfer_error);
+ ADD_TEST(test_exec_GENM_ses_total_timeout);
+ ADD_TEST(test_exchange_certConf);
+ ADD_TEST(test_exchange_error);
+ return 1;
+}
+
+#else /* !defined (NDEBUG) */
+
+int setup_tests(void)
+{
+ TEST_note("CMP session tests are disabled in this build (NDEBUG).");
+ return 1;
+}
+
+#endif
diff --git a/test/cmp_ctx_test.c b/test/cmp_ctx_test.c
new file mode 100644
index 000000000000..4a10653fc87f
--- /dev/null
+++ b/test/cmp_ctx_test.c
@@ -0,0 +1,896 @@
+/*
+ * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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 "helpers/cmp_testlib.h"
+
+#include <openssl/x509_vfy.h>
+
+static X509 *test_cert;
+
+/* Avoid using X509_new() via the generic macros below. */
+#define X509_new() X509_dup(test_cert)
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ OSSL_CMP_CTX *ctx;
+} OSSL_CMP_CTX_TEST_FIXTURE;
+
+static void tear_down(OSSL_CMP_CTX_TEST_FIXTURE *fixture)
+{
+ if (fixture != NULL)
+ OSSL_CMP_CTX_free(fixture->ctx);
+ OPENSSL_free(fixture);
+}
+
+static OSSL_CMP_CTX_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ OSSL_CMP_CTX_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ if (!TEST_ptr(fixture->ctx = OSSL_CMP_CTX_new(NULL, NULL))) {
+ tear_down(fixture);
+ return NULL;
+ }
+ fixture->test_case_name = test_case_name;
+ return fixture;
+}
+
+static STACK_OF(X509) *sk_X509_new_1(void)
+{
+ STACK_OF(X509) *sk = sk_X509_new_null();
+ X509 *x = X509_dup(test_cert);
+
+ if (x == NULL || !sk_X509_push(sk, x)) {
+ sk_X509_free(sk);
+ X509_free(x);
+ sk = NULL;
+ }
+ return sk;
+}
+
+static void sk_X509_pop_X509_free(STACK_OF(X509) *sk)
+{
+ sk_X509_pop_free(sk, X509_free);
+}
+
+static int execute_CTX_reinit_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX *ctx = fixture->ctx;
+ ASN1_OCTET_STRING *bytes = NULL;
+ STACK_OF(X509) *certs = NULL;
+ int res = 0;
+
+ /* set non-default values in all relevant fields */
+ ctx->status = 1;
+ ctx->failInfoCode = 1;
+ if (!ossl_cmp_ctx_set0_statusString(ctx, sk_ASN1_UTF8STRING_new_null())
+ || !ossl_cmp_ctx_set0_newCert(ctx, X509_dup(test_cert))
+ || !TEST_ptr(certs = sk_X509_new_1())
+ || !ossl_cmp_ctx_set1_newChain(ctx, certs)
+ || !ossl_cmp_ctx_set1_caPubs(ctx, certs)
+ || !ossl_cmp_ctx_set1_extraCertsIn(ctx, certs)
+ || !ossl_cmp_ctx_set0_validatedSrvCert(ctx, X509_dup(test_cert))
+ || !TEST_ptr(bytes = ASN1_OCTET_STRING_new())
+ || !OSSL_CMP_CTX_set1_transactionID(ctx, bytes)
+ || !OSSL_CMP_CTX_set1_senderNonce(ctx, bytes)
+ || !ossl_cmp_ctx_set1_recipNonce(ctx, bytes))
+ goto err;
+
+ if (!TEST_true(OSSL_CMP_CTX_reinit(ctx)))
+ goto err;
+
+ /* check whether values have been reset to default in all relevant fields */
+ if (!TEST_true(ctx->status == -1
+ && ctx->failInfoCode == -1
+ && ctx->statusString == NULL
+ && ctx->newCert == NULL
+ && ctx->newChain == NULL
+ && ctx->caPubs == NULL
+ && ctx->extraCertsIn == NULL
+ && ctx->validatedSrvCert == NULL
+ && ctx->transactionID == NULL
+ && ctx->senderNonce == NULL
+ && ctx->recipNonce == NULL))
+ goto err;
+
+ /* this does not check that all remaining fields are untouched */
+ res = 1;
+
+ err:
+ sk_X509_pop_X509_free(certs);
+ ASN1_OCTET_STRING_free(bytes);
+ return res;
+}
+
+static int test_CTX_reinit(void)
+{
+ SETUP_TEST_FIXTURE(OSSL_CMP_CTX_TEST_FIXTURE, set_up);
+ EXECUTE_TEST(execute_CTX_reinit_test, tear_down);
+ return result;
+}
+
+#if !defined(OPENSSL_NO_ERR) && !defined(OPENSSL_NO_AUTOERRINIT)
+
+static int msg_total_size = 0;
+static int msg_total_size_log_cb(const char *func, const char *file, int line,
+ OSSL_CMP_severity level, const char *msg)
+{
+ msg_total_size += strlen(msg);
+ TEST_note("total=%d len=%zu msg='%s'\n", msg_total_size, strlen(msg), msg);
+ return 1;
+}
+
+# define STR64 "This is a 64 bytes looooooooooooooooooooooooooooooooong string.\n"
+/* max string length ISO C90 compilers are required to support is 509. */
+# define STR509 STR64 STR64 STR64 STR64 STR64 STR64 STR64 \
+ "This is a 61 bytes loooooooooooooooooooooooooooooong string.\n"
+static const char *const max_str_literal = STR509;
+# define STR_SEP "<SEP>"
+
+static int execute_CTX_print_errors_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX *ctx = fixture->ctx;
+ int base_err_msg_size, expected_size;
+ int res = 1;
+
+ if (!TEST_true(OSSL_CMP_CTX_set_log_cb(ctx, NULL)))
+ res = 0;
+ if (!TEST_true(ctx->log_cb == NULL))
+ res = 0;
+
+# ifndef OPENSSL_NO_STDIO
+ ERR_raise(ERR_LIB_CMP, CMP_R_MULTIPLE_SAN_SOURCES);
+ OSSL_CMP_CTX_print_errors(ctx); /* should print above error to STDERR */
+# endif
+
+ /* this should work regardless of OPENSSL_NO_STDIO and OPENSSL_NO_TRACE: */
+ if (!TEST_true(OSSL_CMP_CTX_set_log_cb(ctx, msg_total_size_log_cb)))
+ res = 0;
+ if (!TEST_true(ctx->log_cb == msg_total_size_log_cb)) {
+ res = 0;
+ } else {
+ ERR_raise(ERR_LIB_CMP, CMP_R_INVALID_ARGS);
+ base_err_msg_size = strlen("INVALID_ARGS");
+ ERR_raise(ERR_LIB_CMP, CMP_R_NULL_ARGUMENT);
+ base_err_msg_size += strlen("NULL_ARGUMENT");
+ expected_size = base_err_msg_size;
+ ossl_cmp_add_error_data("data1"); /* should prepend separator ":" */
+ expected_size += strlen(":" "data1");
+ ossl_cmp_add_error_data("data2"); /* should prepend separator " : " */
+ expected_size += strlen(" : " "data2");
+ ossl_cmp_add_error_line("new line"); /* should prepend separator "\n" */
+ expected_size += strlen("\n" "new line");
+ OSSL_CMP_CTX_print_errors(ctx);
+ if (!TEST_int_eq(msg_total_size, expected_size))
+ res = 0;
+
+ ERR_raise(ERR_LIB_CMP, CMP_R_INVALID_ARGS);
+ base_err_msg_size = strlen("INVALID_ARGS") + strlen(":");
+ expected_size = base_err_msg_size;
+ while (expected_size < 4096) { /* force split */
+ ERR_add_error_txt(STR_SEP, max_str_literal);
+ expected_size += strlen(STR_SEP) + strlen(max_str_literal);
+ }
+ expected_size += base_err_msg_size - 2 * strlen(STR_SEP);
+ msg_total_size = 0;
+ OSSL_CMP_CTX_print_errors(ctx);
+ if (!TEST_int_eq(msg_total_size, expected_size))
+ res = 0;
+ }
+
+ return res;
+}
+
+static int test_CTX_print_errors(void)
+{
+ SETUP_TEST_FIXTURE(OSSL_CMP_CTX_TEST_FIXTURE, set_up);
+ EXECUTE_TEST(execute_CTX_print_errors_test, tear_down);
+ return result;
+}
+#endif
+
+static
+int execute_CTX_reqExtensions_have_SAN_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX *ctx = fixture->ctx;
+ const int len = 16;
+ unsigned char str[16 /* = len */];
+ ASN1_OCTET_STRING *data = NULL;
+ X509_EXTENSION *ext = NULL;
+ X509_EXTENSIONS *exts = NULL;
+ int res = 0;
+
+ if (!TEST_false(OSSL_CMP_CTX_reqExtensions_have_SAN(ctx)))
+ return 0;
+
+ if (!TEST_int_eq(1, RAND_bytes(str, len))
+ || !TEST_ptr(data = ASN1_OCTET_STRING_new())
+ || !TEST_true(ASN1_OCTET_STRING_set(data, str, len)))
+ goto err;
+ ext = X509_EXTENSION_create_by_NID(NULL, NID_subject_alt_name, 0, data);
+ if (!TEST_ptr(ext)
+ || !TEST_ptr(exts = sk_X509_EXTENSION_new_null())
+ || !TEST_true(sk_X509_EXTENSION_push(exts, ext))
+ || !TEST_true(OSSL_CMP_CTX_set0_reqExtensions(ctx, exts))) {
+ X509_EXTENSION_free(ext);
+ sk_X509_EXTENSION_free(exts);
+ goto err;
+ }
+ if (TEST_int_eq(OSSL_CMP_CTX_reqExtensions_have_SAN(ctx), 1)) {
+ ext = sk_X509_EXTENSION_pop(exts);
+ res = TEST_false(OSSL_CMP_CTX_reqExtensions_have_SAN(ctx));
+ X509_EXTENSION_free(ext);
+ }
+ err:
+ ASN1_OCTET_STRING_free(data);
+ return res;
+}
+
+static int test_CTX_reqExtensions_have_SAN(void)
+{
+ SETUP_TEST_FIXTURE(OSSL_CMP_CTX_TEST_FIXTURE, set_up);
+ EXECUTE_TEST(execute_CTX_reqExtensions_have_SAN_test, tear_down);
+ return result;
+}
+
+static int test_log_line;
+static int test_log_cb_res = 0;
+static int test_log_cb(const char *func, const char *file, int line,
+ OSSL_CMP_severity level, const char *msg)
+{
+ test_log_cb_res =
+#ifndef PEDANTIC
+ (TEST_str_eq(func, "execute_cmp_ctx_log_cb_test")
+ || TEST_str_eq(func, "(unknown function)")) &&
+#endif
+ (TEST_str_eq(file, OPENSSL_FILE)
+ || TEST_str_eq(file, "(no file)"))
+ && (TEST_int_eq(line, test_log_line) || TEST_int_eq(line, 0))
+ && (TEST_int_eq(level, OSSL_CMP_LOG_INFO) || TEST_int_eq(level, -1))
+ && TEST_str_eq(msg, "ok");
+ return 1;
+}
+
+static int execute_cmp_ctx_log_cb_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture)
+{
+ int res = 1;
+ OSSL_CMP_CTX *ctx = fixture->ctx;
+
+ OSSL_TRACE(ALL, "this general trace message is not shown by default\n");
+
+ OSSL_CMP_log_open();
+ OSSL_CMP_log_open(); /* multiple calls should be harmless */
+
+ if (!TEST_true(OSSL_CMP_CTX_set_log_cb(ctx, NULL))) {
+ res = 0;
+ } else {
+ ossl_cmp_err(ctx, "this should be printed as CMP error message");
+ ossl_cmp_warn(ctx, "this should be printed as CMP warning message");
+ ossl_cmp_debug(ctx, "this should not be printed");
+ TEST_true(OSSL_CMP_CTX_set_log_verbosity(ctx, OSSL_CMP_LOG_DEBUG));
+ ossl_cmp_debug(ctx, "this should be printed as CMP debug message");
+ TEST_true(OSSL_CMP_CTX_set_log_verbosity(ctx, OSSL_CMP_LOG_INFO));
+ }
+ if (!TEST_true(OSSL_CMP_CTX_set_log_cb(ctx, test_log_cb))) {
+ res = 0;
+ } else {
+ test_log_line = OPENSSL_LINE + 1;
+ ossl_cmp_log2(INFO, ctx, "%s%c", "o", 'k');
+ if (!TEST_int_eq(test_log_cb_res, 1))
+ res = 0;
+ OSSL_CMP_CTX_set_log_verbosity(ctx, OSSL_CMP_LOG_ERR);
+ test_log_cb_res = -1; /* callback should not be called at all */
+ test_log_line = OPENSSL_LINE + 1;
+ ossl_cmp_log2(INFO, ctx, "%s%c", "o", 'k');
+ if (!TEST_int_eq(test_log_cb_res, -1))
+ res = 0;
+ }
+ OSSL_CMP_log_close();
+ OSSL_CMP_log_close(); /* multiple calls should be harmless */
+ return res;
+}
+
+static int test_cmp_ctx_log_cb(void)
+{
+ SETUP_TEST_FIXTURE(OSSL_CMP_CTX_TEST_FIXTURE, set_up);
+ EXECUTE_TEST(execute_cmp_ctx_log_cb_test, tear_down);
+ return result;
+}
+
+static BIO *test_http_cb(BIO *bio, void *arg, int use_ssl, int detail)
+{
+ return NULL;
+}
+
+static OSSL_CMP_MSG *test_transfer_cb(OSSL_CMP_CTX *ctx,
+ const OSSL_CMP_MSG *req)
+{
+ return NULL;
+}
+
+static int test_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info,
+ const char **txt)
+{
+ return 0;
+}
+
+typedef OSSL_CMP_CTX CMP_CTX; /* prevents rewriting type name by below macro */
+#define OSSL_CMP_CTX 1 /* name prefix for exported setter functions */
+#define ossl_cmp_ctx 0 /* name prefix for internal setter functions */
+#define set 0
+#define set0 0
+#define set1 1
+#define get 0
+#define get0 0
+#define get1 1
+
+#define DEFINE_SET_GET_BASE_TEST(PREFIX, SETN, GETN, DUP, FIELD, TYPE, ERR, \
+ DEFAULT, NEW, FREE) \
+static int \
+execute_CTX_##SETN##_##GETN##_##FIELD(OSSL_CMP_CTX_TEST_FIXTURE *fixture) \
+{ \
+ CMP_CTX *ctx = fixture->ctx; \
+ int (*set_fn)(CMP_CTX *ctx, TYPE) = \
+ (int (*)(CMP_CTX *ctx, TYPE))PREFIX##_##SETN##_##FIELD; \
+ /* need type cast in above assignment as TYPE arg sometimes is const */ \
+ TYPE (*get_fn)(const CMP_CTX *ctx) = OSSL_CMP_CTX_##GETN##_##FIELD; \
+ TYPE val1_to_free = NEW; \
+ TYPE val1 = val1_to_free; \
+ TYPE val1_read = 0; /* 0 works for any type */ \
+ TYPE val2_to_free = NEW; \
+ TYPE val2 = val2_to_free; \
+ TYPE val2_read = 0; \
+ TYPE val3_read = 0; \
+ int res = 1; \
+ \
+ if (!TEST_int_eq(ERR_peek_error(), 0)) \
+ res = 0; \
+ if (PREFIX == 1) { /* exported setter functions must test ctx == NULL */ \
+ if ((*set_fn)(NULL, val1) || ERR_peek_error() == 0) { \
+ TEST_error("setter did not return error on ctx == NULL"); \
+ res = 0; \
+ } \
+ } \
+ ERR_clear_error(); \
+ \
+ if ((*get_fn)(NULL) != ERR || ERR_peek_error() == 0) { \
+ TEST_error("getter did not return error on ctx == NULL"); \
+ res = 0; \
+ } \
+ ERR_clear_error(); \
+ \
+ val1_read = (*get_fn)(ctx); \
+ if (!DEFAULT(val1_read)) { \
+ TEST_error("did not get default value"); \
+ res = 0; \
+ } \
+ if (!(*set_fn)(ctx, val1)) { \
+ TEST_error("setting first value failed"); \
+ res = 0; \
+ } \
+ if (SETN == 0) \
+ val1_to_free = 0; /* 0 works for any type */ \
+ \
+ if (GETN == 1) \
+ FREE(val1_read); \
+ val1_read = (*get_fn)(ctx); \
+ if (SETN == 0) { \
+ if (val1_read != val1) { \
+ TEST_error("set/get first value did not match"); \
+ res = 0; \
+ } \
+ } else { \
+ if (DUP && val1_read == val1) { \
+ TEST_error("first set did not dup the value"); \
+ val1_read = 0; \
+ res = 0; \
+ } \
+ if (DEFAULT(val1_read)) { \
+ TEST_error("first set had no effect"); \
+ res = 0; \
+ } \
+ } \
+ \
+ if (!(*set_fn)(ctx, val2)) { \
+ TEST_error("setting second value failed"); \
+ res = 0; \
+ } \
+ if (SETN == 0) \
+ val2_to_free = 0; \
+ \
+ val2_read = (*get_fn)(ctx); \
+ if (DEFAULT(val2_read)) { \
+ TEST_error("second set reset the value"); \
+ res = 0; \
+ } \
+ if (SETN == 0 && GETN == 0) { \
+ if (val2_read != val2) { \
+ TEST_error("set/get second value did not match"); \
+ res = 0; \
+ } \
+ } else { \
+ if (DUP && val2_read == val2) { \
+ TEST_error("second set did not dup the value"); \
+ val2_read = 0; \
+ res = 0; \
+ } \
+ if (val2 == val1) { \
+ TEST_error("second value is same as first value"); \
+ res = 0; \
+ } \
+ if (GETN == 1 && val2_read == val1_read) { \
+ /* \
+ * Note that if GETN == 0 then possibly val2_read == val1_read \
+ * because set1 may allocate the new copy at the same location. \
+ */ \
+ TEST_error("second get returned same as first get"); \
+ res = 0; \
+ } \
+ } \
+ \
+ val3_read = (*get_fn)(ctx); \
+ if (DEFAULT(val3_read)) { \
+ TEST_error("third set reset the value"); \
+ res = 0; \
+ } \
+ if (GETN == 0) { \
+ if (val3_read != val2_read) { \
+ TEST_error("third get gave different value"); \
+ res = 0; \
+ } \
+ } else { \
+ if (DUP && val3_read == val2_read) { \
+ TEST_error("third get did not create a new dup"); \
+ val3_read = 0; \
+ res = 0; \
+ } \
+ } \
+ /* this does not check that all remaining fields are untouched */ \
+ \
+ if (!TEST_int_eq(ERR_peek_error(), 0)) \
+ res = 0; \
+ \
+ FREE(val1_to_free); \
+ FREE(val2_to_free); \
+ if (GETN == 1) { \
+ FREE(val1_read); \
+ FREE(val2_read); \
+ FREE(val3_read); \
+ } \
+ return TEST_true(res); \
+} \
+\
+static int test_CTX_##SETN##_##GETN##_##FIELD(void) \
+{ \
+ SETUP_TEST_FIXTURE(OSSL_CMP_CTX_TEST_FIXTURE, set_up); \
+ EXECUTE_TEST(execute_CTX_##SETN##_##GETN##_##FIELD, tear_down); \
+ return result; \
+}
+
+static char *char_new(void)
+{
+ return OPENSSL_strdup("test");
+}
+
+static void char_free(char *val)
+{
+ OPENSSL_free(val);
+}
+
+#define EMPTY_SK_X509(x) ((x) == NULL || sk_X509_num(x) == 0)
+
+static X509_STORE *X509_STORE_new_1(void)
+{
+ X509_STORE *store = X509_STORE_new();
+
+ if (store != NULL)
+ X509_VERIFY_PARAM_set_flags(X509_STORE_get0_param(store), 1);
+ return store;
+}
+
+#define DEFAULT_STORE(x) \
+ ((x) == NULL || X509_VERIFY_PARAM_get_flags(X509_STORE_get0_param(x)) == 0)
+
+#define IS_NEG(x) ((x) < 0)
+#define IS_0(x) ((x) == 0) /* for any type */
+#define DROP(x) (void)(x) /* dummy free() for non-pointer and function types */
+
+#define RET_IF_NULL_ARG(ctx, ret) \
+ if (ctx == NULL) { \
+ ERR_raise(ERR_LIB_CMP, CMP_R_NULL_ARGUMENT); \
+ return ret; \
+ }
+
+#define DEFINE_SET_GET_TEST(OSSL_CMP, CTX, N, M, DUP, FIELD, TYPE) \
+ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get##M, DUP, FIELD, \
+ TYPE *, NULL, IS_0, TYPE##_new(), TYPE##_free)
+
+#define DEFINE_SET_GET_SK_TEST_DEFAULT(OSSL_CMP, CTX, N, M, FIELD, ELEM_TYPE, \
+ DEFAULT, NEW, FREE) \
+ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get##M, 1, FIELD, \
+ STACK_OF(ELEM_TYPE)*, NULL, DEFAULT, NEW, FREE)
+#define DEFINE_SET_GET_SK_TEST(OSSL_CMP, CTX, N, M, FIELD, T) \
+ DEFINE_SET_GET_SK_TEST_DEFAULT(OSSL_CMP, CTX, N, M, FIELD, T, \
+ IS_0, sk_##T##_new_null(), sk_##T##_free)
+#define DEFINE_SET_GET_SK_X509_TEST(OSSL_CMP, CTX, N, M, FNAME) \
+ DEFINE_SET_GET_SK_TEST_DEFAULT(OSSL_CMP, CTX, N, M, FNAME, X509, \
+ EMPTY_SK_X509, \
+ sk_X509_new_1(), sk_X509_pop_X509_free)
+
+#define DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, N, M, DUP, FIELD, TYPE, \
+ DEFAULT) \
+ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get##M, DUP, FIELD, \
+ TYPE *, NULL, DEFAULT, TYPE##_new(), TYPE##_free)
+#define DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, N, DUP, FIELD, TYPE, DEFAULT) \
+ static TYPE *OSSL_CMP_CTX_get0_##FIELD(const CMP_CTX *ctx) \
+ { \
+ RET_IF_NULL_ARG(ctx, NULL); \
+ return (TYPE *)ctx->FIELD; \
+ } \
+ DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, N, 0, DUP, FIELD, TYPE, DEFAULT)
+#define DEFINE_SET_TEST(OSSL_CMP, CTX, N, DUP, FIELD, TYPE) \
+ DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, N, DUP, FIELD, TYPE, IS_0)
+
+#define DEFINE_SET_SK_TEST(OSSL_CMP, CTX, N, FIELD, TYPE) \
+ static STACK_OF(TYPE) *OSSL_CMP_CTX_get0_##FIELD(const CMP_CTX *ctx) \
+ { \
+ RET_IF_NULL_ARG(ctx, NULL); \
+ return ctx->FIELD; \
+ } \
+ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get0, 1, FIELD, \
+ STACK_OF(TYPE)*, NULL, IS_0, \
+ sk_##TYPE##_new_null(), sk_##TYPE##_free)
+
+typedef OSSL_HTTP_bio_cb_t OSSL_CMP_http_cb_t;
+#define DEFINE_SET_CB_TEST(FIELD) \
+ static OSSL_CMP_##FIELD##_t OSSL_CMP_CTX_get_##FIELD(const CMP_CTX *ctx) \
+ { \
+ RET_IF_NULL_ARG(ctx, NULL); \
+ return ctx->FIELD; \
+ } \
+ DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, FIELD, \
+ OSSL_CMP_##FIELD##_t, NULL, IS_0, \
+ test_##FIELD, DROP)
+#define DEFINE_SET_GET_P_VOID_TEST(FIELD) \
+ DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, FIELD, void *, \
+ NULL, IS_0, ((void *)1), DROP)
+
+#define DEFINE_SET_GET_INT_TEST_DEFAULT(OSSL_CMP, CTX, FIELD, DEFAULT) \
+ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set, get, 0, FIELD, int, -1, \
+ DEFAULT, 1, DROP)
+#define DEFINE_SET_GET_INT_TEST(OSSL_CMP, CTX, FIELD) \
+ DEFINE_SET_GET_INT_TEST_DEFAULT(OSSL_CMP, CTX, FIELD, IS_NEG)
+#define DEFINE_SET_INT_TEST(FIELD) \
+ static int OSSL_CMP_CTX_get_##FIELD(const CMP_CTX *ctx) \
+ { \
+ RET_IF_NULL_ARG(ctx, -1); \
+ return ctx->FIELD; \
+ } \
+ DEFINE_SET_GET_INT_TEST_DEFAULT(OSSL_CMP, CTX, FIELD, IS_0)
+
+#define DEFINE_SET_GET_ARG_FN(SETN, GETN, FIELD, ARG, T) \
+ static int OSSL_CMP_CTX_##SETN##_##FIELD##_##ARG(CMP_CTX *ctx, T val) \
+ { \
+ return OSSL_CMP_CTX_##SETN##_##FIELD(ctx, ARG, val); \
+ } \
+ \
+ static T OSSL_CMP_CTX_##GETN##_##FIELD##_##ARG(const CMP_CTX *ctx) \
+ { \
+ return OSSL_CMP_CTX_##GETN##_##FIELD(ctx, ARG); \
+ }
+
+#define DEFINE_SET_GET1_STR_FN(SETN, FIELD) \
+ static int OSSL_CMP_CTX_##SETN##_##FIELD##_str(CMP_CTX *ctx, char *val)\
+ { \
+ return OSSL_CMP_CTX_##SETN##_##FIELD(ctx, (unsigned char *)val, \
+ strlen(val)); \
+ } \
+ \
+ static char *OSSL_CMP_CTX_get1_##FIELD##_str(const CMP_CTX *ctx) \
+ { \
+ const ASN1_OCTET_STRING *bytes = NULL; \
+ \
+ RET_IF_NULL_ARG(ctx, NULL); \
+ bytes = ctx->FIELD; \
+ return bytes == NULL ? NULL : \
+ OPENSSL_strndup((char *)bytes->data, bytes->length); \
+ }
+
+#define push 0
+#define push0 0
+#define push1 1
+#define DEFINE_PUSH_BASE_TEST(PUSHN, DUP, FIELD, ELEM, TYPE, T, \
+ DEFAULT, NEW, FREE) \
+static TYPE sk_top_##FIELD(const CMP_CTX *ctx) \
+{ \
+ return sk_##T##_value(ctx->FIELD, sk_##T##_num(ctx->FIELD) - 1); \
+} \
+\
+static int execute_CTX_##PUSHN##_##ELEM(OSSL_CMP_CTX_TEST_FIXTURE *fixture) \
+{ \
+ CMP_CTX *ctx = fixture->ctx; \
+ int (*push_fn)(CMP_CTX *ctx, TYPE) = \
+ (int (*)(CMP_CTX *ctx, TYPE))OSSL_CMP_CTX_##PUSHN##_##ELEM; \
+ /* \
+ * need type cast in above assignment because TYPE arg sometimes is const \
+ */ \
+ int n_elem = sk_##T##_num(ctx->FIELD); \
+ STACK_OF(TYPE) field_read; \
+ TYPE val1_to_free = NEW; \
+ TYPE val1 = val1_to_free; \
+ TYPE val1_read = 0; /* 0 works for any type */ \
+ TYPE val2_to_free = NEW; \
+ TYPE val2 = val2_to_free; \
+ TYPE val2_read = 0; \
+ int res = 1; \
+ \
+ if (!TEST_int_eq(ERR_peek_error(), 0)) \
+ res = 0; \
+ if ((*push_fn)(NULL, val1) || ERR_peek_error() == 0) { \
+ TEST_error("pusher did not return error on ctx == NULL"); \
+ res = 0; \
+ } \
+ ERR_clear_error(); \
+ \
+ if (n_elem < 0) /* can happen for NULL stack */ \
+ n_elem = 0; \
+ field_read = ctx->FIELD; \
+ if (!DEFAULT(field_read)) { \
+ TEST_error("did not get default value for stack field"); \
+ res = 0; \
+ } \
+ if (!(*push_fn)(ctx, val1)) { \
+ TEST_error("pushing first value failed"); \
+ res = 0; \
+ } \
+ if (PUSHN == 0) \
+ val1_to_free = 0; /* 0 works for any type */ \
+ \
+ if (sk_##T##_num(ctx->FIELD) != ++n_elem) { \
+ TEST_error("pushing first value did not increment number"); \
+ res = 0; \
+ } \
+ val1_read = sk_top_##FIELD(ctx); \
+ if (PUSHN == 0) { \
+ if (val1_read != val1) { \
+ TEST_error("push/sk_top first value did not match"); \
+ res = 0; \
+ } \
+ } else { \
+ if (DUP && val1_read == val1) { \
+ TEST_error("first push did not dup the value"); \
+ res = 0; \
+ } \
+ } \
+ \
+ if (!(*push_fn)(ctx, val2)) { \
+ TEST_error("pushting second value failed"); \
+ res = 0; \
+ } \
+ if (PUSHN == 0) \
+ val2_to_free = 0; \
+ \
+ if (sk_##T##_num(ctx->FIELD) != ++n_elem) { \
+ TEST_error("pushing second value did not increment number"); \
+ res = 0; \
+ } \
+ val2_read = sk_top_##FIELD(ctx); \
+ if (PUSHN == 0) { \
+ if (val2_read != val2) { \
+ TEST_error("push/sk_top second value did not match"); \
+ res = 0; \
+ } \
+ } else { \
+ if (DUP && val2_read == val2) { \
+ TEST_error("second push did not dup the value"); \
+ res = 0; \
+ } \
+ if (val2 == val1) { \
+ TEST_error("second value is same as first value"); \
+ res = 0; \
+ } \
+ } \
+ /* this does not check if all remaining fields and elems are untouched */ \
+ \
+ if (!TEST_int_eq(ERR_peek_error(), 0)) \
+ res = 0; \
+ \
+ FREE(val1_to_free); \
+ FREE(val2_to_free); \
+ return TEST_true(res); \
+} \
+\
+static int test_CTX_##PUSHN##_##ELEM(void) \
+{ \
+ SETUP_TEST_FIXTURE(OSSL_CMP_CTX_TEST_FIXTURE, set_up); \
+ EXECUTE_TEST(execute_CTX_##PUSHN##_##ELEM, tear_down); \
+ return result; \
+} \
+
+#define DEFINE_PUSH_TEST(N, DUP, FIELD, ELEM, TYPE) \
+ DEFINE_PUSH_BASE_TEST(push##N, DUP, FIELD, ELEM, TYPE *, TYPE, \
+ IS_0, TYPE##_new(), TYPE##_free)
+
+void cleanup_tests(void)
+{
+ return;
+}
+
+DEFINE_SET_GET_ARG_FN(set, get, option, 35, int) /* OPT_IGNORE_KEYUSAGE */
+DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, option_35, int, -1, IS_0, \
+ 1 /* true */, DROP)
+
+DEFINE_SET_CB_TEST(log_cb)
+
+DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, serverPath, char, IS_0)
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, server, char)
+DEFINE_SET_INT_TEST(serverPort)
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, proxy, char)
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, no_proxy, char)
+DEFINE_SET_CB_TEST(http_cb)
+DEFINE_SET_GET_P_VOID_TEST(http_cb_arg)
+DEFINE_SET_CB_TEST(transfer_cb)
+DEFINE_SET_GET_P_VOID_TEST(transfer_cb_arg)
+
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, srvCert, X509)
+DEFINE_SET_TEST(ossl_cmp, ctx, 0, 0, validatedSrvCert, X509)
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, expected_sender, X509_NAME)
+DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set0, get0, 0, trustedStore,
+ X509_STORE *, NULL,
+ DEFAULT_STORE, X509_STORE_new_1(), X509_STORE_free)
+DEFINE_SET_GET_SK_X509_TEST(OSSL_CMP, CTX, 1, 0, untrusted)
+
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, cert, X509)
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, pkey, EVP_PKEY)
+
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, recipient, X509_NAME)
+DEFINE_PUSH_TEST(0, 0, geninfo_ITAVs, geninfo_ITAV, OSSL_CMP_ITAV)
+DEFINE_SET_SK_TEST(OSSL_CMP, CTX, 1, extraCertsOut, X509)
+DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 1, EVP_PKEY *) /* priv == 1 */
+DEFINE_SET_GET_TEST(OSSL_CMP, CTX, 0, 0, 0, newPkey_1, EVP_PKEY)
+DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 0, EVP_PKEY *) /* priv == 0 */
+DEFINE_SET_GET_TEST(OSSL_CMP, CTX, 0, 0, 0, newPkey_0, EVP_PKEY)
+DEFINE_SET_GET1_STR_FN(set1, referenceValue)
+DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, 1, referenceValue_str, char,
+ IS_0)
+DEFINE_SET_GET1_STR_FN(set1, secretValue)
+DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, 1, secretValue_str, char, IS_0)
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, issuer, X509_NAME)
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, subjectName, X509_NAME)
+#ifdef ISSUE_9504_RESOLVED
+DEFINE_PUSH_TEST(1, 1, subjectAltNames, subjectAltName, GENERAL_NAME)
+#endif
+DEFINE_SET_SK_TEST(OSSL_CMP, CTX, 0, reqExtensions, X509_EXTENSION)
+DEFINE_PUSH_TEST(0, 0, policies, policy, POLICYINFO)
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, oldCert, X509)
+#ifdef ISSUE_9504_RESOLVED
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, p10CSR, X509_REQ)
+#endif
+DEFINE_PUSH_TEST(0, 0, genm_ITAVs, genm_ITAV, OSSL_CMP_ITAV)
+DEFINE_SET_CB_TEST(certConf_cb)
+DEFINE_SET_GET_P_VOID_TEST(certConf_cb_arg)
+
+DEFINE_SET_GET_INT_TEST(ossl_cmp, ctx, status)
+DEFINE_SET_GET_SK_TEST(ossl_cmp, ctx, 0, 0, statusString, ASN1_UTF8STRING)
+DEFINE_SET_GET_INT_TEST(ossl_cmp, ctx, failInfoCode)
+DEFINE_SET_GET_TEST(ossl_cmp, ctx, 0, 0, 0, newCert, X509)
+DEFINE_SET_GET_SK_X509_TEST(ossl_cmp, ctx, 1, 1, newChain)
+DEFINE_SET_GET_SK_X509_TEST(ossl_cmp, ctx, 1, 1, caPubs)
+DEFINE_SET_GET_SK_X509_TEST(ossl_cmp, ctx, 1, 1, extraCertsIn)
+
+DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, transactionID, ASN1_OCTET_STRING,
+ IS_0)
+DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, senderNonce, ASN1_OCTET_STRING)
+DEFINE_SET_TEST(ossl_cmp, ctx, 1, 1, recipNonce, ASN1_OCTET_STRING)
+
+int setup_tests(void)
+{
+ char *cert_file;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(cert_file = test_get_argument(0))
+ || !TEST_ptr(test_cert = load_cert_pem(cert_file, NULL)))
+ return 0;
+
+ /* OSSL_CMP_CTX_new() is tested by set_up() */
+ /* OSSL_CMP_CTX_free() is tested by tear_down() */
+ ADD_TEST(test_CTX_reinit);
+
+ /* various CMP options: */
+ ADD_TEST(test_CTX_set_get_option_35);
+ /* CMP-specific callback for logging and outputting the error queue: */
+ ADD_TEST(test_CTX_set_get_log_cb);
+ /*
+ * also tests OSSL_CMP_log_open(), OSSL_CMP_CTX_set_log_verbosity(),
+ * ossl_cmp_err(), ossl_cmp_warn(), * ossl_cmp_debug(),
+ * ossl_cmp_log2(), ossl_cmp_log_parse_metadata(), and OSSL_CMP_log_close()
+ * with OSSL_CMP_severity OSSL_CMP_LOG_ERR/WARNING/DEBUG/INFO:
+ */
+ ADD_TEST(test_cmp_ctx_log_cb);
+#if !defined(OPENSSL_NO_ERR) && !defined(OPENSSL_NO_AUTOERRINIT)
+ /*
+ * also tests OSSL_CMP_CTX_set_log_cb(), OSSL_CMP_print_errors_cb(),
+ * and the macros ossl_cmp_add_error_data and ossl_cmp_add_error_line:
+ */
+ ADD_TEST(test_CTX_print_errors);
+#endif
+ /* message transfer: */
+ ADD_TEST(test_CTX_set1_get0_serverPath);
+ ADD_TEST(test_CTX_set1_get0_server);
+ ADD_TEST(test_CTX_set_get_serverPort);
+ ADD_TEST(test_CTX_set1_get0_proxy);
+ ADD_TEST(test_CTX_set1_get0_no_proxy);
+ ADD_TEST(test_CTX_set_get_http_cb);
+ ADD_TEST(test_CTX_set_get_http_cb_arg);
+ ADD_TEST(test_CTX_set_get_transfer_cb);
+ ADD_TEST(test_CTX_set_get_transfer_cb_arg);
+ /* server authentication: */
+ ADD_TEST(test_CTX_set1_get0_srvCert);
+ ADD_TEST(test_CTX_set0_get0_validatedSrvCert);
+ ADD_TEST(test_CTX_set1_get0_expected_sender);
+ ADD_TEST(test_CTX_set0_get0_trustedStore);
+ ADD_TEST(test_CTX_set1_get0_untrusted);
+ /* client authentication: */
+ ADD_TEST(test_CTX_set1_get0_cert);
+ ADD_TEST(test_CTX_set1_get0_pkey);
+ /* the following two also test ossl_cmp_asn1_octet_string_set1_bytes(): */
+ ADD_TEST(test_CTX_set1_get1_referenceValue_str);
+ ADD_TEST(test_CTX_set1_get1_secretValue_str);
+ /* CMP message header and extra certificates: */
+ ADD_TEST(test_CTX_set1_get0_recipient);
+ ADD_TEST(test_CTX_push0_geninfo_ITAV);
+ ADD_TEST(test_CTX_set1_get0_extraCertsOut);
+ /* certificate template: */
+ ADD_TEST(test_CTX_set0_get0_newPkey_1);
+ ADD_TEST(test_CTX_set0_get0_newPkey_0);
+ ADD_TEST(test_CTX_set1_get0_issuer);
+ ADD_TEST(test_CTX_set1_get0_subjectName);
+#ifdef ISSUE_9504_RESOLVED
+ /*
+ * test currently fails, see https://github.com/openssl/openssl/issues/9504
+ */
+ ADD_TEST(test_CTX_push1_subjectAltName);
+#endif
+ ADD_TEST(test_CTX_set0_get0_reqExtensions);
+ ADD_TEST(test_CTX_reqExtensions_have_SAN);
+ ADD_TEST(test_CTX_push0_policy);
+ ADD_TEST(test_CTX_set1_get0_oldCert);
+#ifdef ISSUE_9504_RESOLVED
+ /*
+ * test currently fails, see https://github.com/openssl/openssl/issues/9504
+ */
+ ADD_TEST(test_CTX_set1_get0_p10CSR);
+#endif
+ /* misc body contents: */
+ ADD_TEST(test_CTX_push0_genm_ITAV);
+ /* certificate confirmation: */
+ ADD_TEST(test_CTX_set_get_certConf_cb);
+ ADD_TEST(test_CTX_set_get_certConf_cb_arg);
+ /* result fetching: */
+ ADD_TEST(test_CTX_set_get_status);
+ ADD_TEST(test_CTX_set0_get0_statusString);
+ ADD_TEST(test_CTX_set_get_failInfoCode);
+ ADD_TEST(test_CTX_set0_get0_newCert);
+ ADD_TEST(test_CTX_set1_get1_newChain);
+ ADD_TEST(test_CTX_set1_get1_caPubs);
+ ADD_TEST(test_CTX_set1_get1_extraCertsIn);
+ /* exported for testing and debugging purposes: */
+ /* the following three also test ossl_cmp_asn1_octet_string_set1(): */
+ ADD_TEST(test_CTX_set1_get0_transactionID);
+ ADD_TEST(test_CTX_set1_get0_senderNonce);
+ ADD_TEST(test_CTX_set1_get0_recipNonce);
+ return 1;
+}
diff --git a/test/cmp_hdr_test.c b/test/cmp_hdr_test.c
new file mode 100644
index 000000000000..ed49a0bb6199
--- /dev/null
+++ b/test/cmp_hdr_test.c
@@ -0,0 +1,494 @@
+/*
+ * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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 "helpers/cmp_testlib.h"
+
+static unsigned char rand_data[OSSL_CMP_TRANSACTIONID_LENGTH];
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ int expected;
+ OSSL_CMP_CTX *cmp_ctx;
+ OSSL_CMP_PKIHEADER *hdr;
+
+} CMP_HDR_TEST_FIXTURE;
+
+static void tear_down(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_PKIHEADER_free(fixture->hdr);
+ OSSL_CMP_CTX_free(fixture->cmp_ctx);
+ OPENSSL_free(fixture);
+}
+
+static CMP_HDR_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CMP_HDR_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ fixture->test_case_name = test_case_name;
+ if (!TEST_ptr(fixture->cmp_ctx = OSSL_CMP_CTX_new(NULL, NULL)))
+ goto err;
+ if (!TEST_ptr(fixture->hdr = OSSL_CMP_PKIHEADER_new()))
+ goto err;
+ return fixture;
+
+ err:
+ tear_down(fixture);
+ return NULL;
+}
+
+static int execute_HDR_set_get_pvno_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ int pvno = 77;
+
+ if (!TEST_int_eq(ossl_cmp_hdr_set_pvno(fixture->hdr, pvno), 1))
+ return 0;
+ if (!TEST_int_eq(ossl_cmp_hdr_get_pvno(fixture->hdr), pvno))
+ return 0;
+ return 1;
+}
+
+static int test_HDR_set_get_pvno(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_set_get_pvno_test, tear_down);
+ return result;
+}
+
+#define X509_NAME_ADD(n, rd, s) \
+ X509_NAME_add_entry_by_txt((n), (rd), MBSTRING_ASC, (unsigned char *)(s), \
+ -1, -1, 0)
+
+static int execute_HDR_get0_senderNonce_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ X509_NAME *sender = X509_NAME_new();
+ ASN1_OCTET_STRING *sn;
+
+ if (!TEST_ptr(sender))
+ return 0;
+
+ X509_NAME_ADD(sender, "CN", "A common sender name");
+ if (!TEST_int_eq(OSSL_CMP_CTX_set1_subjectName(fixture->cmp_ctx, sender),
+ 1))
+ return 0;
+ if (!TEST_int_eq(ossl_cmp_hdr_init(fixture->cmp_ctx, fixture->hdr),
+ 1))
+ return 0;
+ sn = ossl_cmp_hdr_get0_senderNonce(fixture->hdr);
+ if (!TEST_int_eq(ASN1_OCTET_STRING_cmp(fixture->cmp_ctx->senderNonce, sn),
+ 0))
+ return 0;
+ X509_NAME_free(sender);
+ return 1;
+}
+
+static int test_HDR_get0_senderNonce(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_get0_senderNonce_test, tear_down);
+ return result;
+}
+
+static int execute_HDR_set1_sender_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ X509_NAME *x509name = X509_NAME_new();
+
+ if (!TEST_ptr(x509name))
+ return 0;
+
+ X509_NAME_ADD(x509name, "CN", "A common sender name");
+ if (!TEST_int_eq(ossl_cmp_hdr_set1_sender(fixture->hdr, x509name), 1))
+ return 0;
+ if (!TEST_int_eq(fixture->hdr->sender->type, GEN_DIRNAME))
+ return 0;
+
+ if (!TEST_int_eq(X509_NAME_cmp(fixture->hdr->sender->d.directoryName,
+ x509name), 0))
+ return 0;
+
+ X509_NAME_free(x509name);
+ return 1;
+}
+
+static int test_HDR_set1_sender(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_set1_sender_test, tear_down);
+ return result;
+}
+
+static int execute_HDR_set1_recipient_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ X509_NAME *x509name = X509_NAME_new();
+
+ if (!TEST_ptr(x509name))
+ return 0;
+
+ X509_NAME_ADD(x509name, "CN", "A common recipient name");
+ if (!TEST_int_eq(ossl_cmp_hdr_set1_recipient(fixture->hdr, x509name), 1))
+ return 0;
+
+ if (!TEST_int_eq(fixture->hdr->recipient->type, GEN_DIRNAME))
+ return 0;
+
+ if (!TEST_int_eq(X509_NAME_cmp(fixture->hdr->recipient->d.directoryName,
+ x509name), 0))
+ return 0;
+
+ X509_NAME_free(x509name);
+ return 1;
+}
+
+static int test_HDR_set1_recipient(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_set1_recipient_test, tear_down);
+ return result;
+}
+
+static int execute_HDR_update_messageTime_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ struct tm hdrtm, tmptm;
+ time_t hdrtime, before, after, now;
+
+ now = time(NULL);
+ /*
+ * Trial and error reveals that passing the return value from gmtime
+ * directly to mktime in a mingw 32 bit build gives unexpected results. To
+ * work around this we take a copy of the return value first.
+ */
+ tmptm = *gmtime(&now);
+ before = mktime(&tmptm);
+
+ if (!TEST_true(ossl_cmp_hdr_update_messageTime(fixture->hdr)))
+ return 0;
+ if (!TEST_true(ASN1_TIME_to_tm(fixture->hdr->messageTime, &hdrtm)))
+ return 0;
+
+ hdrtime = mktime(&hdrtm);
+
+ if (!TEST_time_t_le(before, hdrtime))
+ return 0;
+ now = time(NULL);
+ tmptm = *gmtime(&now);
+ after = mktime(&tmptm);
+
+ return TEST_time_t_le(hdrtime, after);
+}
+
+static int test_HDR_update_messageTime(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_update_messageTime_test, tear_down);
+ return result;
+}
+
+static int execute_HDR_set1_senderKID_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ ASN1_OCTET_STRING *senderKID = ASN1_OCTET_STRING_new();
+ int res = 0;
+
+ if (!TEST_ptr(senderKID))
+ return 0;
+
+ if (!TEST_int_eq(ASN1_OCTET_STRING_set(senderKID, rand_data,
+ sizeof(rand_data)), 1))
+ goto err;
+ if (!TEST_int_eq(ossl_cmp_hdr_set1_senderKID(fixture->hdr, senderKID), 1))
+ goto err;
+ if (!TEST_int_eq(ASN1_OCTET_STRING_cmp(fixture->hdr->senderKID,
+ senderKID), 0))
+ goto err;
+ res = 1;
+ err:
+ ASN1_OCTET_STRING_free(senderKID);
+ return res;
+}
+
+static int test_HDR_set1_senderKID(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_set1_senderKID_test, tear_down);
+ return result;
+}
+
+static int execute_HDR_push0_freeText_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ ASN1_UTF8STRING *text = ASN1_UTF8STRING_new();
+
+ if (!TEST_ptr(text))
+ return 0;
+
+ if (!ASN1_STRING_set(text, "A free text", -1))
+ goto err;
+
+ if (!TEST_int_eq(ossl_cmp_hdr_push0_freeText(fixture->hdr, text), 1))
+ goto err;
+
+ if (!TEST_true(text == sk_ASN1_UTF8STRING_value(fixture->hdr->freeText, 0)))
+ goto err;
+
+ return 1;
+
+ err:
+ ASN1_UTF8STRING_free(text);
+ return 0;
+}
+
+static int test_HDR_push0_freeText(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_push0_freeText_test, tear_down);
+ return result;
+}
+
+static int execute_HDR_push1_freeText_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ ASN1_UTF8STRING *text = ASN1_UTF8STRING_new();
+ ASN1_UTF8STRING *pushed_text;
+ int res = 0;
+
+ if (!TEST_ptr(text))
+ return 0;
+
+ if (!ASN1_STRING_set(text, "A free text", -1))
+ goto err;
+
+ if (!TEST_int_eq(ossl_cmp_hdr_push1_freeText(fixture->hdr, text), 1))
+ goto err;
+
+ pushed_text = sk_ASN1_UTF8STRING_value(fixture->hdr->freeText, 0);
+ if (!TEST_int_eq(ASN1_STRING_cmp(text, pushed_text), 0))
+ goto err;
+
+ res = 1;
+ err:
+ ASN1_UTF8STRING_free(text);
+ return res;
+}
+
+static int test_HDR_push1_freeText(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_push1_freeText_test, tear_down);
+ return result;
+}
+
+static int
+execute_HDR_generalInfo_push0_item_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_ITAV *itav = OSSL_CMP_ITAV_new();
+
+ if (!TEST_ptr(itav))
+ return 0;
+
+ if (!TEST_int_eq(ossl_cmp_hdr_generalInfo_push0_item(fixture->hdr, itav),
+ 1))
+ return 0;
+
+ if (!TEST_true(itav == sk_OSSL_CMP_ITAV_value(fixture->hdr->generalInfo,
+ 0)))
+ return 0;
+
+ return 1;
+}
+
+static int test_HDR_generalInfo_push0_item(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_generalInfo_push0_item_test, tear_down);
+ return result;
+}
+
+static int
+execute_HDR_generalInfo_push1_items_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ const char oid[] = "1.2.3.4";
+ char buf[20];
+ OSSL_CMP_ITAV *itav, *pushed_itav;
+ STACK_OF(OSSL_CMP_ITAV) *itavs = NULL, *ginfo;
+ ASN1_INTEGER *asn1int = ASN1_INTEGER_new();
+ ASN1_TYPE *val = ASN1_TYPE_new();
+ ASN1_TYPE *pushed_val;
+ int res = 0;
+
+ if (!TEST_ptr(asn1int))
+ return 0;
+
+ if (!TEST_ptr(val)
+ || !TEST_true(ASN1_INTEGER_set(asn1int, 88))) {
+ ASN1_INTEGER_free(asn1int);
+ return 0;
+ }
+
+ ASN1_TYPE_set(val, V_ASN1_INTEGER, asn1int);
+ if (!TEST_ptr(itav = OSSL_CMP_ITAV_create(OBJ_txt2obj(oid, 1), val))) {
+ ASN1_TYPE_free(val);
+ return 0;
+ }
+ if (!TEST_true(OSSL_CMP_ITAV_push0_stack_item(&itavs, itav))) {
+ OSSL_CMP_ITAV_free(itav);
+ return 0;
+ }
+
+ if (!TEST_int_eq(ossl_cmp_hdr_generalInfo_push1_items(fixture->hdr, itavs),
+ 1))
+ goto err;
+ ginfo = fixture->hdr->generalInfo;
+ pushed_itav = sk_OSSL_CMP_ITAV_value(ginfo, 0);
+ OBJ_obj2txt(buf, sizeof(buf), OSSL_CMP_ITAV_get0_type(pushed_itav), 0);
+ if (!TEST_int_eq(memcmp(oid, buf, sizeof(oid)), 0))
+ goto err;
+
+ pushed_val = OSSL_CMP_ITAV_get0_value(sk_OSSL_CMP_ITAV_value(ginfo, 0));
+ if (!TEST_int_eq(ASN1_TYPE_cmp(itav->infoValue.other, pushed_val), 0))
+ goto err;
+
+ res = 1;
+
+ err:
+ sk_OSSL_CMP_ITAV_pop_free(itavs, OSSL_CMP_ITAV_free);
+ return res;
+}
+
+static int test_HDR_generalInfo_push1_items(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_HDR_generalInfo_push1_items_test, tear_down);
+ return result;
+}
+
+static int
+execute_HDR_set_and_check_implicitConfirm_test(CMP_HDR_TEST_FIXTURE
+ * fixture)
+{
+ return TEST_false(ossl_cmp_hdr_has_implicitConfirm(fixture->hdr))
+ && TEST_true(ossl_cmp_hdr_set_implicitConfirm(fixture->hdr))
+ && TEST_true(ossl_cmp_hdr_has_implicitConfirm(fixture->hdr));
+}
+
+static int test_HDR_set_and_check_implicit_confirm(void)
+{
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ EXECUTE_TEST(execute_HDR_set_and_check_implicitConfirm_test, tear_down);
+ return result;
+}
+
+
+static int execute_HDR_init_test(CMP_HDR_TEST_FIXTURE *fixture)
+{
+ ASN1_OCTET_STRING *header_nonce, *header_transactionID;
+ ASN1_OCTET_STRING *ctx_nonce;
+
+ if (!TEST_int_eq(fixture->expected,
+ ossl_cmp_hdr_init(fixture->cmp_ctx, fixture->hdr)))
+ return 0;
+ if (fixture->expected == 0)
+ return 1;
+
+ if (!TEST_int_eq(ossl_cmp_hdr_get_pvno(fixture->hdr), OSSL_CMP_PVNO))
+ return 0;
+
+ header_nonce = ossl_cmp_hdr_get0_senderNonce(fixture->hdr);
+ if (!TEST_int_eq(0, ASN1_OCTET_STRING_cmp(header_nonce,
+ fixture->cmp_ctx->senderNonce)))
+ return 0;
+ header_transactionID = OSSL_CMP_HDR_get0_transactionID(fixture->hdr);
+ if (!TEST_true(0 == ASN1_OCTET_STRING_cmp(header_transactionID,
+ fixture->cmp_ctx->transactionID)))
+ return 0;
+
+ header_nonce = OSSL_CMP_HDR_get0_recipNonce(fixture->hdr);
+ ctx_nonce = fixture->cmp_ctx->recipNonce;
+ if (ctx_nonce != NULL
+ && (!TEST_ptr(header_nonce)
+ || !TEST_int_eq(0, ASN1_OCTET_STRING_cmp(header_nonce,
+ ctx_nonce))))
+ return 0;
+
+ return 1;
+}
+
+static int test_HDR_init_with_ref(void)
+{
+ unsigned char ref[CMP_TEST_REFVALUE_LENGTH];
+
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+
+ fixture->expected = 1;
+ if (!TEST_int_eq(1, RAND_bytes(ref, sizeof(ref)))
+ || !TEST_true(OSSL_CMP_CTX_set1_referenceValue(fixture->cmp_ctx,
+ ref, sizeof(ref)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_HDR_init_test, tear_down);
+ return result;
+}
+
+static int test_HDR_init_with_subject(void)
+{
+ X509_NAME *subject = NULL;
+
+ SETUP_TEST_FIXTURE(CMP_HDR_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ if (!TEST_ptr(subject = X509_NAME_new())
+ || !TEST_true(X509_NAME_ADD(subject, "CN", "Common Name"))
+ || !TEST_true(OSSL_CMP_CTX_set1_subjectName(fixture->cmp_ctx,
+ subject))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ X509_NAME_free(subject);
+ EXECUTE_TEST(execute_HDR_init_test, tear_down);
+ return result;
+}
+
+
+void cleanup_tests(void)
+{
+ return;
+}
+
+int setup_tests(void)
+{
+ RAND_bytes(rand_data, OSSL_CMP_TRANSACTIONID_LENGTH);
+ /* Message header tests */
+ ADD_TEST(test_HDR_set_get_pvno);
+ ADD_TEST(test_HDR_get0_senderNonce);
+ ADD_TEST(test_HDR_set1_sender);
+ ADD_TEST(test_HDR_set1_recipient);
+ ADD_TEST(test_HDR_update_messageTime);
+ ADD_TEST(test_HDR_set1_senderKID);
+ ADD_TEST(test_HDR_push0_freeText);
+ /* indirectly tests ossl_cmp_pkifreetext_push_str(): */
+ ADD_TEST(test_HDR_push1_freeText);
+ ADD_TEST(test_HDR_generalInfo_push0_item);
+ ADD_TEST(test_HDR_generalInfo_push1_items);
+ ADD_TEST(test_HDR_set_and_check_implicit_confirm);
+ /* also tests public function OSSL_CMP_HDR_get0_transactionID(): */
+ /* also tests public function OSSL_CMP_HDR_get0_recipNonce(): */
+ /* also tests internal function ossl_cmp_hdr_get_pvno(): */
+ ADD_TEST(test_HDR_init_with_ref);
+ ADD_TEST(test_HDR_init_with_subject);
+ return 1;
+}
diff --git a/test/cmp_msg_test.c b/test/cmp_msg_test.c
new file mode 100644
index 000000000000..e0fb1c7906d0
--- /dev/null
+++ b/test/cmp_msg_test.c
@@ -0,0 +1,598 @@
+/*
+ * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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 "helpers/cmp_testlib.h"
+
+static const char *newkey_f;
+static const char *server_cert_f;
+static const char *pkcs10_f;
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ OSSL_CMP_CTX *cmp_ctx;
+ /* for msg create tests */
+ int bodytype;
+ int err_code;
+ /* for certConf */
+ int fail_info;
+ /* for protection tests */
+ OSSL_CMP_MSG *msg;
+ int expected;
+ /* for error and response messages */
+ OSSL_CMP_PKISI *si;
+} CMP_MSG_TEST_FIXTURE;
+
+static OSSL_LIB_CTX *libctx = NULL;
+static OSSL_PROVIDER *default_null_provider = NULL, *provider = NULL;
+
+static unsigned char ref[CMP_TEST_REFVALUE_LENGTH];
+
+static void tear_down(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX_free(fixture->cmp_ctx);
+ OSSL_CMP_MSG_free(fixture->msg);
+ OSSL_CMP_PKISI_free(fixture->si);
+ OPENSSL_free(fixture);
+}
+
+#define SET_OPT_UNPROTECTED_SEND(ctx, val) \
+ OSSL_CMP_CTX_set_option((ctx), OSSL_CMP_OPT_UNPROTECTED_SEND, (val))
+static CMP_MSG_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CMP_MSG_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ fixture->test_case_name = test_case_name;
+
+ if (!TEST_ptr(fixture->cmp_ctx = OSSL_CMP_CTX_new(libctx, NULL))
+ || !TEST_true(SET_OPT_UNPROTECTED_SEND(fixture->cmp_ctx, 1))
+ || !TEST_true(OSSL_CMP_CTX_set1_referenceValue(fixture->cmp_ctx,
+ ref, sizeof(ref)))) {
+ tear_down(fixture);
+ return NULL;
+ }
+ return fixture;
+}
+
+static EVP_PKEY *newkey = NULL;
+static X509 *cert = NULL;
+
+#define EXECUTE_MSG_CREATION_TEST(expr) \
+ do { \
+ OSSL_CMP_MSG *msg = NULL; \
+ int good = fixture->expected != 0 ? \
+ TEST_ptr(msg = (expr)) && TEST_true(valid_asn1_encoding(msg)) : \
+ TEST_ptr_null(msg = (expr)); \
+ \
+ OSSL_CMP_MSG_free(msg); \
+ ERR_print_errors_fp(stderr); \
+ return good; \
+ } while (0)
+
+/*-
+ * The following tests call a cmp message creation function.
+ * if fixture->expected != 0:
+ * returns 1 if the message is created and syntactically correct.
+ * if fixture->expected == 0
+ * returns 1 if message creation returns NULL
+ */
+static int execute_certreq_create_test(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ EXECUTE_MSG_CREATION_TEST(ossl_cmp_certreq_new(fixture->cmp_ctx,
+ fixture->bodytype,
+ NULL));
+}
+
+static int execute_errormsg_create_test(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ EXECUTE_MSG_CREATION_TEST(ossl_cmp_error_new(fixture->cmp_ctx, fixture->si,
+ fixture->err_code,
+ "details", 0));
+}
+
+static int execute_rr_create_test(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ EXECUTE_MSG_CREATION_TEST(ossl_cmp_rr_new(fixture->cmp_ctx));
+}
+
+static int execute_certconf_create_test(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ EXECUTE_MSG_CREATION_TEST(ossl_cmp_certConf_new
+ (fixture->cmp_ctx, OSSL_CMP_CERTREQID,
+ fixture->fail_info, NULL));
+}
+
+static int execute_genm_create_test(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ EXECUTE_MSG_CREATION_TEST(ossl_cmp_genm_new(fixture->cmp_ctx));
+}
+
+static int execute_pollreq_create_test(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ EXECUTE_MSG_CREATION_TEST(ossl_cmp_pollReq_new(fixture->cmp_ctx, 4711));
+}
+
+static int execute_pkimessage_create_test(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ EXECUTE_MSG_CREATION_TEST(ossl_cmp_msg_create
+ (fixture->cmp_ctx, fixture->bodytype));
+}
+
+static int set1_newPkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey)
+{
+ if (!EVP_PKEY_up_ref(pkey))
+ return 0;
+
+ if (!OSSL_CMP_CTX_set0_newPkey(ctx, 1, pkey)) {
+ EVP_PKEY_free(pkey);
+ return 0;
+ }
+ return 1;
+}
+
+static int test_cmp_create_ir_protection_set(void)
+{
+ OSSL_CMP_CTX *ctx;
+ unsigned char secret[16];
+
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+
+ ctx = fixture->cmp_ctx;
+ fixture->bodytype = OSSL_CMP_PKIBODY_IR;
+ fixture->err_code = -1;
+ fixture->expected = 1;
+ if (!TEST_int_eq(1, RAND_bytes_ex(libctx, secret, sizeof(secret), 0))
+ || !TEST_true(SET_OPT_UNPROTECTED_SEND(ctx, 0))
+ || !TEST_true(set1_newPkey(ctx, newkey))
+ || !TEST_true(OSSL_CMP_CTX_set1_secretValue(ctx, secret,
+ sizeof(secret)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_ir_protection_fails(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->bodytype = OSSL_CMP_PKIBODY_IR;
+ fixture->err_code = -1;
+ fixture->expected = 0;
+ if (!TEST_true(OSSL_CMP_CTX_set1_pkey(fixture->cmp_ctx, newkey))
+ || !TEST_true(SET_OPT_UNPROTECTED_SEND(fixture->cmp_ctx, 0))
+ /* newkey used by default for signing does not match cert: */
+ || !TEST_true(OSSL_CMP_CTX_set1_cert(fixture->cmp_ctx, cert))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_cr_without_key(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->bodytype = OSSL_CMP_PKIBODY_CR;
+ fixture->err_code = -1;
+ fixture->expected = 0;
+ EXECUTE_TEST(execute_certreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_cr(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->bodytype = OSSL_CMP_PKIBODY_CR;
+ fixture->err_code = -1;
+ fixture->expected = 1;
+ if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_certreq_with_invalid_bodytype(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->bodytype = OSSL_CMP_PKIBODY_RR;
+ fixture->err_code = -1;
+ fixture->expected = 0;
+ if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_p10cr(void)
+{
+ OSSL_CMP_CTX *ctx;
+ X509_REQ *p10cr = NULL;
+
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ ctx = fixture->cmp_ctx;
+ fixture->bodytype = OSSL_CMP_PKIBODY_P10CR;
+ fixture->err_code = CMP_R_ERROR_CREATING_CERTREQ;
+ fixture->expected = 1;
+ if (!TEST_ptr(p10cr = load_csr_der(pkcs10_f, libctx))
+ || !TEST_true(set1_newPkey(ctx, newkey))
+ || !TEST_true(OSSL_CMP_CTX_set1_p10CSR(ctx, p10cr))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ X509_REQ_free(p10cr);
+ EXECUTE_TEST(execute_certreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_p10cr_null(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->bodytype = OSSL_CMP_PKIBODY_P10CR;
+ fixture->err_code = CMP_R_ERROR_CREATING_CERTREQ;
+ fixture->expected = 0;
+ if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_kur(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->bodytype = OSSL_CMP_PKIBODY_KUR;
+ fixture->err_code = -1;
+ fixture->expected = 1;
+ if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))
+ || !TEST_true(OSSL_CMP_CTX_set1_oldCert(fixture->cmp_ctx, cert))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_kur_without_oldcert(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->bodytype = OSSL_CMP_PKIBODY_KUR;
+ fixture->err_code = -1;
+ fixture->expected = 0;
+ if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_certconf(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->fail_info = 0;
+ fixture->expected = 1;
+ if (!TEST_true(ossl_cmp_ctx_set0_newCert(fixture->cmp_ctx,
+ X509_dup(cert)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certconf_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_certconf_badAlg(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->fail_info = 1 << OSSL_CMP_PKIFAILUREINFO_badAlg;
+ fixture->expected = 1;
+ if (!TEST_true(ossl_cmp_ctx_set0_newCert(fixture->cmp_ctx,
+ X509_dup(cert)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certconf_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_certconf_fail_info_max(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->fail_info = 1 << OSSL_CMP_PKIFAILUREINFO_MAX;
+ fixture->expected = 1;
+ if (!TEST_true(ossl_cmp_ctx_set0_newCert(fixture->cmp_ctx,
+ X509_dup(cert)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_certconf_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_error_msg(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->si = OSSL_CMP_STATUSINFO_new(OSSL_CMP_PKISTATUS_rejection,
+ OSSL_CMP_PKIFAILUREINFO_systemFailure,
+ NULL);
+ fixture->err_code = -1;
+ fixture->expected = 1; /* expected: message creation is successful */
+ if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_errormsg_create_test, tear_down);
+ return result;
+}
+
+
+static int test_cmp_create_pollreq(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_pollreq_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_rr(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ if (!TEST_true(OSSL_CMP_CTX_set1_oldCert(fixture->cmp_ctx, cert))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_rr_create_test, tear_down);
+ return result;
+}
+
+static int test_cmp_create_genm(void)
+{
+ OSSL_CMP_ITAV *iv = NULL;
+
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ iv = OSSL_CMP_ITAV_create(OBJ_nid2obj(NID_id_it_implicitConfirm), NULL);
+ if (!TEST_ptr(iv)
+ || !TEST_true(OSSL_CMP_CTX_push0_genm_ITAV(fixture->cmp_ctx, iv))) {
+ OSSL_CMP_ITAV_free(iv);
+ tear_down(fixture);
+ fixture = NULL;
+ }
+
+ EXECUTE_TEST(execute_genm_create_test, tear_down);
+ return result;
+}
+
+static int execute_certrep_create(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_CTX *ctx = fixture->cmp_ctx;
+ OSSL_CMP_CERTREPMESSAGE *crepmsg = OSSL_CMP_CERTREPMESSAGE_new();
+ OSSL_CMP_CERTRESPONSE *read_cresp, *cresp = OSSL_CMP_CERTRESPONSE_new();
+ X509 *certfromresp = NULL;
+ int res = 0;
+
+ if (crepmsg == NULL || cresp == NULL)
+ goto err;
+ if (!ASN1_INTEGER_set(cresp->certReqId, 99))
+ goto err;
+ if ((cresp->certifiedKeyPair = OSSL_CMP_CERTIFIEDKEYPAIR_new()) == NULL)
+ goto err;
+ cresp->certifiedKeyPair->certOrEncCert->type =
+ OSSL_CMP_CERTORENCCERT_CERTIFICATE;
+ if ((cresp->certifiedKeyPair->certOrEncCert->value.certificate =
+ X509_dup(cert)) == NULL
+ || !sk_OSSL_CMP_CERTRESPONSE_push(crepmsg->response, cresp))
+ goto err;
+ cresp = NULL;
+ read_cresp = ossl_cmp_certrepmessage_get0_certresponse(crepmsg, 99);
+ if (!TEST_ptr(read_cresp))
+ goto err;
+ if (!TEST_ptr_null(ossl_cmp_certrepmessage_get0_certresponse(crepmsg, 88)))
+ goto err;
+ certfromresp = ossl_cmp_certresponse_get1_cert(ctx, read_cresp);
+ if (certfromresp == NULL || !TEST_int_eq(X509_cmp(cert, certfromresp), 0))
+ goto err;
+
+ res = 1;
+ err:
+ X509_free(certfromresp);
+ OSSL_CMP_CERTRESPONSE_free(cresp);
+ OSSL_CMP_CERTREPMESSAGE_free(crepmsg);
+ return res;
+}
+
+static int test_cmp_create_certrep(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ EXECUTE_TEST(execute_certrep_create, tear_down);
+ return result;
+}
+
+
+static int execute_rp_create(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_PKISI *si = OSSL_CMP_STATUSINFO_new(33, 44, "a text");
+ X509_NAME *issuer = X509_NAME_new();
+ ASN1_INTEGER *serial = ASN1_INTEGER_new();
+ OSSL_CRMF_CERTID *cid = NULL;
+ OSSL_CMP_MSG *rpmsg = NULL;
+ int res = 0;
+
+ if (si == NULL || issuer == NULL || serial == NULL)
+ goto err;
+
+ if (!X509_NAME_add_entry_by_txt(issuer, "CN", MBSTRING_ASC,
+ (unsigned char *)"The Issuer", -1, -1, 0)
+ || !ASN1_INTEGER_set(serial, 99)
+ || (cid = OSSL_CRMF_CERTID_gen(issuer, serial)) == NULL
+ || (rpmsg = ossl_cmp_rp_new(fixture->cmp_ctx, si, cid, 1)) == NULL)
+ goto err;
+
+ if (!TEST_ptr(ossl_cmp_revrepcontent_get_CertId(rpmsg->body->value.rp, 0)))
+ goto err;
+
+ if (!TEST_ptr(ossl_cmp_revrepcontent_get_pkisi(rpmsg->body->value.rp, 0)))
+ goto err;
+
+ res = 1;
+ err:
+ ASN1_INTEGER_free(serial);
+ X509_NAME_free(issuer);
+ OSSL_CRMF_CERTID_free(cid);
+ OSSL_CMP_PKISI_free(si);
+ OSSL_CMP_MSG_free(rpmsg);
+ return res;
+}
+
+static int test_cmp_create_rp(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ EXECUTE_TEST(execute_rp_create, tear_down);
+ return result;
+}
+
+static int execute_pollrep_create(CMP_MSG_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_MSG *pollrep;
+ int res = 0;
+
+ pollrep = ossl_cmp_pollRep_new(fixture->cmp_ctx, 77, 2000);
+ if (!TEST_ptr(pollrep))
+ return 0;
+ if (!TEST_ptr(ossl_cmp_pollrepcontent_get0_pollrep(pollrep->body->
+ value.pollRep, 77)))
+ goto err;
+ if (!TEST_ptr_null(ossl_cmp_pollrepcontent_get0_pollrep(pollrep->body->
+ value.pollRep, 88)))
+ goto err;
+
+ res = 1;
+ err:
+ OSSL_CMP_MSG_free(pollrep);
+ return res;
+}
+
+static int test_cmp_create_pollrep(void)
+{
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+ EXECUTE_TEST(execute_pollrep_create, tear_down);
+ return result;
+}
+
+static int test_cmp_pkimessage_create(int bodytype)
+{
+ X509_REQ *p10cr = NULL;
+
+ SETUP_TEST_FIXTURE(CMP_MSG_TEST_FIXTURE, set_up);
+
+ switch (fixture->bodytype = bodytype) {
+ case OSSL_CMP_PKIBODY_P10CR:
+ fixture->expected = 1;
+ p10cr = load_csr_der(pkcs10_f, libctx);
+ if (!TEST_true(OSSL_CMP_CTX_set1_p10CSR(fixture->cmp_ctx, p10cr))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ X509_REQ_free(p10cr);
+ break;
+ case OSSL_CMP_PKIBODY_IR:
+ case OSSL_CMP_PKIBODY_IP:
+ case OSSL_CMP_PKIBODY_CR:
+ case OSSL_CMP_PKIBODY_CP:
+ case OSSL_CMP_PKIBODY_KUR:
+ case OSSL_CMP_PKIBODY_KUP:
+ case OSSL_CMP_PKIBODY_RR:
+ case OSSL_CMP_PKIBODY_RP:
+ case OSSL_CMP_PKIBODY_PKICONF:
+ case OSSL_CMP_PKIBODY_GENM:
+ case OSSL_CMP_PKIBODY_GENP:
+ case OSSL_CMP_PKIBODY_ERROR:
+ case OSSL_CMP_PKIBODY_CERTCONF:
+ case OSSL_CMP_PKIBODY_POLLREQ:
+ case OSSL_CMP_PKIBODY_POLLREP:
+ fixture->expected = 1;
+ break;
+ default:
+ fixture->expected = 0;
+ break;
+ }
+
+ EXECUTE_TEST(execute_pkimessage_create_test, tear_down);
+ return result;
+}
+
+void cleanup_tests(void)
+{
+ EVP_PKEY_free(newkey);
+ X509_free(cert);
+ OSSL_PROVIDER_unload(default_null_provider);
+ OSSL_PROVIDER_unload(provider);
+ OSSL_LIB_CTX_free(libctx);
+}
+
+#define USAGE "new.key server.crt pkcs10.der module_name [module_conf_file]\n"
+OPT_TEST_DECLARE_USAGE(USAGE)
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(newkey_f = test_get_argument(0))
+ || !TEST_ptr(server_cert_f = test_get_argument(1))
+ || !TEST_ptr(pkcs10_f = test_get_argument(2))) {
+ TEST_error("usage: cmp_msg_test %s", USAGE);
+ return 0;
+ }
+
+ if (!test_arg_libctx(&libctx, &default_null_provider, &provider, 3, USAGE))
+ return 0;
+
+ if (!TEST_ptr(newkey = load_pkey_pem(newkey_f, libctx))
+ || !TEST_ptr(cert = load_cert_pem(server_cert_f, libctx))
+ || !TEST_int_eq(1, RAND_bytes_ex(libctx, ref, sizeof(ref), 0))) {
+ cleanup_tests();
+ return 0;
+ }
+
+ /* Message creation tests */
+ ADD_TEST(test_cmp_create_certreq_with_invalid_bodytype);
+ ADD_TEST(test_cmp_create_ir_protection_fails);
+ ADD_TEST(test_cmp_create_ir_protection_set);
+ ADD_TEST(test_cmp_create_error_msg);
+ ADD_TEST(test_cmp_create_certconf);
+ ADD_TEST(test_cmp_create_certconf_badAlg);
+ ADD_TEST(test_cmp_create_certconf_fail_info_max);
+ ADD_TEST(test_cmp_create_kur);
+ ADD_TEST(test_cmp_create_kur_without_oldcert);
+ ADD_TEST(test_cmp_create_cr);
+ ADD_TEST(test_cmp_create_cr_without_key);
+ ADD_TEST(test_cmp_create_p10cr);
+ ADD_TEST(test_cmp_create_p10cr_null);
+ ADD_TEST(test_cmp_create_pollreq);
+ ADD_TEST(test_cmp_create_rr);
+ ADD_TEST(test_cmp_create_rp);
+ ADD_TEST(test_cmp_create_genm);
+ ADD_TEST(test_cmp_create_certrep);
+ ADD_TEST(test_cmp_create_pollrep);
+ ADD_ALL_TESTS_NOSUBTEST(test_cmp_pkimessage_create,
+ OSSL_CMP_PKIBODY_POLLREP + 1);
+ return 1;
+}
diff --git a/test/cmp_protect_test.c b/test/cmp_protect_test.c
new file mode 100644
index 000000000000..09bf2ec17faf
--- /dev/null
+++ b/test/cmp_protect_test.c
@@ -0,0 +1,621 @@
+/*
+ * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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 "helpers/cmp_testlib.h"
+
+static const char *ir_protected_f;
+static const char *ir_unprotected_f;
+static const char *ip_PBM_f;
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ OSSL_CMP_CTX *cmp_ctx;
+ /* for protection tests */
+ OSSL_CMP_MSG *msg;
+ OSSL_CMP_PKISI *si; /* for error and response messages */
+ EVP_PKEY *pubkey;
+ unsigned char *mem;
+ int memlen;
+ X509 *cert;
+ STACK_OF(X509) *certs;
+ STACK_OF(X509) *chain;
+ int with_ss;
+ int callback_arg;
+ int expected;
+} CMP_PROTECT_TEST_FIXTURE;
+
+static OSSL_LIB_CTX *libctx = NULL;
+static OSSL_PROVIDER *default_null_provider = NULL, *provider = NULL;
+
+static void tear_down(CMP_PROTECT_TEST_FIXTURE *fixture)
+{
+ if (fixture != NULL) {
+ OSSL_CMP_CTX_free(fixture->cmp_ctx);
+ OSSL_CMP_MSG_free(fixture->msg);
+ OSSL_CMP_PKISI_free(fixture->si);
+
+ OPENSSL_free(fixture->mem);
+ sk_X509_free(fixture->certs);
+ sk_X509_free(fixture->chain);
+
+ OPENSSL_free(fixture);
+ }
+}
+
+static CMP_PROTECT_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CMP_PROTECT_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ fixture->test_case_name = test_case_name;
+ if (!TEST_ptr(fixture->cmp_ctx = OSSL_CMP_CTX_new(libctx, NULL))) {
+ tear_down(fixture);
+ return NULL;
+ }
+ return fixture;
+}
+
+static EVP_PKEY *loadedprivkey = NULL;
+static EVP_PKEY *loadedpubkey = NULL;
+static EVP_PKEY *loadedkey = NULL;
+static X509 *cert = NULL;
+static unsigned char rand_data[OSSL_CMP_TRANSACTIONID_LENGTH];
+static OSSL_CMP_MSG *ir_unprotected, *ir_protected;
+static X509 *endentity1 = NULL, *endentity2 = NULL,
+ *root = NULL, *intermediate = NULL;
+
+static int execute_calc_protection_fails_test(CMP_PROTECT_TEST_FIXTURE *fixture)
+{
+ ASN1_BIT_STRING *protection =
+ ossl_cmp_calc_protection(fixture->cmp_ctx, fixture->msg);
+ int res = TEST_ptr_null(protection);
+
+ ASN1_BIT_STRING_free(protection);
+ return res;
+}
+
+static int execute_calc_protection_pbmac_test(CMP_PROTECT_TEST_FIXTURE *fixture)
+{
+ ASN1_BIT_STRING *protection =
+ ossl_cmp_calc_protection(fixture->cmp_ctx, fixture->msg);
+ int res = TEST_ptr(protection)
+ && TEST_true(ASN1_STRING_cmp(protection,
+ fixture->msg->protection) == 0);
+
+ ASN1_BIT_STRING_free(protection);
+ return res;
+}
+
+/*
+ * This function works similarly to parts of CMP_verify_signature in cmp_vfy.c,
+ * but without the need for a OSSL_CMP_CTX or a X509 certificate
+ */
+static int verify_signature(OSSL_CMP_MSG *msg,
+ ASN1_BIT_STRING *protection,
+ EVP_PKEY *pkey, EVP_MD *digest)
+{
+ OSSL_CMP_PROTECTEDPART prot_part;
+ unsigned char *prot_part_der = NULL;
+ int len;
+ EVP_MD_CTX *ctx = NULL;
+ int res;
+
+ prot_part.header = OSSL_CMP_MSG_get0_header(msg);
+ prot_part.body = msg->body;
+ len = i2d_OSSL_CMP_PROTECTEDPART(&prot_part, &prot_part_der);
+ res =
+ TEST_int_ge(len, 0)
+ && TEST_ptr(ctx = EVP_MD_CTX_new())
+ && TEST_true(EVP_DigestVerifyInit(ctx, NULL, digest, NULL, pkey))
+ && TEST_int_eq(EVP_DigestVerify(ctx, protection->data,
+ protection->length,
+ prot_part_der, len), 1);
+ /* cleanup */
+ EVP_MD_CTX_free(ctx);
+ OPENSSL_free(prot_part_der);
+ return res;
+}
+
+/* Calls OSSL_CMP_calc_protection and compares and verifies signature */
+static int execute_calc_protection_signature_test(CMP_PROTECT_TEST_FIXTURE *
+ fixture)
+{
+ ASN1_BIT_STRING *protection =
+ ossl_cmp_calc_protection(fixture->cmp_ctx, fixture->msg);
+ int ret = (TEST_ptr(protection)
+ && TEST_true(ASN1_STRING_cmp(protection,
+ fixture->msg->protection) == 0)
+ && TEST_true(verify_signature(fixture->msg, protection,
+ fixture->pubkey,
+ fixture->cmp_ctx->digest)));
+
+ ASN1_BIT_STRING_free(protection);
+ return ret;
+}
+
+static int test_cmp_calc_protection_no_key_no_secret(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ if (!TEST_ptr(fixture->msg = load_pkimsg(ir_unprotected_f, libctx))
+ || !TEST_ptr(fixture->msg->header->protectionAlg =
+ X509_ALGOR_new() /* no specific alg needed here */)) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+
+ EXECUTE_TEST(execute_calc_protection_fails_test, tear_down);
+ return result;
+}
+
+static int test_cmp_calc_protection_pkey(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->pubkey = loadedpubkey;
+ if (!TEST_true(OSSL_CMP_CTX_set1_pkey(fixture->cmp_ctx, loadedprivkey))
+ || !TEST_ptr(fixture->msg = load_pkimsg(ir_protected_f, libctx))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_calc_protection_signature_test, tear_down);
+ return result;
+}
+
+static int test_cmp_calc_protection_pbmac(void)
+{
+ unsigned char sec_insta[] = { 'i', 'n', 's', 't', 'a' };
+
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ if (!TEST_true(OSSL_CMP_CTX_set1_secretValue(fixture->cmp_ctx,
+ sec_insta, sizeof(sec_insta)))
+ || !TEST_ptr(fixture->msg = load_pkimsg(ip_PBM_f, libctx))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_calc_protection_pbmac_test, tear_down);
+ return result;
+}
+static int execute_MSG_protect_test(CMP_PROTECT_TEST_FIXTURE *fixture)
+{
+ return TEST_int_eq(fixture->expected,
+ ossl_cmp_msg_protect(fixture->cmp_ctx, fixture->msg));
+}
+
+#define SET_OPT_UNPROTECTED_SEND(ctx, val) \
+ OSSL_CMP_CTX_set_option((ctx), OSSL_CMP_OPT_UNPROTECTED_SEND, (val))
+static int test_MSG_protect_unprotected_request(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+
+ fixture->expected = 1;
+ if (!TEST_ptr(fixture->msg = OSSL_CMP_MSG_dup(ir_unprotected))
+ || !TEST_true(SET_OPT_UNPROTECTED_SEND(fixture->cmp_ctx, 1))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_MSG_protect_test, tear_down);
+ return result;
+}
+
+static int test_MSG_protect_with_msg_sig_alg_protection_plus_rsa_key(void)
+{
+ const size_t size = sizeof(rand_data) / 2;
+
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+
+ if (!TEST_ptr(fixture->msg = OSSL_CMP_MSG_dup(ir_unprotected))
+ || !TEST_true(SET_OPT_UNPROTECTED_SEND(fixture->cmp_ctx, 0))
+ /*
+ * Use half of the 16 bytes of random input
+ * for each reference and secret value
+ */
+ || !TEST_true(OSSL_CMP_CTX_set1_referenceValue(fixture->cmp_ctx,
+ rand_data, size))
+ || !TEST_true(OSSL_CMP_CTX_set1_secretValue(fixture->cmp_ctx,
+ rand_data + size,
+ size))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_MSG_protect_test, tear_down);
+ return result;
+}
+
+static int test_MSG_protect_with_certificate_and_key(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+
+ if (!TEST_ptr(fixture->msg =
+ OSSL_CMP_MSG_dup(ir_unprotected))
+ || !TEST_true(SET_OPT_UNPROTECTED_SEND(fixture->cmp_ctx, 0))
+ || !TEST_true(OSSL_CMP_CTX_set1_pkey(fixture->cmp_ctx, loadedkey))
+ || !TEST_true(OSSL_CMP_CTX_set1_cert(fixture->cmp_ctx, cert))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_MSG_protect_test, tear_down);
+ return result;
+}
+
+static int test_MSG_protect_certificate_based_without_cert(void)
+{
+ OSSL_CMP_CTX *ctx;
+
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ ctx = fixture->cmp_ctx;
+ fixture->expected = 0;
+ if (!TEST_ptr(fixture->msg =
+ OSSL_CMP_MSG_dup(ir_unprotected))
+ || !TEST_true(SET_OPT_UNPROTECTED_SEND(ctx, 0))
+ || !TEST_true(OSSL_CMP_CTX_set0_newPkey(ctx, 1, loadedkey))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EVP_PKEY_up_ref(loadedkey);
+ EXECUTE_TEST(execute_MSG_protect_test, tear_down);
+ return result;
+}
+
+static int test_MSG_protect_no_key_no_secret(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->expected = 0;
+ if (!TEST_ptr(fixture->msg = OSSL_CMP_MSG_dup(ir_unprotected))
+ || !TEST_true(SET_OPT_UNPROTECTED_SEND(fixture->cmp_ctx, 0))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_MSG_protect_test, tear_down);
+ return result;
+}
+
+static int test_MSG_protect_pbmac_no_sender(int with_ref)
+{
+ static unsigned char secret[] = { 47, 11, 8, 15 };
+ static unsigned char ref[] = { 0xca, 0xfe, 0xba, 0xbe };
+
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->expected = with_ref;
+ if (!TEST_ptr(fixture->msg = OSSL_CMP_MSG_dup(ir_unprotected))
+ || !SET_OPT_UNPROTECTED_SEND(fixture->cmp_ctx, 0)
+ || !ossl_cmp_hdr_set1_sender(fixture->msg->header, NULL)
+ || !OSSL_CMP_CTX_set1_secretValue(fixture->cmp_ctx,
+ secret, sizeof(secret))
+ || (!OSSL_CMP_CTX_set1_referenceValue(fixture->cmp_ctx,
+ with_ref ? ref : NULL,
+ sizeof(ref)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_MSG_protect_test, tear_down);
+ return result;
+}
+
+static int test_MSG_protect_pbmac_no_sender_with_ref(void)
+{
+ return test_MSG_protect_pbmac_no_sender(1);
+}
+
+static int test_MSG_protect_pbmac_no_sender_no_ref(void)
+{
+ return test_MSG_protect_pbmac_no_sender(0);
+}
+
+static int execute_MSG_add_extraCerts_test(CMP_PROTECT_TEST_FIXTURE *fixture)
+{
+ return TEST_true(ossl_cmp_msg_add_extraCerts(fixture->cmp_ctx,
+ fixture->msg));
+}
+
+static int test_MSG_add_extraCerts(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ if (!TEST_ptr(fixture->msg = OSSL_CMP_MSG_dup(ir_protected))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_MSG_add_extraCerts_test, tear_down);
+ return result;
+}
+
+#ifndef OPENSSL_NO_EC
+/* The cert chain tests use EC certs so we skip them in no-ec builds */
+static int execute_cmp_build_cert_chain_test(CMP_PROTECT_TEST_FIXTURE *fixture)
+{
+ int ret = 0;
+ OSSL_CMP_CTX *ctx = fixture->cmp_ctx;
+ X509_STORE *store;
+ STACK_OF(X509) *chain =
+ X509_build_chain(fixture->cert, fixture->certs, NULL,
+ fixture->with_ss, ctx->libctx, ctx->propq);
+
+ if (TEST_ptr(chain)) {
+ /* Check whether chain built is equal to the expected one */
+ ret = TEST_int_eq(0, STACK_OF_X509_cmp(chain, fixture->chain));
+ sk_X509_pop_free(chain, X509_free);
+ }
+ if (!ret)
+ return 0;
+
+ if (TEST_ptr(store = X509_STORE_new())
+ && TEST_true(X509_STORE_add_cert(store, root))) {
+ X509_VERIFY_PARAM_set_flags(X509_STORE_get0_param(store),
+ X509_V_FLAG_NO_CHECK_TIME);
+ chain = X509_build_chain(fixture->cert, fixture->certs, store,
+ fixture->with_ss, ctx->libctx, ctx->propq);
+ ret = TEST_int_eq(fixture->expected, chain != NULL);
+ if (ret && chain != NULL) {
+ /* Check whether chain built is equal to the expected one */
+ ret = TEST_int_eq(0, STACK_OF_X509_cmp(chain, fixture->chain));
+ sk_X509_pop_free(chain, X509_free);
+ }
+ }
+ X509_STORE_free(store);
+ return ret;
+}
+
+static int test_cmp_build_cert_chain(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ fixture->with_ss = 0;
+ fixture->cert = endentity2;
+ if (!TEST_ptr(fixture->certs = sk_X509_new_null())
+ || !TEST_ptr(fixture->chain = sk_X509_new_null())
+ || !TEST_true(sk_X509_push(fixture->certs, endentity1))
+ || !TEST_true(sk_X509_push(fixture->certs, root))
+ || !TEST_true(sk_X509_push(fixture->certs, intermediate))
+ || !TEST_true(sk_X509_push(fixture->chain, endentity2))
+ || !TEST_true(sk_X509_push(fixture->chain, intermediate))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ if (fixture != NULL) {
+ result = execute_cmp_build_cert_chain_test(fixture);
+ fixture->with_ss = 1;
+ if (result && TEST_true(sk_X509_push(fixture->chain, root)))
+ result = execute_cmp_build_cert_chain_test(fixture);
+ }
+ tear_down(fixture);
+ return result;
+}
+
+static int test_cmp_build_cert_chain_missing_intermediate(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->expected = 0;
+ fixture->with_ss = 0;
+ fixture->cert = endentity2;
+ if (!TEST_ptr(fixture->certs = sk_X509_new_null())
+ || !TEST_ptr(fixture->chain = sk_X509_new_null())
+ || !TEST_true(sk_X509_push(fixture->certs, endentity1))
+ || !TEST_true(sk_X509_push(fixture->certs, root))
+ || !TEST_true(sk_X509_push(fixture->chain, endentity2))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_cmp_build_cert_chain_test, tear_down);
+ return result;
+}
+
+static int test_cmp_build_cert_chain_no_root(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ fixture->with_ss = 0;
+ fixture->cert = endentity2;
+ if (!TEST_ptr(fixture->certs = sk_X509_new_null())
+ || !TEST_ptr(fixture->chain = sk_X509_new_null())
+ || !TEST_true(sk_X509_push(fixture->certs, endentity1))
+ || !TEST_true(sk_X509_push(fixture->certs, intermediate))
+ || !TEST_true(sk_X509_push(fixture->chain, endentity2))
+ || !TEST_true(sk_X509_push(fixture->chain, intermediate))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_cmp_build_cert_chain_test, tear_down);
+ return result;
+}
+
+static int test_cmp_build_cert_chain_only_root(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ fixture->with_ss = 0; /* still chain must include the only cert (root) */
+ fixture->cert = root;
+ if (!TEST_ptr(fixture->certs = sk_X509_new_null())
+ || !TEST_ptr(fixture->chain = sk_X509_new_null())
+ || !TEST_true(sk_X509_push(fixture->certs, root))
+ || !TEST_true(sk_X509_push(fixture->chain, root))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_cmp_build_cert_chain_test, tear_down);
+ return result;
+}
+
+static int test_cmp_build_cert_chain_no_certs(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->expected = 0;
+ fixture->with_ss = 0;
+ fixture->cert = endentity2;
+ if (!TEST_ptr(fixture->certs = sk_X509_new_null())
+ || !TEST_ptr(fixture->chain = sk_X509_new_null())
+ || !TEST_true(sk_X509_push(fixture->chain, endentity2))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_cmp_build_cert_chain_test, tear_down);
+ return result;
+}
+#endif /* OPENSSL_NO_EC */
+
+static int execute_X509_STORE_test(CMP_PROTECT_TEST_FIXTURE *fixture)
+{
+ X509_STORE *store = X509_STORE_new();
+ STACK_OF(X509) *sk = NULL;
+ int res = 0;
+
+ if (!TEST_true(ossl_cmp_X509_STORE_add1_certs(store,
+ fixture->certs,
+ fixture->callback_arg)))
+ goto err;
+ sk = X509_STORE_get1_all_certs(store);
+ if (!TEST_int_eq(0, STACK_OF_X509_cmp(sk, fixture->chain)))
+ goto err;
+ res = 1;
+ err:
+ X509_STORE_free(store);
+ sk_X509_pop_free(sk, X509_free);
+ return res;
+
+}
+
+static int test_X509_STORE(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->callback_arg = 0; /* self-issued allowed */
+ if (!TEST_ptr(fixture->certs = sk_X509_new_null())
+ || !sk_X509_push(fixture->certs, endentity1)
+ || !sk_X509_push(fixture->certs, endentity2)
+ || !sk_X509_push(fixture->certs, root)
+ || !sk_X509_push(fixture->certs, intermediate)
+ || !TEST_ptr(fixture->chain = sk_X509_dup(fixture->certs))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_X509_STORE_test, tear_down);
+ return result;
+}
+
+static int test_X509_STORE_only_self_issued(void)
+{
+ SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up);
+ fixture->certs = sk_X509_new_null();
+ fixture->chain = sk_X509_new_null();
+ fixture->callback_arg = 1; /* only self-issued */
+ if (!TEST_true(sk_X509_push(fixture->certs, endentity1))
+ || !TEST_true(sk_X509_push(fixture->certs, endentity2))
+ || !TEST_true(sk_X509_push(fixture->certs, root))
+ || !TEST_true(sk_X509_push(fixture->certs, intermediate))
+ || !TEST_true(sk_X509_push(fixture->chain, root))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_X509_STORE_test, tear_down);
+ return result;
+}
+
+
+void cleanup_tests(void)
+{
+ EVP_PKEY_free(loadedprivkey);
+ EVP_PKEY_free(loadedpubkey);
+ EVP_PKEY_free(loadedkey);
+ X509_free(cert);
+ X509_free(endentity1);
+ X509_free(endentity2);
+ X509_free(root);
+ X509_free(intermediate);
+ OSSL_CMP_MSG_free(ir_protected);
+ OSSL_CMP_MSG_free(ir_unprotected);
+ OSSL_PROVIDER_unload(default_null_provider);
+ OSSL_PROVIDER_unload(provider);
+ OSSL_LIB_CTX_free(libctx);
+}
+
+#define USAGE "server.pem IR_protected.der IR_unprotected.der IP_PBM.der " \
+ "server.crt server.pem EndEntity1.crt EndEntity2.crt Root_CA.crt " \
+ "Intermediate_CA.crt module_name [module_conf_file]\n"
+OPT_TEST_DECLARE_USAGE(USAGE)
+
+int setup_tests(void)
+{
+ char *server_f;
+ char *server_key_f;
+ char *server_cert_f;
+ char *endentity1_f;
+ char *endentity2_f;
+ char *root_f;
+ char *intermediate_f;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ RAND_bytes(rand_data, OSSL_CMP_TRANSACTIONID_LENGTH);
+ if (!TEST_ptr(server_f = test_get_argument(0))
+ || !TEST_ptr(ir_protected_f = test_get_argument(1))
+ || !TEST_ptr(ir_unprotected_f = test_get_argument(2))
+ || !TEST_ptr(ip_PBM_f = test_get_argument(3))
+ || !TEST_ptr(server_cert_f = test_get_argument(4))
+ || !TEST_ptr(server_key_f = test_get_argument(5))
+ || !TEST_ptr(endentity1_f = test_get_argument(6))
+ || !TEST_ptr(endentity2_f = test_get_argument(7))
+ || !TEST_ptr(root_f = test_get_argument(8))
+ || !TEST_ptr(intermediate_f = test_get_argument(9))) {
+ TEST_error("usage: cmp_protect_test %s", USAGE);
+ return 0;
+ }
+
+ if (!test_arg_libctx(&libctx, &default_null_provider, &provider, 10, USAGE))
+ return 0;
+
+ if (!TEST_ptr(loadedkey = load_pkey_pem(server_key_f, libctx))
+ || !TEST_ptr(cert = load_cert_pem(server_cert_f, libctx)))
+ return 0;
+
+ if (!TEST_ptr(loadedprivkey = load_pkey_pem(server_f, libctx)))
+ return 0;
+ if (TEST_true(EVP_PKEY_up_ref(loadedprivkey)))
+ loadedpubkey = loadedprivkey;
+ if (!TEST_ptr(ir_protected = load_pkimsg(ir_protected_f, libctx))
+ || !TEST_ptr(ir_unprotected = load_pkimsg(ir_unprotected_f, libctx)))
+ return 0;
+ if (!TEST_ptr(endentity1 = load_cert_pem(endentity1_f, libctx))
+ || !TEST_ptr(endentity2 = load_cert_pem(endentity2_f, libctx))
+ || !TEST_ptr(root = load_cert_pem(root_f, libctx))
+ || !TEST_ptr(intermediate = load_cert_pem(intermediate_f, libctx)))
+ return 0;
+ if (!TEST_int_eq(1, RAND_bytes(rand_data, OSSL_CMP_TRANSACTIONID_LENGTH)))
+ return 0;
+
+ /* Message protection tests */
+ ADD_TEST(test_cmp_calc_protection_no_key_no_secret);
+ ADD_TEST(test_cmp_calc_protection_pkey);
+ ADD_TEST(test_cmp_calc_protection_pbmac);
+
+ ADD_TEST(test_MSG_protect_with_msg_sig_alg_protection_plus_rsa_key);
+ ADD_TEST(test_MSG_protect_with_certificate_and_key);
+ ADD_TEST(test_MSG_protect_certificate_based_without_cert);
+ ADD_TEST(test_MSG_protect_unprotected_request);
+ ADD_TEST(test_MSG_protect_no_key_no_secret);
+ ADD_TEST(test_MSG_protect_pbmac_no_sender_with_ref);
+ ADD_TEST(test_MSG_protect_pbmac_no_sender_no_ref);
+ ADD_TEST(test_MSG_add_extraCerts);
+
+#ifndef OPENSSL_NO_EC
+ ADD_TEST(test_cmp_build_cert_chain);
+ ADD_TEST(test_cmp_build_cert_chain_only_root);
+ ADD_TEST(test_cmp_build_cert_chain_no_root);
+ ADD_TEST(test_cmp_build_cert_chain_missing_intermediate);
+ ADD_TEST(test_cmp_build_cert_chain_no_certs);
+#endif
+
+ ADD_TEST(test_X509_STORE);
+ ADD_TEST(test_X509_STORE_only_self_issued);
+
+ return 1;
+}
diff --git a/test/cmp_server_test.c b/test/cmp_server_test.c
new file mode 100644
index 000000000000..e270bb924bad
--- /dev/null
+++ b/test/cmp_server_test.c
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2020
+ * Copyright Siemens AG 2015-2020
+ *
+ * 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 "helpers/cmp_testlib.h"
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ int expected;
+ OSSL_CMP_SRV_CTX *srv_ctx;
+ OSSL_CMP_MSG *req;
+} CMP_SRV_TEST_FIXTURE;
+
+static OSSL_LIB_CTX *libctx = NULL;
+static OSSL_PROVIDER *default_null_provider = NULL, *provider = NULL;
+static OSSL_CMP_MSG *request = NULL;
+
+static void tear_down(CMP_SRV_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_SRV_CTX_free(fixture->srv_ctx);
+ OPENSSL_free(fixture);
+}
+
+static CMP_SRV_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CMP_SRV_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ fixture->test_case_name = test_case_name;
+ if (!TEST_ptr(fixture->srv_ctx = OSSL_CMP_SRV_CTX_new(libctx, NULL)))
+ goto err;
+ return fixture;
+
+ err:
+ tear_down(fixture);
+ return NULL;
+}
+
+static int dummy_errorCode = CMP_R_MULTIPLE_SAN_SOURCES; /* any reason code */
+
+static OSSL_CMP_PKISI *process_cert_request(OSSL_CMP_SRV_CTX *srv_ctx,
+ const OSSL_CMP_MSG *cert_req,
+ int certReqId,
+ const OSSL_CRMF_MSG *crm,
+ const X509_REQ *p10cr,
+ X509 **certOut,
+ STACK_OF(X509) **chainOut,
+ STACK_OF(X509) **caPubs)
+{
+ ERR_raise(ERR_LIB_CMP, dummy_errorCode);
+ return NULL;
+}
+
+static int execute_test_handle_request(CMP_SRV_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_SRV_CTX *ctx = fixture->srv_ctx;
+ OSSL_CMP_CTX *client_ctx;
+ OSSL_CMP_CTX *cmp_ctx;
+ char *dummy_custom_ctx = "@test_dummy", *custom_ctx;
+ OSSL_CMP_MSG *rsp = NULL;
+ OSSL_CMP_ERRORMSGCONTENT *errorContent;
+ int res = 0;
+
+ if (!TEST_ptr(client_ctx = OSSL_CMP_CTX_new(libctx, NULL))
+ || !TEST_true(OSSL_CMP_CTX_set_transfer_cb_arg(client_ctx, ctx)))
+ goto end;
+
+ if (!TEST_true(OSSL_CMP_SRV_CTX_init(ctx, dummy_custom_ctx,
+ process_cert_request, NULL, NULL,
+ NULL, NULL, NULL))
+ || !TEST_ptr(custom_ctx = OSSL_CMP_SRV_CTX_get0_custom_ctx(ctx))
+ || !TEST_int_eq(strcmp(custom_ctx, dummy_custom_ctx), 0))
+ goto end;
+
+ if (!TEST_true(OSSL_CMP_SRV_CTX_set_send_unprotected_errors(ctx, 0))
+ || !TEST_true(OSSL_CMP_SRV_CTX_set_accept_unprotected(ctx, 0))
+ || !TEST_true(OSSL_CMP_SRV_CTX_set_accept_raverified(ctx, 1))
+ || !TEST_true(OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(ctx, 1)))
+ goto end;
+
+ if (!TEST_ptr(cmp_ctx = OSSL_CMP_SRV_CTX_get0_cmp_ctx(ctx))
+ || !OSSL_CMP_CTX_set1_referenceValue(cmp_ctx,
+ (unsigned char *)"server", 6)
+ || !OSSL_CMP_CTX_set1_secretValue(cmp_ctx,
+ (unsigned char *)"1234", 4))
+ goto end;
+
+ if (!TEST_ptr(rsp = OSSL_CMP_CTX_server_perform(client_ctx, fixture->req))
+ || !TEST_int_eq(OSSL_CMP_MSG_get_bodytype(rsp),
+ OSSL_CMP_PKIBODY_ERROR)
+ || !TEST_ptr(errorContent = rsp->body->value.error)
+ || !TEST_int_eq(ASN1_INTEGER_get(errorContent->errorCode),
+ ERR_PACK(ERR_LIB_CMP, 0, dummy_errorCode)))
+ goto end;
+
+ res = 1;
+
+ end:
+ OSSL_CMP_MSG_free(rsp);
+ OSSL_CMP_CTX_free(client_ctx);
+ return res;
+}
+
+static int test_handle_request(void)
+{
+ SETUP_TEST_FIXTURE(CMP_SRV_TEST_FIXTURE, set_up);
+ fixture->req = request;
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_test_handle_request, tear_down);
+ return result;
+}
+
+void cleanup_tests(void)
+{
+ OSSL_CMP_MSG_free(request);
+ OSSL_PROVIDER_unload(default_null_provider);
+ OSSL_PROVIDER_unload(provider);
+ OSSL_LIB_CTX_free(libctx);
+ return;
+}
+
+#define USAGE \
+ "CR_protected_PBM_1234.der module_name [module_conf_file]\n"
+OPT_TEST_DECLARE_USAGE(USAGE)
+
+int setup_tests(void)
+{
+ const char *request_f;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(request_f = test_get_argument(0))) {
+ TEST_error("usage: cmp_server_test %s", USAGE);
+ return 0;
+ }
+
+ if (!test_arg_libctx(&libctx, &default_null_provider, &provider, 1, USAGE))
+ return 0;
+
+ if (!TEST_ptr(request = load_pkimsg(request_f, libctx))) {
+ cleanup_tests();
+ return 0;
+ }
+
+ /*
+ * this (indirectly) calls
+ * OSSL_CMP_SRV_CTX_new(),
+ * OSSL_CMP_SRV_CTX_free(),
+ * OSSL_CMP_CTX_server_perform(),
+ * OSSL_CMP_SRV_process_request(),
+ * OSSL_CMP_SRV_CTX_init(),
+ * OSSL_CMP_SRV_CTX_get0_cmp_ctx(),
+ * OSSL_CMP_SRV_CTX_get0_custom_ctx(),
+ * OSSL_CMP_SRV_CTX_set_send_unprotected_errors(),
+ * OSSL_CMP_SRV_CTX_set_accept_unprotected(),
+ * OSSL_CMP_SRV_CTX_set_accept_raverified(), and
+ * OSSL_CMP_SRV_CTX_set_grant_implicit_confirm()
+ */
+ ADD_TEST(test_handle_request);
+ return 1;
+}
diff --git a/test/cmp_status_test.c b/test/cmp_status_test.c
new file mode 100644
index 000000000000..96f9336b8496
--- /dev/null
+++ b/test/cmp_status_test.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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 "helpers/cmp_testlib.h"
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ int pkistatus;
+ const char *str; /* Not freed by tear_down */
+ const char *text; /* Not freed by tear_down */
+ int pkifailure;
+} CMP_STATUS_TEST_FIXTURE;
+
+static CMP_STATUS_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CMP_STATUS_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ fixture->test_case_name = test_case_name;
+ return fixture;
+}
+
+static void tear_down(CMP_STATUS_TEST_FIXTURE *fixture)
+{
+ OPENSSL_free(fixture);
+}
+
+
+/*
+ * Tests PKIStatusInfo creation and get-functions
+ */
+static int execute_PKISI_test(CMP_STATUS_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_PKISI *si = NULL;
+ int status;
+ ASN1_UTF8STRING *statusString = NULL;
+ int res = 0, i;
+
+ if (!TEST_ptr(si = OSSL_CMP_STATUSINFO_new(fixture->pkistatus,
+ fixture->pkifailure,
+ fixture->text)))
+ goto end;
+
+ status = ossl_cmp_pkisi_get_status(si);
+ if (!TEST_int_eq(fixture->pkistatus, status)
+ || !TEST_str_eq(fixture->str, ossl_cmp_PKIStatus_to_string(status)))
+ goto end;
+
+ if (!TEST_ptr(statusString =
+ sk_ASN1_UTF8STRING_value(ossl_cmp_pkisi_get0_statusString(si),
+ 0))
+ || !TEST_mem_eq(fixture->text, strlen(fixture->text),
+ (char *)statusString->data, statusString->length))
+ goto end;
+
+ if (!TEST_int_eq(fixture->pkifailure,
+ ossl_cmp_pkisi_get_pkifailureinfo(si)))
+ goto end;
+ for (i = 0; i <= OSSL_CMP_PKIFAILUREINFO_MAX; i++)
+ if (!TEST_int_eq((fixture->pkifailure >> i) & 1,
+ ossl_cmp_pkisi_check_pkifailureinfo(si, i)))
+ goto end;
+
+ res = 1;
+
+ end:
+ OSSL_CMP_PKISI_free(si);
+ return res;
+}
+
+static int test_PKISI(void)
+{
+ SETUP_TEST_FIXTURE(CMP_STATUS_TEST_FIXTURE, set_up);
+ fixture->pkistatus = OSSL_CMP_PKISTATUS_revocationNotification;
+ fixture->str = "PKIStatus: revocation notification - a revocation of the cert has occurred";
+ fixture->text = "this is an additional text describing the failure";
+ fixture->pkifailure = OSSL_CMP_CTX_FAILINFO_unsupportedVersion |
+ OSSL_CMP_CTX_FAILINFO_badDataFormat;
+ EXECUTE_TEST(execute_PKISI_test, tear_down);
+ return result;
+}
+
+
+
+void cleanup_tests(void)
+{
+ return;
+}
+
+int setup_tests(void)
+{
+ /*-
+ * this tests all of:
+ * OSSL_CMP_STATUSINFO_new()
+ * ossl_cmp_pkisi_get_status()
+ * ossl_cmp_PKIStatus_to_string()
+ * ossl_cmp_pkisi_get0_statusString()
+ * ossl_cmp_pkisi_get_pkifailureinfo()
+ * ossl_cmp_pkisi_check_pkifailureinfo()
+ */
+ ADD_TEST(test_PKISI);
+ return 1;
+}
diff --git a/test/cmp_vfy_test.c b/test/cmp_vfy_test.c
new file mode 100644
index 000000000000..b82ae142c24d
--- /dev/null
+++ b/test/cmp_vfy_test.c
@@ -0,0 +1,706 @@
+/*
+ * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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 "helpers/cmp_testlib.h"
+#include "../crypto/crmf/crmf_local.h" /* for manipulating POPO signature */
+
+static const char *server_f;
+static const char *client_f;
+static const char *endentity1_f;
+static const char *endentity2_f;
+static const char *root_f;
+static const char *intermediate_f;
+static const char *ir_protected_f;
+static const char *ir_unprotected_f;
+static const char *ir_rmprotection_f;
+static const char *ip_waiting_f;
+static const char *instacert_f;
+static const char *instaca_f;
+static const char *ir_protected_0_extracerts;
+static const char *ir_protected_2_extracerts;
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ int expected;
+ OSSL_CMP_CTX *cmp_ctx;
+ OSSL_CMP_MSG *msg;
+ X509 *cert;
+ ossl_cmp_allow_unprotected_cb_t allow_unprotected_cb;
+ int additional_arg;
+} CMP_VFY_TEST_FIXTURE;
+
+static OSSL_LIB_CTX *libctx = NULL;
+static OSSL_PROVIDER *default_null_provider = NULL, *provider = NULL;
+
+static void tear_down(CMP_VFY_TEST_FIXTURE *fixture)
+{
+ OSSL_CMP_MSG_free(fixture->msg);
+ OSSL_CMP_CTX_free(fixture->cmp_ctx);
+ OPENSSL_free(fixture);
+}
+
+static time_t test_time_valid = 0, test_time_after_expiration = 0;
+
+static CMP_VFY_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ X509_STORE *ts;
+ CMP_VFY_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+
+ ts = X509_STORE_new();
+ fixture->test_case_name = test_case_name;
+ if (ts == NULL
+ || !TEST_ptr(fixture->cmp_ctx = OSSL_CMP_CTX_new(libctx, NULL))
+ || !OSSL_CMP_CTX_set0_trustedStore(fixture->cmp_ctx, ts)
+ || !OSSL_CMP_CTX_set_log_cb(fixture->cmp_ctx, print_to_bio_out)) {
+ tear_down(fixture);
+ X509_STORE_free(ts);
+ return NULL;
+ }
+ X509_VERIFY_PARAM_set_time(X509_STORE_get0_param(ts), test_time_valid);
+ X509_STORE_set_verify_cb(ts, X509_STORE_CTX_print_verify_cb);
+ return fixture;
+}
+
+static X509 *srvcert = NULL;
+static X509 *clcert = NULL;
+/* chain */
+static X509 *endentity1 = NULL, *endentity2 = NULL,
+ *intermediate = NULL, *root = NULL;
+/* INSTA chain */
+static X509 *insta_cert = NULL, *instaca_cert = NULL;
+
+static unsigned char rand_data[OSSL_CMP_TRANSACTIONID_LENGTH];
+static OSSL_CMP_MSG *ir_unprotected, *ir_rmprotection;
+
+/* secret value used for IP_waitingStatus_PBM.der */
+static const unsigned char sec_1[] = {
+ '9', 'p', 'p', '8', '-', 'b', '3', '5', 'i', '-', 'X', 'd', '3',
+ 'Q', '-', 'u', 'd', 'N', 'R'
+};
+
+static int flip_bit(ASN1_BIT_STRING *bitstr)
+{
+ int bit_num = 7;
+ int bit = ASN1_BIT_STRING_get_bit(bitstr, bit_num);
+
+ return ASN1_BIT_STRING_set_bit(bitstr, bit_num, !bit);
+}
+
+static int execute_verify_popo_test(CMP_VFY_TEST_FIXTURE *fixture)
+{
+ if ((fixture->msg = load_pkimsg(ir_protected_f, libctx)) == NULL)
+ return 0;
+ if (fixture->expected == 0) {
+ const OSSL_CRMF_MSGS *reqs = fixture->msg->body->value.ir;
+ const OSSL_CRMF_MSG *req = sk_OSSL_CRMF_MSG_value(reqs, 0);
+ if (req == NULL || !flip_bit(req->popo->value.signature->signature))
+ return 0;
+ }
+ return TEST_int_eq(fixture->expected,
+ ossl_cmp_verify_popo(fixture->cmp_ctx, fixture->msg,
+ fixture->additional_arg));
+}
+
+static int test_verify_popo(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_verify_popo_test, tear_down);
+ return result;
+}
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+static int test_verify_popo_bad(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->expected = 0;
+ EXECUTE_TEST(execute_verify_popo_test, tear_down);
+ return result;
+}
+#endif
+
+static int execute_validate_msg_test(CMP_VFY_TEST_FIXTURE *fixture)
+{
+ return TEST_int_eq(fixture->expected,
+ ossl_cmp_msg_check_update(fixture->cmp_ctx, fixture->msg,
+ NULL, 0));
+}
+
+static int execute_validate_cert_path_test(CMP_VFY_TEST_FIXTURE *fixture)
+{
+ X509_STORE *ts = OSSL_CMP_CTX_get0_trustedStore(fixture->cmp_ctx);
+ int res = TEST_int_eq(fixture->expected,
+ OSSL_CMP_validate_cert_path(fixture->cmp_ctx,
+ ts, fixture->cert));
+
+ OSSL_CMP_CTX_print_errors(fixture->cmp_ctx);
+ return res;
+}
+
+static int test_validate_msg_mac_alg_protection(int miss, int wrong)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+
+ fixture->expected = !miss && !wrong;
+ if (!TEST_true(miss ? OSSL_CMP_CTX_set0_trustedStore(fixture->cmp_ctx, NULL)
+ : OSSL_CMP_CTX_set1_secretValue(fixture->cmp_ctx, sec_1,
+ wrong ? 4 : sizeof(sec_1)))
+ || !TEST_ptr(fixture->msg = load_pkimsg(ip_waiting_f, libctx))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+
+static int test_validate_msg_mac_alg_protection_ok(void)
+{
+ return test_validate_msg_mac_alg_protection(0, 0);
+}
+
+static int test_validate_msg_mac_alg_protection_missing(void)
+{
+ return test_validate_msg_mac_alg_protection(1, 0);
+}
+
+static int test_validate_msg_mac_alg_protection_wrong(void)
+{
+ return test_validate_msg_mac_alg_protection(0, 1);
+}
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+static int test_validate_msg_mac_alg_protection_bad(void)
+{
+ const unsigned char sec_bad[] = {
+ '9', 'p', 'p', '8', '-', 'b', '3', '5', 'i', '-', 'X', 'd', '3',
+ 'Q', '-', 'u', 'd', 'N', 'r'
+ };
+
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->expected = 0;
+
+ if (!TEST_true(OSSL_CMP_CTX_set1_secretValue(fixture->cmp_ctx, sec_bad,
+ sizeof(sec_bad)))
+ || !TEST_ptr(fixture->msg = load_pkimsg(ip_waiting_f, libctx))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+#endif
+
+static int add_trusted(OSSL_CMP_CTX *ctx, X509 *cert)
+{
+ return X509_STORE_add_cert(OSSL_CMP_CTX_get0_trustedStore(ctx), cert);
+}
+
+static int add_untrusted(OSSL_CMP_CTX *ctx, X509 *cert)
+{
+ return X509_add_cert(OSSL_CMP_CTX_get0_untrusted(ctx), cert,
+ X509_ADD_FLAG_UP_REF);
+}
+
+static int test_validate_msg_signature_partial_chain(int expired)
+{
+ X509_STORE *ts;
+
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+
+ ts = OSSL_CMP_CTX_get0_trustedStore(fixture->cmp_ctx);
+ fixture->expected = !expired;
+ if (ts == NULL
+ || !TEST_ptr(fixture->msg = load_pkimsg(ir_protected_f, libctx))
+ || !add_trusted(fixture->cmp_ctx, srvcert)) {
+ tear_down(fixture);
+ fixture = NULL;
+ } else {
+ X509_VERIFY_PARAM *vpm = X509_STORE_get0_param(ts);
+ X509_VERIFY_PARAM_set_flags(vpm, X509_V_FLAG_PARTIAL_CHAIN);
+ if (expired)
+ X509_VERIFY_PARAM_set_time(vpm, test_time_after_expiration);
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+
+static int test_validate_msg_signature_trusted_ok(void)
+{
+ return test_validate_msg_signature_partial_chain(0);
+}
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+static int test_validate_msg_signature_trusted_expired(void)
+{
+ return test_validate_msg_signature_partial_chain(1);
+}
+#endif
+
+static int test_validate_msg_signature_srvcert(int bad_sig, int miss, int wrong)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->cert = srvcert;
+ fixture->expected = !bad_sig && !wrong && !miss;
+ if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_f, libctx))
+ || !TEST_true(miss ? OSSL_CMP_CTX_set1_secretValue(fixture->cmp_ctx,
+ sec_1, sizeof(sec_1))
+ : OSSL_CMP_CTX_set1_srvCert(fixture->cmp_ctx,
+ wrong? clcert : srvcert))
+ || (bad_sig && !flip_bit(fixture->msg->protection))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+
+static int test_validate_msg_signature_srvcert_missing(void)
+{
+ return test_validate_msg_signature_srvcert(0, 1, 0);
+}
+
+static int test_validate_msg_signature_srvcert_wrong(void)
+{
+ return test_validate_msg_signature_srvcert(0, 0, 1);
+}
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+static int test_validate_msg_signature_bad(void)
+{
+ return test_validate_msg_signature_srvcert(1, 0, 0);
+}
+#endif
+
+static int test_validate_msg_signature_sender_cert_srvcert(void)
+{
+ return test_validate_msg_signature_srvcert(0, 0, 0);
+}
+
+static int test_validate_msg_signature_sender_cert_untrusted(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_0_extracerts, libctx))
+ || !add_trusted(fixture->cmp_ctx, instaca_cert)
+ || !add_untrusted(fixture->cmp_ctx, insta_cert)) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+
+static int test_validate_msg_signature_sender_cert_trusted(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_0_extracerts, libctx))
+ || !add_trusted(fixture->cmp_ctx, instaca_cert)
+ || !add_trusted(fixture->cmp_ctx, insta_cert)) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+
+static int test_validate_msg_signature_sender_cert_extracert(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_2_extracerts, libctx))
+ || !add_trusted(fixture->cmp_ctx, instaca_cert)) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+static int test_validate_msg_signature_sender_cert_absent(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->expected = 0;
+ if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_0_extracerts, libctx))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+#endif
+
+static int test_validate_with_sender(const X509_NAME *name, int expected)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->expected = expected;
+ if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_f, libctx))
+ || !TEST_true(OSSL_CMP_CTX_set1_expected_sender(fixture->cmp_ctx, name))
+ || !TEST_true(OSSL_CMP_CTX_set1_srvCert(fixture->cmp_ctx, srvcert))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+
+static int test_validate_msg_signature_expected_sender(void)
+{
+ return test_validate_with_sender(X509_get_subject_name(srvcert), 1);
+}
+
+static int test_validate_msg_signature_unexpected_sender(void)
+{
+ return test_validate_with_sender(X509_get_subject_name(root), 0);
+}
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+static int test_validate_msg_unprotected_request(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ fixture->expected = 0;
+ if (!TEST_ptr(fixture->msg = load_pkimsg(ir_unprotected_f, libctx))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_validate_msg_test, tear_down);
+ return result;
+}
+#endif
+
+static void setup_path(CMP_VFY_TEST_FIXTURE **fixture, X509 *wrong, int expired)
+{
+ (*fixture)->cert = endentity2;
+ (*fixture)->expected = wrong == NULL && !expired;
+ if (expired) {
+ X509_STORE *ts = OSSL_CMP_CTX_get0_trustedStore((*fixture)->cmp_ctx);
+ X509_VERIFY_PARAM *vpm = X509_STORE_get0_param(ts);
+ X509_VERIFY_PARAM_set_time(vpm, test_time_after_expiration);
+ }
+ if (!add_trusted((*fixture)->cmp_ctx, wrong == NULL ? root : wrong)
+ || !add_untrusted((*fixture)->cmp_ctx, endentity1)
+ || !add_untrusted((*fixture)->cmp_ctx, intermediate)) {
+ tear_down((*fixture));
+ (*fixture) = NULL;
+ }
+}
+
+static int test_validate_cert_path_ok(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_path(&fixture, NULL, 0);
+ EXECUTE_TEST(execute_validate_cert_path_test, tear_down);
+ return result;
+}
+
+static int test_validate_cert_path_wrong_anchor(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_path(&fixture, srvcert /* wrong/non-root cert */, 0);
+ EXECUTE_TEST(execute_validate_cert_path_test, tear_down);
+ return result;
+}
+
+static int test_validate_cert_path_expired(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_path(&fixture, NULL, 1);
+ EXECUTE_TEST(execute_validate_cert_path_test, tear_down);
+ return result;
+}
+
+static int execute_msg_check_test(CMP_VFY_TEST_FIXTURE *fixture)
+{
+ const OSSL_CMP_PKIHEADER *hdr = OSSL_CMP_MSG_get0_header(fixture->msg);
+ const ASN1_OCTET_STRING *tid = OSSL_CMP_HDR_get0_transactionID(hdr);
+
+ if (!TEST_int_eq(fixture->expected,
+ ossl_cmp_msg_check_update(fixture->cmp_ctx,
+ fixture->msg,
+ fixture->allow_unprotected_cb,
+ fixture->additional_arg)))
+ return 0;
+
+ if (fixture->expected == 0) /* error expected aready during above check */
+ return 1;
+ return
+ TEST_int_eq(0,
+ ASN1_OCTET_STRING_cmp(ossl_cmp_hdr_get0_senderNonce(hdr),
+ fixture->cmp_ctx->recipNonce))
+ && TEST_int_eq(0,
+ ASN1_OCTET_STRING_cmp(tid,
+ fixture->cmp_ctx->transactionID));
+}
+
+static int allow_unprotected(const OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg,
+ int invalid_protection, int allow)
+{
+ return allow;
+}
+
+static void setup_check_update(CMP_VFY_TEST_FIXTURE **fixture, int expected,
+ ossl_cmp_allow_unprotected_cb_t cb, int arg,
+ const unsigned char *trid_data,
+ const unsigned char *nonce_data)
+{
+ OSSL_CMP_CTX *ctx = (*fixture)->cmp_ctx;
+ int nonce_len = OSSL_CMP_SENDERNONCE_LENGTH;
+
+ (*fixture)->expected = expected;
+ (*fixture)->allow_unprotected_cb = cb;
+ (*fixture)->additional_arg = arg;
+ (*fixture)->msg = OSSL_CMP_MSG_dup(ir_rmprotection);
+ if ((*fixture)->msg == NULL
+ || (nonce_data != NULL
+ && !ossl_cmp_asn1_octet_string_set1_bytes(&ctx->senderNonce,
+ nonce_data, nonce_len))) {
+ tear_down((*fixture));
+ (*fixture) = NULL;
+ } else if (trid_data != NULL) {
+ ASN1_OCTET_STRING *trid = ASN1_OCTET_STRING_new();
+ if (trid == NULL
+ || !ASN1_OCTET_STRING_set(trid, trid_data,
+ OSSL_CMP_TRANSACTIONID_LENGTH)
+ || !OSSL_CMP_CTX_set1_transactionID(ctx, trid)) {
+ tear_down((*fixture));
+ (*fixture) = NULL;
+ }
+ ASN1_OCTET_STRING_free(trid);
+ }
+}
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+static int test_msg_check_no_protection_no_cb(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_check_update(&fixture, 0, NULL, 0, NULL, NULL);
+ EXECUTE_TEST(execute_msg_check_test, tear_down);
+ return result;
+}
+
+static int test_msg_check_no_protection_restrictive_cb(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_check_update(&fixture, 0, allow_unprotected, 0, NULL, NULL);
+ EXECUTE_TEST(execute_msg_check_test, tear_down);
+ return result;
+}
+#endif
+
+static int test_msg_check_no_protection_permissive_cb(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_check_update(&fixture, 1, allow_unprotected, 1, NULL, NULL);
+ EXECUTE_TEST(execute_msg_check_test, tear_down);
+ return result;
+}
+
+static int test_msg_check_transaction_id(void)
+{
+ /* Transaction id belonging to CMP_IR_rmprotection.der */
+ const unsigned char trans_id[OSSL_CMP_TRANSACTIONID_LENGTH] = {
+ 0x39, 0xB6, 0x90, 0x28, 0xC4, 0xBC, 0x7A, 0xF6,
+ 0xBE, 0xC6, 0x4A, 0x88, 0x97, 0xA6, 0x95, 0x0B
+ };
+
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_check_update(&fixture, 1, allow_unprotected, 1, trans_id, NULL);
+ EXECUTE_TEST(execute_msg_check_test, tear_down);
+ return result;
+}
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+static int test_msg_check_transaction_id_bad(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_check_update(&fixture, 0, allow_unprotected, 1, rand_data, NULL);
+ EXECUTE_TEST(execute_msg_check_test, tear_down);
+ return result;
+}
+#endif
+
+static int test_msg_check_recipient_nonce(void)
+{
+ /* Recipient nonce belonging to CMP_IP_ir_rmprotection.der */
+ const unsigned char rec_nonce[OSSL_CMP_SENDERNONCE_LENGTH] = {
+ 0x48, 0xF1, 0x71, 0x1F, 0xE5, 0xAF, 0x1C, 0x8B,
+ 0x21, 0x97, 0x5C, 0x84, 0x74, 0x49, 0xBA, 0x32
+ };
+
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_check_update(&fixture, 1, allow_unprotected, 1, NULL, rec_nonce);
+ EXECUTE_TEST(execute_msg_check_test, tear_down);
+ return result;
+}
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+static int test_msg_check_recipient_nonce_bad(void)
+{
+ SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up);
+ setup_check_update(&fixture, 0, allow_unprotected, 1, NULL, rand_data);
+ EXECUTE_TEST(execute_msg_check_test, tear_down);
+ return result;
+}
+#endif
+
+void cleanup_tests(void)
+{
+ X509_free(srvcert);
+ X509_free(clcert);
+ X509_free(endentity1);
+ X509_free(endentity2);
+ X509_free(intermediate);
+ X509_free(root);
+ X509_free(insta_cert);
+ X509_free(instaca_cert);
+ OSSL_CMP_MSG_free(ir_unprotected);
+ OSSL_CMP_MSG_free(ir_rmprotection);
+ OSSL_PROVIDER_unload(default_null_provider);
+ OSSL_PROVIDER_unload(provider);
+ OSSL_LIB_CTX_free(libctx);
+ return;
+}
+
+
+#define USAGE "server.crt client.crt " \
+ "EndEntity1.crt EndEntity2.crt " \
+ "Root_CA.crt Intermediate_CA.crt " \
+ "CMP_IR_protected.der CMP_IR_unprotected.der " \
+ "IP_waitingStatus_PBM.der IR_rmprotection.der " \
+ "insta.cert.pem insta_ca.cert.pem " \
+ "IR_protected_0_extraCerts.der " \
+ "IR_protected_2_extraCerts.der module_name [module_conf_file]\n"
+OPT_TEST_DECLARE_USAGE(USAGE)
+
+int setup_tests(void)
+{
+ /* Set test time stamps */
+ struct tm ts = { 0 };
+
+ ts.tm_year = 2018 - 1900; /* 2018 */
+ ts.tm_mon = 1; /* February */
+ ts.tm_mday = 18; /* 18th */
+ test_time_valid = mktime(&ts); /* February 18th 2018 */
+ ts.tm_year += 10; /* February 18th 2028 */
+ test_time_after_expiration = mktime(&ts);
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ RAND_bytes(rand_data, OSSL_CMP_TRANSACTIONID_LENGTH);
+ if (!TEST_ptr(server_f = test_get_argument(0))
+ || !TEST_ptr(client_f = test_get_argument(1))
+ || !TEST_ptr(endentity1_f = test_get_argument(2))
+ || !TEST_ptr(endentity2_f = test_get_argument(3))
+ || !TEST_ptr(root_f = test_get_argument(4))
+ || !TEST_ptr(intermediate_f = test_get_argument(5))
+ || !TEST_ptr(ir_protected_f = test_get_argument(6))
+ || !TEST_ptr(ir_unprotected_f = test_get_argument(7))
+ || !TEST_ptr(ip_waiting_f = test_get_argument(8))
+ || !TEST_ptr(ir_rmprotection_f = test_get_argument(9))
+ || !TEST_ptr(instacert_f = test_get_argument(10))
+ || !TEST_ptr(instaca_f = test_get_argument(11))
+ || !TEST_ptr(ir_protected_0_extracerts = test_get_argument(12))
+ || !TEST_ptr(ir_protected_2_extracerts = test_get_argument(13))) {
+ TEST_error("usage: cmp_vfy_test %s", USAGE);
+ return 0;
+ }
+
+ if (!test_arg_libctx(&libctx, &default_null_provider, &provider, 14, USAGE))
+ return 0;
+
+ /* Load certificates for cert chain */
+ if (!TEST_ptr(endentity1 = load_cert_pem(endentity1_f, libctx))
+ || !TEST_ptr(endentity2 = load_cert_pem(endentity2_f, libctx))
+ || !TEST_ptr(root = load_cert_pem(root_f, NULL))
+ || !TEST_ptr(intermediate = load_cert_pem(intermediate_f, libctx)))
+ goto err;
+
+ if (!TEST_ptr(insta_cert = load_cert_pem(instacert_f, libctx))
+ || !TEST_ptr(instaca_cert = load_cert_pem(instaca_f, libctx)))
+ goto err;
+
+ /* Load certificates for message validation */
+ if (!TEST_ptr(srvcert = load_cert_pem(server_f, libctx))
+ || !TEST_ptr(clcert = load_cert_pem(client_f, libctx)))
+ goto err;
+ if (!TEST_int_eq(1, RAND_bytes(rand_data, OSSL_CMP_TRANSACTIONID_LENGTH)))
+ goto err;
+ if (!TEST_ptr(ir_unprotected = load_pkimsg(ir_unprotected_f, libctx))
+ || !TEST_ptr(ir_rmprotection = load_pkimsg(ir_rmprotection_f, libctx)))
+ goto err;
+
+ /* Message validation tests */
+ ADD_TEST(test_verify_popo);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ ADD_TEST(test_verify_popo_bad);
+#endif
+ ADD_TEST(test_validate_msg_signature_trusted_ok);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ ADD_TEST(test_validate_msg_signature_trusted_expired);
+ ADD_TEST(test_validate_msg_signature_srvcert_missing);
+#endif
+ ADD_TEST(test_validate_msg_signature_srvcert_wrong);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ ADD_TEST(test_validate_msg_signature_bad);
+#endif
+ ADD_TEST(test_validate_msg_signature_sender_cert_srvcert);
+ ADD_TEST(test_validate_msg_signature_sender_cert_untrusted);
+ ADD_TEST(test_validate_msg_signature_sender_cert_trusted);
+ ADD_TEST(test_validate_msg_signature_sender_cert_extracert);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ ADD_TEST(test_validate_msg_signature_sender_cert_absent);
+#endif
+ ADD_TEST(test_validate_msg_signature_expected_sender);
+ ADD_TEST(test_validate_msg_signature_unexpected_sender);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ ADD_TEST(test_validate_msg_unprotected_request);
+#endif
+ ADD_TEST(test_validate_msg_mac_alg_protection_ok);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ ADD_TEST(test_validate_msg_mac_alg_protection_missing);
+ ADD_TEST(test_validate_msg_mac_alg_protection_wrong);
+ ADD_TEST(test_validate_msg_mac_alg_protection_bad);
+#endif
+
+ /* Cert path validation tests */
+ ADD_TEST(test_validate_cert_path_ok);
+ ADD_TEST(test_validate_cert_path_expired);
+ ADD_TEST(test_validate_cert_path_wrong_anchor);
+
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ ADD_TEST(test_msg_check_no_protection_no_cb);
+ ADD_TEST(test_msg_check_no_protection_restrictive_cb);
+#endif
+ ADD_TEST(test_msg_check_no_protection_permissive_cb);
+ ADD_TEST(test_msg_check_transaction_id);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ ADD_TEST(test_msg_check_transaction_id_bad);
+#endif
+ ADD_TEST(test_msg_check_recipient_nonce);
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ ADD_TEST(test_msg_check_recipient_nonce_bad);
+#endif
+
+ return 1;
+
+ err:
+ cleanup_tests();
+ return 0;
+
+}
diff --git a/test/cms-examples.pl b/test/cms-examples.pl
new file mode 100644
index 000000000000..5124c29153cd
--- /dev/null
+++ b/test/cms-examples.pl
@@ -0,0 +1,365 @@
+#! /usr/bin/env perl
+# Copyright 2008-2016 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
+
+# Perl script to run tests against S/MIME examples in RFC4134
+# Assumes RFC is in current directory and called "rfc4134.txt"
+
+use MIME::Base64;
+
+my $badttest = 0;
+my $verbose = 1;
+
+my $cmscmd;
+my $exdir = "./";
+my $exfile = "./rfc4134.txt";
+
+if (-f "../apps/openssl")
+ {
+ $cmscmd = "../util/shlib_wrap.sh ../apps/openssl cms";
+ }
+elsif (-f "..\\out32dll\\openssl.exe")
+ {
+ $cmscmd = "..\\out32dll\\openssl.exe cms";
+ }
+elsif (-f "..\\out32\\openssl.exe")
+ {
+ $cmscmd = "..\\out32\\openssl.exe cms";
+ }
+
+my @test_list = (
+ [ "3.1.bin" => "dataout" ],
+ [ "3.2.bin" => "encode, dataout" ],
+ [ "4.1.bin" => "encode, verifyder, cont, dss" ],
+ [ "4.2.bin" => "encode, verifyder, cont, rsa" ],
+ [ "4.3.bin" => "encode, verifyder, cont_extern, dss" ],
+ [ "4.4.bin" => "encode, verifyder, cont, dss" ],
+ [ "4.5.bin" => "verifyder, cont, rsa" ],
+ [ "4.6.bin" => "encode, verifyder, cont, dss" ],
+ [ "4.7.bin" => "encode, verifyder, cont, dss" ],
+ [ "4.8.eml" => "verifymime, dss" ],
+ [ "4.9.eml" => "verifymime, dss" ],
+ [ "4.10.bin" => "encode, verifyder, cont, dss" ],
+ [ "4.11.bin" => "encode, certsout" ],
+ [ "5.1.bin" => "encode, envelopeder, cont" ],
+ [ "5.2.bin" => "encode, envelopeder, cont" ],
+ [ "5.3.eml" => "envelopemime, cont" ],
+ [ "6.0.bin" => "encode, digest, cont" ],
+ [ "7.1.bin" => "encode, encrypted, cont" ],
+ [ "7.2.bin" => "encode, encrypted, cont" ]
+);
+
+# Extract examples from RFC4134 text.
+# Base64 decode all examples, certificates and
+# private keys are converted to PEM format.
+
+my ( $filename, $data );
+
+my @cleanup = ( "cms.out", "cms.err", "tmp.der", "tmp.txt" );
+
+$data = "";
+
+open( IN, $exfile ) || die "Can't Open RFC examples file $exfile";
+
+while (<IN>) {
+ next unless (/^\|/);
+ s/^\|//;
+ next if (/^\*/);
+ if (/^>(.*)$/) {
+ $filename = $1;
+ next;
+ }
+ if (/^</) {
+ $filename = "$exdir/$filename";
+ if ( $filename =~ /\.bin$/ || $filename =~ /\.eml$/ ) {
+ $data = decode_base64($data);
+ open OUT, ">$filename";
+ binmode OUT;
+ print OUT $data;
+ close OUT;
+ push @cleanup, $filename;
+ }
+ elsif ( $filename =~ /\.cer$/ ) {
+ write_pem( $filename, "CERTIFICATE", $data );
+ }
+ elsif ( $filename =~ /\.pri$/ ) {
+ write_pem( $filename, "PRIVATE KEY", $data );
+ }
+ $data = "";
+ $filename = "";
+ }
+ else {
+ $data .= $_;
+ }
+
+}
+
+my $secretkey =
+ "73:7c:79:1f:25:ea:d0:e0:46:29:25:43:52:f7:dc:62:91:e5:cb:26:91:7a:da:32";
+
+foreach (@test_list) {
+ my ( $file, $tlist ) = @$_;
+ print "Example file $file:\n";
+ if ( $tlist =~ /encode/ ) {
+ run_reencode_test( $exdir, $file );
+ }
+ if ( $tlist =~ /certsout/ ) {
+ run_certsout_test( $exdir, $file );
+ }
+ if ( $tlist =~ /dataout/ ) {
+ run_dataout_test( $exdir, $file );
+ }
+ if ( $tlist =~ /verify/ ) {
+ run_verify_test( $exdir, $tlist, $file );
+ }
+ if ( $tlist =~ /digest/ ) {
+ run_digest_test( $exdir, $tlist, $file );
+ }
+ if ( $tlist =~ /encrypted/ ) {
+ run_encrypted_test( $exdir, $tlist, $file, $secretkey );
+ }
+ if ( $tlist =~ /envelope/ ) {
+ run_envelope_test( $exdir, $tlist, $file );
+ }
+
+}
+
+foreach (@cleanup) {
+ unlink $_;
+}
+
+if ($badtest) {
+ print "\n$badtest TESTS FAILED!!\n";
+}
+else {
+ print "\n***All tests successful***\n";
+}
+
+sub write_pem {
+ my ( $filename, $str, $data ) = @_;
+
+ $filename =~ s/\.[^.]*$/.pem/;
+
+ push @cleanup, $filename;
+
+ open OUT, ">$filename";
+
+ print OUT "-----BEGIN $str-----\n";
+ print OUT $data;
+ print OUT "-----END $str-----\n";
+
+ close OUT;
+}
+
+sub run_reencode_test {
+ my ( $cmsdir, $tfile ) = @_;
+ unlink "tmp.der";
+
+ system( "$cmscmd -cmsout -inform DER -outform DER"
+ . " -in $cmsdir/$tfile -out tmp.der" );
+
+ if ($?) {
+ print "\tReencode command FAILED!!\n";
+ $badtest++;
+ }
+ elsif ( !cmp_files( "$cmsdir/$tfile", "tmp.der" ) ) {
+ print "\tReencode FAILED!!\n";
+ $badtest++;
+ }
+ else {
+ print "\tReencode passed\n" if $verbose;
+ }
+}
+
+sub run_certsout_test {
+ my ( $cmsdir, $tfile ) = @_;
+ unlink "tmp.der";
+ unlink "tmp.pem";
+
+ system( "$cmscmd -cmsout -inform DER -certsout tmp.pem"
+ . " -in $cmsdir/$tfile -out tmp.der" );
+
+ if ($?) {
+ print "\tCertificate output command FAILED!!\n";
+ $badtest++;
+ }
+ else {
+ print "\tCertificate output passed\n" if $verbose;
+ }
+}
+
+sub run_dataout_test {
+ my ( $cmsdir, $tfile ) = @_;
+ unlink "tmp.txt";
+
+ system(
+ "$cmscmd -data_out -inform DER" . " -in $cmsdir/$tfile -out tmp.txt" );
+
+ if ($?) {
+ print "\tDataout command FAILED!!\n";
+ $badtest++;
+ }
+ elsif ( !cmp_files( "$cmsdir/ExContent.bin", "tmp.txt" ) ) {
+ print "\tDataout compare FAILED!!\n";
+ $badtest++;
+ }
+ else {
+ print "\tDataout passed\n" if $verbose;
+ }
+}
+
+sub run_verify_test {
+ my ( $cmsdir, $tlist, $tfile ) = @_;
+ unlink "tmp.txt";
+
+ $form = "DER" if $tlist =~ /verifyder/;
+ $form = "SMIME" if $tlist =~ /verifymime/;
+ $cafile = "$cmsdir/CarlDSSSelf.pem" if $tlist =~ /dss/;
+ $cafile = "$cmsdir/CarlRSASelf.pem" if $tlist =~ /rsa/;
+
+ $cmd =
+ "$cmscmd -verify -inform $form"
+ . " -CAfile $cafile"
+ . " -in $cmsdir/$tfile -out tmp.txt";
+
+ $cmd .= " -content $cmsdir/ExContent.bin" if $tlist =~ /cont_extern/;
+
+ system("$cmd 2>cms.err 1>cms.out");
+
+ if ($?) {
+ print "\tVerify command FAILED!!\n";
+ $badtest++;
+ }
+ elsif ( $tlist =~ /cont/
+ && !cmp_files( "$cmsdir/ExContent.bin", "tmp.txt" ) )
+ {
+ print "\tVerify content compare FAILED!!\n";
+ $badtest++;
+ }
+ else {
+ print "\tVerify passed\n" if $verbose;
+ }
+}
+
+sub run_envelope_test {
+ my ( $cmsdir, $tlist, $tfile ) = @_;
+ unlink "tmp.txt";
+
+ $form = "DER" if $tlist =~ /envelopeder/;
+ $form = "SMIME" if $tlist =~ /envelopemime/;
+
+ $cmd =
+ "$cmscmd -decrypt -inform $form"
+ . " -recip $cmsdir/BobRSASignByCarl.pem"
+ . " -inkey $cmsdir/BobPrivRSAEncrypt.pem"
+ . " -in $cmsdir/$tfile -out tmp.txt";
+
+ system("$cmd 2>cms.err 1>cms.out");
+
+ if ($?) {
+ print "\tDecrypt command FAILED!!\n";
+ $badtest++;
+ }
+ elsif ( $tlist =~ /cont/
+ && !cmp_files( "$cmsdir/ExContent.bin", "tmp.txt" ) )
+ {
+ print "\tDecrypt content compare FAILED!!\n";
+ $badtest++;
+ }
+ else {
+ print "\tDecrypt passed\n" if $verbose;
+ }
+}
+
+sub run_digest_test {
+ my ( $cmsdir, $tlist, $tfile ) = @_;
+ unlink "tmp.txt";
+
+ my $cmd =
+ "$cmscmd -digest_verify -inform DER" . " -in $cmsdir/$tfile -out tmp.txt";
+
+ system("$cmd 2>cms.err 1>cms.out");
+
+ if ($?) {
+ print "\tDigest verify command FAILED!!\n";
+ $badtest++;
+ }
+ elsif ( $tlist =~ /cont/
+ && !cmp_files( "$cmsdir/ExContent.bin", "tmp.txt" ) )
+ {
+ print "\tDigest verify content compare FAILED!!\n";
+ $badtest++;
+ }
+ else {
+ print "\tDigest verify passed\n" if $verbose;
+ }
+}
+
+sub run_encrypted_test {
+ my ( $cmsdir, $tlist, $tfile, $key ) = @_;
+ unlink "tmp.txt";
+
+ system( "$cmscmd -EncryptedData_decrypt -inform DER"
+ . " -secretkey $key"
+ . " -in $cmsdir/$tfile -out tmp.txt" );
+
+ if ($?) {
+ print "\tEncrypted Data command FAILED!!\n";
+ $badtest++;
+ }
+ elsif ( $tlist =~ /cont/
+ && !cmp_files( "$cmsdir/ExContent.bin", "tmp.txt" ) )
+ {
+ print "\tEncrypted Data content compare FAILED!!\n";
+ $badtest++;
+ }
+ else {
+ print "\tEncryptedData verify passed\n" if $verbose;
+ }
+}
+
+sub cmp_files {
+ my ( $f1, $f2 ) = @_;
+ my ( $fp1, $fp2 );
+
+ my ( $rd1, $rd2 );
+
+ if ( !open( $fp1, "<$f1" ) ) {
+ print STDERR "Can't Open file $f1\n";
+ return 0;
+ }
+
+ if ( !open( $fp2, "<$f2" ) ) {
+ print STDERR "Can't Open file $f2\n";
+ return 0;
+ }
+
+ binmode $fp1;
+ binmode $fp2;
+
+ my $ret = 0;
+
+ for ( ; ; ) {
+ $n1 = sysread $fp1, $rd1, 4096;
+ $n2 = sysread $fp2, $rd2, 4096;
+ last if ( $n1 != $n2 );
+ last if ( $rd1 ne $rd2 );
+
+ if ( $n1 == 0 ) {
+ $ret = 1;
+ last;
+ }
+
+ }
+
+ close $fp1;
+ close $fp2;
+
+ return $ret;
+
+}
+
diff --git a/test/cmsapitest.c b/test/cmsapitest.c
new file mode 100644
index 000000000000..dbb05cd49622
--- /dev/null
+++ b/test/cmsapitest.c
@@ -0,0 +1,412 @@
+/*
+ * Copyright 2018-2023 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/cms.h>
+#include <openssl/bio.h>
+#include <openssl/x509.h>
+#include <openssl/pem.h>
+
+#include "testutil.h"
+
+static X509 *cert = NULL;
+static EVP_PKEY *privkey = NULL;
+static char *derin = NULL;
+
+static int test_encrypt_decrypt(const EVP_CIPHER *cipher)
+{
+ int testresult = 0;
+ STACK_OF(X509) *certstack = sk_X509_new_null();
+ const char *msg = "Hello world";
+ BIO *msgbio = BIO_new_mem_buf(msg, strlen(msg));
+ BIO *outmsgbio = BIO_new(BIO_s_mem());
+ CMS_ContentInfo* content = NULL;
+ char buf[80];
+
+ if (!TEST_ptr(certstack) || !TEST_ptr(msgbio) || !TEST_ptr(outmsgbio))
+ goto end;
+
+ if (!TEST_int_gt(sk_X509_push(certstack, cert), 0))
+ goto end;
+
+ content = CMS_encrypt(certstack, msgbio, cipher, CMS_TEXT);
+ if (!TEST_ptr(content))
+ goto end;
+
+ if (!TEST_true(CMS_decrypt(content, privkey, cert, NULL, outmsgbio,
+ CMS_TEXT)))
+ goto end;
+
+ /* Check we got the message we first started with */
+ if (!TEST_int_eq(BIO_gets(outmsgbio, buf, sizeof(buf)), strlen(msg))
+ || !TEST_int_eq(strcmp(buf, msg), 0))
+ goto end;
+
+ testresult = 1;
+ end:
+ sk_X509_free(certstack);
+ BIO_free(msgbio);
+ BIO_free(outmsgbio);
+ CMS_ContentInfo_free(content);
+
+ return testresult && TEST_int_eq(ERR_peek_error(), 0);
+}
+
+static int test_encrypt_decrypt_aes_cbc(void)
+{
+ return test_encrypt_decrypt(EVP_aes_128_cbc());
+}
+
+static int test_encrypt_decrypt_aes_128_gcm(void)
+{
+ return test_encrypt_decrypt(EVP_aes_128_gcm());
+}
+
+static int test_encrypt_decrypt_aes_192_gcm(void)
+{
+ return test_encrypt_decrypt(EVP_aes_192_gcm());
+}
+
+static int test_encrypt_decrypt_aes_256_gcm(void)
+{
+ return test_encrypt_decrypt(EVP_aes_256_gcm());
+}
+
+static int test_d2i_CMS_bio_NULL(void)
+{
+ BIO *bio;
+ CMS_ContentInfo *cms = NULL;
+ int ret = 0;
+
+ /*
+ * Test data generated using:
+ * openssl cms -sign -md sha256 -signer ./test/certs/rootCA.pem -inkey \
+ * ./test/certs/rootCA.key -nodetach -outform DER -in ./in.txt -out out.der \
+ * -nosmimecap
+ */
+ static const unsigned char cms_data[] = {
+ 0x30, 0x82, 0x05, 0xc5, 0x06, 0x09, 0x2a, 0x86,
+ 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0,
+ 0x82, 0x05, 0xb6, 0x30, 0x82, 0x05, 0xb2, 0x02,
+ 0x01, 0x01, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x09,
+ 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02,
+ 0x01, 0x30, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48,
+ 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x0f,
+ 0x04, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20,
+ 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x0d, 0x0a, 0xa0,
+ 0x82, 0x03, 0x83, 0x30, 0x82, 0x03, 0x7f, 0x30,
+ 0x82, 0x02, 0x67, 0xa0, 0x03, 0x02, 0x01, 0x02,
+ 0x02, 0x09, 0x00, 0x88, 0x43, 0x29, 0xcb, 0xc2,
+ 0xeb, 0x15, 0x9a, 0x30, 0x0d, 0x06, 0x09, 0x2a,
+ 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
+ 0x05, 0x00, 0x30, 0x56, 0x31, 0x0b, 0x30, 0x09,
+ 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41,
+ 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55,
+ 0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65,
+ 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21,
+ 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c,
+ 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
+ 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74,
+ 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74,
+ 0x64, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55,
+ 0x04, 0x03, 0x0c, 0x06, 0x72, 0x6f, 0x6f, 0x74,
+ 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35,
+ 0x30, 0x37, 0x30, 0x32, 0x31, 0x33, 0x31, 0x35,
+ 0x31, 0x31, 0x5a, 0x17, 0x0d, 0x33, 0x35, 0x30,
+ 0x37, 0x30, 0x32, 0x31, 0x33, 0x31, 0x35, 0x31,
+ 0x31, 0x5a, 0x30, 0x56, 0x31, 0x0b, 0x30, 0x09,
+ 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41,
+ 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55,
+ 0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65,
+ 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21,
+ 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c,
+ 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
+ 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74,
+ 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74,
+ 0x64, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55,
+ 0x04, 0x03, 0x0c, 0x06, 0x72, 0x6f, 0x6f, 0x74,
+ 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d,
+ 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
+ 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
+ 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82,
+ 0x01, 0x01, 0x00, 0xc0, 0xf1, 0x6b, 0x77, 0x88,
+ 0xac, 0x35, 0xdf, 0xfb, 0x73, 0x53, 0x2f, 0x92,
+ 0x80, 0x2f, 0x74, 0x16, 0x32, 0x4d, 0xf5, 0x10,
+ 0x20, 0x6f, 0x6c, 0x3a, 0x8e, 0xd1, 0xdc, 0x6b,
+ 0xe1, 0x2e, 0x3e, 0xc3, 0x04, 0x0f, 0xbf, 0x9b,
+ 0xc4, 0xc9, 0x12, 0xd1, 0xe4, 0x0b, 0x45, 0x97,
+ 0xe5, 0x06, 0xcd, 0x66, 0x3a, 0xe1, 0xe0, 0xe2,
+ 0x2b, 0xdf, 0xa2, 0xc4, 0xec, 0x7b, 0xd3, 0x3d,
+ 0x3c, 0x8a, 0xff, 0x5e, 0x74, 0xa0, 0xab, 0xa7,
+ 0x03, 0x6a, 0x16, 0x5b, 0x5e, 0x92, 0xc4, 0x7e,
+ 0x5b, 0x79, 0x8a, 0x69, 0xd4, 0xbc, 0x83, 0x5e,
+ 0xae, 0x42, 0x92, 0x74, 0xa5, 0x2b, 0xe7, 0x00,
+ 0xc1, 0xa9, 0xdc, 0xd5, 0xb1, 0x53, 0x07, 0x0f,
+ 0x73, 0xf7, 0x8e, 0xad, 0x14, 0x3e, 0x25, 0x9e,
+ 0xe5, 0x1e, 0xe6, 0xcc, 0x91, 0xcd, 0x95, 0x0c,
+ 0x80, 0x44, 0x20, 0xc3, 0xfd, 0x17, 0xcf, 0x91,
+ 0x3d, 0x63, 0x10, 0x1c, 0x14, 0x5b, 0xfb, 0xc3,
+ 0xa8, 0xc1, 0x88, 0xb2, 0x77, 0xff, 0x9c, 0xdb,
+ 0xfc, 0x6a, 0x44, 0x44, 0x44, 0xf7, 0x85, 0xec,
+ 0x08, 0x2c, 0xd4, 0xdf, 0x81, 0xa3, 0x79, 0xc9,
+ 0xfe, 0x1e, 0x9b, 0x93, 0x16, 0x53, 0xb7, 0x97,
+ 0xab, 0xbe, 0x4f, 0x1a, 0xa5, 0xe2, 0xfa, 0x46,
+ 0x05, 0xe4, 0x0d, 0x9c, 0x2a, 0xa4, 0xcc, 0xb9,
+ 0x1e, 0x21, 0xa0, 0x6c, 0xc4, 0xab, 0x59, 0xb0,
+ 0x40, 0x39, 0xbb, 0xf9, 0x88, 0xad, 0xfd, 0xdf,
+ 0x8d, 0xb4, 0x0b, 0xaf, 0x7e, 0x41, 0xe0, 0x21,
+ 0x3c, 0xc8, 0x33, 0x45, 0x49, 0x84, 0x2f, 0x93,
+ 0x06, 0xee, 0xfd, 0x4f, 0xed, 0x4f, 0xf3, 0xbc,
+ 0x9b, 0xde, 0xfc, 0x25, 0x5e, 0x55, 0xd5, 0x75,
+ 0xd4, 0xc5, 0x7b, 0x3a, 0x40, 0x35, 0x06, 0x9f,
+ 0xc4, 0x84, 0xb4, 0x6c, 0x93, 0x0c, 0xaf, 0x37,
+ 0x5a, 0xaf, 0xb6, 0x41, 0x4d, 0x26, 0x23, 0x1c,
+ 0xb8, 0x02, 0xb3, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x0c, 0x06, 0x03,
+ 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01,
+ 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d,
+ 0x0e, 0x04, 0x16, 0x04, 0x14, 0x85, 0x56, 0x89,
+ 0x35, 0xe2, 0x9f, 0x00, 0x1a, 0xe1, 0x86, 0x03,
+ 0x0b, 0x4b, 0xaf, 0x76, 0x12, 0x6b, 0x33, 0x6d,
+ 0xfd, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23,
+ 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x85, 0x56,
+ 0x89, 0x35, 0xe2, 0x9f, 0x00, 0x1a, 0xe1, 0x86,
+ 0x03, 0x0b, 0x4b, 0xaf, 0x76, 0x12, 0x6b, 0x33,
+ 0x6d, 0xfd, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
+ 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05,
+ 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x32, 0x0a,
+ 0xbf, 0x2a, 0x0a, 0xe2, 0xbb, 0x4f, 0x43, 0xce,
+ 0x88, 0xda, 0x5a, 0x39, 0x10, 0x37, 0x80, 0xbb,
+ 0x37, 0x2d, 0x5e, 0x2d, 0x88, 0xdd, 0x26, 0x69,
+ 0x9c, 0xe7, 0xb4, 0x98, 0x20, 0xb1, 0x25, 0xe6,
+ 0x61, 0x59, 0x6d, 0x12, 0xec, 0x9b, 0x87, 0xbe,
+ 0x57, 0xe1, 0x12, 0x05, 0xc5, 0x04, 0xf1, 0x17,
+ 0xce, 0x14, 0xb8, 0x1c, 0x92, 0xd4, 0x95, 0x95,
+ 0x2c, 0x5b, 0x28, 0x89, 0xfb, 0x72, 0x9c, 0x20,
+ 0xd3, 0x32, 0x81, 0xa8, 0x85, 0xec, 0xc8, 0x08,
+ 0x7b, 0xa8, 0x59, 0x5b, 0x3a, 0x6c, 0x31, 0xab,
+ 0x52, 0xe2, 0x66, 0xcd, 0x14, 0x49, 0x5c, 0xf3,
+ 0xd3, 0x3e, 0x62, 0xbc, 0x91, 0x16, 0xb4, 0x1c,
+ 0xf5, 0xdd, 0x54, 0xaa, 0x3c, 0x61, 0x97, 0x79,
+ 0xac, 0xe4, 0xc8, 0x43, 0x35, 0xc3, 0x0f, 0xfc,
+ 0xf3, 0x70, 0x1d, 0xaf, 0xf0, 0x9c, 0x8a, 0x2a,
+ 0x92, 0x93, 0x48, 0xaa, 0xd0, 0xe8, 0x47, 0xbe,
+ 0x35, 0xc1, 0xc6, 0x7b, 0x6d, 0xda, 0xfa, 0x5d,
+ 0x57, 0x45, 0xf3, 0xea, 0x41, 0x8f, 0x36, 0xc1,
+ 0x3c, 0xf4, 0x52, 0x7f, 0x6e, 0x31, 0xdd, 0xba,
+ 0x9a, 0xbc, 0x70, 0x56, 0x71, 0x38, 0xdc, 0x49,
+ 0x57, 0x0c, 0xfd, 0x91, 0x17, 0xc5, 0xea, 0x87,
+ 0xe5, 0x23, 0x74, 0x19, 0xb2, 0xb6, 0x99, 0x0c,
+ 0x6b, 0xa2, 0x05, 0xf8, 0x51, 0x68, 0xed, 0x97,
+ 0xe0, 0xdf, 0x62, 0xf9, 0x7e, 0x7a, 0x3a, 0x44,
+ 0x71, 0x83, 0x57, 0x28, 0x49, 0x88, 0x69, 0xb5,
+ 0x14, 0x1e, 0xda, 0x46, 0xe3, 0x6e, 0x78, 0xe1,
+ 0xcb, 0x8f, 0xb5, 0x98, 0xb3, 0x2d, 0x6e, 0x5b,
+ 0xb7, 0xf6, 0x93, 0x24, 0x14, 0x1f, 0xa4, 0xf6,
+ 0x69, 0xbd, 0xff, 0x4c, 0x52, 0x50, 0x02, 0xc5,
+ 0x43, 0x8d, 0x14, 0xe2, 0xd0, 0x75, 0x9f, 0x12,
+ 0x5e, 0x94, 0x89, 0xd1, 0xef, 0x77, 0x89, 0x7d,
+ 0x89, 0xd9, 0x9e, 0x76, 0x99, 0x24, 0x31, 0x82,
+ 0x01, 0xf7, 0x30, 0x82, 0x01, 0xf3, 0x02, 0x01,
+ 0x01, 0x30, 0x63, 0x30, 0x56, 0x31, 0x0b, 0x30,
+ 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
+ 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03,
+ 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d,
+ 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31,
+ 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a,
+ 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69,
+ 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c,
+ 0x74, 0x64, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03,
+ 0x55, 0x04, 0x03, 0x0c, 0x06, 0x72, 0x6f, 0x6f,
+ 0x74, 0x43, 0x41, 0x02, 0x09, 0x00, 0x88, 0x43,
+ 0x29, 0xcb, 0xc2, 0xeb, 0x15, 0x9a, 0x30, 0x0b,
+ 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
+ 0x04, 0x02, 0x01, 0xa0, 0x69, 0x30, 0x18, 0x06,
+ 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
+ 0x09, 0x03, 0x31, 0x0b, 0x06, 0x09, 0x2a, 0x86,
+ 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0x30,
+ 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
+ 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d,
+ 0x32, 0x30, 0x31, 0x32, 0x31, 0x31, 0x30, 0x39,
+ 0x30, 0x30, 0x31, 0x33, 0x5a, 0x30, 0x2f, 0x06,
+ 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
+ 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0xb0, 0x80,
+ 0x22, 0xd3, 0x15, 0xcf, 0x1e, 0xb1, 0x2d, 0x26,
+ 0x65, 0xbd, 0xed, 0x0e, 0x6a, 0xf4, 0x06, 0x53,
+ 0xc0, 0xa0, 0xbe, 0x97, 0x52, 0x32, 0xfb, 0x49,
+ 0xbc, 0xbd, 0x02, 0x1c, 0xfc, 0x36, 0x30, 0x0d,
+ 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
+ 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01,
+ 0x00, 0x37, 0x44, 0x39, 0x08, 0xb2, 0x19, 0x52,
+ 0x35, 0x9c, 0xd0, 0x67, 0x87, 0xae, 0xb8, 0x1c,
+ 0x80, 0xf4, 0x03, 0x29, 0x2e, 0xe3, 0x76, 0x4a,
+ 0xb0, 0x98, 0x10, 0x00, 0x9a, 0x30, 0xdb, 0x05,
+ 0x28, 0x53, 0x34, 0x31, 0x14, 0xbd, 0x87, 0xb9,
+ 0x4d, 0x45, 0x07, 0x97, 0xa3, 0x57, 0x0b, 0x7e,
+ 0xd1, 0x67, 0xfb, 0x4e, 0x0f, 0x5b, 0x90, 0xb2,
+ 0x6f, 0xe6, 0xce, 0x49, 0xdd, 0x72, 0x46, 0x71,
+ 0x26, 0xa1, 0x1b, 0x98, 0x23, 0x7d, 0x69, 0x73,
+ 0x84, 0xdc, 0xf9, 0xd2, 0x1c, 0x6d, 0xf6, 0xf5,
+ 0x17, 0x49, 0x6e, 0x9d, 0x4d, 0xf1, 0xe2, 0x43,
+ 0x29, 0x53, 0x55, 0xa5, 0x22, 0x1e, 0x89, 0x2c,
+ 0xaf, 0xf2, 0x43, 0x47, 0xd5, 0xfa, 0xad, 0xe7,
+ 0x89, 0x60, 0xbf, 0x96, 0x35, 0x6f, 0xc2, 0x99,
+ 0xb7, 0x55, 0xc5, 0xe3, 0x04, 0x25, 0x1b, 0xf6,
+ 0x7e, 0xf2, 0x2b, 0x14, 0xa9, 0x57, 0x96, 0xbe,
+ 0xbd, 0x6e, 0x95, 0x44, 0x94, 0xbd, 0xaf, 0x9a,
+ 0x6d, 0x77, 0x55, 0x5e, 0x6c, 0xf6, 0x32, 0x37,
+ 0xec, 0xef, 0xe5, 0x81, 0xb0, 0xe3, 0x35, 0xc7,
+ 0x86, 0xea, 0x47, 0x59, 0x38, 0xb6, 0x16, 0xfb,
+ 0x1d, 0x10, 0x55, 0x48, 0xb1, 0x44, 0x33, 0xde,
+ 0xf6, 0x29, 0xbe, 0xbf, 0xbc, 0x71, 0x3e, 0x49,
+ 0xba, 0xe7, 0x9f, 0x4d, 0x6c, 0xfb, 0xec, 0xd2,
+ 0xe0, 0x12, 0xa9, 0x7c, 0xc9, 0x9a, 0x7b, 0x85,
+ 0x83, 0xb8, 0xca, 0xdd, 0xf6, 0xb7, 0x15, 0x75,
+ 0x7b, 0x4a, 0x69, 0xcf, 0x0a, 0xc7, 0x80, 0x01,
+ 0xe7, 0x94, 0x16, 0x7f, 0x8d, 0x3c, 0xfa, 0x1f,
+ 0x05, 0x71, 0x76, 0x15, 0xb0, 0xf6, 0x61, 0x30,
+ 0x58, 0x16, 0xbe, 0x1b, 0xd1, 0x93, 0xc4, 0x1a,
+ 0x91, 0x0c, 0x48, 0xe2, 0x1c, 0x8e, 0xa5, 0xc5,
+ 0xa7, 0x81, 0x44, 0x48, 0x3b, 0x10, 0xc2, 0x74,
+ 0x07, 0xdf, 0xa8, 0xae, 0x57, 0xee, 0x7f, 0xe3,
+ 0x6a
+ };
+
+ ret = TEST_ptr(bio = BIO_new_mem_buf(cms_data, sizeof(cms_data)))
+ && TEST_ptr(cms = d2i_CMS_bio(bio, NULL))
+ && TEST_true(CMS_verify(cms, NULL, NULL, NULL, NULL,
+ CMS_NO_SIGNER_CERT_VERIFY));
+ CMS_ContentInfo_free(cms);
+ BIO_free(bio);
+ return ret && TEST_int_eq(ERR_peek_error(), 0);
+}
+
+static unsigned char *read_all(BIO *bio, long *p_len)
+{
+ const int step = 256;
+ unsigned char *buf = NULL;
+ unsigned char *tmp = NULL;
+ int ret;
+
+ *p_len = 0;
+ for (;;) {
+ tmp = OPENSSL_realloc(buf, *p_len + step);
+ if (tmp == NULL)
+ break;
+ buf = tmp;
+ ret = BIO_read(bio, buf + *p_len, step);
+ if (ret < 0)
+ break;
+
+ *p_len += ret;
+
+ if (ret < step)
+ return buf;
+ }
+
+ /* Error */
+ OPENSSL_free(buf);
+ *p_len = 0;
+ return NULL;
+}
+
+static int test_d2i_CMS_decode(const int idx)
+{
+ BIO *bio = NULL;
+ CMS_ContentInfo *cms = NULL;
+ unsigned char *buf = NULL;
+ const unsigned char *tmp = NULL;
+ long buf_len = 0;
+ int ret = 0;
+
+ if (!TEST_ptr(bio = BIO_new_file(derin, "r")))
+ goto end;
+
+ switch (idx) {
+ case 0:
+ if (!TEST_ptr(cms = d2i_CMS_bio(bio, NULL)))
+ goto end;
+ break;
+ case 1:
+ if (!TEST_ptr(buf = read_all(bio, &buf_len)))
+ goto end;
+ tmp = buf;
+ if (!TEST_ptr(cms = d2i_CMS_ContentInfo(NULL, &tmp, buf_len)))
+ goto end;
+ break;
+ }
+
+ if (!TEST_int_eq(ERR_peek_error(), 0))
+ goto end;
+
+ ret = 1;
+end:
+ CMS_ContentInfo_free(cms);
+ BIO_free(bio);
+ OPENSSL_free(buf);
+
+ return ret;
+}
+
+OPT_TEST_DECLARE_USAGE("certfile privkeyfile derfile\n")
+
+int setup_tests(void)
+{
+ char *certin = NULL, *privkeyin = NULL;
+ BIO *certbio = NULL, *privkeybio = NULL;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(certin = test_get_argument(0))
+ || !TEST_ptr(privkeyin = test_get_argument(1))
+ || !TEST_ptr(derin = test_get_argument(2)))
+ return 0;
+
+ certbio = BIO_new_file(certin, "r");
+ if (!TEST_ptr(certbio))
+ return 0;
+ if (!TEST_true(PEM_read_bio_X509(certbio, &cert, NULL, NULL))) {
+ BIO_free(certbio);
+ return 0;
+ }
+ BIO_free(certbio);
+
+ privkeybio = BIO_new_file(privkeyin, "r");
+ if (!TEST_ptr(privkeybio)) {
+ X509_free(cert);
+ cert = NULL;
+ return 0;
+ }
+ if (!TEST_true(PEM_read_bio_PrivateKey(privkeybio, &privkey, NULL, NULL))) {
+ BIO_free(privkeybio);
+ X509_free(cert);
+ cert = NULL;
+ return 0;
+ }
+ BIO_free(privkeybio);
+
+ ADD_TEST(test_encrypt_decrypt_aes_cbc);
+ ADD_TEST(test_encrypt_decrypt_aes_128_gcm);
+ ADD_TEST(test_encrypt_decrypt_aes_192_gcm);
+ ADD_TEST(test_encrypt_decrypt_aes_256_gcm);
+ ADD_TEST(test_d2i_CMS_bio_NULL);
+ ADD_ALL_TESTS(test_d2i_CMS_decode, 2);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ X509_free(cert);
+ EVP_PKEY_free(privkey);
+}
diff --git a/test/conf_include_test.c b/test/conf_include_test.c
new file mode 100644
index 000000000000..2481a2380b76
--- /dev/null
+++ b/test/conf_include_test.c
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <openssl/conf.h>
+#include <openssl/err.h>
+#include "testutil.h"
+
+#ifdef _WIN32
+# include <direct.h>
+# define DIRSEP "/\\"
+# ifndef __BORLANDC__
+# define chdir _chdir
+# endif
+# define DIRSEP_PRESERVE 0
+#elif !defined(OPENSSL_NO_POSIX_IO)
+# include <unistd.h>
+# ifndef OPENSSL_SYS_VMS
+# define DIRSEP "/"
+# define DIRSEP_PRESERVE 0
+# else
+# define DIRSEP "/]:"
+# define DIRSEP_PRESERVE 1
+# endif
+#else
+/* the test does not work without chdir() */
+# define chdir(x) (-1);
+# define DIRSEP "/"
+# define DIRSEP_PRESERVE 0
+#endif
+
+/* changes path to that of the filename */
+static int change_path(const char *file)
+{
+ char *s = OPENSSL_strdup(file);
+ char *p = s;
+ char *last = NULL;
+ int ret = 0;
+
+ if (s == NULL)
+ return -1;
+
+ while ((p = strpbrk(p, DIRSEP)) != NULL) {
+ last = p++;
+ }
+ if (last == NULL)
+ goto err;
+ last[DIRSEP_PRESERVE] = 0;
+
+ TEST_note("changing path to %s", s);
+ ret = chdir(s);
+ err:
+ OPENSSL_free(s);
+ return ret;
+}
+
+/*
+ * This test program checks the operation of the .include directive.
+ */
+
+static CONF *conf;
+static BIO *in;
+static int expect_failure = 0;
+
+static int test_load_config(void)
+{
+ long errline;
+ long val;
+ char *str;
+ long err;
+
+ if (!TEST_int_gt(NCONF_load_bio(conf, in, &errline), 0)
+ || !TEST_int_eq(err = ERR_peek_error(), 0)) {
+ if (expect_failure)
+ return 1;
+ TEST_note("Failure loading the configuration at line %ld", errline);
+ return 0;
+ }
+ if (expect_failure) {
+ TEST_note("Failure expected but did not happen");
+ return 0;
+ }
+
+ if (!TEST_int_gt(CONF_modules_load(conf, NULL, 0), 0)) {
+ TEST_note("Failed in CONF_modules_load");
+ return 0;
+ }
+
+ /* verify whether CA_default/default_days is set */
+ val = 0;
+ if (!TEST_int_eq(NCONF_get_number(conf, "CA_default", "default_days", &val), 1)
+ || !TEST_int_eq(val, 365)) {
+ TEST_note("default_days incorrect");
+ return 0;
+ }
+
+ /* verify whether req/default_bits is set */
+ val = 0;
+ if (!TEST_int_eq(NCONF_get_number(conf, "req", "default_bits", &val), 1)
+ || !TEST_int_eq(val, 2048)) {
+ TEST_note("default_bits incorrect");
+ return 0;
+ }
+
+ /* verify whether countryName_default is set correctly */
+ str = NCONF_get_string(conf, "req_distinguished_name", "countryName_default");
+ if (!TEST_ptr(str) || !TEST_str_eq(str, "AU")) {
+ TEST_note("countryName_default incorrect");
+ return 0;
+ }
+
+ return 1;
+}
+
+static int test_check_null_numbers(void)
+{
+#if defined(_BSD_SOURCE) \
+ || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) \
+ || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600)
+ long val = 0;
+
+ /* Verify that a NULL config with a present environment variable returns
+ * success and the value.
+ */
+ if (!TEST_int_eq(setenv("FNORD", "123", 1), 0)
+ || !TEST_true(NCONF_get_number(NULL, "missing", "FNORD", &val))
+ || !TEST_long_eq(val, 123)) {
+ TEST_note("environment variable with NULL conf failed");
+ return 0;
+ }
+
+ /*
+ * Verify that a NULL config with a missing environment variable returns
+ * a failure code.
+ */
+ if (!TEST_int_eq(unsetenv("FNORD"), 0)
+ || !TEST_false(NCONF_get_number(NULL, "missing", "FNORD", &val))) {
+ TEST_note("missing environment variable with NULL conf failed");
+ return 0;
+ }
+#endif
+ return 1;
+}
+
+static int test_check_overflow(void)
+{
+#if defined(_BSD_SOURCE) \
+ || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) \
+ || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600)
+ long val = 0;
+ char max[(sizeof(long) * 8) / 3 + 3];
+ char *p;
+
+ p = max + sprintf(max, "0%ld", LONG_MAX) - 1;
+ setenv("FNORD", max, 1);
+ if (!TEST_true(NCONF_get_number(NULL, "missing", "FNORD", &val))
+ || !TEST_long_eq(val, LONG_MAX))
+ return 0;
+
+ while (++*p > '9')
+ *p-- = '0';
+
+ setenv("FNORD", max, 1);
+ if (!TEST_false(NCONF_get_number(NULL, "missing", "FNORD", &val)))
+ return 0;
+#endif
+ return 1;
+}
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_FAIL,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("conf_file\n"),
+ { "f", OPT_FAIL, '-', "A failure is expected" },
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+ const char *conf_file;
+ OPTION_CHOICE o;
+
+ if (!TEST_ptr(conf = NCONF_new(NULL)))
+ return 0;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_FAIL:
+ expect_failure = 1;
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ conf_file = test_get_argument(0);
+ if (!TEST_ptr(conf_file)
+ || !TEST_ptr(in = BIO_new_file(conf_file, "r"))) {
+ TEST_note("Unable to open the file argument");
+ return 0;
+ }
+
+ /*
+ * For this test we need to chdir as we use relative
+ * path names in the config files.
+ */
+ change_path(conf_file);
+
+ ADD_TEST(test_load_config);
+ ADD_TEST(test_check_null_numbers);
+ ADD_TEST(test_check_overflow);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ BIO_vfree(in);
+ NCONF_free(conf);
+ CONF_modules_unload(1);
+}
diff --git a/test/confdump.c b/test/confdump.c
new file mode 100644
index 000000000000..f5cb6b7ae676
--- /dev/null
+++ b/test/confdump.c
@@ -0,0 +1,51 @@
+/*
+ * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <openssl/bio.h>
+#include <openssl/conf.h>
+#include <openssl/safestack.h>
+#include <openssl/err.h>
+
+static void dump_section(const char *name, const CONF *cnf)
+{
+ STACK_OF(CONF_VALUE) *sect = NCONF_get_section(cnf, name);
+ int i;
+
+ printf("[ %s ]\n", name);
+ for (i = 0; i < sk_CONF_VALUE_num(sect); i++) {
+ CONF_VALUE *cv = sk_CONF_VALUE_value(sect, i);
+
+ printf("%s = %s\n", cv->name, cv->value);
+ }
+}
+
+int main(int argc, char **argv)
+{
+ long eline;
+ CONF *conf = NCONF_new(NCONF_default());
+ int ret = 1;
+ STACK_OF(OPENSSL_CSTRING) *section_names = NULL;
+
+ if (conf != NULL && NCONF_load(conf, argv[1], &eline)) {
+ int i;
+
+ section_names = NCONF_get_section_names(conf);
+ for (i = 0; i < sk_OPENSSL_CSTRING_num(section_names); i++) {
+ dump_section(sk_OPENSSL_CSTRING_value(section_names, i), conf);
+ }
+ sk_OPENSSL_CSTRING_free(section_names);
+ ret = 0;
+ } else {
+ ERR_print_errors_fp(stderr);
+ }
+ NCONF_free(conf);
+ return ret;
+}
diff --git a/test/constant_time_test.c b/test/constant_time_test.c
new file mode 100644
index 000000000000..044100b14af0
--- /dev/null
+++ b/test/constant_time_test.c
@@ -0,0 +1,414 @@
+/*
+ * Copyright 2014-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
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "internal/nelem.h"
+#include "internal/constant_time.h"
+#include "testutil.h"
+#include "internal/numbers.h"
+
+static const unsigned int CONSTTIME_TRUE = (unsigned)(~0);
+static const unsigned int CONSTTIME_FALSE = 0;
+static const unsigned char CONSTTIME_TRUE_8 = 0xff;
+static const unsigned char CONSTTIME_FALSE_8 = 0;
+static const size_t CONSTTIME_TRUE_S = ~((size_t)0);
+static const size_t CONSTTIME_FALSE_S = 0;
+static uint32_t CONSTTIME_TRUE_32 = (uint32_t)(~(uint32_t)0);
+static uint32_t CONSTTIME_FALSE_32 = 0;
+static uint64_t CONSTTIME_TRUE_64 = (uint64_t)(~(uint64_t)0);
+static uint64_t CONSTTIME_FALSE_64 = 0;
+
+static unsigned int test_values[] = {
+ 0, 1, 1024, 12345, 32000, UINT_MAX / 2 - 1,
+ UINT_MAX / 2, UINT_MAX / 2 + 1, UINT_MAX - 1,
+ UINT_MAX
+};
+
+static unsigned char test_values_8[] = {
+ 0, 1, 2, 20, 32, 127, 128, 129, 255
+};
+
+static int signed_test_values[] = {
+ 0, 1, -1, 1024, -1024, 12345, -12345,
+ 32000, -32000, INT_MAX, INT_MIN, INT_MAX - 1,
+ INT_MIN + 1
+};
+
+static size_t test_values_s[] = {
+ 0, 1, 1024, 12345, 32000, SIZE_MAX / 2 - 1,
+ SIZE_MAX / 2, SIZE_MAX / 2 + 1, SIZE_MAX - 1,
+ SIZE_MAX
+};
+
+static uint32_t test_values_32[] = {
+ 0, 1, 1024, 12345, 32000, UINT32_MAX / 2, UINT32_MAX / 2 + 1,
+ UINT32_MAX - 1, UINT32_MAX
+};
+
+static uint64_t test_values_64[] = {
+ 0, 1, 1024, 12345, 32000, 32000000, 32000000001, UINT64_MAX / 2,
+ UINT64_MAX / 2 + 1, UINT64_MAX - 1, UINT64_MAX
+};
+
+static int test_binary_op(unsigned int (*op) (unsigned int a, unsigned int b),
+ const char *op_name, unsigned int a, unsigned int b,
+ int is_true)
+{
+ if (is_true && !TEST_uint_eq(op(a, b), CONSTTIME_TRUE))
+ return 0;
+ if (!is_true && !TEST_uint_eq(op(a, b), CONSTTIME_FALSE))
+ return 0;
+ return 1;
+}
+
+static int test_binary_op_8(unsigned
+ char (*op) (unsigned int a, unsigned int b),
+ const char *op_name, unsigned int a,
+ unsigned int b, int is_true)
+{
+ if (is_true && !TEST_uint_eq(op(a, b), CONSTTIME_TRUE_8))
+ return 0;
+ if (!is_true && !TEST_uint_eq(op(a, b), CONSTTIME_FALSE_8))
+ return 0;
+ return 1;
+}
+
+static int test_binary_op_s(size_t (*op) (size_t a, size_t b),
+ const char *op_name, size_t a, size_t b,
+ int is_true)
+{
+ if (is_true && !TEST_size_t_eq(op(a,b), CONSTTIME_TRUE_S))
+ return 0;
+ if (!is_true && !TEST_uint_eq(op(a,b), CONSTTIME_FALSE_S))
+ return 0;
+ return 1;
+}
+
+static int test_binary_op_64(uint64_t (*op)(uint64_t a, uint64_t b),
+ const char *op_name, uint64_t a, uint64_t b,
+ int is_true)
+{
+ uint64_t c = op(a, b);
+
+ if (is_true && c != CONSTTIME_TRUE_64) {
+ TEST_error("TRUE %s op failed", op_name);
+ BIO_printf(bio_err, "a=%jx b=%jx\n", a, b);
+ return 0;
+ } else if (!is_true && c != CONSTTIME_FALSE_64) {
+ TEST_error("FALSE %s op failed", op_name);
+ BIO_printf(bio_err, "a=%jx b=%jx\n", a, b);
+ return 0;
+ }
+ return 1;
+}
+
+static int test_is_zero(int i)
+{
+ unsigned int a = test_values[i];
+
+ if (a == 0 && !TEST_uint_eq(constant_time_is_zero(a), CONSTTIME_TRUE))
+ return 0;
+ if (a != 0 && !TEST_uint_eq(constant_time_is_zero(a), CONSTTIME_FALSE))
+ return 0;
+ return 1;
+}
+
+static int test_is_zero_8(int i)
+{
+ unsigned int a = test_values_8[i];
+
+ if (a == 0 && !TEST_uint_eq(constant_time_is_zero_8(a), CONSTTIME_TRUE_8))
+ return 0;
+ if (a != 0 && !TEST_uint_eq(constant_time_is_zero_8(a), CONSTTIME_FALSE_8))
+ return 0;
+ return 1;
+}
+
+static int test_is_zero_32(int i)
+{
+ uint32_t a = test_values_32[i];
+
+ if (a == 0 && !TEST_true(constant_time_is_zero_32(a) == CONSTTIME_TRUE_32))
+ return 0;
+ if (a != 0 && !TEST_true(constant_time_is_zero_32(a) == CONSTTIME_FALSE_32))
+ return 0;
+ return 1;
+}
+
+static int test_is_zero_s(int i)
+{
+ size_t a = test_values_s[i];
+
+ if (a == 0 && !TEST_size_t_eq(constant_time_is_zero_s(a), CONSTTIME_TRUE_S))
+ return 0;
+ if (a != 0 && !TEST_uint_eq(constant_time_is_zero_s(a), CONSTTIME_FALSE_S))
+ return 0;
+ return 1;
+}
+
+static int test_select(unsigned int a, unsigned int b)
+{
+ if (!TEST_uint_eq(constant_time_select(CONSTTIME_TRUE, a, b), a))
+ return 0;
+ if (!TEST_uint_eq(constant_time_select(CONSTTIME_FALSE, a, b), b))
+ return 0;
+ return 1;
+}
+
+static int test_select_8(unsigned char a, unsigned char b)
+{
+ if (!TEST_uint_eq(constant_time_select_8(CONSTTIME_TRUE_8, a, b), a))
+ return 0;
+ if (!TEST_uint_eq(constant_time_select_8(CONSTTIME_FALSE_8, a, b), b))
+ return 0;
+ return 1;
+}
+
+static int test_select_32(uint32_t a, uint32_t b)
+{
+ if (!TEST_true(constant_time_select_32(CONSTTIME_TRUE_32, a, b) == a))
+ return 0;
+ if (!TEST_true(constant_time_select_32(CONSTTIME_FALSE_32, a, b) == b))
+ return 0;
+ return 1;
+}
+
+static int test_select_s(size_t a, size_t b)
+{
+ if (!TEST_uint_eq(constant_time_select_s(CONSTTIME_TRUE_S, a, b), a))
+ return 0;
+ if (!TEST_uint_eq(constant_time_select_s(CONSTTIME_FALSE_S, a, b), b))
+ return 0;
+ return 1;
+}
+
+static int test_select_64(uint64_t a, uint64_t b)
+{
+ uint64_t selected = constant_time_select_64(CONSTTIME_TRUE_64, a, b);
+
+ if (selected != a) {
+ TEST_error("test_select_64 TRUE failed");
+ BIO_printf(bio_err, "a=%jx b=%jx got %jx wanted a\n", a, b, selected);
+ return 0;
+ }
+ selected = constant_time_select_64(CONSTTIME_FALSE_64, a, b);
+ if (selected != b) {
+ BIO_printf(bio_err, "a=%jx b=%jx got %jx wanted b\n", a, b, selected);
+ return 0;
+ }
+ return 1;
+}
+
+static int test_select_int(int a, int b)
+{
+ if (!TEST_int_eq(constant_time_select_int(CONSTTIME_TRUE, a, b), a))
+ return 0;
+ if (!TEST_int_eq(constant_time_select_int(CONSTTIME_FALSE, a, b), b))
+ return 0;
+ return 1;
+}
+
+static int test_eq_int_8(int a, int b)
+{
+ if (a == b && !TEST_int_eq(constant_time_eq_int_8(a, b), CONSTTIME_TRUE_8))
+ return 0;
+ if (a != b && !TEST_int_eq(constant_time_eq_int_8(a, b), CONSTTIME_FALSE_8))
+ return 0;
+ return 1;
+}
+
+static int test_eq_s(size_t a, size_t b)
+{
+ if (a == b && !TEST_size_t_eq(constant_time_eq_s(a, b), CONSTTIME_TRUE_S))
+ return 0;
+ if (a != b && !TEST_int_eq(constant_time_eq_s(a, b), CONSTTIME_FALSE_S))
+ return 0;
+ return 1;
+}
+
+static int test_eq_int(int a, int b)
+{
+ if (a == b && !TEST_uint_eq(constant_time_eq_int(a, b), CONSTTIME_TRUE))
+ return 0;
+ if (a != b && !TEST_uint_eq(constant_time_eq_int(a, b), CONSTTIME_FALSE))
+ return 0;
+ return 1;
+}
+
+static int test_sizeofs(void)
+{
+ if (!TEST_uint_eq(OSSL_NELEM(test_values), OSSL_NELEM(test_values_s)))
+ return 0;
+ return 1;
+}
+
+static int test_binops(int i)
+{
+ unsigned int a = test_values[i];
+ int j;
+ int ret = 1;
+
+ for (j = 0; j < (int)OSSL_NELEM(test_values); ++j) {
+ unsigned int b = test_values[j];
+
+ if (!test_select(a, b)
+ || !test_binary_op(&constant_time_lt, "ct_lt",
+ a, b, a < b)
+ || !test_binary_op(&constant_time_lt, "constant_time_lt",
+ b, a, b < a)
+ || !test_binary_op(&constant_time_ge, "constant_time_ge",
+ a, b, a >= b)
+ || !test_binary_op(&constant_time_ge, "constant_time_ge",
+ b, a, b >= a)
+ || !test_binary_op(&constant_time_eq, "constant_time_eq",
+ a, b, a == b)
+ || !test_binary_op(&constant_time_eq, "constant_time_eq",
+ b, a, b == a))
+ ret = 0;
+ }
+ return ret;
+}
+
+static int test_binops_8(int i)
+{
+ unsigned int a = test_values_8[i];
+ int j;
+ int ret = 1;
+
+ for (j = 0; j < (int)OSSL_NELEM(test_values_8); ++j) {
+ unsigned int b = test_values_8[j];
+
+ if (!test_binary_op_8(&constant_time_lt_8, "constant_time_lt_8",
+ a, b, a < b)
+ || !test_binary_op_8(&constant_time_lt_8, "constant_time_lt_8",
+ b, a, b < a)
+ || !test_binary_op_8(&constant_time_ge_8, "constant_time_ge_8",
+ a, b, a >= b)
+ || !test_binary_op_8(&constant_time_ge_8, "constant_time_ge_8",
+ b, a, b >= a)
+ || !test_binary_op_8(&constant_time_eq_8, "constant_time_eq_8",
+ a, b, a == b)
+ || !test_binary_op_8(&constant_time_eq_8, "constant_time_eq_8",
+ b, a, b == a))
+ ret = 0;
+ }
+ return ret;
+}
+
+static int test_binops_s(int i)
+{
+ size_t a = test_values_s[i];
+ int j;
+ int ret = 1;
+
+ for (j = 0; j < (int)OSSL_NELEM(test_values_s); ++j) {
+ size_t b = test_values_s[j];
+
+ if (!test_select_s(a, b)
+ || !test_eq_s(a, b)
+ || !test_binary_op_s(&constant_time_lt_s, "constant_time_lt_s",
+ a, b, a < b)
+ || !test_binary_op_s(&constant_time_lt_s, "constant_time_lt_s",
+ b, a, b < a)
+ || !test_binary_op_s(&constant_time_ge_s, "constant_time_ge_s",
+ a, b, a >= b)
+ || !test_binary_op_s(&constant_time_ge_s, "constant_time_ge_s",
+ b, a, b >= a)
+ || !test_binary_op_s(&constant_time_eq_s, "constant_time_eq_s",
+ a, b, a == b)
+ || !test_binary_op_s(&constant_time_eq_s, "constant_time_eq_s",
+ b, a, b == a))
+ ret = 0;
+ }
+ return ret;
+}
+
+static int test_signed(int i)
+{
+ int c = signed_test_values[i];
+ unsigned int j;
+ int ret = 1;
+
+ for (j = 0; j < OSSL_NELEM(signed_test_values); ++j) {
+ int d = signed_test_values[j];
+
+ if (!test_select_int(c, d)
+ || !test_eq_int(c, d)
+ || !test_eq_int_8(c, d))
+ ret = 0;
+ }
+ return ret;
+}
+
+static int test_8values(int i)
+{
+ unsigned char e = test_values_8[i];
+ unsigned int j;
+ int ret = 1;
+
+ for (j = 0; j < sizeof(test_values_8); ++j) {
+ unsigned char f = test_values_8[j];
+
+ if (!test_select_8(e, f))
+ ret = 0;
+ }
+ return ret;
+}
+
+static int test_32values(int i)
+{
+ uint32_t e = test_values_32[i];
+ size_t j;
+ int ret = 1;
+
+ for (j = 0; j < OSSL_NELEM(test_values_32); j++) {
+ uint32_t f = test_values_32[j];
+
+ if (!test_select_32(e, f))
+ ret = 0;
+ }
+ return ret;
+}
+
+static int test_64values(int i)
+{
+ uint64_t g = test_values_64[i];
+ int j, ret = 1;
+
+ for (j = i + 1; j < (int)OSSL_NELEM(test_values_64); j++) {
+ uint64_t h = test_values_64[j];
+
+ if (!test_binary_op_64(&constant_time_lt_64, "constant_time_lt_64",
+ g, h, g < h)
+ || !test_select_64(g, h)) {
+ TEST_info("test_64values failed i=%d j=%d", i, j);
+ ret = 0;
+ }
+ }
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_sizeofs);
+ ADD_ALL_TESTS(test_is_zero, OSSL_NELEM(test_values));
+ ADD_ALL_TESTS(test_is_zero_8, OSSL_NELEM(test_values_8));
+ ADD_ALL_TESTS(test_is_zero_32, OSSL_NELEM(test_values_32));
+ ADD_ALL_TESTS(test_is_zero_s, OSSL_NELEM(test_values_s));
+ ADD_ALL_TESTS(test_binops, OSSL_NELEM(test_values));
+ ADD_ALL_TESTS(test_binops_8, OSSL_NELEM(test_values_8));
+ ADD_ALL_TESTS(test_binops_s, OSSL_NELEM(test_values_s));
+ ADD_ALL_TESTS(test_signed, OSSL_NELEM(signed_test_values));
+ ADD_ALL_TESTS(test_8values, OSSL_NELEM(test_values_8));
+ ADD_ALL_TESTS(test_32values, OSSL_NELEM(test_values_32));
+ ADD_ALL_TESTS(test_64values, OSSL_NELEM(test_values_64));
+ return 1;
+}
diff --git a/test/context_internal_test.c b/test/context_internal_test.c
new file mode 100644
index 000000000000..4c02f601cc52
--- /dev/null
+++ b/test/context_internal_test.c
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Internal tests for the OpenSSL library context */
+
+#include "internal/cryptlib.h"
+#include "testutil.h"
+
+/*
+ * Everything between BEGIN EXAMPLE and END EXAMPLE is copied from
+ * doc/internal/man3/ossl_lib_ctx_get_data.pod
+ */
+
+/*
+ * ======================================================================
+ * BEGIN EXAMPLE
+ */
+
+typedef struct foo_st {
+ int i;
+ void *data;
+} FOO;
+
+static void *foo_new(OSSL_LIB_CTX *ctx)
+{
+ FOO *ptr = OPENSSL_zalloc(sizeof(*ptr));
+ if (ptr != NULL)
+ ptr->i = 42;
+ return ptr;
+}
+static void foo_free(void *ptr)
+{
+ OPENSSL_free(ptr);
+}
+static const OSSL_LIB_CTX_METHOD foo_method = {
+ OSSL_LIB_CTX_METHOD_DEFAULT_PRIORITY,
+ foo_new,
+ foo_free
+};
+
+/*
+ * END EXAMPLE
+ * ======================================================================
+ */
+
+static int test_context(OSSL_LIB_CTX *ctx)
+{
+ FOO *data = NULL;
+
+ return TEST_ptr(data = ossl_lib_ctx_get_data(ctx, 0, &foo_method))
+ /* OPENSSL_zalloc in foo_new() initialized it to zero */
+ && TEST_int_eq(data->i, 42);
+}
+
+static int test_app_context(void)
+{
+ OSSL_LIB_CTX *ctx = NULL;
+ int result =
+ TEST_ptr(ctx = OSSL_LIB_CTX_new())
+ && test_context(ctx);
+
+ OSSL_LIB_CTX_free(ctx);
+ return result;
+}
+
+static int test_def_context(void)
+{
+ return test_context(NULL);
+}
+
+static int test_set0_default(void)
+{
+ OSSL_LIB_CTX *global = OSSL_LIB_CTX_get0_global_default();
+ OSSL_LIB_CTX *local = OSSL_LIB_CTX_new();
+ OSSL_LIB_CTX *prev;
+ int testresult = 0;
+ FOO *data = NULL;
+
+ if (!TEST_ptr(global)
+ || !TEST_ptr(local)
+ || !TEST_ptr_eq(global, OSSL_LIB_CTX_set0_default(NULL))
+ || !TEST_ptr(data = ossl_lib_ctx_get_data(local, 0, &foo_method)))
+ goto err;
+
+ /* Set local "i" value to 43. Global "i" should be 42 */
+ data->i++;
+ if (!TEST_int_eq(data->i, 43))
+ goto err;
+
+ /* The default context should still be the "global" default */
+ if (!TEST_ptr(data = ossl_lib_ctx_get_data(NULL, 0, &foo_method))
+ || !TEST_int_eq(data->i, 42))
+ goto err;
+
+ /* Check we can change the local default context */
+ if (!TEST_ptr(prev = OSSL_LIB_CTX_set0_default(local))
+ || !TEST_ptr_eq(global, prev)
+ || !TEST_ptr(data = ossl_lib_ctx_get_data(NULL, 0, &foo_method))
+ || !TEST_int_eq(data->i, 43))
+ goto err;
+
+ /* Calling OSSL_LIB_CTX_set0_default() with a NULL should be a no-op */
+ if (!TEST_ptr_eq(local, OSSL_LIB_CTX_set0_default(NULL))
+ || !TEST_ptr(data = ossl_lib_ctx_get_data(NULL, 0, &foo_method))
+ || !TEST_int_eq(data->i, 43))
+ goto err;
+
+ /* Global default should be unchanged */
+ if (!TEST_ptr_eq(global, OSSL_LIB_CTX_get0_global_default()))
+ goto err;
+
+ /* Check we can swap back to the global default */
+ if (!TEST_ptr(prev = OSSL_LIB_CTX_set0_default(global))
+ || !TEST_ptr_eq(local, prev)
+ || !TEST_ptr(data = ossl_lib_ctx_get_data(NULL, 0, &foo_method))
+ || !TEST_int_eq(data->i, 42))
+ goto err;
+
+ testresult = 1;
+ err:
+ OSSL_LIB_CTX_free(local);
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_app_context);
+ ADD_TEST(test_def_context);
+ ADD_TEST(test_set0_default);
+ return 1;
+}
diff --git a/test/crltest.c b/test/crltest.c
new file mode 100644
index 000000000000..d17fac43f82a
--- /dev/null
+++ b/test/crltest.c
@@ -0,0 +1,413 @@
+/*
+ * Copyright 2015-2022 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/nelem.h"
+#include <string.h>
+#include <openssl/bio.h>
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/pem.h>
+#include <openssl/x509.h>
+
+#include "testutil.h"
+
+#define PARAM_TIME 1474934400 /* Sep 27th, 2016 */
+
+static const char *kCRLTestRoot[] = {
+ "-----BEGIN CERTIFICATE-----\n",
+ "MIIDbzCCAlegAwIBAgIJAODri7v0dDUFMA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV\n",
+ "BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW\n",
+ "aWV3MRIwEAYDVQQKDAlCb3JpbmdTU0wwHhcNMTYwOTI2MTUwNjI2WhcNMjYwOTI0\n",
+ "MTUwNjI2WjBOMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQG\n",
+ "A1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJQm9yaW5nU1NMMIIBIjANBgkq\n",
+ "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo16WiLWZuaymsD8n5SKPmxV1y6jjgr3B\n",
+ "S/dUBpbrzd1aeFzNlI8l2jfAnzUyp+I21RQ+nh/MhqjGElkTtK9xMn1Y+S9GMRh+\n",
+ "5R/Du0iCb1tCZIPY07Tgrb0KMNWe0v2QKVVruuYSgxIWodBfxlKO64Z8AJ5IbnWp\n",
+ "uRqO6rctN9qUoMlTIAB6dL4G0tDJ/PGFWOJYwOMEIX54bly2wgyYJVBKiRRt4f7n\n",
+ "8H922qmvPNA9idmX9G1VAtgV6x97XXi7ULORIQvn9lVQF6nTYDBJhyuPB+mLThbL\n",
+ "P2o9orxGx7aCtnnBZUIxUvHNOI0FaSaZH7Fi0xsZ/GkG2HZe7ImPJwIDAQABo1Aw\n",
+ "TjAdBgNVHQ4EFgQUWPt3N5cZ/CRvubbrkqfBnAqhq94wHwYDVR0jBBgwFoAUWPt3\n",
+ "N5cZ/CRvubbrkqfBnAqhq94wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC\n",
+ "AQEAORu6M0MOwXy+3VEBwNilfTxyqDfruQsc1jA4PT8Oe8zora1WxE1JB4q2FJOz\n",
+ "EAuM3H/NXvEnBuN+ITvKZAJUfm4NKX97qmjMJwLKWe1gVv+VQTr63aR7mgWJReQN\n",
+ "XdMztlVeZs2dppV6uEg3ia1X0G7LARxGpA9ETbMyCpb39XxlYuTClcbA5ftDN99B\n",
+ "3Xg9KNdd++Ew22O3HWRDvdDpTO/JkzQfzi3sYwUtzMEonENhczJhGf7bQMmvL/w5\n",
+ "24Wxj4Z7KzzWIHsNqE/RIs6RV3fcW61j/mRgW2XyoWnMVeBzvcJr9NXp4VQYmFPw\n",
+ "amd8GKMZQvP0ufGnUn7D7uartA==\n",
+ "-----END CERTIFICATE-----\n",
+ NULL
+};
+
+static const char *kCRLTestLeaf[] = {
+ "-----BEGIN CERTIFICATE-----\n",
+ "MIIDkDCCAnigAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwTjELMAkGA1UEBhMCVVMx\n",
+ "EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEjAQ\n",
+ "BgNVBAoMCUJvcmluZ1NTTDAeFw0xNjA5MjYxNTA4MzFaFw0xNzA5MjYxNTA4MzFa\n",
+ "MEsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRIwEAYDVQQKDAlC\n",
+ "b3JpbmdTU0wxEzARBgNVBAMMCmJvcmluZy5zc2wwggEiMA0GCSqGSIb3DQEBAQUA\n",
+ "A4IBDwAwggEKAoIBAQDc5v1S1M0W+QWM+raWfO0LH8uvqEwuJQgODqMaGnSlWUx9\n",
+ "8iQcnWfjyPja3lWg9K62hSOFDuSyEkysKHDxijz5R93CfLcfnVXjWQDJe7EJTTDP\n",
+ "ozEvxN6RjAeYv7CF000euYr3QT5iyBjg76+bon1p0jHZBJeNPP1KqGYgyxp+hzpx\n",
+ "e0gZmTlGAXd8JQK4v8kpdYwD6PPifFL/jpmQpqOtQmH/6zcLjY4ojmqpEdBqIKIX\n",
+ "+saA29hMq0+NK3K+wgg31RU+cVWxu3tLOIiesETkeDgArjWRS1Vkzbi4v9SJxtNu\n",
+ "OZuAxWiynRJw3JwH/OFHYZIvQqz68ZBoj96cepjPAgMBAAGjezB5MAkGA1UdEwQC\n",
+ "MAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRl\n",
+ "MB0GA1UdDgQWBBTGn0OVVh/aoYt0bvEKG+PIERqnDzAfBgNVHSMEGDAWgBRY+3c3\n",
+ "lxn8JG+5tuuSp8GcCqGr3jANBgkqhkiG9w0BAQsFAAOCAQEAd2nM8gCQN2Dc8QJw\n",
+ "XSZXyuI3DBGGCHcay/3iXu0JvTC3EiQo8J6Djv7WLI0N5KH8mkm40u89fJAB2lLZ\n",
+ "ShuHVtcC182bOKnePgwp9CNwQ21p0rDEu/P3X46ZvFgdxx82E9xLa0tBB8PiPDWh\n",
+ "lV16jbaKTgX5AZqjnsyjR5o9/mbZVupZJXx5Syq+XA8qiJfstSYJs4KyKK9UOjql\n",
+ "ICkJVKpi2ahDBqX4MOH4SLfzVk8pqSpviS6yaA1RXqjpkxiN45WWaXDldVHMSkhC\n",
+ "5CNXsXi4b1nAntu89crwSLA3rEwzCWeYj+BX7e1T9rr3oJdwOU/2KQtW1js1yQUG\n",
+ "tjJMFw==\n",
+ "-----END CERTIFICATE-----\n",
+ NULL
+};
+
+static const char *kBasicCRL[] = {
+ "-----BEGIN X509 CRL-----\n",
+ "MIIBpzCBkAIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n",
+ "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n",
+ "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoA4wDDAKBgNV\n",
+ "HRQEAwIBATANBgkqhkiG9w0BAQsFAAOCAQEAnrBKKgvd9x9zwK9rtUvVeFeJ7+LN\n",
+ "ZEAc+a5oxpPNEsJx6hXoApYEbzXMxuWBQoCs5iEBycSGudct21L+MVf27M38KrWo\n",
+ "eOkq0a2siqViQZO2Fb/SUFR0k9zb8xl86Zf65lgPplALun0bV/HT7MJcl04Tc4os\n",
+ "dsAReBs5nqTGNEd5AlC1iKHvQZkM//MD51DspKnDpsDiUVi54h9C1SpfZmX8H2Vv\n",
+ "diyu0fZ/bPAM3VAGawatf/SyWfBMyKpoPXEG39oAzmjjOj8en82psn7m474IGaho\n",
+ "/vBbhl1ms5qQiLYPjm4YELtnXQoFyC72tBjbdFd/ZE9k4CNKDbxFUXFbkw==\n",
+ "-----END X509 CRL-----\n",
+ NULL
+};
+
+static const char *kRevokedCRL[] = {
+ "-----BEGIN X509 CRL-----\n",
+ "MIIBvjCBpwIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n",
+ "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n",
+ "Qm9yaW5nU1NMFw0xNjA5MjYxNTEyNDRaFw0xNjEwMjYxNTEyNDRaMBUwEwICEAAX\n",
+ "DTE2MDkyNjE1MTIyNlqgDjAMMAoGA1UdFAQDAgECMA0GCSqGSIb3DQEBCwUAA4IB\n",
+ "AQCUGaM4DcWzlQKrcZvI8TMeR8BpsvQeo5BoI/XZu2a8h//PyRyMwYeaOM+3zl0d\n",
+ "sjgCT8b3C1FPgT+P2Lkowv7rJ+FHJRNQkogr+RuqCSPTq65ha4WKlRGWkMFybzVH\n",
+ "NloxC+aU3lgp/NlX9yUtfqYmJek1CDrOOGPrAEAwj1l/BUeYKNGqfBWYJQtPJu+5\n",
+ "OaSvIYGpETCZJscUWODmLEb/O3DM438vLvxonwGqXqS0KX37+CHpUlyhnSovxXxp\n",
+ "Pz4aF+L7OtczxL0GYtD2fR9B7TDMqsNmHXgQrixvvOY7MUdLGbd4RfJL3yA53hyO\n",
+ "xzfKY2TzxLiOmctG0hXFkH5J\n",
+ "-----END X509 CRL-----\n",
+ NULL
+};
+
+static const char *kBadIssuerCRL[] = {
+ "-----BEGIN X509 CRL-----\n",
+ "MIIBwjCBqwIBATANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJVUzETMBEGA1UE\n",
+ "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEWMBQGA1UECgwN\n",
+ "Tm90IEJvcmluZ1NTTBcNMTYwOTI2MTUxMjQ0WhcNMTYxMDI2MTUxMjQ0WjAVMBMC\n",
+ "AhAAFw0xNjA5MjYxNTEyMjZaoA4wDDAKBgNVHRQEAwIBAjANBgkqhkiG9w0BAQsF\n",
+ "AAOCAQEAlBmjOA3Fs5UCq3GbyPEzHkfAabL0HqOQaCP12btmvIf/z8kcjMGHmjjP\n",
+ "t85dHbI4Ak/G9wtRT4E/j9i5KML+6yfhRyUTUJKIK/kbqgkj06uuYWuFipURlpDB\n",
+ "cm81RzZaMQvmlN5YKfzZV/clLX6mJiXpNQg6zjhj6wBAMI9ZfwVHmCjRqnwVmCUL\n",
+ "TybvuTmkryGBqREwmSbHFFjg5ixG/ztwzON/Ly78aJ8Bql6ktCl9+/gh6VJcoZ0q\n",
+ "L8V8aT8+Ghfi+zrXM8S9BmLQ9n0fQe0wzKrDZh14EK4sb7zmOzFHSxm3eEXyS98g\n",
+ "Od4cjsc3ymNk88S4jpnLRtIVxZB+SQ==\n",
+ "-----END X509 CRL-----\n",
+ NULL
+};
+
+/*
+ * This is kBasicCRL but with a critical issuing distribution point
+ * extension.
+ */
+static const char *kKnownCriticalCRL[] = {
+ "-----BEGIN X509 CRL-----\n",
+ "MIIBujCBowIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n",
+ "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n",
+ "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoCEwHzAKBgNV\n",
+ "HRQEAwIBATARBgNVHRwBAf8EBzAFoQMBAf8wDQYJKoZIhvcNAQELBQADggEBAA+3\n",
+ "i+5e5Ub8sccfgOBs6WVJFI9c8gvJjrJ8/dYfFIAuCyeocs7DFXn1n13CRZ+URR/Q\n",
+ "mVWgU28+xeusuSPYFpd9cyYTcVyNUGNTI3lwgcE/yVjPaOmzSZKdPakApRxtpKKQ\n",
+ "NN/56aQz3bnT/ZSHQNciRB8U6jiD9V30t0w+FDTpGaG+7bzzUH3UVF9xf9Ctp60A\n",
+ "3mfLe0scas7owSt4AEFuj2SPvcE7yvdOXbu+IEv21cEJUVExJAbhvIweHXh6yRW+\n",
+ "7VVeiNzdIjkZjyTmAzoXGha4+wbxXyBRbfH+XWcO/H+8nwyG8Gktdu2QB9S9nnIp\n",
+ "o/1TpfOMSGhMyMoyPrk=\n",
+ "-----END X509 CRL-----\n",
+ NULL
+};
+
+/*
+ * kUnknownCriticalCRL is kBasicCRL but with an unknown critical extension.
+ */
+static const char *kUnknownCriticalCRL[] = {
+ "-----BEGIN X509 CRL-----\n",
+ "MIIBvDCBpQIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n",
+ "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n",
+ "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoCMwITAKBgNV\n",
+ "HRQEAwIBATATBgwqhkiG9xIEAYS3CQABAf8EADANBgkqhkiG9w0BAQsFAAOCAQEA\n",
+ "GvBP0xqL509InMj/3493YVRV+ldTpBv5uTD6jewzf5XdaxEQ/VjTNe5zKnxbpAib\n",
+ "Kf7cwX0PMSkZjx7k7kKdDlEucwVvDoqC+O9aJcqVmM6GDyNb9xENxd0XCXja6MZC\n",
+ "yVgP4AwLauB2vSiEprYJyI1APph3iAEeDm60lTXX/wBM/tupQDDujKh2GPyvBRfJ\n",
+ "+wEDwGg3ICwvu4gO4zeC5qnFR+bpL9t5tOMAQnVZ0NWv+k7mkd2LbHdD44dxrfXC\n",
+ "nhtfERx99SDmC/jtUAJrGhtCO8acr7exCeYcduN7KKCm91OeCJKK6OzWst0Og1DB\n",
+ "kwzzU2rL3G65CrZ7H0SZsQ==\n",
+ "-----END X509 CRL-----\n",
+ NULL
+};
+
+/*
+ * kUnknownCriticalCRL2 is kBasicCRL but with a critical issuing distribution
+ * point extension followed by an unknown critical extension
+ */
+static const char *kUnknownCriticalCRL2[] = {
+ "-----BEGIN X509 CRL-----\n",
+ "MIIBzzCBuAIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJVUzETMBEGA1UE\n",
+ "CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzESMBAGA1UECgwJ\n",
+ "Qm9yaW5nU1NMFw0xNjA5MjYxNTEwNTVaFw0xNjEwMjYxNTEwNTVaoDYwNDAKBgNV\n",
+ "HRQEAwIBATARBgNVHRwBAf8EBzAFoQMBAf8wEwYMKoZIhvcSBAGEtwkAAQH/BAAw\n",
+ "DQYJKoZIhvcNAQELBQADggEBACTcpQC8jXL12JN5YzOcQ64ubQIe0XxRAd30p7qB\n",
+ "BTXGpgqBjrjxRfLms7EBYodEXB2oXMsDq3km0vT1MfYdsDD05S+SQ9CDsq/pUfaC\n",
+ "E2WNI5p8WircRnroYvbN2vkjlRbMd1+yNITohXYXCJwjEOAWOx3XIM10bwPYBv4R\n",
+ "rDobuLHoMgL3yHgMHmAkP7YpkBucNqeBV8cCdeAZLuhXFWi6yfr3r/X18yWbC/r2\n",
+ "2xXdkrSqXLFo7ToyP8YKTgiXpya4x6m53biEYwa2ULlas0igL6DK7wjYZX95Uy7H\n",
+ "GKljn9weIYiMPV/BzGymwfv2EW0preLwtyJNJPaxbdin6Jc=\n",
+ "-----END X509 CRL-----\n",
+ NULL
+};
+
+static const char **unknown_critical_crls[] = {
+ kUnknownCriticalCRL, kUnknownCriticalCRL2
+};
+
+static X509 *test_root = NULL;
+static X509 *test_leaf = NULL;
+
+/*
+ * Glue an array of strings together. Return a BIO and put the string
+ * into |*out| so we can free it.
+ */
+static BIO *glue2bio(const char **pem, char **out)
+{
+ size_t s = 0;
+
+ *out = glue_strings(pem, &s);
+ return BIO_new_mem_buf(*out, s);
+}
+
+/*
+ * Create a CRL from an array of strings.
+ */
+static X509_CRL *CRL_from_strings(const char **pem)
+{
+ X509_CRL *crl;
+ char *p;
+ BIO *b = glue2bio(pem, &p);
+
+ if (b == NULL) {
+ OPENSSL_free(p);
+ return NULL;
+ }
+
+ crl = PEM_read_bio_X509_CRL(b, NULL, NULL, NULL);
+
+ OPENSSL_free(p);
+ BIO_free(b);
+ return crl;
+}
+
+/*
+ * Create an X509 from an array of strings.
+ */
+static X509 *X509_from_strings(const char **pem)
+{
+ X509 *x;
+ char *p;
+ BIO *b = glue2bio(pem, &p);
+
+ if (b == NULL) {
+ OPENSSL_free(p);
+ return NULL;
+ }
+
+ x = PEM_read_bio_X509(b, NULL, NULL, NULL);
+
+ OPENSSL_free(p);
+ BIO_free(b);
+ return x;
+}
+
+/*
+ * Verify |leaf| certificate (chained up to |root|). |crls| if
+ * not NULL, is a list of CRLs to include in the verification. It is
+ * also free'd before returning, which is kinda yucky but convenient.
+ * Returns a value from X509_V_ERR_xxx or X509_V_OK.
+ */
+static int verify(X509 *leaf, X509 *root, STACK_OF(X509_CRL) *crls,
+ unsigned long flags)
+{
+ X509_STORE_CTX *ctx = X509_STORE_CTX_new();
+ X509_STORE *store = X509_STORE_new();
+ X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
+ STACK_OF(X509) *roots = sk_X509_new_null();
+ int status = X509_V_ERR_UNSPECIFIED;
+
+ if (!TEST_ptr(ctx)
+ || !TEST_ptr(store)
+ || !TEST_ptr(param)
+ || !TEST_ptr(roots))
+ goto err;
+
+ /* Create a stack; upref the cert because we free it below. */
+ X509_up_ref(root);
+ if (!TEST_true(sk_X509_push(roots, root))
+ || !TEST_true(X509_STORE_CTX_init(ctx, store, leaf, NULL)))
+ goto err;
+ X509_STORE_CTX_set0_trusted_stack(ctx, roots);
+ X509_STORE_CTX_set0_crls(ctx, crls);
+ X509_VERIFY_PARAM_set_time(param, PARAM_TIME);
+ if (!TEST_long_eq((long)X509_VERIFY_PARAM_get_time(param), PARAM_TIME))
+ goto err;
+ X509_VERIFY_PARAM_set_depth(param, 16);
+ if (flags)
+ X509_VERIFY_PARAM_set_flags(param, flags);
+ X509_STORE_CTX_set0_param(ctx, param);
+ param = NULL;
+
+ ERR_clear_error();
+ status = X509_verify_cert(ctx) == 1 ? X509_V_OK
+ : X509_STORE_CTX_get_error(ctx);
+err:
+ sk_X509_pop_free(roots, X509_free);
+ sk_X509_CRL_pop_free(crls, X509_CRL_free);
+ X509_VERIFY_PARAM_free(param);
+ X509_STORE_CTX_free(ctx);
+ X509_STORE_free(store);
+ return status;
+}
+
+/*
+ * Create a stack of CRL's. Upref each one because we call pop_free on
+ * the stack and need to keep the CRL's around until the test exits.
+ * Yes this crashes on malloc failure; it forces us to debug.
+ */
+static STACK_OF(X509_CRL) *make_CRL_stack(X509_CRL *x1, X509_CRL *x2)
+{
+ STACK_OF(X509_CRL) *sk = sk_X509_CRL_new_null();
+
+ sk_X509_CRL_push(sk, x1);
+ X509_CRL_up_ref(x1);
+ if (x2 != NULL) {
+ sk_X509_CRL_push(sk, x2);
+ X509_CRL_up_ref(x2);
+ }
+ return sk;
+}
+
+static int test_basic_crl(void)
+{
+ X509_CRL *basic_crl = CRL_from_strings(kBasicCRL);
+ X509_CRL *revoked_crl = CRL_from_strings(kRevokedCRL);
+ int r;
+
+ r = TEST_ptr(basic_crl)
+ && TEST_ptr(revoked_crl)
+ && TEST_int_eq(verify(test_leaf, test_root,
+ make_CRL_stack(basic_crl, NULL),
+ X509_V_FLAG_CRL_CHECK), X509_V_OK)
+ && TEST_int_eq(verify(test_leaf, test_root,
+ make_CRL_stack(basic_crl, revoked_crl),
+ X509_V_FLAG_CRL_CHECK), X509_V_ERR_CERT_REVOKED);
+ X509_CRL_free(basic_crl);
+ X509_CRL_free(revoked_crl);
+ return r;
+}
+
+static int test_no_crl(void)
+{
+ return TEST_int_eq(verify(test_leaf, test_root, NULL,
+ X509_V_FLAG_CRL_CHECK),
+ X509_V_ERR_UNABLE_TO_GET_CRL);
+}
+
+static int test_bad_issuer_crl(void)
+{
+ X509_CRL *bad_issuer_crl = CRL_from_strings(kBadIssuerCRL);
+ int r;
+
+ r = TEST_ptr(bad_issuer_crl)
+ && TEST_int_eq(verify(test_leaf, test_root,
+ make_CRL_stack(bad_issuer_crl, NULL),
+ X509_V_FLAG_CRL_CHECK),
+ X509_V_ERR_UNABLE_TO_GET_CRL);
+ X509_CRL_free(bad_issuer_crl);
+ return r;
+}
+
+static int test_known_critical_crl(void)
+{
+ X509_CRL *known_critical_crl = CRL_from_strings(kKnownCriticalCRL);
+ int r;
+
+ r = TEST_ptr(known_critical_crl)
+ && TEST_int_eq(verify(test_leaf, test_root,
+ make_CRL_stack(known_critical_crl, NULL),
+ X509_V_FLAG_CRL_CHECK), X509_V_OK);
+ X509_CRL_free(known_critical_crl);
+ return r;
+}
+
+static int test_unknown_critical_crl(int n)
+{
+ X509_CRL *unknown_critical_crl = CRL_from_strings(unknown_critical_crls[n]);
+ int r;
+
+ r = TEST_ptr(unknown_critical_crl)
+ && TEST_int_eq(verify(test_leaf, test_root,
+ make_CRL_stack(unknown_critical_crl, NULL),
+ X509_V_FLAG_CRL_CHECK),
+ X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION);
+ X509_CRL_free(unknown_critical_crl);
+ return r;
+}
+
+static int test_reuse_crl(void)
+{
+ X509_CRL *reused_crl = CRL_from_strings(kBasicCRL);
+ char *p;
+ BIO *b = glue2bio(kRevokedCRL, &p);
+
+ if (b == NULL) {
+ OPENSSL_free(p);
+ X509_CRL_free(reused_crl);
+ return 0;
+ }
+
+ reused_crl = PEM_read_bio_X509_CRL(b, &reused_crl, NULL, NULL);
+
+ OPENSSL_free(p);
+ BIO_free(b);
+ X509_CRL_free(reused_crl);
+ return 1;
+}
+
+int setup_tests(void)
+{
+ if (!TEST_ptr(test_root = X509_from_strings(kCRLTestRoot))
+ || !TEST_ptr(test_leaf = X509_from_strings(kCRLTestLeaf)))
+ return 0;
+
+ ADD_TEST(test_no_crl);
+ ADD_TEST(test_basic_crl);
+ ADD_TEST(test_bad_issuer_crl);
+ ADD_TEST(test_known_critical_crl);
+ ADD_ALL_TESTS(test_unknown_critical_crl, OSSL_NELEM(unknown_critical_crls));
+ ADD_TEST(test_reuse_crl);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ X509_free(test_root);
+ X509_free(test_leaf);
+}
diff --git a/test/ct/log_list.cnf b/test/ct/log_list.cnf
new file mode 100644
index 000000000000..b723b8c9f691
--- /dev/null
+++ b/test/ct/log_list.cnf
@@ -0,0 +1,41 @@
+enabled_logs=test,pilot,aviator,rocketeer,digicert,certly,izempe,symantec,venafi
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+[test]
+description = https://github.com/google/certificate-transparency/tree/99218b6445906a81f219d84e9c6d2683e13e4e58/test/testdata
+key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmXg8sUUzwBYaWrRb+V0IopzQ6o3UyEJ04r5ZrRXGdpYM8K+hB0pXrGRLI0eeWz+3skXrS0IO83AhA3GpRL6s6w==
+
+[pilot]
+description = Google Pilot Log
+key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfahLEimAoz2t01p3uMziiLOl/fHTDM0YDOhBRuiBARsV4UvxG2LdNgoIGLrtCzWE0J5APC2em4JlvR8EEEFMoA==
+
+[aviator]
+description = Google Aviator log
+key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1/TMabLkDpCjiupacAlP7xNi0I1JYP8bQFAHDG1xhtolSY1l4QgNRzRrvSe8liE+NPWHdjGxfx3JhTsN9x8/6Q==
+
+[rocketeer]
+description = Google Rocketeer log
+key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIFsYyDzBi7MxCAC/oJBXK7dHjG+1aLCOkHjpoHPqTyghLpzA9BYbqvnV16mAw04vUjyYASVGJCUoI3ctBcJAeg==
+
+[digicert]
+description = DigiCert Log Server
+key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAkbFvhu7gkAW6MHSrBlpE1n4+HCFRkC5OLAjgqhkTH+/uzSfSl8ois8ZxAD2NgaTZe1M9akhYlrYkes4JECs6A==
+
+[certly]
+description = Certly.IO log
+key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECyPLhWKYYUgEc+tUXfPQB4wtGS2MNvXrjwFCCnyYJifBtd2Sk7Cu+Js9DNhMTh35FftHaHu6ZrclnNBKwmbbSA==
+
+[izempe]
+description = Izempe log
+key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ2Q5DC3cUBj4IQCiDu0s6j51up+TZAkAEcQRF6tczw90rLWXkJMAW7jr9yc92bIKgV8vDXU4lDeZHvYHduDuvg==
+
+[symantec]
+description = Symantec log
+key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEluqsHEYMG1XcDfy1lCdGV0JwOmkY4r87xNuroPS2bMBTP01CEDPwWJePa75y9CrsHEKqAy8afig1dpkIPSEUhg==
+
+[venafi]
+description = Venafi log
+key = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAolpIHxdSlTXLo1s6H1OCdpSj/4DyHDc8wLG9wVmLqy1lk9fz4ATVmm+/1iN2Nk8jmctUKK2MFUtlWXZBSpym97M7frGlSaQXUWyA3CqQUEuIJOmlEjKTBEiQAvpfDjCHjlV2Be4qTM6jamkJbiWtgnYPhJL6ONaGTiSPm7Byy57iaz/hbckldSOIoRhYBiMzeNoA0DiRZ9KmfSeXZ1rB8y8X5urSW+iBzf2SaOfzBvDpcoTuAaWx2DPazoOl28fP1hZ+kHUYvxbcMjttjauCFx+JII0dmuZNIwjfeG/GBb9frpSX219k1O4Wi6OEbHEr8at/XQ0y7gTikOxBn/s5wQIDAQAB
+
diff --git a/test/ct/tls1.sct b/test/ct/tls1.sct
new file mode 100644
index 000000000000..59362dcee1f4
--- /dev/null
+++ b/test/ct/tls1.sct
@@ -0,0 +1,12 @@
+Signed Certificate Timestamp:
+ Version : v1 (0x0)
+ Log ID : DF:1C:2E:C1:15:00:94:52:47:A9:61:68:32:5D:DC:5C:
+ 79:59:E8:F7:C6:D3:88:FC:00:2E:0B:BD:3F:74:D7:64
+ Timestamp : Apr 5 17:04:16.275 2013 GMT
+ Extensions: none
+ Signature : ecdsa-with-SHA256
+ 30:45:02:20:48:2F:67:51:AF:35:DB:A6:54:36:BE:1F:
+ D6:64:0F:3D:BF:9A:41:42:94:95:92:45:30:28:8F:A3:
+ E5:E2:3E:06:02:21:00:E4:ED:C0:DB:3A:C5:72:B1:E2:
+ F5:E8:AB:6A:68:06:53:98:7D:CF:41:02:7D:FE:FF:A1:
+ 05:51:9D:89:ED:BF:08 \ No newline at end of file
diff --git a/test/ct_test.c b/test/ct_test.c
new file mode 100644
index 000000000000..26d5bc108450
--- /dev/null
+++ b/test/ct_test.c
@@ -0,0 +1,527 @@
+/*
+ * Copyright 2016-2022 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 <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <openssl/ct.h>
+#include <openssl/err.h>
+#include <openssl/pem.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include "testutil.h"
+#include <openssl/crypto.h>
+
+#ifndef OPENSSL_NO_CT
+
+/* Used when declaring buffers to read text files into */
+# define CT_TEST_MAX_FILE_SIZE 8096
+
+static char *certs_dir = NULL;
+static char *ct_dir = NULL;
+
+typedef struct ct_test_fixture {
+ const char *test_case_name;
+ /* The current time in milliseconds */
+ uint64_t epoch_time_in_ms;
+ /* The CT log store to use during tests */
+ CTLOG_STORE* ctlog_store;
+ /* Set the following to test handling of SCTs in X509 certificates */
+ const char *certs_dir;
+ char *certificate_file;
+ char *issuer_file;
+ /* Expected number of SCTs */
+ int expected_sct_count;
+ /* Expected number of valid SCTS */
+ int expected_valid_sct_count;
+ /* Set the following to test handling of SCTs in TLS format */
+ const unsigned char *tls_sct_list;
+ size_t tls_sct_list_len;
+ STACK_OF(SCT) *sct_list;
+ /*
+ * A file to load the expected SCT text from.
+ * This text will be compared to the actual text output during the test.
+ * A maximum of |CT_TEST_MAX_FILE_SIZE| bytes will be read of this file.
+ */
+ const char *sct_dir;
+ const char *sct_text_file;
+ /* Whether to test the validity of the SCT(s) */
+ int test_validity;
+} CT_TEST_FIXTURE;
+
+static CT_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CT_TEST_FIXTURE *fixture = NULL;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ goto end;
+ fixture->test_case_name = test_case_name;
+ fixture->epoch_time_in_ms = 1580335307000ULL; /* Wed 29 Jan 2020 10:01:47 PM UTC */
+ if (!TEST_ptr(fixture->ctlog_store = CTLOG_STORE_new())
+ || !TEST_int_eq(
+ CTLOG_STORE_load_default_file(fixture->ctlog_store), 1))
+ goto end;
+ return fixture;
+
+end:
+ if (fixture != NULL)
+ CTLOG_STORE_free(fixture->ctlog_store);
+ OPENSSL_free(fixture);
+ TEST_error("Failed to setup");
+ return NULL;
+}
+
+static void tear_down(CT_TEST_FIXTURE *fixture)
+{
+ if (fixture != NULL) {
+ CTLOG_STORE_free(fixture->ctlog_store);
+ SCT_LIST_free(fixture->sct_list);
+ }
+ OPENSSL_free(fixture);
+}
+
+static X509 *load_pem_cert(const char *dir, const char *file)
+{
+ X509 *cert = NULL;
+ char *file_path = test_mk_file_path(dir, file);
+
+ if (file_path != NULL) {
+ BIO *cert_io = BIO_new_file(file_path, "r");
+
+ if (cert_io != NULL)
+ cert = PEM_read_bio_X509(cert_io, NULL, NULL, NULL);
+ BIO_free(cert_io);
+ }
+
+ OPENSSL_free(file_path);
+ return cert;
+}
+
+static int read_text_file(const char *dir, const char *file,
+ char *buffer, int buffer_length)
+{
+ int len = -1;
+ char *file_path = test_mk_file_path(dir, file);
+
+ if (file_path != NULL) {
+ BIO *file_io = BIO_new_file(file_path, "r");
+
+ if (file_io != NULL)
+ len = BIO_read(file_io, buffer, buffer_length);
+ BIO_free(file_io);
+ }
+
+ OPENSSL_free(file_path);
+ return len;
+}
+
+static int compare_sct_list_printout(STACK_OF(SCT) *sct,
+ const char *expected_output)
+{
+ BIO *text_buffer = NULL;
+ char *actual_output = NULL;
+ int result = 0;
+
+ if (!TEST_ptr(text_buffer = BIO_new(BIO_s_mem())))
+ goto end;
+
+ SCT_LIST_print(sct, text_buffer, 0, "\n", NULL);
+
+ /* Append \0 because we're about to use the buffer contents as a string. */
+ if (!TEST_true(BIO_write(text_buffer, "\0", 1)))
+ goto end;
+
+ BIO_get_mem_data(text_buffer, &actual_output);
+ if (!TEST_str_eq(actual_output, expected_output))
+ goto end;
+ result = 1;
+
+end:
+ BIO_free(text_buffer);
+ return result;
+}
+
+static int compare_extension_printout(X509_EXTENSION *extension,
+ const char *expected_output)
+{
+ BIO *text_buffer = NULL;
+ char *actual_output = NULL;
+ int result = 0;
+
+ if (!TEST_ptr(text_buffer = BIO_new(BIO_s_mem()))
+ || !TEST_true(X509V3_EXT_print(text_buffer, extension,
+ X509V3_EXT_DEFAULT, 0)))
+ goto end;
+
+ /* Append \n because it's easier to create files that end with one. */
+ if (!TEST_true(BIO_write(text_buffer, "\n", 1)))
+ goto end;
+
+ /* Append \0 because we're about to use the buffer contents as a string. */
+ if (!TEST_true(BIO_write(text_buffer, "\0", 1)))
+ goto end;
+
+ BIO_get_mem_data(text_buffer, &actual_output);
+ if (!TEST_str_eq(actual_output, expected_output))
+ goto end;
+
+ result = 1;
+
+end:
+ BIO_free(text_buffer);
+ return result;
+}
+
+static int assert_validity(CT_TEST_FIXTURE *fixture, STACK_OF(SCT) *scts,
+ CT_POLICY_EVAL_CTX *policy_ctx)
+{
+ int invalid_sct_count = 0;
+ int valid_sct_count = 0;
+ int i;
+
+ if (!TEST_int_ge(SCT_LIST_validate(scts, policy_ctx), 0))
+ return 0;
+
+ for (i = 0; i < sk_SCT_num(scts); ++i) {
+ SCT *sct_i = sk_SCT_value(scts, i);
+
+ switch (SCT_get_validation_status(sct_i)) {
+ case SCT_VALIDATION_STATUS_VALID:
+ ++valid_sct_count;
+ break;
+ case SCT_VALIDATION_STATUS_INVALID:
+ ++invalid_sct_count;
+ break;
+ case SCT_VALIDATION_STATUS_NOT_SET:
+ case SCT_VALIDATION_STATUS_UNKNOWN_LOG:
+ case SCT_VALIDATION_STATUS_UNVERIFIED:
+ case SCT_VALIDATION_STATUS_UNKNOWN_VERSION:
+ /* Ignore other validation statuses. */
+ break;
+ }
+ }
+
+ if (!TEST_int_eq(valid_sct_count, fixture->expected_valid_sct_count)) {
+ int unverified_sct_count = sk_SCT_num(scts) -
+ invalid_sct_count - valid_sct_count;
+
+ TEST_info("%d SCTs failed, %d SCTs unverified",
+ invalid_sct_count, unverified_sct_count);
+ return 0;
+ }
+
+ return 1;
+}
+
+static int execute_cert_test(CT_TEST_FIXTURE *fixture)
+{
+ int success = 0;
+ X509 *cert = NULL, *issuer = NULL;
+ STACK_OF(SCT) *scts = NULL;
+ SCT *sct = NULL;
+ char expected_sct_text[CT_TEST_MAX_FILE_SIZE];
+ int sct_text_len = 0;
+ unsigned char *tls_sct_list = NULL;
+ size_t tls_sct_list_len = 0;
+ CT_POLICY_EVAL_CTX *ct_policy_ctx = CT_POLICY_EVAL_CTX_new();
+
+ if (fixture->sct_text_file != NULL) {
+ sct_text_len = read_text_file(fixture->sct_dir, fixture->sct_text_file,
+ expected_sct_text,
+ CT_TEST_MAX_FILE_SIZE - 1);
+
+ if (!TEST_int_ge(sct_text_len, 0))
+ goto end;
+ expected_sct_text[sct_text_len] = '\0';
+ }
+
+ CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(
+ ct_policy_ctx, fixture->ctlog_store);
+
+ CT_POLICY_EVAL_CTX_set_time(ct_policy_ctx, fixture->epoch_time_in_ms);
+
+ if (fixture->certificate_file != NULL) {
+ int sct_extension_index;
+ int i;
+ X509_EXTENSION *sct_extension = NULL;
+
+ if (!TEST_ptr(cert = load_pem_cert(fixture->certs_dir,
+ fixture->certificate_file)))
+ goto end;
+
+ CT_POLICY_EVAL_CTX_set1_cert(ct_policy_ctx, cert);
+
+ if (fixture->issuer_file != NULL) {
+ if (!TEST_ptr(issuer = load_pem_cert(fixture->certs_dir,
+ fixture->issuer_file)))
+ goto end;
+ CT_POLICY_EVAL_CTX_set1_issuer(ct_policy_ctx, issuer);
+ }
+
+ sct_extension_index =
+ X509_get_ext_by_NID(cert, NID_ct_precert_scts, -1);
+ sct_extension = X509_get_ext(cert, sct_extension_index);
+ if (fixture->expected_sct_count > 0) {
+ if (!TEST_ptr(sct_extension))
+ goto end;
+
+ if (fixture->sct_text_file
+ && !compare_extension_printout(sct_extension,
+ expected_sct_text))
+ goto end;
+
+ scts = X509V3_EXT_d2i(sct_extension);
+ for (i = 0; i < sk_SCT_num(scts); ++i) {
+ SCT *sct_i = sk_SCT_value(scts, i);
+
+ if (!TEST_int_eq(SCT_get_source(sct_i),
+ SCT_SOURCE_X509V3_EXTENSION)) {
+ goto end;
+ }
+ }
+
+ if (fixture->test_validity) {
+ if (!assert_validity(fixture, scts, ct_policy_ctx))
+ goto end;
+ }
+ } else if (!TEST_ptr_null(sct_extension)) {
+ goto end;
+ }
+ }
+
+ if (fixture->tls_sct_list != NULL) {
+ const unsigned char *p = fixture->tls_sct_list;
+
+ if (!TEST_ptr(o2i_SCT_LIST(&scts, &p, fixture->tls_sct_list_len)))
+ goto end;
+
+ if (fixture->test_validity && cert != NULL) {
+ if (!assert_validity(fixture, scts, ct_policy_ctx))
+ goto end;
+ }
+
+ if (fixture->sct_text_file
+ && !compare_sct_list_printout(scts, expected_sct_text)) {
+ goto end;
+ }
+
+ tls_sct_list_len = i2o_SCT_LIST(scts, &tls_sct_list);
+ if (!TEST_mem_eq(fixture->tls_sct_list, fixture->tls_sct_list_len,
+ tls_sct_list, tls_sct_list_len))
+ goto end;
+ }
+ success = 1;
+
+end:
+ X509_free(cert);
+ X509_free(issuer);
+ SCT_LIST_free(scts);
+ SCT_free(sct);
+ CT_POLICY_EVAL_CTX_free(ct_policy_ctx);
+ OPENSSL_free(tls_sct_list);
+ return success;
+}
+
+# define SETUP_CT_TEST_FIXTURE() SETUP_TEST_FIXTURE(CT_TEST_FIXTURE, set_up)
+# define EXECUTE_CT_TEST() EXECUTE_TEST(execute_cert_test, tear_down)
+
+static int test_no_scts_in_certificate(void)
+{
+ SETUP_CT_TEST_FIXTURE();
+ fixture->certs_dir = certs_dir;
+ fixture->certificate_file = "leaf.pem";
+ fixture->issuer_file = "subinterCA.pem";
+ fixture->expected_sct_count = 0;
+ EXECUTE_CT_TEST();
+ return result;
+}
+
+static int test_one_sct_in_certificate(void)
+{
+ SETUP_CT_TEST_FIXTURE();
+ fixture->certs_dir = certs_dir;
+ fixture->certificate_file = "embeddedSCTs1.pem";
+ fixture->issuer_file = "embeddedSCTs1_issuer.pem";
+ fixture->expected_sct_count = 1;
+ fixture->sct_dir = certs_dir;
+ fixture->sct_text_file = "embeddedSCTs1.sct";
+ EXECUTE_CT_TEST();
+ return result;
+}
+
+static int test_multiple_scts_in_certificate(void)
+{
+ SETUP_CT_TEST_FIXTURE();
+ fixture->certs_dir = certs_dir;
+ fixture->certificate_file = "embeddedSCTs3.pem";
+ fixture->issuer_file = "embeddedSCTs3_issuer.pem";
+ fixture->expected_sct_count = 3;
+ fixture->sct_dir = certs_dir;
+ fixture->sct_text_file = "embeddedSCTs3.sct";
+ EXECUTE_CT_TEST();
+ return result;
+}
+
+static int test_verify_one_sct(void)
+{
+ SETUP_CT_TEST_FIXTURE();
+ fixture->certs_dir = certs_dir;
+ fixture->certificate_file = "embeddedSCTs1.pem";
+ fixture->issuer_file = "embeddedSCTs1_issuer.pem";
+ fixture->expected_sct_count = fixture->expected_valid_sct_count = 1;
+ fixture->test_validity = 1;
+ EXECUTE_CT_TEST();
+ return result;
+}
+
+static int test_verify_multiple_scts(void)
+{
+ SETUP_CT_TEST_FIXTURE();
+ fixture->certs_dir = certs_dir;
+ fixture->certificate_file = "embeddedSCTs3.pem";
+ fixture->issuer_file = "embeddedSCTs3_issuer.pem";
+ fixture->expected_sct_count = fixture->expected_valid_sct_count = 3;
+ fixture->test_validity = 1;
+ EXECUTE_CT_TEST();
+ return result;
+}
+
+static int test_verify_fails_for_future_sct(void)
+{
+ SETUP_CT_TEST_FIXTURE();
+ fixture->epoch_time_in_ms = 1365094800000ULL; /* Apr 4 17:00:00 2013 GMT */
+ fixture->certs_dir = certs_dir;
+ fixture->certificate_file = "embeddedSCTs1.pem";
+ fixture->issuer_file = "embeddedSCTs1_issuer.pem";
+ fixture->expected_sct_count = 1;
+ fixture->expected_valid_sct_count = 0;
+ fixture->test_validity = 1;
+ EXECUTE_CT_TEST();
+ return result;
+}
+
+static int test_decode_tls_sct(void)
+{
+ const unsigned char tls_sct_list[] = "\x00\x78" /* length of list */
+ "\x00\x76"
+ "\x00" /* version */
+ /* log ID */
+ "\xDF\x1C\x2E\xC1\x15\x00\x94\x52\x47\xA9\x61\x68\x32\x5D\xDC\x5C\x79"
+ "\x59\xE8\xF7\xC6\xD3\x88\xFC\x00\x2E\x0B\xBD\x3F\x74\xD7\x64"
+ "\x00\x00\x01\x3D\xDB\x27\xDF\x93" /* timestamp */
+ "\x00\x00" /* extensions length */
+ "" /* extensions */
+ "\x04\x03" /* hash and signature algorithms */
+ "\x00\x47" /* signature length */
+ /* signature */
+ "\x30\x45\x02\x20\x48\x2F\x67\x51\xAF\x35\xDB\xA6\x54\x36\xBE\x1F\xD6"
+ "\x64\x0F\x3D\xBF\x9A\x41\x42\x94\x95\x92\x45\x30\x28\x8F\xA3\xE5\xE2"
+ "\x3E\x06\x02\x21\x00\xE4\xED\xC0\xDB\x3A\xC5\x72\xB1\xE2\xF5\xE8\xAB"
+ "\x6A\x68\x06\x53\x98\x7D\xCF\x41\x02\x7D\xFE\xFF\xA1\x05\x51\x9D\x89"
+ "\xED\xBF\x08";
+
+ SETUP_CT_TEST_FIXTURE();
+ fixture->tls_sct_list = tls_sct_list;
+ fixture->tls_sct_list_len = 0x7a;
+ fixture->sct_dir = ct_dir;
+ fixture->sct_text_file = "tls1.sct";
+ EXECUTE_CT_TEST();
+ return result;
+}
+
+static int test_encode_tls_sct(void)
+{
+ const char log_id[] = "3xwuwRUAlFJHqWFoMl3cXHlZ6PfG04j8AC4LvT9012Q=";
+ const uint64_t timestamp = 1;
+ const char extensions[] = "";
+ const char signature[] = "BAMARzBAMiBIL2dRrzXbplQ2vh/WZA89v5pBQpSVkkUwKI+j5"
+ "eI+BgIhAOTtwNs6xXKx4vXoq2poBlOYfc9BAn3+/6EFUZ2J7b8I";
+ SCT *sct = NULL;
+
+ SETUP_CT_TEST_FIXTURE();
+
+ fixture->sct_list = sk_SCT_new_null();
+ if (fixture->sct_list == NULL)
+ return 0;
+
+ if (!TEST_ptr(sct = SCT_new_from_base64(SCT_VERSION_V1, log_id,
+ CT_LOG_ENTRY_TYPE_X509, timestamp,
+ extensions, signature)))
+
+ return 0;
+
+ sk_SCT_push(fixture->sct_list, sct);
+ fixture->sct_dir = ct_dir;
+ fixture->sct_text_file = "tls1.sct";
+ EXECUTE_CT_TEST();
+ return result;
+}
+
+/*
+ * Tests that the CT_POLICY_EVAL_CTX default time is approximately now.
+ * Allow +-10 minutes, as it may compensate for clock skew.
+ */
+static int test_default_ct_policy_eval_ctx_time_is_now(void)
+{
+ int success = 0;
+ CT_POLICY_EVAL_CTX *ct_policy_ctx = CT_POLICY_EVAL_CTX_new();
+ const time_t default_time =
+ (time_t)(CT_POLICY_EVAL_CTX_get_time(ct_policy_ctx) / 1000);
+ const time_t time_tolerance = 600; /* 10 minutes */
+
+ if (!TEST_time_t_le(abs((int)difftime(time(NULL), default_time)),
+ time_tolerance))
+ goto end;
+
+ success = 1;
+end:
+ CT_POLICY_EVAL_CTX_free(ct_policy_ctx);
+ return success;
+}
+
+static int test_ctlog_from_base64(void)
+{
+ CTLOG *ctlogp = NULL;
+ const char notb64[] = "\01\02\03\04";
+ const char pad[] = "====";
+ const char name[] = "name";
+
+ /* We expect these to both fail! */
+ if (!TEST_true(!CTLOG_new_from_base64(&ctlogp, notb64, name))
+ || !TEST_true(!CTLOG_new_from_base64(&ctlogp, pad, name)))
+ return 0;
+ return 1;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_CT
+ if ((ct_dir = getenv("CT_DIR")) == NULL)
+ ct_dir = "ct";
+ if ((certs_dir = getenv("CERTS_DIR")) == NULL)
+ certs_dir = "certs";
+
+ ADD_TEST(test_no_scts_in_certificate);
+ ADD_TEST(test_one_sct_in_certificate);
+ ADD_TEST(test_multiple_scts_in_certificate);
+ ADD_TEST(test_verify_one_sct);
+ ADD_TEST(test_verify_multiple_scts);
+ ADD_TEST(test_verify_fails_for_future_sct);
+ ADD_TEST(test_decode_tls_sct);
+ ADD_TEST(test_encode_tls_sct);
+ ADD_TEST(test_default_ct_policy_eval_ctx_time_is_now);
+ ADD_TEST(test_ctlog_from_base64);
+#else
+ printf("No CT support\n");
+#endif
+ return 1;
+}
diff --git a/test/ctype_internal_test.c b/test/ctype_internal_test.c
new file mode 100644
index 000000000000..e2e7dc0bac92
--- /dev/null
+++ b/test/ctype_internal_test.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2017-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
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "testutil.h"
+#include "crypto/ctype.h"
+#include "internal/nelem.h"
+#include <ctype.h>
+#include <stdio.h>
+
+/*
+ * Even though the VMS C RTL claims to be C99 compatible, it's not entirely
+ * so far (C RTL version 8.4). Same applies to OSF. For the sake of these
+ * tests, we therefore define our own.
+ */
+#if (defined(__VMS) && __CRTL_VER <= 80400000) || defined(__osf__)
+static int isblank(int c)
+{
+ return c == ' ' || c == '\t';
+}
+#endif
+
+static int test_ctype_chars(int n)
+{
+ if (!TEST_int_eq(isascii((unsigned char)n) != 0, ossl_isascii(n) != 0))
+ return 0;
+
+ if (!ossl_isascii(n))
+ return 1;
+
+ return TEST_int_eq(isalpha(n) != 0, ossl_isalpha(n) != 0)
+ && TEST_int_eq(isalnum(n) != 0, ossl_isalnum(n) != 0)
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+ && TEST_int_eq(isblank(n) != 0, ossl_isblank(n) != 0)
+#endif
+ && TEST_int_eq(iscntrl(n) != 0, ossl_iscntrl(n) != 0)
+ && TEST_int_eq(isdigit(n) != 0, ossl_isdigit(n) != 0)
+ && TEST_int_eq(isgraph(n) != 0, ossl_isgraph(n) != 0)
+ && TEST_int_eq(islower(n) != 0, ossl_islower(n) != 0)
+ && TEST_int_eq(isprint(n) != 0, ossl_isprint(n) != 0)
+ && TEST_int_eq(ispunct(n) != 0, ossl_ispunct(n) != 0)
+ && TEST_int_eq(isspace(n) != 0, ossl_isspace(n) != 0)
+ && TEST_int_eq(isupper(n) != 0, ossl_isupper(n) != 0)
+ && TEST_int_eq(isxdigit(n) != 0, ossl_isxdigit(n) != 0);
+}
+
+static struct {
+ int u;
+ int l;
+} case_change[] = {
+ { 'A', 'a' },
+ { 'X', 'x' },
+ { 'Z', 'z' },
+ { '0', '0' },
+ { '%', '%' },
+ { '~', '~' },
+ { 0, 0 },
+ { EOF, EOF }
+};
+
+static int test_ctype_toupper(int n)
+{
+ return TEST_int_eq(ossl_toupper(case_change[n].l), case_change[n].u)
+ && TEST_int_eq(ossl_toupper(case_change[n].u), case_change[n].u);
+}
+
+static int test_ctype_tolower(int n)
+{
+ return TEST_int_eq(ossl_tolower(case_change[n].u), case_change[n].l)
+ && TEST_int_eq(ossl_tolower(case_change[n].l), case_change[n].l);
+}
+
+static int test_ctype_eof(void)
+{
+ return test_ctype_chars(EOF);
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_ctype_chars, 256);
+ ADD_ALL_TESTS(test_ctype_toupper, OSSL_NELEM(case_change));
+ ADD_ALL_TESTS(test_ctype_tolower, OSSL_NELEM(case_change));
+ ADD_TEST(test_ctype_eof);
+ return 1;
+}
diff --git a/test/curve448_internal_test.c b/test/curve448_internal_test.c
new file mode 100644
index 000000000000..9d811e08a886
--- /dev/null
+++ b/test/curve448_internal_test.c
@@ -0,0 +1,737 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+#include <stdio.h>
+#include <string.h>
+#include <openssl/e_os2.h>
+#include <openssl/evp.h>
+#include "crypto/ecx.h"
+#include "curve448_local.h"
+#include "testutil.h"
+
+static unsigned int max = 1000;
+static unsigned int verbose = 0;
+
+/* Test vectors from RFC7748 for X448 */
+
+static const uint8_t in_scalar1[56] = {
+ 0x3d, 0x26, 0x2f, 0xdd, 0xf9, 0xec, 0x8e, 0x88, 0x49, 0x52, 0x66, 0xfe,
+ 0xa1, 0x9a, 0x34, 0xd2, 0x88, 0x82, 0xac, 0xef, 0x04, 0x51, 0x04, 0xd0,
+ 0xd1, 0xaa, 0xe1, 0x21, 0x70, 0x0a, 0x77, 0x9c, 0x98, 0x4c, 0x24, 0xf8,
+ 0xcd, 0xd7, 0x8f, 0xbf, 0xf4, 0x49, 0x43, 0xeb, 0xa3, 0x68, 0xf5, 0x4b,
+ 0x29, 0x25, 0x9a, 0x4f, 0x1c, 0x60, 0x0a, 0xd3
+};
+
+static const uint8_t in_u1[56] = {
+ 0x06, 0xfc, 0xe6, 0x40, 0xfa, 0x34, 0x87, 0xbf, 0xda, 0x5f, 0x6c, 0xf2,
+ 0xd5, 0x26, 0x3f, 0x8a, 0xad, 0x88, 0x33, 0x4c, 0xbd, 0x07, 0x43, 0x7f,
+ 0x02, 0x0f, 0x08, 0xf9, 0x81, 0x4d, 0xc0, 0x31, 0xdd, 0xbd, 0xc3, 0x8c,
+ 0x19, 0xc6, 0xda, 0x25, 0x83, 0xfa, 0x54, 0x29, 0xdb, 0x94, 0xad, 0xa1,
+ 0x8a, 0xa7, 0xa7, 0xfb, 0x4e, 0xf8, 0xa0, 0x86
+};
+
+static const uint8_t out_u1[56] = {
+ 0xce, 0x3e, 0x4f, 0xf9, 0x5a, 0x60, 0xdc, 0x66, 0x97, 0xda, 0x1d, 0xb1,
+ 0xd8, 0x5e, 0x6a, 0xfb, 0xdf, 0x79, 0xb5, 0x0a, 0x24, 0x12, 0xd7, 0x54,
+ 0x6d, 0x5f, 0x23, 0x9f, 0xe1, 0x4f, 0xba, 0xad, 0xeb, 0x44, 0x5f, 0xc6,
+ 0x6a, 0x01, 0xb0, 0x77, 0x9d, 0x98, 0x22, 0x39, 0x61, 0x11, 0x1e, 0x21,
+ 0x76, 0x62, 0x82, 0xf7, 0x3d, 0xd9, 0x6b, 0x6f
+};
+
+static const uint8_t in_scalar2[56] = {
+ 0x20, 0x3d, 0x49, 0x44, 0x28, 0xb8, 0x39, 0x93, 0x52, 0x66, 0x5d, 0xdc,
+ 0xa4, 0x2f, 0x9d, 0xe8, 0xfe, 0xf6, 0x00, 0x90, 0x8e, 0x0d, 0x46, 0x1c,
+ 0xb0, 0x21, 0xf8, 0xc5, 0x38, 0x34, 0x5d, 0xd7, 0x7c, 0x3e, 0x48, 0x06,
+ 0xe2, 0x5f, 0x46, 0xd3, 0x31, 0x5c, 0x44, 0xe0, 0xa5, 0xb4, 0x37, 0x12,
+ 0x82, 0xdd, 0x2c, 0x8d, 0x5b, 0xe3, 0x09, 0x5f
+};
+
+static const uint8_t in_u2[56] = {
+ 0x0f, 0xbc, 0xc2, 0xf9, 0x93, 0xcd, 0x56, 0xd3, 0x30, 0x5b, 0x0b, 0x7d,
+ 0x9e, 0x55, 0xd4, 0xc1, 0xa8, 0xfb, 0x5d, 0xbb, 0x52, 0xf8, 0xe9, 0xa1,
+ 0xe9, 0xb6, 0x20, 0x1b, 0x16, 0x5d, 0x01, 0x58, 0x94, 0xe5, 0x6c, 0x4d,
+ 0x35, 0x70, 0xbe, 0xe5, 0x2f, 0xe2, 0x05, 0xe2, 0x8a, 0x78, 0xb9, 0x1c,
+ 0xdf, 0xbd, 0xe7, 0x1c, 0xe8, 0xd1, 0x57, 0xdb
+};
+
+static const uint8_t out_u2[56] = {
+ 0x88, 0x4a, 0x02, 0x57, 0x62, 0x39, 0xff, 0x7a, 0x2f, 0x2f, 0x63, 0xb2,
+ 0xdb, 0x6a, 0x9f, 0xf3, 0x70, 0x47, 0xac, 0x13, 0x56, 0x8e, 0x1e, 0x30,
+ 0xfe, 0x63, 0xc4, 0xa7, 0xad, 0x1b, 0x3e, 0xe3, 0xa5, 0x70, 0x0d, 0xf3,
+ 0x43, 0x21, 0xd6, 0x20, 0x77, 0xe6, 0x36, 0x33, 0xc5, 0x75, 0xc1, 0xc9,
+ 0x54, 0x51, 0x4e, 0x99, 0xda, 0x7c, 0x17, 0x9d
+};
+
+static const uint8_t in_u3[56] = {
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const uint8_t out_u3[3][56] = {
+ {
+ 0x3f, 0x48, 0x2c, 0x8a, 0x9f, 0x19, 0xb0, 0x1e, 0x6c, 0x46, 0xee, 0x97,
+ 0x11, 0xd9, 0xdc, 0x14, 0xfd, 0x4b, 0xf6, 0x7a, 0xf3, 0x07, 0x65, 0xc2,
+ 0xae, 0x2b, 0x84, 0x6a, 0x4d, 0x23, 0xa8, 0xcd, 0x0d, 0xb8, 0x97, 0x08,
+ 0x62, 0x39, 0x49, 0x2c, 0xaf, 0x35, 0x0b, 0x51, 0xf8, 0x33, 0x86, 0x8b,
+ 0x9b, 0xc2, 0xb3, 0xbc, 0xa9, 0xcf, 0x41, 0x13
+ }, {
+ 0xaa, 0x3b, 0x47, 0x49, 0xd5, 0x5b, 0x9d, 0xaf, 0x1e, 0x5b, 0x00, 0x28,
+ 0x88, 0x26, 0xc4, 0x67, 0x27, 0x4c, 0xe3, 0xeb, 0xbd, 0xd5, 0xc1, 0x7b,
+ 0x97, 0x5e, 0x09, 0xd4, 0xaf, 0x6c, 0x67, 0xcf, 0x10, 0xd0, 0x87, 0x20,
+ 0x2d, 0xb8, 0x82, 0x86, 0xe2, 0xb7, 0x9f, 0xce, 0xea, 0x3e, 0xc3, 0x53,
+ 0xef, 0x54, 0xfa, 0xa2, 0x6e, 0x21, 0x9f, 0x38
+ }, {
+ 0x07, 0x7f, 0x45, 0x36, 0x81, 0xca, 0xca, 0x36, 0x93, 0x19, 0x84, 0x20,
+ 0xbb, 0xe5, 0x15, 0xca, 0xe0, 0x00, 0x24, 0x72, 0x51, 0x9b, 0x3e, 0x67,
+ 0x66, 0x1a, 0x7e, 0x89, 0xca, 0xb9, 0x46, 0x95, 0xc8, 0xf4, 0xbc, 0xd6,
+ 0x6e, 0x61, 0xb9, 0xb9, 0xc9, 0x46, 0xda, 0x8d, 0x52, 0x4d, 0xe3, 0xd6,
+ 0x9b, 0xd9, 0xd9, 0xd6, 0x6b, 0x99, 0x7e, 0x37
+ }
+};
+
+/* Test vectors from RFC8032 for Ed448 */
+
+/* Pure Ed448 */
+
+static const uint8_t privkey1[57] = {
+ 0x6c, 0x82, 0xa5, 0x62, 0xcb, 0x80, 0x8d, 0x10, 0xd6, 0x32, 0xbe, 0x89,
+ 0xc8, 0x51, 0x3e, 0xbf, 0x6c, 0x92, 0x9f, 0x34, 0xdd, 0xfa, 0x8c, 0x9f,
+ 0x63, 0xc9, 0x96, 0x0e, 0xf6, 0xe3, 0x48, 0xa3, 0x52, 0x8c, 0x8a, 0x3f,
+ 0xcc, 0x2f, 0x04, 0x4e, 0x39, 0xa3, 0xfc, 0x5b, 0x94, 0x49, 0x2f, 0x8f,
+ 0x03, 0x2e, 0x75, 0x49, 0xa2, 0x00, 0x98, 0xf9, 0x5b
+};
+
+static const uint8_t pubkey1[57] = {
+ 0x5f, 0xd7, 0x44, 0x9b, 0x59, 0xb4, 0x61, 0xfd, 0x2c, 0xe7, 0x87, 0xec,
+ 0x61, 0x6a, 0xd4, 0x6a, 0x1d, 0xa1, 0x34, 0x24, 0x85, 0xa7, 0x0e, 0x1f,
+ 0x8a, 0x0e, 0xa7, 0x5d, 0x80, 0xe9, 0x67, 0x78, 0xed, 0xf1, 0x24, 0x76,
+ 0x9b, 0x46, 0xc7, 0x06, 0x1b, 0xd6, 0x78, 0x3d, 0xf1, 0xe5, 0x0f, 0x6c,
+ 0xd1, 0xfa, 0x1a, 0xbe, 0xaf, 0xe8, 0x25, 0x61, 0x80
+};
+
+static const uint8_t sig1[114] = {
+ 0x53, 0x3a, 0x37, 0xf6, 0xbb, 0xe4, 0x57, 0x25, 0x1f, 0x02, 0x3c, 0x0d,
+ 0x88, 0xf9, 0x76, 0xae, 0x2d, 0xfb, 0x50, 0x4a, 0x84, 0x3e, 0x34, 0xd2,
+ 0x07, 0x4f, 0xd8, 0x23, 0xd4, 0x1a, 0x59, 0x1f, 0x2b, 0x23, 0x3f, 0x03,
+ 0x4f, 0x62, 0x82, 0x81, 0xf2, 0xfd, 0x7a, 0x22, 0xdd, 0xd4, 0x7d, 0x78,
+ 0x28, 0xc5, 0x9b, 0xd0, 0xa2, 0x1b, 0xfd, 0x39, 0x80, 0xff, 0x0d, 0x20,
+ 0x28, 0xd4, 0xb1, 0x8a, 0x9d, 0xf6, 0x3e, 0x00, 0x6c, 0x5d, 0x1c, 0x2d,
+ 0x34, 0x5b, 0x92, 0x5d, 0x8d, 0xc0, 0x0b, 0x41, 0x04, 0x85, 0x2d, 0xb9,
+ 0x9a, 0xc5, 0xc7, 0xcd, 0xda, 0x85, 0x30, 0xa1, 0x13, 0xa0, 0xf4, 0xdb,
+ 0xb6, 0x11, 0x49, 0xf0, 0x5a, 0x73, 0x63, 0x26, 0x8c, 0x71, 0xd9, 0x58,
+ 0x08, 0xff, 0x2e, 0x65, 0x26, 0x00
+};
+
+static const uint8_t privkey2[57] = {
+ 0xc4, 0xea, 0xb0, 0x5d, 0x35, 0x70, 0x07, 0xc6, 0x32, 0xf3, 0xdb, 0xb4,
+ 0x84, 0x89, 0x92, 0x4d, 0x55, 0x2b, 0x08, 0xfe, 0x0c, 0x35, 0x3a, 0x0d,
+ 0x4a, 0x1f, 0x00, 0xac, 0xda, 0x2c, 0x46, 0x3a, 0xfb, 0xea, 0x67, 0xc5,
+ 0xe8, 0xd2, 0x87, 0x7c, 0x5e, 0x3b, 0xc3, 0x97, 0xa6, 0x59, 0x94, 0x9e,
+ 0xf8, 0x02, 0x1e, 0x95, 0x4e, 0x0a, 0x12, 0x27, 0x4e
+};
+
+static const uint8_t pubkey2[57] = {
+ 0x43, 0xba, 0x28, 0xf4, 0x30, 0xcd, 0xff, 0x45, 0x6a, 0xe5, 0x31, 0x54,
+ 0x5f, 0x7e, 0xcd, 0x0a, 0xc8, 0x34, 0xa5, 0x5d, 0x93, 0x58, 0xc0, 0x37,
+ 0x2b, 0xfa, 0x0c, 0x6c, 0x67, 0x98, 0xc0, 0x86, 0x6a, 0xea, 0x01, 0xeb,
+ 0x00, 0x74, 0x28, 0x02, 0xb8, 0x43, 0x8e, 0xa4, 0xcb, 0x82, 0x16, 0x9c,
+ 0x23, 0x51, 0x60, 0x62, 0x7b, 0x4c, 0x3a, 0x94, 0x80
+};
+
+static const uint8_t msg2[1] = {
+ 0x03
+};
+
+static const uint8_t sig2[114] = {
+ 0x26, 0xb8, 0xf9, 0x17, 0x27, 0xbd, 0x62, 0x89, 0x7a, 0xf1, 0x5e, 0x41,
+ 0xeb, 0x43, 0xc3, 0x77, 0xef, 0xb9, 0xc6, 0x10, 0xd4, 0x8f, 0x23, 0x35,
+ 0xcb, 0x0b, 0xd0, 0x08, 0x78, 0x10, 0xf4, 0x35, 0x25, 0x41, 0xb1, 0x43,
+ 0xc4, 0xb9, 0x81, 0xb7, 0xe1, 0x8f, 0x62, 0xde, 0x8c, 0xcd, 0xf6, 0x33,
+ 0xfc, 0x1b, 0xf0, 0x37, 0xab, 0x7c, 0xd7, 0x79, 0x80, 0x5e, 0x0d, 0xbc,
+ 0xc0, 0xaa, 0xe1, 0xcb, 0xce, 0xe1, 0xaf, 0xb2, 0xe0, 0x27, 0xdf, 0x36,
+ 0xbc, 0x04, 0xdc, 0xec, 0xbf, 0x15, 0x43, 0x36, 0xc1, 0x9f, 0x0a, 0xf7,
+ 0xe0, 0xa6, 0x47, 0x29, 0x05, 0xe7, 0x99, 0xf1, 0x95, 0x3d, 0x2a, 0x0f,
+ 0xf3, 0x34, 0x8a, 0xb2, 0x1a, 0xa4, 0xad, 0xaf, 0xd1, 0xd2, 0x34, 0x44,
+ 0x1c, 0xf8, 0x07, 0xc0, 0x3a, 0x00
+};
+
+static const uint8_t privkey3[57] = {
+ 0xc4, 0xea, 0xb0, 0x5d, 0x35, 0x70, 0x07, 0xc6, 0x32, 0xf3, 0xdb, 0xb4,
+ 0x84, 0x89, 0x92, 0x4d, 0x55, 0x2b, 0x08, 0xfe, 0x0c, 0x35, 0x3a, 0x0d,
+ 0x4a, 0x1f, 0x00, 0xac, 0xda, 0x2c, 0x46, 0x3a, 0xfb, 0xea, 0x67, 0xc5,
+ 0xe8, 0xd2, 0x87, 0x7c, 0x5e, 0x3b, 0xc3, 0x97, 0xa6, 0x59, 0x94, 0x9e,
+ 0xf8, 0x02, 0x1e, 0x95, 0x4e, 0x0a, 0x12, 0x27, 0x4e
+};
+
+static const uint8_t pubkey3[57] = {
+ 0x43, 0xba, 0x28, 0xf4, 0x30, 0xcd, 0xff, 0x45, 0x6a, 0xe5, 0x31, 0x54,
+ 0x5f, 0x7e, 0xcd, 0x0a, 0xc8, 0x34, 0xa5, 0x5d, 0x93, 0x58, 0xc0, 0x37,
+ 0x2b, 0xfa, 0x0c, 0x6c, 0x67, 0x98, 0xc0, 0x86, 0x6a, 0xea, 0x01, 0xeb,
+ 0x00, 0x74, 0x28, 0x02, 0xb8, 0x43, 0x8e, 0xa4, 0xcb, 0x82, 0x16, 0x9c,
+ 0x23, 0x51, 0x60, 0x62, 0x7b, 0x4c, 0x3a, 0x94, 0x80
+};
+
+static const uint8_t msg3[1] = {
+ 0x03
+};
+
+static const uint8_t context3[3] = {
+ 0x66, 0x6f, 0x6f
+};
+
+static const uint8_t sig3[114] = {
+ 0xd4, 0xf8, 0xf6, 0x13, 0x17, 0x70, 0xdd, 0x46, 0xf4, 0x08, 0x67, 0xd6,
+ 0xfd, 0x5d, 0x50, 0x55, 0xde, 0x43, 0x54, 0x1f, 0x8c, 0x5e, 0x35, 0xab,
+ 0xbc, 0xd0, 0x01, 0xb3, 0x2a, 0x89, 0xf7, 0xd2, 0x15, 0x1f, 0x76, 0x47,
+ 0xf1, 0x1d, 0x8c, 0xa2, 0xae, 0x27, 0x9f, 0xb8, 0x42, 0xd6, 0x07, 0x21,
+ 0x7f, 0xce, 0x6e, 0x04, 0x2f, 0x68, 0x15, 0xea, 0x00, 0x0c, 0x85, 0x74,
+ 0x1d, 0xe5, 0xc8, 0xda, 0x11, 0x44, 0xa6, 0xa1, 0xab, 0xa7, 0xf9, 0x6d,
+ 0xe4, 0x25, 0x05, 0xd7, 0xa7, 0x29, 0x85, 0x24, 0xfd, 0xa5, 0x38, 0xfc,
+ 0xcb, 0xbb, 0x75, 0x4f, 0x57, 0x8c, 0x1c, 0xad, 0x10, 0xd5, 0x4d, 0x0d,
+ 0x54, 0x28, 0x40, 0x7e, 0x85, 0xdc, 0xbc, 0x98, 0xa4, 0x91, 0x55, 0xc1,
+ 0x37, 0x64, 0xe6, 0x6c, 0x3c, 0x00
+};
+
+static const uint8_t privkey4[57] = {
+ 0xcd, 0x23, 0xd2, 0x4f, 0x71, 0x42, 0x74, 0xe7, 0x44, 0x34, 0x32, 0x37,
+ 0xb9, 0x32, 0x90, 0xf5, 0x11, 0xf6, 0x42, 0x5f, 0x98, 0xe6, 0x44, 0x59,
+ 0xff, 0x20, 0x3e, 0x89, 0x85, 0x08, 0x3f, 0xfd, 0xf6, 0x05, 0x00, 0x55,
+ 0x3a, 0xbc, 0x0e, 0x05, 0xcd, 0x02, 0x18, 0x4b, 0xdb, 0x89, 0xc4, 0xcc,
+ 0xd6, 0x7e, 0x18, 0x79, 0x51, 0x26, 0x7e, 0xb3, 0x28
+};
+
+static const uint8_t pubkey4[57] = {
+ 0xdc, 0xea, 0x9e, 0x78, 0xf3, 0x5a, 0x1b, 0xf3, 0x49, 0x9a, 0x83, 0x1b,
+ 0x10, 0xb8, 0x6c, 0x90, 0xaa, 0xc0, 0x1c, 0xd8, 0x4b, 0x67, 0xa0, 0x10,
+ 0x9b, 0x55, 0xa3, 0x6e, 0x93, 0x28, 0xb1, 0xe3, 0x65, 0xfc, 0xe1, 0x61,
+ 0xd7, 0x1c, 0xe7, 0x13, 0x1a, 0x54, 0x3e, 0xa4, 0xcb, 0x5f, 0x7e, 0x9f,
+ 0x1d, 0x8b, 0x00, 0x69, 0x64, 0x47, 0x00, 0x14, 0x00
+};
+
+static const uint8_t msg4[11] = {
+ 0x0c, 0x3e, 0x54, 0x40, 0x74, 0xec, 0x63, 0xb0, 0x26, 0x5e, 0x0c
+};
+
+static const uint8_t sig4[114] = {
+ 0x1f, 0x0a, 0x88, 0x88, 0xce, 0x25, 0xe8, 0xd4, 0x58, 0xa2, 0x11, 0x30,
+ 0x87, 0x9b, 0x84, 0x0a, 0x90, 0x89, 0xd9, 0x99, 0xaa, 0xba, 0x03, 0x9e,
+ 0xaf, 0x3e, 0x3a, 0xfa, 0x09, 0x0a, 0x09, 0xd3, 0x89, 0xdb, 0xa8, 0x2c,
+ 0x4f, 0xf2, 0xae, 0x8a, 0xc5, 0xcd, 0xfb, 0x7c, 0x55, 0xe9, 0x4d, 0x5d,
+ 0x96, 0x1a, 0x29, 0xfe, 0x01, 0x09, 0x94, 0x1e, 0x00, 0xb8, 0xdb, 0xde,
+ 0xea, 0x6d, 0x3b, 0x05, 0x10, 0x68, 0xdf, 0x72, 0x54, 0xc0, 0xcd, 0xc1,
+ 0x29, 0xcb, 0xe6, 0x2d, 0xb2, 0xdc, 0x95, 0x7d, 0xbb, 0x47, 0xb5, 0x1f,
+ 0xd3, 0xf2, 0x13, 0xfb, 0x86, 0x98, 0xf0, 0x64, 0x77, 0x42, 0x50, 0xa5,
+ 0x02, 0x89, 0x61, 0xc9, 0xbf, 0x8f, 0xfd, 0x97, 0x3f, 0xe5, 0xd5, 0xc2,
+ 0x06, 0x49, 0x2b, 0x14, 0x0e, 0x00
+};
+
+static const uint8_t privkey5[57] = {
+ 0x25, 0x8c, 0xdd, 0x4a, 0xda, 0x32, 0xed, 0x9c, 0x9f, 0xf5, 0x4e, 0x63,
+ 0x75, 0x6a, 0xe5, 0x82, 0xfb, 0x8f, 0xab, 0x2a, 0xc7, 0x21, 0xf2, 0xc8,
+ 0xe6, 0x76, 0xa7, 0x27, 0x68, 0x51, 0x3d, 0x93, 0x9f, 0x63, 0xdd, 0xdb,
+ 0x55, 0x60, 0x91, 0x33, 0xf2, 0x9a, 0xdf, 0x86, 0xec, 0x99, 0x29, 0xdc,
+ 0xcb, 0x52, 0xc1, 0xc5, 0xfd, 0x2f, 0xf7, 0xe2, 0x1b
+};
+
+static const uint8_t pubkey5[57] = {
+ 0x3b, 0xa1, 0x6d, 0xa0, 0xc6, 0xf2, 0xcc, 0x1f, 0x30, 0x18, 0x77, 0x40,
+ 0x75, 0x6f, 0x5e, 0x79, 0x8d, 0x6b, 0xc5, 0xfc, 0x01, 0x5d, 0x7c, 0x63,
+ 0xcc, 0x95, 0x10, 0xee, 0x3f, 0xd4, 0x4a, 0xdc, 0x24, 0xd8, 0xe9, 0x68,
+ 0xb6, 0xe4, 0x6e, 0x6f, 0x94, 0xd1, 0x9b, 0x94, 0x53, 0x61, 0x72, 0x6b,
+ 0xd7, 0x5e, 0x14, 0x9e, 0xf0, 0x98, 0x17, 0xf5, 0x80
+};
+
+static const uint8_t msg5[12] = {
+ 0x64, 0xa6, 0x5f, 0x3c, 0xde, 0xdc, 0xdd, 0x66, 0x81, 0x1e, 0x29, 0x15
+};
+
+static const uint8_t sig5[114] = {
+ 0x7e, 0xee, 0xab, 0x7c, 0x4e, 0x50, 0xfb, 0x79, 0x9b, 0x41, 0x8e, 0xe5,
+ 0xe3, 0x19, 0x7f, 0xf6, 0xbf, 0x15, 0xd4, 0x3a, 0x14, 0xc3, 0x43, 0x89,
+ 0xb5, 0x9d, 0xd1, 0xa7, 0xb1, 0xb8, 0x5b, 0x4a, 0xe9, 0x04, 0x38, 0xac,
+ 0xa6, 0x34, 0xbe, 0xa4, 0x5e, 0x3a, 0x26, 0x95, 0xf1, 0x27, 0x0f, 0x07,
+ 0xfd, 0xcd, 0xf7, 0xc6, 0x2b, 0x8e, 0xfe, 0xaf, 0x00, 0xb4, 0x5c, 0x2c,
+ 0x96, 0xba, 0x45, 0x7e, 0xb1, 0xa8, 0xbf, 0x07, 0x5a, 0x3d, 0xb2, 0x8e,
+ 0x5c, 0x24, 0xf6, 0xb9, 0x23, 0xed, 0x4a, 0xd7, 0x47, 0xc3, 0xc9, 0xe0,
+ 0x3c, 0x70, 0x79, 0xef, 0xb8, 0x7c, 0xb1, 0x10, 0xd3, 0xa9, 0x98, 0x61,
+ 0xe7, 0x20, 0x03, 0xcb, 0xae, 0x6d, 0x6b, 0x8b, 0x82, 0x7e, 0x4e, 0x6c,
+ 0x14, 0x30, 0x64, 0xff, 0x3c, 0x00
+};
+
+static const uint8_t privkey6[57] = {
+ 0x7e, 0xf4, 0xe8, 0x45, 0x44, 0x23, 0x67, 0x52, 0xfb, 0xb5, 0x6b, 0x8f,
+ 0x31, 0xa2, 0x3a, 0x10, 0xe4, 0x28, 0x14, 0xf5, 0xf5, 0x5c, 0xa0, 0x37,
+ 0xcd, 0xcc, 0x11, 0xc6, 0x4c, 0x9a, 0x3b, 0x29, 0x49, 0xc1, 0xbb, 0x60,
+ 0x70, 0x03, 0x14, 0x61, 0x17, 0x32, 0xa6, 0xc2, 0xfe, 0xa9, 0x8e, 0xeb,
+ 0xc0, 0x26, 0x6a, 0x11, 0xa9, 0x39, 0x70, 0x10, 0x0e
+};
+
+static const uint8_t pubkey6[57] = {
+ 0xb3, 0xda, 0x07, 0x9b, 0x0a, 0xa4, 0x93, 0xa5, 0x77, 0x20, 0x29, 0xf0,
+ 0x46, 0x7b, 0xae, 0xbe, 0xe5, 0xa8, 0x11, 0x2d, 0x9d, 0x3a, 0x22, 0x53,
+ 0x23, 0x61, 0xda, 0x29, 0x4f, 0x7b, 0xb3, 0x81, 0x5c, 0x5d, 0xc5, 0x9e,
+ 0x17, 0x6b, 0x4d, 0x9f, 0x38, 0x1c, 0xa0, 0x93, 0x8e, 0x13, 0xc6, 0xc0,
+ 0x7b, 0x17, 0x4b, 0xe6, 0x5d, 0xfa, 0x57, 0x8e, 0x80
+};
+
+static const uint8_t msg6[13] = {
+ 0x64, 0xa6, 0x5f, 0x3c, 0xde, 0xdc, 0xdd, 0x66, 0x81, 0x1e, 0x29, 0x15,
+ 0xe7
+};
+
+static const uint8_t sig6[114] = {
+ 0x6a, 0x12, 0x06, 0x6f, 0x55, 0x33, 0x1b, 0x6c, 0x22, 0xac, 0xd5, 0xd5,
+ 0xbf, 0xc5, 0xd7, 0x12, 0x28, 0xfb, 0xda, 0x80, 0xae, 0x8d, 0xec, 0x26,
+ 0xbd, 0xd3, 0x06, 0x74, 0x3c, 0x50, 0x27, 0xcb, 0x48, 0x90, 0x81, 0x0c,
+ 0x16, 0x2c, 0x02, 0x74, 0x68, 0x67, 0x5e, 0xcf, 0x64, 0x5a, 0x83, 0x17,
+ 0x6c, 0x0d, 0x73, 0x23, 0xa2, 0xcc, 0xde, 0x2d, 0x80, 0xef, 0xe5, 0xa1,
+ 0x26, 0x8e, 0x8a, 0xca, 0x1d, 0x6f, 0xbc, 0x19, 0x4d, 0x3f, 0x77, 0xc4,
+ 0x49, 0x86, 0xeb, 0x4a, 0xb4, 0x17, 0x79, 0x19, 0xad, 0x8b, 0xec, 0x33,
+ 0xeb, 0x47, 0xbb, 0xb5, 0xfc, 0x6e, 0x28, 0x19, 0x6f, 0xd1, 0xca, 0xf5,
+ 0x6b, 0x4e, 0x7e, 0x0b, 0xa5, 0x51, 0x92, 0x34, 0xd0, 0x47, 0x15, 0x5a,
+ 0xc7, 0x27, 0xa1, 0x05, 0x31, 0x00
+};
+
+static const uint8_t privkey7[57] = {
+ 0xd6, 0x5d, 0xf3, 0x41, 0xad, 0x13, 0xe0, 0x08, 0x56, 0x76, 0x88, 0xba,
+ 0xed, 0xda, 0x8e, 0x9d, 0xcd, 0xc1, 0x7d, 0xc0, 0x24, 0x97, 0x4e, 0xa5,
+ 0xb4, 0x22, 0x7b, 0x65, 0x30, 0xe3, 0x39, 0xbf, 0xf2, 0x1f, 0x99, 0xe6,
+ 0x8c, 0xa6, 0x96, 0x8f, 0x3c, 0xca, 0x6d, 0xfe, 0x0f, 0xb9, 0xf4, 0xfa,
+ 0xb4, 0xfa, 0x13, 0x5d, 0x55, 0x42, 0xea, 0x3f, 0x01
+};
+
+static const uint8_t pubkey7[57] = {
+ 0xdf, 0x97, 0x05, 0xf5, 0x8e, 0xdb, 0xab, 0x80, 0x2c, 0x7f, 0x83, 0x63,
+ 0xcf, 0xe5, 0x56, 0x0a, 0xb1, 0xc6, 0x13, 0x2c, 0x20, 0xa9, 0xf1, 0xdd,
+ 0x16, 0x34, 0x83, 0xa2, 0x6f, 0x8a, 0xc5, 0x3a, 0x39, 0xd6, 0x80, 0x8b,
+ 0xf4, 0xa1, 0xdf, 0xbd, 0x26, 0x1b, 0x09, 0x9b, 0xb0, 0x3b, 0x3f, 0xb5,
+ 0x09, 0x06, 0xcb, 0x28, 0xbd, 0x8a, 0x08, 0x1f, 0x00
+};
+
+static const uint8_t msg7[64] = {
+ 0xbd, 0x0f, 0x6a, 0x37, 0x47, 0xcd, 0x56, 0x1b, 0xdd, 0xdf, 0x46, 0x40,
+ 0xa3, 0x32, 0x46, 0x1a, 0x4a, 0x30, 0xa1, 0x2a, 0x43, 0x4c, 0xd0, 0xbf,
+ 0x40, 0xd7, 0x66, 0xd9, 0xc6, 0xd4, 0x58, 0xe5, 0x51, 0x22, 0x04, 0xa3,
+ 0x0c, 0x17, 0xd1, 0xf5, 0x0b, 0x50, 0x79, 0x63, 0x1f, 0x64, 0xeb, 0x31,
+ 0x12, 0x18, 0x2d, 0xa3, 0x00, 0x58, 0x35, 0x46, 0x11, 0x13, 0x71, 0x8d,
+ 0x1a, 0x5e, 0xf9, 0x44
+};
+
+static const uint8_t sig7[114] = {
+ 0x55, 0x4b, 0xc2, 0x48, 0x08, 0x60, 0xb4, 0x9e, 0xab, 0x85, 0x32, 0xd2,
+ 0xa5, 0x33, 0xb7, 0xd5, 0x78, 0xef, 0x47, 0x3e, 0xeb, 0x58, 0xc9, 0x8b,
+ 0xb2, 0xd0, 0xe1, 0xce, 0x48, 0x8a, 0x98, 0xb1, 0x8d, 0xfd, 0xe9, 0xb9,
+ 0xb9, 0x07, 0x75, 0xe6, 0x7f, 0x47, 0xd4, 0xa1, 0xc3, 0x48, 0x20, 0x58,
+ 0xef, 0xc9, 0xf4, 0x0d, 0x2c, 0xa0, 0x33, 0xa0, 0x80, 0x1b, 0x63, 0xd4,
+ 0x5b, 0x3b, 0x72, 0x2e, 0xf5, 0x52, 0xba, 0xd3, 0xb4, 0xcc, 0xb6, 0x67,
+ 0xda, 0x35, 0x01, 0x92, 0xb6, 0x1c, 0x50, 0x8c, 0xf7, 0xb6, 0xb5, 0xad,
+ 0xad, 0xc2, 0xc8, 0xd9, 0xa4, 0x46, 0xef, 0x00, 0x3f, 0xb0, 0x5c, 0xba,
+ 0x5f, 0x30, 0xe8, 0x8e, 0x36, 0xec, 0x27, 0x03, 0xb3, 0x49, 0xca, 0x22,
+ 0x9c, 0x26, 0x70, 0x83, 0x39, 0x00
+};
+
+static const uint8_t privkey8[57] = {
+ 0x2e, 0xc5, 0xfe, 0x3c, 0x17, 0x04, 0x5a, 0xbd, 0xb1, 0x36, 0xa5, 0xe6,
+ 0xa9, 0x13, 0xe3, 0x2a, 0xb7, 0x5a, 0xe6, 0x8b, 0x53, 0xd2, 0xfc, 0x14,
+ 0x9b, 0x77, 0xe5, 0x04, 0x13, 0x2d, 0x37, 0x56, 0x9b, 0x7e, 0x76, 0x6b,
+ 0xa7, 0x4a, 0x19, 0xbd, 0x61, 0x62, 0x34, 0x3a, 0x21, 0xc8, 0x59, 0x0a,
+ 0xa9, 0xce, 0xbc, 0xa9, 0x01, 0x4c, 0x63, 0x6d, 0xf5
+};
+
+static const uint8_t pubkey8[57] = {
+ 0x79, 0x75, 0x6f, 0x01, 0x4d, 0xcf, 0xe2, 0x07, 0x9f, 0x5d, 0xd9, 0xe7,
+ 0x18, 0xbe, 0x41, 0x71, 0xe2, 0xef, 0x24, 0x86, 0xa0, 0x8f, 0x25, 0x18,
+ 0x6f, 0x6b, 0xff, 0x43, 0xa9, 0x93, 0x6b, 0x9b, 0xfe, 0x12, 0x40, 0x2b,
+ 0x08, 0xae, 0x65, 0x79, 0x8a, 0x3d, 0x81, 0xe2, 0x2e, 0x9e, 0xc8, 0x0e,
+ 0x76, 0x90, 0x86, 0x2e, 0xf3, 0xd4, 0xed, 0x3a, 0x00
+};
+
+static const uint8_t msg8[256] = {
+ 0x15, 0x77, 0x75, 0x32, 0xb0, 0xbd, 0xd0, 0xd1, 0x38, 0x9f, 0x63, 0x6c,
+ 0x5f, 0x6b, 0x9b, 0xa7, 0x34, 0xc9, 0x0a, 0xf5, 0x72, 0x87, 0x7e, 0x2d,
+ 0x27, 0x2d, 0xd0, 0x78, 0xaa, 0x1e, 0x56, 0x7c, 0xfa, 0x80, 0xe1, 0x29,
+ 0x28, 0xbb, 0x54, 0x23, 0x30, 0xe8, 0x40, 0x9f, 0x31, 0x74, 0x50, 0x41,
+ 0x07, 0xec, 0xd5, 0xef, 0xac, 0x61, 0xae, 0x75, 0x04, 0xda, 0xbe, 0x2a,
+ 0x60, 0x2e, 0xde, 0x89, 0xe5, 0xcc, 0xa6, 0x25, 0x7a, 0x7c, 0x77, 0xe2,
+ 0x7a, 0x70, 0x2b, 0x3a, 0xe3, 0x9f, 0xc7, 0x69, 0xfc, 0x54, 0xf2, 0x39,
+ 0x5a, 0xe6, 0xa1, 0x17, 0x8c, 0xab, 0x47, 0x38, 0xe5, 0x43, 0x07, 0x2f,
+ 0xc1, 0xc1, 0x77, 0xfe, 0x71, 0xe9, 0x2e, 0x25, 0xbf, 0x03, 0xe4, 0xec,
+ 0xb7, 0x2f, 0x47, 0xb6, 0x4d, 0x04, 0x65, 0xaa, 0xea, 0x4c, 0x7f, 0xad,
+ 0x37, 0x25, 0x36, 0xc8, 0xba, 0x51, 0x6a, 0x60, 0x39, 0xc3, 0xc2, 0xa3,
+ 0x9f, 0x0e, 0x4d, 0x83, 0x2b, 0xe4, 0x32, 0xdf, 0xa9, 0xa7, 0x06, 0xa6,
+ 0xe5, 0xc7, 0xe1, 0x9f, 0x39, 0x79, 0x64, 0xca, 0x42, 0x58, 0x00, 0x2f,
+ 0x7c, 0x05, 0x41, 0xb5, 0x90, 0x31, 0x6d, 0xbc, 0x56, 0x22, 0xb6, 0xb2,
+ 0xa6, 0xfe, 0x7a, 0x4a, 0xbf, 0xfd, 0x96, 0x10, 0x5e, 0xca, 0x76, 0xea,
+ 0x7b, 0x98, 0x81, 0x6a, 0xf0, 0x74, 0x8c, 0x10, 0xdf, 0x04, 0x8c, 0xe0,
+ 0x12, 0xd9, 0x01, 0x01, 0x5a, 0x51, 0xf1, 0x89, 0xf3, 0x88, 0x81, 0x45,
+ 0xc0, 0x36, 0x50, 0xaa, 0x23, 0xce, 0x89, 0x4c, 0x3b, 0xd8, 0x89, 0xe0,
+ 0x30, 0xd5, 0x65, 0x07, 0x1c, 0x59, 0xf4, 0x09, 0xa9, 0x98, 0x1b, 0x51,
+ 0x87, 0x8f, 0xd6, 0xfc, 0x11, 0x06, 0x24, 0xdc, 0xbc, 0xde, 0x0b, 0xf7,
+ 0xa6, 0x9c, 0xcc, 0xe3, 0x8f, 0xab, 0xdf, 0x86, 0xf3, 0xbe, 0xf6, 0x04,
+ 0x48, 0x19, 0xde, 0x11
+};
+
+static const uint8_t sig8[114] = {
+ 0xc6, 0x50, 0xdd, 0xbb, 0x06, 0x01, 0xc1, 0x9c, 0xa1, 0x14, 0x39, 0xe1,
+ 0x64, 0x0d, 0xd9, 0x31, 0xf4, 0x3c, 0x51, 0x8e, 0xa5, 0xbe, 0xa7, 0x0d,
+ 0x3d, 0xcd, 0xe5, 0xf4, 0x19, 0x1f, 0xe5, 0x3f, 0x00, 0xcf, 0x96, 0x65,
+ 0x46, 0xb7, 0x2b, 0xcc, 0x7d, 0x58, 0xbe, 0x2b, 0x9b, 0xad, 0xef, 0x28,
+ 0x74, 0x39, 0x54, 0xe3, 0xa4, 0x4a, 0x23, 0xf8, 0x80, 0xe8, 0xd4, 0xf1,
+ 0xcf, 0xce, 0x2d, 0x7a, 0x61, 0x45, 0x2d, 0x26, 0xda, 0x05, 0x89, 0x6f,
+ 0x0a, 0x50, 0xda, 0x66, 0xa2, 0x39, 0xa8, 0xa1, 0x88, 0xb6, 0xd8, 0x25,
+ 0xb3, 0x30, 0x5a, 0xd7, 0x7b, 0x73, 0xfb, 0xac, 0x08, 0x36, 0xec, 0xc6,
+ 0x09, 0x87, 0xfd, 0x08, 0x52, 0x7c, 0x1a, 0x8e, 0x80, 0xd5, 0x82, 0x3e,
+ 0x65, 0xca, 0xfe, 0x2a, 0x3d, 0x00
+};
+
+static const uint8_t privkey9[57] = {
+ 0x87, 0x2d, 0x09, 0x37, 0x80, 0xf5, 0xd3, 0x73, 0x0d, 0xf7, 0xc2, 0x12,
+ 0x66, 0x4b, 0x37, 0xb8, 0xa0, 0xf2, 0x4f, 0x56, 0x81, 0x0d, 0xaa, 0x83,
+ 0x82, 0xcd, 0x4f, 0xa3, 0xf7, 0x76, 0x34, 0xec, 0x44, 0xdc, 0x54, 0xf1,
+ 0xc2, 0xed, 0x9b, 0xea, 0x86, 0xfa, 0xfb, 0x76, 0x32, 0xd8, 0xbe, 0x19,
+ 0x9e, 0xa1, 0x65, 0xf5, 0xad, 0x55, 0xdd, 0x9c, 0xe8
+};
+
+static const uint8_t pubkey9[57] = {
+ 0xa8, 0x1b, 0x2e, 0x8a, 0x70, 0xa5, 0xac, 0x94, 0xff, 0xdb, 0xcc, 0x9b,
+ 0xad, 0xfc, 0x3f, 0xeb, 0x08, 0x01, 0xf2, 0x58, 0x57, 0x8b, 0xb1, 0x14,
+ 0xad, 0x44, 0xec, 0xe1, 0xec, 0x0e, 0x79, 0x9d, 0xa0, 0x8e, 0xff, 0xb8,
+ 0x1c, 0x5d, 0x68, 0x5c, 0x0c, 0x56, 0xf6, 0x4e, 0xec, 0xae, 0xf8, 0xcd,
+ 0xf1, 0x1c, 0xc3, 0x87, 0x37, 0x83, 0x8c, 0xf4, 0x00
+};
+
+static const uint8_t msg9[1023] = {
+ 0x6d, 0xdf, 0x80, 0x2e, 0x1a, 0xae, 0x49, 0x86, 0x93, 0x5f, 0x7f, 0x98,
+ 0x1b, 0xa3, 0xf0, 0x35, 0x1d, 0x62, 0x73, 0xc0, 0xa0, 0xc2, 0x2c, 0x9c,
+ 0x0e, 0x83, 0x39, 0x16, 0x8e, 0x67, 0x54, 0x12, 0xa3, 0xde, 0xbf, 0xaf,
+ 0x43, 0x5e, 0xd6, 0x51, 0x55, 0x80, 0x07, 0xdb, 0x43, 0x84, 0xb6, 0x50,
+ 0xfc, 0xc0, 0x7e, 0x3b, 0x58, 0x6a, 0x27, 0xa4, 0xf7, 0xa0, 0x0a, 0xc8,
+ 0xa6, 0xfe, 0xc2, 0xcd, 0x86, 0xae, 0x4b, 0xf1, 0x57, 0x0c, 0x41, 0xe6,
+ 0xa4, 0x0c, 0x93, 0x1d, 0xb2, 0x7b, 0x2f, 0xaa, 0x15, 0xa8, 0xce, 0xdd,
+ 0x52, 0xcf, 0xf7, 0x36, 0x2c, 0x4e, 0x6e, 0x23, 0xda, 0xec, 0x0f, 0xbc,
+ 0x3a, 0x79, 0xb6, 0x80, 0x6e, 0x31, 0x6e, 0xfc, 0xc7, 0xb6, 0x81, 0x19,
+ 0xbf, 0x46, 0xbc, 0x76, 0xa2, 0x60, 0x67, 0xa5, 0x3f, 0x29, 0x6d, 0xaf,
+ 0xdb, 0xdc, 0x11, 0xc7, 0x7f, 0x77, 0x77, 0xe9, 0x72, 0x66, 0x0c, 0xf4,
+ 0xb6, 0xa9, 0xb3, 0x69, 0xa6, 0x66, 0x5f, 0x02, 0xe0, 0xcc, 0x9b, 0x6e,
+ 0xdf, 0xad, 0x13, 0x6b, 0x4f, 0xab, 0xe7, 0x23, 0xd2, 0x81, 0x3d, 0xb3,
+ 0x13, 0x6c, 0xfd, 0xe9, 0xb6, 0xd0, 0x44, 0x32, 0x2f, 0xee, 0x29, 0x47,
+ 0x95, 0x2e, 0x03, 0x1b, 0x73, 0xab, 0x5c, 0x60, 0x33, 0x49, 0xb3, 0x07,
+ 0xbd, 0xc2, 0x7b, 0xc6, 0xcb, 0x8b, 0x8b, 0xbd, 0x7b, 0xd3, 0x23, 0x21,
+ 0x9b, 0x80, 0x33, 0xa5, 0x81, 0xb5, 0x9e, 0xad, 0xeb, 0xb0, 0x9b, 0x3c,
+ 0x4f, 0x3d, 0x22, 0x77, 0xd4, 0xf0, 0x34, 0x36, 0x24, 0xac, 0xc8, 0x17,
+ 0x80, 0x47, 0x28, 0xb2, 0x5a, 0xb7, 0x97, 0x17, 0x2b, 0x4c, 0x5c, 0x21,
+ 0xa2, 0x2f, 0x9c, 0x78, 0x39, 0xd6, 0x43, 0x00, 0x23, 0x2e, 0xb6, 0x6e,
+ 0x53, 0xf3, 0x1c, 0x72, 0x3f, 0xa3, 0x7f, 0xe3, 0x87, 0xc7, 0xd3, 0xe5,
+ 0x0b, 0xdf, 0x98, 0x13, 0xa3, 0x0e, 0x5b, 0xb1, 0x2c, 0xf4, 0xcd, 0x93,
+ 0x0c, 0x40, 0xcf, 0xb4, 0xe1, 0xfc, 0x62, 0x25, 0x92, 0xa4, 0x95, 0x88,
+ 0x79, 0x44, 0x94, 0xd5, 0x6d, 0x24, 0xea, 0x4b, 0x40, 0xc8, 0x9f, 0xc0,
+ 0x59, 0x6c, 0xc9, 0xeb, 0xb9, 0x61, 0xc8, 0xcb, 0x10, 0xad, 0xde, 0x97,
+ 0x6a, 0x5d, 0x60, 0x2b, 0x1c, 0x3f, 0x85, 0xb9, 0xb9, 0xa0, 0x01, 0xed,
+ 0x3c, 0x6a, 0x4d, 0x3b, 0x14, 0x37, 0xf5, 0x20, 0x96, 0xcd, 0x19, 0x56,
+ 0xd0, 0x42, 0xa5, 0x97, 0xd5, 0x61, 0xa5, 0x96, 0xec, 0xd3, 0xd1, 0x73,
+ 0x5a, 0x8d, 0x57, 0x0e, 0xa0, 0xec, 0x27, 0x22, 0x5a, 0x2c, 0x4a, 0xaf,
+ 0xf2, 0x63, 0x06, 0xd1, 0x52, 0x6c, 0x1a, 0xf3, 0xca, 0x6d, 0x9c, 0xf5,
+ 0xa2, 0xc9, 0x8f, 0x47, 0xe1, 0xc4, 0x6d, 0xb9, 0xa3, 0x32, 0x34, 0xcf,
+ 0xd4, 0xd8, 0x1f, 0x2c, 0x98, 0x53, 0x8a, 0x09, 0xeb, 0xe7, 0x69, 0x98,
+ 0xd0, 0xd8, 0xfd, 0x25, 0x99, 0x7c, 0x7d, 0x25, 0x5c, 0x6d, 0x66, 0xec,
+ 0xe6, 0xfa, 0x56, 0xf1, 0x11, 0x44, 0x95, 0x0f, 0x02, 0x77, 0x95, 0xe6,
+ 0x53, 0x00, 0x8f, 0x4b, 0xd7, 0xca, 0x2d, 0xee, 0x85, 0xd8, 0xe9, 0x0f,
+ 0x3d, 0xc3, 0x15, 0x13, 0x0c, 0xe2, 0xa0, 0x03, 0x75, 0xa3, 0x18, 0xc7,
+ 0xc3, 0xd9, 0x7b, 0xe2, 0xc8, 0xce, 0x5b, 0x6d, 0xb4, 0x1a, 0x62, 0x54,
+ 0xff, 0x26, 0x4f, 0xa6, 0x15, 0x5b, 0xae, 0xe3, 0xb0, 0x77, 0x3c, 0x0f,
+ 0x49, 0x7c, 0x57, 0x3f, 0x19, 0xbb, 0x4f, 0x42, 0x40, 0x28, 0x1f, 0x0b,
+ 0x1f, 0x4f, 0x7b, 0xe8, 0x57, 0xa4, 0xe5, 0x9d, 0x41, 0x6c, 0x06, 0xb4,
+ 0xc5, 0x0f, 0xa0, 0x9e, 0x18, 0x10, 0xdd, 0xc6, 0xb1, 0x46, 0x7b, 0xae,
+ 0xac, 0x5a, 0x36, 0x68, 0xd1, 0x1b, 0x6e, 0xca, 0xa9, 0x01, 0x44, 0x00,
+ 0x16, 0xf3, 0x89, 0xf8, 0x0a, 0xcc, 0x4d, 0xb9, 0x77, 0x02, 0x5e, 0x7f,
+ 0x59, 0x24, 0x38, 0x8c, 0x7e, 0x34, 0x0a, 0x73, 0x2e, 0x55, 0x44, 0x40,
+ 0xe7, 0x65, 0x70, 0xf8, 0xdd, 0x71, 0xb7, 0xd6, 0x40, 0xb3, 0x45, 0x0d,
+ 0x1f, 0xd5, 0xf0, 0x41, 0x0a, 0x18, 0xf9, 0xa3, 0x49, 0x4f, 0x70, 0x7c,
+ 0x71, 0x7b, 0x79, 0xb4, 0xbf, 0x75, 0xc9, 0x84, 0x00, 0xb0, 0x96, 0xb2,
+ 0x16, 0x53, 0xb5, 0xd2, 0x17, 0xcf, 0x35, 0x65, 0xc9, 0x59, 0x74, 0x56,
+ 0xf7, 0x07, 0x03, 0x49, 0x7a, 0x07, 0x87, 0x63, 0x82, 0x9b, 0xc0, 0x1b,
+ 0xb1, 0xcb, 0xc8, 0xfa, 0x04, 0xea, 0xdc, 0x9a, 0x6e, 0x3f, 0x66, 0x99,
+ 0x58, 0x7a, 0x9e, 0x75, 0xc9, 0x4e, 0x5b, 0xab, 0x00, 0x36, 0xe0, 0xb2,
+ 0xe7, 0x11, 0x39, 0x2c, 0xff, 0x00, 0x47, 0xd0, 0xd6, 0xb0, 0x5b, 0xd2,
+ 0xa5, 0x88, 0xbc, 0x10, 0x97, 0x18, 0x95, 0x42, 0x59, 0xf1, 0xd8, 0x66,
+ 0x78, 0xa5, 0x79, 0xa3, 0x12, 0x0f, 0x19, 0xcf, 0xb2, 0x96, 0x3f, 0x17,
+ 0x7a, 0xeb, 0x70, 0xf2, 0xd4, 0x84, 0x48, 0x26, 0x26, 0x2e, 0x51, 0xb8,
+ 0x02, 0x71, 0x27, 0x20, 0x68, 0xef, 0x5b, 0x38, 0x56, 0xfa, 0x85, 0x35,
+ 0xaa, 0x2a, 0x88, 0xb2, 0xd4, 0x1f, 0x2a, 0x0e, 0x2f, 0xda, 0x76, 0x24,
+ 0xc2, 0x85, 0x02, 0x72, 0xac, 0x4a, 0x2f, 0x56, 0x1f, 0x8f, 0x2f, 0x7a,
+ 0x31, 0x8b, 0xfd, 0x5c, 0xaf, 0x96, 0x96, 0x14, 0x9e, 0x4a, 0xc8, 0x24,
+ 0xad, 0x34, 0x60, 0x53, 0x8f, 0xdc, 0x25, 0x42, 0x1b, 0xee, 0xc2, 0xcc,
+ 0x68, 0x18, 0x16, 0x2d, 0x06, 0xbb, 0xed, 0x0c, 0x40, 0xa3, 0x87, 0x19,
+ 0x23, 0x49, 0xdb, 0x67, 0xa1, 0x18, 0xba, 0xda, 0x6c, 0xd5, 0xab, 0x01,
+ 0x40, 0xee, 0x27, 0x32, 0x04, 0xf6, 0x28, 0xaa, 0xd1, 0xc1, 0x35, 0xf7,
+ 0x70, 0x27, 0x9a, 0x65, 0x1e, 0x24, 0xd8, 0xc1, 0x4d, 0x75, 0xa6, 0x05,
+ 0x9d, 0x76, 0xb9, 0x6a, 0x6f, 0xd8, 0x57, 0xde, 0xf5, 0xe0, 0xb3, 0x54,
+ 0xb2, 0x7a, 0xb9, 0x37, 0xa5, 0x81, 0x5d, 0x16, 0xb5, 0xfa, 0xe4, 0x07,
+ 0xff, 0x18, 0x22, 0x2c, 0x6d, 0x1e, 0xd2, 0x63, 0xbe, 0x68, 0xc9, 0x5f,
+ 0x32, 0xd9, 0x08, 0xbd, 0x89, 0x5c, 0xd7, 0x62, 0x07, 0xae, 0x72, 0x64,
+ 0x87, 0x56, 0x7f, 0x9a, 0x67, 0xda, 0xd7, 0x9a, 0xbe, 0xc3, 0x16, 0xf6,
+ 0x83, 0xb1, 0x7f, 0x2d, 0x02, 0xbf, 0x07, 0xe0, 0xac, 0x8b, 0x5b, 0xc6,
+ 0x16, 0x2c, 0xf9, 0x46, 0x97, 0xb3, 0xc2, 0x7c, 0xd1, 0xfe, 0xa4, 0x9b,
+ 0x27, 0xf2, 0x3b, 0xa2, 0x90, 0x18, 0x71, 0x96, 0x25, 0x06, 0x52, 0x0c,
+ 0x39, 0x2d, 0xa8, 0xb6, 0xad, 0x0d, 0x99, 0xf7, 0x01, 0x3f, 0xbc, 0x06,
+ 0xc2, 0xc1, 0x7a, 0x56, 0x95, 0x00, 0xc8, 0xa7, 0x69, 0x64, 0x81, 0xc1,
+ 0xcd, 0x33, 0xe9, 0xb1, 0x4e, 0x40, 0xb8, 0x2e, 0x79, 0xa5, 0xf5, 0xdb,
+ 0x82, 0x57, 0x1b, 0xa9, 0x7b, 0xae, 0x3a, 0xd3, 0xe0, 0x47, 0x95, 0x15,
+ 0xbb, 0x0e, 0x2b, 0x0f, 0x3b, 0xfc, 0xd1, 0xfd, 0x33, 0x03, 0x4e, 0xfc,
+ 0x62, 0x45, 0xed, 0xdd, 0x7e, 0xe2, 0x08, 0x6d, 0xda, 0xe2, 0x60, 0x0d,
+ 0x8c, 0xa7, 0x3e, 0x21, 0x4e, 0x8c, 0x2b, 0x0b, 0xdb, 0x2b, 0x04, 0x7c,
+ 0x6a, 0x46, 0x4a, 0x56, 0x2e, 0xd7, 0x7b, 0x73, 0xd2, 0xd8, 0x41, 0xc4,
+ 0xb3, 0x49, 0x73, 0x55, 0x12, 0x57, 0x71, 0x3b, 0x75, 0x36, 0x32, 0xef,
+ 0xba, 0x34, 0x81, 0x69, 0xab, 0xc9, 0x0a, 0x68, 0xf4, 0x26, 0x11, 0xa4,
+ 0x01, 0x26, 0xd7, 0xcb, 0x21, 0xb5, 0x86, 0x95, 0x56, 0x81, 0x86, 0xf7,
+ 0xe5, 0x69, 0xd2, 0xff, 0x0f, 0x9e, 0x74, 0x5d, 0x04, 0x87, 0xdd, 0x2e,
+ 0xb9, 0x97, 0xca, 0xfc, 0x5a, 0xbf, 0x9d, 0xd1, 0x02, 0xe6, 0x2f, 0xf6,
+ 0x6c, 0xba, 0x87
+};
+
+static const uint8_t sig9[114] = {
+ 0xe3, 0x01, 0x34, 0x5a, 0x41, 0xa3, 0x9a, 0x4d, 0x72, 0xff, 0xf8, 0xdf,
+ 0x69, 0xc9, 0x80, 0x75, 0xa0, 0xcc, 0x08, 0x2b, 0x80, 0x2f, 0xc9, 0xb2,
+ 0xb6, 0xbc, 0x50, 0x3f, 0x92, 0x6b, 0x65, 0xbd, 0xdf, 0x7f, 0x4c, 0x8f,
+ 0x1c, 0xb4, 0x9f, 0x63, 0x96, 0xaf, 0xc8, 0xa7, 0x0a, 0xbe, 0x6d, 0x8a,
+ 0xef, 0x0d, 0xb4, 0x78, 0xd4, 0xc6, 0xb2, 0x97, 0x00, 0x76, 0xc6, 0xa0,
+ 0x48, 0x4f, 0xe7, 0x6d, 0x76, 0xb3, 0xa9, 0x76, 0x25, 0xd7, 0x9f, 0x1c,
+ 0xe2, 0x40, 0xe7, 0xc5, 0x76, 0x75, 0x0d, 0x29, 0x55, 0x28, 0x28, 0x6f,
+ 0x71, 0x9b, 0x41, 0x3d, 0xe9, 0xad, 0xa3, 0xe8, 0xeb, 0x78, 0xed, 0x57,
+ 0x36, 0x03, 0xce, 0x30, 0xd8, 0xbb, 0x76, 0x17, 0x85, 0xdc, 0x30, 0xdb,
+ 0xc3, 0x20, 0x86, 0x9e, 0x1a, 0x00
+};
+
+/* Prehash Ed448 */
+
+static const uint8_t phprivkey1[57] = {
+ 0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58,
+ 0x75, 0x20, 0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b,
+ 0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42, 0xef, 0x78, 0x22, 0xe0,
+ 0xd5, 0x10, 0x41, 0x27, 0xdc, 0x05, 0xd6, 0xdb, 0xef, 0xde, 0x69, 0xe3,
+ 0xab, 0x2c, 0xec, 0x7c, 0x86, 0x7c, 0x6e, 0x2c, 0x49
+};
+
+static const uint8_t phpubkey1[57] = {
+ 0x25, 0x9b, 0x71, 0xc1, 0x9f, 0x83, 0xef, 0x77, 0xa7, 0xab, 0xd2, 0x65,
+ 0x24, 0xcb, 0xdb, 0x31, 0x61, 0xb5, 0x90, 0xa4, 0x8f, 0x7d, 0x17, 0xde,
+ 0x3e, 0xe0, 0xba, 0x9c, 0x52, 0xbe, 0xb7, 0x43, 0xc0, 0x94, 0x28, 0xa1,
+ 0x31, 0xd6, 0xb1, 0xb5, 0x73, 0x03, 0xd9, 0x0d, 0x81, 0x32, 0xc2, 0x76,
+ 0xd5, 0xed, 0x3d, 0x5d, 0x01, 0xc0, 0xf5, 0x38, 0x80
+};
+
+static const uint8_t phmsg1[3] = {
+ 0x61, 0x62, 0x63
+};
+
+static const uint8_t phsig1[114] = {
+ 0x82, 0x2f, 0x69, 0x01, 0xf7, 0x48, 0x0f, 0x3d, 0x5f, 0x56, 0x2c, 0x59,
+ 0x29, 0x94, 0xd9, 0x69, 0x36, 0x02, 0x87, 0x56, 0x14, 0x48, 0x32, 0x56,
+ 0x50, 0x56, 0x00, 0xbb, 0xc2, 0x81, 0xae, 0x38, 0x1f, 0x54, 0xd6, 0xbc,
+ 0xe2, 0xea, 0x91, 0x15, 0x74, 0x93, 0x2f, 0x52, 0xa4, 0xe6, 0xca, 0xdd,
+ 0x78, 0x76, 0x93, 0x75, 0xec, 0x3f, 0xfd, 0x1b, 0x80, 0x1a, 0x0d, 0x9b,
+ 0x3f, 0x40, 0x30, 0xcd, 0x43, 0x39, 0x64, 0xb6, 0x45, 0x7e, 0xa3, 0x94,
+ 0x76, 0x51, 0x12, 0x14, 0xf9, 0x74, 0x69, 0xb5, 0x7d, 0xd3, 0x2d, 0xbc,
+ 0x56, 0x0a, 0x9a, 0x94, 0xd0, 0x0b, 0xff, 0x07, 0x62, 0x04, 0x64, 0xa3,
+ 0xad, 0x20, 0x3d, 0xf7, 0xdc, 0x7c, 0xe3, 0x60, 0xc3, 0xcd, 0x36, 0x96,
+ 0xd9, 0xd9, 0xfa, 0xb9, 0x0f, 0x00
+};
+
+static const uint8_t phprivkey2[57] = {
+ 0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58,
+ 0x75, 0x20, 0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b,
+ 0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42, 0xef, 0x78, 0x22, 0xe0,
+ 0xd5, 0x10, 0x41, 0x27, 0xdc, 0x05, 0xd6, 0xdb, 0xef, 0xde, 0x69, 0xe3,
+ 0xab, 0x2c, 0xec, 0x7c, 0x86, 0x7c, 0x6e, 0x2c, 0x49
+};
+
+static const uint8_t phpubkey2[57] = {
+ 0x25, 0x9b, 0x71, 0xc1, 0x9f, 0x83, 0xef, 0x77, 0xa7, 0xab, 0xd2, 0x65,
+ 0x24, 0xcb, 0xdb, 0x31, 0x61, 0xb5, 0x90, 0xa4, 0x8f, 0x7d, 0x17, 0xde,
+ 0x3e, 0xe0, 0xba, 0x9c, 0x52, 0xbe, 0xb7, 0x43, 0xc0, 0x94, 0x28, 0xa1,
+ 0x31, 0xd6, 0xb1, 0xb5, 0x73, 0x03, 0xd9, 0x0d, 0x81, 0x32, 0xc2, 0x76,
+ 0xd5, 0xed, 0x3d, 0x5d, 0x01, 0xc0, 0xf5, 0x38, 0x80
+};
+
+static const uint8_t phmsg2[3] = {
+ 0x61, 0x62, 0x63
+};
+
+static const uint8_t phcontext2[3] = {
+ 0x66, 0x6f, 0x6f
+};
+
+static const uint8_t phsig2[114] = {
+ 0xc3, 0x22, 0x99, 0xd4, 0x6e, 0xc8, 0xff, 0x02, 0xb5, 0x45, 0x40, 0x98,
+ 0x28, 0x14, 0xdc, 0xe9, 0xa0, 0x58, 0x12, 0xf8, 0x19, 0x62, 0xb6, 0x49,
+ 0xd5, 0x28, 0x09, 0x59, 0x16, 0xa2, 0xaa, 0x48, 0x10, 0x65, 0xb1, 0x58,
+ 0x04, 0x23, 0xef, 0x92, 0x7e, 0xcf, 0x0a, 0xf5, 0x88, 0x8f, 0x90, 0xda,
+ 0x0f, 0x6a, 0x9a, 0x85, 0xad, 0x5d, 0xc3, 0xf2, 0x80, 0xd9, 0x12, 0x24,
+ 0xba, 0x99, 0x11, 0xa3, 0x65, 0x3d, 0x00, 0xe4, 0x84, 0xe2, 0xce, 0x23,
+ 0x25, 0x21, 0x48, 0x1c, 0x86, 0x58, 0xdf, 0x30, 0x4b, 0xb7, 0x74, 0x5a,
+ 0x73, 0x51, 0x4c, 0xdb, 0x9b, 0xf3, 0xe1, 0x57, 0x84, 0xab, 0x71, 0x28,
+ 0x4f, 0x8d, 0x07, 0x04, 0xa6, 0x08, 0xc5, 0x4a, 0x6b, 0x62, 0xd9, 0x7b,
+ 0xeb, 0x51, 0x1d, 0x13, 0x21, 0x00
+};
+
+static const uint8_t *dohash(EVP_MD_CTX *hashctx, const uint8_t *msg,
+ size_t msglen)
+{
+ static uint8_t hashout[64];
+
+ if (!EVP_DigestInit_ex(hashctx, EVP_shake256(), NULL)
+ || !EVP_DigestUpdate(hashctx, msg, msglen)
+ || !EVP_DigestFinalXOF(hashctx, hashout, sizeof(hashout)))
+ return NULL;
+
+ return hashout;
+}
+
+static int test_ed448(void)
+{
+ uint8_t outsig[114];
+ EVP_MD_CTX *hashctx = EVP_MD_CTX_new();
+
+ if (!TEST_ptr(hashctx)
+ || !TEST_true(ossl_ed448_sign(NULL, outsig, NULL, 0, pubkey1,
+ privkey1, NULL, 0, NULL))
+ || !TEST_int_eq(memcmp(sig1, outsig, sizeof(sig1)), 0)
+ || !TEST_true(ossl_ed448_sign(NULL, outsig, msg2, sizeof(msg2),
+ pubkey2, privkey2, NULL, 0, NULL))
+ || !TEST_int_eq(memcmp(sig2, outsig, sizeof(sig2)), 0)
+ || !TEST_true(ossl_ed448_sign(NULL, outsig, msg3, sizeof(msg3),
+ pubkey3, privkey3, context3,
+ sizeof(context3), NULL))
+ || !TEST_int_eq(memcmp(sig3, outsig, sizeof(sig3)), 0)
+ || !TEST_true(ossl_ed448_sign(NULL, outsig, msg4, sizeof(msg4),
+ pubkey4, privkey4, NULL, 0, NULL))
+ || !TEST_int_eq(memcmp(sig4, outsig, sizeof(sig4)), 0)
+ || !TEST_true(ossl_ed448_sign(NULL, outsig, msg5, sizeof(msg5),
+ pubkey5, privkey5, NULL, 0, NULL))
+ || !TEST_int_eq(memcmp(sig5, outsig, sizeof(sig5)), 0)
+ || !TEST_true(ossl_ed448_sign(NULL, outsig, msg6, sizeof(msg6),
+ pubkey6, privkey6, NULL, 0, NULL))
+ || !TEST_int_eq(memcmp(sig6, outsig, sizeof(sig6)), 0)
+ || !TEST_true(ossl_ed448_sign(NULL, outsig, msg7, sizeof(msg7),
+ pubkey7, privkey7, NULL, 0, NULL))
+ || !TEST_int_eq(memcmp(sig7, outsig, sizeof(sig7)), 0)
+ || !TEST_true(ossl_ed448_sign(NULL, outsig, msg8, sizeof(msg8),
+ pubkey8, privkey8, NULL, 0, NULL))
+ || !TEST_int_eq(memcmp(sig8, outsig, sizeof(sig8)), 0)
+ || !TEST_true(ossl_ed448_sign(NULL, outsig, msg9, sizeof(msg9),
+ pubkey9, privkey9, NULL, 0, NULL))
+ || !TEST_int_eq(memcmp(sig9, outsig, sizeof(sig9)), 0)
+ || !TEST_true(ossl_ed448ph_sign(NULL, outsig,
+ dohash(hashctx, phmsg1,
+ sizeof(phmsg1)), phpubkey1,
+ phprivkey1, NULL, 0, NULL))
+ || !TEST_int_eq(memcmp(phsig1, outsig, sizeof(phsig1)), 0)
+ || !TEST_true(ossl_ed448ph_sign(NULL, outsig,
+ dohash(hashctx, phmsg2,
+ sizeof(phmsg2)), phpubkey2,
+ phprivkey2, phcontext2,
+ sizeof(phcontext2), NULL))
+ || !TEST_int_eq(memcmp(phsig2, outsig, sizeof(phsig2)), 0)) {
+ EVP_MD_CTX_free(hashctx);
+ return 0;
+ }
+
+ EVP_MD_CTX_free(hashctx);
+ return 1;
+}
+
+static int test_x448(void)
+{
+ uint8_t u[56], k[56], out[56];
+ unsigned int i;
+ int j = -1;
+
+ /* Curve448 tests */
+
+ if (!TEST_true(ossl_x448(out, in_scalar1, in_u1))
+ || !TEST_int_eq(memcmp(out, out_u1, sizeof(out)), 0)
+ || !TEST_true(ossl_x448(out, in_scalar2, in_u2))
+ || !TEST_int_eq(memcmp(out, out_u2, sizeof(out)), 0))
+ return 0;
+
+ memcpy(u, in_u3, sizeof(u));
+ memcpy(k, in_u3, sizeof(k));
+ for (i = 1; i <= max; i++) {
+ if (verbose && i % 10000 == 0) {
+ printf(".");
+ fflush(stdout);
+ }
+
+ if (!TEST_true(ossl_x448(out, k, u)))
+ return 0;
+
+ if (i == 1 || i == 1000 || i == 1000000) {
+ j++;
+ if (!TEST_int_eq(memcmp(out, out_u3[j], sizeof(out)), 0)) {
+ TEST_info("Failed at iteration %d", i);
+ return 0;
+ }
+ }
+ memcpy(u, k, sizeof(u));
+ memcpy(k, out, sizeof(k));
+ }
+
+ return 1;
+}
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_PROGRESS,
+ OPT_SLOW,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("conf_file\n"),
+ { "f", OPT_SLOW, '-', "Enables a slow test" },
+ { "v", OPT_PROGRESS, '-',
+ "Enables verbose mode (prints progress dots)" },
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_TEST_CASES:
+ break;
+ default:
+ return 0;
+ /*
+ * The test vectors contain one test which takes a very long time to run
+ * so we don't do that be default. Using the -f option will cause it to
+ * be run.
+ */
+ case OPT_SLOW:
+ max = 1000000;
+ break;
+ case OPT_PROGRESS:
+ verbose = 1; /* Print progress dots */
+ break;
+ }
+ }
+
+ ADD_TEST(test_x448);
+ ADD_TEST(test_ed448);
+ return 1;
+}
diff --git a/test/d2i-tests/bad-cms.der b/test/d2i-tests/bad-cms.der
new file mode 100644
index 000000000000..19cd3cc3f2a6
--- /dev/null
+++ b/test/d2i-tests/bad-cms.der
@@ -0,0 +1 @@
+0 *†H†÷   010 \ No newline at end of file
diff --git a/test/d2i-tests/bad-int-pad0.der b/test/d2i-tests/bad-int-pad0.der
new file mode 100644
index 000000000000..46f6092a82cc
--- /dev/null
+++ b/test/d2i-tests/bad-int-pad0.der
Binary files differ
diff --git a/test/d2i-tests/bad-int-padminus1.der b/test/d2i-tests/bad-int-padminus1.der
new file mode 100644
index 000000000000..a4b6bb97921f
--- /dev/null
+++ b/test/d2i-tests/bad-int-padminus1.der
@@ -0,0 +1 @@
+ÿÿ \ No newline at end of file
diff --git a/test/d2i-tests/bad_bio.der b/test/d2i-tests/bad_bio.der
new file mode 100644
index 000000000000..8681f0528d97
--- /dev/null
+++ b/test/d2i-tests/bad_bio.der
Binary files differ
diff --git a/test/d2i-tests/bad_cert.der b/test/d2i-tests/bad_cert.der
new file mode 100644
index 000000000000..f75efad398a6
--- /dev/null
+++ b/test/d2i-tests/bad_cert.der
Binary files differ
diff --git a/test/d2i-tests/bad_generalname.der b/test/d2i-tests/bad_generalname.der
new file mode 100644
index 000000000000..af45855c5242
--- /dev/null
+++ b/test/d2i-tests/bad_generalname.der
@@ -0,0 +1 @@
+¥€0;¶!;)''ï÷!l¿(,:µ¿(*;©:§«½:“**;i)*w*ë)ã;U:'):ñ;l*!'Ò£ \ No newline at end of file
diff --git a/test/d2i-tests/high_tag.der b/test/d2i-tests/high_tag.der
new file mode 100644
index 000000000000..5c523ecde54f
--- /dev/null
+++ b/test/d2i-tests/high_tag.der
Binary files differ
diff --git a/test/d2i-tests/int0.der b/test/d2i-tests/int0.der
new file mode 100644
index 000000000000..bbfb76b9d33e
--- /dev/null
+++ b/test/d2i-tests/int0.der
Binary files differ
diff --git a/test/d2i-tests/int1.der b/test/d2i-tests/int1.der
new file mode 100644
index 000000000000..26dd6b16d96e
--- /dev/null
+++ b/test/d2i-tests/int1.der
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/d2i-tests/intminus1.der b/test/d2i-tests/intminus1.der
new file mode 100644
index 000000000000..e7c1cea38cbe
--- /dev/null
+++ b/test/d2i-tests/intminus1.der
@@ -0,0 +1 @@
+ÿ \ No newline at end of file
diff --git a/test/d2i_test.c b/test/d2i_test.c
new file mode 100644
index 000000000000..c095dfef37e8
--- /dev/null
+++ b/test/d2i_test.c
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2016-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
+ */
+
+/* Regression tests for ASN.1 parsing bugs. */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "testutil.h"
+
+#include <openssl/asn1.h>
+#include <openssl/asn1t.h>
+#include <openssl/bio.h>
+#include <openssl/err.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include "internal/nelem.h"
+
+static const ASN1_ITEM *item_type;
+static const char *test_file;
+
+typedef enum {
+ ASN1_UNKNOWN,
+ ASN1_OK,
+ ASN1_BIO,
+ ASN1_DECODE,
+ ASN1_ENCODE,
+ ASN1_COMPARE
+} expected_error_t;
+
+typedef struct {
+ const char *str;
+ expected_error_t code;
+} error_enum;
+
+static expected_error_t expected_error = ASN1_UNKNOWN;
+
+static int test_bad_asn1(void)
+{
+ BIO *bio = NULL;
+ ASN1_VALUE *value = NULL;
+ int ret = 0;
+ unsigned char buf[2048];
+ const unsigned char *buf_ptr = buf;
+ unsigned char *der = NULL;
+ int derlen;
+ int len;
+
+ bio = BIO_new_file(test_file, "r");
+ if (!TEST_ptr(bio))
+ return 0;
+
+ if (expected_error == ASN1_BIO) {
+ if (TEST_ptr_null(ASN1_item_d2i_bio(item_type, bio, NULL)))
+ ret = 1;
+ goto err;
+ }
+
+ /*
+ * Unless we are testing it we don't use ASN1_item_d2i_bio because it
+ * performs sanity checks on the input and can reject it before the
+ * decoder is called.
+ */
+ len = BIO_read(bio, buf, sizeof(buf));
+ if (!TEST_int_ge(len, 0))
+ goto err;
+
+ value = ASN1_item_d2i(NULL, &buf_ptr, len, item_type);
+ if (value == NULL) {
+ if (TEST_int_eq(expected_error, ASN1_DECODE))
+ ret = 1;
+ goto err;
+ }
+
+ derlen = ASN1_item_i2d(value, &der, item_type);
+
+ if (der == NULL || derlen < 0) {
+ if (TEST_int_eq(expected_error, ASN1_ENCODE))
+ ret = 1;
+ goto err;
+ }
+
+ if (derlen != len || memcmp(der, buf, derlen) != 0) {
+ if (TEST_int_eq(expected_error, ASN1_COMPARE))
+ ret = 1;
+ goto err;
+ }
+
+ if (TEST_int_eq(expected_error, ASN1_OK))
+ ret = 1;
+
+ err:
+ /* Don't indicate success for memory allocation errors */
+ if (ret == 1
+ && !TEST_false(ERR_GET_REASON(ERR_peek_error()) == ERR_R_MALLOC_FAILURE))
+ ret = 0;
+ BIO_free(bio);
+ OPENSSL_free(der);
+ ASN1_item_free(value, item_type);
+ return ret;
+}
+
+OPT_TEST_DECLARE_USAGE("item_name expected_error test_file.der\n")
+
+/*
+ * Usage: d2i_test <name> <type> <file>, e.g.
+ * d2i_test generalname bad_generalname.der
+ */
+int setup_tests(void)
+{
+ const char *test_type_name;
+ const char *expected_error_string;
+
+ size_t i;
+
+ static error_enum expected_errors[] = {
+ {"OK", ASN1_OK},
+ {"BIO", ASN1_BIO},
+ {"decode", ASN1_DECODE},
+ {"encode", ASN1_ENCODE},
+ {"compare", ASN1_COMPARE}
+ };
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(test_type_name = test_get_argument(0))
+ || !TEST_ptr(expected_error_string = test_get_argument(1))
+ || !TEST_ptr(test_file = test_get_argument(2)))
+ return 0;
+
+ item_type = ASN1_ITEM_lookup(test_type_name);
+
+ if (item_type == NULL) {
+ TEST_error("Unknown type %s", test_type_name);
+ TEST_note("Supported types:");
+ for (i = 0;; i++) {
+ const ASN1_ITEM *it = ASN1_ITEM_get(i);
+
+ if (it == NULL)
+ break;
+ TEST_note("\t%s", it->sname);
+ }
+ return 0;
+ }
+
+ for (i = 0; i < OSSL_NELEM(expected_errors); i++) {
+ if (strcmp(expected_errors[i].str, expected_error_string) == 0) {
+ expected_error = expected_errors[i].code;
+ break;
+ }
+ }
+
+ if (expected_error == ASN1_UNKNOWN) {
+ TEST_error("Unknown expected error %s\n", expected_error_string);
+ return 0;
+ }
+
+ ADD_TEST(test_bad_asn1);
+ return 1;
+}
diff --git a/test/dane-cross.in b/test/dane-cross.in
new file mode 100644
index 000000000000..63c37fbf330a
--- /dev/null
+++ b/test/dane-cross.in
@@ -0,0 +1,113 @@
+# Copyright 2016-2022 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
+#
+# Blank and comment lines ignored.
+#
+# The first line in each block takes the form:
+#
+# <TLSA-count> <cert-count> <nonamechecks> <desired-verify-result> <desired-match-depth>
+#
+# It is followed by <TLSA-count> lines of the form:
+#
+# <usage> <selector> <mtype> <hex-data>
+#
+# and finally, by <cert-count> certificates.
+
+# 1
+# Ensure TLSA with direct root works when peer chain provides a
+# cross-cert.
+1 4 0 0 2
+2 0 0 308202f1308201d9a003020102020101300d06092a864886f70d01010b050030123110300e06035504030c07526f6f742043413020170d3136303131353038313934395a180f32313136303131363038313934395a30123110300e06035504030c07526f6f7420434130820122300d06092a864886f70d01010105000382010f003082010a0282010100e1e600f506bca04638790f3f1e7119136d02df2b9b766bfcacb021edd69108423ba56335ec525ba0a24ac5d6009403975a3db96728d27de3215ca4edc63c8d8e84d19d54c33dd974a296766771f9c61a5077b3fd78ee5be0e38c8923c29a22ec3ed4379e07cdc02b5511173a34421c690d3a18b0ed15945ec6fd9e87c61ce7941a92c05f05c17343e503de0991c924ced88e8b7e2ee03148d1862a6a55267ae80b364e97b1e0a4c9da5c694b0380085683a31fb22ab8c14cfec5b14dd4c001aaedbece25bdee69adf607cd6e2ba18954f568eb9809edc96066cb33624a03b068d60eab5fc135557efd46eebaebdcb6a2a3ed857f77dfb56822437e662423afc50203010001a350304e301d0603551d0e041604148ef525af1e9b6b843d7c809ac9539c4d72f7a352301f0603551d230418301680148ef525af1e9b6b843d7c809ac9539c4d72f7a352300c0603551d13040530030101ff300d06092a864886f70d01010b05000382010100c91449c76ed660ea203d76693df00cb7ca6d6a9affba02d618b9706f32b24a8c8ba68576fd8340bd300607dd2216aeb1fee8e3acae35fc44b4a77bf7f3f41fbb1a36e2071981cfe860b57652a47eb860b1ebca763962d872d06c011b5858e1203e11c56fd695c5c3902b2647b62bc35f4c0b197fa7a99a075fd21899cd2c6e944144ccf146c0a16f30f9adef6467936b8248c0e8327b8d88761a2b4e33aa085370ddf7ea64ddb084905520472f6a37f93e0327aa1f541c6f92d4f8c4e6970f1b9b2ce630e05981d7a0b4ee07b2170130ed39e0a481dd649f04f0ce6c4859d2f9bf970eb74c68bcf3220cb65926714da0d112a979023de86e907aa1f2285de9f0
+subject=CN = server.example
+issuer=CN = CA
+notBefore=Jan 15 08:19:49 2016 GMT
+notAfter=Jan 16 08:19:49 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
+Fw0xNjAxMTUwODE5NDlaGA8yMTE2MDExNjA4MTk0OVowGTEXMBUGA1UEAwwOc2Vy
+dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
+YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
+5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
+Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
+U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
+ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
+iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
+l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
+MA0GCSqGSIb3DQEBCwUAA4IBAQBBtDxPYULl5b7VFC7/U0NgV8vTJk4zpPnUMMQ4
+QF2AWDFAek8oLKrz18KQ8M/DEhDxgkaoeXEMLT6BJUEVNYuFEYHEDGarl0nMDRXL
+xOgAExfz3Tf/pjsLaha5aWH7NyCSKWC+lYkIOJ/Kb/m/6QsDJoXsEC8AhrPfqJhz
+UzsCoxIlaDWqawH4+S8bdeX0tvs2VtJk/WOJHxMqXra6kgI4fAgyvr2kIZHinQ3y
+cgX40uAC38bwpE95kJ7FhSfQlE1Rt7sOspUj098Dd0RNDn2uKyOTxEqIELHfw4AX
+O3XAzt8qDyho8nEd/xiQ6qgsQnvXa+hSRJw42g3/czVskxRx
+-----END CERTIFICATE-----
+subject=CN = CA
+issuer=CN = Root CA
+notBefore=Jan 15 08:19:49 2016 GMT
+notAfter=Jan 16 08:19:49 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
+DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
+j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
+n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
+l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
+YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
+ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
+CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
+A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
+IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
+AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
+8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
+uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
+5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4=
+-----END CERTIFICATE-----
+subject=CN = Root CA
+issuer=CN = Cross Root
+notBefore=Aug 30 18:36:38 2021 GMT
+notAfter=Aug 31 18:36:38 2121 GMT
+-----BEGIN CERTIFICATE-----
+MIIC9zCCAd+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApDcm9z
+cyBSb290MCAXDTIxMDgzMDE4MzYzOFoYDzIxMjEwODMxMTgzNjM4WjASMRAwDgYD
+VQQDDAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA
+9Qa8oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25
+ZyjSfeMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3
+ngfNwCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6L
+fi7gMUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7O
+Jb3uaa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2F
+f3fftWgiQ35mJCOvxQIDAQABo1MwUTAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOc
+TXL3o1IwHwYDVR0jBBgwFoAUL16/ihJvr2w9I5k63jjZ13SPW20wDwYDVR0TAQH/
+BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAHi+qdZF/jJrR/F3L60JVLOOUhTpi
+LxFFBksZPVaiVf+6R8pSMy0WtDEkzGT430ji6V4i8O/70HXIG9n9pCye8sLsOl6D
+exXj/MkwwSd3J0Y58zd8ZwMrK9m/jyFrk9TlWokfIFL/eC8VFsu7qmSSRLIjMuxc
+YPPisgR5+WPcus7Jf8auqcYw8eW0GPc1ugJobwucs5e/TinksMfwQrzEydmOPoWI
+Pfur7MjPr5IQXROtQv+CihMigPIHvi73YzSe5zdPCw8JcuZ5vBi2pwquvzvGLtMM
+Btln/SwonyQMks5WV4dOk6NOB73mCMywCir4ybp9ElJMaUGEF9nLO+h8Fg==
+-----END CERTIFICATE-----
+subject=CN = Cross Root
+issuer=CN = Cross Root
+notBefore=Aug 30 18:33:26 2021 GMT
+notAfter=Aug 31 18:33:26 2121 GMT
+-----BEGIN CERTIFICATE-----
+MIIC+jCCAeKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApDcm9z
+cyBSb290MCAXDTIxMDgzMDE4MzMyNloYDzIxMjEwODMxMTgzMzI2WjAVMRMwEQYD
+VQQDDApDcm9zcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+kpH8JGF0yRS+CCAkUBV44unl/SNTSPexgbtmJPHo8HLTLbXCU5QS2KWERUJ2YLC8
+FRIQNuSipUjT8zz6xFYqU+S5eSeroVhARixxE4fEMeLCOdPAds1D/trZw2qWLZOT
+DUlXUGV1besCbrF2PL3efJxzy6OM6+tTE8K49y3dJVNfGB7cZxkjDGDz08XnBNJo
+2FNN/BC8WTHZU/lUgtCjgSXXY+uPpF0XYg7UBlVhOfDLV+f9fC4EmNyf4bzYZnFr
+mOtdaYF3JsAz60p9Xw3kahvO0LPCp4ktXbVhwwlVv+SmTkHi3CulU2hHZ8HT2EOw
+YiaePt8qSphK3U/U2AbPFwIDAQABo1MwUTAdBgNVHQ4EFgQUL16/ihJvr2w9I5k6
+3jjZ13SPW20wHwYDVR0jBBgwFoAUL16/ihJvr2w9I5k63jjZ13SPW20wDwYDVR0T
+AQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAUiqf8oQaPX3aW6I+dcRhsq5g
+bpYF0X5jePk6UqWu86YcmpoRtGLH7e5aHGJYqrVrkOoo0q4eTL3Pm1/sB3omPRMb
+ey/i7Z70wwd5yI8iz/WBmQDahYxq5wSDsUSdZDL0kSyoU2jCwXUPtuC6F1kMZBFI
+uUeaFcF8oKVGuOHvZgj/FMBpT7tyjdPpDG4uo6AT04AKGhf5xO5UY2N+uqmEsXHK
+HsKAEMrVhdeU5mbrfifvSkMYcYgJOX1KFP+t4U+ogqCHy1/Nfhq+WG1XN5GwhtuO
+ze25NqI6ZvA2og4AoeIzvJ/+Nfl5PNtClm0IjbGvR77oOBMs71lO4GjUYj9eiw==
+-----END CERTIFICATE-----
diff --git a/test/danetest.c b/test/danetest.c
new file mode 100644
index 000000000000..0ed460039d48
--- /dev/null
+++ b/test/danetest.c
@@ -0,0 +1,430 @@
+/*
+ * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <limits.h>
+#include <errno.h>
+
+#include <openssl/crypto.h>
+#include <openssl/evp.h>
+#include <openssl/x509.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+#include <openssl/conf.h>
+#ifndef OPENSSL_NO_ENGINE
+# include <openssl/engine.h>
+#endif
+#include "testutil.h"
+
+#include "internal/nelem.h"
+
+#define _UC(c) ((unsigned char)(c))
+
+static const char *basedomain;
+static const char *CAfile;
+static const char *tlsafile;
+
+/*
+ * Forward declaration, of function that uses internal interfaces, from headers
+ * included at the end of this module.
+ */
+static void store_ctx_dane_init(X509_STORE_CTX *, SSL *);
+
+static int saved_errno;
+
+static void save_errno(void)
+{
+ saved_errno = errno;
+}
+
+static int restore_errno(void)
+{
+ int ret = errno;
+ errno = saved_errno;
+ return ret;
+}
+
+static int verify_chain(SSL *ssl, STACK_OF(X509) *chain)
+{
+ X509_STORE_CTX *store_ctx = NULL;
+ SSL_CTX *ssl_ctx = NULL;
+ X509_STORE *store = NULL;
+ int ret = 0;
+ int store_ctx_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
+
+ if (!TEST_ptr(store_ctx = X509_STORE_CTX_new())
+ || !TEST_ptr(ssl_ctx = SSL_get_SSL_CTX(ssl))
+ || !TEST_ptr(store = SSL_CTX_get_cert_store(ssl_ctx))
+ || !TEST_true(X509_STORE_CTX_init(store_ctx, store, NULL, chain))
+ || !TEST_true(X509_STORE_CTX_set_ex_data(store_ctx, store_ctx_idx,
+ ssl)))
+ goto end;
+
+ X509_STORE_CTX_set_default(store_ctx, SSL_is_server(ssl)
+ ? "ssl_client" : "ssl_server");
+ X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(store_ctx),
+ SSL_get0_param(ssl));
+ store_ctx_dane_init(store_ctx, ssl);
+
+ if (SSL_get_verify_callback(ssl) != NULL)
+ X509_STORE_CTX_set_verify_cb(store_ctx, SSL_get_verify_callback(ssl));
+
+ /* Mask "internal failures" (-1) from our return value. */
+ if (!TEST_int_ge(ret = X509_STORE_CTX_verify(store_ctx), 0))
+ ret = 0;
+
+ SSL_set_verify_result(ssl, X509_STORE_CTX_get_error(store_ctx));
+
+end:
+ X509_STORE_CTX_free(store_ctx);
+ return ret;
+}
+
+static STACK_OF(X509) *load_chain(BIO *fp, int nelem)
+{
+ int count;
+ char *name = 0;
+ char *header = 0;
+ unsigned char *data = 0;
+ long len;
+ char *errtype = 0; /* if error: cert or pkey? */
+ STACK_OF(X509) *chain;
+ typedef X509 *(*d2i_X509_t)(X509 **, const unsigned char **, long);
+
+ if (!TEST_ptr(chain = sk_X509_new_null()))
+ goto err;
+
+ for (count = 0;
+ count < nelem && errtype == 0
+ && PEM_read_bio(fp, &name, &header, &data, &len) == 1;
+ ++count) {
+ if (strcmp(name, PEM_STRING_X509) == 0
+ || strcmp(name, PEM_STRING_X509_TRUSTED) == 0
+ || strcmp(name, PEM_STRING_X509_OLD) == 0) {
+ d2i_X509_t d = strcmp(name, PEM_STRING_X509_TRUSTED) != 0
+ ? d2i_X509_AUX : d2i_X509;
+ X509 *cert;
+ const unsigned char *p = data;
+
+ if (!TEST_ptr(cert = d(0, &p, len))
+ || !TEST_long_eq(p - data, len)) {
+ TEST_info("Certificate parsing error");
+ goto err;
+ }
+
+ if (!TEST_true(sk_X509_push(chain, cert)))
+ goto err;
+ } else {
+ TEST_info("Unknown chain file object %s", name);
+ goto err;
+ }
+
+ OPENSSL_free(name);
+ OPENSSL_free(header);
+ OPENSSL_free(data);
+ name = header = NULL;
+ data = NULL;
+ }
+
+ if (count == nelem) {
+ ERR_clear_error();
+ return chain;
+ }
+
+err:
+ OPENSSL_free(name);
+ OPENSSL_free(header);
+ OPENSSL_free(data);
+ sk_X509_pop_free(chain, X509_free);
+ return NULL;
+}
+
+static char *read_to_eol(BIO *f)
+{
+ static char buf[4096];
+ int n;
+
+ if (BIO_gets(f, buf, sizeof(buf)) <= 0)
+ return NULL;
+
+ n = strlen(buf);
+ if (buf[n - 1] != '\n') {
+ if (n + 1 == sizeof(buf))
+ TEST_error("input too long");
+ else
+ TEST_error("EOF before newline");
+ return NULL;
+ }
+
+ /* Trim trailing whitespace */
+ while (n > 0 && isspace(_UC(buf[n - 1])))
+ buf[--n] = '\0';
+
+ return buf;
+}
+
+/*
+ * Hex decoder that tolerates optional whitespace
+ */
+static ossl_ssize_t hexdecode(const char *in, void *result)
+{
+ unsigned char **out = (unsigned char **)result;
+ unsigned char *ret;
+ unsigned char *cp;
+ uint8_t byte;
+ int nibble = 0;
+
+ if (!TEST_ptr(ret = OPENSSL_malloc(strlen(in) / 2)))
+ return -1;
+ cp = ret;
+
+ for (byte = 0; *in; ++in) {
+ int x;
+
+ if (isspace(_UC(*in)))
+ continue;
+ x = OPENSSL_hexchar2int(*in);
+ if (x < 0) {
+ OPENSSL_free(ret);
+ return 0;
+ }
+ byte |= (char)x;
+ if ((nibble ^= 1) == 0) {
+ *cp++ = byte;
+ byte = 0;
+ } else {
+ byte <<= 4;
+ }
+ }
+ if (nibble != 0) {
+ OPENSSL_free(ret);
+ return 0;
+ }
+
+ return cp - (*out = ret);
+}
+
+static ossl_ssize_t checked_uint8(const char *in, void *out)
+{
+ uint8_t *result = (uint8_t *)out;
+ const char *cp = in;
+ char *endp;
+ long v;
+ int e;
+
+ save_errno();
+ v = strtol(cp, &endp, 10);
+ e = restore_errno();
+
+ if (((v == LONG_MIN || v == LONG_MAX) && e == ERANGE) ||
+ endp == cp || !isspace(_UC(*endp)) ||
+ v != (*(uint8_t *)result = (uint8_t) v)) {
+ return -1;
+ }
+ for (cp = endp; isspace(_UC(*cp)); ++cp)
+ continue;
+ return cp - in;
+}
+
+struct tlsa_field {
+ void *var;
+ const char *name;
+ ossl_ssize_t (*parser)(const char *, void *);
+};
+
+static int tlsa_import_rr(SSL *ssl, const char *rrdata)
+{
+ static uint8_t usage;
+ static uint8_t selector;
+ static uint8_t mtype;
+ static unsigned char *data = NULL;
+ static struct tlsa_field tlsa_fields[] = {
+ { &usage, "usage", checked_uint8 },
+ { &selector, "selector", checked_uint8 },
+ { &mtype, "mtype", checked_uint8 },
+ { &data, "data", hexdecode },
+ { NULL, }
+ };
+ int ret;
+ struct tlsa_field *f;
+ const char *cp = rrdata;
+ ossl_ssize_t len = 0;
+
+ for (f = tlsa_fields; f->var; ++f) {
+ if ((len = f->parser(cp += len, f->var)) <= 0) {
+ TEST_info("bad TLSA %s field in: %s", f->name, rrdata);
+ return 0;
+ }
+ }
+
+ ret = SSL_dane_tlsa_add(ssl, usage, selector, mtype, data, len);
+ OPENSSL_free(data);
+ if (ret == 0) {
+ TEST_info("unusable TLSA rrdata: %s", rrdata);
+ return 0;
+ }
+ if (ret < 0) {
+ TEST_info("error loading TLSA rrdata: %s", rrdata);
+ return 0;
+ }
+
+ return ret;
+}
+
+static int allws(const char *cp)
+{
+ while (*cp)
+ if (!isspace(_UC(*cp++)))
+ return 0;
+ return 1;
+}
+
+static int test_tlsafile(SSL_CTX *ctx, const char *base_name,
+ BIO *f, const char *path)
+{
+ char *line;
+ int testno = 0;
+ int ret = 1;
+ SSL *ssl;
+
+ while (ret > 0 && (line = read_to_eol(f)) != NULL) {
+ STACK_OF(X509) *chain;
+ int ntlsa;
+ int ncert;
+ int noncheck;
+ int want;
+ int want_depth;
+ int off;
+ int i;
+ int ok;
+ int err;
+ int mdpth;
+
+ if (*line == '\0' || *line == '#')
+ continue;
+
+ ++testno;
+ if (sscanf(line, "%d %d %d %d %d%n",
+ &ntlsa, &ncert, &noncheck, &want, &want_depth, &off) != 5
+ || !allws(line + off)) {
+ TEST_error("Malformed line for test %d", testno);
+ return 0;
+ }
+
+ if (!TEST_ptr(ssl = SSL_new(ctx)))
+ return 0;
+ SSL_set_connect_state(ssl);
+ if (SSL_dane_enable(ssl, base_name) <= 0) {
+ SSL_free(ssl);
+ return 0;
+ }
+ if (noncheck)
+ SSL_dane_set_flags(ssl, DANE_FLAG_NO_DANE_EE_NAMECHECKS);
+
+ for (i = 0; i < ntlsa; ++i) {
+ if ((line = read_to_eol(f)) == NULL || !tlsa_import_rr(ssl, line)) {
+ SSL_free(ssl);
+ return 0;
+ }
+ }
+
+ /* Don't report old news */
+ ERR_clear_error();
+ if (!TEST_ptr(chain = load_chain(f, ncert))) {
+ SSL_free(ssl);
+ return 0;
+ }
+
+ ok = verify_chain(ssl, chain);
+ sk_X509_pop_free(chain, X509_free);
+ err = SSL_get_verify_result(ssl);
+ /*
+ * Peek under the hood, normally TLSA match data is hidden when
+ * verification fails, we can obtain any suppressed data by setting the
+ * verification result to X509_V_OK before looking.
+ */
+ SSL_set_verify_result(ssl, X509_V_OK);
+ mdpth = SSL_get0_dane_authority(ssl, NULL, NULL);
+ /* Not needed any more, but lead by example and put the error back. */
+ SSL_set_verify_result(ssl, err);
+ SSL_free(ssl);
+
+ if (!TEST_int_eq(err, want)) {
+ if (want == X509_V_OK)
+ TEST_info("Verification failure in test %d: %d=%s",
+ testno, err, X509_verify_cert_error_string(err));
+ else
+ TEST_info("Unexpected error in test %d", testno);
+ ret = 0;
+ continue;
+ }
+ if (!TEST_false(want == 0 && ok == 0)) {
+ TEST_info("Verification failure in test %d: ok=0", testno);
+ ret = 0;
+ continue;
+ }
+ if (!TEST_int_eq(mdpth, want_depth)) {
+ TEST_info("In test test %d", testno);
+ ret = 0;
+ }
+ }
+ ERR_clear_error();
+
+ return ret;
+}
+
+static int run_tlsatest(void)
+{
+ SSL_CTX *ctx = NULL;
+ BIO *f = NULL;
+ int ret = 0;
+
+ if (!TEST_ptr(f = BIO_new_file(tlsafile, "r"))
+ || !TEST_ptr(ctx = SSL_CTX_new(TLS_client_method()))
+ || !TEST_int_gt(SSL_CTX_dane_enable(ctx), 0)
+ || !TEST_true(SSL_CTX_load_verify_file(ctx, CAfile))
+ || !TEST_int_gt(SSL_CTX_dane_mtype_set(ctx, EVP_sha512(), 2, 1), 0)
+ || !TEST_int_gt(SSL_CTX_dane_mtype_set(ctx, EVP_sha256(), 1, 2), 0)
+ || !TEST_int_gt(test_tlsafile(ctx, basedomain, f, tlsafile), 0))
+ goto end;
+ ret = 1;
+
+end:
+ BIO_free(f);
+ SSL_CTX_free(ctx);
+
+ return ret;
+}
+
+OPT_TEST_DECLARE_USAGE("basedomain CAfile tlsafile\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(basedomain = test_get_argument(0))
+ || !TEST_ptr(CAfile = test_get_argument(1))
+ || !TEST_ptr(tlsafile = test_get_argument(2)))
+ return 0;
+
+ ADD_TEST(run_tlsatest);
+ return 1;
+}
+
+#include "internal/dane.h"
+
+static void store_ctx_dane_init(X509_STORE_CTX *store_ctx, SSL *ssl)
+{
+ X509_STORE_CTX_set0_dane(store_ctx, SSL_get0_dane(ssl));
+}
diff --git a/test/danetest.in b/test/danetest.in
new file mode 100644
index 000000000000..e7aa8c6aba56
--- /dev/null
+++ b/test/danetest.in
@@ -0,0 +1,2007 @@
+# Copyright 2016-2016 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
+#
+# Blank and comment lines ignored.
+#
+# The first line in each block takes the form:
+#
+# <TLSA-count> <cert-count> <nonamechecks> <desired-verify-result> <desired-match-depth>
+#
+# It is followed by <TLSA-count> lines of the form:
+#
+# <usage> <selector> <mtype> <hex-data>
+#
+# and finally, by <cert-count> certificates.
+
+# Test chain matching TLSA records
+# --
+# subject= CN = example.com
+# 3 0 0 308201943082013BA003020102020102300A06082A8648CE3D04030230143112301006035504030C094973737565722043413020170D3135313231333233323335325A180F33303135303431353233323335325A30163114301206035504030C0B6578616D706C652E636F6D3059301306072A8648CE3D020106082A8648CE3D03010703420004664995F47BDE35E7B4DE48B258E9E8A07ADEBBDB863B3D06F481A1946C83DA9F56CFF4D9389B855D2F364B1585B0C734FCFA263026964FF5A4308B3FC879BDB8A37A3078301D0603551D0E041604145B20CA417D9088C7A4C017CB6C0C1C739BB07D8A301F0603551D230418301680147AB75A3CD295CA5DF7C5150916E18FF5CC376A1530090603551D130402300030130603551D25040C300A06082B0601050507030130160603551D11040F300D820B6578616D706C652E636F6D300A06082A8648CE3D0403020347003044021F21C9032A5C8A93872D3F4AEF321A9574DD956D43BD93C369944C72D6902858022100C8B3290D7AF37E571A84D704DBAD339D2987D41852DC5936F212947063911181
+# 3 0 1 BEDC04764CECAE80AEE454D332758F50847DCA424216466E4012E0DEAE1F2E5F
+# 3 0 2 F756CCD61F3CA50D017653911701CA0052AF0B29E273DD263DD23643D86D4369D03686BD1369EF54BB2DC2DAE3CE4F05AF39D54648F94D54AA86B259AEAD9923
+# 3 1 0 3059301306072A8648CE3D020106082A8648CE3D03010703420004664995F47BDE35E7B4DE48B258E9E8A07ADEBBDB863B3D06F481A1946C83DA9F56CFF4D9389B855D2F364B1585B0C734FCFA263026964FF5A4308B3FC879BDB8
+# 3 1 1 3111668338043DE264D0256A702248696C9484B6221A42740F920187B4C61838
+# 3 1 2 CB861AF6DDED185EE04472A9092052CCC735120C34785E72C996C94B122EBA6F329BE630B1B4C6E2756E7A75392C21E253C6AEACC31FD45FF4595DED375FAF62
+# --
+# subject= CN = Issuer CA
+# 2 0 0 308201683082010DA003020102020102300A06082A8648CE3D04030230123110300E06035504030C07526F6F742043413020170D3135313231333233323030395A180F33303135303431353233323030395A30143112301006035504030C094973737565722043413059301306072A8648CE3D020106082A8648CE3D030107034200047D4BAE18B49F5DC69D0A3C85C66A3E2119DE92CFAD081FAD55C12D510EC97B6C00E13695A8D9713548FE60DF15573390433E2A1BD92DB4B7AA016EC6185DC5AFA350304E301D0603551D0E041604147AB75A3CD295CA5DF7C5150916E18FF5CC376A15301F0603551D23041830168014E4BD405F052A820DDF9883F93D7D3F90AAEC723F300C0603551D13040530030101FF300A06082A8648CE3D0403020349003046022100831DCD882DA8785D50E41020898C0248879DDDF72D701D1DC1DE6BE08155B43E022100B84B2FB519C4CD3CBC791603D4488F7707597DB7980D9C173E7FDD0ECD7CA308
+# 2 0 1 0DAA76425A1FC398C55A643D5A2485AE4CC2B64B9515A75054722B2E83C31BBD
+# 2 0 2 6BC0C0F2500320A49392910965263A3EBDD594173D3E36CCE38A003D2EC3FAFBC315EDB776CD3139637DF494FB60359601542A4F821BF0542F926E6270C9762C
+# 2 1 0 3059301306072A8648CE3D020106082A8648CE3D030107034200047D4BAE18B49F5DC69D0A3C85C66A3E2119DE92CFAD081FAD55C12D510EC97B6C00E13695A8D9713548FE60DF15573390433E2A1BD92DB4B7AA016EC6185DC5AF
+# 2 1 1 65A457617072DA3E7F1152471EB3D406526530097D0A9AA34EB47C990A1FCDA3
+# 2 1 2 1F484106F765B6F1AC483CC509CDAD36486A83D1BA115F562516F407C1109303658408B455824DA0785A252B205DBEECB1AFB5DB869E8AAC242091B63F258F05
+# --
+# subject= CN = Root CA
+# 2 0 0 308201643082010BA003020102020101300A06082A8648CE3D04030230123110300E06035504030C07526F6F742043413020170D3135313231333233313330385A180F33303135303431353233313330385A30123110300E06035504030C07526F6F742043413059301306072A8648CE3D020106082A8648CE3D03010703420004D1DA578FD18FB86456B0D91B5656BDD68D4DDBD250E337571127C75E0560F41D0AF91BFAF8805F80C28C026A14D4FE8C30A9673B9EC0C05A84AA810D1341B76CA350304E301D0603551D0E04160414E4BD405F052A820DDF9883F93D7D3F90AAEC723F301F0603551D23041830168014E4BD405F052A820DDF9883F93D7D3F90AAEC723F300C0603551D13040530030101FF300A06082A8648CE3D040302034700304402206869E6AA9F9B4D4BF308091A5A7AB2C30E3619B0D75E528819468E4BB926F4C9022017F1B8458611966FBC109CAED3582966BF25FC0598EABA6C793C58DCC3537CC5
+# 2 0 1 FE7C8E01110627A782765E468D8CB4D2CC7907EAC4BA5974CD92B540ED2AAC3C
+# 2 0 2 361029F20A3B59DAFAAF05D41811EFC1A9439B972BC6B9D7F13BC5469570E49ACAE0CB0C877C75D58346590EA950AC7A39AED6E8AA8004EA7F5DE3AB9462047E
+# 2 1 0 3059301306072A8648CE3D020106082A8648CE3D03010703420004D1DA578FD18FB86456B0D91B5656BDD68D4DDBD250E337571127C75E0560F41D0AF91BFAF8805F80C28C026A14D4FE8C30A9673B9EC0C05A84AA810D1341B76C
+# 2 1 1 91D942E4A2D4226DDAF28CADAA7F13018E4ED0D9A43A529247E51C965188576C
+# 2 1 2 5F414D4D7BFDF22E39952D9F46C51370FDD050F10C55B4CDB42E40FA98611FDE23EEE9B23315EE1ECDB198C7419E9A2D6742860E4806AF45164507799C3B452E
+
+# Renumber:
+# << 'EOF' perl -pe 'BEGIN {$t = 0; $/="\n\n"} if (s/\A\s*# \d+\s*?\n//sm) {printf "# %d\n", ++$t}'
+
+## -- Anonymous and "never valid" leaf certificate DANE-EE(3) tests
+
+# 1
+1 1 1 0 0
+3 0 0 3081ec308193a003020102020101300a06082a8648ce3d0403023000301e170d3135313231343030313033345a170d3135313231333030313033345a30003059301306072a8648ce3d020106082a8648ce3d03010703420004c5a4ffa008eebc0369b974799f9479cb47360544fafc02c4204fb3df31e88a1a4f18c85831e93f985c5b231094541b4316b5cb1c9c0c950886fe1143f39f6109300a06082a8648ce3d040302034800304502206ae7b7a870df21081e9a9896020aaf8560984875c812b36d671631abc879f872022100b0889ad2b3814ee64bddd5a7f6a98dea43cb435049469cb50a4404cbdeee1fd6
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+# 2
+1 1 1 0 0
+3 1 0 3059301306072a8648ce3d020106082a8648ce3d03010703420004c5a4ffa008eebc0369b974799f9479cb47360544fafc02c4204fb3df31e88a1a4f18c85831e93f985c5b231094541b4316b5cb1c9c0c950886fe1143f39f6109
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+# 3
+1 1 1 0 0
+3 0 1 588FD5F414E3327EAFE3169DC040AE161247D1296BF38304AB9CF464850A1365
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+# 4
+1 1 1 0 0
+3 1 1 05C66146D7909EAE2379825F6D0F5284146B79598DA12E403DC29C33147CF33E
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+# 5
+1 1 1 0 0
+3 0 2 42BEE929852C8063A0D619B53D0DD35703BBAD2FC25F2055F737C7A14DDFEA544491F8C00F50FA083BD0AD1B5C98529994FF811BBA5E5170CC6EE9F3ED5563E1
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+# 6
+1 1 1 0 0
+3 1 2 D91A3E5DC34879CD77AD1E989F56FA78FACADF05EF8D445EDF5652BD58EE392C87C02F84C0119D62309041F2D5128A73399DF25D1F47BCD497357EAF1A1009A3
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+# 7
+1 1 1 65 -1
+3 0 1 588FD5F414E3327EAFE3169DC040AE161247D1296BF38304AB9CF464850A1366
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+# 8
+1 1 1 65 -1
+3 1 1 05C66146D7909EAE2379825F6D0F5284146B79598DA12E403DC29C33147CF33F
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+# 9
+1 1 1 65 -1
+3 0 2 42BEE929852C8063A0D619B53D0DD35703BBAD2FC25F2055F737C7A14DDFEA544491F8C00F50FA083BD0AD1B5C98529994FF811BBA5E5170CC6EE9F3ED5563E2
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+# 10
+1 1 1 65 -1
+3 1 2 D91A3E5DC34879CD77AD1E989F56FA78FACADF05EF8D445EDF5652BD58EE392C87C02F84C0119D62309041F2D5128A73399DF25D1F47BCD497357EAF1A1009A4
+subject=
+issuer=
+notBefore=Dec 14 00:10:34 2015 GMT
+notAfter=Dec 13 00:10:34 2015 GMT
+-----BEGIN CERTIFICATE-----
+MIHsMIGToAMCAQICAQEwCgYIKoZIzj0EAwIwADAeFw0xNTEyMTQwMDEwMzRaFw0x
+NTEyMTMwMDEwMzRaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFpP+gCO68
+A2m5dHmflHnLRzYFRPr8AsQgT7PfMeiKGk8YyFgx6T+YXFsjEJRUG0MWtcscnAyV
+CIb+EUPzn2EJMAoGCCqGSM49BAMCA0gAMEUCIGrnt6hw3yEIHpqYlgIKr4VgmEh1
+yBKzbWcWMavIefhyAiEAsIia0rOBTuZL3dWn9qmN6kPLQ1BJRpy1CkQEy97uH9Y=
+-----END CERTIFICATE-----
+
+## -- DANE-?? chain tests --
+
+# 11
+1 3 0 0 0
+3 0 1 BEDC04764CECAE80AEE454D332758F50847DCA424216466E4012E0DEAE1F2E5F
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 12
+1 3 0 0 0
+3 1 1 3111668338043DE264D0256A702248696C9484B6221A42740F920187B4C61838
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 13
+1 3 0 0 0
+3 0 2 F756CCD61F3CA50D017653911701CA0052AF0B29E273DD263DD23643D86D4369D03686BD1369EF54BB2DC2DAE3CE4F05AF39D54648F94D54AA86B259AEAD9923
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 14
+1 3 0 0 0
+3 1 2 CB861AF6DDED185EE04472A9092052CCC735120C34785E72C996C94B122EBA6F329BE630B1B4C6E2756E7A75392C21E253C6AEACC31FD45FF4595DED375FAF62
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 15
+1 3 0 0 1
+2 0 1 0DAA76425A1FC398C55A643D5A2485AE4CC2B64B9515A75054722B2E83C31BBD
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 16
+1 3 0 0 1
+2 1 1 65A457617072DA3E7F1152471EB3D406526530097D0A9AA34EB47C990A1FCDA3
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 17
+1 3 0 0 1
+2 0 2 6BC0C0F2500320A49392910965263A3EBDD594173D3E36CCE38A003D2EC3FAFBC315EDB776CD3139637DF494FB60359601542A4F821BF0542F926E6270C9762C
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 18
+1 3 0 0 1
+2 1 2 1F484106F765B6F1AC483CC509CDAD36486A83D1BA115F562516F407C1109303658408B455824DA0785A252B205DBEECB1AFB5DB869E8AAC242091B63F258F05
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 19
+1 3 0 0 2
+2 0 1 FE7C8E01110627A782765E468D8CB4D2CC7907EAC4BA5974CD92B540ED2AAC3C
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 20
+1 3 0 0 2
+2 1 1 91D942E4A2D4226DDAF28CADAA7F13018E4ED0D9A43A529247E51C965188576C
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 21
+1 3 0 0 2
+2 0 2 361029F20A3B59DAFAAF05D41811EFC1A9439B972BC6B9D7F13BC5469570E49ACAE0CB0C877C75D58346590EA950AC7A39AED6E8AA8004EA7F5DE3AB9462047E
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 22
+1 3 0 0 2
+2 1 2 5F414D4D7BFDF22E39952D9F46C51370FDD050F10C55B4CDB42E40FA98611FDE23EEE9B23315EE1ECDB198C7419E9A2D6742860E4806AF45164507799C3B452E
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+## -- PKIX-?? chain tests --
+
+# 23
+1 2 0 0 0
+1 0 0 308201943082013ba003020102020102300a06082a8648ce3d04030230143112301006035504030c094973737565722043413020170d3135313231333233323335325a180f33303135303431353233323335325a30163114301206035504030c0b6578616d706c652e636f6d3059301306072a8648ce3d020106082a8648ce3d03010703420004664995f47bde35e7b4de48b258e9e8a07adebbdb863b3d06f481a1946c83da9f56cff4d9389b855d2f364b1585b0c734fcfa263026964ff5a4308b3fc879bdb8a37a3078301d0603551d0e041604145b20ca417d9088c7a4c017cb6c0c1c739bb07d8a301f0603551d230418301680147ab75a3cd295ca5df7c5150916e18ff5cc376a1530090603551d130402300030130603551d25040c300a06082b0601050507030130160603551d11040f300d820b6578616d706c652e636f6d300a06082a8648ce3d0403020347003044021f21c9032a5c8a93872d3f4aef321a9574dd956d43bd93c369944c72d6902858022100c8b3290d7af37e571a84d704dbad339d2987d41852dc5936f212947063911181
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 24
+1 2 0 0 0
+1 1 0 3059301306072a8648ce3d020106082a8648ce3d03010703420004664995f47bde35e7b4de48b258e9e8a07adebbdb863b3d06f481a1946c83da9f56cff4d9389b855d2f364b1585b0c734fcfa263026964ff5a4308b3fc879bdb8
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 25
+1 2 0 0 0
+1 0 1 BEDC04764CECAE80AEE454D332758F50847DCA424216466E4012E0DEAE1F2E5F
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 26
+1 2 0 0 0
+1 1 1 3111668338043DE264D0256A702248696C9484B6221A42740F920187B4C61838
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 27
+1 3 0 0 0
+1 0 2 F756CCD61F3CA50D017653911701CA0052AF0B29E273DD263DD23643D86D4369D03686BD1369EF54BB2DC2DAE3CE4F05AF39D54648F94D54AA86B259AEAD9923
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 28
+1 3 0 0 0
+1 1 2 CB861AF6DDED185EE04472A9092052CCC735120C34785E72C996C94B122EBA6F329BE630B1B4C6E2756E7A75392C21E253C6AEACC31FD45FF4595DED375FAF62
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 29
+1 2 0 0 1
+0 0 1 0DAA76425A1FC398C55A643D5A2485AE4CC2B64B9515A75054722B2E83C31BBD
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 30
+1 2 0 0 1
+0 1 0 3059301306072a8648ce3d020106082a8648ce3d030107034200047d4bae18b49f5dc69d0a3c85c66a3e2119de92cfad081fad55c12d510ec97b6c00e13695a8d9713548fe60df15573390433e2a1bd92db4b7aa016ec6185dc5af
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 31
+1 2 0 0 1
+0 1 1 65A457617072DA3E7F1152471EB3D406526530097D0A9AA34EB47C990A1FCDA3
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 32
+1 3 0 0 1
+0 0 2 6BC0C0F2500320A49392910965263A3EBDD594173D3E36CCE38A003D2EC3FAFBC315EDB776CD3139637DF494FB60359601542A4F821BF0542F926E6270C9762C
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 33
+1 3 0 0 1
+0 1 2 1F484106F765B6F1AC483CC509CDAD36486A83D1BA115F562516F407C1109303658408B455824DA0785A252B205DBEECB1AFB5DB869E8AAC242091B63F258F05
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 34
+1 2 0 0 2
+0 0 1 FE7C8E01110627A782765E468D8CB4D2CC7907EAC4BA5974CD92B540ED2AAC3C
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 35
+1 2 0 0 2
+0 1 1 91D942E4A2D4226DDAF28CADAA7F13018E4ED0D9A43A529247E51C965188576C
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 36
+1 3 0 0 2
+0 0 2 361029F20A3B59DAFAAF05D41811EFC1A9439B972BC6B9D7F13BC5469570E49ACAE0CB0C877C75D58346590EA950AC7A39AED6E8AA8004EA7F5DE3AB9462047E
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 37
+1 3 0 0 2
+0 1 2 5F414D4D7BFDF22E39952D9F46C51370FDD050F10C55B4CDB42E40FA98611FDE23EEE9B23315EE1ECDB198C7419E9A2D6742860E4806AF45164507799C3B452E
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+## -- PKIX-?? chain failures --
+
+# 38
+# Missing intermediate CA
+1 1 0 20 0
+1 0 1 BEDC04764CECAE80AEE454D332758F50847DCA424216466E4012E0DEAE1F2E5F
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+
+# 39
+# Missing PKIX intermediate, provided via DNS
+2 1 0 0 0
+1 1 1 3111668338043DE264D0256A702248696C9484B6221A42740F920187B4C61838
+0 0 0 308201683082010DA003020102020102300A06082A8648CE3D04030230123110300E06035504030C07526F6F742043413020170D3135313231333233323030395A180F33303135303431353233323030395A30143112301006035504030C094973737565722043413059301306072A8648CE3D020106082A8648CE3D030107034200047D4BAE18B49F5DC69D0A3C85C66A3E2119DE92CFAD081FAD55C12D510EC97B6C00E13695A8D9713548FE60DF15573390433E2A1BD92DB4B7AA016EC6185DC5AFA350304E301D0603551D0E041604147AB75A3CD295CA5DF7C5150916E18FF5CC376A15301F0603551D23041830168014E4BD405F052A820DDF9883F93D7D3F90AAEC723F300C0603551D13040530030101FF300A06082A8648CE3D0403020349003046022100831DCD882DA8785D50E41020898C0248879DDDF72D701D1DC1DE6BE08155B43E022100B84B2FB519C4CD3CBC791603D4488F7707597DB7980D9C173E7FDD0ECD7CA308
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+
+# 40
+# Wrong leaf digest
+1 3 0 65 -1
+1 0 2 F756CCD61F3CA50D017653911701CA0052AF0B29E273DD263DD23643D86D4369D03686BD1369EF54BB2DC2DAE3CE4F05AF39D54648F94D54AA86B259AEAD9924
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 41
+# Wrong intermediate digest
+1 2 0 65 -1
+0 0 1 0DAA76425A1FC398C55A643D5A2485AE4CC2B64B9515A75054722B2E83C31BBE
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 42
+# Wrong root digest
+1 2 0 65 -1
+0 0 1 FE7C8E01110627A782765E468D8CB4D2CC7907EAC4BA5974CD92B540ED2AAC3D
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+## -- Mixed usage cases
+
+# 43
+# DANE-EE(3) beats DANE-TA(2)
+1 3 0 0 0
+3 1 2 CB861AF6DDED185EE04472A9092052CCC735120C34785E72C996C94B122EBA6F329BE630B1B4C6E2756E7A75392C21E253C6AEACC31FD45FF4595DED375FAF62
+2 1 2 5F414D4D7BFDF22E39952D9F46C51370FDD050F10C55B4CDB42E40FA98611FDE23EEE9B23315EE1ECDB198C7419E9A2D6742860E4806AF45164507799C3B452E
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 44
+# DANE-TA(2) depth 1 beats DANE-TA(2) depth 2
+1 3 0 0 1
+2 1 2 1F484106F765B6F1AC483CC509CDAD36486A83D1BA115F562516F407C1109303658408B455824DA0785A252B205DBEECB1AFB5DB869E8AAC242091B63F258F05
+2 1 2 5F414D4D7BFDF22E39952D9F46C51370FDD050F10C55B4CDB42E40FA98611FDE23EEE9B23315EE1ECDB198C7419E9A2D6742860E4806AF45164507799C3B452E
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 45
+# DANE-TA(2) depth 2 beats PKIX-TA(0) depth 1
+1 3 0 0 2
+2 0 1 FE7C8E01110627A782765E468D8CB4D2CC7907EAC4BA5974CD92B540ED2AAC3C
+0 0 1 0DAA76425A1FC398C55A643D5A2485AE4CC2B64B9515A75054722B2E83C31BBD
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 46
+# DANE-TA(2) depth 2 beats PKIX-EE depth 0
+1 3 0 0 2
+2 0 1 FE7C8E01110627A782765E468D8CB4D2CC7907EAC4BA5974CD92B540ED2AAC3C
+0 0 1 0DAA76425A1FC398C55A643D5A2485AE4CC2B64B9515A75054722B2E83C31BBD
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
+
+# 47
+# DANE-TA(2) Full(0) root "from DNS":
+1 2 0 0 2
+2 0 0 308201643082010BA003020102020101300A06082A8648CE3D04030230123110300E06035504030C07526F6F742043413020170D3135313231333233313330385A180F33303135303431353233313330385A30123110300E06035504030C07526F6F742043413059301306072A8648CE3D020106082A8648CE3D03010703420004D1DA578FD18FB86456B0D91B5656BDD68D4DDBD250E337571127C75E0560F41D0AF91BFAF8805F80C28C026A14D4FE8C30A9673B9EC0C05A84AA810D1341B76CA350304E301D0603551D0E04160414E4BD405F052A820DDF9883F93D7D3F90AAEC723F301F0603551D23041830168014E4BD405F052A820DDF9883F93D7D3F90AAEC723F300C0603551D13040530030101FF300A06082A8648CE3D040302034700304402206869E6AA9F9B4D4BF308091A5A7AB2C30E3619B0D75E528819468E4BB926F4C9022017F1B8458611966FBC109CAED3582966BF25FC0598EABA6C793C58DCC3537CC5
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 48
+# DANE-TA(2) Full(0) intermediate "from DNS":
+1 1 0 0 1
+2 0 0 308201683082010DA003020102020102300A06082A8648CE3D04030230123110300E06035504030C07526F6F742043413020170D3135313231333233323030395A180F33303135303431353233323030395A30143112301006035504030C094973737565722043413059301306072A8648CE3D020106082A8648CE3D030107034200047D4BAE18B49F5DC69D0A3C85C66A3E2119DE92CFAD081FAD55C12D510EC97B6C00E13695A8D9713548FE60DF15573390433E2A1BD92DB4B7AA016EC6185DC5AFA350304E301D0603551D0E041604147AB75A3CD295CA5DF7C5150916E18FF5CC376A15301F0603551D23041830168014E4BD405F052A820DDF9883F93D7D3F90AAEC723F300C0603551D13040530030101FF300A06082A8648CE3D0403020349003046022100831DCD882DA8785D50E41020898C0248879DDDF72D701D1DC1DE6BE08155B43E022100B84B2FB519C4CD3CBC791603D4488F7707597DB7980D9C173E7FDD0ECD7CA308
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+
+# 49
+# DANE-TA(2) SPKI(1) Full(0) intermediate "from DNS":
+1 1 0 0 0
+2 1 0 3059301306072A8648CE3D020106082A8648CE3D030107034200047D4BAE18B49F5DC69D0A3C85C66A3E2119DE92CFAD081FAD55C12D510EC97B6C00E13695A8D9713548FE60DF15573390433E2A1BD92DB4B7AA016EC6185DC5AF
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+
+# 50
+# DANE-TA(2) SPKI(1) Full(0) root "from DNS":
+1 2 0 0 1
+2 1 0 3059301306072A8648CE3D020106082A8648CE3D03010703420004D1DA578FD18FB86456B0D91B5656BDD68D4DDBD250E337571127C75E0560F41D0AF91BFAF8805F80C28C026A14D4FE8C30A9673B9EC0C05A84AA810D1341B76C
+subject= /CN=example.com
+issuer= /CN=Issuer CA
+notBefore=Dec 13 23:23:52 2015 GMT
+notAfter=Apr 15 23:23:52 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBlDCCATugAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDDAlJc3N1ZXIg
+Q0EwIBcNMTUxMjEzMjMyMzUyWhgPMzAxNTA0MTUyMzIzNTJaMBYxFDASBgNVBAMM
+C2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZkmV9HveNee0
+3kiyWOnooHreu9uGOz0G9IGhlGyD2p9Wz/TZOJuFXS82SxWFsMc0/PomMCaWT/Wk
+MIs/yHm9uKN6MHgwHQYDVR0OBBYEFFsgykF9kIjHpMAXy2wMHHObsH2KMB8GA1Ud
+IwQYMBaAFHq3WjzSlcpd98UVCRbhj/XMN2oVMAkGA1UdEwQCMAAwEwYDVR0lBAww
+CgYIKwYBBQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwID
+RwAwRAIfIckDKlyKk4ctP0rvMhqVdN2VbUO9k8NplExy1pAoWAIhAMizKQ16835X
+GoTXBNutM50ph9QYUtxZNvISlHBjkRGB
+-----END CERTIFICATE-----
+subject= /CN=Issuer CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:20:09 2015 GMT
+notAfter=Apr 15 23:20:09 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBAjAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMjAwOVoYDzMwMTUwNDE1MjMyMDA5WjAUMRIwEAYDVQQDDAlJ
+c3N1ZXIgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR9S64YtJ9dxp0KPIXG
+aj4hGd6Sz60IH61VwS1RDsl7bADhNpWo2XE1SP5g3xVXM5BDPiob2S20t6oBbsYY
+XcWvo1AwTjAdBgNVHQ4EFgQUerdaPNKVyl33xRUJFuGP9cw3ahUwHwYDVR0jBBgw
+FoAU5L1AXwUqgg3fmIP5PX0/kKrscj8wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAgx3NiC2oeF1Q5BAgiYwCSIed3fctcB0dwd5r4IFVtD4CIQC4Sy+1
+GcTNPLx5FgPUSI93B1l9t5gNnBc+f90OzXyjCA==
+-----END CERTIFICATE-----
+
+# 51
+# Mismatched name "example.org", should still succeed given a
+# DANE-EE(3) match.
+1 3 1 0 0
+3 1 1 ee1477190203f5d8b4767f4451b89e7367cdec7f6965a4988227983562ac8270
+subject= CN = example.org
+issuer= CN = CA2
+notBefore=Feb 6 22:39:47 2016 GMT
+notAfter=Feb 7 22:39:47 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBkDCCATWgAwIBAgIBAjAKBggqhkjOPQQDAjAOMQwwCgYDVQQDDANDQTIwIBcN
+MTYwMjA2MjIzOTQ3WhgPMjExNjAyMDcyMjM5NDdaMBYxFDASBgNVBAMMC2V4YW1w
+bGUub3JnMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/YCEn0pxClPTvpjioxU4
+ajopRa4j/6XTqxy9zqn1AcMCiVWp6j22B6RpLmKEHoRHQxFzebd2juTXIDq81CID
+z6N6MHgwHQYDVR0OBBYEFOrSA+2YKXa5KR6k0687CZuhai5OMB8GA1UdIwQYMBaA
+FLTY4vqgjcQ01aCcB8AYVbUhEU7VMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYB
+BQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5vcmcwCgYIKoZIzj0EAwIDSQAwRgIh
+AKSsLwlidPiSrgda6XWihov4D4KHu6ZX3ZAAZ2uiBAefAiEArCq5WiO3Zeunl0Ct
+PyDiaL1QKbJ7lnqPQCS1o8xn+RI=
+-----END CERTIFICATE-----
+subject= CN = CA2
+issuer= CN = Root CA2
+notBefore=Feb 6 22:39:13 2016 GMT
+notAfter=Feb 7 22:39:13 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBYjCCAQigAwIBAgIBAjAKBggqhkjOPQQDAjATMREwDwYDVQQDDAhSb290IENB
+MjAgFw0xNjAyMDYyMjM5MTNaGA8yMTE2MDIwNzIyMzkxM1owDjEMMAoGA1UEAwwD
+Q0EyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYr6zgBxpsxA31IFiGyb6uaGC
+CQdNMyJfDgqCihsU1eOEuauzXO7tydCbjfRmhqQK1EGd254IjcGY+37tZEbvPKNQ
+ME4wHQYDVR0OBBYEFLTY4vqgjcQ01aCcB8AYVbUhEU7VMB8GA1UdIwQYMBaAFBRb
++/qrntsksembakoZTwTZk8AXMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAw
+RQIgX2fmMykyiuryf1AeKyc1j8HgmM8u/nyQfJnTCwvYUcECIQC6JHd3ybV9eJQo
+7sfr/jV+rRlZY2iaRv160BWYd82L7g==
+-----END CERTIFICATE-----
+subject= CN = Root CA2
+issuer= CN = Root CA2
+notBefore=Feb 6 22:38:48 2016 GMT
+notAfter=Feb 7 22:38:48 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBATAKBggqhkjOPQQDAjATMREwDwYDVQQDDAhSb290IENB
+MjAgFw0xNjAyMDYyMjM4NDhaGA8yMTE2MDIwNzIyMzg0OFowEzERMA8GA1UEAwwI
+Um9vdCBDQTIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATlTxAPKteg+L1LmxMl
+sbAFMxj6/322nR5RRGeF07KZRBFPaFZLgwZ1DuNrwM3wxxNdUyoZ6iAyDmwNf3K1
+42/Uo1AwTjAdBgNVHQ4EFgQUFFv7+que2ySx6ZtqShlPBNmTwBcwHwYDVR0jBBgw
+FoAUFFv7+que2ySx6ZtqShlPBNmTwBcwDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAumhPWZ37swl10awM/amX+jv0UlUyJBf8RGA6QMG5bwICIQDbinER
+fEevg+GOsr1P6nNMCAsQd9NwsvTQ+jm+TBArWQ==
+-----END CERTIFICATE-----
+
+# 52
+# Mismatched name "example.org", should fail despite a DANE-TA(2)
+# match for the intermediate CA.
+1 3 0 62 1
+2 1 1 946af0956378efaba7ee1bbedc17af110ea8de19c079a98e77398724a3708a1f
+subject= CN = example.org
+issuer= CN = CA2
+notBefore=Feb 6 22:39:47 2016 GMT
+notAfter=Feb 7 22:39:47 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBkDCCATWgAwIBAgIBAjAKBggqhkjOPQQDAjAOMQwwCgYDVQQDDANDQTIwIBcN
+MTYwMjA2MjIzOTQ3WhgPMjExNjAyMDcyMjM5NDdaMBYxFDASBgNVBAMMC2V4YW1w
+bGUub3JnMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/YCEn0pxClPTvpjioxU4
+ajopRa4j/6XTqxy9zqn1AcMCiVWp6j22B6RpLmKEHoRHQxFzebd2juTXIDq81CID
+z6N6MHgwHQYDVR0OBBYEFOrSA+2YKXa5KR6k0687CZuhai5OMB8GA1UdIwQYMBaA
+FLTY4vqgjcQ01aCcB8AYVbUhEU7VMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYB
+BQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5vcmcwCgYIKoZIzj0EAwIDSQAwRgIh
+AKSsLwlidPiSrgda6XWihov4D4KHu6ZX3ZAAZ2uiBAefAiEArCq5WiO3Zeunl0Ct
+PyDiaL1QKbJ7lnqPQCS1o8xn+RI=
+-----END CERTIFICATE-----
+subject= CN = CA2
+issuer= CN = Root CA2
+notBefore=Feb 6 22:39:13 2016 GMT
+notAfter=Feb 7 22:39:13 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBYjCCAQigAwIBAgIBAjAKBggqhkjOPQQDAjATMREwDwYDVQQDDAhSb290IENB
+MjAgFw0xNjAyMDYyMjM5MTNaGA8yMTE2MDIwNzIyMzkxM1owDjEMMAoGA1UEAwwD
+Q0EyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYr6zgBxpsxA31IFiGyb6uaGC
+CQdNMyJfDgqCihsU1eOEuauzXO7tydCbjfRmhqQK1EGd254IjcGY+37tZEbvPKNQ
+ME4wHQYDVR0OBBYEFLTY4vqgjcQ01aCcB8AYVbUhEU7VMB8GA1UdIwQYMBaAFBRb
++/qrntsksembakoZTwTZk8AXMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAw
+RQIgX2fmMykyiuryf1AeKyc1j8HgmM8u/nyQfJnTCwvYUcECIQC6JHd3ybV9eJQo
+7sfr/jV+rRlZY2iaRv160BWYd82L7g==
+-----END CERTIFICATE-----
+subject= CN = Root CA2
+issuer= CN = Root CA2
+notBefore=Feb 6 22:38:48 2016 GMT
+notAfter=Feb 7 22:38:48 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBATAKBggqhkjOPQQDAjATMREwDwYDVQQDDAhSb290IENB
+MjAgFw0xNjAyMDYyMjM4NDhaGA8yMTE2MDIwNzIyMzg0OFowEzERMA8GA1UEAwwI
+Um9vdCBDQTIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATlTxAPKteg+L1LmxMl
+sbAFMxj6/322nR5RRGeF07KZRBFPaFZLgwZ1DuNrwM3wxxNdUyoZ6iAyDmwNf3K1
+42/Uo1AwTjAdBgNVHQ4EFgQUFFv7+que2ySx6ZtqShlPBNmTwBcwHwYDVR0jBBgw
+FoAUFFv7+que2ySx6ZtqShlPBNmTwBcwDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAumhPWZ37swl10awM/amX+jv0UlUyJBf8RGA6QMG5bwICIQDbinER
+fEevg+GOsr1P6nNMCAsQd9NwsvTQ+jm+TBArWQ==
+-----END CERTIFICATE-----
+
+# 53
+# Mismatched name "example.org", should fail despite a DANE-TA(2)
+# match for the root CA.
+1 3 0 62 2
+2 1 1 34474f2fbc39da44dfbd11215bdafadf9507406c04de1f65dbd2a1bc4f2165cc
+subject= CN = example.org
+issuer= CN = CA2
+notBefore=Feb 6 22:39:47 2016 GMT
+notAfter=Feb 7 22:39:47 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBkDCCATWgAwIBAgIBAjAKBggqhkjOPQQDAjAOMQwwCgYDVQQDDANDQTIwIBcN
+MTYwMjA2MjIzOTQ3WhgPMjExNjAyMDcyMjM5NDdaMBYxFDASBgNVBAMMC2V4YW1w
+bGUub3JnMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/YCEn0pxClPTvpjioxU4
+ajopRa4j/6XTqxy9zqn1AcMCiVWp6j22B6RpLmKEHoRHQxFzebd2juTXIDq81CID
+z6N6MHgwHQYDVR0OBBYEFOrSA+2YKXa5KR6k0687CZuhai5OMB8GA1UdIwQYMBaA
+FLTY4vqgjcQ01aCcB8AYVbUhEU7VMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYB
+BQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5vcmcwCgYIKoZIzj0EAwIDSQAwRgIh
+AKSsLwlidPiSrgda6XWihov4D4KHu6ZX3ZAAZ2uiBAefAiEArCq5WiO3Zeunl0Ct
+PyDiaL1QKbJ7lnqPQCS1o8xn+RI=
+-----END CERTIFICATE-----
+subject= CN = CA2
+issuer= CN = Root CA2
+notBefore=Feb 6 22:39:13 2016 GMT
+notAfter=Feb 7 22:39:13 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBYjCCAQigAwIBAgIBAjAKBggqhkjOPQQDAjATMREwDwYDVQQDDAhSb290IENB
+MjAgFw0xNjAyMDYyMjM5MTNaGA8yMTE2MDIwNzIyMzkxM1owDjEMMAoGA1UEAwwD
+Q0EyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYr6zgBxpsxA31IFiGyb6uaGC
+CQdNMyJfDgqCihsU1eOEuauzXO7tydCbjfRmhqQK1EGd254IjcGY+37tZEbvPKNQ
+ME4wHQYDVR0OBBYEFLTY4vqgjcQ01aCcB8AYVbUhEU7VMB8GA1UdIwQYMBaAFBRb
++/qrntsksembakoZTwTZk8AXMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAw
+RQIgX2fmMykyiuryf1AeKyc1j8HgmM8u/nyQfJnTCwvYUcECIQC6JHd3ybV9eJQo
+7sfr/jV+rRlZY2iaRv160BWYd82L7g==
+-----END CERTIFICATE-----
+subject= CN = Root CA2
+issuer= CN = Root CA2
+notBefore=Feb 6 22:38:48 2016 GMT
+notAfter=Feb 7 22:38:48 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBATAKBggqhkjOPQQDAjATMREwDwYDVQQDDAhSb290IENB
+MjAgFw0xNjAyMDYyMjM4NDhaGA8yMTE2MDIwNzIyMzg0OFowEzERMA8GA1UEAwwI
+Um9vdCBDQTIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATlTxAPKteg+L1LmxMl
+sbAFMxj6/322nR5RRGeF07KZRBFPaFZLgwZ1DuNrwM3wxxNdUyoZ6iAyDmwNf3K1
+42/Uo1AwTjAdBgNVHQ4EFgQUFFv7+que2ySx6ZtqShlPBNmTwBcwHwYDVR0jBBgw
+FoAUFFv7+que2ySx6ZtqShlPBNmTwBcwDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAumhPWZ37swl10awM/amX+jv0UlUyJBf8RGA6QMG5bwICIQDbinER
+fEevg+GOsr1P6nNMCAsQd9NwsvTQ+jm+TBArWQ==
+-----END CERTIFICATE-----
+
+# 54
+# Mismatched name "example.org", should fail when name checks
+# are not disabled for DANE-EE(3).
+1 3 0 62 0
+3 1 1 ee1477190203f5d8b4767f4451b89e7367cdec7f6965a4988227983562ac8270
+subject= CN = example.org
+issuer= CN = CA2
+notBefore=Feb 6 22:39:47 2016 GMT
+notAfter=Feb 7 22:39:47 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBkDCCATWgAwIBAgIBAjAKBggqhkjOPQQDAjAOMQwwCgYDVQQDDANDQTIwIBcN
+MTYwMjA2MjIzOTQ3WhgPMjExNjAyMDcyMjM5NDdaMBYxFDASBgNVBAMMC2V4YW1w
+bGUub3JnMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/YCEn0pxClPTvpjioxU4
+ajopRa4j/6XTqxy9zqn1AcMCiVWp6j22B6RpLmKEHoRHQxFzebd2juTXIDq81CID
+z6N6MHgwHQYDVR0OBBYEFOrSA+2YKXa5KR6k0687CZuhai5OMB8GA1UdIwQYMBaA
+FLTY4vqgjcQ01aCcB8AYVbUhEU7VMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYB
+BQUHAwEwFgYDVR0RBA8wDYILZXhhbXBsZS5vcmcwCgYIKoZIzj0EAwIDSQAwRgIh
+AKSsLwlidPiSrgda6XWihov4D4KHu6ZX3ZAAZ2uiBAefAiEArCq5WiO3Zeunl0Ct
+PyDiaL1QKbJ7lnqPQCS1o8xn+RI=
+-----END CERTIFICATE-----
+subject= CN = CA2
+issuer= CN = Root CA2
+notBefore=Feb 6 22:39:13 2016 GMT
+notAfter=Feb 7 22:39:13 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBYjCCAQigAwIBAgIBAjAKBggqhkjOPQQDAjATMREwDwYDVQQDDAhSb290IENB
+MjAgFw0xNjAyMDYyMjM5MTNaGA8yMTE2MDIwNzIyMzkxM1owDjEMMAoGA1UEAwwD
+Q0EyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYr6zgBxpsxA31IFiGyb6uaGC
+CQdNMyJfDgqCihsU1eOEuauzXO7tydCbjfRmhqQK1EGd254IjcGY+37tZEbvPKNQ
+ME4wHQYDVR0OBBYEFLTY4vqgjcQ01aCcB8AYVbUhEU7VMB8GA1UdIwQYMBaAFBRb
++/qrntsksembakoZTwTZk8AXMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAw
+RQIgX2fmMykyiuryf1AeKyc1j8HgmM8u/nyQfJnTCwvYUcECIQC6JHd3ybV9eJQo
+7sfr/jV+rRlZY2iaRv160BWYd82L7g==
+-----END CERTIFICATE-----
+subject= CN = Root CA2
+issuer= CN = Root CA2
+notBefore=Feb 6 22:38:48 2016 GMT
+notAfter=Feb 7 22:38:48 2116 GMT
+-----BEGIN CERTIFICATE-----
+MIIBaDCCAQ2gAwIBAgIBATAKBggqhkjOPQQDAjATMREwDwYDVQQDDAhSb290IENB
+MjAgFw0xNjAyMDYyMjM4NDhaGA8yMTE2MDIwNzIyMzg0OFowEzERMA8GA1UEAwwI
+Um9vdCBDQTIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATlTxAPKteg+L1LmxMl
+sbAFMxj6/322nR5RRGeF07KZRBFPaFZLgwZ1DuNrwM3wxxNdUyoZ6iAyDmwNf3K1
+42/Uo1AwTjAdBgNVHQ4EFgQUFFv7+que2ySx6ZtqShlPBNmTwBcwHwYDVR0jBBgw
+FoAUFFv7+que2ySx6ZtqShlPBNmTwBcwDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD
+AgNJADBGAiEAumhPWZ37swl10awM/amX+jv0UlUyJBf8RGA6QMG5bwICIQDbinER
+fEevg+GOsr1P6nNMCAsQd9NwsvTQ+jm+TBArWQ==
+-----END CERTIFICATE-----
diff --git a/test/danetest.pem b/test/danetest.pem
new file mode 100644
index 000000000000..68d4f444ff9b
--- /dev/null
+++ b/test/danetest.pem
@@ -0,0 +1,14 @@
+subject= /CN=Root CA
+issuer= /CN=Root CA
+notBefore=Dec 13 23:13:08 2015 GMT
+notAfter=Apr 15 23:13:08 3015 GMT
+-----BEGIN CERTIFICATE-----
+MIIBZDCCAQugAwIBAgIBATAKBggqhkjOPQQDAjASMRAwDgYDVQQDDAdSb290IENB
+MCAXDTE1MTIxMzIzMTMwOFoYDzMwMTUwNDE1MjMxMzA4WjASMRAwDgYDVQQDDAdS
+b290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0dpXj9GPuGRWsNkbVla9
+1o1N29JQ4zdXESfHXgVg9B0K+Rv6+IBfgMKMAmoU1P6MMKlnO57AwFqEqoENE0G3
+bKNQME4wHQYDVR0OBBYEFOS9QF8FKoIN35iD+T19P5Cq7HI/MB8GA1UdIwQYMBaA
+FOS9QF8FKoIN35iD+T19P5Cq7HI/MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwID
+RwAwRAIgaGnmqp+bTUvzCAkaWnqyww42GbDXXlKIGUaOS7km9MkCIBfxuEWGEZZv
+vBCcrtNYKWa/JfwFmOq6bHk8WNzDU3zF
+-----END CERTIFICATE-----
diff --git a/test/data.bin b/test/data.bin
new file mode 100644
index 000000000000..34422552807a
--- /dev/null
+++ b/test/data.bin
@@ -0,0 +1,4 @@
+TEST DATA
+
+Please note that if a test involves a new testing executable,
+you will need to do some additions in test/build.info.
diff --git a/test/data2.bin b/test/data2.bin
new file mode 100644
index 000000000000..40c1bdad13b7
--- /dev/null
+++ b/test/data2.bin
@@ -0,0 +1,61 @@
+TEST DATA2
+
+This is just some data that is meant to be different from the contents
+of the data.bin file.
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Hendrerit dolor magna
+eget est. Integer enim neque volutpat ac tincidunt vitae. Erat imperdiet
+sed euismod nisi porta. Sit amet volutpat consequat mauris nunc.
+Fermentum leo vel orci porta non. Purus viverra accumsan in nisl.
+Volutpat maecenas volutpat blandit aliquam etiam erat velit scelerisque.
+Gravida in fermentum et sollicitudin ac orci phasellus. Ut eu sem integer
+vitae justo eget. Enim tortor at auctor urna nunc id. Laoreet non
+curabitur gravida arcu ac tortor dignissim convallis aenean. A lacus
+vestibulum sed arcu non odio euismod lacinia. In metus vulputate eu
+scelerisque felis imperdiet proin fermentum. Semper quis lectus nulla at
+volutpat diam ut venenatis tellus. Hac habitasse platea dictumst quisque.
+Augue ut lectus arcu bibendum at varius vel pharetra. Nisl nunc mi ipsum
+faucibus vitae aliquet. Nec sagittis aliquam malesuada bibendum arcu
+vitae. Tellus id interdum velit laoreet id donec ultrices.
+
+Eget gravida cum sociis natoque. Nunc vel risus commodo viverra maecenas
+accumsan. Enim lobortis scelerisque fermentum dui faucibus. Quis eleifend
+quam adipiscing vitae. Nec nam aliquam sem et tortor. Pharetra massa
+massa ultricies mi quis hendrerit. Tellus in metus vulputate eu
+scelerisque. Et ultrices neque ornare aenean euismod elementum. Tellus
+mauris a diam maecenas sed enim ut sem viverra. Fermentum leo vel orci
+porta non pulvinar neque. Risus nullam eget felis eget nunc. Sed tempus
+urna et pharetra pharetra massa massa ultricies. Dui sapien eget mi
+proin. Vitae elementum curabitur vitae nunc sed velit dignissim sodales.
+Sed arcu non odio euismod lacinia at. Enim praesent elementum facilisis
+leo vel fringilla. Vel facilisis volutpat est velit egestas dui id ornare
+arcu. Arcu dictum varius duis at. Pretium lectus quam id leo in vitae.
+
+Egestas fringilla phasellus faucibus scelerisque eleifend donec. Ut
+ornare lectus sit amet est placerat in egestas. Viverra ipsum nunc
+aliquet bibendum enim facilisis gravida neque. Commodo ullamcorper a
+lacus vestibulum. Urna molestie at elementum eu. Mi in nulla posuere
+sollicitudin aliquam ultrices sagittis orci a. Orci sagittis eu volutpat
+odio facilisis mauris sit. Volutpat ac tincidunt vitae semper quis.
+Adipiscing elit duis tristique sollicitudin nibh. Dignissim enim sit amet
+venenatis urna cursus. Lacus luctus accumsan tortor posuere ac ut. Eu
+feugiat pretium nibh ipsum consequat nisl. Arcu risus quis varius quam
+quisque id diam. Urna nec tincidunt praesent semper feugiat nibh sed. Sed
+libero enim sed faucibus turpis in eu mi.
+
+Suspendisse faucibus interdum posuere lorem ipsum dolor sit amet. Aliquet
+eget sit amet tellus cras adipiscing enim. Lectus proin nibh nisl
+condimentum id. Et odio pellentesque diam volutpat commodo sed egestas
+egestas. Tempor id eu nisl nunc mi ipsum. Egestas erat imperdiet sed
+euismod nisi porta lorem mollis aliquam. Pretium quam vulputate dignissim
+suspendisse in est. Volutpat commodo sed egestas egestas fringilla. In
+aliquam sem fringilla ut. Viverra accumsan in nisl nisi. Nam at lectus
+urna duis convallis convallis. Tortor posuere ac ut consequat semper.
+Pellentesque habitant morbi tristique senectus et netus et malesuada.
+Aliquet enim tortor at auctor urna nunc id cursus metus. Sit amet luctus
+venenatis lectus magna. A diam maecenas sed enim ut sem viverra aliquet.
+Pellentesque sit amet porttitor eget dolor morbi. Eget lorem dolor sed
+viverra ipsum nunc aliquet bibendum enim. Iaculis urna id volutpat lacus
+laoreet non curabitur. Mattis vulputate enim nulla aliquet porttitor
+lacus luctus accumsan tortor.
diff --git a/test/default-and-fips.cnf b/test/default-and-fips.cnf
new file mode 100644
index 000000000000..2ca6487fd2fd
--- /dev/null
+++ b/test/default-and-fips.cnf
@@ -0,0 +1,16 @@
+openssl_conf = openssl_init
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+.include fipsmodule.cnf
+
+[openssl_init]
+providers = provider_sect
+
+[provider_sect]
+default = default_sect
+fips = fips_sect
+
+[default_sect]
+activate = 1
diff --git a/test/default-and-legacy.cnf b/test/default-and-legacy.cnf
new file mode 100644
index 000000000000..4e288a45eac8
--- /dev/null
+++ b/test/default-and-legacy.cnf
@@ -0,0 +1,17 @@
+openssl_conf = openssl_init
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+[openssl_init]
+providers = provider_sect
+
+[provider_sect]
+default = default_sect
+legacy = legacy_sect
+
+[default_sect]
+activate = 1
+
+[legacy_sect]
+activate = 1
diff --git a/test/default.cnf b/test/default.cnf
new file mode 100644
index 000000000000..f29d0e92bae8
--- /dev/null
+++ b/test/default.cnf
@@ -0,0 +1,13 @@
+openssl_conf = openssl_init
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+[openssl_init]
+providers = provider_sect
+
+[provider_sect]
+default = default_sect
+
+[default_sect]
+activate = 1
diff --git a/test/defltfips_test.c b/test/defltfips_test.c
new file mode 100644
index 000000000000..9def654c5d3a
--- /dev/null
+++ b/test/defltfips_test.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2022 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/evp.h>
+#include <openssl/provider.h>
+#include "testutil.h"
+
+static int is_fips;
+static int bad_fips;
+
+static int test_is_fips_enabled(void)
+{
+ int is_fips_enabled, is_fips_loaded;
+ EVP_MD *sha256 = NULL;
+
+ /*
+ * Check we're in FIPS mode when we're supposed to be. We do this early to
+ * confirm that EVP_default_properties_is_fips_enabled() works even before
+ * other function calls have auto-loaded the config file.
+ */
+ is_fips_enabled = EVP_default_properties_is_fips_enabled(NULL);
+ is_fips_loaded = OSSL_PROVIDER_available(NULL, "fips");
+
+ /*
+ * Check we're in an expected state. EVP_default_properties_is_fips_enabled
+ * can return true even if the FIPS provider isn't loaded - it is only based
+ * on the default properties. However we only set those properties if also
+ * loading the FIPS provider.
+ */
+ if (!TEST_int_eq(is_fips || bad_fips, is_fips_enabled)
+ || !TEST_int_eq(is_fips && !bad_fips, is_fips_loaded))
+ return 0;
+
+ /*
+ * Fetching an algorithm shouldn't change the state and should come from
+ * expected provider.
+ */
+ sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL);
+ if (bad_fips) {
+ if (!TEST_ptr_null(sha256)) {
+ EVP_MD_free(sha256);
+ return 0;
+ }
+ } else {
+ if (!TEST_ptr(sha256))
+ return 0;
+ if (is_fips
+ && !TEST_str_eq(OSSL_PROVIDER_get0_name(EVP_MD_get0_provider(sha256)),
+ "fips")) {
+ EVP_MD_free(sha256);
+ return 0;
+ }
+ EVP_MD_free(sha256);
+ }
+
+ /* State should still be consistent */
+ is_fips_enabled = EVP_default_properties_is_fips_enabled(NULL);
+ if (!TEST_int_eq(is_fips || bad_fips, is_fips_enabled))
+ return 0;
+
+ return 1;
+}
+
+int setup_tests(void)
+{
+ size_t argc;
+ char *arg1;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ argc = test_get_argument_count();
+ switch(argc) {
+ case 0:
+ is_fips = 0;
+ bad_fips = 0;
+ break;
+ case 1:
+ arg1 = test_get_argument(0);
+ if (strcmp(arg1, "fips") == 0) {
+ is_fips = 1;
+ bad_fips = 0;
+ break;
+ } else if (strcmp(arg1, "badfips") == 0) {
+ /* Configured for FIPS, but the module fails to load */
+ is_fips = 0;
+ bad_fips = 1;
+ break;
+ }
+ /* fall through */
+ default:
+ TEST_error("Invalid argument\n");
+ return 0;
+ }
+
+ /* Must be the first test before any other libcrypto calls are made */
+ ADD_TEST(test_is_fips_enabled);
+ return 1;
+}
diff --git a/test/destest.c b/test/destest.c
new file mode 100644
index 000000000000..d5f00fa691ff
--- /dev/null
+++ b/test/destest.c
@@ -0,0 +1,895 @@
+/*
+ * Copyright 1995-2023 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
+ */
+
+/*
+ * DES low level APIs are deprecated for public use, but still ok for internal
+ * use.
+ */
+#include "internal/deprecated.h"
+
+#include <openssl/e_os2.h>
+#include <string.h>
+
+#include "testutil.h"
+#include "internal/nelem.h"
+
+#ifndef OPENSSL_NO_DES
+# include <openssl/des.h>
+
+/* In case any platform doesn't use unsigned int for its checksums */
+# define TEST_cs_eq TEST_uint_eq
+
+# define DATA_BUF_SIZE 20
+
+/* tisk tisk - the test keys don't all have odd parity :-( */
+/* test data */
+# define NUM_TESTS 34
+static unsigned char key_data[NUM_TESTS][8] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
+ {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57},
+ {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E},
+ {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86},
+ {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E},
+ {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6},
+ {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE},
+ {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6},
+ {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE},
+ {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16},
+ {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F},
+ {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46},
+ {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E},
+ {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76},
+ {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07},
+ {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F},
+ {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7},
+ {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF},
+ {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6},
+ {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF},
+ {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
+ {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E},
+ {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}
+};
+
+static unsigned char plain_data[NUM_TESTS][8] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
+ {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42},
+ {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA},
+ {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72},
+ {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A},
+ {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2},
+ {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A},
+ {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2},
+ {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A},
+ {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02},
+ {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A},
+ {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32},
+ {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA},
+ {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62},
+ {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2},
+ {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA},
+ {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92},
+ {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A},
+ {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2},
+ {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
+};
+
+static unsigned char cipher_data[NUM_TESTS][8] = {
+ {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7},
+ {0x73, 0x59, 0xB2, 0x16, 0x3E, 0x4E, 0xDC, 0x58},
+ {0x95, 0x8E, 0x6E, 0x62, 0x7A, 0x05, 0x55, 0x7B},
+ {0xF4, 0x03, 0x79, 0xAB, 0x9E, 0x0E, 0xC5, 0x33},
+ {0x17, 0x66, 0x8D, 0xFC, 0x72, 0x92, 0x53, 0x2D},
+ {0x8A, 0x5A, 0xE1, 0xF8, 0x1A, 0xB8, 0xF2, 0xDD},
+ {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7},
+ {0xED, 0x39, 0xD9, 0x50, 0xFA, 0x74, 0xBC, 0xC4},
+ {0x69, 0x0F, 0x5B, 0x0D, 0x9A, 0x26, 0x93, 0x9B},
+ {0x7A, 0x38, 0x9D, 0x10, 0x35, 0x4B, 0xD2, 0x71},
+ {0x86, 0x8E, 0xBB, 0x51, 0xCA, 0xB4, 0x59, 0x9A},
+ {0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A},
+ {0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95},
+ {0x86, 0xA5, 0x60, 0xF1, 0x0E, 0xC6, 0xD8, 0x5B},
+ {0x0C, 0xD3, 0xDA, 0x02, 0x00, 0x21, 0xDC, 0x09},
+ {0xEA, 0x67, 0x6B, 0x2C, 0xB7, 0xDB, 0x2B, 0x7A},
+ {0xDF, 0xD6, 0x4A, 0x81, 0x5C, 0xAF, 0x1A, 0x0F},
+ {0x5C, 0x51, 0x3C, 0x9C, 0x48, 0x86, 0xC0, 0x88},
+ {0x0A, 0x2A, 0xEE, 0xAE, 0x3F, 0xF4, 0xAB, 0x77},
+ {0xEF, 0x1B, 0xF0, 0x3E, 0x5D, 0xFA, 0x57, 0x5A},
+ {0x88, 0xBF, 0x0D, 0xB6, 0xD7, 0x0D, 0xEE, 0x56},
+ {0xA1, 0xF9, 0x91, 0x55, 0x41, 0x02, 0x0B, 0x56},
+ {0x6F, 0xBF, 0x1C, 0xAF, 0xCF, 0xFD, 0x05, 0x56},
+ {0x2F, 0x22, 0xE4, 0x9B, 0xAB, 0x7C, 0xA1, 0xAC},
+ {0x5A, 0x6B, 0x61, 0x2C, 0xC2, 0x6C, 0xCE, 0x4A},
+ {0x5F, 0x4C, 0x03, 0x8E, 0xD1, 0x2B, 0x2E, 0x41},
+ {0x63, 0xFA, 0xC0, 0xD0, 0x34, 0xD9, 0xF7, 0x93},
+ {0x61, 0x7B, 0x3A, 0x0C, 0xE8, 0xF0, 0x71, 0x00},
+ {0xDB, 0x95, 0x86, 0x05, 0xF8, 0xC8, 0xC6, 0x06},
+ {0xED, 0xBF, 0xD1, 0xC6, 0x6C, 0x29, 0xCC, 0xC7},
+ {0x35, 0x55, 0x50, 0xB2, 0x15, 0x0E, 0x24, 0x51},
+ {0xCA, 0xAA, 0xAF, 0x4D, 0xEA, 0xF1, 0xDB, 0xAE},
+ {0xD5, 0xD4, 0x4F, 0xF7, 0x20, 0x68, 0x3D, 0x0D},
+ {0x2A, 0x2B, 0xB0, 0x08, 0xDF, 0x97, 0xC2, 0xF2}
+};
+
+static unsigned char cipher_ecb2[NUM_TESTS - 1][8] = {
+ {0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E},
+ {0x19, 0x9E, 0x9D, 0x6D, 0xF3, 0x9A, 0xA8, 0x16},
+ {0x2A, 0x4B, 0x4D, 0x24, 0x52, 0x43, 0x84, 0x27},
+ {0x35, 0x84, 0x3C, 0x01, 0x9D, 0x18, 0xC5, 0xB6},
+ {0x4A, 0x5B, 0x2F, 0x42, 0xAA, 0x77, 0x19, 0x25},
+ {0xA0, 0x6B, 0xA9, 0xB8, 0xCA, 0x5B, 0x17, 0x8A},
+ {0xAB, 0x9D, 0xB7, 0xFB, 0xED, 0x95, 0xF2, 0x74},
+ {0x3D, 0x25, 0x6C, 0x23, 0xA7, 0x25, 0x2F, 0xD6},
+ {0xB7, 0x6F, 0xAB, 0x4F, 0xBD, 0xBD, 0xB7, 0x67},
+ {0x8F, 0x68, 0x27, 0xD6, 0x9C, 0xF4, 0x1A, 0x10},
+ {0x82, 0x57, 0xA1, 0xD6, 0x50, 0x5E, 0x81, 0x85},
+ {0xA2, 0x0F, 0x0A, 0xCD, 0x80, 0x89, 0x7D, 0xFA},
+ {0xCD, 0x2A, 0x53, 0x3A, 0xDB, 0x0D, 0x7E, 0xF3},
+ {0xD2, 0xC2, 0xBE, 0x27, 0xE8, 0x1B, 0x68, 0xE3},
+ {0xE9, 0x24, 0xCF, 0x4F, 0x89, 0x3C, 0x5B, 0x0A},
+ {0xA7, 0x18, 0xC3, 0x9F, 0xFA, 0x9F, 0xD7, 0x69},
+ {0x77, 0x2C, 0x79, 0xB1, 0xD2, 0x31, 0x7E, 0xB1},
+ {0x49, 0xAB, 0x92, 0x7F, 0xD0, 0x22, 0x00, 0xB7},
+ {0xCE, 0x1C, 0x6C, 0x7D, 0x85, 0xE3, 0x4A, 0x6F},
+ {0xBE, 0x91, 0xD6, 0xE1, 0x27, 0xB2, 0xE9, 0x87},
+ {0x70, 0x28, 0xAE, 0x8F, 0xD1, 0xF5, 0x74, 0x1A},
+ {0xAA, 0x37, 0x80, 0xBB, 0xF3, 0x22, 0x1D, 0xDE},
+ {0xA6, 0xC4, 0xD2, 0x5E, 0x28, 0x93, 0xAC, 0xB3},
+ {0x22, 0x07, 0x81, 0x5A, 0xE4, 0xB7, 0x1A, 0xAD},
+ {0xDC, 0xCE, 0x05, 0xE7, 0x07, 0xBD, 0xF5, 0x84},
+ {0x26, 0x1D, 0x39, 0x2C, 0xB3, 0xBA, 0xA5, 0x85},
+ {0xB4, 0xF7, 0x0F, 0x72, 0xFB, 0x04, 0xF0, 0xDC},
+ {0x95, 0xBA, 0xA9, 0x4E, 0x87, 0x36, 0xF2, 0x89},
+ {0xD4, 0x07, 0x3A, 0xF1, 0x5A, 0x17, 0x82, 0x0E},
+ {0xEF, 0x6F, 0xAF, 0xA7, 0x66, 0x1A, 0x7E, 0x89},
+ {0xC1, 0x97, 0xF5, 0x58, 0x74, 0x8A, 0x20, 0xE7},
+ {0x43, 0x34, 0xCF, 0xDA, 0x22, 0xC4, 0x86, 0xC8},
+ {0x08, 0xD7, 0xB4, 0xFB, 0x62, 0x9D, 0x08, 0x85}
+};
+
+static unsigned char cbc_key[8] =
+ { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
+static unsigned char cbc2_key[8] =
+ { 0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86 };
+static unsigned char cbc3_key[8] =
+ { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
+static unsigned char cbc_iv[8] =
+ { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
+/*
+ * Changed the following text constant to binary so it will work on ebcdic
+ * machines :-)
+ */
+/* static char cbc_data[40]="7654321 Now is the time for \0001"; */
+static unsigned char cbc_data[40] = {
+ 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
+ 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20,
+ 0x66, 0x6F, 0x72, 0x20, 0x00, 0x31, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+static unsigned char cbc_ok[32] = {
+ 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
+ 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb,
+ 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68,
+ 0x1d, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4
+};
+
+# ifdef SCREW_THE_PARITY
+# error "SCREW_THE_PARITY is not meant to be defined."
+# error "Original vectors are preserved for reference only."
+static unsigned char cbc2_key[8] =
+ { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 };
+static unsigned char xcbc_ok[32] = {
+ 0x86, 0x74, 0x81, 0x0D, 0x61, 0xA4, 0xA5, 0x48,
+ 0xB9, 0x93, 0x03, 0xE1, 0xB8, 0xBB, 0xBD, 0xBD,
+ 0x64, 0x30, 0x0B, 0xB9, 0x06, 0x65, 0x81, 0x76,
+ 0x04, 0x1D, 0x77, 0x62, 0x17, 0xCA, 0x2B, 0xD2,
+};
+# else
+static unsigned char xcbc_ok[32] = {
+ 0x84, 0x6B, 0x29, 0x14, 0x85, 0x1E, 0x9A, 0x29,
+ 0x54, 0x73, 0x2F, 0x8A, 0xA0, 0xA6, 0x11, 0xC1,
+ 0x15, 0xCD, 0xC2, 0xD7, 0x95, 0x1B, 0x10, 0x53,
+ 0xA6, 0x3C, 0x5E, 0x03, 0xB2, 0x1A, 0xA3, 0xC4,
+};
+# endif
+
+static unsigned char cbc3_ok[32] = {
+ 0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0,
+ 0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC,
+ 0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4,
+ 0x1C, 0x67, 0x38, 0x12, 0xCF, 0xDE, 0x96, 0x75
+};
+
+static unsigned char pcbc_ok[32] = {
+ 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
+ 0x6d, 0xec, 0xb4, 0x70, 0xa0, 0xe5, 0x6b, 0x15,
+ 0xae, 0xa6, 0xbf, 0x61, 0xed, 0x7d, 0x9c, 0x9f,
+ 0xf7, 0x17, 0x46, 0x3b, 0x8a, 0xb3, 0xcc, 0x88
+};
+
+static unsigned char cfb_key[8] =
+ { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
+static unsigned char cfb_iv[8] =
+ { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef };
+static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8];
+static unsigned char plain[24] = {
+ 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
+ 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20
+};
+
+static unsigned char cfb_cipher8[24] = {
+ 0xf3, 0x1f, 0xda, 0x07, 0x01, 0x14, 0x62, 0xee, 0x18, 0x7f, 0x43, 0xd8,
+ 0x0a, 0x7c, 0xd9, 0xb5, 0xb0, 0xd2, 0x90, 0xda, 0x6e, 0x5b, 0x9a, 0x87
+};
+
+static unsigned char cfb_cipher16[24] = {
+ 0xF3, 0x09, 0x87, 0x87, 0x7F, 0x57, 0xF7, 0x3C, 0x36, 0xB6, 0xDB, 0x70,
+ 0xD8, 0xD5, 0x34, 0x19, 0xD3, 0x86, 0xB2, 0x23, 0xB7, 0xB2, 0xAD, 0x1B
+};
+
+static unsigned char cfb_cipher32[24] = {
+ 0xF3, 0x09, 0x62, 0x49, 0xA4, 0xDF, 0xA4, 0x9F, 0x33, 0xDC, 0x7B, 0xAD,
+ 0x4C, 0xC8, 0x9F, 0x64, 0xE4, 0x53, 0xE5, 0xEC, 0x67, 0x20, 0xDA, 0xB6
+};
+
+static unsigned char cfb_cipher48[24] = {
+ 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x30, 0xB5, 0x15, 0xEC, 0xBB, 0x85,
+ 0x97, 0x5A, 0x13, 0x8C, 0x68, 0x60, 0xE2, 0x38, 0x34, 0x3C, 0xDC, 0x1F
+};
+
+static unsigned char cfb_cipher64[24] = {
+ 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x6E, 0x51, 0xA6, 0x9E, 0x83, 0x9B,
+ 0x1A, 0x92, 0xF7, 0x84, 0x03, 0x46, 0x71, 0x33, 0x89, 0x8E, 0xA6, 0x22
+};
+
+static unsigned char ofb_key[8] =
+ { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
+static unsigned char ofb_iv[8] =
+ { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef };
+static unsigned char ofb_buf1[24], ofb_buf2[24], ofb_tmp[8];
+static unsigned char ofb_cipher[24] = {
+ 0xf3, 0x09, 0x62, 0x49, 0xc7, 0xf4, 0x6e, 0x51,
+ 0x35, 0xf2, 0x4a, 0x24, 0x2e, 0xeb, 0x3d, 0x3f,
+ 0x3d, 0x6d, 0x5b, 0xe3, 0x25, 0x5a, 0xf8, 0xc3
+};
+static DES_LONG cbc_cksum_ret = 0xF7FE62B4L;
+static unsigned char cbc_cksum_data[8] =
+ { 0x1D, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4 };
+
+static char *pt(const unsigned char *p, char buf[DATA_BUF_SIZE])
+{
+ char *ret;
+ int i;
+ static const char *f = "0123456789ABCDEF";
+
+ ret = &(buf[0]);
+ for (i = 0; i < 8; i++) {
+ ret[i * 2] = f[(p[i] >> 4) & 0xf];
+ ret[i * 2 + 1] = f[p[i] & 0xf];
+ }
+ ret[16] = '\0';
+ return ret;
+}
+
+static int test_des_ecb(int i)
+{
+ DES_key_schedule ks;
+ DES_cblock in, out, outin;
+ char b1[DATA_BUF_SIZE], b2[DATA_BUF_SIZE];
+
+ DES_set_key_unchecked(&key_data[i], &ks);
+ memcpy(in, plain_data[i], 8);
+ memset(out, 0, 8);
+ memset(outin, 0, 8);
+ DES_ecb_encrypt(&in, &out, &ks, DES_ENCRYPT);
+ DES_ecb_encrypt(&out, &outin, &ks, DES_DECRYPT);
+
+ if (!TEST_mem_eq(out, 8, cipher_data[i], 8)) {
+ TEST_info("Encryption error %2d k=%s p=%s", i + 1,
+ pt(key_data[i], b1), pt(in, b2));
+ return 0;
+ }
+ if (!TEST_mem_eq(in, 8, outin, 8)) {
+ TEST_info("Decryption error %2d k=%s p=%s", i + 1,
+ pt(key_data[i], b1), pt(out, b2));
+ return 0;
+ }
+ return 1;
+}
+
+static int test_des_ede_ecb(int i)
+{
+ DES_cblock in, out, outin;
+ DES_key_schedule ks, ks2, ks3;
+ char b1[DATA_BUF_SIZE], b2[DATA_BUF_SIZE];
+
+ DES_set_key_unchecked(&key_data[i], &ks);
+ DES_set_key_unchecked(&key_data[i + 1], &ks2);
+ DES_set_key_unchecked(&key_data[i + 2], &ks3);
+ memcpy(in, plain_data[i], 8);
+ memset(out, 0, 8);
+ memset(outin, 0, 8);
+ DES_ecb3_encrypt(&in, &out, &ks, &ks2, &ks, DES_ENCRYPT);
+ DES_ecb3_encrypt(&out, &outin, &ks, &ks2, &ks, DES_DECRYPT);
+
+ if (!TEST_mem_eq(out, 8, cipher_ecb2[i], 8)) {
+ TEST_info("Encryption error %2d k=%s p=%s", i + 1,
+ pt(key_data[i], b1), pt(in, b2));
+ return 0;
+ }
+ if (!TEST_mem_eq(in, 8, outin, 8)) {
+ TEST_info("Decryption error %2d k=%s p=%s ", i + 1,
+ pt(key_data[i], b1), pt(out, b2));
+ return 0;
+ }
+ return 1;
+}
+
+static int test_des_cbc(void)
+{
+ unsigned char cbc_in[40];
+ unsigned char cbc_out[40];
+ DES_cblock iv3;
+ DES_key_schedule ks;
+ const size_t cbc_data_len = strlen((char *)cbc_data);
+
+ if (!TEST_int_eq(DES_set_key_checked(&cbc_key, &ks), 0))
+ return 0;
+ memset(cbc_out, 0, sizeof(cbc_out));
+ memset(cbc_in, 0, sizeof(cbc_in));
+ memcpy(iv3, cbc_iv, sizeof(cbc_iv));
+ DES_ncbc_encrypt(cbc_data, cbc_out, cbc_data_len + 1, &ks,
+ &iv3, DES_ENCRYPT);
+ if (!TEST_mem_eq(cbc_out, 32, cbc_ok, 32))
+ return 0;
+
+ memcpy(iv3, cbc_iv, sizeof(cbc_iv));
+ DES_ncbc_encrypt(cbc_out, cbc_in, cbc_data_len + 1, &ks,
+ &iv3, DES_DECRYPT);
+ return TEST_mem_eq(cbc_in, cbc_data_len, cbc_data, cbc_data_len);
+}
+
+static int test_des_ede_cbc(void)
+{
+ DES_cblock iv3;
+ DES_key_schedule ks;
+ unsigned char cbc_in[40];
+ unsigned char cbc_out[40];
+ const size_t n = strlen((char *)cbc_data) + 1;
+
+ if (!TEST_int_eq(DES_set_key_checked(&cbc_key, &ks), 0))
+ return 0;
+ memset(cbc_out, 0, sizeof(cbc_out));
+ memset(cbc_in, 0, sizeof(cbc_in));
+ memcpy(iv3, cbc_iv, sizeof(cbc_iv));
+ DES_xcbc_encrypt(cbc_data, cbc_out, n, &ks, &iv3, &cbc2_key, &cbc3_key,
+ DES_ENCRYPT);
+ if (!TEST_mem_eq(cbc_out, sizeof(xcbc_ok), xcbc_ok, sizeof(xcbc_ok)))
+ return 0;
+ memcpy(iv3, cbc_iv, sizeof(cbc_iv));
+ DES_xcbc_encrypt(cbc_out, cbc_in, n, &ks, &iv3, &cbc2_key, &cbc3_key,
+ DES_DECRYPT);
+ return TEST_mem_eq(cbc_data, n, cbc_data, n);
+}
+
+static int test_ede_cbc(void)
+{
+ DES_cblock iv3;
+ DES_key_schedule ks, ks2, ks3;
+ unsigned char cbc_in[40];
+ unsigned char cbc_out[40];
+ const size_t i = strlen((char *)cbc_data) + 1;
+ const size_t n = (i + 7) / 8 * 8;
+
+ if (!TEST_int_eq(DES_set_key_checked(&cbc_key, &ks), 0))
+ return 0;
+ if (!TEST_int_eq(DES_set_key_checked(&cbc2_key, &ks2), 0))
+ return 0;
+ if (!TEST_int_eq(DES_set_key_checked(&cbc3_key, &ks3), 0))
+ return 0;
+ memset(cbc_out, 0, sizeof(cbc_out));
+ memset(cbc_in, 0, sizeof(cbc_in));
+ memcpy(iv3, cbc_iv, sizeof(cbc_iv));
+
+ DES_ede3_cbc_encrypt(cbc_data, cbc_out, 16L, &ks, &ks2, &ks3, &iv3,
+ DES_ENCRYPT);
+ DES_ede3_cbc_encrypt(&cbc_data[16], &cbc_out[16], i - 16, &ks, &ks2,
+ &ks3, &iv3, DES_ENCRYPT);
+ if (!TEST_mem_eq(cbc_out, n, cbc3_ok, n))
+ return 0;
+
+ memcpy(iv3, cbc_iv, sizeof(cbc_iv));
+ DES_ede3_cbc_encrypt(cbc_out, cbc_in, i, &ks, &ks2, &ks3, &iv3,
+ DES_DECRYPT);
+ return TEST_mem_eq(cbc_in, i, cbc_data, i);
+}
+
+static int test_input_align(int i)
+{
+ unsigned char cbc_out[40];
+ DES_cblock iv;
+ DES_key_schedule ks;
+ const size_t n = strlen(i + (char *)cbc_data) + 1;
+
+ memset(cbc_out, 0, sizeof(cbc_out));
+ memcpy(iv, cbc_iv, sizeof(cbc_iv));
+ if (!TEST_int_eq(DES_set_key_checked(&cbc_key, &ks), 0))
+ return 0;
+ DES_ncbc_encrypt(&cbc_data[i], cbc_out, n, &ks, &iv, DES_ENCRYPT);
+ return 1;
+}
+
+static int test_output_align(int i)
+{
+ unsigned char cbc_out[40];
+ DES_cblock iv;
+ DES_key_schedule ks;
+ const size_t n = strlen((char *)cbc_data) + 1;
+
+ memset(cbc_out, 0, sizeof(cbc_out));
+ memcpy(iv, cbc_iv, sizeof(cbc_iv));
+ if (!TEST_int_eq(DES_set_key_checked(&cbc_key, &ks), 0))
+ return 0;
+ DES_ncbc_encrypt(cbc_data, &cbc_out[i], n, &ks, &iv, DES_ENCRYPT);
+ return 1;
+}
+
+static int test_des_crypt(void)
+{
+ if (!TEST_str_eq("efGnQx2725bI2", DES_crypt("testing", "ef")))
+ return 0;
+ if (!TEST_str_eq("yA1Rp/1hZXIJk", DES_crypt("bca76;23", "yA")))
+ return 0;
+
+ if (!TEST_ptr_null(DES_crypt("testing", "y\202")))
+ return 0;
+ if (!TEST_ptr_null(DES_crypt("testing", "\0A")))
+ return 0;
+ if (!TEST_ptr_null(DES_crypt("testing", "A")))
+ return 0;
+ return 1;
+}
+
+static int test_des_pcbc(void)
+{
+ unsigned char cbc_in[40];
+ unsigned char cbc_out[40];
+ DES_key_schedule ks;
+ const int n = strlen((char *)cbc_data) + 1;
+
+ if (!TEST_int_eq(DES_set_key_checked(&cbc_key, &ks), 0))
+ return 0;
+ memset(cbc_out, 0, sizeof(cbc_out));
+ memset(cbc_in, 0, sizeof(cbc_in));
+ DES_pcbc_encrypt(cbc_data, cbc_out, n, &ks,
+ &cbc_iv, DES_ENCRYPT);
+ if (!TEST_mem_eq(cbc_out, sizeof(pcbc_ok), pcbc_ok, sizeof(pcbc_ok)))
+ return 0;
+ DES_pcbc_encrypt(cbc_out, cbc_in, n, &ks,
+ &cbc_iv, DES_DECRYPT);
+ return TEST_mem_eq(cbc_in, n, cbc_data, n);
+}
+
+static int cfb_test(int bits, unsigned char *cfb_cipher)
+{
+ DES_key_schedule ks;
+
+ DES_set_key_checked(&cfb_key, &ks);
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
+ DES_cfb_encrypt(plain, cfb_buf1, bits, sizeof(plain), &ks, &cfb_tmp,
+ DES_ENCRYPT);
+ if (!TEST_mem_eq(cfb_cipher, sizeof(plain), cfb_buf1, sizeof(plain)))
+ return 0;
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
+ DES_cfb_encrypt(cfb_buf1, cfb_buf2, bits, sizeof(plain), &ks, &cfb_tmp,
+ DES_DECRYPT);
+ return TEST_mem_eq(plain, sizeof(plain), cfb_buf2, sizeof(plain));
+}
+
+static int test_des_cfb8(void)
+{
+ return cfb_test(8, cfb_cipher8);
+}
+
+static int test_des_cfb16(void)
+{
+ return cfb_test(16, cfb_cipher16);
+}
+
+static int test_des_cfb32(void)
+{
+ return cfb_test(32, cfb_cipher32);
+}
+
+static int test_des_cfb48(void)
+{
+ return cfb_test(48, cfb_cipher48);
+}
+
+static int test_des_cfb64(void)
+{
+ DES_key_schedule ks;
+ int n;
+ size_t i;
+
+ if (!cfb_test(64, cfb_cipher64))
+ return 0;
+
+ DES_set_key_checked(&cfb_key, &ks);
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
+ n = 0;
+ DES_cfb64_encrypt(plain, cfb_buf1, 12, &ks, &cfb_tmp, &n, DES_ENCRYPT);
+ DES_cfb64_encrypt(&plain[12], &cfb_buf1[12], sizeof(plain) - 12, &ks,
+ &cfb_tmp, &n, DES_ENCRYPT);
+ if (!TEST_mem_eq(cfb_cipher64, sizeof(plain), cfb_buf1, sizeof(plain)))
+ return 0;
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
+ n = 0;
+ DES_cfb64_encrypt(cfb_buf1, cfb_buf2, 17, &ks, &cfb_tmp, &n, DES_DECRYPT);
+ DES_cfb64_encrypt(&cfb_buf1[17], &cfb_buf2[17],
+ sizeof(plain) - 17, &ks, &cfb_tmp, &n, DES_DECRYPT);
+ if (!TEST_mem_eq(plain, sizeof(plain), cfb_buf2, sizeof(plain)))
+ return 0;
+
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
+ for (i = 0; i < sizeof(plain); i++)
+ DES_cfb_encrypt(&plain[i], &cfb_buf1[i], 8, 1, &ks, &cfb_tmp,
+ DES_ENCRYPT);
+ if (!TEST_mem_eq(cfb_cipher8, sizeof(plain), cfb_buf1, sizeof(plain)))
+ return 0;
+
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
+ for (i = 0; i < sizeof(plain); i++)
+ DES_cfb_encrypt(&cfb_buf1[i], &cfb_buf2[i], 8, 1, &ks, &cfb_tmp,
+ DES_DECRYPT);
+ return TEST_mem_eq(plain, sizeof(plain), cfb_buf2, sizeof(plain));
+}
+
+static int test_des_ede_cfb64(void)
+{
+ DES_key_schedule ks;
+ int n;
+
+ DES_set_key_checked(&cfb_key, &ks);
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
+ n = 0;
+ DES_ede3_cfb64_encrypt(plain, cfb_buf1, 12, &ks, &ks, &ks, &cfb_tmp, &n,
+ DES_ENCRYPT);
+ DES_ede3_cfb64_encrypt(&plain[12], &cfb_buf1[12], sizeof(plain) - 12, &ks,
+ &ks, &ks, &cfb_tmp, &n, DES_ENCRYPT);
+ if (!TEST_mem_eq(cfb_cipher64, sizeof(plain), cfb_buf1, sizeof(plain)))
+ return 0;
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
+ n = 0;
+ DES_ede3_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)17, &ks, &ks, &ks,
+ &cfb_tmp, &n, DES_DECRYPT);
+ DES_ede3_cfb64_encrypt(&cfb_buf1[17], &cfb_buf2[17], sizeof(plain) - 17,
+ &ks, &ks, &ks, &cfb_tmp, &n, DES_DECRYPT);
+ return TEST_mem_eq(plain, sizeof(plain), cfb_buf2, sizeof(plain));
+}
+
+static int test_des_ofb(void)
+{
+ DES_key_schedule ks;
+
+ DES_set_key_checked(&ofb_key, &ks);
+ memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
+ DES_ofb_encrypt(plain, ofb_buf1, 64, sizeof(plain) / 8, &ks, &ofb_tmp);
+ if (!TEST_mem_eq(ofb_cipher, sizeof(ofb_buf1), ofb_buf1, sizeof(ofb_buf1)))
+ return 0;
+
+ memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
+ DES_ofb_encrypt(ofb_buf1, ofb_buf2, 64, sizeof(ofb_buf1) / 8, &ks,
+ &ofb_tmp);
+ return TEST_mem_eq(plain, sizeof(ofb_buf2), ofb_buf2, sizeof(ofb_buf2));
+}
+
+static int test_des_ofb64(void)
+{
+ DES_key_schedule ks;
+ int num;
+ size_t i;
+
+ DES_set_key_checked(&ofb_key, &ks);
+ memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
+ memset(ofb_buf1, 0, sizeof(ofb_buf1));
+ memset(ofb_buf2, 0, sizeof(ofb_buf1));
+ num = 0;
+ for (i = 0; i < sizeof(plain); i++) {
+ DES_ofb64_encrypt(&plain[i], &ofb_buf1[i], 1, &ks, &ofb_tmp, &num);
+ }
+ if (!TEST_mem_eq(ofb_cipher, sizeof(ofb_buf1), ofb_buf1, sizeof(ofb_buf1)))
+ return 0;
+ memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
+ num = 0;
+ DES_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), &ks, &ofb_tmp,
+ &num);
+ return TEST_mem_eq(plain, sizeof(ofb_buf2), ofb_buf2, sizeof(ofb_buf2));
+}
+
+static int test_des_ede_ofb64(void)
+{
+ DES_key_schedule ks;
+ int num;
+ size_t i;
+
+ DES_set_key_checked(&ofb_key, &ks);
+ memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
+ memset(ofb_buf1, 0, sizeof(ofb_buf1));
+ memset(ofb_buf2, 0, sizeof(ofb_buf1));
+ num = 0;
+ for (i = 0; i < sizeof(plain); i++) {
+ DES_ede3_ofb64_encrypt(&plain[i], &ofb_buf1[i], 1, &ks, &ks,
+ &ks, &ofb_tmp, &num);
+ }
+ if (!TEST_mem_eq(ofb_cipher, sizeof(ofb_buf1), ofb_buf1, sizeof(ofb_buf1)))
+ return 0;
+ memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
+ num = 0;
+ DES_ede3_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), &ks, &ks, &ks,
+ &ofb_tmp, &num);
+ return TEST_mem_eq(plain, sizeof(ofb_buf2), ofb_buf2, sizeof(ofb_buf2));
+}
+
+static int test_des_cbc_cksum(void)
+{
+ DES_LONG cs;
+ DES_key_schedule ks;
+ unsigned char cret[8];
+
+ DES_set_key_checked(&cbc_key, &ks);
+ cs = DES_cbc_cksum(cbc_data, &cret, strlen((char *)cbc_data), &ks,
+ &cbc_iv);
+ if (!TEST_cs_eq(cs, cbc_cksum_ret))
+ return 0;
+ return TEST_mem_eq(cret, 8, cbc_cksum_data, 8);
+}
+
+static int test_des_quad_cksum(void)
+{
+ DES_LONG cs, lqret[4];
+
+ cs = DES_quad_cksum(cbc_data, (DES_cblock *)lqret,
+ (long)strlen((char *)cbc_data), 2,
+ (DES_cblock *)cbc_iv);
+ if (!TEST_cs_eq(cs, 0x70d7a63aL))
+ return 0;
+ if (!TEST_cs_eq(lqret[0], 0x327eba8dL))
+ return 0;
+ if (!TEST_cs_eq(lqret[1], 0x201a49ccL))
+ return 0;
+ if (!TEST_cs_eq(lqret[2], 0x70d7a63aL))
+ return 0;
+ if (!TEST_cs_eq(lqret[3], 0x501c2c26L))
+ return 0;
+ return 1;
+}
+
+/*
+ * Test TDES based key wrapping.
+ * The wrapping process uses a randomly generated IV so it is difficult to
+ * undertake KATs. End to end testing is performed instead.
+ */
+static const int test_des_key_wrap_sizes[] = {
+ 8, 16, 24, 32, 64, 80
+};
+
+static int test_des_key_wrap(int idx)
+{
+ int in_bytes = test_des_key_wrap_sizes[idx];
+ unsigned char in[100], c_txt[200], p_txt[200], key[24];
+ int clen, clen_upd, clen_fin, plen, plen_upd, plen_fin, expect, bs, i;
+ EVP_CIPHER *cipher = NULL;
+ EVP_CIPHER_CTX *ctx = NULL;
+ int res = 0;
+
+ /* Some sanity checks and cipher loading */
+ if (!TEST_size_t_le(in_bytes, sizeof(in))
+ || !TEST_ptr(cipher = EVP_CIPHER_fetch(NULL, "DES3-WRAP", NULL))
+ || !TEST_int_eq(bs = EVP_CIPHER_get_block_size(cipher), 8)
+ || !TEST_size_t_eq(bs * 3u, sizeof(key))
+ || !TEST_true(in_bytes % bs == 0)
+ || !TEST_ptr(ctx = EVP_CIPHER_CTX_new()))
+ goto err;
+
+ /* Create random data to end to end test */
+ for (i = 0; i < in_bytes; i++)
+ in[i] = test_random();
+
+ /* Build the key */
+ memcpy(key, cbc_key, sizeof(cbc_key));
+ memcpy(key + sizeof(cbc_key), cbc2_key, sizeof(cbc2_key));
+ memcpy(key + sizeof(cbc_key) + sizeof(cbc3_key), cbc_key, sizeof(cbc3_key));
+
+ /* Wrap / encrypt the key */
+ clen_upd = sizeof(c_txt);
+ if (!TEST_true(EVP_EncryptInit(ctx, cipher, key, NULL))
+ || !TEST_true(EVP_EncryptUpdate(ctx, c_txt, &clen_upd,
+ in, in_bytes)))
+ goto err;
+
+ expect = (in_bytes + (bs - 1)) / bs * bs + 2 * bs;
+ if (!TEST_int_eq(clen_upd, expect))
+ goto err;
+
+ clen_fin = sizeof(c_txt) - clen_upd;
+ if (!TEST_true(EVP_EncryptFinal(ctx, c_txt + clen_upd, &clen_fin))
+ || !TEST_int_eq(clen_fin, 0))
+ goto err;
+ clen = clen_upd + clen_fin;
+
+ /* Decrypt the wrapped key */
+ plen_upd = sizeof(p_txt);
+ if (!TEST_true(EVP_DecryptInit(ctx, cipher, key, NULL))
+ || !TEST_true(EVP_DecryptUpdate(ctx, p_txt, &plen_upd,
+ c_txt, clen)))
+ goto err;
+ plen_fin = sizeof(p_txt) - plen_upd;
+ if (!TEST_true(EVP_DecryptFinal(ctx, p_txt + plen_upd, &plen_fin)))
+ goto err;
+ plen = plen_upd + plen_fin;
+
+ if (!TEST_mem_eq(in, in_bytes, p_txt, plen))
+ goto err;
+ res = 1;
+ err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+ return res;
+}
+
+/*-
+ * Weak and semi weak keys as taken from
+ * %A D.W. Davies
+ * %A W.L. Price
+ * %T Security for Computer Networks
+ * %I John Wiley & Sons
+ * %D 1984
+ */
+static struct {
+ const DES_cblock key;
+ int expect;
+} weak_keys[] = {
+ /* weak keys */
+ {{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 1 },
+ {{0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE}, 1 },
+ {{0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E}, 1 },
+ {{0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1}, 1 },
+ /* semi-weak keys */
+ {{0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE}, 1 },
+ {{0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01}, 1 },
+ {{0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1}, 1 },
+ {{0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E}, 1 },
+ {{0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1}, 1 },
+ {{0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01}, 1 },
+ {{0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE}, 1 },
+ {{0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E}, 1 },
+ {{0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E}, 1 },
+ {{0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01}, 1 },
+ {{0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE}, 1 },
+ {{0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1}, 1 },
+ /* good key */
+ {{0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 0 }
+};
+
+static int test_des_weak_keys(int n)
+{
+ const_DES_cblock *key = (unsigned char (*)[8])weak_keys[n].key;
+
+ return TEST_int_eq(DES_is_weak_key(key), weak_keys[n].expect);
+}
+
+static struct {
+ const DES_cblock key;
+ int expect;
+} bad_parity_keys[] = {
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0 },
+ {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 0 },
+ /* Perturb each byte in turn to create even parity */
+ {{0x48, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 0 },
+ {{0x49, 0xE8, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 0 },
+ {{0x49, 0xE9, 0x5C, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 0 },
+ {{0x49, 0xE9, 0x5D, 0x7D, 0x4C, 0xA2, 0x29, 0xBF}, 0 },
+ {{0x49, 0xE9, 0x5D, 0x6D, 0x5C, 0xA2, 0x29, 0xBF}, 0 },
+ {{0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA3, 0x29, 0xBF}, 0 },
+ {{0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x39, 0xBF}, 0 },
+ {{0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBE}, 0 },
+ /* Odd parity version of above */
+ {{0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 1 }
+};
+
+static int test_des_check_bad_parity(int n)
+{
+ const_DES_cblock *key = (unsigned char (*)[8])bad_parity_keys[n].key;
+
+ return TEST_int_eq(DES_check_key_parity(key), bad_parity_keys[n].expect);
+}
+
+/* Test that two key 3DES can generate a random key without error */
+static int test_des_two_key(void)
+{
+ int res = 0;
+ EVP_CIPHER *cipher = NULL;
+ EVP_CIPHER_CTX *ctx = NULL;
+ unsigned char key[16];
+
+ if (!TEST_ptr(cipher = EVP_CIPHER_fetch(NULL, "DES-EDE-ECB", NULL))
+ || !TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, 1)
+ || !EVP_CIPHER_CTX_set_key_length(ctx, sizeof(key))
+ || !EVP_CIPHER_CTX_rand_key(ctx, key))
+ goto err;
+
+ res = 1;
+ err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+ return res;
+}
+
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_DES
+ ADD_ALL_TESTS(test_des_ecb, NUM_TESTS);
+ ADD_TEST(test_des_cbc);
+ ADD_TEST(test_ede_cbc);
+ ADD_ALL_TESTS(test_des_ede_ecb, NUM_TESTS - 2);
+ ADD_TEST(test_des_ede_cbc);
+ ADD_TEST(test_des_pcbc);
+ ADD_TEST(test_des_cfb8);
+ ADD_TEST(test_des_cfb16);
+ ADD_TEST(test_des_cfb32);
+ ADD_TEST(test_des_cfb48);
+ ADD_TEST(test_des_cfb64);
+ ADD_TEST(test_des_ede_cfb64);
+ ADD_TEST(test_des_ofb);
+ ADD_TEST(test_des_ofb64);
+ ADD_TEST(test_des_ede_ofb64);
+ ADD_TEST(test_des_cbc_cksum);
+ ADD_TEST(test_des_quad_cksum);
+ ADD_TEST(test_des_crypt);
+ ADD_ALL_TESTS(test_input_align, 4);
+ ADD_ALL_TESTS(test_output_align, 4);
+ ADD_ALL_TESTS(test_des_key_wrap, OSSL_NELEM(test_des_key_wrap_sizes));
+ ADD_ALL_TESTS(test_des_weak_keys, OSSL_NELEM(weak_keys));
+ ADD_ALL_TESTS(test_des_check_bad_parity, OSSL_NELEM(bad_parity_keys));
+ ADD_TEST(test_des_two_key);
+#endif
+ return 1;
+}
diff --git a/test/dhtest.c b/test/dhtest.c
new file mode 100644
index 000000000000..000dd5b69805
--- /dev/null
+++ b/test/dhtest.c
@@ -0,0 +1,954 @@
+/*
+ * Copyright 1995-2023 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
+ */
+
+/*
+ * DH low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "internal/nelem.h"
+#include <openssl/crypto.h>
+#include <openssl/bio.h>
+#include <openssl/bn.h>
+#include <openssl/rand.h>
+#include <openssl/err.h>
+#include <openssl/obj_mac.h>
+#include <openssl/core_names.h>
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_DH
+# include <openssl/dh.h>
+# include "crypto/bn_dh.h"
+# include "crypto/dh.h"
+
+static int cb(int p, int n, BN_GENCB *arg);
+
+static int dh_test(void)
+{
+ DH *dh = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL;
+ const BIGNUM *p2, *q2, *g2;
+ BIGNUM *priv_key = NULL;
+ const BIGNUM *pub_key2, *priv_key2;
+ BN_GENCB *_cb = NULL;
+ DH *a = NULL;
+ DH *b = NULL;
+ DH *c = NULL;
+ const BIGNUM *ap = NULL, *ag = NULL, *apub_key = NULL;
+ const BIGNUM *bpub_key = NULL, *bpriv_key = NULL;
+ BIGNUM *bp = NULL, *bg = NULL, *cpriv_key = NULL;
+ unsigned char *abuf = NULL;
+ unsigned char *bbuf = NULL;
+ unsigned char *cbuf = NULL;
+ int i, alen, blen, clen, aout, bout, cout;
+ int ret = 0;
+
+ if (!TEST_ptr(dh = DH_new())
+ || !TEST_ptr(p = BN_new())
+ || !TEST_ptr(q = BN_new())
+ || !TEST_ptr(g = BN_new())
+ || !TEST_ptr(priv_key = BN_new()))
+ goto err1;
+
+ /*
+ * I) basic tests
+ */
+
+ /* using a small predefined Sophie Germain DH group with generator 3 */
+ if (!TEST_true(BN_set_word(p, 4079L))
+ || !TEST_true(BN_set_word(q, 2039L))
+ || !TEST_true(BN_set_word(g, 3L))
+ || !TEST_true(DH_set0_pqg(dh, p, q, g)))
+ goto err1;
+
+ /* check fails, because p is way too small */
+ if (!TEST_true(DH_check(dh, &i)))
+ goto err2;
+ i ^= DH_MODULUS_TOO_SMALL;
+ if (!TEST_false(i & DH_CHECK_P_NOT_PRIME)
+ || !TEST_false(i & DH_CHECK_P_NOT_SAFE_PRIME)
+ || !TEST_false(i & DH_UNABLE_TO_CHECK_GENERATOR)
+ || !TEST_false(i & DH_NOT_SUITABLE_GENERATOR)
+ || !TEST_false(i & DH_CHECK_Q_NOT_PRIME)
+ || !TEST_false(i & DH_CHECK_INVALID_Q_VALUE)
+ || !TEST_false(i & DH_CHECK_INVALID_J_VALUE)
+ || !TEST_false(i & DH_MODULUS_TOO_SMALL)
+ || !TEST_false(i & DH_MODULUS_TOO_LARGE)
+ || !TEST_false(i))
+ goto err2;
+
+ /* test the combined getter for p, q, and g */
+ DH_get0_pqg(dh, &p2, &q2, &g2);
+ if (!TEST_ptr_eq(p2, p)
+ || !TEST_ptr_eq(q2, q)
+ || !TEST_ptr_eq(g2, g))
+ goto err2;
+
+ /* test the simple getters for p, q, and g */
+ if (!TEST_ptr_eq(DH_get0_p(dh), p2)
+ || !TEST_ptr_eq(DH_get0_q(dh), q2)
+ || !TEST_ptr_eq(DH_get0_g(dh), g2))
+ goto err2;
+
+ /* set the private key only*/
+ if (!TEST_true(BN_set_word(priv_key, 1234L))
+ || !TEST_true(DH_set0_key(dh, NULL, priv_key)))
+ goto err2;
+
+ /* test the combined getter for pub_key and priv_key */
+ DH_get0_key(dh, &pub_key2, &priv_key2);
+ if (!TEST_ptr_eq(pub_key2, NULL)
+ || !TEST_ptr_eq(priv_key2, priv_key))
+ goto err3;
+
+ /* test the simple getters for pub_key and priv_key */
+ if (!TEST_ptr_eq(DH_get0_pub_key(dh), pub_key2)
+ || !TEST_ptr_eq(DH_get0_priv_key(dh), priv_key2))
+ goto err3;
+
+ /* now generate a key pair (expect failure since modulus is too small) */
+ if (!TEST_false(DH_generate_key(dh)))
+ goto err3;
+
+ /* We'll have a stale error on the queue from the above test so clear it */
+ ERR_clear_error();
+
+ if (!TEST_ptr(BN_copy(q, p)) || !TEST_true(BN_add(q, q, BN_value_one())))
+ goto err3;
+
+ if (!TEST_true(DH_check(dh, &i)))
+ goto err3;
+ if (!TEST_true(i & DH_CHECK_INVALID_Q_VALUE)
+ || !TEST_false(i & DH_CHECK_Q_NOT_PRIME))
+ goto err3;
+
+ /* Modulus of size: dh check max modulus bits + 1 */
+ if (!TEST_true(BN_set_word(p, 1))
+ || !TEST_true(BN_lshift(p, p, OPENSSL_DH_CHECK_MAX_MODULUS_BITS)))
+ goto err3;
+
+ /*
+ * We expect no checks at all for an excessively large modulus
+ */
+ if (!TEST_false(DH_check(dh, &i)))
+ goto err3;
+
+ /* We'll have a stale error on the queue from the above test so clear it */
+ ERR_clear_error();
+
+ /*
+ * II) key generation
+ */
+
+ /* generate a DH group ... */
+ if (!TEST_ptr(_cb = BN_GENCB_new()))
+ goto err3;
+ BN_GENCB_set(_cb, &cb, NULL);
+ if (!TEST_ptr(a = DH_new())
+ || !TEST_true(DH_generate_parameters_ex(a, 512,
+ DH_GENERATOR_5, _cb)))
+ goto err3;
+
+ /* ... and check whether it is valid */
+ if (!TEST_true(DH_check(a, &i)))
+ goto err3;
+ if (!TEST_false(i & DH_CHECK_P_NOT_PRIME)
+ || !TEST_false(i & DH_CHECK_P_NOT_SAFE_PRIME)
+ || !TEST_false(i & DH_UNABLE_TO_CHECK_GENERATOR)
+ || !TEST_false(i & DH_NOT_SUITABLE_GENERATOR)
+ || !TEST_false(i & DH_CHECK_Q_NOT_PRIME)
+ || !TEST_false(i & DH_CHECK_INVALID_Q_VALUE)
+ || !TEST_false(i & DH_CHECK_INVALID_J_VALUE)
+ || !TEST_false(i & DH_MODULUS_TOO_SMALL)
+ || !TEST_false(i & DH_MODULUS_TOO_LARGE)
+ || !TEST_false(i))
+ goto err3;
+
+ DH_get0_pqg(a, &ap, NULL, &ag);
+
+ /* now create another copy of the DH group for the peer */
+ if (!TEST_ptr(b = DH_new()))
+ goto err3;
+
+ if (!TEST_ptr(bp = BN_dup(ap))
+ || !TEST_ptr(bg = BN_dup(ag))
+ || !TEST_true(DH_set0_pqg(b, bp, NULL, bg)))
+ goto err3;
+ bp = bg = NULL;
+
+ /*
+ * III) simulate a key exchange
+ */
+
+ if (!DH_generate_key(a))
+ goto err3;
+ DH_get0_key(a, &apub_key, NULL);
+
+ if (!DH_generate_key(b))
+ goto err3;
+ DH_get0_key(b, &bpub_key, &bpriv_key);
+
+ /* Also test with a private-key-only copy of |b|. */
+ if (!TEST_ptr(c = DHparams_dup(b))
+ || !TEST_ptr(cpriv_key = BN_dup(bpriv_key))
+ || !TEST_true(DH_set0_key(c, NULL, cpriv_key)))
+ goto err3;
+ cpriv_key = NULL;
+
+ alen = DH_size(a);
+ if (!TEST_ptr(abuf = OPENSSL_malloc(alen))
+ || !TEST_true((aout = DH_compute_key(abuf, bpub_key, a)) != -1))
+ goto err3;
+
+ blen = DH_size(b);
+ if (!TEST_ptr(bbuf = OPENSSL_malloc(blen))
+ || !TEST_true((bout = DH_compute_key(bbuf, apub_key, b)) != -1))
+ goto err3;
+
+ clen = DH_size(c);
+ if (!TEST_ptr(cbuf = OPENSSL_malloc(clen))
+ || !TEST_true((cout = DH_compute_key(cbuf, apub_key, c)) != -1))
+ goto err3;
+
+ if (!TEST_true(aout >= 20)
+ || !TEST_mem_eq(abuf, aout, bbuf, bout)
+ || !TEST_mem_eq(abuf, aout, cbuf, cout))
+ goto err3;
+
+ ret = 1;
+ goto success;
+
+ err1:
+ /* an error occurred before p,q,g were assigned to dh */
+ BN_free(p);
+ BN_free(q);
+ BN_free(g);
+ err2:
+ /* an error occurred before priv_key was assigned to dh */
+ BN_free(priv_key);
+ err3:
+ success:
+ OPENSSL_free(abuf);
+ OPENSSL_free(bbuf);
+ OPENSSL_free(cbuf);
+ DH_free(b);
+ DH_free(a);
+ DH_free(c);
+ BN_free(bp);
+ BN_free(bg);
+ BN_free(cpriv_key);
+ BN_GENCB_free(_cb);
+ DH_free(dh);
+
+ return ret;
+}
+
+static int cb(int p, int n, BN_GENCB *arg)
+{
+ return 1;
+}
+
+static int dh_computekey_range_test(void)
+{
+ int ret = 0, sz;
+ DH *dh = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL, *pub = NULL, *priv = NULL;
+ unsigned char *buf = NULL;
+
+ if (!TEST_ptr(p = BN_dup(&ossl_bignum_ffdhe2048_p))
+ || !TEST_ptr(q = BN_dup(&ossl_bignum_ffdhe2048_q))
+ || !TEST_ptr(g = BN_dup(&ossl_bignum_const_2))
+ || !TEST_ptr(dh = DH_new())
+ || !TEST_true(DH_set0_pqg(dh, p, q, g)))
+ goto err;
+ p = q = g = NULL;
+
+ if (!TEST_int_gt(sz = DH_size(dh), 0)
+ || !TEST_ptr(buf = OPENSSL_malloc(sz))
+ || !TEST_ptr(pub = BN_new())
+ || !TEST_ptr(priv = BN_new()))
+ goto err;
+
+ if (!TEST_true(BN_set_word(priv, 1))
+ || !TEST_true(DH_set0_key(dh, NULL, priv)))
+ goto err;
+ priv = NULL;
+ if (!TEST_true(BN_set_word(pub, 1)))
+ goto err;
+
+ /* Given z = pub ^ priv mod p */
+
+ /* Test that z == 1 fails */
+ if (!TEST_int_le(ossl_dh_compute_key(buf, pub, dh), 0))
+ goto err;
+ /* Test that z == 0 fails */
+ if (!TEST_ptr(BN_copy(pub, DH_get0_p(dh)))
+ || !TEST_int_le(ossl_dh_compute_key(buf, pub, dh), 0))
+ goto err;
+ /* Test that z == p - 1 fails */
+ if (!TEST_true(BN_sub_word(pub, 1))
+ || !TEST_int_le(ossl_dh_compute_key(buf, pub, dh), 0))
+ goto err;
+ /* Test that z == p - 2 passes */
+ if (!TEST_true(BN_sub_word(pub, 1))
+ || !TEST_int_eq(ossl_dh_compute_key(buf, pub, dh), sz))
+ goto err;
+
+ ret = 1;
+err:
+ OPENSSL_free(buf);
+ BN_free(priv);
+ BN_free(pub);
+ BN_free(g);
+ BN_free(q);
+ BN_free(p);
+ DH_free(dh);
+ return ret;
+}
+
+/* Test data from RFC 5114 */
+
+static const unsigned char dhtest_1024_160_xA[] = {
+ 0xB9, 0xA3, 0xB3, 0xAE, 0x8F, 0xEF, 0xC1, 0xA2, 0x93, 0x04, 0x96, 0x50,
+ 0x70, 0x86, 0xF8, 0x45, 0x5D, 0x48, 0x94, 0x3E
+};
+
+static const unsigned char dhtest_1024_160_yA[] = {
+ 0x2A, 0x85, 0x3B, 0x3D, 0x92, 0x19, 0x75, 0x01, 0xB9, 0x01, 0x5B, 0x2D,
+ 0xEB, 0x3E, 0xD8, 0x4F, 0x5E, 0x02, 0x1D, 0xCC, 0x3E, 0x52, 0xF1, 0x09,
+ 0xD3, 0x27, 0x3D, 0x2B, 0x75, 0x21, 0x28, 0x1C, 0xBA, 0xBE, 0x0E, 0x76,
+ 0xFF, 0x57, 0x27, 0xFA, 0x8A, 0xCC, 0xE2, 0x69, 0x56, 0xBA, 0x9A, 0x1F,
+ 0xCA, 0x26, 0xF2, 0x02, 0x28, 0xD8, 0x69, 0x3F, 0xEB, 0x10, 0x84, 0x1D,
+ 0x84, 0xA7, 0x36, 0x00, 0x54, 0xEC, 0xE5, 0xA7, 0xF5, 0xB7, 0xA6, 0x1A,
+ 0xD3, 0xDF, 0xB3, 0xC6, 0x0D, 0x2E, 0x43, 0x10, 0x6D, 0x87, 0x27, 0xDA,
+ 0x37, 0xDF, 0x9C, 0xCE, 0x95, 0xB4, 0x78, 0x75, 0x5D, 0x06, 0xBC, 0xEA,
+ 0x8F, 0x9D, 0x45, 0x96, 0x5F, 0x75, 0xA5, 0xF3, 0xD1, 0xDF, 0x37, 0x01,
+ 0x16, 0x5F, 0xC9, 0xE5, 0x0C, 0x42, 0x79, 0xCE, 0xB0, 0x7F, 0x98, 0x95,
+ 0x40, 0xAE, 0x96, 0xD5, 0xD8, 0x8E, 0xD7, 0x76
+};
+
+static const unsigned char dhtest_1024_160_xB[] = {
+ 0x93, 0x92, 0xC9, 0xF9, 0xEB, 0x6A, 0x7A, 0x6A, 0x90, 0x22, 0xF7, 0xD8,
+ 0x3E, 0x72, 0x23, 0xC6, 0x83, 0x5B, 0xBD, 0xDA
+};
+
+static const unsigned char dhtest_1024_160_yB[] = {
+ 0x71, 0x7A, 0x6C, 0xB0, 0x53, 0x37, 0x1F, 0xF4, 0xA3, 0xB9, 0x32, 0x94,
+ 0x1C, 0x1E, 0x56, 0x63, 0xF8, 0x61, 0xA1, 0xD6, 0xAD, 0x34, 0xAE, 0x66,
+ 0x57, 0x6D, 0xFB, 0x98, 0xF6, 0xC6, 0xCB, 0xF9, 0xDD, 0xD5, 0xA5, 0x6C,
+ 0x78, 0x33, 0xF6, 0xBC, 0xFD, 0xFF, 0x09, 0x55, 0x82, 0xAD, 0x86, 0x8E,
+ 0x44, 0x0E, 0x8D, 0x09, 0xFD, 0x76, 0x9E, 0x3C, 0xEC, 0xCD, 0xC3, 0xD3,
+ 0xB1, 0xE4, 0xCF, 0xA0, 0x57, 0x77, 0x6C, 0xAA, 0xF9, 0x73, 0x9B, 0x6A,
+ 0x9F, 0xEE, 0x8E, 0x74, 0x11, 0xF8, 0xD6, 0xDA, 0xC0, 0x9D, 0x6A, 0x4E,
+ 0xDB, 0x46, 0xCC, 0x2B, 0x5D, 0x52, 0x03, 0x09, 0x0E, 0xAE, 0x61, 0x26,
+ 0x31, 0x1E, 0x53, 0xFD, 0x2C, 0x14, 0xB5, 0x74, 0xE6, 0xA3, 0x10, 0x9A,
+ 0x3D, 0xA1, 0xBE, 0x41, 0xBD, 0xCE, 0xAA, 0x18, 0x6F, 0x5C, 0xE0, 0x67,
+ 0x16, 0xA2, 0xB6, 0xA0, 0x7B, 0x3C, 0x33, 0xFE
+};
+
+static const unsigned char dhtest_1024_160_Z[] = {
+ 0x5C, 0x80, 0x4F, 0x45, 0x4D, 0x30, 0xD9, 0xC4, 0xDF, 0x85, 0x27, 0x1F,
+ 0x93, 0x52, 0x8C, 0x91, 0xDF, 0x6B, 0x48, 0xAB, 0x5F, 0x80, 0xB3, 0xB5,
+ 0x9C, 0xAA, 0xC1, 0xB2, 0x8F, 0x8A, 0xCB, 0xA9, 0xCD, 0x3E, 0x39, 0xF3,
+ 0xCB, 0x61, 0x45, 0x25, 0xD9, 0x52, 0x1D, 0x2E, 0x64, 0x4C, 0x53, 0xB8,
+ 0x07, 0xB8, 0x10, 0xF3, 0x40, 0x06, 0x2F, 0x25, 0x7D, 0x7D, 0x6F, 0xBF,
+ 0xE8, 0xD5, 0xE8, 0xF0, 0x72, 0xE9, 0xB6, 0xE9, 0xAF, 0xDA, 0x94, 0x13,
+ 0xEA, 0xFB, 0x2E, 0x8B, 0x06, 0x99, 0xB1, 0xFB, 0x5A, 0x0C, 0xAC, 0xED,
+ 0xDE, 0xAE, 0xAD, 0x7E, 0x9C, 0xFB, 0xB3, 0x6A, 0xE2, 0xB4, 0x20, 0x83,
+ 0x5B, 0xD8, 0x3A, 0x19, 0xFB, 0x0B, 0x5E, 0x96, 0xBF, 0x8F, 0xA4, 0xD0,
+ 0x9E, 0x34, 0x55, 0x25, 0x16, 0x7E, 0xCD, 0x91, 0x55, 0x41, 0x6F, 0x46,
+ 0xF4, 0x08, 0xED, 0x31, 0xB6, 0x3C, 0x6E, 0x6D
+};
+
+static const unsigned char dhtest_2048_224_xA[] = {
+ 0x22, 0xE6, 0x26, 0x01, 0xDB, 0xFF, 0xD0, 0x67, 0x08, 0xA6, 0x80, 0xF7,
+ 0x47, 0xF3, 0x61, 0xF7, 0x6D, 0x8F, 0x4F, 0x72, 0x1A, 0x05, 0x48, 0xE4,
+ 0x83, 0x29, 0x4B, 0x0C
+};
+
+static const unsigned char dhtest_2048_224_yA[] = {
+ 0x1B, 0x3A, 0x63, 0x45, 0x1B, 0xD8, 0x86, 0xE6, 0x99, 0xE6, 0x7B, 0x49,
+ 0x4E, 0x28, 0x8B, 0xD7, 0xF8, 0xE0, 0xD3, 0x70, 0xBA, 0xDD, 0xA7, 0xA0,
+ 0xEF, 0xD2, 0xFD, 0xE7, 0xD8, 0xF6, 0x61, 0x45, 0xCC, 0x9F, 0x28, 0x04,
+ 0x19, 0x97, 0x5E, 0xB8, 0x08, 0x87, 0x7C, 0x8A, 0x4C, 0x0C, 0x8E, 0x0B,
+ 0xD4, 0x8D, 0x4A, 0x54, 0x01, 0xEB, 0x1E, 0x87, 0x76, 0xBF, 0xEE, 0xE1,
+ 0x34, 0xC0, 0x38, 0x31, 0xAC, 0x27, 0x3C, 0xD9, 0xD6, 0x35, 0xAB, 0x0C,
+ 0xE0, 0x06, 0xA4, 0x2A, 0x88, 0x7E, 0x3F, 0x52, 0xFB, 0x87, 0x66, 0xB6,
+ 0x50, 0xF3, 0x80, 0x78, 0xBC, 0x8E, 0xE8, 0x58, 0x0C, 0xEF, 0xE2, 0x43,
+ 0x96, 0x8C, 0xFC, 0x4F, 0x8D, 0xC3, 0xDB, 0x08, 0x45, 0x54, 0x17, 0x1D,
+ 0x41, 0xBF, 0x2E, 0x86, 0x1B, 0x7B, 0xB4, 0xD6, 0x9D, 0xD0, 0xE0, 0x1E,
+ 0xA3, 0x87, 0xCB, 0xAA, 0x5C, 0xA6, 0x72, 0xAF, 0xCB, 0xE8, 0xBD, 0xB9,
+ 0xD6, 0x2D, 0x4C, 0xE1, 0x5F, 0x17, 0xDD, 0x36, 0xF9, 0x1E, 0xD1, 0xEE,
+ 0xDD, 0x65, 0xCA, 0x4A, 0x06, 0x45, 0x5C, 0xB9, 0x4C, 0xD4, 0x0A, 0x52,
+ 0xEC, 0x36, 0x0E, 0x84, 0xB3, 0xC9, 0x26, 0xE2, 0x2C, 0x43, 0x80, 0xA3,
+ 0xBF, 0x30, 0x9D, 0x56, 0x84, 0x97, 0x68, 0xB7, 0xF5, 0x2C, 0xFD, 0xF6,
+ 0x55, 0xFD, 0x05, 0x3A, 0x7E, 0xF7, 0x06, 0x97, 0x9E, 0x7E, 0x58, 0x06,
+ 0xB1, 0x7D, 0xFA, 0xE5, 0x3A, 0xD2, 0xA5, 0xBC, 0x56, 0x8E, 0xBB, 0x52,
+ 0x9A, 0x7A, 0x61, 0xD6, 0x8D, 0x25, 0x6F, 0x8F, 0xC9, 0x7C, 0x07, 0x4A,
+ 0x86, 0x1D, 0x82, 0x7E, 0x2E, 0xBC, 0x8C, 0x61, 0x34, 0x55, 0x31, 0x15,
+ 0xB7, 0x0E, 0x71, 0x03, 0x92, 0x0A, 0xA1, 0x6D, 0x85, 0xE5, 0x2B, 0xCB,
+ 0xAB, 0x8D, 0x78, 0x6A, 0x68, 0x17, 0x8F, 0xA8, 0xFF, 0x7C, 0x2F, 0x5C,
+ 0x71, 0x64, 0x8D, 0x6F
+};
+
+static const unsigned char dhtest_2048_224_xB[] = {
+ 0x4F, 0xF3, 0xBC, 0x96, 0xC7, 0xFC, 0x6A, 0x6D, 0x71, 0xD3, 0xB3, 0x63,
+ 0x80, 0x0A, 0x7C, 0xDF, 0xEF, 0x6F, 0xC4, 0x1B, 0x44, 0x17, 0xEA, 0x15,
+ 0x35, 0x3B, 0x75, 0x90
+};
+
+static const unsigned char dhtest_2048_224_yB[] = {
+ 0x4D, 0xCE, 0xE9, 0x92, 0xA9, 0x76, 0x2A, 0x13, 0xF2, 0xF8, 0x38, 0x44,
+ 0xAD, 0x3D, 0x77, 0xEE, 0x0E, 0x31, 0xC9, 0x71, 0x8B, 0x3D, 0xB6, 0xC2,
+ 0x03, 0x5D, 0x39, 0x61, 0x18, 0x2C, 0x3E, 0x0B, 0xA2, 0x47, 0xEC, 0x41,
+ 0x82, 0xD7, 0x60, 0xCD, 0x48, 0xD9, 0x95, 0x99, 0x97, 0x06, 0x22, 0xA1,
+ 0x88, 0x1B, 0xBA, 0x2D, 0xC8, 0x22, 0x93, 0x9C, 0x78, 0xC3, 0x91, 0x2C,
+ 0x66, 0x61, 0xFA, 0x54, 0x38, 0xB2, 0x07, 0x66, 0x22, 0x2B, 0x75, 0xE2,
+ 0x4C, 0x2E, 0x3A, 0xD0, 0xC7, 0x28, 0x72, 0x36, 0x12, 0x95, 0x25, 0xEE,
+ 0x15, 0xB5, 0xDD, 0x79, 0x98, 0xAA, 0x04, 0xC4, 0xA9, 0x69, 0x6C, 0xAC,
+ 0xD7, 0x17, 0x20, 0x83, 0xA9, 0x7A, 0x81, 0x66, 0x4E, 0xAD, 0x2C, 0x47,
+ 0x9E, 0x44, 0x4E, 0x4C, 0x06, 0x54, 0xCC, 0x19, 0xE2, 0x8D, 0x77, 0x03,
+ 0xCE, 0xE8, 0xDA, 0xCD, 0x61, 0x26, 0xF5, 0xD6, 0x65, 0xEC, 0x52, 0xC6,
+ 0x72, 0x55, 0xDB, 0x92, 0x01, 0x4B, 0x03, 0x7E, 0xB6, 0x21, 0xA2, 0xAC,
+ 0x8E, 0x36, 0x5D, 0xE0, 0x71, 0xFF, 0xC1, 0x40, 0x0A, 0xCF, 0x07, 0x7A,
+ 0x12, 0x91, 0x3D, 0xD8, 0xDE, 0x89, 0x47, 0x34, 0x37, 0xAB, 0x7B, 0xA3,
+ 0x46, 0x74, 0x3C, 0x1B, 0x21, 0x5D, 0xD9, 0xC1, 0x21, 0x64, 0xA7, 0xE4,
+ 0x05, 0x31, 0x18, 0xD1, 0x99, 0xBE, 0xC8, 0xEF, 0x6F, 0xC5, 0x61, 0x17,
+ 0x0C, 0x84, 0xC8, 0x7D, 0x10, 0xEE, 0x9A, 0x67, 0x4A, 0x1F, 0xA8, 0xFF,
+ 0xE1, 0x3B, 0xDF, 0xBA, 0x1D, 0x44, 0xDE, 0x48, 0x94, 0x6D, 0x68, 0xDC,
+ 0x0C, 0xDD, 0x77, 0x76, 0x35, 0xA7, 0xAB, 0x5B, 0xFB, 0x1E, 0x4B, 0xB7,
+ 0xB8, 0x56, 0xF9, 0x68, 0x27, 0x73, 0x4C, 0x18, 0x41, 0x38, 0xE9, 0x15,
+ 0xD9, 0xC3, 0x00, 0x2E, 0xBC, 0xE5, 0x31, 0x20, 0x54, 0x6A, 0x7E, 0x20,
+ 0x02, 0x14, 0x2B, 0x6C
+};
+
+static const unsigned char dhtest_2048_224_Z[] = {
+ 0x34, 0xD9, 0xBD, 0xDC, 0x1B, 0x42, 0x17, 0x6C, 0x31, 0x3F, 0xEA, 0x03,
+ 0x4C, 0x21, 0x03, 0x4D, 0x07, 0x4A, 0x63, 0x13, 0xBB, 0x4E, 0xCD, 0xB3,
+ 0x70, 0x3F, 0xFF, 0x42, 0x45, 0x67, 0xA4, 0x6B, 0xDF, 0x75, 0x53, 0x0E,
+ 0xDE, 0x0A, 0x9D, 0xA5, 0x22, 0x9D, 0xE7, 0xD7, 0x67, 0x32, 0x28, 0x6C,
+ 0xBC, 0x0F, 0x91, 0xDA, 0x4C, 0x3C, 0x85, 0x2F, 0xC0, 0x99, 0xC6, 0x79,
+ 0x53, 0x1D, 0x94, 0xC7, 0x8A, 0xB0, 0x3D, 0x9D, 0xEC, 0xB0, 0xA4, 0xE4,
+ 0xCA, 0x8B, 0x2B, 0xB4, 0x59, 0x1C, 0x40, 0x21, 0xCF, 0x8C, 0xE3, 0xA2,
+ 0x0A, 0x54, 0x1D, 0x33, 0x99, 0x40, 0x17, 0xD0, 0x20, 0x0A, 0xE2, 0xC9,
+ 0x51, 0x6E, 0x2F, 0xF5, 0x14, 0x57, 0x79, 0x26, 0x9E, 0x86, 0x2B, 0x0F,
+ 0xB4, 0x74, 0xA2, 0xD5, 0x6D, 0xC3, 0x1E, 0xD5, 0x69, 0xA7, 0x70, 0x0B,
+ 0x4C, 0x4A, 0xB1, 0x6B, 0x22, 0xA4, 0x55, 0x13, 0x53, 0x1E, 0xF5, 0x23,
+ 0xD7, 0x12, 0x12, 0x07, 0x7B, 0x5A, 0x16, 0x9B, 0xDE, 0xFF, 0xAD, 0x7A,
+ 0xD9, 0x60, 0x82, 0x84, 0xC7, 0x79, 0x5B, 0x6D, 0x5A, 0x51, 0x83, 0xB8,
+ 0x70, 0x66, 0xDE, 0x17, 0xD8, 0xD6, 0x71, 0xC9, 0xEB, 0xD8, 0xEC, 0x89,
+ 0x54, 0x4D, 0x45, 0xEC, 0x06, 0x15, 0x93, 0xD4, 0x42, 0xC6, 0x2A, 0xB9,
+ 0xCE, 0x3B, 0x1C, 0xB9, 0x94, 0x3A, 0x1D, 0x23, 0xA5, 0xEA, 0x3B, 0xCF,
+ 0x21, 0xA0, 0x14, 0x71, 0xE6, 0x7E, 0x00, 0x3E, 0x7F, 0x8A, 0x69, 0xC7,
+ 0x28, 0xBE, 0x49, 0x0B, 0x2F, 0xC8, 0x8C, 0xFE, 0xB9, 0x2D, 0xB6, 0xA2,
+ 0x15, 0xE5, 0xD0, 0x3C, 0x17, 0xC4, 0x64, 0xC9, 0xAC, 0x1A, 0x46, 0xE2,
+ 0x03, 0xE1, 0x3F, 0x95, 0x29, 0x95, 0xFB, 0x03, 0xC6, 0x9D, 0x3C, 0xC4,
+ 0x7F, 0xCB, 0x51, 0x0B, 0x69, 0x98, 0xFF, 0xD3, 0xAA, 0x6D, 0xE7, 0x3C,
+ 0xF9, 0xF6, 0x38, 0x69
+};
+
+static const unsigned char dhtest_2048_256_xA[] = {
+ 0x08, 0x81, 0x38, 0x2C, 0xDB, 0x87, 0x66, 0x0C, 0x6D, 0xC1, 0x3E, 0x61,
+ 0x49, 0x38, 0xD5, 0xB9, 0xC8, 0xB2, 0xF2, 0x48, 0x58, 0x1C, 0xC5, 0xE3,
+ 0x1B, 0x35, 0x45, 0x43, 0x97, 0xFC, 0xE5, 0x0E
+};
+
+static const unsigned char dhtest_2048_256_yA[] = {
+ 0x2E, 0x93, 0x80, 0xC8, 0x32, 0x3A, 0xF9, 0x75, 0x45, 0xBC, 0x49, 0x41,
+ 0xDE, 0xB0, 0xEC, 0x37, 0x42, 0xC6, 0x2F, 0xE0, 0xEC, 0xE8, 0x24, 0xA6,
+ 0xAB, 0xDB, 0xE6, 0x6C, 0x59, 0xBE, 0xE0, 0x24, 0x29, 0x11, 0xBF, 0xB9,
+ 0x67, 0x23, 0x5C, 0xEB, 0xA3, 0x5A, 0xE1, 0x3E, 0x4E, 0xC7, 0x52, 0xBE,
+ 0x63, 0x0B, 0x92, 0xDC, 0x4B, 0xDE, 0x28, 0x47, 0xA9, 0xC6, 0x2C, 0xB8,
+ 0x15, 0x27, 0x45, 0x42, 0x1F, 0xB7, 0xEB, 0x60, 0xA6, 0x3C, 0x0F, 0xE9,
+ 0x15, 0x9F, 0xCC, 0xE7, 0x26, 0xCE, 0x7C, 0xD8, 0x52, 0x3D, 0x74, 0x50,
+ 0x66, 0x7E, 0xF8, 0x40, 0xE4, 0x91, 0x91, 0x21, 0xEB, 0x5F, 0x01, 0xC8,
+ 0xC9, 0xB0, 0xD3, 0xD6, 0x48, 0xA9, 0x3B, 0xFB, 0x75, 0x68, 0x9E, 0x82,
+ 0x44, 0xAC, 0x13, 0x4A, 0xF5, 0x44, 0x71, 0x1C, 0xE7, 0x9A, 0x02, 0xDC,
+ 0xC3, 0x42, 0x26, 0x68, 0x47, 0x80, 0xDD, 0xDC, 0xB4, 0x98, 0x59, 0x41,
+ 0x06, 0xC3, 0x7F, 0x5B, 0xC7, 0x98, 0x56, 0x48, 0x7A, 0xF5, 0xAB, 0x02,
+ 0x2A, 0x2E, 0x5E, 0x42, 0xF0, 0x98, 0x97, 0xC1, 0xA8, 0x5A, 0x11, 0xEA,
+ 0x02, 0x12, 0xAF, 0x04, 0xD9, 0xB4, 0xCE, 0xBC, 0x93, 0x7C, 0x3C, 0x1A,
+ 0x3E, 0x15, 0xA8, 0xA0, 0x34, 0x2E, 0x33, 0x76, 0x15, 0xC8, 0x4E, 0x7F,
+ 0xE3, 0xB8, 0xB9, 0xB8, 0x7F, 0xB1, 0xE7, 0x3A, 0x15, 0xAF, 0x12, 0xA3,
+ 0x0D, 0x74, 0x6E, 0x06, 0xDF, 0xC3, 0x4F, 0x29, 0x0D, 0x79, 0x7C, 0xE5,
+ 0x1A, 0xA1, 0x3A, 0xA7, 0x85, 0xBF, 0x66, 0x58, 0xAF, 0xF5, 0xE4, 0xB0,
+ 0x93, 0x00, 0x3C, 0xBE, 0xAF, 0x66, 0x5B, 0x3C, 0x2E, 0x11, 0x3A, 0x3A,
+ 0x4E, 0x90, 0x52, 0x69, 0x34, 0x1D, 0xC0, 0x71, 0x14, 0x26, 0x68, 0x5F,
+ 0x4E, 0xF3, 0x7E, 0x86, 0x8A, 0x81, 0x26, 0xFF, 0x3F, 0x22, 0x79, 0xB5,
+ 0x7C, 0xA6, 0x7E, 0x29
+};
+
+static const unsigned char dhtest_2048_256_xB[] = {
+ 0x7D, 0x62, 0xA7, 0xE3, 0xEF, 0x36, 0xDE, 0x61, 0x7B, 0x13, 0xD1, 0xAF,
+ 0xB8, 0x2C, 0x78, 0x0D, 0x83, 0xA2, 0x3B, 0xD4, 0xEE, 0x67, 0x05, 0x64,
+ 0x51, 0x21, 0xF3, 0x71, 0xF5, 0x46, 0xA5, 0x3D
+};
+
+static const unsigned char dhtest_2048_256_yB[] = {
+ 0x57, 0x5F, 0x03, 0x51, 0xBD, 0x2B, 0x1B, 0x81, 0x74, 0x48, 0xBD, 0xF8,
+ 0x7A, 0x6C, 0x36, 0x2C, 0x1E, 0x28, 0x9D, 0x39, 0x03, 0xA3, 0x0B, 0x98,
+ 0x32, 0xC5, 0x74, 0x1F, 0xA2, 0x50, 0x36, 0x3E, 0x7A, 0xCB, 0xC7, 0xF7,
+ 0x7F, 0x3D, 0xAC, 0xBC, 0x1F, 0x13, 0x1A, 0xDD, 0x8E, 0x03, 0x36, 0x7E,
+ 0xFF, 0x8F, 0xBB, 0xB3, 0xE1, 0xC5, 0x78, 0x44, 0x24, 0x80, 0x9B, 0x25,
+ 0xAF, 0xE4, 0xD2, 0x26, 0x2A, 0x1A, 0x6F, 0xD2, 0xFA, 0xB6, 0x41, 0x05,
+ 0xCA, 0x30, 0xA6, 0x74, 0xE0, 0x7F, 0x78, 0x09, 0x85, 0x20, 0x88, 0x63,
+ 0x2F, 0xC0, 0x49, 0x23, 0x37, 0x91, 0xAD, 0x4E, 0xDD, 0x08, 0x3A, 0x97,
+ 0x8B, 0x88, 0x3E, 0xE6, 0x18, 0xBC, 0x5E, 0x0D, 0xD0, 0x47, 0x41, 0x5F,
+ 0x2D, 0x95, 0xE6, 0x83, 0xCF, 0x14, 0x82, 0x6B, 0x5F, 0xBE, 0x10, 0xD3,
+ 0xCE, 0x41, 0xC6, 0xC1, 0x20, 0xC7, 0x8A, 0xB2, 0x00, 0x08, 0xC6, 0x98,
+ 0xBF, 0x7F, 0x0B, 0xCA, 0xB9, 0xD7, 0xF4, 0x07, 0xBE, 0xD0, 0xF4, 0x3A,
+ 0xFB, 0x29, 0x70, 0xF5, 0x7F, 0x8D, 0x12, 0x04, 0x39, 0x63, 0xE6, 0x6D,
+ 0xDD, 0x32, 0x0D, 0x59, 0x9A, 0xD9, 0x93, 0x6C, 0x8F, 0x44, 0x13, 0x7C,
+ 0x08, 0xB1, 0x80, 0xEC, 0x5E, 0x98, 0x5C, 0xEB, 0xE1, 0x86, 0xF3, 0xD5,
+ 0x49, 0x67, 0x7E, 0x80, 0x60, 0x73, 0x31, 0xEE, 0x17, 0xAF, 0x33, 0x80,
+ 0xA7, 0x25, 0xB0, 0x78, 0x23, 0x17, 0xD7, 0xDD, 0x43, 0xF5, 0x9D, 0x7A,
+ 0xF9, 0x56, 0x8A, 0x9B, 0xB6, 0x3A, 0x84, 0xD3, 0x65, 0xF9, 0x22, 0x44,
+ 0xED, 0x12, 0x09, 0x88, 0x21, 0x93, 0x02, 0xF4, 0x29, 0x24, 0xC7, 0xCA,
+ 0x90, 0xB8, 0x9D, 0x24, 0xF7, 0x1B, 0x0A, 0xB6, 0x97, 0x82, 0x3D, 0x7D,
+ 0xEB, 0x1A, 0xFF, 0x5B, 0x0E, 0x8E, 0x4A, 0x45, 0xD4, 0x9F, 0x7F, 0x53,
+ 0x75, 0x7E, 0x19, 0x13
+};
+
+static const unsigned char dhtest_2048_256_Z[] = {
+ 0x86, 0xC7, 0x0B, 0xF8, 0xD0, 0xBB, 0x81, 0xBB, 0x01, 0x07, 0x8A, 0x17,
+ 0x21, 0x9C, 0xB7, 0xD2, 0x72, 0x03, 0xDB, 0x2A, 0x19, 0xC8, 0x77, 0xF1,
+ 0xD1, 0xF1, 0x9F, 0xD7, 0xD7, 0x7E, 0xF2, 0x25, 0x46, 0xA6, 0x8F, 0x00,
+ 0x5A, 0xD5, 0x2D, 0xC8, 0x45, 0x53, 0xB7, 0x8F, 0xC6, 0x03, 0x30, 0xBE,
+ 0x51, 0xEA, 0x7C, 0x06, 0x72, 0xCA, 0xC1, 0x51, 0x5E, 0x4B, 0x35, 0xC0,
+ 0x47, 0xB9, 0xA5, 0x51, 0xB8, 0x8F, 0x39, 0xDC, 0x26, 0xDA, 0x14, 0xA0,
+ 0x9E, 0xF7, 0x47, 0x74, 0xD4, 0x7C, 0x76, 0x2D, 0xD1, 0x77, 0xF9, 0xED,
+ 0x5B, 0xC2, 0xF1, 0x1E, 0x52, 0xC8, 0x79, 0xBD, 0x95, 0x09, 0x85, 0x04,
+ 0xCD, 0x9E, 0xEC, 0xD8, 0xA8, 0xF9, 0xB3, 0xEF, 0xBD, 0x1F, 0x00, 0x8A,
+ 0xC5, 0x85, 0x30, 0x97, 0xD9, 0xD1, 0x83, 0x7F, 0x2B, 0x18, 0xF7, 0x7C,
+ 0xD7, 0xBE, 0x01, 0xAF, 0x80, 0xA7, 0xC7, 0xB5, 0xEA, 0x3C, 0xA5, 0x4C,
+ 0xC0, 0x2D, 0x0C, 0x11, 0x6F, 0xEE, 0x3F, 0x95, 0xBB, 0x87, 0x39, 0x93,
+ 0x85, 0x87, 0x5D, 0x7E, 0x86, 0x74, 0x7E, 0x67, 0x6E, 0x72, 0x89, 0x38,
+ 0xAC, 0xBF, 0xF7, 0x09, 0x8E, 0x05, 0xBE, 0x4D, 0xCF, 0xB2, 0x40, 0x52,
+ 0xB8, 0x3A, 0xEF, 0xFB, 0x14, 0x78, 0x3F, 0x02, 0x9A, 0xDB, 0xDE, 0x7F,
+ 0x53, 0xFA, 0xE9, 0x20, 0x84, 0x22, 0x40, 0x90, 0xE0, 0x07, 0xCE, 0xE9,
+ 0x4D, 0x4B, 0xF2, 0xBA, 0xCE, 0x9F, 0xFD, 0x4B, 0x57, 0xD2, 0xAF, 0x7C,
+ 0x72, 0x4D, 0x0C, 0xAA, 0x19, 0xBF, 0x05, 0x01, 0xF6, 0xF1, 0x7B, 0x4A,
+ 0xA1, 0x0F, 0x42, 0x5E, 0x3E, 0xA7, 0x60, 0x80, 0xB4, 0xB9, 0xD6, 0xB3,
+ 0xCE, 0xFE, 0xA1, 0x15, 0xB2, 0xCE, 0xB8, 0x78, 0x9B, 0xB8, 0xA3, 0xB0,
+ 0xEA, 0x87, 0xFE, 0xBE, 0x63, 0xB6, 0xC8, 0xF8, 0x46, 0xEC, 0x6D, 0xB0,
+ 0xC2, 0x6C, 0x5D, 0x7C
+};
+
+typedef struct {
+ DH *(*get_param) (void);
+ const unsigned char *xA;
+ size_t xA_len;
+ const unsigned char *yA;
+ size_t yA_len;
+ const unsigned char *xB;
+ size_t xB_len;
+ const unsigned char *yB;
+ size_t yB_len;
+ const unsigned char *Z;
+ size_t Z_len;
+} rfc5114_td;
+
+# define make_rfc5114_td(pre) { \
+ DH_get_##pre, \
+ dhtest_##pre##_xA, sizeof(dhtest_##pre##_xA), \
+ dhtest_##pre##_yA, sizeof(dhtest_##pre##_yA), \
+ dhtest_##pre##_xB, sizeof(dhtest_##pre##_xB), \
+ dhtest_##pre##_yB, sizeof(dhtest_##pre##_yB), \
+ dhtest_##pre##_Z, sizeof(dhtest_##pre##_Z) \
+ }
+
+static const rfc5114_td rfctd[] = {
+ make_rfc5114_td(1024_160),
+ make_rfc5114_td(2048_224),
+ make_rfc5114_td(2048_256)
+};
+
+static int rfc5114_test(void)
+{
+ int i;
+ DH *dhA = NULL;
+ DH *dhB = NULL;
+ unsigned char *Z1 = NULL;
+ unsigned char *Z2 = NULL;
+ int szA, szB;
+ const rfc5114_td *td = NULL;
+ BIGNUM *priv_key = NULL, *pub_key = NULL;
+ const BIGNUM *pub_key_tmp;
+
+ for (i = 0; i < (int)OSSL_NELEM(rfctd); i++) {
+ td = rfctd + i;
+ /* Set up DH structures setting key components */
+ if (!TEST_ptr(dhA = td->get_param())
+ || !TEST_ptr(dhB = td->get_param()))
+ goto bad_err;
+
+ if (!TEST_ptr(priv_key = BN_bin2bn(td->xA, td->xA_len, NULL))
+ || !TEST_ptr(pub_key = BN_bin2bn(td->yA, td->yA_len, NULL))
+ || !TEST_true(DH_set0_key(dhA, pub_key, priv_key)))
+ goto bad_err;
+
+ if (!TEST_ptr(priv_key = BN_bin2bn(td->xB, td->xB_len, NULL))
+ || !TEST_ptr(pub_key = BN_bin2bn(td->yB, td->yB_len, NULL))
+ || !TEST_true( DH_set0_key(dhB, pub_key, priv_key)))
+ goto bad_err;
+ priv_key = pub_key = NULL;
+
+ if (!TEST_int_gt(szA = DH_size(dhA), 0)
+ || !TEST_int_gt(szB = DH_size(dhB), 0)
+ || !TEST_size_t_eq(td->Z_len, (size_t)szA)
+ || !TEST_size_t_eq(td->Z_len, (size_t)szB))
+ goto err;
+
+ if (!TEST_ptr(Z1 = OPENSSL_malloc((size_t)szA))
+ || !TEST_ptr(Z2 = OPENSSL_malloc((size_t)szB)))
+ goto bad_err;
+ /*
+ * Work out shared secrets using both sides and compare with expected
+ * values.
+ */
+ DH_get0_key(dhB, &pub_key_tmp, NULL);
+ if (!TEST_int_ne(DH_compute_key(Z1, pub_key_tmp, dhA), -1))
+ goto bad_err;
+
+ DH_get0_key(dhA, &pub_key_tmp, NULL);
+ if (!TEST_int_ne(DH_compute_key(Z2, pub_key_tmp, dhB), -1))
+ goto bad_err;
+
+ if (!TEST_mem_eq(Z1, td->Z_len, td->Z, td->Z_len)
+ || !TEST_mem_eq(Z2, td->Z_len, td->Z, td->Z_len))
+ goto err;
+
+ DH_free(dhA);
+ dhA = NULL;
+ DH_free(dhB);
+ dhB = NULL;
+ OPENSSL_free(Z1);
+ Z1 = NULL;
+ OPENSSL_free(Z2);
+ Z2 = NULL;
+ }
+ return 1;
+
+ bad_err:
+ DH_free(dhA);
+ DH_free(dhB);
+ BN_free(pub_key);
+ BN_free(priv_key);
+ OPENSSL_free(Z1);
+ OPENSSL_free(Z2);
+ TEST_error("Initialisation error RFC5114 set %d\n", i + 1);
+ return 0;
+
+ err:
+ DH_free(dhA);
+ DH_free(dhB);
+ OPENSSL_free(Z1);
+ OPENSSL_free(Z2);
+ TEST_error("Test failed RFC5114 set %d\n", i + 1);
+ return 0;
+}
+
+static int rfc7919_test(void)
+{
+ DH *a = NULL, *b = NULL;
+ const BIGNUM *apub_key = NULL, *bpub_key = NULL;
+ unsigned char *abuf = NULL;
+ unsigned char *bbuf = NULL;
+ int i, alen, blen, aout, bout;
+ int ret = 0;
+
+ if (!TEST_ptr(a = DH_new_by_nid(NID_ffdhe2048)))
+ goto err;
+
+ if (!DH_check(a, &i))
+ goto err;
+ if (!TEST_false(i & DH_CHECK_P_NOT_PRIME)
+ || !TEST_false(i & DH_CHECK_P_NOT_SAFE_PRIME)
+ || !TEST_false(i & DH_UNABLE_TO_CHECK_GENERATOR)
+ || !TEST_false(i & DH_NOT_SUITABLE_GENERATOR)
+ || !TEST_false(i))
+ goto err;
+
+ if (!DH_generate_key(a))
+ goto err;
+ DH_get0_key(a, &apub_key, NULL);
+
+ /* now create another copy of the DH group for the peer */
+ if (!TEST_ptr(b = DH_new_by_nid(NID_ffdhe2048)))
+ goto err;
+
+ if (!DH_generate_key(b))
+ goto err;
+ DH_get0_key(b, &bpub_key, NULL);
+
+ alen = DH_size(a);
+ if (!TEST_int_gt(alen, 0) || !TEST_ptr(abuf = OPENSSL_malloc(alen))
+ || !TEST_true((aout = DH_compute_key(abuf, bpub_key, a)) != -1))
+ goto err;
+
+ blen = DH_size(b);
+ if (!TEST_int_gt(blen, 0) || !TEST_ptr(bbuf = OPENSSL_malloc(blen))
+ || !TEST_true((bout = DH_compute_key(bbuf, apub_key, b)) != -1))
+ goto err;
+
+ if (!TEST_true(aout >= 20)
+ || !TEST_mem_eq(abuf, aout, bbuf, bout))
+ goto err;
+
+ ret = 1;
+
+ err:
+ OPENSSL_free(abuf);
+ OPENSSL_free(bbuf);
+ DH_free(a);
+ DH_free(b);
+ return ret;
+}
+
+static int prime_groups[] = {
+ NID_ffdhe2048,
+ NID_ffdhe3072,
+ NID_ffdhe4096,
+ NID_ffdhe6144,
+ NID_ffdhe8192,
+ NID_modp_2048,
+ NID_modp_3072,
+ NID_modp_4096,
+ NID_modp_6144,
+};
+
+static int dh_test_prime_groups(int index)
+{
+ int ok = 0;
+ DH *dh = NULL;
+ const BIGNUM *p, *q, *g;
+
+ if (!TEST_ptr(dh = DH_new_by_nid(prime_groups[index])))
+ goto err;
+ DH_get0_pqg(dh, &p, &q, &g);
+ if (!TEST_ptr(p) || !TEST_ptr(q) || !TEST_ptr(g))
+ goto err;
+
+ if (!TEST_int_eq(DH_get_nid(dh), prime_groups[index]))
+ goto err;
+
+ /* Since q is set there is no need for the private length to be set */
+ if (!TEST_int_eq((int)DH_get_length(dh), 0))
+ goto err;
+
+ ok = 1;
+err:
+ DH_free(dh);
+ return ok;
+}
+
+static int dh_rfc5114_fix_nid_test(void)
+{
+ int ok = 0;
+ EVP_PKEY_CTX *paramgen_ctx;
+
+ /* Run the test. Success is any time the test does not cause a SIGSEGV interrupt */
+ paramgen_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DHX, 0);
+ if (!TEST_ptr(paramgen_ctx))
+ goto err;
+ if (!TEST_int_eq(EVP_PKEY_paramgen_init(paramgen_ctx), 1))
+ goto err;
+ /* Tested function is called here */
+ if (!TEST_int_eq(EVP_PKEY_CTX_set_dhx_rfc5114(paramgen_ctx, 3), 1))
+ goto err;
+ /* Negative test */
+ if (!TEST_int_eq(EVP_PKEY_CTX_set_dhx_rfc5114(paramgen_ctx, 99), 0))
+ goto err;
+ /* If we're still running then the test passed. */
+ ok = 1;
+err:
+ EVP_PKEY_CTX_free(paramgen_ctx);
+ return ok;
+}
+
+static int dh_set_dh_nid_test(void)
+{
+ int ok = 0;
+ EVP_PKEY_CTX *paramgen_ctx;
+
+ /* Run the test. Success is any time the test does not cause a SIGSEGV interrupt */
+ paramgen_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DH, 0);
+ if (!TEST_ptr(paramgen_ctx))
+ goto err;
+ if (!TEST_int_eq(EVP_PKEY_paramgen_init(paramgen_ctx), 1))
+ goto err;
+ /* Tested function is called here */
+ if (!TEST_int_eq(EVP_PKEY_CTX_set_dh_nid(paramgen_ctx, NID_ffdhe2048), 1))
+ goto err;
+ /* Negative test */
+ if (!TEST_int_eq(EVP_PKEY_CTX_set_dh_nid(paramgen_ctx, NID_secp521r1), 0))
+ goto err;
+ /* If we're still running then the test passed. */
+ ok = 1;
+err:
+ EVP_PKEY_CTX_free(paramgen_ctx);
+ return ok;
+}
+
+static int dh_get_nid(void)
+{
+ int ok = 0;
+ const BIGNUM *p, *q, *g;
+ BIGNUM *pcpy = NULL, *gcpy = NULL, *qcpy = NULL;
+ DH *dh1 = DH_new_by_nid(NID_ffdhe2048);
+ DH *dh2 = DH_new();
+
+ if (!TEST_ptr(dh1)
+ || !TEST_ptr(dh2))
+ goto err;
+
+ /* Set new DH parameters manually using a existing named group's p & g */
+ DH_get0_pqg(dh1, &p, &q, &g);
+ if (!TEST_ptr(p)
+ || !TEST_ptr(q)
+ || !TEST_ptr(g)
+ || !TEST_ptr(pcpy = BN_dup(p))
+ || !TEST_ptr(gcpy = BN_dup(g)))
+ goto err;
+
+ if (!TEST_true(DH_set0_pqg(dh2, pcpy, NULL, gcpy)))
+ goto err;
+ pcpy = gcpy = NULL;
+ /* Test q is set if p and g are provided */
+ if (!TEST_ptr(DH_get0_q(dh2)))
+ goto err;
+
+ /* Test that setting p & g manually returns that it is a named group */
+ if (!TEST_int_eq(DH_get_nid(dh2), NID_ffdhe2048))
+ goto err;
+
+ /* Test that after changing g it is no longer a named group */
+ if (!TEST_ptr(gcpy = BN_dup(BN_value_one())))
+ goto err;
+ if (!TEST_true(DH_set0_pqg(dh2, NULL, NULL, gcpy)))
+ goto err;
+ gcpy = NULL;
+ if (!TEST_int_eq(DH_get_nid(dh2), NID_undef))
+ goto err;
+
+ /* Test that setting an incorrect q results in this not being a named group */
+ if (!TEST_ptr(pcpy = BN_dup(p))
+ || !TEST_ptr(qcpy = BN_dup(q))
+ || !TEST_ptr(gcpy = BN_dup(g))
+ || !TEST_int_eq(BN_add_word(qcpy, 2), 1)
+ || !TEST_true(DH_set0_pqg(dh2, pcpy, qcpy, gcpy)))
+ goto err;
+ pcpy = qcpy = gcpy = NULL;
+ if (!TEST_int_eq(DH_get_nid(dh2), NID_undef))
+ goto err;
+
+ ok = 1;
+err:
+ BN_free(pcpy);
+ BN_free(qcpy);
+ BN_free(gcpy);
+ DH_free(dh2);
+ DH_free(dh1);
+ return ok;
+}
+
+static const unsigned char dh_pub_der[] = {
+ 0x30, 0x82, 0x02, 0x28, 0x30, 0x82, 0x01, 0x1b, 0x06, 0x09, 0x2a, 0x86,
+ 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x03, 0x01, 0x30, 0x82, 0x01, 0x0c, 0x02,
+ 0x82, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xc9, 0x0f, 0xda, 0xa2, 0x21, 0x68, 0xc2, 0x34, 0xc4, 0xc6, 0x62, 0x8b,
+ 0x80, 0xdc, 0x1c, 0xd1, 0x29, 0x02, 0x4e, 0x08, 0x8a, 0x67, 0xcc, 0x74,
+ 0x02, 0x0b, 0xbe, 0xa6, 0x3b, 0x13, 0x9b, 0x22, 0x51, 0x4a, 0x08, 0x79,
+ 0x8e, 0x34, 0x04, 0xdd, 0xef, 0x95, 0x19, 0xb3, 0xcd, 0x3a, 0x43, 0x1b,
+ 0x30, 0x2b, 0x0a, 0x6d, 0xf2, 0x5f, 0x14, 0x37, 0x4f, 0xe1, 0x35, 0x6d,
+ 0x6d, 0x51, 0xc2, 0x45, 0xe4, 0x85, 0xb5, 0x76, 0x62, 0x5e, 0x7e, 0xc6,
+ 0xf4, 0x4c, 0x42, 0xe9, 0xa6, 0x37, 0xed, 0x6b, 0x0b, 0xff, 0x5c, 0xb6,
+ 0xf4, 0x06, 0xb7, 0xed, 0xee, 0x38, 0x6b, 0xfb, 0x5a, 0x89, 0x9f, 0xa5,
+ 0xae, 0x9f, 0x24, 0x11, 0x7c, 0x4b, 0x1f, 0xe6, 0x49, 0x28, 0x66, 0x51,
+ 0xec, 0xe4, 0x5b, 0x3d, 0xc2, 0x00, 0x7c, 0xb8, 0xa1, 0x63, 0xbf, 0x05,
+ 0x98, 0xda, 0x48, 0x36, 0x1c, 0x55, 0xd3, 0x9a, 0x69, 0x16, 0x3f, 0xa8,
+ 0xfd, 0x24, 0xcf, 0x5f, 0x83, 0x65, 0x5d, 0x23, 0xdc, 0xa3, 0xad, 0x96,
+ 0x1c, 0x62, 0xf3, 0x56, 0x20, 0x85, 0x52, 0xbb, 0x9e, 0xd5, 0x29, 0x07,
+ 0x70, 0x96, 0x96, 0x6d, 0x67, 0x0c, 0x35, 0x4e, 0x4a, 0xbc, 0x98, 0x04,
+ 0xf1, 0x74, 0x6c, 0x08, 0xca, 0x18, 0x21, 0x7c, 0x32, 0x90, 0x5e, 0x46,
+ 0x2e, 0x36, 0xce, 0x3b, 0xe3, 0x9e, 0x77, 0x2c, 0x18, 0x0e, 0x86, 0x03,
+ 0x9b, 0x27, 0x83, 0xa2, 0xec, 0x07, 0xa2, 0x8f, 0xb5, 0xc5, 0x5d, 0xf0,
+ 0x6f, 0x4c, 0x52, 0xc9, 0xde, 0x2b, 0xcb, 0xf6, 0x95, 0x58, 0x17, 0x18,
+ 0x39, 0x95, 0x49, 0x7c, 0xea, 0x95, 0x6a, 0xe5, 0x15, 0xd2, 0x26, 0x18,
+ 0x98, 0xfa, 0x05, 0x10, 0x15, 0x72, 0x8e, 0x5a, 0x8a, 0xac, 0xaa, 0x68,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x01, 0x02, 0x02,
+ 0x02, 0x04, 0x00, 0x03, 0x82, 0x01, 0x05, 0x00, 0x02, 0x82, 0x01, 0x00,
+ 0x08, 0x87, 0x8a, 0x5f, 0x4f, 0x3b, 0xef, 0xe1, 0x77, 0x13, 0x3b, 0xd7,
+ 0x58, 0x76, 0xc9, 0xeb, 0x7e, 0x2d, 0xcc, 0x7e, 0xed, 0xc5, 0xee, 0xf9,
+ 0x2d, 0x55, 0xb0, 0xe2, 0x37, 0x8c, 0x51, 0x87, 0x6a, 0x8e, 0x0d, 0xb2,
+ 0x08, 0xed, 0x4f, 0x88, 0x9b, 0x63, 0x19, 0x7a, 0x67, 0xa1, 0x61, 0xd8,
+ 0x17, 0xa0, 0x2c, 0xdb, 0xc2, 0xfa, 0xb3, 0x4f, 0xe7, 0xcb, 0x16, 0xf2,
+ 0xe7, 0xd0, 0x2c, 0xf8, 0xcc, 0x97, 0xd3, 0xe7, 0xae, 0xc2, 0x71, 0xd8,
+ 0x2b, 0x12, 0x83, 0xe9, 0x5a, 0x45, 0xfe, 0x66, 0x5c, 0xa2, 0xb6, 0xce,
+ 0x2f, 0x04, 0x05, 0xe7, 0xa7, 0xbc, 0xe5, 0x63, 0x1a, 0x93, 0x3d, 0x4d,
+ 0xf4, 0x77, 0xdd, 0x2a, 0xc9, 0x51, 0x7b, 0xf5, 0x54, 0xa2, 0xab, 0x26,
+ 0xee, 0x16, 0xd3, 0x83, 0x92, 0x85, 0x40, 0x67, 0xa3, 0xa9, 0x31, 0x16,
+ 0x64, 0x45, 0x5a, 0x2a, 0x9d, 0xa8, 0x1a, 0x84, 0x2f, 0x59, 0x57, 0x6b,
+ 0xbb, 0x51, 0x28, 0xbd, 0x91, 0x60, 0xd9, 0x8f, 0x54, 0x6a, 0xa0, 0x6b,
+ 0xb2, 0xf6, 0x78, 0x79, 0xd2, 0x3a, 0x8f, 0xa6, 0x24, 0x7e, 0xe9, 0x6e,
+ 0x66, 0x30, 0xed, 0xbf, 0x55, 0x71, 0x9c, 0x89, 0x81, 0xf0, 0xa7, 0xe7,
+ 0x05, 0x87, 0x51, 0xc1, 0xff, 0xe5, 0xcf, 0x1f, 0x19, 0xe4, 0xeb, 0x7c,
+ 0x1c, 0x1a, 0x58, 0xd5, 0x22, 0x3d, 0x31, 0x22, 0xc7, 0x8b, 0x60, 0xf5,
+ 0xe8, 0x95, 0x73, 0xe0, 0x20, 0xe2, 0x4f, 0x03, 0x9e, 0x89, 0x34, 0x91,
+ 0x5e, 0xda, 0x4f, 0x60, 0xff, 0xc9, 0x4f, 0x5a, 0x37, 0x1e, 0xb0, 0xed,
+ 0x26, 0x4c, 0xa4, 0xc6, 0x26, 0xc9, 0xcc, 0xab, 0xd2, 0x1a, 0x3a, 0x82,
+ 0x68, 0x03, 0x49, 0x8f, 0xb0, 0xb9, 0xc8, 0x48, 0x9d, 0xc7, 0xdf, 0x8b,
+ 0x1c, 0xbf, 0xda, 0x89, 0x78, 0x6f, 0xd3, 0x62, 0xad, 0x35, 0xb9, 0xd3,
+ 0x9b, 0xd0, 0x25, 0x65
+};
+
+/*
+ * Load PKCS3 DH Parameters that contain an optional private value length.
+ * Loading a named group should not overwrite the private value length field.
+ */
+static int dh_load_pkcs3_namedgroup_privlen_test(void)
+{
+ int ret, privlen = 0;
+ EVP_PKEY *pkey = NULL;
+ const unsigned char *p = dh_pub_der;
+
+ ret = TEST_ptr(pkey = d2i_PUBKEY_ex(NULL, &p, sizeof(dh_pub_der),
+ NULL, NULL))
+ && TEST_true(EVP_PKEY_get_int_param(pkey, OSSL_PKEY_PARAM_DH_PRIV_LEN,
+ &privlen))
+ && TEST_int_eq(privlen, 1024);
+
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+#endif
+
+int setup_tests(void)
+{
+#ifdef OPENSSL_NO_DH
+ TEST_note("No DH support");
+#else
+ ADD_TEST(dh_test);
+ ADD_TEST(dh_computekey_range_test);
+ ADD_TEST(rfc5114_test);
+ ADD_TEST(rfc7919_test);
+ ADD_ALL_TESTS(dh_test_prime_groups, OSSL_NELEM(prime_groups));
+ ADD_TEST(dh_get_nid);
+ ADD_TEST(dh_load_pkcs3_namedgroup_privlen_test);
+ ADD_TEST(dh_rfc5114_fix_nid_test);
+ ADD_TEST(dh_set_dh_nid_test);
+#endif
+ return 1;
+}
diff --git a/test/drbgtest.c b/test/drbgtest.c
new file mode 100644
index 000000000000..b5122b60bdd4
--- /dev/null
+++ b/test/drbgtest.c
@@ -0,0 +1,906 @@
+/*
+ * Copyright 2011-2022 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
+ */
+
+/* We need to use some deprecated APIs */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <string.h>
+#include "internal/nelem.h"
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include <openssl/obj_mac.h>
+#include <openssl/evp.h>
+#include <openssl/aes.h>
+#include "../crypto/rand/rand_local.h"
+#include "../include/crypto/rand.h"
+#include "../include/crypto/evp.h"
+#include "../providers/implementations/rands/drbg_local.h"
+#include "../crypto/evp/evp_local.h"
+
+#if defined(_WIN32)
+# include <windows.h>
+#endif
+
+#if defined(__TANDEM)
+# if defined(OPENSSL_TANDEM_FLOSS)
+# include <floss.h(floss_fork)>
+# endif
+#endif
+
+#if defined(OPENSSL_SYS_UNIX)
+# include <sys/types.h>
+# include <sys/wait.h>
+# include <unistd.h>
+#endif
+
+#include "testutil.h"
+
+/*
+ * DRBG generate wrappers
+ */
+static int gen_bytes(EVP_RAND_CTX *drbg, unsigned char *buf, int num)
+{
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ const RAND_METHOD *meth = RAND_get_rand_method();
+
+ if (meth != NULL && meth != RAND_OpenSSL()) {
+ if (meth->bytes != NULL)
+ return meth->bytes(buf, num);
+ return -1;
+ }
+#endif
+
+ if (drbg != NULL)
+ return EVP_RAND_generate(drbg, buf, num, 0, 0, NULL, 0);
+ return 0;
+}
+
+static int rand_bytes(unsigned char *buf, int num)
+{
+ return gen_bytes(RAND_get0_public(NULL), buf, num);
+}
+
+static int rand_priv_bytes(unsigned char *buf, int num)
+{
+ return gen_bytes(RAND_get0_private(NULL), buf, num);
+}
+
+
+/* size of random output generated in test_drbg_reseed() */
+#define RANDOM_SIZE 16
+
+/*
+ * DRBG query functions
+ */
+static int state(EVP_RAND_CTX *drbg)
+{
+ return EVP_RAND_get_state(drbg);
+}
+
+static unsigned int query_rand_uint(EVP_RAND_CTX *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_CTX_get_params(drbg, params))
+ return n;
+ return 0;
+}
+
+#define DRBG_UINT(name) \
+ static unsigned int name(EVP_RAND_CTX *drbg) \
+ { \
+ return query_rand_uint(drbg, #name); \
+ }
+DRBG_UINT(reseed_counter)
+
+static PROV_DRBG *prov_rand(EVP_RAND_CTX *drbg)
+{
+ return (PROV_DRBG *)drbg->algctx;
+}
+
+static void set_reseed_counter(EVP_RAND_CTX *drbg, unsigned int n)
+{
+ PROV_DRBG *p = prov_rand(drbg);
+
+ p->reseed_counter = n;
+}
+
+static void inc_reseed_counter(EVP_RAND_CTX *drbg)
+{
+ set_reseed_counter(drbg, reseed_counter(drbg) + 1);
+}
+
+static time_t reseed_time(EVP_RAND_CTX *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_CTX_get_params(drbg, params))
+ return t;
+ return 0;
+}
+
+/*
+ * When building the FIPS module, it isn't possible to disable the continuous
+ * RNG tests. Tests that require this are skipped and this means a detection
+ * mechanism for the FIPS provider being in use.
+ */
+static int using_fips_rng(void)
+{
+ EVP_RAND_CTX *primary = RAND_get0_primary(NULL);
+ const OSSL_PROVIDER *prov;
+ const char *name;
+
+ if (!TEST_ptr(primary))
+ return 0;
+
+ prov = EVP_RAND_get0_provider(EVP_RAND_CTX_get0_rand(primary));
+ if (!TEST_ptr(prov))
+ return 0;
+ name = OSSL_PROVIDER_get0_name(prov);
+ return strcmp(name, "OpenSSL FIPS Provider") == 0;
+}
+
+ /*
+ * Disable CRNG testing if it is enabled.
+ * 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(EVP_RAND_CTX *drbg)
+{
+ return 1;
+}
+
+/*
+ * Generates random output using rand_bytes() and rand_priv_bytes()
+ * and checks whether the three shared DRBGs were reseeded as
+ * expected.
+ *
+ * |expect_success|: expected outcome (as reported by RAND_status())
+ * |primary|, |public|, |private|: pointers to the three shared DRBGs
+ * |public_random|, |private_random|: generated random output
+ * |expect_xxx_reseed| =
+ * 1: it is expected that the specified DRBG is reseeded
+ * 0: it is expected that the specified DRBG is not reseeded
+ * -1: don't check whether the specified DRBG was reseeded or not
+ * |reseed_when|: if nonzero, used instead of time(NULL) to set the
+ * |before_reseed| time.
+ */
+static int test_drbg_reseed(int expect_success,
+ EVP_RAND_CTX *primary,
+ EVP_RAND_CTX *public,
+ EVP_RAND_CTX *private,
+ unsigned char *public_random,
+ unsigned char *private_random,
+ int expect_primary_reseed,
+ int expect_public_reseed,
+ int expect_private_reseed,
+ time_t reseed_when
+ )
+{
+ time_t before_reseed, after_reseed;
+ int expected_state = (expect_success ? DRBG_READY : DRBG_ERROR);
+ unsigned int primary_reseed, public_reseed, private_reseed;
+ unsigned char dummy[RANDOM_SIZE];
+
+ if (public_random == NULL)
+ public_random = dummy;
+
+ if (private_random == NULL)
+ private_random = dummy;
+
+ /*
+ * step 1: check preconditions
+ */
+
+ /* Test whether seed propagation is enabled */
+ if (!TEST_int_ne(primary_reseed = reseed_counter(primary), 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_when == 0)
+ reseed_when = time(NULL);
+
+ /* Generate random output from the public and private DRBG */
+ before_reseed = expect_primary_reseed == 1 ? reseed_when : 0;
+ if (!TEST_int_eq(rand_bytes((unsigned char*)public_random,
+ RANDOM_SIZE), expect_success)
+ || !TEST_int_eq(rand_priv_bytes((unsigned char*) private_random,
+ RANDOM_SIZE), expect_success))
+ return 0;
+ after_reseed = time(NULL);
+
+
+ /*
+ * step 3: check postconditions
+ */
+
+ /* Test whether reseeding succeeded as expected */
+ if (!TEST_int_eq(state(primary), expected_state)
+ || !TEST_int_eq(state(public), expected_state)
+ || !TEST_int_eq(state(private), expected_state))
+ return 0;
+
+ if (expect_primary_reseed >= 0) {
+ /* Test whether primary DRBG was reseeded as expected */
+ if (!TEST_int_ge(reseed_counter(primary), primary_reseed))
+ return 0;
+ }
+
+ if (expect_public_reseed >= 0) {
+ /* Test whether public DRBG was reseeded as expected */
+ if (!TEST_int_ge(reseed_counter(public), public_reseed)
+ || !TEST_uint_ge(reseed_counter(public),
+ reseed_counter(primary)))
+ return 0;
+ }
+
+ if (expect_private_reseed >= 0) {
+ /* Test whether public DRBG was reseeded as expected */
+ if (!TEST_int_ge(reseed_counter(private), private_reseed)
+ || !TEST_uint_ge(reseed_counter(private),
+ reseed_counter(primary)))
+ return 0;
+ }
+
+ if (expect_success == 1) {
+ /* Test whether reseed time of primary DRBG is set correctly */
+ if (!TEST_time_t_le(before_reseed, reseed_time(primary))
+ || !TEST_time_t_le(reseed_time(primary), after_reseed))
+ return 0;
+
+ /* Test whether reseed times of child DRBGs are synchronized with primary */
+ if (!TEST_time_t_ge(reseed_time(public), reseed_time(primary))
+ || !TEST_time_t_ge(reseed_time(private), reseed_time(primary)))
+ return 0;
+ } else {
+ ERR_clear_error();
+ }
+
+ return 1;
+}
+
+
+#if defined(OPENSSL_SYS_UNIX) && !defined(OPENSSL_RAND_SEED_EGD)
+/* number of children to fork */
+#define DRBG_FORK_COUNT 9
+/* two results per child, two for the parent */
+#define DRBG_FORK_RESULT_COUNT (2 * (DRBG_FORK_COUNT + 1))
+
+typedef struct drbg_fork_result_st {
+
+ unsigned char random[RANDOM_SIZE]; /* random output */
+
+ int pindex; /* process index (0: parent, 1,2,3...: children)*/
+ pid_t pid; /* process id */
+ int private; /* true if the private drbg was used */
+ char name[10]; /* 'parent' resp. 'child 1', 'child 2', ... */
+} drbg_fork_result;
+
+/*
+ * Sort the drbg_fork_result entries in lexicographical order
+ *
+ * This simplifies finding duplicate random output and makes
+ * the printout in case of an error more readable.
+ */
+static int compare_drbg_fork_result(const void * left, const void * right)
+{
+ int result;
+ const drbg_fork_result *l = left;
+ const drbg_fork_result *r = right;
+
+ /* separate public and private results */
+ result = l->private - r->private;
+
+ if (result == 0)
+ result = memcmp(l->random, r->random, RANDOM_SIZE);
+
+ if (result == 0)
+ result = l->pindex - r->pindex;
+
+ return result;
+}
+
+/*
+ * Sort two-byte chunks of random data
+ *
+ * Used for finding collisions in two-byte chunks
+ */
+static int compare_rand_chunk(const void * left, const void * right)
+{
+ return memcmp(left, right, 2);
+}
+
+/*
+ * Test whether primary, public and private DRBG are reseeded
+ * in the child after forking the process. Collect the random
+ * output of the public and private DRBG and send it back to
+ * the parent process.
+ */
+static int test_drbg_reseed_in_child(EVP_RAND_CTX *primary,
+ EVP_RAND_CTX *public,
+ EVP_RAND_CTX *private,
+ drbg_fork_result result[2])
+{
+ int rv = 0, status;
+ int fd[2];
+ pid_t pid;
+ unsigned char random[2 * RANDOM_SIZE];
+
+ if (!TEST_int_ge(pipe(fd), 0))
+ return 0;
+
+ if (!TEST_int_ge(pid = fork(), 0)) {
+ close(fd[0]);
+ close(fd[1]);
+ return 0;
+ } else if (pid > 0) {
+
+ /* I'm the parent; close the write end */
+ close(fd[1]);
+
+ /* wait for children to terminate and collect their random output */
+ if (TEST_int_eq(waitpid(pid, &status, 0), pid)
+ && TEST_int_eq(status, 0)
+ && TEST_true(read(fd[0], &random[0], sizeof(random))
+ == sizeof(random))) {
+
+ /* random output of public drbg */
+ result[0].pid = pid;
+ result[0].private = 0;
+ memcpy(result[0].random, &random[0], RANDOM_SIZE);
+
+ /* random output of private drbg */
+ result[1].pid = pid;
+ result[1].private = 1;
+ memcpy(result[1].random, &random[RANDOM_SIZE], RANDOM_SIZE);
+
+ rv = 1;
+ }
+
+ /* close the read end */
+ close(fd[0]);
+
+ return rv;
+
+ } else {
+
+ /* I'm the child; close the read end */
+ close(fd[0]);
+
+ /* check whether all three DRBGs reseed and send output to parent */
+ if (TEST_true(test_drbg_reseed(1, primary, public, private,
+ &random[0], &random[RANDOM_SIZE],
+ 1, 1, 1, 0))
+ && TEST_true(write(fd[1], random, sizeof(random))
+ == sizeof(random))) {
+
+ rv = 1;
+ }
+
+ /* close the write end */
+ close(fd[1]);
+
+ /* convert boolean to exit code */
+ exit(rv == 0);
+ }
+}
+
+static int test_rand_reseed_on_fork(EVP_RAND_CTX *primary,
+ EVP_RAND_CTX *public,
+ EVP_RAND_CTX *private)
+{
+ unsigned int i;
+ pid_t pid = getpid();
+ int verbose = (getenv("V") != NULL);
+ int success = 1;
+ int duplicate[2] = {0, 0};
+ unsigned char random[2 * RANDOM_SIZE];
+ unsigned char sample[DRBG_FORK_RESULT_COUNT * RANDOM_SIZE];
+ unsigned char *psample = &sample[0];
+ drbg_fork_result result[DRBG_FORK_RESULT_COUNT];
+ drbg_fork_result *presult = &result[2];
+
+ memset(&result, 0, sizeof(result));
+
+ for (i = 1 ; i <= DRBG_FORK_COUNT ; ++i) {
+
+ presult[0].pindex = presult[1].pindex = i;
+
+ sprintf(presult[0].name, "child %d", i);
+ strcpy(presult[1].name, presult[0].name);
+
+ /* collect the random output of the children */
+ if (!TEST_true(test_drbg_reseed_in_child(primary,
+ public,
+ private,
+ presult)))
+ return 0;
+
+ presult += 2;
+ }
+
+ /* collect the random output of the parent */
+ if (!TEST_true(test_drbg_reseed(1,
+ primary, public, private,
+ &random[0], &random[RANDOM_SIZE],
+ 0, 0, 0, 0)))
+ return 0;
+
+ strcpy(result[0].name, "parent");
+ strcpy(result[1].name, "parent");
+
+ /* output of public drbg */
+ result[0].pid = pid;
+ result[0].private = 0;
+ memcpy(result[0].random, &random[0], RANDOM_SIZE);
+
+ /* output of private drbg */
+ result[1].pid = pid;
+ result[1].private = 1;
+ memcpy(result[1].random, &random[RANDOM_SIZE], RANDOM_SIZE);
+
+ /* collect all sampled random data in a single buffer */
+ for (i = 0 ; i < DRBG_FORK_RESULT_COUNT ; ++i) {
+ memcpy(psample, &result[i].random[0], RANDOM_SIZE);
+ psample += RANDOM_SIZE;
+ }
+
+ /* sort the results... */
+ qsort(result, DRBG_FORK_RESULT_COUNT, sizeof(drbg_fork_result),
+ compare_drbg_fork_result);
+
+ /* ...and count duplicate prefixes by looking at the first byte only */
+ for (i = 1 ; i < DRBG_FORK_RESULT_COUNT ; ++i) {
+ if (result[i].random[0] == result[i-1].random[0]) {
+ /* count public and private duplicates separately */
+ ++duplicate[result[i].private];
+ }
+ }
+
+ if (duplicate[0] >= DRBG_FORK_COUNT - 1) {
+ /* just too many duplicates to be a coincidence */
+ TEST_note("ERROR: %d duplicate prefixes in public random output", duplicate[0]);
+ success = 0;
+ }
+
+ if (duplicate[1] >= DRBG_FORK_COUNT - 1) {
+ /* just too many duplicates to be a coincidence */
+ TEST_note("ERROR: %d duplicate prefixes in private random output", duplicate[1]);
+ success = 0;
+ }
+
+ duplicate[0] = 0;
+
+ /* sort the two-byte chunks... */
+ qsort(sample, sizeof(sample)/2, 2, compare_rand_chunk);
+
+ /* ...and count duplicate chunks */
+ for (i = 2, psample = sample + 2 ; i < sizeof(sample) ; i += 2, psample += 2) {
+ if (compare_rand_chunk(psample - 2, psample) == 0)
+ ++duplicate[0];
+ }
+
+ if (duplicate[0] >= DRBG_FORK_COUNT - 1) {
+ /* just too many duplicates to be a coincidence */
+ TEST_note("ERROR: %d duplicate chunks in random output", duplicate[0]);
+ success = 0;
+ }
+
+ if (verbose || !success) {
+
+ for (i = 0 ; i < DRBG_FORK_RESULT_COUNT ; ++i) {
+ char *rand_hex = OPENSSL_buf2hexstr(result[i].random, RANDOM_SIZE);
+
+ TEST_note(" random: %s, pid: %d (%s, %s)",
+ rand_hex,
+ result[i].pid,
+ result[i].name,
+ result[i].private ? "private" : "public"
+ );
+
+ OPENSSL_free(rand_hex);
+ }
+ }
+
+ return success;
+}
+
+static int test_rand_fork_safety(int i)
+{
+ int success = 1;
+ unsigned char random[1];
+ EVP_RAND_CTX *primary, *public, *private;
+
+ /* All three DRBGs should be non-null */
+ if (!TEST_ptr(primary = RAND_get0_primary(NULL))
+ || !TEST_ptr(public = RAND_get0_public(NULL))
+ || !TEST_ptr(private = RAND_get0_private(NULL)))
+ return 0;
+
+ /* run the actual test */
+ if (!TEST_true(test_rand_reseed_on_fork(primary, public, private)))
+ success = 0;
+
+ /* request a single byte from each of the DRBGs before the next run */
+ if (!TEST_int_gt(RAND_bytes(random, 1), 0) || !TEST_int_gt(RAND_priv_bytes(random, 1), 0))
+ success = 0;
+
+ return success;
+}
+#endif
+
+/*
+ * Test whether the default rand_method (RAND_OpenSSL()) is
+ * setup correctly, in particular whether reseeding works
+ * as designed.
+ */
+static int test_rand_reseed(void)
+{
+ EVP_RAND_CTX *primary, *public, *private;
+ unsigned char rand_add_buf[256];
+ int rv = 0;
+ time_t before_reseed;
+
+ if (using_fips_rng())
+ return TEST_skip("CRNGT cannot be disabled");
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ /* Check whether RAND_OpenSSL() is the default method */
+ if (!TEST_ptr_eq(RAND_get_rand_method(), RAND_OpenSSL()))
+ return 0;
+#endif
+
+ /* All three DRBGs should be non-null */
+ if (!TEST_ptr(primary = RAND_get0_primary(NULL))
+ || !TEST_ptr(public = RAND_get0_public(NULL))
+ || !TEST_ptr(private = RAND_get0_private(NULL)))
+ return 0;
+
+ /* There should be three distinct DRBGs, two of them chained to primary */
+ if (!TEST_ptr_ne(public, private)
+ || !TEST_ptr_ne(public, primary)
+ || !TEST_ptr_ne(private, primary)
+ || !TEST_ptr_eq(prov_rand(public)->parent, prov_rand(primary))
+ || !TEST_ptr_eq(prov_rand(private)->parent, prov_rand(primary)))
+ return 0;
+
+ /* Disable CRNG testing for the primary DRBG */
+ if (!TEST_true(disable_crngt(primary)))
+ return 0;
+
+ /* uninstantiate the three global DRBGs */
+ EVP_RAND_uninstantiate(primary);
+ EVP_RAND_uninstantiate(private);
+ EVP_RAND_uninstantiate(public);
+
+ /*
+ * Test initial seeding of shared DRBGs
+ */
+ if (!TEST_true(test_drbg_reseed(1,
+ primary, public, private,
+ NULL, NULL,
+ 1, 1, 1, 0)))
+ goto error;
+
+ /*
+ * Test initial state of shared DRBGs
+ */
+ if (!TEST_true(test_drbg_reseed(1,
+ primary, public, private,
+ NULL, NULL,
+ 0, 0, 0, 0)))
+ goto error;
+
+ /*
+ * Test whether the public and private DRBG are both reseeded when their
+ * reseed counters differ from the primary's reseed counter.
+ */
+ inc_reseed_counter(primary);
+ if (!TEST_true(test_drbg_reseed(1,
+ primary, public, private,
+ NULL, NULL,
+ 0, 1, 1, 0)))
+ goto error;
+
+ /*
+ * Test whether the public DRBG is reseeded when its reseed counter differs
+ * from the primary's reseed counter.
+ */
+ inc_reseed_counter(primary);
+ inc_reseed_counter(private);
+ if (!TEST_true(test_drbg_reseed(1,
+ primary, public, private,
+ NULL, NULL,
+ 0, 1, 0, 0)))
+ goto error;
+
+ /*
+ * Test whether the private DRBG is reseeded when its reseed counter differs
+ * from the primary's reseed counter.
+ */
+ inc_reseed_counter(primary);
+ inc_reseed_counter(public);
+ if (!TEST_true(test_drbg_reseed(1,
+ primary, public, private,
+ NULL, NULL,
+ 0, 0, 1, 0)))
+ goto error;
+
+ /* fill 'randomness' buffer with some arbitrary data */
+ memset(rand_add_buf, 'r', sizeof(rand_add_buf));
+
+ /*
+ * Test whether all three DRBGs are reseeded by RAND_add().
+ * The before_reseed time has to be measured here and passed into the
+ * test_drbg_reseed() test, because the primary DRBG gets already reseeded
+ * in RAND_add(), whence the check for the condition
+ * before_reseed <= reseed_time(primary) will fail if the time value happens
+ * to increase between the RAND_add() and the test_drbg_reseed() call.
+ */
+ before_reseed = time(NULL);
+ RAND_add(rand_add_buf, sizeof(rand_add_buf), sizeof(rand_add_buf));
+ if (!TEST_true(test_drbg_reseed(1,
+ primary, public, private,
+ NULL, NULL,
+ 1, 1, 1,
+ before_reseed)))
+ goto error;
+
+ rv = 1;
+
+error:
+ return rv;
+}
+
+#if defined(OPENSSL_THREADS)
+static int multi_thread_rand_bytes_succeeded = 1;
+static int multi_thread_rand_priv_bytes_succeeded = 1;
+
+static int set_reseed_time_interval(EVP_RAND_CTX *drbg, int t)
+{
+ OSSL_PARAM params[2];
+
+ params[0] = OSSL_PARAM_construct_int(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL,
+ &t);
+ params[1] = OSSL_PARAM_construct_end();
+ return EVP_RAND_CTX_set_params(drbg, params);
+}
+
+static void run_multi_thread_test(void)
+{
+ unsigned char buf[256];
+ time_t start = time(NULL);
+ EVP_RAND_CTX *public = NULL, *private = NULL;
+
+ if (!TEST_ptr(public = RAND_get0_public(NULL))
+ || !TEST_ptr(private = RAND_get0_private(NULL))
+ || !TEST_true(set_reseed_time_interval(private, 1))
+ || !TEST_true(set_reseed_time_interval(public, 1))) {
+ multi_thread_rand_bytes_succeeded = 0;
+ return;
+ }
+
+ do {
+ if (rand_bytes(buf, sizeof(buf)) <= 0)
+ multi_thread_rand_bytes_succeeded = 0;
+ if (rand_priv_bytes(buf, sizeof(buf)) <= 0)
+ multi_thread_rand_priv_bytes_succeeded = 0;
+ }
+ while (time(NULL) - start < 5);
+}
+
+# if defined(OPENSSL_SYS_WINDOWS)
+
+typedef HANDLE thread_t;
+
+static DWORD WINAPI thread_run(LPVOID arg)
+{
+ run_multi_thread_test();
+ /*
+ * Because we're linking with a static library, we must stop each
+ * thread explicitly, or so says OPENSSL_thread_stop(3)
+ */
+ OPENSSL_thread_stop();
+ return 0;
+}
+
+static int run_thread(thread_t *t)
+{
+ *t = CreateThread(NULL, 0, thread_run, NULL, 0, NULL);
+ return *t != NULL;
+}
+
+static int wait_for_thread(thread_t thread)
+{
+ return WaitForSingleObject(thread, INFINITE) == 0;
+}
+
+# else
+
+typedef pthread_t thread_t;
+
+static void *thread_run(void *arg)
+{
+ run_multi_thread_test();
+ /*
+ * Because we're linking with a static library, we must stop each
+ * thread explicitly, or so says OPENSSL_thread_stop(3)
+ */
+ OPENSSL_thread_stop();
+ return NULL;
+}
+
+static int run_thread(thread_t *t)
+{
+ return pthread_create(t, NULL, thread_run, NULL) == 0;
+}
+
+static int wait_for_thread(thread_t thread)
+{
+ return pthread_join(thread, NULL) == 0;
+}
+
+# endif
+
+/*
+ * The main thread will also run the test, so we'll have THREADS+1 parallel
+ * tests running
+ */
+# define THREADS 3
+
+static int test_multi_thread(void)
+{
+ thread_t t[THREADS];
+ int i;
+
+ for (i = 0; i < THREADS; i++)
+ run_thread(&t[i]);
+ run_multi_thread_test();
+ for (i = 0; i < THREADS; i++)
+ wait_for_thread(t[i]);
+
+ if (!TEST_true(multi_thread_rand_bytes_succeeded))
+ return 0;
+ if (!TEST_true(multi_thread_rand_priv_bytes_succeeded))
+ return 0;
+
+ return 1;
+}
+#endif
+
+static EVP_RAND_CTX *new_drbg(EVP_RAND_CTX *parent)
+{
+ OSSL_PARAM params[2];
+ EVP_RAND *rand = NULL;
+ EVP_RAND_CTX *drbg = NULL;
+
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_CIPHER,
+ "AES-256-CTR", 0);
+ params[1] = OSSL_PARAM_construct_end();
+
+ if (!TEST_ptr(rand = EVP_RAND_fetch(NULL, "CTR-DRBG", NULL))
+ || !TEST_ptr(drbg = EVP_RAND_CTX_new(rand, parent))
+ || !TEST_true(EVP_RAND_CTX_set_params(drbg, params))) {
+ EVP_RAND_CTX_free(drbg);
+ drbg = NULL;
+ }
+ EVP_RAND_free(rand);
+ return drbg;
+}
+
+static int test_rand_prediction_resistance(void)
+{
+ EVP_RAND_CTX *x = NULL, *y = NULL, *z = NULL;
+ unsigned char buf1[51], buf2[sizeof(buf1)];
+ int ret = 0, xreseed, yreseed, zreseed;
+
+ if (using_fips_rng())
+ return TEST_skip("CRNGT cannot be disabled");
+
+ /* Initialise a three long DRBG chain */
+ if (!TEST_ptr(x = new_drbg(NULL))
+ || !TEST_true(disable_crngt(x))
+ || !TEST_true(EVP_RAND_instantiate(x, 0, 0, NULL, 0, NULL))
+ || !TEST_ptr(y = new_drbg(x))
+ || !TEST_true(EVP_RAND_instantiate(y, 0, 0, NULL, 0, NULL))
+ || !TEST_ptr(z = new_drbg(y))
+ || !TEST_true(EVP_RAND_instantiate(z, 0, 0, NULL, 0, NULL)))
+ goto err;
+
+ /*
+ * During a normal reseed, only the last DRBG in the chain should
+ * be reseeded.
+ */
+ inc_reseed_counter(y);
+ xreseed = reseed_counter(x);
+ yreseed = reseed_counter(y);
+ zreseed = reseed_counter(z);
+ if (!TEST_true(EVP_RAND_reseed(z, 0, NULL, 0, NULL, 0))
+ || !TEST_int_eq(reseed_counter(x), xreseed)
+ || !TEST_int_eq(reseed_counter(y), yreseed)
+ || !TEST_int_gt(reseed_counter(z), zreseed))
+ goto err;
+
+ /*
+ * When prediction resistance is requested, the request should be
+ * propagated to the primary, so that the entire DRBG chain reseeds.
+ */
+ zreseed = reseed_counter(z);
+ if (!TEST_true(EVP_RAND_reseed(z, 1, NULL, 0, NULL, 0))
+ || !TEST_int_gt(reseed_counter(x), xreseed)
+ || !TEST_int_gt(reseed_counter(y), yreseed)
+ || !TEST_int_gt(reseed_counter(z), zreseed))
+ goto err;
+
+ /*
+ * During a normal generate, only the last DRBG should be reseed */
+ inc_reseed_counter(y);
+ xreseed = reseed_counter(x);
+ yreseed = reseed_counter(y);
+ zreseed = reseed_counter(z);
+ if (!TEST_true(EVP_RAND_generate(z, buf1, sizeof(buf1), 0, 0, NULL, 0))
+ || !TEST_int_eq(reseed_counter(x), xreseed)
+ || !TEST_int_eq(reseed_counter(y), yreseed)
+ || !TEST_int_gt(reseed_counter(z), zreseed))
+ goto err;
+
+ /*
+ * When a prediction resistant generate is requested, the request
+ * should be propagated to the primary, reseeding the entire DRBG chain.
+ */
+ zreseed = reseed_counter(z);
+ if (!TEST_true(EVP_RAND_generate(z, buf2, sizeof(buf2), 0, 1, NULL, 0))
+ || !TEST_int_gt(reseed_counter(x), xreseed)
+ || !TEST_int_gt(reseed_counter(y), yreseed)
+ || !TEST_int_gt(reseed_counter(z), zreseed)
+ || !TEST_mem_ne(buf1, sizeof(buf1), buf2, sizeof(buf2)))
+ goto err;
+
+ /* Verify that a normal reseed still only reseeds the last DRBG */
+ inc_reseed_counter(y);
+ xreseed = reseed_counter(x);
+ yreseed = reseed_counter(y);
+ zreseed = reseed_counter(z);
+ if (!TEST_true(EVP_RAND_reseed(z, 0, NULL, 0, NULL, 0))
+ || !TEST_int_eq(reseed_counter(x), xreseed)
+ || !TEST_int_eq(reseed_counter(y), yreseed)
+ || !TEST_int_gt(reseed_counter(z), zreseed))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_RAND_CTX_free(z);
+ EVP_RAND_CTX_free(y);
+ EVP_RAND_CTX_free(x);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_rand_reseed);
+#if defined(OPENSSL_SYS_UNIX) && !defined(OPENSSL_RAND_SEED_EGD)
+ ADD_ALL_TESTS(test_rand_fork_safety, RANDOM_SIZE);
+#endif
+ ADD_TEST(test_rand_prediction_resistance);
+#if defined(OPENSSL_THREADS)
+ ADD_TEST(test_multi_thread);
+#endif
+ return 1;
+}
diff --git a/test/dsa_no_digest_size_test.c b/test/dsa_no_digest_size_test.c
new file mode 100644
index 000000000000..35bfa390394a
--- /dev/null
+++ b/test/dsa_no_digest_size_test.c
@@ -0,0 +1,251 @@
+/*
+ * Copyright 2018-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
+ */
+
+/*
+ * DSA 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 "testutil.h"
+
+#include <openssl/evp.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+
+#ifndef OPENSSL_NO_DSA
+#include <openssl/dsa.h>
+
+static DSA *dsakey;
+
+/*
+ * These parameters are from test/recipes/04-test_pem_data/dsaparam.pem,
+ * converted using dsaparam -C
+ */
+static DSA *load_dsa_params(void)
+{
+ static unsigned char dsap_2048[] = {
+ 0xAE, 0x35, 0x7D, 0x4E, 0x1D, 0x96, 0xE2, 0x9F, 0x00, 0x96,
+ 0x60, 0x5A, 0x6E, 0x4D, 0x07, 0x8D, 0xA5, 0x7C, 0xBC, 0xF9,
+ 0xAD, 0xD7, 0x9F, 0xD5, 0xE9, 0xEE, 0xA6, 0x33, 0x51, 0xDE,
+ 0x7B, 0x72, 0xD2, 0x75, 0xAA, 0x71, 0x77, 0xF1, 0x63, 0xFB,
+ 0xB6, 0xEC, 0x5A, 0xBA, 0x0D, 0x72, 0xA2, 0x1A, 0x1C, 0x64,
+ 0xB8, 0xE5, 0x89, 0x09, 0x6D, 0xC9, 0x6F, 0x0B, 0x7F, 0xD2,
+ 0xCE, 0x9F, 0xEF, 0x87, 0x5A, 0xB6, 0x67, 0x2F, 0xEF, 0xEE,
+ 0xEB, 0x59, 0xF5, 0x5E, 0xFF, 0xA8, 0x28, 0x84, 0x9E, 0x5B,
+ 0x37, 0x09, 0x11, 0x80, 0x7C, 0x08, 0x5C, 0xD5, 0xE1, 0x48,
+ 0x4B, 0xD2, 0x68, 0xFB, 0x3F, 0x9F, 0x2B, 0x6B, 0x6C, 0x0D,
+ 0x48, 0x1B, 0x1A, 0x80, 0xC2, 0xEB, 0x11, 0x1B, 0x37, 0x79,
+ 0xD6, 0x8C, 0x8B, 0x72, 0x3E, 0x67, 0xA5, 0x05, 0x0E, 0x41,
+ 0x8A, 0x9E, 0x35, 0x50, 0xB4, 0xD2, 0x40, 0x27, 0x6B, 0xFD,
+ 0xE0, 0x64, 0x6B, 0x5B, 0x38, 0x42, 0x94, 0xB5, 0x49, 0xDA,
+ 0xEF, 0x6E, 0x78, 0x37, 0xCD, 0x30, 0x89, 0xC3, 0x45, 0x50,
+ 0x7B, 0x9C, 0x8C, 0xE7, 0x1C, 0x98, 0x70, 0x71, 0x5D, 0x79,
+ 0x5F, 0xEF, 0xE8, 0x94, 0x85, 0x53, 0x3E, 0xEF, 0xA3, 0x2C,
+ 0xCE, 0x1A, 0xAB, 0x7D, 0xD6, 0x5E, 0x14, 0xCD, 0x51, 0x54,
+ 0x89, 0x9D, 0x77, 0xE4, 0xF8, 0x22, 0xF0, 0x35, 0x10, 0x75,
+ 0x05, 0x71, 0x51, 0x4F, 0x8C, 0x4C, 0x5C, 0x0D, 0x2C, 0x2C,
+ 0xBE, 0x6C, 0x34, 0xEE, 0x12, 0x82, 0x87, 0x03, 0x19, 0x06,
+ 0x12, 0xA8, 0xAA, 0xF4, 0x0D, 0x3C, 0x49, 0xCC, 0x70, 0x5A,
+ 0xD8, 0x32, 0xEE, 0x32, 0x50, 0x85, 0x70, 0xE8, 0x18, 0xFD,
+ 0x74, 0x80, 0x53, 0x32, 0x57, 0xEE, 0x50, 0xC9, 0xAE, 0xEB,
+ 0xAE, 0xB6, 0x22, 0x32, 0x16, 0x6B, 0x8C, 0x59, 0xDA, 0xEE,
+ 0x1D, 0x33, 0xDF, 0x4C, 0xA2, 0x3D
+ };
+ static unsigned char dsaq_2048[] = {
+ 0xAD, 0x2D, 0x6E, 0x17, 0xB0, 0xF3, 0xEB, 0xC7, 0xB8, 0xEE,
+ 0x95, 0x78, 0xF2, 0x17, 0xF5, 0x33, 0x01, 0x67, 0xBC, 0xDE,
+ 0x93, 0xFF, 0xEE, 0x40, 0xE8, 0x7F, 0xF1, 0x93, 0x6D, 0x4B,
+ 0x87, 0x13
+ };
+ static unsigned char dsag_2048[] = {
+ 0x66, 0x6F, 0xDA, 0x63, 0xA5, 0x8E, 0xD2, 0x4C, 0xD5, 0x45,
+ 0x2D, 0x76, 0x5D, 0x5F, 0xCD, 0x4A, 0xB4, 0x1A, 0x42, 0x35,
+ 0x86, 0x3A, 0x6F, 0xA9, 0xFA, 0x27, 0xAB, 0xDE, 0x03, 0x21,
+ 0x36, 0x0A, 0x07, 0x29, 0xC9, 0x2F, 0x6D, 0x49, 0xA8, 0xF7,
+ 0xC6, 0xF4, 0x92, 0xD7, 0x73, 0xC1, 0xD8, 0x76, 0x0E, 0x61,
+ 0xA7, 0x0B, 0x6E, 0x96, 0xB8, 0xC8, 0xCB, 0x38, 0x35, 0x12,
+ 0x20, 0x79, 0xA5, 0x08, 0x28, 0x35, 0x5C, 0xBC, 0x52, 0x16,
+ 0xAF, 0x52, 0xBA, 0x0F, 0xC3, 0xB1, 0x63, 0x12, 0x27, 0x0B,
+ 0x74, 0xA4, 0x47, 0x43, 0xD6, 0x30, 0xB8, 0x9C, 0x2E, 0x40,
+ 0x14, 0xCD, 0x99, 0x7F, 0xE8, 0x8E, 0x37, 0xB0, 0xA9, 0x3F,
+ 0x54, 0xE9, 0x66, 0x22, 0x61, 0x4C, 0xF8, 0x49, 0x03, 0x57,
+ 0x14, 0x32, 0x1D, 0x37, 0x3D, 0xE2, 0x92, 0xF8, 0x8E, 0xA0,
+ 0x6A, 0x66, 0x63, 0xF0, 0xB0, 0x6E, 0x07, 0x2B, 0x3D, 0xBF,
+ 0xD0, 0x84, 0x6A, 0xAA, 0x1F, 0x30, 0x77, 0x65, 0xE5, 0xFC,
+ 0xF5, 0xEC, 0x55, 0xCE, 0x73, 0xDB, 0xBE, 0xA7, 0x8D, 0x3A,
+ 0x9F, 0x7A, 0xED, 0x4F, 0xAF, 0xA2, 0x80, 0x4C, 0x30, 0x9E,
+ 0x28, 0x49, 0x65, 0x40, 0xF0, 0x03, 0x45, 0x56, 0x99, 0xA2,
+ 0x93, 0x1B, 0x9C, 0x46, 0xDE, 0xBD, 0xA8, 0xAB, 0x5F, 0x90,
+ 0x3F, 0xB7, 0x3F, 0xD4, 0x6F, 0x8D, 0x5A, 0x30, 0xE1, 0xD4,
+ 0x63, 0x3A, 0x6A, 0x7C, 0x8F, 0x24, 0xFC, 0xD9, 0x14, 0x28,
+ 0x09, 0xE4, 0x84, 0x4E, 0x17, 0x43, 0x56, 0xB8, 0xD4, 0x4B,
+ 0xA2, 0x29, 0x45, 0xD3, 0x13, 0xF0, 0xC2, 0x76, 0x9B, 0x01,
+ 0xA0, 0x80, 0x6E, 0x93, 0x63, 0x5E, 0x87, 0x24, 0x20, 0x2A,
+ 0xFF, 0xBB, 0x9F, 0xA8, 0x99, 0x6C, 0xA7, 0x9A, 0x00, 0xB9,
+ 0x7D, 0xDA, 0x66, 0xC9, 0xC0, 0x72, 0x72, 0x22, 0x0F, 0x1A,
+ 0xCC, 0x23, 0xD9, 0xB7, 0x5F, 0x1B
+ };
+ DSA *dsa = DSA_new();
+ BIGNUM *p, *q, *g;
+
+ if (dsa == NULL)
+ return NULL;
+ if (!DSA_set0_pqg(dsa, p = BN_bin2bn(dsap_2048, sizeof(dsap_2048), NULL),
+ q = BN_bin2bn(dsaq_2048, sizeof(dsaq_2048), NULL),
+ g = BN_bin2bn(dsag_2048, sizeof(dsag_2048), NULL))) {
+ DSA_free(dsa);
+ BN_free(p);
+ BN_free(q);
+ BN_free(g);
+ return NULL;
+ }
+ return dsa;
+}
+
+static int genkeys(void)
+{
+ if (!TEST_ptr(dsakey = load_dsa_params()))
+ return 0;
+
+ if (!TEST_int_eq(DSA_generate_key(dsakey), 1))
+ return 0;
+
+ return 1;
+}
+
+static int sign_and_verify(int len)
+{
+ /*
+ * Per FIPS 186-4, the hash is recommended to be the same length as q.
+ * If the hash is longer than q, the leftmost N bits are used; if the hash
+ * is shorter, then we left-pad (see appendix C.2.1).
+ */
+ size_t sigLength;
+ int digestlen = BN_num_bytes(DSA_get0_q(dsakey));
+ int ok = 0;
+
+ unsigned char *dataToSign = OPENSSL_malloc(len);
+ unsigned char *paddedData = OPENSSL_malloc(digestlen);
+ unsigned char *signature = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+
+ if (!TEST_ptr(dataToSign) ||
+ !TEST_ptr(paddedData) ||
+ !TEST_int_eq(RAND_bytes(dataToSign, len), 1))
+ goto end;
+
+ memset(paddedData, 0, digestlen);
+ if (len > digestlen)
+ memcpy(paddedData, dataToSign, digestlen);
+ else
+ memcpy(paddedData + digestlen - len, dataToSign, len);
+
+ if (!TEST_ptr(pkey = EVP_PKEY_new()))
+ goto end;
+ EVP_PKEY_set1_DSA(pkey, dsakey);
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new(pkey, NULL)))
+ goto end;
+ if (!TEST_int_eq(EVP_PKEY_sign_init(ctx), 1))
+ goto end;
+
+ if (EVP_PKEY_sign(ctx, NULL, &sigLength, dataToSign, len) != 1) {
+ TEST_error("Failed to get signature length, len=%d", len);
+ goto end;
+ }
+
+ if (!TEST_ptr(signature = OPENSSL_malloc(sigLength)))
+ goto end;
+
+ if (EVP_PKEY_sign(ctx, signature, &sigLength, dataToSign, len) != 1) {
+ TEST_error("Failed to sign, len=%d", len);
+ goto end;
+ }
+
+ /* Check that the signature is okay via the EVP interface */
+ if (!TEST_int_eq(EVP_PKEY_verify_init(ctx), 1))
+ goto end;
+
+ /* ... using the same data we just signed */
+ if (EVP_PKEY_verify(ctx, signature, sigLength, dataToSign, len) != 1) {
+ TEST_error("EVP verify with unpadded length %d failed\n", len);
+ goto end;
+ }
+
+ /* ... padding/truncating the data to the appropriate digest size */
+ if (EVP_PKEY_verify(ctx, signature, sigLength, paddedData, digestlen) != 1) {
+ TEST_error("EVP verify with length %d failed\n", len);
+ goto end;
+ }
+
+ /* Verify again using the raw DSA interface */
+ if (DSA_verify(0, dataToSign, len, signature, sigLength, dsakey) != 1) {
+ TEST_error("Verification with unpadded data failed, len=%d", len);
+ goto end;
+ }
+
+ if (DSA_verify(0, paddedData, digestlen, signature, sigLength, dsakey) != 1) {
+ TEST_error("verify with length %d failed\n", len);
+ goto end;
+ }
+
+ ok = 1;
+end:
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+
+ OPENSSL_free(signature);
+ OPENSSL_free(paddedData);
+ OPENSSL_free(dataToSign);
+
+ return ok;
+}
+
+static int dsa_exact_size_test(void) {
+ /*
+ * For a 2048-bit p, q should be either 224 or 256 bits per the table in
+ * FIPS 186-4 4.2.
+ */
+
+ return sign_and_verify(224 / 8) && sign_and_verify(256 / 8);
+}
+
+static int dsa_small_digest_test(void) {
+ return sign_and_verify(16) && sign_and_verify(1);
+}
+
+static int dsa_large_digest_test(void) {
+ return sign_and_verify(33) && sign_and_verify(64);
+}
+
+void cleanup_tests(void)
+{
+ DSA_free(dsakey);
+}
+
+#endif /* OPENSSL_NO_DSA */
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_DSA
+ if (!genkeys())
+ return 0;
+
+ ADD_TEST(dsa_exact_size_test);
+ ADD_TEST(dsa_small_digest_test);
+ ADD_TEST(dsa_large_digest_test);
+#endif
+ return 1;
+}
+
diff --git a/test/dsatest.c b/test/dsatest.c
new file mode 100644
index 000000000000..5fa83020f87a
--- /dev/null
+++ b/test/dsatest.c
@@ -0,0 +1,501 @@
+/*
+ * Copyright 1995-2023 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
+ */
+
+/*
+ * DSA low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <openssl/crypto.h>
+#include <openssl/rand.h>
+#include <openssl/bn.h>
+#include <openssl/dsa.h>
+#include <openssl/evp.h>
+#include <openssl/core_names.h>
+
+#include "testutil.h"
+#include "internal/nelem.h"
+
+#ifndef OPENSSL_NO_DSA
+static int dsa_cb(int p, int n, BN_GENCB *arg);
+
+static unsigned char out_p[] = {
+ 0x8d, 0xf2, 0xa4, 0x94, 0x49, 0x22, 0x76, 0xaa,
+ 0x3d, 0x25, 0x75, 0x9b, 0xb0, 0x68, 0x69, 0xcb,
+ 0xea, 0xc0, 0xd8, 0x3a, 0xfb, 0x8d, 0x0c, 0xf7,
+ 0xcb, 0xb8, 0x32, 0x4f, 0x0d, 0x78, 0x82, 0xe5,
+ 0xd0, 0x76, 0x2f, 0xc5, 0xb7, 0x21, 0x0e, 0xaf,
+ 0xc2, 0xe9, 0xad, 0xac, 0x32, 0xab, 0x7a, 0xac,
+ 0x49, 0x69, 0x3d, 0xfb, 0xf8, 0x37, 0x24, 0xc2,
+ 0xec, 0x07, 0x36, 0xee, 0x31, 0xc8, 0x02, 0x91,
+};
+static unsigned char out_q[] = {
+ 0xc7, 0x73, 0x21, 0x8c, 0x73, 0x7e, 0xc8, 0xee,
+ 0x99, 0x3b, 0x4f, 0x2d, 0xed, 0x30, 0xf4, 0x8e,
+ 0xda, 0xce, 0x91, 0x5f,
+};
+static unsigned char out_g[] = {
+ 0x62, 0x6d, 0x02, 0x78, 0x39, 0xea, 0x0a, 0x13,
+ 0x41, 0x31, 0x63, 0xa5, 0x5b, 0x4c, 0xb5, 0x00,
+ 0x29, 0x9d, 0x55, 0x22, 0x95, 0x6c, 0xef, 0xcb,
+ 0x3b, 0xff, 0x10, 0xf3, 0x99, 0xce, 0x2c, 0x2e,
+ 0x71, 0xcb, 0x9d, 0xe5, 0xfa, 0x24, 0xba, 0xbf,
+ 0x58, 0xe5, 0xb7, 0x95, 0x21, 0x92, 0x5c, 0x9c,
+ 0xc4, 0x2e, 0x9f, 0x6f, 0x46, 0x4b, 0x08, 0x8c,
+ 0xc5, 0x72, 0xaf, 0x53, 0xe6, 0xd7, 0x88, 0x02,
+};
+
+static int dsa_test(void)
+{
+ BN_GENCB *cb;
+ DSA *dsa = NULL;
+ int counter, ret = 0, i, j;
+ unsigned char buf[256];
+ unsigned long h;
+ unsigned char sig[256];
+ unsigned int siglen;
+ const BIGNUM *p = NULL, *q = NULL, *g = NULL;
+ /*
+ * seed, out_p, out_q, out_g are taken from the updated Appendix 5 to FIPS
+ * PUB 186 and also appear in Appendix 5 to FIPS PIB 186-1
+ */
+ static unsigned char seed[20] = {
+ 0xd5, 0x01, 0x4e, 0x4b, 0x60, 0xef, 0x2b, 0xa8,
+ 0xb6, 0x21, 0x1b, 0x40, 0x62, 0xba, 0x32, 0x24,
+ 0xe0, 0x42, 0x7d, 0xd3,
+ };
+ static const unsigned char str1[] = "12345678901234567890";
+
+ if (!TEST_ptr(cb = BN_GENCB_new()))
+ goto end;
+
+ BN_GENCB_set(cb, dsa_cb, NULL);
+ if (!TEST_ptr(dsa = DSA_new())
+ || !TEST_true(DSA_generate_parameters_ex(dsa, 512, seed, 20,
+ &counter, &h, cb)))
+ goto end;
+
+ if (!TEST_int_eq(counter, 105))
+ goto end;
+ if (!TEST_int_eq(h, 2))
+ goto end;
+
+ DSA_get0_pqg(dsa, &p, &q, &g);
+ i = BN_bn2bin(q, buf);
+ j = sizeof(out_q);
+ if (!TEST_int_eq(i, j) || !TEST_mem_eq(buf, i, out_q, i))
+ goto end;
+
+ i = BN_bn2bin(p, buf);
+ j = sizeof(out_p);
+ if (!TEST_int_eq(i, j) || !TEST_mem_eq(buf, i, out_p, i))
+ goto end;
+
+ i = BN_bn2bin(g, buf);
+ j = sizeof(out_g);
+ if (!TEST_int_eq(i, j) || !TEST_mem_eq(buf, i, out_g, i))
+ goto end;
+
+ if (!TEST_true(DSA_generate_key(dsa)))
+ goto end;
+ if (!TEST_true(DSA_sign(0, str1, 20, sig, &siglen, dsa)))
+ goto end;
+ if (TEST_int_gt(DSA_verify(0, str1, 20, sig, siglen, dsa), 0))
+ ret = 1;
+ end:
+ DSA_free(dsa);
+ BN_GENCB_free(cb);
+ return ret;
+}
+
+static int dsa_cb(int p, int n, BN_GENCB *arg)
+{
+ static int ok = 0, num = 0;
+
+ if (p == 0)
+ num++;
+ if (p == 2)
+ ok++;
+
+ if (!ok && (p == 0) && (num > 1)) {
+ TEST_error("dsa_cb error");
+ return 0;
+ }
+ return 1;
+}
+
+# define P 0
+# define Q 1
+# define G 2
+# define SEED 3
+# define PCOUNT 4
+# define GINDEX 5
+# define HCOUNT 6
+# define GROUP 7
+
+static int dsa_keygen_test(void)
+{
+ int ret = 0;
+ EVP_PKEY *param_key = NULL, *key = NULL;
+ EVP_PKEY_CTX *pg_ctx = NULL, *kg_ctx = NULL;
+ BIGNUM *p_in = NULL, *q_in = NULL, *g_in = NULL;
+ BIGNUM *p_out = NULL, *q_out = NULL, *g_out = NULL;
+ int gindex_out = 0, pcount_out = 0, hcount_out = 0;
+ unsigned char seed_out[32];
+ char group_out[32];
+ size_t len = 0;
+ const OSSL_PARAM *settables = NULL;
+ static const unsigned char seed_data[] = {
+ 0xa6, 0xf5, 0x28, 0x8c, 0x50, 0x77, 0xa5, 0x68,
+ 0x6d, 0x3a, 0xf5, 0xf1, 0xc6, 0x4c, 0xdc, 0x35,
+ 0x95, 0x26, 0x3f, 0x03, 0xdc, 0x00, 0x3f, 0x44,
+ 0x7b, 0x2a, 0xc7, 0x29
+ };
+ static const unsigned char expected_p[]= {
+ 0xdb, 0x47, 0x07, 0xaf, 0xf0, 0x06, 0x49, 0x55,
+ 0xc9, 0xbb, 0x09, 0x41, 0xb8, 0xdb, 0x1f, 0xbc,
+ 0xa8, 0xed, 0x12, 0x06, 0x7f, 0x88, 0x49, 0xb8,
+ 0xc9, 0x12, 0x87, 0x21, 0xbb, 0x08, 0x6c, 0xbd,
+ 0xf1, 0x89, 0xef, 0x84, 0xd9, 0x7a, 0x93, 0xe8,
+ 0x45, 0x40, 0x81, 0xec, 0x37, 0x27, 0x1a, 0xa4,
+ 0x22, 0x51, 0x99, 0xf0, 0xde, 0x04, 0xdb, 0xea,
+ 0xa1, 0xf9, 0x37, 0x83, 0x80, 0x96, 0x36, 0x53,
+ 0xf6, 0xae, 0x14, 0x73, 0x33, 0x0f, 0xdf, 0x0b,
+ 0xf9, 0x2f, 0x08, 0x46, 0x31, 0xf9, 0x66, 0xcd,
+ 0x5a, 0xeb, 0x6c, 0xf3, 0xbb, 0x74, 0xf3, 0x88,
+ 0xf0, 0x31, 0x5c, 0xa4, 0xc8, 0x0f, 0x86, 0xf3,
+ 0x0f, 0x9f, 0xc0, 0x8c, 0x57, 0xe4, 0x7f, 0x95,
+ 0xb3, 0x62, 0xc8, 0x4e, 0xae, 0xf3, 0xd8, 0x14,
+ 0xcc, 0x47, 0xc2, 0x4b, 0x4f, 0xef, 0xaf, 0xcd,
+ 0xcf, 0xb2, 0xbb, 0xe8, 0xbe, 0x08, 0xca, 0x15,
+ 0x90, 0x59, 0x35, 0xef, 0x35, 0x1c, 0xfe, 0xeb,
+ 0x33, 0x2e, 0x25, 0x22, 0x57, 0x9c, 0x55, 0x23,
+ 0x0c, 0x6f, 0xed, 0x7c, 0xb6, 0xc7, 0x36, 0x0b,
+ 0xcb, 0x2b, 0x6a, 0x21, 0xa1, 0x1d, 0x55, 0x77,
+ 0xd9, 0x91, 0xcd, 0xc1, 0xcd, 0x3d, 0x82, 0x16,
+ 0x9c, 0xa0, 0x13, 0xa5, 0x83, 0x55, 0x3a, 0x73,
+ 0x7e, 0x2c, 0x44, 0x3e, 0x70, 0x2e, 0x50, 0x91,
+ 0x6e, 0xca, 0x3b, 0xef, 0xff, 0x85, 0x35, 0x70,
+ 0xff, 0x61, 0x0c, 0xb1, 0xb2, 0xb7, 0x94, 0x6f,
+ 0x65, 0xa4, 0x57, 0x62, 0xef, 0x21, 0x83, 0x0f,
+ 0x3e, 0x71, 0xae, 0x7d, 0xe4, 0xad, 0xfb, 0xe3,
+ 0xdd, 0xd6, 0x03, 0xda, 0x9a, 0xd8, 0x8f, 0x2d,
+ 0xbb, 0x90, 0x87, 0xf8, 0xdb, 0xdc, 0xec, 0x71,
+ 0xf2, 0xdb, 0x0b, 0x8e, 0xfc, 0x1a, 0x7e, 0x79,
+ 0xb1, 0x1b, 0x0d, 0xfc, 0x70, 0xec, 0x85, 0xc2,
+ 0xc5, 0xba, 0xb9, 0x69, 0x3f, 0x88, 0xbc, 0xcb
+ };
+ static const unsigned char expected_q[]= {
+ 0x99, 0xb6, 0xa0, 0xee, 0xb3, 0xa6, 0x99, 0x1a,
+ 0xb6, 0x67, 0x8d, 0xc1, 0x2b, 0x9b, 0xce, 0x2b,
+ 0x01, 0x72, 0x5a, 0x65, 0x76, 0x3d, 0x93, 0x69,
+ 0xe2, 0x56, 0xae, 0xd7
+ };
+ static const unsigned char expected_g[]= {
+ 0x63, 0xf8, 0xb6, 0xee, 0x2a, 0x27, 0xaf, 0x4f,
+ 0x4c, 0xf6, 0x08, 0x28, 0x87, 0x4a, 0xe7, 0x1f,
+ 0x45, 0x46, 0x27, 0x52, 0x3b, 0x7f, 0x6f, 0xd2,
+ 0x29, 0xcb, 0xe8, 0x11, 0x19, 0x25, 0x35, 0x76,
+ 0x99, 0xcb, 0x4f, 0x1b, 0xe0, 0xed, 0x32, 0x9e,
+ 0x05, 0xb5, 0xbe, 0xd7, 0xf6, 0x5a, 0xb2, 0xf6,
+ 0x0e, 0x0c, 0x7e, 0xf5, 0xe1, 0x05, 0xfe, 0xda,
+ 0xaf, 0x0f, 0x27, 0x1e, 0x40, 0x2a, 0xf7, 0xa7,
+ 0x23, 0x49, 0x2c, 0xd9, 0x1b, 0x0a, 0xbe, 0xff,
+ 0xc7, 0x7c, 0x7d, 0x60, 0xca, 0xa3, 0x19, 0xc3,
+ 0xb7, 0xe4, 0x43, 0xb0, 0xf5, 0x75, 0x44, 0x90,
+ 0x46, 0x47, 0xb1, 0xa6, 0x48, 0x0b, 0x21, 0x8e,
+ 0xee, 0x75, 0xe6, 0x3d, 0xa7, 0xd3, 0x7b, 0x31,
+ 0xd1, 0xd2, 0x9d, 0xe2, 0x8a, 0xfc, 0x57, 0xfd,
+ 0x8a, 0x10, 0x31, 0xeb, 0x87, 0x36, 0x3f, 0x65,
+ 0x72, 0x23, 0x2c, 0xd3, 0xd6, 0x17, 0xa5, 0x62,
+ 0x58, 0x65, 0x57, 0x6a, 0xd4, 0xa8, 0xfe, 0xec,
+ 0x57, 0x76, 0x0c, 0xb1, 0x4c, 0x93, 0xed, 0xb0,
+ 0xb4, 0xf9, 0x45, 0xb3, 0x3e, 0xdd, 0x47, 0xf1,
+ 0xfb, 0x7d, 0x25, 0x79, 0x3d, 0xfc, 0xa7, 0x39,
+ 0x90, 0x68, 0x6a, 0x6b, 0xae, 0xf2, 0x6e, 0x64,
+ 0x8c, 0xfb, 0xb8, 0xdd, 0x76, 0x4e, 0x4a, 0x69,
+ 0x8c, 0x97, 0x15, 0x77, 0xb2, 0x67, 0xdc, 0xeb,
+ 0x4a, 0x40, 0x6b, 0xb9, 0x47, 0x8f, 0xa6, 0xab,
+ 0x6e, 0x98, 0xc0, 0x97, 0x9a, 0x0c, 0xea, 0x00,
+ 0xfd, 0x56, 0x1a, 0x74, 0x9a, 0x32, 0x6b, 0xfe,
+ 0xbd, 0xdf, 0x6c, 0x82, 0x54, 0x53, 0x4d, 0x70,
+ 0x65, 0xe3, 0x8b, 0x37, 0xb8, 0xe4, 0x70, 0x08,
+ 0xb7, 0x3b, 0x30, 0x27, 0xaf, 0x1c, 0x77, 0xf3,
+ 0x62, 0xd4, 0x9a, 0x59, 0xba, 0xd1, 0x6e, 0x89,
+ 0x5c, 0x34, 0x9a, 0xa1, 0xb7, 0x4f, 0x7d, 0x8c,
+ 0xdc, 0xbc, 0x74, 0x25, 0x5e, 0xbf, 0x77, 0x46
+ };
+ int expected_c = 1316;
+ int expected_h = 2;
+
+ if (!TEST_ptr(p_in = BN_bin2bn(expected_p, sizeof(expected_p), NULL))
+ || !TEST_ptr(q_in = BN_bin2bn(expected_q, sizeof(expected_q), NULL))
+ || !TEST_ptr(g_in = BN_bin2bn(expected_g, sizeof(expected_g), NULL)))
+ goto end;
+ if (!TEST_ptr(pg_ctx = EVP_PKEY_CTX_new_from_name(NULL, "DSA", NULL))
+ || !TEST_int_gt(EVP_PKEY_paramgen_init(pg_ctx), 0)
+ || !TEST_ptr_null(EVP_PKEY_CTX_gettable_params(pg_ctx))
+ || !TEST_ptr(settables = EVP_PKEY_CTX_settable_params(pg_ctx))
+ || !TEST_ptr(OSSL_PARAM_locate_const(settables,
+ OSSL_PKEY_PARAM_FFC_PBITS))
+ || !TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_type(pg_ctx, "fips186_4"))
+ || !TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_bits(pg_ctx, 2048))
+ || !TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_q_bits(pg_ctx, 224))
+ || !TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_seed(pg_ctx, seed_data,
+ sizeof(seed_data)))
+ || !TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_md_props(pg_ctx, "SHA256",
+ ""))
+ || !TEST_int_gt(EVP_PKEY_generate(pg_ctx, &param_key), 0)
+ || !TEST_ptr(kg_ctx = EVP_PKEY_CTX_new_from_pkey(NULL, param_key, NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(kg_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_generate(kg_ctx, &key), 0))
+ goto end;
+
+ if (!TEST_true(EVP_PKEY_get_bn_param(key, OSSL_PKEY_PARAM_FFC_P, &p_out))
+ || !TEST_BN_eq(p_in, p_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(key, OSSL_PKEY_PARAM_FFC_Q, &q_out))
+ || !TEST_BN_eq(q_in, q_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(key, OSSL_PKEY_PARAM_FFC_G, &g_out))
+ || !TEST_BN_eq(g_in, g_out)
+ || !TEST_true(EVP_PKEY_get_octet_string_param(
+ key, OSSL_PKEY_PARAM_FFC_SEED, seed_out,
+ sizeof(seed_out), &len))
+ || !TEST_mem_eq(seed_out, len, seed_data, sizeof(seed_data))
+ || !TEST_true(EVP_PKEY_get_int_param(key, OSSL_PKEY_PARAM_FFC_GINDEX,
+ &gindex_out))
+ || !TEST_int_eq(gindex_out, -1)
+ || !TEST_true(EVP_PKEY_get_int_param(key, OSSL_PKEY_PARAM_FFC_H,
+ &hcount_out))
+ || !TEST_int_eq(hcount_out, expected_h)
+ || !TEST_true(EVP_PKEY_get_int_param(key,
+ OSSL_PKEY_PARAM_FFC_PCOUNTER,
+ &pcount_out))
+ || !TEST_int_eq(pcount_out, expected_c)
+ || !TEST_false(EVP_PKEY_get_utf8_string_param(key,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ group_out,
+ sizeof(group_out), &len)))
+ goto end;
+ ret = 1;
+end:
+ BN_free(p_in);
+ BN_free(q_in);
+ BN_free(g_in);
+ BN_free(p_out);
+ BN_free(q_out);
+ BN_free(g_out);
+ EVP_PKEY_free(param_key);
+ EVP_PKEY_free(key);
+ EVP_PKEY_CTX_free(kg_ctx);
+ EVP_PKEY_CTX_free(pg_ctx);
+ return ret;
+}
+
+static int test_dsa_default_paramgen_validate(int i)
+{
+ int ret;
+ EVP_PKEY_CTX *gen_ctx = NULL;
+ EVP_PKEY_CTX *check_ctx = NULL;
+ EVP_PKEY *params = NULL;
+
+ ret = TEST_ptr(gen_ctx = EVP_PKEY_CTX_new_from_name(NULL, "DSA", NULL))
+ && TEST_int_gt(EVP_PKEY_paramgen_init(gen_ctx), 0)
+ && (i == 0
+ || TEST_true(EVP_PKEY_CTX_set_dsa_paramgen_bits(gen_ctx, 512)))
+ && TEST_int_gt(EVP_PKEY_generate(gen_ctx, &params), 0)
+ && TEST_ptr(check_ctx = EVP_PKEY_CTX_new_from_pkey(NULL, params, NULL))
+ && TEST_int_gt(EVP_PKEY_param_check(check_ctx), 0);
+
+ EVP_PKEY_free(params);
+ EVP_PKEY_CTX_free(check_ctx);
+ EVP_PKEY_CTX_free(gen_ctx);
+ return ret;
+}
+
+static int test_dsa_sig_infinite_loop(void)
+{
+ int ret = 0;
+ DSA *dsa = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL, *priv = NULL, *pub = NULL, *priv2 = NULL;
+ BIGNUM *badq = NULL, *badpriv = NULL;
+ const unsigned char msg[] = { 0x00 };
+ unsigned int signature_len;
+ unsigned char signature[64];
+
+ static unsigned char out_priv[] = {
+ 0x17, 0x00, 0xb2, 0x8d, 0xcb, 0x24, 0xc9, 0x98,
+ 0xd0, 0x7f, 0x1f, 0x83, 0x1a, 0xa1, 0xc4, 0xa4,
+ 0xf8, 0x0f, 0x7f, 0x12
+ };
+ static unsigned char out_pub[] = {
+ 0x04, 0x72, 0xee, 0x8d, 0xaa, 0x4d, 0x89, 0x60,
+ 0x0e, 0xb2, 0xd4, 0x38, 0x84, 0xa2, 0x2a, 0x60,
+ 0x5f, 0x67, 0xd7, 0x9e, 0x24, 0xdd, 0xe8, 0x50,
+ 0xf2, 0x23, 0x71, 0x55, 0x53, 0x94, 0x0d, 0x6b,
+ 0x2e, 0xcd, 0x30, 0xda, 0x6f, 0x1e, 0x2c, 0xcf,
+ 0x59, 0xbe, 0x05, 0x6c, 0x07, 0x0e, 0xc6, 0x38,
+ 0x05, 0xcb, 0x0c, 0x44, 0x0a, 0x08, 0x13, 0xb6,
+ 0x0f, 0x14, 0xde, 0x4a, 0xf6, 0xed, 0x4e, 0xc3
+ };
+ if (!TEST_ptr(p = BN_bin2bn(out_p, sizeof(out_p), NULL))
+ || !TEST_ptr(q = BN_bin2bn(out_q, sizeof(out_q), NULL))
+ || !TEST_ptr(g = BN_bin2bn(out_g, sizeof(out_g), NULL))
+ || !TEST_ptr(pub = BN_bin2bn(out_pub, sizeof(out_pub), NULL))
+ || !TEST_ptr(priv = BN_bin2bn(out_priv, sizeof(out_priv), NULL))
+ || !TEST_ptr(priv2 = BN_dup(priv))
+ || !TEST_ptr(badq = BN_new())
+ || !TEST_true(BN_set_word(badq, 1))
+ || !TEST_ptr(badpriv = BN_new())
+ || !TEST_true(BN_set_word(badpriv, 0))
+ || !TEST_ptr(dsa = DSA_new()))
+ goto err;
+
+ if (!TEST_true(DSA_set0_pqg(dsa, p, q, g)))
+ goto err;
+ p = q = g = NULL;
+
+ if (!TEST_true(DSA_set0_key(dsa, pub, priv)))
+ goto err;
+ pub = priv = NULL;
+
+ if (!TEST_int_le(DSA_size(dsa), sizeof(signature)))
+ goto err;
+
+ /* Test passing signature as NULL */
+ if (!TEST_true(DSA_sign(0, msg, sizeof(msg), NULL, &signature_len, dsa)))
+ goto err;
+
+ if (!TEST_true(DSA_sign(0, msg, sizeof(msg), signature, &signature_len, dsa)))
+ goto err;
+
+ /* Test using a private key of zero fails - this causes an infinite loop without the retry test */
+ if (!TEST_true(DSA_set0_key(dsa, NULL, badpriv)))
+ goto err;
+ badpriv = NULL;
+ if (!TEST_false(DSA_sign(0, msg, sizeof(msg), signature, &signature_len, dsa)))
+ goto err;
+
+ /* Restore private and set a bad q - this caused an infinite loop in the setup */
+ if (!TEST_true(DSA_set0_key(dsa, NULL, priv2)))
+ goto err;
+ priv2 = NULL;
+ if (!TEST_true(DSA_set0_pqg(dsa, NULL, badq, NULL)))
+ goto err;
+ badq = NULL;
+ if (!TEST_false(DSA_sign(0, msg, sizeof(msg), signature, &signature_len, dsa)))
+ goto err;
+
+ ret = 1;
+err:
+ BN_free(badq);
+ BN_free(badpriv);
+ BN_free(pub);
+ BN_free(priv);
+ BN_free(priv2);
+ BN_free(g);
+ BN_free(q);
+ BN_free(p);
+ DSA_free(dsa);
+ return ret;
+}
+
+static int test_dsa_sig_neg_param(void)
+{
+ int ret = 0, setpqg = 0;
+ DSA *dsa = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL, *priv = NULL, *pub = NULL;
+ const unsigned char msg[] = { 0x00 };
+ unsigned int signature_len;
+ unsigned char signature[64];
+
+ static unsigned char out_priv[] = {
+ 0x17, 0x00, 0xb2, 0x8d, 0xcb, 0x24, 0xc9, 0x98,
+ 0xd0, 0x7f, 0x1f, 0x83, 0x1a, 0xa1, 0xc4, 0xa4,
+ 0xf8, 0x0f, 0x7f, 0x12
+ };
+ static unsigned char out_pub[] = {
+ 0x04, 0x72, 0xee, 0x8d, 0xaa, 0x4d, 0x89, 0x60,
+ 0x0e, 0xb2, 0xd4, 0x38, 0x84, 0xa2, 0x2a, 0x60,
+ 0x5f, 0x67, 0xd7, 0x9e, 0x24, 0xdd, 0xe8, 0x50,
+ 0xf2, 0x23, 0x71, 0x55, 0x53, 0x94, 0x0d, 0x6b,
+ 0x2e, 0xcd, 0x30, 0xda, 0x6f, 0x1e, 0x2c, 0xcf,
+ 0x59, 0xbe, 0x05, 0x6c, 0x07, 0x0e, 0xc6, 0x38,
+ 0x05, 0xcb, 0x0c, 0x44, 0x0a, 0x08, 0x13, 0xb6,
+ 0x0f, 0x14, 0xde, 0x4a, 0xf6, 0xed, 0x4e, 0xc3
+ };
+ if (!TEST_ptr(p = BN_bin2bn(out_p, sizeof(out_p), NULL))
+ || !TEST_ptr(q = BN_bin2bn(out_q, sizeof(out_q), NULL))
+ || !TEST_ptr(g = BN_bin2bn(out_g, sizeof(out_g), NULL))
+ || !TEST_ptr(pub = BN_bin2bn(out_pub, sizeof(out_pub), NULL))
+ || !TEST_ptr(priv = BN_bin2bn(out_priv, sizeof(out_priv), NULL))
+ || !TEST_ptr(dsa = DSA_new()))
+ goto err;
+
+ if (!TEST_true(DSA_set0_pqg(dsa, p, q, g)))
+ goto err;
+ setpqg = 1;
+
+ if (!TEST_true(DSA_set0_key(dsa, pub, priv)))
+ goto err;
+ pub = priv = NULL;
+
+ BN_set_negative(p, 1);
+ if (!TEST_false(DSA_sign(0, msg, sizeof(msg), signature, &signature_len, dsa)))
+ goto err;
+
+ BN_set_negative(p, 0);
+ BN_set_negative(q, 1);
+ if (!TEST_false(DSA_sign(0, msg, sizeof(msg), signature, &signature_len, dsa)))
+ goto err;
+
+ BN_set_negative(q, 0);
+ BN_set_negative(g, 1);
+ if (!TEST_false(DSA_sign(0, msg, sizeof(msg), signature, &signature_len, dsa)))
+ goto err;
+
+ BN_set_negative(p, 1);
+ BN_set_negative(q, 1);
+ BN_set_negative(g, 1);
+ if (!TEST_false(DSA_sign(0, msg, sizeof(msg), signature, &signature_len, dsa)))
+ goto err;
+
+ ret = 1;
+err:
+ BN_free(pub);
+ BN_free(priv);
+
+ if (setpqg == 0) {
+ BN_free(g);
+ BN_free(q);
+ BN_free(p);
+ }
+ DSA_free(dsa);
+ return ret;
+}
+
+#endif /* OPENSSL_NO_DSA */
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_DSA
+ ADD_TEST(dsa_test);
+ ADD_TEST(dsa_keygen_test);
+ ADD_TEST(test_dsa_sig_infinite_loop);
+ ADD_TEST(test_dsa_sig_neg_param);
+ ADD_ALL_TESTS(test_dsa_default_paramgen_validate, 2);
+#endif
+ return 1;
+}
diff --git a/test/dtls_mtu_test.c b/test/dtls_mtu_test.c
new file mode 100644
index 000000000000..25844aa0ff58
--- /dev/null
+++ b/test/dtls_mtu_test.c
@@ -0,0 +1,242 @@
+/*
+ * Copyright 2016-2022 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 <string.h>
+
+#include <openssl/dtls1.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+
+#include "helpers/ssltestlib.h"
+#include "testutil.h"
+
+/* for SSL_READ_ETM() */
+#include "../ssl/ssl_local.h"
+
+static int debug = 0;
+
+static unsigned int clnt_psk_callback(SSL *ssl, const char *hint,
+ char *ident, unsigned int max_ident_len,
+ unsigned char *psk,
+ unsigned int max_psk_len)
+{
+ BIO_snprintf(ident, max_ident_len, "psk");
+
+ if (max_psk_len > 20)
+ max_psk_len = 20;
+ memset(psk, 0x5a, max_psk_len);
+
+ return max_psk_len;
+}
+
+static unsigned int srvr_psk_callback(SSL *ssl, const char *identity,
+ unsigned char *psk,
+ unsigned int max_psk_len)
+{
+ if (max_psk_len > 20)
+ max_psk_len = 20;
+ memset(psk, 0x5a, max_psk_len);
+ return max_psk_len;
+}
+
+static int mtu_test(SSL_CTX *ctx, const char *cs, int no_etm)
+{
+ SSL *srvr_ssl = NULL, *clnt_ssl = NULL;
+ BIO *sc_bio = NULL;
+ int i;
+ size_t s;
+ size_t mtus[30];
+ unsigned char buf[600];
+ int rv = 0;
+
+ memset(buf, 0x5a, sizeof(buf));
+
+ if (!TEST_true(create_ssl_objects(ctx, ctx, &srvr_ssl, &clnt_ssl,
+ NULL, NULL)))
+ goto end;
+
+ if (no_etm)
+ SSL_set_options(srvr_ssl, SSL_OP_NO_ENCRYPT_THEN_MAC);
+
+ if (!TEST_true(SSL_set_cipher_list(srvr_ssl, cs))
+ || !TEST_true(SSL_set_cipher_list(clnt_ssl, cs))
+ || !TEST_ptr(sc_bio = SSL_get_rbio(srvr_ssl))
+ || !TEST_true(create_ssl_connection(clnt_ssl, srvr_ssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ if (debug)
+ TEST_info("Channel established");
+
+ /* For record MTU values between 500 and 539, call DTLS_get_data_mtu()
+ * to query the payload MTU which will fit. */
+ for (i = 0; i < 30; i++) {
+ SSL_set_mtu(clnt_ssl, 500 + i);
+ mtus[i] = DTLS_get_data_mtu(clnt_ssl);
+ if (debug)
+ TEST_info("%s%s MTU for record mtu %d = %lu",
+ cs, no_etm ? "-noEtM" : "",
+ 500 + i, (unsigned long)mtus[i]);
+ if (!TEST_size_t_ne(mtus[i], 0)) {
+ TEST_info("Cipher %s MTU %d", cs, 500 + i);
+ goto end;
+ }
+ }
+
+ /* Now get out of the way */
+ SSL_set_mtu(clnt_ssl, 1000);
+
+ /*
+ * Now for all values in the range of payload MTUs, send a payload of
+ * that size and see what actual record size we end up with.
+ */
+ for (s = mtus[0]; s <= mtus[29]; s++) {
+ size_t reclen;
+
+ if (!TEST_int_eq(SSL_write(clnt_ssl, buf, s), (int)s))
+ goto end;
+ reclen = BIO_read(sc_bio, buf, sizeof(buf));
+ if (debug)
+ TEST_info("record %zu for payload %zu", reclen, s);
+
+ for (i = 0; i < 30; i++) {
+ /* DTLS_get_data_mtu() with record MTU 500+i returned mtus[i] ... */
+
+ if (!TEST_false(s <= mtus[i] && reclen > (size_t)(500 + i))) {
+ /*
+ * We sent a packet smaller than or equal to mtus[j] and
+ * that made a record *larger* than the record MTU 500+j!
+ */
+ TEST_error("%s: s=%lu, mtus[i]=%lu, reclen=%lu, i=%d",
+ cs, (unsigned long)s, (unsigned long)mtus[i],
+ (unsigned long)reclen, 500 + i);
+ goto end;
+ }
+ if (!TEST_false(s > mtus[i] && reclen <= (size_t)(500 + i))) {
+ /*
+ * We sent a *larger* packet than mtus[i] and that *still*
+ * fits within the record MTU 500+i, so DTLS_get_data_mtu()
+ * was overly pessimistic.
+ */
+ TEST_error("%s: s=%lu, mtus[i]=%lu, reclen=%lu, i=%d",
+ cs, (unsigned long)s, (unsigned long)mtus[i],
+ (unsigned long)reclen, 500 + i);
+ goto end;
+ }
+ }
+ }
+ rv = 1;
+ if (SSL_READ_ETM(clnt_ssl))
+ rv = 2;
+ end:
+ SSL_free(clnt_ssl);
+ SSL_free(srvr_ssl);
+ return rv;
+}
+
+static int run_mtu_tests(void)
+{
+ SSL_CTX *ctx = NULL;
+ STACK_OF(SSL_CIPHER) *ciphers;
+ int i, ret = 0;
+
+ if (!TEST_ptr(ctx = SSL_CTX_new(DTLS_method())))
+ goto end;
+
+ SSL_CTX_set_psk_server_callback(ctx, srvr_psk_callback);
+ SSL_CTX_set_psk_client_callback(ctx, clnt_psk_callback);
+ SSL_CTX_set_security_level(ctx, 0);
+
+ /*
+ * We only care about iterating over each enc/mac; we don't want to
+ * repeat the test for each auth/kx variant. So keep life simple and
+ * only do (non-DH) PSK.
+ */
+ if (!TEST_true(SSL_CTX_set_cipher_list(ctx, "PSK")))
+ goto end;
+
+ ciphers = SSL_CTX_get_ciphers(ctx);
+ for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
+ const SSL_CIPHER *cipher = sk_SSL_CIPHER_value(ciphers, i);
+ const char *cipher_name = SSL_CIPHER_get_name(cipher);
+
+ /* As noted above, only one test for each enc/mac variant. */
+ if (strncmp(cipher_name, "PSK-", 4) != 0)
+ continue;
+
+ if (!TEST_int_gt(ret = mtu_test(ctx, cipher_name, 0), 0))
+ break;
+ TEST_info("%s OK", cipher_name);
+ if (ret == 1)
+ continue;
+
+ /* mtu_test() returns 2 if it used Encrypt-then-MAC */
+ if (!TEST_int_gt(ret = mtu_test(ctx, cipher_name, 1), 0))
+ break;
+ TEST_info("%s without EtM OK", cipher_name);
+ }
+
+ end:
+ SSL_CTX_free(ctx);
+ return ret;
+}
+
+static int test_server_mtu_larger_than_max_fragment_length(void)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *srvr_ssl = NULL, *clnt_ssl = NULL;
+ int rv = 0;
+
+ if (!TEST_ptr(ctx = SSL_CTX_new(DTLS_method())))
+ goto end;
+
+ SSL_CTX_set_psk_server_callback(ctx, srvr_psk_callback);
+ SSL_CTX_set_psk_client_callback(ctx, clnt_psk_callback);
+
+#ifndef OPENSSL_NO_DH
+ if (!TEST_true(SSL_CTX_set_dh_auto(ctx, 1)))
+ goto end;
+#endif
+
+ if (!TEST_true(create_ssl_objects(ctx, ctx, &srvr_ssl, &clnt_ssl,
+ NULL, NULL)))
+ goto end;
+
+ SSL_set_options(srvr_ssl, SSL_OP_NO_QUERY_MTU);
+ if (!TEST_true(DTLS_set_link_mtu(srvr_ssl, 1500)))
+ goto end;
+
+ SSL_set_tlsext_max_fragment_length(clnt_ssl,
+ TLSEXT_max_fragment_length_512);
+
+ if (!TEST_true(create_ssl_connection(srvr_ssl, clnt_ssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ rv = 1;
+
+ end:
+ SSL_free(clnt_ssl);
+ SSL_free(srvr_ssl);
+ SSL_CTX_free(ctx);
+ return rv;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(run_mtu_tests);
+ ADD_TEST(test_server_mtu_larger_than_max_fragment_length);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ bio_s_mempacket_test_free();
+}
diff --git a/test/dtlstest.c b/test/dtlstest.c
new file mode 100644
index 000000000000..463b1d93179a
--- /dev/null
+++ b/test/dtlstest.c
@@ -0,0 +1,612 @@
+/*
+ * Copyright 2016-2023 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/bio.h>
+#include <openssl/crypto.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+
+#include "helpers/ssltestlib.h"
+#include "testutil.h"
+
+static char *cert = NULL;
+static char *privkey = NULL;
+static unsigned int timer_cb_count;
+
+#define NUM_TESTS 2
+
+
+#define DUMMY_CERT_STATUS_LEN 12
+
+static unsigned char certstatus[] = {
+ SSL3_RT_HANDSHAKE, /* Content type */
+ 0xfe, 0xfd, /* Record version */
+ 0, 1, /* Epoch */
+ 0, 0, 0, 0, 0, 0x0f, /* Record sequence number */
+ 0, DTLS1_HM_HEADER_LENGTH + DUMMY_CERT_STATUS_LEN - 2,
+ SSL3_MT_CERTIFICATE_STATUS, /* Cert Status handshake message type */
+ 0, 0, DUMMY_CERT_STATUS_LEN, /* Message len */
+ 0, 5, /* Message sequence */
+ 0, 0, 0, /* Fragment offset */
+ 0, 0, DUMMY_CERT_STATUS_LEN - 2, /* Fragment len */
+ 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80 /* Dummy data */
+};
+
+#define RECORD_SEQUENCE 10
+
+static const char dummy_cookie[] = "0123456";
+
+static int generate_cookie_cb(SSL *ssl, unsigned char *cookie,
+ unsigned int *cookie_len)
+{
+ memcpy(cookie, dummy_cookie, sizeof(dummy_cookie));
+ *cookie_len = sizeof(dummy_cookie);
+ return 1;
+}
+
+static int verify_cookie_cb(SSL *ssl, const unsigned char *cookie,
+ unsigned int cookie_len)
+{
+ return TEST_mem_eq(cookie, cookie_len, dummy_cookie, sizeof(dummy_cookie));
+}
+
+static unsigned int timer_cb(SSL *s, unsigned int timer_us)
+{
+ ++timer_cb_count;
+
+ if (timer_us == 0)
+ return 50000;
+ else
+ return 2 * timer_us;
+}
+
+static int test_dtls_unprocessed(int testidx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl1 = NULL, *clientssl1 = NULL;
+ BIO *c_to_s_fbio, *c_to_s_mempacket;
+ int testresult = 0;
+
+ timer_cb_count = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, DTLS_server_method(),
+ DTLS_client_method(),
+ DTLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+#ifndef OPENSSL_NO_DTLS1_2
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "AES128-SHA")))
+ goto end;
+#else
+ /* Default sigalgs are SHA1 based in <DTLS1.2 which is in security level 0 */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "AES128-SHA:@SECLEVEL=0"))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "AES128-SHA:@SECLEVEL=0")))
+ goto end;
+#endif
+
+ c_to_s_fbio = BIO_new(bio_f_tls_dump_filter());
+ if (!TEST_ptr(c_to_s_fbio))
+ goto end;
+
+ /* BIO is freed by create_ssl_connection on error */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl1, &clientssl1,
+ NULL, c_to_s_fbio)))
+ goto end;
+
+ DTLS_set_timer_cb(clientssl1, timer_cb);
+
+ if (testidx == 1)
+ certstatus[RECORD_SEQUENCE] = 0xff;
+
+ /*
+ * Inject a dummy record from the next epoch. In test 0, this should never
+ * get used because the message sequence number is too big. In test 1 we set
+ * the record sequence number to be way off in the future.
+ */
+ c_to_s_mempacket = SSL_get_wbio(clientssl1);
+ c_to_s_mempacket = BIO_next(c_to_s_mempacket);
+ mempacket_test_inject(c_to_s_mempacket, (char *)certstatus,
+ sizeof(certstatus), 1, INJECT_PACKET_IGNORE_REC_SEQ);
+
+ /*
+ * Create the connection. We use "create_bare_ssl_connection" here so that
+ * we can force the connection to not do "SSL_read" once partly connected.
+ * We don't want to accidentally read the dummy records we injected because
+ * they will fail to decrypt.
+ */
+ if (!TEST_true(create_bare_ssl_connection(serverssl1, clientssl1,
+ SSL_ERROR_NONE, 0)))
+ goto end;
+
+ if (timer_cb_count == 0) {
+ printf("timer_callback was not called.\n");
+ goto end;
+ }
+
+ testresult = 1;
+ end:
+ SSL_free(serverssl1);
+ SSL_free(clientssl1);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+/* One record for the cookieless initial ClientHello */
+#define CLI_TO_SRV_COOKIE_EXCH 1
+
+/*
+ * In a resumption handshake we use 2 records for the initial ClientHello in
+ * this test because we are using a very small MTU and the ClientHello is
+ * bigger than in the non resumption case.
+ */
+#define CLI_TO_SRV_RESUME_COOKIE_EXCH 2
+#define SRV_TO_CLI_COOKIE_EXCH 1
+
+#define CLI_TO_SRV_EPOCH_0_RECS 3
+#define CLI_TO_SRV_EPOCH_1_RECS 1
+#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
+# define SRV_TO_CLI_EPOCH_0_RECS 10
+#else
+/*
+ * In this case we have no ServerKeyExchange message, because we don't have
+ * ECDHE or DHE. When it is present it gets fragmented into 3 records in this
+ * test.
+ */
+# define SRV_TO_CLI_EPOCH_0_RECS 9
+#endif
+#define SRV_TO_CLI_EPOCH_1_RECS 1
+#define TOTAL_FULL_HAND_RECORDS \
+ (CLI_TO_SRV_COOKIE_EXCH + SRV_TO_CLI_COOKIE_EXCH + \
+ CLI_TO_SRV_EPOCH_0_RECS + CLI_TO_SRV_EPOCH_1_RECS + \
+ SRV_TO_CLI_EPOCH_0_RECS + SRV_TO_CLI_EPOCH_1_RECS)
+
+#define CLI_TO_SRV_RESUME_EPOCH_0_RECS 3
+#define CLI_TO_SRV_RESUME_EPOCH_1_RECS 1
+#define SRV_TO_CLI_RESUME_EPOCH_0_RECS 2
+#define SRV_TO_CLI_RESUME_EPOCH_1_RECS 1
+#define TOTAL_RESUME_HAND_RECORDS \
+ (CLI_TO_SRV_RESUME_COOKIE_EXCH + SRV_TO_CLI_COOKIE_EXCH + \
+ CLI_TO_SRV_RESUME_EPOCH_0_RECS + CLI_TO_SRV_RESUME_EPOCH_1_RECS + \
+ SRV_TO_CLI_RESUME_EPOCH_0_RECS + SRV_TO_CLI_RESUME_EPOCH_1_RECS)
+
+#define TOTAL_RECORDS (TOTAL_FULL_HAND_RECORDS + TOTAL_RESUME_HAND_RECORDS)
+
+/*
+ * We are assuming a ServerKeyExchange message is sent in this test. If we don't
+ * have either DH or EC, then it won't be
+ */
+#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
+static int test_dtls_drop_records(int idx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ BIO *c_to_s_fbio, *mempackbio;
+ int testresult = 0;
+ int epoch = 0;
+ SSL_SESSION *sess = NULL;
+ int cli_to_srv_cookie, cli_to_srv_epoch0, cli_to_srv_epoch1;
+ int srv_to_cli_epoch0;
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, DTLS_server_method(),
+ DTLS_client_method(),
+ DTLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+#ifdef OPENSSL_NO_DTLS1_2
+ /* Default sigalgs are SHA1 based in <DTLS1.2 which is in security level 0 */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0"))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "DEFAULT:@SECLEVEL=0")))
+ goto end;
+#endif
+
+ if (!TEST_true(SSL_CTX_set_dh_auto(sctx, 1)))
+ goto end;
+
+ SSL_CTX_set_options(sctx, SSL_OP_COOKIE_EXCHANGE);
+ SSL_CTX_set_cookie_generate_cb(sctx, generate_cookie_cb);
+ SSL_CTX_set_cookie_verify_cb(sctx, verify_cookie_cb);
+
+ if (idx >= TOTAL_FULL_HAND_RECORDS) {
+ /* We're going to do a resumption handshake. Get a session first. */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_ptr(sess = SSL_get1_session(clientssl)))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ cli_to_srv_epoch0 = CLI_TO_SRV_RESUME_EPOCH_0_RECS;
+ cli_to_srv_epoch1 = CLI_TO_SRV_RESUME_EPOCH_1_RECS;
+ srv_to_cli_epoch0 = SRV_TO_CLI_RESUME_EPOCH_0_RECS;
+ cli_to_srv_cookie = CLI_TO_SRV_RESUME_COOKIE_EXCH;
+ idx -= TOTAL_FULL_HAND_RECORDS;
+ } else {
+ cli_to_srv_epoch0 = CLI_TO_SRV_EPOCH_0_RECS;
+ cli_to_srv_epoch1 = CLI_TO_SRV_EPOCH_1_RECS;
+ srv_to_cli_epoch0 = SRV_TO_CLI_EPOCH_0_RECS;
+ cli_to_srv_cookie = CLI_TO_SRV_COOKIE_EXCH;
+ }
+
+ c_to_s_fbio = BIO_new(bio_f_tls_dump_filter());
+ if (!TEST_ptr(c_to_s_fbio))
+ goto end;
+
+ /* BIO is freed by create_ssl_connection on error */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, c_to_s_fbio)))
+ goto end;
+
+ if (sess != NULL) {
+ if (!TEST_true(SSL_set_session(clientssl, sess)))
+ goto end;
+ }
+
+ DTLS_set_timer_cb(clientssl, timer_cb);
+ DTLS_set_timer_cb(serverssl, timer_cb);
+
+ /* Work out which record to drop based on the test number */
+ if (idx >= cli_to_srv_cookie + cli_to_srv_epoch0 + cli_to_srv_epoch1) {
+ mempackbio = SSL_get_wbio(serverssl);
+ idx -= cli_to_srv_cookie + cli_to_srv_epoch0 + cli_to_srv_epoch1;
+ if (idx >= SRV_TO_CLI_COOKIE_EXCH + srv_to_cli_epoch0) {
+ epoch = 1;
+ idx -= SRV_TO_CLI_COOKIE_EXCH + srv_to_cli_epoch0;
+ }
+ } else {
+ mempackbio = SSL_get_wbio(clientssl);
+ if (idx >= cli_to_srv_cookie + cli_to_srv_epoch0) {
+ epoch = 1;
+ idx -= cli_to_srv_cookie + cli_to_srv_epoch0;
+ }
+ mempackbio = BIO_next(mempackbio);
+ }
+ BIO_ctrl(mempackbio, MEMPACKET_CTRL_SET_DROP_EPOCH, epoch, NULL);
+ BIO_ctrl(mempackbio, MEMPACKET_CTRL_SET_DROP_REC, idx, NULL);
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ if (sess != NULL && !TEST_true(SSL_session_reused(clientssl)))
+ goto end;
+
+ /* If the test did what we planned then it should have dropped a record */
+ if (!TEST_int_eq((int)BIO_ctrl(mempackbio, MEMPACKET_CTRL_GET_DROP_REC, 0,
+ NULL), -1))
+ goto end;
+
+ testresult = 1;
+ end:
+ SSL_SESSION_free(sess);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif /* !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC) */
+
+static int test_cookie(void)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ int testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, DTLS_server_method(),
+ DTLS_client_method(),
+ DTLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+ SSL_CTX_set_options(sctx, SSL_OP_COOKIE_EXCHANGE);
+ SSL_CTX_set_cookie_generate_cb(sctx, generate_cookie_cb);
+ SSL_CTX_set_cookie_verify_cb(sctx, verify_cookie_cb);
+
+#ifdef OPENSSL_NO_DTLS1_2
+ /* Default sigalgs are SHA1 based in <DTLS1.2 which is in security level 0 */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0"))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "DEFAULT:@SECLEVEL=0")))
+ goto end;
+#endif
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ testresult = 1;
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+static int test_dtls_duplicate_records(void)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ int testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, DTLS_server_method(),
+ DTLS_client_method(),
+ DTLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+#ifdef OPENSSL_NO_DTLS1_2
+ /* Default sigalgs are SHA1 based in <DTLS1.2 which is in security level 0 */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0"))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "DEFAULT:@SECLEVEL=0")))
+ goto end;
+#endif
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ DTLS_set_timer_cb(clientssl, timer_cb);
+ DTLS_set_timer_cb(serverssl, timer_cb);
+
+ BIO_ctrl(SSL_get_wbio(clientssl), MEMPACKET_CTRL_SET_DUPLICATE_REC, 1, NULL);
+ BIO_ctrl(SSL_get_wbio(serverssl), MEMPACKET_CTRL_SET_DUPLICATE_REC, 1, NULL);
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ testresult = 1;
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+/*
+ * Test just sending a Finished message as the first message. Should fail due
+ * to an unexpected message.
+ */
+static int test_just_finished(void)
+{
+ int testresult = 0, ret;
+ SSL_CTX *sctx = NULL;
+ SSL *serverssl = NULL;
+ BIO *rbio = NULL, *wbio = NULL, *sbio = NULL;
+ unsigned char buf[] = {
+ /* Record header */
+ SSL3_RT_HANDSHAKE, /* content type */
+ (DTLS1_2_VERSION >> 8) & 0xff, /* protocol version hi byte */
+ DTLS1_2_VERSION & 0xff, /* protocol version lo byte */
+ 0, 0, /* epoch */
+ 0, 0, 0, 0, 0, 0, /* record sequence */
+ 0, DTLS1_HM_HEADER_LENGTH + SHA_DIGEST_LENGTH, /* record length */
+
+ /* Message header */
+ SSL3_MT_FINISHED, /* message type */
+ 0, 0, SHA_DIGEST_LENGTH, /* message length */
+ 0, 0, /* message sequence */
+ 0, 0, 0, /* fragment offset */
+ 0, 0, SHA_DIGEST_LENGTH, /* fragment length */
+
+ /* Message body */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, DTLS_server_method(),
+ NULL, 0, 0,
+ &sctx, NULL, cert, privkey)))
+ return 0;
+
+ serverssl = SSL_new(sctx);
+ rbio = BIO_new(BIO_s_mem());
+ wbio = BIO_new(BIO_s_mem());
+
+ if (!TEST_ptr(serverssl) || !TEST_ptr(rbio) || !TEST_ptr(wbio))
+ goto end;
+
+ sbio = rbio;
+ SSL_set0_rbio(serverssl, rbio);
+ SSL_set0_wbio(serverssl, wbio);
+ rbio = wbio = NULL;
+ DTLS_set_timer_cb(serverssl, timer_cb);
+
+ if (!TEST_int_eq(BIO_write(sbio, buf, sizeof(buf)), sizeof(buf)))
+ goto end;
+
+ /* We expect the attempt to process the message to fail */
+ if (!TEST_int_le(ret = SSL_accept(serverssl), 0))
+ goto end;
+
+ /* Check that we got the error we were expecting */
+ if (!TEST_int_eq(SSL_get_error(serverssl, ret), SSL_ERROR_SSL))
+ goto end;
+
+ if (!TEST_int_eq(ERR_GET_REASON(ERR_get_error()), SSL_R_UNEXPECTED_MESSAGE))
+ goto end;
+
+ testresult = 1;
+ end:
+ BIO_free(rbio);
+ BIO_free(wbio);
+ SSL_free(serverssl);
+ SSL_CTX_free(sctx);
+
+ return testresult;
+}
+
+/*
+ * Test that swapping later records before Finished or CCS still works
+ * Test 0: Test receiving a handshake record early from next epoch on server side
+ * Test 1: Test receiving a handshake record early from next epoch on client side
+ * Test 2: Test receiving an app data record early from next epoch on client side
+ * Test 3: Test receiving an app data before Finished on client side
+ */
+static int test_swap_records(int idx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *sssl = NULL, *cssl = NULL;
+ int testresult = 0;
+ BIO *bio;
+ char msg[] = { 0x00, 0x01, 0x02, 0x03 };
+ char buf[10];
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, DTLS_server_method(),
+ DTLS_client_method(),
+ DTLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+#ifndef OPENSSL_NO_DTLS1_2
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "AES128-SHA")))
+ goto end;
+#else
+ /* Default sigalgs are SHA1 based in <DTLS1.2 which is in security level 0 */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "AES128-SHA:@SECLEVEL=0"))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "AES128-SHA:@SECLEVEL=0")))
+ goto end;
+#endif
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &sssl, &cssl,
+ NULL, NULL)))
+ goto end;
+
+ /* Send flight 1: ClientHello */
+ if (!TEST_int_le(SSL_connect(cssl), 0))
+ goto end;
+
+ /* Recv flight 1, send flight 2: ServerHello, Certificate, ServerHelloDone */
+ if (!TEST_int_le(SSL_accept(sssl), 0))
+ goto end;
+
+ /* Recv flight 2, send flight 3: ClientKeyExchange, CCS, Finished */
+ if (!TEST_int_le(SSL_connect(cssl), 0))
+ goto end;
+
+ if (idx == 0) {
+ /* Swap Finished and CCS within the datagram */
+ bio = SSL_get_wbio(cssl);
+ if (!TEST_ptr(bio)
+ || !TEST_true(mempacket_swap_epoch(bio)))
+ goto end;
+ }
+
+ /* Recv flight 3, send flight 4: datagram 0(NST, CCS) datagram 1(Finished) */
+ if (!TEST_int_gt(SSL_accept(sssl), 0))
+ goto end;
+
+ /* Send flight 4 (cont'd): datagram 2(app data) */
+ if (!TEST_int_eq(SSL_write(sssl, msg, sizeof(msg)), (int)sizeof(msg)))
+ goto end;
+
+ bio = SSL_get_wbio(sssl);
+ if (!TEST_ptr(bio))
+ goto end;
+ if (idx == 1) {
+ /* Finished comes before NST/CCS */
+ if (!TEST_true(mempacket_move_packet(bio, 0, 1)))
+ goto end;
+ } else if (idx == 2) {
+ /* App data comes before NST/CCS */
+ if (!TEST_true(mempacket_move_packet(bio, 0, 2)))
+ goto end;
+ } else if (idx == 3) {
+ /* App data comes before Finished */
+ bio = SSL_get_wbio(sssl);
+ if (!TEST_true(mempacket_move_packet(bio, 1, 2)))
+ goto end;
+ }
+
+ /*
+ * Recv flight 4 (datagram 1): NST, CCS, + flight 5: app data
+ * + flight 4 (datagram 2): Finished
+ */
+ if (!TEST_int_gt(SSL_connect(cssl), 0))
+ goto end;
+
+ if (idx == 0 || idx == 1) {
+ /* App data was not received early, so it should not be pending */
+ if (!TEST_int_eq(SSL_pending(cssl), 0)
+ || !TEST_false(SSL_has_pending(cssl)))
+ goto end;
+
+ } else {
+ /* We received the app data early so it should be buffered already */
+ if (!TEST_int_eq(SSL_pending(cssl), (int)sizeof(msg))
+ || !TEST_true(SSL_has_pending(cssl)))
+ goto end;
+ }
+
+ /*
+ * Recv flight 5 (app data)
+ */
+ if (!TEST_int_eq(SSL_read(cssl, buf, sizeof(buf)), (int)sizeof(msg)))
+ goto end;
+
+ testresult = 1;
+ end:
+ SSL_free(cssl);
+ SSL_free(sssl);
+ SSL_CTX_free(cctx);
+ SSL_CTX_free(sctx);
+ return testresult;
+}
+
+OPT_TEST_DECLARE_USAGE("certfile privkeyfile\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(cert = test_get_argument(0))
+ || !TEST_ptr(privkey = test_get_argument(1)))
+ return 0;
+
+ ADD_ALL_TESTS(test_dtls_unprocessed, NUM_TESTS);
+#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
+ ADD_ALL_TESTS(test_dtls_drop_records, TOTAL_RECORDS);
+#endif
+ ADD_TEST(test_cookie);
+ ADD_TEST(test_dtls_duplicate_records);
+ ADD_TEST(test_just_finished);
+ ADD_ALL_TESTS(test_swap_records, 4);
+
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ bio_f_tls_dump_filter_free();
+ bio_s_mempacket_test_free();
+}
diff --git a/test/dtlsv1listentest.c b/test/dtlsv1listentest.c
new file mode 100644
index 000000000000..212bdfd78217
--- /dev/null
+++ b/test/dtlsv1listentest.c
@@ -0,0 +1,357 @@
+/*
+ * Copyright 2016-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
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/ssl.h>
+#include <openssl/bio.h>
+#include <openssl/err.h>
+#include <openssl/conf.h>
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_SOCK
+
+/* Just a ClientHello without a cookie */
+static const unsigned char clienthello_nocookie[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
+ 0x00, 0x3A, /* Record Length */
+ 0x01, /* ClientHello */
+ 0x00, 0x00, 0x2E, /* Message length */
+ 0x00, 0x00, /* Message sequence */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x2E, /* Fragment length */
+ 0xFE, 0xFD, /* DTLSv1.2 */
+ 0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
+ 0x00, /* Session id len */
+ 0x00, /* Cookie len */
+ 0x00, 0x04, /* Ciphersuites len */
+ 0x00, 0x2f, /* AES128-SHA */
+ 0x00, 0xff, /* Empty reneg info SCSV */
+ 0x01, /* Compression methods len */
+ 0x00, /* Null compression */
+ 0x00, 0x00 /* Extensions len */
+};
+
+/* First fragment of a ClientHello without a cookie */
+static const unsigned char clienthello_nocookie_frag[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
+ 0x00, 0x30, /* Record Length */
+ 0x01, /* ClientHello */
+ 0x00, 0x00, 0x2E, /* Message length */
+ 0x00, 0x00, /* Message sequence */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x24, /* Fragment length */
+ 0xFE, 0xFD, /* DTLSv1.2 */
+ 0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
+ 0x00, /* Session id len */
+ 0x00 /* Cookie len */
+};
+
+/* First fragment of a ClientHello which is too short */
+static const unsigned char clienthello_nocookie_short[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
+ 0x00, 0x2F, /* Record Length */
+ 0x01, /* ClientHello */
+ 0x00, 0x00, 0x2E, /* Message length */
+ 0x00, 0x00, /* Message sequence */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x23, /* Fragment length */
+ 0xFE, 0xFD, /* DTLSv1.2 */
+ 0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
+ 0x00 /* Session id len */
+};
+
+/* Second fragment of a ClientHello */
+static const unsigned char clienthello_2ndfrag[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
+ 0x00, 0x38, /* Record Length */
+ 0x01, /* ClientHello */
+ 0x00, 0x00, 0x2E, /* Message length */
+ 0x00, 0x00, /* Message sequence */
+ 0x00, 0x00, 0x02, /* Fragment offset */
+ 0x00, 0x00, 0x2C, /* Fragment length */
+ /* Version skipped - sent in first fragment */
+ 0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
+ 0x00, /* Session id len */
+ 0x00, /* Cookie len */
+ 0x00, 0x04, /* Ciphersuites len */
+ 0x00, 0x2f, /* AES128-SHA */
+ 0x00, 0xff, /* Empty reneg info SCSV */
+ 0x01, /* Compression methods len */
+ 0x00, /* Null compression */
+ 0x00, 0x00 /* Extensions len */
+};
+
+/* A ClientHello with a good cookie */
+static const unsigned char clienthello_cookie[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
+ 0x00, 0x4E, /* Record Length */
+ 0x01, /* ClientHello */
+ 0x00, 0x00, 0x42, /* Message length */
+ 0x00, 0x00, /* Message sequence */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x42, /* Fragment length */
+ 0xFE, 0xFD, /* DTLSv1.2 */
+ 0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
+ 0x00, /* Session id len */
+ 0x14, /* Cookie len */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, /* Cookie */
+ 0x00, 0x04, /* Ciphersuites len */
+ 0x00, 0x2f, /* AES128-SHA */
+ 0x00, 0xff, /* Empty reneg info SCSV */
+ 0x01, /* Compression methods len */
+ 0x00, /* Null compression */
+ 0x00, 0x00 /* Extensions len */
+};
+
+/* A fragmented ClientHello with a good cookie */
+static const unsigned char clienthello_cookie_frag[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
+ 0x00, 0x44, /* Record Length */
+ 0x01, /* ClientHello */
+ 0x00, 0x00, 0x42, /* Message length */
+ 0x00, 0x00, /* Message sequence */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x38, /* Fragment length */
+ 0xFE, 0xFD, /* DTLSv1.2 */
+ 0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
+ 0x00, /* Session id len */
+ 0x14, /* Cookie len */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13 /* Cookie */
+};
+
+
+/* A ClientHello with a bad cookie */
+static const unsigned char clienthello_badcookie[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
+ 0x00, 0x4E, /* Record Length */
+ 0x01, /* ClientHello */
+ 0x00, 0x00, 0x42, /* Message length */
+ 0x00, 0x00, /* Message sequence */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x42, /* Fragment length */
+ 0xFE, 0xFD, /* DTLSv1.2 */
+ 0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
+ 0x00, /* Session id len */
+ 0x14, /* Cookie len */
+ 0x01, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, /* Cookie */
+ 0x00, 0x04, /* Ciphersuites len */
+ 0x00, 0x2f, /* AES128-SHA */
+ 0x00, 0xff, /* Empty reneg info SCSV */
+ 0x01, /* Compression methods len */
+ 0x00, /* Null compression */
+ 0x00, 0x00 /* Extensions len */
+};
+
+/* A fragmented ClientHello with the fragment boundary mid cookie */
+static const unsigned char clienthello_cookie_short[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
+ 0x00, 0x43, /* Record Length */
+ 0x01, /* ClientHello */
+ 0x00, 0x00, 0x42, /* Message length */
+ 0x00, 0x00, /* Message sequence */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x37, /* Fragment length */
+ 0xFE, 0xFD, /* DTLSv1.2 */
+ 0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
+ 0x00, /* Session id len */
+ 0x14, /* Cookie len */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12 /* Cookie */
+};
+
+/* Bad record - too short */
+static const unsigned char record_short[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* Record sequence number */
+};
+
+static const unsigned char verify[] = {
+ 0x16, /* Handshake */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x00, 0x00, /* Epoch */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
+ 0x00, 0x23, /* Record Length */
+ 0x03, /* HelloVerifyRequest */
+ 0x00, 0x00, 0x17, /* Message length */
+ 0x00, 0x00, /* Message sequence */
+ 0x00, 0x00, 0x00, /* Fragment offset */
+ 0x00, 0x00, 0x17, /* Fragment length */
+ 0xFE, 0xFF, /* DTLSv1.0 */
+ 0x14, /* Cookie len */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13 /* Cookie */
+};
+
+typedef struct {
+ const unsigned char *in;
+ unsigned int inlen;
+ /*
+ * GOOD == positive return value from DTLSv1_listen, no output yet
+ * VERIFY == 0 return value, HelloVerifyRequest sent
+ * DROP == 0 return value, no output
+ */
+ enum {GOOD, VERIFY, DROP} outtype;
+} tests;
+
+static tests testpackets[9] = {
+ { clienthello_nocookie, sizeof(clienthello_nocookie), VERIFY },
+ { clienthello_nocookie_frag, sizeof(clienthello_nocookie_frag), VERIFY },
+ { clienthello_nocookie_short, sizeof(clienthello_nocookie_short), DROP },
+ { clienthello_2ndfrag, sizeof(clienthello_2ndfrag), DROP },
+ { clienthello_cookie, sizeof(clienthello_cookie), GOOD },
+ { clienthello_cookie_frag, sizeof(clienthello_cookie_frag), GOOD },
+ { clienthello_badcookie, sizeof(clienthello_badcookie), VERIFY },
+ { clienthello_cookie_short, sizeof(clienthello_cookie_short), DROP },
+ { record_short, sizeof(record_short), DROP }
+};
+
+# define COOKIE_LEN 20
+
+static int cookie_gen(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)
+{
+ unsigned int i;
+
+ for (i = 0; i < COOKIE_LEN; i++, cookie++)
+ *cookie = i;
+ *cookie_len = COOKIE_LEN;
+
+ return 1;
+}
+
+static int cookie_verify(SSL *ssl, const unsigned char *cookie,
+ unsigned int cookie_len)
+{
+ unsigned int i;
+
+ if (cookie_len != COOKIE_LEN)
+ return 0;
+
+ for (i = 0; i < COOKIE_LEN; i++, cookie++) {
+ if (*cookie != i)
+ return 0;
+ }
+
+ return 1;
+}
+
+static int dtls_listen_test(int i)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *ssl = NULL;
+ BIO *outbio = NULL;
+ BIO *inbio = NULL;
+ BIO_ADDR *peer = NULL;
+ tests *tp = &testpackets[i];
+ char *data;
+ long datalen;
+ int ret, success = 0;
+
+ if (!TEST_ptr(ctx = SSL_CTX_new(DTLS_server_method()))
+ || !TEST_ptr(peer = BIO_ADDR_new()))
+ goto err;
+ SSL_CTX_set_cookie_generate_cb(ctx, cookie_gen);
+ SSL_CTX_set_cookie_verify_cb(ctx, cookie_verify);
+
+ /* Create an SSL object and set the BIO */
+ if (!TEST_ptr(ssl = SSL_new(ctx))
+ || !TEST_ptr(outbio = BIO_new(BIO_s_mem())))
+ goto err;
+ SSL_set0_wbio(ssl, outbio);
+
+ /* Set Non-blocking IO behaviour */
+ if (!TEST_ptr(inbio = BIO_new_mem_buf((char *)tp->in, tp->inlen)))
+ goto err;
+ BIO_set_mem_eof_return(inbio, -1);
+ SSL_set0_rbio(ssl, inbio);
+
+ /* Process the incoming packet */
+ if (!TEST_int_ge(ret = DTLSv1_listen(ssl, peer), 0))
+ goto err;
+ datalen = BIO_get_mem_data(outbio, &data);
+
+ if (tp->outtype == VERIFY) {
+ if (!TEST_int_eq(ret, 0)
+ || !TEST_mem_eq(data, datalen, verify, sizeof(verify)))
+ goto err;
+ } else if (datalen == 0) {
+ if (!TEST_true((ret == 0 && tp->outtype == DROP)
+ || (ret == 1 && tp->outtype == GOOD)))
+ goto err;
+ } else {
+ TEST_info("Test %d: unexpected data output", i);
+ goto err;
+ }
+ (void)BIO_reset(outbio);
+ inbio = NULL;
+ SSL_set0_rbio(ssl, NULL);
+ success = 1;
+
+ err:
+ /* Also frees up outbio */
+ SSL_free(ssl);
+ SSL_CTX_free(ctx);
+ BIO_free(inbio);
+ OPENSSL_free(peer);
+ return success;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_SOCK
+ ADD_ALL_TESTS(dtls_listen_test, (int)OSSL_NELEM(testpackets));
+#endif
+ return 1;
+}
diff --git a/test/ec_internal_test.c b/test/ec_internal_test.c
new file mode 100644
index 000000000000..8c2cd0563169
--- /dev/null
+++ b/test/ec_internal_test.c
@@ -0,0 +1,462 @@
+/*
+ * Copyright 2019-2022 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
+ */
+
+/*
+ * Low level APIs are deprecated for public use, but still ok for internal use.
+ */
+#include "internal/deprecated.h"
+
+#include "internal/nelem.h"
+#include "testutil.h"
+#include <openssl/ec.h>
+#include "ec_local.h"
+#include <openssl/objects.h>
+
+static size_t crv_len = 0;
+static EC_builtin_curve *curves = NULL;
+
+/* sanity checks field_inv function pointer in EC_METHOD */
+static int group_field_tests(const EC_GROUP *group, BN_CTX *ctx)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL;
+ int ret = 0;
+
+ if (group->meth->field_inv == NULL || group->meth->field_mul == NULL)
+ return 1;
+
+ BN_CTX_start(ctx);
+ a = BN_CTX_get(ctx);
+ b = BN_CTX_get(ctx);
+ if (!TEST_ptr(c = BN_CTX_get(ctx))
+ /* 1/1 = 1 */
+ || !TEST_true(group->meth->field_inv(group, b, BN_value_one(), ctx))
+ || !TEST_true(BN_is_one(b))
+ /* (1/a)*a = 1 */
+ || !TEST_true(BN_rand(a, BN_num_bits(group->field) - 1,
+ BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY))
+ || !TEST_true(group->meth->field_inv(group, b, a, ctx))
+ || (group->meth->field_encode &&
+ !TEST_true(group->meth->field_encode(group, a, a, ctx)))
+ || (group->meth->field_encode &&
+ !TEST_true(group->meth->field_encode(group, b, b, ctx)))
+ || !TEST_true(group->meth->field_mul(group, c, a, b, ctx))
+ || (group->meth->field_decode &&
+ !TEST_true(group->meth->field_decode(group, c, c, ctx)))
+ || !TEST_true(BN_is_one(c)))
+ goto err;
+
+ /* 1/0 = error */
+ BN_zero(a);
+ if (!TEST_false(group->meth->field_inv(group, b, a, ctx))
+ || !TEST_true(ERR_GET_LIB(ERR_peek_last_error()) == ERR_LIB_EC)
+ || !TEST_true(ERR_GET_REASON(ERR_peek_last_error()) ==
+ EC_R_CANNOT_INVERT)
+ /* 1/p = error */
+ || !TEST_false(group->meth->field_inv(group, b, group->field, ctx))
+ || !TEST_true(ERR_GET_LIB(ERR_peek_last_error()) == ERR_LIB_EC)
+ || !TEST_true(ERR_GET_REASON(ERR_peek_last_error()) ==
+ EC_R_CANNOT_INVERT))
+ goto err;
+
+ ERR_clear_error();
+ ret = 1;
+ err:
+ BN_CTX_end(ctx);
+ return ret;
+}
+
+/* wrapper for group_field_tests for explicit curve params and EC_METHOD */
+static int field_tests(const EC_METHOD *meth, const unsigned char *params,
+ int len)
+{
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL, *a = NULL, *b = NULL;
+ EC_GROUP *group = NULL;
+ int ret = 0;
+
+ if (!TEST_ptr(ctx = BN_CTX_new()))
+ return 0;
+
+ BN_CTX_start(ctx);
+ p = BN_CTX_get(ctx);
+ a = BN_CTX_get(ctx);
+ if (!TEST_ptr(b = BN_CTX_get(ctx))
+ || !TEST_ptr(group = EC_GROUP_new(meth))
+ || !TEST_true(BN_bin2bn(params, len, p))
+ || !TEST_true(BN_bin2bn(params + len, len, a))
+ || !TEST_true(BN_bin2bn(params + 2 * len, len, b))
+ || !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
+ || !group_field_tests(group, ctx))
+ goto err;
+ ret = 1;
+
+ err:
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ if (group != NULL)
+ EC_GROUP_free(group);
+ return ret;
+}
+
+/* NIST prime curve P-256 */
+static const unsigned char params_p256[] = {
+ /* p */
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ /* a */
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ /* b */
+ 0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7, 0xB3, 0xEB, 0xBD, 0x55,
+ 0x76, 0x98, 0x86, 0xBC, 0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6,
+ 0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B
+};
+
+#ifndef OPENSSL_NO_EC2M
+/* NIST binary curve B-283 */
+static const unsigned char params_b283[] = {
+ /* p */
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA1,
+ /* a */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ /* b */
+ 0x02, 0x7B, 0x68, 0x0A, 0xC8, 0xB8, 0x59, 0x6D, 0xA5, 0xA4, 0xAF, 0x8A,
+ 0x19, 0xA0, 0x30, 0x3F, 0xCA, 0x97, 0xFD, 0x76, 0x45, 0x30, 0x9F, 0xA2,
+ 0xA5, 0x81, 0x48, 0x5A, 0xF6, 0x26, 0x3E, 0x31, 0x3B, 0x79, 0xA2, 0xF5
+};
+#endif
+
+/* test EC_GFp_simple_method directly */
+static int field_tests_ecp_simple(void)
+{
+ TEST_info("Testing EC_GFp_simple_method()\n");
+ return field_tests(EC_GFp_simple_method(), params_p256,
+ sizeof(params_p256) / 3);
+}
+
+/* test EC_GFp_mont_method directly */
+static int field_tests_ecp_mont(void)
+{
+ TEST_info("Testing EC_GFp_mont_method()\n");
+ return field_tests(EC_GFp_mont_method(), params_p256,
+ sizeof(params_p256) / 3);
+}
+
+#ifndef OPENSSL_NO_EC2M
+/* test EC_GF2m_simple_method directly */
+static int field_tests_ec2_simple(void)
+{
+ TEST_info("Testing EC_GF2m_simple_method()\n");
+ return field_tests(EC_GF2m_simple_method(), params_b283,
+ sizeof(params_b283) / 3);
+}
+#endif
+
+/* test default method for a named curve */
+static int field_tests_default(int n)
+{
+ BN_CTX *ctx = NULL;
+ EC_GROUP *group = NULL;
+ int nid = curves[n].nid;
+ int ret = 0;
+
+ TEST_info("Testing curve %s\n", OBJ_nid2sn(nid));
+
+ if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(nid))
+ || !TEST_ptr(ctx = BN_CTX_new())
+ || !group_field_tests(group, ctx))
+ goto err;
+
+ ret = 1;
+ err:
+ if (group != NULL)
+ EC_GROUP_free(group);
+ if (ctx != NULL)
+ BN_CTX_free(ctx);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
+/*
+ * Tests a point known to cause an incorrect underflow in an old version of
+ * ecp_nist521.c
+ */
+static int underflow_test(void)
+{
+ BN_CTX *ctx = NULL;
+ EC_GROUP *grp = NULL;
+ EC_POINT *P = NULL, *Q = NULL, *R = NULL;
+ BIGNUM *x1 = NULL, *y1 = NULL, *z1 = NULL, *x2 = NULL, *y2 = NULL;
+ BIGNUM *k = NULL;
+ int testresult = 0;
+ const char *x1str =
+ "1534f0077fffffe87e9adcfe000000000000000000003e05a21d2400002e031b1f4"
+ "b80000c6fafa4f3c1288798d624a247b5e2ffffffffffffffefe099241900004";
+ const char *p521m1 =
+ "1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe";
+
+ ctx = BN_CTX_new();
+ if (!TEST_ptr(ctx))
+ return 0;
+
+ BN_CTX_start(ctx);
+ x1 = BN_CTX_get(ctx);
+ y1 = BN_CTX_get(ctx);
+ z1 = BN_CTX_get(ctx);
+ x2 = BN_CTX_get(ctx);
+ y2 = BN_CTX_get(ctx);
+ k = BN_CTX_get(ctx);
+ if (!TEST_ptr(k))
+ goto err;
+
+ grp = EC_GROUP_new_by_curve_name(NID_secp521r1);
+ P = EC_POINT_new(grp);
+ Q = EC_POINT_new(grp);
+ R = EC_POINT_new(grp);
+ if (!TEST_ptr(grp) || !TEST_ptr(P) || !TEST_ptr(Q) || !TEST_ptr(R))
+ goto err;
+
+ if (!TEST_int_gt(BN_hex2bn(&x1, x1str), 0)
+ || !TEST_int_gt(BN_hex2bn(&y1, p521m1), 0)
+ || !TEST_int_gt(BN_hex2bn(&z1, p521m1), 0)
+ || !TEST_int_gt(BN_hex2bn(&k, "02"), 0)
+ || !TEST_true(ossl_ec_GFp_simple_set_Jprojective_coordinates_GFp(grp, P, x1,
+ y1, z1, ctx))
+ || !TEST_true(EC_POINT_mul(grp, Q, NULL, P, k, ctx))
+ || !TEST_true(EC_POINT_get_affine_coordinates(grp, Q, x1, y1, ctx))
+ || !TEST_true(EC_POINT_dbl(grp, R, P, ctx))
+ || !TEST_true(EC_POINT_get_affine_coordinates(grp, R, x2, y2, ctx)))
+ goto err;
+
+ if (!TEST_int_eq(BN_cmp(x1, x2), 0)
+ || !TEST_int_eq(BN_cmp(y1, y2), 0))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ BN_CTX_end(ctx);
+ EC_POINT_free(P);
+ EC_POINT_free(Q);
+ EC_POINT_free(R);
+ EC_GROUP_free(grp);
+ BN_CTX_free(ctx);
+
+ return testresult;
+}
+#endif
+
+/*
+ * Tests behavior of the EC_KEY_set_private_key
+ */
+static int set_private_key(void)
+{
+ EC_KEY *key = NULL, *aux_key = NULL;
+ int testresult = 0;
+
+ key = EC_KEY_new_by_curve_name(NID_secp224r1);
+ aux_key = EC_KEY_new_by_curve_name(NID_secp224r1);
+ if (!TEST_ptr(key)
+ || !TEST_ptr(aux_key)
+ || !TEST_int_eq(EC_KEY_generate_key(key), 1)
+ || !TEST_int_eq(EC_KEY_generate_key(aux_key), 1))
+ goto err;
+
+ /* Test setting a valid private key */
+ if (!TEST_int_eq(EC_KEY_set_private_key(key, aux_key->priv_key), 1))
+ goto err;
+
+ /* Test compliance with legacy behavior for NULL private keys */
+ if (!TEST_int_eq(EC_KEY_set_private_key(key, NULL), 0)
+ || !TEST_ptr_null(key->priv_key))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ EC_KEY_free(key);
+ EC_KEY_free(aux_key);
+ return testresult;
+}
+
+/*
+ * Tests behavior of the decoded_from_explicit_params flag and API
+ */
+static int decoded_flag_test(void)
+{
+ EC_GROUP *grp;
+ EC_GROUP *grp_copy = NULL;
+ ECPARAMETERS *ecparams = NULL;
+ ECPKPARAMETERS *ecpkparams = NULL;
+ EC_KEY *key = NULL;
+ unsigned char *encodedparams = NULL;
+ const unsigned char *encp;
+ int encodedlen;
+ int testresult = 0;
+
+ /* Test EC_GROUP_new not setting the flag */
+ grp = EC_GROUP_new(EC_GFp_simple_method());
+ if (!TEST_ptr(grp)
+ || !TEST_int_eq(grp->decoded_from_explicit_params, 0))
+ goto err;
+ EC_GROUP_free(grp);
+
+ /* Test EC_GROUP_new_by_curve_name not setting the flag */
+ grp = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1);
+ if (!TEST_ptr(grp)
+ || !TEST_int_eq(grp->decoded_from_explicit_params, 0))
+ goto err;
+
+ /* Test EC_GROUP_new_from_ecparameters not setting the flag */
+ if (!TEST_ptr(ecparams = EC_GROUP_get_ecparameters(grp, NULL))
+ || !TEST_ptr(grp_copy = EC_GROUP_new_from_ecparameters(ecparams))
+ || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 0))
+ goto err;
+ EC_GROUP_free(grp_copy);
+ grp_copy = NULL;
+ ECPARAMETERS_free(ecparams);
+ ecparams = NULL;
+
+ /* Test EC_GROUP_new_from_ecpkparameters not setting the flag */
+ if (!TEST_int_eq(EC_GROUP_get_asn1_flag(grp), OPENSSL_EC_NAMED_CURVE)
+ || !TEST_ptr(ecpkparams = EC_GROUP_get_ecpkparameters(grp, NULL))
+ || !TEST_ptr(grp_copy = EC_GROUP_new_from_ecpkparameters(ecpkparams))
+ || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 0)
+ || !TEST_ptr(key = EC_KEY_new())
+ /* Test EC_KEY_decoded_from_explicit_params on key without a group */
+ || !TEST_int_eq(EC_KEY_decoded_from_explicit_params(key), -1)
+ || !TEST_int_eq(EC_KEY_set_group(key, grp_copy), 1)
+ /* Test EC_KEY_decoded_from_explicit_params negative case */
+ || !TEST_int_eq(EC_KEY_decoded_from_explicit_params(key), 0))
+ goto err;
+ EC_GROUP_free(grp_copy);
+ grp_copy = NULL;
+ ECPKPARAMETERS_free(ecpkparams);
+ ecpkparams = NULL;
+
+ /* Test d2i_ECPKParameters with named params not setting the flag */
+ if (!TEST_int_gt(encodedlen = i2d_ECPKParameters(grp, &encodedparams), 0)
+ || !TEST_ptr(encp = encodedparams)
+ || !TEST_ptr(grp_copy = d2i_ECPKParameters(NULL, &encp, encodedlen))
+ || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 0))
+ goto err;
+ EC_GROUP_free(grp_copy);
+ grp_copy = NULL;
+ OPENSSL_free(encodedparams);
+ encodedparams = NULL;
+
+ /* Asn1 flag stays set to explicit with EC_GROUP_new_from_ecpkparameters */
+ EC_GROUP_set_asn1_flag(grp, OPENSSL_EC_EXPLICIT_CURVE);
+ if (!TEST_ptr(ecpkparams = EC_GROUP_get_ecpkparameters(grp, NULL))
+ || !TEST_ptr(grp_copy = EC_GROUP_new_from_ecpkparameters(ecpkparams))
+ || !TEST_int_eq(EC_GROUP_get_asn1_flag(grp_copy), OPENSSL_EC_EXPLICIT_CURVE)
+ || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 0))
+ goto err;
+ EC_GROUP_free(grp_copy);
+ grp_copy = NULL;
+
+ /* Test d2i_ECPKParameters with explicit params setting the flag */
+ if (!TEST_int_gt(encodedlen = i2d_ECPKParameters(grp, &encodedparams), 0)
+ || !TEST_ptr(encp = encodedparams)
+ || !TEST_ptr(grp_copy = d2i_ECPKParameters(NULL, &encp, encodedlen))
+ || !TEST_int_eq(EC_GROUP_get_asn1_flag(grp_copy), OPENSSL_EC_EXPLICIT_CURVE)
+ || !TEST_int_eq(grp_copy->decoded_from_explicit_params, 1)
+ || !TEST_int_eq(EC_KEY_set_group(key, grp_copy), 1)
+ /* Test EC_KEY_decoded_from_explicit_params positive case */
+ || !TEST_int_eq(EC_KEY_decoded_from_explicit_params(key), 1))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ EC_KEY_free(key);
+ EC_GROUP_free(grp);
+ EC_GROUP_free(grp_copy);
+ ECPARAMETERS_free(ecparams);
+ ECPKPARAMETERS_free(ecpkparams);
+ OPENSSL_free(encodedparams);
+
+ return testresult;
+}
+
+static
+int ecpkparams_i2d2i_test(int n)
+{
+ EC_GROUP *g1 = NULL, *g2 = NULL;
+ FILE *fp = NULL;
+ int nid = curves[n].nid;
+ int testresult = 0;
+
+ /* create group */
+ if (!TEST_ptr(g1 = EC_GROUP_new_by_curve_name(nid)))
+ goto end;
+
+ /* encode params to file */
+ if (!TEST_ptr(fp = fopen("params.der", "wb"))
+ || !TEST_true(i2d_ECPKParameters_fp(fp, g1)))
+ goto end;
+
+ /* flush and close file */
+ if (!TEST_int_eq(fclose(fp), 0)) {
+ fp = NULL;
+ goto end;
+ }
+ fp = NULL;
+
+ /* decode params from file */
+ if (!TEST_ptr(fp = fopen("params.der", "rb"))
+ || !TEST_ptr(g2 = d2i_ECPKParameters_fp(fp, NULL)))
+ goto end;
+
+ testresult = 1; /* PASS */
+
+end:
+ if (fp != NULL)
+ fclose(fp);
+
+ EC_GROUP_free(g1);
+ EC_GROUP_free(g2);
+
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ crv_len = EC_get_builtin_curves(NULL, 0);
+ if (!TEST_ptr(curves = OPENSSL_malloc(sizeof(*curves) * crv_len))
+ || !TEST_true(EC_get_builtin_curves(curves, crv_len)))
+ return 0;
+
+ ADD_TEST(field_tests_ecp_simple);
+ ADD_TEST(field_tests_ecp_mont);
+#ifndef OPENSSL_NO_EC2M
+ ADD_TEST(field_tests_ec2_simple);
+#endif
+ ADD_ALL_TESTS(field_tests_default, crv_len);
+#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
+ ADD_TEST(underflow_test);
+#endif
+ ADD_TEST(set_private_key);
+ ADD_TEST(decoded_flag_test);
+ ADD_ALL_TESTS(ecpkparams_i2d2i_test, crv_len);
+
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OPENSSL_free(curves);
+}
diff --git a/test/ecdsatest.c b/test/ecdsatest.c
new file mode 100644
index 000000000000..33a52eb1b562
--- /dev/null
+++ b/test/ecdsatest.c
@@ -0,0 +1,399 @@
+/*
+ * Copyright 2002-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2002, Oracle and/or its affiliates. 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
+ */
+
+/*
+ * Low level APIs are deprecated for public use, but still ok for internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_EC is defined */
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_EC
+
+# include <openssl/evp.h>
+# include <openssl/bn.h>
+# include <openssl/ec.h>
+# include <openssl/rand.h>
+# include "internal/nelem.h"
+# include "ecdsatest.h"
+
+static fake_random_generate_cb fbytes;
+
+static const char *numbers[2];
+static size_t crv_len = 0;
+static EC_builtin_curve *curves = NULL;
+static OSSL_PROVIDER *fake_rand = NULL;
+
+static int fbytes(unsigned char *buf, size_t num, ossl_unused const char *name,
+ EVP_RAND_CTX *ctx)
+{
+ int ret = 0;
+ static int fbytes_counter = 0;
+ BIGNUM *tmp = NULL;
+
+ fake_rand_set_callback(ctx, NULL);
+
+ if (!TEST_ptr(tmp = BN_new())
+ || !TEST_int_lt(fbytes_counter, OSSL_NELEM(numbers))
+ || !TEST_true(BN_hex2bn(&tmp, numbers[fbytes_counter]))
+ /* tmp might need leading zeros so pad it out */
+ || !TEST_int_le(BN_num_bytes(tmp), num)
+ || !TEST_int_gt(BN_bn2binpad(tmp, buf, num), 0))
+ goto err;
+
+ fbytes_counter = (fbytes_counter + 1) % OSSL_NELEM(numbers);
+ ret = 1;
+ err:
+ BN_free(tmp);
+ return ret;
+}
+
+/*-
+ * This function hijacks the RNG to feed it the chosen ECDSA key and nonce.
+ * The ECDSA KATs are from:
+ * - the X9.62 draft (4)
+ * - NIST CAVP (720)
+ *
+ * It uses the low-level ECDSA_sign_setup instead of EVP to control the RNG.
+ * NB: This is not how applications should use ECDSA; this is only for testing.
+ *
+ * Tests the library can successfully:
+ * - generate public keys that matches those KATs
+ * - create ECDSA signatures that match those KATs
+ * - accept those signatures as valid
+ */
+static int x9_62_tests(int n)
+{
+ int nid, md_nid, ret = 0;
+ const char *r_in = NULL, *s_in = NULL, *tbs = NULL;
+ unsigned char *pbuf = NULL, *qbuf = NULL, *message = NULL;
+ unsigned char digest[EVP_MAX_MD_SIZE];
+ unsigned int dgst_len = 0;
+ long q_len, msg_len = 0;
+ size_t p_len;
+ EVP_MD_CTX *mctx = NULL;
+ EC_KEY *key = NULL;
+ ECDSA_SIG *signature = NULL;
+ BIGNUM *r = NULL, *s = NULL;
+ BIGNUM *kinv = NULL, *rp = NULL;
+ const BIGNUM *sig_r = NULL, *sig_s = NULL;
+
+ nid = ecdsa_cavs_kats[n].nid;
+ md_nid = ecdsa_cavs_kats[n].md_nid;
+ r_in = ecdsa_cavs_kats[n].r;
+ s_in = ecdsa_cavs_kats[n].s;
+ tbs = ecdsa_cavs_kats[n].msg;
+ numbers[0] = ecdsa_cavs_kats[n].d;
+ numbers[1] = ecdsa_cavs_kats[n].k;
+
+ TEST_info("ECDSA KATs for curve %s", OBJ_nid2sn(nid));
+
+#ifdef FIPS_MODULE
+ if (EC_curve_nid2nist(nid) == NULL)
+ return TEST_skip("skip non approved curves");
+#endif /* FIPS_MODULE */
+
+ if (!TEST_ptr(mctx = EVP_MD_CTX_new())
+ /* get the message digest */
+ || !TEST_ptr(message = OPENSSL_hexstr2buf(tbs, &msg_len))
+ || !TEST_true(EVP_DigestInit_ex(mctx, EVP_get_digestbynid(md_nid), NULL))
+ || !TEST_true(EVP_DigestUpdate(mctx, message, msg_len))
+ || !TEST_true(EVP_DigestFinal_ex(mctx, digest, &dgst_len))
+ /* create the key */
+ || !TEST_ptr(key = EC_KEY_new_by_curve_name(nid))
+ /* load KAT variables */
+ || !TEST_ptr(r = BN_new())
+ || !TEST_ptr(s = BN_new())
+ || !TEST_true(BN_hex2bn(&r, r_in))
+ || !TEST_true(BN_hex2bn(&s, s_in)))
+ goto err;
+
+ /* public key must match KAT */
+ fake_rand_set_callback(RAND_get0_private(NULL), &fbytes);
+ if (!TEST_true(EC_KEY_generate_key(key))
+ || !TEST_true(p_len = EC_KEY_key2buf(key, POINT_CONVERSION_UNCOMPRESSED,
+ &pbuf, NULL))
+ || !TEST_ptr(qbuf = OPENSSL_hexstr2buf(ecdsa_cavs_kats[n].Q, &q_len))
+ || !TEST_int_eq(q_len, p_len)
+ || !TEST_mem_eq(qbuf, q_len, pbuf, p_len))
+ goto err;
+
+ /* create the signature via ECDSA_sign_setup to avoid use of ECDSA nonces */
+ fake_rand_set_callback(RAND_get0_private(NULL), &fbytes);
+ if (!TEST_true(ECDSA_sign_setup(key, NULL, &kinv, &rp))
+ || !TEST_ptr(signature = ECDSA_do_sign_ex(digest, dgst_len,
+ kinv, rp, key))
+ /* verify the signature */
+ || !TEST_int_eq(ECDSA_do_verify(digest, dgst_len, signature, key), 1))
+ goto err;
+
+ /* compare the created signature with the expected signature */
+ ECDSA_SIG_get0(signature, &sig_r, &sig_s);
+ if (!TEST_BN_eq(sig_r, r)
+ || !TEST_BN_eq(sig_s, s))
+ goto err;
+
+ ret = 1;
+
+ err:
+ OPENSSL_free(message);
+ OPENSSL_free(pbuf);
+ OPENSSL_free(qbuf);
+ EC_KEY_free(key);
+ ECDSA_SIG_free(signature);
+ BN_free(r);
+ BN_free(s);
+ EVP_MD_CTX_free(mctx);
+ BN_clear_free(kinv);
+ BN_clear_free(rp);
+ return ret;
+}
+
+/*-
+ * Positive and negative ECDSA testing through EVP interface:
+ * - EVP_DigestSign (this is the one-shot version)
+ * - EVP_DigestVerify
+ *
+ * Tests the library can successfully:
+ * - create a key
+ * - create a signature
+ * - accept that signature
+ * - reject that signature with a different public key
+ * - reject that signature if its length is not correct
+ * - reject that signature after modifying the message
+ * - accept that signature after un-modifying the message
+ * - reject that signature after modifying the signature
+ * - accept that signature after un-modifying the signature
+ */
+static int set_sm2_id(EVP_MD_CTX *mctx, EVP_PKEY *pkey)
+{
+ /* With the SM2 key type, the SM2 ID is mandatory */
+ static const char sm2_id[] = { 1, 2, 3, 4, 'l', 'e', 't', 't', 'e', 'r' };
+ EVP_PKEY_CTX *pctx;
+
+ if (!TEST_ptr(pctx = EVP_MD_CTX_get_pkey_ctx(mctx))
+ || !TEST_int_gt(EVP_PKEY_CTX_set1_id(pctx, sm2_id, sizeof(sm2_id)), 0))
+ return 0;
+ return 1;
+}
+
+static int test_builtin(int n, int as)
+{
+ EC_KEY *eckey_neg = NULL, *eckey = NULL;
+ unsigned char dirt, offset, tbs[128];
+ unsigned char *sig = NULL;
+ EVP_PKEY *pkey_neg = NULL, *pkey = NULL, *dup_pk = NULL;
+ EVP_MD_CTX *mctx = NULL;
+ size_t sig_len;
+ int nid, ret = 0;
+ int temp;
+
+ nid = curves[n].nid;
+
+ /* skip built-in curves where ord(G) is not prime */
+ if (nid == NID_ipsec4 || nid == NID_ipsec3) {
+ TEST_info("skipped: ECDSA unsupported for curve %s", OBJ_nid2sn(nid));
+ return 1;
+ }
+
+ /*
+ * skip SM2 curve if 'as' is equal to EVP_PKEY_EC or, skip all curves
+ * except SM2 curve if 'as' is equal to EVP_PKEY_SM2
+ */
+ if (nid == NID_sm2 && as == EVP_PKEY_EC) {
+ TEST_info("skipped: EC key type unsupported for curve %s",
+ OBJ_nid2sn(nid));
+ return 1;
+ } else if (nid != NID_sm2 && as == EVP_PKEY_SM2) {
+ TEST_info("skipped: SM2 key type unsupported for curve %s",
+ OBJ_nid2sn(nid));
+ return 1;
+ }
+
+ TEST_info("testing ECDSA for curve %s as %s key type", OBJ_nid2sn(nid),
+ as == EVP_PKEY_EC ? "EC" : "SM2");
+
+ if (!TEST_ptr(mctx = EVP_MD_CTX_new())
+ /* get some random message data */
+ || !TEST_int_gt(RAND_bytes(tbs, sizeof(tbs)), 0)
+ /* real key */
+ || !TEST_ptr(eckey = EC_KEY_new_by_curve_name(nid))
+ || !TEST_true(EC_KEY_generate_key(eckey))
+ || !TEST_ptr(pkey = EVP_PKEY_new())
+ || !TEST_true(EVP_PKEY_assign_EC_KEY(pkey, eckey))
+ /* fake key for negative testing */
+ || !TEST_ptr(eckey_neg = EC_KEY_new_by_curve_name(nid))
+ || !TEST_true(EC_KEY_generate_key(eckey_neg))
+ || !TEST_ptr(pkey_neg = EVP_PKEY_new())
+ || !TEST_false(EVP_PKEY_assign_EC_KEY(pkey_neg, NULL))
+ || !TEST_true(EVP_PKEY_assign_EC_KEY(pkey_neg, eckey_neg)))
+ goto err;
+
+ if (!TEST_ptr(dup_pk = EVP_PKEY_dup(pkey))
+ || !TEST_int_eq(EVP_PKEY_eq(pkey, dup_pk), 1))
+ goto err;
+
+ temp = ECDSA_size(eckey);
+
+ if (!TEST_int_ge(temp, 0)
+ || !TEST_ptr(sig = OPENSSL_malloc(sig_len = (size_t)temp))
+ /* create a signature */
+ || !TEST_true(EVP_DigestSignInit(mctx, NULL, NULL, NULL, pkey))
+ || (as == EVP_PKEY_SM2 && !set_sm2_id(mctx, pkey))
+ || !TEST_true(EVP_DigestSign(mctx, sig, &sig_len, tbs, sizeof(tbs)))
+ || !TEST_int_le(sig_len, ECDSA_size(eckey))
+ || !TEST_true(EVP_MD_CTX_reset(mctx))
+ /* negative test, verify with wrong key, 0 return */
+ || !TEST_true(EVP_DigestVerifyInit(mctx, NULL, NULL, NULL, pkey_neg))
+ || (as == EVP_PKEY_SM2 && !set_sm2_id(mctx, pkey_neg))
+ || !TEST_int_eq(EVP_DigestVerify(mctx, sig, sig_len, tbs, sizeof(tbs)), 0)
+ || !TEST_true(EVP_MD_CTX_reset(mctx))
+ /* negative test, verify with wrong signature length, -1 return */
+ || !TEST_true(EVP_DigestVerifyInit(mctx, NULL, NULL, NULL, pkey))
+ || (as == EVP_PKEY_SM2 && !set_sm2_id(mctx, pkey))
+ || !TEST_int_eq(EVP_DigestVerify(mctx, sig, sig_len - 1, tbs, sizeof(tbs)), -1)
+ || !TEST_true(EVP_MD_CTX_reset(mctx))
+ /* positive test, verify with correct key, 1 return */
+ || !TEST_true(EVP_DigestVerifyInit(mctx, NULL, NULL, NULL, pkey))
+ || (as == EVP_PKEY_SM2 && !set_sm2_id(mctx, pkey))
+ || !TEST_int_eq(EVP_DigestVerify(mctx, sig, sig_len, tbs, sizeof(tbs)), 1)
+ || !TEST_true(EVP_MD_CTX_reset(mctx)))
+ goto err;
+
+ /* muck with the message, test it fails with 0 return */
+ tbs[0] ^= 1;
+ if (!TEST_true(EVP_DigestVerifyInit(mctx, NULL, NULL, NULL, pkey))
+ || (as == EVP_PKEY_SM2 && !set_sm2_id(mctx, pkey))
+ || !TEST_int_eq(EVP_DigestVerify(mctx, sig, sig_len, tbs, sizeof(tbs)), 0)
+ || !TEST_true(EVP_MD_CTX_reset(mctx)))
+ goto err;
+ /* un-muck and test it verifies */
+ tbs[0] ^= 1;
+ if (!TEST_true(EVP_DigestVerifyInit(mctx, NULL, NULL, NULL, pkey))
+ || (as == EVP_PKEY_SM2 && !set_sm2_id(mctx, pkey))
+ || !TEST_int_eq(EVP_DigestVerify(mctx, sig, sig_len, tbs, sizeof(tbs)), 1)
+ || !TEST_true(EVP_MD_CTX_reset(mctx)))
+ goto err;
+
+ /*-
+ * Muck with the ECDSA signature. The DER encoding is one of:
+ * - 30 LL 02 ..
+ * - 30 81 LL 02 ..
+ *
+ * - Sometimes this mucks with the high level DER sequence wrapper:
+ * in that case, DER-parsing of the whole signature should fail.
+ *
+ * - Sometimes this mucks with the DER-encoding of ECDSA.r:
+ * in that case, DER-parsing of ECDSA.r should fail.
+ *
+ * - Sometimes this mucks with the DER-encoding of ECDSA.s:
+ * in that case, DER-parsing of ECDSA.s should fail.
+ *
+ * - Sometimes this mucks with ECDSA.r:
+ * in that case, the signature verification should fail.
+ *
+ * - Sometimes this mucks with ECDSA.s:
+ * in that case, the signature verification should fail.
+ *
+ * The usual case is changing the integer value of ECDSA.r or ECDSA.s.
+ * Because the ratio of DER overhead to signature bytes is small.
+ * So most of the time it will be one of the last two cases.
+ *
+ * In any case, EVP_PKEY_verify should not return 1 for valid.
+ */
+ offset = tbs[0] % sig_len;
+ dirt = tbs[1] ? tbs[1] : 1;
+ sig[offset] ^= dirt;
+ if (!TEST_true(EVP_DigestVerifyInit(mctx, NULL, NULL, NULL, pkey))
+ || (as == EVP_PKEY_SM2 && !set_sm2_id(mctx, pkey))
+ || !TEST_int_ne(EVP_DigestVerify(mctx, sig, sig_len, tbs, sizeof(tbs)), 1)
+ || !TEST_true(EVP_MD_CTX_reset(mctx)))
+ goto err;
+ /* un-muck and test it verifies */
+ sig[offset] ^= dirt;
+ if (!TEST_true(EVP_DigestVerifyInit(mctx, NULL, NULL, NULL, pkey))
+ || (as == EVP_PKEY_SM2 && !set_sm2_id(mctx, pkey))
+ || !TEST_int_eq(EVP_DigestVerify(mctx, sig, sig_len, tbs, sizeof(tbs)), 1)
+ || !TEST_true(EVP_MD_CTX_reset(mctx)))
+ goto err;
+
+ ret = 1;
+ err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(pkey_neg);
+ EVP_PKEY_free(dup_pk);
+ EVP_MD_CTX_free(mctx);
+ OPENSSL_free(sig);
+ return ret;
+}
+
+static int test_builtin_as_ec(int n)
+{
+ return test_builtin(n, EVP_PKEY_EC);
+}
+
+# ifndef OPENSSL_NO_SM2
+static int test_builtin_as_sm2(int n)
+{
+ return test_builtin(n, EVP_PKEY_SM2);
+}
+# endif
+
+static int test_ecdsa_sig_NULL(void)
+{
+ int ret;
+ unsigned int siglen;
+ unsigned char dgst[128] = { 0 };
+ EC_KEY *eckey = NULL;
+
+ ret = TEST_ptr(eckey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1))
+ && TEST_int_eq(EC_KEY_generate_key(eckey), 1)
+ && TEST_int_eq(ECDSA_sign(0, dgst, sizeof(dgst), NULL, &siglen, eckey), 1)
+ && TEST_int_gt(siglen, 0);
+ EC_KEY_free(eckey);
+ return ret;
+}
+
+#endif /* OPENSSL_NO_EC */
+
+int setup_tests(void)
+{
+#ifdef OPENSSL_NO_EC
+ TEST_note("Elliptic curves are disabled.");
+#else
+ fake_rand = fake_rand_start(NULL);
+ if (fake_rand == NULL)
+ return 0;
+
+ /* get a list of all internal curves */
+ crv_len = EC_get_builtin_curves(NULL, 0);
+ if (!TEST_ptr(curves = OPENSSL_malloc(sizeof(*curves) * crv_len))
+ || !TEST_true(EC_get_builtin_curves(curves, crv_len))) {
+ fake_rand_finish(fake_rand);
+ return 0;
+ }
+ ADD_ALL_TESTS(test_builtin_as_ec, crv_len);
+ ADD_TEST(test_ecdsa_sig_NULL);
+# ifndef OPENSSL_NO_SM2
+ ADD_ALL_TESTS(test_builtin_as_sm2, crv_len);
+# endif
+ ADD_ALL_TESTS(x9_62_tests, OSSL_NELEM(ecdsa_cavs_kats));
+#endif
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+#ifndef OPENSSL_NO_EC
+ fake_rand_finish(fake_rand);
+ OPENSSL_free(curves);
+#endif
+}
diff --git a/test/ecdsatest.h b/test/ecdsatest.h
new file mode 100644
index 000000000000..63fe31902582
--- /dev/null
+++ b/test/ecdsatest.h
@@ -0,0 +1,10214 @@
+/*
+ * Copyright 2019 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_TEST_ECDSATEST_H
+# define OSSL_TEST_ECDSATEST_H
+
+/*-
+ * NIST CAVP ECDSA KATs:
+ * https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/dss/186-3ecdsatestvectors.zip
+ *
+ * sha256sum e0d9bee3f760ca3fabb82bd43dd04c13ee64ca9e0b719c6ea64fd52c9f0dd929
+ * 720 KATs from the SigGen.txt file.
+ *
+ * There are also 4 X9.62 KATs; two for prime fields and two for binary fields.
+ */
+
+typedef struct {
+ const int nid; /* curve NID */
+ const int md_nid; /* hash function NID */
+ const char *msg; /* message to sign */
+ const char *d; /* ECDSA private key */
+ const char *Q; /* ECDSA public key: Q = dG */
+ const char *k; /* ECDSA nonce */
+ const char *r; /* ECDSA signature (r,s) */
+ const char *s;
+} ecdsa_cavs_kat_t;
+
+static const ecdsa_cavs_kat_t ecdsa_cavs_kats[] = {
+ /* prime KATs from X9.62 */
+ {NID_X9_62_prime192v1, NID_sha1,
+ "616263", /* "abc" */
+ "1a8d598fc15bf0fd89030b5cb1111aeb92ae8baf5ea475fb",
+ "0462b12d60690cdcf330babab6e69763b471f994dd702d16a563bf5ec08069705ffff65e"
+ "5ca5c0d69716dfcb3474373902",
+ "fa6de29746bbeb7f8bb1e761f85f7dfb2983169d82fa2f4e",
+ "885052380ff147b734c330c43d39b2c4a89f29b0f749fead",
+ "e9ecc78106def82bf1070cf1d4d804c3cb390046951df686"},
+ {NID_X9_62_prime239v1, NID_sha1,
+ "616263", /* "abc" */
+ "7ef7c6fabefffdea864206e80b0b08a9331ed93e698561b64ca0f7777f3d",
+ "045b6dc53bc61a2548ffb0f671472de6c9521a9d2d2534e65abfcbd5fe0c707fd9f1ed2e"
+ "65f09f6ce0893baf5e8e31e6ae82ea8c3592335be906d38dee",
+ "656c7196bf87dcc5d1f1020906df2782360d36b2de7a17ece37d503784af",
+ "2cb7f36803ebb9c427c58d8265f11fc5084747133078fc279de874fbecb0",
+ "2eeae988104e9c2234a3c2beb1f53bfa5dc11ff36a875d1e3ccb1f7e45cf"},
+ /* prime KATs from NIST CAVP */
+ {NID_secp224r1, NID_sha224,
+ "699325d6fc8fbbb4981a6ded3c3a54ad2e4e3db8a5669201912064c64e700c139248cdc1"
+ "9495df081c3fc60245b9f25fc9e301b845b3d703a694986e4641ae3c7e5a19e6d6edbf1d"
+ "61e535f49a8fad5f4ac26397cfec682f161a5fcd32c5e780668b0181a91955157635536a"
+ "22367308036e2070f544ad4fff3d5122c76fad5d",
+ "16797b5c0c7ed5461e2ff1b88e6eafa03c0f46bf072000dfc830d615",
+ "04605495756e6e88f1d07ae5f98787af9b4da8a641d1a9492a12174eabf5cc733b17decc"
+ "806ef1df861a42505d0af9ef7c3df3959b8dfc6669",
+ "d9a5a7328117f48b4b8dd8c17dae722e756b3ff64bd29a527137eec0",
+ "2fc2cff8cdd4866b1d74e45b07d333af46b7af0888049d0fdbc7b0d6",
+ "8d9cc4c8ea93e0fd9d6431b9a1fd99b88f281793396321b11dac41eb"},
+ {NID_secp224r1, NID_sha224,
+ "7de42b44db0aa8bfdcdac9add227e8f0cc7ad1d94693beb5e1d325e5f3f85b3bd033fc25"
+ "e9469a89733a65d1fa641f7e67d668e7c71d736233c4cba20eb83c368c506affe77946b5"
+ "e2ec693798aecd7ff943cd8fab90affddf5ad5b8d1af332e6c5fe4a2df16837700b2781e"
+ "08821d4fbdd8373517f5b19f9e63b89cfeeeef6f",
+ "cf020a1ff36c28511191482ed1e5259c60d383606c581948c3fbe2c5",
+ "04fa21f85b99d3dc18c6d53351fbcb1e2d029c00fa7d1663a3dd94695ee9e79578f8988b"
+ "168edff1a8b34a5ed9598cc20acd1f0aed36715d88",
+ "c780d047454824af98677cf310117e5f9e99627d02414f136aed8e83",
+ "45145f06b566ec9fd0fee1b6c6551a4535c7a3bbfc0fede45f4f5038",
+ "7302dff12545b069cf27df49b26e4781270585463656f2834917c3ca"},
+ {NID_secp224r1, NID_sha224,
+ "af0da3adab82784909e2b3dadcecba21eced3c60d7572023dea171044d9a10e8ba67d31b"
+ "04904541b87fff32a10ccc6580869055fec6216a00320a28899859a6b61faba58a0bc10c"
+ "2ba07ea16f214c3ddcc9fc5622ad1253b63fe7e95227ae3c9caa9962cffc8b1c4e826003"
+ "6469d25ab0c8e3643a820b8b3a4d8d43e4b728f9",
+ "dde6f173fa9f307d206ce46b4f02851ebce9638a989330249fd30b73",
+ "04fc21a99b060afb0d9dbf3250ea3c4da10be94ce627a65874d8e4a630e8373ab7190890"
+ "326aac4aacca3eba89e15d1086a05434dd033fd3f3",
+ "6629366a156840477df4875cfba4f8faa809e394893e1f5525326d07",
+ "41f8e2b1ae5add7c24da8725a067585a3ad6d5a9ed9580beb226f23a",
+ "a5d71bff02dce997305dd337128046f36714398f4ef6647599712fae"},
+ {NID_secp224r1, NID_sha224,
+ "cfa56ae89727df6b7266f69d6636bf738f9e4f15f49c42a0123edac4b3743f32ea52389f"
+ "919ceb90575c4184897773b2f2fc5b3fcb354880f15c93383215d3c2551fcc1b4180a1ac"
+ "0f69c969bbc306acd115ce3976eff518540f43ad4076dbb5fbad9ce9b3234f1148b8f5e0"
+ "59192ff480fc4bcbd00d25f4d9f5ed4ba5693b6c",
+ "aeee9071248f077590ac647794b678ad371f8e0f1e14e9fbff49671e",
+ "04fad0a34991bbf89982ad9cf89337b4bd2565f84d5bdd004289fc1cc35d8b6764f28c81"
+ "63a12855a5c266efeb9388df4994b85a8b4f1bd3bc",
+ "1d35d027cd5a569e25c5768c48ed0c2b127c0f99cb4e52ea094fe689",
+ "2258184ef9f0fa698735379972ce9adf034af76017668bfcdab978de",
+ "866fb8e505dea6c909c2c9143ec869d1bac2282cf12366130ff2146c"},
+ {NID_secp224r1, NID_sha224,
+ "c223c8009018321b987a615c3414d2bb15954933569ca989de32d6bf11107bc47a330ab6"
+ "d88d9b50d106cf5777d1b736b14bc48deda1bc573a9a7dd42cd061860645306dce7a5ba8"
+ "c60f135a6a21999421ce8c4670fe7287a7e9ea3aa1e0fa82721f33e6e823957fe86e2283"
+ "c89ef92b13cd0333c4bb70865ae1919bf538ea34",
+ "29c204b2954e1406a015020f9d6b3d7c00658298feb2d17440b2c1a4",
+ "040e0fc15e775a75d45f872e5021b554cc0579da19125e1a49299c7630cb64fe462d025a"
+ "e2a1394746bdbf8251f7ca5a1d6bb13e0edf6b7b09",
+ "39547c10bb947d69f6c3af701f2528e011a1e80a6d04cc5a37466c02",
+ "86622c376d326cdf679bcabf8eb034bf49f0c188f3fc3afd0006325d",
+ "26613d3b33c70e635d7a998f254a5b15d2a3642bf321e8cff08f1e84"},
+ {NID_secp224r1, NID_sha224,
+ "1c27273d95182c74c100d85b5c08f4b26874c2abc87f127f304aedbf52ef6540eba16dd6"
+ "64ae1e9e30ea1e66ff9cc9ab5a80b5bcbd19dde88a29ff10b50a6abd73388e8071306c68"
+ "d0c9f6caa26b7e68de29312be959b9f4a5481f5a2ad2070a396ed3de21096541cf58c4a1"
+ "3308e08867565bf2df9d649357a83cdcf18d2cd9",
+ "8986a97b24be042a1547642f19678de4e281a68f1e794e343dabb131",
+ "042c070e68e8478341938f3d5026a1fe01e778cdffbebbdd7a4cd29209cde21c9c7c6590"
+ "ba300715a7adac278385a5175b6b4ea749c4b6a681",
+ "509712f9c0f3370f6a09154159975945f0107dd1cee7327c68eaa90b",
+ "57afda5139b180de96373c3d649700682e37efd56ae182335f081013",
+ "eb6cd58650cfb26dfdf21de32fa17464a6efc46830eedc16977342e6"},
+ {NID_secp224r1, NID_sha224,
+ "069ae374971627f6b8503f3aa63ab52bcf4f3fcae65b98cdbbf917a5b08a10dc76005671"
+ "4db279806a8d43485320e6fee0f1e0562e077ee270ace8d3c478d79bcdff9cf8b92fdea6"
+ "8421d4a276f8e62ae379387ae06b60af9eb3c40bd7a768aeffccdc8a08bc78ca2eca1806"
+ "1058043a0e441209c5c594842838a4d9d778a053",
+ "d9aa95e14cb34980cfddadddfa92bde1310acaff249f73ff5b09a974",
+ "043a0d4b8e5fad1ea1abb8d3fb742cd45cd0b76d136e5bbb33206ad120c90ac83276b2fa"
+ "3757b0f226cd7360a313bc96fd8329c76a7306cc7d",
+ "1f1739af68a3cee7c5f09e9e09d6485d9cd64cc4085bc2bc89795aaf",
+ "09bbdd003532d025d7c3204c00747cd52ecdfbc7ce3dde8ffbea23e1",
+ "1e745e80948779a5cc8dc5cb193beebb550ec9c2647f4948bf58ba7d"},
+ {NID_secp224r1, NID_sha224,
+ "d0d5ae3e33600aa21c1606caec449eee678c87cb593594be1fbb048cc7cfd076e5cc7132"
+ "ebe290c4c014e7a517a0d5972759acfa1438d9d2e5d236d19ac92136f6252b7e5bea7588"
+ "dcba6522b6b18128f003ecab5cb4908832fb5a375cf820f8f0e9ee870653a73dc2282f2d"
+ "45622a2f0e85cba05c567baf1b9862b79a4b244e",
+ "380fb6154ad3d2e755a17df1f047f84712d4ec9e47d34d4054ea29a8",
+ "044772c27cca3348b1801ae87b01cb564c8cf9b81c23cc74468a907927de9d253935b096"
+ "17a1655c42d385bf48504e06fa386f5fa533a21dcb",
+ "14dbdffa326ba2f3d64f79ff966d9ee6c1aba0d51e9a8e59f5686dc1",
+ "ff6d52a09ca4c3b82da0440864d6717e1be0b50b6dcf5e1d74c0ff56",
+ "09490be77bc834c1efaa23410dcbf800e6fae40d62a737214c5a4418"},
+ {NID_secp224r1, NID_sha224,
+ "79b7375ae7a4f2e4adad8765d14c1540cd9979db38076c157c1837c760ca6febbb18fd42"
+ "152335929b735e1a08041bd38d315cd4c6b7dd2729de8752f531f07fe4ddc4f1899debc0"
+ "311eef0019170b58e08895b439ddf09fbf0aeb1e2fd35c2ef7ae402308c3637733802601"
+ "dd218fb14c22f57870835b10818369d57d318405",
+ "6b98ec50d6b7f7ebc3a2183ff9388f75e924243827ddded8721186e2",
+ "041f249911b125348e6e0a473479105cc4b8cfb4fa32d897810fc69ffea17db03b9877d1"
+ "b6328329061ea67aec5a38a884362e9e5b7d7642dc",
+ "ab3a41fedc77d1f96f3103cc7dce215bf45054a755cf101735fef503",
+ "70ccc0824542e296d17a79320d422f1edcf9253840dafe4427033f40",
+ "e3823699c355b61ab1894be3371765fae2b720405a7ce5e790ca8c00"},
+ {NID_secp224r1, NID_sha224,
+ "8c7de96e6880d5b6efc19646b9d3d56490775cb3faab342e64db2e388c4bd9e94c4e69a6"
+ "3ccdb7e007a19711e69c06f106b71c983a6d97c4589045666c6ab5ea7b5b6d096ddf6fd3"
+ "5b819f1506a3c37ddd40929504f9f079c8d83820fc8493f97b2298aebe48fdb4ff472b29"
+ "018fc2b1163a22bfbb1de413e8645e871291a9f6",
+ "8dda0ef4170bf73077d685e7709f6f747ced08eb4cde98ef06ab7bd7",
+ "047df67b960ee7a2cb62b22932457360ab1e046c1ec84b91ae65642003c764ca9fc1b0cc"
+ "2233fa57bdcfedaab0131fb7b5f557d6ca57f4afe0",
+ "9ef6ebd178a76402968bc8ec8b257174a04fb5e2d65c1ab34ab039b9",
+ "eef9e8428105704133e0f19636c89e570485e577786df2b09f99602a",
+ "8c01f0162891e4b9536243cb86a6e5c177323cca09777366caf2693c"},
+ {NID_secp224r1, NID_sha224,
+ "c89766374c5a5ccef5823e7a9b54af835ac56afbbb517bd77bfecf3fea876bd0cc9ea486"
+ "e3d685cfe3fb05f25d9c67992cd7863c80a55c7a263249eb3996c4698ad7381131bf3700"
+ "b7b24d7ca281a100cf2b750e7f0f933e662a08d9f9e47d779fb03754bd20931262ff381a"
+ "2fe7d1dc94f4a0520de73fa72020494d3133ecf7",
+ "3dbe18cd88fa49febfcb60f0369a67b2379a466d906ac46a8b8d522b",
+ "04b10150fd797eb870d377f1dbfa197f7d0f0ad29965af573ec13cc42a17b63ccefbe27f"
+ "b2a1139e5757b1082aeaa564f478c23a8f631eed5c",
+ "385803b262ee2ee875838b3a645a745d2e199ae112ef73a25d68d15f",
+ "1d293b697f297af77872582eb7f543dc250ec79ad453300d264a3b70",
+ "517a91b89c4859fcc10834242e710c5f0fed90ac938aa5ccdb7c66de"},
+ {NID_secp224r1, NID_sha224,
+ "30f0e3b502eec5646929d48fd46aa73991d82079c7bd50a38b38ec0bd84167c8cf5ba39b"
+ "ec26999e70208af9b445046cd9d20c82b7629ca1e51bdd00daddbc35f9eb036a15ac5789"
+ "8642d9db09479a38cc80a2e41e380c8a766b2d623de2de798e1eabc02234b89b85d60154"
+ "460c3bf12764f3fbf17fcccc82df516a2fbe4ecf",
+ "c906b667f38c5135ea96c95722c713dbd125d61156a546f49ddaadc6",
+ "043c9b4ef1748a1925578658d3af51995b989ad760790157b25fe0982655648f4ff4edfb"
+ "899e9a13bd8d20f5c24b35dc6a6a4e42ed5983b4a0",
+ "b04d78d8ac40fefadb99f389a06d93f6b5b72198c1be02dbff6195f0",
+ "4bdd3c84647bad93dcaffd1b54eb87fc61a5704b19d7e6d756d11ad0",
+ "fdd81e5dca54158514f44ba2330271eff4c618330328451e2d93b9fb"},
+ {NID_secp224r1, NID_sha224,
+ "6bbb4bf987c8e5069e47c1a541b48b8a3e6d14bfd9ac6dfaa7503b64ab5e1a55f63e91cf"
+ "5c3e703ac27ad88756dd7fb2d73b909fc15302d0592b974d47e72e60ed339a40b34d39a4"
+ "9b69ea4a5d26ce86f3ca00a70f1cd416a6a5722e8f39d1f0e966981803d6f46dac34e4c7"
+ "640204cd0d9f1e53fc3acf30096cd00fa80b3ae9",
+ "3456745fbd51eac9b8095cd687b112f93d1b58352dbe02c66bb9b0cc",
+ "04f0acdfbc75a748a4a0ac55281754b5c4a364b7d61c5390b334daae1086587a6768f235"
+ "bf523fbfc6e062c7401ac2b0242cfe4e5fb34f4057",
+ "854b20c61bcdf7a89959dbf0985880bb14b628f01c65ef4f6446f1c1",
+ "a2601fbb9fe89f39814735febb349143baa934170ffb91c6448a7823",
+ "bf90f9305616020a0e34ef30803fc15fa97dffc0948452bbf6cb5f66"},
+ {NID_secp224r1, NID_sha224,
+ "05b8f8e56214d4217323f2066f974f638f0b83689fc4ed1201848230efdc1fbca8f70359"
+ "cecc921050141d3b02c2f17aa306fc2ce5fc06e7d0f4be162fcd985a0b687b4ba09b681c"
+ "b52ffe890bf5bb4a104cb2e770c04df433013605eb8c72a09902f4246d6c22b8c191ef1b"
+ "0bece10d5ce2744fc7345307dd1b41b6eff0ca89",
+ "2c522af64baaca7b7a08044312f5e265ec6e09b2272f462cc705e4c3",
+ "045fad3c047074b5de1960247d0cc216b4e3fb7f3b9cd960575c8479fce4fc9c7f05ff0b"
+ "040eb171fdd2a1dfe2572c564c2003a08c3179a422",
+ "9267763383f8db55eed5b1ca8f4937dc2e0ca6175066dc3d4a4586af",
+ "422e2e9fe535eb62f11f5f8ce87cf2e9ec65e61c06737cf6a0019ae6",
+ "116cfcf0965b7bc63aecade71d189d7e98a0434b124f2afbe3ccf0a9"},
+ {NID_secp224r1, NID_sha224,
+ "e5c979f0832242b143077bce6ef146a53bb4c53abfc033473c59f3c4095a68b7a504b609"
+ "f2ab163b5f88f374f0f3bff8762278b1f1c37323b9ed448e3de33e6443796a9ecaa466aa"
+ "75175375418186c352018a57ce874e44ae72401d5c0f401b5a51804724c10653fded9066"
+ "e8994d36a137fdeb9364601daeef09fd174dde4a",
+ "3eff7d07edda14e8beba397accfee060dbe2a41587a703bbe0a0b912",
+ "046dd84f4d66f362844e41a7913c40b4aad5fa9ba56bb44c2d2ed9efac15f65ebcdf2fd9"
+ "f8035385a330bdabec0f1cd9cc7bc31d2fadbe7cda",
+ "7bb48839d7717bab1fdde89bf4f7b4509d1c2c12510925e13655dead",
+ "127051d85326049115f307af2bc426f6c2d08f4774a0b496fb6982b1",
+ "6857e84418c1d1179333b4e5307e92abade0b74f7521ad78044bf597"},
+ {NID_secp224r1, NID_sha256,
+ "2b49de971bb0f705a3fb5914eb7638d72884a6c3550667dbfdf301adf26bde02f387fd42"
+ "6a31be6c9ff8bfe8690c8113c88576427f1466508458349fc86036afcfb66448b947707e"
+ "791e71f558b2bf4e7e7507773aaf4e9af51eda95cbce0a0f752b216f8a54a045d47801ff"
+ "410ee411a1b66a516f278327df2462fb5619470e",
+ "888fc992893bdd8aa02c80768832605d020b81ae0b25474154ec89aa",
+ "044c741e4d20103670b7161ae72271082155838418084335338ac38fa4db7919151ac285"
+ "87b72bad7ab180ec8e95ab9e2c8d81d9b9d7e2e383",
+ "06f7a56007825433c4c61153df1a135eee2f38ec687b492ed40d9c90",
+ "0909c9b9cae8d2790e29db6afdb45c04f5b072c4c20410c7dc9b6772",
+ "298f4fcae1fe271da1e0345d11d07a1fca43f58af4c113b909eedea0"},
+ {NID_secp224r1, NID_sha256,
+ "1fa7201d96ad4d190415f2656d1387fa886afc38e5cd18b8c60da367acf32c627d2c9ea1"
+ "9ef3f030e559fc2a21695cdbb65ddf6ba36a70af0d3fa292a32de31da6acc6108ab2be8b"
+ "d37843338f0c37c2d62648d3d49013edeb9e179dadf78bf885f95e712fcdfcc8a172e47c"
+ "09ab159f3a00ed7b930f628c3c48257e92fc7407",
+ "5b5a3e186e7d5b9b0fbdfc74a05e0a3d85dc4be4c87269190c839972",
+ "04897089f4ef05b943eeac06589f0e09ccc571a6add3eb1610a2fc830f62ba3f6b3e6f0f"
+ "062058b93e6f25b6041246c5be13584a41cae7e244",
+ "5b6f7eca2bcc5899fce41b8169d48cd57cf0c4a1b66a30a150072676",
+ "f12c9985d454ffbc899ebbbb6cf43e3debcac7f19029f8f2f35cce31",
+ "12fcb848adbd8b1b4c72b2b54a04d936e4a5f480ae2a3ea2e3c1baae"},
+ {NID_secp224r1, NID_sha256,
+ "74715fe10748a5b98b138f390f7ca9629c584c5d6ad268fc455c8de2e800b73fa1ea9aae"
+ "e85de58baa2ce9ce68d822fc31842c6b153baef3a12bf6b4541f74af65430ae931a64c8b"
+ "4950ad1c76b31aea8c229b3623390e233c112586aa5907bbe419841f54f0a7d6d19c003b"
+ "91dc84bbb59b14ec477a1e9d194c137e21c75bbb",
+ "f60b3a4d4e31c7005a3d2d0f91cb096d016a8ddb5ab10ecb2a549170",
+ "0440a4ab1e6a9f84b4dedb81795e6a7124d1cfdfd7ec64c5d4b9e3266683aa32a3c2fc06"
+ "8e62626f2dafce5d7f050e826e5c145cd2d13d1b27",
+ "c31150420dfb38ba8347e29add189ec3e38c14b0c541497fb90bf395",
+ "bf6c6daa89b21211ea2c9f45192d91603378d46b1a5057962dafaf12",
+ "cb6b237950e0f0369323055cd1f643528c7a64616f75b11c4ddd63c7"},
+ {NID_secp224r1, NID_sha256,
+ "d10131982dd1a1d839aba383cd72855bf41061c0cb04dfa1acad3181f240341d744ca600"
+ "2b52f25fb3c63f16d050c4a4ef2c0ebf5f16ce987558f4b9d4a5ad3c6b81b617de00e04b"
+ "a32282d8bf223bfedbb325b741dfdc8f56fa85c65d42f05f6a1330d8cc6664ad32050dd7"
+ "b9e3993f4d6c91e5e12cbd9e82196e009ad22560",
+ "c8fc474d3b1cba5981348de5aef0839e376f9f18e7588f1eed7c8c85",
+ "0466f49457ed15f67ed4042195856f052fe774077f61cebcb9efddc3653a6e3f3423eec7"
+ "308a69eb1b0416d67cc3b84d24f251d7cbdb45c079",
+ "5e5405ae9ab6164bb476c1bb021ec78480e0488736e4f8222920fbd9",
+ "7b7beaf9f696ca1a8051527478c4c075ab45aa4768937886dbf38618",
+ "93d4cf110a37c5a6f15c4e6024822118539e860dee2f60b8c3f462f6"},
+ {NID_secp224r1, NID_sha256,
+ "ef9dbd90ded96ad627a0a987ab90537a3e7acc1fdfa991088e9d999fd726e3ce1e1bd89a"
+ "7df08d8c2bf51085254c89dc67bc21e8a1a93f33a38c18c0ce3880e958ac3e3dbe8aec49"
+ "f981821c4ac6812dd29fab3a9ebe7fbd799fb50f12021b48d1d9abca8842547b3b99befa"
+ "612cc8b4ca5f9412e0352e72ab1344a0ac2913db",
+ "04ef5d2a45341e2ace9af8a6ebd25f6cde45453f55b7a724eb6c21f6",
+ "048d642868e4d0f55ee62a2052e6b806b566d2ac79dbde7939fe72577379505a57cd5690"
+ "4d2523b3e1281e9021167657d38aeb7d42fc8ec849",
+ "ec60ea6f3d6b74d102e5574182566b7e79a69699a307fee70a2d0d22",
+ "2fd7fcbb7832c97ce325301dd338b279a9e28b8933284d49c6eabcf6",
+ "550b2f1efc312805a6ed8f252e692d8ee19eaa5bcd5d0cda63a1a3f0"},
+ {NID_secp224r1, NID_sha256,
+ "4cc91f744ac858d3577e48813219aa3538dd813b186b42d1e6218376f07cc1cc448ddd6b"
+ "37240e98bf953f49cf54d65c12878b33c0bf6eb1c60254f0b6fa974f847e53abc56773ee"
+ "f6f29885dfc619e6a48fc15a667ca94001a0c945b6357a53221b0f4b266181456b0d2d25"
+ "e90708777f1a6f85971c00140c631c1991e0fd06",
+ "35d4bbe77d149812339e85c79483cb270bdac56bbf30b5ef3d1f4d39",
+ "047924b1d7f5920cce98e25094e40f2eb3eb80d70b17e14b3d36c3671c26c5af35f71e61"
+ "858582b7cc2b41790597c53ee514ffdf7a289d108c",
+ "751869c1d0e79eb30aae8fbfb6d97bfa332123fd6b6c72c9cd3c1796",
+ "26bb1b92b0f01e94eba5fa429271371db527ce857abba13bd1103f64",
+ "836aba9c63e1252c2b2d72a21e6a41b82241ebe32647e7f814652bcb"},
+ {NID_secp224r1, NID_sha256,
+ "58f43cc1924de4bc5867664adbc9d26b4f096a43aca47c27c52851b006dc2a658919ef9c"
+ "e5b5ac48372703be15ac51631c2bd84b88f479f113b0569a9a09e230ec1e8e573474c607"
+ "5284d3e57d973829af35325d9e7dab4a5f9b065155bbcaff3642a82ef4c9b9e127d3575c"
+ "050721653da3b087d3fa394192897a5519527d19",
+ "2c291a393281b75264c9b8817af684fa86a1cdc900822f74039dc5d6",
+ "0418cb5826ad60e6696bf07655032a3749f6577ca36da3ccd6e66a137c194e14820fe02d"
+ "784fd1363ff7a30399518309765bd3f4412d646da2",
+ "e2a860416229dfd3f5a5cc92344ca015093a543943a0d8f73bf2b2fd",
+ "00e300c1ef4a8c4ca5da6413856f8981db49de29bdf03f32ffc3ceab",
+ "f250f18a51ba5f63e1584097841099fa6ae4e98ee458c061d1d5aed7"},
+ {NID_secp224r1, NID_sha256,
+ "113a2806b052fde683ee09453098e402204155afb3776fd1cad3a9103421d327eab8f9ec"
+ "0dd050ffcc83f93b34ea707705fabeccfe43ab1a71c95298fd3ec769d99ead1066950eee"
+ "677d225816e0faad19cf69e1b35d16771689e2092cafe16d7c0dd7b0db73fffb8d0f3eae"
+ "d83004dd21e753530ec939c89ba25578fa5f785b",
+ "831ea25dbeda33d272a1382c5def0e83929170ab06a629eed6ee244b",
+ "04076518e393940d42dfd09819409d66966d8c9189c83d554a9cc8a08244d0ceaf4c0f50"
+ "e46bea4a52e30423ce3ada19edd363ac5694c65cb8",
+ "6be6dd9f6a083915ccba54626caf12d246d3aece0a7eda7d8d85599c",
+ "ff1460946e06fb6f5d35e8d2625ca70ffb9b45308e3fabf6ad8351b1",
+ "6029aa3990918e8cb8a388d53b0772e5cdfff49c3405fe0d3a95933a"},
+ {NID_secp224r1, NID_sha256,
+ "64cbfc8f2e2149a31b3e8a80c4a552f6c62aaeb7990b6e0ee55500a9d17be04213406578"
+ "caf315951086dff5c2af3b5ce17d425d185101ef26f86396ba3a129a4f3f8e2dd595f59e"
+ "fb6c0f5c2dcc394569d7268695e9ac7daa84203f1f1895f1f9e4b514a5c9cd23baa63454"
+ "710144fe735ad9b8f42d8c43267aa434a26d7e5f",
+ "70f74c7324ef137318b610ead8ddc5b964e0eed3750b20612fc2e67b",
+ "04279649e2a2918e683520cde3fc98b0ae58a7100e8de35e7c9cc797b6aa4de6be34be61"
+ "f02880139787b9038f4554a8ef1c994b887c2974b5",
+ "8e984864f86f7a2a73f3edda17dbccd13fac8fa4b872814abf223b1b",
+ "3b18736fa11d04e27e2614cda03a63ec11a180f357b0b3192920d09c",
+ "2f0f3dbd570727b14fbb29155538e62c930dd51c4035275c1365dc60"},
+ {NID_secp224r1, NID_sha256,
+ "a10a11c8e30fff118d371daf824f16c08200b83ea059436466a4611ccac93b2dea2de8c1"
+ "006f946196aef7fe9b0c251a391b0340f21797798278b412ff2b53842eec6450728e2bca"
+ "062f8337a2c204b9ea04ff660cd4d4db559f2f11c4d8ef199021339fcc82396f7a93926c"
+ "f5f247e37d8067fe50692de54f102bd5ab51925c",
+ "026be5789886d25039c11d7d58a11a6e1d52cb1d5657561f2165b8a8",
+ "043fa617c50b177da1a2bdb98b780ad21ad1195c4bd24465f6187de3c9e3fd8d8876dfd0"
+ "3a4a4e31a1acad3a08d983826d286c250c4e5620c1",
+ "0128b8e3f50731eb5fcc223517fc0cf6b96cd1d2807eb4524bc46f77",
+ "3a6b633f96f3d0b6d54f7fb29ac33709e4f0dd8fa0e51606ed9765ca",
+ "63e8c119dfa51784decd864f6911f2210a80f8f02d472d88df10d119"},
+ {NID_secp224r1, NID_sha256,
+ "b3f720bf566ffa369259f4361959ae0641d2755ec264a4c4349981df2b02563275b2b9ad"
+ "b5aee47f7a456760a971991ffed6b17809bb9694138d1677fa916123795239353158fc6b"
+ "22d10f20d26f5d2dcd8c56c44373eea5b93067dba2d7c5318dac2e9e8714873cb1b37f58"
+ "c011fd14fa1e535554efe05f468bfc8e11cd8b99",
+ "e79c18d935c2839644762867aa793201f96a3cde080c5968412ce784",
+ "04b7ae1e992b1c7fde1141f40bd913358538ca0f07f62b729f13cea327811252d12120e0"
+ "4805fc171a439d382c43b68a21e1a0bdf5e4ec1da4",
+ "7abedab1d36f4f0959a03d968b27dd5708223b66e0fc48594d827361",
+ "d35047d74e1e7305bb8c1a94e8ae47cb1591c3437a3e185e00afe710",
+ "d9c425c9d5feb776ac8952e6c4eee0ecd68aef2f0e7bff2e49c9185e"},
+ {NID_secp224r1, NID_sha256,
+ "0a398a46df7ccc48d1e7833f8bbc67100f1ef77a62dc78bbc115b2a662f9591fbaaa91ad"
+ "3d788e2fdd1b3164e45293d4f5686c151296901768028ac80ded4bf89c647ad35f0c7c4c"
+ "b318c0c757c1d83c44d850e5fd4677281b3f13b1ee54de79c8c042813f9d3312dcc6111a"
+ "68299cb7e829557d7f3d96e702f65aefc6499415",
+ "0d087f9d1f8ae29c9cf791490efc4a5789a9d52038c4b1d22494ad8c",
+ "04cd95cf8fb1cd21690f40d647f2353672a1076cc6c46bddaad2d0fc56934262f74d9ee0"
+ "f8a2754f64cb7415923d64bf00c94a39b52803f577",
+ "557d0e3995dc6377b3911546dd7aeaeec62a6d8f2af6a274382fc37f",
+ "56df0ea6afdcc232ceb41729eec00cf906b69b6e28423a36d3c92cc5",
+ "f4f70fd948c9a147f55317fdea7b8a84c33e721014552d5800d63edc"},
+ {NID_secp224r1, NID_sha256,
+ "8c33616821a6038b448d8918668977fcf1ef5aa0cf7c341837b39bbcc9bca875a3757f4b"
+ "392630e9995b9bbe4eb66978b877586adaa02f99d2344dae082a7603351d8ffcfca081ab"
+ "403cd0acb90d078dd1d0789c2eb3185c62bff2d9f04cd38e509e3b83c12ed0a5c6808fc4"
+ "2f7ba5b06acdc496c8ad9be648ee6a4505f8560f",
+ "0830aebb6577d3a3be3ba54a4501c987b0e0bb593267b9bbadb66583",
+ "04b88652020e083ccc1c43dc83d1881884dd4c7e3b4e3460b344b1ea6422b69b517f86d7"
+ "c26dc37c0f8feb4bb07fe876149fbcc3334fd2805b",
+ "e4f4a3280574c704c2fde47ca81ec883d27f2c5a961a294db7cda9d2",
+ "b30b8a0079d9a134b5e1618c2ac63e3fbe0e95866b9dbc5f423f2707",
+ "3dc36746610271ef66e0aa52cc2ccadc5c9b08dc769e4dc4f6538c11"},
+ {NID_secp224r1, NID_sha256,
+ "94d56535fd4edfe67a0daa6579f9d53bf6b7b8830ae2aeb62892ff59f18756ddf2811b44"
+ "9c7d20d65d54f8507de4e7c50eaa084830637812aa4b250a4d61ab67845be36e4a41cdc0"
+ "a70f8d6e3a63d4514f0dc197e6486015046a316153d5f3a3a4a0ae1ed7ea5fa55e12e73d"
+ "333333685c02e0eb636234ea7e6d4b76b4b76b5a",
+ "2acc9b97e625263e8e4cd164302c7d1e078bfcdd706111a13ccda5b2",
+ "04ce1a06f82df874dded37cca03b56c0648e4e8917ecd40ee73ee61588ceb6177b8f1ac7"
+ "c5c6e6e1f7737cc3026952ee392badd2cd7af32f9d",
+ "e401fa80f96480d437ed4f61a783888062ec33d530b188fd48016a6d",
+ "28674f447c4742e4087bbccfb522fbad4e18b56031d2ce8f532b078a",
+ "a5a7a13d15b423dd17771f73cea98d89dbffa846cc209b45c0e29b76"},
+ {NID_secp224r1, NID_sha256,
+ "5d8ebdf9eb28b47bdafaa36bf0b66a9eaf99b6c83959da4f2b1151b4f4ecd28fb115a64c"
+ "0cb9491093a7e9b9c53ec423e4c72e7765bb9c818da0e8c428667e44474a71db4867130c"
+ "77c40bfd8544b2d7b9d6464d2b8e6a48482153256a32437c3a747231f51134dd14c70340"
+ "7e31146a6fcde23bededcf16950486e90ca69ac0",
+ "f4e873d4fb944fb52323406f933815092b7672221de4d1c45917f3fc",
+ "040dc2cdddb990341adb1de73f02d87fc3822485a659a15145f4251d5fcf78b2a83c7352"
+ "eda1af2c74e1804ea04b35f76c04e89d90281dc2bb",
+ "5d1476c682a64162fd2fdc82696fc8cab1469a86f707ea2757416e40",
+ "82982b38ed465138df4018d7cfb835edcb591cb57446ca49d163782b",
+ "8ef1d7b326cabee7f7ab95b7b98d3c27a069c0fd95a1599c0ccb422b"},
+ {NID_secp224r1, NID_sha384,
+ "25e4416695f77551fdce276355528ccf1ddc2483821c5d22d751d50111ca2fadc6593b52"
+ "c74f4b5957494f1df25b0b2f86950d0d19229ec6506fee8581d2dd09d48418b146ff16bd"
+ "84a17ca0dc83b1888eb407376da6c8a88fa1e60b8c2a2471dfde4b3996ef673d5bde3d70"
+ "c434dc9f2488e9de16ae657d29e5e59ec922a1ec",
+ "62c572ee0d6f81b27e591d788bfc2f42b5105d2663078dfb58069ebd",
+ "04bd6ba605639b98fa8113a16a3bb004ddfaec901c98a931206165f4a5a3190b10ef39e8"
+ "8abd60b2293b4707512b45c6c5ed5794cc11454427",
+ "0f0bb1e428bcdebf4dc62a5278068efc0f8ce75f89e89b3630f102b2",
+ "aac0ea27e129f544abcc77f110e70bbdd5aa3e425dc39d5e8887025d",
+ "10e5dd06aee6b8419a04aa33d9d5678b0039c3acc3c4b61fe106bfdc"},
+ {NID_secp224r1, NID_sha384,
+ "9164d633a553deccf3cbd2effccf1387fa3177cd28c95d94a7d1a3e159c5e5c027758cc2"
+ "6493301b2f4d141d8d07a5fe5fead987ce5f30abeafcb48c302afc6c2309f0e93d9b6818"
+ "cbb6972d222cb7b01302dfe202ae83b89f53150ae4a0e2b8fc0fd1091f19b4ab2e6ab213"
+ "ab322d04f2c5f57113bfad3c5675227237abf773",
+ "e2f86bf73ba9336fa023343060f038e9ad41e5fe868e9f80574619a3",
+ "04f5d5346f17898ea6bbdfff19c216a8757a5dc37b95315f5481628381ae61fd172ac8b7"
+ "a4f13870a932dece465834cbd4f50bbcfb802c824e",
+ "35724ac043e3b44b73b5a7919cf675190306d26aa67c27c28c873534",
+ "535147c265af138eec50c7fb570bcc8d2e6f675597b0fcc034e536bc",
+ "743812c188a1dddf9fb34b90738f8b2e58760d6cd20ccceb1bb9c516"},
+ {NID_secp224r1, NID_sha384,
+ "019df05929321ecea7ee1de4f412aba1c8d3c24437db04b194a68a0a59dd871be10bd3a4"
+ "be6edf551350ea49fc7155a4d887e1221486291abe77a30633a4c4f7868fe2df24311cba"
+ "0c73804883954460e122387ed414111ff96ff1aebac8b6a6491d8a0d16e48a63bf3d027c"
+ "0f68ee4a4b234d73b412196706af8ea022b4dcef",
+ "b0a203438e2586d7575bc417a4a798e47abc22aa3955b58fc2789f17",
+ "04dc5d217862a1e5b00c95affa9d8b925a72b9beaeb7a86dc397e788d85f05f8e976ae1e"
+ "b1036eca6d683a82850795bf9127dee5f8b2859445",
+ "408e9c8b1f33136d6ddb93ff3a498bc09d4eee99bf69cdd5af0aa5a2",
+ "1b5a964c8b1fc634c6e2b82322499df1d7f0c12a4d2a77723c816ab8",
+ "cf54599a36ca064fae0aa936de5266f87704409d22a15d28c01b7f2a"},
+ {NID_secp224r1, NID_sha384,
+ "5d09d2b1d3fa6e12c10d8b26dc9aabc8dc02bd06e63ff33f8bb91ede4b8694592a69e4ed"
+ "4cdf6820069e2b9c7803658949e877ffe23bf90bcf5ce1409c06c71d86885a94048b05ac"
+ "0ec9db193e489a5a2bfa367caf6aa8ecdb032be366174343f6875d2fe1785e8d77334f5f"
+ "469cec64998e08d3303e5c9a1923b34fdc105d65",
+ "efcfa50fad6fb2065f9a55f28c0c42fa24c809ccb19b6fc6d8ffb085",
+ "0461521a0cfb72be77ba33cb3b8e022743cd9130ff49e97093b71aa178ce0819aedaf6fc"
+ "e639d0e593f8ab0147eeb6058f5f2b448231584ea9",
+ "d1eea821f286eae6ebc1f61b08f9ad4323a3787e94af4c32cd31351b",
+ "b37caaa71103752ac559f9eb4943324409ebfa8b585f684dcaa5c411",
+ "7c28e7619e2944ab4b7be022878c8052ebdf2cae5dff4f976c49686a"},
+ {NID_secp224r1, NID_sha384,
+ "50f6dfc81c6cf189e0a310f992907fe93356cee9dea9a41c7671a8daf3f4cfe0c459ce61"
+ "22c1e731dbf7593419d7114cb73b46956158a982c5d52c72f43f0f822046093c69aeff1f"
+ "7e4cd8af00ba655c5baa2e7b6a400b4be1f6fd51b3e4cfb35a69c80a28c5cafb771b6c2e"
+ "52e0aeef0e3fd045e8d40745f3f8b74fd969f816",
+ "61a17816937987764cdc064dc7b5b4f5b16db1023acdfe25902957dd",
+ "04a7e975c0a8f87c683bb8e31bc160843a7b69c945f4850bd60e1c08c08930a454dcc2aa"
+ "13bed7ea89368b2c9d689d816b2acf4e52585ee9c4",
+ "44b1fdec2629f9075f89c134ac28ff19bfddaa9db02a5d7f853582b4",
+ "b0f5635d8bc9c53a1d54a3ec63de59ed66e6b2358d4ab79755414326",
+ "67c68fe265c7e5aba4232deeafb88545a2aa266fb9f2c2bb3f3ae8d2"},
+ {NID_secp224r1, NID_sha384,
+ "e90129ac6672c85bb7b6b18e9dc199c96c81fd65034b53c77818364d512366fb9cd1bc7c"
+ "82404c451e561fc1ed916c0948f6ac561b33a1ccca093f07684b8c2bafa9e966377bd208"
+ "556018a5bafb9edcecf70498c7140fe9c8cf3ad8b8c3b0aa489df797944465047465415b"
+ "b0e24333235fcdd59a98829a3941eaaf62033e82",
+ "79d5367314ec664aa0f6ca36f95549502a05bf8400bf532d669fab8d",
+ "043191f0237102dac159032ab2dde53cf56c9ec827b5caddfe9e83c02ab496b1bdcca443"
+ "4ac0d0d91ea38ff3bc33f9f54095bfe17796d5a9e2",
+ "da529c52f5cc1f435d873109cd991d6cd7e1631d9ff1dd9521dd5db6",
+ "8e0ac63903f4921755430572c3f08bc272790639bdf1009fe2a9a714",
+ "6278c841a2d0a270791fe54b36c49d426d67907aa4e4f59c8638ad97"},
+ {NID_secp224r1, NID_sha384,
+ "3c9a483c9bee33b601549c592a82e95b4319b1e74b777877f0971bcb4273716b268e8f99"
+ "f876e42f942f4cf08284896bbc1ffbf094ac0956c3cedfc3580cffa8c74fc6db29a371f2"
+ "da2d05edb9185ece741fe0d3fabfe9d5b4d373755ebed13dc6840cfa3283b9ea46ec8b95"
+ "c434f253ae86998182e9cc0e95ee64f323fc74b0",
+ "1320eedad4745121793a7eaf732b0b4498f7cb456cac8cf45a1f66f0",
+ "049fdd99906ab77fd29e9021bde947d05a7a9eb153612269bfb0899bc9681b65b9ac8e4c"
+ "2899bb622dafb253b7bf5a6e38e5f6595f997c291a",
+ "66ed8d8934633f4125f593cf1b1d3745c4db1f15dde60cf46ca1c7f2",
+ "80199485a3a96447b39f7679cd47412a78675ba17dcbd10465dc5b48",
+ "a251fd9f136a3cb0dd0bc80659ae032e4a761ba7045da0034553fb8c"},
+ {NID_secp224r1, NID_sha384,
+ "bfc073fdda63c5fccaa0ca8770c293e8154e7aec56128bbac4fdbd541d602216ebf7ca1e"
+ "02b514d6e396f20683802ba3f334310a9226576926e3bb19ceee27738d13377cbafeb09d"
+ "091043501702a07aa31d1f29d50ddc55adcf16ffd40578e734a4e6cb6535f26ad48e0c62"
+ "ad90e79720000e87d419e92dca3e11f943655b03",
+ "e18821329447d3f65ba7279e96bd4624ffa1b32b90f6e8331b1e876d",
+ "0446c9ed837232c47022df2f1a1578fbe65ac9f2e81c98a74cc22ea31a6fc5e9568ae62b"
+ "31412a0b0b367242e9fd7e518c83aa06a069e1d90d",
+ "a4c1eb402a2fb3af26e0e14a3d2fc8ed3bc1a8b2475270356a79fdd3",
+ "d478b68733d8ad44be46766e7b66af782fbdc7ff7ed0b191176da98a",
+ "5eae9160ccf71fd1d359d89cecce72ef8afaeee2365f6ba828aa450a"},
+ {NID_secp224r1, NID_sha384,
+ "08079955d1a1f33728128c73673ec9f21a6ce138dcab5adc4dc068e6ab57314b9fbd8b01"
+ "3123b2fdafa9524fbdd0288777a233de8055cccfad83046ada6a19f01c47817496667bba"
+ "8fc8b9456fc0e044a562d931dab1adcb66af8b66325bdf28d83ded3e2937958ccd19da54"
+ "0d70ef2c189f55a506c9c0d63406394c5bd3823b",
+ "f73e030d5a696b358986d3efaca121cf71f775f8835a21e6135145d7",
+ "049ca2c6ea87ac8dd3a23a5b4010841a7c8af309038882ae44634bcf55b0a347dbd5ded3"
+ "b8702ac5a457e8b32bd4de06fd315095fa1b7d5fe1",
+ "e3cc786c1288ea567836c51d6d69dd0cab5c015987d936ccc3a4beb3",
+ "f1234da71761b7a0f49e661a419d2a739bdc4544bf87690e3d2f96db",
+ "096d16bf8020c3d3c233894ad8eb81206010e62c6e692a215e088fd4"},
+ {NID_secp224r1, NID_sha384,
+ "23900b768f6cd42b8a8df0dcbc9cb5daec8de36b9d5c619adcc1ba2b649103d5af123746"
+ "cdf19c3fd0665a6fb9338156182aa06181e3c6e37ce56979612af2927440424f89cef43f"
+ "c754854b8a5c43370808cf5f9929cf47712512ce2f8a2a20d2e9f568c2848b27dfbe0914"
+ "2843c83905ffa5da3b15501761b03dbc2c5398b6",
+ "7a0789323f8741c157a1753ae165ecaf8e8b03a60561f8b80cee467c",
+ "04101271a9addd4bd1f19d00bf116c8524f52cefd598e85dc381597acb2f17d14f4d8ccb"
+ "28b216553718152ba7c104646d8eca986dd9ddea39",
+ "d169f04f05b60c625cda864d187938863964dab7bb3b9dfc04b05519",
+ "e4a51be686a764b709da23ab48b1985e153c6ee238d945e743907afc",
+ "118a8f1ffe3cd556ce6345bd1a398dd9cc3729b7fd6d8af9bfd82f40"},
+ {NID_secp224r1, NID_sha384,
+ "1eb28c0bcdd18f73e347f957ece15b4cc83a771b0877e1feaac38e24028fb38ccea8b54e"
+ "e017dc7c3d5a1327bc6f40b294aa65d7dc487f278846cd101ee84202f14b38aa2c275046"
+ "aa2577f65ebaea41cd383e8def2fd0b4444dcf426fa75c4082cd7fa035cdb1e0d34a3c79"
+ "d42130f5b0273eae75bc701dda3aebe7358f41b5",
+ "78e795d0edb11fd9e28dc26b21e751aa89bea0d87932ef11c95c0e18",
+ "049edd544107977134bf6360d43ccabb3c94d627c03963c0a04b439627ece4c61d319a0e"
+ "41f3de7863e7c355bac94395aaa74cdb5f74a87a5b",
+ "36f7c0f76808b826a0a974a1fd6e155e00a73f1d34674a8f88be405a",
+ "3e319444438bc2cc92f323ea842cb402b3c3c2448c89869ef7998edb",
+ "3420cc38f058f41c31e71f4b1ad488f801111c73541de69fcee60695"},
+ {NID_secp224r1, NID_sha384,
+ "efab51855407438fd5c250670366bca3c026ecec4a59394f00d8a4b51746d0c456436665"
+ "6d507e3e13e62fe7abeb976b8859895848dbaecf6582f1898ea06f00d4247702ed9721bd"
+ "375aa83ae4c67c2eaa6e080777ea5ecf2cf787d785389560ac91cf63a52f0373c3185e18"
+ "a3b8a466e21b61a239f1b77624eb1acacc76c4e1",
+ "bee02d8bc5bffb3fd3b4c9d6f686409f02662d10150d1e58d689966a",
+ "048848f964c847fe9dddc774618d4588c9cd56bbe588d7b1fb369c8bfaebbb699fbd0dc0"
+ "8859fe9132285fe20dff3b9d561c0640b6e0717607",
+ "59f1450d857b40e5552a4b8cd4ab0df2f01716635d172c1106840f21",
+ "a206d8398a16a991bc217f77f23c6f648384f254f255a8a876404444",
+ "eb1169cb5b1423dc0bfaffe565ae57f986e00de06405e3e7b605862e"},
+ {NID_secp224r1, NID_sha384,
+ "31c29ca10279a417f0cc9b1382cf54dbfdfc89f2e6ef08c403c11f580cbf8674b141ed1a"
+ "417563282d99a55fc616d836421cde9424815c95e7fb7668bf3f137b29937f14882d74e0"
+ "34b732d78d91af7721aac4950734f5fa5d4b4d35534974f8cab6d2e6dca75ddb57e99148"
+ "c8a59df9fc5bcd723e546e8356f671cf2f65640a",
+ "dc0ddf6e501418bb8eafc5d7ccc143369e2aa441df8fc57d5f94a738",
+ "04063a5d632f4144376e14cfb03ad8ccf1489b613acd184d20dff66545e77727f057b043"
+ "d8a0f7458196b72e92d11f85b0891c6aaa9d915f58",
+ "ff0e5cae2671db7a1b90e22c63e7570bdd27352d45bac31e338debe0",
+ "5bc0b4998481ecbd3b6609184a84ca41d69b08c37138097f559259f8",
+ "0df8828eb1ca85e46405b94e1a2972c34c5e620a54e2f640f04aecc5"},
+ {NID_secp224r1, NID_sha384,
+ "8db476f92e332519c1a0ece5d8deded6efbd2d8e8784eea0a6b4c3b4296c35f5f8de4317"
+ "e5c1627b91fb1973fee86c06e4992aa5a20cb7475c8808ff1da354d07a488dffa7838c6e"
+ "c1e3f99e3acba831f27bee8434eeda3eb36d0c6df3658883cd40068b1bed841310f6eb38"
+ "d4a3d07d85848770ff7933c054cd8b34662660b1",
+ "229d89b2fcf8441ffc95ebb2ac2ef156e25825782044b2b8bd6a3e01",
+ "04de616848d8044a44789ef1ba3a6dd66fe9257ddc57f7534e59a701be26cbf74a6d25e5"
+ "b34b96d30f327abd574cff7f7dbe6686573a7d6c5c",
+ "3b18ca6ec8e8e255ac88f64302745ca0b73ff94b2b2d48be95b4aaee",
+ "fa94fd8b827c06115c1eefd50afc02ce5926ee0e789667783c01c34b",
+ "edf766a66973cfc33e4159966c07321a7f6549c3c60e8586ef41402b"},
+ {NID_secp224r1, NID_sha384,
+ "fcb272c828fe8fd3c6f8de9410c7b6e2b36717c1b0e5e359e9109bd7fc378978aa98182a"
+ "9d99961898ed88999b050d3b64d1457d7a899d6d273b9f4dde2aafa36d76329d62509043"
+ "c338f265fc4c7d938459b7fa3b230a9f6cb632b61489546bb4181a5ad7f0d7369b8caced"
+ "48eb374b075b2b325bc86add0f3b680cd9e80acd",
+ "97d747068147c0393a0bb5c159e2c9f1bd538f6204823294883abe28",
+ "043858a576eef2ce24d01766997fb81b3f3f78b6104cd188610be221d795ffc677ac7bfe"
+ "3e0bb4cffb17355a964c8356a807151b3cba5d1f4e",
+ "c1a2ec1ef16cfd5107c892790daefbed061be78bd8576696b60f64d5",
+ "18c908541843fcdac99b9ff6bb397f3f8094d16b42670216e4eaa2d7",
+ "c107a8a508ff57c5d4f78f86cc37e129c864d1c44ed5e73909613b74"},
+ {NID_secp224r1, NID_sha512,
+ "7522492bdb916a597b8121f3e5c273b1d2800ef8c1db4f7dcbae633b60d7da5193ba53a6"
+ "3d7a377b351897c3b24903ae1cd1994211b259be3e6ae2cbc8970e4957fdf782c7d1bc7a"
+ "91c80c8ef65468d4ef35428f26e2940ae8b0bd9b8074236bf6c00d0ebe83f9ddb2ade0f8"
+ "35138d39f33b59f244e0037c171f1ba7045a96f5",
+ "ba5374541c13597bded6880849184a593d69d3d4f0b1cb4d0919cbd6",
+ "04ac635fe00e8b7a3c8ef5655bdfb7f83e8532e59c0cc0b6534d810ffa1d067aebeba66e"
+ "79b28ecfe59ac6fdf5e1970dc3a84499c9d90cd8e2",
+ "187ed1f45c466cbafcd4b9577fb222408c011225dcccfd20f08b8d89",
+ "f83d54945997584c923c09662c34cf9ad1e987da8bfd9be600e7a098",
+ "4ff2dba9dba992c98a095b1144a539310e1a570e20c88b7d0aa1955c"},
+ {NID_secp224r1, NID_sha512,
+ "61097114ff855c3e34a62d9b853f8982d35f29cfa4a89893badbca7849e5fb437a1a38d6"
+ "451bf0ca5a0d528e352b8e4b57f2ea359a7fc8841d49dd3e570f9b016f14156b0bbc4be8"
+ "22e260bd147ec081454969e11cb0034b7450ef4deb7ed6edb977e2f4ed60121aa095fb0a"
+ "b40240dc329ecc917f5c64b4410612af065ee9dd",
+ "1e27187134d0a63542adf4665fba22f00cfc7b0a1e02effe913ceedc",
+ "04ecaea8ceea55c3bd418fd34a4ff2499e25e66a104eed846bc00c31d23933a356ab1f2d"
+ "abc303ff0a5d076131e77032e6f502336883bf78a7",
+ "34cb597deae9a3b1cada937abcd247161b19b2b336b20e2e42ae01f1",
+ "58177ba46fb291490b39368774accf72736412c1fb5ee0f27b9b1e02",
+ "58337d78b95a080bfcabb5809bee012501b4da84b8ef310a4628f11c"},
+ {NID_secp224r1, NID_sha512,
+ "dd09ae6c982bb1440ca175a87766fefeacc49393ff797c446200662744f37a6e30c5d33b"
+ "a70cbd8f12277fd6cc0704c17478bbab2a3047469e9618e3c340a9c8caaff5ce7c8a4d90"
+ "ecae6a9b84b813419dec14460298e7521c9b7fdb7a2089328005bd51d57f92a1bcbeecd3"
+ "4aa40482b549e006bbf6c4ce66d34a22dda4e0e0",
+ "0905b40e6c29bfcbf55e04266f68f10ca8d3905001d68bb61a27749b",
+ "04d656b73b131aa4c6336a57849ce0d3682b6ab2113d013711e8c297626328335ffc2029"
+ "afbfe2a15cc5636978778c3f9dab84840b05f2e705",
+ "dc82840d147f893497a82f023d7d2cbf0a3a5b2ac6cc1b9b23e504be",
+ "583af080e0ec7c1ba5a491a84889b7b7b11ccfe18927c7c219b11757",
+ "b23700035349df25d839f0973bef78a7515287de6c83707907074fa6"},
+ {NID_secp224r1, NID_sha512,
+ "37a73e2774d3b274db426c89b945696daa96035031f72cea01894b24508c7f81961ec254"
+ "d36ed6a0f448e11cf7950af769dc6cd2c47e52c6caf0ea92c270974f0214b4db436c36a6"
+ "0fb722060a6bb544462a82e1714f5906ec32886f7d59ebf289541c3a00ec1e004892ef2b"
+ "1286a0194f55d083c6ec92c64b8fd1452e1c68ba",
+ "afbaede5d75e4f241dd5b53220f3f5b9c1aa1d5d298e2d43236452dc",
+ "04fe83e59fc8ea8b939355d3258fe53a64d45f63031a0716b7cc416173f151d23060f1c8"
+ "56eb7f1f58be72a7228c3af89e43b56e9695b558c7",
+ "0fbbe7b40136c81a8fb894498d5502157a1cf5a89d0643de92cd38f6",
+ "24f3f457c7b72b7e759d5a8afbf330e31c5d8d2e36f92c0e79c5d87d",
+ "36fd1193def34f12a960740fd79fb38bf2b480726ccad540eb42cdf8"},
+ {NID_secp224r1, NID_sha512,
+ "9dc2046ffdc6804544db964481abe5d2d276a2a9eeec4c7ad40215b1de23561d402db69b"
+ "d0f6eec2254711eea4487c64d9a6b62c3ebaf5ffa8db6e7e3a6e17154d126967a47a853a"
+ "6f8339bdca9be306a13c7f992ded7619b0da59909a49b1e0930360e05b47f18628a36d69"
+ "b2f87f2bfddd6a5d4a72f84dc76dbdd43f3a6a35",
+ "950b07b0c2b7539a21b5135bfede214733f2e009647d38d8b21d760c",
+ "04f43d13bbfcee3b724063b3910fea49fd591b81e86fdb813b1a492d0c6b4c8d6fa5dc66"
+ "1889e3cf5ec64997a78222837885f85d2fe9b684fb",
+ "83e110d0d1e700d2f36543028737d2a2f1474aa3b4b28998a39e4793",
+ "2685265bc878e85d10ab13293dec190881a57c4a467f8fc2170432ea",
+ "80a347bb49036522369339bd6485a967cdda818915d8eb947302fcf9"},
+ {NID_secp224r1, NID_sha512,
+ "d9c6847fce688c5e7525a1098b545cb6c15dcd21a02761fc82fc664372a667390680135f"
+ "91c01a2fa5430c634b1a6d1cd6002d8aa021e7bf5956a7901c2f81bc25d502ba5f55a55f"
+ "30c0323dc68205cbefec0538e68654e7b327ac1743641896c3e740d8f66f400902b304ea"
+ "faa4e0d8cffae140536f0922444cc3216a675697",
+ "015bd9f5dfef393b431c3c7fced24385d861ccb563542574a5d2a9bc",
+ "04e868690641e2cda13b289a6c5d2fb175940396044d9cf27b4f2240af4c78c9abdf2b7f"
+ "c67ed4497001d7bcf1daca1739dc14a661f91d7c40",
+ "e2374350f47c08f3c1359d4edf87e61d1ba4e7dd1540d8d9062efa79",
+ "e12dc088d2bc032bb214c77d0e0fb749fc8e61ebe1ed72996f1084b6",
+ "0ab58aa31e0bba5fbc76855e6549f1036fba0a589aeab978ab01b8fb"},
+ {NID_secp224r1, NID_sha512,
+ "69df8a01b66f04930efd2012ff2243874f256ca8758145d2a9e4ecc84d0dbdbd0dc494ae"
+ "06db0ccbe819918137c90957114558580d6623efbafdd342b38dad9f08708084d32f874f"
+ "ba04782ce26aaab78de2102ad171f8a8f2b30b5bd3d55fdac5fa3acd6f7def7e61c25339"
+ "38572b331ba6d1c02bd74bfdbf7337ade8f4a190",
+ "0a3c259df933247445acffb6d8265b601d597fb9997dc2a1eb4deef4",
+ "04e67f4385a9da54253cc371ee9bc6739ae6385a4b87669c7baf0c460d2bb00b6ddd7b67"
+ "d9ac5653ec04ca8529fbf16f815c04da3c2e58e82d",
+ "8bf5859665b6a23e6b05a311580f60187ba1c4ae89e44877fb48af66",
+ "653675fb993c3fa9e57b32e33029ec230b966e8077c72c1ec90ddefc",
+ "792723bf87e315147cd4303de7f1dfe95cd7658ebb95c38c1a196140"},
+ {NID_secp224r1, NID_sha512,
+ "927524982b8d60777c1105c86fac05f634abf58c73f84fb95d81ba0b86e1e43592c4fcad"
+ "2e395a40fbe7005697d86088e2fb3bb7287eb3f917d4f2dc281f5cbe65d05b4f9623bca8"
+ "49b10a03beca6aa2056a12ebb91cf257ac448c5e9a78f8349a6a29b17c8978bef43a443c"
+ "bb8a149eb23f794844fc41693f2dbb97181444be",
+ "a1c8ef463f9e7e3dd63e677412f87cf9ea4ac9a6a2dae629da5b9916",
+ "04400e5cd4b315ceb309545cd3277acb70bdae2073fda6ad896ea14b27fbe1d2466cd2e1"
+ "16f38248bd5cabaa6cbe6c4a2694d998abd7b0c991",
+ "82f55a25d3ed6e47c22a6eed0fa52ed0818b87d6ea7950281dfefc09",
+ "16305a46a3f6f9e216ef8f6a6f5f0760d064a885657c864e1c1ea035",
+ "58fd97050bfbca6f87e64e1458c4ad80bae26e280356da344ad3b25d"},
+ {NID_secp224r1, NID_sha512,
+ "5f9042283561e7f19a436d01c7ef5a950a6d77ede5629cd7e43c0a5d58e8c5673c37945a"
+ "453291d12938253c71dbe12c8b022ba7276eda6be034ef5ec1ec77dbd1e08f0d7b8e7725"
+ "b7ec671c075e008a20f77f4ab266f97079b0aa6337df59a33b881954084057b21f294dd1"
+ "4bcb0869a4a6f1f597955ec7bf9d19bb3537a66a",
+ "fa511dbf6fef7e5e9c73e4555eb75d435f7884322d9faf5d78cacc0b",
+ "04e8dccd706c31f895f2f261ab979cbab51b8ae28196bcc12a42046380ec246be8e71ea3"
+ "859cb717a59990fe22e4b76858ff49becd70739a01",
+ "a37d665fe4314aa4cd03eb8e6a1f366b43e11fdb419c96b48f787b62",
+ "05e4909bcc172ab4140be291aad4660e375032bce2d762b6269ba764",
+ "e347a1c9d3670690e1d8d1d4cd9579848f442199c10526488da5cebf"},
+ {NID_secp224r1, NID_sha512,
+ "c2ae5573d3bf396523bfb703db8502fd0760cd1be528f6ddbfb95aad399e0b19f3bd9e0f"
+ "abdb05d49e3f893dffec5b627c9c2f7ad5f32e92e4e27a38cb5c28657657377fdfa1b66c"
+ "d7ac3d15c6d49df92d284db99f69744f37dc7cb4e7d52920fdb200a7942623a7057ba82e"
+ "467dcccaa5da416b48510d8364446a6a5e2a5aa8",
+ "a58bd53646400a646f0e4208320dc679a9664d1c6bfb27fdc8eac7ea",
+ "04e22e0dc4ecd96eb0071b72ba4b4988bf784f3fe73cb81bfb93d9ac4fb3e213e518bee1"
+ "367a4fb3703b9008bac9d95a1fc4aa61225fff9f3c",
+ "42c5b6f87d3bb1ed74f5ee8398d8f8c61e9e50ffa7a1da12d39893f9",
+ "5c0e5c6f057de1e99ef5d237a60d7a07fa9a42b120a82f573d9fb7b2",
+ "2fffc0bf550bd2f650fed085a84501cacfa6a1bb984df1f9237eaa59"},
+ {NID_secp224r1, NID_sha512,
+ "03c1a1cd30a039d0dcb22fee2450a7fa79495a0d0f4f43d2de4d75bce003c0334a8860f5"
+ "c164dbd94888a9f751235a3e570d31070e3e1293a7be616af7176600585d36ac01360015"
+ "7d2569d491da4b8a3bf3630c26e0b9925412189f50b0ae6f04c86477932e2ecd8c354610"
+ "6ae1ebc684cc3adb27ed665eddece886adea4ce3",
+ "64bd4452b572cc95510ac2e572f41136299ff17f6e8448f4ffb571d0",
+ "0492521fa25c2e034d127e0921efdb167f0b2ff8b20504487ed87fa264e72c770e37375a"
+ "d7dc2c4e63e5701826f6606f6ffb9461ee61b4e872",
+ "eaf76ee4d7e00d13d8a6d03dffd07ad9a8bb6dc8176c9f93059b1b7f",
+ "cf5058e2a6cf5e61a138b013eb292f38a1b9f07239ae5941dbce8919",
+ "d14198621650d985d270bc997da6e78588fd0ef843b874c66a3de3c3"},
+ {NID_secp224r1, NID_sha512,
+ "888f6d9bc7c86c0079fbfd42d8c08d6958f40f6e570fb0b1f03d2f8f8a63df4fcc87b379"
+ "a222cf835820a999d34996e08961f13b86b075e7fd1c303cd3baa44de42168561589012f"
+ "7e5300da4f8bdf470c07119a5d9f7ba7293568cd7c6a1b7fc1e41cda40bed7d46e5a28af"
+ "67ae2aabfefe67a86a1c601e6f5ee543e09bd7b6",
+ "7f3edb710df9d982f486233d0c176aa88f5a0ee81efa9b8145020294",
+ "04e7611e013e7b43ff5b8b57ad83333bffcc9e469ad23070b5791dc5947784da0a11dbe1"
+ "6208c6e0b6d5029e71fbec4dffc9fa046d3eeb71c9",
+ "94db7ef9a232593091eb9a74f289529c7e0d7fef21f80b3c8556b75e",
+ "a971f45bab10b1d16d7234ca8e4ec987da20d9e867f28aa063296e23",
+ "e38c538d65a7e1a28fd3ec53f015a7e5beb60e9d309f1e3ba4b2c3d2"},
+ {NID_secp224r1, NID_sha512,
+ "48453340f1317769e6ee6e103153714365731163dc18f84e9f2fa4b120f9c5a9645ee2f9"
+ "b66c84c26d95912b422b009b64af96aa418b2427a4209f2e7513ba8e43ec8cf20b34e752"
+ "9b22eb1199545afe9a9f7d9bcb320aec9ee0162f91c0d1dd9674c9c284f25199c5e109f6"
+ "f84d7ed0d269cc6413edb81bc2c83e37d644d8b9",
+ "b569f8296ff1d9cc01fffd9919016e5730c1858bdb7b99527153751a",
+ "04242f34959516a4706172f7dede23110efa314bff22eb320ab88feeff45e3227710900a"
+ "8acfc9bcce728119d042f64ca40876c2b380ee46e0",
+ "ae61523866a8f43e6cdd42ba27a34ed06527e8a5842901a64c393f76",
+ "c2732a4e0815f9f785500e80147e9486994446beccf8a6a352b97585",
+ "6ecaece6487d7920e398f7f951ab7c7aba5832dabf03704106ad1244"},
+ {NID_secp224r1, NID_sha512,
+ "4bdfd3b91d83108409ad765b256e0c9b9937ecf647f8e6f9fc807e2e72af8246178b3fe0"
+ "46b4ea10170450d71a4eec790ecb05f03d7077341de26c4db7eeae24d55c9a9093e837df"
+ "db38168fe8230cb9605825a1282fecd741989bfcdb34678fe077477927f66bd26d003e5d"
+ "da22043341a14dd31841ba483ad5ce2701e0f68e",
+ "41a4dd8eee39232b728516e2f21e66011e7426a6b25986c3ffa237e4",
+ "04c32988171caab178bf50dc7310bc7f604df5a9d19a8e602519c72d8af8985d112ad9de"
+ "05969e5364d943c1cc5cd198359f4c62b19da0e117",
+ "827d4999da81fa920c8492ccc1e2d5cdafed9754cf7382a859952071",
+ "89c61da7422ccd676baec07e2185c12e947a2374eede87847304be6c",
+ "2685379624717ea28422e8d001c090405a130b4ef9f1ac726c3ca502"},
+ {NID_secp224r1, NID_sha512,
+ "e6cdee8558bc1eacc24e82f0624ce8d02cc8d925b4dd3dec3a72f4a4e0fb76076bfa3ef2"
+ "e2c33bdd7c27b322bdc09bbfee8fe46f75dbd7bbd2af09690b7137943efe21706e0a1b6d"
+ "3089540fc58d85ddb55ea836616db573e36c521be008893f40a0a7c349602cc178ea43be"
+ "59d31ec6449e7ff2c5379379f7d7645134df1bc3",
+ "67fa50569257c8cc89ac0325db4902003a62f30b917f53e4035a7e04",
+ "046773a0436a9c42635730413b19aa4166f08c69c0e5002953da42253b555138290b093b"
+ "f2fe79acda9131d920cd1e7ac43fb8775776cd713c",
+ "557cb45fd3a30b3bdbf08c56eabbd4478736024aaa52bf8448096453",
+ "8e92cf7a674aa5f7542dd95c695589a05747431692edd04804299b8f",
+ "af4908b41f8180b71a6ff10fd51f3d143147af6ddddf7534d3284ed9"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "ff624d0ba02c7b6370c1622eec3fa2186ea681d1659e0a845448e777b75a8e77a77bb26e"
+ "5733179d58ef9bc8a4e8b6971aef2539f77ab0963a3415bbd6258339bd1bf55de65db520"
+ "c63f5b8eab3d55debd05e9494212170f5d65b3286b8b668705b1e2b2b5568610617abb51"
+ "d2dd0cb450ef59df4b907da90cfa7b268de8c4c2",
+ "708309a7449e156b0db70e5b52e606c7e094ed676ce8953bf6c14757c826f590",
+ "0429578c7ab6ce0d11493c95d5ea05d299d536801ca9cbd50e9924e43b733b83ab08c804"
+ "9879c6278b2273348474158515accaa38344106ef96803c5a05adc4800",
+ "58f741771620bdc428e91a32d86d230873e9140336fcfb1e122892ee1d501bdc",
+ "4a19274429e40522234b8785dc25fc524f179dcc95ff09b3c9770fc71f54ca0d",
+ "58982b79a65b7320f5b92d13bdaecdd1259e760f0f718ba933fd098f6f75d4b7"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "9155e91fd9155eeed15afd83487ea1a3af04c5998b77c0fe8c43dcc479440a8a9a89efe8"
+ "83d9385cb9edfde10b43bce61fb63669935ad39419cf29ef3a936931733bfc2378e253e7"
+ "3b7ae9a3ec7a6a7932ab10f1e5b94d05160c053988f3bdc9167155d069337d42c9a70566"
+ "19efc031fa5ec7310d29bd28980b1e3559757578",
+ "90c5386100b137a75b0bb495002b28697a451add2f1f22cb65f735e8aaeace98",
+ "044a92396ff7930b1da9a873a479a28a9896af6cc3d39345b949b726dc3cd978b5475abb"
+ "18eaed948879b9c1453e3ef2755dd90f77519ec7b6a30297aad08e4931",
+ "36f853b5c54b1ec61588c9c6137eb56e7a708f09c57513093e4ecf6d739900e5",
+ "38b29558511061cfabdc8e5bb65ac2976d1aa2ba9a5deab8074097b2172bb9ad",
+ "0de2cde610502b6e03c0b23602eafbcd3faf886c81d111d156b7aa550f5bcd51"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "b242a7586a1383368a33c88264889adfa3be45422fbef4a2df4e3c5325a9c7757017e0d5"
+ "cf4bbf4de7f99d189f81f1fd2f0dd645574d1eb0d547eead9375677819297c1abe62526a"
+ "e29fc54cdd11bfe17714f2fbd2d0d0e8d297ff98535980482dd5c1ebdc5a7274aabf1382"
+ "c9f2315ca61391e3943856e4c5e616c2f1f7be0d",
+ "a3a43cece9c1abeff81099fb344d01f7d8df66447b95a667ee368f924bccf870",
+ "045775174deb0248112e069cb86f1546ac7a78bc2127d0cb953bad46384dd6be5ba27020"
+ "952971cc0b0c3abd06e9ca3e141a4943f560564eba31e5288928bc7ce7",
+ "a0d9a7a245bd9b9aa86cecb89341c9de2e4f9b5d095a8150826c7ba7fb3e7df7",
+ "b02a440add66a9ff9c3c0e9acf1be678f6bd48a10cbdec2ad6d186ffe05f3f2a",
+ "a98bea42aec56a1fcecec00a1cc69b01fcbcf5de7ac1b2f2dcc09b6db064f92b"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "b64005da76b24715880af94dba379acc25a047b06066c9bedc8f17b8c74e74f4fc720d9f"
+ "4ef0e2a659e0756931c080587ebdcd0f85e819aea6dacb327a9d96496da53ea21aef3b2e"
+ "793a9c0def5196acec99891f46ead78a85bc7ab644765781d3543da9fbf9fec916dca975"
+ "ef3b4271e50ecc68bf79b2d8935e2b25fc063358",
+ "7bbc8ff13f6f921f21e949b224c16b7176c5984d312b671cf6c2e4841135fc7f",
+ "04f888e913ec6f3cd8b31eb89e4f8aaa8887d30ae5348ed7118696949d5b8cc7c108895d"
+ "09620500d244e5035e262dea3f2867cd8967b226324d5c05220d8b410c",
+ "21c942f3b487accbf7fadc1c4b7a6c7567ce876c195022459fa1ebf6d04ffbaa",
+ "2e6cc883b8acc904ee9691ef4a9f1f5a9e5fbfde847cda3be833f949fb9c7182",
+ "2ac48f7a930912131a8b4e3ab495307817c465d638c2a9ea5ae9e2808806e20a"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "fe6e1ea477640655eaa1f6e3352d4bce53eb3d95424df7f238e93d8531da8f36bc35fa6b"
+ "e4bf5a6a382e06e855139eb617a9cc9376b4dafacbd80876343b12628619d7cbe1bff675"
+ "7e3706111ed53898c0219823adbc044eaf8c6ad449df8f6aab9d444dadb5c3380eec0d91"
+ "694df5fc4b30280d4b87d27e67ae58a1df828963",
+ "daf5ec7a4eebc20d9485796c355b4a65ad254fe19b998d0507e91ea24135f45d",
+ "04137c465085c1b1b8cccbe9fccbe9d0295a331aaf332f3ed2e285d16e574b943bd3e8d5"
+ "a24cd218c19760b0e85b35a8569945aa857cbf0fd6a3ce127581b217b6",
+ "343251dffa56e6a612fec7b078f9c3819eab402a72686b894a47a08fd97e6c23",
+ "775e25a296bd259510ae9375f548997bec8a744900022945281dc8c4d94f2b5b",
+ "d87592ceab773ae103daebbb56a04144aaccb1e14efc1024dc36c0e382df1f70"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "907c0c00dc080a688548957b5b8b1f33ba378de1368023dcad43242411f554eb7d392d3e"
+ "5c1668fad3944ff9634105343d83b8c85d2a988da5f5dc60ee0518327caed6dd5cf4e9bc"
+ "6222deb46d00abde745f9b71d6e7aee6c7fdfc9ed053f2c0b611d4c6863088bd012ea981"
+ "0ee94f8e58905970ebd07353f1f409a371ed03e3",
+ "8729a8396f262dabd991aa404cc1753581cea405f0d19222a0b3f210de8ee3c5",
+ "0482b1f1a7af9b48ca8452613d7032beb0e4f28fe710306aeccc959e4d03662a355e39f3"
+ "3574097b8d32b471a591972496f5d44db344c037d13f06fafc75f016fd",
+ "6de9e21f0b2cacc1762b3558fd44d3cf156b85dbef430dd28d59713bfb9cfa0b",
+ "a754b42720e71925d51fcef76151405a3696cc8f9fc9ca7b46d0b16edd7fb699",
+ "603924780439cc16ac4cf97c2c3065bc95353aa9179d0ab5f0322ca82f851cf2"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "771c4d7bce05610a3e71b272096b57f0d1efcce33a1cb4f714d6ebc0865b2773ec5eedc2"
+ "5fae81dee1d256474dbd9676623614c150916e6ed92ce4430b26037d28fa5252ef6b10c0"
+ "9dc2f7ee5a36a1ea7897b69f389d9f5075e271d92f4eb97b148f3abcb1e5be0b4feb8278"
+ "613d18abf6da60bfe448238aa04d7f11b71f44c5",
+ "f1b62413935fc589ad2280f6892599ad994dae8ca3655ed4f7318cc89b61aa96",
+ "04e0bbfe4016eea93e6f509518cbffc25d492de6ebbf80465a461caa5bdc0181593231ee"
+ "7a119d84fa56e3034d50fea85929aec2eb437abc7646821e1bf805fb50",
+ "7a33eeb9f469afd55de2fb786847a1d3e7797929305c0f90d953b6f143bb8fc6",
+ "96d1c9399948254ea381631fc0f43ea808110506db8aacf081df5535ac5eb8ad",
+ "73bf3691260dddd9997c97313f2a70783eacf8d15bdfb34bb13025cdfae72f70"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "a3b2825235718fc679b942e8ac38fb4f54415a213c65875b5453d18ca012320ddfbbc58b"
+ "991eaebadfc2d1a28d4f0cd82652b12e4d5bfda89eda3be12ac52188e38e8cce32a264a3"
+ "00c0e463631f525ae501348594f980392c76b4a12ddc88e5ca086cb8685d03895919a862"
+ "7725a3e00c4728e2b7c6f6a14fc342b2937fc3dd",
+ "4caaa26f93f009682bbba6db6b265aec17b7ec1542bda458e8550b9e68eed18d",
+ "04e3c58c1c254d11c7e781ad133e4c36dd1b5de362120d336a58e7b68813f3fbee59760d"
+ "b66120afe0d962c81a8e5586588fd19de2f40556371611c73af22c8a68",
+ "c0d37142dc8b0d614fad20c4d35af6eb819e259e513ddeac1e1c273e7e1dc1bb",
+ "25dd8e4086c62a40d2a310e2f90f6af5cb7e677b4dfdb4dc4e99e23ea2f0e6dc",
+ "90ad62c179b0c9d61f521dde1cd762bfd224b5525c39c3706f2549313ddb4f39"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "3e6e2a9bffd729ee5d4807849cd4250021d8184cda723df6ab0e5c939d39237c8e58af9d"
+ "869fe62d3c97b3298a99e891e5e11aa68b11a087573a40a3e83c7965e7910d72f81cad0f"
+ "42accc5c25a4fd3cdd8cee63757bbbfbdae98be2bc867d3bcb1333c4632cb0a55dffeb77"
+ "d8b119c466cd889ec468454fabe6fbee7102deaf",
+ "7af4b150bb7167cb68037f280d0823ce5320c01a92b1b56ee1b88547481b1de9",
+ "04cb3634ec4f0cbb99986be788f889e586026d5a851e80d15382f1bdb1bda2bc7551e4e4"
+ "3bc16fb114896b18198a1aebe6054ba20ed0c0317c1b8776158c0e6bfb",
+ "98edd59fafbcaee5f64e84eb5ed59fff45d14aabada47cee2fa674377173627a",
+ "261a1cdb0fd93c0fb06ea6068b6b03c330a12f621a7eba76682a1d152c0e8d08",
+ "7ca049bad54feee101d6db807635ffb8bdb05a38e445c8c3d65d60df143514c5"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "52e5c308e70329a17c71eaedb66bbee303c8ec48a6f1a2efb235d308563cd58553d434e1"
+ "2f353227a9ea28608ec9c820ed83c95124e7a886f7e832a2de1032e78dc059208f9ec354"
+ "170b2b1cab992b52ac01e6c0e4e1b0112686962edc53ab226dafcc9fc7baed2cd9307160"
+ "e8572edb125935db49289b178f35a8ad23f4f801",
+ "52ad53e849e30bec0e6345c3e9d98ebc808b19496c1ef16d72ab4a00bbb8c634",
+ "047cca1334bfc2a78728c50b370399be3f9690d445aa03c701da643eeb0b0f7fa83f7522"
+ "238668e615405e49b2f63faee58286000a30cdb4b564ac0df99bc8950f",
+ "8650c30712fc253610884fbba4a332a4574d4b7822f7776cab1df8f5fa05442a",
+ "a18194c7ac5829afc408d78dde19542837e7be82706c3941b2d9c5e036bb51e0",
+ "188ead1cdf7c1d21114ff56d0421ffd501ab978ef58337462c0fa736d86299af"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "d3e9e82051d4c84d699453c9ff44c7c09f6523bb92232bcf30bf3c380224249de2964e87"
+ "1d56a364d6955c81ef91d06482a6c7c61bc70f66ef22fad128d15416e7174312619134f9"
+ "68f1009f92cbf99248932efb533ff113fb6d949e21d6b80dfbbe69010c8d1ccb0f3808ea"
+ "309bb0bac1a222168c95b088847e613749b19d04",
+ "80754962a864be1803bc441fa331e126005bfc6d8b09ed38b7e69d9a030a5d27",
+ "040aaeed6dd1ae020d6eefc98ec4241ac93cbd3c8afed05bb28007e7da5727571b2dda1d"
+ "5b7872eb94dfffb456115037ff8d3e72f8ebdd8fcfc42391f96809be69",
+ "738e050aeefe54ecba5be5f93a97bbcb7557d701f9da2d7e88483454b97b55a8",
+ "8cb9f41dfdcb9604e0725ac9b78fc0db916dc071186ee982f6dba3da36f02efa",
+ "5c87fe868fd4282fb114f5d70e9590a10a5d35cedf3ff6402ba5c4344738a32e"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "968951c2c1918436fe19fa2fe2152656a08f9a6b8aa6201920f1b424da98cee71928897f"
+ "f087620cc5c551320b1e75a1e98d7d98a5bd5361c9393759614a6087cc0f7fb01fcb1737"
+ "83eb4c4c23961a8231ac4a07d72e683b0c1bd4c51ef1b031df875e7b8d5a6e0628949f5b"
+ "8f157f43dccaea3b2a4fc11181e6b451e06ceb37",
+ "cfa8c8bd810eb0d73585f36280ecdd296ee098511be8ad5eac68984eca8eb19d",
+ "04c227a2af15dfa8734e11c0c50f77e24e77ed58dd8cccf1b0e9fa06bee1c64766b68659"
+ "2ce3745eb300d2704083db55e1fa8274e4cb7e256889ccc0bb34a60570",
+ "2d6b449bb38b543d6b6d34ff8cb053f5e5b337f949b069b21f421995ebb28823",
+ "5e89d3c9b103c2fa3cb8cebeec23640acda0257d63ffbe2d509bfc49fab1dca6",
+ "d70c5b1eeb29e016af9925798d24e166c23d58fedd2f1a3bbdb1ef78cdbfb63a"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "78048628932e1c1cdd1e70932bd7b76f704ba08d7e7d825d3de763bf1a062315f4af16ec"
+ "cefe0b6ebadccaf403d013f50833ce2c54e24eea8345e25f93b69bb048988d102240225c"
+ "eacf5003e2abdcc90299f4bf2c101585d36ecdd7a155953c674789d070480d1ef47cc785"
+ "8e97a6d87c41c6922a00ea12539f251826e141b4",
+ "b2021e2665ce543b7feadd0cd5a4bd57ffcc5b32deb860b4d736d9880855da3c",
+ "04722e0abad4504b7832a148746153777694714eca220eced2b2156ca64cfed3ddf0351b"
+ "357b3081e859c46cad5328c5afa10546e92bc6c3fd541796ac30397a75",
+ "b15bbce4b382145de7ecd670d947e77555ef7cd1693bd53c694e2b52b04d10e1",
+ "9d086dcd22da165a43091991bede9c1c14515e656633cb759ec2c17f51c35253",
+ "23595ad1cb714559faaecaf946beb9a71e584616030ceaed8a8470f4bf62768f"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "9b0800c443e693067591737fdbcf0966fdfa50872d41d0c189d87cbc34c2771ee5e1255f"
+ "d604f09fcf167fda16437c245d299147299c69046895d22482db29aba37ff57f756716cd"
+ "3d6223077f747c4caffbecc0a7c9dfaaafd9a9817470ded8777e6355838ac54d11b2f0fc"
+ "3f43668ff949cc31de0c2d15af5ef17884e4d66a",
+ "0c9bce6a568ca239395fc3552755575cbcdddb1d89f6f5ab354517a057b17b48",
+ "044814d454495df7103e2da383aba55f7842fd84f1750ee5801ad32c10d0be6c7da0bd03"
+ "9d5097c8f0770477f6b18d247876e88e528bf0453eab515ffab8a9eda3",
+ "d414f1525cdcc41eba1652de017c034ebcc7946cb2efe4713d09f67c85b83153",
+ "84db02c678f9a21208cec8564d145a35ba8c6f26b4eb7e19522e439720dae44c",
+ "537c564da0d2dc5ac4376c5f0ca3b628d01d48df47a83d842c927e4d6db1e16d"},
+ {NID_X9_62_prime256v1, NID_sha224,
+ "fc3b8291c172dae635a6859f525beaf01cf683765d7c86f1a4d768df7cae055f639eccc0"
+ "8d7a0272394d949f82d5e12d69c08e2483e11a1d28a4c61f18193106e12e5de4a9d0b4bf"
+ "341e2acd6b715dc83ae5ff63328f8346f35521ca378b311299947f63ec593a5e32e6bd11"
+ "ec4edb0e75302a9f54d21226d23314729e061016",
+ "1daa385ec7c7f8a09adfcaea42801a4de4c889fb5c6eb4e92bc611d596d68e3f",
+ "04f04e9f2831d9697ae146c7d4552e5f91085cc46778400b75b76f00205252941dbd2671"
+ "48174cd0c2b019cd0a5256e2f3f889d1e597160372b5a1339c8d787f10",
+ "7707db348ee6f60365b43a2a994e9b40ed56fe03c2c31c7e781bc4ffadcba760",
+ "5d95c385eeba0f15db0b80ae151912409128c9c80e554246067b8f6a36d85ea5",
+ "db5d8a1e345f883e4fcb3871276f170b783c1a1e9da6b6615913368a8526f1c3"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "5905238877c77421f73e43ee3da6f2d9e2ccad5fc942dcec0cbd25482935faaf416983fe"
+ "165b1a045ee2bcd2e6dca3bdf46c4310a7461f9a37960ca672d3feb5473e253605fb1ddf"
+ "d28065b53cb5858a8ad28175bf9bd386a5e471ea7a65c17cc934a9d791e91491eb3754d0"
+ "3799790fe2d308d16146d5c9b0d0debd97d79ce8",
+ "519b423d715f8b581f4fa8ee59f4771a5b44c8130b4e3eacca54a56dda72b464",
+ "041ccbe91c075fc7f4f033bfa248db8fccd3565de94bbfb12f3c59ff46c271bf83ce4014"
+ "c68811f9a21a1fdb2c0e6113e06db7ca93b7404e78dc7ccd5ca89a4ca9",
+ "94a1bbb14b906a61a280f245f9e93c7f3b4a6247824f5d33b9670787642a68de",
+ "f3ac8061b514795b8843e3d6629527ed2afd6b1f6a555a7acabb5e6f79c8c2ac",
+ "8bf77819ca05a6b2786c76262bf7371cef97b218e96f175a3ccdda2acc058903"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "c35e2f092553c55772926bdbe87c9796827d17024dbb9233a545366e2e5987dd344deb72"
+ "df987144b8c6c43bc41b654b94cc856e16b96d7a821c8ec039b503e3d86728c494a967d8"
+ "3011a0e090b5d54cd47f4e366c0912bc808fbb2ea96efac88fb3ebec9342738e225f7c7c"
+ "2b011ce375b56621a20642b4d36e060db4524af1",
+ "0f56db78ca460b055c500064824bed999a25aaf48ebb519ac201537b85479813",
+ "04e266ddfdc12668db30d4ca3e8f7749432c416044f2d2b8c10bf3d4012aeffa8abfa864"
+ "04a2e9ffe67d47c587ef7a97a7f456b863b4d02cfc6928973ab5b1cb39",
+ "6d3e71882c3b83b156bb14e0ab184aa9fb728068d3ae9fac421187ae0b2f34c6",
+ "976d3a4e9d23326dc0baa9fa560b7c4e53f42864f508483a6473b6a11079b2db",
+ "1b766e9ceb71ba6c01dcd46e0af462cd4cfa652ae5017d4555b8eeefe36e1932"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "3c054e333a94259c36af09ab5b4ff9beb3492f8d5b4282d16801daccb29f70fe61a0b37f"
+ "fef5c04cd1b70e85b1f549a1c4dc672985e50f43ea037efa9964f096b5f62f7ffdf8d6bf"
+ "b2cc859558f5a393cb949dbd48f269343b5263dcdb9c556eca074f2e98e6d94c2c29a677"
+ "afaf806edf79b15a3fcd46e7067b7669f83188ee",
+ "e283871239837e13b95f789e6e1af63bf61c918c992e62bca040d64cad1fc2ef",
+ "0474ccd8a62fba0e667c50929a53f78c21b8ff0c3c737b0b40b1750b2302b0bde829074e"
+ "21f3a0ef88b9efdf10d06aa4c295cc1671f758ca0e4cd108803d0f2614",
+ "ad5e887eb2b380b8d8280ad6e5ff8a60f4d26243e0124c2f31a297b5d0835de2",
+ "35fb60f5ca0f3ca08542fb3cc641c8263a2cab7a90ee6a5e1583fac2bb6f6bd1",
+ "ee59d81bc9db1055cc0ed97b159d8784af04e98511d0a9a407b99bb292572e96"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "0989122410d522af64ceb07da2c865219046b4c3d9d99b01278c07ff63eaf1039cb787ae"
+ "9e2dd46436cc0415f280c562bebb83a23e639e476a02ec8cff7ea06cd12c86dcc3adefbf"
+ "1a9e9a9b6646c7599ec631b0da9a60debeb9b3e19324977f3b4f36892c8a38671c8e1cc8"
+ "e50fcd50f9e51deaf98272f9266fc702e4e57c30",
+ "a3d2d3b7596f6592ce98b4bfe10d41837f10027a90d7bb75349490018cf72d07",
+ "04322f80371bf6e044bc49391d97c1714ab87f990b949bc178cb7c43b7c22d89e13c15d5"
+ "4a5cc6b9f09de8457e873eb3deb1fceb54b0b295da6050294fae7fd999",
+ "24fc90e1da13f17ef9fe84cc96b9471ed1aaac17e3a4bae33a115df4e5834f18",
+ "d7c562370af617b581c84a2468cc8bd50bb1cbf322de41b7887ce07c0e5884ca",
+ "b46d9f2d8c4bf83546ff178f1d78937c008d64e8ecc5cbb825cb21d94d670d89"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "dc66e39f9bbfd9865318531ffe9207f934fa615a5b285708a5e9c46b7775150e818d7f24"
+ "d2a123df3672fff2094e3fd3df6fbe259e3989dd5edfcccbe7d45e26a775a5c4329a084f"
+ "057c42c13f3248e3fd6f0c76678f890f513c32292dd306eaa84a59abe34b16cb5e38d0e8"
+ "85525d10336ca443e1682aa04a7af832b0eee4e7",
+ "53a0e8a8fe93db01e7ae94e1a9882a102ebd079b3a535827d583626c272d280d",
+ "041bcec4570e1ec2436596b8ded58f60c3b1ebc6a403bc5543040ba829630572448af62a"
+ "4c683f096b28558320737bf83b9959a46ad2521004ef74cf85e67494e1",
+ "5d833e8d24cc7a402d7ee7ec852a3587cddeb48358cea71b0bedb8fabe84e0c4",
+ "18caaf7b663507a8bcd992b836dec9dc5703c080af5e51dfa3a9a7c387182604",
+ "77c68928ac3b88d985fb43fb615fb7ff45c18ba5c81af796c613dfa98352d29c"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "600974e7d8c5508e2c1aab0783ad0d7c4494ab2b4da265c2fe496421c4df238b0be25f25"
+ "659157c8a225fb03953607f7df996acfd402f147e37aee2f1693e3bf1c35eab3ae360a2b"
+ "d91d04622ea47f83d863d2dfecb618e8b8bdc39e17d15d672eee03bb4ce2cc5cf6b217e5"
+ "faf3f336fdd87d972d3a8b8a593ba85955cc9d71",
+ "4af107e8e2194c830ffb712a65511bc9186a133007855b49ab4b3833aefc4a1d",
+ "04a32e50be3dae2c8ba3f5e4bdae14cf7645420d425ead94036c22dd6c4fc59e00d623bf"
+ "641160c289d6742c6257ae6ba574446dd1d0e74db3aaa80900b78d4ae9",
+ "e18f96f84dfa2fd3cdfaec9159d4c338cd54ad314134f0b31e20591fc238d0ab",
+ "8524c5024e2d9a73bde8c72d9129f57873bbad0ed05215a372a84fdbc78f2e68",
+ "d18c2caf3b1072f87064ec5e8953f51301cada03469c640244760328eb5a05cb"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "dfa6cb9b39adda6c74cc8b2a8b53a12c499ab9dee01b4123642b4f11af336a91a5c9ce05"
+ "20eb2395a6190ecbf6169c4cba81941de8e76c9c908eb843b98ce95e0da29c5d43880402"
+ "64e05e07030a577cc5d176387154eabae2af52a83e85c61c7c61da930c9b19e45d7e34c8"
+ "516dc3c238fddd6e450a77455d534c48a152010b",
+ "78dfaa09f1076850b3e206e477494cddcfb822aaa0128475053592c48ebaf4ab",
+ "048bcfe2a721ca6d753968f564ec4315be4857e28bef1908f61a366b1f03c974790f6757"
+ "6a30b8e20d4232d8530b52fb4c89cbc589ede291e499ddd15fe870ab96",
+ "295544dbb2da3da170741c9b2c6551d40af7ed4e891445f11a02b66a5c258a77",
+ "c5a186d72df452015480f7f338970bfe825087f05c0088d95305f87aacc9b254",
+ "84a58f9e9d9e735344b316b1aa1ab5185665b85147dc82d92e969d7bee31ca30"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "51d2547cbff92431174aa7fc7302139519d98071c755ff1c92e4694b58587ea560f72f32"
+ "fc6dd4dee7d22bb7387381d0256e2862d0644cdf2c277c5d740fa089830eb52bf79d1e75"
+ "b8596ecf0ea58a0b9df61e0c9754bfcd62efab6ea1bd216bf181c5593da79f10135a9bc6"
+ "e164f1854bc8859734341aad237ba29a81a3fc8b",
+ "80e692e3eb9fcd8c7d44e7de9f7a5952686407f90025a1d87e52c7096a62618a",
+ "04a88bc8430279c8c0400a77d751f26c0abc93e5de4ad9a4166357952fe041e7672d365a"
+ "1eef25ead579cc9a069b6abc1b16b81c35f18785ce26a10ba6d1381185",
+ "7c80fd66d62cc076cef2d030c17c0a69c99611549cb32c4ff662475adbe84b22",
+ "9d0c6afb6df3bced455b459cc21387e14929392664bb8741a3693a1795ca6902",
+ "d7f9ddd191f1f412869429209ee3814c75c72fa46a9cccf804a2f5cc0b7e739f"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "558c2ac13026402bad4a0a83ebc9468e50f7ffab06d6f981e5db1d082098065bcff6f21a"
+ "7a74558b1e8612914b8b5a0aa28ed5b574c36ac4ea5868432a62bb8ef0695d27c1e3ceaf"
+ "75c7b251c65ddb268696f07c16d2767973d85beb443f211e6445e7fe5d46f0dce70d58a4"
+ "cd9fe70688c035688ea8c6baec65a5fc7e2c93e8",
+ "5e666c0db0214c3b627a8e48541cc84a8b6fd15f300da4dff5d18aec6c55b881",
+ "041bc487570f040dc94196c9befe8ab2b6de77208b1f38bdaae28f9645c4d2bc3aec8160"
+ "2abd8345e71867c8210313737865b8aa186851e1b48eaca140320f5d8f",
+ "2e7625a48874d86c9e467f890aaa7cd6ebdf71c0102bfdcfa24565d6af3fdce9",
+ "2f9e2b4e9f747c657f705bffd124ee178bbc5391c86d056717b140c153570fd9",
+ "f5413bfd85949da8d83de83ab0d19b2986613e224d1901d76919de23ccd03199"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "4d55c99ef6bd54621662c3d110c3cb627c03d6311393b264ab97b90a4b15214a5593ba25"
+ "10a53d63fb34be251facb697c973e11b665cb7920f1684b0031b4dd370cb927ca7168b0b"
+ "f8ad285e05e9e31e34bc24024739fdc10b78586f29eff94412034e3b606ed850ec2c1900"
+ "e8e68151fc4aee5adebb066eb6da4eaa5681378e",
+ "f73f455271c877c4d5334627e37c278f68d143014b0a05aa62f308b2101c5308",
+ "04b8188bd68701fc396dab53125d4d28ea33a91daf6d21485f4770f6ea8c565dde423f05"
+ "8810f277f8fe076f6db56e9285a1bf2c2a1dae145095edd9c04970bc4a",
+ "62f8665fd6e26b3fa069e85281777a9b1f0dfd2c0b9f54a086d0c109ff9fd615",
+ "1cc628533d0004b2b20e7f4baad0b8bb5e0673db159bbccf92491aef61fc9620",
+ "880e0bbf82a8cf818ed46ba03cf0fc6c898e36fca36cc7fdb1d2db7503634430"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "f8248ad47d97c18c984f1f5c10950dc1404713c56b6ea397e01e6dd925e903b4fadfe2c9"
+ "e877169e71ce3c7fe5ce70ee4255d9cdc26f6943bf48687874de64f6cf30a012512e787b"
+ "88059bbf561162bdcc23a3742c835ac144cc14167b1bd6727e940540a9c99f3cbb41fb1d"
+ "cb00d76dda04995847c657f4c19d303eb09eb48a",
+ "b20d705d9bd7c2b8dc60393a5357f632990e599a0975573ac67fd89b49187906",
+ "0451f99d2d52d4a6e734484a018b7ca2f895c2929b6754a3a03224d07ae61166ce4737da"
+ "963c6ef7247fb88d19f9b0c667cac7fe12837fdab88c66f10d3c14cad1",
+ "72b656f6b35b9ccbc712c9f1f3b1a14cbbebaec41c4bca8da18f492a062d6f6f",
+ "9886ae46c1415c3bc959e82b760ad760aab66885a84e620aa339fdf102465c42",
+ "2bf3a80bc04faa35ebecc0f4864ac02d349f6f126e0f988501b8d3075409a26c"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "3b6ee2425940b3d240d35b97b6dcd61ed3423d8e71a0ada35d47b322d17b35ea0472f35e"
+ "dd1d252f87b8b65ef4b716669fc9ac28b00d34a9d66ad118c9d94e7f46d0b4f6c2b2d339"
+ "fd6bcd351241a387cc82609057048c12c4ec3d85c661975c45b300cb96930d89370a327c"
+ "98b67defaa89497aa8ef994c77f1130f752f94a4",
+ "d4234bebfbc821050341a37e1240efe5e33763cbbb2ef76a1c79e24724e5a5e7",
+ "048fb287f0202ad57ae841aea35f29b2e1d53e196d0ddd9aec24813d64c0922fb71f6daf"
+ "f1aa2dd2d6d3741623eecb5e7b612997a1039aab2e5cf2de969cfea573",
+ "d926fe10f1bfd9855610f4f5a3d666b1a149344057e35537373372ead8b1a778",
+ "490efd106be11fc365c7467eb89b8d39e15d65175356775deab211163c2504cb",
+ "644300fc0da4d40fb8c6ead510d14f0bd4e1321a469e9c0a581464c7186b7aa7"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "c5204b81ec0a4df5b7e9fda3dc245f98082ae7f4efe81998dcaa286bd4507ca840a53d21"
+ "b01e904f55e38f78c3757d5a5a4a44b1d5d4e480be3afb5b394a5d2840af42b1b4083d40"
+ "afbfe22d702f370d32dbfd392e128ea4724d66a3701da41ae2f03bb4d91bb946c7969404"
+ "cb544f71eb7a49eb4c4ec55799bda1eb545143a7",
+ "b58f5211dff440626bb56d0ad483193d606cf21f36d9830543327292f4d25d8c",
+ "0468229b48c2fe19d3db034e4c15077eb7471a66031f28a980821873915298ba76303e8e"
+ "e3742a893f78b810991da697083dd8f11128c47651c27a56740a80c24c",
+ "e158bf4a2d19a99149d9cdb879294ccb7aaeae03d75ddd616ef8ae51a6dc1071",
+ "e67a9717ccf96841489d6541f4f6adb12d17b59a6bef847b6183b8fcf16a32eb",
+ "9ae6ba6d637706849a6a9fc388cf0232d85c26ea0d1fe7437adb48de58364333"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "72e81fe221fb402148d8b7ab03549f1180bcc03d41ca59d7653801f0ba853add1f6d29ed"
+ "d7f9abc621b2d548f8dbf8979bd16608d2d8fc3260b4ebc0dd42482481d548c7075711b5"
+ "759649c41f439fad69954956c9326841ea6492956829f9e0dc789f73633b40f6ac77bcae"
+ "6dfc7930cfe89e526d1684365c5b0be2437fdb01",
+ "54c066711cdb061eda07e5275f7e95a9962c6764b84f6f1f3ab5a588e0a2afb1",
+ "040a7dbb8bf50cb605eb2268b081f26d6b08e012f952c4b70a5a1e6e7d46af98bbf26dd7"
+ "d799930062480849962ccf5004edcfd307c044f4e8f667c9baa834eeae",
+ "646fe933e96c3b8f9f507498e907fdd201f08478d0202c752a7c2cfebf4d061a",
+ "b53ce4da1aa7c0dc77a1896ab716b921499aed78df725b1504aba1597ba0c64b",
+ "d7c246dc7ad0e67700c373edcfdd1c0a0495fc954549ad579df6ed1438840851"},
+ {NID_X9_62_prime256v1, NID_sha256,
+ "21188c3edd5de088dacc1076b9e1bcecd79de1003c2414c3866173054dc82dde85169baa"
+ "77993adb20c269f60a5226111828578bcc7c29e6e8d2dae81806152c8ba0c6ada1986a19"
+ "83ebeec1473a73a04795b6319d48662d40881c1723a706f516fe75300f92408aa1dc6ae4"
+ "288d2046f23c1aa2e54b7fb6448a0da922bd7f34",
+ "34fa4682bf6cb5b16783adcd18f0e6879b92185f76d7c920409f904f522db4b1",
+ "04105d22d9c626520faca13e7ced382dcbe93498315f00cc0ac39c4821d0d737376c47f3"
+ "cbbfa97dfcebe16270b8c7d5d3a5900b888c42520d751e8faf3b401ef4",
+ "a6f463ee72c9492bc792fe98163112837aebd07bab7a84aaed05be64db3086f4",
+ "542c40a18140a6266d6f0286e24e9a7bad7650e72ef0e2131e629c076d962663",
+ "4f7f65305e24a6bbb5cff714ba8f5a2cee5bdc89ba8d75dcbf21966ce38eb66f"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "e0b8596b375f3306bbc6e77a0b42f7469d7e83635990e74aa6d713594a3a24498feff500"
+ "6790742d9c2e9b47d714bee932435db747c6e733e3d8de41f2f91311f2e9fd8e02565163"
+ "1ffd84f66732d3473fbd1627e63dc7194048ebec93c95c159b5039ab5e79e42c80b484a9"
+ "43f125de3da1e04e5bf9c16671ad55a1117d3306",
+ "b6faf2c8922235c589c27368a3b3e6e2f42eb6073bf9507f19eed0746c79dced",
+ "04e0e7b99bc62d8dd67883e39ed9fa0657789c5ff556cc1fd8dd1e2a55e9e3f24363fbfd"
+ "0232b95578075c903a4dbf85ad58f8350516e1ec89b0ee1f5e1362da69",
+ "9980b9cdfcef3ab8e219b9827ed6afdd4dbf20bd927e9cd01f15762703487007",
+ "f5087878e212b703578f5c66f434883f3ef414dc23e2e8d8ab6a8d159ed5ad83",
+ "306b4c6c20213707982dffbb30fba99b96e792163dd59dbe606e734328dd7c8a"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "099a0131179fff4c6928e49886d2fdb3a9f239b7dd5fa828a52cbbe3fcfabecfbba3e192"
+ "159b887b5d13aa1e14e6a07ccbb21f6ad8b7e88fee6bea9b86dea40ffb962f38554056fb"
+ "7c5bb486418915f7e7e9b9033fe3baaf9a069db98bc02fa8af3d3d1859a11375d6f98aa2"
+ "ce632606d0800dff7f55b40f971a8586ed6b39e9",
+ "118958fd0ff0f0b0ed11d3cf8fa664bc17cdb5fed1f4a8fc52d0b1ae30412181",
+ "04afda82260c9f42122a3f11c6058839488f6d7977f6f2a263c67d06e27ea2c3550ae2bb"
+ "dd2207c590332c5bfeb4c8b5b16622134bd4dc55382ae806435468058b",
+ "23129a99eeda3d99a44a5778a46e8e7568b91c31fb7a8628c5d9820d4bed4a6b",
+ "e446600cab1286ebc3bb332012a2f5cc33b0a5ef7291d5a62a84de5969d77946",
+ "cf89b12793ee1792eb26283b48fa0bdcb45ae6f6ad4b02564bf786bb97057d5a"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "0fbc07ea947c946bea26afa10c51511039b94ddbc4e2e4184ca3559260da24a14522d149"
+ "7ca5e77a5d1a8e86583aeea1f5d4ff9b04a6aa0de79cd88fdb85e01f171143535f2f7c23"
+ "b050289d7e05cebccdd131888572534bae0061bdcc3015206b9270b0d5af9f1da2f9de91"
+ "772d178a632c3261a1e7b3fb255608b3801962f9",
+ "3e647357cd5b754fad0fdb876eaf9b1abd7b60536f383c81ce5745ec80826431",
+ "04702b2c94d039e590dd5c8f9736e753cf5824aacf33ee3de74fe1f5f7c858d5ed0c2889"
+ "4e907af99fb0d18c9e98f19ac80dd77abfa4bebe45055c0857b82a0f4d",
+ "9beab7722f0bcb468e5f234e074170a60225255de494108459abdf603c6e8b35",
+ "c4021fb7185a07096547af1fb06932e37cf8bd90cf593dea48d48614fa237e5e",
+ "7fb45d09e2172bec8d3e330aa06c43fbb5f625525485234e7714b7f6e92ba8f1"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "1e38d750d936d8522e9db1873fb4996bef97f8da3c6674a1223d29263f1234a90b751785"
+ "316444e9ba698bc8ab6cd010638d182c9adad4e334b2bd7529f0ae8e9a52ad60f59804b2"
+ "d780ed52bdd33b0bf5400147c28b4304e5e3434505ae7ce30d4b239e7e6f0ecf058badd5"
+ "b388eddbad64d24d2430dd04b4ddee98f972988f",
+ "76c17c2efc99891f3697ba4d71850e5816a1b65562cc39a13da4b6da9051b0fd",
+ "04d12512e934c367e4c4384dbd010e93416840288a0ba00b299b4e7c0d91578b57ebf883"
+ "5661d9b578f18d14ae4acf9c357c0dc8b7112fc32824a685ed72754e23",
+ "77cffa6f9a73904306f9fcd3f6bbb37f52d71e39931bb4aec28f9b076e436ccf",
+ "4d5a9d95b0f09ce8704b0f457b39059ee606092310df65d3f8ae7a2a424cf232",
+ "7d3c014ca470a73cef1d1da86f2a541148ad542fbccaf9149d1b0b030441a7eb"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "abcf0e0f046b2e0672d1cc6c0a114905627cbbdefdf9752f0c31660aa95f2d0ede72d179"
+ "19a9e9b1add3213164e0c9b5ae3c76f1a2f79d3eeb444e6741521019d8bd5ca391b28c10"
+ "63347f07afcfbb705be4b52261c19ebaf1d6f054a74d86fb5d091fa7f229450996b76f0a"
+ "da5f977b09b58488eebfb5f5e9539a8fd89662ab",
+ "67b9dea6a575b5103999efffce29cca688c781782a41129fdecbce76608174de",
+ "04b4238b029fc0b7d9a5286d8c29b6f3d5a569e9108d44d889cd795c4a385905be8cb3ff"
+ "f8f6cca7187c6a9ad0a2b1d9f40ae01b32a7e8f8c4ca75d71a1fffb309",
+ "d02617f26ede3584f0afcfc89554cdfb2ae188c192092fdde3436335fafe43f1",
+ "26fd9147d0c86440689ff2d75569795650140506970791c90ace0924b44f1586",
+ "00a34b00c20a8099df4b0a757cbef8fea1cb3ea7ced5fbf7e987f70b25ee6d4f"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "dc3d4884c741a4a687593c79fb4e35c5c13c781dca16db561d7e393577f7b62ca41a6e25"
+ "9fc1fb8d0c4e1e062517a0fdf95558b7799f20c211796167953e6372c11829beec64869d"
+ "67bf3ee1f1455dd87acfbdbcc597056e7fb347a17688ad32fda7ccc3572da7677d7255c2"
+ "61738f07763cd45973c728c6e9adbeecadc3d961",
+ "ecf644ea9b6c3a04fdfe2de4fdcb55fdcdfcf738c0b3176575fa91515194b566",
+ "04c3bdc7c795ec94620a2cfff614c13a3390a5e86c892e53a24d3ed22228bc85bf70480f"
+ "c5cf4aacd73e24618b61b5c56c1ced8c4f1b869580ea538e68c7a61ca3",
+ "53291d51f68d9a12d1dcdc58892b2f786cc15f631f16997d2a49bace513557d4",
+ "a860c8b286edf973ce4ce4cf6e70dc9bbf3818c36c023a845677a9963705df8b",
+ "5630f986b1c45e36e127dd7932221c4272a8cc6e255e89f0f0ca4ec3a9f76494"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "719bf1911ae5b5e08f1d97b92a5089c0ab9d6f1c175ac7199086aeeaa416a17e6d6f8486"
+ "c711d386f284f096296689a54d330c8efb0f5fa1c5ba128d3234a3da856c2a94667ef710"
+ "3616a64c913135f4e1dc50e38daa60610f732ad1bedfcc396f87169392520314a6b6b9af"
+ "6793dbabad4599525228cc7c9c32c4d8e097ddf6",
+ "4961485cbc978f8456ec5ac7cfc9f7d9298f99415ecae69c8491b258c029bfee",
+ "048d40bf2299e05d758d421972e81cfb0cce68b949240dc30f315836acc70bef035674e6"
+ "f77f8b46f46cca937d83b128dffbe9bd7e0d3d08aa2cbbfdfb16f72c9a",
+ "373a825b5a74b7b9e02f8d4d876b577b4c3984168d704ba9f95b19c05ed590af",
+ "ef6fb386ad044b63feb7445fa16b10319018e9cea9ef42bca83bdad01992234a",
+ "ac1f42f652eb1786e57be01d847c81f7efa072ba566d4583af4f1551a3f76c65"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "7cf19f4c851e97c5bca11a39f0074c3b7bd3274e7dd75d0447b7b84995dfc9f716bf08c2"
+ "5347f56fcc5e5149cb3f9cfb39d408ace5a5c47e75f7a827fa0bb9921bb5b23a6053dbe1"
+ "fa2bba341ac874d9b1333fc4dc224854949f5c8d8a5fedd02fb26fdfcd3be351aec0fcbe"
+ "f18972956c6ec0effaf057eb4420b6d28e0c008c",
+ "587907e7f215cf0d2cb2c9e6963d45b6e535ed426c828a6ea2fb637cca4c5cbd",
+ "04660da45c413cc9c9526202c16b402af602d30daaa7c342f1e722f15199407f31e6f8cb"
+ "b06913cc718f2d69ba2fb3137f04a41c27c676d1a80fbf30ea3ca46439",
+ "6b8eb7c0d8af9456b95dd70561a0e902863e6dfa1c28d0fd4a0509f1c2a647b2",
+ "08fabf9b57de81875bfa7a4118e3e44cfb38ec6a9b2014940207ba3b1c583038",
+ "a58d199b1deba7350616230d867b2747a3459421811c291836abee715b8f67b4"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "b892ffabb809e98a99b0a79895445fc734fa1b6159f9cddb6d21e510708bdab6076633ac"
+ "30aaef43db566c0d21f4381db46711fe3812c5ce0fb4a40e3d5d8ab24e4e82d3560c6dc7"
+ "c37794ee17d4a144065ef99c8d1c88bc22ad8c4c27d85ad518fa5747ae35276fc104829d"
+ "3f5c72fc2a9ea55a1c3a87007cd133263f79e405",
+ "24b1e5676d1a9d6b645a984141a157c124531feeb92d915110aef474b1e27666",
+ "04b4909a5bdf25f7659f4ef35e4b811429fb2c59126e3dad09100b46aea6ebe7a6760ae0"
+ "15fa6af5c9749c4030fdb5de6e58c6b5b1944829105cf7edf7d3a22cfb",
+ "88794923d8943b5dbcc7a7a76503880ff7da632b0883aaa60a9fcc71bf880fd6",
+ "6ec9a340b77fae3c7827fa96d997e92722ff2a928217b6dd3c628f3d49ae4ce6",
+ "637b54bbcfb7e7d8a41ea317fcfca8ad74eb3bb6b778bc7ef9dec009281976f7"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "8144e37014c95e13231cbd6fa64772771f93b44e37f7b02f592099cc146343edd4f4ec9f"
+ "a1bc68d7f2e9ee78fc370443aa2803ff4ca52ee49a2f4daf2c8181ea7b8475b3a0f608fc"
+ "3279d09e2d057fbe3f2ffbe5133796124781299c6da60cfe7ecea3abc30706ded2cdf18f"
+ "9d788e59f2c31662df3abe01a9b12304fb8d5c8c",
+ "bce49c7b03dcdc72393b0a67cf5aa5df870f5aaa6137ada1edc7862e0981ec67",
+ "04c786d9421d67b72b922cf3def2a25eeb5e73f34543eb50b152e738a98afb0ca5679627"
+ "1e79e2496f9e74b126b1123a3d067de56b5605d6f51c8f6e1d5bb93aba",
+ "89e690d78a5e0d2b8ce9f7fcbf34e2605fd9584760fa7729043397612dd21f94",
+ "07e5054c384839584624e8d730454dc27e673c4a90cbf129d88b91250341854d",
+ "f7e665b88614d0c5cbb3007cafe713763d81831525971f1747d92e4d1ca263a7"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "a3683d120807f0a030feed679785326698c3702f1983eaba1b70ddfa7f0b3188060b845e"
+ "2b67ed57ee68087746710450f7427cb34655d719c0acbc09ac696adb4b22aba1b9322b71"
+ "11076e67053a55f62b501a4bca0ad9d50a868f51aeeb4ef27823236f5267e8da83e14304"
+ "7422ce140d66e05e44dc84fb3a4506b2a5d7caa8",
+ "73188a923bc0b289e81c3db48d826917910f1b957700f8925425c1fb27cabab9",
+ "0486662c014ab666ee770723be8da38c5cd299efc6480fc6f8c3603438fa8397b9f26b33"
+ "07a650c3863faaa5f642f3ba1384c3d3a02edd3d48c657c269609cc3fc",
+ "ec90584ab3b383b590626f36ed4f5110e49888aec7ae7a9c5ea62dd2dc378666",
+ "13e9ad59112fde3af4163eb5c2400b5e9a602576d5869ac1c569075f08c90ff6",
+ "708ac65ff2b0baaccc6dd954e2a93df46016bd04457636de06798fcc17f02be5"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "b1df8051b213fc5f636537e37e212eb20b2423e6467a9c7081336a870e6373fc835899d5"
+ "9e546c0ac668cc81ce4921e88f42e6da2a109a03b4f4e819a17c955b8d099ec6b282fb49"
+ "5258dca13ec779c459da909475519a3477223c06b99afbd77f9922e7cbef844b93f3ce5f"
+ "50db816b2e0d8b1575d2e17a6b8db9111d6da578",
+ "f637d55763fe819541588e0c603f288a693cc66823c6bb7b8e003bd38580ebce",
+ "0474a4620c578601475fc169a9b84be613b4a16cb6acab8fd98848a6ec9fbd133d42b9e3"
+ "5d347c107e63bd55f525f915bcf1e3d2b81d002d3c39acf10fc30645a1",
+ "4d578f5099636234d9c1d566f1215d5d887ae5d47022be17dbf32a11a03f053b",
+ "113a933ebc4d94ce1cef781e4829df0c493b0685d39fb2048ce01b21c398dbba",
+ "3005bd4ec63dbd04ce9ff0c6246ad65d27fcf62edb2b7e461589f9f0e7446ffd"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "0b918ede985b5c491797d0a81446b2933be312f419b212e3aae9ba5914c00af431747a9d"
+ "287a7c7761e9bcbc8a12aaf9d4a76d13dad59fc742f8f218ef66eb67035220a07acc1a35"
+ "7c5b562ecb6b895cf725c4230412fefac72097f2c2b829ed58742d7c327cad0f1058df1b"
+ "ddd4ae9c6d2aba25480424308684cecd6517cdd8",
+ "2e357d51517ff93b821f895932fddded8347f32596b812308e6f1baf7dd8a47f",
+ "047e4078a1d50c669fb2996dd9bacb0c3ac7ede4f58fa0fa1222e78dbf5d1f41860014e4"
+ "6e90cc171fbb83ea34c6b78202ea8137a7d926f0169147ed5ae3d6596f",
+ "be522b0940b9a40d84bf790fe6abdc252877e671f2efa63a33a65a512fc2aa5c",
+ "a26b9ad775ac37ff4c7f042cdc4872c5e4e5e800485f488ddfaaed379f468090",
+ "f88eae2019bebbba62b453b8ee3472ca5c67c267964cffe0cf2d2933c1723dff"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "0fab26fde1a4467ca930dbe513ccc3452b70313cccde2994eead2fde85c8da1db84d7d06"
+ "a024c9e88629d5344224a4eae01b21a2665d5f7f36d5524bf5367d7f8b6a71ea05d413d4"
+ "afde33777f0a3be49c9e6aa29ea447746a9e77ce27232a550b31dd4e7c9bc8913485f2dc"
+ "83a56298051c92461fd46b14cc895c300a4fb874",
+ "77d60cacbbac86ab89009403c97289b5900466856887d3e6112af427f7f0f50b",
+ "04a62032dfdb87e25ed0c70cad20d927c7effeb2638e6c88ddd670f74df16090e544c5ee"
+ "2cf740ded468f5d2efe13daa7c5234645a37c073af35330d03a4fed976",
+ "06c1e692b045f425a21347ecf72833d0242906c7c1094f805566cdcb1256e394",
+ "eb173b51fb0aec318950d097e7fda5c34e529519631c3e2c9b4550b903da417d",
+ "ca2c13574bf1b7d56e9dc18315036a31b8bceddf3e2c2902dcb40f0cc9e31b45"},
+ {NID_X9_62_prime256v1, NID_sha384,
+ "7843f157ef8566722a7d69da67de7599ee65cb3975508f70c612b3289190e364141781e0"
+ "b832f2d9627122742f4b5871ceeafcd09ba5ec90cae6bcc01ae32b50f13f63918dfb5177"
+ "df9797c6273b92d103c3f7a3fc2050d2b196cc872c57b77f9bdb1782d4195445fcc6236d"
+ "d8bd14c8bcbc8223a6739f6a17c9a861e8c821a6",
+ "486854e77962117f49e09378de6c9e3b3522fa752b10b2c810bf48db584d7388",
+ "04760b5624bd64d19c866e54ccd74ad7f98851afdbc3ddeae3ec2c52a135be9cfafeca15"
+ "ce9350877102eee0f5af18b2fed89dc86b7df0bf7bc2963c1638e36fe8",
+ "e4f77c6442eca239b01b0254e11a4182782d96f48ab521cc3d1d68df12b5a41a",
+ "bdff14e4600309c2c77f79a25963a955b5b500a7b2d34cb172cd6acd52905c7b",
+ "b0479cdb3df79923ec36a104a129534c5d59f622be7d613aa04530ad2507d3a2"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "6c8572b6a3a4a9e8e03dbeed99334d41661b8a8417074f335ab1845f6cc852adb8c01d98"
+ "20fcf8e10699cc827a8fbdca2cbd46cc66e4e6b7ba41ec3efa733587e4a30ec552cd8dda"
+ "b8163e148e50f4d090782897f3ddac84a41e1fcfe8c56b6152c0097b0d634b41011471ff"
+ "d004f43eb4aafc038197ec6bae2b4470e869bded",
+ "9dd0d3a3d514c2a8adb162b81e3adfba3299309f7d2018f607bdb15b1a25f499",
+ "046b738de3398b6ac57b9591f9d7985dd4f32137ad3460dcf8970c1390cb9eaf8d83bc61"
+ "e26d2bbbd3cf2d2ab445a2bc4ab5dde41f4a13078fd1d3cc36ab596d57",
+ "9106192170ccb3c64684d48287bb81bbed51b40d503462c900e5c7aae43e380a",
+ "275fa760878b4dc05e9d157fedfd8e9b1c9c861222a712748cb4b7754c043fb1",
+ "699d906bb8435a05345af3b37e3b357786939e94caae257852f0503adb1e0f7e"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "7e3c8fe162d48cc8c5b11b5e5ebc05ebc45c439bdbc0b0902145921b8383037cb0812222"
+ "031598cd1a56fa71694fbd304cc62938233465ec39c6e49f57dfe823983b6923c4e86563"
+ "3949183e6b90e9e06d8275f3907d97967d47b6239fe2847b7d49cf16ba69d2862083cf1b"
+ "ccf7afe34fdc90e21998964107b64abe6b89d126",
+ "f9bf909b7973bf0e3dad0e43dcb2d7fa8bda49dbe6e5357f8f0e2bd119be30e6",
+ "04f2a6674d4e86152a527199bed293fa63acde1b4d8a92b62e552210ba45c38792c72565"
+ "c24f0eee6a094af341ddd8579747b865f91c8ed5b44cda8a19cc93776f",
+ "e547791f7185850f03d0c58419648f65b9d29cdc22ed1de2a64280220cfcafba",
+ "4782903d2aaf8b190dab5cae2223388d2d8bd845b3875d37485c54e1ded1d3d8",
+ "dfb40e406bfa074f0bf832771b2b9f186e2211f0bca279644a0ca8559acf39da"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "d5aa8ac9218ca661cd177756af6fbb5a40a3fecfd4eea6d5872fbb9a2884784aa9b5f0c0"
+ "23a6e0da5cf6364754ee6465b4ee2d0ddc745b02994c98427a213c849537da5a4477b3ab"
+ "fe02648be67f26e80b56a33150490d062aaac137aa47f11cfeddba855bab9e4e028532a5"
+ "63326d927f9e6e3292b1fb248ee90b6f429798db",
+ "724567d21ef682dfc6dc4d46853880cfa86fe6fea0efd51fac456f03c3d36ead",
+ "0470b877b5e365fcf08140b1eca119baba662879f38e059d074a2cb60b03ea5d395f56f9"
+ "4d591df40b9f3b8763ac4b3dbe622c956d5bd0c55658b6f46fa3deb201",
+ "79d6c967ed23c763ece9ca4b026218004c84dc2d4ccc86cf05c5d0f791f6279b",
+ "2ba2ea2d316f8937f184ad3028e364574d20a202e4e7513d7af57ac2456804d1",
+ "64fe94968d18c5967c799e0349041b9e40e6c6c92ebb475e80dd82f51cf07320"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "790b06054afc9c3fc4dfe72df19dd5d68d108cfcfca6212804f6d534fd2fbe489bd8f64b"
+ "f205ce04bcb50124a12ce5238fc3fe7dd76e6fa640206af52549f133d593a1bfd423ab73"
+ "7f3326fa79433cde293236f90d4238f0dd38ed69492ddbd9c3eae583b6325a95dec3166f"
+ "e52b21658293d8c137830ef45297d67813b7a508",
+ "29c5d54d7d1f099d50f949bfce8d6073dae059c5a19cc70834722f18a7199edd",
+ "043088d4f45d274cc5f418c8ecc4cbcf96be87491f420250f8cbc01cdf2503ec47634db4"
+ "8198129237ed068c88ff5809f6211921a6258f548f4b64dd125921b78b",
+ "0508ad7774908b5705895fda5c3b7a3032bf85dab7232bf981177019f3d76460",
+ "acd9f3b63626c5f32103e90e1dd1695907b1904aa9b14f2132caef331321971b",
+ "15c04a8bd6c13ed5e9961814b2f406f064670153e4d5465dcef63c1d9dd52a87"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "6d549aa87afdb8bfa60d22a68e2783b27e8db46041e4df04be0c261c4734b608a96f198d"
+ "1cdb8d082ae48579ec9defcf21fbc72803764a58c31e5323d5452b9fb57c8991d3174914"
+ "0da7ef067b18bf0d7dfbae6eefd0d8064f334bf7e9ec1e028daed4e86e17635ec2e409a3"
+ "ed1238048a45882c5c57501b314e636b9bc81cbe",
+ "0d8095da1abba06b0d349c226511f642dabbf1043ad41baa4e14297afe8a3117",
+ "0475a45758ced45ecf55f755cb56ca2601d794ebeaeb2e6107fe2fc443f580e23c5303d4"
+ "7d5a75ec821d51a2ee7548448208c699eca0cd89810ffc1aa4faf81ead",
+ "5165c54def4026ab648f7768c4f1488bcb183f6db7ffe02c7022a529a116482a",
+ "ebc85fc4176b446b3384ccc62fc2526b45665561a0e7e9404ac376c90e450b59",
+ "8b2c09428e62c5109d17ed0cf8f9fd7c370d018a2a73f701effc9b17d04852c6"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "1906e48b7f889ee3ff7ab0807a7aa88f53f4018808870bfed6372a77330c737647961324"
+ "c2b4d46f6ee8b01190474951a701b048ae86579ff8e3fc889fecf926b17f98958ac7534e"
+ "6e781ca2db2baa380dec766cfb2a3eca2a9d5818967d64dfab84f768d24ec122eebacaab"
+ "0a4dc3a75f37331bb1c43dd8966cc09ec4945bbd",
+ "52fe57da3427b1a75cb816f61c4e8e0e0551b94c01382b1a80837940ed579e61",
+ "042177e20a2092a46667debdcc21e7e45d6da72f124adecbc5ada6a7bcc7b401d5550e46"
+ "8f2626070a080afeeb98edd75a721eb773c8e62149f3e903cf9c4d7b61",
+ "0464fe9674b01ff5bd8be21af3399fad66f90ad30f4e8ee6e2eb9bcccfd5185c",
+ "f8250f073f34034c1cde58f69a85e2f5a030703ebdd4dbfb98d3b3690db7d114",
+ "a9e83e05f1d6e0fef782f186bedf43684c825ac480174d48b0e4d31505e27498"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "7b59fef13daf01afec35dea3276541be681c4916767f34d4e874464d20979863ee77ad0f"
+ "d1635bcdf93e9f62ed69ae52ec90aab5bbf87f8951213747ccec9f38c775c1df1e9d7f73"
+ "5c2ce39b42edb3b0c5086247556cfea539995c5d9689765288ec600848ecf085c01ca738"
+ "bbef11f5d12d4457db988b4add90be00781024ad",
+ "003d91611445919f59bfe3ca71fe0bfdeb0e39a7195e83ac03a37c7eceef0df2",
+ "047b9c592f61aae0555855d0b9ebb6fd00fb6746e8842e2523565c858630b9ba00d35b2e"
+ "168b1875bbc563bea5e8d63c4e38957c774a65e762959a349eaf263ba0",
+ "ef9df291ea27a4b45708f7608723c27d7d56b7df0599a54bc2c2fabbff373b40",
+ "66d057fd39958b0e4932bacd70a1769bbadcb62e4470937b45497a3d4500fabb",
+ "6c853b889e18b5a49ee54b54dd1aaedfdd642e30eba171c5cab677f0df9e7318"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "041a6767a935dc3d8985eb4e608b0cbfebe7f93789d4200bcfe595277ac2b0f402889b58"
+ "0b72def5da778a680fd380c955421f626d52dd9a83ea180187b850e1b72a4ec6dd63235e"
+ "598fd15a9b19f8ce9aec1d23f0bd6ea4d92360d50f951152bc9a01354732ba0cf90aaed3"
+ "3c307c1de8fa3d14f9489151b8377b57c7215f0b",
+ "48f13d393899cd835c4193670ec62f28e4c4903e0bbe5817bf0996831a720bb7",
+ "0482a1a96f4648393c5e42633ecdeb1d8245c78c5ea236b5bab460dedcc8924bc0e8cbf0"
+ "3c34b5154f876de19f3bb6fd43cd2eabf6e7c95467bcfa8c8fc42d76fd",
+ "efed736e627899fea944007eea39a4a63c0c2e26491cd12adb546be3e5c68f7d",
+ "cf7fc24bdaa09ac0cca8497e13298b961380668613c7493954048c06385a7044",
+ "f38b1c8306cf82ab76ee3a772b14416b49993fe11f986e9b0f0593c52ec91525"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "7905a9036e022c78b2c9efd40b77b0a194fbc1d45462779b0b76ad30dc52c564e48a493d"
+ "8249a061e62f26f453ba566538a4d43c64fb9fdbd1f36409316433c6f074e1b47b544a84"
+ "7de25fc67d81ac801ed9f7371a43da39001c90766f943e629d74d0436ba1240c3d7fab99"
+ "0d586a6d6ef1771786722df56448815f2feda48f",
+ "95c99cf9ec26480275f23de419e41bb779590f0eab5cf9095d37dd70cb75e870",
+ "0442c292b0fbcc9f457ae361d940a9d45ad9427431a105a6e5cd90a345fe3507f7313b08"
+ "fd2fa351908b3178051ee782cc62b9954ad95d4119aa564900f8ade70c",
+ "4c08dd0f8b72ae9c674e1e448d4e2afe3a1ee69927fa23bbff3716f0b99553b7",
+ "f2bc35eb1b8488b9e8d4a1dbb200e1abcb855458e1557dc1bf988278a174eb3b",
+ "ed9a2ec043a1d578e8eba6f57217976310e8674385ad2da08d6146c629de1cd9"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "cf25e4642d4f39d15afb7aec79469d82fc9aedb8f89964e79b749a852d931d3743650280"
+ "4e39555f5a3c75dd958fd5291ada647c1a5e38fe7b1048f16f2b711fdd5d39acc0812ca6"
+ "5bd50d7f8119f2fd195ab16633503a78ee9102c1f9c4c22568e0b54bd4fa3f5ff7b49160"
+ "bf23e7e2231b1ebebbdaf0e4a7d4484158a87e07",
+ "e15e835d0e2217bc7c6f05a498f20af1cd56f2f165c23d225eb3360aa2c5cbcf",
+ "0489dd22052ec3ab4840206a62f2270c21e7836d1a9109a3407dd0974c7802b9aee91609"
+ "ba35c7008b080c77a9068d97a14ca77b97299e74945217672b2fd5faf0",
+ "c9f621441c235fc47ec34eef4c08625df1ec74918e1f86075b753f2589f4c60b",
+ "a70d1a2d555d599bfb8c9b1f0d43725341151d17a8d0845fa56f3563703528a7",
+ "4e05c45adf41783e394a5312f86e66871c4be4896948c85966879d5c66d54b37"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "7562c445b35883cc937be6349b4cefc3556a80255d70f09e28c3f393daac19442a7eeced"
+ "cdfbe8f7628e30cd8939537ec56d5c9645d43340eb4e78fc5dd4322de8a07966b262770d"
+ "7ff13a071ff3dce560718e60ed3086b7e0003a6abafe91af90af86733ce8689440bf73d2"
+ "aa0acfe9776036e877599acbabfcb03bb3b50faa",
+ "808c08c0d77423a6feaaffc8f98a2948f17726e67c15eeae4e672edbe388f98c",
+ "04b0c0ad5e1f6001d8e9018ec611b2e3b91923e69fa6c98690ab644d650f640c42610539"
+ "c0b9ed21ac0a2f27527c1a61d9b47cbf033187b1a6ada006eb5b2662ed",
+ "1f6d4a905c761a53d54c362976717d0d7fc94d222bb5489e4830080a1a67535d",
+ "83404dcf8320baf206381800071e6a75160342d19743b4f176960d669dd03d07",
+ "3f75dcf102008b2989f81683ae45e9f1d4b67a6ef6fd5c8af44828af80e1cfb5"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "051c2db8e71e44653ea1cb0afc9e0abdf12658e9e761bfb767c20c7ab4adfcb18ed9b5c3"
+ "72a3ac11d8a43c55f7f99b33355437891686d42362abd71db8b6d84dd694d6982f061217"
+ "8a937aa934b9ac3c0794c39027bdd767841c4370666c80dbc0f8132ca27474f553d266de"
+ "efd7c9dbad6d734f9006bb557567701bb7e6a7c9",
+ "f7c6315f0081acd8f09c7a2c3ec1b7ece20180b0a6365a27dcd8f71b729558f9",
+ "04250f7112d381c1751860045d9bcaf20dbeb25a001431f96ac6f19109362ffebb49fba9"
+ "efe73546135a5a31ab3753e247034741ce839d3d94bd73936c4a17e4aa",
+ "68c299be2c0c6d52d208d5d1a9e0ffa2af19b4833271404e5876e0aa93987866",
+ "7b195e92d2ba95911cda7570607e112d02a1c847ddaa33924734b51f5d81adab",
+ "10d9f206755cef70ab5143ac43f3f8d38aea2644f31d52eaf3b472ee816e11e5"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "4dcb7b62ba31b866fce7c1feedf0be1f67bf611dbc2e2e86f004422f67b3bc1839c6958e"
+ "b1dc3ead137c3d7f88aa97244577a775c8021b1642a8647bba82871e3c15d0749ed343ea"
+ "6cad38f123835d8ef66b0719273105e924e8685b65fd5dc430efbc35b05a6097f17ebc59"
+ "43cdcd9abcba752b7f8f37027409bd6e11cd158f",
+ "f547735a9409386dbff719ce2dae03c50cb437d6b30cc7fa3ea20d9aec17e5a5",
+ "044ca87c5845fb04c2f76ae3273073b0523e356a445e4e95737260eba9e2d021db0f8647"
+ "5d07f82655320fdf2cd8db23b21905b1b1f2f9c48e2df87e24119c4880",
+ "91bd7d97f7ed3253cedefc144771bb8acbbda6eb24f9d752bbe1dd018e1384c7",
+ "008c1755d3df81e64e25270dbaa9396641556df7ffc7ac9add6739c382705397",
+ "77df443c729b039aded5b516b1077fecdd9986402d2c4b01734ba91e055e87fc"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "efe55737771070d5ac79236b04e3fbaf4f2e9bed187d1930680fcf1aba769674bf426310"
+ "f21245006f528779347d28b8aeacd2b1d5e3456dcbf188b2be8c07f19219e4067c1e7c97"
+ "14784285d8bac79a76b56f2e2676ea93994f11eb573af1d03fc8ed1118eafc7f07a82f32"
+ "63c33eb85e497e18f435d4076a774f42d276c323",
+ "26a1aa4b927a516b661986895aff58f40b78cc5d0c767eda7eaa3dbb835b5628",
+ "0428afa3b0f81a0e95ad302f487a9b679fcdef8d3f40236ec4d4dbf4bb0cbba8b2bb4ac1"
+ "be8405cbae8a553fbc28e29e2e689fabe7def26d653a1dafc023f3cecf",
+ "f98e1933c7fad4acbe94d95c1b013e1d6931fa8f67e6dbb677b564ef7c3e56ce",
+ "15a9a5412d6a03edd71b84c121ce9a94cdd166e40da9ce4d79f1afff6a395a53",
+ "86bbc2b6c63bad706ec0b093578e3f064736ec69c0dba59b9e3e7f73762a4dc3"},
+ {NID_X9_62_prime256v1, NID_sha512,
+ "ea95859cc13cccb37198d919803be89c2ee10befdcaf5d5afa09dcc529d333ae1e4ffd3b"
+ "d8ba8642203badd7a80a3f77eeee9402eed365d53f05c1a995c536f8236ba6b6ff889739"
+ "3506660cc8ea82b2163aa6a1855251c87d935e23857fe35b889427b449de7274d7754bde"
+ "ace960b4303c5dd5f745a5cfd580293d6548c832",
+ "6a5ca39aae2d45aa331f18a8598a3f2db32781f7c92efd4f64ee3bbe0c4c4e49",
+ "04c62cc4a39ace01006ad48cf49a3e71466955bbeeca5d318d672695df926b3aa4c85ccf"
+ "517bf2ebd9ad6a9e99254def0d74d1d2fd611e328b4a3988d4f045fe6f",
+ "dac00c462bc85bf39c31b5e01df33e2ec1569e6efcb334bf18f0951992ac6160",
+ "6e7ff8ec7a5c48e0877224a9fa8481283de45fcbee23b4c252b0c622442c26ad",
+ "3dfac320b9c873318117da6bd856000a392b815659e5aa2a6a1852ccb2501df3"},
+ {NID_secp384r1, NID_sha224,
+ "39f0b25d4c15b09a0692b22fbacbb5f8aee184cb75887e2ebe0cd3be5d3815d29f9b587e"
+ "10b3168c939054a89df11068e5c3fac21af742bf4c3e9512f5569674e7ad8b39042bcd73"
+ "e4b7ce3e64fbea1c434ed01ad4ad8b5b569f6a0b9a1144f94097925672e59ba97bc4d33b"
+ "e2fa21b46c3dadbfb3a1f89afa199d4b44189938",
+ "0af857beff08046f23b03c4299eda86490393bde88e4f74348886b200555276b93b37d4f"
+ "6fdec17c0ea581a30c59c727",
+ "0400ea9d109dbaa3900461a9236453952b1f1c2a5aa12f6d500ac774acdff84ab7cb71a0"
+ "f91bcd55aaa57cb8b4fbb3087d0fc0e3116c9e94be583b02b21b1eb168d8facf39552793"
+ "60cbcd86e04ee50751054cfaebcf542538ac113d56ccc38b3e",
+ "e2f0ce83c5bbef3a6eccd1744f893bb52952475d2531a2854a88ff0aa9b12c65961e2e51"
+ "7fb334ef40e0c0d7a31ed5f5",
+ "c36e5f0d3de71411e6e519f63e0f56cff432330a04fefef2993fdb56343e49f2f7db5fca"
+ "b7728acc1e33d4692553c02e",
+ "0d4064399d58cd771ab9420d438757f5936c3808e97081e457bc862a0c905295dca60ee9"
+ "4f4537591c6c7d217453909b"},
+ {NID_secp384r1, NID_sha224,
+ "5a3c80e608ed3ac75a6e45f6e94d374271a6d42b67a481860d5d309cc8b37c79cb61f171"
+ "6dc8aa84cb309ef9d68eb7fc6cf4b42333f316a5c30e74198c8b340926e340c5de47674a"
+ "707293c4aa2a1a2274a602f01c26b156e895499c60b38ef53fc2032e7485c168d73700d6"
+ "fa14232596a0e4997854a0b05d02e351b9d3de96",
+ "047dd5baab23f439ec23b58b7e6ff4cc37813cccb4ea73bb2308e6b82b3170edfe0e131e"
+ "ca50841bf1b686e651c57246",
+ "04de92ff09af2950854a70f2178d2ed50cc7042a7188301a1ea81d9629ad3c29795cb7f0"
+ "d56630a401e4d6e5bed0068d1e6135adbd8624130735e64e65ecbd43770dcc12b28e737b"
+ "5ed033666f34c918eb5589508e4a13b9243374a118a628dd0b",
+ "f3922351d14f1e5af84faab12fe57ded30f185afe5547aeb3061104740ecc42a8df0c27f"
+ "3877b4d855642b78938c4e05",
+ "38e181870cb797c1f4e6598cfd032add1cb60447d33473038d06df73919f844eddd16f40"
+ "f911075f8a4bacc0d924e684",
+ "a58dd1ca18aa31277de66c30c3bb7a14b53705ce6c547ed2cb0e336f63c42809422efffc"
+ "c722d1155f2254330a02b278"},
+ {NID_secp384r1, NID_sha224,
+ "e7d974c5dbd3bfb8a2fb92fdd782f997d04be79e9713944ce13c5eb6f75dfdec811b7ee4"
+ "b3859114b07f263846ae13f795eec8f3cb5b7565baff68e0fdd5e09ba8b176d5a71cb03f"
+ "bc5546e6937fba560acb4db24bd42de1851432b96e8ca4078313cb849bce29c9d8052586"
+ "01d67cd0259e255f3048682e8fdbdda3398c3e31",
+ "54ba9c740535574cebc41ca5dc950629674ee94730353ac521aafd1c342d3f8ac52046ed"
+ "804264e1440d7fe409c45c83",
+ "043db95ded500b2506b627270bac75688dd7d44f47029adeff99397ab4b6329a38dbb278"
+ "a0fc58fe4914e6ae31721a6875049288341553a9ac3dc2d9e18e7a92c43dd3c25ca866f0"
+ "cb4c68127bef6b0e4ba85713d27d45c7d0dc57e5782a6bf733",
+ "04324bd078807f6b18507a93ee60da02031717217ee5ce569750737be912be72da087ac0"
+ "0f50e13fdf7249a6ae33f73e",
+ "b2752aa7abc1e5a29421c9c76620bcc3049ecc97e6bc39fcca126f505a9a1bfae3bde89f"
+ "b751a1aa7b66fa8db3891ef0",
+ "f1c69e6d818ca7ae3a477049b46420cebd910c0a9a477fd1a67a38d628d6edaac123aebf"
+ "ca67c53a5c80fe454dba7a9d"},
+ {NID_secp384r1, NID_sha224,
+ "a670fda4d1d56c70de1d8680328043b2b7029633caf0ee59ffe1421c914bb937133d5a0f"
+ "9214846b2e0b350455a74c4ab434c56de65a17139bb8212bf1c76071a37536fa29348f87"
+ "1dbb26baa92eb93d97e923a6d2ffd9be25cbc33075e494e6db657bd8dc053fe4e17148d8"
+ "cf6e2058164f2b5766750eb01bbe7b361cdb848c",
+ "dabe87bbe95499bac23bc83c8b7307fe04be198f00059e2bf67c9611feaffb2c8f274f6a"
+ "a50eb99c3074186d8067d659",
+ "04c2aa0a695125279705917e02a4f258cade4c3ff9140a071414babf87764f426f7f36ff"
+ "da9d5f3394375d24864235476f8f9808da0ce0227cf453f9e456f557db9752e23b45cce4"
+ "baad5fee3844ddd7e1112bcec01ea9d67c7a76f3535bd0cb58",
+ "65a0305854033cbc6fe3ca139c40ca354d45801ecb59f4a923c251dc6b25d12d452d99b5"
+ "d6711fdb5efac812aa464cc4",
+ "c7fc32997d17ac79baf5789e4503f5f1a8863872bc350a91f12dd3ef8cf78c254e829217"
+ "809e8e00b6b8d4d85be3f1fd",
+ "1422e1838a22496df93486bce1142961dbd8478ae844b8dda54e210afdae0d9e930d587c"
+ "91bb600b0bde7237186d94e6"},
+ {NID_secp384r1, NID_sha224,
+ "7843f918fe2588bcfe756e1f05b491d913523255aa006818be20b676c957f4edb8df863c"
+ "6f5f8c15b3b80c7a2aa277b70d53f210bdfb856337980c406ea140e439dd321471407f37"
+ "4f69877b2d82367eed51e3c82c13948616dcb301d0c31f8f0352f2846abd9e72071f446a"
+ "2f1bd3339a09ae41b84e150fd18f4ba5d3c6bfa0",
+ "df43107a1deb24d02e31d479087bd669e2bc3e50f1f44b7db9484a7143cdca6a3391bddf"
+ "ea72dc940dbce8ec5efbd718",
+ "0476bd4be5d520471162cb5c36f80038301b325f845d9642204a84d78b3e721098932827"
+ "bf872bde0a9f86383953667d29415116b8b878f896a5aa4dbbdc21076f27135d8bbcaaca"
+ "02489ef639d742bd63f377da0c8e8ab36ff19b4a7cc5d4ceb4",
+ "798abad5a30d1805794540057388ee05e2422901c6335f985b9d4447b3ef75524751abfe"
+ "ab6409ad6bf77d4ae3014558",
+ "98744e5c6742fa5118a74a70db4957647a3cc12add4e876b45974a6a8707809f871daadb"
+ "fc0b865e01624f706b65f10c",
+ "9e256e8da8eff5a0c83baaa1ef4f7be798eba9543bf97adb0fff8719f5406ea1207a0cf7"
+ "03d99aa8f02169724b492273"},
+ {NID_secp384r1, NID_sha224,
+ "caa83d5ab07febbd2e0fe2d63738b9b7b8752594bea7aaf50345b3d2f316653a8c9222f2"
+ "b7877b64679e9573e81461a426029e45b8873a575094a1d572e0d32a9f0a9c6bcb9a2868"
+ "543b7d8bbe4a69a09e7321f05f8366cced1b72df526f895b60aed2c39c249653c7839538"
+ "770d4e5f47d3926ec0d168ab6a1af15bf1dca1f7",
+ "ea7a563ba2a7f5ab69973dca1f1a0d1572f0c59817cd3b62ad356c2099e2cdca1c553323"
+ "563f9dfbb333b126d84abc7f",
+ "04cf4717c5f5de668b785f06bdc9845df5a09e4edd83f4669756407cbb60807305c632bc"
+ "49f818f4a84b194369aa07736f7391e4982af8a2218f704f627d01f0508bfc8304992a2d"
+ "598a420bf2eb519f33bd7caf79380793733b3dba0cc5e2b9d8",
+ "7b9606b3df7b2a340dbc68d9754de0734e1faeb5a0135578a97628d948702235c60b20c8"
+ "002c8fcf906783e1b389e754",
+ "0d680010bed373287f9767955b5d2850e150b6713b49e453eb280148e45230c853d99ea2"
+ "d2f8fcbd3ddcba19aeec0af1",
+ "64329763a930ab5452afdb0557fef16ff71810d6343dfc9c6ae18905c3d274db6554cdc6"
+ "9d6078a1ca03284474a94f30"},
+ {NID_secp384r1, NID_sha224,
+ "594603458d6534974aeeafba919c4d0f4cb6843a3af41204bbb88aeb2fca2772d305163d"
+ "ba863da050aabedbaf89db521955d1715de95bbcef979ecdc0c976181ece00355385f8a8"
+ "f8cce127c9eac15ce3e958a3ed686184674ec9a50eb63271606ee7fdcb1323da3c3db8e8"
+ "9cad1fb42139a32d08abcfbf0d4ccfca18c89a86",
+ "4cc70cb35b3ddeb0df53a6bd7bd05f8ff4392a2db7344f2d443761484b3a468a4ee3d1a8"
+ "b27113d57283fd18b05f7829",
+ "0440e1fe21df34bb85a642a0abe819ebd128f7e39b84d8dcc4a9a599b372fb9588da1484"
+ "600ec28b1297bb685f9ae77831f3aa69ada57879fdcbe8df19cefabc308add7d03b17b1f"
+ "ac2f7783fece6a8dfe20bc36f518692677d96e3f730a67a671",
+ "8eda401d98f5688c34d8dbebcd3991c87c0442b0379154eaa2e5287dabe9a9e34cfc1305"
+ "d11ff68781df25d5611b331d",
+ "ff2d772786e159448bba26afd8c3281941a4cb0c56fec6f5cccb4c292c4ee0f7af9bd39b"
+ "be2d88148732585e104fdb30",
+ "07a1d890770daa949a17797dca7af3e8163da981ec330c03d63d1a8312c152be6a718163"
+ "205ffa08da7dcc163ba261f4"},
+ {NID_secp384r1, NID_sha224,
+ "733252d2bd35547838be22656cc7aa67eff0af0b13b428f77267a513c6824c3dbae53306"
+ "8b6817e82665f009560affcfe4b2ddb5b667a644fc1a42d24f24e0947e0dc50fb62c919b"
+ "c1fe4e7ded5e28f2e6d80fcf66a081fb2763526f8def5a81a4ddd38be0b59ee839da1643"
+ "eeeaee7b1927cec12cf3da67c02bc5465151e346",
+ "366d15e4cd7605c71560a418bd0f382fd7cd7ad3090ff1b2dfbed74336166a905e1b760c"
+ "f0bccee7a0e66c5ebfb831f1",
+ "04a143f277ab36a10b645ff6c58241ea67ffdc8acf12d60973068390f06b4d8f4d773b10"
+ "c1ebf6889b1cfa73ebb90f6ca17a17cad29bb507b309021f6f92cb5c10ba535f4a3e317f"
+ "cc68cfd02d3ccd269f465169c73d30ff308f5350d881b08aec",
+ "dbe545f920bc3d704c43d834bab21e40df12ec9e16a619a3e6b3f08760c26aae6e4fd91f"
+ "ad00f745194794b74bb1baee",
+ "cdc39b12bba30da66fe9554713c05880ddc27afa4d2d151440f124c351fb9496dc950465"
+ "16b0921083347d64369846ac",
+ "797d0344e49f9ba87a187c50f664e5015d449e346b1a7bd9427c5be559fc58173651880d"
+ "5aadf053f81899d3368d6181"},
+ {NID_secp384r1, NID_sha224,
+ "5a182bd174feb038dfae3346267156bf663167f713dea1ce936b0edb815cd9b8c8e4d411"
+ "c786ba2494a81442617255db7158b142e720d86c9b56680fb9efd4298cdd69079a281534"
+ "94c42a24251c7ad42ecf7e97eabc1b3997529b2a297cbad2474269b87a0b1e385f2d7f8b"
+ "6eb8d1cd75eaf7e91d1acbecd45d7b2bfbbe3216",
+ "e357d869857a52a06e1ece5593d16407022354780eb9a7cb8575cef327f877d22322c006"
+ "b3c8c11e3d7d296a708bdb6d",
+ "04ce9a2185a68d6094aa5849a6efe78b349946f7380f0c79aa9664246cfcc71a879e90ad"
+ "78a0474f58644c6a208168150e8354fa47673cb3e07d446521345706c5515584b2602f92"
+ "1c3b9c44dded9e2c3f90ce47adb36d7e5f9f95a8c5ad8af397",
+ "1e77367ac4e10924854d135ad2f2507f39e2bafdbce33ff256bcbe9a7329b8d27185218b"
+ "cc3550aafbe3390e84c77292",
+ "df3182d49ad70959fb0c95bc7312750ce70fc87f1a328d39d9b29ac05d31305ce7209d6c"
+ "24d13225d9567b489f7a187b",
+ "d812b05abab0e96de13291e1f0da6479444ed5cd9d959b76f6cb43d394769035364f7c83"
+ "1a104dc7b5bd9b4a8e64df64"},
+ {NID_secp384r1, NID_sha224,
+ "aaa99fb1c71340d785a18f6f668e898c25cf7a0ac31d13c5b388b7233408493a5a109af6"
+ "d07065376b96f4903df7aba2b2af671a18772bb0472490d1240cde28967680727dd4acd4"
+ "7e0308920a75da857a6eeedee5b6586d45dff3d8a680599665aa895c89dd7770b824b7de"
+ "e477ac5e7602d409d3cc553090c970b50811dbab",
+ "745a18db47324a3710b993d115b2834339315e84e7006eafd889fb49bd3cc5a8b50c9052"
+ "6e65e6c53bddd2916d14bead",
+ "04f692578c6f77531210aef55c9e004ce3b66cf268c6900dde31a8bbb76e7562e3fb7624"
+ "2de34ca330d2501030aa11946640965833b28de926c46de060aa25beaeda98f8415a6b1e"
+ "3564aa77870cf4c89bd4fde92c8f5d9bf0eb41721586859d8e",
+ "11b9b36720abcac084efdb44c9f5b7d039e3250cb1e9c47850189ba3cfc1489d858b2a44"
+ "df357772b61d919c7e729c0f",
+ "02b252c99820cf50e6ce060ab55bd4f682276e29b4ae4197417432e6a7bfb8cf0bac89df"
+ "e105456af805d822cee77696",
+ "8e248bbf7d7028d63177e565c9d1666ee5be4d1ffbfffc9c7814b0cd38f74b98f3f2cd59"
+ "be42b9f132bfe5ee789cd96c"},
+ {NID_secp384r1, NID_sha224,
+ "1fadfa8254d3a0b82d137cfdd82043d5dc1fef195d5297b09cc5cfb061f59c933451c0dc"
+ "2a11b4037f34f88dacb803251f8880c4b72585c3c196e6fb23484ca43a191f8e41b9b9a3"
+ "7e2e6fcaab6738c3c62d1c98e1c620bb788b7b51a04f998a510efdba0d3418622fe8ce20"
+ "3b3fcd553b9b4206365a39031797ad11e49745ec",
+ "93f20963ea5011ff4f26481e359309e634195f6289134087bd2e83eee008c962780a6797"
+ "84ee7ac6acda03d663ed27e0",
+ "040edcde3533ea019e18f1a3cd97b7962e8823dda36c389f8f9287549f796d11376392b8"
+ "a01c7a80f127a8f75795e04f5463d7c458dccfc02f5148d755d59f9bbc8e3c3ea3490877"
+ "7928440747795955741296abcdd5386676419ed8049fedb489",
+ "3ad308faf04c42ee5ac69d36bc0aa9a96aacf55ea0f27dac4f52e088f023d206340a6324"
+ "874ffad169ff80624de24c96",
+ "209b72f9aae72c4339813573c3a8408a9e0be641ca863d81d9d14c48d0bf4cd44a1a7985"
+ "cff07b5d68f3f9478475645b",
+ "f6292e599b22a76eda95393cf59f4745fa6c472effd1f781879ad9a4437a98080b0b07da"
+ "dad0c249631c682d2836a977"},
+ {NID_secp384r1, NID_sha224,
+ "9ecb6f5ed3ba666a8536a81ef65012c2cb8b433508798d84708abb06dfb75503886f7838"
+ "4fb8c7a4d2d49ef539d9b8a0b60938c7f07471dda91f258b0d99691b38a8403a2bb3f956"
+ "bdfd09baba16d9b6877097a9b6213481b47a06e139d23ec7abad5668d21f912fdb70d31b"
+ "b9adf9b3ce80e308252fa81a51674f88d02db72b",
+ "f175e6ac42fd48ec9d652c10707c039c67c4cc61d8c45a373dcda6e4ca6c53e947e49c24"
+ "e01b48e7cdf92edfe6d316a1",
+ "04a40c64f595491ce15790a5a87fbe64c1800247b42acd08fe5257700719f46afc8acce0"
+ "e4ede0517a312092d5e3d089cdd565df9dc2f381cc0c5d84f382a43a98018524c0b4708a"
+ "44b3e2817f9719f29fbf9c15803591ed9b4790c5adaba9f433",
+ "812dcaa6d4f9a43ccc553288065d13761581485aa903a500a690ccafbd330ba4818c977b"
+ "98c4bb57f8a182a1afacfae9",
+ "d000f18d3e4c162ff0d16f662e6703e7a6f5bff7a333ed266fa4f44c752415946c34945c"
+ "342c20f739677186b1d80ab3",
+ "ae7f1271c89e0aaa238710d039ea73a69110cc28fcf426f2fe6754b63a59e417fa84f903"
+ "cf7dccb5468b43ff083bbfd5"},
+ {NID_secp384r1, NID_sha224,
+ "e55bfca78d98e68d1b63688db12485578f36c489766f4d0bfaa0088433ff12133aaca455"
+ "805095f2e655940860958b3ead111d9070778ee3bbf3e47e43d9eba8b8d9b1fdf72f793f"
+ "cde2bcaa334f3e35fa2cca531ea7cf27fe9ccba741e38ac26129b2d612bf54a34e0ae6c1"
+ "66c0fef07fcd2b9ac253d7e041a500f7be7b8369",
+ "46c4f0b228b28aaa0ec8cfdf1d0ed3408b7ae049312fb9eaf5f3892720e68684cc8ad298"
+ "44a3dc9d110edf6916dfb8bb",
+ "0413ddec844731b7e30c467451df08ca11d6c581cb64abd8a257671cffd26f5ccad4df7b"
+ "9ee8924047a88a5d2d7567609cd74ca94f590fd1d13e190cc1e03c3da6c3faab15c7dda0"
+ "34af3deefee8aeec3628fa8b1978c54cfcd071baa319a46ec0",
+ "2a9dd520207c40a379cd4036adef9ee60fa8bc8c0d39b3ad91850ac93fd543f218b16885"
+ "81f23481a090b0e4c73792ac",
+ "94e08cca20fe3866f643f53ec65faf3f2b4d80cd9bcc8ff8f88bb28da9eada324fc2d048"
+ "908dd3d08a9e0ebb547731bc",
+ "8e6f82c4d3069b14f4c844b4ca133a9503493265c9f77a7d4775eda67de76798a23dd7ea"
+ "48e0ac3c337dd62bf058319d"},
+ {NID_secp384r1, NID_sha224,
+ "02c6b3c83bd34b288d96409162aa4ff114e9d134bf948046eb5ebcc0c7fe9dfceadda83e"
+ "d69da2fac00c8840f6c702a3fc5e6959d70f7e8af923e99e4937232ae3b841ffefd2e62f"
+ "ab3671a7c94a0281b8ea5bc176add57c5c9b6893fe7f5d48ce7256b96510810c4e046168"
+ "a3c5be9843b84d5268a50349b3444341aa5490dd",
+ "1d7b71ef01d0d33a8513a3aed3cabb83829589c8021087a740ca65b570777089be721a61"
+ "172b874a22a1f81aef3f8bb6",
+ "048d2721370df8f097d5a69396249a315f6037dc7045b3da11eacae6d43036f779d5de70"
+ "53d101768b42cc2b1283a3aaeaa046039ae662141f9954d278183eaa2e03917fe58583e3"
+ "2d344074d59d60caa5b0949c53066525d5cca923e2f201502e",
+ "d1b25ad25581cad17e96f1d302251681fee5b2efbb71c3c15ff035b2145d015d18e0e52d"
+ "c3187ab5a560277b3a3929b0",
+ "d836f52b14c7391744868daa2d5cf27eb9380b9b6176195573d5b04842e9f2fc3794d6cf"
+ "877feafee63d11b05f6a6bee",
+ "8b89042fef2c04d4bd6c9d66a06a010514321d623a5f8d57ba5ac3686872eaabca9e0ba2"
+ "d058ae7028e870acf03ca32d"},
+ {NID_secp384r1, NID_sha224,
+ "94f8bfbb9dd6c9b6193e84c2023a27dea00fd48356909faec2161972439686c146184f80"
+ "686bc09e1a698af7df9dea3d24d9e9fd6d7348a146339c839282cf8984345dc6a51096d7"
+ "4ad238c35233012ad729f262481ec7cd6488f13a6ebac3f3d23438c7ccb5a66e2bf820e9"
+ "2b71c730bb12fd64ea1770d1f892e5b1e14a9e5c",
+ "cf53bdd4c91fe5aa4d82f116bd68153c907963fa3c9d478c9462bb03c79039493a8eaeb8"
+ "55773f2df37e4e551d509dcd",
+ "043a65b26c08102b44838f8c2327ea080daf1e4fc45bb279ce03af13a2f9575f0fff9e2e"
+ "4423a58594ce95d1e710b590cefe9dcbcb2ec6e8bd8ed3af3ff0aa619e900cc8bab3f50f"
+ "6e5f79fac09164fb6a2077cc4f1fed3e9ec6899e91db329bf3",
+ "df31908c9289d1fe25e055df199591b23e266433ab8657cc82cb3bca96b88720e229f8df"
+ "d42d8b78af7db69342430bca",
+ "6770eea9369d6718e60dd0b91aee845ff7ed7e0fcc91675f56d32e5227fd3a4612bbcb15"
+ "56fe94a989b9e3bcc25bb20e",
+ "c43072f706c98126d06a82b04251e3ecb0ba66c4bb6cd7c025919b9cc6019cdc635256d2"
+ "a7fa017b806b1e88649d2c0d"},
+ {NID_secp384r1, NID_sha256,
+ "663b12ebf44b7ed3872b385477381f4b11adeb0aec9e0e2478776313d536376dc8fd5f3c"
+ "715bb6ddf32c01ee1d6f8b731785732c0d8441df636d8145577e7b3138e43c32a61bc124"
+ "2e0e73d62d624cdc924856076bdbbf1ec04ad4420732ef0c53d42479a08235fcfc4db4d8"
+ "69c4eb2828c73928cdc3e3758362d1b770809997",
+ "c602bc74a34592c311a6569661e0832c84f7207274676cc42a89f058162630184b52f0d9"
+ "9b855a7783c987476d7f9e6b",
+ "040400193b21f07cd059826e9453d3e96dd145041c97d49ff6b7047f86bb0b0439e90927"
+ "4cb9c282bfab88674c0765bc75f70d89c52acbc70468d2c5ae75c76d7f69b76af62dcf95"
+ "e99eba5dd11adf8f42ec9a425b0c5ec98e2f234a926b82a147",
+ "c10b5c25c4683d0b7827d0d88697cdc0932496b5299b798c0dd1e7af6cc757ccb30fcd3d"
+ "36ead4a804877e24f3a32443",
+ "b11db00cdaf53286d4483f38cd02785948477ed7ebc2ad609054551da0ab0359978c6185"
+ "1788aa2ec3267946d440e878",
+ "16007873c5b0604ce68112a8fee973e8e2b6e3319c683a762ff5065a076512d7c98b27e7"
+ "4b7887671048ac027df8cbf2"},
+ {NID_secp384r1, NID_sha256,
+ "784d7f4686c01bea32cb6cab8c089fb25c341080d9832e04feac6ea63a341079cbd562a7"
+ "5365c63cf7e63e7e1dddc9e99db75ccee59c5295340c2bba36f457690a8f05c62ab001e3"
+ "d6b333780117d1456a9c8b27d6c2504db9c1428dad8ba797a4419914fcc636f0f14ede3f"
+ "ba49b023b12a77a2176b0b8ff55a895dcaf8dbce",
+ "0287f62a5aa8432ff5e95618ec8f9ccaa870dde99c30b51b7673378efe4ccac598f4bbeb"
+ "bfd8993f9abb747b6ad638b9",
+ "04b36418a3014074ec9bbcc6a4b2367a4fb464cca7ec0a324cb68670d5c5e03e7a7eb07d"
+ "a117c5ea50b665ab62bd02a4914ea299c30e7d76e2c5905babada2d3bb4ee5eb35a5a236"
+ "05cdb0d5133471a53eb9e6758e49105a4eaf29d2267ba84ef2",
+ "935eeab3edeb281fbd4eead0d9c0babd4b10ff18a31663ee9de3bfa9ae8f9d266441158e"
+ "a31c889ded9b3c592da77fd7",
+ "738f9cb28f3b991335ef17b62559255faf75cad370a222464a492e27bb173c7f16b22100"
+ "ada6b695875c7e4b1a28f158",
+ "bc998c30e1491cd5d60dc7d1c38333165efe036b2a78db9b8f0e85ee68619cfba654e11a"
+ "e5ca5ee5a87099c27cf22442"},
+ {NID_secp384r1, NID_sha256,
+ "45e47fccc5bd6801f237cdbeac8f66ebc75f8b71a6da556d2e002352bd85bf269b6bc7c9"
+ "28d7bb1b0422601e4dd80b29d5906f8fcac212fe0eaaf52eda552303259cbcbe532e60ab"
+ "d3d38d786a45e39a2875bce675800a3eaeb9e42983d9fd9031180abd9adccc9ba30c6c19"
+ "8b4202c4dd70f241e969a3c412724b9b595bc28a",
+ "d44d3108873977036c9b97e03f914cba2f5775b68c425d550995574081191da764acc501"
+ "96f6d2508082a150af5cd41f",
+ "04c703835d723c85c643260379d8445b0c816fe9534351921e14a8e147fe140ec7b0c4d7"
+ "04f8dc66a232b2333b28f03deec5d0bb054053fd86c26f147c4966757aa04b00513a02d4"
+ "27b8d06c16055c607955efdc518d338abfe7927c195dc28588",
+ "c80f63e080650c8a21e4f63a62ec909adfb7d877f365d11ee1cb260baf112eb4730c161c"
+ "1d99dba98fc0d5bbd00dc97d",
+ "81de2810cde421997013513951a3d537c51a013110d6dbb29251410bcb5ba001a9686b84"
+ "90f1e581e282fd2ed0974b22",
+ "9cab0bbaffe91c7677ec3dd1f17060211a3cc0be574cbca064aa8c4b66ba6e64f3d80e83"
+ "da895042ca32d311c388d950"},
+ {NID_secp384r1, NID_sha256,
+ "c33ff63b4e6891e00b2349b3f2907c417ca355560544a91e24a7a0ee260d6850aeded29f"
+ "c0176b6039ca6187e8333391047cceaf14b1077df8f147dad84d36b2dac5666dc2f69dc9"
+ "b58b88cc73956efdb3b47f91831d5875051c76b0c4e9fc087012a1f03eeee85d6745b46a"
+ "a50bd9cb0110c2c94508765cec162ee1aa841d73",
+ "d5b72cbb6ec68aca46b9c27ad992afd8ffa02cb3067b234fcfa6e272e3b31be760695ff7"
+ "df988b57663057ab19dd65e3",
+ "04135a6542612f1468d8a4d01ff1914e532b1dd64d3627db9d403dc325651d3f82b0f6f0"
+ "fd1dbdeca2be967c4fb3793b5fcbbd40f6d3a38d0dfb64582ff4789d7b268241bc0c36de"
+ "2884bccfaeeff3b7b2b46a30bb35719804e0d11124b4e7f480",
+ "9da6de7c87c101b68db64fea40d97f8ad974ceb88224c6796c690cbf61b8bd8eede8470b"
+ "3caf6e6106b66cf3f0eebd55",
+ "17840911ecdf6ae0428b2634f442163c2c11b8dbf0cc7a5596fbe4d33e3e52f9d99e99ad"
+ "169867b1f39e89c9180cedc2",
+ "dd7ed67e480866d0474379ea4afff72870746f4feef2153be42f13bf472b1613d7faa5c0"
+ "abb7f7464070f94d7cf3f234"},
+ {NID_secp384r1, NID_sha256,
+ "f562f2b9d84b0e96a52532c3b43c39c8018c738bd8dc3797a7de7353971b2729d522d696"
+ "1b1f2e4df3f6a4bd3653e6d72b74fc0dba92ab939c4b542e994e5db6dd8ed4f56f651e69"
+ "9052e791237ae1f552f990ad156226ae8f7bf17fcbfa564f749604f97e9df0879d509857"
+ "47d981422a23040fe52f5ec74caf1d4aaad8a710",
+ "218ee54a71ef2ccf012aca231fee28a2c665fc395ff5cd20bde9b8df598c282664abf915"
+ "9c5b3923132983f945056d93",
+ "0401989ff07a7a452d8084937448be946bfedac4049cea34b3db6f7c91d07d69e926cce0"
+ "af3d6e88855a28120cf3dba8dfeb064e029d7539d4b301aabafe8de8870162deffe6383b"
+ "c63cc005add6ee1d5ced4a5761219c60cd58ad5b2a7c74aaa9",
+ "c5d39b436d851d94691f5f4aa9ef447f7989d984f279ae8b091aef5449ac062bcc056774"
+ "0f914624ad5b99fc32f9af0b",
+ "07d5b1b12877e8cb5e0aa5e71eeeb17bf0aa203064c7e98b3a1798a74dc9717252dc47c7"
+ "f06aaf1d5fe15b868323bbb9",
+ "69428cf101a7af5d08161a9fd7af212e02e33b6062aebdce4c96bf3a0684b5394cb902ca"
+ "7c2dec6e2f01f40c4576009d"},
+ {NID_secp384r1, NID_sha256,
+ "ace953ae851f571d71779aa120915f27450b236da23e9106f8d0756abdd2586193794122"
+ "8d225d5fb1aa1b1ebf759b1e326aeb3b6cd0cd87edd2ab9f6a7ad67b63d2c501d6a550ed"
+ "b2e7c9d216cc8af78dd33546af64d00abed4d0d2cfc5c9a7b5a055dbe8f7547902d185cf"
+ "46937314832bc5c602419a82ab83dbd9d3bd5aff",
+ "e6ab171f6937c000e144950801ad91023ae8e8476856c2592d9f7d5bb7180fd729211803"
+ "d39a412ead6c0be761cfa5d1",
+ "0438bc42b8c9d8866d09b214398d584b1b24a488dfacc3420d1e9506aa825b19fdf1ba74"
+ "e7b8f547f47b571467fe8c4d1f5179d62668d3f6a7ab5c8e3761a685e12008fb87d0529a"
+ "97645f65cfb5364376c1b6682e0ffcddd0bcd995c41d013ad3",
+ "05e9718aea9669c9e434f73866da5f252dec6d24c47a1c4ee3233450b6ec626de9746ebe"
+ "095b285558dfc89fc1b622fe",
+ "df9bab9dd1f22ec6f27116f38831cb2089aa78aa8c073024a0faddd9a48e810a5e8e2cad"
+ "d80fbf8dbd6088c71fe30b5b",
+ "1e0e8718567d12d18558c57f9e87a755c309e4ffb497335a3adfc8d7475ce8fd882d5dc3"
+ "3a8f5a16274b7ad74bb7862a"},
+ {NID_secp384r1, NID_sha256,
+ "9635ab832240be95301bedb94c5aec169eedc198cbbdfedcf41e9b586143d829b4597a6b"
+ "2a81902828332825fd84a785f187a3894e21bd99d22c4f94dcf34453fc052f15ec64d144"
+ "7c932cb38fcdd30b7be851963409c11881438cbaad7e96f9efbde317f2235d66af804477"
+ "a5dfe9f0c51448383830050ecf228889f83631e1",
+ "14acd516c7198798fd42ab0684d18df1cd1c99e304312752b3035bed6535a8975dff8acf"
+ "c2ba1675787c817b5bff6960",
+ "0429909d143cf7ee9c74b11d52f1a8f3ebd4a720c135612ca5618d3f432f03a95602ee75"
+ "a2057e1d7aab51d0648ac0b334404b6c5adffbadfa1b0380ae89fed96ec1ca16cc28661e"
+ "623d0f1c8b130fbaa96dd7257eae2bf03c2d3dcbc3dbc82c58",
+ "7f623c103eaa9099a0462e55f80519c565adaeffcb57a29993f3a8a92e63a560be8f0fb9"
+ "d23dc80bff1064bb41abad79",
+ "932ab291950c16b2b19a8036cd2e905714c6229cb190a73b3ea49c48dd8e76063a453c7c"
+ "3267a57597d2973678216296",
+ "d17d4c5ddbb9c27beebf526f113b416c8abfad53d11c4224813c7f351ba41a77dd4e77d6"
+ "e4a65bef2c9f62cc37a469a5"},
+ {NID_secp384r1, NID_sha256,
+ "d98b9a7d4fe9d0fd95de5056af164a8b7882cd34ab5bde83a2abb32dc361eb56a479a3a6"
+ "119db3b91dcad26a42d2206749567f0d97c34a981a91fc734921821a429f6a53401743a5"
+ "c406ba9d560f956203abc9d1f32f1a13e7d7b290f75c95fdbf857ea597021461c06a3aac"
+ "fa554ede3d69e4ff03bbbee5b7463ec77de2b3b2",
+ "2e780550984f3a00cb1e412429b33493c6eb6cd86d12f9d80588c247dcf567bd04296d2d"
+ "4b24b889d9c54954b7f38f57",
+ "0437dac42ef04663238443ef33e8addee2e78c40d50a1751913a7f5c37d1f23a26c7f86e"
+ "16055c788b8ca9554f06b2f2efbbed1549652904e3d00c39b01cc0460dbaf3185e6190c2"
+ "705677a9701de1fe56dff4f4d8418ee15059ff8fc36800982d",
+ "b788ca82811b0d4e4841765c71eafaa1e575378beedcd3860d8b92db3d070ac5aef7c425"
+ "067860fbee6c50cf0c642bbb",
+ "7292b3851870daeb2555a8a2fb198ead78739fcfb75327e5c32a82c6b77d58983e5ad548"
+ "ccb75dcf9411039c9576d9b9",
+ "a378c61802d9f1dd062b6e18f16416a954018f77df4df95ad1b983570377d5cfce4cc786"
+ "1759e802c52f81abc4f49aac"},
+ {NID_secp384r1, NID_sha256,
+ "1b4c754ac1c28dc415a71eac816bde68de7e8db66409af835838c5bb2c605111108a3bf1"
+ "3606ed5d8ade5ed72e50503e0de664416393d178ea4eec834d8d6f15039847b410080fd5"
+ "529b426e5aadd8451c20ebd92d787921f33e147bcbeb327b104d4aab1157fc1df33e4d76"
+ "8404b5ccb7110055c2508c600f429fd0c21b5784",
+ "a24d0fe90808aecc5d90626d7e6da7c9be5dfd4e1233c7f0f71f1b7c1c6fd318fafe1855"
+ "9c94718f044cf02ed5107cb1",
+ "04ec8ae1fb9bb88589d27d6f27d790392853396f37bc0c381631d85800fc668eea0886bf"
+ "1c6cff801147df19778d5b16041e1a8336c1e2506f8ee388b55cc648ae73b9295ea78467"
+ "979d2affb364536fad28120f51ec62a67cbb6ce7784780389f",
+ "755d025509b73cf1ea8817beb772ad150b4c17a52378be187daffe3db0158921e5e552d1"
+ "ca3c85df28519939f3cb794d",
+ "23ff2ffa62bbd427d49995d9c9950116e0d5a06ef076a4553448bc109e6482c5e87d4c83"
+ "3bc88de0bc722bc98cae2e61",
+ "9aea13d487c3ea6917e16374caafcf0321c12a80d28902dd8cd81909bb04b8c439e2491e"
+ "504756742d0d0bfb15a9c34c"},
+ {NID_secp384r1, NID_sha256,
+ "3cd8c053741dd9f974c6c5dbf8a1e5728e9b5eafb1cbcfc3452f5fbbda32a8c7564dee15"
+ "7e8d902c52514361da6d972934a56b3276e2a9379e328e24282e0db697c5bc29090fc489"
+ "ec46b7b188325dd4e96494c250de0f4a89fe2ccf919eaefcfb50c288113e6df92714feb7"
+ "f46e0822478c796d0f4ff3447a32997e892693ce",
+ "1c172e25732555afee7ded67a496f3f11babc0875898619f4519c29321e201e8ba1149f2"
+ "c20b48e5efba235d58fea7c3",
+ "0413e9e2c8bbcfe26e8f5f43c86268c5980ee693236a6b8777f3a7323718baa21005b482"
+ "d08aafc6fa6e3667d91353544c9ba181b3ee505be030f87ecd249b00670a791489b42af0"
+ "4976013483ff95b630c91c01e95757e906129f2f9b4ce719a8",
+ "08aec9a9e58bdc028805eb5dc86073d05fff1f5fb3fd17f510fc08f9272d84ba7aa66b6f"
+ "77d84fe6360bd538192bf01a",
+ "2b4337c3dfbc886ffad7858ae2480cb62227e12205a70361c42f1a5ca9e658ee30fc3cf4"
+ "030d85bd065edad83b99821f",
+ "2550cef8574bf17fb3d6b0c9d04ab266962bac3621bac233ff2e4989712d2a4a07171c0a"
+ "ebd3040cd6a32c3bd3efb8b5"},
+ {NID_secp384r1, NID_sha256,
+ "ed955dda6d9650124804d3deb6aeef900e520faf98b1ef6f14efcada7ca2433f09329b70"
+ "897305e59c89024d76e466b28fe02cb2a9b12e2478c66470259d7c282137a19e5a04ffad"
+ "ea55245c0f34a681593fedc42931d8b3321b3d82e9cc102cd00540ad311ec7bd8c9d06db"
+ "21bea4ca3dc74d98931ae0d40494aefc2345132c",
+ "5b96555dbd602e71d4d5d3aee19fd1ea084ee23d4f55c10937056762bc2015cbded2e898"
+ "a487f5482ab7e1e971245907",
+ "046e14c17bb831b0112d7f3543c5fd17c78379a516c9e0539b03b8b4bfdead2820343fc8"
+ "4b0382807573ded6c4d97b70037f60021d2de77546db666721c9aec84c3e2ba8de0ba774"
+ "43600dc77e6839bbf9316271adb22d4cb47d08f745ecb1dafd",
+ "7ad6f4ffd2b429ba10c6f112f800cacf1ad508cf8eba880893bb9659c1ddaaec57dcdc09"
+ "3a114500460d457bdde324f2",
+ "faea950ca513806bc59028c638d6302ffc86978c3ff1f06db015dd7c4777050186cb8dd8"
+ "71f5e926e1416539c1939c2f",
+ "2c592240eabb8a1f9878e1b5c9d5d3ced7b3a7ae571f5a86494ed2ca567a36eb72e7bea8"
+ "934bded29594bccf67ca84bd"},
+ {NID_secp384r1, NID_sha256,
+ "ce395b001da2a58e49691605d44af4206306f62f561bf2394060d2a5591a350277166bed"
+ "043819035f1e60b5b3fb5ae113ddd0473f8ef6b2b050c472c2a264e1d8b3ca82a4f158c4"
+ "0f2d78d9ce5e5ea6de243f2e1f13f47f6c6f403b270912c81c636be35b396ca58468b3fb"
+ "60aa83911d61441a0528d973bc31f965d4059080",
+ "8df9c3c710a25192f3dea970910bb3784e3509874cccf4334823eb9f7a8d05b067f2d812"
+ "d61e878e24b093089a0b8245",
+ "0492c9e32b20cbe6d4ed0727c6c942cf804a72031d6dfd69078b5e78ebce2d192268f1f5"
+ "e2abce5aaf1f8d6a35f136837fd5167905fa7689e03b9fb1487c566f62b36f2bc1c4a2bf"
+ "b6a836113b5c8d46f7c1ca51b628b14397fbc06ec9a07f4849",
+ "258dd05919735cd48627c9fe9fac5c252604aa7c2ae0460d7c1149cd96b7bd2ba195ad39"
+ "3bf392a2499f06aead5ba050",
+ "413793bcce52eda0f5b675a8d687cce86d5c9e1659b38a89e96246b5e05f8b0934d17dbb"
+ "a3b2ea44c838aa5fd87125d1",
+ "ce7309fc2d6e3438818a1a29a997410b025b0403de20795b97c86c46034a6b02afeed279"
+ "aeb06522d4de941bfdf50469"},
+ {NID_secp384r1, NID_sha256,
+ "ffefe316455ae4ffdb890bb804bf7d31424ea060ecacff419d0f7134ff76ad434063c0ec"
+ "0f8bb7059584d3a03f3625bb9e9f66ace1a47ac4b8f3e76fc7c420c55edb1427d1fa15b3"
+ "87ad73d02b0595c4e74321be8822752230a0dcfb85d60bfa186da7623a8ec3eb1633f0a2"
+ "94b23ae87216b14ccee9ef56418dcfab9427371e",
+ "6002cb01ad2ce6e7101665d47729c863b6435c3875de57a93f99da834f73e3e6e2b3880e"
+ "06de3e6bd1d51ea1807ab0d7",
+ "04e4216e1a20af8e8e3e74653ac016545001066e53e64af679ad1c85841bb475aed3e00e"
+ "ad052ae9955f48d675ff4ace568804c17641be21d4c6386902c9c5c888af25d97ca38370"
+ "3ea4a85cf93bbab360c0bbd2993374da499a303778650270b9",
+ "6b9507fd2844df0949f8b67b6fde986e50173713ac03df2edf65cb339859321cd3a2b9aa"
+ "b8356f95dec62460ab19c822",
+ "018891f6381ed358b422f79a299cf0789cee783ba388af4d82cbbe17f3709751b7fd9400"
+ "e9702820c28b9afc62fdf489",
+ "aef73bd590802b2fd2a65c4f7fec89f9b24ecc199a69254785925f334cd1977c5e1f858b"
+ "d9830d7d7d243ea707b1af0b"},
+ {NID_secp384r1, NID_sha256,
+ "304bccb718b3a9e12669913490cc5bcc1979287b56c628fad706c354241e88d10e81445a"
+ "2853e3fc32ece094ba1abc3fdcab61da27f9a0fca739371049fed462ee6b08fa31cde127"
+ "20f8144a6f00ce9b1a7a6eadd231f126717074b4efb5c72ce673ca5859000a436f67a338"
+ "d698759f12c461247c45a361fb6cb661fdbe6714",
+ "d8559c3543afc6f7b3dc037a687bad2630283757ba7862fd23ed14e2151a4cf5fed3d249"
+ "268f780e0b96b6b46274a2d5",
+ "045f94223918f2ec9f0a08342cb99e724881c92453957c59672860f69daac01b660331a0"
+ "f5845e50f1f27766b219c89e7ed76d83396130d10d1168d76c7fc83742ffffbe66d9f4da"
+ "4ca3f95f5ad6dac8cc7bb65d16d317d37aa99fdbf30ec7439c",
+ "4ad5a92b5b8e170b71c8a7ed419dc624c7680004562b8d16a37b6e639f581ce81d5f0d98"
+ "cce44d54c4e7136229148340",
+ "f7baa6a5488ab462ea59aa31a36402b15880c68110b6069f51ede0c3b52a7b1e5bf926fd"
+ "be95768931b7d5f87058835c",
+ "28b1c4ef448a432f7c91b98b0c6471691e888211b6af907369a8930859b8cdb2e94f466a"
+ "44f4e52f46df9b0d65e35de6"},
+ {NID_secp384r1, NID_sha256,
+ "64f9f05c2805acf59c047b5f5d2e20c39277b6d6380f70f87b72327a76170b872bfe4b25"
+ "c451602acfb6a631bb885e2655aee8abe44f69c90fb21ffde03cef2a452c468c6369867d"
+ "fd8aa26ac24e16aa53b292375a8d8fbf988e302bf00088e4c061aa12c421d8fe3cbd7273"
+ "b0e8993701df1c59431f436a08b8e15bd123d133",
+ "b9208cbfd186ddfa3efd5b71342ae1efb01a13ebc4c2a992a2cbee7254b7846a4252ece1"
+ "104b89d13d835911f8511224",
+ "04166e6d96cb60d916fd19888a2dd945a3306ff0d7b0a5e30729f47d3dac3de2be3fd5cd"
+ "7437e9a80d6c48cf960d2d36f8e6b2b70f131092ae210f29cc6bad701318bddb31bddf92"
+ "1695855c6208941100d0cee5d10799f8b835afe3ea510e8229",
+ "da706ab5f61531f2378b3c0a2b342108cd119eadaa88b859df64923bccfb0ec2393fd312"
+ "826f65c15a6587d1d460015b",
+ "d9124c42858080c62400e4d4d8136304e03d910cbe9b9b3487f4d27c7e0540a314d34bef"
+ "8c850045c8746ca631c11c42",
+ "bbf6424a3b70166fa799f49e918439d515327039258ef9bd88435a59c9c19659f8ec3c86"
+ "60720b0c08354ff60e0f5a76"},
+ {NID_secp384r1, NID_sha384,
+ "6b45d88037392e1371d9fd1cd174e9c1838d11c3d6133dc17e65fa0c485dcca9f52d41b6"
+ "0161246039e42ec784d49400bffdb51459f5de654091301a09378f93464d52118b48d44b"
+ "30d781eb1dbed09da11fb4c818dbd442d161aba4b9edc79f05e4b7e401651395b53bd8b5"
+ "bd3f2aaa6a00877fa9b45cadb8e648550b4c6cbe",
+ "201b432d8df14324182d6261db3e4b3f46a8284482d52e370da41e6cbdf45ec2952f5db7"
+ "ccbce3bc29449f4fb080ac97",
+ "04c2b47944fb5de342d03285880177ca5f7d0f2fcad7678cce4229d6e1932fcac11bfc3c"
+ "3e97d942a3c56bf34123013dbf37257906a8223866eda0743c519616a76a758ae58aee81"
+ "c5fd35fbf3a855b7754a36d4a0672df95d6c44a81cf7620c2d",
+ "dcedabf85978e090f733c6e16646fa34df9ded6e5ce28c6676a00f58a25283db8885e16c"
+ "e5bf97f917c81e1f25c9c771",
+ "50835a9251bad008106177ef004b091a1e4235cd0da84fff54542b0ed755c1d6f251609d"
+ "14ecf18f9e1ddfe69b946e32",
+ "0475f3d30c6463b646e8d3bf2455830314611cbde404be518b14464fdb195fdcc92eb222"
+ "e61f426a4a592c00a6a89721"},
+ {NID_secp384r1, NID_sha384,
+ "d768f41e6e8ec2125d6cf5786d1ba96668ac6566c5cdbbe407f7f2051f3ad6b1acdbfe13"
+ "edf0d0a86fa110f405406b69085219b5a234ebdb93153241f785d45811b3540d1c37424c"
+ "c7194424787a51b79679266484c787fb1ded6d1a26b9567d5ea68f04be416caf3be9bd2c"
+ "afa208fe2a9e234d3ae557c65d3fe6da4cb48da4",
+ "23d9f4ea6d87b7d6163d64256e3449255db14786401a51daa7847161bf56d494325ad2ac"
+ "8ba928394e01061d882c3528",
+ "045d42d6301c54a438f65970bae2a098cbc567e98840006e356221966c86d82e8eca515b"
+ "ca850eaa3cd41f175f03a0cbfd4aef5a0ceece95d382bd70ab5ce1cb77408bae42b51a08"
+ "816d5e5e1d3da8c18fcc95564a752730b0aabea983ccea4e2e",
+ "67ba379366049008593eac124f59ab017358892ee0c063d38f3758bb849fd25d867c3561"
+ "563cac1532a323b228dc0890",
+ "fb318f4cb1276282bb43f733a7fb7c567ce94f4d02924fc758635ab2d1107108bf159b85"
+ "db080cdc3b30fbb5400016f3",
+ "588e3d7af5da03eae255ecb1813100d95edc243476b724b22db8e85377660d7645ddc1c2"
+ "c2ee4eaea8b683dbe22f86ca"},
+ {NID_secp384r1, NID_sha384,
+ "6af6652e92a17b7898e40b6776fabaf0d74cf88d8f0ebfa6088309cbe09fac472eeac2aa"
+ "8ea96b8c12e993d14c93f8ef4e8b547afe7ae5e4f3973170b35deb3239898918c70c1056"
+ "332c3f894cd643d2d9b93c2561aac069577bbab45803250a31cd62226cab94d8cba7261d"
+ "ce9fe88c210c212b54329d76a273522c8ba91ddf",
+ "b5f670e98d8befc46f6f51fb2997069550c2a52ebfb4e5e25dd905352d9ef89eed5c2ecd"
+ "16521853aadb1b52b8c42ae6",
+ "0444ffb2a3a95e12d87c72b5ea0a8a7cb89f56b3bd46342b2303608d7216301c21b5d292"
+ "1d80b6628dc512ccb84e2fc278e4c1002f1828abaec768cadcb7cf42fbf93b1709ccae6d"
+ "f5b134c41fae2b9a188bfbe1eccff0bd348517d7227f2071a6",
+ "229e67638f712f57bea4c2b02279d5ccad1e7c9e201c77f6f01aeb81ea90e62b44b2d210"
+ "7fd66d35e56608fff65e28e4",
+ "b11db592e4ebc75b6472b879b1d8ce57452c615aef20f67a280f8bca9b11a30ad4ac9d69"
+ "541258c7dd5d0b4ab8dd7d49",
+ "4eb51db8004e46d438359abf060a9444616cb46b4f99c9a05b53ba6df02e914c9c0b6cc3"
+ "a9791d804d2e4c0984dab1cc"},
+ {NID_secp384r1, NID_sha384,
+ "b96d74b2265dd895d94e25092fb9262dc4f2f7a328a3c0c3da134b2d0a4e2058ca994e34"
+ "45c5ff4f812738e1b0c0f7a126486942a12e674a21f22d0886d68df2375f41685d694d48"
+ "7a718024933a7c4306f33f1a4267d469c530b0fed4e7dea520a19dd68bf0203cc87cad65"
+ "2260ed43b7b23f6ed140d3085875190191a0381a",
+ "de5975d8932533f092e76295ed6b23f10fc5fba48bfb82c6cc714826baf0126813247f8b"
+ "d51d5738503654ab22459976",
+ "04f1fabafc01fec7e96d982528d9ef3a2a18b7fe8ae0fa0673977341c7ae4ae8d8d3d674"
+ "20343d013a984f5f61da29ae381a31cf902c46343d01b2ebb614bc789c313b5f91f9302a"
+ "d9418e9c797563e2fa3d44500f47b4e26ad8fdec1a816d1dcf",
+ "fc5940e661542436f9265c34bce407eff6364bd471aa79b90c906d923e15c9ed96eea4e8"
+ "6f3238ea86161d13b7d9359d",
+ "c2fbdd6a56789024082173725d797ef9fd6accb6ae664b7260f9e83cb8ab2490428c8b9c"
+ "52e153612295432fec4d59cd",
+ "8056c5bb57f41f73082888b234fcda320a33250b5da012ba1fdb4924355ae679012d81d2"
+ "c08fc0f8634c708a4833232f"},
+ {NID_secp384r1, NID_sha384,
+ "7cec7480a037ff40c232c1d2d6e8cd4c080bbeecdaf3886fccc9f129bb6d202c316eca76"
+ "c8ad4e76079afe622f833a16f4907e817260c1fa68b10c7a151a37eb8c036b057ed4652c"
+ "353db4b4a34b37c9a2b300fb5f5fcfb8aa8adae13db359160f70a9241546140e550af007"
+ "3468683377e6771b6508327408c245d78911c2cc",
+ "11e0d470dc31fab0f5722f87b74a6c8d7414115e58ceb38bfcdced367beac3adbf1fe9ba"
+ "5a04f72e978b1eb54597eabc",
+ "041950166989164cbfd97968c7e8adb6fbca1873ebef811ea259eb48b7d584627f0e6d6c"
+ "64defe23cbc95236505a252aa141ef424b5cb076d4e32accd9250ea75fcf4ffd81814040"
+ "c050d58c0a29b06be11edf67c911b403e418b7277417e52906",
+ "e56904028226eb04f8d071e3f9cefec91075a81ca0fa87b44cae148fe1ce9827b5d1910d"
+ "b2336d0eb9813ddba3e4d7b5",
+ "c38ef30f55624e8935680c29f8c24824877cf48ffc0ef015e62de1068893353030d1193b"
+ "f9d34237d7ce6ba92c98b0fe",
+ "651b8c3d5c9d5b936d300802a06d82ad54f7b1ba4327b2f031c0c5b0cb215ad4354edc7f"
+ "932d934e877dfa1cf51b13fe"},
+ {NID_secp384r1, NID_sha384,
+ "00ce978603229710345c9ad7c1c2dba3596b196528eea25bd822d43ca8f76a024e292177"
+ "03dd0652c8a615284fc3edcc1c5ad1c8d5a8521c8e104c016a24e50c2e25066dcb56596f"
+ "913b872767e3627aa3e55ec812e9fdac7c2f1beade83aef093e24c9c953982adf431a776"
+ "880ae4583be158e11cdab1cbca3ad3a66900213d",
+ "5c6bbf9fbcbb7b97c9535f57b431ed1ccae1945b7e8a4f1b032016b07810bd24a9e20055"
+ "c0e9306650df59ef7e2cd8c2",
+ "042e01c5b59e619e00b79060a1e8ef695472e23bf9a511fc3d5ed77a334a242557098e40"
+ "972713732c5291c97adf9cf2cf563e3fe4ad807e803b9e961b08da4dde4cea8925649da0"
+ "d93221ce4cdceabc6a1db7612180a8c6bef3579c65539b97e9",
+ "03d23f1277b949cb6380211ad9d338e6f76c3eedac95989b91d0243cfb734a54b19bca45"
+ "a5d13d6a4b9f815d919eea77",
+ "abab65308f0b79c4f3a9ff28dd490acb0c320434094cef93e75adfe17e5820dc1f77544c"
+ "faaacdc8cf9ac8b38e174bef",
+ "11b783d879a6de054b316af7d56e526c3dce96c85289122e3ad927cfa77bfc50b4a96c97"
+ "f85b1b8221be2df083ff58fb"},
+ {NID_secp384r1, NID_sha384,
+ "54a255c18692c6162a46add176a0ae8361dcb8948f092d8d7bac83e160431794d3b98128"
+ "49bf1994bcdcfba56e8540c8a9ee5b93414548f2a653191b6bb28bda8dc70d45cc1b92a4"
+ "89f58a2d54f85766cb3c90de7dd88e690d8ebc9a79987eee1989df35af5e35522f83d85c"
+ "48dda89863171c8b0bf4853ae28c2ac45c764416",
+ "ffc7dedeff8343721f72046bc3c126626c177b0e48e247f44fd61f8469d4d5f0a74147fa"
+ "baa334495cc1f986ebc5f0b1",
+ "0451c78c979452edd53b563f63eb3e854a5b23e87f1b2103942b65f77d024471f75c8ce1"
+ "cc0dfef83292b368112aa5126e313e6aaf09caa3ba30f13072b2134878f14a4a01ee8632"
+ "6cccbff3d079b4df097dc57985e8c8c834a10cb9d766169366",
+ "c3de91dbe4f777698773da70dd610ef1a7efe4dc00d734399c7dd100728006a502822a5a"
+ "7ff9129ffd8adf6c1fc1211a",
+ "f4f477855819ad8b1763f53691b76afbc4a31a638b1e08c293f9bcd55decf797f9913ca1"
+ "28d4b45b2e2ea3e82c6cf565",
+ "7c26be29569ef95480a6d0c1af49dc10a51a0a8931345e48c0c39498bfb94d62962980b5"
+ "6143a7b41a2fddc8794c1b7f"},
+ {NID_secp384r1, NID_sha384,
+ "692a78f90d4f9d5aee5da536314a78d68c1feabbfe5d1ccea7f6059a66c4b310f8051c41"
+ "1c409ccf6e19a0cbd8b8e100c48317fe8c6d4f8a638b9551ce7ee178020f04f7da3001a0"
+ "e6855225fb3c9b375e4ed964588a1a41a095f3f476c42d52ffd23ce1702c93b56d4425d3"
+ "befcf75d0951b6fd5c05b05455bdaf205fe70ca2",
+ "adca364ef144a21df64b163615e8349cf74ee9dbf728104215c532073a7f74e2f6738577"
+ "9f7f74ab344cc3c7da061cf6",
+ "04ef948daae68242330a7358ef73f23b56c07e37126266db3fa6eea233a04a9b3e491523"
+ "3dd6754427cd4b71b75854077d009453ef1828eaff9e17c856d4fc1895ab60051312c3e1"
+ "db1e3766566438b2990cbf9945c2545619e3e0145bc6a79004",
+ "a2da3fae2e6da3cf11b49861afb34fba357fea89f54b35ce5ed7434ae09103fe53e2be75"
+ "b93fc579fedf919f6d5e407e",
+ "dda994b9c428b57e9f8bbaebba0d682e3aac6ed828e3a1e99a7fc4c804bff8df151137f5"
+ "39c7389d80e23d9f3ee497bf",
+ "a0d6b10ceffd0e1b29cf784476f9173ba6ecd2cfc7929725f2d6e24e0db5a4721683640e"
+ "aa2bbe151fb57560f9ce594b"},
+ {NID_secp384r1, NID_sha384,
+ "3b309bb912ab2a51681451ed18ad79e95d968abc35423a67036a02af92f575a0c89f1b66"
+ "8afe22c7037ad1199e757a8f06b281c33e9a40bab69c9874e0bb680b905d909b9dc24a9f"
+ "e89bb3d7f7d47082b25093c59754f8c19d1f81f30334a8cdd50a3cb72f96d4b3c305e60a"
+ "439a7e93aeb640dd3c8de37d63c60fb469c2d3ed",
+ "39bea008ec8a217866dcbdb1b93da34d1d3e851d011df9ef44b7828b3453a54aa70f1df9"
+ "932170804eacd207e4f7e91d",
+ "045709ec4305a9c3271c304face6c148142490b827a73a4c17affcfd01fffd7eaa65d2fd"
+ "edfa2419fc64ed910823513fafb083cda1cf3be6371b6c06e729ea6299213428db571193"
+ "47247ec1fcd44204386cc0bca3f452d9d864b39efbfc89d6b2",
+ "3c90cc7b6984056f570542a51cbe497ce4c11aeae8fc35e8fd6a0d9adeb650e8644f9d1d"
+ "5e4341b5adc81e27f284c08f",
+ "d13646895afb1bfd1953551bb922809c95ad65d6abe94eb3719c899aa1f6dba6b01222c7"
+ "f283900fe98628b7597b6ea6",
+ "4a9a38afda04c0a6b0058943b679bd02205b14d0f3d49b8f31aac289129780cdb1c555de"
+ "f8c3f9106b478729e0c7efaa"},
+ {NID_secp384r1, NID_sha384,
+ "f072b72b8783289463da118613c43824d11441dba364c289de03ff5fab3a6f60e85957d8"
+ "ff211f1cb62fa90216fb727106f692e5ae0844b11b710e5a12c69df3ed895b94e8769ecd"
+ "15ff433762d6e8e94d8e6a72645b213b0231344e2c968056766c5dd6b5a5df41971858b8"
+ "5e99afbf859400f839b42cd129068efabeea4a26",
+ "e849cf948b241362e3e20c458b52df044f2a72deb0f41c1bb0673e7c04cdd70811215059"
+ "032b5ca3cc69c345dcce4cf7",
+ "0406c037a0cbf43fdf335dff33de06d34348405353f9fdf2ce1361efba30fb204aea9dbd"
+ "2e30da0a10fd2d876188371be6360d38f3940e34679204b98fbf70b8a4d97f25443e46d0"
+ "807ab634ed5891ad864dd7703557aa933cd380e26eea662a43",
+ "32386b2593c85e877b70e5e5495936f65dc49553caef1aa6cc14d9cd370c442a0ccfab4c"
+ "0da9ec311b67913b1b575a9d",
+ "5886078d3495767e330c7507b7ca0fa07a50e59912a416d89f0ab1aa4e88153d6eaf0088"
+ "2d1b4aa64153153352d853b5",
+ "2cc10023bf1bf8ccfd14b06b82cc2114449a352389c8ff9f6f78cdc4e32bde69f3869da0"
+ "e17f691b329682ae7a36e1aa"},
+ {NID_secp384r1, NID_sha384,
+ "cf4945350be8133b575c4ad6c9585e0b83ff1ed17989b6cd6c71b41b5264e828b4e11599"
+ "5b1ae77528e7e9002ac1b5669064442645929f9d7dd70927cb93f95edeb73e8624f4bc89"
+ "7ec4c2c7581cb626916f29b2d6e6c2fba8c59a71e30754b459d81b912a12798182bcff40"
+ "19c7bdfe929cc769bcc2414befe7d2906add4271",
+ "d89607475d509ef23dc9f476eae4280c986de741b63560670fa2bd605f5049f1972792c0"
+ "413a5b3b4b34e7a38b70b7ca",
+ "0449a1c631f31cf5c45b2676b1f130cbf9be683d0a50dffae0d147c1e9913ab1090c6529"
+ "a84f47ddc7cf025921b771355a1e207eece62f2bcc6bdabc1113158145170be97469a290"
+ "4eaaa93aad85b86a19719207f3e423051f5b9cbbe2754eefcb",
+ "78613c570c8d33b7dd1bd1561d87e36282e8cf4843e7c344a2b2bb6a0da94756d670eeaf"
+ "fe434f7ae7c780f7cf05ca08",
+ "66f92b39aa3f4aeb9e2dc03ac3855406fa3ebbab0a6c88a78d7a03482f0c9868d7b78bc0"
+ "81ede0947c7f37bf193074ba",
+ "e5c64ed98d7f3701193f25dd237d59c91c0da6e26215e0889d82e6d3e416693f8d58843c"
+ "f30ab10ab8d0edd9170b53ad"},
+ {NID_secp384r1, NID_sha384,
+ "d9b5cf0b50416573ff3c63133275a18394dd4326be2041e8d97e6e4e3855a4a177e9d26d"
+ "fd223fe8aa74564edb49bd72de19916fb6f001f44530d5c18e2c332bce1b7415df5927ec"
+ "e5f3824f34d174b963136b53aef1fb78fb0c06a201a40b2db38e4d8216fc1e392a798c8a"
+ "b4b3a314496b7f1087804ebfa89bf96e9cdb80c0",
+ "083e7152734adf342520ae377087a223688de2899b10cfcb34a0b36bca500a4dfa530e23"
+ "43e6a39da7ae1eb0862b4a0d",
+ "0470a0f16b6c61172659b027ed19b18fd8f57bd28dc0501f207bd6b0bb065b5671cf3dd1"
+ "ed13d388dcf6ccc766597aa6044f845bf01c3c3f6126a7368c3454f51425801ee0b72e63"
+ "fb6799b4420bfdebe3e37c7246db627cc82c09654979c700bb",
+ "28096ababe29a075fbdf894709a20d0fdedb01ed3eeacb642a33a0da6aed726e13caf6cf"
+ "206792ec359f0c9f9b567552",
+ "ee2923f9b9999ea05b5e57f505bed5c6ba0420def42c6fa90eef7a6ef770786525546de2"
+ "7cdeb2f8586f8f29fb4ee67c",
+ "50ef923fb217c4cf65a48b94412fda430fac685f0da7bd574557c6c50f5b22e0c8354d99"
+ "f2c2f2c2691f252f93c7d84a"},
+ {NID_secp384r1, NID_sha384,
+ "9e4042d8438a405475b7dab1cd783eb6ce1d1bffa46ac9dfda622b23ac31057b922eced8"
+ "e2ed7b3241efeafd7c9ab372bf16230f7134647f2956fb793989d3c885a5ae064e85ed97"
+ "1b64f5f561e7ddb79d49aa6ebe727c671c67879b794554c04de0e05d68264855745ef3c9"
+ "567bd646d5c5f8728b797c181b6b6a876e167663",
+ "63578d416215aff2cc78f9b926d4c7740a77c142944e104aa7422b19a616898262d46a8a"
+ "942d5e8d5db135ee8b09a368",
+ "04cadbacef4406099316db2ce3206adc636c2bb0a835847ed7941efb02862472f3150338"
+ "f13f4860d47f39b7e098f0a390752ad0f22c9c264336cde11bbc95d1816ed4d1b1500db6"
+ "b8dce259a42832e613c31178c2c7995206a62e201ba108f570",
+ "7b69c5d5b4d05c9950dc94c27d58403b4c52c004b80a80418ad3a89aabc5d34f21926729"
+ "e76afd280cc8ee88c9805a2a",
+ "db054addb6161ee49c6ce2e4d646d7670754747b6737ca8516e9d1e87859937c3ef9b1d2"
+ "663e10d7e4bd00ec85b7a97a",
+ "fcc504e0f00ef29587e4bc22faada4db30e2cb1ac552680a65785ae87beb666c792513f2"
+ "be7a3180fc544296841a0e27"},
+ {NID_secp384r1, NID_sha384,
+ "0b14a7484a40b68a3ce1273b8a48b8fdb65ba900d98541c4bbd07b97e31bcc4c85545a03"
+ "e9deab3c563f47a036ff60d0361684ba241b5aa68bb46f440da22181ee328a011de98eff"
+ "34ba235ec10612b07bdfa6b3dc4ccc5e82d3a8d057e1862fef3def5a1804696f84699fda"
+ "2ec4175a54a4d08bcb4f0406fdac4eddadf5e29b",
+ "ed4df19971658b74868800b3b81bc877807743b25c65740f1d6377542afe2c6427612c84"
+ "0ada31a8eb794718f37c7283",
+ "0433093a0568757e8b58df5b72ea5fe5bf26e6f7aeb541b4c6a8c189c93721749bcacecc"
+ "f2982a2f0702586a9f812fc66febe320d09e1f0662189d50b85a20403b821ac0d000afdb"
+ "f66a0a33f304726c69e354d81c50b94ba3a5250efc31319cd1",
+ "d9b4cd1bdfa83e608289634dbfcee643f07315baf743fc91922880b55a2feda3b38ddf60"
+ "40d3ba10985cd1285fc690d5",
+ "009c74063e206a4259b53decff5445683a03f44fa67252b76bd3581081c714f882f882df"
+ "915e97dbeab061fa8b3cc4e7",
+ "d40e09d3468b46699948007e8f59845766dbf694b9c62066890dd055c0cb9a0caf0aa611"
+ "fb9f466ad0bbb00dbe29d7eb"},
+ {NID_secp384r1, NID_sha384,
+ "0e646c6c3cc0f9fdedef934b7195fe3837836a9f6f263968af95ef84cd035750f3cdb649"
+ "de745c874a6ef66b3dd83b66068b4335bc0a97184182e3965c722b3b1aee488c3620adb8"
+ "35a8140e199f4fc83a88b02881816b366a09316e25685217f9221157fc05b2d8d2bc8553"
+ "72183da7af3f0a14148a09def37a332f8eb40dc9",
+ "e9c7e9a79618d6ff3274da1abd0ff3ed0ec1ae3b54c3a4fd8d68d98fb04326b7633fc637"
+ "e0b195228d0edba6bb1468fb",
+ "04a39ac353ca787982c577aff1e8601ce192aa90fd0de4c0ed627f66a8b6f02ae5131554"
+ "3f72ffc1c48a7269b25e7c289a9064a507b66b340b6e0e0d5ffaa67dd20e6dafc0ea6a6f"
+ "aee1635177af256f9108a22e9edf736ab4ae8e96dc207b1fa9",
+ "b094cb3a5c1440cfab9dc56d0ec2eff00f2110dea203654c70757254aa5912a7e73972e6"
+ "07459b1f4861e0b08a5cc763",
+ "ee82c0f90501136eb0dc0e459ad17bf3be1b1c8b8d05c60068a9306a346326ff7344776a"
+ "95f1f7e2e2cf9477130e735c",
+ "af10b90f203af23b7500e070536e64629ba19245d6ef39aab57fcdb1b73c4c6bf7070c62"
+ "63544633d3d358c12a178138"},
+ {NID_secp384r1, NID_sha512,
+ "67d9eb88f289454d61def4764d1573db49b875cfb11e139d7eacc4b7a79d3db3bf720819"
+ "1b2b2078cbbcc974ec0da1ed5e0c10ec37f6181bf81c0f32972a125df64e3b3e1d838ec7"
+ "da8dfe0b7fcc911e43159a79c73df5fa252b98790be511d8a732fcbf011aacc7d45d8027"
+ "d50a347703d613ceda09f650c6104c9459537c8f",
+ "217afba406d8ab32ee07b0f27eef789fc201d121ffab76c8fbe3c2d352c594909abe591c"
+ "6f86233992362c9d631baf7c",
+ "04fb937e4a303617b71b6c1a25f2ac786087328a3e26bdef55e52d46ab5e69e5411bf9fc"
+ "55f5df9994d2bf82e8f39a153ea97d9075e92fa5bfe67e6ec18e21cc4d11fde59a68aef7"
+ "2c0e46a28f31a9d60385f41f39da468f4e6c3d3fbac9046765",
+ "90338a7f6ffce541366ca2987c3b3ca527992d1efcf1dd2723fbd241a24cff19990f2af5"
+ "fd6419ed2104b4a59b5ae631",
+ "c269d9c4619aafdf5f4b3100211dddb14693abe25551e04f9499c91152a296d7449c08b3"
+ "6f87d1e16e8e15fee4a7f5c8",
+ "77ffed5c61665152d52161dc13ac3fbae5786928a3d736f42d34a9e4d6d4a70a02d5af90"
+ "fa37a23a318902ae2656c071"},
+ {NID_secp384r1, NID_sha512,
+ "45db86829c363c80160659e3c5c7d7971abb1f6f0d495709bba908d7aa99c9df64b3408a"
+ "51bd69aba8870e2aaff488ef138f3123cf94391d081f357e21906a4e2f311defe527c55e"
+ "0231579957c51def507f835cceb466eb2593a509dcbee2f09e0dde6693b2bfe17697c9e8"
+ "6dd672f5797339cbe9ea8a7c6309b061eca7aef5",
+ "0a3f45a28a355381a919372f60320d6610cfb69c3e318eb1607db3cadfc42b728b77a6a9"
+ "e9e333de9183c58933daf60f",
+ "04832cbb7061a719a316e73dbad348fa67cd17c33f40b9000a3d3b691a2a2cd821052566"
+ "717c3ead01089b56086af1366f1e15a048d1dce642d9ebcbfac7f92b1bcee90fd0240cc7"
+ "9abd29e32e0e655c4ee1fd34fb88178bba92aca100e7794ed0",
+ "2a78e651623ba604c42cf094fc7d046629306f508853427ba091448800d1092c041bb232"
+ "3035fc9d19a8d44950f7dcc3",
+ "0db0cc9a2bda8dd7e565ad36f91b1c5756d78164dc8a72a5bee4b6bc45ea38c7a16b01d0"
+ "5b1893d4e06b62db24c30385",
+ "abd383edaeda7d0b8de1b54fcd3c28874fed62ab266f1f84c8ba796a7b54e5e0695fdb43"
+ "ce7fe90ed00fa468d87bca64"},
+ {NID_secp384r1, NID_sha512,
+ "4672fce0721d37c5be166bffa4b30d753bcf104b9b414db994b3ed33f36af4935ea59a0b"
+ "b92db66448b3f57dad4fc67cef10ce141bf82c536be604b89a0bc0e8bca605b867880049"
+ "d97142d30538fc543bd9d4fab7fdbe2f703815cdb6361beb66acff764bc275f910d16624"
+ "45b07b92830db69a5994857f53657ed5ca282648",
+ "2e408c57921939f0e0fe2e80ce74a4fa4a1b4fa7ab070206298fe894d655be50e2583af9"
+ "e45544b5d69c73dce8a2c8e7",
+ "04a2b24a5ad4a2e91f12199ed7699e3f297e27bf8b8ea8fbe7ed28366f3544cd8e680c23"
+ "8450f8a6422b40829d6647b25c2732be0075536e6519f6a099b975a40f8e0de337fa4d48"
+ "bd0762b43f41cab8deafdef9cfbb9973e457801e3bf9c93304",
+ "b10b6258afdde81f9c971cc1526d942e20cafac02f59fee10f98e99b8674636bff1d84a6"
+ "eaa49c0de8d8cfdc90d8ce84",
+ "be428a8de89a364a134719141ee8d776a3a8338f1132b07e01b28573d8eaf3b9008b6330"
+ "4c48821e53638b6141f9660b",
+ "866181dbef5c147d391bed6adcee408c339982c307adc718c2b9ab9e5642d8dedc36dd64"
+ "02559a3ab614c99c1e56b529"},
+ {NID_secp384r1, NID_sha512,
+ "9ae48fdd9bfc5cb0f4d4761e28b2073bda05a3e3fe82c212e66701dc4573cc67a829b0f8"
+ "2d7520b1bf11db0c6d1743822bbe41bb0adbd7222aa5fae70fbd1a31f2d4453a01c81e06"
+ "4d775388468be96f6063f8673b7b8d4455fe1bd4c801ad5e625a015eaa4a1a18da490d2a"
+ "f8642201eaba3c611cbd65f861d8e19ca82a1ee6",
+ "1c285da72a8eb1c3c38faab8d3bb4e68dc95c797082b9a3991a21c1de54759071ecf2265"
+ "fb1eff504ab24174bc6710cf",
+ "0411acb1b5cc59a4f1df1913a8d6e91cbdafb8206dc44aff7d9da45906b664fc33194d99"
+ "35a82aa4d62f39618897c86025832ed0b9575fff52a3603bfe89f312751b4c396da98324"
+ "117a61b3f525d27b2266f6cfb22be07e50b6874435e380ed62",
+ "2513075e02cc7fb3cff7b7adde46da31c5493749b5cf02758bd5b098a838bfd4d5e4c7fb"
+ "8268bdc37e219c30efebe878",
+ "b3d638b3be45f14f170da5bdc22d2114deac93ab340a25b3af2b5c18584bb9147e00dc6c"
+ "67a2274f79aa4838793eb63f",
+ "876112bdca2c725eb2f6dbd76d07710a31f0c16d38430cb0817f320a25a9ecfec8a66137"
+ "d0304612ae29a6a484fd3319"},
+ {NID_secp384r1, NID_sha512,
+ "817d6a110a8fd0ca7b4d565558f68b59a156744d4c5aac5c6610c95451793de2a756f774"
+ "558c61d21818d3ebeeeb71d132da1c23a02f4b305eccc5cd46bd21dfc173a8a91098354f"
+ "10ffbb21bf63d9f4c3feb231c736504549a78fd76d39f3ad35c36178f5c233742d2917d5"
+ "611d2073124845f1e3615b2ef25199a7a547e882",
+ "9da37e104938019fbdcf247e3df879a282c45f8fb57e6655e36b47723af42bec3b820f66"
+ "0436deb3de123a21de0ca37b",
+ "04722d0ea6891d509b18b85ca56f74deb5c3030d2a30433824123d430d03c99279572c3b"
+ "28ecf01e747b9db8acc55d0ba37e2605ea7092214f366f3639037bffd89fe103c646e990"
+ "839d3a1ced8d78edb5b9bc60d834fd8e2a3c17e920bdae023a",
+ "c8c18e53a9aa5915288c33132bd09323638f7995cd89162073984ed84e72e07a37e18c4c"
+ "023933eace92c35d10e6b1b6",
+ "6512a8a2be731e301dcf4803764297862bbfa0ac8daed64d8e98b34618ecb20520fc5d3c"
+ "f890b7783edf86e7ea407541",
+ "4ff10301f7b4168fae066361376007c1d7aa89a75c87719d0b54711ffef5ef3726f3eef8"
+ "4f7ebc025c110bde511b17f6"},
+ {NID_secp384r1, NID_sha512,
+ "464f10ec6fb229a51db5fd0e122f2cb8a9a022117e2987f4007bf5565b2c16aba0714e2e"
+ "3cdd0c100d55ac3017e36fc7501ad8309ab9572aa65424c9eb2e580a119c55777676ec49"
+ "8df53ef6ae78fd8a988130ee0e6082bf1ef71cd4c946021018a8ca7154d13b174c638912"
+ "613b0bdb9001c302bf7e443ad2124ab2c1cce212",
+ "0661ab3bf9f7bef51bec7dff758de289154557beb9ce18cc4b8cc09a871e8322af259cf1"
+ "88b593dc62f03a19e75f7f69",
+ "04b4f100558043858efa728082d9b99ad5192b59b0947434f5ba7ff2514508a6d71ba54e"
+ "7221c31cb0712103272b3f6fa434f6df4eeb2da11498044635067c2715ed15ae251c78ff"
+ "b9030d87909ea8539b66394e93109ca54c0406cf99960c3e93",
+ "84a87137edb6894f96c5a8e94a3765162034feb84dfea94e1c71411170c285a80321ec79"
+ "99e25861844143209804882c",
+ "4dc9d1b949b36e3c3847ac1c7ed114e1bc9cbe76119cf6fcd3f1b69ee6ee54e3255f1bb2"
+ "88fe2f8bd6d4049a21793c27",
+ "56a561d647b62ccae1e6df818b1a6fbde66c82ef0ff69ee415f183e7daf76be22630c7e0"
+ "2cd3fd729dfa490f26824584"},
+ {NID_secp384r1, NID_sha512,
+ "4e3e0fb96320ddccde8b463c273654c4f7164920b1d63430921d2e808dee403e6420eedd"
+ "a0a557b911d00736a4f8798dd4ef26673efd6d190988ad4929ec64f8685cfb76070a36cd"
+ "6a3a4bf2f54fb08a349d44642b6f614043fef9b2813b63457c76537d23da7b37310334f7"
+ "ba76edf1999dad86f72aa3446445a65952ac4e50",
+ "66e7cfdeb7f264cf786e35210f458c32223c3a12a3bc4b63d53a5776bc9b069928452484"
+ "f6241caa3781fd1a4109d4db",
+ "043c7682de540ab231daf21bf9fc80bda6abf7e17dcc79d476c7b7c3bd4d42d386877fd8"
+ "ba495c1b0333e04fb5fd2a15050a1582e4f4d72abea9d3476aff8369c41261f0c5dddf2c"
+ "a82e10f7a163f73df09473d9e5e2552187104e4cc7c6d83611",
+ "2fa266f5cce190eb77614933ca6a55121ad8bae168ff7a9043d96d13b5ca2fe70101ff9f"
+ "e1e2b2cd7413e6aa8f49abde",
+ "e7ecda9da0c52d0474a9f70094dc8f061d7d6a22210d3b69a7be8f389aa666f256322099"
+ "b87d16ad35357ea856574dba",
+ "ba348eb40a2830ec5a1130264ac0a8675420b1ae243e808a778135809ece21f42c0c8811"
+ "66321102b4f02df4c5c7ed9d"},
+ {NID_secp384r1, NID_sha512,
+ "c466b6b6baf7e6ffa876ec06105e2d43534e0517c07b1c4c9fb67ba81ce09525a7721ec3"
+ "c290f2b1f65b6463d41598e7a25b2238501629953a5ca955b644354fb6856733a2e5bb8f"
+ "5bc21a0c803493f5539f9fb83aab3dba2c982989c2270c61ab244b68bfe1b948d00c2ed9"
+ "75e09c29b5f8a7effcad8652a148cc880d503217",
+ "92c2f7ee64af86d003ab484e12b82fcf245fc330761057fec5b7af8f7e0a2d85b468c21d"
+ "171460fcb829cae7b986316d",
+ "04ca43a306479bf8fb537d4b9ff9d635bbb2a0d60d9e854d5b7e269d09d91f78c6b90b61"
+ "6e4c931629453645a2bb371e14356c4d7f10e690614eaf7f82ba0f9dc1aad98130c0ad9f"
+ "e353deec565cc04bef789a0a4242322e0058b46cd02f2de77d",
+ "6ec81fb74f8725ba225f317264460ee300cfd2f02092000989acbdad4799cf55c244a65c"
+ "557113328fe20282e6badb55",
+ "cd7a4309bcebc25a8e10899fe2eda5f8b2dbcf329cd2f3d65befd67393e83fba2f8a67a1"
+ "5c01a6ac8314f9f5e87a9dca",
+ "6dcfc0426bc148e67e91d4784e3d7e9bc3b7ce3676be62daa7f3f55dfdff6d9dc735b5e3"
+ "e0bbd0785db1f76f7ac065f3"},
+ {NID_secp384r1, NID_sha512,
+ "feac892b7720af80b3c9eede51e923f18d3d0c5de4c31f4aa75e36df7c7c2fd8f4177885"
+ "1a24b69e67dccb65e159dd5c383243bad7cfedcc5e85c8a01c34b0b94ba8e07e4c024c09"
+ "d279b3731e8b62f9562d3c4f5042567efe42a9d0eaaabab28bc6f11232fc8ceaaf4518d9"
+ "f3b2bebf020294496b7f6b879e69503f75fecd3d",
+ "15347caaad1067f1848a676bd0a8c52021ae604b79d02775a0459226e0391a3acd26653c"
+ "916fcfe86149fb0ee0904476",
+ "04e5a0463163964d984f5bad0072d45bc2059939e60a826ccca36c151460ae360f5d6679"
+ "f60fe43e999b6da5841c96e48a30f2dd425a3fa2c95d34124217250b39e3b4a14f3e6e41"
+ "5ae8e5b0409eb72f43f78b64d0ce6f2d49980d6f04cd1391db",
+ "1a2d224db4bb9c241ca5cab18920fad615fa25c1db0de0f024cb3ace0d11ef72b0568854"
+ "46659f67650fdff692517b1c",
+ "87b4de0fb21df38dfc9a4b1e350da67547e307f55b5b9dd6615e408afe7c3553a6e02722"
+ "847367439e636074faa2182b",
+ "375d965753b9ed6c6c08576726f8308c2f8dbd2737824464e71265d47907e26f615bbeb8"
+ "203ec617520d4ecd1851dc44"},
+ {NID_secp384r1, NID_sha512,
+ "cf2982e3bf174ce547741b969403cd11e9553067e6af8177d89511a0eb040db924530bdb"
+ "a65d8b1ff714228db0737c1756f509e1506014a10736e65be2f91980a73891496e90ff27"
+ "14a3601c7565cdcef5a395e2e0e1652f138d90d61eaa9cba993b823245647f6e07cec9b8"
+ "b4449cd68a29741cd1579c66e548ca0d0acf33aa",
+ "ac1cb5e59bda2eff3413a3bab80308f9fb32c595283c795de4c17fdae8d4647b5f108fd0"
+ "801aee22adb7db129283b5aa",
+ "04bc6b1a718284803553c173089c397870aaaecca579bb8e81a8cfa12473cd2057567fa8"
+ "726a19ed427cc035baeec2c55114f82997d1129b669f0015350e47ad561b1b13441af4fb"
+ "44656f15ed0c5706984d66655accc52f2e943eef39cb1cdc21",
+ "8053a46e875f446056b06d4318fa3e8977622de7207cbf0996bf35b0e9b19aaa507f642b"
+ "cf0be9f048f1af09806f6946",
+ "a994eb15b64114ce8a9342d18b5edda96a6d76314a5ac03da723699177d352a4a9f3b712"
+ "1b11a91e43a6af4025da51d6",
+ "8183ae33a888e99aa76882da0a6705ad102f2bbd9572fad0d2e4d6d70151970469e00c52"
+ "20e59c14724d771c1384b302"},
+ {NID_secp384r1, NID_sha512,
+ "bf9fdd4107ef5a6070108771ac9eee4f0c8043bf0d04db772a47294f4137e2439d94b337"
+ "114b074e57e0cb78d0ccf352a2833e9788ee2a1a9ffeacd34f38fcefb86653d70c7dadd4"
+ "cf6548d608e70acdef6c7530974b92c813798add659752a8c72b05e1ad9c65c21834ce6f"
+ "be49d8a1426b5a54270794436d284364fac6ec1a",
+ "205f1eb3dfacff2bdd8590e43e613b92512d6a415c5951bda7a6c37db3aae39b9b7ec6ed"
+ "d256609e75373419087fa71f",
+ "04c9f1f63a18c761b077a1ec35fbb2de635db9b8592c36194a01769b57728c7755d4c79b"
+ "3d5b97a1a4631e30c86d03f13cf8c4a38770054d5cc9bb9182e6d4638242c4fd16e869ac"
+ "22e44c4b9402d594e0c6f5df6a9a7de32a4893d9f6588f1950",
+ "ecd395c5d8b7d6e6b2b19644e0d2e6086c912c6a0f5b8ed4b94b7290b65852c9741ce8ee"
+ "b08d8751ead8a183e17d76c6",
+ "e81331d78b438b0b8d98c1be03385ba5d614af182f1677f259126cc3de7eaac6c19b02be"
+ "955d936b6bf9c27c6796e6f0",
+ "17c2b7a8e0fc93909762aa9f86f9561e759ecb88f02337b2018363be6095d9e4324a6d32"
+ "96046686624b5efad6b52878"},
+ {NID_secp384r1, NID_sha512,
+ "5d634fb39a2239256107dc68db19751540b4badac9ecf2fce644724401d6d632b3ae3b2e"
+ "6d05746b77ddc0c899878032248c263eda08d3d004d35952ad7a9cfe19343d14b37f9f63"
+ "2245e7b7b5fae3cb31c5231f82b9f1884f2de7578fbf156c430257031ba97bc6579843bc"
+ "7f59fcb9a6449a4cd942dffa6adb929cf219f0ad",
+ "e21e3a739e7ded418df5d3e7bc2c4ae8da76266a1fc4c89e5b09923db80a72217f1e9615"
+ "8031be42914cf3ee725748c1",
+ "040f753171922b5334f3dd2778a64ce2da8295121939beae71ad85e5344e893be0fd03cf"
+ "14e1f031adec098e0c4409449c45c10a0ffc0eb2f1cec5c89b698061108313ee7d449ad5"
+ "80efad344f0e7cf35be8a18fca620f112e57bdc746abdace55",
+ "d06bea06b25e6c30e866b1eb0657b45673e37b709013fb28fd7373afc8277cbc861354f8"
+ "21d0bd1927e52ec083a0f41f",
+ "e8d4a31dd0e7d2522be62a32608e744c3775ceb606dc897899f0c73f1a40ce9a8be854cd"
+ "506e65cd81fd7fa2c616cb7b",
+ "8151b681b6b6046d3c36f332d06d9ba7751e740631cdb759f88c50a25a8e950d5023df8a"
+ "15c77243743733c4feaf21d5"},
+ {NID_secp384r1, NID_sha512,
+ "c9b4ff721b3e886f0dc05856ffff0aabb64a8504b1746a47fdd73e6b7ebc068f06ac7ffa"
+ "44c757e4de207fc3cbfaf0469d3ac6795d40630bcafe8c658627e4bc6b86fd6a2135afbc"
+ "18ccc8e6d0e1e86016930ca92edc5aa3fbe2c57de136d0ea5f41642b6a5d0ddeb380f245"
+ "4d76a16639d663687f2a2e29fb9304243900d26d",
+ "93434d3c03ec1da8510b74902c3b3e0cb9e8d7dccad37594d28b93e065b468d9af4892a0"
+ "3763a63eae060c769119c23c",
+ "04a52c25f2af70e5bc6a992ecef4ea54e831ed5b9453747d28aec5cffb2fcfee05be80c5"
+ "cbab21606b5507aa23878adee12cf2a9afeff83f3041dc8a05f016ccae58aa1a0e0dc6be"
+ "9d928e97f2598c9ba5e9718d5eb74c9cfb516fd8c09f55f5b9",
+ "13d047708ae5228d6e3bbada0e385afdb3b735b31123454fdf40afe3c36efed563fd2cce"
+ "84dcc45c553b0993d9ca9ec3",
+ "a0203f6f2c456baac03538ed506a182e57a25151802cf4b2557613b2fb615ebd4c50ddc5"
+ "05f87c048a45bad3b2fc371c",
+ "0eab56457c4080400fa3af124761d5a01fef35f9649edba8b97d22116386f3b8b363e97e"
+ "f3f82616d5d825df1cf865ef"},
+ {NID_secp384r1, NID_sha512,
+ "db2ad659cf21bc9c1f7e6469c5f262b73261d49f7b1755fc137636e8ce0202f929dca446"
+ "6c422284c10be8f351f36333ebc04b1888cba217c0fec872b2dfc3aa0d544e5e06a9518a"
+ "8cfe3df5b20fbcb14a9bf218e3bf6a8e024530a17bab50906be34d9f9bba69af0b11d8ed"
+ "426b9ec75c3bd1f2e5b8756e4a72ff846bc9e498",
+ "e36339ddbe8787062a9bc4e1540690915dd2a2f11b3fe9ee946e281a0a2cbed426df405e"
+ "d9cb0eca42f85443efd09e0c",
+ "04a1ffb4b790d1593e907369b69de10b93cddbb02c6131f787422364d9d692768ef80979"
+ "70306cce16c97f2b10c538efa7d0692028601ea794d2563ffe9facc7273938fab47dd00b"
+ "8960be15549a9c2b3f8552583eb4c6cd212fe486c159c79153",
+ "2226f7329378cecd697f36ae151546643d67760856854661e31d424fae662da910e2157d"
+ "a9bb6dfbe3622296e0b5710c",
+ "20dcc25b67dd997621f437f65d78347fb57f8295b1b14453b1128203cda892bcfe726a2f"
+ "107d30975d63172e56f11d76",
+ "51cff592cbef75ef8321c8fa1e4229c4298b8180e427bee4e91d1e24fc28a729cf296beb"
+ "728960d2a58cf26773d8e2e2"},
+ {NID_secp384r1, NID_sha512,
+ "dbd8ddc02771a5ff7359d5216536b2e524a2d0b6ff180fa29a41a8847b6f45f1b1d52344"
+ "d32aea62a23ea3d8584deaaea38ee92d1314fdb4fbbecdad27ac810f02de0452332939f6"
+ "44aa9fe526d313cea81b9c3f6a8dbbeafc899d0cdaeb1dca05160a8a039662c4c845a3db"
+ "b07be2bc8c9150e344103e404411668c48aa7792",
+ "5da87be7af63fdaf40662bd2ba87597f54d7d52fae4b298308956cddbe5664f1e3c48cc6"
+ "fd3c99291b0ce7a62a99a855",
+ "0454c79da7f8faeeee6f3a1fdc664e405d5c0fb3b904715f3a9d89d6fda7eabe6cee86ef"
+ "82c19fca0d1a29e09c1acfcf18926c17d68778eb066c2078cdb688b17399e54bde5a79ef"
+ "1852352a58967dff02c17a792d39f95c76d146fdc086fe26b0",
+ "1b686b45a31b31f6de9ed5362e18a3f8c8feded3d3b251b134835843b7ae8ede57c61dc6"
+ "1a30993123ac7699de4b6eac",
+ "9dbfa147375767dde81b014f1e3bf579c44dd22486998a9b6f9e0920e53faa11eed29a4e"
+ "2356e393afd1f5c1b060a958",
+ "e4d318391f7cbfe70da78908d42db85225c85f4f2ff413ecad50aad5833abe91bdd5f6d6"
+ "4b0cd281398eab19452087dd"},
+ {NID_secp521r1, NID_sha224,
+ "58ec2b2ceb80207ff51b17688bd5850f9388ce0b4a4f7316f5af6f52cfc4dde4192b6dbd"
+ "97b56f93d1e4073517ac6c6140429b5484e266d07127e28b8e613ddf65888cbd5242b2f0"
+ "eee4d5754eb11f25dfa5c3f87c790de371856c882731a157083a00d8eae29a57884dbbfc"
+ "d98922c12cf5d73066daabe3bf3f42cfbdb9d853",
+ "1d7bb864c5b5ecae019296cf9b5c63a166f5f1113942819b1933d889a96d12245777a994"
+ "28f93de4fc9a18d709bf91889d7f8dddd522b4c364aeae13c983e9fae46",
+ "0401a7596d38aac7868327ddc1ef5e8178cf052b7ebc512828e8a45955d85bef49494d15"
+ "278198bbcc5454358c12a2af9a3874e7002e1a2f02fcb36ff3e3b4bc0c69e70184902e51"
+ "5982bb225b8c84f245e61b327c08e94d41c07d0b4101a963e02fe52f6a9f33e8b1de2394"
+ "e0cb74c40790b4e489b5500e6804cabed0fe8c192443d4027b",
+ "141f679033b27ec29219afd8aa123d5e535c227badbe2c86ff6eafa5116e9778000f5385"
+ "79a80ca4739b1675b8ff8b6245347852aa524fe9aad781f9b672e0bb3ff",
+ "06b973a638bde22d8c1c0d804d94e40538526093705f92c0c4dac2c72e7db013a9c89ffc"
+ "5b12a396886305ddf0cbaa7f10cdd4cd8866334c8abfc800e5cca365391",
+ "0b0a01eca07a3964dd27d9ba6f3750615ea36434979dc73e153cd8ed1dbcde2885ead575"
+ "7ebcabba117a64fcff9b5085d848f107f0c9ecc83dfa2fa09ada3503028"},
+ {NID_secp521r1, NID_sha224,
+ "2449a53e0581f1b56d1e463b1c1686d33b3491efe1f3cc0443ba05d65694597cc7a2595b"
+ "da9cae939166eb03cec624a788c9bbab69a39fb6554649131a56b26295683d8ac1aea969"
+ "040413df405325425146c1e3a138d2f4f772ae2ed917cc36465acd66150058622440d7e7"
+ "7b3ad621e1c43a3f277da88d850d608079d9b911",
+ "17e49b8ea8f9d1b7c0378e378a7a42e68e12cf78779ed41dcd29a090ae7e0f883b0d0f2c"
+ "bc8f0473c0ad6732bea40d371a7f363bc6537d075bd1a4c23e558b0bc73",
+ "0400156cd2c485012ea5d5aadad724fb87558637de37b34485c4cf7c8cbc3e4f106cb1ef"
+ "d3e64f0adf99ddb51e3ac991bdd90785172386cdaf2c582cc46d6c99b0fed101edeeda71"
+ "7554252b9f1e13553d4af028ec9e158dbe12332684fc1676dc731f39138a5d301376505a"
+ "9ab04d562cc1659b0be9cb2b5e03bad8b412f2699c245b0ba2",
+ "1dc3e60a788caa5f62cb079f332d7e5c918974643dca3ab3566a599642cd84964fbef43c"
+ "e94290041fe3d2c8c26104d9c73a57a7d4724613242531083b49e255f33",
+ "12592c0be6cce18efb2b972cd193d036dcb850f2390fa8b9b86b2f876548bc424fb3bc13"
+ "c1e5c415fa09d0ecfcae5bf76fb23e8322d7eecb264a2ae6d20ef50d405",
+ "11bc9713be88e3b9912a3e5f5d7b56f20573e979b1a75d04ce339f724bddffa4665d2599"
+ "5fe24d32507d8a07c5e10169f5338ef2827737f7b0291752b21237217e3"},
+ {NID_secp521r1, NID_sha224,
+ "7ba05797b5b67e1adfafb7fae20c0c0abe1543c94cee92d5021e1abc57720a6107999c70"
+ "eacf3d4a79702cd4e6885fa1b7155398ac729d1ed6b45e51fe114c46caf444b20b406ad9"
+ "cde6b9b2687aa645b46b51ab790b67047219e7290df1a797f35949aaf912a0a8556bb210"
+ "18e7f70427c0fc018e461755378b981d0d9df3a9",
+ "135ea346852f837d10c1b2dfb8012ae8215801a7e85d4446dadd993c68d1e9206e1d8651"
+ "b7ed763b95f707a52410eeef4f21ae9429828289eaea1fd9caadf826ace",
+ "04018d40cc4573892b3e467d314c39c95615ee0510e3e4dbc9fa28f6cd1f73e7acde15ad"
+ "7c8c5339df9a7774f8155130e7d1f8de9139ddd6dfe1841c1e64c38ea98243017021782d"
+ "33dc513716c83afe7ba5e7abef9cb25b31f483661115b8d6b5ae469aaf6f3d54baa3b658"
+ "a9af9b6249fd4d5ea7a07cb8b600f1df72b81dac614cfc384a",
+ "0c24acc1edb3777212e5b0bac744eadf4eda11fa150753b355bf96b189e6f57fc02284bb"
+ "22d8b3cd8bba7a09aae9f4ea955b382063425a6f8da2f99b9647b147172",
+ "183da7b8a9f9d5f08903359c1a2435b085fcf26a2ed09ab71357bb7634054acc569535e6"
+ "fe81d28233e4703005fc4bf83ce794d9463d575795aa0f03398e854cefd",
+ "0b3621145b9866ab7809139795cc30cd0404127a7f0fafa793660491009f6c53724fdb0b"
+ "1ffbf0fd51c131180b8a957fe66e76d2970247c024261c768dee9abbfb9"},
+ {NID_secp521r1, NID_sha224,
+ "716dabdb22a1c854ec60420249905a1d7ca68dd573efaff7542e76f0eae54a1828db69a3"
+ "9a1206cd05e10e681f24881b131e042ed9e19f5995c253840e937b809dfb8027fed71d54"
+ "1860f318691c13a2eb514daa5889410f256305f3b5b47cc16f7a7dad6359589b5f4568de"
+ "4c4aae2357a8ea5e0ebaa5b89063eb3aa44eb952",
+ "1393cb1ee9bfd7f7b9c057ecc66b43e807e12515f66ed7e9c9210ba1514693965988e567"
+ "fbad7c3f17231aacee0e9b9a4b1940504b1cd4fd5edfaa62ba4e3e476fc",
+ "0401e855c935139c8092092cfa733db1292530506eeb2bbb1687f9602c36d97a6714e998"
+ "892d5d3b842d1896a6ece9d549e9792881a256256137b3dff180c96cc5d07b018d83b6e9"
+ "3cd287311f7bf7c1d7f9eeabcf0b69c12f2d8f40e333e81e956d968532a37a4c04d76187"
+ "4df293b484cd7053b03fdbc2fdcd3b4c412d6f272fb7c93fe6",
+ "1d98619bdc04735d30c222fc67da82c069aea5f449af5e8c4db10c1786c0cb9e6f2cc0bb"
+ "66fa6be18c485570d648dafcd0a973c43d5c94e9a9dacbd3170e53fa2a0",
+ "0bf47fabe107ce0ec03e2ad60a79b058e1bebb18568b6a8cdbe86032e71aa30c15766105"
+ "b2ea952cfa79bcab046df601159f96e179bbcf252dc68ac73d31481fdae",
+ "1f918fec69cd07d90f9d892b7117e7519c3224947f4262f1fd97077dd5386a6c78aeddff"
+ "3ee97e59ea353f06029f1336f0d6ef5c0f4b17ca59343a55319b7bfc3db"},
+ {NID_secp521r1, NID_sha224,
+ "9cc9c2f131fe3ac7ea91ae6d832c7788cbbf34f68e839269c336ceef7bef6f20c0a62ea8"
+ "cc340a333a3002145d07eba4cf4026a0c4b26b0217a0046701de92d573d7c87a386a1ea6"
+ "8dc80525b7dcc9be41b451ad9f3d16819e2a0a0b5a0c56736da3709e64761f97cae2399d"
+ "e2a4022dc4c3d73c7a1735c36dbde86c4bc5b6f7",
+ "179fa164e051c5851e8a37d82c181e809a05fea9a3f083299b22684f59aa27e40dc5a33b"
+ "3f7949338764d46bfe1f355134750518b856d98d9167ef07aac3092c549",
+ "0401857cc7bbed20e87b3fd9a104956aa20c6502192910e0e7598410526ebfe1c99397b8"
+ "5189612a60c51fb8f4dd5cb08a8cd2e702563062dcb043410715c5323a004601fce8d135"
+ "284310d2f38c216030634b32cd223222f0d9d8d2b7c55477c4b8b74fc6c96a6092f34b05"
+ "ca44d3633a5037c2166c479a032bb4f949f89fc1ba5236d07d",
+ "16d9704c0cee791f2938bb2a8a595752a3635c2f557efeecefd719414b5f2aaf846080f5"
+ "82c76eae7a8fddf81859b49d0131c212524d55defa67dca1a9a28ca400f",
+ "1c9a4e51774384e8362876a87c572e6463a54413c7c6252c552ebb182f83e45ace436ade"
+ "4ca373d8a7216e83efb62c8b41c4d5132a0afa65078f16d189baca39187",
+ "1e92a7dd5fea29a666398e1df5775cbb5664fe6943fe4c1d2bba516b7543c84df584458e"
+ "53919c4ffab579a26fb3c892a5d1a77b0a07428c89350f8b559e627b014"},
+ {NID_secp521r1, NID_sha224,
+ "14c69f8d660f7a6b37b13a6d9788eff16311b67598ab8368039ea1d9146e54f55a83b3d1"
+ "3d7ac9652135933c68fafd993a582253be0deea282d86046c2fb6fd3a7b2c80874ced28d"
+ "8bed791bd4134c796bb7baf195bdd0dc6fa03fdb7f98755ca063fb1349e56fd0375cf947"
+ "74df4203b34495404ebb86f1c7875b85174c574c",
+ "13dabca37130ba278eae2b3d106b5407711b0d3b437fbf1c952f0773571570764d2c7cb8"
+ "896a8815f3f1975b21adc6697898e5c0a4242092fc1b80db819a4702df4",
+ "0400bc2aebf40cd435bc37d73c09d05f2fd71321111a767c2b0d446f90dd4a186839c694"
+ "ceb734e027e7ee948f0f63e4d3f1656d3d543df23c342a599306909b34710901f4c98ac0"
+ "3f0718e58d5d1762c920445b11dbdd60ec7f60095809204e14965a4ecb0be6fea06adbac"
+ "8ba431d6f144c75c199225df2a619a34be99897125b3a10af8",
+ "0401187c8b89945a1e48cda9ee52167789f4121e67482a7ac797899f5d3d2e623aed31e4"
+ "adae08a8d43e69028fa074d2650317cbc765f6ed191cf0317b4bae57881",
+ "1e572afed754016fba43fc33e352932c4db65efcb84e2bd159b40fc5925893b161effc40"
+ "240be28d8c07154d2615f605c6f0451b976522d95afd37f46602df7a12a",
+ "030370c1c5352c2b663ac1858b42f69545b2f58ed5b2c007f303726977d3c756b5d644ec"
+ "6788f94c886f78269aa190a3d8d1ae10e4fd24d937c4556fb9e1953fd6d"},
+ {NID_secp521r1, NID_sha224,
+ "8d8e75df200c177dbfe61be61567b82177ea5ec58e2781168d2277d2fd42668f01248ca3"
+ "eb29ffa2689b12ae40f9c429532b6d2e1f15891322b825a0a072a1c68fa09e78cfdef3e9"
+ "5ed6fdf7233a43cb68236560d49a3278f0b3f47cb08f475bd9ab2f60755ea4a1767de931"
+ "3b71a1b9ea87ef33f34682efbda263b0f8cc2f52",
+ "198681adbde7840d7ccd9cf1fb82056433fb4dd26bddf909af7b3b99da1ca2c05c8d4560"
+ "ecd80ba68f376f8b487897e374e99a9288ed7e3645cc0d00a478aae8d16",
+ "040057ce3777af7032f1f82308682e71fe09f88bf29dacd5018a725e1caa4b1e2bfdd894"
+ "fe618f9266f31ba089856dc9c1b70e4a2faa08b4b744d1aafcd5ae99e2c7360199bcfef2"
+ "021bc5890d7d39ec5dc0c26956801e84cae742cf6c50386eb289b6e97754dd25a94abf81"
+ "f1cb1b36935b5eb29f4b32a6516d2ff6a7d23064a0daec94b3",
+ "19d2d74ad8ee2d85048f386998a71899ef6c960b4ab324e5fd1c0a076c5a632fd0009500"
+ "076522e052c5c9806eef7056da48df6b16eb71cdf0f1838b0e21715fce0",
+ "18ecacbcffd5414bbb96728e5f2d4c90178e27733d13617e134ec788022db124374bbaa1"
+ "1e2c77fe3f38d1af6e998e1b0266b77380984c423e80ffa6ff2bcafd57a",
+ "1c727f34b6a378f3087721a54e9796499b597ecf6666b8f18312d67e1190a8a66e878efc"
+ "2367b551267494e0245979ef4deed6d2cbf2c3711af6d82ccfeb101a377"},
+ {NID_secp521r1, NID_sha224,
+ "10631c3d438870f311c905e569a58e56d20a2a560e857f0f9bac2bb7233ec40c79de1452"
+ "94da0937e6b5e5c34fff4e6270823e5c8553c07d4adf25f614845b2eac731c5773ebbd71"
+ "6ab45698d156d043859945de57473389954d223522fbafecf560b07ef9ba861bcc1df9a7"
+ "a89cdd6debf4cd9bf2cf28c193393569ccbd0398",
+ "08c4c0fd9696d86e99a6c1c32349a89a0b0c8384f2829d1281730d4e9af1df1ad5a0bcfc"
+ "cc6a03a703b210defd5d49a6fb82536f88b885776f0f7861c6fc010ef37",
+ "040164ac88ed9afe137f648dd89cdd9956682830cac5f7c1a06d19a1b19f82bb1d22dfee"
+ "fea30d35c11202fed93fd5ce64835d27c6564d6e181287fa04a2d20994986b005cb83669"
+ "265f5380ccefe6b4f85fdf0049e6703f6f378a0b2e52ed0fbbcf300afebb722f4ed48e38"
+ "19cb976c1d60e2ba05646b478f6dfecfbae730e9644c297f00",
+ "189801432cba9bf8c0763d43b6ec3b8636e62324587a4e27905b09a58e4aa66d07d096db"
+ "ce87824e837be1c243dd741f983c535a5dd2f077aac8beee9918258d3cb",
+ "0917723f7241e8dc7cd746b699ab621d068dd3a90e906aaf0a4862744b96fd4e5ccdb9c7"
+ "796c27f7196e693d06ec209464c3ea60ad6313e9b77cceaa14767e6651c",
+ "0957b0ecdc3668f6efa5d0957615bcfffd6419c5e57579b74f960f65ae3fb9e8284322ff"
+ "710b066f7e0959ac926d3cf9a594bdb70bbec756c96910b26a2486dee9e"},
+ {NID_secp521r1, NID_sha224,
+ "80aad6d696cbe654faa0d0a24d2f50d46e4f00a1b488ea1a98ed06c44d1d0c568beb4ab3"
+ "674fc2b1d2d3da1053f28940e89ba1244899e8515cabdd66e99a77df31e90d93e37a8a24"
+ "0e803a998209988fc829e239150da058a300489e33bf3dcdaf7d06069e74569fee77f4e3"
+ "875d0a713ccd2b7e9d7be62b34b6e375e84209ef",
+ "1466d14f8fbe25544b209c5e6a000b771ef107867e28ed489a42015119d1aa64bff51d6b"
+ "7a0ac88673bbc3618c917561cff4a41cdb7c2833dab5ebb9d0ddf2ca256",
+ "0401dc8b71d55700573a26af6698b92b66180cf43e153edadb720780321dbb4e71d28e0a"
+ "488e4201d207fc4848fe9dd10dcabec44492656a3ff7a665fe932445c82d0b01920b1633"
+ "1b7abeb3db883a31288ef66f80b7728b008b3cc33e03a68f68d9e653a86e3177bbc00014"
+ "fa5ea4c1608c0d455c2e2ac7bd8ab8519ebf19955edf1baf8d",
+ "160d04420e0d31b0df476f83393b1f9aff68389cc3299e42ef348d97646f7531a722b66d"
+ "dfb9501bbb5c4a41d84c78be7233b11489bceb817d23060e6017433fab8",
+ "08077aabd0a342f03f912007c586cfedfc63f93d1118f720d5b62b3ce141a60f86f111df"
+ "d8fc2e31a6778981f1a5e28f29a7369bd7897bb41240c8d3a9c170e0ee0",
+ "00abc75fc154b93840579457820957e89d1260fee0a4b9bb1946f61ca1e71afd76bb5e10"
+ "77b3e38ceb39d1fac5ef8b217c4110617b3ad118e02b3fcc2a39ef38613"},
+ {NID_secp521r1, NID_sha224,
+ "8a7792a2870d2dd341cd9c4a2a9ec2da753dcb0f692b70b64cef2e22071389c70b3b188d"
+ "ea5f409fb435cbd09082f59de6bc2ff9e65f91b7acc51e6e7f8e513148cb3c7c4664f227"
+ "d5c704626b0fda447aa87b9d47cd99789b88628eb642ed250312de5ba6b25f3d5342a3cb"
+ "b7ebd69b0044ee2b4c9ba5e3f5195afb6bea823d",
+ "01a99fcf54c9b85010f20dc4e48199266c70767e18b2c618044542cd0e23733817776a1a"
+ "45dbd74a8e8244a313d96c779f723013cd88886cb7a08ef7ee8fdd862e7",
+ "0401912d33b01d51e2f777bdbd1ada23f2b1a9faf2be2f2a3b152547db9b149b697dd718"
+ "24ca96547462e347bc4ef9530e7466318c25338c7e04323b1ba5fd25ea716200bbe9b1e3"
+ "a84accd69b76b253f556c63e3f374e3de0d1f5e3600fc19215533b2e40d6b32c3af33314"
+ "d223ea2366a51d1a337af858f69326389276f91be5c466e649",
+ "14fafd60cb026f50c23481867772411bb426ec6b97054e025b35db74fe8ea8f74faa2d36"
+ "e7d40b4652d1f61794878510b49b7b4fe4349afccd24fc45fec2fd9e9e7",
+ "18b1df1b6d7030a23a154cacce4a2e3761cc6251ff8bf6c9f6c89d0a15123baef9b338ad"
+ "a59728349ce685c03109fcde512ed01a40afd2ca34e1bc02ecf2871d45c",
+ "0a399f9b9e21aeddf450429fec2dc5749e4a4c7e4f94cee736004dcc089c47635da22845"
+ "992cd076a4f0a01d2cc1b0af6e17b81a802361699b862157ad6cad8bd1d"},
+ {NID_secp521r1, NID_sha224,
+ "f971bcd396efb8392207b5ca72ac62649b47732fba8feaa8e84f7fb36b3edb5d7b5333fb"
+ "fa39a4f882cb42fe57cd1ace43d06aaad33d0603741a18bc261caa14f29ead389f7c2053"
+ "6d406e9d39c34079812ba26b39baedf5feb1ef1f79990496dd019c87e38c38c486ec1c25"
+ "1da2a8a9a57854b80fcd513285e8dee8c43a9890",
+ "1b6015d898611fbaf0b66a344fa18d1d488564352bf1c2da40f52cd997952f8ccb436b69"
+ "3851f9ccb69c519d8a033cf27035c27233324f10e9969a3b384e1c1dc73",
+ "040110c6177ceb44b0aec814063f297c0c890671220413dbd900e4f037a67d87583eaf4b"
+ "6a9a1d2092472c17641362313c6a96f19829bb982e76e3a993932b848c7a9700f6e566c4"
+ "e49b2ee70a900dc53295640f3a4a66732df80b29f497f4ae2fa61d0949f7f4b12556967b"
+ "b92201a4f5d1384d741120c95b617b99c47a61e11c93a482d6",
+ "1a88667b9bdfe72fb87a6999a59b8b139e18ef9273261549bc394d884db5aa64a0bc7c7d"
+ "38a8ef17333478d2119d826e2540560d65f52b9a6dc91be1340cfd8f8f8",
+ "015f73def52ea47ddb03e0a5d154999642202e06e6734ac930c1dc84756c67bbb1cca9f2"
+ "1f92d61bfdb2052c5dd2833349610f68139393d77250a7662ef7bd17cbe",
+ "155c744a729f83b27d1f325a91e63a0d564fe96ff91eaa1bad3bff17d2abffa065d14a1d"
+ "20a04dd993f6ed3260b60bcc6401e31f6bc75aaafe03e8c1a9cd14d2708"},
+ {NID_secp521r1, NID_sha224,
+ "ec0d468447222506b4ead04ea1a17e2aa96eeb3e5f066367975dbaea426104f2111c45e2"
+ "06752896e5fa7594d74ed184493598783cb8079e0e915b638d5c317fa978d9011b44a76b"
+ "28d752462adf305bde321431f7f34b017c9a35bae8786755a62e746480fa3524d398a6ff"
+ "5fdc6cec54c07221cce61e46fd0a1af932fa8a33",
+ "05e0d47bf37f83bcc9cd834245c42420b68751ac552f8a4aae8c24b6064ae3d33508ecd2"
+ "c17ec391558ec79c8440117ad80e5e22770dac7f2017b755255000c853c",
+ "0401a6effc96a7f23a44bf9988f64e5cfafdae23fa14e4bee530af35d7a4ddf6b80dcd0d"
+ "937be9dd2db3adcda2f5216fecbce867ee67e7e3773082f255156e31358c2f01e7760190"
+ "dfbe07ec2df87067597087de262c1e0a12355456faba91b2e7277050d73b924e14c0e93b"
+ "8457a8b3e1f4207ce6e754274f88ad75c000d1b2977edc9c1a",
+ "18afea9a6a408db1e7a7bb1437a3d276f231eacfc57678bfa229d78681cbe4e800e60653"
+ "32a3128db65d3aa446bb35b517dca26b02e106e1311881a95b0302d15e8",
+ "01c49b3c1d21f1678bdbe1ac12167e95e06617190bdee1a729c1c649210da19e2e210f66"
+ "89e1310513bfe2ac6c0f4ee5f324f344b31b18df341eaadb826d07adc9b",
+ "129d4931ba457443012f6ffecd002f2abc3a4b65a58fee8457917ebcf24b29a1d3055b7f"
+ "c62939a74ebb0c3582172ee7c3c75e0b2fa2367c6e04df63a7a91d593ad"},
+ {NID_secp521r1, NID_sha224,
+ "d891da97d2b612fa6483ee7870e0f10fc12a89f9e33d636f587f72e0049f5888782ccde3"
+ "ea737e2abca41492bac291e20de5b84157a43c5ea900aef761006a4471072ab6ae6d515f"
+ "fe227695d3ff2341355b8398f72a723ae947f9618237c4b6642a36974860b452c0c62026"
+ "88bc0814710cbbff4b8e0d1395e8671ae67ada01",
+ "1804ab8f90ff518b58019a0b30c9ed8e00326d42671b71b067e6f815ac6752fa35016bd3"
+ "3455ab51ad4550424034419db8314a91362c28e29a80fbd193670f56ace",
+ "0400a79529d23a832412825c3c2ad5f121c436af0f29990347ecfa586ce2e57fd3c7e062"
+ "4d8db1f099c53473dbc2578f85416ad2ac958a162051014fb96bf07f9e1d17017c0750f2"
+ "6df0c621d2d243c6c99f195f0086947b1bf0f43731555f5d677e2d4a082fb5fe8da87e15"
+ "92a5fa31777da3299cede5a6f756edf81c85b77853388bb3ab",
+ "042d7c36fec0415bc875deb0fab0c64548554062e618aee3aa6670ffd68ab579fe620d3a"
+ "9316357267fd3111c0ed567dca663acd94b646d2ba0771953cd9690ef42",
+ "0d01dfbef126febbdfa03ef43603fd73bc7d2296dce052216e965fed7bb8cbbc24142bfc"
+ "ddb60c2e0bef185833a225daa0c91a2d9665176d4ad9986da785f4bfcf0",
+ "16627e2614dbcd371693c10bbf579c90c31a46c8d88adf59912c0c529047b053a7c77151"
+ "42f64dcf5945dbc69ff5b706c4b0f5448d04dd1f0b5a4c3765148bf253d"},
+ {NID_secp521r1, NID_sha224,
+ "924e4afc979d1fd1ec8ab17e02b69964a1f025882611d9ba57c772175926944e42c68422"
+ "d15f9326285538a348f9301e593e02c35a9817b160c05e21003d202473db69df695191be"
+ "22db05615561951867f8425f88c29ba8997a41a2f96b5cee791307369671543373ea91d5"
+ "ed9d6a34794d33305db8975b061864e6b0fe775f",
+ "0159bff3a4e42b133e20148950452d99681de6649a56b904ee3358d6dd01fb6c76ea0534"
+ "5cb9ea216e5f5db9ecec201880bdff0ed02ac28a6891c164036c538b8a8",
+ "04012d7f260e570cf548743d0557077139d65245c7b854ca58c85920ac2b290f2abfeccd"
+ "3bb4217ee4a29b92513ddce3b5cbf7488fb65180bb74aeb7575f8682337ef50175601862"
+ "30c7e8bff0bffce1272afcd37534f317b453b40716436a44e4731a3ec90a8f17c53357bc"
+ "54e6ff22fc5b4ca892321aa7891252d140ece88e25258b63d5",
+ "14b8a30f988cefdc0edec59537264edb0b697d8c4f9e8507cf72bc01c761304bd2019da1"
+ "d67e577b84c1c43dd034b7569f16635a771542b0399737025b8d817e1c3",
+ "0fc50939ebca4f4daa83e7eaf6907cb08f330c01d6ea497b86becda43dfcad47cb5c48f5"
+ "eb2cc924228628070bcd144088c449a7873242ba86badf796097dbecd6d",
+ "0ccb6463c4301ba5c043e47ed508d57dd908fd0d533af89fd3b11e76343a1cf2954ce90b"
+ "0eb18cbc36acd6d76b3906612d8a0feec6ebed13d88650ed9c708b28a11"},
+ {NID_secp521r1, NID_sha224,
+ "c64319c8aa1c1ae676630045ae488aedebca19d753704182c4bf3b306b75db98e9be4382"
+ "34233c2f14e3b97c2f55236950629885ac1e0bd015db0f912913ffb6f1361c4cc25c3cd4"
+ "34583b0f7a5a9e1a549aa523614268037973b65eb59c0c16a19a49bfaa13d507b29d5c7a"
+ "146cd8da2917665100ac9de2d75fa48cb708ac79",
+ "17418dfc0fc3d38f02aa06b7df6afa9e0d08540fc40da2b459c727cff052eb0827bdb3d5"
+ "3f61eb3033eb083c224086e48e3eea7e85e31428ffe517328e253f166ad",
+ "04000188366b9419a900ab0ed9633426d51e25e8dc03f4f0e7549904243981ec469c8d6d"
+ "938f6714ee620e63bb0ec536376a73d24d40e58ad9eb44d1e6063f2eb4c51d009889b920"
+ "3d52b9243fd515294a674afd6b81df4637ffdddc43a7414741eda78d8aa862c9cbbb618a"
+ "cec55bb9a29aac59616fc804a52a97a9fc4d03254f4469effe",
+ "1211c8824dcbfa0e1e15a04779c9068aed2431daeac298260795e6a80401f11f6d52d36b"
+ "cee3cfa36627989c49d11475163aa201d2cd4c5394144a6bb500bbaf02b",
+ "1d59401b8ac438855d545a699991142685077a409de2418c7ccfe01a4771b3870e76287a"
+ "9654c209b58a12b0f51e8dc568e33140a6b630324f7ef17caa64bf4c139",
+ "143af360b7971095b3b50679a13cd49217189eaee4713f4201720175216573c68f7ac6f6"
+ "88bfe6eb940a2d971809bf36c0a77decc553b025ed41935a3898685183b"},
+ {NID_secp521r1, NID_sha256,
+ "8ab8176b16278db54f84328ae0b75ef8f0cd18afdf40c04ad0927ed0f6d9e47470396c8e"
+ "87cde7a9be2ffbfe6c9658c88b7de4d582111119c433b2e4a504493f0a1166e3a3ea0d7b"
+ "93358f4a297d63f65a5e752f94e2ee7f49ebcc742fa3eb03a617d00c574245b77a200338"
+ "54d82964b2949e2247637239ab00baf4d170d97c",
+ "1e8c05996b85e6f3f875712a09c1b40672b5e7a78d5852de01585c5fb990bf3812c32455"
+ "34a714389ae9014d677a449efd658254e610da8e6cad33414b9d33e0d7a",
+ "04007d042ca19408524e68b981f1419351e3b84736c77fe58fee7d11317df2e850d960c7"
+ "dd10d10ba714c8a609d163502b79d682e8bbecd4f52591d2748533e45a867a0197ac6416"
+ "111ccf987d290459ebc8ad9ec56e49059c992155539a36a626631f4a2d89164b985154f2"
+ "dddc0281ee5b5178271f3a76a0914c3fcd1f97be8e8376efb3",
+ "0dc8daaacddb8fd2ff5c34a5ce183a42261ad3c64dbfc095e58924364dc47ea1c05e2599"
+ "aae917c2c95f47d6bb37da008af9f55730ddbe4d8ded24f9e8daa46db6a",
+ "09dd1f2a716843eedec7a6645ac834d4336e7b18e35701f06cae9d6b290d41491424735f"
+ "3b57e829ad5de055eaeef1778f051c1ee152bf2131a081e53df2a567a8a",
+ "02148e8428d70a72bc9fa986c38c2c97deda0420f222f9dc99d32c0acba699dc7ba0a2b7"
+ "9ce5999ff61bd0b233c744a893bc105bca5c235423e531612da65d72e62"},
+ {NID_secp521r1, NID_sha256,
+ "c4bc2cec829036469e55acdd277745034e4e3cc4fcd2f50ec8bd89055c19795a1e051ccf"
+ "9aa178e12f9beab6a016a7257e391faa536eaa5c969396d4e1ade36795a82ebc709d9422"
+ "de8497e5b68e7292538d4ccdc6dd66d27a3ece6a2844962b77db073df9489c9710585ba0"
+ "3d53fa430dbc6626dc03b61d53fc180b9af5dea6",
+ "0b65bf33b2f27d52cbfabcadce741e691bf4762089afd37964de1a0deda98331bf8c7402"
+ "0a14b52d44d26e2f6fa7bcddbe83be7db17a0c8a1b376469cf92c6da27c",
+ "04010038bb9a7aea626de68c14c64243150e72c69e2f8a1ab922bfbdaa6f33d24fb4542c"
+ "0324357b0dd640bbcd07632ecd253f64ca2bfbfbf3de9b24fffd0568ab82da00faf867d9"
+ "5308cc36d6f46844a0f535dc70f9768eed011a2464d2f308fa1d8e72c3616aec7e705169"
+ "08183ffce7fdd36984a15f73efaa3858c2edf16a784d40e6c2",
+ "14aeb96c57d99677a1f5e4588064215e7e9af4027bfb8f31ff6126dbf341b8e6f719465e"
+ "4273e91ba32670feca802549808322b7ee108bb20653cf20f93284d365f",
+ "075ead62edf7d86c5d1bc2443d1aeb5dc034fd999e6ea012cef7499d9d050cd97d262095"
+ "884e9fc89a42e15bd3dee80fe3c1ba10f4caabc4aabb86347023028b663",
+ "129a992a6ff66d41948d11fa680f732b1a74315b804c982805190ed9d2fae223f2b14998"
+ "0b9241998cdea0c5672595a8a49d5186a0ef7a46c0a376f925bdda81726"},
+ {NID_secp521r1, NID_sha256,
+ "1c1b641d0511a0625a4b33e7639d7a057e27f3a7f818e67f593286c8a4c827bb1f3e4f39"
+ "9027e57f18a45403a310c785b50e5a03517c72b45ef8c242a57b162debf2e80c1cf6c7b9"
+ "0237aede5f4ab1fcaf8187be3beb524c223cc0ceff24429eb181a5eea364a748c7132148"
+ "80d976c2cd497fd65ab3854ad0d6c2c1913d3a06",
+ "02c4e660609e99becd61c14d043e8b419a663010cc1d8f9469897d7d0a4f076a619a7214"
+ "a2a9d07957b028f7d8539ba7430d0b9a7de08beeeae8452d7bb0eac669d",
+ "0400fb3868238ca840dbb36ecc6cf04f5f773ea0ab8e8b0fdcf779dc4039a8d7146a4175"
+ "04e953c0cb5e7f4e599cc2c168deda8b7f16084b5582f89f2ece4cae5167f701f90b5c15"
+ "eeda48e747cf3ee8183166a49dbfac6161cbd09d29d40a6854f4c495e88a435892a920cd"
+ "aad20d41985890b648badd4f0a858ffcbd9afdfc23134ede18",
+ "1f875bbf882cd6dd034a87916c7b3ba54b41b2ea2ce84ebaf4e393fcf7291fee09dec2b5"
+ "bb8b6490997c9e62f077c34f0947fe14cec99b906dd6bf0b5d301e75ca1",
+ "07aa70425697736b298233249f5d0cf25c99e640c9ff88035ef1804820e1bfe7d043755f"
+ "02d7a079494f7fa6dc26740c4e6b7b430c63f29c67bbd3a5c88d2f0e8d1",
+ "0e0d42e4ff11cf5be37a9fda348514d5097a662f214687cbfb28ff42d635b13029871ca4"
+ "f464bb1fbce02d5da4d5fb61b2a071844259fc863d136197bec3a61e7c7"},
+ {NID_secp521r1, NID_sha256,
+ "adb5f069b2b501a3ebb83d4f1808eb07710ac4a7b12532996855a20bcc54b2f76812915f"
+ "632163c3654ff13d187d007152617cf859200194b59c5e81fc6cc9eb1ceb75d654050f26"
+ "0caa79c265254089270ccd02607fdcf3246119738c496dc3a4bd5d3be15789fc3d29a08d"
+ "6d921febe2f40aef286d5d4330b07198c7f4588e",
+ "17c3522007a90357ff0bda7d3a36e66df88ca9721fb80e8f63f50255d47ee819068d018f"
+ "14c6dd7c6ad176f69a4500e6f63caf5cf780531004f85009c69b9c1230c",
+ "04013a4bea0eed80c66ea973a9d3d4a90b6abbb5dee57d8affaf93390a8783a20982eba6"
+ "44d2e2809f66530adeeee7f9a1da7515447e9ba118999f76f170c375f621f7012f9dfaee"
+ "40a75d8442b39b37a5c19ea124b464236e9b9a31bae6780cfd50f7ea4a700154b5ea0fee"
+ "b64e9b35a1b0e33e46900cca1f34d13bb17e5017769841af27",
+ "18388a49caeda35859ef02702c1fd45ff26991998bd9d5e189c12c36cdae3f642ddd4a79"
+ "561bd1d3e1cd9359de8f5c9e1604a312d207a27b08a6033f2741794ced5",
+ "15c6264795837dfea19f91876455f564f073c5c84a3c9d76e67872ae0447ba0d4850d872"
+ "1302b25bec7ebfedd2721de140b2f3dead547042b24b0876117e7093cc1",
+ "060eb74236c189a28ed20bd0822eb22d75f7d97c9043a3c8e3f6d4c90bc8ca02ac4d37c1"
+ "171c799a1c7dfd2fcbf83406b5e48c051e0fbf0fd937bfe6c3db4e18154"},
+ {NID_secp521r1, NID_sha256,
+ "f253484d121d1ce8a88def6a3e9e78c47f4025ead6f73285bf90647102645b0c32d4d867"
+ "42a50b8b7a42d5f6156a6faf588212b7dc72c3ffd13973bdba732b554d8bffc57d04f816"
+ "7aef21ee941ee6ffb6cce0f49445bd707da8deb35dca650aaf761c3aa66a5ebccddd15ae"
+ "e21293f63061a7f4bfc3787c2cd62c806a1a9985",
+ "0c4dad55871d3bd65b016d143ddd7a195cc868b3048c8bbcb1435622036bdb5e0dec7178"
+ "ca0138c610238e0365968f6ddd191bbfacc91948088044d9966f652ff25",
+ "040014858a3b9bd426b678fdcf93fc53d17e7a9e8fe022442aaaba65399d12fd3a6a3819"
+ "58fb0f07ac6088f4e490506ec0f1ab4d0dbd461126f7eb46ff69cfa8bd88af018c18ce29"
+ "ecc6d79d26a2de0cd31c4b32e84b5e90f6ba748f86c5afbd89618aceb9079460cbd1a826"
+ "1ed5476973e61bf1d17ea78b022387443800c9247d21dde550",
+ "05577108f4187a173e5c29e927a8fc8f5ffd37e184254a6e381ff1018955aec91a35f300"
+ "85e8cee6a7555c10f9efdce26d62f2b4b52dfdbaeafc3a30983e2d50d5b",
+ "0344375ae7c804cbe32ced7a20976efae5d9c19eb88b6e24514d1d0cfb728b0f4601098b"
+ "18b2e98f42b5222dd5237d4d87767007bf5acb185c5526d72047e2cb1a1",
+ "02de4cfa908c73c1102d6fb7062baf54a056a9517701e036c9c51e09899d60051612d593"
+ "48945f845dffebec5aa395b2fac7229929033615788777306ccad96d0a3"},
+ {NID_secp521r1, NID_sha256,
+ "33bab1c369c495db1610965bc0b0546a216e8dd00cd0e602a605d40bc8812bbf1ffa6714"
+ "3f896c436b8f7cf0bed308054f1e1ff77f4d0a13c1e831efbd0e2fcfb3eadab9f755f070"
+ "ba9aeaceb0a5110f2f8b0c1f7b1aa96a7f2d038a1b72e26400819b1f73d925ea4e34d6ac"
+ "af59d0a461a34ce5d65c9c937a80e844e323a16d",
+ "03d4749fadcc2008f098de70545a669133c548ce0e32eec1276ff531bcff535331445557"
+ "28ad8906d17f091cc0514571691107350b6561858e90dbe19633aaf31bf",
+ "04010fe5986b65f6e65d13c88c4d2aed781a91026904f82129d46779bdadaf6b733c845a"
+ "934e941ab4a285efdea9c96ecc9dc784d87e4d937b42c337b3a9cb111a96000077853768"
+ "a2a4d6f596f57414e57ec60b76d3cd5ece8351cd1f335ebcb8801a3d91fb82c65caaeb5c"
+ "31eea9918367bb5906863ff3ccaf7a6cee415e0d75c15ac2e0",
+ "1fbb4de337b09e935a6dc6215ffcfcb85d236cc490585e73251a8b8bac37cfa36c5d1df5"
+ "f4536d33659be1e7a442529a783452f7efda74a4f661b6a127f9248aaf7",
+ "09d8f10eeff6178594c89d6e8184f9502117384813243ddf9ccf3c8eac5dc6502c472dfc"
+ "1487a5caffc569f7dedd14a8ebcb310e9bacdb79fb6655aba026cdf87f2",
+ "0f74236c7915d638708d17c9f10e39dda358faf9bbb821d8dcda0d151aac143bfb165ad0"
+ "a23a65cd3de532e32cad928728f5ae1c16f58fc16577f3ca8e36f9e708b"},
+ {NID_secp521r1, NID_sha256,
+ "08c8b7faaac8e1154042d162dca1df0f66e0001b3c5ecf49b6a4334ce4e8a754a1a8e4da"
+ "f8ec09cf1e521c96547aed5172ef852e82c03cddd851a9f992183ac5199594f288dbcc53"
+ "a9bb6128561ff3236a7b4b0dce8eaf7d45e64e782955ee1b690ce6a73ece47dc4409b690"
+ "de6b7928cbe60c42fc6a5ddf1d729faf1cc3885e",
+ "096a77b591bba65023ba92f8a51029725b555caf6eff129879d28f6400e760439d6e69ce"
+ "662f6f1aecf3869f7b6057b530a3c6ff8ed9e86d5944f583ee0b3fbb570",
+ "0400fdf6aed933dba73913142ef8bdcd4b760db8500831cd11d7707ab852a6372c05d112"
+ "a1e7fbc7b514c42142c7370d9f4129493cd75cc6f2daf83747078f15229db600ef91dffb"
+ "3c43080a59534b95ca585ee87f6145f6a0199b2b82c89f456d8bd8e6ac71c78039c08177"
+ "184484eb2ebd372f189db3a58fab961a75a18afec1ee32764a",
+ "13aa7b0471317a2a139c2f90df1c40d75e5a8a830fbaf87030fffdb2ef6f2c93d1310c9e"
+ "d7fe9d7bcd4fe46537ff2495bc9c4f0aaff11461f5e4bebbfbce9a8740a",
+ "1c7a21800962c91d4651553633b18612d931bb88bff8b743ed595b4e869437e50f8e84fb"
+ "f334c99061db123a1c40b73b07e203790561a37df65a660355ba2017d78",
+ "1301e1782559a38f1ca0eebe9bed0f5c7c33103d506a24f8a688f500ee1fe37f97b66853"
+ "19279e82e6fe43cfd823ccbc123309974cffa76c4f8d41ec02a3cbc45f1"},
+ {NID_secp521r1, NID_sha256,
+ "ba74eed74282811631bd2069e862381e4e2a1e4e9a357b1c159a9ce69786f864b60fe90e"
+ "eb32d8b72b099986fc594965a33285f7185b415df58fead7b8b50fc60d073680881d7435"
+ "609ad1d22fd21e789b6730e232b0d2e888889fb82d6ad0337ab909308676164d4f47df44"
+ "b21190eca8ba0f94995e60ad9bb02938461eee61",
+ "015152382bfd4f7932a8668026e705e9e73daa8bade21e80ea62cf91bd2448ebc4487b50"
+ "8ca2bdaaf072e3706ba87252d64761c6885a65dcafa64c5573c224ae9e6",
+ "04000b8c7c0186a77dc6e9addd2018188a6a40c3e2ba396f30bbd9293dba2841d57d6086"
+ "6b37f587432719b544d8bf7eb06d90a8c0dc9c93b0c53d53b2f667077228ca01dd2e5c73"
+ "ab908ae34f701689f1cd3cf5186d3a2bc941e208bf3ef970e5e429ee9b154d73286b2e5d"
+ "a423e75b7c7b78c7bdf915da92279db43265a0cdefca51f86a",
+ "0d03506999f5cc9ec3304072984a20a9c64a22ad9b418495ca904f4bbddc96e76d34672c"
+ "b52763339d3f3bc5b1701c00a675b972797e3a086314da1a8d338436566",
+ "085406c0ff5ec91f598bb579ad8714ad718c3e133d5dcc2e67c5d2339c146b69919cac07"
+ "f3bc2bda218f4c7c8be04855e2ca6fff7fbdc4fc0fda87c8c3081cad4f5",
+ "1b45f2066e583636215ae135afc202b8bf3f301eccff2e1c0198b9aeddf695fa8179488e"
+ "7b622fc307f601e2f6551815117cc836bb09ef888f8e64a45d9c84ad30c"},
+ {NID_secp521r1, NID_sha256,
+ "dc71f171a28bdc30968c39f08f999b88dc04c550e261ecf1124d67f05edeae7e87fe9b81"
+ "35a96fe2bc3996a4f47213d9d191184a76bd6310e1ee5cb67ea7fc3ef6f641a0ba165198"
+ "040fa668192b75a4754fc02c224bd4a74aade5a8c814adf151c2bfeda65165a04ef359e3"
+ "9847c84e312afb66d4cd1db50d41ef3fe5f31296",
+ "1750ff0ca0c166560b2034bc5760fe0b3915340bc43216e9de0c1d4a76550e8b2036e8b8"
+ "74230f8d29354aed43e183610f24fd4abd4b0be2f111dae942bd7a121f7",
+ "0401b4b8947192a7c0166c0e0b2791e217370836283e805f3ee11cfb78445aba3c5bc39f"
+ "e594e01916617ad59e7c8e740d8f2d07d88905d3f33bd5e51aafd4943c5dc601175d1172"
+ "32836c28e717ce2a55e59f4ec550effde30d18e3d99e42c6aa2283c7b3e7f2f6ff1fca60"
+ "5dde78c3a5bffa689347b4c93f51ba59a1787bb7d5e43861dc",
+ "023645023d6bdf20652cdce1185c4ef225c66d54f18632d99ccf743bf554d04c214c88ce"
+ "52a4f71ec75c899ad1b3c07c34112ca20b55c217ff1d72c9528e2774ce8",
+ "1e933f68ce0f8403cb16822b8e0564b1d39a35f27b53e4ae0bcdff3e051759464afbc349"
+ "98ba7c8a7ee34ef6c1aaa722cffe48356fd0b738058358d4c768b3186c1",
+ "0a67368a305508ce6d25d29c84f552a4a513998990fef4936244f891a2909c30d5fdc9e8"
+ "a267ecbf3c597138f4a08f7e92bee57d5420eadd700fee864bf78b2614b"},
+ {NID_secp521r1, NID_sha256,
+ "b895788d7828aaeace4f6b61a072ffa344d8ea324962ba6dab5efda93f65bf64a0f2ac6d"
+ "5721d03ee70e2aef21cdba69fd29040199160e3a293b772ffb961ed694a8dc82800dab79"
+ "367a4809a864e4aff6bc837aaa868e952b771b76591c0bb82249034e3208e593d85973d3"
+ "fea753a95b16e221b2561644535c0131fe834ae7",
+ "023048bc16e00e58c4a4c7cc62ee80ea57f745bda35715510ed0fc29f62359ff60b0cf85"
+ "b673383b87a6e1a792d93ab8549281515850fa24d6a2d93a20a2fff3d6e",
+ "0400ba3dc98326a15999351a2ec6c59e221d7d9e7ee7152a6f71686c9797f3f330d31501"
+ "23620d547813ba9d7cc6c6d35cc9a087d07dff780e4821e74ad05f3762efd6018b051af9"
+ "824b5f614d23ecadd591e38edbfe910ad6cbebc3e8a6bec11ea90691c17deb3bc5f34a4a"
+ "3acd90b7b10f521f6ee7b3cfbfdc03b72d5a8783a4a77c3e4c",
+ "06099d2667f06c58798757632d07d8b3efbe9c1323efb0c244be6b12b3b163ba1b7cf524"
+ "6c98dcc0771665a66696d687af5f28ed664fd87d5093df6427523d4db84",
+ "10dc80ea853064a2ba5a781f108aca3785c5ec0aa45aa05ba31d4de671170797589e863d"
+ "54a3a986aadf6f670277f50355713dfb27d4ec7e348f787910b3cd668cd",
+ "018572bfad4f62e3694d1f2e6ffd432faed2e2b9d7e3611a07138212f1e79e6c394839f7"
+ "cfae96bc368422630016fb9346681eadc5f9699e7331c3b5fde6d65e4c6"},
+ {NID_secp521r1, NID_sha256,
+ "2c5bd848c476e34b427cfe5676692e588e1957957db7b5704492bd02104a38216535607f"
+ "5d092dc40020130c04a3aaf0f1c52409834926d69a05d3f3188187a71d402a10ba34eac8"
+ "629b4c6359b1095f30f710219298bf06b9f19bfc299981d7e251ca232a0a85338a7e0246"
+ "4731d1b25d4a1f68baf97064516590644820c998",
+ "02b8b866ce4503bb40ffc2c3c990465c72473f901d6ebe6a119ca49fcec8221b3b4fa7ec"
+ "4e8e9a10dbd90c739065ad6a3a0dd98d1d6f6dcb0720f25a99357a40938",
+ "0401b8c7a169d5455f16bfe5df1ba5d6ec9c76e4bad9968d4f5f96be5878a7b6f71d74bf"
+ "ac0076dd278bc4630629f3294646f17d6b6c712b0087e2c4d576039cfdc8b9018faffd54"
+ "22dfd1b61432fa77b9a288b2b7d546656c0dcca3032179e6f45ee3cf61d6a447fc51731c"
+ "b54457343a41569fcf78cef42895f4da5efcb14ea1fc065f8d",
+ "0ac89e813f94042292aa1e77c73773c85cf881a9343b3f50711f13fa17b50f4e5cb04ac5"
+ "f6fc3106a6ef4c9732016c4e08e301eefac19199459129a41a7589e0628",
+ "05bc7a253a028ee8b7253979b8d689d41d8df6fae7736341f22e28b6faf0cbbdebbd2ef4"
+ "d73e56d2021af2c646dc15539a7c1e1c4dc9c7674808bd7968d8a66f947",
+ "0fd71575837a43a4cf1c47d0485cfd503c2cf36ebcea0fdef946ad29acb7fb2e7c6daf6b"
+ "4eb741eb211081aed6207d02569f1518988f275ad94c7fd4735cb18a92e"},
+ {NID_secp521r1, NID_sha256,
+ "65a0b97048067a0c9040acbb5d7f6e2e6ac462e1e0064a8ce5b5bbf8e57059e25a3ef8c8"
+ "0fc9037ae08f63e63f5bdb9378c322ad9b2daf839fad7a75b1027abb6f70f110247da7e9"
+ "71c7c52914e5a4f7761854432fa16b2a521e7bcaee2c735a87cad20c535bf6d04a87340c"
+ "229bf9af8647eedca9e2dc0b5aa90f7fea3cdc0a",
+ "0a43b32ad7327ec92c0a67279f417c8ada6f40d6282fe79d6dc23b8702147a31162e6462"
+ "91e8df460d39d7cdbdd7b2e7c6c89509b7ed3071b68d4a518ba48e63662",
+ "040172fb25a3e22c2a88975d7a814f3e02d5bb74cfb0aaa082c5af580019b429fddd8c7f"
+ "9e09b6938f62e8c31019b25571aaceef3c0d479079db9a9b533ee8e1670abd00ff551622"
+ "3b6cc7c711705f15b91db559014e96d3839249c5c849f2aced228a8998177a1e91177abb"
+ "b24b57a8ea84d944e0c95da860ae0925f1b40c0e1b7c9e0a46",
+ "0383eda042e06c0297fbd279a2ad40559c5c12ad458f73458eebcc92b308d3c4fcec20a5"
+ "b59f698e16fa6ea02dba8661b6955f67c052f67b0a56460869f24cfdf7d",
+ "1b9c35356b9d068f33aa22a61370dae44a6cb030497a34fb52af23c6b684677370268f06"
+ "bb4433be6795a71de570088aec17ce0c9933d2f76c7edce7f406f62fedd",
+ "06f07ea453cfa20ad604ba855332f62834657b0b795684d50c1562a675456e37f4dae45f"
+ "0df47d8e27e47bc9ce9c9cbba1554c5b94b0b17401b73c8d0c0902c6cc4"},
+ {NID_secp521r1, NID_sha256,
+ "d6e366a87808eea5d39fe77cac4b8c754e865a796062e2ec89f72165cd41fe04c4814806"
+ "8c570e0d29afe9011e7e7a2461f4d9897d8c1fa14b4ff88cab40059d17ab724f4039244e"
+ "97fcecb07f9ffeec2fb9d6b1896700fe374104a8c44af01a10e93b268d25367bf2bef488"
+ "b8abcc1ef0e14c3e6e1621b2d58753f21e28b86f",
+ "03c08fdccb089faee91dac3f56f556654a153cebb32f238488d925afd4c7027707118a37"
+ "2f2a2db132516e12ec25f1664953f123ac2ac8f12e0dcbbb61ff40fb721",
+ "040193301fc0791996ca29e2350723bd9aa0991ddbb4a78348ee72bdcd9ed63ce110ba34"
+ "96f2ce0331b5c00d4d674c1b70114e17ce44a73c3e16bab14ed1ee924202e400aea9b288"
+ "cfb2933ec0a40efa8e2108774e09b3863b3193d0dac6cc16ccaa5bd5f9ce133aec5cd3b6"
+ "2cbaeec04703e4b61b19572705db38cfaa1907c3d7c785b0cd",
+ "0d0e90d5ee7b5036655ad5c8f6a112c4b21c9449ca91c5c78421e364a2160bbac4428303"
+ "657bc11ea69f59fb0fe85a41b8f155a362343094456fd2a39f2a79e4804",
+ "1a8c23a2965d365a4c2ffd0802ae8b3a69c6b84a1ba77fd8a5f2f61e8ec3a1dcb336f136"
+ "e2a997252eaa94caf9b5ad6c9ecff5bf33abf547ca84985bb89908a11d7",
+ "1cc42a2dd97aa42b9df5ea430e0d4cb13106dd6da6e8c9315c96ed7b052db365bbde6960"
+ "c9a965954a4398c18ea7db9593bbfc3c3b6b3466ff806fccac3de6424ab"},
+ {NID_secp521r1, NID_sha256,
+ "f99e1d272d0f5fb9c4f986e873d070ec638422bc04b47c715595e2cf1a701cdf88bc6c4b"
+ "20085b357bad12ccba67cac8a5ca07f31ba432f9154ff1fadefd487a83a9c37e49fb70a2"
+ "f170e58889cab0552e0a3806ccfa2a60d96e346851d84b7de6d1a4b8cf37567dc161a84f"
+ "13421e3412457d4bc27f6213453c8519a2d7daa2",
+ "0969b515f356f8bb605ee131e80e8831e340902f3c6257270f7dedb2ba9d876a2ae55b4a"
+ "17f5d9acd46c1b26366c7e4e4e90a0ee5cff69ed9b278e5b1156a435f7e",
+ "0400fc7ae62b05ed6c34077cbcbb869629528a1656e2e6d403884e79a21f5f612e91fc83"
+ "c3a8ac1478d58852f0e8ba120d5855983afd1a719949afa8a21aec407516c300aa705da6"
+ "459a90eaa2c057f2e6614fb72fc730d6fdebe70e968c93dbc9858534768ea2666553cd01"
+ "db132331441823950a17e8d2345a3cab039c22b21bfe7bd3b9",
+ "19029260f88e19360b70c11107a92f06faa64524cfbd9f70fecf02bd5a94f390582a7f4c"
+ "92c5313bb91dc881596768d86f75a0d6f452094adbe11d6643d1a0b2135",
+ "07f2158e9b9fa995199608263969498923cf918fdc736427c72ce27ce4a3540dce2e8e5e"
+ "63a8fc7ba46f7fa42480efbf79c6ed39521f6e6ec056079e453e80a89d9",
+ "08e349eed6f1e28b0dbf0a8aeb1d67e59a95b54a699f083db885f50d702f3c6a4069591a"
+ "faa5b80b3c75efb1674ebd32c7ead0040d115945f9a52ee3a51806cad45"},
+ {NID_secp521r1, NID_sha256,
+ "91f1ca8ce6681f4e1f117b918ae787a888798a9df3afc9d0e922f51cdd6e7f7e55da996f"
+ "7e3615f1d41e4292479859a44fa18a5a006662610f1aaa2884f843c2e73d441753e0ead5"
+ "1dffc366250616c706f07128940dd6312ff3eda6f0e2b4e441b3d74c592b97d9cd910f97"
+ "9d7f39767b379e7f36a7519f2a4a251ef5e8aae1",
+ "013be0bf0cb060dbba02e90e43c6ba6022f201de35160192d33574a67f3f79df969d3ae8"
+ "7850071aac346b5f386fc645ed1977bea2e8446e0c5890784e369124418",
+ "040167d8b8308259c730931db828a5f69697ec0773a79bdedbaaf15114a4937011c5ae36"
+ "ab0503957373fee6b1c4650f91a3b0c92c2d604a3559dd2e856a9a84f551d9019d2c1346"
+ "aadaa3090b5981f5353243300a4ff0ab961c4ee530f4133fe85e6aab5bad42e747eee029"
+ "8c2b8051c8be7049109ad3e1b572dda1cac4a03010f99f206e",
+ "1a363a344996aac9a3ac040066a65856edfb36f10bb687d4821a2e0299b329c6b60e3547"
+ "dde03bdbd1afa98b0b75d79cf5aac0ef7a3116266cadf3dfbd46f8a4bfc",
+ "1ff097485faf32ce9e0c557ee064587c12c4834e7f0988cf181d07ba9ee15ae85a8208b6"
+ "1850080fc4bbedbd82536181d43973459f0d696ac5e6b8f2330b179d180",
+ "0306dc3c382af13c99d44db7a84ed813c8719c6ed3bbe751ead0d487b5a4aa018129862b"
+ "7d282cce0bc2059a56d7722f4b226f9deb85da12d5b40648bf6ec568128"},
+ {NID_secp521r1, NID_sha384,
+ "dbc094402c5b559d53168c6f0c550d827499c6fb2186ae2db15b89b4e6f46220386d6f01"
+ "bebde91b6ceb3ec7b4696e2cbfd14894dd0b7d656d23396ce920044f9ca514bf115cf98e"
+ "caa55b950a9e49365c2f3a05be5020e93db92c37437513044973e792af814d0ffad2c8ec"
+ "c89ae4b35ccb19318f0b988a7d33ec5a4fe85dfe",
+ "095976d387d814e68aeb09abecdbf4228db7232cd3229569ade537f33e07ed0da0abdee8"
+ "4ab057c9a00049f45250e2719d1ecaccf91c0e6fcdd4016b75bdd98a950",
+ "04013b4ab7bc1ddf7fd74ca6f75ac560c94169f435361e74eba1f8e759ac70ab3af138d8"
+ "807aca3d8e73b5c2eb787f6dcca2718122bd94f08943a686b115d869d3f40600f293c1d6"
+ "27b44e7954d0546270665888144a94d437679d074787959d0d944d8223b9d4b5d068b4fb"
+ "bd1176a004b476810475cd2a200b83eccd226d08b444a71e71",
+ "0a8d90686bd1104627836afe698effe22c51aa3b651737a940f2b0f9cd72c594575e550a"
+ "db142e467a3f631f4429514df8296d8f5144df86faa9e3a8f13939ad5b3",
+ "02128f77df66d16a604ffcd1a515e039d49bf6b91a215b814b2a1c88d32039521fbd142f"
+ "717817b838450229025670d99c1fd5ab18bd965f093cae7accff0675aae",
+ "008dc65a243700a84619dce14e44ea8557e36631db1a55de15865497dbfd66e76a7471f7"
+ "8e510c04e613ced332aa563432a1017da8b81c146059ccc7930153103a6"},
+ {NID_secp521r1, NID_sha384,
+ "114187efd1f6d6c46473fed0c1922987c79be2144439c6f61183caf2045bfb419f8cddc8"
+ "2267d14540624975f27232117729ccfeacccc7ecd5b71473c69d128152931865a60e6a10"
+ "4b67afe5ed443bdbcdc45372f1a85012bbc4614d4c0c534aacd9ab78664dda9b1f1e2558"
+ "78e8ac59e23c56a686f567e4b15c66f0e7c0931e",
+ "04ceb9896da32f2df630580de979515d698fbf1dd96bea889b98fc0efd0751ed35e6bcf7"
+ "5bc5d99172b0960ffd3d8b683fbffd4174b379fbdecd7b138bb9025574b",
+ "0400e7a3d30d5bd443549d50e9b297aaa87bc80b5c9e94169602d9d43d6d0c490c0bed8c"
+ "c2170288b106bdbf4c9f1ce53fd699af0b4c64b494b08520e57dc01ab9a8b001d81056d3"
+ "7aec8a75d588f6d05977416e6f24ad0117a7f4450036d695612e7bc2771caed80e580314"
+ "eebc88c8fc51c453f066e752481f212b57165d67f8a44f375a",
+ "046639c5a3ec15afae5e4a7a418ac760846512d880c359bc2c751b199ce43b10887e861b"
+ "14127809754dbea47f6cc0140d2817e3f5b9a80ce01abd81f81b748433a",
+ "0f913de91e19bd8f943d542ae357bacc942a0967abc9be6c06239a379db8cc733fa50013"
+ "e0b0f088bce9d630262feaa33b30d84f91bcf5ce9976e4e740fcb112f84",
+ "08a73a5c9c24235e0d9cecaac653f68ce5a6fb186ce67fa058d6ddbbd4d0a8c4d194e571"
+ "148e8ad6c8882b4e33d2f60fb23dd7d07a1ae60864e8277918f592b3dc6"},
+ {NID_secp521r1, NID_sha384,
+ "6744b69fc2420fe00f2352399bd58719e4ecdd6d602e2c80f194d607e58b27a0854745bf"
+ "d6d504de2eb30b04cee0f44af710dd77e2f816ac3ac5692fad2d1d417893bb0edba2707a"
+ "4c146a486f8728ca696d35cc52e9c7187c82d4bdb92eb954794e5ad15133f6bfea1f025d"
+ "a32ada710a3014cf11095b3ff69a94d087f17753",
+ "00a8db566bd771a9689ea5188c63d586b9c8b576dbe74c06d618576f61365e90b843d003"
+ "47fdd084fec4ba229fe671ccdd5d9a3afee821a84af9560cd455ed72e8f",
+ "04004f5b790cbe2984b71d41af5efed6c6893d15e13f31816d55a9c2926a104eee66f1ad"
+ "a83115d1388551218773b8b9d1138e3e3f027bb4392c90c14fd232580b4a1100660eb160"
+ "e9bfc8c5619e70e948e238c6fd37739bc1bb657b8e8436e63628f91992be7e63d9a73596"
+ "23a1340642777b22026feb51116a6c50c54c3589b9bd39b6cb",
+ "1e7b5e53571a24bd102dd7ad44a4b8d8a4e60e5957bc3c4e5d3c73109f55233f072e572c"
+ "7892f425ba5e64d3cb7966096bb34a47e26cd5b3e3b44108b310d9f681b",
+ "1a88bcd7e2bdff6e497d943dde432fb3f855a7177c466319cb53b701230c299db0302762"
+ "69685857d1e3f28110e690f2f529c8d18115eb381f313bc891d92ad278e",
+ "146f1984ea879274dfd5e86ad92e564a4de081523ddbb1c397b8f9595911ef2e6501bc08"
+ "1584d5340f7aa47e1af036234ac6f27a5ac31f78dd3b0ff1a62693c630d"},
+ {NID_secp521r1, NID_sha384,
+ "16001f4dcf9e76aa134b12b867f252735144e523e40fba9b4811b07448a24ef4ccf3e81f"
+ "e9d7f8097ae1d216a51b6eefc83880885e5b14a5eeee025c4232319c4b8bce26807d1b38"
+ "6ad6a964deb3bdca30ee196cfdd717facfad5c77d9b1d05fdd96875e9675e85029ecbf4f"
+ "94c524624746b7c42870c14a9a1454acf3354474",
+ "1a300b8bf028449344d0e736145d9dd7c4075a783cb749e1ec7988d60440a07021a25a3d"
+ "e74ea5e3d7bd4ab774d8ad6163adae31877ef0b2bd50e26e9e4be8a7b66",
+ "04005055b9ad726ba8a48219b0ecbfffb89f8428de895b231f676705b7de9f2022d9ff4e"
+ "0114ebb52dea342f9bf76b2fb060c020e29d92074ebb1fbfe5290a58c8bc1000415af7f2"
+ "0a6e945315adbf757316bb486c80780a0a3a15b4b9609f126d7341053a2b726ab63cb46f"
+ "eee527b0bf532b32b477e5671aea23d9b3c3e604b9029954b5",
+ "05a2e92717bb4dab3ee76724d4d9c2d58a32b873e491e36127985f0c9960c610962ca1c4"
+ "510dba75c98d83beebdc58b1d8678e054640951d11db1bd2d8a4ab8476b",
+ "104a78ce94f878822daaf00ee527fbdbf6cceb3cbb23a2caa485e4109466de8910252f92"
+ "379ab292cac8d1eda164f880c0067696e733fc8588a27703a3e1f5b8f1f",
+ "1ffe23e8ab5a31668a81161a234ea14879771fe9866f8872eb6edb672e0fe91d2bb75c97"
+ "67a2dfbac7c15c802211236b22ea41ecd055a0b8b311ffc4255f86d5c67"},
+ {NID_secp521r1, NID_sha384,
+ "a9824a7b810aa16690083a00d422842971baf400c3563baa789c5653fc13416111c0236c"
+ "67c68e95a13cec0df50324dcc9ae780ce4232607cb57dd9b2c61b382f0fa51fd4e283e2c"
+ "55ffe272597651659fbd88cd03bfa9652cd54b01a7034c83a602709879e1325c77969beb"
+ "fd93932ce09a23eae607374602201614ff84b141",
+ "06a253acd79912a74270fc0703ed6507ab20a970f2bc2277f782062092cf0e60ae1ca1bb"
+ "44dec003169bc25ef6e7123dd04692f77b181a6d7e692e66b09d35a540c",
+ "0401f15c6b1df156fdd8381cd7446e039435e445f8f36f0247475058da0e371bf72753f6"
+ "e39f98066bc79370b038c39687ba18e16cb118fe6538b7568c5403c251f6b7012d2b4f46"
+ "b854eeae75f1c63f55b76bf0c604d47f870c28a50ecdeb52bba1dd9a0ff12e680804ff86"
+ "4111207652da7dd10b49edf66bb86be00bc06672de91982457",
+ "165faf3727e42fd61345cfa7b93e55fb4bf583b24bdc14ce635b6c99dbd788012f14da9a"
+ "210b677c44acdd851e672f1a48188d6b8946c0efeebfe8a597ba0090a2c",
+ "1ad9463d2759abd568626548578deefdcd8b2d050ce6d9c7ed05feca20167484b86e89bd"
+ "cc936fd647e0f8aedd7b6add2b8cf13ff6ff013c2b5540c6c56fda97a0c",
+ "1645a7d0e11015256cfb034adca198695eea6aedd44d9fbf496850ccfed950f43fffd8db"
+ "f41e113f2d3837d8a5dd62b2ed580112ff05800b1f73196e5576810e15b"},
+ {NID_secp521r1, NID_sha384,
+ "90d8bbf714fd2120d2144022bf29520842d9fbd2dc8bb734b3e892ba0285c6a342d6e1e3"
+ "7cc11a62083566e45b039cc65506d20a7d8b51d763d25f0d9eaf3d38601af612c5798a8a"
+ "2c712d968592b6ed689b88bbab95259ad34da26af9dda80f2f8a02960370bdb7e7595c0a"
+ "4fffb465d7ad0c4665b5ec0e7d50c6a8238c7f53",
+ "0d5a5d3ddfd2170f9d2653b91967efc8a5157f8720d740dd974e272aab000cc1a4e6c630"
+ "348754ab923cafb5056fc584b3706628051c557fce67744ee58ba7a56d0",
+ "040128a4da5fc995678e457ceb3929adee93c280f851abe900fa21f4f809dafad4e33b38"
+ "1e0cd49ce8dd50e2e281cea162bfd60a1d6a1c0ee2228e6a011e171b559ab8006eb0917c"
+ "d72256992c49ea527f6bb0315f13d8047794a0f1da1e93737703b1c2a74a00441ef3b47b"
+ "6a2ff789c49ae32d91cabe7b29247aeec44f6c40a76597a2ca",
+ "03269983a5c2bcc98e9476f5abf82424566b1f08b17204d29e310ece88f99eb677a537f8"
+ "6fe2529e409cfef2c12929644100099e0de2f27c0f0ac11105a4dca935b",
+ "1a5257ae1e8187ba954f535b86ff9b8d6a181a3b95c250d090cb4e9c3bfbd03aa64696a7"
+ "6c569728ef67780d6338d70ce46da40b87a3e49bfe154b93930890dfa93",
+ "05b6ccdfd5c63c7db76d3a0478064a2a376e0e050cb093be795a72a549247c2e4adba918"
+ "3145c63d46479dbbdcf09986a6f64c09c7e16abc4853f6376c9558b014a"},
+ {NID_secp521r1, NID_sha384,
+ "09952b1e09995e95bf0022e911c6ab1a463b0a1fdd0eec69117b34af1103c720b5760021"
+ "7de7cd178fef92de5391e550af72a8dcf7badf25b06dd039417f9a7d0f5be88fcd4e9655"
+ "931d5b605452a667c9d1bae91d3476e7d51cff4108f116a49966fb3a7cff8df1c09734ce"
+ "5620faf2dccb3dc5d94e7e9ac812da31f6d07a38",
+ "1bcedf920fa148361671b43c64e3186e1937eb1bd4b28cbd84c421472394552889bc0550"
+ "9aa732ef69d732b21b750523fdfd811f36467690fe94e01e64c9d5cbbe9",
+ "0400d33c151d202a5d4d831348e940b027ee32e4b0b9b48d823a05c67ff3bdaee0189fc6"
+ "680565f352c062e99968afc643208b4f9c7af185b861658a88c4ad0fcc8ba200e4441ddb"
+ "546468ad8ffa6074f137edfbb81e82e0e7d8f05c4c54598aa996a9cde54cb371f642bfdd"
+ "4ae7eca5b769696030027129a4183da93567ad142a2dff5183",
+ "046e619b83aac868b26d0b3cbfab55e630e0b55c461985b5d00f94ff3a5ce90ff412cebf"
+ "46bbd84550d2031d573ca27d924624428360708c8d8491c29eb01d30f2e",
+ "08427c0f0ac0263472cd423c0fb554bf3c851b9c775c566ab0f6878717bd57665830767b"
+ "05b7789c5c0b078195bd943dc737325552d32877ecb04a7c41bd07cd80c",
+ "10bb6652d6a624c40a7dd06828f15774130d02369ceb1a7d03b553e16e17b7fa5b5401f1"
+ "5885d5e4fc2e55c0c7a1b97871ab02f76386b93a16aa6e7eb65debac6dd"},
+ {NID_secp521r1, NID_sha384,
+ "0bb0f80cff309c65ff7729c59c517d50fc0ed5be405ef70cb910c3f62c328c90853d4473"
+ "530b654dda6156e149bc2222a8a7f9be665240e2fbe9d03f78a2356af0bacd1edb84c480"
+ "1adc8293a8a0bd6123d1cf6ba216aca807a7eb4dca76b493eb6e3dbb69d36f0f00f85622"
+ "2f24d9b93ec34c3b261be2fca0451c00571928e5",
+ "03789e04b3a2a0254ade3380172c150d2fad033885e02ea8bea5b92db3f4adbab190ae42"
+ "3080a1154dfedec694c25eab46ce638be3db4e4cba67bc39f62d6e7db2d",
+ "0401dbc2cf19627bdccf02432b1761f296275230c150cdde823ce3141ec315d7d05e16b2"
+ "c29e2a67491078d5316883e933d85b4b10d4f64c477d3c4e0442dc928983a2007562e720"
+ "807dd118d3d8b265b3abc61a71fce43e3dce0e7b5ae18b7a4cb01ecc00d39c1f22e150a9"
+ "a8728997e502144f5b3f6fa9b4cb8a4136212b082ca394e3f6",
+ "0fbccd8d7804bdd1d1d721b5ec74d4ba37603bc306f9fce2ec241853d8e07334e6b4b12c"
+ "4ecca0c54bd71193dd7146507933a20737c5f3e15085830fab9b30ca57b",
+ "181915a3998d8fa214f9715f4ca928d09c36de168dc15c6970a8a062b5cea2dc969b2437"
+ "ca17b684f78a1fd583aad8e6c762c8f4ab0c91b86a497145e3ca440d307",
+ "15a6c18c5c77f5470b27d061eafdc26b78561941a3b2ab0f5c81d40899fc053c3d9ed12d"
+ "7d61e298abbae470009c7b2157731c58d7b16a66fa5abaf5e8a1b8ed394"},
+ {NID_secp521r1, NID_sha384,
+ "7efacf213382ce30804e78b7256854d759147dba9729c51b2759465715bf2c421034c23d"
+ "c651c13d6cce95f71fe6a84dfbee5768163ac5789ac0474c5ddf4115684683c5f7c204b3"
+ "3b8bcc0c03ac58f66cef2f53b721fe2fac91ad841126101a88f512a7c2ded38549d9f050"
+ "d4b7961dda48a1489f026c5d111701762418cfe3",
+ "124700aa9186353e298edefc57bec0c7d0201cca10c1d80dd408d5d71040592b0ac59fac"
+ "dadfa8712445f5977ef8d4854022720c3f02d60e0732dbb2f171fcf1490",
+ "0400c80fc4cecae5d53348524ddba6a160b735c75b22fdb39af17e2a613d09246e3bb0fd"
+ "3f2978577f6db5d2118e05c7898024808f8eb8e021d7969cdcf7fc981200bb01a880c939"
+ "43fd446d4b3923b574d2221c1bb7b645fb5534dda60e827b497666ff586b77921f7e7f60"
+ "5147947194cffd2fef0678880b89cc0bc7fb74fa96d4b112d7",
+ "01a05238d595ded5c61d3bf6fde257dbf13095af8a5cb3a2e579e8e4c550fe31d12b71cc"
+ "2dbcb295e6c4fd0fb8c22d1b741c097cc59d826ced1a8771f09983143c4",
+ "132762bc81e9922a8d642e3a9d0218affa21fa2331cfcb9e452545c5981c64a8f7e4cc8e"
+ "68056023b2aa78bead59061d19c7f646c931163a91e544b106b3be8de9e",
+ "0c3a1b0b000c3169984132add51d611e2cb7069a262a6983d2ae72b459c36e6469509bdb"
+ "0f473600b8686700b08910779dee9ba83f82e755d4a4ef5f124eb09397f"},
+ {NID_secp521r1, NID_sha384,
+ "28edff8b9d85f5f58499cc11f492abdfab25e8945975bbaeee910afa2b8fc1295ec61406"
+ "309ce4e09f4ab4f462959fc2a2786802466eb26d3b01be6919893ae75d0fdc2dc8a82e66"
+ "2550f9fce9627dd364188aaba5c6faa1b2d8a2235adfa5ad0dc140f88a2b2f103f5690e8"
+ "77d07fe8fd30d02d2b2729bd3d8eb5b23a21f54c",
+ "1f532d01af885cb4ad5c329ca5d421c5c021883bd5404c798d617679bb8b094cbb7e15c8"
+ "32fb436325c5302313ce5e496f9513455e7021ffad75777a19b226acfa1",
+ "0400c0bd76b0027b85bdd879052220da1494d503f6a4bb972105a48ae98e7dda8c2d9fd9"
+ "336f5646385b961ef68e8464e3a95b00f96614b1a408ceaa2c87b077b6a8fb017eb7eb5c"
+ "78db7819af92e8537d110d9f05a5e24f954f4dde21c224d4040f059ec99e051702f39041"
+ "3d2708d18f84d82998c61847475250fb844b20082cbe651a6b",
+ "14e66853e0f7cd3300ebcae06048532e19cbb95bee140edc1c867ce7310637651445b6df"
+ "eb1d99d2e32f2ffb787ebe3fe35032277f185d3dad84f95806924550abe",
+ "0c5b3a57161098e2e8e16e0a5ae8ecf4a14df14927eea18ed4925d11dc429dda14515932"
+ "3ba970174b194b9b4608a8fa2373b7a825c5e8bd80574e49698285c2c82",
+ "1a0c038a51796158b42eb5b0dac37aff9ab93b903a47e06ebbdd15946e4bcc9a3b3875b1"
+ "8cf6294c33fc6c3693cef04ed1a43d08951e664c760e2cf3fb4e47490d2"},
+ {NID_secp521r1, NID_sha384,
+ "bae2a8897c742fd99fbf813351cd009d3f2e18d825ca22e115276484bce8f82f8c7c0c21"
+ "dd2af208404d8ef45bb5a6c41693912b630897d5246801bf0775aa9bbac8be98cb861d17"
+ "2c3563dc59e78a58ed13c66dea496471b3ad0eeae8995293e4ab97373edc1837ffc95ff1"
+ "cc0c1e90e64ea8680b2ca5f1e09bf86b99b343b6",
+ "11abf508bca68a85a54bc0659e77efad3c86112c9db04db2883e76144aa446918bb4bb07"
+ "84b0b6a0e9aa47399fe3de5aaecfd8894a0d130bb0c366c40d9d5050745",
+ "04005c0ea363a3a12633ea39d564587ebdd3a22a175ef32b9ebfc7311304b19cb3a62b5a"
+ "dc36f6afb6a6f7fabbf810ee89fdb72854fefd613e7798e9b9ff5938ea54c600bd06a85e"
+ "47b885c08124b55a3fcc07ca61647cda6efbfdbd21b24d1ea7a4c7300d46cd798e76063a"
+ "a979adef6f0698b15e5b7ae8a2ab39ab4f50b2d20614db6317",
+ "19cadb8c7eb10565aa4567e0709873918720f0e4b42b4817afb0b0547c70cd1100229dea"
+ "e97a276b9c98ea58b01d4839fee86336d749d123b03e8b1a31166acc110",
+ "0667448a8bbef1c810d40646977dc22f3dfb52a4d80928ded5e976e199cbed02fbd5a085"
+ "46756ece14548d721a6eb380d0e1a71ad0660dbcac6163c776eedd3e249",
+ "0ae7f0a238daaddb7fb4a1707fe5132daf653f8e19f732347134c96f1dd798f867c479a4"
+ "a4609a568a15b61afed70790adbde13ac5f68c468d0230852c1a2c22581"},
+ {NID_secp521r1, NID_sha384,
+ "d57a26a9593e72bfc87322524639bcaae5f2252d18b99cdaa03b14445b0b8a4dd53928f6"
+ "6a2e4f202fb25b19cad0eb2f1bfda2ab9b0eb668cdcd0fe72f5d9ef2e45e0218590f7ab9"
+ "d2c9342202610c698bc786cce108a7d4a6730a13e9ea1b470e781f1237d3f84f44abde80"
+ "8516975546bd89075ef9a9732bfd7ee33b6f4399",
+ "18dbf520d58177e4b7a0627674d220137983f486dd2fd3639f19751804e80df0655db6af"
+ "d829cdf75238de525e1a7a9f048049b593dd64b4b96cc013f970c05ea1f",
+ "04018b872690c37995be324ddb5c2bd5462841bb062f8e63da248a853de79c3d6bb9a2eb"
+ "1e6933afda0998ca43491cc807b08ace2d5336a43d0ab50563a2d3d98755f00002ff3122"
+ "1aa32aa6546f35e8fe5b9361f938362a5e89e77ae130ba8bce3729e912dfac35a2fd21ef"
+ "e84b45b8be2a340850e4b574e1885b35c2afbe196b57c6cf4c",
+ "098faeb73054639cb2e4442cd68e7b3a13f4b3f397a7b26f303afa40789f8ddd3d918f1c"
+ "e4f0be53c8cb69c380744e2297d7fc01e2b3daef4ce64dd3a2644234753",
+ "09c0e7649f814f70a8416cb78bc4601472a363fe97f5c587305778169677860dd97f87b5"
+ "ab07c3a953bc4615fc34634509d6a25621bdded33ed42446d059509c190",
+ "120b90e1cfb8a1b5e530df7b17d1128bc051ca4f1a65dd9c9d9d3c59d2f00c7c1e994c52"
+ "b8671d40294b4d574d2c04475d5bebeacd3a0d3870a54dc7a4805614f40"},
+ {NID_secp521r1, NID_sha384,
+ "8fdcf5084b12cfc043dd3416b46274e021bbed95d341d3c500c102a5609d3a34de29f8fa"
+ "9f0adb611a1f47a97ad981f8129d718fc0d6c709eab1a3490db8d550f34eb905b9e00663"
+ "543afc5bc155e368e0bc919a8b8c9fa42093603537a5614927efa6be819ed42ececbf1a8"
+ "0a61e6e0a7f9b5bc43b9238e62d5df0571fea152",
+ "002764f5696aa813cd55d30948585f86288ae05aeb264ca157cd09e1d09a10515a849b07"
+ "91b755ccc656a34707be9e52f5762d290a7d2bcd6de52c600ff862eaf4e",
+ "040127279c88719dc614db387f102e55104ea1c704ac7f57f3bca936f728439b76556730"
+ "dd7cde2ac1ad0a4c2c2f036ab6f00cf34cb87ea36113571f300713044106d20134a0786c"
+ "31f5f2291b83c50fb579ae4c620b95e5a8bdc0c7e1ee6b996c89d764f1b20403e7faa203"
+ "f397425ada297045dd8ba0e4b155d4900da249e934faab7991",
+ "08bffb0778cbb06466cecc114b9e89ca243a2b2b5e2597db920bc73a8bbcbe3f57144ad3"
+ "3409ef7faaab430e13f4c42d304d11347360c84972ca20b1539cce3a288",
+ "1f8f504e64a502e51e7c129517931c3b71f0d8a63b19cfe01ff7c951c6525249608b3ef5"
+ "d00061d77eb6b3d69581adeaa3732c773bbb9b919c3e7c71fdc09f44d06",
+ "058044fc64b340604ffd02a5b2918d76fd6fb59ea895feab7aa218e6f1e8c8f226eb9ee3"
+ "45ef8140183a69272582005077b008006aab11597e808d7ff1e8382c924"},
+ {NID_secp521r1, NID_sha384,
+ "00669f433934992257bed55861df679804107d7fa491672574a7624949c60049b0533383"
+ "c88d6896c8de860704c3e6a6aefce83efa57c4d57e9ab253da5d15e1f53ab6dce218b592"
+ "772ab0bc01fee8e63368e85c0639301456fe2d44cd5396a7f2b22761cd03b80eba7883ee"
+ "de8249a2f5db2183bf00550c5c002f45a5e4fb31",
+ "1b0c9acd3eeb618b4b0de4db402206f0f29adc69d7ad324b6db6601b351f723ac8fe949e"
+ "eacd34228649bf0126276e5aceb0137d00c30dd858aef2d6b6449de2e89",
+ "0401811c8884486aaa083ddee1c51cb6e861cb830bd5eaa929f72efadbbd1286566ae7e7"
+ "ba7fde7e02529900d35ee64591652d28798bfc1bed0d192602a9cf5a7d22e3006d7fc9dd"
+ "494816cfd29613d4689af67f7d0a2e6fbad5d4d6e0130189172a1ab601c5ca71deaa8bfc"
+ "b5a190d49da191672ff6fc048e146cb902acec5eae6d87e60a",
+ "1fdc4f108070af3c66c9ba7b6c1f2603a19ceb4760399df81228cfc7eafde1082b5a0716"
+ "a3ff82fbe84726f14dd0db3376ca184a78c3c60679bab6cd45f77f9b9ce",
+ "1ec310339ff056faeb341c4499c43782078b04be1725ae9a6cdcb6011c46d1a4eb3d75c3"
+ "58225e4ec142fd1cd344186f5eb597f7ba559ddfa954824365d5b6edaec",
+ "005b679a33fdb7e04834f071cd0ac514c04add9f2614ab9bbd9b407b1420fed3f3e02a10"
+ "8e7e279899e43dcf64ae4083c289a87cd7d2103bdc036a95d36800ac7c6"},
+ {NID_secp521r1, NID_sha384,
+ "4be81dcfab39a64d6f00c0d7fff94dabdf3473dc49f0e12900df328d6584b854fbaebaf3"
+ "194c433e9e21743342e2dd056b445c8aa7d30a38504b366a8fa889dc8ecec35b31300707"
+ "87e7bf0f22fab5bea54a07d3a75368605397ba74dbf2923ef20c37a0d9c64caebcc93157"
+ "456b57b98d4becb13fecb7cc7f3740a6057af287",
+ "181e1037bbec7ca2f271343e5f6e9125162c8a8a46ae8baa7ca7296602ae9d56c994b3b9"
+ "4d359f2b3b3a01deb7a123f07d9e0c2e729d37cc5abdec0f5281931308a",
+ "0400cfa5a8a3f15eb8c419095673f1d0bd63b396ff9813c18dfe5aa31f40b50b82481f9e"
+ "d2edd47ae5ea6a48ea01f7e0ad0000edf7b66f8909ee94f141d5a07efe315c018af728f7"
+ "318b96d57f19c1104415c8d5989565465e429bc30cf65ced12a1c5856ac86fca02388bc1"
+ "51cf89959a4f048597a9e728f3034aa39259b59870946187bf",
+ "09078beaba465ba7a8b3624e644ac1e97c654533a58ac755e90bd606e2214f11a48cb51f"
+ "9007865a0f569d967ea0370801421846a89f3d09eb0a481289270919f14",
+ "19cf91a38cc20b9269e7467857b1fc7eabb8cea915a3135f727d471e5bfcfb66d321fabe"
+ "283a2cf38d4c5a6ecb6e8cbee1030474373bb87fcdfcc95cf857a8d25d0",
+ "1cf9acd9449c57589c950f287842f9e2487c5610955b2b5035f6aacfd2402f511998a1a9"
+ "42b39c307fc2bcab2c8d0dae94b5547ddccfb1012ca985b3edf42bbba8b"},
+ {NID_secp521r1, NID_sha512,
+ "9ecd500c60e701404922e58ab20cc002651fdee7cbc9336adda33e4c1088fab1964ecb79"
+ "04dc6856865d6c8e15041ccf2d5ac302e99d346ff2f686531d25521678d4fd3f76bbf2c8"
+ "93d246cb4d7693792fe18172108146853103a51f824acc621cb7311d2463c3361ea70725"
+ "4f2b052bc22cb8012873dcbb95bf1a5cc53ab89f",
+ "0f749d32704bc533ca82cef0acf103d8f4fba67f08d2678e515ed7db886267ffaf02fab0"
+ "080dca2359b72f574ccc29a0f218c8655c0cccf9fee6c5e567aa14cb926",
+ "040061387fd6b95914e885f912edfbb5fb274655027f216c4091ca83e19336740fd81aed"
+ "fe047f51b42bdf68161121013e0d55b117a14e4303f926c8debb77a7fdaad100e7d0c75c"
+ "38626e895ca21526b9f9fdf84dcecb93f2b233390550d2b1463b7ee3f58df7346435ff04"
+ "34199583c97c665a97f12f706f2357da4b40288def888e59e6",
+ "03af5ab6caa29a6de86a5bab9aa83c3b16a17ffcd52b5c60c769be3053cdddeac60812d1"
+ "2fecf46cfe1f3db9ac9dcf881fcec3f0aa733d4ecbb83c7593e864c6df1",
+ "04de826ea704ad10bc0f7538af8a3843f284f55c8b946af9235af5af74f2b76e099e4bc7"
+ "2fd79d28a380f8d4b4c919ac290d248c37983ba05aea42e2dd79fdd33e8",
+ "087488c859a96fea266ea13bf6d114c429b163be97a57559086edb64aed4a18594b46fb9"
+ "efc7fd25d8b2de8f09ca0587f54bd287299f47b2ff124aac566e8ee3b43"},
+ {NID_secp521r1, NID_sha512,
+ "b3c63e5f5a21c4bfe3dbc644354d9a949186d6a9e1dd873828782aa6a0f1df2f64114a43"
+ "0b1c13fe8a2e09099e1ed05ef70de698161039ded73bcb50b312673bb073f8a792ac140a"
+ "78a8b7f3586dffb1fc8be4f54516d57418ccc9945025ce3acf1eb84f69ceee5e9bd10c18"
+ "c251dbc481562cd3aae54b54ab618cb1eeda33cf",
+ "1a4d2623a7d59c55f408331ba8d1523b94d6bf8ac83375ceb57a2b395a5bcf977cfc1623"
+ "4d4a97d6f6ee25a99aa5bff15ff535891bcb7ae849a583e01ac49e0e9b6",
+ "04004d5c8afee038984d2ea96681ec0dccb6b52dfa4ee2e2a77a23c8cf43ef19905a34d6"
+ "f5d8c5cf0981ed804d89d175b17d1a63522ceb1e785c0f5a1d2f3d15e513520014368b8e"
+ "746807b2b68f3615cd78d761a464ddd7918fc8df51d225962fdf1e3dc243e265100ff0ec"
+ "133359e332e44dd49afd8e5f38fe86133573432d33c02fa0a3",
+ "0bc2c0f37155859303de6fa539a39714e195c37c6ea826e224c8218584ae09cd0d1cc14d"
+ "94d93f2d83c96e4ef68517fdb3f383da5404e5a426bfc5d424e253c181b",
+ "1a3c4a6386c4fb614fba2cb9e74201e1aaa0001aa931a2a939c92e04b8344535a20f53c6"
+ "e3c69c75c2e5d2fe3549ed27e6713cb0f4a9a94f6189eb33bff7d453fce",
+ "16a997f81aa0bea2e1469c8c1dab7df02a8b2086ba482c43af04f2174831f2b176165879"
+ "5adfbdd44190a9b06fe10e578987369f3a2eced147cff89d8c2818f7471"},
+ {NID_secp521r1, NID_sha512,
+ "6e0f96d56505ffd2d005d5677dbf926345f0ff0a5da456bbcbcfdc2d33c8d878b0bc8511"
+ "401c73168d161c23a88b04d7a9629a7a6fbcff241071b0d212248fcc2c94fa5c086909ad"
+ "b8f4b9772b4293b4acf5215ea2fc72f8cec57b5a13792d7859b6d40348fc3ba3f5e7062a"
+ "19075a9edb713ddcd391aefc90f46bbd81e2557b",
+ "14787f95fb1057a2f3867b8407e54abb91740c097dac5024be92d5d65666bb16e4879f3d"
+ "3904d6eab269cf5e7b632ab3c5f342108d1d4230c30165fba3a1bf1c66f",
+ "0400c2d540a7557f4530de35bbd94da8a6defbff783f54a65292f8f76341c996cea38795"
+ "805a1b97174a9147a8644282e0d7040a6f83423ef2a0453248156393a1782e0119f746c5"
+ "df8cec24e4849ac1870d0d8594c799d2ceb6c3bdf891dfbd2242e7ea24d6aec316621473"
+ "4acc4cbf4da8f71e2429c5c187b2b3a048527c861f58a9b97f",
+ "186cd803e6e0c9925022e41cb68671adba3ead5548c2b1cd09348ab19612b7af3820fd14"
+ "da5fe1d7b550ed1a3c8d2f30592cd7745a3c09ee7b5dcfa9ed31bdd0f1f",
+ "10ed3ab6d07a15dc3376494501c27ce5f78c8a2b30cc809d3f9c3bf1aef437e590ef66ab"
+ "ae4e49065ead1af5f752ec145acfa98329f17bca9991a199579c41f9229",
+ "08c3457fe1f93d635bb52df9218bf3b49a7a345b8a8a988ac0a254340546752cddf02e6c"
+ "e47eee58ea398fdc9130e55a4c09f5ae548c715f5bcd539f07a34034d78"},
+ {NID_secp521r1, NID_sha512,
+ "3f12ab17af3c3680aad22196337cedb0a9dba22387a7c555b46e84176a6f841800455238"
+ "6ada4deec59fdabb0d25e1c6668a96f100b352f8dabd24b2262bd2a3d0f825602d54150b"
+ "dc4bcbd5b8e0ca52bc8d2c70ff2af9b03e20730d6bd9ec1d091a3e5c877259bcff4fd2c1"
+ "7a12bfc4b08117ec39fe4762be128d0883a37e9d",
+ "15807c101099c8d1d3f24b212af2c0ce525432d7779262eed0709275de9a1d8a8eeeadf2"
+ "f909cf08b4720815bc1205a23ad1f825618cb78bde747acad8049ca9742",
+ "040160d7ea2e128ab3fabd1a3ad5455cb45e2f977c2354a1345d4ae0c7ce4e492fb9ff95"
+ "8eddc2aa61735e5c1971fa6c99beda0f424a20c3ce969380aaa52ef5f5daa8014e4c83f9"
+ "0d196945fb4fe1e41913488aa53e24c1d2142d35a1eed69fed784c0ef44d71bc21afe0a0"
+ "065b3b87069217a5abab4355cf8f4ceae5657cd4b9c8008f1f",
+ "096731f8c52e72ffcc095dd2ee4eec3da13c628f570dba169b4a7460ab471149abdede0b"
+ "63e4f96faf57eab809c7d2f203fd5ab406c7bd79869b7fae9c62f97c794",
+ "1e2bf98d1186d7bd3509f517c220de51c9200981e9b344b9fb0d36f34d969026c80311e7"
+ "e73bb13789a99e0d59e82ebe0e9595d9747204c5f5550c30d934aa30c05",
+ "12fed45cc874dc3ed3a11dd70f7d5c61451fbea497dd63e226e10364e0718d3722c27c7b"
+ "4e5027051d54b8f2a57fc58bc070a55b1a5877b0f388d768837ef2e9cec"},
+ {NID_secp521r1, NID_sha512,
+ "a1eed24b3b7c33296c2491d6ee092ec6124f85cf566bb5bc35bffb5c734e34547242e575"
+ "93e962fb76aee9e800eed2d702cc301499060b76406b347f3d1c86456978950737703c81"
+ "59001e6778f69c734a56e5ce5938bd0e0de0877d55adeee48b0d8dfa4ac65fd2d3ce3e12"
+ "878bac5c7014f9284d161b2a3e7d5c88569a45f6",
+ "18692def0b516edcdd362f42669999cf27a65482f9358fcab312c6869e22ac469b82ca90"
+ "36fe123935b8b9ed064acb347227a6e377fb156ec833dab9f170c2ac697",
+ "0401ceee0be3293d8c0fc3e38a78df55e85e6b4bbce0b9995251f0ac55234140f82ae0a4"
+ "34b2bb41dc0aa5ecf950d4628f82c7f4f67651b804d55d844a02c1da6606f701f775eb6b"
+ "3c5e43fc754052d1f7fc5b99137afc15d231a0199a702fc065c917e628a54e038cbfebe0"
+ "5c90988b65183b368a2061e5b5c1b025bbf2b748fae00ba297",
+ "161cf5d37953e09e12dc0091dc35d5fb3754c5c874e474d2b4a4f1a90b870dff6d99fb15"
+ "6498516e25b9a6a0763170702bb8507fdba4a6131c7258f6ffc3add81fd",
+ "14dfa43046302b81fd9a34a454dea25ccb594ace8df4f9d98556ca5076bcd44b2a9775df"
+ "aca50282b2c8988868e5a31d9eb08e794016996942088d43ad3379eb9a1",
+ "120be63bd97691f6258b5e78817f2dd6bf5a7bf79d01b8b1c3382860c4b00f89894c72f9"
+ "3a69f3119cb74c90b03e9ede27bd298b357b9616a7282d176f3899aaa24"},
+ {NID_secp521r1, NID_sha512,
+ "9aace26837695e6596007a54e4bccdd5ffb16dc6844140e2eeeb584b15acb2bbffd203c7"
+ "4440b6ee8db676fd200b4186a8c3e957c19e74d4d865ada83f80655323dfa3570907ed3c"
+ "e853b6e8cc375ed2d758a2f5ad265dd3b47650517a49b3d02df9e0c60c21576378c2b3a0"
+ "8481eec129b2a75608e13e6420127a3a63c8a3f1",
+ "0a63f9cdefbccdd0d5c9630b309027fa139c31e39ca26686d76c22d4093a2a5e5ec4e230"
+ "8ce43eb8e563187b5bd811cc6b626eace4063047ac0420c3fdcff5bdc04",
+ "04014cab9759d4487987b8a00afd16d7199585b730fb0bfe63796272dde9135e7cb9e27c"
+ "ec51207c876d9214214b8c76f82e7363f5086902a577e1c50b4fbf35ce996601a83f0caa"
+ "01ca2166e1206292342f47f358009e8b891d3cb817aec290e0cf2f47e7fc637e39dca039"
+ "49391839684f76b94d34e5abc7bb750cb44486cce525eb0093",
+ "01e51fd877dbbcd2ab138fd215d508879298d10c7fcbdcc918802407088eb6ca0f18976a"
+ "13f2c0a57867b0298512fc85515b209c4435e9ef30ab01ba649838bc7a0",
+ "11a1323f6132d85482d9b0f73be838d8f9e78647934f2570fededca7c234cc46aa1b97da"
+ "5ac1b27b714f7a171dc4209cbb0d90e4f793c4c192dc039c31310d6d99b",
+ "0386a5a0fc55d36ca7231a9537fee6b9e51c2255363d9c9e7cb7185669b302660e23133e"
+ "b21eb56d305d36e69a79f5b6fa25b46ec61b7f699e1e9e927fb0bceca06"},
+ {NID_secp521r1, NID_sha512,
+ "ac2175940545d4fbab6e2e651c6830aba562e0c11c919e797c43eff9f187a68a9e5a128e"
+ "3e2a330b955a3f4577d3f826529ad1b03d7b60f7ad678f005053b41dc0f8d267f3685c6a"
+ "be1a0e9a733c44b2f3ca48b90806f935141c842e3a6c06a58f5343d75e3585971a734f4a"
+ "e1074ce5b54f74bd9342f4bbca738d260393f43e",
+ "024f7d67dfc0d43a26cc7c19cb511d30a097a1e27e5efe29e9e76e43849af170fd9ad57d"
+ "5b22b1c8840b59ebf562371871e12d2c1baefc1abaedc872ed5d2666ad6",
+ "04009da1536154b46e3169265ccba2b4da9b4b06a7462a067c6909f6c0dd8e19a7bc2ac1"
+ "a47763ec4be06c1bec57d28c55ee936cb19588cc1398fe4ea3bd07e6676b7f014150cdf2"
+ "5da0925926422e1fd4dcfcffb05bdf8682c54d67a9bd438d21de5af43a15d979b320a847"
+ "683b6d12ac1383a7183095e9da491c3b4a7c28874625e70f87",
+ "1c1308f31716d85294b3b5f1dc87d616093b7654907f55289499b419f38ceeb906d2c9fe"
+ "4cc3d80c5a38c53f9739311b0b198111fede72ebde3b0d2bc4c2ef090d2",
+ "00dbf787ce07c453c6c6a67b0bf6850c8d6ca693a3e9818d7453487844c9048a7a2e48ff"
+ "982b64eb9712461b26b5127c4dc57f9a6ad1e15d8cd56d4fd6da7186429",
+ "0c6f1c7774caf198fc189beb7e21ca92ceccc3f9875f0e2d07dc1d15bcc8f210b6dd376b"
+ "f65bb6a454bf563d7f563c1041d62d6078828a57538b25ba54723170665"},
+ {NID_secp521r1, NID_sha512,
+ "6266f09710e2434cb3da3b15396556765db2ddcd221dce257eab7399c7c4901359251129"
+ "32716af1434053b8b9fe340563e57a0b9776f9ac92cbb5fba18b05c0a2fafbed7240b3f9"
+ "3cd1780c980ff5fe92610e36c0177cabe82367c84cee9020cf26c1d74ae3eb9b9b512cb8"
+ "b3cb3d81b17cf20dc76591b2b394ef1c62ac12ee",
+ "0349471460c205d836aa37dcd6c7322809e4e8ef81501e5da87284b267d843897746b330"
+ "16f50a7b702964910361ed51d0afd9d8559a47f0b7c25b2bc952ce8ed9e",
+ "04000bbd4e8a016b0c254e754f68f0f4ed081320d529ecdc7899cfb5a67dd04bc85b3aa6"
+ "891a3ed2c9861ae76c3847d81780c23ad84153ea2042d7fd5d517a26ff3ce400645953af"
+ "c3c1b3b74fdf503e7d3f982d7ee17611d60f8eb42a4bddbec2b67db1f09b54440c30b44e"
+ "8071d404658285cb571462001218fc8c5e5b98b9fae28272e6",
+ "00eb2bd8bb56b9d2e97c51247baf734cc655c39e0bfda35375f0ac2fe82fad699bf19895"
+ "77e24afb33c3868f91111e24fefe7dec802f3323ac013bec6c048fe5568",
+ "14bf63bdbc014aa352544bd1e83ede484807ed760619fa6bc38c4f8640840195e1f2f149"
+ "b29903ca4b6934404fb1f7de5e39b1ea04dba42819c75dbef6a93ebe269",
+ "05d1bcf2295240ce4415042306abd494b4bda7cf36f2ee2931518d2454faa01c606be120"
+ "b057062f2f3a174cb09c14f57ab6ef41cb3802140da22074d0e46f908d4"},
+ {NID_secp521r1, NID_sha512,
+ "3de9e617a6868dca1a1432d503f923535da3f9b34426b2a4822174399c73b1c1ee673114"
+ "10a58c17202ac767844b2024d8aa21a205707d93865693ac25a24fc87034fa3a7a7e27c3"
+ "344cb03b87602c15180a5fe6a9dd90cd11af4a0f150207bf2d83f55b12c088adae99aa8c"
+ "fa659311b3a25beb99056643760d6a282126b9b2",
+ "07788d34758b20efc330c67483be3999d1d1a16fd0da81ed28895ebb35ee21093d37ea1a"
+ "c808946c275c44454a216195eb3eb3aea1b53a329eca4eb82dd48c784f5",
+ "0400157d80bd426f6c3cee903c24b73faa02e758607c3e102d6e643b7269c299684fdaba"
+ "1acddb83ee686a60acca53cddb2fe976149205c8b8ab6ad1458bc00993cc43016e33cbed"
+ "05721b284dacc8c8fbe2d118c347fc2e2670e691d5d53daf6ef2dfec464a5fbf46f8efce"
+ "81ac226915e11d43c11c8229fca2327815e1f8da5fe95021fc",
+ "0a73477264a9cc69d359464abb1ac098a18c0fb3ea35e4f2e6e1b060dab05bef1255d9f9"
+ "c9b9fbb89712e5afe13745ae6fd5917a9aedb0f2860d03a0d8f113ea10c",
+ "07e315d8d958b8ce27eaf4f3782294341d2a46fb1457a60eb9fe93a9ae86f3764716c4f5"
+ "f124bd6b114781ed59c3f24e18aa35c903211b2f2039d85862932987d68",
+ "1bcc1d211ebc120a97d465b603a1bb1e470109e0a55d2f1b5c597803931bd6d7718f010d"
+ "7d289b31533e9fcef3d141974e5955bc7f0ee342b9cad05e29a3dded30e"},
+ {NID_secp521r1, NID_sha512,
+ "aa48851af7ef17abe233163b7185130f4646203c205e22bcc2a5a3697bcab998c73a9ffe"
+ "1d3ea0b7978ce7df937a72586eb5ca60b0d939a7d1c115c820171c89c8116b7e2c7b98cf"
+ "0f14e4c4df3cb2f319ad3ab0ea25ff14526ddc037469f000bf82100acd4cdf94feb4eba4"
+ "ea1726f0569336604a473aee67d71afebb569209",
+ "1f98696772221e6cccd5569ed8aed3c435ee86a04689c7a64d20c30f6fe1c59cc10c6d29"
+ "10261d30c3b96117a669e19cfe5b696b68feeacf61f6a3dea55e6e5837a",
+ "04007002872c200e16d57e8e53f7bce6e9a7832c387f6f9c29c6b75526262c57bc2b56d6"
+ "3e9558c5761c1d62708357f586d3aab41c6a7ca3bf6c32d9c3ca40f9a2796a01fe3e5247"
+ "2ef224fb38d5a0a14875b52c2f50b82b99eea98d826c77e6a9ccf798de5ffa92a0d65965"
+ "f740c702a3027be66b9c844f1b2e96c134eb3fdf3edddcf11c",
+ "1a277cf0414c6adb621d1cc0311ec908401ce040c6687ed45a0cdf2910c42c9f1954a457"
+ "2d8e659733d5e26cbd35e3260be40017b2f5d38ec42315f5c0b056c596d",
+ "0d732ba8b3e9c9e0a495249e152e5bee69d94e9ff012d001b140d4b5d082aa9df77e10b6"
+ "5f115a594a50114722db42fa5fbe457c5bd05e7ac7ee510aa68fe7b1e7f",
+ "134ac5e1ee339727df80c35ff5b2891596dd14d6cfd137bafd50ab98e2c1ab4008a0bd03"
+ "552618d217912a9ec502a902f2353e757c3b5776309f7f2cfebf913e9cd"},
+ {NID_secp521r1, NID_sha512,
+ "b0d5d52259af364eb2d1a5027e5f7d0afe4b999cc5dd2268cfe76f51d2f17b541bdd7867"
+ "e23a1bb897705153d9432a24012108979c6a2c9e2567c9531d012f9e4be764419491a52e"
+ "ae2e127430b0ab58cb8e216515a821b3db206447c235bf44ee304201b483b2a88844abaa"
+ "18bca0147dfff7e502397dd62e15524f67eb2df2",
+ "13c3852a6bc8825b45fd7da1754078913d77f4e586216a6eb08b6f03adce7464f5dbc2be"
+ "a0eb7b12d103870ef045f53d67e3600d7eba07aac5db03f71b64db1cceb",
+ "0400c97a4ebcbbe701c9f7be127e87079edf479b76d3c14bfbee693e1638e5bff8d4705a"
+ "c0c14597529dbe13356ca85eb03a418edfe144ce6cbf3533016d4efc29dbd4011c75b7a8"
+ "894ef64109ac2dea972e7fd5f79b75dab1bf9441a5b8b86f1dc1324426fa6cf4e7b973b4"
+ "4e3d0576c52e5c9edf8ce2fc18cb3c28742d44419f044667f8",
+ "1e25b86db041f21c2503d547e2b1b655f0b99d5b6c0e1cf2bdbd8a8c6a053f5d79d78c55"
+ "b4ef75bff764a74edc920b35536e3c470b6f6b8fd53898f3bbc467539ef",
+ "1dce45ea592b34d016497882c48dc0c7afb1c8e0f81a051800d7ab8da9d237efd892207b"
+ "c9401f1d30650f66af8d5349fc5b19727756270722d5a8adb0a49b72d0a",
+ "0b79ffcdc33e028b1ab894cb751ec792a69e3011b201a76f3b878655bc31efd1c0bf3b98"
+ "aea2b14f262c19d142e008b98e890ebbf464d3b025764dd2f73c4251b1a"},
+ {NID_secp521r1, NID_sha512,
+ "9599788344976779383a7a0812a096943a1f771ee484d586af1a06207478e4c0be9c200d"
+ "42460fe837e24b266c8852d80d3c53cc52ffb1913fc3261145fc6da575611efd16c02605"
+ "9a2e64f802517ffd1b6b34de10ad2909c65c2155e8d939b8115400c1d793d23955b15f5d"
+ "1c13c962ff92b4a815cee0e10f8e14e1f6e6cd38",
+ "1654eaa1f6eec7159ee2d36fb24d15d6d33a128f36c52e2437f7d1b5a44ea4fa965c0a26"
+ "d0066f92c8b82bd136491e929686c8bde61b7c704daab54ed1e1bdf6b77",
+ "0401f269692c47a55242bb08731ff920f4915bfcecf4d4431a8b487c90d08565272c52ca"
+ "90c47397f7604bc643982e34d05178e979c2cff7ea1b9eaec18d69ca7382de00750bdd86"
+ "6fba3e92c29599c002ac6f9e2bf39af8521b7b133f70510e9918a94d3c279edec97ab75e"
+ "cda95e3dd7861af84c543371c055dc74eeeff7061726818327",
+ "1b7519becd00d750459d63a72f13318b6ac61b8c8e7077cf9415c9b4b924f35514c9c28a"
+ "0fae43d06e31c670a873716156aa7bc744577d62476e038b116576a9e53",
+ "183bddb46c249e868ef231a1ebd85d0773bf8105a092ab7d884d677a1e9b7d6014d6358c"
+ "09538a99d9dca8f36f163ac1827df420c3f9360cc66900a9737a7f756f3",
+ "0d05ee3e64bac4e56d9d8bd511c8a43941e953cba4e5d83c0553acb87091ff54f3aad4d6"
+ "9d9f15e520a2551cc14f2c86bb45513fef0295e381a7635486bd3917b50"},
+ {NID_secp521r1, NID_sha512,
+ "fdde51acfd04eb0ad892ce9d6c0f90eb91ce765cbe3ce9d3f2defe8f691324d26b968b8b"
+ "90e77706b068585f2a3ee7bf3e910528f7403c5af745a6f9d7ba6c53abd885c3b1be5834"
+ "15b128f4d3f224daf8563476bd9aa61e9c8518c144335f8f879c03696bddbe3ac37a8fbe"
+ "de29861611feaa87e325e2f60278b4893ed57fb0",
+ "1cba5d561bf18656991eba9a1dde8bde547885ea1f0abe7f2837e569ca52f53df5e64e4a"
+ "547c4f26458b5d9626ed6d702e5ab1dd585cf36a0c84f768fac946cfd4c",
+ "04012857c2244fa04db3b73db4847927db63cce2fa6cb22724466d3e20bc950a9250a15e"
+ "afd99f236a801e5271e8f90d9e8a97f37c12f7da65bce8a2c93bcd2552620500f394e37c"
+ "17d5b8e35b488fa05a607dbc74264965043a1fb60e92edc212296ae72d7d6fe2e3457e67"
+ "be853664e1da64f57e44bd259076b3bb2b06a2c604fea1be9d",
+ "0e790238796fee7b5885dc0784c7041a4cc7ca4ba757d9f7906ad1fcbab5667e3734bc23"
+ "09a48047442535ff89144b518f730ff55c0c67eeb4c880c2dfd2fb60d69",
+ "1d7ce382295a2a109064ea03f0ad8761dd60eefb9c207a20e3c5551e82ac6d2ee5922b3e"
+ "9655a65ba6c359dcbf8fa843fbe87239a5c3e3eaecec0407d2fcdb687c2",
+ "161963a6237b8955a8a756d8df5dbd303140bb90143b1da5f07b32f9cb64733dc6316080"
+ "924733f1e2c81ade9d0be71b5b95b55666026a035a93ab3004d0bc0b19f"},
+ {NID_secp521r1, NID_sha512,
+ "beb34c997f905c77451ac392f7957a0ab8b23325bd5c63ca31c109ac8f655a1e3094240c"
+ "b8a99284f8091de2ab9a7db2504d16251980b86be89ec3a3f41162698bab51848880633e"
+ "0b71a38f8896335853d8e836a2454ecab2acdcc052c8f659be1d703b13ae1b090334ac50"
+ "ab0137ddb5e8b924c0e3d2e5789daaef2fdd4a1e",
+ "0972e7ff25adf8a032535e5b19463cfe306b90803bf27fabc6046ae0807d2312fbab85d1"
+ "da61b80b2d5d48f4e5886f27fca050b84563aee1926ae6b2564cd756d63",
+ "0401d7f1e9e610619daa9d2efa563610a371677fe8b58048fdc55a98a49970f6afa6649c"
+ "516f9c72085ca3722aa595f45f2803402b01c832d28aac63d9941f1a25dfea01571facce"
+ "3fcfe733a8eef4e8305dfe99103a370f82b3f8d75085414f2592ad44969a2ef8196c8b98"
+ "09f0eca2f7ddc71c47879e3f37a40b9fecf97992b97af29721",
+ "0517f6e4002479dc89e8cbb55b7c426d128776ca82cf81be8c1da9557178783f40e3d047"
+ "db7e77867f1af030a51de470ee3128c22e9c2d642d71e4904ab5a76edfa",
+ "1c3262a3a3fb74fa5124b71a6c7f7b7e6d56738eabaf7666b372b299b0c99ee8a16be3df"
+ "88dd955de093fc8c049f76ee83a4138cee41e5fe94755d27a52ee44032f",
+ "072fd88bb1684c4ca9531748dfce4c161037fcd6ae5c2803b7117fb60d3db5df7df38059"
+ "1aaf3073a3031306b76f062dcc547ded23f6690293c34a710e7e9a226c3"},
+ {NID_secp521r1, NID_sha512,
+ "543c374af90c34f50ee195006d5f9d8dd986d09ad182fcbefa085567275eee1e742bfe0a"
+ "f3d058675adeb5b9f87f248b00a9fbd2aa779129123a5b983f2f26fc3caf2ea34277550c"
+ "22fe8c814c739b46972d50232993cddd63a3c99e20f5c5067d9b57e2d5db94317a5a16b5"
+ "c12b5c4cafbc79cbc2f9940f074bbc7d0dc71e90",
+ "1f0ec8da29295394f2f072672db014861be33bfd9f91349dad5566ff396bea055e53b1d6"
+ "1c8c4e5c9f6e129ed75a49f91cce1d5530ad4e78c2b793a63195eb9f0da",
+ "04009ec1a3761fe3958073b9647f34202c5e8ca2428d056facc4f3fedc7077fa87f1d1eb"
+ "30cc74f6e3ff3d3f82df2641cea1eb3ff1529e8a3866ae2055aacec0bf68c400bed0261b"
+ "91f664c3ff53e337d8321cb988c3edc03b46754680097e5a8585245d80d0b7045c75a9c5"
+ "be7f599d3b5eea08d828acb6294ae515a3df57a37f903ef62e",
+ "0ac3b6d61ebda99e23301fa198d686a13c0832af594b289c9a55669ce6d6201138476901"
+ "3748b68465527a597ed6858a06a99d50493562b3a7dbcee975ad34657d8",
+ "0cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c"
+ "507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94",
+ "0097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d135"
+ "71612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f"}
+# ifndef OPENSSL_NO_EC2M
+ /* binary KATs from NIST CAVP */
+ , {NID_sect233k1, NID_sha224,
+ "f23f784fe136c9fc0d169503d361e9c6148b0f1fbdcae0a97fae1af7033ddef25cb7489c"
+ "9963cfcb009a8cbfe44a8510a64a073eb1deae4c324ceb9302008c92c69b2dafcc9077fd"
+ "3cc3c7c119edc3ced36d176ceaa55ac036bf7f07f6fa215e8bb8196e59a5e1c9af4f98b9"
+ "0ab4970885bd7015fa26a09e03c7cf6b4b23d929",
+ "04c1d414696cc3657dd9df73ace56eda2636769ce7082e064c260be45a5",
+ "0401f228c0a75b057eb07fe7ce8223ed4163148c1fdab61e0f787271f836a900cdfa5655"
+ "d96ffd5ffb6027bfaa04da7b5d8fbdbb6202c8bb79f056ce43",
+ "058f8511089fcd59324469f6736b92693afe26bd4719e198f1f2287dc5f",
+ "016bafefb4933ffd00bd1db6d6c4fac8a06375603adc0aa2a5664083ff4",
+ "03bcb84b8f1990cfc7b88f2b8cc817105cd8e150808e7c87b310cdc47e3"},
+ {NID_sect233k1, NID_sha224,
+ "400bcb297552bb37f2f8135a9314a35f5126788bb6fa4dc74152731ff64c5dab4b902103"
+ "d85443dec20e16b1d6629930cdc2bd183d4099f0e96295a63c2fe266f5e9d050c401a868"
+ "1b4a438efe53cbd8f2f43e2a31e9f88926a9c82917d873f6e8cd5ff5eb8c1ca36126b0bf"
+ "c8c2b0e85a7c9e7a45f1875ca9c82019ebedb729",
+ "027cb1d84865a16992476c9e353283d5d6a40c349a8e9179d1b1f403531",
+ "0401191227d064176f4ab020faea61330df5eb59163ecb4ea59c23e6f1f6c8012dbfbf85"
+ "b3624b9f56446f840602f9b839bab1368295b3ae919cb07c07",
+ "01a41af270269be052a62a9879638e3432a1479b05776ce61f45c0c361b",
+ "041a5f1d28b70bfa2925b9428ab8bac9fa174d88ae27d754824c7d16ead",
+ "044d359065672b3d3dfe8389fbc6fc751ca6a46820626c466174fb9b922"},
+ {NID_sect233k1, NID_sha224,
+ "5f74d4b35c49fa454c97c05fdb6b9f6822cf1a2295f15bd766dbcb413d77c910bd8f4147"
+ "e8f317fac2300fa21cb80134d1b6f8ae8e50518c1f648a28506e419f5a6e8f05abffdb3d"
+ "d2587606c7e9c223ecff4f46b121216730ea13202b59128a7616bb2fd23a7e4a5aa08641"
+ "cc07b669641313febfc88d64d99447353dae3f06",
+ "031b443f46c4b5224237fac1022ee1570173f664aba0c84dbaa4246bdc1",
+ "04005f57b0e5f2e175006f4058cbb4ca9a0cac912c551ef1b94e97498fcc5a00f3a554d0"
+ "77b751478f8a2b7c2a9cf15effed958e0ac1a9e3db1e023c5f",
+ "07ff6ef3026c5a960e632beeb7313b3bca0baec76cea1fd9b82cedc3245",
+ "0099741698549c32a4e86aab6194527cea703ff869849c538a938585a83",
+ "02ad706c6f5dcff512498d84f1877eb997dfbe9b3d13b339917632d3cb1"},
+ {NID_sect233k1, NID_sha224,
+ "8f92096876d9f81bcd992369d42d0b5877ac969004d17c8627c58d8b8b7bbf7a37e8cb6a"
+ "fa962b9b043bbbaa5bef4a5ee38d8bd31cb5866b828265a2f4102a616f87009cd346fcb8"
+ "af5519fb577c60d8792472232f33dc615655e53d2b715b15a2697b492f108b7906e1e359"
+ "7c6911f8cc30c7121ae338a6b747ec368f8e4a36",
+ "048f6ca29f35f253a4962734357c995920967b9eeff1ba5fd2080bfede5",
+ "04012b7ca7c21292f8795b2fbfd63a28c5a4ec8c850d6240f973c903bc817001be9855e5"
+ "c5a5064c27d1862010b2fd0d7be5a0180c861a288ceac89d6d",
+ "07dcb9725323fd7668991ce9a907b7129d53fae9016e253c53d057d195d",
+ "0498c4fca6ed7c2998347b464d3e562a74b0e4f3a6c1dc453aaa61bb710",
+ "03a77a13f011404d5c5341dcd2ca44dc2b08f21f09f524045c281fb221e"},
+ {NID_sect233k1, NID_sha224,
+ "3d275dbde44494c45fc15fe89e2ae32aa26426a17e923e895c7941a5582fb95df4d49873"
+ "ab1bde358017f336b911b886b626b744806ab8113418473c441f1964159ded1b12122d53"
+ "ac56573167588e4b55f36b8bca8c67823883a51fb6e7f204d1c6b07ea49b577bfab9ca6b"
+ "8d51f72268b022e3a4db6f9d265ee8382f9b7b66",
+ "019b940eabbe682f961d9f3d90432e347fef3910e641656825d775705b1",
+ "0401efcc9f4576047c43eab1c13e0547b1c5ec1cd2afd2345fda72b5e1b50f00c7b5968a"
+ "f47e58f4ec15c0cd82ccd0b9f5bfde06c7f86fe5cd0105d693",
+ "03f783a94d1de73e4593f5d6d02238cfa0486e3ddf2bc0b95a528038e3c",
+ "013c467531f3f6508534ad072edb210e4182ce5a798d8a46674e92a0b4d",
+ "0685982aa8e2f3e46ecc03e00e7323f3b891da437235cfe9800139ee8d7"},
+ {NID_sect233k1, NID_sha224,
+ "d2fa68e1f7dad02916b12fa38f1849d6d409dbad0344438520b4dd9b77d62d39ac9ae3cd"
+ "eab03ccbcfd4de703c6e798873671731c108f322b9f2a68145e3e210c9b15b879798e5c5"
+ "3c5022742e9819b99edabb2f44d89ae221f7a99dc84421a6905695ff91928db608f86174"
+ "5f17584d56e34b75c47281435b1b0b34e490692d",
+ "07a884b22e29fa9fe945e9ba13c0df8d786dc87cef0f77f069e182dd56c",
+ "04011e831647d0ffd53d75e44abceda753ab470b3cc93b457590617d925a19003db5bd0a"
+ "ecd6504d904bcf9dcce131abd239aeadb9a64a9811eac823cc",
+ "00241b763c6245b83afe61762b161c41467ef35b7f27a9c1066f02babd3",
+ "0514adca3481ac5f99287e6e966a5c223296b07a9456eb582ec5568688c",
+ "07ff6a2f7cb1d2594a11d8d0adb6fe50b4e740f025e7b4333ee26163d92"},
+ {NID_sect233k1, NID_sha224,
+ "3830f75cf9df4eb2998c7c1b5fe11c1476bcf849c3a8fa7d3d0b5bc2292e5d07465ab8cc"
+ "9381c575d909e509c5dac49c78817c04e4bef18bd51bb09aa5897f21634633a5ce6d20bb"
+ "4638cb6c3927351eaec7b62cf4a33956916045c392f325adafb10a88a5f86d7e41dd7790"
+ "8fa7284210071c22aa40ef40da6339c02da05392",
+ "05da61f881d5a0dc085bb93764f584352882923cd237d878220ec624c1a",
+ "04018d740441eff1f785a14d04da4ba69540cbb469780ffd36e1dfae4f1de2018072ab30"
+ "e999ae26b872ef46a9a0604296d02c08fba9477d9e03f0f75d",
+ "000f95c5678fd08dda790cc60bfa578118f8687228a2ef5f31e71a6884b",
+ "074a6599b8cab75e0cf752e3f41288fbc673d52074950edb14f76524949",
+ "03523804351e3224e816cd4fb7191f332585f68053ddb32a85cc0fadc03"},
+ {NID_sect233k1, NID_sha224,
+ "65b9fe15e6c35d453caa6bad39ee78a720a04b60d8a0a0f049186d2f777e48ae2d657e17"
+ "4df53edb7beb9f7d8f21904ed674add0cda5b62a7308de76c324a144021e8c6d387daaba"
+ "4ce48bf7dfe9c8aeee2c64e434ece1fa5ddcafcf3e5d0013a1eeec1742a00d384cc2ec0d"
+ "7eda83bb4dccfb0e57045ebfc27a4f404d03da37",
+ "03fe9f04647f6d82b13ec1ae5a8c2e49bc66b05649ad778eb16149ad83a",
+ "040158eecc6b8918e7813ef990217c603b28ed1774c740382a8af5c9af613301bbffeccd"
+ "41107c7e6f83e24c822d634a7ec064fae125dc8a3ecc4fc9b3",
+ "07731edfb3ef523a165a1b5817ab2805a5cf88043c98ea2393898e19551",
+ "01fa44fa18ebafee6f419fdb9de0e8365520617558b57e9ee89f2c8fc88",
+ "053f1b2da4cabad04fea1111d525f341417587823fce71e5bfd2353c2f1"},
+ {NID_sect233k1, NID_sha224,
+ "d26521fd41eb5d46ece6836e188bf9cb1b461d011c41e002a935d256654d01725378e845"
+ "920ec4a7fd3f379df54772493df50d312c7c6aa4e909e7b83f2442c3a5e85c37d68aa015"
+ "098ecfb0a5e077370f4576f4bc63bf37e1dee06d780a3b6949af5e21c2a0960fcd20821e"
+ "f5f17bebf5fd5b3bdda260842cbbfad45667287a",
+ "05ebce648ace4cd555413de6a456fc487d14bf4b0b9a72311ef480d2f26",
+ "040020b46ecbdc36b4dc01111932090ba185eab2cdc4fa89775f2a6177c5920104cac1c8"
+ "00103c79642321a216bcfae497b037b29888cf9f70c507114e",
+ "027733120626e564b06ba71c4946c9c8bfae43f88511ec6352d2a52f407",
+ "0592de5184510e6ecb7be8a011f862470b918354a1ad82458cf716137fe",
+ "010a9c5fb6e4b70571a35c56744b57baf0108728bea2bf639af1960d1dc"},
+ {NID_sect233k1, NID_sha224,
+ "b778c021b1a92c41dbd09963da07018075d73e54d62df5c2b7bf8abe137151650d1c1c6a"
+ "bce7eebd8f32e8c3e6d1433773f257bb3ba4a4fb6a02c0db1e47d03c27d3a90898ebd192"
+ "7c21df24c4c5443ca5b81f8ef2cc0f5e8b3d08f472bf07085df737adaedec63d99acd77b"
+ "87ba98225f198b791124ac2d9b191cb9251b4b00",
+ "056653c2f85593f789a926ba49fa3da9d7f946d8f1020508c5a527ce813",
+ "04010d65f6f5415dd86a83bb10118abfc1b1670a1664eb6dae99fb68b85019012c1e673e"
+ "575086ec1e76b90d59c2cbd2727f726f88298552b678ba7e60",
+ "021e26c098c9f9da9c782857fe640ff6abb21caf20a093f2277845bd10d",
+ "01d67cbc8209494dca1a74cee5d9894f98f03728214f7bbdac29b0c0e78",
+ "02215f758fcf0d8dd603e79658a8061ab45bfe6d854e52ea7074fd5654e"},
+ {NID_sect233k1, NID_sha224,
+ "ec14e07f615960015a489ef999e308b42a4c571473b9bd64b433dabd9a1b1ad02e33eee9"
+ "100064405175928a94543a80f440040afa2965b4e5f95f768e7fab6d3c0a5f5e1bf1df78"
+ "22f78384e80f2955ea85f044ac60537d895747979f935bb0cd3673193c4a32dd7803e48d"
+ "7daf70a71bc2aa97236615b6411e28fc9a652145",
+ "049a91d320783cc70a5952c32036cfc75d41f1aa84127db2dc759fb291c",
+ "040190528df8fc3ae4db6e12930f176ec9c833d1668ac5808f1046366445a401f647d55c"
+ "e80b18a9add47fd1a8e4aa725297d9da03246f5c1ce503dd56",
+ "01eb80e2596d6c01431e7a4fd9e22903ea85547a31d675ff157a789a137",
+ "04523776d88199ebac2f96f9faa434bd81bde770ad4458ef126fde9198a",
+ "054665f31f92f8897482d34fcb63141a7539577037c84496167e9d3389f"},
+ {NID_sect233k1, NID_sha224,
+ "89c645339ad0eb850e4e2fe583cee175b35feb02ed7541d7e9aace24cdd3939584f73ad3"
+ "9526de6399c86b36de77a018e2c70b532bd0f032f9137d10480acc30c49f9baaa86f9df0"
+ "033b77e98b485bf7a69cb5c281e527d3ccd1fce2415f0dda4a268ce68a0a34b16afda54e"
+ "d922cd6810ac8dc766df2a3a6c5e55972e9786fc",
+ "016a20016602fc7088a60469843e1d29ad67e3c3cb9500b1e2a00d4050a",
+ "04004f157541dc3a8bc8a2ad4dfb3933039b67e331b7353a2fa9ede322f4ad01348a7b8c"
+ "9495bcbecd556870715faf3d543cb8f2368805473bca17b82e",
+ "01df1ee39217d7f0d838e8b2d30a1159d8003b06e50a00d637edf08d6d1",
+ "045d16826bbc425637e7a05b826bc907f7453c70141d1bbd2cda63dd490",
+ "01ae1703cf179dfd1d5407ba2b7324cc7cac15235ee9c3756177444e122"},
+ {NID_sect233k1, NID_sha224,
+ "ace14c4b101d2d8453c2bc22b756af016b5de537df9c3e639d208ad04ae0bf6232dc90b9"
+ "0c33228dc85de956db771ffde05fb4d0b15e4f218ed2771d703ae5bf981252a5bcd60c16"
+ "f14483131a481cbe04dc0adb1fb8aa32cb48bb5008e8a8e5c7b7465be2fd7afbc811cf5e"
+ "a6293b1a464669b49f55f57b93a8707e6042fda6",
+ "00ba922149bada2551b7be1c3df076f3f97ce93c13c50c285fef3f42363",
+ "04012daff2cfab994b9d1d1ba73bd2f8e7883b2d92f760b0d16351ec125fd40115666f7c"
+ "65b95ec2d713c5ab1a3eeaaf0f931b1859733416c3c778aa2a",
+ "07fc7c9503fabba0972e0e8892ec6331e0812c6452d211c5561fde79048",
+ "06477ec9d8d8d45418b9efe7ae47c0863ff94c43d8f392c079b870a7cf4",
+ "06b5a5d020b3d980b9d7880130802435ddb4e7362e36a70d193f18a7fe6"},
+ {NID_sect233k1, NID_sha224,
+ "cec2ba0d1772c87e87d5bbbd67220692bea4301aa1a66e8dbdd7e651d45c26dc2a0d45cf"
+ "c32c34d76ae3e1c61db7b0fe1863457b93937d929e6ece7462ebd16adfd708353d6f7c27"
+ "aafe06593c76da7149b0cc574a4290b0d8fe219f3eada7082aca38dba3f78ed0d5942d09"
+ "5fa5556fc8bcef331ff0a6d5d1f4e6c51d4ff5af",
+ "02d635e12a58cc6dea44e71e87c37f91e8d08659f0b7955d24f65ab55ba",
+ "0401dd33d8224ffe63a32f2de5d4fcb0e5f1fca7ca2ade5b35ffbe75cdc65800bfbe9dfe"
+ "13f99258c787af82631ce2133dc73207c579b29869c7463943",
+ "04ef333049c575d6688aa04f87a6162185e4a57bb752a7f903e3aff86ff",
+ "01ade04af08ea1c1877779fbf6335156b1a1437f3e449f07458d700c67e",
+ "010fa82467d39e5ad51cda8fcedc72ee6a78dccd0c90544814e53ba9cb4"},
+ {NID_sect233k1, NID_sha224,
+ "ffa13cd0f51ae2643d5d4edecb493ddd653e9faddcffc370e7e958abf726a5d67a2ab36c"
+ "ef42ea8ebe22a6f01b9c31f6ffad01e6894487d979acb5e618f765ac0ec3550ac5dbbced"
+ "e8f9fdbe52fbaba5c087ff382b6d7a09b2b5084227d324d98ff98793040884799b96d2ca"
+ "593201f4414f18c43b51c53c5e5059e0641aca02",
+ "0073883e5064e06814fc4de32e15f7a6cf825d2daf6eb1df8c83e25d80a",
+ "04000d3c79d627ee0d2d88f2de2dd082112c20dbc5ed66089454f7b8fd9f8101a2580e77"
+ "9753bcb023acba1b0852492b989c767f664c7047de8e6689fb",
+ "020231e05166271f47a91dd883c580ee313e9a07195ae511f0ee62173ec",
+ "0303eb4a0df97577c4cff531b3f54aa282e76669c0c5ebf4c9779c9bb82",
+ "0692432a7dfde09db7743f08130b3d3327dd98cbdc323627603518f70d7"},
+ {NID_sect233k1, NID_sha256,
+ "c73e3dbac9513d0361dabe94071faf03a11cba18c06d131a172d5f0125b01a5eeb6055bf"
+ "72c7106fe3f4be3bd2b1771cbe7f85366dccfbc3bac20538510c3f51179cc540ddafb2f3"
+ "b05a0d276899674ab1d7d8fb4f6838f04e4f9e26b8c6af31540f63f4953c85840af4c57d"
+ "fa78c704f637dfc8dd750fe45e2c1e149986d127",
+ "01532271bfae8d4dfe60f69b88d3006d58e28aacfa701861cde8d624db6",
+ "040041c1ca965338976b4c45c28b1cb64836b3b4d3e7ba2b1323ea26fbcca201a177d042"
+ "fba7903007db122eabc459e37c2c7fe82e42752b267fafe4b0",
+ "06a54894825644901baf2ec3681ce5aaf93a18757d93ec9cbce7ccd9d65",
+ "03edb77fc7686b520493604db18fc69edb4cad8195a958e27ef289c4bac",
+ "004337ecfac57abb9271909aa43ff4e32851df7818dcd87216d051189c0"},
+ {NID_sect233k1, NID_sha256,
+ "d00dcd0f3212a3167403abed91c20e76f5e7a7678a4fd970f944d11e6a8cd149d0aa6fd3"
+ "164c5a74c0f55193a4fa3d8ba6f99cabed10544625a7bd92b3e0b46edbd4a269bbc10518"
+ "c5268c3910a2aea567ccd32d4c7a0cbef09ea42c20b636d1f711d220e23dacdb9d1146e0"
+ "494401349749e5ed88e38295232a7effbae3aed6",
+ "0550406c0db882c6aee6cf3b6baf377375208c3e90cc44a067cee43efcf",
+ "040073348eaa8f2885fca3baf31830a2b28bfe983e3046418561f62ac5d24700033de5ae"
+ "e6d0bd4de286f1de1e80bf72e5e17083032bd4dc24577b6d2d",
+ "05c0e7ad0f9bbd522c862326a5734a766423fff7efbe57c51c315fa574c",
+ "02103f1a0200883850b6476c7d7e7d2b3e2f60923d028ee6f8227b1ec48",
+ "007cbbc3c6295ceafb3d9cf8411f85a045b11ef8472c5ed45346d26192a"},
+ {NID_sect233k1, NID_sha256,
+ "3d36221f87157ca4db84884b8666660c4e2b6af330480c516cded9f3bfe132543626a39b"
+ "b6aed1964eb5c33ea0b95b9841665417679fceb95d199d55accfce35dd3f2283c1a7ced5"
+ "7d0c4b9ebe3da6e1ff2f979b6440db27caf9f6a4bbfa47e20d29ae304f4d0551fce9cc40"
+ "97eb2fbedb9b24680bb17d207bdccdbe799d5b0d",
+ "0257dc63752920b6854d6c2d1cca68589a38418c3d036e73760a12214ab",
+ "04011a42e9f66ecf030d0446cfb751136347d4df0ee4e031058ebdcc04df8000fb7161fa"
+ "c8cc5ad7bc4477a39350e419776f76f184e28abce886ae9cc5",
+ "00391d36c4044896ddcd68604d5f677d1df298f46abc00eb12f1165e8a1",
+ "04e19bdc6755a603085b66355256bce98d5fdd49b4f06b628e3e185574a",
+ "07697b29ce5546de969c9c4bbb5ea65f712d6cda3410f3dbfa0cd5b1a8c"},
+ {NID_sect233k1, NID_sha256,
+ "033d82a42d0eddf58fbe3e91ddff7190e3f9fc2b1e2eede977d2c0473b358b5fce1f981c"
+ "a6f88fd61ce2f79e453e3a2b77d1baab2b970ed28d5dcff58873a620e195085e61c4b848"
+ "0d829525a1a944e8a4b63352f0291f0311f1f98ceb262804beec1c74947618f8e3b06786"
+ "6255878c2502966cefcdda4f5fa2b13d92ce7840",
+ "029025352297a7be850f8852411c09259b83219135e0e8949c1bd5b94c1",
+ "040184345e37f07077cc8df5947c1b1fcd8404b3c31586d6ebd91b240cf42b019dbc9091"
+ "a5d282fd6e62c34676a06a425e098567b990c47e61ef14d77e",
+ "02b2663a449ead3f8cce2459e04cf84333376624d994fd9312401ae57f1",
+ "03af223fd3a6b6b240e59dca83ce2477a577494438ddee3fd09632ea67f",
+ "0606576d89f2094572f0bbcb58a15d9a4bf10ae3667d4e35cdd8da32102"},
+ {NID_sect233k1, NID_sha256,
+ "671a7c81b64b2919722d7b258bdbd90165bb757b53106e0af03d0eef27452942f40cf52b"
+ "c95cc7f6567df2613cce795f8bcfc723b2735efc35375c001d37c58480d89343697146b5"
+ "24835df3dbd333f7c06c98e36d3c4592ecd1f34ab57c341bb0f4c785f5b8372775f74b4b"
+ "ce60763fad1788e77ea158d735a64861320b36c6",
+ "02dc82d0e69e498528925c0e62a13fda9af8cefd047c10c3ffc2e41da3e",
+ "0400e5463926235ce53a85b489c3c278320ed986003962a5fc7ad4cbab0d9f01453e6edd"
+ "e95670a4653186ebd8246c28a94dd84f5a669bd3293176f1f0",
+ "034a8dfbbdc98bb1d9b175600bffd866306dffadcc4bbb6f24e7f918da5",
+ "03cf1407445cf1a619a280e139242056c23c58979f0b3f0aa7e1fc074e2",
+ "02e55f27593f2c76fafccb71493f14daf50073b35cc85f002528cc6d691"},
+ {NID_sect233k1, NID_sha256,
+ "0ef677f4799298f4aab73b7393598041f56e902ced1726af49657b6601a06186212e3ee8"
+ "cd4bd33b760dfa2ea3c38884f94358d51dd479f2ccc8b0b352fa4e44fcfdcfbb24919d04"
+ "e6ee1108527b8e8d60e8d1b467c30c18c5455e5835d483161d3fc26b4a67d6df9e3ddd93"
+ "31247cb18450188752a1ca219f3396a872cb13d8",
+ "041535fff5d279bcd744b04e643458ce20b81df8a9e01b1181d52bb14e4",
+ "040021e1227457be78e49db22335139a136ba290d34871f90ab5e6a8db6ac100df43b381"
+ "a4d757864c39ce8d0b64d6a32e9e8be30f92a10a252d46a2e2",
+ "03019bd459b34133dc7331caa8976bee67f76db3a45b1793cb545e26c68",
+ "0025611bd4e3473aaea85228b2bf37eb1b4458d8166012aa098d9c1cab8",
+ "07acd38506e984fb7f1607b50837018f9b4246623dcfc9d7aceb486e76d"},
+ {NID_sect233k1, NID_sha256,
+ "9290df0cc50c3cab6655f3a6de1f4cf613d9bc06ea7c99f38038369ff2fadefa57a3c7ae"
+ "7940c1b98bb1d03503cc271f7a891bf38eec93c31dcec7892dfd2e1ab337bedde3e5325e"
+ "d8d9cb7fa3096f6fafc3beb3a66cba66ba826d1032debfb4908cc9dded8c0099c85072da"
+ "ac4373fbc428fcaa9a6da02181ebc33f0cf926fb",
+ "000ecfe580a624df66c25e87e7689fc3b471d205970ff9ab51a64aa12ed",
+ "04002ca7b9c98bb8106ae14a87d5f9f7ae1f99a5524992116e68af89da6daa00a2fbee76"
+ "9eec313cf3c8519d3f96167477f0f06dcc470408e3f637b6c2",
+ "044f065c49bb7ff0772d628104bc2e222f1fde42aaa8b9345d324d7f936",
+ "046301f3f07922d338d5b7d82104597fc50941e4bc0a15ab5e0408f9fa1",
+ "03495e335905b4842b97f00b344313ca7d6a4ff60cfeaa5d589e0a31782"},
+ {NID_sect233k1, NID_sha256,
+ "855c7be75fda372f062709827f333630acf28954a62a5193ff675f0dfeb63f32bca418f7"
+ "cbdb346bf388d62315b19a592267ca407120db93d4e3d7125b867c4c4670b7a57a76f617"
+ "34cead2caf2425eb9ff0a63293e8cd6defc9648257b401463f4533a2425e0024f1ea9336"
+ "5eeee3c6da20d25928602ec8b426f9b39f97f3fe",
+ "013c72c73358ffa168423149ecdd897f0a5f75a641de008649f00134944",
+ "0401c70e1b6c01477f95e718f193e13c093b101e9f16024082ac699ed6ebb601f8013a88"
+ "264266cb5cc5bd38e477fe0a1aa49ae4a5ff94cb58439a7c1b",
+ "07ad8a117f34bf2fcf7d689b8124e08118e28ebd172f8c220d57d3f0b88",
+ "012bc7d380192f2efe55625e39927ef799993af9451c662b562a239dfe7",
+ "035961b27e88d6731220f70e96d555f63853d14149df7bf6d24fc29441d"},
+ {NID_sect233k1, NID_sha256,
+ "9c896f800281812ed57d31623d563377a5c725cec84313472b90e73f77d400f5d4fb2362"
+ "55741b73d46f7e5254d04099bec274db8a9af5fc7cc220d42cc172cbd3c3595c49ff74bf"
+ "aab7b5e46c90855b611f74753ccdbbabf92e011d52e9ba753b83ed2a251a632e1bd5c6d3"
+ "46e38e743950c8ce0f394a837028575fa44bcc26",
+ "00ac60e2e70b7c4cda64071c7738f68773c94df9456a8ec3bbb468fa7f8",
+ "04000109614a2ca27b7a749e53777e0f3ee2f57013ee83ea539ada6d98d8a9005668f4b2"
+ "7213a8a024455b398de2cd7635cb620d7401f5deb4fa9ab2f4",
+ "00098489f0966e27555268a94378b7b8685ac610fb0964694aae9aa716d",
+ "06d151437a0aac232a472af038b0fac095d224ce0e5487510e30c31d605",
+ "0563dbfd021c1b77f980530d0120e93c9ee4f1f092a268bd8aba7d3110e"},
+ {NID_sect233k1, NID_sha256,
+ "139a14ead998d1a962fa47c47ef2953aa136bd912fe940709b8c560bc2a0c4bf8f3aab30"
+ "a8e21b7d5f487d30b0097e3da723f11b5cb4e8c5724f5a2fe0d68ee4bacbb85e5eacf180"
+ "94d2a8ec4506cf8497836a4a905059a998ea750adc54c27c69cbd0b0c1f9743a62f3d988"
+ "f3fa0a9865a73fc071f526623085a2ef12838888",
+ "060bf720052e8b9508a801340c213cf53bbecf4975faee63d4b44fc647a",
+ "040196e37671def44b35c9e8c719130389b40c7ebc0ed5ae354dc73e0c40c700d3fa0a45"
+ "a3cc5dfb61085290f6d18d710ad5d0d3ab31ce65b0e6915a72",
+ "0729c7e1de10e92634857a65a2ed75103df6bd4bf63b1ad6383c37a0435",
+ "06808491ffebf088476de7daf541bca3fd943d4c2089b848a130abdc0d3",
+ "02c0dcfff06a07e928c15a1fc2aceaa4b4dd6fe8eb67ccd4d01240f249f"},
+ {NID_sect233k1, NID_sha256,
+ "cf4a8e754b23d0fffc1c5c80b0cb11deeaba3064b315bc2cee96db5b9881baf90d30af4b"
+ "69066f757b3020706def77a5fc1632d96bafba22a9c8cd3b52d535d941b3c7cc02b7fe6b"
+ "51639d5e2084478ab3a29d2f5e0e16639fc2833a47b58e2c3fb5b2ea1830fe2ff68e571a"
+ "8f281617a23d9a28db1c64ddfb1083d055030e5a",
+ "07cf3c216592febd8630a478b5b3e3a605084020322adb13ac0a626bc7b",
+ "04008eee2ea13a08d4e4d71ecd2547f6d80b8f88879c9edfab5a675831fef2005117c0d8"
+ "a0442ad7b95cac1a984dfb9efbb7eb3c3866955da60e6cea8a",
+ "038de0be25c23cbde9ed9fb259cd9a06b69bf15dafed723970dfcb91307",
+ "051c9c5fe50eb81a11c8e7b2db145c6b5dbff2c51def56f4981774c357c",
+ "053887c6cc2f21bff461c9182c17f634ee2b301c3cc4af0bb1d3075f74e"},
+ {NID_sect233k1, NID_sha256,
+ "ae64030d4af9b36c8d3a6af0aff34e5ab201df04274691fb420b7d5c40c401ed7f3ade96"
+ "065d34f2490d17943e27156e7bed83cd7222d0d5a73d167855fbe7ff6c3ed87f20986ad8"
+ "bbbd80fed5f9705c6c783b423f641d40ff1f367f9648af5a79ea3cea0236997558bd9dcb"
+ "011ea4dc64d61ea1e1f85b4f696ed586bc7705be",
+ "061eda5999e5a9ed4485d2a0ac5510549b76ca37df858ea5d95aeed571b",
+ "0401642d56359cc0a5f261fdc405030d45b0d6f9c08a182d354bf2687dd9d5011bf0dcbf"
+ "62749a99e4b02b284aa7a6479b59b363d25319a5315423a589",
+ "03094fac5381a1b31e53f43a537d9e22ebe6bd2c149f2f69d792bd56f53",
+ "053c8c4f9a30e0500e01100bb97c00ce98f5cc6578686daa1bdbd679373",
+ "047086a88ea014f06d6345608bd0a6010e650b9f6f984b6efea9a4fb277"},
+ {NID_sect233k1, NID_sha256,
+ "94a9d9cd9efa3e4ccf2a37f904dd9cab5624ec9393cf8816ea591c5e70cccd2f105388ae"
+ "133708fb974998ae61d218c71785f9eb808d1c28d953cc7eed00dd9854b6b4568c5ed5ee"
+ "3df3b58a1e04c64f1c87fee4365ec9aa41b08a6bae234dc43a0bf2f61420acdb891a40f1"
+ "7f246972afee75a4c0b249dee0fc8f9b9c8a243d",
+ "07e7e73171e4d2f2989dc024757c186485435b82544a448f5cfca05f281",
+ "040181c8cf579d9259020461184979757b097d5a94245a2b9a1f8a6931ee0a014baf1b76"
+ "1a0af3dd9c0521c6489f9a778da824283c94087698daa7cf78",
+ "02b57fabe6b866fd25ad8802c6b02b680c137ea9b623457b35a24d5a5f3",
+ "07421dbfa83859354345b9c3f1ce6242605094d924a4d38c7bd952e3910",
+ "05ee48a3a5119bb3433b53a625101492216421ce67fc04dacf947ec600e"},
+ {NID_sect233k1, NID_sha256,
+ "4db998df7b90678b8aa4ec6233c9b4629800ad1f3e2cf8f7afcac62fc6982dcb290e4458"
+ "7015eca8dfe77dbb4a80f9bffe75b11e961e70deed14555db6dae47d49e73004f000eb86"
+ "77c18f7e8234bf0a5a104266167a05ef07152e7acc2f0368b37efe69c0c2feb51eedf733"
+ "8cf9ed398f066cf1f66bacd89ab9376d41da35a2",
+ "05f7270764a0444c7159d2db867930fdb0fb9fa6b8fc80ca02e11753095",
+ "04006806c7164a09e11629e16608b7312d9d988acefa626fe8e34e03203d11019c4200c9"
+ "522618dab8a16e217beb3011599ed6cc09291fe9d451f0cf02",
+ "04a8958c80481a18c6e0893da9ab2d48fa6ae30a0f1d0512196e658eba0",
+ "01d301da51eccd15e09ce0bc2d0bdcb215a43ed13792084e2969260d46f",
+ "031f96a2f322d27d0bef23ba7c457fdc45a6e612f7d13e9277d36c8def3"},
+ {NID_sect233k1, NID_sha256,
+ "dbf9b8a4ae316bd2df0c80db1cb5d7038364a2634925ff957d7c03511b57d486274b2ecf"
+ "191746827c325a14dc94daacd66ad86d369e3f598f176c4f0eadec7e9edd13e34043efbe"
+ "0a801b75b8186b4a6d89ceae4fb250ab570d65b6dd7c04382738fe3f6f6c867a7d84b35b"
+ "20720cb0036a5d81a87126f236833831d9ff00b1",
+ "0179b924afa4acf30ecbe2b3c12de533a1f9675687876a7e5e5ddc8e03b",
+ "040175bf95ac8e768727d3b4a74c2b8a04b221247a3b8386ddf35fc39976ad0122f32f94"
+ "1066150c151b9db92b86f86a10cab0828a77e4f0d5c4026540",
+ "0210c75a63699b424585f65497c6e46988c28eff3e0977e3ade599581dc",
+ "06087e46c0677e3ca64a0cf030236583935d0dc03c896685dc6e446d9e2",
+ "0252e42b8f03b085f38c6849bd420837d985c9fe14750a654b584c4cc5d"},
+ {NID_sect233k1, NID_sha384,
+ "986d9e5d636526f4deb7545c037fe81b09c74496ddb8e42e61650c74b6fe348593f0cf8f"
+ "8eca5e839baf62f17bf6ad96ec0c71dc44fdf11259dbfe7499157e402f6bd50769723541"
+ "50723afb632799a990c44cd0a4fa9609ec4db133e3b4700be3ea4a338e8ba1873d345e80"
+ "163ed60d0de274d7617a8382980bc2138b0a2a01",
+ "02c9eb4d392d7f2eef606e1861183acb1fc753d666225f0f154d9eda147",
+ "0400d58fd7b5aa570b1c4b2190ec413fbcc9ef44d33ef191b6e23abcb386900173e85377"
+ "bdd8dac58222cd1d0f7ed98d73d6fb6c2eaf34819b08ececa9",
+ "064f9fb13784c99185f334700ccfcc4ff60b7f4d613c3de6dc5d1b8dd5a",
+ "03bff54e3610ade656bbe002867168db1b521c49225eb9662950b01955c",
+ "01da3fd8c08d8e17692059c669da3c7c4c146df6d3cbeaf34598d28eaae"},
+ {NID_sect233k1, NID_sha384,
+ "68d0be2883598bfb1433886aff118349157708690380c42b8919859d96db069c7fde6e11"
+ "7a3669f2cff94a0f1b66b27b09e3f1b24d26299e11552a084be428446f3174da2e041465"
+ "5bdceb38e58fcb065b6661190862db39c6545dead34a03584632e988d0459659dc7c7c78"
+ "d4d00fc2aa10465cf24b2410f14e2a62173c9962",
+ "024661c89b77b2c743cc175a6130904461138ddc4ef771ffb9fc2c8679a",
+ "040090383de7ca48f1e71a43845565a9f0c53d2c9f8c2e0f6c4ec7eb6437fc0167658227"
+ "2e7ebc9fd56e1010a570d744ae4fa70eed3e6eeaeb0e0eda7c",
+ "05cc5b36c7300a1cc3f624e9e663861b4e296f7e7a27e8f8f0a2d54eecd",
+ "039c6f5b484411c434ee161ebeda7aa21b7bb26bde0301d9ff92921337e",
+ "02aaae737aedecfd5d53af56ef154ac6430a45ff03a3495a34a5fe0e97e"},
+ {NID_sect233k1, NID_sha384,
+ "f0ba0407485fecd7337f4b22236533a926cc744a5f06dd08276750196f1bf7ea7984278f"
+ "789f92dd07e36895a8bfe297ea43d4a1177c0368900e3b969d3083cbe626f0e27e7ab38e"
+ "185c923dff46d9ba187b2acb9cf4b23ec8eedbb8044b96b5263d956e50cd6240c66d5d96"
+ "517130c743752404ed09473f05d0004dc5971ff5",
+ "0065e20e5ce534576d7c17616cd4ede3bf4f500894850723bcc9f895f4b",
+ "04001413f6dd5349e94311f1d25e400b69c0f0ea446294eba4bbeb10278b850066a05055"
+ "d856621161d4f0e33dac82e5c0cd91ed8aa56e9abba9ec80cb",
+ "07377147b59dba008ed0e6b366e511f94c7f7c9088615c6d46f46736b97",
+ "05515a6bdfde3b4b78489194d39f4bb439f58a6b3c3f9e16c8a71590b14",
+ "00778f79083d11efc8ff959f607c4cee7cc8f38b855028ea248fe291adc"},
+ {NID_sect233k1, NID_sha384,
+ "3827276694e413c886129c452c9a66e7d09dee84f5f09bf34e4baa308b4627e096c7d45c"
+ "f6ef45ba1d9a4019a60399feec10fa80e333e2aff1251c85ca48574d9b9e1affb9666828"
+ "dff5afcef3edaf5e8cae823505a0c73afe76c1bf130399fb06b092ba34ab0ae15ac6c682"
+ "f9ee8479b065ce75b57213b8aae0f55e4e386de5",
+ "014c85f66fbbd653f1e4e590cffe62c343ba6062df4b271fbd02e5d42f7",
+ "04018930b4a59a1c0e92febe650347c49e29a4e83cb8c507e30ad835dbc94b00a237bcd1"
+ "30235e34b4439293f15e7a3913d659089e38e5619fa52e3c0c",
+ "03c1f8d076fb4fbea91a97800607b2db3fb5a45149c0d30dce79f07e963",
+ "04b9d2c66d8cc55b64f3f62dc629ce8e50ae0bad8a4d14e8b6567fc87e4",
+ "00b9dfdbeecb061a455dd052258f3828d4b7174af972c65bd0043a9776f"},
+ {NID_sect233k1, NID_sha384,
+ "d1afb8965b48d66b9acb1ece674d9548f83395275f2d8135554cfcc7ceb96450d850dd87"
+ "4529433883709483d0743798db5e0dee955a4f30ba328c7934b8dd9207f3c336cf89141a"
+ "175ebe23d2faed629eb4236a8aea8300604c3eb7704512f240fda66acedf1494a85058dc"
+ "6a31bf9531958c332b93cfe5545046876c6b99e0",
+ "030ac7a78593b570b29f6d3d267abb6ba7e5870ee1c8ee4f1ab2f141051",
+ "0400a409e90eb4314f95967607ea3de9817a0fdb439cf406135262624e7fac004b1dd719"
+ "434e8dfa5861887736f32ecd635878ed4b9e290c423da09059",
+ "027c4987ff872fe499039b4432dc889960ea8e3f07be42e36a5827b3964",
+ "06829b5e02b5849689d152ceacdddbfa8f68d782b3ae8da23ea48b1acbd",
+ "03dba0d2b4400495ee098325ae4450b32b83689349e82a69b799dac2cbc"},
+ {NID_sect233k1, NID_sha384,
+ "4f95b71669fdfe5dc46d4b951b085e099de349fc740535175337127910acf24e9a0e4b2f"
+ "23196ad23880da47b740d77d74fe9bcfdcc44dd7d8d1a181ac290de5cf4da22d5034cda3"
+ "d8020bcc776dde8cef1786c9ce4d2c2cfb035da61406af745efb7ef1a55f2eccc5000319"
+ "cf1d6380963025dcea641cfd15a3106751fec286",
+ "06d7516aa040f7d559cae248e485834e8d9bb608279ed4d4f7e1dbcd2b3",
+ "040127a92888fdac8d4ba9c0243c9aca516bcb431911254bc2cf51883623a100606c30fb"
+ "b9958fb1140643f32c5dd582c2319f71bff197d58ba3e598bb",
+ "01104b6ad82327b0445e75cff0efa1281d266a9dfe4019ba2ed22dd6976",
+ "01f247b2850463e362ff8879054d3459b2cbae84b9d4bc005a2ccf4736b",
+ "05b3dbdf04758d546e54c43ca5973bd8ceba646a4dd5d17ae5d2f8ec516"},
+ {NID_sect233k1, NID_sha384,
+ "2ad9e17780c824c4f2d1e1cbf19ab85638f2f71cb4fa3518f08085b8b358f54d4f08394a"
+ "5ac29cbb3cab828c5f07f41eec51e6cd61a5f2cf44dbfa46834370cebdeb328fd3bf681e"
+ "61011b5c2ebc8945ac7a2a8467606051008b15c89390e111999255bfe28634ce9bc2850a"
+ "2b55a4af1c4c2f94403c78aba1ebc87386ab7b32",
+ "0137050d7b455f43a8dc2516cfff5a91062c1a2727b27df41488f3dcf18",
+ "04015ccc90a5f3906469e3ecf7a70c429f5b50fd0ce74065d41f1bd6dccc1f00fe5611b8"
+ "b1b35a907bc188ad2b1fb7507d1043d148283911af3ad782e9",
+ "04881e879d7c76eb2ee61fe1844567316d7efaef047b96979e6dceb7858",
+ "03799e90bc64cfd7d0246a7fc89a4d8ed0399277cab2af40fa2ec8196d8",
+ "067e8728f4d8398e4e1c25775620865bcc2d4cfe635a1f4c6b7306f6d9f"},
+ {NID_sect233k1, NID_sha384,
+ "958773c37d3eba003aa5c489f72118b3022c52b93399e9d8001695664918b86893f4922c"
+ "7b6e55b1855ed0fd1d8de5dc61af403ad660fec60d7c44bd0102c069957ed804d0d416fa"
+ "cdc1a95355ef58554606579ef89b1842f1055cfa2ae118abbc485356824cc09dddb77d06"
+ "71cb3011b33bc86cac526e3f6bb3293c7bdca1ff",
+ "001fd447b33a2ee3595b9f885c290d241422afdd74c3dc4981955a7e9ad",
+ "0400e706408803188263cb149428c60de57ac757f0776e5b27a2d5a859f58c0153b5e13f"
+ "17f0178cd90427f7d608a5659b9e03effebc89da65d59698d5",
+ "0339300c00cf7e8c6195ffb71e509613018e6a417782e4f52704026a510",
+ "0227c80e36e3571e1c783358c9ffed237b251332e8ed05a8d3b454c53b5",
+ "0679a32cee8ae001a18d9a9d0ed7e99e5ae67ffcd54de7b48c62e76ac8c"},
+ {NID_sect233k1, NID_sha384,
+ "9cb2c496b1bc7f040228571e005e7e936e48e8f469e295edf914f5648701249a20bff6b9"
+ "8b5e862603dd9f12bb71c160aafe9df02e2e383e9b8a9a9d700f4425ce408feabbf754be"
+ "543f52204c849fed6c9d3e36e03dfbd9e35c18d7bb2295f1c484a66e73440a0a5aece5fe"
+ "80b9ade9321ef18cde3eb2db15e4b18e788b0441",
+ "06a061e10b4a6e7001d95411cb31bdea9c84670a59ed61b14fbbb05c8e7",
+ "04000ad2b726b805919cabc90d058c78896d2dd8a78484c1fec5bd5fb0e07b007e048ddb"
+ "487f667633d6d030338ded21a2ac5f65373ddcfe1e4a3424ae",
+ "013b4a86b70f0e4de6efdafd7ecc993f0d6f231b3d743ee5adf82db1515",
+ "0541c2d3b2c6f0655dd415e327f0ef07b03356f8047117c41e704169698",
+ "00300f45026200b8cc84fd564778281bd1d7e03727c242a249d9ad33338"},
+ {NID_sect233k1, NID_sha384,
+ "9a4bc0a029e97742ed3bca207d5912cb568e4403cda106b00247520ea02008b14c041b8c"
+ "9b976294252da835f4ff27456039d79d90315abcb0b9b6958a22352672e229665457ec79"
+ "571ca80447c8ff2a86e6af3dabe7427c8bdcae65e3c6746a56079ce2cf8d22235180f466"
+ "46a21cd9e86032cfad874cb9c67f882fb037a13f",
+ "027ec31ca31acb4d2fbacb49fc085f1261b0042cc755cc97f9b199e7a37",
+ "0401d521f7abc2fd3b0a10732ed641cc1b7fdd7b49cf61909b215220c5253e0019e9095c"
+ "67af1b89ae6c486c4f9889c3f2994743eafe55bd9eafe438d9",
+ "0151aa44fd97be14578d68f87dbb884c960ab59d950c392e607ecae6bac",
+ "07be427f46958538004186d52aa50a0f83d184a9d2f4da2974163854eec",
+ "029d4ea73ab5b336ed44556f6944e734e531a5c71dc6c929e7253323906"},
+ {NID_sect233k1, NID_sha384,
+ "8d89e22cf802dc68ff22d43c436c79311e705ff6fd845e77c880f399f403e6d5e9e2b355"
+ "11553c978171189e288cb2200fd95f84ec5ee9865c0eb9190aff6dacf783ef200e82027f"
+ "a992741876456472bdf27f2bd8ee55db15408c957a120eb64cd24d299818726a73fbb069"
+ "7eba726a326719765735b37a2dcff0c853c906bd",
+ "04c6f4d88e5a4f4f83196f2dda9dcf2a66eaf94d50c851f59bfcea1d876",
+ "0401e2677c1305f545472e373615d195d1f7a315f592e26fbbf44c4255805001638140f4"
+ "8bad525625a87d0e537db5500f034e71e60e8a8c48eea04108",
+ "02185d8ec6f35d5c3f965cd00597d93caf45bbe186d4128bf877ec304eb",
+ "075199f4d8af090e4666754a7dac0c1599c207735c0f54c9f11e305727c",
+ "008cadf59a224f812d64c2f492e7ad4a923f3463b878dffc75eca5f8fb2"},
+ {NID_sect233k1, NID_sha384,
+ "aa1bf5a79e5339fb9ef6c2817bd95725551d064bc5064d6586c5a879901adf808dc2ef7c"
+ "78ec3b434b84569988db58b5e8e9782b1cbc2cc7c9b68e66f32d4ac4ebe7e75b345f654c"
+ "7b8a5e650acc9f170f75b7aaa3957cce248cc69cf93faf8d72abc6fc1cfa9ae2d18a7b31"
+ "ce720147e88e84f6563b2197882fe302449ac5ce",
+ "01aa169ea84365c22981bb766bfdad27e373440850569957544b0f9332a",
+ "0401f97d91302c70798e2278348e36bbe01587e0031ac3c422141e3d4c150400a95108f6"
+ "b7ff41546c98f4ea4d1b587a3280e49c6cd0d33abdebf9a1e7",
+ "03c9efc0f72d88168c2b1f7fa1c6e275839303c2bddca136dd19ef446c9",
+ "0639d1a1066465b4b2f443cd9677cfe3bf5bb33e3e9b14cab2d37f4a859",
+ "04582792ba78f782f112711ceaf36f5f0774b92a6fcaee327d687658835"},
+ {NID_sect233k1, NID_sha384,
+ "475664d5e22cbe0da0d0289ca9a666a37270dc71c81cffac91f6229fa39315c1d55f7e0a"
+ "89b6a7a07df7d391dbdf8fb7af63d2da46ecc3b60110dbcd842da97f98d2b67f562b0364"
+ "ef8e1c589519024177c8ea079794f271f6d35554c0e9d0a39062383c95721b72f4e74eaa"
+ "fb6fbfbda02cb670a7c4c94f67b8ebc6442e84e3",
+ "04a665b92c0c33a3f8b9eb4b0ec061d40b603de36c87096455102ffe57b",
+ "0400f0ac5238553f0cd74e6f34f7f82563cb01138e5c9bac6d5e7b8b7ad4fe01903e9fd8"
+ "a5a2aa32913b18bddef20667061f919f8d61a5b3c814ba4aab",
+ "070ef25950a795b5e22fe4cf5402f49029c5d97cf9f57f0806c0bbb5855",
+ "01248dcf1993ac2eeacd062f853ebb4b2072357e728f0589258399ea95a",
+ "069800eb2e2b3a9162196dbaaf67cab4ae123ea817f223acb6e889f6d7b"},
+ {NID_sect233k1, NID_sha384,
+ "9e5397d94465390a82a3c07e3ebf21b515776d18b4463aa5810e6b2f96ca61e92d13e034"
+ "fa853c3fa45411f51f79df6f799a2c6906e6a5b7896a4576a4464f9e0be2b529a43e1f50"
+ "3fb640d79db6b68f3a3a7deac1b5832fbe86673784ff6db1f8438f7dd332cdd1e7ad9df8"
+ "b6731aad1b6a72bde52e6bc62d80b8da57822c48",
+ "00531540d94823e19ab2b95cbc6e7492e1effcbabce875de6ba96f53aa9",
+ "040031ba225249916a5380235220b9657162eef43d59ccab507639e19bcd6c0062e85d61"
+ "366a73b62255c741a065708701c8fa024a15401a4cd58640b0",
+ "05375df0a23646e8033ec9e3ad269e7167a663b97b4f52cf18fbb5f50f4",
+ "05bdf7d643ffde5ea191553a9c99eb42fba9a8b6e2013dcc520298d224d",
+ "06cdd9e0d58bd4c5cfe66589ed7c7d15331f3e164dff562b6971af1a41d"},
+ {NID_sect233k1, NID_sha384,
+ "3cc4c4192f317e52df6f8cefba6d4cd823c942aaee11b9a0ef5de5c2d181073b7085a558"
+ "05e9554def8dc13eb978e7396044d4f4a14be2c7605998c062095c929b9c23b2b1b2fa73"
+ "dd19a0c0af44ca4789f9841fa62dee8a5f91b3cc4b3264f5f67334c3f0772b30bd7431c3"
+ "fbbf1f34318ce1889b6e8a76ce6d42079a451e56",
+ "022a89addd8b85809e87e0aa2c038593ec277054842854de1197833a51c",
+ "04008e760b282d0ae4eeb2fcbbfdec851468fd8e04c4dec71fc2d5d3a98a1300849a56b9"
+ "b0b0a1ede6b9f9522685e7ace3baa57f72709aba705814d138",
+ "05515b025d6196ffdc8bf275479d72b29a752eb3e70ebf07d4c4e7bf74d",
+ "041902f9b7bc81d3a88066b03e4111ad8ff4d99dd868d5608d1f43eead4",
+ "059adb96af9f404d2f04d89fb39cf38ba5689f47bda749ae9aa1ecb097a"},
+ {NID_sect233k1, NID_sha512,
+ "72cdef5bdf710978e0aa334b86b8ff4a58630da314eabe98b4d611aab56f55c526983d54"
+ "d19bbbf9ddba30a84b18aa0bae9f9503e9b222f842f084db83aa39625403213ca321cc0d"
+ "9c8a136c826e6ea4ec108b913dd0a9ce9d5b8c7e3af53c3876e56a2037ebd6d99f037a09"
+ "7111c837647bedfe4c494e4288ed6427c15969e3",
+ "01df252a11ff97b4421b3a2361db94e908e8243cd50d9179f9e03e331f1",
+ "040129f011fd5fedf3526f0437ae800a110435db907af60e16912d58523202008026ed86"
+ "afa7ec80277f322dfc8cf693089968ed9ceb8c95c930415a23",
+ "04fce14bc83be6f862f06680a32e9a51d1a569fdf1d9b10a89eb9fef4bf",
+ "04d7b8d19dd9cabc3c2245a9d2c8431c3151eeb6f49676a865e78c26c2f",
+ "0373e69da1fe35ce41ff344447fa7ffe6fc71e28dc68244372745739fc2"},
+ {NID_sect233k1, NID_sha512,
+ "8e4eb88c0b2d525b2c58b8e00f32def90e6dd382301de49e0ac053dbc6b61afe926d8519"
+ "3e2c4948f7402a3d7c614cb2c58e060362b0516a1ba4a7425f1b3d09aa20d4c3c8993a38"
+ "7a3248aeec51e6efa8f558dbdcfcaa13ee08413227c8351e3107e9a3e3ac124224aaea91"
+ "bfe50c11c1c8ae582e718f50bc5d5c06076517d6",
+ "01d7125c299ebd0dbcc050f07de931c7ad0450af590d0a2d0228a66ac5d",
+ "04013ebde8790a113bdde87c11ccdcbc39e354b193d772921b86657f53f74a00aae910b0"
+ "e22f1a2505f55fef2eae47ab6d47db6e49190a5469b4b6dce5",
+ "0113d1737bee59f9f477f71f77a0ac1aea86aa67002c34a1b31c421cd7c",
+ "066f9871da9a22f07c9b2a44fb6c01ac74ba17649cecc33b729afcb488b",
+ "037fad90c288510d0cd8e99e5d930f4fe197df779dfd6088da48986c601"},
+ {NID_sect233k1, NID_sha512,
+ "370fdd80f330311dbb3959666001bba61cdacf20f72f78953d946fa6cba02d24b5003f54"
+ "52d535609e489b9434f192011f99f918defe877d51349870e7e75502f61145f7c261dbd2"
+ "a0840926d824ebe9be3c5a77a3a84340aea930378367ed3615a47e3f792c7773f83f91eb"
+ "ea718a05fc62e9ed1d78629b2c27ae44fe8f8d4e",
+ "021238e66119844b146d40e48341f522f6ac2f9c8a0b33aaf95a3099a41",
+ "0401dc3ac1ecb670f867337b752cdbf48bed9f32589366f7c6ba7424af1d6601e3a38ded"
+ "8148bf45484ab6b77e0beff759812493347e32d2d54a322a2a",
+ "03626adf8e70506e74ea27ce740f7eed1c8b37d50415be6a2681c67ad2b",
+ "07a9c9056b51f1fe3e7733c6f54ed96662aa7f5a08a961f91fd6d0276df",
+ "05e7600e9fda45bb966fbbb5a9404af961058a128824b6d84d9d47ebdbf"},
+ {NID_sect233k1, NID_sha512,
+ "f86c4433787c3ec3cb1663389ccf53d62f9425274ccef05fd14b1b8fef676208867764eb"
+ "98d16d006ee6ebdc27b8d9a8ddd303d941fdd82b630694cdc698bbe6bd52441190783428"
+ "6c94b24ee199fe6d646064277f244b7df3ea2d9d52a9dc6a33d7c8d6dbc919da0fa987a6"
+ "7621ef0829e48310e0ea2bb86fedcf4effc0b94b",
+ "015e1bdfdacd87c42ed439f3e243abf27fd42e54f3ebdfb47f60dbae5fe",
+ "0400fb7fa51c1a96baab65fc85c3b769ac84ca7b63a1fe9f507a2ee0c49395005d450aed"
+ "449f8f1aeaa9df0131f696c2bcd4528808d2f52b6a73f72811",
+ "070ca3f5dc30c70e576e2d2b30935b05b6e68598eeaafa1bfcb9e156e05",
+ "07e3cdc4207456773aa52b44156801b316a7ac850b3a9e717a9ae7fcdb0",
+ "07ad6de3ba8730ac887f045cae80fe2fb5237a8594e7125c4792d478594"},
+ {NID_sect233k1, NID_sha512,
+ "4117d593aa92e3eae1124ec7482737cd3573fe5f0f2a5051a7ce86946a2abb9e47a0c6ea"
+ "75b262689b0b486476d2ab09a20efc2fb921419b1811b51a2e15891ae9e45a17ab4b96c6"
+ "65c6c423fc00e2d66df5804a164f0f3c958df6f25d7da6829b1fe162a0a8cf130858c83f"
+ "3555d6ad627db70cb41303cc6380f7b3fed2563e",
+ "00e09410548c17bbbf28a68c3963a52d39743a4f1ac28e6dfe7a6ede281",
+ "0401f5f36a21a3b7fc5ea37528566da695922d7d9b7e6800af9c1a00f68242003df4e2ba"
+ "0c8648cb1fa19663f31786b850e6b80068b8c007f41de08608",
+ "03c0a2a4bea270eaf66adfb297c0e3213254cd87b11edcd90cfcd6f3104",
+ "07b684e337d6778f84bdb7a6835e91877b41d6af4b76311258fbb8339d8",
+ "064a0c22057a858b153ecdf4d275cf5523dacafdfcb46423b5613c85691"},
+ {NID_sect233k1, NID_sha512,
+ "882ecaff3ec8f4023df5397167f238869f78a5c499be19aea85c7486e73f66f0e08e71cf"
+ "85f3f1b6f6a70796bf46a18e6b555a0a87c2088640ca73051b3dd59ebfef922be0372208"
+ "fce602d8001681297b285701dbbe24ccb42541b5db4aac1a1c7f407e11c83db15b38cdbc"
+ "25e930fdc6558f64d9503e214571a435d890169b",
+ "049f5bea6e72d98579b78cb07d89f64503f8759dd7a73cd73713c120428",
+ "0400974dcd68cd85117f363812a0473e972c89551e31c74c8d99f1073eaafc00f306c905"
+ "1cf3b84803307beb3dc0d34a9758a4f535100e846462a49053",
+ "022a5564b468e706762e3ff934aa22d9aea0bf2b116b61182c9f7be19fe",
+ "02e050afb84e1b0591fb64d46dd7d4a939552d68bdb4213f16c5d7ec5ec",
+ "063225df0057d5368b2e103eb2181ff5760e6b2a9c13c83da042722c3e4"},
+ {NID_sect233k1, NID_sha512,
+ "99b3b8f876f8359bd6369ce84f9261581c52d744b90261a1427ab9e447e6d833b6b3e89a"
+ "f8dc770f1dd55692d01c8bbc4277a729fddfa7cbdb2ec99133201dde44ac691a77904ca8"
+ "16feb0a1aaacbb9fba85048bc63d73506eb908ecd697caf582747051a3a38ac8930c9a43"
+ "65f407ed94ca7f2d26913c53f4c010c7ed9d7ca4",
+ "005eaa818690d1ca4838f0bc667be5721d178c3869884260fb230277c3b",
+ "0401f7b3b50167cb2ff7482240bade95f2850a02805742e6e29eabf7f9ad3400f8038a8c"
+ "ffa0f798a01e333251996662bc3c0ee56d94c392269b63edb7",
+ "064d518f7b8c87325d8edfd42a52793d87ef8db283606dd676be8584562",
+ "07128123004a515e277dd5b571e31bbc877cc966e27ed5b2ab2c16e881b",
+ "051d70485148996ec30f92097e4a12b5edf804e03e312072336bd912268"},
+ {NID_sect233k1, NID_sha512,
+ "8c1a83023930a85c5b2f9930521b8b8963d5523a3323d87f862a17d3505ccee01246ee10"
+ "29b8b8c2b608772c4096d1e914cb398f027d91184a8e94e4feeae121eabb504a2a35c8bc"
+ "9294edd15ddd979946c14c792ad787dc2d4deffa284830fc90b3f8c0ced6a99fc6de7c41"
+ "b9ed261402a6b3d702ff86a9392731ecc37430c0",
+ "0603d89cd2f741d734587e77554fe6bbb1e5739d5ff73084d4de8ed69c4",
+ "040122f2b7802917e4164ac2f54033621c78cbc7040217e5ded6b9217f95bb01f867df74"
+ "3e73806957066c2ab45c04bf1af158e146a9d1eda9e974e0d4",
+ "076850b8ca9e454bdb320da624c0dc63e14ad279185e4f8c9e49905666c",
+ "04bc63bafd5bad022fe5db246680a0a0ccd0b50ff50482d3849c92eec7e",
+ "07b6d8a8446ddfc64392af0aa1763d45877023c0be9ec78db47efd3c366"},
+ {NID_sect233k1, NID_sha512,
+ "f3c9dedd7115339dd3ede7d8d06a44de66bf80b4888ab7bc386cd40a92789042440a13d2"
+ "cc90dbcacca5feeec1e0e3c51724146e2c4904ed6b05c7b4e9b49d7f458ada695c5d2fc3"
+ "6f1193329b87c1268aa38eda9151430aa0bc004e5d2a61b9390accfc699f2efabfec785e"
+ "b34f52b1beff1e4c5492e922acc348667d2a3986",
+ "07977b3aba53616dac27b4d74930da23966a88ad98f1769674789c0be3d",
+ "0400aa61b4bd2fa9c61914ae306d69d3ade7d6cf621399e5791dda8a054dcd012e8d9274"
+ "d5593f5074c49ca34a7e2d64f9d9ccdf42df6087134b811762",
+ "03b8ee56bebb59207e107bb0c16938cab707e425f38b70f0bc918fc1b8a",
+ "068502a3e5e51f5481aad31eb6614152f4957eef1becfe3a297b023a94c",
+ "07b6b43be63aa79c10876179703b69caf9b03c5401b999a3c5be4737999"},
+ {NID_sect233k1, NID_sha512,
+ "d878c4ee0bd6c84652d7f9e68df7b90cc78776d8d1b60f3e4d7465032bf401f1527ca7bf"
+ "d4a3dd916e13e93fadaa5e5f20c9f47d12f8fc922a9a3aaeeeef294c221ca1adf7df85b8"
+ "88faec8002f17ff202da1be837827619904121167bee2d2cd694a263d9a99062cada3399"
+ "dcbfcb283597a96ebec129c65e0850ec4cb4e2d7",
+ "050cd20e7eabd29008cc977d0a17e1195d79587b8f15ac2447e15daafc0",
+ "04001ff23ff4ea1f30663b17d8f1c67ea37b8c5df7009d0c0301db483803a400ec6bde92"
+ "921b83d4d84be8a67a23e1718e575101b93d9a800550a20e7d",
+ "041ba36d2e810e47c3de583772e9b5908c257b2aec232d855669d4dae2e",
+ "079e96ed1dfc4e31774159ef311805b5f8001203cf37a72921efaf5cbe5",
+ "00b8abcd623b17357f65ac365301a8823365ab948ae3f7fc6a4a0b8ab5d"},
+ {NID_sect233k1, NID_sha512,
+ "ac3c118cc9cbc8eb3b74d8ccc9ecbd81d1996fb25ca43c8a43bffeb244f722b93c9e9692"
+ "41d45d5b81fda0b399f1e3623687190e428dae077e54cad1eff75ec2f7fbb9434bf71683"
+ "3421bc2634885677579c237340f76787b2eb19b446d56c0f2206099b81493349f4db0eca"
+ "d0e2dbe85dbff7d7070abb3d3b12ef0cec828af4",
+ "02dbb24fcaf9f3cd5d50d209937f0e2d134fa20ee3c9c2f1fff3dfbf302",
+ "0400a07240c52e385ecf75525201f9810859123bfd8ce04a5e8f4dc4ec88b2009bd81119"
+ "6ca9ac45b28031b9f65f9a5c4ec497d995f7dec6eb06dd2874",
+ "05785beb1ff70c7bea89b1fa14be09332ef94b09eebcc9fb1150bfe0d55",
+ "05279bb1b1ad8174e88bec4c723d65eda768c1d08d1c64c332a240a284f",
+ "015a90383c2c40ddcf721067b3435915a843f9c4708cc133fd1ee53f442"},
+ {NID_sect233k1, NID_sha512,
+ "700313698cdfdcf0044ca07bf9e5f0702ece7cc66e35decb28d5f8cb7e7e5367a95cc172"
+ "8a90cc9a53a2b5fcd4702028b742538e9b386f5d8b4a2411579ed9553021a95bd00a73f0"
+ "3c4184a6145aaa367e3af76659d677fe7a2e98f9ddf4aa20eb8d1a1db72c3f5590598801"
+ "be7ebf44255fd7376d89d998b7068bd1296fdc38",
+ "0047142197d3d43fa46545b547968680ec81688589d1ec8d7c7e90eb969",
+ "040179450d83cd6dd1609830ec78011143eb64d2d1509ed1adfa085a58d786003ee40673"
+ "ac564c6b5732868d0f8a57727150a23c484228890d768dae54",
+ "064f8892245a198c9c819152edc168e69dc7b562ef1f54dcc1960cc7db1",
+ "0293f2f989fb6b6e7cf304faf3f63eef61ab89a626cf8152e15f38bf93b",
+ "04948643075cea6413b1c88a9bf11aa176611f56d027f2b165d00d46e87"},
+ {NID_sect233k1, NID_sha512,
+ "0374673e1a685bdee55504ce3cd333f70084dd4ae685464a16924eccea34531663fda602"
+ "29166478b30193459a3113253cd6494dc26154156252dc6e822552c7c04d790eb9f8fcef"
+ "2ea8dd79e72f881f7f20fff93cd73ad303c0918ec27c6486c4da61f82bcd55422d16650c"
+ "c68bfd4b0132c1e7075bbf17dad919095860d445",
+ "031352b49ecde5434aac05f898e6ce4337304845d748f114c14319fe97f",
+ "040187ae6bc9167d9c69ce5544ad650055cb9a4e69c1772322d5722e68e7e000042187e9"
+ "d11a921adafc694b5cc8da9226ddad1b65f764274954b17333",
+ "0761189e63fc0c3b5db92b281e5a4bc0d6fdb30bd14f8e69ca85a211bc7",
+ "0453560e6e725a2bfe0383884ba3b3dd0816d8522d9e0762f781f6b6340",
+ "01aaec4bd98c765e4830de6593280779d1222918d4acf08c8fc3d0aa351"},
+ {NID_sect233k1, NID_sha512,
+ "8b237085f135d6e94592f8d855ca397c8c1028236a3b412adefdac888245874f586d0695"
+ "0ee18118f751bfe26f4c31465ec34b578caa44cf1b7109ac4f6eab7f97ff9699b34271df"
+ "035d3bf58a2ed4bcbf7577cf8e5792b1945ebb9389b680baeb8518c8fdc5540e192aa4fd"
+ "e0eed0d7c82be2e362b286f582d65752c8db7038",
+ "0176f124c24e4420f6e726a6ca25f09dfa0c5a37e5bf879e7bdd36c3b65",
+ "040098c37cbd44aac5d5c749524b840fd849652349fb3e02cc8f8fd0a237900151a9a88d"
+ "a407ae41e52b3dad1ea6031c7a36bd834007c0cb1e2c2f2f0f",
+ "022e299985cf289f2fbe2b1b270fbf12ba818cd2b506f642e659cd541bf",
+ "0686ac0c09f90a077cb446c910e07fdf23e845487d0333efc65b9b84147",
+ "01688b18cb42082bea69f18511b0fd9fa35da83d738763cf13ef92a119b"},
+ {NID_sect233k1, NID_sha512,
+ "e3a086ec15574f7017b3cd5f5a47ab7a73980f11074333490dfe9f8ad8926f9ea7c82271"
+ "aaa74e77133b1025b0b22a6900fbb71251bb6549341a23d194e79d03462cdad52ee0d1b6"
+ "f5d0d14e1136026961fa3467ccf0864bf7ae3fcc3b68cb35df7324bd9bbe58fc8aa9f63c"
+ "19feedf19d935b71bf5981c74fb2a487f84e453c",
+ "0755c48c3dbaf71042c58cb137f3632e3cf9d90b7b9a58fd378feef3d19",
+ "0400bd9a720553afbfc5349e4a65a21fed0444c30304f7018ec1ff6fc8d1f90109a1d6b9"
+ "cc4fbd0e888d0a2b6883fd06a5da347c0d4f7882fd29eabcf0",
+ "04fedf8785c6648798748504b1c9b6a066ab6606bc9a69534f93e908f4f",
+ "001e71744a1b683858444da0d270f43b0d5644424f2b38ef48a639685b3",
+ "07ff8199ffe723abacf1947a828e8596dc49ce655319087e4aca6ca34ee"},
+ {NID_sect283k1, NID_sha224,
+ "ef90f85fbda05e693006e4c64e1dac56223becaf0890f73b5274e6e289a5a1de2c141b82"
+ "5c24d595b3fd18ca855b5c1aa60dac6b5356275b11be670692cdbe5f282f93ac7b2e410a"
+ "96cb9e9f80defcde98f3449f99e192bfd62040421a0ab8f99acb85369f25e5efbf81439e"
+ "fa8a5e1d9cf781355a0f47b037b09fe4086389a0",
+ "1e846c830a8ec04e8572d1a9d2df044ab47352fb346f67403a3bf87243871b164511c53",
+ "04012e43e20941f2641154bb66a56f2e0428a7ad22d607fb8af658df0b382bedc7d5ae22"
+ "cc022f226cd65052071066963b112aa302973fe2b5fdd7bb827d13da7634dd2fb9e3852d"
+ "db",
+ "03a76f87ede2b5d40a0f10e15e90e29198fc3a03943efea39ddf7afc37ed4e18832af8b",
+ "1be2c776c707098438fbd0561de578e4b9449f955a25626f2fbea257fc578ffa1bbbb70",
+ "1aeef69983da1a535b10a47e66d890c4413c7a8cd6a2511a1a670a4c573d4808f46e23a"},
+ {NID_sect283k1, NID_sha224,
+ "a3ebc17c867cc9c7c28797f6364f6574b80c7ec5b2d8e1542a6f5db8568c15032f92cfbc"
+ "eefa3fe4ee654f690b0455ee5d38dd84bb8665ffc1ff8c849bdbc4aa0ddfdbbca4eb3797"
+ "2fcbcee8cecc1aae21ec736ef61781716b60247b7551ec4e552d0b59a53cec5964c67cf7"
+ "988787cedf769eabcc9cd5243f58034d96f0e43d",
+ "101c5ed48231a56ca0ea85eb45de0e395e6df2efd4987a226ae36489dd8b2dfbf7c465c",
+ "0407011260f504d809baefb54af48c890f94fa5984c8bf228baa4b6ea14d46372390d1a8"
+ "ac02bbfabb680659aa2611435c4058ed773467a41cdda8250f3490e4f491f1bbae452c5c"
+ "36",
+ "12a3c7f0b3d64614ff97133873d75c7c1406e316e8cf60d22139dba462055baffe6c8f5",
+ "0a9933496d60716a39e1c3f3bf22a7da546eafebef80dc6f25d0c109ecbc430fdb3e80a",
+ "0be56197a0098b022a7914c10f40207da58403d6c7d04edaf7efc96de740cd71f67e0de"},
+ {NID_sect283k1, NID_sha224,
+ "60269efa4d0ffafbbc655f6f00578eadce7fc0a7eb7db923dca49b6f2bf3e13f7f829cc6"
+ "133e022c3c92143c075ab9ced0531a91e6e79848194ab98bb852f40c84e7aebe71fb8bc0"
+ "fd1f97ed5bb6bad6783d8dc048df42738e841d978456e055e1b8a781dfecfce2218701c7"
+ "af77e7894ccac5bfff360aab0b6136b978bc39c4",
+ "019679dc589440b11f82b3716e5b2a2bd42c3b1c83e88a28e304cf5148877faf760b4de",
+ "040743ae04e4b07d154ca0749a011c97a31ac68d8e1da3491f331136873598896e5320dd"
+ "cf0776c05891c27fd912267ac166bc9acbaecbf80ccdd887aded2d7b8c2a4a5d139833aa"
+ "d3",
+ "099ad7fba5284e406f6cf200a39e398aa0426448c09b95e691f653d6096a63adbd39965",
+ "0285a82340d9a6d96ed9ad0fd0916216fd20edf979df41a55835ef8fafa00d242ef6f11",
+ "0a8548b405c171d2a428507f7adda4944bade7cda6dc580b1d3f94e15d7e10f0a08e008"},
+ {NID_sect283k1, NID_sha224,
+ "59d704d5b1f3a0605f1497f22f71b8f45b26138bc86371f00a4517554e7f6e7fa5d35189"
+ "fc656ce68bd2cb8510fa3e3c3df815dfdd749b2b6ac997d443f3954c7a927e138b579801"
+ "ffd035cea90840733e7884ccfe43d8d3a4a26b430673274aae312abe4ac1e1d7c67b7358"
+ "0fedf2d8de46572493c9205ebf0e8b4d75ccc88c",
+ "1703c21fb1e09f8947e12fddf166fda6f685221fbd803d75a0ae377a54a1e494e6c5e7b",
+ "040767564e13ae544dab22c3763c5d330a5571e07ff8f2f5ba3fd729379709b1fb184f99"
+ "0c027f9e5efbd1ff6ac53a6174670eb463b12f70a603354e25c577ea292b13b8e5f022ac"
+ "9c",
+ "10d875acb4d0dc211a82e78c0249e74de16768003b53830bf5648cf911fef6a57f8f048",
+ "02af92243b9dadcf21561ce32ca0744810478f8d5be8e0f83d9632ecd8e86ff467268b6",
+ "1f6c50fb3bdea228a6b623be9e2ea2c371dcfeb0e604ef1029b6766c43b193d86c02f27"},
+ {NID_sect283k1, NID_sha224,
+ "12c8fdba3bc5f68e13f7ff8e7bee876fa68a970afc6924314dae0c2482763ced8d4752ce"
+ "c29ea288d350acd8a06c69289ae41ad345a1b88bcccaac903f2bff39015c289a8ad60860"
+ "6bfd65270a7bcdb5fb10c89bbc2d16dcb91fc9735d66103f6b1f3575622cf4d820929031"
+ "5b033ee1f79968939410f465a2d37add46af2d59",
+ "071de8eb14cbfb88e61b908990ce08b81e624ef4f2cd9cdf3dd7ca9097d5ffed9ae9a71",
+ "040136d50e1aa8203a0cd2c2d545b81d00b95c6b43b74b1fba3a6402abf756d38087affd"
+ "49046bec77240de7bde85ca4345f27c6df341c72a4eccd2cd495e86376c183ccb34f271c"
+ "d6",
+ "1d80734927505d8d4818b3bdf1aa2e5c557e5f717a5b3fb856ca9a2161bfd74a130ee38",
+ "07894bf10885a698899b118f57e7da22222e3d187a0aabfb99fac0ce0e134b6b44a5f90",
+ "07b4a87592004d6ef8345415064b4b4672db2943c7e6098a9e6d59ee3324847e753703e"},
+ {NID_sect283k1, NID_sha224,
+ "26013a3ddf687bb2f37d9700923906f118d5cba5d8ed5113a0e3e84cff00918125108f74"
+ "f4b243e351aa5d07fa7c6ece29f5700f23e50286447883d2a058c3258a12e4ed8770cabe"
+ "627ebea7ef6e8c77811ed7d9a19c53287093e39226236587ddbc63b7ad5e7ad9895c64d1"
+ "d03ee432d45a067afe27d4cca920ae88a7a68db1",
+ "1d156eb15762ed00c4021884adbfc2426e910b18a5bc474268196f4b74e593a8f38702b",
+ "0400a99b45860615d7caab2f4e9bc01196a61f52f95c6c7fef615a4746d48553692d5fcf"
+ "13056f81a0088dec1382f8a3a863901d3443c8792cd13ce13a8f63b02d107b66d9d23bc4"
+ "92",
+ "1999524ce9525d85b562fd13634fd9ac50fb76d83b9d72d6976d6fbc47af7e1f354eee7",
+ "067748d49389c9b87a85b518f84f41b18f52569ba531985b8fe5e1f0cf9cffa958da3f0",
+ "00c44a583c704f69160c6258332f3121b022759b163c74c7c96058fa8e3a9928afee948"},
+ {NID_sect283k1, NID_sha224,
+ "c4dbf70b9a2165e7279122460d05ceb8e43e03fbe2ae7c314007fe2b1d8567cac727a10f"
+ "ba5cbead0ddb167d387da8e8f3d6bc0ad851cc32885809d07a776fd4a95a979fe3833610"
+ "af89df0f454d9edfabe12495a118fe83add5eabb2acf54ba7ba7c4be20fc77478c0a0f07"
+ "26c4e60317422a612a234a7567648603b63f1c12",
+ "17d6eb1219cab8577168be86b61f372b27ca70fb1f1a767947895c185344e966db17aea",
+ "04065d8e43a290a6957230501509b95a208a6c37ddcacd1e882d97c73c38b2a256caef5e"
+ "8b002169cefa6ce170ce20a0b5463f5bd146224e0813acff304307da88830b0777b86cd3"
+ "d2",
+ "1519e37a66b4e665b2e3e59b8e836869a886c879aa1ed47901a6c8a8f365efbc67fb410",
+ "1734a8bc9a13f51d921a297bc6b2d38610c20b32b0adfd5efdd01a4db5084f3b0697904",
+ "0f9f00b25a33b166f09e2a819dfda80d87f6a2419a7b4162e435ee02c0fc10a669df6d4"},
+ {NID_sect283k1, NID_sha224,
+ "b1d53b6af1face9b59af11c726b0099111d1adb3666209ba46b1744a528ed0f72be5a1b8"
+ "2423153b896384faebef0362343e2a4599803c08b8513708938aa8a498145fca1c63ba41"
+ "aff06d1a18aa2a045fce7fcd7e5552a2b98d0df97b6876f06a9cf52a7a40fb737996adda"
+ "97c3cedf7fe421235ac6951060eba9c0377e72a2",
+ "10ede9be6615b3b2a294d67da78127ffbf3a15bdba6f4fd78be7a60415b5d1a097c0cff",
+ "0406418eac385ce94c1982c216ffeb0b26f9c061ccdfd785ded75efc6a329385898331fd"
+ "a307d41f9cf1248a37fb8baea7f3545bbca707a903966019ad56e4dc810b6863e243968b"
+ "48",
+ "134ac4de6ed71106d11fa736960eef2873223aa87b1c5bf5c823de6c78092cba4726ec8",
+ "12a37587ddf224faaf8dab61210310792d4ccef650c98155a227bf468b7f323575115cd",
+ "10982c965331cf8529ef6adfe17dc3fde63dc2a557cab451d7c9408a089229e22b73d43"},
+ {NID_sect283k1, NID_sha224,
+ "e78f538b1ac21602b00a09e3db243ef4803b447329c94a1476cd91a88ff790da71421b60"
+ "092c8a6e55327c7982e7655eb1fd6e40fa9b9fd2f10107dfc585994dfc5bc2143d18794a"
+ "39f7f69ae679b27dd11ed22040d5e93aa83f71783525a4db0c3fd7b43e57dafd0033d531"
+ "7680df19c2ecaadcb37ef896c61a758a5e455206",
+ "14f237cface123b64e8578ff33f86bfd2a8181b9c81f36b9ca31e2a446f0d91dbbe2249",
+ "0407aa347c03d8845f1566bbc3fa1d66ecb41ed1dab0a402405d8300591a1f3078f9fa53"
+ "2c063bd10274437c2690ed6df60ea632f3d4faefcc07a72ae8d85c2f999bafd373053265"
+ "dd",
+ "0570bf3b42aa44c11603d94e14b524b8cb1363306196924082ae71021707c3138503031",
+ "10f7f4af1c1e3f9e8e0c95f991c348bce6725f60aa12ee7b398be64728242088a469a58",
+ "17145a39fa4dd237e31a98daf3974138638b9462a31b87ada3eade6bf7f597195eb28b6"},
+ {NID_sect283k1, NID_sha224,
+ "8a6ca8ec436d2c706fcbec6486b5665b21c174edee7ebe108211c388b1219a8224179f74"
+ "38e0bb7d6e41ac4a67337b52d4cd9a069fe6c88960ae20be29c8060efd7c62cb7a9a3713"
+ "6a250e68f253e7f27755df53ce7c570135641ad49b43507e5483e17b919cedffdc0d4913"
+ "b1d5e0ca0629876c0a551841a0fc2090d2857cce",
+ "08dbecb26587cb2ed7df2404e680fcfa5bf8cf6a58e87a350a1600211b3c844ca86daa5",
+ "04066610ce348821a77e8a6eb74a675ad9312b2622ad2e1e6d8dcd0be8b27d8384844a72"
+ "340014c15776bbd144c0c24bf419237db9401fb7f97a7c4c0ef50a9afd27c3964088f796"
+ "43",
+ "0204586a9314bc14bef8ccce8b9ca3874572b375d01c6b4a41c743c16502a27e91a9fb4",
+ "0fabfeb17bb8c1a57af7af81d99cfb7b0ecbf4e5e4a6ed483aee4be8ee4c70c2ef23941",
+ "08071e162dfeb068e3cad256c3603e07ae48b35f1bafdb726cf4ce32844e1a2181f23f9"},
+ {NID_sect283k1, NID_sha224,
+ "95bee02b423d2c6e60252da4632f693a2d8f6597b4f9c6e356f670c3a9e4e80063e92fac"
+ "b6421d0325b99dc150464ed2ec1d0bac72a042b35d56d33d2fda686a75d582d475652221"
+ "8b4ddd25ed45503d90d3d185cba6cf0ac211b22aa4e1318a8316c369186f7130446dafad"
+ "64f7966f5414f43af37a87127534060a23c6165f",
+ "191badec2d28cbbe62c072c6b57eb5d4644d0c0b3283951bb66096cd15edd43a1bbde53",
+ "040020224b00428031056ed370147c51e68ffc02e7fe269ca15b22310a2974d383c6c83f"
+ "cc01686568fc4768158e75b4ef0427d8e262cd0638801ab158311749e0f432d5b69a667f"
+ "0d",
+ "03b1b6ca5e627f00176b599b68fe54e1b5a272c323a06b55e4871875c0e729c4c79326a",
+ "1ade251b9360a6ca1b48c2fce0768a01193a415bd23956fee1e5c4c5076b3571abae082",
+ "0adff25020af4e2b4908a33ce1d75c793934921267b6c4a0542924300fce40fc0031021"},
+ {NID_sect283k1, NID_sha224,
+ "ccd7f7c0e04d1ef9a3c5617d77480bc624beed6582bc28e9e3a369b12144fcd96b735ee4"
+ "1713f4173b64b28c6102d82dcfc7876e06e76fc497d1d238bf6d85bb5feca630bbd0c0f0"
+ "fa7c0c72e28e9259087698973ac66244bc6e69c04deb22eaeaee7b20da239ab6333576f0"
+ "1349c76f594498620933b8969450ac2bae66db8b",
+ "0ff5e3d66eb57fd35ba4472effd6e7a016ca461e39000a7125e99080f6ab6ef4380dd7a",
+ "04019d8c1d9aca39de0e627981d21e35a628c35fd4096aaa86f61625fcd078f0400f615c"
+ "d5052ba2854ccd64407f6779c5e259917b251c9e34ec0d95c05488f30802b82cf4b25b53"
+ "89",
+ "16c9cabed653c57676ee46c8912cbc507b246078834f1667d0708e4c666346299c1fc03",
+ "12ac0ec9501ac91a2b57220e9c00ec6e815399ede94a658c36f9e89bbf1674316d65dc4",
+ "0c9480160c4e9db4e82b4ad26cb79e083e9e2056e68a2ea554aca45802bbb188389bc4f"},
+ {NID_sect283k1, NID_sha224,
+ "65e9124a2606c8784c9489add2999f4cbe6186395df20838d653b263a207ec46995d2685"
+ "b55d1874e7ef05a6a3bb5b60a7be6751ad568cef1bcea2debfc494d1e2ece0dc8028c88f"
+ "1b2c6e4ee26b639c5e81f6448bd25b73ec4608a8e8cf4e0155c29b6f0a62781493b03bb7"
+ "384c9808529d5f87da6564ae196a365bd282f46f",
+ "1f3591eec4a8a3fe6ae6debe230d238a6b73cf3791cb735add1abee64239bb100f15166",
+ "040483e7e2b8f7ff95b86008c3042ab83a4b6a48f15ce1cedbaf3b586b56ab606e6f23a4"
+ "ef0287cbc8c609426f1665976e8120afb8de96b43978762ed44bea5aa1418b9af6922c60"
+ "66",
+ "08165da5f5427b38c447382c8dd0940c3bddf8f048185e6cad260031f7c0a2ffb83027e",
+ "09034633dbd735cec6208bb6f4455b295b7d730c9301bbd1c0e9f101399f2b3425a13fd",
+ "0204ec149b416ca3467e92194449cf2ca0f41ca1fde79145f3af856085b298149a3253b"},
+ {NID_sect283k1, NID_sha224,
+ "e793c60fc725fd537d5fd38e9b4fb52e268722ae6bde5a058de8d20db301f5e8d8e1ad85"
+ "532198835a04b76f27ca3c972be5617a55677cffa8219eb64fe53ced242efe1b88999097"
+ "9227dbaaa15ed39d3b6be8c5a3237ebe12bd96f333d947f80048463d3859e34f865d83fa"
+ "f03894c2243a06cc96788ed952e606c2d8948271",
+ "05af03cdb45961e7ff35fb0146904ddd6c2bfd3cce814073d3aa56eaa9f13b4f7423926",
+ "04070bf676b9b0db558eeb8bb94a1248bcb599d1e8975ee13cd37dcb78af19307d1b7e57"
+ "d506ed9bf30c627062b99ff9d05ca03441b6194c34364cbe7b73b46ec9716ad8a9970cbc"
+ "99",
+ "192c7b1fa8f221edecbeaa51447818474dd9fc89e962e8e87400938ef0dff432a6c4b86",
+ "1df1a4f9578e9cae8102aab5eac70eddbabe4ced99b5bab1b1dee59c41b81e392968c14",
+ "0f2b1319335ee497fe3ebf1891a71cded59704365774e1ed9950f79100e70950783bc7c"},
+ {NID_sect283k1, NID_sha224,
+ "a57682d21cebb48190199e9f57493696eae3a59acd22f64d5ef4729decf6c2615b326817"
+ "a6bc118bb7234bebfc7276dd998838c009a7348e46431574638dadc48538d6048d572e50"
+ "d9c5974d2049ebe1837dd857bcd1447b1514b62808a4e7a88162ae1bb08a0f6d3db6f258"
+ "74c6cd0cd4ca6333f1bd57bd192ef67e4616d182",
+ "1ec9710ada06e6270720692a06d488ae2ba863b905dd2fc323e7ce68dedacb35fc8c7d8",
+ "0405cda72b5b068f70b3c431def41b8ca1d4381e8c2fdf0821cfc17eceadf5e3eabf7987"
+ "b7079ae508354fe31899cda71e01cbc80e5192d24f1f13c954208d2ab8412802407ae376"
+ "3f",
+ "04f7b9372a8fed536396f0b87d4b20494786bdb8db77200c1aac1896486a05d3c940cb5",
+ "072ecde2a8f506f0fef273c8915a9edc29e440d48fc6cefb50e7117492fb4a13e123bed",
+ "0010dbd6229d770c468f5d8bd20edd6928bd8824b7fc2b10dc45fbd3242191e7557b984"},
+ {NID_sect283k1, NID_sha256,
+ "f646e7334e191c2bf0056d3bfd23f03ef7f0777b923f962519a8399d311b8f68414c689c"
+ "a34b96871fae99eb7ea534fcd83e788e56eeef817cbfe33677283c736b99bf6a626f9515"
+ "291e842bf99f694e4e8aa7c9911c591a87d5f112b3d96b064594e2b368e6d1bf1a1cd343"
+ "d54916a66da22c26355266aa2884120fffb8b94d",
+ "0668de088c6913640fbefbe6d2c44ab26e481802dbf957044a4957c3c5d0a0fde331501",
+ "0400d3a50cb9d347cfe45d2a313813fec8b928a9b1defca6ff4b89c4787717f275c6b733"
+ "7f0762e47b0669f625c39c74d50e2b46875ef366b7c3b005c16ede69a2fba161faf6b3d0"
+ "db",
+ "0b24bf54795fa02eb9527f21ead5497a6db2bcc7849a16d206239f830df313dfb7a2716",
+ "0852d8b6fe93b0b36af5d99530eed08669eb9a25972fbea59f32dafe88b722bada98ab5",
+ "0e5b08d410f2252f724dfcecaedb37b92a6c09cde646ff6237007f4199068f945ebebe2"},
+ {NID_sect283k1, NID_sha256,
+ "a2d7e69ea381d3edfde4664c56c4cb140d01cc4425df757975cedc995b89640dc016ab41"
+ "9b137ff25a6a6d64a309b23890439d2ba157262393cf93d15ca1b1ffd19373ef12367f88"
+ "98aaf56d5544c2f019a4854f69b3d8d320e03135bb7b675e588a5c3fe4b703938fa0f964"
+ "916501297cee2fd04af767155c7739419f9dbb7b",
+ "0e6af57cf47de1e6f07041eb5e1a413fb7ddd82f8c7f7ce957eb28a118004930bec4dbd",
+ "04021e31c4e4d412a261e40483b9106bbc1b0d7e7414e53d7b9fd84175229c8cefbbf6de"
+ "fc046ff2dc601dd407883af7dc71a6ef4286cd3b1b6ccee4fd861865bff8fb38ad51b63d"
+ "49",
+ "08f9e2113d0b223c04e678e8ebdd3aab4816681a9ef08b18a38afecc57d79c971421469",
+ "0d2c9113a18bd51008fd327a55c214c9584b6f1b816cf3b95e7346080da2cb07dcef8aa",
+ "19167051872759c36ba9eeb5d620cafd3289e8b7660fc847ff385b5143b3aca38780639"},
+ {NID_sect283k1, NID_sha256,
+ "7088f60e9375ec6a42f705f851fc76cc833c4dcbb3352adcce9f59197c1b7121e7aa661c"
+ "4f8ad9f4ef280af3a2981e90c01291f7d1cf7d3ae2d96b37fe6975e11b7c6c02b8ef044d"
+ "1470b1a26b9c72e8c4e7b1dd83c8acc9542e2fc7d211b87841dcceea2ab8128d0ff7bb62"
+ "2b60faa4a89ea7008f7d55f8f9de675bc4596fd8",
+ "19f9b63fde8c6aa6177f2a38981505d04f8ac62bcc21007b05615d028cfe851ab9cbbc6",
+ "0405a3e567b227869f948180547c2713703c90698dc04864140d22b24bdf81b3996829ac"
+ "a505b2ba535040afed0bf6f9d850713e54013729bc6dcbaa336ebbfb9c461f7ac61af480"
+ "01",
+ "051e20545a0a98dc3fec59e4ebdf101c6aa2768f344c1e19424c1eaae4aaf7ffeb5205f",
+ "05fb3329f63587e8febcdec49f92de88366a9f75d0b9a0f374dadc6e7a62b833753e990",
+ "12edfabf1ce434c850b58804f1f31f8afb20fbb36ee69b68668e231e4c04fa75e658478"},
+ {NID_sect283k1, NID_sha256,
+ "ffd6044ab991849939e8a29184b4d0ac3e07acb63c7e6b886df9e8254073fa800d5910b9"
+ "fe34fceb547565a2344eed4de394ce2251ed51ec882ee9207eb7340464c742d9d140fa09"
+ "64f6bcb1efcc2d13919af4f727953de41b20728ab975c1ae0ce784865f23ed1325c68daa"
+ "95ed5c932893610179be94f13b9a4149f09833b3",
+ "17704c1f436beb52f7ec97192e23e206ec09f9e8986e06bef71467c192bad6f0066b3c2",
+ "040329294a36ceae2b2c56bb6e21e52ec32af11aca9ab7785be9c2d79652e7960c0cf7a8"
+ "ae0658a89a48fb95cb7028252fa9792d91b989d7cef3fda8ba9c8e4ffaf19269f2a69f0a"
+ "24",
+ "0aa8d2e210ae40ba1f9f051ad85d37f7cdea43aad890ef802519cc5773e9a0984fe5d6b",
+ "1908e3a2740fa04ec0b23c964c4c3cca51c4603e7553461dd02f8319a7ca2ca09d0aef5",
+ "12d7860d7b438df4653fe40fb9e986cb035b1384464e061bc4ee3bb29aec74d16b0a694"},
+ {NID_sect283k1, NID_sha256,
+ "c9f81c9ff7d80011fd41f2de97a6c1e6a22cc2da7b2b9e4c50e1354c3e139b44529ac786"
+ "ce795fc501dcbf11a935d4728a7bba44b4e86b5e5990fed4d3e24fa5ab6f303e1842918f"
+ "156e00dccebed6897c852207ae5941c630014a41696882066c2b296d39cd8658cb5830ee"
+ "e78e29a00335a99a0ba90722ceca5a2e9a99a2c6",
+ "0c7d1ac8faa689698f5c6325a3b3f35e7730bdbddabd0693f2bfdc5c838bd62f84508d4",
+ "040095a930071ce56f28a79a66b751283c756c4f2566ebc2a10770ca60cced6914bc9a0d"
+ "77046f70021e7a949c7f55b059d4c8e81ee23b13809a35932d83b8398fc8684c5a90f3ec"
+ "71",
+ "038ae832c25dcd30c1ee3f5fbe84bd8779c876c0641907695aa598132b0e581ea528332",
+ "0eb27c86d3ca86ef53aef0465d257e6b681f891a6357cfbf51260dc6e35a82799de0e97",
+ "0e8207959e8be94e7407543df80d38d9e662106ed68e1456dd1826602c5b73f27ddc901"},
+ {NID_sect283k1, NID_sha256,
+ "a60de761eb32490184dc1d29e21fa33889295ca587b994746874c7289eb9c83e9c7bacbb"
+ "4066c761a06b65ecd78d701bd41f305cd7eb258c630f3febfbb0a367ad16737b146fd793"
+ "dab23562e8001cd113135b1c981d1ca23eb3be0fe3e24fe3fe1089caf9fd8f4f0d1f90dc"
+ "c7dbea4a9e2357793b65daf342b8e6d109c6dd10",
+ "1a173d158866db0ec665ee632b5fc397893f6a44ee17c348e7452800aadd8ce676e7fdc",
+ "0406a9369a93e0b5165ac6e692db035495c5cdd6df243d9756098385ad616374ac1e1efe"
+ "e2032f72a02c36954cd8221126e4eaec02668f454214e4508cf72b6d945e14d9b7c5d404"
+ "c8",
+ "0200713a78f58c755db4897f9b7e52057a087816a07fc388d66d34ea9e0bcf2f47e182a",
+ "11a26ee24610e705a42329f86aaa80d78934b4bbf19314f06eec46067d85c8377e04d91",
+ "077e35add124574e98e0056bbb106cd28ba8c3bc0c47063ceebbbf2684983a2a0061950"},
+ {NID_sect283k1, NID_sha256,
+ "2cd0320cc73120ef13e83c8144b270c9a1f2049a9250ef7ee83ccc7584025140a51e2227"
+ "a5ebb824deff55b3affcda63ecb1fd3f337c67c08054dc82fdace0c4bb9cef1bea9dd792"
+ "635f655363d05903cd6b5ed50ee669bcd8157509366cd85aa40d19593265da26e5641590"
+ "ccf04672a6df52badd4b99964a8643d9687b499d",
+ "05523cfacf4ed3b74ebc30f608292e45173001d80cc801f729c5f71fc213b243f041ad5",
+ "040410751ae7d8bb2295f584ba3d55eda41a80b8520b02bb4e5ca669a1003d6f2829e0a0"
+ "1e05fe16244f76f0c8b24bd3ca3b53c697097e3ab0e2b44962ea534a655d6c7d80b857c2"
+ "1e",
+ "0a634f4cef0ba37c9ab211c57fe6574c67933280c91c8b175fa4164755bcde867fe1772",
+ "0b9f6946a578ee38433e98478a4c31b67e838939cbf128f023090c4848471482fd1dec7",
+ "157159e15a2d16da2e913c5ef00833a8e5513ee4e7d6cdc849fd822c59886d0ca3695ec"},
+ {NID_sect283k1, NID_sha256,
+ "a743d8337bdefc4753f937e869a36439da1f8c75e1278c3f6a4a969d93787dac93293818"
+ "b1cbef5b8636e1a6cb3acaac1e15dbe0841c8001512b689292f3f4805997ae26ff52f7fe"
+ "1842512a020c448ed01af2a061f3638689446ed5f6bed9fc70726ce4104bc11142de6387"
+ "3fa7039830223e8f152996388417c48e0c1fa81b",
+ "09f6bd008c04b8823ccc3ee7d5aca535c211f35e9d9e7cfaec518b98647fbe6d28283de",
+ "04070019957dac0e9be0fce6abdfc00ca737096ba2d2bea9ba570acab6d73eae2132d7eb"
+ "060559545f82741ddd1cbb9dab0cd06454fda8abbd9d1eca752e57ec05498b14e4189f1b"
+ "9e",
+ "0fe407c226fb15bc63d37cc9840a1a1fb0ac4fc2939fbbcb6e1236831379d367669ffd9",
+ "0e96e301bf1193dfdd2815597e016e0a282d6e8f9d1d67a7f7e7d05288594f1ea92584e",
+ "07488687f13c3a2b9ae90536db7868f2bde1529ccdc0c84eb85c53ea979228d1fda7c94"},
+ {NID_sect283k1, NID_sha256,
+ "6a7a3ad614a3a09d2dc5a80204815d0c6471057acc0fa73f3cbbf1801902c3e1cba3c113"
+ "4a79a8ce61994a94a5afa85ae1a44b2cdcf5153f8625713c872da36aba0afcc5c2f26636"
+ "dc3f60e04c256a5b023e20e2e7a3f7305bd5b3033fcf05368589f19021f8c9096a886799"
+ "04b657bbe5b9bee67d6e53d176fce1de9e54c64b",
+ "150d2812505c82584201e93f6e0cb875d29dc7bd99d9c0f98e0ed20128886e67e1f1071",
+ "04012c7750172bea15487a05580891aed51bf81548f4b65c51c6c54b990bae8857a20115"
+ "b003db9e7a17dc8b24ff080d80842f0488f17f7d43a40ce6ffad52c65f5a875b4b33efe3"
+ "fd",
+ "0c5c52dfb50b210ae13c2f664d958b2491bfa91ced638f925941234bcc4d66de1eeeb73",
+ "03887a270eeb515a59a7387d8acbb4e72dcdf13f317a6a93ace5cc98d69a79c64a9e7ea",
+ "0e922b2d021cd71e213bdb36ce3ebf56a34617d4dcca30fc05f238a1c097e38d7cbcf91"},
+ {NID_sect283k1, NID_sha256,
+ "65bcd77a3ab345cc99b9c1300755288102a6ccf140bc7d1ad25df246ef01fd57a8614b35"
+ "2033b88cc6ffffe5b38b99ecf03baa365ab5529d6751a3c020d0198561969aade0909143"
+ "4d84ffe13b46df043d0a61e20a08e9c32b646771fea1b29e202d40aae1c7079873c3af49"
+ "4ecf6ef5eda855736c9338b4a5c29a086a8266fa",
+ "1b3fb9e1ff70f94bc9d7742ea535ca982215af3df381b5ebdf1db40c7c849a7978ceb98",
+ "040769a897a443c41ae7a8c1e45290ef39c40887ab8f4aa3f9ee8f3096921222ed7de457"
+ "39072621bfa30973da61fb6d363d66db25daf818ce79dd3268ac0520fc99ca7917fa3a23"
+ "60",
+ "03fa84ee38587f9c848b65b07c47551e27f15e7a87ed0ab705c99c8b7a4ee9e86a8e4ea",
+ "11b214ebe67eda2bd6e84c33be05c4373d2536e2cccf152e56b1569cc96d261e50910cd",
+ "0e100646cbffa016664bb57c1a67108645238573867c0b595c46e6053f844e5482a993a"},
+ {NID_sect283k1, NID_sha256,
+ "ed1acc360d02ee6c36bbc223d91bc1d2009a3e8f8dfc4c3796cd8555b0d2b46716f4c805"
+ "8bf34c2d4954e098274ab9c2cbacff46a0578a14e77fe104196cbc6d2753e3bb5422b8b7"
+ "9fd004ac0aa920eea94925c016ece16ed4dea916fd92563ec65692a61b28ee84bef00071"
+ "20bb1e31bb75b8ecf68406a71af9a18b4edf5320",
+ "147fa46fccf0805d14c1b84ea59bb8b8283d54ca0ceefb29b5585e7141340c55b7232f7",
+ "0404ace4c65ce07fe5ec22c560bc553bd791434a691c2d865c52b5e38d541ef191ef4190"
+ "67076250c829de137b6549d22a12f196629d9d34cdd83758e5daf45fae41872c9b15190c"
+ "e5",
+ "18c4f89cc022236a0da6105f19c6661a8325d36fa285e3ca71c1a4af3dccb016cac186a",
+ "0271b421fd572de8a71d1b18ad2325bc0fb58cabaabacc1f015ee6b14bec49762f1f8ce",
+ "12e679010ccb143b7de0c3f6c82cf99a961a4f154be6c87abb111cde2d721d864d7a1bf"},
+ {NID_sect283k1, NID_sha256,
+ "2debdb95a21d72b69c545988727366a42b819ca6398a82129c5e3772aea93fac0aae9a27"
+ "b11969ff0ffb9dc0301132ca2452cd863316cf24ae7696422d4dc68e37316161abc146e8"
+ "6f04b72d9a27a350d8545cca245b2be43c33bb822dd813d13e08a718f784845df8a4ef49"
+ "b02529871ec76bb3fc1ba31089359f2ede73e767",
+ "0fae097ea56b35a517be5480802f450eb832b244558d0cc922cd4a5b40b84d02ef11216",
+ "0404f6bda2dcb9560174ffa54f13fa5edf17bebd41399a1dce1fe13e82a2b487eddfe25a"
+ "19076dd375f2c5f24c342a8e2491271cebf5b97ac666aacecc8d693a85ebd2a93eaccd40"
+ "59",
+ "05e3a67091b9e10c7fd20fd70d51162e5d78555059802d0c3b133f49b89f37be6a119ad",
+ "0ddf93ef8797571af3cc9a66660c569445a2b5384f95a12d680c570694bce49bf2264cf",
+ "02f50d68bda006b88798d87c232f5ed1796c841074f063da03a471e0c00f08b10f410b3"},
+ {NID_sect283k1, NID_sha256,
+ "e4e0c6c8fc01244abf81e139c961b6a6e2d95de5dff1083e8a48b40e3e5b9ed909152c92"
+ "b1cf2263179629cdf76ae553b58bb2e9223ce4f9ffb5f170f5f0c5ec97294c34a7529a89"
+ "7e9397f71198cbcd68bb4055cb8cd6b690290761b3b73303f82788379df145358afe28f2"
+ "997d191d968929b7a4b9a0f6228797dfaa17c613",
+ "026cd72e6ae19b3f4c53493fba1e8082a8df1fb7da6dc111b47a41f713f49b33f618d0c",
+ "0401c411f5e298c9b61023fb26765cf4132cc78ed77c07c3e815fd43032cdf0ae8b8920f"
+ "96035647b4c0807b287014043560d70c9b14651cddff4bdf6d44ead5e87720294ff89544"
+ "06",
+ "10e9bc449e8480474afffd20b8acd6dd08344981c4a6cc789c5338ad7e486c526d6c4fa",
+ "0e81594f1064e018aa3504bac75946d77f9e745673043417a47c0c82488e224cc4104d7",
+ "111bf8635b1bc3f6cb7f9b685077b38d67160d143ede2bd8b6ae93327d7f55c5317f00f"},
+ {NID_sect283k1, NID_sha256,
+ "04710947b7c90855ba4e59107b919d4a1df22b503c5c4c33b286b6b08e451e6fbef8ba40"
+ "852f9f0ee62c9217abe6156bed46ad6f0e25f70f528f3a73d099338c578bebd6879d810e"
+ "6e173c2b0af1f7caacb3531ff0e6a7856e4c84db355d110febdb21c683223eb5990ef203"
+ "8d462ddb7962bc0feea5f850954943d53041f66a",
+ "198e13c7d95bbbb6e226688719639bda988867764ffa9b029018b5547850daecf58fe1f",
+ "04030b511d719217c485866273ffe2996a19e0a670b7a3fb077944a21f63ca2f22fe5a52"
+ "4a03a4d9a808e8d77c9dfcec6d033139fc33e67d7c8dfd7329c895bfb77f565391c37c8d"
+ "8f",
+ "1721f1ad4adf3c32614feb7f8df3374e24f76a32e27854a57dcafcbaaa3082b13e461ce",
+ "14b2622432adcfed7c2ecd2b52e43be7f611680ceb4bedbfa9dd9af54532911a07440de",
+ "0ece991128b10399188b18933c0d185e85d111ad401baee5ac376b84c523f130f70fee2"},
+ {NID_sect283k1, NID_sha256,
+ "c62d07bb1ef756b6b2fad355c66b5be086b6dc387b37cbc4a63c841dba3fce65b09d3de8"
+ "f239e3649382d172f065b78f8a53e0283cf345de06b4ee0b4b7d8611bfce92a7d993b193"
+ "8419afe817611bc6df3ef74191e7e39ca2339fcb5b5cfee3166d09cd52a1a7d3779722ae"
+ "c328d326a11bbafb6aa417920225ac453146b9b7",
+ "19098a39956747de24ded56435fa1e6c30cc2b8088fe9a75f5d07b2f5939c7a60db64ad",
+ "04068cf5a2023753717d89d12d6861c8411e6081c3158339573dc5598b1700148d00b39d"
+ "c5076a22dcd4ff4f062eeff83a58d2ce6a1808af8733ae254f5157efa8ea35a85cc74469"
+ "2b",
+ "142e4907ce239cdaba562d1fa7305bacff05a75e2927800c7b7ea322b47c9ea47846e12",
+ "104620d752b73379e1e5d35e5b24a793d7a309685c00f8bdb97bba9876999ed9c763d0b",
+ "059cab3abb0738d8af4ea6dcbfca6d0ef11b6e591ca109b040347d7d4736724953cd9fa"},
+ {NID_sect283k1, NID_sha384,
+ "e4d8d49c9bc566261d9134d5e237d9cbd6b67d2619a9bd06b7c9c139e091aa10682cbede"
+ "114e1d4777d9cd67a16b7d64278e99eed62bbf25ec5a5a8fabcb0a3468b0e73fd02ac653"
+ "3e04b1110d29da3e34f33eaa228b78341b357a5d892a61beb2168c3bd5e66bffe3f2080a"
+ "1e246f55a41ebf9d579e188d16991aa060460d6a",
+ "1636bd2be121e07ee83ac5e880cfdfca6a56f2b9d0badff003e872348368c7c2cd96b6c",
+ "040007acf46ab68744a9baaa33ebf6be20c1c093242b0056bb9885d93a4a9bb4640f17b2"
+ "ef015415c1b671e98f00c1fa364bd69cf998c0ae140485159b0a341994a4e27000e108f4"
+ "fb",
+ "0d0d4886c3500bff68455c41f5840d0313f33ac0155a693d27c66fbdb12791c2b5f8552",
+ "0256b8ff7d37fff7dcc8cc4461984a9bd9661643fd3a68d07fd30d426d10b8c7f4dfa34",
+ "1f516f8ed4372780380a798d2da04d691aec379483bc0d10560ca79edaab453d3e77585"},
+ {NID_sect283k1, NID_sha384,
+ "2d1358fdffc14630fbc421b443d3c22ba10ef34f15c6c5bb3c73a9b8714e4c411de69b9c"
+ "d6628fe2eba5efc4862af66ff916505023e0514f564164b389ea422d0f1beb92adcd65ba"
+ "f43556614eba25e43852ba65af78f62d64b36696519ef8284ef7316ea52c365b99f63a39"
+ "e6701f81ad520d7445cfc0113c38ecdad4bf5b7a",
+ "15e5f555119c19b055b15b0c0d2813068bfc184f864e250b202384f5728bbbda1cb0f5a",
+ "04013cae2f0c3ba04d039c42cae27de4cf5842a3e24be35d7a3cc7f05083f02951cbeaa6"
+ "3b05d69ad5b7d64d6b19772a1794562b1fa5c2fea03909bc509e7d47b0e8144acb3c26fd"
+ "dd",
+ "1b881d95b7de9aed9fb5ff0085ca4da2fbd413b9b947066c98aa0257142c9000bbb30e2",
+ "176f9e3c9e9f98b2f5f352ca74310badf9f598f4d42cd2b26e5ea0999ae31e3c678fad2",
+ "1f2dba4e17470cdf7e1815d30771f352807b38080d44465f86044f5969b017c9059daf3"},
+ {NID_sect283k1, NID_sha384,
+ "d6336faa5c3e838f4fa58626eb353d4cff9ba8f0aa0e6c3d0d850e8b22f5b0f047afc977"
+ "67f1afe2040b85d4e401ba688a4da7a0caca7fac450899092c4fea789231ba9b07782010"
+ "720f45d16d353798867dd7fef4a324520014ad5cb32684ec50cab742b750e05db040ff51"
+ "140e8d740f6774a059feeb493b10d8ac722f23fa",
+ "190c8f17bdd38669e345440d2c7631d67cee9c6548c4e7b9452377adb9303430efeda0e",
+ "0403235a8b7981b3ff376b6b0959a42cb56631fbb9f82f1694b9e273e6b7131e758fa0d3"
+ "700444e5747420d7f5ffd6119ef43b998d4ea4a58da13ff6fe7f241ccdfd4b6fd33aa93e"
+ "3d",
+ "0b2a690793107257d7bdc37c492eca48c4c9650ba0d657e6eb62042b16169fbe27f8984",
+ "168a83fcc67e0c155f1fa2329363729872e254f2e0c3ef85f3b3c84fa3406de4191b6e8",
+ "18c0f8e6b486e6d7d16b4103506d74bb2021232c0b1638858295a63ca35e0d6d26a6266"},
+ {NID_sect283k1, NID_sha384,
+ "07384a3f650bd270b14ca388a441af201b7767a2d47e9033f50cefd3af8257ecb38f5267"
+ "e141cbbb2ab7327d8fc78cf27198ca3543d39553e178390bf1b921618432ad895e4f8153"
+ "783a7ac22f4ca3cad4560e64f1ee4a7bcad05df98ea49a3847dc2143b27c243e48be59c8"
+ "69a547988e2205358e8db98b635ca21b745df4d2",
+ "0dbbc2a0409ca58a9e39e33b95fdd15080443c1dbdb5874bee991bd1b127047f08ec9f3",
+ "0405a687605e54e49e3c40fc5ee8fc014a62d72e8595280a66ce7d367aac2df4d16b98de"
+ "b3030abd03dfc224f459dccd1606287cc30016be317c6207532a0725c957ca5fde692a9c"
+ "43",
+ "16bc5aa29cea64ce3297172f36fe4ce820c943908c21c9967697db0cd93bb8a12e42348",
+ "1b1fdf26a6eb2d736b8c1ab165af2ac31a4c206c5410f61ac7805a68992dbd62b457708",
+ "14e9a22ce703d942a4fe2e84a4c1c1b44538a33fbfe904bfbb17af6490d372acae4668e"},
+ {NID_sect283k1, NID_sha384,
+ "824f26dcb4ce0ca020982814d5c727e629cbeeaa818c49668f8f6d743f0d0ad362b24cba"
+ "c48027898f386889ca5411d7d1f9afc69493b1d9ae4d7b695c9fa0a30bb59e6be2cbff79"
+ "231767e96cd8bba349fa2f97955d56f05430ab4ebd007064e3d5add94dfe255b6deff196"
+ "50883ce9966e1a2affaf84d9540f65c87ab1f936",
+ "05495e6c59ca1873f36b756579632fd47f9fb95b64f52589d70f2739aa6a3bf8cf8c198",
+ "0406df40d8259be64c8ac64a28359290bd52e843f330a68c2b605ba4f777d7bd7a798e93"
+ "440458667cd7021b291c3415d64f9b054db71d3fe20f232f2a2286aede89ddaf1ee8c68a"
+ "a0",
+ "138f05303ea63bad47c4c9a9d43c52c264725a668db5b631d9892daa1b71f62656cbf73",
+ "05e35c1f3b30b43cc9d60bf8779f3b31e053de0a390da50ea676dc9722a17ef00d68aec",
+ "1691ecfb826fef1ea0895242129cc3e9a14e1f84fac49d62ffc0a3455ad9c97becd5980"},
+ {NID_sect283k1, NID_sha384,
+ "07de1e4bb9be15a710a74806d4447b093bc08ed04392d1bd5abb414f5f4b4d9d43520d0e"
+ "46fc81c2a97e71086b28e53242449ed37fd7ed1c5772dbabc430fcf82ad20437b38eac15"
+ "820421e51912325c872894452c3f8a10ddb040b35308e583c155c3707b52df467c4945f4"
+ "e1071126ed46611a3253c297f5cbca9e27f58448",
+ "1724987c9b698519b6c225cf1261b77d0300045e5fd774dcbf13f285e6bd74512cb7edf",
+ "04046adc9bd5f0cc0d8bc64f4ba491eae3b7f6fb4229bf94b804807c6137787adc0fed4b"
+ "2f041375e2c89da41af84529811ce7aef26b983ea8add6e37c32f2b00bd47f23f25e5fe1"
+ "94",
+ "02ea4ed0e87687a50dc3acc7f4c089040ddd367d1a3f470a711501ccaad63c201b87ea6",
+ "1be198a1b6e91453018513902f0a8a085c76a2798a2a0538ede30dab65afb6b9b0496d7",
+ "16342f87a813780aec006ee218a615c4e1c78c0c759d48d4094639b5b4c32a9658c4d9a"},
+ {NID_sect283k1, NID_sha384,
+ "1edbbbe71057bf7d0bfda922be21a3a4dff57b017ebf6fa99651246cd173bdc9b11eefd0"
+ "48ea599c1f98e907932aa04f64ed0a007831f30daf186c88807400970904d6090b2cf181"
+ "e0f65f03b4234aceeb420867812562e47f452152bb1ddaaa48487170d06e47c5e9a7c0fa"
+ "a4fe494663d2fec22f7665ceffffc214b21c6b8f",
+ "1a5489091cfd51a0970508ee3e8449081ed175928ff8386592c83043a7911bbc2f8778b",
+ "0400aa1562c94bd16a3f8a1d6c465908ce3b83ba6711e7d8b0b9353d3c55d13dee213aba"
+ "700103a789854f63a139e31348f1b2608f1e71c88b5d42809f2460642ff46a470ad85735"
+ "43",
+ "18435a6d3bc02b3019e1b156ddd6f3e1bb9c5af70d1a2cd2089e677cbacc21624ec8947",
+ "031f561b668aeeb4df43a3a34716c4e67232f56959104b7237b26e3c95dd40e15eb076b",
+ "0f2ddb6e6d18a7393425c16b3e5a5aa232cc48198d63e46a601cd3ed221a8427178a0bb"},
+ {NID_sect283k1, NID_sha384,
+ "db5cf1de38a5187af11c1f0f19a36db52f8417de997229e83072fb51a3b7152a3b383e99"
+ "19c1b8427582e53d4e7e25433d46cdf01492021c237ea0a87d38c71634743115a6b2aba6"
+ "6d3faa8003158340a5078171e0bd55a6e5d8c7fb2631a31c1204e1479bbfe79ac70d5e58"
+ "23af502922a900576f0088a33e42ec3e26c0089e",
+ "1a45ecda0788fbd7cb7a716dcf4c6e83d4148bf63ed58078690ebd238c00329c462590a",
+ "0407a1e2fb4e8e79e3946086fa65042362418db0dce51541121c73972a435aecb99f6340"
+ "23006bb02df9899ac3f207732fa7cdbc36a60c17592af7ce06b8df4255110e26a02b2318"
+ "00",
+ "1c986f88ba3d5109c0afa2c213dda8df462282f024cc8efc758a5342a0de91c40452443",
+ "1efbd9e0d912e170c9c55bfbdfa6106fea4a4e013e7dc26628a1aea4f6b806a51866003",
+ "0b1347f4f85adef612f5c3a436cfa59eaced5c7cfdbb69444936d71812a2ab2461bbb5b"},
+ {NID_sect283k1, NID_sha384,
+ "4adaa850eec8272d25d76600aacf2cf66e754f6c5efa65c55a2a31b7bc69437d9a7e47c6"
+ "f51c5da93895a45221f5f92c2e20ee6a95eed3cc7249688261a35d82872284900eb54dd1"
+ "df6024ec48963ce43e8ed8b8cca8ed22beee8f0aadeae53726cca05443316537840ab824"
+ "cd1b595f36064e9a19333748d4f4972178e7f5ae",
+ "11461776c33f20b176dc8f2b0cb2446a9b69e55b6c7bc7457a7fb4639116b452b79661a",
+ "040043ba7157559659954ac58b44f19262bef9e3a00829c70af66d07cef08ad899d7f8ec"
+ "2301e8dd9c947b5a6decd1a26fc5d0eecc9605d22abda747fca038571bb37036d9034e80"
+ "61",
+ "18b231de7fc499b461afed9b80f4405bc005011865cdfeb25570b7c0ff79b6ae94b6ce9",
+ "0fb203f47a4e2e9365ce070ee7fd4540f3f7e9ecf69b4400eeded0f5a7bf6e5a5c6d004",
+ "0e635dc65233f27b8350db22b90a3b8611e6fd1b3e0f515e42fe8788b1376079816308e"},
+ {NID_sect283k1, NID_sha384,
+ "11d212a99c39fb5e4ca0096bbe6c81ae1490e1b8e07374b4e773bee4fdd24a3c13d65391"
+ "9db663d2c32aa4db140c4ae2d472d4f878946e527ad33b3dc93012d97458f96cb622ddb5"
+ "6f1ce7c2474ad0d5291dc35545de47b7053d137a8e79dabe06757ab53e26eaf751111bd2"
+ "7690e57ffdab5337eb6f81889e9d1b1ac729012f",
+ "025a65f627db2b4d6cf83c5b0c00265b9b63f7656c5e3382139e4992bcdf3cab502844a",
+ "0405a35e7e0b914a3e01ce3a885192d2ecd27418e09898631de122db0c48e8b58658720f"
+ "cc0009eab47197d5f56927848855b6ff96db7c36f810ee7c89b305ef780ba8c993d65537"
+ "ab",
+ "18516ceafb61cf2c7e7c511a8918bfe394c7fb2fbc40fb3052e156cd4020fc674684f84",
+ "1892ac13b86ad00e38ce2427c8c78c93b08605a75ca22b3658132dcf9d9df7c4b5540a0",
+ "0437b33615c16a85ccb8c4769ee7c5f94122d31e2b5fe66291b401fd90257ebefe33818"},
+ {NID_sect283k1, NID_sha384,
+ "9e4ec74c09528fdf3153a0f6955f20c70915ff524b2e19c991ec4c5b41ea9185e3e876a0"
+ "2ed6f27c9b3479dba951bee8680c4c99be1a626808114408856994be7444ccbd5ef9859f"
+ "a479b1050bb836034e20c531b4d618f5843fe1d4b613a731895b489a2363f3f5397d5ff9"
+ "64cf037e9b11e3ff5e1c3d403e5a46b8387c1241",
+ "173b28fc29f10245221a907778708b3ee62e0480aa9051d4c3eb4e8d552e6aad5509943",
+ "04024bb9bdef975af892ddc1bbd31314926a9c81f8f1864829edafdfe2744e793c100c04"
+ "83028ddde61b4361ced9c391c86c28ece9b902c48d14c61684962007dfd69d0468dfd65e"
+ "7f",
+ "199af64f79ebbc5b789d4676a07c224e4f6fd33285e5a555ac90cf65d0b669bc58ced4f",
+ "137d746d515b90890a413685bd9b26a1c05efee4c11a4b40bb621c9fa2580c46c20a687",
+ "1647f70ab7c68a0f522420893a466940ccf79067b323d940369f8b8694ccc3fc0daccad"},
+ {NID_sect283k1, NID_sha384,
+ "5fe8253d2134c434cb0866796013722e82184638b024a5a30938039929ccd8415c71f71f"
+ "239c5c5a81f7a9cb493dde209f189bcf766c17c6d9589cd0c7de7f07ff9f24d2320669b5"
+ "89d084f8a8ea71127b9760b7355b162616afb34bcdcd416f1a062035102e29b70069b2b4"
+ "dbf70179b8d60bc2ee5a455efd40194533bf560a",
+ "0624616adcd45e1fdc6cfeab2b17230d73d91fe0b39f4664f3c6891554f9b8e238257f7",
+ "04010917ef84bd5c0b36c97cb5586d3057a34f2827f239cab2af2e6081c5bdffd48dccb0"
+ "b2078ab47fe1bd3e28055c688c78e617ddcf6c5060123e9d65c562df2e94cac973ab3b18"
+ "07",
+ "0795e229185bc1b3d6d69b08189fdd7a822cd18ac55971e4b35e51838bf12eacbc50e2e",
+ "185483378a162b8edd6a12f44e3aa4ff829630fe3a1c9ccc66e34775f69bb6a94282489",
+ "01662cde6cd497be7966a0a77b0626ba3c4b82e20bb3f2e839178a31aaf440aa0e059cd"},
+ {NID_sect283k1, NID_sha384,
+ "db49891838fe23f0530abd4a4fbba5ea970afa5747f6a0a10d2cf4d841581ea2178705c1"
+ "203f00cafec91d0a72d25448072c9cf7d7ca5580b39f8589ec63128faa95cb0689574a6b"
+ "ebd515049a1eb9699922cde0366b5cd58aa8f3d3e847706896f7e1cac667fbfe94b2eca9"
+ "e7be79a810806ca4bf53f219bb30532ca2254c11",
+ "199757ffaa2c59e198d66824eaad37cc42d49b2e241b6a60382d05e425e800eaaf32470",
+ "0406ad18bdb3e51cc053f56b9f9c35e2d6eaecbc9749f41a9ffbf54634838d7745ca0648"
+ "9005dd77c42b31aebbbb46277176df08d81919ee0d9ddf14c3e4c0cccb207bf649c48fc8"
+ "b9",
+ "109d6332ceec5ea211f642a746a6ce055986b4a2feeed7e847904f7f411bf8361318d92",
+ "1a49fe690a34151056d290790a6bfa7b70958e69e9baeb30c55efc61dc5dc4934f2fc95",
+ "1710a4ba5b404d65f66a8fca2751a920224db0cc0266f7b0bc054069ea4cc51b1f017bb"},
+ {NID_sect283k1, NID_sha384,
+ "29d385d09c1142a7c181fe4b6e6132e414c15aa8605b44208c0399464613b966edcc2d46"
+ "cf203a3f85d943d8eae658695dac74366224a0d0348083bec0106f5eb8809ae8d07f792f"
+ "dd7c48fb1a25d5ef3bb9acd40b20c61c821024a9acb2ede321bd2d0dda849c22d76f421c"
+ "bd8d51565d3c4266f666455ca1c0c3777aa44107",
+ "06e51381dcf21050aef2e9b97e35303cf3bd91956854ecf9b6b9827871d2efbe8201c5e",
+ "04052fee805d7938b8b97459b9fcb4b80cbe29f20a9aaebc07ac019539a4a966c5ee4175"
+ "1d078aaae02974de6530f285b4bbe87fd5d0c9a2ecfde5fdc9a3303e4b988f673c778004"
+ "bc",
+ "0b426ebda6628125d73efd84e6bbab6c4c8fcf7fa29ffb3c8d6b0a861dbf81cd18d088f",
+ "1270045e963b59e4a4f1237c2240a5b26a7ba8e28ea01326fbec00e5d95d40e859d88b3",
+ "1d721477ee1df1388e1b7f92c048e5759c060ce1291098a2fa647974a62a258a189b4cd"},
+ {NID_sect283k1, NID_sha384,
+ "774c1cb8fb4f69ecfb5c7857d46415568d88f1f9f05a4bf64a1e1ff6d64aec16e1d09292"
+ "010d1f067c68dddbcde06ea49be2ad3838053f0b9c0c2383edc451ef0188565118e7b3c6"
+ "6a4fa372b96633dc8a753106283b02d0322df273d58cc9bd061ec219f1e1a9c8ca1400e5"
+ "e39c1b2c254273377dc98a1a2c44e5c2a5b89167",
+ "018adcc22cb9a2db64bad3d60f1608c353e091637b948914115ebd43679904f955c8732",
+ "0400630bdd8937e961d5396f9ea5310123a340ba316fbb7d79bf8573f27a0065c6fd6f88"
+ "900737a0ac1116e0e2979f973cd705588a71cec5e2a9f22e7e81fc61a4375624f55a6182"
+ "bc",
+ "10a0c04762d02f9d3014bbff287864743426cee14daa43b22149ce73d1ba609c0ba6be6",
+ "0ac29b041a6b95f9ab685470f50445d416df5f7ee06313185794f2b542fcc00606bed69",
+ "00a4241b97b6ccf0dcd533a15867f5889349ec353395d47e31c9eb6b8785736b3e285cf"},
+ {NID_sect283k1, NID_sha512,
+ "c406aa4295f85c854b4db2de5a7a2defae53a319866921a3673af5b48c85ef22f6eb4cef"
+ "892c790d8e64530fc20c729b2821b5f5e515560b1ac764106560c3a6a05657e34cd6dead"
+ "fe2884bd288cef4ca92e1f25adde7d68a30fb0a1b3678156ced62e466718e68e9d67099a"
+ "d82613b8d06bdda1a7b867c2455422818ae9eeac",
+ "1898276f159c10d92d8d4b6ae214d68c72792a4b5f1f79936ca3c063dc8d9a88be439e2",
+ "040394cf9bb273923c88be7a1c49412ab8599e0cc5509926102c122326bc0b34243f7d1c"
+ "f3072330906f47e8fe95f63d0f0aca1115e77fc702a923c32a16505bcd9021da05fd9cf6"
+ "3b",
+ "058772fbb30227a136de616ace4a0334be0996d60e9772ae9bf672b7c38fe3ee1b24f98",
+ "10e0cd3fccd1728e99e2294efd6dd4797b6492ad95a789aab7fbd177475a047f1e5d38f",
+ "0c5e0b2d1991718355be14bc57e2d6ff9fa63e0812b9adae69f64da610cc6cbe36fe4c5"},
+ {NID_sect283k1, NID_sha512,
+ "cb2809152f8258660933472c06ddcdb65f6d5221fa29d5b0efec9c2a7914dbbf9ce0a468"
+ "ce146fb333d26f510a87a6bb01bf8816756a1b5df81c5f65360957cae84ba038e37e8877"
+ "7580e91c34e2f5aef4fb55af7b81ad28aeba05e0b1c64a15381a6719fd2c16e38a441516"
+ "e1b394952d984baf9e051b1dc1bda2e12f8ba5b8",
+ "12ff37c808c3cc029a9cfbb67a5ed21f3bf362b49270d4ed0f1e38fad25ebd79f112a50",
+ "0400cc00fb36bf62e777a9f6048761e53633b92866158200c43900db95aa1342b5760290"
+ "90055d7e57221ad939f5639282cbfc203114ee69baab4fdf194f4d2a937d8a57b70b54a9"
+ "07",
+ "163d8eec726d01a1bbb19995777919f68689f7c2920f3549fef966593c4fb012a5c3a1e",
+ "0cbf5c3bf1ee58869e1d3c15a05c23217f1c252da97f79334bc79efe3f5c62164669ac9",
+ "1fd51644f471ea497b0560b65fdfa2fd0a6cef469021303f97753d22ce1993d1ae5b96f"},
+ {NID_sect283k1, NID_sha512,
+ "e060af96d4a7fe512bbf26be9a27bb6a8ff37547d4a7bbbfa710db24cffcfc760dac120f"
+ "89f642880db2df6307f9ea5441d5932d49762d182b29d8e7fb067a61ab0df622f75cecc9"
+ "17e27d0326085d34581e052c85f50a37713e27518aed7c4434f86970e00a0a4b8503989e"
+ "72614131b7164c1bdc82d2b6aeac0787f9838476",
+ "02b8c1fef9c6def32b5f4127273ce384b6add4aecec957c1662f52334f5ee97f49852d4",
+ "04036a4fe1d77bc431012d25ff49fb5468f975353be70e7507d71966a0ef433df51dc323"
+ "24058d705cc883a690641f0ab85af4959ef4258a7ba9cde36dab77c125a1de1d39536658"
+ "4b",
+ "0865f59502382b324e1dbd75db150f342336fb19145fb43a733971da555ac5828a3457f",
+ "1ccb2e56c02cbe8038bf78dea256704ee6e51054668ba8c2ba11aef4ac6f9320d46ee8d",
+ "030e662c0e7d47cb3b835c63599d0c9c2e77ca47dbecd7ac834c2babeb039eb630cd0ef"},
+ {NID_sect283k1, NID_sha512,
+ "d235c31f0a82957a087c7597673970aa39321d4c2640685a03df8388b5eae4825d1fee29"
+ "926f416d5e62a2e9ca1ea7cefffd31607e750fa9675983608e0f8dc895371b190574d065"
+ "c5c0c23ffdaf49e65362914363a3fffbc2c1bb487cbd4f69ec22dda5c7dc3bbab805c81f"
+ "aa85787cc176bc0e5703924f395d8c9e7e7701e2",
+ "0afb1c45e9a9f02942b8e04da4b815498454dde6643de186625a98b3c1c6993abc8bba4",
+ "04002fed49c59e9d5c09202a5dc29d8dd527a870a180feded66ea6fc94ee094122ae9765"
+ "6b03620820bdd5910037f5877649be38db3571a9c6ac632602d2013d0d5abe1f00133f6c"
+ "de",
+ "1fe749d9916f11100af525ee343b3b74a493f92339e432a482dc8e86ffb5affc4630037",
+ "120f6f13331cd4d1a5b9707483c74dc0722452062cd4534e94cf40840d22ae263244a51",
+ "0bc2e37a481478f879de612cf4a833f7e12b8df33f5b0d6ac5f5aa431678ff053e2bc1a"},
+ {NID_sect283k1, NID_sha512,
+ "1a2559777a5fd8f269048feda82c4d9fceca95803f84a813789d6ed070422240e443789c"
+ "5231d63d5268ddebc060dfb99c4eff2ff115d2984d8bbc5c05314562ea6864fd543e7e0a"
+ "3b8572c017d8ae3563027d79bbe164d40a5bab354720e45094b9b26391ceb55339592fc2"
+ "f10b97dc9c2649f7227648f5cd2fc46d78d31c0e",
+ "0ff537d73a4da0ae3a4894016b71dccef3bc886f3d24a5abb7dd96cf8fdcbdf0fdc5e51",
+ "04001bd0537dfb29f727f91fb469c31164e1bb0ee192a5b89b880f3fa40e3e5437f0d2f9"
+ "e106df9bab2f9198494094a63f2ea091f60108449f0741806400694a93702f61fb0351a8"
+ "1e",
+ "0bbc511c6e1772ca6cd1cd308126c18c5db498055a4b3f1cb0dba3285f6d38b083e647f",
+ "1ba756f3c89b732398b90bfa2f92b2a77159c530a8020b75cdb9697c6d75c18d36040b4",
+ "18207cf326bfe97d657ac4197ee5c20c75431ee552681a92a5815db0d984fe597700bbf"},
+ {NID_sect283k1, NID_sha512,
+ "658c0d3f764bbc952fa55a258bac16a5bb5184bfa76cee06baf9ee6b9ac3f116e08bb240"
+ "6b1dd4be487b057f3b29c2043ebc33019b2017c4deccb86f50ff15fc9248ea5fb6426112"
+ "0b1960525aec3cc18827c23291722c5add8a3761ff8516c61956c62b8cbb13f3d92bf3eb"
+ "45a70704c01bb3625d21c38ffa83a6db086ee968",
+ "16000d2e879906d1040b32eb6ba3caff700e5565871ac75f10c5c15b509964bbe5e14c7",
+ "0402ba89255d1c89e42518662611e2efe3b5e3b8043926ae9c43974ee2986185269246a4"
+ "3302b87762b9ada81bde958d1f9b81246f49098695391ba3b4b3b9ac5727f19fe42fd079"
+ "46",
+ "14e837476e628007b2df21b5035a39c24cd4869bb52dbbe13c9666ddd8a7e3eeae29f65",
+ "1b5091fc755c0f908ee13ef9bee40dd16a5710befd1e265a312e595842d52cc135fd722",
+ "0fa25f43c3c074d702e45d216e3704d942e9d67b3c0728645ac6c53b9be7300061e5fe5"},
+ {NID_sect283k1, NID_sha512,
+ "4f10001e3517c2c1f973b555f4827681e096d860c4db08f1f4aef8000c9c24bebe59f8bf"
+ "3d7d3cac959a1a5477bb0ea43f2e746b5d14ed48a58ef35484b0ac786d2fec669f945e84"
+ "6ad73e6b77a9e47012a951b398941566330d89125eb3c1fbb2f06adb951ff5f047d102fd"
+ "f28b5cadb4a3e1a10412eb3474d2ed5c3fce78f5",
+ "019528d505bf0584628d0214bc857150a929d3f59619bf8f3acab545fff0977c9bcdc97",
+ "0400cc8863e1443e61fedc61abaff87d80450345489728d78c333b36fa28d8754a29cf3b"
+ "a100205ae70c35396c07f9f96aa7c59cf8a28aa2a365b4a1b68e7414d8c4ae5220c8bae9"
+ "ae",
+ "13d555426101fa3c239b7830fe0b6cf08a1c01f9a991f806c84baae20daddf5dec8f868",
+ "0af8bd9856dfd783217cf81b09b464614aa824b0298f35308e6427c679607853eb66c7d",
+ "0e6c1933d6ce25d0a00effbaf1db2cb2542cbe7521330c34286cf3bdffc20c001cd7722"},
+ {NID_sect283k1, NID_sha512,
+ "c43ec3c3232cae59bdea7cfaf18a4672035dbd2b8b6b1b44ede376b36cc2d8baeb921e41"
+ "6aa177f5977da8bf1d713509e5251278b6622790056271715cd5feac58bee5baf50b216e"
+ "8eb886279c5a384cdb696470275b7487fe9ac4c506706f6b0f9809d1ccb102546a4297d2"
+ "017c2a8df9f02f30d3d1bd9aebf6a92a02e0d202",
+ "067795ce117bc0a389397fc22a01cfd9422cfbfb5aa44131938a8c45e48e1d5a718539c",
+ "04007924de08acfae6260009cc2f02daa2fc2a809e6ab4cd8858a9e9c2c15b17e29f1bc5"
+ "ee004f36cc2d36df63474a579b96f6e59b890782ad8fa865efd80abd798ca2938bacbf82"
+ "12",
+ "1bf3242e75f8331fe70113ec8e14ad0814850bb8cb262c7d0a44ca69de52d32dfcabd0c",
+ "145148d59c5be2b6d39dfa33e904c161456822ec0ad64b9dc52befbd6496c9303fc062f",
+ "0b75c3c404d694e086c0f5aafd534e7d8596601f675b2fac9384fca6084711e35149f9c"},
+ {NID_sect283k1, NID_sha512,
+ "9b7d675a3d2cdeb280ea28289b5fc2a3ef6b535ebee8ad242fb031e2e1f364e8ee806568"
+ "b2f8627c5a5b4f51f4f65c71acdc1152c08b9211b81907b551e0ff47f5a6aca45dcfa06f"
+ "09bf195d19d7b165b52111b601fbd97b192f62465f8ba20773b1599c8041e91448eac7a5"
+ "763ca0628f40768324c5304e1119ca6a1fdb0778",
+ "19269dbfe4184249952a651a507584746c5b62c64cb3b17e0158aaf4d086a4afb0330c1",
+ "0406c60a475f2a3635fa523e1b138edc36f51e94a34e75989c2cacdf8949115d96f11ae7"
+ "520494d5e23ba9071b3e52c58b1d0740cf90cee7b084b9ef7a4a7be8aa47ce7b3d97c8c5"
+ "1d",
+ "111f4dc771b6ce5cc2f42172d3d70fe77c73683bdd2ea331ff711b7e9d8c3e4f2d7d6cb",
+ "027f224c01847c52ebc180ae81009923ae3453be1e0d94b5c2934603577f36653ecfccb",
+ "1e7b771631e5e72b7ddfb9c73f684b93270269ba4216cf3926e43b2ceb49756e7e7e0e6"},
+ {NID_sect283k1, NID_sha512,
+ "f4a08daf8f66ce57a986f14b918099bcadcc4308bcde7c169ce8536a40d94a928cfc0968"
+ "180a2c2a242c59df73ff79a03687998c421cf9a0e661630378779a4744ae2a6cd24ff61d"
+ "7fcd6c11a4c8bcaf358075e96f864df0998ee98ee393b37bb38747b70bb7a208740959b4"
+ "5174a60153ee566e0f62528e9a5e4466186fa650",
+ "03835814de0d6441cd80a44e40350cc8bd62ffcc81e939a4410bb9c9259e30463c453b5",
+ "0405ce9f6c979bc1d6bc41f41095b7677cc184da8918265a7f0e5b9dbece2ca9e0667cfb"
+ "ad039a395aeaa04f5168de809164285974d306e474a610d89fd401c375c9b73f0d23dbbc"
+ "f0",
+ "0b714d734d063aa81a389be69c56dcc23bcced3517e330572f79c769645e7dd2fd55c20",
+ "0e4d4494f91e79f2b1d1c0e22ebf744ef448f57c951f1b5f4da3592fe60008ab00f5f7e",
+ "02edaa4d8731b598c24b993dc5bb4888ea3c2dfe2807daf88170982667e69b76a8ecfe0"},
+ {NID_sect283k1, NID_sha512,
+ "864647405c70939fdb4c026bcad53218ba1d438d82c9138f0f0ecac815dbfb242307cca5"
+ "2c84826cf6556c51082a23f14252dfaea43ba229f7493db2bf8ae9cdb0228dab9e25cf38"
+ "5b504b92cca94f813acceaa1f18de851b8936c4dfe9e4e17002f02dded6b4c231ea5e614"
+ "ab46fcdd637b8c6193e8d0c2df1b3d883b97e1e8",
+ "0aee83dbed3b703cb6e60d51e373eb20e298ac005fa6a572d02fa1e6da0345558ad2a46",
+ "0400dc25760af992a8ecc108373281bd0d246f95933ec943f6346c1b2b941a03b33951f6"
+ "2206e35f02d225ba11d2ed7ea392898f78ca0deb2a47871eba6cd2be7440a410d910097d"
+ "e2",
+ "1df142187f8b27f4888075a3784aebe0fb7d80b0b6d3497a7adbb88cb6bd26cb82109c4",
+ "05a530bf1135ea6d599928cb0383f5d391d19be333b1577ee4eb6f2a78b54e4aac0e09b",
+ "06f3033cf392f698d1a1141cabf138c411f4e20687920f2915e17e805e8657a887c7953"},
+ {NID_sect283k1, NID_sha512,
+ "c87c8f3ad5c28a027b28ae5021dbe8d425f74181d519451f1fead7a1f9dd102fa6785b14"
+ "7b610610cb59bfa91fa363bb79ea602a7d7e1439f874c5dce748e5c320560c2d9676f3a9"
+ "48754c72b6db249478b7e19c9829ab4de2e344535d3e0b7c20c272f82556a280ef491524"
+ "b255c4fafb9c8ecb87b0149ddd9d7bf6159e3337",
+ "17b65c66514019ff935e9d571a4e68e9ee4463b7b9a754b93f4f7741693f4399879fa8a",
+ "0405bfb704629596ed05096783e49864a11874f319b4020917f1ba700ddb0606e6e72c17"
+ "93069194592be64c33c2f63771af0e4100d060e9750031048002680541815b311ba8f7ff"
+ "a9",
+ "171b5c698175300b95dfd5ed8d3fd7cf4e19105ed7193b6013103555808743501ee8c46",
+ "13f001f287dd5c7ad9af8d0105b47caed66ede41dc1e121a602610ce20e41af91cbe586",
+ "1433d5263d5233c40c0ca526b3657fcce8cb88ee65105b5f5ec82b26e12bfff11c8812a"},
+ {NID_sect283k1, NID_sha512,
+ "ac7da7611e2ade20aad64b418a16e02e79ab4894d758550210eb10013a9b5533132be701"
+ "f8843c840807c4167c38d21dff168d3baa65d5bcf285b73dcbb75819f8d7a20a849de335"
+ "e19bae2aab2ca560b93d340731f291599a5b28afd7737460d291105cbba6d0290e836f6f"
+ "6c1113d1b2faf90ac5de7c64e25206d79380a4ed",
+ "17d2071f39ba35515a8ec977ddd36ca15983e15bcda626f15af61d87d58114f4c80a8be",
+ "0406f09c255fdaf78d7d341fde4586526fcdec34a28448c7fe65685a67b6c33564ce9249"
+ "a3024ae4483fcbe3f823a7ce53db96ef2f6c68670e107e68cee4f358dfa844112d6b2144"
+ "e1",
+ "1403078da10f55724fe7b56dfc55990507307386ba82ca8f6340d33769ab1f6ca894bdd",
+ "0a54a35767a1cc77b2332b04694404fe5a31ed8851ccc2abfa5542b0f5acd9be9b1f02e",
+ "0577e0a1937172a6d45177c2b328d72f75a08a8a774a31151b89fd451d531348695d870"},
+ {NID_sect283k1, NID_sha512,
+ "5757c472fa2f81430dd920f39b61066a28c870b80e6c96f822f8f19b398c3574d159cc22"
+ "120454dcd7e97be8211916e4bc8db365b2dbb99a6e597d06e6645046a0abdccbd06741e9"
+ "c0eedf33cb78d78a540c2a390719acc498331e694e6b0118cf4f787b51c7b7237458a614"
+ "9d6dbd0a08bae8097e919f970fde920485e9a0ac",
+ "11504659e12235855fe55220287a101e511d39a627f8a0d414446385d4a88f31507fe74",
+ "040192fb9bcd157c7ef385d48470c3173ccf1ef9650da7d680d8473d45ab2064a073232a"
+ "c3014ddf872b711157d121b0a61b88a7eeb7cd260f1f82ec5f62fa2681e28c7f2640e305"
+ "e7",
+ "17e10962721f041946bb5ffcce724c9f284b1c8970f974a069c36dd4391adb8cecb8bde",
+ "1546450d25e2536aa14b8751e3b3e7eeec8a6c1cd967ba0f03e6bfe64c0a59072280636",
+ "0159c8d6499fcfe8ac7b2e84990a714d7888d883c16c016c4b165f36d62c3493afa67f1"},
+ {NID_sect283k1, NID_sha512,
+ "e350383d04af0f4081bf09b95d1d53040e7acc64e56b13b653df31dd119617b800e0cdfe"
+ "b935dfa5d94f1d7814688d8ce41021810958759cec76560e1e5c0581456acd1a02016584"
+ "9b2203f1c11d318d816697f36a86b59f160faeac7dba71682d3c031d0d547725ef69cbaa"
+ "28345512e38b75ab011911d8924b2d17a857a96b",
+ "16e4cbabb03215767249ba2a608708b78d7387be9e77f5efd2462467fa05e8dcde2c036",
+ "040112b7ea5d21df8ce52772a1b76a52ef6f0da62cb7718a467a034618b7ce701a05cd24"
+ "670649e0ad181437b4eeec87e202d8fab1c240f9dd9b31311284c24d89160b1895be5413"
+ "19",
+ "120e4bce412311d3e7adb36dc11d4cc1da8a4b9d6cd5219e772b3dc2b2b8ce08833748f",
+ "1ff2d53a8e6c1c23807eee681156a146e8f2cc1a8c262850dc69dece31860bf094e7f73",
+ "1e8906c0bf2a5f922ca271def90d704a1425e5cacc64bc5761b000c7df0f8f9fab51f2c"},
+ {NID_sect409k1, NID_sha224,
+ "f153cc61981a46d8a47d17d29ec157fa93fcf644beb84558db7c99c57fb131dcbc5b6558"
+ "1ced5ff0b29bfdc66ff703ecdd4290f7c353c02a3e6d6867f33f3dccd1a0b6752b8a35fa"
+ "143f8921a5078af9c85b212564c5b795da9858c7955095938fcd10c21e35e1abe905e84c"
+ "8b4bc05f2a06091ce876d9519b96951d08c7ac9e",
+ "011c6528939672bed3e8c905b7ba594c3ce95f37fb28044f210cccd01dfdb42c10e8e1a0"
+ "b5d6fc757834ca7f08e98cbc52b0edd",
+ "04000b570ec1fd09d7b4d102f83cf37129d94c9cf2f982b702c5d1172bae2df558008518"
+ "493c08dac6f76a6646156f123c4f33e79800e3cfe1aafbf25a5a4536d6c0cfe13a540b4a"
+ "3c97d4e7bc6c0346addb4b0c32dce089a7a5385e8a3e67606b45e2062c642bbbad",
+ "027cecbe83853037cf46aa98e1e1e552a96af0bb24e57756d8239fea5d769b51b83f195b"
+ "7801b562259ee644ab4047764d130a0",
+ "06a1601e07dfdff9d3b4ffdbff124b717403490853099fb4a00ea98f84ddd64e908f99b4"
+ "0a2ba6ab88b2491a8d948fcc2f207db",
+ "0741d27c0dddca3641b56ba1e9bacb0da1fcee46b9e33ecc6990b98cf0db74668ef1009a"
+ "50e5d55f80e6642ea48689a529c8a08"},
+ {NID_sect409k1, NID_sha224,
+ "258c91524423b5c876432b1930c7b07b56eb5e3945f1e2296a4e5bfb9b9123f800ad195d"
+ "6104641b1f1970bca553c2032f83d17252e52403a9381c1fc18eaffdf026f7537aa27d84"
+ "c5e3d6e39e651a92a41139cec5181fe794457f556b390943093be719acd23fa1ddf7ff0a"
+ "af0479484a381a309b4f681af74bf97caef08c22",
+ "07e3b714496dd118d8f3f597961eec5c43d0265bf85723b0b9b0616977e0acc2cf686cb6"
+ "afa6cdc19114e27ab000e762dfe467b",
+ "04007dea0ceb73b9bfaff7147a36436cfa7955eab02ce7fe9b60dcff3e088c5c9281be59"
+ "07de3e06ebb2e21dce8bf3ff85feeed50001cfa9b30af20612666e5df798f91eb4647d8f"
+ "5e1747c1b18adc6b73a848d987434c56d13ad78b775c4096e9f20d4878bbd9572c",
+ "028a8353c05129dcaa7caf0343130bf2e2186b9cb5ed0a27a565e1c24eb882617cc299d4"
+ "86be76fe0f8f3c52678b6992288d7c8",
+ "034299ca2aaaad51f12c90e8205da305523713516ba6e7d245eed8ef94a1b2409b98ae93"
+ "476aed6c9b9aef50406860b4e490db6",
+ "01a1adc76c65d77ea686d769dcd007c0101b4cdd0934402fa47dac22f8ecac28fc05c2f6"
+ "763a6781655ed5e7d84c41157255a4c"},
+ {NID_sect409k1, NID_sha224,
+ "a16a0d6fd57240fe88c7c36b9f7f9040cfcaa9afc4beeb8300818c5f90cce73b819a12c3"
+ "1d42af33146399cdfa4ed4954d068dbb0f1f342269dd29f1fe357e7224304b67b0f924b7"
+ "94780fe7e6aa9dfa3380252fe7177b43e7b1789718949b9ec1b943c83ed4399491482f0f"
+ "59d2cb8050ab6f8b5854d76c50651428cd29c40a",
+ "0182d1e937b037bf7f84144f7d4c94c935269c9aae7d500aa459a7a0ec113b232dcf2829"
+ "08eee4c84b8106cd38cdc41db3f89e1",
+ "0400bd4f1ee6a967123d70d488dbf0fb43aa5e93dee5794b4492277fe559776f74075485"
+ "0477e275cee9f1c375403a4933dc9869200191a544b98ba954cc6e060ba26a52fecbd1f0"
+ "dc7c15381004cccb799a9f7960a3cedd02d36fcaeb0ceb844bb4683998d776dc5b",
+ "07904af733742716366f8ba07086f924697ac8a01bb4895bdb5715081ee89eaeafbff4ce"
+ "c44eb0ce14e774dba71bb9b091d2594",
+ "0723b2068957c4f2ac1df69378fc013797a3b071de30b514c3e610002dc8bfced32bd2f9"
+ "e8f692b653e736696cf818b0ecc1e10",
+ "058455b8f9abd5fcc28a4ef839ac0245c3feda1fdcbc3c171b6928c6abc931e8b0ec3438"
+ "2d63e414657e9319d2965fdc9eb74cc"},
+ {NID_sect409k1, NID_sha224,
+ "d02ff569828fd1add21f6bd1c50cbdcd09222e458ee79fd5dfdba3cbb84e9d926fcf196c"
+ "ccedece77d5aa17f8c8cbf3a9facf0f02c71d5c1c8aeda9d75f6fd7b6f2c5c70dff992ef"
+ "6e02c438fb3c66da5a503b3c39acbe2a069da457595b542190d818015d462670b0807c40"
+ "1e36b1bfe05baff3a8ccf8d1f5f8de7840e87993",
+ "07ed09428f460724c8a5225a31151e031d9949493fff5703369c401762345d002c4ce424"
+ "294baab22d9e71edc4f854510cf0e6a",
+ "04007fcd003a8cde5503f5582a42738738ac7efc6cdb3813a00c072fc114006be9881c0a"
+ "881ca35988dcfb8088f3d07a03943cf23000e7041e666c1bed3b80a691ecff60ad4afe3a"
+ "544ce58030bbbcc130045e2c611d65f322ec78aff6757cb5df8ad54ee8a09616ea",
+ "02828c8c4bb1722b0f03262de32ca8a605c4046badb20d8eb9f19aecc5c69f199aa48d09"
+ "b61f285254425cb4bb5e0763dd471bb",
+ "06c99d796c5d4fa21c5cb7cee0b7570edc9d7e9d7c3604f5ca3766b17e44bc71d8a74ac2"
+ "68b8713cc2ea0adc3dc1971c062b4a1",
+ "075962e0ccbda2280e502559f48c8d37704964f67f8cd3b443b89be740976f1bd929c175"
+ "560fc8cfb282661c0fa792a5b200401"},
+ {NID_sect409k1, NID_sha224,
+ "57befce973b225cfce7f996fa5a1a43acd160681b88a87b7de04544eb7b6a719718f1ca7"
+ "f559b6531bfc18fca3836d2be7f7a6e48387b7579a6845796d30e46f0dda9d82680f8c96"
+ "c5f0989741adef9762c3db763cae2699cb6c112543635e20ed5cfb4b55ca2ccb32d2d139"
+ "36085a8ff95ed658a54be73f80c912ccfe5f0ca0",
+ "0390f05b9619c27b800e99aeaf61ef7f6249367d5cfaeae3c7b523a8b29153eb8a77132f"
+ "6c4412545a842d6deb7b7aea7e2bda5",
+ "0401cbcfc492a2a6bb8a7341df67ef2bcdcd706afabad5e7ed1d63387ad9b0dbc47ed17b"
+ "82de6de936752632e43c393a93fc5cec0e0111768994b2dfe9677d9dbc45d4b55fbbafda"
+ "aa2b2638ba1605c35301fa557d628a87d0a7febcad9f8eb4b51fc9c807652579f6",
+ "00b8d236a9f8edba7b5207b4c7848807b933b214fa25cfc5a0e73f750d30051264bb9f67"
+ "02837b0f65a451d4ef24f047ec4e9dd",
+ "076bd4755427fda22a0f177624477c59de12a12621aac274b980b5e1ce5dc700591eec13"
+ "dc5bb48c5c8643de287a07a48a6a7fd",
+ "065a5b0a00548bcd7f59518f122d79c7552ca6097f3867604b462201add5f326807f0e87"
+ "79f2177f277e5ed25253885ca81220b"},
+ {NID_sect409k1, NID_sha224,
+ "4277ba40cb462860ca722cb4ee71c61836d2ceba18bc91f3fad7dea478972c6da0ebc028"
+ "15eaaada1d1a5e93d7ab353855ccfdfc94a5742fe18daee2328871e06c1ab0a9a989d123"
+ "9df2d2d27f96c415e7ef9a941f06c6790675361173cc229aac7045f49eaca207f59c4976"
+ "19ba32e932b5c1c6576812ee5b146e2cc7de5e62",
+ "007d18652732596add3db31f7a0ce6020d03f3df58131b0c7c633faf619b8210cd309d6c"
+ "0c4083aef1a1b6d2a756adad0bfe344",
+ "04015ad0682962b4dfc8901a0dc77d548ed616286733cd9b3ede937cdf4401ab8b3e3516"
+ "d466ba43b6ab5356c4e72845767d55d27c017e4de3288ed44b48e7c47b16e2afb513c976"
+ "3d5bf4cbf9a357c128c94a758e3ff946957df461531def2b8d8411b81f45f0c2dd",
+ "01a896c30fcfdbe583d6b0119f467f47758ee01d4d601eb698f444ed0f76515c2b8053b1"
+ "1ae7abd0eef7aa61145a53d12d560d7",
+ "053b1cd57dfdd8d1802f3e295e450a155c366bdc2bd222d18a4d08369c25e53f1f633958"
+ "b22d80755ecaf8362d548b28dff1ba8",
+ "069339fc6058762a99576a96e76f75275f848102bcbc281e59fda26c98fc48a3f1061755"
+ "e80740a233e03287f510f4549bb1874"},
+ {NID_sect409k1, NID_sha224,
+ "57ff6792ed4b12220d179bc0ea57ff217f322c85bd3676a681d32d7e4a3e0c8e891fd267"
+ "df17caba5992f68c35ff670b60b4bbdfff82404f6ed996c30539bc395120f97d4d7a652e"
+ "aee82bd8f9360bf8bb73748b8bbda9f9480eb54f7eaf2609d4259329e8a5ea020521e7db"
+ "d3ec56f23c849932cbdf2875f5d5c774a9d6b0c9",
+ "02a91244ea4623b63403dba807d60b914ca3b901a2523244c322f2f11251446d3f15e869"
+ "d086ebecfa1a39ce304e8b5c8de23e2",
+ "0400b7ad8f0a52ec21e54e28ef603d76652dbfecc7dd2427cfaaff3d280f0d1f62187d77"
+ "effcb433b5bd44c3d0c0d26c38d3f5930e0080641bb0163130be4444f79c500ceb8d6a9b"
+ "2cac42d21d31b2fb29da075bd41c6613f278944adfe92d3c99d494be9d4714e9b6",
+ "070125c89a1262a88f22e874c55ed149de6d961d6abaab2d13db9174e3cecb8f49752995"
+ "7058a0afe5361ddf9d3a5a3b923c7ef",
+ "01a28cfad13969c6449e5a0f879e01ef7dc1cdcd0bc77d20f3989c588a9cad12a4b52743"
+ "c12f4f6e2154ad963bf234ec96263f5",
+ "066d7f0b364a640c6c620e3d030448d155cffc9ffd46a6adfa1c13e1b01892463a472446"
+ "5aba3eb07009fa604f3af18109cb72b"},
+ {NID_sect409k1, NID_sha224,
+ "f85113eda64478f460b60f8084220134933de049200a5f37884da7901471542e26690a5f"
+ "abc3cbf9e679ade71b6e54d869bc136c3d34cc4a9efcafb777abf046b5ae5429136112a9"
+ "a36a475121eb1f33f1f43481286fc1ada98a41064a1fa38c89e99a93065bb2a119348a9e"
+ "452497fd5a0d2b83a66b09da9f47a0583732adf4",
+ "0068c56c6b5d50d1d4e13d3837d8c5e8ba2f825e121b63e97603fdfe78bb6899600ff0dc"
+ "87b6b3b6868ad0d2f62b7b7a31603ff",
+ "0400d9a4f5992308013573f97864c23b98d276975d80cd6455e9f0d8a62d6674f3aee3d2"
+ "7dec15903da4e9d5908cebeb765ee02c80001f61189caacb05dfb982bcccd603a769d0e1"
+ "be8f9223288b5426e7f88854356fe825f11a88918085692f33b0f4c61ab09a861f",
+ "02ea7f0d81fbe3d4c865ff5315d1cc38f9e9a8653fc91dbdf445b62fe09b30ccddf50878"
+ "3ad87c8a48a6ccd5c9e817fe2977f90",
+ "02d7847479c16c4cba834ce5962724f185be06cc04a9a8d710cc72e6063a7b64fbf2694f"
+ "5b62de65d3d347d34c0dbfd5a4d93b7",
+ "069e32bb19d20e873d0e62b306db4d5663576e4b2fe75e8ec79b7a63f38c8f1007a817ce"
+ "30612e8578d48c63b04b1d34904010f"},
+ {NID_sect409k1, NID_sha224,
+ "42811e9ee6dc509572e1cddbe5baf00afeb0c5c13e3755b922eee9e210001676082bc9ed"
+ "c3d78db2b5bebea7a2c0cd2b369226c2b8f83b28f33fb513407ab9d287d14b112d6c3be2"
+ "493805ace5cf6fd366d03cfb28f4ce3f0f060880db64d6962e997463ba7c05b6fcd1e66b"
+ "abe4b94afc5c2d38c7050c69571d27b66ef0090b",
+ "03c88084f8b78446db431bd6e240a0c050813d2a763675b0ea869cbe183df697146cf29c"
+ "03479af3d34587a95cd257027fbeed8",
+ "04015a09436de00d8d129e297ea60e04b704c0a8183d64a77d1c527189e25e21d6bb62be"
+ "8ef5eb2dbd833e5f9c7d5c3e69c9c018820001c32ba376d2e9de28fca644b0d567ce1f4e"
+ "f0aaddb2adec6213d03bc8cc99f9140005bed3cb6c3c0f5533275734aaec47404c",
+ "0132f4763959863a32919eb591799ffb8613797bd0b617c73654ec9eb32e2fb86631b66e"
+ "28e1b4cc4aeba65ba8c75aa1cfacd73",
+ "05fe0ccbd430d9459e0093cfe2c1d1d3edff8c1ae7111299d2e04f414c46ed2cc88ce9cc"
+ "9e23e187e87ef551de993f52214d609",
+ "0557acfe6347baafe031dc16032c45559693e2793d9b6d372670b09757c6f4a3e5ae5e55"
+ "264137d1859c8d9f8f03c25de409bf9"},
+ {NID_sect409k1, NID_sha224,
+ "b38f76ede7441ae0887e689d556f43155b38dab7cde487ce9ef9a46f2957c830d4d28006"
+ "873fe2368197a6931f6fcaad755102686a457a7edccc8d344e2d2a9162e3d71d41c09a02"
+ "2539ae6d404955a6ad748231aee1f974d4f159940532fb3b1fa0254bfc5805d2fc686968"
+ "56fadea386c542d3cefd1be3af04ca595e54be25",
+ "051af7b63bf3297ae20517faaa1552f4fde65819dbbff6a52721611e5b7dc1242ed6e697"
+ "68cdc37ea8cdfd1a5971f06b84b5803",
+ "04009cd1280a2a79b182ddbd1712dbfd12cee3345a89636d7673a5fc3e1e51400603176e"
+ "27d538e90005625aacf5cadcc8a8c25532008b5aabedce498476b4c65ab3cdc81f819c2d"
+ "b670a7236c0357a86f9087b83e7568cc6e5139fb92f81975756d7dc4f48be87df2",
+ "00bba308a3eee9e3ab6d2482bb728bf44cde9eedde15af7300c57c2c1e6fed2ee4e404ae"
+ "ee3923e7871a2ff4ba6df64f9d01a87",
+ "07a9e69664b7b81edc5d47c014696d194b2ca4705b2e79af692b285ec476169d041dd9ee"
+ "f20f7d496fc49b8597574d2602757ca",
+ "01521d7cf6aeaf1c8dd54a7776cfac02967983083770346d9768a2629d606be90d58ea82"
+ "377413a0fcc3e4e66f05a0d05d933ef"},
+ {NID_sect409k1, NID_sha224,
+ "356dc86cef7979148e995fc5abe2b14a7d5e4e42c9b3509b4363bb80c581a66f4e7e4aa5"
+ "3a4bfd37f9a7eccf75fdd726f348f6a3f779e6599f61bd1d668517f40453b39bcf35db08"
+ "52a6a6218198f52b7ceda2ec55fca5abe8e5d93af9a42b9ae4de9530c5870211bacc27c3"
+ "9aa094013db703de2fd3121f08d7e97dbd4e8946",
+ "03d65bdec48972d03811b78150a06956eb22d337dbec5416bbd8185a6322cd8c0ff80002"
+ "10dbd1326422289071cab65175f5d10",
+ "04000c9c1bb0a80c4b4863d78003e21ee60fc553ff72968c165f6eb6940250a6cb7d545c"
+ "6aed3760e42370df79b0d37c2d1433c486001a9d994828ac09a86c18b9758b3f6b91a577"
+ "5931a7a6e4d8b052204c972b993a3b420eb8ff7e91df77253a9f5847c5968b5636",
+ "0156d12708324cd30037753c78225d183723d3f15930f23bae854f121094bfffb5d7dece"
+ "1fca93bbe7457a2237760aef3db8e3f",
+ "071466e80e2a7cd8e6cb6dfde259a08619f880a71899c58bd4cd33c29f7b321d26953372"
+ "0101f2ef70f5b8e8f05c9cbe1ebc303",
+ "077330e08712ad709f855d92355cfb7d565efd806c6a853712916f7c943bfc79e496366d"
+ "eba79ef7491abad23086db341f339e5"},
+ {NID_sect409k1, NID_sha224,
+ "06fd39a50bf25e89f1071ff81fec5d1e35b6dd68990414ee403dfdebb792627b6a4ae3d2"
+ "236c159e4441ff90b61ec87b1592c538515f0486b19e58583394a05e6411e69b4285d6d6"
+ "589982ac0eeb2c912c4948789cad741183663fc070943389d4e9a1150b8f6088fc506059"
+ "15e9e24b2d98a1f539024770e4820e14ae42ea8e",
+ "01f1a8b5f35dbbf82c102df550c72216a243f986f0325920f6186a16d1da74228cc02be6"
+ "024c7411160c183c923c743354f9438",
+ "040157ae8d90fe2416f70a7ce0669acdc0b5064ba650cb5416e59e6672e45b591774ebb2"
+ "f793c3a58e953da1ac08272d0b949e7b50006d49b9784f8423812967b857e25dc3af1312"
+ "a6ff29579f6acb6e155b6848ffac6fbce51bd2d41a22ef955f690e2487a4bbff00",
+ "04cc45e00847818397c6abb3d176cb8bd77814abfc253e3b0d799dff2c3e09a5195ed5e6"
+ "232873f2783c8e670b52a839e06bc30",
+ "067b418a5395216b83ab00d5568eeb62ae0693af2b0e4d052c6feb70562dcc06ef852002"
+ "687099dda114477871b924775e8460a",
+ "061d1e4d713689b2036272ad41571759b52a78e0f8a84d1f3a277aaa33ad558f0b71f3c5"
+ "a99d403e49df1afab66059db20f9f32"},
+ {NID_sect409k1, NID_sha224,
+ "6daaa41150ea252a3e966a338377307d909b95080e006f13027f2be5059d9208930c5a32"
+ "9994c0b794ef50eb059bc6c215f68cf42260bd410f9bd86d2ad5ab7179c7c92de4a93a5f"
+ "6aa17de5aefea815e7c0b78a8cc53c21dc4dee037b29c9df4e12343109283ffd5d8a3b81"
+ "fba1b5e95506c7e01ac056c86dd0ee23bc21af0a",
+ "031dc621200cd174193d95e9092ffb86189c52cdbb9ed937593f2cde7c4a0264b9100e1b"
+ "8407336c8dfb5520d28a18dc4e39a89",
+ "0400904bb904d50bff09bae5dd21f425c808b41001ac917b022f7e1cda6e46504781a69b"
+ "aab4a6f0f100c4fff9ced26f871159cd30015cc300b0efbac707635c72bf855de4290f1b"
+ "8b70c16f9bd0cb771ed5c760ada04d0ff648f118d64e0aff6a6de16def15cf7437",
+ "07e32b1fc1cebeec3d84f56a67c8ea2b78723e7010a725ca4745e849e573e8e4a4ce11d1"
+ "af4ee508b80fb5336de3cb53161bf44",
+ "071cd81dfbacbb67be5903cbcbe402c0420adfa9d14148bea600b178fd06278572d34eb4"
+ "6d857085a2a4f48cd4ee9109d607dae",
+ "0347b1029e67a6ea2a45af1f7410dc951db813eabfd3c7f3e2c294b81e1c54fa8c98569e"
+ "fc580b68007bfa316424ac6eb353ac2"},
+ {NID_sect409k1, NID_sha224,
+ "6378dd1c12c5197b57d47dc46a67949bdd1e0809004e94d49b0234126a08ad5bf8723ebf"
+ "d132145813136d8b7dd096f56c34248f09a65c34f60c2f80f9a51b3795f3d2518b11aaea"
+ "f6dd45a323794080b78f85d629e5fa719b6ab0b14c78cd908befeaef0dbfaa08cec9318b"
+ "bcb376d48b11b68735c9554a45293db5e9239ae1",
+ "016e6750245a88340b0f0665b890459f8038e9b1366f2fc1326245a88d4c523ec94429f2"
+ "1869ce3dbf75126e58f77241c99efaa",
+ "04010184fd47e8e1e4d534ca1cf67f15bc8a80921b07e251c22eb88f25395e08d7a92837"
+ "74aed204fb5c14aa13c63a94ee691b4ff401252ad972bb8c0b286c222f42f7d42ca6561b"
+ "ac5e517921bda53e51043f13e711da8a813bb6880678e4d6a16820bab819d62e59",
+ "07f18539d00152f5b9a75d4f114812b87024e8a8f9c9a8d12139d0a74d87986f4305bde6"
+ "0375918ff2dfdb88b6deda640e17364",
+ "0735a15e7bd1f69f4e90739d42ae239a8e9238ad28b63ce291b57cb5b99922fbd5dbb7f7"
+ "4fcc23117243efbd036eded6ee0f28b",
+ "07bb3dc77cdd4138a02e2d5fd4f6ff8516b4c95b8255c629132ea8705c399fc60f8fb660"
+ "ed3aae52db283aabc3626a5559dfe85"},
+ {NID_sect409k1, NID_sha224,
+ "b898d0f9bd80e083fa541f457d14d853bba55b120424a95e1d9511c8833f48444329e034"
+ "9d68204c4b4581ef1c4dee23ed0a4445727a72e1e6cde422f7c10ae132a3fe681f9d741f"
+ "da263e73f7cdf10759467c9d76164086abf6780ad474772771eee22d195339bb8f6235e0"
+ "d992bbe282b13ce4fe01417f507a2c4fa155e108",
+ "0788fabdafeebb72f6385301e30024b56639e629a400f9c50d402cfc9b5817844f06a451"
+ "fbda29c7ece41dc9ffcfc625fe0ff0a",
+ "04009b2c36d221d18189e1617cb2f2ddcd64cdf8a42ba6acc55f04e9722b11588f7fa861"
+ "a3940820d9dabbab631d7fd4106c60f37e00da099cdb10dfe2d7c0a16ed332b459e7be31"
+ "f44b0b2d595dc948f0b073ac4e439f24f215fba5ed50aef3702731d6561eee1986",
+ "00581369aca680beb705f52b6bef075de83ad29034c3d6b2949b551a0bbd100897a079b4"
+ "9d41d5030e1a6950fdb14d70dbbdb41",
+ "04f62415c99c8e6750f9c41c31cf050eb58f61f62eb0b0023d61dfc30e7879d4f5a87e88"
+ "faf55522631a29fb69d16e15c354323",
+ "06df238f34b5ae664860b43ea11defe3120591cfa371367096006c03e83d372bfb70da6f"
+ "789665136b7dd1c59894a2fc5038c4b"},
+ {NID_sect409k1, NID_sha256,
+ "dbe04561ea8579672a2b3afa94426a3cbc274b55263989d41a778bcb082da797d84d930c"
+ "a847a481789524940701cd5f1d11b460bdac0bffb0b3a3abe1ab689c519700de85a0a571"
+ "494ba0cfc3c865450eba7a9e916b7fa9df55e8a1c246c992e6a0b44b78274e008472bed8"
+ "d8411633e6520e1a906c5d0c8aafd572fe6f1f64",
+ "01b8dfd64563dc219d6eeb53f2e3ad1d771140d0960b211dc1f757af5e297dc7548d6133"
+ "ddb574711d466688f80dbd65a7bbcdc",
+ "0401ec530638ea0663cd3a9b237dd66402adf50d3094391f2343d7d6c52c1d14145c2454"
+ "64a3b771e4b1894462fbfaf440e53eef7e018349e244b24c8353811c29a60d8e02caf195"
+ "a424aeafdfd0361846d5ce5eb83da1901700f00fcb85a0c2543b49a8a3ccbac157",
+ "026a26cd09c9329cd45ceb4c798846dd81af67759794f5cadab84de19a835f8a0ae49b12"
+ "853b1e92822477a73891f85acce4216",
+ "04d83a5f9dad246717135bec6e386ec6b73be9ea6d1a17334ea2003a723d510914167d13"
+ "6254d6cb64b16ef7eec5044b8f2ba28",
+ "03e81601d0c66b507a491c530075edc5b09d770633a4c2355b3b1c7df9b200ebc7dcb706"
+ "be1696aab70d4c6e1c4a7e532284670"},
+ {NID_sect409k1, NID_sha256,
+ "48a8300820fea2ad83c83f7d6b24192715329c3f159d56644e11ed25efcbd3d31600a813"
+ "b909812987b97d1087e74a63b4494cc031c63492b6615e9d6e5b36f62cb2ef88b9f73659"
+ "5800de465789f43811165a5fc093ee6d776008739de8de2a84e878748641be8bd52e5b89"
+ "1c4145f52bbd46644852a43108e93d86352b2a3c",
+ "0422131829608ff730c24ddf7e8b4a2600eaa9681eaf45432daa7d41fe2fb488fd0199d4"
+ "31a1ed823801ce21f4f01a4dd4248ca",
+ "04006ff24eb0ab812303bdc9a23719caa789eb75775e686b9511bf6e07d60447d1601a48"
+ "ae7f3041cef5aaf3ed2adb6feb422fbc54009a351fdc9422a81ebef5407d0d74b52a348c"
+ "af3cf6e1c6c2af722c408941de154619a1d54bc23a9dfc0c4964f3936d62daa6a4",
+ "0313ec63c34ed325d770664aed3bfd1a16eb636516eb686e806b0acf6f0d117998b30fd5"
+ "2068a36f03d0db3ec13e6989c6f196a",
+ "0088167f96d807bdd61e65fadaf0c56b623db42b831909d12641e4d00e7bca6077b36cfa"
+ "759fcbbf087c31f294f20a09e0bdc96",
+ "01cbd06232b4c73cdd13208dd254ebf9351745ee6196e3a94b9213e931f141e4cc71f3d3"
+ "18a67e7b8060e11e88783fca0be41cb"},
+ {NID_sect409k1, NID_sha256,
+ "276e3a986ce33256014aaa3e55cc1f4c75fe831746b342eadb017676b0cba7c353b3a2b5"
+ "54522c12e6aeaf1364cd2eb765a404b3d0aa61258194a30219d76d2bfa98ad20e7e91756"
+ "cf65e50d7914157f283f2ba3930c0ad3a97532cc747b1cb9c806fff497f0322025a3d02f"
+ "f407fc7b5808585b91d95523c9d5864efdf7d983",
+ "0095ae8e4c7e55eb5da01acc05ecfe72a4dcd8ec152f1c8dc165014f70eb4e4a7861aeb2"
+ "b96c418b2d4db58659e76184e013a49",
+ "0400a3987d7262dc30e8ec11458ff7091ca993bc61f142ee535d544a2c88a47f96011076"
+ "19617a5e65cdd6d5e1a034aaa22304434201fc8af29d5134ca9baf92041b6d6aefabccac"
+ "a4013c55c1581ac05db6141290235ea09650a289907785d282cef1b9efb381ae66",
+ "066015a77c99015ed6983bb379772bd90e03b9c010e695853ebf8e461a20fc12b20bdda4"
+ "7eef856f162dfbd9fd4fc1ec49105d3",
+ "067c49b96e5bfb6a6d625346c3ecff13b8c8b7e59c764b73b256ac970aa4056460000e59"
+ "9a8195f2d235a75cee8e5634acfa7ed",
+ "03ce25ef1af0784645f0579da381542f5b8aef377e5b79193314f84853e2a07a4f1aaa4d"
+ "8210f3a3c249a879cfa3ea8af43a929"},
+ {NID_sect409k1, NID_sha256,
+ "6a4fc1827c3a7256faa8ec6a0f3d23559d6949f8cc20e7f76111dc4ebd59213951cbf0ea"
+ "dacaeb8862d6baa0cb298645e4314b1c303bd0d5e9893304d4b7fbd36ab05fb6a5edc3fe"
+ "f763e3a4124d61539eb616b359c5cb55b5e2bec50c91dd95fc39ddf521aa854216eb5a70"
+ "7819fa6f067b316a17a3b146e7cc2dd517f7d63f",
+ "006f2075bd730f34df111ebda919167b1d3358ada32cd6747cb3353bcfb814a77ac70cd5"
+ "1b31a0e538539453bf9eaf9d8b384c9",
+ "0400bbc153deaec0bcc36c03d24afd20dacd9e78d104d94c279278d04b597ccccae43cd3"
+ "e64c9e1e58fb5408f376dd7827ede9dc3a015ae0d803acf12d9d3fd41f74357b1c93cec0"
+ "480f2e586d0e18f15e569d27d3d106e192ee0c1c570351eff1f463dc07d3bea933",
+ "0314330098250e38145d11a48f5043190c6b44f8572ae57cf83b1f3c4c03ce38b90ed5e1"
+ "57464c2613c82943d78c938fcde89d7",
+ "0160b20c370ef4b9cca3f7dd3c23f70efe6bd80751ca021731bdfb0f45ae07e5f2144c77"
+ "795aafdb0c3a92ebbef75fb2d334dee",
+ "045188dd2402ad36ae4278a9910648ed5e71d64737651c133aa89850e3bef2207d58ba41"
+ "69e471a4737962f5fafd50a37a28e1b"},
+ {NID_sect409k1, NID_sha256,
+ "4b088199bd8c94775d8ee508377d672dbf50f6d2c7370e99821ec8f9387492fb2eebdbea"
+ "473ea18465565f79e2af418555f10c4a527e05a9e20c9c00b807dc8b350cd4ccc2d87e91"
+ "f66addf02ce4f43597aa258ac6fbe9365cc2c8e8bbe5c884abc929710e8423cd6722a8f4"
+ "73bb55804159a92a3d8b6661a536b4fb9293bb0a",
+ "03887d284e9ad17d38bc6da9d83c192a434c509340a7f233cebb032b09ab7c4c6e8730b4"
+ "a80844898616c9abcd16b753c6bb4c5",
+ "04012a6d5c5690ebf14ecfa54ac97b73e88e16e757c34c6bbfdc9a3a119f298860d330af"
+ "295756dec41eedeadc5257b202451faa06019f40ff28bb72af659d5319286fe21f018199"
+ "52d471ce2433ade745042a47c2dae798199c364ceb99029c2dd5cf57ef5daa2b00",
+ "035945b45221300f83c5fafbaf0645a7386e209d025b3e1dc367819728f630663fb732b2"
+ "51a019e08dde0f64dd3f60a10065c50",
+ "00c323c86e8cc548123d1337936d4be948bd4bce4631a2194c2bf04e1fd714df2c90e368"
+ "1e41a21d58d9567a5df9fc478dca8e8",
+ "0493d3f4d22cf8517c301f15bde52cef17c05fed2482f3ef15cdbe32c5f0975e054d45b1"
+ "3faf906896201942f29e5693bfbb229"},
+ {NID_sect409k1, NID_sha256,
+ "848a13465ddcfb2dc14f7bc0db0756832c22dde1e31e4d8b3ae0dd1aafbdf15e954889e9"
+ "5d3bdfd6e5ebb6171fad62592c23277a89e8ba53978c9b1afedfef7e1c3f6d9f31077530"
+ "460b47834b30bbd84a4da601be988738aa815d3d7e72043243a5288751ee08b4815a017f"
+ "b5d9bd55833698a0d526b1ed79da35ef0fac93da",
+ "02ea5430610864257c9dc393c3addcd0d8d5bc8aab1067643b08857210464428aa85cf1a"
+ "e6c743fd2682255d4c8eaa46ca21e73",
+ "0401e502d3f47823ac7207861855fe6f6aad1fa4f2149bff2643b079da23fb270599f744"
+ "669b3c8ceb4cb0989aabd43d26d93c814600cdcfc138451bb59f34dc82b8128088b5ae0c"
+ "b8a77dce1895d5ffdfc8b4be24a206b9856954508b82b80d0163b276683489074a",
+ "0426b90275d720d19c6ef5c8c74c568a636257740530e3ad10de0d518c4eaad8bc58cf45"
+ "06cf5cdf7f2b03edd1caadb28fa3787",
+ "0123ad87c094c4ccfe4346dadad54a6b1ee1bffaa1b7b9094fe2e6ae785a2b77ce3f5e56"
+ "8e43e8b7fa997206262645f56078657",
+ "00d56cd5cc64736ff7ea0d9840916b1e1c94e11611f93b1b11c2ee98c79d92a8af1a560c"
+ "9938dc4bdd0b84252e259ae5669d1c3"},
+ {NID_sect409k1, NID_sha256,
+ "d1850545c04ea65528849973c220205c35eae98826d169348970d1420b4d872ce233af1d"
+ "aa9e62f6a562544ae3a0633a954a493e9766dd5d87e47486559fdf86229a7c9e1726de21"
+ "895abdcf2422d438f4ad98d88b45c56742694ad5e11894253270997c049f0f419842482f"
+ "21c792fbe5613e2defecd485585f1835b6f4c578",
+ "062c757c92eaef41f5d81169ec4968145b5aa2bc1d2a3a5fd000634777748ecb93677b3d"
+ "a12e3be33272a8f0a52300f4a5a37c4",
+ "040139660fb8bbba59e8f4e95e5ee5b97227220f0e1b293901fedcc6dab86e7c5a9d20c1"
+ "a097ee2e926a934cce679fb8dcd8d2ed6c008ac510ddf735184e8fa9693da264194fb78d"
+ "a5d1cdc0bf5faadb33950ca191fe233eb8dac8adcbfe15b4f7c09d5ddeef6bcd1a",
+ "026868bf1764993d650aaebf117521cd146ea20067cc14a5843f726a3d68e41c3fba82a8"
+ "3d406b2275b3459748b3bd1a8d32f1a",
+ "05b17d13ae4d9535d062a2653bae4d15b9b859a87c33e175adc3ef04781bced888f3e93e"
+ "9804b2251a40b9344c0f8c6bd5be0ba",
+ "01ec3322c5beba4423b13a0528c71739a6b39f7b0e0e58a8274a8386167cadef51e5560a"
+ "3e9d97447e3d3c06288459fe6569345"},
+ {NID_sect409k1, NID_sha256,
+ "421c9784d6fd507c82904e1054edf9bdd1efb58a0b211340086069ad38b7b0dd15c2345f"
+ "a8767ef71254ed1bd5c35f742b1d3f4765ff9007a5477ba9e5d3d5a5cb5fab4efc1cad73"
+ "701d4776c6c4343f42b5d94a9eb78ae428dfe5fbdd8e6ece09d5b75cf4346cf27db85635"
+ "2225ab04e6ea56661554fbc39916accebecb3935",
+ "048a313c0c11489939fc0cffc6ccb9f179093c4e13141b92dbbaac441b7ae878c9d41206"
+ "6e95615174a24692555cbbe904a14cf",
+ "0400677c2d364fa86b8b0c79af754e675ea3e806d5583e62087e01590b824d2730e31326"
+ "591167f02bdd29f8178787c4e1ba9d249600e7f78c423baeebf6defe9feb8ada8874ceca"
+ "b083ca2e71d9d8a3fbe846eda69262a1f5b4a3baccaaa4f2cc87220edb1fa6b6bf",
+ "012b8df87dd935775b80c62ed6c76974fa5772939a9e7372cb74e033fbae4f78d75b8bfb"
+ "b82240cf91009b5bef4d63ded04cbc9",
+ "000590a9e8de60b5cb181a1c11c2f6115c66b05e71e0c558ae203ee18e54de68016f4c7e"
+ "d2f01cb0cbaf1bdc45218c0fe2b1552",
+ "0521844eee9168a501e235de5fd19c84f052445fb0e68bba687ace45d8630070ddd3b730"
+ "34d1d65788a51acf91273fd187a24ed"},
+ {NID_sect409k1, NID_sha256,
+ "7910bab15b6429947655e33a67f41b76f1d7b71534f8904d6a0472c2faded038565272d0"
+ "b5f51aa915e0d624e9ff48d50ebfa2f09324864f26c29ab73eb39b436c5c459c7cff4d2b"
+ "62992e3489cb4ddfc05d7366b161a463aa1b782641d93507de43c8cd0a0a0a9d1c644f45"
+ "54e3edaf7fd794248110ca9387e73ae5d00d299e",
+ "046e2adfe5d3549e1e6fa1fe69a7cbb4ac9b111c8903d544268f8318b0b47d4b78fe3e56"
+ "eb5e639ad5382e7cd5bd4b2c3e70ef6",
+ "04012902439be50c97aae7b40328984934d6c843415f76f3821c8e8323aba96ee41359e2"
+ "ce5ad3179063ea5e2c7deeda4d728d585201eb59fe96b269cc973b1fe1f3720aa9aa6ec4"
+ "cf303c5cccbaaebe6ef7c9f5356ec5e76b26b09479d9831d9f5aa41ae1d61f4c47",
+ "031893aef1baee0e21b50cff7002435b058d73dc4d8301ffdcf1e0c315d18c2b16f282e5"
+ "b294dc88369b25e2a1a19abffb578ab",
+ "039281ef10b9a2664b755a2db67b3c410276a424edf7681a5c97244eaac5826368a8095f"
+ "1b9b76f8e490e2783694d5bcf3565ea",
+ "039edd50721dd35d1704167e8cb609f309b9ed73d3c1eece181f9582aabc647c5ec8bd25"
+ "8e5802fb0647372e4c3929cf59ae2d5"},
+ {NID_sect409k1, NID_sha256,
+ "e6fc96e060b956c25d50ad25443f3c30a12d199a47451a49ce88307201dfb15ed816982e"
+ "8888a28daa92eaf3c5584ca6ab2ca9e14577f84396de2e0ac214b24a2279f5e7b344fb73"
+ "87e9afc8f0a2b77a4d024a20ce6183499b17096947444bbb753d9b39e5c694239d28f9c4"
+ "54bb05468d17ab564ee6cea3741747ccb7f108af",
+ "0480103fd6180a431c837643566706e2b9597de0a1346a224d176a5b2c54aa4d064418ed"
+ "654a5d39f4773fb509f86473ebb373f",
+ "0401d39e2772ff3d26c5936ab347bd5a2940ece42b1964f030c59ab453acd7f44716ba9d"
+ "88f0828de1a4e730ab27fe1859915818c60140b1b66b0a87de29ba2cfa799d944b3b898f"
+ "e7ac43de68b01fb41464506e2f014e0d11bbc0c24996428c93bc1a5ecee5956bb2",
+ "06e9bd0290548d35168f7db7fc292bc161a7710b78ac49ec6a42c9423afea1310597e597"
+ "8b22b4dfa192489323b2317e4714d37",
+ "055dbf88b6221dff098345226d59d396b6773611ca6e747d26d5d758760d830693df0f5c"
+ "602859f9caffd0dc3790dfa08c527c2",
+ "03e679447b622c4b06871f2337f5a24150e76efcef9698c6fd463867508e9d7b803667c3"
+ "2989a881c98a90998944c070aa58b17"},
+ {NID_sect409k1, NID_sha256,
+ "c8a8a0d41f35537e6fd523ee099eb45e1ad6ab54bed4d3e315e20227db03292e39dc1a91"
+ "bab439c0d20e36e7fea6ef08983f390a6b5551ac3b4f1895220b2867fab95552cef9bd87"
+ "02962839bd9b2c72772640e7d3be3c5889d226acbefdcb448432bc503e5a5fe7ae9ae769"
+ "6c720a799f9882c64ae0385f656074dd8a6821f5",
+ "013c489e8311c6bef02c8f58903b2ba2a98a27cb935d75a30d320af9a14fa3cbc6adcce0"
+ "9235a9eaf333dd05f4b2f1694985dc4",
+ "040046a1c0e7753cb499d19b2805df770ba54f1c6e03611c302c73c72902867c51c1cf9e"
+ "d154b8f30f72002421029de7ba2d8fad22002aef9c34c7c8216a805a58dd88185f404930"
+ "86213cb4c85e4d226bb5e892aa37be353d9123e9900f8b0790a43d55a19d78c48a",
+ "0491dcc881731112ad5e9e1df459c27381a7bf8270f97743466e178bf5ca903971b362b7"
+ "3fdbef8a75d4292e63e225396c7b32f",
+ "048425b76147427b8b1969bba3809dd70f0fda24cfb0e92509a7824f027b61cd38441a69"
+ "1efe213f3c331da8c82f94bbde511d9",
+ "00df36683f22e9e86c88097d75409ea297d391550440e4327f67b7af1b09141a0e7a1db4"
+ "0c4b0bf4d60376a6636dbeeff0b6b91"},
+ {NID_sect409k1, NID_sha256,
+ "3407cd6d2845197cd7414a30fc3df7184da204222ffd65c4d16a12cadabf603de8043ea1"
+ "4f5e6ddcc22d3572dc06dec1a23cd924e1847ae285ecf01754e2d1247876431eb98e897e"
+ "47412a2330bb32990f9714122109e94b38f82cfdbbf2eeb4c6f88f5dbf9f0ccb47939df8"
+ "be321dcd9bfd9bb99cac9f94885fee7d443fbd87",
+ "02419bd2200f8e1d87db848b0379741685e680d9affe693eed49d82931030b6cb05d21a4"
+ "965f4e1df2045c8513a8f574ca9f2e7",
+ "0400641a6ac72455ceb142e00d6854acc5f8b86db7bb239a5054c1ed48dffb6d050458ff"
+ "ea8adb68613ad3cf5977ea7330268abaa201a954ab7d62796e5aed370285d3bf91ddd34e"
+ "ff3b995d04967db41c2171cb2157d85032c998795ed476c891702d63ff0108f45a",
+ "02e9928f427a86c4491a47b31454ea7d497435af81c07bc96fa61f4507494fbe4ffc1fff"
+ "a8faadc2a44c7e69c4f976661750f8b",
+ "01e8ff4cb8c58fa48aaf61488cc4118df90e8c06cbd88234cc920e5795597ffdc0ab967f"
+ "a7461082a49de56f02f84cd9d564316",
+ "06e77ac43fc7af3c126f997fe15011fa87a27479fbd5af48e28ccc2c1bedb6c0695291dd"
+ "67beeec3f17cbfecefbea46b6325fdd"},
+ {NID_sect409k1, NID_sha256,
+ "ad43f8440071285d01fd79244907803601aff4bc5d14c77483a87cd742144d41c68269d7"
+ "6c9a83c09d2178bbcbdf99f927b378497ffdc907a75a3b0ad019e69758dfffa480871eb6"
+ "e1e17c8539373de611a557fad120d0bd147f8debe5f09a02e56fb607e9c1253ed592071f"
+ "042e42fee39775b407225a2b86a950d81bb7d7ef",
+ "0722951879a65bfcb414e11712ee9431eeb32319e0ff28601112f89276ffc2b96eb65c7f"
+ "d77d023f09914a53e2aae2c84652bad",
+ "0400a0304caec1b68b34c822a2a031145677fe515dda977f6932ea2a3291c6bb4fe8f297"
+ "b7d3c632f9b3806a8cd26e32403c27fc7a00012d4c3231898a4202f3f251802c690353ae"
+ "9cc28ae5089e259149bce444d31a38927dcb42ed613d4818e235884749057ebd02",
+ "0331611e81d3e6e3a24cc829c1cb9087a8c6f64c286e5f1acfb1ba764eea5ca55be544d3"
+ "cb95fb98407fb6c8f9eb1b3f7ae7386",
+ "056901f11ec69f91b31f7f41f7856752568b7d34ff3af1a2259fe15ae0b01391eeaffb62"
+ "9976525fce5d182663b7b23a8001bb3",
+ "04e89c3155afda2e64c749536392554cc299b70020362e6701e3a649f0a63ae5a5da4efe"
+ "d5c73b5e8098c0cf47d6f4c45c6fab9"},
+ {NID_sect409k1, NID_sha256,
+ "d61a3765229dcd0b4fa6c57280f851ec2bd54d3ee2436935cd6d94e0120d0844adda1639"
+ "95fbc4cd9d7275da859ad8ebf30af9efbdcfc31c7c9ef42bce9011d37cf9d15fb018e117"
+ "bbc102f7d05750e5072f73d02c2f45509a55627a78cbd9082cbf36807759d1fe2ecbb92a"
+ "b30cf28434941712d38bdd100955d611987b5968",
+ "03f5b5a772d24bd5454bf26759dbd433fcc7bae4f5c593664c4d75da0cdf9430d7d9162b"
+ "ce3d7f6e13a344259da5a7d6a1635bb",
+ "0401ca1441b1f6e13138880196e69743206ce09c439a507a11c0fed069d4ed23676b27a3"
+ "a337c976c276809ae725229c9001708742013c47b14e3069af070869c12f0f39e35a6f33"
+ "4d98210d33c9da01ac80057911f5a392fb5c8cafeea01c1953e97d47e744160243",
+ "01484461d02c0337e8113e51aa7d46330f57d423b79b580a544d372524a853db9dac0c0d"
+ "16f733b273bf888271135a5162e70f2",
+ "0256d7ab133904a792987f8cea69e8e3cc674cd3c577f40ef6f12b31f52ac6366a2a3ea2"
+ "b2272c7bab8be00ca0d17989b6801a5",
+ "020d82cb9b3b1f25d993fc18b7303db4cfab91c03a97b249176f9bb2aa5ae7f589c74060"
+ "d25058c7acb6de1e888ff44481185b1"},
+ {NID_sect409k1, NID_sha256,
+ "1f3c23636414ced48fab6763eed5b22537968e6bf08c178b3d31fb1f6ea773c697975970"
+ "1d94bc1bee7c354272811edec58eff50c93331b22723d460e56dbee90466b894354777b2"
+ "3b13a37d15a84c762caca70c01518bf34d0c2f072145d274b3b6c932b48bd815fe81161d"
+ "8507ffbc2f783bd212c29b2887af6d2ffa9d2b4d",
+ "046bb4a141c9099d531dd23ac440eff1f5b10f7cf34920b6b702311d490d25344c665ed5"
+ "211d401def24986c8094165d10f8934",
+ "04013db47ac0e33af0cc7d74f6ce647fd80cdc1849b15c349bf501c95893be5a440f85b9"
+ "b029713339fb888d7a93632ea4e0bd813601f26f7009cede02e054d6499c9280794184e2"
+ "12e3e1091032fe0e3c189de26d04aa8a5909569017cf06ac2a20acf579ca81f3fd",
+ "046e55a908f13441bab63e5327ac346781399d5a9035a72aa21df708b814b67e420b455e"
+ "1410014cb53e6ab00f526ceb396bcf6",
+ "06db7a7b03d6a85069a943fcc332cb8c54ac978810374b12eaed4a5fa5342c8eabaec238"
+ "bfc6107fd03d75dc2c6d258c218a186",
+ "010a4115161765dd0c22a0915a0d8cc01905de91d3f08c6d2d85a6a92e1dc00904f3be67"
+ "fef000ce19f57157deb9afba7582b59"},
+ {NID_sect409k1, NID_sha384,
+ "ec69f2937ec793aaa3486d59d0c960ee50f640a9ce98a3becffc12d6a6c1c6c2f255d37d"
+ "29f9b4d068373a96beadac98fd5203a9f229bfc70bcd449640165ae5128e3f8d057769e2"
+ "8356e73e35d8e9af7876f608390090892c67391ddfcc1c332aa61efbf72d54bc615998b3"
+ "be8ab0a9d372784bea48c9fab244482c75cb2de3",
+ "06f2c6e9ea8109223d9a349fce14927618fc4fa95e05ecf9aba1546619eaeaca7b5815cc"
+ "07e97ae8cd1e9973ac603f84d838393",
+ "0401f5a9824584cbb0d5ed57f677caf62df77933ce19495d2df86855fb16456a50f157d1"
+ "8f35ff79b8a841a44ee821b36ea93b4f4001a88299000c07a9ad0e57c22fa8f15218cd90"
+ "ea1de5b8c56d69506ad0fd12b513ffbd224cb6ad590b79c7677a8eda47a8bdc484",
+ "042325aded3f71fc3ff0c84106f80a10af08d76d5e710a35d462e880e015a36d06359957"
+ "3ce2044537b9f62b51ed4fd2ed8b860",
+ "0667c74ee2d632aed13cad47e0b46a5176940652d7da613e4965876e7e22d89994bdeadd"
+ "6b5d9361c516fd51a4fb6b60b537e9c",
+ "026a01220a1166a4d0172428753e98caf0aaac5b0a09c5a3f11b2645d243991d141f59d6"
+ "cc502ac44b70e7c48d6b0d7b6ec4869"},
+ {NID_sect409k1, NID_sha384,
+ "70e11efc78d7f079ae41ac3c31c96d3220f4abfe23814a2a4a78d9b1a25e838c3408bd41"
+ "6062e4b0a5cdadf0c6e16a11e00f59711b417751f5e4b43ecad99efbdb2a81c91a034e89"
+ "edc94eb552c3eba62808563cdf64453a1db07daff8742aea4a9fa738e1322da316b26dbc"
+ "a2954b2bc0de6da7518d28e6677dec6ba8af4285",
+ "004212b7fd913d794fc6bb33e0276e349c052c969ecbf6afc89b28f75a599a9242acf74d"
+ "ec9f374361ba296ba42a38407f9b7d6",
+ "04019220ebacedc60762877881262c0c3dc0c8a709fe2ea16cdaad3b680d7cc8aae8617f"
+ "0acc9b5c9861ede651481f39927a24ecb2018afd77bc7fe54266275fcadc0fe8d4c0dba7"
+ "a1264c79bc31479f4bcd02245cde991791a7b7e65fbfa907457fb6d450c0985ae4",
+ "04c01ff477786304b24cb9c95ed70ba376ed6e4f6b3ab2f99ac575c92d3801e7f43bab07"
+ "2268705d61d3e2fd881f754b9c84235",
+ "00987cf8ef2b382fb25a6a542e688aa96c098f5d16be0c7d46e961b4a4152c372cc06839"
+ "93843bf5a04f81e6068843582fca48c",
+ "036fba32f80cd2e66bf31baf87616027c5b107f72f11fc766b42e2774e29e10e860577c0"
+ "d3a27a3b49754e6a189680b7a638408"},
+ {NID_sect409k1, NID_sha384,
+ "d922fa515e3bed60b517a2d37cafe4c041e5ab4b5c8d8d4011bf9fc4013dd8abf7add71f"
+ "cfde5e71d6abe76bd0f749e960cbed55711c87b5629a2c39cff48ed7d0feaf5cc4765e57"
+ "6a4959521f9a45fcba0dc65ae618826447e02ce6e1cab5ce8d6c96c3211adbb0660de7df"
+ "7453f3aa726016941d00d8ee536cc106a603d126",
+ "06baeebb5ffc89c94c3e8b37b9b0904e7c4b251d204894655bf3b1235710215c29820b9d"
+ "401c9ca7df1404d2d62d708aafe208a",
+ "0400a0b2a185ad7ddcaa0d8d21b643a14948d3552e25875506d64e236a90d274ad1ca678"
+ "e628acc208bfe6b56c02df9f5a36aa94ec00fef210c7137237da8ecfc2f069cb9390c132"
+ "d1c6ce961f2bb3ca925ee727c967f8a46727c8811c94ef66f20836c661a5cd1c59",
+ "02185be104ad16abfe4fb83de5db067d37ca58510b786b109514debef56cceb4dd6ebe53"
+ "b25127b85faf9c28b56d6586c26d60e",
+ "0404831192b4bd453c0a7e850815ac3fad88c7a2da27d29e83ca6f22213635a366018ac0"
+ "038b1fb1e4c512cac15b614fb69b3e2",
+ "06f677c361547c91428d0e200dd00777262a138afcd828238d132c56b2c232e2b446cc69"
+ "3fdc4013f05ce7021aea5b5b2f1b34f"},
+ {NID_sect409k1, NID_sha384,
+ "4f64d0f6bfc542a0d4347576935bd68ca88524ead03b8d2c494061d0658e6c3e14576b5b"
+ "cea5f2f992f54cfb52b5c7cf1dfc517205e0454510eef1b7054a8cd06ab53ed2468193f9"
+ "8ff0dd62faf076549ab2a270f259276d5729996c120792c6f466a74ab65035bf38ff2c05"
+ "5b43e2a8b8e2449a2375ddbfc18242157bd905f8",
+ "008e5f66ba53e7caad1feda122a80c32c82d2c32a7237b8ee8ead44ea8f2f01d77c7056b"
+ "9dd60b92d051f060da8532c1fd0e8f4",
+ "0401a3d020a0c7e3f3fe5b3d9fa6b6148cd0c481b4f9e14dc85aeffff35e62545654fc31"
+ "3f930ca2e33dced28ec28d0fce6ceaeaa2013c1ac166c3c088e8a4a9d44556e3344e52e8"
+ "741ed1a8b526a45268086e2fe54c24d398553d509439ad4957454eb68af594e683",
+ "0095caaf063abba5073aa7123b2c0e1666d29bfdfdfb0c484e18931d756ed0845ea15dee"
+ "1e9abcbbe4576113a8806aab9476b16",
+ "04d6e33001933221e9eaa78da5874f639749c7396dae90f2da4ccfca15b50ee9e50521cd"
+ "84d78a098e0c383fab0186b3dfe1b3e",
+ "001e17cc7baa3e9ff4d882da970caf7d55b4e0fb7f0cdaaaa8290fe2fc9cc31d51b34b5d"
+ "cc825bf6799ce22fc95382d46f3f98c"},
+ {NID_sect409k1, NID_sha384,
+ "7047d478ec5282d55db8c19c97af10951982d908c759ff590f27d57e2664f08d526cbb2b"
+ "fde39bdbb1aa3dca5a8d3feb50b868be6651f197abccc9d8040b623de367e2ea1d20ecd3"
+ "02afb9e273f4be9f3f64f2c2eb3f92d5e0e375db6549da2a589f0604bc7146562ccefd15"
+ "995a7c4208f640e7a17afbca69cda4e173380523",
+ "04ecb22b44e809f89b16abb10be062c89b41ee34e110403e42a20ce59a99afdc22f6f6dd"
+ "a56e1d9d1b8ce1d057f390db111def3",
+ "0400dbb4a6ed11f36eb78417269c1b1e9725eba1666591afaffb5582c8b4d5bee1d73922"
+ "b0164a05bf21a12052171abbdd3130555201eb385afe8588ceaac9f39a5cb4455e02bca4"
+ "8f3d2242730e0f9e06ff1db24344379f96356531676cd5af234a120f4b61f7e041",
+ "01cc97a718ebeffed4ca7a9a4389d6b0fafb73ab000463b68b5580267aec203b6231cfb5"
+ "afbf7ad8192f0947c7f40d9e060ab32",
+ "021a29f56c31227daf0dc5dc919434978943b80f4b18748bb5f7d6702153b966a0a4af6f"
+ "209ecfa3aae0e4f32a1b7c6ae58a55f",
+ "06921b2e2ab81517a0785c4ac3be3d7d4b4c917d7a1e4313b123ae96056a2a4a66d9e008"
+ "19d8c1cca5bc0d75e4e05477c1fcbff"},
+ {NID_sect409k1, NID_sha384,
+ "1a8384b4771a410663e56eb36c5d9ede8d161a8fb0e31d3f74bcb017b9e31232bb2e2f4c"
+ "65a2d85bcd1cedd93ef08d4bb4af0095731574ab3f2762788a1ba3bf0ee46684da8d9dd3"
+ "84432fee99ed3c69213d790a5d81b351063eaf2bda71ca4868ac36be1b571024a8bf0903"
+ "9b347fa996d5d161078314e24b7d073e05cb3d48",
+ "051f9500c15ae73d6d479b9f3d2caccc2039d8d03820befc2aae3bbaf65d59bd9cb3c4e3"
+ "aa8bed5b3acb70a5566047ffad80729",
+ "0400ee8ca7f55225760c515bae053ebbf4ab23567f95c7091fee2acfff079eda297ec6a7"
+ "e9d526e12e5976431f9d7e52a2318ddcd80185e2c17705a2555fbb8afbe8e41ced8ace95"
+ "c83e198be3c7dcdeac8c2c5bdd988800f1194e553bd0348ebe6c29c16f35d50895",
+ "073f96451cab2d3ca9810e265b3461e0fbe7f32fd6702f06891b97969b133eafd68e53b5"
+ "26b5e32b0d06ab61ecd75e1bbb21b7c",
+ "067d55e709f6966cb2082d8021a313850c53305a3bcc926b6f9a122181665328fdc8e05a"
+ "88de812357be85d22c61c919876fec3",
+ "063d5ee4a63b1fae39f266a9f826754f5bca4d7bd414dedd16858b5c6ac2d4162e28ab57"
+ "215c6713320d3d6960f6b55e3f1897b"},
+ {NID_sect409k1, NID_sha384,
+ "43513d6dd8bb0af7a6f5a2b35f99957d335a48d54f2c4019ce9518b35441d4935518976a"
+ "b1df37110b5b53532cd9e2c66d9f87ae7f683d7efdbe1775a6c15eecee84c6f879999d07"
+ "06f6779dc158c111fe8d7201983883bc8334f51dec60004eb1087347bfdab20f8f2f2605"
+ "56681e05fdbb8a6139857fd3bb2df5bc1f2dc143",
+ "00cf01dc4462cca764f4f8cbef48c51980737b9b98d1384b8de9f4c733829db7718a9b5e"
+ "aa46a8475c2144fe4454cb8eeb0a443",
+ "0400806457fbb7fc577497c937600c5a9c4df2c20cf7dad4510e5ad617fb2849bfe6956c"
+ "3efeab6b805cb7b63bf5d1c94e5ddb456e00915071cee2094efdcc155f893da8d83d9a5c"
+ "234d0f04f738b7af5b8fddaf1d3aa152fc11894a13caee0009bc106a64323e9dda",
+ "024968902b50febf13be11821d0d316f2daaa07737af45ce2e855aea6ed58f226d2279eb"
+ "e4295c5d7674104bff75b899609561a",
+ "0549f18f1d654f26ca134df4707694e5d9b3693bb34ab5123ce4d9e4c2b2d9756ddad957"
+ "a4169fc9bcea29944903080f6f5d01b",
+ "021887355c6360bc4ee59f1badb5325763e9428e60b31a7abed06ef03bff0b1265662d60"
+ "4dd2e0140c355c70fce1b56ab143201"},
+ {NID_sect409k1, NID_sha384,
+ "752300bc5066d0efaf807183a41725e349907b7339d77c79921ead3c685b616b0eb97e70"
+ "8f3880fce0136c510c8cb53b22cb424af6f1c34633600939a0647c02d8f9601f9416f1d2"
+ "4a51657241fb559c25dfba91402cea43bca1a13718b3945b048725f3df560e6717cfc6eb"
+ "d894e29bff1e0c7763f15b8ea93e67385f059598",
+ "063a9a565497974c6dd459bea0d1196d74f263f333c31b7e8591499960e1cd79e2ef4cc8"
+ "709f6d54713f873b16e7b0be42f71c8",
+ "04018872e9d9410dbde671fc050ab88101f01d146a72d62b630b29790b20fc02cb62cd0e"
+ "bb5b453a46c60ec2d2c66de8715c32057801b6af51db1c42b743b89be0900d23f7da80b1"
+ "5f2e7a2a965c7bc13800bf58589560af4697f873b6155194badf5a19a653e63da3",
+ "01d3278e6e78386146fc15006258d7a62a1345db3c2e44fb8d3bf8101727bef254a9fbff"
+ "157072326a85b5ef4e17c5b0212bedd",
+ "07bd5b54d9c6d6f9c87f4a66472be2c4bb7f521ae56c1dd71781d95440b0a151d206ddf6"
+ "27e5ed3f9c7df2fc914a78454e97616",
+ "075e39ff66ab0e0d1b46f9679b95d10b692874d45fd6898c569aac28a53569646bb29f85"
+ "56e529ef83a15c574ad5e1c82878154"},
+ {NID_sect409k1, NID_sha384,
+ "f620603489944769c02e2f902c2299dd5f32b5fb463c841b7e1fc0249a85d2c31684bd3d"
+ "aacd97de8291c5d39e84d6e59d3dde1b30c181bfe8d31b8d8e080bd191690a67fa00024a"
+ "c8c1b10981b40d4f88789ecc58fc69b15417fff34834e23453bb9933a43d08afab74d056"
+ "f366b40ad167b51ee5f008db151a12b467d3eaa2",
+ "041074dc186193d30aac7cc6d269b938ab40b257d095e54ba79967a377a91b8f73671470"
+ "cd07f0a3d1db7cf0a31ba9070625e43",
+ "04018fe9848dc599a759d90530480a6f11d052d2ce21a7275769ba02a61658c3b69ecc54"
+ "6aa6599e6699353ee1d65ce533c69fb2180192b9c41bfeb2af4f29dcd1c43d3fe72a070b"
+ "5d085d070acdb8c02f0dba00c9471df1dcca1006709676bc08b8ddad97310e25bc",
+ "036447681292dc781f7f4ed60126945354ad1df5987266038c5049d698b2ae12965b6fc5"
+ "8f3e944c4751406087859973d8afcd2",
+ "0541c22a6cb984cafddb3269ba3ee56af64cb36d03b7cd1693b112a7df20f0422219f85c"
+ "6820130ad53ef69fb66f3326bb863a9",
+ "00fa66b163ec3582760b048ba9a0fba9443d7e908b67d749d732ac9b6e89c1fcbc6d3ff4"
+ "e02a43ee41414b15ead0cb83749e0a9"},
+ {NID_sect409k1, NID_sha384,
+ "5575f610762b42ce4e98d7bcf45a7a6a0d66ec7f27d6b8b17f1961249d905bc7e58e2ce0"
+ "806d467f106b16285dce4544c72666d08b5e2276cd0c4e13187cbda8aecf57b1855afedf"
+ "8fad39ee4fe009f204e60bdbec79b123456ec2d85631d382b8a2f2c7634af3992e4707f7"
+ "b4215e2c9d3b0aa8fb08267953883a4213669d33",
+ "010820db54ccf0226161aeaee79cfd2797f87702b4ee91adf8543b3c9e79579d0df8a889"
+ "e366ec1e0718e039b87a37c24d620e9",
+ "04002eb4e313f158ba7497130e2d64804ac45a7db207c55d41f39979e0303dd2641c8105"
+ "0fb7f24f2fd2485b90f60985cbb15d56be00a190fb6c81c104164578da6bd4f2b193cd11"
+ "935e1f87f14e824c2bf8c82c39f0be1a6de3dfc6dd68af8cb14f6a78f38773a7ca",
+ "0118e911f676f004fe581d1855e5795e5f4ddb33fb8d409d557aeea87895b7c23a513ca0"
+ "010f98b3a63f2c65da5e3b6c37cf5f0",
+ "060c7f7c47c16b294867cee3e65eac8fc828229a5d3adf8e68e14dee620e9d4e7b78c8b9"
+ "02b5042b5f19c94e621c52836c95ba8",
+ "008d036087b23319553faf835b793c73204cdbe2c1c2463e74de8f404e66ff15ce9384d2"
+ "6149e7300ed1a109afd1f915edef912"},
+ {NID_sect409k1, NID_sha384,
+ "81cf067411dde2d0ab04fe5fa1e28e6975cdcc571588de60a35bd956a535fbbda4affd08"
+ "03d244f3f7e6902a2c9a7ef2488691b6bef7f8ffb33be09ccae4c5285265e4957f7928ea"
+ "5cbabd6823297f59a7cfc9939a49f26bde74c4c69e2d38c1efbacbcfdef0112138431580"
+ "72be84ed3c1781f67a0e2d4e9ba76a585c17fc0a",
+ "059d2a06e8bfd5e14a9bc8777958b85be5e97af892d2cdeb0ecbd2d5017952b5042349db"
+ "5fedba2e26e7b85bbb31ad313d99434",
+ "0400af276952a1216ac88ca7a194f5b27b7c98c78c42f852dfc1a2cd4c1a477ed16eebfd"
+ "c90f613b6e264576a35c45f49aef8a564c00639625074b69346dc6c617d624d63ce415a3"
+ "6154a817f4e18c59a3b09e01589407077b19bbbdd57b04ef8fc2cc23c673d52910",
+ "002728f7e9b4772ab790af0be9ed5b3eab697c4710249169d2a5782ab3797b8fa21bf8c1"
+ "de659e3060af5a286353402ab982320",
+ "02a7027c6f94cc236dc8cbae35f9c38102a663b84f66143e2fbf9a152b1a6478bd803bf3"
+ "171f933f63509d539a54dd348002ef5",
+ "0549ecf85ca1bae6d9f0038dcef90c93121a654552780f5583a7d44a73a9360c6799e76a"
+ "632bc8907ce4626c0439f1518e3a250"},
+ {NID_sect409k1, NID_sha384,
+ "8ea18387940035cff2f37278d321b344231075db43c7fa7fee9bd3fdefe5e8f03e7af9de"
+ "afa1022eb108e19ec11fae34536a4fbac2e8c8139a081a997c080cbe8f3e2d2a72ff26ed"
+ "cc5338b21372fa1498e439e4d9bb12d51cc539f859047957b1b1f1fc30b90231eb06b365"
+ "a4d404a1fd5a0e5cef171fc95b04d0b557d78ebf",
+ "0405590893cbbe18f4ad99df28b5f9d17f8f1882269aff0b7eee9392859d68927a99c942"
+ "a3075269ddec6d69c0df2d76ab9d801",
+ "04006ce67ace45a9cfa0cb45e8e1d0eeb44e94bd7527fed6b563f1069140a3f36e010f85"
+ "e1ae5ef14d626c78465cae43230090baa601a66a58d87621b63ca662130ea342db029acc"
+ "2d99bf76cf6ec4e53ba71bde4b00e508d332081055a65fc6f44a96f4e947d729dd",
+ "0035f09e0c15b41c958596ad3f5c4bd4a3685ac94f19fb97503fb5fa29115cb18fdff4bd"
+ "104535847ff36650b7461550dacf2a3",
+ "051775fe1503ce80b3d581ea3e5ba761665568ce0eb7d6a7163d8d025d76002ca7bcf6d6"
+ "88b6477ae85d09c0d4017aba5ea8019",
+ "035cbe69edfb6fb99c9e45240b7a587c3805ab2ed6b0399c7dd8dd76187363b2ba1def66"
+ "b2c3dae4bc2e40d164bf0f4837798d8"},
+ {NID_sect409k1, NID_sha384,
+ "6a253c1aa17b2b1e6624afc8e7456d366ef5b1bd78e740538260f395481148a64da0b6a5"
+ "8cd53d7e06c691beae1a616547cd95c4d259a371e51c2c0e334c8a5311ae31e4c7af3256"
+ "86ff9f7a36f731010ee1a9b8a29169ceac36a060dd23611dc9713c615424888bb574ad5f"
+ "5755d7311bd169336ae986c977a394bf16487c4e",
+ "062bbb4f565aa0f23b88ab9029d33b995729d10fcfc33ba7c4051e2fbc72f15636a834e3"
+ "ebfe604b927cdfc89f53c57f36890db",
+ "040125242acf14c7e08e9f2f0194f734841758b1eea1e37ba80b9855a14100a5f0b57bc5"
+ "2a0200cb640121d96769e9cabc45362f5600dcf52cb899470943a37d260aa85fe83c3869"
+ "c862001021660ad09b4d73f7739ad331b3566bffad590534207c6db9acf98399b5",
+ "06095b4ed8d51e37f6c723648af4cd4585d9d250d7519139f58a93c75f197c4bbd1142da"
+ "59769a5fe178415c677caed1c3da667",
+ "041b212a54d4396ddea2898dadc363ac3ec5385c9b3b8ef1ea17c3d2f751d4f791372385"
+ "48ad759b5e1700d7d78072df3bf84e3",
+ "0149242afc524b0c3583037da153f539aad85aa0c19c6c70852e3c3923df8c3abd0189a2"
+ "abba872932eee2e6f45e02f98e810bf"},
+ {NID_sect409k1, NID_sha384,
+ "0f91d0f0139faf3b90a3d4bebd7e96ff6bb6f90f6c68321fb392637d8ab2a60d649a7b73"
+ "64ee6e4e274e1a8d342caee36cc11c56c54247fb0a8e8ef81ac4322b454dc9a195dc5456"
+ "7bf47ec8d4fa4cd32e76d78ea2d08bcbce3edbb68fd8597e56d5a9f2df4e47b2701046df"
+ "89615961db601bd8204584a6a6cfbb627e2a1190",
+ "03fad7031cf8810544a3e4bd1382c0a2e22c5a9fe4804ce67b27591fc516ee81dbac841d"
+ "399327168aa6abd79e2b5ef85df1528",
+ "0401ef0f918c683be57eeab95d5d1850bd492ace7f4b37785863647774a028e963ee2c0e"
+ "ea801838aa8217fad75c5780f1c36e8d4c01d5dfc69bcad46bde5539c58ebc89e1db2a3f"
+ "65069ed963280cc2cf228b2568bd53c6e0e164d6b63a5d3c2b8e3be9d5139a62ef",
+ "00eb16d784e2aed724cf1e4b72fe76b00dc80948c07f9c7524eb0e83bc59c12a8ed16fa7"
+ "ff21dffb8bbaa82925848a19c93884b",
+ "04a07e79b4f771363ad4c46cde0aadf3df4a233740a89168c97b54559029c51dc2c79b7c"
+ "c94a0e4e3d2f94e376fe47993da28bb",
+ "0360f559d37a777119b2aeebf00cc17e2edf04a2cbdf74366f5d34368d2eb2c92958e4dc"
+ "2b7453d5a509407a4d4643cc0235f57"},
+ {NID_sect409k1, NID_sha384,
+ "50c17c1fe4dc84648e5c3c3ab8f7c971d4c58d8d56d2b5ddd92e35e6792111ed8dac7644"
+ "ac8a07ca8bb4e38e071aa47b22ffe495e9083f9bf781ac1b5fba571862c909c7aaa7b8d0"
+ "5ddfb7ef61c99700de734d5658f44ae9fc908c85a2dac8e7f854d6d24be805fcd7f873a9"
+ "1252985c5c73129c60177ba8fd99daa87b25a073",
+ "03db41b4f637fe7977c90e4f1a21799baaddd1826c667102414877138436cfae1b995984"
+ "2b8097b5276f15f2b982ee59df263c8",
+ "04018eb25bbdeb41c5d14edc675fcac8a523acbfadd6456632bd593ab5f694a7734b163a"
+ "ceb6e6b3d8ed83fa1cf7b5adb9871a6626014975abca1cb769a243936e65123167e53527"
+ "9197a37d8c92c7b138f31cad4e95c5f62b06f438f94c1a61634b34be7b96f09fbb",
+ "055fce73c9c385f007256253281c6b9d0930d127939026495d0a30f25f77fdb6b334043c"
+ "39fad4223852f7101fce72746ea205c",
+ "01d7c26e0236afeac032fc5f3dbffc8c03b04417b514adc26d6a4f697b4e87a008d5ae97"
+ "544a274c25ff66b98111d7c651c9381",
+ "07954191fad321e7f2de95a87d5a9c4527e658ef85faa6622d5f34f8bc2b84c881ededbe"
+ "0281456e9b70eaf7a207e253d216533"},
+ {NID_sect409k1, NID_sha512,
+ "3583a3226e2dc463a462fefa97024e6e969c1b13bdc1d228e2d7823d9f7c09012390c253"
+ "5baf086588000e908309090daac6e6d2b06d2ede6fae838ed47f30b5b481185f607a3586"
+ "f6dea47c8f84e9d3b96d5b0ebae2462fde1e49d84d36658e87dccf5e30c0937feefd8862"
+ "dcdb1a1ca373f6ae41641502ac54df6633a8cec1",
+ "065b76c6093d9c49591293471286df1a4444e60d9d06cfa114e175afb5f119d2abeb273b"
+ "0596019a0ec5db5b5869f2cc827b364",
+ "0400266321fd15bf6b1af862496f467069819e3860f74a07825e68f3d023985bfbb838a4"
+ "9b6a41b6515cacf404ebf12ce0bd3d6d70001593c7a8e629599e63d3282cbea780235182"
+ "77e6731fe8d88cbe525ded554b51a7f8803ab9e330f210619dd07df8f67e1066a4",
+ "035682af873829e16b72bb86f3ee99b5d9f052e4a631b07f87d3b361c8d8260a877231db"
+ "cb3f4d461b4a1d4467824a26a5a6414",
+ "00a483dc2dc6408c256fdf63b04d71d3c58a08db7167da217f466cbbfb2d68444c10e87a"
+ "9a1bb04efd71135c00226e58414d407",
+ "078acfad2f2492f74b0281d53e4224c7544588ca9ceaeb16bf759b20c2f3d3ed69c64615"
+ "c247213d51800569dc8b00078de68ef"},
+ {NID_sect409k1, NID_sha512,
+ "60ca58462d53d074b370127132f4e59f5eb8d15594dc721a94286afd082a8934e52462c9"
+ "c1c3910f8b50d7aa3671dafa5972958d876d7992467b2fee3795a6f9d8a7bd3003a8582e"
+ "a8c003aa1e02c08ab6804d85bcfa13a815d75c938671f0af0706c68bc70a6155708ca755"
+ "cac2fbb68b2952208d63e0e2e3d816f04c61bc03",
+ "07e9993f3fc1fdc4c376ef77ecded96006ac1159740bd1b2dc6ae3d97e15a67383f1fc93"
+ "1e460b9af3fe14a54e47919667ed06c",
+ "040189b82003b546f94c066963239c7a590e064b88bb4548678853545920e413f2be3212"
+ "5e40efb82d2c9582d2d8269c1d408a7ff0011583b267727ba6c1e17a244ba7acdcd83698"
+ "6089860ee312b6dc2d88a984b1fa232eb0419730db8fb94a5e077009c1d55979bf",
+ "07574dbe04e1ac2bb34e40f32d6f6db364a95cc5770b79888d72b74bd4dbce9fd91136e9"
+ "e1152424d76688dc995bbf2bea34175",
+ "009e42a63b41877e200829356a2191fbb6f2a9a234be58c76b0852e4f348ca61e7492f90"
+ "a37feb8b95a6dd6df9d1a2e61c63b4b",
+ "01499fdcc804fee8193de080b085b7513eb8022503de5f64dc12c04c0ba24af30e30f63f"
+ "0e3eac2c82eb20c6672336f8732ec5a"},
+ {NID_sect409k1, NID_sha512,
+ "c749f9bb92ca9957ca6d0124206ebf65e860ff38a225e241950bf4526cef3f4fa9184ec8"
+ "3f71f813fe852dc08eca6b45b14fc7f2c6a19296529bfda007efe9d0d26492de2a902b45"
+ "ed39603e22f0a763dfa5deadd97ef6feb859d860baa2cfd1d066c0be0f9f4e0e2fafa69c"
+ "c51b12e814ad2e33b0acc0bcbe1df8cf018dcd4f",
+ "00c11e2979498695c660a2bdfd105b115bc4ff8664ea15cfb40c725406c6fc9a13027bd1"
+ "d72ffff6258f29e4e19b845243444a7",
+ "0400904a9bfebc23607c7c89b7aa89315343852cb894f54fe42ba4225285e58c6bc318b5"
+ "5691aa6a6ef22eb11f44cbda89f157d7a8019cc1826280e54832b455f0ce0cf89bdb62e9"
+ "73a8e819fb776b1a202b4f207b8baf9072929c9e3f6a8ff996d6d529de899b024e",
+ "070fe023c9341df9348f08882bef47bd8dd7f13db7215d1cd52cdbe7919031a62455ca96"
+ "9a8cc6db0a05a0b4befb47c142c4f34",
+ "035e7130d59d92ff8c4f264fb2c346e052bc305c7f57549a0fe43cc7cdac6aadf2ce1939"
+ "222decef4e1f900e3c2fb2c52bf53f5",
+ "0008d5ec1ed2091309ac11eb88157ba5122bb9b5c858a46769a130f7a941818445664ac7"
+ "8325e0b6d2a11bc89d08fe0e87a5bcf"},
+ {NID_sect409k1, NID_sha512,
+ "4de8414780ea20f7943b1f1adae5e3962d96e828fee43bdbf2831bd71bd25df2976a3be3"
+ "7a7a667c7fbe1200de578920090d131a750c9bc09bd95b261234ea8cc25423c4ddfff565"
+ "6d6b32da6e2f6f530e6673a8660aeca31273bb9a3a21bbd7031a2fa71ba37c004d3d1c64"
+ "b2c0798783e47b2efe1a208959ac16e35d444245",
+ "068dfc23c6635bd1fa1076dcbd456ad6e8df7ce7c1370fe275803befc4ffad007fd062a6"
+ "1cf1d50b93aeb9afe1aab47a65af82a",
+ "04005591f8cb59ccea17bfbcb74e69f05218d16175f0547ab95f507ef8d7426c077b52b8"
+ "2dcd06baf6eae7a66bc72422236e589e420126a01d5c2331a2d00949e07ea9242ebb50d8"
+ "30b0aaa74bce841d4e43bbaa9e9aaa01ba25db7a8a2f4d72977c0f016f625cdebb",
+ "070682c9659089a703dd9fcdf2f3fa0c1d1ef5fae3f8f1b3dda55d9b611770244f892689"
+ "8c904f6952c1847d287bca21db4dd59",
+ "02734111e3b736ae795929f835701bf290dd50c0fd625738ab2769242c1403197a3f4dc2"
+ "9ca618c2e292c6bec6dccff71adb698",
+ "0755292cc5363fa74e0193a806879d3a275b4beebc97250fb230efbb8364b2a30098c048"
+ "8bcc6e20449622d6a5fd2ae24d7abe0"},
+ {NID_sect409k1, NID_sha512,
+ "a081d54232f84bb19dbd52ec3812748e2e6486f6cf1b177b27929504ca878036547eb435"
+ "31bb5b3edc81bfe105370427e92831d2239cca0106d031d9fa8da9cf89c6fb6401377d59"
+ "36b6329ccad854e5567181b8f16a37c35f333eaa0ffe91d727d183fbab935fdac2d5670d"
+ "afb3fba59e4fa2df1746c58dd8360fa08af7f4e6",
+ "040807fb888e1d9fd33604546656a493629d94d4a0a9de2608962225ed158167f9e2438a"
+ "be2d12a11e2adb6c2b66ed78215b0b1",
+ "0401787c0e6c55acd69bde9b0a84d6022796d5b5c60fe5357bc0fa4386c16f61b38bfead"
+ "b6cfebee7e7701bde24418b8b5642afefa00d9579d271ba3d5e2327eb863cfdca3970700"
+ "55b97714e385ffc2fc23528f696dac1a4d0e535641f6c876f1819f2672a8c31cdb",
+ "010b8f5356d8a029659492c444876f1d274b82681d4f600cdb5fb2afde13598ddb71676d"
+ "9ed86e83351c70678886e8237a865d1",
+ "0304f43f9705d189f47ee09a079494030b0756993a93e4c6ee6b5e664f63431f99e50574"
+ "7c24377e5930f13492483e6cd06ebdc",
+ "0580d4707c97f0330f908042a6cb2a2b313f07bab34774ee03bbee63a4ff881b68def47c"
+ "d300fb49deb49829bf486d1efad39b8"},
+ {NID_sect409k1, NID_sha512,
+ "ea60266f1538565b3ff42fa4bbfe319be070329059c52c8bc04a7da2824f209c1145a05e"
+ "551ea59ded8ca8439c328f6907da4e81d658937df614be98c7b8648818ea80ef40e49aaa"
+ "4431f4a211d62acf2611f5d60c446b2b25745078c643859be1b12b3141a09ab765dd63ea"
+ "1f2a2df015eca0840087a5db378c4c4cce76cba7",
+ "033bda0a02badae08fe40c239b9d59e5bfe1c4d4b9b7a5acda6790bfd77ad08dde5e93a2"
+ "da80ec54a7f88146d72218bbb88aa10",
+ "04002dec536832c8acf007daa66a47e4eeecfb6991a359f8c412299ef56c6ca2faaf18c4"
+ "db708493e84786a7837ab74c5fe0644cee00906c8f603b579cc2384e0803d31d577f7c91"
+ "c55406db3b2db91bbca323fdf3cb6d010617ad1aae7bf414c4d974f22e6f05af53",
+ "051e8d027e62db2397e4a807d98a24455a76eff6dc259ada89e794dec1484b44724894ee"
+ "ba842f60b73287642570460896dbe77",
+ "031769e6777444095d934d05dcdf82405c43ae91ad5fa9201568ae2aba25712717f1af2b"
+ "8f49f6eef373237bd70c34889d0d271",
+ "0023498aa50ee095f33a4081bfd70a9484089c85fc7a4569f560ed67243745c823cc0217"
+ "d29e2938f06ba9c8790650d10fa5b1e"},
+ {NID_sect409k1, NID_sha512,
+ "82f38c9405ef0d26bcdd5b3fce4fb0060c3095f61403418e17c337933f0563c03691fabd"
+ "32ab5e896c593439e7492a9970ae325c67196d9e83fe0f9780409a930326f7e6efae035e"
+ "f8c321cb9ad12461edd5cde66c04739fe079db65406b3c2d22f2d04b1a4335285513d4ce"
+ "b901d2ca2ad10c508302266c2cd6079ff14eff4b",
+ "04ff431769d26b8837d3e1295f5464fe82be29edefba76323e92078a6483ea0daa962215"
+ "49102509a1bdcfd46a5a2e5de10c39f",
+ "0401beb74d427d849705cf26e26312446f27a7c5ff26ea9dc1aadca763254fe53a622de2"
+ "9cba4fa81ee2f9e0319e752f72be46cc7e008dfcda35a00ab77c3c47dbc05b0678cf561f"
+ "575369507097833e86e523dec879e0ae9583b4261f7a73c9dbd417accd4ae6688f",
+ "005aff3ad332af23e0dc38c16853252825076d602ed4c6d947be751af5dff3f59611e616"
+ "6c31740b5e5a167260adf2a5466289f",
+ "035c4e8e1858b9694cfef3e864ed959638ba309ba2066a28fb9d0e02a66cd4c187dc6fd8"
+ "ca5fabe68acbc2074168157b685aa6c",
+ "04ec2db89645018f9845b7ae31b8418a767e3570d401f41db18e424fe861bf09114d7860"
+ "6a056617613447d125a283be5bdb6ae"},
+ {NID_sect409k1, NID_sha512,
+ "d8506fab4f681ba4ae86066aed447571eba4fe04e6585fe3be6af2ab1000a3da68c5b0c7"
+ "11a85ddf3a40cb7c8944eef81f2094650459e14f5b848e6add7e580b0198070f873eb3ed"
+ "5d0728eabd92bc1398764b94cbb4cdd7cc2027b9762dd10782658cd9e8a5022ac062fec5"
+ "35d892198c8a387b3d2b6f7c92b1af6ab7dd9e4a",
+ "03f85ca1169ca7e9df44cbc6bc7d2868c9d94e8f8b699a42ca492dca0914eb5789a90322"
+ "18dcef7f95f959c9554a1cd83360439",
+ "0400aa3c77dd4324258bebe7da5338c772d3496e3fd0e57f455459542f1a1c5b47692f51"
+ "c3815c9549d0c23fdc1ff610fff6847ea8005e626d6aeb86dc51f3b359b10862cd33ac99"
+ "27e38127f7f17426f2369d62132a2a62fb6b8354c5ca0b3e5c7c87117b4f777a0e",
+ "0495099cc73c9930333ae3f9d0b7057d7c70e2bc7c805c0c6a44404739b3fb68f9fafa53"
+ "033b54b7ad7bfaf4bbf7baba0dd5a0f",
+ "005612fe87c6a3a164d269da902aa43c5a4e0333770ea6334f05750be3f31ee758d16929"
+ "1e15b1540d40b60d1bda279599f254e",
+ "011a633bbc058550a597585bbc9f33099eb517795600b019255f649493d4a6dd533be8b0"
+ "965d9f9d9698677491bf929198ff34a"},
+ {NID_sect409k1, NID_sha512,
+ "b3f30d34f252a4c26f396079e773142bf61c0981d912333ade3de4e27cbc72cd8a16b318"
+ "07f0c46116f87accb854487d83ec8c6a61565e6fca145eab70048245db08616779d7047d"
+ "b63aabd90dd15acbb05eaa510072c151c0518f1b34582b95f43ec7b9484b2993c176de79"
+ "e84566764467f72392ef31619426d159c91816d4",
+ "03a97deb36d68f81f50c8829d412ee5de7f9d775633cb69c09dac558182039e275fc2582"
+ "40517a7c4aa592e364765321f27cb12",
+ "04013f0f4c16a47ec3a46e7a088c1b6a63ef61eaea46aa9b2c532d8df84dbf64991bdc2c"
+ "81ced3635e562d1403dbcf6aab2f8aa9da003aaded3b99a454b820fed989dbf6430ddcda"
+ "67db58e356397d06aa137fbdb365ec43994abd9c0a9fadd2887da9539bb4ab3c44",
+ "06620ad14a5835b9e9e104607c317cc599416683a60ed8865acf78ae1e861246567cf9d9"
+ "1f759c2d4c82cec835a4784d3c231f4",
+ "068faabcb7c716fd73f129ebc6625f5b4660a88e47dc7dbcebab321051a61e46b74409e2"
+ "b0af420e1671ef4efe04973c43471ff",
+ "06851e5da033da0f28a89dbbdabe93ef11331c55cc03d5b096c0522370be681241fbe71d"
+ "1349f219ce57761c85fbe208ac36a36"},
+ {NID_sect409k1, NID_sha512,
+ "0fb13b7c09467ad203852738eda5ddd25b17d330e82c279630b0e1f0c86681f67f6e537f"
+ "b00da9419114973c8559306de58b0387d86e52d821d982a60769d2f15fd5ac2ee6dc55d8"
+ "ac04ee247282cb2866b8cb8b4d7b4b6cfb33bfefdff09a73d727193e5fb939ff66ac5fcb"
+ "644a44f9083a790888cc538c5eb435243c6a34a8",
+ "03b1da0ffed24e1a3b5ba22bd684337f6b08053591620541bdad50c761d66201a2cf21a4"
+ "cc636426456525b598e96baf97d9851",
+ "0400116a1790e621272b56cb4579ffe6ab629a2d077b779b73e039d74f58c476283c110b"
+ "b18b9c9ed63de7288dd678064de68b7df60122b43afccb88982f2e07ff35468178572bd7"
+ "2b644322d9e1ee68f78880169a83a5bb88c6c994762a7e8d80e09333487ac30fa4",
+ "06d7a24f0fcad549e9c36dbc70ce264a75eb37b74db98b1f6a824ad1e5635be9818f45c7"
+ "544927807dc0fb3bb5fd38556e8656e",
+ "0232339b50bdb772d15f2cb8973f6dd9397af45cebb69adfc089bb802e9c4029dfb2078a"
+ "8a26d7197de10638ce512e5904ccc5d",
+ "056add03244174966d53105c570e8fa660ae8c5d53316a24cd26f24e29e4b7459f4c9dae"
+ "f07442247b63665f97a3c07d91a8706"},
+ {NID_sect409k1, NID_sha512,
+ "f9b8124281628cf4e1da0cb4f021c8d19d815644cd80c7c8de4cc62722904ec4cddd26cc"
+ "4891f30b15098a25ba6923c6abf4774deb6e1883fbb409862f94467e75a725e7154be860"
+ "fd58347577c83adbf18535c54b102220197afa062cc1c84f6094490ce488af4a08d2c5b8"
+ "08a2572e18a59de96c87162f88413795351cedc1",
+ "040bac7e0d3b54c7753c79d43469e310d876015d948fac4e3a9765444754476af72330e8"
+ "8d79ee6119697aafac8435ab5690754",
+ "0400bd4fe8daffe47bfdfc43deca20b15da7c999084bee8983c62e3dd33740143c38d8f4"
+ "32cbacea51e6f53994265b2d8f4c393f6e006d88c33c31f4e143b13bedd5738bc1191fe6"
+ "815a099fb7b44617fdeb08daa0cb74edab7f9a8c67ac1e9c0f0fb21a9f02ef4b6b",
+ "020f2f6fcb3e471d47f21fb15301784f7cf3632dad3627a9ebfce587c0097871eca580bd"
+ "a051b100f991aa6de5edd3a7684e839",
+ "014f8884b5107e9ee5cf6f5d137ec9d59a85a6fa0431053d58a1400fbf0d518e8910179d"
+ "a1160de2c6cc8ea8ba8f3af8e0e1f6a",
+ "019aa8d55c8d876989f9b9559db0576f91c4610dc9187c74aae2d4f212cd94d90dd81ee4"
+ "483d88d866aec1ed469c5e3eed7d90c"},
+ {NID_sect409k1, NID_sha512,
+ "4e3cd6100520db050af0daa69fe3cfe6603a223d4f2a6318fc5836db8640d4c7fb80bb78"
+ "1302036d2d6fb8e552b4eaef3133b98ba2d36b9ef0b86243b0391413c73d48ecbf1d1917"
+ "0f1b3b781b35ffd316afb1d55d1dda8e91eed5553780cb2714a93e7ece698b832e853e25"
+ "89c5ba2b8a997bbbbf625071ded66762af8cad42",
+ "025b7eb3bdefba3c5134438caf968f615b315204f348006f82e8d61057a8a8a853230cf0"
+ "500f9d0b8c1551a59b9184862dd2ed9",
+ "04017d2029cb711e52df416c54b63a95a66602a1d15c3761d91071964e0128c91ea766b3"
+ "d409f72d9fbb5161a459c3fd7990f87d8801e71a9c66a4d4dcf199aa329e44b99f80640f"
+ "c760fa7326f29c273aa13b153df5277feb3c049e407630173fdc9f735d7aee4e10",
+ "0575aade2692534b5a1a17d36c36973d24dc501c75c3b0b497a3d2fec80c67be7107988e"
+ "47199d4863044fe9176762497b5aff3",
+ "024c6004fa92cad446b8339917f517f04d22db47b3f9bdb83d863dadb5431866ce21b13e"
+ "780495bd66152ab33eeff8830cf8538",
+ "034aa568aca7be851d276d2235e42b6624df1cce2b97f6413dd3fc506f0f18483f95f911"
+ "feb0eb220415ac593f2c93dca0808fb"},
+ {NID_sect409k1, NID_sha512,
+ "5411708381a65bef4381c9e13a04cdd5ba0c15829f7f25ccadf695f635384d8e4704cb56"
+ "2741747831b33852567f42fedbd190d2980f1bc921ce01c17d659d4bdd7eb787b3927fce"
+ "e659dd3b65132496c687f2249272a473d46326e66b3cb78dafbb522390162c168f73bdec"
+ "88adb145e6afecd561979846ea4c8cee38dc1686",
+ "0673b3a2985c95904732632e5d988d8d437a60db13215bb6aa880b348f011c609a1e8604"
+ "61427a8cf0d622abc47f910f5c97ffa",
+ "0400c4f1c0cdc44d867ed38d093eb967bfe285df897868c83ffcc0c53463e3852a1b2039"
+ "506d9508bf01d0d79ae537e42fa2070a5e00c2bd9343041c2c4100c5d795ef355c796a6e"
+ "a7954cd729e11063b14a27fc2c3a9ffdb3647613b44238eee17d9cc49e8c5dfbe0",
+ "019a9509f5f6d947532638a3c80782b556c553edaee9ade91e457f7b5d2c9055572fb116"
+ "f52cf4d3a2a0eca72fcb32b2f58e952",
+ "02def440e968d17d9904c5640619af2f447f74b7c067537db4a15be87df4fe68f4489704"
+ "7fa8af146462ceed4beae36d54e1aaa",
+ "013d5b00fef639c556d66420090c2cab1edc57b7257dc35addd62a5337300e94ea7ee116"
+ "e06b744da1b575d90da81e8ae2cd424"},
+ {NID_sect409k1, NID_sha512,
+ "23757fa60fcabf543e603d8b31ef0cc99b3ed16b4816a84e01dbfc858872fcb79fd03d2f"
+ "8a1d4f28c25dc42a39e20c34f81ebccda1682ee9bd22fe323e7f8ea90cf4a2a6ebb634cd"
+ "1153cdc35f7306f28a2efd822bf23131baa1543d0ed5ab4c8168d3199983fbee117085f9"
+ "0550ec3ffa2b06070d3add1d707fc2593285ff58",
+ "00db7dcac414010b816236cad584dabeaec1da76c97182d1b62f87bb7fe2946a64d10430"
+ "571b2b29ccf2ef72c969a9f045f1f3b",
+ "0401f2a6cbb9c1fabc8db2848c74d918312267888d822b7dfd1634a543dcca4be7c99723"
+ "9f6281d1d8b5da9adc694706b7b19cfb0c01bde57a2ac15f4e6b26a373a624588a3379c8"
+ "eec758f3c68695e2eb1856075d90085f43283d982526c5e57913cca5e2b4169f8f",
+ "05a3d856ad1d6164993cc59e70f8551e2408da92c7e6cd52df51b37dc22e9ebc42fbe6b8"
+ "3c332eedffd4086a382056175ad7009",
+ "0489b0344ae4278a0376dcc64ef9ba8595bc2fd62ad22d42fb431d2863d8ca353cd9e59d"
+ "e4ac10108fc247d6ee9ef643f6bdb3f",
+ "06aa27335e15dc910515385764387798cd4a9b4cd6d99d7c42e07fc04e2bfedf8dfaa7bd"
+ "a396f88253357d3e2545e895d9aa3b8"},
+ {NID_sect409k1, NID_sha512,
+ "b976314d2f066f8893307a726f450dcf2cf865c170e90e6908ce9787eec48e1e2119a731"
+ "b2bec3c12fd4e6282a393774251bcaef91af6ce57c63a8b45bedd72ab862cd169b7c84b8"
+ "f6a72084ff823a96f2f8eff3483a7ebfabdabf0998377c5a6836d88135cf61c65a0ca7ca"
+ "57727da68047dc635c17ad13731035fe9a6402af",
+ "04717efef16e1ae267e155aa1daabafc68515aa391dfeb73c13d01f3132bd22c984228dd"
+ "dc4dff4c39979e7585acd3f730cfcfa",
+ "0401526c58a3de46c95cb0527869f7d637f9441cb5504e6a01f339907c6df3d079361a41"
+ "571cf0a0f11996028a41682dab5decf78601581903be8a19bf8bde1d89bee0d436f061ca"
+ "1a3ddded4b7793fbc32ff852671103f34e16d469eacdbfa457643d1b18dd1c4107",
+ "05c846bf61c068b421efc472469ab1ff8d9f34847ae0065ba6f4a000be53727b3fcf97a7"
+ "80362566e13ebab84b9ed5f0cbbc225",
+ "00aa138e742ae81eafa820632f31e87bdcfce6b909d85805e46d87d1cdb8b968907470c7"
+ "ef5806accbf6245628c70d264fdd95d",
+ "04df507115384327f7b8311dfd1227c19a6124cb9bb5901bed45d8d5ca45db0903f53e7b"
+ "bf136350e66bf2b4f3d978f8bc546a5"},
+ {NID_sect571k1, NID_sha224,
+ "964ad0b5acc1c4db6674e86035139f179a9d5ec711b5bae57d2988456bb136d3aade7ac9"
+ "ef10813e651ae4b9602308b071d75a934a6c012eb90c5eb9b2947b50fc97b1d36c5bf9eb"
+ "13a7b06c94212c3dcdab402a563262298defff62b836ead1f78f9d20713710fb48115cc5"
+ "045ba15140fbb4bdf516e4150d830d02cf30963d",
+ "19cf4f4d06825499949f9e0b442586fe1bfe3459813a2b92cd8de0f775a4735e02655702"
+ "ead8e60824180761808d9e816d60bdb0238e1e8039ca7bb63c92e1cf8433ef447e64ead",
+ "04007b9cb1728cba80367b62872a986e4fc7f90f269453634d9946f79b1fedf42ca67af9"
+ "3e97ee0601bb3166e85357e8b044e39dcc19e608eaaa8a0066ffc48aa480c0e1e8d5569c"
+ "bf0580858ab9223c2b2ea58df506d703d64b387a78ef43846894e7a2e47c02252bd2c1e3"
+ "d21ada7c21d50a08cef0f9a189c4e850c058cc57c37918251b5aaaff2321d7355b6b5556"
+ "44",
+ "0726d5e317f888dddc94c73acb14b320ff509908052868f8c6b14e531ca467c1f7c82874"
+ "76674efd0d636ca94c24a69d15210bb43a368a11d3453d69ca80430cbfb8b6e45d8f21a",
+ "04ec6205bdd8f7eab414110ed620dd3fbbda4cb3ad9e5559a114ca9344782847621961a3"
+ "577cbbe43d94eff6ffc8dd7dd09c049239f026a928301ffcddcc910bf196853edc86d31",
+ "16535b1af98a75b9bc0f122ca3ce23a01800fa33b43584a94fd8a8d6f40077eb739f07c9"
+ "f0e179a157a28023735fc8da2e2ebbee5f7308925900e657fae7c3b321f14fc45346f89"},
+ {NID_sect571k1, NID_sha224,
+ "baddec4794effa668cde267016dda67bc70b847919a9aa595f93ba9dc27354399ef7a607"
+ "fbead31e57a8ce698beabb10f313d393980425e67cf95be45d512f00e950c0c5409573dd"
+ "c3d556f23daf056259ee8914e860562a674311452fed780b3e0317a7fe93baa81fb98df3"
+ "ae4328b28ad0ac8f8ea33efe24faee658ad026f6",
+ "098521a732e72ed945a549afc92318fef7156ed1d1ed9bab93b581478cb2339eb32bcef7"
+ "05c9bf61cf2873ddbadff8ff3806740a2e30ce67d1807a8179dfd5d952e6f8a583baf81",
+ "0401e09410bf4f84d53a2abf8d106fc64e643edefaea263dc98c308aea16ec75f083b3e6"
+ "b442ab261226c59ca5fa622db68f5cb5f2d1d465b01d0048554b0ccbf67c0aaf934d2365"
+ "f60361e5b43d313a62c7b3897c7db8a42116127138a1009f0bf9892981fb4fd6ae231b89"
+ "40e7509f96e2a49285143010dfb4516ff810a91a4d9d2974c522ff343e93e8aad00aaa78"
+ "b9",
+ "128056de96666acd09b93c5db7ba1b8fabf57251ec480d42b702940b5847d2a59b04eb51"
+ "01bb3990c3ae2a41181f19a2afcf08424f8b922a95df6b292b1856dc4a9dbb1c717ba5d",
+ "163483a7e0d1012695ce0c113ec8fae3694bccd40fc038d4038f81bd39e71c969cc7f0af"
+ "8313a9fdd3d028ab24a43279569dcba73fd78ad74897964ae715928b1cf7fcb779b12af",
+ "10aac6929432a6bc7e12ffa86e4d2421e0535fc44a1160fcfbee477c29a987e783a7f753"
+ "eb2278ce08954c7e90284d2ce7c42de103a9c59d8e4c459b457688ad515cf156cfc56f8"},
+ {NID_sect571k1, NID_sha224,
+ "7ef7138fc657492d229054f8a50dcafcfcd1dc06f1c16640af3f658907e2969248b54416"
+ "066eb119adbfa23b8dc578aef18bba79610b9cc109394b900a25e55a779230bb858b2ddd"
+ "9499a7775d392328db9177aa9571c2f61dd52010b48502154e914a0c55a54edcc04a6713"
+ "cf7bda8744a893926118b09df877d1a4f3d95e8c",
+ "0336fb21549e397a190beac38a1ee10f0551952da15f71e11dfda415e5ee08da2356f114"
+ "d450c661f52b2b32cfc7b9be61732672691a079f0927989b7e9f4efe6095a242155b641",
+ "040316800fa2d8f8f3f9aa87ffb628dd7b2f63d4d8389ee86ed41bd4c3eecd3f3836ba92"
+ "e2ff7ee5626213f9ddb41b43561c5dc0bcc3df0a872e4b8026c09c7b52b89b4975a43f60"
+ "b00207f956df58f75286232967dc1d3e6507634f45c0014c48b42868fecce5b9434463ab"
+ "fcd2b3722a7f5ed25607270148466f6ffad6a8c86e538640ece80e84f7368d33c68807fe"
+ "d6",
+ "1517b3524b6d43dcf3964f7c35c89bf14dd1542c37606452e2035ff0bd0cd1edd6d7b801"
+ "ecb1f573e957131c0b3f30d5006f6e4748a11b9db10fad41961f4ae53e848c6dc6e1a52",
+ "1ffd4865dae7387ed797c5ffe58a929cffeab521e48284bd7d4427d5856e9d2582b91363"
+ "f1d353a0ab1aabfc132a778a516d4033c64cbc991d724115d72ff8e94ab4f95a9514843",
+ "10f010aaf1bb714042fb8cf06a9501dfd1ffa598d6b3e68e7addefe00e18f3a5db8414d6"
+ "25e374d9ae70bea43b57c6be4a590c28e50a548cdb2e30dd9d6e3ed1d9cdada9f8b0049"},
+ {NID_sect571k1, NID_sha224,
+ "d58e1ff1d49a471d0567ecf8f29173dab5fe5f6184ab4cdd095c231fa7b82551f99a4829"
+ "94a46c3d8ebc07297fc9e952a5dee7d5f199b119f6f8b250f8fba45701ac252db725e75c"
+ "4da27ad77d59a4eac448e54a277986740dfee6596811e59afc9755e53d24b826c09e497e"
+ "29e69a22bbc85be11763064e9ecad7ae66458ca0",
+ "0e287ebfd9ba294128cbd484fc5121d271cd33e685bb1804f09b40aaacf64b5a9f2cde9b"
+ "30a4a02d3a9bda97d92f46bb8787b3c61f280b1e1a0680f1f0679d3bb34d53725d62e52",
+ "04052903a7afc17cce078b4b658766a67f2f75ac04e296757fd762fc05d6a7b4e4151598"
+ "a872eb4618efcd06c43cdc3e54f437c0ef1b091ab5e4927d3ab4227fb24d4413e0327abb"
+ "840385e808bee8dad1a1b84d644aa29fec324dac2242709421479fa7a712d18b54db5977"
+ "8724ccaf4e51a27da090c6dd0b7967024db0a8684944b77295c9624ce3aba24ff48c86ac"
+ "85",
+ "15e8cb22e371965801d99407d96200015ba58fd7eaea52c03269d8a374fc7aef17fbfd44"
+ "80d29b781292e179936a68ed175802f34043018ed1d6b5a4df667d859cd2ae53ed3cfcf",
+ "0d3a57af73b7504ef18c03ed2c52aefe1d1a3f0e27f78c11d45e9825647d5ff6e97af51a"
+ "5e366e52e01e5e832e4264a1d5b6967cd9debda59c955568e4c8bf804d843a49a0c5401",
+ "064fd7ecf4470f07b4df3b3046041e49f310a463210571606f00a1915c5220a27bb7a28c"
+ "d0bcdbe374651aac06d4d9e017e31879b7819301eabfe3a7afe4b53f75ccc465815b4cb"},
+ {NID_sect571k1, NID_sha224,
+ "4949ba765c14c31f68ee0ca26bb42ba2edee63537de4a6f5c42bbd862c21288d6ff48145"
+ "260365193c6fd2b56dfb014da26b8a483776b717c6874f627c9a622154b824565b23e178"
+ "240f53ee9748c45759ba5c035b584df0f09504e95eb9bce0301653aadb860bb25e6ea6b9"
+ "606e0ec3bdb8089e6aa0d5763d331757490715f9",
+ "149de496fa8f88b2741864d0c35b3df666b87179b7bd06cd426a45f13bc87ea9f50dea85"
+ "e1fd02a532630e0e3a231cc3e7fbb7c7ba85b40cff1124e72c677c6a3ea6aa40ffc64b7",
+ "0400bb610e4308e229e4b4ddddff5c4633ef2ab40bf74514433bd068c7d59a6260ac7936"
+ "6dcdc039d5585e660a4cbee990a2cb55a99ea3d26dd9df856b0f3ee5b968bcc349240a9a"
+ "2d03e3ef4be63fde6ca09f12f8220e1d9b5016f267ca5aa09a2dca8a0e0feda9647fe0e1"
+ "f7ecae7147a10ff893f69a4f74172c6e9a62f0c5bd96d49b47379c9c84f5ef8e59dea104"
+ "bb",
+ "1cffdb963c2c8b8609809e998075299776b44d2808df509773f310124b5f318d7431f1ef"
+ "8b38fac5cd5580348abc41e6e6396767f4780656361dc9a71dcc8e7c9239d6eec5cdb94",
+ "0982b9989c92e1a5d25dce832bd8a3f602f0eaea69abcfda285cb3841fe3f019503e6faf"
+ "8a693712380a48a6af8844b6bd718f0edf3b57662a4fe82ee28d036ecc4cfc7310871c0",
+ "1678bec58d69def3fe35a64810b27fd06bc29d165593990f6f42c4c7676fd5d4a965fc92"
+ "cf20ab8616c7ac7b4b308ce6290c5e8b4edf6859fd6f6f01878f2601e22acaeb5ce1f36"},
+ {NID_sect571k1, NID_sha224,
+ "5bc63e5c50b1650f0ed4a599960f1e4e11f6c151b2123fd71d9e3c44662312a74b685429"
+ "0628e20b30eaba81555acb2fb49b640bdab2528619c7fcad0f2a2880c7ea232d427d7c93"
+ "5fba2313370fda8863a7e7e203d63ea15d0cfa083e716ce6068c63fa616ddc225c9e413e"
+ "694cdf6b355cb1293af5d6cdea51168f5634e878",
+ "17605d7c5873d870462375d741b4bc6375f3d47f7f5e9d998917adf2137a81e63b66917b"
+ "3dda8968930c4b850f2270eb3187fc756e2beeaa67fe0d73053e6cc0ff0004a21250551",
+ "0400d8ac3e76c25cdf4902426569763f4ae0638ebb1fbcee6e12a4e0b89d6d451cf420d1"
+ "0441a0a9984710dcac13bfd7ba70370afdfb58e2d982ac367e178f6834b4cd2d232e7f24"
+ "6e012b5fd5b686e58df08b695fc333937eafad6006be5a7bfb1426206102a79bc32fd9ef"
+ "46e19869448fed0e917fe059b76c8b5a9c403c3921ad07e6c19ca7bbfeff5491b22f8bb9"
+ "61",
+ "09179b3ea906137dcdbb97b27f3690bbe3bc4f1f57c46ed60b8503cae97602717a0724e0"
+ "55a5c52199ae3f08f1586b87fbbe514667d2eef2fe44092f3c916976c7b71eed67e8fb5",
+ "05b28342703c83ec2df898458fea6f71030e4e9c567d140ab09cc95df29ccfe199837cd5"
+ "8ed00d07241988bf3c863504d065ebbeb8ed11cdcb02da0a945ff38ca58d629f76832f1",
+ "01442a5606791569749b5a9f20ba8eaaedd1a2ceaab2ef55d5d41271ba23f6a5b6a33c76"
+ "763fc99b291b07283122596a3331fcc9ac038447f3e0cb54872c140300fea65d7809191"},
+ {NID_sect571k1, NID_sha224,
+ "610f6633718e49d232b3798654095e2efa0de11f41258b27aa01956480c870d901efa77e"
+ "109d5f95f1f5101d3c90fc51312d9b3019d2e42e0067eed7b457dc7fbe5466923b62c83d"
+ "7347e4dada571b57813bb9c21d5e308519b8eedb7a7706508ad04aa69698e03636eb30fd"
+ "9fb363ef3a185756494ee01175b16847f5b68076",
+ "09214dc2da0967912c31995cb8f5bcf4bfa832c5a2d3610f3a9857e5eee7c77100d599d9"
+ "ed003b4106013155dffd6c48859b846e45e0ddbc5fe24f4891c9b2df51407e9cddbd974",
+ "04064376a92c1227c1c479260c7497147760c103bfa5be95ca1593f29a851daf2e5c3a5c"
+ "73c1fe3e6e2506fcea710254ab5eb2daf8aaefc19cbce7b1c4afbaa2fcda1ef85750fc0a"
+ "3e070638482e5c7c17a82980b863cde11294c0df717bfa4b9f884cbbbbf80a64dd2cc7c7"
+ "d89ed21e10561260d372da2fb726de71863f0f60e8ad0fa5e74fb5d29bae0cbe8ad6b32f"
+ "6b",
+ "0621176102c6ebc2c810eabab9f60feb71083c07751c66f719370713ec2de9ee3957bba8"
+ "d768b076885db1f226a9d37588abf1b141d81b70f0af711c52edd30e92e34a1d3ed214f",
+ "1a21d460ae85d0703b4b10a2f77547e45135048ffea590ce86e0a1c049f8a4aa7b395f72"
+ "3b7480cc84e33f4772df8f181f3919f3c0b0b4f276b0f855174103a2f7bd757584425cf",
+ "0b56bbdf6e2be1b9e754f9b48b3ba9a13403c17c5cfcc4910112704aceea9a34209df406"
+ "ee40e0a10cbc26d03839f95e775e80ec5e29b156fa277a5ac68abd99c7005ea6ba2695b"},
+ {NID_sect571k1, NID_sha224,
+ "c548f0546cee0c0400401cd540a0aa9377f27ac64492e6baaf38e794db4df83e64ca3d83"
+ "b67bbb46a6c269c04c2725287cce0dee984a0d468c9ce495a7e554a6835d72c7493bfe88"
+ "dbd5a044a148c89001b8087fb03e57c2b7212d0b175d616333a9affd8a1802dd49ba9be3"
+ "ab6c6d9f99a5578d26cc4707a5860c6c804d69ce",
+ "042f2682e9ac8b76f3c0880e12c292524601dce9ea6982dcf68bfdb0d3fbfb50dc9229e5"
+ "4149ef09b95bbf624eb04ce1427077f30d8536be9f69970ddb449ca22ab8368d2689ed4",
+ "040116135b273ef876453b9c4c39e4be5a815874857f4a72602f0d03b4ecd9a4ad73b906"
+ "00c71111e317df0782fc92e6ce2b194c204340bc11e68cc22ced38e99f90dbaf0f917e97"
+ "0d036dfa65a6e9d0ba521ade7daa2f6b01e1d14fbe7b5abd29ae71c4eff66c390914bf46"
+ "f09f4ab8a06dc0fad6fa257a85f993d6829b5e0add5086b8fe2ecb8027d08eec1bea981c"
+ "c4",
+ "0bf116711b31ca347d41a6cee5aa13a74e042ffbf79d2ae9448598e6950d721b3773ae6f"
+ "25d7b49ca9dbcd62feb011d5d556bb9f8a55a7acc9a3a166a4169351bc31a293db68eed",
+ "11dcb7f4103e814439df22764f776a74aa86ce9717585712b224803f0ff193d5f541d941"
+ "42812c726b75e8c2c37f2a4c33db6af118af73d3ec4fda49cfc911fef1eda9a470ff200",
+ "15fa4ada3a6e95164aa8972f14ab7572a3b898feb6cde160b8f25094f67343d35e6efdfa"
+ "b18793f77e09e5a42f56bae747b2b66fa9fe1e4a97e5e05ca743c058b1024cc848393b8"},
+ {NID_sect571k1, NID_sha224,
+ "9431c6c5237f6b4b35682a0c32f68752035c8b295a1763c5dbdfd73466cea64a00ecc113"
+ "56d02d2a9211dc54548f5db1651e4471898402c887fbf45005a3bda271df0158c98319d4"
+ "d6751b8ca6b07100182957d5fe0d97c4e2294406f83e9afcae4850bb089f2252490417b5"
+ "afd8f07f4c795fa84c9c7cdcce26bd97273c0072",
+ "17ed9a9c75cf66528428e85b0f019e3488af8b893b12023ff1b4ca9c3691b74e594539af"
+ "a0f4d7c3863d15399b862f15e27bb077392d6bbd546ddfd46728c75177338466eb2f4ff",
+ "040760779389124c702686d8d7c25dccfa74fb333317bdb414965d2c271ca5e687c4cca5"
+ "7e6f6149e1714551761abd4d651e7b04451d8be8e58c0c9e361fe0c6771e3d547d6ac3e8"
+ "cd052d5725d14b9aef93b83d638377f5a19e3cd6e3584121fdfc2c3ba1a588491d7e9892"
+ "be081c9e7585a15b37a9cd4c204054dadf06a9f4ebe98f95f6554941982faf109c2af98c"
+ "65",
+ "104ba3049a642d9b49c4302e9173a9efaf215b67e060c5e9673521641c9c2a5b14bad25a"
+ "448e46faf73810979a3a50104ec8c5230a909ae588213161fbc10381d7c75b35c84046e",
+ "1bf3e89fb0beb1ab854a5513278dbd8b9c6b05c94ab67145ceb1ffcd93d1a2aa374db46e"
+ "f327043518a7f272b957dbbf9d6cbd6708f4c89f05865932b7e816b12a59647d972f6e5",
+ "13a8c121c9c170b244ae3a55aa2d53f4ae5af91b1f72c066207e3f52e44723bd4ae419d2"
+ "4821b83648cd64fa70536605912a5a9319dc446a6b2b639cb99ed2485271acafc2bc988"},
+ {NID_sect571k1, NID_sha224,
+ "417cd5f60416f17081d2c70e9a510114e08be83573bf9deae75fbc3095dffc8a7f7325f6"
+ "1f9d6565381710eda871388cb17619e4448836076338ee309a2bba5f737319002e259b4a"
+ "875cce1bb97996101c9a7abe0278dcac203a712f0809eb3c4b85a9c380550ab0bbc5067a"
+ "8edfa78abf03c09b5c08f21714e1022ebfcada4a",
+ "1bcc09b3f2f1d26ab9955bff7e8c0f85c8a61293511a196b53d7963f4a4503849c96fb4d"
+ "aa68c9852ad9185e01a35f0bf298e34a09ec352cb6da34f89a1f23e8ea27712a8f43aa7",
+ "0401326341764a4aea222e7413a4a6f7bdc0c35ba246e3c68728ce06bdb19f2e1b9102ad"
+ "d88a8511130ff48c0cbe4012ab52de93329670a319f6b1e7e7dbf177667d4a98d3891ec1"
+ "4707a4aaa73713bf8fb3907d49e5653cf82a9587518c2f8269cd1e556a3be3589dad4c23"
+ "8e4c80681e141be93c318f0efddee3e378cd46512d778b9033dc8706bb843a3c3546e76e"
+ "4a",
+ "13412a98a2c14a9672ecd42db9c079a689b147ad91869c3d45a7046aa9dfd3f31edb43ce"
+ "6b84e9edcd7e3ac6b96d89f13878cf5befb052a6f8a4e5577bdf916adb10d908d5e99b0",
+ "11c8a92044a30be397007a71d9af3e4222556a10f3a07a1521c1bcef73b4ddb94fefdebb"
+ "a5944d5bd91313560718a8f520bb5cd5666539756a5e9b66a1b2d18fde5ae72e61d584c",
+ "1ea510e23ccc7596db529dfbea78c99fc78ae53da32ad7c7bdb1df01039310988ea60182"
+ "8fdfc59a0cd237110cfee9de8711c073be44dd4d04bca4b1cbec278b1a9ef175d93f70e"},
+ {NID_sect571k1, NID_sha224,
+ "eced8c412a153a643ccd69596389f83b6a36880286f8aeede503452bef8305942d95734f"
+ "b5733f37ffeceb1c2dae7b1396c3323de11089082745c28a1756f784423fa7ad68bbfbf0"
+ "d93ff8b7ad62220500df6d6895788402c1f5c69c06dd9ef55e2401cf297184e411be87c1"
+ "bba657f847208c0e750f94a3df92f253b377b4da",
+ "0ec52fc3d9c272ca80623e06b15c35f349b13548ef7ee400bbfa04196850b3b8cc7b2392"
+ "38c827f9b0a3160cd97969ce21d66752791f5896e0385b0527d4d77e4b9fc70f04d73b2",
+ "0405cd2e63dcd48fc793c18776d030398dfe3f8b6978eec6d23f49240581fe1e141f6674"
+ "98421f4c40a9430587fa282441a78bb641894cb79d929c299f1aede218a0078c247f7402"
+ "5200cd2843ca87d98f6336c0adb97bbb9c5293a03e5b86d5534e2849ebbd73dff837ffa4"
+ "88fad7d134908234d0d7fdac8c7fafb4729ecf0516c42995fc9337f60db2f36eeac69a4e"
+ "42",
+ "1c40a15fca0c959852afcb4ca6cbcc99fb680950c64ba18ae5388bf783052b6ef3730b1f"
+ "b1487189ad983b6a68bcfbb707466092da52ea8893d8bc4898eb133fd771e78379b9c13",
+ "14485cb1caf1527350587d6695ee3df2b21c13084df0c093ca5109d7c192e7e5df2232ed"
+ "e11dbe5ff2f46b13dc2dedb709a0fc1641c1f32857040147599d8f179fea6b2f2417646",
+ "1a16ebf12c11d2d0a64b7ea124623ffdfe2650fc9603ded571e76dbd7e3b27cd32fcb709"
+ "e2ba04aee0e8e1b942a4e829cd0c9683aee67eec27d4244a2cefc36f84f7de209e22a62"},
+ {NID_sect571k1, NID_sha224,
+ "30e83ea39a92036e22b7bed7639eab5e5be1d00c20b4a9b9afa9a0d1653369cbef363c11"
+ "9cc6f921c8f84663949c8b8dc9b743ac2b1861a480476e9b64c8f333f34b6fa0e1ddf09d"
+ "49618ee4f3c1f46751b5595f0aea413d4ca46f3c26b974b112cbe99c813a96a4423764c0"
+ "69454946f213c5f066ec38108f947abeeeb02fb8",
+ "06403de7627de22d1dcf6b8da5af62f9ec59ec065cc1ca1311bb98aa439a6d5985619b17"
+ "c17a70f59e17cf180ea6828ef57f5f1f8ef05680a9fc12ab7faad5af61e4e11fb45d341",
+ "0405575c329d73f261ab6897153d7261f87e9730eb5dad49c05d782cb02e483fac4a9ddf"
+ "f31d2fb695a62cdc44edef6398be8f4f84aea1d63d0b3a771fe91889dfac4780063d2583"
+ "250183e63ee783abbd00547567bb99e9b578ad8ce63d229db41c6877534487568c423d4c"
+ "389154af9627708d8d8f863597bc668e88f9412b21a6696d07bba06fe7aef93b26950c69"
+ "ed",
+ "0e751a4918643ba3e68bd9406a4386e876d0d66342aefb4ef75bc4dcb8cb2e2d9f8378bd"
+ "02c388c776535ba85d24b206f5bef4b2f23a1c99fe2f2e8ea201009ca468e5b2e21dcda",
+ "0ad6792fdff4c621219549834cf03808645171d944088f5a6d3cf1bd826b5588544a32f2"
+ "31e8428a03ec02d6c1c1243fb6b79b1cc6d732be5be8f2cedf03c1e5588822eec559b7c",
+ "178b64bc5f9fcedab17822e831fa52d49ed10afef1c5912893df4bd8dc960b474ed25883"
+ "ddc343341b696fdebd06e177f234ea45553cc83920a8c799ada2deccf1ddf1dd9aed863"},
+ {NID_sect571k1, NID_sha224,
+ "3ed244dc16a5cb292db4b1433b0ca3226913f07377faa20c6c1402cb4d026de808ca74a6"
+ "d4ecdd7c4e662105bff6edb9fae0117c50aa053aef677c0750c7a446edbb879110030758"
+ "912e8fa666489d702d8fceb719963b24a256429bbcc869a1f4ab9de9db89263e3684d4da"
+ "a1df2ed94bb59dde2abba63793e5f82aa2e4db83",
+ "01fb980aef64254aeb9bb613ff2fc6967503db4bc1f337882f1566cbeb57489cf32e34f3"
+ "10549f41cba1b951f487453c29753a184e33330e90d4b973d2e406c99a239a5c3f96233",
+ "04036ea761ccc71ba55aeab229aaf874a7c2d1ec15d821401e2988dccf02798c4e7bea80"
+ "d9fb8d30be213fc80475a17f45d60c53249b66858d29c73e73117162934dd71096d74674"
+ "2e049bc28f4d45d29c3560915698d03271028f56c29f0ead0608cb72dd0b62490f95bbd6"
+ "7145a6c0adff0d6ef396b4deea6a5e2a33f242bf17e907b136c039c127d6012c88b76aab"
+ "3d",
+ "0ed404ee6b59ffc445b16f11b9b1471249443f8a7309ad8a662b7cb44c94866828c906fd"
+ "64784c699cd29d3d972e5db3d42157452630f14536eca23cbbdd1d37e199e5a586fc352",
+ "1056938496df511d745f2cb88acad279ec2d58bb36498fcd8139d426d596de6d145b765a"
+ "5b3e8366845fceae91d14075356a32515134e577937ce2af7e732b4e89a9164d083adaa",
+ "0d5156c776f2184babd69c1f200b8bd94289d45a2f8b7cd8e8afb1455e8901d8c3ed14b7"
+ "a23b0976b85a22b86f3ccff4ae91e286f696f39646188b675895684f33f0368098fa7ca"},
+ {NID_sect571k1, NID_sha224,
+ "40343935d9423ad30f3fb1832bb08a5d20ddb3a55b59057cd275320db4a5835471c96cfb"
+ "7d67f41ef860cf5879897b8dcf307bd1a52a6226847b768ea38ff1858f59e64cd635b51e"
+ "6863773cc6c64b363ec47ca39266422406264668415c189e2f92447ac4c63ee5d74e95d1"
+ "e6af05016917ad237f482ea0b02aecadd370a8bb",
+ "1d96dc09dfaf602789c1dffa5c9ba130832badcf180429660daadf4cf1be5cca92fe9713"
+ "173861670eebfe3a0ba25bcc76aecac60a756f07b69687e05c7e25984a39556469f62b4",
+ "040452b1cd70e3c88bec1fd0e4b8f8e9bd5f844ffc12f3d6769eeb1c9ea90e5996199086"
+ "82eb5e43b1d6eea63ba9353fb64b59d6549d19cd95f2f54156c81fba53aa0dc91244e7ab"
+ "8b020926ca366dc657d133f0ff9149738738ce68f3cc2f61dad590e2502e8fea714b8954"
+ "3f43d97b46b7075c58375efa379cde208ce769a16be9a377a111a8ac51459840a223f346"
+ "95",
+ "1dfd064dbe64c25a832faea1819cd836d22583fc40b2ecbc19b1f5173c25f33ca8cb7f30"
+ "bcd619ef73a4c14c46e610c8996059612728f508bf7db7ab3191ad61955e8b1ba409692",
+ "03cbb0ae5f7c0978ad8c10c4ff099767465ed6fefb7358f3eb58a79366707107cc88b305"
+ "661526f2972bd16923375dd898ae72e81f290b86cf9a4dec086d7ef04d7a7bba5087f8e",
+ "09f77a86f0da4e35c395978603cbb9c4dcccf126b7cc924cf62732593bb1aff0dabb6d58"
+ "321debad4410dbfa1fb8fe249bfc336db7669e4ee13485ccf8dbde01ca4cdb9acfe5e74"},
+ {NID_sect571k1, NID_sha224,
+ "274567f8841183e68c4f6c6b36c5a52fb0e88492e4076b9cd768bf571facf39dad6affeb"
+ "68941ee326ee461ce1f33c26e4bfb3c9e0cae8241fbcc14cc69c1af68701fd0be3def1e8"
+ "7b7d52b682ebbe1cc225c1bd177b0886e3698a06d0e410a1f92c9bdf7239189f6acde0d0"
+ "653815a72987671b415d1e8a70e685d6e5b14c33",
+ "09d98b32c8eacd135ffb8e13223690ef02c0c1f29ea8b4da193502c8cb3f39f9eed608c0"
+ "2fd457f2fb685ec4595e8fc8f388d26778d225d2b18c9bc8b199d8b65c0d1a6af33854a",
+ "040775560724ab7d98407e20af12b03634a757037f8b3854957e11900d58460ca20d93ef"
+ "06436921f8d4481ff9123a9eff3973e17d441511df3cd88d0d6dfc8016d2cbfb89633784"
+ "6303082aa4a81d4e6f0ffc94511327202f2baed72c08026e05a288eaaeaa36a1a4961f40"
+ "0b4712ce68778ff38be43adc2222a986ef0fecde62f861575842429816c8fc77797af018"
+ "c6",
+ "1f4acd3430931ecba5e9d986c6712467526ed94a0bfff36135da3ba7dd9870ceb38fa0b6"
+ "58dd391ce658774c6725360dc20e5ef41daa9cf52fa863840ca91053e7287ed29ac69f5",
+ "0502abe544fc3262663524cf88a5bc256b20829b7bed3e2779f559506adce3c4f3a89e18"
+ "bfd31819f78ae3809d9d0710c6591b2fc90039328678aed9df2fae38a74b66f69295d82",
+ "0b2f055248d9633cafa4db3b3cef0b76ee02f6bda3d508e19c68870e76a02c69dd1013a0"
+ "3fd741e854cb34f815432bf48138203177141be7209e957f4db1a958fcd45421a213c98"},
+ {NID_sect571k1, NID_sha256,
+ "d9c99b8da92d3c2e40dea3c4025dc37770e867c4d2746c4d726b6de24250591a586c166c"
+ "88acb8ed340e161d4c81b9d14c919a1b06f1feb22c5ce5fca2693bdaf4994ac72c8983c8"
+ "7f331473fd094eccb3d5f3528e69d487562fb5a65c150a8217192f8aabfa7adcfd0b6916"
+ "d5000248fbbddf1ca2f38e3d9ed2b388998b7cfc",
+ "04d873ac744c4f68bb044783ad69e1a733cb8b8f483f2695bbd90c4211282036ad7914a5"
+ "3b25c3e890c6824643cffbdc4138d7ff457e3fbb99387494eb5cf2bdf1ad243a3a1e644",
+ "0404644456a4e5c543af7a086640fa9ff6627c2d9f17066d255c3e805db31fb1ba895682"
+ "e94f6ab96d6ca449b0c3f76bfd6593d182f422689b31d9dc3bc0b70df210a96d19af9ec2"
+ "ac01d38f8572a06ce22c1586a8329f9421414b334352f1e8b961f7e0732ee01e838eb975"
+ "bfb2f62132bbfd9acc6ef8899b4fd388c2b59e564fc3670da7a008ca016de678d6dded13"
+ "7c",
+ "0b050aa7266201a42dbee063ae2a21398ee1d2a190de9fbbce2468836e416b3ec18d7340"
+ "c81fd2a5283713f9aba33e8cbb105eaa2abbf0b687fe2713921bcbc02a4b77df21f762f",
+ "08351115714bc8f29b84a6e3f0a23bdc219d4271a9ee18bdab54c3acc9cb3468beb1f89b"
+ "0f981da5aa7d7ec7ad451bc5e91bc98440fe20f5877a4e73614820b9ab6f2bad3e2e609",
+ "0c64baaeed68178f5a1d8f095b0932fb73f9a02462df5e8378746ecf17d05971a0a287d5"
+ "a8e0317db055b02d4f4b5864597d0f9a9cb1ae68577dcaf7db09c55bf3d3575197295c9"},
+ {NID_sect571k1, NID_sha256,
+ "d2b88a01fa17703c99e5b867c645e98feec0d6d1afaa20a97b5fce9c23f0594460142af4"
+ "e36a5739b8d26d3ba35a0263caa5429b4abba157f359fce701c43372500fd2ae1bc2ed80"
+ "bfcaf8cab7016ff93d4a27f565b7e67fe7dde22bf02c48be12114fbff2421517c825019c"
+ "0ccc72d927bef156140d7f0e9b6ee37af78c3efa",
+ "18d2eb947297a054f8a789771dd875b12b26ef057fb91235dff3b062916f85aab3365609"
+ "bd2a38a861439c8514e33f174c198139354e63766942f605107cb1b9709b782622b295a",
+ "0403f6454f1dd032a925c6bc3e1c62892c1dfaa700d3badf83f07c1185c31ea817641865"
+ "a129572f3351340fec331f5ed466db7bea3ffa9723c951b518ce6f3c9263a7bd6866c8b0"
+ "b40188877b68c10cd6ee543cc5638bf0f82db25b9327b2d81269dc61250eecb976d6568a"
+ "9df29277836b97973e3615e0a4345e610b33909c2340a23c61dcc6e2baf2bc363a333818"
+ "02",
+ "0ec6af799d92ab52c51cebda61ab642d4876f374edb17253a1de3e880048355e58367096"
+ "d3bc0402e4b93fa6a6c8d55c529b9fd68a27962c19274393ebe1bd0b1197a28125275bf",
+ "095c42b3ef01c0f9ab96693526e903ef3ccf0d843776089d15e77093fa9d010872d65cee"
+ "1801f821bcce747ddc5875eaa462b00424e6cdf0995b87c6cf33c37d4463848a6ad7fee",
+ "0c4f0edd4b2dff4f9fd1fea5addef6d483bb51c27bf5c7aa13f9482243e5ed5571bbe0a6"
+ "58543c69b731de56b6b34de27795095b3676375cb4686b45d48010fe8c941208cffded3"},
+ {NID_sect571k1, NID_sha256,
+ "a704a1428cc894f958774368979fe075353b56790555386e3b043dc6a2919b94a11c7f85"
+ "883f46b4d47b324d349c28c667bf9a000daaca1d7191f2a0fd97a4867aa9f72422134a69"
+ "0625408a9ea4b723704690b69152655f9e9dd5fa3dd94814d97dd4f13e85c3f9bca76949"
+ "1c2461fbd17e28afac00bfa81371d5039013da8c",
+ "0594fc0b7a5cc0216d2e78eeeb6394c8225de795f4b73bec48b2f4ede185ba622b59a16d"
+ "d3eedf8cf2c94f2ccd6dcd205f64c97cf1b7f1e34129e94b5129502909f43940dba0746",
+ "040271cbd3e0d73ac19b975559450d686ed67eeaab4175435b2801e8989966d7c5ba81ee"
+ "7d749e43dffa12efba820462bdb274a57d04cd7e92c180cdf555686c78aad58444d5f171"
+ "2907c407b46e93d4c2b12c967cd3e41320ea8535a2ff24372a5791fac9e95865e14d545d"
+ "d3627dcb4aad2350db248ef49469ff4d59a879a84a19d1c0e5d7ad3db432af927c88aa5d"
+ "48",
+ "1e730d50a9747c7c1ce2918fda7575bb81a74757cf9625d0f0619aab7f1eb6954dbaab74"
+ "9e573290406e599eddd7d3376dcb3fb98c116ed7b65729dd04ece3eab1d7b4bed52326c",
+ "00d59ebcfb30d7b27c87d56ec2fc9286b04b39e68dc49b395f374e19647bcc58f2fdce1c"
+ "0dc815cb2aad55cf863a4786efd6c3a0ce56c1d92aa20a19245e74550c17fdaf7a08340",
+ "134e80d63c9b328e02ebafb75eabf0fafba886f48b25206cca9086e03658ce2047c94a52"
+ "22a206c6c5a57ddb8f59c5ba1408fc56668066fef4557124c430cbd1267455e0b31a8bb"},
+ {NID_sect571k1, NID_sha256,
+ "f8a87c4acadee27a908718461e3b45060ae4ebb009b10a15926460bf219cb7e75dc3a993"
+ "fb9a741b94e2fd71615c50f6df958568f452b2cc284f0516816bc0d2e2d45f663155660a"
+ "26326f63f4aa42a6e1cc8462a2ec620a365257ec042f55e4047b62af689592a1a072553f"
+ "f174dd629a4f51837780ca232cf479a68c1ebdda",
+ "0f000631106c5851e8ae0802b01e7a8a8540b427a8a3956a1d36f0600be89318032320cc"
+ "420931d825cc964e823745c60aad3437ebc1c91d32004472e9677605fb708e5a71a0d83",
+ "04034136cc7b8e2dcade5cbb9b3d0e0857c485ee791f862273749b5d3757d072bbeccdd8"
+ "eb81c67fa6927c1aa54d823193c370fc596d0d903214d7967b905292f4b96549b3dbc9b4"
+ "7d056f69b42b29ea82b9f2fc377e874b58ee785010bb7f5814907fb5531789606810b716"
+ "13a36035cd257864e414fe0e6ea353f398745df87ccf25b3a25cce1c78f61f5039d66241"
+ "e6",
+ "009781f5d960870a289cc20f6b1af56602e5e12d9a7353e81b89a90b0a9675686f155111"
+ "57d9fb70b82e8b2e25534f8ad22e14ed518e62a88f1ae21c56d4ab7763808851762d3ec",
+ "0f3eba5ddbb8c127419fe5e8cc1aae2239bfbcd2ab43a006020b96c9e7db832fb09e0bc8"
+ "87aaf24848491d4de935b78141f426875f7dcf2937748afb303ec5eebd01b6a82a8c4df",
+ "17acc35bd81cf24f983072585ee1e096459b408da909fd82b5ea86b77154ecfbffa7fe97"
+ "271f50b67ca3c29ce704b28186b831300db0aa0dd6147d2d160e4aff14348ba76e6f711"},
+ {NID_sect571k1, NID_sha256,
+ "10b5438294a77c7e517ecfe8f8cd58d75297b14116aa93e574996ec4acb21837e6297cc0"
+ "e7e7b5861e862062f192f2206a01b1caf42c6d7181d02c7d62b76c2881f8479449b02d32"
+ "c6f792714d8f70f0c75e81c7d9abb996be87f5ad9a01fe42b75855558d5f00df392b62ae"
+ "0d258f3f67dbeaf07208952e679a2c573aca941b",
+ "1023997206341c6147c536d034a9c38b4012035dc2c9b7ef0bb9cfe65e7d788296f055d5"
+ "08a1fd957b2dc7f9eb10c27790f15f30d81670945e54a508c57b70b46b4a09f4c769289",
+ "04066bd3f503cf42a20cea4a55cab75940907f38fac7fb024c55245f02d72d80336574a7"
+ "2fb248b1b61e3205b31489ed789ee78d88e487db3f5a1cd48efa1487916b8707e72e4be7"
+ "e6010b6e4330af0270abeccf0901dad2f8f64f4993ca93a7c5281dfd71c6ec405f9a9bd7"
+ "8008fd22fef76fb79e20a571df16c4d97244c7356e3ad16cc489d3a9b2e3fdcd5f23b48e"
+ "26",
+ "09137bd8436dd126924943e8599c87f64564297117766580e6344aa3c02056c811fb996f"
+ "264ac4f8f0cb33eaed5ef8f120d43a1d2b3e5e34697765ff9db4b4683ce5c1596d74723",
+ "03b684a66e92d352847f63196181160db3de7a304b6e43679340eaa9fc828322b5b9c16a"
+ "1772c981ff0febb474488daf998d4acd867e78019b61804bb675a98cef24fdad088afcb",
+ "02649a94d2bc243e997bdf27be7d6364459c38845c3bc8d1c8b549ad4689c8a4b4fd5519"
+ "3ac769b1da607dc96458e2f6abc602bb4048cf6b0933da6785795d04d10f22e439748a8"},
+ {NID_sect571k1, NID_sha256,
+ "d83a52d43216fdb16b1b40469863ca8eff4df9fa358deccb5ffd18b3e22a9d654aedc98f"
+ "3dbdc4f5b4e56b4299e25d8a5a38d01b34eb93de382df1ae4d1c7f966e84b84c393d167a"
+ "ecc6f1192c4b42cae83748b1ee3d9147ce7de74cebd122695b455e8082f86e3e488fb0f5"
+ "1b3b7edcd579940d1cb9d045296e5e38f201b7ef",
+ "11ebf320ecf6a908ea5b868afb8e22246ce84e743e1076d6185ec65dd79043380708bf8d"
+ "a4ba802c3b93b8d15509bb7d7de9dc29f1e9fb0f0f2cb97a26698f955b1f7ef668122be",
+ "04038b2760315b0999f9629922bcdff65cfdee4938d4aab8cc3d200aa9c1db843fcbfeb9"
+ "da10afbf10280110c49f0c18f15c2aac4f39af35a79557c68eb6cf6afaab973538b98b0a"
+ "6c07da55796396e919f9b5967608af06bd01e8870354317e76bcb8597a379129e35bcb69"
+ "bbf6b38911a03c3076f7fbbe9b179e078b442c604519e330282f6f6c21aba515d6d73c02"
+ "57",
+ "1c219274e54a4c5e1e1aee3bf805a7002bbfe1c030cd4c8a1617dcea2a14b1d537a64cb0"
+ "7c5a1385edd76f3e4ea9a38e38b458d2c7bf8eb56a57fd33166bf59a8af2e9639106929",
+ "08677167a7ea1aec4de76d1c5effdb5a1655965850bd6498aaa4fb3fa50f213fa4d99caf"
+ "4145b4ba87e34797babfe614dce6ac21d9c13dd0fcd9802b1414aa92dfa18318c7e57eb",
+ "048d6161a3739fbb3ee1c223bc82a46255d10a86a605f6c8e1934b13f1a8662f30f8e95f"
+ "53848119c61f08037ee5a2440c8faa11a6b1800078ed476b2a3f4cfdb25367c8dc2989f"},
+ {NID_sect571k1, NID_sha256,
+ "eddf5553ed4db6e8ce72cbcb59fb1eb80671c884ebd68e24bd7abe98bb1f40806de646f4"
+ "d509be50a3fabfa85c5630905ce81abfad8a55f4cd80208afffb9056bc67d9dd7f4660a5"
+ "f924af2a3745eec2daec39a3fe36131fe9eea444b92d31f6a125f12125159ba095f89968"
+ "a7028549466f41ad45668a861f671050d2a6f343",
+ "0746d5c824d78f42a1fd63d8fcca61f154ba3e75788b7a0b87f53e5420e23a935b02eaf6"
+ "7bace8dd8a8e7c1caee30154c2428e0a437cf12e235f41c416f92fb54528865fd4766d1",
+ "04063645fd3810e2458d15b43287f329c354b07324c0707f19847c544f129e4de1799996"
+ "f805fab7dd356567970e10eb21d875e8ee7bbce56c666511f9b4a4cca986683e937d6f0b"
+ "3e0595485c9a7f2a97fa7f8453df13b75682931fae10f3441042199fedba91a58c105df5"
+ "7b83d2a3911a2d34a2d41e451d0d2549b0a0a65b42aca40aaa618c252baec171da7937d8"
+ "12",
+ "0674788e75eb9d5ceaadad9fae036f129178fde1a584d73cf284acae3b4cbcc208ae7a5d"
+ "35aa473f4e1201c19ee5bbe685ff9218a8e2188f3428ab45bf09b6b600fcf81fadd8d69",
+ "060d6dc42329687012a93ffc5b846b4dce3df46ad12eb61437832f81f4fcdea7392582fd"
+ "75e701e106e5b83521759da6a22a21addb63b73783592d3f29347f3d484e05c19db148e",
+ "197f3b2d4f3e10425f4cb60dd1ae84fd8c87f62a2cc822342d5f0be4f0841623227c5cb0"
+ "f8bf83fef483a061e30ecac86cea0210036083a99fa1247b49e19a7f401a815cb68ab3b"},
+ {NID_sect571k1, NID_sha256,
+ "3db94335f6d1a125309622c0a9d71bde1da09371f0285a93bd0aac255fa8f10a56074e0f"
+ "6057f1b1aecf2d86a2319590ead96a2ad1336fe844e09339b456be32374ba2e659fbe9d0"
+ "f2cdd83444d117d2ce3204ce4b4294dd05405634b84747ffb4227160c4e5c2c9da9815b0"
+ "c6d20f55705f16cdbaa13d107ae666d707ccbe6c",
+ "00670e72ac2de50dd2cdd975a6cdab10ac45e37ef7a28c685d77447051496b5e161f8b1b"
+ "93f6c7f32fce8ea05e94ed35fd7cb28c44bf51ea29cbaf5aaa31d6abca30a89430323dc",
+ "04054db4acd0815aa7ebec4f7661d80465c64f1fd4147507549352bc07dfcc6041ad309b"
+ "fb1434b60f73b3d61ebde91f849004d55257e98b6ebbbeeabe960f9429a55a36ff75c112"
+ "4e05b6f36f76b3b3c780b6a70bb8ea150e9cd6895ff6a6765a3516acbb4f5efa91434def"
+ "52dd0ab81f618ff28db10fcf39264be8e7ea76e06516335ac5ae33ba5393080f11418911"
+ "0c",
+ "0f74a0ec1a7496043d78891e308c82b4660606642ea669e4406683d44b79dd6e6a1b8102"
+ "92bcd6a9f59bcc2e590518bdf2e9224755654026d85cf2a3d9768d909278448f0d63fe3",
+ "047d808febc1065646e6a5608d62d1445d922084487a64e9ced5fafff2977eb3a7e29984"
+ "230946e3fc77a766820747122fdbbb9100c591ad7c9dd29d07efa2e8a43357e3c47762d",
+ "04dd6c8ce75bf2792ef227cd5a3102d30a9a31690ff5c21354f8dac9f826c86ebfaa0465"
+ "3f0ead103b1c8ea59f0a78f5d4e8eab597ec6c028ebcc57f4ce4103ac14579bd6e15166"},
+ {NID_sect571k1, NID_sha256,
+ "69166ba40768d0a3930325405edfd85f3272f7b8e600b0b319f070274c91f9f03d0e6ec4"
+ "bfc7b4445e91b87cecabfecf5e77c7301ee3c6b0affca2fa02c92216698705eb75443eec"
+ "c25438db2d2fb4b24f4195d6b9c05c53e0868d3e58477100607ffdc31b18c40b4ad7202b"
+ "b034e58653daec0f6b33c024d42a3fc84bd8f86b",
+ "0369a3bb96f884983c23281bcd04e24a3e5f6359f81e3c8e46f3f6b865eb6bdf98a630e9"
+ "0646275c587e41b546d3ca7688cc207afda15cf9b25cf83bd6ad27908647f3f9de59de7",
+ "0400eb02f6e741b3f83a9dc50853828b8a6e0861ffc644162515a264730c662ba388ac0d"
+ "705f8b36f5388894df5c1bbc3582c85de141abb7712caadd2d616da589bdffdd9258808a"
+ "4105dbf831f450da6f8e503c19a7788c1317ebe556a458e2bfbf3137f986c9c966a14ca9"
+ "0344be1b76457159c9d70f13af7fe0013cf605010a8a3b84bc0fe187c7d93e4cfb2639de"
+ "57",
+ "0ce22f7f2f01355280ba2d2cda06a55771e66f598bf79c65171e08a98f1d954e4beb3ec7"
+ "7ab06ee60c5fd156a7098023558e3d630641579cc179739bda6d860f8ba1d5ef717ebb2",
+ "0ae86b40d10ca45c20bdb3db55a6dc12e9b75754679eccb44c40fa57351c23c062282e1d"
+ "a9e1703176e4b8f7f224982f2474494772a20269c43a18a7a03fd12d8ebb975b83ade0f",
+ "15ff7b34c3316d9e7ee3d7b48ebf97d98453ca32f3fc67fd08761d93cf34cfa5a2314fd0"
+ "752d263c3eb7cf842aeac395d41ad3c04c1a9d3808b4fb7489e880d130c35a26b702952"},
+ {NID_sect571k1, NID_sha256,
+ "f64cb668b72f1e6dd026a478505c0eb33446ae9a2993bc7648aaed02e172fa9a0e05eeec"
+ "61e756ba246c1dad7e85d3f01baf734b1905c5bbd1b08d833c2cf1e079eca75b866d705c"
+ "407eea8618d23ebbaf269c7185984b3bd4117ecfb295ee6b47eecc8d3a78bb96552f6be3"
+ "14656f91caff793838226662c75cd7804b6bef79",
+ "026717b039df834855511815d5665ff9b654facab469390ae257b7f0eb4dfe66ea0dc037"
+ "242ed0c13bf229b8f7ff26da9b55fe4750d3451c62804aad493c179ae45d08ece5af085",
+ "040191a6d1ab9cdda2d593d5598a966efff829c04c421804c2297e658adc5c9a6092e146"
+ "b25c730ff7ee65cb9812ac9ea0c18dc6b60deda948b4b7568e8b8e14411a6969d7764652"
+ "ae03744af98387421d958b26971d21928b73bbf5b0f0ef183e9f606d0348fa715f153a60"
+ "b6c7991dcefead2ebb875d0c1dbd3665dc42a241c565ea0fb0e6349b4319c3de633883a5"
+ "16",
+ "0dcd28cdfe9028a4a6df1d41019bc58e4a1540ca94b717d258f2afe8bec560f3028e15ec"
+ "1e8bfd422415961516659fa2b006256745e85e488c359e8cbc94cd2592bbb892a19c45e",
+ "07ba5911415a3d21a3d98b400f61eb63ddda689bfff0c8c3ab83668b1e4bf8a703c853d3"
+ "585b8bdc29aa2fdc41d5e7534850f4656ec949f0a13fd18295b662c9829723e5a7fe3a1",
+ "1b027e38283d74c962fe0e7b58dfbf5e21ce1d9c91651bc98284008f44fddfe4cec94419"
+ "94e690d72a8ff3ba2b538718aa678e7de046b653403f3b7c064ee07c9c3c6d23e1b068f"},
+ {NID_sect571k1, NID_sha256,
+ "51ee0b98eb6a3e3c1afcb35a33697c048dbf61374629ac5702a57801fafbea4d6fa5a26c"
+ "9d1b79d1c58257ac0106387fab2d4a1b7f8c0dadcbe7c830613531b3c209bc17f792bdba"
+ "1c1fae1b7528aac53dc86c2094b40194577325c05d2258303a2d17c854e7449489c43991"
+ "b6877a50692a6340a528a6b188440ac0cddd4c4b",
+ "1d642f2d393ed4abea37173e4a79534af87adf534ead4a0a1c46fb047619221e3577e6b8"
+ "bcc776114d01159c736ab78af3e53feac339d7afe58be8e7a8ed290f1dad960f1b5de94",
+ "04023d1ea50229b70b46578df6904fd528e9930985426eb2f1ce10eecbc0c16583959483"
+ "80c4047d67bc4072be2a2624d62a301da41a5265f040642d1937fbbb7cbd205e1db85b86"
+ "850625c82ccff6047b1ef4b08f1913f7366c4f6c0312c21e5ab01b598d1a9618cf5c22cd"
+ "dc64a4732b477dd5c06e332b846c8015a2e5a195326bca46c29cedcc2f24d37ebdb7c2ea"
+ "ee",
+ "0c9066831d61a4192ad9de23efcaf578a5d5774960a2b3e3e292e0decaef62d1701b86ec"
+ "6183d8e17a699d418ef9d084b982c97a55bd76c8b038ac5c639451096ca4d331f070ad8",
+ "005778acb38b1961195d38463abd9c19d9e07dcd997f19676633fa3c44caa44ad1a9bd63"
+ "435f3138ad8f22a731e749a81161c5448eb462fcbcd69ec2255cc2923ac697ed319316c",
+ "1a1aa90113952608dd17dbf391ed56231ecfa7d649f3274774ed2b6034a2207c05c6d8b6"
+ "cec480ae27b58495a50b1e5b74a17ce6cf2e43aa273c2b813c0e6c79976882b7e4b1c93"},
+ {NID_sect571k1, NID_sha256,
+ "feee50aeacaccb6b1c3d95c6524044edb78322ee836d8159c4a4c2cc6982480567c4c6cc"
+ "4806a564876622266e1ebd45f2f4be851b79da025bd57d0e6acce1ec1c8c255eb89713a1"
+ "e4897d4ee0f7a248b9d4bd3ad5dc0e57f60ebfb65691e164bc908956a019083e923cfd33"
+ "dcf37c735af3462768a1e14a8051d7aee74d5228",
+ "08cb70be29e83f697a3e2f67d86f1c1ec9a163b5335cb4a06004b6634948bf60b8ad9df9"
+ "b27d2bedc4975265ce44a7884e57082d521320ca4372d38fc77b18d3fa05ad8aa5c43d6",
+ "0404c042bde9e90b38b48e60551d832a7c80377a81e8c5b010d0e491cf765c432b5edb07"
+ "71aaa5f672edf3ba108dc71459d245ad60f3884b8cf33f8cf797f36b20e4be39c8389e66"
+ "b4075f2454c41c0323ee1a640755077d36a65be7c2a014db36719ec217e21a9c004bae5b"
+ "efb499bf6be67e82d3da70475abf9dfb751c84c409fe838cf1c6ae109d27f24d75c02cc5"
+ "b3",
+ "186f16dfdd7a71f20a5e634ffc465356914bb52286d3d5ac00f3ebc02497112fcd592e1e"
+ "cb2ebbc819e07ea092e465e66f3e58da7a2ddd41c8787f57c135ba4c168539b4743c3a5",
+ "1c2140d294fafe3d9effb33ce73bb7e5485c93c7aa9d33b7535c7053831a1dbe79075713"
+ "794c87e52bc887ded969d2dfa6a1e2630cff96760310e04cd2a75be6fa020a12fc84d3b",
+ "110aa165707b7de1b3a8e05e4502701abb5ade0a27deb04fd93c6eb24ed2b67ade6c49d7"
+ "8e874d25247e948f704d3c5b925f84c5b07c9b289c4f8507e75d0f8927c6dad6dbce885"},
+ {NID_sect571k1, NID_sha256,
+ "b115f7370d6a93a90fd9dfdfb292956be34b61992ce1fa5627c5e928d74bcdeea66d4040"
+ "c473306a0070fa8363c4303bea32f73ea3639b5c6676fa5a1d68a2cc1f91f00580d7453a"
+ "23ae70af4cb1f1657aa82c5b305374effe5d67d559e46a6cee6360503d21070506f1af30"
+ "bb000d2f2f85caa6465810f89968f33abae81cb3",
+ "1eef463771f9c6285f3257691dea0844687606d4dd00b6020517f190891cc1be97cfad21"
+ "d147ed8881b5a6e19b22ceeae30e1132476325f2de0e9af2e14c80b8c780a9d2d6c96de",
+ "04024de3ebe03d2d91b88794a77635aae6743e597410ae10c356a51e3af88fa7f9c4d648"
+ "c7d1fdb887c8313914ed554eede282b24a2e66aeafcc0cc96907bb2f3877eeb97df491be"
+ "f301ce1f9fd4d7d3870997f34f54f2ba8f08ac94ea94f74a766f2dbc02e4d5149802e313"
+ "5a2d762e3b8abb01461968f1e88cfc8c7fda49c099e392e80d57f0c14de9c4fa1eea2573"
+ "2b",
+ "026b545702baa340fb6d1bc2bb96f7fb1a77a2428cc122ea380a258c747d4e0625bbf4e3"
+ "dbc2ca2f15bcfea92f2417cd5d22f2bb5f38a9ba313b3bded506d3e570dcbcb86c2debd",
+ "091c162d040a12f08a416296a43501d92e2ecd6be302b5e1754b9ec119fb8a572626c509"
+ "855c7c868a07b263f66070ac986f95e4c83150a5a492d5ea8a7f8ebf556c17ad2bcc996",
+ "00c217fee7bb202d6399f6b1ae4e5811d9361573ed4fe1b3fe5d474cf06d0236d59dd358"
+ "0145dc0bc7632c721b6463c69490a67d1be1fae99e34318af6df939f9f7f36a9bb8d5e9"},
+ {NID_sect571k1, NID_sha256,
+ "726782eb0d9720daa64e4a77b5d8dd67a1a193f15eb6b5162e3d89c925ba63b7c7e1c4bf"
+ "c8d6f11915b0e14d16ab53ab015317bd5958b0beb6074199e05181915496575768d026c2"
+ "3e92e06016598de008c3718aaabcda8b68bebca0a73ecfc7327e8d3646106b7d114dabc4"
+ "6cfe56265c326ee56fd2ca87abb5bed8f997c735",
+ "13bd452b0880b101df1aa65724fb60d5d85b37ed5419027481661a3617e0fb37bda1151b"
+ "9b5b41f908ba832011f7850b75a07b678e5b8cb35c5fc8b94a625e4398cd5ada2b04cc9",
+ "04031d88b62d2edd5f6ed29258c143bbcb3d29413afd8f86873698a9efb8d2021186415d"
+ "301599232989a0df5ea91ca222c5781314f200c708de30751feadc277d50e64842dd355b"
+ "a501c76f19ceb1be48f5540265b8b018da62fc225cc0d2d1675bf7df71456cc8e35b002a"
+ "220e2e80691600a2c1ae31e980d0cd22b4741c25bfbd413f10b375a4d8adf70a65c48ff0"
+ "06",
+ "1b9235221a6df49e39b4cde6650e994f624fcb5084daaa62aef54bc154949f4da9074636"
+ "c44f50ea40da1a3f01bf67e9b62a725ac0537a4e37ba33fdea8ba8b2286bf82901a933b",
+ "01dffcb5b5eb23694da4978419110ed2bc7961c571a2e68daebe21e598c8b483b34f3178"
+ "978708db6d78455cc1fb4f73c5ab7607cbb4f05d4d008c7bbeac88562fdaf7a370ba394",
+ "057018fc97d7b16d69af2b7dd4a859f09dc178a6025e1bd6839ec7c75c0383c59eee7079"
+ "fe61aa6bfb3e2c780d4ac0ee074e6b13223c239aa60ea1187ca4937864f89e2c65056b9"},
+ {NID_sect571k1, NID_sha256,
+ "1c2418243fcd89c6382b7c3b2a8c341f26d08174a9e9296c4a5c98c5793a0fa48dce51e3"
+ "0811a96b515aa22bf9af89a43de06d696be1e531c5dece1f69fa6ecb7f20be063c602a16"
+ "454ddafb14385ae3f8246c3f989d0566e06e7ed1864502896ea19df8393259c4dab3b338"
+ "0a4a80b4103cbef4f38cb69198b7cf74ce94883b",
+ "1288141ec2244e4bb3f62daf4ee588aed09ce22be55e3d42e9085a947c1f8cd16533635d"
+ "170bd64ae0b417346fa4670c25d41387acb2a8e14407a1931d9f7c5358a14eca40974bb",
+ "0407ccb7b12a7d6997ed2a11eead3278a3f45ea284dfda8e17f6d926ddd6881a44d02a0f"
+ "7504dadbbcb0cbd6b85c113aa0d3b4efef1ca151cc38cab1aa8360a6d22e3d6fbc0ed980"
+ "d3031b85dc2d2096bbba6c465629ea09ae3421cacc5581770ce3479070f23b3aa938333c"
+ "7c691d9cb93a4533b2ce389ae34dbebe8f333cef530abe17cd21448f701608febd42d9bd"
+ "c0",
+ "1e411ab53c48cfc1ef9eda97002dc9181a78352de13fbee3bed86cb00c10e7406033fa0e"
+ "a97b50764b0eb2dc6eb8ea83e47bb3150ecb9437179c124f15fac6ac19b0c8bc324f171",
+ "14420d78f2f9f1010018848b0442ff6e6203c1dc06a4d523802190f462ed3c11c7aa7678"
+ "bd03ba27df01cacf4121309551877d3a2bbcfee116c59926daafce55a4e0a7d69c5c938",
+ "16de0b369c28ffa0bd6ed8802a503929cebb5c0a4bf0c0e99b14659b48aabfd08bcb64bc"
+ "2e39855d7d514d7525b3c4dfd2244f37019b5f86254cdda599bb144c8fdbaad5525cfad"},
+ {NID_sect571k1, NID_sha384,
+ "1de4b642ec7220c64b91561caed7832044d6e811ac909f3b199cceb0d8a7db91bcdc8014"
+ "12044f5c34b355b95a2c6170fe497f6d5259bc20715a38cb0341c88e93029137e94d895b"
+ "ab464bca6568b852340a5c5d6a225475f6eefe2fc71ffa42f857d9bab768ccaf4793c80c"
+ "4751a5583269ddcfccf8283c46a1b34d84463e61",
+ "01fe06b94a27d551d409b0eb9db0b163fadcf0486e2a6074bafe167f9a3b4ce8ac11f42c"
+ "f72f9a1833a126b9473163d29bca2ad139dd1a5e7fedf54798bf56507326fae73a3e9a2",
+ "04038d4dce42bf8fffc39a5b6583a1a1864de288ef8479449d599115bfa35b37954ab288"
+ "ffbe81e69d58693e2c8c81639df12e4b36f62b2ab042e92a0715b518c63d0ec630051d4b"
+ "e1059c72c0bfb0ea1ac5e2fdd4fc380d08037a3d0eeed4990ff02e6cf5a16817ea598085"
+ "e28f8269da86c547e7b34e16a06724ee73776529c5b5dea4ce3321fb168827ca1cbdf885"
+ "6d",
+ "0a3b18c8c9f17badd123c674869ff428d533d2ecb8c74f9784220be7a90dda591003df52"
+ "59c5dfb612ac7398aa04cc9e82863eb0cbe66b6e7f45dd15dad252f74a538d5f4354c96",
+ "09c368c80f697c1718c55482b2c6c5c0edd7257a3a53f7193515629aa40a9716cc889d41"
+ "c120516b54f3a106a171082364886e5d3a1e9482a103f072988f61de68f034d658bd976",
+ "0e782ef47b250f40c56e3ac4de112347174bd59fd4cc991a2b538ca90cdb222d048fec62"
+ "e2773492a1d327152d1d6591740706fe2f8e1d65de888d47fdf173b2645813ac0fc3078"},
+ {NID_sect571k1, NID_sha384,
+ "70279be7d7ac72a32606642ecd81b5d4d0f95fbc3c0b07d85c16adf2788601e44dedb8e5"
+ "5e0f9e0b4ca3ca35f5be7511b0e69224a05204af67aae11ce154af6d594d47f6e3142ad1"
+ "83969544aa95cae1edf42bc699137f60178c12b10a67698e37ab9f3edbfb3acdf1b3513d"
+ "62fe3db33b16cbb4e1f9dfe732c107f9d0c953f6",
+ "09cdc7e4945c485a41728f83d5188f539e372ff4fe38fffcaacbcb4522428e4f93ef4972"
+ "556f4398fe17bdd885768f0fb5590df495badc794d4d274e22f2f4a2535555922fa43f9",
+ "0403c6f046aa3007ba7f883bc1e0bb43a9a0a1daecdea3e2b6c10b2481d11a834af241d6"
+ "0cad7cab27b677c9ac11f2e5b5226c0a3de13029229af00e5a092340af9b230e0ed992ac"
+ "f406326ffcd62e1a68b63ac680a743130b1440bbcd3966207dbc8a8f4336eb6a7986aa53"
+ "cfa4fd7bf363b30706b4fae01568020b41caa70ee3d51db982de66b0ee39777da3fecf5b"
+ "01",
+ "0c717523a308418eeb2aeb816346b74149d56b9620774cab582f01681bec73adb779bcc7"
+ "462fff35685a4e1e114c8fba474c68fe2650344fc9cf610908966a9dd1779f76bce0cdd",
+ "0061067f377bff6a9be30c9c79d8abb7f54cc8f09eaacdc190beb27b1e6d297cd32b043b"
+ "31feb49958745b78e42ac074b8722e1a7653bf03611d87c44fd3891ae410b23a2140b83",
+ "00edbe756a5dc78c8a29baac9e2059154294e3adac9a5adeb7b27ac6e4d4086821cbd554"
+ "67266946ed8f6f03abff35b59434afe84067c1daa1e0bb62ee7c56b85e7f831eea99047"},
+ {NID_sect571k1, NID_sha384,
+ "4d7e0ad520445b6a5cb46b7c77fbd367614044ae6004494c2b3a89089287e2836c73b799"
+ "cd8c90139eac427ebe335804c3788f3728ffb8edd7f49a4bcc76a9e24ce3c2299cea88c0"
+ "4645b82033115380f81b0c1d823e470631008d350cf0c0dba1915519985b8a389ccd8c80"
+ "9dbd5bb5051a79e631916e0d052d9b6cca18e0ef",
+ "02bc753d007c4491cfb8ce0a6c96455acd16d37e02c982db216b8cc1afd6d10c6be4e15a"
+ "3988b8b8b86b2b5b59a5c1939889024849317f27ee08a06bd8e7524d4ad83a1de208564",
+ "0400ea922b09e902ce3847f14d3b3afc5562dddf15811cb2e7b9e06e1b919d795f8451a3"
+ "dffcb92b418d30bbbd1a7ccf827ea0f1f6554387fa2fc51755799040133d7a655c7800b7"
+ "1301f12439a0c0df9f6ef08e89eb1a62e2cedafc0460030810b2483ad9427c48dc061e46"
+ "40ebbd9b4a398841c863a6e3d510e5c66934d66b317b1640bd05018a35677c6ac2c78397"
+ "06",
+ "0385f9caee4731627276875dd8d725fe79626c18841562e8a13fa7531c7be9adca565c22"
+ "459d519d643ea22478d7c51b4c286920b050bfa54ab7d42966e389c485b52cdb4fa1a0e",
+ "02ac84262fd121bbec43e81021c0f0610fd2fc0b26d66581ddaa78714ce58be469652838"
+ "51241d792ad6bc79af39f09d2d4bda83996ab41f1fd206b8293cdb6c4eb9d96f39efa25",
+ "1d9c9bc330adeee8f58ebfe8c1ba401d4433efa04a44185b0e8e20b634691bfe058770d0"
+ "74289e636af3e96c118edf31d72b5766c30f6fe84ade42f284fc7f2707bf27b3a309638"},
+ {NID_sect571k1, NID_sha384,
+ "d49903f38b5c9b17542310425e59377f61f5b4f4740cd97371ee2116083f7758e69e7e2c"
+ "1b0950ec6b76f96e3c91c721d6f2843afde8c7505a559c8a64bca2e665aa1131b75bdf86"
+ "fb5b90581c7d3b61c2cff88f3fccf356ddf5ed282e27727be061b6925c51ea7f1a495f47"
+ "1dc8a5ca1a88bbe29e92338d3c9361460398965a",
+ "02082c6e61d0d72f040905d8c1c20d47b029f41ec68d6cbf43ce97c3b2a0a770557a33cb"
+ "803c432cfbd3958fda30ec1bba77a6613c318597a85ad02b26c44bb77ca96d9cc1194ea",
+ "04059ff339d505b307e05adb45aa314d47f2450e1b1aad840b5550a67c11940d0e786547"
+ "55a8e28fb651e12e48c66cc1ce0338114bc1ffb00965b342ef3a3caf495f1d73a69c3f3d"
+ "170724e9474e6de57b9f8cbf6f6bb4f73f5769e6cb0e006a34c2510b379995c9e054cc49"
+ "81c709ca85a3aebdf29090ca07dce5bd3c313c6153b551012d72a8f84600350e8754bc4a"
+ "bd",
+ "18d65ca6c2ef1fb32dddfb9ad4603e03c7cb1791a9ec7b41266cb68b6048aa111f5971f3"
+ "cbef3f0dbb9ce409b59c31cc59bd6f100ee5247f8c36f26ca77cb252331fc3be7346b5b",
+ "12853f9d695b8ac4431c1ccc8498f3fc4916eb6a5e66b3795a3693f3f5a29ad13e58dcda"
+ "ca5774f1f295e2d2d3c63c69abbcd9f388a3383371028fdcc8bd77f7554d6aa3f0431e8",
+ "0d1c324afdf01ea19e9453d2b7397584d773716d6a08b6e38f9a9fb104122ecfcc9de7bf"
+ "1e5a6cfd52a08b7cecb002ebc21798d474f035fe7d4554bf632f237bce14aad88b47d4d"},
+ {NID_sect571k1, NID_sha384,
+ "0e3f4afc3e7b25c1bf2d98098a5a87db1224d9bb45adc6e434732b8722a708ab80a1f3f6"
+ "ef3c5aa70d2e1dad3e4416b12cc59171f05736c4b58bd084602c344f2f0bf3cfdcfe04c6"
+ "4e87597a99de23ded64b33607f7c273ec321f6462518715b11e91361e89ce5415bfc2ef5"
+ "20bfec378244a3bd2a4b9b6b3d68815f2f75baf6",
+ "0e298c93351323e2c5304015a4878997ae4e79d1c32f1dc64262e534d4f2c4b3e222356f"
+ "fce746763373fdfb936fd330d3214a18c07f1205b20c9a941331cd676040ba1fe3dbce7",
+ "0406ee4952a83477d89ea05ae63d5169cb0f7c7ff22f15728c6d69dfb30d1f28158e2667"
+ "f9342cfd9b32f2fd537dad47c190d82f72c03043f2a9c5d97cd09d07ed4c35b961040425"
+ "54026d5935dcebc0ed5a07b7ffa50de3c8aac309dddb61b8c560230379696d81d72bda3c"
+ "819c46387e7f026b384bb0f7b2ca90c402bb67b5e37d343cc21a8d1a0f822dbb2766030d"
+ "73",
+ "12d23969d230e0e2712f96b11e196202dd3e6ac755c824f92b9c765e3fc808d4e7236c8a"
+ "3c06ca2c8272c7ac953fdb936db30d892246cbdcb7f98c43177e1c30afcc162af511364",
+ "022f6dff5bc1eac1ef568588e2e512103cf56ebcb610e124a125fb004064a28291c19e83"
+ "ea08171bd1b14ac729392c7c46354e795d63e3bb087fd100642465efd817b79924408a1",
+ "1785e1fd773446e3b90b8704cc2723b8da2f99d1d699e817c3c4622015d178b0cebc19b3"
+ "a6dd972f75eb3828a386973c0a5e67ca192d69f1a84c825d1253f1062a990c3f1a947c7"},
+ {NID_sect571k1, NID_sha384,
+ "8fe32671f6927272fd3cd8dd4e34d44d27fac8c88b41bf9a48039e914990bf06d1633b38"
+ "b9200ce1c2a275b9c55498e5da2d0707322c3ea0a0fd7aff598fb801628264e13047c800"
+ "8153e8595a0dc95d54e70b882ac2ac9314d2b78e7b93922da818d7075215e354708994af"
+ "66958954c92c074d132dbb2488e5a531c755a8e2",
+ "104f4ad56594c5cec2a988c5596d73adaa5a81802b40110dbae698ddb1f0b271fd1479c3"
+ "8abcdb9b234e69cd0da8a0328d2135c287d5b130a09fa0b899058e7800eb2dfcee95c1a",
+ "0404e8151aaf2aa6a6159622baad134be41c404982bb0101e820eac8f0a52166546c5392"
+ "7d9b419604e9b025757eaffac526d4fbebde5fba0841c6812dff2e9bab5054d4074a125f"
+ "fa04413639ad72d6eba870e1760c71966544f3f881f88880fdef1edeff47cf6c235e8dfe"
+ "f1eb1d8df51f9c48b985912f1f70b61fd3d4b859e052887560872fe6e95db0f435778d5c"
+ "4c",
+ "0cccd1bf3424d8bb0513fda3db93e81bd34175d84aefafd26b37eda9e767618247bdc94e"
+ "d2b1882bcae4c83eafc30a7a4a80806fda10a5e70b8827287eed8eac2721939a63c2175",
+ "05b1460e856548287683dfbb93efc869e80333a9ddcf292e2fa3b3c8d430563a01340685"
+ "c6db1059aaa8b298c8db9e8281f36e3a9664faa17f413cb439ef24cbdc1a4d58872ff6b",
+ "0c6faac191c95738f7c6ad0eceb035e5d22ae85e4bd0e27f2e65ab293717c0491be3d1b5"
+ "ace80f4cb4bac7e33258706010c2aa48d84c9e39c95e30805fa7669c42bad84386f7754"},
+ {NID_sect571k1, NID_sha384,
+ "a8fa01136a0a78313a5d160c32fe5d1805eeb3730c18ca0c47818e82c48eb4c9e5b2dfe3"
+ "ee5facef9ec59b68f4e6f3213f77fba9f8ba06dcde546ae348d343233883894f4423331b"
+ "536f62373a495852977a51cb192cfbec04b5582b4ece69f345979e234de32da7a120138a"
+ "057a7119735c4cb19099bf48bb202e7ffac04def",
+ "0c4989bf33b3136bcb4ba67906eaff2bcbc6567635aa4b057acb7353ee87ba3cb4cb9838"
+ "f8f679729d5c6ed98e6c4199cf58605f009c6873a1b8321f83cd3c0973b7a3cfd9dbaa5",
+ "0403871c7781f2b4f653f0d49a224576bd1e5363d5171bd21da89f590f49fc212d8a57ac"
+ "8a140d923c2949ca287bea803afd763f15f909c099a07297e8ba1b37c70e1e8f0fd1fe9d"
+ "1c05806bd5b4858ba0814da2167d232d55bb5c41ea0a36fb28a0a151c1b79b22cb16613c"
+ "cd9dbf92174e42578ef88f4da6eb44918acf427fb7e4022da3376243e75410ba6ae012dd"
+ "fe",
+ "0a9eb767077886c48bc54503a0d2d62f0192d3581bd9ec253107092c22f68a15293d7c3e"
+ "7aff56282f0cd35e86a2b3c55c9eec079201d99b5f49946780ce6aa18b225c2dfd72cf8",
+ "03eec6ffb390ecb2af4f5ca17fa8a7fd6938667b319f0f61e5c7523efb77afccddddb511"
+ "4ca8c461b1c28dfe7eb85ab156e24e891cc6f9511d703e8b3c8443d04fd8de80f5d65f9",
+ "10cf3156cf71dafea6a0d6abbd503d72b13e6a684076ac900f390059cf3fc325966b3548"
+ "b58e14a82bf291d9689783b899db7d4baba524b0b63d31f9900a84fbabc2ccad95742f3"},
+ {NID_sect571k1, NID_sha384,
+ "ba2d83b21c783d6ef2f3b7b10e910a418a9b9f49ae0fd37990335b3a3d15627846c9a12a"
+ "1f31a3d0e062ad1bec5650606ed4dd06c30e50c1e8761a29f4ea1a20f74635d5dac22e5b"
+ "787ac10f4ee82b338a641484f91771c128c84d31cdab0a6b9616078c898665655ee9dd4a"
+ "e73d33b94bf091b064928b959623aa71ff73b4db",
+ "1a96f2ad56e31397e236cafc108087479c9823589a5fbc3dc7488d0e5d1199cf245d7f21"
+ "f524cc0e8b47feca14c93fb760e631434a91188b32965053942f3bd39b3714f9d6f1a11",
+ "0400195bfb66e20ae295cd22d59b27b3880a890fc44ef5c720b568bf7f72266293841dcf"
+ "0572063a96c62736d9d4a9cce31b10c03016305a409858a79070477d3e989481ec555c81"
+ "460491122a199176e2492e07fae4ddbf02d2a40a21bbd99b8f742b546db2018cac27fb4b"
+ "1c03cff55f61b7caf13b0f3b097ffc8e1549eacab89225e0cf1e96b268eab7f9a1a69258"
+ "f1",
+ "097e28225aee5bc9a970a150502dd14bee900d3b040b0da9cb52f5824e66af46a991bbf6"
+ "423fe1e089cba47593af555b07b45e47b0f4141b0412ddf6e91153213c5b8645ae7bab2",
+ "1439928b55917e93d59341532cd1f9d09de1f6e0d9a04514bd4b692603f2cfb75a579301"
+ "b39b8cd92fbfc8832839691c23e0ad3efd3b4c7c3e9a366c1554c6dd13c50dd087b3055",
+ "1fb432e72be6fc524a7106b21d03fa71852c18c67edcb8b265db3b144214e7e6d10caad9"
+ "1f81616e03ae7913fea1e8d11e90d54b17705e8d04c8c20f0f4f46f117cc423ca178ff5"},
+ {NID_sect571k1, NID_sha384,
+ "ea2d5f4e9797bfc2f33f0fccaf530db2bdf8abcec00f09a0338eefdba318221ec0e050ca"
+ "d1a85c3f76b784c6e8c18da2b062f333eeff18b7b781e67d6d0a4368b8231a892e0f4103"
+ "012348e5df53ac745e4d34e2cd1ee9369f97d4801ff485fc144b2007008036bbc07cb1c3"
+ "02a00054b54f3713919191e1d5052978c9c2895e",
+ "0c08ed8e0e0f8b0d0714b46a2164b933f8147692f18da97e5a108c44d5a5cf221cb50536"
+ "e41832b83bff4026c6df156386235cf5e3e9a67b7cf9b2fa7707c5e0ff33a91601b8e34",
+ "0402d516bdd1914c83aec1cb242710ed79efa61cbb31dcf8d238d8f5e089158b2ee2bab4"
+ "07e01996a1621b1a869a98227c12296cc2a71c1ef2d0f26bd6614f2ac77008048abeedaf"
+ "cf0151474bef5965c455eb95ca2ffe1d589107dc251d22635f4a9fc7270358b64e4d2b81"
+ "666b60c4a5c49902b0fa9963197b22f90a09cab97007842816f64fc49e351710db849800"
+ "32",
+ "01125bde6086753b3bcf29b7d5a4fb0a8abffa6503b4f0b39960eba226062bdade57e4d7"
+ "3e8c1621792626203e83fd5c231a53b0ce10890881460802788d481f233466060f73359",
+ "199a1e40229786b966592ae6e275874ace23d5605d0c3371a4f9eca7ce4858927958bc1c"
+ "2780e9f2f79767c1c72117c79c408f972006841cb621837ac002cc6510e0432d99a1f64",
+ "17f4e5e23e494ef149e4abce2d8a1ab10e3e6c2cc93998fc63baed6565ed350b220b2828"
+ "55e2824f398ae76b8679201b43450f62237f6fec643ea659e6c86abc24a63d82d9bf219"},
+ {NID_sect571k1, NID_sha384,
+ "b2293b0a09f41decd9d8e637b1b08c2efe612f33c9c0beebb6e05033c6103b958f8aacd1"
+ "25d7c810b4c287349f5f922d2c6ed554be597fb8b3ba0e5a8c385ed8ae70d5ae19685298"
+ "f20e8d844fb5ad98db12ba7e5f45baed9045c3e86b3cac9bd55b614b82fd075954fc59bf"
+ "c6124cbd68edae988596575f379d8921b594c75d",
+ "144090a0ee38cfa21fabcc24d35139a99656911ad4f6dbffb77dbe74e7993edfa9fd63d2"
+ "c4f6bbdbc8ec21ba13c9f4a3576b5d6e3abeab5af5ac81b1f2bb6d4c42dde645d854d9c",
+ "040208729b3c7abadfc221cfad8be642588d5d1c20989fea731cfccef25886905e4b1e61"
+ "cf9548d89c24f5706f5243dc8aa7d5b2675c2c6d2755ce6a12e5b12c28a2cd9c597b7dac"
+ "b303db73ee445ffc0f6c77467f3add3b1e97061117e221687f5589a030f5248bb959bc2e"
+ "d98c9fb66da8679dea3949b77652dcf83ab9c50a00f6a9c22bd8d16e093b2deca4b0c759"
+ "6a",
+ "0adcadb26626eb9f8db9ae98c6808840b65d6f886a3f0c45f0b993a8bc62bb5c08dcd879"
+ "40dfef4f220f5e50234fba3a55e7127fcbb967ff78ce4fd6938a9bb653747116541cb85",
+ "18f7fb6ee028c3dd754d6e7b687560fa269b5a5fabb1d98529e0a27dc66bdb1ed79b7b5c"
+ "64fb71e767d9497b9255f26b8150b9903caedb25f51594f5b7ec2870515f701bd68faf5",
+ "09ca9519388402d5d96dd9ef2d4ebfd0ebcfa58bf8c1970d04851b2409671c9d5e4aa833"
+ "555df374469a4d277aab93b8df8d553399908c930f81c2d9769f1b30a13f61c02b16852"},
+ {NID_sect571k1, NID_sha384,
+ "acce54270252e7d9e983c08c993cd6b7e3caf482a9149036afe4665bd3d0662a68180471"
+ "87872862d5718b8ac063477f693caf1a9baa8bdf2f36d411a796f2b46ab56f66bc949242"
+ "29f8264016d6769c85d9bbb7d6bb042fefdb8fde1be026b86af2017aacfe38c97309b468"
+ "9b23fff94f1de880064f1d3ad9d74dc804c41f41",
+ "1df26b672b2e3617b6b6c631d3c6be0cb49c0a690de49643e0f416215bcdaefc03fa9c70"
+ "8471f1d87476d58c8f147517ec8a14aa945ef001fa01984d5c3d81f7083ea500558fef4",
+ "040767ca8fe8f3a7addf01b230b99499b33c83db95db05e1956fb1891fed60406865291d"
+ "79b0daca0c307a3ec8b1bf2ac2cbab728c6ec65c013e01775ee21a29305e9403f72883a1"
+ "3800acfb786b09e5185dbd8abf831d12967107dc57a040d7c800d904b530eed1e19a8e52"
+ "e653fe8bb824cc424d7254532d0fee62e8ee7ce8e871cbf6e4ca3bc040444585b9a4e397"
+ "cc",
+ "13e5e47048122c8301258c638bc0f00f8f9646cba927335535f68f4f4f51f23ac5398ecc"
+ "21eb0bfe8fa6a2084e11fe67587bfa791cfbe2527797a4d98046f9df37662cb7e86a5a7",
+ "164b3500ad14063101b6c5ebabba53dc5acb4d6771d3b05a505e6a67727ca8ff73d996e1"
+ "329c0f6d8f738237ee0f0be415003e2db515ef93931e09bdd853b9497826929eac9e9a8",
+ "06b65511990c061a6d2a97fe2a5053c775ce2bc5471865abb7261d0436a04b79baf41a0a"
+ "852a57600cd4c6a114b3a8466f721a684aac2592640bc149980545daa271fa9b146f2fd"},
+ {NID_sect571k1, NID_sha384,
+ "e25274ded4840df0d71d3369007118f002b83e2d375c78f7e29ade067db15cce21842611"
+ "f3f015db2efec57da77cb9d16eb1e00a8c1444d48dfda569e29fca1ebf40a22fc646a9fd"
+ "44460f0e473bde487634bfbdac2c312f66a1c2982c6fe76c54ac72b6c8cc9345e47cb319"
+ "a974b3cc4bb40634df74b4ad7e18adfa9a71ddd5",
+ "189918b832e9fa30161fdd927bfc267f6405335df3d66d225e17173af52a671138883bcb"
+ "94c4403ca3e001fcf09ef4c6488934d6775af2b1da30a8f331579af2d0fbb530298d8f9",
+ "04053e6b43c0551f32b7b34467d188985600c5c0ed12448f2e763609f40039f92002bc8e"
+ "70d8dd3e337c3507fc996a1557d5f2fb3132507e49ce653482cdc86f6ca5903b77fa1619"
+ "d904a9ac78a2c23be0841b96cdb1d55862e4854b530f1fa3f469ba9f7185e3f91c28d03c"
+ "27d9666345bdbc7a44764595b303f49cc43bc2d0e944862913d280273cfd00e15b6b55f8"
+ "5b",
+ "0b47a185140b583c330c64a10d50748e019134bacf153cb4a23753f140a4d607d5771a8f"
+ "0f535f9c35baae5ab6c37a55f38acd12f15be18d5bd9662383b30e4d0ce487e8cb553e9",
+ "1a2ae62cc9560590177aa544945377ff6ab1b34e7e32a25140f99996c130e17001563664"
+ "7756a5e8522c936eb1389c206ac74c012941269165f3772373047521f69510c7f3e6acf",
+ "1d86f4a6ab2bba7f6305c2df754652bad40d7c273ba2aadfbbe65c07ede4ac0e65fc0a37"
+ "a0139a6ecab296f58c6c2532701bb008bd9e1ecac2771d9384aca094537fcab47f3ef06"},
+ {NID_sect571k1, NID_sha384,
+ "d8a4aed87c316012482819b03a1d91691f2ad11a2f46082497ea8f64880d686891f7da55"
+ "0b2ac17199c657d4eb9d04d5cb8eaa180f743b87d23b1c86103f9e9bb60f4e19f0ff9d16"
+ "0f180aed7735130c03adb62502e69be5c624ed7bda2301f30580ae0921b02e103a638f56"
+ "23c02c186e3bfe6ff134c762a2bcac1f879a9353",
+ "0bdcc175eca3a399b944eb0334ff33c4fd130999c8ac0e7b52ac5b774fbad53ccc3a3102"
+ "4f5262b2eecfeb2104b14bb244307effe3dbe8ed25686dbf46a42c4b6f8e34010ad826a",
+ "0407ab1a9279a8408828c2bd21ae6c643ad82633d636d36fd91498cfee49c8a635313f56"
+ "993d02cc46da3f5b78fd243516cd23c14a4c8d79cf27dfcb05f52f0cee59cad5646a9389"
+ "b80799beb1ada93a48819ab70b74c36d2dcc3c5cca1f7a57ec58e643924c3ceb7a90c9cd"
+ "9bf7ec762a2c428d16ef431a45cd5d069cd828601f903cb0a28182af2392b5ad12ac3a24"
+ "c6",
+ "04ad8d2759df82dd70ebe9f3402d3d533a1b4635dfd0024deeee52b32373550f550b9fd4"
+ "126aaa6c3a9b1f352c40c86e13f78e259abb17f85f0041e0cca9e2ae59f4ee3ba2fbc83",
+ "1cf9ce41dd5dbc3bee9f46f82e4bef10cefe79a87e8e00d002097045b9acd46364560e0f"
+ "d27b0be6655e73b5cff272c8764b4c80ce0e1c91a94b8d05209a28b553f589ee2fa1b11",
+ "149fe587b144c37df2c48c2b7749c509421cfebab734003e51383cfb773c3ef5a24fbac0"
+ "255cb807f5b95607121c5848d3f9656227b61d5a14042351de084d9b88745be242b6158"},
+ {NID_sect571k1, NID_sha384,
+ "acbaa5ffc4eee0850075c0e502a70cc7a897a919f5e7bca4e798385601a26f411fdae546"
+ "6ba9f6b6d8d7f819a749b799fbf4a3bda9105063e74914e8583ed8b31ea4d22164bee6f1"
+ "4bf53afca269b901c80cb3265be32ffd4ca4bc4ddb83e11eff82ead6d75dc4aec8e5c67f"
+ "35d58a8a156cd1c0351abdccc0c5396c8fbe6920",
+ "007ab5a55a1d8ecb7f5dca2afdf9ef465569a4b0374716f604ad42a6e0271e934b09655e"
+ "8e2529784b69b2894bb399b02aeeae30e9e7ae70a2a8e56b9e775bd978a04c728e3951e",
+ "0402df88e368c8162c1dcea5ceee3a4c52cfc8d6121eb81c31236ba26dfd1874c61586d2"
+ "daacd96cb5ebc7053be57641bf53bf2651cfacf370cf470db86e1470bf285c7166c197e0"
+ "94030067763f9fa6a9082ea16dcbf53c2b6f11c9ba1817198e5a4e189dd98141ab682ba4"
+ "de0b3f873ae54efc080a2a03f755efeba3c0ade8ea67228b1a5a11d730302f1eb7c6bc37"
+ "37",
+ "0d3dd75ec61e0f87737812fe1ac86ba336b1512bb9f7ceac2c7d1a5b4d5dbafca57a5209"
+ "028cef9468ebdacb2a35988531baa094a1c901d9650f2c5d8e03a1621fb33ea85e2b506",
+ "184a98dec91b9afe52d4dd6b2d9f2d7e3c42e8e614332080aafd2621136ac7965beb4e8f"
+ "97b222c1b2e5448b79534db4e710331a2f877f8fc2a9259129f0b24d24289495da22542",
+ "0fa384a04c4b0b0745abea373aabc09404a6037f302e234e7a2840ff39c2b86ae37c814e"
+ "8bf3f3f7cf743748f2b88d02d66a3adef2028de94013c07075fb73f00555aa900337149"},
+ {NID_sect571k1, NID_sha384,
+ "9a57b63a4f418404e8f5dcf3052b9bc04a4f6d2c33bde8651506d9cbc5542ffb9023292d"
+ "ea463111fb78913ccdcd182faabbff9164219b8900c7f9fb394f7d9678f77b18f8d58526"
+ "ec64d7c1328953b983a7c416583e05a069cd76aefe26e5f5687b70abfbf9f58f052dc086"
+ "3b4fc3bef805cc3bb05bf76a83235af9d6adfe66",
+ "1e7d4da72b1d82e17a066fe387f2a0a7fa4c60ab993ee09710531789186077f2f32b42dd"
+ "da497d5fb57356383e1f96973df043307f0b6519430c3f0d40d62954032872fceb7dce9",
+ "04037c59e95132f0027f661511d1bedc3018bffa62aad7f44d7370f5b169d683882fca3d"
+ "d0c4260fa8f72a47a44fb0fdcf0d7776ff0632378022bdd223753c66f98dc04904344ac7"
+ "4102d7f19468b8e4f32eeeaabd6e402a35f38dbb9f2476cf07881d8bcff170b0a6e1ff8c"
+ "b1bfdcaff734a32ae9bf34a909ae7fee689e3f1ae777812a45dd46ce13fe648016353c6b"
+ "b7",
+ "18ad70fb9c5673e5a39b3a1655ff76eb84519555a6cd88e86a26f9448a54f04516c2449b"
+ "ab3f75e74a8d15c69926ac43fe01ebbe7e1c97e73870e3cc4c0ca431cf614f35659e3eb",
+ "12abdbfb2eb08e326289fdf5615057d912749db4f17848c1ac73bf6a51fbe3e1b2732d4e"
+ "b656715a6c459c6c3065b67b577f21b8eaca7d657c3b3171e8a4849f55024c69487e50d",
+ "09609da5049092e0aa8ebcf10c204de54c968b09b9bfb3eff90b80bc675d557967b35f52"
+ "e459f37fd198a83a858e5d7f9f5aff8b2ef7272b236dba5857e88515ed471a60bf6da49"},
+ {NID_sect571k1, NID_sha512,
+ "97b79c76d9c637f51294369e0bb52c4189f2fd3bd0607f91834aa71b3555605a89ff68e8"
+ "4fb5bda603f502f620e14e8b0c7affefafa2f0b303009ee99653ae4550a05315e551dd12"
+ "a4d8328279b8150d030b03c5650ed4f8d3ba7c3a5361f472f436b200b321e7863c771e20"
+ "ddd7bdf739c51de3676f953a5501e4477aed1bd8",
+ "15b7271d4319db5743119c8103a7d4c6d57e9c62f3eb93762156d2ebd159980aa57cea94"
+ "8e416717d715a2e458851f1b2e9ad4172bbcc53861db29c3ee0ba8e82617a5866170847",
+ "04003a5b9559b2058299161770166766aa65e151ac6a22a90205afd27de5eb99c5b1db36"
+ "9ad52f09141d3bf08884b96414c283b2669ec2a2a60c960a2f03d425dc4c229c0bb369d9"
+ "0f0024f3a9cf3dd257043dceefe6617a98e222e1cc820f3e19e63c64fdcf7ce8d9c7af73"
+ "23c9aaaef4df02e498597581082fa3767c8a38f508f4ca2c1eed6f298dc8142668a00274"
+ "90",
+ "0c585e425ae4a34f9b7b9205f095ea07599716f1eab1a8bbd934219ad760c4606ebbeb06"
+ "cbfd3952e045a040b8ce20603aea4f965d1b6e87eac7a61672823fb2de7767e3466c730",
+ "129162cce6fb05e1fc8630ec6c3a16d108bcd251719d89631497177e6fe6d1373f114ad9"
+ "dde6e04a4ee0b4747f91c78703012e5a058c132d54f2ccccfc0f9326b27d60322b497e4",
+ "140163edb5f3c4b49228e4614bfc6da9f73674eab82678ad9947b2a635f733dbce99ce32"
+ "09f613e2a75e62ed84db4d7d13de6d789b7cfedc0cb6a028d8316db8831db66c91791c5"},
+ {NID_sect571k1, NID_sha512,
+ "564ad0e37c9c37a60872a4780a723d08d1159ddc77bd834d74c1025cdf3cbd5338c3fc07"
+ "a904fcad9b979b2a2ceb1a0139af35e5112305fd662a57af6312624b9bdd3a64849f95f5"
+ "9a46ca8feb2ed56f87f258518947474c1729275c4d89b7dd286ed65f286cbac76002cc63"
+ "b92a73ab6bd13c4adef282f32297e441bdd8fd36",
+ "07219ea7917d174a5386df985d0dca798ac9f8e215ab2f0003aee929a2dbd91e37fedead"
+ "0ed95b1e8aabcf516bdf54337b4aff7ace4c6b3179f2e919a49db50a41c9d4d58d4f636",
+ "0402fd7f6ea770e0a6f1eeb3318b6b609c0e76ffeaa34e75f56910e8f658b70940cd7a59"
+ "18328473b279f882816955b2e3702c22e0b3e03863f8d99c64f3a2c9d1c68f59a28eaf25"
+ "ad06c2cca84218aa019326cadae9639069dd27df4d1e95a4c8e7d7cb426e70e2d38650b3"
+ "82e325dc3835afa719145d16a29e4ff67de37ac8949641f0d140072f59718450a6699732"
+ "06",
+ "03413376b32f18385cced4549e231e514eadfe05fffa0b252732f5c88d13d9c6e0c35be3"
+ "dbf72029be5e4573b8f8829f6efbf58a12b5c161bb7055d1944eecc93f82c12c5c56d9e",
+ "1c45c25f3e8eef9b92142f12e4119842122ed7672fdd82c14b3c34ade3243a4c50495c06"
+ "b5984d0260376c4fa44c60b2e34b0084066d693943071bb663a44884927352668efcc62",
+ "08cdac0f4498173bf4e59de98ac9a26fc2c752cfea7a5b75141d4e1d019e25d70a717ac3"
+ "ebb82884436ebe1007b0488c4ff29fa31fdf02f77fd99535c99b69c9d4e5f432516da77"},
+ {NID_sect571k1, NID_sha512,
+ "072ed5b14754fddaf54e20da42432df49bef38f4a3b1841b2db457ff86c44880727aca94"
+ "5770adb41269df41fc17f6a687bcaffaa45a3e59070526ed53b8dc3b78cf9a80a85461ea"
+ "f4b477e44d5ec4c2bab9c05aa747a5a520b35fd09e8b44539d060ba1c3470267e0dda111"
+ "b15dbb587614a46e1e477127f963a16cf3a43ee5",
+ "0bc623152253da24bf8d752bd78aedf7d5f6a2f889453ccdec14e10753335ea8bea83fd1"
+ "81a1f3680ed50f2324fbeaadae160cc85831750e021f3e44121ea1b1efc29a7d0069479",
+ "040003f3a6cc6964ab2f6da95c0a2a7b75afe4f77faff16fa28aa67809afd9495cde1f5d"
+ "ce079ec4e15ec8c1a2095a12e8adc409fe8729d865f50ff31ee75d7d807afd2c15cb142b"
+ "e9076b15c1ce931ba06dd56dd8e4f544425fba4f37f951a188c8e7eb13a2850c93b8ce60"
+ "f10b3783647a2d053e2764a957656a184a385e95c2013685d4954a2b2aa20e4a15dbc43b"
+ "78",
+ "1e091f4febd694879f78e83842572280daa48db65c463e66d9a7ea57b82fda531f116800"
+ "530a03cef2cf7e5be5eeb6e420213ff757c27b8e8a94513e417f4acc62adc02a76a4fdd",
+ "0264c499f7daa6ccaaf191d3502e86458ef088c9bf2ad989851c221364b24a1a3f4404fb"
+ "d0eb44a41938ac6ab67002faba0bdde7f44ffe6bc10def8317c4e2807c3ca711cb6cd33",
+ "1b91c18fc55635c5e3cff70503e7a49572ba52b11bac193230c88d6eb65eff6b2d9a01f5"
+ "3ab0eb34f5e208538136811157f872a8255b4d249b6ffe021b0c0763cde4d7a7e72b0b3"},
+ {NID_sect571k1, NID_sha512,
+ "e660dbdf3e61af39b83b95d3f1970f66d616f03273f7dddb98f768452b21cd39604a31cf"
+ "80590d4a5e4b0d4917519e10fd325dd4ab7a52d70d154506329baefe0d5816f514ae1094"
+ "83122b4fa8fa1ebd7fdf1fc4e21e8d278a50c05d81c8f489596633d949c6c8fea96fe914"
+ "30c01522a5afbd5042be8aa47da04581b2bd21cc",
+ "0645947d981d258f2954558c31022a3b6ba5fa7b675312f794cb61bfff1d9ce87267e4a1"
+ "dacb7c8fc58624d31c85ebe22f80d26a620fed5df5bf38515e0903f0b69a606048197d8",
+ "0402d03e05c4b555943fd69a299249e7148e99633b286da69bbcda64e7b06ce9321d62be"
+ "ad7b8d095a68d9a3ab9e9cf1aeb1d8c4904a073c21806830451a79fe7a907b32df15ea45"
+ "67023cba4f6f1815cbe1934734a901206596c6f482011f6cb6d452329f9412d2ef456642"
+ "9e7d35f2d247eaa7849ee141bb16914b64920fffe6b7923cfb19759fed6e1f80d6c40a0a"
+ "e5",
+ "18955bb752f0af7d7aaccd0628dcf1f52d836fb91dc78b0fecf21ff5992d9c1f891f0eb3"
+ "c139803b88736ce10ba4733a523854c4ae9ac35421beff9b20e0c8daf90bece46737579",
+ "110a428aa96277c9a13d4529f58ecc57cd7209a7340b4a78694dd9ec800f36c9c306221f"
+ "a110e0b3fd65b9dcb67307b7d7678997a3143c04ba96d72be83a1cd6b01ef22acd0f82c",
+ "0b7ae2da5cd36006a92a5b2e6369afc2728a93edc845ccb1500e551be361f8658819f7d3"
+ "eb82ad41d7f2beea1a1cab6f103238a6025acbf03a2b08339841694022c17db8c6c6886"},
+ {NID_sect571k1, NID_sha512,
+ "8c9acbdc431565feae60e08bc7da113e12372ed373f1e1fdd581f98c8a7b0c79ac4aa42c"
+ "7ffbc963fb4970fe26c5b5dd314b7051fe971c1186ebcb5650f7f7011a924de893f06961"
+ "b8c75da7bff331847feead4abd2e8b9d6ecbedac18f4eac207b948e6e4215e4d5cb483e5"
+ "c66ce7ad788cb89604d3a3e051539094079e7bdb",
+ "14cf93ca69d94ee8fbea0c8da9d76aea092b73073d8f5385b65c6dd4d567fe86bc2cfb8e"
+ "8be890c3c6cd9abf7dc3a17eaecee3d7a9455887863e496c48dc3e47821bd3d825b6bed",
+ "0403dfd1fac02ac4bd3e3017a3d94f29575238937824f80ba0b2eec185ce8c641e9fc721"
+ "94323c779dde8c4fd6e748e09d66e82c82add75106a0e1739f2b977d40ecd3cb15a1eca4"
+ "2006a73dd31226adba7ed8d08476b5af10a806fe8de72251400a83f6c9f6edf5e0cd6bd1"
+ "fa8f3595c3ab32b4c4548729c455e4eaf83230e1335cf181cfea6b6bfa6cd4ad75ac3278"
+ "cf",
+ "176972d9402d5d6c9753532e5ea907f256a872c100f87bd390c4d610bc00c408a97bd55d"
+ "ff2de1ef2fa8b9716e33a5a39bb6ed2ab541848685040656ad0468b360f42c3742c1fd0",
+ "00be28427524a3b0979cd82fea407463647a77ac45c489744a9998b545a13516abb9213a"
+ "b0d89a2f5f872d927ad48dfa502de95524f94f34b174933f3faa7b554a1c2c3a688a0ed",
+ "1d49594454516c1876f23f2ba0b1fa4dd8bee028bed5524b7635a2df5b8459f4832b3db5"
+ "f6074cf07c169cbfd9099a85ec2f5c42043c5b851c81a71c87affba34b11eda67e0ab69"},
+ {NID_sect571k1, NID_sha512,
+ "53ef87d6ac7b9698f40b3ea9f3442e7b64207b140b7f66f73fb7d5f8f98452d30a4e493b"
+ "6c0e3268371e88e612b818d4d847f032ed4983817d020411a52d81fd2a17b58ebdec199d"
+ "817c2a8ba77042bbd747a6fd4bcc7e844ea829fd8461b389aa0b5957d92962b6d4e86385"
+ "a8fbca90b8fac40944607117e9a4ef6dccb8fc1e",
+ "033feeaaaa28f16bfaf5ea9c7319cf4561ba4fc55327a8477b6cd58ef6ccad3962ee1f3e"
+ "db243f3a04e7e49c8e23509fa2d63252adb186b8bc7e9255cd61fa9bc45242d42da3a68",
+ "0406fc62c39bdd41ef7083ae10dad59e38dad217c55864a55a6a80bffe2f5e7da977d79d"
+ "b9ed8c9ac22d6f096129a0c680ac93fd77da4ad96e292a19b48454f91c93a3132559fecf"
+ "07066f1f737ad3af3df674637aa5efbb844bbc441966bae73973481628e5c2c67cb74553"
+ "a7c8f2c5fc478edd8265bd6c99d6ce122a245e46fbfc21992b950f04cbda5eb220261316"
+ "c5",
+ "0a5b86b76f98310a25111cc3d1b0b70fd0c20208cd0bfd8007cb569a187c3a97edd8e716"
+ "aac938900c3ad8ed3a0d091a18555ab532b50f25184454d84af2beafadf754862b8ec74",
+ "0de2eade32f537727eeb82dce610b48106b277d15d8fbdb77cd312ab9983ab21bed05f05"
+ "186a5cb2b530ba72c8c68b768c26d942f9224c6e6b9e7827c48e129833cb679c70aeb29",
+ "15e4fb92190bbf8dcf7548057d1bd5e5ec54a6edf54f6b88f50e96ac87ed7a7b7c0fe1e1"
+ "174ba3e822fb7e7c083948296cdcdcfbdc4bde036a07f84d210001ded91c554ace71efe"},
+ {NID_sect571k1, NID_sha512,
+ "dca1b7a9a313ead11c2d54739d9017ae27f9d08b3544e418aee862bb57e427636cb6aedd"
+ "a28e10f12aa15d2355f4f8ef112a86fec5dc46e6acef693cb8fc37c3e4885f3be3d3ab31"
+ "ea4d73a0de904e95c7135a149f77b621d642f9bd8ba192d39cfc58b6f19a797c4f3b4f3a"
+ "87054298e3ce5eda0ff7f44f8134c9a108285dfa",
+ "05613dfb53149bf5fdc4e08ccc1c752b0b66ab43aef2d008ed40f3df40fcbb2938d2c41e"
+ "3ea2dd4428aeba9059a97efe5593119673866a19d27a2ee37dd357e22b6bc849e7e22cc",
+ "0407ef12ccf6b64c7ca64b5da45937281ec770ede572b9a8eb685f3614bc358ce550195e"
+ "74666af9bb54379c1fe1304b76430d1e51a9976bba02e5781154c9bc187a31201ad99cb4"
+ "8e043d4ca20f06b26d75be1454e96f0568bd740165a2bc6e5b8429d557a79666bb7b9cfa"
+ "597d392cc5b8ecd180c37f9fe2088d7908e59ff644ab05568d974ab42ec9e01676e1b241"
+ "69",
+ "10b4b67007af35942216e9aab1d6561bf7684f334a80c7d909a6154cfde8ef06a148af10"
+ "4d534d7dda59b5cec7949de4086ae669edcc4d68b88347d2445edd3037525c97564ce78",
+ "15bfb47a27c6970fbb3256410d5c2f6c04eb308569a966790636899fdb3122f9e3015455"
+ "c4b50a6bd8cf519afc22ea845794f51e6994214feacf48322af48590d02cc9812960917",
+ "090c61f6c64381845491dac81d5273d58c59d9cfeed214527a52c8f23b0146431692a25c"
+ "bfd77abba22d4bc61ef24093c593c827ef645853bc8deef7c3b07bae919152b90c17f4d"},
+ {NID_sect571k1, NID_sha512,
+ "aff61d62c8f5c31bbb7d0a64a6ac589e918bbf2f13e7ad13abb9ac26405e267249a7c992"
+ "2139bc28140833e10976b87e91cf28285274b2b48b63d24ac94c85c70fafa78f8ad05955"
+ "c0ce6c02b841ee196dab12306e3e3d6138371217e2b474f7e67a80bbb78a47e374ffe2c9"
+ "f86292e471c551da50d46e7b5c8331029f369767",
+ "11b92c8b72b86c51903387a65aa206988d443d1988253329ad3a89c902ff1ef8cf73b7f2"
+ "e4aaa352443bcb833712d94c3e637ec12cbe4c2d4606878576b17fae1512fc77785b737",
+ "04022440b63bb4557996b63faf19d9f391c5085cdc2cda3755622a6cedc676222ceb5a56"
+ "ec36e220e507973c0f07e4b2e2d565a69967804ad311f0658a9854b1eddfb5270f4a86b7"
+ "69050199c9e443555123f153249cf7256dc3e82c5d8cb611adca0cd4fbb0a9a90296bfa7"
+ "70c1b0c0b43e4363b0227273a9ec9f00ecf83afc605b0dd2e5e24f739dd0b4ef6bb11950"
+ "a0",
+ "0e5ebd85f5fd9a9a81067fdf51b1906023e68672d160ddcedeb35787688dcdc314359ff5"
+ "347907b685a718ce38a69be17de292eaef189fb9ee8c63271bd6818904cd246503dd227",
+ "051387b0d057985dce86cb962bbca7d9a047f70d96c20539ae7d6b7cb8bffff606f03b83"
+ "15f15a53049c6c1c227f86d395c2217d32aec32bbd406c790a6cd2706775ed8a0ba1ebe",
+ "0c7f3b7e4a8b65a58c1280110f6c2486cd2d2df7d48b49074e98accdfca4a72fa7d43bc2"
+ "5c6576279f4a70f22c98135ba79158bcc3452940963b556304da8e1ae88973d827bee32"},
+ {NID_sect571k1, NID_sha512,
+ "721017294f17ef351e41256b57a64a79f3636628c4bcbe676ac9a2d96076b913dc4b246c"
+ "9945183ec9bd2d251441b5101eac44e2fa1bef59dec03ccd7fa5accf3b7d094d68dcf78c"
+ "8de4e2f19f56bf0dcb3b66b9421ec3f8b353b9fd74feb2e9affe0bf9aa421b6f03eeba3f"
+ "fd58fba56b3ebd094880e50de01ee62a108a24cf",
+ "0c3c90d5ce4375a08b85575faa78ee6bbd9e5571ce5a90582042617b807339c282cdc3b0"
+ "03d82006264b1c08c20af4ad4549fbde53d262facb98d923d81b8eb6093374b6a1e84cb",
+ "0401d900b4f64c07cb959049f2bfa18012f9bc2dccec5a73e9a48a9d5d65499e31ec4a16"
+ "15c4c50177c032d388263eba1a90e07ea68f081e10272e88a41389bd2626961b646c76ed"
+ "8e05c094fedfb5b118accd64d5d46ca2ed92b3123a62042a556ffee9e3bf709092fff882"
+ "31a26917d368db51d1959ad3285c7faac16ca57677651b070aa0abad96f07d35c5fb8a0e"
+ "e0",
+ "14d4070307cd269cc1a3c048ec0847edbff46f64c1ba5b734d8a800e50a0a02af57cf247"
+ "50d292e2c247ef1b860a9d7b5069a32f5b0546fe9e019e04af62316eb79507281fbef6d",
+ "1cda7f743c47ae93a9fa533145feab4c46252afabe3d54990663b5891b4979c645ccaa05"
+ "c744420ed6fa235952f370f5aa187250d7b069aea1123f19f0f18da18fde98100ff6ff0",
+ "180b4163f2eba6e3769d8345dd8cb003ea120164442efa885eda5bacd75f8d705b7f1bae"
+ "2976f67cdfe984430e36f93455ee7528fa6febfe92e42a002da165c63dba8fc589e7851"},
+ {NID_sect571k1, NID_sha512,
+ "e2d1f33681759adb7954bb5248b0db3c3885fea0d4c1c0c226eb1e6d2d3ef1b9ac281a0f"
+ "1c2fe5175b67114b6a501e2426d1454bd5790dcbc4c232cf06b017de8a9bb39e6033f1ed"
+ "b5003e8de3b44cc3d6150c3c952afb442952483cc688908337b7c1a8b5c9da70937ccfa9"
+ "8b2b0098c530ff848010b8e8ee0a8d65283481a8",
+ "10f184c16228d9034271332178ed485d10b6aa76003efc160d63fea26fbbdf5552205ac7"
+ "df0d8c852a1210cf0ba512f20b798827b36ad56b12a826fa7dc1db45aed264ca6822659",
+ "0402637543ed8a11271bbbabb2cf72999f65df0104758c2fd6fbf3e1c5132ff1c1111fa5"
+ "504ee86bed8f219d5025f8ae07055a7849314d2d439408ea2b2ddc40320c57f5d41255d0"
+ "a6014e360137ae33ce6930b844d42bcda4050b25f349e9e19fc4fe82f5e4f73cf9bb5021"
+ "2ea875a5735faaa1d5494f1685d6c8177448dbf356b408ffc2ba0726c9befb9de9f0cebe"
+ "32",
+ "1146574a96394c82972eed1ab7ec98bd08f27653c565f0626fecb431ee4fc6f830554df3"
+ "5fa62b5f82eaad49524d3d4b0598cc7a2181ce9860e271812373d21be9536fc181c3f12",
+ "0dbf465de2c5242fb527f6e4a4188adb96a2030ed8417cd9431365173f569bfdd3e420f8"
+ "6947da10a703370d7f38dc43e2249a2476690829545992645c9c83d82af8adae893780d",
+ "1499782e0163f80de68e3a580ed08fdec8d6552ec69f186a74be89480be28a0df6acdf7c"
+ "65a72f115f8a59fbc28bb94af64cb3bb3cab20bd25265237a010370d9a5c781c1e26f3c"},
+ {NID_sect571k1, NID_sha512,
+ "414fc5d2bd56b30040e105cb891788792da595583b11b8fcc7320f40dbf64d9263532dc5"
+ "7344dd17573c95eedf851668b5d552e8796af205f3a0043af1a829fabc2e93d9af9091fd"
+ "d9e0fcbcc9d6d9ec960aa60e4e2964c29a2f375400366480e513f63d124db7745847310e"
+ "69a38c8455e4e602056a6a4a14a8694155e0a9bf",
+ "181baf9d497159f837cba58a11ca435c442e5ca792ea559bff9f6a1f562c05bf6bb5914a"
+ "fbd1bcaea75b35f88bdd832314b249a5298622c89462344d3f28a44ba3d059df432fc71",
+ "0406f3915f884e250034db97327470197d13f0716d1d810e43055757460dc252f5281717"
+ "b3ef3fdd51085e65a0e073e78b697a21bc33137213981fc05d9b34caf7dca7a4f99be785"
+ "96047a96ab5ebec6201b7c65ce7a6e70effeaeea1c095a0172e9e2c7bfc88f7b05ea5750"
+ "76caeab189f810258373cff2484f4fb9c8167989f61aa61ae27113b5140c95f7faa505d2"
+ "d0",
+ "10e9e6047651362accc816389b26ea6befb0e34fe7363126f8c4ff9333266f46d63c4d45"
+ "075480da9ebdd0f8da7224b470d914ea1d68cd821f563b574bdeffdd0b3ed73ecb9133a",
+ "00e36644cf0861f45b333092d44fdd99f56e89bf3607f75a06920dfab0ccb1831208296a"
+ "a2431bdb75c5d50f15bbea2e13d185db6d7175c221858fd2b22afbeca7431c290b15d3f",
+ "023ee3b9ce817eb0a6733c85062cc3bc5f1ae62bdf3a74e3ec704baab05784dbb5ed01a6"
+ "a2a73c80a3e754c013ba886108d9eed2bc210f29a4774bfe5508ecd876ab47a8527c530"},
+ {NID_sect571k1, NID_sha512,
+ "3b592cc8972a4782870e079b82a50f84b4c2d8ca90bd500d1ce5678982e266c391c556d8"
+ "162ac3aab967154d072dbc0ba1dab5545cf2651753dee2881eca5abd412fe624bf3f9d17"
+ "d33692d21ce23ad15ccffdfd250cb1949e73c9e40a64ebebb03852e92692dad1d7baef97"
+ "fe109f35b7a492b343d4b643a4a7b1723eaecb64",
+ "083fae86ab96bce99a53e50b7eecff38e4e25b21c4b0f6a4986915de245eae24f16b6a00"
+ "a4db159ebc27f5a6a072da94ab6be5bf75f5eb3f75c4452bf4ea7014392eb1e02706fb4",
+ "04078003779e0287bee54df31f64c58951df7999b48b647a6bac416f844485a4cd7a53a6"
+ "4170f9d2d31fdef0194a0c262b90e5bd33a1782d2ad56c210cf80abb5fb118cffd71ad79"
+ "c1073f89ebdf0e255205a7525cc12b7e1c58303ac3b3417183179c216ab8e47f33d0af32"
+ "38e3ae64d418ee89ef3a2cb4bc67a1d2fb1923947b9dbf3f4fa39ff82327d0ce3db24d23"
+ "24",
+ "13d126fc4033f537b00a81372031026f6a7a2062863a68e36c6909c548833d1a8f5fb5fe"
+ "25c7d9f2c65b1dfa974630204f71e96d657095b93cb54b00cb88f32adc08eeff4036654",
+ "09be9f4bcd7b8ef111337fb665379509b8b17a2212a80d5fecc685f1f362c45f930acaef"
+ "9df47c33c6028cf7aae424264575b4635a11edd6b005ad26cf2021051501fdd1b77d2dd",
+ "0dd196343ef76bec527c5929e02fbd5d02d5b0a4b5f2c8561978e600856de56d42943f1d"
+ "74cb81b67010bae98de0efddfcddea5d354c60c1fa76138801f6cdc5bc932c136309b6c"},
+ {NID_sect571k1, NID_sha512,
+ "0079a02cbab3dc02601fcb5c8607d555beef7cd71a66911ab6514a4ae21c5a9c0e166f8c"
+ "f5fb198ec5a49a96e17cf041f35f00406b79270ebfe56dc6b8417d2529fd625686ffbc8f"
+ "69685aefa2fd30a937c02f25b48be4679e6fde821de928b33b12470867def874bb8c7c80"
+ "38ab6594346a2c44b39210d3610994ba60a05e06",
+ "1a663efa7bf4d8479bc535fad71e9b5e4f4281aec55967baa008ba17ac2f89cc3398d305"
+ "73edef29d590fddce8cb157f655e92779f59e7a18d0327d02e7daf4c1216143b3688fed",
+ "0406b4bb31856dc516be60a0d2d9f42508738edd4f925eca9c72a13cf136720867babb38"
+ "622fe97df70a1edb35735365f34c74baef9aca539aa1dfdead3324f41a16ca69bdf86b43"
+ "f706c4a91d3fac9e7647a6aec6e4369158bdcca2275866bcdc5a09b2f0f1eba10551da96"
+ "13eeb1e8d3233316b62a5f4641d6aaf669b975dfc511f2437d43c9eebe53c5115fb4741b"
+ "80",
+ "0a843d0cf776878fa9ceb163d7aaebd29ba3aea0808c3459036b258b99ccae4e2444bc32"
+ "11b5898c0769b7d7e036c07803497e13803132b3c6301412af3be8eb4a853e939a247a7",
+ "00356e282c096fe1690fdac4c0c66eda155ec42356dfc4783cff0160e1d76b33a99442d4"
+ "ee0e3f6e1c5bde4a16c8e18bd18f98a178c3fa4a560d8fb8b4b1d72663576f8baf8672f",
+ "0c5018c1383fc3847819726e1e940028892e1abd164b413293fe50f219f2059105218e4e"
+ "3b952b912a3258c4ae52dcc03ac5f027fdfa448a8d58e3aa5c21e790b3b47bdfbf21175"},
+ {NID_sect571k1, NID_sha512,
+ "88573bd94ef50459814806efa868ebf92b066fbc2f7a4be9d2fa06b9dc1a72f72d783a6b"
+ "cbc107b18a6314511bff217037a2252e7a5cd34cf9d5b2fe9c7846931f0133b2e95876cb"
+ "800dc4ed7c4a4e4cc4f1195acf99fb0ec224b1f8fa8af71f72d390eca9d6be3879032a31"
+ "8734a63fec336c79035a43f70271def10c4955d3",
+ "0088d1a2c0219696a94337cd56516252b74139ea0733b17fdcbf7692c3e5f6c3989e5da2"
+ "aaed7468e65a5d578571928ca273ec3b6aa72cd196f560f05095cdc8346e5d31c4c2e0c",
+ "040357801cec0888461ffde22d83afa9ca008ac88518f4b09074d29a846f5900e024a8e5"
+ "947bc25ed0e5c980a58fd5e9aadfbfab31db8bec575fe886deda80134d91b3de96254653"
+ "020710806c7ed33f6879374c59ea144326f5948980c8013144345c5070122c0ddb7e18e9"
+ "f752eadf2a9b0854dfb7d9b2f0d80ff0ba46197ce6017885939e9f59b642a8fa41639ea7"
+ "5e",
+ "16940f69013026bafb6f400c037272176b04e35e9f1563d382dc9982968a186e3e152577"
+ "5d27150b34b8ce5e70b537f0149ce1a521d056b52e75da7e39ee8a529ed987c70b8234d",
+ "199058e36449ee1a3388d7357c9c1020b2e4c02144aea14b041bc584a752c94fb6e47495"
+ "9b24bd2c0c104f5ecfe223ebdede672298c29195033aaad5db1852ce4dc3185ba2409a6",
+ "11f3defd9b442378c461e2c68b239d2e4afaed691238c5ac4e0be46ebd461639a60176f9"
+ "884133900f988e2d730d34df5e2bd8a14681014c0a213f8d233b3c50ae3064fc38d1a19"},
+ {NID_sect571k1, NID_sha512,
+ "d0e02045ece6e338cc8ab41d4a064c982ccb1748c48fc2fe0a6f10bdc876094358a6a90a"
+ "45facec798a83cc95c6795cf0f0d7c66b77e22cb114c1432bfdaa1485ff35b6a58107cac"
+ "3b7e58cb4f6c87c68db60b751e78f1fdfa54b8923b98caad0a4f31226956d065c083ace5"
+ "f1e9e91944dcca51879d782e40358d58ca758750",
+ "16cc8a0fd59455ed8d4de561fd518df2e008f7dfaa5f7f29ac2489a411e233917b43eb3e"
+ "be2596fc824be58871949545e667dbcf240dfb5e0c615ade0179d9ea2a1b1ebb8ab9384",
+ "0402477e678793593e2abe837961895c7ecef71af1feb882ff27cfbabfa0ba3ed771b792"
+ "23e7b2d2388efd371d5c325854cd60e48484f818e1a8146fbb780cd6ce06ba63c0db67df"
+ "8a001b696114838bb972ec6d536abd809d3a436650191c43b2bfeefab2b400d5921a7eb7"
+ "8e307266acc190e05f3869017f0a66f886bd6556c58aafb1042478cc768a4f86758e9f4c"
+ "32",
+ "1e1b851bb95d2913d6d35b756d49fba6f4c127dbed80fe4068260cab89c1d42f7a6843f7"
+ "31e83b379ccd8a4915d2e29550f3f6ccde607cd0b066dd5fa41ac2bf37bdcfc26cd4d04",
+ "10d4291346685fe070b267edad91154df83664dc115f058ea036c712929634d53662586b"
+ "b50cb6473c2170db5d4ee43be0c50532015937202e193d15d5189870691ba65aead7f3e",
+ "0b2a15f1ef00204bcfb5108d8f1da96ac3297aa041074b68989ff5b6b276380de7887753"
+ "fe3d416ba691ba0b2ad7fc065ace02815b2323fe17f6445b0fa66dba5d99d8e7d557cd5"},
+ {NID_sect233r1, NID_sha224,
+ "f1b67fde01e60e4bb7904d906e9436a330c5cb5721fd4e0a3c75b83dade868736bb1d21c"
+ "fb1b5c6407c373e386ee68ec2239b700e763728eb675a153b8ac44cf2a87be85fe8ed668"
+ "3430cf4b7d718891cbf8d583d0a37cc952cc25fe803a7aa4fda80f05541a2f1f2601cdd0"
+ "c095f7110f2a84f7d641b8531572269b21cbe77b",
+ "056673197bfeea9bd7a8b820b4ae51a50411bf118a692bb9ed3d304da53",
+ "04003489be62e53910c20cb508de019c3e326f65051f26749944b4454f156a00f775ac38"
+ "baf19499675725e8190aeea16f52346b1c890d9583b38c7521",
+ "0a6c9914a55ef763913273b062475fd0188eb2d5af9c8c1dd97cb3cefc3",
+ "08601a42d7f7eb047e8ed9820ddce665c7277f8ef38c880b57109b7160d",
+ "026d6f50f0508953657df5d753c595ffb8e1c19f8d092f8ce8db54f76d0"},
+ {NID_sect233r1, NID_sha224,
+ "1d496d96b533c632ed6a91f6e3653cdffaa5b8cc0008b35e49b2dd52fe261105c2ec7ee7"
+ "1a4ad5d51fdc3d36d688a3b7ccb3b3b0c3a65be17b8d8aa172e3005cfbf37a2d1b1a6e26"
+ "8c090c6f318e7e96f9ec9b9f5a8fbcc7558d89e840f7e76e44bed91c26ca48e6f5cbc253"
+ "ca2fe8cb81c484cabd24070e488f9c00cd96ad4f",
+ "0468f01d483144e514ec257f2e5fdee28a927f2adb19714c1f3524dd0d3",
+ "04016b3cad89cc42b80bb730431963526e26ae3b415b421575dfb6ed973e1701acaf7de0"
+ "6e20262efae01fc80969cdc1a281f68e8c8bc0d2d4fbba3a3d",
+ "04d261304678301985f5bb3f6ae465f11c9fe0e5031b31f194969252703",
+ "0878a87b2867c03f55726ea2a6db822788f4aa4e9ef609997940ee8c8b6",
+ "03545153f0554a8f55301d4b948043de3057cace62c8032c8ef8a11dbf8"},
+ {NID_sect233r1, NID_sha224,
+ "723400655027f474446843645757f7e2cd466bf97275067b4bc4c9d79bb3b19b2421835d"
+ "69db916f24b77c381fa771fc1e7a19d2b4d09411ae55acccc615b16fd24705762b441ab6"
+ "7083a921fd4ae569ce0de69449aa96f5b977ac7dc022fdc8335656853796f54b3fbd1185"
+ "77f98920624eb0a00204f1ef83827245c06646cc",
+ "074052d027f05465a8083a59cdbf32600224e1f563f653b34314651517f",
+ "04006999290db440eb5b3291bd4bb4a1af6386654fc4d275ef136c0e03dbca01fed0b1f9"
+ "284e488c7fa2a010766c340bc25dc132c7679c2598e423c3c6",
+ "06e38460379ac3fb13f64d4de654d4fa30bd8178da0bfc29fab2a1e2e39",
+ "01b18bafe55e5c24fa2df4c09112b44d24e78dd09557349ceb1b916d280",
+ "0ad7cfa003267a6b7a99894f75720cedc9cbf820d355a6b840709f42f62"},
+ {NID_sect233r1, NID_sha224,
+ "155860cb31a142082bcc0bad828d747e916392d21f1873b3a3c1d28ca3ff9d45ddb66a71"
+ "2e3856b6afd07c8d2b2a7badab296a9775b03f6fec0befa2d8d6d00fe3938df244ab46e8"
+ "36a3e686c8b4f918da49f0bb3940bba34a9aa22c7caf02df7758b0de01d9f47af6146344"
+ "b9be3842d9c055eaf0fb399cd8db95c544a62d8a",
+ "01856e7544223f55f80de72a6ef3822fa8fbd68eb397d06e2d76ddd35e0",
+ "0401a117e52f09080625f85fbaad8ebe0d3ad410f034242bf48365e88ff7350008b8bb79"
+ "58d191265901a3f15b2919142505efeea13df6e42da8b0dc1d",
+ "0aa106ad1461353865706bee9aa092b00fcf1b0108ecc1266ad5d8b6579",
+ "0bd6fcf49029df32fe0fa47f39cb9428d95d00a84a5afb392d7b4b365e0",
+ "0b17734befefebf03d1c79e59c12ed3c57e7d120dfd993bf276de559588"},
+ {NID_sect233r1, NID_sha224,
+ "cbd6e305cc9f0dc90caee6e65a74582e9357bd25c78e33a7b14e1ac7e9397ff4466f192f"
+ "b432143e6df6d61a0ab808ec0a361a6d95a357a38cd3e241fe03ed883ccc364b248ee2a0"
+ "8702110745c2688bdcefa33c1a45b9c8b200e45cddf3e3f66b8d37eff07fbb3366ea1558"
+ "ef304085613c56707095724b3e134c7a7d3f8dbf",
+ "0860aa2b589f2defc617be73e191502e5d9952bf60547fef19eeccbca26",
+ "04006abc5619422b7d548c612e54df0385c293632d4d97c21e2e15ad98d0c5006c36c072"
+ "603681c1b03f6a023c8e987f39d931bc2a200eff82239ee38f",
+ "084fb252dae9a96a44212d18e15cc52d179cd5e3392ab9da57d04cd5a9d",
+ "037cd554e7815699f033ca9187ddb116777ef847b92353f613152c4216b",
+ "05f806dd062043420dd056998bdb9822b3177406a536d766c4aacdeee81"},
+ {NID_sect233r1, NID_sha224,
+ "812a218ff1ee1472c189f63386e5b8ab341671c3a4dad27a8c6249d1c0f9a29338b471b6"
+ "179f17a078b6504e804ac55ca3b13e68a623041bc1a092ea2adf3fa1124bbfeb161e6d7c"
+ "483433f1548763b84da00352a6386e1339f674d45dab13898147ede468e0e01d2c4e0ed6"
+ "6b395a16cc3ded3e952ac739205f35a83376cbce",
+ "0d0dec052a00ccebd0c0c5d9a08272f75744a2582cec7ddd924a2b022b2",
+ "04016bb8c3d319b93731f1055756e57bd56d50b6b9ffbe42735925cf6f7675009dad7b87"
+ "a749df130b45d9cac8011101c15abb7e64bd4fbdd94107fa31",
+ "04098547601430c723ebcb04b23e0f1ce8b1f79ff7ed3d05ba130922b01",
+ "070ea6221c0d62930b019faaa856ad2c84c3989ec54040bffc42d8dadb8",
+ "0aa20fc58beae8ccc880e7fcb48a471faa5baeb36bbe5aee71ed9f8adb9"},
+ {NID_sect233r1, NID_sha224,
+ "0204b1fca831919e89e108cf140b3770f531a696b1d9a4d1fb68809eb10afccc257cc90c"
+ "d36717c02b2f3d6d3d1d8a93cc5c48aa7ab9f9fddfe121ce9143376535a0c65e247c6558"
+ "eac49fd1d6d1bf431ba918c471cb3d536ad485ec51f6471a340ac75f160c4c54cd3ffb9d"
+ "cc123124b42df1fd2eaa005e3377c5d2d55938c6",
+ "08a017d717d6d1213f2b74c53281b07258738c0c7db649ea1ac46b9a3b6",
+ "0401eb379e27de6c04c5320cbc18e79ed9e8993710ac70ce823f1ab5762b6700f5521926"
+ "45d350361762aae79ffba39c33c2c5c0df208219f1b339016a",
+ "00e4822b2cffa327a8396301b21554da6fa52f418d67114bd58e850d935",
+ "0d64dbdadb4ada2d3a8892049f7fda3c733030522b44cd72ab850b77bd0",
+ "06fbae2d8e4fc04abd8a6e9cb011974ac851ec108e38f9c72603f7a04fc"},
+ {NID_sect233r1, NID_sha224,
+ "2033eb48756638cb56e2cc39a3e775cfa11fce86cf71f04487dcdbc7f262bc8350a30ced"
+ "54d1fcb697b28a6e96f88f782947c997872307ed963e1d68985f756435af77f57755cacb"
+ "b4c6b50ed419deec9f39f0a549a13e54254fa0a5832dba2d943ad4aed8688889a2dd29dc"
+ "b4ea12abd6a6c50eabcb3981c3a0c1ca5f0b9629",
+ "01b56c14442b084cfd22aeef0f8028ec57c8b571c9fc1e43de05c45e47f",
+ "0400d450c533b13b211b8c91dad0738402a5c811460426ee2f35ae068f2c12015e1c9f9d"
+ "398925c619f8aa0bac746eb7907d3d510814cea185a7efe771",
+ "0dca09773730a2758b7f4d9257a8e6bd942c141e46bde5ca54a79468c4f",
+ "0379773ebb7a2860f3422d8f8f714b234e5abd8860defb19c659c9c6179",
+ "0cb9272a27661604425ab84632f586048483b9f9cb80b9697898e745117"},
+ {NID_sect233r1, NID_sha224,
+ "2986ab1cfe8873009e932dc68d4727d77ccbbf378e43fe4aa7c54416346b036b89c0aad1"
+ "b82977c9fbc39a00f1dc916c0561d8dd70298c02b6cbfe572e0ef2058641e841c6875e85"
+ "15f3c1082765e046c90c956d984b76e0e8e6eb433ce26c1757ac5b13422479141971c201"
+ "02e9621d18f51096ae3173c2753facee2862d66e",
+ "05afce37c5594586ac46a34ae291f591eacb9880a7de92701977f447fbf",
+ "04002a069ef14f2989d2b715c5006642ba966cc84df88bbc27e713e15c47bd00f001f60b"
+ "8a8102a971faa2c42d3ea9cec37b49c7e6ec0cae9f7fb35713",
+ "09756db630ed9b708bf1ab8aae6a7559bc235c4e9f4002ed26e2f019aa1",
+ "06b9b2c1d214373647d9a2d24ba69741218064004614368915d5cfaacaf",
+ "090dd607329c27483fe43b7be137c3f51c23217c939baae40b53e65af2f"},
+ {NID_sect233r1, NID_sha224,
+ "aabf5aa90ceef91c2155f90660adbcb0eedb996f5242cee15468ae217058ebeaad8cd4ff"
+ "8cdc754a8ab85ba43c59fbab6386686fad5e27ad3848fe52191c7e4b203720841501792a"
+ "625aef2acb6e36493b792fa55f253effca682946ad8c77e01f44e92ec3c258d0dd98d318"
+ "3f4dc4a0bd3eca183794abd6232a6f9e4add8f57",
+ "00696df05dc7a54a9908a73eb18416a155cc8df4ab26032539d86eae537",
+ "04008f9f494ddf8d0030746a8c0b8d215dda6cc2724f411a7ea407629294c301ea2e9f85"
+ "f06412d29c677aecf624a83c2fbd86482dc0d564906a91d97d",
+ "0d62b06628d3884f0a329a7b6b4f832fabea4ebc85ee03e63f2967e7810",
+ "02e39824f272d4b74810594810957963c777207217e53a672010605b9de",
+ "0e64bc44af64b6f879f0d32f814acfbb98795ef7b2f246b3f91cacb55cc"},
+ {NID_sect233r1, NID_sha224,
+ "29ff209eabbde02b10b3fd559671fa53e418750c32c4a18d31cc0186d1077581bbefb877"
+ "0ed079f536e866414a07431ae6633955bf42a2389b6f8a565d6e4ffb4444336e00300938"
+ "76a26d4e3106e9ac697788e41f8a21c755eeb86a7c60f18e5e1069f16408a4c375a6a68d"
+ "42959f2fab7ac09736c7b37c80c05897d8566ce8",
+ "05ca31e88c5b2e96e433af2023a66095161710628e7bfa428944d6676b8",
+ "04008232d4bbe25536ea7f83c145a8d2b1cd72c383eefc2adaa1ce72c7dd9a0100b738c6"
+ "f1551b3240293ee8e8ec29fad0cc485ffc2cfded96b68162bb",
+ "0df9e1b418ca1d41d749ee998446ba1cc54bc8bf72eac6f30929b40b5c9",
+ "0d4248e0bb60fe46abf7bdb2effe804b9d394d8a5514a5791e149d435d3",
+ "0b89a459fb99cccebda754c4b2ae264c9aef7b5b610427f42c35dbe7d3a"},
+ {NID_sect233r1, NID_sha224,
+ "97765d876c80819f4004a36d09ccba78e600efc71eb7e869d3a00f658d2ace6769c7ab1e"
+ "f590f41fb070aa8e08615e138df45ffbb6473d4a86ba5fdf17dd6dc9ea9ee19c0332563c"
+ "99e6a3451c211d286d69102b47bfa6e07d468d9bde82e5c2063fb1ebbbed6086f542cf68"
+ "ba46d4f214634afb1146dd5a6f3d50912ef5b824",
+ "0ef8fe84727a2ad8bf4e646ef28a492adfaf785a3a2ba6e6f985c649a8c",
+ "04003435eb25ce9891a78c120098992c666940103eefd80d9bd64f1d4ba37b00ddd6a4a0"
+ "1e443c92afbc247f634b85f1c858a2aaad35a26f57ad4c9126",
+ "09753a236759eb32e13f19b9d2ad06f7b4db4ac7b1df96813463d0cd557",
+ "08408fc46149dcce0753d7cae0f50c8c5fcc97acf7a1a02a9f68c0b80c7",
+ "0b5ffba104acc6d0cba87523382ff928859718122c4d0d2298e74985d89"},
+ {NID_sect233r1, NID_sha224,
+ "21cf768d087d1e4eaa8a05e2008020e243116206d675c09be42ef2bc93617ecbb0575c87"
+ "3c6510ede9979215531b62126552738862fc4323d487992754e39d8f0d7e111e165ff254"
+ "200e05082f59a57ef649bccaef6f980094fad3b7ef93bceb161760e200f0a2e396fbb6b6"
+ "142dc84d872311bf932b84616b22231747937d58",
+ "03edb94b8c62f9af30c14a790c0f5d65e362a21cd8569b9725916d534c0",
+ "040065133691b888cd2513964b5a905ed9334cff6367e25c09db1743045d5801408e1ac7"
+ "21bfe2198086c1834d484b6e5692c037e09928cff87f4b5a88",
+ "01d8f800ba05d8173b0f1bb3aac0aff68c6b24cf98c28f5a69b0b5a52cf",
+ "097c07d4352e39e1878c42fe97ebd4c3ba5098706879fad9be4bb2dc2f7",
+ "0bc669db3a488e613665cd26da7927c6b6a073ba6b0951c00d22ab1ffd1"},
+ {NID_sect233r1, NID_sha224,
+ "7b8e58eecdab3e40212bba6bf284f9379265b3d2baec3e4625aa08d0ced851da193c292e"
+ "c793dab42732c07b4e94d8b19c83aed796a7e3a6c2b954a7a9a1ff9b2bd4ca62592c8b68"
+ "f709f1ad38a5c8033ebb3f33d176945bfc68e9ef2b0cee2d45a13ce89d238a33c09ce2c0"
+ "c63c4233aba5717b85c4c161dd7648a41a5e39d8",
+ "00a7519be62562318da1b67d22cf8e720353d22641e0cee11c7a352bb93",
+ "04013b63dd8ca9044a3e518a67999a781a5b62994b6e20454003a9bdb8715c01a2f9bfaf"
+ "528b7f5bc8c3b02eccb71666c83e4a598b4077de999d90fe27",
+ "0992ba1a8331bc4d88be7dee06f96098bc2ea56668f345e187f32f38171",
+ "0c55b45bc7bc3092ffa82234b06ad45525b45f8904011f1bd6cd356f0cc",
+ "0e6163e70ab56d43fa27211b98b48f1cade127237bec1c6556020d39990"},
+ {NID_sect233r1, NID_sha224,
+ "f8f268d2b04fe47e5052c8d0d653787384b9654f0bd2138a6f52b80713feeed452b976a9"
+ "0eea4edcfbb62d04f3eafe172ddebd7cdc3701ecd6008e3d82e8eb217b13b5228839f610"
+ "75159f3bd1e1409c08903874b6dfee2789dd72c208ae769ec8c7d52552a2b1fd73dad24d"
+ "e8b571f88e2184d0ee7d063a121187f97e746f2f",
+ "0264022fd7dc2328a6436b522793ad9406d7a586667a0daaf1bce927338",
+ "04012d7e7f8519a7e357510adfca2f50182dc5fa12fb2a77409fb781ed500d00ceaa9a22"
+ "b7ef9febd8a9962ce21d83fd2a2a938b9d7a78d669dd233974",
+ "026fb8fa6e746106500dd29ee32bbd03b94302ec3a123356b23b3055e51",
+ "0f416418f7aa4d437e7606afedf961b968a67d9a1524d60fe3f6df4d3d0",
+ "08d3afc975a8147fa8230fef4b16e3024180a9768702038f955357ce8df"},
+ {NID_sect233r1, NID_sha256,
+ "d288768cbd066fad4bb2500b5683fa9e4eaedfb3dbb519b083f6b802efda0a022355565c"
+ "5fc6babeccb22f3adbbda450ce5d633193d1431e40c0fe631a295cf85965cd3f5937b318"
+ "66bd6a5300eaef9941daf54d49832acfceed90e572ef34ccc94eacd0fd6b903fee3c572b"
+ "963d21e2881656a214d2a4c125778dbe3bbeebca",
+ "0da43214e2efb7892cc1ccde6723946d2a8248a6b4d6c8872fad525ec3b",
+ "0400db09738bf0a0dd777f67e82be50dc8c2d8e91598bc0b8d4486f67c04a5008ef463e2"
+ "f37ac7c3d276676cbedf17ae11e767ec577da7ccd90cde3b74",
+ "0249cbd55e307a0fd10a0c70b1c0d5e2416f4d7f144779ddc11911f4a08",
+ "04d1c99f9d486fb92b132d68c0173df891ca757572f7acc03cb41d46bbf",
+ "07de2deeb58d55d65fb37f600d916cfa49f889f02ef53dcce412703d1c9"},
+ {NID_sect233r1, NID_sha256,
+ "bf0ab46e0a756c11229b0ea961f8d57218be5b00ab8b0e91d7664cdf5e0341c412c0e992"
+ "d26ab12115197db39df2d1a6e18ed26a91be461432a2dfc21d98cb16003e339b0b0b1f10"
+ "0e4e6f4824ddac5442f22a1fac26326ed8a89cc91343d7223986d485cc8c64424e84d56b"
+ "e536c57e4dc5faee459b1958efd79e07e90a9811",
+ "0aeafa49d776b61f6a30d66ff64bd40dd8d79891dd5293c1b5cd3b46a7c",
+ "0401ba1b87b16122e6939da5dcadb8902177a9f9ef09194c8695008b80b588008f51ee5c"
+ "ea1f4fc9c44c70df57326ff121268bf4e02cd9b2626fe7c1ed",
+ "09d640ede5bb60b9aa78e393ed453b1643f6dade4aa20e994db53e81fac",
+ "0277bbfb7479077d5fb6813670fbc7f46055718199550130b122a7cb8b3",
+ "0f8dd350bc0bd2d84cdd374c56ff2341de4102269a1e80df7e35969d4cf"},
+ {NID_sect233r1, NID_sha256,
+ "c7b1eeb7c19eb16e7f42b61d79e421b71de797a6cab4e0baee522fee7acdb533f7bbf585"
+ "5316544e1b82b4f2a18ad0a2311e7622549332122171f32fc62a90e408207e0fb90d1b05"
+ "2821dede9c41b15b6e07d84d5d7b9e31e6396a8ed229fb6232b3051298dc5321aa589f4e"
+ "289d27169f14c8cc93644916d9b72dbc92c43488",
+ "0e95db309f4305b621f51f93588a2678cb19aad0932f365fa0aaa3a3895",
+ "0401177eefc44b6070e2c41537e75c91e2f08908c0d950bc90cd2f4720b33500f751312d"
+ "de55b1bcabf31665deb6c12d043d5ccc89800622a557a7ed37",
+ "00015798ef57a771d62d194389817c93de1b225398fcc0d2b81d94054a0",
+ "0eef7161a167f69a6c89b0f173db2c4a7033b5d801c0d89642ce65e377b",
+ "04043f8985bbe0221fd595f9355c33e1930b5e10a1452e81c31259e1e3d"},
+ {NID_sect233r1, NID_sha256,
+ "a738eb074e1f277dc665118ca055e6328059ab26da188c16f56384c566e43df8cff3d2a1"
+ "0d2d15c3c1406de8f734b20be5dd1ce937a4289f0ddfd7bddabd03586556eb8233b8feef"
+ "edaa1f49bdec6d45fd562c2a83fa9fcfc2013bdd77900857199e51fa9c7cbeab925ba8f6"
+ "c3c5fae46bf8e9c574b302f1e5f9c44400152a78",
+ "0d4319cc8e409b8755880827f3200d3f0f1c64d6356fe74eb1f5aa42499",
+ "0400bf65953f2d08477f7fd0428c31125184e3bad4d5da00c91991949e056200f1669d0d"
+ "116817d625128ae764b3fde956432552d24d98f08a12925afc",
+ "05e8704febc38bb8ea76f3c6433c1f0421dc5e5af959723a5a2f0e9a970",
+ "0307c0b838c65d1a47792cb367253bf7c9f627435f1c7ed74494b318446",
+ "00031a9b35e935be6620243f4878a38d4e617fb25f7a4883893366f39cd"},
+ {NID_sect233r1, NID_sha256,
+ "b28103d77e5457c42e026e713ea6ff03722a36512da17197140117442a976f9e2139c54a"
+ "759fc26af5811b455e5a0d3a95362d9939c1e738045be9237b469ae2106ceed7e7842b44"
+ "cc0a475d5af6d781e32ff1dd1f4e1833dbc7f82b27dc7e1562d0e29213fd8911105104a7"
+ "a16f665b926aa137f70d868c90e72f8ee2c95b64",
+ "09e556c945052e5954915c773b2d47970c521fcc99139269c3ef46093b7",
+ "0400db68c16ffe64bede4a849812df0b8e202f74500cb7d5349aacf7f3f0260084b5892e"
+ "a74835e96e9dfb1bb201a4dcaf32da25dc00dca019d806f5c9",
+ "0d0c9e0b6d4526d5f6494d2c72f812fb8d26e17c7a44f6b5e3f9e684cad",
+ "0a379ac253f3aaf94cc49e91fe3f2908107a9e1a4d102e02395eb18cf08",
+ "0854c2f6ecbfe95cfd14045faf71ad47561e365c1dd5f515d8817c3198e"},
+ {NID_sect233r1, NID_sha256,
+ "463d04c84521ae671bb35c0a7acb3ae509b1b0470f39b8fe7ae5f3c9fbadbeb2bcc3a87e"
+ "284cbdff07407a351f7ba743aeac50c4a1fef7375b90eb4af8ea2df040776bbf3e4389e7"
+ "a80bea40530842642b9895ab9ef5ac8ed6c9ce7917d7b3ebcf80b801da845943313988c1"
+ "970e7748cc306f914c37414f8247d648b580000f",
+ "0becc76f8a77615c4f92ae1f91645bf5bb908e75ef22fd544aae63a3c8e",
+ "04018cd93bfe8fc8ceef2b9be14fa947b60fb122f5099cb5bcfad0cdc601e8016de11e67"
+ "3011e30f6fd92025a60d7938412ac63b19d23e45bbf53c6c4a",
+ "04e75a7b92c42ba0581eb1201fa5b3fb2ac82460e953c26ce6bc60e145f",
+ "067bad23ecac0883d218b1368d822b3bf9b82453c0e5f3e336777c6a507",
+ "03788a331249463533384a61c47232aee6f057634c37560ee25895b2a03"},
+ {NID_sect233r1, NID_sha256,
+ "8b2379b5553ae7db6023cb010e26ae91322bc3f94dbaa369481936f90a886e5d3827d995"
+ "ccf03ca59f46805fbac0337d31a8f117cc7044218a934d5bf507090e7e21178a7162c8fc"
+ "b39111e6967803dbf9d752f3ae737ba024d0f4f7627e08be58efbe997a164106bfe37f67"
+ "d2f19c0fcc7a6c7eebd96a72582a9c7bdf881896",
+ "020572c2a3dc3ea430cd8cde9d642081c21658e8bda165550cd9a5d37d9",
+ "04016117486794f14d171dfc3ccffef0396cc9fe5aa45d6d39ce0f252c416801b6a12fe2"
+ "adb279dbbefa4eafa273a2ddbafb2c6401067a5ef5e859fdcc",
+ "0edc8d0b64496da309b10630e9e5917c9a807ccd7cc7bab14360873eeab",
+ "0e1fdd3b7849806fe587ad93aef737ba0472409b7239981f0d325785fa2",
+ "0829449a0c39071a832664e8148e762efc36fda9e030e0d062458728273"},
+ {NID_sect233r1, NID_sha256,
+ "3090bf7373731cc44c00372c1ac59280b0f36e627ccf763fa68a7be37bb0ac8cbd4f70db"
+ "54fc652566c78ad268f78f015e4bb1e41516fa56ac303a3bb4a52e1fe897d8338db5a6e3"
+ "7cad685e704b994504bd231c7dec0002dbd907a7ebfa809833e32eb23fffdb44fe4a18e1"
+ "1fa19d67356cfd703cf39a75b1a290b8a7c73afb",
+ "0769cfbf2dd8248ea1e0ac9b275c9d6ddcf923fe762079b9ed62ccbaa89",
+ "0401aadeee0e31ba9505da3e195d883643d260dac9fe5e86102c8ed7f88eef00d925bd5f"
+ "d700fcdec60cef9c9fdd304faa102d9d721b4f21291f8c96a4",
+ "0f2e203410107c075e25c4adc2f55dcc277883d679ea307df7d52060fa3",
+ "02fc0975c2e70328da4a0ad2b8bd344a8171c2c500c55b1c92270230c27",
+ "08871b6791f7d03796a3aa537fa820f0eac8f2463c9f918468e7588b784"},
+ {NID_sect233r1, NID_sha256,
+ "c37389cbe3f46eeebdda343e354ccd543e96b0c2a87e057aa6b9c4895a403de706d658bb"
+ "c9066c140e50fef4b56af2db1f42efb70b8021254649983f1e11d04d6b10169d5a1c2093"
+ "b6ab89227b88a30537c776bb7575749c3ed87bcb29effd8e4f17915b4d5dff6cab9678d8"
+ "8f33abead1e73dbdc5c3307ff3d3b2d5fd7bfa83",
+ "040ea4a37b388f0cc464f7e2bf92173107b268ff77a8acf5f517b4ec0e4",
+ "04008acee84d29638a7285654d20f8e0653c7386140aba0bd2fc157d51764301482ba5eb"
+ "b82ba46654aa1eaa6a5f01e030177318921a0c99fa3f6eee9f",
+ "0a6fbf938e9cdd009c838196ffeb61f7f545f7e7e9a6cb18d1f595a87b1",
+ "096a80172a7b3b65c0a8acfa8b89cedf9cb19f6eaa5d38436c300b7c0f4",
+ "0b7bb96ddfc9d1324bea96836c557cf88d6ede9a93ada8fbfdfcfe56244"},
+ {NID_sect233r1, NID_sha256,
+ "8884def8c3b9c5f856b9c2352c85ea71aae3c8d0e84ca74e70e404a21467159fc9826548"
+ "d16dd1ec5a75dc2c23ca37b30312f25e1194e0f9385a0499db34c855412bbf58979ffce7"
+ "fc3afeb7b8dbf9898df44023200d809f520db99eae315b5cf85674fab008a20340fae8f6"
+ "974034fd3e55bf08c5522a460680218f9757e368",
+ "037fc7898df9b37b5390537352f5c0b8de22659166c19d7d4df31c3938d",
+ "040198674b40d2a68ed94d5b2c51102393d1332404f75187130669b9de0df9013ee77d85"
+ "4a60f1aa74041ef1fb58727c09f13039bb4b33a818dfe9af2a",
+ "0cf92eebec59605b1d45848f5d06e93ff2767dfa282929208ba801a9fec",
+ "0f7bd93dd4df06219fb974a4e85030840c7d4877f131adccbd98cbd25de",
+ "0c2c4a864459488eb5498a06b0b56ce7fc98fb29b1eb9b6238da8cc8f52"},
+ {NID_sect233r1, NID_sha256,
+ "f1fc154d469433f56c2bd42aa52237a4a4bfc08fb6d2f3f0da70a62f54e94e3f29c629c8"
+ "37e7adf0474fa8f23251b9b349a16848942c0d9cf5db1d0fd99527020dbe21cf0b94a9aa"
+ "21f376bf74da72d36f87b306b0696771efa7250c6182b426a4500ac14de4a1804b38db8d"
+ "4f3beefb8c9bb619ac82cb63fb37c2e1d22951f7",
+ "05d5069425e7a9925d2cfc6360a708147b2c1b55ede243591885147ef3b",
+ "0401f35f161ce0963dca70066b3a6de2a74ea1941a27cdfabd9e433d8084c701d5d9cca5"
+ "b741b2321d8511a777fcc2515c99ff8d13ff20266a163c94b9",
+ "01b9c83d36ada7e9367790ee850163ef4420104e0dd3299ef6d65191d7c",
+ "0dca4e804bf74aa496c15025acb4232c637c9b81e9e26d6f2065d6be21d",
+ "012014f77a4ddb7b266abf2c65a653988ee6f913e700f3f83f3e78c88ab"},
+ {NID_sect233r1, NID_sha256,
+ "885cd348f7983a0721f96c0e866821223d3e5a95178b16d18652b4062b1b2278aed6f54a"
+ "b06f7e37ae6ce1020aa3eb812d215194bcd212302da5b971fd86aee1dcb23057dbedb569"
+ "bd0bbef80df538da69ae2358cb03bb77c64d3ead475c8c5ae5bfbdd75684b421a26f1a7b"
+ "0c37548fa32d805acdc91230dd70a48232a12846",
+ "0ffe3e7b82ca62b96e057ee072a4718ca20a6cc9a3e51e4fe8ed7b4b9f9",
+ "04010f774adc83c1893894855366f1db1962bc697b8e1d047a01a08b12da4a0078c6ff63"
+ "4d5dc8ffc4d8b1a53bbf94046023095a8c2b41618c4330a4de",
+ "005a4a50de4e97280d6ed1324214d91b271deb649a2dae18d21a0182022",
+ "04bc8ba9ffbca81b5f19f0d8b1306900ee642bc5cd9a9dc9867a4531b04",
+ "0353567acc062b83459017c70cff4f3b8ef0925032b51d7300261408549"},
+ {NID_sect233r1, NID_sha256,
+ "ca3b0e2f1c7db4e73c699f06e432bb0f63705ba66954bec4a259bf31c161bb4861476e2f"
+ "2f7dde9d841d1ea6bd0990cc793cd7a10432e38735c3eeda7a0d786e8821239bdd6c4972"
+ "c96c2cf68ec5b935391f963a50fe16af2719c9029943b539ff0f1f5645962a6ac46c75d2"
+ "037fa0c7cd46deadcdfc66e1ddcaada3a376acbf",
+ "007a9cb5ce27c763646de414ca2a4dcdb774d69ed2bde7a817baddbc9de",
+ "040086d4ac1e3d54f7c154c5370f5c9a2d22cbe8f794df68974706bdc9172c017770a2cc"
+ "ac923423137731a14e97f6ca65a8cb3642eceb4e70c78ee929",
+ "0538b86e0a899281ab56d28f40bf3b7435f9a57e334a3269233766049a6",
+ "007ceaac3aa0e260c371843104f5cb91a057741b38889ee796e69f920e9",
+ "035eedd44b036b843deadb8e8df9d96b16e719ba350a634553457ae71a1"},
+ {NID_sect233r1, NID_sha256,
+ "4b0a31b746763beee77cecd318b90acf50fac4172cf4bfb354e5a440f651cb89d7a515e0"
+ "9ab19e9850803ab9167c2aee3b395a5da10dc9aff799d73756dfb0a9961d93bc32f15a96"
+ "bf13962a03d5bd42ddc8b5928def7fc48fb063f42866fc5f96cf88fe0eb125b7c01906ad"
+ "6a7fdade28ccb0a421ceff50ae03a974671b2c27",
+ "0c03fa9e38dc1c697f70bc6381f2bacaf860bb5632fc837f728da959ac9",
+ "040195f386c7efe108fd1d580f0a77031e180e45a23911ba983217207a904b01a6837095"
+ "a64f71ec53ab1c0d9a3a39d69a514065d83f1af26870e41741",
+ "0d4f48085b367787a614b57c06ee8018b2e95e989c2e8cf355e71db1091",
+ "0391710f815babf07b6287b7aab8b9d2ce04bee2a144f4d4a46fd17cf77",
+ "0ef29cbd771b8a6f414ecb73b7937ffe0a108593ffc6899f28d4030a9eb"},
+ {NID_sect233r1, NID_sha256,
+ "3011d42792b21c0f1719faf6f744d576f72c5fdfd22b1a520d0e8d47e8c2b06823d853b1"
+ "3c9fa039fa30a6f2e3e27bb2100c6a35f55703806bbf0f79b09d0f629f8042ec63fa0406"
+ "2f15f2edb92b19237980005566f02bb12a40b4ec66e4ba6c599d928b33f72d7437c0e399"
+ "a8e6a9068d1fef24917fc4f9ab5464ea6684dde9",
+ "087dba00e3fe4802e01718017510094924496bd2785d4ac1a352c530473",
+ "0401198518db2d1255aef955b9b80471aba60cf6d8fd1feae6d8e048ab140301833332a1"
+ "16214e4d9fb37c8e0ab7552b87348434a67a0c41f73972dc9c",
+ "0378578acdfa572b1de4e032158b28bcf00ab7dbaf07b0e772c39603216",
+ "0be2cb45d527a7685139290f1098de975b69957fff2c5c29059ce417950",
+ "06abf4afdcd2990121723b94ab8145d01cc4917cd70416620ef100c67bd"},
+ {NID_sect233r1, NID_sha384,
+ "05a5d3a3b79f4e51b722e513620c88092a9bb02408f5f52a32e782fd4923f4fd3094fc55"
+ "36caf4b645d830260eba91b5173f3833dd65600fb9e246aec968b1f6ebdfddb4059fb2de"
+ "7e636ed60bb7affdb74aefd158e54485d5f26be373cf944c6570daf8fd7e4b77fad57300"
+ "667d6decf5c65db99ab8763bb4ecbb09fdf47e3a",
+ "05a387e7affc54a8fbb9157b5ebd400c98e2d7bd5c3e095538987d4f8d9",
+ "0401a97224cafc063967b25cd1a43283daa5411f3eabe9386b8b14c9768c29002cefaec5"
+ "141bcb084cbc9aebf28fc59780897ad1424fd439eb43eb911e",
+ "0fb7ec3804654b9c3675f7b3c427f6d01f83872e96de2742e59c93151fd",
+ "0808d829d78e65eea47122c92f8c2cbf5a8d6717a057ef1659fb6f8cd3c",
+ "0ef338e09dac0b12fa6109d15924efb694a0b672afb4ef05f4e6f2f7b88"},
+ {NID_sect233r1, NID_sha384,
+ "247a101c8196eb93a440280650ad463795690bc620e46e8118db6900a71eb493d03fbcf2"
+ "f73a79bb47aa8e2d8c87ef70e4cfae36fae5c45fe247d8cd0f7d0718dad106526945014b"
+ "4f3bec324897d8e1fa2f457b8a68e61873b7fa0350fde3b87b7b001c13953c2050a24f71"
+ "fb77eb455053e49200ebcbba7299485c0f1a40db",
+ "0adae709a930d6f5a5c0e3d8ef4aab004d741d23f0ffb8287f7059890c0",
+ "0401541eaf3dca942957c48d693d2eaf2a456646d2fb3eb8df1779b917a9b00097379582"
+ "76dc31852e57063119f1d2d061616b6a2fd35b4a1a3f046954",
+ "0390d5ed395f8ee3478c2765525c235587dbf5bb2316df3a1e8c664185b",
+ "0ebcc4f84bf2deb9b3d669158998fc96d7516580675e24348ca58d70d2c",
+ "0b99462b85e6ce6b46e5aca221250ac9de7ccf3e63b38919b61700be866"},
+ {NID_sect233r1, NID_sha384,
+ "a16678c71976a3ce3362ca379b3272b92e8ca7085b43752473db34e4d6b61eeed3875f49"
+ "f3328366fc9d0644824e0104817de458e4c1036636b18b83dbaf063f2f99818959224906"
+ "571c7b28873d9c702360888df151e9ad1a7003e6130033203acf8a69889be6ebd90816f2"
+ "abf0764f10be68653b1e56766ecc3150bef8b042",
+ "035d391411e6d679751092c4ea5a079c591e77ebdcb57c1d9006ae70d90",
+ "04001298e6f1612f90dbd2eedadfa8ecce22dff1da2d1cf057c41bd37d4b060073136a1c"
+ "af7dae2aaaac571a900135a51ef031643e9d5f01934333b864",
+ "09e343003670f61db85aedc0249db21953d232bc45488c3d6ceaa6072bb",
+ "04ac435e88f8e487b9b217e7d68fbba9bdea0b9685769878818f25e661c",
+ "074d8f4dd58c922d7e79f30950bd54c10c1cc52ae3b8d00b675c8e501a4"},
+ {NID_sect233r1, NID_sha384,
+ "bc2f080a7f0b69a6b142b8f3fb481a43bd71d07418df4f3b802568073c1a8d35729ad197"
+ "f34a4e941a6dd511c63f201d1f6c34a1b66545bd5f43508c10bda1d6ef60ee5bdd25dde9"
+ "75e50c61f76cd36d50ee3bd8dfa2dff59524db9ef12f1e28d109b552cb42f021963f559c"
+ "843476b5c889fc567b7840297c5a480e18c221dc",
+ "084e79093f1947d6ab9cf399782436e36ef87c59a4c090930c9a74ddb10",
+ "04008e756774def210e2d6f76d6e4b0b43d86adca0880f017abfc911bafb5a0147e6a20c"
+ "1aad897829339630c5edd327ef9a7e40795630504318cb71d6",
+ "0ce780ea99a344d67de7921feba6ae062817101068266d5d1a140d2b49e",
+ "0fb2474b854b8e5d6920ed90e69b5b386a1b26a947b1cf28a13f7c5d3ac",
+ "072722017a67ea6754873f833fc51318d41d6ef598d3ec2d3e0eb5bf41d"},
+ {NID_sect233r1, NID_sha384,
+ "ea71cede8b63ddc5648eb244184bae265cd65d50f77a9e25ff93f02b132487c08732544c"
+ "b88936d4fff7c0fedb39685822dd1c9be1158f647c605c9bb5f6a1ae34722fa08882c14b"
+ "36b6c93cab33c9a269c7c10f755b6453ed045ea3e56f29e95a9404ba189a0b4884812039"
+ "2b4dcac43148b706c3d9e4c03db410cbe5dca3da",
+ "079b6be015b8006f86fd81c2792bec6b42c08bee2d295cf9dc214c326ab",
+ "0400e24338d5e33ad12d41eb623ad0905f64d5b75835fec4e693eebf9bba100101b4297b"
+ "5b62fcca7c61637a2a57365e911d3bc7eb0fc7adb0a9dc7bad",
+ "0f06b001e5f874d16632e3c8d49f13d70f48ed4eecaff9d3b741f9d02e6",
+ "0de16d8fd7bb1783a2cc4b9ac1563eff3f87e4e6d75e6a32a4aed1ecb02",
+ "040bdb1197ee8ee51e4ecccb8d42dd985913809c131aa9224049425a052"},
+ {NID_sect233r1, NID_sha384,
+ "319b41d16e18059a1324c37161c937e882192cd949c420ce9c59208a0ac208ebb06f894a"
+ "7fd78df2a3c5f23f25dee6595d3dacb25a699f115dd482ccd36fc54ba29dda279335424c"
+ "86b07a1b1fa76a5411bcecaf4d37065b229cdce0bac75b666c6626ec37a716e9841be93c"
+ "907f87453ad91d36846561f284421a89013b88c3",
+ "0ca9d751a060fde64336cdc88122819f4b3cd1b4e7df42d495197787894",
+ "04009549785f4f9c71f20133f5a1d409b244df55445beec404cf8cd4d2cadb01b246647d"
+ "7570f052840d4cc01182d1dc3bf357b25e5966434e1c3c2a30",
+ "09e99fe741cb23f7eb039f5df8414d069b5c2e3c144dcd6cbc6da56ef43",
+ "0cf00f519c18e7a0fcc84c1e338158399f16929ad89842ba97a4afb5bf2",
+ "05854ee1a6aa5a6a74bec0b4696e80aa275210183c86f45dde7002d7ae3"},
+ {NID_sect233r1, NID_sha384,
+ "aebeee215e7b3d4c3b82db243a47506ffbf2263f6fe9de5b69286e8649d9218367c36ba9"
+ "5f55e48eebcbc99de3e652b0fecc4099714ee147d71b393de14a13e5044b1251e40c6791"
+ "f533b310df9e70a746f4c68c604b41752eca9ce5ce67cdc574a742c694ada8f20b34d0eb"
+ "467dce5566023f8533abfa9688d782646420c77b",
+ "01dde4b2d49338a10c8ebf475b3697e8480227b39bc04253a0055839e9e",
+ "0400504bd3a97baf9852d6d46ef3db78ee7555db752120d020cd056b1b4e50018dd305f6"
+ "a15e91fa46d2a6d30f2ec8fbe2baec491e26d9a2ac81155c85",
+ "03b78d2772b8ce01a00ffe2e6be2f9e2ca2c89ea3b29bec6d6cf31afe33",
+ "0c0c51fba155f98900eaa2d2935acd615e917f9dd979dc8d92f1d6e00c9",
+ "08c8354f95e24ed13d8ff3755e1122dbb4117c76b21b3bdc7f4dd856f8d"},
+ {NID_sect233r1, NID_sha384,
+ "8d353a6b6f35590baef59b638914d3e934d0145b045d221d846517ceddc8ff5e3d28826d"
+ "3459f8ce1260f705e80923f39abc73d5949aa7aa8ad1734be0e992bff0c9a8f4cc9bdfa4"
+ "30d4cf52e29d3737b0cd3231b72b16e15e1a9040b832e4a920b4a1d94c4964ac6c8abb75"
+ "bbbdb10825f882ae44c534c7154c446421a04d87",
+ "02c8bea2803fd746c874fa110a716538c179c82712f38d33d0f6d037e7a",
+ "0400a034560353561cde19db89dbcad5c9dcb74e239efc604e86ff38a0577e0185e0b02c"
+ "48be2e90c916a7c8ef2b41a57ea8d4f21d8cd3a0878a03875b",
+ "02e39f851c57643bd799c4f3b2fcc5eec8ff7f9e9e279efa647f969cc6a",
+ "09b2ad7efc7ed60d9cd3dedbd4159b1e05f05ce5ec2d2cdf7a0e0657482",
+ "03fcbd4ace6a140c8bfebe36ff30848966bb0d3eec323cc8ddda55faf00"},
+ {NID_sect233r1, NID_sha384,
+ "847f134b90f10ba3636ec24f36a94111f26d58428fda5bba4501e58c7bb55809f52320cb"
+ "e9e0df55af1e40bbac9f3eaa26a55d78b60621d4356d090d98363662f406367601eaa9eb"
+ "9568b1a1b319730bad7bf6a7ddf1b45eb6922faf8d065c540b671c50df758ebf8c4aca6f"
+ "01878e5e0012dd038c58833e2b13ebdb9a9f3fc3",
+ "0b9119b3b4b30cbfb98ddf0a4f6953417e515fcf0e5a94e83ebc1d1d14d",
+ "0401be65d340f7e99067bbbf961c2b357e1fd47a74393cae5f93a40c5dc28000c04cd8ca"
+ "3ee253b99e44ee6bc0e52d2f016b16f59c738b9f2bd8c1b9d8",
+ "02c851ba0123ff0543808931ab3857b5c15d7c10c343f232913f6e0c92e",
+ "0ba2b33550878e223cacb80e45e382dae84e76bca5a2ef8371b84d08572",
+ "08c370f82506e97cc15837f59e9779448decbd87bde0a463bc14b18edca"},
+ {NID_sect233r1, NID_sha384,
+ "99d23950493bdd931915e9f9b65e4cd1329866c0071a19d4f7d6fd190689275b7b10fc07"
+ "503dd1c27a4da274dbeb3aa5cb0e71e9b7b03fc2697729b7be913756e6760098951d7015"
+ "df181cf14b1e0b954e6260276af553e3e59907794b863e941950718ef154669c5c262946"
+ "ba120892e0239e05910c2194f712db46e37e53b7",
+ "0f4ab2a573f3771d1e4222e251faf14e06cefed544e804c299c9a8395f5",
+ "0400b1f973d6495d277e24320622b9b99fccef8eb5c1c6952f35b82d4479ef0161dceea4"
+ "d3c9caa4f640f51b37fcbd5b8932642a94c8e7aaed5db17fdd",
+ "034ff28a5ed6958514c603b3af5a991e2e9b4cc2c0a7aa73ab2d70bd05d",
+ "01abe4a7b27395a37089f91eab27ccf29001ced1bb3348a6f919d466477",
+ "057449e55d3f2a4004d647ad6e8fbbd516adbb4de40b1a872ad8ecf67e2"},
+ {NID_sect233r1, NID_sha384,
+ "7bef2487bc2bbbcbcc1570bbd4ed437c0dbcbbf63f666a3355aec49ea6ef593da25aefe9"
+ "ae0d94db50692475425dee3c88cdea975794ac69142c25732f3541457d68d9101c8be069"
+ "f2b515aadadea2019dc7abefa6c12cb3f76d9f4b5e46546f77eaf636aa8f232913092211"
+ "1151a4df913d18b7cf9d0308f01ad84d878adde7",
+ "0f4649cf30d4a5269296a45977de2652cb06d3ca2aff4475bb24517b927",
+ "040100ddcc8e09ba2122a6535c6a0a2dae83abf9e17687b5f6aae7ec6a2df10048f55873"
+ "60ee251925b7ed02de82307ba219a707705623727f98346a26",
+ "0a38b2bd0e9a5044db19d4312ec88d19ce1a9bf0eede8c357f898b0bc67",
+ "0d0ebabc8761ea215808a2c3035b14b614f64be0c2741b3d7789a8659ff",
+ "0f9e742bdca44c11bcab196f910c0d887e90f250817ee7027f6df8207a0"},
+ {NID_sect233r1, NID_sha384,
+ "87c717eef6dd3c7434b2c91de05723783bef603d170f654b49a04b067b077c405d2d757c"
+ "e780101b930196ca4261efcfbd3fc1ebb762cc0eecf101072988aca508c41581936526d3"
+ "f337053000dcf77b16172492c5d654c6612bbd2523a6ad5966d7091697a29ce882fe331f"
+ "79a7eb59e5a3fe536263083cc59b8133bfd33c1d",
+ "0cca24ad914c24c011f41f80d27ea41caf41fcc8dc9dc6dff5248b2b474",
+ "0400175b73db13324a678b8afe086944a7ad257cd33fe9538c59b9177d1064016a98ac9e"
+ "0ff59de1ad94b50f8c709ccf4342f983c7530be64c3f1548fc",
+ "029c83def3a5c386b0bc3cf2663b8f4b02f26c6e3e14fcb17e9460087f3",
+ "061df783609ceb355aba3b1753d38f42434bd75c8354029966e7a788be0",
+ "01e8a093f53a1d73d5a994b97f2b2f210125ecd3dcdf77c68ea3199856c"},
+ {NID_sect233r1, NID_sha384,
+ "9bf48c2aebf473b3a4a928b3b6a4d2fb7e9193c9e60bc2067f9f03083a8cc7b892bdbf05"
+ "601118bcc34dd283e7be996bf19b0bd36727eb9d65276b6517bf0c77ae0a9091e7a9e461"
+ "82a2586eb22324939801034e5ba94ba30d1bde7d8fed51eb71036fab6224f8ff30a00842"
+ "2efcff7ea239ff23b9f462777e62b41b396c5dc5",
+ "0f5e12d536ef327e3b0ba65ac5fc3f7f4880f5968f3340eb8868c1d47da",
+ "0400b2910f5de9475486b3975ce91c02187e8803e68586f3a1df14df67648e00f28af536"
+ "3ed851c42daaa810afa1fd0d2e001da7764671fd44fb6737c5",
+ "02a018753965bdfda98512c7f9da3e9235a4a77aab9804437b652182347",
+ "0b6fd02b2d84b7baf1a5eb592cde667ed6d4c2c821ca336027a72d9abdf",
+ "02253faa5935885945121a374010b2257123cd5db4c54a2aa0e08c8197b"},
+ {NID_sect233r1, NID_sha384,
+ "716d25519ae8f3717da269902be4a7566d6f62b68cd0faae94bce98c8a4ac6f66215ebac"
+ "5407d6f64adf9d53f79f02e50921b6f0e8c805926a839443d30d9294eaa802faa7c5471d"
+ "81fd1db148cdc621a8dd0c096e06fb0b71943337d5325e1bca77062684873fe904ed9012"
+ "474ceae5b138e079f941a665a995026d13d7eed9",
+ "08c30d93536b8cb132277645021775d86c2ba8f199816c7539d560ac6de",
+ "0400d69332763cf533d48e56065e1b5255790f8c0eb23471fac9b945e6219500292df8c7"
+ "7d9a6803f60bf0722ed57ae2aa3bc816403b000fe2940e02dd",
+ "050967928d6089da5b16c88b7927de210325c8d8f5e727fa1ba3bd95b5e",
+ "02434697cb5c2ad95721943154bc81e2ae16332fa6629788f505bbc1522",
+ "09a5a6792b1b9c2e200ace5a3d50c04f69084dd9222c021ef5fce14d4b6"},
+ {NID_sect233r1, NID_sha384,
+ "01e76755007b2ee5ac9e1d4c8adabad6d0f9c1c08ac6e2622b7c1ead89bd3ad0921b9525"
+ "b49a780a262fe8fc0904a80391717ad7cac9607de55f7c744af8a132ec45ce79723f4a4a"
+ "8c8b9ef658b360bd3890df164c9f1cd74eafb74feea251a34514ff2a57ae7a6d4bec2067"
+ "cbf6ee4fdaabf13721bf9ae178b9034ac5e9665b",
+ "0fa3f15a506ccf7b50bbbad0a54d3223f5a95eb54f0d1f4e5d0cc21469b",
+ "0400e797527d57fb3a18c71d1e82e7935e37e719439952d4b972f0c1e0c83500a345bef4"
+ "c5015e97a148b8991bed4b7ef48947b12f316b5621e94d49d5",
+ "075afdc12d4d50a7495f5a7d309696dca23e9356a0cab11c3b3d7b8c54d",
+ "0960ef460000fe8c761038bab7e29d665100494d0874b6556862c2808aa",
+ "08d3c004426dde6c18b1c9ae00a44ac947e36755d8c40eecf47bfa963fe"},
+ {NID_sect233r1, NID_sha512,
+ "e95abeeb2c51a8cb75ab74253dbe130b5560cd52e2a63d501d26e1458aa568aca6694be9"
+ "1eee5fdfcf582c47c1c727084ee2b2c810281cf9b095808bf7e7c668eff00a6e48b06df3"
+ "fe6a445e092c24d5687d7d89acc8063275caac186c441bc697b2f67aa71b03294e1adeb7"
+ "e557c296dd91304ba0587cda3c984619f1eb4f2b",
+ "06400a4830889115aa88b860b3fb65905b01fd126c4aec2785518c2543a",
+ "0401a2051662c1681bbbf6bccbd33c44c7c7fc80b81a1bce14caa36a73f7a8011583d3ba"
+ "8f22080488471d8103f868100a97af94809b58bff1435b16a9",
+ "0ceac6e5d10c55888b9ecab8d3f6ada7f4d0bde2f109699157d194efa42",
+ "0c148f2337008ccc3e61501dc5df3ec95d3596d97eae96a7ab085a915d8",
+ "036d1debebaaef50243005e25c791b9674cd6fa986dc3d32e089fbfb2ec"},
+ {NID_sect233r1, NID_sha512,
+ "bb8d8515365d240b2071daef0d80558fd3d0e059be9f6abb7b7a0a5f47e2ddca7d1b3b51"
+ "01d5c583143258520ce8db0a87f877a395615c9bf879ef46f2f20f68bbc9706f82781fad"
+ "69019396b27f292cdc70fff1772e90205a2225f80889f9daece1d03914d8776ac5bad24d"
+ "8fb190ba10a2ca17768b918c2e079d83734eb372",
+ "0c7b73c324250f14fac0edc941f79bdbc6933ee8f64bf94b847bee5eef6",
+ "0401af7266ee56bf0518f2875d4f4d9ec508a01769d9c1fd0a885a48bbd80c0084167ada"
+ "99502475478465315bf8163870a9ec1b43f15d68f0304ab03c",
+ "03badc9b8098c3b4d7e943a2365093028b579519031a8643b50c0f81eec",
+ "07ad4fc96c21963395f56eb63e1b0b4d2c93d827626e7bd4448697ded97",
+ "0e7504e6a9f662472e3e6f18a40f7645922fad2ef7313d600a5a6ee314d"},
+ {NID_sect233r1, NID_sha512,
+ "cd8b2403435fac9caeffa21b55eaba52d7efee0f89df7142340cdffeb89556303ca01a80"
+ "0429397e2ff6c746743b6bc60a87133274282d4cac02e4ca90ad95d80c93b84163b96296"
+ "f67d40b2a1124b2b6534ab6b60fdee312fbcdf468d0e84eb85fce4ff360136bb31ced399"
+ "8d29cfaa3ae685e638ee272058f123c4f35f8b6b",
+ "03db7f28e161abf52ab0adc8c4c8544fc989af081303b8688f22b7b2eb7",
+ "0400ab94312e53832265b929f3d529bec33dbcc5c17b969e0afbe2d559ec3901d53b2c1b"
+ "e229e2c224e6e9fcb8bb0f044f3f9f5677c60bc9454f36eb06",
+ "034a8f980896284fe6d28b0b49703f1384d799e3f11a04b1e62da12965c",
+ "0e374fb355f30d7e427bc5db99ed76a914d6e286099c72f28c07302c741",
+ "08d5ffd41f8a1fd3de6c433635fddcfc2b21809d91496ac17571afbb856"},
+ {NID_sect233r1, NID_sha512,
+ "4bb08eeb202564efb5bda40777d71f1bcc4c7c10b611e803e5c570876f3e319e9e2bc2d3"
+ "2031c56a32fc0d1fcf620d4e4377d881e9e1695bcdb78acba370b849115b86c1c4b83edf"
+ "a03299da8e7fd14c7cadb81a8e4911c8e427e32c8c9b67e317575331967cf58085cff0c0"
+ "d48ee0b8e7dc0b49687bb1c70c703a5dad08ec81",
+ "07e9d2fdd017d6da6029e88f78927d9ac9437f542db1f1fa99e32bfcf1a",
+ "04018429bf08752aa470a8f0801170a7ab96adfb168ee8212d76ab0b994e460072a5071c"
+ "e308d7daefb3e8f4da4681842ffe0f35dd8b071f0775c83f82",
+ "0a0f330e011d34714875500b70c881ff6b1c9e96da930eef75ec78ac120",
+ "0439bcdb86d40e8f64db5dbead95d85d6a771d811480c5765ffcbf75422",
+ "06c01f64e2812d18b0946ea4e6599e8cfca0a2b606c3c35c803ef2cfed3"},
+ {NID_sect233r1, NID_sha512,
+ "0bce683d835fe64e6484328aa13e18b0956f6887b5e4442fce36ff09aed015889794e79d"
+ "a8aa60b4be565c78685674c51e1e7ac60db6a763c777198a56e382a03aff8b40862f961a"
+ "e23e8b8683b76a5577769422418972ab0049119382edde9e752b42e8b93f403c1ef8665d"
+ "7ce8530ce4ed9ebf6d397827cba6b7645e177231",
+ "0c94052760fc74c2b405ee4dd5dd2a7d38ebc16df9cc32df706075450b5",
+ "0401d2a5ee02d97f82ea9c8833b825cc57b0cb51d3f2a2cfa7577eba676eca0149c68d98"
+ "d0e9cb242962326a26164f3e3cb6d81b51f281474b0f8d333b",
+ "0fdd3ade90da682676d40008cebeadb9b2378d8a821e9e9428018cdc768",
+ "0f6d244daea95002daff2ff6513da694eee58f8b6c2d47ad121be87559a",
+ "0b04788fbb5655a053d0fb7a38c39e1fef68ff17860442ec8b8ad049842"},
+ {NID_sect233r1, NID_sha512,
+ "a6defc770426daad4dafba3bbd2a69881334f7c31269b297e440926db54cdad3fd7ad200"
+ "f5ada2b72ad221ad99a06ecac9c2563a8deed89f0d0896991d1a652f6fa282affefbdb1c"
+ "1985652300d1792725071631d75a182b683a48448063c7d2563ec3d430e0fd3acea33a35"
+ "cd38ec0b5b07af96af71d0bfcd879d9864ededf3",
+ "04076b93487c2da8aeaeb4725fb53b7b41b465315335c18c6ca041175b4",
+ "040158755fd290910498f6c8eed83bcebcd1fcafef4878c860da118efa250c01781fdae5"
+ "01c2c147eca2c6c809d9428fff2f853b57c7d6add70fcfaa0e",
+ "07debe933553ba3420aa06e1bc52a1653f8a19b59c0bc9c47212389442e",
+ "09e09c6d96e33c845535468ec7f5b79cf30123538011d0b5ffd935d168f",
+ "0963bbae921317666f5852759e9ebf05cd026a5d9f026942835ff0daeb2"},
+ {NID_sect233r1, NID_sha512,
+ "7803cdf4758c199962b62943f475c6c31356f5d9b997a12e21146a2399cd0dd3b97a860b"
+ "2ce639e2801571599136d4a8cdbfb12fd1a5ce22374991e090533ff42823a2c58d2076b7"
+ "72814eea7fd7a1fde68263ef912681c72c7aa3e5a7cc44ee8c65e72228b7631e600121ea"
+ "35bfbbc783b6ae3c0c8f80198ada218be533760b",
+ "076ddd73ee4fc1f5e6766e229cc7236cdfce312417ea291f7c3328d5ab1",
+ "04015185e029c0d4eb5102e0fe900ef3c921acc744feb44570a288015d090800ed56bf93"
+ "394a434cd84b521040d40452bb39755da5e273a05e8c0ba792",
+ "084e9e4a9c84a602c18bbb6b183d06969c8b8538e2ff901f1c2794d5eb5",
+ "0fde8e9b1959477ddb3423661df1e7182e4b583849d6d17fafd7dc5406c",
+ "01a12bd30e9c8b74912c670c0845ff5ecc77f29797160bd4992efa61f4c"},
+ {NID_sect233r1, NID_sha512,
+ "e789461e1dad0b6e21abeb6ae2e96385549d1bae39415188c8f833233da6a3328144c97d"
+ "db36e0ff4d9e19d84f869e79e609c51b32de59892fb0446dd28cc164a3e53534c950d26f"
+ "87fb74e682db2038cde778bde06c3ee2eca2a077d8fcc2b0332e352e0e7e6487444a8ad6"
+ "0e78ff213b16fda9faf374dc6d27b7a3c4c6d196",
+ "07e1f8988ad804aae7d09a99be19384cc599e7652c02c391542be74b17b",
+ "0401fa4751e507740a7345e06a8964022fc6caa901cf0c2077a2c0fb86be8a00683c593a"
+ "0bcd123d958deb6b430d49d5a2386d44706f4149dc526ad896",
+ "01d288de55b90dbe72cd8f1f86a3ffbc2902f4b5f0cf4e641d32aec6f20",
+ "0048d16d87dbf4fb8e994dd874c10d5d16846b9ce2cbd43d09df62ca970",
+ "0e2ee47f422095d629c188df97e2839fc6239b9e2dc26baf8161b037236"},
+ {NID_sect233r1, NID_sha512,
+ "9b58c145d1b6c887f2b25fb672cd49c3a1117224be697c15182d4048be92968a6500f8bc"
+ "f747fcf33145c13a8d72e891a6e0c4c7310c2b62f3181bf586fe32f1ecf4feee8c2c8bf6"
+ "c2bfdf9d5f88981ce080095c93e49a772d8e7b59f9cffccec3ca2f212ef4c6748f64e224"
+ "f4f098334d83108bf6f8c7b43c5eb549f1526897",
+ "09b2292b0244c2aabe8b43d95039984d504ebe05eaff318760e4dee739f",
+ "04012618d89f50b7f83ac470705dbe9ed81beb03929732a3f2aa7a636eaf59015f0f70c8"
+ "08e053b112a8c32ee422aac2b926c5b6a279a787fddf819990",
+ "0fb38174a83ceb9236fec8ea39be2b3c77c3dd2cf42d140e27838202d08",
+ "084941856a387a56022727f81a939d77d12b01dab603ea0cdef6d9cd6c0",
+ "0bb9fc30595f94d664a590ed4f163e4526809819baf96bbee629ff86bd9"},
+ {NID_sect233r1, NID_sha512,
+ "52310a901fe9681a23dd6e02f12974d57f2c4f653322d9a0ff8b338cc6c2bd9f4765c90c"
+ "6b3c9fb17df3f492e67d204e39d81a8fdeb92c852a1dcc6151ed6c63049037235c6751c9"
+ "a902748163a567b714725b4d3995e0edbde03215c645b1a1da3147f7406245432800c50f"
+ "823a1f991c863427ff4c68e4e16d1b106ee40dd9",
+ "07ca463b50fdd92d9163f1c2bdfce2ee45ba1437b79162e3e959b814cab",
+ "04008eeeb146216c73ccff0096e1100008f8b1f3f0c5754c0abc4ed39f7f63018c9228b1"
+ "1888edd66b2e661284f583a0e8d3c3e922932cd9fc1568f959",
+ "0025291ec0dc2b0c709c5e69695980564552545c2497636b814aa049ccd",
+ "098dc98457ce6e69f77123d5d2460ff569786dd60fe07e847ed5bc14da9",
+ "0cd320afad2a4247fea5b74d78dc3df8967ab3159b4c8b191814d368dc2"},
+ {NID_sect233r1, NID_sha512,
+ "ff419c011601cfaf833067cf28dbe6e935ebeddf8b5111a97f6eebf3bb28376334f329cd"
+ "877a134b074790a073db766efe018fce666a34650cbac285ae856fb6b3b8b96877282bc1"
+ "1cd9f9c8e510ed1f69bc2725a44a1d2b35de1edfd8bc9d20c7525ab0bbc27662a7cfc1bb"
+ "d1e0f4fce5b88411521e3893e027cc8c73acdabd",
+ "0c3844750f63fe0c2e930bc38fe88522f4e72a2fd0db9778ade20e939b3",
+ "040075acb00b5999f8b272a15a2cbdf8cb630dc3eeb1e78e58f58e467396f2016711aca4"
+ "24ca335878d273eca75d804d3f009a1f3628568530ef265eaa",
+ "0a63e7a20d100f14b8b709f0a6c383166c2151a36dc471f061b0f20dac6",
+ "04063be9d8e4f0f9afe0c79374c69b36910b5d2b1010e0f4db2e4cd23da",
+ "06a6eb90659aa79e4a2360ea9ffb99a415175dac6c3efef104bef6fd57e"},
+ {NID_sect233r1, NID_sha512,
+ "05a89c4824c5de66587875011e704bc6e06e991ba8f3aed331cfffe55aa266a08c729f77"
+ "b8d082dca4d286b2d451ea838d726cc2cf298fddf2d7376714c5e37b64506f353917caec"
+ "525a1209391449c078c5197a371feade74f8fc8a1a1d67576edfda13c14ad324342fc0b0"
+ "9277941dc072ec0d39434ff1cb91fc59478fcde7",
+ "0a3bea235dea86506be4476eb7999dcb8e584a34238c4a894ad6823b93f",
+ "04014093a072c21c44d1c4beddc5c8dd9a2845db0935bbb4e1c4edb0aee032013286ed58"
+ "4deb744c9c35d7ae7eb9cad1c7ba2b670642de0399b230716d",
+ "078eda19f0cced2f84c1a7b354e5a79bec035b8bb279473f32d60f5d17f",
+ "0964e817f0cdc251eede4157a9bd830c476627c3f27d2931b4f593b0178",
+ "08dbf34e597ae06ad92b13900a4944e54a5bf0f16f586baad157da6dc96"},
+ {NID_sect233r1, NID_sha512,
+ "13e6b5241365d9d0ef9e8b05cabb3248afd221ec02eab92284b98bda3d9272184bfe5251"
+ "d35705defba5085381430e99b33a3ab77d7870e5102757d065862372df2434a25556b76e"
+ "54ebc39d4e6c3aba5cd6acf0c335756f7d9385c1068d4cfa37526a9a58c0ccc7f87a8189"
+ "176c5d4f201499236058ec061357dcdb5acdba40",
+ "09a367cd1cffd8dfcca179e167ea437ee48e9b6f42559dda9224701d3f6",
+ "0401052d751901f6f8e61858d3b15eb59dedd21e4e997531ef65622d5750290112737be6"
+ "7ec621509d73cd613d7b448035397fa66eb881f90a6d531ea4",
+ "0d8dd8f1cab623ba6a4e840962fb31de97a4d14aa6dd34dd21154105030",
+ "0a8276d0f069f34c60b26a55d47df69e4c9ae2981afc59e14b5bfcaa498",
+ "09351c4b3a06b839eb2e9f450d9c3d15efa45509886ea3f2610ee1dd156"},
+ {NID_sect233r1, NID_sha512,
+ "139a1a5090b97afb8fecfff8745efacf7dcf91a4393a7b629564e598d58d5be39c05c583"
+ "0d4c8ca85d29e9e2c31ad0447864e867d0ef4788ac734f8d871daebceda98d449308c2af"
+ "be97724c3af8a468f1925065f39e52ba4b7d15728a744b1252a20476dcfff7bcb82aa72c"
+ "209e72abb3c24419bc26191390ffed340c1b9c6f",
+ "046f4ad2522e78b9b35297d28f361fb0ce82306322aedc119251d8241be",
+ "0400b976c53a966e0834d5f6bc3af10a5f12cb6d16cb2303a3c6cee7d35f2201a1097cb5"
+ "6662265f4f2f52df375d70af086264752477c34c6af522f1ec",
+ "06a0d21e5aadcb0c9e3f9fedd2d896b0236dc90e33778fb114e970122bc",
+ "068063fe0a31b7e7925cf8959c3486985d98f58224d5f67cd0218af192b",
+ "0f11a22ced98173040062ff9e69d1b2a1b5a939eda0a6944e96fc62fa4a"},
+ {NID_sect233r1, NID_sha512,
+ "3315e5cda5f252e3291b61e493ab919c20a8af1286d9660cfa2f5ca38b6defe19ebecf82"
+ "0787fe692d04eae8a5f5d37abfb593309569cedf45efd0cecef6951b718924c8380ba52e"
+ "8ab8c9bfb2261ed5f01cc5a5f9fc5fcdd269a0f122c597afdd9a836cf8f96838c3e8962c"
+ "1788c3ce4128719b3ef4fc88569643dcad6da16f",
+ "0ac82137e9c7a5ecfb8b1a7df9ab50732934566a392a6c8915ee8ca8144",
+ "04000f7f835f8223fa6c49eaf6650e33dc9d09e1d2bb098925d908606570b2006e659ce8"
+ "623767e8214b076d7588746bfdcbbed59b75bb19477366cc78",
+ "080655784e3e31c6a498a63d4d84f7e5a353a66641ca17d4e223441bb1d",
+ "07faf31d1d31ef4edac1c63072350536df84c417e0ef808c6be39617e74",
+ "089023aeb53ddd3e475d11c53479863739e62dd64348646581012784689"},
+ {NID_sect283r1, NID_sha224,
+ "067f27bbcecbad85277fa3629da11a24b2f19ba1e65a69d827fad430346c9d102e1b4452"
+ "d04147c8133acc1e268490cd342a54065a1bd6470aabbad42fbddc54a9a76c68aceba397"
+ "cb350327c5e6f5a6df0b5b5560f04700d536b384dd4b412e74fd1b8f782611e9426bf8ca"
+ "77b2448d9a9f415bcfee30dda1ccb49737994f2d",
+ "299ff06e019b5f78a1aec39706b22213abb601bd62b9979bf9bc89fb702e724e3ada994",
+ "040405030ce5c073702cffd2d273a3799a91ef916fcd35dfadcdcd7111c2315eba8ca4c5"
+ "e3075988c6602a132fa0541c5fda62617c65cfa17062a1c72b17c975199ca05ab72e5fe9"
+ "c6",
+ "2af633ac1aee8993fc951712866d629b43ed4d568afa70287f971e8320fe17b69b34b5d",
+ "165ce308157f6ed7b5de4e2ffcaf5f7eff6cc2264f9234c61950ad7ac9e9d53b32f5b40",
+ "06e30c3406781f63d0fc5596331d476da0c038904a0aa181208052dc2ffbdb298568565"},
+ {NID_sect283r1, NID_sha224,
+ "44adcb7e2462247b44c59608cbe228ada574ecb9f6f38baf30e42b589fb9b157bb0560e5"
+ "a2aa5523b71cc0d7f583b502bec45d9b8352f29ee1842f42a17a5b16136feaa2efa4a0ae"
+ "306402940ecd6b71e57d1467c98e7960de2a97f88b43487e4f4016af1292381d70c18c7e"
+ "6eed99a14cdeb5b3caf73688658e4c5b54c81e08",
+ "09c2804f8cab768248fb3fff8a055b3f4585c00de5c1615a19f9425b9432ea09afba8f2",
+ "0402570ff62b03a5124f08f752aa71ddc57944cd94197fd286d5a2a107b116d7b8ff1b04"
+ "21037714d9abe9aa0a9668fce89a3fcd5cf2e4548102a181a777c9b3f1008ac6e8d3a31a"
+ "2f",
+ "0dab5ef658ae3e2ce2bc5c88a8b8022a0ca5eb8524815ffae414327e3afaea5fcb8a7cf",
+ "2d99f82d92c9554722bb793988af0fd0bea776c5608f5939db7c8634eeb24ffd381dbef",
+ "27ceb1d01ec9a3ec0e74d79e08024359e117488020de6458fbbcad28b173918fc7d129c"},
+ {NID_sect283r1, NID_sha224,
+ "cffee6252c7eb6d91d8fe100a1e62f0ad9f862d78ca2b747a6c17b8c9ea8980dc239b3b6"
+ "73310e6e7483582399163e39d889abc1a613fe77849ebc09b4f7f4fe0688b8a9869ae918"
+ "a88294c7ee199be50ee9460db14725ae70b449d0cb48f30e7d817ec02c0cd586119341db"
+ "a0b74f0279330807cfccc99c8c340b72c1764a45",
+ "2e625a6bc6d0ce7c06231de827068bdb0abc8ffb57c82b35ee3a0f873b9473905974d34",
+ "0400458bf39974812a4e0964c31f40083300454104c0d65f22c5688bfff3c256b7ea9589"
+ "000738dd33e32b9af93ade2dddf4147187a9270543afdfd66a0f2a53d6d3d815ef59795f"
+ "60",
+ "0a9388815c528fdadcc5d3b125c7a38db57fa8c163ba795ee00e8e307bf760619e705c9",
+ "2481571400ecf9dd31dbd9c905fa1006cd5bc7afae759da3312ead8d5a7dd0c25a37ab9",
+ "13952fa427d348b6347b9e93d4cb2c4cae3429dbea6aafd1e58d5a34805098722b3b8da"},
+ {NID_sect283r1, NID_sha224,
+ "d058ab5dc07228253707ef224897ea0fcd09c3d5cc91fdce9e03c1c59c53fb4596be2ed9"
+ "29c7455e67ac7f4891aed3eb06ad88f2c4aaaabff045b959f900d1019d706b6052637585"
+ "1bb891494e99995928e4cd51c9616aa651ec77bd7e398916bb9ed3156391bf7fb1e29181"
+ "e2b011dae2edaf803607def2ac6b194929a57f45",
+ "376ac24e1b86f8a55c052d92a0bdc6472fa03acdcdbccbf7c321ec0ccd97aa0a66b4181",
+ "0407247c755b23bddf944e29348da82495b4f61d02a482c6111d8698cc77e8dda4c341f2"
+ "0b00f8c199138e1f4f8344facd90ac62d55f3c9a15ba7a672ce40241aa26419af790cf7d"
+ "d6",
+ "25d07c7afc5a335c2bd7863c1965a48c12f2687b2a365a7c2700b008ee8a0e8e35a68a1",
+ "23fc2837a879b79e470305088acf596eb0159edc2008478cc4c3841a1bd66fab34bbb5e",
+ "0a909b83bf77e74511063366ea1d1308a8a544864783459a60fb2669785ab1af8f4cb06"},
+ {NID_sect283r1, NID_sha224,
+ "c86f2cc7ab5df5cf1a236fd83792769474cef464032800ffe98a44cf29dbfb6f24088160"
+ "eb31a11a382ff2a49f3e05e983462f5304272f96c0a002b69af3d233aebe867ee63fa466"
+ "66760a6889d022c18645b491f8d71b6a3b6b4ef058e280cf625198715b64b025bf044944"
+ "5d3dd7e1f27153926e617bd2c96638345431d1ed",
+ "2b50a6395fc02b9ac1841323de4520292f913519bc0d6a471aa28021322fc4dbcd7b802",
+ "040696d5ac4bc40e679524e246210b7bb0f93ccfe7dc506ba87be3fd018f829c93e62ad1"
+ "d8065953e01d9db8fc5d64516d864a33aa14af023e601d69875ac0f7af92a1e78aff0e47"
+ "5d",
+ "0aa25b43329de4e7739fd9134e4f4b3d68a64e55af47a2f6ccf71f518f19059b68d34cc",
+ "1338a5dda5fa09667604a6a7666b0e54e6b688b98b31c25d037ddf55ee6bee7565dad09",
+ "00aec025232c16e778f90785ded5348f3d5345b8344b2a762480383777328e0a0b11cb3"},
+ {NID_sect283r1, NID_sha224,
+ "c1328d8d2e5b6ffc850a9600bd6482518ddd9cee3fc9140febb72bcd444b0cd7e8074587"
+ "d51b62cce4b3d4f34ad3355353fabe363369cf790db2df9fdac3a0ec4757e2dfb3b683ea"
+ "a3e26531691ce765742e1c0bdc0e1028d347b6085fc459df0989c6a144271454eaffe413"
+ "cae2ad7c8b2371fd2df1afffe56df727009765a2",
+ "24e5889722f6c35e18ca47effa9e415b1ba790066a91fb3c9f7b001ce28fc732b09bc23",
+ "0407d4a57e6aaec6b51dce5408f6a7fbe9ba9d55f5abe2da55fcf015ca25dd74eb61c155"
+ "6c02123390178b2992059151afb51ac652b364f562c65451eccc65d968e9e7210921c93c"
+ "9c",
+ "320d2a7f48cf3583e8d7e712b330d40ddbe4b6c128be5a43d72bf57d4227603762de7f0",
+ "09806a8e70742c6c4a9ee6f77fe7a36489e1fe8c442ddf9cdcfa61f019ab9b41241d949",
+ "061fda247ba7c198aa532906bc01d509088d6c2ba0f14ca3ecc5ba36f3595db1df3e64c"},
+ {NID_sect283r1, NID_sha224,
+ "7176b7013ea27e94281977eacb976bb31c753bf80fa09680a29128a6fc15234f79f0e990"
+ "0aff3217ce9be72c378042c6c34fced0158740073d1a985fa25987fb218002e425868fda"
+ "5a47de51abfd04de34e2b8634cebfbdc98e80f93d94096193eaa82dc8778fc23f3765c7a"
+ "cdad94fdaa272df0ff0f28190c10a462ee78ac92",
+ "056d15b81f40b6378588a5efe43e21b95e18120d514bfdda0e7759a1d0766a8a35ce5ac",
+ "040306cb78fa576bdd2f43cf7b71d7e66a98b850d87ac087dd2e1ff62596a2e8d4cfff13"
+ "4403b1e3b12db842e00c2faef04d3e39cdb71546e4e3ecf21eacb6131c3501fa30edcc0b"
+ "70",
+ "1e8969d6cad41a40d8306d2a8db3290d547106eb59f661e0d0eeb163044a92aee4483fc",
+ "06786637c3bd5a95eba5ce015f151d99845255175ebb9e593d912c75cc45723612c4ed5",
+ "384471c17c45ddcf62b588993835bb913be88f7a8e46e52e211972ffb3b7768410bcb7a"},
+ {NID_sect283r1, NID_sha224,
+ "4c3642ba040a9955b9d50dcd1c936688c17c363854358afa8ca49c6abd906dfdc4d89bb4"
+ "cab0bbc363fb5b74e1f004d4b09ec9dfeed4c0bfb482a9061a1f487a3d79195ff7b65a05"
+ "04bced3a28db0ebe8fcf8ab1ee4a3ae91324d15d890ac4c479144dd5538d2e36d3a58776"
+ "9ee9cd2d5c6f85a03362a022fe0efc4a3902b71a",
+ "12fb2fb5bf5f7e42a500154823a174ba2d05af71e3b0cf47fab46e673ea1822f1563def",
+ "0402414d172d74a6281169835d18bfaae91f1f1cdfa9ed451884466e63160ecdd4a2c790"
+ "6f02d892bb19b47a4fd9d851d3b101ba99acf6d11345596635cedd5d7557427a2896a913"
+ "c9",
+ "20786f42d77195bea5761f86dbed8b452f858b447d2f3775ba2a4865d738122363b50e3",
+ "334507412368f08bd0992a5d56581ea7139e8adc88abe4bd80dfeefdc7a37a481b18609",
+ "0fd8404df06a02618cdbf6c28610d5dfac9907635d9e5f2887f11a7f18cb8b7ac95b5d5"},
+ {NID_sect283r1, NID_sha224,
+ "e471f39c18b081362adc7da47dec254dab8d765f005ac574640d78c14222639245563912"
+ "d942f3be212ee3cef134407334c8fe3602fa0e1629de5331643d76715dc1b0ffcebd484d"
+ "86c5211be4b285a31688b205fa988e6c15b36daf396ccdcc209c7dde2a732f5c31c84c7e"
+ "a041408ebf15e56632583af0131bd7f531b5fc45",
+ "30096c54fd480647e017f8cdbbdef292e799f054e3279d228b09816a757566a744a8266",
+ "0402d4b28fec18cd888017fd5a27a375131bec3aa7195c0a4f255eeb3616437079e356a6"
+ "cc027c607dcf0b068418eaa7de8da6f9707650e8d95aec571f7ec794415fc175061b4515"
+ "19",
+ "36880905a376faa594978713c2de1a90c8e27baee65bc60b1fa6508fab5abf843f66ecf",
+ "295193f1c64181bdf749987bbc8ff2a188126131f8f932bb8ca952ffa201f109762e18a",
+ "381c496b4035bba880225dcfe74fcf101103e38f9518d9427c74a5ec86ebf8f7183694e"},
+ {NID_sect283r1, NID_sha224,
+ "8a93fe53e83075c4025228540af7e96a588520da34e3eadeb99a4ab2f3dbbb8f85fe63a3"
+ "b86c1f4ec912e665ca05b43e869985eae3791b91205afb1380e16c25b74e6793fa63e4a5"
+ "5dcf25dc22d03f09deddeb9042b620434111afe08c5657c7d754af66ad91a1b5423301b1"
+ "e8e6389a1404060d1b6a99fe0f89598482979e42",
+ "0a1b7e9c8c2dc25b494b5ef3195b294e41cd3c2c35235ab42542bd3e2a52d5826662bf9",
+ "0406232063dbb66a56e2a92dbdfd9b3c136eade9c214d831691d9b49c56a3962d20f14b8"
+ "a901b47b85bc223fde1918abf6308b74dff7f3e686af9c9d7a1855a1b77984d258c1f9ae"
+ "da",
+ "29b4221eebe151fe758218138535d81182c991c3b7fed93f9a6117e98c1c2f97e546937",
+ "1f8040fad671e2f32a1094413ee955ea5426bc906b8e034d87d7408e63db173b05afbfa",
+ "22a353c431a9e9315ff69facfa4e15f6e6ee1be2750472823db31b49b17fc759e6b94db"},
+ {NID_sect283r1, NID_sha224,
+ "e193a8ef6f454ca1aed38bb67aca6d08280d421b196d89938c0582b7cde74dafd71716f3"
+ "818940af412d4a7ff3960a8517aee108ae03576b68ee7557d35e6f1ab823d124de7243dd"
+ "02b542591f62c80d822608572889573e4c9dc62f99d68e07800da6f83cb6f5e03d1f2ac1"
+ "5f90e38b4f25e0a75e354e4b60cc81c0bbe81d39",
+ "059b1a8fb84530bba7a607ee88310e31bc6ea6a6881603567a1081a05a3a9ff87e719ef",
+ "0400b9a71aa3cb4cff37586b1e522b0e332ad5962eec3dfeffcef3851976baadf611ae52"
+ "2606b1bf0b43b406b5edc6782fd391d9fb070fa3570d3cd5b2b66d7a95dbc45ccb162617"
+ "2c",
+ "00a77307da9845ec4572a24c9e74a17b76b6393da87a9d7b1b8456235473ff39d243ec7",
+ "36721835be490b5ffc4a42bee3c6d231417f7038c367efd9ecaf7fb3618ae8492906de0",
+ "237833bcc3e4a721e2079e579d1aaf2519c01cc238056fe0c0990dac7fe50e75eaf6f96"},
+ {NID_sect283r1, NID_sha224,
+ "8a99b9db191f6cabc88b430bc2293e6774d5180f019d871839289e25aec29379f14606e7"
+ "42190b7aa062e3b29fe0254146d9614856c5140c7315015abb98ac00da2c7e33cbcc82c2"
+ "4b797366f12767322c4381454d9d1eeaedb616b0ea5c66d1422da459f18081f4f966d05c"
+ "e279c6ee69b1bf94b8388d38d4b770d9ed69025f",
+ "30ddc2c7a4ce300cc2b75f0f977033f16c1f8bb13aae3d494c381f9a6dc8622499ae4df",
+ "04047bdfd7c77ae0c53e327c15c30d90ab1c9b670fe2241dc0ffa939fec3cf6d3c1f493f"
+ "3a06a286aa2310a4d0468b62f3144a9da2e66d15bf86f60045824278e8986ff87a276119"
+ "20",
+ "38afc3d11c66eba3441a5ea298fa593eec57b84ea29973c306ac9d46bb8d8e2f4c8b049",
+ "06c830f6c0be99fea4712f1c75f5a4e439800dcf062a16d93135c3255d3cd04bef5bc7b",
+ "1eddfda0d0e02d382ae243e604f76939dc21f3ce106243b2d20aa562b78e620fb456428"},
+ {NID_sect283r1, NID_sha224,
+ "5c437b331831530aa94623b1736f00b986172699f0a02a5e5df0008bf25341787e2e6604"
+ "6f2c929dfe0058c3cb89fc5bebbe1025bb1edd1ee31522ed568e7b5b4ca3991afdc76a68"
+ "cbc2c4f81863e27fdaf6a564fab2c6354e5c657de81390f8a4132669fd24a48580c716b5"
+ "b7961a9c091f614d11cf45dfdaec8946a54a11d8",
+ "07899928922fbfdb5407517725edf231d15a8b62d90b7fb6d8c8d20424850dc44f797ed",
+ "040614257f54514cf37df2cd78850658a85ee362764ab8186423aa0f9a1ff486557f8f16"
+ "7f03ceae9d1370df045d20f576931ca63bdba8885f463d5c82e5edca5116ed3d2c2b0c48"
+ "61",
+ "3395493478e69e6e1088166f622a4f9ec7feb998aa552b54bcf0fc67c06079f45a14993",
+ "3f31ad171dd59c9deb21851e631f223584b17f72a6807d5239ae31373512def954d5ebe",
+ "28f095ae43ba5bdd899573ce6823eccd8e127c6c03cb59dff43c087ca24e1ce5504d1ed"},
+ {NID_sect283r1, NID_sha224,
+ "91aa08567d8da4c90684dc06068f69deae240212842ff1786f04ec41b40d9187aa92c764"
+ "01f9fcedced62876a34df82ad7c1e63b68bb2a972257ea8542bda6a7f1a020c9b122943b"
+ "6d651abda8b8d322a8fb762eee376daa2d3637a71ed6c4f5cf96f61c0da2d6e1dda3370d"
+ "80e51da2cbd8aef3267168c67359523faf910dfb",
+ "2a2af63d1171930758bd3e5bfdac62cca1a83a3b55a49b3f80cf0d9ee4b2082757beac0",
+ "0407dd6fd0868ec478e7e5c08965fa4f1efe8db4d0c04f0b6c63b5dfa397607a0d9d5ce9"
+ "09054ff4fba9058179a2c61951fb4955cb637b01267f8f08b3aad614738c562f602d498f"
+ "04",
+ "179482dddd033e8849abfd4991304137044d7433d7bf858a794340ea1cd66e736b821fb",
+ "071f4cb000ca1c51c698c867a78961e6d7defbd60109f79d1d165ed045a653ddebabd10",
+ "1e2975f4a1fce0b3b0e13c3f50005fa664ee9319cf774d2e107c406d36158bcecb0e5bc"},
+ {NID_sect283r1, NID_sha224,
+ "eb5297bf408c1a55e400a20a3c10acbc5c2bc6d6ccfcc0941fb7a6fd4d2834415a6df86c"
+ "3a6c4b867d1215aeb8222153da8cbbb1576c92c07ca2c36d8f243fd911f9a057e39ee258"
+ "32454e28d7ed52a8d04169b9b9677a16b32d5d211b8573a8986e9bf36d7206417ad2771d"
+ "aa11bc21fd7ee1029b65ff7c9b2705a6dc9cf9cb",
+ "35994e89e13916ad82608f74a639e6aceb756ff913aec440519946d6434af9a60a6af49",
+ "0401f7805dfc9f90d4f8a1b241dc9d68aa41cb77b63d530cb3733cede23bb87ee5118e5b"
+ "be01c3f1aa3a1218de78a94ee8f88d3f787fdc68674e31792d919dbca681a6db1dabe89b"
+ "61",
+ "2116684a4307c67a3d8c1014b33b928a962a8daf86c4031b0c1d47315d74bad7dab2aad",
+ "33cab952e9382dc074d666f1f2ab2bd72ba394a404ce2fd02a6f7a4dc096d713827c94b",
+ "33b2886738d882146c0cd715701fe4e8b94b0d28c73a6b79d2899391119ba910bcbe3be"},
+ {NID_sect283r1, NID_sha256,
+ "f415d0adcd533dd8318b94560f86732c262ad2c6dff9dc83e2435543f429a2158cd2fbab"
+ "0d96c027f71008c4895ecc644c2ceaefa80937f6cc6338d15d36e459a16bd9387a361a6d"
+ "800acfd834ad5aecf442e30b70f5bfa164747cf9f89325b80976052a83a5e896c00c54f8"
+ "1472b14329cf23bec10a8e693005de2a506ba83d",
+ "29639da33f48e4fb0d9efdf50bba550e739f0d2476385cba09d926e789191b6fb0a73ff",
+ "040770f9693777e261db9c700eb1af0b9e9d837ce5eabd8ed7864580bfb7672ced8ffca5"
+ "98068aef01c8126889204aaca8f3ccb089596f85e2aca773634bc5775ee4d27c77f2af83"
+ "e7",
+ "32a930fdb1ba2338554a252d1bf7f0169d18750a4ec4878d2968c5e735f98b9d0c25edb",
+ "30cd65f1097d3fa0d05e1d6072675f1377a883b683c54b8a1f4960f90d68f3ee8c7bd98",
+ "15c61ddf43386a2b8cf557760200ac06a480797e21c92e45e6a311e1a508b03c4d9632e"},
+ {NID_sect283r1, NID_sha256,
+ "b178d86c9335b85e02178fc4551769db589ab91d823fac219c7e14e2f029753b20396238"
+ "9476723832f8d9631dd7764e6dd35da290afa42a794476f5c7727b3688aced848dabc995"
+ "4201578cc7b25801710931f45cba1199d3788d64dc0188412e70723fb25b8ecb67183581"
+ "50c4037b5b81466dac1686cb5270bb1c72d34bb1",
+ "0583a7ecbf2a975a32d07428d27ac82e5dc13d1466c4fdfc1e6a05a8d9a289f1010617d",
+ "0403775ec793ee4bff15027c70d9bb5dedfb7d2e41af8895faddddd4589cc5a00bd222b3"
+ "bb0300f7cd572d82f2f0a2d99a83977ed2034e03fdd76a0267455a524bd8199424ae5b81"
+ "ca",
+ "1e58b1f66c927f4ae16143856d67193d889debdac8eb03936f1b36d550c2f2639e13f8f",
+ "0f897dbc8ea12f4370fcd08e8700e5e4c68dff97495f401d01b782f2ebbe259bc0dcf25",
+ "3c32424fdcca39f411663284658b8f0c1f950f0cea4354f02f4b359f18e3fefac0976e1"},
+ {NID_sect283r1, NID_sha256,
+ "c8bfe9fa7c848531aa2762d48c153cd091100858aa0d79f994fd0e31b495ec662209a9c8"
+ "761cd1d40c3d8c4262cf4dc83c4a2549a5cd477726ab6268b4b94a78b1c4a7e700812872"
+ "d7f41912a723dd9abc305420ea1e1fb1fee41bf643f3a24abd6e8fbf6fde2475e2905277"
+ "24a6f99fd75374bf7cb01b34d3e60d8db33c4de1",
+ "0f817ab1b49131fb9bbe8c112c25a36f064efa85de7506fb9cd29d81b326bf276277f7f",
+ "0402b3a06e07fce1848494d3227ff77d1c43f4ec3c037ad73ffebfebeeae87d3bff7f7e5"
+ "9a075df52e6a34229266ff28b1c217538ae23b3912e4bae8de5cad9b57b7c1c9ca8aabb2"
+ "e8",
+ "0ac57fbb899193b88fbf4ff2c502af72943b133e8d40459a833275212f6644f566f5c58",
+ "3e13307d5fc2b7ad24e9422355150578c78e1c99a6f9a24f9ca2e8bc6856936c5c4af2d",
+ "05e8b77b580cdacc2660e6f8a1877d93c5983d135d63ca0e0b06aa8daedf855c9f661fa"},
+ {NID_sect283r1, NID_sha256,
+ "9a5f563d0f9fd1f31f3a822de628ae970954f4e71292492d727109036491c29e66b9b0f2"
+ "c90c26abe94c08502f5e923a9ddaf6a7d91e9541ce90d0a49f03ce4e4769753d5b7d922e"
+ "1ceaac4b4cfa4262732a09550aa076b8ff9d46a50fa17de17e3b6bd606698464d116fcd5"
+ "f1ae11bf45b0c48d3b738427cb47b0d1272b03cc",
+ "2782af76ffebf3e2bfc0576b70e4f4bb87c762e2bb230d278ce776310a14f5b678f29af",
+ "04000dc21b3be7efaba5c7f9f22591327f0f97083d4d844415d3148d227931256d026ec9"
+ "d401276f1d9e131f13bb129a1192fa24602fb508c9679ad2124e49c70a891777cd601955"
+ "fe",
+ "0255972b5329863f380de945574793beb0430dc416a8f2543330a125ce8d69f72dbdddf",
+ "25bcb54e188aef6e362a62fd88daaacc8e697dceadc8a6b6f804ce4a36856c8da6de97b",
+ "1e12e18e1e281606c16ed1f49804f8cfb33c29b0ae92c072d5c41ee3e6836cf1813d722"},
+ {NID_sect283r1, NID_sha256,
+ "3d6b065721da9de82cb33ec2c27107eb399b1e69ac8fa51145ed4147e20d72e27434104e"
+ "76af988a3bc94f55e36677a05182fe2376dbe38195fc6a30673a4dca87336c7304f3f31d"
+ "49216fbdfea00fd1e105d8b0c13ab11f8892e0045e915c17dfaab07b24ed21b06af5a8ca"
+ "d4f45fbee5a25bb6e87466a7bc422c0bb896440b",
+ "31b827b88f14d3822244809096157df3c0aa99da90c00cd9f0b18dfe306f6881834e6b6",
+ "0407b3ed076a2901ab2625bf05fa6db10a8c156412fd2d26741738f5eeb6a91891575269"
+ "4606a8cc2061352c36f264d23dc2857fbe02af34397ae5130c582e885f50f2c112f141c0"
+ "7f",
+ "0b36f5d6da409c4a27f38ff9686cbf5f4714f4e17234fbee6e6deec97c9f0d4c585d42d",
+ "356911114c9ff9ae4f3a4fcc5379c987b9d298554cdd39ce124f04707e7fd1ea25231e9",
+ "13c0a321c4c5a1e89dacddae38a9b3dda32a20627e53dcdf28ee26a550797c255eefe6c"},
+ {NID_sect283r1, NID_sha256,
+ "d125f0e2e6135567adec9e77da2afc6862e28d618416632ced829d14ee8b61116da59dfb"
+ "44098a40a0b927731125617e3d2f32cfbd1546a6e758c1ab6597e75db07add52ecb61d37"
+ "da2e9ed04df95b36ac249f4cbd794cb561655cbbe4b34834c497b3d392d78ed0db8db683"
+ "aff0076fb6e43acba3fa2b91210cc6cf3fa594b0",
+ "27da4916f1c471cff80bfa14d12aa10270fc3b26caed010c0111f6e5a40d914a3927763",
+ "0407d8202c88fb915446c521884fb756375a2b8d178f6a87306c1c8b67b926e830c8285c"
+ "150224dcebb8a7c46902532870ff855c780b2884dbce2956cd34dd6ffef8dc365b967534"
+ "49",
+ "3fcb1e759418e4539f9be76354cc1914ccf9a111338890eef723431925fa132ebad8695",
+ "0d4d4f23408db58a72495aaec6dc335ce85309fedccb6ade053c23347abdc9e77a81aa1",
+ "129b6b322573dcc79704d08921cb54f31c571573da78cb09d0aab40c4036ee8f195d88a"},
+ {NID_sect283r1, NID_sha256,
+ "b380f97687ba24d617a42df1b14e5506edc4b62dfec35ed9fd886bb769832cec7f9adae1"
+ "0c21b7cd9152588797b4efc6b2b30a873d3f25e683ea9be070dd69731949a51121e534fa"
+ "bfa3a2eae0ee90a454182248bedf2595cd47ad08614177d58f7a773f5023b538f5f56868"
+ "2c83fb60e3fb1aa859948d01bf7b214e7f2dc719",
+ "10608eb51dc0ee97d6e488a23c582ecf0ea1df9a24db77094d87b3fb6ca98507280a934",
+ "040399b3e571caecdfa1efb243323159a45618702600b870954cd614e494bccd70e381f6"
+ "8a02e2fc57721a500611badf48fb435a6e399cea356d281e853f55ef2cf9fc5f70dc8b3d"
+ "a2",
+ "0a8045b4f55115dedd8d742545f9f2bd6e5ab81cdbd318747aebfe9f74b0cbc964b6040",
+ "2d022631bb7e05d316a1b130faaca5af5eac67dd25ad609e6e2a067ff74fd4ba534db2b",
+ "04595f184068433962d250394680701fbd2e2bd613a47e5de68fa1eb83cb08fb425571f"},
+ {NID_sect283r1, NID_sha256,
+ "3f9ec57e4228e1a6ec49df02c58d756515305e48763ba1dc67298be9a1548576c28c82b4"
+ "e9b3f62357d9b3c522b16d5c496a39effbdc8290edd2cadc0019e6b9fae1e61238b13b62"
+ "65ad2ff413a5a0684babdb0013e7632051455e6fd943815213c555dba96cba8911e006bf"
+ "ddec6c3353065004538f37e48df9e339498d85c6",
+ "123f9eb8babed548df08cc3afc1d3b3bbed52b538d4654f2088fe76062fbea75b85a560",
+ "0403b2e980ae7a847394720a9cb982fc1e41f9381b0f2e08b87fdff1bf891b9637cb2248"
+ "5e04a367d593edfaa4e17113b6b1ea3ad185b3155b1bcbd9f00f4482e509b43bf7eb67a4"
+ "48",
+ "2adaba166d703d4d2d431a26200acea7fb47216fd04882f91c5730a55c349770d58a452",
+ "2c83e6a7b4fd48e1ba4fda8ed7891425213764078926d8862d0eb64765ee2900b3deccd",
+ "3561a949d583b7de9263d07ac427bc175b75dc52f43f3ebedf996218c94e51684ed5f9f"},
+ {NID_sect283r1, NID_sha256,
+ "bdbd7b7bf3337bd9d21a3c6db379f95408c17e49dd394e94737ceae889f45dc0ff5d48ca"
+ "dc53703a16b5589939506b548f8dfd34c577c084f372166cbea320c8fd07c809b211e074"
+ "9ea639e68f890affa1569b66bd763c7c710989e491011371eb1d93ed9479ff0216b7f79c"
+ "901a2023e2cf80b565d1c0517e73117190cd2f02",
+ "06a18e626452111922e02e31d662f4301319946a204ae8a34f06b91dd1b5b96456365e3",
+ "04077c1fbe6a645b85fa0316ae412e8dc558c7c066d9aba900650749eb7b14a149ee57a2"
+ "5901b2f3002ff4936653412c8ccb8a67dcae18d78dcf6dcaaa75061013d2134af2c3fa0e"
+ "69",
+ "21bf4ca10d03a93d4675baa26285aaa554836bd0bab6e7fe42600ffe9137d5e304847e1",
+ "20702aa5b5cb45cbe8025b4ddda0a42a1ab746117d45382d018b2055b62791ad91abf54",
+ "12c31f9bdc096236d3ec46c4e6cdbcea47e4fba0e28d4df0fbc19e8740ce6dc0577b242"},
+ {NID_sect283r1, NID_sha256,
+ "436b288512ea57bc24f84fdd117da9dc1858bae8c11637f99295d88fa9d05e3c053a2584"
+ "a6fe200ad190b3077d9a1608f660349dda405066c1562f6897ef69b6b674d6bc11fa470d"
+ "0b96a7cf8f6e098c9ac03b0ef415aa045867ac7c11d16cee78ecf08850ccabf70f761682"
+ "b561d0d0e4a889d840dc74932648ca2fb58259f7",
+ "3307fd717015b12a2dc76ada21442ac1d97519f66898b214c2ea317ab0f0905e819e4e9",
+ "0404ff9b8d60ed177df635a3953c0f5f5c0254224bc48d34329136706d6e8fa1b16ba091"
+ "6a02e50ef73f43ea9a5ad07c6bd68a82b7239534e195ee929aae7788c073dbe9e968c282"
+ "8b",
+ "14d8339f610b348f4639ac20dfe2b525517218f0c71b1908d407603b25f19971a1b5b4d",
+ "2acf3dc4e3569e5038fe97920de626ddb36bf213afa0f939785dec8319eb8321234c574",
+ "01db40fa416527266a3949211fd9fec158412c447c392ed6a7c7f159a1129da864d33be"},
+ {NID_sect283r1, NID_sha256,
+ "672faa156dc188bf16bf8933d65e091c633f294486049ce96a4a403dca28a149f4f840e8"
+ "bef47412285363e9e89006614b013a41baad9885f1d9980cc897ffbd5f8a7d0e63feaeb4"
+ "2c07776efb307ed680ba1cebf470dd9bd8a2a9efc2b1daa569524394f9a50398add1a5bd"
+ "2f7c263f9e63c2d49461acf98444fd23341ce78d",
+ "14f9f412e3c7d770626e800d43cfcbba3ae6aec8563af748e8a97b67d244334b6e6d2b3",
+ "0402293b37c84e7514564635e517bbdb9bda0b4a41217ca64c38e94a4bd00753255b4cc3"
+ "890088c10bd909964ecfe10c373214544c6f60ab85b8f5545afb0fd2ac03d036db7ea9e6"
+ "7a",
+ "19b21a4d73012dd2a2ec3ee280a9b855b89e6ad53438431cdb5d2cec0e5ba21300e9bd6",
+ "3baaac69d182bf1a12a024dbc9a52ba244a654716e2756c36ddf8ca634129cf9d2b23b2",
+ "13ed92730d0a6d75f2a4a56b39f82d063e1be988dc58f0ba5f553fa88b6510116005727"},
+ {NID_sect283r1, NID_sha256,
+ "4321334cc8ee44f1cb392a4b280a95561809dd3639ddf43b6e11cb73067597988d95b864"
+ "3d86c76c3c6b932d9262b9b8b55a04fba0666dd8b8ff1e8fdf799ae3945b6e30d3af3966"
+ "f1a6d634d5e012710d66cb447fc3375130968a2e1e647780aada2609d87247c90338dd71"
+ "c3bcc3902311caba27d5d4ea4d73ccea960d4bfa",
+ "3091a6a8bdac1e43542dce752694972e734dca31c061c7d1000754296d0748055db3f09",
+ "0405c0761d01020a30c478617313c67008a1332a0e6f295c5a9f01b3411eef585a9dafc6"
+ "9300eadfc6f7bb9986b0dd221b77b54287042ae8d1ae5788706b79a354fe785c66145bfe"
+ "81",
+ "0afb2e2e29b26a686368b127e38c2f5726fd55a13e9f87cf00e831d3fe19d9511d07e81",
+ "2685f634a8c16ee79acf62b7a1fb3acaec0db47c6ff5f2c97a804e9550494b128b2287b",
+ "12b545bd76b8d2cdfc5452291d5e4748a5e981c400daeb65c20812a65bbe936bc613219"},
+ {NID_sect283r1, NID_sha256,
+ "2087e22094570d39fa937f15a3ef0601709a66666344186a33b487d041793fbb9709a95a"
+ "f250b1df0762ea98e911aeb3ff1fa19f0aca53fd4179e454e0e91636e55cc5b17cad9e15"
+ "75c82ad265dc34c4a66b7a31ecb9ef9dc756f2ac1d9dab35369a6bad4a0f47e629daab91"
+ "addc6d297d1e5d81477b3966d8c3b607ed194d88",
+ "1195921b91353db9bcd00510efffe009c94f6bd8d790f5fb3e5a0101c9ca5d21c6ef2eb",
+ "0405dd8aa95e24c054d508bc5081546677b9a8e8dad40d3f8a184af7cf07cdb09ffa2e04"
+ "9805032f208dc3bbad6aaab63211e13e17656c750c6c2a6e3caaf55a7c30ae5ba241d864"
+ "1b",
+ "3223c6439db7255e89c28aeb046e906ba79f4e9b8222ba5ec201b964d3666301f74967b",
+ "0fb7e194dae6420ac447e7d4f882da3c4859f53a948833a0a08f918acbe03c2e915d1eb",
+ "2336f1206b46b3166b28918bdc1c817b22ab16b355030cfd635ab3dade20d2dbde08b6a"},
+ {NID_sect283r1, NID_sha256,
+ "15c7bca449a73b03bbfa783f5a91ca0b7916889a5d99d541e2e8593c3b176a5b634ba20b"
+ "34407fbd94ae1c1398f5313cab7402f3bcd7ad277a8c66d09a6df5dd086b20a0a3823fbb"
+ "b80980cd86bd13e527eee15656cc977103e80113539e26695addd9eef6a1f56986168d9a"
+ "53f8b5de833f8962c3826cca106ae9e8c00208d2",
+ "29dc20446e9abacb43823e12a83737b46e6e577466b5a3925e0f9d496824dadb4d4b50c",
+ "0404b3c1d41d8172ba15fc92d9586f29716821ea82274ac8e4fb3452ccca3e34925f1e73"
+ "6c023e22cec962d759bc659841f259de954911aa289e9994bd76a30149a73711bc41b299"
+ "04",
+ "0931ef56f08c379d1ddce0649f45ec21eccf3dcfa178616f45b200a06f82172b91bffe1",
+ "178348d533217543af694c8d3cee8177e22740b657bc6ce6df9e57f0c1f14fc9407c440",
+ "3eb25dc4ed42495b54679653ab1cd4d61c854207994a7318026afdfd44c89cda9247388"},
+ {NID_sect283r1, NID_sha256,
+ "d12fbb82ee7a57eaf76b63fd6bc6c0a65c85f135f019d43ff7bc295cad15d53729d904fe"
+ "d63d69d3ffe8b82c0ebaf0399e2717ece40e011f710b5db46aa457c23b85545953398b81"
+ "4816a1e7a8ab5b0b14c4a0451b0bda9d0d2ec4a374bcaae208b7fe8056bfa17d6b7ffd4b"
+ "a2e9179f49b9cd781b0c06f6ce3eec26cd428cb6",
+ "3b9b77d19a42e9a555da8ab70aa5638890b2ed21daefa28ca6323fc658662dabcbfaf52",
+ "040632fdf8ebbb755c960ebf8fa5d6b679416e488faeeb021c0782352279a7ae00eed330"
+ "94041aa517eff6854ba04e2de6794848823e53ca580353f2b25e45fd4efd3a369cf80fbe"
+ "57",
+ "2450beeca6f1ebac3e82e3aa3239a5031f54ffe65fa6a45e2bf2ccbda448a2cf6988141",
+ "28664212774e23b6513f73a9b2da97f5eeafd10efe742e314f6913a6d0c0e3e581cc6cb",
+ "025bc733edffbc1330689e7aee0dc121b64a72dff19e1d7c5990206d6daae5bae75d0b9"},
+ {NID_sect283r1, NID_sha384,
+ "eab0a37915c6b43b0d1e3ef92e6317b3afc8b8301b22f6059da8271fc5fe0e419ca6097d"
+ "aba213915855631af64e10d8382d70599d903d1535e25cbf74da3a12ba2f13c33a8562e0"
+ "db03edce791f1d39af8850fd1feff0eb25f9ad0a86dfab627b96e65831bffc5f6d9693d2"
+ "0493bc9dd6eb3e9325dea50b055768e8aa30d49c",
+ "0b9f8f3e89e9c1ef835390612bfe26d714e878c1c864f0a50190e5d2281081c5083923b",
+ "040542ea231974c079be966cf320073b0c045a2181698ae0d36a90f206ce37fa10fb9051"
+ "8607e6eccfe1303e218b26a9f008b8b7d0c755b3c6e0892a5f572cdc16897dcf18433f9a"
+ "10",
+ "31789e96e2ae53de7a7dbc3e46e9252015306d88af6bd62508554f89bb390a78fdbaf6b",
+ "0fba3bd1953a9c4cf7ce37b0cd32c0f4da0396c9f347ee2dba18d636f5c3ab058907e3e",
+ "15d1c9f7302731f8fcdc363ed2285be492cc03dd642335139ba71fbf962991bc7e45369"},
+ {NID_sect283r1, NID_sha384,
+ "fdb93afd5dd1e3eaf72c7ea9a6cddb07fc2054499ffe152cb2870163eee71ace5bd420b8"
+ "98cb4fa80ea53fbbaece2a1eef6427b632320e9c97e38acb16b62fdbf6585b54fabf0a70"
+ "3307ca50f86387bed1815a05b0c8991e0743d10cdf49c8facfd7ddeb8d4a7b706b5a29e1"
+ "d00ac88b0ee88b3153185495ac8388cc70104154",
+ "3a30a1c15b9ed71e102341f97c223a9b5ea3e6a335861c3cf407ef691a18cc639dbe74c",
+ "04040937b263c87461eb5d409008255d4e14c54d7a86d6e3eaf2ad9c559f7a6b9d258254"
+ "2b07562e3a04f22ad37a1df0250215c163b45a6bd04a4b96c30fe2e2b7ded5486b172ef0"
+ "9d",
+ "13e745c76b33e6e91f47f8423653b0056014841f4df890121655ac2044f3a6d58b9e213",
+ "22467497bf1b5d29476f24aaf5f88d905be7900406c64033913fc88601c62063a924456",
+ "19cb024c7d6be51d15337a207e66fb0e473956932faf6d755393dd5a899bf63610ff887"},
+ {NID_sect283r1, NID_sha384,
+ "c78e35d1a5b1bbb0ec21e7ba7b7c74c859d88f3e100e40ae34128cf093885dae4e87cd09"
+ "f3239dd8e79e25305220880dd352a650225d9bd193b9b84e488c458b0b5fde1af941c0c9"
+ "fdf952d2fa41f665918dccae27ab7923da4710f8c27ac8ed424992568dd6f0a6c3ecead2"
+ "1650ed162e0292104eef3c2d8551be866a88d279",
+ "083330123cc64c11888c1fd388629d0b329a50ef31a476b909a182c930ff02d0c389b93",
+ "0402e3a3e712676bede22893a8911ad6a683306e86487d24585bd6fe4f2657281f0bae2d"
+ "c80773889a95e9bd579be379fbf84dc8d26d47335253356e5b01c09eb8ed57474d6c0b04"
+ "91",
+ "0d630f20623e93c274239200393cc552d03da6bb9e74f4a44a518e2642e84e761dff7a9",
+ "27b8997fb98ad04488f5dc8ae5dc88b2a3231fca76d7320550c74cc540110c0cee5d8fc",
+ "1824f1050e85d527847faff236b7195965e7b93343ebac889b23425dc27226d50a5266c"},
+ {NID_sect283r1, NID_sha384,
+ "e05435f695997229cce314e50065f3c5f71981988dddccaae6efb81f936b22cb48813f50"
+ "6d1edf5ebd69b0be34f278592c5935f0f6db0cca1ef9d62834fbf3c4c03f4da0596cb4d6"
+ "7b7b767e85dde7b7c6fbef7d89babe6f97b876b33594a9e36ab87079861ee556fb03274a"
+ "d4af527342a4794192b8933f28c6220f954c77de",
+ "1dc2b656c207eabc9e0d6272099babca8d149c9c4258b779c2f06de75f76d77505271c0",
+ "0402b03407b65809825a32ab50f1b556a65c3bbbd65cfcec898514637ce606182517fa1a"
+ "4d021c97e293ec74dee17c89b962356b7bd50c7b23fcc30ec7fdd0a629d11373e28380a8"
+ "c8",
+ "2d0dc9317a2af5a7d0a23c00d126b7fae4c06bda0a5c50462ba26bddf575adb091d0e50",
+ "211c396875b5dc71ba87ff2483b0ffbff60cc3656132fda7422a81964f1bfbcb5ecca23",
+ "0a0ed7bf1ca853b9b19924c706eff373b97585b692b4b535ad71cc4362073caf8f61a3f"},
+ {NID_sect283r1, NID_sha384,
+ "0f9f36477076c4b5a7d1ceb314a397fb14646695b0803e36e98908c8a978770269f165a1"
+ "fed8f4b655d4efd6ad283d7f5d51b6e1e302d360e8ebf4e887c7523a757ffd55384e114b"
+ "bfc6b7a0ec8511079507b919065ca018573418f9e394854c5704227772161707b4d0246e"
+ "bceb91192f0eb2ea994ce61fd98a6d14cc8246c5",
+ "0081772348ff2d7a3fd57fe703555ab2e14f5d203c4cf0292f944e827e884d95f3b1d83",
+ "0403f7174e88ffa8bc0a770fffa4bc30a436fce331dbe7154f6e2fc0cdd09e76840f089b"
+ "3f0561e6aa3feffb2033ea716ae94b9a7402bccfed1fc4a137cb96fcdfe4685314f73a8b"
+ "b5",
+ "3a8c40754ef7ddd0e289b2cdac5e06c72dc3d6ae9d0351d9295aedfd6f0e88809674bae",
+ "1443b46c0e6bce31642dcf3037e25b6ba2b42daa9a83f5c0bbfb2487ce717c37b91f46b",
+ "3f59d5a925fe19c795b4992c265a3c61b2452237eb34efb9aba30208ce07d1ad47e2279"},
+ {NID_sect283r1, NID_sha384,
+ "1d38b1c342b6611dbaf412a66c1c0b8397692755f576df33b31c2bd12b7f0707cc423376"
+ "391f7b00aa4e7b7fe54532e2b39c3c5284b9c8ccce48eaf9308ed338992f1d4ecde6cbe3"
+ "52e46339d7d602942158387881d9b493fd40cc59d4f9b53ee4191d42352c6f7bf32c331f"
+ "0c5afbd44a92901a4b713c7cf6ccddf7de4cc6e4",
+ "1eb6bf2ca1b5ffe6f6a795733eaeed12de6e87c53571e702635b9dbd0d96b47df4a005b",
+ "0400e64dbc1a08acf6ff0e820593cad79a46e3bd818ddef5ca0960fde799abacc7b840ed"
+ "db06115d3de2bdd011ad053550471368581a5f125eb0d32090646fe4407980a42988e551"
+ "aa",
+ "3b28fc6d0e4a7fc449b811b78900fb9f89885f4d4f70cb5a2b3d4f8ab87bd5448f4bfd2",
+ "2601923909c8c953087b0c0acda57d8c01f814dc9722171d8409d0acd2fa4d9c1314693",
+ "3eb316cacba93bd473a4b4acae4f2b5a5b2ac9856519032e63a0c718698956e8f35673b"},
+ {NID_sect283r1, NID_sha384,
+ "3353ad05ef90e9762bcfedd6ef44a1e8ea0392ebef30cffd48ae620f3e567e1cd44882d5"
+ "14e7c6759200d4bcab18afd3038c3d3f8c50f7bba32a04eee5a4b1cfb8c349939e4efe0a"
+ "46fd047d02ed000d8fa1b98b0af5586f120d9ad174b3aea33905b979ece1eb3660b1e070"
+ "c8821b32df41904ad68bbd8ed247aabd94066f16",
+ "3b2a3e65e5a306bf8e3955b60e856dfa9bf68c1275a678ca056207a0ec67c96eb3f8309",
+ "0402c542cef892b06372af7d9c321ed5309995c1cbbf1a466e70bd30f3856ab7c5d18f4e"
+ "3d02a8acdc12a7cc0b54f4dec9cf61c484a5cf86c4cf6cb5ed615479123ef1c6ecbb6c7a"
+ "e4",
+ "09bb5e49188621466440a0841b007525000c2203d9821f4c6afab63ac2b97cb5e2e3dcf",
+ "00a09da1c4bedff47945898f4f4ee9a0857bb56be535544aff9d729ae44e23d678fc71f",
+ "2390be08ba0861b32ca35ba27a0c8dd1a4e96d28cb007133a096b52afa0126bf2a2abee"},
+ {NID_sect283r1, NID_sha384,
+ "e7ec162185fe9a5803c6b03d98041422315ccdac67e48fbd07a1ef3c5661158710abc679"
+ "1bd0a75d56791b4ac0e7695d53c5989d9fa6a3b037583b2a80d2b154b024f1c36b63548b"
+ "e9afe1d51f2f68b2ba94d4ca1e69a35ac10e15ba72242aac20f7526b12ff9d3cde9a9bfd"
+ "70d55adf9bd92c66d092d7d08e9764c84bf7f329",
+ "1fd4d1af0bb7c79ed5fea7bb45574e46534387bd916649485ef15207352d7302e81dc01",
+ "04077057d3f93011440a78718a3cfded73e4196e7fde96e794465c51be8b679f912c10ed"
+ "cf059873441c590c43e0f00f80afad5b0166f94b62214ea45da29174874e44356b29eda6"
+ "b9",
+ "3f224b35737e78ec5bc9b081a601d8fe19e33b4787449d3353d2ad225358211cf9f7f0c",
+ "1a7bfe92c30ed1af478282786bdf7b5b89cd0fdba5e534bdf13899dab5af108803d73f6",
+ "2ba14810de4f5cf48b56e94bd6c439d230dfced3cb698c77627f59faff0ac5a42c43067"},
+ {NID_sect283r1, NID_sha384,
+ "87c8f2e3f4fdebce0ca9300fc1ebcaa934f51a12b6b8f2cb6bb6eb77965468663044afeb"
+ "2a1334cb5a81e74b8427267f8b34b5e9ff0cf157a9f18be2b1942e32ca61dc23ea13c3f9"
+ "fcfa16df8fe05e067938b6994982676463fb12842d4ec532cb904cf222aa805dd0d86ab9"
+ "a33a83e294c6d81e8dfa273835e62e9041dc8ff6",
+ "20380b1136b5283e9b7f54b7535ebda33b129ceb177bf5d3d07b1daed5edd9fb3862530",
+ "0405e7d0931db006c6abe04671d1aede760f2b1ac5c866570f8e5a24ed356fdab49cc5cd"
+ "ea07004920fdb0a744cc545068bf82bc5d7a46edf9265fd7c5979b9559f5421c9a98f6db"
+ "89",
+ "3cfbb1204caf6011fceb8d4be987d9a41b81bcdd95b94919b220647d0e7a18feef4cd01",
+ "07096beda28c20d2e62d9b0750142d3d21b54c38c7fad1ed65e4f9b386f3dcfcc43a3c2",
+ "3d0af02aa39e329e4c39f2a1d6797f0e3d14554dedbcab9abbd158273a3c7116225abab"},
+ {NID_sect283r1, NID_sha384,
+ "2ac53e8a50c4afe3b38904255b7cbf150c5f79dc15932dc0ac9aa631521f68a0d4b6bc5a"
+ "04d55c99a36531fd4886a23a8d99f262ecd2a9feea925d7a96ebe9b6979a207b7f9378af"
+ "be404fc8e959b0333572a2c911f8743c0ba64eebc7ef12fe5435d2cb0e5091ae518b6e42"
+ "33489efe3c16c6f21abf4e2c6808b733914e5a7d",
+ "19f815b98836948e0a0dc9c30828c31b13e175f1e79f23d084ae1bbe64823f4866214b5",
+ "0405109d8ce934972f5520101730d0a14b99213ea17772e3e7637d622a5de13fd2ffe3bf"
+ "fa0502927e0c7baedc4bb3ed2bd1b15fd2d06dd43424393b246dd530d5d8598b56dfcb3c"
+ "b7",
+ "10359d5cd8a9b7532c9902bbf1cb83d0d34bf37e73e7c0f5729b62a10bd4d8faa0f53a3",
+ "3503410a6feec71fde2feb14375d50f99ff9a2c8bef47e676bcc6c3045efa9948891ab4",
+ "159b1f65fd566ecfdc08b87e4ecf99ceea3088a750e2c3c9d868bb432de6a61f289d06f"},
+ {NID_sect283r1, NID_sha384,
+ "0b201469cac4c078f587edecdcdb6efd5752cb4a3f43ab540463c4d908c27527aa3592f2"
+ "f9acad85dd94a3c056bd28618317ebdf2e7dd6c5ad26fa3c31dd8e5c50c60418d91c93bc"
+ "bb59ec1adb1db791f485ded78a5cdcddd23dd1cfa4f13443468d8a5f2d648059b9c4470d"
+ "0f4fe7733d56a28a2c24456b6923703ef32cf0b8",
+ "01854e954654e726cf4bebc0e5a840e8809fd716059211c6ffeaed36829808363164684",
+ "0407a6e7c542860e815d3fa24fbaf99989e8b9c812b08399056ae4f9a850a6711a7385b6"
+ "2200dde6bff33891a64744dce6456600f5a6a11049906608e77f8afc38b922972c805af2"
+ "58",
+ "2c9cfd376903122625c7fdca50e93d4c216f0c7d07f33b3b51e54e666e13b67dc89d290",
+ "18321f9ee35d47648060213df1275ae89c2ec7d17abe8093d8a431ced23aa61d3f8df4f",
+ "09e5a05a62b006a7787c97be38df6fb9fbc1433aa2241b5a788fa727229a18e07d7a8aa"},
+ {NID_sect283r1, NID_sha384,
+ "fc5e4dddf4c4a328b685035ee79069770fbebcc56c14e31afb4bbcdd5220e025f31eba79"
+ "4fd6c05e64f19678dab33ce4f084bc32790392f14bf35669d75b6466b4214ec30d58ca90"
+ "ae285c9058f5804a1fc9d7a995958f2a0e84ee52e8a78b601bec04ab607ffc2091749cc5"
+ "48c6754ed14e2e5f92315bdacaa7a12823ef76bf",
+ "3548f8020819588b3202f4c1ac62eaec6a47c2a19b2900c5a3cf5b4ba5804231141c647",
+ "04038563f2482a399bf1c13f42f8b85ef64a3599c22da9688b97530718bfefdabca3ae86"
+ "3705c4aabf6d8a90af345008d5a244d0671cbe1afd08000c4eb37702a9bcba6dbc058ba6"
+ "da",
+ "32649876d776117003305f0ec9cdab5cd84bbdc747d3dad5d8d54a8fdc84d519d50df45",
+ "1f5160851981772c502088eef209f7f89a7c8ab35e630d16330bec7723e398fb37c84b1",
+ "073a7333a7037e1257d4d70be87c30bef770f9d728dd7e2615d47b399ec650aedc867c4"},
+ {NID_sect283r1, NID_sha384,
+ "284cad790e6207e451a6a469cee3befc3ec43e047cf91b9dff1485718aa29de36a43f7c5"
+ "1eacd8589f0c3a96ec18e8ccfa92941b50b2132e3612d5b45e16f60d411d1c53e373e1ba"
+ "451352e28970ada9dcb9802102518a385dc571dcf6900971b00346098a58042e0d1d129b"
+ "d6801fa640a895a458a45b31318fe63ebb30c6e3",
+ "3cc4505005c41142308f1489226b7b542e2e7f24f1d3089ff6b92a4b0013f490ad52e60",
+ "040280b77ddc6648d9cc3f5557d406ea2a089c8179d4320781b2eb76ab07fcafd2535b91"
+ "de005f23bf4171aabbf0fd50049aa017c0dae70b065964c685bc03b958cee2fc3249149d"
+ "31",
+ "2ef488215648524f6caf85233736eddcd9d1d838c6a2799c3a68580492d40f9800bd119",
+ "3e8e13db22c97281307edd4037f0a75d2c70a070614e94e02c860f36a53aa738fa0db2f",
+ "356f2651b51a6be0c697300a8c2641bfaa1795397eac208385c3729248e36baefc173ae"},
+ {NID_sect283r1, NID_sha384,
+ "6d46e57abea9d115deda48b69fe8e0b36144df2f6a659509ce1b514c8cc4769d46e5f71d"
+ "f2a084f1db4a22fdd3ef0c2f90394f2898ce291b9f279c0664aa01419f5f6bee1fc12998"
+ "71b27ecd57a5ac548f99d01871b8c238a6b46044c953b2e78e22346a0c7663af4db62799"
+ "038ffb5c21ee512e26d01e70a4ed967377ab8405",
+ "144a2fc8e0aa63506e14e4307df36416f963dd9da78655832f5b991af8c3eb97df78efc",
+ "0403fe8867b560bfb21dda517b8f4d50578a11e1d0ab7ed4ab3796580d31bdf710e8e222"
+ "8405a302baa3795e2d132c55d90858d14d4b17aea0ab70632b135f94bb23112d163357f8"
+ "ca",
+ "0b5225132f19419715170f5a3f26919b4127a05b4f0406f895af1e4bba95786daf95259",
+ "0651d17b00ed9a06bfc6a913883b5cdf51bd5f2dd22307cc5ad3bb545f623516232bb6e",
+ "01128d4784fc0fc050af0b97f859616d764b22f40734ba65aa15e2cf80e7bba3d15f42f"},
+ {NID_sect283r1, NID_sha384,
+ "dd750b39bd8753f4e473c4484e2b36ce2da7576813ebe05861c339ffae1d029bc793173e"
+ "d394091c00685ad82f0550cb21ed1c68f0c27cb7396922239cfb886647af204e88a9101b"
+ "7453a8ab662e270b87a8a13f2fe61d695597382cabeb781933bebfd7d0dcd33f77266e43"
+ "e32d937f2dc89f67525e522977ce73e9ad36c8e1",
+ "24ffeaf139043ff25a395e4c560c7680c1c2155191378917eb25194136b4a69597dc277",
+ "0400402bf61c0e36385e5fa8371a553ed8652466fdc3ed9d4a3ce1bcc567d1f451f6703d"
+ "d104dbea6f67e1117116f30fe42e84383768b0da770f8a2b4cd8a4fec330a0034554a138"
+ "08",
+ "3e4e78f012eaf1778c086a3bbd9e996da0ddde651236ebdb6348062f56b36f63a901561",
+ "1e2312720f6fbf44d7a6449a7f30019c38e69f2e6424d4bd1054f40798e9fe58d080b86",
+ "379d1b610a976730dfdf3300280f1c61109ad13c788e8f8f9a8d5e0130ca9482ee417da"},
+ {NID_sect283r1, NID_sha512,
+ "4736e59fe5812f63737eed57a570182c065538abd9fb0a1c9c2059199e7052ba57d84b5f"
+ "a1cda2ad9f216610361ce1dfb9334816b6bea509283756a03aaae2e5b0597f492d078b6b"
+ "015a40c9785dcc5d2ae266176980db04f5cffef40e16661a50ef871c5f531d73fd5d114f"
+ "a19bae9dd2da4267a131fc31849da38c2b78d1af",
+ "1d1f2e0f044a416e1087d645f60c53cb67be2efe7944b29ac832142f13d39b08ac52931",
+ "04010b2d7b00182ee9666a6a2bf039c4358683f234ae41a9e5485fd6594e3daa880c0dfe"
+ "0f00a419b2f40e573dc2dae4b22e6f56e842e50d631b6126153178585bd05a8b9e6e87e4"
+ "c8",
+ "3e4d36b479773e7a01e57c88306404a46b6e62bf494b0966b4ed57e8a16169b9a1bbfe3",
+ "30513169c8874141cdf05a51f20273ac6b55fe12fa345609a2fede6acbeb110f98471af",
+ "33fd50b214f402deed1e20bd22eba71b156305e4f5a41ab9374b481ee344ab3f27f4bcd"},
+ {NID_sect283r1, NID_sha512,
+ "e573fa7d4bf5a5601e320130de91f4ad87eb7ca6b8998488afcef69c215b0cccd221b8b6"
+ "6eb0af9d699af9ad6c4b4a580e82941f31e4c0a9bd83995dd076c5ac9bebb34481061e7c"
+ "b1b26f6e8c6b26ee4bdf9887f7ae2eb9fad3115a21dcc96acce85d23a040c0ebbe0a56e7"
+ "5714dbfa803d6e279b2f4280bcb993f96ba321e1",
+ "1337362609df74d25f7adee382225e6a04dd6ee4c6b45fa31499ce9edb0ec046325caf9",
+ "040287b288ce6f65fed9f95c99fa4b8c1aaf6de65ca563df30ac67c1066d2ba2f5a554e0"
+ "9c025567fe183dd400d256c333da92dda2e364afe84492ede9fa0e913ca7f12069b5a44b"
+ "48",
+ "31b84ec438302155f2e84dd118c0d8479267f8d19c8c5d96d21177e20b23e0180dd6d33",
+ "08133e49644044bf9ba3b4c8bdc3973647d650c58fae4a7ea5a5fffabafed56e759010a",
+ "1d8cc410cd04b188418b20cebc8f66ab0dc29a42f9067aa2926dbadee39abce79deb396"},
+ {NID_sect283r1, NID_sha512,
+ "7862864d0d78b44e2a28af44a0a16d8e9b1b8c4b794db0410c0a863ba011018ef43e1e11"
+ "f2fcda2f56fdb2a69cc817df425c9cb3b458922ba00d710190cae16d61af3c304a42fbb3"
+ "d0c4a74a297253fccd70aca414865b41f68b01c561be281265fa89f63f975d3101334886"
+ "e85929a5a47fa8dc459b663548faf8ed7484958d",
+ "1be00aa0afdfe92e24a2536594d4b41701ad4dfb223aab35ff49310bdba7566057fe8ac",
+ "04013583d8cd163fdef7c11e91f36c1d3eb2f7957d219244db883708a7c5777611b00668"
+ "1207a1f4df45073b838277d8da7daa7147b0f10aa98b5ec02fbbf97c89ee17f3a7ab4f3f"
+ "27",
+ "26b42f369ff9b2740147914a2698cf1ec9bab44caa3b5f05957ceb9a32073729aef0fc3",
+ "37640dcfa11483b3754ea027f5f239500894dda4f4c8308f0623db256eba2113c41ae61",
+ "2096767a1f8210b175334fad61b4c7fb4e2d6c7811b5d22521af7750f101077e2fd4e44"},
+ {NID_sect283r1, NID_sha512,
+ "e73c96d1a84cf7cc96065b3c6a45db9531cd86a397e434072a38d5eeb9a90f62bf5d20ba"
+ "e22b926cfe967647d2bbb5dd1f59d6d58183f2cf8d06f4ac002ead026409ca6a1f868b40"
+ "6c84ff8887d737f65f9664f94801b2cd1f11aec336c0dbd4ec236d1cc4fc257489dc9709"
+ "dfa64eae3653ac66ab32344936c03eeb06d5852d",
+ "12ad0aa248db4fbc649f503e93f86104cb705d88c58e01d3ae0099590a69aa006aa7efb",
+ "04008d262f57f9528d55cc03c10bd63ded536bee9ecc617221d9892ae1a75b7cdee175cb"
+ "330754e40e8823e89fe23dd2748fb74e9e93c3b33f188f80377a32bc66f6a92da1804c04"
+ "cd",
+ "2405a351a3bf9a6dd548e8477452c4d9d719e32762754cd807a90abddd3ad380e197137",
+ "28c5d807ea1c3ddb7f2c90f3af644c5d6a2757336ae46c2c148752a2fc150e8183cfd83",
+ "397c8c52fd67b99792229194a787518db5be8e8c291b1a30e105b00f108ce41f8ec8fa9"},
+ {NID_sect283r1, NID_sha512,
+ "a73fb0aaec838d011110d49c5e94395ce07408917bacf7689d2cfe0948c582214b263c6b"
+ "80e0a55f1e159086817605723740569eeaa1bae96b979679165c5c35ef2142525e943e59"
+ "5e6b4b160acd7ebe41de19775346363f779b1f80b6d5f0785b92a648028e456af8496102"
+ "d19dc6526247a654bdae3368f075fa9ee92b2f4a",
+ "2cfbb8f340cae8e2e2322829148981cd9e509b0c65497fd8d9da5dee9dcfd39b0f7556c",
+ "040260bb17da74429f049f3a7eb73fea9cbeb5b14ce553d7772a365376d0114ed2ef3087"
+ "d005889e41bca54c09be20dd406a6e1f11f9d31d720e0c4e2e88f381ba89a97f12fa9faf"
+ "f0",
+ "3fd7cb455cd97f7f9cb888444f39569114589612b108657ac59178ffe31a33569c9f0bb",
+ "048a10915fd3bf9ffab1cb13632359466ccc539128cd98c6273d5d8d26c64d57520394a",
+ "2d0f67f9baffbb34094c5fce36f47cb73a537ff984c89e38d073678c21148056bdd6893"},
+ {NID_sect283r1, NID_sha512,
+ "eda775984c7c9f7db47af30dab314d070fb77e9b623baa6b73e2cbda800f167b20fdc2e7"
+ "219391efacf908f4ceed9b9b6bd3541b52ea087177e18c97391214758cf6455311fad336"
+ "ab56cfdce57a18add8cf85b0a0bd6fa7297dbaa34bfc8585b0f06a0aae055186658c227e"
+ "19cddb65de88d260f09f805c2e8854dcc524189d",
+ "070e82a1f3fa6158d15b7346dd56150faee5c98c9d07c996e01a06dc9b211b12ff62d60",
+ "0403d3ca5fe316a0820e84a8bb5d231bb14c810a87c7392d7f960e7cecacc56c337f88b0"
+ "ea027ac0ded5633a98ec5734db9de1399c83a181d522037266d856c83e5c8047c4eff2c4"
+ "e3",
+ "311b23487750c3c4b23b28424c33328c39d6f594d2a9b459a883508b985d8aca039a2b5",
+ "1465736c3c9e30e895b1544690e05108ca221cf2352ee4af1b5ee4130029a82b277b076",
+ "2819b94dca3a58cc5a96790871640fe0fae38883de6fb4712126c1c1cbfcb0c005c5af0"},
+ {NID_sect283r1, NID_sha512,
+ "a4a13e0bfa761b9bf37fade6570d41c161e20558874911ff3bee38e5649849b159beccf3"
+ "21c6bc7243f99c01a2fadbab9e157e9952ca65d8ea676c74fdc976d00501c626b8465c6c"
+ "f0e4fd1a7d1260aea987161b821528b0b423e62ecc5193a0a49442b0c3e4ec9c4786a3a8"
+ "6b199c07dd3a17033d430d2c83c100f54e0a7c31",
+ "0b471bbc5f7a07996e370da4a09e71e2119ab3a562a273f079401951fbe4df39a4493da",
+ "040333e9d5e077bc64d022e49d5d207385a19282aff1b73b307523b0f861b4ce4219308c"
+ "8205414e431f3b90a2d4a454d073cdd81f8b224180ac4139104166ec33ab33d079dd147e"
+ "bf",
+ "3e431c39ef6f4b7674a1bf414460b58998ed7aa5b1af7ddab746cbcd2ed9f42ae3827d8",
+ "151df78c0f453d396d71528032933566e176eb7f6910fa9df2e9b2f5ebb6038777ef209",
+ "08a1c4a1e21cc63fc15a78f0a11a1bc7a59a5a31f57091a12896fa670dfdc05c04053b7"},
+ {NID_sect283r1, NID_sha512,
+ "7ceda7a7248640f7055309ae712c19d741375d6a7e0608e07f0135bb830dc3e8863ee9e7"
+ "a75331a5e1bd38c42cdd484d4f45a26c2c1d4e05ce0d0ca941f4e94ecc6b371102f31633"
+ "629e9861de558bcb6407d66eb91f1062ac0e0409db68b9f2855296a7f42fc92359a7dae1"
+ "6c73fd2dddea52bd866a4d501aedd8fe3b3ea733",
+ "3c65cf80bfb507dff52f9bf2f93df0642020d41619b3990009409e7210fd7130ac44ffe",
+ "0403beb5b9b8785c5601093086b709c0a05955be42eca3d217e625349e5a875efa82d75e"
+ "d4007cd4e64475d628e6f562f0ac9c3f91075626063a52c2b621796e557799ab2f1ebf8d"
+ "bb",
+ "16212ce91eed7153fef806d2561912be1d988410641d5eb72d586cd4e6782deae4538a0",
+ "26ea04dded2cbeca81e75503932982c7fb5cc7d38a45a3fff8c4ed7f844dc759d8da302",
+ "061d3756e3da1c7816f0d72a8c84dd1f3b93624b631f5051c801af4e472fcf82d896c18"},
+ {NID_sect283r1, NID_sha512,
+ "609815edfd58c0e26a4b06dded831d2f33466a130754b96d8d7c3b4d99fd4b0789ec719b"
+ "c25338d0ae8c5880560c02687d352d77c291e406eae865c3b26d00f2e63dc644ce7e01d6"
+ "e96ceeac8bc1eeb257d36cbb25d89b5fff6e30b6051506a0ae54cfaf6214f30985d54cab"
+ "78f708029c1fc0175bc58e888db89dea8d300abc",
+ "0f4d33a9c7e6744ab3c441828bf0f1866ae1c042cc54abc754e3801263a96cbb3955dfc",
+ "0404b925b97bbe67adbb6e918acbcae0ced8dcf11d012e1a97875b750bbb7d01945bd64d"
+ "f304591cc9caabc0db8fe9047e6b1f8d850ac4389fe67bb84f6846b631dc3524c8dbe6a0"
+ "6d",
+ "0483aefcad5e382351125b333dcede8ef50914b1d1f1843b075f242acba18c290c742cb",
+ "1fb791c288e2cd52d3837c56b02fc99f53a6ee27ad6dd9c0a31ca08d8fa64eefccc5c87",
+ "0a041ca35422d8985c1c706dcb0b8ece64b65285bd0a934cdb41fc08223885147281869"},
+ {NID_sect283r1, NID_sha512,
+ "82d8ebba707b72655497320200ce719520c1ae7f46f38122958fd99322c25c9f4d4344bc"
+ "b77a6658df0eece5df163412ecdca58475d56b0c2d14a0361e4cef458df146925d473a43"
+ "692b15e9bbec550f1bde3444f2a5b2ecb55d2abd273ae999f16a32333529d94455e485ca"
+ "4585e6b07bedbfc2bd1eb766abf0d28bdb1ae6ec",
+ "3a4824bdcea6a144d85f1b194431724cc49849b6cb949b4766d641ae95477d1ec3d1464",
+ "0402c9eb36eca01dc2fe921933f4cebe8046b3679abed80d2f8fbcf8f254bf17be3d551a"
+ "56034c836aa4e946425fc9f49f3f62e33d8a0afd320292a34d0ef8bde8ad79a10e3f95f2"
+ "f1",
+ "23d8725af57d835018e8737fb4e8b2eed3ec5a83fda137c710fc1df875416ff82fba90a",
+ "0d9f57ba8b6a9a1cbba67adfbb938211ed2d267468f79ad39ea1eca7271d135bb67c18c",
+ "0f09a600d97c69ab521bd1ed6bcf0c0f69255c334e0aea06c68bba81d53e810cc553c9d"},
+ {NID_sect283r1, NID_sha512,
+ "9c6fce18a6a96349b10c9f2f5f1505c8ab727a650b44bc0782a5f39fcb48b45fc7c1b821"
+ "80d5f229b8abfc807071f931d333d265fc940c93fae7520d8d40ef59d7c6e3678c6a2ecd"
+ "e52b6a8827b1ffc6ed269cb9832feb20e593a7e3d4708309342875199eb2ffceba7ecd70"
+ "7b122516c815e83e27872eda812e3ea52ee3c4a8",
+ "27ba543ea785df1d53d4ae4c1bd0a3a994cddf0c25d2b4e8ff17ea7aa00619e858da1a5",
+ "0407d375a9e78ccee85fd795e3fe6bc07f50af3456edda1ab00303f6de6b5b02fe09859c"
+ "63008d0d54ab9a239b5ff955452b32bfd2372fe095751bea4b56d52f79b4fda0fa635f57"
+ "f9",
+ "00ee7010af4a517502cc5d5433d98916f6750e8a9009ea04b8132268673d4a02a3e2031",
+ "3c147b66efa47a842eb90371eeae907f0c813ca0937e488da95ff8ee16d389f3ab902ff",
+ "01469d005eacd9ac84a140c93ed0aee09083a4822730a28df35058cad29267eacf03968"},
+ {NID_sect283r1, NID_sha512,
+ "5eac15a64c7653d125605869012b8f036804817aedacbb5a5248a595ee0c12329f91e817"
+ "9c187192d3ed0d4ca2e202d8d4d9c93ad3f3ed931121c193af5b47a8a5dc39775b6c2d70"
+ "2708e5134f77a31bd62eaf87e39e6fd3f2b9f782c3057e162dd53b3addf92bf0ab99835c"
+ "7f6649abd1c5322a1ebb2ba313df9464a74c14d3",
+ "0708d0907d14dcd5f40e2903e1e90e48a0ffaa6d4d9b84ca14df4e985c294f74eb9f2d2",
+ "0406fb0fe1c3d5bfee5399c98518bc3ff135e0c351243fa0540717a9b1f7990eb8cf4359"
+ "7f05212fd4d6a50c08cd99ee5988103fa639b1123c878d416cc553639bdcee1f8e927bdc"
+ "8f",
+ "151465f40204d76f3bfc2e4052549869c19da82c678c332f536ef24567ea034358866c8",
+ "0803d3e8c876d46a9198f2f769faa76c4f66bc5ff4298b9640ccb8e67ff8d10f86342c4",
+ "00da3344354114d163d14d4c288785adbf9a8b31371c6e4420383c80ba0a430019c6acf"},
+ {NID_sect283r1, NID_sha512,
+ "df735a7e60bc267b18f313ad56bff830be5ef119baf43ce27c6368ff1dd89f010afd4f48"
+ "740b11c12101c5903bfa71d6cb3d6462cf875bbd55a570ffedf3564088dfe8c8d3148231"
+ "b78b5adaa6c53696737d4704daa59eab8d986fc6e519e81540f201e77b923a6a4af65d71"
+ "73635b3b19b2023022186a7b8e869e1ed51717ab",
+ "21fb0a6b94080da8b8299b87457dc09d21bc430ba5f3359d92aacc1151be9941739567e",
+ "040179831c55ead3d11844fea2e18d25cd4d658822e626550aef1afe37d88aadbcc9bfd6"
+ "66075f8087d759ede340157667c1bb12be272b8318aedf2e8f8b487f4bcd12a50ca66f92"
+ "81",
+ "37833e9aab843a6b967264fdb705b419ed63fbb09c12170491019acc7c21b9ee28a00ba",
+ "1c9601440d109a3f4eb69a1a669bdaab9f4222a34a04ace8ae313b10bbb66811bea7d5b",
+ "3d2f9ad7595dcff69b65f035ce600f2667f8499d3bd25f789d3f3c1bf83d2855f68eafc"},
+ {NID_sect283r1, NID_sha512,
+ "bb107b0eeaf175a786a61db923bc6d51dad5e922e85e57536118e032167b197b1a1f62d9"
+ "bbcde04922fde781665c1094181c16ac914cf6fbbfb27bb8346b2134f05c55a8c6b9b481"
+ "273758e380666d6e22c28577c29446cecc5c3df9ed9f1be060ca55ab2b7fda36a147aeb4"
+ "6df0275bb923e0876b703452fab42f6b7ad2ceb0",
+ "2c80151f91301fb6b0c7685bd172f20515b46bf94dbc4160d0720fbaedd40ec00084447",
+ "0404a62b0c9749ae9ff00dc1d50d2b4a4941741abfdf13c8e416549ea27fc26b14f191f2"
+ "4302c9cdab7c6512c322bd200167eb9657f8e8c84864b57480a80a3c6efbaa289ab8cbe4"
+ "d8",
+ "3df951f8c4490fc7c2d50a72a93e0e82c5a20be8d91afd890d6846bfd146169ab58b382",
+ "1f2accc7f7c4b5f877e12cc17b227e1ba110577c9f4e1785e6dacd8491bc6017129d798",
+ "27a167e6f2b43ce9663b810ed4f8ef15029fb6f2be2ddf25c014d844953f501d1dcf6d6"},
+ {NID_sect283r1, NID_sha512,
+ "f47e49ae30b09b7666600b7a95e81b0afa1553da5e01fd917e4ce1b58dfaddb8dc8c03c0"
+ "f5591f533610deb6a7bb5faf5dd1ec4103a587a1a4c58a110a706b0f301a5c408b3d984c"
+ "210d5b4a0b347d2b5447271f25b527b3c7864f7cdfa735dfded47c63b723fa0f0413c57a"
+ "24ffde9a95c35f743f892ab1ed1df704cde82d9c",
+ "1538abd7ce8a6028d01604b1b87db3aaf720e04220edf4d1d28c2d731aa25f509e58f2f",
+ "0403076b5c3a12b8a2e1368c7e3458458dd7ba6c5a6dda8c82cc6b30d1ef767d36e01520"
+ "7f0369c7a80cf01e9f32c08f9924db08a7d0dfa5e9a8e0e29b57f5eea8506841e6e3da04"
+ "f0",
+ "3f0052ba6ae6bd7a7aeb077a764d21caced6b241f63616ae4e4f0d98d2bfc0e44dca592",
+ "01281bc0bd36ba1f3e1c262d98ddf4e9bf1d80dbf97db02089fdf1d2e625abb5733ec3d",
+ "076db2215d9f33054efb397c449f05db198d38a24749f046ee20032f5899dc142052e37"},
+ {NID_sect409r1, NID_sha224,
+ "f2380acb0d869d1cf2e25a6bd46ebe49d1c9270624c5507be4299fe773749596d07d10f7"
+ "c2be1c0b27e86f27b4a6f8dff68cfe5c0b4c58dad1b4ebec7bd00ab195fdd635d9fa8a15"
+ "acf81816868d737b8922379648ed70022b98c388ede5355e4d50e6bc9ec57737d8843fab"
+ "da78054e92777c4b90466a5af35dd79e5d7a81ce",
+ "0beb0df3b0e05a4b5cf67abef2b1827f5f3ada4a0e6c3f23d698f15a3176cb40e85bf741"
+ "c9fbc78c9e207fa7302657527fd92fb",
+ "0401da1761981a65cb5c77ec50ebf7acc11eaf44bdd2f70242340ec26ffada7a4b5f661e"
+ "13d6e7ad341cd7dd1ca491cb7a0b580be3019ba11e4c4f2f5507d6bd2aa2f96b03510a03"
+ "d5f8c38bcc8acd08080d9effd1f8ae5a5586603b2e112964514c831bf786b2fcb2",
+ "091e575fc79444fd2d9021bc267a1a076438d73464726bd0fe4ac2884a374e71bd462b15"
+ "16b3e97c3202854bd0a286214b9e92c",
+ "057ab9d5cf4d18f05eaf17d3b5a4af96c3eda8ee48acf5e02eefdfe2f542cde32a37c04f"
+ "285794ddccbb14383a645db040bda81",
+ "05275de4157b32723366a0d63831e6512241e3e4416f3af02e22da8faeabbddd76116030"
+ "4927a71cfff4d6e8937347c9b78cd3b"},
+ {NID_sect409r1, NID_sha224,
+ "22a97fc0a9694dabc6f274ab52eb592dbbe8beeb646ebe6cef60eff341a13017eef980ab"
+ "a6d24ab3afd976e2f6a84cf652654d4a54a36b2f2f62fab8858f8b0479a48fe9f47f8fd5"
+ "a4a1f3141a91cbca186507b2bbfef5e4c4d2df525f04ef7c4720fb443ccad540f03a2be4"
+ "68d88c9545d1dad579fd7cbcd103bbebc9e9f961",
+ "0504865a30984a9b273d1bc289d734d10e0aa56e93ab14720f1a42a27d8cc932cb8804b9"
+ "63175de6fe57d8eafa8ab7ea0592dfa",
+ "04002de5872c40a79d5238722fcb94d5158009e28fb41ea012e92028dc3c87855fba71f5"
+ "0e6d0dff709867de185f9a9671e7a91e2f00fbf607f69609ae96982bda3f0317fe46ad1e"
+ "0207030fdca702cd97fb5d5732f3abab24b10669875a64bd2a74c8603897c78d22",
+ "032d0f950d10d028db6e9115e9944e7c768e2da731df49dc9128bf145a747662de08cbe0"
+ "517fca6fa185abdfcc4e3ab604e196f",
+ "0e7d16daa689ddeb08074285f5293bd9f1c051ca5589e69e4b62c32af110b6f3981d9624"
+ "df15c7cac0ddd62aee9c41c7b6d690b",
+ "02f6bdcc551aef0e4e8da2df38288dcc29fe600de2f8b6cd8149f88146150790915148f0"
+ "69372151c3bdc4d719526eff252e610"},
+ {NID_sect409r1, NID_sha224,
+ "af36c04af0e3fd64bf52dedf52fb788d2d1bd67fe05d98880cc7ad3c20436abf02f637fc"
+ "ec209fbf888903fdec8682717299f8a4386768153b7faeb6581db57fb9aaf4615b4ea8d9"
+ "24198fdd158363a1f40312527d6bd14c13d19985b668c6b88a7548104b1ff057d07082ee"
+ "a421f50062a315bc3866378f2d2d634f03fbc0cf",
+ "0cc08a4ea5ebe32027885a8c212870e7c45b6c610117994d6a42a284c05199414a3a0e8e"
+ "6645ac5c2ebf21c505a601f69c62b85",
+ "04009d2beb607f2bab64451327e1dc67f04f7569ffc0c67b410c6db06dc04edddb1362ce"
+ "8d8b8220be77c447640e7d0c676e5ad1d500ab813e800e75b6012faea43be56fe9d5a22c"
+ "d46fb1f4f1ba65eab19f75f2ce9d8187e4940fddc485c42cd18d40d47415a80b02",
+ "0cfcc307f847eb696f16af32502690711ffbaa2e60e75f80cbcf7704152d5eeb9ddeb701"
+ "952dd58fefb159926a83245fefa6196",
+ "068d1c646dca56393caf3239d9fb30d1dc56f991a8dfdbc0a7b69d273aec69a53056d955"
+ "3e105c7917e522ffe446cbea23227c8",
+ "01db30aceed2b126cf45163b9d878a6590e9ac8284a31ccb0faeba2202679f181eaebb66"
+ "4b5537f408b693800f24da590082dfe"},
+ {NID_sect409r1, NID_sha224,
+ "6bd6f52a6204b60f37929aeff28c87ef61ddeecc231e52a7772275f9329add899c130956"
+ "f8c50ac2698aad3654fdb49b74a6427a62a11eca0a8ee8b719b8c0df7b9f0bb0af5fef49"
+ "18a8c83367d29fddd04b6a1ecad904471e5b59c8fe3cdb06b4f8f96419518dda960845d8"
+ "3c49a49f1b1f2fd1d2682a9d60c25fe3ce982cf7",
+ "07156ef0a74ee1119532a2a7e8c02be1559c3c21897af9d5b34553c3d0feca4a8d5929d1"
+ "945df824478e0c0b92a6fac8c84f639",
+ "04001df419310cf133408e9bdb32fd85f8f0950263e1886f2e2e108a596e7e76153ec47b"
+ "f9b33f69c1128dfbf52557f3c382de85f1016a15517a811c77cc67ec4fe2bcba1290e498"
+ "1880c071318aee28e30854692ed2d6bfb71e6e74fa97af750889ae8d010189733c",
+ "063f127c38160e85acdd4d5dee1db1c32cd9da6075b2d2f46b010636e374e0262a045339"
+ "4aaa8bbb5fe7b2dbcbcd62ad601cf51",
+ "0250cf50d52a5950999b9c0ddef219218f76dd9f22a2213def9ba98d258c2f8359d08d0e"
+ "fc208e23ea3614c9e27b2e4576b9c12",
+ "063479550873dea8a3ec0306ffa9252739c34c87bbac56d3d9138764347d5220bea9c27d"
+ "6a308dc2ec53724d6d3ac4862d1735a"},
+ {NID_sect409r1, NID_sha224,
+ "0eb8de25f63abc9cba16823270e9b6f3fdedf0fb90f6652a34688970932e3ae98f6d3bf0"
+ "fefc5f247f72960a6975bff1f1acc2188a1775fe8974b2bb2b4c8d226ceb735113a14009"
+ "e8ce66d58808fada4e6f697fd016829913352c0f659b6be354a067df00cf74919580750a"
+ "a6064f21264d89dcb28b3b2d4d699115c36d1310",
+ "0a95c7abffa92e2c637611ccba66ff9d2ab121b40a85c5b71454cb0dca1f098ce1be8d9e"
+ "a4933d1a91bcd270c5a33687835d6e4",
+ "040048e6b8614c0c7156dc41884e17e36ef528a493c28c9e6275c3454d83beb939ccc749"
+ "52732c18424ba21b8ea9c528966c692141000ef9efe1145029d8d60d14dcf079d43e3cea"
+ "0e18010f680bddc2729ffbff9a981cef2cb595a69142b25a0a39863a929adb635a",
+ "0f43af45b0dd631bfe38d85979ff1612140b9cf80b4504857df17279d9d8ea12d5bcd292"
+ "0fcec81326f15832df6774b9c4bf5b9",
+ "099f403ced566fde4d9755258445b6d6c2a4e234f99425aaa78ef118321f8579fb513ccb"
+ "b71cc2732e31668a6a6bb0fdc7f4018",
+ "0d8568971a4f219d6d3d8bea6aecb4bf7de53886d2e6bbb0f71d054c63768c34d4d18830"
+ "00019c59168fbb32f4317330084f979"},
+ {NID_sect409r1, NID_sha224,
+ "cad58ca7a3b9967dc0ab62a43037764f8074ef9177d60bd98f623d693333971c24a575ed"
+ "03cb61f4dc2e3d6285fb1204502a540f3c0bbbf23f5bbbd1544f322ce35d949d8b1d8ede"
+ "b82e90927ac67ad49c91007056bf5096bd690d15ac00e1874fe33293d8003a4a2b094078"
+ "cf09af799dde384143350c54a99e1f99cc31f2d1",
+ "02c438b07c6e0685d1f94a4bbafc013f8f21265d893f54e54c3ac2071606ad1ffacace0b"
+ "8367aad724b1d9508c65ce52282e397",
+ "0401fca66bdddefcc3c2072ea32f026c975a2c392dd7ed7e93e94a810e1125ec161bed69"
+ "8d8305830eb66fca5eeb71934ab3fd79b10189c22a2c9f1fd7624f805fdf4faeeb931709"
+ "d745a3feaa3cf04824f5fa58bbda144d4e96d83ce1e3282bd5fc9c50bcd68f5408",
+ "09230aa7b58505e2dc2f205b70a09cb9f4d8272f465b7380195ede0f7770af2a33f7623c"
+ "310a0520e7436835cfcaf32467f154e",
+ "013d0e70d8f4b1563efbd3c46feee15b88358562f769046f39df6d00477815e6b8763c02"
+ "3807eda87a86338c7b64214784fa2cb",
+ "0662f43fabd03a0c05ebba700203fa2188e16504f8655bfd0fd090b109e68220122dff7a"
+ "6cbb8bae08612e0d516e9f95ac15368"},
+ {NID_sect409r1, NID_sha224,
+ "281ce2643799bbfacc7d5993683a4fa656040517854f3c2dc7c4f8848dc305382e34e894"
+ "d433caf12d8b493020a6a08d1fa05b08bf6c53127ad5f33bbe75b9db0615e3dd94408d02"
+ "8dcf3cb7598f6e7cb4c787681dabac7cba2cc06fccb7506fece6c7c1c1bf622d525ae973"
+ "7085ab4ac578905950002024f30159cf0d99f50c",
+ "09e8658f8f9e6cd98c0f4f0fd20d64d725653aeba339504def17f3ad12a63dc6157d8080"
+ "4e5f43f4ff48fc5573fde2c615ed31b",
+ "04015088531d914113a25f1598ba1d3cc611e27ea92ce8dc807fe8d446db14ef62ae2f06"
+ "c293bcdd739f916cfedfc481fd941b4feb00a9135dc1b0384e7169fb4648973559e50831"
+ "9235a3f41ba174d5f58307448671cf22a3649168495c36b0bced09ac6df98f14db",
+ "0d398fbed52228fe16d32a6ef539e4ee3858a1df327bec999ca25cdbc357de5a75903909"
+ "973bbb0a5d0269862a74623a38da515",
+ "0e38910abb3d84b2b26ed17d2124f4787dc5612942e98521d9f94baac3d14159eeef9e09"
+ "b9b20c807b479ba84640730a4ced4c8",
+ "0e370e575302ab0d8d08d5270fe89ba524b5bf21e43e70c4d335ec1525ff5696ced37f0d"
+ "e17e109fd833e5d179bcd4df42d7882"},
+ {NID_sect409r1, NID_sha224,
+ "0c061da1a16f2be130ae3b20b89745e840bee09633fb49671db28ec9a051545f57ee07e2"
+ "410ae7ebc61c9af79868d3047705bfc64ac0c04ef0b286e579b650c7165443631e49e6a5"
+ "3c84cefa5625b1e1035a6ed89b8e839540040151132a937666524265e099272c1849f806"
+ "db0fdf2be64960d5b5853965099459968e5beb32",
+ "0c4c13f65eacce85a51881caa6f82d9e48ec2ac574947d2751823a7f072d38bd9da0cdf3"
+ "0b6f19084a6d291052e7bbc2e1349e1",
+ "0400af93430dd77e6016d1b076a52126a729f77e34bb3db11328d9edd56e29a7a09a7b6a"
+ "54f72076fcba886ea78ab6ad81de43a82101419e1bc339c03a8b4413ff009d76f9a19e20"
+ "1876ebbfbb3dc771b7df07bc19eb893ce23e40c679d7909c33af2bcd7d6306c0bc",
+ "0889be0918e7ef34d3ed226f967301a10fc30111b3559e37f5fa5a57dd5c73ff672c5279"
+ "d096c5b04c68b71d55e549d019281a5",
+ "0a4bddba9b7a402b584ceb82a54baab61e81973b7347e6dc9e3ce0f1e50dc21c9569d8ec"
+ "f8a7da97c38e92e52636eb13d3b4c02",
+ "063c7291656466f7bd647073a50f410a2cd9e8c938aa1fd3b28ddc1cbdd7b78b757689dd"
+ "661f5173f79896780ac3fdd4f3171ac"},
+ {NID_sect409r1, NID_sha224,
+ "74ac2e1303297efc3ed8e624722df505df55b7f33964cc0d270604cc48b58205d8a11952"
+ "232a8feb0079baa30d7d33660268b56a5a3dd90105f0703abef8f6636a99bc63bd47d9df"
+ "100351bee32d8205dab0dbd2af36fd173409ff8d1fb7b24570f3c1e968458f58aea5aa2f"
+ "46731ee91ffd6d3a060af6b3d5020daf1362af3e",
+ "0da591461791ae7847e6d8dd8df46a63d3021644abe9520e158406c96540d8fd82ecfb1c"
+ "3f6f5cfd7688c7656cc3e3dc94e586e",
+ "0401f48c95301956c62e2fd931df49953519b88ec3915c8de495dcb4ccba97bee023b1a6"
+ "cd9a66dca29aeef8f4f1117eb954e47cdb010db6bf78cfeb92d29a922c4b05daa3cdff39"
+ "17ba6978fe738296956ed141c749a938ca9f8f13f711aec930e0f1948ce7daf9f6",
+ "00576a91862cd63acc067563626977fee6f074d5726cf4f68e80d25029d4b8efe5ea8457"
+ "45c45e4cd42879e52854c3f385a10b1",
+ "0806435400248ec38a6d362e8b2cafc3f3bd46ba5baf538cd97683f76a733ba2b4ca85fa"
+ "7d13b99f4076e7616e68d66f05ebd8b",
+ "00ecae395fb324b4366f238f0df22d011bde5db6b0cf4189e3ad47101067ba87336ca47d"
+ "637f09f7a40a1bc64de8c4aef7f497c"},
+ {NID_sect409r1, NID_sha224,
+ "2afd17344552ccc577b0118caeb7dd56a0766e25f84df17c0505f9798931374b48df89a4"
+ "8c64e199108c36e00c0bf00a97ccde55787bb97c6765601765ab5417f3e75e35a9fe5e0f"
+ "85a721d9f08440ed617afcdc200b318940a1e496040a6ad9090476b0fb4fcceee77b3fea"
+ "11de09e7fb14853d1fff8ab12d66c101257e2d4f",
+ "0b5eb943f0dd390b737510e2bb703a67f2dd89dc9f6dca6790bc7a260cb2d0fb8e1a81ad"
+ "6009ed51010e7686d5b48233c6c1686",
+ "04001ac00da454bc329f7c13950c848392cb4f31594fb7837f0986f61601fe244eca3db6"
+ "c4f92accc2fbd1a4b8597b70e72d88b103009a364065a9f67a0aa7518b75a0b4a9140787"
+ "a67f852fa31342d6275c14713d484dec3116b9dbbb8af1d4945639997ded09cbc7",
+ "049176093dcde8549f95a8f1d1c87230046fd4b18a73243c3599815d4df8387a843bc8fe"
+ "1fd67f3c6bbe394547e11866f41acaf",
+ "09d7c4ddee55f61c5c4c2ac6efbba6164900344004976381c7b18c1de541a97cb58e14d1"
+ "4b6e433c4eb6d4bfe6d3e0a4e457469",
+ "0a9acf355bad544b3b120522365bcaa1e1dc6f1d3df1e30d3beb94f639e26147a81d154a"
+ "684bbafac965bc39974c505fd0f811d"},
+ {NID_sect409r1, NID_sha224,
+ "174b2b083541f8284645a810801e72631a11bd7bb805f684a7159e055afc44357f2c80df"
+ "2b7853678d34a04144e0ede2327d03db6df23769ec41194a8d9d86af74d51c5bc11ea878"
+ "c6a80689af71d3fdaf1c651003385332a512e03dd040c33d9c328ca89ec7ee9026bbacf3"
+ "0a7f3a68e0d894fb9f7100ffbc64bf17679dedd1",
+ "09cc63f32152284fca27ab2837bf1343144336a1fdf15b9727c47e877ac69ac9cf4c97b4"
+ "bf42f1ab10d73de8597a554ed099efa",
+ "040044e655ad66ca9af330c33bc6d00ccbe4533a4c6a44a3f23c921b62eeec8cc1918e19"
+ "956f3ed848fed93a7fd7ddea57096d1f23003a71b221c85607821cd864af6f533f216b64"
+ "1ceae104b8e16dbfdfe7edcb2cf9ee0dc1679b696149ff42a051c51c861a3c7530",
+ "0db9bfe4c2e659006d31a7b44eb7bcd6dd23810f27c74dd587ab9af23aa5962dd18aef1e"
+ "95da4ebf4aabfd558cbf72d2951bd44",
+ "0c3b91bf0794eca7faf227c4ee4085eac6d6918803242bff4da9c5dbac2e23fc32a4d4a1"
+ "92d7737be22810812558f820b0a2c13",
+ "03120a558c0edb58ae7ba36e886084801e7604558238c85a199af6c9e7506ea4e748791b"
+ "04f3a92354a4f1407837d87faab66ad"},
+ {NID_sect409r1, NID_sha224,
+ "758df71a952cdcffdc417b9fffdfb57582ab5c5473a8bdf0c2101953b023b77824263353"
+ "dea0e2ede1f800a5757ec6ac0e1e4e3ab5a4cd85567d2d19acc6b7069a6e7368401cba2b"
+ "6e642373654bec0ddd19fbf032794c15b7ef7e714e13e36875262c01e77766ed53cbcf73"
+ "5936dc9b33eaf2152a396349c82ca0297dbae4a5",
+ "09950355e8667bea8bbe3a2c4988436ab5394551b375e27fdc0c1a1d1b07ae957932f428"
+ "f1aca0a486e54cd0b5bb0a5c5650641",
+ "04002f623f81fb9a299b71ea8c58d5bd7d89e7be66ed8cfd7370de515eaceac903644383"
+ "38a3fcf9981f1b6f0b30bc61c4b7c15791016130b7c4061422d70b21251fa9c3d4e9636f"
+ "5a08cea794a0fddf74ff5ab1b750cce0f2768d54fb2fb75e2851c2296b39c0ddd2",
+ "038e8c70cd35591012f45f27980095c4bcbb3bd36bec594927968d3747618c7f5810ea9e"
+ "0a126e4d3e1e08185b031dbe0b37e5c",
+ "0cf957d59b03aed0e48189d2b9256b5472c8a48b4911f9cec14adce5c6b4aa22d093a116"
+ "364bcae01c1a739a4023da12a29c058",
+ "04cc2c22b243064758f52264ed84e757ff67c4f6596edcfe956b70f777d865d01e529f0a"
+ "8a9a6e1895168780ab60950a62d2d2c"},
+ {NID_sect409r1, NID_sha224,
+ "b96d9f66b2000e9408d602096f032b112f0e05ea874229ab9daf6e05bee49b4722e4f2d8"
+ "bf2eeaab9dad94438c76b7cc64dcbb59cb4e03f9ac70487a1d24d8d6b72d7462fe738a17"
+ "edf381d52179b3acc0c0177c113eb4d10e8e78041deac1d56abda0ddf892edb8be956d28"
+ "5e7236bc6794168f8a180f622dd5f2b9e690c275",
+ "0a995493d6971c2d7e8fac3da9f8c0b5afd877cfb94924cfecc167f9d87002136ab253e3"
+ "a4f9ddf5c9c99bb1dc1af0c6a3a3c4c",
+ "0400ac0e558dbca0fa6f013b7282e02717e91eb73304b4f7ac5e04f12f55824c441faebe"
+ "5bb5af82189044827007bffb1e2655794101178bb726242c718b416b21cdc9fd90b31ba6"
+ "a8350f9b4ce3a188b1b5dffd0e8894ae6a417c4d74c920fda585624eed4c1d3f99",
+ "0d581293ab1e509baa50852bd3f21f6493cc524a2c16206e461e320c7f2c1c201b9d2a1d"
+ "d4207227592a6457670a67cb72eeb58",
+ "022624cbbae5214d2c29e273c334b9ea78e10c7efff3611574d5fdf6f67a81472b606e02"
+ "36aa47106097b9147fc1b56d062966e",
+ "08895d107ba789d88a17c30a537402591ed788206487697a72f69285ee5eb4f03cdad6c2"
+ "604e174ef4b9bb919d8b39bee6231c7"},
+ {NID_sect409r1, NID_sha224,
+ "e7ae60ac55e6ba62a75d5328bbc15269d4638764169de0bf0df043d15f9152bed909b1fb"
+ "8c7a8d8e88ac4f552c1092b62db00958a3a827f64896f6de4bbd8fa5258d6c36e3904d82"
+ "d3eacf6eedba50b0242eb6b01212288448c3a9821c4fa493869c01149ff1850e8115cf9d"
+ "e1618cb8744626b1951d1de305745507c8b21045",
+ "070daf435cdc26ad66c3186267ad12d10f28d32d863f950cbfcf042fe9dfce553750ad09"
+ "8f82f7f1650c1126b3e4451bee6e11f",
+ "04019b41af3b557c274cf117d501ce7ccd04d8bff2dfc737d7efcd7888f2dda24737a678"
+ "8f16b3b6cd589d3f65bd95194799d65659011983077a2c371fcadbf47b10494f6ffc7ca8"
+ "873b3d812c45a87c48e1b49edacc0ac37e5038cf1aba20360b74c0903c23a62331",
+ "043fb8cb87591747d12f4897dfbbc79644b87907bdefdbd7ff0f6f2e7970c7d40bb2fc08"
+ "c17443d029a92487869f640607af460",
+ "05ea3493a8c04723de9de2cbd523481e3a8593ae8f010ecbd5add6db5a82d9b13ee7d24e"
+ "cb417419639d0e9f4e68d14f6799829",
+ "0a9bbaded0a2894e384184e166bc06e1b2fabdc70536caeb3d0cd46b955743cfa8ac6edd"
+ "03760d1b613fb445367734fa4270139"},
+ {NID_sect409r1, NID_sha224,
+ "666b0dc2ddffaa7ffd57ea3b2768f02d4b77c16fa007c6d1918400d195f068cae2dcaa69"
+ "817e6e4c70d5b29c5598efe2d957bd12d0fafdcf5ac52dee80a2d46e77fc18cce2a49bfd"
+ "787ff77b942c753974d22434742bdb494590d17c42af725b1309e54566276af3bcfbf5e1"
+ "74d3cf191b85903faafa1583282c97e66c5da6c4",
+ "0f8121980dfbe9ad0bf92383c7cab95fb72d5caba96e1de7772c6a179e85414802fbb86d"
+ "725401451329287305570ec7fdd873a",
+ "0400c62f4e7eaf3f1bbae71734c86b8a40ed1297b9ba1151729f9363824425193e8605c2"
+ "bcd6094aecc9d7ef2a41aa6b12877291cd01882a45555b68596dbc8bb093dbf1aab9900c"
+ "f46653c58f5656f3688fbc72c5236297be2f0586a4031279b9014f2d3655adef41",
+ "0b4b5b19922bf6a34a00454374589f9c89745eb194b0352061a79401e23c0c0e1fecd759"
+ "7b5a7cc1c463b76cce7ab921867de00",
+ "0f1fcb80a4fb49348fb326e808d8ed8c21c376f0713429a22bfe16d68cab0295b21d4402"
+ "9083769761c4fb853662d440eba4cfa",
+ "0252a94a40008cc2c1a69113d8e14e989e7fe13918a2852de6930973a91784eb35e20d8a"
+ "e150a88c459167f8ece998cbf6c5eb7"},
+ {NID_sect409r1, NID_sha256,
+ "3e967cbc2bd936e0b6125dc5cf885735bdcd2d95b2f764de6931c4578ac8e0e87abdf963"
+ "75481df67dbe1b6c43537e84ec62bfca6672cc5f3ea4125abd4a4119edffe04e42411d33"
+ "8e8b10abb1f1f818c50a9631a3f89feb5be5367bdcb0a8a82c96a427ba6ce99f9631d441"
+ "1a2b7f5b14d32cb3901dc9d285e4cf5508940942",
+ "047682b2e3bcb5800a531858e8137692a9b1ee98ea74e929ce4c919c26ae3b3f1d4122d0"
+ "7fd9a70d8315fab727ccb67004187a3",
+ "04017ffffc1d2009e844f8e625a3bf11749a8b4ea0b0fe3532d124112edddf72d518ef57"
+ "7f160962b88ee38b11445fdd356a26bcc500ca356fa8e90325aafb1826a694a55a80b2af"
+ "52e70ad8d507d48946392da8b9fa27b8ff6927fe5130c69809d9a2c4b1d7eff309",
+ "058edc8f3665ff9166af55e69aab9d468f576bcc8f652e950082a48224b4923cb9396ed4"
+ "ae06f05bcf7797352035484fdc501fe",
+ "09b46600fb3b8204d4cb63ddfaad1482dd8cf8652f63c926895b8b8ebfe27295c052b3bb"
+ "81dddd8687f4864f258a433010c89d0",
+ "0832f7674eea791b5f17db7cf9e2ab13253d870c6ab46ad01cdda30e78db8b8f51fd377d"
+ "d55ec7786ccc92b17364a3c17ad5be4"},
+ {NID_sect409r1, NID_sha256,
+ "ca1c90012eba4e7c5f01d8cb3814c58f48c03a16be6ed86934014365eee547070b870d1d"
+ "26a872cfd28b60d9ee0a66dea223e9eaa90ee28076188d6091f26f665684f4b486af7066"
+ "9555db9058d485c677b2a34d4a98aa8d6f43bf6f44aff2a23c5d765e98f0438ab81be058"
+ "5a5be29daece5d4116f44ce6062753a3ddc505f3",
+ "040cd1a06233ac27f3ddd108de7c6c0982793ee620d71982697713be9fd5143658929924"
+ "cc88747a680779bb00da8a44e1e7d3f",
+ "040164e518a6719b1ad61a38a214ebb06dfb0553bc760799e668b1d0d098ae3f06dffd9b"
+ "84c16de90db19043d72bed2601fda14b1d018e022ceb850eb1db59e6cf63c4a7c73bea0b"
+ "70448a7dea77d5ee8a2e1a36cbc46454bacd5954792de82f3ec21ca6a509b0c7aa",
+ "04a936fccec003bd9e8eb45d27c0eaedbd452e6fe99abaa62cbd0739bcf259cfb6884d1e"
+ "60b82522c6146f081663f6f863576c9",
+ "0dec1635f2698d4666df2c217fbe3e644d27592c5607a5549c877257cba7bee29a8cac75"
+ "a044e72d039747d0d18de1c34acf072",
+ "0138493216ffc3b8aa2e0c26f4fafaccd6609e6b15f767da7c907db64b5181bfdb447d73"
+ "ede786144c70ddce7df7eff46dee4f2"},
+ {NID_sect409r1, NID_sha256,
+ "a54c4351ebdb075d6a42a787647390f864b2bbfd8bb3d0e0ea9d767200fa344d1a9ff091"
+ "bddb186acd69bcaecd767068efe4d752d185bfe63f6674279d0e7192d2077c400bbc0d55"
+ "99ee28507c1253f05eae0687b965a015e1f3a292b4650106765266f5c95b77ad2d82a6a6"
+ "e012f233169eb6b8d83576901cfd4a927c54d7f4",
+ "01ca6f752aae4eb7fc9c73a08d6fbd96bfde5030d759a2507bd45b6e1d1487e53abbe98f"
+ "ad4f41976364e0a1d830910ccf97abc",
+ "0400f6b7220bd24652572b37a0ff25e75f72d583c71c159857482ca9944b956a117a6b2f"
+ "f96614898757b8a587e3c2b78d9943003d0118fe425768bbf3a4acade281c41c745c9ac9"
+ "46c2f8b95d65787fb6b64deb71e6b38fd8c721e01c87efc7c2a6d8066fe3b35a0c",
+ "04963aa161b5ffbe5d7e5058f0b1457ca1b9cd61d731a0470beefe5f8998904cf4594f98"
+ "dcb41283f66e2b07c5c5d6a6c587826",
+ "0abf824d43d993107b552d7ded13f49ea0ae7bb845e56ad7e53cc5f9d64f99f9f250e430"
+ "5ccd9f6594c92defa7f6860fab1c349",
+ "090a541f1844357f618e5ea34c0398ccbdab0cb363e266980ad304dfd675bc81c0345a4d"
+ "723fbcc76ab5ed4cb0ba0af1b71bcd9"},
+ {NID_sect409r1, NID_sha256,
+ "6723dbddc8720feeb75e2a061b7fc49079f999fbc79ec8a8e01ab8d35b438b7049da5a23"
+ "c49a58101742791f84f45d5f5cf551cd7de6926a0e2c4ffa1e378f038da597368c62df8c"
+ "d8349bf046de46d02183dc05b3a3575f5f232dd2970057200e2c9cb60eaa6b4d72f8b73d"
+ "4d40b98d1cc801d1a69cb5ed780a75a4064623b2",
+ "0fb9b1a9597d216028902abf743d25944258b48c9762d4589fe660396130b75f6006cacf"
+ "de60f6204463cb8c18b032de1dd68d2",
+ "04019b07f7f4ba100aa9e749bcf93a2c9955c442730c5e1f6f72c1b1d132b780d92f414a"
+ "533282f7b66677c8cc8a3d5ba8b3cd3cf7006ec6e9c495ccf600f8c19597e9cfdb639406"
+ "b04f57a29dcd1a7a843c2c44e8321bb8508953e9c0503f77d36bdef24d5d39f85b",
+ "0757f6acf74eb02b7ff3161b476dfd8349854154186c959179f11b9a15da3dface40ae6e"
+ "d771096e053976866433382e640283a",
+ "08fe276e7f63ce5f85fce19d1739a8a9986cd3c3fbe26fd59324efd98826f9db3b228321"
+ "b3ad1d96145ca23cc02616d9e9d7aa6",
+ "016e06de8e3e0abf4a4f52bd2f827ca4c57412adcce3271fb4014069713f3723a038bf56"
+ "0788d8dd48430d3b30faf15ad9c0d69"},
+ {NID_sect409r1, NID_sha256,
+ "ed53cec5e5500d62d38c829002916c657674ede4439c6f405ba672327ec677490e656bdd"
+ "698f114c2ab5e6a1fc94a1a8d64466cfe9eaabd23a8b5c37f76a3c0decdef73b3e7b751c"
+ "bf3b0817f4079560b5ea34cead88ba374201236bffc48eaf289bbaa4e828afa7d732473c"
+ "228ad00588c9b443d65b998f21c3d7a9e9196c08",
+ "032109202d754da290c266f74f47805a06e6b5c3f721a72fc97a3bffeb8887e0c642d49a"
+ "6bd034847d0a5ba09239c5dfdf0772d",
+ "0400f4dc8b94dfe0a27d4d41399005b242c3e5b14bc7cec55ff3a1561c894d73f365fa8f"
+ "a2ccde1fd7bf3760b96ab2db78d2d50b03013ac66e95c335b71fd1a98f101a392dd4696a"
+ "806239fbdd0708acc69333febb48d4b649f14f42841d66ce03f1fb557a361c12c1",
+ "0b010ef786c13ece3a10eaff79b93ef3899aa385dcc1914e16abba90de0ca6389d664082"
+ "fa727fa7c7907dc4c88bd621e6124c1",
+ "0488b8956c5999c317830206fc8b9f6760845c31bc4ba77584925dfe25c05a1e7d298a62"
+ "e9748c7278eba622713df59accdd78c",
+ "082701053ddfaa376c99cc42ad4587d84a358d9d8a9533888cc382623114aef51170de77"
+ "ecf64af02e09bee203851abb22f5d11"},
+ {NID_sect409r1, NID_sha256,
+ "13829401bd41e9fe01329e9f5a002f90f1a6ecbf25fc63e7c1345f265ff02e496230f706"
+ "c6ab377ea52d8707b54f8fc5c7f089044e2bec1dfc66a07da76ee12fb9ea0697d87706b0"
+ "ebf677600bd2fe117f6cdefb8bd636a1b6b97549ee78f992c24acdf3a946053f06fd012a"
+ "9c703efb8bd929a66aa74b05d61bff0395232b00",
+ "080536e820fac59b3203aea928475043b2576446619001647e35693a9e65d15236c3cbc1"
+ "2e1bbe0eb305973535c882b70197a92",
+ "04016d7448c0afe992f8c59b19d6cec64d8fc5b10026a806760bbdbbf0012063f46d31e5"
+ "21a34771f826669c4d1ddd58d3aa13ebc901a3742a6f231546f0704345b9b83c72d50365"
+ "22449cf60c1b3bdfa4c8d36e499d4ce62e6e7bb05c6132bed1ae44eed17414d2da",
+ "042753a515e607cf9992dd1f249820dafe53993b59b1e57d8f2f9100f609cc15713d27f5"
+ "dff4007e078d6da1061ddd36c169c21",
+ "07eeb1cc19ac45f52c0b63ff8ecf4f4f35958e86cc3e3a071a35446d490a426b48b6c287"
+ "027b003488573a4834a06dad48520c3",
+ "01410d85f3f2adf065b60a126170c43e34e0883338118cd33b0b3eafea1d142480b236ce"
+ "49d35fefd1ce4ad3d25e0cc9268b1d2"},
+ {NID_sect409r1, NID_sha256,
+ "e696acdfcc96a6c088069b7595ea9516a36d8fe04dedeb789fbd965db0cc64b7017a8210"
+ "15f6210b6989e515def5a9605fec0d337e4ac59f3101a505168bf72ab6d98ec62a71d2f9"
+ "4071fc05b95e98d4efc59fedc138e3e49c5d0b44d1f48f7b1e7c1944ee189b242950d2bc"
+ "804d31c7eeb45283c84638f043ab9533976433a4",
+ "0b05e5f0dad9583ea18fb8fc4d8c75fd2e3cf9e92cdd9b737485c953620d345006c31c28"
+ "8b380258b6500b84f729ce6730e5303",
+ "040157c083ad9789966905c212dcfd7c049a8ba3863fd4886e4b118b3f06445fb0d4745c"
+ "2a8a1193dc68915722089d0d382253b67500867e8efb575800f834c978ee2ecf0f84f72e"
+ "75dbbac86926b73fab8b47f38eee17a63baa02e3edb9d4f6b2fd2afc88b6de36bb",
+ "0c72eb08acb1d422999ee8d51f9ddef9f897dccfafd886998edd3ddf30a638dbd0ed59d6"
+ "8885ce242fb838f022bccd4f3b5f854",
+ "01f4dddcacb088f6e24d331e8b111e390735a41e1fc29da8f5ffdbf7342f4b9056786f2a"
+ "67159d1e57570bd69d69235ec562416",
+ "0809840df1ef8fce9b2edf8f970c07bdb5fb755e9d5bacd7996275c4f890173142c39299"
+ "ce9eeb51d21a32acfc7761d5a2cd7ef"},
+ {NID_sect409r1, NID_sha256,
+ "4058b9a8cc15ac148909eb97fa32aafbb6077b168dde91a411dbc973df7db056dc57ff78"
+ "f0abcb70f70f800bd752197d681f44df4a7817c0e7f60f8f65489ecb6167c14b525e91fd"
+ "2cc5d8b80ba380a83d031d5827c8b1262c687c90ef0e62723d9b565557f9f6fed0db48f3"
+ "799274c2cd60a14303406c35802cba6261121296",
+ "0be1d277813e79051ca1611c783d66003ef759b9e104f32298017fb97667b94dcee1ce80"
+ "7dc6b4d62416e65d4120523bf6a4edc",
+ "0401fed0171b5b3c6d9092a6592944680a08a0d4f99f08a3ad1c22b5bbf11c0e4ab3cdae"
+ "9526b0ca2b1bbd961362faccd5caeb1d3701ae7d57db848e5c86c31f542f1995c76e916d"
+ "ea9aba882865febca630bc6a10ceb6732bd5f07f51bf2f37ecae7b7fbbca618ae0",
+ "09e3585213c6d6706524e3c8e753a2eb0edced626498eacd842d44a73c602d801a079f94"
+ "b781ae1ac5d44209e8e3c729ed4e820",
+ "01098d98cf83c705515494cdef8c3f50ea8316d95b3ca5f9a1296f09021de57930184ee4"
+ "b9f563aebf5fd0d5abc0885cd24c0f2",
+ "0d9706f4474a8fb0c701505516699025fde546a21a3fe519a173a3ac01f683d40b4db264"
+ "2330bcdfe188693b15a476cd9339ae7"},
+ {NID_sect409r1, NID_sha256,
+ "e793237d46e265ab84ba9929b196405faa3b0e4686e8693567e53f68e6991e5767797467"
+ "7682a2510c4c35b1968a90b32c4941af7813775c061c008a60f9f671cf7419c94253d610"
+ "6b61e65034497f2d273a5058379bd986e3d917f708f0a2bebdba150f6d78a3af9c722a24"
+ "30ab0f4bad602e91e18aaf258e3785fee78e4502",
+ "073c807bd7e07379782ab790720de4ae5106f16d34e80ed70da5b1594e660c9b775db940"
+ "66b93e74f855f57d88b6ecc6228aace",
+ "0400301526b630ac3fca5085f633deadec27af353233e6f241772c7fdbfa42e47a04b0d3"
+ "ae38c04eef2109390a71fa9fda652343cf0137eacd97a8449ce83f19a13a248af52e512c"
+ "fab3e2ce1ceb789874cb08757dd9e47ac21b5c0846498d8d7cd90122c437602d52",
+ "09245ba1873114ee2a3e642c5b15049a3566a2f003cb3d25250028655fba98203feef5f3"
+ "07a9f4c77f232976d83723f2621eaa6",
+ "0c8136d4b998ca0544ca1430abf55601f259aac7756c75d1371de63d1471053c789833c5"
+ "cc257e323a71f80e21783df4efa169a",
+ "0e2ecc6f0a418bee5de7c2418c4ad85d981b18048f94865821de696488ee19291912ae7d"
+ "a1cf5fe9708e2beb18e6cad4e3f7849"},
+ {NID_sect409r1, NID_sha256,
+ "ffb8bc80e7619a562d8506eba7658bef0c25ace3dc1d01bdc2ef00933d4fa07b80364e5e"
+ "5826074edd46a707dbc3b0ab19eec7ea8990839d7fc0a80b70661204c52bcbef57c1a7bd"
+ "c861c10766033a82dafbead283d911a9502d5f9ef0a39d35ef26f3616212d4bafcd413ff"
+ "d18b424fe09b48ba02ca5d97ec996205cd49d22e",
+ "0a68379b2296a6c944ad5dacb593b302d8ef0b05873ce12bbc371d705f308c739d21f343"
+ "349524aa72f05341e64f7435daef112",
+ "04007fa0f698535b011833dac1ac96f3739ecf0c29f7fc1f8bd635f4f98daa70a3931061"
+ "1ef51b2fdc8b37eee3573dc34cd2528d3900be1a9dc30dabee3403da4f2dac6622e6fb84"
+ "96e72f3f17c169e7b554efd84ac655e727ae9520feaecc752601d5391270cf0cfc",
+ "0630547017103c3f97de48ab6b942db94b2db9ed7dab0391ea9e71c1b788c547abc90088"
+ "de5b3e36c9ee4280bb454c7c3710999",
+ "0916aac91ad329d6f330cb051941c781b9e59bfbfe45c4d4f6ce0d1aca982e1c612952bc"
+ "ea06784c57c121b14cc0dcca783d0c2",
+ "06a83d93f9bb81c61ac290906d74e2d3b964c39b4e96370f19cfb4a55a3f7901bca3deef"
+ "4bb79ca6a798fb9b3a9b0137c5a9324"},
+ {NID_sect409r1, NID_sha256,
+ "946bde90a5b903dd281a51d7fa93d80f3fed07eaf50c18fe9fac5acf67326bb18effa314"
+ "4e25c151efc006a50a274ec6c6a5d573051c4e2d117ceb0fa125acad07a10fb6534a8e5f"
+ "5b3da2a1136779c51377bf76c3a4a93c0c6158f729f2293e414fcb952c9509f228c804f0"
+ "adc1daa327a8991d48ccf4f3957c5f8ccbe3ad4a",
+ "026046bbb269ddb1ec14ade56175482343a21b7c265026cef3c7d6a1ae0f6a68166b9e6c"
+ "49a6e733ad2ad64df7137ef230038fb",
+ "0400d09d8118519f9d00df7514d2ff99483473f680b750604580b61017513870a3cf1c40"
+ "3495cba488309e2c084079d53139a3695300d25e41038c18e4ba6f4e9d14f210b71f27b8"
+ "ef2c1d4cdd5f63edf8fe11d548d070177e9ddae382fed2b163ff2b58546f10a99a",
+ "0d6b0e5d83155a035248ccea95feb0b4d1af818e5ac6d5f41f1a255dd8b482a94de0f4e0"
+ "37b10339d1805dbb6b22af6ba834219",
+ "08059524790304a37f2a0d57bb2b93cec79a827b1fdc9ce2d7dfd4d277e0f71844d33531"
+ "4a30bbec5598a399e197a852b5528dd",
+ "0e7870e2a0ed16cf340a04fed4d2048e4e231cb8918345e1852bcd3e30413a2219864851"
+ "121a34fc98dd99976e2b20cf1d1bf2e"},
+ {NID_sect409r1, NID_sha256,
+ "07f3fe1369ebfcbcacd66675bd4ab22edbbff72e68709cb57d4f590e49440f01691f490c"
+ "58b5117bd24aa2fe2101b59c61c417c918ea08ea34bbb9b8aa17491ae5d9329affe894f4"
+ "2d7586017877fae3ce35bb80c97f92a004380374ec91e151995166e14ac00505fd1fa810"
+ "cf02981bacbcebf5f81b2e633d3a3db6737890f4",
+ "0bbcda66978ea526f7bd867c3303b625f11b94dd9ee6e2c2f8688ff07f2bba83c662949d"
+ "47ad47fa882cb7d203a7f0ef5dbc52a",
+ "04004cf5bc624553e833ffbee05ab863e5def062e0d57c28e71d758d6ffd3839504d7ed9"
+ "d3b1a040bdce8e187ae0b4ca23aa565b0100fc1a15b4f273737eb92a56928395f6518e05"
+ "bf946afb65ebca3787f7f8bb3d946dfd26c4831cfd171b4c66c2237409ebf224d9",
+ "0a2cd205d957a20c79699e91684cd22746c476a79245f11e7cdf7e6b74f07cf2fd9eea65"
+ "eda97e8994aaf51942e15695545abc3",
+ "0aa1da120fc19523e8162e6018e4ee053eb680ebc7e31d00db34f7b177c74c5e6ea344bb"
+ "a3c39ab7ebcd92996a1c156180b7dc9",
+ "071aa4588741208344b323642fe03f1cea73865ba645169df9c84bdbf7488829b83b8da1"
+ "72f1927de1c8cc318ede545c748c782"},
+ {NID_sect409r1, NID_sha256,
+ "3a1cb13438e3bac9ad4ab1d319e90e2c9f118dcf1eb54d6333c674a665d41451f93cd4a9"
+ "334cd057a44c010edb668254517a63700a31eb0ca474c84873e486f2f8e158a1a7735362"
+ "ea0cff8ef17d959ffd851b21a91412709b3c729474d2cb40f6ca0e397030eb2611b40291"
+ "6e4b656f0fd868247d80be3ce33d52054b7661f0",
+ "09be3dd3442e0330750f0a6252bf9cb317f32f942ae516a4038dea2c40ca6484fb33611b"
+ "ef016cc64baf166c122e87c15466fd8",
+ "0400f05a6fdbe6f80c0f5ef3322d8accda4b9ae28c91b6198b888be713afa5e652e907e5"
+ "ca9aff5fe77b6546115b4c732bbd4010fd000923d07aeb8c947688e7d3dcb16ca69440e2"
+ "a89539a41b8fbb797523d3b766b46d257b87472f5084992422cebdc4e45556f5e4",
+ "094fe051a13ea8dbc89c4cc5511881a48ef5554de265f0badf8741ae5027eef25c617bb6"
+ "a3f454a992fc68f5a548903809de09f",
+ "0162687730f0ab2f57e348476d1fa4eaf13199ee44f44dad5807bbea4e5ba79e92556f28"
+ "7cacbbf1fdec9a8b78f37e78e52dc1c",
+ "01acc734e2d0c81a56ee8c0465661c365edae56228ca43184ea1d7503da3d38e7607b159"
+ "0f59f5190e5c7264cd0d7a39be71069"},
+ {NID_sect409r1, NID_sha256,
+ "e58e7b881a563d54772125b2863718690a5276c93d9e1c5feabbdb5d6f7c7293ff0f8980"
+ "5b53663bb417fdd46874b8e6a466e7e3ff6737930a0662af1d5879b071b0dc4d014778df"
+ "f26a2eca5992e763bf4c4698c382ac947215aa116515876008a56e5bf547857049c38a2d"
+ "3737ed3393705fd346897c3beb80caab88e5b8cf",
+ "0ed321fa283c662e87eaab99b7715e6cdc9b42e14fa5bbe2c56fdfb381369191a42da7e5"
+ "74839f90a85577485f19446fccaf6cd",
+ "0401bbb34e6bfb1c1335c48e8b44cddd8a46486fad4313581df216002b382db1d58adcae"
+ "74af0d38445cac2f6cd9e2b439d106f5950084473a5da9f910b4807ec5ff450be353a187"
+ "af6ace821b18e096c47752b6336dbedfc4b481e356e689fd9c03ffcdbf3e4ea39f",
+ "06ae69e55ac1f7b0f844f5ee0b583e652e0e5bbfa4eae85c59eea1485148e34f4d33c9dd"
+ "d7ac071a28ac0a6191d5ed03e88bb86",
+ "0c3509b6c0356e4a30a82fa7411d1fe17ed190b7eebf9310c44fd568494c894a4f4a1a09"
+ "e58a4d030d47227e54f7220f3f79f4d",
+ "0d44ccff47d9fe82627393c03f882d4b98633961a897381ce8b2cd18f38d69742802d18e"
+ "6c988a23eb425b294f2c1b84cf42cd1"},
+ {NID_sect409r1, NID_sha256,
+ "8889ea1da1cbed98963941f6ac24f47253ff6af52de920765214f2024aeb04f7ad469368"
+ "30a8eb04d95aba64ed7cda6ef242f454b67bc2de38a46b6524bd5c96739c4b580e89829a"
+ "61a8249ec8dc27a50f43b8554cfb6f4fa4ca6875983d4b60a1c6b49f32ddff6fac0cafb6"
+ "4d55c6f594b195c207a9bd920dcf20e0080920bf",
+ "0396b805073f3c3b552b1024dcf35559ac44f255b688871a3c6657f727a4b09f3806cbb7"
+ "5d26a00ae1728be632387e804775a8c",
+ "04009957f897a17241eec5b8415ed7ec1bde5df11583255e0a8136d076d72ef377ab3f55"
+ "3d6f56c054332a24098aed6d12878abbd301f58eee295765e8a55e388e235e833bc5cdc5"
+ "d51a1d98e13429bcb7891b25487b7fd8ed804b1856cb6071cc28756bf00924bf1e",
+ "021959970a6ad070d1ac518493e309289f3d9d6e2a8933bca715f53cee4ab9000ba2d014"
+ "7282495e15e63f258dca87a5db7eaca",
+ "0d1ca34413341c115f780e647519547602e0361ed4d70402f42d735353696eac6e4024ed"
+ "2eacf9577252d40c27297e9389d1f7e",
+ "08cd5bd43794b32d5bd2ccf7ae4deafffa0e0deb92b1eef9d3ef807d456e459f92e9f106"
+ "27b7e7574ebe3c2faa858bd3e62e187"},
+ {NID_sect409r1, NID_sha384,
+ "55053af9370901e38622734a5bc5589f6a20e258627f381fb0c366f3dbe58394e5997e97"
+ "8eb7ebbc530f6e6186f48294149b8594fb551c31c50521a8c4d67e5862921695604afb23"
+ "977b6a69b21abe75966fdd11bfbdb6b51ab0a474c5fa07c4de7872a3bd81acc417655090"
+ "558dfcd5af449b3347e61fa9e839bb9457de64c1",
+ "0a8fe323f6736bcabe971c7d964e75dece70cb54561da48a11c40027ebddb23e41c7b486"
+ "00f569500fe8ea2abebdf480171dde4",
+ "040020f2dfee967949643b6cb8a3810524044a4b873a4984e9795e4dd7976536a2d748b8"
+ "cc636ef5c8fc92aba5677c4a0951a3332700956ec5433d73162c9683558f0dfe8870cfe6"
+ "6575f2c34c765372c7c3bc3b291e95c4e3665e4ec5e72131975f0b1f5f30b0c844",
+ "013f26e13d43ba05e01f92457374fe2ad1ccf94ebf22334447f9360f7f9748bf3665ec30"
+ "58ff6184fbfdbf7de9e1e2131cd3991",
+ "013c4c290cf89789bd6dc523deffa20c94e92e88a76eebe88457e30cddb066c7a43aadeb"
+ "0493b264cdae67532db7dadf879d991",
+ "043bb7a8db3d79938beedcd6ce02f375e26ce807a2afd4fc446f372fb09a69fb34734df5"
+ "dc8f6393f86577a8d29014494379624"},
+ {NID_sect409r1, NID_sha384,
+ "c4264330534a6c2bbd8a3b757e0912558302ce302f835ad8c5474993832fd30036fdef40"
+ "b10ee37293e871db5b0b149654f9e543e22111f9709ef45732125f713c031ccfbc9a2f3a"
+ "ba160c241d27be4dab87ab2fa9a795752ab2daf20f9d06a98d90d01c07133adfe83cb11d"
+ "5176525e1bba6a9ba70ea48b224d46ddd8103f65",
+ "0105938ba9f25034da3e032dee121bdb192ac2128b50a2ed4bca042e96cfaf4660c9d35f"
+ "3e67bafd4c99f9447e6dc408e0c4471",
+ "0400f1a9243920d7cc26741eb828bb55e34c140b0e52837792ed6274a9aa6b5534cdc5c5"
+ "96a1141a746dee380c0d9c2f77094c36ef01393ed8c609751550ffd077347712f3b27a86"
+ "9cfb1b532c5b19c381365ae5dc8fbffcb2182777a17690616d71c66524017d861b",
+ "0fc52aa8c590aa28c5353568c9dc69734adfae840f1e0642b57863dc7f4faa37bf3ca789"
+ "a3d7afb32c57f66a61780e253f50af4",
+ "0c45b1629bbf3273c0e785a28cb8187ef387502ac4438a3372a5c72206a15d7c5ecf9203"
+ "ecfd7e0ac910b6ceee3be50c6664f81",
+ "0a0c2d31a47ad5f9dc2d42dc36714cdce47666f6e2f05ce0e7136f166647540d1e5fbdc7"
+ "c9fa0def8962f44f2f8bc9addc10057"},
+ {NID_sect409r1, NID_sha384,
+ "3236f1ad164e1b25d828f5202e3513c80c72a577aa9af56f041fd96cf5a3363f4b827723"
+ "b1511a2f16360e32eac90ac55f4ee1146791420ef9e2af333c17d157b00e43992ef6f2be"
+ "2d2f211361e468413dd93fb69232f0a0d110bc5fff361c0410344aa0636bf809062c73a7"
+ "ac7c142063912b6ad7e1626fd2a384f35faffaad",
+ "0ce11677ca818537dbaeb880fc967dc8bead203a2538a55e756679c4a9e7975b9b3e6aba"
+ "4e6c6eab4152d0c0939027e9b0bd92a",
+ "040023c78eda396efa28c92b120c4ca1e19dc6c467234f9f73701d8966bd0826c20122af"
+ "5f7c9ad5a5b855b6dc517c22131fb0b5af01ea47619f91ed4a010dd49ece7ec78c5e9829"
+ "7220b4c239ff4a8c29aaec008011acbf7e4f985c02311ca703bf4ce4ba43412ecd",
+ "0dae763fced0e498e3efa1c6c412a25774c9bd6cd4bce25ab0a7266705cdd54040ec55bd"
+ "7e6708e71b09ffe9c19af9a1ed9c878",
+ "0a70694fe5da7646184b23b4b434bca1b754257b8e7fa9994dce4a7a92b7ec8c7f8cc69f"
+ "18d17915c6bbca24f6621f9563f7c35",
+ "009e6ba97ac2be8537afe7f8f8b9cde8841323b5cc63cf2ed46a7913096ff8d96040296a"
+ "1bf9aad691b60e1f18233964a421fe1"},
+ {NID_sect409r1, NID_sha384,
+ "6c400ed098d8369dab6fde3553afbbd4d47836d0d12dd16015f15cb8d067a39391c85ca4"
+ "e78c62b8b72c1592349ff8dc52db8ccb7fd80c085fae456dba6f4a2378e184dd59238c92"
+ "cf04e40d43a66b342d2a1325a0bab12b1ac857f0564c27b35e6abed02ff5bbbdc3770ddb"
+ "b2ee0513df48bcba925da6d61583076cd3129603",
+ "05a239ae0f40d76d8d3589f1662b5ca12176a4b2784faa8339b54e96a1e1294433a4d83b"
+ "f904196f939bd8b33bdb4be340ec703",
+ "04009d03b7985647027a17c06b30ce9fa1b43d0484195f584fc347f7003802613b524cb5"
+ "641db3425ab4b3839e12c012853ea8384300818f5e270baf5a771627b098a6f9ad8a8262"
+ "e331c299fa0722a0df6ca09bdb9c92d22d72a73567cd5497d06639aa47349df207",
+ "0c22251c73998a3a49b3fc65acf01438941a8885d1c5072a5d41d779af70c044153fed40"
+ "80151b524af402a4e8ede4448b717d4",
+ "02d3a7ebe5de23e0e601c6e41616bf2a9a7fb6193fef8e3f0a7fb8128a925f7bec383366"
+ "9d1a304652b7bb1af5186b2f612da1e",
+ "0b7bb17155068a8d9b3412d04d407556ee133e1a704ec5da87ed19dfde60517501af345e"
+ "2e744d35d844f8ac8ad08b13b17c498"},
+ {NID_sect409r1, NID_sha384,
+ "039a149eaef2de30b0ae457b376ce6fbf88afd4cfdec02d3c5e00400d3b0484c1cd6ba74"
+ "db5de65d6f2fe39871349b30fdf1ef29bcbb9e182eb3ec5629d07d98354a5dfa82d7f0db"
+ "3dd10d1510c0dce086848a198893ca5ad24a663494f0596b4eee86199ea85e7e8f2f76e7"
+ "a6bd4a052c54287f61b391f1e52f96b606151c34",
+ "0077390c62ac41aca995640fde0c79c76f4ea8a8dbb22323ed812bee837ab8798c5d0ba9"
+ "76c7aa634d4b1c2c155de2709e7352c",
+ "0401a9357770270c528f2af991c447bed86194d458f693a871ca38f271a9e6a566f5b9ba"
+ "3ef3d2f9bde959e42934c95867b280e9d1001f3a0516fed36d3622fae3f44d87c4bc67ce"
+ "e0a995cea242e530451d43781f2ebd163f6f521497fd7a1a6c7b93d33b77083a5c",
+ "02555cc113c8516d741b47ca41f53ed07d509845f140dfe7dffbd01a3f751ea9f22e12c9"
+ "39a2ecb1827c0e56b1b1c5459b66aa2",
+ "0e88333875a507520d0b62b35146e37e7ce4e2f2478a61adfcbc6e1aa9fd0195a4960c63"
+ "3d9d6aa9a79323b7ee00ab802768436",
+ "094595255e8862d14980893c095608113737f42b05b561771f56ac1d54eb521bcefeb392"
+ "8917c07c1bae74cb9aa80dbd34962d0"},
+ {NID_sect409r1, NID_sha384,
+ "08617d04fffd6644c40f7dd57919f7dcf3c888f4147535d12ca658302305bb8e220bb17c"
+ "cdc480254004b9035b357120580882ef86aa5a061b2850100285b7d61588a664dd4f5394"
+ "f5478e68a80f610c9204d056009c1c9e902161eda33ef61aa902e96b6f094a9f05313569"
+ "2182943d38b9763055a38739a2a2d133c5dbee89",
+ "08bf23b09fbbed1b55769907aafb97f4759cec98649b2c9da5157517d4f85bb70157076b"
+ "5e4aaa7a940af042302f8be06a84ab6",
+ "0400883c31c474333f74ab2b86f3eac865c4b2b54975ce19c5cfd23682d041ef3deaa43c"
+ "9f9e2c194ccd3add6677de31fc9e07dfad00a5a36b54f4eea6b300491ca22054280b3f09"
+ "b202b2a6b55df9e3271c763b6d8360a330c16f936d69fa463bc0c4071707c9cf95",
+ "0812c83aa9dc4139f8c3f7c55509f9e10e6cceed30e16afc028b1904b4d260ed0e77acc2"
+ "6e711a7a8e24c75fd780ed893c0bbca",
+ "0fce07c6f791a05de29609b59d55b7062e82fb554341b2b2a8187baecb9c95b01ca5dbf8"
+ "ac88c60babe10af2edf5985b35e10db",
+ "02bd026a3e45ac439647a483261107829411c1b4a9ab603c080b92f605cf742754b65498"
+ "1460cf7aa72b5186b59d224dd015314"},
+ {NID_sect409r1, NID_sha384,
+ "34c959f549a307f21b850ae105f41299b8bc94fc292aefc61aefbe0a1bf57576ba8d9b80"
+ "caac635e4edeb22530163fa9629665fcd43959f68eee32482f1845a78ed7278e6e43d09e"
+ "d6fedf465001afc0d61f1d2e1d747623e82a762576b879c7024e34f43104593cdd691d53"
+ "bccaeb8f212dc29bec6bc94cf69d0a8491db124a",
+ "0082ad05d19b8e16f80e53a4cccf6869ab5128c5e622ed146fa8555985ccd2aa3b9957dd"
+ "374586115d4d75b1c01cf98ecfc3646",
+ "04004428d05366b0a46e6578fc7528d185a3f85da06c4179e9c9055dc0a7fb4afbc53c94"
+ "954f268e36d2ba8731882bdd27d9684c810136ba6048ec672601987e9b7402fea24f88c1"
+ "a94717ed5a83794add0f31680592d6cafdec147dfbc400e73a6ba1d23d4cb0d707",
+ "0c00c897edea7bbfe1913e3da303d64d0d657a83c1eac9c111722b17c65391f2cf67b782"
+ "19e748ceb269d6c65f01e92e6952979",
+ "0624c5bcfd8e0ef22ee6b34a8b26bc051912cabac102cbf56c364a743e8150195fc55a3f"
+ "ec90a8fabed5eacc1799b565745bfd1",
+ "0cddd4937da8176ddf0de7f52a4babb1f6fccf861533f796a487f35d060ad9ed4435e5a6"
+ "7166782b53c20bc06fd1b36c265c1b0"},
+ {NID_sect409r1, NID_sha384,
+ "514f4de08a6f49edbb6797c9dad6d33bfa367cc1a1b58a5becfe646c7f3352d5c5d95f74"
+ "56e7112c4ddc746b9076b9756ae3916c07bbe6d3823895774a42d25d44b3309d18bfe7e3"
+ "ccb1f85dacfec1654778c19e2981a853c1f40a7eafd16d331093110698c957fe9f1d8658"
+ "2706a6885543248b944bb70cdf9d2ea89190cb02",
+ "0af7e581aa4f9be5815f0c447e39de00da9194eee5e5f609668b9b69930b5b48a948614c"
+ "2250260d1917f0ebcb00ebda4bb52f8",
+ "040044703e0b49437315a64e397085ea2ba3f2e2c383b168f31a922e5916d590344906bd"
+ "2a911074b7481aae7f3f8f4807b110f2e1005a13607a3bb89a2a88e27d5eb5cac4eb498d"
+ "34e6ea861c80271ed0c73e1fa893adce0c1982b8a8af6a0249796e5276d369c3f7",
+ "08e7fcadc844456f14ce9354b218d519d86c0c5211d62904c937d6fbe8cb16264d7d41d9"
+ "8a15e9f73a636ac3739770738d6b46d",
+ "07aebfd1681bd5a2f995ad4a709e8681da742649c0530684fac251494263e98d67247e1e"
+ "4fc174b409e7e24a7b055500920cc82",
+ "07b83b9b5133aec165316021472307b8b481e6381754a9d0b4f9d683c2ee7cac94ed4d8a"
+ "72cef61fa1f6349b6c4a54ec38975cf"},
+ {NID_sect409r1, NID_sha384,
+ "4e5d16cb1dcaa1abab1e371e1de02f31ef4e0944dfe1fdec45ab64326435b2af9aaf1a6e"
+ "d8fdf1a6ab1182bb53a844c7cfd66da30aec0d41757f5988ada0017c4ca752597a9fd363"
+ "7668bc1a92bb1556553f28d66805bb47f1ef91908ce098d452872da9800e77e1fbd43ffb"
+ "0ed6fe6a62185d4be73ae96c9241b82cefb2da22",
+ "06d14107b08354e6a41d7d7d50c004419db8bdc50db43428df5e86084551237223c498bc"
+ "e71a17e25695bc438c5c09e009c60e2",
+ "040088c1517355cd417a698b648508fd07a457ac13a49d1bad17dbfbc9735ee58343316e"
+ "3eca570bca130c753e17a69fe5bd7baff301397a697d2113d94daefe6be491ed3edce944"
+ "9c707a57af3a164d172cafece564d686fe0d25725c2919c60889af4d0354b05117",
+ "0f3bb2dd9eece25c56159f501af8b619a8c279d7ecbc08ee2af6b82ead80375e9c07227b"
+ "73a10918d8c89d1a2b12cb76427a7b4",
+ "0407b224d8d9c0f11a8e09ac8d654dc6e1119e2c2804510a84ec61f9017899f9613e37d8"
+ "166e0fcaae16c3cc11e9f739968c687",
+ "08c2bd7d02c4c537a308fa40db786ec64fbc2dd4c142b18cf9bcad66199afd4f44cbf221"
+ "adb3837e84173d174e9c0d534720ad3"},
+ {NID_sect409r1, NID_sha384,
+ "e29e75269754ec1194270f5c9e8267dfdd8c696008b5ebc92bb840981fd065672f07f6a0"
+ "f1b19841adfc51b478371e1a0db9c3346a9f0a4ccbdecb7040191a00ddfd0a8faa0e69fc"
+ "f544319c0155d02797eeef99fabbc55078f9d852927c23fd931685424249b87ed0c70a4a"
+ "3e2d3b9a2f92830e7d8f7650c0bffa8f8986b7d5",
+ "099d96d2dc9c79549f031bd5346cf6a8544c312a3fbfc560dc8e378efdfe025b0e6e61e0"
+ "9c04c8bf4133396f993b0906c33dd30",
+ "0400883e00d72c60f22ab085a90901ba3e8a510f19c3d62dcb3ee5066e0be094cceb30bf"
+ "bed7068d0bfdf634a53e2fd002dc9e454d0194baa5d7ae2399965fc4009ea83273676e66"
+ "a56fd35a5939c26ccaf85633adf78b33dbed6da305979077418c625354c7fb6283",
+ "0c213540a452c4f2ef275dd844402dd5ea590f7df41ad35523edff09b7fbb096f8ae8a4b"
+ "aee95428fee03a9e6f6a14ceb90e289",
+ "071779b477245007ba1ef5f05446c4a08d1c2eab550db9c053e4588c9935f07ba87764f0"
+ "fce14d4a7b982ebba89cb056aad8cec",
+ "08174bb56cc85ebe7bca1de1f44cf93cf478d7fe59001c5947c66b837bd3a6d116f99dc4"
+ "f9acb4f378b0321228518e1ba0057e2"},
+ {NID_sect409r1, NID_sha384,
+ "1a538eb447c18494ad5a5ad27be67fa60eb2c5cb2404eec1dbd7244cd802b17ca5497e77"
+ "9d5f779b981b165dab53ad19fd7bf2ea7dbb9b4baea782a43d758202f147e59d6b6b8ed5"
+ "4f4ea084bc18519943f6894d603e253ba3e8e339a6933bc3a0a47126087038e1c813c3f2"
+ "997aae321b7c95a802b4b73fc7db95897b7c91e3",
+ "049f347dfd361a65910e97fcefbf60013a54837f2ae657d65e02397f59dc6bca27704fed"
+ "3affdc3d833fdc621cc5e5f99b92a63",
+ "04017942b58d42da750a366d7e4cf4cf465c856cd911e5352b50bc8a12704c1ac6ad54f9"
+ "465e4fc5402b373d8bd4e4f8519341f133010abcea49c66730ddad7734eb1311b2626b75"
+ "ebbb299a28c9d60937e6833a9b3dda052379fbcf7875f18680924274fa1764158c",
+ "0134c70f031648bf470ccca4ec19c837051bf700c851df564ef3ceb99d7d41439293bcea"
+ "0c656c0e5361db92a03def51d7e4f26",
+ "06c0f9935abc5034a8b0a05e8d04de699b5916cb367e834f13642f0003510bfb68714be7"
+ "5c9e35b5e593eba45fe151d1df56d40",
+ "0930baf426b33eb4afbed64869a22712591db11acee7c4d3a221a1e98048f05900fe1481"
+ "6006854cb90631de5797f91176fdcd7"},
+ {NID_sect409r1, NID_sha384,
+ "7502c755bbd385079a4001b8cd653287dc3054f3b57de19d0ff8f63c0308c64c56f03511"
+ "7a8971d43654f89b52e923947e4760ac72be073136da70c5ad7ca1658cc0a2d2a880d3a0"
+ "c0fe636fdb27b77ff260c4c1ef8a18da8e9fd777d732a37ae9906e6c4f381f0a3d941048"
+ "d5a1f6f2cb8593873fa4bb1621a44bc2bebfbcd1",
+ "0dd226de602af4e9f8e25784bd1bbd4cadb0a8aef525d5e2d57b9f3555feb698765672c5"
+ "099a7d6dd5faaded69d8d68b4804f26",
+ "04007ee34cc7a24e2e693f9409f52796427ed86fa71bf88c923db305ebd5a83bf3b6f761"
+ "2847f16d00f4a25614299a2df92bb693c301f63f177b54f8dd5c907ff318b66c2bfc1cee"
+ "09348c035a4413fa3cf5acde0db1c8af4fb8deaaf8a3a6f8f06b0acfd20c6f0049",
+ "0e19c21b05c82dd8c873e5f30c1e3aa9348327f959a4dbd9c741e233c649a426cf7bd9d8"
+ "e93232e496d0b93ce835f80fbcfdb2d",
+ "042a3907a480329a6169b439a6945cdbe8e4572779c43fa6cd1f15062559dae9eda27124"
+ "02ccbdf03d88a8a68b691f1f16f8f52",
+ "0d09fa4966d171a662a9ba6827fda830b5404f96f635edd8482ee009ec5c7b64a2a6c177"
+ "93993610ae8297efa9fe4c35ceb5001"},
+ {NID_sect409r1, NID_sha384,
+ "95eca932d03f1df2e8bc90a27b9a1846963437cdafc49116ccf52e71e5a434cdb0aad5ec"
+ "cb2b692ca76e94f43a9f11fa2bdf94fe74af5c40e6bfd067a719523eea6b4e65730365ee"
+ "498ac84c46e1588b9b954f1c218920cbf71b167fc977ee2a89429590f43bf637eecd91b0"
+ "ce3be2d66bac5847205f76c06b914a970f543e59",
+ "0b6fdbc9c8c76cb2b822a940d8675889ca6f5132429da795462381ce29313a23bc132976"
+ "fbeb346ed4c691e651028f873ce7971",
+ "040147647d267afb4bdadf54baa3f5131e79dae8103f5b2ddf70e4652f9fc5495123be97"
+ "215b811554241c53023a247936053288bd015205cd5bf0c5154b2dad8367e1b487689b89"
+ "8acbbf44f9ed67a37babbec739804dfe737b324ad663cd2cad79274344397099e7",
+ "07321d12d616dd2ee5f843d6ed7e92d18968b3a76c0e4ccc167790afabad1b7c0dd53d82"
+ "aacac93d98679b203bad88d5ef0cd75",
+ "0672c5607acc646c67456ee77f2c02117cabd241f728ace5117626bdf91662323e756543"
+ "8f46a3e25c048a8e2130e27fa1fa2d3",
+ "064aaebf9f2fcbc843ae1128eb6c7e7d1fce2b9901dae0f60afbcb08c7f2ea1b550e1599"
+ "47deb87dd8959921846e2923880db6c"},
+ {NID_sect409r1, NID_sha384,
+ "8ff68cb00d03e730dddb05fe0b2344689529096c3da6eeecaf097f22c7fa340593106b1f"
+ "6726f06b7ce7358edbcf801ead959438a42f94cdb467b3cd5b17fbbcf75739805f9eadc8"
+ "69c33c604cc58f81591b0b8bf4d42bd53a801f0f829a31af6c129fb4f20f1250f959754e"
+ "ff8c629b85a716b6a18465b6495798c0c5166c8c",
+ "0203d77fac64591eb9a18de20a9d5eacaa1c3ec58a5ecdb3008c2d642e197141d16b3a9f"
+ "dffe61429264f5b420f5e9926659a4c",
+ "04000f66ca09d15d0991b48ce7afde9a148565b73807e435ae0f16c14cd439454745f8ae"
+ "153786d7c40cce3f43a8aa4f0564cdcbc3000f4c919b7a97beba2559a8ad0f85dee40e8d"
+ "f28e23732d7de655262209a5170f94791e255e77e8c8cd64c8c9900092e0ff9d5c",
+ "0859bc752300d4ba5014e302aa4cd2a979b3097dcfde5c59f4bafc5bc8a99411174d2ef3"
+ "f7377df5a09269e3d9461be61801942",
+ "0691ea76acbd5e8137924bee13326ceac8231688af8595718e210bb857d6619c152e1fb4"
+ "6e03fa83bd6b5d81e2463f9260407eb",
+ "054df52eb86c679d8f8514a09f5a3062d2424cdc19fbf6927f744aaa8c444223f1c28ddc"
+ "84b1d135a886eb7ac7eab3c7b0a42e7"},
+ {NID_sect409r1, NID_sha384,
+ "01451c4f09720cd53377a5ed04c907a735477378ed960235a833049d6bad6e6e89958b4c"
+ "4249bf0f6d4f043530c9e5426deb0ec3a12b7feb4860757b41bf602ca95655155356ec35"
+ "a2db8e2657998f56529be4b714364f83a140846308a2973907ed7b08e935173ebbce5e29"
+ "afe1444cd51c92824ede960056439555e7e74450",
+ "057a2e6a59d4871c3d547690237dd9846d6d5dc4ec0678aafc9c8669af8a641eed67bfea"
+ "4b05fd6b3b5357ec4d0caf352691ea4",
+ "0400351aaee4207bdac826ba17e3b08dd7f94c0c8ba0d9829d7bf0eeee7e6375458b5457"
+ "bd787f0ff38564734b3a0412bbddd7c37100e09c4dfbc33d61d69b5a8517baf5e4e16149"
+ "20cbdd89bb05f0420be757253fb92308dfe1de8db822f57b67b393d8a70d989b26",
+ "0fbe560003dc220e4c966b21c874b828874a33a93bb69c49909376df67e5df1652fd91a1"
+ "d73c7733f26c121e7a3b2d1246c9a61",
+ "08b85cf3a14fdfc69cd42750baf362286940994479f6ed7ce1d87af12c5ae075b311754f"
+ "1d37d8ed10bea092bd3d9f7afd2f1e2",
+ "02360bc1f7a98cc87ee2a4feadb98554cce59aa0fbfc087747c7253e54c38815cf91c851"
+ "7f5692f95bc7c3a713fb6ac43a34f7d"},
+ {NID_sect409r1, NID_sha512,
+ "ccd494ca005ad706db03a3df6d5c6e876ef859ec77a54de11fe20d104377df1900b6b192"
+ "126c598944d19a2364b2ae87ad7fd32265d59e1f22be5833f20767793677b628f18e9619"
+ "f8ca32f3af3b41c31e87a98d1527e5e781bff33c1a8be3a82ea503e76afec5768d7f7dd1"
+ "f17dc98a9e7f92fd8c96fca0db518bd143d82e6d",
+ "00a3da7a6633608fcee9ce4253bbcec08d41ee6b00178ceb017de74e24d48fd89107c9f2"
+ "db3556063abe3cb011938f4b4871795",
+ "0400a6123b122d7d0d766897b15ba6b18b3a975d3d8058c9d359c6c6594cc0dc07d9ef60"
+ "33224b4aed63d319cc2747c0660e38897b01ab5fad5e78f380aeffca8d15e60731720184"
+ "ed456800967b2ca47d482957d38409ca07ea798bd892b529774e44080eb8510e6a",
+ "0da042642b3117f30ea5f4b354047b164bd128696b8c00cc6fcc767246daf7483284e411"
+ "009e05218246830940178cb4ebabf1b",
+ "0e4ce613e6976e9e1c30c0c93214a0a37f0632de85eaa25464b69a251d592560b2039fc5"
+ "9b15ed7045c29c268693d7c9e06d8ce",
+ "0ff3ad5ca70aac94facd842fecdf6a28afbceab80b549507954b7dea6da06d1facd11e0a"
+ "88e9c2a549e6971a08d1af75aba8363"},
+ {NID_sect409r1, NID_sha512,
+ "5719e50d939a8d74efb444eb5a77cda48cbb59e7f976cdb2ea2848bfc558718b39ce27b8"
+ "93c229db94bf77992222d1746f8f52f858f85124a28193ae0da039c53d484681785f3367"
+ "f6516fbb8a86560aea9e3428551facc98cdb1e9df8e2f37db823a7abc589f667b5c93c4c"
+ "47061400220a2014197d514217fc252cef5a2433",
+ "0384723c8b4a316b450d1fce0b2645912b8acaeb3cad50860cca43bdc0206ed5b3b60ebd"
+ "c29b3eda305d0d60eeaec261edc24d5",
+ "0400fb89d87ca4282ccd048606e4d321e7ca73244b4d0c9d3df87d54e038a14939138bff"
+ "33c81a9ddd64abdfd698bf103e45c96f97004ff7e1706688a53a5544f4ed0f3f5e1f0fbd"
+ "6f21174166d25a690f260766646cc6fb39020de9327199225e44f3d95c5984fda9",
+ "03a9f5f26eac81dc8ca0a17acc44322d43bfd18edcbafe24113f5e5fad0ef0a3db75ad1b"
+ "2422c7321593e41e76eb2a767a14268",
+ "0c311000c27539247059e4a8d789ed4db93fbaea021272a90045bf6fdd70f4f32cd1e195"
+ "b99ee6f03f4fb57c3a115ffeb459af1",
+ "00db8bb46fe0f99b4e6e1394a5db283e310b24d6006319986dd2c4cc169c775c89d4ad98"
+ "d0fdbc3c0bef6b7fb6b43ef21049bd8"},
+ {NID_sect409r1, NID_sha512,
+ "c84e5702a339259a61b5ba8ec1957f23ffc4f1eeef3a58f383d3731bbaabfcf49ce2ebb5"
+ "97960ac5115a2af1c62b193d4ab6c24433d5f168a1752e40145f19aeb6dee889a53a4fad"
+ "d13eef60e28fcc7ed6a9b8b0ca286c1b3d66a4b2c327a629d15c148049e3a0ccdccf05cf"
+ "22c31956014595e417060627c8125bd7c00f8850",
+ "0bd3136647572fef3de51b12e64b36460bd3a27dc660c164fc705417339cab21f9e1f9be"
+ "0f3da926df459c5ba58b701d306e67a",
+ "0400f45e18834d1933a2a26e95467b6db85d8c3da372e607907798745cd9847bb8f8b51f"
+ "996c7293b51550144f227933ba26722685005d8b108eb3591b164745d116c80afdd48701"
+ "87061c75af9b0c3e87dc8262586af14f4d6b1504d274c07c8e89247196d8ce8166",
+ "047a494645b99a3469369b72cc918708ebf453957b49ac4e209f2edd7a4861d014543754"
+ "e37e1d1a0f477951a0ac2b5826a470a",
+ "09de9e0147e1a268f80836d7db43779ce12e7947caa851d109273ba7e7dc7fc52c601f5b"
+ "f69cffd5adf0695cd7db8de2a64781f",
+ "0561aa76e1e9f2c1d4aaf6e2da143f67166f09199e1705b631d650528e94d643768cd611"
+ "467284a9f543e50520e3e738e5d56b9"},
+ {NID_sect409r1, NID_sha512,
+ "c90bf11d04a708e64b6f94d4cca64b92463eae878c377b188c82c1c5f05a038be20eca2e"
+ "18034d46f00d9a6fc73c4084981748ee9d2915d87aee4e2321f4f9e11c176f01281913e3"
+ "24700d9cb474b7134fcc408fb4a7006acd9e63d4578ed4c2729d8e0d01b1e6174a43a024"
+ "ad261eb644ae98979c3cdab75af357f6dbdf5db1",
+ "0495be0b0a9d357f6155fac008cec90442200bb842d89292fde38b7256e4117284a60249"
+ "b3101b3f19f778b680c0d1d7422b84a",
+ "04011119cd910d4e962f54c9776c9180e7eac2f71cb9748ace4b7dfd2d2b3caef4964c7a"
+ "55caa9763e008de600b727068eda9b98650000b48246cfb7c86e9dff4ba77a3a53dbb1ce"
+ "fa168026b8929c42c3b0251fee5746897916e50f07dfe8b57baab7964447a2fea9",
+ "0ad4ab5ecb84118c33a4b06d1a9f5d2c4f1f3dd1cf71af596eea771f851d0371d2d72593"
+ "c926d7b69b39cdf72931f6bb11d10cb",
+ "0e959201622673d81ca16ed94e9e5be3f38bb8db48f9c09a585aa31ff39f14128d79d604"
+ "a5f93c80aa961c85bbf99e276937f4d",
+ "083099697856c780936ac01aea5e3a4d9b6e183639cd200464a5cc05232df30ff5220dce"
+ "4e2af714c580d561b72dc4969166a6a"},
+ {NID_sect409r1, NID_sha512,
+ "e9b2a33906a1079280100039787377c2971c378b92e70a38ab41dc23979d6fb0c41e53a2"
+ "1b37632407adac6f212341cf6af8605b4978c85c9c16960e1674247f1795cd73b99ff28c"
+ "dca024f5078490513c77114c2f52288f5376872c331151d7b2c08f7794f2c1f9e0d849d3"
+ "2d73636f0aa899988ca561a76f74543b37cbf3a3",
+ "079626354dfc4eeeb51fcf232ee9e6b0130c9bd40f15ed45606bb7faeca8f359e0c3e18b"
+ "f12769254522fd4077eb24bd5454871",
+ "04007ad047bb38bde6ae2593e1e41c36b7efbce1e0ad08def9b23d25b7ea9aa336eaf102"
+ "17df16d32ada4af03dc193d44e6c77e67700d2b9466ecf321605b9f4f952812410800720"
+ "3ac32cfdc7cb87e1790ebf4bae497fb87011e0a81068e66a840d29583bb970e24c",
+ "0074548d1a3df580e45babda6096f4c78cd70945ff190d9da463fbb03a511c45d45dd1c4"
+ "6dc0b9521579fb506bf015f8b835680",
+ "09e04e9ffc2cafdefb600cf61e803eb78cb416304210165fa7c93c1bfefb02cd4a255512"
+ "622d524141de02c2cbd193991dcef67",
+ "01a7960232455f27768acd825b8ef91d4efacc38684d05a900a8512682ce19787033cd08"
+ "c1f2412b481b88ad02dacc0ddaa0ec2"},
+ {NID_sect409r1, NID_sha512,
+ "672db3fb8cc8e5f831be700498d3ab3aef14b7548e8011b21351215fb6dfa09460d18f52"
+ "c02c8815baf396d856a429bb9afd602a10c213af34db80447f4c06ab4bd28873c88eb963"
+ "9b199042d4b2cb13cc364f734fd4ab7bebede7dd4da63decc0cc1f84e34d760013f66d71"
+ "641073f16c08078880b67230f2d6c6bfe17d206b",
+ "0ab42bc7d0e3c23f8bcf928e25f9f027b56f270398a1d37bea0ee5426b944a9c9ba6d0d7"
+ "796899543feedb470f70b2ab148234f",
+ "0401415fe81100f208ec8afd5e882e5773a0c1d46e44627732900c7e1722cd77b3ae2443"
+ "8a8463bf571fd6bb422d7c583439c07cff019c3ef3688ed397640e873dcb20cee9755437"
+ "d0023646d05612e8c360717a2e80e80f2b85860d71f9876f3a68548da7099f601d",
+ "08b44ec25214602de46046b2c94a45f64e9d0903f6148dfedb76a80b8e6314e87bf7dce8"
+ "e73b14bb274a88fa39136a00537779b",
+ "00ec4c5bc88a959a1234413026700bf5d4287a0263fe75daa16693bf74cb5071a64eb187"
+ "78da0a31210347aaa33130602f6b597",
+ "0b6c29b9177e89880f3eee3aff204b866020b3bf77d7c31204af383d9770804660711a85"
+ "79a3f1ffe325f225fc7e7894ecc601f"},
+ {NID_sect409r1, NID_sha512,
+ "d7fd06b89226cfd66671ce5b4b656228c52d986afa7f6f30161680eb0c9cca177992a8a8"
+ "c40167a64165c518c55f678702125709361b536bd928567c97737bd750d0e2e6e0c00296"
+ "a6ca565f7c05cc8c54ae7a4e0c334c6a968fc18a959c18ebbd924457701316a4e999fb11"
+ "084520dac68dc2d69187134c40891af0355ba89b",
+ "07f7aa2216164ba689459ee5d5ca29e70ef75a5b2a4416ab588df1dcb9164330c0b405a9"
+ "d80c3acc41c19f58e24e17ecbc0fa7b",
+ "0401decae837c7258ea9d90314ac87c57aa6d49828787054cc068edc1955245271acae72"
+ "dce5c9cba422bee54f22e11810721c1ed50024cdc9e1b27e5d4bd024654df000bc9a0181"
+ "f7c0f4a90572c75e16b679f4362446993f9920e2244527801e8f6b1e9398bd8382",
+ "0463202dff25e6b9c633b60a3edcffc1a22031cff44dc1b0a5769214693ba02038fe5dcf"
+ "b4a48db7ec49b33068061616daf2fa9",
+ "08c06b72b73dc2655645892447fc0c0f8055838b194e8fad99fc6bd50774e1ed08313eba"
+ "4141018af33af95a3faa20b69bcc0bb",
+ "0958f104326df6008135bfbaf5c2980cba2833af1b4f04b5918bb51ab0a0df637d6a4af9"
+ "02a5e07db3022c134c72315f25972c2"},
+ {NID_sect409r1, NID_sha512,
+ "83b7e9d3ec638fef51d2885fff5490c94e2509c126608f82660e5fc523032f3e85d69d9b"
+ "76af145f6bd916dda35775abbb6d1902bf38880f8b9259822055c5b1bc726c51029972cf"
+ "7474cf2a812f3251aa71813476bff55598d079f075a40c6c41498bd865ce960c518bef75"
+ "a873b9d010965f342dc4b35ef5c5972efe6fdd18",
+ "021d84f070c6823a70f1a74225a472118c93ce9dc509aa6064051ca4574939dcfa96be86"
+ "2069424bdf1a23f62f2868326422e64",
+ "0400f568f018b0dc4400bca3e9e4b0e5bd5245f15dc7acbcf4360b0be2ea5abbb87a3cd7"
+ "6aa653d32858438051cbefbcc4feee6f6b01fdf1e1bd7a2d3825df14f8bf8d5de8250956"
+ "63c3014f2eeedb9bed3c3416d56f805b623f40b847090d6b4b3bd5abc98ea55e48",
+ "03344dc1cd950a9c3d039b6fb6af8c5745395d2a3343d86dc6670580e331d59f6c003436"
+ "7a6df52423a625d70292893961ceddc",
+ "0fb010ba41d651fcc854762fa1437262eadfcabb95b9502a40b50f20cb34fa19ec570dad"
+ "2e0521809ecdb2bff3f4e7055c02bec",
+ "05a9c2dc0c1f946ce33f2f434c156c236b09098365a7f31e238b4685e7cd8c86a0b2455e"
+ "5c83907167c1324bbb37e66e0b2768d"},
+ {NID_sect409r1, NID_sha512,
+ "c62c7bcc860f0e175128e1127dacf935ce62ae794cc4a0ce7966bceb023ac0498641d728"
+ "1fbc86f9ef470bbc77f608f83f8d0dd6299cf08f2cdacc7a9642e4246df131820220e5c0"
+ "5d0dbfceda7f16b86add4793e9b6244d96b5c07cfa23574ceb43e8e8b5483192a92b301a"
+ "a3b37702b8f94f0129d8af1617896b34990c9b02",
+ "0b6645344d17528968c719091b6e2072388881dc10bdb4c7fbf41906cadf3699b30f9c1d"
+ "bfb4796d009480664e6276c0359e5db",
+ "0400b164b075b80fc8b8ec785d5c2ef84d49f2f4d276546c9cf2e17ea4d367828e9aaab9"
+ "85c5cd0882204e293dba0359d47d9bdc0500a0c61f181d5d06ff20d0c41cf6d6cf7fea86"
+ "0075cdcbbab2efa0950e2276dafd4258a39c0fe4c45f3c04f76efa7d41392b4d34",
+ "0c497c621c5cd230fb1e4a4cb3af1cc9d8edf4af5c4af7f15c4ad0a8835b54de52d83bdb"
+ "3433808a67628912a85c5d00aa222c9",
+ "00b22e5773aca4d97d2da846c3947bf9cf2474101a6f0d39d31629a6aa2a4c3a77076a67"
+ "1e37aeb4cee0a94e82e914c8c553e04",
+ "06ccd79ab93e344e6f112c1e4a39e8505a2aaf5cf85595cadc6ddd1afb0b1583d9334cf1"
+ "c48f26e5baa38e05b6b52f9f12c141f"},
+ {NID_sect409r1, NID_sha512,
+ "b5bf38fd9e822925254418475a1ce762a94e336f12b156b1625a4574fee11ee472d537ef"
+ "94b4a4b1c0a73b0140d0b818cd06636653e6c07f0f100118242a7703756f1cb1119b3477"
+ "c4ced99cf45e07e83b7f2749c1a5f8d8c9272d221fe17f7c6a5fb0f8a16af46f232ce406"
+ "aaf565c6b2766a2f6528c82e74fa1c0a7fcfd49e",
+ "0f8c2f770cf5f8e1f900e996ecdcd84fcff5cd959777fd005d721a419123221a3237e398"
+ "34b270d37752470deaa6cea023c5058",
+ "0401f861984fa06f15b801216a1c33672cff43740f0f736b4f4abed5656a1bee33a2aec4"
+ "31680942f2b0b0dce9a9196b49263fe183018633f4e057bb6d70a434f919b9ce4b7d9e61"
+ "fbf46c1d9638100d77881755fe9829a69d696d555b1a26e25ac1a1c27b40f909a2",
+ "0bdd99022dd964306955c57b226aef036527eca481622618fa7395f53e60aa95a275f1f2"
+ "d6e7354d8b55d3e83c85819e818199d",
+ "02f1330f41a86c09205004215c24f42fe582da189906fb23fbcc52136fcb4970a33b8961"
+ "13eeabcec8151cf3b150eaf1ec2dd88",
+ "0439507edbd36ebe4fa5df34d220c1441e1a4175c9b0373fc85669facebb5bda7a4b415c"
+ "269a7add207b461525c6cc94b7f7b22"},
+ {NID_sect409r1, NID_sha512,
+ "6d3474770933ec01b76be789304b6fda423b12a0ae8c87a5ea8d7ee9f71300f39440e1c7"
+ "f5aa4b47c1a8628cfc3a490b15ef292a741344f40a8fcdd02cf3863bf3e32d53031f5037"
+ "03deab17fc52b3d4032f4e237dcc27231b85d3fd60b49ed7ee40c3344948d87c3f47564d"
+ "20a11d50e4e520bd16c8701694fc70901a5da625",
+ "0144adae951fe897d5812ee4a16c0be4c86c5e57e615c398f5768a1223a9be20fa82cecc"
+ "f8a16a31432bbfd17e594a4cd8a6a07",
+ "0400bce072255f7cbaf565f82db122e9c582ffcfbefadab6d79680b2506792028b200ca7"
+ "732a98322c290916c66c8a8ef77df6a2e501b4b6f65e678223bdbe5f8ecb68573ae3d7f1"
+ "11dac37d4fe3c0eb768c461187fc5859b13452381fe676257aa445bc7f38b4919d",
+ "0128c12479b7f0630374880b214aa26e4e8626deca57148a6c6a0e37a97e89da8acbadbb"
+ "fe7db28a0c5bd17303e1342af711f25",
+ "0a95124ec95e35747fb568e6659ff31867a4cb7c00985b36584201d1bac0775653e0a8b5"
+ "4cd9a9067ab3de434bc2cdf29ae287b",
+ "0257e5410a6f0bd94fb3b5b10500fb45b501a3734f0c718035a9a1516d2f88e10d1e38b7"
+ "0c791028e262e0c3128cb84e6064ea3"},
+ {NID_sect409r1, NID_sha512,
+ "92ba7aaf71f625f7a2e024058dc8739da3567c306da4a812ed9e1542b7d1e982c1608216"
+ "6a59720203f4524c3bd463a662c26a82ec7b4376545206e650eed0d3dd7909dfe3810981"
+ "393070d15c45dc4a75a8c5bdeba533cad1ec34fd20466a61e4cde3b25af9a80a9a54afdd"
+ "7de1cf2a74ba32d4ea0082a037775413c61a8d1f",
+ "0a51f065fb32c55bf4ff6f18ba9d488d35d9f8da593adb0ab1632533284e0adc43ccdbda"
+ "9d9507b9862ac63b5ae7b0f78b479bb",
+ "040080e2f7ef17a11ae66172cf1c18eab12aca4c2ae06b8106aa1066677a93538e3dca06"
+ "26e836249eb884a382c3b726736565c3c301e98d37a17ea736ae58eab093fa7dce3f1079"
+ "1ee9ef5ec00bfb27bf3c705dd633badc94642c385dcc276f9b1fd5e01dd76ce944",
+ "0d5cf7b3d28459db8dd69c314f6464f770c31f239a12656368c84c64693f23733661081d"
+ "20dca9bec9c9659a8124b57a71ffd55",
+ "072ba8c1b4bfeca62e96a5649e851e9a311d7685603a11c1c299f5ed8605adaf27cae656"
+ "cd31335a7ae363cbae5dc7a39512c1b",
+ "01bb9819d25a211548461de4ff973ffbf475230baa161558d9cb7ee6f2e682dad21a465f"
+ "c2ae058121224f8680296d30e3692cc"},
+ {NID_sect409r1, NID_sha512,
+ "b3fb9e48c333201324755a81f3ae5d4f0e2ae7cd24238fcc66d858e3aeb1ee03328660d6"
+ "399676eb1b7d8285ba571e214d935bb45516fccfab57b8eb4c3d5f1d7357c768eb7b5e7b"
+ "5710f599614bd4e92706eaba31f8a5e7e57af7ed13066af50b4540ccdc126b677789920c"
+ "ef8543907f0ba9dc92aae343d3425bd784ef483d",
+ "095351c0bc07acfabe6477fe85f97eab520dc96bdd58b44b036328ceadaa56a1904d2217"
+ "c5fd25155ff2aaf9005a3e2687fec81",
+ "0401c1311230cfdf5824323448c68ead5e5885ba540a21ff90b951f85d84d78e26da035b"
+ "fd99341b5901e1ebb18648a8dbb996fc9d0017a037929496e560cd1c936d9eb15f79fbff"
+ "737201dd880a69dfec31209faf5bd2846e3e664c668ad3d6500c5ed620f1bcc970",
+ "02234bafb54cad0d0d51f4b8508dbc8d014c303d90d21bc3f749ed7acc42f0335c5ab6d6"
+ "0002d3bb57cf07018e9c13b92c0a39f",
+ "04d0609f06320d69870a3e66f19cd46a2e0e3e13fb8b7785163a7b567bf2c0f437b4e30c"
+ "c67da288a3b34ce3110f6d87affe0f5",
+ "06c46d0248f7c309c1e5b80ac4b1459bf897e42f8f037031f5bbce0fde50af50cfdc4f60"
+ "d5ad3d1af152298cfe77dcab287874d"},
+ {NID_sect409r1, NID_sha512,
+ "9ec5f7d65082264b8a50be772c44277a73ed19199eb275fe5976f9799d8629fcb4a59a8d"
+ "55074cd2eb2a0e02062d3f7cdeb05e62931a24fd1aaf14c257944d1b42eebd52726d6fe2"
+ "81211b39038e52baae077ea4df89675d860d6ba5a0f998d049614201b872e134367acc90"
+ "066ac602e478ac3e43c3ddf4b0ca0aac1a68591a",
+ "050245c1682344fef23bd549ac8d1e8e44b2840c43eec1cecd33daa4e9ef6b53f496104d"
+ "7432e14248682cfd6f5b4853b65adac",
+ "0400d2f8fe524b2108e375c9603598b555d6c4c7724c7d11039178037b3a4dc82b66c3ae"
+ "ffcccd89cc34dc2b2f6695892323bdd80501f98df95fc1837ec4d5239cf55e97d6b489b0"
+ "a8d7bf12c1ccf95f689ad23e46dcf20dbb531f5179e754f0c29c8757a1dc67493b",
+ "0c683f98253406c6587d87c57991fe5caa3f43b451875859feeb81176b732f1c1eed0ee4"
+ "4d1905d41922878617e03dac53562a7",
+ "00cdc9bc7d670a1b6794fd7da82d2ad1a0e92b82ae32656ddec3aca4de75f407f20fe782"
+ "daa0004317fa3f12cefc48518298d5d",
+ "03ee7c75810c2c05946b53e2f24feaa697af35174402c069b9fb03d89d73964c997eca4a"
+ "5d6f9482cb23c8ce337a374ffc3e186"},
+ {NID_sect409r1, NID_sha512,
+ "61d657bf472676301503f6784b7286fb39fb4186bb88abf1edacb4a2693d0a1e2b77bbf2"
+ "758c84f2cbfd1753e20841b1cd4b456400d53f4d686e666943f9b6ffcdb77f510be97536"
+ "e9698fc84ae347d483bc8984548d1cf86b9b40d360f9c0dc5bd1c55868e26fce1460ba94"
+ "ef5e94eb63c9f0776a0f446c0cfd4106d9f36352",
+ "08d3b0277f0e9fe54581d3a9499ccd7f015c08339591326859af969d2a26284e3b3beac4"
+ "a0b74d324ce5cb5f38c7995e4e3a41f",
+ "0400ae18564ac04b54769e17df84aa54903df58decb870591dad73dbd712693d901f3f9a"
+ "d43a71f23b77705de2b4ec1c3bc616356f019810f92e80560979ac6e72bee505dcdef15b"
+ "4146185d2f8f5a955a4555523d982c34bbfc1326024410dbad3349e4c4e01c242d",
+ "0e52dea77fc59298cb06fb1401d11c662a04500f0470965c4cfaded13b339bde52f4fa04"
+ "c76a955faac16784f443b1ad9dfa0bc",
+ "00c917d487d2aae1651d76147de2a706a01c8b3d223afde7d20c9dd77cc2329bd3e0e4fc"
+ "01255b7c4ed1baae7d26667bc2e9ec6",
+ "0058c766fd514a405de91a4b9e99fc0b0146d954dc2e2decc2f3f066d0fe192832ad37a9"
+ "40949ca4e9abae0602248b3b56100ce"},
+ {NID_sect571r1, NID_sha224,
+ "8e14f713a2c427b1f79491033994f76acbead614d12e73ac6f3f518f2052a10c1273aabe"
+ "628ab38e0d3d5f8ff254802e9f44a51367bf80325b6fc39d907a37f731372864747b1074"
+ "9ea5cb3d3a83da39c21a7b02885a8c1770e4397cedc958e4baa21d5007569dc9dd1e45d2"
+ "181709d900a394454090badbd0cd9c2cd2369aad",
+ "0f42afce7f7b3d45f3f925ab29fc3882a89c9f585177887584703cf8bd8fc572e677adfa"
+ "55b402446fe1e90dc855358d92c3267c35be9674b40c2ad5ce8dbe6a533c44b0ad8d2b2",
+ "04063dbcfc2d9171a7cc1835c1f56ecadcb59aa6d5852fde264ab25603f06817a20f2787"
+ "446445be8b2ba05c70fa25d9b9e34d5374febffeb536facd3da52d43d69fa7af4d4792c7"
+ "9207686e0629de47916af19f9013f65fa3b5f9d196916cab2f765aff31adb5a959515e83"
+ "fe3e00e91843c532041ba15f047e978bf2fc69627bb5cd7f3ecd74cdf1a8d623c1efd23f"
+ "c0",
+ "3fae665eb7a54f51c522ad5721d9e2648f13f3d84e3d64c8148d59c662872b5cb7d911c2"
+ "7bf45884f2ef717d72bd0569d9901f2308d9a68d128c042effea148cc963a8252f1426e",
+ "1df705ef13ce900ed61babed02e121dacd55a881ae32bd4f834fa8e362d059223b29ff3d"
+ "b835fa2b2db8fdb98c21dda5ef744cf24d0a798f501afa3a720a238ebd4fe3976a179b8",
+ "1b1e98db422fd48f1dfa049f38865f8bf9ec5618fdbfb50f21cc838051a1493e4b1e4f9e"
+ "a81156481e5fd84124fbab740421173862c63920e3a833aebf0762e7b5b39a1591d27c8"},
+ {NID_sect571r1, NID_sha224,
+ "38b60d27ff08fb191811036dbfd5b39e1cc3427ff70efb67c851e9cb407f9fac6f348d28"
+ "9df98d055eec73299fcac068bd0fd9ffa3c5d244659e4f714a58d79f6727f323a7ee2636"
+ "9000e90e34e106f99f5ae2ae1b64ee89e5a1d304ef20c071a7773e9b977ed3d49f467d30"
+ "0a881c8371041394910f9c366942449045568f01",
+ "2f36613043cbf53ad36e2b38998bb867503359ae082d07d040e5a10a43e06ba9c91e7c73"
+ "308e41e2391b65e634f83b162cbdf4e7a44ad818fb93a978af00f06be06731d8c5886c6",
+ "0400fe1afd356670e1dc6bc195f9513f1dc6b03017416b5252c7b56153da538422e557d9"
+ "918298ba6c78283efa0288c0ac61298846a6f8adf74df21747cbe7c18a2b825a330e843c"
+ "d8018b7659f0a7e8e7ae5d636ea4d1d5f3a1f846d4bf3dfbd96c6ae874354db6faedf02f"
+ "75c4d1d8bd6a3b61e70ce58e38ea5de8cc16828f87a0667614f6640a3023b7f4aa93fba5"
+ "77",
+ "3fe351ff6ddf50752f7dfd8e5a72c9faad77dbea303fd97dc939eaad3aa7fed466fc8939"
+ "a7a6bb7abee63455284a5338e59dc067236dd699bdeeae1424d993a9c76fb2fe9595423",
+ "04a0e13a9fde9f2fef417199f8584d0f60b2f04aa6b7524cd2a2826d63043b2188ca977c"
+ "9567fc1ff292ed480dabc01589db8734c15aadb4ff54a552a7d9e66829fec1dc919dae6",
+ "01bc7d2c4ca9300d7a3001755ef25231d2852a7b9a3e91baf21f2a2bd2ff305be8a9de1d"
+ "1bcd7bd9eac4ce12ecf8a91c0a409726085382fb8d2428adf1b42b37b50c9e8e0535d7e"},
+ {NID_sect571r1, NID_sha224,
+ "21709eeaf9e1953822294a478dfacfb205fc25f447a73a76a32601c00784cbf2f9ebd41c"
+ "22721d70cdb3842dcaff4a4f208d41c0816990e421cc4b8538ac2f347cdd0aa2a39f1aa2"
+ "6ace8cb6a606b23f6244894d4594a0f6a5b8f6a695fd66e1a41e2eb6a377017177fec56b"
+ "b58c837e311cd04c5b50575faee32606b9636ec1",
+ "2e74948c46930cbcd9dbe2325539c7dfdd910f309fd610e6599d425aad9ae230a8d46819"
+ "70a14f2a71fd08030d0a40ff40dade7de1b06a80441bbf7e2fcf1809cff39c7ef88bf9f",
+ "0401b75f2d281592c288fe6d5479a4e21ef626471819850cbbdf814593bae7e6ce2a35a9"
+ "78aea354649d979f161543fd4c12dae0efcdc2d95e82ae5874b9c04a2143535097b8a17c"
+ "6800c7160c2efa3aea1d18afc1a00b47209dfc750a5317ddebff04bc4d181f238d339a76"
+ "90c24e55be2cb0c01719d34ec986a07727f2e412aa72434efef4d64ecf7c16e2e75ebd7a"
+ "d8",
+ "0d3ae3d8e5e01ad838a7cc9a4d9b3e41eaf9894aed1d1ba597458391d4a2ae38c5d6efdb"
+ "4d91761a415812d77fd9ceaebbf1ad49c282e693d71d89f0e2d1bbd94698a47f1f30890",
+ "1e2e9e2633885c85f70208de30ae9b7f72950e2de980607f6d0e73fc1fb2a4a8afc63882"
+ "06c11b081540bb528a94e5386ce77a2d5c7830fca19223d57c1efe7ac488e69ae07e660",
+ "1250d1b920324919ef81865513db461409f6f8ad82f658dbfccfae4425906da306ba10ca"
+ "c84cf5379b6c1d8b252f3c6f86439413c617deadfad38a234bf2b0050fdabf7719bcc9e"},
+ {NID_sect571r1, NID_sha224,
+ "3a131fabf3dc97334f212fce41c44300440d16de1d6060450875f7276f53c026e2a51168"
+ "1b5a8d75fc0d578546339542833145f7ee13c708df33e584445a75a5538829286480d339"
+ "be7c777c03c998a6d3f037b25799ab2d541021502a0b02a9b9c337a8b176c4f30e5b1864"
+ "85a6103b1d1563ad4ae73ca806a5e4daa92e9100",
+ "1b5fab1d36f6f6d559f65d8b01edba610620fc3a38307b1fb1c5bd63e7ffbd4a9098cb8b"
+ "df50975a873f5d047ee2b627b090897a7fb5f56d3f4a0f3528179e7c969926fc0d3b0e5",
+ "0405eb8c5a2bfc86aa9a82830d665296f74aeffa9c5b38750d0ff51d01c2dd0fb6f2209f"
+ "8ba89ff07297ab9b1b06168757f48cb6eee618a7b44f1b3902187c33208288f35a066659"
+ "2005334c203f4ee44fdfd5f99686b18696b3433f203dd148324dcfaa03a0a250cf606486"
+ "ef11ebcc1ed1839a76ad70909d835a4b30a014104a6ecbb284b33f50bfec33d8b5ede85a"
+ "c5",
+ "243889e7ad32076a3ea436356eb572c1b4ae402d0218d3ee43927eca0b4fc21a19926eea"
+ "35c37f09de4766f54e6079c34fb3c174afb953be1aac46d675bd300e717dfc2d0c3fae7",
+ "1d87b52dde9f502f02a502e7a331ca6dfc6204922fb94886efbe3013446d08240f6dba12"
+ "10a76eaf804562aa92a14d220d59b6310d6caea0274a5e1e8aa3c6b57f239191a71fe3d",
+ "2a5342df6908841b719f80ff905cee0ec3fd8be46396922c3f2f142393714b97128e0839"
+ "07a3a2343f0cf9aac73313279ed29eb44017e2a1cdd0fc86e4b7c536e9f7eb1bbd192a7"},
+ {NID_sect571r1, NID_sha224,
+ "679d85a762f2574b0b31b516270b7d33d5e166c83e91a0f48e0f3db20b52f42f9e6ee964"
+ "8cf58267ffe3b713723cf3df52b5fab5c14db1e7189f7cb7170bc6ec7cc71946745e152b"
+ "39180f828688a5b6c0b2957ab94283b90052a3c6e36843c391aa8810f9253b639a8d5a69"
+ "aec10070603ad7a99dcedb544858d057a1d66b89",
+ "383e70c71b431eedd4574f65d01fb0304f7744d668408c847f7899eae44770a7f3243109"
+ "740f177d7146a27748886b7b77ecf3792b512e8d8e37c3bf4ecef2b1253df7066498f01",
+ "040769dd91fad550980225877d98f7c86963c88be141f91f7a3f1607e0cc6dab767aaa6c"
+ "eabaf46b65a7c80b6a494b0dac1da5d2fc8c5b07ef7085ed1bbdf4273da3665a6517ea1e"
+ "5a0282fb94b4726472248f01ee43607f7ef969446313e849998fbf0058c8ad5e24457006"
+ "b84fc0460b74d86ca281caa174e69fbb68673e1d28ccba17eae045eabc1839870831246a"
+ "14",
+ "336909099a1540e6f69172d55e0c88a1afa99808005bf09cc803ae1e4e4fbeac2f77f984"
+ "bddb482f1f13e4430e25e36962b1a4cae00f1fcd7f2c7a17372c91673d8286f9829bbdc",
+ "290055d578012a5b7d88fe2f70581a0fff976756b4581875cf5db07e01f09c0bdf6ab70f"
+ "fb5839567583d53c68e31a27c3fde12bd4f1e1315af2f742746277b1fb1349141ed3043",
+ "1480c63c8b90c7b51e092597fd8391a237b07f0ff7dbf615e6bdddd5aa880db29c9b9add"
+ "5bde7e0e81d9a37f852c26f21d750cd2f95520d16da7404c2c3feee1489aff09f298d7f"},
+ {NID_sect571r1, NID_sha224,
+ "236152ad31ce2ffc0dead3c142cf6c770672cd2e75af4a82fda1a72e1c775cec9b481c6f"
+ "3e411644df7e7ee901c501405620af4b6e9667dfd46091788daa95ef2c6c9f5c240c06b1"
+ "5cb0df51f5f058d8a7934bd7845f007a35f99fa97200b20f3b5b14fbf1e372507f3b2f37"
+ "7e8d07d30fd3e222f398f26d8f428e320327f901",
+ "02261d4ead21f02fab19bbb0da8c272286704c8f0c6842ba47ded121e5cddef79fb34e6b"
+ "9694f725ca502949faecfb21e3cc062a2b4c654bd542d9a1fe8d97bdd0905c510aa0999",
+ "0403ef03980ea9b754b655948da63469fe526ff0ba2c0f572981d02f5693bff620b55b8e"
+ "9e9f9d553a78a0138072369775c7976f028631e65887cbed62fb447c9f41da86022f4b41"
+ "ef04446eed90f2716a7aedefa1385db9f5f803434517fcd80571adc9b7f086c9787b7630"
+ "6380a375668b05fbed30922746fecc0cc16f189dddab676516ed1fe4d02855a34a909753"
+ "89",
+ "0b309f6c53dee8a8956358df45e72126ec76266d38babff185d4db1d449c8fa9baa4b065"
+ "1af5f5b0aa70dee3dd55623060097e2f94ed12636961a7c0744b38f2f137bca239f974b",
+ "2b42395206ae79bd9df1c729856101ec3c4a719616701f836c9d69b542b59ce973d91951"
+ "853f89a0717abd4b929bc69e59cc379c941349dfb4f98d49f9dff572c614242fd370e56",
+ "1ecad482a8eadec6800a9d876a382125eafaa7bbd950fe5f0588126764126eb1b3844240"
+ "15c52ed6a335668506f25124aa78d98ec5739fe282af0c143c07da0fca53b9733e159b8"},
+ {NID_sect571r1, NID_sha224,
+ "ba3f02c4847fae035d747db246fe4e82fb9224ff9cf568a6ae548f5dc2befb2079541d2c"
+ "f9aaa6b18c281a05e7ddfcdbcefb25f41dd91cb3092b3343e16985e91c912215cd99ae4a"
+ "099baf628e33a7b277e3c36a13aaef85418fca99f64d73b789f23ecbb76c3095ade0a5f7"
+ "f34836a98c5be933b44a94a2eaa3f99b1d8e7937",
+ "316c78f289e1860bb623082be9d9238b88e38c5e978a868bb90f776235bdff4eff591877"
+ "b7f350cf14c40356922b2b6aa51d64990360b2b0e44d6941b5dd9492b4f4e1f42ca163a",
+ "0406f4137a2c63b6b79138027464135021b034f97bcb2493943df6be844f1657a97632ac"
+ "80541a3b43ccc828789517efdd9f86ba171c1262a07a6b337bdb0c8d5f018302a8046a1a"
+ "8c0425cf553554d18f6cc97f0caca2a7eebbf266d57030014273f701562d5b1444240b9d"
+ "22060ac9bebb37deec393cebdad21ec7f13fe5c7f1752b4261cc2feddeb737284a6eec36"
+ "63",
+ "1e0321344bf364f1ede39a49c8051f36875ad78e4b080ece9088111739041b121f3f334c"
+ "6e923777fd716a52be669d6e45f381da11262fb4d09ad66dea74ca115838e19fe94b7f9",
+ "04f24ec978c52ffc7675a09334a895e044eb8eaf04d26c094d7607b77ac4168a02a972f5"
+ "77880a0d0c73f218815e3a7a70c91c50734c08d374a15fb42fd13367dbbe08fe9c2d4b5",
+ "060740270df0e1fdfb8e829c9601b9901223b19d07e9d7d422b9bade88a50fd6d4ec9684"
+ "2afc45900a0107ce85ea6d083d66ae202dba3a32e50c7c3af951cac7acdc6f4c406740b"},
+ {NID_sect571r1, NID_sha224,
+ "6d0372b40559e075af56af853cbe18ba2d471b0fc8917764abcc69102b03d5bbe1fc1245"
+ "8215be66409c26c89f67c72a8933677a07f88993af6918acb074fa915fe883b24bc3d191"
+ "ff1b08852f07eda98977e70eba072d8bf189cd545230f59559ac05f1fa3f4e65886d0bc2"
+ "74a6e02e2399812b2bf91abae81e21279c5de996",
+ "2c1bc13f8320d97a82f3d9354e195481902214e16a4fd89332a0499208e91d50e5cabeb4"
+ "927ba030cb42f5bc53b10f500fa646a8c88508cb0d63ebfce5c4bd574c527d686c735ce",
+ "0402210791ca48aafed20de84ef9896a9c7584081f850b75884908c7b3dccc94e221401a"
+ "6ffd982f292a9d5f9c1d066ed493da948ac7e93977dabd7b820bfc0fd21cd8d99c072bb6"
+ "9c033574c6ce7da749ceb480b4e00bb1a58203bbbca5c16923992cc9767aba5483e4d46e"
+ "d39e71000a1fe920a4c1c211a14e63ace03635a2d77e72808e0664334890b819b3caff64"
+ "a3",
+ "2e3db2d82c4b9de2bc0dd0a93c1c5b385f75ad03d0da527a034da2876b42e43cd88dc648"
+ "33efef54af902d85c568bb8e71684bb16b28c32d80bb3e9911cb1b74be6ec520d99b381",
+ "065f4715e87ca3541ea695878ed5ccb7d2ea6eed5d6fc5ec29f9aa8deb4001cc7c06185d"
+ "6ab2dde4347344d44f8300a1e92513af4690d713762336d2e6a94d3324a224f06eeadeb",
+ "20104e0767530ce2f4351af4977b52339f34d13e458de0482bcd58ab38ee041c9adc7b05"
+ "650260d919b2648e2f820407fd60a8d6b4b991b86eaf29c2c4d12d3b0b45cac2ab22c5a"},
+ {NID_sect571r1, NID_sha224,
+ "bbfe66c82bc060bd14fd0e40769d9b3a026eb447550dd9f118c30d8448f725f8366edef0"
+ "42447962ba7f7f833b9e9094d0ff600714697e632626e7d12a592e040bdcee166dcda939"
+ "52323191021bd12f3b1647d0f25a41739994659dcbb19333ca30f46f539c6f0a5c354cda"
+ "8969a1eda572a309950c84c7607eb8ac20163912",
+ "13bd80eafa67663e75d7ae139bf285d2b9f1e03d8e32153c73e26d06e86d7acad22bde9f"
+ "121a3f1ea674dcc1fe67bc7f5398d5e92555056bc046a02b0ba86c2a0dfe32e91add5b6",
+ "0404c01fef7f2fd8ee61726af1a2d046c7ac67716403b99e021082e96d733368c6c64d04"
+ "6986fb01a6b55cc930517762387eb2fa4a8eda23c700d88065bced8595188760170881a3"
+ "290189bfdc8e7a710522ab5416182c9579ca255c5009e6ee6604ab033c1388639c0f7aad"
+ "84642290954db9f4f7fbffd17481eabed38151160457d68ebdfd8695b5035e4e6e06532c"
+ "0d",
+ "3c5868345c5314aad5ed3a74488a85b2f049396022cdd1de855a0b33c2877f72e871805a"
+ "f3ed8fd7e7a392c4ff63acac6a6f0c431ce7af680984e8c81d0350abe491a01f0f9268f",
+ "0c7e96b9e9a5935ccd51b901aadab6e01ebde44f57e6f0b84e7b58ab4f62ffc0f3f3f980"
+ "665c581ee3de233ee49d11599529348f1ad3d362837c041cf98192bb324f577e973e1c7",
+ "2226922271fe8307bf597742618ea9c1c271c22c25b49aaa7c9292a81ecce2a55250415e"
+ "a2ec8ffec54bf0508e64426cb9cd7177265fecc40e056e96cab661485e789f0c435b72b"},
+ {NID_sect571r1, NID_sha224,
+ "b35e9bf686717ce3b16a59963a32a2116130453b161a4e7ceb27b755856add836d779696"
+ "edcaee3b5c986523891c8836109d431e55c23afbca022437ad19e6777efabb6da3bba1f5"
+ "f44f905395b4cc7c9210590fd38da621582d059598e5e4569e904358e0dfc0dbfda4ce75"
+ "538aa97480912852bccd433a9b96c9c66e9597d2",
+ "30834b0a4284097cdda2ada6947c6c281f7290a49b56becefea1e2788ea3ef78fb968076"
+ "33c47c25138341768b241164ce0d42f7301728b928be2c047f2eb60fc2f844ab77306d2",
+ "04003a21f0d8e01a64b235cc455c291e3fec8de12682f05544de207d910c7c24c4cd56f3"
+ "354500d994380ebaa0b49a7604c6233a9aa24934c550c0e609f65fd4073cd6c1ee4170d7"
+ "7e067c83513e4acbdeb8343b3add40261edbf7c8fe0af7417264830edabfc40200283b92"
+ "484630741378b997c3f8bed7285decc6ef8633aa804b3846d3b4517e5ad836dbb1df4758"
+ "18",
+ "0031afb24fbc52b01480754837cd84a5165d5f2ad1a1d572b92ab546c049413806f0f523"
+ "9a77c751af4d57a84786ed1c11bc76123a82e7db3c0495b2fdc5fb9c8720eb7afb640c1",
+ "07a222cddfaea617f1190a0bd88af4d1983d2543dfba25c5036fe24529bbe2e382de89dc"
+ "1e36c1f6df59c8291d1c4277198084902e5619b64128c265bcf03b7d8cd6b663c225f11",
+ "1ca84c146ebbd16300b813621d503d8c754e4b11446d5ee31cbebc71f4b85ed09c5c94bb"
+ "dfc3570e8882ef790393234c5ee9e52f7d5b74ff4171d930af817eafc40ef203a1ce613"},
+ {NID_sect571r1, NID_sha224,
+ "57b5ae7e95c638b258d1e09b3fcb4341e203f5706862e199b103c8fdac72cbc5155e5cf8"
+ "b300a0b3fb0ce1f897c45f7aefcc528182f73dd450cd84d5fe9eadff3f704dc2a01b4e84"
+ "7c22df430efd1c66b0199f3e5b59348af5386962a5ef25204fd230b54d58d7fae801c086"
+ "f8f405d3d0aa7a9a9da15c22b868817cd897d853",
+ "0c81a79ced1eaaafc31b69a40d9939f4e484d625db6364a8e589b6b4d336d458b44287ea"
+ "6c6aa7661113fc07806b147ff98216fa0c08708dc9d651821b922741deda522b4e436ad",
+ "04025f9b767b8796466c1cc8a1fe6286d591c04a0d115133fc7910640032b898a5c86547"
+ "f57794e5aac0148996151d3ecbe0d5939dbff5722679ecff378e3f21bbf1354b1eb294d1"
+ "a30074c2b91ef3472e60426d2fe182ccc678aa0abb8dda15a428e4f6f1ac401b015b2b7d"
+ "83535a0a92770cff7666659e1cd33941bea1168cffde82db0ea83668c2d387e6f4bdf28c"
+ "c5",
+ "27b407a29553203b829a87eb25d6d140e41184634ae1c64c6ec38e9012d0b06a1f4ad987"
+ "7d7ac4236a22145095990233e6c102a0052ba18cf6e47e289cce4f2ca21514d8868bd68",
+ "02416e11fe2f8e4738ecff1710dc827f4e03c8e7f04a4f52e755f0c1676abbd122eb9751"
+ "ec1fdf6c7ba04b4e29f8dee52bff7e9e726e28cb3de6f9abf2dbf58c0519ccc7d70f076",
+ "0b96f107a26097a468c1d410bf90e223cd72c5ec98d4ee4ec2e32259d7670d7e7689e62d"
+ "36549086139f6111884530e20f908d7be1edab75180c81a70ece341f7eda6e4a43a5ad3"},
+ {NID_sect571r1, NID_sha224,
+ "daebfef74b452f039c999ba0528be3bd9e16deb5f46f6eae87b63db8b89952c949fd7db0"
+ "8311871eb2596865eed107aa065f030226ea675ee3256c31a3f85ddf4c21760582144e07"
+ "af208f33c5f47cc026db5403186a65a47940691ea2d74ffb1245676260ef5717dd879d8b"
+ "5b72d96f87fef5f762d4fd17454cb5ed83d8a11f",
+ "2f24670c0f77d2ca0266a743023d2c7413d56d0b5ec77b454ac59087efc4ea4d46179e10"
+ "278e4ba416ffd8c3f9786ed202faf8251c0ef5a9ea5371fbb35b7afe3d15a9cb4bad975",
+ "0402da72b8ae64c5ee717c33758ec26153a342936f9d41dcbb136590e1303b0e220ee84c"
+ "8a06b83d4d9fc924b8808de94dbd780cc8243bc4448efd27dfaa1572aae6abe574be6649"
+ "3903b3a95d962c48a81c48713247801e4ee630ec7956c9989023ba16f02f5bd1ef2edcdd"
+ "1c8d314be933225c64b7f8a80542b209b944e1f3fab95795ffa134e7e28e82307dc62c29"
+ "62",
+ "2bbb9abd2732994011c8d294c5342e8b1f7f3c1f5718187e9f75832604b43bf75abad5dd"
+ "c85e8d92cdc42656cc9f3349afad3f9022ccbb4937d9ffa9cf48314b604e82bda13475e",
+ "3986059f2e096a3675215698e23b53f471c578891f6d721a34a0d231d16348d5bf9853c7"
+ "9c4f4aa94642ad06cb7bfd11f724800cb5477636b6fc0586fb6efb8eb9bbef62329a884",
+ "2beda064eb3ffa1c3b5336613704b3bc3d4ff7b0e977df16477c7e33d480d678804bbdc0"
+ "8088186fbc4764be398a26c13f88bdd23e844be0d7ce598bb87c1b3430da02ae96b3767"},
+ {NID_sect571r1, NID_sha224,
+ "62af0493ae79d71b552c4647d1fb7ab2f282a91cd44aebd8ef344dfd77b521b0c0a3f72e"
+ "4513c8ecc0e4b84efef3df9482a07ccc1b740c571c5e69cb913740a792aa231b9dc87edf"
+ "b72bac188293c6c6e788cb3dff32e8f483f8f34e21ee7efec71302cc3bdbfa47908a135f"
+ "6ef3ff179dcef26d1a3987f7be967a6c0f799b0c",
+ "20985f2c6fe3ea04bdbab66a8b6167e5969c073b9d53cf3c77cebbf73f4dbf75e601620e"
+ "c9c3107bf3fbfc6c79f8f063409bf8fe1d14b19e323d857e23dc05157d270c7514137e4",
+ "040010712d50ba7752962b140cfb943d9e8dc3bfa497bfe81c42606f4da5157656fe2ba5"
+ "cfd33ddffa0f27fabef8e267688943514df45e642ee0454e05b49f7c00f5785777897d22"
+ "5b01a2c7db6595c6d4c55110210c564cf102739760e7f5a29706fcb2515d99ca00949d5b"
+ "4f291716d0aa1e3a47efb9632410f60e2fee1ada47171f902f632bee85da75c7f3c895c2"
+ "4e",
+ "2f26eaba6452e687af452d5e1208fa011e4c84ada92a38f0a204a254641c23ffe1c184fa"
+ "8bfaff047db590ab40accda408717e4f30811b75cf3a5877ef99279476ab924d92565bf",
+ "1280adcac1c79352635f4165f9c5c1b6e1e6e33bd74d781773f483f637462f80340f8d22"
+ "cb24c9db5e49ace95a676df3dde53c8721f672006382ff806410bfcdbceda50e53285e6",
+ "07dd52973ef30dbd480047732622fb1b695fe3cfd080264d2aa30a6ff3dab4ab362518c4"
+ "f3de4fae042fce78c0c8fa0e763eb187eae2ff8f2e79b3f38cc3c1aea897e1f28b71a19"},
+ {NID_sect571r1, NID_sha224,
+ "566f17851951777ebea3f8285610cd8ee5f882a68e7a4205e6fc9e2d66d210ee2505ee73"
+ "d6503169f7b903012d43e7e99efa493a8e6ef926b16b9ad8f52156840ab561fc6b680120"
+ "a88714fd66d1d0742189bf06c155e1138ee5314707173f7352e2cea0fc26e1553643f249"
+ "0428718e44afd8372cbb7bf5b88234318ebf4355",
+ "2b3d641607b8a141f876f6d285ee46aea543880e772dadd5dd83d595b9643191d9597218"
+ "e1d6adb081df133304037bcd2c05c24a54e6c4cca64fb2cc4569d6882315360059496d8",
+ "04042f2bffe25142ac6c1af26643b0f1c317b34950a8a0f112a0cd4ea4131303674328e0"
+ "bed5d9bc7ffcbb9712387cf67129365b4fa8a9e785b787c170463b24f6a7962c1e003c87"
+ "320070962ac4d3220f367f18caa7ceaadcb82fdba45cd2c034a97aab71f7f7546c09736c"
+ "b080c10d9a95a5f984aa4a3ed32d22636a7b3d5ab29c86d85db59f6f17ba29eb220bb141"
+ "b5",
+ "23d7021f5376e7b11be07288a0e47b4326c026df80d7e08c9a0fff11deccdadd479dad50"
+ "3ef2d4fa3f0ab2aada604b57fa7e09dbf5c8d493070b5faebb27cf68ad0b78bb6f3a9aa",
+ "3059720e7a2dfff03789e7a514f75f2af5ed18cf1568fa2a5354dcddc9d3c7a90605e9b9"
+ "a3d0d6fbfebddd615cdd52845ff922873079e06c4f349f7798410ee18e0c69045193668",
+ "1cc40209692cf5f8ed8b82372c95033e4199d378a28b9edcba516820ba21af1bcf5c5df2"
+ "ef4146b91fd37dff89ec8f9962eecce5c5e285d76a5f03eaf99fa132e98cc40ad66c296"},
+ {NID_sect571r1, NID_sha224,
+ "25155825fc4f9a1c4dd1db837008e7e2594a879052431f5bfc76d0d2565b8fa726008bef"
+ "aeddceef73f3c60fa2cdf6d9a70e56d27210bd013034b38861ae49640ef208d3fe294ac4"
+ "362f8eea44f58af3af8a9167a36b5acafb7ec95652d5885a0e08067ce1dfbb45a0c89ad1"
+ "acb53eb404bf88fa5c3c463a0f912b5a2522a0d9",
+ "1afeb5ca87c81025ddf09c2b2c5ee22ba0105c0e619b67a324467485bd839030d149fee4"
+ "4d8bac6f5902a1245a50c3437046b7c89a84116b2147cddc645b6d2fd24d68e8d53bf5b",
+ "040119c46988a79e3ae8833ef096b0a1e2886c4b114ccfe881886859abc031df2b1e7581"
+ "8c82be8c5abafcbc5d7b3b8344e98e3f413d737938845e6eab5aec7e507f7baf0d339a36"
+ "2f03190912dfb5a1a31fbbbb50784b18051489a3cc0f44c42c71d3a54886ecf40507c324"
+ "0395e8ced37b5253b915fdedd38f75bb26df2a0a8edba865f898a15f2d96f632f7f06388"
+ "64",
+ "1facccc127c856db1994c4d9e9c76de6bffff81a88d7aa0ca1645e250e07674fba734479"
+ "11c5b47a1aae815d5e96164854636d3168d0344b2d2d913127011b6434d5a5e545d3bcd",
+ "21da49326f39577ee9f65cee64006525de88a834365a00f4f8cfb9a01dcfd6349a3d06bf"
+ "95990a2c17b7e95cc0589714b7a795c7016b29bc844ae9031488ca354548976eed68415",
+ "3364def38a8ee3116cbd971794c859776107154234d8b198efb19655647bb9228c7c6be2"
+ "e703672f795ed37481e994b6764d0b7c1bbeb2bd1db90b34f460278a54bd480bf4e9adf"},
+ {NID_sect571r1, NID_sha256,
+ "29acb0fca27e2a10d7b9e7e84a79af73e420abdb0f80dd2665696638951b52dd39ca0281"
+ "66b47a3b6a2eaeceb1a11c152383f0bec64e862db1c249672b3770909f775b794e0b9b28"
+ "a5ec8635a996d912d837a5f22471b40ec2e84701a8804127a9f1a0b3c96ff654700bad31"
+ "67240c2518fb5dedcc1be9f56a807083e587bc56",
+ "32c97639b69c7cdbf419286d0a1b406d9b1f2886521a8b979a36118d2a368aace5b02dd8"
+ "c515f2041e6fb9f026d1e82e789dc826a56d2ef732b1bb0f49be2b696ab5d3d5694a2de",
+ "0400087ff1d8a4644edebd43c2d43d49e140940d215f272676fdfb72ccf58a12021de3d6"
+ "68f2766848044ac404fb45cf6e18fc6700f87aa53b4fac1e35e1731814f8a9d0233e2942"
+ "d7029fad3638177541d8392111064837bfa77b4455c21c5f7652e3fb302f4bff4a35b74d"
+ "e8aff3806538ef9ac86964cff755a81cb3002b6fb241ffcae8ac9621b8e034967d650836"
+ "ee",
+ "16a06e3d25873f6dae16bb2e569720ee9c6ae7b5ba36854c321a80be8b4be502b895e1a3"
+ "d161b001f6cbcf53d164b5485d8a5efa0476f581f9c79b3a291025be01a435e2fc5ded3",
+ "347138a43f3ed1a1a26f5f11549eb8a41f64aad302b6383879886216ebb6d08a4ce270d0"
+ "7a5bec6018eb313430ff017c1bbf78556436d9255e97aba1481f0f16b85e7320df79d69",
+ "28f35e1aeae288122b043deff9ac87d39478607da60cc33d999b6add6209f452f631c6ce"
+ "896afd92ab871387f5ea0eae5f6d5cf532e7a6ab44dcf44acb1fd1daafaf1ad5423d8e8"},
+ {NID_sect571r1, NID_sha256,
+ "c92d67cf6536f5046e15b02158da698bcbba4ff1e4e9e9c882cda67f817210402ef917ae"
+ "93682c9c3dd817b21b73c6c00b7bf92ea80ecbbef2e67f4f4379d078a2b0f297742b2bb9"
+ "c3fa3297a7e8079f488555bd37715eec92b4b1cbf897640ae8a1d2a0fbcee5423ab31a37"
+ "629f98630275e35094a896cc574be0a449bb1bc3",
+ "0f93672159276c5a293582b9f49607bbdb970112f6c63b2b3b5d32ad3c8240c86b1af13a"
+ "8dff6502c6b6a17712cfd988f8cd23a60693d64104143b3f91adb37f852e9e11a0ef110",
+ "04019dda59a839aa2ed28f69a62a3e3a753c6fc789fe0d8551bf59095f009d0327386e6d"
+ "f5437846c6803df2442e0359a367d04f117e3965397576d4287398b4b8c92ad278df4a44"
+ "7f04159ced60503f7cfcfcd587bb3608699f54693068101a838d575715de02fff81058d0"
+ "25dbdda430e176f60e423e6fcbba889914f6409ce51d51e89e4cd7bbde6d24404e5b043e"
+ "79",
+ "10dd216d4b3da2fa6a75de60f722f1f128776741cba002c055d1445581242a175318291f"
+ "ae313eea11fd905b20d26cec845f57a3d5bf23ae4dc93d886c0594f1cf7be4f59f3e3eb",
+ "128d5c00a48c7352eb980d9c80781f8abcfdc1ddae415b7ac94b4d85c3d7d4f7316e2b33"
+ "44ca50c6ae82938bc728e640e59e2d733f0c7f7025e66c15c81e98a845c1ed4843b589d",
+ "1ab59ce5e54bffc68fda96c920b839fe03d1976ab36978bedd973715ed631bfc8e3edd10"
+ "0043ac527aeb5ca121da848bce4ec9799f55b22454e9af32848943058b257e815b04056"},
+ {NID_sect571r1, NID_sha256,
+ "15413f614c4551e3b138b64f66d15f8964c40326a42b0afce820778eee4a88edb127fbf5"
+ "75da5263e5a2627b5461d311813ea868e6417615e7c4938313675009caac28bc7a2f4c0b"
+ "c37572d9bf36a3b1794294e09c0121ceecaa4b916df45b0dd31225415e6c87cfeeb092a0"
+ "08fce2c543cd62365779ae28f29fa02a15d9dcd5",
+ "3db080bc99c5fe7e06d5032167af56783cb423fae59fb5b3c6bce5fbedf56b7b39b17810"
+ "e48ea9a172881aa1f42f5e267349b60294d4a208b4437666b44abcfee5a1829e9467908",
+ "04059d1b3f680da784b49dde3b361eee819d67339447d7bdf7965550264eb63bcc7674b0"
+ "921f02e15d45466dee52b4c0a50c2bbbdf226af1662086476a9eb1236e3d4c2b6219af1b"
+ "db04e3466200dd6ecbc268cdc1937ac5123cbe33f32110cfdb8b7536987ddf5c9ef2464d"
+ "2334f315b9b489cf227a6300b6e054fe40d36c057a692f2fd3e762624069e2adefb65d24"
+ "d7",
+ "37fb32a902eae0c5d7cc9f9018a5d1a906a3d1b9adf5bfb696ff63f105cb2e736d9bc196"
+ "1677fc897fd3a9e9bedd370be6f25a03fad425b5a293c66180df78db33aec4a188d3db6",
+ "3aa8ab9fc9073429e52469088aea91f00cfba271b9dbb84818460883effa0c51d6a48c19"
+ "05d6f58d1312af073dc8735c29957f30324b467797acf86e028410de016338b972013ab",
+ "198a746411333172daef76359e7ad23035a0f5d14c283cb268828bd876b96b5f767e0c1e"
+ "2796def7a51429f39ab2332ac25d8e4f263f8dfb9c4c98da2ccc398fb3bb9a6b28ca28b"},
+ {NID_sect571r1, NID_sha256,
+ "9f901557451ae2f8ec79b6d4adc794cbfd9b2e6d28f19409532d91682820205308b41498"
+ "a4e1ca247a2baa8da93de95e3c0f7afd6ca46bafdbdcc6d3374a12684676a50988b86a96"
+ "0a82180648c8c1e38f8fd9af604c7be3be4b24799f4544ac96d6360cdb83d1d0847fda21"
+ "642934fd6cf65385b50d86d4656987901fb88d0c",
+ "06ee767f6f36bb8f364f324d8346455c899a49237d759003dd52cfa13b9baa4c71347b13"
+ "4b24ecaee32d247c34e3787a0c64bc5d299b55c86f64b47521d22f2c09db225b0c84cc6",
+ "0403f971125860f4598fa310eb7a8c6b4e0c31bb721fdc17ce6df9af557beded6006b8ea"
+ "b10ebe7f3c4f3d759d4a87dcfc1fb767ef87beb1f5c845e3f41503a33b28b2b5aa1644dd"
+ "1a03296062514d4e89d2105dda5bd65a315b9770c45afe4050d8c3d15001405b1e32be58"
+ "67ee90cafbe4e239dd44d030b4fda855182f1fcf80963c1300cb842459aaa8c282737187"
+ "6c",
+ "2b247e2dd0024f534ed2797110df6ea4ba166c34d91c94e43b045c0ff80f124bfec1cf3b"
+ "e3da7c58389d352c8c5c1bc2a2e876a7e56301b1e688a085ea0222697fc63141564365c",
+ "2858eadd14373aeca65ee5a2cbbaceae4b54a50e0941a696406dd86d05c07c5599379c06"
+ "6b2288d01b2a43c9ae34bcb8c36f59d490aa8d066fd3d7e539ebc620a7176507ccfb232",
+ "33c20d26dca20af2c56982fcfa6f085bc5c317d01f3b1dfe0ade1ef6e3e960b18b626d17"
+ "d6696c936f04090ecd9606c2a6ecea1cd1883bbbca8b3dce3b0acb2688fb2834aaf922a"},
+ {NID_sect571r1, NID_sha256,
+ "959fe5a19d7aea2ba611c7203e19f8e3f3cc101e03a98f91adfef602c424c580d5a86865"
+ "9368a930f9883d699fc633bd07f6cf8de474937db0bea86fa7cd140ec2f202663813033a"
+ "757b93bd72afba15be5e47a4eb93e8a666aa1c72c241ca3922547d63fa3732fec54afea7"
+ "ade84302e2f044275bb67433fb6b125b7913143c",
+ "38e2571d9f22309a636586d62863ed67a70538287f3ef88b88c3c2fa1a2900d48c342b6f"
+ "15c26b8e7fb4875cda4093b7de7ceda48fe1e2cc2975afe958040881de61f309931e48d",
+ "0405a221634ca85059543e2caf8bdf79c43bb78deb35e9c89e07d553bafb6b31750a1d85"
+ "ffa7689e528c11d8a3dae442b4fb2a4a21238d636eb04ccc04c8b5d794b0a213fe0480b1"
+ "d20225ff457b6cbc12d152b08025cdb7e1e921ee553add9cbf83228d678d5a9f5d3d1fb4"
+ "327a74c1dcb5d69a5b98f3ed1aebef0af09bd49d253a903636ef5a66844c500fa221470f"
+ "2f",
+ "3b4de49d57040141f3584ff596eda457e2835085d350b75391d90abe728723e1d1ac6413"
+ "979d4fc3eba98d72a01248e6510c722df15df876da881ad50539e4248facafcf311b464",
+ "00f259038b4d3d036bde101aab29f4558e88e604c62f967bc7a35eeacc6a56294268f8ab"
+ "00a34f9a0319b07754f502c98718e8b5c91093cdbff2c8496fd63d6fc2c50a35f87f423",
+ "2350d5406922e8822a91f7c95cfe8524f017a14cf7174ce534c60aeb351510d06ac20dc1"
+ "249129247b21c72c14b02b710c26c10899bcf995143aee632e294176e903645b660e998"},
+ {NID_sect571r1, NID_sha256,
+ "97b9688d9ed5101b8cfb19e84b89cd644262ca1c7ee18944e29ddd3b4cca78e06338b270"
+ "385b00a5e8b91ca5e628de3bba50e36ecc695b3ea737a9cf8b36871c473a54ba17819f49"
+ "e730c0f253b0c769aefa6c16366fd2dd612f330e95fb119fcf3bf7f3e254438c0ab635ec"
+ "04a8b2424a05b483ecf65b74a93636fbab7bf1d8",
+ "0c8f5736f1ae65592f3ca850f43d06441aaad8c03820f3b08d8a6db46488dcfb828459f8"
+ "b3f34af73cce8dc7a5e3834e085a64523d890028e194214cef4003210e6eb530005b01a",
+ "040667ce3db45b8772f717ce20755ffaba968aa1314d75c84073042436823fb54bf8dda3"
+ "4a6bb45a61d610745b1fc10eb0eef71c4f55b26acceb442d822d6e2a27761c73b740f472"
+ "89056035da1adaae894e361f5283b3ea07b7d9f64a298be11de9fb487c2479b120381f1c"
+ "60cefe5d32d37e4644ac86a170f82b1c4443eb71b940b21c7a016b559c6c79835532c276"
+ "fd",
+ "190468668989a607a3aa966cad071ca8e8eb152b0dfca9205bc9417a3d612ca1105c7b90"
+ "340b04acd96a5223658adda16bf6b598ea9f32a2f8d1b61c2c2bdc08d6a49de246240b3",
+ "291e1fb18edb7a93badd6fab6f56ee0d390f3b6d298e97312d5277358511fc7621534ac0"
+ "35f3518cb140fa4ad5ef7d889c0d5f3f52a4e4d06bc9f647f99695531f85a4b76cb1184",
+ "2d916734e02b0a98406bb5a9723486a7ed40bdd0b39c4cb802af4bafd519803d23c6bed5"
+ "9a80c256a14eb878229942f67e0b8159d5cbf24b719043171b3958fd669adfc72eb7289"},
+ {NID_sect571r1, NID_sha256,
+ "f08b250bf4a3980cb455338b3f4173723b3f44c97bacc9cf550149794a71426e398cb4a7"
+ "4bde141d8b7b4a72942f1c069676a9918e27792cb8f085ee037c78e3c468adea5123c4c6"
+ "4d8ca6a39f2f90140c5d2d80b669cbf0d1ccb466b18ded83a1d5f042c36188a04111c34f"
+ "f769abba9aedda40a87be1e24b700225e2078056",
+ "1ee68c3994adaaa9e0d61bfcd3bc1cdf198d3fbfe28a44e5dd518867ea04b20e795eadac"
+ "c48bfcf8e8216dceeaa069b756e8e99ed87b6b1d31154cc9310bc3b4555162a890b0c6c",
+ "0403efc83ad15d9bf889c9afbd769bdd1dc8925b0462c93868d85ca7554b540d8c3ef7b9"
+ "a63becc85981972eee8a70b7f948098ac050ad594ef2ec249cc3b557844bae9cb2cacbf3"
+ "97042a012b3a1d9e46cece4fc3460a2bedc9af4ce0289e95f69550eb3544f7c105b5769f"
+ "a52234ac88f9045ea5cdd4937664846d26deecf511ba6996ce4072e763e8ebdfe7096608"
+ "88",
+ "031df03a6cec2346b92d9ae7d3d983edf577d9a1bb88098f886f38536d8d8cf25def5772"
+ "6790604e674d036cbcb864bdedf8475ba9c850d510ef93b844c037e04348d5f48098c20",
+ "112dcafb63bb125d9610e59883df481bfde43589e46656b5952cdd72238cfbcfee79e916"
+ "5e3c9b89c9ffed12d303225ba2af19e00048e20e4edd3968807e4885003d148403321ef",
+ "2ded1456df54a24214d8c1d3fb314db52b046ca31458bed69bb3aeb6a9ece509ee521fb8"
+ "046ed43accc7e605440a09fd96db659c98a7dd606758c0c47e47acfa326b9ed73ba4b28"},
+ {NID_sect571r1, NID_sha256,
+ "1cabd16fc29d7d919622810dc8b23c770b790b98b119eeab1b20900fa94fc2ebaf76be4f"
+ "5eea91fc5276c5621c8677d4d117c4a5a782ee2ca1d5b0db997fdc8a05b6b3fbb833d7a7"
+ "b81c3c615c2a662929760a96feefcf89e46b563314c9b77c86bf34438458b43b694ceba7"
+ "41b97dfcdacc0ed57652ae62856ce10ed2690770",
+ "3a6fbf66ebc1365ea7699c72cdac2dd85907ec59cd26e2d18713354b619ccb83b7fc0db9"
+ "193aa8493c1855f1a83fd987cbbb65de17c59fbe79256aa5392f4eba045346e9ba26592",
+ "040559dd556241f9b11d0f91c5458ef6adb783f9f5051bc12cac9f0b214f836f7b149d00"
+ "ba8218e873410a50445da9fbf68673f3282d783988981fb221d0579341892ba6824e0cf4"
+ "a5005dd0e594ce41122882538e51e9bf29d159fcbb8b29b97c5546582390ad5c59c97527"
+ "1c58ba1e75d70c3898fea929ef7316ee830eeefbdc69bd80d7b0e8133b977cd573a3b422"
+ "ee",
+ "1c5a193179ab859ec1166575007c3cacb30d31f341a0e82ed6d4ddb32da909dce08acfa1"
+ "0fb14183258caa743010fac6f7d0fb1f8c8f55c246e49a97f2bf571129144c23de8d68c",
+ "2625d0bdf37396585d22811a12ae7e0c3f512ffdd0bf4d048379434af46c03c6067dbe7c"
+ "271c417ac5307123bf58a9f2064bd2b3a2d4b4efa3027959bfe63e13a851f46a21da6e6",
+ "13f16b211b314a7e9918f3254da2f1aceb5340713985610f03ec1d0a33ecf9217d61076e"
+ "b153d8f27aa31aed3c9b165be52f8d857de362b2c88db5dccfd708a996a46b76b4ebd09"},
+ {NID_sect571r1, NID_sha256,
+ "7bc8bbf5ebeacf40b3c82eb6eba5d994dcc6a3f2e12ef741f90f90e176d20c21e006ecda"
+ "f14cb5beef35bff46b2c374d9ee224516679b1a9e9255cd8ad8e60ed234f8ee7e0fc53c9"
+ "021488158217d4b4369cc597d6053746efa1e73340bdd73c1bd2eed57b92426fd4d278d6"
+ "a86e8be0f0a66ab3dfadefca8831b2f488636251",
+ "145748871a0b5c1cee628de04a12fd68ff2b154fda96e47afaa96389d66d22802968584f"
+ "6753d36618d49ed205260f09d3f5ccc2b27a34390ce58179b9834ff92a86d66ea0a97ca",
+ "0406cc7ce2782dd67cf1fc16f1b24ae46fd085b969d936fefc409a9bde354cfd33a154a3"
+ "113e837cfb88284d75a96f5fbe85274fdd0990af4a033a6c40b904a5e0f666e4d8b8bc35"
+ "3207adfea166087502657bf9e2c437beb2f62dab041553a06411f6c9dae83a2a2749a4e5"
+ "a2a36fbe23d40816b1b8d206b9f5cea20ef200b9150061ca22fee2076e31c88d60a006ef"
+ "4c",
+ "26c820dc92f97dbf545f51db7d5ba649333dde38eaa47d8a7edad9a3cf3e6780442db234"
+ "632458ff17e1d7b70019916708c128601ff547ac84dfb0173cf0a3c5d69ac96c3d7d395",
+ "338c88d1bbd0b93f3f1fe1ccfcbda65fa1667ec471730a40eda87f57b3eb63d979d8d6d8"
+ "19b974619799c90b09f33c051b8b522c3a1acede101857265ce1b58cc7eb5698049f494",
+ "3637bf89f9b66c7ebd8f91a8324eb70a510284b39f0f2e45578f26f5f1e4504ad70a3894"
+ "27f4d58960cbd918c2f8279de52096e25a1b0b0c3929fd5ef56bab6cde7c0d8e9d2fb30"},
+ {NID_sect571r1, NID_sha256,
+ "0cd2a45392871c0c262e7e6f036946354bb41f9c2187b8c4d399231280682f3e0a09731f"
+ "bfd52c76ee63b9828c2d731f4cefee0a8c46419c398205b2ff80c67d7756db300a0a8385"
+ "fa287dd37d9126f75998ae1cbab5136560592118db52fbf102b7ff0a1ed45b8a91a7d99d"
+ "13a0f7fd4366392264aa1248d7324901467457ca",
+ "3c71911d24ad19c20fc1d8a044d63c9bb417abc3778d7e6234c6af79b898cbfc2f278724"
+ "4708d2fe203be786edbdc4c9b12b413156b7b0bab0be8af895d191d853cd58aafe1ccce",
+ "0406cc47aa586a73acddbc91398ff5782457e6da2b10e265153c678789d3d7fcfc485b03"
+ "b089eb67e6d6955d5c8c7ed5f933d84853576e76fc60332e5f0a62c3ab23690317bf1b42"
+ "3e015604d94ab9f2ae1d74fe46b1a070160513709de2ba8e74fbf9922e9bbe7f6e743b25"
+ "701a13f73eae0db0c98dc80c5f8528e16610fcf18f60eda3357ad5878add2554a6befc9d"
+ "39",
+ "3681fcc5fc1f0d7d413abf2e44cb5cce9a4a252ec449ec4f550df4a172305eecc072454e"
+ "fe2040aabaf4fee58ed19c9090061d3c4835c5fec38996f013e5512c0147cb14a4f0fe7",
+ "0d3c26796bb86b1a20ed4935bc3824bcb9742513ce91a66dd523a3c0d8a5abe63488aabb"
+ "806b5b113e90d3f3c80e3ffa01ad051e6b0d4edfc641689953ed65fafbaf3e554be31ff",
+ "2e3129ff95b06c274f7ac08882dc1da6660269f3dbd21a3e48377a628f6d81326084bbb8"
+ "d32b794fcbde8e574f853636fbbaba480fb36960b0994210bea319a99a46e29b79217b3"},
+ {NID_sect571r1, NID_sha256,
+ "e97092625b09c9ae6e152e1cbee207d83361f34cb9b0e727c816a5ed851f12f91fbf88ad"
+ "9d4c8f9d07350f5d828fd8574eafc768bc72a2b18aaf4d2b48fb10f7c3431137b5185015"
+ "4de9706487d69a40a8f4cb2c799f48c5d8f518aff752500de93cbb94ab04ae1e0c7183a3"
+ "2d79a27291dd07b5fb6e6a4fab76e85c3a8607e2",
+ "18bd74698bac36ef11add6b3e3fad227ecd868f370ec04569462565d2f0af2340bf79348"
+ "6953a7b79ab04f0ab1f0e4fd16bf6b576cce677d543e73aa8edb0e50372f24ddfbff966",
+ "040231f891e63bc1c43377faa56c5799eb1c877954ca2cafdeb4883ae40bd78816ca5634"
+ "f48f5ef5c22dc7d3d0df208bab4149815274d7b134cadb700d166a5e3fc73e9be1bab725"
+ "220469ea29ef860adf24afdd386347763008ef6fe2488d902c4d513bc0183fc52742782a"
+ "6fe500d6b581902ccd4f9bf077f975bd5fa89bf240723b99f726c9fab4f953380745ff9e"
+ "17",
+ "1590570de563ea96eddd900e4a0a7efa2e4a0b389854e96af32bb7555f098a8cb52d160a"
+ "bcfbde65998c34f91338a40d40cc03e4a9a241d3b16b0e893d3f7ffdbf8912f35c7f538",
+ "32402fbee4831b16d762ea2cb218279f4db5e20bc8b6e2e53e89a2ef3646cfb0abbac361"
+ "16c8c708a1342db2fa0abd39d149e09db57aef65ad8092f37f7962f98c28331f0f20b64",
+ "2d1e38f40965e2697abc7df5896cf051ce5646f135d1ea0bb470a43250af8df0abf2a04c"
+ "a1e0f1f31013025b4136a8a6bdaa474bf50752c571f883829bc3a5482ec20e2b4a72c90"},
+ {NID_sect571r1, NID_sha256,
+ "ae6723b8df5d6ab5fcfaa22d32fdf106d211514cb1892c7c43ca6cd85c2532f85929c8a2"
+ "59ed251215063cf92e1502528d1e22d5cf67efa0b8ef21e8eb2f5dff881ba1433e8bcf2b"
+ "6af8742ecb2bccde081e534615a305562cc22d3398f61f277d8ca785842bda85d8a40438"
+ "d9bf1aceaedcfc22c85533794a69cfc320931d3f",
+ "335699bfd058ee2e6163f55d1816bf3669acea8b73be9c4ddfe775230925e6093cff7a66"
+ "813adf22222c8376faa106d85ac9f3c67929bc58d8986795b6d35d5b9fa546dceabbedc",
+ "0407995e02dd3d40f9bc2e6f4cb1c0d29923c9022169e64532d1b357f36264d18059c44a"
+ "8617a6f1136e72648c9051a27714a0dc833428762275a1b5635a3ad91e65d2713236c20f"
+ "5006167d5839cd4476a638c50db218979a93da44dbf97281d90daa8b9b530960c689279f"
+ "ff6c342af97880db1e9c5ae57b91d7be727fd1c6210ec59416d1b675f4dd666e0b121d14"
+ "4b",
+ "3f037ebe0e4c3910953e123becc09c0862490e7f590245c4cdf9ea5fce930a7d7ca5d17f"
+ "5689edae1ce706b90efdf84cd82e06e4ab95e9e2368db91d50110eb91cf44e50cdce2cc",
+ "2baaf025290897a5d68c5e63543256523fb086a6f1166ddfd3d50fb307e0f0cf78b5fa89"
+ "5f8b71944a7b67b8afe5f3e10f2d248aedf573860c42cd7aff258055ee7cce472e8efb1",
+ "0f4d239f5af023ff6c94ad7f66d43201c7e40262cd92467c4ab54be8d2b8e6577d143750"
+ "64fbd00a6327da62f03f75262392add0ec119d820205065aa6238433fadc8d1734b8481"},
+ {NID_sect571r1, NID_sha256,
+ "ee20c6b61886e02ed94359dff3559522ff550ca126fed4b2240ea7d999a182b7bb618c50"
+ "528fcbd261d5e497a991fbac0cf4c105c0f664d6a00a9001c1ed522962fb44dd4159677c"
+ "e8f1531019f86457c055c9cea6247086cdfe0442485cbbc4386ad002b4bd39a1a1877524"
+ "37f04569705cb7adc0c68f0fd059d946deb63f0b",
+ "2c3eaf801330b3f1b0504f2399f1d24455db29911f750c246ba0a134c3b59da8b3562911"
+ "197764699a92ea1d95a2aac587e24f743df1dad3e1cf7edf955203e24a0225717f8d2df",
+ "040703d69e2dfb13fb6e695b0b30b31d89c8789e8523a7eea15673aeb4f1909192c06c27"
+ "558eb55f0315f395b1f3ce84d9c304905cfda1d119bec33af9ade4420de2edbe75cc5460"
+ "e3075e35b2d6a8550969d49ac5d656afacf68d3a1dc6d17666f46ce3413c855b627f0891"
+ "912e373af2ba91211c20f067d66056e6bbc0814ff3921d944008b25d8772cc8d696bfe1d"
+ "09",
+ "0a9ebaea478893aa0e3bbfd5d007bcec5ad787d9bb5a8e9b8b79865c584966f0bf040d36"
+ "f62a8e97c123d2adb7f38eb49a86e9c2ce1294d04fef1b6fec7908c4ca1a70bd1699a9e",
+ "2d495eb5f6fb187a0ee1fa772ccefbb969e854abb445ec19ac3860f40ee65f53b92f6a79"
+ "7003574bccf0b9de8014ad4e5745ed264eb3ae88040ef6518809b4c66f691d496a85d51",
+ "1840b2977ff137f2a8f2f7c25e347cf1262fd128e008e30e4752315deb5231098c65e9a5"
+ "85496a9d6b5b56cd0b6d7dcb7150a077fd199be2d2de0262aa84dad414e100ac6162346"},
+ {NID_sect571r1, NID_sha256,
+ "734a9eb8288e32f5a67cc1d88704523ca2c68b798d90e188d871d9f50d2da2063baf1ee6"
+ "685c45832a1818aabc9afc0bc935e97969dc983a484f16d2bedb3c7c0b8221408be2480a"
+ "5562d5d1e5d8763d1e474bf2826aa93a68c3b870e3bf34f4941cf590d88e1f5a8cd782a3"
+ "3992213f3f6b4b4f6dbfb3c3c8f21f5eaf4ef609",
+ "1c3ff067497e5d387f31f0ecc9c67b3c0dd6ec8c81318c492aad83c9dec6c99e4fa47447"
+ "f6f7082d636c2591d0df940b947d0a4ae3778e2b7cc8fb92214638399def894ada276b8",
+ "0402e56655e37b3e753f35eedca95f8ec07b7a3d3e14e365ec041cd9003bdb78a7a8b8ad"
+ "277a67da5d63dcdeb0ee8d8efb68fe61aad9b1fbef4373ab13c44efacf68cc499faf5b5d"
+ "be047bbec643d74874b77f0fdbbd2df3f3ff0d35f4b3e1534b2c4d5c76b8cc51693a70e1"
+ "7d1d4cd64713c5c05966c826458fb5411ac840ab5998bf3cd64a0769c3e075259a70aaf9"
+ "4d",
+ "149848f4534eeeb45fc38ddeace59e8f83f0bfb4cfcd2b8b7acd0bf19303051a6a8fe75d"
+ "4cdec1be036645beb075c772aef4a58785c16d984eb43b9b0317446bc3b3abfe7ec2cb7",
+ "17eb68556224f995733077501ed295088cc1184fa3872f5f11e97cf67c7bc1febebd3120"
+ "6a406c4479b60246a517cada5859d4f1aeb98dfc108e96e9898c6e71e59e39b6284895e",
+ "22904497dc7a98fbe117e4427d74f4ecfc4e14d4467c99227427e3abb8d3dcc406f3704a"
+ "7783d822ec1118a1d91d5945d5b902a2ad325bcc9c17c68ddf8b5323df9c2bde392710d"},
+ {NID_sect571r1, NID_sha256,
+ "68e27cc72fec8f3f1f3882c6efa08efdf21d74d13be5171da35ef2855666ad2ea6919d21"
+ "dbc1cb6d296663dcbceeba2fe47a2c6507d3d4a67a61b55b0f81c93412d7e1fbe15a590e"
+ "342a05f55daa55f8591171303154e615e81189a523b855829a5c96621ad118f522e397e2"
+ "eea05c2603eeae6e3591215e29b2289bc384d8d4",
+ "04b4e04281b210fe78d516a5b69f878b7fa058941ee9ae8cc63b061d1eb9e12c3e0ecb87"
+ "17ff4623ff5bbbcdb53c48adbd9c69636506ab929c5507d7ebafae5654aad65a263e48d",
+ "040538049d071158c62f0102fb664a47431afe320474a173463819d5f83f6737b43880ed"
+ "378470d774d32ad59cd9d75e5bb06b118f1297af3f6fa910f40aaffe11e46cd56cbd29aa"
+ "5100a4a843af9841e2427357bdf26817656637bf4650e443ef303dd458ed092dca3cacf2"
+ "857d10aa190c256467ff834bc804f8557f6c3bdde89927a5f2bd55bb9d9f1f08a044cbc2"
+ "08",
+ "1191110485f56335f0e65fe04b9ad8fac1c3573cb4690db3e9f62086312d394b0e354890"
+ "c0f74e3df7c43e718ecf18caf6904e03bd6c0912f906de1d2bb4c49823bc6c0dbfe37f4",
+ "0dff371ac365cb7de248ddb2b2fdee624c527c6c1908dd287a294bb43a4be94c130bfa83"
+ "710b0655f21695dd91703acca64fe2e7927eaf9c2b9b230de8002798224f9505379bf34",
+ "2f30f31c863bdd68fae16f97fba756e033eada18cb0a23d7d4b2c9ea3c832e61b52185fc"
+ "d654d9eb281b92a9b102c3b17ebf02422a0e4a7a56a73974208371ef65434c38f4d7d1d"},
+ {NID_sect571r1, NID_sha384,
+ "e67cecedf35058b80787589514a9c81c6b9f4bced4260411d2af75bc46b8b2c962dc9d26"
+ "0dc99ebbf8ee64950766efc0e394184bdc8e2891d66bd3300ecc880e9d6a3d0eb6153223"
+ "78afc3dba89938704e9a8d0c949d4bae9838805c00377e3fe5ec6a1a98ad7eaaba6b5009"
+ "73dac48b26b7fb2e1b9889f8c387de535d4b2363",
+ "30f2849a713aeac95fde5ce3af853e9d070ee60709eccf35a076567be2c43f0fa34420b0"
+ "fc097ff577221275a3a56e759efc32183be2d76058a7d20e5dd59f00415114d73a15b8f",
+ "0406d4ed3cf180e0e307745faa49247f269c3fa0a69042b3b78ad645f43eaa50d479622e"
+ "27429a6b6b1889944f85975fec8018d3321ed38f6c7d91f2efc98467a027ba4a02c7f231"
+ "b405f2ebf6abf7d53fa32865a9b6ada9bee51c1fe26cad74dd6ef78f13872f340d641700"
+ "31becb5073001fbca373be4e32ac3425d705ee942e6c4e639bf72379e34776680a387a0c"
+ "6d",
+ "0da9d8647d0950f558a3831b47858168b3379656e603f2bd44046ac7546892d1a7318c5a"
+ "9873c6ff85683edd3881a0f1af5501d17939f0825ed37bfc9a2d95faf43d3be92b237ef",
+ "0fc7eaeef74806606fe51882c6928a06bf552d18dcc4d326d44a540abb728146657048b2"
+ "0e5fe2868beb5f04f32d43e9ac23a7f22c6bf325bca24f5e3161c868911ee61baa8a3c6",
+ "33d63693268f3762635373fc901fd72e525965ac17e2cc009177f03bd3524107b30e4c6d"
+ "80bbc4f87fb1f288ed56812994541fe063f1d91afa7213bed8be5693dc6c17ec9a0714f"},
+ {NID_sect571r1, NID_sha384,
+ "2baa1ac3f07e34b67b6af087400f261e138b070c8475378063286c16fa73578303380236"
+ "a4af2484ea01ba56c1c619f6ae4e5e6ac2594c8e5aae7e7f196f96fc5d0f507bebedd4d8"
+ "18e77b9120e5b4bc01c7ab6339e88b71d0886631cc7fd89659bf513faf149c61eb14d550"
+ "60c8dfc7e6e4c2b4ec8edaaa6bc36eca50a6feef",
+ "2ebb73d04e6e5361e20629e3ad119b33db5163ed91fd9a8aec4b774898784b6822a08992"
+ "118a8fe6013094bad0be1e9bf01b27c069e4335bff7e0abd28a10443818f6b825e9cef1",
+ "04001710eb0167e8c948d381e3a75aa1e036b70c414f69260aab434ee20b6724dd7393fc"
+ "487b5b3822e5e8065b06d0785a4a7be7193352d5b9eee66755ba106ba6e40f98a08c730a"
+ "0c06006f98fc25a641a7c6e67fedd37aaad77a9102be3e1e7d32dcb4c68029e623a42f4c"
+ "a7d1ea725bfd475756b80e18904107c460fc03b9bd68aa46f9dfbd60618670c4d9a68a32"
+ "87",
+ "1861e2a356a6fa8096418cde7fa17f1b893a7b63810f3fd807a82bf4c745aafdc4963eb7"
+ "a0ad0488a776e915b64d2b684e46d244703eb63b77835167908f2d6b06a2ed7b53f0717",
+ "046688e12d26cd96bb05d3f418d8ec34f4426f594acd2bfd8e9abd79405e612d60737007"
+ "440424bc4f546c54b7402d11880f68edd996f49277b729450f7dda5d05986b014b5244f",
+ "341a80e74f3a69b966ef81ae95dbdd60ed5a0446416653c4df431ff7c4b4272665a52337"
+ "9d76725e9fbe196018f0e747100084c823b95d7c7b1785d3623e52e9adbe773b81b49d3"},
+ {NID_sect571r1, NID_sha384,
+ "0e640581f573068d8ebd2899a6aaeed0bf987ee11e22b05d25e88e9a1c3451f45ee3800d"
+ "976f4603c18a041febef07a01086832a6f7ecd5d498d52e796a9d90758c87c36f4a5b704"
+ "a39c456aaee2d5278183d5815d619c193da9fbc427d701bab0874bded848cb4bb066f56e"
+ "119b637c78aeb6eaa387c41bec6cdd4bf7b2061a",
+ "1bfab717d6f6e16d9bc6e89d2ffac7cbe0f808cc8ca2eb515af7ecce5f3b230303775710"
+ "a21bd25c2cc4566bb53c78c78e3774a9f306c751cc6e149929e45eef60f56c1d2388c6d",
+ "0406935c3e8b58f7bacd045e745054c227687800ddd86d6e0c8b1e426f4df0e4b71feede"
+ "fa9172c43becebbeee8ee382a75396fc5f29ef3d2cc55f8afa9232038609b5034513b222"
+ "cf0138463efe3b32259dd90b759062f848deda84f2bcc0d687c410f1ad2dd745517c96c3"
+ "451432b1e490902208cabb68bb872ec493eabdf1f3b07595d23a54c53e512777abffb7fc"
+ "65",
+ "00025bd48e2dbbf1ed8bd9c1514303dc503dd0799c7815870b902249cd1d7368380853d3"
+ "6f7fdefad973700ded1e0d66950181b0aeac73eb622c880571315f09504ed26e28e85a1",
+ "1b9d6ccb19b208022d3a579a66957429682517e84a71be42fd571fbbd0247609d0b5b338"
+ "08189efb52d21e6421d3b08821d82900577791b1c54e239b0d908bfbcdc060cfedaefb2",
+ "3356320389ffde577496c5b46a0de6d53005f5ae3489c0d292c5f460a3b7adc5bd204bc5"
+ "0a3bcc8538e0f8319c79b9024b065223b7ed9b0f211c5c224d363f5bdfe04db97f99e19"},
+ {NID_sect571r1, NID_sha384,
+ "51a2a560ba226d629127ce1ea7e812219ceaddd23561256331458c9f11fe73990f21d0dc"
+ "d974a3773040090cfdc8e0f01692d951a0cbb60f8448a016c67abf46a9c150466ac77e65"
+ "6ea827b0ea7d1e77ea32071ba8314fc8a2edf69008f498bd1c18061d7d00f3340a7e2cd7"
+ "3e9766862378d8702e804a1870b442beb2d0aa14",
+ "00cc53bf7f1cad5e3dede4b4f4b082831604c92dd2b147869cdf1107259305b1d5035964"
+ "7f9f3d7d4e1e608865c65dc7c9ea46bc324dcb8423b554dc369d621743cbfb592b70eb5",
+ "04020187d7de90652caf1210703ef65cada3b88f978e14ce6055847be7127602ba7a5391"
+ "cef0fc9b009134105da7b09b49beb7ba2f961b84e6d66bd818ea99ec106c6e8428b17394"
+ "a60197aef36e47b571ccc0b41f948392d6061060063137d8c3b999ae507b76132fea1563"
+ "775be555616cb5816b9b19e42b34f9673aab833f4beb9d1a0848a4bbf2f6f44cd0398274"
+ "8c",
+ "08acd0f8f9660d21d62f391112908be73a4342767328d3375a8806dffd2598b6d77fcb47"
+ "93e69f2390389a78c2b11866cf0f03666a60ad088d2c77bbc49fff6efc5b7283d02bf36",
+ "1004bfb78dc0e4fc0f2624bec6893d717a476fc76bb5c1d94c1dbf157aab5d1dc80f98a3"
+ "aeabaac94d9cf9e26e1dd172f5d8fcd5b2d48cb3b7f0a4863813357b5cf8eae84478e44",
+ "30b1c8857977181d12c53cc2efc53a427801cde2890cf2ea2c99c6958b6869d0ac78ee2c"
+ "846c241362c885835af49c47d20c30f3cbfab27d9cfeaa6d858694bab059229e30bf845"},
+ {NID_sect571r1, NID_sha384,
+ "90eeecff0a2e37df318c441df220dfea013ef29774ee92a56b213e13a798858f31e52b6c"
+ "cb7599e7314f12b48a89884b113c1ba0526a54f3e9a33c940944319e084bff320cf5f391"
+ "c02c731c4c4f8b05afa273374a1705d6c85337782ba7d36b9c00767180cad6422c11c581"
+ "672ff631fa4c49d41b02481568ec87ea97220400",
+ "2b009530cb9d586e35dd8951ccb686833afb7a37ec253e547e85b253ba999f0f186b6d4b"
+ "a41091615fe57678e9801b4dc94fa683511da25637b2acc9fe60936be15af16234c4ee7",
+ "0405913ab6a2287d946b5b6d1e6c3d64117e085da7cf6388e333cf58d22494f4b067c684"
+ "dca770ddbcea5db73f048b296e9c17284a8912b3cb722d9eaa17b6b1209311fb8e8757cb"
+ "f50007124ac6c48ac56746563db247bcfe6b20215ccc5cfb1d43c923daa07d429c8f0513"
+ "bd1ff1180ef0f7927fa23fda1af25d20b22c935c426f9ccb402c358b57b812516c431117"
+ "79",
+ "27a80a19e9c320b57146845fcf97d6debcffbcae877c33c62aec62a3351ef40bd90ef4c2"
+ "ca39f9e51086931d82eec4ee7870365cb14e9c54ae735069801ef12c571bf1c7c1cf6e6",
+ "1de22c8984c593a0948164e6cc8631489133972482f6a7fb1c3c13f97e4584604930d369"
+ "224850a1d24f267f41bc6fca04ad79326aef61f0d429e0e1b9e9d9686ee10f2bc52b104",
+ "085c6b34687081e280a180cd0c4ffe95cebbb0ad6d3b20a7341e467812f88c23973701cb"
+ "f3cd2bcd2811415d0bf0cd9df229a88754f4cb0c225a2d11f57369a29edfd7b04639055"},
+ {NID_sect571r1, NID_sha384,
+ "d3740cad41e2e365d80ae81da97fdf06d8b6c278b505e34cb683fb55ddc5189da5435409"
+ "14c0accd405dbf0063f6222885fda4b316dad4a83fd03e8d7b7e936f87fc0a5b095defc8"
+ "a4b22fa97f00b394e672d5efd3e0a230c7e44dfeebda88641143502a400ed62e2a51f956"
+ "1e5d652a43d616f16699e875deb9610c77de8e1c",
+ "2cc2d0d7189cc8fb3565a039aee7633ddc00ff427cafad32fd2010b10fe249c9724d9178"
+ "5e7080203626038109158e3a61a3970aa3e51688aa7f5184b22f63af63f80d3540ec023",
+ "0405fe95a030efac2e5d9522680da58606e3e7544a317a3f24d726b69238367d30fa5868"
+ "64d8c143c3695126ce8dffbc7e7fb789f956dbf53aabbc38af988ce50f1fb30294ea3e2d"
+ "480193d1e745d82781ae5c3b3d2233e502959d6862fa7987c6416584504f65639ca76557"
+ "8378b75d3844df179cefdeccff3c4c43aeb8865063e176fd43a27c93e329f8d4f6fd5bad"
+ "21",
+ "02df3920fe4d328315353ff11b0264045248b32f48e860dc59d931ad65f39e97e3a683c7"
+ "b5c64b21c3fa50a9685fa11f49df9b14ddaae03eb02754b01e03f60fc6aef1e5d6d7d3c",
+ "1b91c4217b1580cfab56812c16bb5aefc1534ee8d049aa2e1d52a5bfc11519ff89f0d36e"
+ "a2bfdfce8b5d3cf1527dcf700c0208a70595e9ebe4feafd0eb597e05df54212fd6eca3e",
+ "21ce52440267fb16e713eabb8bf2d502c81939799f9d09cf48a50dce5da999f3b457dcd7"
+ "3c212d5d070056b1f373b07ad06e90d96febb7f8cdb4c423ef946f0799c038a3ee68ff4"},
+ {NID_sect571r1, NID_sha384,
+ "5eb53b5f92121396c5ff30e0c92da48db4fbbdbf27297f9bc82614ab78f7fd863e34096c"
+ "615a02e349d8bc7ae4b0700130704bedf32756b5ee6af10da1cd717d624fadc57a9aa6db"
+ "4a6c5d6254c0e8f8c3c0d4d03c264eeeafd52cac2c1968d9d85b106167a49d0ccdbefb20"
+ "bdc10a2555f8149203af52853169a02db94e5e2a",
+ "3d8936c00c131e38c6566d2464c4e207c878070bbf681695a6cd98cab2c6e80fe98cda80"
+ "c66a5cf584e90a071144dda59c07b8fc7bb42464dbee5b6f739b0f2ee5fdff7e5a4e7cf",
+ "0400fc3a8a320e816305772bd5116cec2795d58633a9f490be8a1a360f21d2aebed6038c"
+ "a4a5081288b6bdb1066307c26897ce38c24f8ccc98a63e371ff6b54f6016917b430c267a"
+ "f7069719c868d8fd25a38a7338811904e3330a7b2289a8384bf24f6dad5312160f0093bf"
+ "556fa061ca5e52d6676a8f1a3e4656740c82d3cddf0ac4f903ea885d42610bf1b45d9e57"
+ "a1",
+ "050da632cd7aa58340adeb20389a2cb9897b8ec944c47e7177da65d9386a9dec5d63be7b"
+ "b2d0f5b4943932e1fd7d87d5d7a80bc50a63dfd101a6a28005c894c6a6fa4c652dc519c",
+ "0e6152b9050127bf306662f6beee81d024492b91efe87a56e70596a4a72cd02dd2f10b97"
+ "0c9a69909f85bf4783dcd3c32505d7c148166ab43b503ab098b6d95ef09a7932359f60e",
+ "1f7d68d53ba161b61eeb17139eeae1587a6bd148e288c1f73a6bfb3a0d1f6dd8f9cdc27f"
+ "a9e8c7a681410500c097ad01f320303421f1239b4a9c4d5446562b5b3cb2fc45a6fe239"},
+ {NID_sect571r1, NID_sha384,
+ "5aced64f702a57ed7fabd045a40c967a485d2a70b0a5e82561d5141ef329469b2da5964a"
+ "34df203a980111a77adca376c643b9030aa74516f054648c1534d912ea66582adf3c655d"
+ "bd71ca55e47412315df5e2893e43b2e2dfe6e4dedf426f11846ebef34a99f5615460ce04"
+ "75f7bc54b4a4fd99e83c982097c3136ac6188a5c",
+ "3dc7de970bce28a943d7599f2a9010fc99435b93bc4ba884d42503ac2941aa63fd07db34"
+ "bcbb1127d56d6a4e277d6ca32051ea3467e376f74f98c3999d2f276b282ef8a28cf0cbc",
+ "0402066a50b9f961a58620f473fcf7d5eb635da47f4ce362f428669ea578d50d1c1513c1"
+ "45adcc03ba98f3d67bb422141c73e2f94ef9559ccfdc0be20eb206d3d114a5db302bd075"
+ "1f04437e655bd255e7f013d197210bed70c5c1a6cc1daccb96145c9c438c8a44b4074629"
+ "830d8df9914166c9378b33040d71918cdd0f47fa64b7c69f43eee0f34414b8f64882f90a"
+ "c3",
+ "3b2e20f4e258b7f0cf69a460fece9b4794a12a37c0f8e7aa6f4f51dbfaf508f6f1e0160a"
+ "b4388891efb09f0ca1f73178f0e8598750c9debd3ff856cb3a2872762ef9e16487a9513",
+ "2f265aa99ff806ffeacbf9ef7be575ce5300d3cfd4225b1835774ee075d7e530c9fdcd68"
+ "1584223f84a497119b4eb1fe34cd31d654c2fa262d7549acc251cece9530b26cfa3ab35",
+ "2c05ce4b35544bd1f20a68eae7f3483e0a0628dbb53f0466166257f69a7a110d2838a76d"
+ "204e7a955a8977508e65f2ef6d7deee13e4e2ec0f2b9a8b4bedc26b3502813b0334a1b0"},
+ {NID_sect571r1, NID_sha384,
+ "43c24aea343d4e088bea25be69a332c631275c36677093e057de69cc83a4c5e70ab270e5"
+ "a8930f55846f1a22ec10e03007dcf0942c6761e89c65c6a4f032eed97dc3a2c7f7ed1e82"
+ "552fe48828a132ba16c41f6bd82a49335428a24fa1679522000e6a1d12c646e0e4b4c584"
+ "398577ea9493bb334fa3cee8bfdb6c2e66f46436",
+ "2de6ee12eefa7a4a736484b19b42a513dfc059a060976edc3b0aa4b50e98d72df6506fed"
+ "0499ff8480986748e938289e54a5e86c0c29733a9bcf5985aa63d8a2b57933a04a8e8e0",
+ "040073fa1b62d469f2991d54f1472b60da87ba51be0a9dea361d417b91a4a75373695e9f"
+ "27b3c672322315d7b566b1f22b96c54adce3e958080fa8a02836955f6264dad3a87fd11f"
+ "060452c0a07ff65fff741c96851657a5afc7eeca239622e1260414ed736a04e487157c52"
+ "da98a7845bcf6f311e0f2e59bb92248b6d47dcb93da6f7e0af644b7aec7603a01950293d"
+ "8c",
+ "1c87653066057636f9a98a7c69a84e103df480a92739abc4d5ba53891591e3aaaef6ef3e"
+ "f5e89213abbf71af9c84d3b30898580e782f557a03694446492afb05ab801d7dd631c8c",
+ "086d539546c61e82d74319f0180411172acaf08b5296dc6435d4ed7bd50cf23d3a071deb"
+ "3be01f74408e64ad244f069cd41227ba127145df5a357489f944b61606ec75e8377db81",
+ "0a34d9975fbd601614d04aa41506b03fc15189ee8102c0431272d691a322f3e77bcfd19d"
+ "8bddd19b307012b6c6349f5ecf88b5a69e83588b0e18096117f207304b38c16a9a8592b"},
+ {NID_sect571r1, NID_sha384,
+ "e89210565959d93b483659e62cf41f0a0147ea23890c2f1a694c377a826165e363860e4b"
+ "084016cda878a43eb68465f81f397ecd50087a25215ce7c4ededa3552218071fa3acd7ae"
+ "380655fc8fa884998209ffc8a2c26f1ca19dfcfee455dad35a4e72caecd8da47eb9ee21b"
+ "889162f5d3032724abfd1a31e68612e18bfa9006",
+ "05468f0df2c9854f5f655743e79c750fd8812db28b096d97207bae7f5aafc6b6090c9c63"
+ "6ead9e0fde32a1ff8d539b53813733ca812b41b58ff85a941abe4f128d59fdf9847baa4",
+ "0406591750fbc104f82c213fe88aa620e8a960fd6140598e2e6282e0d5c5ecffd09d22ed"
+ "94166109561a7f4f694e171189056d8b300b54c8134485500effc7123aaa23862e897912"
+ "42005bf8ec10a9ac6a92c54e7fb2135e2aa4f84da571d33227bde0aa2e6c153207488223"
+ "5f3103d9a51e80b7a9a19067f35047ddc52462db7c634c291e8fc5eb2154f6913bd0846b"
+ "88",
+ "242308c430de514be1b9084a7e6c96894cd5615a7c71ea22316e539986e9702080ff6cee"
+ "f2980144c55d9749830c20c9ea90b93dfcdd28fd862b6a15748dbb3d982e4a275129c75",
+ "361e1b7a0f981bcc65480b370c5e09b1c2e2a67cf41646f6a3d829f663c0911589223740"
+ "0317601fcee78a04269411d267dad3e8fc6f069529fbdf0bcf9b5f13c9c6de1681e8b0a",
+ "2620c29f86cbf698cca5f79de364ae131345a802c0cccfaefdd7375dcc9ba6ccac91f709"
+ "43eb606506e51e2ced50491eb8f48769810b6dc178d56702838f1c2f0930f2a9e4f1db6"},
+ {NID_sect571r1, NID_sha384,
+ "48629ec97f56273599cd9903f8a84ac2ba74275b40e1e42fa47649568babe05cf63c8417"
+ "d828251acc2eec525b56dc9082b68d51b0c2bbaa7389fbee15d058cf482993b2bedc5a91"
+ "01f1afdc79989a812478245d191550109fc17215679553c508c84e3d4cfdea377088d09e"
+ "b214e6f92410facee4790beeecafe72b2e3ed192",
+ "3d3c6a7ab9450c94aa3b8a1ffb678e5b647af24cbfd66ee3944e6f264f406295b8037674"
+ "71fc67936fdfed1714b4b8761a07eec86543b7c4da6bd2fcb33fa8cda4077737f398e18",
+ "04042d536f1b15a22f4ba80066798d8d1c2704988eeb9423319c1850a1ae6bba4097307b"
+ "515640ed3112e93f1f6ae67c60a4b0d2b6634aa7038a60b52b2b447fd1651857b71711c9"
+ "75079eb18cc7493a1c7f2f9b621969b9ce9ee37fc0701f6cf56f5d5dc6efb13a384517a3"
+ "87f253aae1e93bb0a919b0c22e4d6cbc79b449b268a068b7eb2853324b96715d75b8c26f"
+ "27",
+ "23ce112d60a2f7c29d77d64acd9f587e0eb75ef8e739b8548e154681efc24243594eef5e"
+ "33d845b1e4e89bac56f2e9586e042e0fff38bcf79c73fc9aa5fc908261df5cd2c6cb821",
+ "3a770df8a2bc35e122c1bd551c38400be47f2499ff57618ccd01e14a2e35e87a67b0e40f"
+ "9a10eee7efcc3d37b474f2840fb8c24a9adf93734680ae6b25818369c8608a2f8f338f1",
+ "0728a4eae5f5638a51579e224a24ecd4c997001bb8681e23a7476fbf78b4fab84497000f"
+ "20c1e67e8a4e4116498bcee49ff00026009af31c1037172188aacd264fde8db15c97167"},
+ {NID_sect571r1, NID_sha384,
+ "aa3a9fe467b1ca638dd0622c9ea235a418b39b2e15ad81fee01b6892b240783d8db3c72e"
+ "16c13df8016dac6addbfb85232158325bd7432fca3b8bf5db3abd0b4c5ccd0999609dc42"
+ "199ca4680692a0805cdd68108bcb493a558ab507cec0a2782a9e976928985352edb2abc0"
+ "c07078b59d2fd86fda7fc76cfe573181d934c46c",
+ "01ce010ea8e6e1a0c26ab22eb90f0700dc73b232c429d36371e68e429792afb7223f1032"
+ "7708bcff779ea55fb5f22ad87aa054e84d10f5450f1bc9a89279062ea2173f55ab0f76c",
+ "0404b2b5acef5921e691f10ade81b91ba8e68e73b33a2494cf4ca6617707861f334eb07c"
+ "a96dfd681dd63f78102f8d792d66102117b739d477e431d9a3efd79bfcc18cea156db58a"
+ "0e07e421337d4cb7a98cf9c9c6fdf9fa242904d9906d8a6759ef64a82cbf923b2a57073e"
+ "a0eabd14aa4295bec84d50a1722fecad3e5f064bd3171facdfff45b170e49f185a3c193f"
+ "2a",
+ "326b62065b7c779dc398ee03a8332cfb940b0f24a7d3de4a90323d9e390ad3fb1f0036ab"
+ "f6f525d8d88ab6641302d10db447b78780d366f32ce36ae571e323124b21984c48aea7d",
+ "3d2b207b428829ed5100a92f7276e16978e374c734834b0d627cddf6aff5cab72dafefc6"
+ "c038a91426e35ee0f2c1acc11c55a34a89874100b89588aba7b02e19490e66eb49ef6ed",
+ "3259fef5c2a0779ae408b26e6c7d581fa973156cdb07c329dde0c12b6c498e7a94577719"
+ "865b7fcc0db078ba72a27bf338ec6b8aa41c15963538c329c55dee67833faebe3b643ad"},
+ {NID_sect571r1, NID_sha384,
+ "6c3937014361799f1461f652841b5137eb0dcaf01dd293298d002f27e9a770b9e1a30367"
+ "e35c04603881f0c814cf8ecfbe1619cc49cd516b1d60d27de37ed52a5e1cc300e2face46"
+ "69f308ebe6747255a3d386f16778e494a7cdd10b45171b2bfcdabd91b805bf24857708c1"
+ "b75e368edb2874321324f83a19154d3a1578c767",
+ "1e7410d012aeef02b3723346d24ebafd684c99087ecccaea1cf3735d52c4c81dda41812c"
+ "09f1e874dc964d858ca240a19963d5dc89451f5dd6764426ae41cb23f19cbfdca0fc562",
+ "040400a3bb3ff07a339ff98f7c45fe032cf42c0e25de8dee2934ce42dfb0c9894f4fce27"
+ "fef299b41beb8579270efc7b01c0663c3f72d7bdd9f6ff5186eca9c42d15faaef8784211"
+ "a5006fe998f7a0db06efed050d178865a2b7de6ca7c789cedff7f2158a5e07ac1d335ec0"
+ "dbd213fc9465399028fad8b7f4d2cd16fb8ceae4d3d53abefd2b4037efd7f7245296bfdf"
+ "9d",
+ "2bb0fb9c428e42482d5dbdb35157ad0fa713fe732dac8604c0194e3f9738fac5cf3874bd"
+ "863718712a3da45b7c4612c8685465ecaec0930d9fec32ab25818d2f25fad580009b698",
+ "1062386d3e77043298eb88be46bd4e6f33c83a7358926b30ca06a6b7139815f6e1630f73"
+ "d352a2cb9bc0619d08a89d4bde1636c74b6580543ed743073eec2ae0037bea2b3c9228e",
+ "1ceef759d804ff7de526559636d0bc7930c096c7b959f04f8fec5d7e96129fba14c8341b"
+ "0ed84a64c6cce7cd5b058fab7f44dcf3e714544c9b6f9c1d46ce512870deb51856e9dec"},
+ {NID_sect571r1, NID_sha384,
+ "12fea55ffda15db902aa6a4388b9807c89c193cbf75b5d2a4c95206fa43dedc45974c800"
+ "79933451bdc5b3ea015ed3ca2c54156dc61afb1bc82adefed1491302a48b9d3d2f474ab4"
+ "5343c611677d360515b93fb36da7a1c1b2341c9cce185c881c0beef33d43967134a190c0"
+ "9034ae3261f3295b79aebd3fe123616f73cf2089",
+ "2139839ce38eb879d266065dde5e5ea227244323b330e3ad5a0bc690f3c210f794cf18f0"
+ "d730693887548bfbc434f48ee10ed34cb41d52172b06e448df938170a5e17311cab8e88",
+ "0402ecf46b90616b534ea25cc9993942fd7576a1c4f2f443d3b1f56d4490bf0af669c9eb"
+ "9d110fe2a65609875e1a924bc4b9ed2ed2315047bbaeadaa1029b38a7a87dd8751d4128e"
+ "8002aec3a2f2557c7152a4907af68aa39485274f20927b2da70823440fbd09cbc308d46e"
+ "30bd6b705f615b7074fe5421ca36b4aa53861983eceae9a69649495952e75b0f060b5d26"
+ "e4",
+ "2e3412b61eb23d33ca2910dc25dd14c04d2c8b403d8077a72b9511d71ee9da6d7e1db093"
+ "b92287f8fb00aea0576f6712c56d80cc4e3554e0faa9c7d911e3d17682de831bf649bd9",
+ "06a3075efec81a86175cd1dc2bfe82e83aff1db640184a6a3ed7a0dcdef51aa0be0005c5"
+ "4ac05f9b65af265af7f2ec3d1d7c137184b0d695d701ff1aed194faf2efa98ce6c5e502",
+ "237d7ff92480fa7d6d1f5a0564a2608afe5e95ce2c29dd88853d1ad9d4d2beb8d1f0423e"
+ "db883faadd592394f52048bf2dc26d2dc19279477ed86621c7a5960ee3c3e2d345fda29"},
+ {NID_sect571r1, NID_sha384,
+ "c8395546842ddb545d8ea3db4efe970453dcb06025ac3b7a25aa5ef62070f3021b9a1fea"
+ "91ff7055b6c398073e7886a6f71afe53c82c47b71377dfe291972503bbeb25bd477bf0e7"
+ "adc8a5d3f8b34ccd0080d61e121214e1b29802b711cdd8a6bb2275a2395c467ec2c15719"
+ "52992e448d736d8bd70ee629c75b5e32b8323a00",
+ "274f70fe69e4dbb55c5d404e39f5196335047113087f8711f2f67f2be4964e4fbcb86568"
+ "0758df1c401cd677b0971654b7a6aeb7bee0d6d80ac0de14d4f46f356b2d5545c185aa6",
+ "0402b2321e0a1df083919628dd8b4c318b9ded8a3e660ce5585b21e46843228b4d32da76"
+ "5a3776c181654aad0ce90724bf85b01b051d236342b48d41a1dbda1e9904d659c98a039a"
+ "97020227182fcf099d46d9882c0b0f26b0595a2a3166248898df2f3fd27c78e7c0b8b59e"
+ "f0ed6745660c0dea1acb567f9d943928864dd1e94f8eb6b5b8473c0c91485643189cf679"
+ "d2",
+ "2f234066c936625fca10dd080cbbb1228c4d2054cbdeafc8a0a248c0d22807fc92c661b4"
+ "f69586ecf9469bc4c22895cc73ecf492fb2165a12b027194d409677e7185de24f6870a3",
+ "3a48daa8e379b3b2f377049a4d462530c9ea67019752f4af4b4192b02d6e028386dcb9ef"
+ "95c8019e90e09dfc8dff5e6f6812df491906ced39befedf16caef614d8c174e7ea95fc1",
+ "33f18738cb26d88c8c048c58a210c7be70c71636dc62c022df1bd7747d8c67bfcf5ff2fb"
+ "3990ed35becf6c77755ac62aed480df55efea578671bd8d50536a10e2c0192bd42d78e2"},
+ {NID_sect571r1, NID_sha512,
+ "10d2e00ae57176c79cdfc746c0c887abe799ee445b151b008e3d9f81eb69be40298ddf37"
+ "b5c45a9b6e5ff83785d8c140cf11e6a4c3879a2845796872363da24b10f1f8d9cc48f8af"
+ "20681dceb60dd62095d6d3b1779a4a805de3d74e38983b24c0748618e2f92ef7cac257ff"
+ "4bd1f41113f2891eb13c47930e69ddbe91f270fb",
+ "03e1b03ffca4399d5b439fac8f87a5cb06930f00d304193d7daf83d5947d0c1e293f74ae"
+ "f8e56849f16147133c37a6b3d1b1883e5d61d6b871ea036c5291d9a74541f28878cb986",
+ "0403b236fc135d849d50140fdaae1045e6ae35ef61091e98f5059b30eb16acdd0deb2bc0"
+ "d3544bc3a666e0014e50030134fe5466a9e4d3911ed580e28851f3747c0010888e819d3d"
+ "1f03a8b6627a587d289032bd76374d16771188d7ff281c39542c8977f6872fa932e5daa1"
+ "4e13792dea9ffe8e9f68d6b525ec99b81a5a60cfb0590cc6f297cfff8d7ba1a8bb81fe2e"
+ "16",
+ "2e56a94cfbbcd293e242f0c2a2e9df289a9480e6ba52e0f00fa19bcf2a7769bd155e6b79"
+ "ddbd6a8646b0e69c8baea27f8034a18796e8eb4fe6e0e2358c383521d9375d2b6b437f9",
+ "2eb1c5c1fc93cf3c8babed12c031cf1504e094174fd335104cbe4a2abd210b5a14b1c3a4"
+ "55579f1ed0517c31822340e4dd3c1f967e1b4b9d071a1072afc1a199f8c548cd449a634",
+ "22f97bb48641235826cf4e597fa8de849402d6bd6114ad2d7fbcf53a08247e5ee921f1bd"
+ "5994dffee36eedff5592bb93b8bb148214da3b7baebffbd96b4f86c55b3f6bbac142442"},
+ {NID_sect571r1, NID_sha512,
+ "b61a0849a28672cb536fcf61ea2eb389d02ff7a09aa391744cae6597bd56703c40c50ca2"
+ "dee5f7ee796acfd47322f03d8dbe4d99dc8eec588b4e5467f123075b2d74b2a0b0bbfd3a"
+ "c5487a905fad6d6ac1421c2e564c0cf15e1f0f10bc31c249b7b46edd2462a55f85560d99"
+ "bde9d5b06b97817d1dbe0a67c701d6e6e7878272",
+ "2e09ffd8b434bb7f67d1d3ccf482164f1653c6e4ec64dec2517aa21b7a93b2b21ea1eebb"
+ "54734882f29303e489f02e3b741a87287e2dcdf3858eb6d2ec668f8b5b26f442ce513a2",
+ "04036f1be8738dd7dae4486b86a08fe90424f3673e76b10e739442e15f3bfafaf841842a"
+ "c98e490521b7e7bb94c127529f6ec6a42cc6f06fc80606f1210fe020ff508148f93301c9"
+ "d304d39666ebe99fe214336ad440d776c88eb916f2f4a3433548b87d2aebed840b424d15"
+ "c8341b4a0a657bf6a234d4fe78631c8e07ac1f4dc7474cd6b4545d536b7b17c160db4562"
+ "d9",
+ "378e7801566d7b77db7a474717ab2195b02957cc264a9449d4126a7cc574728ed5a4769a"
+ "bd5dde987ca66cfe3d45b5fc52ffd266acb8a8bb3fcb4b60f7febbf48aebe33bd3efbdd",
+ "3d8105f87fe3166046c08e80a28acc98a80b8b7a729623053c2a9e80afd06756edfe09bd"
+ "cf3035f6829ede041b745955d219dc5d30ddd8b37f6ba0f6d2857504cdc68a1ed812a10",
+ "34db9998dc53527114518a7ce3783d674ca8cced823fa05e2942e7a0a20b3cc583dcd930"
+ "c43f9b93079c5ee18a1f5a66e7c3527c18610f9b47a4da7e245ef803e0662e4d2ad721c"},
+ {NID_sect571r1, NID_sha512,
+ "ba6be551bc60653192401ed8ff9e1acd9013d8811a7a1389528bf07438366f5772cd7aed"
+ "ad010c19c47622cec03a4d35b8003b39ed901b720629ab59de55a03c1ca50a62987f8da1"
+ "59e356245df58d5ae1936e65f3cd3acbe03ad1d0fcab4aaf2a7a947549ae776772201efb"
+ "c6fab1aebfa1d99994d4f43dc28f39c0f279b992",
+ "2a69bc1df069c6e89722521a63675f318252be629e7558f3716917998e660ac960b0b750"
+ "562846fe6c12ef492951e51e224754bab84a6eacd4147a5f26ae85ee4381bb14ec2a8c7",
+ "0404685c0358ca31883cdfd7d609afa8b1e47540a97f473e0ebe98b0aaaab9418877aeea"
+ "d3a26fb01a4725fda20e7223a4fe7de0df6891c0812555b8b146918d3b80edd11615d95b"
+ "77067c92736447946c7577965b613e18950d813a4df049a6000895f9dac34d73ea46a83c"
+ "6a4e7c83831af0d33026825664c44090953521175b9da2a7ac563a0fc5e13c85d34aaf49"
+ "f2",
+ "1700d9ac00a987ff3a1d0be4290979317fe60f4f8ce1e0e72a026fc89e28c0070b76ada1"
+ "4f7a1a66ac2e8aef17eec18b568ada4fd59c05414e55356fc17d9e5079e6cabfc1f220d",
+ "23a279662efec48f6cf8c7334862525b52ac37a9b03da6a063da2849f878015632427834"
+ "34fca02fa23e32249666ddc6f596e07750ed21de303f4f10de56f1d37101cb0826bb8bf",
+ "3b449467b150cba0d7c2b44280c5ac452f1217384ce121c979625d313394f6cef501b819"
+ "80a02567ca55da2bc313dc0754b5256b08d8e3b63ea033253b205cc5dcb014574b8e9a0"},
+ {NID_sect571r1, NID_sha512,
+ "295720a79ac8201f40a66b06ae5d970afb15f36582897eed25cd92edcd00f70ac8e31c55"
+ "6eed4375ea044c2e8b227a8e02c0a3e996c9272d52ac7b3ad43b80f217295dddc84b177c"
+ "f1e800ad08bf7fdd021fb2f49b54162092f8d628679c4ee335abbc90c027264c8b288c6e"
+ "16eca3172eaa297ba50626b00fe0a0ad3a9dbeeb",
+ "0d11ed1b78b22b3420df4ddc4acc7c2286d9569dd6dd88e0fa3ecae69bcced68bb81bbb4"
+ "ca6e9b54e67856e7fdf39155aa27aecb9cc827ccb9cdcf9ac633561b27d8eebfc261aee",
+ "0401868a1335058a69e3ce24ea4e6e8dc25851777bb28d3a5da67b741ec9c46e26f2d2ae"
+ "70a48c3e4feabb3b15b3c3ebd561f667ef3b95a587621de6073b9c8a904755566c5f7a3b"
+ "4206365a03c3f3066eca1af17bbbd08cd52e89f8095075b415cd4b82f3364cbff008fe36"
+ "42fe71e8a8c634ad0e5d9979251e6cedd42cb97c2203f743210051f5ee1b70c861d2a72c"
+ "00",
+ "075e49d2ff6f2aa8b44fad90446474ee0e72323a3c39e731b6c2b075cce0cb9d193bc335"
+ "6f8fdae0e0143603a57028836ee6451cab101a6eb550042cb41b5c4233d3ad3e87034d1",
+ "207a8eed0b87efe65ec558a0ccbecb13b9215e176abd93c1a4803fcae713927ece70ec6c"
+ "41c621357d78a13a950958871a52621f1de7ab74befd964a0e8f4820b84af3e0811bc67",
+ "2f02017714f54089652e02af36ac5165e44ac4a83747c805a9e003fde4bdb29561dcead2"
+ "c76b02c195074396a2dcc1b93a256c721716f8eeda8dae443c3eea446118fec3cebc4dc"},
+ {NID_sect571r1, NID_sha512,
+ "a9cff41c6dfdc4a12f31dc375a5455950077ae323d0b7a3d9a8dde73b76e9d7b94ddf9c8"
+ "8ae8e6c262d704052ac47681fc35adfc56c904baaa6e146eb653984369d76a85596cb744"
+ "941aa7b558c945ff2e81bd5ef7f00ecb4f43af23b4cea3bd4ba7b1899f1868a0c0ecfc62"
+ "ccb1d588955597ffbbaf34cab2838efc2b866669",
+ "2c36ef754b5bd065e9eadde684750acc52795be80f54dd3d7a7d743d968a18f7e404bd71"
+ "f8a76eb0395f396df5a7c2ff7e0ab6de35df34282fda6ee01fe5b9b68ecb4e378dbe32e",
+ "0404805e1a23b6eadcf91647b40903bc1fd3b9921861c942fc24d2c03d0544e7c01f004c"
+ "aeed04b5c4ebbce366a098a878c322cbebe7910bfb0f91b284ac1aef344152fc5831669b"
+ "7904f589ddb4da482ba1e9a59241b1dfbc7e9b9b69e8f69f8e90460ad58fdecc48a56842"
+ "ea6aa0537abec0a605ebfb713e588685a98f62e05a7d52082bfd57e3d68fb7851b37ec55"
+ "67",
+ "2f2002bdde0c0b0fd92e96abe76c0858e42fd7d94a181c711fc6753572539e18effa8155"
+ "cde7b1e9ceab2394f9eba874b7ea257d7c308c8ac08500f4944af5f33057650608db8fe",
+ "27f9109799bced42730faecdeea68259383a45033c6d5dc8d87adf994b46beb34177e013"
+ "700b13f1253cf756a8866218e9c8adc180f3c242c56b3de28405b36940d53c2aab24f1a",
+ "20a762ffb2f5a88b0e1356964fb558b555c424946109d16c7548f41a33cfe41da1f48327"
+ "6a27b188faf948a56670716ddf3b187570c9f514869c4492d7773d6ce453a075f9bc64f"},
+ {NID_sect571r1, NID_sha512,
+ "efa6c582d7fcf5e431aa89b3b00180c0e78efd7ccb0384d90b80e59a115a13e55001d951"
+ "528c42860132531c9b8ab29dda7a657c53c2ce96fd85549f6f1810e121eb89961295335e"
+ "aa0e40532d85814a4206e6fffdf9bff76599da9b2e71a22ed572910b0e3bae38ad72c704"
+ "2579f106739a8628dea5a745168bd918736e488a",
+ "19ffee50be5496507e3ef5c40ee88a49625e46d1dd1686a52b09ad4a8e3ee9ef364f953b"
+ "fcd97c52104eecb6138067192997cd4ebadaccb73c7b2560879289a46353a756b73cc43",
+ "04077dca410e722009ef11b37742c2c003ab3015d0ca0328a70d9d41aae04cb64f7746f1"
+ "c348b08458eb3bb1788f9ffe7d0570a9b689a9b7aca43e05400bace7630d598f5b484d13"
+ "c407291f74cddd9ff69470cf0d92afaaddcc4c8c274d4a7a64fd94292ddc8bf080606795"
+ "376bb725ab4d32c72ef77dff34cfedd34aff2f463d635bfcd7e1fd002d84383dc5bf8d5d"
+ "23",
+ "2ea37750fc3bbdeec100694068d55f92fdf35bff9ed49251c4b8bbfb2dec2dd4446999af"
+ "8848e05c7b819aeb1864430ab4e8c1d684e1cf78947a71b04d5ab8ad61cc7e3e4e24205",
+ "12ff1852eaff37fee997531039adb1fb2f9b4f4199670c022e8534625fff1fa93390ee9b"
+ "c7204ad2ba3efc2233260943f1d2381a3cc025b78c6d1f660a7bd6f42e5ed3c123055a9",
+ "1b4d8abb28ef1a9d77066921ed50eba64b8433cf00c66b8467269a4a914f568cdb86c766"
+ "a7a6a52437c5d98cfc9a2130dfaba20f3c2001f31bba7071647d51fb9fbd5fc67ee120f"},
+ {NID_sect571r1, NID_sha512,
+ "211acebfaf13bba33a9dd16722ec53baab92a140127d61372cbf1850f2fc894e942e25d7"
+ "80778235f880743953d04eca7a9205602e388172aec2abf35412b483490751f93b51239b"
+ "6701cb0aab14e5179b0d7f55d8586358381dd83e3e436bf69a6820317d1701750cb1fea1"
+ "293467ba589eec5f5779c2dbf2a9b8f28c4dc239",
+ "3129e96fd28c4198cc5242c1e3531a3979fae643d527044e98d7721aa56b5b4b45dfddfa"
+ "17a4115e10a2b4f46d92f81cbdd7e86e588a4c6d8c2b3a83f54cebcee1d1dd33e85d81a",
+ "04073a92abcc991e3f89d82c47fa0fec48e3e7c4d97e2525f8dc2d24da39f616af4a5a80"
+ "4d2603703f6db7cc9324c5b56a21009373f6605f561c8503394e7746e51273b5722ffbc2"
+ "3d00684c842f03a53a60cce087f4fcdbf23b7a28c48b6b6544f583342a65d97dd87037c6"
+ "fef176a1f00513713468273494a5be683b68c5e75bc08995fde763bb6f965da1acb7e894"
+ "f1",
+ "0165e52640fcaf8cbdbfe73cb8058c53045e7670aafb2def28d2c9eceb5ed1634b5339cc"
+ "47ba981eb6eb03ba714c7717e9ed5acc15c8f304702a0409bd4508015d4626cfc5484b1",
+ "27dcdf16b7156a7a05a752da28b5bd6b233e8a7c16eb7f9030f29c4352e6508f8424d1b5"
+ "ba789dac4152ac4812ff7975cce69908371a81a4d7d9dd70a8dabebdc4e3af27234f0d0",
+ "32a654a31f09a9803e502a1440c2bcf122780f4f47aa37e15991d9a548583fdca4880080"
+ "4712816b212cd3c657e6bd4cb7443a0288592541473c5086e1277250612c21346538374"},
+ {NID_sect571r1, NID_sha512,
+ "ee592e20e0a45c18089c2e41460e65a7d22ed9714379f095d43a308bdd383128aaa6fb24"
+ "e9d35fd28fc95c5b792ad75c980d2cdf0f460ac60b12c5919d3cb28dac4d488196be6c2d"
+ "fe462b1b0ce59f8501692255840f5215c0fd8b74b1996a267a5e3b22d2841cf0a0b6315e"
+ "f4ec7180f1c8494f4c07d5869c01fa2711739efc",
+ "3d723d2697cd07dd8444f992f2ab4a063db334034c25ea9be99fd7a1f495e3a644e5ea03"
+ "3a41264e0d24a911e55741d0cab80a0bd678eaec2bd1e60424d4491eb86d664900d907e",
+ "0400c7a229b5fb9fc774c1b6250f3bba2f0972d1aada7080641c014d012db0637a0656a4"
+ "3024ec0ea25ff70012646dc19eeb1033aebcc96a001ba876b2f5def6e198b8d4a53f7c7f"
+ "4a009228a68eafaac214fdfa19923a0c19629de31ac0967c9d02c53dbf221f9affb735d3"
+ "bad732f381f1ca414d70920231a78f742254d895a33ffab492f8e6094a542e77962a324b"
+ "a4",
+ "3b3724a5933353bb9ff5f742f59385e780caa517a963590b7fc89882bed95cf90ca6365c"
+ "e8b882f2d96e56bd866a5c437733b681308c570c51ec893ea95fede66c7aaf4561173f7",
+ "2a487c1fc29426e8e85f0a35c177cd168a444959b2f5cd4519b9edd52af3ea829cfe964a"
+ "c2b59198af8e2d3859ebdf9885ebf57bdf5767da1611d3958de286f91ef397230d65599",
+ "10fc01efcb22b982f992efb71887bc79c3f32a9088bc2011c269924cee0f47c36452399d"
+ "499f2933587081b872e9fd2191c20cd5cd94927839228ebcf22cf7acdf4608a2fa66310"},
+ {NID_sect571r1, NID_sha512,
+ "fffca41927debbd53455821441d9115db99fb31bfc69752a382f57bc7abe021f148346ee"
+ "29e17512c64b4918ab2391d12d6e5643bee6b5682885dc28177b292e23a37ff99b359b9c"
+ "f7578432af56e0ad1028a6cce7428980654c145af8daf09addbb3be11228d3c742defca9"
+ "d3b1667f48c63091fe3307ecf72667b02e008f24",
+ "1999ab45d66cd1d3a0fe6aa43bf5ef1e2a67637d53674f6fbbfb9b582be91fc42a12cdca"
+ "d94b50b0fc7ac55030de24a0b99fbc4314fa743ef4b5198bcc5f54d8b669fbed78e2e91",
+ "0400cbf3b0bb4a2e6c225aa922bea3b233da4661df5da7e0a1cd343a9b6655ee87fc60cd"
+ "763dee21eaa2b81c4dd5af6f4fadc3ceea643b37a6b17a6501e1b9b689fb0c4716911c1f"
+ "10014b5a9ae025f09066fffa6797ddf95f27eeade06b8ca5be5738f770362d5213c46ecf"
+ "ca58e3c60cb2bae1f8ab1bf0577c80b4fdad02819fc174cafb33df64fc0ec79713f7b252"
+ "09",
+ "253b533d3ad1c7095363e3fc80cb32471061e44dab3f9ae0ea6252f6ef169cee8badd3ec"
+ "cb77096ae9224f89baeee7e183058579680661655fb689419e36a61e8573de5ecb4cd09",
+ "3ba94f7682fb61de725a35caf1d4d799c4b05a1d1c44eb1c251dd8efab6b7d713c3fb917"
+ "776902a1bb202f9226558f4c1e75964349717e6dff938d0befea07a9ca1bbd429dd6318",
+ "226f43be8e24062180c726b5cb721cc04ffd3acd82183925523ff9e8631aecbec2c224d5"
+ "a291bb225f0da726d256aa822ee7cc2c7d69df3f2a5beb21132d91bea22e4c5db900cec"},
+ {NID_sect571r1, NID_sha512,
+ "a2f71619ea04f7057e6943c2cece8594b341ec3b96c3915d924f94ba13fd7aaeed41ffa0"
+ "e842ade414784f1ef825fcf2dbcf7bd8263b802def45f94de596aec0c121fc06558c7bb0"
+ "6b9f27a9bf56c42090b5dc344e82b69c4f528d33be166764a593483f6fda0cf56e6000ff"
+ "363ba220f5ea0ea2c3191615c7ae3bb4fa575324",
+ "2ce1cae0716205330d730e6bc6dbfb6b951dc83ee3b4a7dae75d057e32e8a46e22be75b5"
+ "f09135452b29c34dfe81a9be2e8dcd243fbd946a0ed14a832a7802e20cfe1abfd3d6e4b",
+ "04075971399fa621ce535144ec1d57f544d798a0a59207166c3d657e5a80ac00e8f5b643"
+ "448e3546064d68ae624aaabf36face3016561a248256ff9131950ab8b04710551e12222d"
+ "0c0224a50f321647f47de3db4fbe1bf1e3a3dce8a834312779f66037315e3326721e3fd6"
+ "3d4d6ef92b7ba1fa9aeb70f92e2a6701458ac8da49ac386491f2306adcd8dd781fe75e99"
+ "e1",
+ "0ad95aa69cf9f40e13f8a72ed6d93388168abc8001670ee4d95fb4b726b1f958205ab2f4"
+ "58df8bb9ccf2405680d0e6951abbb922cc11d47cfded93c0efdb70caf0c54e7ae96d7e5",
+ "09ce019161bf29eeaf323933045f59d2efc372904ba50c4a6602b8305234a851d95f06a5"
+ "b56193ad5d28488102ec25e3f421a5f5c4626b435b423d612e6ab60e0a4fe5d4952e2c5",
+ "04f7b7ac787b361c2bdfa767da9c22152e402184a7ac133f651fdcd928239215dc917401"
+ "122a6d41e78299b4235e085399e594465b7f8dbfaae9bf302d83470b4295ea06bb9bd1e"},
+ {NID_sect571r1, NID_sha512,
+ "b60415a831eca2cf60c79a334ef2f327a76d290846ee588d5d33d0a826bb0c7ec3e11dbb"
+ "384a7f89c8d180425dfae7463e0ea6497d2eec1dde112f1c1efccb532a2e2b66a28e2d36"
+ "d4252a4c3b12850d465fe21bddc441b92e6a7b0f67744f7f6e7812a0603211a26518b311"
+ "a5b190ed890ad852bed4f6ed13377cab3eebedf4",
+ "2c9d0fcfcee7e75c3245ba955ae04188b1033c55ec9c821d8de7685276bda3e9a93c3ae1"
+ "b003e5ea722913e7b169d67b1aa2dc8cd42adbd9368672a3f81a6817bf3e5529dcb0c8b",
+ "04019cba4c8ddadb596d7303331f2a22461849ebfbc78ea69277f72dcfe23d08397025ff"
+ "6691c61ed9958d68a9c5dd8a32048a89a2553afb9077ec43358763756b1473ab2cd8f25b"
+ "530319eeaa78444b7cc5d8cff4e9199ddd2c6dc7bd935a1be1d8b1c657dd5ac49bc92b0c"
+ "d91304ef44ddb7ecac05518301bfa0e533402043533f99549621e31dcc282a52186478df"
+ "2b",
+ "385e12170ed0b23c9c65ff7edd413145fd343dd841e85c498fae5f36e577641688999028"
+ "17d4dc39127010faa1da68000a511ac69f80708be5afe1631432f3bab7aaec2bdeb11b4",
+ "231ef400c6a3a0c7b26ba1b92341b72e138ca62d04ea2172854631c40c48081a18a57e9f"
+ "055748245d3e83d10d21af39935b0e50c9c86956ac46c1ea03ac4ae023d84b24f830973",
+ "24d37d67afafb0676cd7b5da2960cabfc804b0b3244b5e6739f8fe43d0841693d28c61b8"
+ "e76181f8aa24940d76fc5ea8ef3a95f72f67303e1ed85ad6e83cd2c44fd0e0f3f2f44f4"},
+ {NID_sect571r1, NID_sha512,
+ "5d15a08226cc74cf495be681b795d0bde26b19f29aca1a8c6ef77d50271ebdcb4e5fa2df"
+ "23961fe11620b1c6580183f6ebdceb2c09516c8127be576496fb71449bbbf0a9d3d1c48a"
+ "25024619b97c3e0d8b165897db96ae9758d13ac28441d7cbfb75b23cb423e0002046358b"
+ "b6d64779974a5995dfe54b398f95f7d64fc52d96",
+ "10c057bbaa44ef0f565edc288bfe66d4f6acd8686899359bca418ba89fb690429489a37b"
+ "d3c6c9f3a8714b2ca225868c6a45fee360e378a676f7ea39321790f32a4b005b81dce43",
+ "04043b1e7d7b2aee3563813a6692f0b4b61ba82b801697c3e23724a2fbab2af80a2c56be"
+ "55af41def0a90cbfce7a45ec61629906055a8b2a5013740e96859e580c444ae9f0ddf73a"
+ "fe06742f13244f1bf156d321eab2c3095ca548c3182c405187c3de2fbcb01d0e16e1fef2"
+ "46012c87d4d32378629a75b694572ec8583ae0cc813ac64f10bb05a9e52e4805590482f2"
+ "89",
+ "2b8076102a6448bd4c4e192e93cdb96ea9a6c7f6753818267ee9e67644df1a4a6c9ff64b"
+ "be9f64904648cc640fb7f0cce69f9e02878ee950b91ad559a9ec0ae15b676d933f1620f",
+ "1ad97f4997037adfe306f3859d550f9fd89bce8b566e657d5742feb17466b6b8d507d581"
+ "0a8cbba44d671b043ddb557df084bf5d1de74ef8bbd6a93690459fc16a17b80dd6c0f28",
+ "3262ef6e4175e7afe095d18157f67b3d12564d54954e9964e991c31bcfe1dee7e86b3549"
+ "1ce818400cc0f83b819f478f2f2c2d21c6c7a6be43938841559e09bce70b0d61fe51245"},
+ {NID_sect571r1, NID_sha512,
+ "9eca4bd88200baf61b901fca53dc1f1e7e3f83b94d58a6cc6a2adbc9b1a35fe3f8ec6178"
+ "7c76ed9a0d696167cd4fe46e1a0883fda564666131753c576a720125e0b712db1da02780"
+ "67cb899bdb14eec08737e864544663abb1d62f34a2114be07e8e3cf56e2d17099299ce6b"
+ "6d83b1a34e6153d7c6a32a72c7b1bf4583fcbcf7",
+ "2c182df7976ea93d996f3ba5d2221f3cb755cc7847bc3fe9e022fa4285046f5bfb426baf"
+ "a3580beea206de36f87593ae561b4b74a03fcd61fbd0e8d6fd5668f2148819a88a650aa",
+ "0406004b26a184ed710a5fb67e9d042f7fb9c8f5584b1f70a91b0b3be41c3fd2cd1a537e"
+ "962fdac8756df33f80fce2bb1bc7241d325bfc36dbaef7cf625918d589b6352fa7447189"
+ "10036a29b04a494abfe809d956c3cd6f84ea51a7fa28cb39a52f16137a13f72f0726a84f"
+ "6ae53ae24f5b468733f4cbfa0ce5bbbc1cc7b348fb996d33a45ff656a6a7557619f598a6"
+ "b7",
+ "2ab349232bcb4f4816b26bd0049e130fffc90ca0b9308edd50fb9055358a87fe798d0014"
+ "0b0ae01ed8b1f6bb9bfb726b253c3d4949ce9eecaa6c7fa84d1ef812669fa929f26be0f",
+ "0bbf2f9765b12742224ba7d064358c0305fb63e9b54a831e302a4546aa02cace798d82a1"
+ "88d2f536d78544c1571f481289d6ec69d117648026490e781f1eb9fca59bee05234ba7e",
+ "27e07ee0a1a99c90753cdc8c0291da25a82c116e62ec58b93f91086ac1cc039b35ce7d8b"
+ "53cdaa92a5ade65a7684b6e7ab79873dce33dcd467c39d0c764ee390b7fb25ca18912c3"},
+ {NID_sect571r1, NID_sha512,
+ "707450bd84141f3b61beb12ffa5ae89d812dd11badcdf6a88a2d50fc70e23f6d822ff447"
+ "7047abc58cdfa28f97ad7f4911ae0773c04ebed1f51bb2308cf6e5712c4aaed461edd698"
+ "7fdd1796aab70198276b601241f6a14225dce575830ff60f935fd9f567d1d210652e4710"
+ "922fa793da78c8fdc30c273cb08365c9fc887f50",
+ "2d3a65bbe133cc98cf0eb56ee1362195968b4eab960a1d55d8b762f1361fc21348d6f275"
+ "d4bea1de7158fb97c995e20b92a9c887a3e332d154667ad167acc632eb88a0ead6113a2",
+ "04034355b54d00c3df7c2762ee2982cb777491aaf78e550c4d2ff5d5a893416eb3517671"
+ "dbe522b8c553fd71edfe0306cd7628324f4f748091fc5d84ad8af33b896985674649a6f4"
+ "e507e322a04eb600a3faf3e045959f1e9f798e1c965ced40fd4c0383c0d4e79a96bf693a"
+ "91d7662780990d0c9dfca77a9bc0e13551d2ab35af8a153fa34ea903961fe66996ca053b"
+ "64",
+ "0a59ac1240bcefc52456486ce23b780cc92c8b89314b8442a6898c373bd0adc3725e3eba"
+ "c580546d1ec82ebfb2e04c608441d962d759ab5f5af1596c6623487e1347537a3c35bf4",
+ "0c47ef55d93ac36cee537160bbe39c3d4504184188533edfe589a5ab6e5a3e06ef413aa4"
+ "8710d304f0b2bc380fd69a34aa0b8e2e9466fd8a131cb056dffe4b809a59fd83e594483",
+ "2d8de1e8e2a52dd1be08435cda69e673b328573edeb1767849536e6f2d5fc8f18f7bfde9"
+ "36d8c32ecbfa97bf976133d65641320ca1c41e81c388fd6088884bbd89274b1976470fc"},
+ {NID_sect571r1, NID_sha512,
+ "d5ce9d59391cdc47ef942dd2a818d024ae3917deea8a5a4214e4db6a0c5e6b0936f3e632"
+ "fdb68a3f0006e05c44b7232013e1da5f877cd197f44fd6f60c1fd2378995e9a47534948c"
+ "5a09e33750f07a7165072ab38095373b07a50bc1391eb6b650ee13acd63d0352e7d9c316"
+ "95ea1ec6323f9b5f57b426ace56aa7fdbf419be0",
+ "2a920e8dc928acdd56e3655b2340d4371c793e66f67405fb7a90f31e9c4ef466cc44331d"
+ "1d2fe3ff7391d2576dc6640772166ef8c154a5ff1808f5dab2f03061070ec8b3f786c36",
+ "0405edc0fb974314e21ad40d73524d5620b7279084e3ecb9e58b06340ae53d2383efd206"
+ "b8b1eb3dd60c38f593efc05e2ba5fb8989472bac7db60fcada2d18d4108ab36e8c20cc71"
+ "0d00444cf65175f6bbaf647739cfd8407e7036fc6cc6208ccb9d776eb13e13b377136c68"
+ "3e108775d85b6bc5638926432a17344de965d45e042a0a8e0b63c7fc3a36fc15cf718f3b"
+ "af",
+ "35a0215892d0c52ece29559ebfa061011da8d597af6b3d1ee988ea4819be194c79a42681"
+ "476140738b1b5dc191485bd20c96c282ab38ddbc3987343155366b6a5d1ce7053efcd83",
+ "1a69a9a51f6b0dc196b2a8db2e8bf61764d4c65b038f43b5ed6b5dc2673971c32928606f"
+ "92b7caafb4dab3cd61ee724bba71a0d5c788cde4b96ef6b453f2a69126dafc20dbc7c82",
+ "13b5463636b8462cd9f479de8d114e29e7011489bcb9735ffe9ca0707a07df3c0aba0504"
+ "3eab387bfedd9fe982fbf04968f2be200e9e052cb4b02223b8579913d713acf94e7dc80"},
+ /* binary KATs from X9.62 */
+ {NID_X9_62_c2tnb191v1, NID_sha1,
+ "616263", /* "abc" */
+ "340562e1dda332f9d2aec168249b5696ee39d0ed4d03760f",
+ "045de37e756bd55d72e3768cb396ffeb962614dea4ce28a2e755c0e0e02f5fb132caf416"
+ "ef85b229bbb8e1352003125ba1",
+ "3eeace72b4919d991738d521879f787cb590aff8189d2b69",
+ "038e5a11fb55e4c65471dcd4998452b1e02d8af7099bb930",
+ "0c9a08c34468c244b4e5d6b21b3c68362807416020328b6e"},
+ {NID_X9_62_c2tnb239v1, NID_sha1,
+ "616263", /* "abc" */
+ "151a30a6d843db3b25063c5108255cc4448ec0f4d426d4ec884502229c96",
+ "045894609ccecf9a92533f630de713a958e96c97ccb8f5abb5a688a238deed6dc2d9d0c9"
+ "4ebfb7d526ba6a61764175b99cb6011e2047f9f067293f57f5",
+ "18d114bdf47e2913463e50375dc92784a14934a124f83d28caf97c5d8aab",
+ "03210d71ef6c10157c0d1053dff93e8b085f1e9bc22401f7a24798a63c00",
+ "1c8c4343a8ecbf7c4d4e48f7d76d5658bc027c77086ec8b10097deb307d6"}
+# endif /* OPENSSL_NO_EC2M */
+};
+#endif /* OSSL_TEST_ECDSATEST_H */
diff --git a/test/ecstresstest.c b/test/ecstresstest.c
new file mode 100644
index 000000000000..22d46c50da2c
--- /dev/null
+++ b/test/ecstresstest.c
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#define NUM_REPEATS "1000000"
+
+static ossl_intmax_t num_repeats;
+static int print_mode = 0;
+
+#ifndef OPENSSL_NO_EC
+# include <openssl/ec.h>
+# include <openssl/err.h>
+# include <openssl/obj_mac.h>
+# include <openssl/objects.h>
+# include <openssl/rand.h>
+# include <openssl/bn.h>
+# include <openssl/opensslconf.h>
+
+static const char *kP256DefaultResult =
+ "A1E24B223B8E81BC1FFF99BAFB909EDB895FACDE7D6DA5EF5E7B3255FB378E0F";
+
+/*
+ * Perform a deterministic walk on the curve, by starting from |point| and
+ * using the X-coordinate of the previous point as the next scalar for
+ * point multiplication.
+ * Returns the X-coordinate of the end result or NULL on error.
+ */
+static BIGNUM *walk_curve(const EC_GROUP *group, EC_POINT *point,
+ ossl_intmax_t num)
+{
+ BIGNUM *scalar = NULL;
+ ossl_intmax_t i;
+
+ if (!TEST_ptr(scalar = BN_new())
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, point, scalar,
+ NULL, NULL)))
+ goto err;
+
+ for (i = 0; i < num; i++) {
+ if (!TEST_true(EC_POINT_mul(group, point, NULL, point, scalar, NULL))
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, point,
+ scalar,
+ NULL, NULL)))
+ goto err;
+ }
+ return scalar;
+
+err:
+ BN_free(scalar);
+ return NULL;
+}
+
+static int test_curve(void)
+{
+ EC_GROUP *group = NULL;
+ EC_POINT *point = NULL;
+ BIGNUM *result = NULL, *expected_result = NULL;
+ int ret = 0;
+
+ /*
+ * We currently hard-code P-256, though adaptation to other curves.
+ * would be straightforward.
+ */
+ if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1))
+ || !TEST_ptr(point = EC_POINT_dup(EC_GROUP_get0_generator(group),
+ group))
+ || !TEST_ptr(result = walk_curve(group, point, num_repeats)))
+ return 0;
+
+ if (print_mode) {
+ BN_print(bio_out, result);
+ BIO_printf(bio_out, "\n");
+ ret = 1;
+ } else {
+ if (!TEST_true(BN_hex2bn(&expected_result, kP256DefaultResult))
+ || !TEST_ptr(expected_result)
+ || !TEST_BN_eq(result, expected_result))
+ goto err;
+ ret = 1;
+ }
+
+err:
+ EC_GROUP_free(group);
+ EC_POINT_free(point);
+ BN_free(result);
+ BN_free(expected_result);
+ return ret;
+}
+#endif
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_NUM_REPEATS,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "num", OPT_NUM_REPEATS, 'M', "Number of repeats" },
+ { NULL }
+ };
+ return test_options;
+}
+
+/*
+ * Stress test the curve. If the '-num' argument is given, runs the loop
+ * |num| times and prints the resulting X-coordinate. Otherwise runs the test
+ * the default number of times and compares against the expected result.
+ */
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+
+ if (!opt_intmax(NUM_REPEATS, &num_repeats)) {
+ TEST_error("Cannot parse " NUM_REPEATS);
+ return 0;
+ }
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_NUM_REPEATS:
+ if (!opt_intmax(opt_arg(), &num_repeats)
+ || num_repeats < 0)
+ return 0;
+ print_mode = 1;
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+
+#ifndef OPENSSL_NO_EC
+ ADD_TEST(test_curve);
+#endif
+ return 1;
+}
diff --git a/test/ectest.c b/test/ectest.c
new file mode 100644
index 000000000000..946973c2f4d9
--- /dev/null
+++ b/test/ectest.c
@@ -0,0 +1,3044 @@
+/*
+ * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2002, Oracle and/or its affiliates. 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
+ */
+
+/*
+ * EC_KEY low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <string.h>
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#include <openssl/ec.h>
+#ifndef OPENSSL_NO_ENGINE
+# include <openssl/engine.h>
+#endif
+#include <openssl/err.h>
+#include <openssl/obj_mac.h>
+#include <openssl/objects.h>
+#include <openssl/rand.h>
+#include <openssl/bn.h>
+#include <openssl/opensslconf.h>
+#include <openssl/core_names.h>
+#include <openssl/param_build.h>
+#include <openssl/evp.h>
+
+static size_t crv_len = 0;
+static EC_builtin_curve *curves = NULL;
+
+/* test multiplication with group order, long and negative scalars */
+static int group_order_tests(EC_GROUP *group)
+{
+ BIGNUM *n1 = NULL, *n2 = NULL, *order = NULL;
+ EC_POINT *P = NULL, *Q = NULL, *R = NULL, *S = NULL;
+ const EC_POINT *G = NULL;
+ BN_CTX *ctx = NULL;
+ int i = 0, r = 0;
+
+ if (!TEST_ptr(n1 = BN_new())
+ || !TEST_ptr(n2 = BN_new())
+ || !TEST_ptr(order = BN_new())
+ || !TEST_ptr(ctx = BN_CTX_new())
+ || !TEST_ptr(G = EC_GROUP_get0_generator(group))
+ || !TEST_ptr(P = EC_POINT_new(group))
+ || !TEST_ptr(Q = EC_POINT_new(group))
+ || !TEST_ptr(R = EC_POINT_new(group))
+ || !TEST_ptr(S = EC_POINT_new(group)))
+ goto err;
+
+ if (!TEST_true(EC_GROUP_get_order(group, order, ctx))
+ || !TEST_true(EC_POINT_mul(group, Q, order, NULL, NULL, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, Q))
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ || !TEST_true(EC_GROUP_precompute_mult(group, ctx))
+#endif
+ || !TEST_true(EC_POINT_mul(group, Q, order, NULL, NULL, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, Q))
+ || !TEST_true(EC_POINT_copy(P, G))
+ || !TEST_true(BN_one(n1))
+ || !TEST_true(EC_POINT_mul(group, Q, n1, NULL, NULL, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, Q, P, ctx))
+ || !TEST_true(BN_sub(n1, order, n1))
+ || !TEST_true(EC_POINT_mul(group, Q, n1, NULL, NULL, ctx))
+ || !TEST_true(EC_POINT_invert(group, Q, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, Q, P, ctx)))
+ goto err;
+
+ for (i = 1; i <= 2; i++) {
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ const BIGNUM *scalars[6];
+ const EC_POINT *points[6];
+#endif
+
+ if (!TEST_true(BN_set_word(n1, i))
+ /*
+ * If i == 1, P will be the predefined generator for which
+ * EC_GROUP_precompute_mult has set up precomputation.
+ */
+ || !TEST_true(EC_POINT_mul(group, P, n1, NULL, NULL, ctx))
+ || (i == 1 && !TEST_int_eq(0, EC_POINT_cmp(group, P, G, ctx)))
+ || !TEST_true(BN_one(n1))
+ /* n1 = 1 - order */
+ || !TEST_true(BN_sub(n1, n1, order))
+ || !TEST_true(EC_POINT_mul(group, Q, NULL, P, n1, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, Q, P, ctx))
+
+ /* n2 = 1 + order */
+ || !TEST_true(BN_add(n2, order, BN_value_one()))
+ || !TEST_true(EC_POINT_mul(group, Q, NULL, P, n2, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, Q, P, ctx))
+
+ /* n2 = (1 - order) * (1 + order) = 1 - order^2 */
+ || !TEST_true(BN_mul(n2, n1, n2, ctx))
+ || !TEST_true(EC_POINT_mul(group, Q, NULL, P, n2, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, Q, P, ctx)))
+ goto err;
+
+ /* n2 = order^2 - 1 */
+ BN_set_negative(n2, 0);
+ if (!TEST_true(EC_POINT_mul(group, Q, NULL, P, n2, ctx))
+ /* Add P to verify the result. */
+ || !TEST_true(EC_POINT_add(group, Q, Q, P, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, Q))
+ || !TEST_false(EC_POINT_is_at_infinity(group, P)))
+ goto err;
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ /* Exercise EC_POINTs_mul, including corner cases. */
+ scalars[0] = scalars[1] = BN_value_one();
+ points[0] = points[1] = P;
+
+ if (!TEST_true(EC_POINTs_mul(group, R, NULL, 2, points, scalars, ctx))
+ || !TEST_true(EC_POINT_dbl(group, S, points[0], ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, R, S, ctx)))
+ goto err;
+
+ scalars[0] = n1;
+ points[0] = Q; /* => infinity */
+ scalars[1] = n2;
+ points[1] = P; /* => -P */
+ scalars[2] = n1;
+ points[2] = Q; /* => infinity */
+ scalars[3] = n2;
+ points[3] = Q; /* => infinity */
+ scalars[4] = n1;
+ points[4] = P; /* => P */
+ scalars[5] = n2;
+ points[5] = Q; /* => infinity */
+ if (!TEST_true(EC_POINTs_mul(group, P, NULL, 6, points, scalars, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P)))
+ goto err;
+#endif
+ }
+
+ r = 1;
+err:
+ if (r == 0 && i != 0)
+ TEST_info(i == 1 ? "allowing precomputation" :
+ "without precomputation");
+ EC_POINT_free(P);
+ EC_POINT_free(Q);
+ EC_POINT_free(R);
+ EC_POINT_free(S);
+ BN_free(n1);
+ BN_free(n2);
+ BN_free(order);
+ BN_CTX_free(ctx);
+ return r;
+}
+
+static int prime_field_tests(void)
+{
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL, *a = NULL, *b = NULL, *scalar3 = NULL;
+ EC_GROUP *group = NULL;
+ EC_POINT *P = NULL, *Q = NULL, *R = NULL;
+ BIGNUM *x = NULL, *y = NULL, *z = NULL, *yplusone = NULL;
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ const EC_POINT *points[4];
+ const BIGNUM *scalars[4];
+#endif
+ unsigned char buf[100];
+ size_t len, r = 0;
+ int k;
+
+ if (!TEST_ptr(ctx = BN_CTX_new())
+ || !TEST_ptr(p = BN_new())
+ || !TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_true(BN_hex2bn(&p, "17"))
+ || !TEST_true(BN_hex2bn(&a, "1"))
+ || !TEST_true(BN_hex2bn(&b, "1"))
+ || !TEST_ptr(group = EC_GROUP_new_curve_GFp(p, a, b, ctx))
+ || !TEST_true(EC_GROUP_get_curve(group, p, a, b, ctx)))
+ goto err;
+
+ TEST_info("Curve defined by Weierstrass equation");
+ TEST_note(" y^2 = x^3 + a*x + b (mod p)");
+ test_output_bignum("a", a);
+ test_output_bignum("b", b);
+ test_output_bignum("p", p);
+
+ buf[0] = 0;
+ if (!TEST_ptr(P = EC_POINT_new(group))
+ || !TEST_ptr(Q = EC_POINT_new(group))
+ || !TEST_ptr(R = EC_POINT_new(group))
+ || !TEST_true(EC_POINT_set_to_infinity(group, P))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P))
+ || !TEST_true(EC_POINT_oct2point(group, Q, buf, 1, ctx))
+ || !TEST_true(EC_POINT_add(group, P, P, Q, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P))
+ || !TEST_ptr(x = BN_new())
+ || !TEST_ptr(y = BN_new())
+ || !TEST_ptr(z = BN_new())
+ || !TEST_ptr(yplusone = BN_new())
+ || !TEST_true(BN_hex2bn(&x, "D"))
+ || !TEST_true(EC_POINT_set_compressed_coordinates(group, Q, x, 1, ctx)))
+ goto err;
+
+ if (!TEST_int_gt(EC_POINT_is_on_curve(group, Q, ctx), 0)) {
+ if (!TEST_true(EC_POINT_get_affine_coordinates(group, Q, x, y, ctx)))
+ goto err;
+ TEST_info("Point is not on curve");
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ goto err;
+ }
+
+ TEST_note("A cyclic subgroup:");
+ k = 100;
+ do {
+ if (!TEST_int_ne(k--, 0))
+ goto err;
+
+ if (EC_POINT_is_at_infinity(group, P)) {
+ TEST_note(" point at infinity");
+ } else {
+ if (!TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y,
+ ctx)))
+ goto err;
+
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ }
+
+ if (!TEST_true(EC_POINT_copy(R, P))
+ || !TEST_true(EC_POINT_add(group, P, P, Q, ctx)))
+ goto err;
+
+ } while (!EC_POINT_is_at_infinity(group, P));
+
+ if (!TEST_true(EC_POINT_add(group, P, Q, R, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P)))
+ goto err;
+
+ len =
+ EC_POINT_point2oct(group, Q, POINT_CONVERSION_COMPRESSED, buf,
+ sizeof(buf), ctx);
+ if (!TEST_size_t_ne(len, 0)
+ || !TEST_true(EC_POINT_oct2point(group, P, buf, len, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, Q, ctx)))
+ goto err;
+ test_output_memory("Generator as octet string, compressed form:",
+ buf, len);
+
+ len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_UNCOMPRESSED,
+ buf, sizeof(buf), ctx);
+ if (!TEST_size_t_ne(len, 0)
+ || !TEST_true(EC_POINT_oct2point(group, P, buf, len, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, Q, ctx)))
+ goto err;
+ test_output_memory("Generator as octet string, uncompressed form:",
+ buf, len);
+
+ len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_HYBRID,
+ buf, sizeof(buf), ctx);
+ if (!TEST_size_t_ne(len, 0)
+ || !TEST_true(EC_POINT_oct2point(group, P, buf, len, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, Q, ctx)))
+ goto err;
+ test_output_memory("Generator as octet string, hybrid form:",
+ buf, len);
+
+ if (!TEST_true(EC_POINT_invert(group, P, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, R, ctx))
+
+ /*
+ * Curve secp160r1 (Certicom Research SEC 2 Version 1.0, section 2.4.2,
+ * 2000) -- not a NIST curve, but commonly used
+ */
+
+ || !TEST_true(BN_hex2bn(&p, "FFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"))
+ || !TEST_int_eq(1, BN_check_prime(p, ctx, NULL))
+ || !TEST_true(BN_hex2bn(&a, "FFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"))
+ || !TEST_true(BN_hex2bn(&b, "1C97BEFC"
+ "54BD7A8B65ACF89F81D4D4ADC565FA45"))
+ || !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
+ || !TEST_true(BN_hex2bn(&x, "4A96B568"
+ "8EF573284664698968C38BB913CBFC82"))
+ || !TEST_true(BN_hex2bn(&y, "23a62855"
+ "3168947d59dcc912042351377ac5fb32"))
+ || !TEST_true(BN_add(yplusone, y, BN_value_one()))
+ /*
+ * When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
+ * and therefore setting the coordinates should fail.
+ */
+ || !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
+ ctx))
+ || !TEST_true(EC_POINT_set_affine_coordinates(group, P, x, y, ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(BN_hex2bn(&z, "0100000000"
+ "000000000001F4C8F927AED3CA752257"))
+ || !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
+ goto err;
+ TEST_info("SEC2 curve secp160r1 -- Generator");
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ /* G_y value taken from the standard: */
+ if (!TEST_true(BN_hex2bn(&z, "23a62855"
+ "3168947d59dcc912042351377ac5fb32"))
+ || !TEST_BN_eq(y, z)
+ || !TEST_int_eq(EC_GROUP_get_degree(group), 160)
+ || !group_order_tests(group)
+
+ /* Curve P-192 (FIPS PUB 186-2, App. 6) */
+
+ || !TEST_true(BN_hex2bn(&p, "FFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"))
+ || !TEST_int_eq(1, BN_check_prime(p, ctx, NULL))
+ || !TEST_true(BN_hex2bn(&a, "FFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"))
+ || !TEST_true(BN_hex2bn(&b, "64210519E59C80E7"
+ "0FA7E9AB72243049FEB8DEECC146B9B1"))
+ || !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
+ || !TEST_true(BN_hex2bn(&x, "188DA80EB03090F6"
+ "7CBF20EB43A18800F4FF0AFD82FF1012"))
+ || !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 1, ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(BN_hex2bn(&z, "FFFFFFFFFFFFFFFF"
+ "FFFFFFFF99DEF836146BC9B1B4D22831"))
+ || !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
+ goto err;
+
+ TEST_info("NIST curve P-192 -- Generator");
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ /* G_y value taken from the standard: */
+ if (!TEST_true(BN_hex2bn(&z, "07192B95FFC8DA78"
+ "631011ED6B24CDD573F977A11E794811"))
+ || !TEST_BN_eq(y, z)
+ || !TEST_true(BN_add(yplusone, y, BN_value_one()))
+ /*
+ * When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
+ * and therefore setting the coordinates should fail.
+ */
+ || !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
+ ctx))
+ || !TEST_int_eq(EC_GROUP_get_degree(group), 192)
+ || !group_order_tests(group)
+
+ /* Curve P-224 (FIPS PUB 186-2, App. 6) */
+
+ || !TEST_true(BN_hex2bn(&p, "FFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFF000000000000000000000001"))
+ || !TEST_int_eq(1, BN_check_prime(p, ctx, NULL))
+ || !TEST_true(BN_hex2bn(&a, "FFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"))
+ || !TEST_true(BN_hex2bn(&b, "B4050A850C04B3ABF5413256"
+ "5044B0B7D7BFD8BA270B39432355FFB4"))
+ || !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
+ || !TEST_true(BN_hex2bn(&x, "B70E0CBD6BB4BF7F321390B9"
+ "4A03C1D356C21122343280D6115C1D21"))
+ || !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 0, ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(BN_hex2bn(&z, "FFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFF16A2E0B8F03E13DD29455C5C2A3D"))
+ || !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
+ goto err;
+
+ TEST_info("NIST curve P-224 -- Generator");
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ /* G_y value taken from the standard: */
+ if (!TEST_true(BN_hex2bn(&z, "BD376388B5F723FB4C22DFE6"
+ "CD4375A05A07476444D5819985007E34"))
+ || !TEST_BN_eq(y, z)
+ || !TEST_true(BN_add(yplusone, y, BN_value_one()))
+ /*
+ * When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
+ * and therefore setting the coordinates should fail.
+ */
+ || !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
+ ctx))
+ || !TEST_int_eq(EC_GROUP_get_degree(group), 224)
+ || !group_order_tests(group)
+
+ /* Curve P-256 (FIPS PUB 186-2, App. 6) */
+
+ || !TEST_true(BN_hex2bn(&p, "FFFFFFFF000000010000000000000000"
+ "00000000FFFFFFFFFFFFFFFFFFFFFFFF"))
+ || !TEST_int_eq(1, BN_check_prime(p, ctx, NULL))
+ || !TEST_true(BN_hex2bn(&a, "FFFFFFFF000000010000000000000000"
+ "00000000FFFFFFFFFFFFFFFFFFFFFFFC"))
+ || !TEST_true(BN_hex2bn(&b, "5AC635D8AA3A93E7B3EBBD55769886BC"
+ "651D06B0CC53B0F63BCE3C3E27D2604B"))
+ || !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
+
+ || !TEST_true(BN_hex2bn(&x, "6B17D1F2E12C4247F8BCE6E563A440F2"
+ "77037D812DEB33A0F4A13945D898C296"))
+ || !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 1, ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(BN_hex2bn(&z, "FFFFFFFF00000000FFFFFFFFFFFFFFFF"
+ "BCE6FAADA7179E84F3B9CAC2FC632551"))
+ || !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
+ goto err;
+
+ TEST_info("NIST curve P-256 -- Generator");
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ /* G_y value taken from the standard: */
+ if (!TEST_true(BN_hex2bn(&z, "4FE342E2FE1A7F9B8EE7EB4A7C0F9E16"
+ "2BCE33576B315ECECBB6406837BF51F5"))
+ || !TEST_BN_eq(y, z)
+ || !TEST_true(BN_add(yplusone, y, BN_value_one()))
+ /*
+ * When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
+ * and therefore setting the coordinates should fail.
+ */
+ || !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
+ ctx))
+ || !TEST_int_eq(EC_GROUP_get_degree(group), 256)
+ || !group_order_tests(group)
+
+ /* Curve P-384 (FIPS PUB 186-2, App. 6) */
+
+ || !TEST_true(BN_hex2bn(&p, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"
+ "FFFFFFFF0000000000000000FFFFFFFF"))
+ || !TEST_int_eq(1, BN_check_prime(p, ctx, NULL))
+ || !TEST_true(BN_hex2bn(&a, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"
+ "FFFFFFFF0000000000000000FFFFFFFC"))
+ || !TEST_true(BN_hex2bn(&b, "B3312FA7E23EE7E4988E056BE3F82D19"
+ "181D9C6EFE8141120314088F5013875A"
+ "C656398D8A2ED19D2A85C8EDD3EC2AEF"))
+ || !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
+
+ || !TEST_true(BN_hex2bn(&x, "AA87CA22BE8B05378EB1C71EF320AD74"
+ "6E1D3B628BA79B9859F741E082542A38"
+ "5502F25DBF55296C3A545E3872760AB7"))
+ || !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 1, ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(BN_hex2bn(&z, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFC7634D81F4372DDF"
+ "581A0DB248B0A77AECEC196ACCC52973"))
+ || !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
+ goto err;
+
+ TEST_info("NIST curve P-384 -- Generator");
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ /* G_y value taken from the standard: */
+ if (!TEST_true(BN_hex2bn(&z, "3617DE4A96262C6F5D9E98BF9292DC29"
+ "F8F41DBD289A147CE9DA3113B5F0B8C0"
+ "0A60B1CE1D7E819D7A431D7C90EA0E5F"))
+ || !TEST_BN_eq(y, z)
+ || !TEST_true(BN_add(yplusone, y, BN_value_one()))
+ /*
+ * When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
+ * and therefore setting the coordinates should fail.
+ */
+ || !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
+ ctx))
+ || !TEST_int_eq(EC_GROUP_get_degree(group), 384)
+ || !group_order_tests(group)
+
+ /* Curve P-521 (FIPS PUB 186-2, App. 6) */
+ || !TEST_true(BN_hex2bn(&p, "1FF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"))
+ || !TEST_int_eq(1, BN_check_prime(p, ctx, NULL))
+ || !TEST_true(BN_hex2bn(&a, "1FF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC"))
+ || !TEST_true(BN_hex2bn(&b, "051"
+ "953EB9618E1C9A1F929A21A0B68540EE"
+ "A2DA725B99B315F3B8B489918EF109E1"
+ "56193951EC7E937B1652C0BD3BB1BF07"
+ "3573DF883D2C34F1EF451FD46B503F00"))
+ || !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
+ || !TEST_true(BN_hex2bn(&x, "C6"
+ "858E06B70404E9CD9E3ECB662395B442"
+ "9C648139053FB521F828AF606B4D3DBA"
+ "A14B5E77EFE75928FE1DC127A2FFA8DE"
+ "3348B3C1856A429BF97E7E31C2E5BD66"))
+ || !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 0, ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(BN_hex2bn(&z, "1FF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA"
+ "51868783BF2F966B7FCC0148F709A5D0"
+ "3BB5C9B8899C47AEBB6FB71E91386409"))
+ || !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
+ goto err;
+
+ TEST_info("NIST curve P-521 -- Generator");
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ /* G_y value taken from the standard: */
+ if (!TEST_true(BN_hex2bn(&z, "118"
+ "39296A789A3BC0045C8A5FB42C7D1BD9"
+ "98F54449579B446817AFBD17273E662C"
+ "97EE72995EF42640C550B9013FAD0761"
+ "353C7086A272C24088BE94769FD16650"))
+ || !TEST_BN_eq(y, z)
+ || !TEST_true(BN_add(yplusone, y, BN_value_one()))
+ /*
+ * When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
+ * and therefore setting the coordinates should fail.
+ */
+ || !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
+ ctx))
+ || !TEST_int_eq(EC_GROUP_get_degree(group), 521)
+ || !group_order_tests(group)
+
+ /* more tests using the last curve */
+
+ /* Restore the point that got mangled in the (x, y + 1) test. */
+ || !TEST_true(EC_POINT_set_affine_coordinates(group, P, x, y, ctx))
+ || !TEST_true(EC_POINT_copy(Q, P))
+ || !TEST_false(EC_POINT_is_at_infinity(group, Q))
+ || !TEST_true(EC_POINT_dbl(group, P, P, ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(EC_POINT_invert(group, Q, ctx)) /* P = -2Q */
+ || !TEST_true(EC_POINT_add(group, R, P, Q, ctx))
+ || !TEST_true(EC_POINT_add(group, R, R, Q, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, R)) /* R = P + 2Q */
+ || !TEST_false(EC_POINT_is_at_infinity(group, Q)))
+ goto err;
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ TEST_note("combined multiplication ...");
+ points[0] = Q;
+ points[1] = Q;
+ points[2] = Q;
+ points[3] = Q;
+
+ if (!TEST_true(EC_GROUP_get_order(group, z, ctx))
+ || !TEST_true(BN_add(y, z, BN_value_one()))
+ || !TEST_BN_even(y)
+ || !TEST_true(BN_rshift1(y, y)))
+ goto err;
+
+ scalars[0] = y; /* (group order + 1)/2, so y*Q + y*Q = Q */
+ scalars[1] = y;
+
+ /* z is still the group order */
+ if (!TEST_true(EC_POINTs_mul(group, P, NULL, 2, points, scalars, ctx))
+ || !TEST_true(EC_POINTs_mul(group, R, z, 2, points, scalars, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, R, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, R, Q, ctx))
+ || !TEST_true(BN_rand(y, BN_num_bits(y), 0, 0))
+ || !TEST_true(BN_add(z, z, y)))
+ goto err;
+ BN_set_negative(z, 1);
+ scalars[0] = y;
+ scalars[1] = z; /* z = -(order + y) */
+
+ if (!TEST_true(EC_POINTs_mul(group, P, NULL, 2, points, scalars, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P))
+ || !TEST_true(BN_rand(x, BN_num_bits(y) - 1, 0, 0))
+ || !TEST_true(BN_add(z, x, y)))
+ goto err;
+ BN_set_negative(z, 1);
+ scalars[0] = x;
+ scalars[1] = y;
+ scalars[2] = z; /* z = -(x+y) */
+
+ if (!TEST_ptr(scalar3 = BN_new()))
+ goto err;
+ BN_zero(scalar3);
+ scalars[3] = scalar3;
+
+ if (!TEST_true(EC_POINTs_mul(group, P, NULL, 4, points, scalars, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P)))
+ goto err;
+#endif
+ TEST_note(" ok\n");
+ r = 1;
+err:
+ BN_CTX_free(ctx);
+ BN_free(p);
+ BN_free(a);
+ BN_free(b);
+ EC_GROUP_free(group);
+ EC_POINT_free(P);
+ EC_POINT_free(Q);
+ EC_POINT_free(R);
+ BN_free(x);
+ BN_free(y);
+ BN_free(z);
+ BN_free(yplusone);
+ BN_free(scalar3);
+ return r;
+}
+
+#ifndef OPENSSL_NO_EC2M
+
+static struct c2_curve_test {
+ const char *name;
+ const char *p;
+ const char *a;
+ const char *b;
+ const char *x;
+ const char *y;
+ int ybit;
+ const char *order;
+ const char *cof;
+ int degree;
+} char2_curve_tests[] = {
+ /* Curve K-163 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve K-163",
+ "0800000000000000000000000000000000000000C9",
+ "1",
+ "1",
+ "02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8",
+ "0289070FB05D38FF58321F2E800536D538CCDAA3D9",
+ 1, "04000000000000000000020108A2E0CC0D99F8A5EF", "2", 163
+ },
+ /* Curve B-163 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve B-163",
+ "0800000000000000000000000000000000000000C9",
+ "1",
+ "020A601907B8C953CA1481EB10512F78744A3205FD",
+ "03F0EBA16286A2D57EA0991168D4994637E8343E36",
+ "00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1",
+ 1, "040000000000000000000292FE77E70C12A4234C33", "2", 163
+ },
+ /* Curve K-233 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve K-233",
+ "020000000000000000000000000000000000000004000000000000000001",
+ "0",
+ "1",
+ "017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126",
+ "01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3",
+ 0,
+ "008000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF",
+ "4", 233
+ },
+ /* Curve B-233 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve B-233",
+ "020000000000000000000000000000000000000004000000000000000001",
+ "000000000000000000000000000000000000000000000000000000000001",
+ "0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD",
+ "00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B",
+ "01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052",
+ 1,
+ "01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7",
+ "2", 233
+ },
+ /* Curve K-283 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve K-283",
+ "08000000"
+ "00000000000000000000000000000000000000000000000000000000000010A1",
+ "0",
+ "1",
+ "0503213F"
+ "78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836",
+ "01CCDA38"
+ "0F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259",
+ 0,
+ "01FFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61",
+ "4", 283
+ },
+ /* Curve B-283 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve B-283",
+ "08000000"
+ "00000000000000000000000000000000000000000000000000000000000010A1",
+ "00000000"
+ "0000000000000000000000000000000000000000000000000000000000000001",
+ "027B680A"
+ "C8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5",
+ "05F93925"
+ "8DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053",
+ "03676854"
+ "FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4",
+ 1,
+ "03FFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307",
+ "2", 283
+ },
+ /* Curve K-409 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve K-409",
+ "0200000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000008000000000000000000001",
+ "0",
+ "1",
+ "0060F05F658F49C1AD3AB1890F7184210EFD0987"
+ "E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746",
+ "01E369050B7C4E42ACBA1DACBF04299C3460782F"
+ "918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B",
+ 1,
+ "007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF",
+ "4", 409
+ },
+ /* Curve B-409 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve B-409",
+ "0200000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000008000000000000000000001",
+ "0000000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000001",
+ "0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422E"
+ "F1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F",
+ "015D4860D088DDB3496B0C6064756260441CDE4A"
+ "F1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7",
+ "0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5"
+ "A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706",
+ 1,
+ "0100000000000000000000000000000000000000"
+ "00000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173",
+ "2", 409
+ },
+ /* Curve K-571 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve K-571",
+ "800000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000425",
+ "0",
+ "1",
+ "026EB7A859923FBC"
+ "82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E6"
+ "47DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972",
+ "0349DC807F4FBF37"
+ "4F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA7"
+ "4FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3",
+ 0,
+ "0200000000000000"
+ "00000000000000000000000000000000000000000000000000000000131850E1"
+ "F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001",
+ "4", 571
+ },
+ /* Curve B-571 (FIPS PUB 186-2, App. 6) */
+ {
+ "NIST curve B-571",
+ "800000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000425",
+ "0000000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000000"
+ "0000000000000000000000000000000000000000000000000000000000000001",
+ "02F40E7E2221F295"
+ "DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA5933"
+ "2BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A",
+ "0303001D34B85629"
+ "6C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293"
+ "CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19",
+ "037BF27342DA639B"
+ "6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A57"
+ "6291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B",
+ 1,
+ "03FFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18"
+ "FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47",
+ "2", 571
+ }
+};
+
+static int char2_curve_test(int n)
+{
+ int r = 0;
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL, *a = NULL, *b = NULL;
+ BIGNUM *x = NULL, *y = NULL, *z = NULL, *cof = NULL, *yplusone = NULL;
+ EC_GROUP *group = NULL;
+ EC_POINT *P = NULL, *Q = NULL, *R = NULL;
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ const EC_POINT *points[3];
+ const BIGNUM *scalars[3];
+# endif
+ struct c2_curve_test *const test = char2_curve_tests + n;
+
+ if (!TEST_ptr(ctx = BN_CTX_new())
+ || !TEST_ptr(p = BN_new())
+ || !TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(x = BN_new())
+ || !TEST_ptr(y = BN_new())
+ || !TEST_ptr(z = BN_new())
+ || !TEST_ptr(yplusone = BN_new())
+ || !TEST_true(BN_hex2bn(&p, test->p))
+ || !TEST_true(BN_hex2bn(&a, test->a))
+ || !TEST_true(BN_hex2bn(&b, test->b))
+ || !TEST_true(group = EC_GROUP_new_curve_GF2m(p, a, b, ctx))
+ || !TEST_ptr(P = EC_POINT_new(group))
+ || !TEST_ptr(Q = EC_POINT_new(group))
+ || !TEST_ptr(R = EC_POINT_new(group))
+ || !TEST_true(BN_hex2bn(&x, test->x))
+ || !TEST_true(BN_hex2bn(&y, test->y))
+ || !TEST_true(BN_add(yplusone, y, BN_value_one())))
+ goto err;
+
+/* Change test based on whether binary point compression is enabled or not. */
+# ifdef OPENSSL_EC_BIN_PT_COMP
+ /*
+ * When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
+ * and therefore setting the coordinates should fail.
+ */
+ if (!TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone, ctx))
+ || !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x,
+ test->y_bit,
+ ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(BN_hex2bn(&z, test->order))
+ || !TEST_true(BN_hex2bn(&cof, test->cof))
+ || !TEST_true(EC_GROUP_set_generator(group, P, z, cof))
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
+ goto err;
+ TEST_info("%s -- Generator", test->name);
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ /* G_y value taken from the standard: */
+ if (!TEST_true(BN_hex2bn(&z, test->y))
+ || !TEST_BN_eq(y, z))
+ goto err;
+# else
+ /*
+ * When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
+ * and therefore setting the coordinates should fail.
+ */
+ if (!TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone, ctx))
+ || !TEST_true(EC_POINT_set_affine_coordinates(group, P, x, y, ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(BN_hex2bn(&z, test->order))
+ || !TEST_true(BN_hex2bn(&cof, test->cof))
+ || !TEST_true(EC_GROUP_set_generator(group, P, z, cof)))
+ goto err;
+ TEST_info("%s -- Generator:", test->name);
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+# endif
+
+ if (!TEST_int_eq(EC_GROUP_get_degree(group), test->degree)
+ || !group_order_tests(group))
+ goto err;
+
+ /* more tests using the last curve */
+ if (n == OSSL_NELEM(char2_curve_tests) - 1) {
+ if (!TEST_true(EC_POINT_set_affine_coordinates(group, P, x, y, ctx))
+ || !TEST_true(EC_POINT_copy(Q, P))
+ || !TEST_false(EC_POINT_is_at_infinity(group, Q))
+ || !TEST_true(EC_POINT_dbl(group, P, P, ctx))
+ || !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
+ || !TEST_true(EC_POINT_invert(group, Q, ctx)) /* P = -2Q */
+ || !TEST_true(EC_POINT_add(group, R, P, Q, ctx))
+ || !TEST_true(EC_POINT_add(group, R, R, Q, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, R)) /* R = P + 2Q */
+ || !TEST_false(EC_POINT_is_at_infinity(group, Q)))
+ goto err;
+
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ TEST_note("combined multiplication ...");
+ points[0] = Q;
+ points[1] = Q;
+ points[2] = Q;
+
+ if (!TEST_true(BN_add(y, z, BN_value_one()))
+ || !TEST_BN_even(y)
+ || !TEST_true(BN_rshift1(y, y)))
+ goto err;
+ scalars[0] = y; /* (group order + 1)/2, so y*Q + y*Q = Q */
+ scalars[1] = y;
+
+ /* z is still the group order */
+ if (!TEST_true(EC_POINTs_mul(group, P, NULL, 2, points, scalars, ctx))
+ || !TEST_true(EC_POINTs_mul(group, R, z, 2, points, scalars, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, R, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, R, Q, ctx)))
+ goto err;
+
+ if (!TEST_true(BN_rand(y, BN_num_bits(y), 0, 0))
+ || !TEST_true(BN_add(z, z, y)))
+ goto err;
+ BN_set_negative(z, 1);
+ scalars[0] = y;
+ scalars[1] = z; /* z = -(order + y) */
+
+ if (!TEST_true(EC_POINTs_mul(group, P, NULL, 2, points, scalars, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P)))
+ goto err;
+
+ if (!TEST_true(BN_rand(x, BN_num_bits(y) - 1, 0, 0))
+ || !TEST_true(BN_add(z, x, y)))
+ goto err;
+ BN_set_negative(z, 1);
+ scalars[0] = x;
+ scalars[1] = y;
+ scalars[2] = z; /* z = -(x+y) */
+
+ if (!TEST_true(EC_POINTs_mul(group, P, NULL, 3, points, scalars, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P)))
+ goto err;
+# endif
+ }
+
+ r = 1;
+err:
+ BN_CTX_free(ctx);
+ BN_free(p);
+ BN_free(a);
+ BN_free(b);
+ BN_free(x);
+ BN_free(y);
+ BN_free(z);
+ BN_free(yplusone);
+ BN_free(cof);
+ EC_POINT_free(P);
+ EC_POINT_free(Q);
+ EC_POINT_free(R);
+ EC_GROUP_free(group);
+ return r;
+}
+
+static int char2_field_tests(void)
+{
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL, *a = NULL, *b = NULL;
+ EC_GROUP *group = NULL;
+ EC_POINT *P = NULL, *Q = NULL, *R = NULL;
+ BIGNUM *x = NULL, *y = NULL, *z = NULL, *cof = NULL, *yplusone = NULL;
+ unsigned char buf[100];
+ size_t len;
+ int k, r = 0;
+
+ if (!TEST_ptr(ctx = BN_CTX_new())
+ || !TEST_ptr(p = BN_new())
+ || !TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_true(BN_hex2bn(&p, "13"))
+ || !TEST_true(BN_hex2bn(&a, "3"))
+ || !TEST_true(BN_hex2bn(&b, "1")))
+ goto err;
+
+ if (!TEST_ptr(group = EC_GROUP_new_curve_GF2m(p, a, b, ctx))
+ || !TEST_true(EC_GROUP_get_curve(group, p, a, b, ctx)))
+ goto err;
+
+ TEST_info("Curve defined by Weierstrass equation");
+ TEST_note(" y^2 + x*y = x^3 + a*x^2 + b (mod p)");
+ test_output_bignum("a", a);
+ test_output_bignum("b", b);
+ test_output_bignum("p", p);
+
+ if (!TEST_ptr(P = EC_POINT_new(group))
+ || !TEST_ptr(Q = EC_POINT_new(group))
+ || !TEST_ptr(R = EC_POINT_new(group))
+ || !TEST_true(EC_POINT_set_to_infinity(group, P))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P)))
+ goto err;
+
+ buf[0] = 0;
+ if (!TEST_true(EC_POINT_oct2point(group, Q, buf, 1, ctx))
+ || !TEST_true(EC_POINT_add(group, P, P, Q, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P))
+ || !TEST_ptr(x = BN_new())
+ || !TEST_ptr(y = BN_new())
+ || !TEST_ptr(z = BN_new())
+ || !TEST_ptr(cof = BN_new())
+ || !TEST_ptr(yplusone = BN_new())
+ || !TEST_true(BN_hex2bn(&x, "6"))
+/* Change test based on whether binary point compression is enabled or not. */
+# ifdef OPENSSL_EC_BIN_PT_COMP
+ || !TEST_true(EC_POINT_set_compressed_coordinates(group, Q, x, 1, ctx))
+# else
+ || !TEST_true(BN_hex2bn(&y, "8"))
+ || !TEST_true(EC_POINT_set_affine_coordinates(group, Q, x, y, ctx))
+# endif
+ )
+ goto err;
+ if (!TEST_int_gt(EC_POINT_is_on_curve(group, Q, ctx), 0)) {
+/* Change test based on whether binary point compression is enabled or not. */
+# ifdef OPENSSL_EC_BIN_PT_COMP
+ if (!TEST_true(EC_POINT_get_affine_coordinates(group, Q, x, y, ctx)))
+ goto err;
+# endif
+ TEST_info("Point is not on curve");
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ goto err;
+ }
+
+ TEST_note("A cyclic subgroup:");
+ k = 100;
+ do {
+ if (!TEST_int_ne(k--, 0))
+ goto err;
+
+ if (EC_POINT_is_at_infinity(group, P))
+ TEST_note(" point at infinity");
+ else {
+ if (!TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y,
+ ctx)))
+ goto err;
+
+ test_output_bignum("x", x);
+ test_output_bignum("y", y);
+ }
+
+ if (!TEST_true(EC_POINT_copy(R, P))
+ || !TEST_true(EC_POINT_add(group, P, P, Q, ctx)))
+ goto err;
+ }
+ while (!EC_POINT_is_at_infinity(group, P));
+
+ if (!TEST_true(EC_POINT_add(group, P, Q, R, ctx))
+ || !TEST_true(EC_POINT_is_at_infinity(group, P)))
+ goto err;
+
+/* Change test based on whether binary point compression is enabled or not. */
+# ifdef OPENSSL_EC_BIN_PT_COMP
+ len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_COMPRESSED,
+ buf, sizeof(buf), ctx);
+ if (!TEST_size_t_ne(len, 0)
+ || !TEST_true(EC_POINT_oct2point(group, P, buf, len, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, Q, ctx)))
+ goto err;
+ test_output_memory("Generator as octet string, compressed form:",
+ buf, len);
+# endif
+
+ len = EC_POINT_point2oct(group, Q, POINT_CONVERSION_UNCOMPRESSED,
+ buf, sizeof(buf), ctx);
+ if (!TEST_size_t_ne(len, 0)
+ || !TEST_true(EC_POINT_oct2point(group, P, buf, len, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, Q, ctx)))
+ goto err;
+ test_output_memory("Generator as octet string, uncompressed form:",
+ buf, len);
+
+/* Change test based on whether binary point compression is enabled or not. */
+# ifdef OPENSSL_EC_BIN_PT_COMP
+ len =
+ EC_POINT_point2oct(group, Q, POINT_CONVERSION_HYBRID, buf, sizeof(buf),
+ ctx);
+ if (!TEST_size_t_ne(len, 0)
+ || !TEST_true(EC_POINT_oct2point(group, P, buf, len, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, Q, ctx)))
+ goto err;
+ test_output_memory("Generator as octet string, hybrid form:",
+ buf, len);
+# endif
+
+ if (!TEST_true(EC_POINT_invert(group, P, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, P, R, ctx)))
+ goto err;
+
+ TEST_note("\n");
+
+ r = 1;
+err:
+ BN_CTX_free(ctx);
+ BN_free(p);
+ BN_free(a);
+ BN_free(b);
+ EC_GROUP_free(group);
+ EC_POINT_free(P);
+ EC_POINT_free(Q);
+ EC_POINT_free(R);
+ BN_free(x);
+ BN_free(y);
+ BN_free(z);
+ BN_free(cof);
+ BN_free(yplusone);
+ return r;
+}
+
+static int hybrid_point_encoding_test(void)
+{
+ BIGNUM *x = NULL, *y = NULL;
+ EC_GROUP *group = NULL;
+ EC_POINT *point = NULL;
+ unsigned char *buf = NULL;
+ size_t len;
+ int r = 0;
+
+ if (!TEST_true(BN_dec2bn(&x, "0"))
+ || !TEST_true(BN_dec2bn(&y, "1"))
+ || !TEST_ptr(group = EC_GROUP_new_by_curve_name(NID_sect571k1))
+ || !TEST_ptr(point = EC_POINT_new(group))
+ || !TEST_true(EC_POINT_set_affine_coordinates(group, point, x, y, NULL))
+ || !TEST_size_t_ne(0, (len = EC_POINT_point2oct(group,
+ point,
+ POINT_CONVERSION_HYBRID,
+ NULL,
+ 0,
+ NULL)))
+ || !TEST_ptr(buf = OPENSSL_malloc(len))
+ || !TEST_size_t_eq(len, EC_POINT_point2oct(group,
+ point,
+ POINT_CONVERSION_HYBRID,
+ buf,
+ len,
+ NULL)))
+ goto err;
+
+ r = 1;
+
+ /* buf contains a valid hybrid point, check that we can decode it. */
+ if (!TEST_true(EC_POINT_oct2point(group, point, buf, len, NULL)))
+ r = 0;
+
+ /* Flip the y_bit and verify that the invalid encoding is rejected. */
+ buf[0] ^= 1;
+ if (!TEST_false(EC_POINT_oct2point(group, point, buf, len, NULL)))
+ r = 0;
+
+err:
+ BN_free(x);
+ BN_free(y);
+ EC_GROUP_free(group);
+ EC_POINT_free(point);
+ OPENSSL_free(buf);
+ return r;
+}
+#endif
+
+static int internal_curve_test(int n)
+{
+ EC_GROUP *group = NULL;
+ int nid = curves[n].nid;
+
+ if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(nid))) {
+ TEST_info("EC_GROUP_new_curve_name() failed with curve %s\n",
+ OBJ_nid2sn(nid));
+ return 0;
+ }
+ if (!TEST_true(EC_GROUP_check(group, NULL))) {
+ TEST_info("EC_GROUP_check() failed with curve %s\n", OBJ_nid2sn(nid));
+ EC_GROUP_free(group);
+ return 0;
+ }
+ EC_GROUP_free(group);
+ return 1;
+}
+
+static int internal_curve_test_method(int n)
+{
+ int r, nid = curves[n].nid;
+ EC_GROUP *group;
+
+ if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(nid))) {
+ TEST_info("Curve %s failed\n", OBJ_nid2sn(nid));
+ return 0;
+ }
+ r = group_order_tests(group);
+ EC_GROUP_free(group);
+ return r;
+}
+
+static int group_field_test(void)
+{
+ int r = 1;
+ BIGNUM *secp521r1_field = NULL;
+ BIGNUM *sect163r2_field = NULL;
+ EC_GROUP *secp521r1_group = NULL;
+ EC_GROUP *sect163r2_group = NULL;
+
+ BN_hex2bn(&secp521r1_field,
+ "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ "FFFF");
+
+
+ BN_hex2bn(&sect163r2_field,
+ "08000000000000000000000000000000"
+ "00000000C9");
+
+ secp521r1_group = EC_GROUP_new_by_curve_name(NID_secp521r1);
+ if (BN_cmp(secp521r1_field, EC_GROUP_get0_field(secp521r1_group)))
+ r = 0;
+
+ # ifndef OPENSSL_NO_EC2M
+ sect163r2_group = EC_GROUP_new_by_curve_name(NID_sect163r2);
+ if (BN_cmp(sect163r2_field, EC_GROUP_get0_field(sect163r2_group)))
+ r = 0;
+ # endif
+
+ EC_GROUP_free(secp521r1_group);
+ EC_GROUP_free(sect163r2_group);
+ BN_free(secp521r1_field);
+ BN_free(sect163r2_field);
+ return r;
+}
+
+/*
+ * nistp_test_params contains magic numbers for testing
+ * several NIST curves with characteristic > 3.
+ */
+struct nistp_test_params {
+ const int nid;
+ int degree;
+ /*
+ * Qx, Qy and D are taken from
+ * http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/ECDSA_Prime.pdf
+ * Otherwise, values are standard curve parameters from FIPS 180-3
+ */
+ const char *p, *a, *b, *Qx, *Qy, *Gx, *Gy, *order, *d;
+};
+
+static const struct nistp_test_params nistp_tests_params[] = {
+ {
+ /* P-224 */
+ NID_secp224r1,
+ 224,
+ /* p */
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001",
+ /* a */
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE",
+ /* b */
+ "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4",
+ /* Qx */
+ "E84FB0B8E7000CB657D7973CF6B42ED78B301674276DF744AF130B3E",
+ /* Qy */
+ "4376675C6FC5612C21A0FF2D2A89D2987DF7A2BC52183B5982298555",
+ /* Gx */
+ "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21",
+ /* Gy */
+ "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34",
+ /* order */
+ "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D",
+ /* d */
+ "3F0C488E987C80BE0FEE521F8D90BE6034EC69AE11CA72AA777481E8",
+ },
+ {
+ /* P-256 */
+ NID_X9_62_prime256v1,
+ 256,
+ /* p */
+ "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
+ /* a */
+ "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
+ /* b */
+ "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
+ /* Qx */
+ "b7e08afdfe94bad3f1dc8c734798ba1c62b3a0ad1e9ea2a38201cd0889bc7a19",
+ /* Qy */
+ "3603f747959dbf7a4bb226e41928729063adc7ae43529e61b563bbc606cc5e09",
+ /* Gx */
+ "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
+ /* Gy */
+ "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5",
+ /* order */
+ "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
+ /* d */
+ "c477f9f65c22cce20657faa5b2d1d8122336f851a508a1ed04e479c34985bf96",
+ },
+ {
+ /* P-521 */
+ NID_secp521r1,
+ 521,
+ /* p */
+ "1ff"
+ "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+ /* a */
+ "1ff"
+ "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc",
+ /* b */
+ "051"
+ "953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e1"
+ "56193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00",
+ /* Qx */
+ "0098"
+ "e91eef9a68452822309c52fab453f5f117c1da8ed796b255e9ab8f6410cca16e"
+ "59df403a6bdc6ca467a37056b1e54b3005d8ac030decfeb68df18b171885d5c4",
+ /* Qy */
+ "0164"
+ "350c321aecfc1cca1ba4364c9b15656150b4b78d6a48d7d28e7f31985ef17be8"
+ "554376b72900712c4b83ad668327231526e313f5f092999a4632fd50d946bc2e",
+ /* Gx */
+ "c6"
+ "858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dba"
+ "a14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66",
+ /* Gy */
+ "118"
+ "39296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c"
+ "97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650",
+ /* order */
+ "1ff"
+ "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"
+ "51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409",
+ /* d */
+ "0100"
+ "085f47b8e1b8b11b7eb33028c0b2888e304bfc98501955b45bba1478dc184eee"
+ "df09b86a5f7c21994406072787205e69a63709fe35aa93ba333514b24f961722",
+ },
+};
+
+static int nistp_single_test(int idx)
+{
+ const struct nistp_test_params *test = nistp_tests_params + idx;
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL;
+ BIGNUM *n = NULL, *m = NULL, *order = NULL, *yplusone = NULL;
+ EC_GROUP *NISTP = NULL;
+ EC_POINT *G = NULL, *P = NULL, *Q = NULL, *Q_CHECK = NULL;
+ int r = 0;
+
+ TEST_note("NIST curve P-%d (optimised implementation):",
+ test->degree);
+ if (!TEST_ptr(ctx = BN_CTX_new())
+ || !TEST_ptr(p = BN_new())
+ || !TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(x = BN_new())
+ || !TEST_ptr(y = BN_new())
+ || !TEST_ptr(m = BN_new())
+ || !TEST_ptr(n = BN_new())
+ || !TEST_ptr(order = BN_new())
+ || !TEST_ptr(yplusone = BN_new())
+
+ || !TEST_ptr(NISTP = EC_GROUP_new_by_curve_name(test->nid))
+ || !TEST_true(BN_hex2bn(&p, test->p))
+ || !TEST_int_eq(1, BN_check_prime(p, ctx, NULL))
+ || !TEST_true(BN_hex2bn(&a, test->a))
+ || !TEST_true(BN_hex2bn(&b, test->b))
+ || !TEST_true(EC_GROUP_set_curve(NISTP, p, a, b, ctx))
+ || !TEST_ptr(G = EC_POINT_new(NISTP))
+ || !TEST_ptr(P = EC_POINT_new(NISTP))
+ || !TEST_ptr(Q = EC_POINT_new(NISTP))
+ || !TEST_ptr(Q_CHECK = EC_POINT_new(NISTP))
+ || !TEST_true(BN_hex2bn(&x, test->Qx))
+ || !TEST_true(BN_hex2bn(&y, test->Qy))
+ || !TEST_true(BN_add(yplusone, y, BN_value_one()))
+ /*
+ * When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
+ * and therefore setting the coordinates should fail.
+ */
+ || !TEST_false(EC_POINT_set_affine_coordinates(NISTP, Q_CHECK, x,
+ yplusone, ctx))
+ || !TEST_true(EC_POINT_set_affine_coordinates(NISTP, Q_CHECK, x, y,
+ ctx))
+ || !TEST_true(BN_hex2bn(&x, test->Gx))
+ || !TEST_true(BN_hex2bn(&y, test->Gy))
+ || !TEST_true(EC_POINT_set_affine_coordinates(NISTP, G, x, y, ctx))
+ || !TEST_true(BN_hex2bn(&order, test->order))
+ || !TEST_true(EC_GROUP_set_generator(NISTP, G, order, BN_value_one()))
+ || !TEST_int_eq(EC_GROUP_get_degree(NISTP), test->degree))
+ goto err;
+
+ TEST_note("NIST test vectors ... ");
+ if (!TEST_true(BN_hex2bn(&n, test->d)))
+ goto err;
+ /* fixed point multiplication */
+ EC_POINT_mul(NISTP, Q, n, NULL, NULL, ctx);
+ if (!TEST_int_eq(0, EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)))
+ goto err;
+ /* random point multiplication */
+ EC_POINT_mul(NISTP, Q, NULL, G, n, ctx);
+ if (!TEST_int_eq(0, EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx))
+
+ /* set generator to P = 2*G, where G is the standard generator */
+ || !TEST_true(EC_POINT_dbl(NISTP, P, G, ctx))
+ || !TEST_true(EC_GROUP_set_generator(NISTP, P, order, BN_value_one()))
+ /* set the scalar to m=n/2, where n is the NIST test scalar */
+ || !TEST_true(BN_rshift(m, n, 1)))
+ goto err;
+
+ /* test the non-standard generator */
+ /* fixed point multiplication */
+ EC_POINT_mul(NISTP, Q, m, NULL, NULL, ctx);
+ if (!TEST_int_eq(0, EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)))
+ goto err;
+ /* random point multiplication */
+ EC_POINT_mul(NISTP, Q, NULL, P, m, ctx);
+ if (!TEST_int_eq(0, EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx))
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ /* We have not performed precomp so this should be false */
+ || !TEST_false(EC_GROUP_have_precompute_mult(NISTP))
+ /* now repeat all tests with precomputation */
+ || !TEST_true(EC_GROUP_precompute_mult(NISTP, ctx))
+#endif
+ )
+ goto err;
+
+ /* fixed point multiplication */
+ EC_POINT_mul(NISTP, Q, m, NULL, NULL, ctx);
+ if (!TEST_int_eq(0, EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)))
+ goto err;
+ /* random point multiplication */
+ EC_POINT_mul(NISTP, Q, NULL, P, m, ctx);
+ if (!TEST_int_eq(0, EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx))
+
+ /* reset generator */
+ || !TEST_true(EC_GROUP_set_generator(NISTP, G, order, BN_value_one())))
+ goto err;
+ /* fixed point multiplication */
+ EC_POINT_mul(NISTP, Q, n, NULL, NULL, ctx);
+ if (!TEST_int_eq(0, EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)))
+ goto err;
+ /* random point multiplication */
+ EC_POINT_mul(NISTP, Q, NULL, G, n, ctx);
+ if (!TEST_int_eq(0, EC_POINT_cmp(NISTP, Q, Q_CHECK, ctx)))
+ goto err;
+
+ /* regression test for felem_neg bug */
+ if (!TEST_true(BN_set_word(m, 32))
+ || !TEST_true(BN_set_word(n, 31))
+ || !TEST_true(EC_POINT_copy(P, G))
+ || !TEST_true(EC_POINT_invert(NISTP, P, ctx))
+ || !TEST_true(EC_POINT_mul(NISTP, Q, m, P, n, ctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(NISTP, Q, G, ctx)))
+ goto err;
+
+ r = 1;
+err:
+ EC_GROUP_free(NISTP);
+ EC_POINT_free(G);
+ EC_POINT_free(P);
+ EC_POINT_free(Q);
+ EC_POINT_free(Q_CHECK);
+ BN_free(n);
+ BN_free(m);
+ BN_free(p);
+ BN_free(a);
+ BN_free(b);
+ BN_free(x);
+ BN_free(y);
+ BN_free(order);
+ BN_free(yplusone);
+ BN_CTX_free(ctx);
+ return r;
+}
+
+static const unsigned char p521_named[] = {
+ 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x23,
+};
+
+static const unsigned char p521_explicit[] = {
+ 0x30, 0x82, 0x01, 0xc3, 0x02, 0x01, 0x01, 0x30, 0x4d, 0x06, 0x07, 0x2a,
+ 0x86, 0x48, 0xce, 0x3d, 0x01, 0x01, 0x02, 0x42, 0x01, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x30, 0x81, 0x9f, 0x04, 0x42, 0x01, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x04, 0x42, 0x00, 0x51, 0x95, 0x3e, 0xb9, 0x61, 0x8e, 0x1c, 0x9a,
+ 0x1f, 0x92, 0x9a, 0x21, 0xa0, 0xb6, 0x85, 0x40, 0xee, 0xa2, 0xda, 0x72,
+ 0x5b, 0x99, 0xb3, 0x15, 0xf3, 0xb8, 0xb4, 0x89, 0x91, 0x8e, 0xf1, 0x09,
+ 0xe1, 0x56, 0x19, 0x39, 0x51, 0xec, 0x7e, 0x93, 0x7b, 0x16, 0x52, 0xc0,
+ 0xbd, 0x3b, 0xb1, 0xbf, 0x07, 0x35, 0x73, 0xdf, 0x88, 0x3d, 0x2c, 0x34,
+ 0xf1, 0xef, 0x45, 0x1f, 0xd4, 0x6b, 0x50, 0x3f, 0x00, 0x03, 0x15, 0x00,
+ 0xd0, 0x9e, 0x88, 0x00, 0x29, 0x1c, 0xb8, 0x53, 0x96, 0xcc, 0x67, 0x17,
+ 0x39, 0x32, 0x84, 0xaa, 0xa0, 0xda, 0x64, 0xba, 0x04, 0x81, 0x85, 0x04,
+ 0x00, 0xc6, 0x85, 0x8e, 0x06, 0xb7, 0x04, 0x04, 0xe9, 0xcd, 0x9e, 0x3e,
+ 0xcb, 0x66, 0x23, 0x95, 0xb4, 0x42, 0x9c, 0x64, 0x81, 0x39, 0x05, 0x3f,
+ 0xb5, 0x21, 0xf8, 0x28, 0xaf, 0x60, 0x6b, 0x4d, 0x3d, 0xba, 0xa1, 0x4b,
+ 0x5e, 0x77, 0xef, 0xe7, 0x59, 0x28, 0xfe, 0x1d, 0xc1, 0x27, 0xa2, 0xff,
+ 0xa8, 0xde, 0x33, 0x48, 0xb3, 0xc1, 0x85, 0x6a, 0x42, 0x9b, 0xf9, 0x7e,
+ 0x7e, 0x31, 0xc2, 0xe5, 0xbd, 0x66, 0x01, 0x18, 0x39, 0x29, 0x6a, 0x78,
+ 0x9a, 0x3b, 0xc0, 0x04, 0x5c, 0x8a, 0x5f, 0xb4, 0x2c, 0x7d, 0x1b, 0xd9,
+ 0x98, 0xf5, 0x44, 0x49, 0x57, 0x9b, 0x44, 0x68, 0x17, 0xaf, 0xbd, 0x17,
+ 0x27, 0x3e, 0x66, 0x2c, 0x97, 0xee, 0x72, 0x99, 0x5e, 0xf4, 0x26, 0x40,
+ 0xc5, 0x50, 0xb9, 0x01, 0x3f, 0xad, 0x07, 0x61, 0x35, 0x3c, 0x70, 0x86,
+ 0xa2, 0x72, 0xc2, 0x40, 0x88, 0xbe, 0x94, 0x76, 0x9f, 0xd1, 0x66, 0x50,
+ 0x02, 0x42, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
+ 0x51, 0x86, 0x87, 0x83, 0xbf, 0x2f, 0x96, 0x6b, 0x7f, 0xcc, 0x01, 0x48,
+ 0xf7, 0x09, 0xa5, 0xd0, 0x3b, 0xb5, 0xc9, 0xb8, 0x89, 0x9c, 0x47, 0xae,
+ 0xbb, 0x6f, 0xb7, 0x1e, 0x91, 0x38, 0x64, 0x09, 0x02, 0x01, 0x01,
+};
+
+/*
+ * This test validates a named curve's group parameters using
+ * EC_GROUP_check_named_curve(). It also checks that modifying any of the
+ * group parameters results in the curve not being valid.
+ */
+static int check_named_curve_test(int id)
+{
+ int ret = 0, nid, field_nid, has_seed;
+ EC_GROUP *group = NULL, *gtest = NULL;
+ const EC_POINT *group_gen = NULL;
+ EC_POINT *other_gen = NULL;
+ BIGNUM *group_p = NULL, *group_a = NULL, *group_b = NULL;
+ BIGNUM *other_p = NULL, *other_a = NULL, *other_b = NULL;
+ BIGNUM *group_cofactor = NULL, *other_cofactor = NULL;
+ BIGNUM *other_order = NULL;
+ const BIGNUM *group_order = NULL;
+ BN_CTX *bn_ctx = NULL;
+ static const unsigned char invalid_seed[] = "THIS IS NOT A VALID SEED";
+ static size_t invalid_seed_len = sizeof(invalid_seed);
+
+ /* Do some setup */
+ nid = curves[id].nid;
+ if (!TEST_ptr(bn_ctx = BN_CTX_new())
+ || !TEST_ptr(group = EC_GROUP_new_by_curve_name(nid))
+ || !TEST_ptr(gtest = EC_GROUP_dup(group))
+ || !TEST_ptr(group_p = BN_new())
+ || !TEST_ptr(group_a = BN_new())
+ || !TEST_ptr(group_b = BN_new())
+ || !TEST_ptr(group_cofactor = BN_new())
+ || !TEST_ptr(group_gen = EC_GROUP_get0_generator(group))
+ || !TEST_ptr(group_order = EC_GROUP_get0_order(group))
+ || !TEST_true(EC_GROUP_get_cofactor(group, group_cofactor, NULL))
+ || !TEST_true(EC_GROUP_get_curve(group, group_p, group_a, group_b, NULL))
+ || !TEST_ptr(other_gen = EC_POINT_dup(group_gen, group))
+ || !TEST_true(EC_POINT_add(group, other_gen, group_gen, group_gen, NULL))
+ || !TEST_ptr(other_order = BN_dup(group_order))
+ || !TEST_true(BN_add_word(other_order, 1))
+ || !TEST_ptr(other_a = BN_dup(group_a))
+ || !TEST_true(BN_add_word(other_a, 1))
+ || !TEST_ptr(other_b = BN_dup(group_b))
+ || !TEST_true(BN_add_word(other_b, 1))
+ || !TEST_ptr(other_cofactor = BN_dup(group_cofactor))
+ || !TEST_true(BN_add_word(other_cofactor, 1)))
+ goto err;
+
+ /* Determine if the built-in curve has a seed field set */
+ has_seed = (EC_GROUP_get_seed_len(group) > 0);
+ field_nid = EC_GROUP_get_field_type(group);
+ if (field_nid == NID_X9_62_characteristic_two_field) {
+ if (!TEST_ptr(other_p = BN_dup(group_p))
+ || !TEST_true(BN_lshift1(other_p, other_p)))
+ goto err;
+ } else {
+ if (!TEST_ptr(other_p = BN_dup(group_p)))
+ goto err;
+ /*
+ * Just choosing any arbitrary prime does not work..
+ * Setting p via ec_GFp_nist_group_set_curve() needs the prime to be a
+ * nist prime. So only select one of these as an alternate prime.
+ */
+ if (!TEST_ptr(BN_copy(other_p,
+ BN_ucmp(BN_get0_nist_prime_192(), other_p) == 0 ?
+ BN_get0_nist_prime_256() :
+ BN_get0_nist_prime_192())))
+ goto err;
+ }
+
+ /* Passes because this is a valid curve */
+ if (!TEST_int_eq(EC_GROUP_check_named_curve(group, 0, NULL), nid)
+ /* Only NIST curves pass */
+ || !TEST_int_eq(EC_GROUP_check_named_curve(group, 1, NULL),
+ EC_curve_nid2nist(nid) != NULL ? nid : NID_undef))
+ goto err;
+
+ /* Fail if the curve name doesn't match the parameters */
+ EC_GROUP_set_curve_name(group, nid + 1);
+ ERR_set_mark();
+ if (!TEST_int_le(EC_GROUP_check_named_curve(group, 0, NULL), 0))
+ goto err;
+ ERR_pop_to_mark();
+
+ /* Restore curve name and ensure it's passing */
+ EC_GROUP_set_curve_name(group, nid);
+ if (!TEST_int_eq(EC_GROUP_check_named_curve(group, 0, NULL), nid))
+ goto err;
+
+ if (!TEST_int_eq(EC_GROUP_set_seed(group, invalid_seed, invalid_seed_len),
+ invalid_seed_len))
+ goto err;
+
+ if (has_seed) {
+ /*
+ * If the built-in curve has a seed and we set the seed to another value
+ * then it will fail the check.
+ */
+ if (!TEST_int_eq(EC_GROUP_check_named_curve(group, 0, NULL), 0))
+ goto err;
+ } else {
+ /*
+ * If the built-in curve does not have a seed then setting the seed will
+ * pass the check (as the seed is optional).
+ */
+ if (!TEST_int_eq(EC_GROUP_check_named_curve(group, 0, NULL), nid))
+ goto err;
+ }
+ /* Pass if the seed is unknown (as it is optional) */
+ if (!TEST_int_eq(EC_GROUP_set_seed(group, NULL, 0), 1)
+ || !TEST_int_eq(EC_GROUP_check_named_curve(group, 0, NULL), nid))
+ goto err;
+
+ /* Check that a duped group passes */
+ if (!TEST_int_eq(EC_GROUP_check_named_curve(gtest, 0, NULL), nid))
+ goto err;
+
+ /* check that changing any generator parameter fails */
+ if (!TEST_true(EC_GROUP_set_generator(gtest, other_gen, group_order,
+ group_cofactor))
+ || !TEST_int_eq(EC_GROUP_check_named_curve(gtest, 0, NULL), 0)
+ || !TEST_true(EC_GROUP_set_generator(gtest, group_gen, other_order,
+ group_cofactor))
+ || !TEST_int_eq(EC_GROUP_check_named_curve(gtest, 0, NULL), 0)
+ /* The order is not an optional field, so this should fail */
+ || !TEST_false(EC_GROUP_set_generator(gtest, group_gen, NULL,
+ group_cofactor))
+ || !TEST_true(EC_GROUP_set_generator(gtest, group_gen, group_order,
+ other_cofactor))
+ || !TEST_int_eq(EC_GROUP_check_named_curve(gtest, 0, NULL), 0)
+ /* Check that if the cofactor is not set then it still passes */
+ || !TEST_true(EC_GROUP_set_generator(gtest, group_gen, group_order,
+ NULL))
+ || !TEST_int_eq(EC_GROUP_check_named_curve(gtest, 0, NULL), nid)
+ /* check that restoring the generator passes */
+ || !TEST_true(EC_GROUP_set_generator(gtest, group_gen, group_order,
+ group_cofactor))
+ || !TEST_int_eq(EC_GROUP_check_named_curve(gtest, 0, NULL), nid))
+ goto err;
+
+ /*
+ * check that changing any curve parameter fails
+ *
+ * Setting arbitrary p, a or b might fail for some EC_GROUPs
+ * depending on the internal EC_METHOD implementation, hence run
+ * these tests conditionally to the success of EC_GROUP_set_curve().
+ */
+ ERR_set_mark();
+ if (EC_GROUP_set_curve(gtest, other_p, group_a, group_b, NULL)) {
+ if (!TEST_int_le(EC_GROUP_check_named_curve(gtest, 0, NULL), 0))
+ goto err;
+ } else {
+ /* clear the error stack if EC_GROUP_set_curve() failed */
+ ERR_pop_to_mark();
+ ERR_set_mark();
+ }
+ if (EC_GROUP_set_curve(gtest, group_p, other_a, group_b, NULL)) {
+ if (!TEST_int_le(EC_GROUP_check_named_curve(gtest, 0, NULL), 0))
+ goto err;
+ } else {
+ /* clear the error stack if EC_GROUP_set_curve() failed */
+ ERR_pop_to_mark();
+ ERR_set_mark();
+ }
+ if (EC_GROUP_set_curve(gtest, group_p, group_a, other_b, NULL)) {
+ if (!TEST_int_le(EC_GROUP_check_named_curve(gtest, 0, NULL), 0))
+ goto err;
+ } else {
+ /* clear the error stack if EC_GROUP_set_curve() failed */
+ ERR_pop_to_mark();
+ ERR_set_mark();
+ }
+ ERR_pop_to_mark();
+
+ /* Check that restoring the curve parameters passes */
+ if (!TEST_true(EC_GROUP_set_curve(gtest, group_p, group_a, group_b, NULL))
+ || !TEST_int_eq(EC_GROUP_check_named_curve(gtest, 0, NULL), nid))
+ goto err;
+
+ ret = 1;
+err:
+ BN_free(group_p);
+ BN_free(other_p);
+ BN_free(group_a);
+ BN_free(other_a);
+ BN_free(group_b);
+ BN_free(other_b);
+ BN_free(group_cofactor);
+ BN_free(other_cofactor);
+ BN_free(other_order);
+ EC_POINT_free(other_gen);
+ EC_GROUP_free(gtest);
+ EC_GROUP_free(group);
+ BN_CTX_free(bn_ctx);
+ return ret;
+}
+
+/*
+ * This checks the lookup capability of EC_GROUP_check_named_curve()
+ * when the given group was created with explicit parameters.
+ *
+ * It is possible to retrieve an alternative alias that does not match
+ * the original nid in this case.
+ */
+static int check_named_curve_lookup_test(int id)
+{
+ int ret = 0, nid, rv = 0;
+ EC_GROUP *g = NULL , *ga = NULL;
+ ECPARAMETERS *p = NULL, *pa = NULL;
+ BN_CTX *ctx = NULL;
+
+ /* Do some setup */
+ nid = curves[id].nid;
+ if (!TEST_ptr(ctx = BN_CTX_new())
+ || !TEST_ptr(g = EC_GROUP_new_by_curve_name(nid))
+ || !TEST_ptr(p = EC_GROUP_get_ecparameters(g, NULL)))
+ goto err;
+
+ /* replace with group from explicit parameters */
+ EC_GROUP_free(g);
+ if (!TEST_ptr(g = EC_GROUP_new_from_ecparameters(p)))
+ goto err;
+
+ if (!TEST_int_gt(rv = EC_GROUP_check_named_curve(g, 0, NULL), 0))
+ goto err;
+ if (rv != nid) {
+ /*
+ * Found an alias:
+ * fail if the returned nid is not an alias of the original group.
+ *
+ * The comparison here is done by comparing two explicit
+ * parameter EC_GROUPs with EC_GROUP_cmp(), to ensure the
+ * comparison happens with unnamed EC_GROUPs using the same
+ * EC_METHODs.
+ */
+ if (!TEST_ptr(ga = EC_GROUP_new_by_curve_name(rv))
+ || !TEST_ptr(pa = EC_GROUP_get_ecparameters(ga, NULL)))
+ goto err;
+
+ /* replace with group from explicit parameters, then compare */
+ EC_GROUP_free(ga);
+ if (!TEST_ptr(ga = EC_GROUP_new_from_ecparameters(pa))
+ || !TEST_int_eq(EC_GROUP_cmp(g, ga, ctx), 0))
+ goto err;
+ }
+
+ ret = 1;
+
+ err:
+ EC_GROUP_free(g);
+ EC_GROUP_free(ga);
+ ECPARAMETERS_free(p);
+ ECPARAMETERS_free(pa);
+ BN_CTX_free(ctx);
+
+ return ret;
+}
+
+/*
+ * Sometime we cannot compare nids for equality, as the built-in curve table
+ * includes aliases with different names for the same curve.
+ *
+ * This function returns TRUE (1) if the checked nids are identical, or if they
+ * alias to the same curve. FALSE (0) otherwise.
+ */
+static ossl_inline
+int are_ec_nids_compatible(int n1d, int n2d)
+{
+ int ret = 0;
+ switch (n1d) {
+#ifndef OPENSSL_NO_EC2M
+ case NID_sect113r1:
+ case NID_wap_wsg_idm_ecid_wtls4:
+ ret = (n2d == NID_sect113r1 || n2d == NID_wap_wsg_idm_ecid_wtls4);
+ break;
+ case NID_sect163k1:
+ case NID_wap_wsg_idm_ecid_wtls3:
+ ret = (n2d == NID_sect163k1 || n2d == NID_wap_wsg_idm_ecid_wtls3);
+ break;
+ case NID_sect233k1:
+ case NID_wap_wsg_idm_ecid_wtls10:
+ ret = (n2d == NID_sect233k1 || n2d == NID_wap_wsg_idm_ecid_wtls10);
+ break;
+ case NID_sect233r1:
+ case NID_wap_wsg_idm_ecid_wtls11:
+ ret = (n2d == NID_sect233r1 || n2d == NID_wap_wsg_idm_ecid_wtls11);
+ break;
+ case NID_X9_62_c2pnb163v1:
+ case NID_wap_wsg_idm_ecid_wtls5:
+ ret = (n2d == NID_X9_62_c2pnb163v1
+ || n2d == NID_wap_wsg_idm_ecid_wtls5);
+ break;
+#endif /* OPENSSL_NO_EC2M */
+ case NID_secp112r1:
+ case NID_wap_wsg_idm_ecid_wtls6:
+ ret = (n2d == NID_secp112r1 || n2d == NID_wap_wsg_idm_ecid_wtls6);
+ break;
+ case NID_secp160r2:
+ case NID_wap_wsg_idm_ecid_wtls7:
+ ret = (n2d == NID_secp160r2 || n2d == NID_wap_wsg_idm_ecid_wtls7);
+ break;
+#ifdef OPENSSL_NO_EC_NISTP_64_GCC_128
+ case NID_secp224r1:
+ case NID_wap_wsg_idm_ecid_wtls12:
+ ret = (n2d == NID_secp224r1 || n2d == NID_wap_wsg_idm_ecid_wtls12);
+ break;
+#else
+ /*
+ * For SEC P-224 we want to ensure that the SECP nid is returned, as
+ * that is associated with a specialized method.
+ */
+ case NID_wap_wsg_idm_ecid_wtls12:
+ ret = (n2d == NID_secp224r1);
+ break;
+#endif /* def(OPENSSL_NO_EC_NISTP_64_GCC_128) */
+
+ default:
+ ret = (n1d == n2d);
+ }
+ return ret;
+}
+
+/*
+ * This checks that EC_GROUP_bew_from_ecparameters() returns a "named"
+ * EC_GROUP for built-in curves.
+ *
+ * Note that it is possible to retrieve an alternative alias that does not match
+ * the original nid.
+ *
+ * Ensure that the OPENSSL_EC_EXPLICIT_CURVE ASN1 flag is set.
+ */
+static int check_named_curve_from_ecparameters(int id)
+{
+ int ret = 0, nid, tnid;
+ EC_GROUP *group = NULL, *tgroup = NULL, *tmpg = NULL;
+ const EC_POINT *group_gen = NULL;
+ EC_POINT *other_gen = NULL;
+ BIGNUM *group_cofactor = NULL, *other_cofactor = NULL;
+ BIGNUM *other_gen_x = NULL, *other_gen_y = NULL;
+ const BIGNUM *group_order = NULL;
+ BIGNUM *other_order = NULL;
+ BN_CTX *bn_ctx = NULL;
+ static const unsigned char invalid_seed[] = "THIS IS NOT A VALID SEED";
+ static size_t invalid_seed_len = sizeof(invalid_seed);
+ ECPARAMETERS *params = NULL, *other_params = NULL;
+ EC_GROUP *g_ary[8] = {NULL};
+ EC_GROUP **g_next = &g_ary[0];
+ ECPARAMETERS *p_ary[8] = {NULL};
+ ECPARAMETERS **p_next = &p_ary[0];
+
+ /* Do some setup */
+ nid = curves[id].nid;
+ TEST_note("Curve %s", OBJ_nid2sn(nid));
+ if (!TEST_ptr(bn_ctx = BN_CTX_new()))
+ return ret;
+ BN_CTX_start(bn_ctx);
+
+ if (/* Allocations */
+ !TEST_ptr(group_cofactor = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(other_gen_x = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(other_gen_y = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(other_order = BN_CTX_get(bn_ctx))
+ || !TEST_ptr(other_cofactor = BN_CTX_get(bn_ctx))
+ /* Generate reference group and params */
+ || !TEST_ptr(group = EC_GROUP_new_by_curve_name(nid))
+ || !TEST_ptr(params = EC_GROUP_get_ecparameters(group, NULL))
+ || !TEST_ptr(group_gen = EC_GROUP_get0_generator(group))
+ || !TEST_ptr(group_order = EC_GROUP_get0_order(group))
+ || !TEST_true(EC_GROUP_get_cofactor(group, group_cofactor, NULL))
+ /* compute `other_*` values */
+ || !TEST_ptr(tmpg = EC_GROUP_dup(group))
+ || !TEST_ptr(other_gen = EC_POINT_dup(group_gen, group))
+ || !TEST_true(EC_POINT_add(group, other_gen, group_gen, group_gen, NULL))
+ || !TEST_true(EC_POINT_get_affine_coordinates(group, other_gen,
+ other_gen_x, other_gen_y, bn_ctx))
+ || !TEST_true(BN_copy(other_order, group_order))
+ || !TEST_true(BN_add_word(other_order, 1))
+ || !TEST_true(BN_copy(other_cofactor, group_cofactor))
+ || !TEST_true(BN_add_word(other_cofactor, 1)))
+ goto err;
+
+ EC_POINT_free(other_gen);
+ other_gen = NULL;
+
+ if (!TEST_ptr(other_gen = EC_POINT_new(tmpg))
+ || !TEST_true(EC_POINT_set_affine_coordinates(tmpg, other_gen,
+ other_gen_x, other_gen_y,
+ bn_ctx)))
+ goto err;
+
+ /*
+ * ###########################
+ * # Actual tests start here #
+ * ###########################
+ */
+
+ /*
+ * Creating a group from built-in explicit parameters returns a
+ * "named" EC_GROUP
+ */
+ if (!TEST_ptr(tgroup = *g_next++ = EC_GROUP_new_from_ecparameters(params))
+ || !TEST_int_ne((tnid = EC_GROUP_get_curve_name(tgroup)), NID_undef))
+ goto err;
+ /*
+ * We cannot always guarantee the names match, as the built-in table
+ * contains aliases for the same curve with different names.
+ */
+ if (!TEST_true(are_ec_nids_compatible(nid, tnid))) {
+ TEST_info("nid = %s, tnid = %s", OBJ_nid2sn(nid), OBJ_nid2sn(tnid));
+ goto err;
+ }
+ /* Ensure that the OPENSSL_EC_EXPLICIT_CURVE ASN1 flag is set. */
+ if (!TEST_int_eq(EC_GROUP_get_asn1_flag(tgroup), OPENSSL_EC_EXPLICIT_CURVE))
+ goto err;
+
+ /*
+ * An invalid seed in the parameters should be ignored: expect a "named"
+ * group.
+ */
+ if (!TEST_int_eq(EC_GROUP_set_seed(tmpg, invalid_seed, invalid_seed_len),
+ invalid_seed_len)
+ || !TEST_ptr(other_params = *p_next++ =
+ EC_GROUP_get_ecparameters(tmpg, NULL))
+ || !TEST_ptr(tgroup = *g_next++ =
+ EC_GROUP_new_from_ecparameters(other_params))
+ || !TEST_int_ne((tnid = EC_GROUP_get_curve_name(tgroup)), NID_undef)
+ || !TEST_true(are_ec_nids_compatible(nid, tnid))
+ || !TEST_int_eq(EC_GROUP_get_asn1_flag(tgroup),
+ OPENSSL_EC_EXPLICIT_CURVE)) {
+ TEST_info("nid = %s, tnid = %s", OBJ_nid2sn(nid), OBJ_nid2sn(tnid));
+ goto err;
+ }
+
+ /*
+ * A null seed in the parameters should be ignored, as it is optional:
+ * expect a "named" group.
+ */
+ if (!TEST_int_eq(EC_GROUP_set_seed(tmpg, NULL, 0), 1)
+ || !TEST_ptr(other_params = *p_next++ =
+ EC_GROUP_get_ecparameters(tmpg, NULL))
+ || !TEST_ptr(tgroup = *g_next++ =
+ EC_GROUP_new_from_ecparameters(other_params))
+ || !TEST_int_ne((tnid = EC_GROUP_get_curve_name(tgroup)), NID_undef)
+ || !TEST_true(are_ec_nids_compatible(nid, tnid))
+ || !TEST_int_eq(EC_GROUP_get_asn1_flag(tgroup),
+ OPENSSL_EC_EXPLICIT_CURVE)) {
+ TEST_info("nid = %s, tnid = %s", OBJ_nid2sn(nid), OBJ_nid2sn(tnid));
+ goto err;
+ }
+
+ /*
+ * Check that changing any of the generator parameters does not yield a
+ * match with the built-in curves
+ */
+ if (/* Other gen, same group order & cofactor */
+ !TEST_true(EC_GROUP_set_generator(tmpg, other_gen, group_order,
+ group_cofactor))
+ || !TEST_ptr(other_params = *p_next++ =
+ EC_GROUP_get_ecparameters(tmpg, NULL))
+ || !TEST_ptr(tgroup = *g_next++ =
+ EC_GROUP_new_from_ecparameters(other_params))
+ || !TEST_int_eq((tnid = EC_GROUP_get_curve_name(tgroup)), NID_undef)
+ /* Same gen & cofactor, different order */
+ || !TEST_true(EC_GROUP_set_generator(tmpg, group_gen, other_order,
+ group_cofactor))
+ || !TEST_ptr(other_params = *p_next++ =
+ EC_GROUP_get_ecparameters(tmpg, NULL))
+ || !TEST_ptr(tgroup = *g_next++ =
+ EC_GROUP_new_from_ecparameters(other_params))
+ || !TEST_int_eq((tnid = EC_GROUP_get_curve_name(tgroup)), NID_undef)
+ /* The order is not an optional field, so this should fail */
+ || !TEST_false(EC_GROUP_set_generator(tmpg, group_gen, NULL,
+ group_cofactor))
+ /* Check that a wrong cofactor is ignored, and we still match */
+ || !TEST_true(EC_GROUP_set_generator(tmpg, group_gen, group_order,
+ other_cofactor))
+ || !TEST_ptr(other_params = *p_next++ =
+ EC_GROUP_get_ecparameters(tmpg, NULL))
+ || !TEST_ptr(tgroup = *g_next++ =
+ EC_GROUP_new_from_ecparameters(other_params))
+ || !TEST_int_ne((tnid = EC_GROUP_get_curve_name(tgroup)), NID_undef)
+ || !TEST_true(are_ec_nids_compatible(nid, tnid))
+ || !TEST_int_eq(EC_GROUP_get_asn1_flag(tgroup),
+ OPENSSL_EC_EXPLICIT_CURVE)
+ /* Check that if the cofactor is not set then it still matches */
+ || !TEST_true(EC_GROUP_set_generator(tmpg, group_gen, group_order,
+ NULL))
+ || !TEST_ptr(other_params = *p_next++ =
+ EC_GROUP_get_ecparameters(tmpg, NULL))
+ || !TEST_ptr(tgroup = *g_next++ =
+ EC_GROUP_new_from_ecparameters(other_params))
+ || !TEST_int_ne((tnid = EC_GROUP_get_curve_name(tgroup)), NID_undef)
+ || !TEST_true(are_ec_nids_compatible(nid, tnid))
+ || !TEST_int_eq(EC_GROUP_get_asn1_flag(tgroup),
+ OPENSSL_EC_EXPLICIT_CURVE)
+ /* check that restoring the generator passes */
+ || !TEST_true(EC_GROUP_set_generator(tmpg, group_gen, group_order,
+ group_cofactor))
+ || !TEST_ptr(other_params = *p_next++ =
+ EC_GROUP_get_ecparameters(tmpg, NULL))
+ || !TEST_ptr(tgroup = *g_next++ =
+ EC_GROUP_new_from_ecparameters(other_params))
+ || !TEST_int_ne((tnid = EC_GROUP_get_curve_name(tgroup)), NID_undef)
+ || !TEST_true(are_ec_nids_compatible(nid, tnid))
+ || !TEST_int_eq(EC_GROUP_get_asn1_flag(tgroup),
+ OPENSSL_EC_EXPLICIT_CURVE))
+ goto err;
+
+ ret = 1;
+err:
+ for (g_next = &g_ary[0]; g_next < g_ary + OSSL_NELEM(g_ary); g_next++)
+ EC_GROUP_free(*g_next);
+ for (p_next = &p_ary[0]; p_next < p_ary + OSSL_NELEM(g_ary); p_next++)
+ ECPARAMETERS_free(*p_next);
+ ECPARAMETERS_free(params);
+ EC_POINT_free(other_gen);
+ EC_GROUP_free(tmpg);
+ EC_GROUP_free(group);
+ BN_CTX_end(bn_ctx);
+ BN_CTX_free(bn_ctx);
+ return ret;
+}
+
+
+static int parameter_test(void)
+{
+ EC_GROUP *group = NULL, *group2 = NULL;
+ ECPARAMETERS *ecparameters = NULL;
+ unsigned char *buf = NULL;
+ int r = 0, len;
+
+ if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(NID_secp384r1))
+ || !TEST_ptr(ecparameters = EC_GROUP_get_ecparameters(group, NULL))
+ || !TEST_ptr(group2 = EC_GROUP_new_from_ecparameters(ecparameters))
+ || !TEST_int_eq(EC_GROUP_cmp(group, group2, NULL), 0))
+ goto err;
+
+ EC_GROUP_free(group);
+ group = NULL;
+
+ /* Test the named curve encoding, which should be default. */
+ if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(NID_secp521r1))
+ || !TEST_true((len = i2d_ECPKParameters(group, &buf)) >= 0)
+ || !TEST_mem_eq(buf, len, p521_named, sizeof(p521_named)))
+ goto err;
+
+ OPENSSL_free(buf);
+ buf = NULL;
+
+ /*
+ * Test the explicit encoding. P-521 requires correctly zero-padding the
+ * curve coefficients.
+ */
+ EC_GROUP_set_asn1_flag(group, OPENSSL_EC_EXPLICIT_CURVE);
+ if (!TEST_true((len = i2d_ECPKParameters(group, &buf)) >= 0)
+ || !TEST_mem_eq(buf, len, p521_explicit, sizeof(p521_explicit)))
+ goto err;
+
+ r = 1;
+err:
+ EC_GROUP_free(group);
+ EC_GROUP_free(group2);
+ ECPARAMETERS_free(ecparameters);
+ OPENSSL_free(buf);
+ return r;
+}
+
+/*-
+ * random 256-bit explicit parameters curve, cofactor absent
+ * order: 0x0c38d96a9f892b88772ec2e39614a82f4f (132 bit)
+ * cofactor: 0x12bc94785251297abfafddf1565100da (125 bit)
+ */
+static const unsigned char params_cf_pass[] = {
+ 0x30, 0x81, 0xcd, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86,
+ 0x48, 0xce, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xe5, 0x00, 0x1f, 0xc5,
+ 0xca, 0x71, 0x9d, 0x8e, 0xf7, 0x07, 0x4b, 0x48, 0x37, 0xf9, 0x33, 0x2d,
+ 0x71, 0xbf, 0x79, 0xe7, 0xdc, 0x91, 0xc2, 0xff, 0xb6, 0x7b, 0xc3, 0x93,
+ 0x44, 0x88, 0xe6, 0x91, 0x30, 0x44, 0x04, 0x20, 0xe5, 0x00, 0x1f, 0xc5,
+ 0xca, 0x71, 0x9d, 0x8e, 0xf7, 0x07, 0x4b, 0x48, 0x37, 0xf9, 0x33, 0x2d,
+ 0x71, 0xbf, 0x79, 0xe7, 0xdc, 0x91, 0xc2, 0xff, 0xb6, 0x7b, 0xc3, 0x93,
+ 0x44, 0x88, 0xe6, 0x8e, 0x04, 0x20, 0x18, 0x8c, 0x59, 0x57, 0xc4, 0xbc,
+ 0x85, 0x57, 0xc3, 0x66, 0x9f, 0x89, 0xd5, 0x92, 0x0d, 0x7e, 0x42, 0x27,
+ 0x07, 0x64, 0xaa, 0x26, 0xed, 0x89, 0xc4, 0x09, 0x05, 0x4d, 0xc7, 0x23,
+ 0x47, 0xda, 0x04, 0x41, 0x04, 0x1b, 0x6b, 0x41, 0x0b, 0xf9, 0xfb, 0x77,
+ 0xfd, 0x50, 0xb7, 0x3e, 0x23, 0xa3, 0xec, 0x9a, 0x3b, 0x09, 0x31, 0x6b,
+ 0xfa, 0xf6, 0xce, 0x1f, 0xff, 0xeb, 0x57, 0x93, 0x24, 0x70, 0xf3, 0xf4,
+ 0xba, 0x7e, 0xfa, 0x86, 0x6e, 0x19, 0x89, 0xe3, 0x55, 0x6d, 0x5a, 0xe9,
+ 0xc0, 0x3d, 0xbc, 0xfb, 0xaf, 0xad, 0xd4, 0x7e, 0xa6, 0xe5, 0xfa, 0x1a,
+ 0x58, 0x07, 0x9e, 0x8f, 0x0d, 0x3b, 0xf7, 0x38, 0xca, 0x02, 0x11, 0x0c,
+ 0x38, 0xd9, 0x6a, 0x9f, 0x89, 0x2b, 0x88, 0x77, 0x2e, 0xc2, 0xe3, 0x96,
+ 0x14, 0xa8, 0x2f, 0x4f
+};
+
+/*-
+ * random 256-bit explicit parameters curve, cofactor absent
+ * order: 0x045a75c0c17228ebd9b169a10e34a22101 (131 bit)
+ * cofactor: 0x2e134b4ede82649f67a2e559d361e5fe (126 bit)
+ */
+static const unsigned char params_cf_fail[] = {
+ 0x30, 0x81, 0xcd, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86,
+ 0x48, 0xce, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xc8, 0x95, 0x27, 0x37,
+ 0xe8, 0xe1, 0xfd, 0xcc, 0xf9, 0x6e, 0x0c, 0xa6, 0x21, 0xc1, 0x7d, 0x6b,
+ 0x9d, 0x44, 0x42, 0xea, 0x73, 0x4e, 0x04, 0xb6, 0xac, 0x62, 0x50, 0xd0,
+ 0x33, 0xc2, 0xea, 0x13, 0x30, 0x44, 0x04, 0x20, 0xc8, 0x95, 0x27, 0x37,
+ 0xe8, 0xe1, 0xfd, 0xcc, 0xf9, 0x6e, 0x0c, 0xa6, 0x21, 0xc1, 0x7d, 0x6b,
+ 0x9d, 0x44, 0x42, 0xea, 0x73, 0x4e, 0x04, 0xb6, 0xac, 0x62, 0x50, 0xd0,
+ 0x33, 0xc2, 0xea, 0x10, 0x04, 0x20, 0xbf, 0xa6, 0xa8, 0x05, 0x1d, 0x09,
+ 0xac, 0x70, 0x39, 0xbb, 0x4d, 0xb2, 0x90, 0x8a, 0x15, 0x41, 0x14, 0x1d,
+ 0x11, 0x86, 0x9f, 0x13, 0xa2, 0x63, 0x1a, 0xda, 0x95, 0x22, 0x4d, 0x02,
+ 0x15, 0x0a, 0x04, 0x41, 0x04, 0xaf, 0x16, 0x71, 0xf9, 0xc4, 0xc8, 0x59,
+ 0x1d, 0xa3, 0x6f, 0xe7, 0xc3, 0x57, 0xa1, 0xfa, 0x9f, 0x49, 0x7c, 0x11,
+ 0x27, 0x05, 0xa0, 0x7f, 0xff, 0xf9, 0xe0, 0xe7, 0x92, 0xdd, 0x9c, 0x24,
+ 0x8e, 0xc7, 0xb9, 0x52, 0x71, 0x3f, 0xbc, 0x7f, 0x6a, 0x9f, 0x35, 0x70,
+ 0xe1, 0x27, 0xd5, 0x35, 0x8a, 0x13, 0xfa, 0xa8, 0x33, 0x3e, 0xd4, 0x73,
+ 0x1c, 0x14, 0x58, 0x9e, 0xc7, 0x0a, 0x87, 0x65, 0x8d, 0x02, 0x11, 0x04,
+ 0x5a, 0x75, 0xc0, 0xc1, 0x72, 0x28, 0xeb, 0xd9, 0xb1, 0x69, 0xa1, 0x0e,
+ 0x34, 0xa2, 0x21, 0x01
+};
+
+/*-
+ * Test two random 256-bit explicit parameters curves with absent cofactor.
+ * The two curves are chosen to roughly straddle the bounds at which the lib
+ * can compute the cofactor automatically, roughly 4*sqrt(p). So test that:
+ *
+ * - params_cf_pass: order is sufficiently close to p to compute cofactor
+ * - params_cf_fail: order is too far away from p to compute cofactor
+ *
+ * For standards-compliant curves, cofactor is chosen as small as possible.
+ * So you can see neither of these curves are fit for cryptographic use.
+ *
+ * Some standards even mandate an upper bound on the cofactor, e.g. SECG1 v2:
+ * h <= 2**(t/8) where t is the security level of the curve, for which the lib
+ * will always succeed in computing the cofactor. Neither of these curves
+ * conform to that -- this is just robustness testing.
+ */
+static int cofactor_range_test(void)
+{
+ EC_GROUP *group = NULL;
+ BIGNUM *cf = NULL;
+ int ret = 0;
+ const unsigned char *b1 = (const unsigned char *)params_cf_fail;
+ const unsigned char *b2 = (const unsigned char *)params_cf_pass;
+
+ if (!TEST_ptr(group = d2i_ECPKParameters(NULL, &b1, sizeof(params_cf_fail)))
+ || !TEST_BN_eq_zero(EC_GROUP_get0_cofactor(group))
+ || !TEST_ptr(group = d2i_ECPKParameters(&group, &b2,
+ sizeof(params_cf_pass)))
+ || !TEST_int_gt(BN_hex2bn(&cf, "12bc94785251297abfafddf1565100da"), 0)
+ || !TEST_BN_eq(cf, EC_GROUP_get0_cofactor(group)))
+ goto err;
+ ret = 1;
+ err:
+ BN_free(cf);
+ EC_GROUP_free(group);
+ return ret;
+}
+
+/*-
+ * For named curves, test that:
+ * - the lib correctly computes the cofactor if passed a NULL or zero cofactor
+ * - a nonsensical cofactor throws an error (negative test)
+ * - nonsensical orders throw errors (negative tests)
+ */
+static int cardinality_test(int n)
+{
+ int ret = 0, is_binary = 0;
+ int nid = curves[n].nid;
+ BN_CTX *ctx = NULL;
+ EC_GROUP *g1 = NULL, *g2 = NULL;
+ EC_POINT *g2_gen = NULL;
+ BIGNUM *g1_p = NULL, *g1_a = NULL, *g1_b = NULL, *g1_x = NULL, *g1_y = NULL,
+ *g1_order = NULL, *g1_cf = NULL, *g2_cf = NULL;
+
+ TEST_info("Curve %s cardinality test", OBJ_nid2sn(nid));
+
+ if (!TEST_ptr(ctx = BN_CTX_new())
+ || !TEST_ptr(g1 = EC_GROUP_new_by_curve_name(nid))) {
+ BN_CTX_free(ctx);
+ return 0;
+ }
+
+ is_binary = (EC_GROUP_get_field_type(g1) == NID_X9_62_characteristic_two_field);
+
+ BN_CTX_start(ctx);
+ g1_p = BN_CTX_get(ctx);
+ g1_a = BN_CTX_get(ctx);
+ g1_b = BN_CTX_get(ctx);
+ g1_x = BN_CTX_get(ctx);
+ g1_y = BN_CTX_get(ctx);
+ g1_order = BN_CTX_get(ctx);
+ g1_cf = BN_CTX_get(ctx);
+
+ if (!TEST_ptr(g2_cf = BN_CTX_get(ctx))
+ /* pull out the explicit curve parameters */
+ || !TEST_true(EC_GROUP_get_curve(g1, g1_p, g1_a, g1_b, ctx))
+ || !TEST_true(EC_POINT_get_affine_coordinates(g1,
+ EC_GROUP_get0_generator(g1), g1_x, g1_y, ctx))
+ || !TEST_true(BN_copy(g1_order, EC_GROUP_get0_order(g1)))
+ || !TEST_true(EC_GROUP_get_cofactor(g1, g1_cf, ctx))
+ /* construct g2 manually with g1 parameters */
+#ifndef OPENSSL_NO_EC2M
+ || !TEST_ptr(g2 = (is_binary) ?
+ EC_GROUP_new_curve_GF2m(g1_p, g1_a, g1_b, ctx) :
+ EC_GROUP_new_curve_GFp(g1_p, g1_a, g1_b, ctx))
+#else
+ || !TEST_int_eq(0, is_binary)
+ || !TEST_ptr(g2 = EC_GROUP_new_curve_GFp(g1_p, g1_a, g1_b, ctx))
+#endif
+ || !TEST_ptr(g2_gen = EC_POINT_new(g2))
+ || !TEST_true(EC_POINT_set_affine_coordinates(g2, g2_gen, g1_x, g1_y, ctx))
+ /* pass NULL cofactor: lib should compute it */
+ || !TEST_true(EC_GROUP_set_generator(g2, g2_gen, g1_order, NULL))
+ || !TEST_true(EC_GROUP_get_cofactor(g2, g2_cf, ctx))
+ || !TEST_BN_eq(g1_cf, g2_cf)
+ /* pass zero cofactor: lib should compute it */
+ || !TEST_true(BN_set_word(g2_cf, 0))
+ || !TEST_true(EC_GROUP_set_generator(g2, g2_gen, g1_order, g2_cf))
+ || !TEST_true(EC_GROUP_get_cofactor(g2, g2_cf, ctx))
+ || !TEST_BN_eq(g1_cf, g2_cf)
+ /* negative test for invalid cofactor */
+ || !TEST_true(BN_set_word(g2_cf, 0))
+ || !TEST_true(BN_sub(g2_cf, g2_cf, BN_value_one()))
+ || !TEST_false(EC_GROUP_set_generator(g2, g2_gen, g1_order, g2_cf))
+ /* negative test for NULL order */
+ || !TEST_false(EC_GROUP_set_generator(g2, g2_gen, NULL, NULL))
+ /* negative test for zero order */
+ || !TEST_true(BN_set_word(g1_order, 0))
+ || !TEST_false(EC_GROUP_set_generator(g2, g2_gen, g1_order, NULL))
+ /* negative test for negative order */
+ || !TEST_true(BN_set_word(g2_cf, 0))
+ || !TEST_true(BN_sub(g2_cf, g2_cf, BN_value_one()))
+ || !TEST_false(EC_GROUP_set_generator(g2, g2_gen, g1_order, NULL))
+ /* negative test for too large order */
+ || !TEST_true(BN_lshift(g1_order, g1_p, 2))
+ || !TEST_false(EC_GROUP_set_generator(g2, g2_gen, g1_order, NULL)))
+ goto err;
+ ret = 1;
+ err:
+ EC_POINT_free(g2_gen);
+ EC_GROUP_free(g1);
+ EC_GROUP_free(g2);
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ return ret;
+}
+
+static int check_ec_key_field_public_range_test(int id)
+{
+ int ret = 0, type = 0;
+ const EC_POINT *pub = NULL;
+ const EC_GROUP *group = NULL;
+ const BIGNUM *field = NULL;
+ BIGNUM *x = NULL, *y = NULL;
+ EC_KEY *key = NULL;
+
+ if (!TEST_ptr(x = BN_new())
+ || !TEST_ptr(y = BN_new())
+ || !TEST_ptr(key = EC_KEY_new_by_curve_name(curves[id].nid))
+ || !TEST_ptr(group = EC_KEY_get0_group(key))
+ || !TEST_ptr(field = EC_GROUP_get0_field(group))
+ || !TEST_int_gt(EC_KEY_generate_key(key), 0)
+ || !TEST_int_gt(EC_KEY_check_key(key), 0)
+ || !TEST_ptr(pub = EC_KEY_get0_public_key(key))
+ || !TEST_int_gt(EC_POINT_get_affine_coordinates(group, pub, x, y,
+ NULL), 0))
+ goto err;
+
+ /*
+ * Make the public point out of range by adding the field (which will still
+ * be the same point on the curve). The add is different for char2 fields.
+ */
+ type = EC_GROUP_get_field_type(group);
+#ifndef OPENSSL_NO_EC2M
+ if (type == NID_X9_62_characteristic_two_field) {
+ /* test for binary curves */
+ if (!TEST_true(BN_GF2m_add(x, x, field)))
+ goto err;
+ } else
+#endif
+ if (type == NID_X9_62_prime_field) {
+ /* test for prime curves */
+ if (!TEST_true(BN_add(x, x, field)))
+ goto err;
+ } else {
+ /* this should never happen */
+ TEST_error("Unsupported EC_METHOD field_type");
+ goto err;
+ }
+ if (!TEST_int_le(EC_KEY_set_public_key_affine_coordinates(key, x, y), 0))
+ goto err;
+
+ ret = 1;
+err:
+ BN_free(x);
+ BN_free(y);
+ EC_KEY_free(key);
+ return ret;
+}
+
+/*
+ * Helper for ec_point_hex2point_test
+ *
+ * Self-tests EC_POINT_point2hex() against EC_POINT_hex2point() for the given
+ * (group,P) pair.
+ *
+ * If P is NULL use point at infinity.
+ */
+static ossl_inline
+int ec_point_hex2point_test_helper(const EC_GROUP *group, const EC_POINT *P,
+ point_conversion_form_t form,
+ BN_CTX *bnctx)
+{
+ int ret = 0;
+ EC_POINT *Q = NULL, *Pinf = NULL;
+ char *hex = NULL;
+
+ if (P == NULL) {
+ /* If P is NULL use point at infinity. */
+ if (!TEST_ptr(Pinf = EC_POINT_new(group))
+ || !TEST_true(EC_POINT_set_to_infinity(group, Pinf)))
+ goto err;
+ P = Pinf;
+ }
+
+ if (!TEST_ptr(hex = EC_POINT_point2hex(group, P, form, bnctx))
+ || !TEST_ptr(Q = EC_POINT_hex2point(group, hex, NULL, bnctx))
+ || !TEST_int_eq(0, EC_POINT_cmp(group, Q, P, bnctx)))
+ goto err;
+
+ /*
+ * The next check is most likely superfluous, as EC_POINT_cmp should already
+ * cover this.
+ * Nonetheless it increases the test coverage for EC_POINT_is_at_infinity,
+ * so we include it anyway!
+ */
+ if (Pinf != NULL
+ && !TEST_true(EC_POINT_is_at_infinity(group, Q)))
+ goto err;
+
+ ret = 1;
+
+ err:
+ EC_POINT_free(Pinf);
+ OPENSSL_free(hex);
+ EC_POINT_free(Q);
+
+ return ret;
+}
+
+/*
+ * This test self-validates EC_POINT_hex2point() and EC_POINT_point2hex()
+ */
+static int ec_point_hex2point_test(int id)
+{
+ int ret = 0, nid;
+ EC_GROUP *group = NULL;
+ const EC_POINT *G = NULL;
+ EC_POINT *P = NULL;
+ BN_CTX * bnctx = NULL;
+
+ /* Do some setup */
+ nid = curves[id].nid;
+ if (!TEST_ptr(bnctx = BN_CTX_new())
+ || !TEST_ptr(group = EC_GROUP_new_by_curve_name(nid))
+ || !TEST_ptr(G = EC_GROUP_get0_generator(group))
+ || !TEST_ptr(P = EC_POINT_dup(G, group)))
+ goto err;
+
+ if (!TEST_true(ec_point_hex2point_test_helper(group, P,
+ POINT_CONVERSION_COMPRESSED,
+ bnctx))
+ || !TEST_true(ec_point_hex2point_test_helper(group, NULL,
+ POINT_CONVERSION_COMPRESSED,
+ bnctx))
+ || !TEST_true(ec_point_hex2point_test_helper(group, P,
+ POINT_CONVERSION_UNCOMPRESSED,
+ bnctx))
+ || !TEST_true(ec_point_hex2point_test_helper(group, NULL,
+ POINT_CONVERSION_UNCOMPRESSED,
+ bnctx))
+ || !TEST_true(ec_point_hex2point_test_helper(group, P,
+ POINT_CONVERSION_HYBRID,
+ bnctx))
+ || !TEST_true(ec_point_hex2point_test_helper(group, NULL,
+ POINT_CONVERSION_HYBRID,
+ bnctx)))
+ goto err;
+
+ ret = 1;
+
+ err:
+ EC_POINT_free(P);
+ EC_GROUP_free(group);
+ BN_CTX_free(bnctx);
+
+ return ret;
+}
+
+static int do_test_custom_explicit_fromdata(EC_GROUP *group, BN_CTX *ctx,
+ unsigned char *gen, int gen_size)
+{
+ int ret = 0, i_out;
+ EVP_PKEY_CTX *pctx = NULL;
+ EVP_PKEY *pkeyparam = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ const char *field_name;
+ OSSL_PARAM *params = NULL;
+ const OSSL_PARAM *gettable;
+ BIGNUM *p, *a, *b;
+ BIGNUM *p_out = NULL, *a_out = NULL, *b_out = NULL;
+ BIGNUM *order_out = NULL, *cofactor_out = NULL;
+ char name[80];
+ unsigned char buf[1024];
+ size_t buf_len, name_len;
+#ifndef OPENSSL_NO_EC2M
+ unsigned int k1 = 0, k2 = 0, k3 = 0;
+ const char *basis_name = NULL;
+#endif
+
+ p = BN_CTX_get(ctx);
+ a = BN_CTX_get(ctx);
+ b = BN_CTX_get(ctx);
+
+ if (!TEST_ptr(b)
+ || !TEST_ptr(bld = OSSL_PARAM_BLD_new()))
+ goto err;
+
+ if (EC_GROUP_get_field_type(group) == NID_X9_62_prime_field) {
+ field_name = SN_X9_62_prime_field;
+ } else {
+ field_name = SN_X9_62_characteristic_two_field;
+#ifndef OPENSSL_NO_EC2M
+ if (EC_GROUP_get_basis_type(group) == NID_X9_62_tpBasis) {
+ basis_name = SN_X9_62_tpBasis;
+ if (!TEST_true(EC_GROUP_get_trinomial_basis(group, &k1)))
+ goto err;
+ } else {
+ basis_name = SN_X9_62_ppBasis;
+ if (!TEST_true(EC_GROUP_get_pentanomial_basis(group, &k1, &k2, &k3)))
+ goto err;
+ }
+#endif /* OPENSSL_NO_EC2M */
+ }
+ if (!TEST_true(EC_GROUP_get_curve(group, p, a, b, ctx))
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
+ OSSL_PKEY_PARAM_EC_FIELD_TYPE, field_name, 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_P, p))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_A, a))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_B, b)))
+ goto err;
+
+ if (EC_GROUP_get0_seed(group) != NULL) {
+ if (!TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_EC_SEED, EC_GROUP_get0_seed(group),
+ EC_GROUP_get_seed_len(group))))
+ goto err;
+ }
+ if (EC_GROUP_get0_cofactor(group) != NULL) {
+ if (!TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_COFACTOR,
+ EC_GROUP_get0_cofactor(group))))
+ goto err;
+ }
+
+ if (!TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_EC_GENERATOR, gen, gen_size))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_ORDER,
+ EC_GROUP_get0_order(group))))
+ goto err;
+
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(NULL, "EC", NULL))
+ || !TEST_int_gt(EVP_PKEY_fromdata_init(pctx), 0)
+ || !TEST_int_gt(EVP_PKEY_fromdata(pctx, &pkeyparam,
+ EVP_PKEY_KEY_PARAMETERS, params), 0))
+ goto err;
+
+ /*- Check that all the set values are retrievable -*/
+
+ /* There should be no match to a group name since the generator changed */
+ if (!TEST_false(EVP_PKEY_get_utf8_string_param(pkeyparam,
+ OSSL_PKEY_PARAM_GROUP_NAME, name, sizeof(name),
+ &name_len)))
+ goto err;
+
+ /* The encoding should be explicit as it has no group */
+ if (!TEST_true(EVP_PKEY_get_utf8_string_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_ENCODING,
+ name, sizeof(name), &name_len))
+ || !TEST_str_eq(name, OSSL_PKEY_EC_ENCODING_EXPLICIT))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_get_utf8_string_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_FIELD_TYPE, name, sizeof(name),
+ &name_len))
+ || !TEST_str_eq(name, field_name))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_get_octet_string_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_GENERATOR, buf, sizeof(buf), &buf_len))
+ || !TEST_mem_eq(buf, (int)buf_len, gen, gen_size))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_get_bn_param(pkeyparam, OSSL_PKEY_PARAM_EC_P, &p_out))
+ || !TEST_BN_eq(p_out, p)
+ || !TEST_true(EVP_PKEY_get_bn_param(pkeyparam, OSSL_PKEY_PARAM_EC_A,
+ &a_out))
+ || !TEST_BN_eq(a_out, a)
+ || !TEST_true(EVP_PKEY_get_bn_param(pkeyparam, OSSL_PKEY_PARAM_EC_B,
+ &b_out))
+ || !TEST_BN_eq(b_out, b)
+ || !TEST_true(EVP_PKEY_get_bn_param(pkeyparam, OSSL_PKEY_PARAM_EC_ORDER,
+ &order_out))
+ || !TEST_BN_eq(order_out, EC_GROUP_get0_order(group)))
+ goto err;
+
+ if (EC_GROUP_get0_cofactor(group) != NULL) {
+ if (!TEST_true(EVP_PKEY_get_bn_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_COFACTOR, &cofactor_out))
+ || !TEST_BN_eq(cofactor_out, EC_GROUP_get0_cofactor(group)))
+ goto err;
+ }
+ if (EC_GROUP_get0_seed(group) != NULL) {
+ if (!TEST_true(EVP_PKEY_get_octet_string_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_SEED, buf, sizeof(buf), &buf_len))
+ || !TEST_mem_eq(buf, buf_len, EC_GROUP_get0_seed(group),
+ EC_GROUP_get_seed_len(group)))
+ goto err;
+ }
+
+ if (EC_GROUP_get_field_type(group) == NID_X9_62_prime_field) {
+ /* No extra fields should be set for a prime field */
+ if (!TEST_false(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_M, &i_out))
+ || !TEST_false(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS, &i_out))
+ || !TEST_false(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_PP_K1, &i_out))
+ || !TEST_false(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_PP_K2, &i_out))
+ || !TEST_false(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_PP_K3, &i_out))
+ || !TEST_false(EVP_PKEY_get_utf8_string_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_TYPE, name, sizeof(name),
+ &name_len)))
+ goto err;
+ } else {
+#ifndef OPENSSL_NO_EC2M
+ if (!TEST_true(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_M, &i_out))
+ || !TEST_int_eq(EC_GROUP_get_degree(group), i_out)
+ || !TEST_true(EVP_PKEY_get_utf8_string_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_TYPE, name, sizeof(name),
+ &name_len))
+ || !TEST_str_eq(name, basis_name))
+ goto err;
+
+ if (EC_GROUP_get_basis_type(group) == NID_X9_62_tpBasis) {
+ if (!TEST_true(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS, &i_out))
+ || !TEST_int_eq(k1, i_out)
+ || !TEST_false(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_PP_K1, &i_out))
+ || !TEST_false(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_PP_K2, &i_out))
+ || !TEST_false(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_PP_K3, &i_out)))
+ goto err;
+ } else {
+ if (!TEST_false(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS, &i_out))
+ || !TEST_true(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_PP_K1, &i_out))
+ || !TEST_int_eq(k1, i_out)
+ || !TEST_true(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_PP_K2, &i_out))
+ || !TEST_int_eq(k2, i_out)
+ || !TEST_true(EVP_PKEY_get_int_param(pkeyparam,
+ OSSL_PKEY_PARAM_EC_CHAR2_PP_K3, &i_out))
+ || !TEST_int_eq(k3, i_out))
+ goto err;
+ }
+#endif /* OPENSSL_NO_EC2M */
+ }
+ if (!TEST_ptr(gettable = EVP_PKEY_gettable_params(pkeyparam))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_GROUP_NAME))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_ENCODING))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_FIELD_TYPE))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_P))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_A))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_B))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_GENERATOR))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_ORDER))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_COFACTOR))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_SEED))
+#ifndef OPENSSL_NO_EC2M
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_CHAR2_M))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_CHAR2_TYPE))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_CHAR2_PP_K1))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_CHAR2_PP_K2))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable, OSSL_PKEY_PARAM_EC_CHAR2_PP_K3))
+#endif
+ )
+ goto err;
+ ret = 1;
+err:
+ BN_free(order_out);
+ BN_free(cofactor_out);
+ BN_free(a_out);
+ BN_free(b_out);
+ BN_free(p_out);
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ EVP_PKEY_free(pkeyparam);
+ EVP_PKEY_CTX_free(pctx);
+ return ret;
+}
+
+/*
+ * check the EC_METHOD respects the supplied EC_GROUP_set_generator G
+ */
+static int custom_generator_test(int id)
+{
+ int ret = 0, nid, bsize;
+ EC_GROUP *group = NULL;
+ EC_POINT *G2 = NULL, *Q1 = NULL, *Q2 = NULL;
+ BN_CTX *ctx = NULL;
+ BIGNUM *k = NULL;
+ unsigned char *b1 = NULL, *b2 = NULL;
+
+ /* Do some setup */
+ nid = curves[id].nid;
+ TEST_note("Curve %s", OBJ_nid2sn(nid));
+ if (!TEST_ptr(ctx = BN_CTX_new()))
+ return 0;
+
+ BN_CTX_start(ctx);
+
+ if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(nid)))
+ goto err;
+
+ /* expected byte length of encoded points */
+ bsize = (EC_GROUP_get_degree(group) + 7) / 8;
+ bsize = 1 + 2 * bsize; /* UNCOMPRESSED_POINT format */
+
+ if (!TEST_ptr(k = BN_CTX_get(ctx))
+ /* fetch a testing scalar k != 0,1 */
+ || !TEST_true(BN_rand(k, EC_GROUP_order_bits(group) - 1,
+ BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY))
+ /* make k even */
+ || !TEST_true(BN_clear_bit(k, 0))
+ || !TEST_ptr(G2 = EC_POINT_new(group))
+ || !TEST_ptr(Q1 = EC_POINT_new(group))
+ /* Q1 := kG */
+ || !TEST_true(EC_POINT_mul(group, Q1, k, NULL, NULL, ctx))
+ /* pull out the bytes of that */
+ || !TEST_int_eq(EC_POINT_point2oct(group, Q1,
+ POINT_CONVERSION_UNCOMPRESSED, NULL,
+ 0, ctx), bsize)
+ || !TEST_ptr(b1 = OPENSSL_malloc(bsize))
+ || !TEST_int_eq(EC_POINT_point2oct(group, Q1,
+ POINT_CONVERSION_UNCOMPRESSED, b1,
+ bsize, ctx), bsize)
+ /* new generator is G2 := 2G */
+ || !TEST_true(EC_POINT_dbl(group, G2, EC_GROUP_get0_generator(group),
+ ctx))
+ || !TEST_true(EC_GROUP_set_generator(group, G2,
+ EC_GROUP_get0_order(group),
+ EC_GROUP_get0_cofactor(group)))
+ || !TEST_ptr(Q2 = EC_POINT_new(group))
+ || !TEST_true(BN_rshift1(k, k))
+ /* Q2 := k/2 G2 */
+ || !TEST_true(EC_POINT_mul(group, Q2, k, NULL, NULL, ctx))
+ || !TEST_int_eq(EC_POINT_point2oct(group, Q2,
+ POINT_CONVERSION_UNCOMPRESSED, NULL,
+ 0, ctx), bsize)
+ || !TEST_ptr(b2 = OPENSSL_malloc(bsize))
+ || !TEST_int_eq(EC_POINT_point2oct(group, Q2,
+ POINT_CONVERSION_UNCOMPRESSED, b2,
+ bsize, ctx), bsize)
+ /* Q1 = kG = k/2 G2 = Q2 should hold */
+ || !TEST_mem_eq(b1, bsize, b2, bsize))
+ goto err;
+
+ if (!do_test_custom_explicit_fromdata(group, ctx, b1, bsize))
+ goto err;
+
+ ret = 1;
+
+ err:
+ EC_POINT_free(Q1);
+ EC_POINT_free(Q2);
+ EC_POINT_free(G2);
+ EC_GROUP_free(group);
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ OPENSSL_free(b1);
+ OPENSSL_free(b2);
+
+ return ret;
+}
+
+/*
+ * check creation of curves from explicit params through the public API
+ */
+static int custom_params_test(int id)
+{
+ int ret = 0, nid, bsize;
+ const char *curve_name = NULL;
+ EC_GROUP *group = NULL, *altgroup = NULL;
+ EC_POINT *G2 = NULL, *Q1 = NULL, *Q2 = NULL;
+ const EC_POINT *Q = NULL;
+ BN_CTX *ctx = NULL;
+ BIGNUM *k = NULL;
+ unsigned char *buf1 = NULL, *buf2 = NULL;
+ const BIGNUM *z = NULL, *cof = NULL, *priv1 = NULL;
+ BIGNUM *p = NULL, *a = NULL, *b = NULL;
+ int is_prime = 0;
+ EC_KEY *eckey1 = NULL, *eckey2 = NULL;
+ EVP_PKEY *pkey1 = NULL, *pkey2 = NULL;
+ EVP_PKEY_CTX *pctx1 = NULL, *pctx2 = NULL;
+ size_t sslen, t;
+ unsigned char *pub1 = NULL , *pub2 = NULL;
+ OSSL_PARAM_BLD *param_bld = NULL;
+ OSSL_PARAM *params1 = NULL, *params2 = NULL;
+
+ /* Do some setup */
+ nid = curves[id].nid;
+ curve_name = OBJ_nid2sn(nid);
+ TEST_note("Curve %s", curve_name);
+
+ if (nid == NID_sm2)
+ return TEST_skip("custom params not supported with SM2");
+
+ if (!TEST_ptr(ctx = BN_CTX_new()))
+ return 0;
+
+ BN_CTX_start(ctx);
+ if (!TEST_ptr(p = BN_CTX_get(ctx))
+ || !TEST_ptr(a = BN_CTX_get(ctx))
+ || !TEST_ptr(b = BN_CTX_get(ctx))
+ || !TEST_ptr(k = BN_CTX_get(ctx)))
+ goto err;
+
+ if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(nid)))
+ goto err;
+
+ is_prime = EC_GROUP_get_field_type(group) == NID_X9_62_prime_field;
+#ifdef OPENSSL_NO_EC2M
+ if (!is_prime) {
+ ret = TEST_skip("binary curves not supported in this build");
+ goto err;
+ }
+#endif
+
+ /* expected byte length of encoded points */
+ bsize = (EC_GROUP_get_degree(group) + 7) / 8;
+ bsize = 1 + 2 * bsize; /* UNCOMPRESSED_POINT format */
+
+ /* extract parameters from built-in curve */
+ if (!TEST_true(EC_GROUP_get_curve(group, p, a, b, ctx))
+ || !TEST_ptr(G2 = EC_POINT_new(group))
+ /* new generator is G2 := 2G */
+ || !TEST_true(EC_POINT_dbl(group, G2,
+ EC_GROUP_get0_generator(group), ctx))
+ /* pull out the bytes of that */
+ || !TEST_int_eq(EC_POINT_point2oct(group, G2,
+ POINT_CONVERSION_UNCOMPRESSED,
+ NULL, 0, ctx), bsize)
+ || !TEST_ptr(buf1 = OPENSSL_malloc(bsize))
+ || !TEST_int_eq(EC_POINT_point2oct(group, G2,
+ POINT_CONVERSION_UNCOMPRESSED,
+ buf1, bsize, ctx), bsize)
+ || !TEST_ptr(z = EC_GROUP_get0_order(group))
+ || !TEST_ptr(cof = EC_GROUP_get0_cofactor(group))
+ )
+ goto err;
+
+ /* create a new group using same params (but different generator) */
+ if (is_prime) {
+ if (!TEST_ptr(altgroup = EC_GROUP_new_curve_GFp(p, a, b, ctx)))
+ goto err;
+ }
+#ifndef OPENSSL_NO_EC2M
+ else {
+ if (!TEST_ptr(altgroup = EC_GROUP_new_curve_GF2m(p, a, b, ctx)))
+ goto err;
+ }
+#endif
+
+ /* set 2*G as the generator of altgroup */
+ EC_POINT_free(G2); /* discard G2 as it refers to the original group */
+ if (!TEST_ptr(G2 = EC_POINT_new(altgroup))
+ || !TEST_true(EC_POINT_oct2point(altgroup, G2, buf1, bsize, ctx))
+ || !TEST_int_eq(EC_POINT_is_on_curve(altgroup, G2, ctx), 1)
+ || !TEST_true(EC_GROUP_set_generator(altgroup, G2, z, cof))
+ )
+ goto err;
+
+ /* verify math checks out */
+ if (/* allocate temporary points on group and altgroup */
+ !TEST_ptr(Q1 = EC_POINT_new(group))
+ || !TEST_ptr(Q2 = EC_POINT_new(altgroup))
+ /* fetch a testing scalar k != 0,1 */
+ || !TEST_true(BN_rand(k, EC_GROUP_order_bits(group) - 1,
+ BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY))
+ /* make k even */
+ || !TEST_true(BN_clear_bit(k, 0))
+ /* Q1 := kG on group */
+ || !TEST_true(EC_POINT_mul(group, Q1, k, NULL, NULL, ctx))
+ /* pull out the bytes of that */
+ || !TEST_int_eq(EC_POINT_point2oct(group, Q1,
+ POINT_CONVERSION_UNCOMPRESSED,
+ NULL, 0, ctx), bsize)
+ || !TEST_int_eq(EC_POINT_point2oct(group, Q1,
+ POINT_CONVERSION_UNCOMPRESSED,
+ buf1, bsize, ctx), bsize)
+ /* k := k/2 */
+ || !TEST_true(BN_rshift1(k, k))
+ /* Q2 := k/2 G2 on altgroup */
+ || !TEST_true(EC_POINT_mul(altgroup, Q2, k, NULL, NULL, ctx))
+ /* pull out the bytes of that */
+ || !TEST_int_eq(EC_POINT_point2oct(altgroup, Q2,
+ POINT_CONVERSION_UNCOMPRESSED,
+ NULL, 0, ctx), bsize)
+ || !TEST_ptr(buf2 = OPENSSL_malloc(bsize))
+ || !TEST_int_eq(EC_POINT_point2oct(altgroup, Q2,
+ POINT_CONVERSION_UNCOMPRESSED,
+ buf2, bsize, ctx), bsize)
+ /* Q1 = kG = k/2 G2 = Q2 should hold */
+ || !TEST_mem_eq(buf1, bsize, buf2, bsize))
+ goto err;
+
+ /* create two `EC_KEY`s on altgroup */
+ if (!TEST_ptr(eckey1 = EC_KEY_new())
+ || !TEST_true(EC_KEY_set_group(eckey1, altgroup))
+ || !TEST_true(EC_KEY_generate_key(eckey1))
+ || !TEST_ptr(eckey2 = EC_KEY_new())
+ || !TEST_true(EC_KEY_set_group(eckey2, altgroup))
+ || !TEST_true(EC_KEY_generate_key(eckey2)))
+ goto err;
+
+ /* retrieve priv1 for later */
+ if (!TEST_ptr(priv1 = EC_KEY_get0_private_key(eckey1)))
+ goto err;
+
+ /*
+ * retrieve bytes for pub1 for later
+ *
+ * We compute the pub key in the original group as we will later use it to
+ * define a provider key in the built-in group.
+ */
+ if (!TEST_true(EC_POINT_mul(group, Q1, priv1, NULL, NULL, ctx))
+ || !TEST_int_eq(EC_POINT_point2oct(group, Q1,
+ POINT_CONVERSION_UNCOMPRESSED,
+ NULL, 0, ctx), bsize)
+ || !TEST_ptr(pub1 = OPENSSL_malloc(bsize))
+ || !TEST_int_eq(EC_POINT_point2oct(group, Q1,
+ POINT_CONVERSION_UNCOMPRESSED,
+ pub1, bsize, ctx), bsize))
+ goto err;
+
+ /* retrieve bytes for pub2 for later */
+ if (!TEST_ptr(Q = EC_KEY_get0_public_key(eckey2))
+ || !TEST_int_eq(EC_POINT_point2oct(altgroup, Q,
+ POINT_CONVERSION_UNCOMPRESSED,
+ NULL, 0, ctx), bsize)
+ || !TEST_ptr(pub2 = OPENSSL_malloc(bsize))
+ || !TEST_int_eq(EC_POINT_point2oct(altgroup, Q,
+ POINT_CONVERSION_UNCOMPRESSED,
+ pub2, bsize, ctx), bsize))
+ goto err;
+
+ /* create two `EVP_PKEY`s from the `EC_KEY`s */
+ if(!TEST_ptr(pkey1 = EVP_PKEY_new())
+ || !TEST_int_eq(EVP_PKEY_assign_EC_KEY(pkey1, eckey1), 1))
+ goto err;
+ eckey1 = NULL; /* ownership passed to pkey1 */
+ if(!TEST_ptr(pkey2 = EVP_PKEY_new())
+ || !TEST_int_eq(EVP_PKEY_assign_EC_KEY(pkey2, eckey2), 1))
+ goto err;
+ eckey2 = NULL; /* ownership passed to pkey2 */
+
+ /* Compute keyexchange in both directions */
+ if (!TEST_ptr(pctx1 = EVP_PKEY_CTX_new(pkey1, NULL))
+ || !TEST_int_eq(EVP_PKEY_derive_init(pctx1), 1)
+ || !TEST_int_eq(EVP_PKEY_derive_set_peer(pctx1, pkey2), 1)
+ || !TEST_int_eq(EVP_PKEY_derive(pctx1, NULL, &sslen), 1)
+ || !TEST_int_gt(bsize, sslen)
+ || !TEST_int_eq(EVP_PKEY_derive(pctx1, buf1, &sslen), 1))
+ goto err;
+ if (!TEST_ptr(pctx2 = EVP_PKEY_CTX_new(pkey2, NULL))
+ || !TEST_int_eq(EVP_PKEY_derive_init(pctx2), 1)
+ || !TEST_int_eq(EVP_PKEY_derive_set_peer(pctx2, pkey1), 1)
+ || !TEST_int_eq(EVP_PKEY_derive(pctx2, NULL, &t), 1)
+ || !TEST_int_gt(bsize, t)
+ || !TEST_int_le(sslen, t)
+ || !TEST_int_eq(EVP_PKEY_derive(pctx2, buf2, &t), 1))
+ goto err;
+
+ /* Both sides should expect the same shared secret */
+ if (!TEST_mem_eq(buf1, sslen, buf2, t))
+ goto err;
+
+ /* Build parameters for provider-native keys */
+ if (!TEST_ptr(param_bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(param_bld,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ curve_name, 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_string(param_bld,
+ OSSL_PKEY_PARAM_PUB_KEY,
+ pub1, bsize))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(param_bld,
+ OSSL_PKEY_PARAM_PRIV_KEY,
+ priv1))
+ || !TEST_ptr(params1 = OSSL_PARAM_BLD_to_param(param_bld)))
+ goto err;
+
+ OSSL_PARAM_BLD_free(param_bld);
+ if (!TEST_ptr(param_bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(param_bld,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ curve_name, 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_string(param_bld,
+ OSSL_PKEY_PARAM_PUB_KEY,
+ pub2, bsize))
+ || !TEST_ptr(params2 = OSSL_PARAM_BLD_to_param(param_bld)))
+ goto err;
+
+ /* create two new provider-native `EVP_PKEY`s */
+ EVP_PKEY_CTX_free(pctx2);
+ if (!TEST_ptr(pctx2 = EVP_PKEY_CTX_new_from_name(NULL, "EC", NULL))
+ || !TEST_int_eq(EVP_PKEY_fromdata_init(pctx2), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(pctx2, &pkey1, EVP_PKEY_KEYPAIR,
+ params1), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(pctx2, &pkey2, EVP_PKEY_PUBLIC_KEY,
+ params2), 1))
+ goto err;
+
+ /* compute keyexchange once more using the provider keys */
+ EVP_PKEY_CTX_free(pctx1);
+ if (!TEST_ptr(pctx1 = EVP_PKEY_CTX_new(pkey1, NULL))
+ || !TEST_int_eq(EVP_PKEY_derive_init(pctx1), 1)
+ || !TEST_int_eq(EVP_PKEY_derive_set_peer(pctx1, pkey2), 1)
+ || !TEST_int_eq(EVP_PKEY_derive(pctx1, NULL, &t), 1)
+ || !TEST_int_gt(bsize, t)
+ || !TEST_int_le(sslen, t)
+ || !TEST_int_eq(EVP_PKEY_derive(pctx1, buf1, &t), 1)
+ /* compare with previous result */
+ || !TEST_mem_eq(buf1, t, buf2, sslen))
+ goto err;
+
+ ret = 1;
+
+ err:
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ OSSL_PARAM_BLD_free(param_bld);
+ OSSL_PARAM_free(params1);
+ OSSL_PARAM_free(params2);
+ EC_POINT_free(Q1);
+ EC_POINT_free(Q2);
+ EC_POINT_free(G2);
+ EC_GROUP_free(group);
+ EC_GROUP_free(altgroup);
+ OPENSSL_free(buf1);
+ OPENSSL_free(buf2);
+ OPENSSL_free(pub1);
+ OPENSSL_free(pub2);
+ EC_KEY_free(eckey1);
+ EC_KEY_free(eckey2);
+ EVP_PKEY_free(pkey1);
+ EVP_PKEY_free(pkey2);
+ EVP_PKEY_CTX_free(pctx1);
+ EVP_PKEY_CTX_free(pctx2);
+
+ return ret;
+}
+
+static int ec_d2i_publickey_test(void)
+{
+ unsigned char buf[1000];
+ unsigned char *pubkey_enc = buf;
+ const unsigned char *pk_enc = pubkey_enc;
+ EVP_PKEY *gen_key = NULL, *decoded_key = NULL;
+ EVP_PKEY_CTX *pctx = NULL;
+ int pklen, ret = 0;
+ OSSL_PARAM params[2];
+
+ if (!TEST_ptr(gen_key = EVP_EC_gen("P-256")))
+ goto err;
+
+ if (!TEST_int_gt(pklen = i2d_PublicKey(gen_key, &pubkey_enc), 0))
+ goto err;
+
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME,
+ "P-256", 0);
+ params[1] = OSSL_PARAM_construct_end();
+
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(NULL, "EC", NULL))
+ || !TEST_true(EVP_PKEY_fromdata_init(pctx))
+ || !TEST_true(EVP_PKEY_fromdata(pctx, &decoded_key,
+ OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ params))
+ || !TEST_ptr(decoded_key)
+ || !TEST_ptr(decoded_key = d2i_PublicKey(EVP_PKEY_EC, &decoded_key,
+ &pk_enc, pklen)))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_eq(gen_key, decoded_key)))
+ goto err;
+ ret = 1;
+
+ err:
+ EVP_PKEY_CTX_free(pctx);
+ EVP_PKEY_free(gen_key);
+ EVP_PKEY_free(decoded_key);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ crv_len = EC_get_builtin_curves(NULL, 0);
+ if (!TEST_ptr(curves = OPENSSL_malloc(sizeof(*curves) * crv_len))
+ || !TEST_true(EC_get_builtin_curves(curves, crv_len)))
+ return 0;
+
+ ADD_TEST(parameter_test);
+ ADD_TEST(cofactor_range_test);
+ ADD_ALL_TESTS(cardinality_test, crv_len);
+ ADD_TEST(prime_field_tests);
+#ifndef OPENSSL_NO_EC2M
+ ADD_TEST(hybrid_point_encoding_test);
+ ADD_TEST(char2_field_tests);
+ ADD_ALL_TESTS(char2_curve_test, OSSL_NELEM(char2_curve_tests));
+#endif
+ ADD_ALL_TESTS(nistp_single_test, OSSL_NELEM(nistp_tests_params));
+ ADD_ALL_TESTS(internal_curve_test, crv_len);
+ ADD_ALL_TESTS(internal_curve_test_method, crv_len);
+ ADD_TEST(group_field_test);
+ ADD_ALL_TESTS(check_named_curve_test, crv_len);
+ ADD_ALL_TESTS(check_named_curve_lookup_test, crv_len);
+ ADD_ALL_TESTS(check_ec_key_field_public_range_test, crv_len);
+ ADD_ALL_TESTS(check_named_curve_from_ecparameters, crv_len);
+ ADD_ALL_TESTS(ec_point_hex2point_test, crv_len);
+ ADD_ALL_TESTS(custom_generator_test, crv_len);
+ ADD_ALL_TESTS(custom_params_test, crv_len);
+ ADD_TEST(ec_d2i_publickey_test);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OPENSSL_free(curves);
+}
diff --git a/test/endecode_test.c b/test/endecode_test.c
new file mode 100644
index 000000000000..5158b39ee41f
--- /dev/null
+++ b/test/endecode_test.c
@@ -0,0 +1,1502 @@
+/*
+ * Copyright 2020-2023 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_dispatch.h>
+#include <openssl/evp.h>
+#include <openssl/pem.h>
+#include <openssl/rsa.h>
+#include <openssl/x509.h>
+#include <openssl/core_names.h>
+#include <openssl/params.h>
+#include <openssl/param_build.h>
+#include <openssl/encoder.h>
+#include <openssl/decoder.h>
+
+#include "internal/cryptlib.h" /* ossl_assert */
+#include "crypto/pem.h" /* For PVK and "blob" PEM headers */
+#include "crypto/evp.h" /* For evp_pkey_is_provided() */
+
+#include "helpers/predefined_dhparams.h"
+#include "testutil.h"
+
+/* Extended test macros to allow passing file & line number */
+#define TEST_FL_ptr(a) test_ptr(file, line, #a, a)
+#define TEST_FL_mem_eq(a, m, b, n) test_mem_eq(file, line, #a, #b, a, m, b, n)
+#define TEST_FL_strn_eq(a, b, n) test_strn_eq(file, line, #a, #b, a, n, b, n)
+#define TEST_FL_strn2_eq(a, m, b, n) test_strn_eq(file, line, #a, #b, a, m, b, n)
+#define TEST_FL_int_eq(a, b) test_int_eq(file, line, #a, #b, a, b)
+#define TEST_FL_int_ge(a, b) test_int_ge(file, line, #a, #b, a, b)
+#define TEST_FL_int_gt(a, b) test_int_gt(file, line, #a, #b, a, b)
+#define TEST_FL_long_gt(a, b) test_long_gt(file, line, #a, #b, a, b)
+#define TEST_FL_true(a) test_true(file, line, #a, (a) != 0)
+
+#if defined(OPENSSL_NO_DH) && defined(OPENSSL_NO_DSA) && defined(OPENSSL_NO_EC)
+# define OPENSSL_NO_KEYPARAMS
+#endif
+
+static int default_libctx = 1;
+static int is_fips = 0;
+static int is_fips_3_0_0 = 0;
+
+static OSSL_LIB_CTX *testctx = NULL;
+static OSSL_LIB_CTX *keyctx = NULL;
+static char *testpropq = NULL;
+
+static OSSL_PROVIDER *nullprov = NULL;
+static OSSL_PROVIDER *deflprov = NULL;
+static OSSL_PROVIDER *keyprov = NULL;
+
+#ifndef OPENSSL_NO_EC
+static BN_CTX *bnctx = NULL;
+static OSSL_PARAM_BLD *bld_prime_nc = NULL;
+static OSSL_PARAM_BLD *bld_prime = NULL;
+static OSSL_PARAM *ec_explicit_prime_params_nc = NULL;
+static OSSL_PARAM *ec_explicit_prime_params_explicit = NULL;
+
+# ifndef OPENSSL_NO_EC2M
+static OSSL_PARAM_BLD *bld_tri_nc = NULL;
+static OSSL_PARAM_BLD *bld_tri = NULL;
+static OSSL_PARAM *ec_explicit_tri_params_nc = NULL;
+static OSSL_PARAM *ec_explicit_tri_params_explicit = NULL;
+# endif
+#endif
+
+#ifndef OPENSSL_NO_KEYPARAMS
+static EVP_PKEY *make_template(const char *type, OSSL_PARAM *genparams)
+{
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+
+# ifndef OPENSSL_NO_DH
+ /*
+ * Use 512-bit DH(X) keys with predetermined parameters for efficiency,
+ * for testing only. Use a minimum key size of 2048 for security purposes.
+ */
+ if (strcmp(type, "DH") == 0)
+ return get_dh512(keyctx);
+
+ if (strcmp(type, "X9.42 DH") == 0)
+ return get_dhx512(keyctx);
+# endif
+
+ /*
+ * No real need to check the errors other than for the cascade
+ * effect. |pkey| will simply remain NULL if something goes wrong.
+ */
+ (void)((ctx = EVP_PKEY_CTX_new_from_name(keyctx, type, testpropq)) != NULL
+ && EVP_PKEY_paramgen_init(ctx) > 0
+ && (genparams == NULL
+ || EVP_PKEY_CTX_set_params(ctx, genparams) > 0)
+ && EVP_PKEY_generate(ctx, &pkey) > 0);
+ EVP_PKEY_CTX_free(ctx);
+
+ return pkey;
+}
+#endif
+
+#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_EC)
+static EVP_PKEY *make_key(const char *type, EVP_PKEY *template,
+ OSSL_PARAM *genparams)
+{
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *ctx =
+ template != NULL
+ ? EVP_PKEY_CTX_new_from_pkey(keyctx, template, testpropq)
+ : EVP_PKEY_CTX_new_from_name(keyctx, type, testpropq);
+
+ /*
+ * No real need to check the errors other than for the cascade
+ * effect. |pkey| will simply remain NULL if something goes wrong.
+ */
+ (void)(ctx != NULL
+ && EVP_PKEY_keygen_init(ctx) > 0
+ && (genparams == NULL
+ || EVP_PKEY_CTX_set_params(ctx, genparams) > 0)
+ && EVP_PKEY_keygen(ctx, &pkey) > 0);
+ EVP_PKEY_CTX_free(ctx);
+ return pkey;
+}
+#endif
+
+/* Main test driver */
+
+typedef int (encoder)(const char *file, const int line,
+ void **encoded, long *encoded_len,
+ void *object, int selection,
+ const char *output_type, const char *output_structure,
+ const char *pass, const char *pcipher);
+typedef int (decoder)(const char *file, const int line,
+ void **object, void *encoded, long encoded_len,
+ const char *input_type, const char *structure_type,
+ const char *keytype, int selection, const char *pass);
+typedef int (tester)(const char *file, const int line,
+ const void *data1, size_t data1_len,
+ const void *data2, size_t data2_len);
+typedef int (checker)(const char *file, const int line,
+ const char *type, const void *data, size_t data_len);
+typedef void (dumper)(const char *label, const void *data, size_t data_len);
+
+#define FLAG_DECODE_WITH_TYPE 0x0001
+#define FLAG_FAIL_IF_FIPS 0x0002
+
+static int test_encode_decode(const char *file, const int line,
+ const char *type, EVP_PKEY *pkey,
+ int selection, const char *output_type,
+ const char *output_structure,
+ const char *pass, const char *pcipher,
+ encoder *encode_cb, decoder *decode_cb,
+ tester *test_cb, checker *check_cb,
+ dumper *dump_cb, int flags)
+{
+ void *encoded = NULL;
+ long encoded_len = 0;
+ EVP_PKEY *pkey2 = NULL;
+ EVP_PKEY *pkey3 = NULL;
+ void *encoded2 = NULL;
+ long encoded2_len = 0;
+ int ok = 0;
+
+ /*
+ * Encode |pkey|, decode the result into |pkey2|, and finish off by
+ * encoding |pkey2| as well. That last encoding is for checking and
+ * dumping purposes.
+ */
+ if (!TEST_true(encode_cb(file, line, &encoded, &encoded_len, pkey, selection,
+ output_type, output_structure, pass, pcipher)))
+ goto end;
+
+ if ((flags & FLAG_FAIL_IF_FIPS) != 0 && is_fips && !is_fips_3_0_0) {
+ if (TEST_false(decode_cb(file, line, (void **)&pkey2, encoded,
+ encoded_len, output_type, output_structure,
+ (flags & FLAG_DECODE_WITH_TYPE ? type : NULL),
+ selection, pass)))
+ ok = 1;
+ goto end;
+ }
+
+ if (!TEST_true(check_cb(file, line, type, encoded, encoded_len))
+ || !TEST_true(decode_cb(file, line, (void **)&pkey2, encoded, encoded_len,
+ output_type, output_structure,
+ (flags & FLAG_DECODE_WITH_TYPE ? type : NULL),
+ selection, pass))
+ || ((output_structure == NULL
+ || strcmp(output_structure, "type-specific") != 0)
+ && !TEST_true(decode_cb(file, line, (void **)&pkey3, encoded, encoded_len,
+ output_type, output_structure,
+ (flags & FLAG_DECODE_WITH_TYPE ? type : NULL),
+ 0, pass)))
+ || !TEST_true(encode_cb(file, line, &encoded2, &encoded2_len, pkey2, selection,
+ output_type, output_structure, pass, pcipher)))
+ goto end;
+
+ if (selection == OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS) {
+ if (!TEST_int_eq(EVP_PKEY_parameters_eq(pkey, pkey2), 1)
+ || (pkey3 != NULL
+ && !TEST_int_eq(EVP_PKEY_parameters_eq(pkey, pkey3), 1)))
+ goto end;
+ } else {
+ if (!TEST_int_eq(EVP_PKEY_eq(pkey, pkey2), 1)
+ || (pkey3 != NULL
+ && !TEST_int_eq(EVP_PKEY_eq(pkey, pkey3), 1)))
+ goto end;
+ }
+
+ /*
+ * Double check the encoding, but only for unprotected keys,
+ * as protected keys have a random component, which makes the output
+ * differ.
+ */
+ if ((pass == NULL && pcipher == NULL)
+ && !test_cb(file, line, encoded, encoded_len, encoded2, encoded2_len))
+ goto end;
+
+ ok = 1;
+ end:
+ if (!ok) {
+ if (encoded != NULL && encoded_len != 0)
+ dump_cb("|pkey| encoded", encoded, encoded_len);
+ if (encoded2 != NULL && encoded2_len != 0)
+ dump_cb("|pkey2| encoded", encoded2, encoded2_len);
+ }
+
+ OPENSSL_free(encoded);
+ OPENSSL_free(encoded2);
+ EVP_PKEY_free(pkey2);
+ EVP_PKEY_free(pkey3);
+ return ok;
+}
+
+/* Encoding and decoding methods */
+
+static int encode_EVP_PKEY_prov(const char *file, const int line,
+ void **encoded, long *encoded_len,
+ void *object, int selection,
+ const char *output_type,
+ const char *output_structure,
+ const char *pass, const char *pcipher)
+{
+ EVP_PKEY *pkey = object;
+ OSSL_ENCODER_CTX *ectx = NULL;
+ BIO *mem_ser = NULL;
+ BUF_MEM *mem_buf = NULL;
+ const unsigned char *upass = (const unsigned char *)pass;
+ int ok = 0;
+
+ if (!TEST_FL_ptr(ectx = OSSL_ENCODER_CTX_new_for_pkey(pkey, selection,
+ output_type,
+ output_structure,
+ testpropq))
+ || !TEST_FL_int_gt(OSSL_ENCODER_CTX_get_num_encoders(ectx), 0)
+ || (pass != NULL
+ && !TEST_FL_true(OSSL_ENCODER_CTX_set_passphrase(ectx, upass,
+ strlen(pass))))
+ || (pcipher != NULL
+ && !TEST_FL_true(OSSL_ENCODER_CTX_set_cipher(ectx, pcipher, NULL)))
+ || !TEST_FL_ptr(mem_ser = BIO_new(BIO_s_mem()))
+ || !TEST_FL_true(OSSL_ENCODER_to_bio(ectx, mem_ser))
+ || !TEST_FL_true(BIO_get_mem_ptr(mem_ser, &mem_buf) > 0)
+ || !TEST_FL_ptr(*encoded = mem_buf->data)
+ || !TEST_FL_long_gt(*encoded_len = mem_buf->length, 0))
+ goto end;
+
+ /* Detach the encoded output */
+ mem_buf->data = NULL;
+ mem_buf->length = 0;
+ ok = 1;
+ end:
+ BIO_free(mem_ser);
+ OSSL_ENCODER_CTX_free(ectx);
+ return ok;
+}
+
+static int decode_EVP_PKEY_prov(const char *file, const int line,
+ void **object, void *encoded, long encoded_len,
+ const char *input_type,
+ const char *structure_type,
+ const char *keytype, int selection,
+ const char *pass)
+{
+ EVP_PKEY *pkey = NULL, *testpkey = NULL;
+ OSSL_DECODER_CTX *dctx = NULL;
+ BIO *encoded_bio = NULL;
+ const unsigned char *upass = (const unsigned char *)pass;
+ int ok = 0;
+ int i;
+ const char *badtype;
+
+ if (strcmp(input_type, "DER") == 0)
+ badtype = "PEM";
+ else
+ badtype = "DER";
+
+ if (!TEST_FL_ptr(encoded_bio = BIO_new_mem_buf(encoded, encoded_len)))
+ goto end;
+
+ /*
+ * We attempt the decode 3 times. The first time we provide the expected
+ * starting input type. The second time we provide NULL for the starting
+ * type. The third time we provide a bad starting input type.
+ * The bad starting input type should fail. The other two should succeed
+ * and produce the same result.
+ */
+ for (i = 0; i < 3; i++) {
+ const char *testtype = (i == 0) ? input_type
+ : ((i == 1) ? NULL : badtype);
+
+ if (!TEST_FL_ptr(dctx = OSSL_DECODER_CTX_new_for_pkey(&testpkey,
+ testtype,
+ structure_type,
+ keytype,
+ selection,
+ testctx, testpropq))
+ || (pass != NULL
+ && !OSSL_DECODER_CTX_set_passphrase(dctx, upass, strlen(pass)))
+ || !TEST_FL_int_gt(BIO_reset(encoded_bio), 0)
+ /* We expect to fail when using a bad input type */
+ || !TEST_FL_int_eq(OSSL_DECODER_from_bio(dctx, encoded_bio),
+ (i == 2) ? 0 : 1))
+ goto end;
+ OSSL_DECODER_CTX_free(dctx);
+ dctx = NULL;
+
+ if (i == 0) {
+ pkey = testpkey;
+ testpkey = NULL;
+ } else if (i == 1) {
+ if (selection == OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS) {
+ if (!TEST_FL_int_eq(EVP_PKEY_parameters_eq(pkey, testpkey), 1))
+ goto end;
+ } else {
+ if (!TEST_FL_int_eq(EVP_PKEY_eq(pkey, testpkey), 1))
+ goto end;
+ }
+ }
+ }
+ ok = 1;
+ *object = pkey;
+ pkey = NULL;
+
+ end:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(testpkey);
+ BIO_free(encoded_bio);
+ OSSL_DECODER_CTX_free(dctx);
+ return ok;
+}
+
+static int encode_EVP_PKEY_legacy_PEM(const char *file, const int line,
+ void **encoded, long *encoded_len,
+ void *object, ossl_unused int selection,
+ ossl_unused const char *output_type,
+ ossl_unused const char *output_structure,
+ const char *pass, const char *pcipher)
+{
+ EVP_PKEY *pkey = object;
+ EVP_CIPHER *cipher = NULL;
+ BIO *mem_ser = NULL;
+ BUF_MEM *mem_buf = NULL;
+ const unsigned char *upass = (const unsigned char *)pass;
+ size_t passlen = 0;
+ int ok = 0;
+
+ if (pcipher != NULL && pass != NULL) {
+ passlen = strlen(pass);
+ if (!TEST_FL_ptr(cipher = EVP_CIPHER_fetch(testctx, pcipher, testpropq)))
+ goto end;
+ }
+ if (!TEST_FL_ptr(mem_ser = BIO_new(BIO_s_mem()))
+ || !TEST_FL_true(PEM_write_bio_PrivateKey_traditional(mem_ser, pkey,
+ cipher,
+ upass, passlen,
+ NULL, NULL))
+ || !TEST_FL_true(BIO_get_mem_ptr(mem_ser, &mem_buf) > 0)
+ || !TEST_FL_ptr(*encoded = mem_buf->data)
+ || !TEST_FL_long_gt(*encoded_len = mem_buf->length, 0))
+ goto end;
+
+ /* Detach the encoded output */
+ mem_buf->data = NULL;
+ mem_buf->length = 0;
+ ok = 1;
+ end:
+ BIO_free(mem_ser);
+ EVP_CIPHER_free(cipher);
+ return ok;
+}
+
+static int encode_EVP_PKEY_MSBLOB(const char *file, const int line,
+ void **encoded, long *encoded_len,
+ void *object, int selection,
+ ossl_unused const char *output_type,
+ ossl_unused const char *output_structure,
+ ossl_unused const char *pass,
+ ossl_unused const char *pcipher)
+{
+ EVP_PKEY *pkey = object;
+ BIO *mem_ser = NULL;
+ BUF_MEM *mem_buf = NULL;
+ int ok = 0;
+
+ if (!TEST_FL_ptr(mem_ser = BIO_new(BIO_s_mem())))
+ goto end;
+
+ if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0) {
+ if (!TEST_FL_int_ge(i2b_PrivateKey_bio(mem_ser, pkey), 0))
+ goto end;
+ } else {
+ if (!TEST_FL_int_ge(i2b_PublicKey_bio(mem_ser, pkey), 0))
+ goto end;
+ }
+
+ if (!TEST_FL_true(BIO_get_mem_ptr(mem_ser, &mem_buf) > 0)
+ || !TEST_FL_ptr(*encoded = mem_buf->data)
+ || !TEST_FL_long_gt(*encoded_len = mem_buf->length, 0))
+ goto end;
+
+ /* Detach the encoded output */
+ mem_buf->data = NULL;
+ mem_buf->length = 0;
+ ok = 1;
+ end:
+ BIO_free(mem_ser);
+ return ok;
+}
+
+static pem_password_cb pass_pw;
+static int pass_pw(char *buf, int size, int rwflag, void *userdata)
+{
+ OPENSSL_strlcpy(buf, userdata, size);
+ return strlen(userdata);
+}
+
+static int encode_EVP_PKEY_PVK(const char *file, const int line,
+ void **encoded, long *encoded_len,
+ void *object, int selection,
+ ossl_unused const char *output_type,
+ ossl_unused const char *output_structure,
+ const char *pass,
+ ossl_unused const char *pcipher)
+{
+ EVP_PKEY *pkey = object;
+ BIO *mem_ser = NULL;
+ BUF_MEM *mem_buf = NULL;
+ int enc = (pass != NULL);
+ int ok = 0;
+
+ if (!TEST_FL_true(ossl_assert((selection
+ & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0))
+ || !TEST_FL_ptr(mem_ser = BIO_new(BIO_s_mem()))
+ || !TEST_FL_int_ge(i2b_PVK_bio_ex(mem_ser, pkey, enc,
+ pass_pw, (void *)pass, testctx, testpropq), 0)
+ || !TEST_FL_true(BIO_get_mem_ptr(mem_ser, &mem_buf) > 0)
+ || !TEST_FL_ptr(*encoded = mem_buf->data)
+ || !TEST_FL_long_gt(*encoded_len = mem_buf->length, 0))
+ goto end;
+
+ /* Detach the encoded output */
+ mem_buf->data = NULL;
+ mem_buf->length = 0;
+ ok = 1;
+ end:
+ BIO_free(mem_ser);
+ return ok;
+}
+
+static int test_text(const char *file, const int line,
+ const void *data1, size_t data1_len,
+ const void *data2, size_t data2_len)
+{
+ return TEST_FL_strn2_eq(data1, data1_len, data2, data2_len);
+}
+
+static int test_mem(const char *file, const int line,
+ const void *data1, size_t data1_len,
+ const void *data2, size_t data2_len)
+{
+ return TEST_FL_mem_eq(data1, data1_len, data2, data2_len);
+}
+
+/* Test cases and their dumpers / checkers */
+
+static void collect_name(const char *name, void *arg)
+{
+ char **namelist = arg;
+ char *new_namelist;
+ size_t space;
+
+ space = strlen(name);
+ if (*namelist != NULL)
+ space += strlen(*namelist) + 2 /* for comma and space */;
+ space++; /* for terminating null byte */
+
+ new_namelist = OPENSSL_realloc(*namelist, space);
+ if (new_namelist == NULL)
+ return;
+ if (*namelist != NULL) {
+ strcat(new_namelist, ", ");
+ strcat(new_namelist, name);
+ } else {
+ strcpy(new_namelist, name);
+ }
+ *namelist = new_namelist;
+}
+
+static void dump_der(const char *label, const void *data, size_t data_len)
+{
+ test_output_memory(label, data, data_len);
+}
+
+static void dump_pem(const char *label, const void *data, size_t data_len)
+{
+ test_output_string(label, data, data_len - 1);
+}
+
+static int check_unprotected_PKCS8_DER(const char *file, const int line,
+ const char *type,
+ const void *data, size_t data_len)
+{
+ const unsigned char *datap = data;
+ PKCS8_PRIV_KEY_INFO *p8inf =
+ d2i_PKCS8_PRIV_KEY_INFO(NULL, &datap, data_len);
+ int ok = 0;
+
+ if (TEST_FL_ptr(p8inf)) {
+ EVP_PKEY *pkey = EVP_PKCS82PKEY_ex(p8inf, testctx, testpropq);
+ char *namelist = NULL;
+
+ if (TEST_FL_ptr(pkey)) {
+ if (!(ok = TEST_FL_true(EVP_PKEY_is_a(pkey, type)))) {
+ EVP_PKEY_type_names_do_all(pkey, collect_name, &namelist);
+ if (namelist != NULL)
+ TEST_note("%s isn't any of %s", type, namelist);
+ OPENSSL_free(namelist);
+ }
+ ok = ok && TEST_FL_true(evp_pkey_is_provided(pkey));
+ EVP_PKEY_free(pkey);
+ }
+ }
+ PKCS8_PRIV_KEY_INFO_free(p8inf);
+ return ok;
+}
+
+static int test_unprotected_via_DER(const char *type, EVP_PKEY *key, int fips)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS,
+ "DER", "PrivateKeyInfo", NULL, NULL,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_mem, check_unprotected_PKCS8_DER,
+ dump_der, fips ? 0 : FLAG_FAIL_IF_FIPS);
+}
+
+static int check_unprotected_PKCS8_PEM(const char *file, const int line,
+ const char *type,
+ const void *data, size_t data_len)
+{
+ static const char expected_pem_header[] =
+ "-----BEGIN " PEM_STRING_PKCS8INF "-----";
+
+ return TEST_FL_strn_eq(data, expected_pem_header,
+ sizeof(expected_pem_header) - 1);
+}
+
+static int test_unprotected_via_PEM(const char *type, EVP_PKEY *key, int fips)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS,
+ "PEM", "PrivateKeyInfo", NULL, NULL,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_text, check_unprotected_PKCS8_PEM,
+ dump_pem, fips ? 0 : FLAG_FAIL_IF_FIPS);
+}
+
+#ifndef OPENSSL_NO_KEYPARAMS
+static int check_params_DER(const char *file, const int line,
+ const char *type, const void *data, size_t data_len)
+{
+ const unsigned char *datap = data;
+ int ok = 0;
+ int itype = NID_undef;
+ EVP_PKEY *pkey = NULL;
+
+ if (strcmp(type, "DH") == 0)
+ itype = EVP_PKEY_DH;
+ else if (strcmp(type, "X9.42 DH") == 0)
+ itype = EVP_PKEY_DHX;
+ else if (strcmp(type, "DSA") == 0)
+ itype = EVP_PKEY_DSA;
+ else if (strcmp(type, "EC") == 0)
+ itype = EVP_PKEY_EC;
+
+ if (itype != NID_undef) {
+ pkey = d2i_KeyParams(itype, NULL, &datap, data_len);
+ ok = (pkey != NULL);
+ EVP_PKEY_free(pkey);
+ }
+
+ return ok;
+}
+
+static int check_params_PEM(const char *file, const int line,
+ const char *type,
+ const void *data, size_t data_len)
+{
+ static char expected_pem_header[80];
+
+ return
+ TEST_FL_int_gt(BIO_snprintf(expected_pem_header,
+ sizeof(expected_pem_header),
+ "-----BEGIN %s PARAMETERS-----", type), 0)
+ && TEST_FL_strn_eq(data, expected_pem_header, strlen(expected_pem_header));
+}
+
+static int test_params_via_DER(const char *type, EVP_PKEY *key)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key, OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "DER", "type-specific", NULL, NULL,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_mem, check_params_DER,
+ dump_der, FLAG_DECODE_WITH_TYPE);
+}
+
+static int test_params_via_PEM(const char *type, EVP_PKEY *key)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key, OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "PEM", "type-specific", NULL, NULL,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_text, check_params_PEM,
+ dump_pem, 0);
+}
+#endif /* !OPENSSL_NO_KEYPARAMS */
+
+static int check_unprotected_legacy_PEM(const char *file, const int line,
+ const char *type,
+ const void *data, size_t data_len)
+{
+ static char expected_pem_header[80];
+
+ return
+ TEST_FL_int_gt(BIO_snprintf(expected_pem_header,
+ sizeof(expected_pem_header),
+ "-----BEGIN %s PRIVATE KEY-----", type), 0)
+ && TEST_FL_strn_eq(data, expected_pem_header, strlen(expected_pem_header));
+}
+
+static int test_unprotected_via_legacy_PEM(const char *type, EVP_PKEY *key)
+{
+ if (!default_libctx || is_fips)
+ return TEST_skip("Test not available if using a non-default library context or FIPS provider");
+
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "PEM", "type-specific", NULL, NULL,
+ encode_EVP_PKEY_legacy_PEM, decode_EVP_PKEY_prov,
+ test_text, check_unprotected_legacy_PEM,
+ dump_pem, 0);
+}
+
+static int check_MSBLOB(const char *file, const int line,
+ const char *type, const void *data, size_t data_len)
+{
+ const unsigned char *datap = data;
+ EVP_PKEY *pkey = b2i_PrivateKey(&datap, data_len);
+ int ok = TEST_FL_ptr(pkey);
+
+ EVP_PKEY_free(pkey);
+ return ok;
+}
+
+static int test_unprotected_via_MSBLOB(const char *type, EVP_PKEY *key)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "MSBLOB", NULL, NULL, NULL,
+ encode_EVP_PKEY_MSBLOB, decode_EVP_PKEY_prov,
+ test_mem, check_MSBLOB,
+ dump_der, 0);
+}
+
+static int check_PVK(const char *file, const int line,
+ const char *type, const void *data, size_t data_len)
+{
+ const unsigned char *in = data;
+ unsigned int saltlen = 0, keylen = 0;
+ int ok = ossl_do_PVK_header(&in, data_len, 0, &saltlen, &keylen);
+
+ return ok;
+}
+
+static int test_unprotected_via_PVK(const char *type, EVP_PKEY *key)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "PVK", NULL, NULL, NULL,
+ encode_EVP_PKEY_PVK, decode_EVP_PKEY_prov,
+ test_mem, check_PVK,
+ dump_der, 0);
+}
+
+static const char *pass_cipher = "AES-256-CBC";
+static const char *pass = "the holy handgrenade of antioch";
+
+static int check_protected_PKCS8_DER(const char *file, const int line,
+ const char *type,
+ const void *data, size_t data_len)
+{
+ const unsigned char *datap = data;
+ X509_SIG *p8 = d2i_X509_SIG(NULL, &datap, data_len);
+ int ok = TEST_FL_ptr(p8);
+
+ X509_SIG_free(p8);
+ return ok;
+}
+
+static int test_protected_via_DER(const char *type, EVP_PKEY *key, int fips)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "DER", "EncryptedPrivateKeyInfo",
+ pass, pass_cipher,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_mem, check_protected_PKCS8_DER,
+ dump_der, fips ? 0 : FLAG_FAIL_IF_FIPS);
+}
+
+static int check_protected_PKCS8_PEM(const char *file, const int line,
+ const char *type,
+ const void *data, size_t data_len)
+{
+ static const char expected_pem_header[] =
+ "-----BEGIN " PEM_STRING_PKCS8 "-----";
+
+ return TEST_FL_strn_eq(data, expected_pem_header,
+ sizeof(expected_pem_header) - 1);
+}
+
+static int test_protected_via_PEM(const char *type, EVP_PKEY *key, int fips)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "PEM", "EncryptedPrivateKeyInfo",
+ pass, pass_cipher,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_text, check_protected_PKCS8_PEM,
+ dump_pem, fips ? 0 : FLAG_FAIL_IF_FIPS);
+}
+
+static int check_protected_legacy_PEM(const char *file, const int line,
+ const char *type,
+ const void *data, size_t data_len)
+{
+ static char expected_pem_header[80];
+
+ return
+ TEST_FL_int_gt(BIO_snprintf(expected_pem_header,
+ sizeof(expected_pem_header),
+ "-----BEGIN %s PRIVATE KEY-----", type), 0)
+ && TEST_FL_strn_eq(data, expected_pem_header, strlen(expected_pem_header))
+ && TEST_FL_ptr(strstr(data, "\nDEK-Info: "));
+}
+
+static int test_protected_via_legacy_PEM(const char *type, EVP_PKEY *key)
+{
+ if (!default_libctx || is_fips)
+ return TEST_skip("Test not available if using a non-default library context or FIPS provider");
+
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "PEM", "type-specific", pass, pass_cipher,
+ encode_EVP_PKEY_legacy_PEM, decode_EVP_PKEY_prov,
+ test_text, check_protected_legacy_PEM,
+ dump_pem, 0);
+}
+
+#ifndef OPENSSL_NO_RC4
+static int test_protected_via_PVK(const char *type, EVP_PKEY *key)
+{
+ int ret = 0;
+ OSSL_PROVIDER *lgcyprov = OSSL_PROVIDER_load(testctx, "legacy");
+ if (lgcyprov == NULL)
+ return TEST_skip("Legacy provider not available");
+
+ ret = test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "PVK", NULL, pass, NULL,
+ encode_EVP_PKEY_PVK, decode_EVP_PKEY_prov,
+ test_mem, check_PVK, dump_der, 0);
+ OSSL_PROVIDER_unload(lgcyprov);
+ return ret;
+}
+#endif
+
+static int check_public_DER(const char *file, const int line,
+ const char *type, const void *data, size_t data_len)
+{
+ const unsigned char *datap = data;
+ EVP_PKEY *pkey = d2i_PUBKEY_ex(NULL, &datap, data_len, testctx, testpropq);
+ int ok = (TEST_FL_ptr(pkey) && TEST_FL_true(EVP_PKEY_is_a(pkey, type)));
+
+ EVP_PKEY_free(pkey);
+ return ok;
+}
+
+static int test_public_via_DER(const char *type, EVP_PKEY *key, int fips)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS,
+ "DER", "SubjectPublicKeyInfo", NULL, NULL,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_mem, check_public_DER, dump_der,
+ fips ? 0 : FLAG_FAIL_IF_FIPS);
+}
+
+static int check_public_PEM(const char *file, const int line,
+ const char *type, const void *data, size_t data_len)
+{
+ static const char expected_pem_header[] =
+ "-----BEGIN " PEM_STRING_PUBLIC "-----";
+
+ return
+ TEST_FL_strn_eq(data, expected_pem_header,
+ sizeof(expected_pem_header) - 1);
+}
+
+static int test_public_via_PEM(const char *type, EVP_PKEY *key, int fips)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key,
+ OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS,
+ "PEM", "SubjectPublicKeyInfo", NULL, NULL,
+ encode_EVP_PKEY_prov, decode_EVP_PKEY_prov,
+ test_text, check_public_PEM, dump_pem,
+ fips ? 0 : FLAG_FAIL_IF_FIPS);
+}
+
+static int check_public_MSBLOB(const char *file, const int line,
+ const char *type,
+ const void *data, size_t data_len)
+{
+ const unsigned char *datap = data;
+ EVP_PKEY *pkey = b2i_PublicKey(&datap, data_len);
+ int ok = TEST_FL_ptr(pkey);
+
+ EVP_PKEY_free(pkey);
+ return ok;
+}
+
+static int test_public_via_MSBLOB(const char *type, EVP_PKEY *key)
+{
+ return test_encode_decode(__FILE__, __LINE__, type, key, OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ "MSBLOB", NULL, NULL, NULL,
+ encode_EVP_PKEY_MSBLOB, decode_EVP_PKEY_prov,
+ test_mem, check_public_MSBLOB, dump_der, 0);
+}
+
+#define KEYS(KEYTYPE) \
+ static EVP_PKEY *key_##KEYTYPE = NULL
+#define MAKE_KEYS(KEYTYPE, KEYTYPEstr, params) \
+ ok = ok \
+ && TEST_ptr(key_##KEYTYPE = make_key(KEYTYPEstr, NULL, params))
+#define FREE_KEYS(KEYTYPE) \
+ EVP_PKEY_free(key_##KEYTYPE); \
+
+#define DOMAIN_KEYS(KEYTYPE) \
+ static EVP_PKEY *template_##KEYTYPE = NULL; \
+ static EVP_PKEY *key_##KEYTYPE = NULL
+#define MAKE_DOMAIN_KEYS(KEYTYPE, KEYTYPEstr, params) \
+ ok = ok \
+ && TEST_ptr(template_##KEYTYPE = \
+ make_template(KEYTYPEstr, params)) \
+ && TEST_ptr(key_##KEYTYPE = \
+ make_key(KEYTYPEstr, template_##KEYTYPE, NULL))
+#define FREE_DOMAIN_KEYS(KEYTYPE) \
+ EVP_PKEY_free(template_##KEYTYPE); \
+ EVP_PKEY_free(key_##KEYTYPE)
+
+#define IMPLEMENT_TEST_SUITE(KEYTYPE, KEYTYPEstr, fips) \
+ static int test_unprotected_##KEYTYPE##_via_DER(void) \
+ { \
+ return test_unprotected_via_DER(KEYTYPEstr, key_##KEYTYPE, fips); \
+ } \
+ static int test_unprotected_##KEYTYPE##_via_PEM(void) \
+ { \
+ return test_unprotected_via_PEM(KEYTYPEstr, key_##KEYTYPE, fips); \
+ } \
+ static int test_protected_##KEYTYPE##_via_DER(void) \
+ { \
+ return test_protected_via_DER(KEYTYPEstr, key_##KEYTYPE, fips); \
+ } \
+ static int test_protected_##KEYTYPE##_via_PEM(void) \
+ { \
+ return test_protected_via_PEM(KEYTYPEstr, key_##KEYTYPE, fips); \
+ } \
+ static int test_public_##KEYTYPE##_via_DER(void) \
+ { \
+ return test_public_via_DER(KEYTYPEstr, key_##KEYTYPE, fips); \
+ } \
+ static int test_public_##KEYTYPE##_via_PEM(void) \
+ { \
+ return test_public_via_PEM(KEYTYPEstr, key_##KEYTYPE, fips); \
+ }
+
+#define ADD_TEST_SUITE(KEYTYPE) \
+ ADD_TEST(test_unprotected_##KEYTYPE##_via_DER); \
+ ADD_TEST(test_unprotected_##KEYTYPE##_via_PEM); \
+ ADD_TEST(test_protected_##KEYTYPE##_via_DER); \
+ ADD_TEST(test_protected_##KEYTYPE##_via_PEM); \
+ ADD_TEST(test_public_##KEYTYPE##_via_DER); \
+ ADD_TEST(test_public_##KEYTYPE##_via_PEM)
+
+#define IMPLEMENT_TEST_SUITE_PARAMS(KEYTYPE, KEYTYPEstr) \
+ static int test_params_##KEYTYPE##_via_DER(void) \
+ { \
+ return test_params_via_DER(KEYTYPEstr, key_##KEYTYPE); \
+ } \
+ static int test_params_##KEYTYPE##_via_PEM(void) \
+ { \
+ return test_params_via_PEM(KEYTYPEstr, key_##KEYTYPE); \
+ }
+
+#define ADD_TEST_SUITE_PARAMS(KEYTYPE) \
+ ADD_TEST(test_params_##KEYTYPE##_via_DER); \
+ ADD_TEST(test_params_##KEYTYPE##_via_PEM)
+
+#define IMPLEMENT_TEST_SUITE_LEGACY(KEYTYPE, KEYTYPEstr) \
+ static int test_unprotected_##KEYTYPE##_via_legacy_PEM(void) \
+ { \
+ return \
+ test_unprotected_via_legacy_PEM(KEYTYPEstr, key_##KEYTYPE); \
+ } \
+ static int test_protected_##KEYTYPE##_via_legacy_PEM(void) \
+ { \
+ return \
+ test_protected_via_legacy_PEM(KEYTYPEstr, key_##KEYTYPE); \
+ }
+
+#define ADD_TEST_SUITE_LEGACY(KEYTYPE) \
+ ADD_TEST(test_unprotected_##KEYTYPE##_via_legacy_PEM); \
+ ADD_TEST(test_protected_##KEYTYPE##_via_legacy_PEM)
+
+#define IMPLEMENT_TEST_SUITE_MSBLOB(KEYTYPE, KEYTYPEstr) \
+ static int test_unprotected_##KEYTYPE##_via_MSBLOB(void) \
+ { \
+ return test_unprotected_via_MSBLOB(KEYTYPEstr, key_##KEYTYPE); \
+ } \
+ static int test_public_##KEYTYPE##_via_MSBLOB(void) \
+ { \
+ return test_public_via_MSBLOB(KEYTYPEstr, key_##KEYTYPE); \
+ }
+
+#define ADD_TEST_SUITE_MSBLOB(KEYTYPE) \
+ ADD_TEST(test_unprotected_##KEYTYPE##_via_MSBLOB); \
+ ADD_TEST(test_public_##KEYTYPE##_via_MSBLOB)
+
+#define IMPLEMENT_TEST_SUITE_UNPROTECTED_PVK(KEYTYPE, KEYTYPEstr) \
+ static int test_unprotected_##KEYTYPE##_via_PVK(void) \
+ { \
+ return test_unprotected_via_PVK(KEYTYPEstr, key_##KEYTYPE); \
+ }
+# define ADD_TEST_SUITE_UNPROTECTED_PVK(KEYTYPE) \
+ ADD_TEST(test_unprotected_##KEYTYPE##_via_PVK)
+#ifndef OPENSSL_NO_RC4
+# define IMPLEMENT_TEST_SUITE_PROTECTED_PVK(KEYTYPE, KEYTYPEstr) \
+ static int test_protected_##KEYTYPE##_via_PVK(void) \
+ { \
+ return test_protected_via_PVK(KEYTYPEstr, key_##KEYTYPE); \
+ }
+# define ADD_TEST_SUITE_PROTECTED_PVK(KEYTYPE) \
+ ADD_TEST(test_protected_##KEYTYPE##_via_PVK)
+#endif
+
+#ifndef OPENSSL_NO_DH
+DOMAIN_KEYS(DH);
+IMPLEMENT_TEST_SUITE(DH, "DH", 1)
+IMPLEMENT_TEST_SUITE_PARAMS(DH, "DH")
+DOMAIN_KEYS(DHX);
+IMPLEMENT_TEST_SUITE(DHX, "X9.42 DH", 1)
+IMPLEMENT_TEST_SUITE_PARAMS(DHX, "X9.42 DH")
+/*
+ * DH has no support for PEM_write_bio_PrivateKey_traditional(),
+ * so no legacy tests.
+ */
+#endif
+#ifndef OPENSSL_NO_DSA
+DOMAIN_KEYS(DSA);
+IMPLEMENT_TEST_SUITE(DSA, "DSA", 1)
+IMPLEMENT_TEST_SUITE_PARAMS(DSA, "DSA")
+IMPLEMENT_TEST_SUITE_LEGACY(DSA, "DSA")
+IMPLEMENT_TEST_SUITE_MSBLOB(DSA, "DSA")
+IMPLEMENT_TEST_SUITE_UNPROTECTED_PVK(DSA, "DSA")
+# ifndef OPENSSL_NO_RC4
+IMPLEMENT_TEST_SUITE_PROTECTED_PVK(DSA, "DSA")
+# endif
+#endif
+#ifndef OPENSSL_NO_EC
+DOMAIN_KEYS(EC);
+IMPLEMENT_TEST_SUITE(EC, "EC", 1)
+IMPLEMENT_TEST_SUITE_PARAMS(EC, "EC")
+IMPLEMENT_TEST_SUITE_LEGACY(EC, "EC")
+DOMAIN_KEYS(ECExplicitPrimeNamedCurve);
+IMPLEMENT_TEST_SUITE(ECExplicitPrimeNamedCurve, "EC", 1)
+IMPLEMENT_TEST_SUITE_LEGACY(ECExplicitPrimeNamedCurve, "EC")
+DOMAIN_KEYS(ECExplicitPrime2G);
+IMPLEMENT_TEST_SUITE(ECExplicitPrime2G, "EC", 0)
+IMPLEMENT_TEST_SUITE_LEGACY(ECExplicitPrime2G, "EC")
+# ifndef OPENSSL_NO_EC2M
+DOMAIN_KEYS(ECExplicitTriNamedCurve);
+IMPLEMENT_TEST_SUITE(ECExplicitTriNamedCurve, "EC", 1)
+IMPLEMENT_TEST_SUITE_LEGACY(ECExplicitTriNamedCurve, "EC")
+DOMAIN_KEYS(ECExplicitTri2G);
+IMPLEMENT_TEST_SUITE(ECExplicitTri2G, "EC", 0)
+IMPLEMENT_TEST_SUITE_LEGACY(ECExplicitTri2G, "EC")
+# endif
+KEYS(ED25519);
+IMPLEMENT_TEST_SUITE(ED25519, "ED25519", 1)
+KEYS(ED448);
+IMPLEMENT_TEST_SUITE(ED448, "ED448", 1)
+KEYS(X25519);
+IMPLEMENT_TEST_SUITE(X25519, "X25519", 1)
+KEYS(X448);
+IMPLEMENT_TEST_SUITE(X448, "X448", 1)
+/*
+ * ED25519, ED448, X25519 and X448 have no support for
+ * PEM_write_bio_PrivateKey_traditional(), so no legacy tests.
+ */
+#endif
+KEYS(RSA);
+IMPLEMENT_TEST_SUITE(RSA, "RSA", 1)
+IMPLEMENT_TEST_SUITE_LEGACY(RSA, "RSA")
+KEYS(RSA_PSS);
+IMPLEMENT_TEST_SUITE(RSA_PSS, "RSA-PSS", 1)
+/*
+ * RSA-PSS has no support for PEM_write_bio_PrivateKey_traditional(),
+ * so no legacy tests.
+ */
+IMPLEMENT_TEST_SUITE_MSBLOB(RSA, "RSA")
+IMPLEMENT_TEST_SUITE_UNPROTECTED_PVK(RSA, "RSA")
+#ifndef OPENSSL_NO_RC4
+IMPLEMENT_TEST_SUITE_PROTECTED_PVK(RSA, "RSA")
+#endif
+
+#ifndef OPENSSL_NO_EC
+/* Explicit parameters that match a named curve */
+static int do_create_ec_explicit_prime_params(OSSL_PARAM_BLD *bld,
+ const unsigned char *gen,
+ size_t gen_len)
+{
+ BIGNUM *a, *b, *prime, *order;
+
+ /* Curve prime256v1 */
+ static const unsigned char prime_data[] = {
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff
+ };
+ static const unsigned char a_data[] = {
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc
+ };
+ static const unsigned char b_data[] = {
+ 0x5a, 0xc6, 0x35, 0xd8, 0xaa, 0x3a, 0x93, 0xe7,
+ 0xb3, 0xeb, 0xbd, 0x55, 0x76, 0x98, 0x86, 0xbc,
+ 0x65, 0x1d, 0x06, 0xb0, 0xcc, 0x53, 0xb0, 0xf6,
+ 0x3b, 0xce, 0x3c, 0x3e, 0x27, 0xd2, 0x60, 0x4b
+ };
+ static const unsigned char seed[] = {
+ 0xc4, 0x9d, 0x36, 0x08, 0x86, 0xe7, 0x04, 0x93,
+ 0x6a, 0x66, 0x78, 0xe1, 0x13, 0x9d, 0x26, 0xb7,
+ 0x81, 0x9f, 0x7e, 0x90
+ };
+ static const unsigned char order_data[] = {
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xbc, 0xe6, 0xfa, 0xad, 0xa7, 0x17, 0x9e,
+ 0x84, 0xf3, 0xb9, 0xca, 0xc2, 0xfc, 0x63, 0x25, 0x51
+ };
+ return TEST_ptr(a = BN_CTX_get(bnctx))
+ && TEST_ptr(b = BN_CTX_get(bnctx))
+ && TEST_ptr(prime = BN_CTX_get(bnctx))
+ && TEST_ptr(order = BN_CTX_get(bnctx))
+ && TEST_ptr(BN_bin2bn(prime_data, sizeof(prime_data), prime))
+ && TEST_ptr(BN_bin2bn(a_data, sizeof(a_data), a))
+ && TEST_ptr(BN_bin2bn(b_data, sizeof(b_data), b))
+ && TEST_ptr(BN_bin2bn(order_data, sizeof(order_data), order))
+ && TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
+ OSSL_PKEY_PARAM_EC_FIELD_TYPE, SN_X9_62_prime_field,
+ 0))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_P, prime))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_A, a))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_B, b))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld,
+ OSSL_PKEY_PARAM_EC_ORDER, order))
+ && TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_EC_GENERATOR, gen, gen_len))
+ && TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_EC_SEED, seed, sizeof(seed)))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_COFACTOR,
+ BN_value_one()));
+}
+
+static int create_ec_explicit_prime_params_namedcurve(OSSL_PARAM_BLD *bld)
+{
+ static const unsigned char prime256v1_gen[] = {
+ 0x04,
+ 0x6b, 0x17, 0xd1, 0xf2, 0xe1, 0x2c, 0x42, 0x47,
+ 0xf8, 0xbc, 0xe6, 0xe5, 0x63, 0xa4, 0x40, 0xf2,
+ 0x77, 0x03, 0x7d, 0x81, 0x2d, 0xeb, 0x33, 0xa0,
+ 0xf4, 0xa1, 0x39, 0x45, 0xd8, 0x98, 0xc2, 0x96,
+ 0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b,
+ 0x8e, 0xe7, 0xeb, 0x4a, 0x7c, 0x0f, 0x9e, 0x16,
+ 0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce,
+ 0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5
+ };
+ return do_create_ec_explicit_prime_params(bld, prime256v1_gen,
+ sizeof(prime256v1_gen));
+}
+
+static int create_ec_explicit_prime_params(OSSL_PARAM_BLD *bld)
+{
+ /* 2G */
+ static const unsigned char prime256v1_gen2[] = {
+ 0x04,
+ 0xe4, 0x97, 0x08, 0xbe, 0x7d, 0xfa, 0xa2, 0x9a,
+ 0xa3, 0x12, 0x6f, 0xe4, 0xe7, 0xd0, 0x25, 0xe3,
+ 0x4a, 0xc1, 0x03, 0x15, 0x8c, 0xd9, 0x33, 0xc6,
+ 0x97, 0x42, 0xf5, 0xdc, 0x97, 0xb9, 0xd7, 0x31,
+ 0xe9, 0x7d, 0x74, 0x3d, 0x67, 0x6a, 0x3b, 0x21,
+ 0x08, 0x9c, 0x31, 0x73, 0xf8, 0xc1, 0x27, 0xc9,
+ 0xd2, 0xa0, 0xa0, 0x83, 0x66, 0xe0, 0xc9, 0xda,
+ 0xa8, 0xc6, 0x56, 0x2b, 0x94, 0xb1, 0xae, 0x55
+ };
+ return do_create_ec_explicit_prime_params(bld, prime256v1_gen2,
+ sizeof(prime256v1_gen2));
+}
+
+# ifndef OPENSSL_NO_EC2M
+static int do_create_ec_explicit_trinomial_params(OSSL_PARAM_BLD *bld,
+ const unsigned char *gen,
+ size_t gen_len)
+{
+ BIGNUM *a, *b, *poly, *order, *cofactor;
+ /* sect233k1 characteristic-two-field tpBasis */
+ static const unsigned char poly_data[] = {
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ };
+ static const unsigned char a_data[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ static const unsigned char b_data[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
+ };
+ static const unsigned char order_data[] = {
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x9D, 0x5B, 0xB9, 0x15, 0xBC, 0xD4, 0x6E, 0xFB,
+ 0x1A, 0xD5, 0xF1, 0x73, 0xAB, 0xDF
+ };
+ static const unsigned char cofactor_data[]= {
+ 0x4
+ };
+ return TEST_ptr(a = BN_CTX_get(bnctx))
+ && TEST_ptr(b = BN_CTX_get(bnctx))
+ && TEST_ptr(poly = BN_CTX_get(bnctx))
+ && TEST_ptr(order = BN_CTX_get(bnctx))
+ && TEST_ptr(cofactor = BN_CTX_get(bnctx))
+ && TEST_ptr(BN_bin2bn(poly_data, sizeof(poly_data), poly))
+ && TEST_ptr(BN_bin2bn(a_data, sizeof(a_data), a))
+ && TEST_ptr(BN_bin2bn(b_data, sizeof(b_data), b))
+ && TEST_ptr(BN_bin2bn(order_data, sizeof(order_data), order))
+ && TEST_ptr(BN_bin2bn(cofactor_data, sizeof(cofactor_data), cofactor))
+ && TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
+ OSSL_PKEY_PARAM_EC_FIELD_TYPE,
+ SN_X9_62_characteristic_two_field, 0))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_P, poly))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_A, a))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_B, b))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld,
+ OSSL_PKEY_PARAM_EC_ORDER, order))
+ && TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_EC_GENERATOR, gen, gen_len))
+ && TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_EC_COFACTOR,
+ cofactor));
+}
+
+static int create_ec_explicit_trinomial_params_namedcurve(OSSL_PARAM_BLD *bld)
+{
+ static const unsigned char gen[] = {
+ 0x04,
+ 0x01, 0x72, 0x32, 0xBA, 0x85, 0x3A, 0x7E, 0x73, 0x1A, 0xF1, 0x29, 0xF2,
+ 0x2F, 0xF4, 0x14, 0x95, 0x63, 0xA4, 0x19, 0xC2, 0x6B, 0xF5, 0x0A, 0x4C,
+ 0x9D, 0x6E, 0xEF, 0xAD, 0x61, 0x26,
+ 0x01, 0xDB, 0x53, 0x7D, 0xEC, 0xE8, 0x19, 0xB7, 0xF7, 0x0F, 0x55, 0x5A,
+ 0x67, 0xC4, 0x27, 0xA8, 0xCD, 0x9B, 0xF1, 0x8A, 0xEB, 0x9B, 0x56, 0xE0,
+ 0xC1, 0x10, 0x56, 0xFA, 0xE6, 0xA3
+ };
+ return do_create_ec_explicit_trinomial_params(bld, gen, sizeof(gen));
+}
+
+static int create_ec_explicit_trinomial_params(OSSL_PARAM_BLD *bld)
+{
+ static const unsigned char gen2[] = {
+ 0x04,
+ 0x00, 0xd7, 0xba, 0xd0, 0x26, 0x6c, 0x31, 0x6a, 0x78, 0x76, 0x01, 0xd1,
+ 0x32, 0x4b, 0x8f, 0x30, 0x29, 0x2d, 0x78, 0x30, 0xca, 0x43, 0xaa, 0xf0,
+ 0xa2, 0x5a, 0xd4, 0x0f, 0xb3, 0xf4,
+ 0x00, 0x85, 0x4b, 0x1b, 0x8d, 0x50, 0x10, 0xa5, 0x1c, 0x80, 0xf7, 0x86,
+ 0x40, 0x62, 0x4c, 0x87, 0xd1, 0x26, 0x7a, 0x9c, 0x5c, 0xe9, 0x82, 0x29,
+ 0xd1, 0x67, 0x70, 0x41, 0xea, 0xcb
+ };
+ return do_create_ec_explicit_trinomial_params(bld, gen2, sizeof(gen2));
+}
+# endif /* OPENSSL_NO_EC2M */
+#endif /* OPENSSL_NO_EC */
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_CONTEXT,
+ OPT_RSA_FILE,
+ OPT_RSA_PSS_FILE,
+ OPT_CONFIG_FILE,
+ OPT_PROVIDER_NAME,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "context", OPT_CONTEXT, '-',
+ "Explicitly use a non-default library context" },
+ { "rsa", OPT_RSA_FILE, '<',
+ "PEM format RSA key file to encode/decode" },
+ { "pss", OPT_RSA_PSS_FILE, '<',
+ "PEM format RSA-PSS key file to encode/decode" },
+ { "config", OPT_CONFIG_FILE, '<',
+ "The configuration file to use for the library context" },
+ { "provider", OPT_PROVIDER_NAME, 's',
+ "The provider to load (The default value is 'default')" },
+ { NULL }
+ };
+ return options;
+}
+
+int setup_tests(void)
+{
+ const char *rsa_file = NULL;
+ const char *rsa_pss_file = NULL;
+ const char *prov_name = "default";
+ char *config_file = NULL;
+ int ok = 1;
+
+#ifndef OPENSSL_NO_DSA
+ static size_t qbits = 160; /* PVK only tolerates 160 Q bits */
+ static size_t pbits = 1024; /* With 160 Q bits, we MUST use 1024 P bits */
+ OSSL_PARAM DSA_params[] = {
+ OSSL_PARAM_size_t("pbits", &pbits),
+ OSSL_PARAM_size_t("qbits", &qbits),
+ OSSL_PARAM_END
+ };
+#endif
+
+#ifndef OPENSSL_NO_EC
+ static char groupname[] = "prime256v1";
+ OSSL_PARAM EC_params[] = {
+ OSSL_PARAM_utf8_string("group", groupname, sizeof(groupname) - 1),
+ OSSL_PARAM_END
+ };
+#endif
+
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_CONTEXT:
+ default_libctx = 0;
+ break;
+ case OPT_PROVIDER_NAME:
+ prov_name = opt_arg();
+ break;
+ case OPT_CONFIG_FILE:
+ config_file = opt_arg();
+ break;
+ case OPT_RSA_FILE:
+ rsa_file = opt_arg();
+ break;
+ case OPT_RSA_PSS_FILE:
+ rsa_pss_file = opt_arg();
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ if (strcmp(prov_name, "fips") == 0)
+ is_fips = 1;
+
+ if (default_libctx) {
+ if (!test_get_libctx(NULL, NULL, config_file, &deflprov, prov_name))
+ return 0;
+ } else {
+ if (!test_get_libctx(&testctx, &nullprov, config_file, &deflprov, prov_name))
+ return 0;
+ }
+
+ /* FIPS(3.0.0): provider imports explicit params but they won't work #17998 */
+ is_fips_3_0_0 = fips_provider_version_eq(testctx, 3, 0, 0);
+ if (is_fips_3_0_0 < 0)
+ return 0;
+
+ /* Separate provider/ctx for generating the test data */
+ if (!TEST_ptr(keyctx = OSSL_LIB_CTX_new()))
+ return 0;
+ if (!TEST_ptr(keyprov = OSSL_PROVIDER_load(keyctx, "default")))
+ return 0;
+
+#ifndef OPENSSL_NO_EC
+ if (!TEST_ptr(bnctx = BN_CTX_new_ex(testctx))
+ || !TEST_ptr(bld_prime_nc = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(bld_prime = OSSL_PARAM_BLD_new())
+ || !create_ec_explicit_prime_params_namedcurve(bld_prime_nc)
+ || !create_ec_explicit_prime_params(bld_prime)
+ || !TEST_ptr(ec_explicit_prime_params_nc = OSSL_PARAM_BLD_to_param(bld_prime_nc))
+ || !TEST_ptr(ec_explicit_prime_params_explicit = OSSL_PARAM_BLD_to_param(bld_prime))
+# ifndef OPENSSL_NO_EC2M
+ || !TEST_ptr(bld_tri_nc = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(bld_tri = OSSL_PARAM_BLD_new())
+ || !create_ec_explicit_trinomial_params_namedcurve(bld_tri_nc)
+ || !create_ec_explicit_trinomial_params(bld_tri)
+ || !TEST_ptr(ec_explicit_tri_params_nc = OSSL_PARAM_BLD_to_param(bld_tri_nc))
+ || !TEST_ptr(ec_explicit_tri_params_explicit = OSSL_PARAM_BLD_to_param(bld_tri))
+# endif
+ )
+ return 0;
+#endif
+
+ TEST_info("Generating keys...");
+
+#ifndef OPENSSL_NO_DH
+ TEST_info("Generating DH keys...");
+ MAKE_DOMAIN_KEYS(DH, "DH", NULL);
+ MAKE_DOMAIN_KEYS(DHX, "X9.42 DH", NULL);
+#endif
+#ifndef OPENSSL_NO_DSA
+ TEST_info("Generating DSA keys...");
+ MAKE_DOMAIN_KEYS(DSA, "DSA", DSA_params);
+#endif
+#ifndef OPENSSL_NO_EC
+ TEST_info("Generating EC keys...");
+ MAKE_DOMAIN_KEYS(EC, "EC", EC_params);
+ MAKE_DOMAIN_KEYS(ECExplicitPrimeNamedCurve, "EC", ec_explicit_prime_params_nc);
+ MAKE_DOMAIN_KEYS(ECExplicitPrime2G, "EC", ec_explicit_prime_params_explicit);
+# ifndef OPENSSL_NO_EC2M
+ MAKE_DOMAIN_KEYS(ECExplicitTriNamedCurve, "EC", ec_explicit_tri_params_nc);
+ MAKE_DOMAIN_KEYS(ECExplicitTri2G, "EC", ec_explicit_tri_params_explicit);
+# endif
+ MAKE_KEYS(ED25519, "ED25519", NULL);
+ MAKE_KEYS(ED448, "ED448", NULL);
+ MAKE_KEYS(X25519, "X25519", NULL);
+ MAKE_KEYS(X448, "X448", NULL);
+#endif
+ TEST_info("Loading RSA key...");
+ ok = ok && TEST_ptr(key_RSA = load_pkey_pem(rsa_file, keyctx));
+ TEST_info("Loading RSA_PSS key...");
+ ok = ok && TEST_ptr(key_RSA_PSS = load_pkey_pem(rsa_pss_file, keyctx));
+ TEST_info("Generating keys done");
+
+ if (ok) {
+#ifndef OPENSSL_NO_DH
+ ADD_TEST_SUITE(DH);
+ ADD_TEST_SUITE_PARAMS(DH);
+ ADD_TEST_SUITE(DHX);
+ ADD_TEST_SUITE_PARAMS(DHX);
+ /*
+ * DH has no support for PEM_write_bio_PrivateKey_traditional(),
+ * so no legacy tests.
+ */
+#endif
+#ifndef OPENSSL_NO_DSA
+ ADD_TEST_SUITE(DSA);
+ ADD_TEST_SUITE_PARAMS(DSA);
+ ADD_TEST_SUITE_LEGACY(DSA);
+ ADD_TEST_SUITE_MSBLOB(DSA);
+ ADD_TEST_SUITE_UNPROTECTED_PVK(DSA);
+# ifndef OPENSSL_NO_RC4
+ ADD_TEST_SUITE_PROTECTED_PVK(DSA);
+# endif
+#endif
+#ifndef OPENSSL_NO_EC
+ ADD_TEST_SUITE(EC);
+ ADD_TEST_SUITE_PARAMS(EC);
+ ADD_TEST_SUITE_LEGACY(EC);
+ ADD_TEST_SUITE(ECExplicitPrimeNamedCurve);
+ ADD_TEST_SUITE_LEGACY(ECExplicitPrimeNamedCurve);
+ ADD_TEST_SUITE(ECExplicitPrime2G);
+ ADD_TEST_SUITE_LEGACY(ECExplicitPrime2G);
+# ifndef OPENSSL_NO_EC2M
+ ADD_TEST_SUITE(ECExplicitTriNamedCurve);
+ ADD_TEST_SUITE_LEGACY(ECExplicitTriNamedCurve);
+ ADD_TEST_SUITE(ECExplicitTri2G);
+ ADD_TEST_SUITE_LEGACY(ECExplicitTri2G);
+# endif
+ ADD_TEST_SUITE(ED25519);
+ ADD_TEST_SUITE(ED448);
+ ADD_TEST_SUITE(X25519);
+ ADD_TEST_SUITE(X448);
+ /*
+ * ED25519, ED448, X25519 and X448 have no support for
+ * PEM_write_bio_PrivateKey_traditional(), so no legacy tests.
+ */
+#endif
+ ADD_TEST_SUITE(RSA);
+ ADD_TEST_SUITE_LEGACY(RSA);
+ ADD_TEST_SUITE(RSA_PSS);
+ /*
+ * RSA-PSS has no support for PEM_write_bio_PrivateKey_traditional(),
+ * so no legacy tests.
+ */
+ ADD_TEST_SUITE_MSBLOB(RSA);
+ ADD_TEST_SUITE_UNPROTECTED_PVK(RSA);
+# ifndef OPENSSL_NO_RC4
+ ADD_TEST_SUITE_PROTECTED_PVK(RSA);
+# endif
+ }
+
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+#ifndef OPENSSL_NO_EC
+ OSSL_PARAM_free(ec_explicit_prime_params_nc);
+ OSSL_PARAM_free(ec_explicit_prime_params_explicit);
+ OSSL_PARAM_BLD_free(bld_prime_nc);
+ OSSL_PARAM_BLD_free(bld_prime);
+# ifndef OPENSSL_NO_EC2M
+ OSSL_PARAM_free(ec_explicit_tri_params_nc);
+ OSSL_PARAM_free(ec_explicit_tri_params_explicit);
+ OSSL_PARAM_BLD_free(bld_tri_nc);
+ OSSL_PARAM_BLD_free(bld_tri);
+# endif
+ BN_CTX_free(bnctx);
+#endif /* OPENSSL_NO_EC */
+
+#ifndef OPENSSL_NO_DH
+ FREE_DOMAIN_KEYS(DH);
+ FREE_DOMAIN_KEYS(DHX);
+#endif
+#ifndef OPENSSL_NO_DSA
+ FREE_DOMAIN_KEYS(DSA);
+#endif
+#ifndef OPENSSL_NO_EC
+ FREE_DOMAIN_KEYS(EC);
+ FREE_DOMAIN_KEYS(ECExplicitPrimeNamedCurve);
+ FREE_DOMAIN_KEYS(ECExplicitPrime2G);
+# ifndef OPENSSL_NO_EC2M
+ FREE_DOMAIN_KEYS(ECExplicitTriNamedCurve);
+ FREE_DOMAIN_KEYS(ECExplicitTri2G);
+# endif
+ FREE_KEYS(ED25519);
+ FREE_KEYS(ED448);
+ FREE_KEYS(X25519);
+ FREE_KEYS(X448);
+#endif
+ FREE_KEYS(RSA);
+ FREE_KEYS(RSA_PSS);
+
+ OSSL_PROVIDER_unload(nullprov);
+ OSSL_PROVIDER_unload(deflprov);
+ OSSL_PROVIDER_unload(keyprov);
+ OSSL_LIB_CTX_free(testctx);
+ OSSL_LIB_CTX_free(keyctx);
+}
diff --git a/test/endecoder_legacy_test.c b/test/endecoder_legacy_test.c
new file mode 100644
index 000000000000..943cba56e59f
--- /dev/null
+++ b/test/endecoder_legacy_test.c
@@ -0,0 +1,731 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * This program tests the following known key type specific function against
+ * the corresponding OSSL_ENCODER implementation:
+ *
+ * - i2d_{TYPE}PrivateKey()
+ * - i2d_{TYPE}PublicKey(),
+ * - i2d_{TYPE}params(),
+ * - i2d_{TYPE}_PUBKEY(),
+ * - PEM_write_bio_{TYPE}PrivateKey()
+ * - PEM_write_bio_{TYPE}PublicKey()
+ * - PEM_write_bio_{TYPE}params()
+ * - PEM_write_bio_{TYPE}_PUBKEY()
+ *
+ * as well as the following functions against the corresponding OSSL_DECODER
+ * implementation.
+ *
+ * - d2i_{TYPE}PrivateKey()
+ * - d2i_{TYPE}PublicKey(),
+ * - d2i_{TYPE}params(),
+ * - d2i_{TYPE}_PUBKEY(),
+ * - PEM_read_bio_{TYPE}PrivateKey()
+ * - PEM_read_bio_{TYPE}PublicKey()
+ * - PEM_read_bio_{TYPE}params()
+ * - PEM_read_bio_{TYPE}_PUBKEY()
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ * We test deprecated functions, so we need to suppress deprecation warnings.
+ */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <openssl/bio.h>
+#include <openssl/evp.h>
+#include <openssl/asn1.h>
+#include <openssl/pem.h>
+#include <openssl/params.h>
+#include <openssl/encoder.h>
+#include <openssl/decoder.h>
+#include <openssl/dh.h>
+#include <openssl/dsa.h>
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+# include <openssl/rsa.h>
+#endif
+#include "internal/nelem.h"
+#include "crypto/evp.h"
+
+#include "testutil.h"
+
+typedef int PEM_write_bio_of_void_protected(BIO *out, const void *obj,
+ const EVP_CIPHER *enc,
+ unsigned char *kstr, int klen,
+ pem_password_cb *cb, void *u);
+typedef int PEM_write_bio_of_void_unprotected(BIO *out, const void *obj);
+typedef void *PEM_read_bio_of_void(BIO *out, void **obj,
+ pem_password_cb *cb, void *u);
+typedef int EVP_PKEY_print_fn(BIO *out, const EVP_PKEY *pkey,
+ int indent, ASN1_PCTX *pctx);
+typedef int EVP_PKEY_eq_fn(const EVP_PKEY *a, const EVP_PKEY *b);
+
+static struct test_stanza_st {
+ const char *keytype;
+ const char *structure[2];
+ int evp_type;
+
+ i2d_of_void *i2d_PrivateKey;
+ i2d_of_void *i2d_PublicKey;
+ i2d_of_void *i2d_params;
+ i2d_of_void *i2d_PUBKEY;
+ PEM_write_bio_of_void_protected *pem_write_bio_PrivateKey;
+ PEM_write_bio_of_void_unprotected *pem_write_bio_PublicKey;
+ PEM_write_bio_of_void_unprotected *pem_write_bio_params;
+ PEM_write_bio_of_void_unprotected *pem_write_bio_PUBKEY;
+
+ d2i_of_void *d2i_PrivateKey;
+ d2i_of_void *d2i_PublicKey;
+ d2i_of_void *d2i_params;
+ d2i_of_void *d2i_PUBKEY;
+ PEM_read_bio_of_void *pem_read_bio_PrivateKey;
+ PEM_read_bio_of_void *pem_read_bio_PublicKey;
+ PEM_read_bio_of_void *pem_read_bio_params;
+ PEM_read_bio_of_void *pem_read_bio_PUBKEY;
+} test_stanzas[] = {
+#ifndef OPENSSL_NO_DH
+ { "DH", { "DH", "type-specific" }, EVP_PKEY_DH,
+ NULL, /* No i2d_DHPrivateKey */
+ NULL, /* No i2d_DHPublicKey */
+ (i2d_of_void *)i2d_DHparams,
+ NULL, /* No i2d_DH_PUBKEY */
+ NULL, /* No PEM_write_bio_DHPrivateKey */
+ NULL, /* No PEM_write_bio_DHPublicKey */
+ (PEM_write_bio_of_void_unprotected *)PEM_write_bio_DHparams,
+ NULL, /* No PEM_write_bio_DH_PUBKEY */
+ NULL, /* No d2i_DHPrivateKey */
+ NULL, /* No d2i_DHPublicKey */
+ (d2i_of_void *)d2i_DHparams,
+ NULL, /* No d2i_DH_PUBKEY */
+ NULL, /* No PEM_read_bio_DHPrivateKey */
+ NULL, /* No PEM_read_bio_DHPublicKey */
+ (PEM_read_bio_of_void *)PEM_read_bio_DHparams,
+ NULL }, /* No PEM_read_bio_DH_PUBKEY */
+ { "DHX", { "DHX", "type-specific" }, EVP_PKEY_DHX,
+ NULL, /* No i2d_DHxPrivateKey */
+ NULL, /* No i2d_DHxPublicKey */
+ (i2d_of_void *)i2d_DHxparams,
+ NULL, /* No i2d_DHx_PUBKEY */
+ NULL, /* No PEM_write_bio_DHxPrivateKey */
+ NULL, /* No PEM_write_bio_DHxPublicKey */
+ (PEM_write_bio_of_void_unprotected *)PEM_write_bio_DHxparams,
+ NULL, /* No PEM_write_bio_DHx_PUBKEY */
+ NULL, /* No d2i_DHxPrivateKey */
+ NULL, /* No d2i_DHxPublicKey */
+ (d2i_of_void *)d2i_DHxparams,
+ NULL, /* No d2i_DHx_PUBKEY */
+ NULL, /* No PEM_read_bio_DHxPrivateKey */
+ NULL, /* No PEM_read_bio_DHxPublicKey */
+ NULL, /* No PEM_read_bio_DHxparams */
+ NULL }, /* No PEM_read_bio_DHx_PUBKEY */
+#endif
+#ifndef OPENSSL_NO_DSA
+ { "DSA", { "DSA", "type-specific" }, EVP_PKEY_DSA,
+ (i2d_of_void *)i2d_DSAPrivateKey,
+ (i2d_of_void *)i2d_DSAPublicKey,
+ (i2d_of_void *)i2d_DSAparams,
+ (i2d_of_void *)i2d_DSA_PUBKEY,
+ (PEM_write_bio_of_void_protected *)PEM_write_bio_DSAPrivateKey,
+ NULL, /* No PEM_write_bio_DSAPublicKey */
+ (PEM_write_bio_of_void_unprotected *)PEM_write_bio_DSAparams,
+ (PEM_write_bio_of_void_unprotected *)PEM_write_bio_DSA_PUBKEY,
+ (d2i_of_void *)d2i_DSAPrivateKey,
+ (d2i_of_void *)d2i_DSAPublicKey,
+ (d2i_of_void *)d2i_DSAparams,
+ (d2i_of_void *)d2i_DSA_PUBKEY,
+ (PEM_read_bio_of_void *)PEM_read_bio_DSAPrivateKey,
+ NULL, /* No PEM_write_bio_DSAPublicKey */
+ (PEM_read_bio_of_void *)PEM_read_bio_DSAparams,
+ (PEM_read_bio_of_void *)PEM_read_bio_DSA_PUBKEY },
+#endif
+#ifndef OPENSSL_NO_EC
+ { "EC", { "EC", "type-specific" }, EVP_PKEY_EC,
+ (i2d_of_void *)i2d_ECPrivateKey,
+ NULL, /* No i2d_ECPublicKey */
+ (i2d_of_void *)i2d_ECParameters,
+ (i2d_of_void *)i2d_EC_PUBKEY,
+ (PEM_write_bio_of_void_protected *)PEM_write_bio_ECPrivateKey,
+ NULL, /* No PEM_write_bio_ECPublicKey */
+ NULL, /* No PEM_write_bio_ECParameters */
+ (PEM_write_bio_of_void_unprotected *)PEM_write_bio_EC_PUBKEY,
+ (d2i_of_void *)d2i_ECPrivateKey,
+ NULL, /* No d2i_ECPublicKey */
+ (d2i_of_void *)d2i_ECParameters,
+ (d2i_of_void *)d2i_EC_PUBKEY,
+ (PEM_read_bio_of_void *)PEM_read_bio_ECPrivateKey,
+ NULL, /* No PEM_read_bio_ECPublicKey */
+ NULL, /* No PEM_read_bio_ECParameters */
+ (PEM_read_bio_of_void *)PEM_read_bio_EC_PUBKEY, },
+#endif
+ { "RSA", { "RSA", "type-specific" }, EVP_PKEY_RSA,
+ (i2d_of_void *)i2d_RSAPrivateKey,
+ (i2d_of_void *)i2d_RSAPublicKey,
+ NULL, /* No i2d_RSAparams */
+ (i2d_of_void *)i2d_RSA_PUBKEY,
+ (PEM_write_bio_of_void_protected *)PEM_write_bio_RSAPrivateKey,
+ (PEM_write_bio_of_void_unprotected *)PEM_write_bio_RSAPublicKey,
+ NULL, /* No PEM_write_bio_RSAparams */
+ (PEM_write_bio_of_void_unprotected *)PEM_write_bio_RSA_PUBKEY,
+ (d2i_of_void *)d2i_RSAPrivateKey,
+ (d2i_of_void *)d2i_RSAPublicKey,
+ NULL, /* No d2i_RSAparams */
+ (d2i_of_void *)d2i_RSA_PUBKEY,
+ (PEM_read_bio_of_void *)PEM_read_bio_RSAPrivateKey,
+ (PEM_read_bio_of_void *)PEM_read_bio_RSAPublicKey,
+ NULL, /* No PEM_read_bio_RSAparams */
+ (PEM_read_bio_of_void *)PEM_read_bio_RSA_PUBKEY }
+};
+
+/*
+ * Keys that we're going to test with. We initialize this with the intended
+ * key types, and generate the keys themselves on program setup.
+ * They must all be downgradable with EVP_PKEY_get0()
+ */
+
+#ifndef OPENSSL_NO_DH
+static const OSSL_PARAM DH_params[] = { OSSL_PARAM_END };
+static const OSSL_PARAM DHX_params[] = { OSSL_PARAM_END };
+#endif
+#ifndef OPENSSL_NO_DSA
+static size_t qbits = 160; /* PVK only tolerates 160 Q bits */
+static size_t pbits = 1024; /* With 160 Q bits, we MUST use 1024 P bits */
+static const OSSL_PARAM DSA_params[] = {
+ OSSL_PARAM_size_t("pbits", &pbits),
+ OSSL_PARAM_size_t("qbits", &qbits),
+ OSSL_PARAM_END
+};
+#endif
+#ifndef OPENSSL_NO_EC
+static char groupname[] = "prime256v1";
+static const OSSL_PARAM EC_params[] = {
+ OSSL_PARAM_utf8_string("group", groupname, sizeof(groupname) - 1),
+ OSSL_PARAM_END
+};
+#endif
+
+static struct key_st {
+ const char *keytype;
+ int evp_type;
+ /* non-NULL if a template EVP_PKEY must be generated first */
+ const OSSL_PARAM *template_params;
+
+ EVP_PKEY *key;
+} keys[] = {
+#ifndef OPENSSL_NO_DH
+ { "DH", EVP_PKEY_DH, DH_params, NULL },
+ { "DHX", EVP_PKEY_DHX, DHX_params, NULL },
+#endif
+#ifndef OPENSSL_NO_DSA
+ { "DSA", EVP_PKEY_DSA, DSA_params, NULL },
+#endif
+#ifndef OPENSSL_NO_EC
+ { "EC", EVP_PKEY_EC, EC_params, NULL },
+#endif
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ { "RSA", EVP_PKEY_RSA, NULL, NULL },
+#endif
+};
+
+static EVP_PKEY *make_key(const char *type,
+ const OSSL_PARAM *gen_template_params)
+{
+ EVP_PKEY *template = NULL;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ OSSL_PARAM *gen_template_params_noconst =
+ (OSSL_PARAM *)gen_template_params;
+
+ if (gen_template_params != NULL
+ && ((ctx = EVP_PKEY_CTX_new_from_name(NULL, type, NULL)) == NULL
+ || EVP_PKEY_paramgen_init(ctx) <= 0
+ || (gen_template_params[0].key != NULL
+ && EVP_PKEY_CTX_set_params(ctx, gen_template_params_noconst) <= 0)
+ || EVP_PKEY_generate(ctx, &template) <= 0))
+ goto end;
+ EVP_PKEY_CTX_free(ctx);
+
+ /*
+ * No real need to check the errors other than for the cascade
+ * effect. |pkey| will simply remain NULL if something goes wrong.
+ */
+ ctx =
+ template != NULL
+ ? EVP_PKEY_CTX_new(template, NULL)
+ : EVP_PKEY_CTX_new_from_name(NULL, type, NULL);
+
+ (void)(ctx != NULL
+ && EVP_PKEY_keygen_init(ctx) > 0
+ && EVP_PKEY_keygen(ctx, &pkey) > 0);
+
+ end:
+ EVP_PKEY_free(template);
+ EVP_PKEY_CTX_free(ctx);
+ return pkey;
+}
+
+static struct key_st *lookup_key(const char *type)
+{
+ size_t i;
+
+ for (i = 0; i < OSSL_NELEM(keys); i++) {
+ if (strcmp(keys[i].keytype, type) == 0)
+ return &keys[i];
+ }
+ return NULL;
+}
+
+static int test_membio_str_eq(BIO *bio_provided, BIO *bio_legacy)
+{
+ char *str_provided = NULL, *str_legacy = NULL;
+ long len_provided = BIO_get_mem_data(bio_provided, &str_provided);
+ long len_legacy = BIO_get_mem_data(bio_legacy, &str_legacy);
+
+ return TEST_long_ge(len_legacy, 0)
+ && TEST_long_ge(len_provided, 0)
+ && TEST_strn2_eq(str_provided, len_provided,
+ str_legacy, len_legacy);
+}
+
+static int test_protected_PEM(const char *keytype, int evp_type,
+ const void *legacy_key,
+ PEM_write_bio_of_void_protected *pem_write_bio,
+ PEM_read_bio_of_void *pem_read_bio,
+ EVP_PKEY_eq_fn *evp_pkey_eq,
+ EVP_PKEY_print_fn *evp_pkey_print,
+ EVP_PKEY *provided_pkey, int selection,
+ const char *structure)
+{
+ int ok = 0;
+ BIO *membio_legacy = NULL;
+ BIO *membio_provided = NULL;
+ OSSL_ENCODER_CTX *ectx = NULL;
+ OSSL_DECODER_CTX *dctx = NULL;
+ void *decoded_legacy_key = NULL;
+ EVP_PKEY *decoded_legacy_pkey = NULL;
+ EVP_PKEY *decoded_provided_pkey = NULL;
+
+ /* Set up the BIOs, so we have them */
+ if (!TEST_ptr(membio_legacy = BIO_new(BIO_s_mem()))
+ || !TEST_ptr(membio_provided = BIO_new(BIO_s_mem())))
+ goto end;
+
+ if (!TEST_ptr(ectx =
+ OSSL_ENCODER_CTX_new_for_pkey(provided_pkey, selection,
+ "PEM", structure,
+ NULL))
+ || !TEST_true(OSSL_ENCODER_to_bio(ectx, membio_provided))
+ || !TEST_true(pem_write_bio(membio_legacy, legacy_key,
+ NULL, NULL, 0, NULL, NULL))
+ || !test_membio_str_eq(membio_provided, membio_legacy))
+ goto end;
+
+ if (pem_read_bio != NULL) {
+ /* Now try decoding the results and compare the resulting keys */
+
+ if (!TEST_ptr(decoded_legacy_pkey = EVP_PKEY_new())
+ || !TEST_ptr(dctx =
+ OSSL_DECODER_CTX_new_for_pkey(&decoded_provided_pkey,
+ "PEM", structure,
+ keytype, selection,
+ NULL, NULL))
+ || !TEST_true(OSSL_DECODER_from_bio(dctx, membio_provided))
+ || !TEST_ptr(decoded_legacy_key =
+ pem_read_bio(membio_legacy, NULL, NULL, NULL))
+ || !TEST_true(EVP_PKEY_assign(decoded_legacy_pkey, evp_type,
+ decoded_legacy_key)))
+ goto end;
+
+ if (!TEST_int_gt(evp_pkey_eq(decoded_provided_pkey,
+ decoded_legacy_pkey), 0)) {
+ TEST_info("decoded_provided_pkey:");
+ evp_pkey_print(bio_out, decoded_provided_pkey, 0, NULL);
+ TEST_info("decoded_legacy_pkey:");
+ evp_pkey_print(bio_out, decoded_legacy_pkey, 0, NULL);
+ }
+ }
+ ok = 1;
+ end:
+ EVP_PKEY_free(decoded_legacy_pkey);
+ EVP_PKEY_free(decoded_provided_pkey);
+ OSSL_ENCODER_CTX_free(ectx);
+ OSSL_DECODER_CTX_free(dctx);
+ BIO_free(membio_provided);
+ BIO_free(membio_legacy);
+ return ok;
+}
+
+static int test_unprotected_PEM(const char *keytype, int evp_type,
+ const void *legacy_key,
+ PEM_write_bio_of_void_unprotected *pem_write_bio,
+ PEM_read_bio_of_void *pem_read_bio,
+ EVP_PKEY_eq_fn *evp_pkey_eq,
+ EVP_PKEY_print_fn *evp_pkey_print,
+ EVP_PKEY *provided_pkey, int selection,
+ const char *structure)
+{
+ int ok = 0;
+ BIO *membio_legacy = NULL;
+ BIO *membio_provided = NULL;
+ OSSL_ENCODER_CTX *ectx = NULL;
+ OSSL_DECODER_CTX *dctx = NULL;
+ void *decoded_legacy_key = NULL;
+ EVP_PKEY *decoded_legacy_pkey = NULL;
+ EVP_PKEY *decoded_provided_pkey = NULL;
+
+ /* Set up the BIOs, so we have them */
+ if (!TEST_ptr(membio_legacy = BIO_new(BIO_s_mem()))
+ || !TEST_ptr(membio_provided = BIO_new(BIO_s_mem())))
+ goto end;
+
+ if (!TEST_ptr(ectx =
+ OSSL_ENCODER_CTX_new_for_pkey(provided_pkey, selection,
+ "PEM", structure,
+ NULL))
+ || !TEST_true(OSSL_ENCODER_to_bio(ectx, membio_provided))
+ || !TEST_true(pem_write_bio(membio_legacy, legacy_key))
+ || !test_membio_str_eq(membio_provided, membio_legacy))
+ goto end;
+
+ if (pem_read_bio != NULL) {
+ /* Now try decoding the results and compare the resulting keys */
+
+ if (!TEST_ptr(decoded_legacy_pkey = EVP_PKEY_new())
+ || !TEST_ptr(dctx =
+ OSSL_DECODER_CTX_new_for_pkey(&decoded_provided_pkey,
+ "PEM", structure,
+ keytype, selection,
+ NULL, NULL))
+ || !TEST_true(OSSL_DECODER_from_bio(dctx, membio_provided))
+ || !TEST_ptr(decoded_legacy_key =
+ pem_read_bio(membio_legacy, NULL, NULL, NULL))
+ || !TEST_true(EVP_PKEY_assign(decoded_legacy_pkey, evp_type,
+ decoded_legacy_key)))
+ goto end;
+
+ if (!TEST_int_gt(evp_pkey_eq(decoded_provided_pkey,
+ decoded_legacy_pkey), 0)) {
+ TEST_info("decoded_provided_pkey:");
+ evp_pkey_print(bio_out, decoded_provided_pkey, 0, NULL);
+ TEST_info("decoded_legacy_pkey:");
+ evp_pkey_print(bio_out, decoded_legacy_pkey, 0, NULL);
+ }
+ }
+ ok = 1;
+ end:
+ EVP_PKEY_free(decoded_legacy_pkey);
+ EVP_PKEY_free(decoded_provided_pkey);
+ OSSL_ENCODER_CTX_free(ectx);
+ OSSL_DECODER_CTX_free(dctx);
+ BIO_free(membio_provided);
+ BIO_free(membio_legacy);
+ return ok;
+}
+
+static int test_DER(const char *keytype, int evp_type,
+ const void *legacy_key, i2d_of_void *i2d, d2i_of_void *d2i,
+ EVP_PKEY_eq_fn *evp_pkey_eq,
+ EVP_PKEY_print_fn *evp_pkey_print,
+ EVP_PKEY *provided_pkey, int selection,
+ const char *structure)
+{
+ int ok = 0;
+ unsigned char *der_legacy = NULL;
+ const unsigned char *pder_legacy = NULL;
+ size_t der_legacy_len = 0;
+ unsigned char *der_provided = NULL;
+ const unsigned char *pder_provided = NULL;
+ size_t der_provided_len = 0;
+ size_t tmp_size;
+ OSSL_ENCODER_CTX *ectx = NULL;
+ OSSL_DECODER_CTX *dctx = NULL;
+ void *decoded_legacy_key = NULL;
+ EVP_PKEY *decoded_legacy_pkey = NULL;
+ EVP_PKEY *decoded_provided_pkey = NULL;
+
+ if (!TEST_ptr(ectx =
+ OSSL_ENCODER_CTX_new_for_pkey(provided_pkey, selection,
+ "DER", structure,
+ NULL))
+ || !TEST_true(OSSL_ENCODER_to_data(ectx,
+ &der_provided, &der_provided_len))
+ || !TEST_size_t_gt(der_legacy_len = i2d(legacy_key, &der_legacy), 0)
+ || !TEST_mem_eq(der_provided, der_provided_len,
+ der_legacy, der_legacy_len))
+ goto end;
+
+ if (d2i != NULL) {
+ /* Now try decoding the results and compare the resulting keys */
+
+ if (!TEST_ptr(decoded_legacy_pkey = EVP_PKEY_new())
+ || !TEST_ptr(dctx =
+ OSSL_DECODER_CTX_new_for_pkey(&decoded_provided_pkey,
+ "DER", structure,
+ keytype, selection,
+ NULL, NULL))
+ || !TEST_true((pder_provided = der_provided,
+ tmp_size = der_provided_len,
+ OSSL_DECODER_from_data(dctx, &pder_provided,
+ &tmp_size)))
+ || !TEST_ptr((pder_legacy = der_legacy,
+ decoded_legacy_key = d2i(NULL, &pder_legacy,
+ (long)der_legacy_len)))
+ || !TEST_true(EVP_PKEY_assign(decoded_legacy_pkey, evp_type,
+ decoded_legacy_key)))
+ goto end;
+
+ if (!TEST_int_gt(evp_pkey_eq(decoded_provided_pkey,
+ decoded_legacy_pkey), 0)) {
+ TEST_info("decoded_provided_pkey:");
+ evp_pkey_print(bio_out, decoded_provided_pkey, 0, NULL);
+ TEST_info("decoded_legacy_pkey:");
+ evp_pkey_print(bio_out, decoded_legacy_pkey, 0, NULL);
+ }
+ }
+ ok = 1;
+ end:
+ EVP_PKEY_free(decoded_legacy_pkey);
+ EVP_PKEY_free(decoded_provided_pkey);
+ OSSL_ENCODER_CTX_free(ectx);
+ OSSL_DECODER_CTX_free(dctx);
+ OPENSSL_free(der_provided);
+ OPENSSL_free(der_legacy);
+ return ok;
+}
+
+static int test_key(int idx)
+{
+ struct test_stanza_st *test_stanza = NULL;
+ struct key_st *key = NULL;
+ int ok = 0;
+ size_t i;
+ EVP_PKEY *pkey = NULL, *downgraded_pkey = NULL;
+ const void *legacy_obj = NULL;
+
+ /* Get the test data */
+ if (!TEST_ptr(test_stanza = &test_stanzas[idx])
+ || !TEST_ptr(key = lookup_key(test_stanza->keytype)))
+ goto end;
+
+ /* Set up the keys */
+ if (!TEST_ptr(pkey = key->key)
+ || !TEST_true(evp_pkey_copy_downgraded(&downgraded_pkey, pkey))
+ || !TEST_ptr(downgraded_pkey)
+ || !TEST_int_eq(EVP_PKEY_get_id(downgraded_pkey), key->evp_type)
+ || !TEST_ptr(legacy_obj = EVP_PKEY_get0(downgraded_pkey)))
+ goto end;
+
+ ok = 1;
+
+ /* Test PrivateKey to PEM */
+ if (test_stanza->pem_write_bio_PrivateKey != NULL) {
+ int selection = OSSL_KEYMGMT_SELECT_ALL;
+
+ for (i = 0; i < OSSL_NELEM(test_stanza->structure); i++) {
+ const char *structure = test_stanza->structure[i];
+
+ TEST_info("Test OSSL_ENCODER against PEM_write_bio_{TYPE}PrivateKey for %s, %s",
+ test_stanza->keytype, structure);
+ if (!test_protected_PEM(key->keytype, key->evp_type, legacy_obj,
+ test_stanza->pem_write_bio_PrivateKey,
+ test_stanza->pem_read_bio_PrivateKey,
+ EVP_PKEY_eq, EVP_PKEY_print_private,
+ pkey, selection, structure))
+ ok = 0;
+ }
+ }
+
+ /* Test PublicKey to PEM */
+ if (test_stanza->pem_write_bio_PublicKey != NULL) {
+ int selection =
+ OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
+
+ for (i = 0; i < OSSL_NELEM(test_stanza->structure); i++) {
+ const char *structure = test_stanza->structure[i];
+
+ TEST_info("Test OSSL_ENCODER against PEM_write_bio_{TYPE}PublicKey for %s, %s",
+ test_stanza->keytype, structure);
+ if (!test_unprotected_PEM(key->keytype, key->evp_type, legacy_obj,
+ test_stanza->pem_write_bio_PublicKey,
+ test_stanza->pem_read_bio_PublicKey,
+ EVP_PKEY_eq, EVP_PKEY_print_public,
+ pkey, selection, structure))
+ ok = 0;
+ }
+ }
+
+ /* Test params to PEM */
+ if (test_stanza->pem_write_bio_params != NULL) {
+ int selection = OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
+
+ for (i = 0; i < OSSL_NELEM(test_stanza->structure); i++) {
+ const char *structure = test_stanza->structure[i];
+
+ TEST_info("Test OSSL_ENCODER against PEM_write_bio_{TYPE}params for %s, %s",
+ test_stanza->keytype, structure);
+ if (!test_unprotected_PEM(key->keytype, key->evp_type, legacy_obj,
+ test_stanza->pem_write_bio_params,
+ test_stanza->pem_read_bio_params,
+ EVP_PKEY_parameters_eq,
+ EVP_PKEY_print_params,
+ pkey, selection, structure))
+ ok = 0;
+ }
+ }
+
+ /* Test PUBKEY to PEM */
+ if (test_stanza->pem_write_bio_PUBKEY != NULL) {
+ int selection =
+ OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
+ const char *structure = "SubjectPublicKeyInfo";
+
+ TEST_info("Test OSSL_ENCODER against PEM_write_bio_{TYPE}_PUBKEY for %s, %s",
+ test_stanza->keytype, structure);
+ if (!test_unprotected_PEM(key->keytype, key->evp_type, legacy_obj,
+ test_stanza->pem_write_bio_PUBKEY,
+ test_stanza->pem_read_bio_PUBKEY,
+ EVP_PKEY_eq, EVP_PKEY_print_public,
+ pkey, selection, structure))
+ ok = 0;
+ }
+
+
+ /* Test PrivateKey to DER */
+ if (test_stanza->i2d_PrivateKey != NULL) {
+ int selection = OSSL_KEYMGMT_SELECT_ALL;
+
+ for (i = 0; i < OSSL_NELEM(test_stanza->structure); i++) {
+ const char *structure = test_stanza->structure[i];
+
+ TEST_info("Test OSSL_ENCODER against i2d_{TYPE}PrivateKey for %s, %s",
+ test_stanza->keytype, structure);
+ if (!test_DER(key->keytype, key->evp_type, legacy_obj,
+ test_stanza->i2d_PrivateKey,
+ test_stanza->d2i_PrivateKey,
+ EVP_PKEY_eq, EVP_PKEY_print_private,
+ pkey, selection, structure))
+ ok = 0;
+ }
+ }
+
+ /* Test PublicKey to DER */
+ if (test_stanza->i2d_PublicKey != NULL) {
+ int selection =
+ OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
+
+ for (i = 0; i < OSSL_NELEM(test_stanza->structure); i++) {
+ const char *structure = test_stanza->structure[i];
+
+ TEST_info("Test OSSL_ENCODER against i2d_{TYPE}PublicKey for %s, %s",
+ test_stanza->keytype, structure);
+ if (!test_DER(key->keytype, key->evp_type, legacy_obj,
+ test_stanza->i2d_PublicKey,
+ test_stanza->d2i_PublicKey,
+ EVP_PKEY_eq, EVP_PKEY_print_public,
+ pkey, selection, structure))
+ ok = 0;
+ }
+ }
+
+ /* Test params to DER */
+ if (test_stanza->i2d_params != NULL) {
+ int selection = OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
+
+ for (i = 0; i < OSSL_NELEM(test_stanza->structure); i++) {
+ const char *structure = test_stanza->structure[i];
+
+ TEST_info("Test OSSL_ENCODER against i2d_{TYPE}params for %s, %s",
+ test_stanza->keytype, structure);
+ if (!test_DER(key->keytype, key->evp_type, legacy_obj,
+ test_stanza->i2d_params, test_stanza->d2i_params,
+ EVP_PKEY_parameters_eq, EVP_PKEY_print_params,
+ pkey, selection, structure))
+ ok = 0;
+ }
+ }
+
+ /* Test PUBKEY to DER */
+ if (test_stanza->i2d_PUBKEY != NULL) {
+ int selection =
+ OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS;
+ const char *structure = "SubjectPublicKeyInfo";
+
+ TEST_info("Test OSSL_ENCODER against i2d_{TYPE}_PUBKEY for %s, %s",
+ test_stanza->keytype, structure);
+ if (!test_DER(key->keytype, key->evp_type, legacy_obj,
+ test_stanza->i2d_PUBKEY, test_stanza->d2i_PUBKEY,
+ EVP_PKEY_eq, EVP_PKEY_print_public,
+ pkey, selection, structure))
+ ok = 0;
+ }
+ end:
+ EVP_PKEY_free(downgraded_pkey);
+ return ok;
+}
+
+#define USAGE "rsa-key.pem dh-key.pem\n"
+OPT_TEST_DECLARE_USAGE(USAGE)
+
+int setup_tests(void)
+{
+ size_t i;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+ if (test_get_argument_count() != 2) {
+ TEST_error("usage: endecoder_legacy_test %s", USAGE);
+ return 0;
+ }
+
+ TEST_info("Generating keys...");
+
+ for (i = 0; i < OSSL_NELEM(keys); i++) {
+#ifndef OPENSSL_NO_DH
+ if (strcmp(keys[i].keytype, "DH") == 0) {
+ if (!TEST_ptr(keys[i].key =
+ load_pkey_pem(test_get_argument(1), NULL)))
+ return 0;
+ continue;
+ }
+#endif
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ if (strcmp(keys[i].keytype, "RSA") == 0) {
+ if (!TEST_ptr(keys[i].key =
+ load_pkey_pem(test_get_argument(0), NULL)))
+ return 0;
+ continue;
+ }
+#endif
+ TEST_info("Generating %s key...", keys[i].keytype);
+ if (!TEST_ptr(keys[i].key =
+ make_key(keys[i].keytype, keys[i].template_params)))
+ return 0;
+ }
+
+ TEST_info("Generating keys done");
+
+ ADD_ALL_TESTS(test_key, OSSL_NELEM(test_stanzas));
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ size_t i;
+
+ for (i = 0; i < OSSL_NELEM(keys); i++)
+ EVP_PKEY_free(keys[i].key);
+}
diff --git a/test/enginetest.c b/test/enginetest.c
new file mode 100644
index 000000000000..8ba999b0176b
--- /dev/null
+++ b/test/enginetest.c
@@ -0,0 +1,465 @@
+/*
+ * Copyright 2000-2022 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
+ */
+
+/* We need to use some deprecated APIs */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <openssl/e_os2.h>
+
+# include "testutil.h"
+
+#ifndef OPENSSL_NO_ENGINE
+# include <openssl/buffer.h>
+# include <openssl/crypto.h>
+# include <openssl/engine.h>
+# include <openssl/rsa.h>
+# include <openssl/err.h>
+# include <openssl/x509.h>
+# include <openssl/pem.h>
+
+static void display_engine_list(void)
+{
+ ENGINE *h;
+ int loop;
+
+ loop = 0;
+ for (h = ENGINE_get_first(); h != NULL; h = ENGINE_get_next(h)) {
+ TEST_info("#%d: id = \"%s\", name = \"%s\"",
+ loop++, ENGINE_get_id(h), ENGINE_get_name(h));
+ }
+
+ /*
+ * ENGINE_get_first() increases the struct_ref counter, so we must call
+ * ENGINE_free() to decrease it again
+ */
+ ENGINE_free(h);
+}
+
+#define NUMTOADD 512
+
+static int test_engines(void)
+{
+ ENGINE *block[NUMTOADD];
+ char *eid[NUMTOADD];
+ char *ename[NUMTOADD];
+ char buf[256];
+ ENGINE *ptr;
+ int loop;
+ int to_return = 0;
+ ENGINE *new_h1 = NULL;
+ ENGINE *new_h2 = NULL;
+ ENGINE *new_h3 = NULL;
+ ENGINE *new_h4 = NULL;
+
+ memset(block, 0, sizeof(block));
+ if (!TEST_ptr(new_h1 = ENGINE_new())
+ || !TEST_true(ENGINE_set_id(new_h1, "test_id0"))
+ || !TEST_true(ENGINE_set_name(new_h1, "First test item"))
+ || !TEST_ptr(new_h2 = ENGINE_new())
+ || !TEST_true(ENGINE_set_id(new_h2, "test_id1"))
+ || !TEST_true(ENGINE_set_name(new_h2, "Second test item"))
+ || !TEST_ptr(new_h3 = ENGINE_new())
+ || !TEST_true(ENGINE_set_id(new_h3, "test_id2"))
+ || !TEST_true(ENGINE_set_name(new_h3, "Third test item"))
+ || !TEST_ptr(new_h4 = ENGINE_new())
+ || !TEST_true(ENGINE_set_id(new_h4, "test_id3"))
+ || !TEST_true(ENGINE_set_name(new_h4, "Fourth test item")))
+ goto end;
+ TEST_info("Engines:");
+ display_engine_list();
+
+ if (!TEST_true(ENGINE_add(new_h1)))
+ goto end;
+ TEST_info("Engines:");
+ display_engine_list();
+
+ ptr = ENGINE_get_first();
+ if (!TEST_true(ENGINE_remove(ptr)))
+ goto end;
+ ENGINE_free(ptr);
+ TEST_info("Engines:");
+ display_engine_list();
+
+ if (!TEST_true(ENGINE_add(new_h3))
+ || !TEST_true(ENGINE_add(new_h2)))
+ goto end;
+ TEST_info("Engines:");
+ display_engine_list();
+
+ if (!TEST_true(ENGINE_remove(new_h2)))
+ goto end;
+ TEST_info("Engines:");
+ display_engine_list();
+
+ if (!TEST_true(ENGINE_add(new_h4)))
+ goto end;
+ TEST_info("Engines:");
+ display_engine_list();
+
+ /* Should fail. */
+ if (!TEST_false(ENGINE_add(new_h3)))
+ goto end;
+ ERR_clear_error();
+
+ /* Should fail. */
+ if (!TEST_false(ENGINE_remove(new_h2)))
+ goto end;
+ ERR_clear_error();
+
+ if (!TEST_true(ENGINE_remove(new_h3)))
+ goto end;
+ TEST_info("Engines:");
+ display_engine_list();
+
+ if (!TEST_true(ENGINE_remove(new_h4)))
+ goto end;
+ TEST_info("Engines:");
+ display_engine_list();
+
+ /*
+ * At this point, we should have an empty list, unless some hardware
+ * support engine got added. However, since we don't allow the config
+ * file to be loaded and don't otherwise load any built in engines,
+ * that is unlikely. Still, we check, if for nothing else, then to
+ * notify that something is a little off (and might mean that |new_h1|
+ * wasn't unloaded when it should have)
+ */
+ if ((ptr = ENGINE_get_first()) != NULL) {
+ if (!ENGINE_remove(ptr))
+ TEST_info("Remove failed - probably no hardware support present");
+ }
+ ENGINE_free(ptr);
+ TEST_info("Engines:");
+ display_engine_list();
+
+ if (!TEST_true(ENGINE_add(new_h1))
+ || !TEST_true(ENGINE_remove(new_h1)))
+ goto end;
+
+ TEST_info("About to beef up the engine-type list");
+ for (loop = 0; loop < NUMTOADD; loop++) {
+ sprintf(buf, "id%d", loop);
+ eid[loop] = OPENSSL_strdup(buf);
+ sprintf(buf, "Fake engine type %d", loop);
+ ename[loop] = OPENSSL_strdup(buf);
+ if (!TEST_ptr(block[loop] = ENGINE_new())
+ || !TEST_true(ENGINE_set_id(block[loop], eid[loop]))
+ || !TEST_true(ENGINE_set_name(block[loop], ename[loop])))
+ goto end;
+ }
+ for (loop = 0; loop < NUMTOADD; loop++) {
+ if (!TEST_true(ENGINE_add(block[loop]))) {
+ test_note("Adding stopped at %d, (%s,%s)",
+ loop, ENGINE_get_id(block[loop]),
+ ENGINE_get_name(block[loop]));
+ goto cleanup_loop;
+ }
+ }
+ cleanup_loop:
+ TEST_info("About to empty the engine-type list");
+ while ((ptr = ENGINE_get_first()) != NULL) {
+ if (!TEST_true(ENGINE_remove(ptr)))
+ goto end;
+ ENGINE_free(ptr);
+ }
+ for (loop = 0; loop < NUMTOADD; loop++) {
+ OPENSSL_free(eid[loop]);
+ OPENSSL_free(ename[loop]);
+ }
+ to_return = 1;
+
+ end:
+ ENGINE_free(new_h1);
+ ENGINE_free(new_h2);
+ ENGINE_free(new_h3);
+ ENGINE_free(new_h4);
+ for (loop = 0; loop < NUMTOADD; loop++)
+ ENGINE_free(block[loop]);
+ return to_return;
+}
+
+/* Test EVP_PKEY method */
+static EVP_PKEY_METHOD *test_rsa = NULL;
+
+static int called_encrypt = 0;
+
+/* Test function to check operation has been redirected */
+static int test_encrypt(EVP_PKEY_CTX *ctx, unsigned char *sig,
+ size_t *siglen, const unsigned char *tbs, size_t tbslen)
+{
+ called_encrypt = 1;
+ return 1;
+}
+
+static int test_pkey_meths(ENGINE *e, EVP_PKEY_METHOD **pmeth,
+ const int **pnids, int nid)
+{
+ static const int rnid = EVP_PKEY_RSA;
+ if (pmeth == NULL) {
+ *pnids = &rnid;
+ return 1;
+ }
+
+ if (nid == EVP_PKEY_RSA) {
+ *pmeth = test_rsa;
+ return 1;
+ }
+
+ *pmeth = NULL;
+ return 0;
+}
+
+/* Return a test EVP_PKEY value */
+
+static EVP_PKEY *get_test_pkey(void)
+{
+ static unsigned char n[] =
+ "\x00\xAA\x36\xAB\xCE\x88\xAC\xFD\xFF\x55\x52\x3C\x7F\xC4\x52\x3F"
+ "\x90\xEF\xA0\x0D\xF3\x77\x4A\x25\x9F\x2E\x62\xB4\xC5\xD9\x9C\xB5"
+ "\xAD\xB3\x00\xA0\x28\x5E\x53\x01\x93\x0E\x0C\x70\xFB\x68\x76\x93"
+ "\x9C\xE6\x16\xCE\x62\x4A\x11\xE0\x08\x6D\x34\x1E\xBC\xAC\xA0\xA1"
+ "\xF5";
+ static unsigned char e[] = "\x11";
+
+ RSA *rsa = RSA_new();
+ EVP_PKEY *pk = EVP_PKEY_new();
+
+ if (rsa == NULL || pk == NULL || !EVP_PKEY_assign_RSA(pk, rsa)) {
+ RSA_free(rsa);
+ EVP_PKEY_free(pk);
+ return NULL;
+ }
+
+ if (!RSA_set0_key(rsa, BN_bin2bn(n, sizeof(n)-1, NULL),
+ BN_bin2bn(e, sizeof(e)-1, NULL), NULL)) {
+ EVP_PKEY_free(pk);
+ return NULL;
+ }
+
+ return pk;
+}
+
+static int test_redirect(void)
+{
+ const unsigned char pt[] = "Hello World\n";
+ unsigned char *tmp = NULL;
+ size_t len;
+ EVP_PKEY_CTX *ctx = NULL;
+ ENGINE *e = NULL;
+ EVP_PKEY *pkey = NULL;
+
+ int to_return = 0;
+
+ if (!TEST_ptr(pkey = get_test_pkey()))
+ goto err;
+
+ len = EVP_PKEY_get_size(pkey);
+ if (!TEST_ptr(tmp = OPENSSL_malloc(len)))
+ goto err;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new(pkey, NULL)))
+ goto err;
+ TEST_info("EVP_PKEY_encrypt test: no redirection");
+ /* Encrypt some data: should succeed but not be redirected */
+ if (!TEST_int_gt(EVP_PKEY_encrypt_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_encrypt(ctx, tmp, &len, pt, sizeof(pt)), 0)
+ || !TEST_false(called_encrypt))
+ goto err;
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+
+ /* Create a test ENGINE */
+ if (!TEST_ptr(e = ENGINE_new())
+ || !TEST_true(ENGINE_set_id(e, "Test redirect engine"))
+ || !TEST_true(ENGINE_set_name(e, "Test redirect engine")))
+ goto err;
+
+ /*
+ * Try to create a context for this engine and test key.
+ * Try setting test key engine. Both should fail because the
+ * engine has no public key methods.
+ */
+ if (!TEST_ptr_null(ctx = EVP_PKEY_CTX_new(pkey, e))
+ || !TEST_int_le(EVP_PKEY_set1_engine(pkey, e), 0))
+ goto err;
+
+ /* Setup an empty test EVP_PKEY_METHOD and set callback to return it */
+ if (!TEST_ptr(test_rsa = EVP_PKEY_meth_new(EVP_PKEY_RSA, 0)))
+ goto err;
+ ENGINE_set_pkey_meths(e, test_pkey_meths);
+
+ /* Getting a context for test ENGINE should now succeed */
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new(pkey, e)))
+ goto err;
+ /* Encrypt should fail because operation is not supported */
+ if (!TEST_int_le(EVP_PKEY_encrypt_init(ctx), 0))
+ goto err;
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+
+ /* Add test encrypt operation to method */
+ EVP_PKEY_meth_set_encrypt(test_rsa, 0, test_encrypt);
+
+ TEST_info("EVP_PKEY_encrypt test: redirection via EVP_PKEY_CTX_new()");
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new(pkey, e)))
+ goto err;
+ /* Encrypt some data: should succeed and be redirected */
+ if (!TEST_int_gt(EVP_PKEY_encrypt_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_encrypt(ctx, tmp, &len, pt, sizeof(pt)), 0)
+ || !TEST_true(called_encrypt))
+ goto err;
+
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+ called_encrypt = 0;
+
+ /* Create context with default engine: should not be redirected */
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new(pkey, NULL))
+ || !TEST_int_gt(EVP_PKEY_encrypt_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_encrypt(ctx, tmp, &len, pt, sizeof(pt)), 0)
+ || !TEST_false(called_encrypt))
+ goto err;
+
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+
+ /* Set engine explicitly for test key */
+ if (!TEST_true(EVP_PKEY_set1_engine(pkey, e)))
+ goto err;
+
+ TEST_info("EVP_PKEY_encrypt test: redirection via EVP_PKEY_set1_engine()");
+
+ /* Create context with default engine: should be redirected now */
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new(pkey, NULL))
+ || !TEST_int_gt(EVP_PKEY_encrypt_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_encrypt(ctx, tmp, &len, pt, sizeof(pt)), 0)
+ || !TEST_true(called_encrypt))
+ goto err;
+
+ to_return = 1;
+
+ err:
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ ENGINE_free(e);
+ OPENSSL_free(tmp);
+ return to_return;
+}
+
+static int test_x509_dup_w_engine(void)
+{
+ ENGINE *e = NULL;
+ X509 *cert = NULL, *dupcert = NULL;
+ X509_PUBKEY *pubkey, *duppubkey = NULL;
+ int ret = 0;
+ BIO *b = NULL;
+ RSA_METHOD *rsameth = NULL;
+
+ if (!TEST_ptr(b = BIO_new_file(test_get_argument(0), "r"))
+ || !TEST_ptr(cert = PEM_read_bio_X509(b, NULL, NULL, NULL)))
+ goto err;
+
+ /* Dup without an engine */
+ if (!TEST_ptr(dupcert = X509_dup(cert)))
+ goto err;
+ X509_free(dupcert);
+ dupcert = NULL;
+
+ if (!TEST_ptr(pubkey = X509_get_X509_PUBKEY(cert))
+ || !TEST_ptr(duppubkey = X509_PUBKEY_dup(pubkey))
+ || !TEST_ptr_ne(duppubkey, pubkey)
+ || !TEST_ptr_ne(X509_PUBKEY_get0(duppubkey), X509_PUBKEY_get0(pubkey)))
+ goto err;
+
+ X509_PUBKEY_free(duppubkey);
+ duppubkey = NULL;
+
+ X509_free(cert);
+ cert = NULL;
+
+ /* Create a test ENGINE */
+ if (!TEST_ptr(e = ENGINE_new())
+ || !TEST_true(ENGINE_set_id(e, "Test dummy engine"))
+ || !TEST_true(ENGINE_set_name(e, "Test dummy engine")))
+ goto err;
+
+ if (!TEST_ptr(rsameth = RSA_meth_dup(RSA_get_default_method())))
+ goto err;
+
+ ENGINE_set_RSA(e, rsameth);
+
+ if (!TEST_true(ENGINE_set_default_RSA(e)))
+ goto err;
+
+ if (!TEST_int_ge(BIO_seek(b, 0), 0)
+ || !TEST_ptr(cert = PEM_read_bio_X509(b, NULL, NULL, NULL)))
+ goto err;
+
+ /* Dup with an engine set on the key */
+ if (!TEST_ptr(dupcert = X509_dup(cert)))
+ goto err;
+
+ if (!TEST_ptr(pubkey = X509_get_X509_PUBKEY(cert))
+ || !TEST_ptr(duppubkey = X509_PUBKEY_dup(pubkey))
+ || !TEST_ptr_ne(duppubkey, pubkey)
+ || !TEST_ptr_ne(X509_PUBKEY_get0(duppubkey), X509_PUBKEY_get0(pubkey)))
+ goto err;
+
+ ret = 1;
+
+ err:
+ X509_free(cert);
+ X509_free(dupcert);
+ X509_PUBKEY_free(duppubkey);
+ if (e != NULL) {
+ ENGINE_unregister_RSA(e);
+ ENGINE_free(e);
+ }
+ RSA_meth_free(rsameth);
+ BIO_free(b);
+ return ret;
+}
+#endif
+
+int global_init(void)
+{
+ /*
+ * If the config file gets loaded, the dynamic engine will be loaded,
+ * and that interferes with our test above.
+ */
+ return OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL);
+}
+
+OPT_TEST_DECLARE_USAGE("certfile\n")
+
+int setup_tests(void)
+{
+#ifdef OPENSSL_NO_ENGINE
+ TEST_note("No ENGINE support");
+#else
+ int n;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ n = test_get_argument_count();
+ if (n == 0)
+ return 0;
+
+ ADD_TEST(test_engines);
+ ADD_TEST(test_redirect);
+ ADD_TEST(test_x509_dup_w_engine);
+#endif
+ return 1;
+}
diff --git a/test/errtest.c b/test/errtest.c
new file mode 100644
index 000000000000..2d827ff89364
--- /dev/null
+++ b/test/errtest.c
@@ -0,0 +1,348 @@
+/*
+ * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/opensslconf.h>
+#include <openssl/err.h>
+#include <openssl/macros.h>
+
+#include "testutil.h"
+
+#if defined(OPENSSL_SYS_WINDOWS)
+# include <windows.h>
+#else
+# include <errno.h>
+#endif
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+# define IS_HEX(ch) ((ch >= '0' && ch <='9') || (ch >= 'A' && ch <='F'))
+
+static int test_print_error_format(void)
+{
+ /* Variables used to construct an error line */
+ char *lib;
+ const char *func = OPENSSL_FUNC;
+ char *reason;
+# ifdef OPENSSL_NO_ERR
+ char reasonbuf[255];
+# endif
+# ifndef OPENSSL_NO_FILENAMES
+ const char *file = OPENSSL_FILE;
+ const int line = OPENSSL_LINE;
+# else
+ const char *file = "";
+ const int line = 0;
+# endif
+ /* The format for OpenSSL error lines */
+ const char *expected_format = ":error:%08lX:%s:%s:%s:%s:%d";
+ /*-
+ * ^^ ^^ ^^ ^^ ^^
+ * "library" name --------------------------++ || || || ||
+ * function name ------------------------------++ || || ||
+ * reason string (system error string) -----------++ || ||
+ * file name ----------------------------------------++ ||
+ * line number -----------------------------------------++
+ */
+ char expected[512];
+
+ char *out = NULL, *p = NULL;
+ int ret = 0, len;
+ BIO *bio = NULL;
+ const int syserr = EPERM;
+ unsigned long errorcode;
+ unsigned long reasoncode;
+
+ /*
+ * We set a mark here so we can clear the system error that we generate
+ * with ERR_PUT_error(). That is, after all, just a simulation to verify
+ * ERR_print_errors() output, not a real error.
+ */
+ ERR_set_mark();
+
+ ERR_PUT_error(ERR_LIB_SYS, 0, syserr, file, line);
+ errorcode = ERR_peek_error();
+ reasoncode = ERR_GET_REASON(errorcode);
+
+ if (!TEST_int_eq(reasoncode, syserr)) {
+ ERR_pop_to_mark();
+ goto err;
+ }
+
+# if !defined(OPENSSL_NO_ERR)
+# if defined(OPENSSL_NO_AUTOERRINIT)
+ lib = "lib(2)";
+# else
+ lib = "system library";
+# endif
+ reason = strerror(syserr);
+# else
+ lib = "lib(2)";
+ BIO_snprintf(reasonbuf, sizeof(reasonbuf), "reason(%lu)", reasoncode);
+ reason = reasonbuf;
+# endif
+
+ BIO_snprintf(expected, sizeof(expected), expected_format,
+ errorcode, lib, func, reason, file, line);
+
+ if (!TEST_ptr(bio = BIO_new(BIO_s_mem())))
+ goto err;
+
+ ERR_print_errors(bio);
+
+ if (!TEST_int_gt(len = BIO_get_mem_data(bio, &out), 0))
+ goto err;
+ /* Skip over the variable thread id at the start of the string */
+ for (p = out; *p != ':' && *p != 0; ++p) {
+ if (!TEST_true(IS_HEX(*p)))
+ goto err;
+ }
+ if (!TEST_true(*p != 0)
+ || !TEST_strn_eq(expected, p, strlen(expected)))
+ goto err;
+
+ ret = 1;
+err:
+ BIO_free(bio);
+ return ret;
+}
+#endif
+
+/* Test that querying the error queue preserves the OS error. */
+static int preserves_system_error(void)
+{
+#if defined(OPENSSL_SYS_WINDOWS)
+ SetLastError(ERROR_INVALID_FUNCTION);
+ ERR_get_error();
+ return TEST_int_eq(GetLastError(), ERROR_INVALID_FUNCTION);
+#else
+ errno = EINVAL;
+ ERR_get_error();
+ return TEST_int_eq(errno, EINVAL);
+#endif
+}
+
+/* Test that calls to ERR_add_error_[v]data append */
+static int vdata_appends(void)
+{
+ const char *data;
+
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_MALLOC_FAILURE);
+ ERR_add_error_data(1, "hello ");
+ ERR_add_error_data(1, "world");
+ ERR_peek_error_data(&data, NULL);
+ return TEST_str_eq(data, "hello world");
+}
+
+static int raised_error(void)
+{
+ const char *f, *data;
+ int l;
+ unsigned long e;
+
+ /*
+ * When OPENSSL_NO_ERR or OPENSSL_NO_FILENAMES, no file name or line
+ * number is saved, so no point checking them.
+ */
+#if !defined(OPENSSL_NO_FILENAMES) && !defined(OPENSSL_NO_ERR)
+ const char *file;
+ int line;
+
+ file = __FILE__;
+ line = __LINE__ + 2; /* The error is generated on the ERR_raise_data line */
+#endif
+ ERR_raise_data(ERR_LIB_NONE, ERR_R_INTERNAL_ERROR,
+ "calling exit()");
+ if (!TEST_ulong_ne(e = ERR_get_error_all(&f, &l, NULL, &data, NULL), 0)
+ || !TEST_int_eq(ERR_GET_REASON(e), ERR_R_INTERNAL_ERROR)
+#if !defined(OPENSSL_NO_FILENAMES) && !defined(OPENSSL_NO_ERR)
+ || !TEST_int_eq(l, line)
+ || !TEST_str_eq(f, file)
+#endif
+ || !TEST_str_eq(data, "calling exit()"))
+ return 0;
+ return 1;
+}
+
+static int test_marks(void)
+{
+ unsigned long mallocfail, shouldnot;
+
+ /* Set an initial error */
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_MALLOC_FAILURE);
+ mallocfail = ERR_peek_last_error();
+ if (!TEST_ulong_gt(mallocfail, 0))
+ return 0;
+
+ /* Setting and clearing a mark should not affect the error */
+ if (!TEST_true(ERR_set_mark())
+ || !TEST_true(ERR_pop_to_mark())
+ || !TEST_ulong_eq(mallocfail, ERR_peek_last_error())
+ || !TEST_true(ERR_set_mark())
+ || !TEST_true(ERR_clear_last_mark())
+ || !TEST_ulong_eq(mallocfail, ERR_peek_last_error()))
+ return 0;
+
+ /* Test popping errors */
+ if (!TEST_true(ERR_set_mark()))
+ return 0;
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR);
+ if (!TEST_ulong_ne(mallocfail, ERR_peek_last_error())
+ || !TEST_true(ERR_pop_to_mark())
+ || !TEST_ulong_eq(mallocfail, ERR_peek_last_error()))
+ return 0;
+
+ /* Nested marks should also work */
+ if (!TEST_true(ERR_set_mark())
+ || !TEST_true(ERR_set_mark()))
+ return 0;
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR);
+ if (!TEST_ulong_ne(mallocfail, ERR_peek_last_error())
+ || !TEST_true(ERR_pop_to_mark())
+ || !TEST_true(ERR_pop_to_mark())
+ || !TEST_ulong_eq(mallocfail, ERR_peek_last_error()))
+ return 0;
+
+ if (!TEST_true(ERR_set_mark()))
+ return 0;
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+ shouldnot = ERR_peek_last_error();
+ if (!TEST_ulong_ne(mallocfail, shouldnot)
+ || !TEST_true(ERR_set_mark()))
+ return 0;
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR);
+ if (!TEST_ulong_ne(shouldnot, ERR_peek_last_error())
+ || !TEST_true(ERR_pop_to_mark())
+ || !TEST_ulong_eq(shouldnot, ERR_peek_last_error())
+ || !TEST_true(ERR_pop_to_mark())
+ || !TEST_ulong_eq(mallocfail, ERR_peek_last_error()))
+ return 0;
+
+ /* Setting and clearing a mark should not affect the errors on the stack */
+ if (!TEST_true(ERR_set_mark()))
+ return 0;
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+ if (!TEST_true(ERR_clear_last_mark())
+ || !TEST_ulong_eq(shouldnot, ERR_peek_last_error()))
+ return 0;
+
+ /*
+ * Popping where no mark has been set should pop everything - but return
+ * a failure result
+ */
+ if (!TEST_false(ERR_pop_to_mark())
+ || !TEST_ulong_eq(0, ERR_peek_last_error()))
+ return 0;
+
+ /* Clearing where there is no mark should fail */
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_MALLOC_FAILURE);
+ if (!TEST_false(ERR_clear_last_mark())
+ /* "get" the last error to remove it */
+ || !TEST_ulong_eq(mallocfail, ERR_get_error())
+ || !TEST_ulong_eq(0, ERR_peek_last_error()))
+ return 0;
+
+ /*
+ * Setting a mark where there are no errors in the stack should fail.
+ * NOTE: This is somewhat surprising behaviour but is historically how this
+ * function behaves. In practice we typically set marks without first
+ * checking whether there is anything on the stack - but we also don't
+ * tend to check the success of this function. It turns out to work anyway
+ * because although setting a mark with no errors fails, a subsequent call
+ * to ERR_pop_to_mark() or ERR_clear_last_mark() will do the right thing
+ * anyway (even though they will report a failure result).
+ */
+ if (!TEST_false(ERR_set_mark()))
+ return 0;
+
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_MALLOC_FAILURE);
+ if (!TEST_true(ERR_set_mark()))
+ return 0;
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR);
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+
+ /* Should be able to "pop" past 2 errors */
+ if (!TEST_true(ERR_pop_to_mark())
+ || !TEST_ulong_eq(mallocfail, ERR_peek_last_error()))
+ return 0;
+
+ if (!TEST_true(ERR_set_mark()))
+ return 0;
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR);
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+
+ /* Should be able to "clear" past 2 errors */
+ if (!TEST_true(ERR_clear_last_mark())
+ || !TEST_ulong_eq(shouldnot, ERR_peek_last_error()))
+ return 0;
+
+ /* Clear remaining errors from last test */
+ ERR_clear_error();
+
+ return 1;
+}
+
+static int test_clear_error(void)
+{
+ int flags = -1;
+ const char *data = NULL;
+ int res = 0;
+
+ /* Raise an error with data and clear it */
+ ERR_raise_data(0, 0, "hello %s", "world");
+ ERR_peek_error_data(&data, &flags);
+ if (!TEST_str_eq(data, "hello world")
+ || !TEST_int_eq(flags, ERR_TXT_STRING | ERR_TXT_MALLOCED))
+ goto err;
+ ERR_clear_error();
+
+ /* Raise a new error without data */
+ ERR_raise(0, 0);
+ ERR_peek_error_data(&data, &flags);
+ if (!TEST_str_eq(data, "")
+ || !TEST_int_eq(flags, ERR_TXT_MALLOCED))
+ goto err;
+ ERR_clear_error();
+
+ /* Raise a new error with data */
+ ERR_raise_data(0, 0, "goodbye %s world", "cruel");
+ ERR_peek_error_data(&data, &flags);
+ if (!TEST_str_eq(data, "goodbye cruel world")
+ || !TEST_int_eq(flags, ERR_TXT_STRING | ERR_TXT_MALLOCED))
+ goto err;
+ ERR_clear_error();
+
+ /*
+ * Raise a new error without data to check that the malloced storage
+ * is freed properly
+ */
+ ERR_raise(0, 0);
+ ERR_peek_error_data(&data, &flags);
+ if (!TEST_str_eq(data, "")
+ || !TEST_int_eq(flags, ERR_TXT_MALLOCED))
+ goto err;
+ ERR_clear_error();
+
+ res = 1;
+ err:
+ ERR_clear_error();
+ return res;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(preserves_system_error);
+ ADD_TEST(vdata_appends);
+ ADD_TEST(raised_error);
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ADD_TEST(test_print_error_format);
+#endif
+ ADD_TEST(test_marks);
+ ADD_TEST(test_clear_error);
+ return 1;
+}
diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c
new file mode 100644
index 000000000000..6b484f8711ce
--- /dev/null
+++ b/test/evp_extra_test.c
@@ -0,0 +1,5480 @@
+/*
+ * Copyright 2015-2024 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
+ */
+
+/* We need to use some deprecated APIs */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <openssl/bio.h>
+#include <openssl/conf.h>
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/x509.h>
+#include <openssl/pem.h>
+#include <openssl/kdf.h>
+#include <openssl/provider.h>
+#include <openssl/core_names.h>
+#include <openssl/params.h>
+#include <openssl/param_build.h>
+#include <openssl/dsa.h>
+#include <openssl/dh.h>
+#include <openssl/aes.h>
+#include <openssl/decoder.h>
+#include <openssl/rsa.h>
+#include <openssl/engine.h>
+#include <openssl/proverr.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+#include "internal/sizes.h"
+#include "crypto/evp.h"
+
+#ifdef STATIC_LEGACY
+OSSL_provider_init_fn ossl_legacy_provider_init;
+#endif
+
+static OSSL_LIB_CTX *testctx = NULL;
+static char *testpropq = NULL;
+
+static OSSL_PROVIDER *nullprov = NULL;
+static OSSL_PROVIDER *deflprov = NULL;
+static OSSL_PROVIDER *lgcyprov = NULL;
+
+/*
+ * kExampleRSAKeyDER is an RSA private key in ASN.1, DER format. Of course, you
+ * should never use this key anywhere but in an example.
+ */
+static const unsigned char kExampleRSAKeyDER[] = {
+ 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xf8,
+ 0xb8, 0x6c, 0x83, 0xb4, 0xbc, 0xd9, 0xa8, 0x57, 0xc0, 0xa5, 0xb4, 0x59,
+ 0x76, 0x8c, 0x54, 0x1d, 0x79, 0xeb, 0x22, 0x52, 0x04, 0x7e, 0xd3, 0x37,
+ 0xeb, 0x41, 0xfd, 0x83, 0xf9, 0xf0, 0xa6, 0x85, 0x15, 0x34, 0x75, 0x71,
+ 0x5a, 0x84, 0xa8, 0x3c, 0xd2, 0xef, 0x5a, 0x4e, 0xd3, 0xde, 0x97, 0x8a,
+ 0xdd, 0xff, 0xbb, 0xcf, 0x0a, 0xaa, 0x86, 0x92, 0xbe, 0xb8, 0x50, 0xe4,
+ 0xcd, 0x6f, 0x80, 0x33, 0x30, 0x76, 0x13, 0x8f, 0xca, 0x7b, 0xdc, 0xec,
+ 0x5a, 0xca, 0x63, 0xc7, 0x03, 0x25, 0xef, 0xa8, 0x8a, 0x83, 0x58, 0x76,
+ 0x20, 0xfa, 0x16, 0x77, 0xd7, 0x79, 0x92, 0x63, 0x01, 0x48, 0x1a, 0xd8,
+ 0x7b, 0x67, 0xf1, 0x52, 0x55, 0x49, 0x4e, 0xd6, 0x6e, 0x4a, 0x5c, 0xd7,
+ 0x7a, 0x37, 0x36, 0x0c, 0xde, 0xdd, 0x8f, 0x44, 0xe8, 0xc2, 0xa7, 0x2c,
+ 0x2b, 0xb5, 0xaf, 0x64, 0x4b, 0x61, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0x02, 0x81, 0x80, 0x74, 0x88, 0x64, 0x3f, 0x69, 0x45, 0x3a, 0x6d, 0xc7,
+ 0x7f, 0xb9, 0xa3, 0xc0, 0x6e, 0xec, 0xdc, 0xd4, 0x5a, 0xb5, 0x32, 0x85,
+ 0x5f, 0x19, 0xd4, 0xf8, 0xd4, 0x3f, 0x3c, 0xfa, 0xc2, 0xf6, 0x5f, 0xee,
+ 0xe6, 0xba, 0x87, 0x74, 0x2e, 0xc7, 0x0c, 0xd4, 0x42, 0xb8, 0x66, 0x85,
+ 0x9c, 0x7b, 0x24, 0x61, 0xaa, 0x16, 0x11, 0xf6, 0xb5, 0xb6, 0xa4, 0x0a,
+ 0xc9, 0x55, 0x2e, 0x81, 0xa5, 0x47, 0x61, 0xcb, 0x25, 0x8f, 0xc2, 0x15,
+ 0x7b, 0x0e, 0x7c, 0x36, 0x9f, 0x3a, 0xda, 0x58, 0x86, 0x1c, 0x5b, 0x83,
+ 0x79, 0xe6, 0x2b, 0xcc, 0xe6, 0xfa, 0x2c, 0x61, 0xf2, 0x78, 0x80, 0x1b,
+ 0xe2, 0xf3, 0x9d, 0x39, 0x2b, 0x65, 0x57, 0x91, 0x3d, 0x71, 0x99, 0x73,
+ 0xa5, 0xc2, 0x79, 0x20, 0x8c, 0x07, 0x4f, 0xe5, 0xb4, 0x60, 0x1f, 0x99,
+ 0xa2, 0xb1, 0x4f, 0x0c, 0xef, 0xbc, 0x59, 0x53, 0x00, 0x7d, 0xb1, 0x02,
+ 0x41, 0x00, 0xfc, 0x7e, 0x23, 0x65, 0x70, 0xf8, 0xce, 0xd3, 0x40, 0x41,
+ 0x80, 0x6a, 0x1d, 0x01, 0xd6, 0x01, 0xff, 0xb6, 0x1b, 0x3d, 0x3d, 0x59,
+ 0x09, 0x33, 0x79, 0xc0, 0x4f, 0xde, 0x96, 0x27, 0x4b, 0x18, 0xc6, 0xd9,
+ 0x78, 0xf1, 0xf4, 0x35, 0x46, 0xe9, 0x7c, 0x42, 0x7a, 0x5d, 0x9f, 0xef,
+ 0x54, 0xb8, 0xf7, 0x9f, 0xc4, 0x33, 0x6c, 0xf3, 0x8c, 0x32, 0x46, 0x87,
+ 0x67, 0x30, 0x7b, 0xa7, 0xac, 0xe3, 0x02, 0x41, 0x00, 0xfc, 0x2c, 0xdf,
+ 0x0c, 0x0d, 0x88, 0xf5, 0xb1, 0x92, 0xa8, 0x93, 0x47, 0x63, 0x55, 0xf5,
+ 0xca, 0x58, 0x43, 0xba, 0x1c, 0xe5, 0x9e, 0xb6, 0x95, 0x05, 0xcd, 0xb5,
+ 0x82, 0xdf, 0xeb, 0x04, 0x53, 0x9d, 0xbd, 0xc2, 0x38, 0x16, 0xb3, 0x62,
+ 0xdd, 0xa1, 0x46, 0xdb, 0x6d, 0x97, 0x93, 0x9f, 0x8a, 0xc3, 0x9b, 0x64,
+ 0x7e, 0x42, 0xe3, 0x32, 0x57, 0x19, 0x1b, 0xd5, 0x6e, 0x85, 0xfa, 0xb8,
+ 0x8d, 0x02, 0x41, 0x00, 0xbc, 0x3d, 0xde, 0x6d, 0xd6, 0x97, 0xe8, 0xba,
+ 0x9e, 0x81, 0x37, 0x17, 0xe5, 0xa0, 0x64, 0xc9, 0x00, 0xb7, 0xe7, 0xfe,
+ 0xf4, 0x29, 0xd9, 0x2e, 0x43, 0x6b, 0x19, 0x20, 0xbd, 0x99, 0x75, 0xe7,
+ 0x76, 0xf8, 0xd3, 0xae, 0xaf, 0x7e, 0xb8, 0xeb, 0x81, 0xf4, 0x9d, 0xfe,
+ 0x07, 0x2b, 0x0b, 0x63, 0x0b, 0x5a, 0x55, 0x90, 0x71, 0x7d, 0xf1, 0xdb,
+ 0xd9, 0xb1, 0x41, 0x41, 0x68, 0x2f, 0x4e, 0x39, 0x02, 0x40, 0x5a, 0x34,
+ 0x66, 0xd8, 0xf5, 0xe2, 0x7f, 0x18, 0xb5, 0x00, 0x6e, 0x26, 0x84, 0x27,
+ 0x14, 0x93, 0xfb, 0xfc, 0xc6, 0x0f, 0x5e, 0x27, 0xe6, 0xe1, 0xe9, 0xc0,
+ 0x8a, 0xe4, 0x34, 0xda, 0xe9, 0xa2, 0x4b, 0x73, 0xbc, 0x8c, 0xb9, 0xba,
+ 0x13, 0x6c, 0x7a, 0x2b, 0x51, 0x84, 0xa3, 0x4a, 0xe0, 0x30, 0x10, 0x06,
+ 0x7e, 0xed, 0x17, 0x5a, 0x14, 0x00, 0xc9, 0xef, 0x85, 0xea, 0x52, 0x2c,
+ 0xbc, 0x65, 0x02, 0x40, 0x51, 0xe3, 0xf2, 0x83, 0x19, 0x9b, 0xc4, 0x1e,
+ 0x2f, 0x50, 0x3d, 0xdf, 0x5a, 0xa2, 0x18, 0xca, 0x5f, 0x2e, 0x49, 0xaf,
+ 0x6f, 0xcc, 0xfa, 0x65, 0x77, 0x94, 0xb5, 0xa1, 0x0a, 0xa9, 0xd1, 0x8a,
+ 0x39, 0x37, 0xf4, 0x0b, 0xa0, 0xd7, 0x82, 0x27, 0x5e, 0xae, 0x17, 0x17,
+ 0xa1, 0x1e, 0x54, 0x34, 0xbf, 0x6e, 0xc4, 0x8e, 0x99, 0x5d, 0x08, 0xf1,
+ 0x2d, 0x86, 0x9d, 0xa5, 0x20, 0x1b, 0xe5, 0xdf,
+};
+
+/*
+* kExampleDSAKeyDER is a DSA private key in ASN.1, DER format. Of course, you
+ * should never use this key anywhere but in an example.
+ */
+#ifndef OPENSSL_NO_DSA
+static const unsigned char kExampleDSAKeyDER[] = {
+ 0x30, 0x82, 0x01, 0xba, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0x9a,
+ 0x05, 0x6d, 0x33, 0xcd, 0x5d, 0x78, 0xa1, 0xbb, 0xcb, 0x7d, 0x5b, 0x8d,
+ 0xb4, 0xcc, 0xbf, 0x03, 0x99, 0x64, 0xde, 0x38, 0x78, 0x06, 0x15, 0x2f,
+ 0x86, 0x26, 0x77, 0xf3, 0xb1, 0x85, 0x00, 0xed, 0xfc, 0x28, 0x3a, 0x42,
+ 0x4d, 0xab, 0xab, 0xdf, 0xbc, 0x9c, 0x16, 0xd0, 0x22, 0x50, 0xd1, 0x38,
+ 0xdd, 0x3f, 0x64, 0x05, 0x9e, 0x68, 0x7a, 0x1e, 0xf1, 0x56, 0xbf, 0x1e,
+ 0x2c, 0xc5, 0x97, 0x2a, 0xfe, 0x7a, 0x22, 0xdc, 0x6c, 0x68, 0xb8, 0x2e,
+ 0x06, 0xdb, 0x41, 0xca, 0x98, 0xd8, 0x54, 0xc7, 0x64, 0x48, 0x24, 0x04,
+ 0x20, 0xbc, 0x59, 0xe3, 0x6b, 0xea, 0x7e, 0xfc, 0x7e, 0xc5, 0x4e, 0xd4,
+ 0xd8, 0x3a, 0xed, 0xcd, 0x5d, 0x99, 0xb8, 0x5c, 0xa2, 0x8b, 0xbb, 0x0b,
+ 0xac, 0xe6, 0x8e, 0x25, 0x56, 0x22, 0x3a, 0x2d, 0x3a, 0x56, 0x41, 0x14,
+ 0x1f, 0x1c, 0x8f, 0x53, 0x46, 0x13, 0x85, 0x02, 0x15, 0x00, 0x98, 0x7e,
+ 0x92, 0x81, 0x88, 0xc7, 0x3f, 0x70, 0x49, 0x54, 0xf6, 0x76, 0xb4, 0xa3,
+ 0x9e, 0x1d, 0x45, 0x98, 0x32, 0x7f, 0x02, 0x81, 0x80, 0x69, 0x4d, 0xef,
+ 0x55, 0xff, 0x4d, 0x59, 0x2c, 0x01, 0xfa, 0x6a, 0x38, 0xe0, 0x70, 0x9f,
+ 0x9e, 0x66, 0x8e, 0x3e, 0x8c, 0x52, 0x22, 0x9d, 0x15, 0x7e, 0x3c, 0xef,
+ 0x4c, 0x7a, 0x61, 0x26, 0xe0, 0x2b, 0x81, 0x3f, 0xeb, 0xaf, 0x35, 0x38,
+ 0x8d, 0xfe, 0xed, 0x46, 0xff, 0x5f, 0x03, 0x9b, 0x81, 0x92, 0xe7, 0x6f,
+ 0x76, 0x4f, 0x1d, 0xd9, 0xbb, 0x89, 0xc9, 0x3e, 0xd9, 0x0b, 0xf9, 0xf4,
+ 0x78, 0x11, 0x59, 0xc0, 0x1d, 0xcd, 0x0e, 0xa1, 0x6f, 0x15, 0xf1, 0x4d,
+ 0xc1, 0xc9, 0x22, 0xed, 0x8d, 0xad, 0x67, 0xc5, 0x4b, 0x95, 0x93, 0x86,
+ 0xa6, 0xaf, 0x8a, 0xee, 0x06, 0x89, 0x2f, 0x37, 0x7e, 0x64, 0xaa, 0xf6,
+ 0xe7, 0xb1, 0x5a, 0x0a, 0x93, 0x95, 0x5d, 0x3e, 0x53, 0x9a, 0xde, 0x8a,
+ 0xc2, 0x95, 0x45, 0x81, 0xbe, 0x5c, 0x2f, 0xc2, 0xb2, 0x92, 0x58, 0x19,
+ 0x72, 0x80, 0xe9, 0x79, 0xa1, 0x02, 0x81, 0x80, 0x07, 0xd7, 0x62, 0xff,
+ 0xdf, 0x1a, 0x3f, 0xed, 0x32, 0xd4, 0xd4, 0x88, 0x7b, 0x2c, 0x63, 0x7f,
+ 0x97, 0xdc, 0x44, 0xd4, 0x84, 0xa2, 0xdd, 0x17, 0x16, 0x85, 0x13, 0xe0,
+ 0xac, 0x51, 0x8d, 0x29, 0x1b, 0x75, 0x9a, 0xe4, 0xe3, 0x8a, 0x92, 0x69,
+ 0x09, 0x03, 0xc5, 0x68, 0xae, 0x5e, 0x94, 0xfe, 0xc9, 0x92, 0x6c, 0x07,
+ 0xb4, 0x1e, 0x64, 0x62, 0x87, 0xc6, 0xa4, 0xfd, 0x0d, 0x5f, 0xe5, 0xf9,
+ 0x1b, 0x4f, 0x85, 0x5f, 0xae, 0xf3, 0x11, 0xe5, 0x18, 0xd4, 0x4d, 0x79,
+ 0x9f, 0xc4, 0x79, 0x26, 0x04, 0x27, 0xf0, 0x0b, 0xee, 0x2b, 0x86, 0x9f,
+ 0x86, 0x61, 0xe6, 0x51, 0xce, 0x04, 0x9b, 0x5d, 0x6b, 0x34, 0x43, 0x8c,
+ 0x85, 0x3c, 0xf1, 0x51, 0x9b, 0x08, 0x23, 0x1b, 0xf5, 0x7e, 0x33, 0x12,
+ 0xea, 0xab, 0x1f, 0xb7, 0x2d, 0xe2, 0x5f, 0xe6, 0x97, 0x99, 0xb5, 0x45,
+ 0x16, 0x5b, 0xc3, 0x41, 0x02, 0x14, 0x61, 0xbf, 0x51, 0x60, 0xcf, 0xc8,
+ 0xf1, 0x8c, 0x82, 0x97, 0xf2, 0xf4, 0x19, 0xba, 0x2b, 0xf3, 0x16, 0xbe,
+ 0x40, 0x48
+};
+#endif
+
+/*
+ * kExampleBadRSAKeyDER is an RSA private key in ASN.1, DER format. The private
+ * components are not correct.
+ */
+static const unsigned char kExampleBadRSAKeyDER[] = {
+ 0x30, 0x82, 0x04, 0x27, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
+ 0xa6, 0x1a, 0x1e, 0x6e, 0x7b, 0xee, 0xc6, 0x89, 0x66, 0xe7, 0x93, 0xef,
+ 0x54, 0x12, 0x68, 0xea, 0xbf, 0x86, 0x2f, 0xdd, 0xd2, 0x79, 0xb8, 0xa9,
+ 0x6e, 0x03, 0xc2, 0xa3, 0xb9, 0xa3, 0xe1, 0x4b, 0x2a, 0xb3, 0xf8, 0xb4,
+ 0xcd, 0xea, 0xbe, 0x24, 0xa6, 0x57, 0x5b, 0x83, 0x1f, 0x0f, 0xf2, 0xd3,
+ 0xb7, 0xac, 0x7e, 0xd6, 0x8e, 0x6e, 0x1e, 0xbf, 0xb8, 0x73, 0x8c, 0x05,
+ 0x56, 0xe6, 0x35, 0x1f, 0xe9, 0x04, 0x0b, 0x09, 0x86, 0x7d, 0xf1, 0x26,
+ 0x08, 0x99, 0xad, 0x7b, 0xc8, 0x4d, 0x94, 0xb0, 0x0b, 0x8b, 0x38, 0xa0,
+ 0x5c, 0x62, 0xa0, 0xab, 0xd3, 0x8f, 0xd4, 0x09, 0x60, 0x72, 0x1e, 0x33,
+ 0x50, 0x80, 0x6e, 0x22, 0xa6, 0x77, 0x57, 0x6b, 0x9a, 0x33, 0x21, 0x66,
+ 0x87, 0x6e, 0x21, 0x7b, 0xc7, 0x24, 0x0e, 0xd8, 0x13, 0xdf, 0x83, 0xde,
+ 0xcd, 0x40, 0x58, 0x1d, 0x84, 0x86, 0xeb, 0xb8, 0x12, 0x4e, 0xd2, 0xfa,
+ 0x80, 0x1f, 0xe4, 0xe7, 0x96, 0x29, 0xb8, 0xcc, 0xce, 0x66, 0x6d, 0x53,
+ 0xca, 0xb9, 0x5a, 0xd7, 0xf6, 0x84, 0x6c, 0x2d, 0x9a, 0x1a, 0x14, 0x1c,
+ 0x4e, 0x93, 0x39, 0xba, 0x74, 0xed, 0xed, 0x87, 0x87, 0x5e, 0x48, 0x75,
+ 0x36, 0xf0, 0xbc, 0x34, 0xfb, 0x29, 0xf9, 0x9f, 0x96, 0x5b, 0x0b, 0xa7,
+ 0x54, 0x30, 0x51, 0x29, 0x18, 0x5b, 0x7d, 0xac, 0x0f, 0xd6, 0x5f, 0x7c,
+ 0xf8, 0x98, 0x8c, 0xd8, 0x86, 0x62, 0xb3, 0xdc, 0xff, 0x0f, 0xff, 0x7a,
+ 0xaf, 0x5c, 0x4c, 0x61, 0x49, 0x2e, 0xc8, 0x95, 0x86, 0xc4, 0x0e, 0x87,
+ 0xfc, 0x1d, 0xcf, 0x8b, 0x7c, 0x61, 0xf6, 0xd8, 0xd0, 0x69, 0xf6, 0xcd,
+ 0x8a, 0x8c, 0xf6, 0x62, 0xa2, 0x56, 0xa9, 0xe3, 0xd1, 0xcf, 0x4d, 0xa0,
+ 0xf6, 0x2d, 0x20, 0x0a, 0x04, 0xb7, 0xa2, 0xf7, 0xb5, 0x99, 0x47, 0x18,
+ 0x56, 0x85, 0x87, 0xc7, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
+ 0x01, 0x00, 0x99, 0x41, 0x38, 0x1a, 0xd0, 0x96, 0x7a, 0xf0, 0x83, 0xd5,
+ 0xdf, 0x94, 0xce, 0x89, 0x3d, 0xec, 0x7a, 0x52, 0x21, 0x10, 0x16, 0x06,
+ 0xe0, 0xee, 0xd2, 0xe6, 0xfd, 0x4b, 0x7b, 0x19, 0x4d, 0xe1, 0xc0, 0xc0,
+ 0xd5, 0x14, 0x5d, 0x79, 0xdd, 0x7e, 0x8b, 0x4b, 0xc6, 0xcf, 0xb0, 0x75,
+ 0x52, 0xa3, 0x2d, 0xb1, 0x26, 0x46, 0x68, 0x9c, 0x0a, 0x1a, 0xf2, 0xe1,
+ 0x09, 0xac, 0x53, 0x85, 0x8c, 0x36, 0xa9, 0x14, 0x65, 0xea, 0xa0, 0x00,
+ 0xcb, 0xe3, 0x3f, 0xc4, 0x2b, 0x61, 0x2e, 0x6b, 0x06, 0x69, 0x77, 0xfd,
+ 0x38, 0x7e, 0x1d, 0x3f, 0x92, 0xe7, 0x77, 0x08, 0x19, 0xa7, 0x9d, 0x29,
+ 0x2d, 0xdc, 0x42, 0xc6, 0x7c, 0xd7, 0xd3, 0xa8, 0x01, 0x2c, 0xf2, 0xd5,
+ 0x82, 0x57, 0xcb, 0x55, 0x3d, 0xe7, 0xaa, 0xd2, 0x06, 0x30, 0x30, 0x05,
+ 0xe6, 0xf2, 0x47, 0x86, 0xba, 0xc6, 0x61, 0x64, 0xeb, 0x4f, 0x2a, 0x5e,
+ 0x07, 0x29, 0xe0, 0x96, 0xb2, 0x43, 0xff, 0x5f, 0x1a, 0x54, 0x16, 0xcf,
+ 0xb5, 0x56, 0x5c, 0xa0, 0x9b, 0x0c, 0xfd, 0xb3, 0xd2, 0xe3, 0x79, 0x1d,
+ 0x21, 0xe2, 0xd6, 0x13, 0xc4, 0x74, 0xa6, 0xf5, 0x8e, 0x8e, 0x81, 0xbb,
+ 0xb4, 0xad, 0x8a, 0xf0, 0x93, 0x0a, 0xd8, 0x0a, 0x42, 0x36, 0xbc, 0xe5,
+ 0x26, 0x2a, 0x0d, 0x5d, 0x57, 0x13, 0xc5, 0x4e, 0x2f, 0x12, 0x0e, 0xef,
+ 0xa7, 0x81, 0x1e, 0xc3, 0xa5, 0xdb, 0xc9, 0x24, 0xeb, 0x1a, 0xa1, 0xf9,
+ 0xf6, 0xa1, 0x78, 0x98, 0x93, 0x77, 0x42, 0x45, 0x03, 0xe2, 0xc9, 0xa2,
+ 0xfe, 0x2d, 0x77, 0xc8, 0xc6, 0xac, 0x9b, 0x98, 0x89, 0x6d, 0x9a, 0xe7,
+ 0x61, 0x63, 0xb7, 0xf2, 0xec, 0xd6, 0xb1, 0xa1, 0x6e, 0x0a, 0x1a, 0xff,
+ 0xfd, 0x43, 0x28, 0xc3, 0x0c, 0xdc, 0xf2, 0x47, 0x4f, 0x27, 0xaa, 0x99,
+ 0x04, 0x8e, 0xac, 0xe8, 0x7c, 0x01, 0x02, 0x04, 0x12, 0x34, 0x56, 0x78,
+ 0x02, 0x81, 0x81, 0x00, 0xca, 0x69, 0xe5, 0xbb, 0x3a, 0x90, 0x82, 0xcb,
+ 0x82, 0x50, 0x2f, 0x29, 0xe2, 0x76, 0x6a, 0x57, 0x55, 0x45, 0x4e, 0x35,
+ 0x18, 0x61, 0xe0, 0x12, 0x70, 0xc0, 0xab, 0xc7, 0x80, 0xa2, 0xd4, 0x46,
+ 0x34, 0x03, 0xa0, 0x19, 0x26, 0x23, 0x9e, 0xef, 0x1a, 0xcb, 0x75, 0xd6,
+ 0xba, 0x81, 0xf4, 0x7e, 0x52, 0xe5, 0x2a, 0xe8, 0xf1, 0x49, 0x6c, 0x0f,
+ 0x1a, 0xa0, 0xf9, 0xc6, 0xe7, 0xec, 0x60, 0xe4, 0xcb, 0x2a, 0xb5, 0x56,
+ 0xe9, 0x9c, 0xcd, 0x19, 0x75, 0x92, 0xb1, 0x66, 0xce, 0xc3, 0xd9, 0x3d,
+ 0x11, 0xcb, 0xc4, 0x09, 0xce, 0x1e, 0x30, 0xba, 0x2f, 0x60, 0x60, 0x55,
+ 0x8d, 0x02, 0xdc, 0x5d, 0xaf, 0xf7, 0x52, 0x31, 0x17, 0x07, 0x53, 0x20,
+ 0x33, 0xad, 0x8c, 0xd5, 0x2f, 0x5a, 0xd0, 0x57, 0xd7, 0xd1, 0x80, 0xd6,
+ 0x3a, 0x9b, 0x04, 0x4f, 0x35, 0xbf, 0xe7, 0xd5, 0xbc, 0x8f, 0xd4, 0x81,
+ 0x02, 0x81, 0x81, 0x00, 0xc0, 0x9f, 0xf8, 0xcd, 0xf7, 0x3f, 0x26, 0x8a,
+ 0x3d, 0x4d, 0x2b, 0x0c, 0x01, 0xd0, 0xa2, 0xb4, 0x18, 0xfe, 0xf7, 0x5e,
+ 0x2f, 0x06, 0x13, 0xcd, 0x63, 0xaa, 0x12, 0xa9, 0x24, 0x86, 0xe3, 0xf3,
+ 0x7b, 0xda, 0x1a, 0x3c, 0xb1, 0x38, 0x80, 0x80, 0xef, 0x64, 0x64, 0xa1,
+ 0x9b, 0xfe, 0x76, 0x63, 0x8e, 0x83, 0xd2, 0xd9, 0xb9, 0x86, 0xb0, 0xe6,
+ 0xa6, 0x0c, 0x7e, 0xa8, 0x84, 0x90, 0x98, 0x0c, 0x1e, 0xf3, 0x14, 0x77,
+ 0xe0, 0x5f, 0x81, 0x08, 0x11, 0x8f, 0xa6, 0x23, 0xc4, 0xba, 0xc0, 0x8a,
+ 0xe4, 0xc6, 0xe3, 0x5c, 0xbe, 0xc5, 0xec, 0x2c, 0xb9, 0xd8, 0x8c, 0x4d,
+ 0x1a, 0x9d, 0xe7, 0x7c, 0x85, 0x4c, 0x0d, 0x71, 0x4e, 0x72, 0x33, 0x1b,
+ 0xfe, 0xa9, 0x17, 0x72, 0x76, 0x56, 0x9d, 0x74, 0x7e, 0x52, 0x67, 0x9a,
+ 0x87, 0x9a, 0xdb, 0x30, 0xde, 0xe4, 0x49, 0x28, 0x3b, 0xd2, 0x67, 0xaf,
+ 0x02, 0x81, 0x81, 0x00, 0x89, 0x74, 0x9a, 0x8e, 0xa7, 0xb9, 0xa5, 0x28,
+ 0xc0, 0x68, 0xe5, 0x6e, 0x63, 0x1c, 0x99, 0x20, 0x8f, 0x86, 0x8e, 0x12,
+ 0x9e, 0x69, 0x30, 0xfa, 0x34, 0xd9, 0x92, 0x8d, 0xdb, 0x7c, 0x37, 0xfd,
+ 0x28, 0xab, 0x61, 0x98, 0x52, 0x7f, 0x14, 0x1a, 0x39, 0xae, 0xfb, 0x6a,
+ 0x03, 0xa3, 0xe6, 0xbd, 0xb6, 0x5b, 0x6b, 0xe5, 0x5e, 0x9d, 0xc6, 0xa5,
+ 0x07, 0x27, 0x54, 0x17, 0xd0, 0x3d, 0x84, 0x9b, 0x3a, 0xa0, 0xd9, 0x1e,
+ 0x99, 0x6c, 0x63, 0x17, 0xab, 0xf1, 0x1f, 0x49, 0xba, 0x95, 0xe3, 0x3b,
+ 0x86, 0x8f, 0x42, 0xa4, 0x89, 0xf5, 0x94, 0x8f, 0x8b, 0x46, 0xbe, 0x84,
+ 0xba, 0x4a, 0xbc, 0x0d, 0x5f, 0x46, 0xeb, 0xe8, 0xec, 0x43, 0x8c, 0x1e,
+ 0xad, 0x19, 0x69, 0x2f, 0x08, 0x86, 0x7a, 0x3f, 0x7d, 0x0f, 0x07, 0x97,
+ 0xf3, 0x9a, 0x7b, 0xb5, 0xb2, 0xc1, 0x8c, 0x95, 0x68, 0x04, 0xa0, 0x81,
+ 0x02, 0x81, 0x80, 0x4e, 0xbf, 0x7e, 0x1b, 0xcb, 0x13, 0x61, 0x75, 0x3b,
+ 0xdb, 0x59, 0x5f, 0xb1, 0xd4, 0xb8, 0xeb, 0x9e, 0x73, 0xb5, 0xe7, 0xf6,
+ 0x89, 0x3d, 0x1c, 0xda, 0xf0, 0x36, 0xff, 0x35, 0xbd, 0x1e, 0x0b, 0x74,
+ 0xe3, 0x9e, 0xf0, 0xf2, 0xf7, 0xd7, 0x82, 0xb7, 0x7b, 0x6a, 0x1b, 0x0e,
+ 0x30, 0x4a, 0x98, 0x0e, 0xb4, 0xf9, 0x81, 0x07, 0xe4, 0x75, 0x39, 0xe9,
+ 0x53, 0xca, 0xbb, 0x5c, 0xaa, 0x93, 0x07, 0x0e, 0xa8, 0x2f, 0xba, 0x98,
+ 0x49, 0x30, 0xa7, 0xcc, 0x1a, 0x3c, 0x68, 0x0c, 0xe1, 0xa4, 0xb1, 0x05,
+ 0xe6, 0xe0, 0x25, 0x78, 0x58, 0x14, 0x37, 0xf5, 0x1f, 0xe3, 0x22, 0xef,
+ 0xa8, 0x0e, 0x22, 0xa0, 0x94, 0x3a, 0xf6, 0xc9, 0x13, 0xe6, 0x06, 0xbf,
+ 0x7f, 0x99, 0xc6, 0xcc, 0xd8, 0xc6, 0xbe, 0xd9, 0x2e, 0x24, 0xc7, 0x69,
+ 0x8c, 0x95, 0xba, 0xf6, 0x04, 0xb3, 0x0a, 0xf4, 0xcb, 0xf0, 0xce,
+};
+
+/*
+ * kExampleBad2RSAKeyDER is an RSA private key in ASN.1, DER format. All
+ * values are 0.
+ */
+static const unsigned char kExampleBad2RSAKeyDER[] = {
+ 0x30, 0x1b, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02,
+ 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02,
+ 0x01, 0x00, 0x02, 0x01, 0x00
+};
+
+static const unsigned char kMsg[] = { 1, 2, 3, 4 };
+
+static const unsigned char kSignature[] = {
+ 0xa5, 0xf0, 0x8a, 0x47, 0x5d, 0x3c, 0xb3, 0xcc, 0xa9, 0x79, 0xaf, 0x4d,
+ 0x8c, 0xae, 0x4c, 0x14, 0xef, 0xc2, 0x0b, 0x34, 0x36, 0xde, 0xf4, 0x3e,
+ 0x3d, 0xbb, 0x4a, 0x60, 0x5c, 0xc8, 0x91, 0x28, 0xda, 0xfb, 0x7e, 0x04,
+ 0x96, 0x7e, 0x63, 0x13, 0x90, 0xce, 0xb9, 0xb4, 0x62, 0x7a, 0xfd, 0x09,
+ 0x3d, 0xc7, 0x67, 0x78, 0x54, 0x04, 0xeb, 0x52, 0x62, 0x6e, 0x24, 0x67,
+ 0xb4, 0x40, 0xfc, 0x57, 0x62, 0xc6, 0xf1, 0x67, 0xc1, 0x97, 0x8f, 0x6a,
+ 0xa8, 0xae, 0x44, 0x46, 0x5e, 0xab, 0x67, 0x17, 0x53, 0x19, 0x3a, 0xda,
+ 0x5a, 0xc8, 0x16, 0x3e, 0x86, 0xd5, 0xc5, 0x71, 0x2f, 0xfc, 0x23, 0x48,
+ 0xd9, 0x0b, 0x13, 0xdd, 0x7b, 0x5a, 0x25, 0x79, 0xef, 0xa5, 0x7b, 0x04,
+ 0xed, 0x44, 0xf6, 0x18, 0x55, 0xe4, 0x0a, 0xe9, 0x57, 0x79, 0x5d, 0xd7,
+ 0x55, 0xa7, 0xab, 0x45, 0x02, 0x97, 0x60, 0x42,
+};
+
+/*
+ * kExampleRSAKeyPKCS8 is kExampleRSAKeyDER encoded in a PKCS #8
+ * PrivateKeyInfo.
+ */
+static const unsigned char kExampleRSAKeyPKCS8[] = {
+ 0x30, 0x82, 0x02, 0x76, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a,
+ 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82,
+ 0x02, 0x60, 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81,
+ 0x00, 0xf8, 0xb8, 0x6c, 0x83, 0xb4, 0xbc, 0xd9, 0xa8, 0x57, 0xc0, 0xa5,
+ 0xb4, 0x59, 0x76, 0x8c, 0x54, 0x1d, 0x79, 0xeb, 0x22, 0x52, 0x04, 0x7e,
+ 0xd3, 0x37, 0xeb, 0x41, 0xfd, 0x83, 0xf9, 0xf0, 0xa6, 0x85, 0x15, 0x34,
+ 0x75, 0x71, 0x5a, 0x84, 0xa8, 0x3c, 0xd2, 0xef, 0x5a, 0x4e, 0xd3, 0xde,
+ 0x97, 0x8a, 0xdd, 0xff, 0xbb, 0xcf, 0x0a, 0xaa, 0x86, 0x92, 0xbe, 0xb8,
+ 0x50, 0xe4, 0xcd, 0x6f, 0x80, 0x33, 0x30, 0x76, 0x13, 0x8f, 0xca, 0x7b,
+ 0xdc, 0xec, 0x5a, 0xca, 0x63, 0xc7, 0x03, 0x25, 0xef, 0xa8, 0x8a, 0x83,
+ 0x58, 0x76, 0x20, 0xfa, 0x16, 0x77, 0xd7, 0x79, 0x92, 0x63, 0x01, 0x48,
+ 0x1a, 0xd8, 0x7b, 0x67, 0xf1, 0x52, 0x55, 0x49, 0x4e, 0xd6, 0x6e, 0x4a,
+ 0x5c, 0xd7, 0x7a, 0x37, 0x36, 0x0c, 0xde, 0xdd, 0x8f, 0x44, 0xe8, 0xc2,
+ 0xa7, 0x2c, 0x2b, 0xb5, 0xaf, 0x64, 0x4b, 0x61, 0x07, 0x02, 0x03, 0x01,
+ 0x00, 0x01, 0x02, 0x81, 0x80, 0x74, 0x88, 0x64, 0x3f, 0x69, 0x45, 0x3a,
+ 0x6d, 0xc7, 0x7f, 0xb9, 0xa3, 0xc0, 0x6e, 0xec, 0xdc, 0xd4, 0x5a, 0xb5,
+ 0x32, 0x85, 0x5f, 0x19, 0xd4, 0xf8, 0xd4, 0x3f, 0x3c, 0xfa, 0xc2, 0xf6,
+ 0x5f, 0xee, 0xe6, 0xba, 0x87, 0x74, 0x2e, 0xc7, 0x0c, 0xd4, 0x42, 0xb8,
+ 0x66, 0x85, 0x9c, 0x7b, 0x24, 0x61, 0xaa, 0x16, 0x11, 0xf6, 0xb5, 0xb6,
+ 0xa4, 0x0a, 0xc9, 0x55, 0x2e, 0x81, 0xa5, 0x47, 0x61, 0xcb, 0x25, 0x8f,
+ 0xc2, 0x15, 0x7b, 0x0e, 0x7c, 0x36, 0x9f, 0x3a, 0xda, 0x58, 0x86, 0x1c,
+ 0x5b, 0x83, 0x79, 0xe6, 0x2b, 0xcc, 0xe6, 0xfa, 0x2c, 0x61, 0xf2, 0x78,
+ 0x80, 0x1b, 0xe2, 0xf3, 0x9d, 0x39, 0x2b, 0x65, 0x57, 0x91, 0x3d, 0x71,
+ 0x99, 0x73, 0xa5, 0xc2, 0x79, 0x20, 0x8c, 0x07, 0x4f, 0xe5, 0xb4, 0x60,
+ 0x1f, 0x99, 0xa2, 0xb1, 0x4f, 0x0c, 0xef, 0xbc, 0x59, 0x53, 0x00, 0x7d,
+ 0xb1, 0x02, 0x41, 0x00, 0xfc, 0x7e, 0x23, 0x65, 0x70, 0xf8, 0xce, 0xd3,
+ 0x40, 0x41, 0x80, 0x6a, 0x1d, 0x01, 0xd6, 0x01, 0xff, 0xb6, 0x1b, 0x3d,
+ 0x3d, 0x59, 0x09, 0x33, 0x79, 0xc0, 0x4f, 0xde, 0x96, 0x27, 0x4b, 0x18,
+ 0xc6, 0xd9, 0x78, 0xf1, 0xf4, 0x35, 0x46, 0xe9, 0x7c, 0x42, 0x7a, 0x5d,
+ 0x9f, 0xef, 0x54, 0xb8, 0xf7, 0x9f, 0xc4, 0x33, 0x6c, 0xf3, 0x8c, 0x32,
+ 0x46, 0x87, 0x67, 0x30, 0x7b, 0xa7, 0xac, 0xe3, 0x02, 0x41, 0x00, 0xfc,
+ 0x2c, 0xdf, 0x0c, 0x0d, 0x88, 0xf5, 0xb1, 0x92, 0xa8, 0x93, 0x47, 0x63,
+ 0x55, 0xf5, 0xca, 0x58, 0x43, 0xba, 0x1c, 0xe5, 0x9e, 0xb6, 0x95, 0x05,
+ 0xcd, 0xb5, 0x82, 0xdf, 0xeb, 0x04, 0x53, 0x9d, 0xbd, 0xc2, 0x38, 0x16,
+ 0xb3, 0x62, 0xdd, 0xa1, 0x46, 0xdb, 0x6d, 0x97, 0x93, 0x9f, 0x8a, 0xc3,
+ 0x9b, 0x64, 0x7e, 0x42, 0xe3, 0x32, 0x57, 0x19, 0x1b, 0xd5, 0x6e, 0x85,
+ 0xfa, 0xb8, 0x8d, 0x02, 0x41, 0x00, 0xbc, 0x3d, 0xde, 0x6d, 0xd6, 0x97,
+ 0xe8, 0xba, 0x9e, 0x81, 0x37, 0x17, 0xe5, 0xa0, 0x64, 0xc9, 0x00, 0xb7,
+ 0xe7, 0xfe, 0xf4, 0x29, 0xd9, 0x2e, 0x43, 0x6b, 0x19, 0x20, 0xbd, 0x99,
+ 0x75, 0xe7, 0x76, 0xf8, 0xd3, 0xae, 0xaf, 0x7e, 0xb8, 0xeb, 0x81, 0xf4,
+ 0x9d, 0xfe, 0x07, 0x2b, 0x0b, 0x63, 0x0b, 0x5a, 0x55, 0x90, 0x71, 0x7d,
+ 0xf1, 0xdb, 0xd9, 0xb1, 0x41, 0x41, 0x68, 0x2f, 0x4e, 0x39, 0x02, 0x40,
+ 0x5a, 0x34, 0x66, 0xd8, 0xf5, 0xe2, 0x7f, 0x18, 0xb5, 0x00, 0x6e, 0x26,
+ 0x84, 0x27, 0x14, 0x93, 0xfb, 0xfc, 0xc6, 0x0f, 0x5e, 0x27, 0xe6, 0xe1,
+ 0xe9, 0xc0, 0x8a, 0xe4, 0x34, 0xda, 0xe9, 0xa2, 0x4b, 0x73, 0xbc, 0x8c,
+ 0xb9, 0xba, 0x13, 0x6c, 0x7a, 0x2b, 0x51, 0x84, 0xa3, 0x4a, 0xe0, 0x30,
+ 0x10, 0x06, 0x7e, 0xed, 0x17, 0x5a, 0x14, 0x00, 0xc9, 0xef, 0x85, 0xea,
+ 0x52, 0x2c, 0xbc, 0x65, 0x02, 0x40, 0x51, 0xe3, 0xf2, 0x83, 0x19, 0x9b,
+ 0xc4, 0x1e, 0x2f, 0x50, 0x3d, 0xdf, 0x5a, 0xa2, 0x18, 0xca, 0x5f, 0x2e,
+ 0x49, 0xaf, 0x6f, 0xcc, 0xfa, 0x65, 0x77, 0x94, 0xb5, 0xa1, 0x0a, 0xa9,
+ 0xd1, 0x8a, 0x39, 0x37, 0xf4, 0x0b, 0xa0, 0xd7, 0x82, 0x27, 0x5e, 0xae,
+ 0x17, 0x17, 0xa1, 0x1e, 0x54, 0x34, 0xbf, 0x6e, 0xc4, 0x8e, 0x99, 0x5d,
+ 0x08, 0xf1, 0x2d, 0x86, 0x9d, 0xa5, 0x20, 0x1b, 0xe5, 0xdf,
+};
+
+#ifndef OPENSSL_NO_EC
+/*
+ * kExampleECKeyDER is a sample EC private key encoded as an ECPrivateKey
+ * structure.
+ */
+static const unsigned char kExampleECKeyDER[] = {
+ 0x30, 0x77, 0x02, 0x01, 0x01, 0x04, 0x20, 0x07, 0x0f, 0x08, 0x72, 0x7a,
+ 0xd4, 0xa0, 0x4a, 0x9c, 0xdd, 0x59, 0xc9, 0x4d, 0x89, 0x68, 0x77, 0x08,
+ 0xb5, 0x6f, 0xc9, 0x5d, 0x30, 0x77, 0x0e, 0xe8, 0xd1, 0xc9, 0xce, 0x0a,
+ 0x8b, 0xb4, 0x6a, 0xa0, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
+ 0x03, 0x01, 0x07, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0xe6, 0x2b, 0x69,
+ 0xe2, 0xbf, 0x65, 0x9f, 0x97, 0xbe, 0x2f, 0x1e, 0x0d, 0x94, 0x8a, 0x4c,
+ 0xd5, 0x97, 0x6b, 0xb7, 0xa9, 0x1e, 0x0d, 0x46, 0xfb, 0xdd, 0xa9, 0xa9,
+ 0x1e, 0x9d, 0xdc, 0xba, 0x5a, 0x01, 0xe7, 0xd6, 0x97, 0xa8, 0x0a, 0x18,
+ 0xf9, 0xc3, 0xc4, 0xa3, 0x1e, 0x56, 0xe2, 0x7c, 0x83, 0x48, 0xdb, 0x16,
+ 0x1a, 0x1c, 0xf5, 0x1d, 0x7e, 0xf1, 0x94, 0x2d, 0x4b, 0xcf, 0x72, 0x22,
+ 0xc1,
+};
+
+/*
+ * kExampleBadECKeyDER is a sample EC private key encoded as an ECPrivateKey
+ * structure. The private key is equal to the order and will fail to import
+ */
+static const unsigned char kExampleBadECKeyDER[] = {
+ 0x30, 0x66, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48,
+ 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03,
+ 0x01, 0x07, 0x04, 0x4C, 0x30, 0x4A, 0x02, 0x01, 0x01, 0x04, 0x20, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84, 0xF3,
+ 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51, 0xA1, 0x23, 0x03, 0x21, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84,
+ 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51
+};
+
+/* prime256v1 */
+static const unsigned char kExampleECPubKeyDER[] = {
+ 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
+ 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
+ 0x42, 0x00, 0x04, 0xba, 0xeb, 0x83, 0xfb, 0x3b, 0xb2, 0xff, 0x30, 0x53,
+ 0xdb, 0xce, 0x32, 0xf2, 0xac, 0xae, 0x44, 0x0d, 0x3d, 0x13, 0x53, 0xb8,
+ 0xd1, 0x68, 0x55, 0xde, 0x44, 0x46, 0x05, 0xa6, 0xc9, 0xd2, 0x04, 0xb7,
+ 0xe3, 0xa2, 0x96, 0xc8, 0xb2, 0x5e, 0x22, 0x03, 0xd7, 0x03, 0x7a, 0x8b,
+ 0x13, 0x5c, 0x42, 0x49, 0xc2, 0xab, 0x86, 0xd6, 0xac, 0x6b, 0x93, 0x20,
+ 0x56, 0x6a, 0xc6, 0xc8, 0xa5, 0x0b, 0xe5
+};
+
+/*
+ * kExampleBadECPubKeyDER is a sample EC public key with a wrong OID
+ * 1.2.840.10045.2.2 instead of 1.2.840.10045.2.1 - EC Public Key
+ */
+static const unsigned char kExampleBadECPubKeyDER[] = {
+ 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
+ 0x02, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
+ 0x42, 0x00, 0x04, 0xba, 0xeb, 0x83, 0xfb, 0x3b, 0xb2, 0xff, 0x30, 0x53,
+ 0xdb, 0xce, 0x32, 0xf2, 0xac, 0xae, 0x44, 0x0d, 0x3d, 0x13, 0x53, 0xb8,
+ 0xd1, 0x68, 0x55, 0xde, 0x44, 0x46, 0x05, 0xa6, 0xc9, 0xd2, 0x04, 0xb7,
+ 0xe3, 0xa2, 0x96, 0xc8, 0xb2, 0x5e, 0x22, 0x03, 0xd7, 0x03, 0x7a, 0x8b,
+ 0x13, 0x5c, 0x42, 0x49, 0xc2, 0xab, 0x86, 0xd6, 0xac, 0x6b, 0x93, 0x20,
+ 0x56, 0x6a, 0xc6, 0xc8, 0xa5, 0x0b, 0xe5
+};
+
+static const unsigned char pExampleECParamDER[] = {
+ 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07
+};
+
+static const unsigned char kExampleED25519KeyDER[] = {
+ 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70,
+ 0x04, 0x22, 0x04, 0x20, 0xba, 0x7b, 0xba, 0x20, 0x1b, 0x02, 0x75, 0x3a,
+ 0xe8, 0x88, 0xfe, 0x00, 0xcd, 0x8b, 0xc6, 0xf4, 0x5c, 0x47, 0x09, 0x46,
+ 0x66, 0xe4, 0x72, 0x85, 0x25, 0x26, 0x5e, 0x12, 0x33, 0x48, 0xf6, 0x50
+};
+
+static const unsigned char kExampleED25519PubKeyDER[] = {
+ 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00,
+ 0xf5, 0xc5, 0xeb, 0x52, 0x3e, 0x7d, 0x07, 0x86, 0xb2, 0x55, 0x07, 0x45,
+ 0xef, 0x5b, 0x7c, 0x20, 0xe8, 0x66, 0x28, 0x30, 0x3c, 0x8a, 0x82, 0x40,
+ 0x97, 0xa3, 0x08, 0xdc, 0x65, 0x80, 0x39, 0x29
+};
+
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+static const unsigned char kExampleX25519KeyDER[] = {
+ 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e,
+ 0x04, 0x22, 0x04, 0x20, 0xa0, 0x24, 0x3a, 0x31, 0x24, 0xc3, 0x3f, 0xf6,
+ 0x7b, 0x96, 0x0b, 0xd4, 0x8f, 0xd1, 0xee, 0x67, 0xf2, 0x9b, 0x88, 0xac,
+ 0x50, 0xce, 0x97, 0x36, 0xdd, 0xaf, 0x25, 0xf6, 0x10, 0x34, 0x96, 0x6e
+};
+# endif
+#endif
+
+/* kExampleDHKeyDER is a DH private key in ASN.1, DER format. */
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+# ifndef OPENSSL_NO_DH
+static const unsigned char kExampleDHKeyDER[] = {
+ 0x30, 0x82, 0x01, 0x21, 0x02, 0x01, 0x00, 0x30, 0x81, 0x95, 0x06, 0x09,
+ 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x03, 0x01, 0x30, 0x81, 0x87,
+ 0x02, 0x81, 0x81, 0x00, 0xf7, 0x52, 0xc2, 0x68, 0xcc, 0x66, 0xc4, 0x8d,
+ 0x03, 0x3f, 0xfa, 0x9c, 0x52, 0xd0, 0xd8, 0x33, 0xf2, 0xe1, 0xc9, 0x9e,
+ 0xb7, 0xe7, 0x6e, 0x90, 0x97, 0xeb, 0x92, 0x91, 0x6a, 0x9a, 0x85, 0x63,
+ 0x92, 0x79, 0xab, 0xb6, 0x3d, 0x23, 0x58, 0x5a, 0xe8, 0x45, 0x06, 0x81,
+ 0x97, 0x77, 0xe1, 0xcc, 0x34, 0x4e, 0xae, 0x36, 0x80, 0xf2, 0xc4, 0x7f,
+ 0x8a, 0x52, 0xb8, 0xdb, 0x58, 0xc8, 0x4b, 0x12, 0x4c, 0xf1, 0x4c, 0x53,
+ 0xc1, 0x89, 0x39, 0x8d, 0xb6, 0x06, 0xd8, 0xea, 0x7f, 0x2d, 0x36, 0x53,
+ 0x96, 0x29, 0xbe, 0xb6, 0x75, 0xfc, 0xe7, 0xf3, 0x36, 0xd6, 0xf4, 0x8f,
+ 0x16, 0xa6, 0xc7, 0xec, 0x7b, 0xce, 0x42, 0x8d, 0x48, 0x2e, 0xb7, 0x74,
+ 0x00, 0x11, 0x52, 0x61, 0xb4, 0x19, 0x35, 0xec, 0x5c, 0xe4, 0xbe, 0x34,
+ 0xc6, 0x59, 0x64, 0x5e, 0x42, 0x61, 0x70, 0x54, 0xf4, 0xe9, 0x6b, 0x53,
+ 0x02, 0x01, 0x02, 0x04, 0x81, 0x83, 0x02, 0x81, 0x80, 0x64, 0xc2, 0xe3,
+ 0x09, 0x69, 0x37, 0x3c, 0xd2, 0x4a, 0xba, 0xc3, 0x78, 0x6a, 0x9b, 0x8a,
+ 0x2a, 0xdb, 0xe7, 0xe6, 0xc0, 0xfa, 0x3a, 0xbe, 0x39, 0x67, 0xc0, 0xa9,
+ 0x2a, 0xf0, 0x0a, 0xc1, 0x53, 0x1c, 0xdb, 0xfa, 0x1a, 0x26, 0x98, 0xb0,
+ 0x8c, 0xc6, 0x06, 0x4a, 0xa2, 0x48, 0xd3, 0xa4, 0x3b, 0xbd, 0x05, 0x48,
+ 0xea, 0x59, 0xdb, 0x18, 0xa4, 0xca, 0x66, 0xd9, 0x5d, 0xb8, 0x95, 0xd1,
+ 0xeb, 0x97, 0x3d, 0x66, 0x97, 0x5c, 0x86, 0x8f, 0x7e, 0x90, 0xd3, 0x43,
+ 0xd1, 0xa2, 0x0d, 0xcb, 0xe7, 0xeb, 0x90, 0xea, 0x09, 0x40, 0xb1, 0x6f,
+ 0xf7, 0x4c, 0xf2, 0x41, 0x83, 0x1d, 0xd0, 0x76, 0xef, 0xaf, 0x55, 0x6f,
+ 0x5d, 0xa9, 0xa3, 0x55, 0x81, 0x2a, 0xd1, 0x5d, 0x9d, 0x22, 0x77, 0x97,
+ 0x83, 0xde, 0xad, 0xb6, 0x5d, 0x19, 0xc1, 0x53, 0xec, 0xfb, 0xaf, 0x06,
+ 0x2e, 0x87, 0x2a, 0x0b, 0x7a
+};
+# endif
+#endif
+
+static const unsigned char kCFBDefaultKey[] = {
+ 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88,
+ 0x09, 0xCF, 0x4F, 0x3C
+};
+
+static const unsigned char kGCMDefaultKey[32] = { 0 };
+
+static const unsigned char kGCMResetKey[] = {
+ 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, 0x6d, 0x6a, 0x8f, 0x94,
+ 0x67, 0x30, 0x83, 0x08, 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
+ 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
+};
+
+static const unsigned char iCFBIV[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
+ 0x0C, 0x0D, 0x0E, 0x0F
+};
+
+static const unsigned char iGCMDefaultIV[12] = { 0 };
+
+static const unsigned char iGCMResetIV1[] = {
+ 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad
+};
+
+static const unsigned char iGCMResetIV2[] = {
+ 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88
+};
+
+static const unsigned char cfbPlaintext[] = {
+ 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, 0xE9, 0x3D, 0x7E, 0x11,
+ 0x73, 0x93, 0x17, 0x2A
+};
+static const unsigned char cfbPlaintext_partial[] = {
+ 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, 0xE9, 0x3D, 0x7E, 0x11,
+ 0x73, 0x93, 0x17, 0x2A, 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
+};
+
+static const unsigned char gcmDefaultPlaintext[16] = { 0 };
+
+static const unsigned char gcmResetPlaintext[] = {
+ 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, 0x09, 0xc5,
+ 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
+ 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95,
+ 0x95, 0x68, 0x09, 0x53, 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
+ 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39
+};
+
+static const unsigned char cfbCiphertext[] = {
+ 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, 0x33, 0x34, 0x49, 0xF8,
+ 0xE8, 0x3C, 0xFB, 0x4A
+};
+
+static const unsigned char cfbCiphertext_partial[] = {
+ 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, 0x33, 0x34, 0x49, 0xF8,
+ 0xE8, 0x3C, 0xFB, 0x4A, 0x0D, 0x4A, 0x71, 0x82, 0x90, 0xF0, 0x9A, 0x35
+};
+
+static const unsigned char ofbCiphertext_partial[] = {
+ 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, 0x33, 0x34, 0x49, 0xF8,
+ 0xE8, 0x3C, 0xFB, 0x4A, 0xB2, 0x65, 0x64, 0x38, 0x26, 0xD2, 0xBC, 0x09
+};
+
+static const unsigned char gcmDefaultCiphertext[] = {
+ 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e, 0x07, 0x4e, 0xc5, 0xd3,
+ 0xba, 0xf3, 0x9d, 0x18
+};
+
+static const unsigned char gcmResetCiphertext1[] = {
+ 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32, 0xae, 0x47, 0xc1, 0x3b,
+ 0xf1, 0x98, 0x44, 0xcb, 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa,
+ 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0, 0xfe, 0xb5, 0x82, 0xd3,
+ 0x39, 0x34, 0xa4, 0xf0, 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78,
+ 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99, 0xf4, 0x7c, 0x9b, 0x1f
+};
+
+static const unsigned char gcmResetCiphertext2[] = {
+ 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, 0xf4, 0x7f, 0x37, 0xa3,
+ 0x2a, 0x84, 0x42, 0x7d, 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
+ 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, 0x8c, 0xb0, 0x8e, 0x48,
+ 0x59, 0x0d, 0xbb, 0x3d, 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
+ 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, 0xbc, 0xc9, 0xf6, 0x62
+};
+
+static const unsigned char gcmAAD[] = {
+ 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed, 0xfa, 0xce,
+ 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2
+};
+
+static const unsigned char gcmDefaultTag[] = {
+ 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0, 0x26, 0x5b, 0x98, 0xb5,
+ 0xd4, 0x8a, 0xb9, 0x19
+};
+
+static const unsigned char gcmResetTag1[] = {
+ 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4, 0x5e, 0x45, 0x49, 0x13,
+ 0xfe, 0x2e, 0xa8, 0xf2
+};
+
+static const unsigned char gcmResetTag2[] = {
+ 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68, 0xcd, 0xdf, 0x88, 0x53,
+ 0xbb, 0x2d, 0x55, 0x1b
+};
+
+typedef struct APK_DATA_st {
+ const unsigned char *kder;
+ size_t size;
+ const char *keytype;
+ int evptype;
+ int check;
+ int pub_check;
+ int param_check;
+ int type; /* 0 for private, 1 for public, 2 for params */
+} APK_DATA;
+
+static APK_DATA keydata[] = {
+ {kExampleRSAKeyDER, sizeof(kExampleRSAKeyDER), "RSA", EVP_PKEY_RSA},
+ {kExampleRSAKeyPKCS8, sizeof(kExampleRSAKeyPKCS8), "RSA", EVP_PKEY_RSA},
+#ifndef OPENSSL_NO_EC
+ {kExampleECKeyDER, sizeof(kExampleECKeyDER), "EC", EVP_PKEY_EC}
+#endif
+};
+
+static APK_DATA keycheckdata[] = {
+ {kExampleRSAKeyDER, sizeof(kExampleRSAKeyDER), "RSA", EVP_PKEY_RSA, 1, 1, 1,
+ 0},
+ {kExampleBadRSAKeyDER, sizeof(kExampleBadRSAKeyDER), "RSA", EVP_PKEY_RSA,
+ 0, 1, 1, 0},
+ {kExampleBad2RSAKeyDER, sizeof(kExampleBad2RSAKeyDER), "RSA", EVP_PKEY_RSA,
+ 0, 0, 1 /* Since there are no "params" in an RSA key this passes */, 0},
+#ifndef OPENSSL_NO_EC
+ {kExampleECKeyDER, sizeof(kExampleECKeyDER), "EC", EVP_PKEY_EC, 1, 1, 1, 0},
+ /* group is also associated in our pub key */
+ {kExampleECPubKeyDER, sizeof(kExampleECPubKeyDER), "EC", EVP_PKEY_EC, 0, 1,
+ 1, 1},
+ {pExampleECParamDER, sizeof(pExampleECParamDER), "EC", EVP_PKEY_EC, 0, 0, 1,
+ 2},
+ {kExampleED25519KeyDER, sizeof(kExampleED25519KeyDER), "ED25519",
+ EVP_PKEY_ED25519, 1, 1, 1, 0},
+ {kExampleED25519PubKeyDER, sizeof(kExampleED25519PubKeyDER), "ED25519",
+ EVP_PKEY_ED25519, 0, 1, 1, 1},
+#endif
+};
+
+static EVP_PKEY *load_example_key(const char *keytype,
+ const unsigned char *data, size_t data_len)
+{
+ const unsigned char **pdata = &data;
+ EVP_PKEY *pkey = NULL;
+ OSSL_DECODER_CTX *dctx =
+ OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, keytype, 0,
+ testctx, testpropq);
+
+ /* |pkey| will be NULL on error */
+ (void)OSSL_DECODER_from_data(dctx, pdata, &data_len);
+ OSSL_DECODER_CTX_free(dctx);
+ return pkey;
+}
+
+static EVP_PKEY *load_example_rsa_key(void)
+{
+ return load_example_key("RSA", kExampleRSAKeyDER,
+ sizeof(kExampleRSAKeyDER));
+}
+
+#ifndef OPENSSL_NO_DSA
+static EVP_PKEY *load_example_dsa_key(void)
+{
+ return load_example_key("DSA", kExampleDSAKeyDER,
+ sizeof(kExampleDSAKeyDER));
+}
+#endif
+
+#ifndef OPENSSL_NO_EC
+static EVP_PKEY *load_example_ec_key(void)
+{
+ return load_example_key("EC", kExampleECKeyDER,
+ sizeof(kExampleECKeyDER));
+}
+#endif
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+# ifndef OPENSSL_NO_DH
+static EVP_PKEY *load_example_dh_key(void)
+{
+ return load_example_key("DH", kExampleDHKeyDER,
+ sizeof(kExampleDHKeyDER));
+}
+# endif
+
+# ifndef OPENSSL_NO_EC
+static EVP_PKEY *load_example_ed25519_key(void)
+{
+ return load_example_key("ED25519", kExampleED25519KeyDER,
+ sizeof(kExampleED25519KeyDER));
+}
+
+static EVP_PKEY *load_example_x25519_key(void)
+{
+ return load_example_key("X25519", kExampleX25519KeyDER,
+ sizeof(kExampleX25519KeyDER));
+}
+# endif
+#endif /* OPENSSL_NO_DEPRECATED_3_0 */
+
+static EVP_PKEY *load_example_hmac_key(void)
+{
+ EVP_PKEY *pkey = NULL;
+ unsigned char key[] = {
+ 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
+ };
+
+ pkey = EVP_PKEY_new_raw_private_key_ex(testctx, "HMAC",
+ NULL, key, sizeof(key));
+ if (!TEST_ptr(pkey))
+ return NULL;
+
+ return pkey;
+}
+
+static int test_EVP_set_default_properties(void)
+{
+ OSSL_LIB_CTX *ctx;
+ EVP_MD *md = NULL;
+ int res = 0;
+
+ if (!TEST_ptr(ctx = OSSL_LIB_CTX_new())
+ || !TEST_ptr(md = EVP_MD_fetch(ctx, "sha256", NULL)))
+ goto err;
+ EVP_MD_free(md);
+ md = NULL;
+
+ if (!TEST_true(EVP_set_default_properties(ctx, "provider=fizzbang"))
+ || !TEST_ptr_null(md = EVP_MD_fetch(ctx, "sha256", NULL))
+ || !TEST_ptr(md = EVP_MD_fetch(ctx, "sha256", "-provider")))
+ goto err;
+ EVP_MD_free(md);
+ md = NULL;
+
+ if (!TEST_true(EVP_set_default_properties(ctx, NULL))
+ || !TEST_ptr(md = EVP_MD_fetch(ctx, "sha256", NULL)))
+ goto err;
+ res = 1;
+err:
+ EVP_MD_free(md);
+ OSSL_LIB_CTX_free(ctx);
+ return res;
+}
+
+#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_EC)
+static EVP_PKEY *make_key_fromdata(char *keytype, OSSL_PARAM *params)
+{
+ EVP_PKEY_CTX *pctx = NULL;
+ EVP_PKEY *tmp_pkey = NULL, *pkey = NULL;
+
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(testctx, keytype, testpropq)))
+ goto err;
+ if (!TEST_int_gt(EVP_PKEY_fromdata_init(pctx), 0)
+ || !TEST_int_gt(EVP_PKEY_fromdata(pctx, &tmp_pkey, EVP_PKEY_KEYPAIR,
+ params), 0))
+ goto err;
+
+ if (!TEST_ptr(tmp_pkey))
+ goto err;
+
+ pkey = tmp_pkey;
+ tmp_pkey = NULL;
+ err:
+ EVP_PKEY_free(tmp_pkey);
+ EVP_PKEY_CTX_free(pctx);
+ return pkey;
+}
+
+static int test_selection(EVP_PKEY *pkey, int selection)
+{
+ int testresult = 0;
+ int ret;
+ BIO *bio = BIO_new(BIO_s_mem());
+
+ ret = PEM_write_bio_PUBKEY(bio, pkey);
+ if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0) {
+ if (!TEST_true(ret))
+ goto err;
+ } else {
+ if (!TEST_false(ret))
+ goto err;
+ }
+ ret = PEM_write_bio_PrivateKey_ex(bio, pkey, NULL, NULL, 0, NULL, NULL,
+ testctx, NULL);
+ if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0) {
+ if (!TEST_true(ret))
+ goto err;
+ } else {
+ if (!TEST_false(ret))
+ goto err;
+ }
+
+ testresult = 1;
+ err:
+ BIO_free(bio);
+
+ return testresult;
+}
+#endif /* !OPENSSL_NO_DH || !OPENSSL_NO_DSA || !OPENSSL_NO_EC */
+
+/*
+ * Test combinations of private, public, missing and private + public key
+ * params to ensure they are all accepted
+ */
+#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_DSA)
+static int test_EVP_PKEY_ffc_priv_pub(char *keytype)
+{
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+ EVP_PKEY *just_params = NULL;
+ EVP_PKEY *params_and_priv = NULL;
+ EVP_PKEY *params_and_pub = NULL;
+ EVP_PKEY *params_and_keypair = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL, *pub = NULL, *priv = NULL;
+ int ret = 0;
+
+ /*
+ * Setup the parameters for our pkey object. For our purposes they don't
+ * have to actually be *valid* parameters. We just need to set something.
+ */
+ if (!TEST_ptr(p = BN_new())
+ || !TEST_ptr(q = BN_new())
+ || !TEST_ptr(g = BN_new())
+ || !TEST_ptr(pub = BN_new())
+ || !TEST_ptr(priv = BN_new()))
+ goto err;
+
+ /* Test !priv and !pub */
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_Q, q))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_G, g)))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(just_params = make_key_fromdata(keytype, params)))
+ goto err;
+
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ params = NULL;
+ bld = NULL;
+
+ if (!test_selection(just_params, OSSL_KEYMGMT_SELECT_ALL_PARAMETERS)
+ || test_selection(just_params, OSSL_KEYMGMT_SELECT_KEYPAIR))
+ goto err;
+
+ /* Test priv and !pub */
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_Q, q))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_G, g))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY,
+ priv)))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(params_and_priv = make_key_fromdata(keytype, params)))
+ goto err;
+
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ params = NULL;
+ bld = NULL;
+
+ if (!test_selection(params_and_priv, OSSL_KEYMGMT_SELECT_PRIVATE_KEY)
+ || test_selection(params_and_priv, OSSL_KEYMGMT_SELECT_PUBLIC_KEY))
+ goto err;
+
+ /* Test !priv and pub */
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_Q, q))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_G, g))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY,
+ pub)))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(params_and_pub = make_key_fromdata(keytype, params)))
+ goto err;
+
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ params = NULL;
+ bld = NULL;
+
+ if (!test_selection(params_and_pub, OSSL_KEYMGMT_SELECT_PUBLIC_KEY)
+ || test_selection(params_and_pub, OSSL_KEYMGMT_SELECT_PRIVATE_KEY))
+ goto err;
+
+ /* Test priv and pub */
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_Q, q))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_G, g))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY,
+ pub))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY,
+ priv)))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(params_and_keypair = make_key_fromdata(keytype, params)))
+ goto err;
+
+ if (!test_selection(params_and_keypair, EVP_PKEY_KEYPAIR))
+ goto err;
+
+ ret = 1;
+ err:
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ EVP_PKEY_free(just_params);
+ EVP_PKEY_free(params_and_priv);
+ EVP_PKEY_free(params_and_pub);
+ EVP_PKEY_free(params_and_keypair);
+ BN_free(p);
+ BN_free(q);
+ BN_free(g);
+ BN_free(pub);
+ BN_free(priv);
+
+ return ret;
+}
+#endif /* !OPENSSL_NO_DH || !OPENSSL_NO_DSA */
+
+/*
+ * Test combinations of private, public, missing and private + public key
+ * params to ensure they are all accepted for EC keys
+ */
+#ifndef OPENSSL_NO_EC
+static unsigned char ec_priv[] = {
+ 0xe9, 0x25, 0xf7, 0x66, 0x58, 0xa4, 0xdd, 0x99, 0x61, 0xe7, 0xe8, 0x23,
+ 0x85, 0xc2, 0xe8, 0x33, 0x27, 0xc5, 0x5c, 0xeb, 0xdb, 0x43, 0x9f, 0xd5,
+ 0xf2, 0x5a, 0x75, 0x55, 0xd0, 0x2e, 0x6d, 0x16
+};
+static unsigned char ec_pub[] = {
+ 0x04, 0xad, 0x11, 0x90, 0x77, 0x4b, 0x46, 0xee, 0x72, 0x51, 0x15, 0x97,
+ 0x4a, 0x6a, 0xa7, 0xaf, 0x59, 0xfa, 0x4b, 0xf2, 0x41, 0xc8, 0x3a, 0x81,
+ 0x23, 0xb6, 0x90, 0x04, 0x6c, 0x67, 0x66, 0xd0, 0xdc, 0xf2, 0x15, 0x1d,
+ 0x41, 0x61, 0xb7, 0x95, 0x85, 0x38, 0x5a, 0x84, 0x56, 0xe8, 0xb3, 0x0e,
+ 0xf5, 0xc6, 0x5d, 0xa4, 0x54, 0x26, 0xb0, 0xf7, 0xa5, 0x4a, 0x33, 0xf1,
+ 0x08, 0x09, 0xb8, 0xdb, 0x03
+};
+
+static int test_EC_priv_pub(void)
+{
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+ EVP_PKEY *just_params = NULL;
+ EVP_PKEY *params_and_priv = NULL;
+ EVP_PKEY *params_and_pub = NULL;
+ EVP_PKEY *params_and_keypair = NULL;
+ BIGNUM *priv = NULL;
+ int ret = 0;
+ unsigned char *encoded = NULL;
+ size_t len = 0;
+ unsigned char buffer[128];
+
+ /*
+ * Setup the parameters for our pkey object. For our purposes they don't
+ * have to actually be *valid* parameters. We just need to set something.
+ */
+ if (!TEST_ptr(priv = BN_bin2bn(ec_priv, sizeof(ec_priv), NULL)))
+ goto err;
+
+ /* Test !priv and !pub */
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ "P-256", 0)))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(just_params = make_key_fromdata("EC", params)))
+ goto err;
+
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ params = NULL;
+ bld = NULL;
+
+ if (!test_selection(just_params, OSSL_KEYMGMT_SELECT_ALL_PARAMETERS)
+ || test_selection(just_params, OSSL_KEYMGMT_SELECT_KEYPAIR))
+ goto err;
+
+ /* Test priv and !pub */
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ "P-256", 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY,
+ priv)))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(params_and_priv = make_key_fromdata("EC", params)))
+ goto err;
+
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ params = NULL;
+ bld = NULL;
+
+ /*
+ * We indicate only parameters here, in spite of having built a key that
+ * has a private part, because the PEM_write_bio_PrivateKey_ex call is
+ * expected to fail because it does not support exporting a private EC
+ * key without a corresponding public key
+ */
+ if (!test_selection(params_and_priv, OSSL_KEYMGMT_SELECT_ALL_PARAMETERS)
+ || test_selection(params_and_priv, OSSL_KEYMGMT_SELECT_PUBLIC_KEY))
+ goto err;
+
+ /* Test !priv and pub */
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ "P-256", 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_PUB_KEY,
+ ec_pub, sizeof(ec_pub))))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(params_and_pub = make_key_fromdata("EC", params)))
+ goto err;
+
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ params = NULL;
+ bld = NULL;
+
+ if (!test_selection(params_and_pub, OSSL_KEYMGMT_SELECT_PUBLIC_KEY)
+ || test_selection(params_and_pub, OSSL_KEYMGMT_SELECT_PRIVATE_KEY))
+ goto err;
+
+ /* Test priv and pub */
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ "P-256", 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_PUB_KEY,
+ ec_pub, sizeof(ec_pub)))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY,
+ priv)))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(params_and_keypair = make_key_fromdata("EC", params)))
+ goto err;
+
+ if (!test_selection(params_and_keypair, EVP_PKEY_KEYPAIR))
+ goto err;
+
+ /* Try key equality */
+ if (!TEST_int_gt(EVP_PKEY_parameters_eq(just_params, just_params), 0)
+ || !TEST_int_gt(EVP_PKEY_parameters_eq(just_params, params_and_pub),
+ 0)
+ || !TEST_int_gt(EVP_PKEY_parameters_eq(just_params, params_and_priv),
+ 0)
+ || !TEST_int_gt(EVP_PKEY_parameters_eq(just_params, params_and_keypair),
+ 0)
+ || !TEST_int_gt(EVP_PKEY_eq(params_and_pub, params_and_pub), 0)
+ || !TEST_int_gt(EVP_PKEY_eq(params_and_priv, params_and_priv), 0)
+ || !TEST_int_gt(EVP_PKEY_eq(params_and_keypair, params_and_pub), 0)
+ || !TEST_int_gt(EVP_PKEY_eq(params_and_keypair, params_and_priv), 0))
+ goto err;
+
+ /* Positive and negative testcase for EVP_PKEY_get1_encoded_public_key */
+ if (!TEST_int_gt(EVP_PKEY_get1_encoded_public_key(params_and_pub, &encoded), 0))
+ goto err;
+ OPENSSL_free(encoded);
+ encoded = NULL;
+ if (!TEST_int_eq(EVP_PKEY_get1_encoded_public_key(just_params, &encoded), 0)) {
+ OPENSSL_free(encoded);
+ encoded = NULL;
+ goto err;
+ }
+
+ /* Positive and negative testcase for EVP_PKEY_get_octet_string_param */
+ if (!TEST_int_eq(EVP_PKEY_get_octet_string_param(params_and_pub,
+ OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY,
+ buffer, sizeof(buffer), &len), 1)
+ || !TEST_int_eq(len, 65))
+ goto err;
+
+ len = 0;
+ if (!TEST_int_eq(EVP_PKEY_get_octet_string_param(params_and_pub,
+ OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY,
+ NULL, 0, &len), 1)
+ || !TEST_int_eq(len, 65))
+ goto err;
+
+ /* too-short buffer len*/
+ if (!TEST_int_eq(EVP_PKEY_get_octet_string_param(params_and_pub,
+ OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY,
+ buffer, 10, &len), 0))
+ goto err;
+
+ ret = 1;
+ err:
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ EVP_PKEY_free(just_params);
+ EVP_PKEY_free(params_and_priv);
+ EVP_PKEY_free(params_and_pub);
+ EVP_PKEY_free(params_and_keypair);
+ BN_free(priv);
+
+ return ret;
+}
+
+/* Test that using a legacy EC key with only a private key in it works */
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+static int test_EC_priv_only_legacy(void)
+{
+ BIGNUM *priv = NULL;
+ int ret = 0;
+ EC_KEY *eckey = NULL;
+ EVP_PKEY *pkey = NULL, *dup_pk = NULL;
+ EVP_MD_CTX *ctx = NULL;
+
+ /* Create the low level EC_KEY */
+ if (!TEST_ptr(priv = BN_bin2bn(ec_priv, sizeof(ec_priv), NULL)))
+ goto err;
+
+ eckey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
+ if (!TEST_ptr(eckey))
+ goto err;
+
+ if (!TEST_true(EC_KEY_set_private_key(eckey, priv)))
+ goto err;
+
+ pkey = EVP_PKEY_new();
+ if (!TEST_ptr(pkey))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_assign_EC_KEY(pkey, eckey)))
+ goto err;
+ eckey = NULL;
+
+ while (dup_pk == NULL) {
+ ret = 0;
+ ctx = EVP_MD_CTX_new();
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ /*
+ * The EVP_DigestSignInit function should create the key on the
+ * provider side which is sufficient for this test.
+ */
+ if (!TEST_true(EVP_DigestSignInit_ex(ctx, NULL, NULL, testctx,
+ testpropq, pkey, NULL)))
+ goto err;
+ EVP_MD_CTX_free(ctx);
+ ctx = NULL;
+
+ if (!TEST_ptr(dup_pk = EVP_PKEY_dup(pkey)))
+ goto err;
+ /* EVP_PKEY_eq() returns -2 with missing public keys */
+ ret = TEST_int_eq(EVP_PKEY_eq(pkey, dup_pk), -2);
+ EVP_PKEY_free(pkey);
+ pkey = dup_pk;
+ if (!ret)
+ goto err;
+ }
+
+ err:
+ EVP_MD_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ EC_KEY_free(eckey);
+ BN_free(priv);
+
+ return ret;
+}
+# endif /* OPENSSL_NO_DEPRECATED_3_0 */
+#endif /* OPENSSL_NO_EC */
+
+static int test_EVP_PKEY_sign(int tst)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ unsigned char *sig = NULL;
+ size_t sig_len = 0, shortsig_len = 1;
+ EVP_PKEY_CTX *ctx = NULL;
+ unsigned char tbs[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+ 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13
+ };
+
+ if (tst == 0 ) {
+ if (!TEST_ptr(pkey = load_example_rsa_key()))
+ goto out;
+ } else if (tst == 1) {
+#ifndef OPENSSL_NO_DSA
+ if (!TEST_ptr(pkey = load_example_dsa_key()))
+ goto out;
+#else
+ ret = 1;
+ goto out;
+#endif
+ } else {
+#ifndef OPENSSL_NO_EC
+ if (!TEST_ptr(pkey = load_example_ec_key()))
+ goto out;
+#else
+ ret = 1;
+ goto out;
+#endif
+ }
+
+ ctx = EVP_PKEY_CTX_new_from_pkey(testctx, pkey, NULL);
+ if (!TEST_ptr(ctx)
+ || !TEST_int_gt(EVP_PKEY_sign_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_sign(ctx, NULL, &sig_len, tbs,
+ sizeof(tbs)), 0))
+ goto out;
+ sig = OPENSSL_malloc(sig_len);
+ if (!TEST_ptr(sig)
+ /* Test sending a signature buffer that is too short is rejected */
+ || !TEST_int_le(EVP_PKEY_sign(ctx, sig, &shortsig_len, tbs,
+ sizeof(tbs)), 0)
+ || !TEST_int_gt(EVP_PKEY_sign(ctx, sig, &sig_len, tbs, sizeof(tbs)),
+ 0)
+ /* Test the signature round-trips */
+ || !TEST_int_gt(EVP_PKEY_verify_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_verify(ctx, sig, sig_len, tbs, sizeof(tbs)),
+ 0))
+ goto out;
+
+ ret = 1;
+ out:
+ EVP_PKEY_CTX_free(ctx);
+ OPENSSL_free(sig);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+static int test_EVP_PKEY_sign_with_app_method(int tst)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ RSA *rsa = NULL;
+ RSA_METHOD *rsa_meth = NULL;
+#ifndef OPENSSL_NO_DSA
+ DSA *dsa = NULL;
+ DSA_METHOD *dsa_meth = NULL;
+#endif
+ unsigned char *sig = NULL;
+ size_t sig_len = 0, shortsig_len = 1;
+ EVP_PKEY_CTX *ctx = NULL;
+ unsigned char tbs[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+ 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13
+ };
+
+ if (tst == 0) {
+ if (!TEST_ptr(pkey = load_example_rsa_key()))
+ goto out;
+ if (!TEST_ptr(rsa_meth = RSA_meth_dup(RSA_get_default_method())))
+ goto out;
+
+ if (!TEST_ptr(rsa = EVP_PKEY_get1_RSA(pkey))
+ || !TEST_int_gt(RSA_set_method(rsa, rsa_meth), 0)
+ || !TEST_int_gt(EVP_PKEY_assign_RSA(pkey, rsa), 0))
+ goto out;
+ rsa = NULL; /* now owned by the pkey */
+ } else {
+#ifndef OPENSSL_NO_DSA
+ if (!TEST_ptr(pkey = load_example_dsa_key()))
+ goto out;
+ if (!TEST_ptr(dsa_meth = DSA_meth_dup(DSA_get_default_method())))
+ goto out;
+
+ if (!TEST_ptr(dsa = EVP_PKEY_get1_DSA(pkey))
+ || !TEST_int_gt(DSA_set_method(dsa, dsa_meth), 0)
+ || !TEST_int_gt(EVP_PKEY_assign_DSA(pkey, dsa), 0))
+ goto out;
+ dsa = NULL; /* now owned by the pkey */
+#else
+ ret = 1;
+ goto out;
+#endif
+ }
+
+ ctx = EVP_PKEY_CTX_new_from_pkey(testctx, pkey, NULL);
+ if (!TEST_ptr(ctx)
+ || !TEST_int_gt(EVP_PKEY_sign_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_sign(ctx, NULL, &sig_len, tbs,
+ sizeof(tbs)), 0))
+ goto out;
+ sig = OPENSSL_malloc(sig_len);
+ if (!TEST_ptr(sig)
+ /* Test sending a signature buffer that is too short is rejected */
+ || !TEST_int_le(EVP_PKEY_sign(ctx, sig, &shortsig_len, tbs,
+ sizeof(tbs)), 0)
+ || !TEST_int_gt(EVP_PKEY_sign(ctx, sig, &sig_len, tbs, sizeof(tbs)),
+ 0)
+ /* Test the signature round-trips */
+ || !TEST_int_gt(EVP_PKEY_verify_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_verify(ctx, sig, sig_len, tbs, sizeof(tbs)),
+ 0))
+ goto out;
+
+ ret = 1;
+ out:
+ EVP_PKEY_CTX_free(ctx);
+ OPENSSL_free(sig);
+ EVP_PKEY_free(pkey);
+ RSA_free(rsa);
+ RSA_meth_free(rsa_meth);
+#ifndef OPENSSL_NO_DSA
+ DSA_free(dsa);
+ DSA_meth_free(dsa_meth);
+#endif
+ return ret;
+}
+#endif /* !OPENSSL_NO_DEPRECATED_3_0 */
+
+/*
+ * n = 0 => test using legacy cipher
+ * n = 1 => test using fetched cipher
+ */
+static int test_EVP_Enveloped(int n)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_PKEY *keypair = NULL;
+ unsigned char *kek = NULL;
+ unsigned char iv[EVP_MAX_IV_LENGTH];
+ static const unsigned char msg[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
+ int len, kek_len, ciphertext_len, plaintext_len;
+ unsigned char ciphertext[32], plaintext[16];
+ EVP_CIPHER *type = NULL;
+
+ if (nullprov != NULL)
+ return TEST_skip("Test does not support a non-default library context");
+
+ if (n == 0)
+ type = (EVP_CIPHER *)EVP_aes_256_cbc();
+ else if (!TEST_ptr(type = EVP_CIPHER_fetch(testctx, "AES-256-CBC",
+ testpropq)))
+ goto err;
+
+ if (!TEST_ptr(keypair = load_example_rsa_key())
+ || !TEST_ptr(kek = OPENSSL_zalloc(EVP_PKEY_get_size(keypair)))
+ || !TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_true(EVP_SealInit(ctx, type, &kek, &kek_len, iv,
+ &keypair, 1))
+ || !TEST_true(EVP_SealUpdate(ctx, ciphertext, &ciphertext_len,
+ msg, sizeof(msg)))
+ || !TEST_true(EVP_SealFinal(ctx, ciphertext + ciphertext_len,
+ &len)))
+ goto err;
+
+ ciphertext_len += len;
+
+ if (!TEST_true(EVP_OpenInit(ctx, type, kek, kek_len, iv, keypair))
+ || !TEST_true(EVP_OpenUpdate(ctx, plaintext, &plaintext_len,
+ ciphertext, ciphertext_len))
+ || !TEST_true(EVP_OpenFinal(ctx, plaintext + plaintext_len, &len)))
+ goto err;
+
+ plaintext_len += len;
+ if (!TEST_mem_eq(msg, sizeof(msg), plaintext, plaintext_len))
+ goto err;
+
+ ret = 1;
+err:
+ if (n != 0)
+ EVP_CIPHER_free(type);
+ OPENSSL_free(kek);
+ EVP_PKEY_free(keypair);
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+/*
+ * Test 0: Standard calls to EVP_DigestSignInit/Update/Final (Implicit fetch digest, RSA)
+ * Test 1: Standard calls to EVP_DigestSignInit/Update/Final (Implicit fetch digest, DSA)
+ * Test 2: Standard calls to EVP_DigestSignInit/Update/Final (Implicit fetch digest, HMAC)
+ * Test 3: Standard calls to EVP_DigestSignInit/Update/Final (Explicit fetch digest, RSA)
+ * Test 4: Standard calls to EVP_DigestSignInit/Update/Final (Explicit fetch digest, DSA)
+ * Test 5: Standard calls to EVP_DigestSignInit/Update/Final (Explicit fetch diegst, HMAC)
+ * Test 6: Use an MD BIO to do the Update calls instead (RSA)
+ * Test 7: Use an MD BIO to do the Update calls instead (DSA)
+ * Test 8: Use an MD BIO to do the Update calls instead (HMAC)
+ * Test 9: Use EVP_DigestSign (Implicit fetch digest, RSA, short sig)
+ * Test 10: Use EVP_DigestSign (Implicit fetch digest, DSA, short sig)
+ * Test 11: Use EVP_DigestSign (Implicit fetch digest, HMAC, short sig)
+ * Test 12: Use EVP_DigestSign (Implicit fetch digest, RSA)
+ * Test 13: Use EVP_DigestSign (Implicit fetch digest, DSA)
+ * Test 14: Use EVP_DigestSign (Implicit fetch digest, HMAC)
+ * Test 15-29: Same as above with reinitialization
+ */
+static int test_EVP_DigestSignInit(int tst)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ unsigned char *sig = NULL, *sig2 = NULL;
+ size_t sig_len = 0, sig2_len = 0, shortsig_len = 1;
+ EVP_MD_CTX *md_ctx = NULL, *md_ctx_verify = NULL;
+ EVP_MD_CTX *a_md_ctx = NULL, *a_md_ctx_verify = NULL;
+ BIO *mdbio = NULL, *membio = NULL;
+ size_t written;
+ const EVP_MD *md;
+ EVP_MD *mdexp = NULL;
+ int reinit = 0;
+
+ if (nullprov != NULL)
+ return TEST_skip("Test does not support a non-default library context");
+
+ if (tst >= 15) {
+ reinit = 1;
+ tst -= 15;
+ }
+
+ if (tst >= 6 && tst <= 8) {
+ membio = BIO_new(BIO_s_mem());
+ mdbio = BIO_new(BIO_f_md());
+ if (!TEST_ptr(membio) || !TEST_ptr(mdbio))
+ goto out;
+ BIO_push(mdbio, membio);
+ if (!TEST_int_gt(BIO_get_md_ctx(mdbio, &md_ctx), 0))
+ goto out;
+ } else {
+ if (!TEST_ptr(a_md_ctx = md_ctx = EVP_MD_CTX_new())
+ || !TEST_ptr(a_md_ctx_verify = md_ctx_verify = EVP_MD_CTX_new()))
+ goto out;
+ }
+
+ if (tst % 3 == 0) {
+ if (!TEST_ptr(pkey = load_example_rsa_key()))
+ goto out;
+ } else if (tst % 3 == 1) {
+#ifndef OPENSSL_NO_DSA
+ if (!TEST_ptr(pkey = load_example_dsa_key()))
+ goto out;
+#else
+ ret = 1;
+ goto out;
+#endif
+ } else {
+ if (!TEST_ptr(pkey = load_example_hmac_key()))
+ goto out;
+ }
+
+ if (tst >= 3 && tst <= 5)
+ md = mdexp = EVP_MD_fetch(NULL, "SHA256", NULL);
+ else
+ md = EVP_sha256();
+
+ if (!TEST_true(EVP_DigestSignInit(md_ctx, NULL, md, NULL, pkey)))
+ goto out;
+
+ if (reinit && !TEST_true(EVP_DigestSignInit(md_ctx, NULL, NULL, NULL, NULL)))
+ goto out;
+
+ if (tst >= 6 && tst <= 8) {
+ if (!BIO_write_ex(mdbio, kMsg, sizeof(kMsg), &written))
+ goto out;
+ } else if (tst < 6) {
+ if (!TEST_true(EVP_DigestSignUpdate(md_ctx, kMsg, sizeof(kMsg))))
+ goto out;
+ }
+
+ if (tst >= 9) {
+ /* Determine the size of the signature. */
+ if (!TEST_true(EVP_DigestSign(md_ctx, NULL, &sig_len, kMsg,
+ sizeof(kMsg)))
+ || !TEST_ptr(sig = OPENSSL_malloc(sig_len)))
+ goto out;
+ if (tst <= 11) {
+ /* Test that supply a short sig buffer fails */
+ if (!TEST_false(EVP_DigestSign(md_ctx, sig, &shortsig_len, kMsg,
+ sizeof(kMsg))))
+ goto out;
+ /*
+ * We end here because once EVP_DigestSign() has failed you should
+ * not call it again without re-initing the ctx
+ */
+ ret = 1;
+ goto out;
+ }
+ if (!TEST_true(EVP_DigestSign(md_ctx, sig, &sig_len, kMsg,
+ sizeof(kMsg))))
+ goto out;
+ } else {
+ /* Determine the size of the signature. */
+ if (!TEST_true(EVP_DigestSignFinal(md_ctx, NULL, &sig_len))
+ || !TEST_ptr(sig = OPENSSL_malloc(sig_len))
+ /*
+ * Trying to create a signature with a deliberately short
+ * buffer should fail.
+ */
+ || !TEST_false(EVP_DigestSignFinal(md_ctx, sig, &shortsig_len))
+ || !TEST_true(EVP_DigestSignFinal(md_ctx, sig, &sig_len)))
+ goto out;
+ }
+
+ /*
+ * Ensure that the signature round-trips (Verification isn't supported for
+ * HMAC via EVP_DigestVerify*)
+ */
+ if (tst % 3 != 2) {
+ if (tst >= 6 && tst <= 8) {
+ if (!TEST_int_gt(BIO_reset(mdbio), 0)
+ || !TEST_int_gt(BIO_get_md_ctx(mdbio, &md_ctx_verify), 0))
+ goto out;
+ }
+
+ if (!TEST_true(EVP_DigestVerifyInit(md_ctx_verify, NULL, md,
+ NULL, pkey)))
+ goto out;
+
+ if (tst >= 6 && tst <= 8) {
+ if (!TEST_true(BIO_write_ex(mdbio, kMsg, sizeof(kMsg), &written)))
+ goto out;
+ } else {
+ if (!TEST_true(EVP_DigestVerifyUpdate(md_ctx_verify, kMsg,
+ sizeof(kMsg))))
+ goto out;
+ }
+ if (!TEST_int_gt(EVP_DigestVerifyFinal(md_ctx_verify, sig, sig_len), 0))
+ goto out;
+
+ /* Multiple calls to EVP_DigestVerifyFinal should work */
+ if (!TEST_int_gt(EVP_DigestVerifyFinal(md_ctx_verify, sig, sig_len), 0))
+ goto out;
+ } else {
+ /*
+ * For HMAC a doubled call to DigestSignFinal should produce the same
+ * value as finalization should not happen.
+ */
+ if (!TEST_true(EVP_DigestSignFinal(md_ctx, NULL, &sig2_len))
+ || !TEST_ptr(sig2 = OPENSSL_malloc(sig2_len))
+ || !TEST_true(EVP_DigestSignFinal(md_ctx, sig2, &sig2_len)))
+ goto out;
+
+ if (!TEST_mem_eq(sig, sig_len, sig2, sig2_len))
+ goto out;
+ }
+
+ ret = 1;
+
+ out:
+ BIO_free(membio);
+ BIO_free(mdbio);
+ EVP_MD_CTX_free(a_md_ctx);
+ EVP_MD_CTX_free(a_md_ctx_verify);
+ EVP_PKEY_free(pkey);
+ OPENSSL_free(sig);
+ OPENSSL_free(sig2);
+ EVP_MD_free(mdexp);
+
+ return ret;
+}
+
+static int test_EVP_DigestVerifyInit(void)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ EVP_MD_CTX *md_ctx = NULL;
+
+ if (nullprov != NULL)
+ return TEST_skip("Test does not support a non-default library context");
+
+ if (!TEST_ptr(md_ctx = EVP_MD_CTX_new())
+ || !TEST_ptr(pkey = load_example_rsa_key()))
+ goto out;
+
+ if (!TEST_true(EVP_DigestVerifyInit(md_ctx, NULL, EVP_sha256(), NULL, pkey))
+ || !TEST_true(EVP_DigestVerifyUpdate(md_ctx, kMsg, sizeof(kMsg)))
+ || !TEST_int_gt(EVP_DigestVerifyFinal(md_ctx, kSignature,
+ sizeof(kSignature)), 0))
+ goto out;
+
+ /* test with reinitialization */
+ if (!TEST_true(EVP_DigestVerifyInit(md_ctx, NULL, NULL, NULL, NULL))
+ || !TEST_true(EVP_DigestVerifyUpdate(md_ctx, kMsg, sizeof(kMsg)))
+ || !TEST_int_gt(EVP_DigestVerifyFinal(md_ctx, kSignature,
+ sizeof(kSignature)), 0))
+ goto out;
+ ret = 1;
+
+ out:
+ EVP_MD_CTX_free(md_ctx);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_SIPHASH
+/* test SIPHASH MAC via EVP_PKEY with non-default parameters and reinit */
+static int test_siphash_digestsign(void)
+{
+ unsigned char key[16];
+ unsigned char buf[8], digest[8];
+ unsigned char expected[8] = {
+ 0x6d, 0x3e, 0x54, 0xc2, 0x2f, 0xf1, 0xfe, 0xe2
+ };
+ EVP_PKEY *pkey = NULL;
+ EVP_MD_CTX *mdctx = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ int ret = 0;
+ size_t len = 8;
+
+ if (nullprov != NULL)
+ return TEST_skip("Test does not support a non-default library context");
+
+ memset(buf, 0, 8);
+ memset(key, 1, 16);
+ if (!TEST_ptr(pkey = EVP_PKEY_new_raw_private_key(EVP_PKEY_SIPHASH, NULL,
+ key, 16)))
+ goto out;
+
+ if (!TEST_ptr(mdctx = EVP_MD_CTX_create()))
+ goto out;
+
+ if (!TEST_true(EVP_DigestSignInit(mdctx, &ctx, NULL, NULL, pkey)))
+ goto out;
+ if (!TEST_int_eq(EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_SIGNCTX,
+ EVP_PKEY_CTRL_SET_DIGEST_SIZE,
+ 8, NULL), 1))
+ goto out;
+ /* reinitialize */
+ if (!TEST_true(EVP_DigestSignInit(mdctx, NULL, NULL, NULL, NULL)))
+ goto out;
+ if (!TEST_true(EVP_DigestSignUpdate(mdctx, buf, 8)))
+ goto out;
+ if (!TEST_true(EVP_DigestSignFinal(mdctx, digest, &len)))
+ goto out;
+ if (!TEST_mem_eq(digest, len, expected, sizeof(expected)))
+ goto out;
+
+ ret = 1;
+ out:
+ EVP_PKEY_free(pkey);
+ EVP_MD_CTX_free(mdctx);
+ return ret;
+}
+#endif
+
+/*
+ * Test corner cases of EVP_DigestInit/Update/Final API call behavior.
+ */
+static int test_EVP_Digest(void)
+{
+ int ret = 0;
+ EVP_MD_CTX *md_ctx = NULL;
+ unsigned char md[EVP_MAX_MD_SIZE];
+ EVP_MD *sha256 = NULL;
+ EVP_MD *shake256 = NULL;
+
+ if (!TEST_ptr(md_ctx = EVP_MD_CTX_new()))
+ goto out;
+
+ if (!TEST_ptr(sha256 = EVP_MD_fetch(testctx, "sha256", testpropq))
+ || !TEST_ptr(shake256 = EVP_MD_fetch(testctx, "shake256", testpropq)))
+ goto out;
+
+ if (!TEST_true(EVP_DigestInit_ex(md_ctx, sha256, NULL))
+ || !TEST_true(EVP_DigestUpdate(md_ctx, kMsg, sizeof(kMsg)))
+ || !TEST_true(EVP_DigestFinal(md_ctx, md, NULL))
+ /* EVP_DigestFinal resets the EVP_MD_CTX. */
+ || !TEST_ptr_eq(EVP_MD_CTX_get0_md(md_ctx), NULL))
+ goto out;
+
+ if (!TEST_true(EVP_DigestInit_ex(md_ctx, sha256, NULL))
+ || !TEST_true(EVP_DigestUpdate(md_ctx, kMsg, sizeof(kMsg)))
+ || !TEST_true(EVP_DigestFinal_ex(md_ctx, md, NULL))
+ /* EVP_DigestFinal_ex does not reset the EVP_MD_CTX. */
+ || !TEST_ptr(EVP_MD_CTX_get0_md(md_ctx))
+ /*
+ * EVP_DigestInit_ex with NULL type should work on
+ * pre-initialized context.
+ */
+ || !TEST_true(EVP_DigestInit_ex(md_ctx, NULL, NULL)))
+ goto out;
+
+ if (!TEST_true(EVP_DigestInit_ex(md_ctx, shake256, NULL))
+ || !TEST_true(EVP_DigestUpdate(md_ctx, kMsg, sizeof(kMsg)))
+ || !TEST_true(EVP_DigestFinalXOF(md_ctx, md, sizeof(md)))
+ /* EVP_DigestFinalXOF does not reset the EVP_MD_CTX. */
+ || !TEST_ptr(EVP_MD_CTX_get0_md(md_ctx))
+ || !TEST_true(EVP_DigestInit_ex(md_ctx, NULL, NULL)))
+ goto out;
+ ret = 1;
+
+ out:
+ EVP_MD_CTX_free(md_ctx);
+ EVP_MD_free(sha256);
+ EVP_MD_free(shake256);
+ return ret;
+}
+
+static int test_EVP_md_null(void)
+{
+ int ret = 0;
+ EVP_MD_CTX *md_ctx = NULL;
+ const EVP_MD *md_null = EVP_md_null();
+ unsigned char md_value[EVP_MAX_MD_SIZE];
+ unsigned int md_len = sizeof(md_value);
+
+ if (nullprov != NULL)
+ return TEST_skip("Test does not support a non-default library context");
+
+ if (!TEST_ptr(md_null)
+ || !TEST_ptr(md_ctx = EVP_MD_CTX_new()))
+ goto out;
+
+ if (!TEST_true(EVP_DigestInit_ex(md_ctx, md_null, NULL))
+ || !TEST_true(EVP_DigestUpdate(md_ctx, "test", 4))
+ || !TEST_true(EVP_DigestFinal_ex(md_ctx, md_value, &md_len)))
+ goto out;
+
+ if (!TEST_uint_eq(md_len, 0))
+ goto out;
+
+ ret = 1;
+ out:
+ EVP_MD_CTX_free(md_ctx);
+ return ret;
+}
+
+static int test_d2i_AutoPrivateKey(int i)
+{
+ int ret = 0;
+ const unsigned char *p;
+ EVP_PKEY *pkey = NULL;
+ const APK_DATA *ak = &keydata[i];
+ const unsigned char *input = ak->kder;
+ size_t input_len = ak->size;
+ int expected_id = ak->evptype;
+
+ p = input;
+ if (!TEST_ptr(pkey = d2i_AutoPrivateKey(NULL, &p, input_len))
+ || !TEST_ptr_eq(p, input + input_len)
+ || !TEST_int_eq(EVP_PKEY_get_id(pkey), expected_id))
+ goto done;
+
+ ret = 1;
+
+ done:
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_EC
+
+static const unsigned char ec_public_sect163k1_validxy[] = {
+ 0x30, 0x40, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
+ 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x01, 0x03, 0x2c, 0x00, 0x04,
+ 0x02, 0x84, 0x58, 0xa6, 0xd4, 0xa0, 0x35, 0x2b, 0xae, 0xf0, 0xc0, 0x69,
+ 0x05, 0xcf, 0x2a, 0x50, 0x33, 0xf9, 0xe3, 0x92, 0x79, 0x02, 0xd1, 0x7b,
+ 0x9f, 0x22, 0x00, 0xf0, 0x3b, 0x0e, 0x5d, 0x2e, 0xb7, 0x23, 0x24, 0xf3,
+ 0x6a, 0xd8, 0x17, 0x65, 0x41, 0x2f
+};
+
+static const unsigned char ec_public_sect163k1_badx[] = {
+ 0x30, 0x40, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
+ 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x01, 0x03, 0x2c, 0x00, 0x04,
+ 0x0a, 0x84, 0x58, 0xa6, 0xd4, 0xa0, 0x35, 0x2b, 0xae, 0xf0, 0xc0, 0x69,
+ 0x05, 0xcf, 0x2a, 0x50, 0x33, 0xf9, 0xe3, 0x92, 0xb0, 0x02, 0xd1, 0x7b,
+ 0x9f, 0x22, 0x00, 0xf0, 0x3b, 0x0e, 0x5d, 0x2e, 0xb7, 0x23, 0x24, 0xf3,
+ 0x6a, 0xd8, 0x17, 0x65, 0x41, 0x2f
+};
+
+static const unsigned char ec_public_sect163k1_bady[] = {
+ 0x30, 0x40, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
+ 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x01, 0x03, 0x2c, 0x00, 0x04,
+ 0x02, 0x84, 0x58, 0xa6, 0xd4, 0xa0, 0x35, 0x2b, 0xae, 0xf0, 0xc0, 0x69,
+ 0x05, 0xcf, 0x2a, 0x50, 0x33, 0xf9, 0xe3, 0x92, 0x79, 0x0a, 0xd1, 0x7b,
+ 0x9f, 0x22, 0x00, 0xf0, 0x3b, 0x0e, 0x5d, 0x2e, 0xb7, 0x23, 0x24, 0xf3,
+ 0x6a, 0xd8, 0x17, 0x65, 0x41, 0xe6
+};
+
+static struct ec_der_pub_keys_st {
+ const unsigned char *der;
+ size_t len;
+ int valid;
+} ec_der_pub_keys[] = {
+ { ec_public_sect163k1_validxy, sizeof(ec_public_sect163k1_validxy), 1 },
+ { ec_public_sect163k1_badx, sizeof(ec_public_sect163k1_badx), 0 },
+ { ec_public_sect163k1_bady, sizeof(ec_public_sect163k1_bady), 0 },
+};
+
+/*
+ * Tests the range of the decoded EC char2 public point.
+ * See ec_GF2m_simple_oct2point().
+ */
+static int test_invalide_ec_char2_pub_range_decode(int id)
+{
+ int ret = 0;
+ EVP_PKEY *pkey;
+
+ pkey = load_example_key("EC", ec_der_pub_keys[id].der,
+ ec_der_pub_keys[id].len);
+
+ ret = (ec_der_pub_keys[id].valid && TEST_ptr(pkey))
+ || TEST_ptr_null(pkey);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+/* Tests loading a bad key in PKCS8 format */
+static int test_EVP_PKCS82PKEY(void)
+{
+ int ret = 0;
+ const unsigned char *derp = kExampleBadECKeyDER;
+ PKCS8_PRIV_KEY_INFO *p8inf = NULL;
+ EVP_PKEY *pkey = NULL;
+
+ if (!TEST_ptr(p8inf = d2i_PKCS8_PRIV_KEY_INFO(NULL, &derp,
+ sizeof(kExampleBadECKeyDER))))
+ goto done;
+
+ if (!TEST_ptr_eq(derp,
+ kExampleBadECKeyDER + sizeof(kExampleBadECKeyDER)))
+ goto done;
+
+ if (!TEST_ptr_null(pkey = EVP_PKCS82PKEY(p8inf)))
+ goto done;
+
+ ret = 1;
+
+ done:
+ PKCS8_PRIV_KEY_INFO_free(p8inf);
+ EVP_PKEY_free(pkey);
+
+ return ret;
+}
+
+#endif
+static int test_EVP_PKCS82PKEY_wrong_tag(void)
+{
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY *pkey2 = NULL;
+ BIO *membio = NULL;
+ char *membuf = NULL;
+ PKCS8_PRIV_KEY_INFO *p8inf = NULL;
+ int ok = 0;
+
+ if (testctx != NULL)
+ /* test not supported with non-default context */
+ return 1;
+
+ if (!TEST_ptr(membio = BIO_new(BIO_s_mem()))
+ || !TEST_ptr(pkey = load_example_rsa_key())
+ || !TEST_int_gt(i2d_PKCS8PrivateKey_bio(membio, pkey, NULL,
+ NULL, 0, NULL, NULL),
+ 0)
+ || !TEST_int_gt(BIO_get_mem_data(membio, &membuf), 0)
+ || !TEST_ptr(p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(membio, NULL))
+ || !TEST_ptr(pkey2 = EVP_PKCS82PKEY(p8inf))
+ || !TEST_int_eq(ERR_peek_last_error(), 0)) {
+ goto done;
+ }
+
+ ok = 1;
+ done:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(pkey2);
+ PKCS8_PRIV_KEY_INFO_free(p8inf);
+ BIO_free_all(membio);
+ return ok;
+}
+
+/* This uses kExampleRSAKeyDER and kExampleRSAKeyPKCS8 to verify encoding */
+static int test_privatekey_to_pkcs8(void)
+{
+ EVP_PKEY *pkey = NULL;
+ BIO *membio = NULL;
+ char *membuf = NULL;
+ long membuf_len = 0;
+ int ok = 0;
+
+ if (!TEST_ptr(membio = BIO_new(BIO_s_mem()))
+ || !TEST_ptr(pkey = load_example_rsa_key())
+ || !TEST_int_gt(i2d_PKCS8PrivateKey_bio(membio, pkey, NULL,
+ NULL, 0, NULL, NULL),
+ 0)
+ || !TEST_int_gt(membuf_len = BIO_get_mem_data(membio, &membuf), 0)
+ || !TEST_ptr(membuf)
+ || !TEST_mem_eq(membuf, (size_t)membuf_len,
+ kExampleRSAKeyPKCS8, sizeof(kExampleRSAKeyPKCS8))
+ /*
+ * We try to write PEM as well, just to see that it doesn't err, but
+ * assume that the result is correct.
+ */
+ || !TEST_int_gt(PEM_write_bio_PKCS8PrivateKey(membio, pkey, NULL,
+ NULL, 0, NULL, NULL),
+ 0))
+ goto done;
+
+ ok = 1;
+ done:
+ EVP_PKEY_free(pkey);
+ BIO_free_all(membio);
+ return ok;
+}
+
+#ifndef OPENSSL_NO_EC
+static const struct {
+ int encoding;
+ const char *encoding_name;
+} ec_encodings[] = {
+ { OPENSSL_EC_EXPLICIT_CURVE, OSSL_PKEY_EC_ENCODING_EXPLICIT },
+ { OPENSSL_EC_NAMED_CURVE, OSSL_PKEY_EC_ENCODING_GROUP }
+};
+
+static int ec_export_get_encoding_cb(const OSSL_PARAM params[], void *arg)
+{
+ const OSSL_PARAM *p;
+ const char *enc_name = NULL;
+ int *enc = arg;
+ size_t i;
+
+ *enc = -1;
+
+ if (!TEST_ptr(p = OSSL_PARAM_locate_const(params,
+ OSSL_PKEY_PARAM_EC_ENCODING))
+ || !TEST_true(OSSL_PARAM_get_utf8_string_ptr(p, &enc_name)))
+ return 0;
+
+ for (i = 0; i < OSSL_NELEM(ec_encodings); i++) {
+ if (OPENSSL_strcasecmp(enc_name, ec_encodings[i].encoding_name) == 0) {
+ *enc = ec_encodings[i].encoding;
+ break;
+ }
+ }
+
+ return (*enc != -1);
+}
+
+static int test_EC_keygen_with_enc(int idx)
+{
+ EVP_PKEY *params = NULL, *key = NULL;
+ EVP_PKEY_CTX *pctx = NULL, *kctx = NULL;
+ int enc;
+ int ret = 0;
+
+ enc = ec_encodings[idx].encoding;
+
+ /* Create key parameters */
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(testctx, "EC", NULL))
+ || !TEST_int_gt(EVP_PKEY_paramgen_init(pctx), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_group_name(pctx, "P-256"), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_ec_param_enc(pctx, enc), 0)
+ || !TEST_true(EVP_PKEY_paramgen(pctx, &params))
+ || !TEST_ptr(params))
+ goto done;
+
+ /* Create key */
+ if (!TEST_ptr(kctx = EVP_PKEY_CTX_new_from_pkey(testctx, params, NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(kctx), 0)
+ || !TEST_true(EVP_PKEY_keygen(kctx, &key))
+ || !TEST_ptr(key))
+ goto done;
+
+ /* Check that the encoding got all the way into the key */
+ if (!TEST_true(evp_keymgmt_util_export(key, OSSL_KEYMGMT_SELECT_ALL,
+ ec_export_get_encoding_cb, &enc))
+ || !TEST_int_eq(enc, ec_encodings[idx].encoding))
+ goto done;
+
+ ret = 1;
+ done:
+ EVP_PKEY_free(key);
+ EVP_PKEY_free(params);
+ EVP_PKEY_CTX_free(kctx);
+ EVP_PKEY_CTX_free(pctx);
+ return ret;
+}
+#endif
+
+#if !defined(OPENSSL_NO_SM2)
+
+static int test_EVP_SM2_verify(void)
+{
+ const char *pubkey =
+ "-----BEGIN PUBLIC KEY-----\n"
+ "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEp1KLWq1ZE2jmoAnnBJE1LBGxVr18\n"
+ "YvvqECWCpXfAQ9qUJ+UmthnUPf0iM3SaXKHe6PlLIDyNlWMWb9RUh/yU3g==\n"
+ "-----END PUBLIC KEY-----\n";
+
+ const char *msg = "message digest";
+ const char *id = "ALICE123@YAHOO.COM";
+
+ const uint8_t signature[] = {
+ 0x30, 0x44, 0x02, 0x20, 0x5b, 0xdb, 0xab, 0x81, 0x4f, 0xbb,
+ 0x8b, 0x69, 0xb1, 0x05, 0x9c, 0x99, 0x3b, 0xb2, 0x45, 0x06,
+ 0x4a, 0x30, 0x15, 0x59, 0x84, 0xcd, 0xee, 0x30, 0x60, 0x36,
+ 0x57, 0x87, 0xef, 0x5c, 0xd0, 0xbe, 0x02, 0x20, 0x43, 0x8d,
+ 0x1f, 0xc7, 0x77, 0x72, 0x39, 0xbb, 0x72, 0xe1, 0xfd, 0x07,
+ 0x58, 0xd5, 0x82, 0xc8, 0x2d, 0xba, 0x3b, 0x2c, 0x46, 0x24,
+ 0xe3, 0x50, 0xff, 0x04, 0xc7, 0xa0, 0x71, 0x9f, 0xa4, 0x70
+ };
+
+ int rc = 0;
+ BIO *bio = NULL;
+ EVP_PKEY *pkey = NULL;
+ EVP_MD_CTX *mctx = NULL;
+ EVP_PKEY_CTX *pctx = NULL;
+ EVP_MD *sm3 = NULL;
+
+ bio = BIO_new_mem_buf(pubkey, strlen(pubkey));
+ if (!TEST_true(bio != NULL))
+ goto done;
+
+ pkey = PEM_read_bio_PUBKEY_ex(bio, NULL, NULL, NULL, testctx, testpropq);
+ if (!TEST_true(pkey != NULL))
+ goto done;
+
+ if (!TEST_true(EVP_PKEY_is_a(pkey, "SM2")))
+ goto done;
+
+ if (!TEST_ptr(mctx = EVP_MD_CTX_new()))
+ goto done;
+
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_pkey(testctx, pkey, testpropq)))
+ goto done;
+
+ EVP_MD_CTX_set_pkey_ctx(mctx, pctx);
+
+ if (!TEST_ptr(sm3 = EVP_MD_fetch(testctx, "sm3", testpropq)))
+ goto done;
+
+ if (!TEST_true(EVP_DigestVerifyInit(mctx, NULL, sm3, NULL, pkey)))
+ goto done;
+
+ if (!TEST_int_gt(EVP_PKEY_CTX_set1_id(pctx, id, strlen(id)), 0))
+ goto done;
+
+ if (!TEST_true(EVP_DigestVerifyUpdate(mctx, msg, strlen(msg))))
+ goto done;
+
+ if (!TEST_int_gt(EVP_DigestVerifyFinal(mctx, signature, sizeof(signature)), 0))
+ goto done;
+ rc = 1;
+
+ done:
+ BIO_free(bio);
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(pctx);
+ EVP_MD_CTX_free(mctx);
+ EVP_MD_free(sm3);
+ return rc;
+}
+
+static int test_EVP_SM2(void)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY *pkeyparams = NULL;
+ EVP_PKEY_CTX *pctx = NULL;
+ EVP_PKEY_CTX *kctx = NULL;
+ EVP_PKEY_CTX *sctx = NULL;
+ size_t sig_len = 0;
+ unsigned char *sig = NULL;
+ EVP_MD_CTX *md_ctx = NULL;
+ EVP_MD_CTX *md_ctx_verify = NULL;
+ EVP_PKEY_CTX *cctx = NULL;
+ EVP_MD *check_md = NULL;
+
+ uint8_t ciphertext[128];
+ size_t ctext_len = sizeof(ciphertext);
+
+ uint8_t plaintext[8];
+ size_t ptext_len = sizeof(plaintext);
+
+ uint8_t sm2_id[] = {1, 2, 3, 4, 'l', 'e', 't', 't', 'e', 'r'};
+
+ OSSL_PARAM sparams[2] = {OSSL_PARAM_END, OSSL_PARAM_END};
+ OSSL_PARAM gparams[2] = {OSSL_PARAM_END, OSSL_PARAM_END};
+ int i;
+ char mdname[OSSL_MAX_NAME_SIZE];
+
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(testctx,
+ "SM2", testpropq)))
+ goto done;
+
+ if (!TEST_true(EVP_PKEY_paramgen_init(pctx) == 1))
+ goto done;
+
+ if (!TEST_int_gt(EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, NID_sm2), 0))
+ goto done;
+
+ if (!TEST_true(EVP_PKEY_paramgen(pctx, &pkeyparams)))
+ goto done;
+
+ if (!TEST_ptr(kctx = EVP_PKEY_CTX_new_from_pkey(testctx,
+ pkeyparams, testpropq)))
+ goto done;
+
+ if (!TEST_int_gt(EVP_PKEY_keygen_init(kctx), 0))
+ goto done;
+
+ if (!TEST_true(EVP_PKEY_keygen(kctx, &pkey)))
+ goto done;
+
+ if (!TEST_ptr(md_ctx = EVP_MD_CTX_new()))
+ goto done;
+
+ if (!TEST_ptr(md_ctx_verify = EVP_MD_CTX_new()))
+ goto done;
+
+ if (!TEST_ptr(sctx = EVP_PKEY_CTX_new_from_pkey(testctx, pkey, testpropq)))
+ goto done;
+
+ EVP_MD_CTX_set_pkey_ctx(md_ctx, sctx);
+ EVP_MD_CTX_set_pkey_ctx(md_ctx_verify, sctx);
+
+ if (!TEST_ptr(check_md = EVP_MD_fetch(testctx, "sm3", testpropq)))
+ goto done;
+
+ if (!TEST_true(EVP_DigestSignInit(md_ctx, NULL, check_md, NULL, pkey)))
+ goto done;
+
+ if (!TEST_int_gt(EVP_PKEY_CTX_set1_id(sctx, sm2_id, sizeof(sm2_id)), 0))
+ goto done;
+
+ if (!TEST_true(EVP_DigestSignUpdate(md_ctx, kMsg, sizeof(kMsg))))
+ goto done;
+
+ /* Determine the size of the signature. */
+ if (!TEST_true(EVP_DigestSignFinal(md_ctx, NULL, &sig_len)))
+ goto done;
+
+ if (!TEST_ptr(sig = OPENSSL_malloc(sig_len)))
+ goto done;
+
+ if (!TEST_true(EVP_DigestSignFinal(md_ctx, sig, &sig_len)))
+ goto done;
+
+ /* Ensure that the signature round-trips. */
+
+ if (!TEST_true(EVP_DigestVerifyInit(md_ctx_verify, NULL, check_md, NULL,
+ pkey)))
+ goto done;
+
+ if (!TEST_int_gt(EVP_PKEY_CTX_set1_id(sctx, sm2_id, sizeof(sm2_id)), 0))
+ goto done;
+
+ if (!TEST_true(EVP_DigestVerifyUpdate(md_ctx_verify, kMsg, sizeof(kMsg))))
+ goto done;
+
+ if (!TEST_int_gt(EVP_DigestVerifyFinal(md_ctx_verify, sig, sig_len), 0))
+ goto done;
+
+ /*
+ * Try verify again with non-matching 0 length id but ensure that it can
+ * be set on the context and overrides the previous value.
+ */
+
+ if (!TEST_true(EVP_DigestVerifyInit(md_ctx_verify, NULL, check_md, NULL,
+ pkey)))
+ goto done;
+
+ if (!TEST_int_gt(EVP_PKEY_CTX_set1_id(sctx, NULL, 0), 0))
+ goto done;
+
+ if (!TEST_true(EVP_DigestVerifyUpdate(md_ctx_verify, kMsg, sizeof(kMsg))))
+ goto done;
+
+ if (!TEST_int_eq(EVP_DigestVerifyFinal(md_ctx_verify, sig, sig_len), 0))
+ goto done;
+
+ /* now check encryption/decryption */
+
+ gparams[0] = OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_DIGEST,
+ mdname, sizeof(mdname));
+ for (i = 0; i < 2; i++) {
+ const char *mdnames[] = {
+#ifndef OPENSSL_NO_SM3
+ "SM3",
+#else
+ NULL,
+#endif
+ "SHA2-256" };
+ EVP_PKEY_CTX_free(cctx);
+
+ if (mdnames[i] == NULL)
+ continue;
+
+ sparams[0] =
+ OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_DIGEST,
+ (char *)mdnames[i], 0);
+
+ if (!TEST_ptr(cctx = EVP_PKEY_CTX_new_from_pkey(testctx,
+ pkey, testpropq)))
+ goto done;
+
+ if (!TEST_true(EVP_PKEY_encrypt_init(cctx)))
+ goto done;
+
+ if (!TEST_true(EVP_PKEY_CTX_set_params(cctx, sparams)))
+ goto done;
+
+ if (!TEST_true(EVP_PKEY_encrypt(cctx, ciphertext, &ctext_len, kMsg,
+ sizeof(kMsg))))
+ goto done;
+
+ if (!TEST_int_gt(EVP_PKEY_decrypt_init(cctx), 0))
+ goto done;
+
+ if (!TEST_true(EVP_PKEY_CTX_set_params(cctx, sparams)))
+ goto done;
+
+ if (!TEST_int_gt(EVP_PKEY_decrypt(cctx, plaintext, &ptext_len, ciphertext,
+ ctext_len), 0))
+ goto done;
+
+ if (!TEST_true(EVP_PKEY_CTX_get_params(cctx, gparams)))
+ goto done;
+
+ /*
+ * Test we're still using the digest we think we are.
+ * Because of aliases, the easiest is to fetch the digest and
+ * check the name with EVP_MD_is_a().
+ */
+ EVP_MD_free(check_md);
+ if (!TEST_ptr(check_md = EVP_MD_fetch(testctx, mdname, testpropq)))
+ goto done;
+ if (!TEST_true(EVP_MD_is_a(check_md, mdnames[i]))) {
+ TEST_info("Fetched md %s isn't %s", mdname, mdnames[i]);
+ goto done;
+ }
+
+ if (!TEST_true(ptext_len == sizeof(kMsg)))
+ goto done;
+
+ if (!TEST_true(memcmp(plaintext, kMsg, sizeof(kMsg)) == 0))
+ goto done;
+ }
+
+ ret = 1;
+done:
+ EVP_PKEY_CTX_free(pctx);
+ EVP_PKEY_CTX_free(kctx);
+ EVP_PKEY_CTX_free(sctx);
+ EVP_PKEY_CTX_free(cctx);
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(pkeyparams);
+ EVP_MD_CTX_free(md_ctx);
+ EVP_MD_CTX_free(md_ctx_verify);
+ EVP_MD_free(check_md);
+ OPENSSL_free(sig);
+ return ret;
+}
+
+#endif
+
+static struct keys_st {
+ int type;
+ char *priv;
+ char *pub;
+} keys[] = {
+ {
+ EVP_PKEY_HMAC, "0123456789", NULL
+ },
+ {
+ EVP_PKEY_HMAC, "", NULL
+#ifndef OPENSSL_NO_POLY1305
+ }, {
+ EVP_PKEY_POLY1305, "01234567890123456789012345678901", NULL
+#endif
+#ifndef OPENSSL_NO_SIPHASH
+ }, {
+ EVP_PKEY_SIPHASH, "0123456789012345", NULL
+#endif
+ },
+#ifndef OPENSSL_NO_EC
+ {
+ EVP_PKEY_X25519, "01234567890123456789012345678901",
+ "abcdefghijklmnopqrstuvwxyzabcdef"
+ }, {
+ EVP_PKEY_ED25519, "01234567890123456789012345678901",
+ "abcdefghijklmnopqrstuvwxyzabcdef"
+ }, {
+ EVP_PKEY_X448,
+ "01234567890123456789012345678901234567890123456789012345",
+ "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
+ }, {
+ EVP_PKEY_ED448,
+ "012345678901234567890123456789012345678901234567890123456",
+ "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcde"
+ }
+#endif
+};
+
+static int test_set_get_raw_keys_int(int tst, int pub, int uselibctx)
+{
+ int ret = 0;
+ unsigned char buf[80];
+ unsigned char *in;
+ size_t inlen, len = 0, shortlen = 1;
+ EVP_PKEY *pkey;
+
+ /* Check if this algorithm supports public keys */
+ if (pub && keys[tst].pub == NULL)
+ return 1;
+
+ memset(buf, 0, sizeof(buf));
+
+ if (pub) {
+#ifndef OPENSSL_NO_EC
+ inlen = strlen(keys[tst].pub);
+ in = (unsigned char *)keys[tst].pub;
+ if (uselibctx) {
+ pkey = EVP_PKEY_new_raw_public_key_ex(
+ testctx,
+ OBJ_nid2sn(keys[tst].type),
+ NULL,
+ in,
+ inlen);
+ } else {
+ pkey = EVP_PKEY_new_raw_public_key(keys[tst].type,
+ NULL,
+ in,
+ inlen);
+ }
+#else
+ return 1;
+#endif
+ } else {
+ inlen = strlen(keys[tst].priv);
+ in = (unsigned char *)keys[tst].priv;
+ if (uselibctx) {
+ pkey = EVP_PKEY_new_raw_private_key_ex(
+ testctx, OBJ_nid2sn(keys[tst].type),
+ NULL,
+ in,
+ inlen);
+ } else {
+ pkey = EVP_PKEY_new_raw_private_key(keys[tst].type,
+ NULL,
+ in,
+ inlen);
+ }
+ }
+
+ if (!TEST_ptr(pkey)
+ || !TEST_int_eq(EVP_PKEY_eq(pkey, pkey), 1)
+ || (!pub && !TEST_true(EVP_PKEY_get_raw_private_key(pkey, NULL, &len)))
+ || (pub && !TEST_true(EVP_PKEY_get_raw_public_key(pkey, NULL, &len)))
+ || !TEST_true(len == inlen))
+ goto done;
+ if (tst != 1) {
+ /*
+ * Test that supplying a buffer that is too small fails. Doesn't apply
+ * to HMAC with a zero length key
+ */
+ if ((!pub && !TEST_false(EVP_PKEY_get_raw_private_key(pkey, buf,
+ &shortlen)))
+ || (pub && !TEST_false(EVP_PKEY_get_raw_public_key(pkey, buf,
+ &shortlen))))
+ goto done;
+ }
+ if ((!pub && !TEST_true(EVP_PKEY_get_raw_private_key(pkey, buf, &len)))
+ || (pub && !TEST_true(EVP_PKEY_get_raw_public_key(pkey, buf, &len)))
+ || !TEST_mem_eq(in, inlen, buf, len))
+ goto done;
+
+ ret = 1;
+ done:
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static int test_set_get_raw_keys(int tst)
+{
+ return (nullprov != NULL || test_set_get_raw_keys_int(tst, 0, 0))
+ && test_set_get_raw_keys_int(tst, 0, 1)
+ && (nullprov != NULL || test_set_get_raw_keys_int(tst, 1, 0))
+ && test_set_get_raw_keys_int(tst, 1, 1);
+}
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+static int pkey_custom_check(EVP_PKEY *pkey)
+{
+ return 0xbeef;
+}
+
+static int pkey_custom_pub_check(EVP_PKEY *pkey)
+{
+ return 0xbeef;
+}
+
+static int pkey_custom_param_check(EVP_PKEY *pkey)
+{
+ return 0xbeef;
+}
+
+static EVP_PKEY_METHOD *custom_pmeth;
+#endif
+
+static int test_EVP_PKEY_check(int i)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ EVP_PKEY_CTX *ctx2 = NULL;
+#endif
+ const APK_DATA *ak = &keycheckdata[i];
+ const unsigned char *input = ak->kder;
+ size_t input_len = ak->size;
+ int expected_id = ak->evptype;
+ int expected_check = ak->check;
+ int expected_pub_check = ak->pub_check;
+ int expected_param_check = ak->param_check;
+ int type = ak->type;
+
+ if (!TEST_ptr(pkey = load_example_key(ak->keytype, input, input_len)))
+ goto done;
+ if (type == 0
+ && !TEST_int_eq(EVP_PKEY_get_id(pkey), expected_id))
+ goto done;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_pkey(testctx, pkey, testpropq)))
+ goto done;
+
+ if (!TEST_int_eq(EVP_PKEY_check(ctx), expected_check))
+ goto done;
+
+ if (!TEST_int_eq(EVP_PKEY_public_check(ctx), expected_pub_check))
+ goto done;
+
+ if (!TEST_int_eq(EVP_PKEY_param_check(ctx), expected_param_check))
+ goto done;
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ctx2 = EVP_PKEY_CTX_new_id(0xdefaced, NULL);
+ /* assign the pkey directly, as an internal test */
+ EVP_PKEY_up_ref(pkey);
+ ctx2->pkey = pkey;
+
+ if (!TEST_int_eq(EVP_PKEY_check(ctx2), 0xbeef))
+ goto done;
+
+ if (!TEST_int_eq(EVP_PKEY_public_check(ctx2), 0xbeef))
+ goto done;
+
+ if (!TEST_int_eq(EVP_PKEY_param_check(ctx2), 0xbeef))
+ goto done;
+#endif
+
+ ret = 1;
+
+ done:
+ EVP_PKEY_CTX_free(ctx);
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ EVP_PKEY_CTX_free(ctx2);
+#endif
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_CMAC
+static int get_cmac_val(EVP_PKEY *pkey, unsigned char *mac)
+{
+ EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
+ const char msg[] = "Hello World";
+ size_t maclen = AES_BLOCK_SIZE;
+ int ret = 1;
+
+ if (!TEST_ptr(mdctx)
+ || !TEST_true(EVP_DigestSignInit_ex(mdctx, NULL, NULL, testctx,
+ testpropq, pkey, NULL))
+ || !TEST_true(EVP_DigestSignUpdate(mdctx, msg, sizeof(msg)))
+ || !TEST_true(EVP_DigestSignFinal(mdctx, mac, &maclen))
+ || !TEST_size_t_eq(maclen, AES_BLOCK_SIZE))
+ ret = 0;
+
+ EVP_MD_CTX_free(mdctx);
+
+ return ret;
+}
+static int test_CMAC_keygen(void)
+{
+ static unsigned char key[] = {
+ 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
+ };
+ EVP_PKEY_CTX *kctx = NULL;
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ unsigned char mac[AES_BLOCK_SIZE];
+# if !defined(OPENSSL_NO_DEPRECATED_3_0)
+ unsigned char mac2[AES_BLOCK_SIZE];
+# endif
+
+ if (nullprov != NULL)
+ return TEST_skip("Test does not support a non-default library context");
+
+ /*
+ * This is a legacy method for CMACs, but should still work.
+ * This verifies that it works without an ENGINE.
+ */
+ kctx = EVP_PKEY_CTX_new_id(EVP_PKEY_CMAC, NULL);
+
+ /* Test a CMAC key created using the "generated" method */
+ if (!TEST_int_gt(EVP_PKEY_keygen_init(kctx), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_ctrl(kctx, -1, EVP_PKEY_OP_KEYGEN,
+ EVP_PKEY_CTRL_CIPHER,
+ 0, (void *)EVP_aes_256_ecb()), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_ctrl(kctx, -1, EVP_PKEY_OP_KEYGEN,
+ EVP_PKEY_CTRL_SET_MAC_KEY,
+ sizeof(key), (void *)key), 0)
+ || !TEST_int_gt(EVP_PKEY_keygen(kctx, &pkey), 0)
+ || !TEST_ptr(pkey)
+ || !TEST_true(get_cmac_val(pkey, mac)))
+ goto done;
+
+# if !defined(OPENSSL_NO_DEPRECATED_3_0)
+ EVP_PKEY_free(pkey);
+
+ /*
+ * Test a CMAC key using the direct method, and compare with the mac
+ * created above.
+ */
+ pkey = EVP_PKEY_new_CMAC_key(NULL, key, sizeof(key), EVP_aes_256_ecb());
+ if (!TEST_ptr(pkey)
+ || !TEST_true(get_cmac_val(pkey, mac2))
+ || !TEST_mem_eq(mac, sizeof(mac), mac2, sizeof(mac2)))
+ goto done;
+# endif
+
+ ret = 1;
+
+ done:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(kctx);
+ return ret;
+}
+#endif
+
+static int test_HKDF(void)
+{
+ EVP_PKEY_CTX *pctx;
+ unsigned char out[20];
+ size_t outlen;
+ int i, ret = 0;
+ unsigned char salt[] = "0123456789";
+ unsigned char key[] = "012345678901234567890123456789";
+ unsigned char info[] = "infostring";
+ const unsigned char expected[] = {
+ 0xe5, 0x07, 0x70, 0x7f, 0xc6, 0x78, 0xd6, 0x54, 0x32, 0x5f, 0x7e, 0xc5,
+ 0x7b, 0x59, 0x3e, 0xd8, 0x03, 0x6b, 0xed, 0xca
+ };
+ size_t expectedlen = sizeof(expected);
+
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(testctx, "HKDF", testpropq)))
+ goto done;
+
+ /* We do this twice to test reuse of the EVP_PKEY_CTX */
+ for (i = 0; i < 2; i++) {
+ outlen = sizeof(out);
+ memset(out, 0, outlen);
+
+ if (!TEST_int_gt(EVP_PKEY_derive_init(pctx), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_hkdf_md(pctx, EVP_sha256()), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt,
+ sizeof(salt) - 1), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set1_hkdf_key(pctx, key,
+ sizeof(key) - 1), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_add1_hkdf_info(pctx, info,
+ sizeof(info) - 1), 0)
+ || !TEST_int_gt(EVP_PKEY_derive(pctx, out, &outlen), 0)
+ || !TEST_mem_eq(out, outlen, expected, expectedlen))
+ goto done;
+ }
+
+ ret = 1;
+
+ done:
+ EVP_PKEY_CTX_free(pctx);
+
+ return ret;
+}
+
+static int test_emptyikm_HKDF(void)
+{
+ EVP_PKEY_CTX *pctx;
+ unsigned char out[20];
+ size_t outlen;
+ int ret = 0;
+ unsigned char salt[] = "9876543210";
+ unsigned char key[] = "";
+ unsigned char info[] = "stringinfo";
+ const unsigned char expected[] = {
+ 0x68, 0x81, 0xa5, 0x3e, 0x5b, 0x9c, 0x7b, 0x6f, 0x2e, 0xec, 0xc8, 0x47,
+ 0x7c, 0xfa, 0x47, 0x35, 0x66, 0x82, 0x15, 0x30
+ };
+ size_t expectedlen = sizeof(expected);
+
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(testctx, "HKDF", testpropq)))
+ goto done;
+
+ outlen = sizeof(out);
+ memset(out, 0, outlen);
+
+ if (!TEST_int_gt(EVP_PKEY_derive_init(pctx), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_hkdf_md(pctx, EVP_sha256()), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt,
+ sizeof(salt) - 1), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set1_hkdf_key(pctx, key,
+ sizeof(key) - 1), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_add1_hkdf_info(pctx, info,
+ sizeof(info) - 1), 0)
+ || !TEST_int_gt(EVP_PKEY_derive(pctx, out, &outlen), 0)
+ || !TEST_mem_eq(out, outlen, expected, expectedlen))
+ goto done;
+
+ ret = 1;
+
+ done:
+ EVP_PKEY_CTX_free(pctx);
+
+ return ret;
+}
+
+#ifndef OPENSSL_NO_EC
+static int test_X509_PUBKEY_inplace(void)
+{
+ int ret = 0;
+ X509_PUBKEY *xp = X509_PUBKEY_new_ex(testctx, testpropq);
+ const unsigned char *p = kExampleECPubKeyDER;
+ size_t input_len = sizeof(kExampleECPubKeyDER);
+
+ if (!TEST_ptr(xp))
+ goto done;
+ if (!TEST_ptr(d2i_X509_PUBKEY(&xp, &p, input_len)))
+ goto done;
+
+ if (!TEST_ptr(X509_PUBKEY_get0(xp)))
+ goto done;
+
+ p = kExampleBadECPubKeyDER;
+ input_len = sizeof(kExampleBadECPubKeyDER);
+
+ if (!TEST_ptr(xp = d2i_X509_PUBKEY(&xp, &p, input_len)))
+ goto done;
+
+ if (!TEST_true(X509_PUBKEY_get0(xp) == NULL))
+ goto done;
+
+ ret = 1;
+
+ done:
+ X509_PUBKEY_free(xp);
+ return ret;
+}
+
+static int test_X509_PUBKEY_dup(void)
+{
+ int ret = 0;
+ X509_PUBKEY *xp = NULL, *xq = NULL;
+ const unsigned char *p = kExampleECPubKeyDER;
+ size_t input_len = sizeof(kExampleECPubKeyDER);
+
+ xp = X509_PUBKEY_new_ex(testctx, testpropq);
+ if (!TEST_ptr(xp)
+ || !TEST_ptr(d2i_X509_PUBKEY(&xp, &p, input_len))
+ || !TEST_ptr(xq = X509_PUBKEY_dup(xp))
+ || !TEST_ptr_ne(xp, xq))
+ goto done;
+
+ if (!TEST_ptr(X509_PUBKEY_get0(xq))
+ || !TEST_ptr(X509_PUBKEY_get0(xp))
+ || !TEST_ptr_ne(X509_PUBKEY_get0(xq), X509_PUBKEY_get0(xp)))
+ goto done;
+
+ X509_PUBKEY_free(xq);
+ xq = NULL;
+ p = kExampleBadECPubKeyDER;
+ input_len = sizeof(kExampleBadECPubKeyDER);
+
+ if (!TEST_ptr(xp = d2i_X509_PUBKEY(&xp, &p, input_len))
+ || !TEST_ptr(xq = X509_PUBKEY_dup(xp)))
+ goto done;
+
+ X509_PUBKEY_free(xp);
+ xp = NULL;
+ if (!TEST_true(X509_PUBKEY_get0(xq) == NULL))
+ goto done;
+
+ ret = 1;
+
+ done:
+ X509_PUBKEY_free(xp);
+ X509_PUBKEY_free(xq);
+ return ret;
+}
+#endif /* OPENSSL_NO_EC */
+
+/* Test getting and setting parameters on an EVP_PKEY_CTX */
+static int test_EVP_PKEY_CTX_get_set_params(EVP_PKEY *pkey)
+{
+ EVP_MD_CTX *mdctx = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ const OSSL_PARAM *params;
+ OSSL_PARAM ourparams[2], *param = ourparams, *param_md;
+ int ret = 0;
+ const EVP_MD *md;
+ char mdname[OSSL_MAX_NAME_SIZE];
+ char ssl3ms[48];
+
+ /* Initialise a sign operation */
+ ctx = EVP_PKEY_CTX_new_from_pkey(testctx, pkey, testpropq);
+ if (!TEST_ptr(ctx)
+ || !TEST_int_gt(EVP_PKEY_sign_init(ctx), 0))
+ goto err;
+
+ /*
+ * We should be able to query the parameters now.
+ */
+ params = EVP_PKEY_CTX_settable_params(ctx);
+ if (!TEST_ptr(params)
+ || !TEST_ptr(OSSL_PARAM_locate_const(params,
+ OSSL_SIGNATURE_PARAM_DIGEST)))
+ goto err;
+
+ params = EVP_PKEY_CTX_gettable_params(ctx);
+ if (!TEST_ptr(params)
+ || !TEST_ptr(OSSL_PARAM_locate_const(params,
+ OSSL_SIGNATURE_PARAM_ALGORITHM_ID))
+ || !TEST_ptr(OSSL_PARAM_locate_const(params,
+ OSSL_SIGNATURE_PARAM_DIGEST)))
+ goto err;
+
+ /*
+ * Test getting and setting params via EVP_PKEY_CTX_set_params() and
+ * EVP_PKEY_CTX_get_params()
+ */
+ strcpy(mdname, "SHA512");
+ param_md = param;
+ *param++ = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST,
+ mdname, 0);
+ *param++ = OSSL_PARAM_construct_end();
+
+ if (!TEST_true(EVP_PKEY_CTX_set_params(ctx, ourparams)))
+ goto err;
+
+ mdname[0] = '\0';
+ *param_md = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST,
+ mdname, sizeof(mdname));
+ if (!TEST_true(EVP_PKEY_CTX_get_params(ctx, ourparams))
+ || !TEST_str_eq(mdname, "SHA512"))
+ goto err;
+
+ /*
+ * Test the TEST_PKEY_CTX_set_signature_md() and
+ * TEST_PKEY_CTX_get_signature_md() functions
+ */
+ if (!TEST_int_gt(EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_get_signature_md(ctx, &md), 0)
+ || !TEST_ptr_eq(md, EVP_sha256()))
+ goto err;
+
+ /*
+ * Test getting MD parameters via an associated EVP_PKEY_CTX
+ */
+ mdctx = EVP_MD_CTX_new();
+ if (!TEST_ptr(mdctx)
+ || !TEST_true(EVP_DigestSignInit_ex(mdctx, NULL, "SHA1", testctx, testpropq,
+ pkey, NULL)))
+ goto err;
+
+ /*
+ * We now have an EVP_MD_CTX with an EVP_PKEY_CTX inside it. We should be
+ * able to obtain the digest's settable parameters from the provider.
+ */
+ params = EVP_MD_CTX_settable_params(mdctx);
+ if (!TEST_ptr(params)
+ || !TEST_int_eq(strcmp(params[0].key, OSSL_DIGEST_PARAM_SSL3_MS), 0)
+ /* The final key should be NULL */
+ || !TEST_ptr_null(params[1].key))
+ goto err;
+
+ param = ourparams;
+ memset(ssl3ms, 0, sizeof(ssl3ms));
+ *param++ = OSSL_PARAM_construct_octet_string(OSSL_DIGEST_PARAM_SSL3_MS,
+ ssl3ms, sizeof(ssl3ms));
+ *param++ = OSSL_PARAM_construct_end();
+
+ if (!TEST_true(EVP_MD_CTX_set_params(mdctx, ourparams)))
+ goto err;
+
+ ret = 1;
+
+ err:
+ EVP_MD_CTX_free(mdctx);
+ EVP_PKEY_CTX_free(ctx);
+
+ return ret;
+}
+
+#ifndef OPENSSL_NO_DSA
+static int test_DSA_get_set_params(void)
+{
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL, *pub = NULL, *priv = NULL;
+ EVP_PKEY_CTX *pctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ int ret = 0;
+
+ /*
+ * Setup the parameters for our DSA object. For our purposes they don't
+ * have to actually be *valid* parameters. We just need to set something.
+ */
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(testctx, "DSA", NULL))
+ || !TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(p = BN_new())
+ || !TEST_ptr(q = BN_new())
+ || !TEST_ptr(g = BN_new())
+ || !TEST_ptr(pub = BN_new())
+ || !TEST_ptr(priv = BN_new()))
+ goto err;
+ if (!TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_Q, q))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_G, g))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY,
+ pub))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY,
+ priv)))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ if (!TEST_int_gt(EVP_PKEY_fromdata_init(pctx), 0)
+ || !TEST_int_gt(EVP_PKEY_fromdata(pctx, &pkey, EVP_PKEY_KEYPAIR,
+ params), 0))
+ goto err;
+
+ if (!TEST_ptr(pkey))
+ goto err;
+
+ ret = test_EVP_PKEY_CTX_get_set_params(pkey);
+
+ err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(pctx);
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ BN_free(p);
+ BN_free(q);
+ BN_free(g);
+ BN_free(pub);
+ BN_free(priv);
+
+ return ret;
+}
+
+/*
+ * Test combinations of private, public, missing and private + public key
+ * params to ensure they are all accepted
+ */
+static int test_DSA_priv_pub(void)
+{
+ return test_EVP_PKEY_ffc_priv_pub("DSA");
+}
+
+#endif /* !OPENSSL_NO_DSA */
+
+static int test_RSA_get_set_params(void)
+{
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL;
+ BIGNUM *n = NULL, *e = NULL, *d = NULL;
+ EVP_PKEY_CTX *pctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ int ret = 0;
+
+ /*
+ * Setup the parameters for our RSA object. For our purposes they don't
+ * have to actually be *valid* parameters. We just need to set something.
+ */
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(testctx, "RSA", NULL))
+ || !TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(n = BN_new())
+ || !TEST_ptr(e = BN_new())
+ || !TEST_ptr(d = BN_new()))
+ goto err;
+ if (!TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_N, n))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_E, e))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_D, d)))
+ goto err;
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ if (!TEST_int_gt(EVP_PKEY_fromdata_init(pctx), 0)
+ || !TEST_int_gt(EVP_PKEY_fromdata(pctx, &pkey, EVP_PKEY_KEYPAIR,
+ params), 0))
+ goto err;
+
+ if (!TEST_ptr(pkey))
+ goto err;
+
+ ret = test_EVP_PKEY_CTX_get_set_params(pkey);
+
+ err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(pctx);
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ BN_free(n);
+ BN_free(e);
+ BN_free(d);
+
+ return ret;
+}
+
+static int test_RSA_OAEP_set_get_params(void)
+{
+ int ret = 0;
+ EVP_PKEY *key = NULL;
+ EVP_PKEY_CTX *key_ctx = NULL;
+
+ if (nullprov != NULL)
+ return TEST_skip("Test does not support a non-default library context");
+
+ if (!TEST_ptr(key = load_example_rsa_key())
+ || !TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(0, key, 0)))
+ goto err;
+
+ {
+ int padding = RSA_PKCS1_OAEP_PADDING;
+ OSSL_PARAM params[4];
+
+ params[0] = OSSL_PARAM_construct_int(OSSL_SIGNATURE_PARAM_PAD_MODE, &padding);
+ params[1] = OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST,
+ OSSL_DIGEST_NAME_SHA2_256, 0);
+ params[2] = OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST,
+ OSSL_DIGEST_NAME_SHA1, 0);
+ params[3] = OSSL_PARAM_construct_end();
+
+ if (!TEST_int_gt(EVP_PKEY_encrypt_init_ex(key_ctx, params),0))
+ goto err;
+ }
+ {
+ OSSL_PARAM params[3];
+ char oaepmd[30] = { '\0' };
+ char mgf1md[30] = { '\0' };
+
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST,
+ oaepmd, sizeof(oaepmd));
+ params[1] = OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST,
+ mgf1md, sizeof(mgf1md));
+ params[2] = OSSL_PARAM_construct_end();
+
+ if (!TEST_true(EVP_PKEY_CTX_get_params(key_ctx, params)))
+ goto err;
+
+ if (!TEST_str_eq(oaepmd, OSSL_DIGEST_NAME_SHA2_256)
+ || !TEST_str_eq(mgf1md, OSSL_DIGEST_NAME_SHA1))
+ goto err;
+ }
+
+ ret = 1;
+
+ err:
+ EVP_PKEY_free(key);
+ EVP_PKEY_CTX_free(key_ctx);
+
+ return ret;
+}
+
+/* https://github.com/openssl/openssl/issues/21288 */
+static int test_RSA_OAEP_set_null_label(void)
+{
+ int ret = 0;
+ EVP_PKEY *key = NULL;
+ EVP_PKEY_CTX *key_ctx = NULL;
+
+ if (!TEST_ptr(key = load_example_rsa_key())
+ || !TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(testctx, key, NULL))
+ || !TEST_true(EVP_PKEY_encrypt_init(key_ctx)))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_CTX_set_rsa_padding(key_ctx, RSA_PKCS1_OAEP_PADDING)))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_CTX_set0_rsa_oaep_label(key_ctx, OPENSSL_strdup("foo"), 0)))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_CTX_set0_rsa_oaep_label(key_ctx, NULL, 0)))
+ goto err;
+
+ ret = 1;
+
+ err:
+ EVP_PKEY_free(key);
+ EVP_PKEY_CTX_free(key_ctx);
+
+ return ret;
+}
+
+#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
+static int test_decrypt_null_chunks(void)
+{
+ EVP_CIPHER_CTX* ctx = NULL;
+ EVP_CIPHER *cipher = NULL;
+ const unsigned char 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, 0x1
+ };
+ unsigned char iv[12] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b
+ };
+ unsigned char msg[] = "It was the best of times, it was the worst of times";
+ unsigned char ciphertext[80];
+ unsigned char plaintext[80];
+ /* We initialise tmp to a non zero value on purpose */
+ int ctlen, ptlen, tmp = 99;
+ int ret = 0;
+ const int enc_offset = 10, dec_offset = 20;
+
+ if (!TEST_ptr(cipher = EVP_CIPHER_fetch(testctx, "ChaCha20-Poly1305", testpropq))
+ || !TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_true(EVP_EncryptInit_ex(ctx, cipher, NULL,
+ key, iv))
+ || !TEST_true(EVP_EncryptUpdate(ctx, ciphertext, &ctlen, msg,
+ enc_offset))
+ /* Deliberate add a zero length update */
+ || !TEST_true(EVP_EncryptUpdate(ctx, ciphertext + ctlen, &tmp, NULL,
+ 0))
+ || !TEST_int_eq(tmp, 0)
+ || !TEST_true(EVP_EncryptUpdate(ctx, ciphertext + ctlen, &tmp,
+ msg + enc_offset,
+ sizeof(msg) - enc_offset))
+ || !TEST_int_eq(ctlen += tmp, sizeof(msg))
+ || !TEST_true(EVP_EncryptFinal(ctx, ciphertext + ctlen, &tmp))
+ || !TEST_int_eq(tmp, 0))
+ goto err;
+
+ /* Deliberately initialise tmp to a non zero value */
+ tmp = 99;
+ if (!TEST_true(EVP_DecryptInit_ex(ctx, cipher, NULL, key, iv))
+ || !TEST_true(EVP_DecryptUpdate(ctx, plaintext, &ptlen, ciphertext,
+ dec_offset))
+ /*
+ * Deliberately add a zero length update. We also deliberately do
+ * this at a different offset than for encryption.
+ */
+ || !TEST_true(EVP_DecryptUpdate(ctx, plaintext + ptlen, &tmp, NULL,
+ 0))
+ || !TEST_int_eq(tmp, 0)
+ || !TEST_true(EVP_DecryptUpdate(ctx, plaintext + ptlen, &tmp,
+ ciphertext + dec_offset,
+ ctlen - dec_offset))
+ || !TEST_int_eq(ptlen += tmp, sizeof(msg))
+ || !TEST_true(EVP_DecryptFinal(ctx, plaintext + ptlen, &tmp))
+ || !TEST_int_eq(tmp, 0)
+ || !TEST_mem_eq(msg, sizeof(msg), plaintext, ptlen))
+ goto err;
+
+ ret = 1;
+ err:
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(cipher);
+ return ret;
+}
+#endif /* !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) */
+
+#ifndef OPENSSL_NO_DH
+/*
+ * Test combinations of private, public, missing and private + public key
+ * params to ensure they are all accepted
+ */
+static int test_DH_priv_pub(void)
+{
+ return test_EVP_PKEY_ffc_priv_pub("DH");
+}
+
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+static int test_EVP_PKEY_set1_DH(void)
+{
+ DH *x942dh = NULL, *noqdh = NULL;
+ EVP_PKEY *pkey1 = NULL, *pkey2 = NULL;
+ int ret = 0;
+ BIGNUM *p, *g = NULL;
+ BIGNUM *pubkey = NULL;
+ unsigned char pub[2048 / 8];
+ size_t len = 0;
+
+ if (!TEST_ptr(p = BN_new())
+ || !TEST_ptr(g = BN_new())
+ || !TEST_ptr(pubkey = BN_new())
+ || !TEST_true(BN_set_word(p, 9999))
+ || !TEST_true(BN_set_word(g, 2))
+ || !TEST_true(BN_set_word(pubkey, 4321))
+ || !TEST_ptr(noqdh = DH_new())
+ || !TEST_true(DH_set0_pqg(noqdh, p, NULL, g))
+ || !TEST_true(DH_set0_key(noqdh, pubkey, NULL))
+ || !TEST_ptr(pubkey = BN_new())
+ || !TEST_true(BN_set_word(pubkey, 4321)))
+ goto err;
+ p = g = NULL;
+
+ x942dh = DH_get_2048_256();
+ pkey1 = EVP_PKEY_new();
+ pkey2 = EVP_PKEY_new();
+ if (!TEST_ptr(x942dh)
+ || !TEST_ptr(noqdh)
+ || !TEST_ptr(pkey1)
+ || !TEST_ptr(pkey2)
+ || !TEST_true(DH_set0_key(x942dh, pubkey, NULL)))
+ goto err;
+ pubkey = NULL;
+
+ if (!TEST_true(EVP_PKEY_set1_DH(pkey1, x942dh))
+ || !TEST_int_eq(EVP_PKEY_get_id(pkey1), EVP_PKEY_DHX))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_get_bn_param(pkey1, OSSL_PKEY_PARAM_PUB_KEY,
+ &pubkey))
+ || !TEST_ptr(pubkey))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_set1_DH(pkey2, noqdh))
+ || !TEST_int_eq(EVP_PKEY_get_id(pkey2), EVP_PKEY_DH))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_get_octet_string_param(pkey2,
+ OSSL_PKEY_PARAM_PUB_KEY,
+ pub, sizeof(pub), &len))
+ || !TEST_size_t_ne(len, 0))
+ goto err;
+
+ ret = 1;
+ err:
+ BN_free(p);
+ BN_free(g);
+ BN_free(pubkey);
+ EVP_PKEY_free(pkey1);
+ EVP_PKEY_free(pkey2);
+ DH_free(x942dh);
+ DH_free(noqdh);
+
+ return ret;
+}
+# endif /* !OPENSSL_NO_DEPRECATED_3_0 */
+#endif /* !OPENSSL_NO_DH */
+
+/*
+ * We test what happens with an empty template. For the sake of this test,
+ * the template must be ignored, and we know that's the case for RSA keys
+ * (this might arguably be a misfeature, but that's what we currently do,
+ * even in provider code, since that's how the legacy RSA implementation
+ * does things)
+ */
+static int test_keygen_with_empty_template(int n)
+{
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY *tkey = NULL;
+ int ret = 0;
+
+ if (nullprov != NULL)
+ return TEST_skip("Test does not support a non-default library context");
+
+ switch (n) {
+ case 0:
+ /* We do test with no template at all as well */
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL)))
+ goto err;
+ break;
+ case 1:
+ /* Here we create an empty RSA key that serves as our template */
+ if (!TEST_ptr(tkey = EVP_PKEY_new())
+ || !TEST_true(EVP_PKEY_set_type(tkey, EVP_PKEY_RSA))
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new(tkey, NULL)))
+ goto err;
+ break;
+ }
+
+ if (!TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_keygen(ctx, &pkey), 0))
+ goto err;
+
+ ret = 1;
+ err:
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(tkey);
+ return ret;
+}
+
+/*
+ * Test that we fail if we attempt to use an algorithm that is not available
+ * in the current library context (unless we are using an algorithm that
+ * should be made available via legacy codepaths).
+ *
+ * 0: RSA
+ * 1: SM2
+ */
+static int test_pkey_ctx_fail_without_provider(int tst)
+{
+ OSSL_LIB_CTX *tmpctx = OSSL_LIB_CTX_new();
+ OSSL_PROVIDER *tmpnullprov = NULL;
+ EVP_PKEY_CTX *pctx = NULL;
+ const char *keytype = NULL;
+ int expect_null = 0;
+ int ret = 0;
+
+ if (!TEST_ptr(tmpctx))
+ goto err;
+
+ tmpnullprov = OSSL_PROVIDER_load(tmpctx, "null");
+ if (!TEST_ptr(tmpnullprov))
+ goto err;
+
+ /*
+ * We check for certain algos in the null provider.
+ * If an algo is expected to have a provider keymgmt, contructing an
+ * EVP_PKEY_CTX is expected to fail (return NULL).
+ * Otherwise, if it's expected to have legacy support, contructing an
+ * EVP_PKEY_CTX is expected to succeed (return non-NULL).
+ */
+ switch (tst) {
+ case 0:
+ keytype = "RSA";
+ expect_null = 1;
+ break;
+ case 1:
+ keytype = "SM2";
+ expect_null = 1;
+#ifdef OPENSSL_NO_EC
+ TEST_info("EC disable, skipping SM2 check...");
+ goto end;
+#endif
+#ifdef OPENSSL_NO_SM2
+ TEST_info("SM2 disable, skipping SM2 check...");
+ goto end;
+#endif
+ break;
+ default:
+ TEST_error("No test for case %d", tst);
+ goto err;
+ }
+
+ pctx = EVP_PKEY_CTX_new_from_name(tmpctx, keytype, "");
+ if (expect_null ? !TEST_ptr_null(pctx) : !TEST_ptr(pctx))
+ goto err;
+
+#if defined(OPENSSL_NO_EC) || defined(OPENSSL_NO_SM2)
+ end:
+#endif
+ ret = 1;
+
+ err:
+ EVP_PKEY_CTX_free(pctx);
+ OSSL_PROVIDER_unload(tmpnullprov);
+ OSSL_LIB_CTX_free(tmpctx);
+ 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(testctx, "TEST-RAND", testpropq)))
+ 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_RAND_PARAM_MAX_REQUEST, &step);
+ *p = OSSL_PARAM_construct_end();
+ res = TEST_true(EVP_RAND_CTX_set_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;
+}
+
+/*
+ * Test that we correctly return the original or "running" IV after
+ * an encryption operation.
+ * Run multiple times for some different relevant algorithms/modes.
+ */
+static int test_evp_iv_aes(int idx)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx = NULL;
+ unsigned char key[16] = {0x4c, 0x43, 0xdb, 0xdd, 0x42, 0x73, 0x47, 0xd1,
+ 0xe5, 0x62, 0x7d, 0xcd, 0x4d, 0x76, 0x4d, 0x57};
+ unsigned char init_iv[EVP_MAX_IV_LENGTH] =
+ {0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b, 0x98, 0x82,
+ 0x5a, 0x55, 0x91, 0x81, 0x42, 0xa8, 0x89, 0x34};
+ static const unsigned char msg[] = { 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 16 };
+ unsigned char ciphertext[32], oiv[16], iv[16];
+ unsigned char *ref_iv;
+ unsigned char cbc_state[16] = {0x10, 0x2f, 0x05, 0xcc, 0xc2, 0x55, 0x72, 0xb9,
+ 0x88, 0xe6, 0x4a, 0x17, 0x10, 0x74, 0x22, 0x5e};
+
+ unsigned char ofb_state[16] = {0x76, 0xe6, 0x66, 0x61, 0xd0, 0x8a, 0xe4, 0x64,
+ 0xdd, 0x66, 0xbf, 0x00, 0xf0, 0xe3, 0x6f, 0xfd};
+ unsigned char cfb_state[16] = {0x77, 0xe4, 0x65, 0x65, 0xd5, 0x8c, 0xe3, 0x6c,
+ 0xd4, 0x6c, 0xb4, 0x0c, 0xfd, 0xed, 0x60, 0xed};
+ unsigned char gcm_state[12] = {0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b,
+ 0x98, 0x82, 0x5a, 0x55, 0x91, 0x81};
+ unsigned char ccm_state[7] = {0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b, 0x98};
+#ifndef OPENSSL_NO_OCB
+ unsigned char ocb_state[12] = {0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b,
+ 0x98, 0x82, 0x5a, 0x55, 0x91, 0x81};
+#endif
+ int len = sizeof(ciphertext);
+ size_t ivlen, ref_len;
+ const EVP_CIPHER *type = NULL;
+ int iv_reset = 0;
+
+ if (nullprov != NULL && idx < 6)
+ return TEST_skip("Test does not support a non-default library context");
+
+ switch(idx) {
+ case 0:
+ type = EVP_aes_128_cbc();
+ /* FALLTHROUGH */
+ case 6:
+ type = (type != NULL) ? type :
+ EVP_CIPHER_fetch(testctx, "aes-128-cbc", testpropq);
+ ref_iv = cbc_state;
+ ref_len = sizeof(cbc_state);
+ iv_reset = 1;
+ break;
+ case 1:
+ type = EVP_aes_128_ofb();
+ /* FALLTHROUGH */
+ case 7:
+ type = (type != NULL) ? type :
+ EVP_CIPHER_fetch(testctx, "aes-128-ofb", testpropq);
+ ref_iv = ofb_state;
+ ref_len = sizeof(ofb_state);
+ iv_reset = 1;
+ break;
+ case 2:
+ type = EVP_aes_128_cfb();
+ /* FALLTHROUGH */
+ case 8:
+ type = (type != NULL) ? type :
+ EVP_CIPHER_fetch(testctx, "aes-128-cfb", testpropq);
+ ref_iv = cfb_state;
+ ref_len = sizeof(cfb_state);
+ iv_reset = 1;
+ break;
+ case 3:
+ type = EVP_aes_128_gcm();
+ /* FALLTHROUGH */
+ case 9:
+ type = (type != NULL) ? type :
+ EVP_CIPHER_fetch(testctx, "aes-128-gcm", testpropq);
+ ref_iv = gcm_state;
+ ref_len = sizeof(gcm_state);
+ break;
+ case 4:
+ type = EVP_aes_128_ccm();
+ /* FALLTHROUGH */
+ case 10:
+ type = (type != NULL) ? type :
+ EVP_CIPHER_fetch(testctx, "aes-128-ccm", testpropq);
+ ref_iv = ccm_state;
+ ref_len = sizeof(ccm_state);
+ break;
+#ifdef OPENSSL_NO_OCB
+ case 5:
+ case 11:
+ return 1;
+#else
+ case 5:
+ type = EVP_aes_128_ocb();
+ /* FALLTHROUGH */
+ case 11:
+ type = (type != NULL) ? type :
+ EVP_CIPHER_fetch(testctx, "aes-128-ocb", testpropq);
+ ref_iv = ocb_state;
+ ref_len = sizeof(ocb_state);
+ break;
+#endif
+ default:
+ return 0;
+ }
+
+ if (!TEST_ptr(type)
+ || !TEST_ptr((ctx = EVP_CIPHER_CTX_new()))
+ || !TEST_true(EVP_EncryptInit_ex(ctx, type, NULL, key, init_iv))
+ || !TEST_true(EVP_EncryptUpdate(ctx, ciphertext, &len, msg,
+ (int)sizeof(msg)))
+ || !TEST_true(EVP_CIPHER_CTX_get_original_iv(ctx, oiv, sizeof(oiv)))
+ || !TEST_true(EVP_CIPHER_CTX_get_updated_iv(ctx, iv, sizeof(iv)))
+ || !TEST_true(EVP_EncryptFinal_ex(ctx, ciphertext, &len)))
+ goto err;
+ ivlen = EVP_CIPHER_CTX_get_iv_length(ctx);
+ if (!TEST_mem_eq(init_iv, ivlen, oiv, ivlen)
+ || !TEST_mem_eq(ref_iv, ref_len, iv, ivlen))
+ goto err;
+
+ /* CBC, OFB, and CFB modes: the updated iv must be reset after reinit */
+ if (!TEST_true(EVP_EncryptInit_ex(ctx, NULL, NULL, NULL, NULL))
+ || !TEST_true(EVP_CIPHER_CTX_get_updated_iv(ctx, iv, sizeof(iv))))
+ goto err;
+ if (iv_reset) {
+ if (!TEST_mem_eq(init_iv, ivlen, iv, ivlen))
+ goto err;
+ } else {
+ if (!TEST_mem_eq(ref_iv, ivlen, iv, ivlen))
+ goto err;
+ }
+
+ ret = 1;
+err:
+ EVP_CIPHER_CTX_free(ctx);
+ if (idx >= 6)
+ EVP_CIPHER_free((EVP_CIPHER *)type);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_DES
+static int test_evp_iv_des(int idx)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx = NULL;
+ static const unsigned char key[24] = {
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
+ 0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86,
+ 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
+ };
+ static const unsigned char init_iv[8] = {
+ 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
+ };
+ static const unsigned char msg[] = { 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 16 };
+ unsigned char ciphertext[32], oiv[8], iv[8];
+ unsigned const char *ref_iv;
+ static const unsigned char cbc_state_des[8] = {
+ 0x4f, 0xa3, 0x85, 0xcd, 0x8b, 0xf3, 0x06, 0x2a
+ };
+ static const unsigned char cbc_state_3des[8] = {
+ 0x35, 0x27, 0x7d, 0x65, 0x6c, 0xfb, 0x50, 0xd9
+ };
+ static const unsigned char ofb_state_des[8] = {
+ 0xa7, 0x0d, 0x1d, 0x45, 0xf9, 0x96, 0x3f, 0x2c
+ };
+ static const unsigned char ofb_state_3des[8] = {
+ 0xab, 0x16, 0x24, 0xbb, 0x5b, 0xac, 0xed, 0x5e
+ };
+ static const unsigned char cfb_state_des[8] = {
+ 0x91, 0xeb, 0x6d, 0x29, 0x4b, 0x08, 0xbd, 0x73
+ };
+ static const unsigned char cfb_state_3des[8] = {
+ 0x34, 0xdd, 0xfb, 0x47, 0x33, 0x1c, 0x61, 0xf7
+ };
+ int len = sizeof(ciphertext);
+ size_t ivlen, ref_len;
+ EVP_CIPHER *type = NULL;
+
+ if (lgcyprov == NULL && idx < 3)
+ return TEST_skip("Test requires legacy provider to be loaded");
+
+ switch(idx) {
+ case 0:
+ type = EVP_CIPHER_fetch(testctx, "des-cbc", testpropq);
+ ref_iv = cbc_state_des;
+ ref_len = sizeof(cbc_state_des);
+ break;
+ case 1:
+ type = EVP_CIPHER_fetch(testctx, "des-ofb", testpropq);
+ ref_iv = ofb_state_des;
+ ref_len = sizeof(ofb_state_des);
+ break;
+ case 2:
+ type = EVP_CIPHER_fetch(testctx, "des-cfb", testpropq);
+ ref_iv = cfb_state_des;
+ ref_len = sizeof(cfb_state_des);
+ break;
+ case 3:
+ type = EVP_CIPHER_fetch(testctx, "des-ede3-cbc", testpropq);
+ ref_iv = cbc_state_3des;
+ ref_len = sizeof(cbc_state_3des);
+ break;
+ case 4:
+ type = EVP_CIPHER_fetch(testctx, "des-ede3-ofb", testpropq);
+ ref_iv = ofb_state_3des;
+ ref_len = sizeof(ofb_state_3des);
+ break;
+ case 5:
+ type = EVP_CIPHER_fetch(testctx, "des-ede3-cfb", testpropq);
+ ref_iv = cfb_state_3des;
+ ref_len = sizeof(cfb_state_3des);
+ break;
+ default:
+ return 0;
+ }
+
+ if (!TEST_ptr(type)
+ || !TEST_ptr((ctx = EVP_CIPHER_CTX_new()))
+ || !TEST_true(EVP_EncryptInit_ex(ctx, type, NULL, key, init_iv))
+ || !TEST_true(EVP_EncryptUpdate(ctx, ciphertext, &len, msg,
+ (int)sizeof(msg)))
+ || !TEST_true(EVP_CIPHER_CTX_get_original_iv(ctx, oiv, sizeof(oiv)))
+ || !TEST_true(EVP_CIPHER_CTX_get_updated_iv(ctx, iv, sizeof(iv)))
+ || !TEST_true(EVP_EncryptFinal_ex(ctx, ciphertext, &len)))
+ goto err;
+ ivlen = EVP_CIPHER_CTX_get_iv_length(ctx);
+ if (!TEST_mem_eq(init_iv, ivlen, oiv, ivlen)
+ || !TEST_mem_eq(ref_iv, ref_len, iv, ivlen))
+ goto err;
+
+ if (!TEST_true(EVP_EncryptInit_ex(ctx, NULL, NULL, NULL, NULL))
+ || !TEST_true(EVP_CIPHER_CTX_get_updated_iv(ctx, iv, sizeof(iv))))
+ goto err;
+ if (!TEST_mem_eq(init_iv, ivlen, iv, ivlen))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(type);
+ return ret;
+}
+#endif
+
+#ifndef OPENSSL_NO_BF
+static int test_evp_bf_default_keylen(int idx)
+{
+ int ret = 0;
+ static const char *algos[4] = {
+ "bf-ecb", "bf-cbc", "bf-cfb", "bf-ofb"
+ };
+ int ivlen[4] = { 0, 8, 8, 8 };
+ EVP_CIPHER *cipher = NULL;
+
+ if (lgcyprov == NULL)
+ return TEST_skip("Test requires legacy provider to be loaded");
+
+ if (!TEST_ptr(cipher = EVP_CIPHER_fetch(testctx, algos[idx], testpropq))
+ || !TEST_int_eq(EVP_CIPHER_get_key_length(cipher), 16)
+ || !TEST_int_eq(EVP_CIPHER_get_iv_length(cipher), ivlen[idx]))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ return ret;
+}
+#endif
+
+#ifndef OPENSSL_NO_EC
+static int ecpub_nids[] = {
+ NID_brainpoolP256r1, NID_X9_62_prime256v1,
+ NID_secp384r1, NID_secp521r1,
+# ifndef OPENSSL_NO_EC2M
+ NID_sect233k1, NID_sect233r1, NID_sect283r1,
+ NID_sect409k1, NID_sect409r1, NID_sect571k1, NID_sect571r1,
+# endif
+ NID_brainpoolP384r1, NID_brainpoolP512r1
+};
+
+static int test_ecpub(int idx)
+{
+ int ret = 0, len, savelen;
+ int nid;
+ unsigned char buf[1024];
+ unsigned char *p;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ const unsigned char *q;
+ EVP_PKEY *pkey2 = NULL;
+ EC_KEY *ec = NULL;
+# endif
+
+ if (nullprov != NULL)
+ return TEST_skip("Test does not support a non-default library context");
+
+ nid = ecpub_nids[idx];
+
+ ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
+ if (!TEST_ptr(ctx)
+ || !TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid), 0)
+ || !TEST_true(EVP_PKEY_keygen(ctx, &pkey)))
+ goto done;
+ len = i2d_PublicKey(pkey, NULL);
+ savelen = len;
+ if (!TEST_int_ge(len, 1)
+ || !TEST_int_lt(len, 1024))
+ goto done;
+ p = buf;
+ len = i2d_PublicKey(pkey, &p);
+ if (!TEST_int_ge(len, 1)
+ || !TEST_int_eq(len, savelen))
+ goto done;
+
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ /* Now try to decode the just-created DER. */
+ q = buf;
+ if (!TEST_ptr((pkey2 = EVP_PKEY_new()))
+ || !TEST_ptr((ec = EC_KEY_new_by_curve_name(nid)))
+ || !TEST_true(EVP_PKEY_assign_EC_KEY(pkey2, ec)))
+ goto done;
+ /* EC_KEY ownership transferred */
+ ec = NULL;
+ if (!TEST_ptr(d2i_PublicKey(EVP_PKEY_EC, &pkey2, &q, savelen)))
+ goto done;
+ /* The keys should match. */
+ if (!TEST_int_eq(EVP_PKEY_eq(pkey, pkey2), 1))
+ goto done;
+# endif
+
+ ret = 1;
+
+ done:
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ EVP_PKEY_free(pkey2);
+ EC_KEY_free(ec);
+# endif
+ return ret;
+}
+#endif
+
+static int test_EVP_rsa_pss_with_keygen_bits(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ EVP_MD *md;
+
+ md = EVP_MD_fetch(testctx, "sha256", testpropq);
+ ret = TEST_ptr(md)
+ && TEST_ptr((ctx = EVP_PKEY_CTX_new_from_name(testctx, "RSA-PSS", testpropq)))
+ && TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0)
+ && TEST_int_gt(EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 512), 0)
+ && TEST_int_gt(EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md), 0)
+ && TEST_true(EVP_PKEY_keygen(ctx, &pkey));
+
+ EVP_MD_free(md);
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
+}
+
+static int test_EVP_rsa_pss_set_saltlen(void)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *pkey_ctx = NULL;
+ EVP_MD *sha256 = NULL;
+ EVP_MD_CTX *sha256_ctx = NULL;
+ int saltlen = 9999; /* buggy EVP_PKEY_CTX_get_rsa_pss_saltlen() didn't update this */
+ const int test_value = 32;
+
+ ret = TEST_ptr(pkey = load_example_rsa_key())
+ && TEST_ptr(sha256 = EVP_MD_fetch(testctx, "sha256", NULL))
+ && TEST_ptr(sha256_ctx = EVP_MD_CTX_new())
+ && TEST_true(EVP_DigestSignInit(sha256_ctx, &pkey_ctx, sha256, NULL, pkey))
+ && TEST_true(EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, RSA_PKCS1_PSS_PADDING))
+ && TEST_int_gt(EVP_PKEY_CTX_set_rsa_pss_saltlen(pkey_ctx, test_value), 0)
+ && TEST_int_gt(EVP_PKEY_CTX_get_rsa_pss_saltlen(pkey_ctx, &saltlen), 0)
+ && TEST_int_eq(saltlen, test_value);
+
+ EVP_MD_CTX_free(sha256_ctx);
+ EVP_PKEY_free(pkey);
+ EVP_MD_free(sha256);
+
+ return ret;
+}
+
+static int success = 1;
+static void md_names(const char *name, void *vctx)
+{
+ OSSL_LIB_CTX *ctx = (OSSL_LIB_CTX *)vctx;
+ /* Force a namemap update */
+ EVP_CIPHER *aes128 = EVP_CIPHER_fetch(ctx, "AES-128-CBC", NULL);
+
+ if (!TEST_ptr(aes128))
+ success = 0;
+
+ EVP_CIPHER_free(aes128);
+}
+
+/*
+ * Test that changing the namemap in a user callback works in a names_do_all
+ * function.
+ */
+static int test_names_do_all(void)
+{
+ /* We use a custom libctx so that we know the state of the namemap */
+ OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new();
+ EVP_MD *sha256 = NULL;
+ int testresult = 0;
+
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ sha256 = EVP_MD_fetch(ctx, "SHA2-256", NULL);
+ if (!TEST_ptr(sha256))
+ goto err;
+
+ /*
+ * We loop through all the names for a given digest. This should still work
+ * even if the namemap changes part way through.
+ */
+ if (!TEST_true(EVP_MD_names_do_all(sha256, md_names, ctx)))
+ goto err;
+
+ if (!TEST_true(success))
+ goto err;
+
+ testresult = 1;
+ err:
+ EVP_MD_free(sha256);
+ OSSL_LIB_CTX_free(ctx);
+ return testresult;
+}
+
+typedef struct {
+ const char *cipher;
+ const unsigned char *key;
+ const unsigned char *iv;
+ const unsigned char *input;
+ const unsigned char *expected;
+ const unsigned char *tag;
+ size_t ivlen; /* 0 if we do not need to set a specific IV len */
+ size_t inlen;
+ size_t expectedlen;
+ size_t taglen;
+ int keyfirst;
+ int initenc;
+ int finalenc;
+} EVP_INIT_TEST_st;
+
+static const EVP_INIT_TEST_st evp_init_tests[] = {
+ {
+ "aes-128-cfb", kCFBDefaultKey, iCFBIV, cfbPlaintext,
+ cfbCiphertext, NULL, 0, sizeof(cfbPlaintext), sizeof(cfbCiphertext),
+ 0, 1, 0, 1
+ },
+ {
+ "aes-256-gcm", kGCMDefaultKey, iGCMDefaultIV, gcmDefaultPlaintext,
+ gcmDefaultCiphertext, gcmDefaultTag, sizeof(iGCMDefaultIV),
+ sizeof(gcmDefaultPlaintext), sizeof(gcmDefaultCiphertext),
+ sizeof(gcmDefaultTag), 1, 0, 1
+ },
+ {
+ "aes-128-cfb", kCFBDefaultKey, iCFBIV, cfbPlaintext,
+ cfbCiphertext, NULL, 0, sizeof(cfbPlaintext), sizeof(cfbCiphertext),
+ 0, 0, 0, 1
+ },
+ {
+ "aes-256-gcm", kGCMDefaultKey, iGCMDefaultIV, gcmDefaultPlaintext,
+ gcmDefaultCiphertext, gcmDefaultTag, sizeof(iGCMDefaultIV),
+ sizeof(gcmDefaultPlaintext), sizeof(gcmDefaultCiphertext),
+ sizeof(gcmDefaultTag), 0, 0, 1
+ },
+ {
+ "aes-128-cfb", kCFBDefaultKey, iCFBIV, cfbCiphertext,
+ cfbPlaintext, NULL, 0, sizeof(cfbCiphertext), sizeof(cfbPlaintext),
+ 0, 1, 1, 0
+ },
+ {
+ "aes-256-gcm", kGCMDefaultKey, iGCMDefaultIV, gcmDefaultCiphertext,
+ gcmDefaultPlaintext, gcmDefaultTag, sizeof(iGCMDefaultIV),
+ sizeof(gcmDefaultCiphertext), sizeof(gcmDefaultPlaintext),
+ sizeof(gcmDefaultTag), 1, 1, 0
+ },
+ {
+ "aes-128-cfb", kCFBDefaultKey, iCFBIV, cfbCiphertext,
+ cfbPlaintext, NULL, 0, sizeof(cfbCiphertext), sizeof(cfbPlaintext),
+ 0, 0, 1, 0
+ },
+ {
+ "aes-256-gcm", kGCMDefaultKey, iGCMDefaultIV, gcmDefaultCiphertext,
+ gcmDefaultPlaintext, gcmDefaultTag, sizeof(iGCMDefaultIV),
+ sizeof(gcmDefaultCiphertext), sizeof(gcmDefaultPlaintext),
+ sizeof(gcmDefaultTag), 0, 1, 0
+ }
+};
+
+/* use same key, iv and plaintext for cfb and ofb */
+static const EVP_INIT_TEST_st evp_reinit_tests[] = {
+ {
+ "aes-128-cfb", kCFBDefaultKey, iCFBIV, cfbPlaintext_partial,
+ cfbCiphertext_partial, NULL, 0, sizeof(cfbPlaintext_partial),
+ sizeof(cfbCiphertext_partial), 0, 0, 1, 0
+ },
+ {
+ "aes-128-cfb", kCFBDefaultKey, iCFBIV, cfbCiphertext_partial,
+ cfbPlaintext_partial, NULL, 0, sizeof(cfbCiphertext_partial),
+ sizeof(cfbPlaintext_partial), 0, 0, 0, 0
+ },
+ {
+ "aes-128-ofb", kCFBDefaultKey, iCFBIV, cfbPlaintext_partial,
+ ofbCiphertext_partial, NULL, 0, sizeof(cfbPlaintext_partial),
+ sizeof(ofbCiphertext_partial), 0, 0, 1, 0
+ },
+ {
+ "aes-128-ofb", kCFBDefaultKey, iCFBIV, ofbCiphertext_partial,
+ cfbPlaintext_partial, NULL, 0, sizeof(ofbCiphertext_partial),
+ sizeof(cfbPlaintext_partial), 0, 0, 0, 0
+ },
+};
+
+static int evp_init_seq_set_iv(EVP_CIPHER_CTX *ctx, const EVP_INIT_TEST_st *t)
+{
+ int res = 0;
+
+ if (t->ivlen != 0) {
+ if (!TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, t->ivlen, NULL), 0))
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherInit_ex(ctx, NULL, NULL, NULL, t->iv, -1)))
+ goto err;
+ res = 1;
+ err:
+ return res;
+}
+
+/*
+ * Test step-wise cipher initialization via EVP_CipherInit_ex where the
+ * arguments are given one at a time and a final adjustment to the enc
+ * parameter sets the correct operation.
+ */
+static int test_evp_init_seq(int idx)
+{
+ int outlen1, outlen2;
+ int testresult = 0;
+ unsigned char outbuf[1024];
+ unsigned char tag[16];
+ const EVP_INIT_TEST_st *t = &evp_init_tests[idx];
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_CIPHER *type = NULL;
+ size_t taglen = sizeof(tag);
+ char *errmsg = NULL;
+
+ ctx = EVP_CIPHER_CTX_new();
+ if (ctx == NULL) {
+ errmsg = "CTX_ALLOC";
+ goto err;
+ }
+ if (!TEST_ptr(type = EVP_CIPHER_fetch(testctx, t->cipher, testpropq))) {
+ errmsg = "CIPHER_FETCH";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherInit_ex(ctx, type, NULL, NULL, NULL, t->initenc))) {
+ errmsg = "EMPTY_ENC_INIT";
+ goto err;
+ }
+ if (!TEST_true(EVP_CIPHER_CTX_set_padding(ctx, 0))) {
+ errmsg = "PADDING";
+ goto err;
+ }
+ if (t->keyfirst && !TEST_true(EVP_CipherInit_ex(ctx, NULL, NULL, t->key, NULL, -1))) {
+ errmsg = "KEY_INIT (before iv)";
+ goto err;
+ }
+ if (!evp_init_seq_set_iv(ctx, t)) {
+ errmsg = "IV_INIT";
+ goto err;
+ }
+ if (t->keyfirst == 0 && !TEST_true(EVP_CipherInit_ex(ctx, NULL, NULL, t->key, NULL, -1))) {
+ errmsg = "KEY_INIT (after iv)";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherInit_ex(ctx, NULL, NULL, NULL, NULL, t->finalenc))) {
+ errmsg = "FINAL_ENC_INIT";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherUpdate(ctx, outbuf, &outlen1, t->input, t->inlen))) {
+ errmsg = "CIPHER_UPDATE";
+ goto err;
+ }
+ if (t->finalenc == 0 && t->tag != NULL) {
+ /* Set expected tag */
+ if (!TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG,
+ t->taglen, (void *)t->tag), 0)) {
+ errmsg = "SET_TAG";
+ goto err;
+ }
+ }
+ if (!TEST_true(EVP_CipherFinal_ex(ctx, outbuf + outlen1, &outlen2))) {
+ errmsg = "CIPHER_FINAL";
+ goto err;
+ }
+ if (!TEST_mem_eq(t->expected, t->expectedlen, outbuf, outlen1 + outlen2)) {
+ errmsg = "WRONG_RESULT";
+ goto err;
+ }
+ if (t->finalenc != 0 && t->tag != NULL) {
+ if (!TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag), 0)) {
+ errmsg = "GET_TAG";
+ goto err;
+ }
+ if (!TEST_mem_eq(t->tag, t->taglen, tag, taglen)) {
+ errmsg = "TAG_ERROR";
+ goto err;
+ }
+ }
+ testresult = 1;
+ err:
+ if (errmsg != NULL)
+ TEST_info("evp_init_test %d: %s", idx, errmsg);
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(type);
+ return testresult;
+}
+
+/*
+ * Test re-initialization of cipher context without changing key or iv.
+ * The result of both iteration should be the same.
+ */
+static int test_evp_reinit_seq(int idx)
+{
+ int outlen1, outlen2, outlen_final;
+ int testresult = 0;
+ unsigned char outbuf1[1024];
+ unsigned char outbuf2[1024];
+ const EVP_INIT_TEST_st *t = &evp_reinit_tests[idx];
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_CIPHER *type = NULL;
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_ptr(type = EVP_CIPHER_fetch(testctx, t->cipher, testpropq))
+ /* setup cipher context */
+ || !TEST_true(EVP_CipherInit_ex2(ctx, type, t->key, t->iv, t->initenc, NULL))
+ /* first iteration */
+ || !TEST_true(EVP_CipherUpdate(ctx, outbuf1, &outlen1, t->input, t->inlen))
+ || !TEST_true(EVP_CipherFinal_ex(ctx, outbuf1, &outlen_final))
+ /* check test results iteration 1 */
+ || !TEST_mem_eq(t->expected, t->expectedlen, outbuf1, outlen1 + outlen_final)
+ /* now re-init the context (same cipher, key and iv) */
+ || !TEST_true(EVP_CipherInit_ex2(ctx, NULL, NULL, NULL, -1, NULL))
+ /* second iteration */
+ || !TEST_true(EVP_CipherUpdate(ctx, outbuf2, &outlen2, t->input, t->inlen))
+ || !TEST_true(EVP_CipherFinal_ex(ctx, outbuf2, &outlen_final))
+ /* check test results iteration 2 */
+ || !TEST_mem_eq(t->expected, t->expectedlen, outbuf2, outlen2 + outlen_final))
+ goto err;
+ testresult = 1;
+ err:
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(type);
+ return testresult;
+}
+
+typedef struct {
+ const unsigned char *input;
+ const unsigned char *expected;
+ size_t inlen;
+ size_t expectedlen;
+ int enc;
+} EVP_RESET_TEST_st;
+
+static const EVP_RESET_TEST_st evp_reset_tests[] = {
+ {
+ cfbPlaintext, cfbCiphertext,
+ sizeof(cfbPlaintext), sizeof(cfbCiphertext), 1
+ },
+ {
+ cfbCiphertext, cfbPlaintext,
+ sizeof(cfbCiphertext), sizeof(cfbPlaintext), 0
+ }
+};
+
+/*
+ * Test a reset of a cipher via EVP_CipherInit_ex after the cipher has already
+ * been used.
+ */
+static int test_evp_reset(int idx)
+{
+ const EVP_RESET_TEST_st *t = &evp_reset_tests[idx];
+ int outlen1, outlen2;
+ int testresult = 0;
+ unsigned char outbuf[1024];
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_CIPHER *type = NULL;
+ char *errmsg = NULL;
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())) {
+ errmsg = "CTX_ALLOC";
+ goto err;
+ }
+ if (!TEST_ptr(type = EVP_CIPHER_fetch(testctx, "aes-128-cfb", testpropq))) {
+ errmsg = "CIPHER_FETCH";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherInit_ex(ctx, type, NULL, kCFBDefaultKey, iCFBIV, t->enc))) {
+ errmsg = "CIPHER_INIT";
+ goto err;
+ }
+ if (!TEST_true(EVP_CIPHER_CTX_set_padding(ctx, 0))) {
+ errmsg = "PADDING";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherUpdate(ctx, outbuf, &outlen1, t->input, t->inlen))) {
+ errmsg = "CIPHER_UPDATE";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherFinal_ex(ctx, outbuf + outlen1, &outlen2))) {
+ errmsg = "CIPHER_FINAL";
+ goto err;
+ }
+ if (!TEST_mem_eq(t->expected, t->expectedlen, outbuf, outlen1 + outlen2)) {
+ errmsg = "WRONG_RESULT";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherInit_ex(ctx, NULL, NULL, NULL, NULL, -1))) {
+ errmsg = "CIPHER_REINIT";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherUpdate(ctx, outbuf, &outlen1, t->input, t->inlen))) {
+ errmsg = "CIPHER_UPDATE (reinit)";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherFinal_ex(ctx, outbuf + outlen1, &outlen2))) {
+ errmsg = "CIPHER_FINAL (reinit)";
+ goto err;
+ }
+ if (!TEST_mem_eq(t->expected, t->expectedlen, outbuf, outlen1 + outlen2)) {
+ errmsg = "WRONG_RESULT (reinit)";
+ goto err;
+ }
+ testresult = 1;
+ err:
+ if (errmsg != NULL)
+ TEST_info("test_evp_reset %d: %s", idx, errmsg);
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(type);
+ return testresult;
+}
+
+typedef struct {
+ const char *cipher;
+ int enc;
+} EVP_UPDATED_IV_TEST_st;
+
+static const EVP_UPDATED_IV_TEST_st evp_updated_iv_tests[] = {
+ {
+ "aes-128-cfb", 1
+ },
+ {
+ "aes-128-cfb", 0
+ },
+ {
+ "aes-128-cfb1", 1
+ },
+ {
+ "aes-128-cfb1", 0
+ },
+ {
+ "aes-128-cfb8", 1
+ },
+ {
+ "aes-128-cfb8", 0
+ },
+ {
+ "aes-128-ofb", 1
+ },
+ {
+ "aes-128-ofb", 0
+ },
+ {
+ "aes-128-ctr", 1
+ },
+ {
+ "aes-128-ctr", 0
+ },
+ {
+ "aes-128-cbc", 1
+ },
+ {
+ "aes-128-cbc", 0
+ }
+};
+
+/*
+ * Test that the IV in the context is updated during a crypto operation for CFB
+ * and OFB.
+ */
+static int test_evp_updated_iv(int idx)
+{
+ const EVP_UPDATED_IV_TEST_st *t = &evp_updated_iv_tests[idx];
+ int outlen1, outlen2;
+ int testresult = 0;
+ unsigned char outbuf[1024];
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_CIPHER *type = NULL;
+ unsigned char updated_iv[EVP_MAX_IV_LENGTH];
+ int iv_len;
+ char *errmsg = NULL;
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())) {
+ errmsg = "CTX_ALLOC";
+ goto err;
+ }
+ if ((type = EVP_CIPHER_fetch(testctx, t->cipher, testpropq)) == NULL) {
+ TEST_info("cipher %s not supported, skipping", t->cipher);
+ goto ok;
+ }
+
+ if (!TEST_true(EVP_CipherInit_ex(ctx, type, NULL, kCFBDefaultKey, iCFBIV, t->enc))) {
+ errmsg = "CIPHER_INIT";
+ goto err;
+ }
+ if (!TEST_true(EVP_CIPHER_CTX_set_padding(ctx, 0))) {
+ errmsg = "PADDING";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherUpdate(ctx, outbuf, &outlen1, cfbPlaintext, sizeof(cfbPlaintext)))) {
+ errmsg = "CIPHER_UPDATE";
+ goto err;
+ }
+ if (!TEST_true(EVP_CIPHER_CTX_get_updated_iv(ctx, updated_iv, sizeof(updated_iv)))) {
+ errmsg = "CIPHER_CTX_GET_UPDATED_IV";
+ goto err;
+ }
+ if (!TEST_true(iv_len = EVP_CIPHER_CTX_get_iv_length(ctx))) {
+ errmsg = "CIPHER_CTX_GET_IV_LEN";
+ goto err;
+ }
+ if (!TEST_mem_ne(iCFBIV, sizeof(iCFBIV), updated_iv, iv_len)) {
+ errmsg = "IV_NOT_UPDATED";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherFinal_ex(ctx, outbuf + outlen1, &outlen2))) {
+ errmsg = "CIPHER_FINAL";
+ goto err;
+ }
+ ok:
+ testresult = 1;
+ err:
+ if (errmsg != NULL)
+ TEST_info("test_evp_updated_iv %d: %s", idx, errmsg);
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(type);
+ return testresult;
+}
+
+typedef struct {
+ const unsigned char *iv1;
+ const unsigned char *iv2;
+ const unsigned char *expected1;
+ const unsigned char *expected2;
+ const unsigned char *tag1;
+ const unsigned char *tag2;
+ size_t ivlen1;
+ size_t ivlen2;
+ size_t expectedlen1;
+ size_t expectedlen2;
+} TEST_GCM_IV_REINIT_st;
+
+static const TEST_GCM_IV_REINIT_st gcm_reinit_tests[] = {
+ {
+ iGCMResetIV1, iGCMResetIV2, gcmResetCiphertext1, gcmResetCiphertext2,
+ gcmResetTag1, gcmResetTag2, sizeof(iGCMResetIV1), sizeof(iGCMResetIV2),
+ sizeof(gcmResetCiphertext1), sizeof(gcmResetCiphertext2)
+ },
+ {
+ iGCMResetIV2, iGCMResetIV1, gcmResetCiphertext2, gcmResetCiphertext1,
+ gcmResetTag2, gcmResetTag1, sizeof(iGCMResetIV2), sizeof(iGCMResetIV1),
+ sizeof(gcmResetCiphertext2), sizeof(gcmResetCiphertext1)
+ }
+};
+
+static int test_gcm_reinit(int idx)
+{
+ int outlen1, outlen2, outlen3;
+ int testresult = 0;
+ unsigned char outbuf[1024];
+ unsigned char tag[16];
+ const TEST_GCM_IV_REINIT_st *t = &gcm_reinit_tests[idx];
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_CIPHER *type = NULL;
+ size_t taglen = sizeof(tag);
+ char *errmsg = NULL;
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())) {
+ errmsg = "CTX_ALLOC";
+ goto err;
+ }
+ if (!TEST_ptr(type = EVP_CIPHER_fetch(testctx, "aes-256-gcm", testpropq))) {
+ errmsg = "CIPHER_FETCH";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherInit_ex(ctx, type, NULL, NULL, NULL, 1))) {
+ errmsg = "ENC_INIT";
+ goto err;
+ }
+ if (!TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, t->ivlen1, NULL), 0)) {
+ errmsg = "SET_IVLEN1";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherInit_ex(ctx, NULL, NULL, kGCMResetKey, t->iv1, 1))) {
+ errmsg = "SET_IV1";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherUpdate(ctx, NULL, &outlen3, gcmAAD, sizeof(gcmAAD)))) {
+ errmsg = "AAD1";
+ goto err;
+ }
+ EVP_CIPHER_CTX_set_padding(ctx, 0);
+ if (!TEST_true(EVP_CipherUpdate(ctx, outbuf, &outlen1, gcmResetPlaintext,
+ sizeof(gcmResetPlaintext)))) {
+ errmsg = "CIPHER_UPDATE1";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherFinal_ex(ctx, outbuf + outlen1, &outlen2))) {
+ errmsg = "CIPHER_FINAL1";
+ goto err;
+ }
+ if (!TEST_mem_eq(t->expected1, t->expectedlen1, outbuf, outlen1 + outlen2)) {
+ errmsg = "WRONG_RESULT1";
+ goto err;
+ }
+ if (!TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag), 0)) {
+ errmsg = "GET_TAG1";
+ goto err;
+ }
+ if (!TEST_mem_eq(t->tag1, taglen, tag, taglen)) {
+ errmsg = "TAG_ERROR1";
+ goto err;
+ }
+ /* Now reinit */
+ if (!TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, t->ivlen2, NULL), 0)) {
+ errmsg = "SET_IVLEN2";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherInit_ex(ctx, NULL, NULL, NULL, t->iv2, -1))) {
+ errmsg = "SET_IV2";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherUpdate(ctx, NULL, &outlen3, gcmAAD, sizeof(gcmAAD)))) {
+ errmsg = "AAD2";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherUpdate(ctx, outbuf, &outlen1, gcmResetPlaintext,
+ sizeof(gcmResetPlaintext)))) {
+ errmsg = "CIPHER_UPDATE2";
+ goto err;
+ }
+ if (!TEST_true(EVP_CipherFinal_ex(ctx, outbuf + outlen1, &outlen2))) {
+ errmsg = "CIPHER_FINAL2";
+ goto err;
+ }
+ if (!TEST_mem_eq(t->expected2, t->expectedlen2, outbuf, outlen1 + outlen2)) {
+ errmsg = "WRONG_RESULT2";
+ goto err;
+ }
+ if (!TEST_int_gt(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag), 0)) {
+ errmsg = "GET_TAG2";
+ goto err;
+ }
+ if (!TEST_mem_eq(t->tag2, taglen, tag, taglen)) {
+ errmsg = "TAG_ERROR2";
+ goto err;
+ }
+ testresult = 1;
+ err:
+ if (errmsg != NULL)
+ TEST_info("evp_init_test %d: %s", idx, errmsg);
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(type);
+ return testresult;
+}
+
+static const char *ivlen_change_ciphers[] = {
+ "AES-256-GCM",
+#ifndef OPENSSL_NO_OCB
+ "AES-256-OCB",
+#endif
+ "AES-256-CCM"
+};
+
+/* Negative test for ivlen change after iv being set */
+static int test_ivlen_change(int idx)
+{
+ int outlen;
+ int res = 0;
+ unsigned char outbuf[1024];
+ static const unsigned char iv[] = {
+ 0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b, 0x98, 0x82,
+ 0x5a, 0x55, 0x91, 0x81, 0x42, 0xa8, 0x89, 0x34
+ };
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_CIPHER *ciph = NULL;
+ OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ size_t ivlen = 13; /* non-default IV length */
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new()))
+ goto err;
+
+ if (!TEST_ptr(ciph = EVP_CIPHER_fetch(testctx, ivlen_change_ciphers[idx],
+ testpropq)))
+ goto err;
+
+ if (!TEST_true(EVP_CipherInit_ex(ctx, ciph, NULL, kGCMDefaultKey, iv, 1)))
+ goto err;
+
+ if (!TEST_true(EVP_CipherUpdate(ctx, outbuf, &outlen, gcmDefaultPlaintext,
+ sizeof(gcmDefaultPlaintext))))
+ goto err;
+
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN,
+ &ivlen);
+ if (!TEST_true(EVP_CIPHER_CTX_set_params(ctx, params)))
+ goto err;
+
+ ERR_set_mark();
+ if (!TEST_false(EVP_CipherUpdate(ctx, outbuf, &outlen, gcmDefaultPlaintext,
+ sizeof(gcmDefaultPlaintext)))) {
+ ERR_clear_last_mark();
+ goto err;
+ }
+ ERR_pop_to_mark();
+
+ res = 1;
+ err:
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(ciph);
+ return res;
+}
+
+static const char *keylen_change_ciphers[] = {
+#ifndef OPENSSL_NO_BF
+ "BF-ECB",
+#endif
+#ifndef OPENSSL_NO_CAST
+ "CAST5-ECB",
+#endif
+#ifndef OPENSSL_NO_RC2
+ "RC2-ECB",
+#endif
+#ifndef OPENSSL_NO_RC4
+ "RC4",
+#endif
+#ifndef OPENSSL_NO_RC5
+ "RC5-ECB",
+#endif
+ NULL
+};
+
+/* Negative test for keylen change after key was set */
+static int test_keylen_change(int idx)
+{
+ int outlen;
+ int res = 0;
+ unsigned char outbuf[1024];
+ static const unsigned char key[] = {
+ 0x57, 0x71, 0x7d, 0xad, 0xdb, 0x9b, 0x98, 0x82,
+ 0x5a, 0x55, 0x91, 0x81, 0x42, 0xa8, 0x89, 0x34
+ };
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_CIPHER *ciph = NULL;
+ OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ size_t keylen = 12; /* non-default key length */
+
+ if (lgcyprov == NULL)
+ return TEST_skip("Test requires legacy provider to be loaded");
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new()))
+ goto err;
+
+ if (!TEST_ptr(ciph = EVP_CIPHER_fetch(testctx, keylen_change_ciphers[idx],
+ testpropq)))
+ goto err;
+
+ if (!TEST_true(EVP_CipherInit_ex(ctx, ciph, NULL, key, NULL, 1)))
+ goto err;
+
+ if (!TEST_true(EVP_CipherUpdate(ctx, outbuf, &outlen, gcmDefaultPlaintext,
+ sizeof(gcmDefaultPlaintext))))
+ goto err;
+
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_KEYLEN,
+ &keylen);
+ if (!TEST_true(EVP_CIPHER_CTX_set_params(ctx, params)))
+ goto err;
+
+ ERR_set_mark();
+ if (!TEST_false(EVP_CipherUpdate(ctx, outbuf, &outlen, gcmDefaultPlaintext,
+ sizeof(gcmDefaultPlaintext)))) {
+ ERR_clear_last_mark();
+ goto err;
+ }
+ ERR_pop_to_mark();
+
+ res = 1;
+ err:
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(ciph);
+ return res;
+}
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+static EVP_PKEY_METHOD *custom_pmeth = NULL;
+static const EVP_PKEY_METHOD *orig_pmeth = NULL;
+
+# define EVP_PKEY_CTRL_MY_COMMAND 9999
+
+static int custom_pmeth_init(EVP_PKEY_CTX *ctx)
+{
+ int (*pinit)(EVP_PKEY_CTX *ctx);
+
+ EVP_PKEY_meth_get_init(orig_pmeth, &pinit);
+ return pinit(ctx);
+}
+
+static void custom_pmeth_cleanup(EVP_PKEY_CTX *ctx)
+{
+ void (*pcleanup)(EVP_PKEY_CTX *ctx);
+
+ EVP_PKEY_meth_get_cleanup(orig_pmeth, &pcleanup);
+ pcleanup(ctx);
+}
+
+static int custom_pmeth_sign(EVP_PKEY_CTX *ctx, unsigned char *out,
+ size_t *outlen, const unsigned char *in,
+ size_t inlen)
+{
+ int (*psign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
+ const unsigned char *tbs, size_t tbslen);
+
+ EVP_PKEY_meth_get_sign(orig_pmeth, NULL, &psign);
+ return psign(ctx, out, outlen, in, inlen);
+}
+
+static int custom_pmeth_digestsign(EVP_MD_CTX *ctx, unsigned char *sig,
+ size_t *siglen, const unsigned char *tbs,
+ size_t tbslen)
+{
+ int (*pdigestsign)(EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen,
+ const unsigned char *tbs, size_t tbslen);
+
+ EVP_PKEY_meth_get_digestsign(orig_pmeth, &pdigestsign);
+ return pdigestsign(ctx, sig, siglen, tbs, tbslen);
+}
+
+static int custom_pmeth_derive(EVP_PKEY_CTX *ctx, unsigned char *key,
+ size_t *keylen)
+{
+ int (*pderive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
+
+ EVP_PKEY_meth_get_derive(orig_pmeth, NULL, &pderive);
+ return pderive(ctx, key, keylen);
+}
+
+static int custom_pmeth_copy(EVP_PKEY_CTX *dst, const EVP_PKEY_CTX *src)
+{
+ int (*pcopy)(EVP_PKEY_CTX *dst, const EVP_PKEY_CTX *src);
+
+ EVP_PKEY_meth_get_copy(orig_pmeth, &pcopy);
+ return pcopy(dst, src);
+}
+
+static int ctrl_called;
+
+static int custom_pmeth_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
+{
+ int (*pctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2);
+
+ EVP_PKEY_meth_get_ctrl(orig_pmeth, &pctrl, NULL);
+
+ if (type == EVP_PKEY_CTRL_MY_COMMAND) {
+ ctrl_called = 1;
+ return 1;
+ }
+
+ return pctrl(ctx, type, p1, p2);
+}
+
+static int test_custom_pmeth(int idx)
+{
+ EVP_PKEY_CTX *pctx = NULL;
+ EVP_MD_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ int id, orig_id, orig_flags;
+ int testresult = 0;
+ size_t reslen;
+ unsigned char *res = NULL;
+ unsigned char msg[] = { 'H', 'e', 'l', 'l', 'o' };
+ const EVP_MD *md = EVP_sha256();
+ int doderive = 0;
+
+ ctrl_called = 0;
+
+ /* We call deprecated APIs so this test doesn't support a custom libctx */
+ if (testctx != NULL)
+ return 1;
+
+ switch(idx) {
+ case 0:
+ case 6:
+ id = EVP_PKEY_RSA;
+ pkey = load_example_rsa_key();
+ break;
+ case 1:
+ case 7:
+# ifndef OPENSSL_NO_DSA
+ id = EVP_PKEY_DSA;
+ pkey = load_example_dsa_key();
+ break;
+# else
+ return 1;
+# endif
+ case 2:
+ case 8:
+# ifndef OPENSSL_NO_EC
+ id = EVP_PKEY_EC;
+ pkey = load_example_ec_key();
+ break;
+# else
+ return 1;
+# endif
+ case 3:
+ case 9:
+# ifndef OPENSSL_NO_EC
+ id = EVP_PKEY_ED25519;
+ md = NULL;
+ pkey = load_example_ed25519_key();
+ break;
+# else
+ return 1;
+# endif
+ case 4:
+ case 10:
+# ifndef OPENSSL_NO_DH
+ id = EVP_PKEY_DH;
+ doderive = 1;
+ pkey = load_example_dh_key();
+ break;
+# else
+ return 1;
+# endif
+ case 5:
+ case 11:
+# ifndef OPENSSL_NO_EC
+ id = EVP_PKEY_X25519;
+ doderive = 1;
+ pkey = load_example_x25519_key();
+ break;
+# else
+ return 1;
+# endif
+ default:
+ TEST_error("Should not happen");
+ goto err;
+ }
+
+ if (!TEST_ptr(pkey))
+ goto err;
+
+ if (idx < 6) {
+ if (!TEST_true(evp_pkey_is_provided(pkey)))
+ goto err;
+ } else {
+ EVP_PKEY *tmp = pkey;
+
+ /* Convert to a legacy key */
+ pkey = EVP_PKEY_new();
+ if (!TEST_ptr(pkey)) {
+ pkey = tmp;
+ goto err;
+ }
+ if (!TEST_true(evp_pkey_copy_downgraded(&pkey, tmp))) {
+ EVP_PKEY_free(tmp);
+ goto err;
+ }
+ EVP_PKEY_free(tmp);
+ if (!TEST_true(evp_pkey_is_legacy(pkey)))
+ goto err;
+ }
+
+ if (!TEST_ptr(orig_pmeth = EVP_PKEY_meth_find(id))
+ || !TEST_ptr(pkey))
+ goto err;
+
+ EVP_PKEY_meth_get0_info(&orig_id, &orig_flags, orig_pmeth);
+ if (!TEST_int_eq(orig_id, id)
+ || !TEST_ptr(custom_pmeth = EVP_PKEY_meth_new(id, orig_flags)))
+ goto err;
+
+ if (id == EVP_PKEY_ED25519) {
+ EVP_PKEY_meth_set_digestsign(custom_pmeth, custom_pmeth_digestsign);
+ } if (id == EVP_PKEY_DH || id == EVP_PKEY_X25519) {
+ EVP_PKEY_meth_set_derive(custom_pmeth, NULL, custom_pmeth_derive);
+ } else {
+ EVP_PKEY_meth_set_sign(custom_pmeth, NULL, custom_pmeth_sign);
+ }
+ if (id != EVP_PKEY_ED25519 && id != EVP_PKEY_X25519) {
+ EVP_PKEY_meth_set_init(custom_pmeth, custom_pmeth_init);
+ EVP_PKEY_meth_set_cleanup(custom_pmeth, custom_pmeth_cleanup);
+ EVP_PKEY_meth_set_copy(custom_pmeth, custom_pmeth_copy);
+ }
+ EVP_PKEY_meth_set_ctrl(custom_pmeth, custom_pmeth_ctrl, NULL);
+ if (!TEST_true(EVP_PKEY_meth_add0(custom_pmeth)))
+ goto err;
+
+ if (doderive) {
+ pctx = EVP_PKEY_CTX_new(pkey, NULL);
+ if (!TEST_ptr(pctx)
+ || !TEST_int_eq(EVP_PKEY_derive_init(pctx), 1)
+ || !TEST_int_ge(EVP_PKEY_CTX_ctrl(pctx, -1, -1,
+ EVP_PKEY_CTRL_MY_COMMAND, 0, NULL),
+ 1)
+ || !TEST_int_eq(ctrl_called, 1)
+ || !TEST_int_ge(EVP_PKEY_derive_set_peer(pctx, pkey), 1)
+ || !TEST_int_ge(EVP_PKEY_derive(pctx, NULL, &reslen), 1)
+ || !TEST_ptr(res = OPENSSL_malloc(reslen))
+ || !TEST_int_ge(EVP_PKEY_derive(pctx, res, &reslen), 1))
+ goto err;
+ } else {
+ ctx = EVP_MD_CTX_new();
+ reslen = EVP_PKEY_size(pkey);
+ res = OPENSSL_malloc(reslen);
+ if (!TEST_ptr(ctx)
+ || !TEST_ptr(res)
+ || !TEST_true(EVP_DigestSignInit(ctx, &pctx, md, NULL, pkey))
+ || !TEST_int_ge(EVP_PKEY_CTX_ctrl(pctx, -1, -1,
+ EVP_PKEY_CTRL_MY_COMMAND, 0, NULL),
+ 1)
+ || !TEST_int_eq(ctrl_called, 1))
+ goto err;
+
+ if (id == EVP_PKEY_ED25519) {
+ if (!TEST_true(EVP_DigestSign(ctx, res, &reslen, msg, sizeof(msg))))
+ goto err;
+ } else {
+ if (!TEST_true(EVP_DigestUpdate(ctx, msg, sizeof(msg)))
+ || !TEST_true(EVP_DigestSignFinal(ctx, res, &reslen)))
+ goto err;
+ }
+ }
+
+ testresult = 1;
+ err:
+ OPENSSL_free(res);
+ EVP_MD_CTX_free(ctx);
+ if (doderive)
+ EVP_PKEY_CTX_free(pctx);
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_meth_remove(custom_pmeth);
+ EVP_PKEY_meth_free(custom_pmeth);
+ custom_pmeth = NULL;
+ return testresult;
+}
+
+static int test_evp_md_cipher_meth(void)
+{
+ EVP_MD *md = EVP_MD_meth_dup(EVP_sha256());
+ EVP_CIPHER *ciph = EVP_CIPHER_meth_dup(EVP_aes_128_cbc());
+ int testresult = 0;
+
+ if (!TEST_ptr(md) || !TEST_ptr(ciph))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ EVP_MD_meth_free(md);
+ EVP_CIPHER_meth_free(ciph);
+
+ return testresult;
+}
+
+typedef struct {
+ int data;
+} custom_dgst_ctx;
+
+static int custom_md_init_called = 0;
+static int custom_md_cleanup_called = 0;
+
+static int custom_md_init(EVP_MD_CTX *ctx)
+{
+ custom_dgst_ctx *p = EVP_MD_CTX_md_data(ctx);
+
+ if (p == NULL)
+ return 0;
+
+ custom_md_init_called++;
+ return 1;
+}
+
+static int custom_md_cleanup(EVP_MD_CTX *ctx)
+{
+ custom_dgst_ctx *p = EVP_MD_CTX_md_data(ctx);
+
+ if (p == NULL)
+ /* Nothing to do */
+ return 1;
+
+ custom_md_cleanup_called++;
+ return 1;
+}
+
+static int test_custom_md_meth(void)
+{
+ EVP_MD_CTX *mdctx = NULL;
+ EVP_MD *tmp = NULL;
+ char mess[] = "Test Message\n";
+ unsigned char md_value[EVP_MAX_MD_SIZE];
+ unsigned int md_len;
+ int testresult = 0;
+ int nid;
+
+ /*
+ * We are testing deprecated functions. We don't support a non-default
+ * library context in this test.
+ */
+ if (testctx != NULL)
+ return TEST_skip("Non-default libctx");
+
+ custom_md_init_called = custom_md_cleanup_called = 0;
+
+ nid = OBJ_create("1.3.6.1.4.1.16604.998866.1", "custom-md", "custom-md");
+ if (!TEST_int_ne(nid, NID_undef))
+ goto err;
+ tmp = EVP_MD_meth_new(nid, NID_undef);
+ if (!TEST_ptr(tmp))
+ goto err;
+
+ if (!TEST_true(EVP_MD_meth_set_init(tmp, custom_md_init))
+ || !TEST_true(EVP_MD_meth_set_cleanup(tmp, custom_md_cleanup))
+ || !TEST_true(EVP_MD_meth_set_app_datasize(tmp,
+ sizeof(custom_dgst_ctx))))
+ goto err;
+
+ mdctx = EVP_MD_CTX_new();
+ if (!TEST_ptr(mdctx)
+ /*
+ * Initing our custom md and then initing another md should
+ * result in the init and cleanup functions of the custom md
+ * being called.
+ */
+ || !TEST_true(EVP_DigestInit_ex(mdctx, tmp, NULL))
+ || !TEST_true(EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL))
+ || !TEST_true(EVP_DigestUpdate(mdctx, mess, strlen(mess)))
+ || !TEST_true(EVP_DigestFinal_ex(mdctx, md_value, &md_len))
+ || !TEST_int_eq(custom_md_init_called, 1)
+ || !TEST_int_eq(custom_md_cleanup_called, 1))
+ goto err;
+
+ testresult = 1;
+ err:
+ EVP_MD_CTX_free(mdctx);
+ EVP_MD_meth_free(tmp);
+ return testresult;
+}
+
+typedef struct {
+ int data;
+} custom_ciph_ctx;
+
+static int custom_ciph_init_called = 0;
+static int custom_ciph_cleanup_called = 0;
+
+static int custom_ciph_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+ const unsigned char *iv, int enc)
+{
+ custom_ciph_ctx *p = EVP_CIPHER_CTX_get_cipher_data(ctx);
+
+ if (p == NULL)
+ return 0;
+
+ custom_ciph_init_called++;
+ return 1;
+}
+
+static int custom_ciph_cleanup(EVP_CIPHER_CTX *ctx)
+{
+ custom_ciph_ctx *p = EVP_CIPHER_CTX_get_cipher_data(ctx);
+
+ if (p == NULL)
+ /* Nothing to do */
+ return 1;
+
+ custom_ciph_cleanup_called++;
+ return 1;
+}
+
+static int test_custom_ciph_meth(void)
+{
+ EVP_CIPHER_CTX *ciphctx = NULL;
+ EVP_CIPHER *tmp = NULL;
+ int testresult = 0;
+ int nid;
+
+ /*
+ * We are testing deprecated functions. We don't support a non-default
+ * library context in this test.
+ */
+ if (testctx != NULL)
+ return TEST_skip("Non-default libctx");
+
+ custom_ciph_init_called = custom_ciph_cleanup_called = 0;
+
+ nid = OBJ_create("1.3.6.1.4.1.16604.998866.2", "custom-ciph", "custom-ciph");
+ if (!TEST_int_ne(nid, NID_undef))
+ goto err;
+ tmp = EVP_CIPHER_meth_new(nid, 16, 16);
+ if (!TEST_ptr(tmp))
+ goto err;
+
+ if (!TEST_true(EVP_CIPHER_meth_set_init(tmp, custom_ciph_init))
+ || !TEST_true(EVP_CIPHER_meth_set_flags(tmp, EVP_CIPH_ALWAYS_CALL_INIT))
+ || !TEST_true(EVP_CIPHER_meth_set_cleanup(tmp, custom_ciph_cleanup))
+ || !TEST_true(EVP_CIPHER_meth_set_impl_ctx_size(tmp,
+ sizeof(custom_ciph_ctx))))
+ goto err;
+
+ ciphctx = EVP_CIPHER_CTX_new();
+ if (!TEST_ptr(ciphctx)
+ /*
+ * Initing our custom cipher and then initing another cipher
+ * should result in the init and cleanup functions of the custom
+ * cipher being called.
+ */
+ || !TEST_true(EVP_CipherInit_ex(ciphctx, tmp, NULL, NULL, NULL, 1))
+ || !TEST_true(EVP_CipherInit_ex(ciphctx, EVP_aes_128_cbc(), NULL,
+ NULL, NULL, 1))
+ || !TEST_int_eq(custom_ciph_init_called, 1)
+ || !TEST_int_eq(custom_ciph_cleanup_called, 1))
+ goto err;
+
+ testresult = 1;
+ err:
+ EVP_CIPHER_CTX_free(ciphctx);
+ EVP_CIPHER_meth_free(tmp);
+ return testresult;
+}
+
+# ifndef OPENSSL_NO_DYNAMIC_ENGINE
+/* Test we can create a signature keys with an associated ENGINE */
+static int test_signatures_with_engine(int tst)
+{
+ ENGINE *e;
+ const char *engine_id = "dasync";
+ EVP_PKEY *pkey = NULL;
+ const unsigned char badcmackey[] = { 0x00, 0x01 };
+ const unsigned char cmackey[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+ 0x0c, 0x0d, 0x0e, 0x0f
+ };
+ const unsigned char ed25519key[] = {
+ 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
+ };
+ const unsigned char msg[] = { 0x00, 0x01, 0x02, 0x03 };
+ int testresult = 0;
+ EVP_MD_CTX *ctx = NULL;
+ unsigned char *mac = NULL;
+ size_t maclen = 0;
+ int ret;
+
+# ifdef OPENSSL_NO_CMAC
+ /* Skip CMAC tests in a no-cmac build */
+ if (tst <= 1)
+ return 1;
+# endif
+
+ if (!TEST_ptr(e = ENGINE_by_id(engine_id)))
+ return 0;
+
+ if (!TEST_true(ENGINE_init(e))) {
+ ENGINE_free(e);
+ return 0;
+ }
+
+ switch (tst) {
+ case 0:
+ pkey = EVP_PKEY_new_CMAC_key(e, cmackey, sizeof(cmackey),
+ EVP_aes_128_cbc());
+ break;
+ case 1:
+ pkey = EVP_PKEY_new_CMAC_key(e, badcmackey, sizeof(badcmackey),
+ EVP_aes_128_cbc());
+ break;
+ case 2:
+ pkey = EVP_PKEY_new_raw_private_key(EVP_PKEY_ED25519, e, ed25519key,
+ sizeof(ed25519key));
+ break;
+ default:
+ TEST_error("Invalid test case");
+ goto err;
+ }
+ if (!TEST_ptr(pkey))
+ goto err;
+
+ if (!TEST_ptr(ctx = EVP_MD_CTX_new()))
+ goto err;
+
+ ret = EVP_DigestSignInit(ctx, NULL, tst == 2 ? NULL : EVP_sha256(), NULL,
+ pkey);
+ if (tst == 0) {
+ if (!TEST_true(ret))
+ goto err;
+
+ if (!TEST_true(EVP_DigestSignUpdate(ctx, msg, sizeof(msg)))
+ || !TEST_true(EVP_DigestSignFinal(ctx, NULL, &maclen)))
+ goto err;
+
+ if (!TEST_ptr(mac = OPENSSL_malloc(maclen)))
+ goto err;
+
+ if (!TEST_true(EVP_DigestSignFinal(ctx, mac, &maclen)))
+ goto err;
+ } else {
+ /* We used a bad key. We expect a failure here */
+ if (!TEST_false(ret))
+ goto err;
+ }
+
+ testresult = 1;
+ err:
+ EVP_MD_CTX_free(ctx);
+ OPENSSL_free(mac);
+ EVP_PKEY_free(pkey);
+ ENGINE_finish(e);
+ ENGINE_free(e);
+
+ return testresult;
+}
+
+static int test_cipher_with_engine(void)
+{
+ ENGINE *e;
+ const char *engine_id = "dasync";
+ const unsigned char keyiv[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+ 0x0c, 0x0d, 0x0e, 0x0f
+ };
+ const unsigned char msg[] = { 0x00, 0x01, 0x02, 0x03 };
+ int testresult = 0;
+ EVP_CIPHER_CTX *ctx = NULL, *ctx2 = NULL;
+ unsigned char buf[AES_BLOCK_SIZE];
+ int len = 0;
+
+ if (!TEST_ptr(e = ENGINE_by_id(engine_id)))
+ return 0;
+
+ if (!TEST_true(ENGINE_init(e))) {
+ ENGINE_free(e);
+ return 0;
+ }
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_ptr(ctx2 = EVP_CIPHER_CTX_new()))
+ goto err;
+
+ if (!TEST_true(EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), e, keyiv, keyiv)))
+ goto err;
+
+ /* Copy the ctx, and complete the operation with the new ctx */
+ if (!TEST_true(EVP_CIPHER_CTX_copy(ctx2, ctx)))
+ goto err;
+
+ if (!TEST_true(EVP_EncryptUpdate(ctx2, buf, &len, msg, sizeof(msg)))
+ || !TEST_true(EVP_EncryptFinal_ex(ctx2, buf + len, &len)))
+ goto err;
+
+ testresult = 1;
+ err:
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_CTX_free(ctx2);
+ ENGINE_finish(e);
+ ENGINE_free(e);
+
+ return testresult;
+}
+# endif /* OPENSSL_NO_DYNAMIC_ENGINE */
+#endif /* OPENSSL_NO_DEPRECATED_3_0 */
+
+static int ecxnids[] = {
+ NID_X25519,
+ NID_X448,
+ NID_ED25519,
+ NID_ED448
+};
+
+/* Test that creating ECX keys with a short private key fails as expected */
+static int test_ecx_short_keys(int tst)
+{
+ unsigned char ecxkeydata = 1;
+ EVP_PKEY *pkey;
+
+
+ pkey = EVP_PKEY_new_raw_private_key_ex(testctx, OBJ_nid2sn(ecxnids[tst]),
+ NULL, &ecxkeydata, 1);
+ if (!TEST_ptr_null(pkey)) {
+ EVP_PKEY_free(pkey);
+ return 0;
+ }
+
+ return 1;
+}
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_CONTEXT,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "context", OPT_CONTEXT, '-', "Explicitly use a non-default library context" },
+ { NULL }
+ };
+ return options;
+}
+
+#ifndef OPENSSL_NO_EC
+/* Test that trying to sign with a public key errors out gracefully */
+static int test_ecx_not_private_key(int tst)
+{
+ EVP_PKEY *pkey = NULL;
+
+ const unsigned char msg[] = { 0x00, 0x01, 0x02, 0x03 };
+ int testresult = 0;
+ EVP_MD_CTX *ctx = NULL;
+ unsigned char *mac = NULL;
+ size_t maclen = 0;
+ unsigned char *pubkey;
+ size_t pubkeylen;
+
+ switch (keys[tst].type) {
+ case NID_X25519:
+ case NID_X448:
+ return TEST_skip("signing not supported for X25519/X448");
+ }
+
+ /* Check if this algorithm supports public keys */
+ if (keys[tst].pub == NULL)
+ return TEST_skip("no public key present");
+
+ pubkey = (unsigned char *)keys[tst].pub;
+ pubkeylen = strlen(keys[tst].pub);
+
+ pkey = EVP_PKEY_new_raw_public_key_ex(testctx, OBJ_nid2sn(keys[tst].type),
+ NULL, pubkey, pubkeylen);
+ if (!TEST_ptr(pkey))
+ goto err;
+
+ if (!TEST_ptr(ctx = EVP_MD_CTX_new()))
+ goto err;
+
+ if (EVP_DigestSignInit(ctx, NULL, NULL, NULL, pkey) != 1)
+ goto check_err;
+
+ if (EVP_DigestSign(ctx, NULL, &maclen, msg, sizeof(msg)) != 1)
+ goto check_err;
+
+ if (!TEST_ptr(mac = OPENSSL_malloc(maclen)))
+ goto err;
+
+ if (!TEST_int_eq(EVP_DigestSign(ctx, mac, &maclen, msg, sizeof(msg)), 0))
+ goto err;
+
+ check_err:
+ /*
+ * Currently only EVP_DigestSign will throw PROV_R_NOT_A_PRIVATE_KEY,
+ * but we relax the check to allow error also thrown by
+ * EVP_DigestSignInit and EVP_DigestSign.
+ */
+ if (ERR_GET_REASON(ERR_peek_error()) == PROV_R_NOT_A_PRIVATE_KEY) {
+ testresult = 1;
+ ERR_clear_error();
+ }
+
+ err:
+ EVP_MD_CTX_free(ctx);
+ OPENSSL_free(mac);
+ EVP_PKEY_free(pkey);
+
+ return testresult;
+}
+#endif /* OPENSSL_NO_EC */
+
+static int aes_gcm_encrypt(const unsigned char *gcm_key, size_t gcm_key_s,
+ const unsigned char *gcm_iv, size_t gcm_ivlen,
+ const unsigned char *gcm_pt, size_t gcm_pt_s,
+ const unsigned char *gcm_aad, size_t gcm_aad_s,
+ const unsigned char *gcm_ct, size_t gcm_ct_s,
+ const unsigned char *gcm_tag, size_t gcm_tag_s)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, tmplen;
+ unsigned char outbuf[1024];
+ unsigned char outtag[16];
+ OSSL_PARAM params[2] = {
+ OSSL_PARAM_END, OSSL_PARAM_END
+ };
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_ptr(cipher = EVP_CIPHER_fetch(testctx, "AES-256-GCM", "")))
+ goto err;
+
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN,
+ &gcm_ivlen);
+
+ if (!TEST_true(EVP_EncryptInit_ex2(ctx, cipher, gcm_key, gcm_iv, params))
+ || (gcm_aad != NULL
+ && !TEST_true(EVP_EncryptUpdate(ctx, NULL, &outlen,
+ gcm_aad, gcm_aad_s)))
+ || !TEST_true(EVP_EncryptUpdate(ctx, outbuf, &outlen,
+ gcm_pt, gcm_pt_s))
+ || !TEST_true(EVP_EncryptFinal_ex(ctx, outbuf, &tmplen)))
+ goto err;
+
+ params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
+ outtag, sizeof(outtag));
+
+ if (!TEST_true(EVP_CIPHER_CTX_get_params(ctx, params))
+ || !TEST_mem_eq(outbuf, outlen, gcm_ct, gcm_ct_s)
+ || !TEST_mem_eq(outtag, gcm_tag_s, gcm_tag, gcm_tag_s))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+static int aes_gcm_decrypt(const unsigned char *gcm_key, size_t gcm_key_s,
+ const unsigned char *gcm_iv, size_t gcm_ivlen,
+ const unsigned char *gcm_pt, size_t gcm_pt_s,
+ const unsigned char *gcm_aad, size_t gcm_aad_s,
+ const unsigned char *gcm_ct, size_t gcm_ct_s,
+ const unsigned char *gcm_tag, size_t gcm_tag_s)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen;
+ unsigned char outbuf[1024];
+ OSSL_PARAM params[2] = {
+ OSSL_PARAM_END, OSSL_PARAM_END
+ };
+
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ if ((cipher = EVP_CIPHER_fetch(testctx, "AES-256-GCM", "")) == NULL)
+ goto err;
+
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_AEAD_IVLEN,
+ &gcm_ivlen);
+
+ if (!TEST_true(EVP_DecryptInit_ex2(ctx, cipher, gcm_key, gcm_iv, params))
+ || (gcm_aad != NULL
+ && !TEST_true(EVP_DecryptUpdate(ctx, NULL, &outlen,
+ gcm_aad, gcm_aad_s)))
+ || !TEST_true(EVP_DecryptUpdate(ctx, outbuf, &outlen,
+ gcm_ct, gcm_ct_s))
+ || !TEST_mem_eq(outbuf, outlen, gcm_pt, gcm_pt_s))
+ goto err;
+
+ params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
+ (void*)gcm_tag, gcm_tag_s);
+
+ if (!TEST_true(EVP_CIPHER_CTX_set_params(ctx, params))
+ ||!TEST_true(EVP_DecryptFinal_ex(ctx, outbuf, &outlen)))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+static int test_aes_gcm_ivlen_change_cve_2023_5363(void)
+{
+ /* AES-GCM test data obtained from NIST public test vectors */
+ static const unsigned char gcm_key[] = {
+ 0xd0, 0xc2, 0x67, 0xc1, 0x9f, 0x30, 0xd8, 0x0b, 0x89, 0x14, 0xbb, 0xbf,
+ 0xb7, 0x2f, 0x73, 0xb8, 0xd3, 0xcd, 0x5f, 0x6a, 0x78, 0x70, 0x15, 0x84,
+ 0x8a, 0x7b, 0x30, 0xe3, 0x8f, 0x16, 0xf1, 0x8b,
+ };
+ static const unsigned char gcm_iv[] = {
+ 0xb6, 0xdc, 0xda, 0x95, 0xac, 0x99, 0x77, 0x76, 0x25, 0xae, 0x87, 0xf8,
+ 0xa3, 0xa9, 0xdd, 0x64, 0xd7, 0x9b, 0xbd, 0x5f, 0x4a, 0x0e, 0x54, 0xca,
+ 0x1a, 0x9f, 0xa2, 0xe3, 0xf4, 0x5f, 0x5f, 0xc2, 0xce, 0xa7, 0xb6, 0x14,
+ 0x12, 0x6f, 0xf0, 0xaf, 0xfd, 0x3e, 0x17, 0x35, 0x6e, 0xa0, 0x16, 0x09,
+ 0xdd, 0xa1, 0x3f, 0xd8, 0xdd, 0xf3, 0xdf, 0x4f, 0xcb, 0x18, 0x49, 0xb8,
+ 0xb3, 0x69, 0x2c, 0x5d, 0x4f, 0xad, 0x30, 0x91, 0x08, 0xbc, 0xbe, 0x24,
+ 0x01, 0x0f, 0xbe, 0x9c, 0xfb, 0x4f, 0x5d, 0x19, 0x7f, 0x4c, 0x53, 0xb0,
+ 0x95, 0x90, 0xac, 0x7b, 0x1f, 0x7b, 0xa0, 0x99, 0xe1, 0xf3, 0x48, 0x54,
+ 0xd0, 0xfc, 0xa9, 0xcc, 0x91, 0xf8, 0x1f, 0x9b, 0x6c, 0x9a, 0xe0, 0xdc,
+ 0x63, 0xea, 0x7d, 0x2a, 0x4a, 0x7d, 0xa5, 0xed, 0x68, 0x57, 0x27, 0x6b,
+ 0x68, 0xe0, 0xf2, 0xb8, 0x51, 0x50, 0x8d, 0x3d,
+ };
+ static const unsigned char gcm_pt[] = {
+ 0xb8, 0xb6, 0x88, 0x36, 0x44, 0xe2, 0x34, 0xdf, 0x24, 0x32, 0x91, 0x07,
+ 0x4f, 0xe3, 0x6f, 0x81,
+ };
+ static const unsigned char gcm_ct[] = {
+ 0xff, 0x4f, 0xb3, 0xf3, 0xf9, 0xa2, 0x51, 0xd4, 0x82, 0xc2, 0xbe, 0xf3,
+ 0xe2, 0xd0, 0xec, 0xed,
+ };
+ static const unsigned char gcm_tag[] = {
+ 0xbd, 0x06, 0x38, 0x09, 0xf7, 0xe1, 0xc4, 0x72, 0x0e, 0xf2, 0xea, 0x63,
+ 0xdb, 0x99, 0x6c, 0x21,
+ };
+
+ return aes_gcm_encrypt(gcm_key, sizeof(gcm_key), gcm_iv, sizeof(gcm_iv),
+ gcm_pt, sizeof(gcm_pt), NULL, 0,
+ gcm_ct, sizeof(gcm_ct), gcm_tag, sizeof(gcm_tag))
+ && aes_gcm_decrypt(gcm_key, sizeof(gcm_key), gcm_iv, sizeof(gcm_iv),
+ gcm_pt, sizeof(gcm_pt), NULL, 0,
+ gcm_ct, sizeof(gcm_ct), gcm_tag, sizeof(gcm_tag));
+}
+
+#ifndef OPENSSL_NO_RC4
+static int rc4_encrypt(const unsigned char *rc4_key, size_t rc4_key_s,
+ const unsigned char *rc4_pt, size_t rc4_pt_s,
+ const unsigned char *rc4_ct, size_t rc4_ct_s)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen, tmplen;
+ unsigned char outbuf[1024];
+ OSSL_PARAM params[2] = {
+ OSSL_PARAM_END, OSSL_PARAM_END
+ };
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_ptr(cipher = EVP_CIPHER_fetch(testctx, "RC4", "")))
+ goto err;
+
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_KEYLEN,
+ &rc4_key_s);
+
+ if (!TEST_true(EVP_EncryptInit_ex2(ctx, cipher, rc4_key, NULL, params))
+ || !TEST_true(EVP_EncryptUpdate(ctx, outbuf, &outlen,
+ rc4_pt, rc4_pt_s))
+ || !TEST_true(EVP_EncryptFinal_ex(ctx, outbuf, &tmplen)))
+ goto err;
+
+ if (!TEST_mem_eq(outbuf, outlen, rc4_ct, rc4_ct_s))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+static int rc4_decrypt(const unsigned char *rc4_key, size_t rc4_key_s,
+ const unsigned char *rc4_pt, size_t rc4_pt_s,
+ const unsigned char *rc4_ct, size_t rc4_ct_s)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER *cipher = NULL;
+ int outlen;
+ unsigned char outbuf[1024];
+ OSSL_PARAM params[2] = {
+ OSSL_PARAM_END, OSSL_PARAM_END
+ };
+
+ if ((ctx = EVP_CIPHER_CTX_new()) == NULL)
+ goto err;
+
+ if ((cipher = EVP_CIPHER_fetch(testctx, "RC4", "")) == NULL)
+ goto err;
+
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_KEYLEN,
+ &rc4_key_s);
+
+ if (!TEST_true(EVP_DecryptInit_ex2(ctx, cipher, rc4_key, NULL, params))
+ || !TEST_true(EVP_DecryptUpdate(ctx, outbuf, &outlen,
+ rc4_ct, rc4_ct_s))
+ || !TEST_mem_eq(outbuf, outlen, rc4_pt, rc4_pt_s))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+
+ return ret;
+}
+
+static int test_aes_rc4_keylen_change_cve_2023_5363(void)
+{
+ /* RC4 test data obtained from RFC 6229 */
+ static const struct {
+ unsigned char key[5];
+ unsigned char padding[11];
+ } rc4_key = {
+ { /* Five bytes of key material */
+ 0x83, 0x32, 0x22, 0x77, 0x2a,
+ },
+ { /* Random padding to 16 bytes */
+ 0x80, 0xad, 0x97, 0xbd, 0xc9, 0x73, 0xdf, 0x8a, 0xaa, 0x32, 0x91
+ }
+ };
+ static const unsigned char rc4_pt[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ static const unsigned char rc4_ct[] = {
+ 0x80, 0xad, 0x97, 0xbd, 0xc9, 0x73, 0xdf, 0x8a,
+ 0x2e, 0x87, 0x9e, 0x92, 0xa4, 0x97, 0xef, 0xda
+ };
+
+ if (lgcyprov == NULL)
+ return TEST_skip("Test requires legacy provider to be loaded");
+
+ return rc4_encrypt(rc4_key.key, sizeof(rc4_key.key),
+ rc4_pt, sizeof(rc4_pt), rc4_ct, sizeof(rc4_ct))
+ && rc4_decrypt(rc4_key.key, sizeof(rc4_key.key),
+ rc4_pt, sizeof(rc4_pt), rc4_ct, sizeof(rc4_ct));
+}
+#endif
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_CONTEXT:
+ /* Set up an alternate library context */
+ testctx = OSSL_LIB_CTX_new();
+ if (!TEST_ptr(testctx))
+ return 0;
+#ifdef STATIC_LEGACY
+ /*
+ * This test is always statically linked against libcrypto. We must not
+ * attempt to load legacy.so that might be dynamically linked against
+ * libcrypto. Instead we use a built-in version of the legacy provider.
+ */
+ if (!OSSL_PROVIDER_add_builtin(testctx, "legacy", ossl_legacy_provider_init))
+ return 0;
+#endif
+ /* Swap the libctx to test non-default context only */
+ nullprov = OSSL_PROVIDER_load(NULL, "null");
+ deflprov = OSSL_PROVIDER_load(testctx, "default");
+ lgcyprov = OSSL_PROVIDER_load(testctx, "legacy");
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ ADD_TEST(test_EVP_set_default_properties);
+ ADD_ALL_TESTS(test_EVP_DigestSignInit, 30);
+ ADD_TEST(test_EVP_DigestVerifyInit);
+#ifndef OPENSSL_NO_SIPHASH
+ ADD_TEST(test_siphash_digestsign);
+#endif
+ ADD_TEST(test_EVP_Digest);
+ ADD_TEST(test_EVP_md_null);
+ ADD_ALL_TESTS(test_EVP_PKEY_sign, 3);
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ADD_ALL_TESTS(test_EVP_PKEY_sign_with_app_method, 2);
+#endif
+ ADD_ALL_TESTS(test_EVP_Enveloped, 2);
+ ADD_ALL_TESTS(test_d2i_AutoPrivateKey, OSSL_NELEM(keydata));
+ ADD_TEST(test_privatekey_to_pkcs8);
+ ADD_TEST(test_EVP_PKCS82PKEY_wrong_tag);
+#ifndef OPENSSL_NO_EC
+ ADD_TEST(test_EVP_PKCS82PKEY);
+#endif
+#ifndef OPENSSL_NO_EC
+ ADD_ALL_TESTS(test_EC_keygen_with_enc, OSSL_NELEM(ec_encodings));
+#endif
+#if !defined(OPENSSL_NO_SM2)
+ ADD_TEST(test_EVP_SM2);
+ ADD_TEST(test_EVP_SM2_verify);
+#endif
+ ADD_ALL_TESTS(test_set_get_raw_keys, OSSL_NELEM(keys));
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ custom_pmeth = EVP_PKEY_meth_new(0xdefaced, 0);
+ if (!TEST_ptr(custom_pmeth))
+ return 0;
+ EVP_PKEY_meth_set_check(custom_pmeth, pkey_custom_check);
+ EVP_PKEY_meth_set_public_check(custom_pmeth, pkey_custom_pub_check);
+ EVP_PKEY_meth_set_param_check(custom_pmeth, pkey_custom_param_check);
+ if (!TEST_int_eq(EVP_PKEY_meth_add0(custom_pmeth), 1))
+ return 0;
+#endif
+ ADD_ALL_TESTS(test_EVP_PKEY_check, OSSL_NELEM(keycheckdata));
+#ifndef OPENSSL_NO_CMAC
+ ADD_TEST(test_CMAC_keygen);
+#endif
+ ADD_TEST(test_HKDF);
+ ADD_TEST(test_emptyikm_HKDF);
+#ifndef OPENSSL_NO_EC
+ ADD_TEST(test_X509_PUBKEY_inplace);
+ ADD_TEST(test_X509_PUBKEY_dup);
+ ADD_ALL_TESTS(test_invalide_ec_char2_pub_range_decode,
+ OSSL_NELEM(ec_der_pub_keys));
+#endif
+#ifndef OPENSSL_NO_DSA
+ ADD_TEST(test_DSA_get_set_params);
+ ADD_TEST(test_DSA_priv_pub);
+#endif
+ ADD_TEST(test_RSA_get_set_params);
+ ADD_TEST(test_RSA_OAEP_set_get_params);
+ ADD_TEST(test_RSA_OAEP_set_null_label);
+#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
+ ADD_TEST(test_decrypt_null_chunks);
+#endif
+#ifndef OPENSSL_NO_DH
+ ADD_TEST(test_DH_priv_pub);
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ ADD_TEST(test_EVP_PKEY_set1_DH);
+# endif
+#endif
+#ifndef OPENSSL_NO_EC
+ ADD_TEST(test_EC_priv_pub);
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ ADD_TEST(test_EC_priv_only_legacy);
+# endif
+#endif
+ ADD_ALL_TESTS(test_keygen_with_empty_template, 2);
+ ADD_ALL_TESTS(test_pkey_ctx_fail_without_provider, 2);
+
+ ADD_TEST(test_rand_agglomeration);
+ ADD_ALL_TESTS(test_evp_iv_aes, 12);
+#ifndef OPENSSL_NO_DES
+ ADD_ALL_TESTS(test_evp_iv_des, 6);
+#endif
+#ifndef OPENSSL_NO_BF
+ ADD_ALL_TESTS(test_evp_bf_default_keylen, 4);
+#endif
+ ADD_TEST(test_EVP_rsa_pss_with_keygen_bits);
+ ADD_TEST(test_EVP_rsa_pss_set_saltlen);
+#ifndef OPENSSL_NO_EC
+ ADD_ALL_TESTS(test_ecpub, OSSL_NELEM(ecpub_nids));
+#endif
+
+ ADD_TEST(test_names_do_all);
+
+ ADD_ALL_TESTS(test_evp_init_seq, OSSL_NELEM(evp_init_tests));
+ ADD_ALL_TESTS(test_evp_reset, OSSL_NELEM(evp_reset_tests));
+ ADD_ALL_TESTS(test_evp_reinit_seq, OSSL_NELEM(evp_reinit_tests));
+ ADD_ALL_TESTS(test_gcm_reinit, OSSL_NELEM(gcm_reinit_tests));
+ ADD_ALL_TESTS(test_evp_updated_iv, OSSL_NELEM(evp_updated_iv_tests));
+ ADD_ALL_TESTS(test_ivlen_change, OSSL_NELEM(ivlen_change_ciphers));
+ if (OSSL_NELEM(keylen_change_ciphers) - 1 > 0)
+ ADD_ALL_TESTS(test_keylen_change, OSSL_NELEM(keylen_change_ciphers) - 1);
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ADD_ALL_TESTS(test_custom_pmeth, 12);
+ ADD_TEST(test_evp_md_cipher_meth);
+ ADD_TEST(test_custom_md_meth);
+ ADD_TEST(test_custom_ciph_meth);
+
+# ifndef OPENSSL_NO_DYNAMIC_ENGINE
+ /* Tests only support the default libctx */
+ if (testctx == NULL) {
+# ifndef OPENSSL_NO_EC
+ ADD_ALL_TESTS(test_signatures_with_engine, 3);
+# else
+ ADD_ALL_TESTS(test_signatures_with_engine, 2);
+# endif
+ ADD_TEST(test_cipher_with_engine);
+ }
+# endif
+#endif
+
+ ADD_ALL_TESTS(test_ecx_short_keys, OSSL_NELEM(ecxnids));
+
+#ifndef OPENSSL_NO_EC
+ ADD_ALL_TESTS(test_ecx_not_private_key, OSSL_NELEM(keys));
+#endif
+
+ /* Test cases for CVE-2023-5363 */
+ ADD_TEST(test_aes_gcm_ivlen_change_cve_2023_5363);
+#ifndef OPENSSL_NO_RC4
+ ADD_TEST(test_aes_rc4_keylen_change_cve_2023_5363);
+#endif
+
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OSSL_PROVIDER_unload(nullprov);
+ OSSL_PROVIDER_unload(deflprov);
+ OSSL_PROVIDER_unload(lgcyprov);
+ OSSL_LIB_CTX_free(testctx);
+}
diff --git a/test/evp_extra_test2.c b/test/evp_extra_test2.c
new file mode 100644
index 000000000000..06a6683ef9b7
--- /dev/null
+++ b/test/evp_extra_test2.c
@@ -0,0 +1,1295 @@
+/*
+ * Copyright 2015-2024 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
+ */
+
+/* We need to use some deprecated APIs */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+/*
+ * Really these tests should be in evp_extra_test - but that doesn't
+ * yet support testing with a non-default libctx. Once it does we should move
+ * everything into one file. Consequently some things are duplicated between
+ * the two files.
+ */
+
+#include <openssl/evp.h>
+#include <openssl/pem.h>
+#include <openssl/provider.h>
+#include <openssl/rsa.h>
+#include <openssl/dh.h>
+#include <openssl/core_names.h>
+#include <openssl/ui.h>
+
+#include "testutil.h"
+#include "internal/nelem.h"
+
+static OSSL_LIB_CTX *mainctx = NULL;
+static OSSL_PROVIDER *nullprov = NULL;
+
+/*
+ * kExampleRSAKeyDER is an RSA private key in ASN.1, DER format. Of course, you
+ * should never use this key anywhere but in an example.
+ */
+static const unsigned char kExampleRSAKeyDER[] = {
+ 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xf8,
+ 0xb8, 0x6c, 0x83, 0xb4, 0xbc, 0xd9, 0xa8, 0x57, 0xc0, 0xa5, 0xb4, 0x59,
+ 0x76, 0x8c, 0x54, 0x1d, 0x79, 0xeb, 0x22, 0x52, 0x04, 0x7e, 0xd3, 0x37,
+ 0xeb, 0x41, 0xfd, 0x83, 0xf9, 0xf0, 0xa6, 0x85, 0x15, 0x34, 0x75, 0x71,
+ 0x5a, 0x84, 0xa8, 0x3c, 0xd2, 0xef, 0x5a, 0x4e, 0xd3, 0xde, 0x97, 0x8a,
+ 0xdd, 0xff, 0xbb, 0xcf, 0x0a, 0xaa, 0x86, 0x92, 0xbe, 0xb8, 0x50, 0xe4,
+ 0xcd, 0x6f, 0x80, 0x33, 0x30, 0x76, 0x13, 0x8f, 0xca, 0x7b, 0xdc, 0xec,
+ 0x5a, 0xca, 0x63, 0xc7, 0x03, 0x25, 0xef, 0xa8, 0x8a, 0x83, 0x58, 0x76,
+ 0x20, 0xfa, 0x16, 0x77, 0xd7, 0x79, 0x92, 0x63, 0x01, 0x48, 0x1a, 0xd8,
+ 0x7b, 0x67, 0xf1, 0x52, 0x55, 0x49, 0x4e, 0xd6, 0x6e, 0x4a, 0x5c, 0xd7,
+ 0x7a, 0x37, 0x36, 0x0c, 0xde, 0xdd, 0x8f, 0x44, 0xe8, 0xc2, 0xa7, 0x2c,
+ 0x2b, 0xb5, 0xaf, 0x64, 0x4b, 0x61, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0x02, 0x81, 0x80, 0x74, 0x88, 0x64, 0x3f, 0x69, 0x45, 0x3a, 0x6d, 0xc7,
+ 0x7f, 0xb9, 0xa3, 0xc0, 0x6e, 0xec, 0xdc, 0xd4, 0x5a, 0xb5, 0x32, 0x85,
+ 0x5f, 0x19, 0xd4, 0xf8, 0xd4, 0x3f, 0x3c, 0xfa, 0xc2, 0xf6, 0x5f, 0xee,
+ 0xe6, 0xba, 0x87, 0x74, 0x2e, 0xc7, 0x0c, 0xd4, 0x42, 0xb8, 0x66, 0x85,
+ 0x9c, 0x7b, 0x24, 0x61, 0xaa, 0x16, 0x11, 0xf6, 0xb5, 0xb6, 0xa4, 0x0a,
+ 0xc9, 0x55, 0x2e, 0x81, 0xa5, 0x47, 0x61, 0xcb, 0x25, 0x8f, 0xc2, 0x15,
+ 0x7b, 0x0e, 0x7c, 0x36, 0x9f, 0x3a, 0xda, 0x58, 0x86, 0x1c, 0x5b, 0x83,
+ 0x79, 0xe6, 0x2b, 0xcc, 0xe6, 0xfa, 0x2c, 0x61, 0xf2, 0x78, 0x80, 0x1b,
+ 0xe2, 0xf3, 0x9d, 0x39, 0x2b, 0x65, 0x57, 0x91, 0x3d, 0x71, 0x99, 0x73,
+ 0xa5, 0xc2, 0x79, 0x20, 0x8c, 0x07, 0x4f, 0xe5, 0xb4, 0x60, 0x1f, 0x99,
+ 0xa2, 0xb1, 0x4f, 0x0c, 0xef, 0xbc, 0x59, 0x53, 0x00, 0x7d, 0xb1, 0x02,
+ 0x41, 0x00, 0xfc, 0x7e, 0x23, 0x65, 0x70, 0xf8, 0xce, 0xd3, 0x40, 0x41,
+ 0x80, 0x6a, 0x1d, 0x01, 0xd6, 0x01, 0xff, 0xb6, 0x1b, 0x3d, 0x3d, 0x59,
+ 0x09, 0x33, 0x79, 0xc0, 0x4f, 0xde, 0x96, 0x27, 0x4b, 0x18, 0xc6, 0xd9,
+ 0x78, 0xf1, 0xf4, 0x35, 0x46, 0xe9, 0x7c, 0x42, 0x7a, 0x5d, 0x9f, 0xef,
+ 0x54, 0xb8, 0xf7, 0x9f, 0xc4, 0x33, 0x6c, 0xf3, 0x8c, 0x32, 0x46, 0x87,
+ 0x67, 0x30, 0x7b, 0xa7, 0xac, 0xe3, 0x02, 0x41, 0x00, 0xfc, 0x2c, 0xdf,
+ 0x0c, 0x0d, 0x88, 0xf5, 0xb1, 0x92, 0xa8, 0x93, 0x47, 0x63, 0x55, 0xf5,
+ 0xca, 0x58, 0x43, 0xba, 0x1c, 0xe5, 0x9e, 0xb6, 0x95, 0x05, 0xcd, 0xb5,
+ 0x82, 0xdf, 0xeb, 0x04, 0x53, 0x9d, 0xbd, 0xc2, 0x38, 0x16, 0xb3, 0x62,
+ 0xdd, 0xa1, 0x46, 0xdb, 0x6d, 0x97, 0x93, 0x9f, 0x8a, 0xc3, 0x9b, 0x64,
+ 0x7e, 0x42, 0xe3, 0x32, 0x57, 0x19, 0x1b, 0xd5, 0x6e, 0x85, 0xfa, 0xb8,
+ 0x8d, 0x02, 0x41, 0x00, 0xbc, 0x3d, 0xde, 0x6d, 0xd6, 0x97, 0xe8, 0xba,
+ 0x9e, 0x81, 0x37, 0x17, 0xe5, 0xa0, 0x64, 0xc9, 0x00, 0xb7, 0xe7, 0xfe,
+ 0xf4, 0x29, 0xd9, 0x2e, 0x43, 0x6b, 0x19, 0x20, 0xbd, 0x99, 0x75, 0xe7,
+ 0x76, 0xf8, 0xd3, 0xae, 0xaf, 0x7e, 0xb8, 0xeb, 0x81, 0xf4, 0x9d, 0xfe,
+ 0x07, 0x2b, 0x0b, 0x63, 0x0b, 0x5a, 0x55, 0x90, 0x71, 0x7d, 0xf1, 0xdb,
+ 0xd9, 0xb1, 0x41, 0x41, 0x68, 0x2f, 0x4e, 0x39, 0x02, 0x40, 0x5a, 0x34,
+ 0x66, 0xd8, 0xf5, 0xe2, 0x7f, 0x18, 0xb5, 0x00, 0x6e, 0x26, 0x84, 0x27,
+ 0x14, 0x93, 0xfb, 0xfc, 0xc6, 0x0f, 0x5e, 0x27, 0xe6, 0xe1, 0xe9, 0xc0,
+ 0x8a, 0xe4, 0x34, 0xda, 0xe9, 0xa2, 0x4b, 0x73, 0xbc, 0x8c, 0xb9, 0xba,
+ 0x13, 0x6c, 0x7a, 0x2b, 0x51, 0x84, 0xa3, 0x4a, 0xe0, 0x30, 0x10, 0x06,
+ 0x7e, 0xed, 0x17, 0x5a, 0x14, 0x00, 0xc9, 0xef, 0x85, 0xea, 0x52, 0x2c,
+ 0xbc, 0x65, 0x02, 0x40, 0x51, 0xe3, 0xf2, 0x83, 0x19, 0x9b, 0xc4, 0x1e,
+ 0x2f, 0x50, 0x3d, 0xdf, 0x5a, 0xa2, 0x18, 0xca, 0x5f, 0x2e, 0x49, 0xaf,
+ 0x6f, 0xcc, 0xfa, 0x65, 0x77, 0x94, 0xb5, 0xa1, 0x0a, 0xa9, 0xd1, 0x8a,
+ 0x39, 0x37, 0xf4, 0x0b, 0xa0, 0xd7, 0x82, 0x27, 0x5e, 0xae, 0x17, 0x17,
+ 0xa1, 0x1e, 0x54, 0x34, 0xbf, 0x6e, 0xc4, 0x8e, 0x99, 0x5d, 0x08, 0xf1,
+ 0x2d, 0x86, 0x9d, 0xa5, 0x20, 0x1b, 0xe5, 0xdf,
+};
+
+/*
+ * kExampleRSAKeyPKCS8 is kExampleRSAKeyDER encoded in a PKCS #8
+ * PrivateKeyInfo.
+ */
+static const unsigned char kExampleRSAKeyPKCS8[] = {
+ 0x30, 0x82, 0x02, 0x76, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a,
+ 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82,
+ 0x02, 0x60, 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81,
+ 0x00, 0xf8, 0xb8, 0x6c, 0x83, 0xb4, 0xbc, 0xd9, 0xa8, 0x57, 0xc0, 0xa5,
+ 0xb4, 0x59, 0x76, 0x8c, 0x54, 0x1d, 0x79, 0xeb, 0x22, 0x52, 0x04, 0x7e,
+ 0xd3, 0x37, 0xeb, 0x41, 0xfd, 0x83, 0xf9, 0xf0, 0xa6, 0x85, 0x15, 0x34,
+ 0x75, 0x71, 0x5a, 0x84, 0xa8, 0x3c, 0xd2, 0xef, 0x5a, 0x4e, 0xd3, 0xde,
+ 0x97, 0x8a, 0xdd, 0xff, 0xbb, 0xcf, 0x0a, 0xaa, 0x86, 0x92, 0xbe, 0xb8,
+ 0x50, 0xe4, 0xcd, 0x6f, 0x80, 0x33, 0x30, 0x76, 0x13, 0x8f, 0xca, 0x7b,
+ 0xdc, 0xec, 0x5a, 0xca, 0x63, 0xc7, 0x03, 0x25, 0xef, 0xa8, 0x8a, 0x83,
+ 0x58, 0x76, 0x20, 0xfa, 0x16, 0x77, 0xd7, 0x79, 0x92, 0x63, 0x01, 0x48,
+ 0x1a, 0xd8, 0x7b, 0x67, 0xf1, 0x52, 0x55, 0x49, 0x4e, 0xd6, 0x6e, 0x4a,
+ 0x5c, 0xd7, 0x7a, 0x37, 0x36, 0x0c, 0xde, 0xdd, 0x8f, 0x44, 0xe8, 0xc2,
+ 0xa7, 0x2c, 0x2b, 0xb5, 0xaf, 0x64, 0x4b, 0x61, 0x07, 0x02, 0x03, 0x01,
+ 0x00, 0x01, 0x02, 0x81, 0x80, 0x74, 0x88, 0x64, 0x3f, 0x69, 0x45, 0x3a,
+ 0x6d, 0xc7, 0x7f, 0xb9, 0xa3, 0xc0, 0x6e, 0xec, 0xdc, 0xd4, 0x5a, 0xb5,
+ 0x32, 0x85, 0x5f, 0x19, 0xd4, 0xf8, 0xd4, 0x3f, 0x3c, 0xfa, 0xc2, 0xf6,
+ 0x5f, 0xee, 0xe6, 0xba, 0x87, 0x74, 0x2e, 0xc7, 0x0c, 0xd4, 0x42, 0xb8,
+ 0x66, 0x85, 0x9c, 0x7b, 0x24, 0x61, 0xaa, 0x16, 0x11, 0xf6, 0xb5, 0xb6,
+ 0xa4, 0x0a, 0xc9, 0x55, 0x2e, 0x81, 0xa5, 0x47, 0x61, 0xcb, 0x25, 0x8f,
+ 0xc2, 0x15, 0x7b, 0x0e, 0x7c, 0x36, 0x9f, 0x3a, 0xda, 0x58, 0x86, 0x1c,
+ 0x5b, 0x83, 0x79, 0xe6, 0x2b, 0xcc, 0xe6, 0xfa, 0x2c, 0x61, 0xf2, 0x78,
+ 0x80, 0x1b, 0xe2, 0xf3, 0x9d, 0x39, 0x2b, 0x65, 0x57, 0x91, 0x3d, 0x71,
+ 0x99, 0x73, 0xa5, 0xc2, 0x79, 0x20, 0x8c, 0x07, 0x4f, 0xe5, 0xb4, 0x60,
+ 0x1f, 0x99, 0xa2, 0xb1, 0x4f, 0x0c, 0xef, 0xbc, 0x59, 0x53, 0x00, 0x7d,
+ 0xb1, 0x02, 0x41, 0x00, 0xfc, 0x7e, 0x23, 0x65, 0x70, 0xf8, 0xce, 0xd3,
+ 0x40, 0x41, 0x80, 0x6a, 0x1d, 0x01, 0xd6, 0x01, 0xff, 0xb6, 0x1b, 0x3d,
+ 0x3d, 0x59, 0x09, 0x33, 0x79, 0xc0, 0x4f, 0xde, 0x96, 0x27, 0x4b, 0x18,
+ 0xc6, 0xd9, 0x78, 0xf1, 0xf4, 0x35, 0x46, 0xe9, 0x7c, 0x42, 0x7a, 0x5d,
+ 0x9f, 0xef, 0x54, 0xb8, 0xf7, 0x9f, 0xc4, 0x33, 0x6c, 0xf3, 0x8c, 0x32,
+ 0x46, 0x87, 0x67, 0x30, 0x7b, 0xa7, 0xac, 0xe3, 0x02, 0x41, 0x00, 0xfc,
+ 0x2c, 0xdf, 0x0c, 0x0d, 0x88, 0xf5, 0xb1, 0x92, 0xa8, 0x93, 0x47, 0x63,
+ 0x55, 0xf5, 0xca, 0x58, 0x43, 0xba, 0x1c, 0xe5, 0x9e, 0xb6, 0x95, 0x05,
+ 0xcd, 0xb5, 0x82, 0xdf, 0xeb, 0x04, 0x53, 0x9d, 0xbd, 0xc2, 0x38, 0x16,
+ 0xb3, 0x62, 0xdd, 0xa1, 0x46, 0xdb, 0x6d, 0x97, 0x93, 0x9f, 0x8a, 0xc3,
+ 0x9b, 0x64, 0x7e, 0x42, 0xe3, 0x32, 0x57, 0x19, 0x1b, 0xd5, 0x6e, 0x85,
+ 0xfa, 0xb8, 0x8d, 0x02, 0x41, 0x00, 0xbc, 0x3d, 0xde, 0x6d, 0xd6, 0x97,
+ 0xe8, 0xba, 0x9e, 0x81, 0x37, 0x17, 0xe5, 0xa0, 0x64, 0xc9, 0x00, 0xb7,
+ 0xe7, 0xfe, 0xf4, 0x29, 0xd9, 0x2e, 0x43, 0x6b, 0x19, 0x20, 0xbd, 0x99,
+ 0x75, 0xe7, 0x76, 0xf8, 0xd3, 0xae, 0xaf, 0x7e, 0xb8, 0xeb, 0x81, 0xf4,
+ 0x9d, 0xfe, 0x07, 0x2b, 0x0b, 0x63, 0x0b, 0x5a, 0x55, 0x90, 0x71, 0x7d,
+ 0xf1, 0xdb, 0xd9, 0xb1, 0x41, 0x41, 0x68, 0x2f, 0x4e, 0x39, 0x02, 0x40,
+ 0x5a, 0x34, 0x66, 0xd8, 0xf5, 0xe2, 0x7f, 0x18, 0xb5, 0x00, 0x6e, 0x26,
+ 0x84, 0x27, 0x14, 0x93, 0xfb, 0xfc, 0xc6, 0x0f, 0x5e, 0x27, 0xe6, 0xe1,
+ 0xe9, 0xc0, 0x8a, 0xe4, 0x34, 0xda, 0xe9, 0xa2, 0x4b, 0x73, 0xbc, 0x8c,
+ 0xb9, 0xba, 0x13, 0x6c, 0x7a, 0x2b, 0x51, 0x84, 0xa3, 0x4a, 0xe0, 0x30,
+ 0x10, 0x06, 0x7e, 0xed, 0x17, 0x5a, 0x14, 0x00, 0xc9, 0xef, 0x85, 0xea,
+ 0x52, 0x2c, 0xbc, 0x65, 0x02, 0x40, 0x51, 0xe3, 0xf2, 0x83, 0x19, 0x9b,
+ 0xc4, 0x1e, 0x2f, 0x50, 0x3d, 0xdf, 0x5a, 0xa2, 0x18, 0xca, 0x5f, 0x2e,
+ 0x49, 0xaf, 0x6f, 0xcc, 0xfa, 0x65, 0x77, 0x94, 0xb5, 0xa1, 0x0a, 0xa9,
+ 0xd1, 0x8a, 0x39, 0x37, 0xf4, 0x0b, 0xa0, 0xd7, 0x82, 0x27, 0x5e, 0xae,
+ 0x17, 0x17, 0xa1, 0x1e, 0x54, 0x34, 0xbf, 0x6e, 0xc4, 0x8e, 0x99, 0x5d,
+ 0x08, 0xf1, 0x2d, 0x86, 0x9d, 0xa5, 0x20, 0x1b, 0xe5, 0xdf,
+};
+
+#ifndef OPENSSL_NO_DH
+static const unsigned char kExampleDHPrivateKeyDER[] = {
+ 0x30, 0x82, 0x02, 0x26, 0x02, 0x01, 0x00, 0x30, 0x82, 0x01, 0x17, 0x06,
+ 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x03, 0x01, 0x30, 0x82,
+ 0x01, 0x08, 0x02, 0x82, 0x01, 0x01, 0x00, 0xD8, 0x4B, 0x0F, 0x0E, 0x6B,
+ 0x79, 0xE9, 0x23, 0x4E, 0xE4, 0xBE, 0x9A, 0x8F, 0x7A, 0x5C, 0xA3, 0x20,
+ 0xD0, 0x86, 0x6B, 0x95, 0x78, 0x39, 0x59, 0x7A, 0x11, 0x2A, 0x5B, 0x87,
+ 0xA4, 0xFB, 0x2F, 0x99, 0xD0, 0x57, 0xF5, 0xE1, 0xA3, 0xAF, 0x41, 0xD1,
+ 0xCD, 0xA3, 0x94, 0xBB, 0xE5, 0x5A, 0x68, 0xE2, 0xEE, 0x69, 0x56, 0x51,
+ 0xB2, 0xEE, 0xF2, 0xFE, 0x10, 0xC9, 0x55, 0xE3, 0x82, 0x3C, 0x50, 0x0D,
+ 0xF5, 0x82, 0x73, 0xE4, 0xD6, 0x3E, 0x45, 0xB4, 0x89, 0x80, 0xE4, 0xF0,
+ 0x99, 0x85, 0x2B, 0x4B, 0xF9, 0xB8, 0xFD, 0x2C, 0x3C, 0x49, 0x2E, 0xB3,
+ 0x56, 0x7E, 0x99, 0x07, 0xD3, 0xF7, 0xD9, 0xE4, 0x0C, 0x64, 0xC5, 0x7D,
+ 0x03, 0x8E, 0x05, 0x3C, 0x0A, 0x40, 0x17, 0xAD, 0xA8, 0x0F, 0x9B, 0xF4,
+ 0x8B, 0xA7, 0xDB, 0x16, 0x4F, 0x4A, 0x57, 0x0B, 0x89, 0x80, 0x0B, 0x9F,
+ 0x26, 0x56, 0x3F, 0x1D, 0xFA, 0x52, 0x2D, 0x1A, 0x9E, 0xDC, 0x42, 0xA3,
+ 0x2E, 0xA9, 0x87, 0xE3, 0x8B, 0x45, 0x5E, 0xEE, 0x99, 0xB8, 0x30, 0x15,
+ 0x58, 0xA3, 0x5F, 0xB5, 0x69, 0xD8, 0x0C, 0xE8, 0x6B, 0x36, 0xD8, 0xAB,
+ 0xD8, 0xE4, 0x77, 0x46, 0x13, 0xA2, 0x15, 0xB3, 0x9C, 0xAD, 0x99, 0x91,
+ 0xE5, 0xA3, 0x30, 0x7D, 0x40, 0x70, 0xB3, 0x32, 0x5E, 0xAF, 0x96, 0x8D,
+ 0xE6, 0x3F, 0x47, 0xA3, 0x18, 0xDA, 0xE1, 0x9A, 0x20, 0x11, 0xE1, 0x49,
+ 0x51, 0x45, 0xE3, 0x8C, 0xA5, 0x56, 0x39, 0x67, 0xCB, 0x9D, 0xCF, 0xBA,
+ 0xF4, 0x46, 0x4E, 0x0A, 0xB6, 0x0B, 0xA9, 0xB4, 0xF6, 0xF1, 0x6A, 0xC8,
+ 0x63, 0xE2, 0xB4, 0xB2, 0x9F, 0x44, 0xAA, 0x0A, 0xDA, 0x53, 0xF7, 0x52,
+ 0x14, 0x57, 0xEE, 0x2C, 0x5D, 0x31, 0x9C, 0x27, 0x03, 0x64, 0x9E, 0xC0,
+ 0x1E, 0x4B, 0x1B, 0x4F, 0xEE, 0xA6, 0x3F, 0xC1, 0x3E, 0x61, 0x93, 0x02,
+ 0x01, 0x02, 0x04, 0x82, 0x01, 0x04, 0x02, 0x82, 0x01, 0x00, 0x7E, 0xC2,
+ 0x04, 0xF9, 0x95, 0xC7, 0xEF, 0x96, 0xBE, 0xA0, 0x9D, 0x2D, 0xC3, 0x0C,
+ 0x3A, 0x67, 0x02, 0x7C, 0x7D, 0x3B, 0xC9, 0xB1, 0xDE, 0x13, 0x97, 0x64,
+ 0xEF, 0x87, 0x80, 0x4F, 0xBF, 0xA2, 0xAC, 0x18, 0x6B, 0xD5, 0xB2, 0x42,
+ 0x0F, 0xDA, 0x28, 0x40, 0x93, 0x40, 0xB2, 0x1E, 0x80, 0xB0, 0x6C, 0xDE,
+ 0x9C, 0x54, 0xA4, 0xB4, 0x68, 0x29, 0xE0, 0x13, 0x57, 0x1D, 0xC9, 0x87,
+ 0xC0, 0xDE, 0x2F, 0x1D, 0x72, 0xF0, 0xC0, 0xE4, 0x4E, 0x04, 0x48, 0xF5,
+ 0x2D, 0x8D, 0x9A, 0x1B, 0xE5, 0xEB, 0x06, 0xAB, 0x7C, 0x74, 0x10, 0x3C,
+ 0xA8, 0x2D, 0x39, 0xBC, 0xE3, 0x15, 0x3E, 0x63, 0x37, 0x8C, 0x1B, 0xF1,
+ 0xB3, 0x99, 0xB6, 0xAE, 0x5A, 0xEB, 0xB3, 0x3D, 0x30, 0x39, 0x69, 0xDB,
+ 0xF2, 0x4F, 0x94, 0xB7, 0x71, 0xAF, 0xBA, 0x5C, 0x1F, 0xF8, 0x6B, 0xE5,
+ 0xD1, 0xB1, 0x00, 0x81, 0xE2, 0x6D, 0xEC, 0x65, 0xF7, 0x7E, 0xCE, 0x03,
+ 0x84, 0x68, 0x42, 0x6A, 0x8B, 0x47, 0x8E, 0x4A, 0x88, 0xDE, 0x82, 0xDD,
+ 0xAF, 0xA9, 0x6F, 0x18, 0xF7, 0xC6, 0xE2, 0xB9, 0x97, 0xCE, 0x47, 0x8F,
+ 0x85, 0x19, 0x61, 0x42, 0x67, 0x21, 0x7D, 0x13, 0x6E, 0xB5, 0x5A, 0x62,
+ 0xF3, 0x08, 0xE2, 0x70, 0x3B, 0x0E, 0x85, 0x3C, 0xA1, 0xD3, 0xED, 0x7A,
+ 0x43, 0xD6, 0xDE, 0x30, 0x5C, 0x48, 0xB2, 0x99, 0xAB, 0x3E, 0x65, 0xA6,
+ 0x66, 0x80, 0x22, 0xFF, 0x92, 0xC1, 0x42, 0x1C, 0x30, 0x87, 0x74, 0x1E,
+ 0x53, 0x57, 0x7C, 0xF8, 0x77, 0x51, 0xF1, 0x74, 0x16, 0xF4, 0x45, 0x26,
+ 0x77, 0x0A, 0x05, 0x96, 0x13, 0x12, 0x06, 0x86, 0x2B, 0xB8, 0x49, 0x82,
+ 0x69, 0x43, 0x0A, 0x57, 0xA7, 0x30, 0x19, 0x4C, 0xB8, 0x47, 0x82, 0x6E,
+ 0x64, 0x7A, 0x06, 0x13, 0x5A, 0x82, 0x98, 0xD6, 0x7A, 0x09, 0xEC, 0x03,
+ 0x8D, 0x03
+};
+#endif /* OPENSSL_NO_DH */
+
+#ifndef OPENSSL_NO_EC
+/*
+ * kExampleECKeyDER is a sample EC private key encoded as an ECPrivateKey
+ * structure.
+ */
+static const unsigned char kExampleECKeyDER[] = {
+ 0x30, 0x77, 0x02, 0x01, 0x01, 0x04, 0x20, 0x07, 0x0f, 0x08, 0x72, 0x7a,
+ 0xd4, 0xa0, 0x4a, 0x9c, 0xdd, 0x59, 0xc9, 0x4d, 0x89, 0x68, 0x77, 0x08,
+ 0xb5, 0x6f, 0xc9, 0x5d, 0x30, 0x77, 0x0e, 0xe8, 0xd1, 0xc9, 0xce, 0x0a,
+ 0x8b, 0xb4, 0x6a, 0xa0, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
+ 0x03, 0x01, 0x07, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0xe6, 0x2b, 0x69,
+ 0xe2, 0xbf, 0x65, 0x9f, 0x97, 0xbe, 0x2f, 0x1e, 0x0d, 0x94, 0x8a, 0x4c,
+ 0xd5, 0x97, 0x6b, 0xb7, 0xa9, 0x1e, 0x0d, 0x46, 0xfb, 0xdd, 0xa9, 0xa9,
+ 0x1e, 0x9d, 0xdc, 0xba, 0x5a, 0x01, 0xe7, 0xd6, 0x97, 0xa8, 0x0a, 0x18,
+ 0xf9, 0xc3, 0xc4, 0xa3, 0x1e, 0x56, 0xe2, 0x7c, 0x83, 0x48, 0xdb, 0x16,
+ 0x1a, 0x1c, 0xf5, 0x1d, 0x7e, 0xf1, 0x94, 0x2d, 0x4b, 0xcf, 0x72, 0x22,
+ 0xc1,
+};
+
+/* P-384 sample EC private key in PKCS8 format (no public key) */
+static const unsigned char kExampleECKey2DER[] = {
+ 0x30, 0x4E, 0x02, 0x01, 0x00, 0x30, 0x10, 0x06, 0x07, 0x2A, 0x86, 0x48,
+ 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22, 0x04,
+ 0x37, 0x30, 0x35, 0x02, 0x01, 0x01, 0x04, 0x30, 0x73, 0xE3, 0x3A, 0x05,
+ 0xF2, 0xB6, 0x99, 0x6D, 0x0C, 0x33, 0x7F, 0x15, 0x9E, 0x10, 0xA9, 0x17,
+ 0x4C, 0x0A, 0x82, 0x57, 0x71, 0x13, 0x7A, 0xAC, 0x46, 0xA2, 0x5E, 0x1C,
+ 0xE0, 0xC7, 0xB2, 0xF8, 0x20, 0x40, 0xC2, 0x27, 0xC8, 0xBE, 0x02, 0x7E,
+ 0x96, 0x69, 0xE0, 0x04, 0xCB, 0x89, 0x0B, 0x42
+};
+
+static const unsigned char kExampleECXKey2DER[] = {
+ 0x30, 0x2E, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e,
+ 0x04, 0x22, 0x04, 0x20, 0xc8, 0xa9, 0xd5, 0xa9, 0x10, 0x91, 0xad, 0x85,
+ 0x1c, 0x66, 0x8b, 0x07, 0x36, 0xc1, 0xc9, 0xa0, 0x29, 0x36, 0xc0, 0xd3,
+ 0xad, 0x62, 0x67, 0x08, 0x58, 0x08, 0x80, 0x47, 0xba, 0x05, 0x74, 0x75
+};
+#endif
+
+typedef struct APK_DATA_st {
+ const unsigned char *kder;
+ size_t size;
+ int evptype;
+} APK_DATA;
+
+static APK_DATA keydata[] = {
+ {kExampleRSAKeyDER, sizeof(kExampleRSAKeyDER), EVP_PKEY_RSA},
+ {kExampleRSAKeyPKCS8, sizeof(kExampleRSAKeyPKCS8), EVP_PKEY_RSA},
+#ifndef OPENSSL_NO_EC
+ {kExampleECXKey2DER, sizeof(kExampleECXKey2DER), EVP_PKEY_X25519},
+ {kExampleECKeyDER, sizeof(kExampleECKeyDER), EVP_PKEY_EC},
+ {kExampleECKey2DER, sizeof(kExampleECKey2DER), EVP_PKEY_EC},
+#endif
+#ifndef OPENSSL_NO_DH
+ {kExampleDHPrivateKeyDER, sizeof(kExampleDHPrivateKeyDER), EVP_PKEY_DH},
+#endif
+};
+
+static int pkey_has_private(EVP_PKEY *key, const char *privtag,
+ int use_octstring)
+{
+ int ret = 0;
+
+ if (use_octstring) {
+ unsigned char buf[64];
+
+ ret = EVP_PKEY_get_octet_string_param(key, privtag, buf, sizeof(buf),
+ NULL);
+ } else {
+ BIGNUM *bn = NULL;
+
+ ret = EVP_PKEY_get_bn_param(key, privtag, &bn);
+ BN_free(bn);
+ }
+ return ret;
+}
+
+static int do_pkey_tofrom_data_select(EVP_PKEY *key, const char *keytype)
+{
+ int ret = 0;
+ OSSL_PARAM *pub_params = NULL, *keypair_params = NULL;
+ EVP_PKEY *fromkey = NULL, *fromkeypair = NULL;
+ EVP_PKEY_CTX *fromctx = NULL;
+ const char *privtag = strcmp(keytype, "RSA") == 0 ? "d" : "priv";
+ const int use_octstring = strcmp(keytype, "X25519") == 0;
+
+ /*
+ * Select only the public key component when using EVP_PKEY_todata() and
+ * check that the resulting param array does not contain a private key.
+ */
+ if (!TEST_int_eq(EVP_PKEY_todata(key, EVP_PKEY_PUBLIC_KEY, &pub_params), 1)
+ || !TEST_ptr_null(OSSL_PARAM_locate(pub_params, privtag)))
+ goto end;
+ /*
+ * Select the keypair when using EVP_PKEY_todata() and check that
+ * the param array contains a private key.
+ */
+ if (!TEST_int_eq(EVP_PKEY_todata(key, EVP_PKEY_KEYPAIR, &keypair_params), 1)
+ || !TEST_ptr(OSSL_PARAM_locate(keypair_params, privtag)))
+ goto end;
+
+ /*
+ * Select only the public key when using EVP_PKEY_fromdata() and check that
+ * the resulting key does not contain a private key.
+ */
+ if (!TEST_ptr(fromctx = EVP_PKEY_CTX_new_from_name(mainctx, keytype, NULL))
+ || !TEST_int_eq(EVP_PKEY_fromdata_init(fromctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(fromctx, &fromkey, EVP_PKEY_PUBLIC_KEY,
+ keypair_params), 1)
+ || !TEST_false(pkey_has_private(fromkey, privtag, use_octstring)))
+ goto end;
+ /*
+ * Select the keypair when using EVP_PKEY_fromdata() and check that
+ * the resulting key contains a private key.
+ */
+ if (!TEST_int_eq(EVP_PKEY_fromdata(fromctx, &fromkeypair,
+ EVP_PKEY_KEYPAIR, keypair_params), 1)
+ || !TEST_true(pkey_has_private(fromkeypair, privtag, use_octstring)))
+ goto end;
+ ret = 1;
+end:
+ EVP_PKEY_free(fromkeypair);
+ EVP_PKEY_free(fromkey);
+ EVP_PKEY_CTX_free(fromctx);
+ OSSL_PARAM_free(keypair_params);
+ OSSL_PARAM_free(pub_params);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_DH
+static int test_dh_tofrom_data_select(void)
+{
+ int ret;
+ OSSL_PARAM params[2];
+ EVP_PKEY *key = NULL;
+ EVP_PKEY_CTX *gctx = NULL;
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ const DH *dhkey;
+ const BIGNUM *privkey;
+# endif
+
+ params[0] = OSSL_PARAM_construct_utf8_string("group", "ffdhe2048", 0);
+ params[1] = OSSL_PARAM_construct_end();
+ ret = TEST_ptr(gctx = EVP_PKEY_CTX_new_from_name(mainctx, "DHX", NULL))
+ && TEST_int_gt(EVP_PKEY_keygen_init(gctx), 0)
+ && TEST_true(EVP_PKEY_CTX_set_params(gctx, params))
+ && TEST_int_gt(EVP_PKEY_generate(gctx, &key), 0)
+ && TEST_true(do_pkey_tofrom_data_select(key, "DHX"));
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ ret = ret && TEST_ptr(dhkey = EVP_PKEY_get0_DH(key))
+ && TEST_ptr(privkey = DH_get0_priv_key(dhkey))
+ && TEST_int_le(BN_num_bits(privkey), 225);
+# endif
+ EVP_PKEY_free(key);
+ EVP_PKEY_CTX_free(gctx);
+ return ret;
+}
+
+static int test_dh_paramgen(void)
+{
+ int ret;
+ OSSL_PARAM params[3];
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *gctx = NULL;
+ unsigned int pbits = 512; /* minimum allowed for speed */
+
+ params[0] = OSSL_PARAM_construct_uint(OSSL_PKEY_PARAM_FFC_PBITS, &pbits);
+ params[1] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_TYPE,
+ "generator", 0);
+ params[2] = OSSL_PARAM_construct_end();
+
+ ret = TEST_ptr(gctx = EVP_PKEY_CTX_new_from_name(mainctx, "DH", NULL))
+ && TEST_int_gt(EVP_PKEY_paramgen_init(gctx), 0)
+ && TEST_true(EVP_PKEY_CTX_set_params(gctx, params))
+ && TEST_true(EVP_PKEY_paramgen(gctx, &pkey))
+ && TEST_ptr(pkey);
+
+ EVP_PKEY_CTX_free(gctx);
+ gctx = NULL;
+
+ ret = ret && TEST_ptr(gctx = EVP_PKEY_CTX_new_from_pkey(mainctx, pkey, NULL))
+ && TEST_int_eq(EVP_PKEY_param_check(gctx), 1)
+ && TEST_int_eq(EVP_PKEY_param_check_quick(gctx), 1);
+
+ EVP_PKEY_CTX_free(gctx);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+#endif
+
+#ifndef OPENSSL_NO_EC
+static int test_ec_tofrom_data_select(void)
+{
+ int ret;
+ EVP_PKEY *key = NULL;
+
+ ret = TEST_ptr(key = EVP_PKEY_Q_keygen(mainctx, NULL, "EC", "P-256"))
+ && TEST_true(do_pkey_tofrom_data_select(key, "EC"));
+ EVP_PKEY_free(key);
+ return ret;
+}
+
+static int test_ecx_tofrom_data_select(void)
+{
+ int ret;
+ EVP_PKEY *key = NULL;
+
+ ret = TEST_ptr(key = EVP_PKEY_Q_keygen(mainctx, NULL, "X25519"))
+ && TEST_true(do_pkey_tofrom_data_select(key, "X25519"));
+ EVP_PKEY_free(key);
+ return ret;
+}
+#endif
+
+#ifndef OPENSSL_NO_SM2
+static int test_sm2_tofrom_data_select(void)
+{
+ int ret;
+ EVP_PKEY *key = NULL;
+
+ ret = TEST_ptr(key = EVP_PKEY_Q_keygen(mainctx, NULL, "SM2"))
+ && TEST_true(do_pkey_tofrom_data_select(key, "SM2"));
+ EVP_PKEY_free(key);
+ return ret;
+}
+#endif
+
+static int test_rsa_tofrom_data_select(void)
+{
+ int ret;
+ EVP_PKEY *key = NULL;
+ const unsigned char *pdata = kExampleRSAKeyDER;
+ int pdata_len = sizeof(kExampleRSAKeyDER);
+
+ ret = TEST_ptr(key = d2i_AutoPrivateKey_ex(NULL, &pdata, pdata_len,
+ mainctx, NULL))
+ && TEST_true(do_pkey_tofrom_data_select(key, "RSA"));
+ EVP_PKEY_free(key);
+ return ret;
+}
+
+/* This is the equivalent of test_d2i_AutoPrivateKey in evp_extra_test */
+static int test_d2i_AutoPrivateKey_ex(int i)
+{
+ int ret = 0;
+ const unsigned char *p;
+ EVP_PKEY *pkey = NULL;
+ const APK_DATA *ak = &keydata[i];
+ const unsigned char *input = ak->kder;
+ size_t input_len = ak->size;
+ int expected_id = ak->evptype;
+ BIGNUM *p_bn = NULL;
+ BIGNUM *g_bn = NULL;
+ BIGNUM *priv_bn = NULL;
+
+ p = input;
+ if (!TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &p, input_len, mainctx,
+ NULL))
+ || !TEST_ptr_eq(p, input + input_len)
+ || !TEST_int_eq(EVP_PKEY_get_id(pkey), expected_id))
+ goto done;
+
+ if (ak->evptype == EVP_PKEY_RSA) {
+ if (!TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_RSA_D,
+ &priv_bn)))
+ goto done;
+ } else if (ak->evptype == EVP_PKEY_X25519) {
+ unsigned char buffer[32];
+ size_t len;
+
+ if (!TEST_true(EVP_PKEY_get_octet_string_param(pkey,
+ OSSL_PKEY_PARAM_PRIV_KEY,
+ buffer, sizeof(buffer),
+ &len)))
+ goto done;
+ } else {
+ if (!TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_PRIV_KEY,
+ &priv_bn)))
+ goto done;
+ }
+
+ if (ak->evptype == EVP_PKEY_DH) {
+ if (!TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_FFC_P, &p_bn))
+ || !TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_FFC_G,
+ &g_bn)))
+ goto done;
+ }
+
+ ret = 1;
+done:
+ BN_free(p_bn);
+ BN_free(g_bn);
+ BN_free(priv_bn);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_DES
+static int test_pkcs8key_nid_bio(void)
+{
+ int ret;
+ const int nid = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
+ static const char pwd[] = "PASSWORD";
+ EVP_PKEY *pkey = NULL, *pkey_dec = NULL;
+ BIO *in = NULL, *enc_bio = NULL;
+ char *enc_data = NULL;
+ long enc_datalen = 0;
+ OSSL_PROVIDER *provider = NULL;
+
+ ret = TEST_ptr(provider = OSSL_PROVIDER_load(NULL, "default"))
+ && TEST_ptr(enc_bio = BIO_new(BIO_s_mem()))
+ && TEST_ptr(in = BIO_new_mem_buf(kExampleRSAKeyPKCS8,
+ sizeof(kExampleRSAKeyPKCS8)))
+ && TEST_ptr(pkey = d2i_PrivateKey_ex_bio(in, NULL, NULL, NULL))
+ && TEST_int_eq(i2d_PKCS8PrivateKey_nid_bio(enc_bio, pkey, nid,
+ pwd, sizeof(pwd) - 1,
+ NULL, NULL), 1)
+ && TEST_int_gt(enc_datalen = BIO_get_mem_data(enc_bio, &enc_data), 0)
+ && TEST_ptr(pkey_dec = d2i_PKCS8PrivateKey_bio(enc_bio, NULL, NULL,
+ (void *)pwd))
+ && TEST_true(EVP_PKEY_eq(pkey, pkey_dec));
+
+ EVP_PKEY_free(pkey_dec);
+ EVP_PKEY_free(pkey);
+ BIO_free(in);
+ BIO_free(enc_bio);
+ OSSL_PROVIDER_unload(provider);
+ return ret;
+}
+#endif /* OPENSSL_NO_DES */
+
+static int test_alternative_default(void)
+{
+ OSSL_LIB_CTX *oldctx;
+ EVP_MD *sha256;
+ int ok = 0;
+
+ /*
+ * setup_tests() loaded the "null" provider in the current default, so
+ * we know this fetch should fail.
+ */
+ if (!TEST_ptr_null(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL)))
+ goto err;
+
+ /*
+ * Now we switch to our main library context, and try again. Since no
+ * providers are loaded in this one, it should fall back to the default.
+ */
+ if (!TEST_ptr(oldctx = OSSL_LIB_CTX_set0_default(mainctx))
+ || !TEST_ptr(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL)))
+ goto err;
+ EVP_MD_free(sha256);
+ sha256 = NULL;
+
+ /*
+ * Switching back should give us our main library context back, and
+ * fetching SHA2-256 should fail again.
+ */
+ if (!TEST_ptr_eq(OSSL_LIB_CTX_set0_default(oldctx), mainctx)
+ || !TEST_ptr_null(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL)))
+ goto err;
+
+ ok = 1;
+ err:
+ EVP_MD_free(sha256);
+ return ok;
+}
+
+static int test_provider_unload_effective(int testid)
+{
+ EVP_MD *sha256 = NULL;
+ OSSL_PROVIDER *provider = NULL;
+ int ok = 0;
+
+ if (!TEST_ptr(provider = OSSL_PROVIDER_load(NULL, "default"))
+ || !TEST_ptr(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL)))
+ goto err;
+
+ if (testid > 0) {
+ OSSL_PROVIDER_unload(provider);
+ provider = NULL;
+ EVP_MD_free(sha256);
+ sha256 = NULL;
+ } else {
+ EVP_MD_free(sha256);
+ sha256 = NULL;
+ OSSL_PROVIDER_unload(provider);
+ provider = NULL;
+ }
+
+ /*
+ * setup_tests() loaded the "null" provider in the current default, and
+ * we unloaded it above after the load so we know this fetch should fail.
+ */
+ if (!TEST_ptr_null(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL)))
+ goto err;
+
+ ok = 1;
+ err:
+ EVP_MD_free(sha256);
+ OSSL_PROVIDER_unload(provider);
+ return ok;
+}
+
+static int test_d2i_PrivateKey_ex(int testid)
+{
+ int ok = 0;
+ OSSL_PROVIDER *provider = NULL;
+ BIO *key_bio = NULL;
+ EVP_PKEY *pkey = NULL;
+ int id = (testid == 0) ? 0 : 2;
+
+ if (!TEST_ptr(provider = OSSL_PROVIDER_load(NULL, "default")))
+ goto err;
+ if (!TEST_ptr(key_bio = BIO_new_mem_buf(keydata[id].kder, keydata[id].size)))
+ goto err;
+ if (!TEST_ptr_null(pkey = PEM_read_bio_PrivateKey(key_bio, NULL, NULL, NULL)))
+ goto err;
+
+ ERR_clear_error();
+ if (!TEST_int_ge(BIO_seek(key_bio, 0), 0))
+ goto err;
+ ok = TEST_ptr(pkey = d2i_PrivateKey_bio(key_bio, NULL));
+ TEST_int_eq(ERR_peek_error(), 0);
+ test_openssl_errors();
+
+ err:
+ EVP_PKEY_free(pkey);
+ BIO_free(key_bio);
+ OSSL_PROVIDER_unload(provider);
+
+ return ok;
+}
+
+static int test_PEM_read_bio_negative(int testid)
+{
+ int ok = 0;
+ OSSL_PROVIDER *provider = NULL;
+ BIO *key_bio = NULL;
+ EVP_PKEY *pkey = NULL;
+
+ if (!TEST_ptr(key_bio = BIO_new_mem_buf(keydata[testid].kder, keydata[testid].size)))
+ goto err;
+ ERR_clear_error();
+ if (!TEST_ptr_null(pkey = PEM_read_bio_PrivateKey(key_bio, NULL, NULL, NULL)))
+ goto err;
+ if (!TEST_int_ne(ERR_peek_error(), 0))
+ goto err;
+ if (!TEST_ptr(provider = OSSL_PROVIDER_load(NULL, "default")))
+ goto err;
+ if (!TEST_int_ge(BIO_seek(key_bio, 0), 0))
+ goto err;
+ ERR_clear_error();
+ if (!TEST_ptr_null(pkey = PEM_read_bio_PrivateKey(key_bio, NULL, NULL, NULL)))
+ goto err;
+ if (!TEST_int_ne(ERR_peek_error(), 0))
+ goto err;
+
+ ok = 1;
+
+ err:
+ test_openssl_errors();
+ EVP_PKEY_free(pkey);
+ BIO_free(key_bio);
+ OSSL_PROVIDER_unload(provider);
+
+ return ok;
+}
+
+static int test_PEM_read_bio_negative_wrong_password(int testid)
+{
+ int ok = 0;
+ OSSL_PROVIDER *provider = OSSL_PROVIDER_load(NULL, "default");
+ EVP_PKEY *read_pkey = NULL;
+ EVP_PKEY *write_pkey = EVP_RSA_gen(1024);
+ BIO *key_bio = BIO_new(BIO_s_mem());
+ const UI_METHOD *undo_ui_method = NULL;
+ const UI_METHOD *ui_method = NULL;
+ if (testid > 0)
+ ui_method = UI_null();
+
+ if (!TEST_ptr(provider))
+ goto err;
+ if (!TEST_ptr(key_bio))
+ goto err;
+ if (!TEST_ptr(write_pkey))
+ goto err;
+ undo_ui_method = UI_get_default_method();
+ UI_set_default_method(ui_method);
+
+ if (/* Output Encrypted private key in PEM form */
+ !TEST_true(PEM_write_bio_PrivateKey(key_bio, write_pkey, EVP_aes_256_cbc(),
+ NULL, 0, NULL, "pass")))
+ goto err;
+
+ ERR_clear_error();
+ read_pkey = PEM_read_bio_PrivateKey(key_bio, NULL, NULL, NULL);
+ if (!TEST_ptr_null(read_pkey))
+ goto err;
+
+ if (!TEST_int_eq(ERR_GET_REASON(ERR_get_error()), PEM_R_PROBLEMS_GETTING_PASSWORD))
+ goto err;
+ ok = 1;
+
+ err:
+ test_openssl_errors();
+ EVP_PKEY_free(read_pkey);
+ EVP_PKEY_free(write_pkey);
+ BIO_free(key_bio);
+ OSSL_PROVIDER_unload(provider);
+ UI_set_default_method(undo_ui_method);
+
+ return ok;
+}
+
+static int do_fromdata_key_is_equal(const OSSL_PARAM params[],
+ const EVP_PKEY *expected, const char *type)
+{
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ int ret;
+
+ ret = TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(mainctx, type, NULL))
+ && TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ && TEST_int_eq(EVP_PKEY_fromdata(ctx, &pkey,
+ EVP_PKEY_KEYPAIR,
+ (OSSL_PARAM *)params), 1)
+ && TEST_true(EVP_PKEY_eq(pkey, expected));
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_DSA
+/*
+ * This data was generated using:
+ * > openssl genpkey \
+ * -genparam -algorithm DSA -pkeyopt type:fips186_4 -text \
+ * -pkeyopt gindex:5 -out dsa_param.pem
+ * > openssl genpkey \
+ * -paramfile dsa_param.pem -pkeyopt type:fips186_4 -out dsa_priv.pem
+ */
+static const unsigned char dsa_key[] = {
+ 0x30, 0x82, 0x03, 0x4e, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
+ 0xda, 0xb3, 0x46, 0x4d, 0x54, 0x57, 0xc7, 0xb4, 0x61, 0xa0, 0x6f, 0x66,
+ 0x17, 0xda, 0xeb, 0x90, 0xf0, 0xa3, 0xd1, 0x29, 0xc9, 0x5f, 0xf2, 0x21,
+ 0x3d, 0x85, 0xa3, 0x4a, 0xf0, 0xf8, 0x36, 0x39, 0x1b, 0xe3, 0xee, 0x37,
+ 0x70, 0x06, 0x9b, 0xe8, 0xe3, 0x0a, 0xd2, 0xf1, 0xf6, 0xc4, 0x42, 0x23,
+ 0x1f, 0x74, 0x78, 0xc2, 0x16, 0xf5, 0xce, 0xd6, 0xab, 0xa0, 0xc6, 0xe8,
+ 0x99, 0x3d, 0xf8, 0x8b, 0xfb, 0x47, 0xf8, 0x5e, 0x05, 0x68, 0x6d, 0x8b,
+ 0xa8, 0xad, 0xa1, 0xc2, 0x3a, 0x4e, 0xe0, 0xad, 0xec, 0x38, 0x75, 0x21,
+ 0x55, 0x22, 0xce, 0xa2, 0xe9, 0xe5, 0x3b, 0xd7, 0x44, 0xeb, 0x5a, 0x03,
+ 0x59, 0xa0, 0xc5, 0x7a, 0x92, 0x59, 0x7d, 0x7a, 0x07, 0x80, 0xfc, 0x4e,
+ 0xf8, 0x56, 0x7e, 0xf1, 0x06, 0xe0, 0xba, 0xb2, 0xe7, 0x5b, 0x22, 0x55,
+ 0xee, 0x4b, 0x42, 0x61, 0x67, 0x2c, 0x43, 0x9a, 0x38, 0x2b, 0x17, 0xc2,
+ 0x62, 0x12, 0x8b, 0x0b, 0x22, 0x8c, 0x0c, 0x1c, 0x1c, 0x92, 0xb1, 0xec,
+ 0x70, 0xce, 0x0f, 0x8c, 0xff, 0x8d, 0x21, 0xf9, 0x19, 0x68, 0x4d, 0x32,
+ 0x59, 0x78, 0x42, 0x1d, 0x0c, 0xc5, 0x1a, 0xcb, 0x28, 0xe2, 0xc1, 0x1a,
+ 0x35, 0xf1, 0x42, 0x0a, 0x19, 0x39, 0xfa, 0x83, 0xd1, 0xb4, 0xaa, 0x69,
+ 0x0f, 0xc2, 0x8e, 0xf9, 0x59, 0x2c, 0xee, 0x11, 0xfc, 0x3e, 0x4b, 0x44,
+ 0xfb, 0x9a, 0x32, 0xc8, 0x78, 0x23, 0x56, 0x85, 0x49, 0x21, 0x43, 0x12,
+ 0x79, 0xbd, 0xa0, 0x70, 0x47, 0x2f, 0xae, 0xb6, 0xd7, 0x6c, 0xc6, 0x07,
+ 0x76, 0xa9, 0x8a, 0xa2, 0x16, 0x02, 0x89, 0x1f, 0x1a, 0xd1, 0xa2, 0x96,
+ 0x56, 0xd1, 0x1f, 0x10, 0xe1, 0xe5, 0x9f, 0x3f, 0xdd, 0x09, 0x0c, 0x40,
+ 0x90, 0x71, 0xef, 0x14, 0x41, 0x02, 0x82, 0x3a, 0x6b, 0xe1, 0xf8, 0x2c,
+ 0x5d, 0xbe, 0xfd, 0x1b, 0x02, 0x1d, 0x00, 0xe0, 0x20, 0xe0, 0x7c, 0x02,
+ 0x16, 0xa7, 0x6c, 0x6a, 0x19, 0xba, 0xd5, 0x83, 0x73, 0xf3, 0x7d, 0x31,
+ 0xef, 0xa7, 0xe1, 0x5d, 0x5b, 0x7f, 0xf3, 0xfc, 0xda, 0x84, 0x31, 0x02,
+ 0x82, 0x01, 0x01, 0x00, 0x83, 0xdb, 0xa1, 0xbc, 0x3e, 0xc7, 0x29, 0xa5,
+ 0x6a, 0x5c, 0x2c, 0xe8, 0x7a, 0x8c, 0x7e, 0xe8, 0xb8, 0x3e, 0x13, 0x47,
+ 0xcd, 0x36, 0x7e, 0x79, 0x30, 0x7a, 0x28, 0x03, 0xd3, 0xd4, 0xd2, 0xe3,
+ 0xee, 0x3b, 0x46, 0xda, 0xe0, 0x71, 0xe6, 0xcf, 0x46, 0x86, 0x0a, 0x37,
+ 0x57, 0xb6, 0xe9, 0xcf, 0xa1, 0x78, 0x19, 0xb8, 0x72, 0x9f, 0x30, 0x8c,
+ 0x2a, 0x04, 0x7c, 0x2f, 0x0c, 0x27, 0xa7, 0xb3, 0x23, 0xe0, 0x46, 0xf2,
+ 0x75, 0x0c, 0x03, 0x4c, 0xad, 0xfb, 0xc1, 0xcb, 0x28, 0xcd, 0xa0, 0x63,
+ 0xdb, 0x44, 0x88, 0xe0, 0xda, 0x6c, 0x5b, 0x89, 0xb2, 0x5b, 0x40, 0x6d,
+ 0xeb, 0x78, 0x7a, 0xd5, 0xaf, 0x40, 0x52, 0x46, 0x63, 0x92, 0x13, 0x0d,
+ 0xee, 0xee, 0xf9, 0x53, 0xca, 0x2d, 0x4e, 0x3b, 0x13, 0xd8, 0x0f, 0x50,
+ 0xd0, 0x44, 0x57, 0x67, 0x0f, 0x45, 0x8f, 0x21, 0x30, 0x97, 0x9e, 0x80,
+ 0xd9, 0xd0, 0x91, 0xb7, 0xc9, 0x5a, 0x69, 0xda, 0xeb, 0xd5, 0xea, 0x37,
+ 0xf6, 0xb3, 0xbe, 0x1f, 0x24, 0xf1, 0x55, 0x14, 0x28, 0x05, 0xb5, 0xd8,
+ 0x84, 0x0f, 0x62, 0x85, 0xaa, 0xec, 0x77, 0x64, 0xfd, 0x80, 0x7c, 0x41,
+ 0x00, 0x88, 0xa3, 0x79, 0x7d, 0x4f, 0x6f, 0xe3, 0x76, 0xf4, 0xb5, 0x97,
+ 0xb7, 0xeb, 0x67, 0x28, 0xba, 0x07, 0x1a, 0x59, 0x32, 0xc1, 0x53, 0xd9,
+ 0x05, 0x6b, 0x63, 0x93, 0xce, 0xa1, 0xd9, 0x7a, 0xb2, 0xff, 0x1c, 0x12,
+ 0x0a, 0x9a, 0xe5, 0x51, 0x1e, 0xba, 0xfc, 0x95, 0x2e, 0x28, 0xa9, 0xfc,
+ 0x4c, 0xed, 0x7b, 0x05, 0xca, 0x67, 0xe0, 0x2d, 0xd7, 0x54, 0xb3, 0x05,
+ 0x1c, 0x23, 0x2b, 0x35, 0x2e, 0x19, 0x48, 0x59, 0x0e, 0x58, 0xa8, 0x01,
+ 0x56, 0xfb, 0x78, 0x90, 0xba, 0x08, 0x77, 0x94, 0x45, 0x05, 0x13, 0xc7,
+ 0x6b, 0x96, 0xd2, 0xa3, 0xa6, 0x01, 0x9f, 0x34, 0x02, 0x82, 0x01, 0x00,
+ 0x16, 0x1a, 0xb4, 0x6d, 0x9f, 0x16, 0x6c, 0xcc, 0x91, 0x66, 0xfe, 0x30,
+ 0xeb, 0x8e, 0x44, 0xba, 0x2b, 0x7a, 0xc9, 0xa8, 0x95, 0xf2, 0xa6, 0x38,
+ 0xd8, 0xaf, 0x3e, 0x91, 0x68, 0xe8, 0x52, 0xf3, 0x97, 0x37, 0x70, 0xf2,
+ 0x47, 0xa3, 0xf4, 0x62, 0x26, 0xf5, 0x3b, 0x71, 0x52, 0x50, 0x15, 0x9c,
+ 0x6d, 0xa6, 0x6d, 0x92, 0x4c, 0x48, 0x76, 0x31, 0x54, 0x48, 0xa5, 0x99,
+ 0x7a, 0xd4, 0x61, 0xf7, 0x21, 0x44, 0xe7, 0xd8, 0x82, 0xc3, 0x50, 0xd3,
+ 0xd9, 0xd4, 0x66, 0x20, 0xab, 0x70, 0x4c, 0x97, 0x9b, 0x8d, 0xac, 0x1f,
+ 0x78, 0x27, 0x1e, 0x47, 0xf8, 0x3b, 0xd1, 0x55, 0x73, 0xf3, 0xb4, 0x8e,
+ 0x6d, 0x45, 0x40, 0x54, 0xc6, 0xd8, 0x95, 0x15, 0x27, 0xb7, 0x5f, 0x65,
+ 0xaa, 0xcb, 0x24, 0xc9, 0x49, 0x87, 0x32, 0xad, 0xcb, 0xf8, 0x35, 0x63,
+ 0x56, 0x72, 0x7c, 0x4e, 0x6c, 0xad, 0x5f, 0x26, 0x8c, 0xd2, 0x80, 0x41,
+ 0xaf, 0x88, 0x23, 0x20, 0x03, 0xa4, 0xd5, 0x3c, 0x53, 0x54, 0xb0, 0x3d,
+ 0xed, 0x0e, 0x9e, 0x53, 0x0a, 0x63, 0x5f, 0xfd, 0x28, 0x57, 0x09, 0x07,
+ 0x73, 0xf4, 0x0c, 0xd4, 0x71, 0x5d, 0x6b, 0xa0, 0xd7, 0x86, 0x99, 0x29,
+ 0x9b, 0xca, 0xfb, 0xcc, 0xd6, 0x2f, 0xfe, 0xbe, 0x94, 0xef, 0x1a, 0x0e,
+ 0x55, 0x84, 0xa7, 0xaf, 0x7b, 0xfa, 0xed, 0x77, 0x61, 0x28, 0x22, 0xee,
+ 0x6b, 0x11, 0xdd, 0xb0, 0x17, 0x1e, 0x06, 0xe4, 0x29, 0x4c, 0xc2, 0x3f,
+ 0xd6, 0x75, 0xb6, 0x08, 0x04, 0x55, 0x13, 0x48, 0x4f, 0x44, 0xea, 0x8d,
+ 0xaf, 0xcb, 0xac, 0x22, 0xc4, 0x6a, 0xb3, 0x86, 0xe5, 0x47, 0xa9, 0xb5,
+ 0x72, 0x17, 0x23, 0x11, 0x81, 0x7f, 0x00, 0x00, 0x67, 0x5c, 0xf4, 0x58,
+ 0xcc, 0xe2, 0x46, 0xce, 0xf5, 0x6d, 0xd8, 0x18, 0x91, 0xc4, 0x20, 0xbf,
+ 0x07, 0x48, 0x45, 0xfd, 0x02, 0x1c, 0x2f, 0x68, 0x44, 0xcb, 0xfb, 0x6b,
+ 0xcb, 0x8d, 0x02, 0x49, 0x7c, 0xee, 0xd2, 0xa6, 0xd3, 0x43, 0xb8, 0xa4,
+ 0x09, 0xb7, 0xc1, 0xd4, 0x4b, 0xc3, 0x66, 0xa7, 0xe0, 0x21,
+};
+static const unsigned char dsa_p[] = {
+ 0x00, 0xda, 0xb3, 0x46, 0x4d, 0x54, 0x57, 0xc7, 0xb4, 0x61, 0xa0, 0x6f, 0x66, 0x17, 0xda,
+ 0xeb, 0x90, 0xf0, 0xa3, 0xd1, 0x29, 0xc9, 0x5f, 0xf2, 0x21, 0x3d, 0x85, 0xa3, 0x4a, 0xf0,
+ 0xf8, 0x36, 0x39, 0x1b, 0xe3, 0xee, 0x37, 0x70, 0x06, 0x9b, 0xe8, 0xe3, 0x0a, 0xd2, 0xf1,
+ 0xf6, 0xc4, 0x42, 0x23, 0x1f, 0x74, 0x78, 0xc2, 0x16, 0xf5, 0xce, 0xd6, 0xab, 0xa0, 0xc6,
+ 0xe8, 0x99, 0x3d, 0xf8, 0x8b, 0xfb, 0x47, 0xf8, 0x5e, 0x05, 0x68, 0x6d, 0x8b, 0xa8, 0xad,
+ 0xa1, 0xc2, 0x3a, 0x4e, 0xe0, 0xad, 0xec, 0x38, 0x75, 0x21, 0x55, 0x22, 0xce, 0xa2, 0xe9,
+ 0xe5, 0x3b, 0xd7, 0x44, 0xeb, 0x5a, 0x03, 0x59, 0xa0, 0xc5, 0x7a, 0x92, 0x59, 0x7d, 0x7a,
+ 0x07, 0x80, 0xfc, 0x4e, 0xf8, 0x56, 0x7e, 0xf1, 0x06, 0xe0, 0xba, 0xb2, 0xe7, 0x5b, 0x22,
+ 0x55, 0xee, 0x4b, 0x42, 0x61, 0x67, 0x2c, 0x43, 0x9a, 0x38, 0x2b, 0x17, 0xc2, 0x62, 0x12,
+ 0x8b, 0x0b, 0x22, 0x8c, 0x0c, 0x1c, 0x1c, 0x92, 0xb1, 0xec, 0x70, 0xce, 0x0f, 0x8c, 0xff,
+ 0x8d, 0x21, 0xf9, 0x19, 0x68, 0x4d, 0x32, 0x59, 0x78, 0x42, 0x1d, 0x0c, 0xc5, 0x1a, 0xcb,
+ 0x28, 0xe2, 0xc1, 0x1a, 0x35, 0xf1, 0x42, 0x0a, 0x19, 0x39, 0xfa, 0x83, 0xd1, 0xb4, 0xaa,
+ 0x69, 0x0f, 0xc2, 0x8e, 0xf9, 0x59, 0x2c, 0xee, 0x11, 0xfc, 0x3e, 0x4b, 0x44, 0xfb, 0x9a,
+ 0x32, 0xc8, 0x78, 0x23, 0x56, 0x85, 0x49, 0x21, 0x43, 0x12, 0x79, 0xbd, 0xa0, 0x70, 0x47,
+ 0x2f, 0xae, 0xb6, 0xd7, 0x6c, 0xc6, 0x07, 0x76, 0xa9, 0x8a, 0xa2, 0x16, 0x02, 0x89, 0x1f,
+ 0x1a, 0xd1, 0xa2, 0x96, 0x56, 0xd1, 0x1f, 0x10, 0xe1, 0xe5, 0x9f, 0x3f, 0xdd, 0x09, 0x0c,
+ 0x40, 0x90, 0x71, 0xef, 0x14, 0x41, 0x02, 0x82, 0x3a, 0x6b, 0xe1, 0xf8, 0x2c, 0x5d, 0xbe,
+ 0xfd, 0x1b
+};
+static const unsigned char dsa_q[] = {
+ 0x00, 0xe0, 0x20, 0xe0, 0x7c, 0x02, 0x16, 0xa7, 0x6c, 0x6a, 0x19, 0xba, 0xd5, 0x83, 0x73,
+ 0xf3, 0x7d, 0x31, 0xef, 0xa7, 0xe1, 0x5d, 0x5b, 0x7f, 0xf3, 0xfc, 0xda, 0x84, 0x31
+};
+static const unsigned char dsa_g[] = {
+ 0x00, 0x83, 0xdb, 0xa1, 0xbc, 0x3e, 0xc7, 0x29, 0xa5, 0x6a, 0x5c, 0x2c, 0xe8, 0x7a, 0x8c,
+ 0x7e, 0xe8, 0xb8, 0x3e, 0x13, 0x47, 0xcd, 0x36, 0x7e, 0x79, 0x30, 0x7a, 0x28, 0x03, 0xd3,
+ 0xd4, 0xd2, 0xe3, 0xee, 0x3b, 0x46, 0xda, 0xe0, 0x71, 0xe6, 0xcf, 0x46, 0x86, 0x0a, 0x37,
+ 0x57, 0xb6, 0xe9, 0xcf, 0xa1, 0x78, 0x19, 0xb8, 0x72, 0x9f, 0x30, 0x8c, 0x2a, 0x04, 0x7c,
+ 0x2f, 0x0c, 0x27, 0xa7, 0xb3, 0x23, 0xe0, 0x46, 0xf2, 0x75, 0x0c, 0x03, 0x4c, 0xad, 0xfb,
+ 0xc1, 0xcb, 0x28, 0xcd, 0xa0, 0x63, 0xdb, 0x44, 0x88, 0xe0, 0xda, 0x6c, 0x5b, 0x89, 0xb2,
+ 0x5b, 0x40, 0x6d, 0xeb, 0x78, 0x7a, 0xd5, 0xaf, 0x40, 0x52, 0x46, 0x63, 0x92, 0x13, 0x0d,
+ 0xee, 0xee, 0xf9, 0x53, 0xca, 0x2d, 0x4e, 0x3b, 0x13, 0xd8, 0x0f, 0x50, 0xd0, 0x44, 0x57,
+ 0x67, 0x0f, 0x45, 0x8f, 0x21, 0x30, 0x97, 0x9e, 0x80, 0xd9, 0xd0, 0x91, 0xb7, 0xc9, 0x5a,
+ 0x69, 0xda, 0xeb, 0xd5, 0xea, 0x37, 0xf6, 0xb3, 0xbe, 0x1f, 0x24, 0xf1, 0x55, 0x14, 0x28,
+ 0x05, 0xb5, 0xd8, 0x84, 0x0f, 0x62, 0x85, 0xaa, 0xec, 0x77, 0x64, 0xfd, 0x80, 0x7c, 0x41,
+ 0x00, 0x88, 0xa3, 0x79, 0x7d, 0x4f, 0x6f, 0xe3, 0x76, 0xf4, 0xb5, 0x97, 0xb7, 0xeb, 0x67,
+ 0x28, 0xba, 0x07, 0x1a, 0x59, 0x32, 0xc1, 0x53, 0xd9, 0x05, 0x6b, 0x63, 0x93, 0xce, 0xa1,
+ 0xd9, 0x7a, 0xb2, 0xff, 0x1c, 0x12, 0x0a, 0x9a, 0xe5, 0x51, 0x1e, 0xba, 0xfc, 0x95, 0x2e,
+ 0x28, 0xa9, 0xfc, 0x4c, 0xed, 0x7b, 0x05, 0xca, 0x67, 0xe0, 0x2d, 0xd7, 0x54, 0xb3, 0x05,
+ 0x1c, 0x23, 0x2b, 0x35, 0x2e, 0x19, 0x48, 0x59, 0x0e, 0x58, 0xa8, 0x01, 0x56, 0xfb, 0x78,
+ 0x90, 0xba, 0x08, 0x77, 0x94, 0x45, 0x05, 0x13, 0xc7, 0x6b, 0x96, 0xd2, 0xa3, 0xa6, 0x01,
+ 0x9f, 0x34
+};
+static const unsigned char dsa_priv[] = {
+ 0x2f, 0x68, 0x44, 0xcb, 0xfb, 0x6b, 0xcb, 0x8d, 0x02, 0x49, 0x7c, 0xee, 0xd2, 0xa6, 0xd3,
+ 0x43, 0xb8, 0xa4, 0x09, 0xb7, 0xc1, 0xd4, 0x4b, 0xc3, 0x66, 0xa7, 0xe0, 0x21
+};
+static const unsigned char dsa_pub[] = {
+ 0x16, 0x1a, 0xb4, 0x6d, 0x9f, 0x16, 0x6c, 0xcc, 0x91, 0x66, 0xfe, 0x30, 0xeb, 0x8e, 0x44,
+ 0xba, 0x2b, 0x7a, 0xc9, 0xa8, 0x95, 0xf2, 0xa6, 0x38, 0xd8, 0xaf, 0x3e, 0x91, 0x68, 0xe8,
+ 0x52, 0xf3, 0x97, 0x37, 0x70, 0xf2, 0x47, 0xa3, 0xf4, 0x62, 0x26, 0xf5, 0x3b, 0x71, 0x52,
+ 0x50, 0x15, 0x9c, 0x6d, 0xa6, 0x6d, 0x92, 0x4c, 0x48, 0x76, 0x31, 0x54, 0x48, 0xa5, 0x99,
+ 0x7a, 0xd4, 0x61, 0xf7, 0x21, 0x44, 0xe7, 0xd8, 0x82, 0xc3, 0x50, 0xd3, 0xd9, 0xd4, 0x66,
+ 0x20, 0xab, 0x70, 0x4c, 0x97, 0x9b, 0x8d, 0xac, 0x1f, 0x78, 0x27, 0x1e, 0x47, 0xf8, 0x3b,
+ 0xd1, 0x55, 0x73, 0xf3, 0xb4, 0x8e, 0x6d, 0x45, 0x40, 0x54, 0xc6, 0xd8, 0x95, 0x15, 0x27,
+ 0xb7, 0x5f, 0x65, 0xaa, 0xcb, 0x24, 0xc9, 0x49, 0x87, 0x32, 0xad, 0xcb, 0xf8, 0x35, 0x63,
+ 0x56, 0x72, 0x7c, 0x4e, 0x6c, 0xad, 0x5f, 0x26, 0x8c, 0xd2, 0x80, 0x41, 0xaf, 0x88, 0x23,
+ 0x20, 0x03, 0xa4, 0xd5, 0x3c, 0x53, 0x54, 0xb0, 0x3d, 0xed, 0x0e, 0x9e, 0x53, 0x0a, 0x63,
+ 0x5f, 0xfd, 0x28, 0x57, 0x09, 0x07, 0x73, 0xf4, 0x0c, 0xd4, 0x71, 0x5d, 0x6b, 0xa0, 0xd7,
+ 0x86, 0x99, 0x29, 0x9b, 0xca, 0xfb, 0xcc, 0xd6, 0x2f, 0xfe, 0xbe, 0x94, 0xef, 0x1a, 0x0e,
+ 0x55, 0x84, 0xa7, 0xaf, 0x7b, 0xfa, 0xed, 0x77, 0x61, 0x28, 0x22, 0xee, 0x6b, 0x11, 0xdd,
+ 0xb0, 0x17, 0x1e, 0x06, 0xe4, 0x29, 0x4c, 0xc2, 0x3f, 0xd6, 0x75, 0xb6, 0x08, 0x04, 0x55,
+ 0x13, 0x48, 0x4f, 0x44, 0xea, 0x8d, 0xaf, 0xcb, 0xac, 0x22, 0xc4, 0x6a, 0xb3, 0x86, 0xe5,
+ 0x47, 0xa9, 0xb5, 0x72, 0x17, 0x23, 0x11, 0x81, 0x7f, 0x00, 0x00, 0x67, 0x5c, 0xf4, 0x58,
+ 0xcc, 0xe2, 0x46, 0xce, 0xf5, 0x6d, 0xd8, 0x18, 0x91, 0xc4, 0x20, 0xbf, 0x07, 0x48, 0x45,
+ 0xfd
+};
+
+static int do_check_params(OSSL_PARAM key_params[], int expected)
+{
+ EVP_PKEY_CTX *gen_ctx = NULL, *check_ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ int ret;
+
+ ret = TEST_ptr(gen_ctx = EVP_PKEY_CTX_new_from_name(mainctx, "DSA", NULL))
+ && TEST_int_eq(EVP_PKEY_fromdata_init(gen_ctx), 1)
+ && TEST_int_eq(EVP_PKEY_fromdata(gen_ctx, &pkey,
+ EVP_PKEY_KEYPAIR, key_params), 1)
+ && TEST_ptr(check_ctx = EVP_PKEY_CTX_new_from_pkey(mainctx, pkey,
+ NULL))
+ && TEST_int_eq(EVP_PKEY_param_check(check_ctx), expected);
+ EVP_PKEY_CTX_free(check_ctx);
+ EVP_PKEY_CTX_free(gen_ctx);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static int do_check_bn(OSSL_PARAM params[], const char *key,
+ const unsigned char *expected, size_t expected_len)
+{
+ OSSL_PARAM *p;
+ BIGNUM *bn = NULL;
+ unsigned char buffer[256 + 1];
+ int ret, len;
+
+ ret = TEST_ptr(p = OSSL_PARAM_locate(params, key))
+ && TEST_true(OSSL_PARAM_get_BN(p, &bn))
+ && TEST_int_gt(len = BN_bn2binpad(bn, buffer, expected_len), 0)
+ && TEST_mem_eq(expected, expected_len, buffer, len);
+ BN_free(bn);
+ return ret;
+}
+
+static int do_check_int(OSSL_PARAM params[], const char *key, int expected)
+{
+ OSSL_PARAM *p;
+ int val = 0;
+
+ return TEST_ptr(p = OSSL_PARAM_locate(params, key))
+ && TEST_true(OSSL_PARAM_get_int(p, &val))
+ && TEST_int_eq(val, expected);
+}
+
+static int test_dsa_tofrom_data_select(void)
+{
+ int ret;
+ EVP_PKEY *key = NULL;
+ const unsigned char *pkeydata = dsa_key;
+
+ ret = TEST_ptr(key = d2i_AutoPrivateKey_ex(NULL, &pkeydata, sizeof(dsa_key),
+ mainctx, NULL))
+ && TEST_true(do_pkey_tofrom_data_select(key, "DSA"));
+
+ EVP_PKEY_free(key);
+ return ret;
+}
+
+static int test_dsa_todata(void)
+{
+ EVP_PKEY *pkey = NULL;
+ OSSL_PARAM *to_params = NULL, *all_params = NULL;
+ OSSL_PARAM gen_params[4];
+ int ret = 0;
+ const unsigned char *pkeydata = dsa_key;
+
+ unsigned char dsa_seed[] = {
+ 0xbc, 0x8a, 0x81, 0x64, 0x9e, 0x9d, 0x63, 0xa7, 0xa3, 0x5d, 0x87, 0xdd,
+ 0x32, 0xf3, 0xc1, 0x9f, 0x18, 0x22, 0xeb, 0x73, 0x63, 0xad, 0x5e, 0x7b,
+ 0x90, 0xc1, 0xe3, 0xe0
+ };
+ int dsa_pcounter = 319;
+ int dsa_gindex = 5;
+
+ gen_params[0] = OSSL_PARAM_construct_octet_string(OSSL_PKEY_PARAM_FFC_SEED,
+ (void*)dsa_seed,
+ sizeof(dsa_seed));
+ gen_params[1] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_GINDEX,
+ &dsa_gindex);
+ gen_params[2] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_PCOUNTER,
+ &dsa_pcounter);
+ gen_params[3] = OSSL_PARAM_construct_end();
+
+ if (!TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pkeydata, sizeof(dsa_key),
+ mainctx, NULL))
+ || !TEST_int_eq(EVP_PKEY_todata(pkey, EVP_PKEY_KEYPAIR, &to_params), 1)
+ || !do_check_bn(to_params, OSSL_PKEY_PARAM_FFC_P, dsa_p, sizeof(dsa_p))
+ || !do_check_bn(to_params, OSSL_PKEY_PARAM_FFC_Q, dsa_q, sizeof(dsa_q))
+ || !do_check_bn(to_params, OSSL_PKEY_PARAM_FFC_G, dsa_g, sizeof(dsa_g))
+ || !do_check_bn(to_params, OSSL_PKEY_PARAM_PUB_KEY, dsa_pub,
+ sizeof(dsa_pub))
+ || !do_check_bn(to_params, OSSL_PKEY_PARAM_PRIV_KEY, dsa_priv,
+ sizeof(dsa_priv))
+ || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_GINDEX, -1)
+ || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_PCOUNTER, -1)
+ || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_H, 0)
+ || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_VALIDATE_PQ, 1)
+ || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_VALIDATE_G, 1)
+ || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY, 0)
+ || !TEST_ptr_null(OSSL_PARAM_locate(to_params, OSSL_PKEY_PARAM_FFC_SEED)))
+ goto err;
+
+ if (!do_fromdata_key_is_equal(to_params, pkey, "DSA"))
+ goto err;
+
+ if (!TEST_ptr(all_params = OSSL_PARAM_merge(to_params, gen_params))
+ || !do_check_params(all_params, 1))
+ goto err;
+ gen_params[1] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_GINDEX,
+ &dsa_gindex);
+ gen_params[2] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_PCOUNTER,
+ &dsa_pcounter);
+ /*
+ * Check that modifying the shallow copy values used in OSSL_PARAM_merge()
+ * results in an invalid key. This also verifies that the fips186-4
+ * validation code is running.
+ */
+ dsa_gindex++;
+ if (!do_check_params(all_params, 0))
+ goto err;
+ dsa_gindex--;
+ dsa_pcounter++;
+ if (!do_check_params(all_params, 0))
+ goto err;
+ dsa_pcounter--;
+ dsa_seed[0] = 0xb0;
+ if (!do_check_params(all_params, 0))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_PKEY_free(pkey);
+ OSSL_PARAM_free(all_params);
+ OSSL_PARAM_free(to_params);
+ return ret;
+}
+
+/*
+ * Test that OSSL_PKEY_PARAM_FFC_DIGEST_PROPS is set properly when using fromdata
+ * This test:
+ * checks for failure when the property query is bad (tstid == 0)
+ * checks for success when the property query is valid (tstid == 1)
+ */
+static int test_dsa_fromdata_digest_prop(int tstid)
+{
+ EVP_PKEY_CTX *ctx = NULL, *gctx = NULL;
+ EVP_PKEY *pkey = NULL, *pkey2 = NULL;
+ OSSL_PARAM params[4], *p = params;
+ int ret = 0;
+ int expected = (tstid == 0 ? 0 : 1);
+ unsigned int pbits = 512; /* minimum allowed for speed */
+
+ *p++ = OSSL_PARAM_construct_uint(OSSL_PKEY_PARAM_FFC_PBITS, &pbits);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST, "SHA512", 0);
+ /* Setting a bad prop query here should fail during paramgen - when it tries to do a fetch */
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_DIGEST_PROPS,
+ tstid == 0 ? "provider=unknown" : "provider=default", 0);
+ *p++ = OSSL_PARAM_construct_end();
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(mainctx, "DSA", NULL))
+ || !TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, &pkey, EVP_PKEY_KEY_PARAMETERS, params), 1))
+ goto err;
+
+ if (!TEST_ptr(gctx = EVP_PKEY_CTX_new_from_pkey(mainctx, pkey, NULL))
+ || !TEST_int_eq(EVP_PKEY_paramgen_init(gctx), 1)
+ || !TEST_int_eq(EVP_PKEY_paramgen(gctx, &pkey2), expected))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_PKEY_free(pkey2);
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_CTX_free(gctx);
+ return ret;
+}
+#endif /* OPENSSL_NO_DSA */
+
+static int test_pkey_todata_null(void)
+{
+ OSSL_PARAM *params = NULL;
+ EVP_PKEY *pkey = NULL;
+ int ret = 0;
+ const unsigned char *pdata = keydata[0].kder;
+
+ ret = TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pdata, keydata[0].size,
+ mainctx, NULL))
+ && TEST_int_eq(EVP_PKEY_todata(NULL, EVP_PKEY_KEYPAIR, &params), 0)
+ && TEST_int_eq(EVP_PKEY_todata(pkey, EVP_PKEY_KEYPAIR, NULL), 0);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static OSSL_CALLBACK test_pkey_export_cb;
+
+static int test_pkey_export_cb(const OSSL_PARAM params[], void *arg)
+{
+ if (arg == NULL)
+ return 0;
+ return do_fromdata_key_is_equal(params, (EVP_PKEY *)arg, "RSA");
+}
+
+static int test_pkey_export_null(void)
+{
+ EVP_PKEY *pkey = NULL;
+ int ret = 0;
+ const unsigned char *pdata = keydata[0].kder;
+
+ ret = TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pdata, keydata[0].size,
+ mainctx, NULL))
+ && TEST_int_eq(EVP_PKEY_export(NULL, EVP_PKEY_KEYPAIR,
+ test_pkey_export_cb, NULL), 0)
+ && TEST_int_eq(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR, NULL, NULL), 0);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static int test_pkey_export(void)
+{
+ EVP_PKEY *pkey = NULL;
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ RSA *rsa = NULL;
+#endif
+ int ret = 1;
+ const unsigned char *pdata = keydata[0].kder;
+ int pdata_len = keydata[0].size;
+
+ if (!TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pdata, pdata_len,
+ mainctx, NULL))
+ || !TEST_true(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR,
+ test_pkey_export_cb, pkey))
+ || !TEST_false(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR,
+ test_pkey_export_cb, NULL)))
+ ret = 0;
+ EVP_PKEY_free(pkey);
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ /* Now, try with a legacy key */
+ pdata = keydata[0].kder;
+ pdata_len = keydata[0].size;
+ if (!TEST_ptr(rsa = d2i_RSAPrivateKey(NULL, &pdata, pdata_len))
+ || !TEST_ptr(pkey = EVP_PKEY_new())
+ || !TEST_true(EVP_PKEY_assign_RSA(pkey, rsa))
+ || !TEST_true(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR,
+ test_pkey_export_cb, pkey))
+ || !TEST_false(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR,
+ test_pkey_export_cb, NULL)))
+ ret = 0;
+ EVP_PKEY_free(pkey);
+#endif
+ return ret;
+}
+
+static int test_rsa_pss_sign(void)
+{
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *pctx = NULL;
+ int ret = 0;
+ const unsigned char *pdata = keydata[0].kder;
+ const char *mdname = "SHA2-256";
+ OSSL_PARAM sig_params[3];
+ unsigned char mdbuf[256 / 8] = { 0 };
+ int padding = RSA_PKCS1_PSS_PADDING;
+ unsigned char *sig = NULL;
+ size_t sig_len = 0;
+
+ sig_params[0] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_PAD_MODE,
+ &padding);
+ sig_params[1] = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST,
+ (char *)mdname, 0);
+ sig_params[2] = OSSL_PARAM_construct_end();
+
+ ret = TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pdata, keydata[0].size,
+ mainctx, NULL))
+ && TEST_ptr(pctx = EVP_PKEY_CTX_new_from_pkey(mainctx, pkey, NULL))
+ && TEST_int_gt(EVP_PKEY_sign_init_ex(pctx, sig_params), 0)
+ && TEST_int_gt(EVP_PKEY_sign(pctx, NULL, &sig_len, mdbuf,
+ sizeof(mdbuf)), 0)
+ && TEST_int_gt(sig_len, 0)
+ && TEST_ptr(sig = OPENSSL_malloc(sig_len))
+ && TEST_int_gt(EVP_PKEY_sign(pctx, sig, &sig_len, mdbuf,
+ sizeof(mdbuf)), 0);
+
+ EVP_PKEY_CTX_free(pctx);
+ OPENSSL_free(sig);
+ EVP_PKEY_free(pkey);
+
+ return ret;
+}
+
+static int test_evp_md_ctx_copy(void)
+{
+ EVP_MD_CTX *mdctx = NULL;
+ EVP_MD_CTX *copyctx = NULL;
+ int ret;
+
+ /* test copying freshly initialized context */
+ ret = TEST_ptr(mdctx = EVP_MD_CTX_new())
+ && TEST_ptr(copyctx = EVP_MD_CTX_new())
+ && TEST_true(EVP_MD_CTX_copy_ex(copyctx, mdctx));
+
+ EVP_MD_CTX_free(mdctx);
+ EVP_MD_CTX_free(copyctx);
+ return ret;
+}
+
+#if !defined OPENSSL_NO_DES && !defined OPENSSL_NO_MD5
+static int test_evp_pbe_alg_add(void)
+{
+ int ret = 0;
+ int cipher_nid = 0, md_nid = 0;
+ EVP_PBE_KEYGEN_EX *keygen_ex = NULL;
+ EVP_PBE_KEYGEN *keygen = NULL;
+
+ if (!TEST_true(EVP_PBE_alg_add(NID_pbeWithMD5AndDES_CBC, EVP_des_cbc(), EVP_md5(),
+ PKCS5_PBE_keyivgen)))
+ goto err;
+
+ if (!TEST_true(EVP_PBE_find_ex(EVP_PBE_TYPE_OUTER, NID_pbeWithMD5AndDES_CBC,
+ &cipher_nid, &md_nid, &keygen, &keygen_ex)))
+ goto err;
+
+ if (!TEST_true(keygen != NULL))
+ goto err;
+ if (!TEST_true(keygen_ex == NULL))
+ goto err;
+
+ ret = 1;
+
+err:
+ return ret;
+}
+#endif
+
+/*
+ * Currently, EVP_<OBJ>_fetch doesn't support
+ * colon separated alternative names for lookup
+ * so add a test here to ensure that when one is provided
+ * libcrypto returns an error
+ */
+static int evp_test_name_parsing(void)
+{
+ EVP_MD *md;
+
+ if (!TEST_ptr_null(md = EVP_MD_fetch(mainctx, "SHA256:BogusName", NULL))) {
+ EVP_MD_free(md);
+ return 0;
+ }
+
+ return 1;
+}
+
+int setup_tests(void)
+{
+ if (!test_get_libctx(&mainctx, &nullprov, NULL, NULL, NULL)) {
+ OSSL_LIB_CTX_free(mainctx);
+ mainctx = NULL;
+ return 0;
+ }
+
+ ADD_TEST(evp_test_name_parsing);
+ ADD_TEST(test_alternative_default);
+ ADD_ALL_TESTS(test_d2i_AutoPrivateKey_ex, OSSL_NELEM(keydata));
+#ifndef OPENSSL_NO_EC
+ ADD_ALL_TESTS(test_d2i_PrivateKey_ex, 2);
+ ADD_TEST(test_ec_tofrom_data_select);
+ ADD_TEST(test_ecx_tofrom_data_select);
+#else
+ ADD_ALL_TESTS(test_d2i_PrivateKey_ex, 1);
+#endif
+#ifndef OPENSSL_NO_SM2
+ ADD_TEST(test_sm2_tofrom_data_select);
+#endif
+#ifndef OPENSSL_NO_DSA
+ ADD_TEST(test_dsa_todata);
+ ADD_TEST(test_dsa_tofrom_data_select);
+ ADD_ALL_TESTS(test_dsa_fromdata_digest_prop, 2);
+#endif
+#ifndef OPENSSL_NO_DH
+ ADD_TEST(test_dh_tofrom_data_select);
+ ADD_TEST(test_dh_paramgen);
+#endif
+ ADD_TEST(test_rsa_tofrom_data_select);
+
+ ADD_TEST(test_pkey_todata_null);
+ ADD_TEST(test_pkey_export_null);
+ ADD_TEST(test_pkey_export);
+#ifndef OPENSSL_NO_DES
+ ADD_TEST(test_pkcs8key_nid_bio);
+#endif
+ ADD_ALL_TESTS(test_PEM_read_bio_negative, OSSL_NELEM(keydata));
+ ADD_ALL_TESTS(test_PEM_read_bio_negative_wrong_password, 2);
+ ADD_TEST(test_rsa_pss_sign);
+ ADD_TEST(test_evp_md_ctx_copy);
+ ADD_ALL_TESTS(test_provider_unload_effective, 2);
+#if !defined OPENSSL_NO_DES && !defined OPENSSL_NO_MD5
+ ADD_TEST(test_evp_pbe_alg_add);
+#endif
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OSSL_LIB_CTX_free(mainctx);
+ OSSL_PROVIDER_unload(nullprov);
+}
diff --git a/test/evp_fetch_prov_test.c b/test/evp_fetch_prov_test.c
new file mode 100644
index 000000000000..d237082bdcc0
--- /dev/null
+++ b/test/evp_fetch_prov_test.c
@@ -0,0 +1,392 @@
+/*
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * SHA256 low level APIs are deprecated for public use, but still ok for
+ * internal use. Note, that due to symbols not being exported, only the
+ * #defines can be accessed. In this case SHA256_CBLOCK.
+ */
+#include "internal/deprecated.h"
+
+#include <string.h>
+#include <openssl/sha.h>
+#include <openssl/evp.h>
+#include <openssl/provider.h>
+#include "internal/sizes.h"
+#include "testutil.h"
+
+static char *config_file = NULL;
+static char *alg = "digest";
+static int use_default_ctx = 0;
+static char *fetch_property = NULL;
+static int expected_fetch_result = 1;
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_ALG_FETCH_TYPE,
+ OPT_FETCH_PROPERTY,
+ OPT_FETCH_FAILURE,
+ OPT_USE_DEFAULTCTX,
+ OPT_CONFIG_FILE,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("[provname...]\n"),
+ { "config", OPT_CONFIG_FILE, '<', "The configuration file to use for the libctx" },
+ { "type", OPT_ALG_FETCH_TYPE, 's', "The fetch type to test" },
+ { "property", OPT_FETCH_PROPERTY, 's', "The fetch property e.g. provider=fips" },
+ { "fetchfail", OPT_FETCH_FAILURE, '-', "fetch is expected to fail" },
+ { "defaultctx", OPT_USE_DEFAULTCTX, '-',
+ "Use the default context if this is set" },
+ { OPT_HELP_STR, 1, '-', "file\tProvider names to explicitly load\n" },
+ { NULL }
+ };
+ return test_options;
+}
+
+static int calculate_digest(const EVP_MD *md, const char *msg, size_t len,
+ const unsigned char *exptd)
+{
+ unsigned char out[SHA256_DIGEST_LENGTH];
+ EVP_MD_CTX *ctx;
+ int ret = 0;
+
+ if (!TEST_ptr(ctx = EVP_MD_CTX_new())
+ || !TEST_true(EVP_DigestInit_ex(ctx, md, NULL))
+ || !TEST_true(EVP_DigestUpdate(ctx, msg, len))
+ || !TEST_true(EVP_DigestFinal_ex(ctx, out, NULL))
+ || !TEST_mem_eq(out, SHA256_DIGEST_LENGTH, exptd,
+ SHA256_DIGEST_LENGTH)
+ || !TEST_true(md == EVP_MD_CTX_get0_md(ctx)))
+ goto err;
+
+ ret = 1;
+ err:
+ EVP_MD_CTX_free(ctx);
+ return ret;
+}
+
+static int load_providers(OSSL_LIB_CTX **libctx, OSSL_PROVIDER *prov[])
+{
+ OSSL_LIB_CTX *ctx = NULL;
+ int ret = 0;
+ size_t i;
+
+ ctx = OSSL_LIB_CTX_new();
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ if (!TEST_true(OSSL_LIB_CTX_load_config(ctx, config_file)))
+ goto err;
+ if (test_get_argument_count() > 2)
+ goto err;
+
+ for (i = 0; i < test_get_argument_count(); ++i) {
+ char *provname = test_get_argument(i);
+ prov[i] = OSSL_PROVIDER_load(ctx, provname);
+ if (!TEST_ptr(prov[i]))
+ goto err;
+ }
+
+ ret = 1;
+ *libctx = ctx;
+err:
+ if (ret == 0)
+ OSSL_LIB_CTX_free(ctx);
+ return ret;
+}
+
+static void unload_providers(OSSL_LIB_CTX **libctx, OSSL_PROVIDER *prov[])
+{
+ if (prov[0] != NULL)
+ OSSL_PROVIDER_unload(prov[0]);
+ if (prov[1] != NULL)
+ OSSL_PROVIDER_unload(prov[1]);
+ /* Not normally needed, but we would like to test that
+ * OPENSSL_thread_stop_ex() behaves as expected.
+ */
+ if (libctx != NULL && *libctx != NULL) {
+ OPENSSL_thread_stop_ex(*libctx);
+ OSSL_LIB_CTX_free(*libctx);
+ }
+}
+
+static X509_ALGOR *make_algor(int nid)
+{
+ X509_ALGOR *algor;
+
+ if (!TEST_ptr(algor = X509_ALGOR_new())
+ || !TEST_true(X509_ALGOR_set0(algor, OBJ_nid2obj(nid),
+ V_ASN1_UNDEF, NULL))) {
+ X509_ALGOR_free(algor);
+ return NULL;
+ }
+ return algor;
+}
+
+/*
+ * Test EVP_MD_fetch()
+ */
+static int test_md(const EVP_MD *md)
+{
+ const char testmsg[] = "Hello world";
+ const unsigned char exptd[] = {
+ 0x27, 0x51, 0x8b, 0xa9, 0x68, 0x30, 0x11, 0xf6, 0xb3, 0x96, 0x07, 0x2c,
+ 0x05, 0xf6, 0x65, 0x6d, 0x04, 0xf5, 0xfb, 0xc3, 0x78, 0x7c, 0xf9, 0x24,
+ 0x90, 0xec, 0x60, 0x6e, 0x50, 0x92, 0xe3, 0x26
+ };
+
+ return TEST_ptr(md)
+ && TEST_true(EVP_MD_is_a(md, "SHA256"))
+ && TEST_true(calculate_digest(md, testmsg, sizeof(testmsg), exptd))
+ && TEST_int_eq(EVP_MD_get_size(md), SHA256_DIGEST_LENGTH)
+ && TEST_int_eq(EVP_MD_get_block_size(md), SHA256_CBLOCK);
+}
+
+static int test_implicit_EVP_MD_fetch(void)
+{
+ OSSL_LIB_CTX *ctx = NULL;
+ OSSL_PROVIDER *prov[2] = {NULL, NULL};
+ int ret = 0;
+
+ ret = (use_default_ctx == 0 || load_providers(&ctx, prov))
+ && test_md(EVP_sha256());
+
+ unload_providers(&ctx, prov);
+ return ret;
+}
+
+static int test_explicit_EVP_MD_fetch(const char *id)
+{
+ OSSL_LIB_CTX *ctx = NULL;
+ EVP_MD *md = NULL;
+ OSSL_PROVIDER *prov[2] = {NULL, NULL};
+ int ret = 0;
+
+ if (use_default_ctx == 0 && !load_providers(&ctx, prov))
+ goto err;
+
+ md = EVP_MD_fetch(ctx, id, fetch_property);
+ if (expected_fetch_result != 0) {
+ if (!test_md(md))
+ goto err;
+
+ /* Also test EVP_MD_up_ref() while we're doing this */
+ if (!TEST_true(EVP_MD_up_ref(md)))
+ goto err;
+ /* Ref count should now be 2. Release first one here */
+ EVP_MD_free(md);
+ } else {
+ if (!TEST_ptr_null(md))
+ goto err;
+ }
+ ret = 1;
+
+ err:
+ EVP_MD_free(md);
+ unload_providers(&ctx, prov);
+ return ret;
+}
+
+static int test_explicit_EVP_MD_fetch_by_name(void)
+{
+ return test_explicit_EVP_MD_fetch("SHA256");
+}
+
+/*
+ * idx 0: Allow names from OBJ_obj2txt()
+ * idx 1: Force an OID in text form from OBJ_obj2txt()
+ */
+static int test_explicit_EVP_MD_fetch_by_X509_ALGOR(int idx)
+{
+ int ret = 0;
+ X509_ALGOR *algor = make_algor(NID_sha256);
+ const ASN1_OBJECT *obj;
+ char id[OSSL_MAX_NAME_SIZE];
+
+ if (algor == NULL)
+ return 0;
+
+ X509_ALGOR_get0(&obj, NULL, NULL, algor);
+ switch (idx) {
+ case 0:
+ if (!TEST_int_gt(OBJ_obj2txt(id, sizeof(id), obj, 0), 0))
+ goto end;
+ break;
+ case 1:
+ if (!TEST_int_gt(OBJ_obj2txt(id, sizeof(id), obj, 1), 0))
+ goto end;
+ break;
+ }
+
+ ret = test_explicit_EVP_MD_fetch(id);
+ end:
+ X509_ALGOR_free(algor);
+ return ret;
+}
+
+/*
+ * Test EVP_CIPHER_fetch()
+ */
+static int encrypt_decrypt(const EVP_CIPHER *cipher, const unsigned char *msg,
+ size_t len)
+{
+ int ret = 0, ctlen, ptlen;
+ EVP_CIPHER_CTX *ctx = NULL;
+ unsigned char key[128 / 8];
+ unsigned char ct[64], pt[64];
+
+ memset(key, 0, sizeof(key));
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ || !TEST_true(EVP_CipherInit_ex(ctx, cipher, NULL, key, NULL, 1))
+ || !TEST_true(EVP_CipherUpdate(ctx, ct, &ctlen, msg, len))
+ || !TEST_true(EVP_CipherFinal_ex(ctx, ct, &ctlen))
+ || !TEST_true(EVP_CipherInit_ex(ctx, cipher, NULL, key, NULL, 0))
+ || !TEST_true(EVP_CipherUpdate(ctx, pt, &ptlen, ct, ctlen))
+ || !TEST_true(EVP_CipherFinal_ex(ctx, pt, &ptlen))
+ || !TEST_mem_eq(pt, ptlen, msg, len))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+static int test_cipher(const EVP_CIPHER *cipher)
+{
+ const unsigned char testmsg[] = "Hello world";
+
+ return TEST_ptr(cipher)
+ && TEST_true(encrypt_decrypt(cipher, testmsg, sizeof(testmsg)));
+}
+
+static int test_implicit_EVP_CIPHER_fetch(void)
+{
+ OSSL_LIB_CTX *ctx = NULL;
+ OSSL_PROVIDER *prov[2] = {NULL, NULL};
+ int ret = 0;
+
+ ret = (use_default_ctx == 0 || load_providers(&ctx, prov))
+ && test_cipher(EVP_aes_128_cbc());
+
+ unload_providers(&ctx, prov);
+ return ret;
+}
+
+static int test_explicit_EVP_CIPHER_fetch(const char *id)
+{
+ OSSL_LIB_CTX *ctx = NULL;
+ EVP_CIPHER *cipher = NULL;
+ OSSL_PROVIDER *prov[2] = {NULL, NULL};
+ int ret = 0;
+
+ if (use_default_ctx == 0 && !load_providers(&ctx, prov))
+ goto err;
+
+ cipher = EVP_CIPHER_fetch(ctx, id, fetch_property);
+ if (expected_fetch_result != 0) {
+ if (!test_cipher(cipher))
+ goto err;
+
+ if (!TEST_true(EVP_CIPHER_up_ref(cipher)))
+ goto err;
+ /* Ref count should now be 2. Release first one here */
+ EVP_CIPHER_free(cipher);
+ } else {
+ if (!TEST_ptr_null(cipher))
+ goto err;
+ }
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ unload_providers(&ctx, prov);
+ return ret;
+}
+
+static int test_explicit_EVP_CIPHER_fetch_by_name(void)
+{
+ return test_explicit_EVP_CIPHER_fetch("AES-128-CBC");
+}
+
+/*
+ * idx 0: Allow names from OBJ_obj2txt()
+ * idx 1: Force an OID in text form from OBJ_obj2txt()
+ */
+static int test_explicit_EVP_CIPHER_fetch_by_X509_ALGOR(int idx)
+{
+ int ret = 0;
+ X509_ALGOR *algor = make_algor(NID_aes_128_cbc);
+ const ASN1_OBJECT *obj;
+ char id[OSSL_MAX_NAME_SIZE];
+
+ if (algor == NULL)
+ return 0;
+
+ X509_ALGOR_get0(&obj, NULL, NULL, algor);
+ switch (idx) {
+ case 0:
+ if (!TEST_int_gt(OBJ_obj2txt(id, sizeof(id), obj, 0), 0))
+ goto end;
+ break;
+ case 1:
+ if (!TEST_int_gt(OBJ_obj2txt(id, sizeof(id), obj, 1), 0))
+ goto end;
+ break;
+ }
+
+ ret = test_explicit_EVP_CIPHER_fetch(id);
+ end:
+ X509_ALGOR_free(algor);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_CONFIG_FILE:
+ config_file = opt_arg();
+ break;
+ case OPT_ALG_FETCH_TYPE:
+ alg = opt_arg();
+ break;
+ case OPT_FETCH_PROPERTY:
+ fetch_property = opt_arg();
+ break;
+ case OPT_FETCH_FAILURE:
+ expected_fetch_result = 0;
+ break;
+ case OPT_USE_DEFAULTCTX:
+ use_default_ctx = 1;
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+ if (strcmp(alg, "digest") == 0) {
+ ADD_TEST(test_implicit_EVP_MD_fetch);
+ ADD_TEST(test_explicit_EVP_MD_fetch_by_name);
+ ADD_ALL_TESTS_NOSUBTEST(test_explicit_EVP_MD_fetch_by_X509_ALGOR, 2);
+ } else {
+ ADD_TEST(test_implicit_EVP_CIPHER_fetch);
+ ADD_TEST(test_explicit_EVP_CIPHER_fetch_by_name);
+ ADD_ALL_TESTS_NOSUBTEST(test_explicit_EVP_CIPHER_fetch_by_X509_ALGOR, 2);
+ }
+ return 1;
+}
diff --git a/test/evp_kdf_test.c b/test/evp_kdf_test.c
new file mode 100644
index 000000000000..8f35900bdd8b
--- /dev/null
+++ b/test/evp_kdf_test.c
@@ -0,0 +1,1738 @@
+/*
+ * Copyright 2018-2024 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2018-2020, Oracle and/or its affiliates. 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 of the EVP_KDF_CTX APIs */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/evp.h>
+#include <openssl/kdf.h>
+#include <openssl/core_names.h>
+#include "internal/numbers.h"
+#include "testutil.h"
+
+
+static EVP_KDF_CTX *get_kdfbyname_libctx(OSSL_LIB_CTX *libctx, const char *name)
+{
+ EVP_KDF *kdf = EVP_KDF_fetch(libctx, name, NULL);
+ EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf);
+
+ EVP_KDF_free(kdf);
+ return kctx;
+}
+
+static EVP_KDF_CTX *get_kdfbyname(const char *name)
+{
+ return get_kdfbyname_libctx(NULL, name);
+}
+
+static OSSL_PARAM *construct_tls1_prf_params(const char *digest, const char *secret,
+ const char *seed)
+{
+ OSSL_PARAM *params = OPENSSL_malloc(sizeof(OSSL_PARAM) * 4);
+ OSSL_PARAM *p = params;
+
+ if (params == NULL)
+ return NULL;
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ (char *)digest, 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SECRET,
+ (unsigned char *)secret,
+ strlen(secret));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SEED,
+ (unsigned char *)seed,
+ strlen(seed));
+ *p = OSSL_PARAM_construct_end();
+
+ return params;
+}
+
+static int test_kdf_tls1_prf(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[16];
+ OSSL_PARAM *params;
+ static const unsigned char expected[sizeof(out)] = {
+ 0x8e, 0x4d, 0x93, 0x25, 0x30, 0xd7, 0x65, 0xa0,
+ 0xaa, 0xe9, 0x74, 0xc3, 0x04, 0x73, 0x5e, 0xcc
+ };
+
+ params = construct_tls1_prf_params("sha256", "secret", "seed");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_TLS1_PRF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_tls1_prf_invalid_digest(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ OSSL_PARAM *params;
+
+ params = construct_tls1_prf_params("blah", "secret", "seed");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_TLS1_PRF))
+ && TEST_false(EVP_KDF_CTX_set_params(kctx, params));
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_tls1_prf_zero_output_size(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[16];
+ OSSL_PARAM *params;
+
+ params = construct_tls1_prf_params("sha256", "secret", "seed");
+
+ /* Negative test - derive should fail */
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_TLS1_PRF))
+ && TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ && TEST_int_eq(EVP_KDF_derive(kctx, out, 0, NULL), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_tls1_prf_empty_secret(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[16];
+ OSSL_PARAM *params;
+
+ params = construct_tls1_prf_params("sha256", "", "seed");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_TLS1_PRF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_tls1_prf_1byte_secret(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[16];
+ OSSL_PARAM *params;
+
+ params = construct_tls1_prf_params("sha256", "1", "seed");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_TLS1_PRF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_tls1_prf_empty_seed(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[16];
+ OSSL_PARAM *params;
+
+ params = construct_tls1_prf_params("sha256", "secret", "");
+
+ /* Negative test - derive should fail */
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_TLS1_PRF))
+ && TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ && TEST_int_eq(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_tls1_prf_1byte_seed(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[16];
+ OSSL_PARAM *params;
+
+ params = construct_tls1_prf_params("sha256", "secret", "1");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_TLS1_PRF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static OSSL_PARAM *construct_hkdf_params(char *digest, char *key,
+ size_t keylen, char *salt, char *info)
+{
+ OSSL_PARAM *params = OPENSSL_malloc(sizeof(OSSL_PARAM) * 5);
+ OSSL_PARAM *p = params;
+
+ if (params == NULL)
+ return NULL;
+
+ if (digest != NULL)
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ digest, 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT,
+ salt, strlen(salt));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY,
+ (unsigned char *)key, keylen);
+ if (info != NULL)
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO,
+ info, strlen(info));
+ else
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_MODE,
+ "EXTRACT_ONLY", 0);
+ *p = OSSL_PARAM_construct_end();
+
+ return params;
+}
+
+static int test_kdf_hkdf(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[10];
+ OSSL_PARAM *params;
+ static const unsigned char expected[sizeof(out)] = {
+ 0x2a, 0xc4, 0x36, 0x9f, 0x52, 0x59, 0x96, 0xf8, 0xde, 0x13
+ };
+
+ params = construct_hkdf_params("sha256", "secret", 6, "salt", "label");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int do_kdf_hkdf_gettables(int expand_only, int has_digest)
+{
+ int ret = 0;
+ size_t sz = 0;
+ OSSL_PARAM *params;
+ OSSL_PARAM params_get[2];
+ const OSSL_PARAM *gettables, *p;
+ EVP_KDF_CTX *kctx = NULL;
+
+ if (!TEST_ptr(params = construct_hkdf_params(
+ has_digest ? "sha256" : NULL,
+ "secret", 6, "salt",
+ expand_only ? NULL : "label"))
+ || !TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF))
+ || !TEST_true(EVP_KDF_CTX_set_params(kctx, params)))
+ goto err;
+
+ /* Check OSSL_KDF_PARAM_SIZE is gettable */
+ if (!TEST_ptr(gettables = EVP_KDF_CTX_gettable_params(kctx))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(gettables, OSSL_KDF_PARAM_SIZE)))
+ goto err;
+
+ /* Get OSSL_KDF_PARAM_SIZE as a size_t */
+ params_get[0] = OSSL_PARAM_construct_size_t(OSSL_KDF_PARAM_SIZE, &sz);
+ params_get[1] = OSSL_PARAM_construct_end();
+ if (has_digest) {
+ if (!TEST_int_eq(EVP_KDF_CTX_get_params(kctx, params_get), 1)
+ || !TEST_size_t_eq(sz, expand_only ? SHA256_DIGEST_LENGTH : SIZE_MAX))
+ goto err;
+ } else {
+ if (!TEST_int_eq(EVP_KDF_CTX_get_params(kctx, params_get), 0))
+ goto err;
+ }
+
+ /* Get params returns -2 if an unsupported parameter is requested */
+ params_get[0] = OSSL_PARAM_construct_end();
+ if (!TEST_int_eq(EVP_KDF_CTX_get_params(kctx, params_get), -2))
+ goto err;
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_hkdf_gettables(void)
+{
+ return do_kdf_hkdf_gettables(0, 1);
+}
+
+static int test_kdf_hkdf_gettables_expandonly(void)
+{
+ return do_kdf_hkdf_gettables(1, 1);
+}
+
+static int test_kdf_hkdf_gettables_no_digest(void)
+{
+ return do_kdf_hkdf_gettables(1, 0);
+}
+
+static int test_kdf_hkdf_invalid_digest(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ OSSL_PARAM *params;
+
+ params = construct_hkdf_params("blah", "secret", 6, "salt", "label");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF))
+ && TEST_false(EVP_KDF_CTX_set_params(kctx, params));
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_hkdf_derive_set_params_fail(void)
+{
+ int ret = 0, i = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ OSSL_PARAM params[2];
+ unsigned char out[10];
+
+ if (!TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF)))
+ goto end;
+ /*
+ * Set the wrong type for the digest so that it causes a failure
+ * inside kdf_hkdf_derive() when kdf_hkdf_set_ctx_params() is called
+ */
+ params[0] = OSSL_PARAM_construct_int(OSSL_KDF_PARAM_DIGEST, &i);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!TEST_int_eq(EVP_KDF_derive(kctx, out, sizeof(out), params), 0))
+ goto end;
+ ret = 1;
+end:
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+static int test_kdf_hkdf_set_invalid_mode(void)
+{
+ int ret = 0, bad_mode = 100;
+ EVP_KDF_CTX *kctx = NULL;
+ OSSL_PARAM params[2];
+
+ if (!TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF)))
+ goto end;
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_MODE,
+ "BADMODE", 0);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!TEST_int_eq(EVP_KDF_CTX_set_params(kctx, params), 0))
+ goto end;
+
+ params[0] = OSSL_PARAM_construct_int(OSSL_KDF_PARAM_MODE, &bad_mode);
+ if (!TEST_int_eq(EVP_KDF_CTX_set_params(kctx, params), 0))
+ goto end;
+
+ ret = 1;
+end:
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+static int do_kdf_hkdf_set_invalid_param(const char *key, int type)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ OSSL_PARAM params[2];
+ unsigned char buf[2];
+
+ if (!TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF)))
+ goto end;
+ /* Set the wrong type for the key so that it causes a failure */
+ if (type == OSSL_PARAM_UTF8_STRING)
+ params[0] = OSSL_PARAM_construct_utf8_string(key, "BAD", 0);
+ else
+ params[0] = OSSL_PARAM_construct_octet_string(key, buf, sizeof(buf));
+ params[1] = OSSL_PARAM_construct_end();
+ if (!TEST_int_eq(EVP_KDF_CTX_set_params(kctx, params), 0))
+ goto end;
+
+ ret = 1;
+end:
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+static int test_kdf_hkdf_set_ctx_param_fail(void)
+{
+ return do_kdf_hkdf_set_invalid_param(OSSL_KDF_PARAM_MODE,
+ OSSL_PARAM_OCTET_STRING)
+ && do_kdf_hkdf_set_invalid_param(OSSL_KDF_PARAM_KEY,
+ OSSL_PARAM_UTF8_STRING)
+ && do_kdf_hkdf_set_invalid_param(OSSL_KDF_PARAM_SALT,
+ OSSL_PARAM_UTF8_STRING)
+ && do_kdf_hkdf_set_invalid_param(OSSL_KDF_PARAM_INFO,
+ OSSL_PARAM_UTF8_STRING);
+}
+
+static int test_kdf_hkdf_zero_output_size(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[10];
+ OSSL_PARAM *params;
+
+ params = construct_hkdf_params("sha256", "secret", 6, "salt", "label");
+
+ /* Negative test - derive should fail */
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF))
+ && TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ && TEST_int_eq(EVP_KDF_derive(kctx, out, 0, NULL), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_hkdf_empty_key(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[10];
+ OSSL_PARAM *params;
+
+ params = construct_hkdf_params("sha256", "", 0, "salt", "label");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_hkdf_1byte_key(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[10];
+ OSSL_PARAM *params;
+
+ params = construct_hkdf_params("sha256", "1", 1, "salt", "label");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_hkdf_empty_salt(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[10];
+ OSSL_PARAM *params;
+
+ params = construct_hkdf_params("sha256", "secret", 6, "", "label");
+
+ ret = TEST_ptr(params)
+ && TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_HKDF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static OSSL_PARAM *construct_pbkdf1_params(char *pass, char *digest, char *salt,
+ unsigned int *iter)
+{
+ OSSL_PARAM *params = OPENSSL_malloc(sizeof(OSSL_PARAM) * 5);
+ OSSL_PARAM *p = params;
+
+ if (params == NULL)
+ return NULL;
+
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_PASSWORD,
+ (unsigned char *)pass, strlen(pass));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT,
+ (unsigned char *)salt, strlen(salt));
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_ITER, iter);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ digest, 0);
+ *p = OSSL_PARAM_construct_end();
+
+ return params;
+}
+
+static int test_kdf_pbkdf1(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[25];
+ unsigned int iterations = 4096;
+ OSSL_LIB_CTX *libctx = NULL;
+ OSSL_PARAM *params = NULL;
+ OSSL_PROVIDER *legacyprov = NULL;
+ OSSL_PROVIDER *defprov = NULL;
+ const unsigned char expected[sizeof(out)] = {
+ 0xfb, 0x83, 0x4d, 0x36, 0x6d, 0xbc, 0x53, 0x87, 0x35, 0x1b, 0x34, 0x75,
+ 0x95, 0x88, 0x32, 0x4f, 0x3e, 0x82, 0x81, 0x01, 0x21, 0x93, 0x64, 0x00,
+ 0xcc
+ };
+
+ if (!TEST_ptr(libctx = OSSL_LIB_CTX_new()))
+ goto err;
+
+ /* PBKDF1 only available in the legacy provider */
+ legacyprov = OSSL_PROVIDER_load(libctx, "legacy");
+ if (legacyprov == NULL) {
+ OSSL_LIB_CTX_free(libctx);
+ return TEST_skip("PBKDF1 only available in legacy provider");
+ }
+
+ if (!TEST_ptr(defprov = OSSL_PROVIDER_load(libctx, "default")))
+ goto err;
+
+ params = construct_pbkdf1_params("passwordPASSWORDpassword", "sha256",
+ "saltSALTsaltSALTsaltSALTsaltSALTsalt",
+ &iterations);
+
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname_libctx(libctx, OSSL_KDF_NAME_PBKDF1))
+ || !TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ || !TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0)
+ || !TEST_mem_eq(out, sizeof(out), expected, sizeof(expected)))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ OSSL_PROVIDER_unload(defprov);
+ OSSL_PROVIDER_unload(legacyprov);
+ OSSL_LIB_CTX_free(libctx);
+ return ret;
+}
+
+static int test_kdf_pbkdf1_key_too_long(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[EVP_MAX_MD_SIZE + 1];
+ unsigned int iterations = 4096;
+ OSSL_LIB_CTX *libctx = NULL;
+ OSSL_PARAM *params = NULL;
+ OSSL_PROVIDER *legacyprov = NULL;
+ OSSL_PROVIDER *defprov = NULL;
+
+ if (!TEST_ptr(libctx = OSSL_LIB_CTX_new()))
+ goto err;
+
+ /* PBKDF1 only available in the legacy provider */
+ legacyprov = OSSL_PROVIDER_load(libctx, "legacy");
+ if (legacyprov == NULL) {
+ OSSL_LIB_CTX_free(libctx);
+ return TEST_skip("PBKDF1 only available in legacy provider");
+ }
+
+ if (!TEST_ptr(defprov = OSSL_PROVIDER_load(libctx, "default")))
+ goto err;
+
+ params = construct_pbkdf1_params("passwordPASSWORDpassword", "sha256",
+ "saltSALTsaltSALTsaltSALTsaltSALTsalt",
+ &iterations);
+
+ /*
+ * This is the same test sequence as test_kdf_pbkdf1, but we expect
+ * failure here as the requested key size is longer than the digest
+ * can provide
+ */
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname_libctx(libctx, OSSL_KDF_NAME_PBKDF1))
+ || !TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ || !TEST_int_eq(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ OSSL_PROVIDER_unload(defprov);
+ OSSL_PROVIDER_unload(legacyprov);
+ OSSL_LIB_CTX_free(libctx);
+ return ret;
+}
+
+static OSSL_PARAM *construct_pbkdf2_params(char *pass, char *digest, char *salt,
+ unsigned int *iter, int *mode)
+{
+ OSSL_PARAM *params = OPENSSL_malloc(sizeof(OSSL_PARAM) * 6);
+ OSSL_PARAM *p = params;
+
+ if (params == NULL)
+ return NULL;
+
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_PASSWORD,
+ (unsigned char *)pass, strlen(pass));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT,
+ (unsigned char *)salt, strlen(salt));
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_ITER, iter);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ digest, 0);
+ *p++ = OSSL_PARAM_construct_int(OSSL_KDF_PARAM_PKCS5, mode);
+ *p = OSSL_PARAM_construct_end();
+
+ return params;
+}
+
+static int test_kdf_pbkdf2(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[25];
+ unsigned int iterations = 4096;
+ int mode = 0;
+ OSSL_PARAM *params;
+ const unsigned char expected[sizeof(out)] = {
+ 0x34, 0x8c, 0x89, 0xdb, 0xcb, 0xd3, 0x2b, 0x2f,
+ 0x32, 0xd8, 0x14, 0xb8, 0x11, 0x6e, 0x84, 0xcf,
+ 0x2b, 0x17, 0x34, 0x7e, 0xbc, 0x18, 0x00, 0x18,
+ 0x1c
+ };
+
+ params = construct_pbkdf2_params("passwordPASSWORDpassword", "sha256",
+ "saltSALTsaltSALTsaltSALTsaltSALTsalt",
+ &iterations, &mode);
+
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_PBKDF2))
+ || !TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0)
+ || !TEST_mem_eq(out, sizeof(out), expected, sizeof(expected)))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_pbkdf2_small_output(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[25];
+ unsigned int iterations = 4096;
+ int mode = 0;
+ OSSL_PARAM *params;
+
+ params = construct_pbkdf2_params("passwordPASSWORDpassword", "sha256",
+ "saltSALTsaltSALTsaltSALTsaltSALTsalt",
+ &iterations, &mode);
+
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_PBKDF2))
+ || !TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ /* A key length that is too small should fail */
+ || !TEST_int_eq(EVP_KDF_derive(kctx, out, 112 / 8 - 1, NULL), 0))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_pbkdf2_large_output(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[25];
+ size_t len = 0;
+ unsigned int iterations = 4096;
+ int mode = 0;
+ OSSL_PARAM *params;
+
+ if (sizeof(len) > 32)
+ len = SIZE_MAX;
+
+ params = construct_pbkdf2_params("passwordPASSWORDpassword", "sha256",
+ "saltSALTsaltSALTsaltSALTsaltSALTsalt",
+ &iterations, &mode);
+
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_PBKDF2))
+ /* A key length that is too large should fail */
+ || !TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ || (len != 0 && !TEST_int_eq(EVP_KDF_derive(kctx, out, len, NULL), 0)))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_pbkdf2_small_salt(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned int iterations = 4096;
+ int mode = 0;
+ OSSL_PARAM *params;
+
+ params = construct_pbkdf2_params("passwordPASSWORDpassword", "sha256",
+ "saltSALT",
+ &iterations, &mode);
+
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_PBKDF2))
+ /* A salt that is too small should fail */
+ || !TEST_false(EVP_KDF_CTX_set_params(kctx, params)))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_pbkdf2_small_iterations(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned int iterations = 1;
+ int mode = 0;
+ OSSL_PARAM *params;
+
+ params = construct_pbkdf2_params("passwordPASSWORDpassword", "sha256",
+ "saltSALTsaltSALTsaltSALTsaltSALTsalt",
+ &iterations, &mode);
+
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_PBKDF2))
+ /* An iteration count that is too small should fail */
+ || !TEST_false(EVP_KDF_CTX_set_params(kctx, params)))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_pbkdf2_small_salt_pkcs5(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[25];
+ unsigned int iterations = 4096;
+ int mode = 1;
+ OSSL_PARAM *params;
+ OSSL_PARAM mode_params[2];
+
+ params = construct_pbkdf2_params("passwordPASSWORDpassword", "sha256",
+ "saltSALT",
+ &iterations, &mode);
+
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_PBKDF2))
+ /* A salt that is too small should pass in pkcs5 mode */
+ || !TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ || !TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0))
+ goto err;
+
+ mode = 0;
+ mode_params[0] = OSSL_PARAM_construct_int(OSSL_KDF_PARAM_PKCS5, &mode);
+ mode_params[1] = OSSL_PARAM_construct_end();
+
+ /* If the "pkcs5" mode is disabled then the derive will now fail */
+ if (!TEST_true(EVP_KDF_CTX_set_params(kctx, mode_params))
+ || !TEST_int_eq(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_pbkdf2_small_iterations_pkcs5(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned char out[25];
+ unsigned int iterations = 1;
+ int mode = 1;
+ OSSL_PARAM *params;
+ OSSL_PARAM mode_params[2];
+
+ params = construct_pbkdf2_params("passwordPASSWORDpassword", "sha256",
+ "saltSALTsaltSALTsaltSALTsaltSALTsalt",
+ &iterations, &mode);
+
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_PBKDF2))
+ /* An iteration count that is too small will pass in pkcs5 mode */
+ || !TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ || !TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0))
+ goto err;
+
+ mode = 0;
+ mode_params[0] = OSSL_PARAM_construct_int(OSSL_KDF_PARAM_PKCS5, &mode);
+ mode_params[1] = OSSL_PARAM_construct_end();
+
+ /* If the "pkcs5" mode is disabled then the derive will now fail */
+ if (!TEST_true(EVP_KDF_CTX_set_params(kctx, mode_params))
+ || !TEST_int_eq(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_pbkdf2_invalid_digest(void)
+{
+ int ret = 0;
+ EVP_KDF_CTX *kctx = NULL;
+ unsigned int iterations = 4096;
+ int mode = 0;
+ OSSL_PARAM *params;
+
+ params = construct_pbkdf2_params("passwordPASSWORDpassword", "blah",
+ "saltSALTsaltSALTsaltSALTsaltSALTsalt",
+ &iterations, &mode);
+
+ if (!TEST_ptr(params)
+ || !TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_PBKDF2))
+ /* Unknown digest should fail */
+ || !TEST_false(EVP_KDF_CTX_set_params(kctx, params)))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_SCRYPT
+static int test_kdf_scrypt(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[7], *p = params;
+ unsigned char out[64];
+ unsigned int nu = 1024, ru = 8, pu = 16, maxmem = 16;
+ static const unsigned char expected[sizeof(out)] = {
+ 0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00,
+ 0x78, 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe,
+ 0x7c, 0x6a, 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30,
+ 0xe7, 0x73, 0x76, 0x63, 0x4b, 0x37, 0x31, 0x62,
+ 0x2e, 0xaf, 0x30, 0xd9, 0x2e, 0x22, 0xa3, 0x88,
+ 0x6f, 0xf1, 0x09, 0x27, 0x9d, 0x98, 0x30, 0xda,
+ 0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, 0xee, 0x6d,
+ 0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, 0x40
+ };
+
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_PASSWORD,
+ (char *)"password", 8);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT,
+ (char *)"NaCl", 4);
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_SCRYPT_N, &nu);
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_SCRYPT_R, &ru);
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_SCRYPT_P, &pu);
+ *p++ = OSSL_PARAM_construct_uint(OSSL_KDF_PARAM_SCRYPT_MAXMEM, &maxmem);
+ *p = OSSL_PARAM_construct_end();
+
+ ret =
+ TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_SCRYPT))
+ && TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ /* failure test *//*
+ && TEST_int_le(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0)*/
+ && TEST_true(OSSL_PARAM_set_uint(p - 1, 10 * 1024 * 1024))
+ && TEST_true(EVP_KDF_CTX_set_params(kctx, p - 1))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+#endif /* OPENSSL_NO_SCRYPT */
+
+static int test_kdf_ss_hash(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[4], *p = params;
+ unsigned char out[14];
+ static unsigned char z[] = {
+ 0x6d,0xbd,0xc2,0x3f,0x04,0x54,0x88,0xe4,0x06,0x27,0x57,0xb0,0x6b,0x9e,
+ 0xba,0xe1,0x83,0xfc,0x5a,0x59,0x46,0xd8,0x0d,0xb9,0x3f,0xec,0x6f,0x62,
+ 0xec,0x07,0xe3,0x72,0x7f,0x01,0x26,0xae,0xd1,0x2c,0xe4,0xb2,0x62,0xf4,
+ 0x7d,0x48,0xd5,0x42,0x87,0xf8,0x1d,0x47,0x4c,0x7c,0x3b,0x18,0x50,0xe9
+ };
+ static unsigned char other[] = {
+ 0xa1,0xb2,0xc3,0xd4,0xe5,0x43,0x41,0x56,0x53,0x69,0x64,0x3c,0x83,0x2e,
+ 0x98,0x49,0xdc,0xdb,0xa7,0x1e,0x9a,0x31,0x39,0xe6,0x06,0xe0,0x95,0xde,
+ 0x3c,0x26,0x4a,0x66,0xe9,0x8a,0x16,0x58,0x54,0xcd,0x07,0x98,0x9b,0x1e,
+ 0xe0,0xec,0x3f,0x8d,0xbe
+ };
+ static const unsigned char expected[sizeof(out)] = {
+ 0xa4,0x62,0xde,0x16,0xa8,0x9d,0xe8,0x46,0x6e,0xf5,0x46,0x0b,0x47,0xb8
+ };
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ (char *)"sha224", 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, z, sizeof(z));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO, other,
+ sizeof(other));
+ *p = OSSL_PARAM_construct_end();
+
+ ret =
+ TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_SSKDF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+static int test_kdf_x963(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[4], *p = params;
+ unsigned char out[1024 / 8];
+ /*
+ * Test data from https://csrc.nist.gov/CSRC/media/Projects/
+ * Cryptographic-Algorithm-Validation-Program/documents/components/
+ * 800-135testvectors/ansx963_2001.zip
+ */
+ static unsigned char z[] = {
+ 0x00, 0xaa, 0x5b, 0xb7, 0x9b, 0x33, 0xe3, 0x89, 0xfa, 0x58, 0xce, 0xad,
+ 0xc0, 0x47, 0x19, 0x7f, 0x14, 0xe7, 0x37, 0x12, 0xf4, 0x52, 0xca, 0xa9,
+ 0xfc, 0x4c, 0x9a, 0xdb, 0x36, 0x93, 0x48, 0xb8, 0x15, 0x07, 0x39, 0x2f,
+ 0x1a, 0x86, 0xdd, 0xfd, 0xb7, 0xc4, 0xff, 0x82, 0x31, 0xc4, 0xbd, 0x0f,
+ 0x44, 0xe4, 0x4a, 0x1b, 0x55, 0xb1, 0x40, 0x47, 0x47, 0xa9, 0xe2, 0xe7,
+ 0x53, 0xf5, 0x5e, 0xf0, 0x5a, 0x2d
+ };
+ static unsigned char shared[] = {
+ 0xe3, 0xb5, 0xb4, 0xc1, 0xb0, 0xd5, 0xcf, 0x1d, 0x2b, 0x3a, 0x2f, 0x99,
+ 0x37, 0x89, 0x5d, 0x31
+ };
+ static const unsigned char expected[sizeof(out)] = {
+ 0x44, 0x63, 0xf8, 0x69, 0xf3, 0xcc, 0x18, 0x76, 0x9b, 0x52, 0x26, 0x4b,
+ 0x01, 0x12, 0xb5, 0x85, 0x8f, 0x7a, 0xd3, 0x2a, 0x5a, 0x2d, 0x96, 0xd8,
+ 0xcf, 0xfa, 0xbf, 0x7f, 0xa7, 0x33, 0x63, 0x3d, 0x6e, 0x4d, 0xd2, 0xa5,
+ 0x99, 0xac, 0xce, 0xb3, 0xea, 0x54, 0xa6, 0x21, 0x7c, 0xe0, 0xb5, 0x0e,
+ 0xef, 0x4f, 0x6b, 0x40, 0xa5, 0xc3, 0x02, 0x50, 0xa5, 0xa8, 0xee, 0xee,
+ 0x20, 0x80, 0x02, 0x26, 0x70, 0x89, 0xdb, 0xf3, 0x51, 0xf3, 0xf5, 0x02,
+ 0x2a, 0xa9, 0x63, 0x8b, 0xf1, 0xee, 0x41, 0x9d, 0xea, 0x9c, 0x4f, 0xf7,
+ 0x45, 0xa2, 0x5a, 0xc2, 0x7b, 0xda, 0x33, 0xca, 0x08, 0xbd, 0x56, 0xdd,
+ 0x1a, 0x59, 0xb4, 0x10, 0x6c, 0xf2, 0xdb, 0xbc, 0x0a, 0xb2, 0xaa, 0x8e,
+ 0x2e, 0xfa, 0x7b, 0x17, 0x90, 0x2d, 0x34, 0x27, 0x69, 0x51, 0xce, 0xcc,
+ 0xab, 0x87, 0xf9, 0x66, 0x1c, 0x3e, 0x88, 0x16
+ };
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ (char *)"sha512", 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, z, sizeof(z));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO, shared,
+ sizeof(shared));
+ *p = OSSL_PARAM_construct_end();
+
+ ret =
+ TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_X963KDF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+#if !defined(OPENSSL_NO_CMAC) && !defined(OPENSSL_NO_CAMELLIA)
+/*
+ * KBKDF test vectors from RFC 6803 (Camellia Encryption for Kerberos 5)
+ * section 10.
+ */
+static int test_kdf_kbkdf_6803_128(void)
+{
+ int ret = 0, i, p;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[7];
+ static unsigned char input_key[] = {
+ 0x57, 0xD0, 0x29, 0x72, 0x98, 0xFF, 0xD9, 0xD3,
+ 0x5D, 0xE5, 0xA4, 0x7F, 0xB4, 0xBD, 0xE2, 0x4B,
+ };
+ static unsigned char constants[][5] = {
+ { 0x00, 0x00, 0x00, 0x02, 0x99 },
+ { 0x00, 0x00, 0x00, 0x02, 0xaa },
+ { 0x00, 0x00, 0x00, 0x02, 0x55 },
+ };
+ static unsigned char outputs[][16] = {
+ {0xD1, 0x55, 0x77, 0x5A, 0x20, 0x9D, 0x05, 0xF0,
+ 0x2B, 0x38, 0xD4, 0x2A, 0x38, 0x9E, 0x5A, 0x56},
+ {0x64, 0xDF, 0x83, 0xF8, 0x5A, 0x53, 0x2F, 0x17,
+ 0x57, 0x7D, 0x8C, 0x37, 0x03, 0x57, 0x96, 0xAB},
+ {0x3E, 0x4F, 0xBD, 0xF3, 0x0F, 0xB8, 0x25, 0x9C,
+ 0x42, 0x5C, 0xB6, 0xC9, 0x6F, 0x1F, 0x46, 0x35}
+ };
+ static unsigned char iv[16] = { 0 };
+ unsigned char result[16] = { 0 };
+
+ for (i = 0; i < 3; i++) {
+ p = 0;
+ params[p++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_CIPHER, "CAMELLIA-128-CBC", 0);
+ params[p++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_MAC, "CMAC", 0);
+ params[p++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_MODE, "FEEDBACK", 0);
+ params[p++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_KEY, input_key, sizeof(input_key));
+ params[p++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_SALT, constants[i], sizeof(constants[i]));
+ params[p++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_SEED, iv, sizeof(iv));
+ params[p] = OSSL_PARAM_construct_end();
+
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_int_gt(EVP_KDF_derive(kctx, result, sizeof(result),
+ params), 0)
+ && TEST_mem_eq(result, sizeof(result), outputs[i],
+ sizeof(outputs[i]));
+ EVP_KDF_CTX_free(kctx);
+ if (ret != 1)
+ return ret;
+ }
+
+ return ret;
+}
+
+static int test_kdf_kbkdf_6803_256(void)
+{
+ int ret = 0, i, p;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[7];
+ static unsigned char input_key[] = {
+ 0xB9, 0xD6, 0x82, 0x8B, 0x20, 0x56, 0xB7, 0xBE,
+ 0x65, 0x6D, 0x88, 0xA1, 0x23, 0xB1, 0xFA, 0xC6,
+ 0x82, 0x14, 0xAC, 0x2B, 0x72, 0x7E, 0xCF, 0x5F,
+ 0x69, 0xAF, 0xE0, 0xC4, 0xDF, 0x2A, 0x6D, 0x2C,
+ };
+ static unsigned char constants[][5] = {
+ { 0x00, 0x00, 0x00, 0x02, 0x99 },
+ { 0x00, 0x00, 0x00, 0x02, 0xaa },
+ { 0x00, 0x00, 0x00, 0x02, 0x55 },
+ };
+ static unsigned char outputs[][32] = {
+ {0xE4, 0x67, 0xF9, 0xA9, 0x55, 0x2B, 0xC7, 0xD3,
+ 0x15, 0x5A, 0x62, 0x20, 0xAF, 0x9C, 0x19, 0x22,
+ 0x0E, 0xEE, 0xD4, 0xFF, 0x78, 0xB0, 0xD1, 0xE6,
+ 0xA1, 0x54, 0x49, 0x91, 0x46, 0x1A, 0x9E, 0x50,
+ },
+ {0x41, 0x2A, 0xEF, 0xC3, 0x62, 0xA7, 0x28, 0x5F,
+ 0xC3, 0x96, 0x6C, 0x6A, 0x51, 0x81, 0xE7, 0x60,
+ 0x5A, 0xE6, 0x75, 0x23, 0x5B, 0x6D, 0x54, 0x9F,
+ 0xBF, 0xC9, 0xAB, 0x66, 0x30, 0xA4, 0xC6, 0x04,
+ },
+ {0xFA, 0x62, 0x4F, 0xA0, 0xE5, 0x23, 0x99, 0x3F,
+ 0xA3, 0x88, 0xAE, 0xFD, 0xC6, 0x7E, 0x67, 0xEB,
+ 0xCD, 0x8C, 0x08, 0xE8, 0xA0, 0x24, 0x6B, 0x1D,
+ 0x73, 0xB0, 0xD1, 0xDD, 0x9F, 0xC5, 0x82, 0xB0,
+ },
+ };
+ static unsigned char iv[16] = { 0 };
+ unsigned char result[32] = { 0 };
+
+ for (i = 0; i < 3; i++) {
+ p = 0;
+ params[p++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_CIPHER, "CAMELLIA-256-CBC", 0);
+ params[p++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_MAC, "CMAC", 0);
+ params[p++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_MODE, "FEEDBACK", 0);
+ params[p++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_KEY, input_key, sizeof(input_key));
+ params[p++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_SALT, constants[i], sizeof(constants[i]));
+ params[p++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_SEED, iv, sizeof(iv));
+ params[p] = OSSL_PARAM_construct_end();
+
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_int_gt(EVP_KDF_derive(kctx, result, sizeof(result),
+ params), 0)
+ && TEST_mem_eq(result, sizeof(result), outputs[i],
+ sizeof(outputs[i]));
+ EVP_KDF_CTX_free(kctx);
+ if (ret != 1)
+ return ret;
+ }
+
+ return ret;
+}
+#endif
+
+static OSSL_PARAM *construct_kbkdf_params(char *digest, char *mac, unsigned char *key,
+ size_t keylen, char *salt, char *info)
+{
+ OSSL_PARAM *params = OPENSSL_malloc(sizeof(OSSL_PARAM) * 7);
+ OSSL_PARAM *p = params;
+
+ if (params == NULL)
+ return NULL;
+
+ *p++ = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_DIGEST, digest, 0);
+ *p++ = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_MAC, mac, 0);
+ *p++ = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_MODE, "COUNTER", 0);
+ *p++ = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_KEY, key, keylen);
+ *p++ = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_SALT, salt, strlen(salt));
+ *p++ = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_INFO, info, strlen(info));
+ *p = OSSL_PARAM_construct_end();
+
+ return params;
+}
+
+static int test_kdf_kbkdf_invalid_digest(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM *params;
+
+ static unsigned char key[] = {0x01};
+
+ params = construct_kbkdf_params("blah", "HMAC", key, 1, "prf", "test");
+ if (!TEST_ptr(params))
+ return 0;
+
+ /* Negative test case - set_params should fail */
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_false(EVP_KDF_CTX_set_params(kctx, params));
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_kbkdf_invalid_mac(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM *params;
+
+ static unsigned char key[] = {0x01};
+
+ params = construct_kbkdf_params("sha256", "blah", key, 1, "prf", "test");
+ if (!TEST_ptr(params))
+ return 0;
+
+ /* Negative test case - set_params should fail */
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_false(EVP_KDF_CTX_set_params(kctx, params));
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_kbkdf_empty_key(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM *params;
+
+ static unsigned char key[] = {0x01};
+ unsigned char result[32] = { 0 };
+
+ params = construct_kbkdf_params("sha256", "HMAC", key, 0, "prf", "test");
+ if (!TEST_ptr(params))
+ return 0;
+
+ /* Negative test case - derive should fail */
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ && TEST_int_eq(EVP_KDF_derive(kctx, result, sizeof(result), NULL), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_kbkdf_1byte_key(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM *params;
+
+ static unsigned char key[] = {0x01};
+ unsigned char result[32] = { 0 };
+
+ params = construct_kbkdf_params("sha256", "HMAC", key, 1, "prf", "test");
+ if (!TEST_ptr(params))
+ return 0;
+
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_int_gt(EVP_KDF_derive(kctx, result, sizeof(result), params), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+static int test_kdf_kbkdf_zero_output_size(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM *params;
+
+ static unsigned char key[] = {0x01};
+ unsigned char result[32] = { 0 };
+
+ params = construct_kbkdf_params("sha256", "HMAC", key, 1, "prf", "test");
+ if (!TEST_ptr(params))
+ return 0;
+
+ /* Negative test case - derive should fail */
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_true(EVP_KDF_CTX_set_params(kctx, params))
+ && TEST_int_eq(EVP_KDF_derive(kctx, result, 0, NULL), 0);
+
+ EVP_KDF_CTX_free(kctx);
+ OPENSSL_free(params);
+ return ret;
+}
+
+/* Two test vectors from RFC 8009 (AES Encryption with HMAC-SHA2 for Kerberos
+ * 5) appendix A. */
+static int test_kdf_kbkdf_8009_prf1(void)
+{
+ int ret, i = 0;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[6];
+ char *label = "prf", *digest = "sha256", *prf_input = "test",
+ *mac = "HMAC";
+ static unsigned char input_key[] = {
+ 0x37, 0x05, 0xD9, 0x60, 0x80, 0xC1, 0x77, 0x28,
+ 0xA0, 0xE8, 0x00, 0xEA, 0xB6, 0xE0, 0xD2, 0x3C,
+ };
+ static unsigned char output[] = {
+ 0x9D, 0x18, 0x86, 0x16, 0xF6, 0x38, 0x52, 0xFE,
+ 0x86, 0x91, 0x5B, 0xB8, 0x40, 0xB4, 0xA8, 0x86,
+ 0xFF, 0x3E, 0x6B, 0xB0, 0xF8, 0x19, 0xB4, 0x9B,
+ 0x89, 0x33, 0x93, 0xD3, 0x93, 0x85, 0x42, 0x95,
+ };
+ unsigned char result[sizeof(output)] = { 0 };
+
+ params[i++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_DIGEST, digest, 0);
+ params[i++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_MAC, mac, 0);
+ params[i++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_KEY, input_key, sizeof(input_key));
+ params[i++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_SALT, label, strlen(label));
+ params[i++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_INFO, prf_input, strlen(prf_input));
+ params[i] = OSSL_PARAM_construct_end();
+
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_int_gt(EVP_KDF_derive(kctx, result, sizeof(result), params), 0)
+ && TEST_mem_eq(result, sizeof(result), output, sizeof(output));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+static int test_kdf_kbkdf_8009_prf2(void)
+{
+ int ret, i = 0;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[6];
+ char *label = "prf", *digest = "sha384", *prf_input = "test",
+ *mac = "HMAC";
+ static unsigned char input_key[] = {
+ 0x6D, 0x40, 0x4D, 0x37, 0xFA, 0xF7, 0x9F, 0x9D,
+ 0xF0, 0xD3, 0x35, 0x68, 0xD3, 0x20, 0x66, 0x98,
+ 0x00, 0xEB, 0x48, 0x36, 0x47, 0x2E, 0xA8, 0xA0,
+ 0x26, 0xD1, 0x6B, 0x71, 0x82, 0x46, 0x0C, 0x52,
+ };
+ static unsigned char output[] = {
+ 0x98, 0x01, 0xF6, 0x9A, 0x36, 0x8C, 0x2B, 0xF6,
+ 0x75, 0xE5, 0x95, 0x21, 0xE1, 0x77, 0xD9, 0xA0,
+ 0x7F, 0x67, 0xEF, 0xE1, 0xCF, 0xDE, 0x8D, 0x3C,
+ 0x8D, 0x6F, 0x6A, 0x02, 0x56, 0xE3, 0xB1, 0x7D,
+ 0xB3, 0xC1, 0xB6, 0x2A, 0xD1, 0xB8, 0x55, 0x33,
+ 0x60, 0xD1, 0x73, 0x67, 0xEB, 0x15, 0x14, 0xD2,
+ };
+ unsigned char result[sizeof(output)] = { 0 };
+
+ params[i++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_DIGEST, digest, 0);
+ params[i++] = OSSL_PARAM_construct_utf8_string(
+ OSSL_KDF_PARAM_MAC, mac, 0);
+ params[i++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_KEY, input_key, sizeof(input_key));
+ params[i++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_SALT, label, strlen(label));
+ params[i++] = OSSL_PARAM_construct_octet_string(
+ OSSL_KDF_PARAM_INFO, prf_input, strlen(prf_input));
+ params[i] = OSSL_PARAM_construct_end();
+
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_int_gt(EVP_KDF_derive(kctx, result, sizeof(result), params), 0)
+ && TEST_mem_eq(result, sizeof(result), output, sizeof(output));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+#if !defined(OPENSSL_NO_CMAC)
+/*
+ * Test vector taken from
+ * https://csrc.nist.gov/CSRC/media/Projects/
+ * Cryptographic-Algorithm-Validation-Program/documents/KBKDF800-108/CounterMode.zip
+ * Note: Only 32 bit counter is supported ([RLEN=32_BITS])
+ */
+static int test_kdf_kbkdf_fixedinfo(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[8], *p = params;
+ static char *cipher = "AES128";
+ static char *mac = "CMAC";
+ static char *mode = "COUNTER";
+ int use_l = 0;
+ int use_separator = 0;
+
+ static unsigned char input_key[] = {
+ 0xc1, 0x0b, 0x15, 0x2e, 0x8c, 0x97, 0xb7, 0x7e,
+ 0x18, 0x70, 0x4e, 0x0f, 0x0b, 0xd3, 0x83, 0x05,
+ };
+ static unsigned char fixed_input[] = {
+ 0x98, 0xcd, 0x4c, 0xbb, 0xbe, 0xbe, 0x15, 0xd1,
+ 0x7d, 0xc8, 0x6e, 0x6d, 0xba, 0xd8, 0x00, 0xa2,
+ 0xdc, 0xbd, 0x64, 0xf7, 0xc7, 0xad, 0x0e, 0x78,
+ 0xe9, 0xcf, 0x94, 0xff, 0xdb, 0xa8, 0x9d, 0x03,
+ 0xe9, 0x7e, 0xad, 0xf6, 0xc4, 0xf7, 0xb8, 0x06,
+ 0xca, 0xf5, 0x2a, 0xa3, 0x8f, 0x09, 0xd0, 0xeb,
+ 0x71, 0xd7, 0x1f, 0x49, 0x7b, 0xcc, 0x69, 0x06,
+ 0xb4, 0x8d, 0x36, 0xc4,
+
+ };
+ static unsigned char output[] = {
+ 0x26, 0xfa, 0xf6, 0x19, 0x08, 0xad, 0x9e, 0xe8,
+ 0x81, 0xb8, 0x30, 0x5c, 0x22, 0x1d, 0xb5, 0x3f,
+ };
+ unsigned char result[sizeof(output)] = { 0 };
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_CIPHER, cipher, 0);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_MAC, mac, 0);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_MODE, mode, 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, input_key,
+ sizeof(input_key));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO,
+ fixed_input, sizeof(fixed_input));
+ *p++ = OSSL_PARAM_construct_int(OSSL_KDF_PARAM_KBKDF_USE_L, &use_l);
+ *p++ = OSSL_PARAM_construct_int(OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR,
+ &use_separator);
+ *p = OSSL_PARAM_construct_end();
+
+ kctx = get_kdfbyname("KBKDF");
+ ret = TEST_ptr(kctx)
+ && TEST_int_gt(EVP_KDF_derive(kctx, result, sizeof(result), params), 0)
+ && TEST_mem_eq(result, sizeof(result), output, sizeof(output));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+#endif /* OPENSSL_NO_CMAC */
+
+static int test_kdf_ss_hmac(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[6], *p = params;
+ unsigned char out[16];
+ static unsigned char z[] = {
+ 0xb7,0x4a,0x14,0x9a,0x16,0x15,0x46,0xf8,0xc2,0x0b,0x06,0xac,0x4e,0xd4
+ };
+ static unsigned char other[] = {
+ 0x34,0x8a,0x37,0xa2,0x7e,0xf1,0x28,0x2f,0x5f,0x02,0x0d,0xcc
+ };
+ static unsigned char salt[] = {
+ 0x36,0x38,0x27,0x1c,0xcd,0x68,0xa2,0x5d,0xc2,0x4e,0xcd,0xdd,0x39,0xef,
+ 0x3f,0x89
+ };
+ static const unsigned char expected[sizeof(out)] = {
+ 0x44,0xf6,0x76,0xe8,0x5c,0x1b,0x1a,0x8b,0xbc,0x3d,0x31,0x92,0x18,0x63,
+ 0x1c,0xa3
+ };
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_MAC,
+ (char *)OSSL_MAC_NAME_HMAC, 0);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ (char *)"sha256", 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, z, sizeof(z));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO, other,
+ sizeof(other));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT, salt,
+ sizeof(salt));
+ *p = OSSL_PARAM_construct_end();
+
+ ret =
+ TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_SSKDF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+static int test_kdf_ss_kmac(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[7], *p = params;
+ unsigned char out[64];
+ size_t mac_size = 20;
+ static unsigned char z[] = {
+ 0xb7,0x4a,0x14,0x9a,0x16,0x15,0x46,0xf8,0xc2,0x0b,0x06,0xac,0x4e,0xd4
+ };
+ static unsigned char other[] = {
+ 0x34,0x8a,0x37,0xa2,0x7e,0xf1,0x28,0x2f,0x5f,0x02,0x0d,0xcc
+ };
+ static unsigned char salt[] = {
+ 0x36,0x38,0x27,0x1c,0xcd,0x68,0xa2,0x5d,0xc2,0x4e,0xcd,0xdd,0x39,0xef,
+ 0x3f,0x89
+ };
+ static const unsigned char expected[sizeof(out)] = {
+ 0xe9,0xc1,0x84,0x53,0xa0,0x62,0xb5,0x3b,0xdb,0xfc,0xbb,0x5a,0x34,0xbd,
+ 0xb8,0xe5,0xe7,0x07,0xee,0xbb,0x5d,0xd1,0x34,0x42,0x43,0xd8,0xcf,0xc2,
+ 0xc2,0xe6,0x33,0x2f,0x91,0xbd,0xa5,0x86,0xf3,0x7d,0xe4,0x8a,0x65,0xd4,
+ 0xc5,0x14,0xfd,0xef,0xaa,0x1e,0x67,0x54,0xf3,0x73,0xd2,0x38,0xe1,0x95,
+ 0xae,0x15,0x7e,0x1d,0xe8,0x14,0x98,0x03
+ };
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_MAC,
+ (char *)OSSL_MAC_NAME_KMAC128, 0);
+ /* The digest parameter is not needed here and should be ignored */
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ (char *)"SHA256", 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, z, sizeof(z));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_INFO, other,
+ sizeof(other));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT, salt,
+ sizeof(salt));
+ *p++ = OSSL_PARAM_construct_size_t(OSSL_KDF_PARAM_MAC_SIZE, &mac_size);
+ *p = OSSL_PARAM_construct_end();
+
+ ret =
+ TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_SSKDF))
+ && TEST_size_t_eq(EVP_KDF_CTX_get_kdf_size(kctx), 0)
+ && TEST_int_eq(EVP_KDF_CTX_set_params(kctx, params), 1)
+ /* The bug fix for KMAC returning SIZE_MAX was added in 3.0.8 */
+ && (fips_provider_version_lt(NULL, 3, 0, 8)
+ || TEST_size_t_eq(EVP_KDF_CTX_get_kdf_size(kctx), SIZE_MAX))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), NULL), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+static int test_kdf_sshkdf(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[6], *p = params;
+ char kdftype = EVP_KDF_SSHKDF_TYPE_INITIAL_IV_CLI_TO_SRV;
+ unsigned char out[8];
+ /* Test data from NIST CAVS 14.1 test vectors */
+ static unsigned char key[] = {
+ 0x00, 0x00, 0x00, 0x81, 0x00, 0x87, 0x5c, 0x55, 0x1c, 0xef, 0x52, 0x6a,
+ 0x4a, 0x8b, 0xe1, 0xa7, 0xdf, 0x27, 0xe9, 0xed, 0x35, 0x4b, 0xac, 0x9a,
+ 0xfb, 0x71, 0xf5, 0x3d, 0xba, 0xe9, 0x05, 0x67, 0x9d, 0x14, 0xf9, 0xfa,
+ 0xf2, 0x46, 0x9c, 0x53, 0x45, 0x7c, 0xf8, 0x0a, 0x36, 0x6b, 0xe2, 0x78,
+ 0x96, 0x5b, 0xa6, 0x25, 0x52, 0x76, 0xca, 0x2d, 0x9f, 0x4a, 0x97, 0xd2,
+ 0x71, 0xf7, 0x1e, 0x50, 0xd8, 0xa9, 0xec, 0x46, 0x25, 0x3a, 0x6a, 0x90,
+ 0x6a, 0xc2, 0xc5, 0xe4, 0xf4, 0x8b, 0x27, 0xa6, 0x3c, 0xe0, 0x8d, 0x80,
+ 0x39, 0x0a, 0x49, 0x2a, 0xa4, 0x3b, 0xad, 0x9d, 0x88, 0x2c, 0xca, 0xc2,
+ 0x3d, 0xac, 0x88, 0xbc, 0xad, 0xa4, 0xb4, 0xd4, 0x26, 0xa3, 0x62, 0x08,
+ 0x3d, 0xab, 0x65, 0x69, 0xc5, 0x4c, 0x22, 0x4d, 0xd2, 0xd8, 0x76, 0x43,
+ 0xaa, 0x22, 0x76, 0x93, 0xe1, 0x41, 0xad, 0x16, 0x30, 0xce, 0x13, 0x14,
+ 0x4e
+ };
+ static unsigned char xcghash[] = {
+ 0x0e, 0x68, 0x3f, 0xc8, 0xa9, 0xed, 0x7c, 0x2f, 0xf0, 0x2d, 0xef, 0x23,
+ 0xb2, 0x74, 0x5e, 0xbc, 0x99, 0xb2, 0x67, 0xda, 0xa8, 0x6a, 0x4a, 0xa7,
+ 0x69, 0x72, 0x39, 0x08, 0x82, 0x53, 0xf6, 0x42
+ };
+ static unsigned char sessid[] = {
+ 0x0e, 0x68, 0x3f, 0xc8, 0xa9, 0xed, 0x7c, 0x2f, 0xf0, 0x2d, 0xef, 0x23,
+ 0xb2, 0x74, 0x5e, 0xbc, 0x99, 0xb2, 0x67, 0xda, 0xa8, 0x6a, 0x4a, 0xa7,
+ 0x69, 0x72, 0x39, 0x08, 0x82, 0x53, 0xf6, 0x42
+ };
+ static const unsigned char expected[sizeof(out)] = {
+ 0x41, 0xff, 0x2e, 0xad, 0x16, 0x83, 0xf1, 0xe6
+ };
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ (char *)"sha256", 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, key,
+ sizeof(key));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SSHKDF_XCGHASH,
+ xcghash, sizeof(xcghash));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SSHKDF_SESSION_ID,
+ sessid, sizeof(sessid));
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_SSHKDF_TYPE,
+ &kdftype, sizeof(kdftype));
+ *p = OSSL_PARAM_construct_end();
+
+ ret =
+ TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_SSHKDF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+static int test_kdfs_same( EVP_KDF *kdf1, EVP_KDF *kdf2)
+{
+ /* Fast path in case the two are the same algorithm pointer */
+ if (kdf1 == kdf2)
+ return 1;
+ /*
+ * Compare their names and providers instead.
+ * This is necessary in a non-caching build (or a cache flush during fetch)
+ * because without the algorithm in the cache, fetching it a second time
+ * will result in a different pointer.
+ */
+ return TEST_ptr_eq(EVP_KDF_get0_provider(kdf1), EVP_KDF_get0_provider(kdf2))
+ && TEST_str_eq(EVP_KDF_get0_name(kdf1), EVP_KDF_get0_name(kdf2));
+}
+
+static int test_kdf_get_kdf(void)
+{
+ EVP_KDF *kdf1 = NULL, *kdf2 = NULL;
+ ASN1_OBJECT *obj;
+ int ok = 1;
+
+ if (!TEST_ptr(obj = OBJ_nid2obj(NID_id_pbkdf2))
+ || !TEST_ptr(kdf1 = EVP_KDF_fetch(NULL, OSSL_KDF_NAME_PBKDF2, NULL))
+ || !TEST_ptr(kdf2 = EVP_KDF_fetch(NULL, OBJ_nid2sn(OBJ_obj2nid(obj)),
+ NULL))
+ || !test_kdfs_same(kdf1, kdf2))
+ ok = 0;
+ EVP_KDF_free(kdf1);
+ kdf1 = NULL;
+ EVP_KDF_free(kdf2);
+ kdf2 = NULL;
+
+ if (!TEST_ptr(kdf1 = EVP_KDF_fetch(NULL, SN_tls1_prf, NULL))
+ || !TEST_ptr(kdf2 = EVP_KDF_fetch(NULL, LN_tls1_prf, NULL))
+ || !test_kdfs_same(kdf1, kdf2))
+ ok = 0;
+ /* kdf1 is re-used below, so don't free it here */
+ EVP_KDF_free(kdf2);
+ kdf2 = NULL;
+
+ if (!TEST_ptr(kdf2 = EVP_KDF_fetch(NULL, OBJ_nid2sn(NID_tls1_prf), NULL))
+ || !test_kdfs_same(kdf1, kdf2))
+ ok = 0;
+ EVP_KDF_free(kdf1);
+ kdf1 = NULL;
+ EVP_KDF_free(kdf2);
+ kdf2 = NULL;
+
+ return ok;
+}
+
+#if !defined(OPENSSL_NO_CMS) && !defined(OPENSSL_NO_DES)
+static int test_kdf_x942_asn1(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx = NULL;
+ OSSL_PARAM params[4], *p = params;
+ const char *cek_alg = SN_id_smime_alg_CMS3DESwrap;
+ unsigned char out[24];
+ /* RFC2631 Section 2.1.6 Test data */
+ static unsigned char z[] = {
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,
+ 0x0e,0x0f,0x10,0x11,0x12,0x13
+ };
+ static const unsigned char expected[sizeof(out)] = {
+ 0xa0,0x96,0x61,0x39,0x23,0x76,0xf7,0x04,
+ 0x4d,0x90,0x52,0xa3,0x97,0x88,0x32,0x46,
+ 0xb6,0x7f,0x5f,0x1e,0xf6,0x3e,0xb5,0xfb
+ };
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
+ (char *)"sha1", 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, z,
+ sizeof(z));
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_CEK_ALG,
+ (char *)cek_alg, 0);
+ *p = OSSL_PARAM_construct_end();
+
+ ret =
+ TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_X942KDF_ASN1))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+#endif /* OPENSSL_NO_CMS */
+
+static int test_kdf_krb5kdf(void)
+{
+ int ret;
+ EVP_KDF_CTX *kctx;
+ OSSL_PARAM params[4], *p = params;
+ unsigned char out[16];
+ static unsigned char key[] = {
+ 0x42, 0x26, 0x3C, 0x6E, 0x89, 0xF4, 0xFC, 0x28,
+ 0xB8, 0xDF, 0x68, 0xEE, 0x09, 0x79, 0x9F, 0x15
+ };
+ static unsigned char constant[] = {
+ 0x00, 0x00, 0x00, 0x02, 0x99
+ };
+ static const unsigned char expected[sizeof(out)] = {
+ 0x34, 0x28, 0x0A, 0x38, 0x2B, 0xC9, 0x27, 0x69,
+ 0xB2, 0xDA, 0x2F, 0x9E, 0xF0, 0x66, 0x85, 0x4B
+ };
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_CIPHER,
+ (char *)"AES-128-CBC", 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, key,
+ sizeof(key));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_CONSTANT,
+ constant, sizeof(constant));
+ *p = OSSL_PARAM_construct_end();
+
+ ret =
+ TEST_ptr(kctx = get_kdfbyname(OSSL_KDF_NAME_KRB5KDF))
+ && TEST_int_gt(EVP_KDF_derive(kctx, out, sizeof(out), params), 0)
+ && TEST_mem_eq(out, sizeof(out), expected, sizeof(expected));
+
+ EVP_KDF_CTX_free(kctx);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_kdf_pbkdf1);
+ ADD_TEST(test_kdf_pbkdf1_key_too_long);
+#if !defined(OPENSSL_NO_CMAC) && !defined(OPENSSL_NO_CAMELLIA)
+ ADD_TEST(test_kdf_kbkdf_6803_128);
+ ADD_TEST(test_kdf_kbkdf_6803_256);
+#endif
+ ADD_TEST(test_kdf_kbkdf_invalid_digest);
+ ADD_TEST(test_kdf_kbkdf_invalid_mac);
+ ADD_TEST(test_kdf_kbkdf_zero_output_size);
+ ADD_TEST(test_kdf_kbkdf_empty_key);
+ ADD_TEST(test_kdf_kbkdf_1byte_key);
+ ADD_TEST(test_kdf_kbkdf_8009_prf1);
+ ADD_TEST(test_kdf_kbkdf_8009_prf2);
+#if !defined(OPENSSL_NO_CMAC)
+ ADD_TEST(test_kdf_kbkdf_fixedinfo);
+#endif
+ ADD_TEST(test_kdf_get_kdf);
+ ADD_TEST(test_kdf_tls1_prf);
+ ADD_TEST(test_kdf_tls1_prf_invalid_digest);
+ ADD_TEST(test_kdf_tls1_prf_zero_output_size);
+ ADD_TEST(test_kdf_tls1_prf_empty_secret);
+ ADD_TEST(test_kdf_tls1_prf_1byte_secret);
+ ADD_TEST(test_kdf_tls1_prf_empty_seed);
+ ADD_TEST(test_kdf_tls1_prf_1byte_seed);
+ ADD_TEST(test_kdf_hkdf);
+ ADD_TEST(test_kdf_hkdf_invalid_digest);
+ ADD_TEST(test_kdf_hkdf_zero_output_size);
+ ADD_TEST(test_kdf_hkdf_empty_key);
+ ADD_TEST(test_kdf_hkdf_1byte_key);
+ ADD_TEST(test_kdf_hkdf_empty_salt);
+ ADD_TEST(test_kdf_hkdf_gettables);
+ ADD_TEST(test_kdf_hkdf_gettables_expandonly);
+ ADD_TEST(test_kdf_hkdf_gettables_no_digest);
+ ADD_TEST(test_kdf_hkdf_derive_set_params_fail);
+ ADD_TEST(test_kdf_hkdf_set_invalid_mode);
+ ADD_TEST(test_kdf_hkdf_set_ctx_param_fail);
+ ADD_TEST(test_kdf_pbkdf2);
+ ADD_TEST(test_kdf_pbkdf2_small_output);
+ ADD_TEST(test_kdf_pbkdf2_large_output);
+ ADD_TEST(test_kdf_pbkdf2_small_salt);
+ ADD_TEST(test_kdf_pbkdf2_small_iterations);
+ ADD_TEST(test_kdf_pbkdf2_small_salt_pkcs5);
+ ADD_TEST(test_kdf_pbkdf2_small_iterations_pkcs5);
+ ADD_TEST(test_kdf_pbkdf2_invalid_digest);
+#ifndef OPENSSL_NO_SCRYPT
+ ADD_TEST(test_kdf_scrypt);
+#endif
+ ADD_TEST(test_kdf_ss_hash);
+ ADD_TEST(test_kdf_ss_hmac);
+ ADD_TEST(test_kdf_ss_kmac);
+ ADD_TEST(test_kdf_sshkdf);
+ ADD_TEST(test_kdf_x963);
+#if !defined(OPENSSL_NO_CMS) && !defined(OPENSSL_NO_DES)
+ ADD_TEST(test_kdf_x942_asn1);
+#endif
+ ADD_TEST(test_kdf_krb5kdf);
+ return 1;
+}
diff --git a/test/evp_libctx_test.c b/test/evp_libctx_test.c
new file mode 100644
index 000000000000..2448c35a149f
--- /dev/null
+++ b/test/evp_libctx_test.c
@@ -0,0 +1,766 @@
+/*
+ * Copyright 2020-2022 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
+ */
+
+/*
+
+ * These tests are setup to load null into the default library context.
+ * Any tests are expected to use the created 'libctx' to find algorithms.
+ * The framework runs the tests twice using the 'default' provider or
+ * 'fips' provider as inputs.
+ */
+
+/*
+ * DSA/DH low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+#include <assert.h>
+#include <openssl/evp.h>
+#include <openssl/provider.h>
+#include <openssl/dsa.h>
+#include <openssl/dh.h>
+#include <openssl/safestack.h>
+#include <openssl/core_dispatch.h>
+#include <openssl/core_names.h>
+#include <openssl/x509.h>
+#include <openssl/encoder.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+#include "crypto/bn_dh.h" /* _bignum_ffdhe2048_p */
+
+static OSSL_LIB_CTX *libctx = NULL;
+static OSSL_PROVIDER *nullprov = NULL;
+static OSSL_PROVIDER *libprov = NULL;
+static STACK_OF(OPENSSL_STRING) *cipher_names = NULL;
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_CONFIG_FILE,
+ OPT_PROVIDER_NAME,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "config", OPT_CONFIG_FILE, '<',
+ "The configuration file to use for the libctx" },
+ { "provider", OPT_PROVIDER_NAME, 's',
+ "The provider to load (The default value is 'default')" },
+ { NULL }
+ };
+ return test_options;
+}
+
+#ifndef OPENSSL_NO_DH
+static const char *getname(int id)
+{
+ const char *name[] = {"p", "q", "g" };
+
+ if (id >= 0 && id < 3)
+ return name[id];
+ return "?";
+}
+#endif
+
+/*
+ * We're using some DH specific values in this test, so we skip compilation if
+ * we're in a no-dh build.
+ */
+#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DH)
+
+static int test_dsa_param_keygen(int tstid)
+{
+ int ret = 0;
+ int expected;
+ EVP_PKEY_CTX *gen_ctx = NULL;
+ EVP_PKEY *pkey_parm = NULL;
+ EVP_PKEY *pkey = NULL, *dup_pk = NULL;
+ DSA *dsa = NULL;
+ int pind, qind, gind;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL;
+
+ /*
+ * Just grab some fixed dh p, q, g values for testing,
+ * these 'safe primes' should not be used normally for dsa *.
+ */
+ static const BIGNUM *bn[] = {
+ &ossl_bignum_dh2048_256_p, &ossl_bignum_dh2048_256_q,
+ &ossl_bignum_dh2048_256_g
+ };
+
+ /*
+ * These tests are using bad values for p, q, g by reusing the values.
+ * A value of 0 uses p, 1 uses q and 2 uses g.
+ * There are 27 different combinations, with only the 1 valid combination.
+ */
+ pind = tstid / 9;
+ qind = (tstid / 3) % 3;
+ gind = tstid % 3;
+ expected = (pind == 0 && qind == 1 && gind == 2);
+
+ TEST_note("Testing with (p, q, g) = (%s, %s, %s)\n", getname(pind),
+ getname(qind), getname(gind));
+
+ if (!TEST_ptr(pkey_parm = EVP_PKEY_new())
+ || !TEST_ptr(dsa = DSA_new())
+ || !TEST_ptr(p = BN_dup(bn[pind]))
+ || !TEST_ptr(q = BN_dup(bn[qind]))
+ || !TEST_ptr(g = BN_dup(bn[gind]))
+ || !TEST_true(DSA_set0_pqg(dsa, p, q, g)))
+ goto err;
+ p = q = g = NULL;
+
+ if (!TEST_true(EVP_PKEY_assign_DSA(pkey_parm, dsa)))
+ goto err;
+ dsa = NULL;
+
+ if (!TEST_ptr(gen_ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey_parm, NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(gen_ctx), 0)
+ || !TEST_int_eq(EVP_PKEY_keygen(gen_ctx, &pkey), expected))
+ goto err;
+
+ if (expected) {
+ if (!TEST_ptr(dup_pk = EVP_PKEY_dup(pkey))
+ || !TEST_int_eq(EVP_PKEY_eq(pkey, dup_pk), 1))
+ goto err;
+ }
+
+ ret = 1;
+err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(dup_pk);
+ EVP_PKEY_CTX_free(gen_ctx);
+ EVP_PKEY_free(pkey_parm);
+ DSA_free(dsa);
+ BN_free(g);
+ BN_free(q);
+ BN_free(p);
+ return ret;
+}
+#endif /* OPENSSL_NO_DSA */
+
+#ifndef OPENSSL_NO_DH
+static int do_dh_param_keygen(int tstid, const BIGNUM **bn)
+{
+ int ret = 0;
+ int expected;
+ EVP_PKEY_CTX *gen_ctx = NULL;
+ EVP_PKEY *pkey_parm = NULL;
+ EVP_PKEY *pkey = NULL, *dup_pk = NULL;
+ DH *dh = NULL;
+ int pind, qind, gind;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL;
+
+ /*
+ * These tests are using bad values for p, q, g by reusing the values.
+ * A value of 0 uses p, 1 uses q and 2 uses g.
+ * There are 27 different combinations, with only the 1 valid combination.
+ */
+ pind = tstid / 9;
+ qind = (tstid / 3) % 3;
+ gind = tstid % 3;
+ expected = (pind == 0 && qind == 1 && gind == 2);
+
+ TEST_note("Testing with (p, q, g) = (%s, %s, %s)", getname(pind),
+ getname(qind), getname(gind));
+
+ if (!TEST_ptr(pkey_parm = EVP_PKEY_new())
+ || !TEST_ptr(dh = DH_new())
+ || !TEST_ptr(p = BN_dup(bn[pind]))
+ || !TEST_ptr(q = BN_dup(bn[qind]))
+ || !TEST_ptr(g = BN_dup(bn[gind]))
+ || !TEST_true(DH_set0_pqg(dh, p, q, g)))
+ goto err;
+ p = q = g = NULL;
+
+ if (!TEST_true(EVP_PKEY_assign_DH(pkey_parm, dh)))
+ goto err;
+ dh = NULL;
+
+ if (!TEST_ptr(gen_ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey_parm, NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(gen_ctx), 0)
+ || !TEST_int_eq(EVP_PKEY_keygen(gen_ctx, &pkey), expected))
+ goto err;
+
+ if (expected) {
+ if (!TEST_ptr(dup_pk = EVP_PKEY_dup(pkey))
+ || !TEST_int_eq(EVP_PKEY_eq(pkey, dup_pk), 1))
+ goto err;
+ }
+
+ ret = 1;
+err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(dup_pk);
+ EVP_PKEY_CTX_free(gen_ctx);
+ EVP_PKEY_free(pkey_parm);
+ DH_free(dh);
+ BN_free(g);
+ BN_free(q);
+ BN_free(p);
+ return ret;
+}
+
+/*
+ * Note that we get the fips186-4 path being run for most of these cases since
+ * the internal code will detect that the p, q, g does not match a safe prime
+ * group (Except for when tstid = 5, which sets the correct p, q, g)
+ */
+static int test_dh_safeprime_param_keygen(int tstid)
+{
+ static const BIGNUM *bn[] = {
+ &ossl_bignum_ffdhe2048_p, &ossl_bignum_ffdhe2048_q,
+ &ossl_bignum_const_2
+ };
+ return do_dh_param_keygen(tstid, bn);
+}
+
+static int dhx_cert_load(void)
+{
+ int ret = 0;
+ X509 *cert = NULL;
+ BIO *bio = NULL;
+
+ static const unsigned char dhx_cert[] = {
+ 0x30,0x82,0x03,0xff,0x30,0x82,0x02,0xe7,0xa0,0x03,0x02,0x01,0x02,0x02,0x09,0x00,
+ 0xdb,0xf5,0x4d,0x22,0xa0,0x7a,0x67,0xa6,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,
+ 0xf7,0x0d,0x01,0x01,0x05,0x05,0x00,0x30,0x44,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,
+ 0x04,0x06,0x13,0x02,0x55,0x4b,0x31,0x16,0x30,0x14,0x06,0x03,0x55,0x04,0x0a,0x0c,
+ 0x0d,0x4f,0x70,0x65,0x6e,0x53,0x53,0x4c,0x20,0x47,0x72,0x6f,0x75,0x70,0x31,0x1d,
+ 0x30,0x1b,0x06,0x03,0x55,0x04,0x03,0x0c,0x14,0x54,0x65,0x73,0x74,0x20,0x53,0x2f,
+ 0x4d,0x49,0x4d,0x45,0x20,0x52,0x53,0x41,0x20,0x52,0x6f,0x6f,0x74,0x30,0x1e,0x17,
+ 0x0d,0x31,0x33,0x30,0x38,0x30,0x32,0x31,0x34,0x34,0x39,0x32,0x39,0x5a,0x17,0x0d,
+ 0x32,0x33,0x30,0x36,0x31,0x31,0x31,0x34,0x34,0x39,0x32,0x39,0x5a,0x30,0x44,0x31,
+ 0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x55,0x4b,0x31,0x16,0x30,0x14,
+ 0x06,0x03,0x55,0x04,0x0a,0x0c,0x0d,0x4f,0x70,0x65,0x6e,0x53,0x53,0x4c,0x20,0x47,
+ 0x72,0x6f,0x75,0x70,0x31,0x1d,0x30,0x1b,0x06,0x03,0x55,0x04,0x03,0x0c,0x14,0x54,
+ 0x65,0x73,0x74,0x20,0x53,0x2f,0x4d,0x49,0x4d,0x45,0x20,0x45,0x45,0x20,0x44,0x48,
+ 0x20,0x23,0x31,0x30,0x82,0x01,0xb6,0x30,0x82,0x01,0x2b,0x06,0x07,0x2a,0x86,0x48,
+ 0xce,0x3e,0x02,0x01,0x30,0x82,0x01,0x1e,0x02,0x81,0x81,0x00,0xd4,0x0c,0x4a,0x0c,
+ 0x04,0x72,0x71,0x19,0xdf,0x59,0x19,0xc5,0xaf,0x44,0x7f,0xca,0x8e,0x2b,0xf0,0x09,
+ 0xf5,0xd3,0x25,0xb1,0x73,0x16,0x55,0x89,0xdf,0xfd,0x07,0xaf,0x19,0xd3,0x7f,0xd0,
+ 0x07,0xa2,0xfe,0x3f,0x5a,0xf1,0x01,0xc6,0xf8,0x2b,0xef,0x4e,0x6d,0x03,0x38,0x42,
+ 0xa1,0x37,0xd4,0x14,0xb4,0x00,0x4a,0xb1,0x86,0x5a,0x83,0xce,0xb9,0x08,0x0e,0xc1,
+ 0x99,0x27,0x47,0x8d,0x0b,0x85,0xa8,0x82,0xed,0xcc,0x0d,0xb9,0xb0,0x32,0x7e,0xdf,
+ 0xe8,0xe4,0xf6,0xf6,0xec,0xb3,0xee,0x7a,0x11,0x34,0x65,0x97,0xfc,0x1a,0xb0,0x95,
+ 0x4b,0x19,0xb9,0xa6,0x1c,0xd9,0x01,0x32,0xf7,0x35,0x7c,0x2d,0x5d,0xfe,0xc1,0x85,
+ 0x70,0x49,0xf8,0xcc,0x99,0xd0,0xbe,0xf1,0x5a,0x78,0xc8,0x03,0x02,0x81,0x80,0x69,
+ 0x00,0xfd,0x66,0xf2,0xfc,0x15,0x8b,0x09,0xb8,0xdc,0x4d,0xea,0xaa,0x79,0x55,0xf9,
+ 0xdf,0x46,0xa6,0x2f,0xca,0x2d,0x8f,0x59,0x2a,0xad,0x44,0xa3,0xc6,0x18,0x2f,0x95,
+ 0xb6,0x16,0x20,0xe3,0xd3,0xd1,0x8f,0x03,0xce,0x71,0x7c,0xef,0x3a,0xc7,0x44,0x39,
+ 0x0e,0xe2,0x1f,0xd8,0xd3,0x89,0x2b,0xe7,0x51,0xdc,0x12,0x48,0x4c,0x18,0x4d,0x99,
+ 0x12,0x06,0xe4,0x17,0x02,0x03,0x8c,0x24,0x05,0x8e,0xa6,0x85,0xf2,0x69,0x1b,0xe1,
+ 0x6a,0xdc,0xe2,0x04,0x3a,0x01,0x9d,0x64,0xbe,0xfe,0x45,0xf9,0x44,0x18,0x71,0xbd,
+ 0x2d,0x3e,0x7a,0x6f,0x72,0x7d,0x1a,0x80,0x42,0x57,0xae,0x18,0x6f,0x91,0xd6,0x61,
+ 0x03,0x8a,0x1c,0x89,0x73,0xc7,0x56,0x41,0x03,0xd3,0xf8,0xed,0x65,0xe2,0x85,0x02,
+ 0x15,0x00,0x89,0x94,0xab,0x10,0x67,0x45,0x41,0xad,0x63,0xc6,0x71,0x40,0x8d,0x6b,
+ 0x9e,0x19,0x5b,0xa4,0xc7,0xf5,0x03,0x81,0x84,0x00,0x02,0x81,0x80,0x2f,0x5b,0xde,
+ 0x72,0x02,0x36,0x6b,0x00,0x5e,0x24,0x7f,0x14,0x2c,0x18,0x52,0x42,0x97,0x4b,0xdb,
+ 0x6e,0x15,0x50,0x3c,0x45,0x3e,0x25,0xf3,0xb7,0xc5,0x6e,0xe5,0x52,0xe7,0xc4,0xfb,
+ 0xf4,0xa5,0xf0,0x39,0x12,0x7f,0xbc,0x54,0x1c,0x93,0xb9,0x5e,0xee,0xe9,0x14,0xb0,
+ 0xdf,0xfe,0xfc,0x36,0xe4,0xf2,0xaf,0xfb,0x13,0xc8,0xdf,0x18,0x94,0x1d,0x40,0xb9,
+ 0x71,0xdd,0x4c,0x9c,0xa7,0x03,0x52,0x02,0xb5,0xed,0x71,0x80,0x3e,0x23,0xda,0x28,
+ 0xe5,0xab,0xe7,0x6f,0xf2,0x0a,0x0e,0x00,0x5b,0x7d,0xc6,0x4b,0xd7,0xc7,0xb2,0xc3,
+ 0xba,0x62,0x7f,0x70,0x28,0xa0,0x9d,0x71,0x13,0x70,0xd1,0x9f,0x32,0x2f,0x3e,0xd2,
+ 0xcd,0x1b,0xa4,0xc6,0x72,0xa0,0x74,0x5d,0x71,0xef,0x03,0x43,0x6e,0xa3,0x60,0x30,
+ 0x5e,0x30,0x0c,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,0x02,0x30,0x00,0x30,
+ 0x0e,0x06,0x03,0x55,0x1d,0x0f,0x01,0x01,0xff,0x04,0x04,0x03,0x02,0x05,0xe0,0x30,
+ 0x1d,0x06,0x03,0x55,0x1d,0x0e,0x04,0x16,0x04,0x14,0x0b,0x5a,0x4d,0x5f,0x7d,0x25,
+ 0xc7,0xf2,0x9d,0xc1,0xaa,0xb7,0x63,0x82,0x2f,0xfa,0x8f,0x32,0xe7,0xc0,0x30,0x1f,
+ 0x06,0x03,0x55,0x1d,0x23,0x04,0x18,0x30,0x16,0x80,0x14,0xdf,0x7e,0x5e,0x88,0x05,
+ 0x24,0x33,0x08,0xdd,0x22,0x81,0x02,0x97,0xcc,0x9a,0xb7,0xb1,0x33,0x27,0x30,0x30,
+ 0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x01,0x05,0x05,0x00,0x03,0x82,
+ 0x01,0x01,0x00,0x5a,0xf2,0x63,0xef,0xd3,0x16,0xd7,0xf5,0xaa,0xdd,0x12,0x00,0x36,
+ 0x00,0x21,0xa2,0x7b,0x08,0xd6,0x3b,0x9f,0x62,0xac,0x53,0x1f,0xed,0x4c,0xd1,0x15,
+ 0x34,0x65,0x71,0xee,0x96,0x07,0xa6,0xef,0xb2,0xde,0xd8,0xbb,0x35,0x6e,0x2c,0xe2,
+ 0xd1,0x26,0xef,0x7e,0x94,0xe2,0x88,0x51,0xa4,0x6c,0xaa,0x27,0x2a,0xd3,0xb6,0xc2,
+ 0xf7,0xea,0xc3,0x0b,0xa9,0xb5,0x28,0x37,0xa2,0x63,0x08,0xe4,0x88,0xc0,0x1b,0x16,
+ 0x1b,0xca,0xfd,0x8a,0x07,0x32,0x29,0xa7,0x53,0xb5,0x2d,0x30,0xe4,0xf5,0x16,0xc3,
+ 0xe3,0xc2,0x4c,0x30,0x5d,0x35,0x80,0x1c,0xa2,0xdb,0xe3,0x4b,0x51,0x0d,0x4c,0x60,
+ 0x5f,0xb9,0x46,0xac,0xa8,0x46,0xa7,0x32,0xa7,0x9c,0x76,0xf8,0xe9,0xb5,0x19,0xe2,
+ 0x0c,0xe1,0x0f,0xc6,0x46,0xe2,0x38,0xa7,0x87,0x72,0x6d,0x6c,0xbc,0x88,0x2f,0x9d,
+ 0x2d,0xe5,0xd0,0x7d,0x1e,0xc7,0x5d,0xf8,0x7e,0xb4,0x0b,0xa6,0xf9,0x6c,0xe3,0x7c,
+ 0xb2,0x70,0x6e,0x75,0x9b,0x1e,0x63,0xe1,0x4d,0xb2,0x81,0xd3,0x55,0x38,0x94,0x1a,
+ 0x7a,0xfa,0xbf,0x01,0x18,0x70,0x2d,0x35,0xd3,0xe3,0x10,0x7a,0x9a,0xa7,0x8f,0xf3,
+ 0xbd,0x56,0x55,0x5e,0xd8,0xbd,0x4e,0x16,0x76,0xd0,0x48,0x4c,0xf9,0x51,0x54,0xdf,
+ 0x2d,0xb0,0xc9,0xaa,0x5e,0x42,0x38,0x50,0xbf,0x0f,0xc0,0xd9,0x84,0x44,0x4b,0x42,
+ 0x24,0xec,0x14,0xa3,0xde,0x11,0xdf,0x58,0x7f,0xc2,0x4d,0xb2,0xd5,0x42,0x78,0x6e,
+ 0x52,0x3e,0xad,0xc3,0x5f,0x04,0xc4,0xe6,0x31,0xaa,0x81,0x06,0x8b,0x13,0x4b,0x3c,
+ 0x0e,0x6a,0xb1
+ };
+
+ if (!TEST_ptr(bio = BIO_new_mem_buf(dhx_cert, sizeof(dhx_cert)))
+ || !TEST_ptr(cert = X509_new_ex(libctx, NULL))
+ || !TEST_ptr(d2i_X509_bio(bio, &cert)))
+ goto err;
+ ret = 1;
+err:
+ X509_free(cert);
+ BIO_free(bio);
+ return ret;
+}
+
+#endif /* OPENSSL_NO_DH */
+
+static int test_cipher_reinit(int test_id)
+{
+ int ret = 0, diff, ccm, siv, no_null_key;
+ int out1_len = 0, out2_len = 0, out3_len = 0;
+ EVP_CIPHER *cipher = NULL;
+ EVP_CIPHER_CTX *ctx = NULL;
+ unsigned char out1[256];
+ unsigned char out2[256];
+ unsigned char out3[256];
+ unsigned char in[16] = {
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10
+ };
+ unsigned char key[64] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x03, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ };
+ unsigned char iv[16] = {
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00
+ };
+ const char *name = sk_OPENSSL_STRING_value(cipher_names, test_id);
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new()))
+ goto err;
+
+ TEST_note("Fetching %s\n", name);
+ if (!TEST_ptr(cipher = EVP_CIPHER_fetch(libctx, name, NULL)))
+ goto err;
+
+ /* ccm fails on the second update - this matches OpenSSL 1_1_1 behaviour */
+ ccm = (EVP_CIPHER_get_mode(cipher) == EVP_CIPH_CCM_MODE);
+
+ /* siv cannot be called with NULL key as the iv is irrelevant */
+ siv = (EVP_CIPHER_get_mode(cipher) == EVP_CIPH_SIV_MODE);
+
+ /*
+ * Skip init call with a null key for RC4 as the stream cipher does not
+ * handle reinit (1.1.1 behaviour).
+ */
+ no_null_key = EVP_CIPHER_is_a(cipher, "RC4")
+ || EVP_CIPHER_is_a(cipher, "RC4-40")
+ || EVP_CIPHER_is_a(cipher, "RC4-HMAC-MD5");
+
+ /* DES3-WRAP uses random every update - so it will give a different value */
+ diff = EVP_CIPHER_is_a(cipher, "DES3-WRAP");
+
+ if (!TEST_true(EVP_EncryptInit_ex(ctx, cipher, NULL, key, iv))
+ || !TEST_true(EVP_EncryptUpdate(ctx, out1, &out1_len, in, sizeof(in)))
+ || !TEST_true(EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv))
+ || !TEST_int_eq(EVP_EncryptUpdate(ctx, out2, &out2_len, in, sizeof(in)),
+ ccm ? 0 : 1)
+ || (!no_null_key
+ && (!TEST_true(EVP_EncryptInit_ex(ctx, NULL, NULL, NULL, iv))
+ || !TEST_int_eq(EVP_EncryptUpdate(ctx, out3, &out3_len, in, sizeof(in)),
+ ccm || siv ? 0 : 1))))
+ goto err;
+
+ if (ccm == 0) {
+ if (diff) {
+ if (!TEST_mem_ne(out1, out1_len, out2, out2_len)
+ || !TEST_mem_ne(out1, out1_len, out3, out3_len)
+ || !TEST_mem_ne(out2, out2_len, out3, out3_len))
+ goto err;
+ } else {
+ if (!TEST_mem_eq(out1, out1_len, out2, out2_len)
+ || (!siv && !no_null_key && !TEST_mem_eq(out1, out1_len, out3, out3_len)))
+ goto err;
+ }
+ }
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+/*
+ * This test only uses a partial block (half the block size) of input for each
+ * EVP_EncryptUpdate() in order to test that the second init/update is not using
+ * a leftover buffer from the first init/update.
+ * Note: some ciphers don't need a full block to produce output.
+ */
+static int test_cipher_reinit_partialupdate(int test_id)
+{
+ int ret = 0, in_len;
+ int out1_len = 0, out2_len = 0, out3_len = 0;
+ EVP_CIPHER *cipher = NULL;
+ EVP_CIPHER_CTX *ctx = NULL;
+ unsigned char out1[256];
+ unsigned char out2[256];
+ unsigned char out3[256];
+ static const unsigned char in[32] = {
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0xba, 0xbe, 0xba, 0xbe, 0x00, 0x00, 0xba, 0xbe,
+ 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ };
+ static const unsigned char key[64] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x03, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ };
+ static const unsigned char iv[16] = {
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00
+ };
+ const char *name = sk_OPENSSL_STRING_value(cipher_names, test_id);
+
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new()))
+ goto err;
+
+ TEST_note("Fetching %s\n", name);
+ if (!TEST_ptr(cipher = EVP_CIPHER_fetch(libctx, name, NULL)))
+ goto err;
+
+ in_len = EVP_CIPHER_get_block_size(cipher) / 2;
+
+ /* skip any ciphers that don't allow partial updates */
+ if (((EVP_CIPHER_get_flags(cipher)
+ & (EVP_CIPH_FLAG_CTS | EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK)) != 0)
+ || EVP_CIPHER_get_mode(cipher) == EVP_CIPH_CCM_MODE
+ || EVP_CIPHER_get_mode(cipher) == EVP_CIPH_XTS_MODE
+ || EVP_CIPHER_get_mode(cipher) == EVP_CIPH_WRAP_MODE) {
+ ret = 1;
+ goto err;
+ }
+
+ if (!TEST_true(EVP_EncryptInit_ex(ctx, cipher, NULL, key, iv))
+ || !TEST_true(EVP_EncryptUpdate(ctx, out1, &out1_len, in, in_len))
+ || !TEST_true(EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv))
+ || !TEST_true(EVP_EncryptUpdate(ctx, out2, &out2_len, in, in_len)))
+ goto err;
+
+ if (!TEST_mem_eq(out1, out1_len, out2, out2_len))
+ goto err;
+
+ if (EVP_CIPHER_get_mode(cipher) != EVP_CIPH_SIV_MODE) {
+ if (!TEST_true(EVP_EncryptInit_ex(ctx, NULL, NULL, NULL, iv))
+ || !TEST_true(EVP_EncryptUpdate(ctx, out3, &out3_len, in, in_len)))
+ goto err;
+
+ if (!TEST_mem_eq(out1, out1_len, out3, out3_len))
+ goto err;
+ }
+ ret = 1;
+err:
+ EVP_CIPHER_free(cipher);
+ EVP_CIPHER_CTX_free(ctx);
+ return ret;
+}
+
+
+static int name_cmp(const char * const *a, const char * const *b)
+{
+ return OPENSSL_strcasecmp(*a, *b);
+}
+
+static void collect_cipher_names(EVP_CIPHER *cipher, void *cipher_names_list)
+{
+ STACK_OF(OPENSSL_STRING) *names = cipher_names_list;
+ const char *name = EVP_CIPHER_get0_name(cipher);
+ char *namedup = NULL;
+
+ assert(name != NULL);
+ /* the cipher will be freed after returning, strdup is needed */
+ if ((namedup = OPENSSL_strdup(name)) != NULL
+ && !sk_OPENSSL_STRING_push(names, namedup))
+ OPENSSL_free(namedup);
+}
+
+static int rsa_keygen(int bits, EVP_PKEY **pub, EVP_PKEY **priv)
+{
+ int ret = 0;
+ unsigned char *pub_der = NULL;
+ const unsigned char *pp = NULL;
+ size_t len = 0;
+ OSSL_ENCODER_CTX *ectx = NULL;
+
+ if (!TEST_ptr(*priv = EVP_PKEY_Q_keygen(libctx, NULL, "RSA", bits))
+ || !TEST_ptr(ectx =
+ OSSL_ENCODER_CTX_new_for_pkey(*priv,
+ EVP_PKEY_PUBLIC_KEY,
+ "DER", "type-specific",
+ NULL))
+ || !TEST_true(OSSL_ENCODER_to_data(ectx, &pub_der, &len)))
+ goto err;
+ pp = pub_der;
+ if (!TEST_ptr(d2i_PublicKey(EVP_PKEY_RSA, pub, &pp, len)))
+ goto err;
+ ret = 1;
+err:
+ OSSL_ENCODER_CTX_free(ectx);
+ OPENSSL_free(pub_der);
+ return ret;
+}
+
+static int kem_rsa_gen_recover(void)
+{
+ int ret = 0;
+ EVP_PKEY *pub = NULL;
+ EVP_PKEY *priv = NULL;
+ EVP_PKEY_CTX *sctx = NULL, *rctx = NULL, *dctx = NULL;
+ unsigned char secret[256] = { 0, };
+ unsigned char ct[256] = { 0, };
+ unsigned char unwrap[256] = { 0, };
+ size_t ctlen = 0, unwraplen = 0, secretlen = 0;
+ int bits = 2048;
+
+ ret = TEST_true(rsa_keygen(bits, &pub, &priv))
+ && TEST_ptr(sctx = EVP_PKEY_CTX_new_from_pkey(libctx, pub, NULL))
+ && TEST_int_eq(EVP_PKEY_encapsulate_init(sctx, NULL), 1)
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(sctx, "RSASVE"), 1)
+ && TEST_ptr(dctx = EVP_PKEY_CTX_dup(sctx))
+ && TEST_int_eq(EVP_PKEY_encapsulate(dctx, NULL, &ctlen, NULL,
+ &secretlen), 1)
+ && TEST_int_eq(ctlen, secretlen)
+ && TEST_int_eq(ctlen, bits / 8)
+ && TEST_int_eq(EVP_PKEY_encapsulate(dctx, ct, &ctlen, secret,
+ &secretlen), 1)
+ && TEST_ptr(rctx = EVP_PKEY_CTX_new_from_pkey(libctx, priv, NULL))
+ && TEST_int_eq(EVP_PKEY_decapsulate_init(rctx, NULL), 1)
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(rctx, "RSASVE"), 1)
+ && TEST_int_eq(EVP_PKEY_decapsulate(rctx, NULL, &unwraplen,
+ ct, ctlen), 1)
+ && TEST_int_eq(EVP_PKEY_decapsulate(rctx, unwrap, &unwraplen,
+ ct, ctlen), 1)
+ && TEST_mem_eq(unwrap, unwraplen, secret, secretlen);
+ EVP_PKEY_free(pub);
+ EVP_PKEY_free(priv);
+ EVP_PKEY_CTX_free(rctx);
+ EVP_PKEY_CTX_free(dctx);
+ EVP_PKEY_CTX_free(sctx);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_DES
+/*
+ * This test makes sure that EVP_CIPHER_CTX_rand_key() works correctly
+ * For fips mode this code would produce an error if the flag is not set.
+ */
+static int test_cipher_tdes_randkey(void)
+{
+ int ret;
+ EVP_CIPHER_CTX *ctx = NULL;
+ EVP_CIPHER *tdes_cipher = NULL, *aes_cipher = NULL;
+ unsigned char key[24] = { 0 };
+
+ ret = TEST_ptr(aes_cipher = EVP_CIPHER_fetch(libctx, "AES-256-CBC", NULL))
+ && TEST_int_eq(EVP_CIPHER_get_flags(aes_cipher) & EVP_CIPH_RAND_KEY, 0)
+ && TEST_ptr(tdes_cipher = EVP_CIPHER_fetch(libctx, "DES-EDE3-CBC", NULL))
+ && TEST_int_ne(EVP_CIPHER_get_flags(tdes_cipher) & EVP_CIPH_RAND_KEY, 0)
+ && TEST_ptr(ctx = EVP_CIPHER_CTX_new())
+ && TEST_true(EVP_CipherInit_ex(ctx, tdes_cipher, NULL, NULL, NULL, 1))
+ && TEST_int_gt(EVP_CIPHER_CTX_rand_key(ctx, key), 0);
+
+ EVP_CIPHER_CTX_free(ctx);
+ EVP_CIPHER_free(tdes_cipher);
+ EVP_CIPHER_free(aes_cipher);
+ return ret;
+}
+#endif /* OPENSSL_NO_DES */
+
+static int kem_rsa_params(void)
+{
+ int ret = 0;
+ EVP_PKEY *pub = NULL;
+ EVP_PKEY *priv = NULL;
+ EVP_PKEY_CTX *pubctx = NULL, *privctx = NULL;
+ unsigned char secret[256] = { 0, };
+ unsigned char ct[256] = { 0, };
+ size_t ctlen = 0, secretlen = 0;
+
+ ret = TEST_true(rsa_keygen(2048, &pub, &priv))
+ && TEST_ptr(pubctx = EVP_PKEY_CTX_new_from_pkey(libctx, pub, NULL))
+ && TEST_ptr(privctx = EVP_PKEY_CTX_new_from_pkey(libctx, priv, NULL))
+ /* Test setting kem op before the init fails */
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(pubctx, "RSASVE"), -2)
+ /* Test NULL ctx passed */
+ && TEST_int_eq(EVP_PKEY_encapsulate_init(NULL, NULL), 0)
+ && TEST_int_eq(EVP_PKEY_encapsulate(NULL, NULL, NULL, NULL, NULL), 0)
+ && TEST_int_eq(EVP_PKEY_decapsulate_init(NULL, NULL), 0)
+ && TEST_int_eq(EVP_PKEY_decapsulate(NULL, NULL, NULL, NULL, 0), 0)
+ /* Test Invalid operation */
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, NULL, NULL, NULL, NULL), -1)
+ && TEST_int_eq(EVP_PKEY_decapsulate(privctx, NULL, NULL, NULL, 0), 0)
+ /* Wrong key component - no secret should be returned on failure */
+ && TEST_int_eq(EVP_PKEY_decapsulate_init(pubctx, NULL), 1)
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(pubctx, "RSASVE"), 1)
+ && TEST_int_eq(EVP_PKEY_decapsulate(pubctx, secret, &secretlen, ct,
+ sizeof(ct)), 0)
+ && TEST_uchar_eq(secret[0], 0)
+ /* Test encapsulate fails if the mode is not set */
+ && TEST_int_eq(EVP_PKEY_encapsulate_init(pubctx, NULL), 1)
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, ct, &ctlen, secret, &secretlen), -2)
+ /* Test setting a bad kem ops fail */
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(pubctx, "RSA"), 0)
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(pubctx, NULL), 0)
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(NULL, "RSASVE"), 0)
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(NULL, NULL), 0)
+ /* Test secretlen is optional */
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(pubctx, "RSASVE"), 1)
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, ct, &ctlen, secret, NULL), 1)
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, NULL, &ctlen, NULL, NULL), 1)
+ /* Test outlen is optional */
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, NULL, NULL, NULL, &secretlen), 1)
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, ct, NULL, secret, &secretlen), 1)
+ /* test that either len must be set if out is NULL */
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, NULL, NULL, NULL, NULL), 0)
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, NULL, &ctlen, NULL, NULL), 1)
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, NULL, NULL, NULL, &secretlen), 1)
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, NULL, &ctlen, NULL, &secretlen), 1)
+ /* Secret buffer should be set if there is an output buffer */
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, ct, &ctlen, NULL, NULL), 0)
+ /* Test that lengths are optional if ct is not NULL */
+ && TEST_int_eq(EVP_PKEY_encapsulate(pubctx, ct, NULL, secret, NULL), 1)
+ /* Pass if secret or secret length are not NULL */
+ && TEST_int_eq(EVP_PKEY_decapsulate_init(privctx, NULL), 1)
+ && TEST_int_eq(EVP_PKEY_CTX_set_kem_op(privctx, "RSASVE"), 1)
+ && TEST_int_eq(EVP_PKEY_decapsulate(privctx, secret, NULL, ct, sizeof(ct)), 1)
+ && TEST_int_eq(EVP_PKEY_decapsulate(privctx, NULL, &secretlen, ct, sizeof(ct)), 1)
+ && TEST_int_eq(secretlen, 256)
+ /* Fail if passed NULL arguments */
+ && TEST_int_eq(EVP_PKEY_decapsulate(privctx, NULL, NULL, ct, sizeof(ct)), 0)
+ && TEST_int_eq(EVP_PKEY_decapsulate(privctx, secret, &secretlen, NULL, 0), 0)
+ && TEST_int_eq(EVP_PKEY_decapsulate(privctx, secret, &secretlen, NULL, sizeof(ct)), 0)
+ && TEST_int_eq(EVP_PKEY_decapsulate(privctx, secret, &secretlen, ct, 0), 0);
+
+ EVP_PKEY_free(pub);
+ EVP_PKEY_free(priv);
+ EVP_PKEY_CTX_free(pubctx);
+ EVP_PKEY_CTX_free(privctx);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_DH
+static EVP_PKEY *gen_dh_key(void)
+{
+ EVP_PKEY_CTX *gctx = NULL;
+ EVP_PKEY *pkey = NULL;
+ OSSL_PARAM params[2];
+
+ params[0] = OSSL_PARAM_construct_utf8_string("group", "ffdhe2048", 0);
+ params[1] = OSSL_PARAM_construct_end();
+
+ if (!TEST_ptr(gctx = EVP_PKEY_CTX_new_from_name(libctx, "DH", NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(gctx), 0)
+ || !TEST_true(EVP_PKEY_CTX_set_params(gctx, params))
+ || !TEST_true(EVP_PKEY_keygen(gctx, &pkey)))
+ goto err;
+err:
+ EVP_PKEY_CTX_free(gctx);
+ return pkey;
+}
+
+/* Fail if we try to use a dh key */
+static int kem_invalid_keytype(void)
+{
+ int ret = 0;
+ EVP_PKEY *key = NULL;
+ EVP_PKEY_CTX *sctx = NULL;
+
+ if (!TEST_ptr(key = gen_dh_key()))
+ goto done;
+
+ if (!TEST_ptr(sctx = EVP_PKEY_CTX_new_from_pkey(libctx, key, NULL)))
+ goto done;
+ if (!TEST_int_eq(EVP_PKEY_encapsulate_init(sctx, NULL), -2))
+ goto done;
+
+ ret = 1;
+done:
+ EVP_PKEY_free(key);
+ EVP_PKEY_CTX_free(sctx);
+ return ret;
+}
+#endif /* OPENSSL_NO_DH */
+
+int setup_tests(void)
+{
+ const char *prov_name = "default";
+ char *config_file = NULL;
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_PROVIDER_NAME:
+ prov_name = opt_arg();
+ break;
+ case OPT_CONFIG_FILE:
+ config_file = opt_arg();
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+
+ if (!test_get_libctx(&libctx, &nullprov, config_file, &libprov, prov_name))
+ return 0;
+
+#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DH)
+ ADD_ALL_TESTS(test_dsa_param_keygen, 3 * 3 * 3);
+#endif
+#ifndef OPENSSL_NO_DH
+ ADD_ALL_TESTS(test_dh_safeprime_param_keygen, 3 * 3 * 3);
+ ADD_TEST(dhx_cert_load);
+#endif
+
+ if (!TEST_ptr(cipher_names = sk_OPENSSL_STRING_new(name_cmp)))
+ return 0;
+ EVP_CIPHER_do_all_provided(libctx, collect_cipher_names, cipher_names);
+
+ ADD_ALL_TESTS(test_cipher_reinit, sk_OPENSSL_STRING_num(cipher_names));
+ ADD_ALL_TESTS(test_cipher_reinit_partialupdate,
+ sk_OPENSSL_STRING_num(cipher_names));
+ ADD_TEST(kem_rsa_gen_recover);
+ ADD_TEST(kem_rsa_params);
+#ifndef OPENSSL_NO_DH
+ ADD_TEST(kem_invalid_keytype);
+#endif
+#ifndef OPENSSL_NO_DES
+ ADD_TEST(test_cipher_tdes_randkey);
+#endif
+ return 1;
+}
+
+/* Because OPENSSL_free is a macro, it can't be passed as a function pointer */
+static void string_free(char *m)
+{
+ OPENSSL_free(m);
+}
+
+void cleanup_tests(void)
+{
+ sk_OPENSSL_STRING_pop_free(cipher_names, string_free);
+ OSSL_PROVIDER_unload(libprov);
+ OSSL_LIB_CTX_free(libctx);
+ OSSL_PROVIDER_unload(nullprov);
+}
diff --git a/test/evp_pkey_ctx_new_from_name.c b/test/evp_pkey_ctx_new_from_name.c
new file mode 100644
index 000000000000..24063ea05ea5
--- /dev/null
+++ b/test/evp_pkey_ctx_new_from_name.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+#include <openssl/ec.h>
+#include <openssl/evp.h>
+#include <openssl/err.h>
+
+int main(int argc, char *argv[])
+{
+ EVP_PKEY_CTX *pctx = NULL;
+
+ pctx = EVP_PKEY_CTX_new_from_name(NULL, "NO_SUCH_ALGORITHM", NULL);
+ EVP_PKEY_CTX_free(pctx);
+
+ return 0;
+}
diff --git a/test/evp_pkey_dparams_test.c b/test/evp_pkey_dparams_test.c
new file mode 100644
index 000000000000..07b7d6c74588
--- /dev/null
+++ b/test/evp_pkey_dparams_test.c
@@ -0,0 +1,324 @@
+/*
+ * Copyright 2019-2022 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 <stdlib.h>
+#include <string.h>
+
+#include "internal/nelem.h"
+#include <openssl/crypto.h>
+#include <openssl/bio.h>
+#include <openssl/bn.h>
+#include <openssl/rand.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/ec.h>
+#include "testutil.h"
+
+#if defined(OPENSSL_NO_DH) && defined(OPENSSL_NO_DSA) && defined(OPENSSL_NO_EC)
+# define OPENSSL_NO_KEYPARAMS
+#endif
+
+#ifndef OPENSSL_NO_KEYPARAMS
+
+struct pubkey {
+ int bad;
+ const unsigned char *key_bin;
+ size_t key_bin_len;
+};
+
+# ifndef OPENSSL_NO_DH
+static const unsigned char dhparam_bin[] = {
+0x30,0x82,0x01,0x08,0x02,0x82,0x01,0x01,0x00,0xc0,0xd1,0x2e,0x14,0x18,0xbd,0x03,
+0xfd,0x39,0xe1,0x99,0xf4,0x93,0x06,0x2d,0x49,0xc6,0xb5,0xb9,0xf0,0x91,0xcb,0x2f,
+0x48,0x54,0x79,0x7d,0xc4,0x65,0x11,0x55,0xf7,0x99,0xde,0x42,0x83,0x84,0xc0,0xf8,
+0x88,0x89,0xa0,0xff,0xff,0x7d,0xe8,0xef,0x9e,0xbc,0xf7,0x1d,0x70,0x6d,0x3a,0x33,
+0x49,0x28,0xa1,0xa3,0xe1,0x41,0xc4,0x8b,0x91,0xf9,0xf2,0xb6,0xe2,0x77,0x79,0x38,
+0x7d,0x21,0xb3,0xdf,0x79,0x9c,0x5e,0x65,0x16,0x00,0x16,0x82,0xb2,0x36,0x46,0x21,
+0xac,0xaf,0x86,0xc7,0xe3,0x10,0x44,0x48,0xfb,0xbd,0xad,0x4e,0x11,0x73,0x4c,0x25,
+0xb0,0x8c,0x1c,0x1e,0x8e,0x58,0x50,0x5e,0x43,0x89,0xe4,0xd9,0x34,0xf8,0x3b,0xcc,
+0x36,0x2c,0x1b,0xb3,0xb2,0x77,0x0c,0xa5,0x96,0xc1,0x8a,0x38,0xd4,0xe3,0x9c,0x2a,
+0xde,0x49,0x46,0xc7,0xd4,0xa2,0x47,0xc9,0x0a,0xbd,0x84,0xd4,0x1c,0xbc,0xb6,0x19,
+0x04,0x94,0x64,0xfa,0x8a,0x11,0x9c,0x5f,0x4a,0x4c,0x0f,0x58,0x81,0x02,0xbf,0xcf,
+0x87,0x27,0x2b,0xae,0x8e,0xe2,0x61,0x7a,0xdb,0xba,0x23,0x39,0x25,0x44,0xdc,0x22,
+0x75,0xc3,0x28,0xd9,0x12,0x33,0x84,0x32,0xd4,0x5d,0xd9,0x77,0xf8,0x04,0x90,0x38,
+0x0a,0xec,0x84,0x93,0x43,0xce,0xe7,0x07,0x42,0x7d,0x2d,0xe0,0x21,0x3b,0x19,0x22,
+0xa7,0x8f,0x50,0x31,0xda,0xd0,0x0d,0xd3,0x0b,0xdb,0xad,0xed,0x94,0x92,0xff,0x83,
+0x06,0x7f,0x7f,0xd7,0x7b,0x42,0x5b,0xba,0x93,0x7a,0xeb,0x43,0x5f,0xce,0x59,0x26,
+0xe8,0x76,0xdc,0xee,0xe2,0xbe,0x36,0x7a,0x83,0x02,0x01,0x02
+};
+static const unsigned char dhkey_1[] = {
+ 0x7a, 0x49, 0xcb, 0xc3, 0x25, 0x67, 0x7a, 0x61,
+ 0xd0, 0x60, 0x81, 0x0f, 0xf6, 0xbd, 0x38, 0x82,
+ 0xe7, 0x38, 0x8c, 0xe9, 0xd1, 0x04, 0x33, 0xbf,
+ 0x8a, 0x03, 0x63, 0xb3, 0x05, 0x04, 0xb5, 0x1f,
+ 0xba, 0x9f, 0x1a, 0x5f, 0x31, 0x3e, 0x96, 0x79,
+ 0x88, 0x7d, 0x3f, 0x59, 0x6d, 0x3b, 0xf3, 0x2f,
+ 0xf2, 0xa6, 0x43, 0x48, 0x64, 0x5a, 0x6a, 0x32,
+ 0x1f, 0x24, 0x37, 0x62, 0x54, 0x3a, 0x7d, 0xab,
+ 0x26, 0x77, 0x7c, 0xec, 0x57, 0x3c, 0xa4, 0xbd,
+ 0x96, 0x9d, 0xaa, 0x3b, 0x0e, 0x9a, 0x55, 0x7e,
+ 0x1d, 0xb4, 0x47, 0x5b, 0xea, 0x20, 0x3c, 0x6d,
+ 0xbe, 0xd6, 0x70, 0x7d, 0xa8, 0x9e, 0x84, 0xb4,
+ 0x03, 0x52, 0xf2, 0x08, 0x4c, 0x98, 0xd3, 0x4f,
+ 0x58, 0xb3, 0xdf, 0xb4, 0xe6, 0xdc, 0x2c, 0x43,
+ 0x55, 0xd1, 0xce, 0x2a, 0xb3, 0xfc, 0xe0, 0x29,
+ 0x97, 0xd8, 0xd8, 0x62, 0xc6, 0x87, 0x0a, 0x1b,
+ 0xfd, 0x72, 0x74, 0xe0, 0xa9, 0xfb, 0xfa, 0x91,
+ 0xf2, 0xc1, 0x09, 0x93, 0xea, 0x63, 0xf6, 0x9a,
+ 0x4b, 0xdf, 0x4e, 0xdf, 0x6b, 0xf9, 0xeb, 0xf6,
+ 0x66, 0x3c, 0xfd, 0x6f, 0x68, 0xcb, 0xdb, 0x6e,
+ 0x40, 0x65, 0xf7, 0xf2, 0x46, 0xe5, 0x0d, 0x9a,
+ 0xd9, 0x6f, 0xcf, 0x28, 0x22, 0x8f, 0xca, 0x0b,
+ 0x30, 0xa0, 0x9e, 0xa5, 0x13, 0xba, 0x72, 0x7f,
+ 0x85, 0x3d, 0x02, 0x9c, 0x97, 0x8e, 0x6f, 0xea,
+ 0x6d, 0x35, 0x4e, 0xd1, 0x78, 0x7d, 0x73, 0x60,
+ 0x92, 0xa9, 0x12, 0xf4, 0x2a, 0xac, 0x17, 0x97,
+ 0xf3, 0x7b, 0x79, 0x08, 0x69, 0xd1, 0x9e, 0xb5,
+ 0xf8, 0x2a, 0x0a, 0x2b, 0x00, 0x7b, 0x16, 0x8d,
+ 0x41, 0x82, 0x3a, 0x72, 0x58, 0x57, 0x80, 0x65,
+ 0xae, 0x17, 0xbc, 0x3a, 0x5b, 0x7e, 0x5c, 0x2d,
+ 0xae, 0xb2, 0xc2, 0x26, 0x20, 0x9a, 0xaa, 0x57,
+ 0x4b, 0x7d, 0x43, 0x41, 0x96, 0x3f, 0xf0, 0x0d
+};
+/* smaller but still valid key */
+static const unsigned char dhkey_2[] = {
+ 0x73, 0xb2, 0x22, 0x91, 0x27, 0xb9, 0x45, 0xb0,
+ 0xfd, 0x17, 0x66, 0x79, 0x9b, 0x32, 0x71, 0x92,
+ 0x97, 0x1d, 0x70, 0x02, 0x37, 0x70, 0x79, 0x63,
+ 0xed, 0x11, 0x22, 0xe9, 0xe6, 0xf8, 0xeb, 0xd7,
+ 0x90, 0x00, 0xe6, 0x5c, 0x47, 0x02, 0xfb, 0x13,
+ 0xca, 0x29, 0x14, 0x1e, 0xf4, 0x61, 0x58, 0xf6,
+ 0xaa, 0xbb, 0xcf, 0xa7, 0x82, 0x9a, 0x9e, 0x7c,
+ 0x4a, 0x05, 0x42, 0xed, 0x55, 0xd8, 0x08, 0x37,
+ 0x06, 0x49, 0x9b, 0xda, 0xb3, 0xb9, 0xc9, 0xc0,
+ 0x56, 0x26, 0xda, 0x60, 0x1d, 0xbc, 0x06, 0x0b,
+ 0xb0, 0x94, 0x4b, 0x4e, 0x95, 0xf9, 0xb4, 0x2f,
+ 0x4e, 0xad, 0xf8, 0xab, 0x2d, 0x19, 0xa2, 0xe6,
+ 0x6d, 0x11, 0xfd, 0x9b, 0x5a, 0x2a, 0xb0, 0x81,
+ 0x42, 0x4d, 0x86, 0x76, 0xd5, 0x9e, 0xaf, 0xf9,
+ 0x6f, 0x79, 0xab, 0x1d, 0xfe, 0xd8, 0xc8, 0xba,
+ 0xb6, 0xce, 0x03, 0x61, 0x48, 0x53, 0xd8, 0x0b,
+ 0x83, 0xf0, 0xb0, 0x46, 0xa0, 0xea, 0x46, 0x60,
+ 0x7a, 0x39, 0x4e, 0x46, 0x6a, 0xbb, 0x07, 0x6c,
+ 0x8c, 0x7d, 0xb7, 0x7d, 0x5b, 0xe5, 0x24, 0xa5,
+ 0xab, 0x41, 0x8a, 0xc4, 0x63, 0xf9, 0xce, 0x20,
+ 0x6f, 0x58, 0x4f, 0x0e, 0x42, 0x82, 0x9e, 0x17,
+ 0x53, 0xa6, 0xd6, 0x42, 0x3e, 0x80, 0x66, 0x6f,
+ 0x2a, 0x1c, 0x30, 0x08, 0x01, 0x99, 0x5a, 0x4f,
+ 0x72, 0x16, 0xed, 0xb0, 0xd6, 0x8c, 0xf0, 0x7a,
+ 0x33, 0x15, 0xc4, 0x95, 0x65, 0xba, 0x11, 0x37,
+ 0xa0, 0xcc, 0xe7, 0x45, 0x65, 0x4f, 0x17, 0x0a,
+ 0x2c, 0x62, 0xc0, 0x65, 0x3b, 0x65, 0x2a, 0x56,
+ 0xf7, 0x29, 0x8a, 0x9b, 0x1b, 0xbb, 0x0c, 0x40,
+ 0xcd, 0x66, 0x4b, 0x4f, 0x2f, 0xba, 0xdb, 0x59,
+ 0x93, 0x6d, 0x34, 0xf3, 0x8d, 0xde, 0x68, 0x99,
+ 0x78, 0xfc, 0xac, 0x95, 0xd9, 0xa3, 0x74, 0xe6,
+ 0x24, 0x96, 0x98, 0x6f, 0x64, 0x71, 0x76
+};
+/* 1 is not a valid key */
+static const unsigned char dhkey_3[] = {
+ 0x01
+};
+# endif
+
+# ifndef OPENSSL_NO_DSA
+static const unsigned char dsaparam_bin[] = {
+0x30,0x82,0x02,0x28,0x02,0x82,0x01,0x01,0x00,0xf2,0x85,0x01,0xa5,0xb9,0x56,0x65,
+0x19,0xff,0x9a,0x7d,0xf9,0x90,0xd6,0xaa,0x73,0xac,0xf7,0x94,0xfa,0x8a,0x64,0x6d,
+0xa0,0x01,0x42,0xe5,0x45,0xfc,0x53,0x72,0xb0,0x7c,0xe6,0x3b,0xfb,0x09,0x33,0x41,
+0x27,0xbd,0x00,0xb5,0x18,0x87,0x62,0xa8,0x2b,0xfc,0xd0,0x52,0x4a,0x14,0x2d,0xaa,
+0x36,0xc6,0xf3,0xa9,0xe3,0x90,0x1b,0x74,0xdf,0x0a,0x6d,0x33,0xba,0xf4,0x32,0x6d,
+0xba,0x36,0x68,0x1d,0x83,0x36,0x50,0xc6,0x62,0xc0,0x40,0x67,0x0e,0xf6,0x22,0x00,
+0x62,0x1b,0x76,0x72,0x62,0x5f,0xa0,0xdf,0x38,0xb1,0x1d,0x26,0x70,0x9b,0x84,0x64,
+0xbb,0x16,0x15,0xc2,0x66,0xb9,0x97,0xd0,0x07,0xf1,0x4b,0x70,0x02,0x03,0xf1,0xd2,
+0x03,0xdb,0x78,0x8b,0xb4,0xda,0x6f,0x3c,0xe2,0x31,0xa8,0x1c,0x99,0xea,0x9c,0x75,
+0x28,0x96,0x82,0x16,0x77,0xac,0x79,0x32,0x61,0x87,0xec,0xb7,0xb4,0xc3,0xea,0x12,
+0x62,0x1f,0x08,0xb8,0x16,0xab,0xcc,0xef,0x28,0xdf,0x06,0x07,0xbe,0xb0,0xdc,0x78,
+0x83,0x8a,0x70,0x80,0x34,0xe6,0x91,0xe3,0xd3,0x92,0xd9,0xf4,0x56,0x53,0x52,0xb7,
+0x35,0xf6,0x2a,0xec,0x4b,0xcb,0xa2,0x3c,0xc3,0x0c,0x94,0xa7,0x4e,0x1c,0x42,0x9c,
+0x72,0x99,0x60,0x8c,0xfe,0xfb,0x60,0x57,0x75,0xf5,0x23,0x11,0x12,0xba,0x97,0xcd,
+0xad,0x5a,0x0b,0xa6,0x1f,0x6a,0x48,0x2e,0x8d,0xda,0x95,0xc6,0x0e,0x14,0xde,0xf7,
+0x22,0x55,0xa8,0x6b,0x25,0xdf,0xa2,0xab,0x33,0x65,0x56,0xfc,0x78,0x4f,0x62,0xdf,
+0x48,0xdd,0xce,0x8b,0xe1,0x76,0xf4,0xf6,0x7f,0x02,0x1d,0x00,0xac,0xb0,0xb8,0x92,
+0x3b,0x6b,0x61,0xcf,0x36,0x6d,0xf2,0x1e,0x5d,0xe0,0x7b,0xf5,0x73,0x48,0xa3,0x8b,
+0x86,0x9e,0x88,0xce,0x40,0xf8,0x27,0x6d,0x02,0x82,0x01,0x00,0x77,0x6b,0x89,0xd6,
+0x8f,0x3d,0xce,0x52,0x30,0x74,0xb2,0xa1,0x13,0x96,0xd5,0x92,0xf2,0xf1,0x6b,0x10,
+0x31,0x0b,0xf3,0x69,0xaa,0xbf,0x4b,0x6c,0xcb,0x3f,0x6d,0x58,0x76,0x44,0x09,0xf9,
+0x28,0xef,0xa0,0xe4,0x55,0x77,0x57,0xe0,0xfb,0xcc,0x9a,0x6a,0x2c,0x90,0xec,0x72,
+0x24,0x0b,0x43,0xc5,0xbc,0x31,0xed,0x1a,0x46,0x2c,0x76,0x42,0x9e,0xc0,0x82,0xfc,
+0xff,0xf9,0x7e,0xe2,0x1f,0x39,0xf3,0x3b,0xdb,0x27,0x36,0xe7,0xf5,0x3b,0xc2,0x23,
+0xb6,0xd0,0xcf,0x5b,0x85,0x2e,0x1b,0x00,0x5b,0x31,0xaa,0x72,0x8f,0x37,0xee,0x56,
+0x71,0xc4,0xfd,0x3c,0x8d,0xfa,0x5b,0xab,0xb1,0xa9,0x52,0x76,0xa0,0xe4,0xe3,0x78,
+0x83,0x64,0x5d,0xd7,0x6c,0xec,0x9b,0x40,0x65,0xe2,0x0a,0x11,0x19,0x60,0xdd,0xce,
+0x29,0x9f,0xc6,0x1d,0x0a,0xab,0x8e,0x59,0x25,0xc5,0x0b,0x9c,0x02,0x45,0xba,0x99,
+0x74,0x22,0x1d,0xc1,0x57,0xca,0x50,0x8c,0x5e,0xdf,0xd8,0x5d,0x43,0xae,0x06,0x28,
+0x29,0x82,0xf6,0x5a,0xa9,0x51,0xa2,0x04,0x1d,0xbf,0x88,0x15,0x98,0xce,0x8a,0xb4,
+0x3b,0xe5,0x30,0x29,0xce,0x0c,0x9b,0xf8,0xdb,0xbf,0x06,0x9f,0xd0,0x59,0x18,0xd4,
+0x0b,0x94,0xbf,0xe9,0x67,0x6b,0x9e,0xf0,0x72,0xc6,0xbf,0x79,0x8f,0x1e,0xa3,0x95,
+0x24,0xe3,0xcb,0x58,0xb5,0x67,0xd3,0xae,0x79,0xb0,0x28,0x9c,0x9a,0xd0,0xa4,0xe7,
+0x22,0x15,0xc1,0x8b,0x04,0xb9,0x8a,0xa8,0xb7,0x1b,0x62,0x44,0xc6,0xef,0x4b,0x74,
+0xd0,0xfd,0xa9,0xb4,0x4e,0xdd,0x7d,0x38,0x60,0xd1,0x40,0xcd
+};
+# endif
+
+# ifndef OPENSSL_NO_EC
+static const unsigned char ecparam_bin[] = {
+0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x03,0x01,0x07
+};
+static const unsigned char eckey_1[] = {
+ 0x04, 0xc8, 0x65, 0x45, 0x63, 0x73, 0xe5, 0x0a,
+ 0x61, 0x1d, 0xcf, 0x60, 0x76, 0x2c, 0xe7, 0x36,
+ 0x0b, 0x76, 0xc2, 0x92, 0xfc, 0xa4, 0x56, 0xee,
+ 0xc2, 0x62, 0x05, 0x00, 0x80, 0xe4, 0x4f, 0x07,
+ 0x3b, 0xf4, 0x59, 0xb8, 0xc3, 0xb3, 0x1f, 0x77,
+ 0x36, 0x16, 0x4c, 0x72, 0x2a, 0xc0, 0x89, 0x89,
+ 0xd6, 0x16, 0x14, 0xee, 0x2f, 0x5a, 0xde, 0x9e,
+ 0x83, 0xc5, 0x78, 0xd0, 0x0b, 0x69, 0xb4, 0xb9,
+ 0xf1
+};
+/* a modified key */
+static const unsigned char eckey_2[] = {
+ 0x04, 0xc8, 0x65, 0x45, 0x63, 0x73, 0xe5, 0x0a,
+ 0x61, 0x1d, 0xcf, 0x60, 0x76, 0x2c, 0xe7, 0x36,
+ 0x0b, 0x77, 0xc2, 0x92, 0xfc, 0xa4, 0x56, 0xee,
+ 0xc2, 0x62, 0x05, 0x00, 0x80, 0xe4, 0x4f, 0x07,
+ 0x3b, 0xf4, 0x59, 0xb8, 0xc3, 0xb3, 0x1f, 0x77,
+ 0x36, 0x16, 0x4c, 0x72, 0x2a, 0xc0, 0x89, 0x89,
+ 0xd6, 0x16, 0x14, 0xee, 0x2f, 0x5a, 0xde, 0x9e,
+ 0x83, 0xc5, 0x78, 0xd0, 0x0b, 0x69, 0xb4, 0xb9,
+ 0xf1
+};
+/* an added byte */
+static const unsigned char eckey_3[] = {
+ 0x04, 0xc8, 0x65, 0x45, 0x63, 0x73, 0xe5, 0x0a,
+ 0x61, 0x1d, 0xcf, 0x60, 0x76, 0x2c, 0xe7, 0x36,
+ 0x0b, 0x76, 0xc2, 0x92, 0xfc, 0xa4, 0x56, 0xee,
+ 0xc2, 0x62, 0x05, 0x00, 0x80, 0xe4, 0x4f, 0x07,
+ 0x3b, 0xf4, 0x59, 0xb8, 0xc3, 0xb3, 0x1f, 0x77,
+ 0x36, 0x16, 0x4c, 0x72, 0x2a, 0xc0, 0x89, 0x89,
+ 0xd6, 0x16, 0x14, 0xee, 0x2f, 0x5a, 0xde, 0x9e,
+ 0x83, 0xc5, 0x78, 0xd0, 0x0b, 0x69, 0xb4, 0xb9,
+ 0xf1, 0xaa
+};
+# endif
+
+#define NUM_KEYS 10
+
+static const struct {
+ int type;
+ const unsigned char *param_bin;
+ size_t param_bin_len;
+ struct pubkey keys[NUM_KEYS];
+} pkey_params [] = {
+# ifndef OPENSSL_NO_DH
+ { EVP_PKEY_DH, dhparam_bin, sizeof(dhparam_bin),
+ { { 0, dhkey_1, sizeof(dhkey_1) },
+ { 0, dhkey_2, sizeof(dhkey_2) },
+ { 1, dhkey_3, sizeof(dhkey_3) },
+ { 1, dhkey_1, 0 },
+ { 1, dhparam_bin, sizeof(dhparam_bin) }
+ }
+ },
+# endif
+# ifndef OPENSSL_NO_DSA
+ { EVP_PKEY_DSA, dsaparam_bin, sizeof(dsaparam_bin) },
+# endif
+# ifndef OPENSSL_NO_EC
+ { EVP_PKEY_EC, ecparam_bin, sizeof(ecparam_bin),
+ { { 0, eckey_1, sizeof(eckey_1) },
+ { 1, eckey_2, sizeof(eckey_2) },
+ { 1, eckey_3, sizeof(eckey_3) },
+ { 1, eckey_1, 0 },
+ { 1, eckey_1, sizeof(eckey_1) - 1 }
+ }
+ }
+# endif
+};
+
+static int params_bio_test(int id)
+{
+ int ret, out_len;
+ BIO *in = NULL, *out = NULL;
+ EVP_PKEY *in_key = NULL, *out_key = NULL;
+ unsigned char *out_bin;
+ int type = pkey_params[id].type;
+
+ ret = TEST_ptr(in = BIO_new_mem_buf(pkey_params[id].param_bin,
+ (int)pkey_params[id].param_bin_len))
+ /* Load in pkey params from binary */
+ && TEST_ptr(d2i_KeyParams_bio(type, &in_key, in))
+ && TEST_ptr(out = BIO_new(BIO_s_mem()))
+ /* Save pkey params to binary */
+ && TEST_int_gt(i2d_KeyParams_bio(out, in_key), 0)
+ /* test the output binary is the expected value */
+ && TEST_int_gt(out_len = BIO_get_mem_data(out, &out_bin), 0)
+ && TEST_mem_eq(pkey_params[id].param_bin,
+ (int)pkey_params[id].param_bin_len,
+ out_bin, out_len);
+
+ BIO_free(in);
+ BIO_free(out);
+ EVP_PKEY_free(in_key);
+ EVP_PKEY_free(out_key);
+ return ret;
+}
+
+static int set_enc_pubkey_test(int id)
+{
+ int ret, i;
+ BIO *in = NULL;
+ EVP_PKEY *in_key = NULL;
+ int type = pkey_params[id].type;
+ const struct pubkey *keys = pkey_params[id].keys;
+
+ if (keys[0].key_bin == NULL)
+ return TEST_skip("Not applicable test");
+
+ ret = TEST_ptr(in = BIO_new_mem_buf(pkey_params[id].param_bin,
+ (int)pkey_params[id].param_bin_len))
+ /* Load in pkey params from binary */
+ && TEST_ptr(d2i_KeyParams_bio(type, &in_key, in));
+
+ for (i = 0; ret && i < NUM_KEYS && keys[i].key_bin != NULL; i++) {
+ if (keys[i].bad) {
+ ERR_set_mark();
+ ret = ret
+ && TEST_int_le(EVP_PKEY_set1_encoded_public_key(in_key,
+ keys[i].key_bin,
+ keys[i].key_bin_len),
+ 0);
+ ERR_pop_to_mark();
+ } else {
+ ret = ret
+ && TEST_int_gt(EVP_PKEY_set1_encoded_public_key(in_key,
+ keys[i].key_bin,
+ keys[i].key_bin_len),
+ 0);
+ }
+ if (!ret)
+ TEST_info("Test key index #%d", i);
+ }
+
+ BIO_free(in);
+ EVP_PKEY_free(in_key);
+ return ret;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifdef OPENSSL_NO_KEYPARAMS
+ TEST_note("No DH/DSA/EC support");
+#else
+ ADD_ALL_TESTS(params_bio_test, OSSL_NELEM(pkey_params));
+ ADD_ALL_TESTS(set_enc_pubkey_test, OSSL_NELEM(pkey_params));
+#endif
+ return 1;
+}
diff --git a/test/evp_pkey_provided_test.c b/test/evp_pkey_provided_test.c
new file mode 100644
index 000000000000..27f90e42a7c1
--- /dev/null
+++ b/test/evp_pkey_provided_test.c
@@ -0,0 +1,1786 @@
+/*
+ * Copyright 2019-2024 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> /* memset */
+#include <openssl/evp.h>
+#include <openssl/pem.h>
+#include <openssl/encoder.h>
+#include <openssl/provider.h>
+#include <openssl/param_build.h>
+#include <openssl/core_names.h>
+#include <openssl/sha.h>
+#include "crypto/ecx.h"
+#include "crypto/evp.h" /* For the internal API */
+#include "crypto/bn_dh.h" /* _bignum_ffdhe2048_p */
+#include "internal/nelem.h"
+#include "testutil.h"
+
+static char *datadir = NULL;
+
+/*
+ * Do not change the order of the following defines unless you also
+ * update the for loop bounds used inside test_print_key_using_encoder() and
+ * test_print_key_using_encoder_public().
+ */
+#define PRIV_TEXT 0
+#define PRIV_PEM 1
+#define PRIV_DER 2
+#define PUB_TEXT 3
+#define PUB_PEM 4
+#define PUB_DER 5
+
+static void stripcr(char *buf, size_t *len)
+{
+ size_t i;
+ char *curr, *writ;
+
+ for (i = *len, curr = buf, writ = buf; i > 0; i--, curr++) {
+ if (*curr == '\r') {
+ (*len)--;
+ continue;
+ }
+ if (curr != writ)
+ *writ = *curr;
+ writ++;
+ }
+}
+
+static int compare_with_file(const char *alg, int type, BIO *membio)
+{
+ char filename[80];
+ BIO *file = NULL;
+ char buf[4096];
+ char *memdata, *fullfile = NULL;
+ const char *suffix;
+ size_t readbytes;
+ int ret = 0;
+ int len;
+ size_t slen;
+
+ switch (type) {
+ case PRIV_TEXT:
+ suffix = "priv.txt";
+ break;
+
+ case PRIV_PEM:
+ suffix = "priv.pem";
+ break;
+
+ case PRIV_DER:
+ suffix = "priv.der";
+ break;
+
+ case PUB_TEXT:
+ suffix = "pub.txt";
+ break;
+
+ case PUB_PEM:
+ suffix = "pub.pem";
+ break;
+
+ case PUB_DER:
+ suffix = "pub.der";
+ break;
+
+ default:
+ TEST_error("Invalid file type");
+ goto err;
+ }
+
+ BIO_snprintf(filename, sizeof(filename), "%s.%s", alg, suffix);
+ fullfile = test_mk_file_path(datadir, filename);
+ if (!TEST_ptr(fullfile))
+ goto err;
+
+ file = BIO_new_file(fullfile, "rb");
+ if (!TEST_ptr(file))
+ goto err;
+
+ if (!TEST_true(BIO_read_ex(file, buf, sizeof(buf), &readbytes))
+ || !TEST_true(BIO_eof(file))
+ || !TEST_size_t_lt(readbytes, sizeof(buf)))
+ goto err;
+
+ len = BIO_get_mem_data(membio, &memdata);
+ if (!TEST_int_gt(len, 0))
+ goto err;
+
+ slen = len;
+ if (type != PRIV_DER && type != PUB_DER) {
+ stripcr(memdata, &slen);
+ stripcr(buf, &readbytes);
+ }
+
+ if (!TEST_mem_eq(memdata, slen, buf, readbytes))
+ goto err;
+
+ ret = 1;
+ err:
+ OPENSSL_free(fullfile);
+ (void)BIO_reset(membio);
+ BIO_free(file);
+ return ret;
+}
+
+static int pass_cb(char *buf, int size, int rwflag, void *u)
+{
+ return 0;
+}
+
+static int pass_cb_error(char *buf, int size, int rwflag, void *u)
+{
+ return -1;
+}
+
+static int test_print_key_using_pem(const char *alg, const EVP_PKEY *pk)
+{
+ BIO *membio = BIO_new(BIO_s_mem());
+ int ret = 0;
+
+ if (!TEST_ptr(membio))
+ goto err;
+
+ if (/* Output Encrypted private key in PEM form */
+ !TEST_true(PEM_write_bio_PrivateKey(bio_out, pk, EVP_aes_256_cbc(),
+ (unsigned char *)"pass", 4,
+ NULL, NULL))
+ /* Output zero-length passphrase encrypted private key in PEM form */
+ || !TEST_true(PEM_write_bio_PKCS8PrivateKey(bio_out, pk,
+ EVP_aes_256_cbc(),
+ (const char *)~0, 0,
+ NULL, NULL))
+ || !TEST_true(PEM_write_bio_PKCS8PrivateKey(bio_out, pk,
+ EVP_aes_256_cbc(),
+ NULL, 0, NULL, ""))
+ || !TEST_true(PEM_write_bio_PKCS8PrivateKey(bio_out, pk,
+ EVP_aes_256_cbc(),
+ NULL, 0, pass_cb, NULL))
+ || !TEST_false(PEM_write_bio_PKCS8PrivateKey(bio_out, pk,
+ EVP_aes_256_cbc(),
+ NULL, 0, pass_cb_error,
+ NULL))
+#ifndef OPENSSL_NO_DES
+ || !TEST_true(PEM_write_bio_PKCS8PrivateKey_nid(
+ bio_out, pk, NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
+ (const char *)~0, 0, NULL, NULL))
+ || !TEST_true(PEM_write_bio_PKCS8PrivateKey_nid(
+ bio_out, pk, NID_pbe_WithSHA1And3_Key_TripleDES_CBC, NULL, 0,
+ NULL, ""))
+ || !TEST_true(PEM_write_bio_PKCS8PrivateKey_nid(
+ bio_out, pk, NID_pbe_WithSHA1And3_Key_TripleDES_CBC, NULL, 0,
+ pass_cb, NULL))
+ || !TEST_false(PEM_write_bio_PKCS8PrivateKey_nid(
+ bio_out, pk, NID_pbe_WithSHA1And3_Key_TripleDES_CBC, NULL, 0,
+ pass_cb_error, NULL))
+#endif
+ /* Private key in text form */
+ || !TEST_int_gt(EVP_PKEY_print_private(membio, pk, 0, NULL), 0)
+ || !TEST_true(compare_with_file(alg, PRIV_TEXT, membio))
+ /* Public key in PEM form */
+ || !TEST_true(PEM_write_bio_PUBKEY(membio, pk))
+ || !TEST_true(compare_with_file(alg, PUB_PEM, membio))
+ /* Unencrypted private key in PEM form */
+ || !TEST_true(PEM_write_bio_PrivateKey(membio, pk,
+ NULL, NULL, 0, NULL, NULL))
+ || !TEST_true(compare_with_file(alg, PRIV_PEM, membio))
+ /* NULL key */
+ || !TEST_false(PEM_write_bio_PrivateKey(membio, NULL,
+ NULL, NULL, 0, NULL, NULL))
+ || !TEST_false(PEM_write_bio_PrivateKey_traditional(membio, NULL,
+ NULL, NULL, 0, NULL, NULL)))
+ goto err;
+
+ ret = 1;
+ err:
+ BIO_free(membio);
+ return ret;
+}
+
+static int test_print_key_type_using_encoder(const char *alg, int type,
+ const EVP_PKEY *pk)
+{
+ const char *output_type, *output_structure;
+ int selection;
+ OSSL_ENCODER_CTX *ctx = NULL;
+ BIO *membio = BIO_new(BIO_s_mem());
+ int ret = 0;
+
+ switch (type) {
+ case PRIV_TEXT:
+ output_type = "TEXT";
+ output_structure = NULL;
+ selection = OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS;
+ break;
+
+ case PRIV_PEM:
+ output_type = "PEM";
+ output_structure = "PrivateKeyInfo";
+ selection = OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS;
+ break;
+
+ case PRIV_DER:
+ output_type = "DER";
+ output_structure = "PrivateKeyInfo";
+ selection = OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS;
+ break;
+
+ case PUB_TEXT:
+ output_type = "TEXT";
+ output_structure = NULL;
+ selection = OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS;
+ break;
+
+ case PUB_PEM:
+ output_type = "PEM";
+ output_structure = "SubjectPublicKeyInfo";
+ selection = OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS;
+ break;
+
+ case PUB_DER:
+ output_type = "DER";
+ output_structure = "SubjectPublicKeyInfo";
+ selection = OSSL_KEYMGMT_SELECT_PUBLIC_KEY
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS;
+ break;
+
+ default:
+ TEST_error("Invalid encoding type");
+ goto err;
+ }
+
+ if (!TEST_ptr(membio))
+ goto err;
+
+ /* Make a context, it's valid for several prints */
+ TEST_note("Setting up a OSSL_ENCODER context with passphrase");
+ if (!TEST_ptr(ctx = OSSL_ENCODER_CTX_new_for_pkey(pk, selection,
+ output_type,
+ output_structure,
+ NULL))
+ /* Check that this operation is supported */
+ || !TEST_int_ne(OSSL_ENCODER_CTX_get_num_encoders(ctx), 0))
+ goto err;
+
+ /* Use no cipher. This should give us an unencrypted PEM */
+ TEST_note("Testing with no encryption");
+ if (!TEST_true(OSSL_ENCODER_to_bio(ctx, membio))
+ || !TEST_true(compare_with_file(alg, type, membio)))
+ goto err;
+
+ if (type == PRIV_PEM) {
+ /* Set a passphrase to be used later */
+ if (!TEST_true(OSSL_ENCODER_CTX_set_passphrase(ctx,
+ (unsigned char *)"pass",
+ 4)))
+ goto err;
+
+ /* Use a valid cipher name */
+ TEST_note("Displaying PEM encrypted with AES-256-CBC");
+ if (!TEST_true(OSSL_ENCODER_CTX_set_cipher(ctx, "AES-256-CBC", NULL))
+ || !TEST_true(OSSL_ENCODER_to_bio(ctx, bio_out)))
+ goto err;
+
+ /* Use an invalid cipher name, which should generate no output */
+ TEST_note("NOT Displaying PEM encrypted with (invalid) FOO");
+ if (!TEST_false(OSSL_ENCODER_CTX_set_cipher(ctx, "FOO", NULL))
+ || !TEST_false(OSSL_ENCODER_to_bio(ctx, bio_out)))
+ goto err;
+
+ /* Clear the cipher. This should give us an unencrypted PEM again */
+ TEST_note("Testing with encryption cleared (no encryption)");
+ if (!TEST_true(OSSL_ENCODER_CTX_set_cipher(ctx, NULL, NULL))
+ || !TEST_true(OSSL_ENCODER_to_bio(ctx, membio))
+ || !TEST_true(compare_with_file(alg, type, membio)))
+ goto err;
+ }
+ ret = 1;
+err:
+ BIO_free(membio);
+ OSSL_ENCODER_CTX_free(ctx);
+ return ret;
+}
+
+static int test_print_key_using_encoder(const char *alg, const EVP_PKEY *pk)
+{
+ int i;
+ int ret = 1;
+
+ for (i = PRIV_TEXT; i <= PUB_DER; i++)
+ ret = ret && test_print_key_type_using_encoder(alg, i, pk);
+
+ return ret;
+}
+
+#ifndef OPENSSL_NO_EC
+static int test_print_key_using_encoder_public(const char *alg,
+ const EVP_PKEY *pk)
+{
+ int i;
+ int ret = 1;
+
+ for (i = PUB_TEXT; i <= PUB_DER; i++)
+ ret = ret && test_print_key_type_using_encoder(alg, i, pk);
+
+ return ret;
+}
+#endif
+
+/* Array indexes used in test_fromdata_rsa */
+#define N 0
+#define E 1
+#define D 2
+#define P 3
+#define Q 4
+#define DP 5
+#define DQ 6
+#define QINV 7
+
+static int test_fromdata_rsa(void)
+{
+ int ret = 0, i;
+ EVP_PKEY_CTX *ctx = NULL, *key_ctx = NULL;
+ EVP_PKEY *pk = NULL, *copy_pk = NULL, *dup_pk = NULL;
+ /*
+ * 32-bit RSA key, extracted from this command,
+ * executed with OpenSSL 1.0.2:
+ *
+ * openssl genrsa 32 | openssl rsa -text
+ */
+ static unsigned long key_numbers[] = {
+ 0xbc747fc5, /* N */
+ 0x10001, /* E */
+ 0x7b133399, /* D */
+ 0xe963, /* P */
+ 0xceb7, /* Q */
+ 0x8599, /* DP */
+ 0xbd87, /* DQ */
+ 0xcc3b, /* QINV */
+ };
+ OSSL_PARAM fromdata_params[] = {
+ OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_N, &key_numbers[N]),
+ OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_E, &key_numbers[E]),
+ OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_D, &key_numbers[D]),
+ OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_FACTOR1, &key_numbers[P]),
+ OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_FACTOR2, &key_numbers[Q]),
+ OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_EXPONENT1, &key_numbers[DP]),
+ OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_EXPONENT2, &key_numbers[DQ]),
+ OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_COEFFICIENT1, &key_numbers[QINV]),
+ OSSL_PARAM_END
+ };
+ BIGNUM *bn = BN_new();
+ BIGNUM *bn_from = BN_new();
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL)))
+ goto err;
+
+ if (!TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, &pk, EVP_PKEY_KEYPAIR,
+ fromdata_params), 1))
+ goto err;
+
+ while (dup_pk == NULL) {
+ ret = 0;
+ if (!TEST_int_eq(EVP_PKEY_get_bits(pk), 32)
+ || !TEST_int_eq(EVP_PKEY_get_security_bits(pk), 8)
+ || !TEST_int_eq(EVP_PKEY_get_size(pk), 4)
+ || !TEST_false(EVP_PKEY_missing_parameters(pk)))
+ goto err;
+
+ EVP_PKEY_CTX_free(key_ctx);
+ if (!TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(NULL, pk, "")))
+ goto err;
+
+ if (!TEST_int_gt(EVP_PKEY_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_public_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_private_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_pairwise_check(key_ctx), 0))
+ goto err;
+
+ /* EVP_PKEY_copy_parameters() should fail for RSA */
+ if (!TEST_ptr(copy_pk = EVP_PKEY_new())
+ || !TEST_false(EVP_PKEY_copy_parameters(copy_pk, pk)))
+ goto err;
+ EVP_PKEY_free(copy_pk);
+ copy_pk = NULL;
+
+ ret = test_print_key_using_pem("RSA", pk)
+ && test_print_key_using_encoder("RSA", pk);
+
+ if (!ret || !TEST_ptr(dup_pk = EVP_PKEY_dup(pk)))
+ goto err;
+ ret = ret && TEST_int_eq(EVP_PKEY_eq(pk, dup_pk), 1);
+ EVP_PKEY_free(pk);
+ pk = dup_pk;
+ if (!ret)
+ goto err;
+ }
+ err:
+ /* for better diagnostics always compare key params */
+ for (i = 0; fromdata_params[i].key != NULL; ++i) {
+ if (!TEST_true(BN_set_word(bn_from, key_numbers[i]))
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, fromdata_params[i].key, &bn))
+ || !TEST_BN_eq(bn, bn_from))
+ ret = 0;
+ }
+ BN_free(bn_from);
+ BN_free(bn);
+ EVP_PKEY_free(pk);
+ EVP_PKEY_free(copy_pk);
+ EVP_PKEY_CTX_free(key_ctx);
+ EVP_PKEY_CTX_free(ctx);
+
+ return ret;
+}
+
+static int test_evp_pkey_get_bn_param_large(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL, *key_ctx = NULL;
+ EVP_PKEY *pk = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *fromdata_params = NULL;
+ BIGNUM *n = NULL, *e = NULL, *d = NULL, *n_out = NULL;
+ /*
+ * The buffer size chosen here for n_data larger than the buffer used
+ * internally in EVP_PKEY_get_bn_param.
+ */
+ static unsigned char n_data[2050];
+ static const unsigned char e_data[] = {
+ 0x1, 0x00, 0x01
+ };
+ static const unsigned char d_data[]= {
+ 0x99, 0x33, 0x13, 0x7b
+ };
+
+ /* N is a large buffer */
+ memset(n_data, 0xCE, sizeof(n_data));
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(n = BN_bin2bn(n_data, sizeof(n_data), NULL))
+ || !TEST_ptr(e = BN_bin2bn(e_data, sizeof(e_data), NULL))
+ || !TEST_ptr(d = BN_bin2bn(d_data, sizeof(d_data), NULL))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_N, n))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_E, e))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_RSA_D, d))
+ || !TEST_ptr(fromdata_params = OSSL_PARAM_BLD_to_param(bld))
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL))
+ || !TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, &pk, EVP_PKEY_KEYPAIR,
+ fromdata_params), 1)
+ || !TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(NULL, pk, ""))
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_RSA_N, &n_out))
+ || !TEST_BN_eq(n, n_out))
+ goto err;
+ ret = 1;
+ err:
+ BN_free(n_out);
+ BN_free(n);
+ BN_free(e);
+ BN_free(d);
+ EVP_PKEY_free(pk);
+ EVP_PKEY_CTX_free(key_ctx);
+ EVP_PKEY_CTX_free(ctx);
+ OSSL_PARAM_free(fromdata_params);
+ OSSL_PARAM_BLD_free(bld);
+ return ret;
+}
+
+
+#ifndef OPENSSL_NO_DH
+static int test_fromdata_dh_named_group(void)
+{
+ int ret = 0;
+ int gindex = 0, pcounter = 0, hindex = 0;
+ EVP_PKEY_CTX *ctx = NULL, *key_ctx = NULL;
+ EVP_PKEY *pk = NULL, *copy_pk = NULL, *dup_pk = NULL;
+ size_t len;
+ BIGNUM *pub = NULL, *priv = NULL;
+ BIGNUM *pub_out = NULL, *priv_out = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL, *j = NULL;
+ OSSL_PARAM *fromdata_params = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ char name_out[80];
+ unsigned char seed_out[32];
+
+ /*
+ * DH key data was generated using the following:
+ * openssl genpkey -algorithm DH -pkeyopt group:ffdhe2048
+ * -pkeyopt priv_len:224 -text
+ */
+ static const unsigned char priv_data[] = {
+ 0x88, 0x85, 0xe7, 0x9f, 0xee, 0x6d, 0xc5, 0x7c, 0x78, 0xaf, 0x63, 0x5d,
+ 0x38, 0x2a, 0xd0, 0xed, 0x56, 0x4b, 0x47, 0x21, 0x2b, 0xfa, 0x55, 0xfa,
+ 0x87, 0xe8, 0xa9, 0x7b,
+ };
+ static const unsigned char pub_data[] = {
+ 0x00, 0xd6, 0x2d, 0x77, 0xe0, 0xd3, 0x7d, 0xf8, 0xeb, 0x98, 0x50, 0xa1,
+ 0x82, 0x22, 0x65, 0xd5, 0xd9, 0xfe, 0xc9, 0x3f, 0xbe, 0x16, 0x83, 0xbd,
+ 0x33, 0xe9, 0xc6, 0x93, 0xcf, 0x08, 0xaf, 0x83, 0xfa, 0x80, 0x8a, 0x6c,
+ 0x64, 0xdf, 0x70, 0x64, 0xd5, 0x0a, 0x7c, 0x5a, 0x72, 0xda, 0x66, 0xe6,
+ 0xf9, 0xf5, 0x31, 0x21, 0x92, 0xb0, 0x60, 0x1a, 0xb5, 0xd3, 0xf0, 0xa5,
+ 0xfa, 0x48, 0x95, 0x2e, 0x38, 0xd9, 0xc5, 0xe6, 0xda, 0xfb, 0x6c, 0x03,
+ 0x9d, 0x4b, 0x69, 0xb7, 0x95, 0xe4, 0x5c, 0xc0, 0x93, 0x4f, 0x48, 0xd9,
+ 0x7e, 0x06, 0x22, 0xb2, 0xde, 0xf3, 0x79, 0x24, 0xed, 0xe1, 0xd1, 0x4a,
+ 0x57, 0xf1, 0x40, 0x86, 0x70, 0x42, 0x25, 0xc5, 0x27, 0x68, 0xc9, 0xfa,
+ 0xe5, 0x8e, 0x62, 0x7e, 0xff, 0x49, 0x6c, 0x5b, 0xb5, 0xba, 0xf9, 0xef,
+ 0x9a, 0x1a, 0x10, 0xd4, 0x81, 0x53, 0xcf, 0x83, 0x04, 0x18, 0x1c, 0xe1,
+ 0xdb, 0xe1, 0x65, 0xa9, 0x7f, 0xe1, 0x33, 0xeb, 0xc3, 0x4f, 0xe3, 0xb7,
+ 0x22, 0xf7, 0x1c, 0x09, 0x4f, 0xed, 0xc6, 0x07, 0x8e, 0x78, 0x05, 0x8f,
+ 0x7c, 0x96, 0xd9, 0x12, 0xe0, 0x81, 0x74, 0x1a, 0xe9, 0x13, 0xc0, 0x20,
+ 0x82, 0x65, 0xbb, 0x42, 0x3b, 0xed, 0x08, 0x6a, 0x84, 0x4f, 0xea, 0x77,
+ 0x14, 0x32, 0xf9, 0xed, 0xc2, 0x12, 0xd6, 0xc5, 0xc6, 0xb3, 0xe5, 0xf2,
+ 0x6e, 0xf6, 0x16, 0x7f, 0x37, 0xde, 0xbc, 0x09, 0xc7, 0x06, 0x6b, 0x12,
+ 0xbc, 0xad, 0x2d, 0x49, 0x25, 0xd5, 0xdc, 0xf4, 0x18, 0x14, 0xd2, 0xf0,
+ 0xf1, 0x1d, 0x1f, 0x3a, 0xaa, 0x15, 0x55, 0xbb, 0x0d, 0x7f, 0xbe, 0x67,
+ 0xa1, 0xa7, 0xf0, 0xaa, 0xb3, 0xfb, 0x41, 0x82, 0x39, 0x49, 0x93, 0xbc,
+ 0xa8, 0xee, 0x72, 0x13, 0x45, 0x65, 0x15, 0x42, 0x17, 0xaa, 0xd8, 0xab,
+ 0xcf, 0x33, 0x42, 0x83, 0x42
+ };
+ static const char group_name[] = "ffdhe2048";
+ static const long priv_len = 224;
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(pub = BN_bin2bn(pub_data, sizeof(pub_data), NULL))
+ || !TEST_ptr(priv = BN_bin2bn(priv_data, sizeof(priv_data), NULL))
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ group_name, 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_long(bld, OSSL_PKEY_PARAM_DH_PRIV_LEN,
+ priv_len))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY, pub))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY, priv))
+ || !TEST_ptr(fromdata_params = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(NULL, "DH", NULL)))
+ goto err;
+
+ if (!TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, &pk, EVP_PKEY_KEYPAIR,
+ fromdata_params), 1))
+ goto err;
+
+ /*
+ * A few extra checks of EVP_PKEY_get_utf8_string_param() to see that
+ * it behaves as expected with regards to string length and terminating
+ * NUL byte.
+ */
+ if (!TEST_true(EVP_PKEY_get_utf8_string_param(pk,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ NULL, sizeof(name_out),
+ &len))
+ || !TEST_size_t_eq(len, sizeof(group_name) - 1)
+ /* Just enough space to hold the group name and a terminating NUL */
+ || !TEST_true(EVP_PKEY_get_utf8_string_param(pk,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ name_out,
+ sizeof(group_name),
+ &len))
+ || !TEST_size_t_eq(len, sizeof(group_name) - 1)
+ /* Too small buffer to hold the terminating NUL byte */
+ || !TEST_false(EVP_PKEY_get_utf8_string_param(pk,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ name_out,
+ sizeof(group_name) - 1,
+ &len))
+ /* Too small buffer to hold the whole group name, even! */
+ || !TEST_false(EVP_PKEY_get_utf8_string_param(pk,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ name_out,
+ sizeof(group_name) - 2,
+ &len)))
+ goto err;
+
+ while (dup_pk == NULL) {
+ ret = 0;
+ if (!TEST_int_eq(EVP_PKEY_get_bits(pk), 2048)
+ || !TEST_int_eq(EVP_PKEY_get_security_bits(pk), 112)
+ || !TEST_int_eq(EVP_PKEY_get_size(pk), 256)
+ || !TEST_false(EVP_PKEY_missing_parameters(pk)))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_get_utf8_string_param(pk,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ name_out,
+ sizeof(name_out),
+ &len))
+ || !TEST_str_eq(name_out, group_name)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_PUB_KEY,
+ &pub_out))
+
+ || !TEST_BN_eq(pub, pub_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_PRIV_KEY,
+ &priv_out))
+ || !TEST_BN_eq(priv, priv_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_FFC_P, &p))
+ || !TEST_BN_eq(&ossl_bignum_ffdhe2048_p, p)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_FFC_Q, &q))
+ || !TEST_ptr(q)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_FFC_G, &g))
+ || !TEST_BN_eq(&ossl_bignum_const_2, g)
+ || !TEST_false(EVP_PKEY_get_bn_param(pk,
+ OSSL_PKEY_PARAM_FFC_COFACTOR,
+ &j))
+ || !TEST_ptr_null(j)
+ || !TEST_false(EVP_PKEY_get_octet_string_param(pk,
+ OSSL_PKEY_PARAM_FFC_SEED,
+ seed_out,
+ sizeof(seed_out),
+ &len))
+ || !TEST_true(EVP_PKEY_get_int_param(pk, OSSL_PKEY_PARAM_FFC_GINDEX,
+ &gindex))
+ || !TEST_int_eq(gindex, -1)
+ || !TEST_true(EVP_PKEY_get_int_param(pk, OSSL_PKEY_PARAM_FFC_H,
+ &hindex))
+ || !TEST_int_eq(hindex, 0)
+ || !TEST_true(EVP_PKEY_get_int_param(pk,
+ OSSL_PKEY_PARAM_FFC_PCOUNTER,
+ &pcounter))
+ || !TEST_int_eq(pcounter, -1))
+ goto err;
+ BN_free(p);
+ p = NULL;
+ BN_free(q);
+ q = NULL;
+ BN_free(g);
+ g = NULL;
+ BN_free(j);
+ j = NULL;
+ BN_free(pub_out);
+ pub_out = NULL;
+ BN_free(priv_out);
+ priv_out = NULL;
+
+ if (!TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(NULL, pk, "")))
+ goto err;
+
+ if (!TEST_int_gt(EVP_PKEY_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_public_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_private_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_pairwise_check(key_ctx), 0))
+ goto err;
+ EVP_PKEY_CTX_free(key_ctx);
+ key_ctx = NULL;
+
+ if (!TEST_ptr(copy_pk = EVP_PKEY_new())
+ || !TEST_true(EVP_PKEY_copy_parameters(copy_pk, pk)))
+ goto err;
+ EVP_PKEY_free(copy_pk);
+ copy_pk = NULL;
+
+ ret = test_print_key_using_pem("DH", pk)
+ && test_print_key_using_encoder("DH", pk);
+
+ if (!ret || !TEST_ptr(dup_pk = EVP_PKEY_dup(pk)))
+ goto err;
+ ret = ret && TEST_int_eq(EVP_PKEY_eq(pk, dup_pk), 1);
+ EVP_PKEY_free(pk);
+ pk = dup_pk;
+ if (!ret)
+ goto err;
+ }
+err:
+ BN_free(p);
+ BN_free(q);
+ BN_free(g);
+ BN_free(j);
+ BN_free(pub);
+ BN_free(priv);
+ BN_free(pub_out);
+ BN_free(priv_out);
+ EVP_PKEY_free(copy_pk);
+ EVP_PKEY_free(pk);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_CTX_free(key_ctx);
+ OSSL_PARAM_free(fromdata_params);
+ OSSL_PARAM_BLD_free(bld);
+
+ return ret;
+}
+
+static int test_fromdata_dh_fips186_4(void)
+{
+ int ret = 0;
+ int gindex = 0, pcounter = 0, hindex = 0;
+ EVP_PKEY_CTX *ctx = NULL, *key_ctx = NULL;
+ EVP_PKEY *pk = NULL, *dup_pk = NULL;
+ size_t len;
+ BIGNUM *pub = NULL, *priv = NULL;
+ BIGNUM *pub_out = NULL, *priv_out = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL, *j = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *fromdata_params = NULL;
+ char name_out[80];
+ unsigned char seed_out[32];
+
+ /*
+ * DH key data was generated using the following:
+ * openssl genpkey -algorithm DH
+ * -pkeyopt group:ffdhe2048 -pkeyopt priv_len:224 -text
+ */
+ static const unsigned char priv_data[] = {
+ 0x88, 0x85, 0xe7, 0x9f, 0xee, 0x6d, 0xc5, 0x7c, 0x78, 0xaf, 0x63, 0x5d,
+ 0x38, 0x2a, 0xd0, 0xed, 0x56, 0x4b, 0x47, 0x21, 0x2b, 0xfa, 0x55, 0xfa,
+ 0x87, 0xe8, 0xa9, 0x7b,
+ };
+ static const unsigned char pub_data[] = {
+ 0xd6, 0x2d, 0x77, 0xe0, 0xd3, 0x7d, 0xf8, 0xeb, 0x98, 0x50, 0xa1, 0x82,
+ 0x22, 0x65, 0xd5, 0xd9, 0xfe, 0xc9, 0x3f, 0xbe, 0x16, 0x83, 0xbd, 0x33,
+ 0xe9, 0xc6, 0x93, 0xcf, 0x08, 0xaf, 0x83, 0xfa, 0x80, 0x8a, 0x6c, 0x64,
+ 0xdf, 0x70, 0x64, 0xd5, 0x0a, 0x7c, 0x5a, 0x72, 0xda, 0x66, 0xe6, 0xf9,
+ 0xf5, 0x31, 0x21, 0x92, 0xb0, 0x60, 0x1a, 0xb5, 0xd3, 0xf0, 0xa5, 0xfa,
+ 0x48, 0x95, 0x2e, 0x38, 0xd9, 0xc5, 0xe6, 0xda, 0xfb, 0x6c, 0x03, 0x9d,
+ 0x4b, 0x69, 0xb7, 0x95, 0xe4, 0x5c, 0xc0, 0x93, 0x4f, 0x48, 0xd9, 0x7e,
+ 0x06, 0x22, 0xb2, 0xde, 0xf3, 0x79, 0x24, 0xed, 0xe1, 0xd1, 0x4a, 0x57,
+ 0xf1, 0x40, 0x86, 0x70, 0x42, 0x25, 0xc5, 0x27, 0x68, 0xc9, 0xfa, 0xe5,
+ 0x8e, 0x62, 0x7e, 0xff, 0x49, 0x6c, 0x5b, 0xb5, 0xba, 0xf9, 0xef, 0x9a,
+ 0x1a, 0x10, 0xd4, 0x81, 0x53, 0xcf, 0x83, 0x04, 0x18, 0x1c, 0xe1, 0xdb,
+ 0xe1, 0x65, 0xa9, 0x7f, 0xe1, 0x33, 0xeb, 0xc3, 0x4f, 0xe3, 0xb7, 0x22,
+ 0xf7, 0x1c, 0x09, 0x4f, 0xed, 0xc6, 0x07, 0x8e, 0x78, 0x05, 0x8f, 0x7c,
+ 0x96, 0xd9, 0x12, 0xe0, 0x81, 0x74, 0x1a, 0xe9, 0x13, 0xc0, 0x20, 0x82,
+ 0x65, 0xbb, 0x42, 0x3b, 0xed, 0x08, 0x6a, 0x84, 0x4f, 0xea, 0x77, 0x14,
+ 0x32, 0xf9, 0xed, 0xc2, 0x12, 0xd6, 0xc5, 0xc6, 0xb3, 0xe5, 0xf2, 0x6e,
+ 0xf6, 0x16, 0x7f, 0x37, 0xde, 0xbc, 0x09, 0xc7, 0x06, 0x6b, 0x12, 0xbc,
+ 0xad, 0x2d, 0x49, 0x25, 0xd5, 0xdc, 0xf4, 0x18, 0x14, 0xd2, 0xf0, 0xf1,
+ 0x1d, 0x1f, 0x3a, 0xaa, 0x15, 0x55, 0xbb, 0x0d, 0x7f, 0xbe, 0x67, 0xa1,
+ 0xa7, 0xf0, 0xaa, 0xb3, 0xfb, 0x41, 0x82, 0x39, 0x49, 0x93, 0xbc, 0xa8,
+ 0xee, 0x72, 0x13, 0x45, 0x65, 0x15, 0x42, 0x17, 0xaa, 0xd8, 0xab, 0xcf,
+ 0x33, 0x42, 0x83, 0x42
+ };
+ static const char group_name[] = "ffdhe2048";
+ static const long priv_len = 224;
+
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(pub = BN_bin2bn(pub_data, sizeof(pub_data), NULL))
+ || !TEST_ptr(priv = BN_bin2bn(priv_data, sizeof(priv_data), NULL))
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ group_name, 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_long(bld, OSSL_PKEY_PARAM_DH_PRIV_LEN,
+ priv_len))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY, pub))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY, priv))
+ || !TEST_ptr(fromdata_params = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(NULL, "DH", NULL)))
+ goto err;
+
+ if (!TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, &pk, EVP_PKEY_KEYPAIR,
+ fromdata_params), 1))
+ goto err;
+
+ while (dup_pk == NULL) {
+ ret = 0;
+ if (!TEST_int_eq(EVP_PKEY_get_bits(pk), 2048)
+ || !TEST_int_eq(EVP_PKEY_get_security_bits(pk), 112)
+ || !TEST_int_eq(EVP_PKEY_get_size(pk), 256)
+ || !TEST_false(EVP_PKEY_missing_parameters(pk)))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_get_utf8_string_param(pk,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ name_out,
+ sizeof(name_out),
+ &len))
+ || !TEST_str_eq(name_out, group_name)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_PUB_KEY,
+ &pub_out))
+ || !TEST_BN_eq(pub, pub_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_PRIV_KEY,
+ &priv_out))
+ || !TEST_BN_eq(priv, priv_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_FFC_P, &p))
+ || !TEST_BN_eq(&ossl_bignum_ffdhe2048_p, p)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_FFC_Q, &q))
+ || !TEST_ptr(q)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_FFC_G, &g))
+ || !TEST_BN_eq(&ossl_bignum_const_2, g)
+ || !TEST_false(EVP_PKEY_get_bn_param(pk,
+ OSSL_PKEY_PARAM_FFC_COFACTOR,
+ &j))
+ || !TEST_ptr_null(j)
+ || !TEST_false(EVP_PKEY_get_octet_string_param(pk,
+ OSSL_PKEY_PARAM_FFC_SEED,
+ seed_out,
+ sizeof(seed_out),
+ &len))
+ || !TEST_true(EVP_PKEY_get_int_param(pk,
+ OSSL_PKEY_PARAM_FFC_GINDEX,
+ &gindex))
+ || !TEST_int_eq(gindex, -1)
+ || !TEST_true(EVP_PKEY_get_int_param(pk, OSSL_PKEY_PARAM_FFC_H,
+ &hindex))
+ || !TEST_int_eq(hindex, 0)
+ || !TEST_true(EVP_PKEY_get_int_param(pk,
+ OSSL_PKEY_PARAM_FFC_PCOUNTER,
+ &pcounter))
+ || !TEST_int_eq(pcounter, -1))
+ goto err;
+ BN_free(p);
+ p = NULL;
+ BN_free(q);
+ q = NULL;
+ BN_free(g);
+ g = NULL;
+ BN_free(j);
+ j = NULL;
+ BN_free(pub_out);
+ pub_out = NULL;
+ BN_free(priv_out);
+ priv_out = NULL;
+
+ if (!TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(NULL, pk, "")))
+ goto err;
+
+ if (!TEST_int_gt(EVP_PKEY_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_public_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_private_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_pairwise_check(key_ctx), 0))
+ goto err;
+ EVP_PKEY_CTX_free(key_ctx);
+ key_ctx = NULL;
+
+ ret = test_print_key_using_pem("DH", pk)
+ && test_print_key_using_encoder("DH", pk);
+
+ if (!ret || !TEST_ptr(dup_pk = EVP_PKEY_dup(pk)))
+ goto err;
+ ret = ret && TEST_int_eq(EVP_PKEY_eq(pk, dup_pk), 1);
+ EVP_PKEY_free(pk);
+ pk = dup_pk;
+ if (!ret)
+ goto err;
+ }
+err:
+ BN_free(p);
+ BN_free(q);
+ BN_free(g);
+ BN_free(j);
+ BN_free(pub);
+ BN_free(priv);
+ BN_free(pub_out);
+ BN_free(priv_out);
+ EVP_PKEY_free(pk);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_CTX_free(key_ctx);
+ OSSL_PARAM_free(fromdata_params);
+ OSSL_PARAM_BLD_free(bld);
+
+ return ret;
+}
+
+#endif
+
+
+
+#ifndef OPENSSL_NO_EC
+/* Array indexes used in test_fromdata_ecx */
+# define PRIV_KEY 0
+# define PUB_KEY 1
+
+# define X25519_IDX 0
+# define X448_IDX 1
+# define ED25519_IDX 2
+# define ED448_IDX 3
+
+/*
+ * tst uses indexes 0 ... (3 * 4 - 1)
+ * For the 4 ECX key types (X25519_IDX..ED448_IDX)
+ * 0..3 = public + private key.
+ * 4..7 = private key (This will generate the public key from the private key)
+ * 8..11 = public key
+ */
+static int test_fromdata_ecx(int tst)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL, *ctx2 = NULL;
+ EVP_PKEY *pk = NULL, *copy_pk = NULL, *dup_pk = NULL;
+ const char *alg = NULL;
+ size_t len;
+ unsigned char out_pub[ED448_KEYLEN];
+ unsigned char out_priv[ED448_KEYLEN];
+ OSSL_PARAM params[3] = { OSSL_PARAM_END, OSSL_PARAM_END, OSSL_PARAM_END };
+
+ /* ED448_KEYLEN > X448_KEYLEN > X25519_KEYLEN == ED25519_KEYLEN */
+ static unsigned char key_numbers[4][2][ED448_KEYLEN] = {
+ /* X25519: Keys from RFC 7748 6.1 */
+ {
+ /* Private Key */
+ {
+ 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d, 0x3c, 0x16,
+ 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45, 0xdf, 0x4c, 0x2f, 0x87,
+ 0xeb, 0xc0, 0x99, 0x2a, 0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9,
+ 0x2c, 0x2a
+ },
+ /* Public Key */
+ {
+ 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54, 0x74, 0x8b,
+ 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a, 0x0d, 0xbf, 0x3a, 0x0d,
+ 0x26, 0x38, 0x1a, 0xf4, 0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b,
+ 0x4e, 0x6a
+ }
+ },
+ /* X448: Keys from RFC 7748 6.2 */
+ {
+ /* Private Key */
+ {
+ 0x9a, 0x8f, 0x49, 0x25, 0xd1, 0x51, 0x9f, 0x57, 0x75, 0xcf,
+ 0x46, 0xb0, 0x4b, 0x58, 0x00, 0xd4, 0xee, 0x9e, 0xe8, 0xba,
+ 0xe8, 0xbc, 0x55, 0x65, 0xd4, 0x98, 0xc2, 0x8d, 0xd9, 0xc9,
+ 0xba, 0xf5, 0x74, 0xa9, 0x41, 0x97, 0x44, 0x89, 0x73, 0x91,
+ 0x00, 0x63, 0x82, 0xa6, 0xf1, 0x27, 0xab, 0x1d, 0x9a, 0xc2,
+ 0xd8, 0xc0, 0xa5, 0x98, 0x72, 0x6b
+ },
+ /* Public Key */
+ {
+ 0x9b, 0x08, 0xf7, 0xcc, 0x31, 0xb7, 0xe3, 0xe6, 0x7d, 0x22,
+ 0xd5, 0xae, 0xa1, 0x21, 0x07, 0x4a, 0x27, 0x3b, 0xd2, 0xb8,
+ 0x3d, 0xe0, 0x9c, 0x63, 0xfa, 0xa7, 0x3d, 0x2c, 0x22, 0xc5,
+ 0xd9, 0xbb, 0xc8, 0x36, 0x64, 0x72, 0x41, 0xd9, 0x53, 0xd4,
+ 0x0c, 0x5b, 0x12, 0xda, 0x88, 0x12, 0x0d, 0x53, 0x17, 0x7f,
+ 0x80, 0xe5, 0x32, 0xc4, 0x1f, 0xa0
+ }
+ },
+ /* ED25519: Keys from RFC 8032 */
+ {
+ /* Private Key */
+ {
+ 0x9d, 0x61, 0xb1, 0x9d, 0xef, 0xfd, 0x5a, 0x60, 0xba, 0x84,
+ 0x4a, 0xf4, 0x92, 0xec, 0x2c, 0xc4, 0x44, 0x49, 0xc5, 0x69,
+ 0x7b, 0x32, 0x69, 0x19, 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae,
+ 0x7f, 0x60
+ },
+ /* Public Key */
+ {
+ 0xd7, 0x5a, 0x98, 0x01, 0x82, 0xb1, 0x0a, 0xb7, 0xd5, 0x4b,
+ 0xfe, 0xd3, 0xc9, 0x64, 0x07, 0x3a, 0x0e, 0xe1, 0x72, 0xf3,
+ 0xda, 0xa6, 0x23, 0x25, 0xaf, 0x02, 0x1a, 0x68, 0xf7, 0x07,
+ 0x51, 0x1a
+ }
+ },
+ /* ED448: Keys from RFC 8032 */
+ {
+ /* Private Key */
+ {
+ 0x6c, 0x82, 0xa5, 0x62, 0xcb, 0x80, 0x8d, 0x10, 0xd6, 0x32,
+ 0xbe, 0x89, 0xc8, 0x51, 0x3e, 0xbf, 0x6c, 0x92, 0x9f, 0x34,
+ 0xdd, 0xfa, 0x8c, 0x9f, 0x63, 0xc9, 0x96, 0x0e, 0xf6, 0xe3,
+ 0x48, 0xa3, 0x52, 0x8c, 0x8a, 0x3f, 0xcc, 0x2f, 0x04, 0x4e,
+ 0x39, 0xa3, 0xfc, 0x5b, 0x94, 0x49, 0x2f, 0x8f, 0x03, 0x2e,
+ 0x75, 0x49, 0xa2, 0x00, 0x98, 0xf9, 0x5b
+ },
+ /* Public Key */
+ {
+ 0x5f, 0xd7, 0x44, 0x9b, 0x59, 0xb4, 0x61, 0xfd, 0x2c, 0xe7,
+ 0x87, 0xec, 0x61, 0x6a, 0xd4, 0x6a, 0x1d, 0xa1, 0x34, 0x24,
+ 0x85, 0xa7, 0x0e, 0x1f, 0x8a, 0x0e, 0xa7, 0x5d, 0x80, 0xe9,
+ 0x67, 0x78, 0xed, 0xf1, 0x24, 0x76, 0x9b, 0x46, 0xc7, 0x06,
+ 0x1b, 0xd6, 0x78, 0x3d, 0xf1, 0xe5, 0x0f, 0x6c, 0xd1, 0xfa,
+ 0x1a, 0xbe, 0xaf, 0xe8, 0x25, 0x61, 0x80
+ }
+ }
+ };
+ OSSL_PARAM x25519_fromdata_params[] = {
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY,
+ key_numbers[X25519_IDX][PRIV_KEY],
+ X25519_KEYLEN),
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY,
+ key_numbers[X25519_IDX][PUB_KEY],
+ X25519_KEYLEN),
+ OSSL_PARAM_END
+ };
+ OSSL_PARAM x448_fromdata_params[] = {
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY,
+ key_numbers[X448_IDX][PRIV_KEY],
+ X448_KEYLEN),
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY,
+ key_numbers[X448_IDX][PUB_KEY],
+ X448_KEYLEN),
+ OSSL_PARAM_END
+ };
+ OSSL_PARAM ed25519_fromdata_params[] = {
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY,
+ key_numbers[ED25519_IDX][PRIV_KEY],
+ ED25519_KEYLEN),
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY,
+ key_numbers[ED25519_IDX][PUB_KEY],
+ ED25519_KEYLEN),
+ OSSL_PARAM_END
+ };
+ OSSL_PARAM ed448_fromdata_params[] = {
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PRIV_KEY,
+ key_numbers[ED448_IDX][PRIV_KEY],
+ ED448_KEYLEN),
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_PUB_KEY,
+ key_numbers[ED448_IDX][PUB_KEY],
+ ED448_KEYLEN),
+ OSSL_PARAM_END
+ };
+ OSSL_PARAM *fromdata_params = NULL;
+ int bits = 0, security_bits = 0, size = 0;
+ OSSL_PARAM *orig_fromdata_params = NULL;
+
+ switch (tst & 3) {
+ case X25519_IDX:
+ fromdata_params = x25519_fromdata_params;
+ bits = X25519_BITS;
+ security_bits = X25519_SECURITY_BITS;
+ size = X25519_KEYLEN;
+ alg = "X25519";
+ break;
+
+ case X448_IDX:
+ fromdata_params = x448_fromdata_params;
+ bits = X448_BITS;
+ security_bits = X448_SECURITY_BITS;
+ size = X448_KEYLEN;
+ alg = "X448";
+ break;
+
+ case ED25519_IDX:
+ fromdata_params = ed25519_fromdata_params;
+ bits = ED25519_BITS;
+ security_bits = ED25519_SECURITY_BITS;
+ size = ED25519_SIGSIZE;
+ alg = "ED25519";
+ break;
+
+ case ED448_IDX:
+ fromdata_params = ed448_fromdata_params;
+ bits = ED448_BITS;
+ security_bits = ED448_SECURITY_BITS;
+ size = ED448_SIGSIZE;
+ alg = "ED448";
+ break;
+ default:
+ goto err;
+ }
+
+ ctx = EVP_PKEY_CTX_new_from_name(NULL, alg, NULL);
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ orig_fromdata_params = fromdata_params;
+ if (tst > 7) {
+ /* public key only */
+ fromdata_params++;
+ } else if (tst > 3) {
+ /* private key only */
+ params[0] = fromdata_params[0];
+ params[1] = fromdata_params[2];
+ fromdata_params = params;
+ }
+
+ if (!TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, &pk, EVP_PKEY_KEYPAIR,
+ fromdata_params), 1))
+ goto err;
+
+ while (dup_pk == NULL) {
+ ret = 0;
+ if (!TEST_int_eq(EVP_PKEY_get_bits(pk), bits)
+ || !TEST_int_eq(EVP_PKEY_get_security_bits(pk), security_bits)
+ || !TEST_int_eq(EVP_PKEY_get_size(pk), size)
+ || !TEST_false(EVP_PKEY_missing_parameters(pk)))
+ goto err;
+
+ if (!TEST_ptr(ctx2 = EVP_PKEY_CTX_new_from_pkey(NULL, pk, NULL)))
+ goto err;
+ if (tst <= 7) {
+ if (!TEST_int_gt(EVP_PKEY_check(ctx2), 0))
+ goto err;
+ if (!TEST_true(EVP_PKEY_get_octet_string_param(
+ pk, orig_fromdata_params[PRIV_KEY].key,
+ out_priv, sizeof(out_priv), &len))
+ || !TEST_mem_eq(out_priv, len,
+ orig_fromdata_params[PRIV_KEY].data,
+ orig_fromdata_params[PRIV_KEY].data_size)
+ || !TEST_true(EVP_PKEY_get_octet_string_param(
+ pk, orig_fromdata_params[PUB_KEY].key,
+ out_pub, sizeof(out_pub), &len))
+ || !TEST_mem_eq(out_pub, len,
+ orig_fromdata_params[PUB_KEY].data,
+ orig_fromdata_params[PUB_KEY].data_size))
+ goto err;
+ } else {
+ /* The private key check should fail if there is only a public key */
+ if (!TEST_int_gt(EVP_PKEY_public_check(ctx2), 0)
+ || !TEST_int_le(EVP_PKEY_private_check(ctx2), 0)
+ || !TEST_int_le(EVP_PKEY_check(ctx2), 0))
+ goto err;
+ }
+ EVP_PKEY_CTX_free(ctx2);
+ ctx2 = NULL;
+
+ if (!TEST_ptr(copy_pk = EVP_PKEY_new())
+ /* This should succeed because there are no parameters to copy */
+ || !TEST_true(EVP_PKEY_copy_parameters(copy_pk, pk)))
+ goto err;
+ if (!TEST_ptr(ctx2 = EVP_PKEY_CTX_new_from_pkey(NULL, copy_pk, NULL))
+ /* This should fail because copy_pk has no pubkey */
+ || !TEST_int_le(EVP_PKEY_public_check(ctx2), 0))
+ goto err;
+ EVP_PKEY_CTX_free(ctx2);
+ ctx2 = NULL;
+ EVP_PKEY_free(copy_pk);
+ copy_pk = NULL;
+
+ if (tst > 7)
+ ret = test_print_key_using_encoder_public(alg, pk);
+ else
+ ret = test_print_key_using_pem(alg, pk)
+ && test_print_key_using_encoder(alg, pk);
+
+ if (!ret || !TEST_ptr(dup_pk = EVP_PKEY_dup(pk)))
+ goto err;
+ ret = ret && TEST_int_eq(EVP_PKEY_eq(pk, dup_pk), 1);
+ EVP_PKEY_free(pk);
+ pk = dup_pk;
+ if (!ret)
+ goto err;
+ }
+
+err:
+ EVP_PKEY_free(pk);
+ EVP_PKEY_free(copy_pk);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_CTX_free(ctx2);
+
+ return ret;
+}
+
+static int test_fromdata_ec(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *pk = NULL, *copy_pk = NULL, *dup_pk = NULL;
+ OSSL_PARAM_BLD *bld = NULL;
+ BIGNUM *ec_priv_bn = NULL;
+ BIGNUM *bn_priv = NULL;
+ OSSL_PARAM *fromdata_params = NULL;
+ const char *alg = "EC";
+ const char *curve = "prime256v1";
+ const char bad_curve[] = "nonexistent-curve";
+ OSSL_PARAM nokey_params[2] = {
+ OSSL_PARAM_END,
+ OSSL_PARAM_END
+ };
+ /* UNCOMPRESSED FORMAT */
+ static const unsigned char ec_pub_keydata[] = {
+ POINT_CONVERSION_UNCOMPRESSED,
+ 0x1b, 0x93, 0x67, 0x55, 0x1c, 0x55, 0x9f, 0x63,
+ 0xd1, 0x22, 0xa4, 0xd8, 0xd1, 0x0a, 0x60, 0x6d,
+ 0x02, 0xa5, 0x77, 0x57, 0xc8, 0xa3, 0x47, 0x73,
+ 0x3a, 0x6a, 0x08, 0x28, 0x39, 0xbd, 0xc9, 0xd2,
+ 0x80, 0xec, 0xe9, 0xa7, 0x08, 0x29, 0x71, 0x2f,
+ 0xc9, 0x56, 0x82, 0xee, 0x9a, 0x85, 0x0f, 0x6d,
+ 0x7f, 0x59, 0x5f, 0x8c, 0xd1, 0x96, 0x0b, 0xdf,
+ 0x29, 0x3e, 0x49, 0x07, 0x88, 0x3f, 0x9a, 0x29
+ };
+ /* SAME BUT COMPRESSED FORMAT */
+ static const unsigned char ec_pub_keydata_compressed[] = {
+ POINT_CONVERSION_COMPRESSED+1,
+ 0x1b, 0x93, 0x67, 0x55, 0x1c, 0x55, 0x9f, 0x63,
+ 0xd1, 0x22, 0xa4, 0xd8, 0xd1, 0x0a, 0x60, 0x6d,
+ 0x02, 0xa5, 0x77, 0x57, 0xc8, 0xa3, 0x47, 0x73,
+ 0x3a, 0x6a, 0x08, 0x28, 0x39, 0xbd, 0xc9, 0xd2
+ };
+ static const unsigned char ec_priv_keydata[] = {
+ 0x33, 0xd0, 0x43, 0x83, 0xa9, 0x89, 0x56, 0x03,
+ 0xd2, 0xd7, 0xfe, 0x6b, 0x01, 0x6f, 0xe4, 0x59,
+ 0xcc, 0x0d, 0x9a, 0x24, 0x6c, 0x86, 0x1b, 0x2e,
+ 0xdc, 0x4b, 0x4d, 0x35, 0x43, 0xe1, 0x1b, 0xad
+ };
+ unsigned char out_pub[sizeof(ec_pub_keydata)];
+ char out_curve_name[80];
+ const OSSL_PARAM *gettable = NULL;
+ size_t len;
+ EC_GROUP *group = NULL;
+ BIGNUM *group_a = NULL;
+ BIGNUM *group_b = NULL;
+ BIGNUM *group_p = NULL;
+ BIGNUM *a = NULL;
+ BIGNUM *b = NULL;
+ BIGNUM *p = NULL;
+
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new()))
+ goto err;
+ if (!TEST_ptr(ec_priv_bn = BN_bin2bn(ec_priv_keydata,
+ sizeof(ec_priv_keydata), NULL)))
+ goto err;
+
+ if (OSSL_PARAM_BLD_push_utf8_string(bld, OSSL_PKEY_PARAM_GROUP_NAME,
+ curve, 0) <= 0)
+ goto err;
+ /*
+ * We intentionally provide the input point in compressed format,
+ * and avoid setting `OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT`.
+ *
+ * Later on we check what format is used when exporting the
+ * `OSSL_PKEY_PARAM_PUB_KEY` and expect to default to uncompressed
+ * format.
+ */
+ if (OSSL_PARAM_BLD_push_octet_string(bld, OSSL_PKEY_PARAM_PUB_KEY,
+ ec_pub_keydata_compressed,
+ sizeof(ec_pub_keydata_compressed)) <= 0)
+ goto err;
+ if (OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY, ec_priv_bn) <= 0)
+ goto err;
+ if (!TEST_ptr(fromdata_params = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+ ctx = EVP_PKEY_CTX_new_from_name(NULL, alg, NULL);
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ /* try importing parameters with bad curve first */
+ nokey_params[0] =
+ OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME,
+ (char *)bad_curve, sizeof(bad_curve));
+ if (!TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, &pk, EVP_PKEY_KEY_PARAMETERS,
+ nokey_params), 0)
+ || !TEST_ptr_null(pk))
+ goto err;
+
+ if (!TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, &pk, EVP_PKEY_KEYPAIR,
+ fromdata_params), 1))
+ goto err;
+
+ while (dup_pk == NULL) {
+ ret = 0;
+ if (!TEST_int_eq(EVP_PKEY_get_bits(pk), 256)
+ || !TEST_int_eq(EVP_PKEY_get_security_bits(pk), 128)
+ || !TEST_int_eq(EVP_PKEY_get_size(pk), 2 + 35 * 2)
+ || !TEST_false(EVP_PKEY_missing_parameters(pk)))
+ goto err;
+
+ if (!TEST_ptr(copy_pk = EVP_PKEY_new())
+ || !TEST_true(EVP_PKEY_copy_parameters(copy_pk, pk)))
+ goto err;
+ EVP_PKEY_free(copy_pk);
+ copy_pk = NULL;
+
+ if (!TEST_ptr(gettable = EVP_PKEY_gettable_params(pk))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable,
+ OSSL_PKEY_PARAM_GROUP_NAME))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable,
+ OSSL_PKEY_PARAM_PUB_KEY))
+ || !TEST_ptr(OSSL_PARAM_locate_const(gettable,
+ OSSL_PKEY_PARAM_PRIV_KEY)))
+ goto err;
+
+ if (!TEST_ptr(group = EC_GROUP_new_by_curve_name(OBJ_sn2nid(curve)))
+ || !TEST_ptr(group_p = BN_new())
+ || !TEST_ptr(group_a = BN_new())
+ || !TEST_ptr(group_b = BN_new())
+ || !TEST_true(EC_GROUP_get_curve(group, group_p, group_a, group_b, NULL)))
+ goto err;
+
+ if (!TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_EC_A, &a))
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_EC_B, &b))
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_EC_P, &p)))
+ goto err;
+
+ if (!TEST_BN_eq(group_p, p) || !TEST_BN_eq(group_a, a)
+ || !TEST_BN_eq(group_b, b))
+ goto err;
+
+ if (!EVP_PKEY_get_utf8_string_param(pk, OSSL_PKEY_PARAM_GROUP_NAME,
+ out_curve_name,
+ sizeof(out_curve_name),
+ &len)
+ || !TEST_str_eq(out_curve_name, curve)
+ || !EVP_PKEY_get_octet_string_param(pk, OSSL_PKEY_PARAM_PUB_KEY,
+ out_pub, sizeof(out_pub), &len)
+
+ /*
+ * Our providers use uncompressed format by default if
+ * `OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT` was not
+ * explicitly set, irrespective of the format used for the
+ * input point given as a param to create this key.
+ */
+ || !TEST_true(out_pub[0] == POINT_CONVERSION_UNCOMPRESSED)
+ || !TEST_mem_eq(out_pub + 1, len - 1,
+ ec_pub_keydata + 1, sizeof(ec_pub_keydata) - 1)
+
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_PRIV_KEY,
+ &bn_priv))
+ || !TEST_BN_eq(ec_priv_bn, bn_priv))
+ goto err;
+ BN_free(bn_priv);
+ bn_priv = NULL;
+
+ ret = test_print_key_using_pem(alg, pk)
+ && test_print_key_using_encoder(alg, pk);
+
+ if (!ret || !TEST_ptr(dup_pk = EVP_PKEY_dup(pk)))
+ goto err;
+ ret = ret && TEST_int_eq(EVP_PKEY_eq(pk, dup_pk), 1);
+ EVP_PKEY_free(pk);
+ pk = dup_pk;
+ if (!ret)
+ goto err;
+ }
+
+err:
+ EC_GROUP_free(group);
+ BN_free(group_a);
+ BN_free(group_b);
+ BN_free(group_p);
+ BN_free(a);
+ BN_free(b);
+ BN_free(p);
+ BN_free(bn_priv);
+ BN_free(ec_priv_bn);
+ OSSL_PARAM_free(fromdata_params);
+ OSSL_PARAM_BLD_free(bld);
+ EVP_PKEY_free(pk);
+ EVP_PKEY_free(copy_pk);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
+}
+
+static int test_ec_dup_no_operation(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *pctx = NULL, *ctx = NULL, *kctx = NULL;
+ EVP_PKEY *param = NULL, *pkey = NULL;
+
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL))
+ || !TEST_int_gt(EVP_PKEY_paramgen_init(pctx), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx,
+ NID_X9_62_prime256v1), 0)
+ || !TEST_int_gt(EVP_PKEY_paramgen(pctx, &param), 0)
+ || !TEST_ptr(param))
+ goto err;
+
+ EVP_PKEY_CTX_free(pctx);
+ pctx = NULL;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_pkey(NULL, param, NULL))
+ || !TEST_ptr(kctx = EVP_PKEY_CTX_dup(ctx))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(kctx), 0)
+ || !TEST_int_gt(EVP_PKEY_keygen(kctx, &pkey), 0))
+ goto err;
+ ret = 1;
+err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(param);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_CTX_free(kctx);
+ EVP_PKEY_CTX_free(pctx);
+ return ret;
+}
+
+/* Test that keygen doesn't support EVP_PKEY_CTX_dup */
+static int test_ec_dup_keygen_operation(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *pctx = NULL, *ctx = NULL, *kctx = NULL;
+ EVP_PKEY *param = NULL, *pkey = NULL;
+
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL))
+ || !TEST_int_gt(EVP_PKEY_paramgen_init(pctx), 0)
+ || !TEST_int_gt(EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx,
+ NID_X9_62_prime256v1), 0)
+ || !TEST_int_gt(EVP_PKEY_paramgen(pctx, &param), 0)
+ || !TEST_ptr(param))
+ goto err;
+
+ EVP_PKEY_CTX_free(pctx);
+ pctx = NULL;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_pkey(NULL, param, NULL))
+ || !TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0)
+ || !TEST_ptr_null(kctx = EVP_PKEY_CTX_dup(ctx)))
+ goto err;
+ ret = 1;
+err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(param);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_CTX_free(kctx);
+ EVP_PKEY_CTX_free(pctx);
+ return ret;
+}
+
+#endif /* OPENSSL_NO_EC */
+
+#ifndef OPENSSL_NO_DSA
+static int test_fromdata_dsa_fips186_4(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL, *key_ctx = NULL;
+ EVP_PKEY *pk = NULL, *copy_pk = NULL, *dup_pk = NULL;
+ BIGNUM *pub = NULL, *priv = NULL;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL;
+ BIGNUM *pub_out = NULL, *priv_out = NULL;
+ BIGNUM *p_out = NULL, *q_out = NULL, *g_out = NULL, *j_out = NULL;
+ int gindex_out = 0, pcounter_out = 0, hindex_out = 0;
+ char name_out[80];
+ unsigned char seed_out[32];
+ size_t len;
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *fromdata_params = NULL;
+
+ /*
+ * DSA parameter data was generated using the following:
+ * openssl genpkey -genparam -algorithm DSA -pkeyopt pbits:2048 \
+ * -pkeyopt qbits:256 -pkeyopt type:0 \
+ * -pkeyopt gindex:1 -out dsa_params.pem -text
+ */
+ static const unsigned char p_data[] = {
+ 0x00, 0xa0, 0xb7, 0x02, 0xc4, 0xac, 0xa6, 0x42, 0xab, 0xf2, 0x34, 0x0b,
+ 0x22, 0x47, 0x1f, 0x33, 0xcf, 0xd5, 0x04, 0xe4, 0x3e, 0xec, 0xa1, 0x21,
+ 0xc8, 0x41, 0x2b, 0xef, 0xb8, 0x1f, 0x0b, 0x5b, 0x88, 0x8b, 0x67, 0xf8,
+ 0x68, 0x6d, 0x7c, 0x4d, 0x96, 0x5f, 0x3c, 0x66, 0xef, 0x58, 0x34, 0xd7,
+ 0xf6, 0xa2, 0x1b, 0xad, 0xc8, 0x12, 0x52, 0xb8, 0xe8, 0x2a, 0x63, 0xcc,
+ 0xea, 0xe7, 0x4e, 0xc8, 0x34, 0x4c, 0x58, 0x59, 0x0a, 0xc2, 0x4a, 0xe4,
+ 0xb4, 0x64, 0x20, 0xf4, 0xf6, 0x0a, 0xcf, 0x86, 0x01, 0x6c, 0x7f, 0x23,
+ 0x4a, 0x51, 0x07, 0x99, 0x42, 0x28, 0x7a, 0xff, 0x18, 0x67, 0x52, 0x64,
+ 0xf2, 0x9a, 0x62, 0x30, 0xc3, 0x00, 0xde, 0x23, 0xe9, 0x11, 0x95, 0x7e,
+ 0xd1, 0x3d, 0x8d, 0xb4, 0x0e, 0x9f, 0x9e, 0xb1, 0x30, 0x03, 0xf0, 0x73,
+ 0xa8, 0x40, 0x48, 0x42, 0x7b, 0x60, 0xa0, 0xc4, 0xf2, 0x3b, 0x2d, 0x0a,
+ 0x0c, 0xb8, 0x19, 0xfb, 0xb4, 0xf8, 0xe0, 0x2a, 0xc7, 0xf1, 0xc0, 0xc6,
+ 0x86, 0x14, 0x60, 0x12, 0x0f, 0xc0, 0xde, 0x4a, 0x67, 0xec, 0xc7, 0xde,
+ 0x76, 0x21, 0x1a, 0x55, 0x7f, 0x86, 0xc3, 0x97, 0x98, 0xce, 0xf5, 0xcd,
+ 0xf0, 0xe7, 0x12, 0xd6, 0x93, 0xee, 0x1b, 0x9b, 0x61, 0xef, 0x05, 0x8c,
+ 0x45, 0x46, 0xd9, 0x64, 0x6f, 0xbe, 0x27, 0xaa, 0x67, 0x01, 0xcc, 0x71,
+ 0xb1, 0x60, 0xce, 0x21, 0xd8, 0x51, 0x17, 0x27, 0x0d, 0x90, 0x3d, 0x18,
+ 0x7c, 0x87, 0x15, 0x8e, 0x48, 0x4c, 0x6c, 0xc5, 0x72, 0xeb, 0xb7, 0x56,
+ 0xf5, 0x6b, 0x60, 0x8f, 0xc2, 0xfd, 0x3f, 0x46, 0x5c, 0x00, 0x91, 0x85,
+ 0x79, 0x45, 0x5b, 0x1c, 0x82, 0xc4, 0x87, 0x50, 0x79, 0xba, 0xcc, 0x1c,
+ 0x32, 0x7e, 0x2e, 0xb8, 0x2e, 0xc5, 0x4e, 0xd1, 0x9b, 0xdb, 0x66, 0x79,
+ 0x7c, 0xfe, 0xaf, 0x6a, 0x05
+ };
+ static const unsigned char q_data[] = {
+ 0xa8, 0xcd, 0xf4, 0x33, 0x7b, 0x13, 0x0a, 0x24, 0xc1, 0xde, 0x4a, 0x04,
+ 0x7b, 0x4b, 0x71, 0x51, 0x32, 0xe9, 0x47, 0x74, 0xbd, 0x0c, 0x21, 0x40,
+ 0x84, 0x12, 0x0a, 0x17, 0x73, 0xdb, 0x29, 0xc7
+ };
+ static const unsigned char g_data[] = {
+ 0x6c, 0xc6, 0xa4, 0x3e, 0x61, 0x84, 0xc1, 0xff, 0x6f, 0x4a, 0x1a, 0x6b,
+ 0xb0, 0x24, 0x4b, 0xd2, 0x92, 0x5b, 0x29, 0x5c, 0x61, 0xb8, 0xc9, 0x2b,
+ 0xd6, 0xf7, 0x59, 0xfd, 0xd8, 0x70, 0x66, 0x77, 0xfc, 0xc1, 0xa4, 0xd4,
+ 0xb0, 0x1e, 0xd5, 0xbf, 0x59, 0x98, 0xb3, 0x66, 0x8b, 0xf4, 0x2e, 0xe6,
+ 0x12, 0x3e, 0xcc, 0xf8, 0x02, 0xb8, 0xc6, 0xc3, 0x47, 0xd2, 0xf5, 0xaa,
+ 0x0c, 0x5f, 0x51, 0xf5, 0xd0, 0x4c, 0x55, 0x3d, 0x07, 0x73, 0xa6, 0x57,
+ 0xce, 0x5a, 0xad, 0x42, 0x0c, 0x13, 0x0f, 0xe2, 0x31, 0x25, 0x8e, 0x72,
+ 0x12, 0x73, 0x10, 0xdb, 0x7f, 0x79, 0xeb, 0x59, 0xfc, 0xfe, 0xf7, 0x0c,
+ 0x1a, 0x81, 0x53, 0x96, 0x22, 0xb8, 0xe7, 0x58, 0xd8, 0x67, 0x80, 0x60,
+ 0xad, 0x8b, 0x55, 0x1c, 0x91, 0xf0, 0x72, 0x9a, 0x7e, 0xad, 0x37, 0xf1,
+ 0x77, 0x18, 0x96, 0x8a, 0x68, 0x70, 0xfc, 0x71, 0xa9, 0xa2, 0xe8, 0x35,
+ 0x27, 0x78, 0xf2, 0xef, 0x59, 0x36, 0x6d, 0x7c, 0xb6, 0x98, 0xd8, 0x1e,
+ 0xfa, 0x25, 0x73, 0x97, 0x45, 0x58, 0xe3, 0xae, 0xbd, 0x52, 0x54, 0x05,
+ 0xd8, 0x26, 0x26, 0xba, 0xba, 0x05, 0xb5, 0xe9, 0xe5, 0x76, 0xae, 0x25,
+ 0xdd, 0xfc, 0x10, 0x89, 0x5a, 0xa9, 0xee, 0x59, 0xc5, 0x79, 0x8b, 0xeb,
+ 0x1e, 0x2c, 0x61, 0xab, 0x0d, 0xd1, 0x10, 0x04, 0x91, 0x32, 0x77, 0x4a,
+ 0xa6, 0x64, 0x53, 0xda, 0x4c, 0xd7, 0x3a, 0x29, 0xd4, 0xf3, 0x82, 0x25,
+ 0x1d, 0x6f, 0x4a, 0x7f, 0xd3, 0x08, 0x3b, 0x42, 0x30, 0x10, 0xd8, 0xd0,
+ 0x97, 0x3a, 0xeb, 0x92, 0x63, 0xec, 0x93, 0x2b, 0x6f, 0x32, 0xd8, 0xcd,
+ 0x80, 0xd3, 0xc0, 0x4c, 0x03, 0xd5, 0xca, 0xbc, 0x8f, 0xc7, 0x43, 0x53,
+ 0x64, 0x66, 0x1c, 0x82, 0x2d, 0xfb, 0xff, 0x39, 0xba, 0xd6, 0x42, 0x62,
+ 0x02, 0x6f, 0x96, 0x36
+ };
+ static const unsigned char seed_data[] = {
+ 0x64, 0x46, 0x07, 0x32, 0x8d, 0x70, 0x9c, 0xb3, 0x8a, 0x35, 0xde, 0x62,
+ 0x00, 0xf2, 0x6d, 0x52, 0x37, 0x4d, 0xb3, 0x84, 0xe1, 0x9d, 0x41, 0x04,
+ 0xda, 0x7b, 0xdc, 0x0d, 0x8b, 0x5e, 0xe0, 0x84
+ };
+ const int gindex = 1;
+ const int pcounter = 53;
+ /*
+ * The keypair was generated using
+ * openssl genpkey -paramfile dsa_params.pem --pkeyopt pcounter:53 \
+ * -pkeyopt gindex:1 \
+ * -pkeyopt hexseed:644607328d709cb38a35de6200f26d -text
+ */
+ static const unsigned char priv_data[] = {
+ 0x00, 0x8f, 0xc5, 0x9e, 0xd0, 0xf7, 0x2a, 0x0b, 0x66, 0xf1, 0x32, 0x73,
+ 0xae, 0xf6, 0xd9, 0xd4, 0xdb, 0x2d, 0x96, 0x55, 0x89, 0xff, 0xef, 0xa8,
+ 0x5f, 0x47, 0x8f, 0xca, 0x02, 0x8a, 0xe1, 0x35, 0x90
+ };
+ static const unsigned char pub_data[] = {
+ 0x44, 0x19, 0xc9, 0x46, 0x45, 0x57, 0xc1, 0xa9, 0xd8, 0x30, 0x99, 0x29,
+ 0x6a, 0x4b, 0x63, 0x71, 0x69, 0x96, 0x35, 0x17, 0xb2, 0x62, 0x9b, 0x80,
+ 0x0a, 0x95, 0x9d, 0x6a, 0xc0, 0x32, 0x0d, 0x07, 0x5f, 0x19, 0x44, 0x02,
+ 0xf1, 0xbd, 0xce, 0xdf, 0x10, 0xf8, 0x02, 0x5d, 0x7d, 0x98, 0x8a, 0x73,
+ 0x89, 0x00, 0xb6, 0x24, 0xd6, 0x33, 0xe7, 0xcf, 0x8b, 0x49, 0x2a, 0xaf,
+ 0x13, 0x1c, 0xb2, 0x52, 0x15, 0xfd, 0x9b, 0xd5, 0x40, 0x4a, 0x1a, 0xda,
+ 0x29, 0x4c, 0x92, 0x7e, 0x66, 0x06, 0xdb, 0x61, 0x86, 0xac, 0xb5, 0xda,
+ 0x3c, 0x7d, 0x73, 0x7e, 0x54, 0x32, 0x68, 0xa5, 0x02, 0xbc, 0x59, 0x47,
+ 0x84, 0xd3, 0x87, 0x71, 0x5f, 0xeb, 0x43, 0x45, 0x24, 0xd3, 0xec, 0x08,
+ 0x52, 0xc2, 0x89, 0x2d, 0x9c, 0x1a, 0xcc, 0x91, 0x65, 0x5d, 0xa3, 0xa1,
+ 0x35, 0x31, 0x10, 0x1c, 0x3a, 0xa8, 0x4d, 0x18, 0xd5, 0x06, 0xaf, 0xb2,
+ 0xec, 0x5c, 0x89, 0x9e, 0x90, 0x86, 0x10, 0x01, 0xeb, 0x51, 0xd5, 0x1b,
+ 0x9c, 0xcb, 0x66, 0x07, 0x3f, 0xc4, 0x6e, 0x0a, 0x1b, 0x73, 0xa0, 0x4b,
+ 0x5f, 0x4d, 0xab, 0x35, 0x28, 0xfa, 0xda, 0x3a, 0x0c, 0x08, 0xe8, 0xf3,
+ 0xef, 0x42, 0x67, 0xbc, 0x21, 0xf2, 0xc2, 0xb8, 0xff, 0x1a, 0x81, 0x05,
+ 0x68, 0x73, 0x62, 0xdf, 0xd7, 0xab, 0x0f, 0x22, 0x89, 0x57, 0x96, 0xd4,
+ 0x93, 0xaf, 0xa1, 0x21, 0xa3, 0x48, 0xe9, 0xf0, 0x97, 0x47, 0xa0, 0x27,
+ 0xba, 0x87, 0xb8, 0x15, 0x5f, 0xff, 0x2c, 0x50, 0x41, 0xf1, 0x7e, 0xc6,
+ 0x81, 0xc4, 0x51, 0xf1, 0xfd, 0xd6, 0x86, 0xf7, 0x69, 0x97, 0xf1, 0x49,
+ 0xc9, 0xf9, 0xf4, 0x9b, 0xf4, 0xe8, 0x85, 0xa7, 0xbd, 0x36, 0x55, 0x4a,
+ 0x3d, 0xe8, 0x65, 0x09, 0x7b, 0xb7, 0x12, 0x64, 0xd2, 0x0a, 0x53, 0x60,
+ 0x48, 0xd1, 0x8a, 0xbd
+ };
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(pub = BN_bin2bn(pub_data, sizeof(pub_data), NULL))
+ || !TEST_ptr(priv = BN_bin2bn(priv_data, sizeof(priv_data), NULL))
+ || !TEST_ptr(p = BN_bin2bn(p_data, sizeof(p_data), NULL))
+ || !TEST_ptr(q = BN_bin2bn(q_data, sizeof(q_data), NULL))
+ || !TEST_ptr(g = BN_bin2bn(g_data, sizeof(g_data), NULL))
+
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_Q, q))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_G, g))
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_string(bld,
+ OSSL_PKEY_PARAM_FFC_SEED,
+ seed_data,
+ sizeof(seed_data)))
+ || !TEST_true(OSSL_PARAM_BLD_push_int(bld, OSSL_PKEY_PARAM_FFC_GINDEX,
+ gindex))
+ || !TEST_true(OSSL_PARAM_BLD_push_int(bld,
+ OSSL_PKEY_PARAM_FFC_PCOUNTER,
+ pcounter))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY,
+ pub))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY,
+ priv))
+ || !TEST_ptr(fromdata_params = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(NULL, "DSA", NULL)))
+ goto err;
+
+ if (!TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1)
+ || !TEST_int_eq(EVP_PKEY_fromdata(ctx, &pk, EVP_PKEY_KEYPAIR,
+ fromdata_params), 1))
+ goto err;
+
+ while (dup_pk == NULL) {
+ ret = 0;
+ if (!TEST_int_eq(EVP_PKEY_get_bits(pk), 2048)
+ || !TEST_int_eq(EVP_PKEY_get_security_bits(pk), 112)
+ || !TEST_int_eq(EVP_PKEY_get_size(pk), 2 + 2 * (3 + sizeof(q_data)))
+ || !TEST_false(EVP_PKEY_missing_parameters(pk)))
+ goto err;
+
+ if (!TEST_false(EVP_PKEY_get_utf8_string_param(pk,
+ OSSL_PKEY_PARAM_GROUP_NAME,
+ name_out,
+ sizeof(name_out),
+ &len))
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_PUB_KEY,
+ &pub_out))
+ || !TEST_BN_eq(pub, pub_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_PRIV_KEY,
+ &priv_out))
+ || !TEST_BN_eq(priv, priv_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_FFC_P,
+ &p_out))
+ || !TEST_BN_eq(p, p_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_FFC_Q,
+ &q_out))
+ || !TEST_BN_eq(q, q_out)
+ || !TEST_true(EVP_PKEY_get_bn_param(pk, OSSL_PKEY_PARAM_FFC_G,
+ &g_out))
+ || !TEST_BN_eq(g, g_out)
+ || !TEST_false(EVP_PKEY_get_bn_param(pk,
+ OSSL_PKEY_PARAM_FFC_COFACTOR,
+ &j_out))
+ || !TEST_ptr_null(j_out)
+ || !TEST_true(EVP_PKEY_get_octet_string_param(pk,
+ OSSL_PKEY_PARAM_FFC_SEED,
+ seed_out,
+ sizeof(seed_out),
+ &len))
+ || !TEST_true(EVP_PKEY_get_int_param(pk,
+ OSSL_PKEY_PARAM_FFC_GINDEX,
+ &gindex_out))
+ || !TEST_int_eq(gindex, gindex_out)
+ || !TEST_true(EVP_PKEY_get_int_param(pk, OSSL_PKEY_PARAM_FFC_H,
+ &hindex_out))
+ || !TEST_int_eq(hindex_out, 0)
+ || !TEST_true(EVP_PKEY_get_int_param(pk,
+ OSSL_PKEY_PARAM_FFC_PCOUNTER,
+ &pcounter_out))
+ || !TEST_int_eq(pcounter, pcounter_out))
+ goto err;
+ BN_free(p);
+ p = NULL;
+ BN_free(q);
+ q = NULL;
+ BN_free(g);
+ g = NULL;
+ BN_free(j_out);
+ j_out = NULL;
+ BN_free(pub_out);
+ pub_out = NULL;
+ BN_free(priv_out);
+ priv_out = NULL;
+
+ if (!TEST_ptr(key_ctx = EVP_PKEY_CTX_new_from_pkey(NULL, pk, "")))
+ goto err;
+
+ if (!TEST_int_gt(EVP_PKEY_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_public_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_private_check(key_ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_pairwise_check(key_ctx), 0))
+ goto err;
+ EVP_PKEY_CTX_free(key_ctx);
+ key_ctx = NULL;
+
+ if (!TEST_ptr(copy_pk = EVP_PKEY_new())
+ || !TEST_true(EVP_PKEY_copy_parameters(copy_pk, pk)))
+ goto err;
+ EVP_PKEY_free(copy_pk);
+ copy_pk = NULL;
+
+ ret = test_print_key_using_pem("DSA", pk)
+ && test_print_key_using_encoder("DSA", pk);
+
+ if (!ret || !TEST_ptr(dup_pk = EVP_PKEY_dup(pk)))
+ goto err;
+ ret = ret && TEST_int_eq(EVP_PKEY_eq(pk, dup_pk), 1);
+ EVP_PKEY_free(pk);
+ pk = dup_pk;
+ if (!ret)
+ goto err;
+ }
+
+ err:
+ OSSL_PARAM_free(fromdata_params);
+ OSSL_PARAM_BLD_free(bld);
+ BN_free(p);
+ BN_free(q);
+ BN_free(g);
+ BN_free(pub);
+ BN_free(priv);
+ BN_free(p_out);
+ BN_free(q_out);
+ BN_free(g_out);
+ BN_free(pub_out);
+ BN_free(priv_out);
+ BN_free(j_out);
+ EVP_PKEY_free(pk);
+ EVP_PKEY_free(copy_pk);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_CTX_free(key_ctx);
+
+ return ret;
+}
+
+static int test_check_dsa(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *ctx = NULL;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(NULL, "DSA", NULL))
+ || !TEST_int_le(EVP_PKEY_check(ctx), 0)
+ || !TEST_int_le(EVP_PKEY_public_check(ctx), 0)
+ || !TEST_int_le(EVP_PKEY_private_check(ctx), 0)
+ || !TEST_int_le(EVP_PKEY_pairwise_check(ctx), 0))
+ goto err;
+
+ ret = 1;
+ err:
+ EVP_PKEY_CTX_free(ctx);
+
+ return ret;
+}
+#endif /* OPENSSL_NO_DSA */
+
+
+static OSSL_PARAM *do_construct_hkdf_params(char *digest, char *key,
+ size_t keylen, char *salt)
+{
+ OSSL_PARAM *params = OPENSSL_malloc(sizeof(OSSL_PARAM) * 5);
+ OSSL_PARAM *p = params;
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST, digest, 0);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SALT,
+ salt, strlen(salt));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY,
+ (unsigned char *)key, keylen);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_MODE,
+ "EXTRACT_ONLY", 0);
+ *p = OSSL_PARAM_construct_end();
+
+ return params;
+}
+
+/* Test that EVP_PKEY_CTX_dup() fails gracefully for a KDF */
+static int test_evp_pkey_ctx_dup_kdf_fail(void)
+{
+ int ret = 0;
+ size_t len = 0;
+ EVP_PKEY_CTX *pctx = NULL, *dctx = NULL;
+ OSSL_PARAM *params = NULL;
+
+ if (!TEST_ptr(params = do_construct_hkdf_params("sha256", "secret", 6,
+ "salt")))
+ goto err;
+ if (!TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(NULL, "HKDF", NULL)))
+ goto err;
+ if (!TEST_int_eq(EVP_PKEY_derive_init_ex(pctx, params), 1))
+ goto err;
+ if (!TEST_int_eq(EVP_PKEY_derive(pctx, NULL, &len), 1)
+ || !TEST_size_t_eq(len, SHA256_DIGEST_LENGTH))
+ goto err;
+ if (!TEST_ptr_null(dctx = EVP_PKEY_CTX_dup(pctx)))
+ goto err;
+ ret = 1;
+err:
+ OPENSSL_free(params);
+ EVP_PKEY_CTX_free(dctx);
+ EVP_PKEY_CTX_free(pctx);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(datadir = test_get_argument(0)))
+ return 0;
+
+ ADD_TEST(test_evp_pkey_ctx_dup_kdf_fail);
+ ADD_TEST(test_evp_pkey_get_bn_param_large);
+ ADD_TEST(test_fromdata_rsa);
+#ifndef OPENSSL_NO_DH
+ ADD_TEST(test_fromdata_dh_fips186_4);
+ ADD_TEST(test_fromdata_dh_named_group);
+#endif
+#ifndef OPENSSL_NO_DSA
+ ADD_TEST(test_check_dsa);
+ ADD_TEST(test_fromdata_dsa_fips186_4);
+#endif
+#ifndef OPENSSL_NO_EC
+ ADD_ALL_TESTS(test_fromdata_ecx, 4 * 3);
+ ADD_TEST(test_fromdata_ec);
+ ADD_TEST(test_ec_dup_no_operation);
+ ADD_TEST(test_ec_dup_keygen_operation);
+#endif
+ return 1;
+}
diff --git a/test/evp_test.c b/test/evp_test.c
new file mode 100644
index 000000000000..782841a69258
--- /dev/null
+++ b/test/evp_test.c
@@ -0,0 +1,4174 @@
+/*
+ * Copyright 2015-2024 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
+ */
+
+#define OPENSSL_SUPPRESS_DEPRECATED /* EVP_PKEY_new_CMAC_key */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <openssl/evp.h>
+#include <openssl/pem.h>
+#include <openssl/err.h>
+#include <openssl/provider.h>
+#include <openssl/x509v3.h>
+#include <openssl/pkcs12.h>
+#include <openssl/kdf.h>
+#include <openssl/params.h>
+#include <openssl/core_names.h>
+#include <openssl/fips_names.h>
+#include "internal/numbers.h"
+#include "internal/nelem.h"
+#include "crypto/evp.h"
+#include "testutil.h"
+
+typedef struct evp_test_buffer_st EVP_TEST_BUFFER;
+DEFINE_STACK_OF(EVP_TEST_BUFFER)
+
+#define AAD_NUM 4
+
+typedef struct evp_test_method_st EVP_TEST_METHOD;
+
+/* Structure holding test information */
+typedef struct evp_test_st {
+ STANZA s; /* Common test stanza */
+ char *name;
+ int skip; /* Current test should be skipped */
+ const EVP_TEST_METHOD *meth; /* method for this test */
+ const char *err, *aux_err; /* Error string for test */
+ char *expected_err; /* Expected error value of test */
+ char *reason; /* Expected error reason string */
+ void *data; /* test specific data */
+} EVP_TEST;
+
+/* Test method structure */
+struct evp_test_method_st {
+ /* Name of test as it appears in file */
+ const char *name;
+ /* Initialise test for "alg" */
+ int (*init) (EVP_TEST * t, const char *alg);
+ /* Clean up method */
+ void (*cleanup) (EVP_TEST * t);
+ /* Test specific name value pair processing */
+ int (*parse) (EVP_TEST * t, const char *name, const char *value);
+ /* Run the test itself */
+ int (*run_test) (EVP_TEST * t);
+};
+
+/* Linked list of named keys. */
+typedef struct key_list_st {
+ char *name;
+ EVP_PKEY *key;
+ struct key_list_st *next;
+} KEY_LIST;
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_CONFIG_FILE,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+static OSSL_PROVIDER *prov_null = NULL;
+static OSSL_LIB_CTX *libctx = NULL;
+
+/* List of public and private keys */
+static KEY_LIST *private_keys;
+static KEY_LIST *public_keys;
+
+static int find_key(EVP_PKEY **ppk, const char *name, KEY_LIST *lst);
+static int parse_bin(const char *value, unsigned char **buf, size_t *buflen);
+static int is_digest_disabled(const char *name);
+static int is_pkey_disabled(const char *name);
+static int is_mac_disabled(const char *name);
+static int is_cipher_disabled(const char *name);
+static int is_kdf_disabled(const char *name);
+
+/*
+ * Compare two memory regions for equality, returning zero if they differ.
+ * However, if there is expected to be an error and the actual error
+ * matches then the memory is expected to be different so handle this
+ * case without producing unnecessary test framework output.
+ */
+static int memory_err_compare(EVP_TEST *t, const char *err,
+ const void *expected, size_t expected_len,
+ const void *got, size_t got_len)
+{
+ int r;
+
+ if (t->expected_err != NULL && strcmp(t->expected_err, err) == 0)
+ r = !TEST_mem_ne(expected, expected_len, got, got_len);
+ else
+ r = TEST_mem_eq(expected, expected_len, got, got_len);
+ if (!r)
+ t->err = err;
+ return r;
+}
+
+/*
+ * Structure used to hold a list of blocks of memory to test
+ * calls to "update" like functions.
+ */
+struct evp_test_buffer_st {
+ unsigned char *buf;
+ size_t buflen;
+ size_t count;
+ int count_set;
+};
+
+static void evp_test_buffer_free(EVP_TEST_BUFFER *db)
+{
+ if (db != NULL) {
+ OPENSSL_free(db->buf);
+ OPENSSL_free(db);
+ }
+}
+
+/* append buffer to a list */
+static int evp_test_buffer_append(const char *value,
+ STACK_OF(EVP_TEST_BUFFER) **sk)
+{
+ EVP_TEST_BUFFER *db = NULL;
+
+ if (!TEST_ptr(db = OPENSSL_malloc(sizeof(*db))))
+ goto err;
+
+ if (!parse_bin(value, &db->buf, &db->buflen))
+ goto err;
+ db->count = 1;
+ db->count_set = 0;
+
+ if (*sk == NULL && !TEST_ptr(*sk = sk_EVP_TEST_BUFFER_new_null()))
+ goto err;
+ if (!sk_EVP_TEST_BUFFER_push(*sk, db))
+ goto err;
+
+ return 1;
+
+err:
+ evp_test_buffer_free(db);
+ return 0;
+}
+
+/* replace last buffer in list with copies of itself */
+static int evp_test_buffer_ncopy(const char *value,
+ STACK_OF(EVP_TEST_BUFFER) *sk)
+{
+ EVP_TEST_BUFFER *db;
+ unsigned char *tbuf, *p;
+ size_t tbuflen;
+ int ncopy = atoi(value);
+ int i;
+
+ if (ncopy <= 0)
+ return 0;
+ if (sk == NULL || sk_EVP_TEST_BUFFER_num(sk) == 0)
+ return 0;
+ db = sk_EVP_TEST_BUFFER_value(sk, sk_EVP_TEST_BUFFER_num(sk) - 1);
+
+ tbuflen = db->buflen * ncopy;
+ if (!TEST_ptr(tbuf = OPENSSL_malloc(tbuflen)))
+ return 0;
+ for (i = 0, p = tbuf; i < ncopy; i++, p += db->buflen)
+ memcpy(p, db->buf, db->buflen);
+
+ OPENSSL_free(db->buf);
+ db->buf = tbuf;
+ db->buflen = tbuflen;
+ return 1;
+}
+
+/* set repeat count for last buffer in list */
+static int evp_test_buffer_set_count(const char *value,
+ STACK_OF(EVP_TEST_BUFFER) *sk)
+{
+ EVP_TEST_BUFFER *db;
+ int count = atoi(value);
+
+ if (count <= 0)
+ return 0;
+
+ if (sk == NULL || sk_EVP_TEST_BUFFER_num(sk) == 0)
+ return 0;
+
+ db = sk_EVP_TEST_BUFFER_value(sk, sk_EVP_TEST_BUFFER_num(sk) - 1);
+ if (db->count_set != 0)
+ return 0;
+
+ db->count = (size_t)count;
+ db->count_set = 1;
+ return 1;
+}
+
+/* call "fn" with each element of the list in turn */
+static int evp_test_buffer_do(STACK_OF(EVP_TEST_BUFFER) *sk,
+ int (*fn)(void *ctx,
+ const unsigned char *buf,
+ size_t buflen),
+ void *ctx)
+{
+ int i;
+
+ for (i = 0; i < sk_EVP_TEST_BUFFER_num(sk); i++) {
+ EVP_TEST_BUFFER *tb = sk_EVP_TEST_BUFFER_value(sk, i);
+ size_t j;
+
+ for (j = 0; j < tb->count; j++) {
+ if (fn(ctx, tb->buf, tb->buflen) <= 0)
+ return 0;
+ }
+ }
+ return 1;
+}
+
+/*
+ * Unescape some sequences in string literals (only \n for now).
+ * Return an allocated buffer, set |out_len|. If |input_len|
+ * is zero, get an empty buffer but set length to zero.
+ */
+static unsigned char* unescape(const char *input, size_t input_len,
+ size_t *out_len)
+{
+ unsigned char *ret, *p;
+ size_t i;
+
+ if (input_len == 0) {
+ *out_len = 0;
+ return OPENSSL_zalloc(1);
+ }
+
+ /* Escaping is non-expanding; over-allocate original size for simplicity. */
+ if (!TEST_ptr(ret = p = OPENSSL_malloc(input_len)))
+ return NULL;
+
+ for (i = 0; i < input_len; i++) {
+ if (*input == '\\') {
+ if (i == input_len - 1 || *++input != 'n') {
+ TEST_error("Bad escape sequence in file");
+ goto err;
+ }
+ *p++ = '\n';
+ i++;
+ input++;
+ } else {
+ *p++ = *input++;
+ }
+ }
+
+ *out_len = p - ret;
+ return ret;
+
+ err:
+ OPENSSL_free(ret);
+ return NULL;
+}
+
+/*
+ * For a hex string "value" convert to a binary allocated buffer.
+ * Return 1 on success or 0 on failure.
+ */
+static int parse_bin(const char *value, unsigned char **buf, size_t *buflen)
+{
+ long len;
+
+ /* Check for NULL literal */
+ if (strcmp(value, "NULL") == 0) {
+ *buf = NULL;
+ *buflen = 0;
+ return 1;
+ }
+
+ /* Check for empty value */
+ if (*value == '\0') {
+ /*
+ * Don't return NULL for zero length buffer. This is needed for
+ * some tests with empty keys: HMAC_Init_ex() expects a non-NULL key
+ * buffer even if the key length is 0, in order to detect key reset.
+ */
+ *buf = OPENSSL_malloc(1);
+ if (*buf == NULL)
+ return 0;
+ **buf = 0;
+ *buflen = 0;
+ return 1;
+ }
+
+ /* Check for string literal */
+ if (value[0] == '"') {
+ size_t vlen = strlen(++value);
+
+ if (vlen == 0 || value[vlen - 1] != '"')
+ return 0;
+ vlen--;
+ *buf = unescape(value, vlen, buflen);
+ return *buf == NULL ? 0 : 1;
+ }
+
+ /* Otherwise assume as hex literal and convert it to binary buffer */
+ if (!TEST_ptr(*buf = OPENSSL_hexstr2buf(value, &len))) {
+ TEST_info("Can't convert %s", value);
+ TEST_openssl_errors();
+ return -1;
+ }
+ /* Size of input buffer means we'll never overflow */
+ *buflen = len;
+ return 1;
+}
+
+/**
+ ** MESSAGE DIGEST TESTS
+ **/
+
+typedef struct digest_data_st {
+ /* Digest this test is for */
+ const EVP_MD *digest;
+ EVP_MD *fetched_digest;
+ /* Input to digest */
+ STACK_OF(EVP_TEST_BUFFER) *input;
+ /* Expected output */
+ unsigned char *output;
+ size_t output_len;
+ /* Padding type */
+ int pad_type;
+} DIGEST_DATA;
+
+static int digest_test_init(EVP_TEST *t, const char *alg)
+{
+ DIGEST_DATA *mdat;
+ const EVP_MD *digest;
+ EVP_MD *fetched_digest;
+
+ if (is_digest_disabled(alg)) {
+ TEST_info("skipping, '%s' is disabled", alg);
+ t->skip = 1;
+ return 1;
+ }
+
+ if ((digest = fetched_digest = EVP_MD_fetch(libctx, alg, NULL)) == NULL
+ && (digest = EVP_get_digestbyname(alg)) == NULL)
+ return 0;
+ if (!TEST_ptr(mdat = OPENSSL_zalloc(sizeof(*mdat))))
+ return 0;
+ t->data = mdat;
+ mdat->digest = digest;
+ mdat->fetched_digest = fetched_digest;
+ mdat->pad_type = 0;
+ if (fetched_digest != NULL)
+ TEST_info("%s is fetched", alg);
+ return 1;
+}
+
+static void digest_test_cleanup(EVP_TEST *t)
+{
+ DIGEST_DATA *mdat = t->data;
+
+ sk_EVP_TEST_BUFFER_pop_free(mdat->input, evp_test_buffer_free);
+ OPENSSL_free(mdat->output);
+ EVP_MD_free(mdat->fetched_digest);
+}
+
+static int digest_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ DIGEST_DATA *mdata = t->data;
+
+ if (strcmp(keyword, "Input") == 0)
+ return evp_test_buffer_append(value, &mdata->input);
+ if (strcmp(keyword, "Output") == 0)
+ return parse_bin(value, &mdata->output, &mdata->output_len);
+ if (strcmp(keyword, "Count") == 0)
+ return evp_test_buffer_set_count(value, mdata->input);
+ if (strcmp(keyword, "Ncopy") == 0)
+ return evp_test_buffer_ncopy(value, mdata->input);
+ if (strcmp(keyword, "Padding") == 0)
+ return (mdata->pad_type = atoi(value)) > 0;
+ return 0;
+}
+
+static int digest_update_fn(void *ctx, const unsigned char *buf, size_t buflen)
+{
+ return EVP_DigestUpdate(ctx, buf, buflen);
+}
+
+static int digest_test_run(EVP_TEST *t)
+{
+ DIGEST_DATA *expected = t->data;
+ EVP_TEST_BUFFER *inbuf;
+ EVP_MD_CTX *mctx;
+ unsigned char *got = NULL;
+ unsigned int got_len;
+ size_t size = 0;
+ int xof = 0;
+ OSSL_PARAM params[2];
+
+ t->err = "TEST_FAILURE";
+ if (!TEST_ptr(mctx = EVP_MD_CTX_new()))
+ goto err;
+
+ got = OPENSSL_malloc(expected->output_len > EVP_MAX_MD_SIZE ?
+ expected->output_len : EVP_MAX_MD_SIZE);
+ if (!TEST_ptr(got))
+ goto err;
+
+ if (!EVP_DigestInit_ex(mctx, expected->digest, NULL)) {
+ t->err = "DIGESTINIT_ERROR";
+ goto err;
+ }
+ if (expected->pad_type > 0) {
+ params[0] = OSSL_PARAM_construct_int(OSSL_DIGEST_PARAM_PAD_TYPE,
+ &expected->pad_type);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!TEST_int_gt(EVP_MD_CTX_set_params(mctx, params), 0)) {
+ t->err = "PARAMS_ERROR";
+ goto err;
+ }
+ }
+ if (!evp_test_buffer_do(expected->input, digest_update_fn, mctx)) {
+ t->err = "DIGESTUPDATE_ERROR";
+ goto err;
+ }
+
+ xof = (EVP_MD_get_flags(expected->digest) & EVP_MD_FLAG_XOF) != 0;
+ if (xof) {
+ EVP_MD_CTX *mctx_cpy;
+ char dont[] = "touch";
+
+ if (!TEST_ptr(mctx_cpy = EVP_MD_CTX_new())) {
+ goto err;
+ }
+ if (!EVP_MD_CTX_copy(mctx_cpy, mctx)) {
+ EVP_MD_CTX_free(mctx_cpy);
+ goto err;
+ }
+ if (!EVP_DigestFinalXOF(mctx_cpy, (unsigned char *)dont, 0)) {
+ EVP_MD_CTX_free(mctx_cpy);
+ t->err = "DIGESTFINALXOF_ERROR";
+ goto err;
+ }
+ if (!TEST_str_eq(dont, "touch")) {
+ EVP_MD_CTX_free(mctx_cpy);
+ t->err = "DIGESTFINALXOF_ERROR";
+ goto err;
+ }
+ EVP_MD_CTX_free(mctx_cpy);
+
+ got_len = expected->output_len;
+ if (!EVP_DigestFinalXOF(mctx, got, got_len)) {
+ t->err = "DIGESTFINALXOF_ERROR";
+ goto err;
+ }
+ } else {
+ if (!EVP_DigestFinal(mctx, got, &got_len)) {
+ t->err = "DIGESTFINAL_ERROR";
+ goto err;
+ }
+ }
+ if (!TEST_int_eq(expected->output_len, got_len)) {
+ t->err = "DIGEST_LENGTH_MISMATCH";
+ goto err;
+ }
+ if (!memory_err_compare(t, "DIGEST_MISMATCH",
+ expected->output, expected->output_len,
+ got, got_len))
+ goto err;
+
+ t->err = NULL;
+
+ /* Test the EVP_Q_digest interface as well */
+ if (sk_EVP_TEST_BUFFER_num(expected->input) == 1
+ && !xof
+ /* This should never fail but we need the returned pointer now */
+ && !TEST_ptr(inbuf = sk_EVP_TEST_BUFFER_value(expected->input, 0))
+ && !inbuf->count_set) {
+ OPENSSL_cleanse(got, got_len);
+ if (!TEST_true(EVP_Q_digest(libctx,
+ EVP_MD_get0_name(expected->fetched_digest),
+ NULL, inbuf->buf, inbuf->buflen,
+ got, &size))
+ || !TEST_mem_eq(got, size,
+ expected->output, expected->output_len)) {
+ t->err = "EVP_Q_digest failed";
+ goto err;
+ }
+ }
+
+ err:
+ OPENSSL_free(got);
+ EVP_MD_CTX_free(mctx);
+ return 1;
+}
+
+static const EVP_TEST_METHOD digest_test_method = {
+ "Digest",
+ digest_test_init,
+ digest_test_cleanup,
+ digest_test_parse,
+ digest_test_run
+};
+
+/**
+*** CIPHER TESTS
+**/
+
+typedef struct cipher_data_st {
+ const EVP_CIPHER *cipher;
+ EVP_CIPHER *fetched_cipher;
+ int enc;
+ /* EVP_CIPH_GCM_MODE, EVP_CIPH_CCM_MODE or EVP_CIPH_OCB_MODE if AEAD */
+ int aead;
+ unsigned char *key;
+ size_t key_len;
+ size_t key_bits; /* Used by RC2 */
+ unsigned char *iv;
+ unsigned char *next_iv; /* Expected IV state after operation */
+ unsigned int rounds;
+ size_t iv_len;
+ unsigned char *plaintext;
+ size_t plaintext_len;
+ unsigned char *ciphertext;
+ size_t ciphertext_len;
+ /* AEAD ciphers only */
+ unsigned char *aad[AAD_NUM];
+ size_t aad_len[AAD_NUM];
+ int tls_aad;
+ int tls_version;
+ unsigned char *tag;
+ const char *cts_mode;
+ size_t tag_len;
+ int tag_late;
+ unsigned char *mac_key;
+ size_t mac_key_len;
+} CIPHER_DATA;
+
+static int cipher_test_init(EVP_TEST *t, const char *alg)
+{
+ const EVP_CIPHER *cipher;
+ EVP_CIPHER *fetched_cipher;
+ CIPHER_DATA *cdat;
+ int m;
+
+ if (is_cipher_disabled(alg)) {
+ t->skip = 1;
+ TEST_info("skipping, '%s' is disabled", alg);
+ return 1;
+ }
+
+ ERR_set_mark();
+ if ((cipher = fetched_cipher = EVP_CIPHER_fetch(libctx, alg, NULL)) == NULL
+ && (cipher = EVP_get_cipherbyname(alg)) == NULL) {
+ /* a stitched cipher might not be available */
+ if (strstr(alg, "HMAC") != NULL) {
+ ERR_pop_to_mark();
+ t->skip = 1;
+ TEST_info("skipping, '%s' is not available", alg);
+ return 1;
+ }
+ ERR_clear_last_mark();
+ return 0;
+ }
+ ERR_clear_last_mark();
+
+ if (!TEST_ptr(cdat = OPENSSL_zalloc(sizeof(*cdat))))
+ return 0;
+
+ cdat->cipher = cipher;
+ cdat->fetched_cipher = fetched_cipher;
+ cdat->enc = -1;
+ m = EVP_CIPHER_get_mode(cipher);
+ if (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER)
+ cdat->aead = m != 0 ? m : -1;
+ else
+ cdat->aead = 0;
+
+ t->data = cdat;
+ if (fetched_cipher != NULL)
+ TEST_info("%s is fetched", alg);
+ return 1;
+}
+
+static void cipher_test_cleanup(EVP_TEST *t)
+{
+ int i;
+ CIPHER_DATA *cdat = t->data;
+
+ OPENSSL_free(cdat->key);
+ OPENSSL_free(cdat->iv);
+ OPENSSL_free(cdat->next_iv);
+ OPENSSL_free(cdat->ciphertext);
+ OPENSSL_free(cdat->plaintext);
+ for (i = 0; i < AAD_NUM; i++)
+ OPENSSL_free(cdat->aad[i]);
+ OPENSSL_free(cdat->tag);
+ OPENSSL_free(cdat->mac_key);
+ EVP_CIPHER_free(cdat->fetched_cipher);
+}
+
+static int cipher_test_parse(EVP_TEST *t, const char *keyword,
+ const char *value)
+{
+ CIPHER_DATA *cdat = t->data;
+ int i;
+
+ if (strcmp(keyword, "Key") == 0)
+ return parse_bin(value, &cdat->key, &cdat->key_len);
+ if (strcmp(keyword, "Rounds") == 0) {
+ i = atoi(value);
+ if (i < 0)
+ return -1;
+ cdat->rounds = (unsigned int)i;
+ return 1;
+ }
+ if (strcmp(keyword, "IV") == 0)
+ return parse_bin(value, &cdat->iv, &cdat->iv_len);
+ if (strcmp(keyword, "NextIV") == 0)
+ return parse_bin(value, &cdat->next_iv, &cdat->iv_len);
+ if (strcmp(keyword, "Plaintext") == 0)
+ return parse_bin(value, &cdat->plaintext, &cdat->plaintext_len);
+ if (strcmp(keyword, "Ciphertext") == 0)
+ return parse_bin(value, &cdat->ciphertext, &cdat->ciphertext_len);
+ if (strcmp(keyword, "KeyBits") == 0) {
+ i = atoi(value);
+ if (i < 0)
+ return -1;
+ cdat->key_bits = (size_t)i;
+ return 1;
+ }
+ if (cdat->aead) {
+ int tls_aad = 0;
+
+ if (strcmp(keyword, "TLSAAD") == 0)
+ cdat->tls_aad = tls_aad = 1;
+ if (strcmp(keyword, "AAD") == 0 || tls_aad) {
+ for (i = 0; i < AAD_NUM; i++) {
+ if (cdat->aad[i] == NULL)
+ return parse_bin(value, &cdat->aad[i], &cdat->aad_len[i]);
+ }
+ return -1;
+ }
+ if (strcmp(keyword, "Tag") == 0)
+ return parse_bin(value, &cdat->tag, &cdat->tag_len);
+ if (strcmp(keyword, "SetTagLate") == 0) {
+ if (strcmp(value, "TRUE") == 0)
+ cdat->tag_late = 1;
+ else if (strcmp(value, "FALSE") == 0)
+ cdat->tag_late = 0;
+ else
+ return -1;
+ return 1;
+ }
+ if (strcmp(keyword, "MACKey") == 0)
+ return parse_bin(value, &cdat->mac_key, &cdat->mac_key_len);
+ if (strcmp(keyword, "TLSVersion") == 0) {
+ char *endptr;
+
+ cdat->tls_version = (int)strtol(value, &endptr, 0);
+ return value[0] != '\0' && endptr[0] == '\0';
+ }
+ }
+
+ if (strcmp(keyword, "Operation") == 0) {
+ if (strcmp(value, "ENCRYPT") == 0)
+ cdat->enc = 1;
+ else if (strcmp(value, "DECRYPT") == 0)
+ cdat->enc = 0;
+ else
+ return -1;
+ return 1;
+ }
+ if (strcmp(keyword, "CTSMode") == 0) {
+ cdat->cts_mode = value;
+ return 1;
+ }
+ return 0;
+}
+
+static int cipher_test_enc(EVP_TEST *t, int enc,
+ size_t out_misalign, size_t inp_misalign, int frag)
+{
+ CIPHER_DATA *expected = t->data;
+ unsigned char *in, *expected_out, *tmp = NULL;
+ size_t in_len, out_len, donelen = 0;
+ int ok = 0, tmplen, chunklen, tmpflen, i;
+ EVP_CIPHER_CTX *ctx_base = NULL;
+ EVP_CIPHER_CTX *ctx = NULL;
+ int fips_dupctx_supported = (fips_provider_version_gt(libctx, 3, 0, 12)
+ && fips_provider_version_lt(libctx, 3, 1, 0))
+ || fips_provider_version_ge(libctx, 3, 1, 3);
+
+ t->err = "TEST_FAILURE";
+ if (!TEST_ptr(ctx_base = EVP_CIPHER_CTX_new()))
+ goto err;
+ if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new()))
+ goto err;
+ EVP_CIPHER_CTX_set_flags(ctx_base, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
+ if (enc) {
+ in = expected->plaintext;
+ in_len = expected->plaintext_len;
+ expected_out = expected->ciphertext;
+ out_len = expected->ciphertext_len;
+ } else {
+ in = expected->ciphertext;
+ in_len = expected->ciphertext_len;
+ expected_out = expected->plaintext;
+ out_len = expected->plaintext_len;
+ }
+ if (inp_misalign == (size_t)-1) {
+ /* Exercise in-place encryption */
+ tmp = OPENSSL_malloc(out_misalign + in_len + 2 * EVP_MAX_BLOCK_LENGTH);
+ if (!tmp)
+ goto err;
+ in = memcpy(tmp + out_misalign, in, in_len);
+ } else {
+ inp_misalign += 16 - ((out_misalign + in_len) & 15);
+ /*
+ * 'tmp' will store both output and copy of input. We make the copy
+ * of input to specifically aligned part of 'tmp'. So we just
+ * figured out how much padding would ensure the required alignment,
+ * now we allocate extended buffer and finally copy the input just
+ * past inp_misalign in expression below. Output will be written
+ * past out_misalign...
+ */
+ tmp = OPENSSL_malloc(out_misalign + in_len + 2 * EVP_MAX_BLOCK_LENGTH +
+ inp_misalign + in_len);
+ if (!tmp)
+ goto err;
+ in = memcpy(tmp + out_misalign + in_len + 2 * EVP_MAX_BLOCK_LENGTH +
+ inp_misalign, in, in_len);
+ }
+ if (!EVP_CipherInit_ex(ctx_base, expected->cipher, NULL, NULL, NULL, enc)) {
+ t->err = "CIPHERINIT_ERROR";
+ goto err;
+ }
+ if (expected->cts_mode != NULL) {
+ OSSL_PARAM params[2];
+
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_CIPHER_PARAM_CTS_MODE,
+ (char *)expected->cts_mode,
+ 0);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!EVP_CIPHER_CTX_set_params(ctx_base, params)) {
+ t->err = "INVALID_CTS_MODE";
+ goto err;
+ }
+ }
+ if (expected->iv) {
+ if (expected->aead) {
+ if (EVP_CIPHER_CTX_ctrl(ctx_base, EVP_CTRL_AEAD_SET_IVLEN,
+ expected->iv_len, 0) <= 0) {
+ t->err = "INVALID_IV_LENGTH";
+ goto err;
+ }
+ } else if (expected->iv_len != (size_t)EVP_CIPHER_CTX_get_iv_length(ctx_base)) {
+ t->err = "INVALID_IV_LENGTH";
+ goto err;
+ }
+ }
+ if (expected->aead && !expected->tls_aad) {
+ unsigned char *tag;
+ /*
+ * If encrypting or OCB just set tag length initially, otherwise
+ * set tag length and value.
+ */
+ if (enc || expected->aead == EVP_CIPH_OCB_MODE || expected->tag_late) {
+ t->err = "TAG_LENGTH_SET_ERROR";
+ tag = NULL;
+ } else {
+ t->err = "TAG_SET_ERROR";
+ tag = expected->tag;
+ }
+ if (tag || expected->aead != EVP_CIPH_GCM_MODE) {
+ if (EVP_CIPHER_CTX_ctrl(ctx_base, EVP_CTRL_AEAD_SET_TAG,
+ expected->tag_len, tag) <= 0)
+ goto err;
+ }
+ }
+
+ if (expected->rounds > 0) {
+ int rounds = (int)expected->rounds;
+
+ if (EVP_CIPHER_CTX_ctrl(ctx_base, EVP_CTRL_SET_RC5_ROUNDS, rounds, NULL) <= 0) {
+ t->err = "INVALID_ROUNDS";
+ goto err;
+ }
+ }
+
+ if (!EVP_CIPHER_CTX_set_key_length(ctx_base, expected->key_len)) {
+ t->err = "INVALID_KEY_LENGTH";
+ goto err;
+ }
+ if (expected->key_bits > 0) {
+ int bits = (int)expected->key_bits;
+
+ if (EVP_CIPHER_CTX_ctrl(ctx_base, EVP_CTRL_SET_RC2_KEY_BITS, bits, NULL) <= 0) {
+ t->err = "INVALID KEY BITS";
+ goto err;
+ }
+ }
+ if (!EVP_CipherInit_ex(ctx_base, NULL, NULL, expected->key, expected->iv, -1)) {
+ t->err = "KEY_SET_ERROR";
+ goto err;
+ }
+
+ /* Check that we get the same IV back */
+ if (expected->iv != NULL) {
+ /* Some (e.g., GCM) tests use IVs longer than EVP_MAX_IV_LENGTH. */
+ unsigned char iv[128];
+ if (!TEST_true(EVP_CIPHER_CTX_get_updated_iv(ctx_base, iv, sizeof(iv)))
+ || ((EVP_CIPHER_get_flags(expected->cipher) & EVP_CIPH_CUSTOM_IV) == 0
+ && !TEST_mem_eq(expected->iv, expected->iv_len, iv,
+ expected->iv_len))) {
+ t->err = "INVALID_IV";
+ goto err;
+ }
+ }
+
+ /* Test that the cipher dup functions correctly if it is supported */
+ ERR_set_mark();
+ if (!EVP_CIPHER_CTX_copy(ctx, ctx_base)) {
+ if (fips_dupctx_supported) {
+ TEST_info("Doing a copy of Cipher %s Fails!\n",
+ EVP_CIPHER_get0_name(expected->cipher));
+ ERR_print_errors_fp(stderr);
+ goto err;
+ } else {
+ TEST_info("Allowing copy fail as an old fips provider is in use.");
+ }
+ EVP_CIPHER_CTX_free(ctx);
+ ctx = ctx_base;
+ } else {
+ EVP_CIPHER_CTX_free(ctx_base);
+ ctx_base = NULL;
+ }
+ ERR_pop_to_mark();
+
+ if (expected->mac_key != NULL
+ && EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_MAC_KEY,
+ (int)expected->mac_key_len,
+ (void *)expected->mac_key) <= 0) {
+ t->err = "SET_MAC_KEY_ERROR";
+ goto err;
+ }
+
+ if (expected->tls_version) {
+ OSSL_PARAM params[2];
+
+ params[0] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_TLS_VERSION,
+ &expected->tls_version);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!EVP_CIPHER_CTX_set_params(ctx, params)) {
+ t->err = "SET_TLS_VERSION_ERROR";
+ goto err;
+ }
+ }
+
+ if (expected->aead == EVP_CIPH_CCM_MODE) {
+ if (!EVP_CipherUpdate(ctx, NULL, &tmplen, NULL, out_len)) {
+ t->err = "CCM_PLAINTEXT_LENGTH_SET_ERROR";
+ goto err;
+ }
+ }
+ if (expected->aad[0] != NULL && !expected->tls_aad) {
+ t->err = "AAD_SET_ERROR";
+ if (!frag) {
+ for (i = 0; expected->aad[i] != NULL; i++) {
+ if (!EVP_CipherUpdate(ctx, NULL, &chunklen, expected->aad[i],
+ expected->aad_len[i]))
+ goto err;
+ }
+ } else {
+ /*
+ * Supply the AAD in chunks less than the block size where possible
+ */
+ for (i = 0; expected->aad[i] != NULL; i++) {
+ if (expected->aad_len[i] > 0) {
+ if (!EVP_CipherUpdate(ctx, NULL, &chunklen, expected->aad[i], 1))
+ goto err;
+ donelen++;
+ }
+ if (expected->aad_len[i] > 2) {
+ if (!EVP_CipherUpdate(ctx, NULL, &chunklen,
+ expected->aad[i] + donelen,
+ expected->aad_len[i] - 2))
+ goto err;
+ donelen += expected->aad_len[i] - 2;
+ }
+ if (expected->aad_len[i] > 1
+ && !EVP_CipherUpdate(ctx, NULL, &chunklen,
+ expected->aad[i] + donelen, 1))
+ goto err;
+ }
+ }
+ }
+
+ if (expected->tls_aad) {
+ OSSL_PARAM params[2];
+ char *tls_aad;
+
+ /* duplicate the aad as the implementation might modify it */
+ if ((tls_aad = OPENSSL_memdup(expected->aad[0],
+ expected->aad_len[0])) == NULL)
+ goto err;
+ params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD,
+ tls_aad,
+ expected->aad_len[0]);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!EVP_CIPHER_CTX_set_params(ctx, params)) {
+ OPENSSL_free(tls_aad);
+ t->err = "TLS1_AAD_ERROR";
+ goto err;
+ }
+ OPENSSL_free(tls_aad);
+ } else if (!enc && (expected->aead == EVP_CIPH_OCB_MODE
+ || expected->tag_late)) {
+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG,
+ expected->tag_len, expected->tag) <= 0) {
+ t->err = "TAG_SET_ERROR";
+ goto err;
+ }
+ }
+
+ EVP_CIPHER_CTX_set_padding(ctx, 0);
+ t->err = "CIPHERUPDATE_ERROR";
+ tmplen = 0;
+ if (!frag) {
+ /* We supply the data all in one go */
+ if (!EVP_CipherUpdate(ctx, tmp + out_misalign, &tmplen, in, in_len))
+ goto err;
+ } else {
+ /* Supply the data in chunks less than the block size where possible */
+ if (in_len > 0) {
+ if (!EVP_CipherUpdate(ctx, tmp + out_misalign, &chunklen, in, 1))
+ goto err;
+ tmplen += chunklen;
+ in++;
+ in_len--;
+ }
+ if (in_len > 1) {
+ if (!EVP_CipherUpdate(ctx, tmp + out_misalign + tmplen, &chunklen,
+ in, in_len - 1))
+ goto err;
+ tmplen += chunklen;
+ in += in_len - 1;
+ in_len = 1;
+ }
+ if (in_len > 0 ) {
+ if (!EVP_CipherUpdate(ctx, tmp + out_misalign + tmplen, &chunklen,
+ in, 1))
+ goto err;
+ tmplen += chunklen;
+ }
+ }
+ if (!EVP_CipherFinal_ex(ctx, tmp + out_misalign + tmplen, &tmpflen)) {
+ t->err = "CIPHERFINAL_ERROR";
+ goto err;
+ }
+ if (!enc && expected->tls_aad) {
+ if (expected->tls_version >= TLS1_1_VERSION
+ && (EVP_CIPHER_is_a(expected->cipher, "AES-128-CBC-HMAC-SHA1")
+ || EVP_CIPHER_is_a(expected->cipher, "AES-256-CBC-HMAC-SHA1"))) {
+ tmplen -= expected->iv_len;
+ expected_out += expected->iv_len;
+ out_misalign += expected->iv_len;
+ }
+ if ((int)out_len > tmplen + tmpflen)
+ out_len = tmplen + tmpflen;
+ }
+ if (!memory_err_compare(t, "VALUE_MISMATCH", expected_out, out_len,
+ tmp + out_misalign, tmplen + tmpflen))
+ goto err;
+ if (enc && expected->aead && !expected->tls_aad) {
+ unsigned char rtag[16];
+
+ if (!TEST_size_t_le(expected->tag_len, sizeof(rtag))) {
+ t->err = "TAG_LENGTH_INTERNAL_ERROR";
+ goto err;
+ }
+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG,
+ expected->tag_len, rtag) <= 0) {
+ t->err = "TAG_RETRIEVE_ERROR";
+ goto err;
+ }
+ if (!memory_err_compare(t, "TAG_VALUE_MISMATCH",
+ expected->tag, expected->tag_len,
+ rtag, expected->tag_len))
+ goto err;
+ }
+ /* Check the updated IV */
+ if (expected->next_iv != NULL) {
+ /* Some (e.g., GCM) tests use IVs longer than EVP_MAX_IV_LENGTH. */
+ unsigned char iv[128];
+ if (!TEST_true(EVP_CIPHER_CTX_get_updated_iv(ctx, iv, sizeof(iv)))
+ || ((EVP_CIPHER_get_flags(expected->cipher) & EVP_CIPH_CUSTOM_IV) == 0
+ && !TEST_mem_eq(expected->next_iv, expected->iv_len, iv,
+ expected->iv_len))) {
+ t->err = "INVALID_NEXT_IV";
+ goto err;
+ }
+ }
+
+ t->err = NULL;
+ ok = 1;
+ err:
+ OPENSSL_free(tmp);
+ if (ctx != ctx_base)
+ EVP_CIPHER_CTX_free(ctx_base);
+ EVP_CIPHER_CTX_free(ctx);
+ return ok;
+}
+
+static int cipher_test_run(EVP_TEST *t)
+{
+ CIPHER_DATA *cdat = t->data;
+ int rv, frag = 0;
+ size_t out_misalign, inp_misalign;
+
+ TEST_info("RUNNING TEST FOR CIPHER %s\n", EVP_CIPHER_get0_name(cdat->cipher));
+ if (!cdat->key) {
+ t->err = "NO_KEY";
+ return 0;
+ }
+ if (!cdat->iv && EVP_CIPHER_get_iv_length(cdat->cipher)) {
+ /* IV is optional and usually omitted in wrap mode */
+ if (EVP_CIPHER_get_mode(cdat->cipher) != EVP_CIPH_WRAP_MODE) {
+ t->err = "NO_IV";
+ return 0;
+ }
+ }
+ if (cdat->aead && cdat->tag == NULL && !cdat->tls_aad) {
+ t->err = "NO_TAG";
+ return 0;
+ }
+ for (out_misalign = 0; out_misalign <= 1;) {
+ static char aux_err[64];
+ t->aux_err = aux_err;
+ for (inp_misalign = (size_t)-1; inp_misalign != 2; inp_misalign++) {
+ if (inp_misalign == (size_t)-1) {
+ /* kludge: inp_misalign == -1 means "exercise in-place" */
+ BIO_snprintf(aux_err, sizeof(aux_err),
+ "%s in-place, %sfragmented",
+ out_misalign ? "misaligned" : "aligned",
+ frag ? "" : "not ");
+ } else {
+ BIO_snprintf(aux_err, sizeof(aux_err),
+ "%s output and %s input, %sfragmented",
+ out_misalign ? "misaligned" : "aligned",
+ inp_misalign ? "misaligned" : "aligned",
+ frag ? "" : "not ");
+ }
+ if (cdat->enc) {
+ rv = cipher_test_enc(t, 1, out_misalign, inp_misalign, frag);
+ /* Not fatal errors: return */
+ if (rv != 1) {
+ if (rv < 0)
+ return 0;
+ return 1;
+ }
+ }
+ if (cdat->enc != 1) {
+ rv = cipher_test_enc(t, 0, out_misalign, inp_misalign, frag);
+ /* Not fatal errors: return */
+ if (rv != 1) {
+ if (rv < 0)
+ return 0;
+ return 1;
+ }
+ }
+ }
+
+ if (out_misalign == 1 && frag == 0) {
+ /*
+ * XTS, SIV, CCM, stitched ciphers and Wrap modes have special
+ * requirements about input lengths so we don't fragment for those
+ */
+ if (cdat->aead == EVP_CIPH_CCM_MODE
+ || cdat->aead == EVP_CIPH_CBC_MODE
+ || (cdat->aead == -1
+ && EVP_CIPHER_get_mode(cdat->cipher) == EVP_CIPH_STREAM_CIPHER)
+ || ((EVP_CIPHER_get_flags(cdat->cipher) & EVP_CIPH_FLAG_CTS) != 0)
+ || EVP_CIPHER_get_mode(cdat->cipher) == EVP_CIPH_SIV_MODE
+ || EVP_CIPHER_get_mode(cdat->cipher) == EVP_CIPH_XTS_MODE
+ || EVP_CIPHER_get_mode(cdat->cipher) == EVP_CIPH_WRAP_MODE)
+ break;
+ out_misalign = 0;
+ frag++;
+ } else {
+ out_misalign++;
+ }
+ }
+ t->aux_err = NULL;
+
+ return 1;
+}
+
+static const EVP_TEST_METHOD cipher_test_method = {
+ "Cipher",
+ cipher_test_init,
+ cipher_test_cleanup,
+ cipher_test_parse,
+ cipher_test_run
+};
+
+
+/**
+ ** MAC TESTS
+ **/
+
+typedef struct mac_data_st {
+ /* MAC type in one form or another */
+ char *mac_name;
+ EVP_MAC *mac; /* for mac_test_run_mac */
+ int type; /* for mac_test_run_pkey */
+ /* Algorithm string for this MAC */
+ char *alg;
+ /* MAC key */
+ unsigned char *key;
+ size_t key_len;
+ /* MAC IV (GMAC) */
+ unsigned char *iv;
+ size_t iv_len;
+ /* Input to MAC */
+ unsigned char *input;
+ size_t input_len;
+ /* Expected output */
+ unsigned char *output;
+ size_t output_len;
+ unsigned char *custom;
+ size_t custom_len;
+ /* MAC salt (blake2) */
+ unsigned char *salt;
+ size_t salt_len;
+ /* XOF mode? */
+ int xof;
+ /* Reinitialization fails */
+ int no_reinit;
+ /* Collection of controls */
+ STACK_OF(OPENSSL_STRING) *controls;
+ /* Output size */
+ int output_size;
+ /* Block size */
+ int block_size;
+} MAC_DATA;
+
+static int mac_test_init(EVP_TEST *t, const char *alg)
+{
+ EVP_MAC *mac = NULL;
+ int type = NID_undef;
+ MAC_DATA *mdat;
+
+ if (is_mac_disabled(alg)) {
+ TEST_info("skipping, '%s' is disabled", alg);
+ t->skip = 1;
+ return 1;
+ }
+ if ((mac = EVP_MAC_fetch(libctx, alg, NULL)) == NULL) {
+ /*
+ * Since we didn't find an EVP_MAC, we check for known EVP_PKEY methods
+ * For debugging purposes, we allow 'NNNN by EVP_PKEY' to force running
+ * the EVP_PKEY method.
+ */
+ size_t sz = strlen(alg);
+ static const char epilogue[] = " by EVP_PKEY";
+
+ if (sz >= sizeof(epilogue)
+ && strcmp(alg + sz - (sizeof(epilogue) - 1), epilogue) == 0)
+ sz -= sizeof(epilogue) - 1;
+
+ if (strncmp(alg, "HMAC", sz) == 0)
+ type = EVP_PKEY_HMAC;
+ else if (strncmp(alg, "CMAC", sz) == 0)
+ type = EVP_PKEY_CMAC;
+ else if (strncmp(alg, "Poly1305", sz) == 0)
+ type = EVP_PKEY_POLY1305;
+ else if (strncmp(alg, "SipHash", sz) == 0)
+ type = EVP_PKEY_SIPHASH;
+ else
+ return 0;
+ }
+
+ if (!TEST_ptr(mdat = OPENSSL_zalloc(sizeof(*mdat))))
+ return 0;
+
+ mdat->type = type;
+ if (!TEST_ptr(mdat->mac_name = OPENSSL_strdup(alg))) {
+ OPENSSL_free(mdat);
+ return 0;
+ }
+
+ mdat->mac = mac;
+ if (!TEST_ptr(mdat->controls = sk_OPENSSL_STRING_new_null())) {
+ OPENSSL_free(mdat->mac_name);
+ OPENSSL_free(mdat);
+ return 0;
+ }
+
+ mdat->output_size = mdat->block_size = -1;
+ t->data = mdat;
+ return 1;
+}
+
+/* Because OPENSSL_free is a macro, it can't be passed as a function pointer */
+static void openssl_free(char *m)
+{
+ OPENSSL_free(m);
+}
+
+static void mac_test_cleanup(EVP_TEST *t)
+{
+ MAC_DATA *mdat = t->data;
+
+ EVP_MAC_free(mdat->mac);
+ OPENSSL_free(mdat->mac_name);
+ sk_OPENSSL_STRING_pop_free(mdat->controls, openssl_free);
+ OPENSSL_free(mdat->alg);
+ OPENSSL_free(mdat->key);
+ OPENSSL_free(mdat->iv);
+ OPENSSL_free(mdat->custom);
+ OPENSSL_free(mdat->salt);
+ OPENSSL_free(mdat->input);
+ OPENSSL_free(mdat->output);
+}
+
+static int mac_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ MAC_DATA *mdata = t->data;
+
+ if (strcmp(keyword, "Key") == 0)
+ return parse_bin(value, &mdata->key, &mdata->key_len);
+ if (strcmp(keyword, "IV") == 0)
+ return parse_bin(value, &mdata->iv, &mdata->iv_len);
+ if (strcmp(keyword, "Custom") == 0)
+ return parse_bin(value, &mdata->custom, &mdata->custom_len);
+ if (strcmp(keyword, "Salt") == 0)
+ return parse_bin(value, &mdata->salt, &mdata->salt_len);
+ if (strcmp(keyword, "Algorithm") == 0) {
+ mdata->alg = OPENSSL_strdup(value);
+ if (mdata->alg == NULL)
+ return -1;
+ return 1;
+ }
+ if (strcmp(keyword, "Input") == 0)
+ return parse_bin(value, &mdata->input, &mdata->input_len);
+ if (strcmp(keyword, "Output") == 0)
+ return parse_bin(value, &mdata->output, &mdata->output_len);
+ if (strcmp(keyword, "XOF") == 0)
+ return mdata->xof = 1;
+ if (strcmp(keyword, "NoReinit") == 0)
+ return mdata->no_reinit = 1;
+ if (strcmp(keyword, "Ctrl") == 0) {
+ char *data = OPENSSL_strdup(value);
+
+ if (data == NULL)
+ return -1;
+ return sk_OPENSSL_STRING_push(mdata->controls, data) != 0;
+ }
+ if (strcmp(keyword, "OutputSize") == 0) {
+ mdata->output_size = atoi(value);
+ if (mdata->output_size < 0)
+ return -1;
+ return 1;
+ }
+ if (strcmp(keyword, "BlockSize") == 0) {
+ mdata->block_size = atoi(value);
+ if (mdata->block_size < 0)
+ return -1;
+ return 1;
+ }
+ return 0;
+}
+
+static int mac_test_ctrl_pkey(EVP_TEST *t, EVP_PKEY_CTX *pctx,
+ const char *value)
+{
+ int rv = 0;
+ char *p, *tmpval;
+
+ if (!TEST_ptr(tmpval = OPENSSL_strdup(value)))
+ return 0;
+ p = strchr(tmpval, ':');
+ if (p != NULL) {
+ *p++ = '\0';
+ rv = EVP_PKEY_CTX_ctrl_str(pctx, tmpval, p);
+ }
+ if (rv == -2)
+ t->err = "PKEY_CTRL_INVALID";
+ else if (rv <= 0)
+ t->err = "PKEY_CTRL_ERROR";
+ else
+ rv = 1;
+ OPENSSL_free(tmpval);
+ return rv > 0;
+}
+
+static int mac_test_run_pkey(EVP_TEST *t)
+{
+ MAC_DATA *expected = t->data;
+ EVP_MD_CTX *mctx = NULL;
+ EVP_PKEY_CTX *pctx = NULL, *genctx = NULL;
+ EVP_PKEY *key = NULL;
+ const char *mdname = NULL;
+ EVP_CIPHER *cipher = NULL;
+ unsigned char *got = NULL;
+ size_t got_len;
+ int i;
+
+ /* We don't do XOF mode via PKEY */
+ if (expected->xof)
+ return 1;
+
+ if (expected->alg == NULL)
+ TEST_info("Trying the EVP_PKEY %s test", OBJ_nid2sn(expected->type));
+ else
+ TEST_info("Trying the EVP_PKEY %s test with %s",
+ OBJ_nid2sn(expected->type), expected->alg);
+
+ if (expected->type == EVP_PKEY_CMAC) {
+#ifdef OPENSSL_NO_DEPRECATED_3_0
+ TEST_info("skipping, PKEY CMAC '%s' is disabled", expected->alg);
+ t->skip = 1;
+ t->err = NULL;
+ goto err;
+#else
+ OSSL_LIB_CTX *tmpctx;
+
+ if (expected->alg != NULL && is_cipher_disabled(expected->alg)) {
+ TEST_info("skipping, PKEY CMAC '%s' is disabled", expected->alg);
+ t->skip = 1;
+ t->err = NULL;
+ goto err;
+ }
+ if (!TEST_ptr(cipher = EVP_CIPHER_fetch(libctx, expected->alg, NULL))) {
+ t->err = "MAC_KEY_CREATE_ERROR";
+ goto err;
+ }
+ tmpctx = OSSL_LIB_CTX_set0_default(libctx);
+ key = EVP_PKEY_new_CMAC_key(NULL, expected->key, expected->key_len,
+ cipher);
+ OSSL_LIB_CTX_set0_default(tmpctx);
+#endif
+ } else {
+ key = EVP_PKEY_new_raw_private_key_ex(libctx,
+ OBJ_nid2sn(expected->type), NULL,
+ expected->key, expected->key_len);
+ }
+ if (key == NULL) {
+ t->err = "MAC_KEY_CREATE_ERROR";
+ goto err;
+ }
+
+ if (expected->type == EVP_PKEY_HMAC && expected->alg != NULL) {
+ if (is_digest_disabled(expected->alg)) {
+ TEST_info("skipping, HMAC '%s' is disabled", expected->alg);
+ t->skip = 1;
+ t->err = NULL;
+ goto err;
+ }
+ mdname = expected->alg;
+ }
+ if (!TEST_ptr(mctx = EVP_MD_CTX_new())) {
+ t->err = "INTERNAL_ERROR";
+ goto err;
+ }
+ if (!EVP_DigestSignInit_ex(mctx, &pctx, mdname, libctx, NULL, key, NULL)) {
+ t->err = "DIGESTSIGNINIT_ERROR";
+ goto err;
+ }
+ for (i = 0; i < sk_OPENSSL_STRING_num(expected->controls); i++)
+ if (!mac_test_ctrl_pkey(t, pctx,
+ sk_OPENSSL_STRING_value(expected->controls,
+ i))) {
+ t->err = "EVPPKEYCTXCTRL_ERROR";
+ goto err;
+ }
+ if (!EVP_DigestSignUpdate(mctx, expected->input, expected->input_len)) {
+ t->err = "DIGESTSIGNUPDATE_ERROR";
+ goto err;
+ }
+ if (!EVP_DigestSignFinal(mctx, NULL, &got_len)) {
+ t->err = "DIGESTSIGNFINAL_LENGTH_ERROR";
+ goto err;
+ }
+ if (!TEST_ptr(got = OPENSSL_malloc(got_len))) {
+ t->err = "TEST_FAILURE";
+ goto err;
+ }
+ if (!EVP_DigestSignFinal(mctx, got, &got_len)
+ || !memory_err_compare(t, "TEST_MAC_ERR",
+ expected->output, expected->output_len,
+ got, got_len)) {
+ t->err = "TEST_MAC_ERR";
+ goto err;
+ }
+ t->err = NULL;
+ err:
+ EVP_CIPHER_free(cipher);
+ EVP_MD_CTX_free(mctx);
+ OPENSSL_free(got);
+ EVP_PKEY_CTX_free(genctx);
+ EVP_PKEY_free(key);
+ return 1;
+}
+
+static int mac_test_run_mac(EVP_TEST *t)
+{
+ MAC_DATA *expected = t->data;
+ EVP_MAC_CTX *ctx = NULL;
+ unsigned char *got = NULL;
+ size_t got_len = 0, size = 0;
+ size_t size_before_init = 0, size_after_init, size_val = 0;
+ int i, block_size = -1, output_size = -1;
+ OSSL_PARAM params[21], sizes[3], *psizes = sizes;
+ size_t params_n = 0;
+ size_t params_n_allocstart = 0;
+ const OSSL_PARAM *defined_params =
+ EVP_MAC_settable_ctx_params(expected->mac);
+ int xof;
+ int reinit = 1;
+
+ if (expected->alg == NULL)
+ TEST_info("Trying the EVP_MAC %s test", expected->mac_name);
+ else
+ TEST_info("Trying the EVP_MAC %s test with %s",
+ expected->mac_name, expected->alg);
+
+ if (expected->alg != NULL) {
+ int skip = 0;
+
+ /*
+ * The underlying algorithm may be a cipher or a digest.
+ * We don't know which it is, but we can ask the MAC what it
+ * should be and bet on that.
+ */
+ if (OSSL_PARAM_locate_const(defined_params,
+ OSSL_MAC_PARAM_CIPHER) != NULL) {
+ if (is_cipher_disabled(expected->alg))
+ skip = 1;
+ else
+ params[params_n++] =
+ OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_CIPHER,
+ expected->alg, 0);
+ } else if (OSSL_PARAM_locate_const(defined_params,
+ OSSL_MAC_PARAM_DIGEST) != NULL) {
+ if (is_digest_disabled(expected->alg))
+ skip = 1;
+ else
+ params[params_n++] =
+ OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST,
+ expected->alg, 0);
+ } else {
+ t->err = "MAC_BAD_PARAMS";
+ goto err;
+ }
+ if (skip) {
+ TEST_info("skipping, algorithm '%s' is disabled", expected->alg);
+ t->skip = 1;
+ t->err = NULL;
+ goto err;
+ }
+ }
+ if (expected->custom != NULL)
+ params[params_n++] =
+ OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_CUSTOM,
+ expected->custom,
+ expected->custom_len);
+ if (expected->salt != NULL)
+ params[params_n++] =
+ OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_SALT,
+ expected->salt,
+ expected->salt_len);
+ if (expected->iv != NULL)
+ params[params_n++] =
+ OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_IV,
+ expected->iv,
+ expected->iv_len);
+
+ /* Unknown controls. They must match parameters that the MAC recognizes */
+ if (params_n + sk_OPENSSL_STRING_num(expected->controls)
+ >= OSSL_NELEM(params)) {
+ t->err = "MAC_TOO_MANY_PARAMETERS";
+ goto err;
+ }
+ params_n_allocstart = params_n;
+ for (i = 0; i < sk_OPENSSL_STRING_num(expected->controls); i++) {
+ char *tmpkey, *tmpval;
+ char *value = sk_OPENSSL_STRING_value(expected->controls, i);
+
+ if (!TEST_ptr(tmpkey = OPENSSL_strdup(value))) {
+ t->err = "MAC_PARAM_ERROR";
+ goto err;
+ }
+ tmpval = strchr(tmpkey, ':');
+ if (tmpval != NULL)
+ *tmpval++ = '\0';
+
+ if (tmpval == NULL
+ || !OSSL_PARAM_allocate_from_text(&params[params_n],
+ defined_params,
+ tmpkey, tmpval,
+ strlen(tmpval), NULL)) {
+ OPENSSL_free(tmpkey);
+ t->err = "MAC_PARAM_ERROR";
+ goto err;
+ }
+ params_n++;
+
+ if (strcmp(tmpkey, "size") == 0)
+ size_val = (size_t)strtoul(tmpval, NULL, 0);
+
+ OPENSSL_free(tmpkey);
+ }
+ params[params_n] = OSSL_PARAM_construct_end();
+
+ if ((ctx = EVP_MAC_CTX_new(expected->mac)) == NULL) {
+ t->err = "MAC_CREATE_ERROR";
+ goto err;
+ }
+ if (fips_provider_version_gt(libctx, 3, 1, 4)
+ || (fips_provider_version_lt(libctx, 3, 1, 0)
+ && fips_provider_version_gt(libctx, 3, 0, 12)))
+ size_before_init = EVP_MAC_CTX_get_mac_size(ctx);
+ if (!EVP_MAC_init(ctx, expected->key, expected->key_len, params)) {
+ t->err = "MAC_INIT_ERROR";
+ goto err;
+ }
+ size_after_init = EVP_MAC_CTX_get_mac_size(ctx);
+ if (!TEST_false(size_before_init == 0 && size_after_init == 0)) {
+ t->err = "MAC SIZE not set";
+ goto err;
+ }
+ if (size_before_init != 0) {
+ /* mac-size not modified by init params */
+ if (size_val == 0 && !TEST_size_t_eq(size_before_init, size_after_init)) {
+ t->err = "MAC SIZE check failed";
+ goto err;
+ }
+ /* mac-size modified by init params */
+ if (size_val != 0 && !TEST_size_t_eq(size_val, size_after_init)) {
+ t->err = "MAC SIZE check failed";
+ goto err;
+ }
+ }
+ if (expected->output_size >= 0)
+ *psizes++ = OSSL_PARAM_construct_int(OSSL_MAC_PARAM_SIZE,
+ &output_size);
+ if (expected->block_size >= 0)
+ *psizes++ = OSSL_PARAM_construct_int(OSSL_MAC_PARAM_BLOCK_SIZE,
+ &block_size);
+ if (psizes != sizes) {
+ *psizes = OSSL_PARAM_construct_end();
+ if (!TEST_true(EVP_MAC_CTX_get_params(ctx, sizes))) {
+ t->err = "INTERNAL_ERROR";
+ goto err;
+ }
+ if (expected->output_size >= 0
+ && !TEST_int_eq(output_size, expected->output_size)) {
+ t->err = "TEST_FAILURE";
+ goto err;
+ }
+ if (expected->block_size >= 0
+ && !TEST_int_eq(block_size, expected->block_size)) {
+ t->err = "TEST_FAILURE";
+ goto err;
+ }
+ }
+ retry:
+ if (!EVP_MAC_update(ctx, expected->input, expected->input_len)) {
+ t->err = "MAC_UPDATE_ERROR";
+ goto err;
+ }
+ xof = expected->xof;
+ if (xof) {
+ if (!TEST_ptr(got = OPENSSL_malloc(expected->output_len))) {
+ t->err = "TEST_FAILURE";
+ goto err;
+ }
+ if (!EVP_MAC_finalXOF(ctx, got, expected->output_len)
+ || !memory_err_compare(t, "TEST_MAC_ERR",
+ expected->output, expected->output_len,
+ got, expected->output_len)) {
+ t->err = "MAC_FINAL_ERROR";
+ goto err;
+ }
+ } else {
+ if (!EVP_MAC_final(ctx, NULL, &got_len, 0)) {
+ t->err = "MAC_FINAL_LENGTH_ERROR";
+ goto err;
+ }
+ if (!TEST_ptr(got = OPENSSL_malloc(got_len))) {
+ t->err = "TEST_FAILURE";
+ goto err;
+ }
+ if (!EVP_MAC_final(ctx, got, &got_len, got_len)
+ || !memory_err_compare(t, "TEST_MAC_ERR",
+ expected->output, expected->output_len,
+ got, got_len)) {
+ t->err = "TEST_MAC_ERR";
+ goto err;
+ }
+ }
+ /* FIPS(3.0.0): can't reinitialise MAC contexts #18100 */
+ if (reinit-- && fips_provider_version_gt(libctx, 3, 0, 0)) {
+ OSSL_PARAM ivparams[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ int ret;
+
+ /* If the MAC uses IV, we have to set it again */
+ if (expected->iv != NULL) {
+ ivparams[0] =
+ OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_IV,
+ expected->iv,
+ expected->iv_len);
+ ivparams[1] = OSSL_PARAM_construct_end();
+ }
+ ERR_set_mark();
+ ret = EVP_MAC_init(ctx, NULL, 0, ivparams);
+ if (expected->no_reinit) {
+ if (ret) {
+ ERR_clear_last_mark();
+ t->err = "MAC_REINIT_SHOULD_FAIL";
+ goto err;
+ }
+ } else if (ret) {
+ ERR_clear_last_mark();
+ OPENSSL_free(got);
+ got = NULL;
+ goto retry;
+ } else {
+ ERR_clear_last_mark();
+ t->err = "MAC_REINIT_ERROR";
+ goto err;
+ }
+ /* If reinitialization fails, it is unsupported by the algorithm */
+ ERR_pop_to_mark();
+ }
+ t->err = NULL;
+
+ /* Test the EVP_Q_mac interface as well */
+ if (!xof) {
+ OPENSSL_cleanse(got, got_len);
+ if (!TEST_true(EVP_Q_mac(libctx, expected->mac_name, NULL,
+ expected->alg, params,
+ expected->key, expected->key_len,
+ expected->input, expected->input_len,
+ got, got_len, &size))
+ || !TEST_mem_eq(got, size,
+ expected->output, expected->output_len)) {
+ t->err = "EVP_Q_mac failed";
+ goto err;
+ }
+ }
+ err:
+ while (params_n-- > params_n_allocstart) {
+ OPENSSL_free(params[params_n].data);
+ }
+ EVP_MAC_CTX_free(ctx);
+ OPENSSL_free(got);
+ return 1;
+}
+
+static int mac_test_run(EVP_TEST *t)
+{
+ MAC_DATA *expected = t->data;
+
+ if (expected->mac != NULL)
+ return mac_test_run_mac(t);
+ return mac_test_run_pkey(t);
+}
+
+static const EVP_TEST_METHOD mac_test_method = {
+ "MAC",
+ mac_test_init,
+ mac_test_cleanup,
+ mac_test_parse,
+ mac_test_run
+};
+
+
+/**
+ ** PUBLIC KEY TESTS
+ ** These are all very similar and share much common code.
+ **/
+
+typedef struct pkey_data_st {
+ /* Context for this operation */
+ EVP_PKEY_CTX *ctx;
+ /* Key operation to perform */
+ int (*keyop) (EVP_PKEY_CTX *ctx,
+ unsigned char *sig, size_t *siglen,
+ const unsigned char *tbs, size_t tbslen);
+ /* Input to MAC */
+ unsigned char *input;
+ size_t input_len;
+ /* Expected output */
+ unsigned char *output;
+ size_t output_len;
+} PKEY_DATA;
+
+/*
+ * Perform public key operation setup: lookup key, allocated ctx and call
+ * the appropriate initialisation function
+ */
+static int pkey_test_init(EVP_TEST *t, const char *name,
+ int use_public,
+ int (*keyopinit) (EVP_PKEY_CTX *ctx),
+ int (*keyop)(EVP_PKEY_CTX *ctx,
+ unsigned char *sig, size_t *siglen,
+ const unsigned char *tbs,
+ size_t tbslen))
+{
+ PKEY_DATA *kdata;
+ EVP_PKEY *pkey = NULL;
+ int rv = 0;
+
+ if (use_public)
+ rv = find_key(&pkey, name, public_keys);
+ if (rv == 0)
+ rv = find_key(&pkey, name, private_keys);
+ if (rv == 0 || pkey == NULL) {
+ TEST_info("skipping, key '%s' is disabled", name);
+ t->skip = 1;
+ return 1;
+ }
+
+ if (!TEST_ptr(kdata = OPENSSL_zalloc(sizeof(*kdata)))) {
+ EVP_PKEY_free(pkey);
+ return 0;
+ }
+ kdata->keyop = keyop;
+ if (!TEST_ptr(kdata->ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, NULL))) {
+ EVP_PKEY_free(pkey);
+ OPENSSL_free(kdata);
+ return 0;
+ }
+ if (keyopinit(kdata->ctx) <= 0)
+ t->err = "KEYOP_INIT_ERROR";
+ t->data = kdata;
+ return 1;
+}
+
+static void pkey_test_cleanup(EVP_TEST *t)
+{
+ PKEY_DATA *kdata = t->data;
+
+ OPENSSL_free(kdata->input);
+ OPENSSL_free(kdata->output);
+ EVP_PKEY_CTX_free(kdata->ctx);
+}
+
+static int pkey_test_ctrl(EVP_TEST *t, EVP_PKEY_CTX *pctx,
+ const char *value)
+{
+ int rv = 0;
+ char *p, *tmpval;
+
+ if (!TEST_ptr(tmpval = OPENSSL_strdup(value)))
+ return 0;
+ p = strchr(tmpval, ':');
+ if (p != NULL) {
+ *p++ = '\0';
+ rv = EVP_PKEY_CTX_ctrl_str(pctx, tmpval, p);
+ }
+ if (rv == -2) {
+ t->err = "PKEY_CTRL_INVALID";
+ rv = 1;
+ } else if (p != NULL && rv <= 0) {
+ if (is_digest_disabled(p) || is_cipher_disabled(p)) {
+ TEST_info("skipping, '%s' is disabled", p);
+ t->skip = 1;
+ rv = 1;
+ } else {
+ t->err = "PKEY_CTRL_ERROR";
+ rv = 1;
+ }
+ }
+ OPENSSL_free(tmpval);
+ return rv > 0;
+}
+
+static int pkey_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ PKEY_DATA *kdata = t->data;
+ if (strcmp(keyword, "Input") == 0)
+ return parse_bin(value, &kdata->input, &kdata->input_len);
+ if (strcmp(keyword, "Output") == 0)
+ return parse_bin(value, &kdata->output, &kdata->output_len);
+ if (strcmp(keyword, "Ctrl") == 0)
+ return pkey_test_ctrl(t, kdata->ctx, value);
+ return 0;
+}
+
+static int pkey_test_run(EVP_TEST *t)
+{
+ PKEY_DATA *expected = t->data;
+ unsigned char *got = NULL;
+ size_t got_len;
+ EVP_PKEY_CTX *copy = NULL;
+
+ if (expected->keyop(expected->ctx, NULL, &got_len,
+ expected->input, expected->input_len) <= 0
+ || !TEST_ptr(got = OPENSSL_malloc(got_len))) {
+ t->err = "KEYOP_LENGTH_ERROR";
+ goto err;
+ }
+ if (expected->keyop(expected->ctx, got, &got_len,
+ expected->input, expected->input_len) <= 0) {
+ t->err = "KEYOP_ERROR";
+ goto err;
+ }
+ if (!memory_err_compare(t, "KEYOP_MISMATCH",
+ expected->output, expected->output_len,
+ got, got_len))
+ goto err;
+
+ t->err = NULL;
+ OPENSSL_free(got);
+ got = NULL;
+
+ /* Repeat the test on a copy. */
+ if (!TEST_ptr(copy = EVP_PKEY_CTX_dup(expected->ctx))) {
+ t->err = "INTERNAL_ERROR";
+ goto err;
+ }
+ if (expected->keyop(copy, NULL, &got_len, expected->input,
+ expected->input_len) <= 0
+ || !TEST_ptr(got = OPENSSL_malloc(got_len))) {
+ t->err = "KEYOP_LENGTH_ERROR";
+ goto err;
+ }
+ if (expected->keyop(copy, got, &got_len, expected->input,
+ expected->input_len) <= 0) {
+ t->err = "KEYOP_ERROR";
+ goto err;
+ }
+ if (!memory_err_compare(t, "KEYOP_MISMATCH",
+ expected->output, expected->output_len,
+ got, got_len))
+ goto err;
+
+ err:
+ OPENSSL_free(got);
+ EVP_PKEY_CTX_free(copy);
+ return 1;
+}
+
+static int sign_test_init(EVP_TEST *t, const char *name)
+{
+ return pkey_test_init(t, name, 0, EVP_PKEY_sign_init, EVP_PKEY_sign);
+}
+
+static const EVP_TEST_METHOD psign_test_method = {
+ "Sign",
+ sign_test_init,
+ pkey_test_cleanup,
+ pkey_test_parse,
+ pkey_test_run
+};
+
+static int verify_recover_test_init(EVP_TEST *t, const char *name)
+{
+ return pkey_test_init(t, name, 1, EVP_PKEY_verify_recover_init,
+ EVP_PKEY_verify_recover);
+}
+
+static const EVP_TEST_METHOD pverify_recover_test_method = {
+ "VerifyRecover",
+ verify_recover_test_init,
+ pkey_test_cleanup,
+ pkey_test_parse,
+ pkey_test_run
+};
+
+static int decrypt_test_init(EVP_TEST *t, const char *name)
+{
+ return pkey_test_init(t, name, 0, EVP_PKEY_decrypt_init,
+ EVP_PKEY_decrypt);
+}
+
+static const EVP_TEST_METHOD pdecrypt_test_method = {
+ "Decrypt",
+ decrypt_test_init,
+ pkey_test_cleanup,
+ pkey_test_parse,
+ pkey_test_run
+};
+
+static int verify_test_init(EVP_TEST *t, const char *name)
+{
+ return pkey_test_init(t, name, 1, EVP_PKEY_verify_init, 0);
+}
+
+static int verify_test_run(EVP_TEST *t)
+{
+ PKEY_DATA *kdata = t->data;
+
+ if (EVP_PKEY_verify(kdata->ctx, kdata->output, kdata->output_len,
+ kdata->input, kdata->input_len) <= 0)
+ t->err = "VERIFY_ERROR";
+ return 1;
+}
+
+static const EVP_TEST_METHOD pverify_test_method = {
+ "Verify",
+ verify_test_init,
+ pkey_test_cleanup,
+ pkey_test_parse,
+ verify_test_run
+};
+
+static int pderive_test_init(EVP_TEST *t, const char *name)
+{
+ return pkey_test_init(t, name, 0, EVP_PKEY_derive_init, 0);
+}
+
+static int pderive_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ PKEY_DATA *kdata = t->data;
+ int validate = 0;
+
+ if (strcmp(keyword, "PeerKeyValidate") == 0)
+ validate = 1;
+
+ if (validate || strcmp(keyword, "PeerKey") == 0) {
+ EVP_PKEY *peer;
+ if (find_key(&peer, value, public_keys) == 0)
+ return -1;
+ if (EVP_PKEY_derive_set_peer_ex(kdata->ctx, peer, validate) <= 0) {
+ t->err = "DERIVE_SET_PEER_ERROR";
+ return 1;
+ }
+ t->err = NULL;
+ return 1;
+ }
+ if (strcmp(keyword, "SharedSecret") == 0)
+ return parse_bin(value, &kdata->output, &kdata->output_len);
+ if (strcmp(keyword, "Ctrl") == 0)
+ return pkey_test_ctrl(t, kdata->ctx, value);
+ if (strcmp(keyword, "KDFType") == 0) {
+ OSSL_PARAM params[2];
+
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_EXCHANGE_PARAM_KDF_TYPE,
+ (char *)value, 0);
+ params[1] = OSSL_PARAM_construct_end();
+ if (EVP_PKEY_CTX_set_params(kdata->ctx, params) == 0)
+ return -1;
+ return 1;
+ }
+ if (strcmp(keyword, "KDFDigest") == 0) {
+ OSSL_PARAM params[2];
+
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_EXCHANGE_PARAM_KDF_DIGEST,
+ (char *)value, 0);
+ params[1] = OSSL_PARAM_construct_end();
+ if (EVP_PKEY_CTX_set_params(kdata->ctx, params) == 0)
+ return -1;
+ return 1;
+ }
+ if (strcmp(keyword, "CEKAlg") == 0) {
+ OSSL_PARAM params[2];
+
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_CEK_ALG,
+ (char *)value, 0);
+ params[1] = OSSL_PARAM_construct_end();
+ if (EVP_PKEY_CTX_set_params(kdata->ctx, params) == 0)
+ return -1;
+ return 1;
+ }
+ if (strcmp(keyword, "KDFOutlen") == 0) {
+ OSSL_PARAM params[2];
+ char *endptr;
+ size_t outlen = (size_t)strtoul(value, &endptr, 0);
+
+ if (endptr[0] != '\0')
+ return -1;
+
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_EXCHANGE_PARAM_KDF_OUTLEN,
+ &outlen);
+ params[1] = OSSL_PARAM_construct_end();
+ if (EVP_PKEY_CTX_set_params(kdata->ctx, params) == 0)
+ return -1;
+ return 1;
+ }
+ return 0;
+}
+
+static int pderive_test_run(EVP_TEST *t)
+{
+ EVP_PKEY_CTX *dctx = NULL;
+ PKEY_DATA *expected = t->data;
+ unsigned char *got = NULL;
+ size_t got_len;
+
+ if (!TEST_ptr(dctx = EVP_PKEY_CTX_dup(expected->ctx))) {
+ t->err = "DERIVE_ERROR";
+ goto err;
+ }
+
+ if (EVP_PKEY_derive(dctx, NULL, &got_len) <= 0
+ || !TEST_size_t_ne(got_len, 0)) {
+ t->err = "DERIVE_ERROR";
+ goto err;
+ }
+ if (!TEST_ptr(got = OPENSSL_malloc(got_len))) {
+ t->err = "DERIVE_ERROR";
+ goto err;
+ }
+ if (EVP_PKEY_derive(dctx, got, &got_len) <= 0) {
+ t->err = "DERIVE_ERROR";
+ goto err;
+ }
+ if (!memory_err_compare(t, "SHARED_SECRET_MISMATCH",
+ expected->output, expected->output_len,
+ got, got_len))
+ goto err;
+
+ t->err = NULL;
+ err:
+ OPENSSL_free(got);
+ EVP_PKEY_CTX_free(dctx);
+ return 1;
+}
+
+static const EVP_TEST_METHOD pderive_test_method = {
+ "Derive",
+ pderive_test_init,
+ pkey_test_cleanup,
+ pderive_test_parse,
+ pderive_test_run
+};
+
+
+/**
+ ** PBE TESTS
+ **/
+
+typedef enum pbe_type_enum {
+ PBE_TYPE_INVALID = 0,
+ PBE_TYPE_SCRYPT, PBE_TYPE_PBKDF2, PBE_TYPE_PKCS12
+} PBE_TYPE;
+
+typedef struct pbe_data_st {
+ PBE_TYPE pbe_type;
+ /* scrypt parameters */
+ uint64_t N, r, p, maxmem;
+ /* PKCS#12 parameters */
+ int id, iter;
+ const EVP_MD *md;
+ /* password */
+ unsigned char *pass;
+ size_t pass_len;
+ /* salt */
+ unsigned char *salt;
+ size_t salt_len;
+ /* Expected output */
+ unsigned char *key;
+ size_t key_len;
+} PBE_DATA;
+
+#ifndef OPENSSL_NO_SCRYPT
+/* Parse unsigned decimal 64 bit integer value */
+static int parse_uint64(const char *value, uint64_t *pr)
+{
+ const char *p = value;
+
+ if (!TEST_true(*p)) {
+ TEST_info("Invalid empty integer value");
+ return -1;
+ }
+ for (*pr = 0; *p; ) {
+ if (*pr > UINT64_MAX / 10) {
+ TEST_error("Integer overflow in string %s", value);
+ return -1;
+ }
+ *pr *= 10;
+ if (!TEST_true(isdigit((unsigned char)*p))) {
+ TEST_error("Invalid character in string %s", value);
+ return -1;
+ }
+ *pr += *p - '0';
+ p++;
+ }
+ return 1;
+}
+
+static int scrypt_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ PBE_DATA *pdata = t->data;
+
+ if (strcmp(keyword, "N") == 0)
+ return parse_uint64(value, &pdata->N);
+ if (strcmp(keyword, "p") == 0)
+ return parse_uint64(value, &pdata->p);
+ if (strcmp(keyword, "r") == 0)
+ return parse_uint64(value, &pdata->r);
+ if (strcmp(keyword, "maxmem") == 0)
+ return parse_uint64(value, &pdata->maxmem);
+ return 0;
+}
+#endif
+
+static int pbkdf2_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ PBE_DATA *pdata = t->data;
+
+ if (strcmp(keyword, "iter") == 0) {
+ pdata->iter = atoi(value);
+ if (pdata->iter <= 0)
+ return -1;
+ return 1;
+ }
+ if (strcmp(keyword, "MD") == 0) {
+ pdata->md = EVP_get_digestbyname(value);
+ if (pdata->md == NULL)
+ return -1;
+ return 1;
+ }
+ return 0;
+}
+
+static int pkcs12_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ PBE_DATA *pdata = t->data;
+
+ if (strcmp(keyword, "id") == 0) {
+ pdata->id = atoi(value);
+ if (pdata->id <= 0)
+ return -1;
+ return 1;
+ }
+ return pbkdf2_test_parse(t, keyword, value);
+}
+
+static int pbe_test_init(EVP_TEST *t, const char *alg)
+{
+ PBE_DATA *pdat;
+ PBE_TYPE pbe_type = PBE_TYPE_INVALID;
+
+ if (is_kdf_disabled(alg)) {
+ TEST_info("skipping, '%s' is disabled", alg);
+ t->skip = 1;
+ return 1;
+ }
+ if (strcmp(alg, "scrypt") == 0) {
+ pbe_type = PBE_TYPE_SCRYPT;
+ } else if (strcmp(alg, "pbkdf2") == 0) {
+ pbe_type = PBE_TYPE_PBKDF2;
+ } else if (strcmp(alg, "pkcs12") == 0) {
+ pbe_type = PBE_TYPE_PKCS12;
+ } else {
+ TEST_error("Unknown pbe algorithm %s", alg);
+ return 0;
+ }
+ if (!TEST_ptr(pdat = OPENSSL_zalloc(sizeof(*pdat))))
+ return 0;
+ pdat->pbe_type = pbe_type;
+ t->data = pdat;
+ return 1;
+}
+
+static void pbe_test_cleanup(EVP_TEST *t)
+{
+ PBE_DATA *pdat = t->data;
+
+ OPENSSL_free(pdat->pass);
+ OPENSSL_free(pdat->salt);
+ OPENSSL_free(pdat->key);
+}
+
+static int pbe_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ PBE_DATA *pdata = t->data;
+
+ if (strcmp(keyword, "Password") == 0)
+ return parse_bin(value, &pdata->pass, &pdata->pass_len);
+ if (strcmp(keyword, "Salt") == 0)
+ return parse_bin(value, &pdata->salt, &pdata->salt_len);
+ if (strcmp(keyword, "Key") == 0)
+ return parse_bin(value, &pdata->key, &pdata->key_len);
+ if (pdata->pbe_type == PBE_TYPE_PBKDF2)
+ return pbkdf2_test_parse(t, keyword, value);
+ else if (pdata->pbe_type == PBE_TYPE_PKCS12)
+ return pkcs12_test_parse(t, keyword, value);
+#ifndef OPENSSL_NO_SCRYPT
+ else if (pdata->pbe_type == PBE_TYPE_SCRYPT)
+ return scrypt_test_parse(t, keyword, value);
+#endif
+ return 0;
+}
+
+static int pbe_test_run(EVP_TEST *t)
+{
+ PBE_DATA *expected = t->data;
+ unsigned char *key;
+ EVP_MD *fetched_digest = NULL;
+ OSSL_LIB_CTX *save_libctx;
+
+ save_libctx = OSSL_LIB_CTX_set0_default(libctx);
+
+ if (!TEST_ptr(key = OPENSSL_malloc(expected->key_len))) {
+ t->err = "INTERNAL_ERROR";
+ goto err;
+ }
+ if (expected->pbe_type == PBE_TYPE_PBKDF2) {
+ if (PKCS5_PBKDF2_HMAC((char *)expected->pass, expected->pass_len,
+ expected->salt, expected->salt_len,
+ expected->iter, expected->md,
+ expected->key_len, key) == 0) {
+ t->err = "PBKDF2_ERROR";
+ goto err;
+ }
+#ifndef OPENSSL_NO_SCRYPT
+ } else if (expected->pbe_type == PBE_TYPE_SCRYPT) {
+ if (EVP_PBE_scrypt((const char *)expected->pass, expected->pass_len,
+ expected->salt, expected->salt_len,
+ expected->N, expected->r, expected->p,
+ expected->maxmem, key, expected->key_len) == 0) {
+ t->err = "SCRYPT_ERROR";
+ goto err;
+ }
+#endif
+ } else if (expected->pbe_type == PBE_TYPE_PKCS12) {
+ fetched_digest = EVP_MD_fetch(libctx, EVP_MD_get0_name(expected->md),
+ NULL);
+ if (fetched_digest == NULL) {
+ t->err = "PKCS12_ERROR";
+ goto err;
+ }
+ if (PKCS12_key_gen_uni(expected->pass, expected->pass_len,
+ expected->salt, expected->salt_len,
+ expected->id, expected->iter, expected->key_len,
+ key, fetched_digest) == 0) {
+ t->err = "PKCS12_ERROR";
+ goto err;
+ }
+ }
+ if (!memory_err_compare(t, "KEY_MISMATCH", expected->key, expected->key_len,
+ key, expected->key_len))
+ goto err;
+
+ t->err = NULL;
+err:
+ EVP_MD_free(fetched_digest);
+ OPENSSL_free(key);
+ OSSL_LIB_CTX_set0_default(save_libctx);
+ return 1;
+}
+
+static const EVP_TEST_METHOD pbe_test_method = {
+ "PBE",
+ pbe_test_init,
+ pbe_test_cleanup,
+ pbe_test_parse,
+ pbe_test_run
+};
+
+
+/**
+ ** BASE64 TESTS
+ **/
+
+typedef enum {
+ BASE64_CANONICAL_ENCODING = 0,
+ BASE64_VALID_ENCODING = 1,
+ BASE64_INVALID_ENCODING = 2
+} base64_encoding_type;
+
+typedef struct encode_data_st {
+ /* Input to encoding */
+ unsigned char *input;
+ size_t input_len;
+ /* Expected output */
+ unsigned char *output;
+ size_t output_len;
+ base64_encoding_type encoding;
+} ENCODE_DATA;
+
+static int encode_test_init(EVP_TEST *t, const char *encoding)
+{
+ ENCODE_DATA *edata;
+
+ if (!TEST_ptr(edata = OPENSSL_zalloc(sizeof(*edata))))
+ return 0;
+ if (strcmp(encoding, "canonical") == 0) {
+ edata->encoding = BASE64_CANONICAL_ENCODING;
+ } else if (strcmp(encoding, "valid") == 0) {
+ edata->encoding = BASE64_VALID_ENCODING;
+ } else if (strcmp(encoding, "invalid") == 0) {
+ edata->encoding = BASE64_INVALID_ENCODING;
+ if (!TEST_ptr(t->expected_err = OPENSSL_strdup("DECODE_ERROR")))
+ goto err;
+ } else {
+ TEST_error("Bad encoding: %s."
+ " Should be one of {canonical, valid, invalid}",
+ encoding);
+ goto err;
+ }
+ t->data = edata;
+ return 1;
+err:
+ OPENSSL_free(edata);
+ return 0;
+}
+
+static void encode_test_cleanup(EVP_TEST *t)
+{
+ ENCODE_DATA *edata = t->data;
+
+ OPENSSL_free(edata->input);
+ OPENSSL_free(edata->output);
+ memset(edata, 0, sizeof(*edata));
+}
+
+static int encode_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ ENCODE_DATA *edata = t->data;
+
+ if (strcmp(keyword, "Input") == 0)
+ return parse_bin(value, &edata->input, &edata->input_len);
+ if (strcmp(keyword, "Output") == 0)
+ return parse_bin(value, &edata->output, &edata->output_len);
+ return 0;
+}
+
+static int encode_test_run(EVP_TEST *t)
+{
+ ENCODE_DATA *expected = t->data;
+ unsigned char *encode_out = NULL, *decode_out = NULL;
+ int output_len, chunk_len;
+ EVP_ENCODE_CTX *decode_ctx = NULL, *encode_ctx = NULL;
+
+ if (!TEST_ptr(decode_ctx = EVP_ENCODE_CTX_new())) {
+ t->err = "INTERNAL_ERROR";
+ goto err;
+ }
+
+ if (expected->encoding == BASE64_CANONICAL_ENCODING) {
+
+ if (!TEST_ptr(encode_ctx = EVP_ENCODE_CTX_new())
+ || !TEST_ptr(encode_out =
+ OPENSSL_malloc(EVP_ENCODE_LENGTH(expected->input_len))))
+ goto err;
+
+ EVP_EncodeInit(encode_ctx);
+ if (!TEST_true(EVP_EncodeUpdate(encode_ctx, encode_out, &chunk_len,
+ expected->input, expected->input_len)))
+ goto err;
+
+ output_len = chunk_len;
+
+ EVP_EncodeFinal(encode_ctx, encode_out + chunk_len, &chunk_len);
+ output_len += chunk_len;
+
+ if (!memory_err_compare(t, "BAD_ENCODING",
+ expected->output, expected->output_len,
+ encode_out, output_len))
+ goto err;
+ }
+
+ if (!TEST_ptr(decode_out =
+ OPENSSL_malloc(EVP_DECODE_LENGTH(expected->output_len))))
+ goto err;
+
+ EVP_DecodeInit(decode_ctx);
+ if (EVP_DecodeUpdate(decode_ctx, decode_out, &chunk_len, expected->output,
+ expected->output_len) < 0) {
+ t->err = "DECODE_ERROR";
+ goto err;
+ }
+ output_len = chunk_len;
+
+ if (EVP_DecodeFinal(decode_ctx, decode_out + chunk_len, &chunk_len) != 1) {
+ t->err = "DECODE_ERROR";
+ goto err;
+ }
+ output_len += chunk_len;
+
+ if (expected->encoding != BASE64_INVALID_ENCODING
+ && !memory_err_compare(t, "BAD_DECODING",
+ expected->input, expected->input_len,
+ decode_out, output_len)) {
+ t->err = "BAD_DECODING";
+ goto err;
+ }
+
+ t->err = NULL;
+ err:
+ OPENSSL_free(encode_out);
+ OPENSSL_free(decode_out);
+ EVP_ENCODE_CTX_free(decode_ctx);
+ EVP_ENCODE_CTX_free(encode_ctx);
+ return 1;
+}
+
+static const EVP_TEST_METHOD encode_test_method = {
+ "Encoding",
+ encode_test_init,
+ encode_test_cleanup,
+ encode_test_parse,
+ encode_test_run,
+};
+
+
+/**
+ ** 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;
+
+ /* TEST-RAND is available in the FIPS provider but not with "fips=yes" */
+ rand = EVP_RAND_fetch(libctx, "TEST-RAND", "-fips");
+ 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_CTX_set_params(rdata->parent, params))
+ goto err;
+
+ rand = EVP_RAND_fetch(libctx, 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_CTX_set_params(expected->ctx, params)))
+ goto err;
+
+ strength = EVP_RAND_get_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_instantiate(expected->parent, strength,
+ 0, NULL, 0, params)))
+ 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, NULL)))
+ 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_CTX_set_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_CTX_set_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_CTX_set_params(expected->parent, params)))
+ goto err;
+ }
+ 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_get_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
+ **/
+typedef struct kdf_data_st {
+ /* Context for this operation */
+ EVP_KDF_CTX *ctx;
+ /* Expected output */
+ unsigned char *output;
+ size_t output_len;
+ OSSL_PARAM params[20];
+ OSSL_PARAM *p;
+} KDF_DATA;
+
+/*
+ * Perform public key operation setup: lookup key, allocated ctx and call
+ * the appropriate initialisation function
+ */
+static int kdf_test_init(EVP_TEST *t, const char *name)
+{
+ KDF_DATA *kdata;
+ EVP_KDF *kdf;
+
+ if (is_kdf_disabled(name)) {
+ TEST_info("skipping, '%s' is disabled", name);
+ t->skip = 1;
+ return 1;
+ }
+
+ if (!TEST_ptr(kdata = OPENSSL_zalloc(sizeof(*kdata))))
+ return 0;
+ kdata->p = kdata->params;
+ *kdata->p = OSSL_PARAM_construct_end();
+
+ kdf = EVP_KDF_fetch(libctx, name, NULL);
+ if (kdf == NULL) {
+ OPENSSL_free(kdata);
+ return 0;
+ }
+ kdata->ctx = EVP_KDF_CTX_new(kdf);
+ EVP_KDF_free(kdf);
+ if (kdata->ctx == NULL) {
+ OPENSSL_free(kdata);
+ return 0;
+ }
+ t->data = kdata;
+ return 1;
+}
+
+static void kdf_test_cleanup(EVP_TEST *t)
+{
+ KDF_DATA *kdata = t->data;
+ OSSL_PARAM *p;
+
+ for (p = kdata->params; p->key != NULL; p++)
+ OPENSSL_free(p->data);
+ OPENSSL_free(kdata->output);
+ EVP_KDF_CTX_free(kdata->ctx);
+}
+
+static int kdf_test_ctrl(EVP_TEST *t, EVP_KDF_CTX *kctx,
+ const char *value)
+{
+ KDF_DATA *kdata = t->data;
+ int rv;
+ char *p, *name;
+ const OSSL_PARAM *defs = EVP_KDF_settable_ctx_params(EVP_KDF_CTX_kdf(kctx));
+
+ if (!TEST_ptr(name = OPENSSL_strdup(value)))
+ return 0;
+ p = strchr(name, ':');
+ if (p != NULL)
+ *p++ = '\0';
+
+ rv = OSSL_PARAM_allocate_from_text(kdata->p, defs, name, p,
+ p != NULL ? strlen(p) : 0, NULL);
+ *++kdata->p = OSSL_PARAM_construct_end();
+ if (!rv) {
+ t->err = "KDF_PARAM_ERROR";
+ OPENSSL_free(name);
+ return 0;
+ }
+ if (p != NULL && strcmp(name, "digest") == 0) {
+ if (is_digest_disabled(p)) {
+ TEST_info("skipping, '%s' is disabled", p);
+ t->skip = 1;
+ }
+ }
+ if (p != NULL
+ && (strcmp(name, "cipher") == 0
+ || strcmp(name, "cekalg") == 0)
+ && is_cipher_disabled(p)) {
+ TEST_info("skipping, '%s' is disabled", p);
+ t->skip = 1;
+ }
+ OPENSSL_free(name);
+ return 1;
+}
+
+static int kdf_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ KDF_DATA *kdata = t->data;
+
+ if (strcmp(keyword, "Output") == 0)
+ return parse_bin(value, &kdata->output, &kdata->output_len);
+ if (strncmp(keyword, "Ctrl", 4) == 0)
+ return kdf_test_ctrl(t, kdata->ctx, value);
+ return 0;
+}
+
+static int kdf_test_run(EVP_TEST *t)
+{
+ KDF_DATA *expected = t->data;
+ unsigned char *got = NULL;
+ size_t got_len = expected->output_len;
+
+ if (!EVP_KDF_CTX_set_params(expected->ctx, expected->params)) {
+ t->err = "KDF_CTRL_ERROR";
+ return 1;
+ }
+ if (!TEST_ptr(got = OPENSSL_malloc(got_len == 0 ? 1 : got_len))) {
+ t->err = "INTERNAL_ERROR";
+ goto err;
+ }
+ if (EVP_KDF_derive(expected->ctx, got, got_len, NULL) <= 0) {
+ t->err = "KDF_DERIVE_ERROR";
+ goto err;
+ }
+ if (!memory_err_compare(t, "KDF_MISMATCH",
+ expected->output, expected->output_len,
+ got, got_len))
+ goto err;
+
+ t->err = NULL;
+
+ err:
+ OPENSSL_free(got);
+ return 1;
+}
+
+static const EVP_TEST_METHOD kdf_test_method = {
+ "KDF",
+ kdf_test_init,
+ kdf_test_cleanup,
+ kdf_test_parse,
+ kdf_test_run
+};
+
+/**
+ ** PKEY KDF TESTS
+ **/
+
+typedef struct pkey_kdf_data_st {
+ /* Context for this operation */
+ EVP_PKEY_CTX *ctx;
+ /* Expected output */
+ unsigned char *output;
+ size_t output_len;
+} PKEY_KDF_DATA;
+
+/*
+ * Perform public key operation setup: lookup key, allocated ctx and call
+ * the appropriate initialisation function
+ */
+static int pkey_kdf_test_init(EVP_TEST *t, const char *name)
+{
+ PKEY_KDF_DATA *kdata = NULL;
+
+ if (is_kdf_disabled(name)) {
+ TEST_info("skipping, '%s' is disabled", name);
+ t->skip = 1;
+ return 1;
+ }
+
+ if (!TEST_ptr(kdata = OPENSSL_zalloc(sizeof(*kdata))))
+ return 0;
+
+ kdata->ctx = EVP_PKEY_CTX_new_from_name(libctx, name, NULL);
+ if (kdata->ctx == NULL
+ || EVP_PKEY_derive_init(kdata->ctx) <= 0)
+ goto err;
+
+ t->data = kdata;
+ return 1;
+err:
+ EVP_PKEY_CTX_free(kdata->ctx);
+ OPENSSL_free(kdata);
+ return 0;
+}
+
+static void pkey_kdf_test_cleanup(EVP_TEST *t)
+{
+ PKEY_KDF_DATA *kdata = t->data;
+
+ OPENSSL_free(kdata->output);
+ EVP_PKEY_CTX_free(kdata->ctx);
+}
+
+static int pkey_kdf_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ PKEY_KDF_DATA *kdata = t->data;
+
+ if (strcmp(keyword, "Output") == 0)
+ return parse_bin(value, &kdata->output, &kdata->output_len);
+ if (strncmp(keyword, "Ctrl", 4) == 0)
+ return pkey_test_ctrl(t, kdata->ctx, value);
+ return 0;
+}
+
+static int pkey_kdf_test_run(EVP_TEST *t)
+{
+ PKEY_KDF_DATA *expected = t->data;
+ unsigned char *got = NULL;
+ size_t got_len = 0;
+
+ if (fips_provider_version_eq(libctx, 3, 0, 0)) {
+ /* FIPS(3.0.0): can't deal with oversized output buffers #18533 */
+ got_len = expected->output_len;
+ } else {
+ /* Find out the KDF output size */
+ if (EVP_PKEY_derive(expected->ctx, NULL, &got_len) <= 0) {
+ t->err = "INTERNAL_ERROR";
+ goto err;
+ }
+
+ /*
+ * We may get an absurd output size, which signals that anything goes.
+ * If not, we specify a too big buffer for the output, to test that
+ * EVP_PKEY_derive() can cope with it.
+ */
+ if (got_len == SIZE_MAX || got_len == 0)
+ got_len = expected->output_len;
+ else
+ got_len = expected->output_len * 2;
+ }
+
+ if (!TEST_ptr(got = OPENSSL_malloc(got_len == 0 ? 1 : got_len))) {
+ t->err = "INTERNAL_ERROR";
+ goto err;
+ }
+ if (EVP_PKEY_derive(expected->ctx, got, &got_len) <= 0) {
+ t->err = "KDF_DERIVE_ERROR";
+ goto err;
+ }
+ if (!TEST_mem_eq(expected->output, expected->output_len, got, got_len)) {
+ t->err = "KDF_MISMATCH";
+ goto err;
+ }
+ t->err = NULL;
+
+ err:
+ OPENSSL_free(got);
+ return 1;
+}
+
+static const EVP_TEST_METHOD pkey_kdf_test_method = {
+ "PKEYKDF",
+ pkey_kdf_test_init,
+ pkey_kdf_test_cleanup,
+ pkey_kdf_test_parse,
+ pkey_kdf_test_run
+};
+
+/**
+ ** KEYPAIR TESTS
+ **/
+
+typedef struct keypair_test_data_st {
+ EVP_PKEY *privk;
+ EVP_PKEY *pubk;
+} KEYPAIR_TEST_DATA;
+
+static int keypair_test_init(EVP_TEST *t, const char *pair)
+{
+ KEYPAIR_TEST_DATA *data;
+ int rv = 0;
+ EVP_PKEY *pk = NULL, *pubk = NULL;
+ char *pub, *priv = NULL;
+
+ /* Split private and public names. */
+ if (!TEST_ptr(priv = OPENSSL_strdup(pair))
+ || !TEST_ptr(pub = strchr(priv, ':'))) {
+ t->err = "PARSING_ERROR";
+ goto end;
+ }
+ *pub++ = '\0';
+
+ if (!TEST_true(find_key(&pk, priv, private_keys))) {
+ TEST_info("Can't find private key: %s", priv);
+ t->err = "MISSING_PRIVATE_KEY";
+ goto end;
+ }
+ if (!TEST_true(find_key(&pubk, pub, public_keys))) {
+ TEST_info("Can't find public key: %s", pub);
+ t->err = "MISSING_PUBLIC_KEY";
+ goto end;
+ }
+
+ if (pk == NULL && pubk == NULL) {
+ /* Both keys are listed but unsupported: skip this test */
+ t->skip = 1;
+ rv = 1;
+ goto end;
+ }
+
+ if (!TEST_ptr(data = OPENSSL_malloc(sizeof(*data))))
+ goto end;
+ data->privk = pk;
+ data->pubk = pubk;
+ t->data = data;
+ rv = 1;
+ t->err = NULL;
+
+end:
+ OPENSSL_free(priv);
+ return rv;
+}
+
+static void keypair_test_cleanup(EVP_TEST *t)
+{
+ OPENSSL_free(t->data);
+ t->data = NULL;
+}
+
+/*
+ * For tests that do not accept any custom keywords.
+ */
+static int void_test_parse(EVP_TEST *t, const char *keyword, const char *value)
+{
+ return 0;
+}
+
+static int keypair_test_run(EVP_TEST *t)
+{
+ int rv = 0;
+ const KEYPAIR_TEST_DATA *pair = t->data;
+
+ if (pair->privk == NULL || pair->pubk == NULL) {
+ /*
+ * this can only happen if only one of the keys is not set
+ * which means that one of them was unsupported while the
+ * other isn't: hence a key type mismatch.
+ */
+ t->err = "KEYPAIR_TYPE_MISMATCH";
+ rv = 1;
+ goto end;
+ }
+
+ if ((rv = EVP_PKEY_eq(pair->privk, pair->pubk)) != 1 ) {
+ if ( 0 == rv ) {
+ t->err = "KEYPAIR_MISMATCH";
+ } else if ( -1 == rv ) {
+ t->err = "KEYPAIR_TYPE_MISMATCH";
+ } else if ( -2 == rv ) {
+ t->err = "UNSUPPORTED_KEY_COMPARISON";
+ } else {
+ TEST_error("Unexpected error in key comparison");
+ rv = 0;
+ goto end;
+ }
+ rv = 1;
+ goto end;
+ }
+
+ rv = 1;
+ t->err = NULL;
+
+end:
+ return rv;
+}
+
+static const EVP_TEST_METHOD keypair_test_method = {
+ "PrivPubKeyPair",
+ keypair_test_init,
+ keypair_test_cleanup,
+ void_test_parse,
+ keypair_test_run
+};
+
+/**
+ ** KEYGEN TEST
+ **/
+
+typedef struct keygen_test_data_st {
+ EVP_PKEY_CTX *genctx; /* Keygen context to use */
+ char *keyname; /* Key name to store key or NULL */
+} KEYGEN_TEST_DATA;
+
+static int keygen_test_init(EVP_TEST *t, const char *alg)
+{
+ KEYGEN_TEST_DATA *data;
+ EVP_PKEY_CTX *genctx;
+ int nid = OBJ_sn2nid(alg);
+
+ if (nid == NID_undef) {
+ nid = OBJ_ln2nid(alg);
+ if (nid == NID_undef)
+ return 0;
+ }
+
+ if (is_pkey_disabled(alg)) {
+ t->skip = 1;
+ return 1;
+ }
+ if (!TEST_ptr(genctx = EVP_PKEY_CTX_new_from_name(libctx, alg, NULL)))
+ goto err;
+
+ if (EVP_PKEY_keygen_init(genctx) <= 0) {
+ t->err = "KEYGEN_INIT_ERROR";
+ goto err;
+ }
+
+ if (!TEST_ptr(data = OPENSSL_malloc(sizeof(*data))))
+ goto err;
+ data->genctx = genctx;
+ data->keyname = NULL;
+ t->data = data;
+ t->err = NULL;
+ return 1;
+
+err:
+ EVP_PKEY_CTX_free(genctx);
+ return 0;
+}
+
+static void keygen_test_cleanup(EVP_TEST *t)
+{
+ KEYGEN_TEST_DATA *keygen = t->data;
+
+ EVP_PKEY_CTX_free(keygen->genctx);
+ OPENSSL_free(keygen->keyname);
+ OPENSSL_free(t->data);
+ t->data = NULL;
+}
+
+static int keygen_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ KEYGEN_TEST_DATA *keygen = t->data;
+
+ if (strcmp(keyword, "KeyName") == 0)
+ return TEST_ptr(keygen->keyname = OPENSSL_strdup(value));
+ if (strcmp(keyword, "Ctrl") == 0)
+ return pkey_test_ctrl(t, keygen->genctx, value);
+ return 0;
+}
+
+static int keygen_test_run(EVP_TEST *t)
+{
+ KEYGEN_TEST_DATA *keygen = t->data;
+ EVP_PKEY *pkey = NULL;
+ int rv = 1;
+
+ if (EVP_PKEY_keygen(keygen->genctx, &pkey) <= 0) {
+ t->err = "KEYGEN_GENERATE_ERROR";
+ goto err;
+ }
+
+ if (!evp_pkey_is_provided(pkey)) {
+ TEST_info("Warning: legacy key generated %s", keygen->keyname);
+ goto err;
+ }
+ if (keygen->keyname != NULL) {
+ KEY_LIST *key;
+
+ rv = 0;
+ if (find_key(NULL, keygen->keyname, private_keys)) {
+ TEST_info("Duplicate key %s", keygen->keyname);
+ goto err;
+ }
+
+ if (!TEST_ptr(key = OPENSSL_malloc(sizeof(*key))))
+ goto err;
+ key->name = keygen->keyname;
+ keygen->keyname = NULL;
+ key->key = pkey;
+ key->next = private_keys;
+ private_keys = key;
+ rv = 1;
+ } else {
+ EVP_PKEY_free(pkey);
+ }
+
+ t->err = NULL;
+
+err:
+ return rv;
+}
+
+static const EVP_TEST_METHOD keygen_test_method = {
+ "KeyGen",
+ keygen_test_init,
+ keygen_test_cleanup,
+ keygen_test_parse,
+ keygen_test_run,
+};
+
+/**
+ ** DIGEST SIGN+VERIFY TESTS
+ **/
+
+typedef struct {
+ int is_verify; /* Set to 1 if verifying */
+ int is_oneshot; /* Set to 1 for one shot operation */
+ const EVP_MD *md; /* Digest to use */
+ EVP_MD_CTX *ctx; /* Digest context */
+ EVP_PKEY_CTX *pctx;
+ STACK_OF(EVP_TEST_BUFFER) *input; /* Input data: streaming */
+ unsigned char *osin; /* Input data if one shot */
+ size_t osin_len; /* Input length data if one shot */
+ unsigned char *output; /* Expected output */
+ size_t output_len; /* Expected output length */
+} DIGESTSIGN_DATA;
+
+static int digestsigver_test_init(EVP_TEST *t, const char *alg, int is_verify,
+ int is_oneshot)
+{
+ const EVP_MD *md = NULL;
+ DIGESTSIGN_DATA *mdat;
+
+ if (strcmp(alg, "NULL") != 0) {
+ if (is_digest_disabled(alg)) {
+ t->skip = 1;
+ return 1;
+ }
+ md = EVP_get_digestbyname(alg);
+ if (md == NULL)
+ return 0;
+ }
+ if (!TEST_ptr(mdat = OPENSSL_zalloc(sizeof(*mdat))))
+ return 0;
+ mdat->md = md;
+ if (!TEST_ptr(mdat->ctx = EVP_MD_CTX_new())) {
+ OPENSSL_free(mdat);
+ return 0;
+ }
+ mdat->is_verify = is_verify;
+ mdat->is_oneshot = is_oneshot;
+ t->data = mdat;
+ return 1;
+}
+
+static int digestsign_test_init(EVP_TEST *t, const char *alg)
+{
+ return digestsigver_test_init(t, alg, 0, 0);
+}
+
+static void digestsigver_test_cleanup(EVP_TEST *t)
+{
+ DIGESTSIGN_DATA *mdata = t->data;
+
+ EVP_MD_CTX_free(mdata->ctx);
+ sk_EVP_TEST_BUFFER_pop_free(mdata->input, evp_test_buffer_free);
+ OPENSSL_free(mdata->osin);
+ OPENSSL_free(mdata->output);
+ OPENSSL_free(mdata);
+ t->data = NULL;
+}
+
+static int digestsigver_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ DIGESTSIGN_DATA *mdata = t->data;
+
+ if (strcmp(keyword, "Key") == 0) {
+ EVP_PKEY *pkey = NULL;
+ int rv = 0;
+ const char *name = mdata->md == NULL ? NULL : EVP_MD_get0_name(mdata->md);
+
+ if (mdata->is_verify)
+ rv = find_key(&pkey, value, public_keys);
+ if (rv == 0)
+ rv = find_key(&pkey, value, private_keys);
+ if (rv == 0 || pkey == NULL) {
+ t->skip = 1;
+ return 1;
+ }
+ if (mdata->is_verify) {
+ if (!EVP_DigestVerifyInit_ex(mdata->ctx, &mdata->pctx, name, libctx,
+ NULL, pkey, NULL))
+ t->err = "DIGESTVERIFYINIT_ERROR";
+ return 1;
+ }
+ if (!EVP_DigestSignInit_ex(mdata->ctx, &mdata->pctx, name, libctx, NULL,
+ pkey, NULL))
+ t->err = "DIGESTSIGNINIT_ERROR";
+ return 1;
+ }
+
+ if (strcmp(keyword, "Input") == 0) {
+ if (mdata->is_oneshot)
+ return parse_bin(value, &mdata->osin, &mdata->osin_len);
+ return evp_test_buffer_append(value, &mdata->input);
+ }
+ if (strcmp(keyword, "Output") == 0)
+ return parse_bin(value, &mdata->output, &mdata->output_len);
+
+ if (!mdata->is_oneshot) {
+ if (strcmp(keyword, "Count") == 0)
+ return evp_test_buffer_set_count(value, mdata->input);
+ if (strcmp(keyword, "Ncopy") == 0)
+ return evp_test_buffer_ncopy(value, mdata->input);
+ }
+ if (strcmp(keyword, "Ctrl") == 0) {
+ if (mdata->pctx == NULL)
+ return -1;
+ return pkey_test_ctrl(t, mdata->pctx, value);
+ }
+ return 0;
+}
+
+static int digestsign_update_fn(void *ctx, const unsigned char *buf,
+ size_t buflen)
+{
+ return EVP_DigestSignUpdate(ctx, buf, buflen);
+}
+
+static int digestsign_test_run(EVP_TEST *t)
+{
+ DIGESTSIGN_DATA *expected = t->data;
+ unsigned char *got = NULL;
+ size_t got_len;
+
+ if (!evp_test_buffer_do(expected->input, digestsign_update_fn,
+ expected->ctx)) {
+ t->err = "DIGESTUPDATE_ERROR";
+ goto err;
+ }
+
+ if (!EVP_DigestSignFinal(expected->ctx, NULL, &got_len)) {
+ t->err = "DIGESTSIGNFINAL_LENGTH_ERROR";
+ goto err;
+ }
+ if (!TEST_ptr(got = OPENSSL_malloc(got_len))) {
+ t->err = "MALLOC_FAILURE";
+ goto err;
+ }
+ got_len *= 2;
+ if (!EVP_DigestSignFinal(expected->ctx, got, &got_len)) {
+ t->err = "DIGESTSIGNFINAL_ERROR";
+ goto err;
+ }
+ if (!memory_err_compare(t, "SIGNATURE_MISMATCH",
+ expected->output, expected->output_len,
+ got, got_len))
+ goto err;
+
+ t->err = NULL;
+ err:
+ OPENSSL_free(got);
+ return 1;
+}
+
+static const EVP_TEST_METHOD digestsign_test_method = {
+ "DigestSign",
+ digestsign_test_init,
+ digestsigver_test_cleanup,
+ digestsigver_test_parse,
+ digestsign_test_run
+};
+
+static int digestverify_test_init(EVP_TEST *t, const char *alg)
+{
+ return digestsigver_test_init(t, alg, 1, 0);
+}
+
+static int digestverify_update_fn(void *ctx, const unsigned char *buf,
+ size_t buflen)
+{
+ return EVP_DigestVerifyUpdate(ctx, buf, buflen);
+}
+
+static int digestverify_test_run(EVP_TEST *t)
+{
+ DIGESTSIGN_DATA *mdata = t->data;
+
+ if (!evp_test_buffer_do(mdata->input, digestverify_update_fn, mdata->ctx)) {
+ t->err = "DIGESTUPDATE_ERROR";
+ return 1;
+ }
+
+ if (EVP_DigestVerifyFinal(mdata->ctx, mdata->output,
+ mdata->output_len) <= 0)
+ t->err = "VERIFY_ERROR";
+ return 1;
+}
+
+static const EVP_TEST_METHOD digestverify_test_method = {
+ "DigestVerify",
+ digestverify_test_init,
+ digestsigver_test_cleanup,
+ digestsigver_test_parse,
+ digestverify_test_run
+};
+
+static int oneshot_digestsign_test_init(EVP_TEST *t, const char *alg)
+{
+ return digestsigver_test_init(t, alg, 0, 1);
+}
+
+static int oneshot_digestsign_test_run(EVP_TEST *t)
+{
+ DIGESTSIGN_DATA *expected = t->data;
+ unsigned char *got = NULL;
+ size_t got_len;
+
+ if (!EVP_DigestSign(expected->ctx, NULL, &got_len,
+ expected->osin, expected->osin_len)) {
+ t->err = "DIGESTSIGN_LENGTH_ERROR";
+ goto err;
+ }
+ if (!TEST_ptr(got = OPENSSL_malloc(got_len))) {
+ t->err = "MALLOC_FAILURE";
+ goto err;
+ }
+ got_len *= 2;
+ if (!EVP_DigestSign(expected->ctx, got, &got_len,
+ expected->osin, expected->osin_len)) {
+ t->err = "DIGESTSIGN_ERROR";
+ goto err;
+ }
+ if (!memory_err_compare(t, "SIGNATURE_MISMATCH",
+ expected->output, expected->output_len,
+ got, got_len))
+ goto err;
+
+ t->err = NULL;
+ err:
+ OPENSSL_free(got);
+ return 1;
+}
+
+static const EVP_TEST_METHOD oneshot_digestsign_test_method = {
+ "OneShotDigestSign",
+ oneshot_digestsign_test_init,
+ digestsigver_test_cleanup,
+ digestsigver_test_parse,
+ oneshot_digestsign_test_run
+};
+
+static int oneshot_digestverify_test_init(EVP_TEST *t, const char *alg)
+{
+ return digestsigver_test_init(t, alg, 1, 1);
+}
+
+static int oneshot_digestverify_test_run(EVP_TEST *t)
+{
+ DIGESTSIGN_DATA *mdata = t->data;
+
+ if (EVP_DigestVerify(mdata->ctx, mdata->output, mdata->output_len,
+ mdata->osin, mdata->osin_len) <= 0)
+ t->err = "VERIFY_ERROR";
+ return 1;
+}
+
+static const EVP_TEST_METHOD oneshot_digestverify_test_method = {
+ "OneShotDigestVerify",
+ oneshot_digestverify_test_init,
+ digestsigver_test_cleanup,
+ digestsigver_test_parse,
+ oneshot_digestverify_test_run
+};
+
+
+/**
+ ** PARSING AND DISPATCH
+ **/
+
+static const EVP_TEST_METHOD *evp_test_list[] = {
+ &rand_test_method,
+ &cipher_test_method,
+ &digest_test_method,
+ &digestsign_test_method,
+ &digestverify_test_method,
+ &encode_test_method,
+ &kdf_test_method,
+ &pkey_kdf_test_method,
+ &keypair_test_method,
+ &keygen_test_method,
+ &mac_test_method,
+ &oneshot_digestsign_test_method,
+ &oneshot_digestverify_test_method,
+ &pbe_test_method,
+ &pdecrypt_test_method,
+ &pderive_test_method,
+ &psign_test_method,
+ &pverify_recover_test_method,
+ &pverify_test_method,
+ NULL
+};
+
+static const EVP_TEST_METHOD *find_test(const char *name)
+{
+ const EVP_TEST_METHOD **tt;
+
+ for (tt = evp_test_list; *tt; tt++) {
+ if (strcmp(name, (*tt)->name) == 0)
+ return *tt;
+ }
+ return NULL;
+}
+
+static void clear_test(EVP_TEST *t)
+{
+ test_clearstanza(&t->s);
+ ERR_clear_error();
+ if (t->data != NULL) {
+ if (t->meth != NULL)
+ t->meth->cleanup(t);
+ OPENSSL_free(t->data);
+ t->data = NULL;
+ }
+ OPENSSL_free(t->expected_err);
+ t->expected_err = NULL;
+ OPENSSL_free(t->reason);
+ t->reason = NULL;
+
+ /* Text literal. */
+ t->err = NULL;
+ t->skip = 0;
+ t->meth = NULL;
+}
+
+/* Check for errors in the test structure; return 1 if okay, else 0. */
+static int check_test_error(EVP_TEST *t)
+{
+ unsigned long err;
+ const char *reason;
+
+ if (t->err == NULL && t->expected_err == NULL)
+ return 1;
+ if (t->err != NULL && t->expected_err == NULL) {
+ if (t->aux_err != NULL) {
+ TEST_info("%s:%d: Source of above error (%s); unexpected error %s",
+ t->s.test_file, t->s.start, t->aux_err, t->err);
+ } else {
+ TEST_info("%s:%d: Source of above error; unexpected error %s",
+ t->s.test_file, t->s.start, t->err);
+ }
+ return 0;
+ }
+ if (t->err == NULL && t->expected_err != NULL) {
+ TEST_info("%s:%d: Succeeded but was expecting %s",
+ t->s.test_file, t->s.start, t->expected_err);
+ return 0;
+ }
+
+ if (strcmp(t->err, t->expected_err) != 0) {
+ TEST_info("%s:%d: Expected %s got %s",
+ t->s.test_file, t->s.start, t->expected_err, t->err);
+ return 0;
+ }
+
+ if (t->reason == NULL)
+ return 1;
+
+ if (t->reason == NULL) {
+ TEST_info("%s:%d: Test is missing function or reason code",
+ t->s.test_file, t->s.start);
+ return 0;
+ }
+
+ err = ERR_peek_error();
+ if (err == 0) {
+ TEST_info("%s:%d: Expected error \"%s\" not set",
+ t->s.test_file, t->s.start, t->reason);
+ return 0;
+ }
+
+ reason = ERR_reason_error_string(err);
+ if (reason == NULL) {
+ TEST_info("%s:%d: Expected error \"%s\", no strings available."
+ " Assuming ok.",
+ t->s.test_file, t->s.start, t->reason);
+ return 1;
+ }
+
+ if (strcmp(reason, t->reason) == 0)
+ return 1;
+
+ TEST_info("%s:%d: Expected error \"%s\", got \"%s\"",
+ t->s.test_file, t->s.start, t->reason, reason);
+
+ return 0;
+}
+
+/* Run a parsed test. Log a message and return 0 on error. */
+static int run_test(EVP_TEST *t)
+{
+ if (t->meth == NULL)
+ return 1;
+ t->s.numtests++;
+ if (t->skip) {
+ t->s.numskip++;
+ } else {
+ /* run the test */
+ if (t->err == NULL && t->meth->run_test(t) != 1) {
+ TEST_info("%s:%d %s error",
+ t->s.test_file, t->s.start, t->meth->name);
+ return 0;
+ }
+ if (!check_test_error(t)) {
+ TEST_openssl_errors();
+ t->s.errors++;
+ }
+ }
+
+ /* clean it up */
+ return 1;
+}
+
+static int find_key(EVP_PKEY **ppk, const char *name, KEY_LIST *lst)
+{
+ for (; lst != NULL; lst = lst->next) {
+ if (strcmp(lst->name, name) == 0) {
+ if (ppk != NULL)
+ *ppk = lst->key;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static void free_key_list(KEY_LIST *lst)
+{
+ while (lst != NULL) {
+ KEY_LIST *next = lst->next;
+
+ EVP_PKEY_free(lst->key);
+ OPENSSL_free(lst->name);
+ OPENSSL_free(lst);
+ lst = next;
+ }
+}
+
+/*
+ * Is the key type an unsupported algorithm?
+ */
+static int key_unsupported(void)
+{
+ long err = ERR_peek_last_error();
+ int lib = ERR_GET_LIB(err);
+ long reason = ERR_GET_REASON(err);
+
+ if ((lib == ERR_LIB_EVP && reason == EVP_R_UNSUPPORTED_ALGORITHM)
+ || (lib == ERR_LIB_EVP && reason == EVP_R_DECODE_ERROR)
+ || reason == ERR_R_UNSUPPORTED) {
+ ERR_clear_error();
+ return 1;
+ }
+#ifndef OPENSSL_NO_EC
+ /*
+ * If EC support is enabled we should catch also EC_R_UNKNOWN_GROUP as an
+ * hint to an unsupported algorithm/curve (e.g. if binary EC support is
+ * disabled).
+ */
+ if (lib == ERR_LIB_EC
+ && (reason == EC_R_UNKNOWN_GROUP
+ || reason == EC_R_INVALID_CURVE)) {
+ ERR_clear_error();
+ return 1;
+ }
+#endif /* OPENSSL_NO_EC */
+ return 0;
+}
+
+/* NULL out the value from |pp| but return it. This "steals" a pointer. */
+static char *take_value(PAIR *pp)
+{
+ char *p = pp->value;
+
+ pp->value = NULL;
+ return p;
+}
+
+#if !defined(OPENSSL_NO_FIPS_SECURITYCHECKS)
+static int securitycheck_enabled(void)
+{
+ static int enabled = -1;
+
+ if (enabled == -1) {
+ if (OSSL_PROVIDER_available(libctx, "fips")) {
+ OSSL_PARAM params[2];
+ OSSL_PROVIDER *prov = NULL;
+ int check = 1;
+
+ prov = OSSL_PROVIDER_load(libctx, "fips");
+ if (prov != NULL) {
+ params[0] =
+ OSSL_PARAM_construct_int(OSSL_PROV_PARAM_SECURITY_CHECKS,
+ &check);
+ params[1] = OSSL_PARAM_construct_end();
+ OSSL_PROVIDER_get_params(prov, params);
+ OSSL_PROVIDER_unload(prov);
+ }
+ enabled = check;
+ return enabled;
+ }
+ enabled = 0;
+ }
+ return enabled;
+}
+#endif
+
+/*
+ * Return 1 if one of the providers named in the string is available.
+ * The provider names are separated with whitespace.
+ * NOTE: destructive function, it inserts '\0' after each provider name.
+ */
+static int prov_available(char *providers)
+{
+ char *p;
+ int more = 1;
+
+ while (more) {
+ for (; isspace((unsigned char)(*providers)); providers++)
+ continue;
+ if (*providers == '\0')
+ break; /* End of the road */
+ for (p = providers; *p != '\0' && !isspace((unsigned char)(*p)); p++)
+ continue;
+ if (*p == '\0')
+ more = 0;
+ else
+ *p = '\0';
+ if (OSSL_PROVIDER_available(libctx, providers))
+ return 1; /* Found one */
+ }
+ return 0;
+}
+
+/* Read and parse one test. Return 0 if failure, 1 if okay. */
+static int parse(EVP_TEST *t)
+{
+ KEY_LIST *key, **klist;
+ EVP_PKEY *pkey;
+ PAIR *pp;
+ int i, j, skipped = 0;
+
+top:
+ do {
+ if (BIO_eof(t->s.fp))
+ return EOF;
+ clear_test(t);
+ if (!test_readstanza(&t->s))
+ return 0;
+ } while (t->s.numpairs == 0);
+ pp = &t->s.pairs[0];
+
+ /* Are we adding a key? */
+ klist = NULL;
+ pkey = NULL;
+start:
+ if (strcmp(pp->key, "PrivateKey") == 0) {
+ pkey = PEM_read_bio_PrivateKey_ex(t->s.key, NULL, 0, NULL, libctx, NULL);
+ if (pkey == NULL && !key_unsupported()) {
+ EVP_PKEY_free(pkey);
+ TEST_info("Can't read private key %s", pp->value);
+ TEST_openssl_errors();
+ return 0;
+ }
+ klist = &private_keys;
+ } else if (strcmp(pp->key, "PublicKey") == 0) {
+ pkey = PEM_read_bio_PUBKEY_ex(t->s.key, NULL, 0, NULL, libctx, NULL);
+ if (pkey == NULL && !key_unsupported()) {
+ EVP_PKEY_free(pkey);
+ TEST_info("Can't read public key %s", pp->value);
+ TEST_openssl_errors();
+ return 0;
+ }
+ klist = &public_keys;
+ } else if (strcmp(pp->key, "PrivateKeyRaw") == 0
+ || strcmp(pp->key, "PublicKeyRaw") == 0 ) {
+ char *strnid = NULL, *keydata = NULL;
+ unsigned char *keybin;
+ size_t keylen;
+ int nid;
+
+ if (strcmp(pp->key, "PrivateKeyRaw") == 0)
+ klist = &private_keys;
+ else
+ klist = &public_keys;
+
+ strnid = strchr(pp->value, ':');
+ if (strnid != NULL) {
+ *strnid++ = '\0';
+ keydata = strchr(strnid, ':');
+ if (keydata != NULL)
+ *keydata++ = '\0';
+ }
+ if (keydata == NULL) {
+ TEST_info("Failed to parse %s value", pp->key);
+ return 0;
+ }
+
+ nid = OBJ_txt2nid(strnid);
+ if (nid == NID_undef) {
+ TEST_info("Unrecognised algorithm NID");
+ return 0;
+ }
+ if (!parse_bin(keydata, &keybin, &keylen)) {
+ TEST_info("Failed to create binary key");
+ return 0;
+ }
+ if (klist == &private_keys)
+ pkey = EVP_PKEY_new_raw_private_key_ex(libctx, strnid, NULL, keybin,
+ keylen);
+ else
+ pkey = EVP_PKEY_new_raw_public_key_ex(libctx, strnid, NULL, keybin,
+ keylen);
+ if (pkey == NULL && !key_unsupported()) {
+ TEST_info("Can't read %s data", pp->key);
+ OPENSSL_free(keybin);
+ TEST_openssl_errors();
+ return 0;
+ }
+ OPENSSL_free(keybin);
+ } else if (strcmp(pp->key, "Availablein") == 0) {
+ if (!prov_available(pp->value)) {
+ TEST_info("skipping, '%s' provider not available: %s:%d",
+ pp->value, t->s.test_file, t->s.start);
+ t->skip = 1;
+ return 0;
+ }
+ skipped++;
+ pp++;
+ goto start;
+ } else if (strcmp(pp->key, "FIPSversion") == 0) {
+ if (prov_available("fips")) {
+ j = fips_provider_version_match(libctx, pp->value);
+ if (j < 0) {
+ TEST_info("Line %d: error matching FIPS versions\n", t->s.curr);
+ return 0;
+ } else if (j == 0) {
+ TEST_info("skipping, FIPS provider incompatible version: %s:%d",
+ t->s.test_file, t->s.start);
+ t->skip = 1;
+ return 0;
+ }
+ }
+ skipped++;
+ pp++;
+ goto start;
+ }
+
+ /* If we have a key add to list */
+ if (klist != NULL) {
+ if (find_key(NULL, pp->value, *klist)) {
+ TEST_info("Duplicate key %s", pp->value);
+ return 0;
+ }
+ if (!TEST_ptr(key = OPENSSL_malloc(sizeof(*key))))
+ return 0;
+ key->name = take_value(pp);
+ key->key = pkey;
+ key->next = *klist;
+ *klist = key;
+
+ /* Go back and start a new stanza. */
+ if ((t->s.numpairs - skipped) != 1)
+ TEST_info("Line %d: missing blank line\n", t->s.curr);
+ goto top;
+ }
+
+ /* Find the test, based on first keyword. */
+ if (!TEST_ptr(t->meth = find_test(pp->key)))
+ return 0;
+ if (!t->meth->init(t, pp->value)) {
+ TEST_error("unknown %s: %s\n", pp->key, pp->value);
+ return 0;
+ }
+ if (t->skip == 1) {
+ /* TEST_info("skipping %s %s", pp->key, pp->value); */
+ return 0;
+ }
+
+ for (pp++, i = 1; i < (t->s.numpairs - skipped); pp++, i++) {
+ if (strcmp(pp->key, "Securitycheck") == 0) {
+#if defined(OPENSSL_NO_FIPS_SECURITYCHECKS)
+#else
+ if (!securitycheck_enabled())
+#endif
+ {
+ TEST_info("skipping, Securitycheck is disabled: %s:%d",
+ t->s.test_file, t->s.start);
+ t->skip = 1;
+ return 0;
+ }
+ } else if (strcmp(pp->key, "Availablein") == 0) {
+ TEST_info("Line %d: 'Availablein' should be the first option",
+ t->s.curr);
+ return 0;
+ } else if (strcmp(pp->key, "Result") == 0) {
+ if (t->expected_err != NULL) {
+ TEST_info("Line %d: multiple result lines", t->s.curr);
+ return 0;
+ }
+ t->expected_err = take_value(pp);
+ } else if (strcmp(pp->key, "Function") == 0) {
+ /* Ignore old line. */
+ } else if (strcmp(pp->key, "Reason") == 0) {
+ if (t->reason != NULL) {
+ TEST_info("Line %d: multiple reason lines", t->s.curr);
+ return 0;
+ }
+ t->reason = take_value(pp);
+ } else {
+ /* Must be test specific line: try to parse it */
+ int rv = t->meth->parse(t, pp->key, pp->value);
+
+ if (rv == 0) {
+ TEST_info("Line %d: unknown keyword %s", t->s.curr, pp->key);
+ return 0;
+ }
+ if (rv < 0) {
+ TEST_info("Line %d: error processing keyword %s = %s\n",
+ t->s.curr, pp->key, pp->value);
+ return 0;
+ }
+ }
+ }
+
+ return 1;
+}
+
+static int run_file_tests(int i)
+{
+ EVP_TEST *t;
+ const char *testfile = test_get_argument(i);
+ int c;
+
+ if (!TEST_ptr(t = OPENSSL_zalloc(sizeof(*t))))
+ return 0;
+ if (!test_start_file(&t->s, testfile)) {
+ OPENSSL_free(t);
+ return 0;
+ }
+
+ while (!BIO_eof(t->s.fp)) {
+ c = parse(t);
+ if (t->skip) {
+ t->s.numskip++;
+ continue;
+ }
+ if (c == 0 || !run_test(t)) {
+ t->s.errors++;
+ break;
+ }
+ }
+ test_end_file(&t->s);
+ clear_test(t);
+
+ free_key_list(public_keys);
+ free_key_list(private_keys);
+ BIO_free(t->s.key);
+ c = t->s.errors;
+ OPENSSL_free(t);
+ return c == 0;
+}
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("[file...]\n"),
+ { "config", OPT_CONFIG_FILE, '<',
+ "The configuration file to use for the libctx" },
+ { OPT_HELP_STR, 1, '-', "file\tFile to run tests on.\n" },
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+ size_t n;
+ char *config_file = NULL;
+
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_CONFIG_FILE:
+ config_file = opt_arg();
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+
+ /*
+ * Load the provider via configuration into the created library context.
+ * Load the 'null' provider into the default library context to ensure that
+ * the tests do not fallback to using the default provider.
+ */
+ if (!test_get_libctx(&libctx, &prov_null, config_file, NULL, NULL))
+ return 0;
+
+ n = test_get_argument_count();
+ if (n == 0)
+ return 0;
+
+ ADD_ALL_TESTS(run_file_tests, n);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OSSL_PROVIDER_unload(prov_null);
+ OSSL_LIB_CTX_free(libctx);
+}
+
+#define STR_STARTS_WITH(str, pre) OPENSSL_strncasecmp(pre, str, strlen(pre)) == 0
+#define STR_ENDS_WITH(str, pre) \
+strlen(str) < strlen(pre) ? 0 : (OPENSSL_strcasecmp(pre, str + strlen(str) - strlen(pre)) == 0)
+
+static int is_digest_disabled(const char *name)
+{
+#ifdef OPENSSL_NO_BLAKE2
+ if (STR_STARTS_WITH(name, "BLAKE"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_MD2
+ if (OPENSSL_strcasecmp(name, "MD2") == 0)
+ return 1;
+#endif
+#ifdef OPENSSL_NO_MDC2
+ if (OPENSSL_strcasecmp(name, "MDC2") == 0)
+ return 1;
+#endif
+#ifdef OPENSSL_NO_MD4
+ if (OPENSSL_strcasecmp(name, "MD4") == 0)
+ return 1;
+#endif
+#ifdef OPENSSL_NO_MD5
+ if (OPENSSL_strcasecmp(name, "MD5") == 0)
+ return 1;
+#endif
+#ifdef OPENSSL_NO_RMD160
+ if (OPENSSL_strcasecmp(name, "RIPEMD160") == 0)
+ return 1;
+#endif
+#ifdef OPENSSL_NO_SM3
+ if (OPENSSL_strcasecmp(name, "SM3") == 0)
+ return 1;
+#endif
+#ifdef OPENSSL_NO_WHIRLPOOL
+ if (OPENSSL_strcasecmp(name, "WHIRLPOOL") == 0)
+ return 1;
+#endif
+ return 0;
+}
+
+static int is_pkey_disabled(const char *name)
+{
+#ifdef OPENSSL_NO_EC
+ if (STR_STARTS_WITH(name, "EC"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_DH
+ if (STR_STARTS_WITH(name, "DH"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_DSA
+ if (STR_STARTS_WITH(name, "DSA"))
+ return 1;
+#endif
+ return 0;
+}
+
+static int is_mac_disabled(const char *name)
+{
+#ifdef OPENSSL_NO_BLAKE2
+ if (STR_STARTS_WITH(name, "BLAKE2BMAC")
+ || STR_STARTS_WITH(name, "BLAKE2SMAC"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_CMAC
+ if (STR_STARTS_WITH(name, "CMAC"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_POLY1305
+ if (STR_STARTS_WITH(name, "Poly1305"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_SIPHASH
+ if (STR_STARTS_WITH(name, "SipHash"))
+ return 1;
+#endif
+ return 0;
+}
+static int is_kdf_disabled(const char *name)
+{
+#ifdef OPENSSL_NO_SCRYPT
+ if (STR_ENDS_WITH(name, "SCRYPT"))
+ return 1;
+#endif
+ return 0;
+}
+
+static int is_cipher_disabled(const char *name)
+{
+#ifdef OPENSSL_NO_ARIA
+ if (STR_STARTS_WITH(name, "ARIA"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_BF
+ if (STR_STARTS_WITH(name, "BF"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_CAMELLIA
+ if (STR_STARTS_WITH(name, "CAMELLIA"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_CAST
+ if (STR_STARTS_WITH(name, "CAST"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_CHACHA
+ if (STR_STARTS_WITH(name, "CHACHA"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_POLY1305
+ if (STR_ENDS_WITH(name, "Poly1305"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_DES
+ if (STR_STARTS_WITH(name, "DES"))
+ return 1;
+ if (STR_ENDS_WITH(name, "3DESwrap"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_OCB
+ if (STR_ENDS_WITH(name, "OCB"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_IDEA
+ if (STR_STARTS_WITH(name, "IDEA"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_RC2
+ if (STR_STARTS_WITH(name, "RC2"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_RC4
+ if (STR_STARTS_WITH(name, "RC4"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_RC5
+ if (STR_STARTS_WITH(name, "RC5"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_SEED
+ if (STR_STARTS_WITH(name, "SEED"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_SIV
+ if (STR_ENDS_WITH(name, "SIV"))
+ return 1;
+#endif
+#ifdef OPENSSL_NO_SM4
+ if (STR_STARTS_WITH(name, "SM4"))
+ return 1;
+#endif
+ return 0;
+}
diff --git a/test/exdatatest.c b/test/exdatatest.c
new file mode 100644
index 000000000000..6ee916cb3d67
--- /dev/null
+++ b/test/exdatatest.c
@@ -0,0 +1,319 @@
+/*
+ * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <openssl/crypto.h>
+
+#include "testutil.h"
+
+static long saved_argl;
+static void *saved_argp;
+static int saved_idx;
+static int saved_idx2;
+static int saved_idx3;
+static int gbl_result;
+
+/*
+ * SIMPLE EX_DATA IMPLEMENTATION
+ * Apps explicitly set/get ex_data as needed
+ */
+
+static void exnew(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ int idx, long argl, void *argp)
+{
+ if (!TEST_int_eq(idx, saved_idx)
+ || !TEST_long_eq(argl, saved_argl)
+ || !TEST_ptr_eq(argp, saved_argp)
+ || !TEST_ptr_null(ptr))
+ gbl_result = 0;
+}
+
+static int exdup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp)
+{
+ if (!TEST_int_eq(idx, saved_idx)
+ || !TEST_long_eq(argl, saved_argl)
+ || !TEST_ptr_eq(argp, saved_argp)
+ || !TEST_ptr(from_d))
+ gbl_result = 0;
+ return 1;
+}
+
+static void exfree(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ int idx, long argl, void *argp)
+{
+ if (!TEST_int_eq(idx, saved_idx)
+ || !TEST_long_eq(argl, saved_argl)
+ || !TEST_ptr_eq(argp, saved_argp))
+ gbl_result = 0;
+}
+
+/*
+ * PRE-ALLOCATED EX_DATA IMPLEMENTATION
+ * Extended data structure is allocated in exnew2/freed in exfree2
+ * Data is stored inside extended data structure
+ */
+
+typedef struct myobj_ex_data_st {
+ char *hello;
+ int new;
+ int dup;
+} MYOBJ_EX_DATA;
+
+static void exnew2(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ int idx, long argl, void *argp)
+{
+ MYOBJ_EX_DATA *ex_data = OPENSSL_zalloc(sizeof(*ex_data));
+
+ if (!TEST_true(idx == saved_idx2 || idx == saved_idx3)
+ || !TEST_long_eq(argl, saved_argl)
+ || !TEST_ptr_eq(argp, saved_argp)
+ || !TEST_ptr_null(ptr)
+ || !TEST_ptr(ex_data)
+ || !TEST_true(CRYPTO_set_ex_data(ad, idx, ex_data))) {
+ gbl_result = 0;
+ OPENSSL_free(ex_data);
+ } else {
+ ex_data->new = 1;
+ }
+}
+
+static int exdup2(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+ void **from_d, int idx, long argl, void *argp)
+{
+ MYOBJ_EX_DATA **update_ex_data = (MYOBJ_EX_DATA**)from_d;
+ MYOBJ_EX_DATA *ex_data = NULL;
+
+ if (!TEST_true(idx == saved_idx2 || idx == saved_idx3)
+ || !TEST_long_eq(argl, saved_argl)
+ || !TEST_ptr_eq(argp, saved_argp)
+ || !TEST_ptr(from_d)
+ || !TEST_ptr(*update_ex_data)
+ || !TEST_ptr(ex_data = CRYPTO_get_ex_data(to, idx))
+ || !TEST_true(ex_data->new)) {
+ gbl_result = 0;
+ } else {
+ /* Copy hello over */
+ ex_data->hello = (*update_ex_data)->hello;
+ /* indicate this is a dup */
+ ex_data->dup = 1;
+ /* Keep my original ex_data */
+ *update_ex_data = ex_data;
+ }
+ return 1;
+}
+
+static void exfree2(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+ int idx, long argl, void *argp)
+{
+ MYOBJ_EX_DATA *ex_data = CRYPTO_get_ex_data(ad, idx);
+
+ if (!TEST_true(idx == saved_idx2 || idx == saved_idx3)
+ || !TEST_long_eq(argl, saved_argl)
+ || !TEST_ptr_eq(argp, saved_argp)
+ || !TEST_true(CRYPTO_set_ex_data(ad, idx, NULL)))
+ gbl_result = 0;
+ OPENSSL_free(ex_data);
+}
+
+typedef struct myobj_st {
+ CRYPTO_EX_DATA ex_data;
+ int id;
+ int st;
+} MYOBJ;
+
+static MYOBJ *MYOBJ_new(void)
+{
+ static int count = 0;
+ MYOBJ *obj = OPENSSL_malloc(sizeof(*obj));
+
+ if (obj != NULL) {
+ obj->id = ++count;
+ obj->st = CRYPTO_new_ex_data(CRYPTO_EX_INDEX_APP, obj, &obj->ex_data);
+ }
+ return obj;
+}
+
+static void MYOBJ_sethello(MYOBJ *obj, char *cp)
+{
+ obj->st = CRYPTO_set_ex_data(&obj->ex_data, saved_idx, cp);
+ if (!TEST_int_eq(obj->st, 1))
+ gbl_result = 0;
+}
+
+static char *MYOBJ_gethello(MYOBJ *obj)
+{
+ return CRYPTO_get_ex_data(&obj->ex_data, saved_idx);
+}
+
+static void MYOBJ_sethello2(MYOBJ *obj, char *cp)
+{
+ MYOBJ_EX_DATA* ex_data = CRYPTO_get_ex_data(&obj->ex_data, saved_idx2);
+
+ if (TEST_ptr(ex_data))
+ ex_data->hello = cp;
+ else
+ obj->st = gbl_result = 0;
+}
+
+static char *MYOBJ_gethello2(MYOBJ *obj)
+{
+ MYOBJ_EX_DATA* ex_data = CRYPTO_get_ex_data(&obj->ex_data, saved_idx2);
+
+ if (TEST_ptr(ex_data))
+ return ex_data->hello;
+
+ obj->st = gbl_result = 0;
+ return NULL;
+}
+
+static void MYOBJ_allochello3(MYOBJ *obj, char *cp)
+{
+ MYOBJ_EX_DATA* ex_data = NULL;
+
+ if (TEST_ptr_null(ex_data = CRYPTO_get_ex_data(&obj->ex_data, saved_idx3))
+ && TEST_true(CRYPTO_alloc_ex_data(CRYPTO_EX_INDEX_APP, obj,
+ &obj->ex_data, saved_idx3))
+ && TEST_ptr(ex_data = CRYPTO_get_ex_data(&obj->ex_data, saved_idx3)))
+ ex_data->hello = cp;
+ else
+ obj->st = gbl_result = 0;
+}
+
+static char *MYOBJ_gethello3(MYOBJ *obj)
+{
+ MYOBJ_EX_DATA* ex_data = CRYPTO_get_ex_data(&obj->ex_data, saved_idx3);
+
+ if (TEST_ptr(ex_data))
+ return ex_data->hello;
+
+ obj->st = gbl_result = 0;
+ return NULL;
+}
+
+static void MYOBJ_free(MYOBJ *obj)
+{
+ if (obj != NULL) {
+ CRYPTO_free_ex_data(CRYPTO_EX_INDEX_APP, obj, &obj->ex_data);
+ OPENSSL_free(obj);
+ }
+}
+
+static MYOBJ *MYOBJ_dup(MYOBJ *in)
+{
+ MYOBJ *obj = MYOBJ_new();
+
+ if (obj != NULL)
+ obj->st |= CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_APP, &obj->ex_data,
+ &in->ex_data);
+ return obj;
+}
+
+static int test_exdata(void)
+{
+ MYOBJ *t1 = NULL, *t2 = NULL, *t3 = NULL;
+ MYOBJ_EX_DATA *ex_data = NULL;
+ const char *cp;
+ char *p;
+ int res = 0;
+
+ gbl_result = 1;
+
+ if (!TEST_ptr(p = OPENSSL_strdup("hello world")))
+ return 0;
+ saved_argl = 21;
+ if (!TEST_ptr(saved_argp = OPENSSL_malloc(1)))
+ goto err;
+ saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
+ saved_argl, saved_argp,
+ exnew, exdup, exfree);
+ saved_idx2 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
+ saved_argl, saved_argp,
+ exnew2, exdup2, exfree2);
+ t1 = MYOBJ_new();
+ t2 = MYOBJ_new();
+ if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))
+ goto err;
+ if (!TEST_ptr(CRYPTO_get_ex_data(&t1->ex_data, saved_idx2)))
+ goto err;
+
+ /*
+ * saved_idx3 differs from other indexes by being created after the exdata
+ * was initialized.
+ */
+ saved_idx3 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
+ saved_argl, saved_argp,
+ exnew2, exdup2, exfree2);
+ if (!TEST_ptr_null(CRYPTO_get_ex_data(&t1->ex_data, saved_idx3)))
+ goto err;
+
+ MYOBJ_sethello(t1, p);
+ cp = MYOBJ_gethello(t1);
+ if (!TEST_ptr_eq(cp, p))
+ goto err;
+
+ MYOBJ_sethello2(t1, p);
+ cp = MYOBJ_gethello2(t1);
+ if (!TEST_ptr_eq(cp, p))
+ goto err;
+
+ MYOBJ_allochello3(t1, p);
+ cp = MYOBJ_gethello3(t1);
+ if (!TEST_ptr_eq(cp, p))
+ goto err;
+
+ cp = MYOBJ_gethello(t2);
+ if (!TEST_ptr_null(cp))
+ goto err;
+
+ cp = MYOBJ_gethello2(t2);
+ if (!TEST_ptr_null(cp))
+ goto err;
+
+ t3 = MYOBJ_dup(t1);
+ if (!TEST_int_eq(t3->st, 1))
+ goto err;
+
+ ex_data = CRYPTO_get_ex_data(&t3->ex_data, saved_idx2);
+ if (!TEST_ptr(ex_data))
+ goto err;
+ if (!TEST_int_eq(ex_data->dup, 1))
+ goto err;
+
+ cp = MYOBJ_gethello(t3);
+ if (!TEST_ptr_eq(cp, p))
+ goto err;
+
+ cp = MYOBJ_gethello2(t3);
+ if (!TEST_ptr_eq(cp, p))
+ goto err;
+
+ cp = MYOBJ_gethello3(t3);
+ if (!TEST_ptr_eq(cp, p))
+ goto err;
+
+ if (gbl_result)
+ res = 1;
+ err:
+ MYOBJ_free(t1);
+ MYOBJ_free(t2);
+ MYOBJ_free(t3);
+ OPENSSL_free(saved_argp);
+ saved_argp = NULL;
+ OPENSSL_free(p);
+ return res;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_exdata);
+ return 1;
+}
diff --git a/test/exptest.c b/test/exptest.c
new file mode 100644
index 000000000000..59285b17a392
--- /dev/null
+++ b/test/exptest.c
@@ -0,0 +1,337 @@
+/*
+ * Copyright 1995-2023 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 <stdlib.h>
+#include <string.h>
+
+#include "internal/nelem.h"
+
+#include <openssl/bio.h>
+#include <openssl/bn.h>
+#include <openssl/rand.h>
+#include <openssl/err.h>
+
+#include "testutil.h"
+
+#define NUM_BITS (BN_BITS2 * 4)
+
+#define BN_print_var(v) test_output_bignum(#v, v)
+
+/*
+ * Test that r == 0 in test_exp_mod_zero(). Returns one on success,
+ * returns zero and prints debug output otherwise.
+ */
+static int a_is_zero_mod_one(const char *method, const BIGNUM *r,
+ const BIGNUM *a)
+{
+ if (!BN_is_zero(r)) {
+ TEST_error("%s failed: a ** 0 mod 1 = r (should be 0)", method);
+ BN_print_var(a);
+ BN_print_var(r);
+ return 0;
+ }
+ return 1;
+}
+
+/*
+ * test_mod_exp_zero tests that x**0 mod 1 == 0. It returns zero on success.
+ */
+static int test_mod_exp_zero(void)
+{
+ BIGNUM *a = NULL, *p = NULL, *m = NULL;
+ BIGNUM *r = NULL;
+ BN_ULONG one_word = 1;
+ BN_CTX *ctx = BN_CTX_new();
+ int ret = 0, failed = 0;
+ BN_MONT_CTX *mont = NULL;
+
+ if (!TEST_ptr(m = BN_new())
+ || !TEST_ptr(a = BN_new())
+ || !TEST_ptr(p = BN_new())
+ || !TEST_ptr(r = BN_new()))
+ goto err;
+
+ BN_one(m);
+ BN_one(a);
+ BN_zero(p);
+
+ if (!TEST_true(BN_rand(a, 1024, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)))
+ goto err;
+
+ if (!TEST_true(BN_mod_exp(r, a, p, m, ctx)))
+ goto err;
+
+ if (!TEST_true(a_is_zero_mod_one("BN_mod_exp", r, a)))
+ failed = 1;
+
+ if (!TEST_true(BN_mod_exp_recp(r, a, p, m, ctx)))
+ goto err;
+
+ if (!TEST_true(a_is_zero_mod_one("BN_mod_exp_recp", r, a)))
+ failed = 1;
+
+ if (!TEST_true(BN_mod_exp_simple(r, a, p, m, ctx)))
+ goto err;
+
+ if (!TEST_true(a_is_zero_mod_one("BN_mod_exp_simple", r, a)))
+ failed = 1;
+
+ if (!TEST_true(BN_mod_exp_mont(r, a, p, m, ctx, NULL)))
+ goto err;
+
+ if (!TEST_true(a_is_zero_mod_one("BN_mod_exp_mont", r, a)))
+ failed = 1;
+
+ if (!TEST_true(BN_mod_exp_mont_consttime(r, a, p, m, ctx, NULL)))
+ goto err;
+
+ if (!TEST_true(a_is_zero_mod_one("BN_mod_exp_mont_consttime", r, a)))
+ failed = 1;
+
+ if (!TEST_ptr(mont = BN_MONT_CTX_new()))
+ goto err;
+
+ ERR_set_mark();
+ /* mont is not set but passed in */
+ if (!TEST_false(BN_mod_exp_mont_consttime(r, p, a, m, ctx, mont)))
+ goto err;
+ if (!TEST_false(BN_mod_exp_mont(r, p, a, m, ctx, mont)))
+ goto err;
+ ERR_pop_to_mark();
+
+ if (!TEST_true(BN_MONT_CTX_set(mont, m, ctx)))
+ goto err;
+
+ /* we compute 0 ** a mod 1 here, to execute code that uses mont */
+ if (!TEST_true(BN_mod_exp_mont_consttime(r, p, a, m, ctx, mont)))
+ goto err;
+
+ if (!TEST_true(a_is_zero_mod_one("BN_mod_exp_mont_consttime", r, a)))
+ failed = 1;
+
+ if (!TEST_true(BN_mod_exp_mont(r, p, a, m, ctx, mont)))
+ goto err;
+
+ if (!TEST_true(a_is_zero_mod_one("BN_mod_exp_mont", r, a)))
+ failed = 1;
+
+ /*
+ * A different codepath exists for single word multiplication
+ * in non-constant-time only.
+ */
+ if (!TEST_true(BN_mod_exp_mont_word(r, one_word, p, m, ctx, NULL)))
+ goto err;
+
+ if (!TEST_BN_eq_zero(r)) {
+ TEST_error("BN_mod_exp_mont_word failed: "
+ "1 ** 0 mod 1 = r (should be 0)");
+ BN_print_var(r);
+ goto err;
+ }
+
+ ret = !failed;
+ err:
+ BN_free(r);
+ BN_free(a);
+ BN_free(p);
+ BN_free(m);
+ BN_MONT_CTX_free(mont);
+ BN_CTX_free(ctx);
+
+ return ret;
+}
+
+static int test_mod_exp(int round)
+{
+ BN_CTX *ctx;
+ unsigned char c;
+ int ret = 0;
+ BIGNUM *r_mont = NULL;
+ BIGNUM *r_mont_const = NULL;
+ BIGNUM *r_recp = NULL;
+ BIGNUM *r_simple = NULL;
+ BIGNUM *a = NULL;
+ BIGNUM *b = NULL;
+ BIGNUM *m = NULL;
+
+ if (!TEST_ptr(ctx = BN_CTX_new()))
+ goto err;
+
+ if (!TEST_ptr(r_mont = BN_new())
+ || !TEST_ptr(r_mont_const = BN_new())
+ || !TEST_ptr(r_recp = BN_new())
+ || !TEST_ptr(r_simple = BN_new())
+ || !TEST_ptr(a = BN_new())
+ || !TEST_ptr(b = BN_new())
+ || !TEST_ptr(m = BN_new()))
+ goto err;
+
+ if (!TEST_int_gt(RAND_bytes(&c, 1), 0))
+ goto err;
+ c = (c % BN_BITS) - BN_BITS2;
+ if (!TEST_true(BN_rand(a, NUM_BITS + c, BN_RAND_TOP_ONE,
+ BN_RAND_BOTTOM_ANY)))
+ goto err;
+
+ if (!TEST_int_gt(RAND_bytes(&c, 1), 0))
+ goto err;
+ c = (c % BN_BITS) - BN_BITS2;
+ if (!TEST_true(BN_rand(b, NUM_BITS + c, BN_RAND_TOP_ONE,
+ BN_RAND_BOTTOM_ANY)))
+ goto err;
+
+ if (!TEST_int_gt(RAND_bytes(&c, 1), 0))
+ goto err;
+ c = (c % BN_BITS) - BN_BITS2;
+ if (!TEST_true(BN_rand(m, NUM_BITS + c, BN_RAND_TOP_ONE,
+ BN_RAND_BOTTOM_ODD)))
+ goto err;
+
+ if (!TEST_true(BN_mod(a, a, m, ctx))
+ || !TEST_true(BN_mod(b, b, m, ctx))
+ || !TEST_true(BN_mod_exp_mont(r_mont, a, b, m, ctx, NULL))
+ || !TEST_true(BN_mod_exp_recp(r_recp, a, b, m, ctx))
+ || !TEST_true(BN_mod_exp_simple(r_simple, a, b, m, ctx))
+ || !TEST_true(BN_mod_exp_mont_consttime(r_mont_const, a, b, m, ctx, NULL)))
+ goto err;
+
+ if (!TEST_BN_eq(r_simple, r_mont)
+ || !TEST_BN_eq(r_simple, r_recp)
+ || !TEST_BN_eq(r_simple, r_mont_const)) {
+ if (BN_cmp(r_simple, r_mont) != 0)
+ TEST_info("simple and mont results differ");
+ if (BN_cmp(r_simple, r_mont_const) != 0)
+ TEST_info("simple and mont const time results differ");
+ if (BN_cmp(r_simple, r_recp) != 0)
+ TEST_info("simple and recp results differ");
+
+ BN_print_var(a);
+ BN_print_var(b);
+ BN_print_var(m);
+ BN_print_var(r_simple);
+ BN_print_var(r_recp);
+ BN_print_var(r_mont);
+ BN_print_var(r_mont_const);
+ goto err;
+ }
+
+ ret = 1;
+ err:
+ BN_free(r_mont);
+ BN_free(r_mont_const);
+ BN_free(r_recp);
+ BN_free(r_simple);
+ BN_free(a);
+ BN_free(b);
+ BN_free(m);
+ BN_CTX_free(ctx);
+
+ return ret;
+}
+
+static int test_mod_exp_x2(int idx)
+{
+ BN_CTX *ctx;
+ int ret = 0;
+ BIGNUM *r_mont_const_x2_1 = NULL;
+ BIGNUM *r_mont_const_x2_2 = NULL;
+ BIGNUM *r_simple1 = NULL;
+ BIGNUM *r_simple2 = NULL;
+ BIGNUM *a1 = NULL;
+ BIGNUM *b1 = NULL;
+ BIGNUM *m1 = NULL;
+ BIGNUM *a2 = NULL;
+ BIGNUM *b2 = NULL;
+ BIGNUM *m2 = NULL;
+ int factor_size = 0;
+
+ /*
+ * Currently only 1024-bit factor size is supported.
+ */
+ if (idx <= 100)
+ factor_size = 1024;
+
+ if (!TEST_ptr(ctx = BN_CTX_new()))
+ goto err;
+
+ if (!TEST_ptr(r_mont_const_x2_1 = BN_new())
+ || !TEST_ptr(r_mont_const_x2_2 = BN_new())
+ || !TEST_ptr(r_simple1 = BN_new())
+ || !TEST_ptr(r_simple2 = BN_new())
+ || !TEST_ptr(a1 = BN_new())
+ || !TEST_ptr(b1 = BN_new())
+ || !TEST_ptr(m1 = BN_new())
+ || !TEST_ptr(a2 = BN_new())
+ || !TEST_ptr(b2 = BN_new())
+ || !TEST_ptr(m2 = BN_new()))
+ goto err;
+
+ BN_rand(a1, factor_size, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY);
+ BN_rand(b1, factor_size, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY);
+ BN_rand(m1, factor_size, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD);
+ BN_rand(a2, factor_size, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY);
+ BN_rand(b2, factor_size, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY);
+ BN_rand(m2, factor_size, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD);
+
+ if (!TEST_true(BN_mod(a1, a1, m1, ctx))
+ || !TEST_true(BN_mod(b1, b1, m1, ctx))
+ || !TEST_true(BN_mod(a2, a2, m2, ctx))
+ || !TEST_true(BN_mod(b2, b2, m2, ctx))
+ || !TEST_true(BN_mod_exp_simple(r_simple1, a1, b1, m1, ctx))
+ || !TEST_true(BN_mod_exp_simple(r_simple2, a2, b2, m2, ctx))
+ || !TEST_true(BN_mod_exp_mont_consttime_x2(r_mont_const_x2_1, a1, b1, m1, NULL,
+ r_mont_const_x2_2, a2, b2, m2, NULL,
+ ctx)))
+ goto err;
+
+ if (!TEST_BN_eq(r_simple1, r_mont_const_x2_1)
+ || !TEST_BN_eq(r_simple2, r_mont_const_x2_2)) {
+ if (BN_cmp(r_simple1, r_mont_const_x2_1) != 0)
+ TEST_info("simple and mont const time x2 (#1) results differ");
+ if (BN_cmp(r_simple2, r_mont_const_x2_2) != 0)
+ TEST_info("simple and mont const time x2 (#2) results differ");
+
+ BN_print_var(a1);
+ BN_print_var(b1);
+ BN_print_var(m1);
+ BN_print_var(a2);
+ BN_print_var(b2);
+ BN_print_var(m2);
+ BN_print_var(r_simple1);
+ BN_print_var(r_simple2);
+ BN_print_var(r_mont_const_x2_1);
+ BN_print_var(r_mont_const_x2_2);
+ goto err;
+ }
+
+ ret = 1;
+ err:
+ BN_free(r_mont_const_x2_1);
+ BN_free(r_mont_const_x2_2);
+ BN_free(r_simple1);
+ BN_free(r_simple2);
+ BN_free(a1);
+ BN_free(b1);
+ BN_free(m1);
+ BN_free(a2);
+ BN_free(b2);
+ BN_free(m2);
+ BN_CTX_free(ctx);
+
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_mod_exp_zero);
+ ADD_ALL_TESTS(test_mod_exp, 200);
+ ADD_ALL_TESTS(test_mod_exp_x2, 100);
+ return 1;
+}
diff --git a/test/ext_internal_test.c b/test/ext_internal_test.c
new file mode 100644
index 000000000000..dec6ee61efb3
--- /dev/null
+++ b/test/ext_internal_test.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright 1995-2022 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/nelem.h"
+#include "../ssl/ssl_local.h"
+#include "../ssl/statem/statem_local.h"
+#include "testutil.h"
+
+#define EXT_ENTRY(name) { TLSEXT_IDX_##name, TLSEXT_TYPE_##name, #name }
+#define EXT_EXCEPTION(name) { TLSEXT_IDX_##name, TLSEXT_TYPE_invalid, #name }
+#define EXT_END(name) { TLSEXT_IDX_##name, TLSEXT_TYPE_out_of_range, #name }
+
+typedef struct {
+ size_t idx;
+ unsigned int type;
+ char *name;
+} EXT_LIST;
+
+/* The order here does matter! */
+static EXT_LIST ext_list[] = {
+
+ EXT_ENTRY(renegotiate),
+ EXT_ENTRY(server_name),
+ EXT_ENTRY(max_fragment_length),
+#ifndef OPENSSL_NO_SRP
+ EXT_ENTRY(srp),
+#else
+ EXT_EXCEPTION(srp),
+#endif
+ EXT_ENTRY(ec_point_formats),
+ EXT_ENTRY(supported_groups),
+ EXT_ENTRY(session_ticket),
+#ifndef OPENSSL_NO_OCSP
+ EXT_ENTRY(status_request),
+#else
+ EXT_EXCEPTION(status_request),
+#endif
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ EXT_ENTRY(next_proto_neg),
+#else
+ EXT_EXCEPTION(next_proto_neg),
+#endif
+ EXT_ENTRY(application_layer_protocol_negotiation),
+#ifndef OPENSSL_NO_SRTP
+ EXT_ENTRY(use_srtp),
+#else
+ EXT_EXCEPTION(use_srtp),
+#endif
+ EXT_ENTRY(encrypt_then_mac),
+#ifndef OPENSSL_NO_CT
+ EXT_ENTRY(signed_certificate_timestamp),
+#else
+ EXT_EXCEPTION(signed_certificate_timestamp),
+#endif
+ EXT_ENTRY(extended_master_secret),
+ EXT_ENTRY(signature_algorithms_cert),
+ EXT_ENTRY(post_handshake_auth),
+ EXT_ENTRY(signature_algorithms),
+ EXT_ENTRY(supported_versions),
+ EXT_ENTRY(psk_kex_modes),
+ EXT_ENTRY(key_share),
+ EXT_ENTRY(cookie),
+ EXT_ENTRY(cryptopro_bug),
+ EXT_ENTRY(early_data),
+ EXT_ENTRY(certificate_authorities),
+ EXT_ENTRY(padding),
+ EXT_ENTRY(psk),
+ EXT_END(num_builtins)
+};
+
+static int test_extension_list(void)
+{
+ size_t n = OSSL_NELEM(ext_list);
+ size_t i;
+ unsigned int type;
+ int retval = 1;
+
+ for (i = 0; i < n; i++) {
+ if (!TEST_size_t_eq(i, ext_list[i].idx)) {
+ retval = 0;
+ TEST_error("TLSEXT_IDX_%s=%zd, found at=%zd\n",
+ ext_list[i].name, ext_list[i].idx, i);
+ }
+ type = ossl_get_extension_type(ext_list[i].idx);
+ if (!TEST_uint_eq(type, ext_list[i].type)) {
+ retval = 0;
+ TEST_error("TLSEXT_IDX_%s=%zd expected=0x%05X got=0x%05X",
+ ext_list[i].name, ext_list[i].idx, ext_list[i].type,
+ type);
+ }
+ }
+ return retval;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_extension_list);
+ return 1;
+}
diff --git a/test/fake_rsaprov.c b/test/fake_rsaprov.c
new file mode 100644
index 000000000000..be08bfd39981
--- /dev/null
+++ b/test/fake_rsaprov.c
@@ -0,0 +1,531 @@
+/*
+ * Copyright 2021-2022 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <string.h>
+#include <openssl/core_names.h>
+#include <openssl/core_object.h>
+#include <openssl/rand.h>
+#include <openssl/provider.h>
+#include "testutil.h"
+#include "fake_rsaprov.h"
+
+static OSSL_FUNC_keymgmt_new_fn fake_rsa_keymgmt_new;
+static OSSL_FUNC_keymgmt_free_fn fake_rsa_keymgmt_free;
+static OSSL_FUNC_keymgmt_has_fn fake_rsa_keymgmt_has;
+static OSSL_FUNC_keymgmt_query_operation_name_fn fake_rsa_keymgmt_query;
+static OSSL_FUNC_keymgmt_import_fn fake_rsa_keymgmt_import;
+static OSSL_FUNC_keymgmt_import_types_fn fake_rsa_keymgmt_imptypes;
+static OSSL_FUNC_keymgmt_export_fn fake_rsa_keymgmt_export;
+static OSSL_FUNC_keymgmt_export_types_fn fake_rsa_keymgmt_exptypes;
+static OSSL_FUNC_keymgmt_load_fn fake_rsa_keymgmt_load;
+
+static int has_selection;
+static int imptypes_selection;
+static int exptypes_selection;
+static int query_id;
+
+struct fake_rsa_keydata {
+ int selection;
+ int status;
+};
+
+static void *fake_rsa_keymgmt_new(void *provctx)
+{
+ struct fake_rsa_keydata *key;
+
+ if (!TEST_ptr(key = OPENSSL_zalloc(sizeof(struct fake_rsa_keydata))))
+ return NULL;
+
+ /* clear test globals */
+ has_selection = 0;
+ imptypes_selection = 0;
+ exptypes_selection = 0;
+ query_id = 0;
+
+ return key;
+}
+
+static void fake_rsa_keymgmt_free(void *keydata)
+{
+ OPENSSL_free(keydata);
+}
+
+static int fake_rsa_keymgmt_has(const void *key, int selection)
+{
+ /* record global for checking */
+ has_selection = selection;
+
+ return 1;
+}
+
+
+static const char *fake_rsa_keymgmt_query(int id)
+{
+ /* record global for checking */
+ query_id = id;
+
+ return "RSA";
+}
+
+static int fake_rsa_keymgmt_import(void *keydata, int selection,
+ const OSSL_PARAM *p)
+{
+ struct fake_rsa_keydata *fake_rsa_key = keydata;
+
+ /* key was imported */
+ fake_rsa_key->status = 1;
+
+ return 1;
+}
+
+static unsigned char fake_rsa_n[] =
+ "\x00\xAA\x36\xAB\xCE\x88\xAC\xFD\xFF\x55\x52\x3C\x7F\xC4\x52\x3F"
+ "\x90\xEF\xA0\x0D\xF3\x77\x4A\x25\x9F\x2E\x62\xB4\xC5\xD9\x9C\xB5"
+ "\xAD\xB3\x00\xA0\x28\x5E\x53\x01\x93\x0E\x0C\x70\xFB\x68\x76\x93"
+ "\x9C\xE6\x16\xCE\x62\x4A\x11\xE0\x08\x6D\x34\x1E\xBC\xAC\xA0\xA1"
+ "\xF5";
+
+static unsigned char fake_rsa_e[] = "\x11";
+
+static unsigned char fake_rsa_d[] =
+ "\x0A\x03\x37\x48\x62\x64\x87\x69\x5F\x5F\x30\xBC\x38\xB9\x8B\x44"
+ "\xC2\xCD\x2D\xFF\x43\x40\x98\xCD\x20\xD8\xA1\x38\xD0\x90\xBF\x64"
+ "\x79\x7C\x3F\xA7\xA2\xCD\xCB\x3C\xD1\xE0\xBD\xBA\x26\x54\xB4\xF9"
+ "\xDF\x8E\x8A\xE5\x9D\x73\x3D\x9F\x33\xB3\x01\x62\x4A\xFD\x1D\x51";
+
+static unsigned char fake_rsa_p[] =
+ "\x00\xD8\x40\xB4\x16\x66\xB4\x2E\x92\xEA\x0D\xA3\xB4\x32\x04\xB5"
+ "\xCF\xCE\x33\x52\x52\x4D\x04\x16\xA5\xA4\x41\xE7\x00\xAF\x46\x12"
+ "\x0D";
+
+static unsigned char fake_rsa_q[] =
+ "\x00\xC9\x7F\xB1\xF0\x27\xF4\x53\xF6\x34\x12\x33\xEA\xAA\xD1\xD9"
+ "\x35\x3F\x6C\x42\xD0\x88\x66\xB1\xD0\x5A\x0F\x20\x35\x02\x8B\x9D"
+ "\x89";
+
+static unsigned char fake_rsa_dmp1[] =
+ "\x59\x0B\x95\x72\xA2\xC2\xA9\xC4\x06\x05\x9D\xC2\xAB\x2F\x1D\xAF"
+ "\xEB\x7E\x8B\x4F\x10\xA7\x54\x9E\x8E\xED\xF5\xB4\xFC\xE0\x9E\x05";
+
+static unsigned char fake_rsa_dmq1[] =
+ "\x00\x8E\x3C\x05\x21\xFE\x15\xE0\xEA\x06\xA3\x6F\xF0\xF1\x0C\x99"
+ "\x52\xC3\x5B\x7A\x75\x14\xFD\x32\x38\xB8\x0A\xAD\x52\x98\x62\x8D"
+ "\x51";
+
+static unsigned char fake_rsa_iqmp[] =
+ "\x36\x3F\xF7\x18\x9D\xA8\xE9\x0B\x1D\x34\x1F\x71\xD0\x9B\x76\xA8"
+ "\xA9\x43\xE1\x1D\x10\xB2\x4D\x24\x9F\x2D\xEA\xFE\xF8\x0C\x18\x26";
+
+OSSL_PARAM *fake_rsa_key_params(int priv)
+{
+ if (priv) {
+ OSSL_PARAM params[] = {
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_N, fake_rsa_n,
+ sizeof(fake_rsa_n) -1),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_E, fake_rsa_e,
+ sizeof(fake_rsa_e) -1),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_D, fake_rsa_d,
+ sizeof(fake_rsa_d) -1),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_FACTOR1, fake_rsa_p,
+ sizeof(fake_rsa_p) -1),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_FACTOR2, fake_rsa_q,
+ sizeof(fake_rsa_q) -1),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_EXPONENT1, fake_rsa_dmp1,
+ sizeof(fake_rsa_dmp1) -1),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_EXPONENT2, fake_rsa_dmq1,
+ sizeof(fake_rsa_dmq1) -1),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_COEFFICIENT1, fake_rsa_iqmp,
+ sizeof(fake_rsa_iqmp) -1),
+ OSSL_PARAM_END
+ };
+ return OSSL_PARAM_dup(params);
+ } else {
+ OSSL_PARAM params[] = {
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_N, fake_rsa_n,
+ sizeof(fake_rsa_n) -1),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_E, fake_rsa_e,
+ sizeof(fake_rsa_e) -1),
+ OSSL_PARAM_END
+ };
+ return OSSL_PARAM_dup(params);
+ }
+}
+
+static int fake_rsa_keymgmt_export(void *keydata, int selection,
+ OSSL_CALLBACK *param_callback, void *cbarg)
+{
+ OSSL_PARAM *params = NULL;
+ int ret;
+
+ if (selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY)
+ return 0;
+
+ if (!TEST_ptr(params = fake_rsa_key_params(0)))
+ return 0;
+
+ ret = param_callback(params, cbarg);
+ OSSL_PARAM_free(params);
+ return ret;
+}
+
+static const OSSL_PARAM fake_rsa_import_key_types[] = {
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_N, NULL, 0),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_E, NULL, 0),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_D, NULL, 0),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_FACTOR1, NULL, 0),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_FACTOR2, NULL, 0),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_EXPONENT1, NULL, 0),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_EXPONENT2, NULL, 0),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_COEFFICIENT1, NULL, 0),
+ OSSL_PARAM_END
+};
+
+static const OSSL_PARAM *fake_rsa_keymgmt_imptypes(int selection)
+{
+ /* record global for checking */
+ imptypes_selection = selection;
+
+ return fake_rsa_import_key_types;
+}
+
+static const OSSL_PARAM fake_rsa_export_key_types[] = {
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_N, NULL, 0),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_RSA_E, NULL, 0),
+ OSSL_PARAM_END
+};
+
+static const OSSL_PARAM *fake_rsa_keymgmt_exptypes(int selection)
+{
+ /* record global for checking */
+ exptypes_selection = selection;
+
+ return fake_rsa_export_key_types;
+}
+
+static void *fake_rsa_keymgmt_load(const void *reference, size_t reference_sz)
+{
+ struct fake_rsa_keydata *key = NULL;
+
+ if (reference_sz != sizeof(*key))
+ return NULL;
+
+ key = *(struct fake_rsa_keydata **)reference;
+ if (key->status != 1)
+ return NULL;
+
+ /* detach the reference */
+ *(struct fake_rsa_keydata **)reference = NULL;
+
+ return key;
+}
+
+static void *fake_rsa_gen_init(void *provctx, int selection,
+ const OSSL_PARAM params[])
+{
+ unsigned char *gctx = NULL;
+
+ if (!TEST_ptr(gctx = OPENSSL_malloc(1)))
+ return NULL;
+
+ *gctx = 1;
+
+ return gctx;
+}
+
+static void *fake_rsa_gen(void *genctx, OSSL_CALLBACK *osslcb, void *cbarg)
+{
+ unsigned char *gctx = genctx;
+ static const unsigned char inited[] = { 1 };
+ struct fake_rsa_keydata *keydata;
+
+ if (!TEST_ptr(gctx)
+ || !TEST_mem_eq(gctx, sizeof(*gctx), inited, sizeof(inited)))
+ return NULL;
+
+ if (!TEST_ptr(keydata = fake_rsa_keymgmt_new(NULL)))
+ return NULL;
+
+ keydata->status = 2;
+ return keydata;
+}
+
+static void fake_rsa_gen_cleanup(void *genctx)
+{
+ OPENSSL_free(genctx);
+}
+
+static const OSSL_DISPATCH fake_rsa_keymgmt_funcs[] = {
+ { OSSL_FUNC_KEYMGMT_NEW, (void (*)(void))fake_rsa_keymgmt_new },
+ { OSSL_FUNC_KEYMGMT_FREE, (void (*)(void))fake_rsa_keymgmt_free} ,
+ { OSSL_FUNC_KEYMGMT_HAS, (void (*)(void))fake_rsa_keymgmt_has },
+ { OSSL_FUNC_KEYMGMT_QUERY_OPERATION_NAME,
+ (void (*)(void))fake_rsa_keymgmt_query },
+ { OSSL_FUNC_KEYMGMT_IMPORT, (void (*)(void))fake_rsa_keymgmt_import },
+ { OSSL_FUNC_KEYMGMT_IMPORT_TYPES,
+ (void (*)(void))fake_rsa_keymgmt_imptypes },
+ { OSSL_FUNC_KEYMGMT_EXPORT, (void (*)(void))fake_rsa_keymgmt_export },
+ { OSSL_FUNC_KEYMGMT_EXPORT_TYPES,
+ (void (*)(void))fake_rsa_keymgmt_exptypes },
+ { OSSL_FUNC_KEYMGMT_LOAD, (void (*)(void))fake_rsa_keymgmt_load },
+ { OSSL_FUNC_KEYMGMT_GEN_INIT, (void (*)(void))fake_rsa_gen_init },
+ { OSSL_FUNC_KEYMGMT_GEN, (void (*)(void))fake_rsa_gen },
+ { OSSL_FUNC_KEYMGMT_GEN_CLEANUP, (void (*)(void))fake_rsa_gen_cleanup },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM fake_rsa_keymgmt_algs[] = {
+ { "RSA:rsaEncryption", "provider=fake-rsa", fake_rsa_keymgmt_funcs, "Fake RSA Key Management" },
+ { NULL, NULL, NULL, NULL }
+};
+
+static OSSL_FUNC_signature_newctx_fn fake_rsa_sig_newctx;
+static OSSL_FUNC_signature_freectx_fn fake_rsa_sig_freectx;
+static OSSL_FUNC_signature_sign_init_fn fake_rsa_sig_sign_init;
+static OSSL_FUNC_signature_sign_fn fake_rsa_sig_sign;
+
+static void *fake_rsa_sig_newctx(void *provctx, const char *propq)
+{
+ unsigned char *sigctx = OPENSSL_zalloc(1);
+
+ TEST_ptr(sigctx);
+
+ return sigctx;
+}
+
+static void fake_rsa_sig_freectx(void *sigctx)
+{
+ OPENSSL_free(sigctx);
+}
+
+static int fake_rsa_sig_sign_init(void *ctx, void *provkey,
+ const OSSL_PARAM params[])
+{
+ unsigned char *sigctx = ctx;
+ struct fake_rsa_keydata *keydata = provkey;
+
+ /* we must have a ctx */
+ if (!TEST_ptr(sigctx))
+ return 0;
+
+ /* we must have some initialized key */
+ if (!TEST_ptr(keydata) || !TEST_int_gt(keydata->status, 0))
+ return 0;
+
+ /* record that sign init was called */
+ *sigctx = 1;
+ return 1;
+}
+
+static int fake_rsa_sig_sign(void *ctx, unsigned char *sig,
+ size_t *siglen, size_t sigsize,
+ const unsigned char *tbs, size_t tbslen)
+{
+ unsigned char *sigctx = ctx;
+
+ /* we must have a ctx and init was called upon it */
+ if (!TEST_ptr(sigctx) || !TEST_int_eq(*sigctx, 1))
+ return 0;
+
+ *siglen = 256;
+ /* record that the real sign operation was called */
+ if (sig != NULL) {
+ if (!TEST_int_ge(sigsize, *siglen))
+ return 0;
+ *sigctx = 2;
+ /* produce a fake signature */
+ memset(sig, 'a', *siglen);
+ }
+
+ return 1;
+}
+
+static const OSSL_DISPATCH fake_rsa_sig_funcs[] = {
+ { OSSL_FUNC_SIGNATURE_NEWCTX, (void (*)(void))fake_rsa_sig_newctx },
+ { OSSL_FUNC_SIGNATURE_FREECTX, (void (*)(void))fake_rsa_sig_freectx },
+ { OSSL_FUNC_SIGNATURE_SIGN_INIT, (void (*)(void))fake_rsa_sig_sign_init },
+ { OSSL_FUNC_SIGNATURE_SIGN, (void (*)(void))fake_rsa_sig_sign },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM fake_rsa_sig_algs[] = {
+ { "RSA:rsaEncryption", "provider=fake-rsa", fake_rsa_sig_funcs, "Fake RSA Signature" },
+ { NULL, NULL, NULL, NULL }
+};
+
+static OSSL_FUNC_store_open_fn fake_rsa_st_open;
+static OSSL_FUNC_store_settable_ctx_params_fn fake_rsa_st_settable_ctx_params;
+static OSSL_FUNC_store_set_ctx_params_fn fake_rsa_st_set_ctx_params;
+static OSSL_FUNC_store_load_fn fake_rsa_st_load;
+static OSSL_FUNC_store_eof_fn fake_rsa_st_eof;
+static OSSL_FUNC_store_close_fn fake_rsa_st_close;
+
+static const char fake_rsa_scheme[] = "fake_rsa:";
+
+static void *fake_rsa_st_open(void *provctx, const char *uri)
+{
+ unsigned char *storectx = NULL;
+
+ /* First check whether the uri is ours */
+ if (strncmp(uri, fake_rsa_scheme, sizeof(fake_rsa_scheme) - 1) != 0)
+ return NULL;
+
+ storectx = OPENSSL_zalloc(1);
+ if (!TEST_ptr(storectx))
+ return NULL;
+
+ TEST_info("fake_rsa_open called");
+
+ return storectx;
+}
+
+static const OSSL_PARAM *fake_rsa_st_settable_ctx_params(void *provctx)
+{
+ static const OSSL_PARAM known_settable_ctx_params[] = {
+ OSSL_PARAM_END
+ };
+ return known_settable_ctx_params;
+}
+
+static int fake_rsa_st_set_ctx_params(void *loaderctx,
+ const OSSL_PARAM params[])
+{
+ return 1;
+}
+
+static int fake_rsa_st_load(void *loaderctx,
+ OSSL_CALLBACK *object_cb, void *object_cbarg,
+ OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)
+{
+ unsigned char *storectx = loaderctx;
+ OSSL_PARAM params[4];
+ int object_type = OSSL_OBJECT_PKEY;
+ struct fake_rsa_keydata *key = NULL;
+ int rv = 0;
+
+ switch (*storectx) {
+ case 0:
+ /* Construct a new key using our keymgmt functions */
+ if (!TEST_ptr(key = fake_rsa_keymgmt_new(NULL)))
+ break;
+ if (!TEST_int_gt(fake_rsa_keymgmt_import(key, 0, NULL), 0))
+ break;
+ params[0] =
+ OSSL_PARAM_construct_int(OSSL_OBJECT_PARAM_TYPE, &object_type);
+ params[1] =
+ OSSL_PARAM_construct_utf8_string(OSSL_OBJECT_PARAM_DATA_TYPE,
+ "RSA", 0);
+ /* The address of the key becomes the octet string */
+ params[2] =
+ OSSL_PARAM_construct_octet_string(OSSL_OBJECT_PARAM_REFERENCE,
+ &key, sizeof(*key));
+ params[3] = OSSL_PARAM_construct_end();
+ rv = object_cb(params, object_cbarg);
+ *storectx = 1;
+ break;
+
+ case 2:
+ TEST_info("fake_rsa_load() called in error state");
+ break;
+
+ default:
+ TEST_info("fake_rsa_load() called in eof state");
+ break;
+ }
+
+ TEST_info("fake_rsa_load called - rv: %d", rv);
+
+ if (rv == 0) {
+ fake_rsa_keymgmt_free(key);
+ *storectx = 2;
+ }
+ return rv;
+}
+
+static int fake_rsa_st_eof(void *loaderctx)
+{
+ unsigned char *storectx = loaderctx;
+
+ /* just one key for now in the fake_rsa store */
+ return *storectx != 0;
+}
+
+static int fake_rsa_st_close(void *loaderctx)
+{
+ OPENSSL_free(loaderctx);
+ return 1;
+}
+
+static const OSSL_DISPATCH fake_rsa_store_funcs[] = {
+ { OSSL_FUNC_STORE_OPEN, (void (*)(void))fake_rsa_st_open },
+ { OSSL_FUNC_STORE_SETTABLE_CTX_PARAMS,
+ (void (*)(void))fake_rsa_st_settable_ctx_params },
+ { OSSL_FUNC_STORE_SET_CTX_PARAMS, (void (*)(void))fake_rsa_st_set_ctx_params },
+ { OSSL_FUNC_STORE_LOAD, (void (*)(void))fake_rsa_st_load },
+ { OSSL_FUNC_STORE_EOF, (void (*)(void))fake_rsa_st_eof },
+ { OSSL_FUNC_STORE_CLOSE, (void (*)(void))fake_rsa_st_close },
+ { 0, NULL },
+};
+
+static const OSSL_ALGORITHM fake_rsa_store_algs[] = {
+ { "fake_rsa", "provider=fake-rsa", fake_rsa_store_funcs },
+ { NULL, NULL, NULL }
+};
+
+static const OSSL_ALGORITHM *fake_rsa_query(void *provctx,
+ int operation_id,
+ int *no_cache)
+{
+ *no_cache = 0;
+ switch (operation_id) {
+ case OSSL_OP_SIGNATURE:
+ return fake_rsa_sig_algs;
+
+ case OSSL_OP_KEYMGMT:
+ return fake_rsa_keymgmt_algs;
+
+ case OSSL_OP_STORE:
+ return fake_rsa_store_algs;
+ }
+ return NULL;
+}
+
+/* Functions we provide to the core */
+static const OSSL_DISPATCH fake_rsa_method[] = {
+ { OSSL_FUNC_PROVIDER_TEARDOWN, (void (*)(void))OSSL_LIB_CTX_free },
+ { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void))fake_rsa_query },
+ { 0, NULL }
+};
+
+static int fake_rsa_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out, void **provctx)
+{
+ if (!TEST_ptr(*provctx = OSSL_LIB_CTX_new()))
+ return 0;
+ *out = fake_rsa_method;
+ return 1;
+}
+
+OSSL_PROVIDER *fake_rsa_start(OSSL_LIB_CTX *libctx)
+{
+ OSSL_PROVIDER *p;
+
+ if (!TEST_true(OSSL_PROVIDER_add_builtin(libctx, "fake-rsa",
+ fake_rsa_provider_init))
+ || !TEST_ptr(p = OSSL_PROVIDER_try_load(libctx, "fake-rsa", 1)))
+ return NULL;
+
+ return p;
+}
+
+void fake_rsa_finish(OSSL_PROVIDER *p)
+{
+ OSSL_PROVIDER_unload(p);
+}
diff --git a/test/fake_rsaprov.h b/test/fake_rsaprov.h
new file mode 100644
index 000000000000..190c46a285c0
--- /dev/null
+++ b/test/fake_rsaprov.h
@@ -0,0 +1,15 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/core_dispatch.h>
+
+/* Fake RSA provider implementation */
+OSSL_PROVIDER *fake_rsa_start(OSSL_LIB_CTX *libctx);
+void fake_rsa_finish(OSSL_PROVIDER *p);
+OSSL_PARAM *fake_rsa_key_params(int priv);
diff --git a/test/fatalerrtest.c b/test/fatalerrtest.c
new file mode 100644
index 000000000000..30930d9ce8a5
--- /dev/null
+++ b/test/fatalerrtest.c
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2017-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/ssl.h>
+#include <openssl/err.h>
+#include "helpers/ssltestlib.h"
+#include "testutil.h"
+#include <string.h>
+
+static char *cert = NULL;
+static char *privkey = NULL;
+
+static int test_fatalerr(void)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *sssl = NULL, *cssl = NULL;
+ const char *msg = "Dummy";
+ BIO *wbio = NULL;
+ int ret = 0, len;
+ char buf[80];
+ unsigned char dummyrec[] = {
+ 0x17, 0x03, 0x03, 0x00, 0x05, 'D', 'u', 'm', 'm', 'y'
+ };
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, TLS_method(), TLS_method(),
+ TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto err;
+
+ /*
+ * Deliberately set the cipher lists for client and server to be different
+ * to force a handshake failure.
+ */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "AES128-SHA"))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx, "AES256-SHA"))
+ || !TEST_true(SSL_CTX_set_ciphersuites(sctx,
+ "TLS_AES_128_GCM_SHA256"))
+ || !TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ "TLS_AES_256_GCM_SHA384"))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &sssl, &cssl, NULL,
+ NULL)))
+ goto err;
+
+ wbio = SSL_get_wbio(cssl);
+ if (!TEST_ptr(wbio)) {
+ printf("Unexpected NULL bio received\n");
+ goto err;
+ }
+
+ /* Connection should fail */
+ if (!TEST_false(create_ssl_connection(sssl, cssl, SSL_ERROR_NONE)))
+ goto err;
+
+ ERR_clear_error();
+
+ /* Inject a plaintext record from client to server */
+ if (!TEST_int_gt(BIO_write(wbio, dummyrec, sizeof(dummyrec)), 0))
+ goto err;
+
+ /* SSL_read()/SSL_write should fail because of a previous fatal error */
+ if (!TEST_int_le(len = SSL_read(sssl, buf, sizeof(buf) - 1), 0)) {
+ buf[len] = '\0';
+ TEST_error("Unexpected success reading data: %s\n", buf);
+ goto err;
+ }
+ if (!TEST_int_le(SSL_write(sssl, msg, strlen(msg)), 0))
+ goto err;
+
+ ret = 1;
+ err:
+ SSL_free(sssl);
+ SSL_free(cssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return ret;
+}
+
+OPT_TEST_DECLARE_USAGE("certfile privkeyfile\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(cert = test_get_argument(0))
+ || !TEST_ptr(privkey = test_get_argument(1)))
+ return 0;
+
+ ADD_TEST(test_fatalerr);
+
+ return 1;
+}
diff --git a/test/ffc_internal_test.c b/test/ffc_internal_test.c
new file mode 100644
index 000000000000..83dec13c8c9b
--- /dev/null
+++ b/test/ffc_internal_test.c
@@ -0,0 +1,711 @@
+/*
+ * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2019-2020, Oracle and/or its affiliates. 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
+ */
+
+/*
+ * This is an internal test that is intentionally using internal APIs. Some of
+ * those APIs are deprecated for public use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "internal/nelem.h"
+#include <openssl/crypto.h>
+#include <openssl/bio.h>
+#include <openssl/bn.h>
+#include <openssl/rand.h>
+#include <openssl/err.h>
+#include "testutil.h"
+
+#include "internal/ffc.h"
+#include "crypto/security_bits.h"
+
+#ifndef OPENSSL_NO_DSA
+static const unsigned char dsa_2048_224_sha224_p[] = {
+ 0x93, 0x57, 0x93, 0x62, 0x1b, 0x9a, 0x10, 0x9b, 0xc1, 0x56, 0x0f, 0x24,
+ 0x71, 0x76, 0x4e, 0xd3, 0xed, 0x78, 0x78, 0x7a, 0xbf, 0x89, 0x71, 0x67,
+ 0x8e, 0x03, 0xd8, 0x5b, 0xcd, 0x22, 0x8f, 0x70, 0x74, 0xff, 0x22, 0x05,
+ 0x07, 0x0c, 0x4c, 0x60, 0xed, 0x41, 0xe1, 0x9e, 0x9c, 0xaa, 0x3e, 0x19,
+ 0x5c, 0x3d, 0x80, 0x58, 0xb2, 0x7f, 0x5f, 0x89, 0xec, 0xb5, 0x19, 0xdb,
+ 0x06, 0x11, 0xe9, 0x78, 0x5c, 0xf9, 0xa0, 0x9e, 0x70, 0x62, 0x14, 0x7b,
+ 0xda, 0x92, 0xbf, 0xb2, 0x6b, 0x01, 0x6f, 0xb8, 0x68, 0x9c, 0x89, 0x36,
+ 0x89, 0x72, 0x79, 0x49, 0x93, 0x3d, 0x14, 0xb2, 0x2d, 0xbb, 0xf0, 0xdf,
+ 0x94, 0x45, 0x0b, 0x5f, 0xf1, 0x75, 0x37, 0xeb, 0x49, 0xb9, 0x2d, 0xce,
+ 0xb7, 0xf4, 0x95, 0x77, 0xc2, 0xe9, 0x39, 0x1c, 0x4e, 0x0c, 0x40, 0x62,
+ 0x33, 0x0a, 0xe6, 0x29, 0x6f, 0xba, 0xef, 0x02, 0xdd, 0x0d, 0xe4, 0x04,
+ 0x01, 0x70, 0x40, 0xb9, 0xc9, 0x7e, 0x2f, 0x10, 0x37, 0xe9, 0xde, 0xb0,
+ 0xf6, 0xeb, 0x71, 0x7f, 0x9c, 0x35, 0x16, 0xf3, 0x0d, 0xc4, 0xe8, 0x02,
+ 0x37, 0x6c, 0xdd, 0xb3, 0x8d, 0x2d, 0x1e, 0x28, 0x13, 0x22, 0x89, 0x40,
+ 0xe5, 0xfa, 0x16, 0x67, 0xd6, 0xda, 0x12, 0xa2, 0x38, 0x83, 0x25, 0xcc,
+ 0x26, 0xc1, 0x27, 0x74, 0xfe, 0xf6, 0x7a, 0xb6, 0xa1, 0xe4, 0xe8, 0xdf,
+ 0x5d, 0xd2, 0x9c, 0x2f, 0xec, 0xea, 0x08, 0xca, 0x48, 0xdb, 0x18, 0x4b,
+ 0x12, 0xee, 0x16, 0x9b, 0xa6, 0x00, 0xa0, 0x18, 0x98, 0x7d, 0xce, 0x6c,
+ 0x6d, 0xf8, 0xfc, 0x95, 0x51, 0x1b, 0x0a, 0x40, 0xb6, 0xfc, 0xe5, 0xe2,
+ 0xb0, 0x26, 0x53, 0x4c, 0xd7, 0xfe, 0xaa, 0x6d, 0xbc, 0xdd, 0xc0, 0x61,
+ 0x65, 0xe4, 0x89, 0x44, 0x18, 0x6f, 0xd5, 0x39, 0xcf, 0x75, 0x6d, 0x29,
+ 0xcc, 0xf8, 0x40, 0xab
+};
+static const unsigned char dsa_2048_224_sha224_q[] = {
+ 0xf2, 0x5e, 0x4e, 0x9a, 0x15, 0xa8, 0x13, 0xdf, 0xa3, 0x17, 0x90, 0xc6,
+ 0xd6, 0x5e, 0xb1, 0xfb, 0x31, 0xf8, 0xb5, 0xb1, 0x4b, 0xa7, 0x6d, 0xde,
+ 0x57, 0x76, 0x6f, 0x11
+};
+static const unsigned char dsa_2048_224_sha224_seed[] = {
+ 0xd2, 0xb1, 0x36, 0xd8, 0x5b, 0x8e, 0xa4, 0xb2, 0x6a, 0xab, 0x4e, 0x85,
+ 0x8b, 0x49, 0xf9, 0xdd, 0xe6, 0xa1, 0xcd, 0xad, 0x49, 0x52, 0xe9, 0xb3,
+ 0x36, 0x17, 0x06, 0xcf
+};
+static const unsigned char dsa_2048_224_sha224_bad_seed[] = {
+ 0xd2, 0xb1, 0x36, 0xd8, 0x5b, 0x8e, 0xa4, 0xb2, 0x6a, 0xab, 0x4e, 0x85,
+ 0x8b, 0x49, 0xf9, 0xdd, 0xe6, 0xa1, 0xcd, 0xad, 0x49, 0x52, 0xe9, 0xb3,
+ 0x36, 0x17, 0x06, 0xd0
+};
+static int dsa_2048_224_sha224_counter = 2878;
+
+static const unsigned char dsa_3072_256_sha512_p[] = {
+ 0x9a, 0x82, 0x8b, 0x8d, 0xea, 0xd0, 0x56, 0x23, 0x88, 0x2d, 0x5d, 0x41,
+ 0x42, 0x4c, 0x13, 0x5a, 0x15, 0x81, 0x59, 0x02, 0xc5, 0x00, 0x82, 0x28,
+ 0x01, 0xee, 0x8f, 0x99, 0xfd, 0x6a, 0x95, 0xf2, 0x0f, 0xae, 0x34, 0x77,
+ 0x29, 0xcc, 0xc7, 0x50, 0x0e, 0x03, 0xef, 0xb0, 0x4d, 0xe5, 0x10, 0x00,
+ 0xa8, 0x7b, 0xce, 0x8c, 0xc6, 0xb2, 0x01, 0x74, 0x23, 0x1b, 0x7f, 0xe8,
+ 0xf9, 0x71, 0x28, 0x39, 0xcf, 0x18, 0x04, 0xb2, 0x95, 0x61, 0x2d, 0x11,
+ 0x71, 0x6b, 0xdd, 0x0d, 0x0b, 0xf0, 0xe6, 0x97, 0x52, 0x29, 0x9d, 0x45,
+ 0xb1, 0x23, 0xda, 0xb0, 0xd5, 0xcb, 0x51, 0x71, 0x8e, 0x40, 0x9c, 0x97,
+ 0x13, 0xea, 0x1f, 0x4b, 0x32, 0x5d, 0x27, 0x74, 0x81, 0x8d, 0x47, 0x8a,
+ 0x08, 0xce, 0xf4, 0xd1, 0x28, 0xa2, 0x0f, 0x9b, 0x2e, 0xc9, 0xa3, 0x0e,
+ 0x5d, 0xde, 0x47, 0x19, 0x6d, 0x5f, 0x98, 0xe0, 0x8e, 0x7f, 0x60, 0x8f,
+ 0x25, 0xa7, 0xa4, 0xeb, 0xb9, 0xf3, 0x24, 0xa4, 0x9e, 0xc1, 0xbd, 0x14,
+ 0x27, 0x7c, 0x27, 0xc8, 0x4f, 0x5f, 0xed, 0xfd, 0x86, 0xc8, 0xf1, 0xd7,
+ 0x82, 0xe2, 0xeb, 0xe5, 0xd2, 0xbe, 0xb0, 0x65, 0x28, 0xab, 0x99, 0x9e,
+ 0xcd, 0xd5, 0x22, 0xf8, 0x1b, 0x3b, 0x01, 0xe9, 0x20, 0x3d, 0xe4, 0x98,
+ 0x22, 0xfe, 0xfc, 0x09, 0x7e, 0x95, 0x20, 0xda, 0xb6, 0x12, 0x2c, 0x94,
+ 0x5c, 0xea, 0x74, 0x71, 0xbd, 0x19, 0xac, 0x78, 0x43, 0x02, 0x51, 0xb8,
+ 0x5f, 0x06, 0x1d, 0xea, 0xc8, 0xa4, 0x3b, 0xc9, 0x78, 0xa3, 0x2b, 0x09,
+ 0xdc, 0x76, 0x74, 0xc4, 0x23, 0x14, 0x48, 0x2e, 0x84, 0x2b, 0xa3, 0x82,
+ 0xc1, 0xba, 0x0b, 0x39, 0x2a, 0x9f, 0x24, 0x7b, 0xd6, 0xc2, 0xea, 0x5a,
+ 0xb6, 0xbd, 0x15, 0x82, 0x21, 0x85, 0xe0, 0x6b, 0x12, 0x4f, 0x8d, 0x64,
+ 0x75, 0xeb, 0x7e, 0xa1, 0xdb, 0xe0, 0x9d, 0x25, 0xae, 0x3b, 0xe9, 0x9b,
+ 0x21, 0x7f, 0x9a, 0x3d, 0x66, 0xd0, 0x52, 0x1d, 0x39, 0x8b, 0xeb, 0xfc,
+ 0xec, 0xbe, 0x72, 0x20, 0x5a, 0xdf, 0x1b, 0x00, 0xf1, 0x0e, 0xed, 0xc6,
+ 0x78, 0x6f, 0xc9, 0xab, 0xe4, 0xd6, 0x81, 0x8b, 0xcc, 0xf6, 0xd4, 0x6a,
+ 0x31, 0x62, 0x08, 0xd9, 0x38, 0x21, 0x8f, 0xda, 0x9e, 0xb1, 0x2b, 0x9c,
+ 0xc0, 0xbe, 0xf7, 0x9a, 0x43, 0x2d, 0x07, 0x59, 0x46, 0x0e, 0xd5, 0x23,
+ 0x4e, 0xaa, 0x4a, 0x04, 0xc2, 0xde, 0x33, 0xa6, 0x34, 0xba, 0xac, 0x4f,
+ 0x78, 0xd8, 0xca, 0x76, 0xce, 0x5e, 0xd4, 0xf6, 0x85, 0x4c, 0x6a, 0x60,
+ 0x08, 0x5d, 0x0e, 0x34, 0x8b, 0xf2, 0xb6, 0xe3, 0xb7, 0x51, 0xca, 0x43,
+ 0xaa, 0x68, 0x7b, 0x0a, 0x6e, 0xea, 0xce, 0x1e, 0x2c, 0x34, 0x8e, 0x0f,
+ 0xe2, 0xcc, 0x38, 0xf2, 0x9a, 0x98, 0xef, 0xe6, 0x7f, 0xf6, 0x62, 0xbb
+};
+static const unsigned char dsa_3072_256_sha512_q[] = {
+ 0xc1, 0xdb, 0xc1, 0x21, 0x50, 0x49, 0x63, 0xa3, 0x77, 0x6d, 0x4c, 0x92,
+ 0xed, 0x58, 0x9e, 0x98, 0xea, 0xac, 0x7a, 0x90, 0x13, 0x24, 0xf7, 0xcd,
+ 0xd7, 0xe6, 0xd4, 0x8f, 0xf0, 0x45, 0x4b, 0xf7
+};
+static const unsigned char dsa_3072_256_sha512_seed[] = {
+ 0x35, 0x24, 0xb5, 0x59, 0xd5, 0x27, 0x58, 0x10, 0xf6, 0xa2, 0x7c, 0x9a,
+ 0x0d, 0xc2, 0x70, 0x8a, 0xb0, 0x41, 0x4a, 0x84, 0x0b, 0xfe, 0x66, 0xf5,
+ 0x3a, 0xbf, 0x4a, 0xa9, 0xcb, 0xfc, 0xa6, 0x22
+};
+static int dsa_3072_256_sha512_counter = 1604;
+
+static const unsigned char dsa_2048_224_sha256_p[] = {
+ 0xe9, 0x13, 0xbc, 0xf2, 0x14, 0x5d, 0xf9, 0x79, 0xd6, 0x6d, 0xf5, 0xc5,
+ 0xbe, 0x7b, 0x6f, 0x90, 0x63, 0xd0, 0xfd, 0xee, 0x4f, 0xc4, 0x65, 0x83,
+ 0xbf, 0xec, 0xc3, 0x2c, 0x5d, 0x30, 0xc8, 0xa4, 0x3b, 0x2f, 0x3b, 0x29,
+ 0x43, 0x69, 0xfb, 0x6e, 0xa9, 0xa4, 0x07, 0x6c, 0xcd, 0xb0, 0xd2, 0xd9,
+ 0xd3, 0xe6, 0xf4, 0x87, 0x16, 0xb7, 0xe5, 0x06, 0xb9, 0xba, 0xd6, 0x87,
+ 0xbc, 0x01, 0x9e, 0xba, 0xc2, 0xcf, 0x39, 0xb6, 0xec, 0xdc, 0x75, 0x07,
+ 0xc1, 0x39, 0x2d, 0x6a, 0x95, 0x31, 0x97, 0xda, 0x54, 0x20, 0x29, 0xe0,
+ 0x1b, 0xf9, 0x74, 0x65, 0xaa, 0xc1, 0x47, 0xd3, 0x9e, 0xb4, 0x3c, 0x1d,
+ 0xe0, 0xdc, 0x2d, 0x21, 0xab, 0x12, 0x3b, 0xa5, 0x51, 0x1e, 0xc6, 0xbc,
+ 0x6b, 0x4c, 0x22, 0xd1, 0x7c, 0xc6, 0xce, 0xcb, 0x8c, 0x1d, 0x1f, 0xce,
+ 0x1c, 0xe2, 0x75, 0x49, 0x6d, 0x2c, 0xee, 0x7f, 0x5f, 0xb8, 0x74, 0x42,
+ 0x5c, 0x96, 0x77, 0x13, 0xff, 0x80, 0xf3, 0x05, 0xc7, 0xfe, 0x08, 0x3b,
+ 0x25, 0x36, 0x46, 0xa2, 0xc4, 0x26, 0xb4, 0xb0, 0x3b, 0xd5, 0xb2, 0x4c,
+ 0x13, 0x29, 0x0e, 0x47, 0x31, 0x66, 0x7d, 0x78, 0x57, 0xe6, 0xc2, 0xb5,
+ 0x9f, 0x46, 0x17, 0xbc, 0xa9, 0x9a, 0x49, 0x1c, 0x0f, 0x45, 0xe0, 0x88,
+ 0x97, 0xa1, 0x30, 0x7c, 0x42, 0xb7, 0x2c, 0x0a, 0xce, 0xb3, 0xa5, 0x7a,
+ 0x61, 0x8e, 0xab, 0x44, 0xc1, 0xdc, 0x70, 0xe5, 0xda, 0x78, 0x2a, 0xb4,
+ 0xe6, 0x3c, 0xa0, 0x58, 0xda, 0x62, 0x0a, 0xb2, 0xa9, 0x3d, 0xaa, 0x49,
+ 0x7e, 0x7f, 0x9a, 0x19, 0x67, 0xee, 0xd6, 0xe3, 0x67, 0x13, 0xe8, 0x6f,
+ 0x79, 0x50, 0x76, 0xfc, 0xb3, 0x9d, 0x7e, 0x9e, 0x3e, 0x6e, 0x47, 0xb1,
+ 0x11, 0x5e, 0xc8, 0x83, 0x3a, 0x3c, 0xfc, 0x82, 0x5c, 0x9d, 0x34, 0x65,
+ 0x73, 0xb4, 0x56, 0xd5
+};
+static const unsigned char dsa_2048_224_sha256_q[] = {
+ 0xb0, 0xdf, 0xa1, 0x7b, 0xa4, 0x77, 0x64, 0x0e, 0xb9, 0x28, 0xbb, 0xbc,
+ 0xd4, 0x60, 0x02, 0xaf, 0x21, 0x8c, 0xb0, 0x69, 0x0f, 0x8a, 0x7b, 0xc6,
+ 0x80, 0xcb, 0x0a, 0x45
+};
+static const unsigned char dsa_2048_224_sha256_g[] = {
+ 0x11, 0x7c, 0x5f, 0xf6, 0x99, 0x44, 0x67, 0x5b, 0x69, 0xa3, 0x83, 0xef,
+ 0xb5, 0x85, 0xa2, 0x19, 0x35, 0x18, 0x2a, 0xf2, 0x58, 0xf4, 0xc9, 0x58,
+ 0x9e, 0xb9, 0xe8, 0x91, 0x17, 0x2f, 0xb0, 0x60, 0x85, 0x95, 0xa6, 0x62,
+ 0x36, 0xd0, 0xff, 0x94, 0xb9, 0xa6, 0x50, 0xad, 0xa6, 0xf6, 0x04, 0x28,
+ 0xc2, 0xc9, 0xb9, 0x75, 0xf3, 0x66, 0xb4, 0xeb, 0xf6, 0xd5, 0x06, 0x13,
+ 0x01, 0x64, 0x82, 0xa9, 0xf1, 0xd5, 0x41, 0xdc, 0xf2, 0x08, 0xfc, 0x2f,
+ 0xc4, 0xa1, 0x21, 0xee, 0x7d, 0xbc, 0xda, 0x5a, 0xa4, 0xa2, 0xb9, 0x68,
+ 0x87, 0x36, 0xba, 0x53, 0x9e, 0x14, 0x4e, 0x76, 0x5c, 0xba, 0x79, 0x3d,
+ 0x0f, 0xe5, 0x99, 0x1c, 0x27, 0xfc, 0xaf, 0x10, 0x63, 0x87, 0x68, 0x0e,
+ 0x3e, 0x6e, 0xaa, 0xf3, 0xdf, 0x76, 0x7e, 0x02, 0x9a, 0x41, 0x96, 0xa1,
+ 0x6c, 0xbb, 0x67, 0xee, 0x0c, 0xad, 0x72, 0x65, 0xf1, 0x70, 0xb0, 0x39,
+ 0x9b, 0x54, 0x5f, 0xd7, 0x6c, 0xc5, 0x9a, 0x90, 0x53, 0x18, 0xde, 0x5e,
+ 0x62, 0x89, 0xb9, 0x2f, 0x66, 0x59, 0x3a, 0x3d, 0x10, 0xeb, 0xa5, 0x99,
+ 0xf6, 0x21, 0x7d, 0xf2, 0x7b, 0x42, 0x15, 0x1c, 0x55, 0x79, 0x15, 0xaa,
+ 0xa4, 0x17, 0x2e, 0x48, 0xc3, 0xa8, 0x36, 0xf5, 0x1a, 0x97, 0xce, 0xbd,
+ 0x72, 0xef, 0x1d, 0x50, 0x5b, 0xb1, 0x60, 0x0a, 0x5c, 0x0b, 0xa6, 0x21,
+ 0x38, 0x28, 0x4e, 0x89, 0x33, 0x1d, 0xb5, 0x7e, 0x5c, 0xf1, 0x6b, 0x2c,
+ 0xbd, 0xad, 0x84, 0xb2, 0x8e, 0x96, 0xe2, 0x30, 0xe7, 0x54, 0xb8, 0xc9,
+ 0x70, 0xcb, 0x10, 0x30, 0x63, 0x90, 0xf4, 0x45, 0x64, 0x93, 0x09, 0x38,
+ 0x6a, 0x47, 0x58, 0x31, 0x04, 0x1a, 0x18, 0x04, 0x1a, 0xe0, 0xd7, 0x0b,
+ 0x3c, 0xbe, 0x2a, 0x9c, 0xec, 0xcc, 0x0d, 0x0c, 0xed, 0xde, 0x54, 0xbc,
+ 0xe6, 0x93, 0x59, 0xfc
+};
+
+static int ffc_params_validate_g_unverified_test(void)
+{
+ int ret = 0, res;
+ FFC_PARAMS params;
+ BIGNUM *p = NULL, *q = NULL, *g = NULL;
+ BIGNUM *p1 = NULL, *g1 = NULL;
+
+ ossl_ffc_params_init(&params);
+
+ if (!TEST_ptr(p = BN_bin2bn(dsa_2048_224_sha256_p,
+ sizeof(dsa_2048_224_sha256_p), NULL)))
+ goto err;
+ p1 = p;
+ if (!TEST_ptr(q = BN_bin2bn(dsa_2048_224_sha256_q,
+ sizeof(dsa_2048_224_sha256_q), NULL)))
+ goto err;
+ if (!TEST_ptr(g = BN_bin2bn(dsa_2048_224_sha256_g,
+ sizeof(dsa_2048_224_sha256_g), NULL)))
+ goto err;
+ g1 = g;
+
+ /* Fail if g is NULL */
+ ossl_ffc_params_set0_pqg(&params, p, q, NULL);
+ p = NULL;
+ q = NULL;
+ ossl_ffc_params_set_flags(&params, FFC_PARAM_FLAG_VALIDATE_G);
+ ossl_ffc_set_digest(&params, "SHA256", NULL);
+
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ ossl_ffc_params_set0_pqg(&params, p, q, g);
+ g = NULL;
+ if (!TEST_true(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ /* incorrect g */
+ BN_add_word(g1, 1);
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ /* fail if g < 2 */
+ BN_set_word(g1, 1);
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ BN_copy(g1, p1);
+ /* Fail if g >= p */
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ ret = 1;
+err:
+ ossl_ffc_params_cleanup(&params);
+ BN_free(p);
+ BN_free(q);
+ BN_free(g);
+ return ret;
+}
+
+static int ffc_params_validate_pq_test(void)
+{
+ int ret = 0, res = -1;
+ FFC_PARAMS params;
+ BIGNUM *p = NULL, *q = NULL;
+
+ ossl_ffc_params_init(&params);
+ if (!TEST_ptr(p = BN_bin2bn(dsa_2048_224_sha224_p,
+ sizeof(dsa_2048_224_sha224_p),
+ NULL)))
+ goto err;
+ if (!TEST_ptr(q = BN_bin2bn(dsa_2048_224_sha224_q,
+ sizeof(dsa_2048_224_sha224_q),
+ NULL)))
+ goto err;
+
+ /* No p */
+ ossl_ffc_params_set0_pqg(&params, NULL, q, NULL);
+ q = NULL;
+ ossl_ffc_params_set_flags(&params, FFC_PARAM_FLAG_VALIDATE_PQ);
+ ossl_ffc_set_digest(&params, "SHA224", NULL);
+
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ /* Test valid case */
+ ossl_ffc_params_set0_pqg(&params, p, NULL, NULL);
+ p = NULL;
+ ossl_ffc_params_set_validate_params(&params, dsa_2048_224_sha224_seed,
+ sizeof(dsa_2048_224_sha224_seed),
+ dsa_2048_224_sha224_counter);
+ if (!TEST_true(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ /* Bad counter - so p is not prime */
+ ossl_ffc_params_set_validate_params(&params, dsa_2048_224_sha224_seed,
+ sizeof(dsa_2048_224_sha224_seed),
+ 1);
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ /* seedlen smaller than N */
+ ossl_ffc_params_set_validate_params(&params, dsa_2048_224_sha224_seed,
+ sizeof(dsa_2048_224_sha224_seed)-1,
+ dsa_2048_224_sha224_counter);
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ /* Provided seed doesnt produce a valid prime q */
+ ossl_ffc_params_set_validate_params(&params, dsa_2048_224_sha224_bad_seed,
+ sizeof(dsa_2048_224_sha224_bad_seed),
+ dsa_2048_224_sha224_counter);
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ if (!TEST_ptr(p = BN_bin2bn(dsa_3072_256_sha512_p,
+ sizeof(dsa_3072_256_sha512_p), NULL)))
+ goto err;
+ if (!TEST_ptr(q = BN_bin2bn(dsa_3072_256_sha512_q,
+ sizeof(dsa_3072_256_sha512_q),
+ NULL)))
+ goto err;
+
+
+ ossl_ffc_params_set0_pqg(&params, p, q, NULL);
+ p = q = NULL;
+ ossl_ffc_set_digest(&params, "SHA512", NULL);
+ ossl_ffc_params_set_validate_params(&params, dsa_3072_256_sha512_seed,
+ sizeof(dsa_3072_256_sha512_seed),
+ dsa_3072_256_sha512_counter);
+ /* Q doesn't div P-1 */
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+
+ /* Bad L/N for FIPS DH */
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DH,
+ &res, NULL)))
+ goto err;
+
+ ret = 1;
+err:
+ ossl_ffc_params_cleanup(&params);
+ BN_free(p);
+ BN_free(q);
+ return ret;
+}
+#endif /* OPENSSL_NO_DSA */
+
+#ifndef OPENSSL_NO_DH
+static int ffc_params_gen_test(void)
+{
+ int ret = 0, res = -1;
+ FFC_PARAMS params;
+
+ ossl_ffc_params_init(&params);
+ if (!TEST_true(ossl_ffc_params_FIPS186_4_generate(NULL, &params,
+ FFC_PARAM_TYPE_DH,
+ 2048, 256, &res, NULL)))
+ goto err;
+ if (!TEST_true(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DH,
+ &res, NULL)))
+ goto err;
+
+ ret = 1;
+err:
+ ossl_ffc_params_cleanup(&params);
+ return ret;
+}
+
+static int ffc_params_gen_canonicalg_test(void)
+{
+ int ret = 0, res = -1;
+ FFC_PARAMS params;
+
+ ossl_ffc_params_init(&params);
+ params.gindex = 1;
+ if (!TEST_true(ossl_ffc_params_FIPS186_4_generate(NULL, &params,
+ FFC_PARAM_TYPE_DH,
+ 2048, 256, &res, NULL)))
+ goto err;
+ if (!TEST_true(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DH,
+ &res, NULL)))
+ goto err;
+
+ if (!TEST_true(ossl_ffc_params_print(bio_out, &params, 4)))
+ goto err;
+
+ ret = 1;
+err:
+ ossl_ffc_params_cleanup(&params);
+ return ret;
+}
+
+static int ffc_params_fips186_2_gen_validate_test(void)
+{
+ int ret = 0, res = -1;
+ FFC_PARAMS params;
+ BIGNUM *bn = NULL;
+
+ ossl_ffc_params_init(&params);
+ if (!TEST_ptr(bn = BN_new()))
+ goto err;
+ if (!TEST_true(ossl_ffc_params_FIPS186_2_generate(NULL, &params,
+ FFC_PARAM_TYPE_DH,
+ 1024, 160, &res, NULL)))
+ goto err;
+ if (!TEST_true(ossl_ffc_params_FIPS186_2_validate(NULL, &params,
+ FFC_PARAM_TYPE_DH,
+ &res, NULL)))
+ goto err;
+
+ /*
+ * The fips186-2 generation should produce a different q compared to
+ * fips 186-4 given the same seed value. So validation of q will fail.
+ */
+ if (!TEST_false(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL)))
+ goto err;
+ /* As the params are randomly generated the error is one of the following */
+ if (!TEST_true(res == FFC_CHECK_Q_MISMATCH || res == FFC_CHECK_Q_NOT_PRIME))
+ goto err;
+
+ ossl_ffc_params_set_flags(&params, FFC_PARAM_FLAG_VALIDATE_G);
+ /* Partially valid g test will still pass */
+ if (!TEST_int_eq(ossl_ffc_params_FIPS186_4_validate(NULL, &params,
+ FFC_PARAM_TYPE_DSA,
+ &res, NULL), 2))
+ goto err;
+
+ if (!TEST_true(ossl_ffc_params_print(bio_out, &params, 4)))
+ goto err;
+
+ ret = 1;
+err:
+ BN_free(bn);
+ ossl_ffc_params_cleanup(&params);
+ return ret;
+}
+
+extern FFC_PARAMS *ossl_dh_get0_params(DH *dh);
+
+static int ffc_public_validate_test(void)
+{
+ int ret = 0, res = -1;
+ FFC_PARAMS *params;
+ BIGNUM *pub = NULL;
+ DH *dh = NULL;
+
+ if (!TEST_ptr(pub = BN_new()))
+ goto err;
+
+ if (!TEST_ptr(dh = DH_new_by_nid(NID_ffdhe2048)))
+ goto err;
+ params = ossl_dh_get0_params(dh);
+
+ if (!TEST_true(BN_set_word(pub, 1)))
+ goto err;
+ BN_set_negative(pub, 1);
+ /* Check must succeed but set res if public key is negative */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, pub, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_SMALL, res))
+ goto err;
+ if (!TEST_true(BN_set_word(pub, 0)))
+ goto err;
+ /* Check must succeed but set res if public key is zero */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, pub, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_SMALL, res))
+ goto err;
+ /* Check must succeed but set res if public key is 1 */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, BN_value_one(), &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_SMALL, res))
+ goto err;
+ if (!TEST_true(BN_add_word(pub, 2)))
+ goto err;
+ /* Pass if public key >= 2 */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, pub, &res)))
+ goto err;
+
+ if (!TEST_ptr(BN_copy(pub, params->p)))
+ goto err;
+ /* Check must succeed but set res if public key = p */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, pub, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_LARGE, res))
+ goto err;
+
+ if (!TEST_true(BN_sub_word(pub, 1)))
+ goto err;
+ /* Check must succeed but set res if public key = p - 1 */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, pub, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_LARGE, res))
+ goto err;
+
+ if (!TEST_true(BN_sub_word(pub, 1)))
+ goto err;
+ /* Check must succeed but set res if public key is not related to p & q */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, pub, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PUBKEY_INVALID, res))
+ goto err;
+
+ if (!TEST_true(BN_sub_word(pub, 5)))
+ goto err;
+ /* Pass if public key is valid */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, pub, &res)))
+ goto err;
+
+ /* Check must succeed but set res if params is NULL */
+ if (!TEST_true(ossl_ffc_validate_public_key(NULL, pub, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PASSED_NULL_PARAM, res))
+ goto err;
+ res = -1;
+ /* Check must succeed but set res if pubkey is NULL */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, NULL, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PASSED_NULL_PARAM, res))
+ goto err;
+ res = -1;
+
+ BN_free(params->p);
+ params->p = NULL;
+ /* Check must succeed but set res if params->p is NULL */
+ if (!TEST_true(ossl_ffc_validate_public_key(params, pub, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PASSED_NULL_PARAM, res))
+ goto err;
+
+ ret = 1;
+err:
+ DH_free(dh);
+ BN_free(pub);
+ return ret;
+}
+
+static int ffc_private_validate_test(void)
+{
+ int ret = 0, res = -1;
+ FFC_PARAMS *params;
+ BIGNUM *priv = NULL;
+ DH *dh = NULL;
+
+ if (!TEST_ptr(priv = BN_new()))
+ goto err;
+
+ if (!TEST_ptr(dh = DH_new_by_nid(NID_ffdhe2048)))
+ goto err;
+ params = ossl_dh_get0_params(dh);
+
+ if (!TEST_true(BN_set_word(priv, 1)))
+ goto err;
+ BN_set_negative(priv, 1);
+ /* Fail if priv key is negative */
+ if (!TEST_false(ossl_ffc_validate_private_key(params->q, priv, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PRIVKEY_TOO_SMALL, res))
+ goto err;
+
+ if (!TEST_true(BN_set_word(priv, 0)))
+ goto err;
+ /* Fail if priv key is zero */
+ if (!TEST_false(ossl_ffc_validate_private_key(params->q, priv, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PRIVKEY_TOO_SMALL, res))
+ goto err;
+
+ /* Pass if priv key >= 1 */
+ if (!TEST_true(ossl_ffc_validate_private_key(params->q, BN_value_one(),
+ &res)))
+ goto err;
+
+ if (!TEST_ptr(BN_copy(priv, params->q)))
+ goto err;
+ /* Fail if priv key = upper */
+ if (!TEST_false(ossl_ffc_validate_private_key(params->q, priv, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PRIVKEY_TOO_LARGE, res))
+ goto err;
+
+ if (!TEST_true(BN_sub_word(priv, 1)))
+ goto err;
+ /* Pass if priv key <= upper - 1 */
+ if (!TEST_true(ossl_ffc_validate_private_key(params->q, priv, &res)))
+ goto err;
+
+ if (!TEST_false(ossl_ffc_validate_private_key(NULL, priv, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PASSED_NULL_PARAM, res))
+ goto err;
+ res = -1;
+ if (!TEST_false(ossl_ffc_validate_private_key(params->q, NULL, &res)))
+ goto err;
+ if (!TEST_int_eq(FFC_ERROR_PASSED_NULL_PARAM, res))
+ goto err;
+
+ ret = 1;
+err:
+ DH_free(dh);
+ BN_free(priv);
+ return ret;
+}
+
+static int ffc_private_gen_test(int index)
+{
+ int ret = 0, res = -1, N;
+ FFC_PARAMS *params;
+ BIGNUM *priv = NULL;
+ DH *dh = NULL;
+ BN_CTX *ctx = NULL;
+
+ if (!TEST_ptr(ctx = BN_CTX_new_ex(NULL)))
+ goto err;
+
+ if (!TEST_ptr(priv = BN_new()))
+ goto err;
+
+ if (!TEST_ptr(dh = DH_new_by_nid(NID_ffdhe2048)))
+ goto err;
+ params = ossl_dh_get0_params(dh);
+
+ N = BN_num_bits(params->q);
+ /* Fail since N < 2*s - where s = 112*/
+ if (!TEST_false(ossl_ffc_generate_private_key(ctx, params, 220, 112, priv)))
+ goto err;
+ /* fail since N > len(q) */
+ if (!TEST_false(ossl_ffc_generate_private_key(ctx, params, N + 1, 112, priv)))
+ goto err;
+ /* s must be always set */
+ if (!TEST_false(ossl_ffc_generate_private_key(ctx, params, N, 0, priv)))
+ goto err;
+ /* pass since 2s <= N <= len(q) */
+ if (!TEST_true(ossl_ffc_generate_private_key(ctx, params, N, 112, priv)))
+ goto err;
+ /* pass since N = len(q) */
+ if (!TEST_true(ossl_ffc_validate_private_key(params->q, priv, &res)))
+ goto err;
+ /* pass since 2s <= N < len(q) */
+ if (!TEST_true(ossl_ffc_generate_private_key(ctx, params, N / 2, 112, priv)))
+ goto err;
+ if (!TEST_true(ossl_ffc_validate_private_key(params->q, priv, &res)))
+ goto err;
+ /* N is ignored in this case */
+ if (!TEST_true(ossl_ffc_generate_private_key(ctx, params, 0,
+ ossl_ifc_ffc_compute_security_bits(BN_num_bits(params->p)),
+ priv)))
+ goto err;
+ if (!TEST_int_le(BN_num_bits(priv), 225))
+ goto err;
+ if (!TEST_true(ossl_ffc_validate_private_key(params->q, priv, &res)))
+ goto err;
+
+ ret = 1;
+err:
+ DH_free(dh);
+ BN_free(priv);
+ BN_CTX_free(ctx);
+ return ret;
+}
+
+static int ffc_params_copy_test(void)
+{
+ int ret = 0;
+ DH *dh = NULL;
+ FFC_PARAMS *params, copy;
+
+ ossl_ffc_params_init(&copy);
+
+ if (!TEST_ptr(dh = DH_new_by_nid(NID_ffdhe3072)))
+ goto err;
+ params = ossl_dh_get0_params(dh);
+
+ if (!TEST_int_eq(params->keylength, 275))
+ goto err;
+
+ if (!TEST_true(ossl_ffc_params_copy(&copy, params)))
+ goto err;
+
+ if (!TEST_int_eq(copy.keylength, 275))
+ goto err;
+
+ if (!TEST_true(ossl_ffc_params_cmp(&copy, params, 0)))
+ goto err;
+
+ ret = 1;
+err:
+ ossl_ffc_params_cleanup(&copy);
+ DH_free(dh);
+ return ret;
+}
+#endif /* OPENSSL_NO_DH */
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_DSA
+ ADD_TEST(ffc_params_validate_pq_test);
+ ADD_TEST(ffc_params_validate_g_unverified_test);
+#endif /* OPENSSL_NO_DSA */
+#ifndef OPENSSL_NO_DH
+ ADD_TEST(ffc_params_gen_test);
+ ADD_TEST(ffc_params_gen_canonicalg_test);
+ ADD_TEST(ffc_params_fips186_2_gen_validate_test);
+ ADD_TEST(ffc_public_validate_test);
+ ADD_TEST(ffc_private_validate_test);
+ ADD_ALL_TESTS(ffc_private_gen_test, 10);
+ ADD_TEST(ffc_params_copy_test);
+#endif /* OPENSSL_NO_DH */
+ return 1;
+}
diff --git a/test/filterprov.c b/test/filterprov.c
new file mode 100644
index 000000000000..e14c802b1df6
--- /dev/null
+++ b/test/filterprov.c
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * A filtering provider for test purposes. We pass all calls through to the
+ * default provider except where we want other behaviour for a test.
+ */
+
+#include <string.h>
+#include <openssl/core.h>
+#include <openssl/provider.h>
+#include <openssl/crypto.h>
+#include "testutil.h"
+#include "filterprov.h"
+
+#define MAX_FILTERS 10
+#define MAX_ALG_FILTERS 5
+
+struct filter_prov_globals_st {
+ OSSL_LIB_CTX *libctx;
+ OSSL_PROVIDER *deflt;
+ struct {
+ int operation;
+ OSSL_ALGORITHM alg[MAX_ALG_FILTERS + 1];
+ } dispatch[MAX_FILTERS];
+ int num_dispatch;
+ int no_cache;
+ unsigned long int query_count;
+ int error;
+};
+
+static struct filter_prov_globals_st ourglobals;
+
+static struct filter_prov_globals_st *get_globals(void)
+{
+ /*
+ * Ideally we'd like to store this in the OSSL_LIB_CTX so that we can have
+ * more than one instance of the filter provider at a time. But for now we
+ * just make it simple.
+ */
+ return &ourglobals;
+}
+
+static OSSL_FUNC_provider_gettable_params_fn filter_gettable_params;
+static OSSL_FUNC_provider_get_params_fn filter_get_params;
+static OSSL_FUNC_provider_query_operation_fn filter_query;
+static OSSL_FUNC_provider_unquery_operation_fn filter_unquery;
+static OSSL_FUNC_provider_teardown_fn filter_teardown;
+
+static const OSSL_PARAM *filter_gettable_params(void *provctx)
+{
+ struct filter_prov_globals_st *globs = get_globals();
+
+ return OSSL_PROVIDER_gettable_params(globs->deflt);
+}
+
+static int filter_get_params(void *provctx, OSSL_PARAM params[])
+{
+ struct filter_prov_globals_st *globs = get_globals();
+
+ return OSSL_PROVIDER_get_params(globs->deflt, params);
+}
+
+static int filter_get_capabilities(void *provctx, const char *capability,
+ OSSL_CALLBACK *cb, void *arg)
+{
+ struct filter_prov_globals_st *globs = get_globals();
+
+ return OSSL_PROVIDER_get_capabilities(globs->deflt, capability, cb, arg);
+}
+
+static const OSSL_ALGORITHM *filter_query(void *provctx,
+ int operation_id,
+ int *no_cache)
+{
+ struct filter_prov_globals_st *globs = get_globals();
+ int i;
+
+ globs->query_count++;
+ for (i = 0; i < globs->num_dispatch; i++) {
+ if (globs->dispatch[i].operation == operation_id) {
+ *no_cache = globs->no_cache;
+ return globs->dispatch[i].alg;
+ }
+ }
+
+ /* No filter set, so pass it down to the chained provider */
+ return OSSL_PROVIDER_query_operation(globs->deflt, operation_id, no_cache);
+}
+
+static void filter_unquery(void *provctx, int operation_id,
+ const OSSL_ALGORITHM *algs)
+{
+ struct filter_prov_globals_st *globs = get_globals();
+ int i;
+
+ if (!TEST_ulong_gt(globs->query_count, 0))
+ globs->error = 1;
+ else
+ globs->query_count--;
+
+ for (i = 0; i < globs->num_dispatch; i++)
+ if (globs->dispatch[i].alg == algs)
+ return;
+ OSSL_PROVIDER_unquery_operation(globs->deflt, operation_id, algs);
+}
+
+static void filter_teardown(void *provctx)
+{
+ struct filter_prov_globals_st *globs = get_globals();
+
+ OSSL_PROVIDER_unload(globs->deflt);
+ OSSL_LIB_CTX_free(globs->libctx);
+ memset(globs, 0, sizeof(*globs));
+}
+
+/* Functions we provide to the core */
+static const OSSL_DISPATCH filter_dispatch_table[] = {
+ { OSSL_FUNC_PROVIDER_GETTABLE_PARAMS, (void (*)(void))filter_gettable_params },
+ { OSSL_FUNC_PROVIDER_GET_PARAMS, (void (*)(void))filter_get_params },
+ { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void))filter_query },
+ { OSSL_FUNC_PROVIDER_UNQUERY_OPERATION, (void (*)(void))filter_unquery },
+ { OSSL_FUNC_PROVIDER_GET_CAPABILITIES, (void (*)(void))filter_get_capabilities },
+ { OSSL_FUNC_PROVIDER_TEARDOWN, (void (*)(void))filter_teardown },
+ { 0, NULL }
+};
+
+int filter_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out,
+ void **provctx)
+{
+ memset(&ourglobals, 0, sizeof(ourglobals));
+ ourglobals.libctx = OSSL_LIB_CTX_new();
+ if (ourglobals.libctx == NULL)
+ goto err;
+
+ ourglobals.deflt = OSSL_PROVIDER_load(ourglobals.libctx, "default");
+ if (ourglobals.deflt == NULL)
+ goto err;
+
+ *provctx = OSSL_PROVIDER_get0_provider_ctx(ourglobals.deflt);
+ *out = filter_dispatch_table;
+ return 1;
+
+ err:
+ OSSL_PROVIDER_unload(ourglobals.deflt);
+ OSSL_LIB_CTX_free(ourglobals.libctx);
+ return 0;
+}
+
+/*
+ * Set a filter for the given operation id. The filter string is a colon
+ * separated list of algorithms that will be made available by this provider.
+ * Anything not in the filter will be suppressed. If a filter is not set for
+ * a given operation id then all algorithms are made available.
+ */
+int filter_provider_set_filter(int operation, const char *filterstr)
+{
+ int no_cache = 0;
+ int algnum = 0, last = 0, ret = 0;
+ struct filter_prov_globals_st *globs = get_globals();
+ size_t namelen;
+ char *filterstrtmp = OPENSSL_strdup(filterstr);
+ char *name, *sep;
+ const OSSL_ALGORITHM *provalgs = OSSL_PROVIDER_query_operation(globs->deflt,
+ operation,
+ &no_cache);
+ const OSSL_ALGORITHM *algs;
+
+ if (filterstrtmp == NULL)
+ goto err;
+
+ /* Nothing to filter */
+ if (provalgs == NULL)
+ goto err;
+
+ if (globs->num_dispatch >= MAX_FILTERS)
+ goto err;
+
+ for (name = filterstrtmp; !last; name = (sep == NULL ? NULL : sep + 1)) {
+ sep = strstr(name, ":");
+ if (sep != NULL)
+ *sep = '\0';
+ else
+ last = 1;
+ namelen = strlen(name);
+
+ for (algs = provalgs; algs->algorithm_names != NULL; algs++) {
+ const char *found = strstr(algs->algorithm_names, name);
+
+ if (found == NULL)
+ continue;
+ if (found[namelen] != '\0' && found[namelen] != ':')
+ continue;
+ if (found != algs->algorithm_names && found[-1] != ':')
+ continue;
+
+ /* We found a match */
+ if (algnum >= MAX_ALG_FILTERS)
+ goto err;
+
+ globs->dispatch[globs->num_dispatch].alg[algnum++] = *algs;
+ break;
+ }
+ if (algs->algorithm_names == NULL) {
+ /* No match found */
+ goto err;
+ }
+ }
+
+ globs->dispatch[globs->num_dispatch].operation = operation;
+ globs->no_cache = no_cache;
+ globs->num_dispatch++;
+
+ ret = 1;
+ err:
+ OSSL_PROVIDER_unquery_operation(globs->deflt, operation, provalgs);
+ OPENSSL_free(filterstrtmp);
+ return ret;
+}
+
+/*
+ * Test if a filter provider is in a clean finishing state.
+ * If it is return 1, otherwise return 0.
+ */
+int filter_provider_check_clean_finish(void)
+{
+ struct filter_prov_globals_st *globs = get_globals();
+
+ return TEST_ulong_eq(globs->query_count, 0) && !globs->error;
+}
diff --git a/test/filterprov.h b/test/filterprov.h
new file mode 100644
index 000000000000..3c63071556c2
--- /dev/null
+++ b/test/filterprov.h
@@ -0,0 +1,14 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/core_dispatch.h>
+
+OSSL_provider_init_fn filter_provider_init;
+int filter_provider_set_filter(int operation, const char *name);
+int filter_provider_check_clean_finish(void);
diff --git a/test/fips-alt.cnf b/test/fips-alt.cnf
new file mode 100644
index 000000000000..17889372c7df
--- /dev/null
+++ b/test/fips-alt.cnf
@@ -0,0 +1,16 @@
+openssl_conf = openssl_init
+
+.include fipsmodule.cnf
+
+[openssl_init]
+providers = provider_sect
+alg_section = evp_properties
+
+[evp_properties]
+# Ensure FIPS non-approved algorithms in the FIPS module are suppressed (e.g.
+# TEST-RAND). This also means that EVP_default_properties_is_fips_enabled()
+# returns the expected value
+fips_mode = true
+
+[provider_sect]
+fips = fips_sect
diff --git a/test/fips-and-base.cnf b/test/fips-and-base.cnf
new file mode 100644
index 000000000000..494e96a87ef3
--- /dev/null
+++ b/test/fips-and-base.cnf
@@ -0,0 +1,16 @@
+openssl_conf = openssl_init
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+.include fipsmodule.cnf
+
+[openssl_init]
+providers = provider_sect
+
+[provider_sect]
+fips = fips_sect
+base = base_sect
+
+[base_sect]
+activate = 1
diff --git a/test/fips.cnf b/test/fips.cnf
new file mode 100644
index 000000000000..74349c80aeb5
--- /dev/null
+++ b/test/fips.cnf
@@ -0,0 +1,19 @@
+openssl_conf = openssl_init
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+.include fipsmodule.cnf
+
+[openssl_init]
+providers = provider_sect
+alg_section = evp_properties
+
+[evp_properties]
+# Ensure FIPS non-approved algorithms in the FIPS module are suppressed (e.g.
+# TEST-RAND). This also means that EVP_default_properties_is_fips_enabled()
+# returns the expected value
+default_properties = "fips=yes"
+
+[provider_sect]
+fips = fips_sect
diff --git a/test/fips_version_test.c b/test/fips_version_test.c
new file mode 100644
index 000000000000..dd23bb51e508
--- /dev/null
+++ b/test/fips_version_test.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2022 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 <openssl/provider.h>
+#include "testutil.h"
+
+static OSSL_LIB_CTX *libctx = NULL;
+static OSSL_PROVIDER *libprov = NULL;
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_CONFIG_FILE,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "config", OPT_CONFIG_FILE, '<',
+ "The configuration file to use for the libctx" },
+ { NULL }
+ };
+ return test_options;
+}
+
+static int test_fips_version(int n)
+{
+ const char *version = test_get_argument(n);
+
+ if (!TEST_ptr(version))
+ return 0;
+ return TEST_int_eq(fips_provider_version_match(libctx, version), 1);
+}
+
+int setup_tests(void)
+{
+ char *config_file = NULL;
+ OPTION_CHOICE o;
+ int n;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_CONFIG_FILE:
+ config_file = opt_arg();
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+
+ if (!test_get_libctx(&libctx, NULL, config_file, &libprov, NULL))
+ return 0;
+
+ n = test_get_argument_count();
+ if (n == 0)
+ return 0;
+
+ ADD_ALL_TESTS(test_fips_version, n);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OSSL_PROVIDER_unload(libprov);
+ OSSL_LIB_CTX_free(libctx);
+}
diff --git a/test/generate_buildtest.pl b/test/generate_buildtest.pl
new file mode 100644
index 000000000000..62c64f33d084
--- /dev/null
+++ b/test/generate_buildtest.pl
@@ -0,0 +1,34 @@
+#! /usr/bin/env perl
+# Copyright 2016-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+# First argument is name;
+my $name = shift @ARGV;
+my $name_uc = uc $name;
+# All other arguments are ignored for now
+
+print <<"_____";
+/*
+ * Generated with test/generate_buildtest.pl, to check that such a simple
+ * program builds.
+ */
+#include <openssl/opensslconf.h>
+#ifndef OPENSSL_NO_STDIO
+# include <stdio.h>
+#endif
+#ifndef OPENSSL_NO_${name_uc}
+# include <openssl/$name.h>
+#endif
+
+int main(void)
+{
+ return 0;
+}
+_____
diff --git a/test/generate_ssl_tests.pl b/test/generate_ssl_tests.pl
new file mode 100644
index 000000000000..9ff556c0a931
--- /dev/null
+++ b/test/generate_ssl_tests.pl
@@ -0,0 +1,155 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+## SSL testcase generator
+
+use strict;
+use warnings;
+
+use Cwd qw/abs_path/;
+use File::Basename;
+use File::Spec::Functions;
+
+use OpenSSL::Test qw/srctop_dir srctop_file/;
+use OpenSSL::Test::Utils;
+
+use FindBin;
+use lib "$FindBin::Bin/../util/perl";
+use OpenSSL::fallback "$FindBin::Bin/../external/perl/MODULES.txt";
+use Text::Template 1.46;
+
+my $input_file;
+my $provider;
+
+BEGIN {
+ #Input file may be relative to cwd, but setup below changes the cwd, so
+ #figure out the absolute path first
+ $input_file = abs_path(shift);
+ $provider = shift // '';
+
+ OpenSSL::Test::setup("no_test_here", quiet => 1);
+}
+
+use lib "$FindBin::Bin/ssl-tests";
+
+use vars qw/@ISA/;
+push (@ISA, qw/Text::Template/);
+
+use ssltests_base;
+
+sub print_templates {
+ my $source = srctop_file("test", "ssl_test.tmpl");
+ my $template = Text::Template->new(TYPE => 'FILE', SOURCE => $source);
+
+ print "# Generated with generate_ssl_tests.pl\n\n";
+
+ my $num = scalar @ssltests::tests;
+
+ # Add the implicit base configuration.
+ foreach my $test (@ssltests::tests) {
+ $test->{"server"} = { (%ssltests::base_server, %{$test->{"server"}}) };
+ if (defined $test->{"server2"}) {
+ $test->{"server2"} = { (%ssltests::base_server, %{$test->{"server2"}}) };
+ } else {
+ if ($test->{"server"}->{"extra"} &&
+ defined $test->{"server"}->{"extra"}->{"ServerNameCallback"}) {
+ # Default is the same as server.
+ $test->{"reuse_server2"} = 1;
+ }
+ # Do not emit an empty/duplicate "server2" section.
+ $test->{"server2"} = { };
+ }
+ if (defined $test->{"resume_server"}) {
+ $test->{"resume_server"} = { (%ssltests::base_server, %{$test->{"resume_server"}}) };
+ } else {
+ if (defined $test->{"test"}->{"HandshakeMode"} &&
+ $test->{"test"}->{"HandshakeMode"} eq "Resume") {
+ # Default is the same as server.
+ $test->{"reuse_resume_server"} = 1;
+ }
+ # Do not emit an empty/duplicate "resume-server" section.
+ $test->{"resume_server"} = { };
+ }
+ $test->{"client"} = { (%ssltests::base_client, %{$test->{"client"}}) };
+ if (defined $test->{"resume_client"}) {
+ $test->{"resume_client"} = { (%ssltests::base_client, %{$test->{"resume_client"}}) };
+ } else {
+ if (defined $test->{"test"}->{"HandshakeMode"} &&
+ $test->{"test"}->{"HandshakeMode"} eq "Resume") {
+ # Default is the same as client.
+ $test->{"reuse_resume_client"} = 1;
+ }
+ # Do not emit an empty/duplicate "resume-client" section.
+ $test->{"resume_client"} = { };
+ }
+ }
+
+ # ssl_test expects to find a
+ #
+ # num_tests = n
+ #
+ # directive in the file. It'll then look for configuration directives
+ # for n tests, that each look like this:
+ #
+ # test-n = test-section
+ #
+ # [test-section]
+ # (SSL modules for client and server configuration go here.)
+ #
+ # [test-n]
+ # (Test configuration goes here.)
+ print "num_tests = $num\n\n";
+
+ # The conf module locations must come before everything else, because
+ # they look like
+ #
+ # test-n = test-section
+ #
+ # and you can't mix and match them with sections.
+ my $idx = 0;
+
+ foreach my $test (@ssltests::tests) {
+ my $testname = "${idx}-" . $test->{'name'};
+ print "test-$idx = $testname\n";
+ $idx++;
+ }
+
+ $idx = 0;
+
+ foreach my $test (@ssltests::tests) {
+ my $testname = "${idx}-" . $test->{'name'};
+ my $text = $template->fill_in(
+ HASH => [{ idx => $idx, testname => $testname } , $test],
+ DELIMITERS => [ "{-", "-}" ]);
+ print "# ===========================================================\n\n";
+ print "$text\n";
+ $idx++;
+ }
+}
+
+# Shamelessly copied from Configure.
+sub read_config {
+ my $fname = shift;
+ my $provider = shift;
+ local $ssltests::fips_mode = $provider eq "fips";
+ local $ssltests::no_deflt_libctx =
+ $provider eq "default" || $provider eq "fips";
+
+ open(INPUT, "< $fname") or die "Can't open input file '$fname'!\n";
+ local $/ = undef;
+ my $content = <INPUT>;
+ close(INPUT);
+ eval $content;
+ warn $@ if $@;
+}
+
+# Reads the tests into ssltests::tests.
+read_config($input_file, $provider);
+print_templates();
+
+1;
diff --git a/test/gmdifftest.c b/test/gmdifftest.c
new file mode 100644
index 000000000000..028816f6ded4
--- /dev/null
+++ b/test/gmdifftest.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/crypto.h>
+
+#include "testutil.h"
+
+#define SECS_PER_DAY (24 * 60 * 60)
+
+/*
+ * Time checking test code. Check times are identical for a wide range of
+ * offsets. This should be run on a machine with 64 bit time_t or it will
+ * trigger the very errors the routines fix.
+ */
+
+static int check_time(long offset)
+{
+ struct tm tm1, tm2, o1;
+ int off_day, off_sec;
+ long toffset;
+ time_t t1, t2;
+
+ time(&t1);
+
+ t2 = t1 + offset;
+ OPENSSL_gmtime(&t2, &tm2);
+ OPENSSL_gmtime(&t1, &tm1);
+ o1 = tm1;
+ if (!TEST_true(OPENSSL_gmtime_adj(&tm1, 0, offset))
+ || !TEST_int_eq(tm1.tm_year, tm2.tm_year)
+ || !TEST_int_eq(tm1.tm_mon, tm2.tm_mon)
+ || !TEST_int_eq(tm1.tm_mday, tm2.tm_mday)
+ || !TEST_int_eq(tm1.tm_hour, tm2.tm_hour)
+ || !TEST_int_eq(tm1.tm_min, tm2.tm_min)
+ || !TEST_int_eq(tm1.tm_sec, tm2.tm_sec)
+ || !TEST_true(OPENSSL_gmtime_diff(&off_day, &off_sec, &o1, &tm1)))
+ return 0;
+ toffset = (long)off_day * SECS_PER_DAY + off_sec;
+ if (!TEST_long_eq(offset, toffset))
+ return 0;
+ return 1;
+}
+
+static int test_gmtime(int offset)
+{
+ return check_time(offset)
+ && check_time(-offset)
+ && check_time(offset * 1000L)
+ && check_time(-offset * 1000L)
+ && check_time(offset * 1000000L)
+ && check_time(-offset * 1000000L);
+}
+
+int setup_tests(void)
+{
+ if (sizeof(time_t) < 8)
+ TEST_info("Skipping; time_t is less than 64-bits");
+ else
+ ADD_ALL_TESTS_NOSUBTEST(test_gmtime, 1000);
+ return 1;
+}
diff --git a/test/helpers/cmp_testlib.c b/test/helpers/cmp_testlib.c
new file mode 100644
index 000000000000..e0fb1d3d345d
--- /dev/null
+++ b/test/helpers/cmp_testlib.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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 "cmp_testlib.h"
+#include <openssl/rsa.h> /* needed in case config no-deprecated */
+
+OSSL_CMP_MSG *load_pkimsg(const char *file, OSSL_LIB_CTX *libctx)
+{
+ OSSL_CMP_MSG *msg;
+
+ (void)TEST_ptr((msg = OSSL_CMP_MSG_read(file, libctx, NULL)));
+ return msg;
+}
+
+/*
+ * Checks whether the syntax of msg conforms to ASN.1
+ */
+int valid_asn1_encoding(const OSSL_CMP_MSG *msg)
+{
+ return msg != NULL ? i2d_OSSL_CMP_MSG(msg, NULL) > 0 : 0;
+}
+
+/*
+ * Compares two stacks of certificates in the order of their elements.
+ * Returns 0 if sk1 and sk2 are equal and another value otherwise
+ */
+int STACK_OF_X509_cmp(const STACK_OF(X509) *sk1, const STACK_OF(X509) *sk2)
+{
+ int i, res;
+ X509 *a, *b;
+
+ if (sk1 == sk2)
+ return 0;
+ if (sk1 == NULL)
+ return -1;
+ if (sk2 == NULL)
+ return 1;
+ if ((res = sk_X509_num(sk1) - sk_X509_num(sk2)))
+ return res;
+ for (i = 0; i < sk_X509_num(sk1); i++) {
+ a = sk_X509_value(sk1, i);
+ b = sk_X509_value(sk2, i);
+ if (a != b)
+ if ((res = X509_cmp(a, b)) != 0)
+ return res;
+ }
+ return 0;
+}
+
+/*
+ * Up refs and push a cert onto sk.
+ * Returns the number of certificates on the stack on success
+ * Returns -1 or 0 on error
+ */
+int STACK_OF_X509_push1(STACK_OF(X509) *sk, X509 *cert)
+{
+ int res;
+
+ if (sk == NULL || cert == NULL)
+ return -1;
+ if (!X509_up_ref(cert))
+ return -1;
+ res = sk_X509_push(sk, cert);
+ if (res <= 0)
+ X509_free(cert); /* down-ref */
+ return res;
+}
+
+int print_to_bio_out(const char *func, const char *file, int line,
+ OSSL_CMP_severity level, const char *msg)
+{
+ return OSSL_CMP_print_to_bio(bio_out, func, file, line, level, msg);
+}
diff --git a/test/helpers/cmp_testlib.h b/test/helpers/cmp_testlib.h
new file mode 100644
index 000000000000..50b085beca01
--- /dev/null
+++ b/test/helpers/cmp_testlib.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * 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_TEST_CMP_TESTLIB_H
+# define OSSL_TEST_CMP_TESTLIB_H
+
+# include <openssl/cmp.h>
+# include <openssl/pem.h>
+# include <openssl/rand.h>
+
+# include "../../crypto/cmp/cmp_local.h"
+# include "../testutil.h"
+
+# ifndef OPENSSL_NO_CMP
+# define CMP_TEST_REFVALUE_LENGTH 15 /* arbitrary value */
+OSSL_CMP_MSG *load_pkimsg(const char *file, OSSL_LIB_CTX *libctx);
+int valid_asn1_encoding(const OSSL_CMP_MSG *msg);
+int STACK_OF_X509_cmp(const STACK_OF(X509) *sk1, const STACK_OF(X509) *sk2);
+int STACK_OF_X509_push1(STACK_OF(X509) *sk, X509 *cert);
+int print_to_bio_out(const char *func, const char *file, int line,
+ OSSL_CMP_severity level, const char *msg);
+# endif
+
+#endif /* OSSL_TEST_CMP_TESTLIB_H */
diff --git a/test/helpers/handshake.c b/test/helpers/handshake.c
new file mode 100644
index 000000000000..285391bc03b6
--- /dev/null
+++ b/test/helpers/handshake.c
@@ -0,0 +1,1750 @@
+/*
+ * Copyright 2016-2022 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/bio.h>
+#include <openssl/x509_vfy.h>
+#include <openssl/ssl.h>
+#include <openssl/core_names.h>
+
+#include "../../ssl/ssl_local.h"
+#include "internal/sockets.h"
+#include "internal/nelem.h"
+#include "handshake.h"
+#include "../testutil.h"
+
+#if !defined(OPENSSL_NO_SCTP) && !defined(OPENSSL_NO_SOCK)
+#include <netinet/sctp.h>
+#endif
+
+HANDSHAKE_RESULT *HANDSHAKE_RESULT_new(void)
+{
+ HANDSHAKE_RESULT *ret;
+
+ TEST_ptr(ret = OPENSSL_zalloc(sizeof(*ret)));
+ return ret;
+}
+
+void HANDSHAKE_RESULT_free(HANDSHAKE_RESULT *result)
+{
+ if (result == NULL)
+ return;
+ OPENSSL_free(result->client_npn_negotiated);
+ OPENSSL_free(result->server_npn_negotiated);
+ OPENSSL_free(result->client_alpn_negotiated);
+ OPENSSL_free(result->server_alpn_negotiated);
+ OPENSSL_free(result->result_session_ticket_app_data);
+ sk_X509_NAME_pop_free(result->server_ca_names, X509_NAME_free);
+ sk_X509_NAME_pop_free(result->client_ca_names, X509_NAME_free);
+ OPENSSL_free(result->cipher);
+ OPENSSL_free(result);
+}
+
+/*
+ * Since there appears to be no way to extract the sent/received alert
+ * from the SSL object directly, we use the info callback and stash
+ * the result in ex_data.
+ */
+typedef struct handshake_ex_data_st {
+ int alert_sent;
+ int num_fatal_alerts_sent;
+ int alert_received;
+ int session_ticket_do_not_call;
+ ssl_servername_t servername;
+} HANDSHAKE_EX_DATA;
+
+/* |ctx_data| itself is stack-allocated. */
+static void ctx_data_free_data(CTX_DATA *ctx_data)
+{
+ OPENSSL_free(ctx_data->npn_protocols);
+ ctx_data->npn_protocols = NULL;
+ OPENSSL_free(ctx_data->alpn_protocols);
+ ctx_data->alpn_protocols = NULL;
+ OPENSSL_free(ctx_data->srp_user);
+ ctx_data->srp_user = NULL;
+ OPENSSL_free(ctx_data->srp_password);
+ ctx_data->srp_password = NULL;
+ OPENSSL_free(ctx_data->session_ticket_app_data);
+ ctx_data->session_ticket_app_data = NULL;
+}
+
+static int ex_data_idx;
+
+static void info_cb(const SSL *s, int where, int ret)
+{
+ if (where & SSL_CB_ALERT) {
+ HANDSHAKE_EX_DATA *ex_data =
+ (HANDSHAKE_EX_DATA*)(SSL_get_ex_data(s, ex_data_idx));
+ if (where & SSL_CB_WRITE) {
+ ex_data->alert_sent = ret;
+ if (strcmp(SSL_alert_type_string(ret), "F") == 0
+ || strcmp(SSL_alert_desc_string(ret), "CN") == 0)
+ ex_data->num_fatal_alerts_sent++;
+ } else {
+ ex_data->alert_received = ret;
+ }
+ }
+}
+
+/* Select the appropriate server CTX.
+ * Returns SSL_TLSEXT_ERR_OK if a match was found.
+ * If |ignore| is 1, returns SSL_TLSEXT_ERR_NOACK on mismatch.
+ * Otherwise, returns SSL_TLSEXT_ERR_ALERT_FATAL on mismatch.
+ * An empty SNI extension also returns SSL_TSLEXT_ERR_NOACK.
+ */
+static int select_server_ctx(SSL *s, void *arg, int ignore)
+{
+ const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);
+ HANDSHAKE_EX_DATA *ex_data =
+ (HANDSHAKE_EX_DATA*)(SSL_get_ex_data(s, ex_data_idx));
+
+ if (servername == NULL) {
+ ex_data->servername = SSL_TEST_SERVERNAME_SERVER1;
+ return SSL_TLSEXT_ERR_NOACK;
+ }
+
+ if (strcmp(servername, "server2") == 0) {
+ SSL_CTX *new_ctx = (SSL_CTX*)arg;
+ SSL_set_SSL_CTX(s, new_ctx);
+ /*
+ * Copy over all the SSL_CTX options - reasonable behavior
+ * allows testing of cases where the options between two
+ * contexts differ/conflict
+ */
+ SSL_clear_options(s, 0xFFFFFFFFL);
+ SSL_set_options(s, SSL_CTX_get_options(new_ctx));
+
+ ex_data->servername = SSL_TEST_SERVERNAME_SERVER2;
+ return SSL_TLSEXT_ERR_OK;
+ } else if (strcmp(servername, "server1") == 0) {
+ ex_data->servername = SSL_TEST_SERVERNAME_SERVER1;
+ return SSL_TLSEXT_ERR_OK;
+ } else if (ignore) {
+ ex_data->servername = SSL_TEST_SERVERNAME_SERVER1;
+ return SSL_TLSEXT_ERR_NOACK;
+ } else {
+ /* Don't set an explicit alert, to test library defaults. */
+ return SSL_TLSEXT_ERR_ALERT_FATAL;
+ }
+}
+
+static int client_hello_select_server_ctx(SSL *s, void *arg, int ignore)
+{
+ const char *servername;
+ const unsigned char *p;
+ size_t len, remaining;
+ HANDSHAKE_EX_DATA *ex_data =
+ (HANDSHAKE_EX_DATA*)(SSL_get_ex_data(s, ex_data_idx));
+
+ /*
+ * The server_name extension was given too much extensibility when it
+ * was written, so parsing the normal case is a bit complex.
+ */
+ if (!SSL_client_hello_get0_ext(s, TLSEXT_TYPE_server_name, &p,
+ &remaining) ||
+ remaining <= 2)
+ return 0;
+ /* Extract the length of the supplied list of names. */
+ len = (*(p++) << 8);
+ len += *(p++);
+ if (len + 2 != remaining)
+ return 0;
+ remaining = len;
+ /*
+ * The list in practice only has a single element, so we only consider
+ * the first one.
+ */
+ if (remaining == 0 || *p++ != TLSEXT_NAMETYPE_host_name)
+ return 0;
+ remaining--;
+ /* Now we can finally pull out the byte array with the actual hostname. */
+ if (remaining <= 2)
+ return 0;
+ len = (*(p++) << 8);
+ len += *(p++);
+ if (len + 2 > remaining)
+ return 0;
+ remaining = len;
+ servername = (const char *)p;
+
+ if (len == strlen("server2") && strncmp(servername, "server2", len) == 0) {
+ SSL_CTX *new_ctx = arg;
+ SSL_set_SSL_CTX(s, new_ctx);
+ /*
+ * Copy over all the SSL_CTX options - reasonable behavior
+ * allows testing of cases where the options between two
+ * contexts differ/conflict
+ */
+ SSL_clear_options(s, 0xFFFFFFFFL);
+ SSL_set_options(s, SSL_CTX_get_options(new_ctx));
+
+ ex_data->servername = SSL_TEST_SERVERNAME_SERVER2;
+ return 1;
+ } else if (len == strlen("server1") &&
+ strncmp(servername, "server1", len) == 0) {
+ ex_data->servername = SSL_TEST_SERVERNAME_SERVER1;
+ return 1;
+ } else if (ignore) {
+ ex_data->servername = SSL_TEST_SERVERNAME_SERVER1;
+ return 1;
+ }
+ return 0;
+}
+/*
+ * (RFC 6066):
+ * If the server understood the ClientHello extension but
+ * does not recognize the server name, the server SHOULD take one of two
+ * actions: either abort the handshake by sending a fatal-level
+ * unrecognized_name(112) alert or continue the handshake.
+ *
+ * This behaviour is up to the application to configure; we test both
+ * configurations to ensure the state machine propagates the result
+ * correctly.
+ */
+static int servername_ignore_cb(SSL *s, int *ad, void *arg)
+{
+ return select_server_ctx(s, arg, 1);
+}
+
+static int servername_reject_cb(SSL *s, int *ad, void *arg)
+{
+ return select_server_ctx(s, arg, 0);
+}
+
+static int client_hello_ignore_cb(SSL *s, int *al, void *arg)
+{
+ if (!client_hello_select_server_ctx(s, arg, 1)) {
+ *al = SSL_AD_UNRECOGNIZED_NAME;
+ return SSL_CLIENT_HELLO_ERROR;
+ }
+ return SSL_CLIENT_HELLO_SUCCESS;
+}
+
+static int client_hello_reject_cb(SSL *s, int *al, void *arg)
+{
+ if (!client_hello_select_server_ctx(s, arg, 0)) {
+ *al = SSL_AD_UNRECOGNIZED_NAME;
+ return SSL_CLIENT_HELLO_ERROR;
+ }
+ return SSL_CLIENT_HELLO_SUCCESS;
+}
+
+static int client_hello_nov12_cb(SSL *s, int *al, void *arg)
+{
+ int ret;
+ unsigned int v;
+ const unsigned char *p;
+
+ v = SSL_client_hello_get0_legacy_version(s);
+ if (v > TLS1_2_VERSION || v < SSL3_VERSION) {
+ *al = SSL_AD_PROTOCOL_VERSION;
+ return SSL_CLIENT_HELLO_ERROR;
+ }
+ (void)SSL_client_hello_get0_session_id(s, &p);
+ if (p == NULL ||
+ SSL_client_hello_get0_random(s, &p) == 0 ||
+ SSL_client_hello_get0_ciphers(s, &p) == 0 ||
+ SSL_client_hello_get0_compression_methods(s, &p) == 0) {
+ *al = SSL_AD_INTERNAL_ERROR;
+ return SSL_CLIENT_HELLO_ERROR;
+ }
+ ret = client_hello_select_server_ctx(s, arg, 0);
+ SSL_set_max_proto_version(s, TLS1_1_VERSION);
+ if (!ret) {
+ *al = SSL_AD_UNRECOGNIZED_NAME;
+ return SSL_CLIENT_HELLO_ERROR;
+ }
+ return SSL_CLIENT_HELLO_SUCCESS;
+}
+
+static unsigned char dummy_ocsp_resp_good_val = 0xff;
+static unsigned char dummy_ocsp_resp_bad_val = 0xfe;
+
+static int server_ocsp_cb(SSL *s, void *arg)
+{
+ unsigned char *resp;
+
+ resp = OPENSSL_malloc(1);
+ if (resp == NULL)
+ return SSL_TLSEXT_ERR_ALERT_FATAL;
+ /*
+ * For the purposes of testing we just send back a dummy OCSP response
+ */
+ *resp = *(unsigned char *)arg;
+ if (!SSL_set_tlsext_status_ocsp_resp(s, resp, 1)) {
+ OPENSSL_free(resp);
+ return SSL_TLSEXT_ERR_ALERT_FATAL;
+ }
+
+ return SSL_TLSEXT_ERR_OK;
+}
+
+static int client_ocsp_cb(SSL *s, void *arg)
+{
+ const unsigned char *resp;
+ int len;
+
+ len = SSL_get_tlsext_status_ocsp_resp(s, &resp);
+ if (len != 1 || *resp != dummy_ocsp_resp_good_val)
+ return 0;
+
+ return 1;
+}
+
+static int verify_reject_cb(X509_STORE_CTX *ctx, void *arg) {
+ X509_STORE_CTX_set_error(ctx, X509_V_ERR_APPLICATION_VERIFICATION);
+ return 0;
+}
+
+static int n_retries = 0;
+static int verify_retry_cb(X509_STORE_CTX *ctx, void *arg) {
+ int idx = SSL_get_ex_data_X509_STORE_CTX_idx();
+ SSL *ssl;
+
+ /* this should not happen but check anyway */
+ if (idx < 0
+ || (ssl = X509_STORE_CTX_get_ex_data(ctx, idx)) == NULL)
+ return 0;
+
+ if (--n_retries < 0)
+ return 1;
+
+ return SSL_set_retry_verify(ssl);
+}
+
+static int verify_accept_cb(X509_STORE_CTX *ctx, void *arg) {
+ return 1;
+}
+
+static int broken_session_ticket_cb(SSL *s, unsigned char *key_name,
+ unsigned char *iv, EVP_CIPHER_CTX *ctx,
+ EVP_MAC_CTX *hctx, int enc)
+{
+ return 0;
+}
+
+static int do_not_call_session_ticket_cb(SSL *s, unsigned char *key_name,
+ unsigned char *iv,
+ EVP_CIPHER_CTX *ctx,
+ EVP_MAC_CTX *hctx, int enc)
+{
+ HANDSHAKE_EX_DATA *ex_data =
+ (HANDSHAKE_EX_DATA*)(SSL_get_ex_data(s, ex_data_idx));
+ ex_data->session_ticket_do_not_call = 1;
+ return 0;
+}
+
+/* Parse the comma-separated list into TLS format. */
+static int parse_protos(const char *protos, unsigned char **out, size_t *outlen)
+{
+ size_t len, i, prefix;
+
+ len = strlen(protos);
+
+ /* Should never have reuse. */
+ if (!TEST_ptr_null(*out)
+ /* Test values are small, so we omit length limit checks. */
+ || !TEST_ptr(*out = OPENSSL_malloc(len + 1)))
+ return 0;
+ *outlen = len + 1;
+
+ /*
+ * foo => '3', 'f', 'o', 'o'
+ * foo,bar => '3', 'f', 'o', 'o', '3', 'b', 'a', 'r'
+ */
+ memcpy(*out + 1, protos, len);
+
+ prefix = 0;
+ i = prefix + 1;
+ while (i <= len) {
+ if ((*out)[i] == ',') {
+ if (!TEST_int_gt(i - 1, prefix))
+ goto err;
+ (*out)[prefix] = (unsigned char)(i - 1 - prefix);
+ prefix = i;
+ }
+ i++;
+ }
+ if (!TEST_int_gt(len, prefix))
+ goto err;
+ (*out)[prefix] = (unsigned char)(len - prefix);
+ return 1;
+
+err:
+ OPENSSL_free(*out);
+ *out = NULL;
+ return 0;
+}
+
+#ifndef OPENSSL_NO_NEXTPROTONEG
+/*
+ * The client SHOULD select the first protocol advertised by the server that it
+ * also supports. In the event that the client doesn't support any of server's
+ * protocols, or the server doesn't advertise any, it SHOULD select the first
+ * protocol that it supports.
+ */
+static int client_npn_cb(SSL *s, unsigned char **out, unsigned char *outlen,
+ const unsigned char *in, unsigned int inlen,
+ void *arg)
+{
+ CTX_DATA *ctx_data = (CTX_DATA*)(arg);
+ int ret;
+
+ ret = SSL_select_next_proto(out, outlen, in, inlen,
+ ctx_data->npn_protocols,
+ ctx_data->npn_protocols_len);
+ /* Accept both OPENSSL_NPN_NEGOTIATED and OPENSSL_NPN_NO_OVERLAP. */
+ return TEST_true(ret == OPENSSL_NPN_NEGOTIATED || ret == OPENSSL_NPN_NO_OVERLAP)
+ ? SSL_TLSEXT_ERR_OK : SSL_TLSEXT_ERR_ALERT_FATAL;
+}
+
+static int server_npn_cb(SSL *s, const unsigned char **data,
+ unsigned int *len, void *arg)
+{
+ CTX_DATA *ctx_data = (CTX_DATA*)(arg);
+ *data = ctx_data->npn_protocols;
+ *len = ctx_data->npn_protocols_len;
+ return SSL_TLSEXT_ERR_OK;
+}
+#endif
+
+/*
+ * The server SHOULD select the most highly preferred protocol that it supports
+ * and that is also advertised by the client. In the event that the server
+ * supports no protocols that the client advertises, then the server SHALL
+ * respond with a fatal "no_application_protocol" alert.
+ */
+static int server_alpn_cb(SSL *s, const unsigned char **out,
+ unsigned char *outlen, const unsigned char *in,
+ unsigned int inlen, void *arg)
+{
+ CTX_DATA *ctx_data = (CTX_DATA*)(arg);
+ int ret;
+
+ /* SSL_select_next_proto isn't const-correct... */
+ unsigned char *tmp_out;
+
+ /*
+ * The result points either to |in| or to |ctx_data->alpn_protocols|.
+ * The callback is allowed to point to |in| or to a long-lived buffer,
+ * so we can return directly without storing a copy.
+ */
+ ret = SSL_select_next_proto(&tmp_out, outlen,
+ ctx_data->alpn_protocols,
+ ctx_data->alpn_protocols_len, in, inlen);
+
+ *out = tmp_out;
+ /* Unlike NPN, we don't tolerate a mismatch. */
+ return ret == OPENSSL_NPN_NEGOTIATED ? SSL_TLSEXT_ERR_OK
+ : SSL_TLSEXT_ERR_ALERT_FATAL;
+}
+
+static int generate_session_ticket_cb(SSL *s, void *arg)
+{
+ CTX_DATA *server_ctx_data = arg;
+ SSL_SESSION *ss = SSL_get_session(s);
+ char *app_data = server_ctx_data->session_ticket_app_data;
+
+ if (ss == NULL || app_data == NULL)
+ return 0;
+
+ return SSL_SESSION_set1_ticket_appdata(ss, app_data, strlen(app_data));
+}
+
+static int decrypt_session_ticket_cb(SSL *s, SSL_SESSION *ss,
+ const unsigned char *keyname,
+ size_t keyname_len,
+ SSL_TICKET_STATUS status,
+ void *arg)
+{
+ switch (status) {
+ case SSL_TICKET_EMPTY:
+ case SSL_TICKET_NO_DECRYPT:
+ return SSL_TICKET_RETURN_IGNORE_RENEW;
+ case SSL_TICKET_SUCCESS:
+ return SSL_TICKET_RETURN_USE;
+ case SSL_TICKET_SUCCESS_RENEW:
+ return SSL_TICKET_RETURN_USE_RENEW;
+ default:
+ break;
+ }
+ return SSL_TICKET_RETURN_ABORT;
+}
+
+/*
+ * Configure callbacks and other properties that can't be set directly
+ * in the server/client CONF.
+ */
+static int configure_handshake_ctx(SSL_CTX *server_ctx, SSL_CTX *server2_ctx,
+ SSL_CTX *client_ctx,
+ const SSL_TEST_CTX *test,
+ const SSL_TEST_EXTRA_CONF *extra,
+ CTX_DATA *server_ctx_data,
+ CTX_DATA *server2_ctx_data,
+ CTX_DATA *client_ctx_data)
+{
+ unsigned char *ticket_keys;
+ size_t ticket_key_len;
+
+ if (!TEST_int_eq(SSL_CTX_set_max_send_fragment(server_ctx,
+ test->max_fragment_size), 1))
+ goto err;
+ if (server2_ctx != NULL) {
+ if (!TEST_int_eq(SSL_CTX_set_max_send_fragment(server2_ctx,
+ test->max_fragment_size),
+ 1))
+ goto err;
+ }
+ if (!TEST_int_eq(SSL_CTX_set_max_send_fragment(client_ctx,
+ test->max_fragment_size), 1))
+ goto err;
+
+ switch (extra->client.verify_callback) {
+ case SSL_TEST_VERIFY_ACCEPT_ALL:
+ SSL_CTX_set_cert_verify_callback(client_ctx, &verify_accept_cb, NULL);
+ break;
+ case SSL_TEST_VERIFY_RETRY_ONCE:
+ n_retries = 1;
+ SSL_CTX_set_cert_verify_callback(client_ctx, &verify_retry_cb, NULL);
+ break;
+ case SSL_TEST_VERIFY_REJECT_ALL:
+ SSL_CTX_set_cert_verify_callback(client_ctx, &verify_reject_cb, NULL);
+ break;
+ case SSL_TEST_VERIFY_NONE:
+ break;
+ }
+
+ switch (extra->client.max_fragment_len_mode) {
+ case TLSEXT_max_fragment_length_512:
+ case TLSEXT_max_fragment_length_1024:
+ case TLSEXT_max_fragment_length_2048:
+ case TLSEXT_max_fragment_length_4096:
+ case TLSEXT_max_fragment_length_DISABLED:
+ SSL_CTX_set_tlsext_max_fragment_length(
+ client_ctx, extra->client.max_fragment_len_mode);
+ break;
+ }
+
+ /*
+ * Link the two contexts for SNI purposes.
+ * Also do ClientHello callbacks here, as setting both ClientHello and SNI
+ * is bad.
+ */
+ switch (extra->server.servername_callback) {
+ case SSL_TEST_SERVERNAME_IGNORE_MISMATCH:
+ SSL_CTX_set_tlsext_servername_callback(server_ctx, servername_ignore_cb);
+ SSL_CTX_set_tlsext_servername_arg(server_ctx, server2_ctx);
+ break;
+ case SSL_TEST_SERVERNAME_REJECT_MISMATCH:
+ SSL_CTX_set_tlsext_servername_callback(server_ctx, servername_reject_cb);
+ SSL_CTX_set_tlsext_servername_arg(server_ctx, server2_ctx);
+ break;
+ case SSL_TEST_SERVERNAME_CB_NONE:
+ break;
+ case SSL_TEST_SERVERNAME_CLIENT_HELLO_IGNORE_MISMATCH:
+ SSL_CTX_set_client_hello_cb(server_ctx, client_hello_ignore_cb, server2_ctx);
+ break;
+ case SSL_TEST_SERVERNAME_CLIENT_HELLO_REJECT_MISMATCH:
+ SSL_CTX_set_client_hello_cb(server_ctx, client_hello_reject_cb, server2_ctx);
+ break;
+ case SSL_TEST_SERVERNAME_CLIENT_HELLO_NO_V12:
+ SSL_CTX_set_client_hello_cb(server_ctx, client_hello_nov12_cb, server2_ctx);
+ }
+
+ if (extra->server.cert_status != SSL_TEST_CERT_STATUS_NONE) {
+ SSL_CTX_set_tlsext_status_type(client_ctx, TLSEXT_STATUSTYPE_ocsp);
+ SSL_CTX_set_tlsext_status_cb(client_ctx, client_ocsp_cb);
+ SSL_CTX_set_tlsext_status_arg(client_ctx, NULL);
+ SSL_CTX_set_tlsext_status_cb(server_ctx, server_ocsp_cb);
+ SSL_CTX_set_tlsext_status_arg(server_ctx,
+ ((extra->server.cert_status == SSL_TEST_CERT_STATUS_GOOD_RESPONSE)
+ ? &dummy_ocsp_resp_good_val : &dummy_ocsp_resp_bad_val));
+ }
+
+ /*
+ * The initial_ctx/session_ctx always handles the encrypt/decrypt of the
+ * session ticket. This ticket_key callback is assigned to the second
+ * session (assigned via SNI), and should never be invoked
+ */
+ if (server2_ctx != NULL)
+ SSL_CTX_set_tlsext_ticket_key_evp_cb(server2_ctx,
+ do_not_call_session_ticket_cb);
+
+ if (extra->server.broken_session_ticket) {
+ SSL_CTX_set_tlsext_ticket_key_evp_cb(server_ctx,
+ broken_session_ticket_cb);
+ }
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ if (extra->server.npn_protocols != NULL) {
+ if (!TEST_true(parse_protos(extra->server.npn_protocols,
+ &server_ctx_data->npn_protocols,
+ &server_ctx_data->npn_protocols_len)))
+ goto err;
+ SSL_CTX_set_npn_advertised_cb(server_ctx, server_npn_cb,
+ server_ctx_data);
+ }
+ if (extra->server2.npn_protocols != NULL) {
+ if (!TEST_true(parse_protos(extra->server2.npn_protocols,
+ &server2_ctx_data->npn_protocols,
+ &server2_ctx_data->npn_protocols_len))
+ || !TEST_ptr(server2_ctx))
+ goto err;
+ SSL_CTX_set_npn_advertised_cb(server2_ctx, server_npn_cb,
+ server2_ctx_data);
+ }
+ if (extra->client.npn_protocols != NULL) {
+ if (!TEST_true(parse_protos(extra->client.npn_protocols,
+ &client_ctx_data->npn_protocols,
+ &client_ctx_data->npn_protocols_len)))
+ goto err;
+ SSL_CTX_set_next_proto_select_cb(client_ctx, client_npn_cb,
+ client_ctx_data);
+ }
+#endif
+ if (extra->server.alpn_protocols != NULL) {
+ if (!TEST_true(parse_protos(extra->server.alpn_protocols,
+ &server_ctx_data->alpn_protocols,
+ &server_ctx_data->alpn_protocols_len)))
+ goto err;
+ SSL_CTX_set_alpn_select_cb(server_ctx, server_alpn_cb, server_ctx_data);
+ }
+ if (extra->server2.alpn_protocols != NULL) {
+ if (!TEST_ptr(server2_ctx)
+ || !TEST_true(parse_protos(extra->server2.alpn_protocols,
+ &server2_ctx_data->alpn_protocols,
+ &server2_ctx_data->alpn_protocols_len
+ )))
+ goto err;
+ SSL_CTX_set_alpn_select_cb(server2_ctx, server_alpn_cb,
+ server2_ctx_data);
+ }
+ if (extra->client.alpn_protocols != NULL) {
+ unsigned char *alpn_protos = NULL;
+ size_t alpn_protos_len = 0;
+
+ if (!TEST_true(parse_protos(extra->client.alpn_protocols,
+ &alpn_protos, &alpn_protos_len))
+ /* Reversed return value convention... */
+ || !TEST_int_eq(SSL_CTX_set_alpn_protos(client_ctx, alpn_protos,
+ alpn_protos_len), 0))
+ goto err;
+ OPENSSL_free(alpn_protos);
+ }
+
+ if (extra->server.session_ticket_app_data != NULL) {
+ server_ctx_data->session_ticket_app_data =
+ OPENSSL_strdup(extra->server.session_ticket_app_data);
+ SSL_CTX_set_session_ticket_cb(server_ctx, generate_session_ticket_cb,
+ decrypt_session_ticket_cb, server_ctx_data);
+ }
+ if (extra->server2.session_ticket_app_data != NULL) {
+ if (!TEST_ptr(server2_ctx))
+ goto err;
+ server2_ctx_data->session_ticket_app_data =
+ OPENSSL_strdup(extra->server2.session_ticket_app_data);
+ SSL_CTX_set_session_ticket_cb(server2_ctx, NULL,
+ decrypt_session_ticket_cb, server2_ctx_data);
+ }
+
+ /*
+ * Use fixed session ticket keys so that we can decrypt a ticket created with
+ * one CTX in another CTX. Don't address server2 for the moment.
+ */
+ ticket_key_len = SSL_CTX_set_tlsext_ticket_keys(server_ctx, NULL, 0);
+ if (!TEST_ptr(ticket_keys = OPENSSL_zalloc(ticket_key_len))
+ || !TEST_int_eq(SSL_CTX_set_tlsext_ticket_keys(server_ctx,
+ ticket_keys,
+ ticket_key_len), 1)) {
+ OPENSSL_free(ticket_keys);
+ goto err;
+ }
+ OPENSSL_free(ticket_keys);
+
+ /* The default log list includes EC keys, so CT can't work without EC. */
+#if !defined(OPENSSL_NO_CT) && !defined(OPENSSL_NO_EC)
+ if (!TEST_true(SSL_CTX_set_default_ctlog_list_file(client_ctx)))
+ goto err;
+ switch (extra->client.ct_validation) {
+ case SSL_TEST_CT_VALIDATION_PERMISSIVE:
+ if (!TEST_true(SSL_CTX_enable_ct(client_ctx,
+ SSL_CT_VALIDATION_PERMISSIVE)))
+ goto err;
+ break;
+ case SSL_TEST_CT_VALIDATION_STRICT:
+ if (!TEST_true(SSL_CTX_enable_ct(client_ctx, SSL_CT_VALIDATION_STRICT)))
+ goto err;
+ break;
+ case SSL_TEST_CT_VALIDATION_NONE:
+ break;
+ }
+#endif
+#ifndef OPENSSL_NO_SRP
+ if (!configure_handshake_ctx_for_srp(server_ctx, server2_ctx, client_ctx,
+ extra, server_ctx_data,
+ server2_ctx_data, client_ctx_data))
+ goto err;
+#endif /* !OPENSSL_NO_SRP */
+ return 1;
+err:
+ return 0;
+}
+
+/* Configure per-SSL callbacks and other properties. */
+static void configure_handshake_ssl(SSL *server, SSL *client,
+ const SSL_TEST_EXTRA_CONF *extra)
+{
+ if (extra->client.servername != SSL_TEST_SERVERNAME_NONE)
+ SSL_set_tlsext_host_name(client,
+ ssl_servername_name(extra->client.servername));
+ if (extra->client.enable_pha)
+ SSL_set_post_handshake_auth(client, 1);
+}
+
+/* The status for each connection phase. */
+typedef enum {
+ PEER_SUCCESS,
+ PEER_RETRY,
+ PEER_ERROR,
+ PEER_WAITING,
+ PEER_TEST_FAILURE
+} peer_status_t;
+
+/* An SSL object and associated read-write buffers. */
+typedef struct peer_st {
+ SSL *ssl;
+ /* Buffer lengths are int to match the SSL read/write API. */
+ unsigned char *write_buf;
+ int write_buf_len;
+ unsigned char *read_buf;
+ int read_buf_len;
+ int bytes_to_write;
+ int bytes_to_read;
+ peer_status_t status;
+} PEER;
+
+static int create_peer(PEER *peer, SSL_CTX *ctx)
+{
+ static const int peer_buffer_size = 64 * 1024;
+ SSL *ssl = NULL;
+ unsigned char *read_buf = NULL, *write_buf = NULL;
+
+ if (!TEST_ptr(ssl = SSL_new(ctx))
+ || !TEST_ptr(write_buf = OPENSSL_zalloc(peer_buffer_size))
+ || !TEST_ptr(read_buf = OPENSSL_zalloc(peer_buffer_size)))
+ goto err;
+
+ peer->ssl = ssl;
+ peer->write_buf = write_buf;
+ peer->read_buf = read_buf;
+ peer->write_buf_len = peer->read_buf_len = peer_buffer_size;
+ return 1;
+err:
+ SSL_free(ssl);
+ OPENSSL_free(write_buf);
+ OPENSSL_free(read_buf);
+ return 0;
+}
+
+static void peer_free_data(PEER *peer)
+{
+ SSL_free(peer->ssl);
+ OPENSSL_free(peer->write_buf);
+ OPENSSL_free(peer->read_buf);
+}
+
+/*
+ * Note that we could do the handshake transparently under an SSL_write,
+ * but separating the steps is more helpful for debugging test failures.
+ */
+static void do_handshake_step(PEER *peer)
+{
+ if (!TEST_int_eq(peer->status, PEER_RETRY)) {
+ peer->status = PEER_TEST_FAILURE;
+ } else {
+ int ret = SSL_do_handshake(peer->ssl);
+
+ if (ret == 1) {
+ peer->status = PEER_SUCCESS;
+ } else if (ret == 0) {
+ peer->status = PEER_ERROR;
+ } else {
+ int error = SSL_get_error(peer->ssl, ret);
+
+ /* Memory bios should never block with SSL_ERROR_WANT_WRITE. */
+ if (error != SSL_ERROR_WANT_READ
+ && error != SSL_ERROR_WANT_RETRY_VERIFY)
+ peer->status = PEER_ERROR;
+ }
+ }
+}
+
+/*-
+ * Send/receive some application data. The read-write sequence is
+ * Peer A: (R) W - first read will yield no data
+ * Peer B: R W
+ * ...
+ * Peer A: R W
+ * Peer B: R W
+ * Peer A: R
+ */
+static void do_app_data_step(PEER *peer)
+{
+ int ret = 1, write_bytes;
+
+ if (!TEST_int_eq(peer->status, PEER_RETRY)) {
+ peer->status = PEER_TEST_FAILURE;
+ return;
+ }
+
+ /* We read everything available... */
+ while (ret > 0 && peer->bytes_to_read) {
+ ret = SSL_read(peer->ssl, peer->read_buf, peer->read_buf_len);
+ if (ret > 0) {
+ if (!TEST_int_le(ret, peer->bytes_to_read)) {
+ peer->status = PEER_TEST_FAILURE;
+ return;
+ }
+ peer->bytes_to_read -= ret;
+ } else if (ret == 0) {
+ peer->status = PEER_ERROR;
+ return;
+ } else {
+ int error = SSL_get_error(peer->ssl, ret);
+ if (error != SSL_ERROR_WANT_READ) {
+ peer->status = PEER_ERROR;
+ return;
+ } /* Else continue with write. */
+ }
+ }
+
+ /* ... but we only write one write-buffer-full of data. */
+ write_bytes = peer->bytes_to_write < peer->write_buf_len ? peer->bytes_to_write :
+ peer->write_buf_len;
+ if (write_bytes) {
+ ret = SSL_write(peer->ssl, peer->write_buf, write_bytes);
+ if (ret > 0) {
+ /* SSL_write will only succeed with a complete write. */
+ if (!TEST_int_eq(ret, write_bytes)) {
+ peer->status = PEER_TEST_FAILURE;
+ return;
+ }
+ peer->bytes_to_write -= ret;
+ } else {
+ /*
+ * We should perhaps check for SSL_ERROR_WANT_READ/WRITE here
+ * but this doesn't yet occur with current app data sizes.
+ */
+ peer->status = PEER_ERROR;
+ return;
+ }
+ }
+
+ /*
+ * We could simply finish when there was nothing to read, and we have
+ * nothing left to write. But keeping track of the expected number of bytes
+ * to read gives us somewhat better guarantees that all data sent is in fact
+ * received.
+ */
+ if (peer->bytes_to_write == 0 && peer->bytes_to_read == 0) {
+ peer->status = PEER_SUCCESS;
+ }
+}
+
+static void do_reneg_setup_step(const SSL_TEST_CTX *test_ctx, PEER *peer)
+{
+ int ret;
+ char buf;
+
+ if (peer->status == PEER_SUCCESS) {
+ /*
+ * We are a client that succeeded this step previously, but the server
+ * wanted to retry. Probably there is a no_renegotiation warning alert
+ * waiting for us. Attempt to continue the handshake.
+ */
+ peer->status = PEER_RETRY;
+ do_handshake_step(peer);
+ return;
+ }
+
+ if (!TEST_int_eq(peer->status, PEER_RETRY)
+ || !TEST_true(test_ctx->handshake_mode
+ == SSL_TEST_HANDSHAKE_RENEG_SERVER
+ || test_ctx->handshake_mode
+ == SSL_TEST_HANDSHAKE_RENEG_CLIENT
+ || test_ctx->handshake_mode
+ == SSL_TEST_HANDSHAKE_KEY_UPDATE_SERVER
+ || test_ctx->handshake_mode
+ == SSL_TEST_HANDSHAKE_KEY_UPDATE_CLIENT
+ || test_ctx->handshake_mode
+ == SSL_TEST_HANDSHAKE_POST_HANDSHAKE_AUTH)) {
+ peer->status = PEER_TEST_FAILURE;
+ return;
+ }
+
+ /* Reset the count of the amount of app data we need to read/write */
+ peer->bytes_to_write = peer->bytes_to_read = test_ctx->app_data_size;
+
+ /* Check if we are the peer that is going to initiate */
+ if ((test_ctx->handshake_mode == SSL_TEST_HANDSHAKE_RENEG_SERVER
+ && SSL_is_server(peer->ssl))
+ || (test_ctx->handshake_mode == SSL_TEST_HANDSHAKE_RENEG_CLIENT
+ && !SSL_is_server(peer->ssl))) {
+ /*
+ * If we already asked for a renegotiation then fall through to the
+ * SSL_read() below.
+ */
+ if (!SSL_renegotiate_pending(peer->ssl)) {
+ /*
+ * If we are the client we will always attempt to resume the
+ * session. The server may or may not resume dependent on the
+ * setting of SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
+ */
+ if (SSL_is_server(peer->ssl)) {
+ ret = SSL_renegotiate(peer->ssl);
+ } else {
+ int full_reneg = 0;
+
+ if (test_ctx->extra.client.no_extms_on_reneg) {
+ SSL_set_options(peer->ssl, SSL_OP_NO_EXTENDED_MASTER_SECRET);
+ full_reneg = 1;
+ }
+ if (test_ctx->extra.client.reneg_ciphers != NULL) {
+ if (!SSL_set_cipher_list(peer->ssl,
+ test_ctx->extra.client.reneg_ciphers)) {
+ peer->status = PEER_ERROR;
+ return;
+ }
+ full_reneg = 1;
+ }
+ if (full_reneg)
+ ret = SSL_renegotiate(peer->ssl);
+ else
+ ret = SSL_renegotiate_abbreviated(peer->ssl);
+ }
+ if (!ret) {
+ peer->status = PEER_ERROR;
+ return;
+ }
+ do_handshake_step(peer);
+ /*
+ * If status is PEER_RETRY it means we're waiting on the peer to
+ * continue the handshake. As far as setting up the renegotiation is
+ * concerned that is a success. The next step will continue the
+ * handshake to its conclusion.
+ *
+ * If status is PEER_SUCCESS then we are the server and we have
+ * successfully sent the HelloRequest. We need to continue to wait
+ * until the handshake arrives from the client.
+ */
+ if (peer->status == PEER_RETRY)
+ peer->status = PEER_SUCCESS;
+ else if (peer->status == PEER_SUCCESS)
+ peer->status = PEER_RETRY;
+ return;
+ }
+ } else if (test_ctx->handshake_mode == SSL_TEST_HANDSHAKE_KEY_UPDATE_SERVER
+ || test_ctx->handshake_mode
+ == SSL_TEST_HANDSHAKE_KEY_UPDATE_CLIENT) {
+ if (SSL_is_server(peer->ssl)
+ != (test_ctx->handshake_mode
+ == SSL_TEST_HANDSHAKE_KEY_UPDATE_SERVER)) {
+ peer->status = PEER_SUCCESS;
+ return;
+ }
+
+ ret = SSL_key_update(peer->ssl, test_ctx->key_update_type);
+ if (!ret) {
+ peer->status = PEER_ERROR;
+ return;
+ }
+ do_handshake_step(peer);
+ /*
+ * This is a one step handshake. We shouldn't get anything other than
+ * PEER_SUCCESS
+ */
+ if (peer->status != PEER_SUCCESS)
+ peer->status = PEER_ERROR;
+ return;
+ } else if (test_ctx->handshake_mode == SSL_TEST_HANDSHAKE_POST_HANDSHAKE_AUTH) {
+ if (SSL_is_server(peer->ssl)) {
+ /* Make the server believe it's received the extension */
+ if (test_ctx->extra.server.force_pha)
+ peer->ssl->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
+ ret = SSL_verify_client_post_handshake(peer->ssl);
+ if (!ret) {
+ peer->status = PEER_ERROR;
+ return;
+ }
+ }
+ do_handshake_step(peer);
+ /*
+ * This is a one step handshake. We shouldn't get anything other than
+ * PEER_SUCCESS
+ */
+ if (peer->status != PEER_SUCCESS)
+ peer->status = PEER_ERROR;
+ return;
+ }
+
+ /*
+ * The SSL object is still expecting app data, even though it's going to
+ * get a handshake message. We try to read, and it should fail - after which
+ * we should be in a handshake
+ */
+ ret = SSL_read(peer->ssl, &buf, sizeof(buf));
+ if (ret >= 0) {
+ /*
+ * We're not actually expecting data - we're expecting a reneg to
+ * start
+ */
+ peer->status = PEER_ERROR;
+ return;
+ } else {
+ int error = SSL_get_error(peer->ssl, ret);
+ if (error != SSL_ERROR_WANT_READ) {
+ peer->status = PEER_ERROR;
+ return;
+ }
+ /* If we're not in init yet then we're not done with setup yet */
+ if (!SSL_in_init(peer->ssl))
+ return;
+ }
+
+ peer->status = PEER_SUCCESS;
+}
+
+
+/*
+ * RFC 5246 says:
+ *
+ * Note that as of TLS 1.1,
+ * failure to properly close a connection no longer requires that a
+ * session not be resumed. This is a change from TLS 1.0 to conform
+ * with widespread implementation practice.
+ *
+ * However,
+ * (a) OpenSSL requires that a connection be shutdown for all protocol versions.
+ * (b) We test lower versions, too.
+ * So we just implement shutdown. We do a full bidirectional shutdown so that we
+ * can compare sent and received close_notify alerts and get some test coverage
+ * for SSL_shutdown as a bonus.
+ */
+static void do_shutdown_step(PEER *peer)
+{
+ int ret;
+
+ if (!TEST_int_eq(peer->status, PEER_RETRY)) {
+ peer->status = PEER_TEST_FAILURE;
+ return;
+ }
+ ret = SSL_shutdown(peer->ssl);
+
+ if (ret == 1) {
+ peer->status = PEER_SUCCESS;
+ } else if (ret < 0) { /* On 0, we retry. */
+ int error = SSL_get_error(peer->ssl, ret);
+
+ if (error != SSL_ERROR_WANT_READ && error != SSL_ERROR_WANT_WRITE)
+ peer->status = PEER_ERROR;
+ }
+}
+
+typedef enum {
+ HANDSHAKE,
+ RENEG_APPLICATION_DATA,
+ RENEG_SETUP,
+ RENEG_HANDSHAKE,
+ APPLICATION_DATA,
+ SHUTDOWN,
+ CONNECTION_DONE
+} connect_phase_t;
+
+
+static int renegotiate_op(const SSL_TEST_CTX *test_ctx)
+{
+ switch (test_ctx->handshake_mode) {
+ case SSL_TEST_HANDSHAKE_RENEG_SERVER:
+ case SSL_TEST_HANDSHAKE_RENEG_CLIENT:
+ return 1;
+ default:
+ return 0;
+ }
+}
+static int post_handshake_op(const SSL_TEST_CTX *test_ctx)
+{
+ switch (test_ctx->handshake_mode) {
+ case SSL_TEST_HANDSHAKE_KEY_UPDATE_CLIENT:
+ case SSL_TEST_HANDSHAKE_KEY_UPDATE_SERVER:
+ case SSL_TEST_HANDSHAKE_POST_HANDSHAKE_AUTH:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static connect_phase_t next_phase(const SSL_TEST_CTX *test_ctx,
+ connect_phase_t phase)
+{
+ switch (phase) {
+ case HANDSHAKE:
+ if (renegotiate_op(test_ctx) || post_handshake_op(test_ctx))
+ return RENEG_APPLICATION_DATA;
+ return APPLICATION_DATA;
+ case RENEG_APPLICATION_DATA:
+ return RENEG_SETUP;
+ case RENEG_SETUP:
+ if (post_handshake_op(test_ctx))
+ return APPLICATION_DATA;
+ return RENEG_HANDSHAKE;
+ case RENEG_HANDSHAKE:
+ return APPLICATION_DATA;
+ case APPLICATION_DATA:
+ return SHUTDOWN;
+ case SHUTDOWN:
+ return CONNECTION_DONE;
+ case CONNECTION_DONE:
+ TEST_error("Trying to progress after connection done");
+ break;
+ }
+ return -1;
+}
+
+static void do_connect_step(const SSL_TEST_CTX *test_ctx, PEER *peer,
+ connect_phase_t phase)
+{
+ switch (phase) {
+ case HANDSHAKE:
+ do_handshake_step(peer);
+ break;
+ case RENEG_APPLICATION_DATA:
+ do_app_data_step(peer);
+ break;
+ case RENEG_SETUP:
+ do_reneg_setup_step(test_ctx, peer);
+ break;
+ case RENEG_HANDSHAKE:
+ do_handshake_step(peer);
+ break;
+ case APPLICATION_DATA:
+ do_app_data_step(peer);
+ break;
+ case SHUTDOWN:
+ do_shutdown_step(peer);
+ break;
+ case CONNECTION_DONE:
+ TEST_error("Action after connection done");
+ break;
+ }
+}
+
+typedef enum {
+ /* Both parties succeeded. */
+ HANDSHAKE_SUCCESS,
+ /* Client errored. */
+ CLIENT_ERROR,
+ /* Server errored. */
+ SERVER_ERROR,
+ /* Peers are in inconsistent state. */
+ INTERNAL_ERROR,
+ /* One or both peers not done. */
+ HANDSHAKE_RETRY
+} handshake_status_t;
+
+/*
+ * Determine the handshake outcome.
+ * last_status: the status of the peer to have acted last.
+ * previous_status: the status of the peer that didn't act last.
+ * client_spoke_last: 1 if the client went last.
+ */
+static handshake_status_t handshake_status(peer_status_t last_status,
+ peer_status_t previous_status,
+ int client_spoke_last)
+{
+ switch (last_status) {
+ case PEER_TEST_FAILURE:
+ return INTERNAL_ERROR;
+
+ case PEER_WAITING:
+ /* Shouldn't ever happen */
+ return INTERNAL_ERROR;
+
+ case PEER_SUCCESS:
+ switch (previous_status) {
+ case PEER_TEST_FAILURE:
+ return INTERNAL_ERROR;
+ case PEER_SUCCESS:
+ /* Both succeeded. */
+ return HANDSHAKE_SUCCESS;
+ case PEER_WAITING:
+ case PEER_RETRY:
+ /* Let the first peer finish. */
+ return HANDSHAKE_RETRY;
+ case PEER_ERROR:
+ /*
+ * Second peer succeeded despite the fact that the first peer
+ * already errored. This shouldn't happen.
+ */
+ return INTERNAL_ERROR;
+ }
+ break;
+
+ case PEER_RETRY:
+ return HANDSHAKE_RETRY;
+
+ case PEER_ERROR:
+ switch (previous_status) {
+ case PEER_TEST_FAILURE:
+ return INTERNAL_ERROR;
+ case PEER_WAITING:
+ /* The client failed immediately before sending the ClientHello */
+ return client_spoke_last ? CLIENT_ERROR : INTERNAL_ERROR;
+ case PEER_SUCCESS:
+ /* First peer succeeded but second peer errored. */
+ return client_spoke_last ? CLIENT_ERROR : SERVER_ERROR;
+ case PEER_RETRY:
+ /* We errored; let the peer finish. */
+ return HANDSHAKE_RETRY;
+ case PEER_ERROR:
+ /* Both peers errored. Return the one that errored first. */
+ return client_spoke_last ? SERVER_ERROR : CLIENT_ERROR;
+ }
+ }
+ /* Control should never reach here. */
+ return INTERNAL_ERROR;
+}
+
+/* Convert unsigned char buf's that shouldn't contain any NUL-bytes to char. */
+static char *dup_str(const unsigned char *in, size_t len)
+{
+ char *ret = NULL;
+
+ if (len == 0)
+ return NULL;
+
+ /* Assert that the string does not contain NUL-bytes. */
+ if (TEST_size_t_eq(OPENSSL_strnlen((const char*)(in), len), len))
+ TEST_ptr(ret = OPENSSL_strndup((const char*)(in), len));
+ return ret;
+}
+
+static int pkey_type(EVP_PKEY *pkey)
+{
+ if (EVP_PKEY_is_a(pkey, "EC")) {
+ char name[80];
+ size_t name_len;
+
+ if (!EVP_PKEY_get_group_name(pkey, name, sizeof(name), &name_len))
+ return NID_undef;
+ return OBJ_txt2nid(name);
+ }
+ return EVP_PKEY_get_id(pkey);
+}
+
+static int peer_pkey_type(SSL *s)
+{
+ X509 *x = SSL_get0_peer_certificate(s);
+
+ if (x != NULL)
+ return pkey_type(X509_get0_pubkey(x));
+ return NID_undef;
+}
+
+#if !defined(OPENSSL_NO_SCTP) && !defined(OPENSSL_NO_SOCK)
+static int set_sock_as_sctp(int sock)
+{
+ struct sctp_assocparams assocparams;
+ struct sctp_rtoinfo rto_info;
+ BIO *tmpbio;
+
+ /*
+ * To allow tests to fail fast (within a second or so), reduce the
+ * retransmission timeouts and the number of retransmissions.
+ */
+ memset(&rto_info, 0, sizeof(struct sctp_rtoinfo));
+ rto_info.srto_initial = 100;
+ rto_info.srto_max = 200;
+ rto_info.srto_min = 50;
+ (void)setsockopt(sock, IPPROTO_SCTP, SCTP_RTOINFO,
+ (const void *)&rto_info, sizeof(struct sctp_rtoinfo));
+ memset(&assocparams, 0, sizeof(struct sctp_assocparams));
+ assocparams.sasoc_asocmaxrxt = 2;
+ (void)setsockopt(sock, IPPROTO_SCTP, SCTP_ASSOCINFO,
+ (const void *)&assocparams,
+ sizeof(struct sctp_assocparams));
+
+ /*
+ * For SCTP we have to set various options on the socket prior to
+ * connecting. This is done automatically by BIO_new_dgram_sctp().
+ * We don't actually need the created BIO though so we free it again
+ * immediately.
+ */
+ tmpbio = BIO_new_dgram_sctp(sock, BIO_NOCLOSE);
+
+ if (tmpbio == NULL)
+ return 0;
+ BIO_free(tmpbio);
+
+ return 1;
+}
+
+static int create_sctp_socks(int *ssock, int *csock)
+{
+ BIO_ADDRINFO *res = NULL;
+ const BIO_ADDRINFO *ai = NULL;
+ int lsock = INVALID_SOCKET, asock = INVALID_SOCKET;
+ int consock = INVALID_SOCKET;
+ int ret = 0;
+ int family = 0;
+
+ if (BIO_sock_init() != 1)
+ return 0;
+
+ /*
+ * Port is 4463. It could be anything. It will fail if it's already being
+ * used for some other SCTP service. It seems unlikely though so we don't
+ * worry about it here.
+ */
+ if (!BIO_lookup_ex(NULL, "4463", BIO_LOOKUP_SERVER, family, SOCK_STREAM,
+ IPPROTO_SCTP, &res))
+ return 0;
+
+ for (ai = res; ai != NULL; ai = BIO_ADDRINFO_next(ai)) {
+ family = BIO_ADDRINFO_family(ai);
+ lsock = BIO_socket(family, SOCK_STREAM, IPPROTO_SCTP, 0);
+ if (lsock == INVALID_SOCKET) {
+ /* Maybe the kernel doesn't support the socket family, even if
+ * BIO_lookup() added it in the returned result...
+ */
+ continue;
+ }
+
+ if (!set_sock_as_sctp(lsock)
+ || !BIO_listen(lsock, BIO_ADDRINFO_address(ai),
+ BIO_SOCK_REUSEADDR)) {
+ BIO_closesocket(lsock);
+ lsock = INVALID_SOCKET;
+ continue;
+ }
+
+ /* Success, don't try any more addresses */
+ break;
+ }
+
+ if (lsock == INVALID_SOCKET)
+ goto err;
+
+ BIO_ADDRINFO_free(res);
+ res = NULL;
+
+ if (!BIO_lookup_ex(NULL, "4463", BIO_LOOKUP_CLIENT, family, SOCK_STREAM,
+ IPPROTO_SCTP, &res))
+ goto err;
+
+ consock = BIO_socket(family, SOCK_STREAM, IPPROTO_SCTP, 0);
+ if (consock == INVALID_SOCKET)
+ goto err;
+
+ if (!set_sock_as_sctp(consock)
+ || !BIO_connect(consock, BIO_ADDRINFO_address(res), 0)
+ || !BIO_socket_nbio(consock, 1))
+ goto err;
+
+ asock = BIO_accept_ex(lsock, NULL, BIO_SOCK_NONBLOCK);
+ if (asock == INVALID_SOCKET)
+ goto err;
+
+ *csock = consock;
+ *ssock = asock;
+ consock = asock = INVALID_SOCKET;
+ ret = 1;
+
+ err:
+ BIO_ADDRINFO_free(res);
+ if (consock != INVALID_SOCKET)
+ BIO_closesocket(consock);
+ if (lsock != INVALID_SOCKET)
+ BIO_closesocket(lsock);
+ if (asock != INVALID_SOCKET)
+ BIO_closesocket(asock);
+ return ret;
+}
+#endif
+
+/*
+ * Note that |extra| points to the correct client/server configuration
+ * within |test_ctx|. When configuring the handshake, general mode settings
+ * are taken from |test_ctx|, and client/server-specific settings should be
+ * taken from |extra|.
+ *
+ * The configuration code should never reach into |test_ctx->extra| or
+ * |test_ctx->resume_extra| directly.
+ *
+ * (We could refactor test mode settings into a substructure. This would result
+ * in cleaner argument passing but would complicate the test configuration
+ * parsing.)
+ */
+static HANDSHAKE_RESULT *do_handshake_internal(
+ SSL_CTX *server_ctx, SSL_CTX *server2_ctx, SSL_CTX *client_ctx,
+ const SSL_TEST_CTX *test_ctx, const SSL_TEST_EXTRA_CONF *extra,
+ SSL_SESSION *session_in, SSL_SESSION *serv_sess_in,
+ SSL_SESSION **session_out, SSL_SESSION **serv_sess_out)
+{
+ PEER server, client;
+ BIO *client_to_server = NULL, *server_to_client = NULL;
+ HANDSHAKE_EX_DATA server_ex_data, client_ex_data;
+ CTX_DATA client_ctx_data, server_ctx_data, server2_ctx_data;
+ HANDSHAKE_RESULT *ret = HANDSHAKE_RESULT_new();
+ int client_turn = 1, client_turn_count = 0, client_wait_count = 0;
+ connect_phase_t phase = HANDSHAKE;
+ handshake_status_t status = HANDSHAKE_RETRY;
+ const unsigned char* tick = NULL;
+ size_t tick_len = 0;
+ const unsigned char* sess_id = NULL;
+ unsigned int sess_id_len = 0;
+ SSL_SESSION* sess = NULL;
+ const unsigned char *proto = NULL;
+ /* API dictates unsigned int rather than size_t. */
+ unsigned int proto_len = 0;
+ EVP_PKEY *tmp_key;
+ const STACK_OF(X509_NAME) *names;
+ time_t start;
+ const char* cipher;
+
+ if (ret == NULL)
+ return NULL;
+
+ memset(&server_ctx_data, 0, sizeof(server_ctx_data));
+ memset(&server2_ctx_data, 0, sizeof(server2_ctx_data));
+ memset(&client_ctx_data, 0, sizeof(client_ctx_data));
+ memset(&server, 0, sizeof(server));
+ memset(&client, 0, sizeof(client));
+ memset(&server_ex_data, 0, sizeof(server_ex_data));
+ memset(&client_ex_data, 0, sizeof(client_ex_data));
+
+ if (!configure_handshake_ctx(server_ctx, server2_ctx, client_ctx,
+ test_ctx, extra, &server_ctx_data,
+ &server2_ctx_data, &client_ctx_data)) {
+ TEST_note("configure_handshake_ctx");
+ HANDSHAKE_RESULT_free(ret);
+ return NULL;
+ }
+
+#if !defined(OPENSSL_NO_SCTP) && !defined(OPENSSL_NO_SOCK)
+ if (test_ctx->enable_client_sctp_label_bug)
+ SSL_CTX_set_mode(client_ctx, SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG);
+ if (test_ctx->enable_server_sctp_label_bug)
+ SSL_CTX_set_mode(server_ctx, SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG);
+#endif
+
+ /* Setup SSL and buffers; additional configuration happens below. */
+ if (!create_peer(&server, server_ctx)) {
+ TEST_note("creating server context");
+ goto err;
+ }
+ if (!create_peer(&client, client_ctx)) {
+ TEST_note("creating client context");
+ goto err;
+ }
+
+ server.bytes_to_write = client.bytes_to_read = test_ctx->app_data_size;
+ client.bytes_to_write = server.bytes_to_read = test_ctx->app_data_size;
+
+ configure_handshake_ssl(server.ssl, client.ssl, extra);
+ if (session_in != NULL) {
+ SSL_SESSION_get_id(serv_sess_in, &sess_id_len);
+ /* In case we're testing resumption without tickets. */
+ if ((sess_id_len > 0
+ && !TEST_true(SSL_CTX_add_session(server_ctx,
+ serv_sess_in)))
+ || !TEST_true(SSL_set_session(client.ssl, session_in)))
+ goto err;
+ sess_id_len = 0;
+ }
+
+ ret->result = SSL_TEST_INTERNAL_ERROR;
+
+ if (test_ctx->use_sctp) {
+#if !defined(OPENSSL_NO_SCTP) && !defined(OPENSSL_NO_SOCK)
+ int csock, ssock;
+
+ if (create_sctp_socks(&ssock, &csock)) {
+ client_to_server = BIO_new_dgram_sctp(csock, BIO_CLOSE);
+ server_to_client = BIO_new_dgram_sctp(ssock, BIO_CLOSE);
+ }
+#endif
+ } else {
+ client_to_server = BIO_new(BIO_s_mem());
+ server_to_client = BIO_new(BIO_s_mem());
+ }
+
+ if (!TEST_ptr(client_to_server)
+ || !TEST_ptr(server_to_client))
+ goto err;
+
+ /* Non-blocking bio. */
+ BIO_set_nbio(client_to_server, 1);
+ BIO_set_nbio(server_to_client, 1);
+
+ SSL_set_connect_state(client.ssl);
+ SSL_set_accept_state(server.ssl);
+
+ /* The bios are now owned by the SSL object. */
+ if (test_ctx->use_sctp) {
+ SSL_set_bio(client.ssl, client_to_server, client_to_server);
+ SSL_set_bio(server.ssl, server_to_client, server_to_client);
+ } else {
+ SSL_set_bio(client.ssl, server_to_client, client_to_server);
+ if (!TEST_int_gt(BIO_up_ref(server_to_client), 0)
+ || !TEST_int_gt(BIO_up_ref(client_to_server), 0))
+ goto err;
+ SSL_set_bio(server.ssl, client_to_server, server_to_client);
+ }
+
+ ex_data_idx = SSL_get_ex_new_index(0, "ex data", NULL, NULL, NULL);
+ if (!TEST_int_ge(ex_data_idx, 0)
+ || !TEST_int_eq(SSL_set_ex_data(server.ssl, ex_data_idx, &server_ex_data), 1)
+ || !TEST_int_eq(SSL_set_ex_data(client.ssl, ex_data_idx, &client_ex_data), 1))
+ goto err;
+
+ SSL_set_info_callback(server.ssl, &info_cb);
+ SSL_set_info_callback(client.ssl, &info_cb);
+
+ client.status = PEER_RETRY;
+ server.status = PEER_WAITING;
+
+ start = time(NULL);
+
+ /*
+ * Half-duplex handshake loop.
+ * Client and server speak to each other synchronously in the same process.
+ * We use non-blocking BIOs, so whenever one peer blocks for read, it
+ * returns PEER_RETRY to indicate that it's the other peer's turn to write.
+ * The handshake succeeds once both peers have succeeded. If one peer
+ * errors out, we also let the other peer retry (and presumably fail).
+ */
+ for(;;) {
+ if (client_turn) {
+ do_connect_step(test_ctx, &client, phase);
+ status = handshake_status(client.status, server.status,
+ 1 /* client went last */);
+ if (server.status == PEER_WAITING)
+ server.status = PEER_RETRY;
+ } else {
+ do_connect_step(test_ctx, &server, phase);
+ status = handshake_status(server.status, client.status,
+ 0 /* server went last */);
+ }
+
+ switch (status) {
+ case HANDSHAKE_SUCCESS:
+ client_turn_count = 0;
+ phase = next_phase(test_ctx, phase);
+ if (phase == CONNECTION_DONE) {
+ ret->result = SSL_TEST_SUCCESS;
+ goto err;
+ } else {
+ client.status = server.status = PEER_RETRY;
+ /*
+ * For now, client starts each phase. Since each phase is
+ * started separately, we can later control this more
+ * precisely, for example, to test client-initiated and
+ * server-initiated shutdown.
+ */
+ client_turn = 1;
+ break;
+ }
+ case CLIENT_ERROR:
+ ret->result = SSL_TEST_CLIENT_FAIL;
+ goto err;
+ case SERVER_ERROR:
+ ret->result = SSL_TEST_SERVER_FAIL;
+ goto err;
+ case INTERNAL_ERROR:
+ ret->result = SSL_TEST_INTERNAL_ERROR;
+ goto err;
+ case HANDSHAKE_RETRY:
+ if (test_ctx->use_sctp) {
+ if (time(NULL) - start > 3) {
+ /*
+ * We've waited for too long. Give up.
+ */
+ ret->result = SSL_TEST_INTERNAL_ERROR;
+ goto err;
+ }
+ /*
+ * With "real" sockets we only swap to processing the peer
+ * if they are expecting to retry. Otherwise we just retry the
+ * same endpoint again.
+ */
+ if ((client_turn && server.status == PEER_RETRY)
+ || (!client_turn && client.status == PEER_RETRY))
+ client_turn ^= 1;
+ } else {
+ if (client_turn_count++ >= 2000) {
+ /*
+ * At this point, there's been so many PEER_RETRY in a row
+ * that it's likely both sides are stuck waiting for a read.
+ * It's time to give up.
+ */
+ ret->result = SSL_TEST_INTERNAL_ERROR;
+ goto err;
+ }
+ if (client_turn && server.status == PEER_SUCCESS) {
+ /*
+ * The server may finish before the client because the
+ * client spends some turns processing NewSessionTickets.
+ */
+ if (client_wait_count++ >= 2) {
+ ret->result = SSL_TEST_INTERNAL_ERROR;
+ goto err;
+ }
+ } else {
+ /* Continue. */
+ client_turn ^= 1;
+ }
+ }
+ break;
+ }
+ }
+ err:
+ ret->server_alert_sent = server_ex_data.alert_sent;
+ ret->server_num_fatal_alerts_sent = server_ex_data.num_fatal_alerts_sent;
+ ret->server_alert_received = client_ex_data.alert_received;
+ ret->client_alert_sent = client_ex_data.alert_sent;
+ ret->client_num_fatal_alerts_sent = client_ex_data.num_fatal_alerts_sent;
+ ret->client_alert_received = server_ex_data.alert_received;
+ ret->server_protocol = SSL_version(server.ssl);
+ ret->client_protocol = SSL_version(client.ssl);
+ ret->servername = server_ex_data.servername;
+ if ((sess = SSL_get0_session(client.ssl)) != NULL) {
+ SSL_SESSION_get0_ticket(sess, &tick, &tick_len);
+ sess_id = SSL_SESSION_get_id(sess, &sess_id_len);
+ }
+ if (tick == NULL || tick_len == 0)
+ ret->session_ticket = SSL_TEST_SESSION_TICKET_NO;
+ else
+ ret->session_ticket = SSL_TEST_SESSION_TICKET_YES;
+ ret->compression = (SSL_get_current_compression(client.ssl) == NULL)
+ ? SSL_TEST_COMPRESSION_NO
+ : SSL_TEST_COMPRESSION_YES;
+ if (sess_id == NULL || sess_id_len == 0)
+ ret->session_id = SSL_TEST_SESSION_ID_NO;
+ else
+ ret->session_id = SSL_TEST_SESSION_ID_YES;
+ ret->session_ticket_do_not_call = server_ex_data.session_ticket_do_not_call;
+
+ if (extra->client.verify_callback == SSL_TEST_VERIFY_RETRY_ONCE
+ && n_retries != -1)
+ ret->result = SSL_TEST_SERVER_FAIL;
+
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ SSL_get0_next_proto_negotiated(client.ssl, &proto, &proto_len);
+ ret->client_npn_negotiated = dup_str(proto, proto_len);
+
+ SSL_get0_next_proto_negotiated(server.ssl, &proto, &proto_len);
+ ret->server_npn_negotiated = dup_str(proto, proto_len);
+#endif
+
+ SSL_get0_alpn_selected(client.ssl, &proto, &proto_len);
+ ret->client_alpn_negotiated = dup_str(proto, proto_len);
+
+ SSL_get0_alpn_selected(server.ssl, &proto, &proto_len);
+ ret->server_alpn_negotiated = dup_str(proto, proto_len);
+
+ if ((sess = SSL_get0_session(server.ssl)) != NULL) {
+ SSL_SESSION_get0_ticket_appdata(sess, (void**)&tick, &tick_len);
+ ret->result_session_ticket_app_data = OPENSSL_strndup((const char*)tick, tick_len);
+ }
+
+ ret->client_resumed = SSL_session_reused(client.ssl);
+ ret->server_resumed = SSL_session_reused(server.ssl);
+
+ cipher = SSL_CIPHER_get_name(SSL_get_current_cipher(client.ssl));
+ ret->cipher = dup_str((const unsigned char*)cipher, strlen(cipher));
+
+ if (session_out != NULL)
+ *session_out = SSL_get1_session(client.ssl);
+ if (serv_sess_out != NULL) {
+ SSL_SESSION *tmp = SSL_get_session(server.ssl);
+
+ /*
+ * We create a fresh copy that is not in the server session ctx linked
+ * list.
+ */
+ if (tmp != NULL)
+ *serv_sess_out = SSL_SESSION_dup(tmp);
+ }
+
+ if (SSL_get_peer_tmp_key(client.ssl, &tmp_key)) {
+ ret->tmp_key_type = pkey_type(tmp_key);
+ EVP_PKEY_free(tmp_key);
+ }
+
+ SSL_get_peer_signature_nid(client.ssl, &ret->server_sign_hash);
+ SSL_get_peer_signature_nid(server.ssl, &ret->client_sign_hash);
+
+ SSL_get_peer_signature_type_nid(client.ssl, &ret->server_sign_type);
+ SSL_get_peer_signature_type_nid(server.ssl, &ret->client_sign_type);
+
+ names = SSL_get0_peer_CA_list(client.ssl);
+ if (names == NULL)
+ ret->client_ca_names = NULL;
+ else
+ ret->client_ca_names = SSL_dup_CA_list(names);
+
+ names = SSL_get0_peer_CA_list(server.ssl);
+ if (names == NULL)
+ ret->server_ca_names = NULL;
+ else
+ ret->server_ca_names = SSL_dup_CA_list(names);
+
+ ret->server_cert_type = peer_pkey_type(client.ssl);
+ ret->client_cert_type = peer_pkey_type(server.ssl);
+
+ ctx_data_free_data(&server_ctx_data);
+ ctx_data_free_data(&server2_ctx_data);
+ ctx_data_free_data(&client_ctx_data);
+
+ peer_free_data(&server);
+ peer_free_data(&client);
+ return ret;
+}
+
+HANDSHAKE_RESULT *do_handshake(SSL_CTX *server_ctx, SSL_CTX *server2_ctx,
+ SSL_CTX *client_ctx, SSL_CTX *resume_server_ctx,
+ SSL_CTX *resume_client_ctx,
+ const SSL_TEST_CTX *test_ctx)
+{
+ HANDSHAKE_RESULT *result;
+ SSL_SESSION *session = NULL, *serv_sess = NULL;
+
+ result = do_handshake_internal(server_ctx, server2_ctx, client_ctx,
+ test_ctx, &test_ctx->extra,
+ NULL, NULL, &session, &serv_sess);
+ if (result == NULL
+ || test_ctx->handshake_mode != SSL_TEST_HANDSHAKE_RESUME
+ || result->result == SSL_TEST_INTERNAL_ERROR)
+ goto end;
+
+ if (result->result != SSL_TEST_SUCCESS) {
+ result->result = SSL_TEST_FIRST_HANDSHAKE_FAILED;
+ goto end;
+ }
+
+ HANDSHAKE_RESULT_free(result);
+ /* We don't support SNI on second handshake yet, so server2_ctx is NULL. */
+ result = do_handshake_internal(resume_server_ctx, NULL, resume_client_ctx,
+ test_ctx, &test_ctx->resume_extra,
+ session, serv_sess, NULL, NULL);
+ end:
+ SSL_SESSION_free(session);
+ SSL_SESSION_free(serv_sess);
+ return result;
+}
diff --git a/test/helpers/handshake.h b/test/helpers/handshake.h
new file mode 100644
index 000000000000..78b03f9f4b96
--- /dev/null
+++ b/test/helpers/handshake.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef OSSL_TEST_HANDSHAKE_HELPER_H
+#define OSSL_TEST_HANDSHAKE_HELPER_H
+
+#include "ssl_test_ctx.h"
+
+typedef struct ctx_data_st {
+ unsigned char *npn_protocols;
+ size_t npn_protocols_len;
+ unsigned char *alpn_protocols;
+ size_t alpn_protocols_len;
+ char *srp_user;
+ char *srp_password;
+ char *session_ticket_app_data;
+} CTX_DATA;
+
+typedef struct handshake_result {
+ ssl_test_result_t result;
+ /* These alerts are in the 2-byte format returned by the info_callback. */
+ /* (Latest) alert sent by the client; 0 if no alert. */
+ int client_alert_sent;
+ /* Number of fatal or close_notify alerts sent. */
+ int client_num_fatal_alerts_sent;
+ /* (Latest) alert received by the server; 0 if no alert. */
+ int client_alert_received;
+ /* (Latest) alert sent by the server; 0 if no alert. */
+ int server_alert_sent;
+ /* Number of fatal or close_notify alerts sent. */
+ int server_num_fatal_alerts_sent;
+ /* (Latest) alert received by the client; 0 if no alert. */
+ int server_alert_received;
+ /* Negotiated protocol. On success, these should always match. */
+ int server_protocol;
+ int client_protocol;
+ /* Server connection */
+ ssl_servername_t servername;
+ /* Session ticket status */
+ ssl_session_ticket_t session_ticket;
+ int compression;
+ /* Was this called on the second context? */
+ int session_ticket_do_not_call;
+ char *client_npn_negotiated;
+ char *server_npn_negotiated;
+ char *client_alpn_negotiated;
+ char *server_alpn_negotiated;
+ /* Was the handshake resumed? */
+ int client_resumed;
+ int server_resumed;
+ /* Temporary key type */
+ int tmp_key_type;
+ /* server certificate key type */
+ int server_cert_type;
+ /* server signing hash */
+ int server_sign_hash;
+ /* server signature type */
+ int server_sign_type;
+ /* server CA names */
+ STACK_OF(X509_NAME) *server_ca_names;
+ /* client certificate key type */
+ int client_cert_type;
+ /* client signing hash */
+ int client_sign_hash;
+ /* client signature type */
+ int client_sign_type;
+ /* Client CA names */
+ STACK_OF(X509_NAME) *client_ca_names;
+ /* Session id status */
+ ssl_session_id_t session_id;
+ char *cipher;
+ /* session ticket application data */
+ char *result_session_ticket_app_data;
+} HANDSHAKE_RESULT;
+
+HANDSHAKE_RESULT *HANDSHAKE_RESULT_new(void);
+void HANDSHAKE_RESULT_free(HANDSHAKE_RESULT *result);
+
+/* Do a handshake and report some information about the result. */
+HANDSHAKE_RESULT *do_handshake(SSL_CTX *server_ctx, SSL_CTX *server2_ctx,
+ SSL_CTX *client_ctx, SSL_CTX *resume_server_ctx,
+ SSL_CTX *resume_client_ctx,
+ const SSL_TEST_CTX *test_ctx);
+
+int configure_handshake_ctx_for_srp(SSL_CTX *server_ctx, SSL_CTX *server2_ctx,
+ SSL_CTX *client_ctx,
+ const SSL_TEST_EXTRA_CONF *extra,
+ CTX_DATA *server_ctx_data,
+ CTX_DATA *server2_ctx_data,
+ CTX_DATA *client_ctx_data);
+
+#endif /* OSSL_TEST_HANDSHAKE_HELPER_H */
diff --git a/test/helpers/handshake_srp.c b/test/helpers/handshake_srp.c
new file mode 100644
index 000000000000..43a5a4fd605a
--- /dev/null
+++ b/test/helpers/handshake_srp.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2016-2022 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
+ */
+
+/*
+ * SRP is deprecated and there is no replacent. When SRP is removed, the code in
+ * this file can be removed too. Until then we have to use the deprecated APIs.
+ */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <openssl/srp.h>
+#include <openssl/ssl.h>
+#include "handshake.h"
+#include "../testutil.h"
+
+static char *client_srp_cb(SSL *s, void *arg)
+{
+ CTX_DATA *ctx_data = (CTX_DATA*)(arg);
+ return OPENSSL_strdup(ctx_data->srp_password);
+}
+
+static int server_srp_cb(SSL *s, int *ad, void *arg)
+{
+ CTX_DATA *ctx_data = (CTX_DATA*)(arg);
+ if (strcmp(ctx_data->srp_user, SSL_get_srp_username(s)) != 0)
+ return SSL3_AL_FATAL;
+ if (SSL_set_srp_server_param_pw(s, ctx_data->srp_user,
+ ctx_data->srp_password,
+ "2048" /* known group */) < 0) {
+ *ad = SSL_AD_INTERNAL_ERROR;
+ return SSL3_AL_FATAL;
+ }
+ return SSL_ERROR_NONE;
+}
+
+int configure_handshake_ctx_for_srp(SSL_CTX *server_ctx, SSL_CTX *server2_ctx,
+ SSL_CTX *client_ctx,
+ const SSL_TEST_EXTRA_CONF *extra,
+ CTX_DATA *server_ctx_data,
+ CTX_DATA *server2_ctx_data,
+ CTX_DATA *client_ctx_data)
+{
+ if (extra->server.srp_user != NULL) {
+ SSL_CTX_set_srp_username_callback(server_ctx, server_srp_cb);
+ server_ctx_data->srp_user = OPENSSL_strdup(extra->server.srp_user);
+ server_ctx_data->srp_password = OPENSSL_strdup(extra->server.srp_password);
+ if (server_ctx_data->srp_user == NULL || server_ctx_data->srp_password == NULL) {
+ OPENSSL_free(server_ctx_data->srp_user);
+ OPENSSL_free(server_ctx_data->srp_password);
+ server_ctx_data->srp_user = NULL;
+ server_ctx_data->srp_password = NULL;
+ return 0;
+ }
+ SSL_CTX_set_srp_cb_arg(server_ctx, server_ctx_data);
+ }
+ if (extra->server2.srp_user != NULL) {
+ if (!TEST_ptr(server2_ctx))
+ return 0;
+ SSL_CTX_set_srp_username_callback(server2_ctx, server_srp_cb);
+ server2_ctx_data->srp_user = OPENSSL_strdup(extra->server2.srp_user);
+ server2_ctx_data->srp_password = OPENSSL_strdup(extra->server2.srp_password);
+ if (server2_ctx_data->srp_user == NULL || server2_ctx_data->srp_password == NULL) {
+ OPENSSL_free(server2_ctx_data->srp_user);
+ OPENSSL_free(server2_ctx_data->srp_password);
+ server2_ctx_data->srp_user = NULL;
+ server2_ctx_data->srp_password = NULL;
+ return 0;
+ }
+ SSL_CTX_set_srp_cb_arg(server2_ctx, server2_ctx_data);
+ }
+ if (extra->client.srp_user != NULL) {
+ if (!TEST_true(SSL_CTX_set_srp_username(client_ctx,
+ extra->client.srp_user)))
+ return 0;
+ SSL_CTX_set_srp_client_pwd_callback(client_ctx, client_srp_cb);
+ client_ctx_data->srp_password = OPENSSL_strdup(extra->client.srp_password);
+ if (client_ctx_data->srp_password == NULL)
+ return 0;
+ SSL_CTX_set_srp_cb_arg(client_ctx, client_ctx_data);
+ }
+ return 1;
+}
diff --git a/test/helpers/pkcs12.c b/test/helpers/pkcs12.c
new file mode 100644
index 000000000000..a87683dc9506
--- /dev/null
+++ b/test/helpers/pkcs12.c
@@ -0,0 +1,789 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "internal/nelem.h"
+
+#include <openssl/pkcs12.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/pem.h>
+
+#include "../testutil.h"
+#include "pkcs12.h" /* from the same directory */
+
+/* Set this to > 0 write test data to file */
+static int write_files = 0;
+
+static int legacy = 0;
+
+static OSSL_LIB_CTX *test_ctx = NULL;
+static const char *test_propq = NULL;
+
+/* -------------------------------------------------------------------------
+ * Local function declarations
+ */
+
+static int add_attributes(PKCS12_SAFEBAG *bag, const PKCS12_ATTR *attrs);
+
+static void generate_p12(PKCS12_BUILDER *pb, const PKCS12_ENC *mac);
+static int write_p12(PKCS12 *p12, const char *outfile);
+
+static PKCS12 *from_bio_p12(BIO *bio, const PKCS12_ENC *mac);
+static PKCS12 *read_p12(const char *infile, const PKCS12_ENC *mac);
+static int check_p12_mac(PKCS12 *p12, const PKCS12_ENC *mac);
+static int check_asn1_string(const ASN1_TYPE *av, const char *txt);
+static int check_attrs(const STACK_OF(X509_ATTRIBUTE) *bag_attrs, const PKCS12_ATTR *attrs);
+
+
+/* --------------------------------------------------------------------------
+ * Global settings
+ */
+
+void PKCS12_helper_set_write_files(int enable)
+{
+ write_files = enable;
+}
+
+void PKCS12_helper_set_legacy(int enable)
+{
+ legacy = enable;
+}
+
+void PKCS12_helper_set_libctx(OSSL_LIB_CTX *libctx)
+{
+ test_ctx = libctx;
+}
+
+void PKCS12_helper_set_propq(const char *propq)
+{
+ test_propq = propq;
+}
+
+
+/* --------------------------------------------------------------------------
+ * Test data load functions
+ */
+
+static X509 *load_cert_asn1(const unsigned char *bytes, int len)
+{
+ X509 *cert = NULL;
+
+ cert = d2i_X509(NULL, &bytes, len);
+ if (!TEST_ptr(cert))
+ goto err;
+err:
+ return cert;
+}
+
+static EVP_PKEY *load_pkey_asn1(const unsigned char *bytes, int len)
+{
+ EVP_PKEY *pkey = NULL;
+
+ pkey = d2i_AutoPrivateKey(NULL, &bytes, len);
+ if (!TEST_ptr(pkey))
+ goto err;
+err:
+ return pkey;
+}
+
+/* -------------------------------------------------------------------------
+ * PKCS12 builder
+ */
+
+PKCS12_BUILDER *new_pkcs12_builder(const char *filename)
+{
+ PKCS12_BUILDER *pb = OPENSSL_malloc(sizeof(PKCS12_BUILDER));
+ if (!TEST_ptr(pb))
+ return NULL;
+
+ pb->filename = filename;
+ pb->success = 1;
+ return pb;
+}
+
+int end_pkcs12_builder(PKCS12_BUILDER *pb)
+{
+ int result = pb->success;
+
+ OPENSSL_free(pb);
+ return result;
+}
+
+
+void start_pkcs12(PKCS12_BUILDER *pb)
+{
+ pb->safes = NULL;
+}
+
+
+void end_pkcs12(PKCS12_BUILDER *pb)
+{
+ if (!pb->success)
+ return;
+ generate_p12(pb, NULL);
+}
+
+
+void end_pkcs12_with_mac(PKCS12_BUILDER *pb, const PKCS12_ENC *mac)
+{
+ if (!pb->success)
+ return;
+ generate_p12(pb, mac);
+}
+
+
+/* Generate the PKCS12 encoding and write to memory bio */
+static void generate_p12(PKCS12_BUILDER *pb, const PKCS12_ENC *mac)
+{
+ PKCS12 *p12;
+ EVP_MD *md = NULL;
+
+ if (!pb->success)
+ return;
+
+ pb->p12bio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(pb->p12bio)) {
+ pb->success = 0;
+ return;
+ }
+ if (legacy)
+ p12 = PKCS12_add_safes(pb->safes, 0);
+ else
+ p12 = PKCS12_add_safes_ex(pb->safes, 0, test_ctx, test_propq);
+ if (!TEST_ptr(p12)) {
+ pb->success = 0;
+ goto err;
+ }
+ sk_PKCS7_pop_free(pb->safes, PKCS7_free);
+
+ if (mac != NULL) {
+ if (legacy)
+ md = (EVP_MD *)EVP_get_digestbynid(mac->nid);
+ else
+ md = EVP_MD_fetch(test_ctx, OBJ_nid2sn(mac->nid), test_propq);
+
+ if (!TEST_true(PKCS12_set_mac(p12, mac->pass, strlen(mac->pass),
+ NULL, 0, mac->iter, md))) {
+ pb->success = 0;
+ goto err;
+ }
+ }
+ i2d_PKCS12_bio(pb->p12bio, p12);
+
+ /* Can write to file here for debug */
+ if (write_files)
+ write_p12(p12, pb->filename);
+err:
+ if (!legacy && md != NULL)
+ EVP_MD_free(md);
+ PKCS12_free(p12);
+}
+
+
+static int write_p12(PKCS12 *p12, const char *outfile)
+{
+ int ret = 0;
+ BIO *out = BIO_new_file(outfile, "w");
+
+ if (out == NULL)
+ goto err;
+
+ if (!TEST_int_eq(i2d_PKCS12_bio(out, p12), 1))
+ goto err;
+ ret = 1;
+err:
+ BIO_free(out);
+ return ret;
+}
+
+static PKCS12 *from_bio_p12(BIO *bio, const PKCS12_ENC *mac)
+{
+ PKCS12 *p12 = NULL;
+
+ /* Supply a p12 with library context/propq to the d2i decoder*/
+ if (!legacy) {
+ p12 = PKCS12_init_ex(NID_pkcs7_data, test_ctx, test_propq);
+ if (!TEST_ptr(p12))
+ goto err;
+ }
+ p12 = d2i_PKCS12_bio(bio, &p12);
+ BIO_free(bio);
+ if (!TEST_ptr(p12))
+ goto err;
+ if (mac == NULL) {
+ if (!TEST_false(PKCS12_mac_present(p12)))
+ goto err;
+ } else {
+ if (!check_p12_mac(p12, mac))
+ goto err;
+ }
+ return p12;
+err:
+ PKCS12_free(p12);
+ return NULL;
+}
+
+
+/* For use with existing files */
+static PKCS12 *read_p12(const char *infile, const PKCS12_ENC *mac)
+{
+ PKCS12 *p12 = NULL;
+ BIO *in = BIO_new_file(infile, "r");
+
+ if (in == NULL)
+ goto err;
+ p12 = d2i_PKCS12_bio(in, NULL);
+ BIO_free(in);
+ if (!TEST_ptr(p12))
+ goto err;
+ if (mac == NULL) {
+ if (!TEST_false(PKCS12_mac_present(p12)))
+ goto err;
+ } else {
+ if (!check_p12_mac(p12, mac))
+ goto err;
+ }
+ return p12;
+err:
+ PKCS12_free(p12);
+ return NULL;
+}
+
+static int check_p12_mac(PKCS12 *p12, const PKCS12_ENC *mac)
+{
+ return TEST_true(PKCS12_mac_present(p12))
+ && TEST_true(PKCS12_verify_mac(p12, mac->pass, strlen(mac->pass)));
+}
+
+
+/* -------------------------------------------------------------------------
+ * PKCS7 content info builder
+ */
+
+void start_contentinfo(PKCS12_BUILDER *pb)
+{
+ pb->bags = NULL;
+}
+
+
+void end_contentinfo(PKCS12_BUILDER *pb)
+{
+ if (pb->success && pb->bags != NULL) {
+ if (!TEST_true(PKCS12_add_safe(&pb->safes, pb->bags, -1, 0, NULL)))
+ pb->success = 0;
+ }
+ sk_PKCS12_SAFEBAG_pop_free(pb->bags, PKCS12_SAFEBAG_free);
+ pb->bags = NULL;
+}
+
+
+void end_contentinfo_encrypted(PKCS12_BUILDER *pb, const PKCS12_ENC *enc)
+{
+ if (pb->success && pb->bags != NULL) {
+ if (legacy) {
+ if (!TEST_true(PKCS12_add_safe(&pb->safes, pb->bags, enc->nid,
+ enc->iter, enc->pass)))
+ pb->success = 0;
+ } else {
+ if (!TEST_true(PKCS12_add_safe_ex(&pb->safes, pb->bags, enc->nid,
+ enc->iter, enc->pass, test_ctx,
+ test_propq)))
+ pb->success = 0;
+ }
+ }
+ sk_PKCS12_SAFEBAG_pop_free(pb->bags, PKCS12_SAFEBAG_free);
+ pb->bags = NULL;
+}
+
+
+static STACK_OF(PKCS12_SAFEBAG) *decode_contentinfo(STACK_OF(PKCS7) *safes, int idx, const PKCS12_ENC *enc)
+{
+ STACK_OF(PKCS12_SAFEBAG) *bags = NULL;
+ int bagnid;
+ PKCS7 *p7 = sk_PKCS7_value(safes, idx);
+
+ if (!TEST_ptr(p7))
+ goto err;
+
+ bagnid = OBJ_obj2nid(p7->type);
+ if (enc) {
+ if (!TEST_int_eq(bagnid, NID_pkcs7_encrypted))
+ goto err;
+ bags = PKCS12_unpack_p7encdata(p7, enc->pass, strlen(enc->pass));
+ } else {
+ if (!TEST_int_eq(bagnid, NID_pkcs7_data))
+ goto err;
+ bags = PKCS12_unpack_p7data(p7);
+ }
+ if (!TEST_ptr(bags))
+ goto err;
+
+ return bags;
+err:
+ return NULL;
+}
+
+
+/* -------------------------------------------------------------------------
+ * PKCS12 safeBag/attribute builder
+ */
+
+static int add_attributes(PKCS12_SAFEBAG *bag, const PKCS12_ATTR *attrs)
+{
+ int ret = 0;
+ int attr_nid;
+ const PKCS12_ATTR *p_attr = attrs;
+
+ if (attrs == NULL)
+ return 1;
+
+ while (p_attr->oid != NULL) {
+ TEST_info("Adding attribute %s = %s", p_attr->oid, p_attr->value);
+ attr_nid = OBJ_txt2nid(p_attr->oid);
+
+ if (attr_nid == NID_friendlyName) {
+ if (!TEST_true(PKCS12_add_friendlyname(bag, p_attr->value, -1)))
+ goto err;
+ } else if (attr_nid == NID_localKeyID) {
+ if (!TEST_true(PKCS12_add_localkeyid(bag, (unsigned char *)p_attr->value,
+ strlen(p_attr->value))))
+ goto err;
+ } else {
+ /* Custom attribute values limited to ASCII in these tests */
+ if (!TEST_true(PKCS12_add1_attr_by_txt(bag, p_attr->oid, MBSTRING_ASC,
+ (unsigned char *)p_attr->value,
+ strlen(p_attr->value))))
+ goto err;
+ }
+ p_attr++;
+ }
+ ret = 1;
+err:
+ return ret;
+}
+
+void add_certbag(PKCS12_BUILDER *pb, const unsigned char *bytes, int len,
+ const PKCS12_ATTR *attrs)
+{
+ PKCS12_SAFEBAG *bag = NULL;
+ X509 *cert = NULL;
+ char *name;
+
+ if (!pb->success)
+ return;
+
+ cert = load_cert_asn1(bytes, len);
+ if (!TEST_ptr(cert)) {
+ pb->success = 0;
+ return;
+ }
+
+ name = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0);
+ TEST_info("Adding certificate <%s>", name);
+ OPENSSL_free(name);
+
+ bag = PKCS12_add_cert(&pb->bags, cert);
+ if (!TEST_ptr(bag)) {
+ pb->success = 0;
+ goto err;
+ }
+
+ if (!TEST_true(add_attributes(bag, attrs))) {
+ pb->success = 0;
+ goto err;
+ }
+err:
+ X509_free(cert);
+}
+
+void add_keybag(PKCS12_BUILDER *pb, const unsigned char *bytes, int len,
+ const PKCS12_ATTR *attrs, const PKCS12_ENC *enc)
+{
+ PKCS12_SAFEBAG *bag = NULL;
+ EVP_PKEY *pkey = NULL;
+
+ if (!pb->success)
+ return;
+
+ TEST_info("Adding key");
+
+ pkey = load_pkey_asn1(bytes, len);
+ if (!TEST_ptr(pkey)) {
+ pb->success = 0;
+ return;
+ }
+
+ if (legacy)
+ bag = PKCS12_add_key(&pb->bags, pkey, 0 /*keytype*/, enc->iter, enc->nid, enc->pass);
+ else
+ bag = PKCS12_add_key_ex(&pb->bags, pkey, 0 /*keytype*/, enc->iter, enc->nid, enc->pass,
+ test_ctx, test_propq);
+ if (!TEST_ptr(bag)) {
+ pb->success = 0;
+ goto err;
+ }
+ if (!add_attributes(bag, attrs))
+ pb->success = 0;
+err:
+ EVP_PKEY_free(pkey);
+}
+
+void add_secretbag(PKCS12_BUILDER *pb, int secret_nid, const char *secret,
+ const PKCS12_ATTR *attrs)
+{
+ PKCS12_SAFEBAG *bag = NULL;
+
+ if (!pb->success)
+ return;
+
+ TEST_info("Adding secret <%s>", secret);
+
+ bag = PKCS12_add_secret(&pb->bags, secret_nid, (const unsigned char *)secret, strlen(secret));
+ if (!TEST_ptr(bag)) {
+ pb->success = 0;
+ return;
+ }
+ if (!add_attributes(bag, attrs))
+ pb->success = 0;
+}
+
+
+/* -------------------------------------------------------------------------
+ * PKCS12 structure checking
+ */
+
+static int check_asn1_string(const ASN1_TYPE *av, const char *txt)
+{
+ int ret = 0;
+ char *value = NULL;
+
+ if (!TEST_ptr(av))
+ goto err;
+
+ switch (av->type) {
+ case V_ASN1_BMPSTRING:
+ value = OPENSSL_uni2asc(av->value.bmpstring->data,
+ av->value.bmpstring->length);
+ if (!TEST_str_eq(txt, (char *)value))
+ goto err;
+ break;
+
+ case V_ASN1_UTF8STRING:
+ if (!TEST_mem_eq(txt, strlen(txt), (char *)av->value.utf8string->data,
+ av->value.utf8string->length))
+ goto err;
+ break;
+
+ case V_ASN1_OCTET_STRING:
+ if (!TEST_mem_eq(txt, strlen(txt),
+ (char *)av->value.octet_string->data,
+ av->value.octet_string->length))
+ goto err;
+ break;
+
+ default:
+ /* Tests do not support other attribute types currently */
+ goto err;
+ }
+ ret = 1;
+err:
+ OPENSSL_free(value);
+ return ret;
+}
+
+static int check_attrs(const STACK_OF(X509_ATTRIBUTE) *bag_attrs, const PKCS12_ATTR *attrs)
+{
+ int ret = 0;
+ X509_ATTRIBUTE *attr;
+ ASN1_TYPE *av;
+ int i, j;
+ char attr_txt[100];
+
+ for (i = 0; i < sk_X509_ATTRIBUTE_num(bag_attrs); i++) {
+ const PKCS12_ATTR *p_attr = attrs;
+ ASN1_OBJECT *attr_obj;
+
+ attr = sk_X509_ATTRIBUTE_value(bag_attrs, i);
+ attr_obj = X509_ATTRIBUTE_get0_object(attr);
+ OBJ_obj2txt(attr_txt, 100, attr_obj, 0);
+
+ while(p_attr->oid != NULL) {
+ /* Find a matching attribute type */
+ if (strcmp(p_attr->oid, attr_txt) == 0) {
+ if (!TEST_int_eq(X509_ATTRIBUTE_count(attr), 1))
+ goto err;
+
+ for (j = 0; j < X509_ATTRIBUTE_count(attr); j++)
+ {
+ av = X509_ATTRIBUTE_get0_type(attr, j);
+ if (!TEST_true(check_asn1_string(av, p_attr->value)))
+ goto err;
+ }
+ break;
+ }
+ p_attr++;
+ }
+ }
+ ret = 1;
+err:
+ return ret;
+}
+
+void check_certbag(PKCS12_BUILDER *pb, const unsigned char *bytes, int len,
+ const PKCS12_ATTR *attrs)
+{
+ X509 *x509 = NULL;
+ X509 *ref_x509 = NULL;
+ const PKCS12_SAFEBAG *bag;
+
+ if (!pb->success)
+ return;
+
+ bag = sk_PKCS12_SAFEBAG_value(pb->bags, pb->bag_idx++);
+ if (!TEST_ptr(bag)) {
+ pb->success = 0;
+ return;
+ }
+ if (!check_attrs(PKCS12_SAFEBAG_get0_attrs(bag), attrs)
+ || !TEST_int_eq(PKCS12_SAFEBAG_get_nid(bag), NID_certBag)
+ || !TEST_int_eq(PKCS12_SAFEBAG_get_bag_nid(bag), NID_x509Certificate)) {
+ pb->success = 0;
+ return;
+ }
+ x509 = PKCS12_SAFEBAG_get1_cert(bag);
+ if (!TEST_ptr(x509)) {
+ pb->success = 0;
+ goto err;
+ }
+ ref_x509 = load_cert_asn1(bytes, len);
+ if (!TEST_false(X509_cmp(x509, ref_x509)))
+ pb->success = 0;
+err:
+ X509_free(x509);
+ X509_free(ref_x509);
+}
+
+void check_keybag(PKCS12_BUILDER *pb, const unsigned char *bytes, int len,
+ const PKCS12_ATTR *attrs, const PKCS12_ENC *enc)
+{
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY *ref_pkey = NULL;
+ PKCS8_PRIV_KEY_INFO *p8;
+ const PKCS8_PRIV_KEY_INFO *p8c;
+ const PKCS12_SAFEBAG *bag;
+
+ if (!pb->success)
+ return;
+
+ bag = sk_PKCS12_SAFEBAG_value(pb->bags, pb->bag_idx++);
+ if (!TEST_ptr(bag)) {
+ pb->success = 0;
+ return;
+ }
+
+ if (!check_attrs(PKCS12_SAFEBAG_get0_attrs(bag), attrs)) {
+ pb->success = 0;
+ return;
+ }
+
+ switch (PKCS12_SAFEBAG_get_nid(bag)) {
+ case NID_keyBag:
+ p8c = PKCS12_SAFEBAG_get0_p8inf(bag);
+ if (!TEST_ptr(pkey = EVP_PKCS82PKEY(p8c))) {
+ pb->success = 0;
+ goto err;
+ }
+ break;
+
+ case NID_pkcs8ShroudedKeyBag:
+ if (legacy)
+ p8 = PKCS12_decrypt_skey(bag, enc->pass, strlen(enc->pass));
+ else
+ p8 = PKCS12_decrypt_skey_ex(bag, enc->pass, strlen(enc->pass), test_ctx, test_propq);
+ if (!TEST_ptr(p8)) {
+ pb->success = 0;
+ goto err;
+ }
+ if (!TEST_ptr(pkey = EVP_PKCS82PKEY(p8))) {
+ PKCS8_PRIV_KEY_INFO_free(p8);
+ pb->success = 0;
+ goto err;
+ }
+ PKCS8_PRIV_KEY_INFO_free(p8);
+ break;
+
+ default:
+ pb->success = 0;
+ goto err;
+ }
+
+ /* PKEY compare returns 1 for match */
+ ref_pkey = load_pkey_asn1(bytes, len);
+ if (!TEST_true(EVP_PKEY_eq(pkey, ref_pkey)))
+ pb->success = 0;
+err:
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(ref_pkey);
+}
+
+void check_secretbag(PKCS12_BUILDER *pb, int secret_nid, const char *secret, const PKCS12_ATTR *attrs)
+{
+ const PKCS12_SAFEBAG *bag;
+
+ if (!pb->success)
+ return;
+
+ bag = sk_PKCS12_SAFEBAG_value(pb->bags, pb->bag_idx++);
+ if (!TEST_ptr(bag)) {
+ pb->success = 0;
+ return;
+ }
+
+ if (!check_attrs(PKCS12_SAFEBAG_get0_attrs(bag), attrs)
+ || !TEST_int_eq(PKCS12_SAFEBAG_get_nid(bag), NID_secretBag)
+ || !TEST_int_eq(PKCS12_SAFEBAG_get_bag_nid(bag), secret_nid)
+ || !TEST_true(check_asn1_string(PKCS12_SAFEBAG_get0_bag_obj(bag), secret)))
+ pb->success = 0;
+}
+
+
+void start_check_pkcs12(PKCS12_BUILDER *pb)
+{
+ PKCS12 *p12;
+
+ if (!pb->success)
+ return;
+
+ p12 = from_bio_p12(pb->p12bio, NULL);
+ if (!TEST_ptr(p12)) {
+ pb->success = 0;
+ return;
+ }
+ pb->safes = PKCS12_unpack_authsafes(p12);
+ if (!TEST_ptr(pb->safes))
+ pb->success = 0;
+
+ pb->safe_idx = 0;
+ PKCS12_free(p12);
+}
+
+void start_check_pkcs12_with_mac(PKCS12_BUILDER *pb, const PKCS12_ENC *mac)
+{
+ PKCS12 *p12;
+
+ if (!pb->success)
+ return;
+
+ p12 = from_bio_p12(pb->p12bio, mac);
+ if (!TEST_ptr(p12)) {
+ pb->success = 0;
+ return;
+ }
+ pb->safes = PKCS12_unpack_authsafes(p12);
+ if (!TEST_ptr(pb->safes))
+ pb->success = 0;
+
+ pb->safe_idx = 0;
+ PKCS12_free(p12);
+}
+
+void start_check_pkcs12_file(PKCS12_BUILDER *pb)
+{
+ PKCS12 *p12;
+
+ if (!pb->success)
+ return;
+
+ p12 = read_p12(pb->filename, NULL);
+ if (!TEST_ptr(p12)) {
+ pb->success = 0;
+ return;
+ }
+ pb->safes = PKCS12_unpack_authsafes(p12);
+ if (!TEST_ptr(pb->safes))
+ pb->success = 0;
+
+ pb->safe_idx = 0;
+ PKCS12_free(p12);
+}
+
+void start_check_pkcs12_file_with_mac(PKCS12_BUILDER *pb, const PKCS12_ENC *mac)
+{
+ PKCS12 *p12;
+
+ if (!pb->success)
+ return;
+
+ p12 = read_p12(pb->filename, mac);
+ if (!TEST_ptr(p12)) {
+ pb->success = 0;
+ return;
+ }
+ pb->safes = PKCS12_unpack_authsafes(p12);
+ if (!TEST_ptr(pb->safes))
+ pb->success = 0;
+
+ pb->safe_idx = 0;
+ PKCS12_free(p12);
+}
+
+void end_check_pkcs12(PKCS12_BUILDER *pb)
+{
+ if (!pb->success)
+ return;
+
+ sk_PKCS7_pop_free(pb->safes, PKCS7_free);
+}
+
+
+void start_check_contentinfo(PKCS12_BUILDER *pb)
+{
+ if (!pb->success)
+ return;
+
+ pb->bag_idx = 0;
+ pb->bags = decode_contentinfo(pb->safes, pb->safe_idx++, NULL);
+ if (!TEST_ptr(pb->bags)) {
+ pb->success = 0;
+ return;
+ }
+ TEST_info("Decoding %d bags", sk_PKCS12_SAFEBAG_num(pb->bags));
+}
+
+void start_check_contentinfo_encrypted(PKCS12_BUILDER *pb, const PKCS12_ENC *enc)
+{
+ if (!pb->success)
+ return;
+
+ pb->bag_idx = 0;
+ pb->bags = decode_contentinfo(pb->safes, pb->safe_idx++, enc);
+ if (!TEST_ptr(pb->bags)) {
+ pb->success = 0;
+ return;
+ }
+ TEST_info("Decoding %d bags", sk_PKCS12_SAFEBAG_num(pb->bags));
+}
+
+
+void end_check_contentinfo(PKCS12_BUILDER *pb)
+{
+ if (!pb->success)
+ return;
+
+ if (!TEST_int_eq(sk_PKCS12_SAFEBAG_num(pb->bags), pb->bag_idx))
+ pb->success = 0;
+ sk_PKCS12_SAFEBAG_pop_free(pb->bags, PKCS12_SAFEBAG_free);
+ pb->bags = NULL;
+}
+
+
diff --git a/test/helpers/pkcs12.h b/test/helpers/pkcs12.h
new file mode 100644
index 000000000000..d1a3b93d3299
--- /dev/null
+++ b/test/helpers/pkcs12.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "internal/nelem.h"
+
+#include <openssl/pkcs12.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/pem.h>
+
+#include "../testutil.h"
+
+
+/* -------------------------------------------------------------------------
+ * PKCS#12 Test structures
+ */
+
+/* Holds a set of Attributes */
+typedef struct pkcs12_attr {
+ char *oid;
+ char *value;
+} PKCS12_ATTR;
+
+
+/* Holds encryption parameters */
+typedef struct pkcs12_enc {
+ int nid;
+ const char *pass;
+ int iter;
+} PKCS12_ENC;
+
+/* Set of variables required for constructing the PKCS#12 structure */
+typedef struct pkcs12_builder {
+ const char *filename;
+ int success;
+ BIO *p12bio;
+ STACK_OF(PKCS7) *safes;
+ int safe_idx;
+ STACK_OF(PKCS12_SAFEBAG) *bags;
+ int bag_idx;
+} PKCS12_BUILDER;
+
+
+/* -------------------------------------------------------------------------
+ * PKCS#12 Test function declarations
+ */
+
+/* Global settings */
+void PKCS12_helper_set_write_files(int enable);
+void PKCS12_helper_set_legacy(int enable);
+void PKCS12_helper_set_libctx(OSSL_LIB_CTX *libctx);
+void PKCS12_helper_set_propq(const char *propq);
+
+/* Allocate and initialise a PKCS#12 builder object */
+PKCS12_BUILDER *new_pkcs12_builder(const char *filename);
+
+/* Finalise and free the PKCS#12 builder object, returning the success/fail flag */
+int end_pkcs12_builder(PKCS12_BUILDER *pb);
+
+/* Encode/build functions */
+void start_pkcs12(PKCS12_BUILDER *pb);
+void end_pkcs12(PKCS12_BUILDER *pb);
+void end_pkcs12_with_mac(PKCS12_BUILDER *pb, const PKCS12_ENC *mac);
+
+void start_contentinfo(PKCS12_BUILDER *pb);
+void end_contentinfo(PKCS12_BUILDER *pb);
+void end_contentinfo_encrypted(PKCS12_BUILDER *pb, const PKCS12_ENC *enc);
+
+void add_certbag(PKCS12_BUILDER *pb, const unsigned char *bytes, int len,
+ const PKCS12_ATTR *attrs);
+void add_keybag(PKCS12_BUILDER *pb, const unsigned char *bytes, int len,
+ const PKCS12_ATTR *attrs, const PKCS12_ENC *enc);
+void add_secretbag(PKCS12_BUILDER *pb, int secret_nid, const char *secret,
+ const PKCS12_ATTR *attrs);
+
+/* Decode/check functions */
+void start_check_pkcs12(PKCS12_BUILDER *pb);
+void start_check_pkcs12_with_mac(PKCS12_BUILDER *pb, const PKCS12_ENC *mac);
+void start_check_pkcs12_file(PKCS12_BUILDER *pb);
+void start_check_pkcs12_file_with_mac(PKCS12_BUILDER *pb, const PKCS12_ENC *mac);
+void end_check_pkcs12(PKCS12_BUILDER *pb);
+
+void start_check_contentinfo(PKCS12_BUILDER *pb);
+void start_check_contentinfo_encrypted(PKCS12_BUILDER *pb, const PKCS12_ENC *enc);
+void end_check_contentinfo(PKCS12_BUILDER *pb);
+
+void check_certbag(PKCS12_BUILDER *pb, const unsigned char *bytes, int len,
+ const PKCS12_ATTR *attrs);
+void check_keybag(PKCS12_BUILDER *pb, const unsigned char *bytes, int len,
+ const PKCS12_ATTR *attrs, const PKCS12_ENC *enc);
+void check_secretbag(PKCS12_BUILDER *pb, int secret_nid, const char *secret,
+ const PKCS12_ATTR *attrs);
+
diff --git a/test/helpers/predefined_dhparams.c b/test/helpers/predefined_dhparams.c
new file mode 100644
index 000000000000..4bdadc41432b
--- /dev/null
+++ b/test/helpers/predefined_dhparams.c
@@ -0,0 +1,194 @@
+/*
+ * Copyright 1995-2022 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 <openssl/core_names.h>
+#include <openssl/param_build.h>
+
+#include "predefined_dhparams.h"
+
+#ifndef OPENSSL_NO_DH
+
+static EVP_PKEY *get_dh_from_pg_bn(OSSL_LIB_CTX *libctx, const char *type,
+ BIGNUM *p, BIGNUM *g, BIGNUM *q)
+{
+ EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_from_name(libctx, type, NULL);
+ OSSL_PARAM_BLD *tmpl = NULL;
+ OSSL_PARAM *params = NULL;
+ EVP_PKEY *dhpkey = NULL;
+
+ if (pctx == NULL || EVP_PKEY_fromdata_init(pctx) <= 0)
+ goto err;
+
+ if ((tmpl = OSSL_PARAM_BLD_new()) == NULL
+ || !OSSL_PARAM_BLD_push_BN(tmpl, OSSL_PKEY_PARAM_FFC_P, p)
+ || !OSSL_PARAM_BLD_push_BN(tmpl, OSSL_PKEY_PARAM_FFC_G, g)
+ || (q != NULL
+ && !OSSL_PARAM_BLD_push_BN(tmpl, OSSL_PKEY_PARAM_FFC_Q, q)))
+ goto err;
+
+ params = OSSL_PARAM_BLD_to_param(tmpl);
+ if (params == NULL
+ || EVP_PKEY_fromdata(pctx, &dhpkey, EVP_PKEY_KEY_PARAMETERS, params) <= 0)
+ goto err;
+
+ err:
+ EVP_PKEY_CTX_free(pctx);
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(tmpl);
+ return dhpkey;
+}
+
+static EVP_PKEY *get_dh_from_pg(OSSL_LIB_CTX *libctx, const char *type,
+ unsigned char *pdata, size_t plen,
+ unsigned char *gdata, size_t glen,
+ unsigned char *qdata, size_t qlen)
+{
+ EVP_PKEY *dhpkey = NULL;
+ BIGNUM *p = NULL, *g = NULL, *q = NULL;
+
+ p = BN_bin2bn(pdata, plen, NULL);
+ g = BN_bin2bn(gdata, glen, NULL);
+ if (p == NULL || g == NULL)
+ goto err;
+ if (qdata != NULL && (q = BN_bin2bn(qdata, qlen, NULL)) == NULL)
+ goto err;
+
+ dhpkey = get_dh_from_pg_bn(libctx, type, p, g, q);
+
+ err:
+ BN_free(p);
+ BN_free(g);
+ BN_free(q);
+ return dhpkey;
+}
+
+EVP_PKEY *get_dh512(OSSL_LIB_CTX *libctx)
+{
+ static unsigned char dh512_p[] = {
+ 0xCB, 0xC8, 0xE1, 0x86, 0xD0, 0x1F, 0x94, 0x17, 0xA6, 0x99, 0xF0, 0xC6,
+ 0x1F, 0x0D, 0xAC, 0xB6, 0x25, 0x3E, 0x06, 0x39, 0xCA, 0x72, 0x04, 0xB0,
+ 0x6E, 0xDA, 0xC0, 0x61, 0xE6, 0x7A, 0x77, 0x25, 0xE8, 0x3B, 0xB9, 0x5F,
+ 0x9A, 0xB6, 0xB5, 0xFE, 0x99, 0x0B, 0xA1, 0x93, 0x4E, 0x35, 0x33, 0xB8,
+ 0xE1, 0xF1, 0x13, 0x4F, 0x59, 0x1A, 0xD2, 0x57, 0xC0, 0x26, 0x21, 0x33,
+ 0x02, 0xC5, 0xAE, 0x23,
+ };
+ static unsigned char dh512_g[] = {
+ 0x02,
+ };
+
+ return get_dh_from_pg(libctx, "DH", dh512_p, sizeof(dh512_p),
+ dh512_g, sizeof(dh512_g), NULL, 0);
+}
+
+EVP_PKEY *get_dhx512(OSSL_LIB_CTX *libctx)
+{
+ static unsigned char dhx512_p[] = {
+ 0x00, 0xe8, 0x1a, 0xb7, 0x9a, 0x02, 0x65, 0x64, 0x94, 0x7b, 0xba, 0x09,
+ 0x1c, 0x12, 0x27, 0x1e, 0xea, 0x89, 0x32, 0x64, 0x78, 0xf8, 0x1c, 0x78,
+ 0x8e, 0x96, 0xc3, 0xc6, 0x9f, 0x41, 0x05, 0x41, 0x65, 0xae, 0xe3, 0x05,
+ 0xea, 0x66, 0x21, 0xf7, 0x38, 0xb7, 0x2b, 0x32, 0x40, 0x5a, 0x14, 0x86,
+ 0x51, 0x94, 0xb1, 0xcf, 0x01, 0xe3, 0x27, 0x28, 0xf6, 0x75, 0xa3, 0x15,
+ 0xbb, 0x12, 0x4d, 0x99, 0xe7,
+ };
+ static unsigned char dhx512_g[] = {
+ 0x00, 0x91, 0xc1, 0x43, 0x6d, 0x0d, 0xb0, 0xa4, 0xde, 0x41, 0xb7, 0x93,
+ 0xad, 0x51, 0x94, 0x1b, 0x43, 0xd8, 0x42, 0xf1, 0x5e, 0x46, 0x83, 0x5d,
+ 0xf1, 0xd1, 0xf0, 0x41, 0x10, 0xd1, 0x1c, 0x5e, 0xad, 0x9b, 0x68, 0xb1,
+ 0x6f, 0xf5, 0x8e, 0xaa, 0x6d, 0x71, 0x88, 0x37, 0xdf, 0x05, 0xf7, 0x6e,
+ 0x7a, 0xb4, 0x25, 0x10, 0x6c, 0x7f, 0x38, 0xb4, 0xc8, 0xfc, 0xcc, 0x0c,
+ 0x6a, 0x02, 0x08, 0x61, 0xf6,
+ };
+ static unsigned char dhx512_q[] = {
+ 0x00, 0xdd, 0xf6, 0x35, 0xad, 0xfa, 0x70, 0xc7, 0xe7, 0xa8, 0xf0, 0xe3,
+ 0xda, 0x79, 0x34, 0x3f, 0x5b, 0xcf, 0x73, 0x82, 0x91,
+ };
+
+ return get_dh_from_pg(libctx, "X9.42 DH",
+ dhx512_p, sizeof(dhx512_p),
+ dhx512_g, sizeof(dhx512_g),
+ dhx512_q, sizeof(dhx512_q));
+}
+
+EVP_PKEY *get_dh1024dsa(OSSL_LIB_CTX *libctx)
+{
+ static unsigned char dh1024_p[] = {
+ 0xC8, 0x00, 0xF7, 0x08, 0x07, 0x89, 0x4D, 0x90, 0x53, 0xF3, 0xD5, 0x00,
+ 0x21, 0x1B, 0xF7, 0x31, 0xA6, 0xA2, 0xDA, 0x23, 0x9A, 0xC7, 0x87, 0x19,
+ 0x3B, 0x47, 0xB6, 0x8C, 0x04, 0x6F, 0xFF, 0xC6, 0x9B, 0xB8, 0x65, 0xD2,
+ 0xC2, 0x5F, 0x31, 0x83, 0x4A, 0xA7, 0x5F, 0x2F, 0x88, 0x38, 0xB6, 0x55,
+ 0xCF, 0xD9, 0x87, 0x6D, 0x6F, 0x9F, 0xDA, 0xAC, 0xA6, 0x48, 0xAF, 0xFC,
+ 0x33, 0x84, 0x37, 0x5B, 0x82, 0x4A, 0x31, 0x5D, 0xE7, 0xBD, 0x52, 0x97,
+ 0xA1, 0x77, 0xBF, 0x10, 0x9E, 0x37, 0xEA, 0x64, 0xFA, 0xCA, 0x28, 0x8D,
+ 0x9D, 0x3B, 0xD2, 0x6E, 0x09, 0x5C, 0x68, 0xC7, 0x45, 0x90, 0xFD, 0xBB,
+ 0x70, 0xC9, 0x3A, 0xBB, 0xDF, 0xD4, 0x21, 0x0F, 0xC4, 0x6A, 0x3C, 0xF6,
+ 0x61, 0xCF, 0x3F, 0xD6, 0x13, 0xF1, 0x5F, 0xBC, 0xCF, 0xBC, 0x26, 0x9E,
+ 0xBC, 0x0B, 0xBD, 0xAB, 0x5D, 0xC9, 0x54, 0x39,
+ };
+ static unsigned char dh1024_g[] = {
+ 0x3B, 0x40, 0x86, 0xE7, 0xF3, 0x6C, 0xDE, 0x67, 0x1C, 0xCC, 0x80, 0x05,
+ 0x5A, 0xDF, 0xFE, 0xBD, 0x20, 0x27, 0x74, 0x6C, 0x24, 0xC9, 0x03, 0xF3,
+ 0xE1, 0x8D, 0xC3, 0x7D, 0x98, 0x27, 0x40, 0x08, 0xB8, 0x8C, 0x6A, 0xE9,
+ 0xBB, 0x1A, 0x3A, 0xD6, 0x86, 0x83, 0x5E, 0x72, 0x41, 0xCE, 0x85, 0x3C,
+ 0xD2, 0xB3, 0xFC, 0x13, 0xCE, 0x37, 0x81, 0x9E, 0x4C, 0x1C, 0x7B, 0x65,
+ 0xD3, 0xE6, 0xA6, 0x00, 0xF5, 0x5A, 0x95, 0x43, 0x5E, 0x81, 0xCF, 0x60,
+ 0xA2, 0x23, 0xFC, 0x36, 0xA7, 0x5D, 0x7A, 0x4C, 0x06, 0x91, 0x6E, 0xF6,
+ 0x57, 0xEE, 0x36, 0xCB, 0x06, 0xEA, 0xF5, 0x3D, 0x95, 0x49, 0xCB, 0xA7,
+ 0xDD, 0x81, 0xDF, 0x80, 0x09, 0x4A, 0x97, 0x4D, 0xA8, 0x22, 0x72, 0xA1,
+ 0x7F, 0xC4, 0x70, 0x56, 0x70, 0xE8, 0x20, 0x10, 0x18, 0x8F, 0x2E, 0x60,
+ 0x07, 0xE7, 0x68, 0x1A, 0x82, 0x5D, 0x32, 0xA2,
+ };
+
+ return get_dh_from_pg(libctx, "DH", dh1024_p, sizeof(dh1024_p),
+ dh1024_g, sizeof(dh1024_g), NULL, 0);
+}
+
+EVP_PKEY *get_dh2048(OSSL_LIB_CTX *libctx)
+{
+ BIGNUM *p = NULL, *g = NULL;
+ EVP_PKEY *dhpkey = NULL;
+
+ g = BN_new();
+ if (g == NULL || !BN_set_word(g, 2))
+ goto err;
+
+ p = BN_get_rfc3526_prime_2048(NULL);
+ if (p == NULL)
+ goto err;
+
+ dhpkey = get_dh_from_pg_bn(libctx, "DH", p, g, NULL);
+
+ err:
+ BN_free(p);
+ BN_free(g);
+ return dhpkey;
+}
+
+EVP_PKEY *get_dh4096(OSSL_LIB_CTX *libctx)
+{
+ BIGNUM *p = NULL, *g = NULL;
+ EVP_PKEY *dhpkey = NULL;
+
+ g = BN_new();
+ if (g == NULL || !BN_set_word(g, 2))
+ goto err;
+
+ p = BN_get_rfc3526_prime_4096(NULL);
+ if (p == NULL)
+ goto err;
+
+ dhpkey = get_dh_from_pg_bn(libctx, "DH", p, g, NULL);
+
+ err:
+ BN_free(p);
+ BN_free(g);
+ return dhpkey;
+}
+
+#endif
diff --git a/test/helpers/predefined_dhparams.h b/test/helpers/predefined_dhparams.h
new file mode 100644
index 000000000000..f0e87090620c
--- /dev/null
+++ b/test/helpers/predefined_dhparams.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright 1995-2022 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>
+
+#ifndef OPENSSL_NO_DH
+EVP_PKEY *get_dh512(OSSL_LIB_CTX *libctx);
+EVP_PKEY *get_dhx512(OSSL_LIB_CTX *libctx);
+EVP_PKEY *get_dh1024dsa(OSSL_LIB_CTX *libct);
+EVP_PKEY *get_dh2048(OSSL_LIB_CTX *libctx);
+EVP_PKEY *get_dh4096(OSSL_LIB_CTX *libctx);
+#endif
diff --git a/test/helpers/ssl_test_ctx.c b/test/helpers/ssl_test_ctx.c
new file mode 100644
index 000000000000..a0e2e794c6d3
--- /dev/null
+++ b/test/helpers/ssl_test_ctx.c
@@ -0,0 +1,903 @@
+/*
+ * Copyright 2016-2022 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/e_os2.h>
+#include <openssl/crypto.h>
+
+#include "internal/nelem.h"
+#include "ssl_test_ctx.h"
+#include "../testutil.h"
+
+static const int default_app_data_size = 256;
+/* Default set to be as small as possible to exercise fragmentation. */
+static const int default_max_fragment_size = 512;
+
+static int parse_boolean(const char *value, int *result)
+{
+ if (OPENSSL_strcasecmp(value, "Yes") == 0) {
+ *result = 1;
+ return 1;
+ }
+ else if (OPENSSL_strcasecmp(value, "No") == 0) {
+ *result = 0;
+ return 1;
+ }
+ TEST_error("parse_boolean given: '%s'", value);
+ return 0;
+}
+
+#define IMPLEMENT_SSL_TEST_BOOL_OPTION(struct_type, name, field) \
+ static int parse_##name##_##field(struct_type *ctx, const char *value) \
+ { \
+ return parse_boolean(value, &ctx->field); \
+ }
+
+#define IMPLEMENT_SSL_TEST_STRING_OPTION(struct_type, name, field) \
+ static int parse_##name##_##field(struct_type *ctx, const char *value) \
+ { \
+ OPENSSL_free(ctx->field); \
+ ctx->field = OPENSSL_strdup(value); \
+ return TEST_ptr(ctx->field); \
+ }
+
+#define IMPLEMENT_SSL_TEST_INT_OPTION(struct_type, name, field) \
+ static int parse_##name##_##field(struct_type *ctx, const char *value) \
+ { \
+ ctx->field = atoi(value); \
+ return 1; \
+ }
+
+/* True enums and other test configuration values that map to an int. */
+typedef struct {
+ const char *name;
+ int value;
+} test_enum;
+
+
+__owur static int parse_enum(const test_enum *enums, size_t num_enums,
+ int *value, const char *name)
+{
+ size_t i;
+ for (i = 0; i < num_enums; i++) {
+ if (strcmp(enums[i].name, name) == 0) {
+ *value = enums[i].value;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static const char *enum_name(const test_enum *enums, size_t num_enums,
+ int value)
+{
+ size_t i;
+ for (i = 0; i < num_enums; i++) {
+ if (enums[i].value == value) {
+ return enums[i].name;
+ }
+ }
+ return "InvalidValue";
+}
+
+
+/* ExpectedResult */
+
+static const test_enum ssl_test_results[] = {
+ {"Success", SSL_TEST_SUCCESS},
+ {"ServerFail", SSL_TEST_SERVER_FAIL},
+ {"ClientFail", SSL_TEST_CLIENT_FAIL},
+ {"InternalError", SSL_TEST_INTERNAL_ERROR},
+ {"FirstHandshakeFailed", SSL_TEST_FIRST_HANDSHAKE_FAILED},
+};
+
+__owur static int parse_expected_result(SSL_TEST_CTX *test_ctx, const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_test_results, OSSL_NELEM(ssl_test_results),
+ &ret_value, value)) {
+ return 0;
+ }
+ test_ctx->expected_result = ret_value;
+ return 1;
+}
+
+const char *ssl_test_result_name(ssl_test_result_t result)
+{
+ return enum_name(ssl_test_results, OSSL_NELEM(ssl_test_results), result);
+}
+
+/* ExpectedClientAlert / ExpectedServerAlert */
+
+static const test_enum ssl_alerts[] = {
+ {"UnknownCA", SSL_AD_UNKNOWN_CA},
+ {"HandshakeFailure", SSL_AD_HANDSHAKE_FAILURE},
+ {"UnrecognizedName", SSL_AD_UNRECOGNIZED_NAME},
+ {"NoRenegotiation", SSL_AD_NO_RENEGOTIATION},
+ {"BadCertificate", SSL_AD_BAD_CERTIFICATE},
+ {"NoApplicationProtocol", SSL_AD_NO_APPLICATION_PROTOCOL},
+ {"CertificateRequired", SSL_AD_CERTIFICATE_REQUIRED},
+};
+
+__owur static int parse_alert(int *alert, const char *value)
+{
+ return parse_enum(ssl_alerts, OSSL_NELEM(ssl_alerts), alert, value);
+}
+
+__owur static int parse_client_alert(SSL_TEST_CTX *test_ctx, const char *value)
+{
+ return parse_alert(&test_ctx->expected_client_alert, value);
+}
+
+__owur static int parse_server_alert(SSL_TEST_CTX *test_ctx, const char *value)
+{
+ return parse_alert(&test_ctx->expected_server_alert, value);
+}
+
+const char *ssl_alert_name(int alert)
+{
+ return enum_name(ssl_alerts, OSSL_NELEM(ssl_alerts), alert);
+}
+
+/* ExpectedProtocol */
+
+static const test_enum ssl_protocols[] = {
+ {"TLSv1.3", TLS1_3_VERSION},
+ {"TLSv1.2", TLS1_2_VERSION},
+ {"TLSv1.1", TLS1_1_VERSION},
+ {"TLSv1", TLS1_VERSION},
+ {"SSLv3", SSL3_VERSION},
+ {"DTLSv1", DTLS1_VERSION},
+ {"DTLSv1.2", DTLS1_2_VERSION},
+};
+
+__owur static int parse_protocol(SSL_TEST_CTX *test_ctx, const char *value)
+{
+ return parse_enum(ssl_protocols, OSSL_NELEM(ssl_protocols),
+ &test_ctx->expected_protocol, value);
+}
+
+const char *ssl_protocol_name(int protocol)
+{
+ return enum_name(ssl_protocols, OSSL_NELEM(ssl_protocols), protocol);
+}
+
+/* VerifyCallback */
+
+static const test_enum ssl_verify_callbacks[] = {
+ {"None", SSL_TEST_VERIFY_NONE},
+ {"AcceptAll", SSL_TEST_VERIFY_ACCEPT_ALL},
+ {"RetryOnce", SSL_TEST_VERIFY_RETRY_ONCE},
+ {"RejectAll", SSL_TEST_VERIFY_REJECT_ALL},
+};
+
+__owur static int parse_client_verify_callback(SSL_TEST_CLIENT_CONF *client_conf,
+ const char *value)
+{
+ int ret_value;
+
+ if (!parse_enum(ssl_verify_callbacks, OSSL_NELEM(ssl_verify_callbacks),
+ &ret_value, value)) {
+ return 0;
+ }
+ client_conf->verify_callback = ret_value;
+ return 1;
+}
+
+const char *ssl_verify_callback_name(ssl_verify_callback_t callback)
+{
+ return enum_name(ssl_verify_callbacks, OSSL_NELEM(ssl_verify_callbacks),
+ callback);
+}
+
+/* ServerName */
+
+static const test_enum ssl_servername[] = {
+ {"None", SSL_TEST_SERVERNAME_NONE},
+ {"server1", SSL_TEST_SERVERNAME_SERVER1},
+ {"server2", SSL_TEST_SERVERNAME_SERVER2},
+ {"invalid", SSL_TEST_SERVERNAME_INVALID},
+};
+
+__owur static int parse_servername(SSL_TEST_CLIENT_CONF *client_conf,
+ const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_servername, OSSL_NELEM(ssl_servername),
+ &ret_value, value)) {
+ return 0;
+ }
+ client_conf->servername = ret_value;
+ return 1;
+}
+
+__owur static int parse_expected_servername(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_servername, OSSL_NELEM(ssl_servername),
+ &ret_value, value)) {
+ return 0;
+ }
+ test_ctx->expected_servername = ret_value;
+ return 1;
+}
+
+const char *ssl_servername_name(ssl_servername_t server)
+{
+ return enum_name(ssl_servername, OSSL_NELEM(ssl_servername),
+ server);
+}
+
+/* ServerNameCallback */
+
+static const test_enum ssl_servername_callbacks[] = {
+ {"None", SSL_TEST_SERVERNAME_CB_NONE},
+ {"IgnoreMismatch", SSL_TEST_SERVERNAME_IGNORE_MISMATCH},
+ {"RejectMismatch", SSL_TEST_SERVERNAME_REJECT_MISMATCH},
+ {"ClientHelloIgnoreMismatch",
+ SSL_TEST_SERVERNAME_CLIENT_HELLO_IGNORE_MISMATCH},
+ {"ClientHelloRejectMismatch",
+ SSL_TEST_SERVERNAME_CLIENT_HELLO_REJECT_MISMATCH},
+ {"ClientHelloNoV12", SSL_TEST_SERVERNAME_CLIENT_HELLO_NO_V12},
+};
+
+__owur static int parse_servername_callback(SSL_TEST_SERVER_CONF *server_conf,
+ const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_servername_callbacks,
+ OSSL_NELEM(ssl_servername_callbacks), &ret_value, value)) {
+ return 0;
+ }
+ server_conf->servername_callback = ret_value;
+ return 1;
+}
+
+const char *ssl_servername_callback_name(ssl_servername_callback_t callback)
+{
+ return enum_name(ssl_servername_callbacks,
+ OSSL_NELEM(ssl_servername_callbacks), callback);
+}
+
+/* SessionTicketExpected */
+
+static const test_enum ssl_session_ticket[] = {
+ {"Ignore", SSL_TEST_SESSION_TICKET_IGNORE},
+ {"Yes", SSL_TEST_SESSION_TICKET_YES},
+ {"No", SSL_TEST_SESSION_TICKET_NO},
+};
+
+__owur static int parse_session_ticket(SSL_TEST_CTX *test_ctx, const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_session_ticket, OSSL_NELEM(ssl_session_ticket),
+ &ret_value, value)) {
+ return 0;
+ }
+ test_ctx->session_ticket_expected = ret_value;
+ return 1;
+}
+
+const char *ssl_session_ticket_name(ssl_session_ticket_t server)
+{
+ return enum_name(ssl_session_ticket,
+ OSSL_NELEM(ssl_session_ticket),
+ server);
+}
+
+/* CompressionExpected */
+
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_CTX, test, compression_expected)
+
+/* SessionIdExpected */
+
+static const test_enum ssl_session_id[] = {
+ {"Ignore", SSL_TEST_SESSION_ID_IGNORE},
+ {"Yes", SSL_TEST_SESSION_ID_YES},
+ {"No", SSL_TEST_SESSION_ID_NO},
+};
+
+__owur static int parse_session_id(SSL_TEST_CTX *test_ctx, const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_session_id, OSSL_NELEM(ssl_session_id),
+ &ret_value, value)) {
+ return 0;
+ }
+ test_ctx->session_id_expected = ret_value;
+ return 1;
+}
+
+const char *ssl_session_id_name(ssl_session_id_t server)
+{
+ return enum_name(ssl_session_id,
+ OSSL_NELEM(ssl_session_id),
+ server);
+}
+
+/* Method */
+
+static const test_enum ssl_test_methods[] = {
+ {"TLS", SSL_TEST_METHOD_TLS},
+ {"DTLS", SSL_TEST_METHOD_DTLS},
+};
+
+__owur static int parse_test_method(SSL_TEST_CTX *test_ctx, const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_test_methods, OSSL_NELEM(ssl_test_methods),
+ &ret_value, value)) {
+ return 0;
+ }
+ test_ctx->method = ret_value;
+ return 1;
+}
+
+const char *ssl_test_method_name(ssl_test_method_t method)
+{
+ return enum_name(ssl_test_methods, OSSL_NELEM(ssl_test_methods), method);
+}
+
+/* NPN and ALPN options */
+
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_CLIENT_CONF, client, npn_protocols)
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_SERVER_CONF, server, npn_protocols)
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_CTX, test, expected_npn_protocol)
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_CLIENT_CONF, client, alpn_protocols)
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_SERVER_CONF, server, alpn_protocols)
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_CTX, test, expected_alpn_protocol)
+
+/* SRP options */
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_CLIENT_CONF, client, srp_user)
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_SERVER_CONF, server, srp_user)
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_CLIENT_CONF, client, srp_password)
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_SERVER_CONF, server, srp_password)
+
+/* Session Ticket App Data options */
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_CTX, test, expected_session_ticket_app_data)
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_SERVER_CONF, server, session_ticket_app_data)
+
+/* Handshake mode */
+
+static const test_enum ssl_handshake_modes[] = {
+ {"Simple", SSL_TEST_HANDSHAKE_SIMPLE},
+ {"Resume", SSL_TEST_HANDSHAKE_RESUME},
+ {"RenegotiateServer", SSL_TEST_HANDSHAKE_RENEG_SERVER},
+ {"RenegotiateClient", SSL_TEST_HANDSHAKE_RENEG_CLIENT},
+ {"KeyUpdateServer", SSL_TEST_HANDSHAKE_KEY_UPDATE_SERVER},
+ {"KeyUpdateClient", SSL_TEST_HANDSHAKE_KEY_UPDATE_CLIENT},
+ {"PostHandshakeAuth", SSL_TEST_HANDSHAKE_POST_HANDSHAKE_AUTH},
+};
+
+__owur static int parse_handshake_mode(SSL_TEST_CTX *test_ctx, const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_handshake_modes, OSSL_NELEM(ssl_handshake_modes),
+ &ret_value, value)) {
+ return 0;
+ }
+ test_ctx->handshake_mode = ret_value;
+ return 1;
+}
+
+const char *ssl_handshake_mode_name(ssl_handshake_mode_t mode)
+{
+ return enum_name(ssl_handshake_modes, OSSL_NELEM(ssl_handshake_modes),
+ mode);
+}
+
+/* Renegotiation Ciphersuites */
+
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_CLIENT_CONF, client, reneg_ciphers)
+
+/* KeyUpdateType */
+
+static const test_enum ssl_key_update_types[] = {
+ {"KeyUpdateRequested", SSL_KEY_UPDATE_REQUESTED},
+ {"KeyUpdateNotRequested", SSL_KEY_UPDATE_NOT_REQUESTED},
+};
+
+__owur static int parse_key_update_type(SSL_TEST_CTX *test_ctx, const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_key_update_types, OSSL_NELEM(ssl_key_update_types),
+ &ret_value, value)) {
+ return 0;
+ }
+ test_ctx->key_update_type = ret_value;
+ return 1;
+}
+
+/* CT Validation */
+
+static const test_enum ssl_ct_validation_modes[] = {
+ {"None", SSL_TEST_CT_VALIDATION_NONE},
+ {"Permissive", SSL_TEST_CT_VALIDATION_PERMISSIVE},
+ {"Strict", SSL_TEST_CT_VALIDATION_STRICT},
+};
+
+__owur static int parse_ct_validation(SSL_TEST_CLIENT_CONF *client_conf,
+ const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_ct_validation_modes, OSSL_NELEM(ssl_ct_validation_modes),
+ &ret_value, value)) {
+ return 0;
+ }
+ client_conf->ct_validation = ret_value;
+ return 1;
+}
+
+const char *ssl_ct_validation_name(ssl_ct_validation_t mode)
+{
+ return enum_name(ssl_ct_validation_modes, OSSL_NELEM(ssl_ct_validation_modes),
+ mode);
+}
+
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_CTX, test, resumption_expected)
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_SERVER_CONF, server, broken_session_ticket)
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_CTX, test, use_sctp)
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_CTX, test, enable_client_sctp_label_bug)
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_CTX, test, enable_server_sctp_label_bug)
+
+/* CertStatus */
+
+static const test_enum ssl_certstatus[] = {
+ {"None", SSL_TEST_CERT_STATUS_NONE},
+ {"GoodResponse", SSL_TEST_CERT_STATUS_GOOD_RESPONSE},
+ {"BadResponse", SSL_TEST_CERT_STATUS_BAD_RESPONSE}
+};
+
+__owur static int parse_certstatus(SSL_TEST_SERVER_CONF *server_conf,
+ const char *value)
+{
+ int ret_value;
+ if (!parse_enum(ssl_certstatus, OSSL_NELEM(ssl_certstatus), &ret_value,
+ value)) {
+ return 0;
+ }
+ server_conf->cert_status = ret_value;
+ return 1;
+}
+
+const char *ssl_certstatus_name(ssl_cert_status_t cert_status)
+{
+ return enum_name(ssl_certstatus,
+ OSSL_NELEM(ssl_certstatus), cert_status);
+}
+
+/* ApplicationData */
+
+IMPLEMENT_SSL_TEST_INT_OPTION(SSL_TEST_CTX, test, app_data_size)
+
+
+/* MaxFragmentSize */
+
+IMPLEMENT_SSL_TEST_INT_OPTION(SSL_TEST_CTX, test, max_fragment_size)
+
+/* Maximum-Fragment-Length TLS extension mode */
+static const test_enum ssl_max_fragment_len_mode[] = {
+ {"None", TLSEXT_max_fragment_length_DISABLED},
+ { "512", TLSEXT_max_fragment_length_512},
+ {"1024", TLSEXT_max_fragment_length_1024},
+ {"2048", TLSEXT_max_fragment_length_2048},
+ {"4096", TLSEXT_max_fragment_length_4096}
+};
+
+__owur static int parse_max_fragment_len_mode(SSL_TEST_CLIENT_CONF *client_conf,
+ const char *value)
+{
+ int ret_value;
+
+ if (!parse_enum(ssl_max_fragment_len_mode,
+ OSSL_NELEM(ssl_max_fragment_len_mode), &ret_value, value)) {
+ return 0;
+ }
+ client_conf->max_fragment_len_mode = ret_value;
+ return 1;
+}
+
+const char *ssl_max_fragment_len_name(int MFL_mode)
+{
+ return enum_name(ssl_max_fragment_len_mode,
+ OSSL_NELEM(ssl_max_fragment_len_mode), MFL_mode);
+}
+
+
+/* Expected key and signature types */
+
+__owur static int parse_expected_key_type(int *ptype, const char *value)
+{
+ int nid;
+ const EVP_PKEY_ASN1_METHOD *ameth;
+
+ if (value == NULL)
+ return 0;
+ ameth = EVP_PKEY_asn1_find_str(NULL, value, -1);
+ if (ameth != NULL)
+ EVP_PKEY_asn1_get0_info(&nid, NULL, NULL, NULL, NULL, ameth);
+ else
+ nid = OBJ_sn2nid(value);
+ if (nid == NID_undef)
+ nid = OBJ_ln2nid(value);
+#ifndef OPENSSL_NO_EC
+ if (nid == NID_undef)
+ nid = EC_curve_nist2nid(value);
+#endif
+ if (nid == NID_undef)
+ return 0;
+ *ptype = nid;
+ return 1;
+}
+
+__owur static int parse_expected_tmp_key_type(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_key_type(&test_ctx->expected_tmp_key_type, value);
+}
+
+__owur static int parse_expected_server_cert_type(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_key_type(&test_ctx->expected_server_cert_type,
+ value);
+}
+
+__owur static int parse_expected_server_sign_type(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_key_type(&test_ctx->expected_server_sign_type,
+ value);
+}
+
+__owur static int parse_expected_client_cert_type(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_key_type(&test_ctx->expected_client_cert_type,
+ value);
+}
+
+__owur static int parse_expected_client_sign_type(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_key_type(&test_ctx->expected_client_sign_type,
+ value);
+}
+
+
+/* Expected signing hash */
+
+__owur static int parse_expected_sign_hash(int *ptype, const char *value)
+{
+ int nid;
+
+ if (value == NULL)
+ return 0;
+ nid = OBJ_sn2nid(value);
+ if (nid == NID_undef)
+ nid = OBJ_ln2nid(value);
+ if (nid == NID_undef)
+ return 0;
+ *ptype = nid;
+ return 1;
+}
+
+__owur static int parse_expected_server_sign_hash(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_sign_hash(&test_ctx->expected_server_sign_hash,
+ value);
+}
+
+__owur static int parse_expected_client_sign_hash(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_sign_hash(&test_ctx->expected_client_sign_hash,
+ value);
+}
+
+__owur static int parse_expected_ca_names(STACK_OF(X509_NAME) **pnames,
+ const char *value,
+ OSSL_LIB_CTX *libctx)
+{
+ if (value == NULL)
+ return 0;
+ if (!strcmp(value, "empty"))
+ *pnames = sk_X509_NAME_new_null();
+ else
+ *pnames = SSL_load_client_CA_file_ex(value, libctx, NULL);
+ return *pnames != NULL;
+}
+__owur static int parse_expected_server_ca_names(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_ca_names(&test_ctx->expected_server_ca_names, value,
+ test_ctx->libctx);
+}
+__owur static int parse_expected_client_ca_names(SSL_TEST_CTX *test_ctx,
+ const char *value)
+{
+ return parse_expected_ca_names(&test_ctx->expected_client_ca_names, value,
+ test_ctx->libctx);
+}
+
+/* ExpectedCipher */
+
+IMPLEMENT_SSL_TEST_STRING_OPTION(SSL_TEST_CTX, test, expected_cipher)
+
+/* Client and Server PHA */
+
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_CLIENT_CONF, client, enable_pha)
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_SERVER_CONF, server, force_pha)
+IMPLEMENT_SSL_TEST_BOOL_OPTION(SSL_TEST_CLIENT_CONF, client, no_extms_on_reneg)
+
+/* Known test options and their corresponding parse methods. */
+
+/* Top-level options. */
+typedef struct {
+ const char *name;
+ int (*parse)(SSL_TEST_CTX *test_ctx, const char *value);
+} ssl_test_ctx_option;
+
+static const ssl_test_ctx_option ssl_test_ctx_options[] = {
+ { "ExpectedResult", &parse_expected_result },
+ { "ExpectedClientAlert", &parse_client_alert },
+ { "ExpectedServerAlert", &parse_server_alert },
+ { "ExpectedProtocol", &parse_protocol },
+ { "ExpectedServerName", &parse_expected_servername },
+ { "SessionTicketExpected", &parse_session_ticket },
+ { "CompressionExpected", &parse_test_compression_expected },
+ { "SessionIdExpected", &parse_session_id },
+ { "Method", &parse_test_method },
+ { "ExpectedNPNProtocol", &parse_test_expected_npn_protocol },
+ { "ExpectedALPNProtocol", &parse_test_expected_alpn_protocol },
+ { "HandshakeMode", &parse_handshake_mode },
+ { "KeyUpdateType", &parse_key_update_type },
+ { "ResumptionExpected", &parse_test_resumption_expected },
+ { "ApplicationData", &parse_test_app_data_size },
+ { "MaxFragmentSize", &parse_test_max_fragment_size },
+ { "ExpectedTmpKeyType", &parse_expected_tmp_key_type },
+ { "ExpectedServerCertType", &parse_expected_server_cert_type },
+ { "ExpectedServerSignHash", &parse_expected_server_sign_hash },
+ { "ExpectedServerSignType", &parse_expected_server_sign_type },
+ { "ExpectedServerCANames", &parse_expected_server_ca_names },
+ { "ExpectedClientCertType", &parse_expected_client_cert_type },
+ { "ExpectedClientSignHash", &parse_expected_client_sign_hash },
+ { "ExpectedClientSignType", &parse_expected_client_sign_type },
+ { "ExpectedClientCANames", &parse_expected_client_ca_names },
+ { "UseSCTP", &parse_test_use_sctp },
+ { "EnableClientSCTPLabelBug", &parse_test_enable_client_sctp_label_bug },
+ { "EnableServerSCTPLabelBug", &parse_test_enable_server_sctp_label_bug },
+ { "ExpectedCipher", &parse_test_expected_cipher },
+ { "ExpectedSessionTicketAppData", &parse_test_expected_session_ticket_app_data },
+};
+
+/* Nested client options. */
+typedef struct {
+ const char *name;
+ int (*parse)(SSL_TEST_CLIENT_CONF *conf, const char *value);
+} ssl_test_client_option;
+
+static const ssl_test_client_option ssl_test_client_options[] = {
+ { "VerifyCallback", &parse_client_verify_callback },
+ { "ServerName", &parse_servername },
+ { "NPNProtocols", &parse_client_npn_protocols },
+ { "ALPNProtocols", &parse_client_alpn_protocols },
+ { "CTValidation", &parse_ct_validation },
+ { "RenegotiateCiphers", &parse_client_reneg_ciphers},
+ { "SRPUser", &parse_client_srp_user },
+ { "SRPPassword", &parse_client_srp_password },
+ { "MaxFragmentLenExt", &parse_max_fragment_len_mode },
+ { "EnablePHA", &parse_client_enable_pha },
+ { "RenegotiateNoExtms", &parse_client_no_extms_on_reneg },
+};
+
+/* Nested server options. */
+typedef struct {
+ const char *name;
+ int (*parse)(SSL_TEST_SERVER_CONF *conf, const char *value);
+} ssl_test_server_option;
+
+static const ssl_test_server_option ssl_test_server_options[] = {
+ { "ServerNameCallback", &parse_servername_callback },
+ { "NPNProtocols", &parse_server_npn_protocols },
+ { "ALPNProtocols", &parse_server_alpn_protocols },
+ { "BrokenSessionTicket", &parse_server_broken_session_ticket },
+ { "CertStatus", &parse_certstatus },
+ { "SRPUser", &parse_server_srp_user },
+ { "SRPPassword", &parse_server_srp_password },
+ { "ForcePHA", &parse_server_force_pha },
+ { "SessionTicketAppData", &parse_server_session_ticket_app_data },
+};
+
+SSL_TEST_CTX *SSL_TEST_CTX_new(OSSL_LIB_CTX *libctx)
+{
+ SSL_TEST_CTX *ret;
+
+ /* The return code is checked by caller */
+ if ((ret = OPENSSL_zalloc(sizeof(*ret))) != NULL) {
+ ret->libctx = libctx;
+ ret->app_data_size = default_app_data_size;
+ ret->max_fragment_size = default_max_fragment_size;
+ }
+ return ret;
+}
+
+static void ssl_test_extra_conf_free_data(SSL_TEST_EXTRA_CONF *conf)
+{
+ OPENSSL_free(conf->client.npn_protocols);
+ OPENSSL_free(conf->server.npn_protocols);
+ OPENSSL_free(conf->server2.npn_protocols);
+ OPENSSL_free(conf->client.alpn_protocols);
+ OPENSSL_free(conf->server.alpn_protocols);
+ OPENSSL_free(conf->server2.alpn_protocols);
+ OPENSSL_free(conf->client.reneg_ciphers);
+ OPENSSL_free(conf->server.srp_user);
+ OPENSSL_free(conf->server.srp_password);
+ OPENSSL_free(conf->server2.srp_user);
+ OPENSSL_free(conf->server2.srp_password);
+ OPENSSL_free(conf->client.srp_user);
+ OPENSSL_free(conf->client.srp_password);
+ OPENSSL_free(conf->server.session_ticket_app_data);
+ OPENSSL_free(conf->server2.session_ticket_app_data);
+}
+
+static void ssl_test_ctx_free_extra_data(SSL_TEST_CTX *ctx)
+{
+ ssl_test_extra_conf_free_data(&ctx->extra);
+ ssl_test_extra_conf_free_data(&ctx->resume_extra);
+}
+
+void SSL_TEST_CTX_free(SSL_TEST_CTX *ctx)
+{
+ if (ctx == NULL)
+ return;
+ ssl_test_ctx_free_extra_data(ctx);
+ OPENSSL_free(ctx->expected_npn_protocol);
+ OPENSSL_free(ctx->expected_alpn_protocol);
+ OPENSSL_free(ctx->expected_session_ticket_app_data);
+ sk_X509_NAME_pop_free(ctx->expected_server_ca_names, X509_NAME_free);
+ sk_X509_NAME_pop_free(ctx->expected_client_ca_names, X509_NAME_free);
+ OPENSSL_free(ctx->expected_cipher);
+ OPENSSL_free(ctx);
+}
+
+static int parse_client_options(SSL_TEST_CLIENT_CONF *client, const CONF *conf,
+ const char *client_section)
+{
+ STACK_OF(CONF_VALUE) *sk_conf;
+ int i;
+ size_t j;
+
+ if (!TEST_ptr(sk_conf = NCONF_get_section(conf, client_section)))
+ return 0;
+
+ for (i = 0; i < sk_CONF_VALUE_num(sk_conf); i++) {
+ int found = 0;
+ const CONF_VALUE *option = sk_CONF_VALUE_value(sk_conf, i);
+ for (j = 0; j < OSSL_NELEM(ssl_test_client_options); j++) {
+ if (strcmp(option->name, ssl_test_client_options[j].name) == 0) {
+ if (!ssl_test_client_options[j].parse(client, option->value)) {
+ TEST_info("Bad value %s for option %s",
+ option->value, option->name);
+ return 0;
+ }
+ found = 1;
+ break;
+ }
+ }
+ if (!found) {
+ TEST_info("Unknown test option: %s", option->name);
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int parse_server_options(SSL_TEST_SERVER_CONF *server, const CONF *conf,
+ const char *server_section)
+{
+ STACK_OF(CONF_VALUE) *sk_conf;
+ int i;
+ size_t j;
+
+ if (!TEST_ptr(sk_conf = NCONF_get_section(conf, server_section)))
+ return 0;
+
+ for (i = 0; i < sk_CONF_VALUE_num(sk_conf); i++) {
+ int found = 0;
+ const CONF_VALUE *option = sk_CONF_VALUE_value(sk_conf, i);
+ for (j = 0; j < OSSL_NELEM(ssl_test_server_options); j++) {
+ if (strcmp(option->name, ssl_test_server_options[j].name) == 0) {
+ if (!ssl_test_server_options[j].parse(server, option->value)) {
+ TEST_info("Bad value %s for option %s",
+ option->value, option->name);
+ return 0;
+ }
+ found = 1;
+ break;
+ }
+ }
+ if (!found) {
+ TEST_info("Unknown test option: %s", option->name);
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+SSL_TEST_CTX *SSL_TEST_CTX_create(const CONF *conf, const char *test_section,
+ OSSL_LIB_CTX *libctx)
+{
+ STACK_OF(CONF_VALUE) *sk_conf = NULL;
+ SSL_TEST_CTX *ctx = NULL;
+ int i;
+ size_t j;
+
+ if (!TEST_ptr(sk_conf = NCONF_get_section(conf, test_section))
+ || !TEST_ptr(ctx = SSL_TEST_CTX_new(libctx)))
+ goto err;
+
+ for (i = 0; i < sk_CONF_VALUE_num(sk_conf); i++) {
+ int found = 0;
+ const CONF_VALUE *option = sk_CONF_VALUE_value(sk_conf, i);
+
+ /* Subsections */
+ if (strcmp(option->name, "client") == 0) {
+ if (!parse_client_options(&ctx->extra.client, conf, option->value))
+ goto err;
+ } else if (strcmp(option->name, "server") == 0) {
+ if (!parse_server_options(&ctx->extra.server, conf, option->value))
+ goto err;
+ } else if (strcmp(option->name, "server2") == 0) {
+ if (!parse_server_options(&ctx->extra.server2, conf, option->value))
+ goto err;
+ } else if (strcmp(option->name, "resume-client") == 0) {
+ if (!parse_client_options(&ctx->resume_extra.client, conf,
+ option->value))
+ goto err;
+ } else if (strcmp(option->name, "resume-server") == 0) {
+ if (!parse_server_options(&ctx->resume_extra.server, conf,
+ option->value))
+ goto err;
+ } else if (strcmp(option->name, "resume-server2") == 0) {
+ if (!parse_server_options(&ctx->resume_extra.server2, conf,
+ option->value))
+ goto err;
+ } else {
+ for (j = 0; j < OSSL_NELEM(ssl_test_ctx_options); j++) {
+ if (strcmp(option->name, ssl_test_ctx_options[j].name) == 0) {
+ if (!ssl_test_ctx_options[j].parse(ctx, option->value)) {
+ TEST_info("Bad value %s for option %s",
+ option->value, option->name);
+ goto err;
+ }
+ found = 1;
+ break;
+ }
+ }
+ if (!found) {
+ TEST_info("Unknown test option: %s", option->name);
+ goto err;
+ }
+ }
+ }
+
+ goto done;
+
+ err:
+ SSL_TEST_CTX_free(ctx);
+ ctx = NULL;
+ done:
+ return ctx;
+}
diff --git a/test/helpers/ssl_test_ctx.h b/test/helpers/ssl_test_ctx.h
new file mode 100644
index 000000000000..7b35dcb998f7
--- /dev/null
+++ b/test/helpers/ssl_test_ctx.h
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef OSSL_TEST_SSL_TEST_CTX_H
+#define OSSL_TEST_SSL_TEST_CTX_H
+
+#include <openssl/conf.h>
+#include <openssl/ssl.h>
+
+typedef enum {
+ SSL_TEST_SUCCESS = 0, /* Default */
+ SSL_TEST_SERVER_FAIL,
+ SSL_TEST_CLIENT_FAIL,
+ SSL_TEST_INTERNAL_ERROR,
+ /* Couldn't test resumption/renegotiation: original handshake failed. */
+ SSL_TEST_FIRST_HANDSHAKE_FAILED
+} ssl_test_result_t;
+
+typedef enum {
+ SSL_TEST_VERIFY_NONE = 0, /* Default */
+ SSL_TEST_VERIFY_ACCEPT_ALL,
+ SSL_TEST_VERIFY_RETRY_ONCE,
+ SSL_TEST_VERIFY_REJECT_ALL
+} ssl_verify_callback_t;
+
+typedef enum {
+ SSL_TEST_SERVERNAME_NONE = 0, /* Default */
+ SSL_TEST_SERVERNAME_SERVER1,
+ SSL_TEST_SERVERNAME_SERVER2,
+ SSL_TEST_SERVERNAME_INVALID
+} ssl_servername_t;
+
+typedef enum {
+ SSL_TEST_SERVERNAME_CB_NONE = 0, /* Default */
+ SSL_TEST_SERVERNAME_IGNORE_MISMATCH,
+ SSL_TEST_SERVERNAME_REJECT_MISMATCH,
+ SSL_TEST_SERVERNAME_CLIENT_HELLO_IGNORE_MISMATCH,
+ SSL_TEST_SERVERNAME_CLIENT_HELLO_REJECT_MISMATCH,
+ SSL_TEST_SERVERNAME_CLIENT_HELLO_NO_V12
+} ssl_servername_callback_t;
+
+typedef enum {
+ SSL_TEST_SESSION_TICKET_IGNORE = 0, /* Default */
+ SSL_TEST_SESSION_TICKET_YES,
+ SSL_TEST_SESSION_TICKET_NO,
+ SSL_TEST_SESSION_TICKET_BROKEN /* Special test */
+} ssl_session_ticket_t;
+
+typedef enum {
+ SSL_TEST_COMPRESSION_NO = 0, /* Default */
+ SSL_TEST_COMPRESSION_YES
+} ssl_compression_t;
+
+typedef enum {
+ SSL_TEST_SESSION_ID_IGNORE = 0, /* Default */
+ SSL_TEST_SESSION_ID_YES,
+ SSL_TEST_SESSION_ID_NO
+} ssl_session_id_t;
+
+typedef enum {
+ SSL_TEST_METHOD_TLS = 0, /* Default */
+ SSL_TEST_METHOD_DTLS
+} ssl_test_method_t;
+
+typedef enum {
+ SSL_TEST_HANDSHAKE_SIMPLE = 0, /* Default */
+ SSL_TEST_HANDSHAKE_RESUME,
+ SSL_TEST_HANDSHAKE_RENEG_SERVER,
+ SSL_TEST_HANDSHAKE_RENEG_CLIENT,
+ SSL_TEST_HANDSHAKE_KEY_UPDATE_SERVER,
+ SSL_TEST_HANDSHAKE_KEY_UPDATE_CLIENT,
+ SSL_TEST_HANDSHAKE_POST_HANDSHAKE_AUTH
+} ssl_handshake_mode_t;
+
+typedef enum {
+ SSL_TEST_CT_VALIDATION_NONE = 0, /* Default */
+ SSL_TEST_CT_VALIDATION_PERMISSIVE,
+ SSL_TEST_CT_VALIDATION_STRICT
+} ssl_ct_validation_t;
+
+typedef enum {
+ SSL_TEST_CERT_STATUS_NONE = 0, /* Default */
+ SSL_TEST_CERT_STATUS_GOOD_RESPONSE,
+ SSL_TEST_CERT_STATUS_BAD_RESPONSE
+} ssl_cert_status_t;
+
+/*
+ * Server/client settings that aren't supported by the SSL CONF library,
+ * such as callbacks.
+ */
+typedef struct {
+ /* One of a number of predefined custom callbacks. */
+ ssl_verify_callback_t verify_callback;
+ /* One of a number of predefined server names use by the client */
+ ssl_servername_t servername;
+ /* Maximum Fragment Length extension mode */
+ int max_fragment_len_mode;
+ /* Supported NPN and ALPN protocols. A comma-separated list. */
+ char *npn_protocols;
+ char *alpn_protocols;
+ ssl_ct_validation_t ct_validation;
+ /* Ciphersuites to set on a renegotiation */
+ char *reneg_ciphers;
+ char *srp_user;
+ char *srp_password;
+ /* PHA enabled */
+ int enable_pha;
+ /* Do not send extms on renegotiation */
+ int no_extms_on_reneg;
+} SSL_TEST_CLIENT_CONF;
+
+typedef struct {
+ /* SNI callback (server-side). */
+ ssl_servername_callback_t servername_callback;
+ /* Supported NPN and ALPN protocols. A comma-separated list. */
+ char *npn_protocols;
+ char *alpn_protocols;
+ /* Whether to set a broken session ticket callback. */
+ int broken_session_ticket;
+ /* Should we send a CertStatus message? */
+ ssl_cert_status_t cert_status;
+ /* An SRP user known to the server. */
+ char *srp_user;
+ char *srp_password;
+ /* Forced PHA */
+ int force_pha;
+ char *session_ticket_app_data;
+} SSL_TEST_SERVER_CONF;
+
+typedef struct {
+ SSL_TEST_CLIENT_CONF client;
+ SSL_TEST_SERVER_CONF server;
+ SSL_TEST_SERVER_CONF server2;
+} SSL_TEST_EXTRA_CONF;
+
+typedef struct {
+ /*
+ * Global test configuration. Does not change between handshakes.
+ */
+ /* Whether the server/client CTX should use DTLS or TLS. */
+ ssl_test_method_t method;
+ /* Whether to test a resumed/renegotiated handshake. */
+ ssl_handshake_mode_t handshake_mode;
+ /*
+ * How much application data to exchange (default is 256 bytes).
+ * Both peers will send |app_data_size| bytes interleaved.
+ */
+ int app_data_size;
+ /* Maximum send fragment size. */
+ int max_fragment_size;
+ /* KeyUpdate type */
+ int key_update_type;
+
+ /*
+ * Extra server/client configurations. Per-handshake.
+ */
+ /* First handshake. */
+ SSL_TEST_EXTRA_CONF extra;
+ /* Resumed handshake. */
+ SSL_TEST_EXTRA_CONF resume_extra;
+
+ /*
+ * Test expectations. These apply to the LAST handshake.
+ */
+ /* Defaults to SUCCESS. */
+ ssl_test_result_t expected_result;
+ /* Alerts. 0 if no expectation. */
+ /* See ssl.h for alert codes. */
+ /* Alert sent by the client / received by the server. */
+ int expected_client_alert;
+ /* Alert sent by the server / received by the client. */
+ int expected_server_alert;
+ /* Negotiated protocol version. 0 if no expectation. */
+ /* See ssl.h for protocol versions. */
+ int expected_protocol;
+ /*
+ * The expected SNI context to use.
+ * We test server-side that the server switched to the expected context.
+ * Set by the callback upon success, so if the callback wasn't called or
+ * terminated with an alert, the servername will match with
+ * SSL_TEST_SERVERNAME_NONE.
+ * Note: in the event that the servername was accepted, the client should
+ * also receive an empty SNI extension back but we have no way of probing
+ * client-side via the API that this was the case.
+ */
+ ssl_servername_t expected_servername;
+ ssl_session_ticket_t session_ticket_expected;
+ int compression_expected;
+ /* The expected NPN/ALPN protocol to negotiate. */
+ char *expected_npn_protocol;
+ char *expected_alpn_protocol;
+ /* Whether the second handshake is resumed or a full handshake (boolean). */
+ int resumption_expected;
+ /* Expected temporary key type */
+ int expected_tmp_key_type;
+ /* Expected server certificate key type */
+ int expected_server_cert_type;
+ /* Expected server signing hash */
+ int expected_server_sign_hash;
+ /* Expected server signature type */
+ int expected_server_sign_type;
+ /* Expected server CA names */
+ STACK_OF(X509_NAME) *expected_server_ca_names;
+ /* Expected client certificate key type */
+ int expected_client_cert_type;
+ /* Expected client signing hash */
+ int expected_client_sign_hash;
+ /* Expected client signature type */
+ int expected_client_sign_type;
+ /* Expected CA names for client auth */
+ STACK_OF(X509_NAME) *expected_client_ca_names;
+ /* Whether to use SCTP for the transport */
+ int use_sctp;
+ /* Enable SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG on client side */
+ int enable_client_sctp_label_bug;
+ /* Enable SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG on server side */
+ int enable_server_sctp_label_bug;
+ /* Whether to expect a session id from the server */
+ ssl_session_id_t session_id_expected;
+ char *expected_cipher;
+ /* Expected Session Ticket Application Data */
+ char *expected_session_ticket_app_data;
+
+ OSSL_LIB_CTX *libctx;
+} SSL_TEST_CTX;
+
+const char *ssl_test_result_name(ssl_test_result_t result);
+const char *ssl_alert_name(int alert);
+const char *ssl_protocol_name(int protocol);
+const char *ssl_verify_callback_name(ssl_verify_callback_t verify_callback);
+const char *ssl_servername_name(ssl_servername_t server);
+const char *ssl_servername_callback_name(ssl_servername_callback_t
+ servername_callback);
+const char *ssl_session_ticket_name(ssl_session_ticket_t server);
+const char *ssl_session_id_name(ssl_session_id_t server);
+const char *ssl_test_method_name(ssl_test_method_t method);
+const char *ssl_handshake_mode_name(ssl_handshake_mode_t mode);
+const char *ssl_ct_validation_name(ssl_ct_validation_t mode);
+const char *ssl_certstatus_name(ssl_cert_status_t cert_status);
+const char *ssl_max_fragment_len_name(int MFL_mode);
+
+/*
+ * Load the test case context from |conf|.
+ * See test/README.ssltest.md for details on the conf file format.
+ */
+SSL_TEST_CTX *SSL_TEST_CTX_create(const CONF *conf, const char *test_section,
+ OSSL_LIB_CTX *libctx);
+
+SSL_TEST_CTX *SSL_TEST_CTX_new(OSSL_LIB_CTX *libctx);
+
+void SSL_TEST_CTX_free(SSL_TEST_CTX *ctx);
+
+#endif /* OSSL_TEST_SSL_TEST_CTX_H */
diff --git a/test/helpers/ssltestlib.c b/test/helpers/ssltestlib.c
new file mode 100644
index 000000000000..ef4a6177aa7d
--- /dev/null
+++ b/test/helpers/ssltestlib.c
@@ -0,0 +1,1184 @@
+/*
+ * Copyright 2016-2023 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 "internal/nelem.h"
+#include "ssltestlib.h"
+#include "../testutil.h"
+#include "e_os.h" /* for ossl_sleep() etc. */
+
+#ifdef OPENSSL_SYS_UNIX
+# include <unistd.h>
+# ifndef OPENSSL_NO_KTLS
+# include <netinet/in.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+# include <sys/socket.h>
+# include <unistd.h>
+# include <fcntl.h>
+# endif
+#endif
+
+static int tls_dump_new(BIO *bi);
+static int tls_dump_free(BIO *a);
+static int tls_dump_read(BIO *b, char *out, int outl);
+static int tls_dump_write(BIO *b, const char *in, int inl);
+static long tls_dump_ctrl(BIO *b, int cmd, long num, void *ptr);
+static int tls_dump_gets(BIO *bp, char *buf, int size);
+static int tls_dump_puts(BIO *bp, const char *str);
+
+/* Choose a sufficiently large type likely to be unused for this custom BIO */
+#define BIO_TYPE_TLS_DUMP_FILTER (0x80 | BIO_TYPE_FILTER)
+#define BIO_TYPE_MEMPACKET_TEST 0x81
+#define BIO_TYPE_ALWAYS_RETRY 0x82
+
+static BIO_METHOD *method_tls_dump = NULL;
+static BIO_METHOD *meth_mem = NULL;
+static BIO_METHOD *meth_always_retry = NULL;
+static int retry_err = -1;
+
+/* Note: Not thread safe! */
+const BIO_METHOD *bio_f_tls_dump_filter(void)
+{
+ if (method_tls_dump == NULL) {
+ method_tls_dump = BIO_meth_new(BIO_TYPE_TLS_DUMP_FILTER,
+ "TLS dump filter");
+ if ( method_tls_dump == NULL
+ || !BIO_meth_set_write(method_tls_dump, tls_dump_write)
+ || !BIO_meth_set_read(method_tls_dump, tls_dump_read)
+ || !BIO_meth_set_puts(method_tls_dump, tls_dump_puts)
+ || !BIO_meth_set_gets(method_tls_dump, tls_dump_gets)
+ || !BIO_meth_set_ctrl(method_tls_dump, tls_dump_ctrl)
+ || !BIO_meth_set_create(method_tls_dump, tls_dump_new)
+ || !BIO_meth_set_destroy(method_tls_dump, tls_dump_free))
+ return NULL;
+ }
+ return method_tls_dump;
+}
+
+void bio_f_tls_dump_filter_free(void)
+{
+ BIO_meth_free(method_tls_dump);
+}
+
+static int tls_dump_new(BIO *bio)
+{
+ BIO_set_init(bio, 1);
+ return 1;
+}
+
+static int tls_dump_free(BIO *bio)
+{
+ BIO_set_init(bio, 0);
+
+ return 1;
+}
+
+static void copy_flags(BIO *bio)
+{
+ int flags;
+ BIO *next = BIO_next(bio);
+
+ flags = BIO_test_flags(next, BIO_FLAGS_SHOULD_RETRY | BIO_FLAGS_RWS);
+ BIO_clear_flags(bio, BIO_FLAGS_SHOULD_RETRY | BIO_FLAGS_RWS);
+ BIO_set_flags(bio, flags);
+}
+
+#define RECORD_CONTENT_TYPE 0
+#define RECORD_VERSION_HI 1
+#define RECORD_VERSION_LO 2
+#define RECORD_EPOCH_HI 3
+#define RECORD_EPOCH_LO 4
+#define RECORD_SEQUENCE_START 5
+#define RECORD_SEQUENCE_END 10
+#define RECORD_LEN_HI 11
+#define RECORD_LEN_LO 12
+
+#define MSG_TYPE 0
+#define MSG_LEN_HI 1
+#define MSG_LEN_MID 2
+#define MSG_LEN_LO 3
+#define MSG_SEQ_HI 4
+#define MSG_SEQ_LO 5
+#define MSG_FRAG_OFF_HI 6
+#define MSG_FRAG_OFF_MID 7
+#define MSG_FRAG_OFF_LO 8
+#define MSG_FRAG_LEN_HI 9
+#define MSG_FRAG_LEN_MID 10
+#define MSG_FRAG_LEN_LO 11
+
+
+static void dump_data(const char *data, int len)
+{
+ int rem, i, content, reclen, msglen, fragoff, fraglen, epoch;
+ unsigned char *rec;
+
+ printf("---- START OF PACKET ----\n");
+
+ rem = len;
+ rec = (unsigned char *)data;
+
+ while (rem > 0) {
+ if (rem != len)
+ printf("*\n");
+ printf("*---- START OF RECORD ----\n");
+ if (rem < DTLS1_RT_HEADER_LENGTH) {
+ printf("*---- RECORD TRUNCATED ----\n");
+ break;
+ }
+ content = rec[RECORD_CONTENT_TYPE];
+ printf("** Record Content-type: %d\n", content);
+ printf("** Record Version: %02x%02x\n",
+ rec[RECORD_VERSION_HI], rec[RECORD_VERSION_LO]);
+ epoch = (rec[RECORD_EPOCH_HI] << 8) | rec[RECORD_EPOCH_LO];
+ printf("** Record Epoch: %d\n", epoch);
+ printf("** Record Sequence: ");
+ for (i = RECORD_SEQUENCE_START; i <= RECORD_SEQUENCE_END; i++)
+ printf("%02x", rec[i]);
+ reclen = (rec[RECORD_LEN_HI] << 8) | rec[RECORD_LEN_LO];
+ printf("\n** Record Length: %d\n", reclen);
+
+ /* Now look at message */
+ rec += DTLS1_RT_HEADER_LENGTH;
+ rem -= DTLS1_RT_HEADER_LENGTH;
+ if (content == SSL3_RT_HANDSHAKE) {
+ printf("**---- START OF HANDSHAKE MESSAGE FRAGMENT ----\n");
+ if (epoch > 0) {
+ printf("**---- HANDSHAKE MESSAGE FRAGMENT ENCRYPTED ----\n");
+ } else if (rem < DTLS1_HM_HEADER_LENGTH
+ || reclen < DTLS1_HM_HEADER_LENGTH) {
+ printf("**---- HANDSHAKE MESSAGE FRAGMENT TRUNCATED ----\n");
+ } else {
+ printf("*** Message Type: %d\n", rec[MSG_TYPE]);
+ msglen = (rec[MSG_LEN_HI] << 16) | (rec[MSG_LEN_MID] << 8)
+ | rec[MSG_LEN_LO];
+ printf("*** Message Length: %d\n", msglen);
+ printf("*** Message sequence: %d\n",
+ (rec[MSG_SEQ_HI] << 8) | rec[MSG_SEQ_LO]);
+ fragoff = (rec[MSG_FRAG_OFF_HI] << 16)
+ | (rec[MSG_FRAG_OFF_MID] << 8)
+ | rec[MSG_FRAG_OFF_LO];
+ printf("*** Message Fragment offset: %d\n", fragoff);
+ fraglen = (rec[MSG_FRAG_LEN_HI] << 16)
+ | (rec[MSG_FRAG_LEN_MID] << 8)
+ | rec[MSG_FRAG_LEN_LO];
+ printf("*** Message Fragment len: %d\n", fraglen);
+ if (fragoff + fraglen > msglen)
+ printf("***---- HANDSHAKE MESSAGE FRAGMENT INVALID ----\n");
+ else if (reclen < fraglen)
+ printf("**---- HANDSHAKE MESSAGE FRAGMENT TRUNCATED ----\n");
+ else
+ printf("**---- END OF HANDSHAKE MESSAGE FRAGMENT ----\n");
+ }
+ }
+ if (rem < reclen) {
+ printf("*---- RECORD TRUNCATED ----\n");
+ rem = 0;
+ } else {
+ rec += reclen;
+ rem -= reclen;
+ printf("*---- END OF RECORD ----\n");
+ }
+ }
+ printf("---- END OF PACKET ----\n\n");
+ fflush(stdout);
+}
+
+static int tls_dump_read(BIO *bio, char *out, int outl)
+{
+ int ret;
+ BIO *next = BIO_next(bio);
+
+ ret = BIO_read(next, out, outl);
+ copy_flags(bio);
+
+ if (ret > 0) {
+ dump_data(out, ret);
+ }
+
+ return ret;
+}
+
+static int tls_dump_write(BIO *bio, const char *in, int inl)
+{
+ int ret;
+ BIO *next = BIO_next(bio);
+
+ ret = BIO_write(next, in, inl);
+ copy_flags(bio);
+
+ return ret;
+}
+
+static long tls_dump_ctrl(BIO *bio, int cmd, long num, void *ptr)
+{
+ long ret;
+ BIO *next = BIO_next(bio);
+
+ if (next == NULL)
+ return 0;
+
+ switch (cmd) {
+ case BIO_CTRL_DUP:
+ ret = 0L;
+ break;
+ default:
+ ret = BIO_ctrl(next, cmd, num, ptr);
+ break;
+ }
+ return ret;
+}
+
+static int tls_dump_gets(BIO *bio, char *buf, int size)
+{
+ /* We don't support this - not needed anyway */
+ return -1;
+}
+
+static int tls_dump_puts(BIO *bio, const char *str)
+{
+ return tls_dump_write(bio, str, strlen(str));
+}
+
+
+struct mempacket_st {
+ unsigned char *data;
+ int len;
+ unsigned int num;
+ unsigned int type;
+};
+
+static void mempacket_free(MEMPACKET *pkt)
+{
+ if (pkt->data != NULL)
+ OPENSSL_free(pkt->data);
+ OPENSSL_free(pkt);
+}
+
+typedef struct mempacket_test_ctx_st {
+ STACK_OF(MEMPACKET) *pkts;
+ unsigned int epoch;
+ unsigned int currrec;
+ unsigned int currpkt;
+ unsigned int lastpkt;
+ unsigned int injected;
+ unsigned int noinject;
+ unsigned int dropepoch;
+ int droprec;
+ int duprec;
+} MEMPACKET_TEST_CTX;
+
+static int mempacket_test_new(BIO *bi);
+static int mempacket_test_free(BIO *a);
+static int mempacket_test_read(BIO *b, char *out, int outl);
+static int mempacket_test_write(BIO *b, const char *in, int inl);
+static long mempacket_test_ctrl(BIO *b, int cmd, long num, void *ptr);
+static int mempacket_test_gets(BIO *bp, char *buf, int size);
+static int mempacket_test_puts(BIO *bp, const char *str);
+
+const BIO_METHOD *bio_s_mempacket_test(void)
+{
+ if (meth_mem == NULL) {
+ if (!TEST_ptr(meth_mem = BIO_meth_new(BIO_TYPE_MEMPACKET_TEST,
+ "Mem Packet Test"))
+ || !TEST_true(BIO_meth_set_write(meth_mem, mempacket_test_write))
+ || !TEST_true(BIO_meth_set_read(meth_mem, mempacket_test_read))
+ || !TEST_true(BIO_meth_set_puts(meth_mem, mempacket_test_puts))
+ || !TEST_true(BIO_meth_set_gets(meth_mem, mempacket_test_gets))
+ || !TEST_true(BIO_meth_set_ctrl(meth_mem, mempacket_test_ctrl))
+ || !TEST_true(BIO_meth_set_create(meth_mem, mempacket_test_new))
+ || !TEST_true(BIO_meth_set_destroy(meth_mem, mempacket_test_free)))
+ return NULL;
+ }
+ return meth_mem;
+}
+
+void bio_s_mempacket_test_free(void)
+{
+ BIO_meth_free(meth_mem);
+}
+
+static int mempacket_test_new(BIO *bio)
+{
+ MEMPACKET_TEST_CTX *ctx;
+
+ if (!TEST_ptr(ctx = OPENSSL_zalloc(sizeof(*ctx))))
+ return 0;
+ if (!TEST_ptr(ctx->pkts = sk_MEMPACKET_new_null())) {
+ OPENSSL_free(ctx);
+ return 0;
+ }
+ ctx->dropepoch = 0;
+ ctx->droprec = -1;
+ BIO_set_init(bio, 1);
+ BIO_set_data(bio, ctx);
+ return 1;
+}
+
+static int mempacket_test_free(BIO *bio)
+{
+ MEMPACKET_TEST_CTX *ctx = BIO_get_data(bio);
+
+ sk_MEMPACKET_pop_free(ctx->pkts, mempacket_free);
+ OPENSSL_free(ctx);
+ BIO_set_data(bio, NULL);
+ BIO_set_init(bio, 0);
+ return 1;
+}
+
+/* Record Header values */
+#define EPOCH_HI 3
+#define EPOCH_LO 4
+#define RECORD_SEQUENCE 10
+#define RECORD_LEN_HI 11
+#define RECORD_LEN_LO 12
+
+#define STANDARD_PACKET 0
+
+static int mempacket_test_read(BIO *bio, char *out, int outl)
+{
+ MEMPACKET_TEST_CTX *ctx = BIO_get_data(bio);
+ MEMPACKET *thispkt;
+ unsigned char *rec;
+ int rem;
+ unsigned int seq, offset, len, epoch;
+
+ BIO_clear_retry_flags(bio);
+ if ((thispkt = sk_MEMPACKET_value(ctx->pkts, 0)) == NULL
+ || thispkt->num != ctx->currpkt) {
+ /* Probably run out of data */
+ BIO_set_retry_read(bio);
+ return -1;
+ }
+ (void)sk_MEMPACKET_shift(ctx->pkts);
+ ctx->currpkt++;
+
+ if (outl > thispkt->len)
+ outl = thispkt->len;
+
+ if (thispkt->type != INJECT_PACKET_IGNORE_REC_SEQ
+ && (ctx->injected || ctx->droprec >= 0)) {
+ /*
+ * Overwrite the record sequence number. We strictly number them in
+ * the order received. Since we are actually a reliable transport
+ * we know that there won't be any re-ordering. We overwrite to deal
+ * with any packets that have been injected
+ */
+ for (rem = thispkt->len, rec = thispkt->data; rem > 0; rem -= len) {
+ if (rem < DTLS1_RT_HEADER_LENGTH)
+ return -1;
+ epoch = (rec[EPOCH_HI] << 8) | rec[EPOCH_LO];
+ if (epoch != ctx->epoch) {
+ ctx->epoch = epoch;
+ ctx->currrec = 0;
+ }
+ seq = ctx->currrec;
+ offset = 0;
+ do {
+ rec[RECORD_SEQUENCE - offset] = seq & 0xFF;
+ seq >>= 8;
+ offset++;
+ } while (seq > 0);
+
+ len = ((rec[RECORD_LEN_HI] << 8) | rec[RECORD_LEN_LO])
+ + DTLS1_RT_HEADER_LENGTH;
+ if (rem < (int)len)
+ return -1;
+ if (ctx->droprec == (int)ctx->currrec && ctx->dropepoch == epoch) {
+ if (rem > (int)len)
+ memmove(rec, rec + len, rem - len);
+ outl -= len;
+ ctx->droprec = -1;
+ if (outl == 0)
+ BIO_set_retry_read(bio);
+ } else {
+ rec += len;
+ }
+
+ ctx->currrec++;
+ }
+ }
+
+ memcpy(out, thispkt->data, outl);
+ mempacket_free(thispkt);
+ return outl;
+}
+
+/*
+ * Look for records from different epochs in the last datagram and swap them
+ * around
+ */
+int mempacket_swap_epoch(BIO *bio)
+{
+ MEMPACKET_TEST_CTX *ctx = BIO_get_data(bio);
+ MEMPACKET *thispkt;
+ int rem, len, prevlen = 0, pktnum;
+ unsigned char *rec, *prevrec = NULL, *tmp;
+ unsigned int epoch;
+ int numpkts = sk_MEMPACKET_num(ctx->pkts);
+
+ if (numpkts <= 0)
+ return 0;
+
+ /*
+ * If there are multiple packets we only look in the last one. This should
+ * always be the one where any epoch change occurs.
+ */
+ thispkt = sk_MEMPACKET_value(ctx->pkts, numpkts - 1);
+ if (thispkt == NULL)
+ return 0;
+
+ for (rem = thispkt->len, rec = thispkt->data; rem > 0; rem -= len, rec += len) {
+ if (rem < DTLS1_RT_HEADER_LENGTH)
+ return 0;
+ epoch = (rec[EPOCH_HI] << 8) | rec[EPOCH_LO];
+ len = ((rec[RECORD_LEN_HI] << 8) | rec[RECORD_LEN_LO])
+ + DTLS1_RT_HEADER_LENGTH;
+ if (rem < len)
+ return 0;
+
+ /* Assumes the epoch change does not happen on the first record */
+ if (epoch != ctx->epoch) {
+ if (prevrec == NULL)
+ return 0;
+
+ /*
+ * We found 2 records with different epochs. Take a copy of the
+ * earlier record
+ */
+ tmp = OPENSSL_malloc(prevlen);
+ if (tmp == NULL)
+ return 0;
+
+ memcpy(tmp, prevrec, prevlen);
+ /*
+ * Move everything from this record onwards, including any trailing
+ * records, and overwrite the earlier record
+ */
+ memmove(prevrec, rec, rem);
+ thispkt->len -= prevlen;
+ pktnum = thispkt->num;
+
+ /*
+ * Create a new packet for the earlier record that we took out and
+ * add it to the end of the packet list.
+ */
+ thispkt = OPENSSL_malloc(sizeof(*thispkt));
+ if (thispkt == NULL) {
+ OPENSSL_free(tmp);
+ return 0;
+ }
+ thispkt->type = INJECT_PACKET;
+ thispkt->data = tmp;
+ thispkt->len = prevlen;
+ thispkt->num = pktnum + 1;
+ if (sk_MEMPACKET_insert(ctx->pkts, thispkt, numpkts) <= 0) {
+ OPENSSL_free(tmp);
+ OPENSSL_free(thispkt);
+ return 0;
+ }
+
+ return 1;
+ }
+ prevrec = rec;
+ prevlen = len;
+ }
+
+ return 0;
+}
+
+/* Move packet from position s to position d in the list (d < s) */
+int mempacket_move_packet(BIO *bio, int d, int s)
+{
+ MEMPACKET_TEST_CTX *ctx = BIO_get_data(bio);
+ MEMPACKET *thispkt;
+ int numpkts = sk_MEMPACKET_num(ctx->pkts);
+ int i;
+
+ if (d >= s)
+ return 0;
+
+ /* We need at least s + 1 packets to be able to swap them */
+ if (numpkts <= s)
+ return 0;
+
+ /* Get the packet at position s */
+ thispkt = sk_MEMPACKET_value(ctx->pkts, s);
+ if (thispkt == NULL)
+ return 0;
+
+ /* Remove and re-add it */
+ if (sk_MEMPACKET_delete(ctx->pkts, s) != thispkt)
+ return 0;
+
+ thispkt->num -= (s - d);
+ if (sk_MEMPACKET_insert(ctx->pkts, thispkt, d) <= 0)
+ return 0;
+
+ /* Increment the packet numbers for moved packets */
+ for (i = d + 1; i <= s; i++) {
+ thispkt = sk_MEMPACKET_value(ctx->pkts, i);
+ thispkt->num++;
+ }
+ return 1;
+}
+
+int mempacket_test_inject(BIO *bio, const char *in, int inl, int pktnum,
+ int type)
+{
+ MEMPACKET_TEST_CTX *ctx = BIO_get_data(bio);
+ MEMPACKET *thispkt = NULL, *looppkt, *nextpkt, *allpkts[3];
+ int i, duprec;
+ const unsigned char *inu = (const unsigned char *)in;
+ size_t len = ((inu[RECORD_LEN_HI] << 8) | inu[RECORD_LEN_LO])
+ + DTLS1_RT_HEADER_LENGTH;
+
+ if (ctx == NULL)
+ return -1;
+
+ if ((size_t)inl < len)
+ return -1;
+
+ if ((size_t)inl == len)
+ duprec = 0;
+ else
+ duprec = ctx->duprec > 0;
+
+ /* We don't support arbitrary injection when duplicating records */
+ if (duprec && pktnum != -1)
+ return -1;
+
+ /* We only allow injection before we've started writing any data */
+ if (pktnum >= 0) {
+ if (ctx->noinject)
+ return -1;
+ ctx->injected = 1;
+ } else {
+ ctx->noinject = 1;
+ }
+
+ for (i = 0; i < (duprec ? 3 : 1); i++) {
+ if (!TEST_ptr(allpkts[i] = OPENSSL_malloc(sizeof(*thispkt))))
+ goto err;
+ thispkt = allpkts[i];
+
+ if (!TEST_ptr(thispkt->data = OPENSSL_malloc(inl)))
+ goto err;
+ /*
+ * If we are duplicating the packet, we duplicate it three times. The
+ * first two times we drop the first record if there are more than one.
+ * In this way we know that libssl will not be able to make progress
+ * until it receives the last packet, and hence will be forced to
+ * buffer these records.
+ */
+ if (duprec && i != 2) {
+ memcpy(thispkt->data, in + len, inl - len);
+ thispkt->len = inl - len;
+ } else {
+ memcpy(thispkt->data, in, inl);
+ thispkt->len = inl;
+ }
+ thispkt->num = (pktnum >= 0) ? (unsigned int)pktnum : ctx->lastpkt + i;
+ thispkt->type = type;
+ }
+
+ for (i = 0; i < sk_MEMPACKET_num(ctx->pkts); i++) {
+ if (!TEST_ptr(looppkt = sk_MEMPACKET_value(ctx->pkts, i)))
+ goto err;
+ /* Check if we found the right place to insert this packet */
+ if (looppkt->num > thispkt->num) {
+ if (sk_MEMPACKET_insert(ctx->pkts, thispkt, i) == 0)
+ goto err;
+ /* If we're doing up front injection then we're done */
+ if (pktnum >= 0)
+ return inl;
+ /*
+ * We need to do some accounting on lastpkt. We increment it first,
+ * but it might now equal the value of injected packets, so we need
+ * to skip over those
+ */
+ ctx->lastpkt++;
+ do {
+ i++;
+ nextpkt = sk_MEMPACKET_value(ctx->pkts, i);
+ if (nextpkt != NULL && nextpkt->num == ctx->lastpkt)
+ ctx->lastpkt++;
+ else
+ return inl;
+ } while(1);
+ } else if (looppkt->num == thispkt->num) {
+ if (!ctx->noinject) {
+ /* We injected two packets with the same packet number! */
+ goto err;
+ }
+ ctx->lastpkt++;
+ thispkt->num++;
+ }
+ }
+ /*
+ * We didn't find any packets with a packet number equal to or greater than
+ * this one, so we just add it onto the end
+ */
+ for (i = 0; i < (duprec ? 3 : 1); i++) {
+ thispkt = allpkts[i];
+ if (!sk_MEMPACKET_push(ctx->pkts, thispkt))
+ goto err;
+
+ if (pktnum < 0)
+ ctx->lastpkt++;
+ }
+
+ return inl;
+
+ err:
+ for (i = 0; i < (ctx->duprec > 0 ? 3 : 1); i++)
+ mempacket_free(allpkts[i]);
+ return -1;
+}
+
+static int mempacket_test_write(BIO *bio, const char *in, int inl)
+{
+ return mempacket_test_inject(bio, in, inl, -1, STANDARD_PACKET);
+}
+
+static long mempacket_test_ctrl(BIO *bio, int cmd, long num, void *ptr)
+{
+ long ret = 1;
+ MEMPACKET_TEST_CTX *ctx = BIO_get_data(bio);
+ MEMPACKET *thispkt;
+
+ switch (cmd) {
+ case BIO_CTRL_EOF:
+ ret = (long)(sk_MEMPACKET_num(ctx->pkts) == 0);
+ break;
+ case BIO_CTRL_GET_CLOSE:
+ ret = BIO_get_shutdown(bio);
+ break;
+ case BIO_CTRL_SET_CLOSE:
+ BIO_set_shutdown(bio, (int)num);
+ break;
+ case BIO_CTRL_WPENDING:
+ ret = 0L;
+ break;
+ case BIO_CTRL_PENDING:
+ thispkt = sk_MEMPACKET_value(ctx->pkts, 0);
+ if (thispkt == NULL)
+ ret = 0;
+ else
+ ret = thispkt->len;
+ break;
+ case BIO_CTRL_FLUSH:
+ ret = 1;
+ break;
+ case MEMPACKET_CTRL_SET_DROP_EPOCH:
+ ctx->dropepoch = (unsigned int)num;
+ break;
+ case MEMPACKET_CTRL_SET_DROP_REC:
+ ctx->droprec = (int)num;
+ break;
+ case MEMPACKET_CTRL_GET_DROP_REC:
+ ret = ctx->droprec;
+ break;
+ case MEMPACKET_CTRL_SET_DUPLICATE_REC:
+ ctx->duprec = (int)num;
+ break;
+ case BIO_CTRL_RESET:
+ case BIO_CTRL_DUP:
+ case BIO_CTRL_PUSH:
+ case BIO_CTRL_POP:
+ default:
+ ret = 0;
+ break;
+ }
+ return ret;
+}
+
+static int mempacket_test_gets(BIO *bio, char *buf, int size)
+{
+ /* We don't support this - not needed anyway */
+ return -1;
+}
+
+static int mempacket_test_puts(BIO *bio, const char *str)
+{
+ return mempacket_test_write(bio, str, strlen(str));
+}
+
+static int always_retry_new(BIO *bi);
+static int always_retry_free(BIO *a);
+static int always_retry_read(BIO *b, char *out, int outl);
+static int always_retry_write(BIO *b, const char *in, int inl);
+static long always_retry_ctrl(BIO *b, int cmd, long num, void *ptr);
+static int always_retry_gets(BIO *bp, char *buf, int size);
+static int always_retry_puts(BIO *bp, const char *str);
+
+const BIO_METHOD *bio_s_always_retry(void)
+{
+ if (meth_always_retry == NULL) {
+ if (!TEST_ptr(meth_always_retry = BIO_meth_new(BIO_TYPE_ALWAYS_RETRY,
+ "Always Retry"))
+ || !TEST_true(BIO_meth_set_write(meth_always_retry,
+ always_retry_write))
+ || !TEST_true(BIO_meth_set_read(meth_always_retry,
+ always_retry_read))
+ || !TEST_true(BIO_meth_set_puts(meth_always_retry,
+ always_retry_puts))
+ || !TEST_true(BIO_meth_set_gets(meth_always_retry,
+ always_retry_gets))
+ || !TEST_true(BIO_meth_set_ctrl(meth_always_retry,
+ always_retry_ctrl))
+ || !TEST_true(BIO_meth_set_create(meth_always_retry,
+ always_retry_new))
+ || !TEST_true(BIO_meth_set_destroy(meth_always_retry,
+ always_retry_free)))
+ return NULL;
+ }
+ return meth_always_retry;
+}
+
+void bio_s_always_retry_free(void)
+{
+ BIO_meth_free(meth_always_retry);
+}
+
+static int always_retry_new(BIO *bio)
+{
+ BIO_set_init(bio, 1);
+ return 1;
+}
+
+static int always_retry_free(BIO *bio)
+{
+ BIO_set_data(bio, NULL);
+ BIO_set_init(bio, 0);
+ return 1;
+}
+
+void set_always_retry_err_val(int err)
+{
+ retry_err = err;
+}
+
+static int always_retry_read(BIO *bio, char *out, int outl)
+{
+ BIO_set_retry_read(bio);
+ return retry_err;
+}
+
+static int always_retry_write(BIO *bio, const char *in, int inl)
+{
+ BIO_set_retry_write(bio);
+ return retry_err;
+}
+
+static long always_retry_ctrl(BIO *bio, int cmd, long num, void *ptr)
+{
+ long ret = 1;
+
+ switch (cmd) {
+ case BIO_CTRL_FLUSH:
+ BIO_set_retry_write(bio);
+ /* fall through */
+ case BIO_CTRL_EOF:
+ case BIO_CTRL_RESET:
+ case BIO_CTRL_DUP:
+ case BIO_CTRL_PUSH:
+ case BIO_CTRL_POP:
+ default:
+ ret = 0;
+ break;
+ }
+ return ret;
+}
+
+static int always_retry_gets(BIO *bio, char *buf, int size)
+{
+ BIO_set_retry_read(bio);
+ return retry_err;
+}
+
+static int always_retry_puts(BIO *bio, const char *str)
+{
+ BIO_set_retry_write(bio);
+ return retry_err;
+}
+
+int create_ssl_ctx_pair(OSSL_LIB_CTX *libctx, const SSL_METHOD *sm,
+ const SSL_METHOD *cm, int min_proto_version,
+ int max_proto_version, SSL_CTX **sctx, SSL_CTX **cctx,
+ char *certfile, char *privkeyfile)
+{
+ SSL_CTX *serverctx = NULL;
+ SSL_CTX *clientctx = NULL;
+
+ if (sctx != NULL) {
+ if (*sctx != NULL)
+ serverctx = *sctx;
+ else if (!TEST_ptr(serverctx = SSL_CTX_new_ex(libctx, NULL, sm))
+ || !TEST_true(SSL_CTX_set_options(serverctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
+ goto err;
+ }
+
+ if (cctx != NULL) {
+ if (*cctx != NULL)
+ clientctx = *cctx;
+ else if (!TEST_ptr(clientctx = SSL_CTX_new_ex(libctx, NULL, cm)))
+ goto err;
+ }
+
+#if !defined(OPENSSL_NO_TLS1_3) \
+ && defined(OPENSSL_NO_EC) \
+ && defined(OPENSSL_NO_DH)
+ /*
+ * There are no usable built-in TLSv1.3 groups if ec and dh are both
+ * disabled
+ */
+ if (max_proto_version == 0
+ && (sm == TLS_server_method() || cm == TLS_client_method()))
+ max_proto_version = TLS1_2_VERSION;
+#endif
+
+ if (serverctx != NULL
+ && ((min_proto_version > 0
+ && !TEST_true(SSL_CTX_set_min_proto_version(serverctx,
+ min_proto_version)))
+ || (max_proto_version > 0
+ && !TEST_true(SSL_CTX_set_max_proto_version(serverctx,
+ max_proto_version)))))
+ goto err;
+ if (clientctx != NULL
+ && ((min_proto_version > 0
+ && !TEST_true(SSL_CTX_set_min_proto_version(clientctx,
+ min_proto_version)))
+ || (max_proto_version > 0
+ && !TEST_true(SSL_CTX_set_max_proto_version(clientctx,
+ max_proto_version)))))
+ goto err;
+
+ if (serverctx != NULL && certfile != NULL && privkeyfile != NULL) {
+ if (!TEST_int_eq(SSL_CTX_use_certificate_file(serverctx, certfile,
+ SSL_FILETYPE_PEM), 1)
+ || !TEST_int_eq(SSL_CTX_use_PrivateKey_file(serverctx,
+ privkeyfile,
+ SSL_FILETYPE_PEM), 1)
+ || !TEST_int_eq(SSL_CTX_check_private_key(serverctx), 1))
+ goto err;
+ }
+
+ if (sctx != NULL)
+ *sctx = serverctx;
+ if (cctx != NULL)
+ *cctx = clientctx;
+ return 1;
+
+ err:
+ if (sctx != NULL && *sctx == NULL)
+ SSL_CTX_free(serverctx);
+ if (cctx != NULL && *cctx == NULL)
+ SSL_CTX_free(clientctx);
+ return 0;
+}
+
+#define MAXLOOPS 1000000
+
+#if !defined(OPENSSL_NO_KTLS) && !defined(OPENSSL_NO_SOCK)
+static int set_nb(int fd)
+{
+ int flags;
+
+ flags = fcntl(fd,F_GETFL,0);
+ if (flags == -1)
+ return flags;
+ flags = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+ return flags;
+}
+
+int create_test_sockets(int *cfdp, int *sfdp)
+{
+ struct sockaddr_in sin;
+ const char *host = "127.0.0.1";
+ int cfd_connected = 0, ret = 0;
+ socklen_t slen = sizeof(sin);
+ int afd = -1, cfd = -1, sfd = -1;
+
+ memset ((char *) &sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = inet_addr(host);
+
+ afd = socket(AF_INET, SOCK_STREAM, 0);
+ if (afd < 0)
+ return 0;
+
+ if (bind(afd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
+ goto out;
+
+ if (getsockname(afd, (struct sockaddr*)&sin, &slen) < 0)
+ goto out;
+
+ if (listen(afd, 1) < 0)
+ goto out;
+
+ cfd = socket(AF_INET, SOCK_STREAM, 0);
+ if (cfd < 0)
+ goto out;
+
+ if (set_nb(afd) == -1)
+ goto out;
+
+ while (sfd == -1 || !cfd_connected ) {
+ sfd = accept(afd, NULL, 0);
+ if (sfd == -1 && errno != EAGAIN)
+ goto out;
+
+ if (!cfd_connected && connect(cfd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
+ goto out;
+ else
+ cfd_connected = 1;
+ }
+
+ if (set_nb(cfd) == -1 || set_nb(sfd) == -1)
+ goto out;
+ ret = 1;
+ *cfdp = cfd;
+ *sfdp = sfd;
+ goto success;
+
+out:
+ if (cfd != -1)
+ close(cfd);
+ if (sfd != -1)
+ close(sfd);
+success:
+ if (afd != -1)
+ close(afd);
+ return ret;
+}
+
+int create_ssl_objects2(SSL_CTX *serverctx, SSL_CTX *clientctx, SSL **sssl,
+ SSL **cssl, int sfd, int cfd)
+{
+ SSL *serverssl = NULL, *clientssl = NULL;
+ BIO *s_to_c_bio = NULL, *c_to_s_bio = NULL;
+
+ if (*sssl != NULL)
+ serverssl = *sssl;
+ else if (!TEST_ptr(serverssl = SSL_new(serverctx)))
+ goto error;
+ if (*cssl != NULL)
+ clientssl = *cssl;
+ else if (!TEST_ptr(clientssl = SSL_new(clientctx)))
+ goto error;
+
+ if (!TEST_ptr(s_to_c_bio = BIO_new_socket(sfd, BIO_NOCLOSE))
+ || !TEST_ptr(c_to_s_bio = BIO_new_socket(cfd, BIO_NOCLOSE)))
+ goto error;
+
+ SSL_set_bio(clientssl, c_to_s_bio, c_to_s_bio);
+ SSL_set_bio(serverssl, s_to_c_bio, s_to_c_bio);
+ *sssl = serverssl;
+ *cssl = clientssl;
+ return 1;
+
+ error:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ BIO_free(s_to_c_bio);
+ BIO_free(c_to_s_bio);
+ return 0;
+}
+#endif
+
+/*
+ * NOTE: Transfers control of the BIOs - this function will free them on error
+ */
+int create_ssl_objects(SSL_CTX *serverctx, SSL_CTX *clientctx, SSL **sssl,
+ SSL **cssl, BIO *s_to_c_fbio, BIO *c_to_s_fbio)
+{
+ SSL *serverssl = NULL, *clientssl = NULL;
+ BIO *s_to_c_bio = NULL, *c_to_s_bio = NULL;
+
+ if (*sssl != NULL)
+ serverssl = *sssl;
+ else if (!TEST_ptr(serverssl = SSL_new(serverctx)))
+ goto error;
+ if (*cssl != NULL)
+ clientssl = *cssl;
+ else if (!TEST_ptr(clientssl = SSL_new(clientctx)))
+ goto error;
+
+ if (SSL_is_dtls(clientssl)) {
+ if (!TEST_ptr(s_to_c_bio = BIO_new(bio_s_mempacket_test()))
+ || !TEST_ptr(c_to_s_bio = BIO_new(bio_s_mempacket_test())))
+ goto error;
+ } else {
+ if (!TEST_ptr(s_to_c_bio = BIO_new(BIO_s_mem()))
+ || !TEST_ptr(c_to_s_bio = BIO_new(BIO_s_mem())))
+ goto error;
+ }
+
+ if (s_to_c_fbio != NULL
+ && !TEST_ptr(s_to_c_bio = BIO_push(s_to_c_fbio, s_to_c_bio)))
+ goto error;
+ if (c_to_s_fbio != NULL
+ && !TEST_ptr(c_to_s_bio = BIO_push(c_to_s_fbio, c_to_s_bio)))
+ goto error;
+
+ /* Set Non-blocking IO behaviour */
+ BIO_set_mem_eof_return(s_to_c_bio, -1);
+ BIO_set_mem_eof_return(c_to_s_bio, -1);
+
+ /* Up ref these as we are passing them to two SSL objects */
+ SSL_set_bio(serverssl, c_to_s_bio, s_to_c_bio);
+ BIO_up_ref(s_to_c_bio);
+ BIO_up_ref(c_to_s_bio);
+ SSL_set_bio(clientssl, s_to_c_bio, c_to_s_bio);
+ *sssl = serverssl;
+ *cssl = clientssl;
+ return 1;
+
+ error:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ BIO_free(s_to_c_bio);
+ BIO_free(c_to_s_bio);
+ BIO_free(s_to_c_fbio);
+ BIO_free(c_to_s_fbio);
+
+ return 0;
+}
+
+/*
+ * Create an SSL connection, but does not read any post-handshake
+ * NewSessionTicket messages.
+ * If |read| is set and we're using DTLS then we will attempt to SSL_read on
+ * the connection once we've completed one half of it, to ensure any retransmits
+ * get triggered.
+ * We stop the connection attempt (and return a failure value) if either peer
+ * has SSL_get_error() return the value in the |want| parameter. The connection
+ * attempt could be restarted by a subsequent call to this function.
+ */
+int create_bare_ssl_connection(SSL *serverssl, SSL *clientssl, int want,
+ int read)
+{
+ int retc = -1, rets = -1, err, abortctr = 0;
+ int clienterr = 0, servererr = 0;
+ int isdtls = SSL_is_dtls(serverssl);
+
+ do {
+ err = SSL_ERROR_WANT_WRITE;
+ while (!clienterr && retc <= 0 && err == SSL_ERROR_WANT_WRITE) {
+ retc = SSL_connect(clientssl);
+ if (retc <= 0)
+ err = SSL_get_error(clientssl, retc);
+ }
+
+ if (!clienterr && retc <= 0 && err != SSL_ERROR_WANT_READ) {
+ TEST_info("SSL_connect() failed %d, %d", retc, err);
+ if (want != SSL_ERROR_SSL)
+ TEST_openssl_errors();
+ clienterr = 1;
+ }
+ if (want != SSL_ERROR_NONE && err == want)
+ return 0;
+
+ err = SSL_ERROR_WANT_WRITE;
+ while (!servererr && rets <= 0 && err == SSL_ERROR_WANT_WRITE) {
+ rets = SSL_accept(serverssl);
+ if (rets <= 0)
+ err = SSL_get_error(serverssl, rets);
+ }
+
+ if (!servererr && rets <= 0
+ && err != SSL_ERROR_WANT_READ
+ && err != SSL_ERROR_WANT_X509_LOOKUP) {
+ TEST_info("SSL_accept() failed %d, %d", rets, err);
+ if (want != SSL_ERROR_SSL)
+ TEST_openssl_errors();
+ servererr = 1;
+ }
+ if (want != SSL_ERROR_NONE && err == want)
+ return 0;
+ if (clienterr && servererr)
+ return 0;
+ if (isdtls && read) {
+ unsigned char buf[20];
+
+ /* Trigger any retransmits that may be appropriate */
+ if (rets > 0 && retc <= 0) {
+ if (SSL_read(serverssl, buf, sizeof(buf)) > 0) {
+ /* We don't expect this to succeed! */
+ TEST_info("Unexpected SSL_read() success!");
+ return 0;
+ }
+ }
+ if (retc > 0 && rets <= 0) {
+ if (SSL_read(clientssl, buf, sizeof(buf)) > 0) {
+ /* We don't expect this to succeed! */
+ TEST_info("Unexpected SSL_read() success!");
+ return 0;
+ }
+ }
+ }
+ if (++abortctr == MAXLOOPS) {
+ TEST_info("No progress made");
+ return 0;
+ }
+ if (isdtls && abortctr <= 50 && (abortctr % 10) == 0) {
+ /*
+ * It looks like we're just spinning. Pause for a short period to
+ * give the DTLS timer a chance to do something. We only do this for
+ * the first few times to prevent hangs.
+ */
+ ossl_sleep(50);
+ }
+ } while (retc <=0 || rets <= 0);
+
+ return 1;
+}
+
+/*
+ * Create an SSL connection including any post handshake NewSessionTicket
+ * messages.
+ */
+int create_ssl_connection(SSL *serverssl, SSL *clientssl, int want)
+{
+ int i;
+ unsigned char buf;
+ size_t readbytes;
+
+ if (!create_bare_ssl_connection(serverssl, clientssl, want, 1))
+ return 0;
+
+ /*
+ * We attempt to read some data on the client side which we expect to fail.
+ * This will ensure we have received the NewSessionTicket in TLSv1.3 where
+ * appropriate. We do this twice because there are 2 NewSessionTickets.
+ */
+ for (i = 0; i < 2; i++) {
+ if (SSL_read_ex(clientssl, &buf, sizeof(buf), &readbytes) > 0) {
+ if (!TEST_ulong_eq(readbytes, 0))
+ return 0;
+ } else if (!TEST_int_eq(SSL_get_error(clientssl, 0),
+ SSL_ERROR_WANT_READ)) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+void shutdown_ssl_connection(SSL *serverssl, SSL *clientssl)
+{
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+}
diff --git a/test/helpers/ssltestlib.h b/test/helpers/ssltestlib.h
new file mode 100644
index 000000000000..8e9daa5601d3
--- /dev/null
+++ b/test/helpers/ssltestlib.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2016-2023 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_TEST_SSLTESTLIB_H
+# define OSSL_TEST_SSLTESTLIB_H
+
+# include <openssl/ssl.h>
+
+int create_ssl_ctx_pair(OSSL_LIB_CTX *libctx, const SSL_METHOD *sm,
+ const SSL_METHOD *cm, int min_proto_version,
+ int max_proto_version, SSL_CTX **sctx, SSL_CTX **cctx,
+ char *certfile, char *privkeyfile);
+int create_ssl_objects(SSL_CTX *serverctx, SSL_CTX *clientctx, SSL **sssl,
+ SSL **cssl, BIO *s_to_c_fbio, BIO *c_to_s_fbio);
+int create_bare_ssl_connection(SSL *serverssl, SSL *clientssl, int want,
+ int read);
+int create_ssl_objects2(SSL_CTX *serverctx, SSL_CTX *clientctx, SSL **sssl,
+ SSL **cssl, int sfd, int cfd);
+int create_test_sockets(int *cfd, int *sfd);
+int create_ssl_connection(SSL *serverssl, SSL *clientssl, int want);
+void shutdown_ssl_connection(SSL *serverssl, SSL *clientssl);
+
+/* Note: Not thread safe! */
+const BIO_METHOD *bio_f_tls_dump_filter(void);
+void bio_f_tls_dump_filter_free(void);
+
+const BIO_METHOD *bio_s_mempacket_test(void);
+void bio_s_mempacket_test_free(void);
+
+const BIO_METHOD *bio_s_always_retry(void);
+void bio_s_always_retry_free(void);
+void set_always_retry_err_val(int err);
+
+/* Packet types - value 0 is reserved */
+#define INJECT_PACKET 1
+#define INJECT_PACKET_IGNORE_REC_SEQ 2
+
+/*
+ * Mempacket BIO ctrls. We make them large enough to not clash with standard BIO
+ * ctrl codes.
+ */
+#define MEMPACKET_CTRL_SET_DROP_EPOCH (1 << 15)
+#define MEMPACKET_CTRL_SET_DROP_REC (2 << 15)
+#define MEMPACKET_CTRL_GET_DROP_REC (3 << 15)
+#define MEMPACKET_CTRL_SET_DUPLICATE_REC (4 << 15)
+
+int mempacket_swap_epoch(BIO *bio);
+int mempacket_move_packet(BIO *bio, int d, int s);
+int mempacket_test_inject(BIO *bio, const char *in, int inl, int pktnum,
+ int type);
+
+typedef struct mempacket_st MEMPACKET;
+
+DEFINE_STACK_OF(MEMPACKET)
+
+#endif /* OSSL_TEST_SSLTESTLIB_H */
diff --git a/test/hexstr_test.c b/test/hexstr_test.c
new file mode 100644
index 000000000000..5a9684e0e697
--- /dev/null
+++ b/test/hexstr_test.c
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * This program tests the use of OSSL_PARAM, currently in raw form.
+ */
+
+#include "internal/nelem.h"
+#include "internal/cryptlib.h"
+#include "testutil.h"
+
+struct testdata
+{
+ const char *in;
+ const unsigned char *expected;
+ size_t expected_len;
+ const char sep;
+};
+
+static const unsigned char test_1[] = { 0xAB, 0xCD, 0xEF, 0xF1 };
+static const unsigned char test_2[] = { 0xAB, 0xCD, 0xEF, 0x76, 0x00 };
+
+static struct testdata tbl_testdata[] = {
+ {
+ "AB:CD:EF:F1",
+ test_1, sizeof(test_1),
+ ':',
+ },
+ {
+ "AB:CD:EF:76:00",
+ test_2, sizeof(test_2),
+ ':',
+ },
+ {
+ "AB_CD_EF_F1",
+ test_1, sizeof(test_1),
+ '_',
+ },
+ {
+ "AB_CD_EF_76_00",
+ test_2, sizeof(test_2),
+ '_',
+ },
+ {
+ "ABCDEFF1",
+ test_1, sizeof(test_1),
+ '\0',
+ },
+ {
+ "ABCDEF7600",
+ test_2, sizeof(test_2),
+ '\0',
+ },
+};
+
+static int test_hexstr_sep_to_from(int test_index)
+{
+ int ret = 0;
+ long len = 0;
+ unsigned char *buf = NULL;
+ char *out = NULL;
+ struct testdata *test = &tbl_testdata[test_index];
+
+ if (!TEST_ptr(buf = ossl_hexstr2buf_sep(test->in, &len, test->sep))
+ || !TEST_mem_eq(buf, len, test->expected, test->expected_len)
+ || !TEST_ptr(out = ossl_buf2hexstr_sep(buf, len, test->sep))
+ || !TEST_str_eq(out, test->in))
+ goto err;
+
+ ret = 1;
+err:
+ OPENSSL_free(buf);
+ OPENSSL_free(out);
+ return ret;
+}
+
+static int test_hexstr_to_from(int test_index)
+{
+ int ret = 0;
+ long len = 0;
+ unsigned char *buf = NULL;
+ char *out = NULL;
+ struct testdata *test = &tbl_testdata[test_index];
+
+ if (test->sep != '_') {
+ if (!TEST_ptr(buf = OPENSSL_hexstr2buf(test->in, &len))
+ || !TEST_mem_eq(buf, len, test->expected, test->expected_len)
+ || !TEST_ptr(out = OPENSSL_buf2hexstr(buf, len)))
+ goto err;
+ if (test->sep == ':') {
+ if (!TEST_str_eq(out, test->in))
+ goto err;
+ } else if (!TEST_str_ne(out, test->in)) {
+ goto err;
+ }
+ } else {
+ if (!TEST_ptr_null(buf = OPENSSL_hexstr2buf(test->in, &len)))
+ goto err;
+ }
+ ret = 1;
+err:
+ OPENSSL_free(buf);
+ OPENSSL_free(out);
+ return ret;
+}
+
+static int test_hexstr_ex_to_from(int test_index)
+{
+ size_t len = 0;
+ char out[64];
+ unsigned char buf[64];
+ struct testdata *test = &tbl_testdata[test_index];
+
+ return TEST_true(OPENSSL_hexstr2buf_ex(buf, sizeof(buf), &len, test->in, ':'))
+ && TEST_mem_eq(buf, len, test->expected, test->expected_len)
+ && TEST_true(OPENSSL_buf2hexstr_ex(out, sizeof(out), NULL, buf, len,
+ ':'))
+ && TEST_str_eq(out, test->in);
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_hexstr_sep_to_from, OSSL_NELEM(tbl_testdata));
+ ADD_ALL_TESTS(test_hexstr_to_from, OSSL_NELEM(tbl_testdata));
+ ADD_ALL_TESTS(test_hexstr_ex_to_from, 2);
+ return 1;
+}
diff --git a/test/hmactest.c b/test/hmactest.c
new file mode 100644
index 000000000000..8f5bf32f8708
--- /dev/null
+++ b/test/hmactest.c
@@ -0,0 +1,302 @@
+/*
+ * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * 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 <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "internal/nelem.h"
+
+# include <openssl/hmac.h>
+# include <openssl/sha.h>
+# ifndef OPENSSL_NO_MD5
+# include <openssl/md5.h>
+# endif
+
+# ifdef CHARSET_EBCDIC
+# include <openssl/ebcdic.h>
+# endif
+
+#include "testutil.h"
+
+# ifndef OPENSSL_NO_MD5
+static struct test_st {
+ const char key[16];
+ int key_len;
+ const unsigned char data[64];
+ int data_len;
+ const char *digest;
+} test[8] = {
+ {
+ "", 0, "More text test vectors to stuff up EBCDIC machines :-)", 54,
+ "e9139d1e6ee064ef8cf514fc7dc83e86",
+ },
+ {
+ "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
+ 16, "Hi There", 8,
+ "9294727a3638bb1c13f48ef8158bfc9d",
+ },
+ {
+ "Jefe", 4, "what do ya want for nothing?", 28,
+ "750c783e6ab0b503eaa86e310a5db738",
+ },
+ {
+ "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
+ 16, {
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd
+ }, 50, "56be34521d144c88dbb8c733f0e8b3f6",
+ },
+ {
+ "", 0, "My test data", 12,
+ "61afdecb95429ef494d61fdee15990cabf0826fc"
+ },
+ {
+ "", 0, "My test data", 12,
+ "2274b195d90ce8e03406f4b526a47e0787a88a65479938f1a5baa3ce0f079776"
+ },
+ {
+ "123456", 6, "My test data", 12,
+ "bab53058ae861a7f191abe2d0145cbb123776a6369ee3f9d79ce455667e411dd"
+ },
+ {
+ "12345", 5, "My test data again", 18,
+ "a12396ceddd2a85f4c656bc1e0aa50c78cffde3e"
+ }
+};
+# endif
+
+static char *pt(unsigned char *md, unsigned int len);
+
+
+# ifndef OPENSSL_NO_MD5
+static int test_hmac_md5(int idx)
+{
+ char *p;
+# ifdef CHARSET_EBCDIC
+ ebcdic2ascii(test[0].data, test[0].data, test[0].data_len);
+ ebcdic2ascii(test[1].data, test[1].data, test[1].data_len);
+ ebcdic2ascii(test[2].key, test[2].key, test[2].key_len);
+ ebcdic2ascii(test[2].data, test[2].data, test[2].data_len);
+# endif
+
+ p = pt(HMAC(EVP_md5(),
+ test[idx].key, test[idx].key_len,
+ test[idx].data, test[idx].data_len, NULL, NULL),
+ MD5_DIGEST_LENGTH);
+
+ return TEST_ptr(p) && TEST_str_eq(p, test[idx].digest);
+}
+# endif
+
+static int test_hmac_bad(void)
+{
+ HMAC_CTX *ctx = NULL;
+ int ret = 0;
+
+ ctx = HMAC_CTX_new();
+ if (!TEST_ptr(ctx)
+ || !TEST_ptr_null(HMAC_CTX_get_md(ctx))
+ || !TEST_false(HMAC_Init_ex(ctx, NULL, 0, NULL, NULL))
+ || !TEST_false(HMAC_Update(ctx, test[4].data, test[4].data_len))
+ || !TEST_false(HMAC_Init_ex(ctx, NULL, 0, EVP_sha1(), NULL))
+ || !TEST_false(HMAC_Update(ctx, test[4].data, test[4].data_len)))
+ goto err;
+
+ ret = 1;
+err:
+ HMAC_CTX_free(ctx);
+ return ret;
+}
+
+static int test_hmac_run(void)
+{
+ char *p;
+ HMAC_CTX *ctx = NULL;
+ unsigned char buf[EVP_MAX_MD_SIZE];
+ unsigned int len;
+ int ret = 0;
+
+ if (!TEST_ptr(ctx = HMAC_CTX_new()))
+ return 0;
+ HMAC_CTX_reset(ctx);
+
+ if (!TEST_ptr(ctx)
+ || !TEST_ptr_null(HMAC_CTX_get_md(ctx))
+ || !TEST_false(HMAC_Init_ex(ctx, NULL, 0, NULL, NULL))
+ || !TEST_false(HMAC_Update(ctx, test[4].data, test[4].data_len))
+ || !TEST_false(HMAC_Init_ex(ctx, test[4].key, -1, EVP_sha1(), NULL)))
+ goto err;
+
+ if (!TEST_true(HMAC_Init_ex(ctx, test[4].key, test[4].key_len, EVP_sha1(), NULL))
+ || !TEST_true(HMAC_Update(ctx, test[4].data, test[4].data_len))
+ || !TEST_true(HMAC_Final(ctx, buf, &len)))
+ goto err;
+
+ p = pt(buf, len);
+ if (!TEST_ptr(p) || !TEST_str_eq(p, test[4].digest))
+ goto err;
+
+ if (!TEST_false(HMAC_Init_ex(ctx, NULL, 0, EVP_sha256(), NULL)))
+ goto err;
+
+ if (!TEST_true(HMAC_Init_ex(ctx, test[5].key, test[5].key_len, EVP_sha256(), NULL))
+ || !TEST_ptr_eq(HMAC_CTX_get_md(ctx), EVP_sha256())
+ || !TEST_true(HMAC_Update(ctx, test[5].data, test[5].data_len))
+ || !TEST_true(HMAC_Final(ctx, buf, &len)))
+ goto err;
+
+ p = pt(buf, len);
+ if (!TEST_ptr(p) || !TEST_str_eq(p, test[5].digest))
+ goto err;
+
+ if (!TEST_true(HMAC_Init_ex(ctx, test[6].key, test[6].key_len, NULL, NULL))
+ || !TEST_true(HMAC_Update(ctx, test[6].data, test[6].data_len))
+ || !TEST_true(HMAC_Final(ctx, buf, &len)))
+ goto err;
+ p = pt(buf, len);
+ if (!TEST_ptr(p) || !TEST_str_eq(p, test[6].digest))
+ goto err;
+
+ /* Test reusing a key */
+ if (!TEST_true(HMAC_Init_ex(ctx, NULL, 0, NULL, NULL))
+ || !TEST_true(HMAC_Update(ctx, test[6].data, test[6].data_len))
+ || !TEST_true(HMAC_Final(ctx, buf, &len)))
+ goto err;
+ p = pt(buf, len);
+ if (!TEST_ptr(p) || !TEST_str_eq(p, test[6].digest))
+ goto err;
+
+ /*
+ * Test reusing a key where the digest is provided again but is the same as
+ * last time
+ */
+ if (!TEST_true(HMAC_Init_ex(ctx, NULL, 0, EVP_sha256(), NULL))
+ || !TEST_true(HMAC_Update(ctx, test[6].data, test[6].data_len))
+ || !TEST_true(HMAC_Final(ctx, buf, &len)))
+ goto err;
+ p = pt(buf, len);
+ if (!TEST_ptr(p) || !TEST_str_eq(p, test[6].digest))
+ goto err;
+
+ ret = 1;
+err:
+ HMAC_CTX_free(ctx);
+ return ret;
+}
+
+
+static int test_hmac_single_shot(void)
+{
+ char *p;
+
+ /* Test single-shot with NULL key. */
+ p = pt(HMAC(EVP_sha1(), NULL, 0, test[4].data, test[4].data_len,
+ NULL, NULL), SHA_DIGEST_LENGTH);
+ if (!TEST_ptr(p) || !TEST_str_eq(p, test[4].digest))
+ return 0;
+
+ return 1;
+}
+
+
+static int test_hmac_copy(void)
+{
+ char *p;
+ HMAC_CTX *ctx = NULL, *ctx2 = NULL;
+ unsigned char buf[EVP_MAX_MD_SIZE];
+ unsigned int len;
+ int ret = 0;
+
+ ctx = HMAC_CTX_new();
+ ctx2 = HMAC_CTX_new();
+ if (!TEST_ptr(ctx) || !TEST_ptr(ctx2))
+ goto err;
+
+ if (!TEST_true(HMAC_Init_ex(ctx, test[7].key, test[7].key_len, EVP_sha1(), NULL))
+ || !TEST_true(HMAC_Update(ctx, test[7].data, test[7].data_len))
+ || !TEST_true(HMAC_CTX_copy(ctx2, ctx))
+ || !TEST_true(HMAC_Final(ctx2, buf, &len)))
+ goto err;
+
+ p = pt(buf, len);
+ if (!TEST_ptr(p) || !TEST_str_eq(p, test[7].digest))
+ goto err;
+
+ ret = 1;
+err:
+ HMAC_CTX_free(ctx2);
+ HMAC_CTX_free(ctx);
+ return ret;
+}
+
+static int test_hmac_copy_uninited(void)
+{
+ const unsigned char key[24] = {0};
+ const unsigned char ct[166] = {0};
+ EVP_PKEY *pkey = NULL;
+ EVP_MD_CTX *ctx = NULL;
+ EVP_MD_CTX *ctx_tmp = NULL;
+ int res = 0;
+
+ if (!TEST_ptr(ctx = EVP_MD_CTX_new())
+ || !TEST_ptr(pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL,
+ key, sizeof(key)))
+ || !TEST_true(EVP_DigestSignInit(ctx, NULL, EVP_sha1(), NULL, pkey))
+ || !TEST_ptr(ctx_tmp = EVP_MD_CTX_new())
+ || !TEST_true(EVP_MD_CTX_copy(ctx_tmp, ctx)))
+ goto err;
+ EVP_MD_CTX_free(ctx);
+ ctx = ctx_tmp;
+ ctx_tmp = NULL;
+
+ if (!TEST_true(EVP_DigestSignUpdate(ctx, ct, sizeof(ct))))
+ goto err;
+ res = 1;
+ err:
+ EVP_MD_CTX_free(ctx);
+ EVP_MD_CTX_free(ctx_tmp);
+ EVP_PKEY_free(pkey);
+ return res;
+}
+
+# ifndef OPENSSL_NO_MD5
+static char *pt(unsigned char *md, unsigned int len)
+{
+ unsigned int i;
+ static char buf[80];
+
+ if (md == NULL)
+ return NULL;
+ for (i = 0; i < len; i++)
+ sprintf(&(buf[i * 2]), "%02x", md[i]);
+ return buf;
+}
+# endif
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_hmac_md5, 4);
+ ADD_TEST(test_hmac_single_shot);
+ ADD_TEST(test_hmac_bad);
+ ADD_TEST(test_hmac_run);
+ ADD_TEST(test_hmac_copy);
+ ADD_TEST(test_hmac_copy_uninited);
+ return 1;
+}
+
diff --git a/test/http_test.c b/test/http_test.c
new file mode 100644
index 000000000000..b6897a17fdd8
--- /dev/null
+++ b/test/http_test.c
@@ -0,0 +1,395 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Siemens AG 2020
+ *
+ * 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/http.h>
+#include <openssl/pem.h>
+#include <openssl/x509v3.h>
+#include <string.h>
+
+#include "testutil.h"
+
+static const ASN1_ITEM *x509_it = NULL;
+static X509 *x509 = NULL;
+#define RPATH "/path/result.crt"
+
+typedef struct {
+ BIO *out;
+ char version;
+ int keep_alive;
+} server_args;
+
+/*-
+ * Pretty trivial HTTP mock server:
+ * For POST, copy request headers+body from mem BIO 'in' as response to 'out'.
+ * For GET, redirect to RPATH, else respond with 'rsp' of ASN1 type 'it'.
+ * Respond with HTTP version 1.'version' and 'keep_alive' (unless implicit).
+ */
+static int mock_http_server(BIO *in, BIO *out, char version, int keep_alive,
+ ASN1_VALUE *rsp, const ASN1_ITEM *it)
+{
+ const char *req, *path;
+ long count = BIO_get_mem_data(in, (unsigned char **)&req);
+ const char *hdr = (char *)req;
+ int is_get = count >= 4 && strncmp(hdr, "GET ", 4) == 0;
+ int len;
+
+ /* first line should contain "<GET or POST> <path> HTTP/1.x" */
+ if (is_get)
+ hdr += 4;
+ else if (TEST_true(count >= 5 && strncmp(hdr, "POST ", 5) == 0))
+ hdr += 5;
+ else
+ return 0;
+
+ path = hdr;
+ hdr = strchr(hdr, ' ');
+ if (hdr == NULL)
+ return 0;
+ len = strlen("HTTP/1.");
+ if (!TEST_strn_eq(++hdr, "HTTP/1.", len))
+ return 0;
+ hdr += len;
+ /* check for HTTP version 1.0 .. 1.1 */
+ if (!TEST_char_le('0', *hdr) || !TEST_char_le(*hdr++, '1'))
+ return 0;
+ if (!TEST_char_eq(*hdr++, '\r') || !TEST_char_eq(*hdr++, '\n'))
+ return 0;
+ count -= (hdr - req);
+ if (count < 0 || out == NULL)
+ return 0;
+
+ if (strncmp(path, RPATH, strlen(RPATH)) != 0) {
+ if (!is_get)
+ return 0;
+ return BIO_printf(out, "HTTP/1.%c 301 Moved Permanently\r\n"
+ "Location: %s\r\n\r\n",
+ version, RPATH) > 0; /* same server */
+ }
+ if (BIO_printf(out, "HTTP/1.%c 200 OK\r\n", version) <= 0)
+ return 0;
+ if ((version == '0') == keep_alive) /* otherwise, default */
+ if (BIO_printf(out, "Connection: %s\r\n",
+ version == '0' ? "keep-alive" : "close") <= 0)
+ return 0;
+ if (is_get) { /* construct new header and body */
+ if ((len = ASN1_item_i2d(rsp, NULL, it)) <= 0)
+ return 0;
+ if (BIO_printf(out, "Content-Type: application/x-x509-ca-cert\r\n"
+ "Content-Length: %d\r\n\r\n", len) <= 0)
+ return 0;
+ return ASN1_item_i2d_bio(it, out, rsp);
+ } else {
+ len = strlen("Connection: ");
+ if (strncmp(hdr, "Connection: ", len) == 0) {
+ /* skip req Connection header */
+ hdr = strstr(hdr + len, "\r\n");
+ if (hdr == NULL)
+ return 0;
+ hdr += 2;
+ }
+ /* echo remaining request header and body */
+ return BIO_write(out, hdr, count) == count;
+ }
+}
+
+static long http_bio_cb_ex(BIO *bio, int oper, const char *argp, size_t len,
+ int cmd, long argl, int ret, size_t *processed)
+{
+ server_args *args = (server_args *)BIO_get_callback_arg(bio);
+
+ if (oper == (BIO_CB_CTRL | BIO_CB_RETURN) && cmd == BIO_CTRL_FLUSH)
+ ret = mock_http_server(bio, args->out, args->version, args->keep_alive,
+ (ASN1_VALUE *)x509, x509_it);
+ return ret;
+}
+
+static int test_http_x509(int do_get)
+{
+ X509 *rcert = NULL;
+ BIO *wbio = BIO_new(BIO_s_mem());
+ BIO *rbio = BIO_new(BIO_s_mem());
+ server_args mock_args = { NULL, '0', 0 };
+ BIO *rsp, *req = ASN1_item_i2d_mem_bio(x509_it, (ASN1_VALUE *)x509);
+ STACK_OF(CONF_VALUE) *headers = NULL;
+ const char content_type[] = "application/x-x509-ca-cert";
+ int res = 0;
+
+ if (wbio == NULL || rbio == NULL || req == NULL)
+ goto err;
+ mock_args.out = rbio;
+ BIO_set_callback_ex(wbio, http_bio_cb_ex);
+ BIO_set_callback_arg(wbio, (char *)&mock_args);
+
+ rsp = do_get ?
+ OSSL_HTTP_get("/will-be-redirected",
+ NULL /* proxy */, NULL /* no_proxy */,
+ wbio, rbio, NULL /* bio_update_fn */, NULL /* arg */,
+ 0 /* buf_size */, headers, content_type,
+ 1 /* expect_asn1 */,
+ OSSL_HTTP_DEFAULT_MAX_RESP_LEN, 0 /* timeout */)
+ : OSSL_HTTP_transfer(NULL, NULL /* host */, NULL /* port */, RPATH,
+ 0 /* use_ssl */,NULL /* proxy */, NULL /* no_pr */,
+ wbio, rbio, NULL /* bio_fn */, NULL /* arg */,
+ 0 /* buf_size */, headers, content_type,
+ req, content_type, 1 /* expect_asn1 */,
+ OSSL_HTTP_DEFAULT_MAX_RESP_LEN, 0 /* timeout */,
+ 0 /* keep_alive */);
+ rcert = d2i_X509_bio(rsp, NULL);
+ BIO_free(rsp);
+ res = TEST_ptr(rcert) && TEST_int_eq(X509_cmp(x509, rcert), 0);
+
+ err:
+ X509_free(rcert);
+ BIO_free(req);
+ BIO_free(wbio);
+ BIO_free(rbio);
+ sk_CONF_VALUE_pop_free(headers, X509V3_conf_free);
+ return res;
+}
+
+static int test_http_keep_alive(char version, int keep_alive, int kept_alive)
+{
+ BIO *wbio = BIO_new(BIO_s_mem());
+ BIO *rbio = BIO_new(BIO_s_mem());
+ BIO *rsp;
+ server_args mock_args = { NULL, '0', 0 };
+ const char *const content_type = "application/x-x509-ca-cert";
+ OSSL_HTTP_REQ_CTX *rctx = NULL;
+ int i, res = 0;
+
+ if (wbio == NULL || rbio == NULL)
+ goto err;
+ mock_args.out = rbio;
+ mock_args.version = version;
+ mock_args.keep_alive = kept_alive;
+ BIO_set_callback_ex(wbio, http_bio_cb_ex);
+ BIO_set_callback_arg(wbio, (char *)&mock_args);
+
+ for (res = 1, i = 1; res && i <= 2; i++) {
+ rsp = OSSL_HTTP_transfer(&rctx, NULL /* server */, NULL /* port */,
+ RPATH, 0 /* use_ssl */,
+ NULL /* proxy */, NULL /* no_proxy */,
+ wbio, rbio, NULL /* bio_update_fn */, NULL,
+ 0 /* buf_size */, NULL /* headers */,
+ NULL /* content_type */, NULL /* req => GET */,
+ content_type, 0 /* ASN.1 not expected */,
+ 0 /* max_resp_len */, 0 /* timeout */,
+ keep_alive);
+ if (keep_alive == 2 && kept_alive == 0)
+ res = res && TEST_ptr_null(rsp)
+ && TEST_int_eq(OSSL_HTTP_is_alive(rctx), 0);
+ else
+ res = res && TEST_ptr(rsp)
+ && TEST_int_eq(OSSL_HTTP_is_alive(rctx), keep_alive > 0);
+ BIO_free(rsp);
+ (void)BIO_reset(rbio); /* discard response contents */
+ keep_alive = 0;
+ }
+ OSSL_HTTP_close(rctx, res);
+
+ err:
+ BIO_free(wbio);
+ BIO_free(rbio);
+ return res;
+}
+
+static int test_http_url_ok(const char *url, int exp_ssl, const char *exp_host,
+ const char *exp_port, const char *exp_path)
+{
+ char *user, *host, *port, *path, *query, *frag;
+ int exp_num, num, ssl;
+ int res;
+
+ if (!TEST_int_eq(sscanf(exp_port, "%d", &exp_num), 1))
+ return 0;
+ res = TEST_true(OSSL_HTTP_parse_url(url, &ssl, &user, &host, &port, &num,
+ &path, &query, &frag))
+ && TEST_str_eq(host, exp_host)
+ && TEST_str_eq(port, exp_port)
+ && TEST_int_eq(num, exp_num)
+ && TEST_str_eq(path, exp_path)
+ && TEST_int_eq(ssl, exp_ssl);
+ if (res && *user != '\0')
+ res = TEST_str_eq(user, "user:pass");
+ if (res && *frag != '\0')
+ res = TEST_str_eq(frag, "fr");
+ if (res && *query != '\0')
+ res = TEST_str_eq(query, "q");
+ OPENSSL_free(user);
+ OPENSSL_free(host);
+ OPENSSL_free(port);
+ OPENSSL_free(path);
+ OPENSSL_free(query);
+ OPENSSL_free(frag);
+ return res;
+}
+
+static int test_http_url_path_query_ok(const char *url, const char *exp_path_qu)
+{
+ char *host, *path;
+ int res;
+
+ res = TEST_true(OSSL_HTTP_parse_url(url, NULL, NULL, &host, NULL, NULL,
+ &path, NULL, NULL))
+ && TEST_str_eq(host, "host")
+ && TEST_str_eq(path, exp_path_qu);
+ OPENSSL_free(host);
+ OPENSSL_free(path);
+ return res;
+}
+
+static int test_http_url_dns(void)
+{
+ return test_http_url_ok("host:65535/path", 0, "host", "65535", "/path");
+}
+
+static int test_http_url_path_query(void)
+{
+ return test_http_url_path_query_ok("http://usr@host:1/p?q=x#frag", "/p?q=x")
+ && test_http_url_path_query_ok("http://host?query#frag", "/?query")
+ && test_http_url_path_query_ok("http://host:9999#frag", "/");
+}
+
+static int test_http_url_userinfo_query_fragment(void)
+{
+ return test_http_url_ok("user:pass@host/p?q#fr", 0, "host", "80", "/p");
+}
+
+static int test_http_url_ipv4(void)
+{
+ return test_http_url_ok("https://1.2.3.4/p/q", 1, "1.2.3.4", "443", "/p/q");
+}
+
+static int test_http_url_ipv6(void)
+{
+ return test_http_url_ok("http://[FF01::101]:6", 0, "[FF01::101]", "6", "/");
+}
+
+static int test_http_url_invalid(const char *url)
+{
+ char *host = "1", *port = "1", *path = "1";
+ int num = 1, ssl = 1;
+ int res;
+
+ res = TEST_false(OSSL_HTTP_parse_url(url, &ssl, NULL, &host, &port, &num,
+ &path, NULL, NULL))
+ && TEST_ptr_null(host)
+ && TEST_ptr_null(port)
+ && TEST_ptr_null(path);
+ if (!res) {
+ OPENSSL_free(host);
+ OPENSSL_free(port);
+ OPENSSL_free(path);
+ }
+ return res;
+}
+
+static int test_http_url_invalid_prefix(void)
+{
+ return test_http_url_invalid("htttps://1.2.3.4:65535/pkix");
+}
+
+static int test_http_url_invalid_port(void)
+{
+ return test_http_url_invalid("https://1.2.3.4:65536/pkix")
+ && test_http_url_invalid("https://1.2.3.4:");
+}
+
+static int test_http_url_invalid_path(void)
+{
+ return test_http_url_invalid("https://[FF01::101]pkix");
+}
+
+static int test_http_get_x509(void)
+{
+ return test_http_x509(1);
+}
+
+static int test_http_post_x509(void)
+{
+ return test_http_x509(0);
+}
+
+static int test_http_keep_alive_0_no_no(void)
+{
+ return test_http_keep_alive('0', 0, 0);
+}
+
+static int test_http_keep_alive_1_no_no(void)
+{
+ return test_http_keep_alive('1', 0, 0);
+}
+
+static int test_http_keep_alive_0_prefer_yes(void)
+{
+ return test_http_keep_alive('0', 1, 1);
+}
+
+static int test_http_keep_alive_1_prefer_yes(void)
+{
+ return test_http_keep_alive('1', 1, 1);
+}
+
+static int test_http_keep_alive_0_require_yes(void)
+{
+ return test_http_keep_alive('0', 2, 1);
+}
+
+static int test_http_keep_alive_1_require_yes(void)
+{
+ return test_http_keep_alive('1', 2, 1);
+}
+
+static int test_http_keep_alive_0_require_no(void)
+{
+ return test_http_keep_alive('0', 2, 0);
+}
+
+static int test_http_keep_alive_1_require_no(void)
+{
+ return test_http_keep_alive('1', 2, 0);
+}
+
+void cleanup_tests(void)
+{
+ X509_free(x509);
+}
+
+OPT_TEST_DECLARE_USAGE("cert.pem\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options())
+ return 0;
+
+ x509_it = ASN1_ITEM_rptr(X509);
+ if (!TEST_ptr((x509 = load_cert_pem(test_get_argument(0), NULL))))
+ return 0;
+
+ ADD_TEST(test_http_url_dns);
+ ADD_TEST(test_http_url_path_query);
+ ADD_TEST(test_http_url_userinfo_query_fragment);
+ ADD_TEST(test_http_url_ipv4);
+ ADD_TEST(test_http_url_ipv6);
+ ADD_TEST(test_http_url_invalid_prefix);
+ ADD_TEST(test_http_url_invalid_port);
+ ADD_TEST(test_http_url_invalid_path);
+ ADD_TEST(test_http_get_x509);
+ ADD_TEST(test_http_post_x509);
+ ADD_TEST(test_http_keep_alive_0_no_no);
+ ADD_TEST(test_http_keep_alive_1_no_no);
+ ADD_TEST(test_http_keep_alive_0_prefer_yes);
+ ADD_TEST(test_http_keep_alive_1_prefer_yes);
+ ADD_TEST(test_http_keep_alive_0_require_yes);
+ ADD_TEST(test_http_keep_alive_1_require_yes);
+ ADD_TEST(test_http_keep_alive_0_require_no);
+ ADD_TEST(test_http_keep_alive_1_require_no);
+ return 1;
+}
diff --git a/test/ideatest.c b/test/ideatest.c
new file mode 100644
index 000000000000..ff5e4601f3b3
--- /dev/null
+++ b/test/ideatest.c
@@ -0,0 +1,126 @@
+/*
+ * 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
+ */
+
+/*
+ * IDEA low level APIs are deprecated for public use, but still ok for internal
+ * use where we're using them to implement the higher level EVP interface, as is
+ * the case here.
+ */
+#include "internal/deprecated.h"
+
+#include <string.h>
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_IDEA
+# include <openssl/idea.h>
+
+static const unsigned char k[16] = {
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04,
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08
+};
+
+static const unsigned char in[8] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03 };
+static const unsigned char c[8] = { 0x11, 0xFB, 0xED, 0x2B, 0x01, 0x98, 0x6D, 0xE5 };
+
+static unsigned char out[80];
+
+static const unsigned char text[] = "Hello to all people out there";
+
+static const unsigned char cfb_key[16] = {
+ 0xe1, 0xf0, 0xc3, 0xd2, 0xa5, 0xb4, 0x87, 0x96,
+ 0x69, 0x78, 0x4b, 0x5a, 0x2d, 0x3c, 0x0f, 0x1e,
+};
+static const unsigned char cfb_iv[80] =
+ { 0x34, 0x12, 0x78, 0x56, 0xab, 0x90, 0xef, 0xcd };
+static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8];
+# define CFB_TEST_SIZE 24
+static const unsigned char plain[CFB_TEST_SIZE] = {
+ 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
+ 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20
+};
+
+static const unsigned char cfb_cipher64[CFB_TEST_SIZE] = {
+ 0x59, 0xD8, 0xE2, 0x65, 0x00, 0x58, 0x6C, 0x3F,
+ 0x2C, 0x17, 0x25, 0xD0, 0x1A, 0x38, 0xB7, 0x2A,
+ 0x39, 0x61, 0x37, 0xDC, 0x79, 0xFB, 0x9F, 0x45
+/*- 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
+ 0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
+ 0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
+};
+
+static int test_idea_ecb(void)
+{
+ IDEA_KEY_SCHEDULE key, dkey;
+
+ IDEA_set_encrypt_key(k, &key);
+ IDEA_ecb_encrypt(in, out, &key);
+ if (!TEST_mem_eq(out, IDEA_BLOCK, c, sizeof(c)))
+ return 0;
+
+ IDEA_set_decrypt_key(&key, &dkey);
+ IDEA_ecb_encrypt(c, out, &dkey);
+ return TEST_mem_eq(out, IDEA_BLOCK, in, sizeof(in));
+}
+
+static int test_idea_cbc(void)
+{
+ IDEA_KEY_SCHEDULE key, dkey;
+ unsigned char iv[IDEA_BLOCK];
+ const size_t text_len = sizeof(text);
+
+ IDEA_set_encrypt_key(k, &key);
+ IDEA_set_decrypt_key(&key, &dkey);
+ memcpy(iv, k, sizeof(iv));
+ IDEA_cbc_encrypt(text, out, text_len, &key, iv, 1);
+ memcpy(iv, k, sizeof(iv));
+ IDEA_cbc_encrypt(out, out, IDEA_BLOCK, &dkey, iv, 0);
+ IDEA_cbc_encrypt(&out[8], &out[8], text_len - 8, &dkey, iv, 0);
+ return TEST_mem_eq(text, text_len, out, text_len);
+}
+
+static int test_idea_cfb64(void)
+{
+ IDEA_KEY_SCHEDULE eks, dks;
+ int n;
+
+ IDEA_set_encrypt_key(cfb_key, &eks);
+ IDEA_set_decrypt_key(&eks, &dks);
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_tmp));
+ n = 0;
+ IDEA_cfb64_encrypt(plain, cfb_buf1, (long)12, &eks,
+ cfb_tmp, &n, IDEA_ENCRYPT);
+ IDEA_cfb64_encrypt(&plain[12], &cfb_buf1[12],
+ (long)CFB_TEST_SIZE - 12, &eks,
+ cfb_tmp, &n, IDEA_ENCRYPT);
+ if (!TEST_mem_eq(cfb_cipher64, CFB_TEST_SIZE, cfb_buf1, CFB_TEST_SIZE))
+ return 0;
+ memcpy(cfb_tmp, cfb_iv, sizeof(cfb_tmp));
+ n = 0;
+ IDEA_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)13, &eks,
+ cfb_tmp, &n, IDEA_DECRYPT);
+ IDEA_cfb64_encrypt(&cfb_buf1[13], &cfb_buf2[13],
+ (long)CFB_TEST_SIZE - 13, &eks,
+ cfb_tmp, &n, IDEA_DECRYPT);
+ return TEST_mem_eq(plain, CFB_TEST_SIZE, cfb_buf2, CFB_TEST_SIZE);
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_IDEA
+ ADD_TEST(test_idea_ecb);
+ ADD_TEST(test_idea_cbc);
+ ADD_TEST(test_idea_cfb64);
+#endif
+ return 1;
+}
diff --git a/test/igetest.c b/test/igetest.c
new file mode 100644
index 000000000000..7a8ff6880270
--- /dev/null
+++ b/test/igetest.c
@@ -0,0 +1,462 @@
+/*
+ * Copyright 2006-2017 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
+ */
+
+/* The AES_ige_* functions are deprecated, so we suppress warnings about them */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <openssl/crypto.h>
+#include <openssl/aes.h>
+#include <openssl/rand.h>
+#include <stdio.h>
+#include <string.h>
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+
+# define TEST_SIZE 128
+# define BIG_TEST_SIZE 10240
+
+# if BIG_TEST_SIZE < TEST_SIZE
+# error BIG_TEST_SIZE is smaller than TEST_SIZE
+# endif
+
+static unsigned char rkey[16];
+static unsigned char rkey2[16];
+static unsigned char plaintext[BIG_TEST_SIZE];
+static unsigned char saved_iv[AES_BLOCK_SIZE * 4];
+
+# define MAX_VECTOR_SIZE 64
+
+struct ige_test {
+ const unsigned char key[16];
+ const unsigned char iv[32];
+ const unsigned char in[MAX_VECTOR_SIZE];
+ const unsigned char out[MAX_VECTOR_SIZE];
+ const size_t length;
+ const int encrypt;
+};
+
+static struct ige_test const ige_test_vectors[] = {
+ {{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, /* key */
+ {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}, /* iv */
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* in */
+ {0x1a, 0x85, 0x19, 0xa6, 0x55, 0x7b, 0xe6, 0x52,
+ 0xe9, 0xda, 0x8e, 0x43, 0xda, 0x4e, 0xf4, 0x45,
+ 0x3c, 0xf4, 0x56, 0xb4, 0xca, 0x48, 0x8a, 0xa3,
+ 0x83, 0xc7, 0x9c, 0x98, 0xb3, 0x47, 0x97, 0xcb}, /* out */
+ 32, AES_ENCRYPT}, /* test vector 0 */
+
+ {{0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+ 0x61, 0x6e, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65}, /* key */
+ {0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x49, 0x47, 0x45,
+ 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53}, /* iv */
+ {0x4c, 0x2e, 0x20, 0x4c, 0x65, 0x74, 0x27, 0x73,
+ 0x20, 0x68, 0x6f, 0x70, 0x65, 0x20, 0x42, 0x65,
+ 0x6e, 0x20, 0x67, 0x6f, 0x74, 0x20, 0x69, 0x74,
+ 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x21, 0x0a}, /* in */
+ {0x99, 0x70, 0x64, 0x87, 0xa1, 0xcd, 0xe6, 0x13,
+ 0xbc, 0x6d, 0xe0, 0xb6, 0xf2, 0x4b, 0x1c, 0x7a,
+ 0xa4, 0x48, 0xc8, 0xb9, 0xc3, 0x40, 0x3e, 0x34,
+ 0x67, 0xa8, 0xca, 0xd8, 0x93, 0x40, 0xf5, 0x3b}, /* out */
+ 32, AES_DECRYPT}, /* test vector 1 */
+};
+
+struct bi_ige_test {
+ const unsigned char key1[32];
+ const unsigned char key2[32];
+ const unsigned char iv[64];
+ const unsigned char in[MAX_VECTOR_SIZE];
+ const unsigned char out[MAX_VECTOR_SIZE];
+ const size_t keysize;
+ const size_t length;
+ const int encrypt;
+};
+
+static struct bi_ige_test const bi_ige_test_vectors[] = {
+ {{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, /* key1 */
+ {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}, /* key2 */
+ {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,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f}, /* iv */
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* in */
+ {0x14, 0x40, 0x6f, 0xae, 0xa2, 0x79, 0xf2, 0x56,
+ 0x1f, 0x86, 0xeb, 0x3b, 0x7d, 0xff, 0x53, 0xdc,
+ 0x4e, 0x27, 0x0c, 0x03, 0xde, 0x7c, 0xe5, 0x16,
+ 0x6a, 0x9c, 0x20, 0x33, 0x9d, 0x33, 0xfe, 0x12}, /* out */
+ 16, 32, AES_ENCRYPT}, /* test vector 0 */
+ {{0x58, 0x0a, 0x06, 0xe9, 0x97, 0x07, 0x59, 0x5c,
+ 0x9e, 0x19, 0xd2, 0xa7, 0xbb, 0x40, 0x2b, 0x7a,
+ 0xc7, 0xd8, 0x11, 0x9e, 0x4c, 0x51, 0x35, 0x75,
+ 0x64, 0x28, 0x0f, 0x23, 0xad, 0x74, 0xac, 0x37}, /* key1 */
+ {0xd1, 0x80, 0xa0, 0x31, 0x47, 0xa3, 0x11, 0x13,
+ 0x86, 0x26, 0x9e, 0x6d, 0xff, 0xaf, 0x72, 0x74,
+ 0x5b, 0xa2, 0x35, 0x81, 0xd2, 0xa6, 0x3d, 0x21,
+ 0x67, 0x7b, 0x58, 0xa8, 0x18, 0xf9, 0x72, 0xe4}, /* key2 */
+ {0x80, 0x3d, 0xbd, 0x4c, 0xe6, 0x7b, 0x06, 0xa9,
+ 0x53, 0x35, 0xd5, 0x7e, 0x71, 0xc1, 0x70, 0x70,
+ 0x74, 0x9a, 0x00, 0x28, 0x0c, 0xbf, 0x6c, 0x42,
+ 0x9b, 0xa4, 0xdd, 0x65, 0x11, 0x77, 0x7c, 0x67,
+ 0xfe, 0x76, 0x0a, 0xf0, 0xd5, 0xc6, 0x6e, 0x6a,
+ 0xe7, 0x5e, 0x4c, 0xf2, 0x7e, 0x9e, 0xf9, 0x20,
+ 0x0e, 0x54, 0x6f, 0x2d, 0x8a, 0x8d, 0x7e, 0xbd,
+ 0x48, 0x79, 0x37, 0x99, 0xff, 0x27, 0x93, 0xa3}, /* iv */
+ {0xf1, 0x54, 0x3d, 0xca, 0xfe, 0xb5, 0xef, 0x1c,
+ 0x4f, 0xa6, 0x43, 0xf6, 0xe6, 0x48, 0x57, 0xf0,
+ 0xee, 0x15, 0x7f, 0xe3, 0xe7, 0x2f, 0xd0, 0x2f,
+ 0x11, 0x95, 0x7a, 0x17, 0x00, 0xab, 0xa7, 0x0b,
+ 0xbe, 0x44, 0x09, 0x9c, 0xcd, 0xac, 0xa8, 0x52,
+ 0xa1, 0x8e, 0x7b, 0x75, 0xbc, 0xa4, 0x92, 0x5a,
+ 0xab, 0x46, 0xd3, 0x3a, 0xa0, 0xd5, 0x35, 0x1c,
+ 0x55, 0xa4, 0xb3, 0xa8, 0x40, 0x81, 0xa5, 0x0b}, /* in */
+ {0x42, 0xe5, 0x28, 0x30, 0x31, 0xc2, 0xa0, 0x23,
+ 0x68, 0x49, 0x4e, 0xb3, 0x24, 0x59, 0x92, 0x79,
+ 0xc1, 0xa5, 0xcc, 0xe6, 0x76, 0x53, 0xb1, 0xcf,
+ 0x20, 0x86, 0x23, 0xe8, 0x72, 0x55, 0x99, 0x92,
+ 0x0d, 0x16, 0x1c, 0x5a, 0x2f, 0xce, 0xcb, 0x51,
+ 0xe2, 0x67, 0xfa, 0x10, 0xec, 0xcd, 0x3d, 0x67,
+ 0xa5, 0xe6, 0xf7, 0x31, 0x26, 0xb0, 0x0d, 0x76,
+ 0x5e, 0x28, 0xdc, 0x7f, 0x01, 0xc5, 0xa5, 0x4c}, /* out */
+ 32, 64, AES_ENCRYPT}, /* test vector 1 */
+
+};
+
+static int test_ige_vectors(int n)
+{
+ const struct ige_test *const v = &ige_test_vectors[n];
+ AES_KEY key;
+ unsigned char buf[MAX_VECTOR_SIZE];
+ unsigned char iv[AES_BLOCK_SIZE * 2];
+ int testresult = 1;
+
+ if (!TEST_int_le(v->length, MAX_VECTOR_SIZE))
+ return 0;
+
+ if (v->encrypt == AES_ENCRYPT)
+ AES_set_encrypt_key(v->key, 8 * sizeof(v->key), &key);
+ else
+ AES_set_decrypt_key(v->key, 8 * sizeof(v->key), &key);
+ memcpy(iv, v->iv, sizeof(iv));
+ AES_ige_encrypt(v->in, buf, v->length, &key, iv, v->encrypt);
+
+ if (!TEST_mem_eq(v->out, v->length, buf, v->length)) {
+ TEST_info("IGE test vector %d failed", n);
+ test_output_memory("key", v->key, sizeof(v->key));
+ test_output_memory("iv", v->iv, sizeof(v->iv));
+ test_output_memory("in", v->in, v->length);
+ testresult = 0;
+ }
+
+ /* try with in == out */
+ memcpy(iv, v->iv, sizeof(iv));
+ memcpy(buf, v->in, v->length);
+ AES_ige_encrypt(buf, buf, v->length, &key, iv, v->encrypt);
+
+ if (!TEST_mem_eq(v->out, v->length, buf, v->length)) {
+ TEST_info("IGE test vector %d failed (with in == out)", n);
+ test_output_memory("key", v->key, sizeof(v->key));
+ test_output_memory("iv", v->iv, sizeof(v->iv));
+ test_output_memory("in", v->in, v->length);
+ testresult = 0;
+ }
+
+ return testresult;
+}
+
+static int test_bi_ige_vectors(int n)
+{
+ const struct bi_ige_test *const v = &bi_ige_test_vectors[n];
+ AES_KEY key1;
+ AES_KEY key2;
+ unsigned char buf[MAX_VECTOR_SIZE];
+
+ if (!TEST_int_le(v->length, MAX_VECTOR_SIZE))
+ return 0;
+
+ if (v->encrypt == AES_ENCRYPT) {
+ AES_set_encrypt_key(v->key1, 8 * v->keysize, &key1);
+ AES_set_encrypt_key(v->key2, 8 * v->keysize, &key2);
+ } else {
+ AES_set_decrypt_key(v->key1, 8 * v->keysize, &key1);
+ AES_set_decrypt_key(v->key2, 8 * v->keysize, &key2);
+ }
+
+ AES_bi_ige_encrypt(v->in, buf, v->length, &key1, &key2, v->iv,
+ v->encrypt);
+
+ if (!TEST_mem_eq(v->out, v->length, buf, v->length)) {
+ test_output_memory("key 1", v->key1, sizeof(v->key1));
+ test_output_memory("key 2", v->key2, sizeof(v->key2));
+ test_output_memory("iv", v->iv, sizeof(v->iv));
+ test_output_memory("in", v->in, v->length);
+ return 0;
+ }
+
+ return 1;
+}
+
+static int test_ige_enc_dec(void)
+{
+ AES_KEY key;
+ unsigned char iv[AES_BLOCK_SIZE * 4];
+ unsigned char ciphertext[BIG_TEST_SIZE];
+ unsigned char checktext[BIG_TEST_SIZE];
+
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_set_encrypt_key(rkey, 8 * sizeof(rkey), &key);
+ AES_ige_encrypt(plaintext, ciphertext, TEST_SIZE, &key, iv, AES_ENCRYPT);
+
+ AES_set_decrypt_key(rkey, 8 * sizeof(rkey), &key);
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_ige_encrypt(ciphertext, checktext, TEST_SIZE, &key, iv, AES_DECRYPT);
+
+ return TEST_mem_eq(checktext, TEST_SIZE, plaintext, TEST_SIZE);
+}
+
+static int test_ige_enc_chaining(void)
+{
+ AES_KEY key;
+ unsigned char iv[AES_BLOCK_SIZE * 4];
+ unsigned char ciphertext[BIG_TEST_SIZE];
+ unsigned char checktext[BIG_TEST_SIZE];
+
+ AES_set_encrypt_key(rkey, 8 * sizeof(rkey), &key);
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_ige_encrypt(plaintext, ciphertext, TEST_SIZE / 2, &key, iv,
+ AES_ENCRYPT);
+ AES_ige_encrypt(plaintext + TEST_SIZE / 2,
+ ciphertext + TEST_SIZE / 2, TEST_SIZE / 2,
+ &key, iv, AES_ENCRYPT);
+
+ AES_set_decrypt_key(rkey, 8 * sizeof(rkey), &key);
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_ige_encrypt(ciphertext, checktext, TEST_SIZE, &key, iv, AES_DECRYPT);
+
+ return TEST_mem_eq(checktext, TEST_SIZE, plaintext, TEST_SIZE);
+}
+
+static int test_ige_dec_chaining(void)
+{
+ AES_KEY key;
+ unsigned char iv[AES_BLOCK_SIZE * 4];
+ unsigned char ciphertext[BIG_TEST_SIZE];
+ unsigned char checktext[BIG_TEST_SIZE];
+
+ AES_set_encrypt_key(rkey, 8 * sizeof(rkey), &key);
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_ige_encrypt(plaintext, ciphertext, TEST_SIZE / 2, &key, iv,
+ AES_ENCRYPT);
+ AES_ige_encrypt(plaintext + TEST_SIZE / 2,
+ ciphertext + TEST_SIZE / 2, TEST_SIZE / 2,
+ &key, iv, AES_ENCRYPT);
+
+ AES_set_decrypt_key(rkey, 8 * sizeof(rkey), &key);
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_ige_encrypt(ciphertext, checktext, TEST_SIZE / 2, &key, iv,
+ AES_DECRYPT);
+ AES_ige_encrypt(ciphertext + TEST_SIZE / 2,
+ checktext + TEST_SIZE / 2, TEST_SIZE / 2, &key, iv,
+ AES_DECRYPT);
+
+ return TEST_mem_eq(checktext, TEST_SIZE, plaintext, TEST_SIZE);
+}
+
+static int test_ige_garble_forwards(void)
+{
+ AES_KEY key;
+ unsigned char iv[AES_BLOCK_SIZE * 4];
+ unsigned char ciphertext[BIG_TEST_SIZE];
+ unsigned char checktext[BIG_TEST_SIZE];
+ unsigned int n;
+ int testresult = 1;
+ const size_t ctsize = sizeof(checktext);
+ size_t matches;
+
+ AES_set_encrypt_key(rkey, 8 * sizeof(rkey), &key);
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_ige_encrypt(plaintext, ciphertext, sizeof(plaintext), &key, iv,
+ AES_ENCRYPT);
+
+ /* corrupt halfway through */
+ ++ciphertext[sizeof(ciphertext) / 2];
+ AES_set_decrypt_key(rkey, 8 * sizeof(rkey), &key);
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_ige_encrypt(ciphertext, checktext, sizeof(checktext), &key, iv,
+ AES_DECRYPT);
+
+ matches = 0;
+ for (n = 0; n < sizeof(checktext); ++n)
+ if (checktext[n] == plaintext[n])
+ ++matches;
+
+ /* Fail if there is more than 51% matching bytes */
+ if (!TEST_size_t_le(matches, ctsize / 2 + ctsize / 100))
+ testresult = 0;
+
+ /* Fail if the garble goes backwards */
+ if (!TEST_size_t_gt(matches, ctsize / 2))
+ testresult = 0;
+ return testresult;
+}
+
+static int test_bi_ige_enc_dec(void)
+{
+ AES_KEY key, key2;
+ unsigned char iv[AES_BLOCK_SIZE * 4];
+ unsigned char ciphertext[BIG_TEST_SIZE];
+ unsigned char checktext[BIG_TEST_SIZE];
+
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_set_encrypt_key(rkey, 8 * sizeof(rkey), &key);
+ AES_set_encrypt_key(rkey2, 8 * sizeof(rkey2), &key2);
+ AES_bi_ige_encrypt(plaintext, ciphertext, TEST_SIZE, &key, &key2, iv,
+ AES_ENCRYPT);
+
+ AES_set_decrypt_key(rkey, 8 * sizeof(rkey), &key);
+ AES_set_decrypt_key(rkey2, 8 * sizeof(rkey2), &key2);
+ AES_bi_ige_encrypt(ciphertext, checktext, TEST_SIZE, &key, &key2, iv,
+ AES_DECRYPT);
+
+ return TEST_mem_eq(checktext, TEST_SIZE, plaintext, TEST_SIZE);
+}
+
+static int test_bi_ige_garble1(void)
+{
+ AES_KEY key, key2;
+ unsigned char iv[AES_BLOCK_SIZE * 4];
+ unsigned char ciphertext[BIG_TEST_SIZE];
+ unsigned char checktext[BIG_TEST_SIZE];
+ unsigned int n;
+ size_t matches;
+
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_set_encrypt_key(rkey, 8 * sizeof(rkey), &key);
+ AES_set_encrypt_key(rkey2, 8 * sizeof(rkey2), &key2);
+ AES_ige_encrypt(plaintext, ciphertext, sizeof(plaintext), &key, iv,
+ AES_ENCRYPT);
+
+ /* corrupt halfway through */
+ ++ciphertext[sizeof(ciphertext) / 2];
+ AES_set_decrypt_key(rkey, 8 * sizeof(rkey), &key);
+ AES_set_decrypt_key(rkey2, 8 * sizeof(rkey2), &key2);
+ AES_ige_encrypt(ciphertext, checktext, sizeof(checktext), &key, iv,
+ AES_DECRYPT);
+
+ matches = 0;
+ for (n = 0; n < sizeof(checktext); ++n)
+ if (checktext[n] == plaintext[n])
+ ++matches;
+
+ /* Fail if there is more than 1% matching bytes */
+ return TEST_size_t_le(matches, sizeof(checktext) / 100);
+}
+
+static int test_bi_ige_garble2(void)
+{
+ AES_KEY key, key2;
+ unsigned char iv[AES_BLOCK_SIZE * 4];
+ unsigned char ciphertext[BIG_TEST_SIZE];
+ unsigned char checktext[BIG_TEST_SIZE];
+ unsigned int n;
+ size_t matches;
+
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_set_encrypt_key(rkey, 8 * sizeof(rkey), &key);
+ AES_set_encrypt_key(rkey2, 8 * sizeof(rkey2), &key2);
+ AES_ige_encrypt(plaintext, ciphertext, sizeof(plaintext), &key, iv,
+ AES_ENCRYPT);
+
+ /* corrupt right at the end */
+ ++ciphertext[sizeof(ciphertext) - 1];
+ AES_set_decrypt_key(rkey, 8 * sizeof(rkey), &key);
+ AES_set_decrypt_key(rkey2, 8 * sizeof(rkey2), &key2);
+ AES_ige_encrypt(ciphertext, checktext, sizeof(checktext), &key, iv,
+ AES_DECRYPT);
+
+ matches = 0;
+ for (n = 0; n < sizeof(checktext); ++n)
+ if (checktext[n] == plaintext[n])
+ ++matches;
+
+ /* Fail if there is more than 1% matching bytes */
+ return TEST_size_t_le(matches, sizeof(checktext) / 100);
+}
+
+static int test_bi_ige_garble3(void)
+{
+ AES_KEY key, key2;
+ unsigned char iv[AES_BLOCK_SIZE * 4];
+ unsigned char ciphertext[BIG_TEST_SIZE];
+ unsigned char checktext[BIG_TEST_SIZE];
+ unsigned int n;
+ size_t matches;
+
+ memcpy(iv, saved_iv, sizeof(iv));
+ AES_set_encrypt_key(rkey, 8 * sizeof(rkey), &key);
+ AES_set_encrypt_key(rkey2, 8 * sizeof(rkey2), &key2);
+ AES_ige_encrypt(plaintext, ciphertext, sizeof(plaintext), &key, iv,
+ AES_ENCRYPT);
+
+ /* corrupt right at the start */
+ ++ciphertext[0];
+ AES_set_decrypt_key(rkey, 8 * sizeof(rkey), &key);
+ AES_set_decrypt_key(rkey2, 8 * sizeof(rkey2), &key2);
+ AES_ige_encrypt(ciphertext, checktext, sizeof(checktext), &key, iv,
+ AES_DECRYPT);
+
+ matches = 0;
+ for (n = 0; n < sizeof(checktext); ++n)
+ if (checktext[n] == plaintext[n])
+ ++matches;
+
+ /* Fail if there is more than 1% matching bytes */
+ return TEST_size_t_le(matches, sizeof(checktext) / 100);
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ RAND_bytes(rkey, sizeof(rkey));
+ RAND_bytes(rkey2, sizeof(rkey2));
+ RAND_bytes(plaintext, sizeof(plaintext));
+ RAND_bytes(saved_iv, sizeof(saved_iv));
+
+ ADD_TEST(test_ige_enc_dec);
+ ADD_TEST(test_ige_enc_chaining);
+ ADD_TEST(test_ige_dec_chaining);
+ ADD_TEST(test_ige_garble_forwards);
+ ADD_TEST(test_bi_ige_enc_dec);
+ ADD_TEST(test_bi_ige_garble1);
+ ADD_TEST(test_bi_ige_garble2);
+ ADD_TEST(test_bi_ige_garble3);
+ ADD_ALL_TESTS(test_ige_vectors, OSSL_NELEM(ige_test_vectors));
+ ADD_ALL_TESTS(test_bi_ige_vectors, OSSL_NELEM(bi_ige_test_vectors));
+#endif
+ return 1;
+}
diff --git a/test/insta.priv.pem b/test/insta.priv.pem
new file mode 100644
index 000000000000..8612994d158c
--- /dev/null
+++ b/test/insta.priv.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEAoiNNxo5pwk1lD1em3madbpKz86GSYyGlQtd0ZhIX1tOUFo9l
+Fex7n5Osv0A99pKb+7EKqB9Ghg6mJ29kIUUmLACnfZJ/q+U6s9T4zFrYyXweUNJv
+QgbA2ojDPyVoRp2T1ekahPh4DpxPWNKfYECDRbrxkHMM3WiIqYFLU8hYvEMGSWRH
+HbnS/vG7MTaVDkR8d0zixTOp0fST5c1UUTqppYlThac/BG1kk3hyjIjz5o7lspfX
+3s/eAYgT9GhYHL6Uy4o4OqCleR39aVc0dMrrjb7hsmX6ecNwqJOE5AHHOG4Ti6Cb
+weSOcdH5PRFzdpao5rlTErsFHlUSTca4mfVeWwIDAQABAoIBAQCUYAZevBjgbP8c
+qTPVtsY/WBVB0Qwrl7CqmIy2k7wpJfoRIyx4ga8n+3ZMlredm9EO5ZdA/04EhAdd
+czyIjcU+42JjMduQLPgpda4xJLnauLDteYXDQHbgBePXN55TcQTG7skMAm2rwTOD
+r0uWQ7Nd7pP9gqu1OmJF7EJI68D4llCU1FrOrliwSDzHWP3p4QmCW3M9PQJ68xw1
+gE7X1QflROGivcFoRgcgeoJDzpxveGvPbEn6Q+05/FMRVxjqWhpxdZ9/SL7iRz1e
+45T+P9a8OLgTyErT3Lp/f/vuHA1tlbAYumhSnxXsb+nHi80aDcImOrNQHAp076Ik
+bkZ1NpOxAoGBAM3Ulgi2hUPdoAMFtHZF8eBHRzn+4uTfY2s33wObiUJQ8VbGDeJY
+ifCfOwLThiAXAqktrs7ItwWDYmzd5xPYGQeWoKcBEoZ+dvaaOe8H7TCMnjB3R3i1
+ACSDHo/3c+NfFOnPJtXL85jeAqGYH50uOtYmYaBVe6xASTBgNvP7snYHAoGBAMmo
+ZBQqgIhoqMRapGh6n4OpzH0Nt9ruOTJoteAfbLdAu7X+wAaMuxEaAmZQRDYj0lzX
+Ty8DlKSy7vfvXtghxMBEv4+dsYpagXcUOeEZSPfu1c3e253dAov6C0MdREKWBT7P
++NwPBowPy0CP/yBeHaw7d/P7/SYIoPXLGraGl6ANAoGBAMmmce7LUjgw0mjjl+8f
+i14cts08x3FO4YnTTOut34VW43oNwuBzuYBBn4CfVpHtuS+hj9cKkTQXib/6jj7E
+wZDLo0y6Ijodf9MNOaDSdS/RM9Frqlu5iBA9XR3SYnjpWAXQas2eaGLlblJ+RMqq
+1f2j0JVR6j3RJWL9gBj8B9TVAoGBALYZrs4bF1iXEhfGNoL2gIdX1QX0VluIFfR0
+ZBDQr87H0Ppm4qbHfMHTt+kGgKJXNMaL08CDvj4AKxWPfhk0XUS2kDmzUDi8w/5x
+MFcaCy+A6Gdw4OcsRfl7QaJIknSCnpf7HCI0G1hthsB1iBCFjMwUI50ap54p2pg6
+4ZOD9PYdAoGAERi5Hlq7+rJeDi3VunKHySqV9mvbOPNclEUmAdKi1yuu3INF1Zgv
+Lf432ZI/Ufk2g888ed5ZGE1IMULc2tgSIAMzdX4ZYI4uGFLkHWzSOM6a7NCeZuVt
+W+NgUYa2qsqFEd9kqaoDbNry+nPvLM7fWXvBoE4oNkeJhHjOIabBPvw=
+-----END RSA PRIVATE KEY-----
diff --git a/test/insta_ca.cert.pem b/test/insta_ca.cert.pem
new file mode 100644
index 000000000000..4b7e31b86de9
--- /dev/null
+++ b/test/insta_ca.cert.pem
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkDCCAnigAwIBAgIDCZU1MA0GCSqGSIb3DQEBBQUAMDoxCzAJBgNVBAYTAkZJ
+MRMwEQYDVQQKEwpJbnN0YSBEZW1vMRYwFAYDVQQDEw1JbnN0YSBEZW1vIENBMB4X
+DTA2MDEwMjA4NDgzOFoXDTI1MTIzMTA4NDgzOFowOjELMAkGA1UEBhMCRkkxEzAR
+BgNVBAoTCkluc3RhIERlbW8xFjAUBgNVBAMTDUluc3RhIERlbW8gQ0EwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDF57bSwj+hZnkgLyLtFsoNIN19qBv9
+GIoqFaCiPvw6VQgMXR15t+Z5sdYHdydGp875yJD4wDq2K7cjMoCXALxLeyp6dCY6
+WPC6Hk3QvZtMRuDAz8+0Nb5qaC4+O+7c7j1h/Gs8Jpj+TUuSkmtlCVIGPSWkWaQl
+FhLWeUnKRW8bj1CJQguV7igF19kGQKUZ/VZj+n5xIXKHc8njC1ZrS/s0IBFViQkZ
+63nTdNPLHQ4Xu8uKrbJbYEK1S4KVNH3L9yA4ut+brqX8n6OulTsKntvMdwNWZdor
+KoM15D3lmM7QUGDflJdSQ/qvBVTda+ccrT21sp4hdwwiU01vxQguT26JAgMBAAGj
+gZ4wgZswHwYDVR0jBBgwFoAUPHjduMGNV/UFKl5t4FhySvpEJWEwHQYDVR0OBBYE
+FDx43bjBjVf1BSpebeBYckr6RCVhMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8E
+CDAGAQH/AgEAMDUGCWCGSAGG+EIBDQQoFiZJbnN0YSBEZW1vIENBIC0gb25seSBm
+b3IgZGVtbyBwdXJwb3NlczANBgkqhkiG9w0BAQUFAAOCAQEAuVRmRimTxVTZMNXi
+3u4bRCq7GxJ4Lonx3mocxYiwBjCYwqn5dPAd4AHrA1HWYCEvIPo52FibpUNNljqH
+v7CSoEBg2f4If6cFtwudobqNvf8Z50CAnxlwpPy4k+EbXlh49/uZBtu8+Lc2Ss7L
+QaNHHiOeHxYeGX7pTcr6fnXQWAbbn4SLyqniW7ZTqjNJvC79Ym7KowMYzCbmozzv
+3xqElA+g/MLFfxn52c/vl/obOVk5eBf3f7V68qKL2IDEip3fyZyoelhfTypq944m
+sSJFQjoVzgd7ykgouEwOceOT8YMWWigNsWl/hsVJ03Ri7TxRX4+v8dMEbat+SsTL
+AqTTgQ==
+-----END CERTIFICATE-----
diff --git a/test/invalid-x509.cnf b/test/invalid-x509.cnf
new file mode 100644
index 000000000000..f982edb97975
--- /dev/null
+++ b/test/invalid-x509.cnf
@@ -0,0 +1,6 @@
+[ext]
+issuerSignTool = signTool
+sbgp-autonomousSysNum = AS
+issuingDistributionPoint = fullname
+sbgp-ipAddrBlock = IPv4-SAFI
+
diff --git a/test/keymgmt_internal_test.c b/test/keymgmt_internal_test.c
new file mode 100644
index 000000000000..ce2e458f8c31
--- /dev/null
+++ b/test/keymgmt_internal_test.c
@@ -0,0 +1,358 @@
+/*
+ * Copyright 2019-2022 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
+ */
+
+/*
+ * RSA low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <string.h>
+
+#include <openssl/bio.h>
+#include <openssl/bn.h>
+#include <openssl/rsa.h>
+#include <openssl/evp.h>
+#include <openssl/pem.h>
+#include <openssl/provider.h>
+#include <openssl/core_names.h>
+#include "internal/core.h"
+#include "internal/nelem.h"
+#include "crypto/evp.h" /* For the internal API */
+#include "testutil.h"
+
+typedef struct {
+ OSSL_LIB_CTX *ctx1;
+ OSSL_PROVIDER *prov1;
+ OSSL_LIB_CTX *ctx2;
+ OSSL_PROVIDER *prov2;
+} FIXTURE;
+
+/* Collected arguments */
+static const char *cert_filename = NULL;
+
+static void tear_down(FIXTURE *fixture)
+{
+ if (fixture != NULL) {
+ OSSL_PROVIDER_unload(fixture->prov1);
+ OSSL_PROVIDER_unload(fixture->prov2);
+ OSSL_LIB_CTX_free(fixture->ctx1);
+ OSSL_LIB_CTX_free(fixture->ctx2);
+ OPENSSL_free(fixture);
+ }
+}
+
+static FIXTURE *set_up(const char *testcase_name)
+{
+ FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture)))
+ || !TEST_ptr(fixture->ctx1 = OSSL_LIB_CTX_new())
+ || !TEST_ptr(fixture->prov1 = OSSL_PROVIDER_load(fixture->ctx1,
+ "default"))
+ || !TEST_ptr(fixture->ctx2 = OSSL_LIB_CTX_new())
+ || !TEST_ptr(fixture->prov2 = OSSL_PROVIDER_load(fixture->ctx2,
+ "default"))) {
+ tear_down(fixture);
+ return NULL;
+ }
+ return fixture;
+}
+
+/* Array indexes */
+#define N 0
+#define E 1
+#define D 2
+#define P 3
+#define Q 4
+#define F3 5 /* Extra factor */
+#define DP 6
+#define DQ 7
+#define E3 8 /* Extra exponent */
+#define QINV 9
+#define C2 10 /* Extra coefficient */
+
+/*
+ * We have to do this because OSSL_PARAM_get_ulong() can't handle params
+ * holding data that isn't exactly sizeof(uint32_t) or sizeof(uint64_t),
+ * and because the other end deals with BIGNUM, the resulting param might
+ * be any size. In this particular test, we know that the expected data
+ * fits within an unsigned long, and we want to get the data in that form
+ * to make testing of values easier.
+ */
+static int get_ulong_via_BN(const OSSL_PARAM *p, unsigned long *goal)
+{
+ BIGNUM *n = NULL;
+ int ret = 1; /* Ever so hopeful */
+
+ if (!TEST_true(OSSL_PARAM_get_BN(p, &n))
+ || !TEST_int_ge(BN_bn2nativepad(n, (unsigned char *)goal, sizeof(*goal)), 0))
+ ret = 0;
+ BN_free(n);
+ return ret;
+}
+
+static int export_cb(const OSSL_PARAM *params, void *arg)
+{
+ unsigned long *keydata = arg;
+ const OSSL_PARAM *p = NULL;
+
+ if (keydata == NULL)
+ return 0;
+
+ if (!TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_N))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[N]))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_E))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[E]))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_D))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[D])))
+ return 0;
+
+ if (!TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_FACTOR1))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[P]))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_FACTOR2))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[Q]))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_FACTOR3))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[F3])))
+ return 0;
+
+ if (!TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_EXPONENT1))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[DP]))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_EXPONENT2))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[DQ]))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_EXPONENT3))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[E3])))
+ return 0;
+
+ if (!TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_COEFFICIENT1))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[QINV]))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_RSA_COEFFICIENT2))
+ || !TEST_true(get_ulong_via_BN(p, &keydata[C2])))
+ return 0;
+
+ return 1;
+}
+
+static int test_pass_rsa(FIXTURE *fixture)
+{
+ size_t i;
+ int ret = 0;
+ RSA *rsa = NULL;
+ BIGNUM *bn1 = NULL, *bn2 = NULL, *bn3 = NULL;
+ EVP_PKEY *pk = NULL, *dup_pk = NULL;
+ EVP_KEYMGMT *km = NULL, *km1 = NULL, *km2 = NULL, *km3 = NULL;
+ void *provkey = NULL, *provkey2 = NULL;
+ BIGNUM *bn_primes[1] = { NULL };
+ BIGNUM *bn_exps[1] = { NULL };
+ BIGNUM *bn_coeffs[1] = { NULL };
+ /*
+ * 32-bit RSA key, extracted from this command,
+ * executed with OpenSSL 1.0.2:
+ * An extra factor was added just for testing purposes.
+ *
+ * openssl genrsa 32 | openssl rsa -text
+ */
+ static BN_ULONG expected[] = {
+ 0xbc747fc5, /* N */
+ 0x10001, /* E */
+ 0x7b133399, /* D */
+ 0xe963, /* P */
+ 0xceb7, /* Q */
+ 1, /* F3 */
+ 0x8599, /* DP */
+ 0xbd87, /* DQ */
+ 2, /* E3 */
+ 0xcc3b, /* QINV */
+ 3, /* C3 */
+ 0 /* Extra, should remain zero */
+ };
+ static unsigned long keydata[OSSL_NELEM(expected)] = { 0, };
+
+ if (!TEST_ptr(rsa = RSA_new()))
+ goto err;
+
+ if (!TEST_ptr(bn1 = BN_new())
+ || !TEST_true(BN_set_word(bn1, expected[N]))
+ || !TEST_ptr(bn2 = BN_new())
+ || !TEST_true(BN_set_word(bn2, expected[E]))
+ || !TEST_ptr(bn3 = BN_new())
+ || !TEST_true(BN_set_word(bn3, expected[D]))
+ || !TEST_true(RSA_set0_key(rsa, bn1, bn2, bn3)))
+ goto err;
+
+ if (!TEST_ptr(bn1 = BN_new())
+ || !TEST_true(BN_set_word(bn1, expected[P]))
+ || !TEST_ptr(bn2 = BN_new())
+ || !TEST_true(BN_set_word(bn2, expected[Q]))
+ || !TEST_true(RSA_set0_factors(rsa, bn1, bn2)))
+ goto err;
+
+ if (!TEST_ptr(bn1 = BN_new())
+ || !TEST_true(BN_set_word(bn1, expected[DP]))
+ || !TEST_ptr(bn2 = BN_new())
+ || !TEST_true(BN_set_word(bn2, expected[DQ]))
+ || !TEST_ptr(bn3 = BN_new())
+ || !TEST_true(BN_set_word(bn3, expected[QINV]))
+ || !TEST_true(RSA_set0_crt_params(rsa, bn1, bn2, bn3)))
+ goto err;
+ bn1 = bn2 = bn3 = NULL;
+
+ if (!TEST_ptr(bn_primes[0] = BN_new())
+ || !TEST_true(BN_set_word(bn_primes[0], expected[F3]))
+ || !TEST_ptr(bn_exps[0] = BN_new())
+ || !TEST_true(BN_set_word(bn_exps[0], expected[E3]))
+ || !TEST_ptr(bn_coeffs[0] = BN_new())
+ || !TEST_true(BN_set_word(bn_coeffs[0], expected[C2]))
+ || !TEST_true(RSA_set0_multi_prime_params(rsa, bn_primes, bn_exps,
+ bn_coeffs, 1)))
+ goto err;
+
+ if (!TEST_ptr(pk = EVP_PKEY_new())
+ || !TEST_true(EVP_PKEY_assign_RSA(pk, rsa)))
+ goto err;
+ rsa = NULL;
+
+ if (!TEST_ptr(km1 = EVP_KEYMGMT_fetch(fixture->ctx1, "RSA", NULL))
+ || !TEST_ptr(km2 = EVP_KEYMGMT_fetch(fixture->ctx2, "RSA", NULL))
+ || !TEST_ptr(km3 = EVP_KEYMGMT_fetch(fixture->ctx1, "RSA-PSS", NULL))
+ || !TEST_ptr_ne(km1, km2))
+ goto err;
+
+ while (dup_pk == NULL) {
+ ret = 0;
+ km = km3;
+ /* Check that we can't export an RSA key into an RSA-PSS keymanager */
+ if (!TEST_ptr_null(provkey2 = evp_pkey_export_to_provider(pk, NULL,
+ &km,
+ NULL)))
+ goto err;
+
+ if (!TEST_ptr(provkey = evp_pkey_export_to_provider(pk, NULL, &km1,
+ NULL))
+ || !TEST_true(evp_keymgmt_export(km2, provkey,
+ OSSL_KEYMGMT_SELECT_KEYPAIR,
+ &export_cb, keydata)))
+ goto err;
+
+ /*
+ * At this point, the hope is that keydata will have all the numbers
+ * from the key.
+ */
+
+ for (i = 0; i < OSSL_NELEM(expected); i++) {
+ int rv = TEST_int_eq(expected[i], keydata[i]);
+
+ if (!rv)
+ TEST_info("i = %zu", i);
+ else
+ ret++;
+ }
+
+ ret = (ret == OSSL_NELEM(expected));
+ if (!ret || !TEST_ptr(dup_pk = EVP_PKEY_dup(pk)))
+ goto err;
+
+ ret = TEST_int_eq(EVP_PKEY_eq(pk, dup_pk), 1);
+ EVP_PKEY_free(pk);
+ pk = dup_pk;
+ if (!ret)
+ goto err;
+ }
+
+ err:
+ RSA_free(rsa);
+ BN_free(bn1);
+ BN_free(bn2);
+ BN_free(bn3);
+ EVP_PKEY_free(pk);
+ EVP_KEYMGMT_free(km1);
+ EVP_KEYMGMT_free(km2);
+ EVP_KEYMGMT_free(km3);
+
+ return ret;
+}
+
+static int (*tests[])(FIXTURE *) = {
+ test_pass_rsa
+};
+
+static int test_pass_key(int n)
+{
+ SETUP_TEST_FIXTURE(FIXTURE, set_up);
+ EXECUTE_TEST(tests[n], tear_down);
+ return result;
+}
+
+static int test_evp_pkey_export_to_provider(int n)
+{
+ OSSL_LIB_CTX *libctx = NULL;
+ OSSL_PROVIDER *prov = NULL;
+ X509 *cert = NULL;
+ BIO *bio = NULL;
+ X509_PUBKEY *pubkey = NULL;
+ EVP_KEYMGMT *keymgmt = NULL;
+ EVP_PKEY *pkey = NULL;
+ void *keydata = NULL;
+ int ret = 0;
+
+ if (!TEST_ptr(libctx = OSSL_LIB_CTX_new())
+ || !TEST_ptr(prov = OSSL_PROVIDER_load(libctx, "default")))
+ goto end;
+
+ if ((bio = BIO_new_file(cert_filename, "r")) == NULL) {
+ TEST_error("Couldn't open '%s' for reading\n", cert_filename);
+ TEST_openssl_errors();
+ goto end;
+ }
+
+ if ((cert = PEM_read_bio_X509(bio, NULL, NULL, NULL)) == NULL) {
+ TEST_error("'%s' doesn't appear to be a X.509 certificate in PEM format\n",
+ cert_filename);
+ TEST_openssl_errors();
+ goto end;
+ }
+
+ pubkey = X509_get_X509_PUBKEY(cert);
+ pkey = X509_PUBKEY_get0(pubkey);
+
+ if (n == 0) {
+ if (!TEST_ptr(keydata = evp_pkey_export_to_provider(pkey, NULL,
+ NULL, NULL)))
+ goto end;
+ } else if (n == 1) {
+ if (!TEST_ptr(keydata = evp_pkey_export_to_provider(pkey, NULL,
+ &keymgmt, NULL)))
+ goto end;
+ } else {
+ keymgmt = EVP_KEYMGMT_fetch(libctx, "RSA", NULL);
+
+ if (!TEST_ptr(keydata = evp_pkey_export_to_provider(pkey, NULL,
+ &keymgmt, NULL)))
+ goto end;
+ }
+
+ ret = 1;
+ end:
+ BIO_free(bio);
+ X509_free(cert);
+ EVP_KEYMGMT_free(keymgmt);
+ OSSL_PROVIDER_unload(prov);
+ OSSL_LIB_CTX_free(libctx);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ if (!TEST_ptr(cert_filename = test_get_argument(0)))
+ return 0;
+
+ ADD_ALL_TESTS(test_pass_key, 1);
+ ADD_ALL_TESTS(test_evp_pkey_export_to_provider, 3);
+ return 1;
+}
diff --git a/test/legacy.cnf b/test/legacy.cnf
new file mode 100644
index 000000000000..ffbcbd16ba1b
--- /dev/null
+++ b/test/legacy.cnf
@@ -0,0 +1,13 @@
+openssl_conf = openssl_init
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+[openssl_init]
+providers = provider_sect
+
+[provider_sect]
+legacy = legacy_sect
+
+[legacy_sect]
+activate = 1
diff --git a/test/lhash_test.c b/test/lhash_test.c
new file mode 100644
index 000000000000..537ae1876c1d
--- /dev/null
+++ b/test/lhash_test.c
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2017, Oracle and/or its affiliates. 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 <string.h>
+
+#include <openssl/opensslconf.h>
+#include <openssl/lhash.h>
+#include <openssl/err.h>
+#include <openssl/crypto.h>
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+/*
+ * The macros below generate unused functions which error out one of the clang
+ * builds. We disable this check here.
+ */
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
+DEFINE_LHASH_OF(int);
+
+static int int_tests[] = { 65537, 13, 1, 3, -5, 6, 7, 4, -10, -12, -14, 22, 9,
+ -17, 16, 17, -23, 35, 37, 173, 11 };
+static const unsigned int n_int_tests = OSSL_NELEM(int_tests);
+static short int_found[OSSL_NELEM(int_tests)];
+static short int_not_found;
+
+static unsigned long int int_hash(const int *p)
+{
+ return 3 & *p; /* To force collisions */
+}
+
+static int int_cmp(const int *p, const int *q)
+{
+ return *p != *q;
+}
+
+static int int_find(int n)
+{
+ unsigned int i;
+
+ for (i = 0; i < n_int_tests; i++)
+ if (int_tests[i] == n)
+ return i;
+ return -1;
+}
+
+static void int_doall(int *v)
+{
+ const int n = int_find(*v);
+
+ if (n < 0)
+ int_not_found++;
+ else
+ int_found[n]++;
+}
+
+static void int_doall_arg(int *p, short *f)
+{
+ const int n = int_find(*p);
+
+ if (n < 0)
+ int_not_found++;
+ else
+ f[n]++;
+}
+
+IMPLEMENT_LHASH_DOALL_ARG(int, short);
+
+static int test_int_lhash(void)
+{
+ static struct {
+ int data;
+ int null;
+ } dels[] = {
+ { 65537, 0 },
+ { 173, 0 },
+ { 999, 1 },
+ { 37, 0 },
+ { 1, 0 },
+ { 34, 1 }
+ };
+ const unsigned int n_dels = OSSL_NELEM(dels);
+ LHASH_OF(int) *h = lh_int_new(&int_hash, &int_cmp);
+ unsigned int i;
+ int testresult = 0, j, *p;
+
+ if (!TEST_ptr(h))
+ goto end;
+
+ /* insert */
+ for (i = 0; i < n_int_tests; i++)
+ if (!TEST_ptr_null(lh_int_insert(h, int_tests + i))) {
+ TEST_info("int insert %d", i);
+ goto end;
+ }
+
+ /* num_items */
+ if (!TEST_int_eq(lh_int_num_items(h), n_int_tests))
+ goto end;
+
+ /* retrieve */
+ for (i = 0; i < n_int_tests; i++)
+ if (!TEST_int_eq(*lh_int_retrieve(h, int_tests + i), int_tests[i])) {
+ TEST_info("lhash int retrieve value %d", i);
+ goto end;
+ }
+ for (i = 0; i < n_int_tests; i++)
+ if (!TEST_ptr_eq(lh_int_retrieve(h, int_tests + i), int_tests + i)) {
+ TEST_info("lhash int retrieve address %d", i);
+ goto end;
+ }
+ j = 1;
+ if (!TEST_ptr_eq(lh_int_retrieve(h, &j), int_tests + 2))
+ goto end;
+
+ /* replace */
+ j = 13;
+ if (!TEST_ptr(p = lh_int_insert(h, &j)))
+ goto end;
+ if (!TEST_ptr_eq(p, int_tests + 1))
+ goto end;
+ if (!TEST_ptr_eq(lh_int_retrieve(h, int_tests + 1), &j))
+ goto end;
+
+ /* do_all */
+ memset(int_found, 0, sizeof(int_found));
+ int_not_found = 0;
+ lh_int_doall(h, &int_doall);
+ if (!TEST_int_eq(int_not_found, 0)) {
+ TEST_info("lhash int doall encountered a not found condition");
+ goto end;
+ }
+ for (i = 0; i < n_int_tests; i++)
+ if (!TEST_int_eq(int_found[i], 1)) {
+ TEST_info("lhash int doall %d", i);
+ goto end;
+ }
+
+ /* do_all_arg */
+ memset(int_found, 0, sizeof(int_found));
+ int_not_found = 0;
+ lh_int_doall_short(h, int_doall_arg, int_found);
+ if (!TEST_int_eq(int_not_found, 0)) {
+ TEST_info("lhash int doall arg encountered a not found condition");
+ goto end;
+ }
+ for (i = 0; i < n_int_tests; i++)
+ if (!TEST_int_eq(int_found[i], 1)) {
+ TEST_info("lhash int doall arg %d", i);
+ goto end;
+ }
+
+ /* delete */
+ for (i = 0; i < n_dels; i++) {
+ const int b = lh_int_delete(h, &dels[i].data) == NULL;
+ if (!TEST_int_eq(b ^ dels[i].null, 0)) {
+ TEST_info("lhash int delete %d", i);
+ goto end;
+ }
+ }
+
+ /* error */
+ if (!TEST_int_eq(lh_int_error(h), 0))
+ goto end;
+
+ testresult = 1;
+end:
+ lh_int_free(h);
+ return testresult;
+}
+
+static unsigned long int stress_hash(const int *p)
+{
+ return *p;
+}
+
+static int test_stress(void)
+{
+ LHASH_OF(int) *h = lh_int_new(&stress_hash, &int_cmp);
+ const unsigned int n = 2500000;
+ unsigned int i;
+ int testresult = 0, *p;
+
+ if (!TEST_ptr(h))
+ goto end;
+
+ /* insert */
+ for (i = 0; i < n; i++) {
+ p = OPENSSL_malloc(sizeof(i));
+ if (!TEST_ptr(p)) {
+ TEST_info("lhash stress out of memory %d", i);
+ goto end;
+ }
+ *p = 3 * i + 1;
+ lh_int_insert(h, p);
+ }
+
+ /* num_items */
+ if (!TEST_int_eq(lh_int_num_items(h), n))
+ goto end;
+
+ TEST_info("hash full statistics:");
+ OPENSSL_LH_stats_bio((OPENSSL_LHASH *)h, bio_err);
+ TEST_note("hash full node usage:");
+ OPENSSL_LH_node_usage_stats_bio((OPENSSL_LHASH *)h, bio_err);
+
+ /* delete in a different order */
+ for (i = 0; i < n; i++) {
+ const int j = (7 * i + 4) % n * 3 + 1;
+
+ if (!TEST_ptr(p = lh_int_delete(h, &j))) {
+ TEST_info("lhash stress delete %d\n", i);
+ goto end;
+ }
+ if (!TEST_int_eq(*p, j)) {
+ TEST_info("lhash stress bad value %d", i);
+ goto end;
+ }
+ OPENSSL_free(p);
+ }
+
+ TEST_info("hash empty statistics:");
+ OPENSSL_LH_stats_bio((OPENSSL_LHASH *)h, bio_err);
+ TEST_note("hash empty node usage:");
+ OPENSSL_LH_node_usage_stats_bio((OPENSSL_LHASH *)h, bio_err);
+
+ testresult = 1;
+end:
+ lh_int_free(h);
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_int_lhash);
+ ADD_TEST(test_stress);
+ return 1;
+}
diff --git a/test/localetest.c b/test/localetest.c
new file mode 100644
index 000000000000..9df90ed901ea
--- /dev/null
+++ b/test/localetest.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2022 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 <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <openssl/x509.h>
+#include "testutil.h"
+#include "testutil/output.h"
+
+#ifndef OPENSSL_NO_LOCALE
+# include <locale.h>
+# ifdef OPENSSL_SYS_MACOSX
+# include <xlocale.h>
+# endif
+
+int setup_tests(void)
+{
+ const unsigned char der_bytes[] = {
+ 0x30, 0x82, 0x03, 0x09, 0x30, 0x82, 0x01, 0xf1, 0xa0, 0x03, 0x02, 0x01,
+ 0x02, 0x02, 0x14, 0x08, 0xe0, 0x8c, 0xd3, 0xf3, 0xbf, 0x2c, 0xf2, 0x0d,
+ 0x0a, 0x75, 0xd1, 0xe8, 0xea, 0xbe, 0x70, 0x61, 0xd9, 0x67, 0xf9, 0x30,
+ 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
+ 0x05, 0x00, 0x30, 0x14, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04,
+ 0x03, 0x0c, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74,
+ 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x34, 0x31, 0x31, 0x31, 0x34,
+ 0x31, 0x39, 0x35, 0x37, 0x5a, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x35, 0x31,
+ 0x31, 0x31, 0x34, 0x31, 0x39, 0x35, 0x37, 0x5a, 0x30, 0x14, 0x31, 0x12,
+ 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x09, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d,
+ 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
+ 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82,
+ 0x01, 0x01, 0x00, 0xc3, 0x1f, 0x5c, 0x56, 0x46, 0x8d, 0x69, 0xb6, 0x48,
+ 0x3c, 0xbf, 0xe2, 0x0f, 0xa7, 0x4a, 0x44, 0x72, 0x74, 0x36, 0xfe, 0xe8,
+ 0x2f, 0x10, 0x4a, 0xe9, 0x46, 0x45, 0x72, 0x5e, 0x48, 0xdd, 0x75, 0xab,
+ 0xd9, 0x63, 0x91, 0x37, 0x93, 0x46, 0x28, 0x7e, 0x45, 0x94, 0x4b, 0x8a,
+ 0xd5, 0x05, 0x2b, 0x9a, 0x01, 0x96, 0x30, 0xde, 0xcc, 0x14, 0x2d, 0x06,
+ 0x09, 0x1b, 0x7d, 0x50, 0x14, 0x99, 0x36, 0x6b, 0x97, 0x6e, 0xc9, 0xb1,
+ 0x69, 0x70, 0xcd, 0x9b, 0x74, 0x24, 0x9a, 0xe2, 0xd4, 0xc0, 0x1e, 0xbc,
+ 0xec, 0xf6, 0x7a, 0xbb, 0xa0, 0x53, 0x93, 0xf8, 0x68, 0x9a, 0x18, 0xa1,
+ 0xa1, 0x5c, 0x47, 0x93, 0xd1, 0x4c, 0x36, 0x8c, 0x00, 0xb3, 0x66, 0xda,
+ 0xf1, 0x05, 0xb2, 0x3a, 0xad, 0x7e, 0x4b, 0xf3, 0xd3, 0x93, 0xfa, 0x59,
+ 0x09, 0x9c, 0x60, 0x37, 0x69, 0x61, 0xe8, 0x5a, 0x33, 0xc6, 0xb2, 0x1a,
+ 0xba, 0x36, 0xe2, 0xb3, 0x58, 0xe9, 0x73, 0x01, 0x2d, 0x36, 0x48, 0x36,
+ 0x94, 0xe4, 0xb2, 0xa4, 0x5b, 0xdf, 0x3d, 0x5f, 0x62, 0x9f, 0xd9, 0xf3,
+ 0x24, 0x0c, 0xf0, 0x2f, 0x71, 0x44, 0x79, 0x13, 0x70, 0x95, 0xa7, 0xbe,
+ 0xea, 0x0a, 0x08, 0x0a, 0xa6, 0x4b, 0xe9, 0x58, 0x6b, 0xa4, 0xc2, 0xed,
+ 0x74, 0x1e, 0xb0, 0x3b, 0x59, 0xd5, 0xe6, 0xdb, 0x8f, 0x58, 0x6a, 0xa3,
+ 0x7d, 0x52, 0x40, 0xec, 0x72, 0xb7, 0xba, 0x7e, 0x30, 0x9d, 0x12, 0x57,
+ 0xf2, 0x48, 0xae, 0x80, 0x0d, 0x0a, 0xf4, 0xfd, 0x24, 0xed, 0xd8, 0x05,
+ 0xb2, 0x96, 0x44, 0x02, 0x3e, 0x6e, 0x25, 0xb0, 0xc4, 0x93, 0xda, 0xfe,
+ 0x78, 0xd9, 0xbb, 0xd2, 0x71, 0x69, 0x70, 0x7f, 0xba, 0xf7, 0xb0, 0x4f,
+ 0x14, 0xf7, 0x98, 0x71, 0x01, 0x6c, 0xec, 0x6f, 0x76, 0x03, 0x59, 0xff,
+ 0xe2, 0xba, 0x8d, 0xd9, 0x21, 0x08, 0xb3, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04,
+ 0x16, 0x04, 0x14, 0x59, 0xb8, 0x6e, 0x1a, 0x72, 0xe9, 0x27, 0x1e, 0xbf,
+ 0x80, 0x87, 0x0f, 0xa9, 0xd0, 0x06, 0x6a, 0x11, 0x30, 0x77, 0x8e, 0x30,
+ 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14,
+ 0x59, 0xb8, 0x6e, 0x1a, 0x72, 0xe9, 0x27, 0x1e, 0xbf, 0x80, 0x87, 0x0f,
+ 0xa9, 0xd0, 0x06, 0x6a, 0x11, 0x30, 0x77, 0x8e, 0x30, 0x0f, 0x06, 0x03,
+ 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01,
+ 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
+ 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x98, 0x76, 0x9e,
+ 0x3c, 0xfc, 0x3f, 0x58, 0xe8, 0xf2, 0x1f, 0x2e, 0x11, 0xa2, 0x59, 0xfa,
+ 0x27, 0xb5, 0xec, 0x9d, 0x97, 0x05, 0x06, 0x2c, 0x95, 0xa5, 0x28, 0x88,
+ 0x86, 0xeb, 0x4e, 0x8a, 0x62, 0xe9, 0x87, 0x78, 0xd8, 0x18, 0x22, 0x4e,
+ 0xb1, 0x8d, 0x46, 0x4a, 0x4c, 0x6e, 0x7c, 0x53, 0x62, 0x2c, 0xf2, 0x7a,
+ 0x95, 0xa0, 0x1a, 0x30, 0x18, 0x6a, 0x31, 0x6f, 0x3f, 0x55, 0x25, 0x9f,
+ 0x67, 0x60, 0x68, 0x99, 0x0f, 0x41, 0x09, 0xc8, 0xe2, 0x04, 0x33, 0x22,
+ 0x1a, 0xe9, 0xf3, 0xae, 0xce, 0xb6, 0x83, 0x64, 0x78, 0x66, 0x14, 0xc9,
+ 0x54, 0xc8, 0x34, 0x70, 0x96, 0xaf, 0x16, 0xcd, 0xb8, 0xdf, 0x81, 0x7e,
+ 0xf0, 0xa6, 0x7d, 0xc1, 0x13, 0xb2, 0x76, 0x3a, 0xd5, 0x7e, 0x68, 0x8c,
+ 0xd5, 0x00, 0x70, 0x82, 0x23, 0x7e, 0x5e, 0xc9, 0x31, 0x2f, 0x33, 0x54,
+ 0xaa, 0xaf, 0xcd, 0xe9, 0x38, 0x9a, 0x23, 0x53, 0xad, 0x4e, 0x72, 0xa7,
+ 0x6f, 0x47, 0x60, 0xc9, 0xd3, 0x06, 0x9b, 0x7a, 0x21, 0xc6, 0xe9, 0xdb,
+ 0x3c, 0xaa, 0xc0, 0x21, 0x29, 0x5f, 0x44, 0x6a, 0x45, 0x90, 0x73, 0x5e,
+ 0x6d, 0x78, 0x82, 0xcb, 0x42, 0xe6, 0xba, 0x67, 0xb2, 0xe6, 0xa2, 0x15,
+ 0x04, 0xea, 0x69, 0xae, 0x3e, 0xc0, 0x0c, 0x10, 0x99, 0xec, 0xa9, 0xb0,
+ 0x7e, 0xe8, 0x94, 0xe2, 0xf3, 0xaf, 0xf7, 0x9f, 0x65, 0xe7, 0xd7, 0xe2,
+ 0x49, 0xfa, 0x52, 0x7d, 0xb5, 0xfd, 0xa0, 0xa5, 0xe0, 0x49, 0xa7, 0x3d,
+ 0x94, 0x20, 0x2d, 0xec, 0x8c, 0x22, 0xa5, 0xa4, 0x43, 0xfa, 0x7e, 0xd0,
+ 0x50, 0x21, 0xb8, 0x67, 0x18, 0x44, 0x69, 0x8f, 0xdd, 0x47, 0x41, 0xc6,
+ 0x35, 0xe0, 0xe9, 0x2e, 0x41, 0xa9, 0x6f, 0x41, 0xee, 0xb9, 0xbd, 0x45,
+ 0xf3, 0x88, 0xc1, 0x23, 0x35, 0x96, 0xba, 0xf8, 0xcd, 0x4b, 0x83, 0x73,
+ 0x5f
+};
+
+ char str1[] = "SubjectPublicKeyInfo", str2[] = "subjectpublickeyinfo";
+ int res;
+ X509 *cert = NULL;
+ X509_PUBKEY *cert_pubkey = NULL;
+ const unsigned char *p = der_bytes;
+
+ if (setlocale(LC_ALL, "") == NULL)
+ return TEST_skip("Cannot set the locale necessary for test");
+
+ res = strcasecmp(str1, str2);
+ TEST_note("Case-insensitive comparison via strcasecmp in current locale %s\n", res ? "failed" : "succeeded");
+
+ if (!TEST_false(OPENSSL_strcasecmp(str1, str2)))
+ return 0;
+
+ cert = d2i_X509(NULL, &p, sizeof(der_bytes));
+ if (!TEST_ptr(cert))
+ return 0;
+
+ cert_pubkey = X509_get_X509_PUBKEY(cert);
+ if (!TEST_ptr(cert_pubkey)) {
+ X509_free(cert);
+ return 0;
+ }
+
+ if (!TEST_ptr(X509_PUBKEY_get0(cert_pubkey))) {
+ X509_free(cert);
+ return 0;
+ }
+
+ X509_free(cert);
+ return 1;
+}
+#else
+int setup_tests(void)
+{
+ return TEST_skip("Locale support not available");
+}
+#endif /* OPENSSL_NO_LOCALE */
+void cleanup_tests(void)
+{
+}
diff --git a/test/mdc2_internal_test.c b/test/mdc2_internal_test.c
new file mode 100644
index 000000000000..56f464b1f3eb
--- /dev/null
+++ b/test/mdc2_internal_test.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2016-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
+ */
+
+/* Internal tests for the mdc2 module */
+
+/*
+ * MDC2 low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/mdc2.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+
+typedef struct {
+ const char *input;
+ const unsigned char expected[MDC2_DIGEST_LENGTH];
+} TESTDATA;
+
+
+/**********************************************************************
+ *
+ * Test driver
+ *
+ ***/
+
+static TESTDATA tests[] = {
+ {
+ "Now is the time for all ",
+ {
+ 0x42, 0xE5, 0x0C, 0xD2, 0x24, 0xBA, 0xCE, 0xBA,
+ 0x76, 0x0B, 0xDD, 0x2B, 0xD4, 0x09, 0x28, 0x1A
+ }
+ }
+};
+
+/**********************************************************************
+ *
+ * Test of mdc2 internal functions
+ *
+ ***/
+
+static int test_mdc2(int idx)
+{
+ unsigned char md[MDC2_DIGEST_LENGTH];
+ MDC2_CTX c;
+ const TESTDATA testdata = tests[idx];
+
+ MDC2_Init(&c);
+ MDC2_Update(&c, (const unsigned char *)testdata.input,
+ strlen(testdata.input));
+ MDC2_Final(&(md[0]), &c);
+
+ if (!TEST_mem_eq(testdata.expected, MDC2_DIGEST_LENGTH,
+ md, MDC2_DIGEST_LENGTH)) {
+ TEST_info("mdc2 test %d: unexpected output", idx);
+ return 0;
+ }
+
+ return 1;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_mdc2, OSSL_NELEM(tests));
+ return 1;
+}
diff --git a/test/mdc2test.c b/test/mdc2test.c
new file mode 100644
index 000000000000..619574fb048e
--- /dev/null
+++ b/test/mdc2test.c
@@ -0,0 +1,95 @@
+/*
+ * 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
+ */
+
+/*
+ * MDC2 low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <string.h>
+#include <openssl/provider.h>
+#include <openssl/params.h>
+#include <openssl/types.h>
+#include <openssl/core_names.h>
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#if defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_MDC2)
+# define OPENSSL_NO_MDC2
+#endif
+
+#ifndef OPENSSL_NO_MDC2
+# include <openssl/evp.h>
+# include <openssl/mdc2.h>
+
+# ifdef CHARSET_EBCDIC
+# include <openssl/ebcdic.h>
+# endif
+
+static unsigned char pad1[16] = {
+ 0x42, 0xE5, 0x0C, 0xD2, 0x24, 0xBA, 0xCE, 0xBA,
+ 0x76, 0x0B, 0xDD, 0x2B, 0xD4, 0x09, 0x28, 0x1A
+};
+
+static unsigned char pad2[16] = {
+ 0x2E, 0x46, 0x79, 0xB5, 0xAD, 0xD9, 0xCA, 0x75,
+ 0x35, 0xD8, 0x7A, 0xFE, 0xAB, 0x33, 0xBE, 0xE2
+};
+
+static int test_mdc2(void)
+{
+ int testresult = 0;
+ unsigned int pad_type = 2;
+ unsigned char md[MDC2_DIGEST_LENGTH];
+ EVP_MD_CTX *c;
+ static char text[] = "Now is the time for all ";
+ size_t tlen = strlen(text), i = 0;
+ OSSL_PROVIDER *prov = NULL;
+ OSSL_PARAM params[2];
+
+ params[i++] = OSSL_PARAM_construct_uint(OSSL_DIGEST_PARAM_PAD_TYPE,
+ &pad_type),
+ params[i++] = OSSL_PARAM_construct_end();
+
+ prov = OSSL_PROVIDER_load(NULL, "legacy");
+# ifdef CHARSET_EBCDIC
+ ebcdic2ascii(text, text, tlen);
+# endif
+
+ c = EVP_MD_CTX_new();
+ if (!TEST_ptr(c)
+ || !TEST_true(EVP_DigestInit_ex(c, EVP_mdc2(), NULL))
+ || !TEST_true(EVP_DigestUpdate(c, (unsigned char *)text, tlen))
+ || !TEST_true(EVP_DigestFinal_ex(c, &(md[0]), NULL))
+ || !TEST_mem_eq(md, MDC2_DIGEST_LENGTH, pad1, MDC2_DIGEST_LENGTH)
+ || !TEST_true(EVP_DigestInit_ex(c, EVP_mdc2(), NULL)))
+ goto end;
+
+ if (!TEST_int_gt(EVP_MD_CTX_set_params(c, params), 0)
+ || !TEST_true(EVP_DigestUpdate(c, (unsigned char *)text, tlen))
+ || !TEST_true(EVP_DigestFinal_ex(c, &(md[0]), NULL))
+ || !TEST_mem_eq(md, MDC2_DIGEST_LENGTH, pad2, MDC2_DIGEST_LENGTH))
+ goto end;
+
+ testresult = 1;
+ end:
+ EVP_MD_CTX_free(c);
+ OSSL_PROVIDER_unload(prov);
+ return testresult;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_MDC2
+ ADD_TEST(test_mdc2);
+#endif
+ return 1;
+}
diff --git a/test/memleaktest.c b/test/memleaktest.c
new file mode 100644
index 000000000000..97827b8e9cd3
--- /dev/null
+++ b/test/memleaktest.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/bio.h>
+#include <openssl/crypto.h>
+
+#include "testutil.h"
+
+/* __has_feature is a clang-ism, while __SANITIZE_ADDRESS__ is a gcc-ism */
+#if defined(__has_feature)
+# if __has_feature(address_sanitizer)
+# define __SANITIZE_ADDRESS__ 1
+# endif
+#endif
+/* If __SANITIZE_ADDRESS__ isn't defined, define it to be false */
+/* Leak detection is not yet supported with MSVC on Windows, so */
+/* set __SANITIZE_ADDRESS__ to false in this case as well. */
+#if !defined(__SANITIZE_ADDRESS__) || defined(_MSC_VER)
+# undef __SANITIZE_ADDRESS__
+# define __SANITIZE_ADDRESS__ 0
+#endif
+
+/*
+ * We use a proper main function here instead of the custom main from the
+ * test framework to avoid CRYPTO_mem_leaks stuff.
+ */
+
+int main(int argc, char *argv[])
+{
+#if __SANITIZE_ADDRESS__
+ int exitcode = EXIT_SUCCESS;
+#else
+ /*
+ * When we don't sanitize, we set the exit code to what we would expect
+ * to get when we are sanitizing. This makes it easy for wrapper scripts
+ * to detect that we get the result we expect.
+ */
+ int exitcode = EXIT_FAILURE;
+#endif
+ char *lost;
+
+ lost = OPENSSL_malloc(3);
+ if (!TEST_ptr(lost))
+ return EXIT_FAILURE;
+
+ strcpy(lost, "ab");
+
+ if (argv[1] && strcmp(argv[1], "freeit") == 0) {
+ OPENSSL_free(lost);
+ exitcode = EXIT_SUCCESS;
+ }
+
+ lost = NULL;
+ return exitcode;
+}
diff --git a/test/modes_internal_test.c b/test/modes_internal_test.c
new file mode 100644
index 000000000000..32fb756060b2
--- /dev/null
+++ b/test/modes_internal_test.c
@@ -0,0 +1,899 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Internal tests for the modes module */
+
+/*
+ * This file uses the low level AES functions (which are deprecated for
+ * non-internal use) in order to test the modes code
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/aes.h>
+#include <openssl/modes.h>
+#include "testutil.h"
+#include "crypto/modes.h"
+#include "internal/nelem.h"
+
+typedef struct {
+ size_t size;
+ const unsigned char *data;
+} SIZED_DATA;
+
+/**********************************************************************
+ *
+ * Test of cts128
+ *
+ ***/
+
+/* cts128 test vectors from RFC 3962 */
+static const unsigned char cts128_test_key[16] = "chicken teriyaki";
+static const unsigned char cts128_test_input[64] =
+ "I would like the" " General Gau's C"
+ "hicken, please, " "and wonton soup.";
+static const unsigned char cts128_test_iv[] =
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+static const unsigned char vector_17[17] = {
+ 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4,
+ 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f,
+ 0x97
+};
+
+static const unsigned char vector_31[31] = {
+ 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1,
+ 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22,
+ 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
+ 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5
+};
+
+static const unsigned char vector_32[32] = {
+ 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
+ 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
+ 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
+ 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84
+};
+
+static const unsigned char vector_47[47] = {
+ 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
+ 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
+ 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c,
+ 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e,
+ 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
+ 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5
+};
+
+static const unsigned char vector_48[48] = {
+ 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
+ 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
+ 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
+ 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
+ 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
+ 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8
+};
+
+static const unsigned char vector_64[64] = {
+ 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
+ 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
+ 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
+ 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
+ 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5,
+ 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40,
+ 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
+ 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8
+};
+
+#define CTS128_TEST_VECTOR(len) \
+ { \
+ sizeof(vector_##len), vector_##len \
+ }
+static const SIZED_DATA aes_cts128_vectors[] = {
+ CTS128_TEST_VECTOR(17),
+ CTS128_TEST_VECTOR(31),
+ CTS128_TEST_VECTOR(32),
+ CTS128_TEST_VECTOR(47),
+ CTS128_TEST_VECTOR(48),
+ CTS128_TEST_VECTOR(64),
+};
+
+static AES_KEY *cts128_encrypt_key_schedule(void)
+{
+ static int init_key = 1;
+ static AES_KEY ks;
+
+ if (init_key) {
+ AES_set_encrypt_key(cts128_test_key, 128, &ks);
+ init_key = 0;
+ }
+ return &ks;
+}
+
+static AES_KEY *cts128_decrypt_key_schedule(void)
+{
+ static int init_key = 1;
+ static AES_KEY ks;
+
+ if (init_key) {
+ AES_set_decrypt_key(cts128_test_key, 128, &ks);
+ init_key = 0;
+ }
+ return &ks;
+}
+
+typedef struct {
+ const char *case_name;
+ size_t (*last_blocks_correction)(const unsigned char *in,
+ unsigned char *out, size_t len);
+ size_t (*encrypt_block)(const unsigned char *in,
+ unsigned char *out, size_t len,
+ const void *key, unsigned char ivec[16],
+ block128_f block);
+ size_t (*encrypt_stream)(const unsigned char *in, unsigned char *out,
+ size_t len, const void *key,
+ unsigned char ivec[16], cbc128_f cbc);
+ size_t (*decrypt_block)(const unsigned char *in,
+ unsigned char *out, size_t len,
+ const void *key, unsigned char ivec[16],
+ block128_f block);
+ size_t (*decrypt_stream)(const unsigned char *in, unsigned char *out,
+ size_t len, const void *key,
+ unsigned char ivec[16], cbc128_f cbc);
+} CTS128_FIXTURE;
+
+static size_t last_blocks_correction(const unsigned char *in,
+ unsigned char *out, size_t len)
+{
+ size_t tail;
+
+ memcpy(out, in, len);
+ if ((tail = len % 16) == 0)
+ tail = 16;
+ tail += 16;
+
+ return tail;
+}
+
+static size_t last_blocks_correction_nist(const unsigned char *in,
+ unsigned char *out, size_t len)
+{
+ size_t tail;
+
+ if ((tail = len % 16) == 0)
+ tail = 16;
+ len -= 16 + tail;
+ memcpy(out, in, len);
+ /* flip two last blocks */
+ memcpy(out + len, in + len + 16, tail);
+ memcpy(out + len + tail, in + len, 16);
+ len += 16 + tail;
+ tail = 16;
+
+ return tail;
+}
+
+static int execute_cts128(const CTS128_FIXTURE *fixture, int num)
+{
+ const unsigned char *test_iv = cts128_test_iv;
+ size_t test_iv_len = sizeof(cts128_test_iv);
+ const unsigned char *orig_vector = aes_cts128_vectors[num].data;
+ size_t len = aes_cts128_vectors[num].size;
+ const unsigned char *test_input = cts128_test_input;
+ const AES_KEY *encrypt_key_schedule = cts128_encrypt_key_schedule();
+ const AES_KEY *decrypt_key_schedule = cts128_decrypt_key_schedule();
+ unsigned char iv[16];
+ /* The largest test inputs are = 64 bytes. */
+ unsigned char cleartext[64], ciphertext[64], vector[64];
+ size_t tail, size;
+
+ TEST_info("%s_vector_%lu", fixture->case_name, (unsigned long)len);
+
+ tail = fixture->last_blocks_correction(orig_vector, vector, len);
+
+ /* test block-based encryption */
+ memcpy(iv, test_iv, test_iv_len);
+ if (!TEST_size_t_eq(fixture->encrypt_block(test_input, ciphertext, len,
+ encrypt_key_schedule, iv,
+ (block128_f)AES_encrypt), len)
+ || !TEST_mem_eq(ciphertext, len, vector, len)
+ || !TEST_mem_eq(iv, sizeof(iv), vector + len - tail, sizeof(iv)))
+ return 0;
+
+ /* test block-based decryption */
+ memcpy(iv, test_iv, test_iv_len);
+ size = fixture->decrypt_block(ciphertext, cleartext, len,
+ decrypt_key_schedule, iv,
+ (block128_f)AES_decrypt);
+ if (!TEST_true(len == size || len + 16 == size)
+ || !TEST_mem_eq(cleartext, len, test_input, len)
+ || !TEST_mem_eq(iv, sizeof(iv), vector + len - tail, sizeof(iv)))
+ return 0;
+
+ /* test streamed encryption */
+ memcpy(iv, test_iv, test_iv_len);
+ if (!TEST_size_t_eq(fixture->encrypt_stream(test_input, ciphertext, len,
+ encrypt_key_schedule, iv,
+ (cbc128_f) AES_cbc_encrypt),
+ len)
+ || !TEST_mem_eq(ciphertext, len, vector, len)
+ || !TEST_mem_eq(iv, sizeof(iv), vector + len - tail, sizeof(iv)))
+ return 0;
+
+ /* test streamed decryption */
+ memcpy(iv, test_iv, test_iv_len);
+ if (!TEST_size_t_eq(fixture->decrypt_stream(ciphertext, cleartext, len,
+ decrypt_key_schedule, iv,
+ (cbc128_f)AES_cbc_encrypt),
+ len)
+ || !TEST_mem_eq(cleartext, len, test_input, len)
+ || !TEST_mem_eq(iv, sizeof(iv), vector + len - tail, sizeof(iv)))
+ return 0;
+
+ return 1;
+}
+
+static int test_aes_cts128(int idx)
+{
+ static const CTS128_FIXTURE fixture_cts128 = {
+ "aes_cts128", last_blocks_correction,
+ CRYPTO_cts128_encrypt_block, CRYPTO_cts128_encrypt,
+ CRYPTO_cts128_decrypt_block, CRYPTO_cts128_decrypt
+ };
+
+ return execute_cts128(&fixture_cts128, idx);
+}
+
+static int test_aes_cts128_nist(int idx)
+{
+ static const CTS128_FIXTURE fixture_cts128_nist = {
+ "aes_cts128_nist", last_blocks_correction_nist,
+ CRYPTO_nistcts128_encrypt_block, CRYPTO_nistcts128_encrypt,
+ CRYPTO_nistcts128_decrypt_block, CRYPTO_nistcts128_decrypt
+ };
+
+ return execute_cts128(&fixture_cts128_nist, idx);
+}
+
+/*
+ *
+ * Test of gcm128
+ *
+ */
+
+/* Test Case 1 */
+static const u8 K1[16], P1[] = { 0 }, A1[] = { 0 }, IV1[12], C1[] = { 0 };
+static const u8 T1[] = {
+ 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61,
+ 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a
+};
+
+/* Test Case 2 */
+# define K2 K1
+# define A2 A1
+# define IV2 IV1
+static const u8 P2[16];
+static const u8 C2[] = {
+ 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92,
+ 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78
+};
+
+static const u8 T2[] = {
+ 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd,
+ 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf
+};
+
+/* Test Case 3 */
+# define A3 A2
+static const u8 K3[] = {
+ 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
+ 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
+};
+
+static const u8 P3[] = {
+ 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
+ 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
+ 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
+ 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
+ 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
+ 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
+ 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
+ 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55
+};
+
+static const u8 IV3[] = {
+ 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
+ 0xde, 0xca, 0xf8, 0x88
+};
+
+static const u8 C3[] = {
+ 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
+ 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
+ 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
+ 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
+ 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
+ 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
+ 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
+ 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85
+};
+
+static const u8 T3[] = {
+ 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
+ 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4
+};
+
+/* Test Case 4 */
+# define K4 K3
+# define IV4 IV3
+static const u8 P4[] = {
+ 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
+ 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
+ 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
+ 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
+ 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
+ 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
+ 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
+ 0xba, 0x63, 0x7b, 0x39
+};
+
+static const u8 A4[] = {
+ 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
+ 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
+ 0xab, 0xad, 0xda, 0xd2
+};
+
+static const u8 C4[] = {
+ 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
+ 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
+ 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
+ 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
+ 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
+ 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
+ 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
+ 0x3d, 0x58, 0xe0, 0x91
+};
+
+static const u8 T4[] = {
+ 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb,
+ 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47
+};
+
+/* Test Case 5 */
+# define K5 K4
+# define P5 P4
+# define A5 A4
+static const u8 IV5[] = {
+ 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad
+};
+
+static const u8 C5[] = {
+ 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a,
+ 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55,
+ 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8,
+ 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23,
+ 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2,
+ 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42,
+ 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07,
+ 0xc2, 0x3f, 0x45, 0x98
+};
+
+static const u8 T5[] = {
+ 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85,
+ 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb
+};
+
+/* Test Case 6 */
+# define K6 K5
+# define P6 P5
+# define A6 A5
+static const u8 IV6[] = {
+ 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5,
+ 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa,
+ 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1,
+ 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28,
+ 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39,
+ 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54,
+ 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57,
+ 0xa6, 0x37, 0xb3, 0x9b
+};
+
+static const u8 C6[] = {
+ 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6,
+ 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94,
+ 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8,
+ 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7,
+ 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90,
+ 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f,
+ 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03,
+ 0x4c, 0x34, 0xae, 0xe5
+};
+
+static const u8 T6[] = {
+ 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa,
+ 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50
+};
+
+/* Test Case 7 */
+static const u8 K7[24], P7[] = { 0 }, A7[] = { 0 }, IV7[12], C7[] = { 0 };
+static const u8 T7[] = {
+ 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b,
+ 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35
+};
+
+/* Test Case 8 */
+# define K8 K7
+# define IV8 IV7
+# define A8 A7
+static const u8 P8[16];
+static const u8 C8[] = {
+ 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41,
+ 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00
+};
+
+static const u8 T8[] = {
+ 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab,
+ 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb
+};
+
+/* Test Case 9 */
+# define A9 A8
+static const u8 K9[] = {
+ 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
+ 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
+ 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c
+};
+
+static const u8 P9[] = {
+ 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
+ 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
+ 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
+ 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
+ 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
+ 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
+ 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
+ 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55
+};
+
+static const u8 IV9[] = {
+ 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
+ 0xde, 0xca, 0xf8, 0x88
+};
+
+static const u8 C9[] = {
+ 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
+ 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
+ 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
+ 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
+ 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
+ 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
+ 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
+ 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56
+};
+
+static const u8 T9[] = {
+ 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf,
+ 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14
+};
+
+/* Test Case 10 */
+# define K10 K9
+# define IV10 IV9
+static const u8 P10[] = {
+ 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
+ 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
+ 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
+ 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
+ 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
+ 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
+ 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
+ 0xba, 0x63, 0x7b, 0x39
+};
+
+static const u8 A10[] = {
+ 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
+ 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
+ 0xab, 0xad, 0xda, 0xd2
+};
+
+static const u8 C10[] = {
+ 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
+ 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
+ 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
+ 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
+ 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
+ 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
+ 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
+ 0xcc, 0xda, 0x27, 0x10
+};
+
+static const u8 T10[] = {
+ 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f,
+ 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c
+};
+
+/* Test Case 11 */
+# define K11 K10
+# define P11 P10
+# define A11 A10
+static const u8 IV11[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad };
+
+static const u8 C11[] = {
+ 0x0f, 0x10, 0xf5, 0x99, 0xae, 0x14, 0xa1, 0x54,
+ 0xed, 0x24, 0xb3, 0x6e, 0x25, 0x32, 0x4d, 0xb8,
+ 0xc5, 0x66, 0x63, 0x2e, 0xf2, 0xbb, 0xb3, 0x4f,
+ 0x83, 0x47, 0x28, 0x0f, 0xc4, 0x50, 0x70, 0x57,
+ 0xfd, 0xdc, 0x29, 0xdf, 0x9a, 0x47, 0x1f, 0x75,
+ 0xc6, 0x65, 0x41, 0xd4, 0xd4, 0xda, 0xd1, 0xc9,
+ 0xe9, 0x3a, 0x19, 0xa5, 0x8e, 0x8b, 0x47, 0x3f,
+ 0xa0, 0xf0, 0x62, 0xf7
+};
+
+static const u8 T11[] = {
+ 0x65, 0xdc, 0xc5, 0x7f, 0xcf, 0x62, 0x3a, 0x24,
+ 0x09, 0x4f, 0xcc, 0xa4, 0x0d, 0x35, 0x33, 0xf8
+};
+
+/* Test Case 12 */
+# define K12 K11
+# define P12 P11
+# define A12 A11
+static const u8 IV12[] = {
+ 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5,
+ 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa,
+ 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1,
+ 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28,
+ 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39,
+ 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54,
+ 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57,
+ 0xa6, 0x37, 0xb3, 0x9b
+};
+
+static const u8 C12[] = {
+ 0xd2, 0x7e, 0x88, 0x68, 0x1c, 0xe3, 0x24, 0x3c,
+ 0x48, 0x30, 0x16, 0x5a, 0x8f, 0xdc, 0xf9, 0xff,
+ 0x1d, 0xe9, 0xa1, 0xd8, 0xe6, 0xb4, 0x47, 0xef,
+ 0x6e, 0xf7, 0xb7, 0x98, 0x28, 0x66, 0x6e, 0x45,
+ 0x81, 0xe7, 0x90, 0x12, 0xaf, 0x34, 0xdd, 0xd9,
+ 0xe2, 0xf0, 0x37, 0x58, 0x9b, 0x29, 0x2d, 0xb3,
+ 0xe6, 0x7c, 0x03, 0x67, 0x45, 0xfa, 0x22, 0xe7,
+ 0xe9, 0xb7, 0x37, 0x3b
+};
+
+static const u8 T12[] = {
+ 0xdc, 0xf5, 0x66, 0xff, 0x29, 0x1c, 0x25, 0xbb,
+ 0xb8, 0x56, 0x8f, 0xc3, 0xd3, 0x76, 0xa6, 0xd9
+};
+
+/* Test Case 13 */
+static const u8 K13[32], P13[] = { 0 }, A13[] = { 0 }, IV13[12], C13[] = { 0 };
+static const u8 T13[] = {
+ 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9,
+ 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b
+};
+
+/* Test Case 14 */
+# define K14 K13
+# define A14 A13
+static const u8 P14[16], IV14[12];
+static const u8 C14[] = {
+ 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e,
+ 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18
+};
+
+static const u8 T14[] = {
+ 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0,
+ 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19
+};
+
+/* Test Case 15 */
+# define A15 A14
+static const u8 K15[] = {
+ 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
+ 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
+ 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
+ 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
+};
+
+static const u8 P15[] = {
+ 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
+ 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
+ 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
+ 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
+ 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
+ 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
+ 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
+ 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55
+};
+
+static const u8 IV15[] = {
+ 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
+ 0xde, 0xca, 0xf8, 0x88
+};
+
+static const u8 C15[] = {
+ 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
+ 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
+ 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
+ 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
+ 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
+ 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
+ 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
+ 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad
+};
+
+static const u8 T15[] = {
+ 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd,
+ 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c
+};
+
+/* Test Case 16 */
+# define K16 K15
+# define IV16 IV15
+static const u8 P16[] = {
+ 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
+ 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
+ 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
+ 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
+ 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
+ 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
+ 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
+ 0xba, 0x63, 0x7b, 0x39
+};
+
+static const u8 A16[] = {
+ 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
+ 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
+ 0xab, 0xad, 0xda, 0xd2
+};
+
+static const u8 C16[] = {
+ 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
+ 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
+ 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
+ 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
+ 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
+ 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
+ 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
+ 0xbc, 0xc9, 0xf6, 0x62
+};
+
+static const u8 T16[] = {
+ 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68,
+ 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b
+};
+
+/* Test Case 17 */
+# define K17 K16
+# define P17 P16
+# define A17 A16
+static const u8 IV17[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad };
+
+static const u8 C17[] = {
+ 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32,
+ 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb,
+ 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa,
+ 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0,
+ 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0,
+ 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78,
+ 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99,
+ 0xf4, 0x7c, 0x9b, 0x1f
+};
+
+static const u8 T17[] = {
+ 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4,
+ 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2
+};
+
+/* Test Case 18 */
+# define K18 K17
+# define P18 P17
+# define A18 A17
+static const u8 IV18[] = {
+ 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5,
+ 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa,
+ 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1,
+ 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28,
+ 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39,
+ 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54,
+ 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57,
+ 0xa6, 0x37, 0xb3, 0x9b
+};
+
+static const u8 C18[] = {
+ 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1,
+ 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20,
+ 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19,
+ 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4,
+ 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45,
+ 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde,
+ 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e,
+ 0x44, 0xae, 0x7e, 0x3f
+};
+
+static const u8 T18[] = {
+ 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0,
+ 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a
+};
+
+/* Test Case 19 */
+# define K19 K1
+# define P19 P1
+# define IV19 IV1
+# define C19 C1
+static const u8 A19[] = {
+ 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
+ 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
+ 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
+ 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
+ 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
+ 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
+ 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
+ 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
+ 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
+ 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
+ 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
+ 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
+ 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
+ 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
+ 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
+ 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad
+};
+
+static const u8 T19[] = {
+ 0x5f, 0xea, 0x79, 0x3a, 0x2d, 0x6f, 0x97, 0x4d,
+ 0x37, 0xe6, 0x8e, 0x0c, 0xb8, 0xff, 0x94, 0x92
+};
+
+/* Test Case 20 */
+# define K20 K1
+# define A20 A1
+/* this results in 0xff in counter LSB */
+static const u8 IV20[64] = { 0xff, 0xff, 0xff, 0xff };
+
+static const u8 P20[288];
+static const u8 C20[] = {
+ 0x56, 0xb3, 0x37, 0x3c, 0xa9, 0xef, 0x6e, 0x4a,
+ 0x2b, 0x64, 0xfe, 0x1e, 0x9a, 0x17, 0xb6, 0x14,
+ 0x25, 0xf1, 0x0d, 0x47, 0xa7, 0x5a, 0x5f, 0xce,
+ 0x13, 0xef, 0xc6, 0xbc, 0x78, 0x4a, 0xf2, 0x4f,
+ 0x41, 0x41, 0xbd, 0xd4, 0x8c, 0xf7, 0xc7, 0x70,
+ 0x88, 0x7a, 0xfd, 0x57, 0x3c, 0xca, 0x54, 0x18,
+ 0xa9, 0xae, 0xff, 0xcd, 0x7c, 0x5c, 0xed, 0xdf,
+ 0xc6, 0xa7, 0x83, 0x97, 0xb9, 0xa8, 0x5b, 0x49,
+ 0x9d, 0xa5, 0x58, 0x25, 0x72, 0x67, 0xca, 0xab,
+ 0x2a, 0xd0, 0xb2, 0x3c, 0xa4, 0x76, 0xa5, 0x3c,
+ 0xb1, 0x7f, 0xb4, 0x1c, 0x4b, 0x8b, 0x47, 0x5c,
+ 0xb4, 0xf3, 0xf7, 0x16, 0x50, 0x94, 0xc2, 0x29,
+ 0xc9, 0xe8, 0xc4, 0xdc, 0x0a, 0x2a, 0x5f, 0xf1,
+ 0x90, 0x3e, 0x50, 0x15, 0x11, 0x22, 0x13, 0x76,
+ 0xa1, 0xcd, 0xb8, 0x36, 0x4c, 0x50, 0x61, 0xa2,
+ 0x0c, 0xae, 0x74, 0xbc, 0x4a, 0xcd, 0x76, 0xce,
+ 0xb0, 0xab, 0xc9, 0xfd, 0x32, 0x17, 0xef, 0x9f,
+ 0x8c, 0x90, 0xbe, 0x40, 0x2d, 0xdf, 0x6d, 0x86,
+ 0x97, 0xf4, 0xf8, 0x80, 0xdf, 0xf1, 0x5b, 0xfb,
+ 0x7a, 0x6b, 0x28, 0x24, 0x1e, 0xc8, 0xfe, 0x18,
+ 0x3c, 0x2d, 0x59, 0xe3, 0xf9, 0xdf, 0xff, 0x65,
+ 0x3c, 0x71, 0x26, 0xf0, 0xac, 0xb9, 0xe6, 0x42,
+ 0x11, 0xf4, 0x2b, 0xae, 0x12, 0xaf, 0x46, 0x2b,
+ 0x10, 0x70, 0xbe, 0xf1, 0xab, 0x5e, 0x36, 0x06,
+ 0x87, 0x2c, 0xa1, 0x0d, 0xee, 0x15, 0xb3, 0x24,
+ 0x9b, 0x1a, 0x1b, 0x95, 0x8f, 0x23, 0x13, 0x4c,
+ 0x4b, 0xcc, 0xb7, 0xd0, 0x32, 0x00, 0xbc, 0xe4,
+ 0x20, 0xa2, 0xf8, 0xeb, 0x66, 0xdc, 0xf3, 0x64,
+ 0x4d, 0x14, 0x23, 0xc1, 0xb5, 0x69, 0x90, 0x03,
+ 0xc1, 0x3e, 0xce, 0xf4, 0xbf, 0x38, 0xa3, 0xb6,
+ 0x0e, 0xed, 0xc3, 0x40, 0x33, 0xba, 0xc1, 0x90,
+ 0x27, 0x83, 0xdc, 0x6d, 0x89, 0xe2, 0xe7, 0x74,
+ 0x18, 0x8a, 0x43, 0x9c, 0x7e, 0xbc, 0xc0, 0x67,
+ 0x2d, 0xbd, 0xa4, 0xdd, 0xcf, 0xb2, 0x79, 0x46,
+ 0x13, 0xb0, 0xbe, 0x41, 0x31, 0x5e, 0xf7, 0x78,
+ 0x70, 0x8a, 0x70, 0xee, 0x7d, 0x75, 0x16, 0x5c
+};
+
+static const u8 T20[] = {
+ 0x8b, 0x30, 0x7f, 0x6b, 0x33, 0x28, 0x6d, 0x0a,
+ 0xb0, 0x26, 0xa9, 0xed, 0x3f, 0xe1, 0xe8, 0x5f
+};
+
+#define GCM128_TEST_VECTOR(n) \
+ { \
+ {sizeof(K##n), K##n}, \
+ {sizeof(IV##n), IV##n}, \
+ {sizeof(A##n), A##n}, \
+ {sizeof(P##n), P##n}, \
+ {sizeof(C##n), C##n}, \
+ {sizeof(T##n), T##n} \
+ }
+static struct gcm128_data {
+ const SIZED_DATA K;
+ const SIZED_DATA IV;
+ const SIZED_DATA A;
+ const SIZED_DATA P;
+ const SIZED_DATA C;
+ const SIZED_DATA T;
+} gcm128_vectors[] = {
+ GCM128_TEST_VECTOR(1),
+ GCM128_TEST_VECTOR(2),
+ GCM128_TEST_VECTOR(3),
+ GCM128_TEST_VECTOR(4),
+ GCM128_TEST_VECTOR(5),
+ GCM128_TEST_VECTOR(6),
+ GCM128_TEST_VECTOR(7),
+ GCM128_TEST_VECTOR(8),
+ GCM128_TEST_VECTOR(9),
+ GCM128_TEST_VECTOR(10),
+ GCM128_TEST_VECTOR(11),
+ GCM128_TEST_VECTOR(12),
+ GCM128_TEST_VECTOR(13),
+ GCM128_TEST_VECTOR(14),
+ GCM128_TEST_VECTOR(15),
+ GCM128_TEST_VECTOR(16),
+ GCM128_TEST_VECTOR(17),
+ GCM128_TEST_VECTOR(18),
+ GCM128_TEST_VECTOR(19),
+ GCM128_TEST_VECTOR(20)
+};
+
+static int test_gcm128(int idx)
+{
+ unsigned char out[512];
+ SIZED_DATA K = gcm128_vectors[idx].K;
+ SIZED_DATA IV = gcm128_vectors[idx].IV;
+ SIZED_DATA A = gcm128_vectors[idx].A;
+ SIZED_DATA P = gcm128_vectors[idx].P;
+ SIZED_DATA C = gcm128_vectors[idx].C;
+ SIZED_DATA T = gcm128_vectors[idx].T;
+ GCM128_CONTEXT ctx;
+ AES_KEY key;
+
+ /* Size 1 inputs are special-cased to signal NULL. */
+ if (A.size == 1)
+ A.data = NULL;
+ if (P.size == 1)
+ P.data = NULL;
+ if (C.size == 1)
+ C.data = NULL;
+
+ AES_set_encrypt_key(K.data, K.size * 8, &key);
+
+ CRYPTO_gcm128_init(&ctx, &key, (block128_f)AES_encrypt);
+ CRYPTO_gcm128_setiv(&ctx, IV.data, IV.size);
+ memset(out, 0, P.size);
+ if (A.data != NULL)
+ CRYPTO_gcm128_aad(&ctx, A.data, A.size);
+ if (P.data != NULL)
+ if (!TEST_int_ge(CRYPTO_gcm128_encrypt( &ctx, P.data, out, P.size), 0))
+ return 0;
+ if (!TEST_false(CRYPTO_gcm128_finish(&ctx, T.data, 16))
+ || (C.data != NULL
+ && !TEST_mem_eq(out, P.size, C.data, P.size)))
+ return 0;
+
+ CRYPTO_gcm128_setiv(&ctx, IV.data, IV.size);
+ memset(out, 0, P.size);
+ if (A.data != NULL)
+ CRYPTO_gcm128_aad(&ctx, A.data, A.size);
+ if (C.data != NULL)
+ CRYPTO_gcm128_decrypt(&ctx, C.data, out, P.size);
+ if (!TEST_false(CRYPTO_gcm128_finish(&ctx, T.data, 16))
+ || (P.data != NULL
+ && !TEST_mem_eq(out, P.size, P.data, P.size)))
+ return 0;
+
+ return 1;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_aes_cts128, OSSL_NELEM(aes_cts128_vectors));
+ ADD_ALL_TESTS(test_aes_cts128_nist, OSSL_NELEM(aes_cts128_vectors));
+ ADD_ALL_TESTS(test_gcm128, OSSL_NELEM(gcm128_vectors));
+ return 1;
+}
diff --git a/test/moduleloadtest.c b/test/moduleloadtest.c
new file mode 100644
index 000000000000..751f5febfb70
--- /dev/null
+++ b/test/moduleloadtest.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * Extremely simple dynamic loader, must never be linked with anything other
+ * than the standard C library. Its purpose is to try to load a dynamic module
+ * and verify the presence of one symbol, if that's given.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <openssl/core.h>
+#include "simpledynamic.h"
+
+static int test_load(const char *path, const char *symbol)
+{
+#ifdef SD_INIT
+ SD sd = SD_INIT;
+ SD_SYM sym;
+ int ret;
+
+ if (!sd_load(path, &sd, SD_MODULE))
+ return 0;
+ ret = symbol == NULL || sd_sym(sd, symbol, &sym);
+ if (!sd_close(sd))
+ ret = 0;
+ return ret;
+#else
+ fprintf(stderr, "No dynamic loader\n");
+ return 0;
+#endif
+}
+
+int main(int argc, char *argv[])
+{
+ const char *m, *s;
+
+ if (argc != 2 && argc != 3) {
+ fprintf(stderr, "Usage: %s sharedobject [ entrypoint ]\n", argv[0]);
+ return 1;
+ }
+
+ m = argv[1];
+ s = argc == 3 ? argv[2] : NULL;
+
+ return test_load(m, s) ? 0 : 1;
+}
diff --git a/test/namemap_internal_test.c b/test/namemap_internal_test.c
new file mode 100644
index 000000000000..b3f498004fb1
--- /dev/null
+++ b/test/namemap_internal_test.c
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/evp.h>
+#include "internal/namemap.h"
+#include "testutil.h"
+
+#define NAME1 "name1"
+#define NAME2 "name2"
+#define ALIAS1 "alias1"
+#define ALIAS1_UC "ALIAS1"
+
+static int test_namemap_empty(void)
+{
+ OSSL_NAMEMAP *nm = NULL;
+ int ok;
+
+ ok = TEST_int_eq(ossl_namemap_empty(NULL), 1)
+ && TEST_ptr(nm = ossl_namemap_new())
+ && TEST_int_eq(ossl_namemap_empty(nm), 1)
+ && TEST_int_ne(ossl_namemap_add_name(nm, 0, NAME1), 0)
+ && TEST_int_eq(ossl_namemap_empty(nm), 0);
+ ossl_namemap_free(nm);
+ return ok;
+}
+
+static int test_namemap(OSSL_NAMEMAP *nm)
+{
+ int num1 = ossl_namemap_add_name(nm, 0, NAME1);
+ int num2 = ossl_namemap_add_name(nm, 0, NAME2);
+ int num3 = ossl_namemap_add_name(nm, num1, ALIAS1);
+ int num4 = ossl_namemap_add_name(nm, 0, ALIAS1_UC);
+ int check1 = ossl_namemap_name2num(nm, NAME1);
+ int check2 = ossl_namemap_name2num(nm, NAME2);
+ int check3 = ossl_namemap_name2num(nm, ALIAS1);
+ int check4 = ossl_namemap_name2num(nm, ALIAS1_UC);
+ int false1 = ossl_namemap_name2num(nm, "cookie");
+
+ return TEST_int_ne(num1, 0)
+ && TEST_int_ne(num2, 0)
+ && TEST_int_eq(num1, num3)
+ && TEST_int_eq(num3, num4)
+ && TEST_int_eq(num1, check1)
+ && TEST_int_eq(num2, check2)
+ && TEST_int_eq(num3, check3)
+ && TEST_int_eq(num4, check4)
+ && TEST_int_eq(false1, 0);
+}
+
+static int test_namemap_independent(void)
+{
+ OSSL_NAMEMAP *nm = ossl_namemap_new();
+ int ok = TEST_ptr(nm) && test_namemap(nm);
+
+ ossl_namemap_free(nm);
+ return ok;
+}
+
+static int test_namemap_stored(void)
+{
+ OSSL_NAMEMAP *nm = ossl_namemap_stored(NULL);
+
+ return TEST_ptr(nm)
+ && test_namemap(nm);
+}
+
+/*
+ * Test that EVP_get_digestbyname() will use the namemap when it can't find
+ * entries in the legacy method database.
+ */
+static int test_digestbyname(void)
+{
+ int id;
+ OSSL_NAMEMAP *nm = ossl_namemap_stored(NULL);
+ const EVP_MD *sha256, *foo;
+
+ if (!TEST_ptr(nm))
+ return 0;
+ id = ossl_namemap_add_name(nm, 0, "SHA256");
+ if (!TEST_int_ne(id, 0))
+ return 0;
+ if (!TEST_int_eq(ossl_namemap_add_name(nm, id, "foo"), id))
+ return 0;
+
+ sha256 = EVP_get_digestbyname("SHA256");
+ if (!TEST_ptr(sha256))
+ return 0;
+ foo = EVP_get_digestbyname("foo");
+ if (!TEST_ptr_eq(sha256, foo))
+ return 0;
+
+ return 1;
+}
+
+/*
+ * Test that EVP_get_cipherbyname() will use the namemap when it can't find
+ * entries in the legacy method database.
+ */
+static int test_cipherbyname(void)
+{
+ int id;
+ OSSL_NAMEMAP *nm = ossl_namemap_stored(NULL);
+ const EVP_CIPHER *aes128, *bar;
+
+ if (!TEST_ptr(nm))
+ return 0;
+ id = ossl_namemap_add_name(nm, 0, "AES-128-CBC");
+ if (!TEST_int_ne(id, 0))
+ return 0;
+ if (!TEST_int_eq(ossl_namemap_add_name(nm, id, "bar"), id))
+ return 0;
+
+ aes128 = EVP_get_cipherbyname("AES-128-CBC");
+ if (!TEST_ptr(aes128))
+ return 0;
+ bar = EVP_get_cipherbyname("bar");
+ if (!TEST_ptr_eq(aes128, bar))
+ return 0;
+
+ return 1;
+}
+
+/*
+ * Test that EVP_CIPHER_is_a() responds appropriately, even for ciphers that
+ * are entirely legacy.
+ */
+static int test_cipher_is_a(void)
+{
+ EVP_CIPHER *fetched = EVP_CIPHER_fetch(NULL, "AES-256-CCM", NULL);
+ int rv = 1;
+
+ if (!TEST_ptr(fetched))
+ return 0;
+ if (!TEST_true(EVP_CIPHER_is_a(fetched, "id-aes256-CCM"))
+ || !TEST_false(EVP_CIPHER_is_a(fetched, "AES-128-GCM")))
+ rv = 0;
+ if (!TEST_true(EVP_CIPHER_is_a(EVP_aes_256_gcm(), "AES-256-GCM"))
+ || !TEST_false(EVP_CIPHER_is_a(EVP_aes_256_gcm(), "AES-128-CCM")))
+ rv = 0;
+
+ EVP_CIPHER_free(fetched);
+ return rv;
+}
+
+/*
+ * Test that EVP_MD_is_a() responds appropriately, even for MDs that are
+ * entirely legacy.
+ */
+static int test_digest_is_a(void)
+{
+ EVP_MD *fetched = EVP_MD_fetch(NULL, "SHA2-512", NULL);
+ int rv = 1;
+
+ if (!TEST_ptr(fetched))
+ return 0;
+ if (!TEST_true(EVP_MD_is_a(fetched, "SHA512"))
+ || !TEST_false(EVP_MD_is_a(fetched, "SHA1")))
+ rv = 0;
+ if (!TEST_true(EVP_MD_is_a(EVP_sha256(), "SHA2-256"))
+ || !TEST_false(EVP_MD_is_a(EVP_sha256(), "SHA3-256")))
+ rv = 0;
+
+ EVP_MD_free(fetched);
+ return rv;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_namemap_empty);
+ ADD_TEST(test_namemap_independent);
+ ADD_TEST(test_namemap_stored);
+ ADD_TEST(test_digestbyname);
+ ADD_TEST(test_cipherbyname);
+ ADD_TEST(test_digest_is_a);
+ ADD_TEST(test_cipher_is_a);
+ return 1;
+}
diff --git a/test/nodefltctxtest.c b/test/nodefltctxtest.c
new file mode 100644
index 000000000000..3af3f91736f8
--- /dev/null
+++ b/test/nodefltctxtest.c
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2023 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 "testutil.h"
+
+/*
+ * Test that the default libctx does not get initialised when using a custom
+ * libctx. We assume that this test application has been executed such that the
+ * null provider is loaded via the config file.
+ */
+static int test_no_deflt_ctx_init(void)
+{
+ int testresult = 0;
+ EVP_MD *md = NULL;
+ OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new();
+
+ if (!TEST_ptr(ctx))
+ return 0;
+
+ md = EVP_MD_fetch(ctx, "SHA2-256", NULL);
+ if (!TEST_ptr(md))
+ goto err;
+
+ /*
+ * Since we're using a non-default libctx above, the default libctx should
+ * not have been initialised via config file, and so it is not too late to
+ * use OPENSSL_INIT_NO_LOAD_CONFIG.
+ */
+ OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL);
+
+ /*
+ * If the config file was incorrectly loaded then the null provider will
+ * have been initialised and the default provider loading will have been
+ * blocked. If the config file was NOT loaded (as we expect) then the
+ * default provider should be available.
+ */
+ if (!TEST_true(OSSL_PROVIDER_available(NULL, "default")))
+ goto err;
+ if (!TEST_false(OSSL_PROVIDER_available(NULL, "null")))
+ goto err;
+
+ testresult = 1;
+ err:
+ EVP_MD_free(md);
+ OSSL_LIB_CTX_free(ctx);
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_no_deflt_ctx_init);
+ return 1;
+}
diff --git a/test/null.cnf b/test/null.cnf
new file mode 100644
index 000000000000..964f7f3ef4d2
--- /dev/null
+++ b/test/null.cnf
@@ -0,0 +1,13 @@
+openssl_conf = openssl_init
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+[openssl_init]
+providers = provider_sect
+
+[provider_sect]
+null = null_sect
+
+[null_sect]
+activate = 1
diff --git a/test/ocsp-tests/D1.ors b/test/ocsp-tests/D1.ors
new file mode 100644
index 000000000000..3fa4a11de25c
--- /dev/null
+++ b/test/ocsp-tests/D1.ors
@@ -0,0 +1,32 @@
+MIIFzwoBAKCCBcgwggXEBgkrBgEFBQcwAQEEggW1MIIFsTCBoKIWBBRf2uQDFpGg
+Ywh4P1y2H9bZ2/BQNBgPMjAxMjEwMjMxMDI1MzZaMHUwczBLMAkGBSsOAwIaBQAE
+FKByDqBqfGICVPKo9Z3Se6Tzty+kBBSwsEr9HHUo+BxhqhP2+sGQPWsWowISESG8
+vx4IzALnkqQG05AvM+2bgAAYDzIwMTIxMDIzMDcwMDAwWqARGA8yMDEyMTAzMDA4
+MDAwMFowCwYJKoZIhvcNAQEFA4IBAQAJU3hXN7NApN50/vlZTG2p8+QQJp4uaod3
+wyBQ0Ux3DoQZQ9RG6/7Mm4qpOLCCSTh/lJjZ0fD+9eB3gcp/JupN1JrU+dgTyv/Y
+9MOctJz7y+VoU9I+qB8knV4sQCwohAVm8GmA9s4p/rHq5Oymci0SuG/QCfkVxOub
+rI1bWjbHLvvXyvF3PoGMORVHG3SA+jJ9VkHWJyi6brHxY+QR/iYxer8lJsBtpyc7
+q2itFgvax/OHwne3lxsck9q0QgKpmEdJu2LuGyWFIhrEwR3b7ASEu1G/nKClv3dR
+vyOXMm1XIwuUhCjAcpNEKiOMorFwnLS1F8LhfqFWTAFG0JbWpAi8oIID+DCCA/Qw
+ggPwMIIC2KADAgECAhIRISdENsrz1CSWG3VIBwfQERQwDQYJKoZIhvcNAQEFBQAw
+WTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNV
+BAMTJkdsb2JhbFNpZ24gRXh0ZW5kZWQgVmFsaWRhdGlvbiBDQSAtIEcyMB4XDTEy
+MDkxOTA3NDA1MFoXDTEyMTIxOTA4NDA1MFowgYUxCzAJBgNVBAYTAkJFMRkwFwYD
+VQQKExBHbG9iYWxTaWduIG52LXNhMUIwQAYDVQQDEzlHbG9iYWxTaWduIEV4dGVu
+ZGVkIFZhbGlkYXRpb24gQ0EgLSBHMiBPQ1NQIHJlc3BvbmRlciAtIDIxFzAVBgNV
+BAUTDjIwMTIwOTE5MDk0MDAwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAnCgMsBO+IxIqCnXCOfXJoIC3wj+f0s4DV9h2gJBzisWXkaJD2DfNrd0kHUXK
+qVVPUxnA4G5iZu0Z385/KiOt1/P6vQ/Z2/AsEh/8Z/hIyeZCHL31wrSZW4yLeZwi
+M76wPiBHJxPun681HQlVs/OGKSHnbHc1XJAIeA/M8u+lLWqIKB+AJ82TrOqUMj1s
+LjGhQNs84xPliONN5K7DrEy+Y65X/rFxN77Smw+UtcH1GgH2NgaHH8dpt1m25sgm
+UxZWhdx66opB/lbRQwWdGt7MC0kJFaWHDZq64DTuYoekFYSxAFu0nd0EekEHEJEi
+9mquB9cv/96SuEJl8BcUWU/1LwIDAQABo4GEMIGBMAkGA1UdEwQCMAAwDgYDVR0P
+AQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GCSsGAQUFBzABBQQCBQAw
+HQYDVR0OBBYEFF/a5AMWkaBjCHg/XLYf1tnb8FA0MB8GA1UdIwQYMBaAFLCwSv0c
+dSj4HGGqE/b6wZA9axajMA0GCSqGSIb3DQEBBQUAA4IBAQCKRl1iXFmOQtLseDWP
+Y5icDDBGiRi17CGgvIzGJi/ha0PhbO+X0TmQIEnRX3Mu0Er/Mm4RZSjMtJ2iZRh3
+tGf4Dn+jKgKOmgXC3oOG/l8RPHLf0yaPSdn/z0TXtA30vTFBLlFeWnhbfhovea4+
+snPdBxLqWZdtxmiwojgqA7YATCWwavizrBr09YRyDwzgtpZ2BwMruGuFuV9FsEwL
+PCM53yFlrM32oFghyfyE5kYjgnnueKM+pw1kA0jgb1CnVJRrMEN1TXuXDAZLtHKG
+5X/drah1JtkoZhCzxzZ3bYdVDQJ90OHFqM58lwGD6z3XuPKrHDKZKt+CPIsl5g7p
+4J2l
diff --git a/test/ocsp-tests/D1_Cert_EE.pem b/test/ocsp-tests/D1_Cert_EE.pem
new file mode 100644
index 000000000000..c5b993c0ad4e
--- /dev/null
+++ b/test/ocsp-tests/D1_Cert_EE.pem
@@ -0,0 +1,38 @@
+-----BEGIN CERTIFICATE-----
+MIIGujCCBaKgAwIBAgISESG8vx4IzALnkqQG05AvM+2bMA0GCSqGSIb3DQEBBQUA
+MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYD
+VQQDEyZHbG9iYWxTaWduIEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EgLSBHMjAeFw0x
+MjA4MTQxMjM1MDJaFw0xMzA4MTUxMDMxMjlaMIIBCjEdMBsGA1UEDwwUUHJpdmF0
+ZSBPcmdhbml6YXRpb24xDzANBgNVBAUTBjU3ODYxMTETMBEGCysGAQQBgjc8AgED
+EwJVUzEeMBwGCysGAQQBgjc8AgECEw1OZXcgSGFtcHNoaXJlMQswCQYDVQQGEwJV
+UzEWMBQGA1UECAwNTmV3IEhhbXBzaGlyZTETMBEGA1UEBwwKUG9ydHNtb3V0aDEg
+MB4GA1UECRMXVHdvIEludGVybmF0aW9uYWwgRHJpdmUxDTALBgNVBAsMBC5DT00x
+GzAZBgNVBAoMEkdNTyBHbG9iYWxTaWduIEluYzEbMBkGA1UEAwwSd3d3Lmdsb2Jh
+bHNpZ24uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqx/nHBP4
+6s5KKMDlfZS4qFDiAWsoPSRn6WO4nrUF/G2S3I/AdJ0IcSDOHb48/3APj5alqbgo
+o4IzdG6KLAbENpHMl0L3pHBq/5tJPTi02SbiYUHfp2fhueMauRo8spfEk6fNRnDn
+QpyMFRkYd7Jz+KMerTO1xAcOH+xp0KkcP0i2jFTEuM3LwR0yTms1rry+RryjDDt5
+7W0DLnNFWhyGd6YymzNkCPeL6weV8uk2uYRKKf2XOAzgIpNo3zU6iakZOzlQB9h9
+qRuIks2AU/cZ89cBkDjHua0ezX5rG3/Url33jAT9cR5zCXHWtj7VzlOjDXXnn16b
+L9/AWsvGMNkYHQIDAQABo4ICxzCCAsMwDgYDVR0PAQH/BAQDAgWgMEwGA1UdIARF
+MEMwQQYJKwYBBAGgMgEBMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2Jh
+bHNpZ24uY29tL3JlcG9zaXRvcnkvMIIBKwYDVR0RBIIBIjCCAR6CEnd3dy5nbG9i
+YWxzaWduLmNvbYIVc3RhdHVzLmdsb2JhbHNpZ24uY29tghF0aC5nbG9iYWxzaWdu
+LmNvbYISZGV2Lmdsb2JhbHNpZ24uY29tghNpbmZvLmdsb2JhbHNpZ24uY29tghZh
+cmNoaXZlLmdsb2JhbHNpZ24uY29tghZzdGF0aWMxLmdsb2JhbHNpZ24uY29tghZz
+dGF0aWMyLmdsb2JhbHNpZ24uY29tghNibG9nLmdsb2JhbHNpZ24uY29tghdzc2xj
+aGVjay5nbG9iYWxzaWduLmNvbYIVc3lzdGVtLmdsb2JhbHNpZ24uY29tghhvcGVy
+YXRpb24uZ2xvYmFsc2lnbi5jb22CDmdsb2JhbHNpZ24uY29tMAkGA1UdEwQCMAAw
+HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMD8GA1UdHwQ4MDYwNKAyoDCG
+Lmh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vZ3MvZ3NleHRlbmR2YWxnMi5jcmww
+gYgGCCsGAQUFBwEBBHwwejBBBggrBgEFBQcwAoY1aHR0cDovL3NlY3VyZS5nbG9i
+YWxzaWduLmNvbS9jYWNlcnQvZ3NleHRlbmR2YWxnMi5jcnQwNQYIKwYBBQUHMAGG
+KWh0dHA6Ly9vY3NwMi5nbG9iYWxzaWduLmNvbS9nc2V4dGVuZHZhbGcyMB0GA1Ud
+DgQWBBSvMoTDlFB0aVgVrNkkS1QSmYfx1zAfBgNVHSMEGDAWgBSwsEr9HHUo+Bxh
+qhP2+sGQPWsWozANBgkqhkiG9w0BAQUFAAOCAQEAgnohm8IRw1ukfc0GmArK3ZLC
+DLGpsefwWMvNrclqwrgtVrBx4pfe5xGAjqyQ2QI8V8a8a1ytVMCSC1AMWiWxawvW
+fw48fHunqtpTYNDyEe1Q+7tTGZ0SQ3HljYY9toVEjAMDhiM0Szl6ERRO5S7BTCen
+mDpWZF8w3ScRRY2UJc8xwWFiYyGWDNzNL1O8R2Y95QIkHUgQpSD3cjl4YvF/Xx/o
+hBEzl884uNAggIyQRu0ImLEetEtHWB2w0pZG3nTAqjOAAAyH2Q8IHoJtjQzvg6fy
+IQEO1C5GoQ7isiKIjKBXVYOm+gKSQXlzwj1BlU/OW6kEe24IiERhAN9ILA24wA==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/D1_Issuer_ICA.pem b/test/ocsp-tests/D1_Issuer_ICA.pem
new file mode 100644
index 000000000000..b650f38688d3
--- /dev/null
+++ b/test/ocsp-tests/D1_Issuer_ICA.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEhjCCA26gAwIBAgILBAAAAAABL07hXdQwDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTEwNDEzMTAwMDAwWhcNMjIwNDEz
+MTAwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1z
+YTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBFeHRlbmRlZCBWYWxpZGF0aW9uIENBIC0g
+RzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNoUbMUpq4pbR/WNnN
+2EugcgyXW6aIIMO5PUbc0FxSMPb6WU+FX7DbiLSpXysjSKyr9ZJ4FLYyD/tcaoVb
+AJDgu2X1WvlPZ37HbCnsk8ArysRe2LDb1r4/mwvAj6ldrvcAAqT8umYROHf+IyAl
+VRDFvYK5TLFoxuJwe4NcE2fBofN8C6iZmtDimyUxyCuNQPZSY7GgrVou9Xk2bTUs
+Dt0F5NDiB0i3KF4r1VjVbNAMoQFGAVqPxq9kx1UBXeHRxmxQJaAFrQCrDI1la93r
+wnJUyQ88ABeHIu/buYZ4FlGud9mmKE3zWI2DZ7k0JZscUYBR84OSaqOuR5rW5Isb
+wO2xAgMBAAGjggFaMIIBVjAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB
+/wIBADAdBgNVHQ4EFgQUsLBK/Rx1KPgcYaoT9vrBkD1rFqMwRwYDVR0gBEAwPjA8
+BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29t
+L3JlcG9zaXRvcnkvMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs
+c2lnbi5uZXQvcm9vdC1yMi5jcmwwRAYIKwYBBQUHAQEEODA2MDQGCCsGAQUFBzAB
+hihodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9FeHRlbmRlZFNTTENBMCkGA1Ud
+JQQiMCAGCCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAzAfBgNVHSMEGDAW
+gBSb4gdXZxwewGoG3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAL0m28rZa
+pJWrnlrpK4KbzJBrfHRFIOde2Mcj7ig1sTVlKqVR4FU/9oNntOQ2KbDa7JeVqYoF
+o0X+Iy5SiLQfEICt0oufo1+oxetz3nmIQZgz7qdgGLFGyUAQB5yPClLJExoGbqCb
+LTr2rk/no1E1KlsYBRLlUdy2NmLz4aQP++TPw5S/EauhWTEB8MxT7I9j12yW00gq
+iiPtRVaoZkHqAblH7qFHDBTxI+Egc8p9UHxkOFejj0qcm+ltRc9Ea01gIEBxJbVG
+qmwIft/I+shWKpLLg7h5CZctXqEBzgbttJfJBNxB7+BPNk3kQHNG7BESfIhbNCYl
+TercGL7FG81kwA==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/D2.ors b/test/ocsp-tests/D2.ors
new file mode 100644
index 000000000000..dcbd4d4b8e59
--- /dev/null
+++ b/test/ocsp-tests/D2.ors
@@ -0,0 +1,32 @@
+MIIF4AoBAKCCBdkwggXVBgkrBgEFBQcwAQEEggXGMIIFwjCBmaIWBBTqlwecTarB
+yVdbHxANRLCFYj1mqBgPMjAxMjEwMjMxMDI1MzZaMG4wbDBEMAkGBSsOAwIaBQAE
+FLdXtbacB/gWIxOOkMkqDr4yAaoxBBRge2YaRQ2XyolQL30EzTSo//z9SwILBAAA
+AAABL07hRxCAABgPMjAxMjEwMDEwNjAwMDBaoBEYDzIwMTMwNDE1MDYwMDAwWjAL
+BgkqhkiG9w0BAQUDggEBAEJN4FuPQPnizPIwEj4Q8Ht765gI6QqMNrvj3UykxYeu
+qUajKcqA+V1zaDHTaz+eCQthtmCNKC9T+zVkjGelVsd7Kn2fVKWqp+5wVPI8dVkm
+6Gs/IGZ16HDnQ/siTrY3ILWCRz4Hf6lnHpIErQuQRQyjlGKNcE7RYmjGw4w0bxx8
+vHN/baCMApBL0D0zeBqlpJCMUZqJJ3D1+87HxHYR1MkMZDC9rOPIhlpEP4yL17gx
+ckrPf+w+A/3kC++jVeA3b8Xtr+MaWOFH4xVn6BTxopczZKVl18tSYqgwITlx5/cL
+LpYEdllC0l83E8GRzsOp0SvFxo0NBotgFNZQQujpOzagggQQMIIEDDCCBAgwggLw
+oAMCAQICCwQAAAAAAThXovYBMA0GCSqGSIb3DQEBBQUAMFcxCzAJBgNVBAYTAkJF
+MRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRsw
+GQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwHhcNMTIwNzA1MTgwMDAwWhcNMTMw
+NzA1MTgwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu
+di1zYTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBPQ1NQIGZvciBSb290IFIxIC0gQnJh
+bmNoIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDP2QF8p0+Fb7ID
+MwwD1gEr2oazjqbW28EZr3YEyMPk+7VFaGePSO1xjBGIE48Q7m7d6p6ZXCzlBZEi
+oudrHSr3WDqdIVKLDrZIDkgEgdjJE72Hq6Pf5CEGXyebbODm4sV96EfewSvOOYLL
+866g3aoVhLDK02ny+Q5OsokW7nhnmGMMh10tZqR5VmdQTiw8MgeqUxBEaEO4WH2J
+ltgSsgNJBNBYuDgnn5ryzVqhvmCJvYZMYeN6qZFKy1MgHcR+wEpGLPlRL4ttu6e5
+MJrVta7dVFobHUHoFog97LtQT1PY0Ubaihswjge5O04bYeCrgSSjr1e4xH/KDxRw
+yyhoscaFAgMBAAGjgdIwgc8wDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTqlwec
+TarByVdbHxANRLCFYj1mqDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBXzA0MDIGCCsG
+AQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAJ
+BgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFGB7ZhpF
+DZfKiVAvfQTNNKj//P1LMA8GCSsGAQUFBzABBQQCBQAwDQYJKoZIhvcNAQEFBQAD
+ggEBAHiC6N1uF29d7CmiVapA8Nr1xLSVeIkBd4A8yHsUTQ7ATI7bwT14QUV4awe7
+8cvmO5ZND8YG1ViwN162WFm9ivSoWBzvWDbU2JhQFb+XzrzCcdn0YbNiTxJh/vYm
+uDuxto00dpBgujSOAQv8B90iDEJ+sZpYRzDRj62qStRey0zpq5eX+pA+gdppMUFb
+4QvJf0El8TbLCWLN4TjrFe6ju7ZaN9zmgVYGQ2fMHKIGNScLuIA950nYwzRkIfHa
+YW6HqP1rCR1EiYmstEeCQyDxJx+RUlh+q8L1BKzaMYhS6s63MZzQuGseYStaCmbC
+fBIRKjnK621vAWvc7UR+0hqnZ+U=
diff --git a/test/ocsp-tests/D2_Cert_ICA.pem b/test/ocsp-tests/D2_Cert_ICA.pem
new file mode 100644
index 000000000000..459f98e34c7c
--- /dev/null
+++ b/test/ocsp-tests/D2_Cert_ICA.pem
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIEdzCCA1+gAwIBAgILBAAAAAABL07hRxAwDQYJKoZIhvcNAQEFBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNjEyMTUwODAw
+MDBaFw0yODAxMjgxMjAwMDBaMEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBD
+QSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAps8kDr4ubyiZRULEqz4h
+VJsL03+EcPoSs8u/h1/Gf4bTsjBc1v2t8Xvc5fhglgmSEPXQU977e35ziKxSiHtK
+pspJpl6op4xaEbx6guu+jOmzrJYlB5dKmSoHL7Qed7+KD7UCfBuWuMW5Oiy81hK5
+61l94tAGhl9eSWq1OV6INOy8eAwImIRsqM1LtKB9DHlN8LgtyyHK1WxbfeGgKYSh
++dOUScskYpEgvN0L1dnM+eonCitzkcadG6zIy+jgoPQvkItN+7A2G/YZeoXgbfJh
+E4hcn+CTClGXilrOr6vV96oJqmC93Nlf33KpYBNeAAHJSvo/pOoHAyECjoLKA8Kb
+jwIDAQABo4IBTTCCAUkwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
+HQYDVR0OBBYEFJviB1dnHB7AagbeWbSaLd/cGYYuMEcGA1UdIARAMD4wPAYEVR0g
+ADA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBv
+c2l0b3J5LzAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmdsb2JhbHNpZ24u
+bmV0L3Jvb3QuY3JsMD0GCCsGAQUFBwEBBDEwLzAtBggrBgEFBQcwAYYhaHR0cDov
+L29jc3AuZ2xvYmFsc2lnbi5jb20vcm9vdHIxMCkGA1UdJQQiMCAGCCsGAQUFBwMB
+BggrBgEFBQcDAgYKKwYBBAGCNwoDAzAfBgNVHSMEGDAWgBRge2YaRQ2XyolQL30E
+zTSo//z9SzANBgkqhkiG9w0BAQUFAAOCAQEAOg/NJk04MAioxvxc2Ah67/ocKgPO
+Mq5EluFSA5UKUtZnr1uWfN0ZizBbNjprbqAVxoKhyzlmAFeLAqJuhfusVVq4FVAa
+kN4JSOyo9lccGDG9xn3IvevCpzlRbaL/HHjeHCcE4c8klegO5NUfsPn7UMrLbp5i
+JniG9cT1eI/dcq9uLtWe3c48y7jHLVRg1+WcAkuGRPBXUSvNCps8sfU6TB2KxfAw
+PmWHxA5fbkqsiqge5/rkM4AVhFZlJZv7njCIy5EWwQXDqSTsIdLVsPy3I0annff3
+xlMSeDe0E3OPN5deBJv5mYuTPiZCl5/9HrXVy4hINKJmoPqsco/dRy+CdA==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/D2_Issuer_Root.pem b/test/ocsp-tests/D2_Issuer_Root.pem
new file mode 100644
index 000000000000..f4ce4ca43dc0
--- /dev/null
+++ b/test/ocsp-tests/D2_Issuer_Root.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
+AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
+yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
+38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
+AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
+DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
+HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/D3.ors b/test/ocsp-tests/D3.ors
new file mode 100644
index 000000000000..d66439b3473b
--- /dev/null
+++ b/test/ocsp-tests/D3.ors
@@ -0,0 +1,38 @@
+MIIG8AoBAKCCBukwggblBgkrBgEFBQcwAQEEggbWMIIG0jCB+aF+MHwxCzAJBgNV
+BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFVNlcnZlciBBZG1pbmlzdHJhdGlvbjEYMBYG
+A1UEAxMPb2NzcC5jYWNlcnQub3JnGA8yMDEyMTAyMzEwMzkzMFowZjBkMDwwCQYF
+Kw4DAhoFAAQUi6TJyxcpGUU+u45zCZG5JfKDImUEFBa1MhvUx/Pg5o7zvdKwOu6y
+ORjRAgMLs8aAABgPMjAxMjEwMjMwOTU5MTJaoBEYDzIwMTIxMDI1MTAzOTMwWjAN
+BgkqhkiG9w0BAQUFAAOCAQEAYaaAzW26JQGFRyawj9ROtnSdJ9QPJ6B/wfpJif8e
+QU9lmKx0zIDdTum3Mc5tfxML71W025UW9jzowAfQ5bZbqa4nwZlWX5Py3hKebeYo
+WiND4pvhS4BRkheSkycEok0bj1FJYWYiJVpnTqKAPnOKrlL4qvGC2IOHk2toS/Je
+iLyoUwxrPtqaXt4Caoa3I70HE3H1QqvPIGIY6V4bxV7Km/xv99QOutkbfANGiNsx
+W7EDB3TRNhldzMnjEwG58X5Pe3xwEVqjCiBL+wQ8JALn08bJzFn9E04aYrqCGc8s
+gw1dgaBoZt+0vbQUN71KEocwMj5mzJqottOyqNwo7FZnBaCCBL4wggS6MIIEtjCC
+Ap6gAwIBAgIDCpvzMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jvb3QgQ0Ex
+HjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZQ0EgQ2Vy
+dCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9ydEBjYWNl
+cnQub3JnMB4XDTExMDgyMzAwMDI1NloXDTEzMDgyMjAwMDI1NlowfDELMAkGA1UE
+BhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UEBxMGU3lkbmV5MRQwEgYDVQQKEwtD
+QWNlcnQgSW5jLjEeMBwGA1UECxMVU2VydmVyIEFkbWluaXN0cmF0aW9uMRgwFgYD
+VQQDEw9vY3NwLmNhY2VydC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCcxtRv5CPHw3BLdR/k/K72YsRgodbP+UdAONmvBvWzhwm6B8h6O+M64sFr
+2w6be7SYBECIyOQgNJ1flK4MoAWhdBA/H5NtxaDOKbAqA27tO9GaevcPp7c518O0
+3hVnlPLvsN1f48nY0jQOXUTfv5nYXmD0OSSK/V3IRo0KsWB6T9UnMGCeEwb4Oqqz
+uzM0b4SBflzMEony/m6Tg/qL7qs2TLZAqe77+BZaVdFkDUnaBN7RyMruXySxeXiz
+mogT3WhROeloMa/X+E01bWBYBEK7VZIY9pgBpXQ7vDbbIGgYuIXUi20wh03WMy16
+VDYdV0IUXHpidNUeK9W/BPP/7APBAgMBAAGjRDBCMAwGA1UdEwEB/wQCMAAwJwYD
+VR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMBBggrBgEFBQcDCTAJBgNVHREEAjAA
+MA0GCSqGSIb3DQEBBQUAA4ICAQAoT6p5f3cGprAcgrnzdenfTmDe9LCW7k2VnazA
+MAzpsD6gXcSlo4+3hoHem/SpKRH2tqi34DmImCiv/S6fxsKM4Gfn5rlkAFviuTvS
+r5Zrwh4ZKSfaoWv4bmbzmcAxvuxdMWHf/5PbjegjzFTbBMekVPZY/abYtD6kdHQZ
+VNgzwZVfTBfYhfa+Rg72I2zjKpMsjxMqWfTmUzW6wfK6LFudZqu0U1NnJw+IlnVU
+6WtjL885ebQrmcRqWz3nMhVLIu5L3w/s+VTLvm7If6jcMDNUjz8s2BPcJeCXg3TE
+STsyl6tvk17RRz2+9JskxVOk11xIn96xR4FCERIid2ek9z1xi7oYOajQF50i/9Gj
+ReDEfRSyb4/LzoKDOY+h4Q6jryeHh7WIHFiK5qrBN2y8qOoRJ/OqQnqci/BJBNpe
+g9Q9PJRgGSzRndTXNHiYRbeLpq7eGo3sPqlR9qBQ3rd98XGOU0RCMnzjKhENC3qo
+5PkSF2xs8RmjWktFSTDwjYo0qf1teo7CGHjgaPjQ7JE8Q4ysFOQndSWmLpqwDcI9
+HfIvPwUIWArQrJRh9LCNSyvHVgLqY9kw8NW4TlMxV2WqaYCkiKi3XVRrSFR3ahS1
+VBvRZ8KpplrV7rhXjVSSqqfLk1sX3l72Ck2F9ON+qbNFmvhgNjSiBY9neMgo804a
+wG/pag==
diff --git a/test/ocsp-tests/D3_Cert_EE.pem b/test/ocsp-tests/D3_Cert_EE.pem
new file mode 100644
index 000000000000..f371ed1f17d9
--- /dev/null
+++ b/test/ocsp-tests/D3_Cert_EE.pem
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFZDCCA0ygAwIBAgIDC7PGMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jv
+b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
+Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
+dEBjYWNlcnQub3JnMB4XDTEyMDUwNjE4NDY0MVoXDTE0MDUwNjE4NDY0MVowWzEL
+MAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UEBxMGU3lkbmV5MRQwEgYD
+VQQKEwtDQWNlcnQgSW5jLjEXMBUGA1UEAxMOd3d3LmNhY2VydC5vcmcwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDeNSAxSFtymeN6rQD69eXIJEnCCP7Z
+24/fdOgxRDSBhfQDUVhdmsuDOvuziOoWGqRxZPcWdMEMRcJ5SrA2aHIstvnaLhUl
+xp2fuaeXx9XMCJ9ZmzHZbH4wqLaU+UlhcSsdkPzapf3N3HaUAW8kT4bHEGzObYVC
+UBxxhpY01EoGRQmnFojzLNF3+0O1npQzXg5MeIWHW/Z+9jE+6odL6IXgg1bvrP4d
+FgoveTcG6BmJu+50RwHaUad7hQuNeS+pNsVzCiDdMF2qoCQXtAGhnEQ9/KHpBD2z
+ISBVIyEbYxdyU/WxnkaOof63Mf/TAgMNzVN9duqEtFyvvMrQY1XkBBwfAgMBAAGj
+ggERMIIBDTAMBgNVHRMBAf8EAjAAMDQGA1UdJQQtMCsGCCsGAQUFBwMCBggrBgEF
+BQcDAQYJYIZIAYb4QgQBBgorBgEEAYI3CgMDMAsGA1UdDwQEAwIFoDAzBggrBgEF
+BQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmNhY2VydC5vcmcvMIGE
+BgNVHREEfTB7gg53d3cuY2FjZXJ0Lm9yZ4IRc2VjdXJlLmNhY2VydC5vcmeCEnd3
+d21haWwuY2FjZXJ0Lm9yZ4IKY2FjZXJ0Lm9yZ4IOd3d3LmNhY2VydC5uZXSCCmNh
+Y2VydC5uZXSCDnd3dy5jYWNlcnQuY29tggpjYWNlcnQuY29tMA0GCSqGSIb3DQEB
+BQUAA4ICAQA2+uCGX18kZD8gyfj44TlwV4TXJ5BrT0M9qogg2k5u057i+X2ePy3D
+iE2REyLkU+i5ekH5gvTl74uSJKtpSf/hMyJEByyPyIULhlXCl46z2Z60drYzO4ig
+apCdkm0JthVGvk6/hjdaxgBGhUvSTEP5nLNkDa+uYVHJI58wfX2oh9gqxf8VnMJ8
+/A8Zi6mYCWUlFUobNd/ozyDZ6WVntrLib85sAFhds93nkoUYxgx1N9Xg/I31/jcL
+6bqmpRAZcbPtvEom0RyqPLM+AOgySWiYbg1Nl8nKx25C2AuXk63NN4CVwkXpdFF3
+q5qk1izPruvJ68jNW0pG7nrMQsiY2BCesfGyEzY8vfrMjeR5MLNv5r+obeYFnC1j
+uYp6JBt+thW+xPFzHYLjohKPwo/NbMOjIUM9gv/Pq3rVRPgWru4/8yYWhrmEK370
+rtlYBUSGRUdR8xed1Jvs+4qJ3s9t41mLSXvUfwyPsT7eoloUAfw3RhdwOzXoC2P6
+ftmniyu/b/HuYH1AWK+HFtFi9CHiMIqOJMhj/LnzL9udrQOpir7bVej/mlb3kSRo
+2lZymKOvuMymMpJkvBvUU/QEbCxWZAkTyqL2qlcQhHv7W366DOFjxDqpthaTRD69
+T8i/2AnsBDjYFxa47DisIvR57rLmE+fILjSvd94N/IpGs3lSOS5JeA==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/D3_Issuer_Root.pem b/test/ocsp-tests/D3_Issuer_Root.pem
new file mode 100644
index 000000000000..3ccc18e8d9c4
--- /dev/null
+++ b/test/ocsp-tests/D3_Issuer_Root.pem
@@ -0,0 +1,83 @@
+-----BEGIN CERTIFICATE-----
+MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
+IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
+IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
+Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
+BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
+MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
+ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
+8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
+zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
+fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
+w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
+G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
+epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
+laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
+QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
+fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
+YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
+ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
+gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
+MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
+IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
+dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
+czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
+dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
+aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
+AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
+b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
+ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
+nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
+18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
+gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
+Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
+sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
+SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
+CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
+GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
+zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
+omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIHWTCCBUGgAwIBAgIDCkGKMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv
+b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
+Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
+dEBjYWNlcnQub3JnMB4XDTExMDUyMzE3NDgwMloXDTIxMDUyMDE3NDgwMlowVDEU
+MBIGA1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0
+Lm9yZzEcMBoGA1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdDCCAiIwDQYJKoZIhvcN
+AQEBBQADggIPADCCAgoCggIBAKtJNRFIfNImflOUz0Op3SjXQiqL84d4GVh8D57a
+iX3h++tykA10oZZkq5+gJJlz2uJVdscXe/UErEa4w75/ZI0QbCTzYZzA8pD6Ueb1
+aQFjww9W4kpCz+JEjCUoqMV5CX1GuYrz6fM0KQhF5Byfy5QEHIGoFLOYZcRD7E6C
+jQnRvapbjZLQ7N6QxX8KwuPr5jFaXnQ+lzNZ6MMDPWAzv/fRb0fEze5ig1JuLgia
+pNkVGJGmhZJHsK5I6223IeyFGmhyNav/8BBdwPSUp2rVO5J+TJAFfpPBLIukjmJ0
+FXFuC3ED6q8VOJrU0gVyb4z5K+taciX5OUbjchs+BMNkJyIQKopPWKcDrb60LhPt
+XapI19V91Cp7XPpGBFDkzA5CW4zt2/LP/JaT4NsRNlRiNDiPDGCbO5dWOK3z0luL
+oFvqTpa4fNfVoIZwQNORKbeiPK31jLvPGpKK5DR7wNhsX+kKwsOnIJpa3yxdUly6
+R9Wb7yQocDggL9V/KcCyQQNokszgnMyXS0XvOhAKq3A6mJVwrTWx6oUrpByAITGp
+rmB6gCZIALgBwJNjVSKRPFbnr9s6JfOPMVTqJouBWfmh0VMRxXudA/Z0EeBtsSw/
+LIaRmXGapneLNGDRFLQsrJ2vjBDTn8Rq+G8T/HNZ92ZCdB6K4/jc0m+YnMtHmJVA
+BfvpAgMBAAGjggINMIICCTAdBgNVHQ4EFgQUdahxYEyIE/B42Yl3tW3Fid+8sXow
+gaMGA1UdIwSBmzCBmIAUFrUyG9TH8+DmjvO90rA67rI5GNGhfaR7MHkxEDAOBgNV
+BAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAG
+A1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
+c3VwcG9ydEBjYWNlcnQub3JnggEAMA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUH
+AQEEUTBPMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggr
+BgEFBQcwAoYcaHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBB
+MD8GCCsGAQQBgZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9y
+Zy9pbmRleC5waHA/aWQ9MTAwNAYJYIZIAYb4QgEIBCcWJWh0dHA6Ly93d3cuQ0Fj
+ZXJ0Lm9yZy9pbmRleC5waHA/aWQ9MTAwUAYJYIZIAYb4QgENBEMWQVRvIGdldCB5
+b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSwgZ28gdG8gaHR0cDovL3d3dy5D
+QWNlcnQub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQApKIWuRKm5r6R5E/CooyuXYPNc
+7uMvwfbiZqARrjY3OnYVBFPqQvX56sAV2KaC2eRhrnILKVyQQ+hBsuF32wITRHhH
+Va9Y/MyY9kW50SD42CEH/m2qc9SzxgfpCYXMO/K2viwcJdVxjDm1Luq+GIG6sJO4
+D+Pm1yaMMVpyA4RS5qb1MyJFCsgLDYq4Nm+QCaGrvdfVTi5xotSu+qdUK+s1jVq3
+VIgv7nSf7UgWyg1I0JTTrKSi9iTfkuO960NAkW4cGI5WtIIS86mTn9S8nK2cde5a
+lxuV53QtHA+wLJef+6kzOXrnAzqSjiL2jA3k2X4Ndhj3AfnvlpaiVXPAPHG0HRpW
+Q7fDCo1y/OIQCQtBzoyUoPkD/XFzS4pXM+WOdH4VAQDmzEoc53+VGS3FpQyLu7Xt
+hbNc09+4ufLKxw0BFKxwWMWMjTPUnWajGlCVI/xI4AZDEtnNp4Y5LzZyo4AQ5OHz
+0ctbGsDkgJp8E3MGT9ujayQKurMcvEp4u+XjdTilSKeiHq921F73OIZWWonO1sOn
+ebJSoMbxhbQljPI/lrMQ2Y1sVzufb4Y6GIIiNsiwkTjbKqGTqoQ/9SdlrnPVyNXT
+d+pLncdBu8fA46A/5H2kjXPmEkvfoXNzczqA6NXLji/L6hOn1kGLrPo8idck9U60
+4GGSt/M3mMS+lqO3ig==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ISDOSC_D1.ors b/test/ocsp-tests/ISDOSC_D1.ors
new file mode 100644
index 000000000000..66a60a27f6da
--- /dev/null
+++ b/test/ocsp-tests/ISDOSC_D1.ors
@@ -0,0 +1,32 @@
+MIIFzwoBAKCCBcgwggXEBgkrBgEFBQcwAQEEggW1MIIFsTCBoKIWBBSpTXftIZX0
+lLT9zwVSQC5Jfp3pqhgPMjAxMjEwMTAxNDU0NDNaMHUwczBLMAkGBSsOAwIaBQAE
+FKByDqBqfGICVPKo9Z3Se6Tzty+kBBSwsEr9HHUo+BxhqhP2+sGQPWsWowISESG8
+vx4IzALnkqQG05AvM+2bgAAYDzIwMTIxMDEwMTMwMDAwWqARGA8yMDEyMTAxNzEz
+MDAwMFowCwYJKoZIhvcNAQEFA4IBAQBw5Z+0ggEddRTIq7cXlMoxG9Nrx4HtutsH
+itIUoZp/rlLoxHsJTo/VmdZvTTGIc7Ok9XuoH61lY/x9glAKsGRjz4Myc9+5rx0O
+675lwmOS+uaf3/hRkicVrVr7Pt2ug3R7OXm2MJrohjNKP8lqtLJ0hHP88a8rotKA
+r9uz/qHm7K4Uh7dRt/Pnu9MPG74tZeFNN4M1ONMEiRdG39FqzFDXWxwQ3NmyC0Wo
+DQn+NklZMknr8mm7IBWpzgU1fTD9R0yv0zdhUZGiEXxvdhm7GJrTET5jS30Ksm5j
+o+n39YVu/vGbjyyYx3+WdeQLEyipaGvldSuJpT+R684/RuFWNetcoIID+DCCA/Qw
+ggPwMIIC2KADAgECAhIRIcYjwu4UNkR1VGrDbSdFei8wDQYJKoZIhvcNAQEFBQAw
+WTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNV
+BAMTJkdsb2JhbFNpZ24gRXh0ZW5kZWQgVmFsaWRhdGlvbiBDQSAtIEcyMB4XDTEy
+MDkxOTA3NDAzMVoXDTEyMTIxOTA4NDAzMVowgYUxCzAJBgNVBAYTAkJFMRkwFwYD
+VQQKExBHbG9iYWxTaWduIG52LXNhMUIwQAYDVQQDEzlHbG9iYWxTaWduIEV4dGVu
+ZGVkIFZhbGlkYXRpb24gQ0EgLSBHMiBPQ1NQIHJlc3BvbmRlciAtIDExFzAVBgNV
+BAUTDjIwMTIwOTE5MDkzOTAwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAxkkb6QhDH3sEDj4zaysjVzYelq9lZ1cso4R2IyQxaoPaG6GkaCmHA4sz6KP+
+m3ADqplibEUBa/mzCxHW8/oy3NhGMFdbezduZrnRFLbzakOTeIo8VEIM3JPfgREv
+CX8nj6Xu7ERD6JO/ZQ9Xr7YVzKKN+3cVZlcMHoGBnOPcO2Sz0AcYyk5m5IsGBRoT
+T86j6Cr9PhOPTVwXL6Wxy1KVHsUZXUwnRacV0O4SHWQ4zM9Sablus9fTbh1CgIqW
+sKDyzVB4yECXkBVeUlA+cuCaRRVHRiR+jPDSgbU62nnNudEpGG7dyoop6IOvXv2O
+ydncWzaukxIVvQ/Ij85kHqs7HQIDAQABo4GEMIGBMAkGA1UdEwQCMAAwDgYDVR0P
+AQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GCSsGAQUFBzABBQQCBQAw
+HQYDVR0OBBYEFKlNd+0hlfSUtP3PBVJALkl+nemqMB8GA1UdIwQYMBaAFLCwSv0c
+dSj4HGGqE/b6wZA9axajMA0GCSqGSIb3DQEBBQUAA4IBAQCe4rZg61Dmwygl/Uae
+BJZog64/FvuB1sfCqKLJTjKOfLcugSTX1TT7bLJbzXRGPQuorI3TIZEOwldIw01d
+DTLlsOCHrfHd+bpxgijxPkUuaA4NYnpvqTEMJqPKOC8QYfKupNjAPSuHvwqvqCfO
+RCe3jY6xQDO0WCTZ8/xMsOkw+J/YEYqALETf2Ug7k5eRL/TvfLd8Sgi7vPfmUeiW
+ptlsbhMOWQoQc+JA3vCI01rrjNq+0kIZ/r8nPGvablRr0Aakk6eDuS2dcReaPwuK
+0xE136pJYiXdQ3SA7uwmlorjxmejavyoPCr23TU74DQEt6hhc6uIcabsa4Y8KvJy
+RI4F
diff --git a/test/ocsp-tests/ISDOSC_D2.ors b/test/ocsp-tests/ISDOSC_D2.ors
new file mode 100644
index 000000000000..664c8d25faf1
--- /dev/null
+++ b/test/ocsp-tests/ISDOSC_D2.ors
@@ -0,0 +1,32 @@
+MIIF4AoBAKCCBdkwggXVBgkrBgEFBQcwAQEEggXGMIIFwjCBmaIWBBTqlwecTarB
+yVdbHxANRLCFYj1mqBgPMjAxMjEwMTEwOTE1MzNaMG4wbDBEMAkGBSsOAwIaBQAE
+FLdXtbacB/gWIxOOkMkqDr4yAaoxBBRge2YaRQ2XyolQL30EzTSo//z9SwILBAAA
+AAABL07hRxCAABgPMjAxMjEwMDEwNjAwMDBaoBEYDzIwMTMwNDE1MDYwMDAwWjAL
+BgkqhkiG9w0BAQUDggEBAF/9ByrCS+pCCK4qovqUAH/yoWckmpLFCzKJGHkErJeY
+FlUbAJuu/Gs0IdLmLp+2VbStjsL4vLtDU2Q4e417C1fm8+ixh+kP7qPRd8cxyMBx
+cmD2m1v0CgbrflCZEC71cTrrWpcW+6jg623lI4Ug3A4zlizbT/f9IrxuV9VB9/G5
+6kPI5dYOVZM0ColIxmJsafuxfr6ONQLPHKTlZJK3SyWebs25006OmrSyfBi0j26j
+WU5d6B2NJZBKqvDVMXxZ0q6QOgKxOs8WD+6DaA1d1f7gTOl45XJZWz5KnRePyRxM
+Fp0ak6XYbE1y2vHE2RWp1w4lcVJ0BUQXWxx+g86F5W2gggQQMIIEDDCCBAgwggLw
+oAMCAQICCwQAAAAAAThXovYBMA0GCSqGSIb3DQEBBQUAMFcxCzAJBgNVBAYTAkJF
+MRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRsw
+GQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwHhcNMTIwNzA1MTgwMDAwWhcNMTMw
+NzA1MTgwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu
+di1zYTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBPQ1NQIGZvciBSb290IFIxIC0gQnJh
+bmNoIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDP2QF8p0+Fb7ID
+MwwD1gEr2oazjqbW28EZr3YEyMPk+7VFaGePSO1xjBGIE48Q7m7d6p6ZXCzlBZEi
+oudrHSr3WDqdIVKLDrZIDkgEgdjJE72Hq6Pf5CEGXyebbODm4sV96EfewSvOOYLL
+866g3aoVhLDK02ny+Q5OsokW7nhnmGMMh10tZqR5VmdQTiw8MgeqUxBEaEO4WH2J
+ltgSsgNJBNBYuDgnn5ryzVqhvmCJvYZMYeN6qZFKy1MgHcR+wEpGLPlRL4ttu6e5
+MJrVta7dVFobHUHoFog97LtQT1PY0Ubaihswjge5O04bYeCrgSSjr1e4xH/KDxRw
+yyhoscaFAgMBAAGjgdIwgc8wDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTqlwec
+TarByVdbHxANRLCFYj1mqDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBXzA0MDIGCCsG
+AQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAJ
+BgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFGB7ZhpF
+DZfKiVAvfQTNNKj//P1LMA8GCSsGAQUFBzABBQQCBQAwDQYJKoZIhvcNAQEFBQAD
+ggEBAHiC6N1uF29d7CmiVapA8Nr1xLSVeIkBd4A8yHsUTQ7ATI7bwT14QUV4awe7
+8cvmO5ZND8YG1ViwN162WFm9ivSoWBzvWDbU2JhQFb+XzrzCcdn0YbNiTxJh/vYm
+uDuxto00dpBgujSOAQv8B90iDEJ+sZpYRzDRj62qStRey0zpq5eX+pA+gdppMUFb
+4QvJf0El8TbLCWLN4TjrFe6ju7ZaN9zmgVYGQ2fMHKIGNScLuIA950nYwzRkIfHa
+YW6HqP1rCR1EiYmstEeCQyDxJx+RUlh+q8L1BKzaMYhS6s63MZzQuGseYStaCmbC
+fBIRKjnK621vAWvc7UR+0hqnZ+Y=
diff --git a/test/ocsp-tests/ISDOSC_D3.ors b/test/ocsp-tests/ISDOSC_D3.ors
new file mode 100644
index 000000000000..ac2bb25de24c
--- /dev/null
+++ b/test/ocsp-tests/ISDOSC_D3.ors
@@ -0,0 +1,38 @@
+MIIG8AoBAKCCBukwggblBgkrBgEFBQcwAQEEggbWMIIG0jCB+aF+MHwxCzAJBgNV
+BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFVNlcnZlciBBZG1pbmlzdHJhdGlvbjEYMBYG
+A1UEAxMPb2NzcC5jYWNlcnQub3JnGA8yMDEyMTAxMTEwMTAyMVowZjBkMDwwCQYF
+Kw4DAhoFAAQUi6TJyxcpGUU+u45zCZG5JfKDImUEFBa1MhvUx/Pg5o7zvdKwOu6y
+ORjRAgMLs8aAABgPMjAxMjEwMTEwOTUyNDJaoBEYDzIwMTIxMDEzMTAxMDIxWjAN
+BgkqhkiG9w0BAQUFAAOCAQEAWX7faLDXkmIdOv/IKBh7awhPmGUhFPVSrMI4dc9/
+fcPDOYhFwWr9evKT/QdXRGpZY493mfa4Z6eEDxRDTexOloaiaJzVpSeV9hoJUxoS
+8NEWDyi33bDlIJH6zru4kk1LpuSMiSWsvLaeoRhHmW3EPDeadpCa5tYX2yNW5hdP
+iCfphDJ34/hWHHwHP6mLd1wEO1Rw6nymqeDbuLk1FviD/ZWXMGzK8Sv++tmsQ0Tg
+7XrkIPcSrozPKOTCf/1iJVF5KeQVIb0Ju1PvGUKtGaVTX8IZQmer2WQ1D6OOUcsS
+cWA6NSpWmScX/0/uBpXdSDX0AnGUS9SNrPNEolz6rA5OUaCCBL4wggS6MIIEtjCC
+Ap6gAwIBAgIDCpvzMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jvb3QgQ0Ex
+HjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZQ0EgQ2Vy
+dCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9ydEBjYWNl
+cnQub3JnMB4XDTExMDgyMzAwMDI1NloXDTEzMDgyMjAwMDI1NlowfDELMAkGA1UE
+BhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UEBxMGU3lkbmV5MRQwEgYDVQQKEwtD
+QWNlcnQgSW5jLjEeMBwGA1UECxMVU2VydmVyIEFkbWluaXN0cmF0aW9uMRgwFgYD
+VQQDEw9vY3NwLmNhY2VydC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCcxtRv5CPHw3BLdR/k/K72YsRgodbP+UdAONmvBvWzhwm6B8h6O+M64sFr
+2w6be7SYBECIyOQgNJ1flK4MoAWhdBA/H5NtxaDOKbAqA27tO9GaevcPp7c518O0
+3hVnlPLvsN1f48nY0jQOXUTfv5nYXmD0OSSK/V3IRo0KsWB6T9UnMGCeEwb4Oqqz
+uzM0b4SBflzMEony/m6Tg/qL7qs2TLZAqe77+BZaVdFkDUnaBN7RyMruXySxeXiz
+mogT3WhROeloMa/X+E01bWBYBEK7VZIY9pgBpXQ7vDbbIGgYuIXUi20wh03WMy16
+VDYdV0IUXHpidNUeK9W/BPP/7APBAgMBAAGjRDBCMAwGA1UdEwEB/wQCMAAwJwYD
+VR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMBBggrBgEFBQcDCTAJBgNVHREEAjAA
+MA0GCSqGSIb3DQEBBQUAA4ICAQAoT6p5f3cGprAcgrnzdenfTmDe9LCW7k2VnazA
+MAzpsD6gXcSlo4+3hoHem/SpKRH2tqi34DmImCiv/S6fxsKM4Gfn5rlkAFviuTvS
+r5Zrwh4ZKSfaoWv4bmbzmcAxvuxdMWHf/5PbjegjzFTbBMekVPZY/abYtD6kdHQZ
+VNgzwZVfTBfYhfa+Rg72I2zjKpMsjxMqWfTmUzW6wfK6LFudZqu0U1NnJw+IlnVU
+6WtjL885ebQrmcRqWz3nMhVLIu5L3w/s+VTLvm7If6jcMDNUjz8s2BPcJeCXg3TE
+STsyl6tvk17RRz2+9JskxVOk11xIn96xR4FCERIid2ek9z1xi7oYOajQF50i/9Gj
+ReDEfRSyb4/LzoKDOY+h4Q6jryeHh7WIHFiK5qrBN2y8qOoRJ/OqQnqci/BJBNpe
+g9Q9PJRgGSzRndTXNHiYRbeLpq7eGo3sPqlR9qBQ3rd98XGOU0RCMnzjKhENC3qo
+5PkSF2xs8RmjWktFSTDwjYo0qf1teo7CGHjgaPjQ7JE8Q4ysFOQndSWmLpqwDcI9
+HfIvPwUIWArQrJRh9LCNSyvHVgLqY9kw8NW4TlMxV2WqaYCkiKi3XVRrSFR3ahS1
+VBvRZ8KpplrV7rhXjVSSqqfLk1sX3l72Ck2F9ON+qbNFmvhgNjSiBY9neMgo804a
+wG/paw==
diff --git a/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem b/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem
new file mode 100644
index 000000000000..b88477532e75
--- /dev/null
+++ b/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEhjCCA26gAwIBAgILBAAAAAABL07hXdQwDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTEwNDEzMTAwMDAwWhcNMjIwNDEz
+MTAwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1z
+YTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBFeHRlbmRlZCBWYWxpZGF0aW9uIENBIC0g
+RzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNoUbMUpq4pbR/WNnN
+2EugcgyXW6aIIMO5PUbc0FxSMPb6WU+FX7DbiLSpXysjSKyr9ZJ4FLYyD/tcaoVb
+AJDgu2X1WvlPZ37HbCnsk8ArysRe2LDb1r4/mwvAj6ldrvcAAqT8umYROHf+IyAl
+VRDFvYK5TLFoxuJwe4NcE2fBofN8C6iZmtDimyUxyCuNQPZSY7GgrVou9Xk2bTUs
+Dt0F5NDiB0i3KF4r1VjVbNAMoQFGAVqPxq9kx1UBXeHRxmxQJaAFrQCrDI1la93r
+wnJUyQ88ABeHIu/buYZ4FlGud9mmKE3zWI2DZ7k0JZscUYBR84OSaqOuR5rW5Isb
+wO2xAgMBAAGjggFaMIIBVjAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB
+/wIBADAdBgNVHQ4EFgQUsLBK/Rx1KPgcYaoT9vrBkD1rFqMwRwYDVR0gBEAwPjA8
+BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29t
+L3JlcG9zaXRvcnkvMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs
+c2lnbi5uZXQvcm9vdC1yMi5jcmwwRAYIKwYBBQUHAQEEODA2MDQGCCsGAQUFBzAB
+hihodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9FeHRlbmRlZFNTTENBMCkGA1Ud
+JQQiMCAGCCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAzAfBgNVHSMEGDAW
+gBSb4gdXZxwewGoG3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAL0m28rZa
+pJWrnlrpK4KbzJBrfHRFIOde2Mcj7ig1sTVlKqVR4FU/9oNntOQ2KbDa7JeVqYoF
+o0X+Iy5SiLQfEICt0oufo1+oxetz3nmIQZgz7qdgGLFGyUAQB5yPClLJExoGbqCb
+LTr2rk/no1E1KlsYBRLlUdy2NmLz4aQP++TPw5S/EauhWTEB8MxT7I9j12yW00gq
+iiPtRVaoZkHqAblH7qFHDBTxI+Egc8p9UHxkOFejj0qcm+ltRc9Ea01gIEBxJbVG
+qmwIft/I+shWKpLLg7h5CZctXqEBzgbttJfJBNxB7+BPNk3kQHNG7BESfIhbNCYl
+TercGL7FG81kwQ==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ISIC_D2_Issuer_Root.pem b/test/ocsp-tests/ISIC_D2_Issuer_Root.pem
new file mode 100644
index 000000000000..22f34cbbce08
--- /dev/null
+++ b/test/ocsp-tests/ISIC_D2_Issuer_Root.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
+AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
+yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
+38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
+AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
+DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
+HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4Q==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ISIC_D3_Issuer_Root.pem b/test/ocsp-tests/ISIC_D3_Issuer_Root.pem
new file mode 100644
index 000000000000..c1752e6b5d20
--- /dev/null
+++ b/test/ocsp-tests/ISIC_D3_Issuer_Root.pem
@@ -0,0 +1,41 @@
+-----BEGIN CERTIFICATE-----
+MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
+IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
+IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
+Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
+BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
+MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
+ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
+8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
+zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
+fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
+w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
+G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
+epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
+laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
+QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
+fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
+YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
+ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
+gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
+MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
+IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
+dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
+czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
+dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
+aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
+AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
+b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
+ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
+nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
+18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
+gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
+Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
+sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
+SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
+CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
+GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
+zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
+omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVE
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem b/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem
new file mode 100644
index 000000000000..25bb90ffffdd
--- /dev/null
+++ b/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIFBjCCA+6gAwIBAgIQEaO00OyNt3+doM1dLVEvQjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMDA1MjQwMDAw
+MDBaFw0yMDA1MzAxMDQ4MzhaMIGOMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDE0MDIGA1UEAxMrQ09NT0RPIEV4dGVuZGVkIFZhbGlkYXRp
+b24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMxKljPNJY1n7iiWN4dG8PYEooR/U6qW5h+xAhxu7X0h1Nc8HqLYaS+ot/Wi
+7WRYZOFEZTZJQSABjTsT4gjzDPJXOZM3txyTRIOOvy3xoQV12m7ue28b6naDKHRK
+HCvT9cQDcpOvhs4JjDx11MkKL3Lzrb0OMDyEoXMfAyUUpY/D1vS15N2GevUZumjy
+hVSiMBHK0ZLLO3QGEqA3q2rYVBHfbJoWlLm0p2XGdC0x801S6VVRn8s+oo12mHDS
+b6ZlRS8bhbtbbfnywARmE4R6nc4n2PREnr+svpnba0/bWCGwiSe0jzLWS15ykV7f
+BZ3ZSS/0tm9QH3XLgJ3m0+TR8tMCAwEAAaOCAWkwggFlMB8GA1UdIwQYMBaAFAtY
+5YvGTBU3pECpMKkhvkc2Wlb/MB0GA1UdDgQWBBSIRFH/UCppXi2I9CG62Qzyzsvq
+fDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADA+BgNVHSAENzA1
+MDMGBFUdIAAwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNv
+bS9DUFMwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5jb21vZG9jYS5jb20v
+Q09NT0RPQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwdAYIKwYBBQUHAQEEaDBm
+MD4GCCsGAQUFBzAChjJodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9BZGRU
+cnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2Rv
+Y2EuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCaQ7+vpHJezX1vf/T8PYy7cOYe3QT9
+P9ydn7+JdpvyhjH8f7PtKpFTLOKqsOPILHH3FYojHPFpLoH7sbxiC6saVBzZIl40
+TKX2Iw9dej3bQ81pfhc3Us1TocIR1FN4J2TViUFNFlW7kMvw2OTd3dMJZEgo/zIj
+hC+Me1UvzymINzR4DzOq/7fylqSbRIC1vmxWVKukgZ4lGChUOn8sY89ZIIwYazgs
+tN3t40DeDDYlV5rA0WCeXgNol64aO+pF11GZSe5EWVYLXrGPaOqKnsrSyaADfnAl
+9DLJTlCDh6I0SD1PNXf82Ijq9n0ezkO21cJqfjhmY03n7jLvDyToKmf7
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem b/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem
new file mode 100644
index 000000000000..129eb4b28de4
--- /dev/null
+++ b/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0DCCArigAwIBAgIQIKTEf93f4cdTYwcTiHdgEjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMTAxMDEwMDAw
+MDBaFw0zMDEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
+UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
+2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
+Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
+nKVIrLsm9wIDAQABo0IwQDAdBgNVHQ4EFgQUC1jli8ZMFTekQKkwqSG+RzZaVv8w
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBAC/JxBwHO89hAgCx2SFRdXIDMLDEFh9sAIsQrK/xR9SuEDwMGvjUk2ysEDd8
+t6aDZK3N3w6HM503sMZ7OHKx8xoOo/lVem0DZgMXlUrxsXrfViEGQo+x06iF3u6X
+HWLrp+cxEmbDD6ZLLkGC9/3JG6gbr+48zuOcrigHoSybJMIPIyaDMouGDx8rEkYl
+Fo92kANr3ryqImhrjKGsKxE5pttwwn1y6TPn/CbxdFqR5p2ErPioBhlG5qfpqjQi
+pKGfeq23sqSaM4hxAjwu1nqyH6LKwN0vEJT9s4yEIHlG1QXUEOTS22RPuFvuG8Ug
+R1uUq27UlTMdphVx8fiUylQ5PsI=
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem b/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem
new file mode 100644
index 000000000000..4904a3224a2d
--- /dev/null
+++ b/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgU=
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ISOP_D1.ors b/test/ocsp-tests/ISOP_D1.ors
new file mode 100644
index 000000000000..d28c9ec36669
--- /dev/null
+++ b/test/ocsp-tests/ISOP_D1.ors
@@ -0,0 +1,32 @@
+MIIFzwoBAKCCBcgwggXEBgkrBgEFBQcwAQEEggW1MIIFsTCBoKIWBBSpTXftIZX0
+lLT9zwVSQC5Jfp3pqhgPMjAxMjEwMTAxMTU1NDVaMHUwczBLMAkGBSsOAwIaBQAE
+FKByDqBqfGICVPKo9Z3Se6Tzty+kBBSwsEr9HHUo+BxhqhP2+sGQPWsWowISESG8
+vx4IzALnkqQG05AvM+2bgAAYDzIwMTIxMDEwMTAwMDAwWqARGA8yMDEyMTAxNzEw
+MDAwMFowCwYJKoZIhvcNAQEFA4IBAQCaiUf6TuPaSmZR2i3hUwqdEfhjcZkcCXPu
+9diWuDZbaL6ubthfeTwx6OsZ0eM3Q+WPhBNlYQ9Sm8PDUQsQiq3YvuYu+QUisChx
+PN6BUEwFQZAGz+FX2h5+kAmK1M/xZeXMBCXJWJCClagiw5hOJfeV0ue7RUZRVuZv
+am0ZjyIeLsxsIrxghlcaJRosFmYNoM++euu5lvclutv1UQ5yyNxlYy0T/jA9gS07
+WJ/i38+zxnXTuAPOm67p5N1IkEAEg/7OPRIG17Ig1C38NctN74vAOdTU1d/ay05V
+Bz4ZiI9PffkUkPgW2QRQCEjv50i80wYkKH5pIbT/mTk4t53DUK1UoIID+DCCA/Qw
+ggPwMIIC2KADAgECAhIRIcYjwu4UNkR1VGrDbSdFei8wDQYJKoZIhvcNAQEFBQAw
+WTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNV
+BAMTJkdsb2JhbFNpZ24gRXh0ZW5kZWQgVmFsaWRhdGlvbiBDQSAtIEcyMB4XDTEy
+MDkxOTA3NDAzMVoXDTEyMTIxOTA4NDAzMVowgYUxCzAJBgNVBAYTAkJFMRkwFwYD
+VQQKExBHbG9iYWxTaWduIG52LXNhMUIwQAYDVQQDEzlHbG9iYWxTaWduIEV4dGVu
+ZGVkIFZhbGlkYXRpb24gQ0EgLSBHMiBPQ1NQIHJlc3BvbmRlciAtIDExFzAVBgNV
+BAUTDjIwMTIwOTE5MDkzOTAwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAxkkb6QhDH3sEDj4zaysjVzYelq9lZ1cso4R2IyQxaoPaG6GkaCmHA4sz6KP+
+m3ADqplibEUBa/mzCxHW8/oy3NhGMFdbezduZrnRFLbzakOTeIo8VEIM3JPfgREv
+CX8nj6Xu7ERD6JO/ZQ9Xr7YVzKKN+3cVZlcMHoGBnOPcO2Sz0AcYyk5m5IsGBRoT
+T86j6Cr9PhOPTVwXL6Wxy1KVHsUZXUwnRacV0O4SHWQ4zM9Sablus9fTbh1CgIqW
+sKDyzVB4yECXkBVeUlA+cuCaRRVHRiR+jPDSgbU62nnNudEpGG7dyoop6IOvXv2O
+ydncWzaukxIVvQ/Ij85kHqs7HQIDAQABo4GEMIGBMAkGA1UdEwQCMAAwDgYDVR0P
+AQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GCSsGAQUFBzABBQQCBQAw
+HQYDVR0OBBYEFKlNd+0hlfSUtP3PBVJALkl+nemqMB8GA1UdIwQYMBaAFLCwSv0c
+dSj4HGGqE/b6wZA9axajMA0GCSqGSIb3DQEBBQUAA4IBAQCe4rZg61Dmwygl/Uae
+BJZog64/FvuB1sfCqKLJTjKOfLcugSTX1TT7bLJbzXRGPQuorI3TIZEOwldIw01d
+DTLlsOCHrfHd+bpxgijxPkUuaA4NYnpvqTEMJqPKOC8QYfKupNjAPSuHvwqvqCfO
+RCe3jY6xQDO0WCTZ8/xMsOkw+J/YEYqALETf2Ug7k5eRL/TvfLd8Sgi7vPfmUeiW
+ptlsbhMOWQoQc+JA3vCI01rrjNq+0kIZ/r8nPGvablRr0Aakk6eDuS2dcReaPwuK
+0xE136pJYiXdQ3SA7uwmlorjxmejavyoPCr23TU74DQEt6hhc6uIcabsa4Y8KvJy
+RI4G
diff --git a/test/ocsp-tests/ISOP_D2.ors b/test/ocsp-tests/ISOP_D2.ors
new file mode 100644
index 000000000000..b6c541df7dbc
--- /dev/null
+++ b/test/ocsp-tests/ISOP_D2.ors
@@ -0,0 +1,32 @@
+MIIF4AoBAKCCBdkwggXVBgkrBgEFBQcwAQEEggXGMIIFwjCBmaIWBBT0zghPr/K8
+jV5hpjGMML9Q+DwzShgPMjAxMjEwMTAxMjA5NTlaMG4wbDBEMAkGBSsOAwIaBQAE
+FLdXtbacB/gWIxOOkMkqDr4yAaoxBBRge2YaRQ2XyolQL30EzTSo//z9SwILBAAA
+AAABL07hRxCAABgPMjAxMjEwMDEwNjAwMDBaoBEYDzIwMTMwNDE1MDYwMDAwWjAL
+BgkqhkiG9w0BAQUDggEBAGZY28eFWl169g7puLnKSeEzi6Ma5/rErOveFRp052ck
+785B83HWkNmW/Bgw7Ws6Y7jBJce6ZQ5TMhwgNP34HuG/mVyn2ZjtCe4KKFBVnZV7
+mHGx93jgKkQvdp4pbNKxZ504eZDp8UOlR9+uwWOWHVObn7o+2N8iWKErSbZ2uX54
+Ajk8Hg/XN5wI4RUtcK3QpZSf3Ren5iit4NInwCpmTOkDz/IVK96BWaEQICq4VlHG
+ziD0H0SlBQCdcSPzZndGoCtIhNyJEL3O2y3Grg4X1XH7VeeyGesuTLEIAEMHJPJD
+TOVNoe5YPRK9Tqb+6jsubw8X/1b72kw3xVgb6MfC0tqgggQQMIIEDDCCBAgwggLw
+oAMCAQICCwQAAAAAAThXoveHMA0GCSqGSIb3DQEBBQUAMFcxCzAJBgNVBAYTAkJF
+MRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRsw
+GQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwHhcNMTIwNzA1MTgwMDAwWhcNMTMw
+NzA1MTgwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu
+di1zYTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBPQ1NQIGZvciBSb290IFIxIC0gQnJh
+bmNoIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMQY/h5DSRT24n
+mMtD19lrn8WZzOoIl+Z9qOsrLLjEQeTMDlL7JPZh5pLaHHb6kSWT+O/RcEwpw6Dq
+H9jtAgDOsGoN7gCK7wJbIvn4MdmkXZqVBcVl3uLuII3v1CPnlc/zoz5d9qXcZKb6
+YuzseyzhDPecQ+7l2NVAUOFUj8GXOZi//bIveMsm+/zSLMfriIC84Uym2QY649SC
+aFNbtF/tR6upvLCLe0b2D1g+OBfGqZasi3QI5uX6lT0gHbCnPhRo3uxG2+S4KL3M
+9sndMByrR5K6QuVf7UqA1vt0CfbA2OUXwcH5x3/TsHxtXDj2F/fWnC9QBBSN5n4I
+G8K7ZpYtAgMBAAGjgdIwgc8wDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBT0zghP
+r/K8jV5hpjGMML9Q+DwzSjBMBgNVHSAERTBDMEEGCSsGAQQBoDIBXzA0MDIGCCsG
+AQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAJ
+BgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFGB7ZhpF
+DZfKiVAvfQTNNKj//P1LMA8GCSsGAQUFBzABBQQCBQAwDQYJKoZIhvcNAQEFBQAD
+ggEBAGU9HIQImzhTHkQLyA178dUdnF5E3DdzmNtwVV3cxGrFOLMpciMQLioQ/xp5
+t6j5Mshlp59imFylqowRRxRy4aN5TtMCufNh7yHIxI2Dt4O6qpPM946t5CJkMy+k
+63pXz2xFIxaJDzAmzpWzu70OY0jrh3dZa8NR4AvhtoZ8zFE6suva6ZGK7JIoINaA
+j5uyZ0qU+7vFwV1awdReNV6494z/HRjs1n956mNbalB9mKp9XXyfZlix/nN5mTJd
+NlJqz7QjnCzZRM/Gfamzk8L3/CPS3XmSblFyn6SeZ92Vms4PNqZiEUNa2TMKXQR1
+EMiDRMkyfIIMI80VgRvvzCiOt0c=
diff --git a/test/ocsp-tests/ISOP_D3.ors b/test/ocsp-tests/ISOP_D3.ors
new file mode 100644
index 000000000000..a8a2f9122f48
--- /dev/null
+++ b/test/ocsp-tests/ISOP_D3.ors
@@ -0,0 +1,38 @@
+MIIG8AoBAKCCBukwggblBgkrBgEFBQcwAQEEggbWMIIG0jCB+aF+MHwxCzAJBgNV
+BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFVNlcnZlciBBZG1pbmlzdHJhdGlvbjEYMBYG
+A1UEAxMPb2NzcC5jYWNlcnQub3JnGA8yMDEyMTAxMDEzMjE1OVowZjBkMDwwCQYF
+Kw4DAhoFAAQUi6TJyxcpGUU+u45zCZG5JfKDImUEFBa1MhvUx/Pg5o7zvdKwOu6y
+ORjRAgMLs8aAABgPMjAxMjEwMTAxMzA1MjBaoBEYDzIwMTIxMDEyMTMyMTU5WjAN
+BgkqhkiG9w0BAQUFAAOCAQEAH1auyXFf1fOdfShSnAFkg5JsRUvajrilUioTkPIn
+IGYV//huaPNZwZGCC2haZIdUuKB6G2OCXeZVskBTXPjt8/6JmoHgsZeI3x5xKXxZ
+vddLC0PgYp0cA3FqjXR2UCpdBF+GK37rnfZsdW2vD9JaEBXxTV4+ICDAg15ZphJW
+lLGmdP3mQqPURIwamcYam8tntARimgEpA0KgfVue2A+izjcxC7qk9BQYG72Fh3hC
+ZFxi5u6xKNUQ2EBF9KXZyP9d2i/bYCZAUeUSRtir+fsOXHlihYRih9npKyAPwpHd
+NqhwK9NhKed8gmkX3cSaK0arBx7ev7avhM4Dqem+BzppjKCCBL4wggS6MIIEtjCC
+Ap6gAwIBAgIDCpvzMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jvb3QgQ0Ex
+HjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZQ0EgQ2Vy
+dCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9ydEBjYWNl
+cnQub3JnMB4XDTExMDgyMzAwMDI1NloXDTEzMDgyMjAwMDI1NlowfDELMAkGA1UE
+BhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UEBxMGU3lkbmV5MRQwEgYDVQQKEwtD
+QWNlcnQgSW5jLjEeMBwGA1UECxMVU2VydmVyIEFkbWluaXN0cmF0aW9uMRgwFgYD
+VQQDEw9vY3NwLmNhY2VydC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCcxtRv5CPHw3BLdR/k/K72YsRgodbP+UdAONmvBvWzhwm6B8h6O+M64sFr
+2w6be7SYBECIyOQgNJ1flK4MoAWhdBA/H5NtxaDOKbAqA27tO9GaevcPp7c518O0
+3hVnlPLvsN1f48nY0jQOXUTfv5nYXmD0OSSK/V3IRo0KsWB6T9UnMGCeEwb4Oqqz
+uzM0b4SBflzMEony/m6Tg/qL7qs2TLZAqe77+BZaVdFkDUnaBN7RyMruXySxeXiz
+mogT3WhROeloMa/X+E01bWBYBEK7VZIY9pgBpXQ7vDbbIGgYuIXUi20wh03WMy16
+VDYdV0IUXHpidNUeK9W/BPP/7APBAgMBAAGjRDBCMAwGA1UdEwEB/wQCMAAwJwYD
+VR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMBBggrBgEFBQcDCTAJBgNVHREEAjAA
+MA0GCSqGSIb3DQEBBQUAA4ICAQAoT6p5f3cGprAcgrnzdenfTmDe9LCW7k2VnazA
+MAzpsD6gXcSlo4+3hoHem/SpKRH2tqi34DmImCiv/S6fxsKM4Gfn5rlkAFviuTvS
+r5Zrwh4ZKSfaoWv4bmbzmcAxvuxdMWHf/5PbjegjzFTbBMekVPZY/abYtD6kdHQZ
+VNgzwZVfTBfYhfa+Rg72I2zjKpMsjxMqWfTmUzW6wfK6LFudZqu0U1NnJw+IlnVU
+6WtjL885ebQrmcRqWz3nMhVLIu5L3w/s+VTLvm7If6jcMDNUjz8s2BPcJeCXg3TE
+STsyl6tvk17RRz2+9JskxVOk11xIn96xR4FCERIid2ek9z1xi7oYOajQF50i/9Gj
+ReDEfRSyb4/LzoKDOY+h4Q6jryeHh7WIHFiK5qrBN2y8qOoRJ/OqQnqci/BJBNpe
+g9Q9PJRgGSzRndTXNHiYRbeLpq7eGo3sPqlR9qBQ3rd98XGOU0RCMnzjKhENC3qo
+5PkSF2xs8RmjWktFSTDwjYo0qf1teo7CGHjgaPjQ7JE8Q4ysFOQndSWmLpqwDcI9
+HfIvPwUIWArQrJRh9LCNSyvHVgLqY9kw8NW4TlMxV2WqaYCkiKi3XVRrSFR3ahS1
+VBvRZ8KpplrV7rhXjVSSqqfLk1sX3l72Ck2F9ON+qbNFmvhgNjSiBY9neMgo804a
+wG/pag==
diff --git a/test/ocsp-tests/ISOP_ND1.ors b/test/ocsp-tests/ISOP_ND1.ors
new file mode 100644
index 000000000000..b23062244953
--- /dev/null
+++ b/test/ocsp-tests/ISOP_ND1.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBSIRFH/UCpp
+Xi2I9CG62QzyzsvqfBgPMjAxMjEwMTAwODU0NDVaMHMwcTBJMAkGBSsOAwIaBQAE
+FEi2DTgjjfhFbk7lhD6jlBEYApefBBSIRFH/UCppXi2I9CG62QzyzsvqfAIQIuEz
+IiCgSN8psr+aMcKbB4AAGA8yMDEyMTAxMDA4NTQ0NVqgERgPMjAxMjEwMTQwODU0
+NDVaMA0GCSqGSIb3DQEBBQUAA4IBAQDHKDxWTbAHRXY7HapfhE99T+OSa/AfRYqX
+H9yIeMRa5VftXMyvBFuvVm/qLRwK6mxhkiVIvF/Pk5yxMjbm7xPO26D+WHOdQML4
++M4OX9BO76FjZRin5x+4b0Xo5SuSU1ulqfvSZnx+nG+hMbt/3Y7ODCEUWCYFoXNp
+U+TXTbv2mwJ9AL8Q/zjL4P8NJHzFJBKjEs+AAVRxTY/5RHHKU9dcm7ux/gsWoDUM
+w677Xxzn6icd8mqn72/HmzPnMrLHKKJFe2escbJn7JlV6qbZ9EWbrr+3OH0IJy5I
+E3LcPIsNZ//QEc6vS6J+j8ljV8Xne6rS1EmiOwV9NgubvYwDCm4R
diff --git a/test/ocsp-tests/ISOP_ND2.ors b/test/ocsp-tests/ISOP_ND2.ors
new file mode 100644
index 000000000000..d14efb953286
--- /dev/null
+++ b/test/ocsp-tests/ISOP_ND2.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBQLWOWLxkwV
+N6RAqTCpIb5HNlpW/xgPMjAxMjEwMTAwMDI1NTdaMHMwcTBJMAkGBSsOAwIaBQAE
+FOy+ZAvtiWulchtVZmfKU1ZI9ewTBBQLWOWLxkwVN6RAqTCpIb5HNlpW/wIQEaO0
+0OyNt3+doM1dLVEvQoAAGA8yMDEyMTAxMDAwMjU1N1qgERgPMjAxMjEwMTQwMDI1
+NTdaMA0GCSqGSIb3DQEBBQUAA4IBAQCJRXcrz4wJe7bqWBHULu/QDXVz74OhSNlu
+swI0J4h+UmzJuW1GpdhTwJcTG3ARVwCLKz3evvpvHSumcsop0G3NolryNLP/oGD0
+Vf6PbLrJ8v+NxUNugPbtWM985Ti/B2a+XjbzYlH2vS3KOTL4X1zWSL07IQFNXc2h
+yHBscKpYgt0mZcFZFxN3NTCNpT6IjJzZzTG9xTYZ3hZdMQQ3DYO+/Hv4J+U1/Ybq
+CjuMWRak/0R/BiBDJdGhbThlvV7bNUxYY7DVaOiLER8ptpmhnzlB/vsTAxZqX48J
+mJdv2bxoTby98Pm/BMydEA9qcFqyP1XvqhzIY35ngoS/1XREyW7t
diff --git a/test/ocsp-tests/ISOP_ND3.ors b/test/ocsp-tests/ISOP_ND3.ors
new file mode 100644
index 000000000000..3ee7158cdcde
--- /dev/null
+++ b/test/ocsp-tests/ISOP_ND3.ors
@@ -0,0 +1,10 @@
+MIIB1AoBAKCCAc0wggHJBgkrBgEFBQcwAQEEggG6MIIBtjCBn6IWBBStvZh6NLQm
+9/rEJlTvA73gJMtUGhgPMjAxMjEwMDkxNjAxNTNaMHQwcjBKMAkGBSsOAwIaBQAE
+FHyxZlScq9tE7mImFq30ZXv3etWUBBStvZh6NLQm9/rEJlTvA73gJMtUGgIRAKcN
+bJWejX5BTb8DmevkCauAABgPMjAxMjEwMDkxNjAxNTNaoBEYDzIwMTIxMDEzMTYw
+MTUzWjANBgkqhkiG9w0BAQUFAAOCAQEAFnJAzuT8P4KKyTI6sdj5HkQ352qEu5CN
+K9M2kU/eg9kPfwLv8z3yArobwgx+/IDRajbVAKrk8UPCGUqkDc0OiU5c0+jpn+nT
+20VVCtWsBSWDfzKqYln/NGrblhv+/iuFZJpyfud5nWguW5nogPC8IAfgt9FMDMl6
+wlQWLSWEkgAJWvhNR3nzgvyMnuDuMIVQgB9/+vAIxA7nlpEEh6KTswyGqE9+u1yC
+kvrz4PwKZQMT6r1eRCLs6NaagOZT84QHhZ6TAA+QHjfK406KL8F9mFgbGKbW+st2
+QHm+giUhrgZMv+1Yaxe34BjDS439LCPjdZ29On8FeZr3F55T+s3VzA==
diff --git a/test/ocsp-tests/ND1.ors b/test/ocsp-tests/ND1.ors
new file mode 100644
index 000000000000..74527413f290
--- /dev/null
+++ b/test/ocsp-tests/ND1.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBSIRFH/UCpp
+Xi2I9CG62QzyzsvqfBgPMjAxMjEwMTEwODQxMTNaMHMwcTBJMAkGBSsOAwIaBQAE
+FEi2DTgjjfhFbk7lhD6jlBEYApefBBSIRFH/UCppXi2I9CG62QzyzsvqfAIQIuEz
+IiCgSN8psr+aMcKbB4AAGA8yMDEyMTAxMTA4NDExM1qgERgPMjAxMjEwMTUwODQx
+MTNaMA0GCSqGSIb3DQEBBQUAA4IBAQCNnhlBMxxh9z5AKfzAxiKs90CfxUsqfYfk
+8XlyF9VIfWRfEwzS6MF1pEzLnghRxTAmjrFgK+sxD9wk+S5Mdgw3nbED9DVFH2Hs
+RGKm/t9wkvrYOX6yRQqw6uRvU/5cibMjcyzKB/VQMwk4p4FwSUgBv88A5sTkKr2V
+eYdEm34hg2TZVkipPMBiyTyBLXs8D/9oALtnczg4xlTRSjDUvqoXL5haqY4QK2Pv
+mNwna6ACkwLmSuMe29UQ8IX2PUB4R5Etni5czyiKGxZLm+4NAhuEwWFNEzCyImPc
+087gHGU1zx+qVSlajqMJ/9ZXYjbt7WiWdhOTGEv4VMn8dHhRUs32
diff --git a/test/ocsp-tests/ND1_Cert_EE.pem b/test/ocsp-tests/ND1_Cert_EE.pem
new file mode 100644
index 000000000000..e646162440df
--- /dev/null
+++ b/test/ocsp-tests/ND1_Cert_EE.pem
@@ -0,0 +1,36 @@
+-----BEGIN CERTIFICATE-----
+MIIGTTCCBTWgAwIBAgIQIuEzIiCgSN8psr+aMcKbBzANBgkqhkiG9w0BAQUFADCB
+jjELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxNDAyBgNV
+BAMTK0NPTU9ETyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIgQ0Ew
+HhcNMTEwMzMxMDAwMDAwWhcNMTMwNjI3MjM1OTU5WjCCAT8xETAPBgNVBAUTCDA0
+MDU4NjkwMRMwEQYLKwYBBAGCNzwCAQMTAkdCMR0wGwYDVQQPExRQcml2YXRlIE9y
+Z2FuaXphdGlvbjELMAkGA1UEBhMCR0IxDzANBgNVBBETBk01IDNFUTEbMBkGA1UE
+CBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRYwFAYDVQQJ
+Ew1UcmFmZm9yZCBSb2FkMRYwFAYDVQQJEw1FeGNoYW5nZSBRdWF5MSUwIwYDVQQJ
+ExwzcmQgRmxvb3IsIDI2IE9mZmljZSBWaWxsYWdlMRowGAYDVQQKExFDT01PRE8g
+Q0EgTGltaXRlZDEaMBgGA1UECxMRQ29tb2RvIEVWIFNHQyBTU0wxGjAYBgNVBAMT
+EXNlY3VyZS5jb21vZG8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEA168izw0zK6cChTGFuAwNARwTu1Ky/z+dXHkSmB0tQrAk3bq7mnUPtmQ+td8r
+G2hlhQPd+YXQVYEW3RuopydmdB9wMlEGCCfU2ZqohsC9uut+HenCVbYvn4sSB0KJ
+VdOXLPCEnfdk/FmcNWcYv73HmoJXZjT0THNQmnfpo6mMGAOerenMgNuCpq1buZ8c
+fFUeUY18ZGLZKZyRNM6GPgVA37Dm8Ru+9Cf8/rm7NSIoVWH4BDztM3Y1BZvZ0d4G
+49jRA4MXbhsDEMYzaSCDmaRHSFhCtrGkN2S4A1ZxoSoxQVCLcnnInVd+J0X8J6pa
+Efio/aD6UQBQq29HyTsWVe6BewIDAQABo4IB8TCCAe0wHwYDVR0jBBgwFoAUiERR
+/1AqaV4tiPQhutkM8s7L6nwwHQYDVR0OBBYEFKvAXKp4bYRmxU4SlM8k8FbWiXiL
+MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMDQGA1UdJQQtMCsGCCsGAQUF
+BwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMEYGA1UdIAQ/MD0w
+OwYMKwYBBAGyMQECAQUBMCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNv
+bW9kby5jb20vQ1BTMFMGA1UdHwRMMEowSKBGoESGQmh0dHA6Ly9jcmwuY29tb2Rv
+Y2EuY29tL0NPTU9ET0V4dGVuZGVkVmFsaWRhdGlvblNlY3VyZVNlcnZlckNBLmNy
+bDCBhAYIKwYBBQUHAQEEeDB2ME4GCCsGAQUFBzAChkJodHRwOi8vY3J0LmNvbW9k
+b2NhLmNvbS9DT01PRE9FeHRlbmRlZFZhbGlkYXRpb25TZWN1cmVTZXJ2ZXJDQS5j
+cnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNvbTAzBgNVHREE
+LDAqghFzZWN1cmUuY29tb2RvLmNvbYIVd3d3LnNlY3VyZS5jb21vZG8uY29tMA0G
+CSqGSIb3DQEBBQUAA4IBAQC9SoVG+B40khDWAzlz+G0WDBM3OuqK5n8vY/XxdPS5
+qyv6K05S4VRGR/6PQa1UVzMbnhfLh54OWrpnalRGabpTmKDu8Pa912pzDSzMxg4U
+Rff4/hVLd1n/58q+riLxdtkIigLUjtFfwUrE1H89QODOCb4nw7f9BQaDoug+ovM3
+KO9rxVZ/3TshaxW0mPVM/cMbX+6RrQ7+d1y5fdX/fksCZhOW+P25+FPlaorQEWNa
+s0UZNQ6qVuxB7CPmnLqmLBfAKTbeKcQFxx//0eyyZqCkzIvYUNjeRR0Q7DnxXq4C
+Pj1Y6VcPJDmZOeogte5/vNIdU8Wq55IJJ1G/uKXztwVT
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ND1_Cross_Root.pem b/test/ocsp-tests/ND1_Cross_Root.pem
new file mode 100644
index 000000000000..20585f1c01e1
--- /dev/null
+++ b/test/ocsp-tests/ND1_Cross_Root.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem b/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem
new file mode 100644
index 000000000000..08f04f69b54a
--- /dev/null
+++ b/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem
@@ -0,0 +1,58 @@
+-----BEGIN CERTIFICATE-----
+MIIFBjCCA+6gAwIBAgIQEaO00OyNt3+doM1dLVEvQjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMDA1MjQwMDAw
+MDBaFw0yMDA1MzAxMDQ4MzhaMIGOMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDE0MDIGA1UEAxMrQ09NT0RPIEV4dGVuZGVkIFZhbGlkYXRp
+b24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMxKljPNJY1n7iiWN4dG8PYEooR/U6qW5h+xAhxu7X0h1Nc8HqLYaS+ot/Wi
+7WRYZOFEZTZJQSABjTsT4gjzDPJXOZM3txyTRIOOvy3xoQV12m7ue28b6naDKHRK
+HCvT9cQDcpOvhs4JjDx11MkKL3Lzrb0OMDyEoXMfAyUUpY/D1vS15N2GevUZumjy
+hVSiMBHK0ZLLO3QGEqA3q2rYVBHfbJoWlLm0p2XGdC0x801S6VVRn8s+oo12mHDS
+b6ZlRS8bhbtbbfnywARmE4R6nc4n2PREnr+svpnba0/bWCGwiSe0jzLWS15ykV7f
+BZ3ZSS/0tm9QH3XLgJ3m0+TR8tMCAwEAAaOCAWkwggFlMB8GA1UdIwQYMBaAFAtY
+5YvGTBU3pECpMKkhvkc2Wlb/MB0GA1UdDgQWBBSIRFH/UCppXi2I9CG62Qzyzsvq
+fDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADA+BgNVHSAENzA1
+MDMGBFUdIAAwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNv
+bS9DUFMwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5jb21vZG9jYS5jb20v
+Q09NT0RPQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwdAYIKwYBBQUHAQEEaDBm
+MD4GCCsGAQUFBzAChjJodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9BZGRU
+cnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2Rv
+Y2EuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCaQ7+vpHJezX1vf/T8PYy7cOYe3QT9
+P9ydn7+JdpvyhjH8f7PtKpFTLOKqsOPILHH3FYojHPFpLoH7sbxiC6saVBzZIl40
+TKX2Iw9dej3bQ81pfhc3Us1TocIR1FN4J2TViUFNFlW7kMvw2OTd3dMJZEgo/zIj
+hC+Me1UvzymINzR4DzOq/7fylqSbRIC1vmxWVKukgZ4lGChUOn8sY89ZIIwYazgs
+tN3t40DeDDYlV5rA0WCeXgNol64aO+pF11GZSe5EWVYLXrGPaOqKnsrSyaADfnAl
+9DLJTlCDh6I0SD1PNXf82Ijq9n0ezkO21cJqfjhmY03n7jLvDyToKmf6
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE8TCCA9mgAwIBAgIQbyXcFa/fXqMIVgw7ek/H+DANBgkqhkiG9w0BAQUFADBv
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
+ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
+eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow
+gYExCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMScwJQYD
+VQQDEx5DT01PRE8gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQDQQIuLcuORG/dRwRtUBJjTqb/B5opdO4f7u4jO
+DeMvPwaW8KIpUJmu2zuhV7B0UXHN7UKRTUH+qcjYaoZ3RLtZZpdQXrTULHBEz9o3
+lUJpPDDEcbNS8CFNodi6OXwcnqMknfKDFpiqFnxDmxVbt640kf7UYiYYRpo/68H5
+8ZBX66x6DYvbcjBqZtXgRqNw3GjZ/wRIiXfeten7Z21B6bw5vTLZYgLxsag9bjec
+4i/i06Imi8a4VUOI4SM+pdIkOWpHqwDUobOpJf4NP6cdutNRwQuk2qw471VQJAVl
+RpM0Ty2NrcbUIRnSjsoFYXEHc0flihkSvQRNzk6cpUisuyb3AgMBAAGjggF0MIIB
+cDAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73gJMtUGjAdBgNVHQ4EFgQUC1jl
+i8ZMFTekQKkwqSG+RzZaVv8wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
+Af8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9j
+cmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4dGVybmFsQ0FSb290LmNybDCBswYI
+KwYBBQUHAQEEgaYwgaMwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRydXN0
+LmNvbS9BZGRUcnVzdEV4dGVybmFsQ0FSb290LnA3YzA5BggrBgEFBQcwAoYtaHR0
+cDovL2NydC51c2VydHJ1c3QuY29tL0FkZFRydXN0VVROU0dDQ0EuY3J0MCUGCCsG
+AQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBBQUA
+A4IBAQAHYJOZqs7Q00fQNzPeP2S35S6jJQzVMx0Njav2fkZ7WQaS44LE5/X289kF
+z0k0LTdf9CXH8PtrI3fx8UDXTLtJRTHdAChntylMdagfeTHJNjcPyjVPjPF+3vxG
+q79om3AjMC63xVx7ivsYE3lLkkKM3CyrbCK3KFOzGkrOG/soDrc6pNoN90AyT99v
+uwFQ/IfTdtn8+7aEA8rJNhj33Wzbu7qBHKat/ij5z7micV0ZBepKRtxzQe+JlEKx
+Q4hvNRevHmCDrHqMEHufyfaDbZ76iO4+3e6esL/garnQnweyCROa9aTlyFt5p0c1
+M2jlVZ6qW8swC53HD79oRIGXi1FK
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ND1_Issuer_ICA.pem b/test/ocsp-tests/ND1_Issuer_ICA.pem
new file mode 100644
index 000000000000..3260db30014e
--- /dev/null
+++ b/test/ocsp-tests/ND1_Issuer_ICA.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIFBjCCA+6gAwIBAgIQEaO00OyNt3+doM1dLVEvQjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMDA1MjQwMDAw
+MDBaFw0yMDA1MzAxMDQ4MzhaMIGOMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDE0MDIGA1UEAxMrQ09NT0RPIEV4dGVuZGVkIFZhbGlkYXRp
+b24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMxKljPNJY1n7iiWN4dG8PYEooR/U6qW5h+xAhxu7X0h1Nc8HqLYaS+ot/Wi
+7WRYZOFEZTZJQSABjTsT4gjzDPJXOZM3txyTRIOOvy3xoQV12m7ue28b6naDKHRK
+HCvT9cQDcpOvhs4JjDx11MkKL3Lzrb0OMDyEoXMfAyUUpY/D1vS15N2GevUZumjy
+hVSiMBHK0ZLLO3QGEqA3q2rYVBHfbJoWlLm0p2XGdC0x801S6VVRn8s+oo12mHDS
+b6ZlRS8bhbtbbfnywARmE4R6nc4n2PREnr+svpnba0/bWCGwiSe0jzLWS15ykV7f
+BZ3ZSS/0tm9QH3XLgJ3m0+TR8tMCAwEAAaOCAWkwggFlMB8GA1UdIwQYMBaAFAtY
+5YvGTBU3pECpMKkhvkc2Wlb/MB0GA1UdDgQWBBSIRFH/UCppXi2I9CG62Qzyzsvq
+fDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADA+BgNVHSAENzA1
+MDMGBFUdIAAwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNv
+bS9DUFMwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5jb21vZG9jYS5jb20v
+Q09NT0RPQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwdAYIKwYBBQUHAQEEaDBm
+MD4GCCsGAQUFBzAChjJodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9BZGRU
+cnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2Rv
+Y2EuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCaQ7+vpHJezX1vf/T8PYy7cOYe3QT9
+P9ydn7+JdpvyhjH8f7PtKpFTLOKqsOPILHH3FYojHPFpLoH7sbxiC6saVBzZIl40
+TKX2Iw9dej3bQ81pfhc3Us1TocIR1FN4J2TViUFNFlW7kMvw2OTd3dMJZEgo/zIj
+hC+Me1UvzymINzR4DzOq/7fylqSbRIC1vmxWVKukgZ4lGChUOn8sY89ZIIwYazgs
+tN3t40DeDDYlV5rA0WCeXgNol64aO+pF11GZSe5EWVYLXrGPaOqKnsrSyaADfnAl
+9DLJTlCDh6I0SD1PNXf82Ijq9n0ezkO21cJqfjhmY03n7jLvDyToKmf6
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ND2.ors b/test/ocsp-tests/ND2.ors
new file mode 100644
index 000000000000..24c1cb2da28f
--- /dev/null
+++ b/test/ocsp-tests/ND2.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBQLWOWLxkwV
+N6RAqTCpIb5HNlpW/xgPMjAxMjEwMTAyMzAzMTlaMHMwcTBJMAkGBSsOAwIaBQAE
+FOy+ZAvtiWulchtVZmfKU1ZI9ewTBBQLWOWLxkwVN6RAqTCpIb5HNlpW/wIQEaO0
+0OyNt3+doM1dLVEvQoAAGA8yMDEyMTAxMDIzMDMxOVqgERgPMjAxMjEwMTQyMzAz
+MTlaMA0GCSqGSIb3DQEBBQUAA4IBAQCHn2nGfEUX/EJruMkTgh7GgB0u9cpAepaD
+sPv9gtl3KLUZyR+NbGMIa5/bpoJp0yg1z5VL6CLMusy3AF6Cn2fyaioDxG+yc+gA
+PcPFdEqiIMr+TP8s7qcEiE6WZddSSCqCn90VZSCWkpDhnCjDRwJLBBPU3803fdMz
+oguvyr7y6Koxik8X/iUe8EpSzAvmm4GZL3veTI+x7IezJSrhCS9zM0ZHjySjoDxC
++ljGH0EuWPTmFEqZVGIq3cuahIYzKItUbYnXU6ipi/2p42qbsFeok7eEN0EYsY1a
+vRATHGRmU7Q5HLCq4rQtZC1cis52Mvc9x1W4z/Gt5A3FtgElXXNA
diff --git a/test/ocsp-tests/ND2_Cert_ICA.pem b/test/ocsp-tests/ND2_Cert_ICA.pem
new file mode 100644
index 000000000000..3260db30014e
--- /dev/null
+++ b/test/ocsp-tests/ND2_Cert_ICA.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIFBjCCA+6gAwIBAgIQEaO00OyNt3+doM1dLVEvQjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMDA1MjQwMDAw
+MDBaFw0yMDA1MzAxMDQ4MzhaMIGOMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDE0MDIGA1UEAxMrQ09NT0RPIEV4dGVuZGVkIFZhbGlkYXRp
+b24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMxKljPNJY1n7iiWN4dG8PYEooR/U6qW5h+xAhxu7X0h1Nc8HqLYaS+ot/Wi
+7WRYZOFEZTZJQSABjTsT4gjzDPJXOZM3txyTRIOOvy3xoQV12m7ue28b6naDKHRK
+HCvT9cQDcpOvhs4JjDx11MkKL3Lzrb0OMDyEoXMfAyUUpY/D1vS15N2GevUZumjy
+hVSiMBHK0ZLLO3QGEqA3q2rYVBHfbJoWlLm0p2XGdC0x801S6VVRn8s+oo12mHDS
+b6ZlRS8bhbtbbfnywARmE4R6nc4n2PREnr+svpnba0/bWCGwiSe0jzLWS15ykV7f
+BZ3ZSS/0tm9QH3XLgJ3m0+TR8tMCAwEAAaOCAWkwggFlMB8GA1UdIwQYMBaAFAtY
+5YvGTBU3pECpMKkhvkc2Wlb/MB0GA1UdDgQWBBSIRFH/UCppXi2I9CG62Qzyzsvq
+fDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADA+BgNVHSAENzA1
+MDMGBFUdIAAwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNv
+bS9DUFMwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5jb21vZG9jYS5jb20v
+Q09NT0RPQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwdAYIKwYBBQUHAQEEaDBm
+MD4GCCsGAQUFBzAChjJodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9BZGRU
+cnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2Rv
+Y2EuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCaQ7+vpHJezX1vf/T8PYy7cOYe3QT9
+P9ydn7+JdpvyhjH8f7PtKpFTLOKqsOPILHH3FYojHPFpLoH7sbxiC6saVBzZIl40
+TKX2Iw9dej3bQ81pfhc3Us1TocIR1FN4J2TViUFNFlW7kMvw2OTd3dMJZEgo/zIj
+hC+Me1UvzymINzR4DzOq/7fylqSbRIC1vmxWVKukgZ4lGChUOn8sY89ZIIwYazgs
+tN3t40DeDDYlV5rA0WCeXgNol64aO+pF11GZSe5EWVYLXrGPaOqKnsrSyaADfnAl
+9DLJTlCDh6I0SD1PNXf82Ijq9n0ezkO21cJqfjhmY03n7jLvDyToKmf6
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ND2_Issuer_Root.pem b/test/ocsp-tests/ND2_Issuer_Root.pem
new file mode 100644
index 000000000000..dc99810098d7
--- /dev/null
+++ b/test/ocsp-tests/ND2_Issuer_Root.pem
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0DCCArigAwIBAgIQIKTEf93f4cdTYwcTiHdgEjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMTAxMDEwMDAw
+MDBaFw0zMDEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
+UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
+2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
+Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
+nKVIrLsm9wIDAQABo0IwQDAdBgNVHQ4EFgQUC1jli8ZMFTekQKkwqSG+RzZaVv8w
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBAC/JxBwHO89hAgCx2SFRdXIDMLDEFh9sAIsQrK/xR9SuEDwMGvjUk2ysEDd8
+t6aDZK3N3w6HM503sMZ7OHKx8xoOo/lVem0DZgMXlUrxsXrfViEGQo+x06iF3u6X
+HWLrp+cxEmbDD6ZLLkGC9/3JG6gbr+48zuOcrigHoSybJMIPIyaDMouGDx8rEkYl
+Fo92kANr3ryqImhrjKGsKxE5pttwwn1y6TPn/CbxdFqR5p2ErPioBhlG5qfpqjQi
+pKGfeq23sqSaM4hxAjwu1nqyH6LKwN0vEJT9s4yEIHlG1QXUEOTS22RPuFvuG8Ug
+R1uUq27UlTMdphVx8fiUylQ5PsE=
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ND3.ors b/test/ocsp-tests/ND3.ors
new file mode 100644
index 000000000000..20084180c5a1
--- /dev/null
+++ b/test/ocsp-tests/ND3.ors
@@ -0,0 +1,10 @@
+MIIB1AoBAKCCAc0wggHJBgkrBgEFBQcwAQEEggG6MIIBtjCBn6IWBBStvZh6NLQm
+9/rEJlTvA73gJMtUGhgPMjAxMjEwMTExMTM2NDdaMHQwcjBKMAkGBSsOAwIaBQAE
+FHyxZlScq9tE7mImFq30ZXv3etWUBBStvZh6NLQm9/rEJlTvA73gJMtUGgIRAKcN
+bJWejX5BTb8DmevkCauAABgPMjAxMjEwMTExMTM2NDdaoBEYDzIwMTIxMDE1MTEz
+NjQ3WjANBgkqhkiG9w0BAQUFAAOCAQEAfnj3nh6z+USW6VlDWRytWpNmC1ZRwWlg
+P2+G4UF4HE8bMJkuiFLcZEVYTxlTYv+xAEpSFxdInFM2Q5C+O6pWOZ9NbikeR4oZ
+FTI1kAZ0Uw+YMpVM4ztvKBIpUSqlbi69iNJ9WGF6qzxVeqobSOyrjjwtTsuglUbR
++mshp/SP7Br2IIK+KM1vgsmVExPfGPYANyk7ki/Q8uUnjqkreeSa9WC2iJLGcybW
+YavDhYWALebUGukNeedkloYhdjPboPPxDkKNjakwIG8EkbJK7uXewMOHHOFvFTX3
+K388me8u5iQf4f3fj6ilEgs6f5Szzmb+vklPX0zIny/TVk2+Az7HmA==
diff --git a/test/ocsp-tests/ND3_Cert_EE.pem b/test/ocsp-tests/ND3_Cert_EE.pem
new file mode 100644
index 000000000000..c6a76d661e4b
--- /dev/null
+++ b/test/ocsp-tests/ND3_Cert_EE.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF3TCCBMWgAwIBAgIRAKcNbJWejX5BTb8DmevkCaswDQYJKoZIhvcNAQEFBQAw
+bzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1B
+ZGRUcnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3Qg
+RXh0ZXJuYWwgQ0EgUm9vdDAeFw0xMDA1MDQwMDAwMDBaFw0xNTA1MDQyMzU5NTla
+MIIBCjELMAkGA1UEBhMCR0IxDzANBgNVBBETBk01IDNFUTEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRYwFAYDVQQJEw1UcmFm
+Zm9yZCBSb2FkMRYwFAYDVQQJEw1FeGNoYW5nZSBRdWF5MSUwIwYDVQQJExwzcmQg
+Rmxvb3IsIDI2IE9mZmljZSBWaWxsYWdlMRowGAYDVQQKExFDT01PRE8gQ0EgTGlt
+aXRlZDEaMBgGA1UECxMRQ29tb2RvIFByZW1pdW1TU0wxLDAqBgNVBAMTI2FkZHRy
+dXN0ZXh0ZXJuYWxjYXJvb3QuY29tb2RvY2EuY29tMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAz5MM/mco91yFJNtF3t9c0x/bGds+zGAqJlHBXCR43og+
+3vgsBkCcn5M3PAqmL6XxilpsrEfS6RqtNcLfxwDyl7rr3qpJSM537Km1ZGOTHs0C
+i0JA4YBZFOxBwPO2nHQGD+t9kJx3auFdBLnjJc5Q3jFUmnyJ8D2h3P9BrHgOoIbO
+KYOUc/3zcqE6NttdbiuUMzlad8guhnXlWPCh2NJtNtMLDQxG7DWWDEm/Kt+CdKAR
+jko6kEp7nqBKyujjJoGD2nEtEnuuqiB9n6sgSXR1NGtecJrW8IqIS7hkcsxhGTI9
+jnY73+NiMV3nglejkNseTUdcEi6L94EdifXuVLgEAwIDAQABo4IB1TCCAdEwHwYD
+VR0jBBgwFoAUrb2YejS0Jvf6xCZU7wO94CTLVBowHQYDVR0OBBYEFDXpt6NocCrd
+7XZ2MLUa116TIesKMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEB
+AgEDBDArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8ubmV0L0NQ
+UzB7BgNVHR8EdDByMDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9BZGRU
+cnVzdEV4dGVybmFsQ0FSb290LmNybDA2oDSgMoYwaHR0cDovL2NybC5jb21vZG8u
+bmV0L0FkZFRydXN0RXh0ZXJuYWxDQVJvb3QuY3JsMDQGCCsGAQUFBwEBBCgwJjAk
+BggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMFcGA1UdEQRQME6C
+I2FkZHRydXN0ZXh0ZXJuYWxjYXJvb3QuY29tb2RvY2EuY29tgid3d3cuYWRkdHJ1
+c3RleHRlcm5hbGNhcm9vdC5jb21vZG9jYS5jb20wDQYJKoZIhvcNAQEFBQADggEB
+AF2TF6xg8ZoBICoiQvjD2Z0SKcJRw1Dhj3HpGzV9F+Y0e/MxCXhYA+340JZxnC2P
+VA968QKFrNwDWiS9Klc+cs4k3HIeiZp3uHw1ezElqXXNa+S1CrSS03FqWeeugSrB
+xpuXCWDJSfD4DJq835hlEuXgxmAjsbuRUjaq1lxwSWnNoBkfMCCAgVlHtFljTlqq
+nwfBZcnj73+yiERgTvhN4gEL59ZzjFliKEUuXHZoe8klhn73cnY+XoRV0e7wU+Xj
+PzLoAhjGkS35hfDQTHdCwNBaN3iI2Q+HBjhfffAYFdK+Jo3kSXq12s7CJD7utAho
+xxRhA0l1ziJgrEubLi6ItNg=
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/ND3_Issuer_Root.pem b/test/ocsp-tests/ND3_Issuer_Root.pem
new file mode 100644
index 000000000000..20585f1c01e1
--- /dev/null
+++ b/test/ocsp-tests/ND3_Issuer_Root.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WIKH_D1.ors b/test/ocsp-tests/WIKH_D1.ors
new file mode 100644
index 000000000000..c8ce8d87019a
--- /dev/null
+++ b/test/ocsp-tests/WIKH_D1.ors
@@ -0,0 +1,32 @@
+MIIFzwoBAKCCBcgwggXEBgkrBgEFBQcwAQEEggW1MIIFsTCBoKIWBBRf2uQDFpGg
+Ywh4P1y2H9bZ2/BQNBgPMjAxMjEwMTExMzI5NDJaMHUwczBLMAkGBSsOAwIaBQAE
+FKByDqBqfGICVPKo9Z3Se6Tzty+kBBSxsEr9HHUo+BxhqhP2+sGQPWsWowISESG8
+vx4IzALnkqQG05AvM+2bgAAYDzIwMTIxMDExMTAwMDAwWqARGA8yMDEyMTAxODEw
+MDAwMFowCwYJKoZIhvcNAQEFA4IBAQCX3gEX+JVfxuYmxBBxC9sNCi3o76ODIicr
+XMvm0DTO9VSyDBl7LDsMMgNMIDtO3flQSlBNZ2B9ikwyckXOSWXiXzybZVMdA/uq
+NchgkM9aChrlhG0AHZyYe/+dJSmEBFXkIomy+S6YQ7Mcs2s6WxCeWU7gB4XOy1zO
+/CvWjv0WQV1J2lZZ6pkvtECKAEjrVP275LA38HInFbYvVPXWzl4sDcX2TAxwUa4S
+xAJAfwl+B+oZSerZWGRo6KjZuB/OB31cB5n/lABmRez6Obi27D0UUCRv/eSbwOF4
+Ofaa/XzJt7sF7WpVgoR41HI88W7aN4vtcw1zcVsBmfRMUNYZSqtfoIID+DCCA/Qw
+ggPwMIIC2KADAgECAhIRISdENsrz1CSWG3VIBwfQERQwDQYJKoZIhvcNAQEFBQAw
+WTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNV
+BAMTJkdsb2JhbFNpZ24gRXh0ZW5kZWQgVmFsaWRhdGlvbiBDQSAtIEcyMB4XDTEy
+MDkxOTA3NDA1MFoXDTEyMTIxOTA4NDA1MFowgYUxCzAJBgNVBAYTAkJFMRkwFwYD
+VQQKExBHbG9iYWxTaWduIG52LXNhMUIwQAYDVQQDEzlHbG9iYWxTaWduIEV4dGVu
+ZGVkIFZhbGlkYXRpb24gQ0EgLSBHMiBPQ1NQIHJlc3BvbmRlciAtIDIxFzAVBgNV
+BAUTDjIwMTIwOTE5MDk0MDAwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAnCgMsBO+IxIqCnXCOfXJoIC3wj+f0s4DV9h2gJBzisWXkaJD2DfNrd0kHUXK
+qVVPUxnA4G5iZu0Z385/KiOt1/P6vQ/Z2/AsEh/8Z/hIyeZCHL31wrSZW4yLeZwi
+M76wPiBHJxPun681HQlVs/OGKSHnbHc1XJAIeA/M8u+lLWqIKB+AJ82TrOqUMj1s
+LjGhQNs84xPliONN5K7DrEy+Y65X/rFxN77Smw+UtcH1GgH2NgaHH8dpt1m25sgm
+UxZWhdx66opB/lbRQwWdGt7MC0kJFaWHDZq64DTuYoekFYSxAFu0nd0EekEHEJEi
+9mquB9cv/96SuEJl8BcUWU/1LwIDAQABo4GEMIGBMAkGA1UdEwQCMAAwDgYDVR0P
+AQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GCSsGAQUFBzABBQQCBQAw
+HQYDVR0OBBYEFF/a5AMWkaBjCHg/XLYf1tnb8FA0MB8GA1UdIwQYMBaAFLCwSv0c
+dSj4HGGqE/b6wZA9axajMA0GCSqGSIb3DQEBBQUAA4IBAQCKRl1iXFmOQtLseDWP
+Y5icDDBGiRi17CGgvIzGJi/ha0PhbO+X0TmQIEnRX3Mu0Er/Mm4RZSjMtJ2iZRh3
+tGf4Dn+jKgKOmgXC3oOG/l8RPHLf0yaPSdn/z0TXtA30vTFBLlFeWnhbfhovea4+
+snPdBxLqWZdtxmiwojgqA7YATCWwavizrBr09YRyDwzgtpZ2BwMruGuFuV9FsEwL
+PCM53yFlrM32oFghyfyE5kYjgnnueKM+pw1kA0jgb1CnVJRrMEN1TXuXDAZLtHKG
+5X/drah1JtkoZhCzxzZ3bYdVDQJ90OHFqM58lwGD6z3XuPKrHDKZKt+CPIsl5g7p
+4J2l
diff --git a/test/ocsp-tests/WIKH_D2.ors b/test/ocsp-tests/WIKH_D2.ors
new file mode 100644
index 000000000000..1d562fad0ae5
--- /dev/null
+++ b/test/ocsp-tests/WIKH_D2.ors
@@ -0,0 +1,32 @@
+MIIF4AoBAKCCBdkwggXVBgkrBgEFBQcwAQEEggXGMIIFwjCBmaIWBBTqlwecTarB
+yVdbHxANRLCFYj1mqBgPMjAxMjEwMTExMzMwMTBaMG4wbDBEMAkGBSsOAwIaBQAE
+FLdXtbacB/gWIxOOkMkqDr4yAaoxBBRhe2YaRQ2XyolQL30EzTSo//z9SwILBAAA
+AAABL07hRxCAABgPMjAxMjEwMDEwNjAwMDBaoBEYDzIwMTMwNDE1MDYwMDAwWjAL
+BgkqhkiG9w0BAQUDggEBAA0H7bvcULg1GayFtQVrYDyW0feOEMNGLmgaGuwRdrY3
+KuWyNJLUUJKQZnOkdT8A4RpVX8xD4EgVyOqRACUahgdgp0g3QOn+vf2Zyf+NJIgW
+woF5qaJgCOeIOw5O6F4r1vUhp8NvqXHotswgG58Nzz6UMD+uyIgq5o8uzOjryEm6
+wO2X+KvN9sMzkeZhNvAHkgBQL8CG4CggWnzn7At1DmhhsizfhDrosigM4Zr6Sm6z
+v1YfSPznD0b3TQ7RzvpbJPofF2aJXMIMxdKR5pemuevTDR2+JCXjVPsD/ZODFykc
+rsQeqx2vTOIg84PRKboXjCAwHn4rIN7JJtQqebLtD9egggQQMIIEDDCCBAgwggLw
+oAMCAQICCwQAAAAAAThXovYBMA0GCSqGSIb3DQEBBQUAMFcxCzAJBgNVBAYTAkJF
+MRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRsw
+GQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwHhcNMTIwNzA1MTgwMDAwWhcNMTMw
+NzA1MTgwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu
+di1zYTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBPQ1NQIGZvciBSb290IFIxIC0gQnJh
+bmNoIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDP2QF8p0+Fb7ID
+MwwD1gEr2oazjqbW28EZr3YEyMPk+7VFaGePSO1xjBGIE48Q7m7d6p6ZXCzlBZEi
+oudrHSr3WDqdIVKLDrZIDkgEgdjJE72Hq6Pf5CEGXyebbODm4sV96EfewSvOOYLL
+866g3aoVhLDK02ny+Q5OsokW7nhnmGMMh10tZqR5VmdQTiw8MgeqUxBEaEO4WH2J
+ltgSsgNJBNBYuDgnn5ryzVqhvmCJvYZMYeN6qZFKy1MgHcR+wEpGLPlRL4ttu6e5
+MJrVta7dVFobHUHoFog97LtQT1PY0Ubaihswjge5O04bYeCrgSSjr1e4xH/KDxRw
+yyhoscaFAgMBAAGjgdIwgc8wDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTqlwec
+TarByVdbHxANRLCFYj1mqDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBXzA0MDIGCCsG
+AQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAJ
+BgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFGB7ZhpF
+DZfKiVAvfQTNNKj//P1LMA8GCSsGAQUFBzABBQQCBQAwDQYJKoZIhvcNAQEFBQAD
+ggEBAHiC6N1uF29d7CmiVapA8Nr1xLSVeIkBd4A8yHsUTQ7ATI7bwT14QUV4awe7
+8cvmO5ZND8YG1ViwN162WFm9ivSoWBzvWDbU2JhQFb+XzrzCcdn0YbNiTxJh/vYm
+uDuxto00dpBgujSOAQv8B90iDEJ+sZpYRzDRj62qStRey0zpq5eX+pA+gdppMUFb
+4QvJf0El8TbLCWLN4TjrFe6ju7ZaN9zmgVYGQ2fMHKIGNScLuIA950nYwzRkIfHa
+YW6HqP1rCR1EiYmstEeCQyDxJx+RUlh+q8L1BKzaMYhS6s63MZzQuGseYStaCmbC
+fBIRKjnK621vAWvc7UR+0hqnZ+U=
diff --git a/test/ocsp-tests/WIKH_D3.ors b/test/ocsp-tests/WIKH_D3.ors
new file mode 100644
index 000000000000..cbac8e8f1b91
--- /dev/null
+++ b/test/ocsp-tests/WIKH_D3.ors
@@ -0,0 +1,38 @@
+MIIG8AoBAKCCBukwggblBgkrBgEFBQcwAQEEggbWMIIG0jCB+aF+MHwxCzAJBgNV
+BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFVNlcnZlciBBZG1pbmlzdHJhdGlvbjEYMBYG
+A1UEAxMPb2NzcC5jYWNlcnQub3JnGA8yMDEyMTAxMTE0MDYzNlowZjBkMDwwCQYF
+Kw4DAhoFAAQUi6TJyxcpGUU+u45zCZG5JfKDImUEFBe1MhvUx/Pg5o7zvdKwOu6y
+ORjRAgMLs8aAABgPMjAxMjEwMTExMzU4MTBaoBEYDzIwMTIxMDEzMTQwNjM2WjAN
+BgkqhkiG9w0BAQUFAAOCAQEAjcryO6FUK5+TcPBxJKixVt9q07Xy3qv1e/VFuJ0f
+tnYDcu83Q5yCta49PXaA13nFDFZ445wCDivDBLolS6JKSh+JrLpAxSBzak7Ps8wz
+DPNAtexZz9/hPPzHnGOMlRtew07jk+NX5ZgCxDZGmBHIHOGyab2WoqmpRTll0oP4
+b/DzI3mzrur5lm2NAT3ZJ8bVaWsAJBVTfUye3S4GRWlfGSRVAMk0QHnCkYP42okc
+psIKbvdIoS2gxo6kBTMevxciPV2lPIiSrIWH0IGm7AqGM5+Vz7IdbD6fOQd1I3uw
+O+1NugMYfScB6jCvSW2uESeRZ+qW/HMXQbU1eiH+x88UIKCCBL4wggS6MIIEtjCC
+Ap6gAwIBAgIDCpvzMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jvb3QgQ0Ex
+HjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZQ0EgQ2Vy
+dCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9ydEBjYWNl
+cnQub3JnMB4XDTExMDgyMzAwMDI1NloXDTEzMDgyMjAwMDI1NlowfDELMAkGA1UE
+BhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UEBxMGU3lkbmV5MRQwEgYDVQQKEwtD
+QWNlcnQgSW5jLjEeMBwGA1UECxMVU2VydmVyIEFkbWluaXN0cmF0aW9uMRgwFgYD
+VQQDEw9vY3NwLmNhY2VydC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCcxtRv5CPHw3BLdR/k/K72YsRgodbP+UdAONmvBvWzhwm6B8h6O+M64sFr
+2w6be7SYBECIyOQgNJ1flK4MoAWhdBA/H5NtxaDOKbAqA27tO9GaevcPp7c518O0
+3hVnlPLvsN1f48nY0jQOXUTfv5nYXmD0OSSK/V3IRo0KsWB6T9UnMGCeEwb4Oqqz
+uzM0b4SBflzMEony/m6Tg/qL7qs2TLZAqe77+BZaVdFkDUnaBN7RyMruXySxeXiz
+mogT3WhROeloMa/X+E01bWBYBEK7VZIY9pgBpXQ7vDbbIGgYuIXUi20wh03WMy16
+VDYdV0IUXHpidNUeK9W/BPP/7APBAgMBAAGjRDBCMAwGA1UdEwEB/wQCMAAwJwYD
+VR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMBBggrBgEFBQcDCTAJBgNVHREEAjAA
+MA0GCSqGSIb3DQEBBQUAA4ICAQAoT6p5f3cGprAcgrnzdenfTmDe9LCW7k2VnazA
+MAzpsD6gXcSlo4+3hoHem/SpKRH2tqi34DmImCiv/S6fxsKM4Gfn5rlkAFviuTvS
+r5Zrwh4ZKSfaoWv4bmbzmcAxvuxdMWHf/5PbjegjzFTbBMekVPZY/abYtD6kdHQZ
+VNgzwZVfTBfYhfa+Rg72I2zjKpMsjxMqWfTmUzW6wfK6LFudZqu0U1NnJw+IlnVU
+6WtjL885ebQrmcRqWz3nMhVLIu5L3w/s+VTLvm7If6jcMDNUjz8s2BPcJeCXg3TE
+STsyl6tvk17RRz2+9JskxVOk11xIn96xR4FCERIid2ek9z1xi7oYOajQF50i/9Gj
+ReDEfRSyb4/LzoKDOY+h4Q6jryeHh7WIHFiK5qrBN2y8qOoRJ/OqQnqci/BJBNpe
+g9Q9PJRgGSzRndTXNHiYRbeLpq7eGo3sPqlR9qBQ3rd98XGOU0RCMnzjKhENC3qo
+5PkSF2xs8RmjWktFSTDwjYo0qf1teo7CGHjgaPjQ7JE8Q4ysFOQndSWmLpqwDcI9
+HfIvPwUIWArQrJRh9LCNSyvHVgLqY9kw8NW4TlMxV2WqaYCkiKi3XVRrSFR3ahS1
+VBvRZ8KpplrV7rhXjVSSqqfLk1sX3l72Ck2F9ON+qbNFmvhgNjSiBY9neMgo804a
+wG/pag==
diff --git a/test/ocsp-tests/WIKH_ND1.ors b/test/ocsp-tests/WIKH_ND1.ors
new file mode 100644
index 000000000000..a16476fb8436
--- /dev/null
+++ b/test/ocsp-tests/WIKH_ND1.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBSIRFH/UCpp
+Xi2I9CG62QzyzsvqfBgPMjAxMjEwMTEwODQxMTNaMHMwcTBJMAkGBSsOAwIaBQAE
+FEi2DTgjjfhFbk7lhD6jlBEYApefBBSJRFH/UCppXi2I9CG62QzyzsvqfAIQIuEz
+IiCgSN8psr+aMcKbB4AAGA8yMDEyMTAxMTA4NDExM1qgERgPMjAxMjEwMTUwODQx
+MTNaMA0GCSqGSIb3DQEBBQUAA4IBAQCNnhlBMxxh9z5AKfzAxiKs90CfxUsqfYfk
+8XlyF9VIfWRfEwzS6MF1pEzLnghRxTAmjrFgK+sxD9wk+S5Mdgw3nbED9DVFH2Hs
+RGKm/t9wkvrYOX6yRQqw6uRvU/5cibMjcyzKB/VQMwk4p4FwSUgBv88A5sTkKr2V
+eYdEm34hg2TZVkipPMBiyTyBLXs8D/9oALtnczg4xlTRSjDUvqoXL5haqY4QK2Pv
+mNwna6ACkwLmSuMe29UQ8IX2PUB4R5Etni5czyiKGxZLm+4NAhuEwWFNEzCyImPc
+087gHGU1zx+qVSlajqMJ/9ZXYjbt7WiWdhOTGEv4VMn8dHhRUs32
diff --git a/test/ocsp-tests/WIKH_ND2.ors b/test/ocsp-tests/WIKH_ND2.ors
new file mode 100644
index 000000000000..5aff2abf39a4
--- /dev/null
+++ b/test/ocsp-tests/WIKH_ND2.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBQLWOWLxkwV
+N6RAqTCpIb5HNlpW/xgPMjAxMjEwMTAyMzAzMTlaMHMwcTBJMAkGBSsOAwIaBQAE
+FOy+ZAvtiWulchtVZmfKU1ZI9ewTBBQMWOWLxkwVN6RAqTCpIb5HNlpW/wIQEaO0
+0OyNt3+doM1dLVEvQoAAGA8yMDEyMTAxMDIzMDMxOVqgERgPMjAxMjEwMTQyMzAz
+MTlaMA0GCSqGSIb3DQEBBQUAA4IBAQCHn2nGfEUX/EJruMkTgh7GgB0u9cpAepaD
+sPv9gtl3KLUZyR+NbGMIa5/bpoJp0yg1z5VL6CLMusy3AF6Cn2fyaioDxG+yc+gA
+PcPFdEqiIMr+TP8s7qcEiE6WZddSSCqCn90VZSCWkpDhnCjDRwJLBBPU3803fdMz
+oguvyr7y6Koxik8X/iUe8EpSzAvmm4GZL3veTI+x7IezJSrhCS9zM0ZHjySjoDxC
++ljGH0EuWPTmFEqZVGIq3cuahIYzKItUbYnXU6ipi/2p42qbsFeok7eEN0EYsY1a
+vRATHGRmU7Q5HLCq4rQtZC1cis52Mvc9x1W4z/Gt5A3FtgElXXNA
diff --git a/test/ocsp-tests/WIKH_ND3.ors b/test/ocsp-tests/WIKH_ND3.ors
new file mode 100644
index 000000000000..4f8a6eaba324
--- /dev/null
+++ b/test/ocsp-tests/WIKH_ND3.ors
@@ -0,0 +1,10 @@
+MIIB1AoBAKCCAc0wggHJBgkrBgEFBQcwAQEEggG6MIIBtjCBn6IWBBStvZh6NLQm
+9/rEJlTvA73gJMtUGhgPMjAxMjEwMTExMTM2NDdaMHQwcjBKMAkGBSsOAwIaBQAE
+FHyxZlScq9tE7mImFq30ZXv3etWUBBSuvZh6NLQm9/rEJlTvA73gJMtUGgIRAKcN
+bJWejX5BTb8DmevkCauAABgPMjAxMjEwMTExMTM2NDdaoBEYDzIwMTIxMDE1MTEz
+NjQ3WjANBgkqhkiG9w0BAQUFAAOCAQEAfnj3nh6z+USW6VlDWRytWpNmC1ZRwWlg
+P2+G4UF4HE8bMJkuiFLcZEVYTxlTYv+xAEpSFxdInFM2Q5C+O6pWOZ9NbikeR4oZ
+FTI1kAZ0Uw+YMpVM4ztvKBIpUSqlbi69iNJ9WGF6qzxVeqobSOyrjjwtTsuglUbR
++mshp/SP7Br2IIK+KM1vgsmVExPfGPYANyk7ki/Q8uUnjqkreeSa9WC2iJLGcybW
+YavDhYWALebUGukNeedkloYhdjPboPPxDkKNjakwIG8EkbJK7uXewMOHHOFvFTX3
+K388me8u5iQf4f3fj6ilEgs6f5Szzmb+vklPX0zIny/TVk2+Az7HmA==
diff --git a/test/ocsp-tests/WINH_D1.ors b/test/ocsp-tests/WINH_D1.ors
new file mode 100644
index 000000000000..ed627ba66bc1
--- /dev/null
+++ b/test/ocsp-tests/WINH_D1.ors
@@ -0,0 +1,32 @@
+MIIFzwoBAKCCBcgwggXEBgkrBgEFBQcwAQEEggW1MIIFsTCBoKIWBBRf2uQDFpGg
+Ywh4P1y2H9bZ2/BQNBgPMjAxMjEwMTExMzI5NDJaMHUwczBLMAkGBSsOAwIaBQAE
+FKFyDqBqfGICVPKo9Z3Se6Tzty+kBBSwsEr9HHUo+BxhqhP2+sGQPWsWowISESG8
+vx4IzALnkqQG05AvM+2bgAAYDzIwMTIxMDExMTAwMDAwWqARGA8yMDEyMTAxODEw
+MDAwMFowCwYJKoZIhvcNAQEFA4IBAQCX3gEX+JVfxuYmxBBxC9sNCi3o76ODIicr
+XMvm0DTO9VSyDBl7LDsMMgNMIDtO3flQSlBNZ2B9ikwyckXOSWXiXzybZVMdA/uq
+NchgkM9aChrlhG0AHZyYe/+dJSmEBFXkIomy+S6YQ7Mcs2s6WxCeWU7gB4XOy1zO
+/CvWjv0WQV1J2lZZ6pkvtECKAEjrVP275LA38HInFbYvVPXWzl4sDcX2TAxwUa4S
+xAJAfwl+B+oZSerZWGRo6KjZuB/OB31cB5n/lABmRez6Obi27D0UUCRv/eSbwOF4
+Ofaa/XzJt7sF7WpVgoR41HI88W7aN4vtcw1zcVsBmfRMUNYZSqtfoIID+DCCA/Qw
+ggPwMIIC2KADAgECAhIRISdENsrz1CSWG3VIBwfQERQwDQYJKoZIhvcNAQEFBQAw
+WTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNV
+BAMTJkdsb2JhbFNpZ24gRXh0ZW5kZWQgVmFsaWRhdGlvbiBDQSAtIEcyMB4XDTEy
+MDkxOTA3NDA1MFoXDTEyMTIxOTA4NDA1MFowgYUxCzAJBgNVBAYTAkJFMRkwFwYD
+VQQKExBHbG9iYWxTaWduIG52LXNhMUIwQAYDVQQDEzlHbG9iYWxTaWduIEV4dGVu
+ZGVkIFZhbGlkYXRpb24gQ0EgLSBHMiBPQ1NQIHJlc3BvbmRlciAtIDIxFzAVBgNV
+BAUTDjIwMTIwOTE5MDk0MDAwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAnCgMsBO+IxIqCnXCOfXJoIC3wj+f0s4DV9h2gJBzisWXkaJD2DfNrd0kHUXK
+qVVPUxnA4G5iZu0Z385/KiOt1/P6vQ/Z2/AsEh/8Z/hIyeZCHL31wrSZW4yLeZwi
+M76wPiBHJxPun681HQlVs/OGKSHnbHc1XJAIeA/M8u+lLWqIKB+AJ82TrOqUMj1s
+LjGhQNs84xPliONN5K7DrEy+Y65X/rFxN77Smw+UtcH1GgH2NgaHH8dpt1m25sgm
+UxZWhdx66opB/lbRQwWdGt7MC0kJFaWHDZq64DTuYoekFYSxAFu0nd0EekEHEJEi
+9mquB9cv/96SuEJl8BcUWU/1LwIDAQABo4GEMIGBMAkGA1UdEwQCMAAwDgYDVR0P
+AQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GCSsGAQUFBzABBQQCBQAw
+HQYDVR0OBBYEFF/a5AMWkaBjCHg/XLYf1tnb8FA0MB8GA1UdIwQYMBaAFLCwSv0c
+dSj4HGGqE/b6wZA9axajMA0GCSqGSIb3DQEBBQUAA4IBAQCKRl1iXFmOQtLseDWP
+Y5icDDBGiRi17CGgvIzGJi/ha0PhbO+X0TmQIEnRX3Mu0Er/Mm4RZSjMtJ2iZRh3
+tGf4Dn+jKgKOmgXC3oOG/l8RPHLf0yaPSdn/z0TXtA30vTFBLlFeWnhbfhovea4+
+snPdBxLqWZdtxmiwojgqA7YATCWwavizrBr09YRyDwzgtpZ2BwMruGuFuV9FsEwL
+PCM53yFlrM32oFghyfyE5kYjgnnueKM+pw1kA0jgb1CnVJRrMEN1TXuXDAZLtHKG
+5X/drah1JtkoZhCzxzZ3bYdVDQJ90OHFqM58lwGD6z3XuPKrHDKZKt+CPIsl5g7p
+4J2l
diff --git a/test/ocsp-tests/WINH_D2.ors b/test/ocsp-tests/WINH_D2.ors
new file mode 100644
index 000000000000..b89fcf8a9a7a
--- /dev/null
+++ b/test/ocsp-tests/WINH_D2.ors
@@ -0,0 +1,32 @@
+MIIF4AoBAKCCBdkwggXVBgkrBgEFBQcwAQEEggXGMIIFwjCBmaIWBBTqlwecTarB
+yVdbHxANRLCFYj1mqBgPMjAxMjEwMTExMzMwMTBaMG4wbDBEMAkGBSsOAwIaBQAE
+FLhXtbacB/gWIxOOkMkqDr4yAaoxBBRge2YaRQ2XyolQL30EzTSo//z9SwILBAAA
+AAABL07hRxCAABgPMjAxMjEwMDEwNjAwMDBaoBEYDzIwMTMwNDE1MDYwMDAwWjAL
+BgkqhkiG9w0BAQUDggEBAA0H7bvcULg1GayFtQVrYDyW0feOEMNGLmgaGuwRdrY3
+KuWyNJLUUJKQZnOkdT8A4RpVX8xD4EgVyOqRACUahgdgp0g3QOn+vf2Zyf+NJIgW
+woF5qaJgCOeIOw5O6F4r1vUhp8NvqXHotswgG58Nzz6UMD+uyIgq5o8uzOjryEm6
+wO2X+KvN9sMzkeZhNvAHkgBQL8CG4CggWnzn7At1DmhhsizfhDrosigM4Zr6Sm6z
+v1YfSPznD0b3TQ7RzvpbJPofF2aJXMIMxdKR5pemuevTDR2+JCXjVPsD/ZODFykc
+rsQeqx2vTOIg84PRKboXjCAwHn4rIN7JJtQqebLtD9egggQQMIIEDDCCBAgwggLw
+oAMCAQICCwQAAAAAAThXovYBMA0GCSqGSIb3DQEBBQUAMFcxCzAJBgNVBAYTAkJF
+MRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRsw
+GQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwHhcNMTIwNzA1MTgwMDAwWhcNMTMw
+NzA1MTgwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu
+di1zYTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBPQ1NQIGZvciBSb290IFIxIC0gQnJh
+bmNoIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDP2QF8p0+Fb7ID
+MwwD1gEr2oazjqbW28EZr3YEyMPk+7VFaGePSO1xjBGIE48Q7m7d6p6ZXCzlBZEi
+oudrHSr3WDqdIVKLDrZIDkgEgdjJE72Hq6Pf5CEGXyebbODm4sV96EfewSvOOYLL
+866g3aoVhLDK02ny+Q5OsokW7nhnmGMMh10tZqR5VmdQTiw8MgeqUxBEaEO4WH2J
+ltgSsgNJBNBYuDgnn5ryzVqhvmCJvYZMYeN6qZFKy1MgHcR+wEpGLPlRL4ttu6e5
+MJrVta7dVFobHUHoFog97LtQT1PY0Ubaihswjge5O04bYeCrgSSjr1e4xH/KDxRw
+yyhoscaFAgMBAAGjgdIwgc8wDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTqlwec
+TarByVdbHxANRLCFYj1mqDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBXzA0MDIGCCsG
+AQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAJ
+BgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFGB7ZhpF
+DZfKiVAvfQTNNKj//P1LMA8GCSsGAQUFBzABBQQCBQAwDQYJKoZIhvcNAQEFBQAD
+ggEBAHiC6N1uF29d7CmiVapA8Nr1xLSVeIkBd4A8yHsUTQ7ATI7bwT14QUV4awe7
+8cvmO5ZND8YG1ViwN162WFm9ivSoWBzvWDbU2JhQFb+XzrzCcdn0YbNiTxJh/vYm
+uDuxto00dpBgujSOAQv8B90iDEJ+sZpYRzDRj62qStRey0zpq5eX+pA+gdppMUFb
+4QvJf0El8TbLCWLN4TjrFe6ju7ZaN9zmgVYGQ2fMHKIGNScLuIA950nYwzRkIfHa
+YW6HqP1rCR1EiYmstEeCQyDxJx+RUlh+q8L1BKzaMYhS6s63MZzQuGseYStaCmbC
+fBIRKjnK621vAWvc7UR+0hqnZ+U=
diff --git a/test/ocsp-tests/WINH_D3.ors b/test/ocsp-tests/WINH_D3.ors
new file mode 100644
index 000000000000..c3d7c946565e
--- /dev/null
+++ b/test/ocsp-tests/WINH_D3.ors
@@ -0,0 +1,38 @@
+MIIG8AoBAKCCBukwggblBgkrBgEFBQcwAQEEggbWMIIG0jCB+aF+MHwxCzAJBgNV
+BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFVNlcnZlciBBZG1pbmlzdHJhdGlvbjEYMBYG
+A1UEAxMPb2NzcC5jYWNlcnQub3JnGA8yMDEyMTAxMTE0MzkxOFowZjBkMDwwCQYF
+Kw4DAhoFAAQUjKTJyxcpGUU+u45zCZG5JfKDImUEFBa1MhvUx/Pg5o7zvdKwOu6y
+ORjRAgMLs8aAABgPMjAxMjEwMTExNDIzMjVaoBEYDzIwMTIxMDEzMTQzOTE4WjAN
+BgkqhkiG9w0BAQUFAAOCAQEAgdrf+v+BwEhG0ghTLMVmuxWprJr/9VFtpKpxQrTo
+egSoW+5JOPCUAStfw3R3u7QM8sJf9bnPorgoCoY1hPKcWNLhvf1Ng3QlVkNa6NcO
+EonbuI4KE9Rhoflpf//pD/3AFKzU+ecRs04KtYezKrUvC1RayGabd7bgtIpdFss4
+ZCZ22riqjFtqD3+2//AHg7VaqiJMKlRt05CMmGe+HKn5PEN9HaeI52nsTf+L1Jeh
+ItnaDPfV76vFHHXyUhR3iIgnqQDCig0q3yj7BQqH50+K+myiMAY+p8cuVqebno1i
+BzXxxpZl/fw1KnTFdEa7p2jtmXw3KZiHAWAddwg1F1tHTaCCBL4wggS6MIIEtjCC
+Ap6gAwIBAgIDCpvzMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jvb3QgQ0Ex
+HjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZQ0EgQ2Vy
+dCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9ydEBjYWNl
+cnQub3JnMB4XDTExMDgyMzAwMDI1NloXDTEzMDgyMjAwMDI1NlowfDELMAkGA1UE
+BhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UEBxMGU3lkbmV5MRQwEgYDVQQKEwtD
+QWNlcnQgSW5jLjEeMBwGA1UECxMVU2VydmVyIEFkbWluaXN0cmF0aW9uMRgwFgYD
+VQQDEw9vY3NwLmNhY2VydC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCcxtRv5CPHw3BLdR/k/K72YsRgodbP+UdAONmvBvWzhwm6B8h6O+M64sFr
+2w6be7SYBECIyOQgNJ1flK4MoAWhdBA/H5NtxaDOKbAqA27tO9GaevcPp7c518O0
+3hVnlPLvsN1f48nY0jQOXUTfv5nYXmD0OSSK/V3IRo0KsWB6T9UnMGCeEwb4Oqqz
+uzM0b4SBflzMEony/m6Tg/qL7qs2TLZAqe77+BZaVdFkDUnaBN7RyMruXySxeXiz
+mogT3WhROeloMa/X+E01bWBYBEK7VZIY9pgBpXQ7vDbbIGgYuIXUi20wh03WMy16
+VDYdV0IUXHpidNUeK9W/BPP/7APBAgMBAAGjRDBCMAwGA1UdEwEB/wQCMAAwJwYD
+VR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMBBggrBgEFBQcDCTAJBgNVHREEAjAA
+MA0GCSqGSIb3DQEBBQUAA4ICAQAoT6p5f3cGprAcgrnzdenfTmDe9LCW7k2VnazA
+MAzpsD6gXcSlo4+3hoHem/SpKRH2tqi34DmImCiv/S6fxsKM4Gfn5rlkAFviuTvS
+r5Zrwh4ZKSfaoWv4bmbzmcAxvuxdMWHf/5PbjegjzFTbBMekVPZY/abYtD6kdHQZ
+VNgzwZVfTBfYhfa+Rg72I2zjKpMsjxMqWfTmUzW6wfK6LFudZqu0U1NnJw+IlnVU
+6WtjL885ebQrmcRqWz3nMhVLIu5L3w/s+VTLvm7If6jcMDNUjz8s2BPcJeCXg3TE
+STsyl6tvk17RRz2+9JskxVOk11xIn96xR4FCERIid2ek9z1xi7oYOajQF50i/9Gj
+ReDEfRSyb4/LzoKDOY+h4Q6jryeHh7WIHFiK5qrBN2y8qOoRJ/OqQnqci/BJBNpe
+g9Q9PJRgGSzRndTXNHiYRbeLpq7eGo3sPqlR9qBQ3rd98XGOU0RCMnzjKhENC3qo
+5PkSF2xs8RmjWktFSTDwjYo0qf1teo7CGHjgaPjQ7JE8Q4ysFOQndSWmLpqwDcI9
+HfIvPwUIWArQrJRh9LCNSyvHVgLqY9kw8NW4TlMxV2WqaYCkiKi3XVRrSFR3ahS1
+VBvRZ8KpplrV7rhXjVSSqqfLk1sX3l72Ck2F9ON+qbNFmvhgNjSiBY9neMgo804a
+wG/pag==
diff --git a/test/ocsp-tests/WINH_ND1.ors b/test/ocsp-tests/WINH_ND1.ors
new file mode 100644
index 000000000000..af4755260c1a
--- /dev/null
+++ b/test/ocsp-tests/WINH_ND1.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBSIRFH/UCpp
+Xi2I9CG62QzyzsvqfBgPMjAxMjEwMTEwODQxMTNaMHMwcTBJMAkGBSsOAwIaBQAE
+FEm2DTgjjfhFbk7lhD6jlBEYApefBBSIRFH/UCppXi2I9CG62QzyzsvqfAIQIuEz
+IiCgSN8psr+aMcKbB4AAGA8yMDEyMTAxMTA4NDExM1qgERgPMjAxMjEwMTUwODQx
+MTNaMA0GCSqGSIb3DQEBBQUAA4IBAQCNnhlBMxxh9z5AKfzAxiKs90CfxUsqfYfk
+8XlyF9VIfWRfEwzS6MF1pEzLnghRxTAmjrFgK+sxD9wk+S5Mdgw3nbED9DVFH2Hs
+RGKm/t9wkvrYOX6yRQqw6uRvU/5cibMjcyzKB/VQMwk4p4FwSUgBv88A5sTkKr2V
+eYdEm34hg2TZVkipPMBiyTyBLXs8D/9oALtnczg4xlTRSjDUvqoXL5haqY4QK2Pv
+mNwna6ACkwLmSuMe29UQ8IX2PUB4R5Etni5czyiKGxZLm+4NAhuEwWFNEzCyImPc
+087gHGU1zx+qVSlajqMJ/9ZXYjbt7WiWdhOTGEv4VMn8dHhRUs32
diff --git a/test/ocsp-tests/WINH_ND2.ors b/test/ocsp-tests/WINH_ND2.ors
new file mode 100644
index 000000000000..99417f792e17
--- /dev/null
+++ b/test/ocsp-tests/WINH_ND2.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBQLWOWLxkwV
+N6RAqTCpIb5HNlpW/xgPMjAxMjEwMTAyMzAzMTlaMHMwcTBJMAkGBSsOAwIaBQAE
+FO2+ZAvtiWulchtVZmfKU1ZI9ewTBBQLWOWLxkwVN6RAqTCpIb5HNlpW/wIQEaO0
+0OyNt3+doM1dLVEvQoAAGA8yMDEyMTAxMDIzMDMxOVqgERgPMjAxMjEwMTQyMzAz
+MTlaMA0GCSqGSIb3DQEBBQUAA4IBAQCHn2nGfEUX/EJruMkTgh7GgB0u9cpAepaD
+sPv9gtl3KLUZyR+NbGMIa5/bpoJp0yg1z5VL6CLMusy3AF6Cn2fyaioDxG+yc+gA
+PcPFdEqiIMr+TP8s7qcEiE6WZddSSCqCn90VZSCWkpDhnCjDRwJLBBPU3803fdMz
+oguvyr7y6Koxik8X/iUe8EpSzAvmm4GZL3veTI+x7IezJSrhCS9zM0ZHjySjoDxC
++ljGH0EuWPTmFEqZVGIq3cuahIYzKItUbYnXU6ipi/2p42qbsFeok7eEN0EYsY1a
+vRATHGRmU7Q5HLCq4rQtZC1cis52Mvc9x1W4z/Gt5A3FtgElXXNA
diff --git a/test/ocsp-tests/WINH_ND3.ors b/test/ocsp-tests/WINH_ND3.ors
new file mode 100644
index 000000000000..73dc42de2997
--- /dev/null
+++ b/test/ocsp-tests/WINH_ND3.ors
@@ -0,0 +1,10 @@
+MIIB1AoBAKCCAc0wggHJBgkrBgEFBQcwAQEEggG6MIIBtjCBn6IWBBStvZh6NLQm
+9/rEJlTvA73gJMtUGhgPMjAxMjEwMTExMTM2NDdaMHQwcjBKMAkGBSsOAwIaBQAE
+FH2xZlScq9tE7mImFq30ZXv3etWUBBStvZh6NLQm9/rEJlTvA73gJMtUGgIRAKcN
+bJWejX5BTb8DmevkCauAABgPMjAxMjEwMTExMTM2NDdaoBEYDzIwMTIxMDE1MTEz
+NjQ3WjANBgkqhkiG9w0BAQUFAAOCAQEAfnj3nh6z+USW6VlDWRytWpNmC1ZRwWlg
+P2+G4UF4HE8bMJkuiFLcZEVYTxlTYv+xAEpSFxdInFM2Q5C+O6pWOZ9NbikeR4oZ
+FTI1kAZ0Uw+YMpVM4ztvKBIpUSqlbi69iNJ9WGF6qzxVeqobSOyrjjwtTsuglUbR
++mshp/SP7Br2IIK+KM1vgsmVExPfGPYANyk7ki/Q8uUnjqkreeSa9WC2iJLGcybW
+YavDhYWALebUGukNeedkloYhdjPboPPxDkKNjakwIG8EkbJK7uXewMOHHOFvFTX3
+K388me8u5iQf4f3fj6ilEgs6f5Szzmb+vklPX0zIny/TVk2+Az7HmA==
diff --git a/test/ocsp-tests/WKDOSC_D1.ors b/test/ocsp-tests/WKDOSC_D1.ors
new file mode 100644
index 000000000000..d7566cf1bd52
--- /dev/null
+++ b/test/ocsp-tests/WKDOSC_D1.ors
@@ -0,0 +1,32 @@
+MIIFzwoBAKCCBcgwggXEBgkrBgEFBQcwAQEEggW1MIIFsTCBoKIWBBSpTXftIZX0
+lLT9zwVSQC5Jfp3pqhgPMjAxMjEwMTAxNDU0NDNaMHUwczBLMAkGBSsOAwIaBQAE
+FKByDqBqfGICVPKo9Z3Se6Tzty+kBBSwsEr9HHUo+BxhqhP2+sGQPWsWowISESG8
+vx4IzALnkqQG05AvM+2bgAAYDzIwMTIxMDEwMTMwMDAwWqARGA8yMDEyMTAxNzEz
+MDAwMFowCwYJKoZIhvcNAQEFA4IBAQBw5Z+0ggEddRTIq7cXlMoxG9Nrx4HtutsH
+itIUoZp/rlLoxHsJTo/VmdZvTTGIc7Ok9XuoH61lY/x9glAKsGRjz4Myc9+5rx0O
+675lwmOS+uaf3/hRkicVrVr7Pt2ug3R7OXm2MJrohjNKP8lqtLJ0hHP88a8rotKA
+r9uz/qHm7K4Uh7dRt/Pnu9MPG74tZeFNN4M1ONMEiRdG39FqzFDXWxwQ3NmyC0Wo
+DQn+NklZMknr8mm7IBWpzgU1fTD9R0yv0zdhUZGiEXxvdhm7GJrTET5jS30Ksm5j
+o+n39YVu/vGbjyyYx3+WdeQLEyipaGvldSuJpT+R684/RuFWNetcoIID+DCCA/Qw
+ggPwMIIC2KADAgECAhIRIcYjwu4UNkR1VGrDbSdFei8wDQYJKoZIhvcNAQEFBQAw
+WTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNV
+BAMTJkdsb2JhbFNpZ24gRXh0ZW5kZWQgVmFsaWRhdGlvbiBDQSAtIEcyMB4XDTEy
+MDkxOTA3NDAzMVoXDTEyMTIxOTA4NDAzMVowgYUxCzAJBgNVBAYTAkJFMRkwFwYD
+VQQKExBHbG9iYWxTaWduIG52LXNhMUIwQAYDVQQDEzlHbG9iYWxTaWduIEV4dGVu
+ZGVkIFZhbGlkYXRpb24gQ0EgLSBHMiBPQ1NQIHJlc3BvbmRlciAtIDExFzAVBgNV
+BAUTDjIwMTIwOTE5MDkzOTAwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAx0kb6QhDH3sEDj4zaysjVzYelq9lZ1cso4R2IyQxaoPaG6GkaCmHA4sz6KP+
+m3ADqplibEUBa/mzCxHW8/oy3NhGMFdbezduZrnRFLbzakOTeIo8VEIM3JPfgREv
+CX8nj6Xu7ERD6JO/ZQ9Xr7YVzKKN+3cVZlcMHoGBnOPcO2Sz0AcYyk5m5IsGBRoT
+T86j6Cr9PhOPTVwXL6Wxy1KVHsUZXUwnRacV0O4SHWQ4zM9Sablus9fTbh1CgIqW
+sKDyzVB4yECXkBVeUlA+cuCaRRVHRiR+jPDSgbU62nnNudEpGG7dyoop6IOvXv2O
+ydncWzaukxIVvQ/Ij85kHqs7HQIDAQABo4GEMIGBMAkGA1UdEwQCMAAwDgYDVR0P
+AQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GCSsGAQUFBzABBQQCBQAw
+HQYDVR0OBBYEFKlNd+0hlfSUtP3PBVJALkl+nemqMB8GA1UdIwQYMBaAFLCwSv0c
+dSj4HGGqE/b6wZA9axajMA0GCSqGSIb3DQEBBQUAA4IBAQCe4rZg61Dmwygl/Uae
+BJZog64/FvuB1sfCqKLJTjKOfLcugSTX1TT7bLJbzXRGPQuorI3TIZEOwldIw01d
+DTLlsOCHrfHd+bpxgijxPkUuaA4NYnpvqTEMJqPKOC8QYfKupNjAPSuHvwqvqCfO
+RCe3jY6xQDO0WCTZ8/xMsOkw+J/YEYqALETf2Ug7k5eRL/TvfLd8Sgi7vPfmUeiW
+ptlsbhMOWQoQc+JA3vCI01rrjNq+0kIZ/r8nPGvablRr0Aakk6eDuS2dcReaPwuK
+0xE136pJYiXdQ3SA7uwmlorjxmejavyoPCr23TU74DQEt6hhc6uIcabsa4Y8KvJy
+RI4G
diff --git a/test/ocsp-tests/WKDOSC_D2.ors b/test/ocsp-tests/WKDOSC_D2.ors
new file mode 100644
index 000000000000..757db75427ed
--- /dev/null
+++ b/test/ocsp-tests/WKDOSC_D2.ors
@@ -0,0 +1,32 @@
+MIIF4AoBAKCCBdkwggXVBgkrBgEFBQcwAQEEggXGMIIFwjCBmaIWBBTqlwecTarB
+yVdbHxANRLCFYj1mqBgPMjAxMjEwMTAxNDU0NDhaMG4wbDBEMAkGBSsOAwIaBQAE
+FLdXtbacB/gWIxOOkMkqDr4yAaoxBBRge2YaRQ2XyolQL30EzTSo//z9SwILBAAA
+AAABL07hRxCAABgPMjAxMjEwMDEwNjAwMDBaoBEYDzIwMTMwNDE1MDYwMDAwWjAL
+BgkqhkiG9w0BAQUDggEBACkGyoGefA2WuktIerofBoPgeyT8Mry57DxF7IEvX8dI
+Adk+MZRo5suYIE2AJty8bohYYiIxS7sZ5nsUM+iyu5cIdmsIwt/YifYsSdHc6DKz
+l3Yh4bS27QX05/Vuok3HmEMsRBmensKATMfvGP+TOwhuFeHWAK8KHSCmUbGZFP3A
+WKtrhRh/qC4qetMt07z/OKZcqHUYegEpO3xqRJ4MdqRJpV1urjdL/852US0mWAOL
+/EPoexWiHiKJmsNy7HAEKFQ+daqdZYM1BTGbS2aj3go/BVqf0xEhRLT0fsdof4Is
+1Cy2ZHGbaVEyOQpXsxUEAqEdJcFRcLFGhdgnUjcQ9lqgggQQMIIEDDCCBAgwggLw
+oAMCAQICCwQAAAAAAThXovYBMA0GCSqGSIb3DQEBBQUAMFcxCzAJBgNVBAYTAkJF
+MRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRsw
+GQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwHhcNMTIwNzA1MTgwMDAwWhcNMTMw
+NzA1MTgwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu
+di1zYTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBPQ1NQIGZvciBSb290IFIxIC0gQnJh
+bmNoIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQ2QF8p0+Fb7ID
+MwwD1gEr2oazjqbW28EZr3YEyMPk+7VFaGePSO1xjBGIE48Q7m7d6p6ZXCzlBZEi
+oudrHSr3WDqdIVKLDrZIDkgEgdjJE72Hq6Pf5CEGXyebbODm4sV96EfewSvOOYLL
+866g3aoVhLDK02ny+Q5OsokW7nhnmGMMh10tZqR5VmdQTiw8MgeqUxBEaEO4WH2J
+ltgSsgNJBNBYuDgnn5ryzVqhvmCJvYZMYeN6qZFKy1MgHcR+wEpGLPlRL4ttu6e5
+MJrVta7dVFobHUHoFog97LtQT1PY0Ubaihswjge5O04bYeCrgSSjr1e4xH/KDxRw
+yyhoscaFAgMBAAGjgdIwgc8wDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTqlwec
+TarByVdbHxANRLCFYj1mqDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBXzA0MDIGCCsG
+AQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAJ
+BgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFGB7ZhpF
+DZfKiVAvfQTNNKj//P1LMA8GCSsGAQUFBzABBQQCBQAwDQYJKoZIhvcNAQEFBQAD
+ggEBAHiC6N1uF29d7CmiVapA8Nr1xLSVeIkBd4A8yHsUTQ7ATI7bwT14QUV4awe7
+8cvmO5ZND8YG1ViwN162WFm9ivSoWBzvWDbU2JhQFb+XzrzCcdn0YbNiTxJh/vYm
+uDuxto00dpBgujSOAQv8B90iDEJ+sZpYRzDRj62qStRey0zpq5eX+pA+gdppMUFb
+4QvJf0El8TbLCWLN4TjrFe6ju7ZaN9zmgVYGQ2fMHKIGNScLuIA950nYwzRkIfHa
+YW6HqP1rCR1EiYmstEeCQyDxJx+RUlh+q8L1BKzaMYhS6s63MZzQuGseYStaCmbC
+fBIRKjnK621vAWvc7UR+0hqnZ+U=
diff --git a/test/ocsp-tests/WKDOSC_D3.ors b/test/ocsp-tests/WKDOSC_D3.ors
new file mode 100644
index 000000000000..c33179c379ca
--- /dev/null
+++ b/test/ocsp-tests/WKDOSC_D3.ors
@@ -0,0 +1,38 @@
+MIIG8AoBAKCCBukwggblBgkrBgEFBQcwAQEEggbWMIIG0jCB+aF+MHwxCzAJBgNV
+BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFVNlcnZlciBBZG1pbmlzdHJhdGlvbjEYMBYG
+A1UEAxMPb2NzcC5jYWNlcnQub3JnGA8yMDEyMTAxMDE1MTkzOVowZjBkMDwwCQYF
+Kw4DAhoFAAQUi6TJyxcpGUU+u45zCZG5JfKDImUEFBa1MhvUx/Pg5o7zvdKwOu6y
+ORjRAgMLs8aAABgPMjAxMjEwMTAxNDU2MTdaoBEYDzIwMTIxMDEyMTUxOTM5WjAN
+BgkqhkiG9w0BAQUFAAOCAQEAH1Bs3glJoAvCHhgVtN4F/avlKA1St74v7yuD1DIu
+cBf/4YRJdxZATXMI8I0TPjSl8L+rRAiUTVd8sPhWQ9XD9WaYKkTEjuQSPp851/81
+zDihz9Kj5Rzo5PYpFsbSps/ALMQSRkrtuX4DCm9fbK7xC+adpbhQDnWW/GXM1+Ob
+lv3pHDQXLh2GQbRsaJBgLeSUxIIE7RWJv1N+Ugi5zF8rja5qnJ9DnkilEqMeXQp8
+SThaI+TOe+KHK+7wTp5QkFNIE5l/uKgvSNIOwLe9HDevlSl1wYF6e+mAz3uoQyJa
+Ucx8FIoV6CIr+wUd+P8CmNXiQ7M59I8gm3FCDiEvWDQGEaCCBL4wggS6MIIEtjCC
+Ap6gAwIBAgIDCpvzMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jvb3QgQ0Ex
+HjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZQ0EgQ2Vy
+dCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9ydEBjYWNl
+cnQub3JnMB4XDTExMDgyMzAwMDI1NloXDTEzMDgyMjAwMDI1NlowfDELMAkGA1UE
+BhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UEBxMGU3lkbmV5MRQwEgYDVQQKEwtD
+QWNlcnQgSW5jLjEeMBwGA1UECxMVU2VydmVyIEFkbWluaXN0cmF0aW9uMRgwFgYD
+VQQDEw9vY3NwLmNhY2VydC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCdxtRv5CPHw3BLdR/k/K72YsRgodbP+UdAONmvBvWzhwm6B8h6O+M64sFr
+2w6be7SYBECIyOQgNJ1flK4MoAWhdBA/H5NtxaDOKbAqA27tO9GaevcPp7c518O0
+3hVnlPLvsN1f48nY0jQOXUTfv5nYXmD0OSSK/V3IRo0KsWB6T9UnMGCeEwb4Oqqz
+uzM0b4SBflzMEony/m6Tg/qL7qs2TLZAqe77+BZaVdFkDUnaBN7RyMruXySxeXiz
+mogT3WhROeloMa/X+E01bWBYBEK7VZIY9pgBpXQ7vDbbIGgYuIXUi20wh03WMy16
+VDYdV0IUXHpidNUeK9W/BPP/7APBAgMBAAGjRDBCMAwGA1UdEwEB/wQCMAAwJwYD
+VR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMBBggrBgEFBQcDCTAJBgNVHREEAjAA
+MA0GCSqGSIb3DQEBBQUAA4ICAQAoT6p5f3cGprAcgrnzdenfTmDe9LCW7k2VnazA
+MAzpsD6gXcSlo4+3hoHem/SpKRH2tqi34DmImCiv/S6fxsKM4Gfn5rlkAFviuTvS
+r5Zrwh4ZKSfaoWv4bmbzmcAxvuxdMWHf/5PbjegjzFTbBMekVPZY/abYtD6kdHQZ
+VNgzwZVfTBfYhfa+Rg72I2zjKpMsjxMqWfTmUzW6wfK6LFudZqu0U1NnJw+IlnVU
+6WtjL885ebQrmcRqWz3nMhVLIu5L3w/s+VTLvm7If6jcMDNUjz8s2BPcJeCXg3TE
+STsyl6tvk17RRz2+9JskxVOk11xIn96xR4FCERIid2ek9z1xi7oYOajQF50i/9Gj
+ReDEfRSyb4/LzoKDOY+h4Q6jryeHh7WIHFiK5qrBN2y8qOoRJ/OqQnqci/BJBNpe
+g9Q9PJRgGSzRndTXNHiYRbeLpq7eGo3sPqlR9qBQ3rd98XGOU0RCMnzjKhENC3qo
+5PkSF2xs8RmjWktFSTDwjYo0qf1teo7CGHjgaPjQ7JE8Q4ysFOQndSWmLpqwDcI9
+HfIvPwUIWArQrJRh9LCNSyvHVgLqY9kw8NW4TlMxV2WqaYCkiKi3XVRrSFR3ahS1
+VBvRZ8KpplrV7rhXjVSSqqfLk1sX3l72Ck2F9ON+qbNFmvhgNjSiBY9neMgo804a
+wG/pag==
diff --git a/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem b/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem
new file mode 100644
index 000000000000..93fb70d51b68
--- /dev/null
+++ b/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEhjCCA26gAwIBAgILBAAAAAABL07hXdQwDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTEwNDEzMTAwMDAwWhcNMjIwNDEz
+MTAwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1z
+YTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBFeHRlbmRlZCBWYWxpZGF0aW9uIENBIC0g
+RzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDOoUbMUpq4pbR/WNnN
+2EugcgyXW6aIIMO5PUbc0FxSMPb6WU+FX7DbiLSpXysjSKyr9ZJ4FLYyD/tcaoVb
+AJDgu2X1WvlPZ37HbCnsk8ArysRe2LDb1r4/mwvAj6ldrvcAAqT8umYROHf+IyAl
+VRDFvYK5TLFoxuJwe4NcE2fBofN8C6iZmtDimyUxyCuNQPZSY7GgrVou9Xk2bTUs
+Dt0F5NDiB0i3KF4r1VjVbNAMoQFGAVqPxq9kx1UBXeHRxmxQJaAFrQCrDI1la93r
+wnJUyQ88ABeHIu/buYZ4FlGud9mmKE3zWI2DZ7k0JZscUYBR84OSaqOuR5rW5Isb
+wO2xAgMBAAGjggFaMIIBVjAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB
+/wIBADAdBgNVHQ4EFgQUsLBK/Rx1KPgcYaoT9vrBkD1rFqMwRwYDVR0gBEAwPjA8
+BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29t
+L3JlcG9zaXRvcnkvMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs
+c2lnbi5uZXQvcm9vdC1yMi5jcmwwRAYIKwYBBQUHAQEEODA2MDQGCCsGAQUFBzAB
+hihodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9FeHRlbmRlZFNTTENBMCkGA1Ud
+JQQiMCAGCCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAzAfBgNVHSMEGDAW
+gBSb4gdXZxwewGoG3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAL0m28rZa
+pJWrnlrpK4KbzJBrfHRFIOde2Mcj7ig1sTVlKqVR4FU/9oNntOQ2KbDa7JeVqYoF
+o0X+Iy5SiLQfEICt0oufo1+oxetz3nmIQZgz7qdgGLFGyUAQB5yPClLJExoGbqCb
+LTr2rk/no1E1KlsYBRLlUdy2NmLz4aQP++TPw5S/EauhWTEB8MxT7I9j12yW00gq
+iiPtRVaoZkHqAblH7qFHDBTxI+Egc8p9UHxkOFejj0qcm+ltRc9Ea01gIEBxJbVG
+qmwIft/I+shWKpLLg7h5CZctXqEBzgbttJfJBNxB7+BPNk3kQHNG7BESfIhbNCYl
+TercGL7FG81kwA==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WKIC_D2_Issuer_Root.pem b/test/ocsp-tests/WKIC_D2_Issuer_Root.pem
new file mode 100644
index 000000000000..61db7ae3e363
--- /dev/null
+++ b/test/ocsp-tests/WKIC_D2_Issuer_Root.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDbDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
+AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
+yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
+38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
+AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
+DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
+HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WKIC_D3_Issuer_Root.pem b/test/ocsp-tests/WKIC_D3_Issuer_Root.pem
new file mode 100644
index 000000000000..f03432b414dd
--- /dev/null
+++ b/test/ocsp-tests/WKIC_D3_Issuer_Root.pem
@@ -0,0 +1,41 @@
+-----BEGIN CERTIFICATE-----
+MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
+IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
+IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
+Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
+BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
+MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
+ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAzyLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
+8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
+zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
+fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
+w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
+G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
+epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
+laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
+QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
+fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
+YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
+ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
+gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
+MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
+IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
+dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
+czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
+dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
+aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
+AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
+b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
+ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
+nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
+18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
+gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
+Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
+sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
+SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
+CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
+GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
+zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
+omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem b/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem
new file mode 100644
index 000000000000..f0d981131272
--- /dev/null
+++ b/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIFBjCCA+6gAwIBAgIQEaO00OyNt3+doM1dLVEvQjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMDA1MjQwMDAw
+MDBaFw0yMDA1MzAxMDQ4MzhaMIGOMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDE0MDIGA1UEAxMrQ09NT0RPIEV4dGVuZGVkIFZhbGlkYXRp
+b24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAM1KljPNJY1n7iiWN4dG8PYEooR/U6qW5h+xAhxu7X0h1Nc8HqLYaS+ot/Wi
+7WRYZOFEZTZJQSABjTsT4gjzDPJXOZM3txyTRIOOvy3xoQV12m7ue28b6naDKHRK
+HCvT9cQDcpOvhs4JjDx11MkKL3Lzrb0OMDyEoXMfAyUUpY/D1vS15N2GevUZumjy
+hVSiMBHK0ZLLO3QGEqA3q2rYVBHfbJoWlLm0p2XGdC0x801S6VVRn8s+oo12mHDS
+b6ZlRS8bhbtbbfnywARmE4R6nc4n2PREnr+svpnba0/bWCGwiSe0jzLWS15ykV7f
+BZ3ZSS/0tm9QH3XLgJ3m0+TR8tMCAwEAAaOCAWkwggFlMB8GA1UdIwQYMBaAFAtY
+5YvGTBU3pECpMKkhvkc2Wlb/MB0GA1UdDgQWBBSIRFH/UCppXi2I9CG62Qzyzsvq
+fDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADA+BgNVHSAENzA1
+MDMGBFUdIAAwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNv
+bS9DUFMwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5jb21vZG9jYS5jb20v
+Q09NT0RPQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwdAYIKwYBBQUHAQEEaDBm
+MD4GCCsGAQUFBzAChjJodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9BZGRU
+cnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2Rv
+Y2EuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCaQ7+vpHJezX1vf/T8PYy7cOYe3QT9
+P9ydn7+JdpvyhjH8f7PtKpFTLOKqsOPILHH3FYojHPFpLoH7sbxiC6saVBzZIl40
+TKX2Iw9dej3bQ81pfhc3Us1TocIR1FN4J2TViUFNFlW7kMvw2OTd3dMJZEgo/zIj
+hC+Me1UvzymINzR4DzOq/7fylqSbRIC1vmxWVKukgZ4lGChUOn8sY89ZIIwYazgs
+tN3t40DeDDYlV5rA0WCeXgNol64aO+pF11GZSe5EWVYLXrGPaOqKnsrSyaADfnAl
+9DLJTlCDh6I0SD1PNXf82Ijq9n0ezkO21cJqfjhmY03n7jLvDyToKmf6
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem b/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem
new file mode 100644
index 000000000000..14d35cf1cc3d
--- /dev/null
+++ b/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0DCCArigAwIBAgIQIKTEf93f4cdTYwcTiHdgEjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMTAxMDEwMDAw
+MDBaFw0zMDEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0UCLi3LjkRv3
+UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
+2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
+Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
+nKVIrLsm9wIDAQABo0IwQDAdBgNVHQ4EFgQUC1jli8ZMFTekQKkwqSG+RzZaVv8w
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBAC/JxBwHO89hAgCx2SFRdXIDMLDEFh9sAIsQrK/xR9SuEDwMGvjUk2ysEDd8
+t6aDZK3N3w6HM503sMZ7OHKx8xoOo/lVem0DZgMXlUrxsXrfViEGQo+x06iF3u6X
+HWLrp+cxEmbDD6ZLLkGC9/3JG6gbr+48zuOcrigHoSybJMIPIyaDMouGDx8rEkYl
+Fo92kANr3ryqImhrjKGsKxE5pttwwn1y6TPn/CbxdFqR5p2ErPioBhlG5qfpqjQi
+pKGfeq23sqSaM4hxAjwu1nqyH6LKwN0vEJT9s4yEIHlG1QXUEOTS22RPuFvuG8Ug
+R1uUq27UlTMdphVx8fiUylQ5PsE=
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem b/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem
new file mode 100644
index 000000000000..ba7fb8dcee6a
--- /dev/null
+++ b/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALj3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WRID_D1.ors b/test/ocsp-tests/WRID_D1.ors
new file mode 100644
index 000000000000..6589782194a0
--- /dev/null
+++ b/test/ocsp-tests/WRID_D1.ors
@@ -0,0 +1,32 @@
+MIIFzwoBAKCCBcgwggXEBgkrBgEFBQcwAQEEggW1MIIFsTCBoKIWBBRg2uQDFpGg
+Ywh4P1y2H9bZ2/BQNBgPMjAxMjEwMTExMTI1MjJaMHUwczBLMAkGBSsOAwIaBQAE
+FKByDqBqfGICVPKo9Z3Se6Tzty+kBBSwsEr9HHUo+BxhqhP2+sGQPWsWowISESG8
+vx4IzALnkqQG05AvM+2bgAAYDzIwMTIxMDExMTAwMDAwWqARGA8yMDEyMTAxODEw
+MDAwMFowCwYJKoZIhvcNAQEFA4IBAQAHQBPHdHWNzaFs5bfBvQcvxBWsDnsCFXNs
+a1fECiWDFNt6Nz4MCBY4rC7n0nhQfvg4m1woNcTAZVO8lacYomwUU/5/XpeFM6yc
+NeFcVbfVXA48GWPANitNQCwyRL5hGfIqNy1I9T1BHlBqYusmJKy65r2iqpmld/hD
+7S1dsCd4fXhjBQQORPmBqhKvWEU08Dh5aoaDAuaZoxRH8B1q+mUs0ODOIu34L84y
+JcxTKccd/HCwI8oxwLoBtyXSHb+dCzc7zSjFvQhbT5dOCvJNNe/fk6+EhMtQ6ybC
+D7p9EShCvU5jAdw54bZWk5wIQSvsWk9axUmYFFLYI3hAaoybpFVroIID+DCCA/Qw
+ggPwMIIC2KADAgECAhIRISdENsrz1CSWG3VIBwfQERQwDQYJKoZIhvcNAQEFBQAw
+WTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNV
+BAMTJkdsb2JhbFNpZ24gRXh0ZW5kZWQgVmFsaWRhdGlvbiBDQSAtIEcyMB4XDTEy
+MDkxOTA3NDA1MFoXDTEyMTIxOTA4NDA1MFowgYUxCzAJBgNVBAYTAkJFMRkwFwYD
+VQQKExBHbG9iYWxTaWduIG52LXNhMUIwQAYDVQQDEzlHbG9iYWxTaWduIEV4dGVu
+ZGVkIFZhbGlkYXRpb24gQ0EgLSBHMiBPQ1NQIHJlc3BvbmRlciAtIDIxFzAVBgNV
+BAUTDjIwMTIwOTE5MDk0MDAwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAnCgMsBO+IxIqCnXCOfXJoIC3wj+f0s4DV9h2gJBzisWXkaJD2DfNrd0kHUXK
+qVVPUxnA4G5iZu0Z385/KiOt1/P6vQ/Z2/AsEh/8Z/hIyeZCHL31wrSZW4yLeZwi
+M76wPiBHJxPun681HQlVs/OGKSHnbHc1XJAIeA/M8u+lLWqIKB+AJ82TrOqUMj1s
+LjGhQNs84xPliONN5K7DrEy+Y65X/rFxN77Smw+UtcH1GgH2NgaHH8dpt1m25sgm
+UxZWhdx66opB/lbRQwWdGt7MC0kJFaWHDZq64DTuYoekFYSxAFu0nd0EekEHEJEi
+9mquB9cv/96SuEJl8BcUWU/1LwIDAQABo4GEMIGBMAkGA1UdEwQCMAAwDgYDVR0P
+AQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GCSsGAQUFBzABBQQCBQAw
+HQYDVR0OBBYEFF/a5AMWkaBjCHg/XLYf1tnb8FA0MB8GA1UdIwQYMBaAFLCwSv0c
+dSj4HGGqE/b6wZA9axajMA0GCSqGSIb3DQEBBQUAA4IBAQCKRl1iXFmOQtLseDWP
+Y5icDDBGiRi17CGgvIzGJi/ha0PhbO+X0TmQIEnRX3Mu0Er/Mm4RZSjMtJ2iZRh3
+tGf4Dn+jKgKOmgXC3oOG/l8RPHLf0yaPSdn/z0TXtA30vTFBLlFeWnhbfhovea4+
+snPdBxLqWZdtxmiwojgqA7YATCWwavizrBr09YRyDwzgtpZ2BwMruGuFuV9FsEwL
+PCM53yFlrM32oFghyfyE5kYjgnnueKM+pw1kA0jgb1CnVJRrMEN1TXuXDAZLtHKG
+5X/drah1JtkoZhCzxzZ3bYdVDQJ90OHFqM58lwGD6z3XuPKrHDKZKt+CPIsl5g7p
+4J2l
diff --git a/test/ocsp-tests/WRID_D2.ors b/test/ocsp-tests/WRID_D2.ors
new file mode 100644
index 000000000000..4e11e4b27e8e
--- /dev/null
+++ b/test/ocsp-tests/WRID_D2.ors
@@ -0,0 +1,32 @@
+MIIF4AoBAKCCBdkwggXVBgkrBgEFBQcwAQEEggXGMIIFwjCBmaIWBBTrlwecTarB
+yVdbHxANRLCFYj1mqBgPMjAxMjEwMTExMTI1MjVaMG4wbDBEMAkGBSsOAwIaBQAE
+FLdXtbacB/gWIxOOkMkqDr4yAaoxBBRge2YaRQ2XyolQL30EzTSo//z9SwILBAAA
+AAABL07hRxCAABgPMjAxMjEwMDEwNjAwMDBaoBEYDzIwMTMwNDE1MDYwMDAwWjAL
+BgkqhkiG9w0BAQUDggEBAHThkPoy6eA7qX9y5C5b1ElRSwdjzsd15OJSqP2yjQbS
+Ol1K8DWtX0UhTfRH+CrIPoWL40g2HjXtIVeMD6s3hakYimZUenIJ/IRRSVWp+EXU
+MewgTVPz/wJN/9dJIkSbOI/BmpIGlaaBaLwcb39nJjZMq0sXj8jRI5i0isotOAFz
+Zc0R20viBEH099KuGktB2fKKEpVbbWPljTxKzkIBs9SXZBIqd/X2MWzQWcLKzhL0
+oynkvqxTFqNVjjZKcKSXPS/XEUufLrv/E3xQZYAfTJr778kFkyA8JzrXiH6W5DX6
+UbqsnO5DaPZvMDfvlQWETkoS1j+Qgu2mIWzdiw7sPrOgggQQMIIEDDCCBAgwggLw
+oAMCAQICCwQAAAAAAThXovYBMA0GCSqGSIb3DQEBBQUAMFcxCzAJBgNVBAYTAkJF
+MRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRsw
+GQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwHhcNMTIwNzA1MTgwMDAwWhcNMTMw
+NzA1MTgwMDAwWjBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu
+di1zYTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBPQ1NQIGZvciBSb290IFIxIC0gQnJh
+bmNoIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDP2QF8p0+Fb7ID
+MwwD1gEr2oazjqbW28EZr3YEyMPk+7VFaGePSO1xjBGIE48Q7m7d6p6ZXCzlBZEi
+oudrHSr3WDqdIVKLDrZIDkgEgdjJE72Hq6Pf5CEGXyebbODm4sV96EfewSvOOYLL
+866g3aoVhLDK02ny+Q5OsokW7nhnmGMMh10tZqR5VmdQTiw8MgeqUxBEaEO4WH2J
+ltgSsgNJBNBYuDgnn5ryzVqhvmCJvYZMYeN6qZFKy1MgHcR+wEpGLPlRL4ttu6e5
+MJrVta7dVFobHUHoFog97LtQT1PY0Ubaihswjge5O04bYeCrgSSjr1e4xH/KDxRw
+yyhoscaFAgMBAAGjgdIwgc8wDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTqlwec
+TarByVdbHxANRLCFYj1mqDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBXzA0MDIGCCsG
+AQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAJ
+BgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFGB7ZhpF
+DZfKiVAvfQTNNKj//P1LMA8GCSsGAQUFBzABBQQCBQAwDQYJKoZIhvcNAQEFBQAD
+ggEBAHiC6N1uF29d7CmiVapA8Nr1xLSVeIkBd4A8yHsUTQ7ATI7bwT14QUV4awe7
+8cvmO5ZND8YG1ViwN162WFm9ivSoWBzvWDbU2JhQFb+XzrzCcdn0YbNiTxJh/vYm
+uDuxto00dpBgujSOAQv8B90iDEJ+sZpYRzDRj62qStRey0zpq5eX+pA+gdppMUFb
+4QvJf0El8TbLCWLN4TjrFe6ju7ZaN9zmgVYGQ2fMHKIGNScLuIA950nYwzRkIfHa
+YW6HqP1rCR1EiYmstEeCQyDxJx+RUlh+q8L1BKzaMYhS6s63MZzQuGseYStaCmbC
+fBIRKjnK621vAWvc7UR+0hqnZ+U=
diff --git a/test/ocsp-tests/WRID_D3.ors b/test/ocsp-tests/WRID_D3.ors
new file mode 100644
index 000000000000..61e2d09685ff
--- /dev/null
+++ b/test/ocsp-tests/WRID_D3.ors
@@ -0,0 +1,38 @@
+MIIG8AoBAKCCBukwggblBgkrBgEFBQcwAQEEggbWMIIG0jCB+aF+MHwxCzAJBgNV
+BAYTAlVTMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFVNlcnZlciBBZG1pbmlzdHJhdGlvbjEYMBYG
+A1UEAxMPb2NzcC5jYWNlcnQub3JnGA8yMDEyMTAxMTEzMjE0MVowZjBkMDwwCQYF
+Kw4DAhoFAAQUi6TJyxcpGUU+u45zCZG5JfKDImUEFBa1MhvUx/Pg5o7zvdKwOu6y
+ORjRAgMLs8aAABgPMjAxMjEwMTExMjQyMTZaoBEYDzIwMTIxMDEzMTMyMTQxWjAN
+BgkqhkiG9w0BAQUFAAOCAQEAEWd9kKEfaurOXDV98OVtU27TmK4L4MeGEPdkg1i+
+fbPMe1mouWlVm23W6yaM7mM2NMXLW+hTNzqfyMPM7rByXNaFAAniCPTXNO3eJRIA
+Zf0F10OSdBQ/ln4igHQCVZCnXR30/aP5/PMb4u3/LTuC9aW6K7mLXcuCvJztGnXO
+v3r64q/qTGG/b4eS65exykV9riSFuGp1rzLAy5fSYTBWTOBQ679PFjQnL60GkrZA
+Egtxw2ozEDwo+X0WamEouxN8mjX/VQlMdEbykUFDuPD3vZydZ04BV9f18RJZOU9j
+gCwMzd9gb4jUL4ykdWiLmO+YPDWFyNSYEIfnGgk1VvPHuaCCBL4wggS6MIIEtjCC
+Ap6gAwIBAgIDCpvzMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jvb3QgQ0Ex
+HjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZQ0EgQ2Vy
+dCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9ydEBjYWNl
+cnQub3JnMB4XDTExMDgyMzAwMDI1NloXDTEzMDgyMjAwMDI1NlowfDELMAkGA1UE
+BhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UEBxMGU3lkbmV5MRQwEgYDVQQKEwtD
+QWNlcnQgSW5jLjEeMBwGA1UECxMVU2VydmVyIEFkbWluaXN0cmF0aW9uMRgwFgYD
+VQQDEw9vY3NwLmNhY2VydC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCcxtRv5CPHw3BLdR/k/K72YsRgodbP+UdAONmvBvWzhwm6B8h6O+M64sFr
+2w6be7SYBECIyOQgNJ1flK4MoAWhdBA/H5NtxaDOKbAqA27tO9GaevcPp7c518O0
+3hVnlPLvsN1f48nY0jQOXUTfv5nYXmD0OSSK/V3IRo0KsWB6T9UnMGCeEwb4Oqqz
+uzM0b4SBflzMEony/m6Tg/qL7qs2TLZAqe77+BZaVdFkDUnaBN7RyMruXySxeXiz
+mogT3WhROeloMa/X+E01bWBYBEK7VZIY9pgBpXQ7vDbbIGgYuIXUi20wh03WMy16
+VDYdV0IUXHpidNUeK9W/BPP/7APBAgMBAAGjRDBCMAwGA1UdEwEB/wQCMAAwJwYD
+VR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMBBggrBgEFBQcDCTAJBgNVHREEAjAA
+MA0GCSqGSIb3DQEBBQUAA4ICAQAoT6p5f3cGprAcgrnzdenfTmDe9LCW7k2VnazA
+MAzpsD6gXcSlo4+3hoHem/SpKRH2tqi34DmImCiv/S6fxsKM4Gfn5rlkAFviuTvS
+r5Zrwh4ZKSfaoWv4bmbzmcAxvuxdMWHf/5PbjegjzFTbBMekVPZY/abYtD6kdHQZ
+VNgzwZVfTBfYhfa+Rg72I2zjKpMsjxMqWfTmUzW6wfK6LFudZqu0U1NnJw+IlnVU
+6WtjL885ebQrmcRqWz3nMhVLIu5L3w/s+VTLvm7If6jcMDNUjz8s2BPcJeCXg3TE
+STsyl6tvk17RRz2+9JskxVOk11xIn96xR4FCERIid2ek9z1xi7oYOajQF50i/9Gj
+ReDEfRSyb4/LzoKDOY+h4Q6jryeHh7WIHFiK5qrBN2y8qOoRJ/OqQnqci/BJBNpe
+g9Q9PJRgGSzRndTXNHiYRbeLpq7eGo3sPqlR9qBQ3rd98XGOU0RCMnzjKhENC3qo
+5PkSF2xs8RmjWktFSTDwjYo0qf1teo7CGHjgaPjQ7JE8Q4ysFOQndSWmLpqwDcI9
+HfIvPwUIWArQrJRh9LCNSyvHVgLqY9kw8NW4TlMxV2WqaYCkiKi3XVRrSFR3ahS1
+VBvRZ8KpplrV7rhXjVSSqqfLk1sX3l72Ck2F9ON+qbNFmvhgNjSiBY9neMgo804a
+wG/pag==
diff --git a/test/ocsp-tests/WRID_ND1.ors b/test/ocsp-tests/WRID_ND1.ors
new file mode 100644
index 000000000000..b6fadc5e9cca
--- /dev/null
+++ b/test/ocsp-tests/WRID_ND1.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBSJRFH/UCpp
+Xi2I9CG62QzyzsvqfBgPMjAxMjEwMTEwODQxMTNaMHMwcTBJMAkGBSsOAwIaBQAE
+FEi2DTgjjfhFbk7lhD6jlBEYApefBBSIRFH/UCppXi2I9CG62QzyzsvqfAIQIuEz
+IiCgSN8psr+aMcKbB4AAGA8yMDEyMTAxMTA4NDExM1qgERgPMjAxMjEwMTUwODQx
+MTNaMA0GCSqGSIb3DQEBBQUAA4IBAQCNnhlBMxxh9z5AKfzAxiKs90CfxUsqfYfk
+8XlyF9VIfWRfEwzS6MF1pEzLnghRxTAmjrFgK+sxD9wk+S5Mdgw3nbED9DVFH2Hs
+RGKm/t9wkvrYOX6yRQqw6uRvU/5cibMjcyzKB/VQMwk4p4FwSUgBv88A5sTkKr2V
+eYdEm34hg2TZVkipPMBiyTyBLXs8D/9oALtnczg4xlTRSjDUvqoXL5haqY4QK2Pv
+mNwna6ACkwLmSuMe29UQ8IX2PUB4R5Etni5czyiKGxZLm+4NAhuEwWFNEzCyImPc
+087gHGU1zx+qVSlajqMJ/9ZXYjbt7WiWdhOTGEv4VMn8dHhRUs32
diff --git a/test/ocsp-tests/WRID_ND2.ors b/test/ocsp-tests/WRID_ND2.ors
new file mode 100644
index 000000000000..251f0df7cb75
--- /dev/null
+++ b/test/ocsp-tests/WRID_ND2.ors
@@ -0,0 +1,10 @@
+MIIB0woBAKCCAcwwggHIBgkrBgEFBQcwAQEEggG5MIIBtTCBnqIWBBQMWOWLxkwV
+N6RAqTCpIb5HNlpW/xgPMjAxMjEwMTAyMzAzMTlaMHMwcTBJMAkGBSsOAwIaBQAE
+FOy+ZAvtiWulchtVZmfKU1ZI9ewTBBQLWOWLxkwVN6RAqTCpIb5HNlpW/wIQEaO0
+0OyNt3+doM1dLVEvQoAAGA8yMDEyMTAxMDIzMDMxOVqgERgPMjAxMjEwMTQyMzAz
+MTlaMA0GCSqGSIb3DQEBBQUAA4IBAQCHn2nGfEUX/EJruMkTgh7GgB0u9cpAepaD
+sPv9gtl3KLUZyR+NbGMIa5/bpoJp0yg1z5VL6CLMusy3AF6Cn2fyaioDxG+yc+gA
+PcPFdEqiIMr+TP8s7qcEiE6WZddSSCqCn90VZSCWkpDhnCjDRwJLBBPU3803fdMz
+oguvyr7y6Koxik8X/iUe8EpSzAvmm4GZL3veTI+x7IezJSrhCS9zM0ZHjySjoDxC
++ljGH0EuWPTmFEqZVGIq3cuahIYzKItUbYnXU6ipi/2p42qbsFeok7eEN0EYsY1a
+vRATHGRmU7Q5HLCq4rQtZC1cis52Mvc9x1W4z/Gt5A3FtgElXXNA
diff --git a/test/ocsp-tests/WRID_ND3.ors b/test/ocsp-tests/WRID_ND3.ors
new file mode 100644
index 000000000000..19641f533461
--- /dev/null
+++ b/test/ocsp-tests/WRID_ND3.ors
@@ -0,0 +1,10 @@
+MIIB1AoBAKCCAc0wggHJBgkrBgEFBQcwAQEEggG6MIIBtjCBn6IWBBSuvZh6NLQm
+9/rEJlTvA73gJMtUGhgPMjAxMjEwMTAxMzA3NDZaMHQwcjBKMAkGBSsOAwIaBQAE
+FHyxZlScq9tE7mImFq30ZXv3etWUBBStvZh6NLQm9/rEJlTvA73gJMtUGgIRAKcN
+bJWejX5BTb8DmevkCauAABgPMjAxMjEwMTAxMzA3NDZaoBEYDzIwMTIxMDE0MTMw
+NzQ2WjANBgkqhkiG9w0BAQUFAAOCAQEAA70+GYJoFuUBwIN9KHMqmOOtnmoLBBlm
+HL2Su70ZEqSmL4zTt3iHY3m2YaNYSPphgDlQ4lY8zGAkCSrZ3ulpJun3RRy+gD29
+0ks155tChMbYNZrFm46vKWabBjh2p+623daymlcbgizi5Z+P4oJL68VrOqh+DArE
+MpHH16BTGaF+bAjzTRSbS90xUReqwnnEpRBrmcQVo4uKpSkbyrx7iMLqsJ2vGpgh
+xqj1kNPT9g3+gegmdU9QpFV0l9ZV8X/f0uz5nT4I0NL81d/KDHGx2rd+bftLODeL
+ZAWAzFbr5B5EMqPGoh/SQXpcuVOqMHjh8fi8PBXBcitlIFzdDKXDvA==
diff --git a/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem b/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem
new file mode 100644
index 000000000000..3f1c05377362
--- /dev/null
+++ b/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEhjCCA26gAwIBAgILBAAAAAABL07hXdQwDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTEwNDEzMTAwMDAwWhcNMjIwNDEz
+MTAwMDAwWjBZMQswCQYDVQQGEwJVUzEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1z
+YTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBFeHRlbmRlZCBWYWxpZGF0aW9uIENBIC0g
+RzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNoUbMUpq4pbR/WNnN
+2EugcgyXW6aIIMO5PUbc0FxSMPb6WU+FX7DbiLSpXysjSKyr9ZJ4FLYyD/tcaoVb
+AJDgu2X1WvlPZ37HbCnsk8ArysRe2LDb1r4/mwvAj6ldrvcAAqT8umYROHf+IyAl
+VRDFvYK5TLFoxuJwe4NcE2fBofN8C6iZmtDimyUxyCuNQPZSY7GgrVou9Xk2bTUs
+Dt0F5NDiB0i3KF4r1VjVbNAMoQFGAVqPxq9kx1UBXeHRxmxQJaAFrQCrDI1la93r
+wnJUyQ88ABeHIu/buYZ4FlGud9mmKE3zWI2DZ7k0JZscUYBR84OSaqOuR5rW5Isb
+wO2xAgMBAAGjggFaMIIBVjAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB
+/wIBADAdBgNVHQ4EFgQUsLBK/Rx1KPgcYaoT9vrBkD1rFqMwRwYDVR0gBEAwPjA8
+BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29t
+L3JlcG9zaXRvcnkvMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs
+c2lnbi5uZXQvcm9vdC1yMi5jcmwwRAYIKwYBBQUHAQEEODA2MDQGCCsGAQUFBzAB
+hihodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9FeHRlbmRlZFNTTENBMCkGA1Ud
+JQQiMCAGCCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAzAfBgNVHSMEGDAW
+gBSb4gdXZxwewGoG3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAL0m28rZa
+pJWrnlrpK4KbzJBrfHRFIOde2Mcj7ig1sTVlKqVR4FU/9oNntOQ2KbDa7JeVqYoF
+o0X+Iy5SiLQfEICt0oufo1+oxetz3nmIQZgz7qdgGLFGyUAQB5yPClLJExoGbqCb
+LTr2rk/no1E1KlsYBRLlUdy2NmLz4aQP++TPw5S/EauhWTEB8MxT7I9j12yW00gq
+iiPtRVaoZkHqAblH7qFHDBTxI+Egc8p9UHxkOFejj0qcm+ltRc9Ea01gIEBxJbVG
+qmwIft/I+shWKpLLg7h5CZctXqEBzgbttJfJBNxB7+BPNk3kQHNG7BESfIhbNCYl
+TercGL7FG81kwA==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem b/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem
new file mode 100644
index 000000000000..af1b8b02a922
--- /dev/null
+++ b/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
+A1UEBhMCVVMxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAlVTMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
+AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
+yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
+38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
+AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
+DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
+HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem b/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem
new file mode 100644
index 000000000000..764797a27772
--- /dev/null
+++ b/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem
@@ -0,0 +1,41 @@
+-----BEGIN CERTIFICATE-----
+MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdUZXN0
+IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
+IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
+Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
+BgNVBAoTB1Rlc3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
+MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
+ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
+8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
+zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
+fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
+w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
+G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
+epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
+laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
+QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
+fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
+YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
+ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
+gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
+MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
+IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
+dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
+czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
+dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
+aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
+AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
+b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
+ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
+nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
+18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
+gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
+Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
+sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
+SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
+CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
+GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
+zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
+omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem b/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem
new file mode 100644
index 000000000000..06b69087298a
--- /dev/null
+++ b/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIFBjCCA+6gAwIBAgIQEaO00OyNt3+doM1dLVEvQjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMDA1MjQwMDAw
+MDBaFw0yMDA1MzAxMDQ4MzhaMIGOMQswCQYDVQQGEwJVUzEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDE0MDIGA1UEAxMrQ09NT0RPIEV4dGVuZGVkIFZhbGlkYXRp
+b24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMxKljPNJY1n7iiWN4dG8PYEooR/U6qW5h+xAhxu7X0h1Nc8HqLYaS+ot/Wi
+7WRYZOFEZTZJQSABjTsT4gjzDPJXOZM3txyTRIOOvy3xoQV12m7ue28b6naDKHRK
+HCvT9cQDcpOvhs4JjDx11MkKL3Lzrb0OMDyEoXMfAyUUpY/D1vS15N2GevUZumjy
+hVSiMBHK0ZLLO3QGEqA3q2rYVBHfbJoWlLm0p2XGdC0x801S6VVRn8s+oo12mHDS
+b6ZlRS8bhbtbbfnywARmE4R6nc4n2PREnr+svpnba0/bWCGwiSe0jzLWS15ykV7f
+BZ3ZSS/0tm9QH3XLgJ3m0+TR8tMCAwEAAaOCAWkwggFlMB8GA1UdIwQYMBaAFAtY
+5YvGTBU3pECpMKkhvkc2Wlb/MB0GA1UdDgQWBBSIRFH/UCppXi2I9CG62Qzyzsvq
+fDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADA+BgNVHSAENzA1
+MDMGBFUdIAAwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNv
+bS9DUFMwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5jb21vZG9jYS5jb20v
+Q09NT0RPQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwdAYIKwYBBQUHAQEEaDBm
+MD4GCCsGAQUFBzAChjJodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9DT01PRE9BZGRU
+cnVzdFNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2Rv
+Y2EuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCaQ7+vpHJezX1vf/T8PYy7cOYe3QT9
+P9ydn7+JdpvyhjH8f7PtKpFTLOKqsOPILHH3FYojHPFpLoH7sbxiC6saVBzZIl40
+TKX2Iw9dej3bQ81pfhc3Us1TocIR1FN4J2TViUFNFlW7kMvw2OTd3dMJZEgo/zIj
+hC+Me1UvzymINzR4DzOq/7fylqSbRIC1vmxWVKukgZ4lGChUOn8sY89ZIIwYazgs
+tN3t40DeDDYlV5rA0WCeXgNol64aO+pF11GZSe5EWVYLXrGPaOqKnsrSyaADfnAl
+9DLJTlCDh6I0SD1PNXf82Ijq9n0ezkO21cJqfjhmY03n7jLvDyToKmf6
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem b/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem
new file mode 100644
index 000000000000..1b46fcfb6e7d
--- /dev/null
+++ b/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0DCCArigAwIBAgIQIKTEf93f4cdTYwcTiHdgEjANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMTAxMDEwMDAw
+MDBaFw0zMDEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJVUzEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
+UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
+2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
+Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
+nKVIrLsm9wIDAQABo0IwQDAdBgNVHQ4EFgQUC1jli8ZMFTekQKkwqSG+RzZaVv8w
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBAC/JxBwHO89hAgCx2SFRdXIDMLDEFh9sAIsQrK/xR9SuEDwMGvjUk2ysEDd8
+t6aDZK3N3w6HM503sMZ7OHKx8xoOo/lVem0DZgMXlUrxsXrfViEGQo+x06iF3u6X
+HWLrp+cxEmbDD6ZLLkGC9/3JG6gbr+48zuOcrigHoSybJMIPIyaDMouGDx8rEkYl
+Fo92kANr3ryqImhrjKGsKxE5pttwwn1y6TPn/CbxdFqR5p2ErPioBhlG5qfpqjQi
+pKGfeq23sqSaM4hxAjwu1nqyH6LKwN0vEJT9s4yEIHlG1QXUEOTS22RPuFvuG8Ug
+R1uUq27UlTMdphVx8fiUylQ5PsE=
+-----END CERTIFICATE-----
diff --git a/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem b/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem
new file mode 100644
index 000000000000..4d1f45479c7f
--- /dev/null
+++ b/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCVVMx
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
diff --git a/test/ocspapitest.c b/test/ocspapitest.c
new file mode 100644
index 000000000000..97a56e777b10
--- /dev/null
+++ b/test/ocspapitest.c
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2017-2022 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/opensslconf.h>
+#include <openssl/crypto.h>
+#include <openssl/ocsp.h>
+#include <openssl/x509.h>
+#include <openssl/asn1.h>
+#include <openssl/pem.h>
+
+#include "testutil.h"
+
+static const char *certstr;
+static const char *privkeystr;
+
+#ifndef OPENSSL_NO_OCSP
+static int get_cert_and_key(X509 **cert_out, EVP_PKEY **key_out)
+{
+ BIO *certbio, *keybio;
+ X509 *cert = NULL;
+ EVP_PKEY *key = NULL;
+
+ if (!TEST_ptr(certbio = BIO_new_file(certstr, "r")))
+ return 0;
+ cert = PEM_read_bio_X509(certbio, NULL, NULL, NULL);
+ BIO_free(certbio);
+ if (!TEST_ptr(keybio = BIO_new_file(privkeystr, "r")))
+ goto end;
+ key = PEM_read_bio_PrivateKey(keybio, NULL, NULL, NULL);
+ BIO_free(keybio);
+ if (!TEST_ptr(cert) || !TEST_ptr(key))
+ goto end;
+ *cert_out = cert;
+ *key_out = key;
+ return 1;
+ end:
+ X509_free(cert);
+ EVP_PKEY_free(key);
+ return 0;
+}
+
+static int get_cert(X509 **cert_out)
+{
+ BIO *certbio;
+ X509 *cert = NULL;
+
+ if (!TEST_ptr(certbio = BIO_new_file(certstr, "r")))
+ return 0;
+ cert = PEM_read_bio_X509(certbio, NULL, NULL, NULL);
+ BIO_free(certbio);
+ if (!TEST_ptr(cert))
+ goto end;
+ *cert_out = cert;
+ return 1;
+ end:
+ X509_free(cert);
+ return 0;
+}
+
+static OCSP_BASICRESP *make_dummy_resp(void)
+{
+ const unsigned char namestr[] = "openssl.example.com";
+ unsigned char keybytes[128] = {7};
+ OCSP_BASICRESP *bs = OCSP_BASICRESP_new();
+ OCSP_BASICRESP *bs_out = NULL;
+ OCSP_CERTID *cid = NULL;
+ ASN1_TIME *thisupd = ASN1_TIME_set(NULL, time(NULL));
+ ASN1_TIME *nextupd = ASN1_TIME_set(NULL, time(NULL) + 200);
+ X509_NAME *name = X509_NAME_new();
+ ASN1_BIT_STRING *key = ASN1_BIT_STRING_new();
+ ASN1_INTEGER *serial = ASN1_INTEGER_new();
+
+ if (!TEST_ptr(name)
+ || !TEST_ptr(key)
+ || !TEST_ptr(serial)
+ || !TEST_true(X509_NAME_add_entry_by_NID(name, NID_commonName,
+ MBSTRING_ASC,
+ namestr, -1, -1, 1))
+ || !TEST_true(ASN1_BIT_STRING_set(key, keybytes, sizeof(keybytes)))
+ || !TEST_true(ASN1_INTEGER_set_uint64(serial, (uint64_t)1)))
+ goto err;
+ cid = OCSP_cert_id_new(EVP_sha256(), name, key, serial);
+ if (!TEST_ptr(bs)
+ || !TEST_ptr(thisupd)
+ || !TEST_ptr(nextupd)
+ || !TEST_ptr(cid)
+ || !TEST_true(OCSP_basic_add1_status(bs, cid,
+ V_OCSP_CERTSTATUS_UNKNOWN,
+ 0, NULL, thisupd, nextupd)))
+ goto err;
+ bs_out = bs;
+ bs = NULL;
+ err:
+ ASN1_TIME_free(thisupd);
+ ASN1_TIME_free(nextupd);
+ ASN1_BIT_STRING_free(key);
+ ASN1_INTEGER_free(serial);
+ OCSP_CERTID_free(cid);
+ OCSP_BASICRESP_free(bs);
+ X509_NAME_free(name);
+ return bs_out;
+}
+
+static int test_resp_signer(void)
+{
+ OCSP_BASICRESP *bs = NULL;
+ X509 *signer = NULL, *tmp;
+ EVP_PKEY *key = NULL;
+ STACK_OF(X509) *extra_certs = NULL;
+ int ret = 0;
+
+ /*
+ * Test a response with no certs at all; get the signer from the
+ * extra certs given to OCSP_resp_get0_signer().
+ */
+ bs = make_dummy_resp();
+ extra_certs = sk_X509_new_null();
+ if (!TEST_ptr(bs)
+ || !TEST_ptr(extra_certs)
+ || !TEST_true(get_cert_and_key(&signer, &key))
+ || !TEST_true(sk_X509_push(extra_certs, signer))
+ || !TEST_true(OCSP_basic_sign(bs, signer, key, EVP_sha1(),
+ NULL, OCSP_NOCERTS)))
+ goto err;
+ if (!TEST_true(OCSP_resp_get0_signer(bs, &tmp, extra_certs))
+ || !TEST_int_eq(X509_cmp(tmp, signer), 0))
+ goto err;
+ OCSP_BASICRESP_free(bs);
+
+ /* Do it again but include the signer cert */
+ bs = make_dummy_resp();
+ tmp = NULL;
+ if (!TEST_ptr(bs)
+ || !TEST_true(OCSP_basic_sign(bs, signer, key, EVP_sha1(),
+ NULL, 0)))
+ goto err;
+ if (!TEST_true(OCSP_resp_get0_signer(bs, &tmp, NULL))
+ || !TEST_int_eq(X509_cmp(tmp, signer), 0))
+ goto err;
+ ret = 1;
+ err:
+ OCSP_BASICRESP_free(bs);
+ sk_X509_free(extra_certs);
+ X509_free(signer);
+ EVP_PKEY_free(key);
+ return ret;
+}
+
+static int test_access_description(int testcase)
+{
+ ACCESS_DESCRIPTION *ad = ACCESS_DESCRIPTION_new();
+ int ret = 0;
+
+ if (!TEST_ptr(ad))
+ goto err;
+
+ switch (testcase) {
+ case 0: /* no change */
+ break;
+ case 1: /* check and release current location */
+ if (!TEST_ptr(ad->location))
+ goto err;
+ GENERAL_NAME_free(ad->location);
+ ad->location = NULL;
+ break;
+ case 2: /* replace current location */
+ GENERAL_NAME_free(ad->location);
+ ad->location = GENERAL_NAME_new();
+ if (!TEST_ptr(ad->location))
+ goto err;
+ break;
+ }
+ ACCESS_DESCRIPTION_free(ad);
+ ret = 1;
+err:
+ return ret;
+}
+
+static int test_ocsp_url_svcloc_new(void)
+{
+ static const char *urls[] = {
+ "www.openssl.org",
+ "www.openssl.net",
+ NULL
+ };
+
+ X509 *issuer = NULL;
+ X509_EXTENSION * ext = NULL;
+ int ret = 0;
+
+ if (!TEST_true(get_cert(&issuer)))
+ goto err;
+
+ /*
+ * Test calling this ocsp method to catch any memory leak
+ */
+ ext = OCSP_url_svcloc_new(X509_get_issuer_name(issuer), urls);
+ if (!TEST_ptr(ext))
+ goto err;
+
+ X509_EXTENSION_free(ext);
+ ret = 1;
+err:
+ X509_free(issuer);
+ return ret;
+}
+
+#endif /* OPENSSL_NO_OCSP */
+
+OPT_TEST_DECLARE_USAGE("certfile privkeyfile\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(certstr = test_get_argument(0))
+ || !TEST_ptr(privkeystr = test_get_argument(1)))
+ return 0;
+#ifndef OPENSSL_NO_OCSP
+ ADD_TEST(test_resp_signer);
+ ADD_ALL_TESTS(test_access_description, 3);
+ ADD_TEST(test_ocsp_url_svcloc_new);
+#endif
+ return 1;
+}
diff --git a/test/ossl_store_test.c b/test/ossl_store_test.c
new file mode 100644
index 000000000000..b45d1d548f23
--- /dev/null
+++ b/test/ossl_store_test.c
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <limits.h>
+#include <openssl/store.h>
+#include <openssl/ui.h>
+#include "testutil.h"
+
+#ifndef PATH_MAX
+# if defined(_WIN32) && defined(_MAX_PATH)
+# define PATH_MAX _MAX_PATH
+# else
+# define PATH_MAX 4096
+# endif
+#endif
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_INPUTDIR,
+ OPT_INFILE,
+ OPT_SM2FILE,
+ OPT_DATADIR,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+static const char *inputdir = NULL;
+static const char *infile = NULL;
+static const char *sm2file = NULL;
+static const char *datadir = NULL;
+
+static int test_store_open(void)
+{
+ int ret = 0;
+ OSSL_STORE_CTX *sctx = NULL;
+ OSSL_STORE_SEARCH *search = NULL;
+ UI_METHOD *ui_method = NULL;
+ char *input = test_mk_file_path(inputdir, infile);
+
+ ret = TEST_ptr(input)
+ && TEST_ptr(search = OSSL_STORE_SEARCH_by_alias("nothing"))
+ && TEST_ptr(ui_method= UI_create_method("DummyUI"))
+ && TEST_ptr(sctx = OSSL_STORE_open_ex(input, NULL, NULL, ui_method,
+ NULL, NULL, NULL, NULL))
+ && TEST_false(OSSL_STORE_find(sctx, NULL))
+ && TEST_true(OSSL_STORE_find(sctx, search));
+ UI_destroy_method(ui_method);
+ OSSL_STORE_SEARCH_free(search);
+ OSSL_STORE_close(sctx);
+ OPENSSL_free(input);
+ return ret;
+}
+
+static int test_store_search_by_key_fingerprint_fail(void)
+{
+ int ret;
+ OSSL_STORE_SEARCH *search = NULL;
+
+ ret = TEST_ptr_null(search = OSSL_STORE_SEARCH_by_key_fingerprint(
+ EVP_sha256(), NULL, 0));
+ OSSL_STORE_SEARCH_free(search);
+ return ret;
+}
+
+static int get_params(const char *uri, const char *type)
+{
+ EVP_PKEY *pkey = NULL;
+ OSSL_STORE_CTX *ctx = NULL;
+ OSSL_STORE_INFO *info;
+ int ret = 0;
+
+ ctx = OSSL_STORE_open_ex(uri, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ while (!OSSL_STORE_eof(ctx)
+ && (info = OSSL_STORE_load(ctx)) != NULL
+ && pkey == NULL) {
+ if (OSSL_STORE_INFO_get_type(info) == OSSL_STORE_INFO_PARAMS) {
+ pkey = OSSL_STORE_INFO_get1_PARAMS(info);
+ }
+ OSSL_STORE_INFO_free(info);
+ info = NULL;
+ }
+
+ if (pkey != NULL)
+ ret = EVP_PKEY_is_a(pkey, type);
+ EVP_PKEY_free(pkey);
+
+ err:
+ OSSL_STORE_close(ctx);
+ return ret;
+}
+
+static int test_store_get_params(int idx)
+{
+ const char *type;
+ const char *urifmt;
+ char uri[PATH_MAX];
+
+ switch(idx) {
+#ifndef OPENSSL_NO_DH
+ case 0:
+ type = "DH";
+ break;
+ case 1:
+ type = "DHX";
+ break;
+#else
+ case 0:
+ case 1:
+ return 1;
+#endif
+ case 2:
+#ifndef OPENSSL_NO_DSA
+ type = "DSA";
+ break;
+#else
+ return 1;
+#endif
+ default:
+ TEST_error("Invalid test index");
+ return 0;
+ }
+
+ urifmt = "%s/%s-params.pem";
+#ifdef __VMS
+ {
+ char datadir_end = datadir[strlen(datadir) - 1];
+
+ if (datadir_end == ':' || datadir_end == ']' || datadir_end == '>')
+ urifmt = "%s%s-params.pem";
+ }
+#endif
+ if (!TEST_true(BIO_snprintf(uri, sizeof(uri), urifmt, datadir, type)))
+ return 0;
+
+ TEST_info("Testing uri: %s", uri);
+ if (!TEST_true(get_params(uri, type)))
+ return 0;
+
+ return 1;
+}
+
+/*
+ * This test verifies that calling OSSL_STORE_ATTACH does not set an
+ * "unregistered scheme" error when called.
+ */
+static int test_store_attach_unregistered_scheme(void)
+{
+ int ret;
+ OSSL_STORE_CTX *store_ctx = NULL;
+ OSSL_PROVIDER *provider = NULL;
+ OSSL_LIB_CTX *libctx = NULL;
+ BIO *bio = NULL;
+ char *input = test_mk_file_path(inputdir, sm2file);
+
+ ret = TEST_ptr(input)
+ && TEST_ptr(libctx = OSSL_LIB_CTX_new())
+ && TEST_ptr(provider = OSSL_PROVIDER_load(libctx, "default"))
+ && TEST_ptr(bio = BIO_new_file(input, "r"))
+ && TEST_ptr(store_ctx = OSSL_STORE_attach(bio, "file", libctx, NULL,
+ NULL, NULL, NULL, NULL, NULL))
+ && TEST_int_ne(ERR_GET_LIB(ERR_peek_error()), ERR_LIB_OSSL_STORE)
+ && TEST_int_ne(ERR_GET_REASON(ERR_peek_error()),
+ OSSL_STORE_R_UNREGISTERED_SCHEME);
+
+ BIO_free(bio);
+ OSSL_STORE_close(store_ctx);
+ OSSL_PROVIDER_unload(provider);
+ OSSL_LIB_CTX_free(libctx);
+ OPENSSL_free(input);
+ return ret;
+}
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "dir", OPT_INPUTDIR, '/' },
+ { "in", OPT_INFILE, '<' },
+ { "sm2", OPT_SM2FILE, '<' },
+ { "data", OPT_DATADIR, 's' },
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_INPUTDIR:
+ inputdir = opt_arg();
+ break;
+ case OPT_INFILE:
+ infile = opt_arg();
+ break;
+ case OPT_SM2FILE:
+ sm2file = opt_arg();
+ break;
+ case OPT_DATADIR:
+ datadir = opt_arg();
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+
+ if (datadir == NULL) {
+ TEST_error("No data directory specified");
+ return 0;
+ }
+ if (inputdir == NULL) {
+ TEST_error("No input directory specified");
+ return 0;
+ }
+
+ if (infile != NULL)
+ ADD_TEST(test_store_open);
+ ADD_TEST(test_store_search_by_key_fingerprint_fail);
+ ADD_ALL_TESTS(test_store_get_params, 3);
+ if (sm2file != NULL)
+ ADD_TEST(test_store_attach_unregistered_scheme);
+ return 1;
+}
diff --git a/test/p_minimal.c b/test/p_minimal.c
new file mode 100644
index 000000000000..0bff9823f824
--- /dev/null
+++ b/test/p_minimal.c
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-2023 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
+ */
+
+/*
+ * This is the most minimal provider imaginable. It can be loaded, and does
+ * absolutely nothing else.
+ */
+
+#include <openssl/core.h>
+
+OSSL_provider_init_fn OSSL_provider_init; /* Check the function signature */
+int OSSL_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *oin,
+ const OSSL_DISPATCH **out,
+ void **provctx)
+{
+ return 1;
+}
diff --git a/test/p_test.c b/test/p_test.c
new file mode 100644
index 000000000000..80f0784dd9d5
--- /dev/null
+++ b/test/p_test.c
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * This is a very simple provider that does absolutely nothing except respond
+ * to provider global parameter requests. It does this by simply echoing back
+ * a parameter request it makes to the loading library.
+ */
+
+#include <string.h>
+#include <stdio.h>
+
+/*
+ * When built as an object file to link the application with, we get the
+ * init function name through the macro PROVIDER_INIT_FUNCTION_NAME. If
+ * not defined, we use the standard init function name for the shared
+ * object form.
+ */
+#ifdef PROVIDER_INIT_FUNCTION_NAME
+# define OSSL_provider_init PROVIDER_INIT_FUNCTION_NAME
+#endif
+
+#include "e_os.h"
+#include <openssl/core.h>
+#include <openssl/core_dispatch.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/crypto.h>
+#include <openssl/provider.h>
+
+typedef struct p_test_ctx {
+ char *thisfile;
+ char *thisfunc;
+ const OSSL_CORE_HANDLE *handle;
+ OSSL_LIB_CTX *libctx;
+} P_TEST_CTX;
+
+static OSSL_FUNC_core_gettable_params_fn *c_gettable_params = NULL;
+static OSSL_FUNC_core_get_params_fn *c_get_params = NULL;
+static OSSL_FUNC_core_new_error_fn *c_new_error;
+static OSSL_FUNC_core_set_error_debug_fn *c_set_error_debug;
+static OSSL_FUNC_core_vset_error_fn *c_vset_error;
+
+/* Tell the core what params we provide and what type they are */
+static const OSSL_PARAM p_param_types[] = {
+ { "greeting", OSSL_PARAM_UTF8_STRING, NULL, 0, 0 },
+ { "digest-check", OSSL_PARAM_UNSIGNED_INTEGER, NULL, 0, 0},
+ { NULL, 0, NULL, 0, 0 }
+};
+
+/* This is a trick to ensure we define the provider functions correctly */
+static OSSL_FUNC_provider_gettable_params_fn p_gettable_params;
+static OSSL_FUNC_provider_get_params_fn p_get_params;
+static OSSL_FUNC_provider_get_reason_strings_fn p_get_reason_strings;
+static OSSL_FUNC_provider_teardown_fn p_teardown;
+
+static void p_set_error(int lib, int reason, const char *file, int line,
+ const char *func, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ c_new_error(NULL);
+ c_set_error_debug(NULL, file, line, func);
+ c_vset_error(NULL, ERR_PACK(lib, 0, reason), fmt, ap);
+ va_end(ap);
+}
+
+static const OSSL_PARAM *p_gettable_params(void *_)
+{
+ return p_param_types;
+}
+
+static int p_get_params(void *provctx, OSSL_PARAM params[])
+{
+ P_TEST_CTX *ctx = (P_TEST_CTX *)provctx;
+ const OSSL_CORE_HANDLE *hand = ctx->handle;
+ OSSL_PARAM *p = params;
+ int ok = 1;
+
+ for (; ok && p->key != NULL; p++) {
+ if (strcmp(p->key, "greeting") == 0) {
+ static char *opensslv;
+ static char *provname;
+ static char *greeting;
+ static OSSL_PARAM counter_request[] = {
+ /* Known libcrypto provided parameters */
+ { "openssl-version", OSSL_PARAM_UTF8_PTR,
+ &opensslv, sizeof(&opensslv), 0 },
+ { "provider-name", OSSL_PARAM_UTF8_PTR,
+ &provname, sizeof(&provname), 0},
+
+ /* This might be present, if there's such a configuration */
+ { "greeting", OSSL_PARAM_UTF8_PTR,
+ &greeting, sizeof(&greeting), 0 },
+
+ { NULL, 0, NULL, 0, 0 }
+ };
+ char buf[256];
+ size_t buf_l;
+
+ opensslv = provname = greeting = NULL;
+
+ if (c_get_params(hand, counter_request)) {
+ if (greeting) {
+ strcpy(buf, greeting);
+ } else {
+ const char *versionp = *(void **)counter_request[0].data;
+ const char *namep = *(void **)counter_request[1].data;
+
+ sprintf(buf, "Hello OpenSSL %.20s, greetings from %s!",
+ versionp, namep);
+ }
+ } else {
+ sprintf(buf, "Howdy stranger...");
+ }
+
+ p->return_size = buf_l = strlen(buf) + 1;
+ if (p->data_size >= buf_l)
+ strcpy(p->data, buf);
+ else
+ ok = 0;
+ } else if (strcmp(p->key, "digest-check") == 0) {
+ unsigned int digestsuccess = 0;
+
+ /*
+ * Test we can use an algorithm from another provider. We're using
+ * legacy to check that legacy is actually available and we haven't
+ * just fallen back to default.
+ */
+#ifdef PROVIDER_INIT_FUNCTION_NAME
+ EVP_MD *md4 = EVP_MD_fetch(ctx->libctx, "MD4", NULL);
+ EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
+ const char *msg = "Hello world";
+ unsigned char out[16];
+ OSSL_PROVIDER *deflt;
+
+ /*
+ * "default" has not been loaded into the parent libctx. We should be able
+ * to explicitly load it as a non-child provider.
+ */
+ deflt = OSSL_PROVIDER_load(ctx->libctx, "default");
+ if (deflt == NULL
+ || !OSSL_PROVIDER_available(ctx->libctx, "default")) {
+ /* We set error "3" for a failure to load the default provider */
+ p_set_error(ERR_LIB_PROV, 3, ctx->thisfile, OPENSSL_LINE,
+ ctx->thisfunc, NULL);
+ ok = 0;
+ }
+
+ /*
+ * We should have the default provider available that we loaded
+ * ourselves, and the base and legacy providers which we inherit
+ * from the parent libctx. We should also have "this" provider
+ * available.
+ */
+ if (ok
+ && OSSL_PROVIDER_available(ctx->libctx, "default")
+ && OSSL_PROVIDER_available(ctx->libctx, "base")
+ && OSSL_PROVIDER_available(ctx->libctx, "legacy")
+ && OSSL_PROVIDER_available(ctx->libctx, "p_test")
+ && md4 != NULL
+ && mdctx != NULL) {
+ if (EVP_DigestInit_ex(mdctx, md4, NULL)
+ && EVP_DigestUpdate(mdctx, (const unsigned char *)msg,
+ strlen(msg))
+ && EVP_DigestFinal(mdctx, out, NULL))
+ digestsuccess = 1;
+ }
+ EVP_MD_CTX_free(mdctx);
+ EVP_MD_free(md4);
+ OSSL_PROVIDER_unload(deflt);
+#endif
+ if (p->data_size >= sizeof(digestsuccess)) {
+ *(unsigned int *)p->data = digestsuccess;
+ p->return_size = sizeof(digestsuccess);
+ } else {
+ ok = 0;
+ }
+ } else if (strcmp(p->key, "stop-property-mirror") == 0) {
+ /*
+ * Setting the default properties explicitly should stop mirroring
+ * of properties from the parent libctx.
+ */
+ unsigned int stopsuccess = 0;
+
+#ifdef PROVIDER_INIT_FUNCTION_NAME
+ stopsuccess = EVP_set_default_properties(ctx->libctx, NULL);
+#endif
+ if (p->data_size >= sizeof(stopsuccess)) {
+ *(unsigned int *)p->data = stopsuccess;
+ p->return_size = sizeof(stopsuccess);
+ } else {
+ ok = 0;
+ }
+ }
+ }
+ return ok;
+}
+
+static const OSSL_ITEM *p_get_reason_strings(void *_)
+{
+ static const OSSL_ITEM reason_strings[] = {
+ {1, "dummy reason string"},
+ {2, "Can't create child library context"},
+ {3, "Can't load default provider"},
+ {0, NULL}
+ };
+
+ return reason_strings;
+}
+
+static const OSSL_DISPATCH p_test_table[] = {
+ { OSSL_FUNC_PROVIDER_GETTABLE_PARAMS, (void (*)(void))p_gettable_params },
+ { OSSL_FUNC_PROVIDER_GET_PARAMS, (void (*)(void))p_get_params },
+ { OSSL_FUNC_PROVIDER_GET_REASON_STRINGS,
+ (void (*)(void))p_get_reason_strings},
+ { OSSL_FUNC_PROVIDER_TEARDOWN, (void (*)(void))p_teardown },
+ { 0, NULL }
+};
+
+int OSSL_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *oin,
+ const OSSL_DISPATCH **out,
+ void **provctx)
+{
+ P_TEST_CTX *ctx;
+ const OSSL_DISPATCH *in = oin;
+
+ for (; in->function_id != 0; in++) {
+ switch (in->function_id) {
+ case OSSL_FUNC_CORE_GETTABLE_PARAMS:
+ c_gettable_params = OSSL_FUNC_core_gettable_params(in);
+ break;
+ case OSSL_FUNC_CORE_GET_PARAMS:
+ c_get_params = OSSL_FUNC_core_get_params(in);
+ break;
+ case OSSL_FUNC_CORE_NEW_ERROR:
+ c_new_error = OSSL_FUNC_core_new_error(in);
+ break;
+ case OSSL_FUNC_CORE_SET_ERROR_DEBUG:
+ c_set_error_debug = OSSL_FUNC_core_set_error_debug(in);
+ break;
+ case OSSL_FUNC_CORE_VSET_ERROR:
+ c_vset_error = OSSL_FUNC_core_vset_error(in);
+ break;
+ default:
+ /* Just ignore anything we don't understand */
+ break;
+ }
+ }
+
+ /*
+ * We want to test that libcrypto doesn't use the file and func pointers
+ * that we provide to it via c_set_error_debug beyond the time that they
+ * are valid for. Therefore we dynamically allocate these strings now and
+ * free them again when the provider is torn down. If anything tries to
+ * use those strings after that point there will be a use-after-free and
+ * asan will complain (and hence the tests will fail).
+ * This file isn't linked against libcrypto, so we use malloc and strdup
+ * instead of OPENSSL_malloc and OPENSSL_strdup
+ */
+ ctx = malloc(sizeof(*ctx));
+ if (ctx == NULL)
+ return 0;
+ ctx->thisfile = strdup(OPENSSL_FILE);
+ ctx->thisfunc = strdup(OPENSSL_FUNC);
+ ctx->handle = handle;
+#ifdef PROVIDER_INIT_FUNCTION_NAME
+ /* We only do this if we are linked with libcrypto */
+ ctx->libctx = OSSL_LIB_CTX_new_child(handle, oin);
+ if (ctx->libctx == NULL) {
+ /* We set error "2" for a failure to create the child libctx*/
+ p_set_error(ERR_LIB_PROV, 2, ctx->thisfile, OPENSSL_LINE, ctx->thisfunc,
+ NULL);
+ p_teardown(ctx);
+ return 0;
+ }
+ /*
+ * The default provider is loaded - but the default properties should not
+ * allow its use.
+ */
+ {
+ EVP_MD *sha256 = EVP_MD_fetch(ctx->libctx, "SHA2-256", NULL);
+ if (sha256 != NULL) {
+ EVP_MD_free(sha256);
+ p_teardown(ctx);
+ return 0;
+ }
+ }
+#endif
+
+ /*
+ * Set a spurious error to check error handling works correctly. This will
+ * be ignored
+ */
+ p_set_error(ERR_LIB_PROV, 1, ctx->thisfile, OPENSSL_LINE, ctx->thisfunc, NULL);
+
+ *provctx = (void *)ctx;
+ *out = p_test_table;
+ return 1;
+}
+
+static void p_teardown(void *provctx)
+{
+ P_TEST_CTX *ctx = (P_TEST_CTX *)provctx;
+
+#ifdef PROVIDER_INIT_FUNCTION_NAME
+ OSSL_LIB_CTX_free(ctx->libctx);
+#endif
+ free(ctx->thisfile);
+ free(ctx->thisfunc);
+ free(ctx);
+}
diff --git a/test/packettest.c b/test/packettest.c
new file mode 100644
index 000000000000..17831d940bff
--- /dev/null
+++ b/test/packettest.c
@@ -0,0 +1,499 @@
+/*
+ * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "internal/packet.h"
+#include "testutil.h"
+
+#define BUF_LEN 255
+
+static unsigned char smbuf[BUF_LEN + 1];
+
+static int test_PACKET_remaining(void)
+{
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 1))
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), 1)
+ || !TEST_true(PACKET_forward(&pkt, 1))
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), 0))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_end(void)
+{
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
+ || !TEST_ptr_eq(PACKET_end(&pkt), smbuf + BUF_LEN)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 1))
+ || !TEST_ptr_eq(PACKET_end(&pkt), smbuf + BUF_LEN)
+ || !TEST_true(PACKET_forward(&pkt, 1))
+ || !TEST_ptr_eq(PACKET_end(&pkt), smbuf + BUF_LEN))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_1(void)
+{
+ unsigned int i = 0;
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_get_1(&pkt, &i))
+ || !TEST_uint_eq(i, 0x02)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 2))
+ || !TEST_true(PACKET_get_1(&pkt, &i))
+ || !TEST_uint_eq(i, 0xfe)
+ || !TEST_false(PACKET_get_1(&pkt, &i)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_4(void)
+{
+ unsigned long i = 0;
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_get_4(&pkt, &i))
+ || !TEST_ulong_eq(i, 0x08060402UL)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
+ || !TEST_true(PACKET_get_4(&pkt, &i))
+ || !TEST_ulong_eq(i, 0xfefcfaf8UL)
+ || !TEST_false(PACKET_get_4(&pkt, &i)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_net_2(void)
+{
+ unsigned int i = 0;
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_get_net_2(&pkt, &i))
+ || !TEST_uint_eq(i, 0x0204)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 4))
+ || !TEST_true(PACKET_get_net_2(&pkt, &i))
+ || !TEST_uint_eq(i, 0xfcfe)
+ || !TEST_false(PACKET_get_net_2(&pkt, &i)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_net_3(void)
+{
+ unsigned long i = 0;
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_get_net_3(&pkt, &i))
+ || !TEST_ulong_eq(i, 0x020406UL)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 6))
+ || !TEST_true(PACKET_get_net_3(&pkt, &i))
+ || !TEST_ulong_eq(i, 0xfafcfeUL)
+ || !TEST_false(PACKET_get_net_3(&pkt, &i)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_net_4(void)
+{
+ unsigned long i = 0;
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_get_net_4(&pkt, &i))
+ || !TEST_ulong_eq(i, 0x02040608UL)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
+ || !TEST_true(PACKET_get_net_4(&pkt, &i))
+ || !TEST_ulong_eq(i, 0xf8fafcfeUL)
+ || !TEST_false(PACKET_get_net_4(&pkt, &i)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_sub_packet(void)
+{
+ PACKET pkt, subpkt;
+ unsigned long i = 0;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_get_sub_packet(&pkt, &subpkt, 4))
+ || !TEST_true(PACKET_get_net_4(&subpkt, &i))
+ || !TEST_ulong_eq(i, 0x02040608UL)
+ || !TEST_size_t_eq(PACKET_remaining(&subpkt), 0)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
+ || !TEST_true(PACKET_get_sub_packet(&pkt, &subpkt, 4))
+ || !TEST_true(PACKET_get_net_4(&subpkt, &i))
+ || !TEST_ulong_eq(i, 0xf8fafcfeUL)
+ || !TEST_size_t_eq(PACKET_remaining(&subpkt), 0)
+ || !TEST_false(PACKET_get_sub_packet(&pkt, &subpkt, 4)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_bytes(void)
+{
+ const unsigned char *bytes = NULL;
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_get_bytes(&pkt, &bytes, 4))
+ || !TEST_uchar_eq(bytes[0], 2)
+ || !TEST_uchar_eq(bytes[1], 4)
+ || !TEST_uchar_eq(bytes[2], 6)
+ || !TEST_uchar_eq(bytes[3], 8)
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN -4)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
+ || !TEST_true(PACKET_get_bytes(&pkt, &bytes, 4))
+ || !TEST_uchar_eq(bytes[0], 0xf8)
+ || !TEST_uchar_eq(bytes[1], 0xfa)
+ || !TEST_uchar_eq(bytes[2], 0xfc)
+ || !TEST_uchar_eq(bytes[3], 0xfe)
+ || !TEST_false(PACKET_remaining(&pkt)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_copy_bytes(void)
+{
+ unsigned char bytes[4];
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_copy_bytes(&pkt, bytes, 4))
+ || !TEST_char_eq(bytes[0], 2)
+ || !TEST_char_eq(bytes[1], 4)
+ || !TEST_char_eq(bytes[2], 6)
+ || !TEST_char_eq(bytes[3], 8)
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN - 4)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
+ || !TEST_true(PACKET_copy_bytes(&pkt, bytes, 4))
+ || !TEST_uchar_eq(bytes[0], 0xf8)
+ || !TEST_uchar_eq(bytes[1], 0xfa)
+ || !TEST_uchar_eq(bytes[2], 0xfc)
+ || !TEST_uchar_eq(bytes[3], 0xfe)
+ || !TEST_false(PACKET_remaining(&pkt)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_copy_all(void)
+{
+ unsigned char tmp[BUF_LEN];
+ PACKET pkt;
+ size_t len;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_copy_all(&pkt, tmp, BUF_LEN, &len))
+ || !TEST_size_t_eq(len, BUF_LEN)
+ || !TEST_mem_eq(smbuf, BUF_LEN, tmp, BUF_LEN)
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
+ || !TEST_false(PACKET_copy_all(&pkt, tmp, BUF_LEN - 1, &len)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_memdup(void)
+{
+ unsigned char *data = NULL;
+ size_t len;
+ PACKET pkt;
+ int result = 0;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_memdup(&pkt, &data, &len))
+ || !TEST_size_t_eq(len, BUF_LEN)
+ || !TEST_mem_eq(data, len, PACKET_data(&pkt), len)
+ || !TEST_true(PACKET_forward(&pkt, 10))
+ || !TEST_true(PACKET_memdup(&pkt, &data, &len))
+ || !TEST_size_t_eq(len, BUF_LEN - 10)
+ || !TEST_mem_eq(data, len, PACKET_data(&pkt), len))
+ goto end;
+ result = 1;
+end:
+ OPENSSL_free(data);
+ return result;
+}
+
+static int test_PACKET_strndup(void)
+{
+ char buf1[10], buf2[10];
+ char *data = NULL;
+ PACKET pkt;
+ int result = 0;
+
+ memset(buf1, 'x', 10);
+ memset(buf2, 'y', 10);
+ buf2[5] = '\0';
+
+ if (!TEST_true(PACKET_buf_init(&pkt, (unsigned char*)buf1, 10))
+ || !TEST_true(PACKET_strndup(&pkt, &data))
+ || !TEST_size_t_eq(strlen(data), 10)
+ || !TEST_strn_eq(data, buf1, 10)
+ || !TEST_true(PACKET_buf_init(&pkt, (unsigned char*)buf2, 10))
+ || !TEST_true(PACKET_strndup(&pkt, &data))
+ || !TEST_size_t_eq(strlen(data), 5)
+ || !TEST_str_eq(data, buf2))
+ goto end;
+
+ result = 1;
+end:
+ OPENSSL_free(data);
+ return result;
+}
+
+static int test_PACKET_contains_zero_byte(void)
+{
+ char buf1[10], buf2[10];
+ PACKET pkt;
+
+ memset(buf1, 'x', 10);
+ memset(buf2, 'y', 10);
+ buf2[5] = '\0';
+
+ if (!TEST_true(PACKET_buf_init(&pkt, (unsigned char*)buf1, 10))
+ || !TEST_false(PACKET_contains_zero_byte(&pkt))
+ || !TEST_true(PACKET_buf_init(&pkt, (unsigned char*)buf2, 10))
+ || !TEST_true(PACKET_contains_zero_byte(&pkt)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_forward(void)
+{
+ const unsigned char *byte = NULL;
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_forward(&pkt, 1))
+ || !TEST_true(PACKET_get_bytes(&pkt, &byte, 1))
+ || !TEST_uchar_eq(byte[0], 4)
+ || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 3))
+ || !TEST_true(PACKET_get_bytes(&pkt, &byte, 1))
+ || !TEST_uchar_eq(byte[0], 0xfe))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_buf_init(void)
+{
+ unsigned char buf1[BUF_LEN] = { 0 };
+ PACKET pkt;
+
+ /* Also tests PACKET_remaining() */
+ if (!TEST_true(PACKET_buf_init(&pkt, buf1, 4))
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), 4)
+ || !TEST_true(PACKET_buf_init(&pkt, buf1, BUF_LEN))
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
+ || !TEST_false(PACKET_buf_init(&pkt, buf1, -1)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_null_init(void)
+{
+ PACKET pkt;
+
+ PACKET_null_init(&pkt);
+ if (!TEST_size_t_eq(PACKET_remaining(&pkt), 0)
+ || !TEST_false(PACKET_forward(&pkt, 1)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_equal(void)
+{
+ PACKET pkt;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, smbuf, 4))
+ || !TEST_true(PACKET_equal(&pkt, smbuf, 4))
+ || !TEST_false(PACKET_equal(&pkt, smbuf + 1, 4))
+ || !TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
+ || !TEST_true(PACKET_equal(&pkt, smbuf, BUF_LEN))
+ || !TEST_false(PACKET_equal(&pkt, smbuf, BUF_LEN - 1))
+ || !TEST_false(PACKET_equal(&pkt, smbuf, BUF_LEN + 1))
+ || !TEST_false(PACKET_equal(&pkt, smbuf, 0)))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_length_prefixed_1(void)
+{
+ unsigned char buf1[BUF_LEN];
+ const size_t len = 16;
+ unsigned int i;
+ PACKET pkt, short_pkt, subpkt;
+
+ memset(&subpkt, 0, sizeof(subpkt));
+ buf1[0] = (unsigned char)len;
+ for (i = 1; i < BUF_LEN; i++)
+ buf1[i] = (i * 2) & 0xff;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, buf1, BUF_LEN))
+ || !TEST_true(PACKET_buf_init(&short_pkt, buf1, len))
+ || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&subpkt), len)
+ || !TEST_true(PACKET_get_net_2(&subpkt, &i))
+ || !TEST_uint_eq(i, 0x0204)
+ || !TEST_false(PACKET_get_length_prefixed_1(&short_pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&short_pkt), len))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_length_prefixed_2(void)
+{
+ unsigned char buf1[1024];
+ const size_t len = 516; /* 0x0204 */
+ unsigned int i;
+ PACKET pkt, short_pkt, subpkt;
+
+ memset(&subpkt, 0, sizeof(subpkt));
+ for (i = 1; i <= 1024; i++)
+ buf1[i - 1] = (i * 2) & 0xff;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, buf1, 1024))
+ || !TEST_true(PACKET_buf_init(&short_pkt, buf1, len))
+ || !TEST_true(PACKET_get_length_prefixed_2(&pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&subpkt), len)
+ || !TEST_true(PACKET_get_net_2(&subpkt, &i))
+ || !TEST_uint_eq(i, 0x0608)
+ || !TEST_false(PACKET_get_length_prefixed_2(&short_pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&short_pkt), len))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_get_length_prefixed_3(void)
+{
+ unsigned char buf1[1024];
+ const size_t len = 516; /* 0x000204 */
+ unsigned int i;
+ PACKET pkt, short_pkt, subpkt;
+
+ memset(&subpkt, 0, sizeof(subpkt));
+ for (i = 0; i < 1024; i++)
+ buf1[i] = (i * 2) & 0xff;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, buf1, 1024))
+ || !TEST_true(PACKET_buf_init(&short_pkt, buf1, len))
+ || !TEST_true(PACKET_get_length_prefixed_3(&pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&subpkt), len)
+ || !TEST_true(PACKET_get_net_2(&subpkt, &i))
+ || !TEST_uint_eq(i, 0x0608)
+ || !TEST_false(PACKET_get_length_prefixed_3(&short_pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&short_pkt), len))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_as_length_prefixed_1(void)
+{
+ unsigned char buf1[BUF_LEN];
+ const size_t len = 16;
+ unsigned int i;
+ PACKET pkt, exact_pkt, subpkt;
+
+ memset(&subpkt, 0, sizeof(subpkt));
+ buf1[0] = (unsigned char)len;
+ for (i = 1; i < BUF_LEN; i++)
+ buf1[i] = (i * 2) & 0xff;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, buf1, BUF_LEN))
+ || !TEST_true(PACKET_buf_init(&exact_pkt, buf1, len + 1))
+ || !TEST_false(PACKET_as_length_prefixed_1(&pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
+ || !TEST_true(PACKET_as_length_prefixed_1(&exact_pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&exact_pkt), 0)
+ || !TEST_size_t_eq(PACKET_remaining(&subpkt), len))
+ return 0;
+
+ return 1;
+}
+
+static int test_PACKET_as_length_prefixed_2(void)
+{
+ unsigned char buf[1024];
+ const size_t len = 516; /* 0x0204 */
+ unsigned int i;
+ PACKET pkt, exact_pkt, subpkt;
+
+ memset(&subpkt, 0, sizeof(subpkt));
+ for (i = 1; i <= 1024; i++)
+ buf[i-1] = (i * 2) & 0xff;
+
+ if (!TEST_true(PACKET_buf_init(&pkt, buf, 1024))
+ || !TEST_true(PACKET_buf_init(&exact_pkt, buf, len + 2))
+ || !TEST_false(PACKET_as_length_prefixed_2(&pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&pkt), 1024)
+ || !TEST_true(PACKET_as_length_prefixed_2(&exact_pkt, &subpkt))
+ || !TEST_size_t_eq(PACKET_remaining(&exact_pkt), 0)
+ || !TEST_size_t_eq(PACKET_remaining(&subpkt), len))
+ return 0;
+
+ return 1;
+}
+
+int setup_tests(void)
+{
+ unsigned int i;
+
+ for (i = 1; i <= BUF_LEN; i++)
+ smbuf[i - 1] = (i * 2) & 0xff;
+
+ ADD_TEST(test_PACKET_buf_init);
+ ADD_TEST(test_PACKET_null_init);
+ ADD_TEST(test_PACKET_remaining);
+ ADD_TEST(test_PACKET_end);
+ ADD_TEST(test_PACKET_equal);
+ ADD_TEST(test_PACKET_get_1);
+ ADD_TEST(test_PACKET_get_4);
+ ADD_TEST(test_PACKET_get_net_2);
+ ADD_TEST(test_PACKET_get_net_3);
+ ADD_TEST(test_PACKET_get_net_4);
+ ADD_TEST(test_PACKET_get_sub_packet);
+ ADD_TEST(test_PACKET_get_bytes);
+ ADD_TEST(test_PACKET_copy_bytes);
+ ADD_TEST(test_PACKET_copy_all);
+ ADD_TEST(test_PACKET_memdup);
+ ADD_TEST(test_PACKET_strndup);
+ ADD_TEST(test_PACKET_contains_zero_byte);
+ ADD_TEST(test_PACKET_forward);
+ ADD_TEST(test_PACKET_get_length_prefixed_1);
+ ADD_TEST(test_PACKET_get_length_prefixed_2);
+ ADD_TEST(test_PACKET_get_length_prefixed_3);
+ ADD_TEST(test_PACKET_as_length_prefixed_1);
+ ADD_TEST(test_PACKET_as_length_prefixed_2);
+ return 1;
+}
diff --git a/test/param_build_test.c b/test/param_build_test.c
new file mode 100644
index 000000000000..8257c6fba9f3
--- /dev/null
+++ b/test/param_build_test.c
@@ -0,0 +1,535 @@
+/*
+ * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2019, Oracle and/or its affiliates. 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/params.h>
+#include <openssl/param_build.h>
+#include "internal/nelem.h"
+#include "testutil.h"
+
+static const OSSL_PARAM params_empty[] = { OSSL_PARAM_END };
+
+static int template_public_single_zero_test(void)
+{
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL, *params_blt = NULL, *p;
+ BIGNUM *zbn = NULL, *zbn_res = NULL;
+ int res = 0;
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(zbn = BN_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "zeronumber", zbn))
+ || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ params = params_blt;
+ /* Check BN (zero BN becomes unsigned integer) */
+ if (!TEST_ptr(p = OSSL_PARAM_locate(params, "zeronumber"))
+ || !TEST_str_eq(p->key, "zeronumber")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_true(OSSL_PARAM_get_BN(p, &zbn_res))
+ || !TEST_BN_eq(zbn_res, zbn))
+ goto err;
+ res = 1;
+err:
+ if (params != params_blt)
+ OPENSSL_free(params);
+ OSSL_PARAM_free(params_blt);
+ OSSL_PARAM_BLD_free(bld);
+ BN_free(zbn);
+ BN_free(zbn_res);
+ return res;
+}
+
+static int template_private_single_zero_test(void)
+{
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL, *params_blt = NULL, *p;
+ BIGNUM *zbn = NULL, *zbn_res = NULL;
+ int res = 0;
+
+ if (!TEST_ptr(bld = OSSL_PARAM_BLD_new())
+ || !TEST_ptr(zbn = BN_secure_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "zeronumber", zbn))
+ || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ params = params_blt;
+ /* Check BN (zero BN becomes unsigned integer) */
+ if (!TEST_ptr(p = OSSL_PARAM_locate(params, "zeronumber"))
+ || !TEST_true(CRYPTO_secure_allocated(p->data))
+ || !TEST_str_eq(p->key, "zeronumber")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_true(OSSL_PARAM_get_BN(p, &zbn_res))
+ || !TEST_int_eq(BN_get_flags(zbn, BN_FLG_SECURE), BN_FLG_SECURE)
+ || !TEST_BN_eq(zbn_res, zbn))
+ goto err;
+ res = 1;
+err:
+ if (params != params_blt)
+ OPENSSL_free(params);
+ OSSL_PARAM_free(params_blt);
+ OSSL_PARAM_BLD_free(bld);
+ BN_free(zbn);
+ BN_free(zbn_res);
+ return res;
+}
+
+static int template_public_test(int tstid)
+{
+ OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
+ OSSL_PARAM *params = NULL, *params_blt = NULL, *p1 = NULL, *p;
+ BIGNUM *bn = NULL, *bn_res = NULL;
+ BIGNUM *zbn = NULL, *zbn_res = NULL;
+ int i;
+ long int l;
+ int32_t i32;
+ int64_t i64;
+ double d;
+ time_t t;
+ char *utf = NULL;
+ const char *cutf;
+ int res = 0;
+
+ if (!TEST_ptr(bld)
+ || !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(zbn = BN_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "zeronumber", zbn))
+ || !TEST_ptr(bn = BN_new())
+ || !TEST_true(BN_set_word(bn, 1729))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "bignumber", bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_string(bld, "utf8_s", "foo",
+ sizeof("foo")))
+ || !TEST_true(OSSL_PARAM_BLD_push_utf8_ptr(bld, "utf8_p", "bar-boom",
+ 0))
+ || !TEST_true(OSSL_PARAM_BLD_push_int(bld, "i", -6))
+ || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ switch(tstid) {
+ case 0:
+ params = params_blt;
+ break;
+ case 1:
+ params = OSSL_PARAM_merge(params_blt, params_empty);
+ break;
+ case 2:
+ params = OSSL_PARAM_dup(params_blt);
+ break;
+ case 3:
+ p1 = OSSL_PARAM_merge(params_blt, params_empty);
+ params = OSSL_PARAM_dup(p1);
+ break;
+ default:
+ p1 = OSSL_PARAM_dup(params_blt);
+ params = OSSL_PARAM_merge(p1, params_empty);
+ break;
+ }
+ /* Check int */
+ if (!TEST_ptr(p = OSSL_PARAM_locate(params, "i"))
+ || !TEST_true(OSSL_PARAM_get_int(p, &i))
+ || !TEST_str_eq(p->key, "i")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(int))
+ || !TEST_int_eq(i, -6)
+ /* Check int32 */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "i32"))
+ || !TEST_true(OSSL_PARAM_get_int32(p, &i32))
+ || !TEST_str_eq(p->key, "i32")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(int32_t))
+ || !TEST_int_eq((int)i32, 1532)
+ /* Check int64 */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "i64"))
+ || !TEST_str_eq(p->key, "i64")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(int64_t))
+ || !TEST_true(OSSL_PARAM_get_int64(p, &i64))
+ || !TEST_long_eq((long)i64, -9999999)
+ /* Check long */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "l"))
+ || !TEST_str_eq(p->key, "l")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
+ || !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))
+ || !TEST_str_eq(p->key, "d")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_REAL)
+ || !TEST_size_t_eq(p->data_size, sizeof(double))
+ || !TEST_double_eq(d, 1.61803398875)
+ /* Check UTF8 string */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "utf8_s"))
+ || !TEST_str_eq(p->data, "foo")
+ || !TEST_true(OSSL_PARAM_get_utf8_string(p, &utf, 0))
+ || !TEST_str_eq(utf, "foo")
+ /* Check UTF8 pointer */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "utf8_p"))
+ || !TEST_true(OSSL_PARAM_get_utf8_ptr(p, &cutf))
+ || !TEST_str_eq(cutf, "bar-boom")
+ /* Check BN (zero BN becomes unsigned integer) */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "zeronumber"))
+ || !TEST_str_eq(p->key, "zeronumber")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_true(OSSL_PARAM_get_BN(p, &zbn_res))
+ || !TEST_BN_eq(zbn_res, zbn)
+ /* Check BN */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "bignumber"))
+ || !TEST_str_eq(p->key, "bignumber")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_true(OSSL_PARAM_get_BN(p, &bn_res))
+ || !TEST_int_eq(BN_cmp(bn_res, bn), 0))
+ goto err;
+ res = 1;
+err:
+ OPENSSL_free(p1);
+ if (params != params_blt)
+ OPENSSL_free(params);
+ OSSL_PARAM_free(params_blt);
+ OSSL_PARAM_BLD_free(bld);
+ OPENSSL_free(utf);
+ BN_free(zbn);
+ BN_free(zbn_res);
+ BN_free(bn);
+ BN_free(bn_res);
+ return res;
+}
+
+static int template_private_test(int tstid)
+{
+ int *data1 = NULL, *data2 = NULL, j;
+ const int data1_num = 12;
+ const int data1_size = data1_num * sizeof(int);
+ const int data2_num = 5;
+ const int data2_size = data2_num * sizeof(int);
+ OSSL_PARAM_BLD *bld = NULL;
+ OSSL_PARAM *params = NULL, *params_blt = NULL, *p1 = NULL, *p;
+ unsigned int i;
+ unsigned long int l;
+ uint32_t i32;
+ uint64_t i64;
+ size_t st;
+ BIGNUM *zbn = NULL, *zbn_res = NULL;
+ BIGNUM *bn = NULL, *bn_res = NULL;
+ int res = 0;
+
+ if (!TEST_ptr(data1 = OPENSSL_secure_malloc(data1_size))
+ || !TEST_ptr(data2 = OPENSSL_secure_malloc(data2_size))
+ || !TEST_ptr(bld = OSSL_PARAM_BLD_new()))
+ goto err;
+
+ for (j = 0; j < data1_num; j++)
+ data1[j] = -16 * j;
+ for (j = 0; j < data2_num; j++)
+ data2[j] = 2 * j;
+
+ if (!TEST_true(OSSL_PARAM_BLD_push_uint(bld, "i", 6))
+ || !TEST_true(OSSL_PARAM_BLD_push_ulong(bld, "l", 42))
+ || !TEST_true(OSSL_PARAM_BLD_push_uint32(bld, "i32", 1532))
+ || !TEST_true(OSSL_PARAM_BLD_push_uint64(bld, "i64", 9999999))
+ || !TEST_true(OSSL_PARAM_BLD_push_size_t(bld, "st", 65537))
+ || !TEST_ptr(zbn = BN_secure_new())
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "zeronumber", zbn))
+ || !TEST_ptr(bn = BN_secure_new())
+ || !TEST_true(BN_set_word(bn, 1729))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "bignumber", bn))
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_string(bld, "oct_s", data1,
+ data1_size))
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_ptr(bld, "oct_p", data2,
+ data2_size))
+ || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+ switch(tstid) {
+ case 0:
+ params = params_blt;
+ break;
+ case 1:
+ params = OSSL_PARAM_merge(params_blt, params_empty);
+ break;
+ case 2:
+ params = OSSL_PARAM_dup(params_blt);
+ break;
+ case 3:
+ p1 = OSSL_PARAM_merge(params_blt, params_empty);
+ params = OSSL_PARAM_dup(p1);
+ break;
+ default:
+ p1 = OSSL_PARAM_dup(params_blt);
+ params = OSSL_PARAM_merge(p1, params_empty);
+ break;
+ }
+ /* Check unsigned int */
+ if (!TEST_ptr(p = OSSL_PARAM_locate(params, "i"))
+ || !TEST_false(CRYPTO_secure_allocated(p->data))
+ || !TEST_true(OSSL_PARAM_get_uint(p, &i))
+ || !TEST_str_eq(p->key, "i")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(int))
+ || !TEST_uint_eq(i, 6)
+ /* Check unsigned int32 */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "i32"))
+ || !TEST_false(CRYPTO_secure_allocated(p->data))
+ || !TEST_true(OSSL_PARAM_get_uint32(p, &i32))
+ || !TEST_str_eq(p->key, "i32")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(int32_t))
+ || !TEST_uint_eq((unsigned int)i32, 1532)
+ /* Check unsigned int64 */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "i64"))
+ || !TEST_false(CRYPTO_secure_allocated(p->data))
+ || !TEST_str_eq(p->key, "i64")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(int64_t))
+ || !TEST_true(OSSL_PARAM_get_uint64(p, &i64))
+ || !TEST_ulong_eq((unsigned long)i64, 9999999)
+ /* Check unsigned long int */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "l"))
+ || !TEST_false(CRYPTO_secure_allocated(p->data))
+ || !TEST_str_eq(p->key, "l")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(unsigned long int))
+ || !TEST_true(OSSL_PARAM_get_ulong(p, &l))
+ || !TEST_ulong_eq(l, 42)
+ /* Check size_t */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "st"))
+ || !TEST_false(CRYPTO_secure_allocated(p->data))
+ || !TEST_str_eq(p->key, "st")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(size_t))
+ || !TEST_true(OSSL_PARAM_get_size_t(p, &st))
+ || !TEST_size_t_eq(st, 65537)
+ /* Check octet string */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "oct_s"))
+ || !TEST_true(CRYPTO_secure_allocated(p->data))
+ || !TEST_str_eq(p->key, "oct_s")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_OCTET_STRING)
+ || !TEST_mem_eq(p->data, p->data_size, data1, data1_size)
+ /* Check octet pointer */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "oct_p"))
+ || !TEST_false(CRYPTO_secure_allocated(p->data))
+ || !TEST_true(CRYPTO_secure_allocated(*(void **)p->data))
+ || !TEST_str_eq(p->key, "oct_p")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_OCTET_PTR)
+ || !TEST_mem_eq(*(void **)p->data, p->data_size, data2, data2_size)
+ /* Check BN (zero BN becomes unsigned integer) */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "zeronumber"))
+ || !TEST_true(CRYPTO_secure_allocated(p->data))
+ || !TEST_str_eq(p->key, "zeronumber")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_true(OSSL_PARAM_get_BN(p, &zbn_res))
+ || !TEST_int_eq(BN_get_flags(zbn, BN_FLG_SECURE), BN_FLG_SECURE)
+ || !TEST_BN_eq(zbn_res, zbn)
+ /* Check BN */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "bignumber"))
+ || !TEST_true(CRYPTO_secure_allocated(p->data))
+ || !TEST_str_eq(p->key, "bignumber")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_true(OSSL_PARAM_get_BN(p, &bn_res))
+ || !TEST_int_eq(BN_get_flags(bn, BN_FLG_SECURE), BN_FLG_SECURE)
+ || !TEST_int_eq(BN_cmp(bn_res, bn), 0))
+ goto err;
+ res = 1;
+err:
+ OSSL_PARAM_free(p1);
+ if (params != params_blt)
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_free(params_blt);
+ OSSL_PARAM_BLD_free(bld);
+ OPENSSL_secure_free(data1);
+ OPENSSL_secure_free(data2);
+ BN_free(zbn);
+ BN_free(zbn_res);
+ BN_free(bn);
+ BN_free(bn_res);
+ return res;
+}
+
+static int builder_limit_test(void)
+{
+ const int n = 100;
+ char names[100][3];
+ OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
+ OSSL_PARAM *params = NULL;
+ int i, res = 0;
+
+ if (!TEST_ptr(bld))
+ goto err;
+
+ for (i = 0; i < n; i++) {
+ names[i][0] = 'A' + (i / 26) - 1;
+ names[i][1] = 'a' + (i % 26) - 1;
+ names[i][2] = '\0';
+ if (!TEST_true(OSSL_PARAM_BLD_push_int(bld, names[i], 3 * i + 1)))
+ goto err;
+ }
+ if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+ /* Count the elements in the params arrary, expecting n */
+ for (i = 0; params[i].key != NULL; i++);
+ if (!TEST_int_eq(i, n))
+ goto err;
+
+ /* Verify that the build, cleared the builder structure */
+ OSSL_PARAM_free(params);
+ params = NULL;
+
+ if (!TEST_true(OSSL_PARAM_BLD_push_int(bld, "g", 2))
+ || !TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+ /* Count the elements in the params arrary, expecting 1 */
+ for (i = 0; params[i].key != NULL; i++);
+ if (!TEST_int_eq(i, 1))
+ goto err;
+ res = 1;
+err:
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_BLD_free(bld);
+ return res;
+}
+
+static int builder_merge_test(void)
+{
+ static int data1[] = { 2, 3, 5, 7, 11, 15, 17 };
+ static unsigned char data2[] = { 2, 4, 6, 8, 10 };
+ OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
+ OSSL_PARAM_BLD *bld2 = OSSL_PARAM_BLD_new();
+ OSSL_PARAM *params = NULL, *params_blt = NULL, *params2_blt = NULL, *p;
+ unsigned int i;
+ unsigned long int l;
+ uint32_t i32;
+ uint64_t i64;
+ size_t st;
+ BIGNUM *bn_priv = NULL, *bn_priv_res = NULL;
+ BIGNUM *bn_pub = NULL, *bn_pub_res = NULL;
+ int res = 0;
+
+ if (!TEST_ptr(bld)
+ || !TEST_true(OSSL_PARAM_BLD_push_uint(bld, "i", 6))
+ || !TEST_true(OSSL_PARAM_BLD_push_ulong(bld, "l", 42))
+ || !TEST_true(OSSL_PARAM_BLD_push_uint32(bld, "i32", 1532))
+ || !TEST_true(OSSL_PARAM_BLD_push_uint64(bld, "i64", 9999999))
+ || !TEST_true(OSSL_PARAM_BLD_push_size_t(bld, "st", 65537))
+ || !TEST_ptr(bn_priv = BN_secure_new())
+ || !TEST_true(BN_set_word(bn_priv, 1729))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld, "bignumber_priv", bn_priv))
+ || !TEST_ptr(params_blt = OSSL_PARAM_BLD_to_param(bld)))
+ goto err;
+
+ if (!TEST_ptr(bld2)
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_string(bld2, "oct_s", data1,
+ sizeof(data1)))
+ || !TEST_true(OSSL_PARAM_BLD_push_octet_ptr(bld2, "oct_p", data2,
+ sizeof(data2)))
+ || !TEST_true(OSSL_PARAM_BLD_push_uint32(bld2, "i32", 99))
+ || !TEST_ptr(bn_pub = BN_new())
+ || !TEST_true(BN_set_word(bn_pub, 0x42))
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(bld2, "bignumber_pub", bn_pub))
+ || !TEST_ptr(params2_blt = OSSL_PARAM_BLD_to_param(bld2)))
+ goto err;
+
+ if (!TEST_ptr(params = OSSL_PARAM_merge(params_blt, params2_blt)))
+ goto err;
+
+ if (!TEST_ptr(p = OSSL_PARAM_locate(params, "i"))
+ || !TEST_true(OSSL_PARAM_get_uint(p, &i))
+ || !TEST_str_eq(p->key, "i")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(int))
+ || !TEST_uint_eq(i, 6)
+ /* Check unsigned int32 */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "i32"))
+ || !TEST_true(OSSL_PARAM_get_uint32(p, &i32))
+ || !TEST_str_eq(p->key, "i32")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(int32_t))
+ || !TEST_uint_eq((unsigned int)i32, 99)
+ /* Check unsigned int64 */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "i64"))
+ || !TEST_str_eq(p->key, "i64")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(int64_t))
+ || !TEST_true(OSSL_PARAM_get_uint64(p, &i64))
+ || !TEST_ulong_eq((unsigned long)i64, 9999999)
+ /* Check unsigned long int */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "l"))
+ || !TEST_str_eq(p->key, "l")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(unsigned long int))
+ || !TEST_true(OSSL_PARAM_get_ulong(p, &l))
+ || !TEST_ulong_eq(l, 42)
+ /* Check size_t */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "st"))
+ || !TEST_str_eq(p->key, "st")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(size_t))
+ || !TEST_true(OSSL_PARAM_get_size_t(p, &st))
+ || !TEST_size_t_eq(st, 65537)
+ /* Check octet string */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "oct_s"))
+ || !TEST_str_eq(p->key, "oct_s")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_OCTET_STRING)
+ || !TEST_mem_eq(p->data, p->data_size, data1, sizeof(data1))
+ /* Check octet pointer */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "oct_p"))
+ || !TEST_str_eq(p->key, "oct_p")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_OCTET_PTR)
+ || !TEST_mem_eq(*(void **)p->data, p->data_size, data2, sizeof(data2))
+ /* Check BN */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "bignumber_pub"))
+ || !TEST_str_eq(p->key, "bignumber_pub")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_true(OSSL_PARAM_get_BN(p, &bn_pub_res))
+ || !TEST_int_eq(BN_cmp(bn_pub_res, bn_pub), 0)
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "bignumber_priv"))
+ || !TEST_str_eq(p->key, "bignumber_priv")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER)
+ || !TEST_true(OSSL_PARAM_get_BN(p, &bn_priv_res))
+ || !TEST_int_eq(BN_cmp(bn_priv_res, bn_priv), 0))
+ goto err;
+ res = 1;
+err:
+ OSSL_PARAM_free(params);
+ OSSL_PARAM_free(params_blt);
+ OSSL_PARAM_free(params2_blt);
+ OSSL_PARAM_BLD_free(bld);
+ OSSL_PARAM_BLD_free(bld2);
+ BN_free(bn_priv);
+ BN_free(bn_priv_res);
+ BN_free(bn_pub);
+ BN_free(bn_pub_res);
+ return res;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(template_public_single_zero_test);
+ ADD_ALL_TESTS(template_public_test, 5);
+ /* Only run the secure memory testing if we have secure memory available */
+ if (CRYPTO_secure_malloc_init(1<<16, 16)) {
+ ADD_TEST(template_private_single_zero_test);
+ ADD_ALL_TESTS(template_private_test, 5);
+ }
+ ADD_TEST(builder_limit_test);
+ ADD_TEST(builder_merge_test);
+ return 1;
+}
diff --git a/test/params_api_test.c b/test/params_api_test.c
new file mode 100644
index 000000000000..48e2f8920aa2
--- /dev/null
+++ b/test/params_api_test.c
@@ -0,0 +1,714 @@
+/*
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2019, Oracle and/or its affiliates. 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 "testutil.h"
+#include "internal/nelem.h"
+#include "internal/endian.h"
+#include <openssl/params.h>
+#include <openssl/bn.h>
+
+/* The maximum size of the static buffers used to test most things */
+#define MAX_LEN 20
+
+static void swap_copy(unsigned char *out, const void *in, size_t len)
+{
+ size_t j;
+
+ for (j = 0; j < len; j++)
+ out[j] = ((unsigned char *)in)[len - j - 1];
+}
+
+/*
+ * A memory copy that converts the native byte ordering either to or from
+ * little endian format.
+ *
+ * On a little endian machine copying either is just a memcpy(3), on a
+ * big endian machine copying from native to or from little endian involves
+ * byte reversal.
+ */
+static void le_copy(unsigned char *out, const void *in, size_t len)
+{
+ DECLARE_IS_ENDIAN;
+
+ if (IS_LITTLE_ENDIAN)
+ memcpy(out, in, len);
+ else
+ swap_copy(out, in, len);
+}
+
+static const struct {
+ size_t len;
+ unsigned char value[MAX_LEN];
+} raw_values[] = {
+ { 1, { 0x47 } },
+ { 1, { 0xd0 } },
+ { 2, { 0x01, 0xe9 } },
+ { 2, { 0xff, 0x53 } },
+ { 3, { 0x16, 0xff, 0x7c } },
+ { 3, { 0xa8, 0x9c, 0x0e } },
+ { 4, { 0x38, 0x27, 0xbf, 0x3b } },
+ { 4, { 0x9f, 0x26, 0x48, 0x22 } },
+ { 5, { 0x30, 0x65, 0xfa, 0xe4, 0x81 } },
+ { 5, { 0xd1, 0x76, 0x01, 0x1b, 0xcd } },
+ { 8, { 0x59, 0xb2, 0x1a, 0xe9, 0x2a, 0xd8, 0x46, 0x40 } },
+ { 8, { 0xb4, 0xae, 0xbd, 0xb4, 0xdd, 0x04, 0xb1, 0x4c } },
+ { 16, { 0x61, 0xe8, 0x7e, 0x31, 0xe9, 0x33, 0x83, 0x3d,
+ 0x87, 0x99, 0xc7, 0xd8, 0x5d, 0xa9, 0x8b, 0x42 } },
+ { 16, { 0xee, 0x6e, 0x8b, 0xc3, 0xec, 0xcf, 0x37, 0xcc,
+ 0x89, 0x67, 0xf2, 0x68, 0x33, 0xa0, 0x14, 0xb0 } },
+};
+
+static int test_param_type_extra(OSSL_PARAM *param, const unsigned char *cmp,
+ size_t width)
+{
+ int32_t i32;
+ int64_t i64;
+ size_t s, sz;
+ unsigned char buf[MAX_LEN];
+ const int bit32 = param->data_size <= sizeof(int32_t);
+ const int sizet = param->data_size <= sizeof(size_t);
+ const int signd = param->data_type == OSSL_PARAM_INTEGER;
+
+ /*
+ * Set the unmodified sentinal directly because there is no param array
+ * for these tests.
+ */
+ param->return_size = OSSL_PARAM_UNMODIFIED;
+ if (signd) {
+ if ((bit32 && !TEST_true(OSSL_PARAM_get_int32(param, &i32)))
+ || !TEST_true(OSSL_PARAM_get_int64(param, &i64)))
+ return 0;
+ } else {
+ if ((bit32
+ && !TEST_true(OSSL_PARAM_get_uint32(param, (uint32_t *)&i32)))
+ || !TEST_true(OSSL_PARAM_get_uint64(param, (uint64_t *)&i64))
+ || (sizet && !TEST_true(OSSL_PARAM_get_size_t(param, &s))))
+ return 0;
+ }
+ if (!TEST_false(OSSL_PARAM_modified(param)))
+ return 0;
+
+ /* Check signed types */
+ if (bit32) {
+ le_copy(buf, &i32, sizeof(i32));
+ sz = sizeof(i32) < width ? sizeof(i32) : width;
+ if (!TEST_mem_eq(buf, sz, cmp, sz))
+ return 0;
+ }
+ le_copy(buf, &i64, sizeof(i64));
+ sz = sizeof(i64) < width ? sizeof(i64) : width;
+ if (!TEST_mem_eq(buf, sz, cmp, sz))
+ return 0;
+ if (sizet && !signd) {
+ le_copy(buf, &s, sizeof(s));
+ sz = sizeof(s) < width ? sizeof(s) : width;
+ if (!TEST_mem_eq(buf, sz, cmp, sz))
+ return 0;
+ }
+
+ /* Check a widening write if possible */
+ if (sizeof(size_t) > width) {
+ if (signd) {
+ if (!TEST_true(OSSL_PARAM_set_int32(param, 12345))
+ || !TEST_true(OSSL_PARAM_get_int64(param, &i64))
+ || !TEST_size_t_eq((size_t)i64, 12345))
+ return 0;
+ } else {
+ if (!TEST_true(OSSL_PARAM_set_uint32(param, 12345))
+ || !TEST_true(OSSL_PARAM_get_uint64(param, (uint64_t *)&i64))
+ || !TEST_size_t_eq((size_t)i64, 12345))
+ return 0;
+ }
+ if (!TEST_true(OSSL_PARAM_modified(param)))
+ return 0;
+ }
+ return 1;
+}
+
+/*
+ * The test cases for each of the bastic integral types are similar.
+ * For each type, a param of that type is set and an attempt to read it
+ * get is made. Finally, the above function is called to verify that
+ * the params can be read as other types.
+ *
+ * All the real work is done via byte buffers which are converted to machine
+ * byte order and to little endian for comparisons. Narrower values are best
+ * compared using little endian because their values and positions don't
+ * change.
+ */
+
+static int test_param_int(int n)
+{
+ int in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(int)];
+ const size_t len = raw_values[n].len >= sizeof(int) ?
+ sizeof(int) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_int("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_int(&param, 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_int(&param, &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(&param, raw_values[n].value, sizeof(int));
+}
+
+static int test_param_long(int n)
+{
+ long int in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(long int)];
+ const size_t len = raw_values[n].len >= sizeof(long int)
+ ? sizeof(long int) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_long("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_long(&param, 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_long(&param, &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(&param, raw_values[n].value, sizeof(long int));
+}
+
+static int test_param_uint(int n)
+{
+ unsigned int in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(unsigned int)];
+ const size_t len = raw_values[n].len >= sizeof(unsigned int) ? sizeof(unsigned int) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_uint("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_uint(&param, 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_uint(&param, &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(&param, raw_values[n].value, sizeof(unsigned int));
+}
+
+static int test_param_ulong(int n)
+{
+ unsigned long int in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(unsigned long int)];
+ const size_t len = raw_values[n].len >= sizeof(unsigned long int)
+ ? sizeof(unsigned long int) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_ulong("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_ulong(&param, 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_ulong(&param, &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(&param, raw_values[n].value, sizeof(unsigned long int));
+}
+
+static int test_param_int32(int n)
+{
+ int32_t in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(int32_t)];
+ const size_t len = raw_values[n].len >= sizeof(int32_t)
+ ? sizeof(int32_t) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_int32("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_int32(&param, 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_int32(&param, &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(&param, raw_values[n].value, sizeof(int32_t));
+}
+
+static int test_param_uint32(int n)
+{
+ uint32_t in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(uint32_t)];
+ const size_t len = raw_values[n].len >= sizeof(uint32_t)
+ ? sizeof(uint32_t) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_uint32("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_uint32(&param, 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_uint32(&param, &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(&param, raw_values[n].value, sizeof(uint32_t));
+}
+
+static int test_param_int64(int n)
+{
+ int64_t in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(int64_t)];
+ const size_t len = raw_values[n].len >= sizeof(int64_t)
+ ? sizeof(int64_t) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_int64("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_int64(&param, 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_int64(&param, &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(&param, raw_values[n].value, sizeof(int64_t));
+}
+
+static int test_param_uint64(int n)
+{
+ uint64_t in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(uint64_t)];
+ const size_t len = raw_values[n].len >= sizeof(uint64_t)
+ ? sizeof(uint64_t) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_uint64("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_uint64(&param, 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_uint64(&param, &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(&param, raw_values[n].value, sizeof(uint64_t));
+}
+
+static int test_param_size_t(int n)
+{
+ size_t in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(size_t)];
+ const size_t len = raw_values[n].len >= sizeof(size_t)
+ ? sizeof(size_t) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_size_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_size_t(&param, 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_size_t(&param, &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(&param, 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(time_t)];
+ const size_t len = raw_values[n].len >= sizeof(time_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(&param, 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(&param, &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(&param, raw_values[n].value, sizeof(size_t));
+}
+
+static int test_param_bignum(int n)
+{
+ unsigned char buf[MAX_LEN], bnbuf[MAX_LEN];
+ const size_t len = raw_values[n].len;
+ BIGNUM *b = NULL, *c = NULL;
+ OSSL_PARAM param = OSSL_PARAM_DEFN("bn", OSSL_PARAM_UNSIGNED_INTEGER,
+ NULL, 0);
+ int ret = 0;
+
+ param.data = bnbuf;
+ param.data_size = len;
+
+ le_copy(buf, raw_values[n].value, len);
+ if (!TEST_ptr(b = BN_lebin2bn(raw_values[n].value, (int)len, NULL)))
+ goto err;
+
+ if (!TEST_true(OSSL_PARAM_set_BN(&param, b))
+ || !TEST_mem_eq(bnbuf, param.return_size, buf, param.return_size))
+ goto err;
+ param.data_size = param.return_size;
+ if (!TEST_true(OSSL_PARAM_get_BN(&param, &c))
+ || !TEST_BN_eq(b, c))
+ goto err;
+
+ ret = 1;
+err:
+ BN_free(b);
+ BN_free(c);
+ return ret;
+}
+
+static int test_param_real(void)
+{
+ double p;
+ OSSL_PARAM param = OSSL_PARAM_double("r", NULL);
+
+ param.data = &p;
+ return TEST_true(OSSL_PARAM_set_double(&param, 3.14159))
+ && TEST_double_eq(p, 3.14159);
+}
+
+static int test_param_construct(int tstid)
+{
+ static const char *int_names[] = {
+ "int", "long", "int32", "int64"
+ };
+ static const char *uint_names[] = {
+ "uint", "ulong", "uint32", "uint64", "size_t"
+ };
+ static const unsigned char bn_val[16] = {
+ 0xac, 0x75, 0x22, 0x7d, 0x81, 0x06, 0x7a, 0x23,
+ 0xa6, 0xed, 0x87, 0xc7, 0xab, 0xf4, 0x73, 0x22
+ };
+ OSSL_PARAM *p = NULL, *p1 = NULL;
+ static const OSSL_PARAM params_empty[] = {
+ OSSL_PARAM_END
+ };
+ OSSL_PARAM params[20];
+ char buf[100], buf2[100], *bufp, *bufp2;
+ unsigned char ubuf[100];
+ void *vp, *vpn = NULL, *vp2;
+ OSSL_PARAM *cp;
+ int i, n = 0, ret = 0;
+ unsigned int u;
+ long int l;
+ unsigned long int ul;
+ int32_t i32;
+ uint32_t u32;
+ int64_t i64;
+ uint64_t u64;
+ size_t j, k, s;
+ double d, d2;
+ BIGNUM *bn = NULL, *bn2 = NULL;
+
+ params[n++] = OSSL_PARAM_construct_int("int", &i);
+ params[n++] = OSSL_PARAM_construct_uint("uint", &u);
+ params[n++] = OSSL_PARAM_construct_long("long", &l);
+ params[n++] = OSSL_PARAM_construct_ulong("ulong", &ul);
+ params[n++] = OSSL_PARAM_construct_int32("int32", &i32);
+ params[n++] = OSSL_PARAM_construct_int64("int64", &i64);
+ params[n++] = OSSL_PARAM_construct_uint32("uint32", &u32);
+ params[n++] = OSSL_PARAM_construct_uint64("uint64", &u64);
+ params[n++] = OSSL_PARAM_construct_size_t("size_t", &s);
+ params[n++] = OSSL_PARAM_construct_double("double", &d);
+ params[n++] = OSSL_PARAM_construct_BN("bignum", ubuf, sizeof(ubuf));
+ params[n++] = OSSL_PARAM_construct_utf8_string("utf8str", buf, sizeof(buf));
+ params[n++] = OSSL_PARAM_construct_octet_string("octstr", buf, sizeof(buf));
+ params[n++] = OSSL_PARAM_construct_utf8_ptr("utf8ptr", &bufp, 0);
+ params[n++] = OSSL_PARAM_construct_octet_ptr("octptr", &vp, 0);
+ params[n] = OSSL_PARAM_construct_end();
+
+ switch(tstid) {
+ case 0:
+ p = params;
+ break;
+ case 1:
+ p = OSSL_PARAM_merge(params, params_empty);
+ break;
+ case 2:
+ p = OSSL_PARAM_dup(params);
+ break;
+ default:
+ p1 = OSSL_PARAM_dup(params);
+ p = OSSL_PARAM_merge(p1, params_empty);
+ break;
+ }
+
+ /* Search failure */
+ if (!TEST_ptr_null(OSSL_PARAM_locate(p, "fnord")))
+ goto err;
+
+ /* All signed integral types */
+ for (j = 0; j < OSSL_NELEM(int_names); j++) {
+ if (!TEST_ptr(cp = OSSL_PARAM_locate(p, int_names[j]))
+ || !TEST_true(OSSL_PARAM_set_int32(cp, (int32_t)(3 + j)))
+ || !TEST_true(OSSL_PARAM_get_int64(cp, &i64))
+ || !TEST_size_t_eq(cp->data_size, cp->return_size)
+ || !TEST_size_t_eq((size_t)i64, 3 + j)) {
+ TEST_note("iteration %zu var %s", j + 1, int_names[j]);
+ goto err;
+ }
+ }
+ /* All unsigned integral types */
+ for (j = 0; j < OSSL_NELEM(uint_names); j++) {
+ if (!TEST_ptr(cp = OSSL_PARAM_locate(p, uint_names[j]))
+ || !TEST_true(OSSL_PARAM_set_uint32(cp, (uint32_t)(3 + j)))
+ || !TEST_true(OSSL_PARAM_get_uint64(cp, &u64))
+ || !TEST_size_t_eq(cp->data_size, cp->return_size)
+ || !TEST_size_t_eq((size_t)u64, 3 + j)) {
+ TEST_note("iteration %zu var %s", j + 1, uint_names[j]);
+ goto err;
+ }
+ }
+ /* Real */
+ if (!TEST_ptr(cp = OSSL_PARAM_locate(p, "double"))
+ || !TEST_true(OSSL_PARAM_set_double(cp, 3.14))
+ || !TEST_true(OSSL_PARAM_get_double(cp, &d2))
+ || !TEST_size_t_eq(cp->return_size, sizeof(double))
+ || !TEST_double_eq(d2, 3.14)
+ || (tstid <= 1 && !TEST_double_eq(d, d2)))
+ goto err;
+ /* UTF8 string */
+ bufp = NULL;
+ if (!TEST_ptr(cp = OSSL_PARAM_locate(p, "utf8str"))
+ || !TEST_true(OSSL_PARAM_set_utf8_string(cp, "abcdef"))
+ || !TEST_size_t_eq(cp->return_size, sizeof("abcdef") - 1)
+ || !TEST_true(OSSL_PARAM_get_utf8_string(cp, &bufp, 0))
+ || !TEST_str_eq(bufp, "abcdef")) {
+ OPENSSL_free(bufp);
+ goto err;
+ }
+ OPENSSL_free(bufp);
+ bufp = buf2;
+ if (!TEST_true(OSSL_PARAM_get_utf8_string(cp, &bufp, sizeof(buf2)))
+ || !TEST_str_eq(buf2, "abcdef"))
+ goto err;
+ /* UTF8 pointer */
+ /* Note that the size of a UTF8 string does *NOT* include the NUL byte */
+ bufp = buf;
+ if (!TEST_ptr(cp = OSSL_PARAM_locate(p, "utf8ptr"))
+ || !TEST_true(OSSL_PARAM_set_utf8_ptr(cp, "tuvwxyz"))
+ || !TEST_size_t_eq(cp->return_size, sizeof("tuvwxyz") - 1)
+ || !TEST_true(OSSL_PARAM_get_utf8_ptr(cp, (const char **)&bufp2))
+ || !TEST_str_eq(bufp2, "tuvwxyz")
+ || (tstid <= 1 && !TEST_ptr_eq(bufp2, bufp)))
+ goto err;
+ /* OCTET string */
+ if (!TEST_ptr(cp = OSSL_PARAM_locate(p, "octstr"))
+ || !TEST_true(OSSL_PARAM_set_octet_string(cp, "abcdefghi",
+ sizeof("abcdefghi")))
+ || !TEST_size_t_eq(cp->return_size, sizeof("abcdefghi")))
+ goto err;
+ /* Match the return size to avoid trailing garbage bytes */
+ cp->data_size = cp->return_size;
+ if (!TEST_true(OSSL_PARAM_get_octet_string(cp, &vpn, 0, &s))
+ || !TEST_size_t_eq(s, sizeof("abcdefghi"))
+ || !TEST_mem_eq(vpn, sizeof("abcdefghi"),
+ "abcdefghi", sizeof("abcdefghi")))
+ goto err;
+ vp = buf2;
+ if (!TEST_true(OSSL_PARAM_get_octet_string(cp, &vp, sizeof(buf2), &s))
+ || !TEST_size_t_eq(s, sizeof("abcdefghi"))
+ || !TEST_mem_eq(vp, sizeof("abcdefghi"),
+ "abcdefghi", sizeof("abcdefghi")))
+ goto err;
+ /* OCTET pointer */
+ vp = &l;
+ if (!TEST_ptr(cp = OSSL_PARAM_locate(p, "octptr"))
+ || !TEST_true(OSSL_PARAM_set_octet_ptr(cp, &ul, sizeof(ul)))
+ || !TEST_size_t_eq(cp->return_size, sizeof(ul))
+ || (tstid <= 1 && !TEST_ptr_eq(vp, &ul)))
+ goto err;
+ /* Match the return size to avoid trailing garbage bytes */
+ cp->data_size = cp->return_size;
+ if (!TEST_true(OSSL_PARAM_get_octet_ptr(cp, (const void **)&vp2, &k))
+ || !TEST_size_t_eq(k, sizeof(ul))
+ || (tstid <= 1 && !TEST_ptr_eq(vp2, vp)))
+ goto err;
+ /* BIGNUM */
+ if (!TEST_ptr(cp = OSSL_PARAM_locate(p, "bignum"))
+ || !TEST_ptr(bn = BN_lebin2bn(bn_val, (int)sizeof(bn_val), NULL))
+ || !TEST_true(OSSL_PARAM_set_BN(cp, bn))
+ || !TEST_size_t_eq(cp->data_size, cp->return_size))
+ goto err;
+ /* Match the return size to avoid trailing garbage bytes */
+ cp->data_size = cp->return_size;
+ if(!TEST_true(OSSL_PARAM_get_BN(cp, &bn2))
+ || !TEST_BN_eq(bn, bn2))
+ goto err;
+ ret = 1;
+err:
+ if (p != params)
+ OPENSSL_free(p);
+ OPENSSL_free(p1);
+ OPENSSL_free(vpn);
+ BN_free(bn);
+ BN_free(bn2);
+ return ret;
+}
+
+static int test_param_modified(void)
+{
+ OSSL_PARAM param[3] = { OSSL_PARAM_int("a", NULL),
+ OSSL_PARAM_int("b", NULL),
+ OSSL_PARAM_END };
+ int a, b;
+
+ param->data = &a;
+ param[1].data = &b;
+ if (!TEST_false(OSSL_PARAM_modified(param))
+ && !TEST_true(OSSL_PARAM_set_int32(param, 1234))
+ && !TEST_true(OSSL_PARAM_modified(param))
+ && !TEST_false(OSSL_PARAM_modified(param + 1))
+ && !TEST_true(OSSL_PARAM_set_int32(param + 1, 1))
+ && !TEST_true(OSSL_PARAM_modified(param + 1)))
+ return 0;
+ OSSL_PARAM_set_all_unmodified(param);
+ if (!TEST_false(OSSL_PARAM_modified(param))
+ && !TEST_true(OSSL_PARAM_set_int32(param, 4321))
+ && !TEST_true(OSSL_PARAM_modified(param))
+ && !TEST_false(OSSL_PARAM_modified(param + 1))
+ && !TEST_true(OSSL_PARAM_set_int32(param + 1, 2))
+ && !TEST_true(OSSL_PARAM_modified(param + 1)))
+ return 0;
+ return 1;
+}
+
+static int test_param_copy_null(void)
+{
+ int ret, val;
+ int a = 1, b = 2, i = 0;
+ OSSL_PARAM *cp1 = NULL, *cp2 = NULL, *p;
+ OSSL_PARAM param[3];
+
+ param[i++] = OSSL_PARAM_construct_int("a", &a);
+ param[i++] = OSSL_PARAM_construct_int("b", &b);
+ param[i] = OSSL_PARAM_construct_end();
+
+ ret = TEST_ptr_null(OSSL_PARAM_dup(NULL))
+ && TEST_ptr(cp1 = OSSL_PARAM_merge(NULL, param))
+ && TEST_ptr(p = OSSL_PARAM_locate(cp1, "a"))
+ && TEST_true(OSSL_PARAM_get_int(p, &val))
+ && TEST_int_eq(val, 1)
+ && TEST_ptr(p = OSSL_PARAM_locate(cp1, "b"))
+ && TEST_true(OSSL_PARAM_get_int(p, &val))
+ && TEST_int_eq(val, 2)
+ && TEST_ptr(cp2 = OSSL_PARAM_merge(param, NULL))
+ && TEST_ptr(p = OSSL_PARAM_locate(cp2, "a"))
+ && TEST_true(OSSL_PARAM_get_int(p, &val))
+ && TEST_int_eq(val, 1)
+ && TEST_ptr(p = OSSL_PARAM_locate(cp2, "b"))
+ && TEST_true(OSSL_PARAM_get_int(p, &val))
+ && TEST_int_eq(val, 2)
+ && TEST_ptr_null(OSSL_PARAM_merge(NULL, NULL));
+ OSSL_PARAM_free(cp2);
+ OSSL_PARAM_free(cp1);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_param_int, OSSL_NELEM(raw_values));
+ ADD_ALL_TESTS(test_param_long, OSSL_NELEM(raw_values));
+ ADD_ALL_TESTS(test_param_uint, OSSL_NELEM(raw_values));
+ ADD_ALL_TESTS(test_param_ulong, OSSL_NELEM(raw_values));
+ 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));
+ ADD_TEST(test_param_real);
+ ADD_ALL_TESTS(test_param_construct, 4);
+ ADD_TEST(test_param_modified);
+ ADD_TEST(test_param_copy_null);
+ return 1;
+}
diff --git a/test/params_conversion_test.c b/test/params_conversion_test.c
new file mode 100644
index 000000000000..30477e812796
--- /dev/null
+++ b/test/params_conversion_test.c
@@ -0,0 +1,368 @@
+/*
+ * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2019, Oracle and/or its affiliates. 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/params.h>
+#include "testutil.h"
+
+/* On machines that dont support <inttypes.h> just disable the tests */
+#if !defined(OPENSSL_NO_INTTYPES_H)
+
+# ifdef OPENSSL_SYS_VMS
+# define strtoumax strtoull
+# define strtoimax strtoll
+# endif
+
+typedef struct {
+ OSSL_PARAM *param;
+ int32_t i32;
+ int64_t i64;
+ uint32_t u32;
+ uint64_t u64;
+ double d;
+ int valid_i32, valid_i64, valid_u32, valid_u64, valid_d;
+ void *ref, *datum;
+ size_t size;
+} PARAM_CONVERSION;
+
+static int param_conversion_load_stanza(PARAM_CONVERSION *pc, const STANZA *s)
+{
+
+ static int32_t datum_i32, ref_i32;
+ static int64_t datum_i64, ref_i64;
+ static uint32_t datum_u32, ref_u32;
+ static uint64_t datum_u64, ref_u64;
+ static double datum_d, ref_d;
+ static OSSL_PARAM params[] = {
+ OSSL_PARAM_int32("int32", &datum_i32),
+ OSSL_PARAM_int64("int64", &datum_i64),
+ OSSL_PARAM_uint32("uint32", &datum_u32),
+ OSSL_PARAM_uint64("uint64", &datum_u64),
+ OSSL_PARAM_double("double", &datum_d),
+ OSSL_PARAM_END
+ };
+ int def_i32 = 0, def_i64 = 0, def_u32 = 0, def_u64 = 0, def_d = 0;
+ const PAIR *pp = s->pairs;
+ const char *type = NULL;
+ char *p;
+ int i;
+
+ memset(pc, 0, sizeof(*pc));
+
+ for (i = 0; i < s->numpairs; i++, pp++) {
+ p = "";
+ if (OPENSSL_strcasecmp(pp->key, "type") == 0) {
+ if (type != NULL) {
+ TEST_info("Line %d: multiple type lines", s->curr);
+ return 0;
+ }
+ pc->param = OSSL_PARAM_locate(params, type = pp->value);
+ if (pc->param == NULL) {
+ TEST_info("Line %d: unknown type line", s->curr);
+ return 0;
+ }
+ } else if (OPENSSL_strcasecmp(pp->key, "int32") == 0) {
+ if (def_i32++) {
+ TEST_info("Line %d: multiple int32 lines", s->curr);
+ return 0;
+ }
+ if (OPENSSL_strcasecmp(pp->value, "invalid") != 0) {
+ pc->valid_i32 = 1;
+ pc->i32 = (int32_t)strtoimax(pp->value, &p, 10);
+ }
+ } else if (OPENSSL_strcasecmp(pp->key, "int64") == 0) {
+ if (def_i64++) {
+ TEST_info("Line %d: multiple int64 lines", s->curr);
+ return 0;
+ }
+ if (OPENSSL_strcasecmp(pp->value, "invalid") != 0) {
+ pc->valid_i64 = 1;
+ pc->i64 = (int64_t)strtoimax(pp->value, &p, 10);
+ }
+ } else if (OPENSSL_strcasecmp(pp->key, "uint32") == 0) {
+ if (def_u32++) {
+ TEST_info("Line %d: multiple uint32 lines", s->curr);
+ return 0;
+ }
+ if (OPENSSL_strcasecmp(pp->value, "invalid") != 0) {
+ pc->valid_u32 = 1;
+ pc->u32 = (uint32_t)strtoumax(pp->value, &p, 10);
+ }
+ } else if (OPENSSL_strcasecmp(pp->key, "uint64") == 0) {
+ if (def_u64++) {
+ TEST_info("Line %d: multiple uint64 lines", s->curr);
+ return 0;
+ }
+ if (OPENSSL_strcasecmp(pp->value, "invalid") != 0) {
+ pc->valid_u64 = 1;
+ pc->u64 = (uint64_t)strtoumax(pp->value, &p, 10);
+ }
+ } else if (OPENSSL_strcasecmp(pp->key, "double") == 0) {
+ if (def_d++) {
+ TEST_info("Line %d: multiple double lines", s->curr);
+ return 0;
+ }
+ if (OPENSSL_strcasecmp(pp->value, "invalid") != 0) {
+ pc->valid_d = 1;
+ pc->d = strtod(pp->value, &p);
+ }
+ } else {
+ TEST_info("Line %d: unknown keyword %s", s->curr, pp->key);
+ return 0;
+ }
+ if (*p != '\0') {
+ TEST_info("Line %d: extra characters at end '%s' for %s",
+ s->curr, p, pp->key);
+ return 0;
+ }
+ }
+
+ if (!TEST_ptr(type)) {
+ TEST_info("Line %d: type not found", s->curr);
+ return 0;
+ }
+
+ if (OPENSSL_strcasecmp(type, "int32") == 0) {
+ if (!TEST_true(def_i32) || !TEST_true(pc->valid_i32)) {
+ TEST_note("errant int32 on line %d", s->curr);
+ return 0;
+ }
+ datum_i32 = ref_i32 = pc->i32;
+ pc->datum = &datum_i32;
+ pc->ref = &ref_i32;
+ pc->size = sizeof(ref_i32);
+ } else if (OPENSSL_strcasecmp(type, "int64") == 0) {
+ if (!TEST_true(def_i64) || !TEST_true(pc->valid_i64)) {
+ TEST_note("errant int64 on line %d", s->curr);
+ return 0;
+ }
+ datum_i64 = ref_i64 = pc->i64;
+ pc->datum = &datum_i64;
+ pc->ref = &ref_i64;
+ pc->size = sizeof(ref_i64);
+ } else if (OPENSSL_strcasecmp(type, "uint32") == 0) {
+ if (!TEST_true(def_u32) || !TEST_true(pc->valid_u32)) {
+ TEST_note("errant uint32 on line %d", s->curr);
+ return 0;
+ }
+ datum_u32 = ref_u32 = pc->u32;
+ pc->datum = &datum_u32;
+ pc->ref = &ref_u32;
+ pc->size = sizeof(ref_u32);
+ } else if (OPENSSL_strcasecmp(type, "uint64") == 0) {
+ if (!TEST_true(def_u64) || !TEST_true(pc->valid_u64)) {
+ TEST_note("errant uint64 on line %d", s->curr);
+ return 0;
+ }
+ datum_u64 = ref_u64 = pc->u64;
+ pc->datum = &datum_u64;
+ pc->ref = &ref_u64;
+ pc->size = sizeof(ref_u64);
+ } else if (OPENSSL_strcasecmp(type, "double") == 0) {
+ if (!TEST_true(def_d) || !TEST_true(pc->valid_d)) {
+ TEST_note("errant double on line %d", s->curr);
+ return 0;
+ }
+ datum_d = ref_d = pc->d;
+ pc->datum = &datum_d;
+ pc->ref = &ref_d;
+ pc->size = sizeof(ref_d);
+ } else {
+ TEST_error("type unknown at line %d", s->curr);
+ return 0;
+ }
+ return 1;
+}
+
+static int param_conversion_test(const PARAM_CONVERSION *pc, int line)
+{
+ int32_t i32;
+ int64_t i64;
+ uint32_t u32;
+ uint64_t u64;
+ double d;
+
+ if (!pc->valid_i32) {
+ if (!TEST_false(OSSL_PARAM_get_int32(pc->param, &i32))) {
+ TEST_note("unexpected valid conversion to int32 on line %d", line);
+ return 0;
+ }
+ } else {
+ if (!TEST_true(OSSL_PARAM_get_int32(pc->param, &i32))
+ || !TEST_true(i32 == pc->i32)) {
+ TEST_note("unexpected conversion to int32 on line %d", line);
+ return 0;
+ }
+ memset(pc->datum, 44, pc->size);
+ if (!TEST_true(OSSL_PARAM_set_int32(pc->param, i32))
+ || !TEST_mem_eq(pc->datum, pc->size, pc->ref, pc->size)) {
+ TEST_note("unexpected valid conversion from int32 on line %d",
+ line);
+ return 0;
+ }
+ }
+
+ if (!pc->valid_i64) {
+ if (!TEST_false(OSSL_PARAM_get_int64(pc->param, &i64))) {
+ TEST_note("unexpected valid conversion to int64 on line %d", line);
+ return 0;
+ }
+ } else {
+ if (!TEST_true(OSSL_PARAM_get_int64(pc->param, &i64))
+ || !TEST_true(i64 == pc->i64)) {
+ TEST_note("unexpected conversion to int64 on line %d", line);
+ return 0;
+ }
+ memset(pc->datum, 44, pc->size);
+ if (!TEST_true(OSSL_PARAM_set_int64(pc->param, i64))
+ || !TEST_mem_eq(pc->datum, pc->size, pc->ref, pc->size)) {
+ TEST_note("unexpected valid conversion from int64 on line %d",
+ line);
+ return 0;
+ }
+ }
+
+ if (!pc->valid_u32) {
+ if (!TEST_false(OSSL_PARAM_get_uint32(pc->param, &u32))) {
+ TEST_note("unexpected valid conversion to uint32 on line %d", line);
+ return 0;
+ }
+ } else {
+ if (!TEST_true(OSSL_PARAM_get_uint32(pc->param, &u32))
+ || !TEST_true(u32 == pc->u32)) {
+ TEST_note("unexpected conversion to uint32 on line %d", line);
+ return 0;
+ }
+ memset(pc->datum, 44, pc->size);
+ if (!TEST_true(OSSL_PARAM_set_uint32(pc->param, u32))
+ || !TEST_mem_eq(pc->datum, pc->size, pc->ref, pc->size)) {
+ TEST_note("unexpected valid conversion from uint32 on line %d",
+ line);
+ return 0;
+ }
+ }
+
+ if (!pc->valid_u64) {
+ if (!TEST_false(OSSL_PARAM_get_uint64(pc->param, &u64))) {
+ TEST_note("unexpected valid conversion to uint64 on line %d", line);
+ return 0;
+ }
+ } else {
+ if (!TEST_true(OSSL_PARAM_get_uint64(pc->param, &u64))
+ || !TEST_true(u64 == pc->u64)) {
+ TEST_note("unexpected conversion to uint64 on line %d", line);
+ return 0;
+ }
+ memset(pc->datum, 44, pc->size);
+ if (!TEST_true(OSSL_PARAM_set_uint64(pc->param, u64))
+ || !TEST_mem_eq(pc->datum, pc->size, pc->ref, pc->size)) {
+ TEST_note("unexpected valid conversion from uint64 on line %d",
+ line);
+ return 0;
+ }
+ }
+
+ if (!pc->valid_d) {
+ if (!TEST_false(OSSL_PARAM_get_double(pc->param, &d))) {
+ TEST_note("unexpected valid conversion to double on line %d", line);
+ return 0;
+ }
+ } else {
+ if (!TEST_true(OSSL_PARAM_get_double(pc->param, &d))) {
+ TEST_note("unable to convert to double on line %d", line);
+ return 0;
+ }
+ /*
+ * Check for not a number (NaN) without using the libm functions.
+ * When d is a NaN, the standard requires d == d to be false.
+ * It's less clear if d != d should be true even though it generally is.
+ * Hence we use the equality test and a not.
+ */
+ if (!(d == d)) {
+ /*
+ * We've encountered a NaN so check it's really meant to be a NaN.
+ * We ignore the case where the two values are both different NaN,
+ * that's not resolvable without knowing the underlying format
+ * or using libm functions.
+ */
+ if (!TEST_false(pc->d == pc->d)) {
+ TEST_note("unexpected NaN on line %d", line);
+ return 0;
+ }
+ } else if (!TEST_true(d == pc->d)) {
+ TEST_note("unexpected conversion to double on line %d", line);
+ return 0;
+ }
+ memset(pc->datum, 44, pc->size);
+ if (!TEST_true(OSSL_PARAM_set_double(pc->param, d))
+ || !TEST_mem_eq(pc->datum, pc->size, pc->ref, pc->size)) {
+ TEST_note("unexpected valid conversion from double on line %d",
+ line);
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int run_param_file_tests(int i)
+{
+ STANZA *s;
+ PARAM_CONVERSION pc;
+ const char *testfile = test_get_argument(i);
+ int res = 1;
+
+ if (!TEST_ptr(s = OPENSSL_zalloc(sizeof(*s))))
+ return 0;
+ if (!test_start_file(s, testfile)) {
+ OPENSSL_free(s);
+ return 0;
+ }
+
+ while (!BIO_eof(s->fp)) {
+ if (!test_readstanza(s)) {
+ res = 0;
+ goto end;
+ }
+ if (s->numpairs != 0)
+ if (!param_conversion_load_stanza(&pc, s)
+ || !param_conversion_test(&pc, s->curr))
+ res = 0;
+ test_clearstanza(s);
+ }
+end:
+ test_end_file(s);
+ OPENSSL_free(s);
+ return res;
+}
+
+#endif /* OPENSSL_NO_INTTYPES_H */
+
+OPT_TEST_DECLARE_USAGE("file...\n")
+
+int setup_tests(void)
+{
+ size_t n;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ n = test_get_argument_count();
+ if (n == 0)
+ return 0;
+
+#if !defined(OPENSSL_NO_INTTYPES_H)
+ ADD_ALL_TESTS(run_param_file_tests, n);
+#endif /* OPENSSL_NO_INTTYPES_H */
+
+ return 1;
+}
diff --git a/test/params_test.c b/test/params_test.c
new file mode 100644
index 000000000000..5d19f0304e6c
--- /dev/null
+++ b/test/params_test.c
@@ -0,0 +1,712 @@
+/*
+ * Copyright 2019-2024 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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+/*
+ * This program tests the use of OSSL_PARAM, currently in raw form.
+ */
+
+#include <string.h>
+#include <openssl/bn.h>
+#include <openssl/core.h>
+#include <openssl/err.h>
+#include <openssl/params.h>
+#include "internal/numbers.h"
+#include "internal/nelem.h"
+#include "testutil.h"
+
+/*-
+ * PROVIDER SECTION
+ * ================
+ *
+ * Even though it's not necessarily ONLY providers doing this part,
+ * they are naturally going to be the most common users of
+ * set_params and get_params functions.
+ */
+
+/*
+ * In real use cases, setters and getters would take an object with
+ * which the parameters are associated. This structure is a cheap
+ * simulation.
+ */
+struct object_st {
+ /*
+ * Documented as a native integer, of the size given by sizeof(int).
+ * Assumed data type OSSL_PARAM_INTEGER
+ */
+ int p1;
+ /*
+ * Documented as a native double, of the size given by sizeof(double).
+ * Assumed data type OSSL_PARAM_REAL
+ */
+ double p2;
+ /*
+ * Documented as an arbitrarly large unsigned integer.
+ * The data size must be large enough to accommodate.
+ * Assumed data type OSSL_PARAM_UNSIGNED_INTEGER
+ */
+ BIGNUM *p3;
+ /*
+ * Documented as a C string.
+ * The data size must be large enough to accommodate.
+ * Assumed data type OSSL_PARAM_UTF8_STRING
+ */
+ char *p4;
+ size_t p4_l;
+ /*
+ * Documented as a C string.
+ * Assumed data type OSSL_PARAM_UTF8_STRING
+ */
+ char p5[256];
+ size_t p5_l;
+ /*
+ * Documented as a pointer to a constant C string.
+ * Assumed data type OSSL_PARAM_UTF8_PTR
+ */
+ const char *p6;
+ size_t p6_l;
+};
+
+#define p1_init 42 /* The ultimate answer */
+#define p2_init 6.283 /* Magic number */
+/* Stolen from evp_data, BLAKE2s256 test */
+#define p3_init \
+ "4142434445464748494a4b4c4d4e4f50" \
+ "5152535455565758595a616263646566" \
+ "6768696a6b6c6d6e6f70717273747576" \
+ "7778797a30313233343536373839"
+#define p4_init "BLAKE2s256" /* Random string */
+#define p5_init "Hellow World" /* Random string */
+#define p6_init OPENSSL_FULL_VERSION_STR /* Static string */
+
+static void cleanup_object(void *vobj)
+{
+ struct object_st *obj = vobj;
+
+ BN_free(obj->p3);
+ obj->p3 = NULL;
+ OPENSSL_free(obj->p4);
+ obj->p4 = NULL;
+ OPENSSL_free(obj);
+}
+
+static void *init_object(void)
+{
+ struct object_st *obj;
+
+ if (!TEST_ptr(obj = OPENSSL_zalloc(sizeof(*obj))))
+ return NULL;
+
+ obj->p1 = p1_init;
+ obj->p2 = p2_init;
+ if (!TEST_true(BN_hex2bn(&obj->p3, p3_init)))
+ goto fail;
+ if (!TEST_ptr(obj->p4 = OPENSSL_strdup(p4_init)))
+ goto fail;
+ strcpy(obj->p5, p5_init);
+ obj->p6 = p6_init;
+
+ return obj;
+ fail:
+ cleanup_object(obj);
+ obj = NULL;
+
+ return NULL;
+}
+
+/*
+ * RAW provider, which handles the parameters in a very raw manner,
+ * with no fancy API and very minimal checking. The application that
+ * calls these to set or request parameters MUST get its OSSL_PARAM
+ * array right.
+ */
+
+static int raw_set_params(void *vobj, const OSSL_PARAM *params)
+{
+ struct object_st *obj = vobj;
+
+ for (; params->key != NULL; params++)
+ if (strcmp(params->key, "p1") == 0) {
+ obj->p1 = *(int *)params->data;
+ } else if (strcmp(params->key, "p2") == 0) {
+ obj->p2 = *(double *)params->data;
+ } else if (strcmp(params->key, "p3") == 0) {
+ BN_free(obj->p3);
+ if (!TEST_ptr(obj->p3 = BN_native2bn(params->data,
+ params->data_size, NULL)))
+ return 0;
+ } else if (strcmp(params->key, "p4") == 0) {
+ OPENSSL_free(obj->p4);
+ if (!TEST_ptr(obj->p4 = OPENSSL_strndup(params->data,
+ params->data_size)))
+ return 0;
+ obj->p4_l = strlen(obj->p4);
+ } else if (strcmp(params->key, "p5") == 0) {
+ /*
+ * Protect obj->p5 against too much data. This should not
+ * happen, we don't use that long strings.
+ */
+ size_t data_length =
+ OPENSSL_strnlen(params->data, params->data_size);
+
+ if (!TEST_size_t_lt(data_length, sizeof(obj->p5)))
+ return 0;
+ strncpy(obj->p5, params->data, data_length);
+ obj->p5[data_length] = '\0';
+ obj->p5_l = strlen(obj->p5);
+ } else if (strcmp(params->key, "p6") == 0) {
+ obj->p6 = *(const char **)params->data;
+ obj->p6_l = params->data_size;
+ }
+
+ return 1;
+}
+
+static int raw_get_params(void *vobj, OSSL_PARAM *params)
+{
+ struct object_st *obj = vobj;
+
+ for (; params->key != NULL; params++)
+ if (strcmp(params->key, "p1") == 0) {
+ params->return_size = sizeof(obj->p1);
+ *(int *)params->data = obj->p1;
+ } else if (strcmp(params->key, "p2") == 0) {
+ params->return_size = sizeof(obj->p2);
+ *(double *)params->data = obj->p2;
+ } else if (strcmp(params->key, "p3") == 0) {
+ params->return_size = BN_num_bytes(obj->p3);
+ if (!TEST_size_t_ge(params->data_size, params->return_size))
+ return 0;
+ BN_bn2nativepad(obj->p3, params->data, params->return_size);
+ } else if (strcmp(params->key, "p4") == 0) {
+ params->return_size = strlen(obj->p4);
+ if (!TEST_size_t_gt(params->data_size, params->return_size))
+ return 0;
+ strcpy(params->data, obj->p4);
+ } else if (strcmp(params->key, "p5") == 0) {
+ params->return_size = strlen(obj->p5);
+ if (!TEST_size_t_gt(params->data_size, params->return_size))
+ return 0;
+ strcpy(params->data, obj->p5);
+ } else if (strcmp(params->key, "p6") == 0) {
+ params->return_size = strlen(obj->p6);
+ *(const char **)params->data = obj->p6;
+ }
+
+ return 1;
+}
+
+/*
+ * API provider, which handles the parameters using the API from params.h
+ */
+
+static int api_set_params(void *vobj, const OSSL_PARAM *params)
+{
+ struct object_st *obj = vobj;
+ const OSSL_PARAM *p = NULL;
+
+ if ((p = OSSL_PARAM_locate_const(params, "p1")) != NULL
+ && !TEST_true(OSSL_PARAM_get_int(p, &obj->p1)))
+ return 0;
+ if ((p = OSSL_PARAM_locate_const(params, "p2")) != NULL
+ && !TEST_true(OSSL_PARAM_get_double(p, &obj->p2)))
+ return 0;
+ if ((p = OSSL_PARAM_locate_const(params, "p3")) != NULL
+ && !TEST_true(OSSL_PARAM_get_BN(p, &obj->p3)))
+ return 0;
+ if ((p = OSSL_PARAM_locate_const(params, "p4")) != NULL) {
+ OPENSSL_free(obj->p4);
+ obj->p4 = NULL;
+ /* If the value pointer is NULL, we get it automatically allocated */
+ if (!TEST_true(OSSL_PARAM_get_utf8_string(p, &obj->p4, 0)))
+ return 0;
+ }
+ if ((p = OSSL_PARAM_locate_const(params, "p5")) != NULL) {
+ char *p5_ptr = obj->p5;
+ if (!TEST_true(OSSL_PARAM_get_utf8_string(p, &p5_ptr, sizeof(obj->p5))))
+ return 0;
+ obj->p5_l = strlen(obj->p5);
+ }
+ if ((p = OSSL_PARAM_locate_const(params, "p6")) != NULL) {
+ if (!TEST_true(OSSL_PARAM_get_utf8_ptr(p, &obj->p6)))
+ return 0;
+ obj->p6_l = strlen(obj->p6);
+ }
+
+ return 1;
+}
+
+static int api_get_params(void *vobj, OSSL_PARAM *params)
+{
+ struct object_st *obj = vobj;
+ OSSL_PARAM *p = NULL;
+
+ if ((p = OSSL_PARAM_locate(params, "p1")) != NULL
+ && !TEST_true(OSSL_PARAM_set_int(p, obj->p1)))
+ return 0;
+ if ((p = OSSL_PARAM_locate(params, "p2")) != NULL
+ && !TEST_true(OSSL_PARAM_set_double(p, obj->p2)))
+ return 0;
+ if ((p = OSSL_PARAM_locate(params, "p3")) != NULL
+ && !TEST_true(OSSL_PARAM_set_BN(p, obj->p3)))
+ return 0;
+ if ((p = OSSL_PARAM_locate(params, "p4")) != NULL
+ && !TEST_true(OSSL_PARAM_set_utf8_string(p, obj->p4)))
+ return 0;
+ if ((p = OSSL_PARAM_locate(params, "p5")) != NULL
+ && !TEST_true(OSSL_PARAM_set_utf8_string(p, obj->p5)))
+ return 0;
+ if ((p = OSSL_PARAM_locate(params, "p6")) != NULL
+ && !TEST_true(OSSL_PARAM_set_utf8_ptr(p, obj->p6)))
+ return 0;
+
+ return 1;
+}
+
+/*
+ * This structure only simulates a provider dispatch, the real deal is
+ * a bit more code that's not necessary in these tests.
+ */
+struct provider_dispatch_st {
+ int (*set_params)(void *obj, const OSSL_PARAM *params);
+ int (*get_params)(void *obj, OSSL_PARAM *params);
+};
+
+/* "raw" provider */
+static const struct provider_dispatch_st provider_raw = {
+ raw_set_params, raw_get_params
+};
+
+/* "api" provider */
+static const struct provider_dispatch_st provider_api = {
+ api_set_params, api_get_params
+};
+
+/*-
+ * APPLICATION SECTION
+ * ===================
+ */
+
+/* In all our tests, these are variables that get manipulated as parameters
+ *
+ * These arrays consistently do nothing with the "p2" parameter, and
+ * always include a "foo" parameter. This is to check that the
+ * set_params and get_params calls ignore the lack of parameters that
+ * the application isn't interested in, as well as ignore parameters
+ * they don't understand (the application may have one big bag of
+ * parameters).
+ */
+static int app_p1; /* "p1" */
+static double app_p2; /* "p2" is ignored */
+static BIGNUM *app_p3 = NULL; /* "p3" */
+static unsigned char bignumbin[4096]; /* "p3" */
+static char app_p4[256]; /* "p4" */
+static char app_p5[256]; /* "p5" */
+static const char *app_p6 = NULL; /* "p6" */
+static unsigned char foo[1]; /* "foo" */
+
+#define app_p1_init 17 /* A random number */
+#define app_p2_init 47.11 /* Another random number */
+#define app_p3_init "deadbeef" /* Classic */
+#define app_p4_init "Hello"
+#define app_p5_init "World"
+#define app_p6_init "Cookie"
+#define app_foo_init 'z'
+
+static int cleanup_app_variables(void)
+{
+ BN_free(app_p3);
+ app_p3 = NULL;
+ return 1;
+}
+
+static int init_app_variables(void)
+{
+ int l = 0;
+
+ cleanup_app_variables();
+
+ app_p1 = app_p1_init;
+ app_p2 = app_p2_init;
+ if (!BN_hex2bn(&app_p3, app_p3_init)
+ || (l = BN_bn2nativepad(app_p3, bignumbin, sizeof(bignumbin))) < 0)
+ return 0;
+ strcpy(app_p4, app_p4_init);
+ strcpy(app_p5, app_p5_init);
+ app_p6 = app_p6_init;
+ foo[0] = app_foo_init;
+
+ return 1;
+}
+
+/*
+ * Here, we define test OSSL_PARAM arrays
+ */
+
+/* An array of OSSL_PARAM, specific in the most raw manner possible */
+static OSSL_PARAM static_raw_params[] = {
+ { "p1", OSSL_PARAM_INTEGER, &app_p1, sizeof(app_p1), 0 },
+ { "p3", OSSL_PARAM_UNSIGNED_INTEGER, &bignumbin, sizeof(bignumbin), 0 },
+ { "p4", OSSL_PARAM_UTF8_STRING, &app_p4, sizeof(app_p4), 0 },
+ { "p5", OSSL_PARAM_UTF8_STRING, &app_p5, sizeof(app_p5), 0 },
+ /* sizeof(app_p6_init) - 1, because we know that's what we're using */
+ { "p6", OSSL_PARAM_UTF8_PTR, &app_p6, sizeof(app_p6_init) - 1, 0 },
+ { "foo", OSSL_PARAM_OCTET_STRING, &foo, sizeof(foo), 0 },
+ { NULL, 0, NULL, 0, 0 }
+};
+
+/* The same array of OSSL_PARAM, specified with the macros from params.h */
+static OSSL_PARAM static_api_params[] = {
+ OSSL_PARAM_int("p1", &app_p1),
+ OSSL_PARAM_BN("p3", &bignumbin, sizeof(bignumbin)),
+ OSSL_PARAM_DEFN("p4", OSSL_PARAM_UTF8_STRING, &app_p4, sizeof(app_p4)),
+ OSSL_PARAM_DEFN("p5", OSSL_PARAM_UTF8_STRING, &app_p5, sizeof(app_p5)),
+ /* sizeof(app_p6_init), because we know that's what we're using */
+ OSSL_PARAM_DEFN("p6", OSSL_PARAM_UTF8_PTR, &app_p6,
+ sizeof(app_p6_init) - 1),
+ OSSL_PARAM_DEFN("foo", OSSL_PARAM_OCTET_STRING, &foo, sizeof(foo)),
+ OSSL_PARAM_END
+};
+
+/*
+ * The same array again, but constructed at run-time
+ * This exercises the OSSL_PARAM constructor functions
+ */
+static OSSL_PARAM *construct_api_params(void)
+{
+ size_t n = 0;
+ static OSSL_PARAM params[10];
+
+ params[n++] = OSSL_PARAM_construct_int("p1", &app_p1);
+ params[n++] = OSSL_PARAM_construct_BN("p3", bignumbin, sizeof(bignumbin));
+ params[n++] = OSSL_PARAM_construct_utf8_string("p4", app_p4,
+ sizeof(app_p4));
+ params[n++] = OSSL_PARAM_construct_utf8_string("p5", app_p5,
+ sizeof(app_p5));
+ /* sizeof(app_p6_init), because we know that's what we're using */
+ params[n++] = OSSL_PARAM_construct_utf8_ptr("p6", (char **)&app_p6,
+ sizeof(app_p6_init));
+ params[n++] = OSSL_PARAM_construct_octet_string("foo", &foo, sizeof(foo));
+ params[n++] = OSSL_PARAM_construct_end();
+
+ return params;
+}
+
+struct param_owner_st {
+ OSSL_PARAM *static_params;
+ OSSL_PARAM *(*constructed_params)(void);
+};
+
+static const struct param_owner_st raw_params = {
+ static_raw_params, NULL
+};
+
+static const struct param_owner_st api_params = {
+ static_api_params, construct_api_params
+};
+
+/*-
+ * TESTING
+ * =======
+ */
+
+/*
+ * Test cases to combine parameters with "provider side" functions
+ */
+static struct {
+ const struct provider_dispatch_st *prov;
+ const struct param_owner_st *app;
+ const char *desc;
+} test_cases[] = {
+ /* Tests within specific methods */
+ { &provider_raw, &raw_params, "raw provider vs raw params" },
+ { &provider_api, &api_params, "api provider vs api params" },
+
+ /* Mixed methods */
+ { &provider_raw, &api_params, "raw provider vs api params" },
+ { &provider_api, &raw_params, "api provider vs raw params" },
+};
+
+/* Generic tester of combinations of "providers" and params */
+static int test_case_variant(OSSL_PARAM *params, const struct provider_dispatch_st *prov)
+{
+ BIGNUM *verify_p3 = NULL;
+ void *obj = NULL;
+ int errcnt = 0;
+ OSSL_PARAM *p;
+
+ /*
+ * Initialize
+ */
+ if (!TEST_ptr(obj = init_object())
+ || !TEST_true(BN_hex2bn(&verify_p3, p3_init))) {
+ errcnt++;
+ goto fin;
+ }
+
+ /*
+ * Get parameters a first time, just to see that getting works and
+ * gets us the values we expect.
+ */
+ init_app_variables();
+
+ if (!TEST_true(prov->get_params(obj, params))
+ || !TEST_int_eq(app_p1, p1_init) /* "provider" value */
+ || !TEST_double_eq(app_p2, app_p2_init) /* Should remain untouched */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "p3"))
+ || !TEST_ptr(BN_native2bn(bignumbin, p->return_size, app_p3))
+ || !TEST_BN_eq(app_p3, verify_p3) /* "provider" value */
+ || !TEST_str_eq(app_p4, p4_init) /* "provider" value */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "p5"))
+ || !TEST_size_t_eq(p->return_size,
+ sizeof(p5_init) - 1) /* "provider" value */
+ || !TEST_str_eq(app_p5, p5_init) /* "provider" value */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "p6"))
+ || !TEST_size_t_eq(p->return_size,
+ sizeof(p6_init) - 1) /* "provider" value */
+ || !TEST_str_eq(app_p6, p6_init) /* "provider" value */
+ || !TEST_char_eq(foo[0], app_foo_init) /* Should remain untouched */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "foo")))
+ errcnt++;
+
+ /*
+ * Set parameters, then sneak into the object itself and check
+ * that its attributes got set (or ignored) properly.
+ */
+ init_app_variables();
+
+ if (!TEST_true(prov->set_params(obj, params))) {
+ errcnt++;
+ } else {
+ struct object_st *sneakpeek = obj;
+
+ if (!TEST_int_eq(sneakpeek->p1, app_p1) /* app value set */
+ || !TEST_double_eq(sneakpeek->p2, p2_init) /* Should remain untouched */
+ || !TEST_BN_eq(sneakpeek->p3, app_p3) /* app value set */
+ || !TEST_str_eq(sneakpeek->p4, app_p4) /* app value set */
+ || !TEST_str_eq(sneakpeek->p5, app_p5) /* app value set */
+ || !TEST_str_eq(sneakpeek->p6, app_p6)) /* app value set */
+ errcnt++;
+ }
+
+ /*
+ * Get parameters again, checking that we get different values
+ * than earlier where relevant.
+ */
+ BN_free(verify_p3);
+ verify_p3 = NULL;
+
+ if (!TEST_true(BN_hex2bn(&verify_p3, app_p3_init))) {
+ errcnt++;
+ goto fin;
+ }
+
+ if (!TEST_true(prov->get_params(obj, params))
+ || !TEST_int_eq(app_p1, app_p1_init) /* app value */
+ || !TEST_double_eq(app_p2, app_p2_init) /* Should remain untouched */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "p3"))
+ || !TEST_ptr(BN_native2bn(bignumbin, p->return_size, app_p3))
+ || !TEST_BN_eq(app_p3, verify_p3) /* app value */
+ || !TEST_str_eq(app_p4, app_p4_init) /* app value */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "p5"))
+ || !TEST_size_t_eq(p->return_size,
+ sizeof(app_p5_init) - 1) /* app value */
+ || !TEST_str_eq(app_p5, app_p5_init) /* app value */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "p6"))
+ || !TEST_size_t_eq(p->return_size,
+ sizeof(app_p6_init) - 1) /* app value */
+ || !TEST_str_eq(app_p6, app_p6_init) /* app value */
+ || !TEST_char_eq(foo[0], app_foo_init) /* Should remain untouched */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "foo")))
+ errcnt++;
+
+ fin:
+ BN_free(verify_p3);
+ verify_p3 = NULL;
+ cleanup_app_variables();
+ cleanup_object(obj);
+
+ return errcnt == 0;
+}
+
+static int test_case(int i)
+{
+ TEST_info("Case: %s", test_cases[i].desc);
+
+ return test_case_variant(test_cases[i].app->static_params,
+ test_cases[i].prov)
+ && (test_cases[i].app->constructed_params == NULL
+ || test_case_variant(test_cases[i].app->constructed_params(),
+ test_cases[i].prov));
+}
+
+/*-
+ * OSSL_PARAM_allocate_from_text() tests
+ * =====================================
+ */
+
+static const OSSL_PARAM params_from_text[] = {
+ /* Fixed size buffer */
+ OSSL_PARAM_int32("int", NULL),
+ OSSL_PARAM_DEFN("short", OSSL_PARAM_INTEGER, NULL, sizeof(int16_t)),
+ OSSL_PARAM_DEFN("ushort", OSSL_PARAM_UNSIGNED_INTEGER, NULL, sizeof(uint16_t)),
+ /* Arbitrary size buffer. Make sure the result fits in a long */
+ OSSL_PARAM_DEFN("num", OSSL_PARAM_INTEGER, NULL, 0),
+ OSSL_PARAM_DEFN("unum", OSSL_PARAM_UNSIGNED_INTEGER, NULL, 0),
+ OSSL_PARAM_DEFN("octets", OSSL_PARAM_OCTET_STRING, NULL, 0),
+ OSSL_PARAM_END,
+};
+
+struct int_from_text_test_st {
+ const char *argname;
+ const char *strval;
+ long int expected_intval;
+ int expected_res;
+ size_t expected_bufsize;
+};
+
+static struct int_from_text_test_st int_from_text_test_cases[] = {
+ { "int", "", 0, 0, 0 },
+ { "int", "0", 0, 1, 4 },
+ { "int", "101", 101, 1, 4 },
+ { "int", "-102", -102, 1, 4 },
+ { "int", "12A", 12, 1, 4 }, /* incomplete */
+ { "int", "0x12B", 0x12B, 1, 4 },
+ { "hexint", "12C", 0x12C, 1, 4 },
+ { "hexint", "0x12D", 0, 1, 4 }, /* zero */
+ /* test check of the target buffer size */
+ { "int", "0x7fffffff", INT32_MAX, 1, 4 },
+ { "int", "2147483647", INT32_MAX, 1, 4 },
+ { "int", "2147483648", 0, 0, 0 }, /* too small buffer */
+ { "int", "-2147483648", INT32_MIN, 1, 4 },
+ { "int", "-2147483649", 0, 0, 4 }, /* too small buffer */
+ { "short", "0x7fff", INT16_MAX, 1, 2 },
+ { "short", "32767", INT16_MAX, 1, 2 },
+ { "short", "32768", 0, 0, 0 }, /* too small buffer */
+ { "ushort", "0xffff", UINT16_MAX, 1, 2 },
+ { "ushort", "65535", UINT16_MAX, 1, 2 },
+ { "ushort", "65536", 0, 0, 0 }, /* too small buffer */
+ /* test check of sign extension in arbitrary size results */
+ { "num", "0", 0, 1, 1 },
+ { "num", "0", 0, 1, 1 },
+ { "num", "0xff", 0xff, 1, 2 }, /* sign extension */
+ { "num", "-0xff", -0xff, 1, 2 }, /* sign extension */
+ { "num", "0x7f", 0x7f, 1, 1 }, /* no sign extension */
+ { "num", "-0x7f", -0x7f, 1, 1 }, /* no sign extension */
+ { "num", "0x80", 0x80, 1, 2 }, /* sign extension */
+ { "num", "-0x80", -0x80, 1, 1 }, /* no sign extension */
+ { "num", "0x81", 0x81, 1, 2 }, /* sign extension */
+ { "num", "-0x81", -0x81, 1, 2 }, /* sign extension */
+ { "unum", "0xff", 0xff, 1, 1 },
+ { "unum", "-0xff", -0xff, 0, 0 }, /* invalid neg number */
+ { "unum", "0x7f", 0x7f, 1, 1 },
+ { "unum", "-0x7f", -0x7f, 0, 0 }, /* invalid neg number */
+ { "unum", "0x80", 0x80, 1, 1 },
+ { "unum", "-0x80", -0x80, 0, 0 }, /* invalid neg number */
+ { "unum", "0x81", 0x81, 1, 1 },
+ { "unum", "-0x81", -0x81, 0, 0 }, /* invalid neg number */
+};
+
+static int check_int_from_text(const struct int_from_text_test_st a)
+{
+ OSSL_PARAM param;
+ long int val = 0;
+ int res;
+
+ if (!OSSL_PARAM_allocate_from_text(&param, params_from_text,
+ a.argname, a.strval, 0, NULL)) {
+ if (a.expected_res)
+ TEST_error("unexpected OSSL_PARAM_allocate_from_text() return for %s \"%s\"",
+ a.argname, a.strval);
+ return !a.expected_res;
+ }
+
+ /* For data size zero, OSSL_PARAM_get_long() may crash */
+ if (param.data_size == 0) {
+ OPENSSL_free(param.data);
+ TEST_error("unexpected zero size for %s \"%s\"",
+ a.argname, a.strval);
+ return 0;
+ }
+ res = OSSL_PARAM_get_long(&param, &val);
+ OPENSSL_free(param.data);
+
+ if (res ^ a.expected_res) {
+ TEST_error("unexpected OSSL_PARAM_get_long() return for %s \"%s\": "
+ "%d != %d", a.argname, a.strval, a.expected_res, res);
+ return 0;
+ }
+ if (val != a.expected_intval) {
+ TEST_error("unexpected result for %s \"%s\": %li != %li",
+ a.argname, a.strval, a.expected_intval, val);
+ return 0;
+ }
+ if (param.data_size != a.expected_bufsize) {
+ TEST_error("unexpected size for %s \"%s\": %d != %d",
+ a.argname, a.strval,
+ (int)a.expected_bufsize, (int)param.data_size);
+ return 0;
+ }
+
+ return a.expected_res;
+}
+
+static int check_octetstr_from_hexstr(void)
+{
+ OSSL_PARAM param;
+ static const char *values[] = { "", "F", "FF", "FFF", "FFFF", NULL };
+ int i;
+ int errcnt = 0;
+
+ /* Test odd vs even number of hex digits */
+ for (i = 0; values[i] != NULL; i++) {
+ int expected = (strlen(values[i]) % 2) != 1;
+ int result;
+
+ ERR_clear_error();
+ memset(&param, 0, sizeof(param));
+ if (expected)
+ result =
+ TEST_true(OSSL_PARAM_allocate_from_text(&param,
+ params_from_text,
+ "hexoctets", values[i], 0,
+ NULL));
+ else
+ result =
+ TEST_false(OSSL_PARAM_allocate_from_text(&param,
+ params_from_text,
+ "hexoctets", values[i], 0,
+ NULL));
+ if (!result) {
+ TEST_error("unexpected OSSL_PARAM_allocate_from_text() %s for 'octets' \"%s\"",
+ (expected ? "failure" : "success"), values[i]);
+ errcnt++;
+ }
+ OPENSSL_free(param.data);
+ }
+ return errcnt == 0;
+}
+
+static int test_allocate_from_text(int i)
+{
+ return check_int_from_text(int_from_text_test_cases[i]);
+}
+
+static int test_more_allocate_from_text(void)
+{
+ return check_octetstr_from_hexstr();
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_case, OSSL_NELEM(test_cases));
+ ADD_ALL_TESTS(test_allocate_from_text, OSSL_NELEM(int_from_text_test_cases));
+ ADD_TEST(test_more_allocate_from_text);
+ return 1;
+}
diff --git a/test/pbelutest.c b/test/pbelutest.c
new file mode 100644
index 000000000000..4039a879c0c5
--- /dev/null
+++ b/test/pbelutest.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2015-2017 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 "testutil.h"
+
+/*
+ * Password based encryption (PBE) table ordering test.
+ * Attempt to look up all supported algorithms.
+ */
+
+static int test_pbelu(void)
+{
+ int i, failed = 0;
+ int pbe_type, pbe_nid, last_type = -1, last_nid = -1;
+
+ for (i = 0; EVP_PBE_get(&pbe_type, &pbe_nid, i) != 0; i++) {
+ if (!TEST_true(EVP_PBE_find(pbe_type, pbe_nid, NULL, NULL, 0))) {
+ TEST_note("i=%d, pbe_type=%d, pbe_nid=%d", i, pbe_type, pbe_nid);
+ failed = 1;
+ break;
+ }
+ }
+
+ if (!failed)
+ return 1;
+
+ /* Error: print out whole table */
+ for (i = 0; EVP_PBE_get(&pbe_type, &pbe_nid, i) != 0; i++) {
+ failed = pbe_type < last_type
+ || (pbe_type == last_type && pbe_nid < last_nid);
+ TEST_note("PBE type=%d %d (%s): %s\n", pbe_type, pbe_nid,
+ OBJ_nid2sn(pbe_nid), failed ? "ERROR" : "OK");
+ last_type = pbe_type;
+ last_nid = pbe_nid;
+ }
+ return 0;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_pbelu);
+ return 1;
+}
diff --git a/test/pbetest.c b/test/pbetest.c
new file mode 100644
index 000000000000..cfffc2b93233
--- /dev/null
+++ b/test/pbetest.c
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2021-2023 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 "testutil.h"
+
+#include <openssl/evp.h>
+#include <openssl/x509.h>
+#include <openssl/rc4.h>
+#include <openssl/md5.h>
+#include <openssl/configuration.h>
+#include <openssl/provider.h>
+
+#if !defined OPENSSL_NO_RC4 && !defined OPENSSL_NO_MD5 \
+ || !defined OPENSSL_NO_DES && !defined OPENSSL_NO_SHA1
+static const char pbe_password[] = "MyVoiceIsMyPassport";
+
+static unsigned char pbe_salt[] = {
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+};
+
+static const int pbe_iter = 1000;
+
+static unsigned char pbe_plaintext[] = {
+ 0x57, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61,
+ 0x6c, 0x6c, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x73,
+};
+#endif
+
+/* Expected output generated using OpenSSL 1.1.1 */
+
+#if !defined OPENSSL_NO_RC4 && !defined OPENSSL_NO_MD5
+static const unsigned char pbe_ciphertext_rc4_md5[] = {
+ 0x21, 0x90, 0xfa, 0xee, 0x95, 0x66, 0x59, 0x45,
+ 0xfa, 0x1e, 0x9f, 0xe2, 0x25, 0xd2, 0xf9, 0x71,
+ 0x94, 0xe4, 0x3d, 0xc9, 0x7c, 0xb0, 0x07, 0x23,
+};
+#endif
+
+#if !defined OPENSSL_NO_DES && !defined OPENSSL_NO_SHA1
+static const unsigned char pbe_ciphertext_des_sha1[] = {
+ 0xce, 0x4b, 0xb0, 0x0a, 0x7b, 0x48, 0xd7, 0xe3,
+ 0x9a, 0x9f, 0x46, 0xd6, 0x41, 0x42, 0x4b, 0x44,
+ 0x36, 0x45, 0x5f, 0x60, 0x8f, 0x3c, 0xd0, 0x55,
+ 0xd0, 0x8d, 0xa9, 0xab, 0x78, 0x5b, 0x63, 0xaf,
+};
+#endif
+
+#if !defined OPENSSL_NO_RC4 && !defined OPENSSL_NO_MD5 \
+ || !defined OPENSSL_NO_DES && !defined OPENSSL_NO_SHA1
+static int test_pkcs5_pbe(const EVP_CIPHER *cipher, const EVP_MD *md,
+ const unsigned char *exp, const int exp_len)
+{
+ int ret = 0;
+ EVP_CIPHER_CTX *ctx;
+ X509_ALGOR *algor = NULL;
+ int i, outlen;
+ unsigned char out[32];
+
+ ctx = EVP_CIPHER_CTX_new();
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ algor = X509_ALGOR_new();
+ if (!TEST_ptr(algor))
+ goto err;
+
+ if (!TEST_true(PKCS5_pbe_set0_algor(algor, EVP_CIPHER_nid(cipher), pbe_iter,
+ pbe_salt, sizeof(pbe_salt)))
+ || !TEST_true(PKCS5_PBE_keyivgen(ctx, pbe_password, strlen(pbe_password),
+ algor->parameter, cipher, md, 1))
+ || !TEST_true(EVP_CipherUpdate(ctx, out, &i, pbe_plaintext,
+ sizeof(pbe_plaintext))))
+ goto err;
+ outlen = i;
+
+ if (!TEST_true(EVP_CipherFinal_ex(ctx, out + i, &i)))
+ goto err;
+ outlen += i;
+
+ if (!TEST_mem_eq(out, outlen, exp, exp_len))
+ goto err;
+
+ /* Decrypt */
+
+ if (!TEST_true(PKCS5_PBE_keyivgen(ctx, pbe_password, strlen(pbe_password),
+ algor->parameter, cipher, md, 0))
+ || !TEST_true(EVP_CipherUpdate(ctx, out, &i, exp, exp_len)))
+ goto err;
+
+ outlen = i;
+ if (!TEST_true(EVP_CipherFinal_ex(ctx, out + i, &i)))
+ goto err;
+
+ if (!TEST_mem_eq(out, outlen, pbe_plaintext, sizeof(pbe_plaintext)))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_CIPHER_CTX_free(ctx);
+ X509_ALGOR_free(algor);
+ return ret;
+}
+#endif
+
+#if !defined OPENSSL_NO_RC4 && !defined OPENSSL_NO_MD5
+static int test_pkcs5_pbe_rc4_md5(void)
+{
+ return test_pkcs5_pbe(EVP_rc4(), EVP_md5(), pbe_ciphertext_rc4_md5, sizeof(pbe_ciphertext_rc4_md5));
+}
+#endif
+
+#if !defined OPENSSL_NO_DES && !defined OPENSSL_NO_SHA1
+static int test_pkcs5_pbe_des_sha1(void)
+{
+ return test_pkcs5_pbe(EVP_des_cbc(), EVP_sha1(), pbe_ciphertext_des_sha1, sizeof(pbe_ciphertext_des_sha1));
+}
+#endif
+
+#ifdef OPENSSL_NO_AUTOLOAD_CONFIG
+/*
+ * For configurations where we are not autoloading configuration, we need
+ * to access the legacy provider. The easiest way is to load both the
+ * legacy and default providers directly and unload them on termination.
+ */
+static OSSL_PROVIDER *legacy, *dflt;
+#endif
+
+int setup_tests(void)
+{
+#ifdef OPENSSL_NO_AUTOLOAD_CONFIG
+ /* Load required providers if not done via configuration */
+ legacy = OSSL_PROVIDER_load(NULL, "legacy");
+ dflt = OSSL_PROVIDER_load(NULL, "default");
+ if (!TEST_ptr(legacy) || !TEST_ptr(dflt)) {
+ cleanup_tests();
+ return -1;
+ }
+#endif
+
+#if !defined OPENSSL_NO_RC4 && !defined OPENSSL_NO_MD5
+ ADD_TEST(test_pkcs5_pbe_rc4_md5);
+#endif
+#if !defined OPENSSL_NO_DES && !defined OPENSSL_NO_SHA1
+ ADD_TEST(test_pkcs5_pbe_des_sha1);
+#endif
+
+ return 1;
+}
+
+#ifdef OPENSSL_NO_AUTOLOAD_CONFIG
+void cleanup_tests(void)
+{
+ /* Dispose of providers */
+ OSSL_PROVIDER_unload(legacy);
+ OSSL_PROVIDER_unload(dflt);
+ legacy = dflt = NULL;
+}
+#endif
diff --git a/test/pem_read_depr_test.c b/test/pem_read_depr_test.c
new file mode 100644
index 000000000000..aef85f91cfe9
--- /dev/null
+++ b/test/pem_read_depr_test.c
@@ -0,0 +1,216 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * This file tests deprecated APIs. Therefore we need to suppress deprecation
+ * warnings.
+ */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <openssl/pem.h>
+#include <openssl/bio.h>
+#include <openssl/dh.h>
+#include <openssl/dsa.h>
+#include <openssl/rsa.h>
+
+#include "testutil.h"
+
+static const char *datadir;
+
+static BIO *getfile(const char *filename)
+{
+ char *paramsfile = test_mk_file_path(datadir, filename);
+ BIO *infile = NULL;
+
+ if (!TEST_ptr(paramsfile))
+ goto err;
+ infile = BIO_new_file(paramsfile, "r");
+
+ err:
+ OPENSSL_free(paramsfile);
+ return infile;
+}
+
+#ifndef OPENSSL_NO_DH
+static int test_read_dh_params(void)
+{
+ int testresult = 0;
+ BIO *infile = getfile("dhparams.pem");
+ DH *dh = NULL;
+
+ if (!TEST_ptr(infile))
+ goto err;
+
+ dh = PEM_read_bio_DHparams(infile, NULL, NULL, NULL);
+ if (!TEST_ptr(dh))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ BIO_free(infile);
+ DH_free(dh);
+ return testresult;
+}
+
+static int test_read_dh_x942_params(void)
+{
+ int testresult = 0;
+ BIO *infile = getfile("x942params.pem");
+ DH *dh = NULL;
+
+ if (!TEST_ptr(infile))
+ goto err;
+
+ dh = PEM_read_bio_DHparams(infile, NULL, NULL, NULL);
+ if (!TEST_ptr(dh))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ BIO_free(infile);
+ DH_free(dh);
+ return testresult;
+}
+#endif
+
+#ifndef OPENSSL_NO_DSA
+static int test_read_dsa_params(void)
+{
+ int testresult = 0;
+ BIO *infile = getfile("dsaparams.pem");
+ DSA *dsa = NULL;
+
+ if (!TEST_ptr(infile))
+ goto err;
+
+ dsa = PEM_read_bio_DSAparams(infile, NULL, NULL, NULL);
+ if (!TEST_ptr(dsa))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ BIO_free(infile);
+ DSA_free(dsa);
+ return testresult;
+}
+
+static int test_read_dsa_private(void)
+{
+ int testresult = 0;
+ BIO *infile = getfile("dsaprivatekey.pem");
+ DSA *dsa = NULL;
+
+ if (!TEST_ptr(infile))
+ goto err;
+
+ dsa = PEM_read_bio_DSAPrivateKey(infile, NULL, NULL, NULL);
+ if (!TEST_ptr(dsa))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ BIO_free(infile);
+ DSA_free(dsa);
+ return testresult;
+}
+
+static int test_read_dsa_public(void)
+{
+ int testresult = 0;
+ BIO *infile = getfile("dsapublickey.pem");
+ DSA *dsa = NULL;
+
+ if (!TEST_ptr(infile))
+ goto err;
+
+ dsa = PEM_read_bio_DSA_PUBKEY(infile, NULL, NULL, NULL);
+ if (!TEST_ptr(dsa))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ BIO_free(infile);
+ DSA_free(dsa);
+ return testresult;
+}
+#endif
+
+static int test_read_rsa_private(void)
+{
+ int testresult = 0;
+ BIO *infile = getfile("rsaprivatekey.pem");
+ RSA *rsa = NULL;
+
+ if (!TEST_ptr(infile))
+ goto err;
+
+ rsa = PEM_read_bio_RSAPrivateKey(infile, NULL, NULL, NULL);
+ if (!TEST_ptr(rsa))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ BIO_free(infile);
+ RSA_free(rsa);
+ return testresult;
+}
+
+static int test_read_rsa_public(void)
+{
+ int testresult = 0;
+ BIO *infile = getfile("rsapublickey.pem");
+ RSA *rsa = NULL;
+
+ if (!TEST_ptr(infile))
+ goto err;
+
+ rsa = PEM_read_bio_RSA_PUBKEY(infile, NULL, NULL, NULL);
+ if (!TEST_ptr(rsa))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ BIO_free(infile);
+ RSA_free(rsa);
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(datadir = test_get_argument(0))) {
+ TEST_error("Error getting data dir\n");
+ return 0;
+ }
+
+#ifndef OPENSSL_NO_DH
+ ADD_TEST(test_read_dh_params);
+ ADD_TEST(test_read_dh_x942_params);
+#endif
+#ifndef OPENSSL_NO_DSA
+ ADD_TEST(test_read_dsa_params);
+ ADD_TEST(test_read_dsa_private);
+ ADD_TEST(test_read_dsa_public);
+#endif
+ ADD_TEST(test_read_rsa_private);
+ ADD_TEST(test_read_rsa_public);
+
+ return 1;
+}
diff --git a/test/pemtest.c b/test/pemtest.c
new file mode 100644
index 000000000000..bf9709836544
--- /dev/null
+++ b/test/pemtest.c
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2017-2023 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/bio.h>
+#include <openssl/pem.h>
+
+#include "testutil.h"
+#include "internal/nelem.h"
+
+typedef struct {
+ const char *raw;
+ const char *encoded;
+} TESTDATA;
+
+static TESTDATA b64_pem_data[] = {
+ { "hello world",
+ "aGVsbG8gd29ybGQ=" },
+ { "a very ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong input",
+ "YSB2ZXJ5IG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZyBpbnB1dA==" }
+};
+
+static const char *pemtype = "PEMTESTDATA";
+
+static char *pemfile;
+
+static int test_b64(int idx)
+{
+ BIO *b = BIO_new(BIO_s_mem());
+ char *name = NULL, *header = NULL;
+ unsigned char *data = NULL;
+ long len;
+ int ret = 0;
+ const char *raw = b64_pem_data[idx].raw;
+ const char *encoded = b64_pem_data[idx].encoded;
+
+ if (!TEST_ptr(b)
+ || !TEST_true(BIO_printf(b, "-----BEGIN %s-----\n", pemtype))
+ || !TEST_true(BIO_printf(b, "%s\n", encoded))
+ || !TEST_true(BIO_printf(b, "-----END %s-----\n", pemtype))
+ || !TEST_true(PEM_read_bio_ex(b, &name, &header, &data, &len,
+ PEM_FLAG_ONLY_B64)))
+ goto err;
+ if (!TEST_int_eq(memcmp(pemtype, name, strlen(pemtype)), 0)
+ || !TEST_int_eq(len, strlen(raw))
+ || !TEST_int_eq(memcmp(data, raw, strlen(raw)), 0))
+ goto err;
+ ret = 1;
+ err:
+ BIO_free(b);
+ OPENSSL_free(name);
+ OPENSSL_free(header);
+ OPENSSL_free(data);
+ return ret;
+}
+
+static int test_invalid(void)
+{
+ BIO *b = BIO_new(BIO_s_mem());
+ char *name = NULL, *header = NULL;
+ unsigned char *data = NULL;
+ long len;
+ const char *encoded = b64_pem_data[0].encoded;
+
+ if (!TEST_ptr(b)
+ || !TEST_true(BIO_printf(b, "-----BEGIN %s-----\n", pemtype))
+ || !TEST_true(BIO_printf(b, "%c%s\n", '\t', encoded))
+ || !TEST_true(BIO_printf(b, "-----END %s-----\n", pemtype))
+ /* Expected to fail due to non-base64 character */
+ || TEST_true(PEM_read_bio_ex(b, &name, &header, &data, &len,
+ PEM_FLAG_ONLY_B64))) {
+ BIO_free(b);
+ return 0;
+ }
+ BIO_free(b);
+ OPENSSL_free(name);
+ OPENSSL_free(header);
+ OPENSSL_free(data);
+ return 1;
+}
+
+static int test_cert_key_cert(void)
+{
+ EVP_PKEY *key;
+
+ if (!TEST_ptr(key = load_pkey_pem(pemfile, NULL)))
+ return 0;
+
+ EVP_PKEY_free(key);
+ return 1;
+}
+
+static int test_empty_payload(void)
+{
+ BIO *b;
+ static char *emptypay =
+ "-----BEGIN CERTIFICATE-----\n"
+ "-\n" /* Base64 EOF character */
+ "-----END CERTIFICATE-----";
+ char *name = NULL, *header = NULL;
+ unsigned char *data = NULL;
+ long len;
+ int ret = 0;
+
+ b = BIO_new_mem_buf(emptypay, strlen(emptypay));
+ if (!TEST_ptr(b))
+ return 0;
+
+ /* Expected to fail because the payload is empty */
+ if (!TEST_false(PEM_read_bio_ex(b, &name, &header, &data, &len, 0)))
+ goto err;
+
+ ret = 1;
+ err:
+ OPENSSL_free(name);
+ OPENSSL_free(header);
+ OPENSSL_free(data);
+ BIO_free(b);
+ return ret;
+}
+
+static int test_protected_params(void)
+{
+ BIO *b;
+ static char *protectedpay =
+ "-----BEGIN RSA PRIVATE KEY-----\n"
+ "Proc-Type: 4,ENCRYPTED\n"
+ "DEK-Info: AES-256-CBC,4A44448ED28992710556549B35100CEA\n"
+ "\n"
+ "Xw3INxKeH+rUUF57mjATpvj6zknVhedwrlRmRvnwlLv5wqIy5Ae4UVLPh7SUswfC\n"
+ "-----END RSA PRIVATE KEY-----\n";
+ EVP_PKEY *pkey = NULL;
+ int ret = 0;
+
+ b = BIO_new_mem_buf(protectedpay, strlen(protectedpay));
+ if (!TEST_ptr(b))
+ return 0;
+
+ /* Expected to fail because we cannot decrypt protected PEM files */
+ pkey = PEM_read_bio_Parameters(b, NULL);
+ if (!TEST_ptr_null(pkey))
+ goto err;
+
+ ret = 1;
+ err:
+ EVP_PKEY_free(pkey);
+ BIO_free(b);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ if (!TEST_ptr(pemfile = test_get_argument(0)))
+ return 0;
+ ADD_ALL_TESTS(test_b64, OSSL_NELEM(b64_pem_data));
+ ADD_TEST(test_invalid);
+ ADD_TEST(test_cert_key_cert);
+ ADD_TEST(test_empty_payload);
+ ADD_TEST(test_protected_params);
+ return 1;
+}
diff --git a/test/pkcs12_format_test.c b/test/pkcs12_format_test.c
new file mode 100644
index 000000000000..c142093f72bb
--- /dev/null
+++ b/test/pkcs12_format_test.c
@@ -0,0 +1,961 @@
+/*
+ * Copyright 2020-2023 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 <string.h>
+#include <stdlib.h>
+
+#include "internal/nelem.h"
+
+#include <openssl/pkcs12.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/pem.h>
+
+#include "testutil.h"
+#include "helpers/pkcs12.h"
+
+static int default_libctx = 1;
+
+static OSSL_LIB_CTX *testctx = NULL;
+static OSSL_PROVIDER *nullprov = NULL;
+static OSSL_PROVIDER *deflprov = NULL;
+static OSSL_PROVIDER *lgcyprov = NULL;
+
+/* --------------------------------------------------------------------------
+ * PKCS12 component test data
+ */
+
+static const unsigned char CERT1[] =
+{
+ 0x30, 0x82, 0x01, 0xed, 0x30, 0x82, 0x01, 0x56, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00,
+ 0x8b, 0x4b, 0x5e, 0x6c, 0x03, 0x28, 0x4e, 0xe6, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
+ 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x19, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55,
+ 0x04, 0x03, 0x0c, 0x0e, 0x50, 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x52, 0x6f, 0x6f, 0x74,
+ 0x2d, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x39, 0x33, 0x30, 0x30, 0x30, 0x34, 0x36,
+ 0x35, 0x36, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x39, 0x32, 0x37, 0x30, 0x30, 0x34, 0x36, 0x35,
+ 0x36, 0x5a, 0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x50,
+ 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d, 0x31, 0x30,
+ 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
+ 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xbc, 0xdc, 0x6f, 0x8c,
+ 0x7a, 0x2a, 0x4b, 0xea, 0x66, 0x66, 0x04, 0xa9, 0x05, 0x92, 0x53, 0xd7, 0x13, 0x3c, 0x49, 0xe1,
+ 0xc8, 0xbb, 0xdf, 0x3d, 0xcb, 0x88, 0x31, 0x07, 0x20, 0x59, 0x93, 0x24, 0x7f, 0x7d, 0xc6, 0x84,
+ 0x81, 0x16, 0x64, 0x4a, 0x52, 0xa6, 0x30, 0x44, 0xdc, 0x1a, 0x30, 0xde, 0xae, 0x29, 0x18, 0xcf,
+ 0xc7, 0xf3, 0xcf, 0x0c, 0xb7, 0x8e, 0x2b, 0x1e, 0x21, 0x01, 0x0b, 0xfb, 0xe5, 0xe6, 0xcf, 0x2b,
+ 0x84, 0xe1, 0x33, 0xf8, 0xba, 0x02, 0xfc, 0x30, 0xfa, 0xc4, 0x33, 0xc7, 0x37, 0xc6, 0x7f, 0x72,
+ 0x31, 0x92, 0x1d, 0x8f, 0xa0, 0xfb, 0xe5, 0x4a, 0x08, 0x31, 0x78, 0x80, 0x9c, 0x23, 0xb4, 0xe9,
+ 0x19, 0x56, 0x04, 0xfa, 0x0d, 0x07, 0x04, 0xb7, 0x43, 0xac, 0x4c, 0x49, 0x7c, 0xc2, 0xa1, 0x44,
+ 0xc1, 0x48, 0x7d, 0x28, 0xe5, 0x23, 0x66, 0x07, 0x22, 0xd5, 0xf0, 0xf1, 0x02, 0x03, 0x01, 0x00,
+ 0x01, 0xa3, 0x3b, 0x30, 0x39, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16,
+ 0x80, 0x14, 0xdb, 0xbb, 0xb8, 0x92, 0x4e, 0x24, 0x0b, 0x1b, 0xbb, 0x78, 0x33, 0xf9, 0x01, 0x02,
+ 0x23, 0x0d, 0x96, 0x18, 0x30, 0x47, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30,
+ 0x00, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x04, 0xf0, 0x30, 0x0d,
+ 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x81, 0x81,
+ 0x00, 0x1c, 0x13, 0xdc, 0x02, 0xf1, 0x44, 0x36, 0x65, 0xa9, 0xbe, 0x30, 0x1c, 0x66, 0x14, 0x20,
+ 0x86, 0x5a, 0xa8, 0x69, 0x25, 0xf8, 0x1a, 0xb6, 0x9e, 0x5e, 0xe9, 0x89, 0xb8, 0x67, 0x70, 0x19,
+ 0x87, 0x60, 0xeb, 0x4b, 0x11, 0x71, 0x85, 0xf8, 0xe9, 0xa7, 0x3e, 0x20, 0x42, 0xec, 0x43, 0x25,
+ 0x01, 0x03, 0xe5, 0x4d, 0x83, 0x22, 0xf5, 0x8e, 0x3a, 0x1a, 0x1b, 0xd4, 0x1c, 0xda, 0x6b, 0x9d,
+ 0x10, 0x1b, 0xee, 0x67, 0x4e, 0x1f, 0x69, 0xab, 0xbc, 0xaa, 0x62, 0x8e, 0x9e, 0xc6, 0xee, 0xd6,
+ 0x09, 0xc0, 0xca, 0xe0, 0xaa, 0x9f, 0x07, 0xb2, 0xc2, 0xbb, 0x31, 0x96, 0xa2, 0x04, 0x62, 0xd3,
+ 0x13, 0x32, 0x29, 0x67, 0x6e, 0xad, 0x2e, 0x0b, 0xea, 0x04, 0x7c, 0x8c, 0x5a, 0x5d, 0xac, 0x14,
+ 0xaa, 0x61, 0x7f, 0x28, 0x6c, 0x2d, 0x64, 0x2d, 0xc3, 0xaf, 0x77, 0x52, 0x90, 0xb4, 0x37, 0xc0,
+ 0x30,
+};
+
+static const unsigned char CERT2[] =
+{
+ 0x30, 0x82, 0x01, 0xed, 0x30, 0x82, 0x01, 0x56, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00,
+ 0x8b, 0x4b, 0x5e, 0x6c, 0x03, 0x28, 0x4e, 0xe7, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
+ 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x19, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55,
+ 0x04, 0x03, 0x0c, 0x0e, 0x50, 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x52, 0x6f, 0x6f, 0x74,
+ 0x2d, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x39, 0x33, 0x30, 0x30, 0x30, 0x34, 0x36,
+ 0x35, 0x36, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x39, 0x32, 0x37, 0x30, 0x30, 0x34, 0x36, 0x35,
+ 0x36, 0x5a, 0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x50,
+ 0x31, 0x32, 0x54, 0x65, 0x73, 0x74, 0x2d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2d, 0x31, 0x30,
+ 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
+ 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xa8, 0x6e, 0x40, 0x86,
+ 0x9f, 0x98, 0x59, 0xfb, 0x57, 0xbf, 0xc1, 0x55, 0x12, 0x38, 0xeb, 0xb3, 0x46, 0x34, 0xc9, 0x35,
+ 0x4d, 0xfd, 0x03, 0xe9, 0x3a, 0x88, 0x9e, 0x97, 0x8f, 0xf4, 0xec, 0x36, 0x7b, 0x3f, 0xba, 0xb8,
+ 0xa5, 0x96, 0x30, 0x03, 0xc5, 0xc6, 0xd9, 0xa8, 0x4e, 0xbc, 0x23, 0x51, 0xa1, 0x96, 0xd2, 0x03,
+ 0x98, 0x73, 0xb6, 0x17, 0x9c, 0x77, 0xd4, 0x95, 0x1e, 0x1b, 0xb3, 0x1b, 0xc8, 0x71, 0xd1, 0x2e,
+ 0x31, 0xc7, 0x6a, 0x75, 0x57, 0x08, 0x7f, 0xba, 0x70, 0x76, 0xf7, 0x67, 0xf4, 0x4e, 0xbe, 0xfc,
+ 0x70, 0x61, 0x41, 0x07, 0x2b, 0x7c, 0x3c, 0x3b, 0xb3, 0xbc, 0xd5, 0xa8, 0xbd, 0x28, 0xd8, 0x49,
+ 0xd3, 0xe1, 0x78, 0xc8, 0xc1, 0x42, 0x5e, 0x18, 0x36, 0xa8, 0x41, 0xf7, 0xc8, 0xaa, 0x35, 0xfe,
+ 0x2d, 0xd1, 0xb4, 0xcc, 0x00, 0x67, 0xae, 0x79, 0xd3, 0x28, 0xd5, 0x5b, 0x02, 0x03, 0x01, 0x00,
+ 0x01, 0xa3, 0x3b, 0x30, 0x39, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16,
+ 0x80, 0x14, 0xdb, 0xbb, 0xb8, 0x92, 0x4e, 0x24, 0x0b, 0x1b, 0xbb, 0x78, 0x33, 0xf9, 0x01, 0x02,
+ 0x23, 0x0d, 0x96, 0x18, 0x30, 0x47, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30,
+ 0x00, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x04, 0xf0, 0x30, 0x0d,
+ 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x81, 0x81,
+ 0x00, 0x3b, 0xa6, 0x73, 0xbe, 0xe0, 0x28, 0xed, 0x1f, 0x29, 0x78, 0x4c, 0xc0, 0x1f, 0xe9, 0x85,
+ 0xc6, 0x8f, 0xe3, 0x87, 0x7c, 0xd9, 0xe7, 0x0a, 0x37, 0xe8, 0xaa, 0xb5, 0xd2, 0x7f, 0xf8, 0x90,
+ 0x20, 0x80, 0x35, 0xa7, 0x79, 0x2b, 0x04, 0xa7, 0xbf, 0xe6, 0x7b, 0x58, 0xcb, 0xec, 0x0e, 0x58,
+ 0xef, 0x2a, 0x70, 0x8a, 0x56, 0x8a, 0xcf, 0x6b, 0x7a, 0x74, 0x0c, 0xf4, 0x15, 0x37, 0x93, 0xcd,
+ 0xe6, 0xb2, 0xa1, 0x83, 0x09, 0xdb, 0x9e, 0x4f, 0xff, 0x6a, 0x17, 0x4f, 0x33, 0xc9, 0xcc, 0x90,
+ 0x2a, 0x67, 0xff, 0x16, 0x78, 0xa8, 0x2c, 0x10, 0xe0, 0x52, 0x8c, 0xe6, 0xe9, 0x90, 0x8d, 0xe0,
+ 0x62, 0x04, 0x9a, 0x0f, 0x44, 0x01, 0x82, 0x14, 0x92, 0x44, 0x25, 0x69, 0x22, 0xb7, 0xb8, 0xc5,
+ 0x94, 0x4c, 0x4b, 0x1c, 0x9b, 0x92, 0x60, 0x66, 0x90, 0x4e, 0xb9, 0xa8, 0x4c, 0x89, 0xbb, 0x0f,
+ 0x0b,
+};
+
+static const unsigned char KEY1[] =
+{
+ 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xbc, 0xdc, 0x6f, 0x8c, 0x7a,
+ 0x2a, 0x4b, 0xea, 0x66, 0x66, 0x04, 0xa9, 0x05, 0x92, 0x53, 0xd7, 0x13, 0x3c, 0x49, 0xe1, 0xc8,
+ 0xbb, 0xdf, 0x3d, 0xcb, 0x88, 0x31, 0x07, 0x20, 0x59, 0x93, 0x24, 0x7f, 0x7d, 0xc6, 0x84, 0x81,
+ 0x16, 0x64, 0x4a, 0x52, 0xa6, 0x30, 0x44, 0xdc, 0x1a, 0x30, 0xde, 0xae, 0x29, 0x18, 0xcf, 0xc7,
+ 0xf3, 0xcf, 0x0c, 0xb7, 0x8e, 0x2b, 0x1e, 0x21, 0x01, 0x0b, 0xfb, 0xe5, 0xe6, 0xcf, 0x2b, 0x84,
+ 0xe1, 0x33, 0xf8, 0xba, 0x02, 0xfc, 0x30, 0xfa, 0xc4, 0x33, 0xc7, 0x37, 0xc6, 0x7f, 0x72, 0x31,
+ 0x92, 0x1d, 0x8f, 0xa0, 0xfb, 0xe5, 0x4a, 0x08, 0x31, 0x78, 0x80, 0x9c, 0x23, 0xb4, 0xe9, 0x19,
+ 0x56, 0x04, 0xfa, 0x0d, 0x07, 0x04, 0xb7, 0x43, 0xac, 0x4c, 0x49, 0x7c, 0xc2, 0xa1, 0x44, 0xc1,
+ 0x48, 0x7d, 0x28, 0xe5, 0x23, 0x66, 0x07, 0x22, 0xd5, 0xf0, 0xf1, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0x02, 0x81, 0x81, 0x00, 0xa5, 0x6d, 0xf9, 0x8f, 0xf5, 0x5a, 0xa3, 0x50, 0xd9, 0x0d, 0x37, 0xbb,
+ 0xce, 0x13, 0x94, 0xb8, 0xea, 0x32, 0x7f, 0x0c, 0xf5, 0x46, 0x0b, 0x90, 0x17, 0x7e, 0x5e, 0x63,
+ 0xbd, 0xa4, 0x78, 0xcd, 0x19, 0x97, 0xd4, 0x92, 0x30, 0x78, 0xaa, 0xb4, 0xa7, 0x9c, 0xc6, 0xdf,
+ 0x2a, 0x65, 0x0e, 0xb5, 0x9f, 0x9c, 0x84, 0x0d, 0x4d, 0x3a, 0x74, 0xfc, 0xd0, 0xb4, 0x09, 0x74,
+ 0xc4, 0xb8, 0x24, 0x03, 0xa8, 0xf0, 0xf8, 0x0d, 0x5c, 0x8e, 0xdf, 0x4b, 0xe1, 0x0a, 0x8f, 0x4f,
+ 0xd5, 0xc7, 0x9b, 0x54, 0x55, 0x8f, 0x00, 0x5c, 0xea, 0x4c, 0x73, 0xf9, 0x1b, 0xbf, 0xb8, 0x93,
+ 0x33, 0x20, 0xce, 0x45, 0xd9, 0x03, 0x02, 0xb2, 0x36, 0xc5, 0x0a, 0x30, 0x50, 0x78, 0x80, 0x66,
+ 0x00, 0x22, 0x38, 0x86, 0xcf, 0x63, 0x4a, 0x5c, 0xbf, 0x2b, 0xd9, 0x6e, 0xe6, 0xf0, 0x39, 0xad,
+ 0x12, 0x25, 0x41, 0xb9, 0x02, 0x41, 0x00, 0xf3, 0x7c, 0x07, 0x99, 0x64, 0x3a, 0x28, 0x8c, 0x8d,
+ 0x05, 0xfe, 0x32, 0xb5, 0x4c, 0x8c, 0x6d, 0xde, 0x3d, 0x16, 0x08, 0xa0, 0x01, 0x61, 0x4f, 0x8e,
+ 0xa0, 0xf7, 0x26, 0x26, 0xb5, 0x8e, 0xc0, 0x7a, 0xce, 0x86, 0x34, 0xde, 0xb8, 0xef, 0x86, 0x01,
+ 0xbe, 0x24, 0xaa, 0x9b, 0x36, 0x93, 0x72, 0x9b, 0xf9, 0xc6, 0xcb, 0x76, 0x84, 0x67, 0x06, 0x06,
+ 0x30, 0x50, 0xdf, 0x42, 0x17, 0xe0, 0xa7, 0x02, 0x41, 0x00, 0xc6, 0x91, 0xa0, 0x41, 0x34, 0x11,
+ 0x67, 0x4b, 0x08, 0x0f, 0xda, 0xa7, 0x99, 0xec, 0x58, 0x11, 0xa5, 0x82, 0xdb, 0x50, 0xfe, 0x77,
+ 0xe2, 0xd1, 0x53, 0x9c, 0x7d, 0xe8, 0xbf, 0xe7, 0x7c, 0xa9, 0x01, 0xb1, 0x87, 0xc3, 0x52, 0x79,
+ 0x9e, 0x2c, 0xa7, 0x6f, 0x02, 0x37, 0x32, 0xef, 0x24, 0x31, 0x21, 0x0b, 0x86, 0x05, 0x32, 0x4a,
+ 0x2e, 0x0b, 0x65, 0x05, 0xd3, 0xd6, 0x30, 0xb2, 0xfc, 0xa7, 0x02, 0x41, 0x00, 0xc2, 0xed, 0x31,
+ 0xdc, 0x40, 0x9c, 0x3a, 0xe8, 0x42, 0xe2, 0x60, 0x5e, 0x52, 0x3c, 0xc5, 0x54, 0x14, 0x0e, 0x8d,
+ 0x7c, 0x3c, 0x34, 0xbe, 0xa6, 0x05, 0x86, 0xa2, 0x36, 0x5d, 0xd9, 0x0e, 0x3e, 0xd4, 0x52, 0x50,
+ 0xa9, 0x35, 0x01, 0x93, 0x68, 0x92, 0x2e, 0x9a, 0x86, 0x27, 0x1a, 0xab, 0x32, 0x9e, 0xe2, 0x79,
+ 0x9f, 0x5b, 0xf3, 0xa5, 0xd2, 0xf1, 0xd3, 0x6e, 0x7b, 0x3e, 0x1b, 0x85, 0x93, 0x02, 0x40, 0x68,
+ 0xb8, 0xb6, 0x7e, 0x8c, 0xba, 0x3c, 0xf2, 0x8a, 0x2e, 0xea, 0x4f, 0x07, 0xd3, 0x68, 0x62, 0xee,
+ 0x1a, 0x04, 0x16, 0x44, 0x0d, 0xef, 0xf6, 0x1b, 0x95, 0x65, 0xa5, 0xd1, 0x47, 0x81, 0x2c, 0x14,
+ 0xb3, 0x8e, 0xf9, 0x08, 0xcf, 0x11, 0x07, 0x55, 0xca, 0x2a, 0xad, 0xf7, 0xd3, 0xbd, 0x0f, 0x97,
+ 0xf0, 0xde, 0xde, 0x70, 0xb6, 0x44, 0x70, 0x47, 0xf7, 0xf9, 0xcf, 0x75, 0x61, 0x7f, 0xf3, 0x02,
+ 0x40, 0x38, 0x4a, 0x67, 0xaf, 0xae, 0xb6, 0xb2, 0x6a, 0x00, 0x25, 0x5a, 0xa4, 0x65, 0x20, 0xb1,
+ 0x13, 0xbd, 0x83, 0xff, 0xb4, 0xbc, 0xf4, 0xdd, 0xa1, 0xbb, 0x1c, 0x96, 0x37, 0x35, 0xf4, 0xbf,
+ 0xed, 0x4c, 0xed, 0x92, 0xe8, 0xac, 0xc9, 0xc1, 0xa5, 0xa3, 0x23, 0x66, 0x40, 0x8a, 0xa1, 0xe6,
+ 0xe3, 0x95, 0xfe, 0xc4, 0x53, 0xf5, 0x7d, 0x6e, 0xca, 0x45, 0x42, 0xe4, 0xc2, 0x9f, 0xe5, 0x1e,
+ 0xb5,
+};
+
+
+static const unsigned char KEY2[] =
+{
+ 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xa8, 0x6e, 0x40, 0x86, 0x9f,
+ 0x98, 0x59, 0xfb, 0x57, 0xbf, 0xc1, 0x55, 0x12, 0x38, 0xeb, 0xb3, 0x46, 0x34, 0xc9, 0x35, 0x4d,
+ 0xfd, 0x03, 0xe9, 0x3a, 0x88, 0x9e, 0x97, 0x8f, 0xf4, 0xec, 0x36, 0x7b, 0x3f, 0xba, 0xb8, 0xa5,
+ 0x96, 0x30, 0x03, 0xc5, 0xc6, 0xd9, 0xa8, 0x4e, 0xbc, 0x23, 0x51, 0xa1, 0x96, 0xd2, 0x03, 0x98,
+ 0x73, 0xb6, 0x17, 0x9c, 0x77, 0xd4, 0x95, 0x1e, 0x1b, 0xb3, 0x1b, 0xc8, 0x71, 0xd1, 0x2e, 0x31,
+ 0xc7, 0x6a, 0x75, 0x57, 0x08, 0x7f, 0xba, 0x70, 0x76, 0xf7, 0x67, 0xf4, 0x4e, 0xbe, 0xfc, 0x70,
+ 0x61, 0x41, 0x07, 0x2b, 0x7c, 0x3c, 0x3b, 0xb3, 0xbc, 0xd5, 0xa8, 0xbd, 0x28, 0xd8, 0x49, 0xd3,
+ 0xe1, 0x78, 0xc8, 0xc1, 0x42, 0x5e, 0x18, 0x36, 0xa8, 0x41, 0xf7, 0xc8, 0xaa, 0x35, 0xfe, 0x2d,
+ 0xd1, 0xb4, 0xcc, 0x00, 0x67, 0xae, 0x79, 0xd3, 0x28, 0xd5, 0x5b, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0x02, 0x81, 0x81, 0x00, 0xa6, 0x00, 0x83, 0xf8, 0x2b, 0x33, 0xac, 0xfb, 0xdb, 0xf0, 0x52, 0x4b,
+ 0xd6, 0x39, 0xe3, 0x94, 0x3d, 0x8d, 0xa9, 0x01, 0xb0, 0x6b, 0xbe, 0x7f, 0x10, 0x01, 0xb6, 0xcd,
+ 0x0a, 0x45, 0x0a, 0xca, 0x67, 0x8e, 0xd8, 0x29, 0x44, 0x8a, 0x51, 0xa8, 0x66, 0x35, 0x26, 0x30,
+ 0x8b, 0xe9, 0x41, 0xa6, 0x22, 0xec, 0xd2, 0xf0, 0x58, 0x41, 0x33, 0x26, 0xf2, 0x3f, 0xe8, 0x75,
+ 0x4f, 0xc7, 0x5d, 0x2e, 0x5a, 0xa8, 0x7a, 0xd2, 0xbf, 0x59, 0xa0, 0x86, 0x79, 0x0b, 0x92, 0x6c,
+ 0x95, 0x5d, 0x87, 0x63, 0x5c, 0xd6, 0x1a, 0xc0, 0xf6, 0x7a, 0x15, 0x8d, 0xc7, 0x3c, 0xb6, 0x9e,
+ 0xa6, 0x58, 0x46, 0x9b, 0xbf, 0x3e, 0x28, 0x8c, 0xdf, 0x1a, 0x87, 0xaa, 0x7e, 0xf5, 0xf2, 0xcb,
+ 0x5e, 0x84, 0x2d, 0xf6, 0x82, 0x7e, 0x89, 0x4e, 0xf5, 0xe6, 0x3c, 0x92, 0x80, 0x1e, 0x98, 0x1c,
+ 0x6a, 0x7b, 0x57, 0x01, 0x02, 0x41, 0x00, 0xdd, 0x60, 0x95, 0xd7, 0xa1, 0x9d, 0x0c, 0xa1, 0x84,
+ 0xc5, 0x39, 0xca, 0x67, 0x4c, 0x1c, 0x06, 0x71, 0x5b, 0x5c, 0x2d, 0x8d, 0xce, 0xcd, 0xe2, 0x79,
+ 0xc8, 0x33, 0xbe, 0x50, 0x37, 0x60, 0x9f, 0x3b, 0xb9, 0x59, 0x55, 0x22, 0x1f, 0xa5, 0x4b, 0x1d,
+ 0xca, 0x38, 0xa0, 0xab, 0x87, 0x9c, 0x86, 0x0e, 0xdb, 0x1c, 0x4f, 0x4f, 0x07, 0xed, 0x18, 0x3f,
+ 0x05, 0x3c, 0xec, 0x78, 0x11, 0xf6, 0x99, 0x02, 0x41, 0x00, 0xc2, 0xc5, 0xcf, 0xbe, 0x95, 0x91,
+ 0xeb, 0xcf, 0x47, 0xf3, 0x33, 0x32, 0xc7, 0x7e, 0x93, 0x56, 0xf7, 0xd8, 0xf9, 0xd4, 0xb6, 0xd6,
+ 0x20, 0xac, 0xba, 0x8a, 0x20, 0x19, 0x14, 0xab, 0xc5, 0x5d, 0xb2, 0x08, 0xcc, 0x77, 0x7c, 0x65,
+ 0xa8, 0xdb, 0x66, 0x97, 0x36, 0x44, 0x2c, 0x63, 0xc0, 0x6a, 0x7e, 0xb0, 0x0b, 0x5c, 0x90, 0x12,
+ 0x50, 0xb4, 0x36, 0x60, 0xc3, 0x1f, 0x22, 0x0c, 0xc8, 0x13, 0x02, 0x40, 0x33, 0xc8, 0x7e, 0x04,
+ 0x7c, 0x97, 0x61, 0xf6, 0xfe, 0x39, 0xac, 0x34, 0xfe, 0x48, 0xbd, 0x5d, 0x7c, 0x72, 0xa4, 0x73,
+ 0x3b, 0x72, 0x9e, 0x92, 0x55, 0x6e, 0x51, 0x3c, 0x39, 0x43, 0x5a, 0xe4, 0xa4, 0x71, 0xcc, 0xc5,
+ 0xaf, 0x3f, 0xbb, 0xc8, 0x80, 0x65, 0x67, 0x2d, 0x9e, 0x32, 0x10, 0x99, 0x03, 0x2c, 0x99, 0xc8,
+ 0xab, 0x71, 0xed, 0x31, 0xf8, 0xbb, 0xde, 0xee, 0x69, 0x7f, 0xba, 0x31, 0x02, 0x40, 0x7e, 0xbc,
+ 0x60, 0x55, 0x4e, 0xd5, 0xc8, 0x6e, 0xf4, 0x0e, 0x57, 0xbe, 0x2e, 0xf9, 0x39, 0xbe, 0x59, 0x3f,
+ 0xa2, 0x30, 0xbb, 0x57, 0xd1, 0xa3, 0x13, 0x2e, 0x55, 0x7c, 0x7c, 0x6a, 0xd8, 0xde, 0x02, 0xbe,
+ 0x9e, 0xed, 0x10, 0xd0, 0xc5, 0x73, 0x1d, 0xea, 0x3e, 0xb1, 0x55, 0x81, 0x02, 0xef, 0x48, 0xc8,
+ 0x1c, 0x5c, 0x7a, 0x92, 0xb0, 0x58, 0xd3, 0x19, 0x5b, 0x5d, 0xa2, 0xb6, 0x56, 0x69, 0x02, 0x40,
+ 0x1e, 0x00, 0x6a, 0x9f, 0xba, 0xee, 0x46, 0x5a, 0xc5, 0xb5, 0x9f, 0x91, 0x33, 0xdd, 0xc9, 0x96,
+ 0x75, 0xb7, 0x87, 0xcf, 0x18, 0x1c, 0xb7, 0xb9, 0x3f, 0x04, 0x10, 0xb8, 0x75, 0xa9, 0xb8, 0xa0,
+ 0x31, 0x35, 0x03, 0x30, 0x89, 0xc8, 0x37, 0x68, 0x20, 0x30, 0x99, 0x39, 0x96, 0xd6, 0x2b, 0x3d,
+ 0x5e, 0x45, 0x84, 0xf7, 0xd2, 0x61, 0x50, 0xc9, 0x50, 0xba, 0x8d, 0x08, 0xaa, 0xd0, 0x08, 0x1e,
+};
+
+
+static const PKCS12_ATTR ATTRS1[] = {
+ { "friendlyName", "george" },
+ { "localKeyID", "1234567890" },
+ { "1.2.3.4.5", "MyCustomAttribute" },
+ { NULL, NULL }
+};
+
+static const PKCS12_ATTR ATTRS2[] = {
+ { "friendlyName", "janet" },
+ { "localKeyID", "987654321" },
+ { "1.2.3.5.8.13", "AnotherCustomAttribute" },
+ { NULL, NULL }
+};
+
+static const PKCS12_ENC enc_default = {
+#ifndef OPENSSL_NO_DES
+ NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
+#else
+ NID_aes_128_cbc,
+#endif
+ "Password1",
+ 1000
+};
+
+static const PKCS12_ENC mac_default = {
+ NID_sha1,
+ "Password1",
+ 1000
+};
+
+static const int enc_nids_all[] = {
+ /* NOTE: To use PBES2 we pass the desired cipher NID instead of NID_pbes2 */
+ NID_aes_128_cbc,
+ NID_aes_256_cbc,
+#ifndef OPENSSL_NO_DES
+ NID_des_ede3_cbc,
+ NID_des_cbc,
+#endif
+#ifndef OPENSSL_NO_RC5
+ NID_rc5_cbc,
+#endif
+#ifndef OPENSSL_NO_RC4
+ NID_rc4,
+#endif
+#ifndef OPENSSL_NO_RC2
+ NID_rc2_cbc,
+#endif
+
+#ifndef OPENSSL_NO_MD2
+# ifndef OPENSSL_NO_DES
+ NID_pbeWithMD2AndDES_CBC,
+# endif
+# ifndef OPENSSL_NO_RC2
+ NID_pbeWithMD2AndRC2_CBC,
+# endif
+#endif
+
+#ifndef OPENSSL_NO_MD5
+# ifndef OPENSSL_NO_DES
+ NID_pbeWithMD5AndDES_CBC,
+# endif
+# ifndef OPENSSL_NO_RC2
+ NID_pbeWithMD5AndRC2_CBC,
+# endif
+#endif
+#ifndef OPENSSL_NO_DES
+ NID_pbeWithSHA1AndDES_CBC,
+#endif
+#ifndef OPENSSL_NO_RC2
+ NID_pbe_WithSHA1And128BitRC2_CBC,
+ NID_pbe_WithSHA1And40BitRC2_CBC,
+ NID_pbeWithSHA1AndRC2_CBC,
+#endif
+#ifndef OPENSSL_NO_RC4
+ NID_pbe_WithSHA1And128BitRC4,
+ NID_pbe_WithSHA1And40BitRC4,
+#endif
+#ifndef OPENSSL_NO_DES
+ NID_pbe_WithSHA1And2_Key_TripleDES_CBC,
+ NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
+#endif
+};
+
+static const int enc_nids_no_legacy[] = {
+ /* NOTE: To use PBES2 we pass the desired cipher NID instead of NID_pbes2 */
+ NID_aes_128_cbc,
+ NID_aes_256_cbc,
+#ifndef OPENSSL_NO_DES
+ NID_des_ede3_cbc,
+ NID_pbe_WithSHA1And2_Key_TripleDES_CBC,
+ NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
+#endif
+};
+
+static const int mac_nids[] = {
+ NID_sha1,
+ NID_md5,
+ NID_sha256,
+ NID_sha512,
+ NID_sha3_256,
+ NID_sha3_512
+};
+
+static const int iters[] = {
+ 1,
+ 1000
+};
+
+static const char *passwords[] = {
+ "Password1",
+ "",
+};
+
+/* --------------------------------------------------------------------------
+ * Local functions
+ */
+
+static int get_custom_oid(void)
+{
+ static int sec_nid = -1;
+
+ if (sec_nid != -1)
+ return sec_nid;
+ if (!TEST_true(OBJ_create("1.3.5.7.9", "CustomSecretOID", "My custom secret OID")))
+ return -1;
+ return sec_nid = OBJ_txt2nid("CustomSecretOID");
+}
+
+
+/* --------------------------------------------------------------------------
+ * PKCS12 format tests
+ */
+
+static int test_single_cert_no_attrs(void)
+{
+ PKCS12_BUILDER *pb = new_pkcs12_builder("1cert.p12");
+
+ /* Generate/encode */
+ start_pkcs12(pb);
+
+ start_contentinfo(pb);
+
+ add_certbag(pb, CERT1, sizeof(CERT1), NULL);
+
+ end_contentinfo(pb);
+
+ end_pkcs12(pb);
+
+ /* Read/decode */
+ start_check_pkcs12(pb);
+
+ start_check_contentinfo(pb);
+
+ check_certbag(pb, CERT1, sizeof(CERT1), NULL);
+
+ end_check_contentinfo(pb);
+
+ end_check_pkcs12(pb);
+
+ return end_pkcs12_builder(pb);
+}
+
+static int test_single_key(PKCS12_ENC *enc)
+{
+ char fname[80];
+ PKCS12_BUILDER *pb;
+
+ sprintf(fname, "1key_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc->nid), enc->iter);
+
+ pb = new_pkcs12_builder(fname);
+
+ /* Generate/encode */
+ start_pkcs12(pb);
+
+ start_contentinfo(pb);
+
+ add_keybag(pb, KEY1, sizeof(KEY1), NULL, enc);
+
+ end_contentinfo(pb);
+
+ end_pkcs12(pb);
+
+ /* Read/decode */
+ start_check_pkcs12(pb);
+
+ start_check_contentinfo(pb);
+
+ check_keybag(pb, KEY1, sizeof(KEY1), NULL, enc);
+
+ end_check_contentinfo(pb);
+
+ end_check_pkcs12(pb);
+
+ return end_pkcs12_builder(pb);
+}
+
+static int test_single_key_enc_alg(int z)
+{
+ PKCS12_ENC enc;
+
+ if (lgcyprov == NULL)
+ enc.nid = enc_nids_no_legacy[z];
+ else
+ enc.nid = enc_nids_all[z];
+ enc.pass = enc_default.pass;
+ enc.iter = enc_default.iter;
+
+ return test_single_key(&enc);
+}
+
+static int test_single_key_enc_pass(int z)
+{
+ PKCS12_ENC enc;
+
+ enc.nid = enc_default.nid;
+ enc.pass = passwords[z];
+ enc.iter = enc_default.iter;
+
+ return test_single_key(&enc);
+}
+
+static int test_single_key_enc_iter(int z)
+{
+ PKCS12_ENC enc;
+
+ enc.nid = enc_default.nid;
+ enc.pass = enc_default.pass;
+ enc.iter = iters[z];
+
+ return test_single_key(&enc);
+}
+
+static int test_single_key_with_attrs(void)
+{
+ PKCS12_BUILDER *pb = new_pkcs12_builder("1keyattrs.p12");
+
+ /* Generate/encode */
+ start_pkcs12(pb);
+
+ start_contentinfo(pb);
+
+ add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
+
+ end_contentinfo(pb);
+
+ end_pkcs12(pb);
+
+ /* Read/decode */
+ start_check_pkcs12(pb);
+
+ start_check_contentinfo(pb);
+
+ check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
+
+ end_check_contentinfo(pb);
+
+ end_check_pkcs12(pb);
+
+ return end_pkcs12_builder(pb);
+}
+
+static int test_single_cert_mac(PKCS12_ENC *mac)
+{
+ char fname[80];
+ PKCS12_BUILDER *pb;
+
+ sprintf(fname, "1cert_mac-%s_iter-%d.p12", OBJ_nid2sn(mac->nid), mac->iter);
+
+ pb = new_pkcs12_builder(fname);
+
+ /* Generate/encode */
+ start_pkcs12(pb);
+
+ start_contentinfo(pb);
+
+ add_certbag(pb, CERT1, sizeof(CERT1), NULL);
+
+ end_contentinfo(pb);
+
+ end_pkcs12_with_mac(pb, mac);
+
+ /* Read/decode */
+ start_check_pkcs12_with_mac(pb, mac);
+
+ start_check_contentinfo(pb);
+
+ check_certbag(pb, CERT1, sizeof(CERT1), NULL);
+
+ end_check_contentinfo(pb);
+
+ end_check_pkcs12(pb);
+
+ return end_pkcs12_builder(pb);
+}
+
+static int test_single_cert_mac_alg(int z)
+{
+ PKCS12_ENC mac;
+
+ mac.nid = mac_nids[z];
+ mac.pass = mac_default.pass;
+ mac.iter = mac_default.iter;
+
+ return test_single_cert_mac(&mac);
+}
+
+static int test_single_cert_mac_pass(int z)
+{
+ PKCS12_ENC mac;
+
+ mac.nid = mac_default.nid;
+ mac.pass = passwords[z];
+ mac.iter = mac_default.iter;
+
+ return test_single_cert_mac(&mac);
+}
+
+static int test_single_cert_mac_iter(int z)
+{
+ PKCS12_ENC mac;
+
+ mac.nid = mac_default.nid;
+ mac.pass = mac_default.pass;
+ mac.iter = iters[z];
+
+ return test_single_cert_mac(&mac);
+}
+
+static int test_cert_key_with_attrs_and_mac(void)
+{
+ PKCS12_BUILDER *pb = new_pkcs12_builder("1cert1key.p12");
+
+ /* Generate/encode */
+ start_pkcs12(pb);
+
+ start_contentinfo(pb);
+
+ add_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
+ add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
+
+ end_contentinfo(pb);
+
+ end_pkcs12_with_mac(pb, &mac_default);
+
+ /* Read/decode */
+ start_check_pkcs12_with_mac(pb, &mac_default);
+
+ start_check_contentinfo(pb);
+
+ check_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
+ check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
+
+ end_check_contentinfo(pb);
+
+ end_check_pkcs12(pb);
+
+ return end_pkcs12_builder(pb);
+}
+
+static int test_cert_key_encrypted_content(void)
+{
+ PKCS12_BUILDER *pb = new_pkcs12_builder("1cert1key_enc.p12");
+
+ /* Generate/encode */
+ start_pkcs12(pb);
+
+ start_contentinfo(pb);
+
+ add_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
+ add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
+
+ end_contentinfo_encrypted(pb, &enc_default);
+
+ end_pkcs12_with_mac(pb, &mac_default);
+
+ /* Read/decode */
+ start_check_pkcs12_with_mac(pb, &mac_default);
+
+ start_check_contentinfo_encrypted(pb, &enc_default);
+
+ check_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
+ check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
+
+ end_check_contentinfo(pb);
+
+ end_check_pkcs12(pb);
+
+ return end_pkcs12_builder(pb);
+}
+
+static int test_single_secret_encrypted_content(void)
+{
+ PKCS12_BUILDER *pb = new_pkcs12_builder("1secret.p12");
+ int custom_nid = get_custom_oid();
+
+ /* Generate/encode */
+ start_pkcs12(pb);
+
+ start_contentinfo(pb);
+
+ add_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
+
+ end_contentinfo_encrypted(pb, &enc_default);
+
+ end_pkcs12_with_mac(pb, &mac_default);
+
+ /* Read/decode */
+ start_check_pkcs12_with_mac(pb, &mac_default);
+
+ start_check_contentinfo_encrypted(pb, &enc_default);
+
+ check_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
+
+ end_check_contentinfo(pb);
+
+ end_check_pkcs12(pb);
+
+ return end_pkcs12_builder(pb);
+}
+
+static int test_single_secret(PKCS12_ENC *enc)
+{
+ int custom_nid;
+ char fname[80];
+ PKCS12_BUILDER *pb;
+
+ sprintf(fname, "1secret_ciph-%s_iter-%d.p12", OBJ_nid2sn(enc->nid), enc->iter);
+ pb = new_pkcs12_builder(fname);
+ custom_nid = get_custom_oid();
+
+ /* Generate/encode */
+ start_pkcs12(pb);
+
+ start_contentinfo(pb);
+
+ add_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
+
+ end_contentinfo_encrypted(pb, enc);
+
+ end_pkcs12_with_mac(pb, &mac_default);
+
+ /* Read/decode */
+ start_check_pkcs12_with_mac(pb, &mac_default);
+
+ start_check_contentinfo_encrypted(pb, enc);
+
+ check_secretbag(pb, custom_nid, "VerySecretMessage", ATTRS1);
+
+ end_check_contentinfo(pb);
+
+ end_check_pkcs12(pb);
+
+ return end_pkcs12_builder(pb);
+}
+
+static int test_single_secret_enc_alg(int z)
+{
+ PKCS12_ENC enc;
+
+ if (lgcyprov == NULL)
+ enc.nid = enc_nids_no_legacy[z];
+ else
+ enc.nid = enc_nids_all[z];
+ enc.pass = enc_default.pass;
+ enc.iter = enc_default.iter;
+
+ return test_single_secret(&enc);
+}
+
+static int test_multiple_contents(void)
+{
+ PKCS12_BUILDER *pb = new_pkcs12_builder("multi_contents.p12");
+ int custom_nid = get_custom_oid();
+
+ /* Generate/encode */
+ start_pkcs12(pb);
+
+ start_contentinfo(pb);
+
+ add_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
+ add_certbag(pb, CERT2, sizeof(CERT2), ATTRS2);
+ add_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
+ add_keybag(pb, KEY2, sizeof(KEY2), ATTRS2, &enc_default);
+
+ end_contentinfo(pb);
+
+ start_contentinfo(pb);
+
+ add_secretbag(pb, custom_nid, "VeryVerySecretMessage", ATTRS1);
+
+ end_contentinfo_encrypted(pb, &enc_default);
+
+ end_pkcs12_with_mac(pb, &mac_default);
+
+ /* Read/decode */
+ start_check_pkcs12_with_mac(pb, &mac_default);
+
+ start_check_contentinfo(pb);
+
+ check_certbag(pb, CERT1, sizeof(CERT1), ATTRS1);
+ check_certbag(pb, CERT2, sizeof(CERT2), ATTRS2);
+ check_keybag(pb, KEY1, sizeof(KEY1), ATTRS1, &enc_default);
+ check_keybag(pb, KEY2, sizeof(KEY2), ATTRS2, &enc_default);
+
+ end_check_contentinfo(pb);
+
+ start_check_contentinfo_encrypted(pb, &enc_default);
+
+ check_secretbag(pb, custom_nid, "VeryVerySecretMessage", ATTRS1);
+
+ end_check_contentinfo(pb);
+
+ end_check_pkcs12(pb);
+
+ return end_pkcs12_builder(pb);
+}
+
+#ifndef OPENSSL_NO_DES
+static int pkcs12_create_test(void)
+{
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ PKCS12 *p12 = NULL;
+ const unsigned char *p;
+
+ static const unsigned char rsa_key[] = {
+ 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xbb,
+ 0x24, 0x7a, 0x09, 0x7e, 0x0e, 0xb2, 0x37, 0x32, 0xcc, 0x39, 0x67, 0xad,
+ 0xf1, 0x9e, 0x3d, 0x6b, 0x82, 0x83, 0xd1, 0xd0, 0xac, 0xa4, 0xc0, 0x18,
+ 0xbe, 0x8d, 0x98, 0x00, 0xc0, 0x7b, 0xff, 0x07, 0x44, 0xc9, 0xca, 0x1c,
+ 0xba, 0x36, 0xe1, 0x27, 0x69, 0xff, 0xb1, 0xe3, 0x8d, 0x8b, 0xee, 0x57,
+ 0xa9, 0x3a, 0xaa, 0x16, 0x43, 0x39, 0x54, 0x19, 0x7c, 0xae, 0x69, 0x24,
+ 0x14, 0xf6, 0x64, 0xff, 0xbc, 0x74, 0xc6, 0x67, 0x6c, 0x4c, 0xf1, 0x02,
+ 0x49, 0x69, 0xc7, 0x2b, 0xe1, 0xe1, 0xa1, 0xa3, 0x43, 0x14, 0xf4, 0x77,
+ 0x8f, 0xc8, 0xd0, 0x85, 0x5a, 0x35, 0x95, 0xac, 0x62, 0xa9, 0xc1, 0x21,
+ 0x00, 0x77, 0xa0, 0x8b, 0x97, 0x30, 0xb4, 0x5a, 0x2c, 0xb8, 0x90, 0x2f,
+ 0x48, 0xa0, 0x05, 0x28, 0x4b, 0xf2, 0x0f, 0x8d, 0xec, 0x8b, 0x4d, 0x03,
+ 0x42, 0x75, 0xd6, 0xad, 0x81, 0xc0, 0x11, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0x02, 0x81, 0x80, 0x00, 0xfc, 0xb9, 0x4a, 0x26, 0x07, 0x89, 0x51, 0x2b,
+ 0x53, 0x72, 0x91, 0xe0, 0x18, 0x3e, 0xa6, 0x5e, 0x31, 0xef, 0x9c, 0x0c,
+ 0x16, 0x24, 0x42, 0xd0, 0x28, 0x33, 0xf9, 0xfa, 0xd0, 0x3c, 0x54, 0x04,
+ 0x06, 0xc0, 0x15, 0xf5, 0x1b, 0x9a, 0xb3, 0x24, 0x31, 0xab, 0x3c, 0x6b,
+ 0x47, 0x43, 0xb0, 0xd2, 0xa9, 0xdc, 0x05, 0xe1, 0x81, 0x59, 0xb6, 0x04,
+ 0xe9, 0x66, 0x61, 0xaa, 0xd7, 0x0b, 0x00, 0x8f, 0x3d, 0xe5, 0xbf, 0xa2,
+ 0xf8, 0x5e, 0x25, 0x6c, 0x1e, 0x22, 0x0f, 0xb4, 0xfd, 0x41, 0xe2, 0x03,
+ 0x31, 0x5f, 0xda, 0x20, 0xc5, 0xc0, 0xf3, 0x55, 0x0e, 0xe1, 0xc9, 0xec,
+ 0xd7, 0x3e, 0x2a, 0x0c, 0x01, 0xca, 0x7b, 0x22, 0xcb, 0xac, 0xf4, 0x2b,
+ 0x27, 0xf0, 0x78, 0x5f, 0xb5, 0xc2, 0xf9, 0xe8, 0x14, 0x5a, 0x6e, 0x7e,
+ 0x86, 0xbd, 0x6a, 0x9b, 0x20, 0x0c, 0xba, 0xcc, 0x97, 0x20, 0x11, 0x02,
+ 0x41, 0x00, 0xc9, 0x59, 0x9f, 0x29, 0x8a, 0x5b, 0x9f, 0xe3, 0x2a, 0xd8,
+ 0x7e, 0xc2, 0x40, 0x9f, 0xa8, 0x45, 0xe5, 0x3e, 0x11, 0x8d, 0x3c, 0xed,
+ 0x6e, 0xab, 0xce, 0xd0, 0x65, 0x46, 0xd8, 0xc7, 0x07, 0x63, 0xb5, 0x23,
+ 0x34, 0xf4, 0x9f, 0x7e, 0x1c, 0xc7, 0xc7, 0xf9, 0x65, 0xd1, 0xf4, 0x04,
+ 0x42, 0x38, 0xbe, 0x3a, 0x0c, 0x9d, 0x08, 0x25, 0xfc, 0xa3, 0x71, 0xd9,
+ 0xae, 0x0c, 0x39, 0x61, 0xf4, 0x89, 0x02, 0x41, 0x00, 0xed, 0xef, 0xab,
+ 0xa9, 0xd5, 0x39, 0x9c, 0xee, 0x59, 0x1b, 0xff, 0xcf, 0x48, 0x44, 0x1b,
+ 0xb6, 0x32, 0xe7, 0x46, 0x24, 0xf3, 0x04, 0x7f, 0xde, 0x95, 0x08, 0x6d,
+ 0x75, 0x9e, 0x67, 0x17, 0xba, 0x5c, 0xa4, 0xd4, 0xe2, 0xe2, 0x4d, 0x77,
+ 0xce, 0xeb, 0x66, 0x29, 0xc5, 0x96, 0xe0, 0x62, 0xbb, 0xe5, 0xac, 0xdc,
+ 0x44, 0x62, 0x54, 0x86, 0xed, 0x64, 0x0c, 0xce, 0xd0, 0x60, 0x03, 0x9d,
+ 0x49, 0x02, 0x40, 0x54, 0xd9, 0x18, 0x72, 0x27, 0xe4, 0xbe, 0x76, 0xbb,
+ 0x1a, 0x6a, 0x28, 0x2f, 0x95, 0x58, 0x12, 0xc4, 0x2c, 0xa8, 0xb6, 0xcc,
+ 0xe2, 0xfd, 0x0d, 0x17, 0x64, 0xc8, 0x18, 0xd7, 0xc6, 0xdf, 0x3d, 0x4c,
+ 0x1a, 0x9e, 0xf9, 0x2a, 0xb0, 0xb9, 0x2e, 0x12, 0xfd, 0xec, 0xc3, 0x51,
+ 0xc1, 0xed, 0xa9, 0xfd, 0xb7, 0x76, 0x93, 0x41, 0xd8, 0xc8, 0x22, 0x94,
+ 0x1a, 0x77, 0xf6, 0x9c, 0xc3, 0xc3, 0x89, 0x02, 0x41, 0x00, 0x8e, 0xf9,
+ 0xa7, 0x08, 0xad, 0xb5, 0x2a, 0x04, 0xdb, 0x8d, 0x04, 0xa1, 0xb5, 0x06,
+ 0x20, 0x34, 0xd2, 0xcf, 0xc0, 0x89, 0xb1, 0x72, 0x31, 0xb8, 0x39, 0x8b,
+ 0xcf, 0xe2, 0x8e, 0xa5, 0xda, 0x4f, 0x45, 0x1e, 0x53, 0x42, 0x66, 0xc4,
+ 0x30, 0x4b, 0x29, 0x8e, 0xc1, 0x69, 0x17, 0x29, 0x8c, 0x8a, 0xe6, 0x0f,
+ 0x82, 0x68, 0xa1, 0x41, 0xb3, 0xb6, 0x70, 0x99, 0x75, 0xa9, 0x27, 0x18,
+ 0xe4, 0xe9, 0x02, 0x41, 0x00, 0x89, 0xea, 0x6e, 0x6d, 0x70, 0xdf, 0x25,
+ 0x5f, 0x18, 0x3f, 0x48, 0xda, 0x63, 0x10, 0x8b, 0xfe, 0xa8, 0x0c, 0x94,
+ 0x0f, 0xde, 0x97, 0x56, 0x53, 0x89, 0x94, 0xe2, 0x1e, 0x2c, 0x74, 0x3c,
+ 0x91, 0x81, 0x34, 0x0b, 0xa6, 0x40, 0xf8, 0xcb, 0x2a, 0x60, 0x8c, 0xe0,
+ 0x02, 0xb7, 0x89, 0x93, 0xcf, 0x18, 0x9f, 0x49, 0x54, 0xfd, 0x7d, 0x3f,
+ 0x9a, 0xef, 0xd4, 0xa4, 0x4f, 0xc1, 0x45, 0x99, 0x91,
+ };
+
+ p = rsa_key;
+ if (!TEST_ptr(pkey = d2i_PrivateKey_ex(EVP_PKEY_RSA, NULL, &p,
+ sizeof(rsa_key), NULL, NULL)))
+ goto err;
+ if (!TEST_int_eq(ERR_peek_error(), 0))
+ goto err;
+ p12 = PKCS12_create(NULL, NULL, pkey, NULL, NULL,
+ NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
+ NID_pbe_WithSHA1And3_Key_TripleDES_CBC, 2, 1, 0);
+ if (!TEST_ptr(p12))
+ goto err;
+
+ if (!TEST_int_eq(ERR_peek_error(), 0))
+ goto err;
+ ret = 1;
+err:
+ PKCS12_free(p12);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+#endif
+
+static int pkcs12_recreate_test(void)
+{
+ int ret = 0;
+ X509 *cert = NULL;
+ X509 *cert_parsed = NULL;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY *pkey_parsed = NULL;
+ PKCS12 *p12 = NULL;
+ PKCS12 *p12_parsed = NULL;
+ PKCS12 *p12_recreated = NULL;
+ const unsigned char *cert_bytes = CERT1;
+ const unsigned char *key_bytes = KEY1;
+ BIO *bio = NULL;
+
+ cert = d2i_X509(NULL, &cert_bytes, sizeof(CERT1));
+ if (!TEST_ptr(cert))
+ goto err;
+ pkey = d2i_AutoPrivateKey(NULL, &key_bytes, sizeof(KEY1));
+ if (!TEST_ptr(pkey))
+ goto err;
+ p12 = PKCS12_create("pass", NULL, pkey, cert, NULL, NID_aes_256_cbc,
+ NID_aes_256_cbc, 2, 1, 0);
+ if (!TEST_ptr(p12))
+ goto err;
+ if (!TEST_int_eq(ERR_peek_error(), 0))
+ goto err;
+
+ bio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(bio))
+ goto err;
+ if (!TEST_int_eq(i2d_PKCS12_bio(bio, p12), 1))
+ goto err;
+ p12_parsed = PKCS12_init_ex(NID_pkcs7_data, testctx, NULL);
+ if (!TEST_ptr(p12_parsed))
+ goto err;
+ p12_parsed = d2i_PKCS12_bio(bio, &p12_parsed);
+ if (!TEST_ptr(p12_parsed))
+ goto err;
+ if (!TEST_int_eq(PKCS12_parse(p12_parsed, "pass", &pkey_parsed,
+ &cert_parsed, NULL), 1))
+ goto err;
+
+ /* cert_parsed also contains auxiliary data */
+ p12_recreated = PKCS12_create("new_pass", NULL, pkey_parsed, cert_parsed,
+ NULL, NID_aes_256_cbc, NID_aes_256_cbc,
+ 2, 1, 0);
+ if (!TEST_ptr(p12_recreated))
+ goto err;
+ if (!TEST_int_eq(ERR_peek_error(), 0))
+ goto err;
+
+ ret = 1;
+err:
+ BIO_free(bio);
+ PKCS12_free(p12);
+ PKCS12_free(p12_parsed);
+ PKCS12_free(p12_recreated);
+ EVP_PKEY_free(pkey);
+ EVP_PKEY_free(pkey_parsed);
+ X509_free(cert);
+ X509_free(cert_parsed);
+ return ret;
+}
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_WRITE,
+ OPT_LEGACY,
+ OPT_CONTEXT,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "write", OPT_WRITE, '-', "Write PKCS12 objects to file" },
+ { "legacy", OPT_LEGACY, '-', "Test the legacy APIs" },
+ { "context", OPT_CONTEXT, '-', "Explicitly use a non-default library context" },
+ { NULL }
+ };
+ return options;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_WRITE:
+ PKCS12_helper_set_write_files(1);
+ break;
+ case OPT_LEGACY:
+ PKCS12_helper_set_legacy(1);
+ break;
+ case OPT_CONTEXT:
+ default_libctx = 0;
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ if (!default_libctx) {
+ testctx = OSSL_LIB_CTX_new();
+ if (!TEST_ptr(testctx))
+ return 0;
+ nullprov = OSSL_PROVIDER_load(NULL, "null");
+ if (!TEST_ptr(nullprov))
+ return 0;
+ }
+
+ deflprov = OSSL_PROVIDER_load(testctx, "default");
+ if (!TEST_ptr(deflprov))
+ return 0;
+ lgcyprov = OSSL_PROVIDER_load(testctx, "legacy");
+
+ PKCS12_helper_set_libctx(testctx);
+
+ /*
+ * Verify that the default and fips providers in the default libctx are not
+ * available if we are using a standalone context
+ */
+ if (!default_libctx) {
+ if (!TEST_false(OSSL_PROVIDER_available(NULL, "default"))
+ || !TEST_false(OSSL_PROVIDER_available(NULL, "fips")))
+ return 0;
+ }
+
+ ADD_TEST(test_single_cert_no_attrs);
+ if (lgcyprov == NULL) {
+ ADD_ALL_TESTS(test_single_key_enc_alg, OSSL_NELEM(enc_nids_no_legacy));
+ ADD_ALL_TESTS(test_single_secret_enc_alg, OSSL_NELEM(enc_nids_no_legacy));
+ } else {
+ ADD_ALL_TESTS(test_single_key_enc_alg, OSSL_NELEM(enc_nids_all));
+ ADD_ALL_TESTS(test_single_secret_enc_alg, OSSL_NELEM(enc_nids_all));
+ }
+#ifndef OPENSSL_NO_DES
+ if (default_libctx)
+ ADD_TEST(pkcs12_create_test);
+#endif
+ if (default_libctx)
+ ADD_TEST(pkcs12_recreate_test);
+ ADD_ALL_TESTS(test_single_key_enc_pass, OSSL_NELEM(passwords));
+ ADD_ALL_TESTS(test_single_key_enc_iter, OSSL_NELEM(iters));
+ ADD_TEST(test_single_key_with_attrs);
+ ADD_ALL_TESTS(test_single_cert_mac_alg, OSSL_NELEM(mac_nids));
+ ADD_ALL_TESTS(test_single_cert_mac_pass, OSSL_NELEM(passwords));
+ ADD_ALL_TESTS(test_single_cert_mac_iter, OSSL_NELEM(iters));
+ ADD_TEST(test_cert_key_with_attrs_and_mac);
+ ADD_TEST(test_cert_key_encrypted_content);
+ ADD_TEST(test_single_secret_encrypted_content);
+ ADD_TEST(test_multiple_contents);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OSSL_PROVIDER_unload(nullprov);
+ OSSL_PROVIDER_unload(deflprov);
+ OSSL_PROVIDER_unload(lgcyprov);
+ OSSL_LIB_CTX_free(testctx);
+}
diff --git a/test/pkcs7-1.pem b/test/pkcs7-1.pem
new file mode 100644
index 000000000000..c47b27af8893
--- /dev/null
+++ b/test/pkcs7-1.pem
@@ -0,0 +1,15 @@
+-----BEGIN PKCS7-----
+MIICUAYJKoZIhvcNAQcCoIICQTCCAj0CAQExDjAMBggqhkiG9w0CAgUAMCgGCSqG
+SIb3DQEHAaAbBBlFdmVyeW9uZSBnZXRzIEZyaWRheSBvZmYuoIIBXjCCAVowggEE
+AgQUAAApMA0GCSqGSIb3DQEBAgUAMCwxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRF
+eGFtcGxlIE9yZ2FuaXphdGlvbjAeFw05MjA5MDkyMjE4MDZaFw05NDA5MDkyMjE4
+MDVaMEIxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRFeGFtcGxlIE9yZ2FuaXphdGlv
+bjEUMBIGA1UEAxMLVGVzdCBVc2VyIDEwWzANBgkqhkiG9w0BAQEFAANKADBHAkAK
+ZnkdxpiBaN56t3QZu3+wwAHGJxAnAHUUKULhmo2MUdBTs+N4Kh3l3Fr06+mUaBcB
+FKHf5nzcmpr1XWVWILurAgMBAAEwDQYJKoZIhvcNAQECBQADQQBFGqHhqncgSl/N
+9XYGnQL3MsJvNnsNV4puZPOakR9Hld8JlDQFEaDR30ogsmp3TMrvdfxpLlTCoZN8
+BxEmnZsWMYGbMIGYAgEBMDQwLDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFEV4YW1w
+bGUgT3JnYW5pemF0aW9uAgQUAAApMAwGCCqGSIb3DQICBQAwDQYJKoZIhvcNAQEB
+BQAEQAX6aoEvx9+L9PJUJQngPoRuEbnGIL4gCe+0QO+8xmkhaZSsBPNBtX0FIC1C
+j7Kie1x339mxW/w9VZNTUDQQweHh
+-----END PKCS7-----
diff --git a/test/pkcs7.pem b/test/pkcs7.pem
new file mode 100644
index 000000000000..d55c60b94e13
--- /dev/null
+++ b/test/pkcs7.pem
@@ -0,0 +1,54 @@
+ MIAGCSqGSIb3DQEHAqCAMIACAQExADCABgkqhkiG9w0BBwEAAKCAMIIE+DCCBGGg
+ AwIBAgIQaGSF/JpbS1C223+yrc+N1DANBgkqhkiG9w0BAQQFADBiMREwDwYDVQQH
+ EwhJbnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNDAyBgNVBAsTK1Zl
+ cmlTaWduIENsYXNzIDEgQ0EgLSBJbmRpdmlkdWFsIFN1YnNjcmliZXIwHhcNOTYw
+ ODEyMDAwMDAwWhcNOTYwODE3MjM1OTU5WjCCASAxETAPBgNVBAcTCEludGVybmV0
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
+ c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjE3MDUGA1UECxMuRGlnaXRh
+ bCBJRCBDbGFzcyAxIC0gU01JTUUgVmVyaVNpZ24sIEluYy4gVEVTVDFGMEQGA1UE
+ CxM9d3d3LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L0NQUyBJbmNvcnAuIGJ5IFJl
+ Zi4sTElBQi5MVEQoYyk5NjEZMBcGA1UEAxMQQWxleGFuZHJlIERlYWNvbjEgMB4G
+ CSqGSIb3DQEJARYRYWxleEB2ZXJpc2lnbi5jb20wWzANBgkqhkiG9w0BAQEFAANK
+ ADBHAkAOy7xxCAIkOfuIA2LyRpxgKlDORl8htdXYhF5iBGUx1GYaK6KF+bK/CCI0
+ l4j2OfWGFBUrwGoWqxTNcWgTfMzRAgMBAAGjggIyMIICLjAJBgNVHRMEAjAAMIIC
+ HwYDVR0DBIICFjCCAhIwggIOMIICCgYLYIZIAYb4RQEHAQEwggH5FoIBp1RoaXMg
+ Y2VydGlmaWNhdGUgaW5jb3Jwb3JhdGVzIGJ5IHJlZmVyZW5jZSwgYW5kIGl0cyB1
+ c2UgaXMgc3RyaWN0bHkgc3ViamVjdCB0bywgdGhlIFZlcmlTaWduIENlcnRpZmlj
+ YXRpb24gUHJhY3RpY2UgU3RhdGVtZW50IChDUFMpLCBhdmFpbGFibGUgYXQ6IGh0
+ dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9DUFM7IGJ5IEUtbWFpbCBhdCBDUFMtcmVx
+ dWVzdHNAdmVyaXNpZ24uY29tOyBvciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMu
+ LCAyNTkzIENvYXN0IEF2ZS4sIE1vdW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBU
+ ZWwuICsxICg0MTUpIDk2MS04ODMwIENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2ln
+ biwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVT
+ IERJU0NMQUlNRUQgYW5kIExJQUJJTElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcB
+ AQGhDgYMYIZIAYb4RQEHAQECMCwwKhYoaHR0cHM6Ly93d3cudmVyaXNpZ24uY29t
+ L3JlcG9zaXRvcnkvQ1BTIDANBgkqhkiG9w0BAQQFAAOBgQAimWMGQwwwxk+b3KAL
+ HlSWXtU7LWHe29CEG8XeVNTvrqs6SBqT7OoENOkGxpfdpVgZ3Qw2SKjxDvbvpfSF
+ slsqcxWSgB/hWuaVuZCkvTw/dYGGOxkTJGxvDCfl1PZjX4dKbatslsi9Z9HpGWT7
+ ttItRwKqcBKgmCJvKi1pGWED0zCCAnkwggHioAMCAQICEDURpVKQb+fQKaRAGdQR
+ /D4wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlT
+ aWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5IENlcnRp
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDYyNzAwMDAwMFoXDTk3MDYyNzIzNTk1
+ OVowYjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMu
+ MTQwMgYDVQQLEytWZXJpU2lnbiBDbGFzcyAxIENBIC0gSW5kaXZpZHVhbCBTdWJz
+ Y3JpYmVyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2FKbPTdAFDdjKI9Bv
+ qrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7jW80GqLd5HUQq7XPy
+ sVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cariQPJUObwW7s987Lrb
+ P2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABozMwMTAPBgNVHRMECDAGAQH/AgEBMAsG
+ A1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAgQwDQYJKoZIhvcNAQECBQADgYEA
+ KeXHoBmnbxRCgk0jM9e9mDppdxpsipIna/J8DOHEUuD4nONAr4+xOg73SBl026n7
+ Bk55A2wvAMGo7+kKTZ+rHaFDDcmq4O+rzFri2RIOeGAncj1IcGptAQhvXoIhFMG4
+ Jlzg1KlHZHqy7D3jex78zcSU7kKOu8f5tAX1jC3+sToAAKGAMIIBJzCBkTANBgkq
+ hkiG9w0BAQIFADBiMREwDwYDVQQHEwhJbnRlcm5ldDEXMBUGA1UEChMOVmVyaVNp
+ Z24sIEluYy4xNDAyBgNVBAsTK1ZlcmlTaWduIENsYXNzIDEgQ0EgLSBJbmRpdmlk
+ dWFsIFN1YnNjcmliZXIXDTk2MDcwMTE3MzA0MFoXDTk3MDcwMTAwMDAwMFowDQYJ
+ KoZIhvcNAQECBQADgYEAGLuQ6PX8A7AiqBEtWzYtl6lZNSDI0bR5YUo+D2Jzkw30
+ dxQnJSbKXEc6XYuzAW5HvrzATXu5c19WWPT4cRDwmjH71i9QcDysWwf/wE0qGTiW
+ I3tQT0I5VGh7jIJD07nlBw3R4Xl8dH9kr85JsWinqDH5YKpIo9o8knY5n7+qjOow
+ ggEkMIGOMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5W
+ ZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFyeSBD
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eRcNOTYwNzE2MjMxMTI5WhcNOTYwODE1MDAw
+ MDAwWjANBgkqhkiG9w0BAQIFAAOBgQAXsLE4vnsY6sY67QrmWec7iaU2ehzxanEK
+ /9wKHZNuhlNzk+qGZZw2evxfUe2OaRbYpl8zuZvhK9BHD3ad14OSe9/zx5hOPgP/
+ DQXt6R4R8Q/1JheBrolrgbavjvI2wKS8/Psp2prBrkF4T48+AKRmS8Zzh1guxgvP
+ b+xSu/jH0gAAMYAAAAAAAAAAAA==
diff --git a/test/pkcs7_test.c b/test/pkcs7_test.c
new file mode 100644
index 000000000000..c30bf0eabca1
--- /dev/null
+++ b/test/pkcs7_test.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/pkcs7.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/pem.h>
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_EC
+static const unsigned char cert_der[] = {
+ 0x30, 0x82, 0x01, 0x51, 0x30, 0x81, 0xf7, 0xa0, 0x03, 0x02, 0x01, 0x02,
+ 0x02, 0x02, 0x03, 0x09, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce,
+ 0x3d, 0x04, 0x03, 0x02, 0x30, 0x27, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
+ 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x18, 0x30, 0x16, 0x06,
+ 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f,
+ 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17,
+ 0x0d, 0x31, 0x37, 0x30, 0x31, 0x30, 0x31, 0x31, 0x32, 0x30, 0x31, 0x30,
+ 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x31, 0x32, 0x33, 0x31, 0x30, 0x38,
+ 0x33, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x27, 0x31, 0x0b, 0x30, 0x09, 0x06,
+ 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x18, 0x30, 0x16,
+ 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x63, 0x72, 0x79, 0x70, 0x74,
+ 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x20, 0x43, 0x41, 0x30, 0x59,
+ 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06,
+ 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
+ 0x04, 0x18, 0xff, 0xcf, 0xbb, 0xf9, 0x39, 0xb8, 0xf5, 0xdd, 0xc3, 0xee,
+ 0xc0, 0x40, 0x8b, 0x06, 0x75, 0x06, 0xab, 0x4f, 0xcd, 0xd8, 0x2c, 0x52,
+ 0x24, 0x4e, 0x1f, 0xe0, 0x10, 0x46, 0x67, 0xb5, 0x5f, 0x15, 0xb9, 0x62,
+ 0xbd, 0x3b, 0xcf, 0x0c, 0x6f, 0xbe, 0x1a, 0xf7, 0xb4, 0xa1, 0x0f, 0xb4,
+ 0xb9, 0xcb, 0x6e, 0x86, 0xb3, 0x50, 0xf9, 0x6c, 0x51, 0xbf, 0xc1, 0x82,
+ 0xd7, 0xbe, 0xc5, 0xf9, 0x05, 0xa3, 0x13, 0x30, 0x11, 0x30, 0x0f, 0x06,
+ 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01,
+ 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04,
+ 0x03, 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0xd1, 0x12,
+ 0xef, 0x8d, 0x97, 0x5a, 0x6e, 0xb8, 0xb6, 0x41, 0xa7, 0xcf, 0xc0, 0xe7,
+ 0xa4, 0x6e, 0xae, 0xda, 0x51, 0xe4, 0x64, 0x54, 0x2b, 0xde, 0x86, 0x95,
+ 0xbc, 0xf7, 0x1e, 0x9a, 0xf9, 0x5b, 0x02, 0x21, 0x00, 0xd1, 0x61, 0x86,
+ 0xce, 0x66, 0x31, 0xe4, 0x2f, 0x54, 0xbd, 0xf5, 0xc8, 0x2b, 0xb3, 0x44,
+ 0xce, 0x24, 0xf8, 0xa5, 0x0b, 0x72, 0x11, 0x21, 0x34, 0xb9, 0x15, 0x4a,
+ 0x5f, 0x0e, 0x27, 0x32, 0xa9
+};
+
+static int pkcs7_verify_test(void)
+{
+ int ret = 0;
+ size_t i;
+ BIO *msg_bio = NULL, *x509_bio = NULL, *bio = NULL;
+ X509 *cert = NULL;
+ X509_STORE *store = NULL;
+ PKCS7 *p7 = NULL;
+ const char *sig[] = {
+ "MIME-Version: 1.0\nContent-Type: multipart/signed; protocol=\"application/x-pkcs7-signature\"; micalg=\"sha-256\"; boundary=\"----9B5319FF2E4428B17CD26B69294E7F31\"\n\n",
+ "This is an S/MIME signed message\n\n------9B5319FF2E4428B17CD26B69294E7F31\n",
+ "Content-Type: text/plain\r\n\r\nhello world\n------9B5319FF2E4428B17CD26B69294E7F31\n",
+ "Content-Type: application/x-pkcs7-signature; name=\"smime.p7s\"\n",
+ "Content-Transfer-Encoding: base64\nContent-Disposition: attachment; filename=\"smime.p7s\"\n\n",
+ "MIIDEgYJKoZIhvcNAQcCoIIDAzCCAv8CAQExDzANBglghkgBZQMEAgEFADALBgkq\nhkiG9w0BBwGgggFVMIIBUTCB96ADAgECAgIDCTAKBggqhkjOPQQDAjAnMQswCQYD\nVQQGEwJVUzEYMBYGA1UEAwwPY3J5cHRvZ3JhcGh5IENBMB4XDTE3MDEwMTEyMDEw\nMFoXDTM4MTIzMTA4MzAwMFowJzELMAkGA1UEBhMCVVMxGDAWBgNVBAMMD2NyeXB0\nb2dyYXBoeSBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBj/z7v5Obj13cPu\nwECLBnUGq0/N2CxSJE4f4BBGZ7VfFblivTvPDG++Gve0oQ+0uctuhrNQ+WxRv8GC\n",
+ "177F+QWjEzARMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhANES\n742XWm64tkGnz8DnpG6u2lHkZFQr3oaVvPcemvlbAiEA0WGGzmYx5C9UvfXIK7NE\nziT4pQtyESE0uRVKXw4nMqkxggGBMIIBfQIBATAtMCcxCzAJBgNVBAYTAlVTMRgw\nFgYDVQQDDA9jcnlwdG9ncmFwaHkgQ0ECAgMJMA0GCWCGSAFlAwQCAQUAoIHkMBgG\nCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIxMDUyMDE4\nNTA0OVowLwYJKoZIhvcNAQkEMSIEIOdwMRgQrqcnmMYvag+BVvErcc6bwUXI94Ds\n",
+ "QkiyIU9pMHkGCSqGSIb3DQEJDzFsMGowCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQB\nFjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0GCCqG\nSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMAoGCCqGSM49BAMCBEcw\nRQIhANYMJku1fW9T1MIEcAyREArz9kXCY4tWck5Pt0xzrYhaAiBDSP6e43zj4YtI\nuvQW+Lzv+dNF8EPuhgoPNe17RuUSLw==\n\n------9B5319FF2E4428B17CD26B69294E7F31--\n\n"
+ };
+ const char *signed_data = "Content-Type: text/plain\r\n\r\nhello world";
+
+ if (!TEST_ptr(bio = BIO_new(BIO_s_mem())))
+ goto end;
+ for (i = 0; i < OSSL_NELEM(sig); ++i)
+ BIO_puts(bio, sig[i]);
+
+ ret = TEST_ptr(msg_bio = BIO_new_mem_buf(signed_data, strlen(signed_data)))
+ && TEST_ptr(x509_bio = BIO_new_mem_buf(cert_der, sizeof(cert_der)))
+ && TEST_ptr(cert = d2i_X509_bio(x509_bio, NULL))
+ && TEST_int_eq(ERR_peek_error(), 0)
+ && TEST_ptr(store = X509_STORE_new())
+ && TEST_true(X509_STORE_add_cert(store, cert))
+ && TEST_ptr(p7 = SMIME_read_PKCS7(bio, NULL))
+ && TEST_int_eq(ERR_peek_error(), 0)
+ && TEST_true(PKCS7_verify(p7, NULL, store, msg_bio, NULL, PKCS7_TEXT))
+ && TEST_int_eq(ERR_peek_error(), 0);
+end:
+ X509_STORE_free(store);
+ X509_free(cert);
+ PKCS7_free(p7);
+ BIO_free(msg_bio);
+ BIO_free(x509_bio);
+ BIO_free(bio);
+ return ret;
+}
+#endif /* OPENSSL_NO_EC */
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_EC
+ ADD_TEST(pkcs7_verify_test);
+#endif /* OPENSSL_NO_EC */
+ return 1;
+}
diff --git a/test/pkey_meth_kdf_test.c b/test/pkey_meth_kdf_test.c
new file mode 100644
index 000000000000..f816d24fb56f
--- /dev/null
+++ b/test/pkey_meth_kdf_test.c
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2017-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 of the EVP_PKEY_CTX_set_* macro family */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/evp.h>
+#include <openssl/kdf.h>
+#include "testutil.h"
+
+static int test_kdf_tls1_prf(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *pctx;
+ unsigned char out[16];
+ size_t outlen = sizeof(out);
+
+ if ((pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_TLS1_PRF, NULL)) == NULL) {
+ TEST_error("EVP_PKEY_TLS1_PRF");
+ goto err;
+ }
+ if (EVP_PKEY_derive_init(pctx) <= 0) {
+ TEST_error("EVP_PKEY_derive_init");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set_tls1_prf_md(pctx, EVP_sha256()) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set_tls1_prf_md");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set1_tls1_prf_secret(pctx,
+ (unsigned char *)"secret", 6) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set1_tls1_prf_secret");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_add1_tls1_prf_seed(pctx,
+ (unsigned char *)"seed", 4) <= 0) {
+ TEST_error("EVP_PKEY_CTX_add1_tls1_prf_seed");
+ goto err;
+ }
+ if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) {
+ TEST_error("EVP_PKEY_derive");
+ goto err;
+ }
+
+ {
+ const unsigned char expected[sizeof(out)] = {
+ 0x8e, 0x4d, 0x93, 0x25, 0x30, 0xd7, 0x65, 0xa0,
+ 0xaa, 0xe9, 0x74, 0xc3, 0x04, 0x73, 0x5e, 0xcc
+ };
+ if (!TEST_mem_eq(out, sizeof(out), expected, sizeof(expected))) {
+ goto err;
+ }
+ }
+ ret = 1;
+err:
+ EVP_PKEY_CTX_free(pctx);
+ return ret;
+}
+
+static int test_kdf_hkdf(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *pctx;
+ unsigned char out[10];
+ size_t outlen = sizeof(out);
+
+ if ((pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL)) == NULL) {
+ TEST_error("EVP_PKEY_HKDF");
+ goto err;
+ }
+ if (EVP_PKEY_derive_init(pctx) <= 0) {
+ TEST_error("EVP_PKEY_derive_init");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set_hkdf_md(pctx, EVP_sha256()) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set_hkdf_md");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set1_hkdf_salt(pctx, (const unsigned char *)"salt", 4)
+ <= 0) {
+ TEST_error("EVP_PKEY_CTX_set1_hkdf_salt");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set1_hkdf_key(pctx, (const unsigned char *)"secret", 6)
+ <= 0) {
+ TEST_error("EVP_PKEY_CTX_set1_hkdf_key");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_add1_hkdf_info(pctx, (const unsigned char *)"label", 5)
+ <= 0) {
+ TEST_error("EVP_PKEY_CTX_set1_hkdf_info");
+ goto err;
+ }
+ if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) {
+ TEST_error("EVP_PKEY_derive");
+ goto err;
+ }
+
+ {
+ const unsigned char expected[sizeof(out)] = {
+ 0x2a, 0xc4, 0x36, 0x9f, 0x52, 0x59, 0x96, 0xf8, 0xde, 0x13
+ };
+ if (!TEST_mem_eq(out, sizeof(out), expected, sizeof(expected))) {
+ goto err;
+ }
+ }
+ ret = 1;
+err:
+ EVP_PKEY_CTX_free(pctx);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_SCRYPT
+static int test_kdf_scrypt(void)
+{
+ int ret = 0;
+ EVP_PKEY_CTX *pctx;
+ unsigned char out[64];
+ size_t outlen = sizeof(out);
+
+ if ((pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_SCRYPT, NULL)) == NULL) {
+ TEST_error("EVP_PKEY_SCRYPT");
+ goto err;
+ }
+ if (EVP_PKEY_derive_init(pctx) <= 0) {
+ TEST_error("EVP_PKEY_derive_init");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set1_pbe_pass(pctx, "password", 8) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set1_pbe_pass");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set1_scrypt_salt(pctx, (unsigned char *)"NaCl", 4) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set1_scrypt_salt");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set_scrypt_N(pctx, 1024) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set_scrypt_N");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set_scrypt_r(pctx, 8) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set_scrypt_r");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set_scrypt_p(pctx, 16) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set_scrypt_p");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, 16) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set_maxmem_bytes");
+ goto err;
+ }
+ if (EVP_PKEY_derive(pctx, out, &outlen) > 0) {
+ TEST_error("EVP_PKEY_derive should have failed");
+ goto err;
+ }
+ if (EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, 10 * 1024 * 1024) <= 0) {
+ TEST_error("EVP_PKEY_CTX_set_maxmem_bytes");
+ goto err;
+ }
+ if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) {
+ TEST_error("EVP_PKEY_derive");
+ goto err;
+ }
+
+ {
+ const unsigned char expected[sizeof(out)] = {
+ 0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00,
+ 0x78, 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe,
+ 0x7c, 0x6a, 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30,
+ 0xe7, 0x73, 0x76, 0x63, 0x4b, 0x37, 0x31, 0x62,
+ 0x2e, 0xaf, 0x30, 0xd9, 0x2e, 0x22, 0xa3, 0x88,
+ 0x6f, 0xf1, 0x09, 0x27, 0x9d, 0x98, 0x30, 0xda,
+ 0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, 0xee, 0x6d,
+ 0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, 0x40
+ };
+ if (!TEST_mem_eq(out, sizeof(out), expected, sizeof(expected))) {
+ goto err;
+ }
+ }
+ ret = 1;
+err:
+ EVP_PKEY_CTX_free(pctx);
+ return ret;
+}
+#endif
+
+int setup_tests(void)
+{
+ ADD_TEST(test_kdf_tls1_prf);
+ ADD_TEST(test_kdf_hkdf);
+#ifndef OPENSSL_NO_SCRYPT
+ ADD_TEST(test_kdf_scrypt);
+#endif
+ return 1;
+}
diff --git a/test/pkey_meth_test.c b/test/pkey_meth_test.c
new file mode 100644
index 000000000000..d3c6c7968439
--- /dev/null
+++ b/test/pkey_meth_test.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2016-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
+ */
+
+/* Internal tests for EVP_PKEY method ordering */
+
+/* We need to use some deprecated APIs */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/evp.h>
+#include "testutil.h"
+
+/* Test of EVP_PKEY_ASN1_METHOD ordering */
+static int test_asn1_meths(void)
+{
+ int i;
+ int prev = -1;
+ int good = 1;
+ int pkey_id;
+ const EVP_PKEY_ASN1_METHOD *ameth;
+
+ for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) {
+ ameth = EVP_PKEY_asn1_get0(i);
+ EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth);
+ if (pkey_id < prev)
+ good = 0;
+ prev = pkey_id;
+
+ }
+ if (!good) {
+ TEST_error("EVP_PKEY_ASN1_METHOD table out of order");
+ for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) {
+ const char *info;
+
+ ameth = EVP_PKEY_asn1_get0(i);
+ EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, &info, NULL, ameth);
+ if (info == NULL)
+ info = "<NO NAME>";
+ TEST_note("%d : %s : %s", pkey_id, OBJ_nid2ln(pkey_id), info);
+ }
+ }
+ return good;
+}
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+/* Test of EVP_PKEY_METHOD ordering */
+static int test_pkey_meths(void)
+{
+ size_t i;
+ int prev = -1;
+ int good = 1;
+ int pkey_id;
+ const EVP_PKEY_METHOD *pmeth;
+
+ for (i = 0; i < EVP_PKEY_meth_get_count(); i++) {
+ pmeth = EVP_PKEY_meth_get0(i);
+ EVP_PKEY_meth_get0_info(&pkey_id, NULL, pmeth);
+ if (pkey_id < prev)
+ good = 0;
+ prev = pkey_id;
+
+ }
+ if (!good) {
+ TEST_error("EVP_PKEY_METHOD table out of order");
+ for (i = 0; i < EVP_PKEY_meth_get_count(); i++) {
+ pmeth = EVP_PKEY_meth_get0(i);
+ EVP_PKEY_meth_get0_info(&pkey_id, NULL, pmeth);
+ TEST_note("%d : %s", pkey_id, OBJ_nid2ln(pkey_id));
+ }
+ }
+ return good;
+}
+#endif
+
+int setup_tests(void)
+{
+ ADD_TEST(test_asn1_meths);
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ ADD_TEST(test_pkey_meths);
+#endif
+ return 1;
+}
diff --git a/test/pkits-test.pl b/test/pkits-test.pl
new file mode 100644
index 000000000000..300d7afbed0b
--- /dev/null
+++ b/test/pkits-test.pl
@@ -0,0 +1,905 @@
+#! /usr/bin/env perl
+# Copyright 2008-2016 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
+
+# Perl utility to run PKITS tests for RFC3280 compliance.
+
+my $ossl_path;
+
+if ( -f "../apps/openssl" ) {
+ $ossl_path = "../util/shlib_wrap.sh ../apps/openssl";
+}
+elsif ( -f "..\\out32dll\\openssl.exe" ) {
+ $ossl_path = "..\\out32dll\\openssl.exe";
+}
+elsif ( -f "..\\out32\\openssl.exe" ) {
+ $ossl_path = "..\\out32\\openssl.exe";
+}
+else {
+ die "Can't find OpenSSL executable";
+}
+
+my $pkitsdir = "pkits/smime";
+my $pkitsta = "pkits/certs/TrustAnchorRootCertificate.crt";
+
+die "Can't find PKITS test data" if !-d $pkitsdir;
+
+my $nist1 = "2.16.840.1.101.3.2.1.48.1";
+my $nist2 = "2.16.840.1.101.3.2.1.48.2";
+my $nist3 = "2.16.840.1.101.3.2.1.48.3";
+my $nist4 = "2.16.840.1.101.3.2.1.48.4";
+my $nist5 = "2.16.840.1.101.3.2.1.48.5";
+my $nist6 = "2.16.840.1.101.3.2.1.48.6";
+
+my $apolicy = "X509v3 Any Policy";
+
+# This table contains the chapter headings of the accompanying PKITS
+# document. They provide useful informational output and their names
+# can be converted into the filename to test.
+
+my @testlists = (
+ [ "4.1", "Signature Verification" ],
+ [ "4.1.1", "Valid Signatures Test1", 0 ],
+ [ "4.1.2", "Invalid CA Signature Test2", 7 ],
+ [ "4.1.3", "Invalid EE Signature Test3", 7 ],
+ [ "4.1.4", "Valid DSA Signatures Test4", 0 ],
+ [ "4.1.5", "Valid DSA Parameter Inheritance Test5", 0 ],
+ [ "4.1.6", "Invalid DSA Signature Test6", 7 ],
+ [ "4.2", "Validity Periods" ],
+ [ "4.2.1", "Invalid CA notBefore Date Test1", 9 ],
+ [ "4.2.2", "Invalid EE notBefore Date Test2", 9 ],
+ [ "4.2.3", "Valid pre2000 UTC notBefore Date Test3", 0 ],
+ [ "4.2.4", "Valid GeneralizedTime notBefore Date Test4", 0 ],
+ [ "4.2.5", "Invalid CA notAfter Date Test5", 10 ],
+ [ "4.2.6", "Invalid EE notAfter Date Test6", 10 ],
+ [ "4.2.7", "Invalid pre2000 UTC EE notAfter Date Test7", 10 ],
+ [ "4.2.8", "Valid GeneralizedTime notAfter Date Test8", 0 ],
+ [ "4.3", "Verifying Name Chaining" ],
+ [ "4.3.1", "Invalid Name Chaining EE Test1", 20 ],
+ [ "4.3.2", "Invalid Name Chaining Order Test2", 20 ],
+ [ "4.3.3", "Valid Name Chaining Whitespace Test3", 0 ],
+ [ "4.3.4", "Valid Name Chaining Whitespace Test4", 0 ],
+ [ "4.3.5", "Valid Name Chaining Capitalization Test5", 0 ],
+ [ "4.3.6", "Valid Name Chaining UIDs Test6", 0 ],
+ [ "4.3.7", "Valid RFC3280 Mandatory Attribute Types Test7", 0 ],
+ [ "4.3.8", "Valid RFC3280 Optional Attribute Types Test8", 0 ],
+ [ "4.3.9", "Valid UTF8String Encoded Names Test9", 0 ],
+ [ "4.3.10", "Valid Rollover from PrintableString to UTF8String Test10", 0 ],
+ [ "4.3.11", "Valid UTF8String Case Insensitive Match Test11", 0 ],
+ [ "4.4", "Basic Certificate Revocation Tests" ],
+ [ "4.4.1", "Missing CRL Test1", 3 ],
+ [ "4.4.2", "Invalid Revoked CA Test2", 23 ],
+ [ "4.4.3", "Invalid Revoked EE Test3", 23 ],
+ [ "4.4.4", "Invalid Bad CRL Signature Test4", 8 ],
+ [ "4.4.5", "Invalid Bad CRL Issuer Name Test5", 3 ],
+ [ "4.4.6", "Invalid Wrong CRL Test6", 3 ],
+ [ "4.4.7", "Valid Two CRLs Test7", 0 ],
+
+ # The test document suggests these should return certificate revoked...
+ # Subsequent discussion has concluded they should not due to unhandle
+ # critical CRL extensions.
+ [ "4.4.8", "Invalid Unknown CRL Entry Extension Test8", 36 ],
+ [ "4.4.9", "Invalid Unknown CRL Extension Test9", 36 ],
+
+ [ "4.4.10", "Invalid Unknown CRL Extension Test10", 36 ],
+ [ "4.4.11", "Invalid Old CRL nextUpdate Test11", 12 ],
+ [ "4.4.12", "Invalid pre2000 CRL nextUpdate Test12", 12 ],
+ [ "4.4.13", "Valid GeneralizedTime CRL nextUpdate Test13", 0 ],
+ [ "4.4.14", "Valid Negative Serial Number Test14", 0 ],
+ [ "4.4.15", "Invalid Negative Serial Number Test15", 23 ],
+ [ "4.4.16", "Valid Long Serial Number Test16", 0 ],
+ [ "4.4.17", "Valid Long Serial Number Test17", 0 ],
+ [ "4.4.18", "Invalid Long Serial Number Test18", 23 ],
+ [ "4.4.19", "Valid Separate Certificate and CRL Keys Test19", 0 ],
+ [ "4.4.20", "Invalid Separate Certificate and CRL Keys Test20", 23 ],
+
+ # CRL path is revoked so get a CRL path validation error
+ [ "4.4.21", "Invalid Separate Certificate and CRL Keys Test21", 54 ],
+ [ "4.5", "Verifying Paths with Self-Issued Certificates" ],
+ [ "4.5.1", "Valid Basic Self-Issued Old With New Test1", 0 ],
+ [ "4.5.2", "Invalid Basic Self-Issued Old With New Test2", 23 ],
+ [ "4.5.3", "Valid Basic Self-Issued New With Old Test3", 0 ],
+ [ "4.5.4", "Valid Basic Self-Issued New With Old Test4", 0 ],
+ [ "4.5.5", "Invalid Basic Self-Issued New With Old Test5", 23 ],
+ [ "4.5.6", "Valid Basic Self-Issued CRL Signing Key Test6", 0 ],
+ [ "4.5.7", "Invalid Basic Self-Issued CRL Signing Key Test7", 23 ],
+ [ "4.5.8", "Invalid Basic Self-Issued CRL Signing Key Test8", 20 ],
+ [ "4.6", "Verifying Basic Constraints" ],
+ [ "4.6.1", "Invalid Missing basicConstraints Test1", 24 ],
+ [ "4.6.2", "Invalid cA False Test2", 24 ],
+ [ "4.6.3", "Invalid cA False Test3", 24 ],
+ [ "4.6.4", "Valid basicConstraints Not Critical Test4", 0 ],
+ [ "4.6.5", "Invalid pathLenConstraint Test5", 25 ],
+ [ "4.6.6", "Invalid pathLenConstraint Test6", 25 ],
+ [ "4.6.7", "Valid pathLenConstraint Test7", 0 ],
+ [ "4.6.8", "Valid pathLenConstraint Test8", 0 ],
+ [ "4.6.9", "Invalid pathLenConstraint Test9", 25 ],
+ [ "4.6.10", "Invalid pathLenConstraint Test10", 25 ],
+ [ "4.6.11", "Invalid pathLenConstraint Test11", 25 ],
+ [ "4.6.12", "Invalid pathLenConstraint Test12", 25 ],
+ [ "4.6.13", "Valid pathLenConstraint Test13", 0 ],
+ [ "4.6.14", "Valid pathLenConstraint Test14", 0 ],
+ [ "4.6.15", "Valid Self-Issued pathLenConstraint Test15", 0 ],
+ [ "4.6.16", "Invalid Self-Issued pathLenConstraint Test16", 25 ],
+ [ "4.6.17", "Valid Self-Issued pathLenConstraint Test17", 0 ],
+ [ "4.7", "Key Usage" ],
+ [ "4.7.1", "Invalid keyUsage Critical keyCertSign False Test1", 20 ],
+ [ "4.7.2", "Invalid keyUsage Not Critical keyCertSign False Test2", 20 ],
+ [ "4.7.3", "Valid keyUsage Not Critical Test3", 0 ],
+ [ "4.7.4", "Invalid keyUsage Critical cRLSign False Test4", 35 ],
+ [ "4.7.5", "Invalid keyUsage Not Critical cRLSign False Test5", 35 ],
+
+ # Certificate policy tests need special handling. They can have several
+ # sub tests and we need to check the outputs are correct.
+
+ [ "4.8", "Certificate Policies" ],
+ [
+ "4.8.1.1",
+ "All Certificates Same Policy Test1",
+ "-policy anyPolicy -explicit_policy",
+ "True", $nist1, $nist1, 0
+ ],
+ [
+ "4.8.1.2",
+ "All Certificates Same Policy Test1",
+ "-policy $nist1 -explicit_policy",
+ "True", $nist1, $nist1, 0
+ ],
+ [
+ "4.8.1.3",
+ "All Certificates Same Policy Test1",
+ "-policy $nist2 -explicit_policy",
+ "True", $nist1, "<empty>", 43
+ ],
+ [
+ "4.8.1.4",
+ "All Certificates Same Policy Test1",
+ "-policy $nist1 -policy $nist2 -explicit_policy",
+ "True", $nist1, $nist1, 0
+ ],
+ [
+ "4.8.2.1",
+ "All Certificates No Policies Test2",
+ "-policy anyPolicy",
+ "False", "<empty>", "<empty>", 0
+ ],
+ [
+ "4.8.2.2",
+ "All Certificates No Policies Test2",
+ "-policy anyPolicy -explicit_policy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.8.3.1",
+ "Different Policies Test3",
+ "-policy anyPolicy",
+ "False", "<empty>", "<empty>", 0
+ ],
+ [
+ "4.8.3.2",
+ "Different Policies Test3",
+ "-policy anyPolicy -explicit_policy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.8.3.3",
+ "Different Policies Test3",
+ "-policy $nist1 -policy $nist2 -explicit_policy",
+ "True", "<empty>", "<empty>", 43
+ ],
+
+ [
+ "4.8.4",
+ "Different Policies Test4",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.8.5",
+ "Different Policies Test5",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.8.6.1",
+ "Overlapping Policies Test6",
+ "-policy anyPolicy",
+ "True", $nist1, $nist1, 0
+ ],
+ [
+ "4.8.6.2",
+ "Overlapping Policies Test6",
+ "-policy $nist1",
+ "True", $nist1, $nist1, 0
+ ],
+ [
+ "4.8.6.3",
+ "Overlapping Policies Test6",
+ "-policy $nist2",
+ "True", $nist1, "<empty>", 43
+ ],
+ [
+ "4.8.7",
+ "Different Policies Test7",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.8.8",
+ "Different Policies Test8",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.8.9",
+ "Different Policies Test9",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.8.10.1",
+ "All Certificates Same Policies Test10",
+ "-policy $nist1",
+ "True", "$nist1:$nist2", "$nist1", 0
+ ],
+ [
+ "4.8.10.2",
+ "All Certificates Same Policies Test10",
+ "-policy $nist2",
+ "True", "$nist1:$nist2", "$nist2", 0
+ ],
+ [
+ "4.8.10.3",
+ "All Certificates Same Policies Test10",
+ "-policy anyPolicy",
+ "True", "$nist1:$nist2", "$nist1:$nist2", 0
+ ],
+ [
+ "4.8.11.1",
+ "All Certificates AnyPolicy Test11",
+ "-policy anyPolicy",
+ "True", "$apolicy", "$apolicy", 0
+ ],
+ [
+ "4.8.11.2",
+ "All Certificates AnyPolicy Test11",
+ "-policy $nist1",
+ "True", "$apolicy", "$nist1", 0
+ ],
+ [
+ "4.8.12",
+ "Different Policies Test12",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.8.13.1",
+ "All Certificates Same Policies Test13",
+ "-policy $nist1",
+ "True", "$nist1:$nist2:$nist3", "$nist1", 0
+ ],
+ [
+ "4.8.13.2",
+ "All Certificates Same Policies Test13",
+ "-policy $nist2",
+ "True", "$nist1:$nist2:$nist3", "$nist2", 0
+ ],
+ [
+ "4.8.13.3",
+ "All Certificates Same Policies Test13",
+ "-policy $nist3",
+ "True", "$nist1:$nist2:$nist3", "$nist3", 0
+ ],
+ [
+ "4.8.14.1", "AnyPolicy Test14",
+ "-policy $nist1", "True",
+ "$nist1", "$nist1",
+ 0
+ ],
+ [
+ "4.8.14.2", "AnyPolicy Test14",
+ "-policy $nist2", "True",
+ "$nist1", "<empty>",
+ 43
+ ],
+ [
+ "4.8.15",
+ "User Notice Qualifier Test15",
+ "-policy anyPolicy",
+ "False", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.8.16",
+ "User Notice Qualifier Test16",
+ "-policy anyPolicy",
+ "False", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.8.17",
+ "User Notice Qualifier Test17",
+ "-policy anyPolicy",
+ "False", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.8.18.1",
+ "User Notice Qualifier Test18",
+ "-policy $nist1",
+ "True", "$nist1:$nist2", "$nist1", 0
+ ],
+ [
+ "4.8.18.2",
+ "User Notice Qualifier Test18",
+ "-policy $nist2",
+ "True", "$nist1:$nist2", "$nist2", 0
+ ],
+ [
+ "4.8.19",
+ "User Notice Qualifier Test19",
+ "-policy anyPolicy",
+ "False", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.8.20",
+ "CPS Pointer Qualifier Test20",
+ "-policy anyPolicy -explicit_policy",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [ "4.9", "Require Explicit Policy" ],
+ [
+ "4.9.1",
+ "Valid RequireExplicitPolicy Test1",
+ "-policy anyPolicy",
+ "False", "<empty>", "<empty>", 0
+ ],
+ [
+ "4.9.2",
+ "Valid RequireExplicitPolicy Test2",
+ "-policy anyPolicy",
+ "False", "<empty>", "<empty>", 0
+ ],
+ [
+ "4.9.3",
+ "Invalid RequireExplicitPolicy Test3",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.9.4",
+ "Valid RequireExplicitPolicy Test4",
+ "-policy anyPolicy",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.9.5",
+ "Invalid RequireExplicitPolicy Test5",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.9.6",
+ "Valid Self-Issued requireExplicitPolicy Test6",
+ "-policy anyPolicy",
+ "False", "<empty>", "<empty>", 0
+ ],
+ [
+ "4.9.7",
+ "Invalid Self-Issued requireExplicitPolicy Test7",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.9.8",
+ "Invalid Self-Issued requireExplicitPolicy Test8",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [ "4.10", "Policy Mappings" ],
+ [
+ "4.10.1.1",
+ "Valid Policy Mapping Test1",
+ "-policy $nist1",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.10.1.2",
+ "Valid Policy Mapping Test1",
+ "-policy $nist2",
+ "True", "$nist1", "<empty>", 43
+ ],
+ [
+ "4.10.1.3",
+ "Valid Policy Mapping Test1",
+ "-policy anyPolicy -inhibit_map",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.10.2.1",
+ "Invalid Policy Mapping Test2",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.10.2.2",
+ "Invalid Policy Mapping Test2",
+ "-policy anyPolicy -inhibit_map",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.10.3.1",
+ "Valid Policy Mapping Test3",
+ "-policy $nist1",
+ "True", "$nist2", "<empty>", 43
+ ],
+ [
+ "4.10.3.2",
+ "Valid Policy Mapping Test3",
+ "-policy $nist2",
+ "True", "$nist2", "$nist2", 0
+ ],
+ [
+ "4.10.4",
+ "Invalid Policy Mapping Test4",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.10.5.1",
+ "Valid Policy Mapping Test5",
+ "-policy $nist1",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.10.5.2",
+ "Valid Policy Mapping Test5",
+ "-policy $nist6",
+ "True", "$nist1", "<empty>", 43
+ ],
+ [
+ "4.10.6.1",
+ "Valid Policy Mapping Test6",
+ "-policy $nist1",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.10.6.2",
+ "Valid Policy Mapping Test6",
+ "-policy $nist6",
+ "True", "$nist1", "<empty>", 43
+ ],
+ [ "4.10.7", "Invalid Mapping From anyPolicy Test7", 42 ],
+ [ "4.10.8", "Invalid Mapping To anyPolicy Test8", 42 ],
+ [
+ "4.10.9",
+ "Valid Policy Mapping Test9",
+ "-policy anyPolicy",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.10.10",
+ "Invalid Policy Mapping Test10",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.10.11",
+ "Valid Policy Mapping Test11",
+ "-policy anyPolicy",
+ "True", "$nist1", "$nist1", 0
+ ],
+
+ # TODO: check notice display
+ [
+ "4.10.12.1",
+ "Valid Policy Mapping Test12",
+ "-policy $nist1",
+ "True", "$nist1:$nist2", "$nist1", 0
+ ],
+
+ # TODO: check notice display
+ [
+ "4.10.12.2",
+ "Valid Policy Mapping Test12",
+ "-policy $nist2",
+ "True", "$nist1:$nist2", "$nist2", 0
+ ],
+ [
+ "4.10.13",
+ "Valid Policy Mapping Test13",
+ "-policy anyPolicy",
+ "True", "$nist1", "$nist1", 0
+ ],
+
+ # TODO: check notice display
+ [
+ "4.10.14",
+ "Valid Policy Mapping Test14",
+ "-policy anyPolicy",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [ "4.11", "Inhibit Policy Mapping" ],
+ [
+ "4.11.1",
+ "Invalid inhibitPolicyMapping Test1",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.11.2",
+ "Valid inhibitPolicyMapping Test2",
+ "-policy anyPolicy",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.11.3",
+ "Invalid inhibitPolicyMapping Test3",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.11.4",
+ "Valid inhibitPolicyMapping Test4",
+ "-policy anyPolicy",
+ "True", "$nist2", "$nist2", 0
+ ],
+ [
+ "4.11.5",
+ "Invalid inhibitPolicyMapping Test5",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.11.6",
+ "Invalid inhibitPolicyMapping Test6",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.11.7",
+ "Valid Self-Issued inhibitPolicyMapping Test7",
+ "-policy anyPolicy",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.11.8",
+ "Invalid Self-Issued inhibitPolicyMapping Test8",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.11.9",
+ "Invalid Self-Issued inhibitPolicyMapping Test9",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.11.10",
+ "Invalid Self-Issued inhibitPolicyMapping Test10",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.11.11",
+ "Invalid Self-Issued inhibitPolicyMapping Test11",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [ "4.12", "Inhibit Any Policy" ],
+ [
+ "4.12.1",
+ "Invalid inhibitAnyPolicy Test1",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.12.2",
+ "Valid inhibitAnyPolicy Test2",
+ "-policy anyPolicy",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.12.3.1",
+ "inhibitAnyPolicy Test3",
+ "-policy anyPolicy",
+ "True", "$nist1", "$nist1", 0
+ ],
+ [
+ "4.12.3.2",
+ "inhibitAnyPolicy Test3",
+ "-policy anyPolicy -inhibit_any",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.12.4",
+ "Invalid inhibitAnyPolicy Test4",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.12.5",
+ "Invalid inhibitAnyPolicy Test5",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [
+ "4.12.6",
+ "Invalid inhibitAnyPolicy Test6",
+ "-policy anyPolicy",
+ "True", "<empty>", "<empty>", 43
+ ],
+ [ "4.12.7", "Valid Self-Issued inhibitAnyPolicy Test7", 0 ],
+ [ "4.12.8", "Invalid Self-Issued inhibitAnyPolicy Test8", 43 ],
+ [ "4.12.9", "Valid Self-Issued inhibitAnyPolicy Test9", 0 ],
+ [ "4.12.10", "Invalid Self-Issued inhibitAnyPolicy Test10", 43 ],
+ [ "4.13", "Name Constraints" ],
+ [ "4.13.1", "Valid DN nameConstraints Test1", 0 ],
+ [ "4.13.2", "Invalid DN nameConstraints Test2", 47 ],
+ [ "4.13.3", "Invalid DN nameConstraints Test3", 47 ],
+ [ "4.13.4", "Valid DN nameConstraints Test4", 0 ],
+ [ "4.13.5", "Valid DN nameConstraints Test5", 0 ],
+ [ "4.13.6", "Valid DN nameConstraints Test6", 0 ],
+ [ "4.13.7", "Invalid DN nameConstraints Test7", 48 ],
+ [ "4.13.8", "Invalid DN nameConstraints Test8", 48 ],
+ [ "4.13.9", "Invalid DN nameConstraints Test9", 48 ],
+ [ "4.13.10", "Invalid DN nameConstraints Test10", 48 ],
+ [ "4.13.11", "Valid DN nameConstraints Test11", 0 ],
+ [ "4.13.12", "Invalid DN nameConstraints Test12", 47 ],
+ [ "4.13.13", "Invalid DN nameConstraints Test13", 47 ],
+ [ "4.13.14", "Valid DN nameConstraints Test14", 0 ],
+ [ "4.13.15", "Invalid DN nameConstraints Test15", 48 ],
+ [ "4.13.16", "Invalid DN nameConstraints Test16", 48 ],
+ [ "4.13.17", "Invalid DN nameConstraints Test17", 48 ],
+ [ "4.13.18", "Valid DN nameConstraints Test18", 0 ],
+ [ "4.13.19", "Valid Self-Issued DN nameConstraints Test19", 0 ],
+ [ "4.13.20", "Invalid Self-Issued DN nameConstraints Test20", 47 ],
+ [ "4.13.21", "Valid RFC822 nameConstraints Test21", 0 ],
+ [ "4.13.22", "Invalid RFC822 nameConstraints Test22", 47 ],
+ [ "4.13.23", "Valid RFC822 nameConstraints Test23", 0 ],
+ [ "4.13.24", "Invalid RFC822 nameConstraints Test24", 47 ],
+ [ "4.13.25", "Valid RFC822 nameConstraints Test25", 0 ],
+ [ "4.13.26", "Invalid RFC822 nameConstraints Test26", 48 ],
+ [ "4.13.27", "Valid DN and RFC822 nameConstraints Test27", 0 ],
+ [ "4.13.28", "Invalid DN and RFC822 nameConstraints Test28", 47 ],
+ [ "4.13.29", "Invalid DN and RFC822 nameConstraints Test29", 47 ],
+ [ "4.13.30", "Valid DNS nameConstraints Test30", 0 ],
+ [ "4.13.31", "Invalid DNS nameConstraints Test31", 47 ],
+ [ "4.13.32", "Valid DNS nameConstraints Test32", 0 ],
+ [ "4.13.33", "Invalid DNS nameConstraints Test33", 48 ],
+ [ "4.13.34", "Valid URI nameConstraints Test34", 0 ],
+ [ "4.13.35", "Invalid URI nameConstraints Test35", 47 ],
+ [ "4.13.36", "Valid URI nameConstraints Test36", 0 ],
+ [ "4.13.37", "Invalid URI nameConstraints Test37", 48 ],
+ [ "4.13.38", "Invalid DNS nameConstraints Test38", 47 ],
+ [ "4.14", "Distribution Points" ],
+ [ "4.14.1", "Valid distributionPoint Test1", 0 ],
+ [ "4.14.2", "Invalid distributionPoint Test2", 23 ],
+ [ "4.14.3", "Invalid distributionPoint Test3", 44 ],
+ [ "4.14.4", "Valid distributionPoint Test4", 0 ],
+ [ "4.14.5", "Valid distributionPoint Test5", 0 ],
+ [ "4.14.6", "Invalid distributionPoint Test6", 23 ],
+ [ "4.14.7", "Valid distributionPoint Test7", 0 ],
+ [ "4.14.8", "Invalid distributionPoint Test8", 44 ],
+ [ "4.14.9", "Invalid distributionPoint Test9", 44 ],
+ [ "4.14.10", "Valid No issuingDistributionPoint Test10", 0 ],
+ [ "4.14.11", "Invalid onlyContainsUserCerts CRL Test11", 44 ],
+ [ "4.14.12", "Invalid onlyContainsCACerts CRL Test12", 44 ],
+ [ "4.14.13", "Valid onlyContainsCACerts CRL Test13", 0 ],
+ [ "4.14.14", "Invalid onlyContainsAttributeCerts Test14", 44 ],
+ [ "4.14.15", "Invalid onlySomeReasons Test15", 23 ],
+ [ "4.14.16", "Invalid onlySomeReasons Test16", 23 ],
+ [ "4.14.17", "Invalid onlySomeReasons Test17", 3 ],
+ [ "4.14.18", "Valid onlySomeReasons Test18", 0 ],
+ [ "4.14.19", "Valid onlySomeReasons Test19", 0 ],
+ [ "4.14.20", "Invalid onlySomeReasons Test20", 23 ],
+ [ "4.14.21", "Invalid onlySomeReasons Test21", 23 ],
+ [ "4.14.22", "Valid IDP with indirectCRL Test22", 0 ],
+ [ "4.14.23", "Invalid IDP with indirectCRL Test23", 23 ],
+ [ "4.14.24", "Valid IDP with indirectCRL Test24", 0 ],
+ [ "4.14.25", "Valid IDP with indirectCRL Test25", 0 ],
+ [ "4.14.26", "Invalid IDP with indirectCRL Test26", 44 ],
+ [ "4.14.27", "Invalid cRLIssuer Test27", 3 ],
+ [ "4.14.28", "Valid cRLIssuer Test28", 0 ],
+ [ "4.14.29", "Valid cRLIssuer Test29", 0 ],
+
+ # Although this test is valid it has a circular dependency. As a result
+ # an attempt is made to recursively checks a CRL path and rejected due to
+ # a CRL path validation error. PKITS notes suggest this test does not
+ # need to be run due to this issue.
+ [ "4.14.30", "Valid cRLIssuer Test30", 54 ],
+ [ "4.14.31", "Invalid cRLIssuer Test31", 23 ],
+ [ "4.14.32", "Invalid cRLIssuer Test32", 23 ],
+ [ "4.14.33", "Valid cRLIssuer Test33", 0 ],
+ [ "4.14.34", "Invalid cRLIssuer Test34", 23 ],
+ [ "4.14.35", "Invalid cRLIssuer Test35", 44 ],
+ [ "4.15", "Delta-CRLs" ],
+ [ "4.15.1", "Invalid deltaCRLIndicator No Base Test1", 3 ],
+ [ "4.15.2", "Valid delta-CRL Test2", 0 ],
+ [ "4.15.3", "Invalid delta-CRL Test3", 23 ],
+ [ "4.15.4", "Invalid delta-CRL Test4", 23 ],
+ [ "4.15.5", "Valid delta-CRL Test5", 0 ],
+ [ "4.15.6", "Invalid delta-CRL Test6", 23 ],
+ [ "4.15.7", "Valid delta-CRL Test7", 0 ],
+ [ "4.15.8", "Valid delta-CRL Test8", 0 ],
+ [ "4.15.9", "Invalid delta-CRL Test9", 23 ],
+ [ "4.15.10", "Invalid delta-CRL Test10", 12 ],
+ [ "4.16", "Private Certificate Extensions" ],
+ [ "4.16.1", "Valid Unknown Not Critical Certificate Extension Test1", 0 ],
+ [ "4.16.2", "Invalid Unknown Critical Certificate Extension Test2", 34 ],
+);
+
+
+my $verbose = 1;
+
+my $numtest = 0;
+my $numfail = 0;
+
+my $ossl = "ossl/apps/openssl";
+
+my $ossl_cmd = "$ossl_path cms -verify -verify_retcode ";
+$ossl_cmd .= "-CAfile pkitsta.pem -crl_check_all -x509_strict ";
+
+# Check for expiry of trust anchor
+system "$ossl_path x509 -inform DER -in $pkitsta -checkend 0";
+if ($? == 256)
+ {
+ print STDERR "WARNING: using older expired data\n";
+ $ossl_cmd .= "-attime 1291940972 ";
+ }
+
+$ossl_cmd .= "-policy_check -extended_crl -use_deltas -out /dev/null 2>&1 ";
+
+system "$ossl_path x509 -inform DER -in $pkitsta -out pkitsta.pem";
+
+die "Can't create trust anchor file" if $?;
+
+print "Running PKITS tests:\n" if $verbose;
+
+foreach (@testlists) {
+ my $argnum = @$_;
+ if ( $argnum == 2 ) {
+ my ( $tnum, $title ) = @$_;
+ print "$tnum $title\n" if $verbose;
+ }
+ elsif ( $argnum == 3 ) {
+ my ( $tnum, $title, $exp_ret ) = @$_;
+ my $filename = $title;
+ $exp_ret += 32 if $exp_ret;
+ $filename =~ tr/ -//d;
+ $filename = "Signed${filename}.eml";
+ if ( !-f "$pkitsdir/$filename" ) {
+ print "\"$filename\" not found\n";
+ }
+ else {
+ my $ret;
+ my $test_fail = 0;
+ my $errmsg = "";
+ my $cmd = $ossl_cmd;
+ $cmd .= "-in $pkitsdir/$filename -policy anyPolicy";
+ my $cmdout = `$cmd`;
+ $ret = $? >> 8;
+ if ( $? & 0xff ) {
+ $errmsg .= "Abnormal OpenSSL termination\n";
+ $test_fail = 1;
+ }
+ if ( $exp_ret != $ret ) {
+ $errmsg .= "Return code:$ret, ";
+ $errmsg .= "expected $exp_ret\n";
+ $test_fail = 1;
+ }
+ if ($test_fail) {
+ print "$tnum $title : Failed!\n";
+ print "Filename: $pkitsdir/$filename\n";
+ print $errmsg;
+ print "Command output:\n$cmdout\n";
+ $numfail++;
+ }
+ $numtest++;
+ }
+ }
+ elsif ( $argnum == 7 ) {
+ my ( $tnum, $title, $exargs, $exp_epol, $exp_aset, $exp_uset, $exp_ret )
+ = @$_;
+ my $filename = $title;
+ $exp_ret += 32 if $exp_ret;
+ $filename =~ tr/ -//d;
+ $filename = "Signed${filename}.eml";
+ if ( !-f "$pkitsdir/$filename" ) {
+ print "\"$filename\" not found\n";
+ }
+ else {
+ my $ret;
+ my $cmdout = "";
+ my $errmsg = "";
+ my $epol = "";
+ my $aset = "";
+ my $uset = "";
+ my $pol = -1;
+ my $test_fail = 0;
+ my $cmd = $ossl_cmd;
+ $cmd .= "-in $pkitsdir/$filename $exargs -policy_print";
+ @oparr = `$cmd`;
+ $ret = $? >> 8;
+
+ if ( $? & 0xff ) {
+ $errmsg .= "Abnormal OpenSSL termination\n";
+ $test_fail = 1;
+ }
+ foreach (@oparr) {
+ my $test_failed = 0;
+ $cmdout .= $_;
+ if (/^Require explicit Policy: (.*)$/) {
+ $epol = $1;
+ }
+ if (/^Authority Policies/) {
+ if (/empty/) {
+ $aset = "<empty>";
+ }
+ else {
+ $pol = 1;
+ }
+ }
+ $test_fail = 1 if (/leak/i);
+ if (/^User Policies/) {
+ if (/empty/) {
+ $uset = "<empty>";
+ }
+ else {
+ $pol = 2;
+ }
+ }
+ if (/\s+Policy: (.*)$/) {
+ if ( $pol == 1 ) {
+ $aset .= ":" if $aset ne "";
+ $aset .= $1;
+ }
+ elsif ( $pol == 2 ) {
+ $uset .= ":" if $uset ne "";
+ $uset .= $1;
+ }
+ }
+ }
+
+ if ( $epol ne $exp_epol ) {
+ $errmsg .= "Explicit policy:$epol, ";
+ $errmsg .= "expected $exp_epol\n";
+ $test_fail = 1;
+ }
+ if ( $aset ne $exp_aset ) {
+ $errmsg .= "Authority policy set :$aset, ";
+ $errmsg .= "expected $exp_aset\n";
+ $test_fail = 1;
+ }
+ if ( $uset ne $exp_uset ) {
+ $errmsg .= "User policy set :$uset, ";
+ $errmsg .= "expected $exp_uset\n";
+ $test_fail = 1;
+ }
+
+ if ( $exp_ret != $ret ) {
+ print "Return code:$ret, expected $exp_ret\n";
+ $test_fail = 1;
+ }
+
+ if ($test_fail) {
+ print "$tnum $title : Failed!\n";
+ print "Filename: $pkitsdir/$filename\n";
+ print "Command output:\n$cmdout\n";
+ $numfail++;
+ }
+ $numtest++;
+ }
+ }
+}
+
+if ($numfail) {
+ print "$numfail tests failed out of $numtest\n";
+}
+else {
+ print "All Tests Successful.\n";
+}
+
+unlink "pkitsta.pem";
+
diff --git a/test/poly1305_internal_test.c b/test/poly1305_internal_test.c
new file mode 100644
index 000000000000..359025de0b08
--- /dev/null
+++ b/test/poly1305_internal_test.c
@@ -0,0 +1,1575 @@
+/*
+ * Copyright 2016-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
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Internal tests for the poly1305 module */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "testutil.h"
+#include "crypto/poly1305.h"
+#include "internal/nelem.h"
+
+typedef struct {
+ size_t size;
+ const unsigned char data[1024];
+} SIZED_DATA;
+
+typedef struct {
+ SIZED_DATA input;
+ SIZED_DATA key;
+ SIZED_DATA expected;
+} TESTDATA;
+
+/**********************************************************************
+ *
+ * Test of poly1305 internal functions
+ *
+ ***/
+
+static TESTDATA tests[] = {
+ /*
+ * RFC7539
+ */
+ {
+ {
+ 34,
+ {
+ 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x67, 0x72,
+ 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x46, 0x6f,
+ 0x72, 0x75, 0x6d, 0x20, 0x52, 0x65, 0x73, 0x65,
+ 0x61, 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6f,
+
+ 0x75, 0x70
+ }
+ },
+ {
+ 32,
+ {
+ 0x85, 0xd6, 0xbe, 0x78, 0x57, 0x55, 0x6d, 0x33,
+ 0x7f, 0x44, 0x52, 0xfe, 0x42, 0xd5, 0x06, 0xa8,
+ 0x01, 0x03, 0x80, 0x8a, 0xfb, 0x0d, 0xb2, 0xfd,
+ 0x4a, 0xbf, 0xf6, 0xaf, 0x41, 0x49, 0xf5, 0x1b
+ }
+ },
+ {
+ 16,
+ {
+ 0xa8, 0x06, 0x1d, 0xc1, 0x30, 0x51, 0x36, 0xc6,
+ 0xc2, 0x2b, 0x8b, 0xaf, 0x0c, 0x01, 0x27, 0xa9
+ }
+ }
+ },
+ /*
+ * test vectors from "The Poly1305-AES message-authentication code"
+ */
+ {
+ {
+ 2,
+ {
+ 0xf3, 0xf6
+ }
+ },
+ {
+ 32,
+ {
+ 0x85, 0x1f, 0xc4, 0x0c, 0x34, 0x67, 0xac, 0x0b,
+ 0xe0, 0x5c, 0xc2, 0x04, 0x04, 0xf3, 0xf7, 0x00,
+ 0x58, 0x0b, 0x3b, 0x0f, 0x94, 0x47, 0xbb, 0x1e,
+ 0x69, 0xd0, 0x95, 0xb5, 0x92, 0x8b, 0x6d, 0xbc
+ }
+ },
+ {
+ 16,
+ {
+ 0xf4, 0xc6, 0x33, 0xc3, 0x04, 0x4f, 0xc1, 0x45,
+ 0xf8, 0x4f, 0x33, 0x5c, 0xb8, 0x19, 0x53, 0xde
+ }
+ }
+ },
+ {
+ {
+ 0,
+ {
+ 0
+ }
+ },
+ {
+ 32,
+ {
+ 0xa0, 0xf3, 0x08, 0x00, 0x00, 0xf4, 0x64, 0x00,
+ 0xd0, 0xc7, 0xe9, 0x07, 0x6c, 0x83, 0x44, 0x03,
+ 0xdd, 0x3f, 0xab, 0x22, 0x51, 0xf1, 0x1a, 0xc7,
+ 0x59, 0xf0, 0x88, 0x71, 0x29, 0xcc, 0x2e, 0xe7
+ }
+ },
+ {
+ 16,
+ {
+ 0xdd, 0x3f, 0xab, 0x22, 0x51, 0xf1, 0x1a, 0xc7,
+ 0x59, 0xf0, 0x88, 0x71, 0x29, 0xcc, 0x2e, 0xe7
+ }
+ }
+ },
+ {
+ {
+ 32,
+ {
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
+ 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
+ 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36
+ }
+ },
+ {
+ 32,
+ {
+ 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
+ 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
+ 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
+ 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef
+ }
+ },
+ {
+ 16,
+ {
+ 0x0e, 0xe1, 0xc1, 0x6b, 0xb7, 0x3f, 0x0f, 0x4f,
+ 0xd1, 0x98, 0x81, 0x75, 0x3c, 0x01, 0xcd, 0xbe
+ }
+ }
+ },
+ {
+ {
+ 63,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+ }
+ },
+ {
+ 16,
+ {
+ 0x51, 0x54, 0xad, 0x0d, 0x2c, 0xb2, 0x6e, 0x01,
+ 0x27, 0x4f, 0xc5, 0x11, 0x48, 0x49, 0x1f, 0x1b
+ }
+ },
+ },
+ /*
+ * self-generated vectors exercise "significant" lengths, such that
+ * are handled by different code paths
+ */
+ {
+ {
+ 64,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+ }
+ },
+ {
+ 16,
+ {
+ 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
+ 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66
+ }
+ },
+ },
+ {
+ {
+ 48,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+
+ }
+ },
+ {
+ 16,
+ {
+ 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
+ 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61
+ }
+ },
+ },
+ {
+ {
+ 96,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
+
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
+ 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
+ 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+ }
+ },
+ {
+ 16,
+ {
+ 0xbb, 0xb6, 0x13, 0xb2, 0xb6, 0xd7, 0x53, 0xba,
+ 0x07, 0x39, 0x5b, 0x91, 0x6a, 0xae, 0xce, 0x15
+ }
+ },
+ },
+ {
+ {
+ 112,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
+
+ 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
+ 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
+ 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
+ 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
+
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+ }
+ },
+ {
+ 16,
+ {
+ 0xc7, 0x94, 0xd7, 0x05, 0x7d, 0x17, 0x78, 0xc4,
+ 0xbb, 0xee, 0x0a, 0x39, 0xb3, 0xd9, 0x73, 0x42
+ }
+ },
+ },
+ {
+ {
+ 128,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
+
+ 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
+ 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
+ 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
+ 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
+
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
+ 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
+ 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+ }
+ },
+ {
+ 16,
+ {
+ 0xff, 0xbc, 0xb9, 0xb3, 0x71, 0x42, 0x31, 0x52,
+ 0xd7, 0xfc, 0xa5, 0xad, 0x04, 0x2f, 0xba, 0xa9
+ }
+ },
+ },
+ {
+ {
+ 144,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
+
+ 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
+ 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
+ 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
+ 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
+
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
+ 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
+ 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
+
+ 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
+ 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+ }
+ },
+ {
+ 16,
+ {
+ 0x06, 0x9e, 0xd6, 0xb8, 0xef, 0x0f, 0x20, 0x7b,
+ 0x3e, 0x24, 0x3b, 0xb1, 0x01, 0x9f, 0xe6, 0x32
+ }
+ },
+ },
+ {
+ {
+ 160,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
+
+ 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
+ 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
+ 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
+ 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
+
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
+ 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
+ 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
+
+ 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
+ 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66,
+ 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
+ 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+ }
+ },
+ {
+ 16,
+ {
+ 0xcc, 0xa3, 0x39, 0xd9, 0xa4, 0x5f, 0xa2, 0x36,
+ 0x8c, 0x2c, 0x68, 0xb3, 0xa4, 0x17, 0x91, 0x33
+ }
+ },
+ },
+ {
+ {
+ 288,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
+
+ 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
+ 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
+ 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
+ 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
+
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
+ 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
+ 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
+
+ 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
+ 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66,
+ 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
+ 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61,
+
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
+
+ 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
+ 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
+ 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
+ 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
+
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
+ 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
+ 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+ }
+ },
+ {
+ 16,
+ {
+ 0x53, 0xf6, 0xe8, 0x28, 0xa2, 0xf0, 0xfe, 0x0e,
+ 0xe8, 0x15, 0xbf, 0x0b, 0xd5, 0x84, 0x1a, 0x34
+ }
+ },
+ },
+ {
+ {
+ 320,
+ {
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
+
+ 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
+ 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
+ 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
+ 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
+
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
+ 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
+ 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
+
+ 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
+ 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66,
+ 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
+ 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61,
+
+ 0xab, 0x08, 0x12, 0x72, 0x4a, 0x7f, 0x1e, 0x34,
+ 0x27, 0x42, 0xcb, 0xed, 0x37, 0x4d, 0x94, 0xd1,
+ 0x36, 0xc6, 0xb8, 0x79, 0x5d, 0x45, 0xb3, 0x81,
+ 0x98, 0x30, 0xf2, 0xc0, 0x44, 0x91, 0xfa, 0xf0,
+
+ 0x99, 0x0c, 0x62, 0xe4, 0x8b, 0x80, 0x18, 0xb2,
+ 0xc3, 0xe4, 0xa0, 0xfa, 0x31, 0x34, 0xcb, 0x67,
+ 0xfa, 0x83, 0xe1, 0x58, 0xc9, 0x94, 0xd9, 0x61,
+ 0xc4, 0xcb, 0x21, 0x09, 0x5c, 0x1b, 0xf9, 0xaf,
+
+ 0x48, 0x44, 0x3d, 0x0b, 0xb0, 0xd2, 0x11, 0x09,
+ 0xc8, 0x9a, 0x10, 0x0b, 0x5c, 0xe2, 0xc2, 0x08,
+ 0x83, 0x14, 0x9c, 0x69, 0xb5, 0x61, 0xdd, 0x88,
+ 0x29, 0x8a, 0x17, 0x98, 0xb1, 0x07, 0x16, 0xef,
+
+ 0x66, 0x3c, 0xea, 0x19, 0x0f, 0xfb, 0x83, 0xd8,
+ 0x95, 0x93, 0xf3, 0xf4, 0x76, 0xb6, 0xbc, 0x24,
+ 0xd7, 0xe6, 0x79, 0x10, 0x7e, 0xa2, 0x6a, 0xdb,
+ 0x8c, 0xaf, 0x66, 0x52, 0xd0, 0x65, 0x61, 0x36,
+
+ 0x81, 0x20, 0x59, 0xa5, 0xda, 0x19, 0x86, 0x37,
+ 0xca, 0xc7, 0xc4, 0xa6, 0x31, 0xbe, 0xe4, 0x66,
+ 0x5b, 0x88, 0xd7, 0xf6, 0x22, 0x8b, 0x11, 0xe2,
+ 0xe2, 0x85, 0x79, 0xa5, 0xc0, 0xc1, 0xf7, 0x61
+ }
+ },
+ {
+ 32,
+ {
+ 0x12, 0x97, 0x6a, 0x08, 0xc4, 0x42, 0x6d, 0x0c,
+ 0xe8, 0xa8, 0x24, 0x07, 0xc4, 0xf4, 0x82, 0x07,
+ 0x80, 0xf8, 0xc2, 0x0a, 0xa7, 0x12, 0x02, 0xd1,
+ 0xe2, 0x91, 0x79, 0xcb, 0xcb, 0x55, 0x5a, 0x57
+ }
+ },
+ {
+ 16,
+ {
+ 0xb8, 0x46, 0xd4, 0x4e, 0x9b, 0xbd, 0x53, 0xce,
+ 0xdf, 0xfb, 0xfb, 0xb6, 0xb7, 0xfa, 0x49, 0x33
+ }
+ },
+ },
+ /*
+ * 4th power of the key spills to 131th bit in SIMD key setup
+ */
+ {
+ {
+ 256,
+ {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+ }
+ },
+ {
+ 32,
+ {
+ 0xad, 0x62, 0x81, 0x07, 0xe8, 0x35, 0x1d, 0x0f,
+ 0x2c, 0x23, 0x1a, 0x05, 0xdc, 0x4a, 0x41, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 16,
+ {
+ 0x07, 0x14, 0x5a, 0x4c, 0x02, 0xfe, 0x5f, 0xa3,
+ 0x20, 0x36, 0xde, 0x68, 0xfa, 0xbe, 0x90, 0x66
+ }
+ },
+ },
+ /*
+ * poly1305_ieee754.c failed this in final stage
+ */
+ {
+ {
+ 252,
+ {
+ 0x84, 0x23, 0x64, 0xe1, 0x56, 0x33, 0x6c, 0x09,
+ 0x98, 0xb9, 0x33, 0xa6, 0x23, 0x77, 0x26, 0x18,
+ 0x0d, 0x9e, 0x3f, 0xdc, 0xbd, 0xe4, 0xcd, 0x5d,
+ 0x17, 0x08, 0x0f, 0xc3, 0xbe, 0xb4, 0x96, 0x14,
+
+ 0xd7, 0x12, 0x2c, 0x03, 0x74, 0x63, 0xff, 0x10,
+ 0x4d, 0x73, 0xf1, 0x9c, 0x12, 0x70, 0x46, 0x28,
+ 0xd4, 0x17, 0xc4, 0xc5, 0x4a, 0x3f, 0xe3, 0x0d,
+ 0x3c, 0x3d, 0x77, 0x14, 0x38, 0x2d, 0x43, 0xb0,
+
+ 0x38, 0x2a, 0x50, 0xa5, 0xde, 0xe5, 0x4b, 0xe8,
+ 0x44, 0xb0, 0x76, 0xe8, 0xdf, 0x88, 0x20, 0x1a,
+ 0x1c, 0xd4, 0x3b, 0x90, 0xeb, 0x21, 0x64, 0x3f,
+ 0xa9, 0x6f, 0x39, 0xb5, 0x18, 0xaa, 0x83, 0x40,
+
+ 0xc9, 0x42, 0xff, 0x3c, 0x31, 0xba, 0xf7, 0xc9,
+ 0xbd, 0xbf, 0x0f, 0x31, 0xae, 0x3f, 0xa0, 0x96,
+ 0xbf, 0x8c, 0x63, 0x03, 0x06, 0x09, 0x82, 0x9f,
+ 0xe7, 0x2e, 0x17, 0x98, 0x24, 0x89, 0x0b, 0xc8,
+
+ 0xe0, 0x8c, 0x31, 0x5c, 0x1c, 0xce, 0x2a, 0x83,
+ 0x14, 0x4d, 0xbb, 0xff, 0x09, 0xf7, 0x4e, 0x3e,
+ 0xfc, 0x77, 0x0b, 0x54, 0xd0, 0x98, 0x4a, 0x8f,
+ 0x19, 0xb1, 0x47, 0x19, 0xe6, 0x36, 0x35, 0x64,
+
+ 0x1d, 0x6b, 0x1e, 0xed, 0xf6, 0x3e, 0xfb, 0xf0,
+ 0x80, 0xe1, 0x78, 0x3d, 0x32, 0x44, 0x54, 0x12,
+ 0x11, 0x4c, 0x20, 0xde, 0x0b, 0x83, 0x7a, 0x0d,
+ 0xfa, 0x33, 0xd6, 0xb8, 0x28, 0x25, 0xff, 0xf4,
+
+ 0x4c, 0x9a, 0x70, 0xea, 0x54, 0xce, 0x47, 0xf0,
+ 0x7d, 0xf6, 0x98, 0xe6, 0xb0, 0x33, 0x23, 0xb5,
+ 0x30, 0x79, 0x36, 0x4a, 0x5f, 0xc3, 0xe9, 0xdd,
+ 0x03, 0x43, 0x92, 0xbd, 0xde, 0x86, 0xdc, 0xcd,
+
+ 0xda, 0x94, 0x32, 0x1c, 0x5e, 0x44, 0x06, 0x04,
+ 0x89, 0x33, 0x6c, 0xb6, 0x5b, 0xf3, 0x98, 0x9c,
+ 0x36, 0xf7, 0x28, 0x2c, 0x2f, 0x5d, 0x2b, 0x88,
+ 0x2c, 0x17, 0x1e, 0x74
+ }
+ },
+ {
+ 32,
+ {
+ 0x95, 0xd5, 0xc0, 0x05, 0x50, 0x3e, 0x51, 0x0d,
+ 0x8c, 0xd0, 0xaa, 0x07, 0x2c, 0x4a, 0x4d, 0x06,
+ 0x6e, 0xab, 0xc5, 0x2d, 0x11, 0x65, 0x3d, 0xf4,
+ 0x7f, 0xbf, 0x63, 0xab, 0x19, 0x8b, 0xcc, 0x26
+ }
+ },
+ {
+ 16,
+ {
+ 0xf2, 0x48, 0x31, 0x2e, 0x57, 0x8d, 0x9d, 0x58,
+ 0xf8, 0xb7, 0xbb, 0x4d, 0x19, 0x10, 0x54, 0x31
+ }
+ },
+ },
+ /*
+ * AVX2 in poly1305-x86.pl failed this with 176+32 split
+ */
+ {
+ {
+ 208,
+ {
+ 0x24, 0x8a, 0xc3, 0x10, 0x85, 0xb6, 0xc2, 0xad,
+ 0xaa, 0xa3, 0x82, 0x59, 0xa0, 0xd7, 0x19, 0x2c,
+ 0x5c, 0x35, 0xd1, 0xbb, 0x4e, 0xf3, 0x9a, 0xd9,
+ 0x4c, 0x38, 0xd1, 0xc8, 0x24, 0x79, 0xe2, 0xdd,
+
+ 0x21, 0x59, 0xa0, 0x77, 0x02, 0x4b, 0x05, 0x89,
+ 0xbc, 0x8a, 0x20, 0x10, 0x1b, 0x50, 0x6f, 0x0a,
+ 0x1a, 0xd0, 0xbb, 0xab, 0x76, 0xe8, 0x3a, 0x83,
+ 0xf1, 0xb9, 0x4b, 0xe6, 0xbe, 0xae, 0x74, 0xe8,
+
+ 0x74, 0xca, 0xb6, 0x92, 0xc5, 0x96, 0x3a, 0x75,
+ 0x43, 0x6b, 0x77, 0x61, 0x21, 0xec, 0x9f, 0x62,
+ 0x39, 0x9a, 0x3e, 0x66, 0xb2, 0xd2, 0x27, 0x07,
+ 0xda, 0xe8, 0x19, 0x33, 0xb6, 0x27, 0x7f, 0x3c,
+
+ 0x85, 0x16, 0xbc, 0xbe, 0x26, 0xdb, 0xbd, 0x86,
+ 0xf3, 0x73, 0x10, 0x3d, 0x7c, 0xf4, 0xca, 0xd1,
+ 0x88, 0x8c, 0x95, 0x21, 0x18, 0xfb, 0xfb, 0xd0,
+ 0xd7, 0xb4, 0xbe, 0xdc, 0x4a, 0xe4, 0x93, 0x6a,
+
+ 0xff, 0x91, 0x15, 0x7e, 0x7a, 0xa4, 0x7c, 0x54,
+ 0x44, 0x2e, 0xa7, 0x8d, 0x6a, 0xc2, 0x51, 0xd3,
+ 0x24, 0xa0, 0xfb, 0xe4, 0x9d, 0x89, 0xcc, 0x35,
+ 0x21, 0xb6, 0x6d, 0x16, 0xe9, 0xc6, 0x6a, 0x37,
+
+ 0x09, 0x89, 0x4e, 0x4e, 0xb0, 0xa4, 0xee, 0xdc,
+ 0x4a, 0xe1, 0x94, 0x68, 0xe6, 0x6b, 0x81, 0xf2,
+
+ 0x71, 0x35, 0x1b, 0x1d, 0x92, 0x1e, 0xa5, 0x51,
+ 0x04, 0x7a, 0xbc, 0xc6, 0xb8, 0x7a, 0x90, 0x1f,
+ 0xde, 0x7d, 0xb7, 0x9f, 0xa1, 0x81, 0x8c, 0x11,
+ 0x33, 0x6d, 0xbc, 0x07, 0x24, 0x4a, 0x40, 0xeb
+ }
+ },
+ {
+ 32,
+ {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 16,
+ {
+ 0xbc, 0x93, 0x9b, 0xc5, 0x28, 0x14, 0x80, 0xfa,
+ 0x99, 0xc6, 0xd6, 0x8c, 0x25, 0x8e, 0xc4, 0x2f
+ }
+ },
+ },
+ /*
+ * test vectors from Google
+ */
+ {
+ {
+ 0,
+ {
+ 0x00,
+ }
+ },
+ {
+ 32,
+ {
+ 0xc8, 0xaf, 0xaa, 0xc3, 0x31, 0xee, 0x37, 0x2c,
+ 0xd6, 0x08, 0x2d, 0xe1, 0x34, 0x94, 0x3b, 0x17,
+ 0x47, 0x10, 0x13, 0x0e, 0x9f, 0x6f, 0xea, 0x8d,
+ 0x72, 0x29, 0x38, 0x50, 0xa6, 0x67, 0xd8, 0x6c
+ }
+ },
+ {
+ 16,
+ {
+ 0x47, 0x10, 0x13, 0x0e, 0x9f, 0x6f, 0xea, 0x8d,
+ 0x72, 0x29, 0x38, 0x50, 0xa6, 0x67, 0xd8, 0x6c
+ }
+ },
+ },
+ {
+ {
+ 12,
+ {
+ 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f,
+ 0x72, 0x6c, 0x64, 0x21
+ }
+ },
+ {
+ 32,
+ {
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+ 0x33, 0x32, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20,
+ 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x50, 0x6f, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x35
+ }
+ },
+ {
+ 16,
+ {
+ 0xa6, 0xf7, 0x45, 0x00, 0x8f, 0x81, 0xc9, 0x16,
+ 0xa2, 0x0d, 0xcc, 0x74, 0xee, 0xf2, 0xb2, 0xf0
+ }
+ },
+ },
+ {
+ {
+ 32,
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 32,
+ {
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+ 0x33, 0x32, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20,
+ 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x50, 0x6f, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x35
+ }
+ },
+ {
+ 16,
+ {
+ 0x49, 0xec, 0x78, 0x09, 0x0e, 0x48, 0x1e, 0xc6,
+ 0xc2, 0x6b, 0x33, 0xb9, 0x1c, 0xcc, 0x03, 0x07
+ }
+ },
+ },
+ {
+ {
+ 128,
+ {
+ 0x89, 0xda, 0xb8, 0x0b, 0x77, 0x17, 0xc1, 0xdb,
+ 0x5d, 0xb4, 0x37, 0x86, 0x0a, 0x3f, 0x70, 0x21,
+ 0x8e, 0x93, 0xe1, 0xb8, 0xf4, 0x61, 0xfb, 0x67,
+ 0x7f, 0x16, 0xf3, 0x5f, 0x6f, 0x87, 0xe2, 0xa9,
+
+ 0x1c, 0x99, 0xbc, 0x3a, 0x47, 0xac, 0xe4, 0x76,
+ 0x40, 0xcc, 0x95, 0xc3, 0x45, 0xbe, 0x5e, 0xcc,
+ 0xa5, 0xa3, 0x52, 0x3c, 0x35, 0xcc, 0x01, 0x89,
+ 0x3a, 0xf0, 0xb6, 0x4a, 0x62, 0x03, 0x34, 0x27,
+
+ 0x03, 0x72, 0xec, 0x12, 0x48, 0x2d, 0x1b, 0x1e,
+ 0x36, 0x35, 0x61, 0x69, 0x8a, 0x57, 0x8b, 0x35,
+ 0x98, 0x03, 0x49, 0x5b, 0xb4, 0xe2, 0xef, 0x19,
+ 0x30, 0xb1, 0x7a, 0x51, 0x90, 0xb5, 0x80, 0xf1,
+
+ 0x41, 0x30, 0x0d, 0xf3, 0x0a, 0xdb, 0xec, 0xa2,
+ 0x8f, 0x64, 0x27, 0xa8, 0xbc, 0x1a, 0x99, 0x9f,
+ 0xd5, 0x1c, 0x55, 0x4a, 0x01, 0x7d, 0x09, 0x5d,
+ 0x8c, 0x3e, 0x31, 0x27, 0xda, 0xf9, 0xf5, 0x95
+ }
+ },
+ {
+ 32,
+ {
+ 0x2d, 0x77, 0x3b, 0xe3, 0x7a, 0xdb, 0x1e, 0x4d,
+ 0x68, 0x3b, 0xf0, 0x07, 0x5e, 0x79, 0xc4, 0xee,
+ 0x03, 0x79, 0x18, 0x53, 0x5a, 0x7f, 0x99, 0xcc,
+ 0xb7, 0x04, 0x0f, 0xb5, 0xf5, 0xf4, 0x3a, 0xea
+ }
+ },
+ {
+ 16,
+ {
+ 0xc8, 0x5d, 0x15, 0xed, 0x44, 0xc3, 0x78, 0xd6,
+ 0xb0, 0x0e, 0x23, 0x06, 0x4c, 0x7b, 0xcd, 0x51
+ }
+ },
+ },
+ {
+ {
+ 528,
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b,
+ 0x17, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00,
+
+ 0x06, 0xdb, 0x1f, 0x1f, 0x36, 0x8d, 0x69, 0x6a,
+ 0x81, 0x0a, 0x34, 0x9c, 0x0c, 0x71, 0x4c, 0x9a,
+ 0x5e, 0x78, 0x50, 0xc2, 0x40, 0x7d, 0x72, 0x1a,
+ 0xcd, 0xed, 0x95, 0xe0, 0x18, 0xd7, 0xa8, 0x52,
+
+ 0x66, 0xa6, 0xe1, 0x28, 0x9c, 0xdb, 0x4a, 0xeb,
+ 0x18, 0xda, 0x5a, 0xc8, 0xa2, 0xb0, 0x02, 0x6d,
+ 0x24, 0xa5, 0x9a, 0xd4, 0x85, 0x22, 0x7f, 0x3e,
+ 0xae, 0xdb, 0xb2, 0xe7, 0xe3, 0x5e, 0x1c, 0x66,
+
+ 0xcd, 0x60, 0xf9, 0xab, 0xf7, 0x16, 0xdc, 0xc9,
+ 0xac, 0x42, 0x68, 0x2d, 0xd7, 0xda, 0xb2, 0x87,
+ 0xa7, 0x02, 0x4c, 0x4e, 0xef, 0xc3, 0x21, 0xcc,
+ 0x05, 0x74, 0xe1, 0x67, 0x93, 0xe3, 0x7c, 0xec,
+
+ 0x03, 0xc5, 0xbd, 0xa4, 0x2b, 0x54, 0xc1, 0x14,
+ 0xa8, 0x0b, 0x57, 0xaf, 0x26, 0x41, 0x6c, 0x7b,
+ 0xe7, 0x42, 0x00, 0x5e, 0x20, 0x85, 0x5c, 0x73,
+ 0xe2, 0x1d, 0xc8, 0xe2, 0xed, 0xc9, 0xd4, 0x35,
+
+ 0xcb, 0x6f, 0x60, 0x59, 0x28, 0x00, 0x11, 0xc2,
+ 0x70, 0xb7, 0x15, 0x70, 0x05, 0x1c, 0x1c, 0x9b,
+ 0x30, 0x52, 0x12, 0x66, 0x20, 0xbc, 0x1e, 0x27,
+ 0x30, 0xfa, 0x06, 0x6c, 0x7a, 0x50, 0x9d, 0x53,
+
+ 0xc6, 0x0e, 0x5a, 0xe1, 0xb4, 0x0a, 0xa6, 0xe3,
+ 0x9e, 0x49, 0x66, 0x92, 0x28, 0xc9, 0x0e, 0xec,
+ 0xb4, 0xa5, 0x0d, 0xb3, 0x2a, 0x50, 0xbc, 0x49,
+ 0xe9, 0x0b, 0x4f, 0x4b, 0x35, 0x9a, 0x1d, 0xfd,
+
+ 0x11, 0x74, 0x9c, 0xd3, 0x86, 0x7f, 0xcf, 0x2f,
+ 0xb7, 0xbb, 0x6c, 0xd4, 0x73, 0x8f, 0x6a, 0x4a,
+ 0xd6, 0xf7, 0xca, 0x50, 0x58, 0xf7, 0x61, 0x88,
+ 0x45, 0xaf, 0x9f, 0x02, 0x0f, 0x6c, 0x3b, 0x96,
+
+ 0x7b, 0x8f, 0x4c, 0xd4, 0xa9, 0x1e, 0x28, 0x13,
+ 0xb5, 0x07, 0xae, 0x66, 0xf2, 0xd3, 0x5c, 0x18,
+ 0x28, 0x4f, 0x72, 0x92, 0x18, 0x60, 0x62, 0xe1,
+ 0x0f, 0xd5, 0x51, 0x0d, 0x18, 0x77, 0x53, 0x51,
+
+ 0xef, 0x33, 0x4e, 0x76, 0x34, 0xab, 0x47, 0x43,
+ 0xf5, 0xb6, 0x8f, 0x49, 0xad, 0xca, 0xb3, 0x84,
+ 0xd3, 0xfd, 0x75, 0xf7, 0x39, 0x0f, 0x40, 0x06,
+ 0xef, 0x2a, 0x29, 0x5c, 0x8c, 0x7a, 0x07, 0x6a,
+
+ 0xd5, 0x45, 0x46, 0xcd, 0x25, 0xd2, 0x10, 0x7f,
+ 0xbe, 0x14, 0x36, 0xc8, 0x40, 0x92, 0x4a, 0xae,
+ 0xbe, 0x5b, 0x37, 0x08, 0x93, 0xcd, 0x63, 0xd1,
+ 0x32, 0x5b, 0x86, 0x16, 0xfc, 0x48, 0x10, 0x88,
+
+ 0x6b, 0xc1, 0x52, 0xc5, 0x32, 0x21, 0xb6, 0xdf,
+ 0x37, 0x31, 0x19, 0x39, 0x32, 0x55, 0xee, 0x72,
+ 0xbc, 0xaa, 0x88, 0x01, 0x74, 0xf1, 0x71, 0x7f,
+ 0x91, 0x84, 0xfa, 0x91, 0x64, 0x6f, 0x17, 0xa2,
+
+ 0x4a, 0xc5, 0x5d, 0x16, 0xbf, 0xdd, 0xca, 0x95,
+ 0x81, 0xa9, 0x2e, 0xda, 0x47, 0x92, 0x01, 0xf0,
+ 0xed, 0xbf, 0x63, 0x36, 0x00, 0xd6, 0x06, 0x6d,
+ 0x1a, 0xb3, 0x6d, 0x5d, 0x24, 0x15, 0xd7, 0x13,
+
+ 0x51, 0xbb, 0xcd, 0x60, 0x8a, 0x25, 0x10, 0x8d,
+ 0x25, 0x64, 0x19, 0x92, 0xc1, 0xf2, 0x6c, 0x53,
+ 0x1c, 0xf9, 0xf9, 0x02, 0x03, 0xbc, 0x4c, 0xc1,
+ 0x9f, 0x59, 0x27, 0xd8, 0x34, 0xb0, 0xa4, 0x71,
+
+ 0x16, 0xd3, 0x88, 0x4b, 0xbb, 0x16, 0x4b, 0x8e,
+ 0xc8, 0x83, 0xd1, 0xac, 0x83, 0x2e, 0x56, 0xb3,
+ 0x91, 0x8a, 0x98, 0x60, 0x1a, 0x08, 0xd1, 0x71,
+ 0x88, 0x15, 0x41, 0xd5, 0x94, 0xdb, 0x39, 0x9c,
+
+ 0x6a, 0xe6, 0x15, 0x12, 0x21, 0x74, 0x5a, 0xec,
+ 0x81, 0x4c, 0x45, 0xb0, 0xb0, 0x5b, 0x56, 0x54,
+ 0x36, 0xfd, 0x6f, 0x13, 0x7a, 0xa1, 0x0a, 0x0c,
+ 0x0b, 0x64, 0x37, 0x61, 0xdb, 0xd6, 0xf9, 0xa9,
+
+ 0xdc, 0xb9, 0x9b, 0x1a, 0x6e, 0x69, 0x08, 0x54,
+ 0xce, 0x07, 0x69, 0xcd, 0xe3, 0x97, 0x61, 0xd8,
+ 0x2f, 0xcd, 0xec, 0x15, 0xf0, 0xd9, 0x2d, 0x7d,
+ 0x8e, 0x94, 0xad, 0xe8, 0xeb, 0x83, 0xfb, 0xe0
+ }
+ },
+ {
+ 32,
+ {
+ 0x99, 0xe5, 0x82, 0x2d, 0xd4, 0x17, 0x3c, 0x99,
+ 0x5e, 0x3d, 0xae, 0x0d, 0xde, 0xfb, 0x97, 0x74,
+ 0x3f, 0xde, 0x3b, 0x08, 0x01, 0x34, 0xb3, 0x9f,
+ 0x76, 0xe9, 0xbf, 0x8d, 0x0e, 0x88, 0xd5, 0x46
+ }
+ },
+ {
+ 16,
+ {
+ 0x26, 0x37, 0x40, 0x8f, 0xe1, 0x30, 0x86, 0xea,
+ 0x73, 0xf9, 0x71, 0xe3, 0x42, 0x5e, 0x28, 0x20
+ }
+ },
+ },
+ /*
+ * test vectors from Hanno Böck
+ */
+ {
+ {
+ 257,
+ {
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0x80, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0xcc, 0xcc, 0xcc,
+
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc5,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe3, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xac, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe6,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00,
+ 0xaf, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+
+ 0xcc, 0xcc, 0xff, 0xff, 0xff, 0xf5, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+ 0x00, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x71, 0x92, 0x05, 0xa8, 0x52, 0x1d,
+
+ 0xfc
+ }
+ },
+ {
+ 32,
+ {
+ 0x7f, 0x1b, 0x02, 0x64, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc
+ }
+ },
+ {
+ 16,
+ {
+ 0x85, 0x59, 0xb8, 0x76, 0xec, 0xee, 0xd6, 0x6e,
+ 0xb3, 0x77, 0x98, 0xc0, 0x45, 0x7b, 0xaf, 0xf9
+ }
+ },
+ },
+ {
+ {
+ 39,
+ {
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x64
+ }
+ },
+ {
+ 32,
+ {
+ 0xe0, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
+ }
+ },
+ {
+ 16,
+ {
+ 0x00, 0xbd, 0x12, 0x58, 0x97, 0x8e, 0x20, 0x54,
+ 0x44, 0xc9, 0xaa, 0xaa, 0x82, 0x00, 0x6f, 0xed
+ }
+ },
+ },
+ {
+ {
+ 2,
+ {
+ 0x02, 0xfc
+ }
+ },
+ {
+ 32,
+ {
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c
+ }
+ },
+ {
+ 16,
+ {
+ 0x06, 0x12, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c
+ }
+ },
+ },
+ {
+ {
+ 415,
+ {
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7a, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+
+ 0x7b, 0x7b, 0x5c, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x6e, 0x7b, 0x00, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x5c,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+ 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
+
+ 0x7b, 0x6e, 0x7b, 0x00, 0x13, 0x00, 0x00, 0x00,
+ 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+ 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0xef, 0xff, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x64, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00,
+
+ 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0xef, 0xff, 0x00, 0x09,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7a, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc
+ }
+ },
+ {
+ 32,
+ {
+ 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x7b
+ }
+ },
+ {
+ 16,
+ {
+ 0x33, 0x20, 0x5b, 0xbf, 0x9e, 0x9f, 0x8f, 0x72,
+ 0x12, 0xab, 0x9e, 0x2a, 0xb9, 0xb7, 0xe4, 0xa5
+ }
+ },
+ },
+ {
+ {
+ 118,
+ {
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xe9,
+ 0xe9, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
+ 0xac, 0xac, 0xac, 0xac, 0x00, 0x00, 0xac, 0xac,
+
+ 0xec, 0x01, 0x00, 0xac, 0xac, 0xac, 0x2c, 0xac,
+ 0xa2, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
+ 0xac, 0xac, 0xac, 0xac, 0x64, 0xf2
+ }
+ },
+ {
+ 32,
+ {
+ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f,
+ 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcf, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77
+ }
+ },
+ {
+ 16,
+ {
+ 0x02, 0xee, 0x7c, 0x8c, 0x54, 0x6d, 0xde, 0xb1,
+ 0xa4, 0x67, 0xe4, 0xc3, 0x98, 0x11, 0x58, 0xb9
+ }
+ },
+ },
+ /*
+ * test vectors from Andrew Moon
+ */
+ { /* nacl */
+ {
+ 131,
+ {
+ 0x8e, 0x99, 0x3b, 0x9f, 0x48, 0x68, 0x12, 0x73,
+ 0xc2, 0x96, 0x50, 0xba, 0x32, 0xfc, 0x76, 0xce,
+ 0x48, 0x33, 0x2e, 0xa7, 0x16, 0x4d, 0x96, 0xa4,
+ 0x47, 0x6f, 0xb8, 0xc5, 0x31, 0xa1, 0x18, 0x6a,
+
+ 0xc0, 0xdf, 0xc1, 0x7c, 0x98, 0xdc, 0xe8, 0x7b,
+ 0x4d, 0xa7, 0xf0, 0x11, 0xec, 0x48, 0xc9, 0x72,
+ 0x71, 0xd2, 0xc2, 0x0f, 0x9b, 0x92, 0x8f, 0xe2,
+ 0x27, 0x0d, 0x6f, 0xb8, 0x63, 0xd5, 0x17, 0x38,
+
+ 0xb4, 0x8e, 0xee, 0xe3, 0x14, 0xa7, 0xcc, 0x8a,
+ 0xb9, 0x32, 0x16, 0x45, 0x48, 0xe5, 0x26, 0xae,
+ 0x90, 0x22, 0x43, 0x68, 0x51, 0x7a, 0xcf, 0xea,
+ 0xbd, 0x6b, 0xb3, 0x73, 0x2b, 0xc0, 0xe9, 0xda,
+
+ 0x99, 0x83, 0x2b, 0x61, 0xca, 0x01, 0xb6, 0xde,
+ 0x56, 0x24, 0x4a, 0x9e, 0x88, 0xd5, 0xf9, 0xb3,
+ 0x79, 0x73, 0xf6, 0x22, 0xa4, 0x3d, 0x14, 0xa6,
+ 0x59, 0x9b, 0x1f, 0x65, 0x4c, 0xb4, 0x5a, 0x74,
+
+ 0xe3, 0x55, 0xa5
+ }
+ },
+ {
+ 32,
+ {
+ 0xee, 0xa6, 0xa7, 0x25, 0x1c, 0x1e, 0x72, 0x91,
+ 0x6d, 0x11, 0xc2, 0xcb, 0x21, 0x4d, 0x3c, 0x25,
+ 0x25, 0x39, 0x12, 0x1d, 0x8e, 0x23, 0x4e, 0x65,
+ 0x2d, 0x65, 0x1f, 0xa4, 0xc8, 0xcf, 0xf8, 0x80
+ }
+ },
+ {
+ 16,
+ {
+ 0xf3, 0xff, 0xc7, 0x70, 0x3f, 0x94, 0x00, 0xe5,
+ 0x2a, 0x7d, 0xfb, 0x4b, 0x3d, 0x33, 0x05, 0xd9
+ }
+ },
+ },
+ { /* wrap 2^130-5 */
+ {
+ 16,
+ {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+ }
+ },
+ {
+ 32,
+ {
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 16,
+ {
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ },
+ { /* wrap 2^128 */
+ {
+ 16,
+ {
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 32,
+ {
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+ }
+ },
+ {
+ 16,
+ {
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ },
+ { /* limb carry */
+ {
+ 48,
+ {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 32,
+ {
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 16,
+ {
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ },
+ { /* 2^130-5 */
+ {
+ 48,
+ {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfb, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
+ }
+ },
+ {
+ 32,
+ {
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 16,
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ }
+ },
+ },
+ { /* 2^130-6 */
+ {
+ 16,
+ {
+ 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+ }
+ },
+ {
+ 32,
+ {
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 16,
+ {
+ 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+ }
+ },
+ },
+ { /* 5*H+L reduction intermediate */
+ {
+ 64,
+ {
+ 0xe3, 0x35, 0x94, 0xd7, 0x50, 0x5e, 0x43, 0xb9,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x33, 0x94, 0xd7, 0x50, 0x5e, 0x43, 0x79, 0xcd,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 32,
+ {
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 16,
+ {
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ },
+ { /* 5*H+L reduction final */
+ {
+ 48,
+ {
+ 0xe3, 0x35, 0x94, 0xd7, 0x50, 0x5e, 0x43, 0xb9,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x33, 0x94, 0xd7, 0x50, 0x5e, 0x43, 0x79, 0xcd,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ }
+ },
+ {
+ 32,
+ {
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ },
+ {
+ 16,
+ {
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ }
+ }
+};
+
+static int test_poly1305(int idx)
+{
+ POLY1305 poly1305;
+ const TESTDATA test = tests[idx];
+ const unsigned char *in = test.input.data;
+ size_t inlen = test.input.size;
+ const unsigned char *key = test.key.data;
+ const unsigned char *expected = test.expected.data;
+ size_t expectedlen = test.expected.size;
+ unsigned char out[16];
+
+ if (!TEST_size_t_eq(expectedlen, sizeof(out)))
+ return 0;
+
+ Poly1305_Init(&poly1305, key);
+ Poly1305_Update(&poly1305, in, inlen);
+ Poly1305_Final(&poly1305, out);
+
+ if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
+ TEST_info("Poly1305 test #%d failed.", idx);
+ return 0;
+ }
+
+ if (inlen > 16) {
+ Poly1305_Init(&poly1305, key);
+ Poly1305_Update(&poly1305, in, 1);
+ Poly1305_Update(&poly1305, in+1, inlen-1);
+ Poly1305_Final(&poly1305, out);
+
+ if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
+ TEST_info("Poly1305 test #%d/1+(N-1) failed.", idx);
+ return 0;
+ }
+ }
+
+ if (inlen > 32) {
+ size_t half = inlen / 2;
+
+ Poly1305_Init(&poly1305, key);
+ Poly1305_Update(&poly1305, in, half);
+ Poly1305_Update(&poly1305, in+half, inlen-half);
+ Poly1305_Final(&poly1305, out);
+
+ if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
+ TEST_info("Poly1305 test #%d/2 failed.", idx);
+ return 0;
+ }
+
+ for (half = 16; half < inlen; half += 16) {
+ Poly1305_Init(&poly1305, key);
+ Poly1305_Update(&poly1305, in, half);
+ Poly1305_Update(&poly1305, in+half, inlen-half);
+ Poly1305_Final(&poly1305, out);
+
+ if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
+ TEST_info("Poly1305 test #%d/%zu+%zu failed.",
+ idx, half, inlen-half);
+ return 0;
+ }
+ }
+ }
+
+ return 1;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_poly1305, OSSL_NELEM(tests));
+ return 1;
+}
diff --git a/test/property_test.c b/test/property_test.c
new file mode 100644
index 000000000000..88c5342c538e
--- /dev/null
+++ b/test/property_test.c
@@ -0,0 +1,676 @@
+/*
+ * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2019, Oracle and/or its affiliates. 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 <stdarg.h>
+#include <openssl/evp.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+#include "internal/property.h"
+#include "../crypto/property/property_local.h"
+
+/*
+ * We make our OSSL_PROVIDER for testing purposes. All we really need is
+ * a pointer. We know that as long as we don't try to use the method
+ * cache flush functions, the provider pointer is merely a pointer being
+ * passed around, and used as a tag of sorts.
+ */
+struct ossl_provider_st {
+ int x;
+};
+
+static int add_property_names(const char *n, ...)
+{
+ va_list args;
+ int res = 1;
+
+ va_start(args, n);
+ do {
+ if (!TEST_int_ne(ossl_property_name(NULL, n, 1), 0))
+ res = 0;
+ } while ((n = va_arg(args, const char *)) != NULL);
+ va_end(args);
+ return res;
+}
+
+static int up_ref(void *p)
+{
+ return 1;
+}
+
+static void down_ref(void *p)
+{
+}
+
+static int test_property_string(void)
+{
+ OSSL_METHOD_STORE *store;
+ int res = 0;
+ OSSL_PROPERTY_IDX i, j;
+
+ if (TEST_ptr(store = ossl_method_store_new(NULL))
+ && TEST_int_eq(ossl_property_name(NULL, "fnord", 0), 0)
+ && TEST_int_ne(ossl_property_name(NULL, "fnord", 1), 0)
+ && TEST_int_ne(ossl_property_name(NULL, "name", 1), 0)
+ /* Property value checks */
+ && TEST_int_eq(ossl_property_value(NULL, "fnord", 0), 0)
+ && TEST_int_ne(i = ossl_property_value(NULL, "no", 0), 0)
+ && TEST_int_ne(j = ossl_property_value(NULL, "yes", 0), 0)
+ && TEST_int_ne(i, j)
+ && TEST_int_eq(ossl_property_value(NULL, "yes", 1), j)
+ && TEST_int_eq(ossl_property_value(NULL, "no", 1), i)
+ && TEST_int_ne(i = ossl_property_value(NULL, "illuminati", 1), 0)
+ && TEST_int_eq(j = ossl_property_value(NULL, "fnord", 1), i + 1)
+ && TEST_int_eq(ossl_property_value(NULL, "fnord", 1), j)
+ /* Check name and values are distinct */
+ && TEST_int_eq(ossl_property_value(NULL, "cold", 0), 0)
+ && TEST_int_ne(ossl_property_name(NULL, "fnord", 0),
+ ossl_property_value(NULL, "fnord", 0)))
+ res = 1;
+ ossl_method_store_free(store);
+ return res;
+}
+
+static const struct {
+ const char *defn;
+ const char *query;
+ int e;
+} parser_tests[] = {
+ { "", "sky=blue", -1 },
+ { "", "sky!=blue", 1 },
+ { "groan", "", 0 },
+ { "cold=yes", "cold=yes", 1 },
+ { "cold=yes", "cold", 1 },
+ { "cold=yes", "cold!=no", 1 },
+ { "groan", "groan=yes", 1 },
+ { "groan", "groan=no", -1 },
+ { "groan", "groan!=yes", -1 },
+ { "cold=no", "cold", -1 },
+ { "cold=no", "?cold", 0 },
+ { "cold=no", "cold=no", 1 },
+ { "groan", "cold", -1 },
+ { "groan", "cold=no", 1 },
+ { "groan", "cold!=yes", 1 },
+ { "groan=blue", "groan=yellow", -1 },
+ { "groan=blue", "?groan=yellow", 0 },
+ { "groan=blue", "groan!=yellow", 1 },
+ { "groan=blue", "?groan!=yellow", 1 },
+ { "today=monday, tomorrow=3", "today!=2", 1 },
+ { "today=monday, tomorrow=3", "today!='monday'", -1 },
+ { "today=monday, tomorrow=3", "tomorrow=3", 1 },
+ { "n=0x3", "n=3", 1 },
+ { "n=0x3", "n=-3", -1 },
+ { "n=0x33", "n=51", 1 },
+ { "n=0x123456789abcdef", "n=0x123456789abcdef", 1 },
+ { "n=0x7fffffffffffffff", "n=0x7fffffffffffffff", 1 }, /* INT64_MAX */
+ { "n=9223372036854775807", "n=9223372036854775807", 1 }, /* INT64_MAX */
+ { "n=0777777777777777777777", "n=0777777777777777777777", 1 }, /* INT64_MAX */
+ { "n=033", "n=27", 1 },
+ { "n=0", "n=00", 1 },
+ { "n=0x0", "n=0", 1 },
+ { "n=0, sky=blue", "?n=0, sky=blue", 2 },
+ { "n=1, sky=blue", "?n=0, sky=blue", 1 },
+};
+
+static int test_property_parse(int n)
+{
+ OSSL_METHOD_STORE *store;
+ OSSL_PROPERTY_LIST *p = NULL, *q = NULL;
+ int r = 0;
+
+ if (TEST_ptr(store = ossl_method_store_new(NULL))
+ && add_property_names("sky", "groan", "cold", "today", "tomorrow", "n",
+ NULL)
+ && TEST_ptr(p = ossl_parse_property(NULL, parser_tests[n].defn))
+ && TEST_ptr(q = ossl_parse_query(NULL, parser_tests[n].query, 0))
+ && TEST_int_eq(ossl_property_match_count(q, p), parser_tests[n].e))
+ r = 1;
+ ossl_property_free(p);
+ ossl_property_free(q);
+ ossl_method_store_free(store);
+ return r;
+}
+
+static int test_property_query_value_create(void)
+{
+ OSSL_METHOD_STORE *store;
+ OSSL_PROPERTY_LIST *p = NULL, *q = NULL, *o = NULL;
+ int r = 0;
+
+ /* The property value used here must not be used in other test cases */
+ if (TEST_ptr(store = ossl_method_store_new(NULL))
+ && add_property_names("wood", NULL)
+ && TEST_ptr(p = ossl_parse_query(NULL, "wood=oak", 0)) /* undefined */
+ && TEST_ptr(q = ossl_parse_query(NULL, "wood=oak", 1)) /* creates */
+ && TEST_ptr(o = ossl_parse_query(NULL, "wood=oak", 0)) /* defined */
+ && TEST_int_eq(ossl_property_match_count(q, p), -1)
+ && TEST_int_eq(ossl_property_match_count(q, o), 1))
+ r = 1;
+ ossl_property_free(o);
+ ossl_property_free(p);
+ ossl_property_free(q);
+ ossl_method_store_free(store);
+ return r;
+}
+
+static const struct {
+ int query;
+ const char *ps;
+} parse_error_tests[] = {
+ { 0, "n=1, n=1" }, /* duplicate name */
+ { 0, "n=1, a=hi, n=1" }, /* duplicate name */
+ { 1, "n=1, a=bye, ?n=0" }, /* duplicate name */
+ { 0, "a=abc,#@!, n=1" }, /* non-ASCII character located */
+ { 1, "a='Hello" }, /* Unterminated string */
+ { 0, "a=\"World" }, /* Unterminated string */
+ { 0, "a=_abd_" }, /* Unquoted string not starting with alphabetic */
+ { 1, "a=2, n=012345678" }, /* Bad octal digit */
+ { 0, "n=0x28FG, a=3" }, /* Bad hex digit */
+ { 0, "n=145d, a=2" }, /* Bad decimal digit */
+ { 0, "n=0x8000000000000000, a=3" }, /* Hex overflow */
+ { 0, "n=922337203000000000d, a=2" }, /* Decimal overflow */
+ { 0, "a=2, n=1000000000000000000000" }, /* Octal overflow */
+ { 1, "@='hello'" }, /* Invalid name */
+ { 1, "n0123456789012345678901234567890123456789"
+ "0123456789012345678901234567890123456789"
+ "0123456789012345678901234567890123456789"
+ "0123456789012345678901234567890123456789=yes" }, /* Name too long */
+ { 0, ".n=3" }, /* Invalid name */
+ { 1, "fnord.fnord.=3" } /* Invalid name */
+};
+
+static int test_property_parse_error(int n)
+{
+ OSSL_METHOD_STORE *store;
+ OSSL_PROPERTY_LIST *p = NULL;
+ int r = 0;
+ const char *ps;
+
+ if (!TEST_ptr(store = ossl_method_store_new(NULL))
+ || !add_property_names("a", "n", NULL))
+ goto err;
+ ps = parse_error_tests[n].ps;
+ if (parse_error_tests[n].query) {
+ if (!TEST_ptr_null(p = ossl_parse_query(NULL, ps, 1)))
+ goto err;
+ } else if (!TEST_ptr_null(p = ossl_parse_property(NULL, ps))) {
+ goto err;
+ }
+ r = 1;
+ err:
+ ossl_property_free(p);
+ ossl_method_store_free(store);
+ return r;
+}
+
+static const struct {
+ const char *q_global;
+ const char *q_local;
+ const char *prop;
+} merge_tests[] = {
+ { "", "colour=blue", "colour=blue" },
+ { "colour=blue", "", "colour=blue" },
+ { "colour=red", "colour=blue", "colour=blue" },
+ { "clouds=pink, urn=red", "urn=blue, colour=green",
+ "urn=blue, colour=green, clouds=pink" },
+ { "pot=gold", "urn=blue", "pot=gold, urn=blue" },
+ { "night", "day", "day=yes, night=yes" },
+ { "day", "night", "day=yes, night=yes" },
+ { "", "", "" },
+ /*
+ * The following four leave 'day' unspecified in the query, and will match
+ * any definition
+ */
+ { "day=yes", "-day", "day=no" },
+ { "day=yes", "-day", "day=yes" },
+ { "day=yes", "-day", "day=arglebargle" },
+ { "day=yes", "-day", "pot=sesquioxidizing" },
+ { "day, night", "-night, day", "day=yes, night=no" },
+ { "-day", "day=yes", "day=yes" },
+};
+
+static int test_property_merge(int n)
+{
+ OSSL_METHOD_STORE *store;
+ OSSL_PROPERTY_LIST *q_global = NULL, *q_local = NULL;
+ OSSL_PROPERTY_LIST *q_combined = NULL, *prop = NULL;
+ int r = 0;
+
+ if (TEST_ptr(store = ossl_method_store_new(NULL))
+ && add_property_names("colour", "urn", "clouds", "pot", "day", "night",
+ NULL)
+ && TEST_ptr(prop = ossl_parse_property(NULL, merge_tests[n].prop))
+ && TEST_ptr(q_global = ossl_parse_query(NULL, merge_tests[n].q_global,
+ 0))
+ && TEST_ptr(q_local = ossl_parse_query(NULL, merge_tests[n].q_local, 0))
+ && TEST_ptr(q_combined = ossl_property_merge(q_local, q_global))
+ && TEST_int_ge(ossl_property_match_count(q_combined, prop), 0))
+ r = 1;
+ ossl_property_free(q_global);
+ ossl_property_free(q_local);
+ ossl_property_free(q_combined);
+ ossl_property_free(prop);
+ ossl_method_store_free(store);
+ return r;
+}
+
+static int test_property_defn_cache(void)
+{
+ OSSL_METHOD_STORE *store;
+ OSSL_PROPERTY_LIST *red = NULL, *blue = NULL, *blue2 = NULL;
+ int r;
+
+ r = TEST_ptr(store = ossl_method_store_new(NULL))
+ && add_property_names("red", "blue", NULL)
+ && TEST_ptr(red = ossl_parse_property(NULL, "red"))
+ && TEST_ptr(blue = ossl_parse_property(NULL, "blue"))
+ && TEST_ptr_ne(red, blue)
+ && TEST_true(ossl_prop_defn_set(NULL, "red", &red));
+
+ if (!r) {
+ ossl_property_free(red);
+ red = NULL;
+ ossl_property_free(blue);
+ blue = NULL;
+ }
+
+ r = r && TEST_true(ossl_prop_defn_set(NULL, "blue", &blue));
+ if (!r) {
+ ossl_property_free(blue);
+ blue = NULL;
+ }
+
+ r = r && TEST_ptr_eq(ossl_prop_defn_get(NULL, "red"), red)
+ && TEST_ptr_eq(ossl_prop_defn_get(NULL, "blue"), blue)
+ && TEST_ptr(blue2 = ossl_parse_property(NULL, "blue"))
+ && TEST_ptr_ne(blue2, blue)
+ && TEST_true(ossl_prop_defn_set(NULL, "blue", &blue2));
+ if (!r) {
+ ossl_property_free(blue2);
+ blue2 = NULL;
+ }
+
+ r = r && TEST_ptr_eq(blue2, blue)
+ && TEST_ptr_eq(ossl_prop_defn_get(NULL, "blue"), blue);
+
+ ossl_method_store_free(store);
+ return r;
+}
+
+static const struct {
+ const char *defn;
+ const char *query;
+ int e;
+} definition_tests[] = {
+ { "alpha", "alpha=yes", 1 },
+ { "alpha=no", "alpha", -1 },
+ { "alpha=1", "alpha=1", 1 },
+ { "alpha=2", "alpha=1",-1 },
+ { "alpha", "omega", -1 },
+ { "alpha", "?omega", 0 },
+ { "alpha", "?omega=1", 0 },
+ { "alpha", "?omega=no", 1 },
+ { "alpha", "?omega=yes", 0 },
+ { "alpha, omega", "?omega=yes", 1 },
+ { "alpha, omega", "?omega=no", 0 }
+};
+
+static int test_definition_compares(int n)
+{
+ OSSL_METHOD_STORE *store;
+ OSSL_PROPERTY_LIST *d = NULL, *q = NULL;
+ int r;
+
+ r = TEST_ptr(store = ossl_method_store_new(NULL))
+ && add_property_names("alpha", "omega", NULL)
+ && TEST_ptr(d = ossl_parse_property(NULL, definition_tests[n].defn))
+ && TEST_ptr(q = ossl_parse_query(NULL, definition_tests[n].query, 0))
+ && TEST_int_eq(ossl_property_match_count(q, d), definition_tests[n].e);
+
+ ossl_property_free(d);
+ ossl_property_free(q);
+ ossl_method_store_free(store);
+ return r;
+}
+
+static int test_register_deregister(void)
+{
+ static const struct {
+ int nid;
+ const char *prop;
+ char *impl;
+ } impls[] = {
+ { 6, "position=1", "a" },
+ { 6, "position=2", "b" },
+ { 6, "position=3", "c" },
+ { 6, "position=4", "d" },
+ };
+ size_t i;
+ int ret = 0;
+ OSSL_METHOD_STORE *store;
+ OSSL_PROVIDER prov = { 1 };
+
+ if (!TEST_ptr(store = ossl_method_store_new(NULL))
+ || !add_property_names("position", NULL))
+ goto err;
+
+ for (i = 0; i < OSSL_NELEM(impls); i++)
+ if (!TEST_true(ossl_method_store_add(store, &prov, impls[i].nid,
+ impls[i].prop, impls[i].impl,
+ &up_ref, &down_ref))) {
+ TEST_note("iteration %zd", i + 1);
+ goto err;
+ }
+
+ /* Deregister in a different order to registration */
+ for (i = 0; i < OSSL_NELEM(impls); i++) {
+ const size_t j = (1 + i * 3) % OSSL_NELEM(impls);
+ int nid = impls[j].nid;
+ void *impl = impls[j].impl;
+
+ if (!TEST_true(ossl_method_store_remove(store, nid, impl))
+ || !TEST_false(ossl_method_store_remove(store, nid, impl))) {
+ TEST_note("iteration %zd, position %zd", i + 1, j + 1);
+ goto err;
+ }
+ }
+
+ if (TEST_false(ossl_method_store_remove(store, impls[0].nid, impls[0].impl)))
+ ret = 1;
+err:
+ ossl_method_store_free(store);
+ return ret;
+}
+
+static int test_property(void)
+{
+ static OSSL_PROVIDER fake_provider1 = { 1 };
+ static OSSL_PROVIDER fake_provider2 = { 2 };
+ static const OSSL_PROVIDER *fake_prov1 = &fake_provider1;
+ static const OSSL_PROVIDER *fake_prov2 = &fake_provider2;
+ static const struct {
+ const OSSL_PROVIDER **prov;
+ int nid;
+ const char *prop;
+ char *impl;
+ } impls[] = {
+ { &fake_prov1, 1, "fast=no, colour=green", "a" },
+ { &fake_prov1, 1, "fast, colour=blue", "b" },
+ { &fake_prov1, 1, "", "-" },
+ { &fake_prov2, 9, "sky=blue, furry", "c" },
+ { &fake_prov2, 3, NULL, "d" },
+ { &fake_prov2, 6, "sky.colour=blue, sky=green, old.data", "e" },
+ };
+ static struct {
+ const OSSL_PROVIDER **prov;
+ int nid;
+ const char *prop;
+ char *expected;
+ } queries[] = {
+ { &fake_prov1, 1, "fast", "b" },
+ { &fake_prov1, 1, "fast=yes", "b" },
+ { &fake_prov1, 1, "fast=no, colour=green", "a" },
+ { &fake_prov1, 1, "colour=blue, fast", "b" },
+ { &fake_prov1, 1, "colour=blue", "b" },
+ { &fake_prov2, 9, "furry", "c" },
+ { &fake_prov2, 6, "sky.colour=blue", "e" },
+ { &fake_prov2, 6, "old.data", "e" },
+ { &fake_prov2, 9, "furry=yes, sky=blue", "c" },
+ { &fake_prov1, 1, "", "a" },
+ { &fake_prov2, 3, "", "d" },
+ };
+ OSSL_METHOD_STORE *store;
+ size_t i;
+ int ret = 0;
+ void *result;
+
+ if (!TEST_ptr(store = ossl_method_store_new(NULL))
+ || !add_property_names("fast", "colour", "sky", "furry", NULL))
+ goto err;
+
+ for (i = 0; i < OSSL_NELEM(impls); i++)
+ if (!TEST_true(ossl_method_store_add(store, *impls[i].prov,
+ impls[i].nid, impls[i].prop,
+ impls[i].impl,
+ &up_ref, &down_ref))) {
+ TEST_note("iteration %zd", i + 1);
+ goto err;
+ }
+ /*
+ * The first check of queries is with NULL given as provider. All
+ * queries are expected to succeed.
+ */
+ for (i = 0; i < OSSL_NELEM(queries); i++) {
+ const OSSL_PROVIDER *nullprov = NULL;
+ OSSL_PROPERTY_LIST *pq = NULL;
+
+ if (!TEST_true(ossl_method_store_fetch(store,
+ queries[i].nid, queries[i].prop,
+ &nullprov, &result))
+ || !TEST_str_eq((char *)result, queries[i].expected)) {
+ TEST_note("iteration %zd", i + 1);
+ ossl_property_free(pq);
+ goto err;
+ }
+ ossl_property_free(pq);
+ }
+ /*
+ * The second check of queries is with &address1 given as provider.
+ */
+ for (i = 0; i < OSSL_NELEM(queries); i++) {
+ OSSL_PROPERTY_LIST *pq = NULL;
+
+ result = NULL;
+ if (queries[i].prov == &fake_prov1) {
+ if (!TEST_true(ossl_method_store_fetch(store,
+ queries[i].nid,
+ queries[i].prop,
+ &fake_prov1, &result))
+ || !TEST_ptr_eq(fake_prov1, &fake_provider1)
+ || !TEST_str_eq((char *)result, queries[i].expected)) {
+ TEST_note("iteration %zd", i + 1);
+ ossl_property_free(pq);
+ goto err;
+ }
+ } else {
+ if (!TEST_false(ossl_method_store_fetch(store,
+ queries[i].nid,
+ queries[i].prop,
+ &fake_prov1, &result))
+ || !TEST_ptr_eq(fake_prov1, &fake_provider1)
+ || !TEST_ptr_null(result)) {
+ TEST_note("iteration %zd", i + 1);
+ ossl_property_free(pq);
+ goto err;
+ }
+ }
+ ossl_property_free(pq);
+ }
+ /*
+ * The third check of queries is with &address2 given as provider.
+ */
+ for (i = 0; i < OSSL_NELEM(queries); i++) {
+ OSSL_PROPERTY_LIST *pq = NULL;
+
+ result = NULL;
+ if (queries[i].prov == &fake_prov2) {
+ if (!TEST_true(ossl_method_store_fetch(store,
+ queries[i].nid,
+ queries[i].prop,
+ &fake_prov2, &result))
+ || !TEST_ptr_eq(fake_prov2, &fake_provider2)
+ || !TEST_str_eq((char *)result, queries[i].expected)) {
+ TEST_note("iteration %zd", i + 1);
+ ossl_property_free(pq);
+ goto err;
+ }
+ } else {
+ if (!TEST_false(ossl_method_store_fetch(store,
+ queries[i].nid,
+ queries[i].prop,
+ &fake_prov2, &result))
+ || !TEST_ptr_eq(fake_prov2, &fake_provider2)
+ || !TEST_ptr_null(result)) {
+ TEST_note("iteration %zd", i + 1);
+ ossl_property_free(pq);
+ goto err;
+ }
+ }
+ ossl_property_free(pq);
+ }
+ ret = 1;
+err:
+ ossl_method_store_free(store);
+ return ret;
+}
+
+static int test_query_cache_stochastic(void)
+{
+ const int max = 10000, tail = 10;
+ OSSL_METHOD_STORE *store;
+ int i, res = 0;
+ char buf[50];
+ void *result;
+ int errors = 0;
+ int v[10001];
+ OSSL_PROVIDER prov = { 1 };
+
+ if (!TEST_ptr(store = ossl_method_store_new(NULL))
+ || !add_property_names("n", NULL))
+ goto err;
+
+ for (i = 1; i <= max; i++) {
+ v[i] = 2 * i;
+ BIO_snprintf(buf, sizeof(buf), "n=%d\n", i);
+ if (!TEST_true(ossl_method_store_add(store, &prov, i, buf, "abc",
+ &up_ref, &down_ref))
+ || !TEST_true(ossl_method_store_cache_set(store, &prov, i,
+ buf, v + i,
+ &up_ref, &down_ref))
+ || !TEST_true(ossl_method_store_cache_set(store, &prov, i,
+ "n=1234", "miss",
+ &up_ref, &down_ref))) {
+ TEST_note("iteration %d", i);
+ goto err;
+ }
+ }
+ for (i = 1; i <= max; i++) {
+ BIO_snprintf(buf, sizeof(buf), "n=%d\n", i);
+ if (!ossl_method_store_cache_get(store, NULL, i, buf, &result)
+ || result != v + i)
+ errors++;
+ }
+ /* There is a tiny probability that this will fail when it shouldn't */
+ res = TEST_int_gt(errors, tail) && TEST_int_lt(errors, max - tail);
+
+err:
+ ossl_method_store_free(store);
+ return res;
+}
+
+static int test_fips_mode(void)
+{
+ int ret = 0;
+ OSSL_LIB_CTX *ctx = NULL;
+
+ if (!TEST_ptr(ctx = OSSL_LIB_CTX_new()))
+ goto err;
+
+ ret = TEST_true(EVP_set_default_properties(ctx, "default=yes,fips=yes"))
+ && TEST_true(EVP_default_properties_is_fips_enabled(ctx))
+ && TEST_true(EVP_set_default_properties(ctx, "fips=no,default=yes"))
+ && TEST_false(EVP_default_properties_is_fips_enabled(ctx))
+ && TEST_true(EVP_set_default_properties(ctx, "fips=no"))
+ && TEST_false(EVP_default_properties_is_fips_enabled(ctx))
+ && TEST_true(EVP_set_default_properties(ctx, "fips!=no"))
+ && TEST_true(EVP_default_properties_is_fips_enabled(ctx))
+ && TEST_true(EVP_set_default_properties(ctx, "fips=no"))
+ && TEST_false(EVP_default_properties_is_fips_enabled(ctx))
+ && TEST_true(EVP_set_default_properties(ctx, "fips=no,default=yes"))
+ && TEST_true(EVP_default_properties_enable_fips(ctx, 1))
+ && TEST_true(EVP_default_properties_is_fips_enabled(ctx))
+ && TEST_true(EVP_default_properties_enable_fips(ctx, 0))
+ && TEST_false(EVP_default_properties_is_fips_enabled(ctx));
+err:
+ OSSL_LIB_CTX_free(ctx);
+ return ret;
+}
+
+static struct {
+ const char *in;
+ const char *out;
+} to_string_tests[] = {
+ { "fips=yes", "fips=yes" },
+ { "fips!=yes", "fips!=yes" },
+ { "fips = yes", "fips=yes" },
+ { "fips", "fips=yes" },
+ { "fips=no", "fips=no" },
+ { "-fips", "-fips" },
+ { "?fips=yes", "?fips=yes" },
+ { "fips=yes,provider=fips", "fips=yes,provider=fips" },
+ { "fips = yes , provider = fips", "fips=yes,provider=fips" },
+ { "fips=yes,provider!=fips", "fips=yes,provider!=fips" },
+ { "fips=yes,?provider=fips", "fips=yes,?provider=fips" },
+ { "fips=yes,-provider", "fips=yes,-provider" },
+ /* foo is an unknown internal name */
+ { "foo=yes,fips=yes", "fips=yes"},
+ { "", "" },
+ { "fips=3", "fips=3" },
+ { "fips=-3", "fips=-3" },
+ { "provider='foo bar'", "provider='foo bar'" },
+ { "provider=\"foo bar'\"", "provider=\"foo bar'\"" },
+ { "provider=abc***", "provider='abc***'" },
+ { NULL, "" }
+};
+
+static int test_property_list_to_string(int i)
+{
+ OSSL_PROPERTY_LIST *pl = NULL;
+ int ret = 0;
+ size_t bufsize;
+ char *buf = NULL;
+
+ if (to_string_tests[i].in != NULL
+ && !TEST_ptr(pl = ossl_parse_query(NULL, to_string_tests[i].in, 1)))
+ goto err;
+ bufsize = ossl_property_list_to_string(NULL, pl, NULL, 0);
+ if (!TEST_size_t_gt(bufsize, 0))
+ goto err;
+ buf = OPENSSL_malloc(bufsize);
+ if (!TEST_ptr(buf)
+ || !TEST_size_t_eq(ossl_property_list_to_string(NULL, pl, buf,
+ bufsize),
+ bufsize)
+ || !TEST_str_eq(to_string_tests[i].out, buf)
+ || !TEST_size_t_eq(bufsize, strlen(to_string_tests[i].out) + 1))
+ goto err;
+
+ ret = 1;
+ err:
+ OPENSSL_free(buf);
+ ossl_property_free(pl);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_property_string);
+ ADD_TEST(test_property_query_value_create);
+ ADD_ALL_TESTS(test_property_parse, OSSL_NELEM(parser_tests));
+ ADD_ALL_TESTS(test_property_parse_error, OSSL_NELEM(parse_error_tests));
+ ADD_ALL_TESTS(test_property_merge, OSSL_NELEM(merge_tests));
+ ADD_TEST(test_property_defn_cache);
+ ADD_ALL_TESTS(test_definition_compares, OSSL_NELEM(definition_tests));
+ ADD_TEST(test_register_deregister);
+ ADD_TEST(test_property);
+ ADD_TEST(test_query_cache_stochastic);
+ ADD_TEST(test_fips_mode);
+ ADD_ALL_TESTS(test_property_list_to_string, OSSL_NELEM(to_string_tests));
+ return 1;
+}
diff --git a/test/prov_config_test.c b/test/prov_config_test.c
new file mode 100644
index 000000000000..b44ec78d8d24
--- /dev/null
+++ b/test/prov_config_test.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/evp.h>
+#include <openssl/conf.h>
+#include "testutil.h"
+
+static char *configfile = NULL;
+static char *recurseconfigfile = NULL;
+
+/*
+ * Test to make sure there are no leaks or failures from loading the config
+ * file twice.
+ */
+static int test_double_config(void)
+{
+ OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new();
+ int testresult = 0;
+ EVP_MD *sha256 = NULL;
+
+ if (!TEST_ptr(configfile))
+ return 0;
+ if (!TEST_ptr(ctx))
+ return 0;
+
+ if (!TEST_true(OSSL_LIB_CTX_load_config(ctx, configfile)))
+ return 0;
+ if (!TEST_true(OSSL_LIB_CTX_load_config(ctx, configfile)))
+ return 0;
+
+ /* Check we can actually fetch something */
+ sha256 = EVP_MD_fetch(ctx, "SHA2-256", NULL);
+ if (!TEST_ptr(sha256))
+ goto err;
+
+ testresult = 1;
+ err:
+ EVP_MD_free(sha256);
+ OSSL_LIB_CTX_free(ctx);
+ return testresult;
+}
+
+static int test_recursive_config(void)
+{
+ OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new();
+ int testresult = 0;
+ unsigned long err;
+
+ if (!TEST_ptr(recurseconfigfile))
+ goto err;
+
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ if (!TEST_false(OSSL_LIB_CTX_load_config(ctx, recurseconfigfile)))
+ goto err;
+
+ err = ERR_peek_error();
+ /* We expect to get a recursion error here */
+ if (ERR_GET_REASON(err) == CONF_R_RECURSIVE_SECTION_REFERENCE)
+ testresult = 1;
+ err:
+ OSSL_LIB_CTX_free(ctx);
+ return testresult;
+}
+
+OPT_TEST_DECLARE_USAGE("configfile\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(configfile = test_get_argument(0)))
+ return 0;
+
+ if (!TEST_ptr(recurseconfigfile = test_get_argument(1)))
+ return 0;
+
+ ADD_TEST(test_recursive_config);
+ ADD_TEST(test_double_config);
+ return 1;
+}
diff --git a/test/provfetchtest.c b/test/provfetchtest.c
new file mode 100644
index 000000000000..11a59ab63ed1
--- /dev/null
+++ b/test/provfetchtest.c
@@ -0,0 +1,297 @@
+/*
+ * Copyright 2021-2022 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/crypto.h>
+#include <openssl/provider.h>
+#include <openssl/decoder.h>
+#include <openssl/encoder.h>
+#include <openssl/store.h>
+#include <openssl/rand.h>
+#include <openssl/core_names.h>
+#include "testutil.h"
+
+static int dummy_decoder_decode(void *ctx, OSSL_CORE_BIO *cin, int selection,
+ OSSL_CALLBACK *object_cb, void *object_cbarg,
+ OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)
+{
+ return 0;
+}
+
+static const OSSL_DISPATCH dummy_decoder_functions[] = {
+ { OSSL_FUNC_DECODER_DECODE, (void (*)(void))dummy_decoder_decode },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM dummy_decoders[] = {
+ { "DUMMY", "provider=dummy,input=pem", dummy_decoder_functions },
+ { NULL, NULL, NULL }
+};
+
+static int dummy_encoder_encode(void *ctx, OSSL_CORE_BIO *out,
+ const void *obj_raw,
+ const OSSL_PARAM obj_abstract[], int selection,
+ OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg)
+{
+ return 0;
+}
+
+static const OSSL_DISPATCH dummy_encoder_functions[] = {
+ { OSSL_FUNC_DECODER_DECODE, (void (*)(void))dummy_encoder_encode },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM dummy_encoders[] = {
+ { "DUMMY", "provider=dummy,output=pem", dummy_encoder_functions },
+ { NULL, NULL, NULL }
+};
+
+static void *dummy_store_open(void *provctx, const char *uri)
+{
+ return NULL;
+}
+
+static int dummy_store_load(void *loaderctx, OSSL_CALLBACK *object_cb,
+ void *object_cbarg, OSSL_PASSPHRASE_CALLBACK *pw_cb,
+ void *pw_cbarg)
+{
+ return 0;
+}
+
+static int dumm_store_eof(void *loaderctx)
+{
+ return 0;
+}
+
+static int dummy_store_close(void *loaderctx)
+{
+ return 0;
+}
+
+static const OSSL_DISPATCH dummy_store_functions[] = {
+ { OSSL_FUNC_STORE_OPEN, (void (*)(void))dummy_store_open },
+ { OSSL_FUNC_STORE_LOAD, (void (*)(void))dummy_store_load },
+ { OSSL_FUNC_STORE_EOF, (void (*)(void))dumm_store_eof },
+ { OSSL_FUNC_STORE_CLOSE, (void (*)(void))dummy_store_close },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM dummy_store[] = {
+ { "DUMMY", "provider=dummy", dummy_store_functions },
+ { NULL, NULL, NULL }
+};
+
+static void *dummy_rand_newctx(void *provctx, void *parent,
+ const OSSL_DISPATCH *parent_calls)
+{
+ return provctx;
+}
+
+static void dummy_rand_freectx(void *vctx)
+{
+}
+
+static int dummy_rand_instantiate(void *vdrbg, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr, size_t pstr_len,
+ const OSSL_PARAM params[])
+{
+ return 1;
+}
+
+static int dummy_rand_uninstantiate(void *vdrbg)
+{
+ return 1;
+}
+
+static int dummy_rand_generate(void *vctx, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *addin, size_t addin_len)
+{
+ size_t i;
+
+ for (i = 0; i <outlen; i++)
+ out[i] = (unsigned char)(i & 0xff);
+
+ return 1;
+}
+
+static const OSSL_PARAM *dummy_rand_gettable_ctx_params(void *vctx, void *provctx)
+{
+ static const OSSL_PARAM known_gettable_ctx_params[] = {
+ OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL),
+ OSSL_PARAM_END
+ };
+ return known_gettable_ctx_params;
+}
+
+static int dummy_rand_get_ctx_params(void *vctx, OSSL_PARAM params[])
+{
+ OSSL_PARAM *p;
+
+ p = OSSL_PARAM_locate(params, OSSL_RAND_PARAM_MAX_REQUEST);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, INT_MAX))
+ return 0;
+
+ return 1;
+}
+
+static int dummy_rand_enable_locking(void *vtest)
+{
+ return 1;
+}
+
+static int dummy_rand_lock(void *vtest)
+{
+ return 1;
+}
+
+static void dummy_rand_unlock(void *vtest)
+{
+}
+
+static const OSSL_DISPATCH dummy_rand_functions[] = {
+ { OSSL_FUNC_RAND_NEWCTX, (void (*)(void))dummy_rand_newctx },
+ { OSSL_FUNC_RAND_FREECTX, (void (*)(void))dummy_rand_freectx },
+ { OSSL_FUNC_RAND_INSTANTIATE, (void (*)(void))dummy_rand_instantiate },
+ { OSSL_FUNC_RAND_UNINSTANTIATE, (void (*)(void))dummy_rand_uninstantiate },
+ { OSSL_FUNC_RAND_GENERATE, (void (*)(void))dummy_rand_generate },
+ { OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS,
+ (void(*)(void))dummy_rand_gettable_ctx_params },
+ { OSSL_FUNC_RAND_GET_CTX_PARAMS, (void(*)(void))dummy_rand_get_ctx_params },
+ { OSSL_FUNC_RAND_ENABLE_LOCKING, (void(*)(void))dummy_rand_enable_locking },
+ { OSSL_FUNC_RAND_LOCK, (void(*)(void))dummy_rand_lock },
+ { OSSL_FUNC_RAND_UNLOCK, (void(*)(void))dummy_rand_unlock },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM dummy_rand[] = {
+ { "DUMMY", "provider=dummy", dummy_rand_functions },
+ { NULL, NULL, NULL }
+};
+
+static const OSSL_ALGORITHM *dummy_query(void *provctx, int operation_id,
+ int *no_cache)
+{
+ *no_cache = 0;
+ switch (operation_id) {
+ case OSSL_OP_DECODER:
+ return dummy_decoders;
+ case OSSL_OP_ENCODER:
+ return dummy_encoders;
+ case OSSL_OP_STORE:
+ return dummy_store;
+ case OSSL_OP_RAND:
+ return dummy_rand;
+ }
+ return NULL;
+}
+
+static const OSSL_DISPATCH dummy_dispatch_table[] = {
+ { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void))dummy_query },
+ { OSSL_FUNC_PROVIDER_TEARDOWN, (void (*)(void))OSSL_LIB_CTX_free },
+ { 0, NULL }
+};
+
+static int dummy_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out,
+ void **provctx)
+{
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new_child(handle, in);
+ unsigned char buf[32];
+
+ *provctx = (void *)libctx;
+ *out = dummy_dispatch_table;
+
+ /*
+ * Do some work using the child libctx, to make sure this is possible from
+ * inside the init function.
+ */
+ if (RAND_bytes_ex(libctx, buf, sizeof(buf), 0) <= 0)
+ return 0;
+
+ return 1;
+}
+
+/*
+ * Try fetching and freeing various things.
+ * Test 0: Decoder
+ * Test 1: Encoder
+ * Test 2: Store loader
+ * Test 3: EVP_RAND
+ * Test 4-7: As above, but additionally with a query string
+ */
+static int fetch_test(int tst)
+{
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
+ OSSL_PROVIDER *dummyprov = NULL;
+ OSSL_PROVIDER *nullprov = NULL;
+ OSSL_DECODER *decoder = NULL;
+ OSSL_ENCODER *encoder = NULL;
+ OSSL_STORE_LOADER *loader = NULL;
+ int testresult = 0;
+ unsigned char buf[32];
+ int query = tst > 3;
+
+ if (!TEST_ptr(libctx))
+ goto err;
+
+ if (!TEST_true(OSSL_PROVIDER_add_builtin(libctx, "dummy-prov",
+ dummy_provider_init))
+ || !TEST_ptr(nullprov = OSSL_PROVIDER_load(libctx, "default"))
+ || !TEST_ptr(dummyprov = OSSL_PROVIDER_load(libctx, "dummy-prov")))
+ goto err;
+
+ switch (tst % 4) {
+ case 0:
+ decoder = OSSL_DECODER_fetch(libctx, "DUMMY",
+ query ? "provider=dummy" : NULL);
+ if (!TEST_ptr(decoder))
+ goto err;
+ break;
+ case 1:
+ encoder = OSSL_ENCODER_fetch(libctx, "DUMMY",
+ query ? "provider=dummy" : NULL);
+ if (!TEST_ptr(encoder))
+ goto err;
+ break;
+ case 2:
+ loader = OSSL_STORE_LOADER_fetch(libctx, "DUMMY",
+ query ? "provider=dummy" : NULL);
+ if (!TEST_ptr(loader))
+ goto err;
+ break;
+ case 3:
+ if (!TEST_true(RAND_set_DRBG_type(libctx, "DUMMY",
+ query ? "provider=dummy" : NULL,
+ NULL, NULL))
+ || !TEST_int_ge(RAND_bytes_ex(libctx, buf, sizeof(buf), 0), 1))
+ goto err;
+ break;
+ default:
+ goto err;
+ }
+
+ testresult = 1;
+ err:
+ OSSL_DECODER_free(decoder);
+ OSSL_ENCODER_free(encoder);
+ OSSL_STORE_LOADER_free(loader);
+ OSSL_PROVIDER_unload(dummyprov);
+ OSSL_PROVIDER_unload(nullprov);
+ OSSL_LIB_CTX_free(libctx);
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(fetch_test, 8);
+
+ return 1;
+}
diff --git a/test/provider_fallback_test.c b/test/provider_fallback_test.c
new file mode 100644
index 000000000000..5902f57c85e7
--- /dev/null
+++ b/test/provider_fallback_test.c
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stddef.h>
+#include <openssl/provider.h>
+#include <openssl/evp.h>
+#include "testutil.h"
+
+static int test_provider(OSSL_LIB_CTX *ctx)
+{
+ EVP_KEYMGMT *rsameth = NULL;
+ const OSSL_PROVIDER *prov = NULL;
+ int ok;
+
+ ok = TEST_true(OSSL_PROVIDER_available(ctx, "default"))
+ && TEST_ptr(rsameth = EVP_KEYMGMT_fetch(ctx, "RSA", NULL))
+ && TEST_ptr(prov = EVP_KEYMGMT_get0_provider(rsameth))
+ && TEST_str_eq(OSSL_PROVIDER_get0_name(prov), "default");
+
+ EVP_KEYMGMT_free(rsameth);
+ return ok;
+}
+
+static int test_fallback_provider(void)
+{
+ return test_provider(NULL);
+}
+
+static int test_explicit_provider(void)
+{
+ OSSL_LIB_CTX *ctx = NULL;
+ OSSL_PROVIDER *prov = NULL;
+ int ok;
+
+ ok = TEST_ptr(ctx = OSSL_LIB_CTX_new())
+ && TEST_ptr(prov = OSSL_PROVIDER_load(ctx, "default"))
+ && test_provider(ctx)
+ && TEST_true(OSSL_PROVIDER_unload(prov));
+
+ OSSL_LIB_CTX_free(ctx);
+ return ok;
+}
+
+
+int setup_tests(void)
+{
+ ADD_TEST(test_fallback_provider);
+ ADD_TEST(test_explicit_provider);
+ return 1;
+}
+
diff --git a/test/provider_internal_test.c b/test/provider_internal_test.c
new file mode 100644
index 000000000000..1fe8fb0cc5c4
--- /dev/null
+++ b/test/provider_internal_test.c
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2019-2023 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 <stddef.h>
+#include <openssl/crypto.h>
+#include "internal/provider.h"
+#include "testutil.h"
+
+extern OSSL_provider_init_fn PROVIDER_INIT_FUNCTION_NAME;
+
+static char buf[256];
+static OSSL_PARAM greeting_request[] = {
+ { "greeting", OSSL_PARAM_UTF8_STRING, buf, sizeof(buf), 0 },
+ { NULL, 0, NULL, 0, 0 }
+};
+
+static int test_provider(OSSL_PROVIDER *prov, const char *expected_greeting)
+{
+ const char *greeting = NULL;
+ int ret = 0;
+
+ ret =
+ TEST_true(ossl_provider_activate(prov, 1, 0))
+ && TEST_true(ossl_provider_get_params(prov, greeting_request))
+ && TEST_ptr(greeting = greeting_request[0].data)
+ && TEST_size_t_gt(greeting_request[0].data_size, 0)
+ && TEST_str_eq(greeting, expected_greeting)
+ && TEST_true(ossl_provider_deactivate(prov, 1));
+
+ TEST_info("Got this greeting: %s\n", greeting);
+ ossl_provider_free(prov);
+ return ret;
+}
+
+static const char *expected_greeting1(const char *name)
+{
+ static char expected_greeting[256] = "";
+
+ BIO_snprintf(expected_greeting, sizeof(expected_greeting),
+ "Hello OpenSSL %.20s, greetings from %s!",
+ OPENSSL_VERSION_STR, name);
+
+ return expected_greeting;
+}
+
+static int test_builtin_provider(void)
+{
+ const char *name = "p_test_builtin";
+ OSSL_PROVIDER *prov = NULL;
+ int ret;
+
+ /*
+ * We set properties that we know the providers we are using don't have.
+ * This should mean that the p_test provider will fail any fetches - which
+ * is something we test inside the provider.
+ */
+ EVP_set_default_properties(NULL, "fips=yes");
+
+ ret =
+ TEST_ptr(prov =
+ ossl_provider_new(NULL, name, PROVIDER_INIT_FUNCTION_NAME, 0))
+ && test_provider(prov, expected_greeting1(name));
+
+ EVP_set_default_properties(NULL, "");
+
+ return ret;
+}
+
+#ifndef NO_PROVIDER_MODULE
+static int test_loaded_provider(void)
+{
+ const char *name = "p_test";
+ OSSL_PROVIDER *prov = NULL;
+
+ return
+ TEST_ptr(prov = ossl_provider_new(NULL, name, NULL, 0))
+ && test_provider(prov, expected_greeting1(name));
+}
+
+# ifndef OPENSSL_NO_AUTOLOAD_CONFIG
+static int test_configured_provider(void)
+{
+ const char *name = "p_test_configured";
+ OSSL_PROVIDER *prov = NULL;
+ /* This MUST match the config file */
+ const char *expected_greeting =
+ "Hello OpenSSL, greetings from Test Provider";
+
+ return
+ TEST_ptr(prov = ossl_provider_find(NULL, name, 0))
+ && test_provider(prov, expected_greeting);
+}
+# endif
+#endif
+
+static int test_cache_flushes(void)
+{
+ OSSL_LIB_CTX *ctx;
+ OSSL_PROVIDER *prov = NULL;
+ EVP_MD *md = NULL;
+ int ret = 0;
+
+ if (!TEST_ptr(ctx = OSSL_LIB_CTX_new())
+ || !TEST_ptr(prov = OSSL_PROVIDER_load(ctx, "default"))
+ || !TEST_true(OSSL_PROVIDER_available(ctx, "default"))
+ || !TEST_ptr(md = EVP_MD_fetch(ctx, "SHA256", NULL)))
+ goto err;
+ EVP_MD_free(md);
+ md = NULL;
+ OSSL_PROVIDER_unload(prov);
+ prov = NULL;
+
+ if (!TEST_false(OSSL_PROVIDER_available(ctx, "default")))
+ goto err;
+
+ if (!TEST_ptr_null(md = EVP_MD_fetch(ctx, "SHA256", NULL))) {
+ const char *provname = OSSL_PROVIDER_get0_name(EVP_MD_get0_provider(md));
+
+ if (OSSL_PROVIDER_available(NULL, provname))
+ TEST_info("%s provider is available\n", provname);
+ else
+ TEST_info("%s provider is not available\n", provname);
+ }
+
+ ret = 1;
+ err:
+ OSSL_PROVIDER_unload(prov);
+ EVP_MD_free(md);
+ OSSL_LIB_CTX_free(ctx);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_builtin_provider);
+#ifndef NO_PROVIDER_MODULE
+ ADD_TEST(test_loaded_provider);
+# ifndef OPENSSL_NO_AUTOLOAD_CONFIG
+ ADD_TEST(test_configured_provider);
+# endif
+#endif
+ ADD_TEST(test_cache_flushes);
+ return 1;
+}
+
diff --git a/test/provider_internal_test.cnf.in b/test/provider_internal_test.cnf.in
new file mode 100644
index 000000000000..16c555c84494
--- /dev/null
+++ b/test/provider_internal_test.cnf.in
@@ -0,0 +1,16 @@
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+{- use platform -}
+openssl_conf = openssl_init
+
+[openssl_init]
+providers = providers
+
+[providers]
+p_test_configured = p_test_configured
+
+[p_test_configured]
+module = {- platform->dso('p_test') -}
+activate = 1
+greeting = Hello OpenSSL, greetings from Test Provider
diff --git a/test/provider_pkey_test.c b/test/provider_pkey_test.c
new file mode 100644
index 000000000000..249e9babcfa8
--- /dev/null
+++ b/test/provider_pkey_test.c
@@ -0,0 +1,308 @@
+/*
+ * Copyright 2021-2022 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 <stddef.h>
+#include <string.h>
+#include <openssl/provider.h>
+#include <openssl/params.h>
+#include <openssl/core_names.h>
+#include <openssl/evp.h>
+#include <openssl/store.h>
+#include "testutil.h"
+#include "fake_rsaprov.h"
+
+static OSSL_LIB_CTX *libctx = NULL;
+
+/* Fetch SIGNATURE method using a libctx and propq */
+static int fetch_sig(OSSL_LIB_CTX *ctx, const char *alg, const char *propq,
+ OSSL_PROVIDER *expected_prov)
+{
+ OSSL_PROVIDER *prov;
+ EVP_SIGNATURE *sig = EVP_SIGNATURE_fetch(ctx, "RSA", propq);
+ int ret = 0;
+
+ if (!TEST_ptr(sig))
+ return 0;
+
+ if (!TEST_ptr(prov = EVP_SIGNATURE_get0_provider(sig)))
+ goto end;
+
+ if (!TEST_ptr_eq(prov, expected_prov)) {
+ TEST_info("Fetched provider: %s, Expected provider: %s",
+ OSSL_PROVIDER_get0_name(prov),
+ OSSL_PROVIDER_get0_name(expected_prov));
+ goto end;
+ }
+
+ ret = 1;
+end:
+ EVP_SIGNATURE_free(sig);
+ return ret;
+}
+
+
+static int test_pkey_sig(void)
+{
+ OSSL_PROVIDER *deflt = NULL;
+ OSSL_PROVIDER *fake_rsa = NULL;
+ int i, ret = 0;
+ EVP_PKEY *pkey = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+
+ if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx)))
+ return 0;
+
+ if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default")))
+ goto end;
+
+ /* Do a direct fetch to see it works */
+ if (!TEST_true(fetch_sig(libctx, "RSA", "provider=fake-rsa", fake_rsa))
+ || !TEST_true(fetch_sig(libctx, "RSA", "?provider=fake-rsa", fake_rsa)))
+ goto end;
+
+ /* Construct a pkey using precise propq to use our provider */
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA",
+ "provider=fake-rsa"))
+ || !TEST_true(EVP_PKEY_fromdata_init(ctx))
+ || !TEST_true(EVP_PKEY_fromdata(ctx, &pkey, EVP_PKEY_KEYPAIR, NULL))
+ || !TEST_ptr(pkey))
+ goto end;
+
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+
+ /* try exercising signature_init ops a few times */
+ for (i = 0; i < 3; i++) {
+ size_t siglen;
+
+ /*
+ * Create a signing context for our pkey with optional propq.
+ * The sign init should pick both keymgmt and signature from
+ * fake-rsa as the key is not exportable.
+ */
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey,
+ "?provider=default")))
+ goto end;
+
+ /*
+ * If this picks the wrong signature without realizing it
+ * we can get a segfault or some internal error. At least watch
+ * whether fake-rsa sign_init is is exercised by calling sign.
+ */
+ if (!TEST_int_eq(EVP_PKEY_sign_init(ctx), 1))
+ goto end;
+
+ if (!TEST_int_eq(EVP_PKEY_sign(ctx, NULL, &siglen, NULL, 0), 1)
+ || !TEST_size_t_eq(siglen, 256))
+ goto end;
+
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+ }
+
+ ret = 1;
+
+end:
+ fake_rsa_finish(fake_rsa);
+ OSSL_PROVIDER_unload(deflt);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static int test_alternative_keygen_init(void)
+{
+ EVP_PKEY_CTX *ctx = NULL;
+ OSSL_PROVIDER *deflt = NULL;
+ OSSL_PROVIDER *fake_rsa = NULL;
+ const OSSL_PROVIDER *provider;
+ const char *provname;
+ int ret = 0;
+
+ if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default")))
+ goto end;
+
+ /* first try without the fake RSA provider loaded */
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", NULL)))
+ goto end;
+
+ if (!TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0))
+ goto end;
+
+ if (!TEST_ptr(provider = EVP_PKEY_CTX_get0_provider(ctx)))
+ goto end;
+
+ if (!TEST_ptr(provname = OSSL_PROVIDER_get0_name(provider)))
+ goto end;
+
+ if (!TEST_str_eq(provname, "default"))
+ goto end;
+
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+
+ /* now load fake RSA and try again */
+ if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx)))
+ return 0;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA",
+ "?provider=fake-rsa")))
+ goto end;
+
+ if (!TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0))
+ goto end;
+
+ if (!TEST_ptr(provider = EVP_PKEY_CTX_get0_provider(ctx)))
+ goto end;
+
+ if (!TEST_ptr(provname = OSSL_PROVIDER_get0_name(provider)))
+ goto end;
+
+ if (!TEST_str_eq(provname, "fake-rsa"))
+ goto end;
+
+ ret = 1;
+
+end:
+ fake_rsa_finish(fake_rsa);
+ OSSL_PROVIDER_unload(deflt);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
+}
+
+static int test_pkey_eq(void)
+{
+ OSSL_PROVIDER *deflt = NULL;
+ OSSL_PROVIDER *fake_rsa = NULL;
+ EVP_PKEY *pkey_fake = NULL;
+ EVP_PKEY *pkey_dflt = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ OSSL_PARAM *params = NULL;
+ int ret = 0;
+
+ if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx)))
+ return 0;
+
+ if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default")))
+ goto end;
+
+ /* Construct a public key for fake-rsa */
+ if (!TEST_ptr(params = fake_rsa_key_params(0))
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA",
+ "provider=fake-rsa"))
+ || !TEST_true(EVP_PKEY_fromdata_init(ctx))
+ || !TEST_true(EVP_PKEY_fromdata(ctx, &pkey_fake, EVP_PKEY_PUBLIC_KEY,
+ params))
+ || !TEST_ptr(pkey_fake))
+ goto end;
+
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+ OSSL_PARAM_free(params);
+ params = NULL;
+
+ /* Construct a public key for default */
+ if (!TEST_ptr(params = fake_rsa_key_params(0))
+ || !TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA",
+ "provider=default"))
+ || !TEST_true(EVP_PKEY_fromdata_init(ctx))
+ || !TEST_true(EVP_PKEY_fromdata(ctx, &pkey_dflt, EVP_PKEY_PUBLIC_KEY,
+ params))
+ || !TEST_ptr(pkey_dflt))
+ goto end;
+
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+ OSSL_PARAM_free(params);
+ params = NULL;
+
+ /* now test for equality */
+ if (!TEST_int_eq(EVP_PKEY_eq(pkey_fake, pkey_dflt), 1))
+ goto end;
+
+ ret = 1;
+end:
+ fake_rsa_finish(fake_rsa);
+ OSSL_PROVIDER_unload(deflt);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey_fake);
+ EVP_PKEY_free(pkey_dflt);
+ OSSL_PARAM_free(params);
+ return ret;
+}
+
+static int test_pkey_store(int idx)
+{
+ OSSL_PROVIDER *deflt = NULL;
+ OSSL_PROVIDER *fake_rsa = NULL;
+ int ret = 0;
+ EVP_PKEY *pkey = NULL;
+ OSSL_STORE_LOADER *loader = NULL;
+ OSSL_STORE_CTX *ctx = NULL;
+ OSSL_STORE_INFO *info;
+ const char *propq = idx == 0 ? "?provider=fake-rsa"
+ : "?provider=default";
+
+ /* It's important to load the default provider first for this test */
+ if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default")))
+ goto end;
+
+ if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx)))
+ goto end;
+
+ if (!TEST_ptr(loader = OSSL_STORE_LOADER_fetch(libctx, "fake_rsa",
+ propq)))
+ goto end;
+
+ OSSL_STORE_LOADER_free(loader);
+
+ if (!TEST_ptr(ctx = OSSL_STORE_open_ex("fake_rsa:test", libctx, propq,
+ NULL, NULL, NULL, NULL, NULL)))
+ goto end;
+
+ while (!OSSL_STORE_eof(ctx)
+ && (info = OSSL_STORE_load(ctx)) != NULL
+ && pkey == NULL) {
+ if (OSSL_STORE_INFO_get_type(info) == OSSL_STORE_INFO_PKEY)
+ pkey = OSSL_STORE_INFO_get1_PKEY(info);
+ OSSL_STORE_INFO_free(info);
+ info = NULL;
+ }
+
+ if (!TEST_ptr(pkey) || !TEST_int_eq(EVP_PKEY_is_a(pkey, "RSA"), 1))
+ goto end;
+
+ ret = 1;
+
+end:
+ fake_rsa_finish(fake_rsa);
+ OSSL_PROVIDER_unload(deflt);
+ OSSL_STORE_close(ctx);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ libctx = OSSL_LIB_CTX_new();
+ if (libctx == NULL)
+ return 0;
+
+ ADD_TEST(test_pkey_sig);
+ ADD_TEST(test_alternative_keygen_init);
+ ADD_TEST(test_pkey_eq);
+ ADD_ALL_TESTS(test_pkey_store, 2);
+
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OSSL_LIB_CTX_free(libctx);
+}
diff --git a/test/provider_status_test.c b/test/provider_status_test.c
new file mode 100644
index 000000000000..551277c8e0b2
--- /dev/null
+++ b/test/provider_status_test.c
@@ -0,0 +1,245 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stddef.h>
+#include <string.h>
+#include <openssl/provider.h>
+#include <openssl/params.h>
+#include <openssl/core_names.h>
+#include <openssl/self_test.h>
+#include <openssl/evp.h>
+#include "testutil.h"
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_PROVIDER_NAME,
+ OPT_CONFIG_FILE,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+struct self_test_arg {
+ int count;
+};
+
+static OSSL_LIB_CTX *libctx = NULL;
+static char *provider_name = NULL;
+static struct self_test_arg self_test_args = { 0 };
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "provider_name", OPT_PROVIDER_NAME, 's',
+ "The name of the provider to load" },
+ { "config", OPT_CONFIG_FILE, '<',
+ "The configuration file to use for the libctx" },
+ { NULL }
+ };
+ return test_options;
+}
+
+static int self_test_events(const OSSL_PARAM params[], void *arg,
+ const char *title, int corrupt)
+{
+ struct self_test_arg *args = arg;
+ const OSSL_PARAM *p = NULL;
+ const char *phase = NULL, *type = NULL, *desc = NULL;
+ int ret = 0;
+
+ if (args->count == 0)
+ BIO_printf(bio_out, "\n%s\n", title);
+ args->count++;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_PHASE);
+ if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
+ goto err;
+ phase = (const char *)p->data;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_DESC);
+ if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
+ goto err;
+ desc = (const char *)p->data;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_TYPE);
+ if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
+ goto err;
+ type = (const char *)p->data;
+
+ if (strcmp(phase, OSSL_SELF_TEST_PHASE_START) == 0)
+ BIO_printf(bio_out, "%s : (%s) : ", desc, type);
+ else if (strcmp(phase, OSSL_SELF_TEST_PHASE_PASS) == 0
+ || strcmp(phase, OSSL_SELF_TEST_PHASE_FAIL) == 0)
+ BIO_printf(bio_out, "%s\n", phase);
+ /*
+ * The self test code will internally corrupt the KAT test result if an
+ * error is returned during the corrupt phase.
+ */
+ if (corrupt && strcmp(phase, OSSL_SELF_TEST_PHASE_CORRUPT) == 0)
+ goto err;
+ ret = 1;
+err:
+ return ret;
+}
+
+static int self_test_on_demand_fail(const OSSL_PARAM params[], void *arg)
+{
+ return self_test_events(params, arg, "On Demand Failure", 1);
+}
+
+static int self_test_on_demand(const OSSL_PARAM params[], void *arg)
+{
+ return self_test_events(params, arg, "On Demand", 0);
+}
+
+static int self_test_on_load(const OSSL_PARAM params[], void *arg)
+{
+ return self_test_events(params, arg, "On Loading", 0);
+}
+
+static int get_provider_params(const OSSL_PROVIDER *prov)
+{
+ int ret = 0;
+ OSSL_PARAM params[5];
+ char *name, *version, *buildinfo;
+ int status;
+ const OSSL_PARAM *gettable, *p;
+
+ if (!TEST_ptr(gettable = OSSL_PROVIDER_gettable_params(prov))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_NAME))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_VERSION))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_STATUS))
+ || !TEST_ptr(p = OSSL_PARAM_locate_const(gettable, OSSL_PROV_PARAM_BUILDINFO)))
+ goto end;
+
+ params[0] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_NAME, &name, 0);
+ params[1] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_VERSION,
+ &version, 0);
+ params[2] = OSSL_PARAM_construct_int(OSSL_PROV_PARAM_STATUS, &status);
+ params[3] = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_BUILDINFO,
+ &buildinfo, 0);
+ params[4] = OSSL_PARAM_construct_end();
+ OSSL_PARAM_set_all_unmodified(params);
+ if (!TEST_true(OSSL_PROVIDER_get_params(prov, params)))
+ goto end;
+ if (!TEST_true(OSSL_PARAM_modified(params + 0))
+ || !TEST_true(OSSL_PARAM_modified(params + 1))
+ || !TEST_true(OSSL_PARAM_modified(params + 2))
+ || !TEST_true(OSSL_PARAM_modified(params + 3))
+ || !TEST_true(status == 1))
+ goto end;
+
+ ret = 1;
+end:
+ return ret;
+}
+
+static int test_provider_status(void)
+{
+ int ret = 0;
+ unsigned int status = 0;
+ OSSL_PROVIDER *prov = NULL;
+ OSSL_PARAM params[2];
+ EVP_MD *fetch = NULL;
+
+ if (!TEST_ptr(prov = OSSL_PROVIDER_load(libctx, provider_name)))
+ goto err;
+ if (!get_provider_params(prov))
+ goto err;
+
+ /* Test that the provider status is ok */
+ params[0] = OSSL_PARAM_construct_uint(OSSL_PROV_PARAM_STATUS, &status);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!TEST_true(OSSL_PROVIDER_get_params(prov, params))
+ || !TEST_true(status == 1))
+ goto err;
+ if (!TEST_ptr(fetch = EVP_MD_fetch(libctx, "SHA256", NULL)))
+ goto err;
+ EVP_MD_free(fetch);
+ fetch = NULL;
+
+ /* Test that the provider self test is ok */
+ self_test_args.count = 0;
+ OSSL_SELF_TEST_set_callback(libctx, self_test_on_demand, &self_test_args);
+ if (!TEST_true(OSSL_PROVIDER_self_test(prov)))
+ goto err;
+
+ /* Setup a callback that corrupts the self tests and causes status failures */
+ self_test_args.count = 0;
+ OSSL_SELF_TEST_set_callback(libctx, self_test_on_demand_fail, &self_test_args);
+ if (!TEST_false(OSSL_PROVIDER_self_test(prov)))
+ goto err;
+ if (!TEST_true(OSSL_PROVIDER_get_params(prov, params))
+ || !TEST_uint_eq(status, 0))
+ goto err;
+ if (!TEST_ptr_null(fetch = EVP_MD_fetch(libctx, "SHA256", NULL)))
+ goto err;
+
+ ret = 1;
+err:
+ EVP_MD_free(fetch);
+ OSSL_PROVIDER_unload(prov);
+ return ret;
+}
+
+static int test_provider_gettable_params(void)
+{
+ OSSL_PROVIDER *prov;
+ int ret;
+
+ if (!TEST_ptr(prov = OSSL_PROVIDER_load(libctx, provider_name)))
+ return 0;
+ ret = get_provider_params(prov);
+ OSSL_PROVIDER_unload(prov);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+ char *config_file = NULL;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_CONFIG_FILE:
+ config_file = opt_arg();
+ break;
+ case OPT_PROVIDER_NAME:
+ provider_name = opt_arg();
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+
+ libctx = OSSL_LIB_CTX_new();
+ if (libctx == NULL)
+ return 0;
+
+ if (strcmp(provider_name, "fips") == 0) {
+ self_test_args.count = 0;
+ OSSL_SELF_TEST_set_callback(libctx, self_test_on_load, &self_test_args);
+ if (!OSSL_LIB_CTX_load_config(libctx, config_file)) {
+ opt_printf_stderr("Failed to load config\n");
+ return 0;
+ }
+ ADD_TEST(test_provider_status);
+ } else {
+ ADD_TEST(test_provider_gettable_params);
+ }
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OSSL_LIB_CTX_free(libctx);
+}
diff --git a/test/provider_test.c b/test/provider_test.c
new file mode 100644
index 000000000000..b2e0a5da716f
--- /dev/null
+++ b/test/provider_test.c
@@ -0,0 +1,270 @@
+/*
+ * Copyright 2019-2022 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 <stddef.h>
+#include <openssl/provider.h>
+#include "testutil.h"
+
+extern OSSL_provider_init_fn PROVIDER_INIT_FUNCTION_NAME;
+
+static char buf[256];
+static OSSL_PARAM greeting_request[] = {
+ { "greeting", OSSL_PARAM_UTF8_STRING, buf, sizeof(buf) },
+ { NULL, 0, NULL, 0, 0 }
+};
+
+static unsigned int digestsuccess = 0;
+static OSSL_PARAM digest_check[] = {
+ { "digest-check", OSSL_PARAM_UNSIGNED_INTEGER, &digestsuccess,
+ sizeof(digestsuccess) },
+ { NULL, 0, NULL, 0, 0 }
+};
+
+static unsigned int stopsuccess = 0;
+static OSSL_PARAM stop_property_mirror[] = {
+ { "stop-property-mirror", OSSL_PARAM_UNSIGNED_INTEGER, &stopsuccess,
+ sizeof(stopsuccess) },
+ { NULL, 0, NULL, 0, 0 }
+};
+
+static int test_provider(OSSL_LIB_CTX **libctx, const char *name,
+ OSSL_PROVIDER *legacy)
+{
+ OSSL_PROVIDER *prov = NULL;
+ const char *greeting = NULL;
+ char expected_greeting[256];
+ int ok = 0;
+ long err;
+ int dolegacycheck = (legacy != NULL);
+ OSSL_PROVIDER *deflt = NULL, *base = NULL;
+
+ BIO_snprintf(expected_greeting, sizeof(expected_greeting),
+ "Hello OpenSSL %.20s, greetings from %s!",
+ OPENSSL_VERSION_STR, name);
+
+
+ /*
+ * We set properties that we know the providers we are using don't have.
+ * This should mean that the p_test provider will fail any fetches - which
+ * is something we test inside the provider.
+ */
+ EVP_set_default_properties(*libctx, "fips=yes");
+ /*
+ * Check that it is possible to have a built-in provider mirrored in
+ * a child lib ctx.
+ */
+ if (!TEST_ptr(base = OSSL_PROVIDER_load(*libctx, "base")))
+ goto err;
+ if (!TEST_ptr(prov = OSSL_PROVIDER_load(*libctx, name)))
+ goto err;
+
+ /*
+ * Once the provider is loaded we clear the default properties and fetches
+ * should start working again.
+ */
+ EVP_set_default_properties(*libctx, "");
+ if (dolegacycheck) {
+ if (!TEST_true(OSSL_PROVIDER_get_params(prov, digest_check))
+ || !TEST_true(digestsuccess))
+ goto err;
+
+ /*
+ * Check that a provider can prevent property mirroring if it sets its
+ * own properties explicitly
+ */
+ if (!TEST_true(OSSL_PROVIDER_get_params(prov, stop_property_mirror))
+ || !TEST_true(stopsuccess))
+ goto err;
+ EVP_set_default_properties(*libctx, "fips=yes");
+ if (!TEST_true(OSSL_PROVIDER_get_params(prov, digest_check))
+ || !TEST_true(digestsuccess))
+ goto err;
+ EVP_set_default_properties(*libctx, "");
+ }
+ if (!TEST_true(OSSL_PROVIDER_get_params(prov, greeting_request))
+ || !TEST_ptr(greeting = greeting_request[0].data)
+ || !TEST_size_t_gt(greeting_request[0].data_size, 0)
+ || !TEST_str_eq(greeting, expected_greeting))
+ goto err;
+
+ /* Make sure we got the error we were expecting */
+ err = ERR_peek_last_error();
+ if (!TEST_int_gt(err, 0)
+ || !TEST_int_eq(ERR_GET_REASON(err), 1))
+ goto err;
+
+ OSSL_PROVIDER_unload(legacy);
+ legacy = NULL;
+
+ if (dolegacycheck) {
+ /* Legacy provider should also be unloaded from child libctx */
+ if (!TEST_true(OSSL_PROVIDER_get_params(prov, digest_check))
+ || !TEST_false(digestsuccess))
+ goto err;
+ /*
+ * Loading the legacy provider again should make it available again in
+ * the child libctx. Loading and unloading the default provider should
+ * have no impact on the child because the child loads it explicitly
+ * before this point.
+ */
+ legacy = OSSL_PROVIDER_load(*libctx, "legacy");
+ deflt = OSSL_PROVIDER_load(*libctx, "default");
+ if (!TEST_ptr(deflt)
+ || !TEST_true(OSSL_PROVIDER_available(*libctx, "default")))
+ goto err;
+ OSSL_PROVIDER_unload(deflt);
+ deflt = NULL;
+ if (!TEST_ptr(legacy)
+ || !TEST_false(OSSL_PROVIDER_available(*libctx, "default"))
+ || !TEST_true(OSSL_PROVIDER_get_params(prov, digest_check))
+ || !TEST_true(digestsuccess))
+ goto err;
+ OSSL_PROVIDER_unload(legacy);
+ legacy = NULL;
+ }
+
+ if (!TEST_true(OSSL_PROVIDER_unload(base)))
+ goto err;
+ base = NULL;
+ if (!TEST_true(OSSL_PROVIDER_unload(prov)))
+ goto err;
+ prov = NULL;
+
+ /*
+ * We must free the libctx to force the provider to really be unloaded from
+ * memory
+ */
+ OSSL_LIB_CTX_free(*libctx);
+ *libctx = NULL;
+
+ /* We print out all the data to make sure it can still be accessed */
+ ERR_print_errors_fp(stderr);
+ ok = 1;
+ err:
+ OSSL_PROVIDER_unload(base);
+ OSSL_PROVIDER_unload(deflt);
+ OSSL_PROVIDER_unload(legacy);
+ legacy = NULL;
+ OSSL_PROVIDER_unload(prov);
+ OSSL_LIB_CTX_free(*libctx);
+ *libctx = NULL;
+ return ok;
+}
+
+static int test_builtin_provider(void)
+{
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
+ const char *name = "p_test_builtin";
+ int ok;
+
+ ok =
+ TEST_ptr(libctx)
+ && TEST_true(OSSL_PROVIDER_add_builtin(libctx, name,
+ PROVIDER_INIT_FUNCTION_NAME))
+ && test_provider(&libctx, name, NULL);
+
+ OSSL_LIB_CTX_free(libctx);
+
+ return ok;
+}
+
+/* Test relies on fetching the MD4 digest from the legacy provider */
+#ifndef OPENSSL_NO_MD4
+static int test_builtin_provider_with_child(void)
+{
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
+ const char *name = "p_test";
+ OSSL_PROVIDER *legacy;
+
+ if (!TEST_ptr(libctx))
+ return 0;
+
+ legacy = OSSL_PROVIDER_load(libctx, "legacy");
+ if (legacy == NULL) {
+ /*
+ * In this case we assume we've been built with "no-legacy" and skip
+ * this test (there is no OPENSSL_NO_LEGACY)
+ */
+ OSSL_LIB_CTX_free(libctx);
+ return 1;
+ }
+
+ if (!TEST_true(OSSL_PROVIDER_add_builtin(libctx, name,
+ PROVIDER_INIT_FUNCTION_NAME))) {
+ OSSL_LIB_CTX_free(libctx);
+ return 0;
+ }
+
+ /* test_provider will free libctx and unload legacy as part of the test */
+ return test_provider(&libctx, name, legacy);
+}
+#endif
+
+#ifndef NO_PROVIDER_MODULE
+static int test_loaded_provider(void)
+{
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
+ const char *name = "p_test";
+
+ if (!TEST_ptr(libctx))
+ return 0;
+
+ /* test_provider will free libctx as part of the test */
+ return test_provider(&libctx, name, NULL);
+}
+#endif
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_LOADED,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "loaded", OPT_LOADED, '-', "Run test with a loaded provider" },
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+ int loaded = 0;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_TEST_CASES:
+ break;
+ case OPT_LOADED:
+ loaded = 1;
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ if (!loaded) {
+ ADD_TEST(test_builtin_provider);
+#ifndef OPENSSL_NO_MD4
+ ADD_TEST(test_builtin_provider_with_child);
+#endif
+ }
+#ifndef NO_PROVIDER_MODULE
+ else {
+ ADD_TEST(test_loaded_provider);
+ }
+#endif
+ return 1;
+}
+
diff --git a/test/proxy.cnf b/test/proxy.cnf
new file mode 100644
index 000000000000..cfb862cbda21
--- /dev/null
+++ b/test/proxy.cnf
@@ -0,0 +1,60 @@
+
+## Config file for proxy certificate testing.
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+[ req ]
+distinguished_name = req_distinguished_name_p1
+encrypt_rsa_key = no
+default_md = sha256
+
+[ req_distinguished_name_p1 ]
+countryName = Country Name (2 letter code)
+countryName_value = AU
+organizationName = Organization Name (eg, company)
+organizationName_value = Dodgy Brothers
+0.commonName = Common Name (eg, YOUR name)
+0.commonName_value = Brother 1
+1.commonName = Common Name (eg, YOUR name)
+1.commonName_value = Brother 2
+2.commonName = Common Name (eg, YOUR name)
+2.commonName_value = Proxy 1
+
+[ proxy ]
+basicConstraints = CA:FALSE
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid,issuer:always
+proxyCertInfo = critical,language:id-ppl-anyLanguage,pathlen:1,policy:text:AB
+
+####################################################################
+
+[ proxy2_req ]
+distinguished_name = req_distinguished_name_p2
+encrypt_rsa_key = no
+default_md = sha256
+
+[ req_distinguished_name_p2 ]
+countryName = Country Name (2 letter code)
+countryName_value = AU
+organizationName = Organization Name (eg, company)
+organizationName_value = Dodgy Brothers
+0.commonName = Common Name (eg, YOUR name)
+0.commonName_value = Brother 1
+1.commonName = Common Name (eg, YOUR name)
+1.commonName_value = Brother 2
+2.commonName = Common Name (eg, YOUR name)
+2.commonName_value = Proxy 1
+3.commonName = Common Name (eg, YOUR name)
+3.commonName_value = Proxy 2
+
+[ proxy_2 ]
+basicConstraints = CA:FALSE
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid,issuer:always
+proxyCertInfo = critical,@proxy_ext
+
+[ proxy_ext ]
+language = id-ppl-anyLanguage
+pathlen = 0
+policy = text:BC
diff --git a/test/punycode_test.c b/test/punycode_test.c
new file mode 100644
index 000000000000..9d8171346caa
--- /dev/null
+++ b/test/punycode_test.c
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2022 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/crypto.h>
+#include <string.h>
+
+#include "crypto/punycode.h"
+#include "internal/nelem.h"
+#include "testutil.h"
+
+
+static const struct puny_test {
+ unsigned int raw[50];
+ const char *encoded;
+} puny_cases[] = {
+ /* Test cases from RFC 3492 */
+ { /* Arabic (Egyptian) */
+ { 0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643, 0x0644,
+ 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A, 0x061F
+ },
+ "egbpdaj6bu4bxfgehfvwxn"
+ },
+ { /* Chinese (simplified) */
+ { 0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587
+ },
+ "ihqwcrb4cv8a8dqg056pqjye"
+ },
+ { /* Chinese (traditional) */
+ { 0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587
+ },
+ "ihqwctvzc91f659drss3x8bo0yb"
+ },
+ { /* Czech: Pro<ccaron>prost<ecaron>nemluv<iacute><ccaron>esky */
+ { 0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073, 0x0074,
+ 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076, 0x00ED, 0x010D,
+ 0x0065, 0x0073, 0x006B, 0x0079
+ },
+ "Proprostnemluvesky-uyb24dma41a"
+ },
+ { /* Hebrew */
+ { 0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5, 0x05D8,
+ 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9, 0x05DD, 0x05E2,
+ 0x05D1, 0x05E8, 0x05D9, 0x05EA
+ },
+ "4dbcagdahymbxekheh6e0a7fei0b"
+ },
+ { /* Hindi (Devanagari) */
+ { 0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928, 0x094D,
+ 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902, 0x0928, 0x0939,
+ 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938, 0x0915, 0x0924, 0x0947,
+ 0x0939, 0x0948, 0x0902
+ },
+ "i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd"
+ },
+ { /* Japanese (kanji and hiragana) */
+ { 0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E, 0x3092,
+ 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044, 0x306E, 0x304B
+ },
+ "n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa"
+ },
+ { /* Korean (Hangul syllables) */
+ { 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
+ 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74,
+ 0xC5BC, 0xB9C8, 0xB098, 0xC88B, 0xC744, 0xAE4C
+ },
+ "989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c"
+ },
+ { /* Russian (Cyrillic) */
+ { 0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435, 0x043E,
+ 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432, 0x043E, 0x0440,
+ 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443, 0x0441, 0x0441, 0x043A,
+ 0x0438
+ },
+ "b1abfaaepdrnnbgefbaDotcwatmq2g4l"
+ },
+ { /* Spanish */
+ { 0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F, 0x0070,
+ 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069, 0x006D, 0x0070,
+ 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074, 0x0065, 0x0068, 0x0061,
+ 0x0062, 0x006C, 0x0061, 0x0072, 0x0065, 0x006E, 0x0045, 0x0073, 0x0070,
+ 0x0061, 0x00F1, 0x006F, 0x006C
+ },
+ "PorqunopuedensimplementehablarenEspaol-fmd56a"
+ },
+ { /* Vietnamese */
+ { 0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD, 0x006B,
+ 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3, 0x0063, 0x0068,
+ 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069, 0x1EBF, 0x006E, 0x0067,
+ 0x0056, 0x0069, 0x1EC7, 0x0074
+ },
+ "TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g"
+ },
+ { /* Japanese: 3<nen>B<gumi><kinpachi><sensei> */
+ { 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F
+ },
+ "3B-ww4c5e180e575a65lsy2b"
+ },
+ { /* Japanese: <amuro><namie>-with-SUPER-MONKEYS */
+ { 0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069, 0x0074,
+ 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052, 0x002D, 0x004D,
+ 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053
+ },
+ "-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n"
+ },
+ { /* Japanese: Hello-Another-Way-<sorezore><no><basho> */
+ { 0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E, 0x006F,
+ 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061, 0x0079, 0x002D,
+ 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834, 0x6240
+ },
+ "Hello-Another-Way--fc4qua05auwb3674vfr0b"
+ },
+ { /* Japanese: <hitotsu><yane><no><shita>2 */
+ { 0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032
+ },
+ "2-u9tlzr9756bt3uc0v"
+ },
+ { /* Japanese: Maji<de>Koi<suru>5<byou><mae> */
+ { 0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069, 0x3059,
+ 0x308B, 0x0035, 0x79D2, 0x524D
+ },
+ "MajiKoi5-783gue6qz075azm5e"
+ },
+ { /* Japanese: <pafii>de<runba> */
+ { 0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0
+ },
+ "de-jg4avhby1noc0d"
+ },
+ { /* Japanese: <sono><supiido><de> */
+ { 0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067
+ },
+ "d9juau41awczczp"
+ },
+ { /* -> $1.00 <- */
+ { 0x002D, 0x003E, 0x0020, 0x0024, 0x0031, 0x002E, 0x0030, 0x0030, 0x0020,
+ 0x003C, 0x002D
+ },
+ "-> $1.00 <--"
+ }
+};
+
+static int test_punycode(int n)
+{
+ const struct puny_test *tc = puny_cases + n;
+ unsigned int buffer[50];
+ unsigned int bsize = OSSL_NELEM(buffer);
+ size_t i;
+
+ if (!TEST_true(ossl_punycode_decode(tc->encoded, strlen(tc->encoded),
+ buffer, &bsize)))
+ return 0;
+ for (i = 0; i < OSSL_NELEM(tc->raw); i++)
+ if (tc->raw[i] == 0)
+ break;
+ if (!TEST_mem_eq(buffer, bsize * sizeof(*buffer),
+ tc->raw, i * sizeof(*tc->raw)))
+ return 0;
+ return 1;
+}
+
+static int test_a2ulabel(void)
+{
+ char out[50];
+ size_t outlen;
+
+ /*
+ * Test that no buffer correctly returns the true length.
+ * The punycode being passed in and parsed is malformed but we're not
+ * verifying that behaviour here.
+ */
+ if (!TEST_int_eq(ossl_a2ulabel("xn--a.b.c", NULL, &outlen), 0)
+ || !TEST_size_t_eq(outlen, 7)
+ || !TEST_int_eq(ossl_a2ulabel("xn--a.b.c", out, &outlen), 1))
+ return 0;
+ /* Test that a short input length returns the true length */
+ outlen = 1;
+ if (!TEST_int_eq(ossl_a2ulabel("xn--a.b.c", out, &outlen), 0)
+ || !TEST_size_t_eq(outlen, 7)
+ || !TEST_int_eq(ossl_a2ulabel("xn--a.b.c", out, &outlen), 1)
+ || !TEST_str_eq(out,"\xc2\x80.b.c"))
+ return 0;
+ /* Test for an off by one on the buffer size works */
+ outlen = 6;
+ if (!TEST_int_eq(ossl_a2ulabel("xn--a.b.c", out, &outlen), 0)
+ || !TEST_size_t_eq(outlen, 7)
+ || !TEST_int_eq(ossl_a2ulabel("xn--a.b.c", out, &outlen), 1)
+ || !TEST_str_eq(out,"\xc2\x80.b.c"))
+ return 0;
+ return 1;
+}
+
+static int test_puny_overrun(void)
+{
+ static const unsigned int out[] = {
+ 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F
+ };
+ static const char *in = "3B-ww4c5e180e575a65lsy2b";
+ unsigned int buf[OSSL_NELEM(out)];
+ unsigned int bsize = OSSL_NELEM(buf) - 1;
+
+ if (!TEST_false(ossl_punycode_decode(in, strlen(in), buf, &bsize))) {
+ if (TEST_mem_eq(buf, bsize * sizeof(*buf), out, sizeof(out)))
+ TEST_error("CRITICAL: buffer overrun detected!");
+ return 0;
+ }
+ return 1;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_punycode, OSSL_NELEM(puny_cases));
+ ADD_TEST(test_a2ulabel);
+ ADD_TEST(test_puny_overrun);
+ return 1;
+}
diff --git a/test/rand_status_test.c b/test/rand_status_test.c
new file mode 100644
index 000000000000..449b523d701f
--- /dev/null
+++ b/test/rand_status_test.c
@@ -0,0 +1,27 @@
+/*
+ * 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/rand.h>
+#include "testutil.h"
+
+/*
+ * This needs to be in a test executable all by itself so that it can be
+ * guaranteed to run before any generate calls have been made.
+ */
+
+static int test_rand_status(void)
+{
+ return TEST_true(RAND_status());
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_rand_status);
+ return 1;
+}
diff --git a/test/rand_test.c b/test/rand_test.c
new file mode 100644
index 000000000000..c6cf32610eb3
--- /dev/null
+++ b/test/rand_test.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the >License>). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/evp.h>
+#include <openssl/rand.h>
+#include <openssl/bio.h>
+#include <openssl/core_names.h>
+#include "testutil.h"
+
+static int test_rand(void)
+{
+ EVP_RAND_CTX *privctx;
+ OSSL_PARAM params[2], *p = params;
+ unsigned char entropy1[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
+ unsigned char entropy2[] = { 0xff, 0xfe, 0xfd };
+ unsigned char outbuf[3];
+
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
+ entropy1, sizeof(entropy1));
+ *p = OSSL_PARAM_construct_end();
+
+ if (!TEST_ptr(privctx = RAND_get0_private(NULL))
+ || !TEST_true(EVP_RAND_CTX_set_params(privctx, params))
+ || !TEST_int_gt(RAND_priv_bytes(outbuf, sizeof(outbuf)), 0)
+ || !TEST_mem_eq(outbuf, sizeof(outbuf), entropy1, sizeof(outbuf))
+ || !TEST_int_le(RAND_priv_bytes(outbuf, sizeof(outbuf) + 1), 0)
+ || !TEST_int_gt(RAND_priv_bytes(outbuf, sizeof(outbuf)), 0)
+ || !TEST_mem_eq(outbuf, sizeof(outbuf),
+ entropy1 + sizeof(outbuf), sizeof(outbuf)))
+ return 0;
+
+ *params = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
+ entropy2, sizeof(entropy2));
+ if (!TEST_true(EVP_RAND_CTX_set_params(privctx, params))
+ || !TEST_int_gt(RAND_priv_bytes(outbuf, sizeof(outbuf)), 0)
+ || !TEST_mem_eq(outbuf, sizeof(outbuf), entropy2, sizeof(outbuf)))
+ return 0;
+ return 1;
+}
+
+int setup_tests(void)
+{
+ if (!TEST_true(RAND_set_DRBG_type(NULL, "TEST-RAND", NULL, NULL, NULL)))
+ return 0;
+ ADD_TEST(test_rand);
+ return 1;
+}
diff --git a/test/rc2test.c b/test/rc2test.c
new file mode 100644
index 000000000000..179b6a53ca17
--- /dev/null
+++ b/test/rc2test.c
@@ -0,0 +1,74 @@
+/*
+ * 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
+ */
+
+/*
+ * RC2 low level APIs are deprecated for public use, but still ok for internal
+ * use.
+ */
+#include "internal/deprecated.h"
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_RC2
+# include <openssl/rc2.h>
+
+static unsigned char RC2key[4][16] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F},
+};
+
+static unsigned char RC2plain[4][8] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+};
+
+static unsigned char RC2cipher[4][8] = {
+ {0x1C, 0x19, 0x8A, 0x83, 0x8D, 0xF0, 0x28, 0xB7},
+ {0x21, 0x82, 0x9C, 0x78, 0xA9, 0xF9, 0xC0, 0x74},
+ {0x13, 0xDB, 0x35, 0x17, 0xD3, 0x21, 0x86, 0x9E},
+ {0x50, 0xDC, 0x01, 0x62, 0xBD, 0x75, 0x7F, 0x31},
+};
+
+static int test_rc2(const int n)
+{
+ int testresult = 1;
+ RC2_KEY key;
+ unsigned char buf[8], buf2[8];
+
+ RC2_set_key(&key, 16, &(RC2key[n][0]), 0 /* or 1024 */ );
+
+ RC2_ecb_encrypt(&RC2plain[n][0], buf, &key, RC2_ENCRYPT);
+ if (!TEST_mem_eq(&RC2cipher[n][0], 8, buf, 8))
+ testresult = 0;
+
+ RC2_ecb_encrypt(buf, buf2, &key, RC2_DECRYPT);
+ if (!TEST_mem_eq(&RC2plain[n][0], 8, buf2, 8))
+ testresult = 0;
+
+ return testresult;
+}
+
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_RC2
+ ADD_ALL_TESTS(test_rc2, OSSL_NELEM(RC2key));
+#endif
+ return 1;
+}
diff --git a/test/rc4test.c b/test/rc4test.c
new file mode 100644
index 000000000000..0ca2ca9aefaa
--- /dev/null
+++ b/test/rc4test.c
@@ -0,0 +1,134 @@
+/*
+ * 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
+ */
+
+/*
+ * RC4 and SHA-1 low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <string.h>
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_RC4
+# include <openssl/rc4.h>
+# include <openssl/sha.h>
+
+static unsigned char keys[6][30] = {
+ {8, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
+ {8, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
+ {8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {4, 0xef, 0x01, 0x23, 0x45},
+ {8, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
+ {4, 0xef, 0x01, 0x23, 0x45},
+};
+
+static unsigned char data_len[6] = { 8, 8, 8, 20, 28, 10 };
+
+static unsigned char data[6][30] = {
+ {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xff},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff},
+ {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
+ 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
+ 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
+ 0x12, 0x34, 0x56, 0x78, 0xff},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff},
+};
+
+static unsigned char output[6][30] = {
+ {0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96, 0x00},
+ {0x74, 0x94, 0xc2, 0xe7, 0x10, 0x4b, 0x08, 0x79, 0x00},
+ {0xde, 0x18, 0x89, 0x41, 0xa3, 0x37, 0x5d, 0x3a, 0x00},
+ {0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
+ 0xbd, 0x61, 0x5a, 0x11, 0x62, 0xe1, 0xc7, 0xba,
+ 0x36, 0xb6, 0x78, 0x58, 0x00},
+ {0x66, 0xa0, 0x94, 0x9f, 0x8a, 0xf7, 0xd6, 0x89,
+ 0x1f, 0x7f, 0x83, 0x2b, 0xa8, 0x33, 0xc0, 0x0c,
+ 0x89, 0x2e, 0xbe, 0x30, 0x14, 0x3c, 0xe2, 0x87,
+ 0x40, 0x01, 0x1e, 0xcf, 0x00},
+ {0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf, 0xbd, 0x61, 0x00},
+};
+
+static int test_rc4_encrypt(const int i)
+{
+ unsigned char obuf[512];
+ RC4_KEY key;
+
+ RC4_set_key(&key, keys[i][0], &(keys[i][1]));
+ memset(obuf, 0, sizeof(obuf));
+ RC4(&key, data_len[i], &(data[i][0]), obuf);
+ return TEST_mem_eq(obuf, data_len[i] + 1, output[i], data_len[i] + 1);
+}
+
+static int test_rc4_end_processing(const int i)
+{
+ unsigned char obuf[512];
+ RC4_KEY key;
+
+ RC4_set_key(&key, keys[3][0], &(keys[3][1]));
+ memset(obuf, 0, sizeof(obuf));
+ RC4(&key, i, &(data[3][0]), obuf);
+ if (!TEST_mem_eq(obuf, i, output[3], i))
+ return 0;
+ return TEST_uchar_eq(obuf[i], 0);
+}
+
+static int test_rc4_multi_call(const int i)
+{
+ unsigned char obuf[512];
+ RC4_KEY key;
+
+ RC4_set_key(&key, keys[3][0], &(keys[3][1]));
+ memset(obuf, 0, sizeof(obuf));
+ RC4(&key, i, &(data[3][0]), obuf);
+ RC4(&key, data_len[3] - i, &(data[3][i]), &(obuf[i]));
+ return TEST_mem_eq(obuf, data_len[3] + 1, output[3], data_len[3] + 1);
+}
+
+static int test_rc_bulk(void)
+{
+ RC4_KEY key;
+ unsigned char buf[513];
+ SHA_CTX c;
+ unsigned char md[SHA_DIGEST_LENGTH];
+ int i;
+ static unsigned char expected[] = {
+ 0xa4, 0x7b, 0xcc, 0x00, 0x3d, 0xd0, 0xbd, 0xe1, 0xac, 0x5f,
+ 0x12, 0x1e, 0x45, 0xbc, 0xfb, 0x1a, 0xa1, 0xf2, 0x7f, 0xc5
+ };
+
+ RC4_set_key(&key, keys[0][0], &(keys[3][1]));
+ memset(buf, 0, sizeof(buf));
+ SHA1_Init(&c);
+ for (i = 0; i < 2571; i++) {
+ RC4(&key, sizeof(buf), buf, buf);
+ SHA1_Update(&c, buf, sizeof(buf));
+ }
+ SHA1_Final(md, &c);
+
+ return TEST_mem_eq(md, sizeof(md), expected, sizeof(expected));
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_RC4
+ ADD_ALL_TESTS(test_rc4_encrypt, OSSL_NELEM(data_len));
+ ADD_ALL_TESTS(test_rc4_end_processing, data_len[3]);
+ ADD_ALL_TESTS(test_rc4_multi_call, data_len[3]);
+ ADD_TEST(test_rc_bulk);
+#endif
+ return 1;
+}
diff --git a/test/rc5test.c b/test/rc5test.c
new file mode 100644
index 000000000000..8e0747602313
--- /dev/null
+++ b/test/rc5test.c
@@ -0,0 +1,243 @@
+/*
+ * 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
+ */
+
+/*
+ * RC5 low level APIs are deprecated for public use, but still ok for internal
+ * use.
+ */
+#include "internal/deprecated.h"
+
+#include <string.h>
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_RC5
+# include <openssl/rc5.h>
+
+static unsigned char RC5key[5][16] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x91, 0x5f, 0x46, 0x19, 0xbe, 0x41, 0xb2, 0x51,
+ 0x63, 0x55, 0xa5, 0x01, 0x10, 0xa9, 0xce, 0x91},
+ {0x78, 0x33, 0x48, 0xe7, 0x5a, 0xeb, 0x0f, 0x2f,
+ 0xd7, 0xb1, 0x69, 0xbb, 0x8d, 0xc1, 0x67, 0x87},
+ {0xdc, 0x49, 0xdb, 0x13, 0x75, 0xa5, 0x58, 0x4f,
+ 0x64, 0x85, 0xb4, 0x13, 0xb5, 0xf1, 0x2b, 0xaf},
+ {0x52, 0x69, 0xf1, 0x49, 0xd4, 0x1b, 0xa0, 0x15,
+ 0x24, 0x97, 0x57, 0x4d, 0x7f, 0x15, 0x31, 0x25},
+};
+
+static unsigned char RC5plain[5][8] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
+ {0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
+ {0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
+ {0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
+};
+
+static unsigned char RC5cipher[5][8] = {
+ {0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
+ {0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
+ {0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
+ {0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
+ {0xEB, 0x44, 0xE4, 0x15, 0xDA, 0x31, 0x98, 0x24},
+};
+
+# define RC5_CBC_NUM 27
+static unsigned char rc5_cbc_cipher[RC5_CBC_NUM][8] = {
+ {0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1e},
+ {0x79, 0x7b, 0xba, 0x4d, 0x78, 0x11, 0x1d, 0x1e},
+ {0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
+ {0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
+ {0x8b, 0x9d, 0xed, 0x91, 0xce, 0x77, 0x94, 0xa6},
+ {0x2f, 0x75, 0x9f, 0xe7, 0xad, 0x86, 0xa3, 0x78},
+ {0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
+ {0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
+ {0xdc, 0xfe, 0x09, 0x85, 0x77, 0xec, 0xa5, 0xff},
+ {0x96, 0x46, 0xfb, 0x77, 0x63, 0x8f, 0x9c, 0xa8},
+ {0xb2, 0xb3, 0x20, 0x9d, 0xb6, 0x59, 0x4d, 0xa4},
+ {0x54, 0x5f, 0x7f, 0x32, 0xa5, 0xfc, 0x38, 0x36},
+ {0x82, 0x85, 0xe7, 0xc1, 0xb5, 0xbc, 0x74, 0x02},
+ {0xfc, 0x58, 0x6f, 0x92, 0xf7, 0x08, 0x09, 0x34},
+ {0xcf, 0x27, 0x0e, 0xf9, 0x71, 0x7f, 0xf7, 0xc4},
+ {0xe4, 0x93, 0xf1, 0xc1, 0xbb, 0x4d, 0x6e, 0x8c},
+ {0x5c, 0x4c, 0x04, 0x1e, 0x0f, 0x21, 0x7a, 0xc3},
+ {0x92, 0x1f, 0x12, 0x48, 0x53, 0x73, 0xb4, 0xf7},
+ {0x5b, 0xa0, 0xca, 0x6b, 0xbe, 0x7f, 0x5f, 0xad},
+ {0xc5, 0x33, 0x77, 0x1c, 0xd0, 0x11, 0x0e, 0x63},
+ {0x29, 0x4d, 0xdb, 0x46, 0xb3, 0x27, 0x8d, 0x60},
+ {0xda, 0xd6, 0xbd, 0xa9, 0xdf, 0xe8, 0xf7, 0xe8},
+ {0x97, 0xe0, 0x78, 0x78, 0x37, 0xed, 0x31, 0x7f},
+ {0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
+ {0x8f, 0x34, 0xc3, 0xc6, 0x81, 0xc9, 0x96, 0x95},
+ {0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
+ {0x7f, 0xd1, 0xa0, 0x23, 0xa5, 0xbb, 0xa2, 0x17},
+};
+
+static unsigned char rc5_cbc_key[RC5_CBC_NUM][17] = {
+ {1, 0x00},
+ {1, 0x00},
+ {1, 0x00},
+ {1, 0x00},
+ {1, 0x00},
+ {1, 0x11},
+ {1, 0x00},
+ {4, 0x00, 0x00, 0x00, 0x00},
+ {1, 0x00},
+ {1, 0x00},
+ {1, 0x00},
+ {1, 0x00},
+ {4, 0x01, 0x02, 0x03, 0x04},
+ {4, 0x01, 0x02, 0x03, 0x04},
+ {4, 0x01, 0x02, 0x03, 0x04},
+ {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {5, 0x01, 0x02, 0x03, 0x04, 0x05},
+ {5, 0x01, 0x02, 0x03, 0x04, 0x05},
+ {5, 0x01, 0x02, 0x03, 0x04, 0x05},
+ {5, 0x01, 0x02, 0x03, 0x04, 0x05},
+ {5, 0x01, 0x02, 0x03, 0x04, 0x05},
+};
+
+static unsigned char rc5_cbc_plain[RC5_CBC_NUM][8] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x01},
+};
+
+static int rc5_cbc_rounds[RC5_CBC_NUM] = {
+ 0, 0, 0, 0, 0, 1, 2, 2,
+ 8, 8, 12, 16, 8, 12, 16, 12,
+ 8, 12, 16, 8, 12, 16, 12, 8,
+ 8, 8, 8,
+};
+
+static unsigned char rc5_cbc_iv[RC5_CBC_NUM][8] = {
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
+};
+
+static int test_rc5_ecb(int n)
+{
+ int testresult = 1;
+ RC5_32_KEY key;
+ unsigned char buf[8], buf2[8];
+
+ if (!TEST_true(RC5_32_set_key(&key, 16, &RC5key[n][0], 12)))
+ return 0;
+
+ RC5_32_ecb_encrypt(&RC5plain[n][0], buf, &key, RC5_ENCRYPT);
+ if (!TEST_mem_eq(&RC5cipher[n][0], sizeof(RC5cipher[0]), buf, sizeof(buf)))
+ testresult = 0;
+
+ RC5_32_ecb_encrypt(buf, buf2, &key, RC5_DECRYPT);
+ if (!TEST_mem_eq(&RC5plain[n][0], sizeof(RC5cipher[0]), buf2, sizeof(buf2)))
+ testresult = 0;
+
+ return testresult;
+}
+
+static int test_rc5_cbc(int n)
+{
+ int testresult = 1;
+ int i;
+ RC5_32_KEY key;
+ unsigned char buf[8], buf2[8], ivb[8];
+
+ i = rc5_cbc_rounds[n];
+ if (i >= 8) {
+ if (!TEST_true(RC5_32_set_key(&key, rc5_cbc_key[n][0],
+ &rc5_cbc_key[n][1], i)))
+ return 0;
+
+ memcpy(ivb, &rc5_cbc_iv[n][0], 8);
+ RC5_32_cbc_encrypt(&rc5_cbc_plain[n][0], buf, 8,
+ &key, &ivb[0], RC5_ENCRYPT);
+
+ if (!TEST_mem_eq(&rc5_cbc_cipher[n][0], sizeof(rc5_cbc_cipher[0]),
+ buf, sizeof(buf)))
+ testresult = 0;
+
+ memcpy(ivb, &rc5_cbc_iv[n][0], 8);
+ RC5_32_cbc_encrypt(buf, buf2, 8, &key, &ivb[0], RC5_DECRYPT);
+ if (!TEST_mem_eq(&rc5_cbc_plain[n][0], sizeof(rc5_cbc_plain[0]),
+ buf2, sizeof(buf2)))
+ testresult = 0;
+ }
+
+ return testresult;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_RC5
+ ADD_ALL_TESTS(test_rc5_ecb, OSSL_NELEM(RC5key));
+ ADD_ALL_TESTS(test_rc5_cbc, RC5_CBC_NUM);
+#endif
+ return 1;
+}
diff --git a/test/rdrand_sanitytest.c b/test/rdrand_sanitytest.c
new file mode 100644
index 000000000000..dcc9d2800ae0
--- /dev/null
+++ b/test/rdrand_sanitytest.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright 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
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "testutil.h"
+#include "internal/cryptlib.h"
+
+#if (defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
+ defined(__x86_64) || defined(__x86_64__) || \
+ defined(_M_AMD64) || defined (_M_X64)) && defined(OPENSSL_CPUID_OBJ)
+
+size_t OPENSSL_ia32_rdrand_bytes(unsigned char *buf, size_t len);
+size_t OPENSSL_ia32_rdseed_bytes(unsigned char *buf, size_t len);
+
+static int sanity_check_bytes(size_t (*rng)(unsigned char *, size_t),
+ int rounds, int min_failures, int max_retries, int max_zero_words)
+{
+ int testresult = 0;
+ unsigned char prior[31] = {0}, buf[31] = {0}, check[7];
+ int failures = 0, zero_words = 0;
+
+ int i;
+ for (i = 0; i < rounds; i++) {
+ size_t generated = 0;
+
+ int retry;
+ for (retry = 0; retry < max_retries; retry++) {
+ generated = rng(buf, sizeof(buf));
+ if (generated == sizeof(buf))
+ break;
+ failures++;
+ }
+
+ /*-
+ * Verify that we don't have too many unexpected runs of zeroes,
+ * implying that we might be accidentally using the 32-bit RDRAND
+ * instead of the 64-bit one on 64-bit systems.
+ */
+ size_t j;
+ for (j = 0; j < sizeof(buf) - 1; j++) {
+ if (buf[j] == 0 && buf[j+1] == 0) {
+ zero_words++;
+ }
+ }
+
+ if (!TEST_int_eq(generated, sizeof(buf)))
+ goto end;
+ if (!TEST_false(!memcmp(prior, buf, sizeof(buf))))
+ goto end;
+
+ /* Verify that the last 7 bytes of buf aren't all the same value */
+ unsigned char *tail = &buf[sizeof(buf) - sizeof(check)];
+ memset(check, tail[0], 7);
+ if (!TEST_false(!memcmp(check, tail, sizeof(check))))
+ goto end;
+
+ /* Save the result and make sure it's different next time */
+ memcpy(prior, buf, sizeof(buf));
+ }
+
+ if (!TEST_int_le(zero_words, max_zero_words))
+ goto end;
+
+ if (!TEST_int_ge(failures, min_failures))
+ goto end;
+
+ testresult = 1;
+end:
+ return testresult;
+}
+
+static int sanity_check_rdrand_bytes(void)
+{
+ return sanity_check_bytes(OPENSSL_ia32_rdrand_bytes, 1000, 0, 10, 10);
+}
+
+static int sanity_check_rdseed_bytes(void)
+{
+ /*-
+ * RDSEED may take many retries to succeed; note that this is effectively
+ * multiplied by the 8x retry loop in asm, and failure probabilities are
+ * increased by the fact that we need either 4 or 8 samples depending on
+ * the platform.
+ */
+ return sanity_check_bytes(OPENSSL_ia32_rdseed_bytes, 1000, 1, 10000, 10);
+}
+
+int setup_tests(void)
+{
+ OPENSSL_cpuid_setup();
+
+ int have_rdseed = (OPENSSL_ia32cap_P[2] & (1 << 18)) != 0;
+ int have_rdrand = (OPENSSL_ia32cap_P[1] & (1 << (62 - 32))) != 0;
+
+ if (have_rdrand) {
+ ADD_TEST(sanity_check_rdrand_bytes);
+ }
+
+ if (have_rdseed) {
+ ADD_TEST(sanity_check_rdseed_bytes);
+ }
+
+ return 1;
+}
+
+
+#else
+
+int setup_tests(void)
+{
+ return 1;
+}
+
+#endif
diff --git a/test/recipes/00-prep_fipsmodule_cnf.t b/test/recipes/00-prep_fipsmodule_cnf.t
new file mode 100644
index 000000000000..8d53e8a40fdb
--- /dev/null
+++ b/test/recipes/00-prep_fipsmodule_cnf.t
@@ -0,0 +1,36 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_dir bldtop_dir bldtop_file srctop_file data_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("prep_fipsmodule");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+use platform;
+
+my $no_check = disabled("fips");
+plan skip_all => "FIPS module config file only supported in a fips build"
+ if $no_check;
+
+my $fipsmodule = bldtop_file('providers', platform->dso('fips'));
+my $fipsmoduleconf = bldtop_file('test', 'fipsmodule.cnf');
+
+plan tests => 1;
+
+# Create the $fipsmoduleconf file
+ok(run(app(['openssl', 'fipsinstall',
+ '-module', $fipsmodule, '-provider_name', 'fips',
+ '-section_name', 'fips_sect', '-out', $fipsmoduleconf])),
+ "fips install");
diff --git a/test/recipes/01-test_abort.t b/test/recipes/01-test_abort.t
new file mode 100644
index 000000000000..f7e066bd4786
--- /dev/null
+++ b/test/recipes/01-test_abort.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test;
+
+setup("test_abort");
+
+plan tests => 1;
+
+is(run(test(["aborttest"])), 0, "Testing that abort is caught correctly");
diff --git a/test/recipes/01-test_fipsmodule_cnf.t b/test/recipes/01-test_fipsmodule_cnf.t
new file mode 100644
index 000000000000..ce594817d537
--- /dev/null
+++ b/test/recipes/01-test_fipsmodule_cnf.t
@@ -0,0 +1,37 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+# This is a sanity checker to see that the fipsmodule.cnf that's been
+# generated for testing is valid.
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_dir bldtop_dir bldtop_file srctop_file data_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_fipsmodule");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+use platform;
+
+my $no_check = disabled("fips");
+plan skip_all => "Test only supported in a fips build"
+ if $no_check;
+plan tests => 1;
+
+my $fipsmodule = bldtop_file('providers', platform->dso('fips'));
+my $fipsmoduleconf = bldtop_file('test', 'fipsmodule.cnf');
+
+# verify the $fipsconf file
+ok(run(app(['openssl', 'fipsinstall',
+ '-in', $fipsmoduleconf, '-module', $fipsmodule, '-verify'])),
+ "fipsinstall verify");
diff --git a/test/recipes/01-test_sanity.t b/test/recipes/01-test_sanity.t
new file mode 100644
index 000000000000..f674f3edc79a
--- /dev/null
+++ b/test/recipes/01-test_sanity.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_sanity", "sanitytest");
diff --git a/test/recipes/01-test_symbol_presence.t b/test/recipes/01-test_symbol_presence.t
new file mode 100644
index 000000000000..3de3d2ccf19b
--- /dev/null
+++ b/test/recipes/01-test_symbol_presence.t
@@ -0,0 +1,157 @@
+#! /usr/bin/env perl
+# -*- mode: Perl -*-
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use File::Spec::Functions qw(devnull);
+use OpenSSL::Test qw(:DEFAULT srctop_file srctop_dir bldtop_dir bldtop_file);
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_symbol_presence");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+use platform;
+
+plan skip_all => "Test is disabled on NonStop" if config('target') =~ m|^nonstop|;
+# MacOS arranges symbol names differently
+plan skip_all => "Test is disabled on MacOS" if config('target') =~ m|^darwin|;
+plan skip_all => "This is unsupported on MSYS, MinGW or MSWin32"
+ if $^O eq 'msys' or $^O eq 'MSWin32' or config('target') =~ m|^mingw|;
+plan skip_all => "Only useful when building shared libraries"
+ if disabled("shared");
+
+my @libnames = ("crypto", "ssl");
+my $testcount = scalar @libnames;
+
+plan tests => $testcount * 2;
+
+note
+ "NOTE: developer test! It's possible that it won't run on your\n",
+ "platform, and that's perfectly fine. This is mainly for developers\n",
+ "on Unix to check that our shared libraries are consistent with the\n",
+ "ordinals (util/*.num in the source tree), something that should be\n",
+ "good enough a check for the other platforms as well.\n";
+
+foreach my $libname (@libnames) {
+ SKIP:
+ {
+ my $shlibname = platform->sharedlib("lib$libname");
+ my $shlibpath = bldtop_file($shlibname);
+ *OSTDERR = *STDERR;
+ *OSTDOUT = *STDOUT;
+ open STDERR, ">", devnull();
+ open STDOUT, ">", devnull();
+ my @nm_lines = map { s|\R$||; $_ } `nm -DPg $shlibpath 2> /dev/null`;
+ close STDERR;
+ close STDOUT;
+ *STDERR = *OSTDERR;
+ *STDOUT = *OSTDOUT;
+ skip "Can't run 'nm -DPg $shlibpath' => $?... ignoring", 2
+ unless $? == 0;
+
+ my $bldtop = bldtop_dir();
+ my @def_lines;
+ indir $bldtop => sub {
+ my $mkdefpath = srctop_file("util", "mkdef.pl");
+ my $libnumpath = srctop_file("util", "lib$libname.num");
+ @def_lines = map { s|\R$||; $_ } `$^X $mkdefpath --ordinals $libnumpath --name $libname --OS linux 2> /dev/null`;
+ ok($? == 0, "running 'cd $bldtop; $^X $mkdefpath --ordinals $libnumpath --name $libname --OS linux' => $?");
+ }, create => 0, cleanup => 0;
+
+ note "Number of lines in \@nm_lines before massaging: ", scalar @nm_lines;
+ note "Number of lines in \@def_lines before massaging: ", scalar @def_lines;
+
+ # Massage the nm output to only contain defined symbols
+ # Common symbols need separate treatment
+ my %commons;
+ foreach (@nm_lines) {
+ if (m|^(.*) C .*|) {
+ $commons{$1}++;
+ }
+ }
+ foreach (sort keys %commons) {
+ note "Common symbol: $_";
+ }
+
+ @nm_lines =
+ sort
+ ( map {
+ # Drop the first space and everything following it
+ s| .*||;
+ # Drop OpenSSL dynamic version information if there is any
+ s|\@\@.+$||;
+ # Return the result
+ $_
+ }
+ # Drop any symbol starting with a double underscore, they
+ # are reserved for the compiler / system ABI and are none
+ # of our business
+ grep !m|^__|,
+ # Only look at external definitions
+ grep m|.* [BDST] .*|,
+ @nm_lines ),
+ keys %commons;
+
+ # Massage the mkdef.pl output to only contain global symbols
+ # The output we got is in Unix .map format, which has a global
+ # and a local section. We're only interested in the global
+ # section.
+ my $in_global = 0;
+ @def_lines =
+ sort
+ map { s|;||; s|\s+||g; $_ }
+ grep { $in_global = 1 if m|global:|;
+ $in_global = 0 if m|local:|;
+ $in_global = 0 if m|\}|;
+ $in_global && m|;|; } @def_lines;
+
+ note "Number of lines in \@nm_lines after massaging: ", scalar @nm_lines;
+ note "Number of lines in \@def_lines after massaging: ", scalar @def_lines;
+
+ # Maintain lists of symbols that are missing in the shared library,
+ # or that are extra.
+ my @missing = ();
+ my @extra = ();
+
+ while (scalar @nm_lines || scalar @def_lines) {
+ my $nm_first = $nm_lines[0];
+ my $def_first = $def_lines[0];
+
+ if (!defined($nm_first)) {
+ push @missing, shift @def_lines;
+ } elsif (!defined($def_first)) {
+ push @extra, shift @nm_lines;
+ } elsif ($nm_first gt $def_first) {
+ push @missing, shift @def_lines;
+ } elsif ($nm_first lt $def_first) {
+ push @extra, shift @nm_lines;
+ } else {
+ shift @def_lines;
+ shift @nm_lines;
+ }
+ }
+
+ if (scalar @missing) {
+ note "The following symbols are missing in ${shlibname}:";
+ foreach (@missing) {
+ note " $_";
+ }
+ }
+ if (scalar @extra) {
+ note "The following symbols are extra in ${shlibname}:";
+ foreach (@extra) {
+ note " $_";
+ }
+ }
+ ok(scalar @missing == 0,
+ "check that there are no missing symbols in ${shlibname}");
+ }
+}
diff --git a/test/recipes/01-test_test.t b/test/recipes/01-test_test.t
new file mode 100644
index 000000000000..d769acb0ab0f
--- /dev/null
+++ b/test/recipes/01-test_test.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2017, Oracle and/or its affiliates. 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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_test", "test_test");
diff --git a/test/recipes/02-test_errstr.t b/test/recipes/02-test_errstr.t
new file mode 100644
index 000000000000..396d2731761c
--- /dev/null
+++ b/test/recipes/02-test_errstr.t
@@ -0,0 +1,163 @@
+#! /usr/bin/env perl
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+no strict 'refs'; # To be able to use strings as function refs
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+use Errno qw(:POSIX);
+use POSIX qw(:limits_h strerror);
+
+use Data::Dumper;
+
+setup('test_errstr');
+
+# In a cross compiled situation, there are chances that our
+# application is linked against different C libraries than
+# perl, and may thereby get different error messages for the
+# same error.
+# The safest is not to test under such circumstances.
+plan skip_all => 'This is unsupported for cross compiled configurations'
+ if config('CROSS_COMPILE');
+
+# The same can be said when compiling OpenSSL with mingw configuration
+# on Windows when built with msys perl. Similar problems are also observed
+# in MSVC builds, depending on the perl implementation used.
+plan skip_all => 'This is unsupported on MSYS/MinGW or MSWin32'
+ if $^O eq 'msys' or $^O eq 'MSWin32';
+
+plan skip_all => 'OpenSSL is configured "no-autoerrinit" or "no-err"'
+ if disabled('autoerrinit') || disabled('err');
+
+# OpenSSL constants found in <openssl/err.h>
+use constant ERR_SYSTEM_FLAG => INT_MAX + 1;
+use constant ERR_LIB_OFFSET => 23; # Offset of the "library" errcode section
+
+# OpenSSL "library" numbers
+use constant ERR_LIB_NONE => 1;
+
+# We use Errno::EXPORT_OK as a list of known errno values on the current
+# system. libcrypto's ERR should either use the same string as perl, or if
+# it was outside the range that ERR looks at, ERR gives the reason string
+# "reason(nnn)", where nnn is the errno number.
+
+plan tests => scalar @Errno::EXPORT_OK
+ +1 # Checking that error 128 gives 'reason(128)'
+ +1 # Checking that error 0 gives the library name
+ +1; # Check trailing whitespace is removed.
+
+# Test::More:ok() has a sub prototype, which means we need to use the '&ok'
+# syntax to force it to accept a list as a series of arguments.
+
+foreach my $errname (@Errno::EXPORT_OK) {
+ # The error names are perl constants, which are implemented as functions
+ # returning the numeric value of that name.
+ my $errcode = "Errno::$errname"->();
+
+ SKIP: {
+ # On most systems, there is no E macro for errcode zero in <errno.h>,
+ # which means that it seldom comes up here. However, reports indicate
+ # that some platforms do have an E macro for errcode zero.
+ # With perl, errcode zero is a bit special. Perl consistently gives
+ # the empty string for that one, while the C strerror() may give back
+ # something else. The easiest way to deal with that possible mismatch
+ # is to skip this errcode.
+ skip "perl error strings and ssystem error strings for errcode 0 differ", 1
+ if $errcode == 0;
+ # On some systems (for example Hurd), there are negative error codes.
+ # These are currently unsupported in OpenSSL error reports.
+ skip "negative error codes are not supported in OpenSSL", 1
+ if $errcode < 0;
+
+ &ok(match_syserr_reason($errcode));
+ }
+}
+
+# OpenSSL library 1 is the "unknown" library
+&ok(match_opensslerr_reason(ERR_LIB_NONE << ERR_LIB_OFFSET | 256,
+ "reason(256)"));
+# Reason code 0 of any library gives the library name as reason
+&ok(match_opensslerr_reason(ERR_LIB_NONE << ERR_LIB_OFFSET | 0,
+ "unknown library"));
+&ok(match_any("Trailing whitespace \n\t", "?", ( "Trailing whitespace" )));
+
+exit 0;
+
+# For an error string "error:xxxxxxxx:lib:func:reason", this returns
+# the following array:
+#
+# ( "xxxxxxxx", "lib", "func", "reason" )
+sub split_error {
+ # Limit to 5 items, in case the reason contains a colon
+ my @erritems = split /:/, $_[0], 5;
+
+ # Remove the first item, which is always "error"
+ shift @erritems;
+
+ return @erritems;
+}
+
+# Compares the first argument as string to each of the arguments 3 and on,
+# and returns an array of two elements:
+# 0: True if the first argument matched any of the others, otherwise false
+# 1: A string describing the test
+# The returned array can be used as the arguments to Test::More::ok()
+sub match_any {
+ my $first = shift;
+ my $desc = shift;
+ my @strings = @_;
+
+ # ignore trailing whitespace
+ $first =~ s/\s+$//;
+
+ if (scalar @strings > 1) {
+ $desc = "match '$first' ($desc) with one of ( '"
+ . join("', '", @strings) . "' )";
+ } else {
+ $desc = "match '$first' ($desc) with '$strings[0]'";
+ }
+
+ return ( scalar(
+ grep { ref $_ eq 'Regexp' ? $first =~ $_ : $first eq $_ }
+ @strings
+ ) > 0,
+ $desc );
+}
+
+sub match_opensslerr_reason {
+ my $errcode = shift;
+ my @strings = @_;
+
+ my $errcode_hex = sprintf "%x", $errcode;
+ my $reason =
+ ( run(app([ qw(openssl errstr), $errcode_hex ]), capture => 1) )[0];
+ $reason =~ s|\R$||;
+ $reason = ( split_error($reason) )[3];
+
+ return match_any($reason, $errcode_hex, @strings);
+}
+
+sub match_syserr_reason {
+ my $errcode = shift;
+
+ my @strings = ();
+ # The POSIX reason string
+ push @strings, eval {
+ # Set $! to the error number...
+ local $! = $errcode;
+ # ... and $! will give you the error string back
+ $!
+ };
+ # Occasionally, we get an error code that is simply not translatable
+ # to POSIX semantics on VMS, and we get an error string saying so.
+ push @strings, qr/^non-translatable vms error code:/ if $^O eq 'VMS';
+ # The OpenSSL fallback string
+ push @strings, "reason($errcode)";
+
+ return match_opensslerr_reason(ERR_SYSTEM_FLAG | $errcode, @strings);
+}
diff --git a/test/recipes/02-test_internal_context.t b/test/recipes/02-test_internal_context.t
new file mode 100644
index 000000000000..c4c99043d1a7
--- /dev/null
+++ b/test/recipes/02-test_internal_context.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_context");
+
+simple_test("test_internal_context", "context_internal_test");
diff --git a/test/recipes/02-test_internal_ctype.t b/test/recipes/02-test_internal_ctype.t
new file mode 100644
index 000000000000..c87cfe76f180
--- /dev/null
+++ b/test/recipes/02-test_internal_ctype.t
@@ -0,0 +1,17 @@
+#! /usr/bin/env perl
+# Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2017, Oracle and/or its affiliates. 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
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_ctype");
+
+simple_test("test_internal_ctype", "ctype_internal_test");
diff --git a/test/recipes/02-test_internal_exts.t b/test/recipes/02-test_internal_exts.t
new file mode 100644
index 000000000000..bec4a216cb2a
--- /dev/null
+++ b/test/recipes/02-test_internal_exts.t
@@ -0,0 +1,15 @@
+#! /usr/bin/env perl
+# Copyright 2022 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
+
+use strict;
+use OpenSSL::Test;
+use OpenSSL::Test::Simple;
+
+setup("test_internal_exts");
+
+simple_test("test_internal_exts", "ext_internal_test");
diff --git a/test/recipes/02-test_internal_keymgmt.t b/test/recipes/02-test_internal_keymgmt.t
new file mode 100644
index 000000000000..165f54807be1
--- /dev/null
+++ b/test/recipes/02-test_internal_keymgmt.t
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+# Copyright 2019-2022 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
+
+use strict;
+use OpenSSL::Test qw(:DEFAULT bldtop_dir srctop_file);
+use OpenSSL::Test::Utils;
+
+setup("test_internal_keymgmt");
+
+plan tests => 1;
+
+$ENV{OPENSSL_MODULES} = bldtop_dir("test");
+
+ok(run(test(["keymgmt_internal_test",
+ srctop_file("test", "certs", "ee-cert.pem")])),
+ "running test_internal_keymgmt");
diff --git a/test/recipes/02-test_internal_provider.t b/test/recipes/02-test_internal_provider.t
new file mode 100644
index 000000000000..a369553b732b
--- /dev/null
+++ b/test/recipes/02-test_internal_provider.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# Copyright 2019-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
+
+use strict;
+use OpenSSL::Test qw(:DEFAULT bldtop_dir bldtop_file);
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_provider");
+
+$ENV{OPENSSL_MODULES} = bldtop_dir("test");
+$ENV{OPENSSL_CONF} = bldtop_file("test", "provider_internal_test.cnf");
+
+simple_test("test_internal_provider", "provider_internal_test");
diff --git a/test/recipes/02-test_lhash.t b/test/recipes/02-test_lhash.t
new file mode 100644
index 000000000000..5f1f1b6ede05
--- /dev/null
+++ b/test/recipes/02-test_lhash.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2017, Oracle and/or its affiliates. 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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_lhash", "lhash_test");
diff --git a/test/recipes/02-test_localetest.t b/test/recipes/02-test_localetest.t
new file mode 100644
index 000000000000..9564d904f41b
--- /dev/null
+++ b/test/recipes/02-test_localetest.t
@@ -0,0 +1,26 @@
+#! /usr/bin/env perl
+# Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2017, Oracle and/or its affiliates. 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
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_locale");
+
+plan skip_all => "Locale tests not available on Windows or VMS"
+ if $^O =~ /^(VMS|MSWin32)$/;
+
+plan tests => 3;
+
+ok(run(test(["evp_pkey_ctx_new_from_name"])), "running evp_pkey_ctx_new_from_name without explicit context init");
+
+$ENV{LANG} = "C";
+ok(run(test(["localetest"])), "running localetest");
+
+$ENV{LANG} = "tr_TR.UTF-8";
+ok(run(test(["localetest"])), "running localetest with Turkish locale");
diff --git a/test/recipes/02-test_ordinals.t b/test/recipes/02-test_ordinals.t
new file mode 100644
index 000000000000..710e7e23240f
--- /dev/null
+++ b/test/recipes/02-test_ordinals.t
@@ -0,0 +1,61 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_ordinals");
+
+plan tests => 2;
+
+ok(testordinals(srctop_file("util", "libcrypto.num")), "Test libcrypto.num");
+ok(testordinals(srctop_file("util", "libssl.num")), "Test libssl.num");
+
+sub testordinals
+{
+ my $filename = shift;
+ my $cnt = 0;
+ my $ret = 1;
+ my $qualifier = "";
+ my $newqual;
+ my $lastfunc = "";
+
+ open(my $fh, '<', $filename);
+ while (my $line = <$fh>) {
+ my @tokens = split(/(?:\s+|\s*:\s*)/, $line);
+ #Check the line looks sane
+ if ($#tokens < 5 || $#tokens > 6) {
+ print STDERR "Invalid line:\n$line\n";
+ $ret = 0;
+ last;
+ }
+ if ($tokens[3] eq "NOEXIST") {
+ #Ignore this line
+ next;
+ }
+ #Some ordinals can be repeated, e.g. if one is VMS and another is !VMS
+ $newqual = $tokens[4];
+ $newqual =~ s/!//g;
+ my $number = $tokens[1];
+ $number = $cnt + 1 if $number eq '?';
+ $number = $cnt if $number eq '?+';
+ if ($cnt > $number
+ || ($cnt == $number && ($qualifier ne $newqual
+ || $qualifier eq ""))) {
+ print STDERR "Invalid ordinal detected: ".$tokens[1]."\n";
+ $ret = 0;
+ last;
+ }
+ $cnt = $tokens[1];
+ $qualifier = $newqual;
+ $lastfunc = $tokens[0];
+ }
+ close($fh);
+
+ return $ret;
+}
diff --git a/test/recipes/02-test_sparse_array.t b/test/recipes/02-test_sparse_array.t
new file mode 100644
index 000000000000..ee4a63e9e1a4
--- /dev/null
+++ b/test/recipes/02-test_sparse_array.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2019, Oracle and/or its affiliates. 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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_sparse_array", "sparse_array_test");
diff --git a/test/recipes/02-test_stack.t b/test/recipes/02-test_stack.t
new file mode 100644
index 000000000000..6a5a29a26f3d
--- /dev/null
+++ b/test/recipes/02-test_stack.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2017, Oracle and/or its affiliates. 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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_stack", "stack_test");
diff --git a/test/recipes/03-test_exdata.t b/test/recipes/03-test_exdata.t
new file mode 100644
index 000000000000..48c4f45a1fcc
--- /dev/null
+++ b/test/recipes/03-test_exdata.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_exdata", "exdatatest");
diff --git a/test/recipes/03-test_fipsinstall.t b/test/recipes/03-test_fipsinstall.t
new file mode 100644
index 000000000000..c39b2cee09ec
--- /dev/null
+++ b/test/recipes/03-test_fipsinstall.t
@@ -0,0 +1,310 @@
+#! /usr/bin/env perl
+# Copyright 2019-2022 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
+
+use strict;
+use warnings;
+
+use File::Spec::Functions qw(:DEFAULT abs2rel);
+use File::Copy;
+use OpenSSL::Glob;
+use OpenSSL::Test qw/:DEFAULT srctop_dir srctop_file bldtop_dir bldtop_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_fipsinstall");
+}
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+use platform;
+
+plan skip_all => "Test only supported in a fips build" if disabled("fips");
+
+plan tests => 29;
+
+my $infile = bldtop_file('providers', platform->dso('fips'));
+my $fipskey = $ENV{FIPSKEY} // config('FIPSKEY') // '00';
+my $provconf = srctop_file("test", "fips-and-base.cnf");
+
+# Read in a text $infile and replace the regular expression in $srch with the
+# value in $repl and output to a new file $outfile.
+sub replace_line_file_internal {
+
+ my ($infile, $srch, $repl, $outfile) = @_;
+ my $msg;
+
+ open(my $in, "<", $infile) or return 0;
+ read($in, $msg, 1024);
+ close $in;
+
+ $msg =~ s/$srch/$repl/;
+
+ open(my $fh, ">", $outfile) or return 0;
+ print $fh $msg;
+ close $fh;
+ return 1;
+}
+
+# Read in the text input file 'fips.cnf'
+# and replace a single Key = Value line with a new value in $value.
+# OR remove the Key = Value line if the passed in $value is empty.
+# and then output a new file $outfile.
+# $key is the Key to find
+sub replace_line_file {
+ my ($key, $value, $outfile) = @_;
+
+ my $srch = qr/$key\s*=\s*\S*\n/;
+ my $rep;
+ if ($value eq "") {
+ $rep = "";
+ } else {
+ $rep = "$key = $value\n";
+ }
+ return replace_line_file_internal('fips.cnf', $srch, $rep, $outfile);
+}
+
+# Read in the text input file 'test/fips.cnf'
+# and replace the .cnf file used in
+# .include fipsmodule.cnf with a new value in $value.
+# and then output a new file $outfile.
+# $key is the Key to find
+sub replace_parent_line_file {
+ my ($value, $outfile) = @_;
+ my $srch = qr/fipsmodule.cnf/;
+ my $rep = "$value";
+ return replace_line_file_internal(srctop_file("test", 'fips.cnf'),
+ $srch, $rep, $outfile);
+}
+
+# fail if no module name
+ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips.cnf', '-module',
+ '-provider_name', 'fips',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect'])),
+ "fipsinstall fail");
+
+# fail to verify if the configuration file is missing
+ok(!run(app(['openssl', 'fipsinstall', '-in', 'dummy.tmp', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect', '-verify'])),
+ "fipsinstall verify fail");
+
+
+# output a fips.cnf file containing mac data
+ok(run(app(['openssl', 'fipsinstall', '-out', 'fips.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect'])),
+ "fipsinstall");
+
+# verify the fips.cnf file
+ok(run(app(['openssl', 'fipsinstall', '-in', 'fips.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect', '-verify'])),
+ "fipsinstall verify");
+
+ok(replace_line_file('module-mac', '', 'fips_no_module_mac.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-in', 'fips_no_module_mac.cnf',
+ '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:01",
+ '-section_name', 'fips_sect', '-verify'])),
+ "fipsinstall verify fail no module mac");
+
+ok(replace_line_file('install-mac', '', 'fips_no_install_mac.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-in', 'fips_no_install_mac.cnf',
+ '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:01",
+ '-section_name', 'fips_sect', '-verify'])),
+ "fipsinstall verify fail no install indicator mac");
+
+ok(replace_line_file('module-mac', '00:00:00:00:00:00',
+ 'fips_bad_module_mac.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-in', 'fips_bad_module_mac.cnf',
+ '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:01",
+ '-section_name', 'fips_sect', '-verify'])),
+ "fipsinstall verify fail if invalid module integrity value");
+
+ok(replace_line_file('install-mac', '00:00:00:00:00:00',
+ 'fips_bad_install_mac.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-in', 'fips_bad_install_mac.cnf',
+ '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:01",
+ '-section_name', 'fips_sect', '-verify'])),
+ "fipsinstall verify fail if invalid install indicator integrity value");
+
+ok(replace_line_file('install-status', 'INCORRECT_STATUS_STRING',
+ 'fips_bad_indicator.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-in', 'fips_bad_indicator.cnf',
+ '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:01",
+ '-section_name', 'fips_sect', '-verify'])),
+ "fipsinstall verify fail if invalid install indicator status");
+
+# fail to verify the fips.cnf file if a different key is used
+ok(!run(app(['openssl', 'fipsinstall', '-in', 'fips.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:01",
+ '-section_name', 'fips_sect', '-verify'])),
+ "fipsinstall verify fail bad key");
+
+# fail to verify the fips.cnf file if a different mac digest is used
+ok(!run(app(['openssl', 'fipsinstall', '-in', 'fips.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA512', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect', '-verify'])),
+ "fipsinstall verify fail incorrect digest");
+
+# corrupt the module hmac
+ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect', '-corrupt_desc', 'HMAC'])),
+ "fipsinstall fails when the module integrity is corrupted");
+
+# corrupt the first digest
+ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips_fail.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect', '-corrupt_desc', 'SHA1'])),
+ "fipsinstall fails when the digest result is corrupted");
+
+# corrupt another digest
+ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips_fail.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect', '-corrupt_desc', 'SHA3'])),
+ "fipsinstall fails when the digest result is corrupted");
+
+# corrupt cipher encrypt test
+ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips_fail.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect', '-corrupt_desc', 'AES_GCM'])),
+ "fipsinstall fails when the AES_GCM result is corrupted");
+
+# corrupt cipher decrypt test
+ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips_fail.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect', '-corrupt_desc', 'AES_ECB_Decrypt'])),
+ "fipsinstall fails when the AES_ECB result is corrupted");
+
+# corrupt DRBG
+ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips_fail.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect', '-corrupt_desc', 'CTR'])),
+ "fipsinstall fails when the DRBG CTR result is corrupted");
+
+# corrupt a KAS test
+SKIP: {
+ skip "Skipping KAS DH corruption test because of no dh in this build", 1
+ if disabled("dh");
+
+ ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect',
+ '-corrupt_desc', 'DH',
+ '-corrupt_type', 'KAT_KA'])),
+ "fipsinstall fails when the kas result is corrupted");
+}
+
+# corrupt a Signature test
+SKIP: {
+ skip "Skipping Signature DSA corruption test because of no dsa in this build", 1
+ if disabled("dsa");
+
+ run(test(["fips_version_test", "-config", $provconf, "<3.1.0"]),
+ capture => 1, statusvar => \my $exit);
+ skip "FIPS provider version is too new for PCT DSA signature test", 1
+ if !$exit;
+
+ ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips.cnf', '-module', $infile,
+ '-provider_name', 'fips', '-mac_name', 'HMAC',
+ '-macopt', 'digest:SHA256', '-macopt', "hexkey:$fipskey",
+ '-section_name', 'fips_sect',
+ '-corrupt_desc', 'DSA',
+ '-corrupt_type', 'PCT_Signature'])),
+ "fipsinstall fails when the signature result is corrupted");
+}
+
+# corrupt an Asymmetric cipher test
+SKIP: {
+ skip "Skipping Asymmetric RSA corruption test because of no rsa in this build", 1
+ if disabled("rsa");
+ ok(!run(app(['openssl', 'fipsinstall', '-out', 'fips.cnf', '-module', $infile,
+ '-corrupt_desc', 'RSA_Encrypt',
+ '-corrupt_type', 'KAT_AsymmetricCipher'])),
+ "fipsinstall fails when the asymmetric cipher result is corrupted");
+}
+
+# 'local' ensures that this change is only done in this file.
+local $ENV{OPENSSL_CONF_INCLUDE} = abs2rel(curdir());
+
+ok(replace_parent_line_file('fips.cnf', 'fips_parent.cnf')
+ && run(app(['openssl', 'fipsinstall', '-config', 'fips_parent.cnf'])),
+ "verify fips provider loads from a configuration file");
+
+ok(replace_parent_line_file('fips_no_module_mac.cnf',
+ 'fips_parent_no_module_mac.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-config', 'fips_parent_no_module_mac.cnf'])),
+ "verify load config fail no module mac");
+
+ok(replace_parent_line_file('fips_no_install_mac.cnf',
+ 'fips_parent_no_install_mac.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-config', 'fips_parent_no_install_mac.cnf'])),
+ "verify load config fail no install mac");
+
+ok(replace_parent_line_file('fips_bad_indicator.cnf',
+ 'fips_parent_bad_indicator.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-config', 'fips_parent_bad_indicator.cnf'])),
+ "verify load config fail bad indicator");
+
+
+ok(replace_parent_line_file('fips_bad_install_mac.cnf',
+ 'fips_parent_bad_install_mac.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-config', 'fips_parent_bad_install_mac.cnf'])),
+ "verify load config fail bad install mac");
+
+ok(replace_parent_line_file('fips_bad_module_mac.cnf',
+ 'fips_parent_bad_module_mac.cnf')
+ && !run(app(['openssl', 'fipsinstall',
+ '-config', 'fips_parent_bad_module_mac.cnf'])),
+ "verify load config fail bad module mac");
+
+
+my $stconf = "fipsmodule_selftest.cnf";
+
+ok(run(app(['openssl', 'fipsinstall', '-out', $stconf,
+ '-module', $infile, '-self_test_onload'])),
+ "fipsinstall config saved without self test indicator");
+
+ok(!run(app(['openssl', 'fipsinstall', '-in', $stconf,
+ '-module', $infile, '-verify'])),
+ "fipsinstall config verify fails without self test indicator");
+
+ok(run(app(['openssl', 'fipsinstall', '-in', $stconf,
+ '-module', $infile, '-self_test_onload', '-verify'])),
+ "fipsinstall config verify passes when self test indicator is not present");
diff --git a/test/recipes/03-test_internal_asn1.t b/test/recipes/03-test_internal_asn1.t
new file mode 100644
index 000000000000..8cbc759d1b5b
--- /dev/null
+++ b/test/recipes/03-test_internal_asn1.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_asn1");
+
+simple_test("test_internal_asn1", "asn1_internal_test");
diff --git a/test/recipes/03-test_internal_asn1_dsa.t b/test/recipes/03-test_internal_asn1_dsa.t
new file mode 100644
index 000000000000..ecacac73cb36
--- /dev/null
+++ b/test/recipes/03-test_internal_asn1_dsa.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_asn1_dsa");
+
+simple_test("test_internal_asn1_dsa", "asn1_dsa_internal_test");
diff --git a/test/recipes/03-test_internal_bn.t b/test/recipes/03-test_internal_bn.t
new file mode 100644
index 000000000000..3018ccff1205
--- /dev/null
+++ b/test/recipes/03-test_internal_bn.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# Copyright 2018-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
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_bn");
+
+plan skip_all => "This test is unsupported in a shared library build on Windows"
+ if $^O eq 'MSWin32' && !disabled("shared");
+
+simple_test("test_internal_bn", "bn_internal_test");
diff --git a/test/recipes/03-test_internal_chacha.t b/test/recipes/03-test_internal_chacha.t
new file mode 100644
index 000000000000..590c158f9080
--- /dev/null
+++ b/test/recipes/03-test_internal_chacha.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_chacha");
+
+simple_test("test_internal_chacha", "chacha_internal_test", "chacha");
diff --git a/test/recipes/03-test_internal_curve448.t b/test/recipes/03-test_internal_curve448.t
new file mode 100644
index 000000000000..01ca5ad38cfa
--- /dev/null
+++ b/test/recipes/03-test_internal_curve448.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_curve448");
+
+plan skip_all => "This test is unsupported in a no-ec build"
+ if disabled("ec");
+
+simple_test("test_internal_curve448", "curve448_internal_test");
diff --git a/test/recipes/03-test_internal_ec.t b/test/recipes/03-test_internal_ec.t
new file mode 100644
index 000000000000..0d31d0ac070f
--- /dev/null
+++ b/test/recipes/03-test_internal_ec.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_ec");
+
+plan skip_all => "This test is unsupported in a no-ec build"
+ if disabled("ec");
+
+simple_test("test_internal_ec", "ec_internal_test");
diff --git a/test/recipes/03-test_internal_ffc.t b/test/recipes/03-test_internal_ffc.t
new file mode 100644
index 000000000000..aa64213bc0ab
--- /dev/null
+++ b/test/recipes/03-test_internal_ffc.t
@@ -0,0 +1,11 @@
+#! /usr/bin/env perl
+# Copyright 2019-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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_internal_ffc", "ffc_internal_test");
diff --git a/test/recipes/03-test_internal_mdc2.t b/test/recipes/03-test_internal_mdc2.t
new file mode 100644
index 000000000000..3c28cf4727bc
--- /dev/null
+++ b/test/recipes/03-test_internal_mdc2.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+use strict;
+use OpenSSL::Test::Simple;
+
+simple_test("test_internal_mdc2", "mdc2_internal_test", "mdc2");
diff --git a/test/recipes/03-test_internal_modes.t b/test/recipes/03-test_internal_modes.t
new file mode 100644
index 000000000000..c38136163973
--- /dev/null
+++ b/test/recipes/03-test_internal_modes.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_modes");
+
+simple_test("test_internal_modes", "modes_internal_test");
diff --git a/test/recipes/03-test_internal_namemap.t b/test/recipes/03-test_internal_namemap.t
new file mode 100644
index 000000000000..9214242c7091
--- /dev/null
+++ b/test/recipes/03-test_internal_namemap.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_namemap");
+
+simple_test("test_internal_namemap", "namemap_internal_test");
diff --git a/test/recipes/03-test_internal_poly1305.t b/test/recipes/03-test_internal_poly1305.t
new file mode 100644
index 000000000000..083d6b7a15bb
--- /dev/null
+++ b/test/recipes/03-test_internal_poly1305.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_poly1305");
+
+simple_test("test_internal_poly1305", "poly1305_internal_test", "poly1305");
diff --git a/test/recipes/03-test_internal_rsa_sp800_56b.t b/test/recipes/03-test_internal_rsa_sp800_56b.t
new file mode 100644
index 000000000000..3922f0b257ca
--- /dev/null
+++ b/test/recipes/03-test_internal_rsa_sp800_56b.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# Copyright 2018-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
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_rsa_sp800_56b");
+
+plan skip_all => "This test is unsupported in a shared library build on Windows"
+ if $^O eq 'MSWin32' && !disabled("shared");
+
+simple_test("test_internal_rsa_sp800_56b", "rsa_sp800_56b_test");
diff --git a/test/recipes/03-test_internal_siphash.t b/test/recipes/03-test_internal_siphash.t
new file mode 100644
index 000000000000..4114cb459ee7
--- /dev/null
+++ b/test/recipes/03-test_internal_siphash.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_siphash");
+
+simple_test("test_internal_siphash", "siphash_internal_test", "siphash");
diff --git a/test/recipes/03-test_internal_sm2.t b/test/recipes/03-test_internal_sm2.t
new file mode 100644
index 000000000000..39b167d9f804
--- /dev/null
+++ b/test/recipes/03-test_internal_sm2.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2017-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_sm2");
+
+simple_test("test_internal_sm2", "sm2_internal_test", "sm2");
diff --git a/test/recipes/03-test_internal_sm3.t b/test/recipes/03-test_internal_sm3.t
new file mode 100644
index 000000000000..574a7c412126
--- /dev/null
+++ b/test/recipes/03-test_internal_sm3.t
@@ -0,0 +1,15 @@
+#! /usr/bin/env perl
+# Copyright 2021-2022 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright 2021 [UnionTech](https://www.uniontech.com). 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
+
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+
+setup("test_internal_sm3");
+
+simple_test("test_internal_sm3", "sm3_internal_test", "sm3");
diff --git a/test/recipes/03-test_internal_sm4.t b/test/recipes/03-test_internal_sm4.t
new file mode 100644
index 000000000000..090b66d2fb12
--- /dev/null
+++ b/test/recipes/03-test_internal_sm4.t
@@ -0,0 +1,17 @@
+#! /usr/bin/env perl
+# Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright 2017 [Ribose Inc.](https://www.ribose.com). 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
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_sm4");
+
+simple_test("test_internal_sm4", "sm4_internal_test", "sm4");
diff --git a/test/recipes/03-test_internal_ssl_cert_table.t b/test/recipes/03-test_internal_ssl_cert_table.t
new file mode 100644
index 000000000000..1eee0532e302
--- /dev/null
+++ b/test/recipes/03-test_internal_ssl_cert_table.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2017-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_ssl_cert_table");
+
+simple_test("test_internal_ssl_cert_table", "ssl_cert_table_internal_test");
diff --git a/test/recipes/03-test_internal_x509.t b/test/recipes/03-test_internal_x509.t
new file mode 100644
index 000000000000..1803992791bc
--- /dev/null
+++ b/test/recipes/03-test_internal_x509.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_internal_x509");
+
+simple_test("test_internal_x509", "x509_internal_test");
diff --git a/test/recipes/03-test_params_api.t b/test/recipes/03-test_params_api.t
new file mode 100644
index 000000000000..9e821c992071
--- /dev/null
+++ b/test/recipes/03-test_params_api.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2019, Oracle and/or its affiliates. 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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_params_api", "params_api_test");
diff --git a/test/recipes/03-test_property.t b/test/recipes/03-test_property.t
new file mode 100644
index 000000000000..f11602873eec
--- /dev/null
+++ b/test/recipes/03-test_property.t
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup('test_property');
+
+plan tests => 2;
+
+ok(run(test(["property_test"])), "running property_test");
+
+ok(run(test(["user_property_test"])), "running user_property_test");
diff --git a/test/recipes/03-test_ui.t b/test/recipes/03-test_ui.t
new file mode 100644
index 000000000000..1363c5e68672
--- /dev/null
+++ b/test/recipes/03-test_ui.t
@@ -0,0 +1,13 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+use strict;
+use warnings;
+use OpenSSL::Test::Simple;
+
+simple_test("test_ui", "uitest", "ui");
diff --git a/test/recipes/04-test_asn1_decode.t b/test/recipes/04-test_asn1_decode.t
new file mode 100644
index 000000000000..ad71cb9c5ddb
--- /dev/null
+++ b/test/recipes/04-test_asn1_decode.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_asn1_decode", "asn1_decode_test");
diff --git a/test/recipes/04-test_asn1_encode.t b/test/recipes/04-test_asn1_encode.t
new file mode 100644
index 000000000000..acb1eb1a7af8
--- /dev/null
+++ b/test/recipes/04-test_asn1_encode.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_asn1_encode", "asn1_encode_test");
diff --git a/test/recipes/04-test_asn1_parse.t b/test/recipes/04-test_asn1_parse.t
new file mode 100644
index 000000000000..f3af4365920a
--- /dev/null
+++ b/test/recipes/04-test_asn1_parse.t
@@ -0,0 +1,26 @@
+#! /usr/bin/env perl
+# Copyright 2023 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
+
+use strict;
+use OpenSSL::Test qw(:DEFAULT srctop_file);
+use OpenSSL::Test::Utils;
+
+setup("test_asn1_parse");
+
+plan tests => 3;
+
+$ENV{OPENSSL_CONF} = srctop_file("test", "test_asn1_parse.cnf");
+
+ok(run(app(([ 'openssl', 'asn1parse',
+ '-genstr', 'OID:1.2.3.4.1']))));
+
+ok(run(app(([ 'openssl', 'asn1parse',
+ '-genstr', 'OID:1.2.3.4.2']))));
+
+ok(run(app(([ 'openssl', 'asn1parse',
+ '-genstr', 'OID:1.2.3.4.3']))));
diff --git a/test/recipes/04-test_asn1_stable_parse.t b/test/recipes/04-test_asn1_stable_parse.t
new file mode 100644
index 000000000000..0f553443991f
--- /dev/null
+++ b/test/recipes/04-test_asn1_stable_parse.t
@@ -0,0 +1,24 @@
+#! /usr/bin/env perl
+# Copyright 2023-2024 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
+
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test qw/:DEFAULT srctop_file srctop_dir bldtop_dir bldtop_file data_dir/;
+use OpenSSL::Test::Utils;
+use Cwd qw(abs_path);
+
+BEGIN {
+setup("test_asn1_stable_parse");
+}
+my $config_path = srctop_file("test", "recipes", "04-test_asn1_stable_parse_data", "asn1_stable_parse.cnf");
+
+plan tests => 1;
+
+ok(run(test(["asn1_stable_parse_test", "-config", $config_path])),
+ "Confirm that malformed entries in stable section are not parsed");
+
diff --git a/test/recipes/04-test_asn1_stable_parse_data/asn1_stable_parse.cnf b/test/recipes/04-test_asn1_stable_parse_data/asn1_stable_parse.cnf
new file mode 100644
index 000000000000..28381a083b0a
--- /dev/null
+++ b/test/recipes/04-test_asn1_stable_parse_data/asn1_stable_parse.cnf
@@ -0,0 +1,16 @@
+openssl_conf = openssl_init
+config_diagnostics = 1
+
+[openssl_init]
+s = mstbl
+
+[mstbl]
+id-tc26 = min
+id-tc27 = ::::::
+id-tc28 = ,,,,,,
+id-tc29 = :,:,:,
+id-tc30 = n1:min
+id-tc31 = n2:max
+id-tc32 = n3:
+id-tc33 = :0
+
diff --git a/test/recipes/04-test_asn1_string_table.t b/test/recipes/04-test_asn1_string_table.t
new file mode 100644
index 000000000000..17a4bb0654cc
--- /dev/null
+++ b/test/recipes/04-test_asn1_string_table.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_asn1_string_table", "asn1_string_table_test");
diff --git a/test/recipes/04-test_bio_callback.t b/test/recipes/04-test_bio_callback.t
new file mode 100644
index 000000000000..ec7691a3939f
--- /dev/null
+++ b/test/recipes/04-test_bio_callback.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_bio_callback", "bio_callback_test");
diff --git a/test/recipes/04-test_bio_core.t b/test/recipes/04-test_bio_core.t
new file mode 100644
index 000000000000..e489907c847e
--- /dev/null
+++ b/test/recipes/04-test_bio_core.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_bio_core", "bio_core_test");
diff --git a/test/recipes/04-test_bioprint.t b/test/recipes/04-test_bioprint.t
new file mode 100644
index 000000000000..4d5efc690dd4
--- /dev/null
+++ b/test/recipes/04-test_bioprint.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_bioprint", "bioprinttest");
diff --git a/test/recipes/04-test_conf.t b/test/recipes/04-test_conf.t
new file mode 100644
index 000000000000..f987e43c8e94
--- /dev/null
+++ b/test/recipes/04-test_conf.t
@@ -0,0 +1,46 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT data_file);
+use OpenSSL::Test::Utils;
+use File::Compare qw(compare_text);
+
+setup('test_conf');
+
+my %input_result = (
+ 'dollarid_on.cnf' => 'dollarid_on.txt',
+ 'dollarid_off.cnf' => 'dollarid_off.txt',
+);
+
+plan skip_all => 'This is unsupported for cross compiled configurations'
+ if config('CROSS_COMPILE');
+
+plan tests => 2 * scalar(keys %input_result);
+
+foreach (sort keys %input_result) {
+ SKIP: {
+ my $input_path = data_file($_);
+ my $expected_path = data_file($input_result{$_});
+ my $result_path = "test_conf-$_-stdout";
+
+ skip "Problem dumping $_", 1
+ unless ok(run(test([ 'confdump', $input_path ],
+ stdout => $result_path)),
+ "dumping $_");
+ is(compare_text($result_path, $expected_path, sub {
+ my $in1 = $_[0];
+ my $in2 = $_[1];
+ $in1 =~ s/\r\n/\n/g;
+ $in2 =~ s/\r\n/\n/g;
+ $in1 ne $in2}), 0,
+ "comparing the dump of $_ with $input_result{$_}");
+ }
+}
diff --git a/test/recipes/04-test_conf_data/dollarid_off.cnf b/test/recipes/04-test_conf_data/dollarid_off.cnf
new file mode 100644
index 000000000000..96482ff2cda8
--- /dev/null
+++ b/test/recipes/04-test_conf_data/dollarid_off.cnf
@@ -0,0 +1,5 @@
+.pragma dollarid:off
+
+bar = 0
+foo = $bar
+cookie = ${foo}
diff --git a/test/recipes/04-test_conf_data/dollarid_off.txt b/test/recipes/04-test_conf_data/dollarid_off.txt
new file mode 100644
index 000000000000..910714a266b8
--- /dev/null
+++ b/test/recipes/04-test_conf_data/dollarid_off.txt
@@ -0,0 +1,4 @@
+[ default ]
+bar = 0
+foo = 0
+cookie = 0
diff --git a/test/recipes/04-test_conf_data/dollarid_on.cnf b/test/recipes/04-test_conf_data/dollarid_on.cnf
new file mode 100644
index 000000000000..1b12e2fdc604
--- /dev/null
+++ b/test/recipes/04-test_conf_data/dollarid_on.cnf
@@ -0,0 +1,5 @@
+.pragma dollarid:on
+
+bar = 0
+foo$bar = 1
+cookie = ${foo$bar}
diff --git a/test/recipes/04-test_conf_data/dollarid_on.txt b/test/recipes/04-test_conf_data/dollarid_on.txt
new file mode 100644
index 000000000000..a534315790fc
--- /dev/null
+++ b/test/recipes/04-test_conf_data/dollarid_on.txt
@@ -0,0 +1,4 @@
+[ default ]
+bar = 0
+foo$bar = 1
+cookie = 1
diff --git a/test/recipes/04-test_encoder_decoder.t b/test/recipes/04-test_encoder_decoder.t
new file mode 100644
index 000000000000..19541610a9a9
--- /dev/null
+++ b/test/recipes/04-test_encoder_decoder.t
@@ -0,0 +1,51 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_dir srctop_file bldtop_dir bldtop_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_encoder_decoder");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+use platform;
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+my $rsa_key = srctop_file("test", "certs", "ee-key.pem");
+my $pss_key = srctop_file("test", "certs", "ca-pss-key.pem");
+
+plan tests => ($no_fips ? 0 : 1) + 2; # FIPS install test + test
+
+my $conf = srctop_file("test", "default.cnf");
+ok(run(test(["endecode_test", "-rsa", $rsa_key,
+ "-pss", $pss_key,
+ "-config", $conf,
+ "-provider", "default"])));
+
+# Run with non-default library context
+ok(run(test(["endecode_test", "-rsa", $rsa_key,
+ "-pss", $pss_key,
+ "-context",
+ "-config", $conf,
+ "-provider", "default"])));
+
+unless ($no_fips) {
+ # Run with fips library context
+ my $conf = srctop_file("test", "fips-and-base.cnf");
+ ok(run(test(["endecode_test", "-rsa", $rsa_key,
+ "-pss", $pss_key,
+ "-config", $conf,
+ "-provider", "fips"])));
+}
+
diff --git a/test/recipes/04-test_encoder_decoder_legacy.t b/test/recipes/04-test_encoder_decoder_legacy.t
new file mode 100644
index 000000000000..119d2ee74011
--- /dev/null
+++ b/test/recipes/04-test_encoder_decoder_legacy.t
@@ -0,0 +1,29 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test qw/:DEFAULT srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use Cwd qw(abs_path);
+
+setup("test_encoder_decoder_legacy");
+
+plan skip_all => "Not available in a no-deprecated build"
+ if disabled("deprecated");
+plan tests => 1;
+
+$ENV{OPENSSL_MODULES} = abs_path(bldtop_dir("providers"));
+$ENV{OPENSSL_CONF} = abs_path(srctop_file("test", "default.cnf"));
+
+my $rsa_key = srctop_file("test", "certs", "ee-key.pem");
+my $dh_key = srctop_file("test", "certs", "dhk2048.pem");
+
+ok(run(test(["endecoder_legacy_test", $rsa_key, $dh_key])));
diff --git a/test/recipes/04-test_err.t b/test/recipes/04-test_err.t
new file mode 100644
index 000000000000..e68fc4ce51c2
--- /dev/null
+++ b/test/recipes/04-test_err.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_err", "errtest");
diff --git a/test/recipes/04-test_hexstring.t b/test/recipes/04-test_hexstring.t
new file mode 100644
index 000000000000..664868fe60fa
--- /dev/null
+++ b/test/recipes/04-test_hexstring.t
@@ -0,0 +1,15 @@
+#! /usr/bin/env perl
+# 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
+
+use strict;
+use OpenSSL::Test;
+use OpenSSL::Test::Simple;
+
+setup("test_hexstring");
+
+simple_test("test_hexstring", "hexstr_test");
diff --git a/test/recipes/04-test_nodefltctx.t b/test/recipes/04-test_nodefltctx.t
new file mode 100644
index 000000000000..54f306b28418
--- /dev/null
+++ b/test/recipes/04-test_nodefltctx.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# Copyright 2023The 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
+
+use strict;
+use OpenSSL::Test::Simple;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use Cwd qw(abs_path);
+
+setup("test_nodefltctx");
+
+# Load the null provider by default into the default libctx
+$ENV{OPENSSL_CONF} = abs_path(srctop_file("test", "null.cnf"));
+
+simple_test("test_nodefltctx", "nodefltctxtest");
diff --git a/test/recipes/04-test_param_build.t b/test/recipes/04-test_param_build.t
new file mode 100644
index 000000000000..b9846c5204f6
--- /dev/null
+++ b/test/recipes/04-test_param_build.t
@@ -0,0 +1,15 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+use strict;
+use OpenSSL::Test;
+use OpenSSL::Test::Simple;
+
+setup("test_param_build");
+
+simple_test("test_param_build", "param_build_test");
diff --git a/test/recipes/04-test_params.t b/test/recipes/04-test_params.t
new file mode 100644
index 000000000000..ae83d4fdd04f
--- /dev/null
+++ b/test/recipes/04-test_params.t
@@ -0,0 +1,15 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+use strict;
+use OpenSSL::Test;
+use OpenSSL::Test::Simple;
+
+setup("test_params");
+
+simple_test("test_params", "params_test");
diff --git a/test/recipes/04-test_params_conversion.t b/test/recipes/04-test_params_conversion.t
new file mode 100644
index 000000000000..d15df84ae10c
--- /dev/null
+++ b/test/recipes/04-test_params_conversion.t
@@ -0,0 +1,23 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT data_file/;
+
+setup("test_params_conversion");
+
+my @files = ( "native_types.txt" );
+
+plan tests => scalar(@files);
+
+foreach my $f ( @files ) {
+ ok(run(test(["params_conversion_test", data_file("$f")])),
+ "running params_conversion_test $f");
+}
diff --git a/test/recipes/04-test_params_conversion_data/native_types.txt b/test/recipes/04-test_params_conversion_data/native_types.txt
new file mode 100644
index 000000000000..233a5842cc50
--- /dev/null
+++ b/test/recipes/04-test_params_conversion_data/native_types.txt
@@ -0,0 +1,343 @@
+type=int32
+int32=0
+int64=0
+uint32=0
+uint64=0
+double=0
+
+type=int32
+int32=6
+int64=6
+uint32=6
+uint64=6
+double=6
+
+type=int32
+int32=-6
+int64=-6
+uint32=invalid
+uint64=invalid
+double=-6
+
+
+type=uint32
+int32=0
+int64=0
+uint32=0
+uint64=0
+double=0
+
+type=uint32
+int32=6
+int64=6
+uint32=6
+uint64=6
+double=6
+
+# 2^31-1
+type=uint32
+int32=2147483647
+int64=2147483647
+uint32=2147483647
+uint64=2147483647
+double=2147483647
+
+# 2^31
+type=uint32
+int32=invalid
+int64=2147483648
+uint32=2147483648
+uint64=2147483648
+double=2147483648
+
+
+type=int64
+int32=6
+int64=6
+uint32=6
+uint64=6
+double=6
+
+type=int64
+int32=-6
+int64=-6
+uint32=invalid
+uint64=invalid
+double=-6
+
+# 2^31-1
+type=int64
+int32=2147483647
+int64=2147483647
+uint32=2147483647
+uint64=2147483647
+double=2147483647
+
+# 2^31
+type=int64
+int32=invalid
+int64=2147483648
+uint32=2147483648
+uint64=2147483648
+double=2147483648
+
+# -2^31+1
+type=int64
+int32=-2147483647
+int64=-2147483647
+uint32=invalid
+uint64=invalid
+double=-2147483647
+
+# -2^31
+type=int64
+int32=-2147483648
+int64=-2147483648
+uint32=invalid
+uint64=invalid
+double=-2147483648
+
+# -2^31-1
+type=int64
+int32=invalid
+int64=-2147483649
+uint32=invalid
+uint64=invalid
+double=-2147483649
+
+# 2^32-1
+type=int64
+int32=invalid
+int64=4294967295
+uint32=4294967295
+uint64=4294967295
+double=4294967295
+
+# 2^32
+type=int64
+int32=invalid
+int64=4294967296
+uint32=invalid
+uint64=4294967296
+double=4294967296
+
+# -2^32
+type=int64
+int32=invalid
+int64=-4294967296
+uint32=invalid
+uint64=invalid
+double=-4294967296
+
+# 2^53-1
+type=int64
+int32=invalid
+int64=9007199254740991
+uint32=invalid
+uint64=9007199254740991
+double=9007199254740991
+
+# 2^53
+type=int64
+int32=invalid
+int64=9007199254740992
+uint32=invalid
+uint64=9007199254740992
+double=invalid
+
+# -2^53-1
+type=int64
+int32=invalid
+int64=-9007199254740991
+uint32=invalid
+uint64=invalid
+double=-9007199254740991
+
+# -2^53
+type=int64
+int32=invalid
+int64=-9007199254740992
+uint32=invalid
+uint64=invalid
+double=invalid
+
+
+type=uint64
+int32=6
+int64=6
+uint32=6
+uint64=6
+double=6
+
+# 2^31-1
+type=uint64
+int32=2147483647
+int64=2147483647
+uint32=2147483647
+uint64=2147483647
+double=2147483647
+
+# 2^31
+type=uint64
+int32=invalid
+int64=2147483648
+uint32=2147483648
+uint64=2147483648
+double=2147483648
+
+# 2^32-1
+type=uint64
+int32=invalid
+int64=4294967295
+uint32=4294967295
+uint64=4294967295
+double=4294967295
+
+# 2^32
+type=uint64
+int32=invalid
+int64=4294967296
+uint32=invalid
+uint64=4294967296
+double=4294967296
+
+# 2^53-1
+type=uint64
+int32=invalid
+int64=9007199254740991
+uint32=invalid
+uint64=9007199254740991
+double=9007199254740991
+
+# 2^53
+type=uint64
+int32=invalid
+int64=9007199254740992
+uint32=invalid
+uint64=9007199254740992
+double=invalid
+
+# 2^63-1
+type=uint64
+int32=invalid
+int64=9223372036854775807
+uint32=invalid
+uint64=9223372036854775807
+double=invalid
+
+# 2^63-1
+type=uint64
+int32=invalid
+int64=invalid
+uint32=invalid
+uint64=9223372036854775808
+double=invalid
+
+type=double
+int32=0
+int64=0
+uint32=0
+uint64=0
+double=0
+
+type=double
+int32=6
+int64=6
+uint32=6
+uint64=6
+double=6
+
+type=double
+int32=-6
+int64=-6
+uint32=invalid
+uint64=invalid
+double=-6
+
+# -2^31
+type=double
+int32=-2147483648
+int64=-2147483648
+uint32=invalid
+uint64=invalid
+double=-2147483648
+
+# -2^31-1
+type=double
+int32=invalid
+int64=-2147483649
+uint32=invalid
+uint64=invalid
+double=-2147483649
+
+# 2^32-1
+type=double
+int32=invalid
+int64=4294967295
+uint32=4294967295
+uint64=4294967295
+double=4294967295
+
+# 2^32
+type=double
+int32=invalid
+int64=4294967296
+uint32=invalid
+uint64=4294967296
+double=4294967296
+
+# -2^32
+type=double
+int32=invalid
+int64=-4294967296
+uint32=invalid
+uint64=invalid
+double=-4294967296
+
+# 2^53-1
+type=double
+int32=invalid
+int64=9007199254740991
+uint32=invalid
+uint64=9007199254740991
+double=9007199254740991
+
+# -2^53+1
+type=double
+int32=invalid
+int64=-9007199254740991
+uint32=invalid
+uint64=invalid
+double=-9007199254740991
+
+# big
+type=double
+int32=invalid
+int64=invalid
+uint32=invalid
+uint64=invalid
+double=1e100
+
+# big
+type=double
+int32=invalid
+int64=invalid
+uint32=invalid
+uint64=invalid
+double=-1e100
+
+# infinite
+type=double
+int32=invalid
+int64=invalid
+uint32=invalid
+uint64=invalid
+double=inf
+
+# fractional
+type=double
+int32=invalid
+int64=invalid
+uint32=invalid
+uint64=invalid
+double=0.5
diff --git a/test/recipes/04-test_pem_read_depr.t b/test/recipes/04-test_pem_read_depr.t
new file mode 100644
index 000000000000..6df88ec3e3c0
--- /dev/null
+++ b/test/recipes/04-test_pem_read_depr.t
@@ -0,0 +1,20 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+
+use OpenSSL::Test qw(:DEFAULT data_dir);
+use OpenSSL::Test::Utils;
+
+setup("test_pem_read_depr");
+
+plan skip_all => "Test not supported in a no-deprecated build"
+ if disabled("deprecated");
+
+plan tests => 1;
+
+ok(run(test(['pem_read_depr_test', data_dir()])), "pem_read_depr_test");
diff --git a/test/recipes/04-test_pem_read_depr_data/dhparams.pem b/test/recipes/04-test_pem_read_depr_data/dhparams.pem
new file mode 100644
index 000000000000..21d1f61b5925
--- /dev/null
+++ b/test/recipes/04-test_pem_read_depr_data/dhparams.pem
@@ -0,0 +1,8 @@
+-----BEGIN DH PARAMETERS-----
+MIIBCAKCAQEA/uDak+qLI40JfWdgM/eWp9Wg1yjCH1psOeyxSImj09DOdvOPKXhI
+vBjvwyw76vn+HDBg0R90FbA1VmJBXwFqm2qAytpySgPniFWRoIN38SWrZ7FwlXuO
+SPWgXxtRQCIuN7SfIvFoncQ41aa9rJTJ1VXNT22keTe8DbF8tZaALwiaTWmslNa/
++qI/1/a+R4/SqLmQQBFJ10NfNQ7w66tmzsL3mcoz1vOrl+mmOgKHiKaTnI7oiL8y
+qWbnCIdRUPVImNGur/oKRk7Ye/66cgras9WXjXRr5ExVh4+wBYTvJ2H7THRoBgts
+0g1y1Zu5uGJQttPbgC18guqH6NH6xPin+wIBAg==
+-----END DH PARAMETERS-----
diff --git a/test/recipes/04-test_pem_read_depr_data/dsaparams.pem b/test/recipes/04-test_pem_read_depr_data/dsaparams.pem
new file mode 100644
index 000000000000..7c4623269f61
--- /dev/null
+++ b/test/recipes/04-test_pem_read_depr_data/dsaparams.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKAKCAQEAkCVbIEa67wJYbxPJRmA+NYY67GfktNggaxbhMaL+jyR7U1uPpOEa
+/tTBgql40zj3W+QORevWOjo4ECxCpWmttG81r1+jhlG/a3Bk+CJB+CZw+ZC8NBXV
+46v03q+MR3AjLOr/k/sgBabVc6I4K6IFC5ZmlwS0+8F4VudOq4lLqHZXFp89AJWi
+HhtPbcD+jYYtrL+3MT7rwQJ+5MoXUgzfTnJFR5hpBuqgYubTGHc8nEG9KkXnE97B
+as0hTWaYuLe/RwHEhabZi7pcFqD26fCJC63gzT6zK73R2GD0qRwPD0pxh/adu2uu
+h314G2y03Fstnc8q5i/NYofP3Lg++0yJNQIdAMi9Wu0rxBvq5Je+TXliYygyKa5E
+/KKOwvshJ2kCggEAWLdQjAIb/Jtn1YZNGZhrif6NCHyO+qxq2B4Ajrw3TUMrmEbt
+avfWoHNkoJCTE10ZzWTZqrVWqzfytK8VnG7XRfMftjMdiXTKg4amG8wvNCC3at36
+WouWYsZx50PWXHOyRiFENcmXDiyzvz2/NcZmKIDdlII/JF3sTjn2HtzpwAIEduEV
+1YnyY9E6MiP0jeMaHvo5zSHAdSYTu0eBZ3ThxCyyW+sIKRA96+yBUtCrGOb+UUu6
+udVKAj8sauSBsIbLGf/qrw86u/qSZbqr+keY6ozSsCCHeFMUIhGxv4a9E0XcAX0r
+VLgYFtiO5DyuXSRACmCgmHYAlvyiP+E5xDs4Nw==
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/04-test_pem_read_depr_data/dsaprivatekey.pem b/test/recipes/04-test_pem_read_depr_data/dsaprivatekey.pem
new file mode 100644
index 000000000000..d24e9e7dd82c
--- /dev/null
+++ b/test/recipes/04-test_pem_read_depr_data/dsaprivatekey.pem
@@ -0,0 +1,15 @@
+-----BEGIN PRIVATE KEY-----
+MIICXAIBADCCAjUGByqGSM44BAEwggIoAoIBAQCQJVsgRrrvAlhvE8lGYD41hjrs
+Z+S02CBrFuExov6PJHtTW4+k4Rr+1MGCqXjTOPdb5A5F69Y6OjgQLEKlaa20bzWv
+X6OGUb9rcGT4IkH4JnD5kLw0FdXjq/Ter4xHcCMs6v+T+yAFptVzojgrogULlmaX
+BLT7wXhW506riUuodlcWnz0AlaIeG09twP6Nhi2sv7cxPuvBAn7kyhdSDN9OckVH
+mGkG6qBi5tMYdzycQb0qRecT3sFqzSFNZpi4t79HAcSFptmLulwWoPbp8IkLreDN
+PrMrvdHYYPSpHA8PSnGH9p27a66HfXgbbLTcWy2dzyrmL81ih8/cuD77TIk1Ah0A
+yL1a7SvEG+rkl75NeWJjKDIprkT8oo7C+yEnaQKCAQBYt1CMAhv8m2fVhk0ZmGuJ
+/o0IfI76rGrYHgCOvDdNQyuYRu1q99agc2SgkJMTXRnNZNmqtVarN/K0rxWcbtdF
+8x+2Mx2JdMqDhqYbzC80ILdq3fpai5ZixnHnQ9Zcc7JGIUQ1yZcOLLO/Pb81xmYo
+gN2Ugj8kXexOOfYe3OnAAgR24RXVifJj0ToyI/SN4xoe+jnNIcB1JhO7R4FndOHE
+LLJb6wgpED3r7IFS0KsY5v5RS7q51UoCPyxq5IGwhssZ/+qvDzq7+pJluqv6R5jq
+jNKwIId4UxQiEbG/hr0TRdwBfStUuBgW2I7kPK5dJEAKYKCYdgCW/KI/4TnEOzg3
+BB4CHHOCC9vc0Sw+aRYwfowxY8VNL972eXm5m8pKi8Q=
+-----END PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_read_depr_data/dsapublickey.pem b/test/recipes/04-test_pem_read_depr_data/dsapublickey.pem
new file mode 100644
index 000000000000..7d8b88fc97e4
--- /dev/null
+++ b/test/recipes/04-test_pem_read_depr_data/dsapublickey.pem
@@ -0,0 +1,20 @@
+-----BEGIN PUBLIC KEY-----
+MIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCQJVsgRrrvAlhvE8lGYD41hjrsZ+S0
+2CBrFuExov6PJHtTW4+k4Rr+1MGCqXjTOPdb5A5F69Y6OjgQLEKlaa20bzWvX6OG
+Ub9rcGT4IkH4JnD5kLw0FdXjq/Ter4xHcCMs6v+T+yAFptVzojgrogULlmaXBLT7
+wXhW506riUuodlcWnz0AlaIeG09twP6Nhi2sv7cxPuvBAn7kyhdSDN9OckVHmGkG
+6qBi5tMYdzycQb0qRecT3sFqzSFNZpi4t79HAcSFptmLulwWoPbp8IkLreDNPrMr
+vdHYYPSpHA8PSnGH9p27a66HfXgbbLTcWy2dzyrmL81ih8/cuD77TIk1Ah0AyL1a
+7SvEG+rkl75NeWJjKDIprkT8oo7C+yEnaQKCAQBYt1CMAhv8m2fVhk0ZmGuJ/o0I
+fI76rGrYHgCOvDdNQyuYRu1q99agc2SgkJMTXRnNZNmqtVarN/K0rxWcbtdF8x+2
+Mx2JdMqDhqYbzC80ILdq3fpai5ZixnHnQ9Zcc7JGIUQ1yZcOLLO/Pb81xmYogN2U
+gj8kXexOOfYe3OnAAgR24RXVifJj0ToyI/SN4xoe+jnNIcB1JhO7R4FndOHELLJb
+6wgpED3r7IFS0KsY5v5RS7q51UoCPyxq5IGwhssZ/+qvDzq7+pJluqv6R5jqjNKw
+IId4UxQiEbG/hr0TRdwBfStUuBgW2I7kPK5dJEAKYKCYdgCW/KI/4TnEOzg3A4IB
+BQACggEAGkVenUtTdSt8uK1jmc/98IVmMCVG6qijYqdF+0zSrtnY3+cSPXmiZwWS
+qcvs07ILw2zzdXBc5eIG09fjeRA0T7s9Qv+qVymX8EcBEsuTKXSaN2Xnf42J/190
+dMqu5koQkX9xeb5IajGsVqMupjmoASEDMoV/wbLdgtzhCupnRgn6BpesQa+UZY0W
+y5HQYfYmH4DmiPjCXJFB1dNCieDs00cbf+JFxAMIfcsi9azUM2MFREn0Qx9vC25n
+JLzh6pQnOihiuM+VZN0aRvdAqn+X2yjg5srIr/TxnWO3brhc0prbHJRO4eKu1eXA
+1QOteLKdbqIl/kVrvcEpZR8/YOdiaQ==
+-----END PUBLIC KEY-----
diff --git a/test/recipes/04-test_pem_read_depr_data/rsaprivatekey.pem b/test/recipes/04-test_pem_read_depr_data/rsaprivatekey.pem
new file mode 100644
index 000000000000..6510b6bfb831
--- /dev/null
+++ b/test/recipes/04-test_pem_read_depr_data/rsaprivatekey.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDIqX89TliznVAA
+GSBKmk1HNe4xtmRnJFzyBtWfOvE6uY7mymEoj048jRacaXPLG8LRSchBNiB+nVm2
+KEro4ho6mXjHJ+0OXx8UbBDQyloqIpYrBL0I5vBoydNqLwtAocdmmtOzaz6ggzNw
+ZL2oB7tNbmFKfcda9zsDYIHei3vyvb5yzseWjh0T6iA27TkM3wq+xboUiDGkfzdM
+gOsMr7DQrYBUQL6Nj7bnKt0BFuqfBO0ZGwpXCQRDt3KluTa28pVgudJFuU0EQEzz
+bjRYX3KtnN+fTxHIrh1K/uRRO7rngnWLLn1VbGXwsLVxfge2zwRSi352GSd0WiGk
+tZUaOu2dAgMBAAECggEAJ1Q5UR3C+ulRXcOO9bBKhzOFzQ6PnTueT/2Q7xWRZE4s
+OQXfhyCXV/zbOqrcfCmjxHtumYFvWwGiLLa2//AY7fVYm8gyiUeRguIvZYzToUCI
+KERUfKMu6YrtOfmgffl3aJ/d8GOLsdAlS9ki5wUk6+c/gGcopKaiVWYb7i9uisPW
+3zOotzrWQkpUekwnTxTIgyPqY3FzN4NF6zKw1Pk4zQ8TQ7XFoENeF7qQgIsiNdlz
+UdStD9lx0hLof0B2TelNWDjL0IQKHXf4FZy+JoDyotoy3WgFPbowSr3j15cDbA6j
+hdbGIduFNxpuFr6tl/P4VDvfqxqn+qo7+Rym93TeoQKBgQDrrDV58NY07UBb0y/9
+NyyQwvTYMR/q4a2A5RuJkEp7/K3ywWyWpZcxQJYH7ZNJMMmRIi5srTuF1N2UexW5
+MFDZuz9nmHkqy+xCO+mues3PyRjTIf60YFhwH8lEZbBZYJKKlHIYdeG6pGHqZGa6
+gmIKvEmPz8JWKirSJg/TfEcMKQKBgQDZ+DvVZG/UmOPJra/E2S7eCJAFE9IC8LAp
+bhmqmHm9GnkUTd7U5bLrblN1IaG/519t1go74GaP9gVxdyue4ZR0XdPIJFW0iRUr
+/P8yRkJFw5hIhr45xyH/a8dhbiDV1jedOkCraZ+IyXR0+GNydhBLjgCkyjTgDSzO
+ezoc+UFEVQKBgQDTWWO30LD5VA9UigdOaW2RARV80ElUZkEoB87zRjBWEtuYibgt
+PaFibQ5fW8Krb5JEksfZdF2d/rEcGGn54weOy6rn58g6BhkBqSM+8yihgDHAHouC
+DakiHI9txFgrPz0MBGZx4z2lGQgqoRGzj3wHLqY1z1bz2Or//VxSB/DbSQKBgQDG
+etkZJn0CrTn3IvaEHHQl8MwcI4E/9iWjhENQ6ckpHlsU1xfK62LyKSNL7JUaZzip
+jpcBEQSzoIYyXR7WbXk+QVYg0J1OaOljhdxnzjx4xHP9ztyXRjI6IM2Mdbjmn0tD
+G5FZxTNlXnRyMuBzkPijpCoH5K0jPDwJxYIUchAxhQKBgE+Hr8I5gUzrLrhqsS3e
+mcRNNpzJ1jGsrQ8pjd2vGNa3+WCkvSBMj91WCpoIBvYXSX2q6XqDxqbwZogbP/Gs
+XgvrHwX7s4H1r2klreAsblhzFUkQsnhDBhi0HizVNrYeyDHVxfZaSHF4fJT5wPGl
+lNVmVn42G54e1Cq38XWm4A12
+-----END PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_read_depr_data/rsapublickey.pem b/test/recipes/04-test_pem_read_depr_data/rsapublickey.pem
new file mode 100644
index 000000000000..ac2df8a51e63
--- /dev/null
+++ b/test/recipes/04-test_pem_read_depr_data/rsapublickey.pem
@@ -0,0 +1,9 @@
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyKl/PU5Ys51QABkgSppN
+RzXuMbZkZyRc8gbVnzrxOrmO5sphKI9OPI0WnGlzyxvC0UnIQTYgfp1ZtihK6OIa
+Opl4xyftDl8fFGwQ0MpaKiKWKwS9CObwaMnTai8LQKHHZprTs2s+oIMzcGS9qAe7
+TW5hSn3HWvc7A2CB3ot78r2+cs7Hlo4dE+ogNu05DN8KvsW6FIgxpH83TIDrDK+w
+0K2AVEC+jY+25yrdARbqnwTtGRsKVwkEQ7dypbk2tvKVYLnSRblNBEBM8240WF9y
+rZzfn08RyK4dSv7kUTu654J1iy59VWxl8LC1cX4Hts8EUot+dhkndFohpLWVGjrt
+nQIDAQAB
+-----END PUBLIC KEY-----
diff --git a/test/recipes/04-test_pem_read_depr_data/x942params.pem b/test/recipes/04-test_pem_read_depr_data/x942params.pem
new file mode 100644
index 000000000000..f4575d560559
--- /dev/null
+++ b/test/recipes/04-test_pem_read_depr_data/x942params.pem
@@ -0,0 +1,14 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIICLAKCAQEAyT1xEPjk7PmoJKqVWgn//oVibfMGT9eYVcVOBpdvHK5bUPDO2c3Q
+IoClYdbKfiiyAGCTIsykTI+SaY4x3PsK2G5H2kk/+WjY1Qt3D60I0ltGhJZ9HH0Z
+XTZ+XE58MDUPplkVeOiwgZSzUi4Cr6MhkD10ixJfH3TfrZaKsDUV76JeBiXTuYxR
+TUQoeb196h0VvjsbLkAgmNR0y/z/jlxhYrJGulYHAEB1qZzFwR7puja5HkBlrcbP
+Sm79jIrWTP535zHpkPp7HggjBVUTlXm2fEPEy3IxjeS2IZls4jAlU7gBajWTn5x1
+xB8puPwR3bEM3KwOtrOB7LxyeSAi7ZsuDwKCAQBeX1BH6sLltd2PfF/LLl5c87pA
+NIoluZqpx7YTyTwjuKyzbCcl/12AMsXJPsRcOJToZlyfjiWqO0VHEE2BMLEEDV3J
+xnKCGyxqWGDohtJvGnMQtLFG8fIDroY6pGxZvCMcX9lsFhcx6V613Livv9krGpJk
+E6uJeybPYlKxznnsd0C38fF6csGQ6XA5Jk2ZMY4NUDRWKPpYn5R/aUf9QCmXEaQg
+U2tb6a/GldEoB6oKad/2QwoCkzOhSOrVkzNq370hC9kdkY2jS6H+D6Vb1Kht2HvE
+SqoGzlAULgju9EwRHhKQYHjl9Hvf0b6xiy0COstxXi7TlSAXNQ+wvxRdOOVyAiEA
+2Y0jIv7Bg/ezKBIDgHS6DNMiVjpK3IQyKoKMdKiWdLc=
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/04-test_pem_reading.t b/test/recipes/04-test_pem_reading.t
new file mode 100644
index 000000000000..9698289a8b88
--- /dev/null
+++ b/test/recipes/04-test_pem_reading.t
@@ -0,0 +1,118 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+#
+# ======================================================================
+
+
+use strict;
+use warnings;
+
+use File::Compare qw/compare_text/;
+use File::Basename;
+use OpenSSL::Test qw/:DEFAULT srctop_file data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_pem_reading");
+
+my $testsrc = srctop_file("test", "recipes", basename($0));
+
+my $cmd = "openssl";
+
+# map input PEM file to 1 if it should be accepted; 0 when should be rejected
+my %cert_expected = (
+ "cert-1023line.pem" => 1,
+ "cert-1024line.pem" => 1,
+ "cert-1025line.pem" => 1,
+ "cert-254-chars-at-the-end.pem" => 1,
+ "cert-254-chars-in-the-middle.pem" => 1,
+ "cert-255line.pem" => 1,
+ "cert-256line.pem" => 1,
+ "cert-257line.pem" => 1,
+ "cert-blankline.pem" => 0,
+ "cert-bom.pem" => 1,
+ "cert-comment.pem" => 0,
+ "cert-earlypad.pem" => 0,
+ "cert-extrapad.pem" => 0,
+ "cert-infixwhitespace.pem" => 1,
+ "cert-junk.pem" => 0,
+ "cert-leadingwhitespace.pem" => 1,
+ "cert-longline.pem" => 1,
+ "cert-misalignedpad.pem" => 0,
+ "cert-onecolumn.pem" => 1,
+ "cert-oneline.pem" => 1,
+ "cert-oneline-multiple-of-254.pem" => 1,
+ "cert-shortandlongline.pem" => 1,
+ "cert-shortline.pem" => 1,
+ "cert-threecolumn.pem" => 1,
+ "cert-trailingwhitespace.pem" => 1,
+ "cert.pem" => 1
+);
+my %dsa_expected = (
+ "dsa-1023line.pem" => 0,
+ "dsa-1024line.pem" => 0,
+ "dsa-1025line.pem" => 0,
+ "dsa-255line.pem" => 0,
+ "dsa-256line.pem" => 0,
+ "dsa-257line.pem" => 0,
+ "dsa-blankline.pem" => 0,
+ "dsa-comment.pem" => 0,
+ "dsa-corruptedheader.pem" => 0,
+ "dsa-corruptiv.pem" => 0,
+ "dsa-earlypad.pem" => 0,
+ "dsa-extrapad.pem" => 0,
+ "dsa-infixwhitespace.pem" => 0,
+ "dsa-junk.pem" => 0,
+ "dsa-leadingwhitespace.pem" => 0,
+ "dsa-longline.pem" => 0,
+ "dsa-misalignedpad.pem" => 0,
+ "dsa-onecolumn.pem" => 0,
+ "dsa-oneline.pem" => 0,
+ "dsa-onelineheader.pem" => 0,
+ "dsa-shortandlongline.pem" => 0,
+ "dsa-shortline.pem" => 0,
+ "dsa-threecolumn.pem" => 0,
+ "dsa-trailingwhitespace.pem" => 1,
+ "dsa.pem" => 1
+);
+
+plan tests => scalar keys(%cert_expected) + scalar keys(%dsa_expected) + 4;
+
+foreach my $input (keys %cert_expected) {
+ my @common = ($cmd, "x509", "-text", "-noout", "-inform", "PEM", "-in");
+ my @data = run(app([@common, data_file($input)], stderr => undef), capture => 1);
+ my @match = grep /The Great State of Long-Winded Certificate Field Names Whereby to Increase the Output Size/, @data;
+ is((scalar @match > 0 ? 1 : 0), $cert_expected{$input});
+}
+SKIP: {
+ skip "DSA support disabled, skipping...", (scalar keys %dsa_expected) unless !disabled("dsa");
+ foreach my $input (keys %dsa_expected) {
+ my @common = ($cmd, "pkey", "-inform", "PEM", "-passin", "file:" . data_file("wellknown"), "-noout", "-text", "-in");
+ my @data;
+ {
+ local $ENV{MSYS2_ARG_CONV_EXCL} = "file:";
+ @data = run(app([@common, data_file($input)], stderr => undef), capture => 1);
+ }
+ my @match = grep /68:42:02:16:63:54:16:eb:06:5c:ab:06:72:3b:78:/, @data;
+ is((scalar @match > 0 ? 1 : 0), $dsa_expected{$input});
+ }
+}
+
+my @common = ($cmd, "pkey", "-inform", "PEM", "-noout", "-text", "-in");
+my @data = run(app([@common, data_file("beermug.pem")], stderr => undef), capture => 1);
+my @match = grep /00:a0:3a:21:14:5d:cd:b6:d5:a0:3e:49:23:c1:3a:/, @data;
+ok(scalar @match > 0 ? 1 : 0);
+my $certkeycert = srctop_file("test", "certs", "cert-key-cert.pem");
+@data = run(app([@common, $certkeycert], stderr => "outerr.txt"), capture => 1);
+open DATA, "outerr.txt";
+@match = grep /:error:/, <DATA>;
+close DATA;
+ok(scalar @match > 0 ? 0 : 1);
+@match = grep /70:40:4c:20:6a:16:ba:38:b5:c9:b1:4c:b6:b8:db:/, @data;
+ok(scalar @match > 0 ? 1 : 0);
+
+ok(run(test(["pemtest", $certkeycert])), "running pemtest");
diff --git a/test/recipes/04-test_pem_reading_data/NOTES.txt b/test/recipes/04-test_pem_reading_data/NOTES.txt
new file mode 100644
index 000000000000..baafd1560c21
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/NOTES.txt
@@ -0,0 +1,3 @@
+The cert-*.pem and dsa-*.pem files are generated as manipulation of the
+ASCII text of cert.pem and dsa.pem, respectively -- they should decode to the
+same data.
diff --git a/test/recipes/04-test_pem_reading_data/beermug.pem b/test/recipes/04-test_pem_reading_data/beermug.pem
new file mode 100644
index 000000000000..98b04b73256c
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/beermug.pem
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC+qeXl4ZUfQZFmcGAPwdt7Mza4NQ6mJHehc4V/hVYc6eepvL/5
+uyyflzuhVy5ufctdi92FlXcIct5nNPdqK0PPdWH5Uzw0t/OjI5y/SJh8ur20krqw
+j/N1IOs63AcGLIVSkwx89iQbxj+2tV+YxFpGunUYyR/bJJWczuDMA/CujQIDAQAB
+AoGBAKA6IRRdzbbVoD5JI8E6NZtEP7DwDZ57uPk6Hq86u1JTEzcmguJ4dJitPBRr
+Mn7yQgwcNQ5EvCKifdqXvXBAaZuiiPFuCS/gfUw04jVHXWvG8ZvBQC3dutUYnFW7
+hdun8QU/Z6a1BethvESi1J1vgY2+XC4cBIvbutTc9HhMhbQ1AkEA8YTKGsVEYoKE
+d7sSx4qjeN4bgzeVgIwRt01wJ1EJN62LhwO+pYSXvTt14aHxiascejJqUhtuWvzR
+nuwydqiDpwJBAMoYgUoWdgW4O/C5ZXjiSia54jzrt7upxSq88njTRo/MCQfuJVbc
+3GUD+15V0zNhx9D7lcI+1uxhfcD7jWbJEqsCQBrE/SG6e7nvfX9H3O0BEN10wNfq
+cUeuPshybNvuv3bMZYqxf5AZAjiXPpmjuYHo1V8191Lid3jeTN2wkGdWhkECQQCI
+Rj3oV3z+Hl1M1bc27GBT/MQxkEE0qiXpy780+kJ6dHsifdNv3z4+X5EA656e5zB2
+Gy/A697BRnwlxXpz9OJBAkAUe7Ap0yU8aO6g5g+gsH+18bF0MftWh81VLOo09rRp
+SOHxNGGJLE5As5XkCGUZVIass1r8Q4N22Wip0QzeSWDi
+-
+- . * .. . * *
+- * * @()Ooc()* o .
+- (Q@*0CG*O() ___
+- |\_________/|/ _ \
+- | | | | | / | |
+- | | | | | | | |
+- | | | | | | | |
+- | | | | | | | |
+- | | | | | | | |
+- | | | | | \_| |
+- | | | | |\___/
+- |\_|__|__|_/|
+- \_________/
+-
+-----END RSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-1023line.pem b/test/recipes/04-test_pem_reading_data/cert-1023line.pem
new file mode 100644
index 000000000000..7ad3103e30c8
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-1023line.pem
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcNMTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEgj/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF560WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfS
+phwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejv
+N5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7Nk
+ZhSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQY
+JKoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9
+JywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem
+3aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPH
+X30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiV
+ZrvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8I
+AA8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-1024line.pem b/test/recipes/04-test_pem_reading_data/cert-1024line.pem
new file mode 100644
index 000000000000..fd501c2dd1e7
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-1024line.pem
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcNMTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEgj/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF560WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-1025line.pem b/test/recipes/04-test_pem_reading_data/cert-1025line.pem
new file mode 100644
index 000000000000..236922931e8d
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-1025line.pem
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcNMTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEgj/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF560WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSphwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN5
+v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZh
+SC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJK
+oZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9Jy
+wlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3a
+YRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX3
+0YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZr
+vUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IAA
+8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-254-chars-at-the-end.pem b/test/recipes/04-test_pem_reading_data/cert-254-chars-at-the-end.pem
new file mode 100644
index 000000000000..0b6a3ba3ba8d
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-254-chars-at-the-end.pem
@@ -0,0 +1,6 @@
+-----BEGIN CERTIFICATE-----
+MIIEcjCCAyegAwIBAgIUPLgYY73GEwkikNCKRJrcbCR+TbQwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAkFVMWMwYQYDVQQIDFpUaGUgR3JlYXQgU3RhdGUgb2YgTG9uZy1XaW5kZWQgQ2VydGlmaWNhdGUgRmllbGQgTmFtZXMgV2hlcmVieSB0byBJbmNyZWFzZSB0aGUgT3V0cHV0IFNpemUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDA0MDcwMDAwNDJaFw0zMDA0MDUwMDAwNDJaMIGVMQswCQYDVQQGEwJBVTFjMGEGA1UECAxaVGhlIEdyZWF0IFN0YXRlIG9mIExvbmctV2luZGVkIENlcnRpZmljYXRlIEZpZWxkIE5hbWVzIFdoZXJlYnkgdG8gSW5jcmVhc2UgdGhlIE91dHB1dCBTaXplMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggFUMA0GCSqGSIb3DQEBAQUAA4IBQQAwggE8AoIBMwLf
+mipKB41NPXrbp/T5eu+fndvZq72N/Tq0vZp2dRoz89NEFC3jYVBjp4pmVwCS9F/fGX1tnVfhb9k/4fqiI/y9lBVzxaHyMG/pt0D2nTS8iaMTM7uBeRvB5rUZlEbU8uvv4GXu3CeP/NnVceXruGbPb4IpjfoUbGLvn5oK35h8a+LNY5f7QRBlAXtUwYrdxVzT+CqQ4wIAuqoIVXgRIweveS1ArbS8hOtsVnu1bUAQVKqORHx8gtbOyiA4heTCEOkwh45YV6KW+uLI1wTeE4E9erlI4RwZ7umbBnQai/hYL//AUfQKQhpGbgfyJrS0UYY7WEP/mcFQh0U2EBTXtAy/e4XPiftViR3+pd+G2TJ/JFofDDzJRrceeo
+9tUnMr0pKtU7oB77lSKgsruKKkhn6lLH8CAwEAAaNTMFEwHQYDVR0OBBYEFIkawSiFUdL6G3jw8qg1WQI8Xi4rMB8GA1UdIwQYMBaAFIkawSiFUdL6G3jw8qg1WQI8Xi4rMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggE0AAHe/+71vykcq9BQ5h2X7MpnkE5n0Yn0Xi24uuCpv59JjABmOdaeT6XBQ5UJN8WfidawgzbJ6WiWgjflaMfRfjsdCJRgvdw0gfXXXrsseJMeMYnw1hQTGuB83BKjXBdL6zb45qGf2Fgjm3aNW2NUVM+Q2QfMjo
+Kx13hTyDh9l5nOhMv/Rkygcx1Row2WbkvrhxvCLxY0VhL7RuPV8K0ogKicv8VJgQriOUVTTkqBP1xUimKSTaNaZ8KAnC7thxxZHxsNa45a6AouPSzyAOPZQgCJW83OIFxvWsdYU1KvP1wmoi1XC9giSQ/5sLPu/eAYTzmY+Xd6Sq8dF8uyodeI2gFu3AzC28PVKeUriIGfxaqEUn+aXx5W+r8JTE6fQ9mBo9YxJBXG+OTIFgHR27q2dJwqK9c=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-254-chars-in-the-middle.pem b/test/recipes/04-test_pem_reading_data/cert-254-chars-in-the-middle.pem
new file mode 100644
index 000000000000..cc9076b49f48
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-254-chars-in-the-middle.pem
@@ -0,0 +1,5 @@
+-----BEGIN CERTIFICATE-----
+MIIEcjCCAyegAwIBAgIUPLgYY73GEwkikNCKRJrcbCR+TbQwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAkFVMWMwYQYDVQQIDFpUaGUgR3JlYXQgU3RhdGUgb2YgTG9uZy1XaW5kZWQgQ2VydGlmaWNhdGUgRmllbGQgTmFtZXMgV2hlcmVieSB0byBJbmNyZWFzZSB0aGUgT
+3V0cHV0IFNpemUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDA0MDcwMDAwNDJaFw0zMDA0MDUwMDAwNDJaMIGVMQswCQYDVQQGEwJBVTFjMGEGA1UECAxaVGhlIEdyZWF0IFN0YXRlIG9mIExvbmctV2luZGVkIENlcnRpZmljYXRlIEZpZWxkIE5hbWVzIFdoZXJlYnkgdG8gSW5jcmVhc2UgdGhlIE91dHB1dCB
+TaXplMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggFUMA0GCSqGSIb3DQEBAQUAA4IBQQAwggE8AoIBMwLfmipKB41NPXrbp/T5eu+fndvZq72N/Tq0vZp2dRoz89NEFC3jYVBjp4pmVwCS9F/fGX1tnVfhb9k/4fqiI/y9lBVzxaHyMG/pt0D2nTS8iaMTM7uBeRvB5rUZlEbU8uvv4GXu3CeP/NnVceXruGbPb4IpjfoUbGLvn5oK35h8a+LNY5f7QRBlAXtUwYrdxVzT+CqQ4wIAuqoIVXgRIweveS1ArbS8hOtsVnu1bUAQVKqORHx8gtbOyiA4heTCEOkwh45YV6KW+uLI1wTeE4E9erlI4RwZ7umbBnQai/hYL//AUfQKQhpGbgfyJrS0UYY7WEP/mcFQh0U2EBTXtAy/e4XPiftViR3+pd+G2TJ/JFofDDzJRrceeo9tUnMr0pKtU7oB77lSKgsruKKkhn6lLH8CAwEAAaNTMFEwHQYDVR0OBBYEFIkawSiFUdL6G3jw8qg1WQI8Xi4rMB8GA1UdIwQYMBaAFIkawSiFUdL6G3jw8qg1WQI8Xi4rMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggE0AAHe/+71vykcq9BQ5h2X7MpnkE5n0Yn0Xi24uuCpv59JjABmOdaeT6XBQ5UJN8WfidawgzbJ6WiWgjflaMfRfjsdCJRgvdw0gfXXXrsseJMeMYnw1hQTGuB83BKjXBdL6zb45qGf2Fgjm3aNW2NUVM+Q2QfMjoKx13hTyDh9l5nOhMv/Rkygcx1Row2WbkvrhxvCLxY0VhL7RuPV8K0ogKicv8VJgQriOUVTTkqBP1xUimKSTaNaZ8KAnC7thxxZHxsNa45a6AouPSzyAOPZQgCJW83OIFxvWsdYU1KvP1wmoi1XC9giSQ/5sLPu/eAYTzmY+Xd6Sq8dF8uyodeI2gFu3AzC28PVKeUriIGfxaqEUn+aXx5W+r8JTE6fQ9mBo9YxJBXG+OTIFgHR27q2dJwqK9c=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-255line.pem b/test/recipes/04-test_pem_reading_data/cert-255line.pem
new file mode 100644
index 000000000000..d7fd1f131342
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-255line.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcml
+waHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdml
+kZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhc
+NMTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSB
+HcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1
+lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBww
+WVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQ
+gU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2l
+zMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWF
+yeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSq
+GSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2ME
+gj/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF5
+60WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfS
+phwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejv
+N5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7Nk
+ZhSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQY
+JKoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9
+JywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem
+3aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPH
+X30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiV
+ZrvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8I
+AA8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-256line.pem b/test/recipes/04-test_pem_reading_data/cert-256line.pem
new file mode 100644
index 000000000000..225bdb6f6f03
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-256line.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-257line.pem b/test/recipes/04-test_pem_reading_data/cert-257line.pem
new file mode 100644
index 000000000000..414b03684cb0
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-257line.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwa
+HJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZ
+W50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcNM
+TcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBHc
+mVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lc
+yBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWV
+G9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU
+29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lzM
+T0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFye
+SBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqGS
+Ib3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEgj
+/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF560
+WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSph
+wmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN5
+v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZh
+SC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJK
+oZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9Jy
+wlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3a
+YRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX3
+0YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZr
+vUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IAA
+8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-blankline.pem b/test/recipes/04-test_pem_reading_data/cert-blankline.pem
new file mode 100644
index 000000000000..3f252886f6be
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-blankline.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-bom.pem b/test/recipes/04-test_pem_reading_data/cert-bom.pem
new file mode 100644
index 000000000000..91fbaf402447
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-bom.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-comment.pem b/test/recipes/04-test_pem_reading_data/cert-comment.pem
new file mode 100644
index 000000000000..a1a493e3b4c6
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-comment.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+-MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-earlypad.pem b/test/recipes/04-test_pem_reading_data/cert-earlypad.pem
new file mode 100644
index 000000000000..adb445ed2355
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-earlypad.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+====ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-extrapad.pem b/test/recipes/04-test_pem_reading_data/cert-extrapad.pem
new file mode 100644
index 000000000000..0b89aa2ebd73
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-extrapad.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=====
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-infixwhitespace.pem b/test/recipes/04-test_pem_reading_data/cert-infixwhitespace.pem
new file mode 100644
index 000000000000..f7e912ae16aa
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-infixwhitespace.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4R q/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182C CXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-junk.pem b/test/recipes/04-test_pem_reading_data/cert-junk.pem
new file mode 100644
index 000000000000..5377e269c646
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-junk.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+!"#$%&()
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-leadingwhitespace.pem b/test/recipes/04-test_pem_reading_data/cert-leadingwhitespace.pem
new file mode 100644
index 000000000000..6de4d48d4fb4
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-leadingwhitespace.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+ MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+ WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+ A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+ b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+ aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+ MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+ cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+ cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+ VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+ U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+ MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+ eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+ j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+ 0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+ hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+ 5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+ hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+ KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+ aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+ 30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+ rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+ A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-longline.pem b/test/recipes/04-test_pem_reading_data/cert-longline.pem
new file mode 100644
index 000000000000..7304481712b7
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-longline.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IAA
+8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-misalignedpad.pem b/test/recipes/04-test_pem_reading_data/cert-misalignedpad.pem
new file mode 100644
index 000000000000..caca6e57d5e7
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-misalignedpad.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII==
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-onecolumn.pem b/test/recipes/04-test_pem_reading_data/cert-onecolumn.pem
new file mode 100644
index 000000000000..77eebbf603e9
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-onecolumn.pem
@@ -0,0 +1,1646 @@
+-----BEGIN CERTIFICATE-----
+M
+I
+I
+E
+z
+D
+C
+C
+A
+7
+Q
+C
+C
+Q
+C
+g
+x
+k
+R
+o
+x
++
+Y
+l
+j
+j
+A
+N
+B
+g
+k
+q
+h
+k
+i
+G
+9
+w
+0
+B
+A
+Q
+s
+F
+A
+D
+C
+C
+A
+S
+Y
+x
+Y
+z
+B
+h
+B
+g
+N
+V
+B
+A
+g
+M
+W
+l
+R
+o
+Z
+S
+B
+H
+c
+m
+V
+h
+d
+C
+B
+T
+d
+G
+F
+0
+Z
+S
+B
+v
+Z
+i
+B
+M
+b
+2
+5
+n
+L
+V
+d
+p
+b
+m
+R
+l
+Z
+C
+B
+D
+Z
+X
+J
+0
+a
+W
+Z
+p
+Y
+2
+F
+0
+Z
+S
+B
+G
+a
+W
+V
+s
+Z
+C
+B
+O
+Y
+W
+1
+l
+c
+y
+B
+X
+a
+G
+V
+y
+Z
+W
+J
+5
+I
+H
+R
+v
+I
+E
+l
+u
+Y
+3
+J
+l
+Y
+X
+N
+l
+I
+H
+R
+o
+Z
+S
+B
+P
+d
+X
+R
+w
+d
+X
+Q
+g
+U
+2
+l
+6
+Z
+T
+E
+f
+M
+B
+0
+G
+A
+1
+U
+E
+B
+w
+w
+W
+V
+G
+9
+v
+b
+W
+F
+u
+e
+W
+N
+o
+Y
+X
+J
+h
+Y
+3
+R
+l
+c
+n
+N
+2
+a
+W
+x
+s
+Z
+T
+F
+I
+M
+E
+Y
+G
+A
+1
+U
+E
+C
+g
+w
+/
+V
+G
+h
+l
+I
+E
+J
+l
+b
+m
+V
+2
+b
+2
+x
+l
+b
+n
+Q
+g
+U
+2
+9
+j
+a
+W
+V
+0
+e
+S
+B
+v
+Z
+i
+B
+M
+b
+3
+F
+1
+Y
+W
+N
+p
+b
+3
+V
+z
+I
+G
+F
+u
+Z
+C
+B
+Q
+b
+G
+V
+v
+b
+m
+F
+z
+d
+G
+l
+j
+I
+F
+B
+l
+c
+m
+l
+w
+a
+H
+J
+h
+c
+2
+l
+z
+M
+T
+0
+w
+O
+w
+Y
+D
+V
+Q
+Q
+L
+D
+D
+R
+F
+b
+m
+R
+v
+c
+n
+N
+l
+b
+W
+V
+u
+d
+C
+B
+v
+Z
+i
+B
+W
+b
+3
+V
+j
+a
+H
+N
+h
+Z
+m
+U
+n
+Z
+C
+B
+F
+d
+m
+l
+k
+Z
+W
+5
+0
+a
+W
+F
+y
+e
+S
+B
+D
+Z
+X
+J
+0
+a
+W
+Z
+p
+Y
+2
+F
+0
+a
+W
+9
+u
+M
+R
+U
+w
+E
+w
+Y
+D
+V
+Q
+Q
+D
+D
+A
+x
+j
+Z
+X
+J
+0
+L
+m
+V
+4
+Y
+W
+1
+w
+b
+G
+U
+w
+H
+h
+c
+N
+M
+T
+c
+w
+M
+j
+I
+z
+M
+j
+A
+y
+N
+T
+M
+2
+W
+h
+c
+N
+M
+T
+c
+w
+M
+z
+I
+1
+M
+j
+A
+y
+N
+T
+M
+2
+W
+j
+C
+C
+A
+S
+Y
+x
+Y
+z
+B
+h
+B
+g
+N
+V
+B
+A
+g
+M
+W
+l
+R
+o
+Z
+S
+B
+H
+c
+m
+V
+h
+d
+C
+B
+T
+d
+G
+F
+0
+Z
+S
+B
+v
+Z
+i
+B
+M
+b
+2
+5
+n
+L
+V
+d
+p
+b
+m
+R
+l
+Z
+C
+B
+D
+Z
+X
+J
+0
+a
+W
+Z
+p
+Y
+2
+F
+0
+Z
+S
+B
+G
+a
+W
+V
+s
+Z
+C
+B
+O
+Y
+W
+1
+l
+c
+y
+B
+X
+a
+G
+V
+y
+Z
+W
+J
+5
+I
+H
+R
+v
+I
+E
+l
+u
+Y
+3
+J
+l
+Y
+X
+N
+l
+I
+H
+R
+o
+Z
+S
+B
+P
+d
+X
+R
+w
+d
+X
+Q
+g
+U
+2
+l
+6
+Z
+T
+E
+f
+M
+B
+0
+G
+A
+1
+U
+E
+B
+w
+w
+W
+V
+G
+9
+v
+b
+W
+F
+u
+e
+W
+N
+o
+Y
+X
+J
+h
+Y
+3
+R
+l
+c
+n
+N
+2
+a
+W
+x
+s
+Z
+T
+F
+I
+M
+E
+Y
+G
+A
+1
+U
+E
+C
+g
+w
+/
+V
+G
+h
+l
+I
+E
+J
+l
+b
+m
+V
+2
+b
+2
+x
+l
+b
+n
+Q
+g
+U
+2
+9
+j
+a
+W
+V
+0
+e
+S
+B
+v
+Z
+i
+B
+M
+b
+3
+F
+1
+Y
+W
+N
+p
+b
+3
+V
+z
+I
+G
+F
+u
+Z
+C
+B
+Q
+b
+G
+V
+v
+b
+m
+F
+z
+d
+G
+l
+j
+I
+F
+B
+l
+c
+m
+l
+w
+a
+H
+J
+h
+c
+2
+l
+z
+M
+T
+0
+w
+O
+w
+Y
+D
+V
+Q
+Q
+L
+D
+D
+R
+F
+b
+m
+R
+v
+c
+n
+N
+l
+b
+W
+V
+u
+d
+C
+B
+v
+Z
+i
+B
+W
+b
+3
+V
+j
+a
+H
+N
+h
+Z
+m
+U
+n
+Z
+C
+B
+F
+d
+m
+l
+k
+Z
+W
+5
+0
+a
+W
+F
+y
+e
+S
+B
+D
+Z
+X
+J
+0
+a
+W
+Z
+p
+Y
+2
+F
+0
+a
+W
+9
+u
+M
+R
+U
+w
+E
+w
+Y
+D
+V
+Q
+Q
+D
+D
+A
+x
+j
+Z
+X
+J
+0
+L
+m
+V
+4
+Y
+W
+1
+w
+b
+G
+U
+w
+g
+g
+E
+i
+M
+A
+0
+G
+C
+S
+q
+G
+S
+I
+b
+3
+D
+Q
+E
+B
+A
+Q
+U
+A
+A
+4
+I
+B
+D
+w
+A
+w
+g
+g
+E
+K
+A
+o
+I
+B
+A
+Q
+C
+7
+M
+O
+I
+r
+q
+H
++
+Z
+I
+J
+i
+Z
+d
+r
+o
+K
+M
+r
+e
+l
+K
+M
+S
+v
+v
+R
+K
+g
+2
+M
+E
+g
+j
+/
+s
+x
+9
+T
+a
+H
+H
+q
+r
+K
+y
+s
+4
+A
+i
+L
+4
+R
+q
+/
+y
+b
+Q
+E
+i
+g
+F
+C
+6
+G
+8
+m
+p
+Z
+W
+b
+B
+r
+U
++
+v
+N
+2
+S
+L
+r
+1
+Z
+s
+P
+f
+t
+C
+H
+I
+Y
+1
+2
+L
+F
+5
+6
+0
+W
+L
+Y
+T
+Y
+N
+q
+D
+g
+F
+5
+B
+d
+C
+Z
+C
+r
+j
+J
+2
+h
+h
+N
++
+X
+w
+M
+L
+2
+t
+g
+Y
+d
+W
+i
+o
+V
+/
+E
+e
+y
+8
+S
+J
+S
+q
+U
+s
+k
+f
+0
+3
+M
+p
+c
+w
+n
+L
+b
+V
+f
+S
+p
+h
+w
+m
+o
+w
+q
+N
+f
+i
+E
+F
+F
+q
+P
+B
+C
+f
+7
+E
+8
+I
+V
+a
+r
+G
+W
+c
+t
+b
+M
+p
+v
+l
+M
+b
+A
+M
+5
+o
+w
+h
+M
+e
+v
+/
+C
+c
+m
+q
+q
+t
+8
+1
+N
+F
+k
+b
+1
+W
+V
+e
+j
+v
+N
+5
+v
+/
+J
+K
+v
+2
+4
+3
+/
+X
+e
+d
+f
+4
+I
+7
+Z
+J
+v
+7
+z
+K
+e
+s
+w
+o
+P
+9
+p
+i
+F
+z
+W
+H
+X
+C
+d
+9
+S
+I
+V
+z
+W
+q
+F
+7
+7
+u
+/
+c
+r
+H
+u
+f
+I
+h
+o
+E
+a
+7
+N
+k
+Z
+h
+S
+C
+2
+a
+o
+s
+Q
+F
+6
+1
+9
+i
+K
+n
+f
+k
+0
+n
+q
+W
+a
+L
+D
+J
+1
+8
+2
+C
+C
+X
+k
+H
+E
+R
+o
+Q
+C
+7
+q
+9
+X
+2
+I
+G
+L
+D
+L
+o
+A
+0
+X
+A
+g
+M
+B
+A
+A
+E
+w
+D
+Q
+Y
+J
+K
+o
+Z
+I
+h
+v
+c
+N
+A
+Q
+E
+L
+B
+Q
+A
+D
+g
+g
+E
+B
+A
+K
+b
+t
+L
+x
++
+Y
+l
+C
+G
+R
+C
+B
+m
+Y
+n
+3
+d
+f
+Y
+F
++
+B
+I
+v
+K
+/
+b
+/
+e
+0
+D
+K
+N
+h
+D
+K
+h
+b
+4
+s
+9
+J
+y
+w
+l
+J
+4
+q
+n
+A
+B
+4
+8
+t
+g
+P
+x
+0
+q
++
+Z
+B
++
+E
+d
+M
+Y
+R
+q
+C
+w
+y
+v
+X
+J
+x
+E
+d
+Z
+7
+P
+s
+C
+d
+U
+e
+U
+6
+x
+I
+2
+y
+b
+k
+h
+S
+d
+U
+U
+f
+Q
+b
+Y
+e
+m
+3
+a
+Y
+R
+G
++
+y
+u
+k
+G
+z
+a
+z
+y
+S
+Q
+J
+s
+8
+l
+G
+q
+x
+B
+l
+R
+M
+F
+l
+/
+F
+G
+C
+g
++
+o
+S
+Q
+/
+I
+3
+2
+e
+G
+f
+8
+m
+i
+c
+D
+s
+k
+j
+2
+z
+k
+A
+J
+t
+C
+k
+U
+P
+H
+X
+3
+0
+Y
+r
+W
+M
+f
+O
+w
+W
+1
+r
+2
+x
+Y
+r
+2
+m
+B
+N
+X
+b
+N
+W
+X
+J
+h
+W
+/
+s
+I
+g
+5
+u
+8
+a
+a
+9
+f
+c
+A
+L
+e
+u
+Q
+c
+M
+X
+k
+b
+s
+b
+V
+o
+P
+m
+C
+5
+a
+L
+d
+i
+V
+Z
+r
+v
+U
+F
+o
+J
+8
+D
+P
+g
+0
+a
+Y
+Y
+w
+j
+6
+4
+R
+w
+U
+0
+B
+5
+H
+W
+/
+7
+j
+K
+h
+Q
+2
+5
+F
+g
+K
+V
+A
+z
+L
+G
+r
+g
+Y
+x
+1
+D
+i
+v
+k
+M
+7
+U
+Q
+G
+d
+W
+Y
+n
+U
+8
+I
+A
+A
+8
+S
+8
+9
+g
+R
+j
+G
+k
+2
+h
+n
+k
+e
+a
+g
+W
+a
+s
+3
+d
+x
+q
+T
+T
+p
+g
+J
+D
+h
+p
+r
+g
+W
+z
+y
+K
+a
+9
+h
+I
+I
+=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-oneline-multiple-of-254.pem b/test/recipes/04-test_pem_reading_data/cert-oneline-multiple-of-254.pem
new file mode 100644
index 000000000000..e0af85959d3e
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-oneline-multiple-of-254.pem
@@ -0,0 +1,3 @@
+-----BEGIN CERTIFICATE-----
+MIIEcjCCAyegAwIBAgIUPLgYY73GEwkikNCKRJrcbCR+TbQwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAkFVMWMwYQYDVQQIDFpUaGUgR3JlYXQgU3RhdGUgb2YgTG9uZy1XaW5kZWQgQ2VydGlmaWNhdGUgRmllbGQgTmFtZXMgV2hlcmVieSB0byBJbmNyZWFzZSB0aGUgT3V0cHV0IFNpemUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDA0MDcwMDAwNDJaFw0zMDA0MDUwMDAwNDJaMIGVMQswCQYDVQQGEwJBVTFjMGEGA1UECAxaVGhlIEdyZWF0IFN0YXRlIG9mIExvbmctV2luZGVkIENlcnRpZmljYXRlIEZpZWxkIE5hbWVzIFdoZXJlYnkgdG8gSW5jcmVhc2UgdGhlIE91dHB1dCBTaXplMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggFUMA0GCSqGSIb3DQEBAQUAA4IBQQAwggE8AoIBMwLfmipKB41NPXrbp/T5eu+fndvZq72N/Tq0vZp2dRoz89NEFC3jYVBjp4pmVwCS9F/fGX1tnVfhb9k/4fqiI/y9lBVzxaHyMG/pt0D2nTS8iaMTM7uBeRvB5rUZlEbU8uvv4GXu3CeP/NnVceXruGbPb4IpjfoUbGLvn5oK35h8a+LNY5f7QRBlAXtUwYrdxVzT+CqQ4wIAuqoIVXgRIweveS1ArbS8hOtsVnu1bUAQVKqORHx8gtbOyiA4heTCEOkwh45YV6KW+uLI1wTeE4E9erlI4RwZ7umbBnQai/hYL//AUfQKQhpGbgfyJrS0UYY7WEP/mcFQh0U2EBTXtAy/e4XPiftViR3+pd+G2TJ/JFofDDzJRrceeo9tUnMr0pKtU7oB77lSKgsruKKkhn6lLH8CAwEAAaNTMFEwHQYDVR0OBBYEFIkawSiFUdL6G3jw8qg1WQI8Xi4rMB8GA1UdIwQYMBaAFIkawSiFUdL6G3jw8qg1WQI8Xi4rMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggE0AAHe/+71vykcq9BQ5h2X7MpnkE5n0Yn0Xi24uuCpv59JjABmOdaeT6XBQ5UJN8WfidawgzbJ6WiWgjflaMfRfjsdCJRgvdw0gfXXXrsseJMeMYnw1hQTGuB83BKjXBdL6zb45qGf2Fgjm3aNW2NUVM+Q2QfMjoKx13hTyDh9l5nOhMv/Rkygcx1Row2WbkvrhxvCLxY0VhL7RuPV8K0ogKicv8VJgQriOUVTTkqBP1xUimKSTaNaZ8KAnC7thxxZHxsNa45a6AouPSzyAOPZQgCJW83OIFxvWsdYU1KvP1wmoi1XC9giSQ/5sLPu/eAYTzmY+Xd6Sq8dF8uyodeI2gFu3AzC28PVKeUriIGfxaqEUn+aXx5W+r8JTE6fQ9mBo9YxJBXG+OTIFgHR27q2dJwqK9c=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-oneline.pem b/test/recipes/04-test_pem_reading_data/cert-oneline.pem
new file mode 100644
index 000000000000..70121fbbcb64
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-oneline.pem
@@ -0,0 +1,3 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgMWlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcNMTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEgj/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF560WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSphwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZhSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9JywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZrvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IAA8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-shortandlongline.pem b/test/recipes/04-test_pem_reading_data/cert-shortandlongline.pem
new file mode 100644
index 000000000000..1681e240965c
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-shortandlongline.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiV
+ZrvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-shortline.pem b/test/recipes/04-test_pem_reading_data/cert-shortline.pem
new file mode 100644
index 000000000000..3c5d2e5bd20b
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-shortline.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiV
+ZrvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8I
+AA8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-threecolumn.pem b/test/recipes/04-test_pem_reading_data/cert-threecolumn.pem
new file mode 100644
index 000000000000..eb5503cd87d2
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-threecolumn.pem
@@ -0,0 +1,550 @@
+-----BEGIN CERTIFICATE-----
+MII
+EzD
+CCA
+7QC
+CQC
+gxk
+Rox
++Yl
+jjA
+NBg
+kqh
+kiG
+9w0
+BAQ
+sFA
+DCC
+ASY
+xYz
+BhB
+gNV
+BAg
+MWl
+RoZ
+SBH
+cmV
+hdC
+BTd
+GF0
+ZSB
+vZi
+BMb
+25n
+LVd
+pbm
+RlZ
+CBD
+ZXJ
+0aW
+ZpY
+2F0
+ZSB
+GaW
+VsZ
+CBO
+YW1
+lcy
+BXa
+GVy
+ZWJ
+5IH
+RvI
+Elu
+Y3J
+lYX
+NlI
+HRo
+ZSB
+PdX
+Rwd
+XQg
+U2l
+6ZT
+EfM
+B0G
+A1U
+EBw
+wWV
+G9v
+bWF
+ueW
+NoY
+XJh
+Y3R
+lcn
+N2a
+Wxs
+ZTF
+IME
+YGA
+1UE
+Cgw
+/VG
+hlI
+EJl
+bmV
+2b2
+xlb
+nQg
+U29
+jaW
+V0e
+SBv
+ZiB
+Mb3
+F1Y
+WNp
+b3V
+zIG
+FuZ
+CBQ
+bGV
+vbm
+Fzd
+Glj
+IFB
+lcm
+lwa
+HJh
+c2l
+zMT
+0wO
+wYD
+VQQ
+LDD
+RFb
+mRv
+cnN
+lbW
+Vud
+CBv
+ZiB
+Wb3
+Vja
+HNh
+ZmU
+nZC
+BFd
+mlk
+ZW5
+0aW
+Fye
+SBD
+ZXJ
+0aW
+ZpY
+2F0
+aW9
+uMR
+UwE
+wYD
+VQQ
+DDA
+xjZ
+XJ0
+LmV
+4YW
+1wb
+GUw
+Hhc
+NMT
+cwM
+jIz
+MjA
+yNT
+M2W
+hcN
+MTc
+wMz
+I1M
+jAy
+NTM
+2Wj
+CCA
+SYx
+YzB
+hBg
+NVB
+AgM
+WlR
+oZS
+BHc
+mVh
+dCB
+TdG
+F0Z
+SBv
+ZiB
+Mb2
+5nL
+Vdp
+bmR
+lZC
+BDZ
+XJ0
+aWZ
+pY2
+F0Z
+SBG
+aWV
+sZC
+BOY
+W1l
+cyB
+XaG
+VyZ
+WJ5
+IHR
+vIE
+luY
+3Jl
+YXN
+lIH
+RoZ
+SBP
+dXR
+wdX
+QgU
+2l6
+ZTE
+fMB
+0GA
+1UE
+Bww
+WVG
+9vb
+WFu
+eWN
+oYX
+JhY
+3Rl
+cnN
+2aW
+xsZ
+TFI
+MEY
+GA1
+UEC
+gw/
+VGh
+lIE
+Jlb
+mV2
+b2x
+lbn
+QgU
+29j
+aWV
+0eS
+BvZ
+iBM
+b3F
+1YW
+Npb
+3Vz
+IGF
+uZC
+BQb
+GVv
+bmF
+zdG
+ljI
+FBl
+cml
+waH
+Jhc
+2lz
+MT0
+wOw
+YDV
+QQL
+DDR
+Fbm
+Rvc
+nNl
+bWV
+udC
+BvZ
+iBW
+b3V
+jaH
+NhZ
+mUn
+ZCB
+Fdm
+lkZ
+W50
+aWF
+yeS
+BDZ
+XJ0
+aWZ
+pY2
+F0a
+W9u
+MRU
+wEw
+YDV
+QQD
+DAx
+jZX
+J0L
+mV4
+YW1
+wbG
+Uwg
+gEi
+MA0
+GCS
+qGS
+Ib3
+DQE
+BAQ
+UAA
+4IB
+DwA
+wgg
+EKA
+oIB
+AQC
+7MO
+Irq
+H+Z
+IJi
+Zdr
+oKM
+rel
+KMS
+vvR
+Kg2
+MEg
+j/s
+x9T
+aHH
+qrK
+ys4
+AiL
+4Rq
+/yb
+QEi
+gFC
+6G8
+mpZ
+WbB
+rU+
+vN2
+SLr
+1Zs
+Pft
+CHI
+Y12
+LF5
+60W
+LYT
+YNq
+DgF
+5Bd
+CZC
+rjJ
+2hh
+N+X
+wML
+2tg
+YdW
+ioV
+/Ee
+y8S
+JSq
+Usk
+f03
+Mpc
+wnL
+bVf
+Sph
+wmo
+wqN
+fiE
+FFq
+PBC
+f7E
+8IV
+arG
+Wct
+bMp
+vlM
+bAM
+5ow
+hMe
+v/C
+cmq
+qt8
+1NF
+kb1
+WVe
+jvN
+5v/
+JKv
+243
+/Xe
+df4
+I7Z
+Jv7
+zKe
+swo
+P9p
+iFz
+WHX
+Cd9
+SIV
+zWq
+F77
+u/c
+rHu
+fIh
+oEa
+7Nk
+ZhS
+C2a
+osQ
+F61
+9iK
+nfk
+0nq
+WaL
+DJ1
+82C
+CXk
+HER
+oQC
+7q9
+X2I
+GLD
+LoA
+0XA
+gMB
+AAE
+wDQ
+YJK
+oZI
+hvc
+NAQ
+ELB
+QAD
+ggE
+BAK
+btL
+x+Y
+lCG
+RCB
+mYn
+3df
+YF+
+BIv
+K/b
+/e0
+DKN
+hDK
+hb4
+s9J
+ywl
+J4q
+nAB
+48t
+gPx
+0q+
+ZB+
+EdM
+YRq
+Cwy
+vXJ
+xEd
+Z7P
+sCd
+UeU
+6xI
+2yb
+khS
+dUU
+fQb
+Yem
+3aY
+RG+
+yuk
+Gza
+zyS
+QJs
+8lG
+qxB
+lRM
+Fl/
+FGC
+g+o
+SQ/
+I32
+eGf
+8mi
+cDs
+kj2
+zkA
+JtC
+kUP
+HX3
+0Yr
+WMf
+OwW
+1r2
+xYr
+2mB
+NXb
+NWX
+JhW
+/sI
+g5u
+8aa
+9fc
+ALe
+uQc
+MXk
+bsb
+VoP
+mC5
+aLd
+iVZ
+rvU
+FoJ
+8DP
+g0a
+YYw
+j64
+RwU
+0B5
+HW/
+7jK
+hQ2
+5Fg
+KVA
+zLG
+rgY
+x1D
+ivk
+M7U
+QGd
+WYn
+U8I
+AA8
+S89
+gRj
+Gk2
+hnk
+eag
+Was
+3dx
+qTT
+pgJ
+Dhp
+rgW
+zyK
+a9h
+II=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert-trailingwhitespace.pem b/test/recipes/04-test_pem_reading_data/cert-trailingwhitespace.pem
new file mode 100644
index 000000000000..ab0dfe85b7c0
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert-trailingwhitespace.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/cert.pem b/test/recipes/04-test_pem_reading_data/cert.pem
new file mode 100644
index 000000000000..99ddf079a499
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/cert.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzDCCA7QCCQCgxkRox+YljjANBgkqhkiG9w0BAQsFADCCASYxYzBhBgNVBAgM
+WlRoZSBHcmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVs
+ZCBOYW1lcyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0G
+A1UEBwwWVG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2
+b2xlbnQgU29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlw
+aHJhc2lzMT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlk
+ZW50aWFyeSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwHhcN
+MTcwMjIzMjAyNTM2WhcNMTcwMzI1MjAyNTM2WjCCASYxYzBhBgNVBAgMWlRoZSBH
+cmVhdCBTdGF0ZSBvZiBMb25nLVdpbmRlZCBDZXJ0aWZpY2F0ZSBGaWVsZCBOYW1l
+cyBXaGVyZWJ5IHRvIEluY3JlYXNlIHRoZSBPdXRwdXQgU2l6ZTEfMB0GA1UEBwwW
+VG9vbWFueWNoYXJhY3RlcnN2aWxsZTFIMEYGA1UECgw/VGhlIEJlbmV2b2xlbnQg
+U29jaWV0eSBvZiBMb3F1YWNpb3VzIGFuZCBQbGVvbmFzdGljIFBlcmlwaHJhc2lz
+MT0wOwYDVQQLDDRFbmRvcnNlbWVudCBvZiBWb3VjaHNhZmUnZCBFdmlkZW50aWFy
+eSBDZXJ0aWZpY2F0aW9uMRUwEwYDVQQDDAxjZXJ0LmV4YW1wbGUwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7MOIrqH+ZIJiZdroKMrelKMSvvRKg2MEg
+j/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN2SLr1ZsPftCHIY12LF56
+0WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8SJSqUskf03MpcwnLbVfSp
+hwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev/Ccmqqt81NFkb1WVejvN
+5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzWqF77u/crHufIhoEa7NkZ
+hSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2IGLDLoA0XAgMBAAEwDQYJ
+KoZIhvcNAQELBQADggEBAKbtLx+YlCGRCBmYn3dfYF+BIvK/b/e0DKNhDKhb4s9J
+ywlJ4qnAB48tgPx0q+ZB+EdMYRqCwyvXJxEdZ7PsCdUeU6xI2ybkhSdUUfQbYem3
+aYRG+yukGzazySQJs8lGqxBlRMFl/FGCg+oSQ/I32eGf8micDskj2zkAJtCkUPHX
+30YrWMfOwW1r2xYr2mBNXbNWXJhW/sIg5u8aa9fcALeuQcMXkbsbVoPmC5aLdiVZ
+rvUFoJ8DPg0aYYwj64RwU0B5HW/7jKhQ25FgKVAzLGrgYx1DivkM7UQGdWYnU8IA
+A8S89gRjGk2hnkeagWas3dxqTTpgJDhprgWzyKa9hII=
+-----END CERTIFICATE-----
diff --git a/test/recipes/04-test_pem_reading_data/csr.pem b/test/recipes/04-test_pem_reading_data/csr.pem
new file mode 100644
index 000000000000..02a966d3bd36
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/csr.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIDbTCCAlUCAQAwggEmMWMwYQYDVQQIDFpUaGUgR3JlYXQgU3RhdGUgb2YgTG9u
+Zy1XaW5kZWQgQ2VydGlmaWNhdGUgRmllbGQgTmFtZXMgV2hlcmVieSB0byBJbmNy
+ZWFzZSB0aGUgT3V0cHV0IFNpemUxHzAdBgNVBAcMFlRvb21hbnljaGFyYWN0ZXJz
+dmlsbGUxSDBGBgNVBAoMP1RoZSBCZW5ldm9sZW50IFNvY2lldHkgb2YgTG9xdWFj
+aW91cyBhbmQgUGxlb25hc3RpYyBQZXJpcGhyYXNpczE9MDsGA1UECww0RW5kb3Jz
+ZW1lbnQgb2YgVm91Y2hzYWZlJ2QgRXZpZGVudGlhcnkgQ2VydGlmaWNhdGlvbjEV
+MBMGA1UEAwwMY2VydC5leGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAuzDiK6h/mSCYmXa6CjK3pSjEr70SoNjBII/7MfU2hx6qysrOAIi+Eav8
+m0BIoBQuhvJqWVmwa1Przdki69WbD37QhyGNdixeetFi2E2Dag4BeQXQmQq4ydoY
+Tfl8DC9rYGHVoqFfxHsvEiUqlLJH9NzKXMJy21X0qYcJqMKjX4hBRajwQn+xPCFW
+qxlnLWzKb5TGwDOaMITHr/wnJqqrfNTRZG9VlXo7zeb/ySr9uN/13nX+CO2Sb+8y
+nrMKD/aYhc1h1wnfUiFc1qhe+7v3Kx7nyIaBGuzZGYUgtmqLEBetfYip35NJ6lmi
+wydfNggl5BxEaEAu6vV9iBiwy6ANFwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEB
+ADgIOZ6OL8SDAGcDTkHuE7d9xOIeiidMU2JU1Dxxk7iZh6JAHxjdgwwUew0nDdPR
+74u84uGzecotX9MByAhmCflhwN+aTQcntxY1R44uAmeE0WJLrCYWQIKHh27YI/2y
+9mMHX9srTtL+Ggrs7s1WLzcFitDpUWB4B+9a+KGJ0fbWPpjNcxDwwjSEiKwzHhpv
+3PdTU2eC5/uvu1BoU4ms//JftvbWlTwHqf4J4P/FZeeOwoTay5d0K5qWDs9hEexP
+m9wRUnCc8L7xPElYvIC9mpgMFvwJ3xMOpE1qAh7WSeAlTX6wE0WvxgCwhgEExISQ
+vRMcwsXoc5VthqU/E8fc9ls=
+-----END CERTIFICATE REQUEST-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-1023line.pem b/test/recipes/04-test_pem_reading_data/dsa-1023line.pem
new file mode 100644
index 000000000000..0e5c01a1fc13
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-1023line.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GMwcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7oupdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQheiSC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+FJf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTGAa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369Kq2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYXzj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mDoH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90mOgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaB
+Io15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws
+6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-1024line.pem b/test/recipes/04-test_pem_reading_data/dsa-1024line.pem
new file mode 100644
index 000000000000..185a029fb12b
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-1024line.pem
@@ -0,0 +1,8 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GMwcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7oupdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQheiSC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+FJf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTGAa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369Kq2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYXzj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mDoH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90mOgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-1025line.pem b/test/recipes/04-test_pem_reading_data/dsa-1025line.pem
new file mode 100644
index 000000000000..fa449c9c35c6
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-1025line.pem
@@ -0,0 +1,8 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GMwcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7oupdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQheiSC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+FJf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTGAa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369Kq2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYXzj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mDoH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90mOgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBIo
+15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-255line.pem b/test/recipes/04-test_pem_reading_data/dsa-255line.pem
new file mode 100644
index 000000000000..36a5b1237526
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-255line.pem
@@ -0,0 +1,21 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTGAa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369Kq2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCER
+n9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBY
+Xzj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70m
+DoH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90
+mOgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaB
+Io15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws
+6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-256line.pem b/test/recipes/04-test_pem_reading_data/dsa-256line.pem
new file mode 100644
index 000000000000..6ba6c397ba4b
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-256line.pem
@@ -0,0 +1,20 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+FJf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-257line.pem b/test/recipes/04-test_pem_reading_data/dsa-257line.pem
new file mode 100644
index 000000000000..a73d70054df9
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-257line.pem
@@ -0,0 +1,20 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYXzj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mDoH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90mOgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBIo
+15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-blankline.pem b/test/recipes/04-test_pem_reading_data/dsa-blankline.pem
new file mode 100644
index 000000000000..6f46e27df171
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-blankline.pem
@@ -0,0 +1,24 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-comment.pem b/test/recipes/04-test_pem_reading_data/dsa-comment.pem
new file mode 100644
index 000000000000..bb96ec46874b
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-comment.pem
@@ -0,0 +1,24 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+-vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-corruptedheader.pem b/test/recipes/04-test_pem_reading_data/dsa-corruptedheader.pem
new file mode 100644
index 000000000000..7ed4261e860e
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-corruptedheader.pem
@@ -0,0 +1,23 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCARPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-corruptiv.pem b/test/recipes/04-test_pem_reading_data/dsa-corruptiv.pem
new file mode 100644
index 000000000000..233e201d74cb
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-corruptiv.pem
@@ -0,0 +1,23 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E464B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-earlypad.pem b/test/recipes/04-test_pem_reading_data/dsa-earlypad.pem
new file mode 100644
index 000000000000..9f14e3b92f71
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-earlypad.pem
@@ -0,0 +1,23 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+====gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-extrapad.pem b/test/recipes/04-test_pem_reading_data/dsa-extrapad.pem
new file mode 100644
index 000000000000..182397374e29
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-extrapad.pem
@@ -0,0 +1,24 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+====
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-infixwhitespace.pem b/test/recipes/04-test_pem_reading_data/dsa-infixwhitespace.pem
new file mode 100644
index 000000000000..5755265d797a
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-infixwhitespace.pem
@@ -0,0 +1,23 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bqu wukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxz WfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-junk.pem b/test/recipes/04-test_pem_reading_data/dsa-junk.pem
new file mode 100644
index 000000000000..0836c45c1ab6
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-junk.pem
@@ -0,0 +1,24 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+!"#$%&()
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-leadingwhitespace.pem b/test/recipes/04-test_pem_reading_data/dsa-leadingwhitespace.pem
new file mode 100644
index 000000000000..8bbf26170bfa
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-leadingwhitespace.pem
@@ -0,0 +1,23 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+ EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+ gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+ wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+ 3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+ pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+ SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+ UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+ Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+ vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+ 2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+ Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+ q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+ 4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+ 9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+ zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+ oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+ OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+ o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-longline.pem b/test/recipes/04-test_pem_reading_data/dsa-longline.pem
new file mode 100644
index 000000000000..75973ef290cd
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-longline.pem
@@ -0,0 +1,23 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBIo
+15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-misalignedpad.pem b/test/recipes/04-test_pem_reading_data/dsa-misalignedpad.pem
new file mode 100644
index 000000000000..ad8c366d68e9
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-misalignedpad.pem
@@ -0,0 +1,24 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+=
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-onecolumn.pem b/test/recipes/04-test_pem_reading_data/dsa-onecolumn.pem
new file mode 100644
index 000000000000..61b8ed52c14a
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-onecolumn.pem
@@ -0,0 +1,1157 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+E
+B
+D
+W
+X
+0
+Q
+f
+a
+r
+l
++
+Q
+N
+s
+H
+g
+C
+U
+u
+d
+L
+y
+b
+6
+D
+k
+C
+4
+z
+y
+a
+D
+U
+/
+v
+U
+q
+W
+y
+H
+X
+0
+m
++
+8
+W
+2
+b
+b
+m
+T
+5
+T
+e
+x
+l
+L
+3
+h
+s
+M
+5
+U
+g
+z
+7
+K
+s
+G
+q
+y
+j
+e
+O
+u
+K
+9
+Q
+T
+5
+L
+O
+M
+4
+V
+y
+K
+6
+B
+g
+m
+h
+q
+p
+Q
+a
+J
+1
+M
+g
+C
+W
+A
+/
+g
+b
+B
+P
+T
+g
+B
+p
+2
+j
+f
+p
+3
+o
+S
+0
+W
+C
+5
+D
+6
+G
+M
+w
+c
+s
+d
+q
+o
+e
+I
+p
+D
+/
+w
+c
+e
+3
+k
+0
+H
+2
+G
+f
+u
+6
++
+r
+I
+N
+B
+m
+b
+I
+T
+t
+n
+4
+D
+T
+f
+3
+P
+k
+O
+c
+D
+I
+w
+d
+D
+c
+e
+N
+2
+q
+k
+Z
+a
+n
+l
+o
+F
+V
+r
+i
+S
+3
+k
+A
+B
+U
+I
+h
+1
+e
+h
+Y
+I
+X
+Q
+i
+b
+L
+R
+F
+Y
+5
+r
+X
+d
+Q
+n
+h
+Y
+2
+C
+Z
+N
+r
+Q
+F
+I
+M
+w
+l
+6
+4
+h
+K
+5
+P
+5
+h
+Q
+b
+c
+y
+J
+K
+G
+D
+H
+A
+Y
+z
+X
+V
+7
+o
+u
+p
+d
+X
+y
+5
+F
+9
+o
+y
+E
+d
+6
+e
+A
+5
+i
+x
++
+n
+1
+j
+K
+F
+R
+B
+7
+P
+m
+A
+p
+Z
+m
+u
+i
+Q
+j
+z
+f
+E
+x
+V
+K
+m
+B
+P
+G
+x
+R
+z
+O
+G
+T
+0
+q
+R
+5
+v
+L
+y
+l
+Q
+h
+e
+i
+S
+C
+7
+7
+n
+k
+e
+r
+a
+w
+U
+y
+j
+A
+2
+Q
+l
+I
+a
+/
+S
+m
+N
+z
+X
+E
+Y
+k
+N
+3
+g
+o
+D
+z
+H
+S
+F
+K
+B
+a
+u
+B
+0
+o
+5
+q
+F
+c
+1
+b
+1
+x
+7
+d
+X
+P
+C
+F
+L
+0
+a
+t
+G
+5
+U
+x
+o
+R
+r
+/
+E
+p
+7
+t
+i
+a
+b
+4
+D
+Z
+m
+Y
+E
+n
+O
+G
+k
+L
+2
+d
+V
+N
+8
+j
+A
+0
+4
+F
++
+H
+Q
+G
+B
+e
+P
+6
+n
+D
+O
+S
+K
+h
+X
+R
+j
+b
+U
+O
+D
+U
+p
+D
+p
+D
+v
+j
++
+F
+J
+f
+7
+7
+R
+v
+0
+p
+4
+8
+l
+9
+i
+p
+8
+i
+/
+b
+q
+u
+w
+u
+k
+X
+l
+M
+e
+d
+3
+O
+4
+d
+6
+r
+n
+E
+w
+k
+g
+g
+d
+y
+S
+S
+5
+i
+t
+i
+S
+h
+w
+a
+V
+L
+P
+f
++
+i
+c
+I
+/
+Y
+d
+4
+v
+c
+P
+X
+D
+P
+U
+H
+T
+k
+j
+1
+X
+m
+o
+Z
+4
+f
+1
+m
+U
+F
+1
+7
+O
+t
+C
+o
+h
+s
+J
+T
+7
+O
+4
+o
+M
+B
+B
+M
+B
+w
+q
+C
+k
+C
+7
+e
+n
+r
+L
+a
+A
+L
+i
+9
+j
+i
+K
+y
+m
+4
+7
+g
+2
+b
+Z
+H
+0
+5
+x
+J
+P
+p
+W
+X
+S
+/
+k
+S
+E
+k
+w
+t
+/
+j
+I
++
+a
++
+o
+4
+C
+u
+D
+P
+l
+y
+3
+X
+h
+I
+c
+Y
+R
+t
+s
+a
+W
+B
+J
+W
+i
+a
+m
+1
+O
+T
+7
+s
+G
+Q
++
+z
+k
+j
+T
+G
+A
+a
+6
+N
+f
+w
+b
+R
+8
+S
+c
+Q
+C
+8
+M
+z
+D
+f
+V
+n
+k
+J
+3
+V
+n
+X
+j
+T
+3
+4
+5
+b
+z
++
+F
+7
+H
+T
+A
+v
+e
+Q
+8
+a
+7
+K
+G
+x
+N
+n
+t
+P
+h
+E
+0
+K
+V
+j
+p
+l
+3
+6
+9
+K
+q
+2
+T
+M
+L
+y
+e
+x
+Q
+A
+R
+J
+a
+p
+a
+b
+B
+f
+/
+S
+T
+9
+z
+W
+P
+7
+w
+x
+z
+W
+f
+r
+E
+b
+X
+3
+O
+E
+Z
+C
+u
+R
+D
+V
+k
+w
+W
+f
+1
+8
+B
+H
+/
+E
+h
+6
+L
+q
+n
+q
+g
+5
+Q
+M
+4
+G
+u
+X
+7
+0
+8
+N
+i
+F
+p
+i
+w
+Q
+t
+9
+p
+/
+D
+A
+u
+Q
+d
+h
+B
+r
+P
+6
+7
+B
+x
+L
+6
+4
+C
+b
+I
+7
+C
+g
+W
+4
+L
+v
+3
+z
+3
+q
+n
+K
+f
+F
+V
+9
+z
+Y
+5
+/
+m
+x
+C
+E
+R
+n
+9
+m
+P
+O
+i
+g
+2
+r
+8
+W
+v
+v
+X
+t
+7
+c
+h
+6
+n
+h
+z
+B
+P
+f
+C
+w
+q
+0
+B
+o
+P
+q
+L
+K
+U
+F
+g
+D
+p
+e
+X
+s
+N
+d
+J
+9
+s
+W
+5
+I
+V
+3
+y
+i
+/
+3
+B
+h
+9
+8
+Z
+B
+Y
+X
+z
+j
+8
+g
+/
+7
+X
+M
+o
+6
+v
+9
+9
+8
+f
+c
+t
++
+E
+i
+H
+P
+s
+c
+u
+q
+e
+Y
+U
+a
+o
+J
+Z
+6
++
+Z
+j
+7
+W
+4
+5
+n
+G
+A
+9
+D
+G
+s
+n
+E
+m
+Z
+0
+W
+u
+x
+2
+t
+T
+j
+7
+0
+m
+D
+o
+H
+/
+/
+2
+1
+T
+i
+R
+A
+x
+6
+y
+p
+P
+P
++
+I
+q
+2
+Y
+D
+z
+q
+h
+7
+V
+X
+c
+/
+g
+s
+s
+O
+n
+/
+v
+U
+1
+A
+j
+1
+9
+g
+z
+L
++
+M
+R
+n
+1
+Z
+5
+5
+S
+M
+r
+A
+7
+n
+O
+9
+0
+m
+O
+g
+O
+y
+E
+P
++
+u
+G
+r
+X
+y
+a
+h
+f
+Z
+G
+P
+b
+m
+p
+g
+I
+x
++
+M
+T
+b
+t
+f
+v
+R
+t
+Z
+B
+s
+G
+3
+E
+c
+X
+y
+W
+9
+N
+n
+H
+J
+f
+k
+4
+O
+8
+x
+N
+3
+h
+Y
+P
+W
+X
+a
+B
+I
+o
+1
+5
+q
+B
+3
+j
+Y
+b
+x
+1
+o
+k
+t
+b
+c
+Q
+P
+o
+0
+h
+z
+a
+N
+v
++
+P
+J
+5
+w
+t
+T
+4
+7
+J
+L
+N
+c
+b
+M
+e
+M
+S
+n
+w
+K
+M
+8
+M
+B
+4
+C
+X
+l
+M
+4
+3
+R
+U
+t
+K
+w
+s
+6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-oneline.pem b/test/recipes/04-test_pem_reading_data/dsa-oneline.pem
new file mode 100644
index 000000000000..176f1e8035fb
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-oneline.pem
@@ -0,0 +1,6 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5Ugz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GMwcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7oupdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQheiSC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+FJf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTGAa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369Kq2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYXzj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mDoH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90mOgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBIo15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-onelineheader.pem b/test/recipes/04-test_pem_reading_data/dsa-onelineheader.pem
new file mode 100644
index 000000000000..d07095b8e7a8
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-onelineheader.pem
@@ -0,0 +1,22 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-shortandlongline.pem b/test/recipes/04-test_pem_reading_data/dsa-shortandlongline.pem
new file mode 100644
index 000000000000..b9a8333d84bc
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-shortandlongline.pem
@@ -0,0 +1,23 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90mO
+gOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-shortline.pem b/test/recipes/04-test_pem_reading_data/dsa-shortline.pem
new file mode 100644
index 000000000000..6da1ab7c611f
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-shortline.pem
@@ -0,0 +1,24 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaB
+Io15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws
+6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-threecolumn.pem b/test/recipes/04-test_pem_reading_data/dsa-threecolumn.pem
new file mode 100644
index 000000000000..e6fcc535cf64
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-threecolumn.pem
@@ -0,0 +1,389 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBD
+WX0
+Qfa
+rl+
+QNs
+HgC
+Uud
+Lyb
+6Dk
+C4z
+yaD
+U/v
+UqW
+yHX
+0m+
+8W2
+bbm
+T5T
+exl
+L3h
+sM5
+Ugz
+7Ks
+Gqy
+jeO
+uK9
+QT5
+LOM
+4Vy
+K6B
+gmh
+qpQ
+aJ1
+MgC
+WA/
+gbB
+PTg
+Bp2
+jfp
+3oS
+0WC
+5D6
+GMw
+csd
+qoe
+IpD
+/wc
+e3k
+0H2
+Gfu
+6+r
+INB
+mbI
+Ttn
+4DT
+f3P
+kOc
+DIw
+dDc
+eN2
+qkZ
+anl
+oFV
+riS
+3kA
+BUI
+h1e
+hYI
+XQi
+bLR
+FY5
+rXd
+Qnh
+Y2C
+ZNr
+QFI
+Mwl
+64h
+K5P
+5hQ
+bcy
+JKG
+DHA
+YzX
+V7o
+upd
+Xy5
+F9o
+yEd
+6eA
+5ix
++n1
+jKF
+RB7
+PmA
+pZm
+uiQ
+jzf
+ExV
+KmB
+PGx
+RzO
+GT0
+qR5
+vLy
+lQh
+eiS
+C77
+nke
+raw
+Uyj
+A2Q
+lIa
+/Sm
+NzX
+EYk
+N3g
+oDz
+HSF
+KBa
+uB0
+o5q
+Fc1
+b1x
+7dX
+PCF
+L0a
+tG5
+Uxo
+Rr/
+Ep7
+tia
+b4D
+ZmY
+EnO
+GkL
+2dV
+N8j
+A04
+F+H
+QGB
+eP6
+nDO
+SKh
+XRj
+bUO
+DUp
+DpD
+vj+
+FJf
+77R
+v0p
+48l
+9ip
+8i/
+bqu
+wuk
+XlM
+ed3
+O4d
+6rn
+Ewk
+ggd
+ySS
+5it
+iSh
+waV
+LPf
++ic
+I/Y
+d4v
+cPX
+DPU
+HTk
+j1X
+moZ
+4f1
+mUF
+17O
+tCo
+hsJ
+T7O
+4oM
+BBM
+Bwq
+CkC
+7en
+rLa
+ALi
+9ji
+Kym
+47g
+2bZ
+H05
+xJP
+pWX
+S/k
+SEk
+wt/
+jI+
+a+o
+4Cu
+DPl
+y3X
+hIc
+YRt
+saW
+BJW
+iam
+1OT
+7sG
+Q+z
+kjT
+GAa
+6Nf
+wbR
+8Sc
+QC8
+MzD
+fVn
+kJ3
+VnX
+jT3
+45b
+z+F
+7HT
+Ave
+Q8a
+7KG
+xNn
+tPh
+E0K
+Vjp
+l36
+9Kq
+2TM
+Lye
+xQA
+RJa
+pab
+Bf/
+ST9
+zWP
+7wx
+zWf
+rEb
+X3O
+EZC
+uRD
+Vkw
+Wf1
+8BH
+/Eh
+6Lq
+nqg
+5QM
+4Gu
+X70
+8Ni
+Fpi
+wQt
+9p/
+DAu
+Qdh
+BrP
+67B
+xL6
+4Cb
+I7C
+gW4
+Lv3
+z3q
+nKf
+FV9
+zY5
+/mx
+CER
+n9m
+POi
+g2r
+8Wv
+vXt
+7ch
+6nh
+zBP
+fCw
+q0B
+oPq
+LKU
+FgD
+peX
+sNd
+J9s
+W5I
+V3y
+i/3
+Bh9
+8ZB
+YXz
+j8g
+/7X
+Mo6
+v99
+8fc
+t+E
+iHP
+scu
+qeY
+Uao
+JZ6
++Zj
+7W4
+5nG
+A9D
+Gsn
+EmZ
+0Wu
+x2t
+Tj7
+0mD
+oH/
+/21
+TiR
+Ax6
+ypP
+P+I
+q2Y
+Dzq
+h7V
+Xc/
+gss
+On/
+vU1
+Aj1
+9gz
+L+M
+Rn1
+Z55
+SMr
+A7n
+O90
+mOg
+OyE
+P+u
+GrX
+yah
+fZG
+Pbm
+pgI
+x+M
+Tbt
+fvR
+tZB
+sG3
+EcX
+yW9
+NnH
+Jfk
+4O8
+xN3
+hYP
+WXa
+BIo
+15q
+B3j
+Ybx
+1ok
+tbc
+QPo
+0hz
+aNv
++PJ
+5wt
+T47
+JLN
+cbM
+eMS
+nwK
+M8M
+B4C
+XlM
+43R
+UtK
+ws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa-trailingwhitespace.pem b/test/recipes/04-test_pem_reading_data/dsa-trailingwhitespace.pem
new file mode 100644
index 000000000000..0b5de58c4cfb
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa-trailingwhitespace.pem
@@ -0,0 +1,23 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsa.pem b/test/recipes/04-test_pem_reading_data/dsa.pem
new file mode 100644
index 000000000000..78ebd1b70289
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsa.pem
@@ -0,0 +1,23 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,A2A7FA3E5E454B59C8777564E7AF3CD6
+
+EBDWX0Qfarl+QNsHgCUudLyb6DkC4zyaDU/vUqWyHX0m+8W2bbmT5TexlL3hsM5U
+gz7KsGqyjeOuK9QT5LOM4VyK6BgmhqpQaJ1MgCWA/gbBPTgBp2jfp3oS0WC5D6GM
+wcsdqoeIpD/wce3k0H2Gfu6+rINBmbITtn4DTf3PkOcDIwdDceN2qkZanloFVriS
+3kABUIh1ehYIXQibLRFY5rXdQnhY2CZNrQFIMwl64hK5P5hQbcyJKGDHAYzXV7ou
+pdXy5F9oyEd6eA5ix+n1jKFRB7PmApZmuiQjzfExVKmBPGxRzOGT0qR5vLylQhei
+SC77nkerawUyjA2QlIa/SmNzXEYkN3goDzHSFKBauB0o5qFc1b1x7dXPCFL0atG5
+UxoRr/Ep7tiab4DZmYEnOGkL2dVN8jA04F+HQGBeP6nDOSKhXRjbUODUpDpDvj+F
+Jf77Rv0p48l9ip8i/bquwukXlMed3O4d6rnEwkggdySS5itiShwaVLPf+icI/Yd4
+vcPXDPUHTkj1XmoZ4f1mUF17OtCohsJT7O4oMBBMBwqCkC7enrLaALi9jiKym47g
+2bZH05xJPpWXS/kSEkwt/jI+a+o4CuDPly3XhIcYRtsaWBJWiam1OT7sGQ+zkjTG
+Aa6NfwbR8ScQC8MzDfVnkJ3VnXjT345bz+F7HTAveQ8a7KGxNntPhE0KVjpl369K
+q2TMLyexQARJapabBf/ST9zWP7wxzWfrEbX3OEZCuRDVkwWf18BH/Eh6Lqnqg5QM
+4GuX708NiFpiwQt9p/DAuQdhBrP67BxL64CbI7CgW4Lv3z3qnKfFV9zY5/mxCERn
+9mPOig2r8WvvXt7ch6nhzBPfCwq0BoPqLKUFgDpeXsNdJ9sW5IV3yi/3Bh98ZBYX
+zj8g/7XMo6v998fct+EiHPscuqeYUaoJZ6+Zj7W45nGA9DGsnEmZ0Wux2tTj70mD
+oH//21TiRAx6ypPP+Iq2YDzqh7VXc/gssOn/vU1Aj19gzL+MRn1Z55SMrA7nO90m
+OgOyEP+uGrXyahfZGPbmpgIx+MTbtfvRtZBsG3EcXyW9NnHJfk4O8xN3hYPWXaBI
+o15qB3jYbx1oktbcQPo0hzaNv+PJ5wtT47JLNcbMeMSnwKM8MB4CXlM43RUtKws6
+-----END DSA PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/dsaparam.pem b/test/recipes/04-test_pem_reading_data/dsaparam.pem
new file mode 100644
index 000000000000..60563cbb039d
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/dsaparam.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEArjV9Th2W4p8AlmBabk0HjaV8vPmt15/V6e6mM1Hee3LSdapxd/Fj
++7bsWroNcqIaHGS45YkJbclvC3/Szp/vh1q2Zy/v7utZ9V7/qCiEnls3CRGAfAhc
+1eFIS9Jo+z+fK2tsDUgbGoDC6xEbN3nWjItyPmelBQ5Bip41ULTSQCdr/eBka1s4
+QpS1Sdrvbng3zTCJw0VQe5yM5xyYcHFdeV/v6JSFUz7voyzOGqt91l4UzVFUiZ13
+5Pgi8DUQdQVxUU+MTFwNLCy+bDTuEoKHAxkGEqiq9A08ScxwWtgy7jJQhXDoGP10
+gFMyV+5Qya7rrrYiMhZrjFna7h0z30yiPQIhAK0tbhew8+vHuO6VePIX9TMBZ7ze
+k//uQOh/8ZNtS4cTAoIBAGZv2mOljtJM1UUtdl1fzUq0GkI1hjpvqfonq94DITYK
+BynJL21JqPfG9JLXc8HYdg5hpwtulrjIyzg1EiB5pQgoNVy8UhavUroPw7FjEicL
+dKRHQ9YwuJwuQBTNmX/ojjewqT9U6WYiYUz4SQNXFDIdNz3ikviOoGpmY/Cwbgcr
+Pb/QhGqqHzB3ZeX89exVznPbvqeNOp967U+vooBMMJ4oSWVA8ANFVpmikxucRt69
+qKtfkD+3P9RvjVow4dRjOmp8jyT82RQoCeSEThdDVrjUS6IpRdMT8MJ2mwGggG6T
+Y16HJCAq/7ufqJlsp5oAuX3aZsnAcnIiDxrMI9m3Xxs=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/04-test_pem_reading_data/key.pem b/test/recipes/04-test_pem_reading_data/key.pem
new file mode 100644
index 000000000000..8de7e65a6ded
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7MOIrqH+ZIJiZ
+droKMrelKMSvvRKg2MEgj/sx9TaHHqrKys4AiL4Rq/ybQEigFC6G8mpZWbBrU+vN
+2SLr1ZsPftCHIY12LF560WLYTYNqDgF5BdCZCrjJ2hhN+XwML2tgYdWioV/Eey8S
+JSqUskf03MpcwnLbVfSphwmowqNfiEFFqPBCf7E8IVarGWctbMpvlMbAM5owhMev
+/Ccmqqt81NFkb1WVejvN5v/JKv243/Xedf4I7ZJv7zKeswoP9piFzWHXCd9SIVzW
+qF77u/crHufIhoEa7NkZhSC2aosQF619iKnfk0nqWaLDJ182CCXkHERoQC7q9X2I
+GLDLoA0XAgMBAAECggEAcEBMIGoWuji1ybFMtrjbL4tXBxuWhCX3ChPNSpQFctmN
+Cba7+c4GTIqaHG9cHcJ8dCgCZjpGdNYKXZKMQmgBaDVfzujr76WDsprFb3hsCbkE
+YRJ/mIa5cTH7ySaGoLf+5/lDJxcmWqiT/YmUEz8lr0yHfUCNp8HPyalUvYKafbos
+5BiXs8lr4XQ/vxL0CtVQx+5T8pmgU6CmP1jjgBqV4Y9RPewSmPNhxKAqm82JYMND
+9evNHNpZmDpwTMygwwL0oJ0DV0nq0uqzuk1ORcp7YIph7IFGcdi4n7Y4Y2U6B8Ok
+ITY684qpcXgy+qO1A8AwDEJ34wiIWb8Mi8S84KdTIQKBgQDhHmCdpWKzwLETlHQR
+V9wT3ulySmxG0t8kSgNOFRVUZNXQ0ij2v8rOJ7R0QzJ+kCqvdxJ5QHNlUFKkOFMA
+SnSy098iEz5skwRhHof7ZNa3U6oRRSauUcZcThWL+z14nhTIC1m99KpACV6fl3jj
+MVEYYpG6n7jZ0wKUGMStxT1q9QKBgQDU3pOgNLnFasMIujvXI3ARSK6xIpkBTq89
+n6pmn9XeMWs/H6wQRO5wpUXbg+/3/d4tnezrDG9Lg5aPV8ca/zJ7IP8iNyLnhiUY
+c9O6hKAW1fxddt9megzBDvsBgRzhytnv3OSpM+idgtsJ7Tvkevmt4K5j6gitpJpb
+1A1erknoWwKBgCM5zKZ+bZ5xBYRp02uvUtmtJNxkduLyNkaIalH6jJbjHG4LpKtP
+wZ1Wqy8SIMGbL4K7YCGnCyeMVRIrWhmOjQo6iwza9AarTqEf1OlqkwqmxdLj/jSC
+yUZCVa7MxoasPdY7qHRH56gTj0HrwtfSLL1jFyibu6IiGaIw6f3DAmRNAoGAL2sx
+iYOVSnPg5GXQBLnBMih1ucHSQadMhDa4F8pNMwThNhuREcK5NuCqMh8u6phj0NeY
+Ojf35uN2O5I7KTll/mW4T9/mZ5rLUqoipS78FnoukId1dneDtdHnektPqsCsUbFs
+QoDstYG713dAW0JFskUVs+4jZsL/G6ueGtRKZHcCgYEA27sBEJtHGLAgEUGSlwSA
+acmaIlKpF3EMImgWhlzRN3JC7+z8HJAhoHTxQUdnWfJt2Xl4Z+WmXvv+E7U9ofH7
+kH8fbLcaxwvylPm4hAMlhtL3EqnRDSL4hfZHBrqqf3C0Kv+C8naNxzeCNG6iHxcp
+3c7vY4BXTz0dGBGHml6qu5Y=
+-----END PRIVATE KEY-----
diff --git a/test/recipes/04-test_pem_reading_data/wellknown b/test/recipes/04-test_pem_reading_data/wellknown
new file mode 100644
index 000000000000..632e28f36d51
--- /dev/null
+++ b/test/recipes/04-test_pem_reading_data/wellknown
@@ -0,0 +1 @@
+wellknown
diff --git a/test/recipes/04-test_provfetch.t b/test/recipes/04-test_provfetch.t
new file mode 100644
index 000000000000..11da15ce3f41
--- /dev/null
+++ b/test/recipes/04-test_provfetch.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_provfetch", "provfetchtest");
diff --git a/test/recipes/04-test_provider.t b/test/recipes/04-test_provider.t
new file mode 100644
index 000000000000..1233cc4f93a1
--- /dev/null
+++ b/test/recipes/04-test_provider.t
@@ -0,0 +1,28 @@
+#! /usr/bin/env perl
+# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw(:DEFAULT bldtop_dir);
+use OpenSSL::Test::Utils;
+
+setup("test_provider");
+
+plan tests => 3;
+
+ok(run(test(['provider_test'])), "provider_test");
+
+$ENV{"OPENSSL_MODULES"} = bldtop_dir("test");
+
+ok(run(test(['provider_test', '-loaded'])), "provider_test -loaded");
+
+ SKIP: {
+ skip "no module support", 1 if disabled("module");
+
+ ok(run(app(['openssl', 'list', '-provider', 'p_minimal',
+ '-providers', '-verbose'])));
+}
diff --git a/test/recipes/04-test_provider_fallback.t b/test/recipes/04-test_provider_fallback.t
new file mode 100644
index 000000000000..6322c25b0cfc
--- /dev/null
+++ b/test/recipes/04-test_provider_fallback.t
@@ -0,0 +1,18 @@
+#! /usr/bin/env perl
+# Copyright 2019-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
+
+use strict;
+use File::Spec;
+use OpenSSL::Test::Simple;
+
+# We must ensure that OPENSSL_CONF points at an empty file. Otherwise, we
+# risk that the configuration file contains statements that load providers,
+# which defeats the purpose of this test. The NUL device is good enough.
+$ENV{OPENSSL_CONF} = File::Spec->devnull();
+
+simple_test("test_provider_fallback", "provider_fallback_test");
diff --git a/test/recipes/04-test_provider_pkey.t b/test/recipes/04-test_provider_pkey.t
new file mode 100644
index 000000000000..f593ac572502
--- /dev/null
+++ b/test/recipes/04-test_provider_pkey.t
@@ -0,0 +1,18 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use File::Spec;
+use OpenSSL::Test::Simple;
+
+# We must ensure that OPENSSL_CONF points at an empty file. Otherwise, we
+# risk that the configuration file contains statements that load providers,
+# which defeats the purpose of this test. The NUL device is good enough.
+$ENV{OPENSSL_CONF} = File::Spec->devnull();
+
+simple_test("test_provider_pkey", "provider_pkey_test");
diff --git a/test/recipes/04-test_punycode.t b/test/recipes/04-test_punycode.t
new file mode 100644
index 000000000000..de213c7e15ac
--- /dev/null
+++ b/test/recipes/04-test_punycode.t
@@ -0,0 +1,11 @@
+#! /usr/bin/env perl
+# Copyright 2022 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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_punycode", "punycode_test");
diff --git a/test/recipes/04-test_upcalls.t b/test/recipes/04-test_upcalls.t
new file mode 100644
index 000000000000..3e7ea1775af6
--- /dev/null
+++ b/test/recipes/04-test_upcalls.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_upcalls");
+
+simple_test("test_upcalls", "upcallstest");
diff --git a/test/recipes/05-test_bf.t b/test/recipes/05-test_bf.t
new file mode 100644
index 000000000000..3b8424b22465
--- /dev/null
+++ b/test/recipes/05-test_bf.t
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_bf");
+
+plan skip_all => "Low-level Blowfish APIs are disabled in this build"
+ if disabled('deprecated-3.0');
+
+simple_test("test_bf", "bftest", "bf");
diff --git a/test/recipes/05-test_cast.t b/test/recipes/05-test_cast.t
new file mode 100644
index 000000000000..b59d1be1d5a6
--- /dev/null
+++ b/test/recipes/05-test_cast.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_cast");
+
+plan skip_all => "Low-level CAST APIs are disabled in this build"
+ if disabled('deprecated-3.0');
+
+simple_test("test_cast", "casttest", "cast");
diff --git a/test/recipes/05-test_cmac.t b/test/recipes/05-test_cmac.t
new file mode 100644
index 000000000000..da4272c7bd46
--- /dev/null
+++ b/test/recipes/05-test_cmac.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_cmac", "cmactest", "cmac");
diff --git a/test/recipes/05-test_des.t b/test/recipes/05-test_des.t
new file mode 100644
index 000000000000..800a6d057c24
--- /dev/null
+++ b/test/recipes/05-test_des.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_des", "destest", "des");
diff --git a/test/recipes/05-test_hmac.t b/test/recipes/05-test_hmac.t
new file mode 100644
index 000000000000..b93d5a442554
--- /dev/null
+++ b/test/recipes/05-test_hmac.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_hmac", "hmactest");
diff --git a/test/recipes/05-test_idea.t b/test/recipes/05-test_idea.t
new file mode 100644
index 000000000000..1b0fe3532e6b
--- /dev/null
+++ b/test/recipes/05-test_idea.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_idea", "ideatest", "idea");
diff --git a/test/recipes/05-test_pbe.t b/test/recipes/05-test_pbe.t
new file mode 100644
index 000000000000..c26e2e9a8f18
--- /dev/null
+++ b/test/recipes/05-test_pbe.t
@@ -0,0 +1,28 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file bldtop_dir/;
+use Cwd qw(abs_path);
+
+setup("test_pbe");
+
+plan skip_all => "PKCS5 PBE only available in legacy provider"
+ if disabled("legacy");
+
+plan tests => 1;
+
+$ENV{OPENSSL_CONF} = abs_path(srctop_file("test", "default-and-legacy.cnf"));
+
+ok(run(test((["pbetest"]))), "Running PBE test");
+
diff --git a/test/recipes/05-test_rand.t b/test/recipes/05-test_rand.t
new file mode 100644
index 000000000000..aa012c1907ad
--- /dev/null
+++ b/test/recipes/05-test_rand.t
@@ -0,0 +1,40 @@
+#! /usr/bin/env perl
+# Copyright 2015-2023 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
+
+use strict;
+use warnings;
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+plan tests => 5;
+setup("test_rand");
+
+ok(run(test(["rand_test"])));
+ok(run(test(["drbgtest"])));
+ok(run(test(["rand_status_test"])));
+
+SKIP: {
+ skip "engine is not supported by this OpenSSL build", 2
+ if disabled("engine") || disabled("dynamic-engine");
+
+ my $success;
+ my @randdata;
+ my $expected = '0102030405060708090a0b0c0d0e0f10';
+
+ @randdata = run(app(['openssl', 'rand', '-engine', 'ossltest', '-hex', '16' ]),
+ capture => 1, statusvar => \$success);
+ chomp(@randdata);
+ ok($success && $randdata[0] eq $expected,
+ "rand with ossltest: Check rand output is as expected");
+
+ @randdata = run(app(['openssl', 'rand', '-engine', 'dasync', '-hex', '16' ]),
+ capture => 1, statusvar => \$success);
+ chomp(@randdata);
+ ok($success && length($randdata[0]) == 32,
+ "rand with dasync: Check rand output is of expected length");
+}
diff --git a/test/recipes/05-test_rc2.t b/test/recipes/05-test_rc2.t
new file mode 100644
index 000000000000..3e4f7bc3ce11
--- /dev/null
+++ b/test/recipes/05-test_rc2.t
@@ -0,0 +1,11 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_rc2", "rc2test", "rc2");
diff --git a/test/recipes/05-test_rc4.t b/test/recipes/05-test_rc4.t
new file mode 100644
index 000000000000..50f67079dd17
--- /dev/null
+++ b/test/recipes/05-test_rc4.t
@@ -0,0 +1,11 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_rc4", "rc4test", "rc4");
diff --git a/test/recipes/05-test_rc5.t b/test/recipes/05-test_rc5.t
new file mode 100644
index 000000000000..9fa7f22db75b
--- /dev/null
+++ b/test/recipes/05-test_rc5.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_rc5", "rc5test", "rc5");
diff --git a/test/recipes/06-test_algorithmid.t b/test/recipes/06-test_algorithmid.t
new file mode 100644
index 000000000000..8b98efe90961
--- /dev/null
+++ b/test/recipes/06-test_algorithmid.t
@@ -0,0 +1,60 @@
+#! /usr/bin/env perl
+
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+
+use OpenSSL::Test qw(:DEFAULT srctop_file);
+use OpenSSL::Test::Utils;
+
+setup("test_algorithmid");
+
+# eecert => cacert
+my %certs_info =
+ (
+ 'ee-cert' => 'ca-cert',
+ 'ee-cert2' => 'ca-cert2',
+
+ # 'ee-pss-sha1-cert' => 'ca-cert',
+ # 'ee-pss-sha256-cert' => 'ca-cert',
+ # 'ee-pss-cert' => 'ca-pss-cert',
+ # 'server-pss-restrict-cert' => 'rootcert',
+
+ (
+ disabled('ec')
+ ? ()
+ : (
+ 'ee-cert-ec-explicit' => 'ca-cert-ec-named',
+ 'ee-cert-ec-named-explicit' => 'ca-cert-ec-explicit',
+ 'ee-cert-ec-named-named' => 'ca-cert-ec-named',
+ # 'server-ed448-cert' => 'root-ed448-cert'
+ 'server-ecdsa-brainpoolP256r1-cert' => 'rootcert',
+ )
+ )
+ );
+my @pubkeys =
+ (
+ 'testrsapub',
+ disabled('dsa') ? () : 'testdsapub',
+ disabled('ec') ? () : qw(testecpub-p256 tested25519pub tested448pub)
+ );
+my @certs = sort keys %certs_info;
+
+plan tests =>
+ scalar @certs
+ + scalar @pubkeys;
+
+foreach (@certs) {
+ ok(run(test(['algorithmid_test', '-x509',
+ srctop_file('test', 'certs', "$_.pem"),
+ srctop_file('test', 'certs', "$certs_info{$_}.pem")])));
+}
+
+foreach (sort @pubkeys) {
+ ok(run(test(['algorithmid_test', '-spki', srctop_file('test', "$_.pem")])));
+}
diff --git a/test/recipes/06-test_rdrand_sanity.t b/test/recipes/06-test_rdrand_sanity.t
new file mode 100644
index 000000000000..a20e09e77804
--- /dev/null
+++ b/test/recipes/06-test_rdrand_sanity.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+
+use OpenSSL::Test; # get 'plan'
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_rdrand_sanity");
+
+# We also need static builds to be enabled even on linux
+plan skip_all => "This test is unsupported if static builds are not enabled"
+ if disabled("static");
+
+simple_test("test_rdrand_sanity", "rdrand_sanitytest");
diff --git a/test/recipes/10-test_bn.t b/test/recipes/10-test_bn.t
new file mode 100644
index 000000000000..bdccce14d315
--- /dev/null
+++ b/test/recipes/10-test_bn.t
@@ -0,0 +1,27 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use strict;
+use warnings;
+
+use Math::BigInt;
+
+use OpenSSL::Test qw/:DEFAULT data_file/;
+
+setup("test_bn");
+
+my @files = qw( bnexp.txt bnmod.txt bnmul.txt bnshift.txt bnsum.txt bngcd.txt );
+
+plan tests => 1 + scalar(@files);
+
+foreach my $f ( @files ) {
+ ok(run(test(["bntest", data_file($f)])),
+ "running bntest $f");
+}
+ok(run(test(["bntest"])), "running bntest");
diff --git a/test/recipes/10-test_bn_data/bnexp.txt b/test/recipes/10-test_bn_data/bnexp.txt
new file mode 100644
index 000000000000..a225075de32c
--- /dev/null
+++ b/test/recipes/10-test_bn_data/bnexp.txt
@@ -0,0 +1,30 @@
+# Copyright 2016 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
+
+# Exp tests.
+#
+# These test vectors satisfy A ^ E = Exp.
+
+Exp = aa6d7ac431
+A = d0e07
+E = 2
+
+Exp = 12d416b110dbb4e467ff0c89a22122f4da8240
+A = 1a18cf6
+E = 6
+
+Exp = 49a3b33e23d84f1ce0d5d83f5dcb651d50cf3920f0143da2310d0512a90a06cd8f38977df8a756c30883de38df092000
+A = 2a3acbd2
+E = d
+
+Exp = 5b4a0d5a956f885f275712b194459980f24708bfb6393d71bd37dce852ce455724f5ee5030775fb86b4295edc98afaafc097e4d82a97c0078ec0eac763db16549c5145c4cf2d3124f88cf9a5c71da0625afb99b26801786fe49a778415dc025954021753d08691947a208b613f0be5c1
+A = 54b3ae461
+E = 1a
+
+Exp = a0ea5f6a4de49beb8fb7f0dab280d6a32c5a3814c9a5153a7944cec0a9028497846a8a89044348721a0bb5f0c3ded3e980574ea321b0cdb0ead4f4e93841ea7478a7f15d9729b646a8165813a0750e8124f5465dda9b105e1bbeff18fd09c09a2e26610d9176d253b877c3a8908a6be521cbe1e472a7a1b7820e4e890f8f28aacd34609c686e76e15b01bd9324a71290812724ea564d11c874a6765b262c3e57d479da0287a76026a1e8fe53da0b02405da1d379eaa30fc65f
+A = fccec0f6df
+E = 25
diff --git a/test/recipes/10-test_bn_data/bngcd.txt b/test/recipes/10-test_bn_data/bngcd.txt
new file mode 100644
index 000000000000..ea19336b5dcd
--- /dev/null
+++ b/test/recipes/10-test_bn_data/bngcd.txt
@@ -0,0 +1,17179 @@
+# Copyright 2019 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
+
+# GCD tests.
+#
+# These test vectors satisfy gcd(A, B) = GCD.
+# They were generated with sage, independent of OpenSSL.
+
+A = 0
+B = 0
+GCD = 0
+
+# gcd(1,0) = 1
+A = 1
+B = 0
+GCD = 1
+
+# gcd(1,1) = 1
+A = 1
+B = 1
+GCD = 1
+
+# gcd(0,a) = a
+A = 0
+B = 70030ffeeea3deaea19387f4f1d0f460a6954a2a9cb98290602ac09036143ef8eb9692f3eac22961811083e073ee0be1506c24d7b0d4eb0089406758828f7c99dc01692846f88aafb58b2d56a6dd1157b781eeaf807d59496aac6ca754f8830b743ea938ce16cbe03c8fd8675c78ba2420d502f2227a9bbe3979865cd154cbb2
+GCD = 70030ffeeea3deaea19387f4f1d0f460a6954a2a9cb98290602ac09036143ef8eb9692f3eac22961811083e073ee0be1506c24d7b0d4eb0089406758828f7c99dc01692846f88aafb58b2d56a6dd1157b781eeaf807d59496aac6ca754f8830b743ea938ce16cbe03c8fd8675c78ba2420d502f2227a9bbe3979865cd154cbb2
+
+# gcd(-a,0) = |a|
+A = -231f16458c487346cf50a17beec83632f25d19abeea1097c746533cd3e35207b7efd75dc3e9c663a64b6861e88579dad08649f107a13edf2ad43d0056f9240ad2a08c4aba20f05cc4aad23eb47e77cc8031df5b1c735b55103e164ca6c07bd040e12616df28064e5895a8903a26dfde7e88229a8d29fc4cb77711bf81bd04db9
+B = 0
+GCD = 231f16458c487346cf50a17beec83632f25d19abeea1097c746533cd3e35207b7efd75dc3e9c663a64b6861e88579dad08649f107a13edf2ad43d0056f9240ad2a08c4aba20f05cc4aad23eb47e77cc8031df5b1c735b55103e164ca6c07bd040e12616df28064e5895a8903a26dfde7e88229a8d29fc4cb77711bf81bd04db9
+
+# for even i, test:
+# gcd(2**i - 1, 2**(i/2) - 1) = 2**(i/2) - 1
+# gcd(2**i - 1, 2**(i/2) + 1) = 2**(i/2) + 1
+A = f
+B = 3
+GCD = 3
+
+A = f
+B = 5
+GCD = 5
+
+A = 3f
+B = 7
+GCD = 7
+
+A = 3f
+B = 9
+GCD = 9
+
+A = ff
+B = f
+GCD = f
+
+A = ff
+B = 11
+GCD = 11
+
+A = 3ff
+B = 1f
+GCD = 1f
+
+A = 3ff
+B = 21
+GCD = 21
+
+A = fff
+B = 3f
+GCD = 3f
+
+A = fff
+B = 41
+GCD = 41
+
+A = 3fff
+B = 7f
+GCD = 7f
+
+A = 3fff
+B = 81
+GCD = 81
+
+A = ffff
+B = ff
+GCD = ff
+
+A = ffff
+B = 101
+GCD = 101
+
+A = 3ffff
+B = 1ff
+GCD = 1ff
+
+A = 3ffff
+B = 201
+GCD = 201
+
+A = fffff
+B = 3ff
+GCD = 3ff
+
+A = fffff
+B = 401
+GCD = 401
+
+A = 3fffff
+B = 7ff
+GCD = 7ff
+
+A = 3fffff
+B = 801
+GCD = 801
+
+A = ffffff
+B = fff
+GCD = fff
+
+A = ffffff
+B = 1001
+GCD = 1001
+
+A = 3ffffff
+B = 1fff
+GCD = 1fff
+
+A = 3ffffff
+B = 2001
+GCD = 2001
+
+A = fffffff
+B = 3fff
+GCD = 3fff
+
+A = fffffff
+B = 4001
+GCD = 4001
+
+A = 3fffffff
+B = 7fff
+GCD = 7fff
+
+A = 3fffffff
+B = 8001
+GCD = 8001
+
+A = ffffffff
+B = ffff
+GCD = ffff
+
+A = ffffffff
+B = 10001
+GCD = 10001
+
+A = 3ffffffff
+B = 1ffff
+GCD = 1ffff
+
+A = 3ffffffff
+B = 20001
+GCD = 20001
+
+A = fffffffff
+B = 3ffff
+GCD = 3ffff
+
+A = fffffffff
+B = 40001
+GCD = 40001
+
+A = 3fffffffff
+B = 7ffff
+GCD = 7ffff
+
+A = 3fffffffff
+B = 80001
+GCD = 80001
+
+A = ffffffffff
+B = fffff
+GCD = fffff
+
+A = ffffffffff
+B = 100001
+GCD = 100001
+
+A = 3ffffffffff
+B = 1fffff
+GCD = 1fffff
+
+A = 3ffffffffff
+B = 200001
+GCD = 200001
+
+A = fffffffffff
+B = 3fffff
+GCD = 3fffff
+
+A = fffffffffff
+B = 400001
+GCD = 400001
+
+A = 3fffffffffff
+B = 7fffff
+GCD = 7fffff
+
+A = 3fffffffffff
+B = 800001
+GCD = 800001
+
+A = ffffffffffff
+B = ffffff
+GCD = ffffff
+
+A = ffffffffffff
+B = 1000001
+GCD = 1000001
+
+A = 3ffffffffffff
+B = 1ffffff
+GCD = 1ffffff
+
+A = 3ffffffffffff
+B = 2000001
+GCD = 2000001
+
+A = fffffffffffff
+B = 3ffffff
+GCD = 3ffffff
+
+A = fffffffffffff
+B = 4000001
+GCD = 4000001
+
+A = 3fffffffffffff
+B = 7ffffff
+GCD = 7ffffff
+
+A = 3fffffffffffff
+B = 8000001
+GCD = 8000001
+
+A = ffffffffffffff
+B = fffffff
+GCD = fffffff
+
+A = ffffffffffffff
+B = 10000001
+GCD = 10000001
+
+A = 3ffffffffffffff
+B = 1fffffff
+GCD = 1fffffff
+
+A = 3ffffffffffffff
+B = 20000001
+GCD = 20000001
+
+A = fffffffffffffff
+B = 3fffffff
+GCD = 3fffffff
+
+A = fffffffffffffff
+B = 40000001
+GCD = 40000001
+
+A = 3fffffffffffffff
+B = 7fffffff
+GCD = 7fffffff
+
+A = 3fffffffffffffff
+B = 80000001
+GCD = 80000001
+
+A = ffffffffffffffff
+B = ffffffff
+GCD = ffffffff
+
+A = ffffffffffffffff
+B = 100000001
+GCD = 100000001
+
+A = 3ffffffffffffffff
+B = 1ffffffff
+GCD = 1ffffffff
+
+A = 3ffffffffffffffff
+B = 200000001
+GCD = 200000001
+
+A = fffffffffffffffff
+B = 3ffffffff
+GCD = 3ffffffff
+
+A = fffffffffffffffff
+B = 400000001
+GCD = 400000001
+
+A = 3fffffffffffffffff
+B = 7ffffffff
+GCD = 7ffffffff
+
+A = 3fffffffffffffffff
+B = 800000001
+GCD = 800000001
+
+A = ffffffffffffffffff
+B = fffffffff
+GCD = fffffffff
+
+A = ffffffffffffffffff
+B = 1000000001
+GCD = 1000000001
+
+A = 3ffffffffffffffffff
+B = 1fffffffff
+GCD = 1fffffffff
+
+A = 3ffffffffffffffffff
+B = 2000000001
+GCD = 2000000001
+
+A = fffffffffffffffffff
+B = 3fffffffff
+GCD = 3fffffffff
+
+A = fffffffffffffffffff
+B = 4000000001
+GCD = 4000000001
+
+A = 3fffffffffffffffffff
+B = 7fffffffff
+GCD = 7fffffffff
+
+A = 3fffffffffffffffffff
+B = 8000000001
+GCD = 8000000001
+
+A = ffffffffffffffffffff
+B = ffffffffff
+GCD = ffffffffff
+
+A = ffffffffffffffffffff
+B = 10000000001
+GCD = 10000000001
+
+A = 3ffffffffffffffffffff
+B = 1ffffffffff
+GCD = 1ffffffffff
+
+A = 3ffffffffffffffffffff
+B = 20000000001
+GCD = 20000000001
+
+A = fffffffffffffffffffff
+B = 3ffffffffff
+GCD = 3ffffffffff
+
+A = fffffffffffffffffffff
+B = 40000000001
+GCD = 40000000001
+
+A = 3fffffffffffffffffffff
+B = 7ffffffffff
+GCD = 7ffffffffff
+
+A = 3fffffffffffffffffffff
+B = 80000000001
+GCD = 80000000001
+
+A = ffffffffffffffffffffff
+B = fffffffffff
+GCD = fffffffffff
+
+A = ffffffffffffffffffffff
+B = 100000000001
+GCD = 100000000001
+
+A = 3ffffffffffffffffffffff
+B = 1fffffffffff
+GCD = 1fffffffffff
+
+A = 3ffffffffffffffffffffff
+B = 200000000001
+GCD = 200000000001
+
+A = fffffffffffffffffffffff
+B = 3fffffffffff
+GCD = 3fffffffffff
+
+A = fffffffffffffffffffffff
+B = 400000000001
+GCD = 400000000001
+
+A = 3fffffffffffffffffffffff
+B = 7fffffffffff
+GCD = 7fffffffffff
+
+A = 3fffffffffffffffffffffff
+B = 800000000001
+GCD = 800000000001
+
+A = ffffffffffffffffffffffff
+B = ffffffffffff
+GCD = ffffffffffff
+
+A = ffffffffffffffffffffffff
+B = 1000000000001
+GCD = 1000000000001
+
+A = 3ffffffffffffffffffffffff
+B = 1ffffffffffff
+GCD = 1ffffffffffff
+
+A = 3ffffffffffffffffffffffff
+B = 2000000000001
+GCD = 2000000000001
+
+A = fffffffffffffffffffffffff
+B = 3ffffffffffff
+GCD = 3ffffffffffff
+
+A = fffffffffffffffffffffffff
+B = 4000000000001
+GCD = 4000000000001
+
+A = 3fffffffffffffffffffffffff
+B = 7ffffffffffff
+GCD = 7ffffffffffff
+
+A = 3fffffffffffffffffffffffff
+B = 8000000000001
+GCD = 8000000000001
+
+A = ffffffffffffffffffffffffff
+B = fffffffffffff
+GCD = fffffffffffff
+
+A = ffffffffffffffffffffffffff
+B = 10000000000001
+GCD = 10000000000001
+
+A = 3ffffffffffffffffffffffffff
+B = 1fffffffffffff
+GCD = 1fffffffffffff
+
+A = 3ffffffffffffffffffffffffff
+B = 20000000000001
+GCD = 20000000000001
+
+A = fffffffffffffffffffffffffff
+B = 3fffffffffffff
+GCD = 3fffffffffffff
+
+A = fffffffffffffffffffffffffff
+B = 40000000000001
+GCD = 40000000000001
+
+A = 3fffffffffffffffffffffffffff
+B = 7fffffffffffff
+GCD = 7fffffffffffff
+
+A = 3fffffffffffffffffffffffffff
+B = 80000000000001
+GCD = 80000000000001
+
+A = ffffffffffffffffffffffffffff
+B = ffffffffffffff
+GCD = ffffffffffffff
+
+A = ffffffffffffffffffffffffffff
+B = 100000000000001
+GCD = 100000000000001
+
+A = 3ffffffffffffffffffffffffffff
+B = 1ffffffffffffff
+GCD = 1ffffffffffffff
+
+A = 3ffffffffffffffffffffffffffff
+B = 200000000000001
+GCD = 200000000000001
+
+A = fffffffffffffffffffffffffffff
+B = 3ffffffffffffff
+GCD = 3ffffffffffffff
+
+A = fffffffffffffffffffffffffffff
+B = 400000000000001
+GCD = 400000000000001
+
+A = 3fffffffffffffffffffffffffffff
+B = 7ffffffffffffff
+GCD = 7ffffffffffffff
+
+A = 3fffffffffffffffffffffffffffff
+B = 800000000000001
+GCD = 800000000000001
+
+A = ffffffffffffffffffffffffffffff
+B = fffffffffffffff
+GCD = fffffffffffffff
+
+A = ffffffffffffffffffffffffffffff
+B = 1000000000000001
+GCD = 1000000000000001
+
+A = 3ffffffffffffffffffffffffffffff
+B = 1fffffffffffffff
+GCD = 1fffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffff
+B = 2000000000000001
+GCD = 2000000000000001
+
+A = fffffffffffffffffffffffffffffff
+B = 3fffffffffffffff
+GCD = 3fffffffffffffff
+
+A = fffffffffffffffffffffffffffffff
+B = 4000000000000001
+GCD = 4000000000000001
+
+A = 3fffffffffffffffffffffffffffffff
+B = 7fffffffffffffff
+GCD = 7fffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffff
+B = 8000000000000001
+GCD = 8000000000000001
+
+A = ffffffffffffffffffffffffffffffff
+B = ffffffffffffffff
+GCD = ffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffff
+B = 10000000000000001
+GCD = 10000000000000001
+
+A = 3ffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffff
+GCD = 1ffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffff
+B = 20000000000000001
+GCD = 20000000000000001
+
+A = fffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffff
+GCD = 3ffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffff
+B = 40000000000000001
+GCD = 40000000000000001
+
+A = 3fffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffff
+GCD = 7ffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffff
+B = 80000000000000001
+GCD = 80000000000000001
+
+A = ffffffffffffffffffffffffffffffffff
+B = fffffffffffffffff
+GCD = fffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffff
+B = 100000000000000001
+GCD = 100000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffff
+GCD = 1fffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffff
+B = 200000000000000001
+GCD = 200000000000000001
+
+A = fffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffff
+GCD = 3fffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffff
+B = 400000000000000001
+GCD = 400000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffff
+GCD = 7fffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffff
+B = 800000000000000001
+GCD = 800000000000000001
+
+A = ffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffff
+GCD = ffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffff
+B = 1000000000000000001
+GCD = 1000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffff
+GCD = 1ffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffff
+B = 2000000000000000001
+GCD = 2000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffff
+GCD = 3ffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffff
+B = 4000000000000000001
+GCD = 4000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffff
+GCD = 7ffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffff
+B = 8000000000000000001
+GCD = 8000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffff
+GCD = fffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000001
+GCD = 10000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffff
+GCD = 1fffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000001
+GCD = 20000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffff
+GCD = 3fffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000001
+GCD = 40000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffff
+GCD = 7fffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000001
+GCD = 80000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffff
+GCD = ffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000001
+GCD = 100000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffff
+GCD = 1ffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000001
+GCD = 200000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffff
+GCD = 3ffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000001
+GCD = 400000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffff
+GCD = 7ffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000001
+GCD = 800000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffff
+GCD = fffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000001
+GCD = 1000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffff
+GCD = 1fffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000001
+GCD = 2000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffff
+GCD = 3fffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000001
+GCD = 4000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffff
+GCD = 7fffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000001
+GCD = 8000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffff
+GCD = ffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000001
+GCD = 10000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000001
+GCD = 20000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000001
+GCD = 40000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000001
+GCD = 80000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffff
+GCD = fffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000001
+GCD = 100000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000001
+GCD = 200000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000001
+GCD = 400000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000001
+GCD = 800000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000001
+GCD = 1000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000001
+GCD = 2000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000001
+GCD = 4000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000001
+GCD = 8000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000001
+GCD = 10000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000001
+GCD = 20000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000001
+GCD = 40000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000001
+GCD = 80000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000001
+GCD = 100000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000001
+GCD = 200000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000001
+GCD = 400000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000001
+GCD = 800000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000001
+GCD = 1000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000001
+GCD = 2000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000001
+GCD = 4000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000001
+GCD = 8000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000001
+GCD = 10000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000001
+GCD = 20000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000001
+GCD = 40000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000001
+GCD = 80000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000001
+GCD = 100000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000001
+GCD = 200000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000001
+GCD = 400000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000001
+GCD = 800000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000001
+GCD = 1000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000001
+GCD = 2000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000001
+GCD = 4000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000001
+GCD = 8000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000001
+GCD = 10000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000001
+GCD = 20000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000001
+GCD = 40000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000001
+GCD = 80000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000001
+GCD = 100000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000001
+GCD = 200000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000001
+GCD = 400000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000001
+GCD = 800000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000001
+GCD = 1000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000001
+GCD = 2000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000001
+GCD = 4000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000001
+GCD = 8000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000001
+GCD = 10000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000001
+GCD = 20000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000001
+GCD = 40000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000001
+GCD = 80000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000001
+GCD = 100000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000001
+GCD = 200000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000001
+GCD = 400000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000001
+GCD = 800000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+GCD = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+# random KATs
+A = -1
+B = -1
+GCD = 1
+
+A = -e9
+B = -122
+GCD = 1
+
+A = a991
+B = 9c91
+GCD = 1
+
+A = aee38e
+B = -ef35d4
+GCD = 12
+
+A = 11fac5874
+B = -13a37ad53
+GCD = 1
+
+A = -30ba5f2ee8
+B = -15935eabc59
+GCD = 1
+
+A = c85702ba3795
+B = -4646d650b41
+GCD = 1
+
+A = -1804fb46dd79d30
+B = -8d3ebf6a5c5c36
+GCD = 16
+
+A = e0d6ca65ea05ea62
+B = -93acbd36ca94622e
+GCD = 2
+
+A = 15ad06885f13cffb323
+B = 17f0004c657a8977d75
+GCD = 1
+
+A = e7ff96cec9c080a4ce76
+B = -18dc55650afa9072683fd
+GCD = 3
+
+A = 1f04b96580d11dca1a42066
+B = f39f140e2a29fc19c6368e
+GCD = 2
+
+A = 1839733c9c52eef9beb64d92e
+B = -70bb38f2d70b9bfb6d764371
+GCD = 1
+
+A = 157393bc256b25c0a1d107c270b
+B = 171a32af49c010663708c8e4dd6
+GCD = 1
+
+A = -15c0ac453e8b47c0a8da6a95c6d1c
+B = 1fcded9fb7ea85e696b675dedfe3c
+GCD = 4
+
+A = -4f4db668e2b044ee972eec62b06264
+B = -be55936205e72ebb3e0543b8d83628
+GCD = c
+
+A = a8de6c3578a1f2fb69adfdb7cd687eb4
+B = -1371dea9653f87dafa5512b89b2691b4c
+GCD = 4
+
+A = -188f12124f8209f97ae82183cdf31586244
+B = 21943e5fc78521801b7adc83d3ff634eca
+GCD = 2
+
+A = -1e420c37d2a409a1343bb17987d3e94af10e9
+B = d5cd4728f9272d5127dc104340ac89cf1eec
+GCD = 1
+
+A = -1e760bd24fda671fb720885de3256b4d55795f5
+B = -1c6711aff275b54c644371b1aeb6f463006f06
+GCD = 1
+
+A = 2894fbe326e1dc1a2822fd8d262f85fb667ba633
+B = 179f9449f643787ff96fc064da43cd5da2a72a35e
+GCD = 1
+
+A = eadf17a11a74869d40d124c748aa39961f53e83165
+B = 1b428b0c3b619f2001fe8290e8e3849c765b06d3a7c
+GCD = 1
+
+A = -1f8596327f7e3f97be2317163c6452b376bb604845ca1
+B = -1e0c736e66846f8d2b8c785c00db9a586fc5317d0e66d
+GCD = 1
+
+A = -1601684fb83ed9e1d8ffe6b0cfbd98d21a19aaf4da369d8
+B = -c1a63d561ff82329a03c2a49fea26d950a0f58fee95afd
+GCD = 1
+
+A = 1375f0dac727bcd1fe8d4b1d1dd563f236dcc58e1a36fbdfd
+B = a96ba42e882a321930399b7788e0fec9a8f76f44b5432a00
+GCD = 1
+
+A = -1f97ab20b489a029b542fcdd8cb0d057b86e4e34fa3cca7585e
+B = -9bc7742a043afce9a631bac56cd2e319850cc7f73efe3c0a5b
+GCD = 1
+
+A = -9a25f52b7931435209611f2ad2e234f4582bdc42712765a9318e
+B = -1284cf183b2ec1b4dfec71a6a91705f5df295c95b28aeccd247e
+GCD = 2
+
+A = -1809511b69429a5f991744ecd94091c0e56d7777b4a742ba9785f7a
+B = 17b9cb217832e39c4933fe0581369a767a08104d5bebea2895beb6e
+GCD = 2
+
+A = -72334f3e1d30b6bad9557d9f71d4da5de7d70309cb0a723c347e6e12
+B = -1930a381a580375b7de06f0fc9d201326852efa287ad8cf32c17e06bb
+GCD = 1
+
+A = 45d3a8d17d00d181ea1b116f235a98ce63291e9aaa90b41e1a24ad0156
+B = -1d7568b87de073113c8ac7bb800234cb263d67c00e7b4743b297d2e8aa8
+GCD = 2
+
+A = 80ccfa8098eae998bdb17dbea961082c8cd102e92973346238e0c92dda04
+B = dff995ba1133f96e2f35b73bd22626e804b012901ad068316fe84e3c3f6e
+GCD = 2
+
+A = 1dcb28bd5126103759315cf41afec22d1a687ec010b60bd9b316226ebb2a1ea
+B = 9103b9f322cc8ba52c7e28a2d4c56bb61c59c92caa033030a575b0c32aeccb
+GCD = 1
+
+A = 143cc2cc2998897aab5bfd934b96551cc1fd390df3a27d39b4e6b7318e7b2ef4d
+B = 13b18e4776bb567f0908a670ee611ad402ffcd38f3de3c04d7a8a55b783811817
+GCD = 1
+
+A = -14c3c0af075bc68f7b3736141718d8892df43034d13416d84801cc6a0f5e3755bc6
+B = -d28486b18e2da1e97f1437c701e1856a683f0649541de1379bd3efb60b959b4497
+GCD = 1
+
+A = 453270f4a4ece4f6f1715159ce1c79d903923afb61b270c2784752d6ce57b39e0a71
+B = 935c04ebd73f4ba27ee5d538d77ee1ac0a1763b4c06b0f455878ce685409e27f224a
+GCD = 1
+
+A = 1f641676b547c76f4f25bd7b51000be79b301843ad54936f4cf234e772807f6984b400f
+B = -90450f1b6cd63d8d267d610045739be18a9ec4bbf8f6023ae373cf32366b8e6e406f37
+GCD = 1
+
+A = -64b0f11ad58106c02ec6a75bab4c527f8e524d61af3a1a55d4917e0023fa5528259a85a8
+B = 4771313a91911c0bf608f053dce02c3a710b6af607b7af950a125e2726feeceb77881e1a
+GCD = 2
+
+A = 1fcedacaf7e1bf8127b4c3023a31c4ea77728aa5162117f7b49f5d79ec65f614b78839b585
+B = 1506a9f996301e4b442a553e957aee1064b13dbb3d1835e9404c40b66845f897e5b8471ec7b
+GCD = 1
+
+A = -1b8e8aaeb9f4fd373c91a6e16d95bcc3597acbf3ef96d9863c128fd804fd3914ef66119c47c83
+B = -e2e25f6ecde0bfd2f7d0baa4d4a4e44324897ee9ff8e4578fbc6fa26d60660e5618b7bf787f6
+GCD = 1
+
+A = -335c87c3429ff3c97fa7cd2ba7cee0be9eca938b5efcc176f6d997cf4daee639d72d3b468c76fe
+B = -1369edb1cd98b3ec3d5a5ff91213df595848938f50f7c72b5579c62b7577d43fe2d67da2d23570c
+GCD = 62
+
+A = 595e6ff3fe0be024d58d9906ec9655560fe6caf83b10ef5b057565d25cb84603d0ef1942f2de68e0
+B = -123a4ef2b10b3a5af116e04d520440f80a3d69288f15bfe567a9df5f392808de829fdb2a310a7c54
+GCD = 4
+
+A = 1b38edb12c4a5a1fd60fdef562b9c1afbbe4b3c9653353bb5d409959bebde80f70118cb5fe231ce2281
+B = d795459901e5632813ee9c41c62629546a30c9c3aa8547bc1dc1b3308b7f72290962c07d6737eca08e
+GCD = 1
+
+A = -155f92cc303ac4964be78e178d4d9c331981405cf8bfa5c4fd388790ae3ac97ba4ec4ce2fa09d521f4e61
+B = 1c037e98e141acc316573d409b6d3b2b80152b3c99d83ece7ee595fe5a819f21544e63f2691d4e83449b0
+GCD = 1
+
+A = 8ee6db77234a82b5ab5ffd56f3252dbd5c3b85fd6226c4889eab86021fa295e223cec5bfa2920fa222f2ec
+B = 1fdd2fdc9456c648e5c0f71eea76376cb5fc2df0cb807714746f7ad8ffd1d765463a6da88b84c5d755dc18d
+GCD = 1
+
+A = 1326ca90f69200645488c325424c5cabb3b0a399d763ab7c8db84a05738ef94ed69a38c47353fbbc6d87df2cf
+B = 184e654bfdb1ebe9edcb700337e16054f7532f09b28aa588c22ec3eae40f59fe5515bd0158e562b79c472b811
+GCD = 1
+
+A = -1b8282f1d39ade651917fb348de3b0fec54f9af03fc1b25bbbb791762bc3708d6d6d375d6ad55efd24a83d65e93
+B = 2e004f8cc320892c61972596ace48b4e969b439eeff1b4d518ee3e70c40bb1294750ec31acca190912ba43803
+GCD = 3
+
+A = d0005d09b37a3d076f7dd28df6b2ed7f8025b13fc8e5594f90ecb65c56938fc2a45d71d7b741f04e5b9a674c2cc1
+B = 17478ff17cdd349bc5d37f5dc52106542139d5d61bccdd0d5bc233ac8e9cf54ddee1ba7c86822fd175209cca97fab
+GCD = 1
+
+A = 16449bbff3f02e684558cb401cbb885c2bd3f340d1f04e25dbfb1bd4d3d2c754019109386f05727a9ab643f4f6d256e
+B = 2fab68d37b6b5d04c8bad87660ff3623dec88d1f12c0331a161d9294e3506f107939b3d4112b02098ae3858b35f638
+GCD = 2
+
+A = 4969b50d1cb296de0575d6c4aabc96a7af93feef5a9b1a45b5fe47466d884eeaacbead767ac085cfd0ebaaa300d17b2e
+B = -14cd23e34c8ecec92f5b03dc7b23374566ecd5981d368a8421c7f40e0b2c64bc710690feccd6be52028af985103e9260d
+GCD = 3
+
+A = -1e147a7d54c2e3175d29ddfb4da1fd04f3235bedfad0bf6dfb86bd36335e214d8c40fe968d42ad3ce6383e22b18dffd20ea
+B = e50a4e27df90f5f29fa0f4c33a7b3e0b194aee3d1dcb22c0cbd50640546c9248729904e9b7bb96f7e3e9c42edeadf2e7df
+GCD = 1
+
+A = -4fc9395d1de5a27737807b3324a95c542eb13f76fc9c02e5437e9502c1f8eb78a678c64d2fb66d529779299d4b19224a1324
+B = -1e0ee0eab241ab56a2548c98fc0cce9b4d301bccb5d8ca726cf3bc76b76f8e9d256c60361d2083947df784ffdbcd764e89273
+GCD = 1
+
+A = 8e13879d78637b80f874ff12889a7429703e9457a1ea592f623363b4886d55dad202064d308d1cba1d66cb3c4eeb7821174ceb
+B = -1829ff03ec9313562088b8c9c62cf2a102b81800192d55bdbe00d632e05c952773251f775902a7364e0c578adeea635240855d0
+GCD = 1
+
+A = 744c17672b4fb3cade089b2cbce0e508bd632b6d558c1d0cdf9744ab49596051884895f44f348840d1ded9aace7984d76cb76c2b
+B = db0fc616f3da7665f4475f992e665cf5e50df858dd74e7038dbc484839edaaa5c932d2e74bd48c5ad5cf329e37b7094e65da1a0
+GCD = 1
+
+A = -f7e708a624b8a7e892d9e4e3b6749a52244025c60d5cb91efa8bf3173a167af9adff2ff15cd15eb099346fabd51435e9d448aab243
+B = -187a5538713ed86be39629eee68dbf708f05f980b7c8ab8c083faf67fcdb19219b196a1f54d782c922e1c045646f7e65ed2e4c19013
+GCD = 1
+
+A = af952df8a3f4a23bba59f89a4a8d831018b439aa7ba275ac728a34383cc1cabbbbc29b85341e8c8fd7de4ee59ff4a5929a4a1f621841
+B = e89cbcd3fb82682cd2710940b1135ce5b3e96a9313dea51c97a39db8a6baddcef27c5158261802aa516abb45b3af67f65550284dcdf8
+GCD = 1
+
+A = 65e38d0c1b6ae3147288af950370215e9ab97a73f5620f4494bbe3727ab930889e1289f28a2f1f99592116dad19e4accfe14922ba67467
+B = 430b97e4d97b1897a823d716b8ee087cb4d591b5ca15121450d55d988fe65d53e13451a5ba010e8ef382b28ecbbe7ecabb34de61fa008
+GCD = 1
+
+A = a84023af42f1d1f81abec3f39fd7a85319d25a6a14bb3b5b48f699cab506c5aa701754bd68aec40214eb7bded5bc3d502d4cfd970d17ed02
+B = 1997f443a82913a6ff5f0f50739a1b5fffe3fa4ae68b46e28f4e9e124f80efc75c345182cd93c86e79fa57f78a902fccd7d6c6c2646c98644
+GCD = 12
+
+A = 144f099dcc5d0cc0307d510cfaf2b2d4d5cc89e85afe269690ab1094fe5734b1e1a9018583ffa7cdc172b02740002669bafa6fb172a35e7ca26
+B = 18d743f978c4ede6b840d5cf194584fb5d20957bae0f74e877f364a464f0f39729b81e48dbfcf4e1c954d9f7cad60a663947b2f1792f1870cb3
+GCD = 1
+
+A = e6b25ce1ce3b44ac6362793a743d43f2fd7a6c584bf9522c65cd2768446cdb5a980cbca31d2cc90ca354aa21dae34ea13407f3519c07ebde3106
+B = 16f4475cea77b5debeb310d35a9b057e6bfc4bc7edbb4691bd97a8124e9b07605420d358c98435f7ab522559d7ebc271fa72f1c46c2b1a7cba71e
+GCD = a
+
+A = -146a72ffff0699d3e6b78cc3a2953b679f4ef60a191b71c55c2534cb2df65d7ee880b095e9233fa763c7ebe136580153676c45b10471f8765b9facf
+B = 1d39f16825125ef77d02c662b4743c387941021b7fe13a19cc1caa57275e885d0bfdb92c00ae447c707c62c99d9dcfae1f8e38576829be6ddf02c48
+GCD = 1
+
+A = -18cfca9d12d66050fe7487725037b144328c17d0970d1a357e3b6309b4011ae23b496cce3f5e01bdc40dff57379e7ab5479e2f8c4da8acf6905551aa1
+B = 7a33f9b10a683ae6577fbd665dc695679cc9f13d5b55c6340ef4ba8682091f39e5b32fb0d7b49e92cb6344b379f71f022fa6d0d14cf043af352ab3eb
+GCD = 1
+
+A = 1308073b625424e7256155e552c7360479c8daf15dbf28b58ce1a32e71f23391724ca434dcfb8d943f6b1c2605283120b681dcb6fa7e32acacbbb096116
+B = 1368952d59b7beab2529615ed13a82114238d6970ab01f647ad74db8775517832c78b561179ccd9b7d942a0e95ee60b73a2b2da65d15a65d4780251e5ed
+GCD = 1
+
+A = 19e0429f04f48ddbde5c799eb68fc42f16c87e7ad846ec23ca067f6a2646d2439c56fcac63f945ea4e46735ca8aa9861f0f2ae60bf15d0d2b763d4bea4cb8
+B = e92ac7c91d3df4339a4ecf2e7eb7bba54ccf5713550f7be0ce1e88dffc9b9b1f798c96dc8df474d0bd2398620db3fedd6781c803dc58e37aeacbc37f2b11
+GCD = 3
+
+A = -d0574568670990b9006ef9d88fa6a2910b3d4368ba9f9ae1156df24a08f2785a9b95413c8ffea0ca3fc6d2819753f7504af98908299c423a538638adebca38
+B = 1a47702f41a8d8b06beed8c1274249ba4d1894f23d643e334a7cbb467c564c34487abe3d4e10a5ea413d86bf69b3d3d39bd8f41124fb2e2c75ab232b2dbeb9d
+GCD = 5
+
+A = 17472527c16c791804743e11eac47f9cde83d38afaaf015cab6b1977730d817f080e4ab864852a1bebef756c3280f010ce83bb247b9ea9854eb6c273c4495bf66
+B = ce282ec890884d87c803432eca66ae10b1381d77afde9394757e40dea8ead57a84ffa155c50d6da8742422f0ee42e056b6b9a698916dcbfd8a8c62b536792aa5
+GCD = 1
+
+A = -10bae6fe741604054f4801ccf4d310c10a24bad458d2bb9e536ac071b994326ce4dded82c19c73a82c75488ead4b4ca21abcec77fb208c90ee461bf27085a57ae45
+B = 1a5b9c18e755870012147afe400f974c1ac17ac5921171d3d9a4c310a5c0d433e2afd1a2077106220a0b7324ed169c4371a23f8f7334969a6108c888819c897efad
+GCD = 1
+
+A = -1b881dda84158e8b75ae4caefa5b58182acbaf10b121d5b987a4e9cbddcab844ad579b33f840859f03e4e9d9d45715df06a4a84f72c3b14b0cd7919955da3b5d9e4d2
+B = 17b67dd4fbc0f03dba4c5ce29b57d3ccd3b591fe72c6b9419f0cd4e2aa0a752e009f596bfa5eea0ed564543e5b1f2f8554823248f3163fb142bcf4df93bcecdc03ef9
+GCD = 13
+
+A = 68692ec39565ec8b666eb15e4aa878ebe4ab71302b9a88f412d759767504f93d420827dd20d5b9a61d3f0f6b34fb2b7d9290a31b66866695d7ba9a2e841122a25f6e40
+B = 1bdd40ee550fc1521309d51528fd00d1b44b79a3f592e576b44a72ce835016d140aaf690cd7d0cae330d81e5cadd8ce4c42ba04e9e1dad875fd8ca7cb86bc339a3bbf5d
+GCD = 5
+
+A = -b789b091157cf3ebf83eccc253948c80fc5eb6115b91c6b748222aefcac64f253f15254968220d1b2920c601d6b958c048fbf5785f36a0019ec3d914cfdc1bf602ae958
+B = 63e7831ece851cf35b876ed6306cbccf0eecfbcb0061cfafd7299b49b92e7ab6575691a469b971358317debc3aeeb94b0473266ff71e4f04c85d940699de6106ab9788e0
+GCD = 8
+
+A = 14a723c68069b43cad6a293259204444b8003896d1773d0c231178e301d9441a82c088657e4015d09f24da93f3d875ede31f40f2c3e499ee8b3d17b1987c6925a1ab01389d7
+B = fd3e117df477741462b13253420e116370277ac2057ebaf74159ad2e661d833686d7dd0bf12f1932de367b4daef6995db0ac7dcae12f3a1aa5cdd5fc7233fad25ccd0b7f35
+GCD = 1
+
+A = f00a97e17eace2dfbdf29081a798cb9df9d47fad119921b4d17469adcb2f65bc5ae8003b1734ac9f2e66310b3191c99e2ea20f51ac8944ea4c3a4c03f47170a7d34672cac622
+B = 5dd290b928e8acb0423f56526f4064d68165518b250cc77b71f0b10c9e9d78953a4936f8dfef579ebdd69e94985dbacc50d89a74b032cbbf8570154f5e7961c530ae924a61f3
+GCD = 3
+
+A = -2c19e437e1dd0eaa6ef2810e7940e1dfc00b93a94b0698d8403824cc96c38b7709ce158b113df830321e1cf7bc01d5417244d1a00801b983794e523f8e9478bb142f1740ec35f8
+B = e46307358b999c6a166c82f5f7883fa2499833e12f4a9bfa5bd095684751fbf8eed10c7cff6b01d47da3caa8be0123005f9d5fd418071369f6a3ed1d6f79c9176ba33c137f1a7f
+GCD = 5
+
+A = -1ba5e202200eb9e7323b325ba3edbfd42682d4436e4ac17de47a07a2e974c37edf68d5cb6eefc11560a5feb1e462dfbb3506efe6166b5527c5ace949bd34ecaeb4059d5ddf6a2acc4
+B = 1f180b6334ee7a453779a360ad011ac34f00eca053d94aced8ec69c2f868655578717917ce46f903b498b8a74e4fd9540b8c83e7668d9c2d5331a1a8b4a8be7fc1eaa878a7a8d0e7c
+GCD = 4
+
+A = -1c336e766b6012c270dd2c39cb01ca144ea30c905997e1db3e8ac10484f6f47dd124671d62f0dd3e7e301195f7f44661af47b3c30bc40c3fbcfb10ca43d64b4fbfc00dcc9689c955945
+B = 119fcbaa4b1d7f4a044dee464425c148c0a56dc0efc6e9a7c9d698c974535497000e6e900ad1cac61fe0c05edc705bc13d053a5f4e09ab733b1f7ce291f835c9a1c63ca4ba942a53c98
+GCD = 1
+
+A = 1d98bf3a71b81114b19923c433f6ee23ef76f0e00bae5f93541040646103430e28fbf778a537a3e310348126049d8847df6110889d623df5e10b5377cc2491e9ba7cac3e16d7dca7bca4e
+B = -2f3a8298c2d14f45cc22d7f61860b13e4ef909569d1c060f229702fbc45a92a3332ef699fa45f07bc7fae4213920be0731fae62918b05031764749dbbe98614b2d47f9b3476b6029b737
+GCD = 7
+
+A = 188940390dea60de153bcbcb03aa4d3757e9226da394f2d27224f68b067986cdfdc0ea0ea05941f9a38db68fdd26bfa40a4ca69f3fb55ad3ef7a54f41c43547457f59f3a5efc056346d5057
+B = -1c3b8fc51bace9ec1cc95ed06a72b66101e246387c6c67c8b24f60b366e1351ded4ac2e6bb9ac787ff511f9b5c4316001d4b6d8c0cac831ad1c7bf9b53e504bfa12366ee06536f5b14f4ee
+GCD = 1
+
+A = 17b87983b5c88cc7c1b349fc1a93cc7142333363db67a21bbfc4f9bfc963045c47651039c069d5908787c6944820a8081d7224c3d3ca59c04a311e458452897a9e41f137834c21c5eb7f75378
+B = -15a7a339a4a0cd99540f3387ecef5796c8138c715017477b870718bfc2d84b54947b282e4aae25b8bda01b62598bb43e6fd7d0390a7ccc53c22d4dd0d1e6277e351a93fb09e1a3dadbe2c0072
+GCD = 2
+
+A = -1ff3728d4381168a8939ca71b3274288fdf6c3f7fe7e648eb353888463bd456f7a4af2a78b3069bdfa6dd05f9bc795bba29bf879d8ecffa7c60ecb300f465368dc261ac337a2aa516e634f7ef7
+B = -3566c80416f729f4630fa19d45552f1388a42e34bc4f085b3a228b4a1d21e8d64b7f8002efd9c462860f1792448c7df3b6fb6387c5a9f81a3853ae0b4df4bcee54ee093bc904c4c8cb905a993b
+GCD = 1
+
+A = -f86ceadcc60272df13bd98d6ac375821dfaf9ad8f663f65aeabae09d11cccaf87d69ef9f39da40c649ec38bf158578d72e8013868bea2a1a34635184237af7b8cd18af3735ecffff67a066566f79
+B = d8ae668e6ec63b22fca2d0dc48579cc6d64bd321f618a367d87ff161b7a17f00d2795bab9ae68a1c93b9ed750133254ab12724a5c6c315f6ad6701456c33b2e0fa337d8dbc93cb4a18e4014afb2f
+GCD = 1
+
+A = 1e61a136590b6e980e54135800b52a0823beac18d98205aa1438b1aa3b755f13e3c8aa921ba47319040176a3d8951a842978b0bd8f4d80da92d1551f4feaf71164196dbd9ad0f81c155cdf9402e84a9
+B = -c6e5ba1cb842d572cf5875e3f6565208d2091e491447dd4a090dc0de80c00b29567bcb831b83bf610ad2b5cf1f2ab9aed47836b036711b43c5d0ebbc48d876a61e02be1dec4e89e677dd808388f674
+GCD = 1
+
+A = -1f2c93caccde7852e99e65d0b73fd82318041bd225aeeb6f80b21c90d055eaa0607f042dbd9b66960e0ccbeeca32a23a8fd19518f5146e7aa6dd02a0946a3eeecd5f5f000ee9ead8874503624fe965d83
+B = b0aa22dfb0cd46d1462aa02933c65ab242d274fd7271a555762205f1c791821b5aabe781d3ebf932eb8f264d8604e9c14cb4f3b71527593a0658e4a00ea1b7688634677e5effb0b112a7426332dcd2ee
+GCD = 1
+
+A = -1ece1a5ea104db93ce3159622fb40a5c37ae8e427641f7a972892d564aa3332739a60f4ab34e757d460bc5850e766c86d70c77c05d8b8d454dd66fa1e691406bad49a8046b01970848fae8ecd8e343d2f60
+B = 934ccda0b23ccba867a230fa187447289f784f98faffe952f686f40da20a319ccf8f134c111a93ecb31f8c2dbbb644420a50d3c472ed37c7393197a65cfce72a938f317360bca5a930dd2ff196522dcf4b
+GCD = 1
+
+A = 1f8446db527a96e2244e1956d36c00c5c90823512575b79b39971de168f1a6096b4cf705f441b6c419d696c41db8b67f87847fa8333cb9bdcce9958b241328c9437125c2bd983324ef8bed0e7ca202c203cbf
+B = 16f9bd5fbf45d95934429f912b2eea8b346633cf09127be615232e999ec111e73848578b412c42098917d334c9897116c3bf4607b4c8110bfb01a14e8f928ea29d4065101885177676b84438039d6cef0e164
+GCD = 1
+
+A = 1de739d426f8065659d826324e172186a72d89269fb3a1699d62e3d7a2cb096cc89a23de0b762e8d04ff04308ed0317b11b792cfc4030547c1b2c28dcb0b71feefd1519af3d33b199ad6d2d88047047af179801
+B = -139d796fb7325f9633c2069b568a211d6b2843e11646d2ed3689bc44e03e2f30f604f51b5352edaf85032215f5d00188c31fab2aea7edd0b62dbea241ff91e436a075ebfc38fc2887ee0d116137ba586b2d66b1
+GCD = 1
+
+A = 17e6e6d3eefab6ae7c054226765e57940a06ccd9759594a50d322804c1f04ee2db2cc726afe26a5880eae2d3de02b9c3fa18129861b4dfe83a7f945f80843f35cf44b77b72bccb62621cc76ab4e1145671cf4e1fb
+B = -16f61bdeab1cd4fb7c477eadd4a0f14c23bdf8d1f97c297c0576e1e6b9f554bee42dc68535d8d5d4166b906adea41ede1e562d08064beb6e8d01cb48b81eb02880237c4bd78153fadb293747370d284f319a3fede
+GCD = 1
+
+A = 9720f247b2290a3ddf543340c6ac23654cf075fe957c131af99a28844bc5c5c2b9f3cfe1d8d68dbecdfa7086b889a493ddb409e0b363793753a5ff624cdb4f93e89cc39e7f71128469218907e853b026b03128260c
+B = -beab5b719dcedd902a7fee587de6dfac9aa291d8548c350e628b824e08d20ebf45bbf502cc3c5c6f17143ad8be1577578863b7fc648225bb59f03ac32819a381952e2fa90ca3d6b154cc82b80858b7fd12bc972c0f
+GCD = 1
+
+A = -1f47a70253ece49019932a4bc36fa2e249343bad2a1b93b0f1343ff5887bc261465ff81ddc1223c4692d0a58ef0e5561221ec2d9ee6436194d5a90659af8e58cd411bfc47b1b1584ce8032f3939b4fb16c87516c620f6
+B = 1dd2bb04a9d252dd81d985556a285e2a16132f95a17392388f52bb2e5b2793d476db06426479a1d330141198d00457728e96d2a676ab0d186ed44990c548559c1576a2eea8db4688818777b898ecd8b8eb0c035f8108d
+GCD = 1
+
+A = 131ca0dbb4eccd76f3985b15fd623877feafd86f2b1c5c6f6c5d65a4fafbe25c168e633a81a9687f8625767927036b57ef7aa1830169dfe4661e534c72c5863b26ef4c7331d36ff98cd3d31c65f60a123dd7750bd120bbe
+B = 143a3bc7729aa158fdabfb8fcd7e420f5e0a506e09455645f2fcbf3caa29b023536df12667d569382c1c3aef94f332423a8ba46b8976bda06d077e9a4355ee41d70a7f8d1e9f10f41b724435e11ed2f32c640afd96e20a5
+GCD = 1
+
+A = 1b9e7f32245d67206cfc158b05701523cab7178eeb22ab828e65ee6b8cdab4ec70dc3c132fe71942e3e8443f813de8de7bfde4bd3c19c1d0cd9b8cb288a56a7c59229cdfe6142724a5c4915b6e45e07439fe4aa5c1ab75074
+B = -8b264b200be85f0df34c774a95330d8b4c3e4cc6272bcef2e4fb5534abc99f07588258781676b1a9894b37928ae0feca903ba3336ab532930f2b5f0982c0288faa02d6cc613711d0aa302d7ec7d8652789cb597d3a137ac0
+GCD = 4
+
+A = 7ffda115ed00ec00cbdd3db181fb544168fe8d7b3738c4bbe6d43940d806ab5b6000abba31874954cb0156d969ba61f8cc1ea1eb339ac787c285e1800728c71fd6d762a8724691419808379a5946b15ac5e3a50761a1a610b7
+B = d86a6c78030f585e02890588388cbc033f1aa01b7c6bd777ddf13d4f39b7c6417c480d9b5b6c05bc7c1e5881a7fbde0af614099f4ea77205ac335de0a931f9e172d626d86cd2592662a7347220fb70027d00aa3739eb2d4033
+GCD = 1
+
+A = -195b1e890246f1474a735bc881350367dc24dd5029ccc32130add6cb9c0cbee5984c95c5a0ee9dd3bfac814424e24322b62ea995f6bdb82b1558f0052edb830af5a6bc57e5887d671cb6d29ff71157378f6dbc5d1543aba4e8560
+B = 240d197ebdd352432661a8b299dea9987747d46daee9e83fa04e7aa5caa54c37430fb4dc7e011ee0d85273910e517089898029c328a676b95eaead4284628ff34690adbbf4f180f4c51ea9365de02fe759ee91c2110200d1e261
+GCD = 1
+
+A = 1f450515a64fe303b37e2b5e29526e427eb940a31ceec2e9025e668794aebd10e355c9a3df9f0126bc4003e5acefc321811e910c9e3420dca3483914d4868f80ac2ca6c069cf1cd7afefa10de51e19a46622ca936883ada39a3cee3
+B = -7fb7ce1bbd8bed6c8197dd7f3f87c0db2c2bb660f4d044fc5ec425a2dbc7a32e1b882cbd735439359499e21124aa1cdb833bc9ad2583a37f961aaec7b811a9d41e0f3716f76bd5aa82223290ed5ea6b296dea976768d81c0165964
+GCD = 1
+
+A = -1d4c92758a0442547ebda5989a829f649e7d9b07e35d468d3701ba9bd72185d44bc32af11a3014d1ea3d334671f96bfaa285a942c4c0389b5d15bb2b2854bc0975536feea1fc88d827c6833f4d72edd84f4bc931c41f4049f1a69983a
+B = 2c70638a67acd4636028a8c9245d68e2866688b35c85bcb62c5ee970c9580a23d9baa4be36f0ac0d4b7c3b2dbaf3037da13590c0487e2c0615894a26288d598968e4c4e8318f60ee78b496dcb213b4f27d906d3070fb222f7d5facbd
+GCD = 1
+
+A = dfa8e7c654bc1859cd62685a5d01892744fb5e0d5c751be4464833a9d125236b1c74635832d43352c5d3e6370cec200fefab9e2379156506e3bfdef641971b7bfaa76248cb1785d8d096c87f36d18b8465d7e01e167825079b9fc82f93
+B = 2aaf7caeed892768e9ee5fa5e5c545a1a9f6765f23814c65aa175ff46edfc9ccfe7d4fe3c048ab69b8bb7934937c36348535b9530dad20e7375474fd465a16301cfe8c19ef49e6f3e84dc13cea97ac9e0614c64808e2431cb261f440bb
+GCD = 1
+
+A = fb48d53863a542e2b3f312c9eb5d4c1645beff51aca1e6333f5d4aafa9b530d1ebc68127c911f08c029a0a81d80beb4b184420c2427cfae9754629532d14e04b0d65701fea5b4a618471ad2c85f1acc66eddb4d5e856d960ee329f22c235
+B = -15164ba1f25a99e064cbb380e64f10134e1210ef97ef9a356bfe9c7d49e2c7a973f9926abd603d6ad95c54062e420b1740fa6b99e5538d118dd8c8b70e4941defe4a8174d5e450019fa5a2343309cf8b5e3d7451a7556c239216d27ae4a43
+GCD = 1
+
+A = -19293e4a1cbf995b3fcd9f8958b1225d5b91e1e97d44433868bdb418d7302c33b0471c3e90dc1ee9243f4d4e0a14965baccd2d710b96f47c1ceb9f7acd767fc3e343001ea7deb74203b71b5aa016e3f65521f7a784afb1e9e4c8bc66967d1ad
+B = 1371e2b1544befe4b445c8a08fdebcd80b6aa7457c4bff362bdc3860f4cad1220969fdae3e0ded976bee00723545348bc890a7f983184cd7403b37a1677039b47a9c7d88f44829404bf81ea3d00ca195f66d798443969b42c272ff1c053d3f
+GCD = 1
+
+A = -1111d3fd9856b58585345d515e04ed0fe6aab671da3bc8ea033baf7dfde3ac66ac6d532d6f1ebc1968a28afbed56324ae8e7079437cbd4cc6d274c4cd04ad828b1365012b4ac45ed5d8ff6dc829cdc0dc28fbe7892cc4e02cd51d613084fc282b
+B = -1cb3c8c28f4e91ca61b515f06010c4d62f41ea3bb46a6958919f5726ce66b5bab4e139f5af1b9bccf8e4d89d3c328ffc01b81ba513cac4dc452e30b6e2866eed0fb9f35c80d00259b949fb9f5ce18ccf18de63b7ad00482b25551e5bd674dff5e
+GCD = 1
+
+A = 195670341878824e78dbcd7a9bbdf01d7d54e01cfa117f739ab817058ad46dd5dac32470badf593199e18435430480e2fee254b3366d304b6836caa0dac60f72bd253d1609c552c2ba17344f0cb31b04af26892beef7d8b6f3ce13ffd98a9f46883
+B = -c4f0453103a641d9ed6f43d346a46d13f27db35d1c59e8c2b41dcef25d2973606b661bb1146a67605dac9d6c6206ad088e03e7f4fcc9b87359016d65c8cea153ea38c9d05f14f4d8bfebf6a8581f1a8d795180dcbfc1e6f4d6632196a2a160f59c
+GCD = 1
+
+A = -1d79245983fa01e4d163aff7ce0af8f4e7c6163f72b9742bee42d32649e1301902407ea0ad95f4257c606d23322c8e7d40cc85c414f7ba8e1261e17cb11cd31e41c1cedf62f8dc3598197c4e360c9db2de4b61907f08190c6e366d5367d22f1ef954
+B = 1d9b83afae0a98265e6db4d0d1ad6a3347365ac638a67422215bc55df542aa453696dd2d204b88881a327d6c9a94857ff791abc1c93af7433a4c454e2ca5bbc501e7c97d12032aea304c451bf60df7c09ab1d0fbf36d0c0f78fb68d8789fa33b6c7fa
+GCD = 2
+
+A = 799e777775d7394f7a77c6db8e4529df86e558329770e19f3e6a0c3265f977ab9136d17189fc03b4f9bfc15542f043bf36bd23b4ac5f588fbc3397d8a07e4fd0637555c048f0b409dc95144e043ae7eb3f7237220b4e69ea9e9504c5abe51f8c59a5af
+B = -19ea3656e1da17cc2f354c7041dda3f6bb851ac01796d1eb1cf5af31860a06b2293b4aa37d8bab04ff4536f6aeea6832fb43e4fc53d9d1b23b9af9740c3b95a8ab617b5c2e001dd28d4510e6a5365031935b130de2d966f38fe88ec2262d4f5ced94252
+GCD = 1
+
+A = 1310e5826ac225e8b87d9522cbbad948409dd85504c259432ea240107c71966abed2f99d171143d1fe40a72b2bb04e40b60eacd3991599870e6a9895e1c13fbdad65bf1f65e80cefd5106d1f5801f9a0a0b69c9ddbf5296023b5293a4bca25794eac6a85d
+B = -b0ab1e364364263b095716435b5707d8df942a74cbedffb7a8c7839866a3cbc9d7e7ebc7bd595de37e3eae9b911c7b32c4f89f97914da0c34734ce14f6c3a044c29121abc8a2cf4c66c97add14ff7abc6948bae778ad8e2312c88811fed28d99fd7892fe
+GCD = 1
+
+A = -38e054e10212393c1e06b81ea801e5e3f9deb19f04a0d1859eabd710e6a8d84127aa983013a617df35b2490fc1138a03f8086250bfd3c10caea0e135f305243518e68f121f655adbc2e9150a8786534b2f1bb8041ca6507934892e9ff80eb6c48bfe2631b0
+B = b02ad650b74479c61cd2c3e30a752764532ddd364ea6971b81a4ff59eaa31f075291f2efa81ea898ef97bbfcd526c54f76a1b3efa9944bf97fc051cb9bd16a7a92c1841a93c565a720c4a12c36fe24869692e88f5760a6fb08065f1a3dbc9e86069733148e
+GCD = 2
+
+A = 10294a7bef1935e40e5d5a169118fae2dfee679dd25e71e35f9b265adb49818cbd56740d5f91657300467c7f0cce26b1b5f7c9b5f37ae8bac26c07721ae24adb06de97c1d3befd4a162141bf45c90187a1a4c662167b7927cf7e7f016b8556556ba2b40fd2e1c
+B = 1c7889e668fbb811a850d939a8d967d910b670ef4937a5aee3c0c8ac0255dab86be09bb5c65e2c08932a949dfba40298345cb4ba26ff9c69dfd39c1674c784e5498947a96421deb07ad293448809a9ca4bc1f35620069ca1d3b3b31126ee27739eba6147df8
+GCD = 4
+
+A = 193093f8ff4eeeecf48441b80ea2d337dce52077eaa3044fa89638a72cb9362d1b6603251fe2794233ec0afa3df79f8816ebb6c525f5f4870f9ab2379ea5e6ae5cb79bbd4a3cca46f35b5c9dd7c2b4b31624da200c1ad5f8e44447d66048a964d69cad9599bc710
+B = 1dbbb0a1a452b0c5416ea19b76984d4faa77a040e3f45694523ad18fa0554a3ac0613158177eb3c5b88a6bd757dd00f2cc7b53641828f50790fc66f5af17b74d068a4a8c398877d176f7856342051854c77e6d0b197a18dfe98bbd4a3008451f9674785a362b1df
+GCD = 1
+
+A = -adf652d2278ac55fc954b53f5d1ad856912ee4c727eb36a40739803d7fe32437a67aaa0a59cc8394ea84eb096a11956dc611a6fb0d846ac7ec107d5e08e092fc98f34094040845dce29730348500284feca0dd0bf723da6c1a9a79409b3310be848e7b88b11ac3b
+B = 27fa57c1c92a3a60d9708160a8996db66fe590f75ed0fb00c2d6243ff151e9d9dc7eccbf46953a6b0f7b44ae1199b8c61237d1c7410ed413b5fe6b61b5a628e8a387a77e0c59ea4354f9a61db2df57227a9b4acc869d856b849cb20042485034eaf20f9e33e42312
+GCD = 3
+
+A = -14c7d5b904755b8f4d20b0e23b6367aeb453e637b3b5583fcc131938e3a10527f9db281cfb61fa718fec45a1beb19274757ce6ad482caddb80426f63842371ea328102f57d5221fd89324b82e2d091350a0ce628877611d2d16e9674f003199f0368a2beb092e68b181
+B = -1701edb25940b44dfecda504eaa7d092857f46a7da0687ba606388189bb355b6ca8f1a80617eb883faec51709d5ccf63474be8e6af008ad7296a69f47d6a99ee274d420685530e521a4186d327829f0b2be15e6816f22c1ed3f8e5e195e6181d9e76378c0b02e49a670
+GCD = 1
+
+A = -11fe62efdd49137f4171fd1cf7e05d571bc83ecf88e4f25d548aa6d48ac468a1056cfb47f83f1851c5aa5bf37860307bdc4ae21e5641c830eeca0efc1d952352c6da051f2a39931d78e6eb9cabe6694a7b3546085965bb1c8b1911af911faa85d726cdf7995812ed8b4f9
+B = -1e18be71d63252d88a9ba24a4b496307d4ebb799dc8d7d51f0d5bf8c25df4809a06bf5de7ca330c380f4e3e32605340070cc24614ce8c403fb40dbf1a1bfee996121b352acba9b98420b5f34d9cb1e04f75304908fdf23d57ded0e8e3e1cbfdc11c8f37b40b5739393672
+GCD = 1
+
+A = 1e26106a038f96fefa81499b8c071f950f01173fd855cfcffe8efac710846fc4c8acc3176ec63b16720c2bf8aa2f8ae41084e3808824f9c87f8af8b131928d81bfcb203873cabca842c63e5b572f007adc1f21462498c32205ab9a6609a5669b47ceec49c155c874ccc3ba7
+B = -301ca6ea04efce6b833130e716a3c7d33de943c8751bd1b6743247c7b278c2419c8f88346b6dce45c67b3a6248f8114e978fd982f1096f4a49d99037a18e1cdf51546b18f703cb342a6c7511323b25e0da5120703b27605513cdc934026f86a8390ea3cb2a809820245a5d
+GCD = 1
+
+A = -1235c5a143af75f8ee43a9ae17b3422c29732581d99af2cf7caebc8534e0c9083ee532c9e5357b663e5d0895b8d06ba34521dc4f27582e94c20f6fc1bec19a81a5c0e6f3db249132000fe8530676ee7f6104d9440192acfc43a2bd15be5af4e1c702fcecd3f365f81befdb68f
+B = -c59787911815bbc53dbd825493b8114bb6925cf35d5ad5572be33db2134cff7030bfe1b1544fd9c842178c1d8a80a06ed23feb08605425bf8788503a8ab43fcd03737993b41bcf84eee4bfa6d09e753314fad68f7d78ab8c30943e0e4fd8f552126d69d53475851ad79de556
+GCD = 1
+
+A = 3984340a1a2282fc4f08d749f6acf3c49d69be244609d0965ca430dace8147b5c07dec0a2691cbf96c945fca9447de446b9f7e45f328903daf574b7fca299742d4b3c632bd48cc32ee3db771459acb73fda9277c746f4ff5c08161cd1336c4d2a1392b676886b098889715032d
+B = 14569bacb60b94aff13c409f7c045bc2a40f6e7202a61ff7ad367c23aed1f13849b9e67462ca9d4464c8b200ebb5b06d7151047792ab9aa5b043a67883f2d32cc9983004b0e7df001cbfe1fb30da2e81164c27590a4b3946d9a0f529d1803e314d095da05d9732ebfa6e1e74cfc
+GCD = 1
+
+A = -9cc3c8b4daa1042936979deee5a67644d69565aa1acf2ae7b017172e28c01be4df5af1bd30cebd029153f49891fbfaa35f1ff7797478223598d1203da831290b41a31914c20f5d1a636ee142ca61521b3be2bc5ef09992c56722ff282dccbdbf7ec30457625b31f873b1e4353460
+B = -b3bdc786eda280a4f65920f842303f33434da1f7f010f22f0d019daa3b4228fcbd7d1cacab23b414b4ca50a24106fd779eace714b765993fcbaf154ad863e448bd7edb119bfdefacec961a2eb2d95875b5e24cc3678facbf28250d34cd199bd76a1faf2ce777c14dea56b9841bd7
+GCD = 1
+
+A = -f4d600ca23119a9bf6b42b7ae208c12493fff374f899bafb351bffab0fa299892e17377343b4a2a6e2d697266f4acb7f1b1a463b508c98ff60b5a5ca4314b4a70f65011c745bff7a02e0839427eaebf8b420a32d66d11adcf3612655cf46d5246ea4aa1250305c87f476ed61d5cd7a
+B = -122a8d2b5fbca94051404e1e454ce748febc63620003c5c7eb6d7685f0a6ee80d68c64c1e873c653c6ec832581d6f6e3b3c7bef6ee176ac2246a032334b9998627e704f36e959c28ed744f7e89981721e986fcbfca1bb79656eda9608c3194ea5badb6abe7fa27e01a491542deaa9e3
+GCD = 1
+
+A = -12814a364322a7beee32fa9d170d8ff2d6037a43c2d1a37f3d9a8b1fa5cef44194d4255d693355fcf7d6d9750e000bb3374f139f0731564e426a3e67c3577eba178bdd3a8d2d1145c7b2a260fb28ad8dea6381af89cb39e23a68b7ac0d891be092251613d049bf7ab479d1dba3de0e507
+B = 1539c5e522e924f07ba6be9f60db8a2db2c78e3b84585ac17a13042877ac2d027cbaa88e9f45c758f35df06308da1d2626dd6be9ed3abb102295df3cbeacc6b2adcc739c772a3a9c9320e79316ab7db6c32310869aeff56d1bfd0fe0d9d316e1f06eedfe987b56dd3016ebe4d3e280039
+GCD = 1
+
+A = 1538a9f244f81fd697238c252cb3bef4221e525bd915e27fc865674a8b24b25235b6c731c8af6ff1b8f32d818058e3b50c59929517bd728e1f76fb7d320a9b1a4e90cd7e2946eda39342441932c153f72d18fd73ee431dddd62e925916e7e6c4d835a919a371351c4fc0e182b86621a94bf
+B = e127c6009413c8eff6ea59c73b1067d26c1ce42b5a3336b9fa85a4f57724a37734c18d028f2d669baa7d613153fdaf0e482759622c38dcc6aecb2838c577d5b12dc42b8a143dcbec33de26369ed59709410f7cf2cde4b0bd89167f5574fd606019d1bdb3581ba35d004a55bca651bc7b43
+GCD = 1
+
+A = 1079904a6aa766e7147e5ea77b46d82825d452e657b39aef739ee1f3d4c3276cedb11e551f4e82f7a6f9e57b72a61e82ab37a15967435a63499336a0c7751db2ebfb83d4244fa1165175c8535b9900ab015c645b674f7347c99ba63a9a163657c37cd62cb49cd3ec9213e59ce4fff1834716e
+B = 199d3d0b3b117127fa5ba38d7f82b35db7298f75c449ea8b2de1064e22d1ebf42cfe550c16b0e5a706826811b60d71e1dd05519aae7ac82fdb93f5618b6c0c0287d6089cdb8ef6dcb48e0f55495764163d488140f508f44240c9e2d591201359c316fef38fda4e8b231cc35e3b94b38d4b0a1
+GCD = 1
+
+A = -16b5167c502df1df3ec2d91cc247b9b31e326956032cb1b7cfa885018cfac1c42621a1618ea396e6e64bc8b36425a134b2605dbbd058b0ba56ef4b8de60db35dd1816dcdc13246cd222b601257c8074e21777fd2cf3a9f46abbd1072f2d2645d89cc5fb9deb801950fd2106576c900006ff734f
+B = -1d13fff4b34c8cd55aa288fed39984e6c6039e97ee645fd5a2b73ad24c2c691b62c9e3dc467397310e5d5e745ed5a844bf8b32e49042e0e86266ae76a4719c521d08e40297ad4018da5c0a3247e1806f600877d039fd7701c1eb8c47496541ffb866d4dca1a396940c3bdbd747f51db24f5b686
+GCD = 1
+
+A = 1878cbd0524042789e86edcdc8c33eef67054ae306a259d4c6694d1d53e1955071d100ede14f98082b0e0b3889a003a67971d93dcc8dbac6e7ab2d18374af676b37b63df40b1f946be8d6fd3c14674d126824eb1863a1835d15c7fb44e743f036043beedd9bcccc1923d5f896c18635c401965bba
+B = -1bec905d0c60dccad4532b0ce71db2e99659fa111f3bcaa53014bf14ee7013529f731688e09b7eaf07cffe0c4a80543f55943bab6490eff978b60fc27a032748821704314599c94bf7771588631f01ff4a18acaa61a8d6396efbc4bc16290ee7fa84eb41c16a83f7227afd362c0079937bd3870aa
+GCD = 2
+
+A = 1b5859b59da58a2da71faca1a38837689d2a654869396e6644c8c7608354e755caad3317300d106d3cc3d1e1beec59db994345c847edc5c8f38da278553bbd81f7dc862069ad3a4601c96b8624db0657b1b7688e5b1d1886e547766b980fe14f4830277435c213922a7c6dd8313e724aa3aff19f04c
+B = 1e1faa796c2cfacd1e1df1803c8404c707111ca682181a69fe1fd5d5a1265d786991185826d6d8325890afeea0a7c8cd75bf9282c183e60d7c8e2af87567ead0bcc357fccad1726c112db0812e255825d7f27533df1e05520ae9db084bc1d51332e00c3a36dd143e2bfb0a0f01eafe10b8cabbaa8c6
+GCD = 6
+
+A = 94a49f1fc933b6fa4ce049dca65bba377aa28279f3faf8396abc2bb4b8973aaa3e41cdf6786b2b916fc788ff918c02cca1ba9486da57e5a07a68b104f70d240018fbaaa7924a61da6bfbc2f03ee2b32b19000635a62b67049b5fb922c6dec2f4451a02873a57d68fe27f37d4f8068305810b1a8aa238
+B = -1c34702e8fea24f032904aeb6f78a37cac87017cfc781a46b477b5fc35a82e5c37e3fde3aaa813a037ac8724d9153ef7b2d361dc5a1922e8b20d7f31a45c6ad66287ecad59b296c5a851d6f99fe94b3a60f08c7561c7eb1903eacbb1e773945d24b7a2e317caf77b0d523d114d1375cdd06e863fd7577
+GCD = 1
+
+A = -1f1ccca5533c2121ba01e3b30ac867352d401a256c29e05c9624f31f9527758e8c5b1dfa6cea3556bb738c70c18171bbe3f5245ebebd6ab6185c9795383060cd2b4212eb337b45181e7fff2570458d7013d74836784521240bf7a0fafe3c0762b94b9adb3f57c13611f9707369da300a36d459a05385b90
+B = -b06ade579cb5262e1341c317cb139ccd1757455a413b8dce25cf4e2cae6038bd0b8600d8bb79bac469b0403331f4ceed563041caa844dc7f7ec758f09b4191ed12170f5e3649e9417d346eb0618ba068c26888b9d5a45c76852afefe825940ca0a208e028a5f023c864b4304ffb47f99148bb9d2885c73
+GCD = 1
+
+A = -167c33e1738a2d4a1c2f29a1f1a14748a4c3064e44987cff5f0bdea5322d340aff91d4061311be0b92e70b1303debc9f6f2576e91e9823db7aa90738d9695cb9efe9da700db2d7844bc3a3f8ea8591b76714c3779d8ba29998b9596d04377f140aca8e714f0aa3173e92e8f7ac129d4b83c762dbe82154cae
+B = -1b9134739ec8af81a5007128d71e22fcded3040d414dcf844cd385bb3cb61648c63338d3c708afca2d8f32a82a6199acb8f9a60dbea4e3cd85b929829eb2e2c4c1800f2672a20194bfc35887cf96db94375e079f449b28a1c06198b74a8aa5b11d172b2bb91e6139ca077e7e9d5d79519aa836132df381b4d
+GCD = 1
+
+A = 939694bfe167dadfaef933887f49baef88bc9851ca5e977e395e7f493988ba1b3c276101111843ec153b15db6c2148e9ac60ed5f06d3349cb694b04137c2cbd71cb331a5b5ab4a90f8f4ae9290d69d3ca0d8981b530875b6d7d9db9c8ba09a3c066546116a7dac8a34c0ae4d5dcff4058ddbf1b24c938bbd5
+B = 188e2fcfa16300eabf7550e7bb493fb53b92442da890ce10fc4ba493103efd6afd5bb06ea1b0658da0079fe5b9aaf0c787eac6413a50cc687b691b5431c878c194a88902f81f532990acaf715f6163a7038739a220c115f75c44f75abef3e74759b664379c282caeb9b9b721acf7dee2e91a45e0ecb798dba89
+GCD = 1
+
+A = 1ace227a0cbf863cbd6f6cfb62145383516cd36d819ca9506f9098ae53fb943a9080f8450ca21a5daf083924b9370dfc7212608d19cb7ef359dc23618a9480ff47e5a3f4b811980dc5fa1165b0f1aec88d28a1eda55edd694cfbb114548166c02e26922e5f52dc2ce83af42258897dd6c0b09ad691698e4bf45b
+B = 1b9b335bb6d9dccb2f2ba12ffd92308bb7824410950e3643f70d32ba0a2273540c02b18256f14bd37e2ddbc6e5525e201ec9bb82248464f0f3167664b1ae729f0c29f1c74dd9d68da6a8a5b3042b3a9969b7e10c95b1bbf1cfac98b77314adb68368ffcf7f6aea762e736979bfa98296c96f15878a0d7bbbee785
+GCD = 1
+
+A = 12f64c4ea9154b8f80755d20c76288dc3ce8edbe5ed0c3d1d57f29fac2582410a563382955b8060ec9db7642ea7ae03579d748b4b5c28da9c52655e17275734619586ec9fca406ecc58997a338a9e13b6706074549fa7850e3ba67013fa7aab8177da734f08521af8d475625330bc1d5097d2df45215fb9c29f71c
+B = -9e6e781ac14f805a6063b79262c666edecc4f63e8ba7fe13ac13aca681711e2b44a3d282061dc2e5e24b908978fa878ae0ae0f950d98fcc47063a7b1425cdc8f9e3640b32730c66adf484633d0392171264dd6f47fb37aa6f7cda4cd77cd7e2e798a901753adde37211af119809e69aead821cb76fff71e897e630
+GCD = 4
+
+A = 12761b7101002f4559b00ba7687c76abb7570c0404e993c6e88535a71f95e195cbe985f76965c84c0382790b3213d00a352764c41742864aebf46c7907d2426df91775b360fe5141ea80def72368151551b6e06b7fdba5d5ec9a84f36fd62ea8a234ebc3247d7485ae29ed106aadc87a54398e91acf6174c7c4108e6c
+B = d59e9d7560f97d3c36ac6921b33af72fb9f42a241852c29900bc27d8e2be791ba33fd847ac1dbeded097c3684d08d868e6a750f62c036fa01c3772c05c8b5a9f46831dcfcd5047ccd35cfc20e404ba676266c7bff764b0b84485c2de9ab4faff880b189c42b0ce53e78ac3c19d09b056bd14f9387cb125c8dff2d42d
+GCD = 1
+
+A = -a357e493a884ee4d99b45450896404caa2f006ded907335b2b840bba78a04a75a856ea128770c0b7aab27eb56744d7d1accb7861aab23e9805b2ad712eeab69aa26c8f0a1497c5d9da0ac8ec5e3c36ea060574caa3b7cd5c108fb590db671897c58f5f26c78f24e29f054b1bcfe3e345efa0bde0d9d25c3dbeee6c7e15
+B = 3b171c506a7595480490b308d5295848c9a198d51b74042ea5fa9dd3cb40b865516f2762e889fe268655f629984577ceacb913949f73c4e2d8448001979843d04a2f7f43426dedc4a0ba26943bcf33bac63931627b2490ee304123f5e3ff49f07b13c65bc0fbf5ce2bb675e16209efdc5d648435aeee8663ce4b799ab8
+GCD = 1
+
+A = 878d367075d5bbc764d3169441ca9bc06567b372848efa2c763c406f6082288e7b155023127914eb167ba822ce1fb4f77c6d0f4c8211c9d91ebada13599765b708d0c03f25ef7b3aaa5147274357fd6f9589a0c1ca2e0adbfbb8cd37fa1f283f356bd2754e4dca86d7a7b59cefc84392f3f39da132aadc21e621393eea8c
+B = 286fa28479f863ba0655ec460acaeca416a5213a5cbf7c16982efd5a35d03cd222044b2c8515d6b97656977ccff126b6213bca344dee2cbf567c8611fd648d062076317b5b89cc37f754ef1ecfe0cc1b64a826a3dd79b3d030d816155db88164e6c1d20ad81afdd796f6c12b9c10a42ce683d116ff3284ec53ee74523611
+GCD = 1
+
+A = -1b0f16d548eff49f6c89f73a9611ec14035a84d05af4812fbb2eba5db27354bf7e6c517d1e2ca3a71bb076020e89fe060dab0290c37f9faf1daa5dbee056e9778c87039378ad926c178c4f5f240b1eebf20ce1abd61689305ba2fa46800a8ffd89115f27977e7310dced082db1dcdccb359d55aaa6b99125b74bcc3b1363684
+B = 1546179c7ef3bdbd9d122d7d53746057a4749b6796eba332006854f340ceb86ca47fd221c6b17feca8725de22169e08a9c60b6af4c83a3fab9314a5de6874d1c0579bb93b650251d1407f957f8e05109dfe77603c04c3da92a40d2dcb2f1fbbb9a335832653965c3e14a579c62bdb9c3ae179bb6230229caa7d01383620f2e7
+GCD = 1
+
+A = -9477943e646e890512b975233d5c2b6f30295850fc605fe4b5fd3ebf97e99ec33cb3ba8dc06f2b13d1d3795d4de9003abc1c72204b27a1b77fb643724e8a20c79c93c930556a72038848d24be395eabc4901b076f645825cf7cd8372e6543afdd85d6f2947e42372ef897b15c4a8376929ceaf383def428f748d4f40dfc0ee6f
+B = -62089c0c1792712323c027efded0c6f9106f9f298e6ecda72795bd5dc430e41347e84a1bbf266b00ca58008a8b86564cabfd7f45b5b9cd0a7d16c41f627e43ab12a6100060ac5f059854ace166c28eff20af72f6359c26008863f0ac09fb85583a173bf487f7304be48c5129777169783620f7790d0da6044be47c290044ab9a
+GCD = 1
+
+A = -6caccf36a233543e132092e2ea688fa1d46510f190d4f6c9410e2d2a0299f63aa28609c57093f43cf67bf816cc87f8fac3d7f14cfad70b815a42f9980035b38b18d93576595dffcf7f7732303662d091bbaffd3fb56b97204b265e06455e28c040d7b47b22b71b2d489af5ed892f1cc968f6f8567c5dc2eeca6cd3f79369f24b
+B = -38f7ec4ff7e5a9557bd0b88d436e684f6ecb99550b0efa916a6ecfe1320e5adac4d7c4efb57d05163b22584c705b5b143c4cf3e253f1f3a05ed2c1505abe8fed982e8e19aee09c93160109d7008ed6dc9d41b243736a0aca8913ced6cec18cefc9674d0edcfe2dcfdc81eeb2820ae8d4aa813ee7c2183c5539f58796774f2fc5
+GCD = 3
+
+A = bd5d7c2ed417b2875e083725a902fb1a3e260cc68fc7f6c9ae750045f1e69301da60e054119696eb185f218ffe04a19d3faa6230b582e46a4481b6bd1c3a6c900980e0fda0c18338b7ec5f55a2686821da6a0ed5bd4b90cfd2548ed7921b71e6d393e4d39be4e7355c97becb125f1bd7c614400ecc8cd8c305ffc2f887bbe779
+B = 7017b20ff6fbce259291b53a91c09ece87a7834af86cb5dd3249b71ebbe462148a81ac3e653eff29fd544d729be28977384d334c8863f64ad9c2276b20030c87faa2f693e71036753c7e8b98aa27f8daf4399dd83a84a5abe2db8e04cf06b0606adfd321b76459777e265a036b6c59782d097836ee24a75b3cd3bf59d400eaa5
+GCD = 1
+
+A = e33fe12dec47ad538509af5ea67a506814e787b475a4c9e809197c99afd80de66a1f68bfc177f86e8a409305fc9df40ffaed8740e63c5b6fb67b5960ff0444e91e661213e0a62728c37589ce834196bae6ddd6ee53607e41633d70af624731161ea7ac9fedb70b21688075fc0d6a3082b82a1a991b87f1cf3203bbbc3f7bc762
+B = -cfe76cfae757cedd8ca9186077b7fadca17250ce655e5b4af4f30ed872135b47a03ce3876e2850f90e1ce207459f31669eedaec4ebd4a0cb9ace3ea3b9687984388dc2bf298617d7ce6668566c5aaa030eefeb5c5f5665ef1a1c7ba23356167e5b76a2f79564020bbc263fa0f734c6f8913e4ad507aae1f65e3311c7bd7074b0
+GCD = 2
+
+A = -756d0a0ff13b141172ebb82ed364f9a35d1022efbe41b1d0508443a8da55b7c49ae9ed5f804a22752e5629c61a58a9fc466625afee42c09f7a0fdfb520f43d762f1ae069bc4d93a8a869b78cf22f62ccc44e7af6884ca642e048665ba4fb13746dc887939db27c99944c3ced118828c3543e1f04b765e293258abbe0f486f044
+B = ed412544d4eec6ba5986a3b4dc091a5a29226e2a3f0f72296474024054fd3edfe2ab0afc23a4d967220820fff3b7cf0d8251166a76836264416362d0f5c30465d6cfd9c6f1b9af3f7707294ba521971b5e8a9d315010177daedf5851f564d3e47655269bbcf41f0d820ebf9fab8e54e3f7bb96fb5e4a0554fbdec2b52599e275
+GCD = 1
+
+A = -c199bc6851a15c193972f46d4f7ac5e1321fc3a53df1a5559f8450d3d1ccda5fb597ea57409f62b49c89b607694c5b6c699c1190041e0c59d622ea13445f2d0b47520472317c163bbef1be889de648339f7b042bfbd7605ed23ae35cd58d59aed632d1445421746ffeff50cb80445106eea241180abde98c3b3c0054a6392e46
+B = -5f01ec6db256e8ff8b6aba1947ecf18c2f2c8d56964aff26456a6b3b438fd273037f7c82241b00796e0a21505cf82044c7545b0e152c436596d26de7c373015a19e25d334b16486abc43ca4251809d09d70c246887d00efb5a1068fc19f90b725c56333714a06c1d04a45bb42b6a81a69c8af6e10dbbf79b53d9d36b4c4a58bf
+GCD = 1
+
+A = d031613a925e8c33edddda72237f08e3dd38a827368823664cefad36c7bfddc8e2d7d7c768d55d5058e1c1e43d7cc612c441d7e974cf638252e2e7911c1225a03fb7565571fb1e33bd31c0652e4148cd6efbd51b10e8caa28714ee6cab9138c4f0745ea27bd101b01642dfca88de7d22185c1b8ae8303873389d4e6ebd0e83f4
+B = 289dd5fc0aedd8edf9fc7c8790e87c8f7dfba39cc652526e57d6f4c54e34080f9423e74737c0106c40265f8d588a2fe3c4a2d8fb9a2a750240b68b49c3fccf444cd82166656e43c4ddd5956d961c0da0a82b24bf02d27438ee72ea694d50d48689949b8373499c79f99e126d2068aa0b39879cbc6fea9165331da3ad4eef5037
+GCD = 1
+
+A = -55963bda34f328b534120ca4bd3b65deff696e4f3f0fa3849d8c38c5f011dfe3ab2965af91ad87b92e5bfb5e129af532363ae5da50c625b0d64688ec708a483c8f5f1e100fb5d4efd1ac82f431cf9faca2c63864050c642bbfd6e77c0cf5c93ea391272ef66ce806b58576459474697e35485f85b7c1426c0dfa1506b011d8f7
+B = d246117e7ae43d6d8957707a4e86e184643420ea755ef8bbbc98a724b3e8b0197c235b91d2d3701c0ed80420ead84a68f7fc8fe14986e4b2ca89e6cc5235aba8c8916e5752e724418b9a9fb4e16ce9f04c47328af66d8b4ebe384498aac1e81bd993694e9ba66df262e22c6bb66514dbd163d9811adda2a966094dbe98ab0ba3
+GCD = 1
+
+A = -ddb882195f29bafbff1c87925f8dfa8dc51df7799aade28b7e8860c374fccb1491fcbdbabe6c378e1e603d26cf728afb49a332bff65bae40a90f148e611728161212503724fb917481c25c5b869b0b0d6d65f7635a98946ccdc5f74803890ba51a33594b64ec32128e2cd16df93cadf3ca720cd6712db44718c60af59ac34f10
+B = 4927bdf37163fd73c8353ede48248d63c90d7b274d3eb5b24d8bebe295e14ab6dd885b6bd2b90c74b04660435d6f9de29520bcfca89f7a336fb3943e6abe8139db76abeacba8c432051f0227db91f1ca891994126a371cbaa60554389b2763ba191c47ff16b93810f5512c3cc3067cc439834200bb4cbcc927f961f98394f5ed
+GCD = 1
+
+A = -f6f73171e7043d30a6b1ac1492835f49bf0e7fcda58fa949d296be8bd336a8576771265d1d0de02b2b66f0ff4379b149bb3f1cea1841f37b6b0ede0dd910a44b327fbea556080b3efe7200beb50fc157bcecf0c69f58087358134569a997d2d3eda22ce16fe5a1e0a341140914f72c5d473ba0a4efdffe67edf86ca6b83a4f9e
+B = f08ac097be5e56dc27875f6823faed994c1b2364c9b02aef1d4acc3b1a7027589d9504df3f214825cee2bb0a80065de3b960a4b9ac15e7449917e3e1a8048babf7b1c762d259397923599fc954d66bce3ac24b11be318cc939384536861633bbc8c1720ef4f82d979c24b9d43d058ce12cdcd8bf6ff37c1dde4d8e2e3e433068
+GCD = 2
+
+A = 70f1c11cf262d61f1526cbfb8ab7e13b8e1955ee345f644243dde102a8dccfc9d8a1677b85221cb3ceda2a52e497fb00a3dee9734ceda4c4e0e317808498a7e515f80fa9a13007c210c7be8b795c695716549ab4d523050c256139d0e37f37f49a8434e1415c6385fc4727eefcc62a9e47d3897cc99cb830d74750216e15d643
+B = d82855f451b9dc67c65655decf728764ee0c8cd37cea5d0fb17b5093776ba6bbad68d363de994ef484c7c9d119eb00adc9c5b4e6e2ee4ab721989d969dd2b6f5ecb7087f17d58f0c715625410dac2245a482bba7cdb44a4472c354e2ee0b62f48b5786002d21212f44b58225ed8422456e18f292f6184587cc11c0a6c3d32bd6
+GCD = d
+
+A = 3769a82693775d539dc3a85be4a645477f512b31f15e21488507e1c3e58b04310f013de661072c5cd8b86e22dfc45c878af4747b6e84d15561e82dffab77f2404aba54387dc4cf5739dc8b43b961a844ad175d08b2fff50c78ef1d960fc50d482dfeac6bf293b376a7c34564f17f858083499d5fa77069d4c3f09fd669eca6e1
+B = d408ddf12c29827b76183b55af124b4fbe6df4a28c7182dab2f8fdfd88404100c16587ac701357c03da9d2fd23c5cb521ee9a2213af3c3ce8bc80492b2904e1ee2ff5a25b042845307e561e5ddcf17ce48b91fe0c0555ce9be4cfcec2a141e11aeb233e8328d853bb414d4f25b8859b7111f3e8897bc7a7e48915e384708578d
+GCD = 3
+
+A = -9aed513c9b54e793cb9f4f609989cc0c807d3a92c2599de08b5dabb84ab76678740427fdd516a5b065cc5ea48223b187132854320a9f8c6175df4f1e47ad4d6a7c5d83a940c6b7a35acd6d47b286cf3eae563380b6c9f858379965ef66768c372df9c4f0ddcfb1852480cf5b5bb49c8dcf2c7f2862230d32d1621a31903da26b
+B = -b59b3f89c21bef97624fa6d4a9aab2d73058060f5a85845ececedc684f6356991845ec3b2efafe766241464b0aea882707c7fb09bcd41dd0f29ae5ec6307aad950e03d6a61d65b44e51f0b95dfbcef9004c9704edd2965685b58ec3e14338c542cd6159c07082bd6745730a0b48177fb1fbf34d0f126427eb5f669f105caae91
+GCD = 1
+
+A = ff5402a7e3cdf18beefde98b874aaa0f63a320018b2cc476d9da21f0bb0660245f12b8323fd3f216bf923329038a2b79cf81e105ea811cdeb37b324ad87b7b25d7c62d1a33feea288e98af7886f6ec118fd5dc30eef8027e746573adbf99c4de1c4e4422a96e824921d14be5ca3d2e259e57303ec30df721b799af2f16979b6c
+B = 11cc449131049142ac79a1758bddf434ca2079e060c621c9ca7bcb355df93303305dba62cda7a9187ec24ea6a8c6c7d099d6237d8e251f84d9d9fb6661b71b3b6bb8641f2e19892526bae5085039f7873650f087d933f2f41c80eec34cc8f0a14c39552263d0e25165c09bfe63625ca89aadf08ae18984ab93b7fa1bee1e86ca
+GCD = 2
+
+A = 5e44cac87597648bfb5fa4e02567adbbe189e4e7ff8fd6177cc13bf05f107c25ffef9ca6a84db7f2808fa463c4c1e05a83b0a3345af8622c5795b0b9d3dcf569bf277da70f90238cba04926f9e892b162433b40e7fe8329bffa2ddb06ab24c34de42fd57209e0e60763fcc13964dadb28dae00038b365a1fd6c8de8498826aef
+B = 55fcadd42af7356651963ebcab519de6a2a9c95cf44b362882f61a0c2c3b45b30f0b36c0b1919bff845e6252203e9930cab4bb39ca521e03092f2462fac2e5047fd3536654b8deef12d747260de226bdbb79eacaaa1eff609648c4abfe9850181ae6789f01a9c9e798af5afd79f82e479455b6fdfa2bb8a41c18e392bfbe833a
+GCD = 1
+
+A = -65f9e5726db37028eee2330e4171252bc08c7da46904936d016d26d67e6765ebcf811e903df6924aa84c1ec6ed583a2c169476b439cae7a008c1b08b5d5ae3280662504fee3dbfb9203cefea31f8efbe39d0958dbe53c522aaa57334c5af2217df352b84d55f788cc179ffac3bcd2bf914ebd62821c6dfed81daf034c9e636c9
+B = 21c3e3f338d121394144a2084a0b1b4e47f50421658e9d3e42c8b3204db2c4f4a26999dce0e91e3318ba764e599a8a3ce7d799834b1d4158d2172e85a837c2d684e27cd350e4efee98a8bf844204d6a27a21e1cfe77dbbdcaab05db88b0d42b902c67e4e99ea8b3f3b6285773213a901b245e9d2757b60347c30413a0252f64
+GCD = 1
+
+A = 9c55e770567f5523c8c34a40db5c99a65a18cfebf01c408ccd1a14fc449db21c70e1a59ff7e8045b4848cd9072061a8b9a0b0e82b12ac3ce2fb240a3a2f130a56d9a08123cd700ad2ef6a5d540f5088c3fa78eec9e1fd6b440967b9b6f4e29449ce1c2943de4215683e1699c286b1001ccd7ad04984f1dc941732794fdc5d108
+B = ca1d8c8831ae7583627ea61fb6e7df1d2a83c415fcd350995c791d8bd0b53407d65034cae16f498e215fee81b38d5de7b8cea3f1f937eae45eddf4afffbc5969d7dd9e405578fd7d37e36f4cf082ebe8435c5d01f80bec534a43965aa9841dc71866556d7e1415350716fa7575f4a9299ad2746171976e2ff0d2eb26a011d64d
+GCD = 1
+
+A = -82145818e887333c10d64163b49a55a7b3d5755fe499e7ba2f4bf23ba81b20ba8fa07030f2c6e7a3aee019b62dca63114b4f601f09f0120537661dfcd9db012b8ec7c3bf02da8c78eb3a696a63ec265ca09e9da390b6c82505de27a87a062d47a8483cc70408fd559b97f93e84546db4306fd354eebd4fdf19cdbd9b2ec252de
+B = -cb7e2c35be308b92c84cb442ae7a04f57135df7b86eed2e6414dcecf917a1644e3e13b1c348f6e13a30e00f75b1aa8395bfb771c7f577e03a0141975b1842a128f08eb3b2826f43a9c1c9f3934d279c38107dc8c4cb06c5e3fb94b869bf7616277639415196c2a5f0025a2f20237e12091658a838cff6719a45950a07a5d325a
+GCD = 2
+
+A = -a3a579bd080a8dacc7c8b4c338659ae633de7cb248b911d8f9a699e715756864d8be436184abe827005145102db9ed9fac3f769cbbc50db74ab30dda96ab54468d077b62733bb4808d88a2ff8128b50a7942edafde008d0088ff73dbb9d0b457975baa04f9d0344a2447a76414e3c3d4b450499acad3d507b28216722598704d
+B = 5c89960d45ea9507a3251911e9a6a44a431565b976396eadd21d310d4fda77f6bf236e71155aba05862a3135d713c734c3400653750c5d055e3656b57e0d098990824f87cd180753483c5bffb92e7f481506a329e2cf88474d57d6d61eb9aee91cd4b31141b24c4e9ba3e44f9e4c705e8504409f94ff60e18334c97754964602
+GCD = f
+
+A = -34f6460c9f7cdeef668460bb0b25c53bf4583d184d598bbdf3ffbb23016fc47ab5bcb68004bae8c29b7d1352f8bc44ab2dd247efc60792813eaf577dedbb2df88578f6ead9c72146be9120fdd8bc3914ce4eb40259ddf76ef449a1980b531d013dbd70b076ecb5967fc18e7b16b69e294976e0c5cf8e08da6a555d1c5a348d50
+B = -93914aee0405920bb43a1656451777b0b29d18988696120c8355dea64a0c68da342b652263764f9466beb5eb9e6a971d7d00b1957e0160b9ed73204d7c6d36d9098ebe918dea46a07ef55405ea09395d503c6dd013d48e096fdcad8fbe285c16f20f44925d16c4bf51bc1ce41aa3fa242e2668cfb62df5500c7e8f5a5733b2f0
+GCD = 10
+
+A = -c68ab09f465fb56a2ffdfd157708b343e584f095bbfb09c74b50af7885959d001aca824a7aa1dfb5842342ff907781ae622d6818325d88dc87e26d4d4b21ed27c90a00a425f6977dfa4607774c92138da94a911d4442778ed39405fa33cf37cd5a1d985843dc15a2e3dbbe7338f43a5ed9c925a6a4df6820afdf8db4036472ed
+B = 5f88ed05689915d77c0ff4603ebdd8cca4402803d6520adead85a11eb2cb2363917644c7129fe8c6f900de95bbfc3efdf44f8c06ec38f14f627f18c7d15c5c7832b544ae9524bba75df7c92e51e027f447de29e37a6e97ecd6e61859de03dd2bf9177254e79702e53ccab7e8f98deb75829f6f996d4e828bdb2cf345d9c076b9
+GCD = 3
+
+A = f2a1e80f723edc6024afaa3212f6fea834c6954d58b3b53687123d22a32ca933f00b23ec35b29acf208f5a1df459fbeb05d993ad5ec147a7212dbf99601a4e70033fc268c75c1371cbd0e91b4b67fdd0db37f82ae69b64921b6249436b64c2a0ae0717219b202d628722008d4cfa4329a15f95cb552e54edf534b18506ef5732
+B = -36ab5aaf4d66f9a577b141faed35455392464f55346ba2611a45ab90b6cbd1f19af2ae713be4c149759bdf7575834850f5ada15cf15dda3175c6878ed210a822e459ecb3bedca1b50bd8085308e96c8f3c8c90242e5e9fb976bebce004610ee4ba24067c0d31c6ec2a33b2fa0d73df805ceae3ff51fc30be498c5cf66123973e
+GCD = 2
+
+A = 7ddf6a76ee91ad09346a9caad7187a3a2e2e5e3019a517f197412a653c6e0569536b1eaef5b8bc17453eb6d304a4278e84e397d8b8739230b7a7985eab7481cf56e9a7442db229da14d09009a11e80130722cacecfb4186318777fd017d834a68f9f231b0ce895a59a0b37e7086657a70091ec864b15a1f5f5aea40a0d271a74
+B = -ac7ce8a90f6a5d64458f99b9791a174e45a450e5ae5063dde007ef5d6bbc4b9c82dac6433fe3e267e8c0156aebe28b6c1406bfd52488f6c07f00e100420bac2b360a203dde3a105b19d70ff7a771eadd2f72af09658265d652d3c1107bbf37dc710c44f368cbc9ab1436760dd0160602bab5d609e78298aa64da24675c2af3ce
+GCD = 2
+
+A = e1aa7194ebc4a4a97d498f88b4240970903f1e3fc617477efef582f604eb12dee73e71d29300b802afdcadeb98b26c4a73edc9dc3938801c8f1b85f7079d15e1f89ba011fffc06e7f208fcfd60a9a1b3237bf537c7fb7b7d4ea6bfe260630c73a90d98189ced91e4845eb0fefc5970161e87947dc102e24731e5ab91e60551cd
+B = 55ba462127b24e612807dcab3e19411e197f67d57c3adc76266b4dea2eccf80c22b3a66fb100338cf3b03870d5801576c48d668ecbcc832465f8d9b1227e98a941458ad30e05c89a5682ef004e4091c1a13ebe7b3617539490e98fc96a26ea8eb433f02bfff96bcd79a5ff52a8e7d04566d5fb4ac0deee3519770b273f9e5587
+GCD = 1
+
+A = b1406338c3be11cf67a8613b8149e0204e3509073a3ca0fddc0cf3df3df5307befe6aeca29c653505eb9e1f9a658b2f1d8fe46b97a33a417f31b4faad0ae841c7181fc74a70ab91dc6f6e877d4e75b7ce12585f5602d07882afd74b899ffc86c0d27a62e20c8026500b0ba6832ee3d870f20b33cb8bf54adffcf743cb67a1eaf
+B = -9c1f7ce47c1256e9a5bf89a6c86619b88bebd3fe28be55a4401b0d68c864182f358576a47712466d9ac106f10c52030b67217879c913ba19472e5e424d00091a0d7d8668d09e832131d5e8f502646a5c332fe1f6fed7cee86193f68dadd1f42f9aea761c9598563a613e1488ce87b165c879cb99a64f46e691cb7329b341e90c
+GCD = 1
+
+A = 5a5b9982b6af5f2e4c7414150b503fbd22d00efd6a9b7eff48964ba147b8132a80e7e6207b6961b946f32cecdaf83baa78a7dddfa3d175fa594b90d2fc2abc53bf4ee3412a4fc72edd2351f2ede9b41cc97dcfb68d1648c6c6e6d3257e5efc36493c9f02ab7716692442b2670de89084a4c7a9475e4347529cfc4bbc3b8b4500
+B = -49991a89c2d0f7a5de081c22fcd49346530b0f319795146d721fadca7d015f0d524eeec770a7b9888ecb41d48650bef3256edcb22ac77725f96f1b797cfbe8970f65a93718bde7ff948df33408a9e46eaaf03e8fd009ee0bc34a189e43dfaf7a03c06a6e11db25e4110dfcd1bee6b493f7de40f6b0e0c0ef341a243c8edbf905
+GCD = 1
+
+A = -e7484deda086ff745db70a1655aa72ff6537571440092d73b017364f46b5337ebbe8f7a0afed55242e82bd7f0b14559305a6d88f28286c99c27ee5e32daae2db8b3d6ad9dc246ef55c830ad646c58fb44c23682b33abb94e477bbf939e8bb27a4e2f1e27482c30fc7db46bfabe2208c9e89bb40fec3dc24c83f7da3c3d3b6d96
+B = -b9ef8ea30cab0a42c19bed201708a07bbc10509220603aa09d4cea6386280aa6f2548020dfca2e0d0651ba2ef75dfd6fca95876e597a5d8cb102bf9ec6e36cf962d4a29b0531862fd8edccd3c996889c4edd8801dfa3620c9f3488c770320f6e288de3ed763b6223500ebd42099b7b5ecd86ce55ded4c8386c497a0211c4dc83
+GCD = 1
+
+A = db952637b7704ffadafc51db2d418d6727e4da720160b1abb3c73cf3d11d95856761ed7cd490f8b5dde0f8eeab5d71a007223ab33d72596d50d3f660922fec44565da2779990b9b84382645c12fe80c84d7769db36403a6704f899fc2b7474ab784b6eb1dcb19b775d8eff02d225254eebbff9ae67015141e944796069f336fa
+B = 54d5ad2f79175143565445539d8f95a1776012af72784a9769a1d8ec9653367c5e8290e0a2990b7460de28a47768e3ce5930caab841fe19b369879f912804b66ec0794f0471265dac2c59439a3c04c35e6e3b989753fc10b7c536bf114ce49f9d43757ce152baabf2ef2553715c3c637886720d138bb8b59e71ed28d0c61a02b
+GCD = 1
+
+A = -541a341827715392d101b245955096cd5ff54393edb51c90815216c7be8eb6cfbc4f6363587400a7137d5f4ce5f2131e9b86eb9e0ba895b3f0d699bc4c3136d2dfc027deb67682e42cccb2cd58a9353f32469d4e9058087b06905ca17fe5a38111a4f3a43b0ca8ca4e2507aecc77aabc85fe5b477336ca305e049705ee36dfd9
+B = 9e37e6be12098f93cce777141a311509152f47567cf7b5719919511f752acfcd0275b0715df4f81706a7c93ddbed319c5dbf65fa19fb35e16a850bf77cb8fe55ad72e7d288f33d57e695c17e89f7e835b57106baac75be4b22e9ec81b5410278c9d4cd3a860ff89316583c9d8e0291ab77a58942427df6a4f42082341cf8da04
+GCD = 1
+
+A = -db9f0aef07e018d88d03a0cbf06e87f827b793e8e69c5384e6ba77bad80c81465be214b1388f7746ac7e4b038f44842ccf017ae12e5e989eef94c5a005a0f165bf3b3c63f27e7e152fc1a5b880d73996da28f00b5b74deca2bacad56a046e29300c0325b9f068f942e6b7ca45a17acbcc97104562049fac42f03ea6694260c57
+B = -f97a2c761901b15e9e8b1a3ddd2fbbe37bb3d3ce1809d88ccfbbd632bbf2795fa660eb35c733c919444cd4b23d11a8625b073899086e58ffd074281bbfcc4a9c6f7e8fa9d438cb6856fe8f7007d6bc599c7d31e37bccb33fb72cbbdad6eab7b7ca6791f2f87b38553aa34b6f40f91a74d0d76128f04f5fcf730819722a427853
+GCD = 1
+
+A = 92e8f0210ec436e404a353e31b6e6d521758e7176bef0bd97d5e18ce0f7e53e8cda9d0ebdc642cc6f98343fd42f1257332e3f43c640bb17a4627c606bcc4f1a185743c2d8b0f2ac2744403a36226ca32dd91a2bbafc4151e12f0f528046ff5530a5fc0a8f3b5be51a2f4916bec6a2fa9ef7e006102886b2491ed531f362a196f
+B = -2dfa59607d7803576f80f7a1229cfbe646b60a3c9e802041560a1eb666289b3fc2dd1449adbd0c9ec4007977e1973ab6fe81f12099724d5574fb6d3eb4151e9a165fde6d0d8e9b177ef7e1c9961b7af5b7478ade5a3956052070cee6d0a86556ca0533a5fbbfc5202f77f09ef3f2fa0f635bd9d800115cceb29530a9ae188640
+GCD = 1
+
+A = -f9907d01ce6987ee8f322646fffc324909f62ef1c19697f4f0b4ee1c024c2e9708d5df31747783c1a0240034a22e8986f24b34d2df70e5ba75fae03d30682c093f351741639927da0357ffb303bc240fead312a152a5cd830e16301a820a8818fc83e1ffd8d698478a6668035f6a971180564368239db6574f2ce3a7069b4bdf
+B = -1054e20b0f4c034e0afb49af0775fa038130b8146ba8b83754f3fc5be81e08742bcc148b6bdde6fe7a779e484e75c7d7b30bd3cd77e8a5eef8c90ec3dd6f19548f326383d4c807a0a3e51c2eb5e1d9a906cd475815999b46b61e9af17eb37f39caf16a963910bee778923bbd3241936ac0aa0de5532624553aa9d0540afca656
+GCD = 1
+
+A = -acbe447391e96e280ca05a19ca95a07754bac7633b44c3b9bbc4727633feb83f7aa99ce22d43ddc25d4a7c3311afcd9c072f527ceb12315b38da52538089ab9b02893a0f07231b37a8fd1ed1560f4bb57da0fd4e760f5f5bd34b6d13f013f5d73e6744111ed2be31515b92db3f016829a640fee1b574d24abb618f0da7db697d
+B = -90d228694275cf10d180a6da81a5451e2f2c49c7bcfb505894ff65e91db1d938036bcd44542d2033b4c86a85f9fa3d792a5d0d13d522c61326514793159ecf15013b15a79832f258872f5a454289e1d4768e07a5b33f0a31741a49607d0f7f766b7b7748890de31bcda74b1ea8ad20e42daab8d9385bbcd583217d7184387ea3
+GCD = 1
+
+A = d63dc3c811f1873f1583645dd6f196e3949128a314f19a3a6f61ce4034d72636c60d3e6789ec3f1c99a0c55aec8db58e2a56bc609c6cf75ea188ae51503623ab999494c85b78da10f45abf90874e993b8189d5dff711913a205c773c343dc290fac2f674494742b7f0411a94dc1e282f86872f2661953c5d87cba160c0823cf3
+B = cb2e71b2d5bcf60e08b53805645ab23942937d610adead1daf2169b1a73866ca8a00ad52a5caaccc2fc785c549a6d7b1d69abfe0ba2548b6d039e0fb4775f09afb439a6ccc3b043727f977fc6381f09a034f557dd662e20672419d00921c0286d52f11ec7152a64abae1dc7015a2b96d8411461adf101779b707b9a500648b94
+GCD = 1
+
+A = 125422c4df20f12576bc8aa7c8a0fbf94a005eb933907e8293559023ebdf1692e80594d05165630311b2b9c1265300deda5dacb980bb3d3b4819852a1978ee49f46b1a0665252b51b74cb7b40e41c15d204cf768639c6c468c28a17dbf1503f187125a95d17f088e85ffec1aa8b4d6aa94b93a7655991591066696f83b9c374e
+B = -1c01543774f54e9758475361e112f9ab5c871b57a79fbaa070d9a23d05861e89dbc0c244b254b366c13efb600e0a19cad416b9e172d3fe213e55ed125d4a56202ccb36535fc709f2195ec6e10ec38cbc412984e8debd825d082bb8d93d7f81fe024379f2b7e84a2b7e2a5bc9b726c4f03d45c730112fbbe3f0c38884314767de
+GCD = 13a
+
+A = -b7085eb4ec0877f7c275203307471342dd75face1264aa790c000455dccd01f257fe51916fcc87db24cd866333d2993cb1085a1e845c5745680e7c9a075cfcf80ab135dc25b3119ee0bb8eb903293f6366155157754464a0430573f240593f43a38c3e1045e1714a69b749094138a21e76d7e3a66fe98656dd0973a87e52e2c4
+B = ec2ab74f638e649b2c0bd11f165f7d148290a15549a5b92548fdf66779af5f4afa561105969a31cdc3c8019b8923982da9ca564f1bc6233fed708c80693f5c8b377a31c8cfcf8d61c75557bda9d7641ac21e7b86394bc9c719c9634fa2731febabdc0eb41cda6dd8ba558ce368cbbe6cada99e5422f4b1bb7a17cfc5d6bf0d8a
+GCD = 2
+
+A = -29b85f1f9265e9d3871f4f9e8aeb11bb44d3f67b4cb9fb1f123dd2ffb629d55af52d46a0584b0e55a7ff63c578677457c8316587b44eb397d72f51cce3211b6b1058cb4d395783f4feee48c0b992894527f2c82769325b32ca4d88ff06cc6a004b5377d78b204ddc4ed833f3a875bc37e9d60b719c76cfec6634fb0a071a5d51
+B = -d7277f4649e576713e20395cd81ca9e0be8f413a677bc7189424688d8facd220c8927c529fddafa7d1966a4e69b4c6dbfa2dd42d3e883b922bf381634f19c44e8059f70b35cbba226c650c51d5a224352baffccb20a948bbd5ccf2600746bde6b4cb12be91edf2f8a3d0c5d0e68894bea5619b530e24697dce6df590326746b7
+GCD = 1
+
+A = -269f7f6e86e202d21b32584f7fee0276a09d7df3f82aa5fea773d9f778fe3df405d296f37ae3dc4f36eaa954a5677e2bc1a18e9849e98e08fa6d8b052ad34d40fd25809b09c62acd423066b4a2a726fae7568ef10351fa99f267342f0a8b8ee45ccf09226082a1d68ed1de412646fe7a7906fbec7ac49bb776d7f8587b62c395
+B = -3a756ee81e6374fb9b4d6f411194773bc2c34afaa09a882555931470173c2f08756fa183218f7655e5acd5f1f8b42ac4bb2b7e4dee726f3883602423ea79bbcf50cce383a66d797af682e791705defd57537d1e0bae240e93097ef6b6f3d2cd2c534bfd3386bc3af93c1caf8a9d17b83385694c9dd238cb76e0563961bd828b2
+GCD = 1
+
+A = -a9887b259ede2f47e9195370185fa7ce9b0b03dc9c612d3f9cc7d553fcbdf109de2b3ee7fc0a6273c84f657271ceb8dd3fc2789b9ee3327a7fdcaf3140ea1a5f9eadc790f1740cb3ef5cd00462522738aaedb2fd5426bae6d9fb0a4151d5e927838a5aca027dad070f75fc4d523b7080d9d56740bf5d8d9b3cc6152177c3f0bf
+B = -2a7e77778f38491f2ff1cf31e9d2024f1afa0edb75348ce6d9ba21cc081523d4bd609c699455d5036f65d2b3239f7ded4500489ac0f05f2b2ae244876582a3eca3c37766cdef1b806032692ca685de474e6c0aace771486fe3a8c35249113996e006d572a8de579a7e2fa056b2bc1ba9c8dd336fa9c05a4227854aed33b8bc31
+GCD = 1
+
+A = f2518026f344e9ad46a65e0c0382bd6a75f1b1adb98076780663e3efa736fd9629529c83f62cc72245e274f3f4328bf36a39edf740e082f78e030b88aa69e42af9c21e06fd58150efbcdda0693019c9f92902917a3b796094c3f1e6725e933b57d38b3be8015dd7a1d293270fbf4e1c11ab7519cf817b3333f3fd6c4cbfd63aa
+B = 844ed502eebba7ead23859c38d0fcdf6641abba60ebed453b8ee68be67f84ad8b019d16fb2a1681d305bf11dfde9f5119f1e67af891e46ba00e9741af0546395be72ac6d96edebbb93d29956ace4b6da3a4a2773b825afe28e55e129707f42ebbfb36825ff30986abad47a6bcc919af81c70511f816afc3d203b4df48909b650
+GCD = 2
+
+A = -331c7a990370840722a14c9900a512ff6c454eb37890ad6d59dc897258ca668682e563f753e5e6a1121381f2e239e8d9eeb5867c2b89eb6b7e2f58632ad94d66c29b79b980670dff642cadb62781ef36e97631da48278120c534026e15a1f01a2369cafe0cfd47588ec5c3a55cb88fc0d60ffc0af2c0caaeb37e83322816bf09
+B = -d29a675ebb1e842fe43988371ec9fcc0cb6c03c213cced7c58f0b5a3d742820be36db4a7769a7d9ce3d30d3d638b20e777d8f026efefa64ba05e9beaa70e031394b71ca51fed694d6eb36891b5843ff56e9a34cd6760c9d34cdee25db33fffe861e69368498946db5758e95d14ce34c41807f44e629b31d7fca44d2e19a8af39
+GCD = 1
+
+A = -731f7189bdec6588c949aad1ba5584a0230eabc2c6b5f21ea37f8bfb05295c599df6090570e2eb17c443d53da696708b5c70cd6b7d8fb087e7d44ccead85c7986f6120ddda45f851cea93e0405bf54e5e182dabf30033f1e86754cb59c82a7f3402ed8a890be867e8d935f6c4a7df7ea9ed1a5a36016320e78ab830e902c9c8f
+B = cbb25e36feb44b74ed083842f0dfda97df7c8e869c470eff5ad69fcc1660ada9eef10f2f175ed83664dabd70285fd25efe67ad21b9ffe1a7ad51e38899a0b518e312b84056ad6756883f74bf7f55beb1929551bdb9536670a71d61b94a44f244dd1ad88ccde4f3e63c9d971517846f44e29788bf5acefe6c2e8b8418e4d17ff9
+GCD = 1
+
+A = -4d1121e7c0e22c10ecd9506d5cf39fb320ed8c606179a4a1d11c313eafa4ee726d22bbd5f7d3fbc889a55be8a20a0c1a16d26e9768df894124f2219fde34d406db30e25b71796dde1128f77461e0c324f2c05b79cfeaa1d5d4b40838a4e8ff4b7b47f300f77c32056841fa44774d9d6d68c566216cbeec3946cec1a0a3b3ca8
+B = -f3cffd8a72118a4c28389a9ab2b98fb687c445eccf7d74ed1f8f1e06b04d9288c493e73f04df6d8cbf18db95b26f44be721e4414714644c32de8a6da8200448a83ffeb52a624bb11c51458ef69016a20b43085fa8739a5f86da3120aff4985ff086857014dcc9c07e03775842345240af95752d929388d364cee5edab3882819
+GCD = 1
+
+A = 2616b3d49f58e60346539c83cfa58776bb7c3ee25c275d403da500b21f7256d3d4e08f8de77a7d6589c2bc78ced2d8b39e0ee958e4fed9343997b0c77172ad40d290a84c127f1cbf2de13dc24e08a22f287e242ca464e3e67f3f569cd7c317cb7cd8de44d0cf9f5e6d9b6125169722ec8f68ac04cc5cf6b9b7ed9f634ac9091
+B = -15969bc04e5096c938f053682d225a7ee7f9c71379df51c2f57cca68194b59ac71098fb8d3234c3687292b45da7e63b0259cc15b5cde509e89d2260694f85c788c4b2951390acb3c1595c637bfb46535fef18f56db6623dec727f270e2a9e51936d1ac8db7cab76338b3b50d116e8f9722e4c6f69a068c2ef8260c2d88c2e55c
+GCD = 7
+
+A = f665b4d25d8dbee0ab39080c4135270aa21b5d0d04076faf50456fc5b198c0e4599d323d3774b361765817c0279898da833ea235488ce0405fe727cf2a70537d693c5ccc748a370b68491521cb2911bd9e8b5da0bdf08c65843022e71d12292c246a48366c9014187fd82c4619af5ece902267741157f65dcd6d16d4c1a2825
+B = -75d7e8a968302d160115f3da5cc61e443e40ab10a80a1356428de256bfe22ef03302754a35f50dfa54f01646044fc195542ea4302e037c0514ef66f157e9e1a3026a559edb6f74ecffd71112483deeb2576a6be36439ca2bc496667258ee640d7c9f4c81e42c5c337326abb94884cd3b448ddaa2c0d1bc8e2cc5a36cd3c3b867
+GCD = 1
+
+A = 8c6ea052ea27830bb4d6edd1ac608efdf1ef0fc3721c073fa47aaab2a9aae124e70263e16638bc6fe32140c90003ba1c61a0adc083fbb2ec6d542108f226f83b69752666dc92638b90ed8884fefcd98dd809e259a360b3d7410b4c3f131a2c0b1ee2ed62c118009eebf4011a84f4b69d29a80cc49fa4eac22dfd125ece45b251
+B = -6e0d94812db085482960a2345696853e58469df6d8c423e8a822df40b5867b437b6d5d4c493b212132e0b089c1a1221d941c65ced8bbe82bb3c00a1e620dfd3456a64b95988e46237613b6ad736ecfb68d3e16c77ea1efe68af8d192dd9ec07f91bad4736b4e89347756c9ab7edd9f2b0b6765e723f1239b7db1c1bb2779e6d4
+GCD = 1
+
+A = 7e511584681b9bd09d29705f8f722fb83a94d914e7388979606ce99e1d8a6cd55a6b76f8eba238b05f9c5b7f35be534817c3934ec792080dd71f89548211d30280f20bc2034384902606470b9ad60b1a3e133503e0f67d5e30fac447f7b15aab94d2fdf33a575573975905e8a62127a35c820b9f00297e9e2ef5ba015aec64a0
+B = -3ccff0ead3639f375625d4c79196e4e4c3db30970499cf3f62ae0064ea43e9302440454e5d8b974a41f7a90163f1c01dc14489e8023856990b152e05ce2e301e33d5104c90faf09b1edbee5d87ed835c76ec302ec8d22a43bb6d1e28061a18be7752785420a8982d3d4d0f9a31a3d27e0e9ac86b12a628b74c0d830b1aec85d0
+GCD = 10
+
+A = f60d47cc5233fbdce987536ca2686e23ad5bbd1309a911b565a95d467ba756bd91bd1976844272581dfded42f9380cf3be29a19eb6b78172e5a4264578b9466c3a04499ab8f84f817b4e5a287b91d1621df8cad01d291ad14f93b3e33d7a8d54f6d2fe0db966a4ecbf06ece7af95487bc1bdc65b4314d333586027137969527f
+B = 24fa64544f165b1e9d5ae66e597cc2e1da96090c3ff7b183922f161aca617acff7b4069dc0086f47cfa392fa861f1e34d0f4192e18ca5167f647cf55521a97dcb5010c077f41053035deddd2bd36d6b13b8bbdb771748187bfb71a45d4fd6b3c2890db6b52fe6617b945ba9e67866daeb07e536946defc0d17565bd866e5c054
+GCD = 1
+
+A = fdd7ac0c47888486c4b66d071d1a6e71a3b05bd869d57c145005d77a716bc9aa0c6eeffa143149b7a2d811f7e23f7c6288c4e791538e58b10c3d2b4ac8388d41ad5811d51ec8eee49ba3d66fffc683ad7fb397f39cfb6d387e7ed515775e43a004a9aaadfa9cf48c176af7af194c40d80b10919b3c7a56c14bf000528521c9df
+B = 5230bd51b8d7fbd6e59118e74087b4f8c3276bbc4ba969d5177b9e7e0819f396805dc6ea27ae46bcd84a76f885f9f0bd2ca30e9406bfdee2add7d7d6df07d0dc92553b699c485c024a8bc801fbc6da38f638680d8481b7ecf30b331f1eb84ca5e62044f5f4016a80858d8509f760bd7ab2759f3a082ceff15a31a3b229e81e45
+GCD = 1
+
+A = ea3d6fa16c9bab8a046418c590653e2f4702f7e6786c8abadd9af39b277c3176019a7ce4c4c34ed0981d40e9d7b255d5ab4f5d5d143f1339056b860bcb0d81109a818a3830b583f1e81f69b8733607b529a6b98db8ca02e91caa3726cb7531c895ee70bb1b955561cf36f47d9d70907839990cd63db1b4f141879fbb651e605
+B = 7dc4f9578148627746bed3b58209dfdc70352e66ea15bee8c25ff6b9d63b9546df5dad862e2b852d4275bd89d76779bcfb15037a70cd3fa4587f93ae00e2df7d46963cfe378da3ef591fb85178feef5f14a9bf0c151a91f1c4027c6a4b64169ec2164ec5a75d080b1dc3b93fc0ea6c3560cd4d65911919562e6e57aa8047d2
+GCD = 1
+
+A = becdd98079097d92ad6c1a3cc710d15bc504fef0c2b94fc2db76f046f7929d3f7b8c7f5b5c716bb13624f6971b0cdf4a9eb92e6a8ed9b4d67d12a3f16d21bdd9dfa7524a313962562fce2a75c120cd7f891f00bac63cd1f2bff4b4ca2898e25af28d6707a1736abc38025eb2c165f5d652fb589c0f8892e38550174f0ab37ce0
+B = be6ea38ef2cdc9e3f32b824806c6499012b3d2458869879659e27dd229f378b0cbaf8c2d7728143d8a75a080cec0059515d2446bb47d1c74a53fabaca5e922dc78e31c15bc0a667351fa7349cc305d9c734f7f45e86991b6a739f9442aeca3ba6ce5daad23b3567fedf7eddeec804141ca1a08121dc2af1b6d86f7059ca035d7
+GCD = 1
+
+A = ee263ee7997be5793160a715a52f7a6fa80ada06c3cd5f7430706aeb8dd6a3cd3c9b00c8b881ec2cecb0bd6c786dc13fa2f8cdf876376d3d753574b891b01394a5051fdfed5bf319872c303b8077d6fe74e68bdbae86beed1422bbd6cefab10a0f2aa6cd0ed54e6c2e463b5949f14b22185de87760dfce1d58ced45d5dfa9661
+B = f79ccfa144fcdab12f48015030608b3d0975f958fc4a706b8ad8388c5d81ea7f2b8225effe77fe44c79aea7a069fdc02554a205177a6ae2d9088c4e2a09393142d3a0d0e8fe2b87887c2feea4e86068f9672800f7b410c4752f13e33d028aa2ba6666d8e90f0c457bc1d8b4a17469278df25d5957833c83b410bc745c766c326
+GCD = 7
+
+A = -88c7db25489aac465d59fe9a5fb6f8505da0aa910573347d6050e3dadd0faec3f0f70d684ec05f8bf5d47c1a5c808c7bdf791dc30d67ff207a3feb452b3dd185eadaa36eedc5c30d146507d4a8ae3d11c357e54d6639aae4e1d9fb63476b972c9b5e622e797f22270570580b948f238685b84b7a05583266acc0660a2ebb9c09
+B = 9ce8bd067b47223bbcfac7e30a825eadd93b66981c7128d2af314fbf349a2f1565b06c78f1647fd98021b02e4c918a63d8fd078d7fd8561a7a455fb2fca54f550de365451f8457ed438e8b2f147d3fff8c713c42ca3402f5cb886dd1d945aa3e75c988dbda45b635b5177348fcd13641d7826bd341b1ee60de14779e06dc90e
+GCD = 1
+
+A = -6f8fa03b531890b883642bc43d866819780f3d1224aa5e978b9c488b0229d822d5c674d57997fa61a8baccb0bb195d5bf7032f16bd980348295081a5c2221fab862127d3c795b78fda305bf246ea8ccf0527a5351a2eef4e1d478a40dee7a6fec18ccbbea53477c2567f6748b2cbbf2384d628e17c9e920599cc031afef64b13
+B = 76b96251244dcd2b686fcd5d3461ee178e130a4299cfb16d184384442ad91fff5f95be7f65456d906045c3e39fe6aecc030ab944400f44511d9a8ff23d61dafa9714c66d22dd17fe98565bfe156bdc2d4cd3afa9c559163f71b736385f32a512fda979abe8fe642ab9cb121f8d5fe515b79c487c580dc8fdb62e512a5a54690
+GCD = 1
+
+A = -586fce64c6b5c25a93c8150d4f63022db044286130000ffb6b91b0b91bfc0472eaa5de3b4183b4c9017439327db990fefd1dd846bccccdb0122459b423de029edf26c02f69a6ba628dcde89a59a855eccd31f686a7d095125678d03428fae3ba1fae4f2c6ae3bf3bd6cbcb8586287a22f1d974a58fd4f77befb91be133c8dde9
+B = -e007d70c8c1bdbe3fea07a5212a1302296b25aca3082fe1f2f89863d3c410ac84bfd1ca443d45ed4596f778d1a980c18fb9df65b02221a888a5cf0f491a726b29bb94e9e281f9ed5d3f09894f47e6c1506e3ea60c41dfb684ee24f8b7d11820273d270b6ac2806aaaf43790bec020aa3c3f284003fd77b0eaa93502ae3672927
+GCD = 3
+
+A = -4a6bbbe091afdc8fc981b80a24502e5c278a97e71867a617af987b33e9db7dc24befd9534b95f5d38293e438ad711bc25292ca2addde293a47ace50c7b4b625f56cda9251574007a8e505e120e11c9b33ac00a9beb61cbcf5c35bc8dd67957509d9822be52ca1eac5360efe8822befdac45b90bb4b81def0b009091373dc1a4c
+B = 8c18f6202bc786f45563dd3820e17024bad5f0f7db57c49a0384f06e27fe939e6aa27a1213e013fd02a2347a678d554e349d5430df3474ee9494b8add34df811e09b55a275e9e770beebb9fa74c339dece5bcc83c28c35ab8e266ba4f922a21a3d8ae679c9957c45326d9d478eec1ae1662024caeb0e2b42c5c5980187819d22
+GCD = 2
+
+A = 8ace66a3caac6f8739d620c0d30ddde62d0a7404603f3a00a8cecdcaaca41883bdfb66bea0ee114653ade55b7cd0c99df6e0224b0e2c2375607bb432cf568f690823d7ac3223c30fba334590f214e6f7b97835d34a1ab2f9358bea39eb874b68016fe22f2b9e7498a98a85d73af5cebec080f8332055fb8fd71efd47b54809df
+B = -a3be0a142ddd03b2ebc4e0be41ca274d3728ff55ca24ec52c511ac69b613f4f79f13ac56e851fb6e5ff2ab377606a6e92ab9424797fcce761aa86129d7a7307c0b9b382e841e392919bb40a553f880a19a0308bc87f4a7779a613daec10f4e21184bf09348e8bba1ed2d3ec071e61f71fd0029d5be0d754771fb8ee9b935d183
+GCD = 1
+
+A = -ef169664cb3832164098e5ff6245ef3108d2345b35c4f4bb84a61c8ee50011e1afb546025697b9e465802aaec737a0e0924de165d6bac7c6eb5b0f784b39db787c807de3ec8307b8a2e09317fd7b5bb5233f08b8e937685d9e28a2471e64ec1c9c4aa37b95225322f726649baee74281d15865f37a6c4ed98958fae347e084d0
+B = -9c8f59a568e6f7a8a6ce1f929c384a8d4b50f2911edec5947a295624db894608c7eab9718568c3331fcd9386b808a4a0317ad7235b9d9621441f25a14a77ff4cf34a39b19229dcd567b93de080e0ca5f07bd80cf4ecd21d977e4155174173900ee7623f884127422a50d07751c2e0e86c2cfd8e559d3ac39a26185fc27bba81b
+GCD = 1
+
+A = a757fd1000add34d9fea80c97bb42033b6379a7145872a8b53378b50b008b9f9606eeabd49a6bdf569193826f939c308a8de666ee3590dfa68c4067baca2520bdea3507ee2e6ca9278de9ad1c06d14e93a1e4fdb83336f0b492dff110ff09f4ce792df83198787b863dbfdb6b55f7683c407e902b2c5030dca9f018e6de58317
+B = -aa4453270d7de2c15d0014f2b5ce3a20a6a94e4be615c2612f234691ff65652411549c7ee2059bb3f7bd38578bf946b24bce9bba9f2a11e1311c9d18cffcc0cddf97b3d96fa7493da0a19732f0a448d26ed96ae6c0eb0ca8a97d0d73d5cd960e5ea6bc9898e75b7034a4e7bf8b1dc5f8cc971cee2348ae56980e2a6af070b82d
+GCD = 5
+
+A = -3936005e48e2e5751c1d58e5aa27cea790aa37d7d1673a8c276d4b9fadb72745a7cd4e707e3e191dbfa9daa7c70c822f12adec3a881be0316da3dda3c4b023c83d60753ac8e80e3ae8cb8d496c1679c6ba22f3255f1c92fc82130a19a299e01843614d2e18286feb34b1e1ee5348b7f02f33dc95911ea823f9c4fe214d9e3f84
+B = -9c89c45a6f1433296800f17198c4b5f8289347a9d83979c8bbd8b25c510195d749ef038bad3e7e72c4a1462fd48ef576d2edbad0cb5f2e216ed334d0c28fdab2c9f7547a7fea358527c262448c000cb54c36bacf462d0bd4e9e3f351eb5aad6581be1827a6993bef936be9241a022026a587ce6ec9f04c599481936d68277c8b
+GCD = 1
+
+A = b2644a071759709d5ce0a75f3e131ac45aaafebc56a18150cd1840624b8b376cfabcd089b3e12d53e509545fe99d2f56f54b6c47ea1f5ff6123549854cf54bb88d7faa65079d0c41bf92241895f79b4fdabf0a20607b8a80259d49b19f8b3f72bac6a9a65e41ede7e544d644b2222a3290d4bbdedd3c44042258dfcd74992e75
+B = -9b0abb3cc92c14a2c421b13f2ccca25e76cb150128c00d5434b07e0446e5e76ea51355d327ccaca63775c204d0b80da9be66abe9ff04712993a11f1dfdf046b1892b55d8b692b874a4a699188e82b7f6a5226a2e2d522ab560f4790509467a394d56c8300eeef19fb84b93e0fb1618fa97eae99a2bd5999664089875d44a9c4
+GCD = 5
+
+A = -36faa2d37ca1461c0c7919635bfeba03e463d86ab6383bab074c3d4ccc8ff58ab2396bdf1f5eae19f4e271aeaf0b62f1892ec9eebef8d1727e509c18de87ab1a274bf1ab2307a9fd6948673fb4cc8cbc0f0faac3eb5f2c9448dd12e1c4ae3e28836289a858df5457899749cd12ff98909f39649bbe80300ecb022f1347ad09f2
+B = -3d6a8d671af688942f631223cb8b5fad99d5676ab9d2d9e8c36fe1d2907e44163faec6d12fc34d436e1d22bc2988152ed01f440fbdb2547bbf0febe861ea312458db342f0f8c4085bad13ffb3fcf8580573306d9045ac09ff4f65ed2eb31f55c134fca21d9e45fe922906aefca1e3f9574be1eca72bb75cc6eb1ca6aa1531514
+GCD = 2
+
+A = -712c4b770532abe82e0c34b78feca3b65d25d7154e69663d1bc4a3087cf109c1daa84519134e17bda04b77889f1e01342b2c62ae00ed65f87d1a82686ae9944a55a884ec26ef0bbffe89f446c4074f9e074d69eb2628a4479dd4c868aeba976ac95b0db3b615976fa779d10fbb651dccf164c04723f372a91c6d40d7ef2419af
+B = -37f489a682f08f94615c40207d6fb8a4ee0b93709427cf6cc078bb8cfba60d95628f70e88d2798726ea9d3d6ba8f00f29b4cd34398a650e2b5b5620f4b4693e2600310e91005db720a7b6f2b8fbb3b28a542cee58f1b2acb8c43a7607c1c0d944a0f675304995c3a761b6c5b3e2faf9af756affa32e499999236df6eb9785da4
+GCD = 1
+
+A = 4c9f2babe4428ac58e191c98a91f12240f4e682b0866a21756cbb4f6c8feecf4e9e1b0a9e04b1298474c8fa4910197b81972126110b07799f70f0c589a4be7c32f1a285386eb861d23e9c2a7ac35d26d95374438aa8c26700f6673157e6fae40a5f1d48b897a5c38e1fd31d2694aa82025afa747c8f05d422fd37044fafecf22
+B = d53d378df9e232a8c2027b6a292b68621756d4a58af602ac4d9806d5611b3b2177cdd436fee7acf3becbdf733e3de229c8a0e997ea77e7be225fbe6ece7a240255bed4d6ec2035defe1f8f3f7dba416e4521b962806e9653a5d5024dabf0515f0c5723313be1447b0ae2daa3c57d56a23967b3667951f6d3531c57a9b14e0311
+GCD = 1
+
+A = 36e12557c58d0f31c2b8f263daf1495ff8781663c4100e1d379bcff380e1bb0f5a7b8f846371232dabb7af0d125f55c3f17a85df6c667274eb03268c3e2d8e1d5630aecbe12fbd5263f4a05a577c73914de8b54b38cfc03b3a252c7475982851a8989e2fe13250df59b0d085482f9788ffe0061468ee752cebc0ab024f4efce8
+B = -369c2c45787d4761f5c1eed121292f1a36f591fbdc44259002413a81b21da3b75c7505f61ebd061a0ec70bc21cdb18fac7e9262f48b94cbf34c6f9cde2a49dcbf31b2925dadfd688bb990d5b38e5d8c21eeccdd46f94ec82e2ab51fe053f829ab682a6a81eddb2a1bcfba0da8e052954e5757bb20f1959f614cbfffc2e0a0408
+GCD = 8
+
+A = f9de4ff75601ed4403ef42683bf28b12ef9580b0d17a26be539856cce68d65157ecc1bacac58c0f56902adf8cfc8bb123a4c8d9b9842ecfd42219794127d2d225e26c6b7c1ea6449bffc1f04657fb7ae89110d2c735c416790aa0a1c79b2ec082570111a52675df471c92ca246667a024d94946b564f3e6d5ab26a315bbdacb
+B = -21c901305699f787c2a1cd350b48a6af69e00203be480abcda412b0f04ec7a0d8e3033a5c3a06fe4a84c98f285685340cc3994d7de0e2988cef9a3107b322590af11b6b195846759f84216f74fa7d4f4e4b24862e390d6c79decfd14bbd20a4a7a4f0be8086abf23b5c9693274ce1ba5f21d8492b2a41bab277ffa0bc64a8d45
+GCD = 1
+
+A = c609b314fe68253016b123ecf683ddd1d2b7ce7f74cf94d55a352c87a14af98ba45ff8b7facaeacf46f4553cc2cb1cf6df4994d71ad8cfb42aecd8f4c39ab63f1eb9f902fcb5a3c06842595fd29908c517384377717cb9d2ef5634784d56cd45793a79675a5bbe7488b948e6b23c68e4b4d64d5ee42d62924cab5e3bf2ed8f63
+B = -b994ffcdb10fe09f1016a6fd3f01fc95a67d7b6f0d4912e0a13d83fcdefe7eb09f595ef412ec27a51bc31162e7d7895a4fb2df0678623d41e8bcfd48af11a0826c550994ed5bf99a98906e2e5122167ca81437ee1adad8fc39e788e5f1e235bf4b8bb339bb734db649469708b664aa1ad23b695d5c2fb3c653a75e0741ad0a9c
+GCD = 1
+
+A = -622458091a88b3cda0d712b9467753d67cc73893539188e5b70f139b0efd7b0576d2dcd432d79ca7807949de70e7845d35207b9316fa88feb97bf46068101dbf376b8dad46250f81227ff1162536d92e5dd7a24190cb9ffaf75bfaef468a329d003ec7b5a3df084dcbdfd043a782fbc5e6f524151968c645cd391adeacb4bce4
+B = 90ac0c595156d0efc2065153c04c36973ea281c937b9f07a365458996f6140125721cfa4d110a99665a19462718dd5aab8352732df3b3b1ea12f037512047a255c5478a7442313e1d1bee1a8a51b8123d8bce2e3d24af7c6b036e4bae872e983ae32c6ee555240cdcbe1b0de332f27785775e9e2707aad1e92b8ac8e0b09f7ef
+GCD = 1
+
+A = cfdf67331ceab5929d01231db019db73e4a8c8eaa74e8c238286ec9011a26fd94412493d45916692cf4da5a0af56c32892981ba8ff3a9cb982d3bc18b9b21d8a24a96089272bffb23663b5953ca213f2d6b1709ed875ece09a3e8f93fd3052b5c6cbc1f4750beeccba88b645348b6ba9ddec1850f1678e898bbb8c5568eec514
+B = 65c0ed69d499f9dd0526fb1651d0d0a5f6b034c6a0521b4cc855c1dc1b0901c9ef0308c44309c98b61a6a6ffc1e5c2709ab96a9046fa706a23fc55ce5c7bf26f11f31d40ef2be41e05d126d47a005e22c5689619da6676ebb5ace6256f84c3c8705812d91c3bfcaad090e2dda61f0e313697e8ca980663ed4f3db12e347307c9
+GCD = 1
+
+A = -446cd6ae72eb4ec610628fe06f993006505a5fd55cb9b3d03220c3dfc787c58497b54d7d67853355f937cd007b60b0db9e29d9b7437bf40f9f2dea504acaaf59081df03e06aa8ccf4dc96bcb8e1b7d9a02dbeaa242231f3ec2398f00ec939e50ca1f7a49327359b38fd9753ab128afb89024d2e7458ddd756ca1ca3c7c2c157d
+B = 702c4ddd30f22b192700493d415e840ed084e4eea8b06d9f030a3a13dc826930fa149456c2a07a3045e9e6adbbed5481fec5f69048778552ad8634b4c7695f1566cccb00a87bcb9c37d3262fabe85c4b4b08617c8b3c197e8284cf5b9d1b2b31469c58e5ce627c971125721113a4458bc88b8f722aaba7e1c4468fee55f66223
+GCD = 1
+
+A = -f25b9adeabc18c00087c3d9ac1ba29bd9f456179f19439abc6b79dc6d4e7bf0099228bd6528102d58f422dd9cec38a53efddf947c65b9f1082f755c9885a5ff3cc51fb3ef01d324720f322925dc486096a436d183937ec796e6ffdf06ae8dab810d2a6ab82f22ecc3eff597abbbbf0f2c85eb6da4f19ae0f97fe79848ac9b1c4
+B = -c26ab8e23136c8472c223085b77d96e069509be8c46b6ea1d280c8dc149d5bf53403661a3fc62a26282299a6a95de99620346831d3708b9e54ac4516a3bbb7ee63120eabe34ac22a2e021bef9affb3fdbb0bad54ce4758a72f861fcc8e6dd76678bc1e065e486540060f45fd7421d20afcb773ee60be274f4799f15d2ffb17f5
+GCD = 1
+
+A = 9f86c812fba442b45835c1917d6d016fd1f2e42f99ac6247710062e7fb518f3b934ae53194056e2f96d5c6ef7743c018edd670fb8197075da89acd24fff142abf3dd7ed108a2b313fc256b92d0d70097523e2b04e9a5e0973eb47577b38f00435e959370ad27c606996810c342236541beec7fec87c4c223f911ee5cb17e7ad5
+B = -ecb9187dc6b65835da358c0c754038f01e8ce809c97a4abeddebd64140701efc49cb28d15ff12bb9a600e5ec53a1c6e0c60f19053199cb13735ea89d70d07bfb2a3b8b7e02276fa3d47128640bb8587194aa561202c2cf42dc1786c5e01eaae83f528ef05646fc2fffe3d6441c52685fb5b28ad3a2a7e4510249e48ac217fac
+GCD = 1
+
+A = 41a2b641be79fa1b0151e2e53fe9f6d8e5fd639560469ae5ebcbe99d03503e39373d9268d66bd409f8e2c11273a01b21845f62a2c9868580ae6c438ff652af751c3c566ee81b68f04c59596739e379314c2cda2301c750305d475bfc3f53d3eee42ec44ad5c379e07f78ba6a51bed45046e6c41948640777d6fff0dc0c28385d
+B = 8f587b1ed591f3ac3b933e9b3f9075179ed0ac2b03b68453f9c4b1609accf1c5fafc1e8f557b8ee2fe22b448e84383a827c543c9bc797be1be63f12e010dd920e51ea90c9a4e37052b4323d3e3359e7e9389e6ddea8d473d56a43a4cc35ac271f194f433532ba2224fffefefebb0d119b51d5edb1e0c9cd9aff638fff1cfc1c2
+GCD = 3
+
+A = 293e308448427a12bc1772677114178effcfd956bb5d1ba9b922ee4c2ceb16b288530f590a0c33bdf25f4f6cd1a248a036416ebabfe9308b3dac099ff08bf69c0cb0e605c2550ce22739cd9982ba2d0ec3e130f9ae8fd58cc51ce22eead7307b7e3893769d6d5d39613cbd93a9681c3c75996400a1a92d7342e0fa36aa25c155
+B = 48bb591fe3a0c1fd8a0c59cdaf40002ff1d6c4656231572f9db0d98ecbf188633f8a71e0f74080b8dd77c87682f1052f801ff7cadf96565592eeb5bb7ae2c0886d7c2d66076a3ec1188e0bc4c432d5455ea96a6f594a696f0ebc653996832d7026e20c8823586283c6e653a93331015ec30adb729d370abca86476046d022f32
+GCD = 1
+
+A = ce29b2c76a641325a6af0cfaf93c18aabb3d474492cb11f2e05f0d22d84d794743ed6c6ca849740d17fe860db021bc75912a2449a8ce05d547bdf9a28d00dd5ef51cd529137a6f01ca8df3a09c4a3051b189b953a47fed4144c0361748ebdecba64e9e2503810ac8b67b919255d335bab5774d0ab9c0fe9410d43ca50f7e2c1a
+B = 4c3838c0b0163aaecccb2c3da074706220251492da156e040be2582a4824f389b5c6f04a326171e751aa52e9b594b6e6c4a75d919fcba7d540f96d7829302ddaf1bbe7c88715ecbf1db69fb78fe83795925fb9cd9b33e0102427d11cf701aab0ea634e4bef64d3fb09163dbfb60758967b5bf8526248db8409a64cbc180b3f24
+GCD = 2
+
+A = e3db115dc52436e29742b36bedf792a49e109027656d5f4f91907ae46e733af311c55955d1d11f3a84652cc924914438fe264b7cbc0b59b578abb22133d1b04b7245d9759b7053f8bdcc88c153101257b48c82b80e142460bef44c53468d01c7ab5aecf858cadc260a86798f52c3e6124e15d174060effec8378a9d0919d4195
+B = -a29270d84dce9c86f3e984b9cc64a4b2f9a81b730e096213aa9bcab5c860a11bcc6dd9d5b704b66216f6d2b592923bd3e2a38e45343f056c454691bad5cac60567988a06b37b1c2d0a13c7499d6ba06d35d55dfc55b10f7a57f5c4454084f615a9efbcf50d4f0168594ea1611fa4743507ab74c2790e3e93ae7f241c9e4dfac6
+GCD = 1
+
+A = 68705aca194a1c14067ff1e7edfca3bab113a9010d0d8e160099158059939e2eeaa219f854c20bd7616678be2d8bc823a8e76d411e02d3a19ad73c4f573f7146edfe86198ede377a77dc2ce409cb13fe8579b9576e83d7a2b36aed2acdc6ebbe8b298863c07e715c2b1a08fd8ccaea9996408214e59d751cd3d5be6151e8de86
+B = a335c8f59a8de3e76d3069a12393e7265ce88906595022395aef8c95aa5c376395affe55dfbca98e486c4a076715d971bc1407fb3bd66ca7b17a85a4e9a576ee0b3e0b1e21eeee1075ef98d8c9f02aae5cd2710e4f9c6b34f356b4cdec3079defcefb9b959154af09cd084eca6747f71c27ef620df564e53d4979658dd467daa
+GCD = 2
+
+A = ef3db775502b10227df44494c88a3bc0a16cddbc3cb9cedfcf803b327ce6f1885f2baa253d8e2fd2e2e0d19a1c66aafcbc8d9cb6be72d2669e9ea6f15290336bba5e907d5a21c429bdd9b71321989ebbc3e69241afa842fed3999bdd8801a6970c2cf88461d2f26245864fe8efe07f6df8eae87896e06d82daf1264fe86c30
+B = -7e7d5236ff38b82b0d9daa6bb46f3734eb89420a1dad401d2f827eb617f6b1df22f8130631b27301c3b5d368f36a4011127b49b36d2c6f40761de4c48ebaa8e3cb31e418b8d8f4641bb74dc970addd1d915ba8b5b590c4689ee50a17ee854089135a30b61aefe55b2cda7832ff4db48faa526db20ee33f4e446e8250984cec58
+GCD = 8
+
+A = 8e20eb25451d35c3df5b9fd6b02f5cfbc354c4a9f3fc497daa9b13f99bbf710fac1fd0190ba8970dc527f12de3471eeedc6fe09768ce1f8aebc7db6af9a602219b466416e5332b224813d7c98f9ec93061a1b1068fc539c99f0f7053f56e5e518e17ea72069bbf9d45433e7c3f1d36bc51e9c75ed82c547f8ef25f4cea427256
+B = 8ea1a51d0b934fd8eafc5c8c086fd063cf535508897a58502b094eeb0dcfc1f1e2fb441c77ef5110a68e1ef7d439f862be2cbc9f34c05d4ffeccd0276915bceef3bd7939a8fcf170b4769797d4f0f0cdb59667b3831e3769fc1546d17c5e40865af2db0267b3c4459469bac401be53a66432104f944bc45aca942837fcd96a79
+GCD = 1
+
+A = -88415b7af7366fc9276af133f99664f53c1d3148f76f383ef26ceeeed5cbe2af67fd4585bbb4a50fa2d300306273dfb0d286e089dbe594114729ff3b8c882584a3aac44c574de29aefd99bb55b51a6564054cd17f3d3cff5986b6d3371c09272a346feb83abf175169e9b6037f1d73985d67cbace64047fb022bd3dc1c0286e
+B = 3714e6ba7c0f40e3e0f6094a7c6249a348b6e7136e62b5628c5836b3ac992537b32107b3e030c35f58c1a26f18e4162649086f964cca81d86b285dba0c0589218c6bd4b146ae39a2e0a13b13c9ac6398864d773793c17c7da79af99f0bf041316fa52bf144bd1b2ac05d5d10361a26e958894c5993434980793fe8a3c2711177
+GCD = 1
+
+A = -8838d92feb6e074703bf74e06da5d8126e8825829ca69f2dd6ee927aff1dc4e5bfcda527cd5580b70f93d4941b072a982e7c8d82cbe7cd835d251b4a933389ceb23488d0701309e461047532b1be5582e3452e9fc9f1dc13fa524cca55a07475c7f066460b1d15ffc460b1d05e9369a3c58441c47e3e6410a45d784bc50a2d25
+B = d60720d0064eefb830e29068116dc7a7998d1b4994fd8263ba71038f20bc0833e4fb84e910ab5038d0028a1047b5f52862f3a68285638555e5a832ea452332f59af9a65f4c23a708957a971ba99213c02c68d49c93d359a172ba322991a96644fa3a565864efb6f918f58ea9274bd7c323197c4b1f42534b2a463a713dc3e30d
+GCD = 1
+
+A = -7ec8fbb84c65f5984f09336f539ac478469007c2adad8298fc2ec0ab01e666a1fd16fd8ecfa4c5b599a814124c9101bb399bd4fa8e79c43ad6f4b03275610e7742eae7a84f4307b90fdf8e07d8b66dcce539363d290ae6108127e1e2edf3ab7363785b7c6302a97ab7e3cb4b9f8f238a876138aec4ee85d28323f0a5ed569895
+B = cab41f81103882d4fca8d8fd1fde614714a75f6679709e0d40a1d4c91457b1d5ca423b683497a40d1a34575bfb5d9693e6d6cd12d1a4c318a7bf5c74536afa8579851868b0e6fca83490b51510c7c34f67444a0ddfaebe17f0e71d0ac81a62b540ae92732217f00328398b998caae43d814bc96890ea34ccbfb08e01871af032
+GCD = 1
+
+A = -c53b352d778e0d58b7ddb5078252c63a1b00102aefb8747616cc4ea2ce7f251a2a462c19a27c4e4c22e3c8201b4ab47a134b2522fe1e8a74875218a8e00d3ab7b01184fd28d8303ec91e00ce4ca5eb2f53f92624f755d5af462ea78f22929326fc2e256355a04628593fdaaedbf3d4d37dbde52402d069e82321e35c7d207a9e
+B = -17e17759929d0c4cb6340adf3366c3a3428869030a30aa7ac0e6d9fccf28db759802e428e306ace4650ca7b3b852f57c76f8141f0d613da42854380307c740ef45c349efab065b1dc242542549d563228c96bae39f9b9740a552488cd5e5c0e97791e803fbbf5ae0311b69080b3e1dd5cb4746ffe88a56428f932edbf6d65000
+GCD = 2
+
+A = -fad714585a9eaafaa41673c097fefc2be2a86023a4cf0b9434f04b162e3483940ba51c6dfcebb20c8297b40747ca43a6812ef6d5cfa1f25babb2d70be10fce00c96f2104e196ff17b4323677ad68b1e3b6c2c48862c1d847055a875bae92a2e5048ac7fcb6b541e2ed7ce445933637361b07f56476c7b678ea89e584122d89cd
+B = f08499f81ebdd02ce09ad4017a8a812c45fc90740beb4554001ac94f26fb16d29fd480181b5c56ccff243641404c214c21a9e40e6bb8f0e772b510c35ea6643cc1e4743929d8c31337530f10e75e2574c951479b0dbd3b14c74b335ee52a5c95edacf7e2e66b31972e4390b5bd024ea1364042f587f67e33718bc382dcf2c272
+GCD = 1
+
+A = -9002d61ef0fce955f86b86ea536c9c229f231982066870ac4aa5ff171ccba06c348f0a69a2664a77c15aee435cf9f68d9739e05b2361621b554b5776ba27b318d1aa08e74d0e37215a7f5b41e087dc829159a4e981ef24c9c840e964467fdb377137161edaa973016f5065a63406eacc8005f597e5682a6c992ff5182f88e00b
+B = -c346d1060e6565759884b97667c721eedc9f9ab33dfbbd0786ef718975d018036491c39437c4fd118106afeed1e71120130f36b88f3b3617965101cc4135edeb5889471de4534a5ea6cee903c0c15cd05075a6afba6d9c32e35a64beb8a6e71edd2191a8ac3ca2d3c5bc3052cdb3cf100ed0d204b1ec6b96ee2eee332977ee13
+GCD = 1
+
+A = -af58d877f64be3057544f5b0776f607fea0e7c70bff5e6a6dc50ab74eeb9e5d1633ba8223bf0f736d648414bf79ff88602179d0485a0393e61c861024d68bc4199cbfc4d8606171007694a5ab143d437596afc7e0acee003572894ab5c001c97e8875304d1091ad3caa6e6972d19aea9f56513f094884dbdb66c78c087e5623e
+B = c755d5bf3bfa7a76018b546a6f6e0a5362e814a24ac1bb357cafa4a755af652a8501dd32da6e4b9094c332597d9b7c4645fe611fff3603af09b8f46fd1333f499f2005227f50421c0522b1f8740db2c99981d2074da45da96df90abefbe8352dab79f16c6517b3b91fa2e1cddb2724fc9a5725b4b1f9180b2d4cc5699e84ef28
+GCD = 2
+
+A = a7a1384cd960e5b6bf2c38a1426f29dc375d71679a47a82c24ea9273019d0703c36578c278db2589338187603a7223ce88a66c255dbda01182eac3ef822db7753442ce6bb9850e3fadc1e56c6ca8d4088df110a8c265ede7ff1905ef67ea22179accba4415bc767d84bc6c698b570301170e30f34e3e05a96b9d08bb586756bb
+B = 3de72605eb4cdc5661296da8ad8c2b01cca8501ce27e88f79d3f1c167750232e67d96071ff87d22f3271e8322c25dc13075d17512646cf47a052a65fa23cab88e979a913c5da3a18f4c271c9a36704396a523366747f4ec19700b19ba0d93dbfcdac07c861c264aa6ef86dd4ec52959781cdcd49ab9eda5bebfad52797b6cb03
+GCD = 1
+
+A = 5a6b2996b36728bb3ddd2434b437221563431b8bbe8064edd928fb7bb3e8801289f9cc6eb21a29f93e60b60d230eaea10a779a29d0012778f3062a2cf7e784f3a90335baf280ca5b7bf13b79bdd9af79b7406aa3d6e67ada7acaae7e368436be287dbba7c836997311d9dcc299d50ee7d5ed7079c81629f5de94b658ae201d66
+B = -a2ee1abb1f1afbb77a5221bd2b9e40a673d4af94c8645ee93040d5d8c22bbcb706fe2ac8f93f3a9e4023b1efa3e042f45dfb66a3b870093b758f420f098f4d30cb3dc3d9a0eb0b5a3be94806bf67f6be765ea942d7e7cb81d9006701bd7df79e150380eedefcf64a288764c520746e3c551aa330b7728d38ced63405f45f9d5a
+GCD = a
+
+A = 56c31f5c365fa85f77425798ec6dec5427cb977810132bc981ac7850e6beb92155db0d1cec9310de3595839b38fc0110e4fffd893491940cd5c97b27f5c4fc74395f41f16f3c253e5a1e16a1afafc830afff0dcc32ad5fb6e7d9839289b84a52e83abd1f0059a24f3384095639779bdfb43f8fb07e00677681e8da7b1f4069cb
+B = -1fced12e2dc5d274a643fc6564f8519d0660319f233b11217a0e4afa3defd37ace2c52366cb54157e22ad90baadf3f7816c27fa5bc64fc8488ddb0a6094e2cbaaa33d1042732240bc16ed1f52c0cbed980833c0bf3a17a23c40cdba93cdbeeb3de5408bd5ca83fdbe429dda40ac400a773099f5c23b557396df242b108755393
+GCD = 3
+
+A = -6449a272693920f5f5314a1dcd4f5024d563ddcba9b0c6792b5fa9af022531fab83ccd53f84e051407b916dfe63d14d886fdf2b678cf0b3cdb1842a4add6d3f3e5b4778242552b1f56835837023889376f8408bd5c5253a2179d6c6baab9a20a7dafc4984d866554527ff759dd07a7b43dbea15710af4395c55a3fe8eb50defb
+B = 8f5428adff69f073b36fdc029c97235139ff73165ca54ecdb64e5ce0b184928820280efc568a58027af679816e0b76ba3b2994048ef41f85f067b3274ba53aab9bb832ad6c2a5e9e9cc9f38451f2652047a3160f2d058f24e9534589d8854a1b5a69d05abd7aec914ca8a840ce50e83e3436b983ab9417c7bbdd91e0f8f53a1f
+GCD = 1
+
+A = 56769910f83bbbcc7d1b084886925ab19de23bea05ef03a6df1e5bde64f636f71f379b51d5bb550466bafa2141c60c28e3030334b66bdf36e10e7b04ad4941bdcaee06832cc3cf29bd4e1ac3e1b4d3e6f90861dbd692ab90ed6bea34eace1e288a157bb7f7bacf16a28e65de0b2155593d5cb249315e391fcbf03c0e5e0255e9
+B = -f3f2a9e3e20f3685a5c0498e90e0bcf8f6d21f9f0770b389e4a0aeb6884233f8608f0e1e89b5f88ca5bf82eb3fa2905d41fd7b2e77b8a14794230fe5503544f72b34836786aae1093806575c9815d3bf48b156a32c1f4133c7af111d6a8aa6a82d0af3c1d8812ef95784c739ada1d3817cf455572c6bf97ea4156eaaa91abe7f
+GCD = 1
+
+A = 597f0f07fb775416fd2ac373adc1f535a73e683592209c5730c552e4245b1014bfd57aec664c3615aee83322da08157a8b9844bbf1febabdb641609c9ec30e75886d8d35cddee470dd11c2d28cac824a9a4afe67cd70b447d79bafc72e9f3d03e16e8a4a79d1f64f03afc76d18a7ab311d84fb39f9f8eefc01341c7bccded8d8
+B = -b8f58a904eeca1290ba928fec61954d25d74b6085a2579f0f28db13b8da45b5f47e97dfb945be9ac7abfc16ac840193e1246dd8b336846687ac160cb8fee0bb5be52b08560ef17d0ec60830ecfc6612267523a21e63920ace919f157057f8a818c7998bec96fd23def2b7eb7a3306fa05491cedda916048b9f6f6a8e9b8b49b8
+GCD = 8
+
+A = -4e4ed189f9fa439ab2ba8aebecf8686fa3ecd3363299be220f768324da1da45bd4b546b332819d7e737c6ccb2ae67b62aab35a7b51951ccca610c5e500ba82d71e4c27e8889c14a2027ca435fb2d659816ef1b14d825640e2883bf4042651b64a9ab52dbfc1b1e4e9c2245592509a704af25548441c58c6ac1215e374b751554
+B = -6913ac48a89202c3cbe2c8b49a8111f647c94027131e9afdc6a89e7eda92277a48a9b3e54ce84e9e960974bd6fdd56e975d4ad6929bd2ac6f5d2f940ba386601bf4396c6518592793626eba7bbd69c750b62066ba24c14791482cd85585b3dd6cff05fb886812a6ad04a885648b84a7bc797c037c3bff824ae70ee549da439c3
+GCD = 1
+
+A = d30a756c61c77555743af4495300e4e6d238fd301120d90d56f51f35ec9b8b8d1011e73697147706cb1889f08e967addc7a5f413354d5dcdd687637b05e2fefbc702f4b845981a32102613cbce1eaf8c9436698cccdc0196f7a96f10fd16720e0b74fe0eee502306e853f390947ddca4bed09ee113a71c3a24b9b5214a5cfd8
+B = f63b6015c911a67e83cf82240382f0e2d0a256963a272cb660223b21ee2e7df5d01996891703f28621e174d46bb8555716696d077b276245eb794fd74c828f5e36a15aa531ad3277ba431bbe8407df764b84dc49570126769a273793c8767552d599058b267ce84b66ec253d7858f6cdbf9e370ad6705b58f1bb4959a684cebd
+GCD = 1
+
+A = -c15c041370465e4a08caccb78b8b41d0f43d5733db1353b9731498b585fd7bea844bd554200299e188397527589cf0698eff4d2c51c9c317475f8b46e8604ac265cd602af23127698b8140e57698642e18ecc1920ca29a94a9ccd6bc3ce51a3c91c88af16bdfaba141b65e04389018e64636a4dc2b15cc7f338025d76dd87139
+B = e5f7b0c94ab73465ab4cf4c44e5cee16d385b4a1d59aa56f5242c84e5dcd6930d82bcbf187c72914cf60f825e34e59f57769eb706c6ff8e6e2f054fdc28e0d37c4fe7b1fa7b30458fe9ef0667af0a4041771cdd39310c1db2b79bb05bb448a369393fea7aaa05d304d6fb0bdaba6452a32e4a2c37009bc1b7f6a39f5e81c594b
+GCD = 1
+
+A = -651387ccbeeaddebf4aeb2738580b7cd0b7ffc6327b892bf8eb18b7a5ef497add11e39d77c06bc58164eff68f1490d0cc86c1704688841d3ee317c3a0d4e2f620a15d03b0dbe2f0c72a685e318a2f65a82ecec37982d45a69ffaa3b88efa3ab9069af410c16c051448c91c70b7d51e0411ecdf8ed61cda37aa73228400c4ca57
+B = -a46a61c66f1bfda295bc7532d738c34f2c036693c36cc5abc78b5a995ef3ab607e3567175b267e9df3da7498ccde152d260b4843dbaee33f801913f4c1e4b3e11b26885f07c8e979036ee114a9891764121bb7ac16ab430ec69c90acb02ade4f1268e5a2d9153671d73b7a85288a2128cd996f271eb0c797c7177a694d263a9c
+GCD = 1
+
+A = -8f8f2796f50c933d285b375902daef82016b3ff9026f7f29f8bab182e389d596c50f1ea4dbc81b3c8e1628c22fa14dd05ddbf01c423e4c4316e8df7950789ef689bbc07df303261f615b6e14439e767f36c0b03532ce0d434ba3c8c710f1d82ed640fc29e12a81c9e296d820e8e15939578021ed764e63461c11d36a5ef95d06
+B = f580460776c0734ce1235fe588e6cbfbaf02796c168bae6123a3949635e7921225951a44edd7dc7bdb03b5b58cbcf09e13ecf551a8e8c9adc861907a141741c345001a1fc426c4bb44fb2eed20fc7a9fe4df89b0e4c6c243574295abea72418b3e355ead386d0a879c402ea9c9de436558ef19c0df933f5f144864a3cdc236a
+GCD = 2
+
+A = 537ad39fc0c1910ed2a9986119aafe18d391fcfe045b90c45332c28eb8e32e7208c7e7531878455070a4e127bc97c5a1cd849e419f26387436306ce27331e9537253672bf1b66c171946008ed4b263da308343376842f0162bc728143c9aa4768dc89d3fc9b966a5bf44ff5b3638913d8ad299dbd65e7b64c8803b07f00c8ef7
+B = -cdfc498c772846431e47ad9ada196bfdcdf9d3c13ff1f45dd5dccc22d99d66d7dd2641db228c8c0e9ae4c8a2746c7de8e2b54031cfa49e3f8f267e992f4daa9b9134a2f59a2bfb3833a37df0771e7f842f16c651674772474193ccc190cf5c43d966b6628d0b1bbf18b1ff7e7ffe43fd3acf5a89a9192b3407fbbd7d42e47977
+GCD = 1
+
+A = 8231d42ab0bedba1be0dbe324687887f5315da824a1a305544e96f79386fb2ff2d5ada46cee48a3a807bb0694d560cbef9075b0bd100b425105c6806d4edce46245f665f4b10296d7cdf050d1b0d72c3c78b0342ff65e83d7f5ea009e2e0ee2e6435589157ea7b20e3b06e56403dfc01252fc96781b3adbb2945a0b8c8ad9f53
+B = -9daf6408da191228588b602f6415023d2c87bda4c0ada5d2c4ea6becbe1821b32c47c30a572de5e8062db0ab79353773c2653acacf11fbae6208cab76b32b617a03698bbd5e5507efff99b45c92b0b0a7d711b33c08f9f2b152728ee9923b66a66e975ccbf1f7e47cabdc6fa2a0c9b4586b5d7f1d637bbac86d3c77ffa026b20
+GCD = 17
+
+A = -e4f6d805ce00095e90efa2be79ec696ebb3d96571ace17d324bd40df2000613850fe7d84ade95554011d20c5bd68005829a424c8cacba19a95c103f418a3e591fbd2373b27c4b4d783dae73e49c5ab9cdaebe4cae03d59312be770f1194f20471e7a827f0f2b6ad3b58745fe028a4b07bda1baf921543a0d42eef5e12d9a9451
+B = -a3e22d08c1376041d77aaa96e13f7b3c0d56ca03f31fcb8ffc1488fbb0fbec1df6aa037f4ab38f4c0e9f5cff9b03e26960c59d4a129a3fe6e843930ddfed306bc682bd3aa339772796af03f4ced712f3e2cee42014400d9ae489bff652ed17fba4bfbf8ce878844f53ed0b2ddb8bca0b65e430cf8c56986e894daeda72413392
+GCD = 1
+
+A = fae2388a30cad3c7e3b8a62dabb36b368c9f17cd435c382eba3f67aa099f09e2e57beaebde41076f92edc26deba0fc29cacf23b1281c2022f8827029d5f49588ca023c681f59e46d81cf29173eab78f379a8039292900444fbc7053b91cbe261cede83899b644256f44b2ff67fc94347f997be18d22be4505977bf71609d8c99
+B = 6c693c8fde5c8db701685ff0c4432efdec803fbbb092d2b3fafecde614754433a79b24d2176f69b31f04cb8a732137663bbaeeaa1f7907d5d838643fa7d257f3e801565cc90bb4aa9dfb17434f06f66972b04695e51c759a494bb91de0310621bd8ee22843b0d7598afbeef526c3cab503a059b727cd8e73eb5ae1a0efb13fe6
+GCD = 1
+
+A = -cab880fd1d9a277033a0b75d7f622e39a97b02cb21187ceadf0a1182e803d5480d00b991507ed14a67ed29a6d9846df8bb8f9a810f47364a84f8ba0775b7989dae071765ce68630bbfe15ebe0a9f0943ff799b31813c5876c3b6326a9cfc0facb79ea744468545c64d8e69ad40314d6145300c1a0ed7e31752d210b3aa3ed96a
+B = 6a5ae64e8ebce1565aa6b1f5b7552bfc57f546a5b7e30455affd28937f0ef1df1d033acb141db66b1e3b9bb11fadc685066c5bc08477a259246821e2ca3c3c91477dc251076267c4b34b48cf92d7dfe527f353471b97c81dcdd9a5e8b1f96f0fea1b5c64bbf2f81aafd249707c1253dca6f9ce585b2a7f7ab4dd537c5be3fa5
+GCD = 1
+
+A = -847868c03353406e954996143fb4bcbfc316b0d0228f91c6672ce59ffbc924d9cd10e657cbc1ac96f2533fb916a17d94d03b921dbf5266e8f8ed5c83c6fb9088ab84e0d09e35a59987e7718722c360d6cec26fa5067828237f03bdcbfe1be1aadf5877d646bbce112c4c57a7a26abd66e8239a83800a6b56042da5ee3333b7bb
+B = 88d24a64f3cab2699b3e3f436d0aacf75ef5efc3cc469897e4a9ce779c68510fa5f84bf452a2c70c750ee37e7128cc28f94aa7ea4101b5db7bfe13bfb9c1d477ced4791056746aefaa30b4c93bb732c95572a0295d5b6c69afb500e0e1e2706c16b400cf963ea5998c8a825cc8905d63977b90432266030377fffd5750dfbc25
+GCD = 1
+
+A = -797ad41029e0da0f2ea54eb949b477878104f2d2c49e0b9326d39f25e9c7b4dbfa060573d67d355fdc46a9cf9d0a3c219939d8d241e7fe2b73cb2b31b8db3371767e67e333ce388620aaac2cb0ff5fe6cdd4b213d44ca6060e7713334cd833371e33e431c00ea3c4fb2217508d56698cde1766a21d5210c18a4b9929127ff1c3
+B = -ac6a8d9f8d3ec2ee29a66ec531dad42fc625fb91344ef5d2d4a289ebd3016d7da5cf1b3dce9124b9dd5e94d89d38ca1132c02cff9b6ed690d5979103154ea7d86ed9a361dda3b069f4a09130657d0a12e1fdda3f269945c9e9c511ec3b51edf1e65e38a9fa726af1b8a003f94978f5e1e7f905138b122f544766a3c4c5a74ab5
+GCD = 7
+
+A = -4fdfe88d116580526027975ff76568db661ccd5584927a22d120f845683eda279f7f06b24c62c7a3e1707bc67187619e444e0a9551c76e31de27c6d304a3f5dd55c092845b4e2542e54c40af56dd94affc2a3ac70eec42f7e76d44e9b6b1ff7842f7510087fc6b48ad66a5820524f362c44d91c4ebad2a41c5537c64cd9d575f
+B = -e11927492b6d39e92b1d90eeeeab66bd40437d6edace4be32cab78dd0bd42d77ddfa7a3a8f05e46aeec245b91131dc553256396579144fa5ecfa78c1e3ecfbd6ecaaaa40a912aa6fd7115f2517d7288788655c7913c7bcdb943a4a53939b1206611398eb6c359f60d0cda4aa2281401152622b98b2a8c1c506684c06f5d9109a
+GCD = 3
+
+A = -ad9a4a185754428770f6fb5f19daa979ff4ab1c0b2a04742cbdf2cea4be6a8ab7cf9205c461753f0e56bec314ff41eb6e681e56647a486fcf4d23e6140d5b841d5c62fa329d32b71b48a9fb558a180972a4de7be4f3ba83dc9c8649602c5529e3e3d46703092bc9a84d21ec0af7463b87d343651a63e4a34e63889fa7faac6a7
+B = -d76d738de8b47601e139667b36b52e40b425fe45cf28baa2156e8c93e8416d1425c99607efe2e97ac3a55431a1e3e611bec103f81983712e506dc33b65b9c101d3e662a32acb15ab5c421e1b8d2ae9fb81c4ef834d0d3dd53537a72e3ea94c3d70ab496fce31555077152960006e688771730aabd49e1891fa1a7abaf265721d
+GCD = 1
+
+A = ac83070c4d50c5bc45fb5511030770c99937f52f690b1c49871fbbeb71f31a4d0ae2ad43f1c7881a9472338d66c074875a2a2de4558a97f177da656a971c2968473c94b9f3299a7f4bf0de3b25e1cfe2a77a6cff91db65c98191027b59981a9d28408721f2fbff06e4023824ac5633db748049e52293f5cf91c2334b710eb7b0
+B = b1dafddfcd515fc86b29f138ba67f7370e729bbdab2c7c376a00ca9a8025c75e686f9cc6d5bad85ed6e9fefc670a5d48cb8f974d61f86ceecfc2fcd1ab4e1f96c74448541f8a59166c16b94df5a0b70b91c924ba587b71feead48ade625a5bbba996cdf326a2447d0dacf78bb273740e29aa230876c07ced7d9bc26fd51a955f
+GCD = 1
+
+A = ae247d4192f3a4b8b47a16d3864c2fbe49c5e7649ae2a184ac07726d85e0655860901200851bc38896ac68fae2f458dd407418b1382ff6c54fde4ffc25d52c7e0aed16140ab5bbac4ee3c098900d2f844a5fe5f14cc011f275701804d4ed65aff3adfb0e94f1c4b6154a4c3fb6003446b7a86ef71e196a6516cf05a93f195f77
+B = 5f0115ff2a4e71e3d6e78fcc7811e3e45f645cdcce2d384529f9e61397f527ccb17372f38881b485480de01091f9fcd2c552f9eef9b0880d7ec6357b4c1deaa40de9d501a0901e7f7165bd1b207d684f7873ad500aedfada464b2a8a3fc06e24c857e1ab41829274138c98fc28575b2f8270bc8f6145441e80d6f0d0c6637859
+GCD = 1
+
+A = -1c07bcdf9d2c645b8898d9304d9d0fed8289ad52ac993811218755cd2046dd374530588e8d89941e069cea4bafa695bc97c72029f6a8656ac164f26a42fcfe267e73cbd377a54cb97a716680374cdf3ffe246b4019f33784aea178c05d3e767a68572e8eed84fef6a6bdd3489ed542b25beae08b95380e5aa885b3c59829acb0
+B = -dbdcef7539b68c55b20fb50689c2aadb202b77b70597f14c4e21e24d79ca682c3ed0e1a7b3afea0edd6720deab786da11ab0f24e0402b1e3ee0261ca92ee3224affee837f60b8c95a5103cac40cc5fc6865a17804aefb3c89d403459f113f118857067b0d3a9df0a69780b3223178ec30f8963906b7941ecb515dcfb97e8826e
+GCD = 2
+
+A = -baddda78c2d2ba19eb82a3850eab8913085b31582a2832249eb6c287362e4c1a47793a03d879d479461f334ba3ae521530d493e0f3a47cff732178bac5e37b452ffa2f8376df8f82cfd3dc53e0648bbe2b7b357962712c0beffa061aed5741f8a51ff79c2275ade6b9c8f168a1f1a13c124843ec35349b9997a4fd144a030907
+B = -4636d310a5c1c442e3821a7cbba1d814a8a2ce7a97faeb79c7a540c57717b91bcb833cd72a8b5d5cfd0028baf655e3bd6315fc580841d26a1b0018d7f4121b2289979ca41b19791e867cb543bc8f9521bd4ee1b277940c9077afc1d467982e3bb03c9089611f02745199df542d5506b2d9a7131fd09685730685ba75ba695268
+GCD = 1
+
+A = 46baa49c2f7728048d9f5364575b62b2f63b7b10155cd73d7c5526996760603634e50221af5eb57b8025d93771dbc180d6d1eebda2b2b0a25b9755e1c401aca364e9a1e740e3d4b4bd14fb104d450c610dfbfdb11fcc0811d80846cb3b7e19c9c63474737e971e31dd55b6d24615d0c05a51e3efccb3c2dfe36f5b9438acf967
+B = -345016d699e4a527ff4e41f7b39bc28ed4f3a0b3683ae41027ca922610df60287bd05fd7010a5a0e3fcc393e8989b4274089e506b747cdee159fd9c2de53fd892dfff8f5c30b985c980568bb0d5db08a452a510acddddc3d69f1ed094e3dfa17155817c8854a2489d6f575a002375fb09465822932664913ea1bf4b642e0ddc7
+GCD = 1
+
+A = 523d9a78bb927c32264f235207e29d7cc7afbf3257c74421d1d29cd30e2868cca064ba01d256a04a2b6e36d8b9ecf8c4a08a966a9d3adf4404c3f4c780a39d539efb9699626f24fab7042aba81bb8d6a6b49ca08e0644efe3f3310e7ef582cbdffd6b33f873b9fdef3406d06278049458d2d600d47f3cbbcb909be2813f017f7
+B = -e323d7fed66a1c7067696ec71cc338c8eef4273988ca844ef32b2d699a281b795765b31c7eb9fc613567a8e369438892350a6c8dcc2c3031047edb1d09b12534099e3339a73676a225f3afb7fb9fa3f07f928abe09c01a9aa1f657226655935f30e8645c62476f75ce1f61ed3b7ccf0d1091b6e51a2b2a7ee2756a64b23b0a7a
+GCD = 1
+
+A = -65af147cba476771db1e57a7b371a81fe1eff3735c2beea08095e1900e23f7cb03ca9ec3482e8c09f5f82c5db5c787133df367687744e207c4e022463e474a48cd9c04a9781c1f70dfce111d2d7707b7fbf221e9dea7d873bb6ffcf53f336446ab03276e5a5e077bb61a89e3e789de2dc275dccbe56225851953a83f08d01e67
+B = 62a1cb36bd8be8f8f9158a598c93a34c1c4fd845cfc44c1c328e19260d855da650d01cc0f3ccc398fb8845ef488c588738775c1a1f7c8ab546f11e33724f590891a987d554bb6f349ac246a7d15a30157eadaae4556fa97fb038a74c0c67f0c4bb6236852838963dd1237ea5479b73a37fbba2b6baef816d3cecb75736155ee1
+GCD = 5
+
+A = -d58ab10de058b1c1807e694fb50834e4120c903660155dd34ec6c6138367cc5a93755f04e611e993194fa4f400a9eaeec637a184773a4e17564979eb47f1c34888a6ff6e2b2ccfb1451e89d8b622f82c8ee28152b9bc5905ebef33aacc9d20be76205f6c301ff68ffc93b1a6ac6a27ab5011bb0b8b41060011a70d2c40704ccf
+B = -db517c29a3977052e2a0cf6804ab1525f7b5fcf1edf40c1cf526756530e6c1079e594cb604e67ff387cf30098fc3c51e202c257387f19d8f1478ee9e2e9a69a50cc3361e4478fe3740cd6aaa221c8ea0f87f7252840a61e0289844d3c84f9f7a8c3c880283e8a22ad2bc2a9ae96547706b1e33c8c020e222e2707d4507ade472
+GCD = 1
+
+A = -7e18b8dbca30e7dc908e2acea77629c16739d2ed248ffca6cf89b0ec29fa910eb30109e314057bb1e7c3ad4655626ab7c3d8f6e1febe092e24d0f86d78b8e2ee953f7b46be1ebc5b5c72729ae2804d73cb84f02af042dfafaaed3fb9ce280549b278557ac502d6309ddc1ca8976b90416bd785547210c78d03f62b19060858da
+B = ce9b6409cce54edea5bd5c90732dff0347fbe948c75be56f4f636c5269ecd72be8fd269a1d35d0ed3f3d2d2069524f7dd24fe97f3233a2fa19d373e718896789e5423ad9043f801274e66978c2796d190e1fce24f3846711fea654326dd381314ca031bf41fe1d26ae73bc207128bcf67e380108ec09dd67c4a6b9b7a227ef08
+GCD = 26
+
+A = -c19a98626ed1ad7c06df22a846d15e0de0cc5cfb5fb2034fbcc05a42f2e5fb75b8ea200ed7a797fdeb50fbac99db28328e0e9bc621f0fe1f80adeee80ecc9ccd8fab9c3e68e871373ce4d271e7b0a2e106caee1226df33fe525e7e419f07a0c003114639a955007739b7ef399f9cc95974789c0aa364653ced2bf82cb4ca55
+B = e282d29832833a086fbbe98f43f257b401ef1aef702ae69da86a16dd148c7f1ad5e9ba5cba2efe61624e4388a275bd91603d64f841f2db1e957f012f08bafb448d45990edb35e9b45a35898a056f29ae9b8df98e276d5896acc3e0170ccf56f61f28d046ce6d80337706b9bff482cf1f50af881be29ad55144c61e50f60ceaf7
+GCD = f
+
+A = 1ba81942b49375a5dfc0cf3bd2767b333183b0b537432b937b939f792fc73694defce7c9f45b5359a8e096e296fa5cb6806d2dfe16fd0e2c1c3017b6bb8fe1cd42768db5dffe0be6b1a4bf4b3825db1f12792ae78c38fd3356d97dd668693b29a4f8508c7d791a754dfa64aa512afffdd8cb8d39fefbe4e1aa411040ee6ae64e
+B = 55699d1411df1e559260770362f47c9c717ac59fee03a4e9daac5d35bcb1d8da656b794dbc1c3adf9102d9edaa994281dcac2cb6a1feac8085c15aadfa95ffc2eee95850ef3b449ad430ba1f12eb7d2844c58a9fc40d356b2d0e85a76abc83ad7ac7360d4c4bf8575ce83a0a6efd1ed07276b04202a0e378c1952d4c05f0e9f
+GCD = 1
+
+A = 6b1c440daba7b4ff5842a695212129e0f22d652c4f1320afd6260c86a1fbea8d9da9b595029b5031f599fe605f6e45c8ee085be45213d93354a7a9f1063218f6eba3cc1928d4bad9c58e3b29907e3f33d859354dc35bd2052bfb1f73b388031389a1d52e0d7012fef9c16fab753b8a37a18ac0e1dada19e4a18ceeb9580d63f9
+B = -38eb0946cef6fb3501cef13845cc1e41b5b29db4d522d6e750cabaeb196b77812801ce973ae94a6226b76487f8fb4f7c73e4e4f7858eb923460604046687295a0cc829d34106acc100d88ffae5efbc957cd870426d5dc7dfa7270c6cbea6d7465b07118200ade49d25a5b73974202f28d49df55c724616b431486a8ac686e978
+GCD = 1
+
+A = b7bbe000c2b7b01940c9c800c485940db7e118f9e9a8b4cd509224dff6a6109df506921c01cedf12e3a7e94d0a6ad4b26c4b2da406649bbc49733fce0cf83e9bd3ab3fbc61c05224e4fad7f9ce9faed8ed8c810ec83d20622b50e3cb25c9da8edc281037e9683c3be507cec88316229a5572e9fe51392caf8d20a3e19f513497
+B = ab3cca133393ab6f04c981f63769a99cc584b441a07cddce030ae7d8c29be2ecf438840dba17c7257c598ed9362b3a6ae6825571b6c2371e3ca9ffdb46eb0928e8aeded6724c182434e7a6b1c9e785f8d0b2379d2b065dcf520b7d039f58036a15e494011083d7716e87b87027cd06511ceff22c89aba346544d131d459ad4d1
+GCD = 1
+
+A = -3a7671fb793fe4f8860dd6f1f62b2f2e3eb76782030c8ef58d1daff67b500db263b04c93434a6cef6c0c8717f7a1f0b9834d684cb5ff08827811cdd85d2dee649c6d5503dbaabd13b431c79a1da009d3f872dde56593b952b09f38b2d31ed4ae2d552b6899b88633cd25c2b786fb2946882639621f6daf947e3c0dfe962bfda4
+B = 8df16704d43d7a8cf3dfcc4990112db53f1347a0ba589bd521d57020b1e4c32acd0ab1fd5015bd17d68b98f973800f1a5af0cbecad12f3c8e94f0569f7b068843bd09da9c462c120925ab8e0f60569876e0ee4dc089c1b26a8813caec057f0cb153371497fed5fbfb88494509118d7c24b18276e7c863cbfb19e837bd28f09d5
+GCD = 1
+
+A = f699efd4f6602bf7a6ad35145d8378be44215098ce9303084d153381281a2d2d01c7704eb430eedeaa9d80979f4728cbdb69aa6a39f6d82d79480260d848faa76cc3969907bf77c4b95903c67e9f3a41c8b84f3f84d1264fb7a96bd0602fb327eb1ae8b83c49468839d44516a40d6b17f8bb7b721e756dd94112199418b91db3
+B = 68ecbb6460d11e9937b1ae0622d2598c801c77b349cf27d69fd4bc56b6eb7278195ce9d4f10458dd6b23695127200372d9eaec0b86630916ed52da914070ea177ae37ac31e8cc9096495a2221a27412b75e6deac4ccfb34d8197798272b1c31a1c8f120a94b8d7f6fb746259810f74a97bd40116fc0c33b324c2b75b58450eb1
+GCD = 1
+
+A = -eb2f190429e4b06cb8f0d2dfbff6c1f9070b7eae8a124aaa3fae7e5f9d7f08dad78c0c64fe6c7548b87d56c75bb77825db8ed0487825cdf526eced4454d0c643428298034e908a8d85dcf42a80c35834c153c7036aca7d7c6b56f022e976a37dbedf0112aefd5ae6db580be2ec8c81a0fe41e7d3c2201a784427374d187209f9
+B = -4a94e4ab9d10647c27893ce721b326c91fa18ee518deb6b52beaa83e60ac88ae6d7f01adb1c5b11099c014ec9bca3fbedbac7342ab039b35c26b2b037d2598f5331e49c02ed9a75217f81bbe7f83ab984c0cf1658fe4e7c92941fc931b7d033104a090280e81df6116b20315bb52e6be2efe7c28442458bb138ba49ab23f3386
+GCD = 1
+
+A = 5cf919191e7ce00c2f65e95ee0caea264132d72e45bea8b5b60dd80c346652d3fa8842d02154375e32a59fce2beca66334b5b48deff06ecc5e042c1d7996d36c964e1e21fd70db4ec41e359cfbba081835a726bf5f376f2f3c586765f34b8291ff92ba84f10a41dddf1ab7da9fe28e11176158836e5566ca81e991f2b23ae620
+B = dee4170410d1cbab945a5ab63d5c92de054d3896aac9d711bdc7100a6bc069ae2fcb4ab1bb6880da239cd69df3c8a1c9eb0431393f5b53374fe140c5c71628ee5d66124efa4b7006cd8264362dd75ccb04899d63bee78ab9ca7ff09b8dba43acb1df1c4476120ec837c0d3aa2fbc5b84c356e14a2be3e90d360363888558f39
+GCD = 1
+
+A = 915743d518c5b65a1b34b0b5280aedf5efd89efbbc6ed35df99e05365a183891a90a5d7d32f4e1573db2d9dff242bc9a4868d6562b3475e2bf1b5c78b998774023a8d1e7577757784703fefc22e6f70a40aa81ca7eef8ab8b0eb169fe9021f3a9cedcca76725a4b978eeca820965fba42f5db0b4f8167ec6b60d18af55cd8d58
+B = 24be1aa4114edbf7a8c69111d2371558ef441316cddee4b76622a611c2dffc76754d967d49b0b2afc14106c38c807c0734145d8fdba17b03010d696e3ee8d5c19b09eb924a0c025d21168a9033d60e185cb288a06b8164332fa34027612214fc7fbaf1c32d0852305753b5593b9a4c232a746cbf94552659bae327e86ddad9ba
+GCD = 2
+
+A = c2c0b86663a66945321c3fde8ad5061f0a141f876850595c36d0ec2a051a459303d3056180b97308416116a8f810afab6a2b77e02b016251e0010a0520d4f31b360945ec71d984b8600a2f7e27d0c37125440b4f537de469c2b18e811d6eb63cce609b392ca4b3a49b2bd74c2badf748e574cfc0a0b2298e374e58ae8fd0d9ae
+B = -a8299dcab5e527b8300425b251ca07a0fa2cad85eb8c5b9832a13b8266c8484c41bd5e62396d5b75dae7125fd82125a89c706217bd32a014908ab36d8045cba667407717dbd853c7ae0286788715ad909e6340cde365fc4abbfe9456f901b980441f7794279fab6534504e17ba1fc10172ec4d9e6dfedb1b5c0d981e42c1efd3
+GCD = 1
+
+A = -558312feb60f77144171508b358b8fd4d962387d9fc6c24a3760df8fc631e24174d8d9be376ccd395833820fe3492ea37e48c2036e099595c850ffc31bea2f7824e67101552360f200084c425c7499971156a851e5c7f36386d3103dc9987257f9322a6fee94b2ab45330c2e654964c5a3c3d8a14a24ba787af4cfe2dd44273
+B = -cfa1dec0499709a51f57c0f4231761363d18919c92dfaa950085492b76ebc4bb8ec7398a78416e11a9894713621cc4076725756c5c143bc64c03c31c5ca8713804e89503b9ffe477ab3d9c9842d72d93f78636f6fda43ae396ddbc4ad01a61e50d0c39ff922ee0c8f9237c522a1f0af73ae699734b4adc24663f5d3479612b0f
+GCD = 1
+
+A = 24b50ac79018938e673892d1bbb2458b8bf97ddff749c7d2f25c7d7689dd18189c879611b6406dc2f9a9c6cbde9d3d4ccb1930c599fa1063937325d219524b97d2afadf01d5e983d8c8cae43aa62b07c90653549e34e221d70c7c32b404274145153adea759f2db704b510de1a8e8574db95e768a2bbc828578399c7b7555b99
+B = -c17aca09336b02e6b99841cfadbb530bb3668370c30b0af1fd3df5254a2287df44a0d952395648432aa60c4e3a9bad26b14c6c32b50f5bf3da39bb4d2f3de6309d75262080deb9e52ad0d6e690e51a0cc30c131010912bf45952ad7155d271f9f50198a37e283be0797fa5d4aa446b2e05eddc5ac7e5cc24e4d3a27c0ad5181e
+GCD = 3
+
+A = 219358bf26de14de7a281db1c579d17c1385945739d9160ad92078e108c9b177029f6a6bda96a747cc9edcf00ac1fe05c709c4676710756109e834d5975f3818aaba48e142953da8ab5bee5411af26c41f4f59159c4fe7737015729bb1f64d07e9f883e445c1e44636b26872039990bb0135bc07457ed95ad88c65c33b38b022
+B = -4c8a5ad09afdfe6c86d9f1ceb1d63bd42df742c2170ed60386be9e936ff4fc3ff358e444c975d77eac51e112daef11c0106b95856fac4980840206f290f3ff8d869ff82d11d111710d8bafde4c845e2dce269b6dc1ac61b46d6862a094b9434647e5847003e17ad3b687083871fe1f49c400b2fd83306ace5a6c0a9e2c907e21
+GCD = 5
+
+A = f6f8439fcf3abeea0ea57a71bcc7b14b1d977baf4725362e55e48cbdbc79f7cf62881d9a3bc6976ff639a7148ed023935a7dbec412db76fa4ee4da47b715454dcf1316ddd21886ec983f58c9ceca40c55a5980a1958a249bdb0c8920e37cf5aa76f9df2206962b68c4379f9943de8b973990b6face5e94f169edf058309fca8c
+B = -f16353a82dc0880c8e7600b87cb8496425b7e116726dbfafe06bd92acd069e74e08afdabcd69092e0715a583034f4a2d70cb2e2b1f3584cebaca113d233d28997425931f371f5cbda04313df3cfb20f8f896c18bf157605a05ee9f47022f8ebe6078bd24b78f9df15f293af4f524bd558997e6d2ce137e641508c7aeb3fd728f
+GCD = 1
+
+A = -e9927ec088b4dee2b3b147670b6b6e7adb582faebadaa8eb3f6c2653fe7d2d61a0ae5c09479de746ff8b9ba16ef70e9472e01399ff87694584b2146d663ad6921a3f7a3b636b4ed70c166280016203591e68133c243da1d8aeed40e6fff7da11ea84ac04f7663ca1d9f85f342f7bedadaaf4aab167836d571c56a73de35f1bb5
+B = -6bddcd7258d73fc1dc525ca6838dd6b0767998e11f9eda2e379ca4ef315242f4b726b3d6ff700a164e9f87d4d2a910453c838f529c5ed3e762f8d1581d2c3259322290f43e990c3122612e41824c375c7ad6c743c7899b035e43b34e4f375855187ae3ad3c477f96a7610403b92be34be1421d84c88aabe9d99d11ba5a5530b6
+GCD = 1
+
+A = -f150dd297f1ece05d8a2d67636737d2d80626aaa0571de64fab56fceeb8f297625d1c0c46cd2270eb2da105e529ddbdc56228af7b65cd2ecf166b848768be6c9bd7da502ee88fff28052362a6696608dfff05a8f21c087f0cadae4b1b2e14ca98089000f78f5dc0dde8c00858bfdb9a08fc5c52763418aaecde78f362c796a9e
+B = -c14c3208100dd43ad41dafc6a2e5b8451484b54bb30a49489239b2aed80c954a1c9cf78591c5ea4ba8d54ff2ebadd86d7dd6bf3e7d19adb4e6b0427d221e86b70b902ff6765c91ce575a1c6266a6e23e85e728a08798fa8a5a5589389b03f66d9ecba5b59569237f71ef7991be340805f4bb04f4a2191ec2d3022c550be0b71a
+GCD = a
+
+A = -a2a491e9040953e5ad41a12c383623debf2d085cb7b11e99e1618d17c393ce17c0336cf60214ecfc96b18ead55daca28caab9c6ab38e90c1d73ab354298cfc2b6f89613f5d85ec6a88a8f5fbc791df9a60ebb81c564e5a133d3120725b7da543b0e1a7087d59df0179f5f4f315074253717e8140239d95eeb52c7c096c723199
+B = 6106a637f288c73e88fce3d93340096b03c76f95bed973a434882a1b07f64606922c2b01a2b30a6f27375b30b00ddecb2aa939383c8df0832cafac0938351286fda0fef558d9a706fe7451d11255859c984b37b8eedc43fc597d969a72756ac1faf3bbb478f17c6fb5b4dab0e398e0ca6a7b9e152e17e01f6ead8c7fa4f19e86
+GCD = 1
+
+A = -9670618aed5148ea24541bebed25ffb79681f909715c72622cf7c73401154f54f15ef6f1100529fdc1f8716ee66f6bd9744fcafc05db87f51e20428cf65832e3e008ad9cf2ee313d3896344188f4a0a2b569d34534d74e02a550f3531da78a15904414e384a3f564d1ab92046198b70348e958090c09f23054a5a5e8feb45d21
+B = -803ebc2bbb62d9ad33317a89d891a140d4a62913fc0f13b4f9b37cf7178d2f5d201ee1f9a13d682f1e2627bcf379cbead3321951e38efb39fca9bfcfe3729192535e1424cc4d0744373a72887fc06e8221f6232ba9b7243feac70aa97a32ef93aeb2293ab933d103eab2917de36aebf8184550984f8cc9fc9cd660f8b1bfdc5b
+GCD = 1
+
+A = 7f7730bbbac5c500ebef32d68a3c12fb94387f8ec962acd85c6ced74709362061d3334b545b891b200f1c615069c666acea78b293ceb1d32cfe846911cccd980e5a25bd49e767a63616bc7d6df7523ed30a9bd8cf807c59cfb75d5ec296f78a8af99f156a61cdeb70da0d7691ff6824dee195b447f04a424ed0aeeb5bbd60761
+B = 27c093cf983b9c55b17dcb8561f85da15cf34261992f7eb07d61d53c1db5d697a6de52629a90628865bf3dd0b80af571ded7eb9c5a569505dbd4f899697abe5d9675bfa7f5e8d460cb9afd9a40b5f28ea0a0c4d655da45f6246d1431c18084d5513b4e1563b138bdcbaf738968b366114b3b58b1c14f4b7f0ee6fbbe5bf55b6c
+GCD = 3
+
+A = 17a86b2dca7cb017dacb7934122177bc14a3f93ddfdf4b0542dd55ae4aee052a60f4f5a80dfbbb13ce17cf3ba2296dbfd205c2b72b497c3611bdfc0b8657efa10d1ad559d6a6d7a7b7b159fbb993ba9b9a6b10b1ad4320e175bccfeef4c51e79eb133239a85be5251fe1ef544820d8b1e50c8f47f13009c267e13b550b87264a
+B = eae25e90df4e0e9aa81c72d6b11cb17b43a36c9bb544d12236ea42bcb681ff8f6a96e574cf43fd4d7eb8e98a10b78cf3c7c173470965a2b188b3d20181c24f555a692dc19ac0ec4d68cd9f3763c9d467a6f0bfdac1bb90dd4bd264fe61d6e67ac75a4a46da09c23087d6bfe1967db5c71801581f74bcd983052345f63273e541
+GCD = 1
+
+A = -290afffa7c9f4035dd982a856b2173887f96cf6cc273e5372cf10d4024ff4309bcaa17e1871d354e275c9a54bf0739b4a3b6369f7806651f949b9fa5c0f5a838c5098dca2d9f52ae387222541b1b4cea8a35098f2ee8ac7bc79465d19600706e0ff555e7055770b4dae1f9ff3b1c1fbc3080084d6542ac065099f1dd5ef945ee
+B = -9d6156e9541dcf6e71b769cc04cd6919e6daa48577bf2f5e433f98420ae8cc8ac7caa2c7167e646f6c3725a250b14a123fe6c3e50ca16361eedc2109290ca924d2bb8c631cc7567b870b5896e2a9155983a33a5b686deb86eec118147ec0e84e3214a61cf8cd4f394b8879d56cad4fcfd34799bcec954972d1128f0a0732e279
+GCD = 1
+
+A = a587028f54f34472345942f4442f9082f22ff0851dfb06f8b450507f3d50d3cc9dcf356526970a0b945cb87964c87355e4fef9a3e0af7c2184dc929554942fa36e338831829c154a4e3a92451068c797e92ced73a1f1d5719863ff6f2b240f26933232adb514433a52c1f90a414ac1d177f50aad6672913b836fd5213fc73925
+B = ef12b0200d540159c923f152e64aaa59a8af6227cf3883f75a6f0b377438771c49891ddc4859122480c6f6f1dfd7806aabb44f0978f62f76dce3a3ef033a0bdc3ac7f6e27ae2ac0d7a881f369da1907a5627bfb1e20e25cecb4bbe75d97acc528507f7a5c8104bfa6fd7d0720ba4355d101e91658f8b65c5af90867397765ef3
+GCD = 1
+
+A = 5969fcaea1ea024f5310dbfaa8a441e4ce84351eaa6be8dc4f13513681b2e6c3a224fb8f7bf7a2bf41b7843fad0626f21b07d45ab6abcbff554acb2fb2e4ec8527a93de44fb89781495f557b17b671b1d29d313cb4f83b418b19201e57c821d0e9736a30512895c69f790a719820ae161acc1932aa562f03109c64ea2e489c7c
+B = -fc1725597839d78f679b4303dd499b8c72dd44e438bf894517aca5625d8a65920b24b4083caba2980fc4ec4832bcafa60f5847bd23551da6f7185120d4daf6a459221dc3b51f191550ff4e4f3f98fa7c3ccaac897f4de5277e33cf082332d83c58224105d0e734c0d5cbd889c16afce9842c3f57a765333f5365cbd0619bd7ad
+GCD = 1
+
+A = -5c7615d07e8d7705a409672af2d017d4c3e722fc196a7cc38e14d33b54b6352e5610b31dc49685ab4dc8a6d212fc22683cbde6da3d4bd2077cf85199fc5b0a917060d9706438e6f51d10d3a4f93590679111ceca9c8b0bbbbd9b11a61e0f4ea060d8e78973789cefc04cca2edc82033426761dc8b69d9d63ce2a1bb1f89aae64
+B = -ca8d899889f95f9e7540453465f532de8509c4be96a5180649a13031ee3cbbba82a3836d62e2bf4957b4eb24f72d3791efc3dc6924f6ad1638e4fa98574bb139fcf313390ec5069b7dc870b0c4b91efc59a3c5e753c84938eb3a11220778090f122eb7a80b72434f9f72f9c4efb62fe5f8ffc62bd4479e73ea4de411cb4ca2f1
+GCD = 1
+
+A = b228a5dbc8f0fd6813d3e2e0ca3faf737a16da9de30136baa25ece4d18efff8aa8f058b622932ae86b7dc3834d4c5a13bb743af4d9a6cf930abe093a3c13121ba884ffa8ed432bf5530a32f35c74c59988dedf597f92215e77e688b86f8830d3b1718ec1fe98e127243ce0eb8635e5c67ef5298fbe626e5103801d203e5ea68d
+B = 5e8edba6ad295a9ef6de64e83c0a2912f823a26e0ffd29b2bb35ce15d96f26c5fd7d9d458add5ae4fb322ede40be5fa80a3813bdf51c531476e8eca0e510cba764708b22efdbee1c593ba9bd172db351a9e469bc63494acfe4265b59f298a5e7ee943421bdefbccfbc50beb3a4f0534276c54b9f92ce9b1a81549cf0a752f86f
+GCD = 1
+
+A = daaa9df87752053815d2869858a9d90d78c0042797e09bf1efe128e105b8ca1dbd2549fce28d301ac3c207c5115bdaea8491bf9bb618a7a0c1c5dbde5b42f67a5bd7a4e041af156ae8b93bd5b01204322e0c9ec0eede44a4e2652d094805af06fcb2657cbf725548656ee5e943621ae9516a0f4018933003d6b5e60127c00802
+B = -9ba0ad4321b1bcc6dcbf4fb95486263c2d9f91e1d997216538c6f29c687fcaab2d31f8b948d2fba1d932c613c8d373cf2bdbfcc8a7dd08652d1c3cdba9c01f8bdb19534b1194689c361aa69ee8cd735a1e181eaca31750415e965c0f449e1866d3eab00c07590c5854639df4c425e8fda3e97c9d845f0d36a57f46486b1bfb41
+GCD = 1
+
+A = 8ce527e4f770ddc7717e4912de5549c578841c58f0e4b1976f7aca919aac653d5f1a204c11adb28a208d25c01c630d04181ade823140ddd43912225792ea7f3d902d9b2f1ee76bd29711a767cca7c4dea535b11384e70f3c5bc86371aede57e1868274fe971f662977fe3ea7271bdd296482b2b76e641b59aed3aea4ab04e994
+B = -e4eeda96e60840ef8a2647b16f84ebeeb3409029385674c276903c72362a2cd2d55480df6352fb67e63ada4580e31f3bb9ab711ab3b7288c968c6f9c06dc8f3cc7f9fa6383f90ddb82ffba8bc9ae0d05c12b7dbbbb472b4ac19d0f8b3b55ebdde325d80bd2c793fb47e4162d6b8ec1a5aa9851b169782ad4cd7d29b9ffdb7733
+GCD = 1
+
+A = 4f7483ef99d00c8f779d107e62c0898c8ca09860f2a615c9b6ed56a14046175e259cb076560b27aaccd24049b284ab75ba85164bf16b96e02b6415186fa50d33d8335f85026261c6876a45d5deb91a3dd619944a6027fdfc7fb6b52ced11efeca79ab7443f9f9c43b34237fa7c4a7dbb7d1bdf91691558e4a108e7b6633a1237
+B = -ddf27c43f25b08b9bc961c16bb5869b4698c6caf09289c41ca2caa4d7128d5123ab5badeb19c5b0387e3ba9151c5a34767cd9b98ac253901a83301ea86bdc9c6eccc9e844e0a5a62e623470e296f16c563088e512dab76d4de55b640d44cac67d091675958e5cfe950544fd463bb7b2b94a2cc314a5364792c5ae185310e6fd9
+GCD = 7
+
+A = e1eda05210f39acff8e3a55f0b364e9800c94139a18651f263ca80cb1e2cd9b98f1ca7b13bd74d7d300b43bb4ab60e47476640735caddd9b1084576453089b4fa15d76a91a6e04b5fba37573d431ba208f5da3f5bc247caab959cbb1b8de7e33782f5100bdfb27449d0c7d1e4152b411c85dfc4c1ccf915ab0bccebaa05f4181
+B = 409fa219d89403a4c0bd7006a89a729e94745cb5f5c3ad966fa42054af36ea90d67edc26aa83ff7539f45fcfb34879ed4c5c2b91ef0edf290cd5c71a72ee749f319d0433a1b7f3b918d60c8530282599f205490791b36f157716e24cb8e908ac19d1b0ff9da35bf8bcf886d4ef032de77626390d8a02d62d99fb901a2ecd4aab
+GCD = 1
+
+A = -52bfce0d65cb325ff4f39608d61eee613e6ef5359bd64203811b2d417c108af3d7b8d024df882f9dffc4bf4104689bb4d8c9f31846731c883de404e23c5f8d5adb5f86c3a6d1a658e577f0bbce73001ffc35816dbeec761204eb15fdcbc2cf23483eb86c6b9e8437190ea25e0a38a7e80109828d357e0528dc8e393d4327d22f
+B = 34e064103d80cce850df60680f73c4944176ce061e47d1a4e44876ab01d76a089a9adc54de98ad9ece04d88c6b3af4a8460b2d676cf4ea96b2e245973d981112ce034f42500a30d9de3454012ab34bcc5f0d5245dba2b26fab2ea463f6f2a5aa0f0cfb2feb1f685eb220d6e07fbb30749a9350b30972622e28567fcecd4476f9
+GCD = 1
+
+A = ddef3849107b4d977d64bbca913979ed7ef5df6c6efdd9c3d72c99d29f45b07924b045b6cb4c793a5e25f8463e133e1d7468575a020491d15bc9b9b9b7558dc0407b58cbe5ef05055a7847d21a02b9294dbc60dec0b8e3dcddd5373c887a84c9350b2d5c6d8302418bfb4fa298c4e10ff770deab9bbe42683c66851f596749d6
+B = -a3c801853e4a2343936633546e4467d422e70e2c6e441c30b2573d2d18d38fb2daa2fe8bb618c5a0347795578629c1594d261c7ff99f5a2dbf3471a3d87f4bbb97e42dc606522f04df941dfc18afeb3cf10d1eab9fbf53c5df03ef9c52b392fce4639662e2f7d64e46e29e27dc044f9a7452844f1cf3530256a08a49c57afb68
+GCD = 6
+
+A = 6a11eba63ec3cc03182a5deb2cdb3c28ca38c77f15e872b7da67d7f92bf39cc25b229dc6d0df32b41917395b3e3fa5d6a8f507a52c0e552f7d6331ec9808e60bac7cd76f6ba9063a268e73cef4181c025c796b370bdebae04361d86b11cdca768bdba161bb22b40e753f1f17fe3371caf442d862e1046c079e8abf0dd76cca19
+B = 6b548fc229f4e6948a4501e5a0c9ad28a10e5ba3db8b52d300c8fd88f3ee736f84dd7d4eb238fc07d92482eced7f972a94c6a8181934975d924ca7294e39afa9edcae2e14811c676f4d00aee7fc8da8b0a5cae07850a5506cb7f92dd927f62b0bf054a9ddf7eb21d33e59b25fb981592d8e9ca8f7edb9afc75ba2deda519a89d
+GCD = 1
+
+A = 85b61531f5450b92f78aa7a508af38d8742faf288984dd38390d4a0bc65c10c57cfe7121d9cb027ac57c3a8cbe7a4427ffc02e9cc0e492a0cb085d4e47007beebeb99e1c42b832ddc5f823edf232f750a847477c57718dc4bcfc7a42bc3f9487fe37dd1abd3b929c40854e6b7011ff861d6ba0fd38d6273183eb151fa4cb2ae5
+B = 91b3c92fb7ad42b8c51de1378eba3c6352eea245c87ae377587c8049880470ed09d55f8f32c381216104683ea7bc9b29d98d80927330aeac72ec55f7de1f8e5e4de650ce16eb20b2140c8904f6c062598e045a199d606987871c18987cf6759a56900b484f94a842b0071d830005987d8416d38d0a9023aea8fc90534fafae4e
+GCD = 1
+
+A = -7a0c0824694e5437bae51697b12e3ab3d61ea73bcd8f74334c9dd03a36469b457eb0fa39e60a37456e9c1d1791b21da8b63f0b66f4a6182b5f26db5185357742375a25f34e15318647f92618917ec33296a0bd2937e3a16dbb70d6ae925cbedb9918c6d500df98274b312876a08f8dc78609626d774292922c5eb6879278f2d
+B = -fa1e7d2d1a01ce735f902c862dcd34a95f346ceec4afb6fb8db9cd33d542938da9a4a6e152c7ff456fac3cdb2ba05fb75f84dc2e40ac464a36af489239ca6666c919a36b50a62ea1098b4938b6294fdb2978627b07febaa2e331cf27ae287f0c6587f94e5d962dcc54a8ca251c212651e942993839e66ed73d29cfd869d1bbd3
+GCD = 1f
+
+A = -df03041c6b4ed7e36cf098873364bd1ae65c1df89e2c49be706c2869f951a5ff78cd757e2d820f0f803e5681d3563448729938ef42e7d85ecba7876f492a8689fe1a6c1f56f1ab9a5757727695a39242eaa726bccc2eaae2ce7f8f7a3c58737fb3faeb6da259af95a916d2213e8cf2d782cd9a036712d07c99956c4c46144a40
+B = -daf1d8ef715d2bd63e453f49d83d134d73463f5d795a7d4171e4a534dd903f17febde26f1c830b8c52419bd70c8536358c2078de466b585e188abb6c46652bd78cf6e4cba6d2bb17ee69a346182a0630d2711fc529beac3f1b41eb06d890a5256ce02d2f136722a21bbc77a992834b56c7ab662fe1d9bdbe7483af776a39b6f1
+GCD = 1
+
+A = c2dc29d39cb9410a74fbdf4a10ce7ffbffae61892a5947dd1ae3cdcdaafd90001c802bbda712b6e790c88b83c538bbe2965caf597458e5d5adceca705ecf3bb08a75a79c7241b26fa3a64db04460392503222f9b6f7731c83f7a24d939e4fd66d83bfaca198d3baf5a22ff8e87decca01eaa3565dc2d2dac803697c1e9d08597
+B = -7754041afea6e47febf1327b337e7ae40199626827b4c84c279b983dbee675af2c3a0e49e75164fb54f8a56e541cd5154615e6bddbcf2658e2ccd304f24e60bd6a45b1cadc5f6a52ff8639cc2613fbed749664ea5c38cc0c37b4600ac92553c2330ef7d017f7ffc8e98faa40c0abad92e0ca88deb169e2f568450a24ee7a597b
+GCD = 1
+
+A = -a0c69dd5594eef70ac837631f479a9e1fdd6c70461ca18eeb2a2060d7c92b1c85d8684220948f69084aed8e9efde1d83b6953be5cd2f54f48121458975c94c286688816c425180941fe4daa02eed4a289e33d9d01a05e5b850931bb781d46c688f43ef473fb05985d8b86bb5d4e1ea91b3fb21945cd51c712c80e6eb3cc8485a
+B = b7e13a29f6d28caf672d386809e952c04a1aefdd8bd97ab187c80c4ae78c0425199e47eb84e108047b962def2f1b2957fee52a411305945421d3d44b0753774f63be4e2bce6a2cf3c962099c1d498c1d689af4606c0383b965bad058cfe846dd06f0b0cf4a71b972e032deb57986dbb942cc88a959d05cca370203c34a306f19
+GCD = 1
+
+A = -77c5273d0cde3d14944b7ad58f1d923ac53cf9ab0abfdc1338fd751b50908f56a2a6b90b9144805d4049f807f4f4ae836b7759e5091dbd7f39188700ea707d11c6b027a1f0120e3e54beca4a5145bd1befbe9f8f6aad41d41a0160f87579c8c79ffe3b280ab82502b9cc46715d81a06838294b360855e38db7755ad506b0a303
+B = -ed49cd8c1448a03e23dc954d065003556cf105b593e5c6786c78b9b7c578d574dc8ef456efa0ba8f5ca63a52f42e09fd04c1c49b401a585d6ff72d9565ca7d6e2ab70b12c27b08b36c3a5c020d44177e71907f9cf2ef6f5c6307f434c2f63170f74cc52b1c15c59a9f31a7eef8273edf6a621506789ffe2dce9cadb1d1128850
+GCD = 1
+
+A = -22dafea395294540fd1d8d1ea441ff96db011ed2f25b065ae237558cb48c40e60cde2629fac19ca14f6a813e83861c7b8e39eb5aea1cdfdb255fba5139dfc569f0644e529ce294640fbbd596588160b9b7812abca6a0aa3dde8e3dea982342c583cfa589be8d0af09de158d471cf1b68c89117ee51df2cac1010b837db05bebb
+B = -8b9315bbb60d86d23af0268ded41e7e56c5054af37255727d10a5bf985cdfe8f76575f25b9bd0259aeb8862aae8bd01380898efe2a3ec966bfc814c0e5d7cce720ee3372905a84185e59cbf386e8acf835a5c82915412833b32e08be47852ccb87336f4d4b797733a9d3f3423cd6ae00f6d47b11608f532222a3eecc8167c231
+GCD = 1
+
+A = -1efb3f796250b1dca388818d66b58e0c673d8e91433e75947bf911a5055b863e67e8092cd25bd83c6f321c37e781c3a74515166420b14c92f6a4f4d34ed9b720cee54851c824974a6b72ef2bebe159515f128c99ceae1611a5b67285022a832809d208ad42ee7f7e612880cbf3b93e5d67b331ec778ba38764c44e089a3206d2
+B = 2eeb33d29fc7eb0b2f7a1ed0fcff41c2e7c92455a7eaf72ba5008ee7a72ff0dbe21e116c900a7ceb172008f089b0b3e2d1dcbd01b078a6b2cd73c9a483bb038e2101735724201ee57156b8455f023e24e5692ae5e15649e361f19b3295d1aeb0ac8208292261b76ffbb3e11398037f18ace39981fdda814306692565ac2e2a1a
+GCD = 2
+
+A = -6386c2da9064c3cfe7d34173ccced22aeb2d3cfb2fcda0102859b925f2a882c6465f9b06a253868c254ccfcdb857e77170a951e6232d05967c019ee6ba4fc13cec53fd2c8226aa237d122d745d8d28a26f586fd687848bb3fc62c6702db601e5edf9237afab3acd7f90c146f2c1bee57281da808402f2a45ebdc7aa0a184ccd7
+B = -4285b7c728a18cbffada168ffeb5b5709df4610ec97bcd60d8228cb3843ccf538fe542aacce135e5e813b2a0d14374bc4054e2d11b9ae1b5ae5d59452eac6f16361e41e07481fb754bc3c07050b8601bdaf8beecd47aee0d8548d99ab11fcb3a0f22f435eee7b558c12bf6d8c0497d8788f279730fdffed9c1d4e4979c6b9956
+GCD = 1
+
+A = 31376114c9db98be5b1a9fdeb784f31ba28b61142d9ed2f293a0eff0ad64af1019c757f4254983629e3b8e1e6acd7f0e36b77e04a979ae1e37ace4882d3d7526eeb13169838f1ed569ac5eb8c0852b14c9a5a1a6ef8412573c0fc197b32604a8198c0cb08237e47460f360f9a7cfc0ce8b00a9da5edb08e09c72d7e26ed62579
+B = -88873925a5fe8b2d26aca918a08cd118d67c0b7d0f2bcd70ca6fb0ed9079289443bf21cf60a9c70f9879dabbbf76384c3533e01005b2c2a1e2057d87764751ba3ef56aa4eef8de7efe9b1d66a9fb392585756ab1d5bc3bd7cb1f54b0babe334c5d3e5cd6ecf5668a3baed7e273016d31d3cebbc9986633599b1065d7d0725e8c
+GCD = 1
+
+A = 28995270792d3997cb00832c89813bda71d0909df2a08d96999d4e5f4142cc5968204d5245f23838bcb865345ccef36af771271f734c5957435abe68f6e0408a529b52bd794377b4d386b638edad75ff43c9b885cd7fb144da38914d5224af2fc5b2cb9a9f81ba6c458e0eafd3ff79e5630d197a744065e7ee6f9f2cb0b7d813
+B = -fbc89910e2260df6c8187f4de25b38647ac421437cbdf1016bdf8a2196e528b26aeafbd265b9d26d3ee0d126e81c46f4167292404b26c7c725bb09e737ca2f2d548a78b48f720fcb14ff8450ed9a60061746078226aa6462cd0a7f19e817c19c4eb329328c1171a62526ce70e6bd177b3e650395d70cb71e93c842ee8fe44266
+GCD = 1
+
+A = 5720275ab014e106122249d54b704a9bb8ec2d0789938610a50ec8491f6782aff3f87c27741955f046b6adddb3f34935f49c775067de5658b37129860ffa515e9fba3c4669da726ef5b171f99a3fc7e292c936d81c2b088297c90f5b37da8d826e8562648249fb36af81a7f135312d37fc336a427a37311a6b9f654da58cf8db
+B = d02b7bc045fffc3f6f084e71432df357477ddc914a78b24d8cab1f5b08522fd3badc9f0e7bb47e2eee4a00eb27a592d7c1dc70d1532d1ddba9c63352b46a17fb9c8dd7cdd894d9c9c212858ab0ea878e703d403613de189f3ebca37b1a9cd9ede086538e9dd6192f4b07cb74fe4fd5d79de7164343a38abf39f51ddf1ffa81e0
+GCD = 9
+
+A = 58395882946f2a4afb7c07225eea7658def0ad1b9204954747b099b221cc8c2631e344840cee358edd1b9c33ad7c694ba7a2ff4d9cb1d89f5413bc8fc2dfdb39fa04a1e7af2381673993e99cb86c86a75addfeadc9a86076ddbf45e28877dcba9b695e72bf4993258109bc7981388ea441f00b88210fc17533882dfeb9a481d8
+B = -d089cff57827f8408d61b4b32e5a337d9b9e363dd145943af0de7a60b911850aa86ff0a28de1a5d3b15d7881f737aa0f933289ad3951bc5c984a2ff9cc55e112c607d9608eabda8826171464deb39fa93ee0fb317464ca6fc03dc72d2beafa5cf83f72ba22f6672303b134c2ba1af337fbc215ef0a8e9a2c3e50308b11b487d0
+GCD = 18
+
+A = a62185dde2ea6f61bd547596a966f2109b17fc84984e6030326ab6a3163f20bf31f7e29b49e19c1dfbe1d8d2a66e37c00fdd27f601e4977349d5df4e5ebe726b840c521b680540c1d42aa31bad3c56524cbb7892063e10b292cbcbd9795ec38815c50217265afa14304dfae3cc21ef05b654c0733e575d45d33e6c6b7206f010
+B = -d1146b0e499b53bbbd54e009996b5dfe41fff6bbecc74015406f0b5777020418c7f8a58ea5f8881da990981b5384af93d51656e05a2d50f0c23b0fa4a333a92fff2e8450a7fa65e01dcf5325398c359f34dc799a4bc55f8db538529ae6f0aeac86ceeb3d3f00be43ef5e567695cc3c0e27c652407533bdc40995e8ebc23aef02
+GCD = 2
+
+A = -19bb5de4aa684dfd95b64a2efd0a76b82525d6768bb0a1e0b3311e06e694e3f7c3b9dfe92f0fd4ce859525fc9a00655558773efa134b63dbc6246c2deb8ce1a73dc034033c61ef17a91dee0d22155713084cd9d66b9727a842a4bae96a029ea3d212ba4a6fa3227cb267b176b7ada465a2b1a2bfbf310871e537e51cabbf0f
+B = -e11c5295664395f0404b184fd16e7fe6123e2b14e5fc8a017cfbc2c712795ad08d43457a176b1042e2d679b36de4aeb89e0de93a1522bd3b2bd44b631f2c756974e11442be01eab03564e8368164c4fe9e1f5a026545433687ff44b760be40755032cbfbcfd5b66000e5fb886b9d7889c4bb4515fd3587ddf4d186cbd33a8e1e
+GCD = 1
+
+A = -ce06721af0f66ff8a3df8ab2fe46ad49a61f7444f5c2bc55cc651086e5279bee32ba2b5bb3276e83200d8c994d00a36c5901945b11a17c62dc82bbd9a5c7787536d8643a8a7b1d64efee2206f02a7354b185f4c7793b23bf9dada8984396c76da219a0e5d746f15d2fc732e3f13faee869d941d3f4b1c3b61189deb786f73099
+B = cc436e5f3db0da416928a58a03f91038c1ab8fbe79591f8e5a83bd8186a9fecdd505fda88a297c14e7260f7735dec7cdefbaf8133037d70a75416589edb13ca35d8acf7f81c2c4b1bbcf6572c07ea69c6e6868d2e3fa283a191811f6ea180432a8fd7ca9fd6278b145df4cf69afd15637bcc9124094d9df7c90b7be52e5f274f
+GCD = 1
+
+A = -229b42807581eaebcd2c60a39a22236e7a173930e02c37187176664f390461e0be5d9081dc87cb587b415714c3afb0d7867f2e0c2e8675b21e7c0001d1a6452737befcdc3697fd544d69a893ee8574887726d92dd75671167f064107c8700fbe2ad868fdd0271697709f18c20a00539dffdc40584831fdc4ce4425874a7881c
+B = 2cfe0ca4335bbcaecf265dc46cbf3ad927e05a878ce3548cef3c601642ec54d5b382f9e78d5fbf4a97a54e244c7ec0120291855d319cb57086c5f30930d816aeee46f60d356e2d14f587af6ee8c3599553f8b9162dd16f1799637798cb8561b36102a2692db2b1f3f6041c46db8a20a875968845eb445568679148707290b00b
+GCD = 1
+
+A = -64fc5e360d4e3d24bfb31d5ba75455aa4d7a20c090ebff452121462125bf587d76a3c4329578048964a419256ca61a76e8b45e343d8a026e99d0666a3891238e5a9a51da039f7a797895e1418c9b0839c26e78c816e1666888cb3c9a8457f602e1b66e631992639f44830907c63e0b35bb9cd85c87804fe3cd7700e506cf0b64
+B = -95212acf0d73ea524da4679f663ce3099fd570f9118f30cfa0363d088ebfa768812f0079cceb8f51070e07e69062613f66a0ff3bc86ed2508e02a1714327a547069a87afa10856e5491f2bcb6e3fc82155fd198ae7ac34f76d5917a0922b83d8ad581d0b76c1b7ae6a0b0702442da647c655a09833a8bd28aa89c90a414a9d16
+GCD = 2
+
+A = e4131db5487d8d350cb0e927462fe9f6f43564736737f92c245e43fc9d2fc2030fac4d319588150069b61b0c70b34501bfcfc6da6df5b93e84a977d5c5449d051eec2b0c69269c9216946ff6af96e79a824f6d2f37251b402cf3dd2f060d2dac0ba2245c6a0537ad160183e76bc6e694700b1fef703ee546722c462ede23deb9
+B = -84613155c850ebb3235fe00ee513ba33ec1e58ef146b729aeecafa9714b591b57f0d62258d1cf41d6ba5ca2af77726e3b6a5a6fb528620f33cc495ca6ee2683761aa6709333e8c47605bce66a634016a7dec675356443ac57277b3192f164b44768e590907254c705897eddd0c264f8a5ac92c020c059731b3e0f2c834a082c9
+GCD = 3
+
+A = 2dd41432ca896911f6095f28b0851b2245f75d24501c5083403455c0a13acb172ad90a2d127849f2fc02f5055aceb460f6789175db522ead8d5efb1bb009edae75564d2ef90b8b585f77fc7cb11ab79cabcf76a068fc14ee80bec60e6ca524816f57703b2d6671ae5a1a2d1e95cd6971f33a81029943c403b9678aab69aa4b2f
+B = -d8c70da65df7a5aeb580218933a5d4a9f16c108412dc19360b14cec65543011f5c37c2e32e5821626b0cfb34c6a195740ab23cc93321cc9066f9b7d188bd5377486f0638b40a4aed49340340716dbdcc76f44a093399d2760819d8be4f7e63232f36be4c78a460e42dc620f8c3b3ce3320d1e1dbec7da9b7e889d53e5c572873
+GCD = 1
+
+A = 3ee366f91752e139ce9ae8e422acc0444e05ee47754231ba9a0224ce11683c32536689d6826bc5d51559593c1106a273825357f61dd82f8cc8e92b66a20ddcc84299345b603da31866fe8baf43b042505447de6f6dec85ac9397e22887010ab8db03f59c038f98e2dc2e158ca3286be7e88705b6daac344dd14dda542aacf1f9
+B = 9b8e6fcad70b373ba1c536f36d8fb4eaa12e107d8c2542503330b819599ebc2e108f10668d565d39a97e313f28fc32c0241bb12a3bce998e3e78392c48b56ecf7f9e7cfc45bb52142dc4278b63f53a55bfec6569ffedb6dccfb2444caadd26186e4e9f870b0d817ffb8061844a587c73d52a012a147dff70676d5ad57e541209
+GCD = 1
+
+A = -e8d9bf2d06ed0e90c06817fac2280b19a3d0dc5793defc150d364ce35a5c047895389e4f5310f4ef0e60a6d4e7f58e806f75d8398edac251304990d8fe2a8d1a5e4807e3d727da89bb61db5290a417c09eb8971070028eb7ea494ac347f73376e34a06efbceda19235c9165aa218471a5c885a1c4c778c1e69e4bbca13806db3
+B = -6616157bae085ab4c87fb1608e24817e8043999b5421bebd1db2b760da062b6ca3fb3435f376f2d094fcb71df1653eb4e4cdca022084a1ba5d87bf0fe88fb118766cd988ecf52c8ea177c5077512f2895eeb98bf914614b7862041e06257a5a480e41abe0e9d6db29eedfd0722a36f01f4e6d3ae92f34006bf00bc50055ba708
+GCD = 1
+
+A = -dbc449ca5253b53420a8fe2ed301e37299f811dbf5e550565e74d8177230b229b4d4aaf745b29b206eb984db1b68d11412c9c144beacb351b23be5086c66543189ab577c5886b383ef9903f99c03e1cecfa188a4baa468b3b10ecd937165c9d040d6cd908713f6a1f99cf241ed1127d1a022395a36b937579326ee76900e4c6c
+B = f5e38add2508329919c137d0bdfbd353fe9fce70b2d173bf91039a6e52de858e5df35829bb28cf1201a13da91e761cbc972c439c3415e9dc28b0465baa8e34089757e3e0b245abc94268479d4d4c3ea4c32318b2c94163f09883e634e33dbc4231e1b23ed7ae89f6efd53f72e4635d8c06836216d338c82ee5f6ba39e4c45ec7
+GCD = 1
+
+A = -6507585db81fe5872b4204d0a36cc34af63e58e04f077733108f435e801d1e40fa24e752421afe3b4c2cfa1852a0040d5674793e9d7871c108dc00b2062e51caf3924c480b884415bee4a55557b9b9dde7e4d090b2a1f4cfa7206da8369976499894e74ccc3482e6ff641af731aa9c38b2b58690050d254c9d6c4197e6d36cad
+B = -76f11f9bbb4aede3445775e11899c60ae1595881532b62df256dc45957e7ed59e1f5a2d6f10a235c1468f6167f76690548192846519d6f060a99cbf553709fc30020cbc19f30e7d76fa3bde708ce5bba9cbbe4a9d6b6fff67e6bb6a08d85e8d237c39a707bfb62af0890d1775c29d8f1b4a3f4fc145fcbd72c5c65374a8c49d1
+GCD = 1
+
+A = -ba696a5454a099f81bed7b7376f93223720fc2c4af6663197f80c32967e0635d7687dab6ef4885a0f4218d2735d30b1dd8f122d2e7614341255799f587538efe0391e7f29694a3dcb6a1da2c18f775c472d4a4cf3da0b44e2e8fe641551732c88681add226cf69eaff9bf77b944a655fbfc3cebb131f67a13175dd2285eccf87
+B = -4ad9059704e9aaf02d5dda2ced2eda5dfbb09c2c4636d60fb59f6b98a2b2f7679f8ed6d33ffe4117730ed6bffac8cb095253451a34ad9be30854e47efa1ecde722c7809ab8113dbb31cf82288590b19ac873eb682131ac78eef1af33063174e1c3aeb5ada04616303e23f38e3f34cd01c3c7fd1e5eecd49acd469c5edb5f9f7b
+GCD = 3
+
+A = -e64fa114dc5cad58b777372162a0eb0fb52a8653546313c87b66b97009f9aee1c3a12bfc530907a345b14e355b411b0c623993103cf43a8b700d58c107057075c2dbaecf788dd1ac4a7c374773111c86e73660d10a0e8fde421bb05c8e222b52ea7a4b9b32583f7e280a03868407f3f8ce6cbcf0c7ff85b3b503eda8c8b80612
+B = -9ba4a195088c99e4fd50d27c7e17472629f1f860523edb94b7802cb43266a2c1be703e8bfa4f1a898d968c3d0f3035b6ba2dc8e44bc96780a297abaa7b6431131b773cde95f1e1cf5a762d3f9ef2cfe325e6bfd512fac136e0863b5fc4cbbdd9a09802538c42507f32d82252413cceb1048d085beafcc4775e5769c83f989bc9
+GCD = 1
+
+A = 5f87242f516387482d53cee6cf0b57f6cbf5ee7879e73b98d79e1f4967d93e1042ced4ac822a85220a0d8b52b33c3e0405667e9ecc4ca24cd0a7ebf6d5df395958e805ddef68c331c2aced39bdd6a65e0e43e13e2d641bebbe23893780c54ab8b9032e6c345aded119e1dd296e9203507ba3674c89d2e966272f3810e5be7ccb
+B = -34433396a87381c918a68b2f1713e84d4f0090eae7eb104cd160e62bf7636fd950204849e1dff8e651ecb09e5bb68f8565c6b48fa77d688f4b98dad46b5be0b9fa9e3ba39f6fc3ea41c8713a14a264081a8fe524802eb173d235334308220e94bfd0f705f6821a79557d0f13e96e44ba109f794d8f6b6c04f4bb25de327e569
+GCD = 1
+
+A = 9ea2482ab4cf0d17d35b42f231822689e2c0548ef79d2c8ad50843749b7f909967c4851ef63d62973fca1ff86c7868970b7929dd6aa61c9b7b1a3264a8e1262f918619ea751d508eb34a17561514912ef6add8ba7e4a62567e583c573297576c638f1474b86276a5faf06220fd2ff8c3647c5585767aa4701efcab61882f1f98
+B = dfca32cb9380e8f7c09a5373d0c4eee7c3f43b3845df393ac041def309d5f844df6d972bf05ddd6b1bcfdef27837caf7e3c48632d5f528eb7d01dcff1023597b84ebba422e7e2d80f7ded1f7c288cc2ff8c3efe42badfc8612db2cb0becb895f34123d267c1a3d2d9b4abe88617a7f3f46597b10847dc6385f9dc591be6f1666
+GCD = 2
+
+A = dba72cba86404083e73b70bfde6d3c5ddf9392797f08bbbd19ababf69642b0e09cd8a57d7800b9d74ab0168665b56bbc66bd554066337db870c50068d8c11be72bc290b1df01292dc22af695970a18ac8016c2e21d0c72e0981a4d2b7c981d83a7e469bfd97d205b81cc89941c6e7755402406d86967b7f7c7d1eebb5e65083
+B = 9eda382aecbb22b4a1707a4074612eb5a2f986a1ff8c69832f2dd66462c0f48cc1dbe0ad7745c9de125778afa93e609ff22e505c6a13019fcd75ae611d4fc278f554edd63b193722009f2d0c76b497292fe45a7b1b5d9e9fd14a0d7d8288361ef656a3e0a573079f0142ff5ed0a55c1232141fd67bb16ea448bb665683628055
+GCD = 1
+
+A = 7622770fb750c8cb80997c6fc2c4763c1fad1cbdb2069bf192c856c8725079c076870101420f4bb3f7a8e45a6606e0d871e3478863576a414cbdc1bdb45b4b241ea1427bee7efa4cd65b207bf0f97720d26c02f689082f62a0da40766629eb5b5968578edb1cb1a4c381dcee484fb0373d195610c8b33d709b48a6d89995906
+B = ef3caa8ca433bdcd85a54a4e9be3049ff3c4119e8d7b0e842991c6ae0ebc5049bb2bf09717563fdc39672d8ba2111695e0f61ef28afb1ddab25b61c45a085f3d7a4972790adc04c66a26090bea81a67931014ce058e853e961b440510d9f59f615dd4f6eff796b4799dc500b2b3fbe4d712723ce2c1fc0d5f098b94d09987480
+GCD = 2
+
+A = 9c24e4efb9d54bfb72a16152bb939b8ebffea3817b0161fc1aaeb92abd8d193b42ab50bf363ff56f24f78203008b722f50036844ea43757f1925f8768b2ba53434aa5d03f06542999f2df920a7f9aea4e68510f662355cd9a0f72743891773e51e88b0e4f4a73791fd10be490ccdd9d6e4879a7f93e8ab36d26c7b71eb136c9b
+B = 10e87dc04e9e395097b00ff75bbadf213c7c152757570801556fb3f255efde9d1a2f965e7470257d02af73130462a037fe4aed163744cb34adb7fe1a07cab2036785e3a915fb027077f7b9eb66be105c10a33b08d1ba95af296edf845e33520b54862c7e89708df5e31b27c3f022d78823169f6cd616ac8d040c9445c2f8c272
+GCD = 1
+
+A = -f37b32714eaeaf89ac225b055f2afaaed57e6bb3f136028bfcd18638da50e9be829bb6cb691f8d872c576e8b853196a9e3ea4034427a2ecb32da7ec5bc4e63ca30339589b886053a006ed8c9eabee1eec392c4cafab1e31d05ff3530849b6f0ba60d26e15a92b4fb62ffcf2182db2084cbc1f38cfe0b1323a75399b57ba493a4
+B = -112f3273fd768ecec46ddfedf589cad3efd5ad34361ecf124cb5ad8101bb89ec78d6ba6c357d518a31e0b674baf795f84765aecbeec09508d6a660e3754266e5006b44a47dd2ebf2d8256b40ccb4f982f4f4c7cbe5b918c02027b87177651a186adef2604a15659683fcf318ae8644373820a4d36a3e46cbd8fe9f78ecd73271
+GCD = 9
+
+A = -becb79c951239e2e1b74b37132dd589b0803dfb4b63575ca32c6894f85a083a45ea826183a630dac7e3953e251d8ca073f1bc726fe3ae8f6354a08f81f3a601d6c00e149d26a8beff205c1b6846aa7dd65750eaaff52210da28053a181ea4712767ddc20f024307f4fd54b6d8fbeffca6117cdffbdcd7fa5851b74cb095eab93
+B = -c225f9722aacb0d06a17c8134774d2fb41f0a7ed7c2aa1ce15844c8170bb63a5c3d0343311798cce8378a8682dbb97c0c12d6eaf650a88909f196141b25e07b9656bb5b5291b06243b4d41994f15d3877556e3f3279b2187dbad74832361120328ab470b63858c55a5c29f23396b6bfabfe3dfbb375c8d4976b5832663bc6924
+GCD = 1
+
+A = -2fbe6c1020bbd2bb007dc977c809d53e58b05879861d1817db3aafd7762bf9d7429edbd6a98a77ef04fc67e69d5d4d9c835a72298a9b396e778bb8ad20f5c620090e333e3f6f717d943fdf9b0e71dea7ff50836da8d4a6332cbf9cdaaa991eaa1f54f7881d8de7c06c5d0f29206fc83a919c02a6a8a4cbf0bf9d245f5f6fa987
+B = -1c4097c825c37f38bc5bb5455e79479f089315c2bce2594f6cc87cd69a127419ca878cb491eb3096974e2799b0923f3354f5ae642901a5e001fac9073502c2f345c5e7928e1e3de872600473cf1fd5e5098cd6d6d4eba45aa7a19e470c896ac82b118fca177284d35f3d94e9ae399338e344b605bcdd9a7d0961c9dbde86149a
+GCD = 1
+
+A = 77c22f3e8cc59e6d16fd9fecde834a7fb34232ca43948acfd0276ed2ed7a853810d8f8f26b23b4d92b1bc11ac55d294150f335b66854be580cb2f1701e00d94fbacd6cc8208a13e14f9dfb2f6ff5857f0975901cdf83f434fe96fcb48c79a1ac01bca92a1f258953cd0f4d9827c8c2e356b546951ab82cd23b5e436719663396
+B = b0ddea5e48cde4538afd9d654497d209036c155786b934944223cdff235d67f7d1b3bdc2d17d438ed6e3391d7cdb9498101cb77eb68993d0fc31ae4ee2a1e029337d45d17f2b2a112a7e46d57777a26d1d0c5f16056cbf651b764d3dbf09672bd601dbdf8bb92705dd74499d7bb9484ee08efb884549a30e4e4ce69d6b1a3186
+GCD = 2
+
+A = 5eda6669e068a1ba60b72f72c8134be45d11a15fb0d804b0bfe4570054ffc55d70e79a50cc878ca7eaeffb637978f5588b26e86713b3cdfe2a091593ea12566dba239270708dbc8f15e798b1dd831724971dec5eed95175359e1d92e637be58fbbbd70e62e9683055b4c35b978a9f26d59c2cf04f985fecc69fd2d1ba5340191
+B = ed3d33a6444ecbd6f2a5cbb2996e4d0e33a9de4d391935b34fcdf8c5bbe21c4e53f9534080fa991752355c327f2a69b73c71e3b53dae06e6d42ef2df8f5385172661e38f4a59785ae41ed14310827b13378cd623b115db3bd7ec4a20f995f145ae9411a5a05c8d8998b2f4406d7d53f66c4ffa0fd09c201e2740e48fb16d2c33
+GCD = 1
+
+A = -8fdd32108f2b9ed4db0987defef367ed4e79897a67bfb1e0874a07b76f7cdb2170f06a76b4c688396cdbec7fdbdc08445f8a2cf9077fb1b3cf557701ed0ecb52871ca56b797c6a146c098ed3b905b0472f5f9eaa728b4665f6087801dbf3fef50a7ec1541b2b4e393a753fb7a1340c52951decf1ac36a92b992c948112e02139
+B = d38a1bfb7bda21ce6016fa808d0d13fd99c2b0beddd69946bcfd107ee58f4ca92d55167aede394fad4eace8db837b2cb1b1d658fb04697042ccecd358723533f3a0c1ad293f4bf63d9458ecec0b88a1f544c48589ab675b27214660243bdefd71cc5119c0f2c00d722ff145ec4eb97a51303c57d7b9dd4de86e7b715cc53c251
+GCD = 1
+
+A = 141d3696ae5d9bddcee491423e95edc1417011bdc431cf08bb6c1b5816040e7114c3d893014a431677091b9adbb2beb96e414d1c622d4ae6f16f50402094136678d20e976355ec2d9d1bb6e4da2f53ed42d50d7fff1e5898c1fc18dfc73d5f2498d76a584d685a05ad8bad3d35072f6de8f24ca9b9d8bbe91e386a1d087ed994
+B = -ab89309a3f8d5cd159bdb9605bae55b7b8767540c40372d88368d312bb3f56f0278020601efbdb002c9dd82ac41500d3c6fcbdd0a61ba9b26c6418906407fb6cf9bd31c32a05917fcee3e159c635d56d03036874a836b6b56718a92f87b1c0732115f8bc989dcfa6cfff6fd89e10abc3edcbce1123d3f5a95205305b7baacb6d
+GCD = 1
+
+A = -eb6d7f4c979a83cb28751238503d9dea46c2003027987008886e3c36a1cf6eee6911dcb770f02e36e66f1f910c71ac359a0a32bc9015844f2cb6b73b1016ba3da4eab3fc97636043e75e6ee8e9a428b58cee71efa018dcc01194d44c47eba3e51836ddffbd963f71d1e05662b797c61bd1e78f8749025b2cdce2b572772e5d0c
+B = -6e559ec50ceb01590d5fd485d6db7f3d48c626f9cda8a9d71b808e7dbde671b16607637ca894afc62ae7a9f8c633ff80e8cbb1ad6e090b1e22e2507df844b3a09e36f8023859409a5cc8822a074b8a44ad5b4eb437a7d047601d3d12ae7fda35848375ffd6fc0cab63f3cf7baac905f58a3b4f95e26a2c90199383b2432d4835
+GCD = 1
+
+A = f1465dd873ef240dc4335f2bb33d07bf8ae15fe3c94cd7924cd713d00a3429c5064ec235478f797aa1cd24a2934719026d4aacde50c389e06a544bb1e972978a2334c5f8367c36d80f58cce964d52cc83ab714380f3f476d542b40be1c6a53568353508297bba337db8262fe8eb6a821877392bd5beb78ff364bd3492ade2bac
+B = -c9ab219eed80b6efbc26962ad411e9d9afa045b1803f536e06d2dbd04e61d2c35ab79975cc00dfacf7be723d7bbf38a6e9535b2c0b477d87388f7d9f1a8747d148a55c729ca8b1212dd19053b45e7ca661fb263cd25a83bb6902c6227a4a6a84dc8cdace1fbc9853c44fec83a553e0bcb0c6cd9e1b5bc3733941de7dc1bb7df7
+GCD = 1
+
+A = -a1e8f6bc59299ba9d897da4814d1f001db6e818a550faf6e74edfff1a190fb2cb494fdf596f2b26e605d9887605d290b0d2c3fbbffcffff6785e40ac438eebc185ff84eef0b117268a6236f67b679aed1edda5b1646335249057a8c503ccbaae73962ba48f007c5240e3438762e18859085d1e2c53516b16a19634ed36e9ff99
+B = b4c03a06b61ef97735420d752d4bb654b9771dcf7deb718e9a2c3e144afbd0602e51db737b27b6cc5b563a30a0a0d2b4f6ca105fdbcfe7e4a92b20ad75c09352aa1087caecce52d1630d31acaddf631f94c8a087b97d325dd3da4c707ee571e45bc7067f57d296b351f3f4c1590450541943fea9aa39229e98315df01ab818cc
+GCD = 1
+
+A = c889e6a57fde763bab859a8da39f6562f34aea39ab9aa78252658eebd35384698d76d7997e034ab41e992074b8292b940830de7249575db91e726008ee46b49a95426d2d9928312c63f236ddfde746d525119bb36e6d9be88a2de2b65dfb1b7bd9ab6b5455a9e86c990496e7f5af49be2fbcec9984a5b07b3a4ced120fc7baac
+B = f9914fa1cb14addfd683057b7dc4cd1b0a77ad4a89d6098635ddf2cde544ab0b62c9fcbfbdd80e24cc91c09604ae66c867d3322dfbf7728813242dd18805ea4f16b4925b57ebc3b9ff77e6cc84c8f6903176be75243bcd6a9fc7b2c72fa65a4f1717ea2fbbdea31e9c112be6abca89567754c333d9bb0971e2e394147d37f7a7
+GCD = 1
+
+A = 69ad50c29abb11a952ceff86b200ce13e2ed389b188eee0798cb45ac430ede93288fbdf27aade0a22226fc567f60cbb553d660713511b1535ba1a60ad6932a774235395682763d705cc7ee8deb17c0835ca0c68e2c401b28df8132942e3469b0f9b1455bb1a4ca1165f868a0d5d3a95573a174efa15cb258cab439aa25e6b117
+B = 4fc289390ca3760438bbeba3c0643faf9aba231bad37f9dee804afefbdbe405e7474001403fc28d69a131feb19a7dc374966c00fc910ccf08a9bbad00b8d54992d3c6b7b88f7053704b8bbffbdb952ecc9b74ab00fc81487ff145d2c0b114a4d0b3601ecfbf9fdf0c427fe438cd41e0dd4254b41477e17171f2944165c95a764
+GCD = 1
+
+A = a6958b10b000af19622c74c60e835b21b364df3fce9f5c3f426ee379c362a55b3f255b54a98f6300188373ba049f91b186d5cce0774b68400f4c5c09184e8d2dbdb4b02608881fffe4d5f9b32c4bb51b9b4799f1458069c3947485e1dc8bb8b04a21b8a824205050b818dcd2c79b7f935864ae7a686574f3a1fc9684cab8672d
+B = e12f293ca9f9bfccf620b3035df8e15f2a6c0cd6f708fd0fa5f8e22d5209a85e0f30293d2f9785cb40c685ca576c5f202cd56faf995f362990b49cba88a5ee9c9bdc85946bb228797c424fdc52d52cd9a7818a822aaedaa1b05892aa455f4a311bb86b71222f54da47ac466f957b37fd93c498aedf051a9a2eb44fcdd513cce3
+GCD = 1
+
+A = 7e7667d9c324c4b38a6abaa9cf16de74c8831cf96486d563efdfd97ea9fd547e79b10bfc18f05e685ffbbf1784daaad2774f209d745360a45e3285683784ae16408193a2646fc4437f7ad839fd53ad923d1db82c90fd6c7660b7bfe2f9e821b0866d0f6244418dcfe6a477345e54e7aa57cc12d3e6a0ebc96f6e42a953f42e69
+B = 8f7eefd5e9b340e6c31e9550ee8657409267bcccc19cbb2d223c81faee21c7e7c61a5c68daa98ce48c43b655abb5255de29bd3d1136ab7e46fee2a66ca60a231c9e708d568609644e76a4dac5ac5bcb0c7e80a83bc046a8dd3afcc653516ea77ea7ff43e89a2507e75774ef9d17fe62550788548fe7d1345de98849028e2dcf4
+GCD = 1
+
+A = -f4aeefb72ce5bc92be21102f9bde324b71b751ca2cba3396b1a0cf50292a7095ab636d1155f25a389ee219b8384c49b27240ba11bc500546fd88ffad5e6b98fe942991dee7f1ec312c1cd7bd2a29e031f1f3e2daf07cae6b9e7ba0f2255c602db347a82ac6ba9e660acc60e88347deca1bc92d8d74c03a9383ad9a4d8df95faa
+B = ed96f4f15cc3b6ba18153fa6bbbd603c0d5e7a16506f62a07a68b128705d3d0ca4a234cb8bff6b132efd981069305371e2f9017a35e372431ee0c04c52c519781e90afcce3261f41c52fa7996b3d8d0b7e8008a8d0c753254f69f25637ba6bb666696048c2fd57cabdf85c4e7cc1806b4d5098dc3a1d7a05358b73c59f68c686
+GCD = 2
+
+A = ad539ff8790907f93b5d7651a76739c906c2a05a8a91cba1cdc015c0052194c7a00047201982793225bd756cfcff9078550e655ea91a0551a64863b38db92a1a9b670364b2f81f4c531307f3e59216d8cee1c179c5b9ba7b5ecdcdbfe1555b0b90db28ecb444dee04cc19d4376fa969de9661405ffe26b86d862b1985ff24e86
+B = -14dc76cbeb5d0d13cc1fe1a3d7b74ad089d1bc817b8dea5a06f0b10f47636fc7492b5699cc2f4fa1705ef06c4096e2a93924e2c16e0bf934e6f9d84222d46fa6e2c3081dc4aa29746256eecaffa2757b6f2ec06ae21f8d19308d59196fc88ffeb05dc7924627586c44f8e450775efdc85444c86fddb7e61f9799f3854e3f40af
+GCD = 1
+
+A = 42256a176668c404a39223d36216d2f7e7011d298272759e47636173b18514adc8bab0a1e147b3bb8432e1645544d7e6d2591995e5ca6743cabaaa16183ece7b7e846d786c4fd53708ffdf5b7c3933545690c42e9231693905ef8391f9344af8c85015416baf20d36d2ba91c10d4fabd2ddae51f4d2e9ae8fee40221dc0f321d
+B = a01fdb11921bf592401b5735002a4a0c3fcf5496b4d4c51da1948d2fcd5a754f51219d7d82ec312dd330398ac16dda72c15fa4cf4893fc01c647d0e87b8724303c31b2193e1113a2ceb6160fa5b0034426b5e7b16c189abeaf23502920cfa3323a27d86ac2ca026005e8e27f24b036ac1f0796143f97a1bca0505054a27f5a89
+GCD = 1
+
+A = ac294fa2025e419ce04a308b040f002ab6e926797de79092371ecebcbe751563d311fda0b0b49e1c8dd83d6bc36c2de915e7333b88393a9731a3ac17a8881e876688255db23147f489cce94aa12424f6564c8fa25fb0d60edcf0e86fc0b59f9e4228cf89a5add863c214f25e3023d60558e9615d21cb797cdcdb1caaccc01fde
+B = -f9be3436e80285f1659ccffe8e2a54db6b72d9c547fbb08a9ad92efbea1e6804019bcf3766fdb6fc33ade6d95d8558fb811c0a46422abca2d101b9c8ed7ca7184738543d172c71df379a74a03194b36b760b716577481e7e80f9d8728690a2418c94eec9aa54bf6a1867810ccca4cf3010eb7cde36d840627187c6bc2cc881bd
+GCD = 3
+
+A = 1bb748bbdf139e00cee6bb12223e1a1e0c8e4ce80f69edfda0df5bf3eef4364f673579790c88790f1d67655bb4b2f6acfc098a747667b396a3f43e47bdc4efb768e025288953226554978035909de2442212f9f5e18403e49295bda1d823d1c03a3128991fb79f44c6536456988d6457fed5b32fd7abb6c738344ba617c62940
+B = f73ab9fd39a618f4b6bebc775a73299a56484751c0bd87dfc322b702dcc1b932eba527bae1f6df286ed9b79d0dd9e577fa2f7eb0508f8c688c43849087a6738c5154fa00cb995b5a681bf32a4a8b74de5c7d24a1b17cf996371b38292471fe176b070acaa2e7d5944d1bcd3fb41f9f7496aa9d12a1da9753351d831d8689786a
+GCD = 2
+
+A = -62100d0ea245f1c0d4c44c880976dc52a5b56640c266d037c7498527c427caff7cf1ff023c966c996848b198e61655f0bbdb8406fcc55f187d0f96ab1b5ee59e98c98cf066eaba84a40146fd5118bc408f560b57a937c88efcb8be483283178824dfff90f9d03f062aeb31a53a149335692ad9615f4f5591d53f4cc98b03fff9
+B = f9956a7365254b161b2eb8286630889110b3491db671e79debf5c244bfe3aded448b8edbf43f9c1dad3e13d41980cf8dacdb4746419de22f86b2d11d76a1965d8055759bbf2ee1b96470236486359f630a929eb3180b317fc5fe1dbade5532a43a73bfd0ac43b1edbec5290faec53ab2869771d742670655a9be7bcd8971e20e
+GCD = 27
+
+A = -1a89ce2299d269abcfd05aadab7321cecd718b733ae6140d286005483ebec431cc2fddf1583bcf4050d9b527f8a3dd761d03c9bdab6c70a816d3854261ab553ce6c2b8a8d4106030877881c8da4c522f5c690d2576a9438ddd04f0866f3c63ec559c3c1e1c316d4de2b4422769b233df68622503926e7d0d76af31cd909a79d2
+B = -9bdf5847ada9f010ff2d886d635a0423d94d58529d1de24d97535174ac087d98d784125102961791b9d3b2ebb0d26af8d4c858479c1656b735f5433967a534e9dfc6d4a336bc9868c0b80aeb0a6b2b01dea90b6422bf8701fccb0a6726c2479ba00338b71f350724713d7aebc1bf3f372d4b956643859f55f5e7d46d3c7aedba
+GCD = 2
+
+A = 8e6cfa0aed843d7716e2430892a7c296ffae5a7b94dd724a53ca5895d258518934f8c57d108a88a194bc69d26c1df574ca4f3bc8322c78570086467f9e7728d8f23e5ef352cd975069ade419a334a1b7b0e607c3cebb4b47d1004618985fc330862240c7adf83bfe8cb956783d43de28f9b5ccc5100875770e46e320f919db3f
+B = e90e670b795faa3d3b44374355f087305eb84eef68f395f1985a4dce207547a5c1880d89f2284e3fd312e67ebc9ae09ce48d9f7fc25559935bbff5eda3dbcb23b3265c8f25ab91f4c604f9589d48272709a78cbff7bc693c6095f44b931b422734a1d7751cb2f35687b0656d2e9c25eb8f2e1687a2cde452e4c7e13f380a3320
+GCD = 1
+
+A = ea8c5d18a562b2a5059242c12676bca709c309314efa13acd068385637b1bcafaa752ff9d6747fcb028eadc0227436327da6c9ac38cf1c10f49ff599ae149e7fd11e0f87629cb7cfa7ae623a6c902f07974726bedcafc5666ed6c0d4d9be32c36eaeef0eddd81f8f4db807a9dbfb5976c0518393033ba412d7e6c1a717b5dac
+B = 86b840c6ea9f7f1e02899a96dfb00f4495ab9a867e98d38f78fc2fe169c50339564056d650a18490e644886e0a82d91ff9f964e807376673377f8811f1b759ba03dd674f701030d731d9e304364ed3593f6b164859fa96f9616848bf8d3f7df114dca6d978221d491892b72064cf64a8d7bfef322419c55e1f5bcfb9895b7fa4
+GCD = 4
+
+A = b8f1f9f22d2ad3ff7fd61c2207c2b833ac781b683dd83de59f1ee85d036ca933295e60337ba87ff8034a0abf94dce4741c9842c44765c1576797a11951ae97123c642d2c6e71ff974f5a20c8a57f51292c0e15ab538220719531b810ad8fe3e9c9f2ac9b67e7315b9cb786df65e2e87afd2a05629fd679a9f04f9a65b1dfea1b
+B = a974ea619e4ead5de86c2858dccc66b49d7f2edcd33c5ecca22904c6a9c6a804f00516e9098430ad924b12eadab1febb9f59883a84229f19ef22664fd6b47d19e202635aa74ed8827735ce294454aa2ee26e03401430e7c7ff91778c0bcc0b566d25c41d110f8c7b5ec407af3a642c14cdf67ed8279e76805b6031efa946287c
+GCD = 1
+
+A = 9ab3b52f06efc2caf836ab494759c8e53dba44c50b9b7e9c2e1860b975d2ab8ac865480cc5f7c6d55741b20e3bae945be87298cb42a8b462445d0e9c3273c55d744512037e104a5a16be7209c288601c23edf35fa833502305083208436400bc7c7b592e82e957f05fd6bb98e0769c8eec8352279ac62b269d4ee940b942e825
+B = 73e264200bf4dc4b2885d69351543e921ff914bca9b824546a0fa5fd9b176b20a8bee890b9165d7aa781c7f8217d6ac5d70a07211a20d4b41e0e9ada44d2d0688b76244a6837844acd3330fa69bf72c4abc5cc6b1866c9796d42e8f4fb1929554d50cb77ff55a18bf43fe94e3c2609e27e51ffe5893879a889530b345a81e626
+GCD = 2f
+
+A = -18f9692bc1adf8abfbb1b811bf4dabd84b07824813451d67edc865faa055049c45ac51f9115f8f2c19297f9baff1c1f4f59c3d59ede9b038dbd5d2955244599f28cf4886751ded5f810240d45fce790f9df593e1f5710945b3ae7893f3cabac41bf0f249e23d468006f13f69888f2850cb49ca7c929c4a786f85c7603c22bdf7
+B = bc64002d4c69f755ed2e0f7b26d55701b5b2fad5e04f60728505e2e2103ca28f0d99182f49d0c76ca882845289330e9db88926bb6989a480474febeb8b3b64aa0a7815ad3e82937732d6cf994667e309c0b508c950b67b22a20454274be3a3c2fb7ac729ecc2b7733e3cc8df24d78c952f1bf51cc0a341cfb04834e784ddb832
+GCD = 1
+
+A = -5c75650f4c0290f16f532706a9d56a63b7d3a5e0e942e733552ffd78ead7ba9172e1d5dada5888c16fc0abcdc85e01ec0ae41cbd9fefcd6736aaf0599c0014959989f5c09bc2922ab8dd97db74f8140c624d212574fac14c54cc6b3a13e54493940b33950d913db1e27d418dadd44b69d975086a841f71581bbb2846f04f9dd5
+B = 3b42f714d0ab3e7a3d6149f2d952ae870acd9a43cf55300e5bca92ac5866f34e28e1a79e40ea1794a5bef531817222c39259e595e926cf23812ca311bb3435c7efc8b639c42cb1411fcb979925d8fdb53de0d786d20ddb081e1da1272d89a1db2885f388a8b07950cf0cb5199984b7c70901926637e9d9a56b582792b31fd49c
+GCD = 1
+
+A = -aa355a852724adcf7a07c2ec7145afdeeeb1937e5835e75d675e45e81cbe7a60d7c2fed68f6a2f95bcf31dcc4bc15e9399318db8896e9b5bf21f7c63eb74207557151e9fd5cdafdf970a108e77b0e6af46eef3a5ebe21f1b73cdd2a863b47363c962422d220749a04aa598b47fd6babb328d1db4446cd1b954f75f73e54a8f86
+B = -98f99e43a024078df5ef11197328e8abdcf551aed887eff045e2c543ee98d2617bdb69160fdea02ad0492ddc4c4d21155db8f4902ab5c9bbc275a7edb61308689affa1f913d33ca2f5d0a556fd336bd6ae2dd20d1959ff78a931744afed715a09845d5f594fe4ebeb4626bd015e9204966277f9e82175689332514606e284509
+GCD = 11
+
+A = -4c74192a29f90bbccf0503e2e6ebcbfe3880c6723414ce4d8782f158f7d908e143aee42f123afb2486655d1248d14b6624158361b53a15986a406f457200d904adb99ab446467ae6fb95103c34bf23b664171d625b6c876f67dc5e6e7f1a74af5f6fd14e6d8e09a6465f311a012630da46419d46c09c95887d1ac3878e1424b8
+B = ef29f04bbde0a295308eb4c6e416e91c8236a5eceae5ccd8828a3f276ede45e8a8b76a4cb0fe60c4e08194d20c366b499d2e25a7b9c0b7adc875d36f55702953d98b257458c04ea43d4343bad9664444031a398809aa5d0946b6ff9b2c335e18243adcb6659b542d74968bce28d1d95b1c06f07e17cc1620e79b114db0a3089a
+GCD = 2
+
+A = 8158ec0bdab042fe15a5f755e090b81f59d8e1f6d1fbb4c11c21aae1c8e494f1ce6795aa8c653e7884c269586be9294599706496edcd66cfda237799df6c546d917fe071a97a88ff1d77509b0e828d8073fb17697c3bc37a057c337812e8c6aa9026306ec40b622d47b94d5602507b1055d54a97ab7d8fc7b06c7066e52b50c5
+B = -a63457087b14920bf1ab9c63d23382defe14ce5b502abd7dcba2b3f7f78f9569cc111b74ba19951d5047947a573017533021da317f901b11c7f2a62876652ceab888000ef51e3d4fab953f1267db1b91c3d7e3b559932f4a83fb369226b9458e9ce57d98171749effa316a379dd3591f5283af15584d72c4da74dbd16f058bf2
+GCD = 1
+
+A = -46f241adf0dfdf28907dc97ed2fb1a7d3dbac6bd109cbbf200966e014339317ee150b3bd56fecf4637a3ac368ccb353c7799223580882715262448bd7d9808b700ba10d761a547d9b65659efd3c501891e7b1f5d59486bf9263392e554235c080c0b27ccc6c746a8b6816c7cd2e57df346bd618a6e6167aa790ad50a0024c9c8
+B = -cf63bbe406bdf481e370e5071b1d5e4712a3a625a1dafb439a6c9e8282550bc67a56393bb9e7b8fc9cdf0d377c43559e6e72841b470dcd44efa9bc707b579005acc2481728897c6966432093f8971941ab74fc098d3d20f371d32a4345f44f57349259ba4e59f0e1c67ac1438125c41270c375517ea47a9f745cd9acf8c02b3a
+GCD = 2
+
+A = -e5aba3ea8c24bd2a084dd957dee72f3e76878b032b7b194e74f42545fea4becb386e77154aab28d940755f6a03fe4061f513ca1657eaf1663eff9878449b987c70ce25686bdb3f2667cc2fe694520365a9f47e7210b5aac817d9d46fe35305932d8262807421166529f3cdfb749f79df73e29ddd1a322d0689532f68b78a492a
+B = -27693d6cda42168573773f5fead3ba37c9357a9004f270cbb381c8841af9f5b665db287e08076e92cc7e17cb96bda789fda7ac9828a3f50199b57303e8fe0ea4218c18a435be863f27a0db4ab5361e490f806b25123f4b48d099df9e10fa3bc233a76286edcfabb18c27a0c5dd7d05a69623ebcac8919d0f29f21ada1447445b
+GCD = 1
+
+A = ed01a476a5396ec18bea640a4e84bb7bd58ab709196da56e2e1b68f78e728e2a57f4f1b07e783c0985839955188174ca213e8ab41159e15d352570a74f716f581137995fcc226c662c2999c1fd136d51ce56e8b1a241e45a49399d3ac6d9d665e11cc0f6c1ce343ddd09fceb16a40fe4ef4bec198a0ddf4c0f8dea0152769bf4
+B = -39412cf40b9991f1693fa22aa2697ea0332dccca7f3c6c91c0bbbc34253e2e3d3bec4684f660933c96d77ac09a5bac970de56a11a36b898d4eef306581c3ed829836b2767a7fbef0a390a3e75658ede2d32244ac3b88d0625cea38a1724e3050cd56f12999545a9583e5262c791c5c9307953b5246a1342064ce8fff5f55886a
+GCD = 2
+
+A = 45ed2e42cdd46ebd9428b2b16448e3ef9d0a4e62cc24f5db01772d3ddccdaedbb3b326f45641204fa3fe9449a62afafabed9fb46e329bdced67d732b3671df82690fd9176501b4c6703763b02d0726df1d103f6de16f4f1ac11d3ca7479141a8c418d775910ebe2e12d35c3f98be593e077c006d68df2f7566a148d73f89839f
+B = d55b0413877f29d4615e01d77d63c648dc0c49e403cff630aeae507839027fcf3b10c6e529d53c0efe0d78ccb7f2eb160c854a0cbb56296481825736bffa81cf4c53a30ee568b76b1d33a43d8cd6f0c5495fc7c1687fe97f0973e7b2cb196b9e1592ec1805ffd3332c887350ca356c12187c4f6a744ee6f01785cf6b4d3fb629
+GCD = 1
+
+A = -689cc64b461c27f2ba5e0ee0e92eb1169ad4b4fd5ca342312b9768597174035ff3dc60d45b88b807c9df3f96701bf3691bf207542cd44004613e0fdc6fbe17aa3099d365531f8af11920bed14f10aeb2c8145c325003a4e5d661bd308eb023bdfb2d7073e4da382fafbc17e37bfb381b4e1482a6a9cfef75e89403fd5f5ae822
+B = 8c396d16f8f93fa2588d2fe23e4f9290a6f063ffa8902f5ed331ce8e41844ec7fa39190c28ade85e63ac0f8de14390de4365469ed14846c4983493974d90e9a95e746620eaba9210c8e2dc65cd8b736a0b69db069377d2cb528dede5ab1b8187b3113c6dd29ad30336ccab2640f0db8fd87ca3b5efac7646be0ef282b292ad1f
+GCD = 1
+
+A = 2c50be7ddeea610c09882c68f159759092d7f59f015c6e7bfb17dd37086c3781d501e2d0b070435d00c830fc925b69e3376858db4b05de2d334c9b85274eb3f73f1dda800b5ac462cf352b15f7ac9999f5fab3d714ec72a589a727db26ed26c68f89cdaebbe1e34f87a7386909f8fe15b07852b6bbc561a578c32d5aae059fe5
+B = -9238dee9e069e1741534521f74f0eaca7bb444da8722189823a4d0f15dc45410beb94fa3de6a8c32d6278464c1f668013ab49298e956f73e62ddfa29b64fa16a7dbeff63353987d0fd541f5bc12cf941001f31842dc3e904f02926062990f552d5ca8b0110ca414bbbe4a4d63df4794768be41024261233834c4e73b6731a995
+GCD = 1
+
+A = 5fa96a794101f5988bb9c0f9ef767990676326b06df4e17250d5c343e0ef0b8b47061f5200c2e500086d71210e240d75aae00aa1fa581cf377ecd908a560d8cb63984321a2a1c181e300bba2261d3f74c58464dfc198b2381209f448b38557172e734c00e90ace90834b9c1eb4632c9a841301920a99a107721914f802a0a4d9
+B = -2bd44b1061aa83bd81c67fdf8aefa58613270a82f0807ced4834a5be3d048688d1025e3acd80c8962751df5b3ba928e1b5b0fa1d7b3b07007617854d075e7ddd5b3c8f4b984c2c9c386e2c181754c2e5726b80035a3b2295e1bd1890080d9beccce1db010f0a09865b2812c1e624da804d1294b034b6b5e86d23b23783f8194e
+GCD = 1
+
+A = b5c8f36365148bf442d254d79aa3f6ab2220198eb38f2991ab5e541e4b6b85ebec48753b979d39c03d8594438bbb1fe0d382b505f05537c43428ea9680cd4f52f60ab6a23b839efb9d7984e425033ce769d58afbc052c7643d4e08c932b9eb4e49349a3976025555caa874ddf02fa22fd4720947a8b143a2f53a9a822b1161d2
+B = b1b9e9a36bb68e300ca0e903246628e77c98d932ee137e6be07d8e29277d3e773e996b1bd54dc6faf4cddd7a291dc84ffc5f86a7d59f86037d25080f3d44078261be7ab55ab4bbdd4828c8c4eb8e9c842e6c089fcd5bddaab276d7aecf51335958a083176f2421a4c5b77c887f90621f8fb43ad6bca5576ae28402cd58f4a1bc
+GCD = 2
+
+A = -2cc807a3d76dc0860cf497175eca612be4e42167e2200659cc022d2aa8d6838f62771c9bb2c4894bdcc2f13a594877dbc3bba1eecb7d58642f24d30186b2dc334d5c4bb2efd4808d61a7735127e5c51383e430ba547ca8a9e96a4ee73636a86ca9b5762b14b8449ce8609b7fd3be627b0d9747ae3a1fcdbb9e9d1667544fe033
+B = c1ad7129b8c5e39d2d588a9f9a4c15dde7e641e6996ffc4f3efaffec423bda64d0f342c6f992866bac067dff2fce23bab4c761c98c3b2ff4705d503426b84d4ab25bf6ed9646a346739dfa9809cce9ea29f040913e67cd22cdd00d5f6de055da49d1439954402071113a9b72b4dc25c114badd87e05da3cb896457b9d8674a89
+GCD = 1
+
+A = -32f71d850eb1eb3fd4377095b5c5a0de35e45243f1862d4d44b0bfa518ce746c9d051f1e9a64a48888c832195b173edb3dd9b8d2672024b4c3b7c70164fc5027fd0363b30b178ce50eb3d1fd29b1d6183a216608d3661f8a893ea8d553f3e3c96e106a7db0db715c9356c6ff14ca5841d149b03dcf8a2881360c332685800dd2
+B = b2b1eb727bc60c5ab24f8a6f3c547ece158b74f5993a9fe005e1c4942effd1b7ed2a1ea6349a310b85d03b555da4044e362b99865afe15a3671748f75cd5294c62de81c055e3bc116580b75bbe616063705d36e6c468418c836c05ddc753f8cb1346f09a69aa5f54d2997e990110317666ed32a509b1be077443e8b742db743b
+GCD = 1
+
+A = d95a2a9d45147d170debbf4156b55b45af102ee2dccabfc99c8d0fe38828478947431aad87f7ffb084c8652560ab029c70e7a1d0c6d8219bec65dfa4f3b47f62eff44c78e14ae12062713b98ce00d94c0ef459966394d932a3d77cd6ca0a3989c89e3fa5badcec441407088d038196c4afa59593edd209cb0e4b85ad551fa92b
+B = 3697cab3f684261e009892cb528727f0a37cddbfaacfd272333b514e362c2a15c486d99bc2224e7ddf51b8d49dac1445b716901bcf6fa7cb5aa12e69d9f718b1c6256d16bc0187f6f0f9163bc32406cdaed25d47758280907bb604323f6e9492649cf52c7f2961958a54ff5fbc57eb91e2018ca3d41f043a3653c8855f3a0247
+GCD = 1
+
+A = 24ddb0657d11a2f57859018bf81f29f23d5ba0c62e70798ad802979718eb1d50ab501ee26da2b91b2400fc9d2f8456e579a6450c0f636aa8212f9c225747d2f2232a02517d08334ab96c0aeb0daee71afd40fc47ac11507d12526d056527571fde94c940d600c6ef1428c89cb4344fe2dd04807b12b01f64d41bf78a41aa3820
+B = 4a2bd79379a02605482ebafc3b86b2da2883ff897a5aebbead62cc1bd469bb355a397631314025e78af5983c9a475091f0a237a95b4123daaff1f8a49e8dec76cb1e3d210dd1b88c4b686b9dfbe304a8b813ae62ef3b921b77eb836007c34cee38986f8184e3d5d9f99f0676bb2e3fb5009935e5c61cea295f7478f7d7535fa
+GCD = 2
+
+A = -74ba1925c0860eb2507bc3d248cca2272763d4f51334fddd21ebbcd41b74626634b34cb697cf48e5d4ac8310e0d6dfa37360990b78dda47bf32e2fdf33755d908fc63bb191278405697bb3cfb7d785b9a50822960a2b7b453f8060c08327e3f723d7825694f84ee122a185538f434ef6962d6d889950dece705ff25f657ac501
+B = -c144a90bbacb1ed0c5a5ded71780324d6dee78456b67585c57f6f86c7c64e9fae64faa1f36896d9be3252b2b3cc5632baebeb3d82f77bd6470be01897eb17e70b49593db7ba4675f802650d7f031d45544c428522780fc6680c50f0a78b342f8c259d0253582398a2f2245db60eff372b3e705e58cc56d9e621b1e3d718bf454
+GCD = 1
+
+A = -a4536de10f37ed1ef5a256b7a1fe0bec93350c4cec8d151fd53c566898cd3946a353f187c769b3b7f39abba08edf5a3b5987b56e2780605cf224a759be00328fd99d7eb5c76a6800586e8fd6d3030bd9220198e8278499520afe15c7353adbc403865ae2e33f9d75ed703f333414a374a65ecd6d93a72c55d97b5e0f2f14b40a
+B = bc65a4fb99f6edac37bf147b08b8bc9a59988907c719a0064f9d6de1c6cdb8f839809d1ebf744e0a02d02a36c270e879c5a7745fcc85a986ac4dbfd21ea6d2944a239e34af1e8073caf046514ad2fa5032b5c20d8c708d5df47801a076b15d5c1b140620f46a5024b5d9d77cb22eaa557d2db9743445cad2804ae94d97406eb2
+GCD = 6
+
+A = -a545c033a325fe399789ce9a7a645743db86936c5e0aa6d16bcde482a66ba29e43c558a883d9153e17cba30e734679b9528d35ee3d75c1efbfce483501c6dd421f4914725de5304439ae86b05070c7d9c3b3a74f69b5e625138bd5cba8b0970e72798a9e2bfe30abcb5384e6981444b009593cffac3c47107afd5a72a2a07621
+B = -d5611d3282e737ce71460fd387cdba554681aaca0840df41814f378cee57e15963c554f17adae711b6a1488f9f4349676e0f2b59a115f43ff3b16f5b02121121a5e29f7e797341579e43b4a13f5a4b672a2868d843c88c2e3114a68dc33fbccc9c0a0234d9ea64fb3fd97e17f1f4f1f73ea757dd21412906cc3dc25ce18d4d44
+GCD = 7
+
+A = 6014790ff9839cde9e8140ceab2a5cb198098feb5ad5ee17edd581c4e74cb8758b857f59c91525c40b2d147890ad8f1af8acd339af61eddce824dc0fa735efd3a2c05eeec46776fb306af07683dcc10ddd4921d34cdf9acf9e1ed8f798ca556832cdfa5a366ecd9c8630aa62f5f6f1dbd154e7d6660d11293ba76b5b6b8f74fc
+B = -7a82c8643075a3d923de4550ce8718eab9954353b35dfa99f3fe9c8da450338d103274929c6bf0c682b7b1ce3b41998a418d96a4425186fb3efbd256bd0c9edc11e896442d13b3a0a30690cc6de6aa533a55320df2938c04b5bd029a5b308f0ee78a1482495b60daf8823d6503434cbd1c26f776dd088096718a9105304e2492
+GCD = 6
+
+A = 2f94d61eaae0b546bf54b558ed624106bba5c4b6150830e30b46ffd1ce324f2c604a8161adafffb09e1e54248ca0d9a0a17b1f50a4874659b7064d8399430a7cd4de3fa1f0dd66f1ea1971581027e5cbf4c46268ed10a878f0e9410b07c940ed20381a86bf77dcb23fd691f76676bb197d6103f25690f802031bf547fb798741
+B = -3c5544370a941a85aea5ae02c70eeb376eb1b0671a0b77ac40d82e2da46c48991a8ef6a65129584949ccaadeefe238b64efc360137addaf5195675978acf980e7184a4757ba246bfe4fb3e8879ad8e6061c0782e398e2af37963f25294ba5c819f8645a330a57c1cb6f9a58d55acc31be9167b9ce8f6f5e0303fb125262612d7
+GCD = 1
+
+A = -4786d1607a1c67e35da02e38d639d1b81bdbc3878ba01aacf4a8a9d52b8d4ea23e76dc5677e1e4939fe14d0f98515bc0bf43554fe9f1161c155d005d3e96e543c4ce08d2ed891bc581e33a6dbd9661874a62d70c008f5c3b58fd627a22af20a180737742e815616ec6cd80c53932f6e2aaa73e16aea6d95a86e368f0c726e138
+B = 4ef4dca39afbdc86f8f21c53207e7eb6abe43b1fb044265302aaf9570b3a00ec4ab5e18b3910049a5414f409da839f9fee7240c86cd31839e45e73413f0ad3183bd57c0635e2375d0df0742e3dc1e65d92910cb0a74a693e257e0ec1d19a804954b3f08001c3379002bb798c267cc73f9519d100d129c050cf9ba88436a9cd6
+GCD = 2
+
+A = -6e1a665d401db6eeb03978c8495e3a5702c6a48dcee7ebf25711582cf27deaf0403d16c7022a7766024835c92259a6a9878026d91c50cce94ce8975ad0d092a521a197f2975d5a38b9fe48f8b14a247d67f0c6620ebeb11d8702fd298f77ab5a46aa6497e0e3665cb6b889a67139541ad8326097bf4c2e1a47d221856d74bd6b
+B = -59a2474909e5e944b00562cfb5745d828b12a5ba2ca17fc3d68bccce25adc39f029fb993e91002b8edeeb6324458e541131b760f1c113162887ecde888597dd6c46961e953e1a541b45d8b852d201ae6bdd172cfd100c00d76a4da200d7b819fa92517914f5f8d6adb96d365e6f1abe944d927043bfc29cd28ca41a4a4810154
+GCD = 1
+
+A = -950b093253cb0facacc280d0d0ee3fa0a273411c32009962b7e156e0786cbdc21e4695bed9ada656c513d25dce0f0807f695ca386d89d5434cb5f3a72bda6b8c0e5521d55b395b0f613c1fe77eac265abaefe91126ef7fb70bc7c3a859b0d5bc0aa848bd4455a4b50ec2aedbb1d585ca60e1d5fc28c96db7ce532e07c381bb7a
+B = 50f3fb76c9b2098efc136ede4bdbd1a8a4a341361fc0bae9cd12d66e0e64a2d5b5ab407613325dac205e06b645e3a5bc1b60d92c9c3f5367e9026013fc828e9ad4f27b1227b643f880e86c11e2829dfd2d8e619c1dbf497a772cb86f8c63acddf78f9bf460cae7d20416255f3685796887d27a6bc06e49dfa397487397422f8e
+GCD = 2
+
+A = 5dcc986415f0593b9bae27f6d9bef08249239d0310e3e911fc2eb27d75e0c8e5754eff06e2a864981ff69af3bcefdfe0f990fce0b50385988910993417463afc4f7d408664a817fb7921d2171db32dc7dd10fed62d76cd8fb4f59c91f90b58ff973eafc61aca941c3cd9195e67c0381c4820830a36a2392f9976dc87720e5f9c
+B = -ebf3f0a9d7e601b6f7b32d73238e404b01053ef443abe334139b366a927f876f2e5ada10a264a96d993ab73a0b0413d87b5b5f0da0f47d44c317f7dafb1b10abcbdef62fb1e50e4eb6dd4c007b2af3efa398cb0c126920d7527ac14d92afe574208995c62a6a0e57747c52f795b5c14848eb9c6fad9e995ae551e94d6a491930
+GCD = 4
+
+A = 113588007c47c8446bb9327edf9927741b49dd860308265b5599c08671828d884036530f50be121ce42701cda05b48fa6fc0c523d11d6ff9ec77103d43216845026265bbd441c5b0291355dcf6a70ad62113ca9737a2bb380a5ffb2af186e497fdaa536a613d66046e1fb6ceadf734f9609c6c04547e018139f871272bff16ed
+B = 2ee5821cca2bf68179241aefe900b017822f48a2258dc7430c8aa361cf4bc57185dc14fdcc358d3219243bf2031f170b651a9da15af58172edf783092ae3cee1b1152b9e96faed54e36b47ad7cc09c8a9f67991024cdff3c7f02d2c9884b8d6611cf8eaf594f60637a113a1c558badce1ae038f36539f2321d4bb0150166d203
+GCD = 3
+
+A = -f0a5f2f299ff6ecd9ddf7783a146ff16de2c5824046e4817fcdf81f2bf98fb77079523ac29a72441323c0d2f03e6cb1d30507018912935b8d7c744189b938f95d16472838cbb201c3bb13adf06d289102abb45c9897c90530454e1f74e3c6dbb4716c007557ef9dcd2160ec2350fe4defc8d2688a8c23e38faf957bf1fc1e1b9
+B = 998339cc35c2a9c037b87a81a5006f432c1126ba4e730d1ad362bf03895c0a9eb5def7c2dea1c1aaf68ab9c8dc96e82ae7285181d237c5b78a54119e4830809f52668366cdb1ea0ed2813a9d2afdb816b8f5eed82080122effb3fdd126cf1e2da6611b0d08a34184fc7a62421da140be3189d2d6672b8f562be9c83da10aab7b
+GCD = 1
+
+A = -39f3293480aebc9e9ffb9eacd6a5931519b463deda0cb1f17fdf15bd157bbd4e5298a5a26355473b3ec3df00cc10bde46cefdb5b460e68a08162c95a52d3fa9d3dc0ce86c86e02f490a94198c8b367167feb7cd7e5749c2d8aae5064ce3e89dbaef716db72d6b91a742ae136fbf07dce8180e694a12c976ef028b8f55680cc7f
+B = b5ec8f244eb49a949f59226e2d1c2861b5f1730a98c35bd8a17d6b9618619ad5a38d3cea3371979b917e75402535ae3dc27c864957866691dd4378760850f43fc1688612a116d1568bdccacaa2e19a313647fd9e02a749123505ca010c0149837009e1bd7407f930baa68b4c00b5946dd9b2ace8790b0afaa6f7344b86ae27bd
+GCD = 1
+
+A = f20a84c97750699d43ff9e226de9f6b361deacd8d7097322e940f8642ce072e6bca4169b38b860e7103a38714346293b84488bcd5faa606c64daadd186bcbec1595abdd4a43f1170d19f46ea98b205280abb6d51b959654411093c79cf48f7bd48ac045f22d8cef5470d9ba95beaa64d35ca2a6c8449e3ed68b8e2aa633f62de
+B = c33f2010c87dba2b97e3e3a21967fa11e3ccc63093a0e64fa157ea73d9d8b4df08b7252c69751ea52775b16626da8868c31cfd74f4d582688633f8b8557f2cccb80b42f7811c79e4c2ceaeb168c084f5899209b5b79d154941052b43310090da44c4ca540f790c92a4a049ba4c43496dbde310f0575c84e9bb50abcac5f1b917
+GCD = 1
+
+A = 6cc1106b17e4d67848326d4ade3646de27d55397a7b22f620c9db48758307db9af9944d4582550724ac5f37fd8060fb2dd45c8fe3eb7f2a179853eb0cb186a459d447af95a9540e1a2a44d91b697d66cce28eadcd61ba38bd5e818e279531c654c4455f775e4ccb5ff8becf4ad64f9a35e8184b539171f602043e6669056a526
+B = e8c79e03e683b83ba549270d76ae3404d8479995c57e2dadd728ca22d0919b64b4ca36ae53c694b45123d68970d9db4f31acdcee16c375010fbc954f27b37aae4c6b3c1d9d9c762f4db1250b056bb20292216e1066dafdea119ed9eb4748d01018d1b0a66bb1fd9f6c9da05cbca502e6ea24567d1f1f72018ba5bb36bcd04503
+GCD = 1
+
+A = f1a3e6f4dbcb46a93a87a346e734cbbef90eb5fbe1fbcac34a1d676e12a2f9d20e0815fb519c69b5fcafd0bad7c750aea40a518adfa761572577799e196fd727ec31616d6a230d9c7f9c40d27517672f84d063b958140db929a7cae00201e0e6a8cca516f5df0d749f64ded6cbf80646f8f689fdb87a3d2a316b0fe5cee75375
+B = -50383f56f74b4436b1b06d7c5fa850a2352c21052eb22f1f63c441d6bafdd5f42648568b58ce4bc6a52ad67389e47f1106500f46244c71184b8882a1efb94301a1f4df6ec313ce8acf5b910cb90dab0522c3a1cc3f581767d89a7ced685f7ef04832c839e7d9c05b2e3cf017f98c28637b9e6e3d9cb68b63efaa2d0f863e60e4
+GCD = 1
+
+A = cf5874c419c5da8df67fcc5c4e38ad7202fea304e92d222ce9a32240d8c27252b97a750489e6c049696a70e084ad76ed9345bbc400913a7d0a05d399f35d0f89061078341fa071a43b7b2cff7fef6c8665abeae78068914c00d4593e962e294c9e7ba2de84f342332163c72df51fff325f700f37a4624d0a944c851d7ef8d05b
+B = -cf7128b22045180dac29ff129d662076c75e8eaae91dfa30d3cccd3ac68f0f5b41075f0dacea37fadbbf9dc6fc15609ae49bc050664a4b8032821adc5803064aed95745d201933989e473abef9dc3eb818ead872ac06be462e5bd00c739bac1f1945edd3208d93650c3802e2ecebafd99f3a57bf1779ddb004f6d5e91c2f0f98
+GCD = 7
+
+A = -e9dd0c99e2841cde43c0308e62edae5b900e06c6a5f9ac38df37f26e828a701f2d370fe38ba0c21444807132823e925641014a935bc075228bc2077694a77e3f0293ce91cf21575fba9c134970dbef3952ee278138dc0332fd7f272915b46ca671be36b4210cc18f32a3aa295e4f0f1547a2891be16809d32d51c606da7c9184
+B = b114c128ef14e29829be70f79b5572ff84c62a9f475e962817a735b7b5d9769d7c75feabbb7b60f2fa9d85f7304303f50a5974fa2d77aa1603b2c59d4a1a53a79d511508ed081e1f07bee018b5f124bde2ac4d06d89ded82c3785ee6279f5be4376af498bea796dd8118e2d61c5f413afad65da9b48f050958c15dd5ad6dfae5
+GCD = 3
+
+A = -b9c226c716819abbbdbadea4448c67d498c20f48a44c2a0433a8e800cc333477402958c32a56c1d74c37e07a8e59e66b591d6de8ac1f165c995a07ea45aedcbad4b919353d8c18554a4cc016a2fba7f758b98478e0c139a058c847307710f03fed087abd3986b90fbc8a49342d8e3874acf27c5c947cb00fd6c1007a2c5ab6c0
+B = -3853034d982efca21362ace215ad28f524e7b3c82d5a163643729899b56d11863dbfb64f2072b387e7d03e49710a4e51cb09b8c080b7c0bbe1f364c7e654d41653b0a23efc4e9b2195c85791618b9fef7fc6ce841d638b825bb3245acd167181156b490fdbcc47acf1396236e4e9d35b7b634e0ca09f9755df216a86fe868060
+GCD = 20
+
+A = -ca848f790211aa3f9c17b1c8d7ccb7a36eca0a150f13a478a6970995f84db7e4bcd59efd11e5f5a523d691a492f2663d45e63a481a4763364e97935c11adac592e5c054fc9e10919e3a0979e671fad9d2a7e2305c9fb65846bc533a15df8ffff933a4d86cd86e76a17d9388b1ec8dd089ddf3bf2765641e43d22f3653bf65ca
+B = 6945bfc8baaa501d2affaac88af992cace4371865e95562e491fd53b646d020af185330ad3f86b6fa304891e28b1307758fa0e9e09c2c5a8c129eefaf9fbdac2c970c85a86bc2d2726615289ade108996988bc7e0b5ceb3ad8fe7674fbfe38dbb5b2261bfc6cd78ee422643405a36761612ff4a1f5d654e4ffc0c60e0ee1dccb
+GCD = 1
+
+A = 181ee8c341b8dcb5d4b4515297c88bd0bc9819e9fa08a87e2c2f0c9b795d34d566996e62dbc315d9917ede71e9e67618c56d297beb910fed8187ce7ed6d419c83bbc7edf0ad7a0701fe61a8556dec2f186d6e7930f7b9bcbc931806e70a21635a2e8052894d33458f2017300e570e402c0110a47a2aae60ffb29c7dd909346cd
+B = 2e1018a9e9f35473a0c3011be046281b8202596f508aa12699af8ae8e8fcb3a4c055d0d525db02f7db5a0863147a759d2e6ea13a1639d80587d15a9613326119d5bf778d2a0e1af8b8d8ddd8b44df4cb2fb8a260178f5b9d0ab649b93a70e3d55adc96fde81d6a8050229a908762c62b1169bb179973ac3ed3c048b1f011b5ab
+GCD = 1
+
+A = -aad18976b5984713d5d264c4ac56be897bf2d70a496619e2bd61885d3bbce349e30aba60eeb1cb5ddd03cb3514d02447f655625a320d8d2fca5b873b4c38f2ebadeb2ad8ef8f496a7e980af0f8c882063e4603392430f8264c3d572aeae97113d418389adb586f00b4092f69d79342cb560da9cf92e094b967c8bd1911babd50
+B = -3331c0ab5c3a6c72fc14864f6e2c05d178ce177bc1a94989095c5fb73d6c583aa62e35a5138d75ac5d20c83b4544401a1808ce7e05d2365b3743b75d184550c7f1d2557e701109b958f2d1f032143de5e5cdfabb16ebdc2fb17645098ecd693399c0fc11dd664efc2c377b958eb8a562d0b34d1ca0bfe86e4ebd98e85ea0cbfb
+GCD = 3
+
+A = 408b5413fa8d5c237ca6f74452aeaa2dc0fbce1db2d845005e4ae5e73bfa4818ee6a4e1731480418af0e251ed76b9972b756ce2e96f6e390bc2efdba89a2689ac6bcec04296aeeb398e0a3166c89a98a2f14b5935cbb3f91142bb971219ef69305648a99aa042233c3598158bc09ae1474f32f30bfa705ea06fc7bf19be37332
+B = 5082ade7ef9a105e88f4d4f2715f3b6fe8810eef95b1b22e0d9a4de772553751c9c252328063cb48470c417a2be131bdb5e7b409deff69d5f7e9b8ee523d0293780fc7536ad2ec41d3b01d11ef0d3f26ab5ea49efe4ca962c2a1a36f4f92fa0b2165482f466ee3d3bb12ffbb9468a9b437d42b54f10e8f68ea4b1bebd4626796
+GCD = 16
+
+A = 2527f3772ef71811694454e161760461a85bbfbcd23f0cb908b3b581546d978885f07f2cebf7174a51143d5da4dad390f316bb8966d930542b76eb307ff06ebe92092bb6a1b5cf9dbc00977f8f1889a53da233ddec5dbf621adfbb6793ec306b9282596320783ae30be15ec22ca1432b77207121c564fb9545db2f4506819d1c
+B = -982962815ca355599a96257aabfe04f43c520e3b9e9f16f33803be223208bb602bf61dd2bee6bf206ed86eaf09c65b3d5025cddc4554a5cc194f954d6949b9275ee42bdee6951ad8cbdf69a3aa3ed05bc8c37c436a06e48d0989b8d202a224e9f5880ccb56c38fc989f81629bab118b14200d827b39fd45ad86a3c275fb5ebe
+GCD = 2
+
+A = -c721e3e207853ce66001c076a1f95045f3347ff90826bfe976d05f10af4aa6dc65af4df82d246fc05462a1d4319e7bdb01edb242184dc191815e833b5bc143c332dfb3b7a9ee49bd7393866988d71972339078f6c65c591cd06feb24ce8d67ffcbbecfe08610e39fc0cbe9e3fa7c2ca79cd4cfdae0493b53361e7a471a3e23
+B = -919876c963c181859fe87695d2875f2d9fb9c17600cd0bf9f23f39a3f0e3dc129e990d4abe576a243a841473578d75746019a29e315596e159f6f0616cfa58b5e1a4ea53f187f42496a5a4bbc2f9a46cfe138387f1596bdaad06e7895780ec07fb05af359c76833cf9989c7c0ed2f5b37c67fe0e6a4fd0f6bb5b6fa54de684d5
+GCD = 3
+
+A = 59dddfb46824e489198c6d1b256b87e5ea90184585b479ef6aab716dd6d8e8747ae87344db8ced454e1474ffa662e4627fef10b66d9399cf835d2222731bd069a8ac0dd4eac9146ea421d7ab60680f3fd37d12f74c4c6550b9fc002c3a8b2c8301fba23d40035a76cc61ea95a95ea3efd18c0019ae76b1a6d499f915d0275d5d
+B = -b0c96aae71b5627eb00c2b4df9e4c80817ff6148ccdea632e1ade49311df3200481dce42508eb70be7dc90e958011aa00298a0bdffcafdbb06c3a232b45cb16f92a84beb09187c7b38de5da32e9286d7b1abe2a59dcd1b0df7f34baa70501ac41075f4c08d9c06108efd1fa14e6edfb281b4f898c4d0cf0963bc90cad3211271
+GCD = 5
+
+A = -226f4f9ab805a21b13c3af0133778c611447a9da0f716e2cd12a47b509dc1ab4893d6f20040ec27b80cdbfc39566477cc0a4b891ea4d793e253b09370361edb58a0b26810cc2ee325591b3cee525aa63b5fca3c6014ce7d684a92f9013df1f14a31de8cceb91cb89fd29479119ddc9b463d33527eb1a3ab800dcbb15bea8526a
+B = -1223aedf7add6aa6d300f25f53b84c27657ff045a37ebe991718fa8ab3f5b97544356f5184f03c80d49592a8ff051f0f11b5b1ed2d0016d1f7498a58607ff3b3f95552de42668237ffeb73fac6e7f4d74c58436d1635da85de9c0583928698407cb729d338a7224206dba44ac12c996cdff510e68a38adb439ea3ef3b5a0c471
+GCD = 1
+
+A = 9965821b1b2ee6194877c3da96749e7cf7259743662382365b673f1046d84cc719dabb4a98c2af3c4a1406e6f89e848a47be67a4c1c8cc5b36c8c2ad2312d374431697e3a9a0348a261ed2abc676331d798e2dcd14dc03964767c94968bfe2a14d71245123e36389466203a3fb32aa7b9cb251e0a517a27ef60f7cd762882fe6
+B = e079a40bd4075e1c3ab043e919c12e39cd3925bea3eacd8e519ad625b91443fa1a7b7a280f757663e1fd5cc64cdcea0ec5f41e382b3d0949d697f425a26bd2b633c1bbdab2912b99cf8d1b97653844fc8822a7b077d31c6538d8a1e09002745fa492ac04aa7bff09858f5a436232e48e58ac3cde1958dcc4647ff4cf23e25329
+GCD = 1
+
+A = dbf7e77ac155d1ef8e653f636cb7dface45b1f04db8666412db2d9ecebf3a5de12ea0884f4c34736dea4600b0aa892ded72505894734e2906a05d1416d684b00753b9c37868b44a8454bb237bf15a7d63826d6a26b761376ad3592134ae78c141bd063b2e55a26c0ba972c2e0b5957782351c4182a8f77d97d5ccbba78ded8c
+B = 4858f94908c783045a071e14d217f6c46c1adecf0e279bf556113fcc88802cec30d16f5abd7c8f384da4a327a1193f4ce84b8c937aa44538c7d7cf1fea3c235f11d81417a608daa62d374d38d583ad66a794e19424431c03b71891b7eb2d688fe6131ed9b972cbc0d6111746cf551346ce8eea53a985f00277f4d3bed6297c6
+GCD = 2
+
+A = -14bbb77462733e03551d9a0972153048805d0f690f02165db80af21328ee6161622e38a4c9c065243e465f93f9f6da1af68212cdb8515d10a44ca31c01b9c37480fb74e17c054f2c4a7e48ca759490c532457ef79630d9a1d7c5f26347f420ae4d5a8bf884abad3ad783a96154463e2e6b9e0252373807a6fbd4f92f0e4b6f0
+B = 5d6b45d1a99fc1c7c57c8018eceb3a59ea10117a974b549565f9c6535b62b0b411f7caba081e4379c19f482ce4cf6bf716773f31c789da851180ad7cf41031ac4e027fa0fe17ed33078b12b80ec133ab72bfe4c625e5fc6d1d247b094ff1229f2bd1d172a851f53f691921eb61887f6926e6fc2be50b86594312e42804898110
+GCD = 10
+
+A = -765feeec7e34c125f82dcd19b472536c6bae3285dead28633c703883c724de4a4bc497f43a1a57e223928520fb9ac262a2c5bd343517b37931b7d451b49798b2975fe8d14e00fb10bcd149e955f347c70b5b8ed0a0fd080ce5224a5250c6584659509e9f25d76c49feb2875293cfa31451037b0c7126af5bc9d0b79c3c5cc9a7
+B = -6c30c4b72d5a52e551dc154f685d1f34d2e5dc11943ab01160ca8c1dc98c54dba776fb7e39e69572f74d7ff1c21831222d8e6657b732fad5c6aae77e87e7a99552489424c6f3b87ca51fdb45f51b523196df8251b71fa9c0a33579571b80ce533bbc385b8ee7a532adf13e66134250138bbfc5bceba9446d53a58740cc005fa3
+GCD = 1f
+
+A = d1a9567c95f0e09515941b6f0cdd90208410e6b266825a467012c2ee9947b2789b06c06c0adc40e35ad3c2b8118945984caa2d65b03882668c654a8934037ac0043ea053ad58a864d00545d047bd0c69b72c490ca7faead1b9b4eece5e7d2d0dd93a2b4c84cc356f8b398ad546f4dfc1fbd13ea25fcf12eab8738e19e1a70a4c
+B = 1678b02461ceb06bd4b29175c1e11671a0e41a2b951605fc034f0e585f459728d124cd51bd5b42048bab31eb513522410daa306f9955bc48a912a45e3c929c54dda1160b992b1feedbe9ae06f9c0753b87d234d941d2541ca8324a904af0f8d4ac9a0f6a2438a866a0ee1fabd182c29dab29abea0754c8ba1adc2ee6595a67d5
+GCD = 1
+
+A = -6655101cee19096b61bb71f92fa0ddd3cff5ff0ee1986eb9ddf712b2a91cf520b19d4a9625e03e835452cbb2ee89cf4f2f0e0a849dabf4b40c5040ba276046c0e26d8c402ad11164d707cbcdfd33326111b077ff8d33f3abe703198185bbd1fe67ff9b4d1af3f0168ef1809c246816fe41372117d91950c1468fa797519ac67c
+B = -73cf12ed398c635780dc71e5b6b8b35db5edefc42f4a0137701d69d5fff06f5e8bb76366225003c3e363c2adddccea595588db0cbaffde7a88a6c1f5fe4227c0b30436c917f131a3a7243890589bacb81c810c9318d0b26e65af14406ccd9e461470e9a40c1a24de3ebd6ef2b0f906dce3cc7145aad699e01256e6e7218c2a95
+GCD = 13
+
+A = 672cd5d88a3b7ab490e57972c336895d12b22fc316020d2fb9abf419603af35eb536f15ea821483612072a45127980b2639fa2b467743b2337611c62bbdde1547ea604a7acd6b55e7c36ecc74164b19d572d63b83281ebaa3cf3901860c8acf2fc09b78f48052a926202712d33bdbaf3e2f8d8b6a38631232b1143b538784218
+B = -ecba4c9220cc47e34e625ded95c032628a27baf61b13fdfa74b9786b718fc64c8491fa9b80316212b65fb15bb9d97259729004bb9095adbb34fd59c0caacc35ea950cb0bc692996098ad31368621e6f1b1846de058294f739f516f126bdd6d8be93e52887d3d4dfa619bd67295080057856e608641e32f833ede9eb98360ac49
+GCD = 1
+
+A = a59d98ea45597b8a01b406ab885f9b95bc71003ba785d6cddd1a0a4631695c15acbdfaca6aa2f00501b9b55d795c41eec49a7a42b80950d76deebba132797755a4ab9d05479c859f9718c7cc9e7b520db8f5121d34eee810a29b74044d296541da3ba710222c51acbe926165b83c29f1eb8c022a87bc77e8db6cca00d8517683
+B = d18c7a1b2f314ecf2de6e5e6c31de6f02fe0915194d387cbdca76ea12770c75a663a56a91c23e88835fe527eea82423b455157534d8da85204e18ff6f2512174153962b338712efff3c271ee220de7e0e29cccb2f5d06e7d41986f327805349b4094d8eb8b8314e3f53f6bc40b3ffe2c4385694f1f1a025b0f52303d1353023f
+GCD = 1
+
+A = 275972ee388bad072fe497034cc7f38d331028ca1b313538c15a0387a6f5dfc37e377efc4e794b5e42c81bc9be9ff350867f079dad090d387dbc6ba9c12a3244ae0fb3df7b0d8c42e918f13f82ab1ff1bf92eea8a3f74e7ec1a81b90b423f93e477760efab431c131a7bc1496989011cfce4e239ce222fa3bb3c35953cdfa328
+B = -773b70cf799c3158457a236490eaee73cfea16d30dd4e35af28e07c6841c2b512991430a909f65d7a198eba0c8408b96dd5b3d1106b5b9baabb3c6531e426e8b6623f7896fce31687e6c0a3c9b2fe598454a3c83d808e692efc9b7cacc480b9d081b352a37298656a6be0c0e5e8e809de08d9a364c8ccde792d48c709738d6bd
+GCD = 1
+
+A = 50f3a4a3e98386bbed3d3deb76a7ff406c8cbadbfd29d1bf4be6e1856e012cdda9c15dee2eac79199983a36f753d9372c41acb60022d3e67f88883e2b12044bb4ca0baac1cd5a6d2e7c656f5da5a6e0f0969539516d4a938b61b790e5b43a189eb8eee0337e912b4da67f80e41e00d410f9315e802419f9e139b8dcb1a4dc830
+B = a09e8b5cc6f0f713eb27cff04069cbe13cffc6a535903c456c06a721f07ae2b497cc8d03f1ba22b9d4cf59d24574ded090eb4382c4caf84e8b2227bb2a176e7a372dac2836fdcb0389daec0d3cc41e2c6574b0c7661d1b9267e7997def8ce88e03583985f151be7119546f52a1a85a21c2ed149956e759c918e1f7bfd5970a42
+GCD = 2
+
+A = 28b56201b1fd7583e9617471b92b0f9caec80f9d312645f63140934eee31221b37ad6bd48e18d9c896c4247c7803ffedfeed4bc26ad4879839e69b38a202df194c0e8ab99ee68c0d4ce5afadc0a1315e552210ab3747aad2c458a24543fb5b9015d380543a9eb4b3fbfb764618fdb9db80869ffbddd75522a04a00e52351e619
+B = dea8a62d414cb8c815a2a505664b87da35882d3a883443ec683ddee00463d74f3c098a2becf5daa928c0a206fe776790603c89725f92d0ea7567a4ea9bb8190861286b0cec9198a088a37821c462a9b52a86dff1075da3460d240193dc4b843e6c5b6ef0dfd85a978b09c3f5f5e832ced400e49b645ee7c2d19764ff79ad89c4
+GCD = 1
+
+A = -a2d70c04aa7873f30daffa5065e8edc1ef9040fe395e5f7cf5317286460ecf184009ac6e98a777aee6cc2d06b026dfd32e92311d8cf9f2823ea6c5e358003d834033276633a682138e79257a832bad3a5b0865e5ff4312670db2f3df7fff085bfb04682bf946b48e67ee2e1a4af62a830e78d1df182ca1f6c9d6b51ad81935d2
+B = -54f770b408433cea93181b2ce6d02317e397e7fd2b4941527ee1a02bb447eda4ac556e0ded07c179cbb269c1a9d63885fbb5c49ef6b5991f768161f4602bd3ba6dc7e0935403f8dfee99c3f0d626db7a282225c16ad2725f006bbbaca559800931be938d388fe0ecb00cefb6174ddca426e4635a25f7b64e00c0f19ed17d9013
+GCD = 1
+
+A = 9736a7cadc6b84c3976fa42051ba5fb41420ede032e11d75c1d9829996bd3ef61a4f34ab8e9d6ef1e2b011e058c67ecb049b940ffdb180a1aa45165e14954a06a78e0807a144430954122160b3c30488f2787bd1602f1d536d9f206e5265dc13411b6fd86fb7f2481d50bd0789de55261fe8df04d42f5b2d3dfcd6ff928e00dd
+B = 14df228d8533515fc27ae4614f30262e939bdf69ea5781382b00cb1162076187af453ac0c62c49b19f56f2c03d125b1836addfe2b5d19f990573d02388ee86962d9632de49739bcb16aef25321f406fab0dbdd9954040962d9c01e3d5f27818559f606293d5626d0457868b5cb6cb29e7300295977e9b2929f597595691e3fa4
+GCD = 1
+
+A = -6ac8530e4cae087a08ca3f5f99c2125ad7df963ca4f67bc21a3aede4b5a7e3a851f10ed7018dc8166e7d29e8f9afc11a00f3cbc2b3816e6a424cfd2d4ae2512ead649a3c22cf9e0906037e1186d884bb6479458585cda2fc28197b546a52653b58ef6054bc2111980f414a2288e93a3d98d58de7924c4098c7db7f60477735e
+B = -b6001b6bb270892757672f3edc34ebaafa8288a1da76a2780c308e913612f2b95619d103058bc989f22ac74930bf100638fc151202833f22a53cc1965c6b4d840875054dff65af192034e13d2ab496b944b162c841d34048530cfaf68dcd053385538e00dfd2cc361c2420e7e21326ec9862566b3211b4f1b6b0e8765db4e855
+GCD = 1
+
+A = 7ad10bcae33469b823206691058f5006831e5f4cf8c899e8e805c296c2d023fc9fa30ae48629c9121a1b7b7baa7869f41952d976d3325c20d78e365eb71ab9799ce4e532f4ef01cd7890e42d9d9f08106f5d318997376bb39bb770bb53df6ac92a5f12161cfeb1b992bb6942ac07e9dc3f09d1dafd9749a5ace44eecf0c2a2cf
+B = 8121b391b68864fce85167ea74d7fd00ca5debccaa1af7ffdfc351df9034a5ae46ef7e3fc1bc69cb6ce3d3d09ffb34aa97a4e61ae7b1bec3007b10f2685b8485177e9d458fefa1e669a65266cdde1ff9316fae0044de3c9c5f2975ec3fa401c7b103f044803ca59549390cebcb2789fa69f7437764216230cd6ea8de8e2f3de7
+GCD = 1
+
+A = fb162c82917a2526cde13085a3547dbe3386789f38dfe9319005b428ac1a48855a558ac6d5abd3a4f5476ae35f1cb3741fdfc793c97e974239ef5161c33b7ed0644a2df7379d5c6ac4c4a9e8aec886410284d33949d031db8aae609bab887b11a0b43e11ad9318fd4d49e05d5366413aec0a2da7591f06b0f1a9600065c0ca62
+B = -31f66028ce40bd9d2fa06c03f4c6fdff773fdbc2cec0b96708bf713dbfaaab75159ccc7404e2622ead81c4d8143a7dff47d0e03dbb08a1ec7a4c683633a27028ce7ea0ad5681cd323921ee7a858999c85042ddf43656e5dd76601402763d08700017b65886459c0aa6118b6e138b6b33e9449e347c7d0d931e25aed61b3b7b7d
+GCD = 1
+
+A = 152c0081f69dc3e300b502ac728d860094fe3b7835b0a94193e4d24b565b0e5a0f0bac601d770d2de3bee614d9cae108092bbf9bb5cd49341561d9ed337df3e5dd22318a4fb2e86a4ac40113bdef9cf2ccadb23cda530a40ffa9d31fc272fce3a55f6d65cd21a267001ecc98719c74807043b9ab9105c4ff82f5ad221a95480d
+B = 4c39ecf56e2e4aac656aa89eec6b2607acd6a7a707b06d90eff64db77681e4869a21107898330b73daafc3a03c508f0c314d658b74d0b5030602bdeb4146ad158a9441ee120f86b53de8f2668de576f1adc6b426409472591733a0dc323f23562ec3dddd542e34cf43e6698fd1d997162c974d9fa898fcd0f07a0ea883f6972d
+GCD = 7
+
+A = -1a5c5682a4abc09bcdcd8b0a9b5e01ad9ad199d6fb4fe64d2b3fb87c9e436ff8d240fba52d78f84b2b4587c281c161290a7e6e2810c78ee7221057af32c86df8f397cd081e1d9e69087b8c441580ce17f6e6449e21dce1995faadad23b0284ff4fd80093544decf4183b1ff6ba407f46aeb9bc236c5ae1a5ae5cbedd264b85f9
+B = 4a6437c38007fea68f48ed8e816bc4b8295736bb8513e8a97b6992e113df68fb7dfa891794934552e9401aee6fab2f57c6a090197fb6ce24077764453f32962602fae7ef52a6c9be9046b029fadbf0da5869e3ec7632fe797e14db9f8d2d38b3e1a310de89151d6edb33af69d8af0ffa3128e42419c428ffce1bf42da741d948
+GCD = 1
+
+A = -ae54b5651cd7f68978bc22ac1df6e12a0401b44c01364554e5190a47e9b7a7474897723d5438b68122998c08041703d8a4ea6d7b12e34342dcc8672728f907fcee17c0db1c4da54ae89c44c3e7ea07c0f323275fbdc560abf1e6afe94f66cd8c43327c62766cfd68d44981b83ae3a68291eb37d35a871833ebbf1fbba3c66cc4
+B = 9b988e52169bc0b39923ada8603d028e4fea0d6610d978d0da978afa8943af9bbbcbf687a9d44babc490690077d85feaf1061a1fe2e8190622b5464090b655b35f5314bfb0b95dd4644aaafcff093ee5642114ffdbb4d8b6d55bb0a941d6ef838bb15645aa9c379a339df2f8e06ca91e0a2cef3572ad0d2f7b17fcb3e842a6b3
+GCD = 5
+
+A = -b82b4a5f9137a069db269e477edf6f5fc306c26839d29a1580f611ee1a0822fca8a45bda22199b8f46873eef8c81d36b6bca0cf122fb7c9c194faaa7935c655f039b5e9174013315f7da8b666d9ec6f2665ccae864a802299ff2313089b54ceb6bfecf9bf731112cbed2b6ff8402c9d8c545e1110c7208616cd44efcb86f0cfb
+B = -c20bfd4e6c25282c961079f20fa65abedd3c18748984abae47a939f5acb3322b64335ebfb23c275eabb3d20700ff837f09f8fb97a62448c865a5f5a3659363bcf0ba51a762afbdfcbe0f24e4afb342112c912a79e361a2c75f273ced8dced1138088197a3f9f9624f5c239f6781020ba05e347bd1daa5fca56e320745d69fa3
+GCD = 1
+
+A = 1249f09f304ea32e0ce5aef1c661a6b6add1eaed1724f33107c6005bd695385e47ecd3c2f71eb579209a0cea97b9a813f85d19dadf827e8d1544bde457a8b97a7a77c68a57f99c912ee08188d67719efbfe9f4cd0e5108fc22c9ef0faf335b94eb572a4b4131b1b370a97e17b14a69e6dd245d4fea0f2f9da05f926ac69800c2
+B = -cf5e7b49773acb326749ff253c041445250b604c76f435998a61a636efd828d041208883f9c55ba7c005c6ad4af8cff442da0aa0279956a6c381a99db90686a3e7b636e59e2ed84c9935c74ff6460f499e10c597c37604f5af8b5a6d5bbcead2779a2f1393a79d48234c603ec0ade5f22329a18276fb92bf44fc517625adc786
+GCD = 2
+
+A = -12dc61ff7bd4e228a844619b16077cb4953ac320a2382a197c4fb700b4b684047369fda957bd57c4990aff262d571c67a2fe7ce0335ba97ac33974ed7c127b6cf4f43cf82d146b0de727c39057b70e16eca92b187a4ca9fa24efa24a4ae2ba62af895b7ec64d568851a9db2aed699a52d5615a86c3a62f2eec1637c02420bc37
+B = 397b906ebcfb54a9ad2dfdd9dea11cd22ff9a2a7a7505c2399c5914b081bfb3ec9f87b88bc2b09f549ff76b9a7ab09a751be9182895536144705cea87b882d3ee0a7243c0e89dc10d4f1f7aff2f67b582bf9c90b461c6c51ee8d8da5655650a5e556a0236abb74fa0981cdb98d5895b751bb9c46350805481d80e0b238c7992e
+GCD = 1
+
+A = -d44596051e7555297d94b4648c71967019068334fb036929765191011b5c2fc189428fe9146372ca8879ca6e250381b7fc0c9a821d7d33e2ed03bf4aae967c4bf4cc400188ef0848c79605260be1d96ae2d7c77408e18407f7c7cd00710e7d18eb983d42fd0256e939ecd6d1d737401d64e43ce90058bcdcdc9c7f98675b83fc
+B = -cbe542096fedc3832aa562aaef311914d6c5900f3337942854c4efb1eb12f93a3e3c58b9f26d26dad191ca25ee4c6f7c9c4cd59929887c365c040038eb20ab54cbfa95818901e919c308805f25b2fe59ec7d097f2e593df3fd8631dc1afd5964cfb042f3aa185fc966044533f15d084907efa1e60c5a509b60d7dc2d5c23a81f
+GCD = 1
+
+A = 6df3504b7b87167f703e7fd496bd6d19425736674640aef96c21bb6e2231b9f8b02cf344e4bd6dd5d6b5eb4a6ef267fa7b6529971b56fdac8ba3f7a908ebfddc2fc24990e16d3a5a84d184616b4dd17ab41c4b2c8aaab69386803f955d5b3a316111a0982e27082743d55d03c653057cf3a5b1a6c90e3f7c414d19e789a0ad1e
+B = 806a8bce02c84c7997a6a87b6afbecc5c44e1e9d0f7bad7a45b082f9fb335519ce14e21001042d29f662bc8eda29f67c780c46f1b3b71ed6954a04d3d50e359f34b849358c2ed72059e0fd77746584cb13eefb260c8ad4563e67c990d9086ddaa68a4d3c32cf55a5cf0bf105fad2a22ac29feb9b515fa99caddc9aed2e015fc3
+GCD = 1
+
+A = -f6c4b7cdf00f533ac8237f776749b05ff7de4a59b6caf880eeb649379391c4254fcad5ec15d4215fdf5f0d0fae4135e9d48a2e15a263b3d87b303ec8d661ca09051fd5eea45c0e384da73337cc0d1b08cae551d21148b6de0d6418d0b82dcacea5c5f9271253036ac8fb5803984eef0f7dba388d023f0831d9727cf9ea6c012d
+B = cf0f938f35e54bc46633a9c31a118e66727a69b6990e643e6fe530b99e2ce65aab394f138ae2bfb64843ca38fcaaf1f9043e548a944d3b2e199d4fcc9e375fa9af59b9b4bc188028f3cf2f5dfae7e90716eb8c748c438165279d1825f378f4694f5a29e132248ae0b75af135f9d648f72d20b1df9e64709e87bd279f75c570bd
+GCD = 35
+
+A = 7e08abde3aa9c51a2d331e3215a7c5edfb271ac41d984f75f177f4c5d98d8bc4bc03559df8508042cb771781624e52a04203ae37b350656b6e189c3bf739c2d4969ff09b3bd176f4ce25fc961b8d3ed1a5fb14c24cebdf7fe0872f5ad0150a0faa6099a886c42aff58850fd3895c2155a22db644db77948c44dfe56e374efeb6
+B = -eecceb8c5417e5c6b84cbeec9e3c23b70b976b3a2cee213a9de282cc753d7390547dece964e7c2752655092c731d0e2fc65edf7dcae77c3d9e8d4d207188e60200dab768f0a45b39de5ed3643c3a949440f5260d078454734309879ddf6bb8199ae0dea4b593e3e6a64fc67e40746c69c0742daa46a37fc49515a86fcf9e5d63
+GCD = 1
+
+A = 26f5751b949ce3fffce89bf0fadc40a022f85ef0f7303b4855a4590b3c814ec1d504291e3cef1d055a67700b1f7003b017b6a6499f8f02e45ea3e696feb18ee11dd7c2df4f5bf4f93008d6c49bff57337d208176806f134847e3163ab3cba7e1916019a9b8f6f37fde062dda5cb38f1908d34b0a957086350929c3aee52004c1
+B = ae5975d32b09104da4ada12423d84e8b38db6b79f97968b09741f7127a55bf5652bfb740607a6de1238205a082bc20735c245f390bfeab18011ea8ed60a514fce37de604aae1b8ac08484898f698de70d5388238980a50fa9ceaf4e8d93bd07fd1987861e174d9bd802565b17ce4d717f25a9a0bb37e91d5e316514615f802b7
+GCD = 1
+
+A = bd8a84158928af45ba021a6c7c3239539f8ffeea2d8b33d23c8770301835f9b13e86332baf8176d099fee024d0e59838fd4fe380eb5198351b9886354bb7ae24f4596afee3587cbce2f432226855ed58f6450938956966a9959ada06fdf8472401b367880f9f7b419706de0f1319a442e6a093cccfaceeae9f178986a986b87d
+B = -6c9c70ab6bc3f03b44263a545567391484e1dbdf9280a217ea5fd5f196f7d9b57a4258274ab54cbe3c3fbc92b11d5e558481150de5d53d33f6efb7ec88772b4a52fe50829359099897f8f9473974a792be4eedd07bca38de6336235bfc0441280a5bb63e940313412da6608f8ebfec2e40aeae252d8793899dd936f72c783820
+GCD = 7
+
+A = -1b46093736125630aac970a7b45a5ca13cc154f49ddcfe61f09a2818913829f184baf185a9afa044389e1ee00351c07bb6477a65c5ec5095286dd27a4587391278c421a5ba787db4ce0c506079633c8c441ee125ff2054df7bb7a0f7e23b0b575fa5fc4de303bf7cf2f7dd25186a5daedfc3287503b288cf827dc52875fb1b52
+B = -8f9e65ceb82dfb8f9935ef6b080fe47cf19b3cc4997b46e77c605fe8d63c60961dc13d13ea7f6b6713c4b6e98b253c6df6fbff6577682be88df974e1e33eadb992620aff5ab7af2308bfbdf18a9565624ec6d9fb3b5cbe80754adba3feb8166d1feda6ffa4cf042edca49fe00eb95665ee6e9ea58389d03c4ddb50187528aeec
+GCD = 2
+
+A = 86ba4dc8b626d95aa46d5520ccb51c3a45c95360b8c395614ea09a7200028e9573f66b4faaa0a2ceca8511ee205df8a3f4eca52caf1db785a97ed744de6e002cd4a7d8db3a5b897a72497a1c3794bc49448f3fd5425c8dec658bed51ebe393d0ea35e2d19f8cbf990eaad5e1da896f6d517ebf8f49743d8293626794af7e195f
+B = 812eefc8cb684b3db4aa019ca2f08f5c8d930a2be11fef2096120ccdbd9b08ed043995bf70b7381a943a6b9b70d64d3690b75fcc2f0c8b7e143c4f94b72699820ecd7b429e0687a58c7be01b5e9cce8fa643a681f25eaf49240af277fd2cf4673d4de1b4530578d4b1c60b4e243e99312d235b35c3c063bcf2b3eb43408db8d7
+GCD = 1
+
+A = -6a0b4cad8f284fe26e746b9729326d02c5ae6586e686b362e386a159bfc39c0d694ed5c5ea1a7f879c086cfe51282d5fc16704c092f20ebf2ff5b969b11e2618cbba0c17ae8e6b189bbfa5e10ae11beceef45b998fb36ffa3fb266923daaf5e1c90ffcf9fac309469bae974e66de336269caaf1d7ef857836ababa9784b849a0
+B = cfde7ad3cfc2f051c0eead4a686b068025ddef5625ddad97c9bec5ea40eba38428fa360524c953a3add4e81da55699a6aa802b0c545f33b70b15bc94e2fdfb83db6d2fecd0d3eb7f662e8f76dd9de464a5ca4d3c84c1e2c3c2ffc386c05d8027de77579acfc4b02020c8c5cce7c5161204f5aed6fa77a7bae012dd4d00e8bd78
+GCD = 8
+
+A = -7d532cdbd5d32c1510b4c794b34dba600c55b7c4618fb0f70a4910522b6b3b0764e62900d9bcb92dcdca07b7e64694a3d4dbaceb5f4edd568745f17d8f2113b6dfc631cc50df3bac7a6fa0bde84f27b07c11aff4a23ac7f9b5538343154be92bc129367e6f38b07efea352ef9d19c6538c9ed0bf0617a4164a5e53b57de7127a
+B = 4e8a5eb3c193404fb2c6255c70d652106a05c56ff83151d979dc393f2360b9af49e538db08b5d519e0d16480ec95f112d77a70987b9ce618f688f1ff734959a67de03cc15f0c0d27c4b29e61eaf47730d24e1b093e2f66c9774a6306c3e76f7baa2daf43e95fb53c94e787c464c74d0ecdaf1d0a03dc70f32cca4b274e8d6ace
+GCD = 2
+
+A = -8e2c670baf6c5404785ee3e5a5609c1b75b94bac7948dc0306e52401502549ee563483d732acb356e6fc597df29ff45eb4efb114f3826098f1c405a0e8264771dce5cf63a49db23931b11474bb78cbd4592c7bba846a210260193064363eef5f9c7ea34b9167ba6aba693cbf24b1108accb8e1c0fbe717fbfe1d8cb4e9c09060
+B = 8eadfec28a09c920b35acb8a2f1b7ab25812431878860737c18c96afe11ed5ac55465cbdbed96fdf333f07e0568b7c77aa0de151d31b347314ffda288188a71b7f875716a8989894974f415e37490c591df521d1421cd1e3f32820f23c5eef7d78223066e5d4ef1c8a0ab1900eaa3298c4f194586db0c3153810f5bf81df3cc0
+GCD = 20
+
+A = -e810dbe611b08847676ed4478b6e461946e960655e132da494766a5f4daf1d9456697587bed0a5f515aef91700c725f29d2a3522462ea8b069a8a5a0a379b609e91863f7e4df522fc69cd18e4eaedcf97b834a8c7b42b5a53c6628a1b6772f96f6678991d82393b708aea74fbb9916d7b38eae0399720a3dacbdae31189ad1ba
+B = 520cc7e7e8c04041f5b6928048461c00c8a185dcf2aa97df309dfeefc4a03792e388417162a64995721b4f5bf5c14120c02fbad64e8e247ae2816780cef5677ff86189bb5e6cb40da330991bcfa5ef0484f11bd0ffa1394923b5a57c6dceb2220a0636d15e2a337066ad0002ec0fdd5bda17ff0c4fcbef400b4e098823fff6a1
+GCD = 1
+
+A = 7c185ffd2a9d85e9c1e93d8b587a0fe6f82abc742ef883bc3b9ab6108e998279fa31dee70def428789484f854e4621b4e2e1bfae9853fd8117535042094f252f684a0c01092e6865f5f96cc99c3ea002cfea909da83e37c0182b121ffd3049e6d62b60d6fafb3aded2551b1c92defaa6eabee304de9ab23366713470a0bf9360
+B = -cc8938597fb504a423e967d5c5724dfd2f819b59e9e82efc42809218c7c8e32c7a0db6de1fe3003dc37943598ccf7e4db4fbe8d760633e3a2f307a6e108a9a2d7699be3c074cdfe13054522fa03c89ac862db210ae1a17ef93587ca53cc49956b573c000515b98750c94a590d0aaf2cf1519fad1ec97a61b50686147fe54c7e3
+GCD = 1
+
+A = -8667216fec17c48ddbe51724a122cfbf1b55aba17d8917ac2840929a983aaf157dc45f4872a6f7218a4bad4edbb02e7ea616ef14690364d0157d6ecd894827b3b5bc8365df08e838b0db87c2c92b9edfe628cc8734fff5e0dc425a7c82d63408463f754f97a74822e616cbc70724143b0398c845eb6ac61cf254743fb25b20dd
+B = 8de5e505dbfe6c0cde94adffbfaa29f097b9d8148572be4be8de40f61303bdec687e2f450cf2cd7c6055bd4271e9b1cfc281de8b142bf2019cb121aaba325f38290b7030616894940ad00363e4ce4b3cead13bfde4fe7dc4062e2d679b44dcf67781f091ef10e0c7a4b2bffc33e0ca14e3e698ebdcbc1ce70d5ffbabec0600f0
+GCD = 1
+
+A = 4687222223cc6a0c08f499af5aafd0258ed3c77fae15bdc77571af30227f0a04f1f25376e7b6af961f538c3554646a34c7e3897b88d0e3efc58ec37c75eb95bcb177a5af2a963c267627100f89aa81a8156ac440156fb6015752be253f9ebbe6d6d7e51c570c3554f5222e19079900b7f0f8d64547a53844e266e600d4a3bdaf
+B = c49a39e09f1d31553211738c912aedd37757b6b9d1410ff3cc35a4697c84e23ad568bf22b2bbb8246eba878f92d07a6c2499b4b611b5affc0e18054cf95bd6970f11a686bc20c46bebbfbf55281c804262bc9c4bb481cd861ca5429df21e2fb6f115bf40ff86eaa0cedd1911ea889111550f252fe0e6913a569b099c396215c3
+GCD = 1
+
+A = 9cb9ce6a26854e1fb55cc94737b8c66cd115b688cf69b478c9f3ada8f032f30f4df96f405b8245a72fafee05214954a94461e9a630c38e7117badf1b1689caf1f21bfd5f75e9f1b89fba56ddfb9e44654e8e6343d79b8d1ba58b4dd3bcdafcfd365cd45d943e4e02215ac1a8aad1ff6ecec68db4c0b3f628e82460da5695407f
+B = 148180b8a5c3715380063d6de5d7d2b4923beb1a2d155bb7c03d89a5a3fea32ac2619191c6128eed4afd2d367fbc9f115ccbba19c8ee464fa6282771c66760754ecc8151f3d0685beb5ab553828099304dd5cd07338f3465a2320beb7615ce73ace166bc12891e73bf8194e697f2ec7204707eebd1a28f2d51d35ff6a6fc3e96
+GCD = 1
+
+A = -acbf95c6a8ebc77fac5c1e1c9450ec154f3c7bb5e559ec30f83d7bcd27971e90e90f5d543d2be26bc47e4ccc249c97e76045514a9f20ff2d5270c7a5e828c1c85966ed7528c5ef3cfd04dbb3a02662ed0cf08a08d2ec6c9bd5c45604c7d4c5a04c074081a8bccc11e4c168b209fef07d0e6504963b33a75b003caaab8d5b148e
+B = -6cd29d135ddf5dbc5e57c51e6a7ee09376d88c97fa0a58cba92f3ff7837afd6a6ec16fdff14e94b4b52b3312ffdb2896960246f231c7b6831693c86cb488573188785766d0b390ba310d8af0ff291bb9ebbc5fe3569e2c94106f4c1112905b5292383b6548f47cc18d85ab48d08d7c84eb90d2dbc23c4c61fc8402bd352e3149
+GCD = 3
+
+A = c049c5a822187f0a189c9b679d8fb54e4d504786153f317b89311d8c5f36b64cccc21edaf5a325f5b48bf50f87453ff4362667a0fe66ccdb03eba4285160464cee4ade66d0f7eaef51a0ae7d294ef8119dcee96bba53f4dea1c2fdac6a449b848225a35bf4d14afc330c7457258c2575ee76386579741d9f5c9d5f6e0484e9ae
+B = d7b9ecf7a9ade1fc887c37a5dad452a8c6d5b8174b01649effef9b5266bdce523b03186a772c8f7b24845a4d8b059ac9daa4375bbb78fdc1d7ef331c1563f69e62ec39e8df61398d60bba007fe9360233b2514d79919abc7f5dd471f979608a4fff6fa6542c307371706190cf59626110898c4ca0374021ef4593c6d33e4c5f5
+GCD = 1
+
+A = -7c7c4f12564cf218a6234f5a8235e4e077e378d647e674ad70fbf675d047aca85d76a140ac995b1a42bfc17c457bbcb87524540d27546439b7e1107ae8f74ae1fd28f062bc772e1236221d494fa4fe4b50878537a867bb494434b042c025e38d8925f404491f604d302a84dc5176c435718b0e0253ef063dcdf726dd1a61e208
+B = -27c25efe47335f04b2b9fe713366e8d34b6174df9d1aeecad1c5ed23ecaca287a7315f2404e7278dbcb5f8c9a116602727a198c777742658ae846d43048b60328df7c53e40190ba5125c4e7b896dcddc306033d7b86e89bbe95b86c5dc0576d0f1698edcde4274a34e46df6f54c542e11cbc55fa6fc0156de6eface2989a50a6
+GCD = 2
+
+A = -3a0273166cd9d182a69d4f77bc6c285483de210e864ae6c2e25d252876c65d6be5a809b04e724a7f8ca54438b04c0354c03b9ea0167ecc0ef57d24acd72d5c519d916f41a330238d0ee8c33841434dc5eb4941cde78f23d4c66d514669b8b30d42c1cea637937592a0d521db30a7f06d5f9bde1879783477e54349bd4fe8b18b
+B = aac206227045c5d9b12693d052167d65482a95605e22f5b37090ff44471f371595d1a57a937b9fc0d9690355ce790b242bed302d24687428a8da9983175e7e12c2e80f2a4abc893e1532497b366a1e1b277bb1955b4daf642c7da6b77cc729f4fbc2b7955a1d2c0a67d87d82650ac8a10c66d3b7afe4da29aadd3de65de795c8
+GCD = 1
+
+A = dcc0cfcb6aa6d5ef15db367eab2f12e45fb38d9c50ae04f8f591eafe9cd8065a896e3dedeb44c47e1819fc0d216faac828b82ce6815edc87672a29590967f0568bb6016e2b42f8cbcae70551449483efe1e7a8df85db38fc623c1c899a8cc65ff97a0f61ef77e4874ea9132b9762ba8736d0efbe9675e188b63e1007ea64bfb9
+B = 47c814a176bfb8f021e42bda6c9e33a5ecb22275a43b62c90fd8933aa7c64545c92b4627ebd872175c99f951aefb931ac9668aedd17c5a0518590f5bf33b47d3f487fe3ec36dbb6c8f93ab5b0167507c4f0e3c9d1459321e4878063cfd9e4249ccda14cf934d8ed365a739b99921aad7250de194d6fa4698f156a01b50bebbee
+GCD = 1
+
+A = 482f0747a26b07856fcd53041830a5561c66d45dc18ed9c8205c17b1ffb3f1a912f696a16a0fe092d5eb6bde593eaecb2f0e26aa5f2eac21f0eacb14b234834f30fb1e1e59ab12ff6a9b861569222e762d71627b480b75099d021d5e4566a45beac5474903f16bddf0e93aab609e258eab50f2343b79c56e44bdfd1c29ed076b
+B = 4f359f7e9dee0c0a1cf3f48090c6ef316f6a15829f1b616f8215fd04413289587f00029b8e9a58aa24e35054991b9c590c389f23764bf21fbc9a3460cae192d5ee2d2de88a5d0e0e042533bdbd9d6175bacfe3a063c211c59950c48838b9987bb0c35fd3423d644894a374a9dad0e88167538ee302a535820204661d999d55a
+GCD = 1
+
+A = e7998965f59c94163280cd7d68a80eb9a312927e2fd0a58797f396d0f599e4a7086dd001cfad91f0e99fd8289f0e4684d40df0409f00b046dd2016171feffd550eaeb8f6fedbc164a71a5c9babe3e90288352ddab170aa1b03c178cacd205a39e43bce98c53a838c29f98baa93265dea9b1e15e5496f037359826ecb550187a4
+B = b280b894436213be27d51fb5f4c4fd5c3158592653dd62c048203b7c3a5b84d566f56b0a0ab8a69d9e25471edb460a571aa34a8f1b88065448ea15b454acdc8d2f59590f7d3202bfc536d72eb2b2e645e0f22000cf8d8ed246c64a67dbeb836aee2fc8130ed70cde94e95e0e5ce19e07672552d3c0265046b2d673c1219a7840
+GCD = 4
+
+A = -741bd1cc129352202b699f301de9699fffe1b2ed1a9a0143414cf822e99d091a880f4c6e67b81cf953fb09c7d04dfa5318aa602769bd01059cb0eb12de36a5e9d982954014c7e032ad0a187c4c6cd7245e75eccbfd247429cac40b8ec0a0fc7d0cc40877eb03726f895170173ad18c6a839997b9f1243fd49ef71071d382fab5
+B = a0e4ba17a442e28aace9cdf6c46b10e0d3aa025acb68fdd27e2630283795a07908ccc941a09feac2379c7c4f994d4ee0a8fc7624783279b7d8c1173c048bfb6b00f51d89a59f907286d6f310814c6ee0e1e9d1e0850ff1e80c0e65e1b4314ceec71f7029681317bab664626c7c1e1b65dd9cfdb6223ba0ae822d9e75b25d5229
+GCD = 3
+
+A = -cf991a54c2463042d45433217710faddfdd64dfe7a7e2e2fd4d2eaebf86937747a0ac3c524ba9cc1e1f1a6aa44e3134664e26fc1bdb9023f9dc2501de87eb238052a77cb60341a711d3f2dd4febad04f1c0c983e936765e7ea17bc43b20fdf28db5212935dd696103acf3521999028d55f92da5babf6788fedb15ec5f0257543
+B = 3f487c6207bc5f8eb8ffaed70bdf6750afd31ffd02c8eb04e4a69f32e8e5395b826a626057ad65eeb648e4967c5d3e94039877dd5862168295ec2f4269ee33849bf76c7788377050841e1dac646abf960a8a159fa3153566180f2ffcb30990dc4dd660098573a55a18445f7fb63e995b766d227c241cc3a00cb2a0e82c1778ee
+GCD = 1
+
+A = -51ae4101818f249a3418700e19f005fe2f69a9a407382a808462aa37b2d8b9728b7debcf7a6438b68e88de78e36ded56f96317631bf097ed3b52a290ee1af994968d26b478c3d8ee6c115b8f082c514b9734ee3db6d499229aab22bdb66c40322387d0c8b73836a6c700ac9054cab2256953e20326c000055cde801a077e5d8d
+B = -66537e2cb5ab09d0cd5088ba58dbb4c8b8ddd5eddcf68ca5fd35fa57e94d7d1d8d9aeb6ffa128a807358e6a47fb8cef6a89a16edbd56a73355520b7331fecc1823143f385734314e0ab1f5630fa68c2282904db0e243d67df15be3de7b6a18971a1ca4d0c82606c92fe72de29f0fccdccb11fe992df142e9a0b6fdc66875cb78
+GCD = 1
+
+A = -a0e65ac5abbb8946e60c5718e51d5ae27df597411610fb63f2778a5ee4b913a24c48af79f80c4ba343c7b0eb529d0f44f0f660ed94dcd47772dcf53770a132daa4bc1350217629433b223aceab21bba211aed40474e6fc153529323b4af43b4775edac222f356077cc14fe6d8d23dc1b7dc4f89a27c67815851df11b9519b226
+B = 547679d5c75573568a9c799fa97370cb5421cc0371924267ef00603a452582b5dd88a79db6ee2a2aff8e1c1e320bd9d3f75164845b15ceaafd638203583b6d57cbe1d5fa1d992db1c8045926dc229bd2dee5dc1a4ce5584d23ac703c51248c13aaff9c7a27a82f3b86b7c83248157963264b8ad99af86db79ac762ad9c1eeda4
+GCD = 2
+
+A = 4ff8f96feaf2bdc5a311b7c604c3867776aadfa7391e14a5ee54854d08ab82bb630c2e77e80575a93fb56e4a37c62d0decd620173e2ab264f08a4ed6ddc7366fe9725ba2c245c5ba46eb7a4e04486fe478fb6c14c4d748e8aba7f4df3c3929ff27697c2307a3b5b4801ea36535f2ceaa5f6010da4e6854b8910c36b718d383ae
+B = -d1dbfcdf85713c749665987b31a62c9d29a7ecf6bf367b5952b4fd8b1361580dc487b37290d2eb4713c4cd8388048108ebe31a09ab7a08217d12670018f4d02fa3a79f0717d75990c8a03761751391184ad6f18e5c8e2598b722dc7815aa175cc06738c692eb5652cb839cc07f7e34b7a18110803b0d44bac30c9b0feddf67f8
+GCD = 6
+
+A = bcf9ce96c159d304b6b61c873d3b30821571b397f1eff085ec87f224eaf646fa6403db6b422ab6406acef4c3a03a363c69a03cdc2a4d1e549863e8477f8c915c4c93db5fcbae31ce4dfb4f667359d857d73fe8b8d8ecbf5021ce4a762a8cff371e8f172c74d9442c96b203df676ceaadb237643bfd3bb4f18a9eebf8dc37e0d5
+B = -cf0776bccac418b27d95d65121480673de732e76d8ed19127d976e80beb50426123ecd20102b4c3a9757a4fc104a34a620af5a35cd41cc0b77877b4645a5c6856059a98f2d8a771f28ea18650b4e8c96c441822ef9253e039d329f863240ca6605cc153f573761bde7ca782ac7980344c1b15ff6868e94cd64bd8453a8594b3e
+GCD = 1
+
+A = -ebd18c5a63b0b674299c42de80b6f217c9b84ac9425390ac0c146e1256d2609f5372fad2b128cca554942629f74dd179e5a90c84a884f6e609402e5b26b508986a6dae1701844108023cfaf09325fb3d8aea8e7f93c1bd8c7efbe7fc91e7d86d8eac30a97f404b68e3aa471cf0e0882d7837472b22d14258469c6c286481c548
+B = e1cbd621398f15d83c54175fd8d824775c8457e3aff649ab3b59d8a4a715a588a1abca24d76cd91ce5438f2316970edc50f5170a17a178373179177dc90598bc7c6271791fadf2e23af3f889dc875c5f3933729fbee1f84a2dac36ad6084299d2c66d339837e1c2dbf289e073085c827b178fcc97960533000f2104951435777
+GCD = 3
+
+A = -1a451d226934d260b82b691856f6ab490422a27f0fc619506668293f0f99d48601ce6e258ee6825ef2e343d1e1fd1ae3f0f661d2d40bf3c25a382d2f82a5c9af147af05467e2e4bbf6fdc67df5cba086df21945f3dd0b9701a68a456e1954f9499100bcc263a754b415655ec6f47b4de6aaf20af51a13858b02cdfda9d47bfef
+B = a251cc8d0d1eb7ff7e2eff9ac36e01ec3d8faf1c8a8004196bb79887edbf14894e9ce019269e04652ad95c454445bee283a4b609787c2ca307ca5c4c1ac37366226f90009991b3ceb08f0a5cdd1002e33e357dac1cff7b1bff1446ac3f9f75d7258d76b25776062ddbf5df44dfba55a257c6a934c6d9e095c08870296d559d6e
+GCD = 3
+
+A = d593ab06d4321d8fd431c7efee0abecf19955ea34d58675ae54944e1b256762abf06156ddbc24e147fa48dc8f31fc44472594d825bc504415527a6ab9e8350d06d51f08478c74de836d44a361f7e0908e4ff36e718b85fba119db126e8dcb7623270bdb91d81513ac6fc178d1af3535af7dc8a3306319c0548d6093242352568
+B = 4ccb72f21749ea14e64d692853752df499a1edc280eb24be9b0b17871a26c19f0dee7135a048a4c843b70543dcd6cd9a5317928bf27fc741e2e3b2a0465170082d03e08dab3954b711278b68ec73db89d99a2be3d764f3661f645e2557d5cfe0d825cd81ee70c9047d1aa22a3cc054bd7c03fab22a5b990f563db2a8d4782cb9
+GCD = 1
+
+A = -ec6e35796b5e8dbe52ef9ab9b728766e21de21835062167fef2b9cb3cfe0b4a5d103631790549e0e7846a7e3421ffd9146fd1a9c84a68954a194cbc5d730016e8d8df95d7e35c2406c6f1cd2b00328e08bb0f853565ecc6bd262cf95a706a526a2120ebca2bf9a8ff2dd8e25fc290ae2f5294574e2c8647b55114b0800a1b16a
+B = -db4072e1d4bbc7a46b951e549b1e468cd6cfc4205378ee12db794ad6bfe021dc33bfd665940bd52438964ab986f641c5983e74e23768094355590edccce2c1d90987dedaedf8a9a3840f7004e804971d2607daa97974b03df376acf685af258569de2bf29a517ac0aa9085da74855a0076ad31cde94adc45e6dd794d60193a06
+GCD = 2
+
+A = f111f0846dc412346698a07450f2583b73a192b8db4f4d5e63f7d7423d21d5641919f87a5372b60fac786ecc007f5cb407c03e73cbbbe999cab22659ee320862044fb2f33d52d3e7424c12515a87094d1fe26061a0b070de63d55436169646cb0a5742728b161b127ab629cad0d4d74ba66b051e5d9fc3790380d74d582ddd7c
+B = -ea1b527f48dfa797dfa650e7c6ffd255f96c37967d9b8327a8c556401aae49103b4d202ab0de26bdcbe638ae0528707f6772ab0c71d34cbf60de735d6fa4b4736bc93edab15055031cfe56a31a5fc8dddbfdd7829b1399c295934269b018ad4f6e2195da8c2da66d964ae376e0683671776058ef88584baf483e63519b2ee299
+GCD = 1
+
+A = 7076c80ed4000cd1cb5c3d9b89d1e09b57eab0c701d9b1b754cab6faaac932d745ef0e16f1fe26440e34e826ed8f1b8d181a2598104dea50aede6a7e56c666c0eb9c905c05bb159a97b9339fa4bd888449db2e9fc0e1f82f3f90d36917f5e05e24bc4ecea072e9aac7805e9c7e637a8712e3704e9f64e9ff3bb90bd43a84922f
+B = cb9c40f46ab68fbf0d638b0dc394dcb28a51942b88b07b02c282d4ace3d379c49610c0e62f1c8f6a472370955e868d853ca14d1b5ea68fe5cc2fb54708a97e2aa60917fa1925f289bd723da5f9d5e4a7db6bb3ec01ace76d62786fe9476b07fa7408ce54e682fe638ed0d075361178f55280c20776c5f4628c6340b53805a567
+GCD = 1
+
+A = -408a0d198daa8008a0050af3ea2f00c44206537d86469f8dacf7af6f9a29870f7ccdcae54816858bb999c66717e592b1fa46dee9d981006a93e0f320bb6d5acc5436c32ea92777ebf2379ae0e7064043134f3cbccaa49fdad9cb5a8ab72608cfa8fd08c6d9528d12f0de14beadd4280471f1f40f2ac1409a274c0462b03526ac
+B = -b8a358b213b43650105b9eceaeb821b2f984c595d2085c44289fa911ce0bd36820a6b9b4eb4f834227873afadbc2d21bbded12f9f9d686436ba4f787dcbff32d556f40cfdc6715307e1680de5a8cec62ead4673e3b37128708f396e9671947c7f80b0b2129e0128dd99507b6aed0a160184b6d6fd5726c338f5e9d56c70cb781
+GCD = 1
+
+A = -a464435f68a42cb7379060de55bf9a1902f52f3c1a4e918fd8f6b07f255ab9329a58ee56cebd4e793873fb1146973cd0d9f859edc03ebf3a904f46f4b5f4255fdfc81c2b0a80a8e54389c18ca1894ccc16793e93ba98945588c4e50e1a4e0bc790c3ebc1b72f43f2b7197b1c5a407a591acc8fb9c7b71f0399a97d16f88bf51a
+B = 4ed0e3711eab5212783a75db0bfbbf36e1010ef9eae5d923ee6ac5fe65c2022f5d3a5932ab545b4fadf8355a0b351fe2c0525d139cdb9bf7df21461d81615acae275c49d4cc5d6f7488b318a051bffd9701852e068010571f553fd0a16d806f3f3648d85de664c88dea6fbff924857808d62d5a1d3511a82f0e8cb2f0304ba0d
+GCD = 1
+
+A = 6da1881883193493c684e78ab50c8db22bbd20bf526c9076ba6d5daf0a5116a275060698236af798d93a700c01739477ce21c719686514402bc6ce4b6a7a28f0d785a059acb0c08d5d149e78f35bafd718351357f0546f034ca728456b21ecf914e6cd14d27ac8be6db0b1f75a11b018be08aa5005f51e8096f821acc2b6fc10
+B = -5763ff3c2d8d2e39bfa6a952130248076a475320b8c7716827f725f4208db3f21c76b86a5622338223eeca3452910775bda483fef9e5beea46c3e78eca68fa177695bd0cd69f73c804d8ed91553b67083b6aa7b5f7da818b759e8b855ea3b83a2b7a2bf568fec6f017292aeabb1ae0a0b84807a9f692a8689237b0e0cf1fceea
+GCD = 2
+
+A = -db1d35d213eea304a4d800ea6df6f4a8311849966a0562256d116ede3d01fbc6fcbd2961770d8a40a3435b63ddf832c0ff7c7ea3c44b2c2e0e08fa7e3a38c7075a1eb9f97e23f13422f7ced5bc1d13d8fce5048643be6752db6fc165b6da03a018567fecbcb9eb4e357e7afcfa33251ec20e7858d47028255a85775ac4919609
+B = 43d8372dd5babe95c96c7c4abc33c0e0e264e8b70d6adcfd3c8050f2133ea7e94854b55cd0b2e3351880f5f01987a530d1d3ca4d7dd2aff38b96be31417cc6197d0f83a3f585093533b54069ed1116216d7acb41a24ece014093fb5c11b97b23bd631395e344b8887362c2d44ae37940b1d6916fe0ec52c9c9914e5f87aef9c2
+GCD = f
+
+A = dcfe5680e6ab4f7e4b60ed760ed07e762776074a33376cf7040227e9153383319ac415cd64392752f8b9a70a83d8a13014b212a0278258da12a2da9a03dad414fd1f225020c2d9e9aceead6bbaddf3c1d7adec9e9243ab3d550e78e769ca5373bf87e856092420225e0b9cb16a56e12357f1eb6a2a8a5b911236ebc8f30004b5
+B = -5255ba927d7b3dc7e5d26c654f20b897cb1d490f1f598de5c6cc09f69a8ef010590f844f5b7c54c658ae15ff5e68fdf19498848a5f17f075fe54a6ae58780eba1a248f95bceecd05724a74fa0e92d7112004796c362a84ccc86c300603a4afef44c6248986e986e3cdb8d9822471b0295b1e82951999eb69ee8734661987c620
+GCD = 1
+
+A = -ca7876ae7adfa3af16850aae906c2f8536864a4714d423bcbe27d924a41ec3d39791ed7747ac1fe4f289c02495510285a7e6dcd5eca6b44306e106431a777a498951b442260fc2bd68d092ab56b4f26ef8e58bc0f48c09ae0bcab0282886523f13f2a970089508daaced83587fd39b5eef165cd1bd0ba0ff9a6928734e42675a
+B = -3eacc2a2aecfd0c40648b9acf015ad8d8a75f700e8c40dab172f4395e91c8df4c7465b7371bf9d42c0850488f336134265b736149d4fd5088eb19e4f2f87c7b386bb8aaf0a1ab204d7afe03d2cb4ca34d6f0f6f88d911c11f403bcaaf9630da75b270c155bc65234dde727eb71e7e58601e643f4eb1d5a8c2f817e0f60f7b70d
+GCD = 1
+
+A = f92e1d5690812eb4a2a107a4a395b35681b7a8a183ae0aef2bf57c8da663def73935631700d5c4d13e0bf399747c0dbd1a639b42a0c76aa834cf8c9d8853d6c525296e0c9cce5903c98aefd725143e77d66528dafa10efc2970de0d06af959c9c70863c758932580b6aa2a01bb9c3cb28ff1916d686aa6f582c2a1337590e0bb
+B = -58ac2a12249be9e0b9a26741b1e830ded8f1a2375b45f88c1549ae55b9dfd7141ce5476e47a71ec6a1c4ea19d26e29f7dcc60c368729a7497e977c5992cf5dd783a754abcb5507b0b74703c07330866410b5807ec0f7f0b8003353ea01fd8e162b81b9eaa66217a90105a4ad80db46d3a6463ce1c344babbcd881f4d9e5a0b9b
+GCD = 1
+
+A = 92b89a12f6e7f06a2579a95097992e2a21d089796a7c331cc8b8b559ed8afb6b1de33d380c48ba7c8a4a641a5d2ef69d9bcd8bc710496e9e844e079978f93fe9e0f762199775ebd2d9d555b77fdfbb2f4d02717fc4859a15b6eb9089bee47f3748a3f98a0ec1723b4cd6ba972dd880db71080db11eb2b7aa677b22ad38da0f4c
+B = -27839c73bc4d4dfbcde48591297cbd8096cdf3cccb72e51b1df5a835af1f2331a323b47444269dff2107bf6370e80811f1db92ca52e9dbf7d41512563c384783bbb0efad2d56c25d3ba56f351ca8bbcd6db5a82d02b0b71dae250009dd774ced8975bd09789ec5229c5016229fc28cbd06dfbfbef81e020e1cde05f7f1e8a0e7
+GCD = 1
+
+A = 34caec1ca4f9e9cac45b2a1b4130968f20a43109db79e5ac72848ce8f6d01aa25c9f350d1c88294c6c2e6f58ea3755f98ab04a4b438709d17e76ad081d15e1335a6e7c63e7bdf52b46919bf86be1eef654f43ed4c857f454ff9641f90a982700cc4710016bd7e666aedfe9bb81b325feca07782a822f13d3e996060fda1c8619
+B = 6221d8eae89e62172409ff48b3a726109b6e0622cc206aa1f5421b3026c671898aa759c973d2cbbd50fe9ed0b06ac736501aee9de45e2dcd49f8491168894e08d87dabddd5a9977c52902d88d94e2c9106f0a8b1d18fdecd7caa60fcdaa20565ed041b4e688612b4e6bb0ee8ec9ced1b28610dbc81ad37ff6b2f492eb482cdcf
+GCD = 1
+
+A = -ff502eaef742f6cbc13795cb995f91d6596a8fd63eb90a273e78fae0e1d1a46947b8c38dbe87f9eae250bf502bdf3faf06fe8fddfe3e7f1cf230f6b7aa060e8fa2499646d13443a483205afc220767444c5eb40c2b2ef7bf3b17a16eb8253baaf287f118333795dbb23621fb6172df8df2c159169f5e0120c45f46f3d208d8f9
+B = -3ba904be06a57286f6bc4203f9b57f2d76b41e08594841ee17593282f68e3cd8dd2a4740d8fd43afd57653b0381efc36289831cc39ed2620ff316183dd6b13f50347d9cd00339e4e5ea87cb0e445c8cfa8b7924c08bfe0a53875656eb286415cff34c4f213d19ed21cab175e2bcd008343d92f71416703f6946a4ab70cf0ac1d
+GCD = 5
+
+A = 2e9a15576d2705cd48b66f82cf461814348911cab78e5b5e736ce803c58e546f5c2cdee8423c847e712af7f42ae33da4218decbc343b50d7188e91846044f27dd6c09720d0d5243aa52dfe5346a1882aeb68a13f5ab5ad253bfe82ce65b20c1060fb3aff56adfffda839a16772584513237309f583c3b4e279bd31641ca36fed
+B = 42f9ae1c4e870faba371d82704d99b2960573e40bc782044a93e6ef10c8855afeb69c89e43b41172571941b4355ab63f8979505b3ddad2385afa1c920a47dcacd2e974ec230f53b3304921546b350145d7069fac8368f22f98edcc7dc4ba7a9ef618024292e497d58b4421f5795c4e4dced0d963e2a9dbac10c2a9b9cf0c2635
+GCD = 1
+
+A = -abfacb184c39fca4044f0fdae54c4bbcb1d82355e86d13e3ec234a756ed118bf3684c1d33d694e390044429b2d7bc2245bbeb33fedbe48a4e9e0eac364f0a80cd021c774c6ae1d1d1906072c9bb8ec179b7122d1c0b00f6d367d57f45ccf5a722e6598b858dabb859dae632225e6021fa80221523e7d482cc1b467e9536b830e
+B = -7beae7c1941a50dcaca65c1068366e9b91f78eaa0dee8eea08b2c8d74be37fb984d17c39fc388e949f22520c612db684a8cf2b7c1e6b4068bb76a37ce5bcaf8052346b98bb59d29e017633d5fd27262420682c07892481cb62fc4571f0aac9eeabb755ee06d16e579bbb01593f00b4cfcd50b9d738d648fdc93114d917c8ac79
+GCD = 1
+
+A = -bde7be1b0969998361ee9b9f6161e2a2408f9e016484c0781e149998eb168312494afa41dafbfedf035a57dac5bc7402fe111b5dc8fcbe6dd10bf08e254f2652250e3fc7ea1046dd61771d47dbf34e451ba637c57d3f5a991cb0ea840da745d6e30a8aa35521447b44424d89e722e0a60a25820dc56169028122577a3eb23233
+B = dde0f8672eecf6cb5885fd54495432ac26ef19d68df3325d59338367135d1efa4790813f5b03e8ba4f87817675af55afb441705a339aab7262564292edca1de76c949828d533fe89af97fe265236752fe6a2941fe27c6cd695f9145d9d435054264c82796a6d236ffe8f388b4d1abe43b5534e726deeb0552d9d25ff60af9869
+GCD = 1
+
+A = -1cd50237000d29ea623c51302896ddc1c63c9d57c5bea95f2821b553ec9b928b052fcefdbd609823ac265aa6a477452016f01cd4093851a07f97b0f003a5bea56dfe99eff04801edf7529945a6650cbc4a3399c9675a36ba3ff41e958359cc8ef1de225bddefc2d5c0548556161d12018e59808d27267dd0b847c05b63a1669a
+B = -d40e4142e1f5969ea4f839e1808f9684a2486d352bd2b44505d3b19961dd0614f6c1f79022cdf75fbc356136d9d46e618cb8e8b814c2be55415e162862fa43ee102e3dcf78be3f58bb6196454a985b7dc7b7c80714695063b3b00655f891343b7517285bb9dafd950c4287e51aed8a61eef82d54a0ca0a0203239c5f6b5b147d
+GCD = 1
+
+A = -6ce0035cc0a2f898e3aaa5dbc03e5798b73dfcd749378f6503095c8df11c8274053ebb3fe0fbd38f9e3d144520dcb4a2c41b001283471a93aa062e52fc6ccaca649b3af3c0bbaeb44542868f6c31e4341fdf29d106439501891ad0e009fe030d2ee1772a89921cb6890130df6cced53bd394bc1fbac767a9e4a42da929934536
+B = -61870b057b88db401b1d34d4724d0624cef0469aae5ec319f29afb4f3bed8ee2d4b8da9bbba1ad8338594d77408de991ddec50dff443a0593b68d541de6b74950e90ba133d6bd59587f3ceef7e73f72298c177d0ef297b2895b2ccb4bf98781ea6d70df2344c3a95e3c48976b1905dca7b68fe9f653d64be9ddfc6c4a01c55df
+GCD = 17
+
+A = 779f020a5e14b5ff9ebae45799c1b2c6ffde59db1396fb1ad90516a9b7e50b5f98b32f379e47f781d5f8c7a21bf07aa8c6294bd2470f84565ec1dab52740ee009bc20b71bb82c453d628bf9573fbc227d216858a7edbd563181b57c6bbfb575463c6d0199db6e69ba8f36b4455b235be1169e0e81f93c089c81cbb8f74bc9651
+B = -932ed2504702008fcb8e50ae53722439d21e0f14662299a33c72a1b659c76d35514f0c41f265d0f599c61dd15819c97185903277c6b1bc6df8f25b80e56172a5b0b4d03aefbd56748b6536b901cbd4d5ece174791eb2f4656635362db45137103e4e7366d8c5889952968e612e1864ecbf4e5b7beeff2c330f6e33963b468614
+GCD = 1
+
+A = a296053f44bbcb543a97f9a333018dbcebf6148738a0f36bc0ffd9e5b2d68b14ac0cf9e1d9e7ccd19de9217c567be1bf17cf4ee6c6af349b5f0307edefc2051a671306b65e6ee3db624e7c86472752790236c3aabe9f060b41883855943596cfbbb42a1bdf13b9d36d017b42439e24fefe1862bf98e434d65855c9f016833cb7
+B = -955f3923c2f49d4a11a841cfc996453981a8bbaa157e482e5d61345a67e594e71ee2cb899c9f734eb36110789c5c65814d2fa1077aa36c4351b2a873a131aabe65a00b8973408000652bb764591630c7c00e1e72eed85e465d1ed40e8fe8612913a8665523e07e80ca42d70f7a459dec9f60ff3af67261c7e4f2222c8eb1d48e
+GCD = 1
+
+A = -9d54a3e12f3accb2a45fcec3f6b460a074fff1cc770be78aebfb1d694612622f4ce37ef921439b088a2d7350ba0319c9e8a59db1b5cf040d9c09a315c15eed7d76f0677dc055d4946902e28a369f39f8044aaa0d4b41eebd8baf27187a09b6b8ed10e065d24544db6b3d582e1c98d85f96132b0a498abdd6b13ef36e06b80509
+B = a8496c6007f910ffb98c3a0ce1e3cc424cdb06fc4b8bb65c78e62a0f75f24dbd7668e0c20ae4f3dbceae0edae3b11b09506b24550571e9369bc7a5977ca7d6c77a953136e62fb41ba79b328ca095d7c57d6e56a392bab6162c2fdafd168766332fc04c0111d919974a54bdfd49d16e2724a7cd72a6400e40e074c5154ff2e3da
+GCD = 1
+
+A = -a94636ce5d9a5c1c0bd6c37644616f8fb1a013628aefc96e25c639829c69feac88af74e97b7cb28c56e34ceb642c009b2318b8c31feed8b769e882f519ed19ad7403d82481a8eb0a889081800f4059753977efc77063ce879fd229b0782f71c760b91838591da728ce2dafbe0c00a0b365680604e293f86da837c9c8f05047b0
+B = 503216defde871a1789b7c7a09e49ce0fdcc490df96f9ba84271cae34d6f8df83fea328199dbf4e829ad12cadb98bb45e17be6e20cc1c30e060c663259b4338479e4af65b7b7a9353e82fbf7f3662e7b332885cd363062c0fcd4d20788cda471a56c157d04cd1aaf1681be1b458ca65ede55aa2123b8c7e4e108fa7196601a79
+GCD = 5
+
+A = f37e35f0cfd11b54a3f661810012975075bd681b7d62aca0868e35f21ffb336512b0c4e99a6d559a7babd81f3b44bb98f6cbefc2e20a1815613f2aebdf5bf309632547afa3ae5e8d3186f4045d29ec11fca23a0b14a850b31ad161c7a2f8989a83a479217c00b4312abafdeba4de1aa77232b87f3ebb6304c0464a2a50461bef
+B = f957d20d84192c92eedd6ea792e2cf53a4935d1c09a85732f409f8dc6f8083ee6fdad0abef4d9c652a88de8550df2fade5fd95ef8bb33cb58018dfe0435cbc6d0c9b29f3e08d2a1d58db44ea82674aa3a05d7590c6e4fa20932dcb3a1881d1b568df8e5f705e8b314969f626f7f66d621aadbd5e552fc8bd0b815b7b9c3992e3
+GCD = 1
+
+A = -df57a231085a42bc4190aa29a6b061568703861905ee3f979cead10169db6e27e312721e621e252db304329d318cf5f72498ae3e91f0d5268f2032ae80b1aa358edc919cc19a1a688cbd6ee3ec448b18592a83affe1e4d84e0c680104a4c7b9edfbefca9683e58080deec7f8d71b122c4a13198fd99f3a3ae4249a8e427e68db
+B = -e6830d14dec15cb2ea54deb63c6082dfa1647070e9d24a84e8f492ce23de5e1cda94f15854f0221c802ab2e4b540ef6117bf4ec6da6f668546409ee48a7176a523e848a1413a258d339d101cedd5e50abdfdf025f58769144fca8bd8d8e33e61c803a18da1446d1ec07b9b8d4b1a683791e64e2a85f5a4b174a09e62d34bbe3c
+GCD = 1
+
+A = -8c7d5b7b967ab1422971ffbeb22521137a5522d747c592979487af046bcc8c09a282161806efd4da6dfabd484af68a7f0f1e40afa894cdf2f53b25281d01a49a7efb2fb57ad5df9db4a01a3b24f684cb50388f57af885ebbfbb95d5a4d9871c8b39526f3344773a711e772c91aa55d7130ccb10ac4d9a98665cbeba27d6c6e28
+B = 6cacc8362af07bc36dd7f435f0ca65d53720df1e52b8eddf9c084d212f9a2e34818bd35babfb7043e7ba3c3a9f7bf49ce13c9d25cc40d58c806cb7340b3434e4e3f6b518707382bc8f471e8e45a23b47e4aef8273070bcfc380fe4ba9c259705598ec6de7b880e72be01eed3a9139e6bbf568faaf8b288157df55cb08bf409a8
+GCD = 8
+
+A = -4b33b563d997abfbcc574a1b98934a5428d3d2daa232fd588aa84ec9e0f6d29b97f562113422ca004f0e56e0f1879102a94dc5ef816e418dd83bd264dba3e2c2abec323a110924db970e067e0b73bce71d63e1f2110840d10a2ae7b986916fd24b028d7a8321679d4f0e66eb8c783e7dd66a9c13e187ec7bab5305fb894e527c
+B = -21591df1a5406e09297e3027b2c332d7046a30470b08f7e8074f513c07bd16f721842ec872e0a384efa247acb6e067a673a148944549a6b01a67fdc705b987aaf760987130438c7ea73df67fd0460e3ffbed0ba23e3474a9b50a2dcb3008bdc357860ece07bce361a36a7ad26cc844ecec3e0369f9e8e35ee0363497886a33a4
+GCD = 4
+
+A = e76ad50bbfd97378d3f66ad97df9aa8a7ae3614e3c4f3c6272a9de8fcd5baea049642b21bb59e4b497c723b109f6d3dc3fabf55cd38812afb7b7d9e4a1d4778fbc223d9802e6ac624ef6fc5f3e62ce8159b7c37f34374a3a0598ab6a0d64888bf1caf32ca244f16361d40510ec4418b5e69e4efdba9965c12cf478637952705b
+B = -adc2994d3f0ce5d9206bc818702c9cdde9853293d1fbaceb6b5a24272ea900fffa4053a1052d68979d2b20c29fbcf944e9f5be4ff2f51ecd2fe5a96728107096c6914d5f45cf16bcf7044c39cc3c458eb311ed07f94eb8f99efdf1630e0608f78724488b101d39bc4be8f2876b3f9e09390167aedc037f0ce2ce785dba875d57
+GCD = 1
+
+A = -a26d58676dfcba352caa8b7faa5aaec7f1785f0fbc1daf679d2aa6e9211a82745291c1690dada45dba1c69678218d4faa1498222548217c58c74d2db40e661dfd406d38406801e1606323abadaa8d13068595dfa578ad57475cd8b3651d43bcf4bcefc689b52dc7b0e435f4a79db12110948ec98ab112c2d6130a8864477ec8
+B = -ef7c6720aadb401d5ed469c27686663a7d1cc6260db0cb32bc98c567b3bcfff2d34e40c350aae332ff4713f80c0dddf6b2e7c099d40bdf5a8219936e048b3e2ff8965678c5ef7b9678a5ba1bdeb85125d05559ed9bcb712e8395563f29557d024972972fe183567dd01857b463639bf3adc69df512955be05c17bd7da23c4b6f
+GCD = 1
+
+A = df032624bb6ab7476fd8929208f0a3356f459bddabef866b1c37da5c640e236ce34db54f9a5678039cc663dc3674cd2221e2c1083bea754a51faa1f5fd7c9a128e1062bd393f13252c85ae5441b8d89fc1bbfef9a7cbffdc90449df52d6a717c290916b7c143f3f51cb19e68752f0822550e294d161ef60024673b944dd9ae47
+B = -f0882ea223c94de0f7429f7fa58efc81dda38e02eeedf8b6e83ecbc188e6f16a4900c9f5e58e0024ac8a0f5d342cce5f7bccd9e6e92428a0501a6b35fcbac51141b5bf23ccbca35a962f031dcd3c2dfe45198eb6afa41f1ef7db9b5c51062ff1f3fc85bae1b9e4864144220f31327944ef5f9e4921d6cddc9db4d10b9d60cc0d
+GCD = 1
+
+A = 21c379cd46c1653eea675f05b7de1936ea8c6059f379ba432075447f4193418e6695696c39a402d495ae5ff0ef206f6f8728b5dd15c4bcc99cb8df2f05bf1e3269ab54bf559f893d7de0092fbe49af03b7e2838c9d9893ffbe6200d7e7d4ed9b5ba2ca4e9d74397c7f742a019fb2e3c8111f5566552732f9abcf3a080301b08e
+B = -a91705a139ce7019af10fce8e8ddb9bcd3f956ce345cd5d9f5a0c75a164290dfa9e72165d12ef52cc3aadc091eafd873accba9b578a5e4444df0fc704f728beffea0d0da4751d75fe689404d10683baa05438ac2bcb58c2ad9678de6ddfa076a2f235ec0bba35add40999620f668f714f3a198f6d97a920b1e2e37d3b96cffc6
+GCD = 2
+
+A = b268ecd0e391a74a5fd3f1b6cd6d2a6c0fa0a8528d2dfb8688e820e0c86314a4f1b69f6fa618db115574a75e3673f1bf7077fa21e34a7f4f5bb08a485aea73ca984d300a941108d1b637e3486778f63a7d88f8873b2a7471c64e9494349c7ca33c74fe6c889f6e515b10207b5bb8800094362e7b5267d72ab3dbc7fd5de0f8b1
+B = 8ba48fe0806812f28c260759db6aea5a1c5b7d76dc6e7e56c1ea1eb4731a0cbf0a2146245642707a93fdfc4eb2016f74478558326781e4be7801e58f4d360de1030c164bec702d8768107e3871f0e586c319c9c464a5cf01ff39bda5e4fa390d7603a04f553eca09baa1b2b540ad4749fdd544e113c5fe66ddd1b2ab5867c6da
+GCD = 1
+
+A = -81a14d3a351dfb5e769a0fa13ac1ba03adfb44c0e70e859c08515b123304d698f3720c4bb93004dbec54a83b2958e5a1d3c9207e86f2e2980f82383743246db9ea143f28a84ad125ad81f9eeee23f7f89a71532582de802dfa375745899e1cf7e2fb7fe4eab272178a57c6a6518158a348c4638e058f9383fa4d6d099f890004
+B = -e7866f33c29dfb85e07d50fce9f09386a927dacd97bcd535e05c87b460867f9736ca84de2e7b3dee1e8876094ca31a9f3e6888ccaf8691361de6ed22ecacd22ad2025abb804bf082719b9bcdf94e5c107f31201560edf83c194a47ce27ad78640eabbb08f96048c5dca8c957c7f171ed927ddee287d2671b8cfc4b9efcd34d83
+GCD = 35
+
+A = f07fa8c1249c09dfa2a5b5c5666a1eef38d98ec5cb95c24954fab3e619a79f07da25ce5ed0763b6b112db9ea41e0a39043d25b696cd505277d759841913896ab492afd1a3fbbeffa646bb09f375d749728d55f9ee8c0c01d38bf1ac5e1e78281c5d9965a214c78a03fc01a8b22ccd0e8395b9b6c23acb6d3d0e03f8ad8523e3d
+B = -f7992a5509162338e685c18223f9cab1970c599808940bdf68e036041e89daf4ccaa468863ec034433fad37c19f26758b359563efbbc8b1319e14b1538408d8b86df616bf76994e843d9eee7b4b5122dc10e6dd7509dd596d253cc4165f6a4bb41c06861a824a45f576e413a701921ca4035dba6d0ccb627ff50c5cc14c4b155
+GCD = 1
+
+A = -cb8ac44017ba238d4212bb347e8ee1cf66d7c7927e74526abff4a496d552b8a9dba6a2417cd6ac18d619e930859493ee27ca7a4168b82f8cbdc168ce66f150e104239388d2967bf669d098dfd3f7c14b49460c3e6218e3195724996318be3834937a1cd8b4c31d8fa36cc9efac68d430958a705338a3d3a687480680cd622457
+B = -dabf6e2de58d9953d51d5027324d69ebe731d90cbf234bfbe301c3ba64c83c296b318f7bc010de8cb5d97c377a418ece4acf72d447fb282fa74d7c580b689d52945d44a19079f840dda9223ebae08064b5d47d7dfaac5a6e634b19047baac0e3a57dc8412b28a65e21aeb4719d6683eab2c427550c4fa2f4bfcc60f1cff9df1d
+GCD = 1
+
+A = -65b865036fa8636ed1ef024aec9b06255f736375b54859dcb6555a029e7fa46f9cfc8e8cf511ce86401c59b2d2a407b66eb4b8f40dd7074c9708e036220a72902fd32468977b66381aacadbb4a4ecb4bba23d639587c1f252f4c2f51e4f3632619f2c351c7f7e9793c8db97b92378ab360c1c1051e51df4500512653e55ae46b
+B = -981d477aeb1970aa9d1330ac9bf1d1b9ec0966547f62f0d8dd81fca25bc679f160056efd1c4750e6a72b7a0902a1eac992912db780842c1733694d5c42ff4ba4f3a0baa7726fcdf9bb05b12477c0047dbdea40411ca38938cbf3d8188f008dac4a2e9498bb518c0ced1e6a2531ac686cebb871f6574083771270eb67497b7765
+GCD = 1
+
+A = 43a372a3985094c0d6affe0ca94b70c12278e9ba2fdc4b7f3b399200214c618c57dddfb7dc87aa4ba948e89d8795fab80554a96fb820bc70a9240ea7805dabd715842c5998ad16436f72027af12a7e3e4af6dc977c25beef3d14d32b060305f388ae54ff34d3dc01f9737f80946764810fa17ac7c4b3edd90a68f189321a0eb6
+B = 14c1f76b12d6e75a50fdb169565ce361518c4e15cfcd888d3883aeafc8d8a5f7602e0d5f87189a056c4ae44ecd918b0f44a0e3ef39d1f5bc4a1454b495c0be36389fe71a069989b7802314d979180917b90e8cfa4f45606c4bc86f7e71f2e7debd81ce5f4ac78714779c433f15cb907174b7a8ee89a695a9fbd79e7cbcc0d527
+GCD = 1
+
+A = -38b25215785d328a77623832d51ab84755374962facd5d5e717999e78edfee5c3c2d6de6bfb8eb4c23eec80b98e3093c20ca258e6213e2b7c055ea44f048d51dafe9f802ec505a2ced55d6d80046b9b3212e921959762175c5f09f2020e0679c5f9b13e634dee08268eab05e4320367334ad3d9f4897db5ca7dba0f475b704f2
+B = bf0650c4aef678cac150400e06e7281591f7395dc85333af367addd99be31885757a7663646619b631879a442fa299a78bca076fe8bc0326ed62e4f92b8129c0e65711a0f035933df7bec1f4cd0c45be6559d771b2077f333c0940818461e8c8e394a13e1cb1b6349dd97d99a73460ff476bce30103db89de7f53b3446db38f1
+GCD = 1
+
+A = b88fcef1a65c429fc01f8aab9c6ab04696d7c20b747e7622ac1a36a382af92799a6fefa7e395ccd5dd1bf793ee678583f5acc1f733957213d3f9e5faef7f01838ec7949c990eb83407df0c43abc60bc7a5be4821bf914f3cab354aa5289fc1ea9ec4bae896476a2c8cec9910dc7a6c6c0e4d13f1bd30f02bc1660e83d959025c
+B = -8fac4a9109d38f3c5e7ba7064c174bd3d09a452cdb201d4b95d328b3c26f507d96b6762284e0cc47afab8cedb2daf382524238d06e59bc5c2754821c97fbbe1fd713b56c2ca201906e8d42572348bedb1eb94734d34ce5709f1b536fa5bee61cf2ff025b7de2cb41b99540ecaacea9ed6f50be8b6369e66978a797aa7d1a0cbd
+GCD = 1
+
+A = 6d0bed26e9f4889a74fbd6a974a9bec4805b76b74efe8ecb2036712197ecbfcd5c692767d8a53a036e3d744977c00a1cb6515ffd190d856c4a532800cc2c9a7ee58ae7a94e521c4dac3e360d26aa1b75604d13d74c86c600639b69b75778e9b97befd1272270d45fdc1cbeac7dc60e40593dc9fbfd7c41e7058f75cfa76ea15f
+B = 71aeccc1b64c8136e8fc38efd268760660593105dd392b27c993b79ede50c74d69f249b3a5510b2b52f2785fa2a74acd2be549c492fe0ab47474e5d33a221c30234b7f3ffe52473a29157b6b56715bc747132e484ddf343a9495761040a09438e9e5c593a8614558070fa34ee0bc092854e4361566f4378fc90718cb0a316e3a
+GCD = 3
+
+A = -aae79b902e43c29eaf5515ee58a3ec34978b53d2b2f930170de3c722b64caa53faed9c010cf3311bf2370f5de7b23db3f80892a4075ad40c28f17dc576d25910694039d7ae93cca990a81b9440df60805b183810882e3546caf68c606b8b1e4d268db863a6eeff0246f1070b08b4efbeff1d0c2619800ddbb70cfa7555b18937
+B = -418054795ccf579c0ba706461461fccdb9cea4b966e40abbf96c8748eeb95edccbdf79753871be48635b6b63e91649a9a2e19091122cbdbab0a700b56ed31d5f989c6fd33c96b226c53663b331db70c22be07d23004acef438666c007bf3ae1cf68aee5e9d2eba546918f969668d195b54d996719a0f9a780b3283c9a8ee97fd
+GCD = 1
+
+A = daf8cde04e24e01e9c732c2c829a655763e92c9793ee6d3aa9fa587d80c756430447b3b41840be0073709dc86eeb3853516dcb130dd43657b8af64f1e8674c24a410b2f8f8e13ec59594620ac1a6868698a9235c0976d465fdf64a899eabe4af7d2dbc824730b6a35465a5bf30726f2364c0fc3950c1d7853442576244b6a08c
+B = -c1e6213422e3bd2ba3195aeff596ead7d8695717c514766335d999fa8052c8bc440611d34b61e27e020beb3cd5ac3495defd064de1c72dfac99ca6461d79508468ca991fdf487bb4026c8d360decffc01a5b5df36cc90b08bbfe20b8292d48d0f22a289ff38c986f36eefd3eb8fa91031d77b534402374fa8757194f6ecdab87
+GCD = 1
+
+A = 1f13ff29f61ef53ba74a584bba2f876faf30c3a48f14801f2670fc8c3a3f12a6e62e9c69751f6046ac25992e4fbf0939a55ec2a375785367bdce907d4b9fc5f51bf3c59a4f8cfcc157c22fd814de1a5adb87b9c022dc93c2fa0bf8722380da01d82f81e3ab90749b6c5b1b76e21b09e1da1900f2aa70e0a9e2f007c2c3ee1c0c
+B = 6120a7393e915c22efe5c1349fe12e735f114c16361d84ef3909d35628ec556ad9aaaf010bd71cb54c43c958cbbb3e714c5945076636359272282a92250f1ba4ff21376ef85b574516b1eceb0a3e2aa5cd3ac99df188b4e29916d83a3ec033280e5257aa9bab30071e82cff29abda6ac993d0b7cf8a0c1fe5d598bc3caebbe5a
+GCD = 2
+
+A = a712ad383a734b4ac4d9c72a932622fbb2fd0e657a0e09306cc50f2307d4d7f488f5b04678913ddaa00d4c17e5e4a79dd4f4ab86dbd0e223f1c05e10445aa7fd7a58d0295efc04bfa5aaf5d6a810d875ffd9fd0abc89cda17a88fe15fd40407f5cbe53bd813b5408068d8a76282bb0156e1765bf7e9c2d4c4c8bfb804d9f5693
+B = 4776f15c7686fba5de4064e7bb75196c5bd92140f7ca3a118ac06bd35a9c730d71b47bff57f4399b746a8164fd392ae94e2111795c7ce714bf3072162d8e079537e17f3a477ca8799532654f07561e5b3916ba21199fa50512e1e3541cffca5729e2f073f23eec876c0a2460b6fb81fd49fd841082e5deddf4f2e7ba7fcbbf82
+GCD = 1
+
+A = -c6ff0a22603be09f68237d3efa36c1701333b0196c3dd3d7612584fe9431cb13d5ccf753b0c1b3d35b2e4e59c005fd6621891b5d0c0acf9bd47bd20e15bfae3a37cc76f9024f3149127f750629ee19abf1eac01c2ddf9fd87ad55819c5efbc2f542bde99cd8db9f5be25c24da53ebe3dd28ccb07f2de8f0d11a5ea3cc8be5ec4
+B = -5155e77dfa312d2b21b46604fe2fc3a334d3e3e1a918962e9d0d9cf32f7f58ef942b770cb53a740fa464e293207fa2a3fa1fdabf4bde2f30d173beb37a9c314a1fab9c94e7b1b98558238cf523d9b48d4bb5ca638e7ba0306190632e30b92c0956068ba4e5207e7d280c608b96758d824cd7ac51cc074c8b8e194f6f0918b3dc
+GCD = 4
+
+A = fd21d30e49a0305fdc6716f6ab7472d933bd7d4d857228a6f5ebe1966eb74f395a474bc12bad45845717656336530c79452b8e62c8b661c80028d3de7d660dc603d6cc7b34e3dc835f5ddc8ee2496df0a55f628926fc2d3c331025da1972c80a142fb43690fff14edba13093b71b3aba5611cc60a85e8c8269305bacbbb9ae5a
+B = 317c0d2092a5bd71a77b28bcd59599243a2baa5cd6593d553d7c0f322ca20f9b4adab128e7b7331adfee4afd47f2413ecc210d75994f319a75529f6cbe929ccd2244139401b241dc9f349076c6a07f1b41da7f607b1f94f536d62ee2790efef71500e20f076565d712c2bde1e54a5599975cfe726b47cf5f5a8ce308a58aca41
+GCD = 1
+
+A = -a77183cb2c846782bc3c76bd01a48abbbced42256e2469157bbcb0174861bab7658a56125517ab6524940072788912b15a17873d0630c74d0786c7c998d9d6d0ad01c32aa85814a4b6435922b8b9c227d0843ae5dcc1a6487a219793420477ee62319a074f31b4035680bcf7be465b61416cecdb576009f021d648436a62c9a6
+B = 54ad1186b5b7b38611ea9420a9c5acd14f72c5041c989b4f9e1107764da5b664cdc6193d09e24dbfbd69476e56d22ff99d9a9b00ea7602f114164d63d0b10400f53738436353769528827cc5d4a06e6bbf579500ae1340beba7e3df6db3f78d3562571d74a5fb00e6884ee95b5fbebec61c357ac235bcf3114d7a0b757eb0bd3
+GCD = 1
+
+A = d12591808a77326c83cd03d4e8014e5bfbbe90096676a7dece3881f1452bbbd9ad22346663a8e9cccc982d91191c16c7ff652d449b11ccc1d9b9c6d65387bf849f8e9fead8f6b60b45309d83f81b444cd24ee1f562ca06632ddffc00310b168c25ed30cbb04e83ed99ef95091100d1e49b5eae1e1bf13193d54a79d6b89da5f2
+B = a4e5a52af81703a4ca71d63be1eb12479c07aa1413bf978ff5390954249523afc71a74893a1400e9382dd8b47b44756f9e374e76393ea3f76ad00c5e14584d67d3af7a8963218313b5870e1a0c16cad9863762ac89b06d667f57845795e4b8384facd661bd5fc1cf00acec90dce8130cb7114dcc1db64a3566d5fffef0758641
+GCD = 1
+
+A = f1515cd45bc9110dd40a05bdc25513ea453b89405b42588c8272a59f011d926294cb40f1e14eae8383751cfd7a0f7210dba1ec2b3d8135616db29c1b27dfa57758ad9e0d46bcf3b71faa99482fd394bf1aebbce79d25812a6556b06003424bd76f4ddcec7f1296ceee1a4d70a1a5e13758882d7cd35dd9c9dc753674036b081f
+B = 473cf0ba3fd689129f57285191508310684b66cd3c5b5159ee602839bb721169eaa3dea26fc758c71260846a16ed0757a220a3bc262865de0824b3b9f03399cded6194e1229ba5dfd4f0436c75657b7b96cac4cd31f64d62af94373c1dd5a028b88d1f88ace120c0f3a5f22aac0dc2ade9d9c773a72d1bb3e6c7c3f5a804d9e
+GCD = 3
+
+A = 9151a42861828b4488cc0be096108cc04032973871fc889c0588c7a8de390384ad84836ecdceb2a532dfb200defe5ce66809a7d4ff4d31236042be18216d5bec8530d9bcf9deccd4b57dd81a26bc13390ea840d6facf12491ce7861773ef5a571d410f4758e887eaab61420c350e3f87db7a90626e27aefab24faf3dcfc45aa6
+B = 4505c1520f6852d35dd0f3778eba396ddf5efe730a5f3db1cfd594606fbcc1e97572e9d4cc26be153c5f945892a896070fb70d1e92a4155fbe12c1b17b48f0b9be59f73a1a55f248f119c7f28f5f4ef7782f6736c26836777bbc9234687f36308ed01d635ed5d4806628f5723ef8f09c7645080b4902e8c5eed5a80589ca1f42
+GCD = a
+
+A = -3d1b41fa04b57c10234693943c4f63c1703acc6059fec1d735beef5a42d80b7b52ea3bb062d86ec2663519ac664ed46148ad591f605422517f68487eceee7a5cbc6f80e9ae47b6ea4f5e1b6393f2dfd4d2a74a791356582117e255f8fe6388cbef75268d214408e0c96ad2da68c91c17a65687f93e72aa75a337a11b5ff62e57
+B = 87dc371fd217bf4a20a1b227da2ebb6d84380df47872f4a303f00a1f5d531ac4513bdead520dbf3dfc03e7631c1f1d7276a6b4877d9ad112f55631287ee1b281da2c5bd648007355e939077573919413d33cfc8ecb2431380c013bfdf05f364a9a5a8a12e08188ad726853df2973b248ce30634c3a8c4c0220fc81c4441e8b0a
+GCD = 1
+
+A = -7dd56f785f4a548424730a6286300efeecd23642be87da54ff3d492efa629e22467be9b35f324b1f426ce9e8aaccf5ef00a9a3bdc07a94f147e5ce4693ef6a1b1578c6d65435988f95aa979e73b1bd1fa180bf7c927b422a81d6841d51b2388193b69facde06751b54070bdfc6ec49938106188dcabb0d27e41f71907cd55fc5
+B = 676dcc9713c7bc5f48f8623980dc70c8a7416771068c98d92bd9847b7e063ef2140bbb7a47e17f3adb900295a89bb0dda74361c0e281211ac727e5b1051e06373ba4eafdceb6aaddb5ec2ef2413af512e79f31a768c1918624b835dad59220e94eeb506a6840b9149e921d93cb558357f49da6d2fa20050788e6df5df5818004
+GCD = 1
+
+A = -c309840459c0490ff8395dea6392fa5ca8285881d7d5d81a604345740d1c9799b687e7d0806a4ebe9b7eeec64fc248099b50af8e18852814bd9dcc74ddb5de462ecba55a9e0abc79beaeaaa1929a48b1d66dbb74f23dbfa73555a6a2c3748edb351ca2f9e2b80659bcc11b61b595265728148f7575e31cb49cb285a5e112c148
+B = -8c4b3fa57df015461a1c22c625d2233f025644da1f0a05565e4fb14e9d380597bd17fcbf18319b069afb59f4b78a7010ba6c967b7fcc164e1e88cfc0813dde04f467990ba4257378fa1ffbcc6a4388ff9d3f4925232fbed09e07ad262e419492eed3e6cf2bf6f648db9bf3548c6df88cc8ac08582abf27982fecc1f08d38e326
+GCD = 2
+
+A = -2fc99b46f9ca75ce80c4e2673c8e2d1088ee75fac5b944346d92386f58bda65702bb18bc1ecf384c27c5b8af9f680977900d71191853709c71979eca9a8dee53da55472bf483aeebb4f2440fcde48721b378f94e73c94dbfad2f3f8c91df0a4b1598d348e505034e6f47940d81cd265e4fba8175ea548cce777ab6efcd784dde
+B = 7765803dd955c4d3c559425ff1c3aa4201a15014eb8a5fbcd85cad326d26040d66e61e7da9f4de9a56a7dcabc3aba3b993f2c5b90d4c0bbb3c275d8807a37bca9c58aa17877614b8a086c12c0ed3d143cd9c4271864200e128b98cee6da9020979e75453bca9f57c64333df59a214f9897d5c58f327b6bfc13ba15f2611ba0f8
+GCD = 2
+
+A = ed8687ab0438c4208d835b83ffbf8d55d5214b2b39d17c419b6e6d07e3798da5c01c9ebc4dcedda314437cd27168a76195e718384bff709ff51aca1821e40016f920092ad51562777c969e72932cf4014c1b25c0878909c94e775ff5653821028c9c9c64f5a538ef2dc0a0d6f004bc909ec54176b1e2e6ae5c8b3c3c2d445150
+B = bd429f988bf8ed8fa53b5832a8a168cf0d58a992d6362a8d95912714a0fb2050ae5f7356a5dc5da97603e73983ce2276b7a7af4d1e91ba4da4dbfa95ba09dfc8c990e639136312c4172692efffcf6ef5030ffc15a9bddc3ed252b21f345f9f2d74fabc424c86330f92f47afb4b8bc934bfd5fb97ca1446efb0e482afc70d9cfd
+GCD = 1
+
+A = a51054c371b579d89492a0857f4060779ee58fbc1869852e38338a29d1a5a392a2cbc1410167806e6c2346bed7e8ca43cb320c69cb3ad1b564a36a2dcbc7c5d9182a67a8344cabf38111953d6bd7982c570c291e602641fd05434f480323498998b3dee6ead61e0a937bd2bcc0e6b9c580f8b9dcb95a61b1d3cc28518dac1a0
+B = bd5c6d1a4c5f6b5dcac080c571518d107b67aa7ec649122f3d1e9c16db09b746167d21774a8324b8a36f6192414b74d25cd47bc86363a1aa587f1a267a50e65b538d49f668ee923c4790393c94aeb23fbdc7521a7f6b0c0910e4be6ae214800819e6c4a4ee3b3034aaa80b92d5445b6a7061a0c8b0f639077912130e2e3f05f6
+GCD = 2
+
+A = -12f5509130eb7500d7a60e8a21fb7df4b83bc2c3b634ba2cc07638db779ab043b228ed91b863353b9f74533d3fa4d0846d445f078e77f441a533c2650f58c586f4e799e489d5086fdb743a56b0cf0cab246c66462a356d98ee9933fe6eeffcc27b51d1da421bb6c6f267a6d6b9a0d53bacdec37253946e31f8c2c2c05e435031
+B = -f9a1feef60b8cad7cc064391b7533fc40dc209bdf8730419635d6140a5e2104adee7f84bb56cbfe61979b2e64a7699d1556a1bb6aa794c123c41dcb4510d181e0cf0a1f6aed0a80e15f5617f9c282af0378206f970bef7f29bacea5f4f3120268d0269251e2d9537d5a1a7b395c7d6cee062fd216cc3c49c17d3d5424d9fd5d8
+GCD = 1
+
+A = -713365950ca1d0c2e752f6f77b801fc79a079c360dfea91b2763f887c4a76cfa613ee36aed15c8f3c9fdc6912d840ec92616a304803da1e581621fc04ee43c247df101390388dcd36a4528a500376179b8169916d7cad20bf037450ca406f838235fcbce03986d69c857a1288b57dc1d67f6eb37c2e6ad9f0117dc1615ac8e46
+B = -851a56490fbda7a668501c9890e0ec97c26d151be6342e4aac8747749c874df1ee747a22aa763349e59a7f6421e895432f5bd054dfbfcac7a06c27ac9fa27d71a2dd9abd5a92906020e2be5ab8a055a2e7729a3e099dea080a09ace6d4610b0f4fc2bacbafc8e443bcda7b55d5f264b1459d1dce0b74039e536ddbaee59c037
+GCD = 1
+
+A = -a1e5cfb7a0ca45afe7e86a4e4e6021d64ca09bf2820b87c828c0a9bf1878225716bb083abc138f6690c582c39cb1ae0811c4d3225217842d0073b35236de0980d88a4130185a822b87b6036fd7c96e554790afc92315d72533a70517a18d8efea52b86b48eccbbae2d21a418f9154d686c29d4038a42bee17b9bfe1e9fc26ec0
+B = 2573b52de96c92c9135c5836214b07fd67734315a9496221c748f2c3bd52674e8ca70ce29490a3cabf46c82bb19def3f1f244ea1f76ae29a1910251a7be89a7b13b4e0eb81548528c7e84bda9414e767dee4790f43868c54d7945103b939a13da20c0aa81651592bad64b59bbee340b668cd5c90113fc70a7dafbadf7e27fc49
+GCD = 1
+
+A = 55b2b0451786487aa2d5ce08330fdbc73d45009a742546c4aaeb1a342c40eba495717cf01edc6b8bf9a5cbc74f6ec349063b39c07344627d35a8edb57e2c3fec531e2051797e3c52a3db21b65ad940d5f9015c33e03d75050f46b1b1961b9d843b936760bc5f83a26de9c7d68aeb1f0db567ff4adfe1ff8ea07caf7fdbba5daa
+B = f0bdca936ce3d3b32e23a171ced7edc74dbeb98b8221f24091a50643dbdfab8da843be653b938f317ed5eeb621979e7bb78dc5b3d5e93c830cd21369459a68e3685ec1e96ca6b2d290d49f563691d749df977acb80f3d0a4958c306f8999c653c7a690cf196ff34ae52a715a74ed089de90a45530c5ac919dddd6676ec569d66
+GCD = 2
+
+A = -e186af8ac9709acd36e21aedb4c927600a614f58b47fdeec0ee7902e562d99dce69714c6d9a01658dc9d75bda9cf4e5512620a2b8137c747a335022ffe925fed08ee390d3f45c963f594f49a21e235ebe8dc59ffd4e1d41c864a328b8d37b51202380186c0366f74ec008d65f11ca484901e72ca3523e526f16c77e1b9013f30
+B = 595be70c41f6d3380b2dab9181d8c0e975466fd97639dbdbe749a68515a1e4e4752010965fc5459eb0420d1e7637e6b7b5ed312df63a1c50d3d50bf39e0f1909df5628c111cf99f4612e7def00451f9099c05c008e92a0a3cda3de25cdfb8ae3c05a49b558e3f044e0eb337c4c36fdf4d4e088337fab36382333c21074cec29f
+GCD = 1
+
+A = -9d0a4ad5e8428bec2f6faa247074e846d00c7c442949c3cdee5ce54dceb83205eb82f69c38b46f65eed493bd392f9688ed80e4fdeedb6dd8a2a2139d4b1a61977402802762c209008acd2d3cc3291a0de0f9722f9cc28f1a66cbc02f844f9eb83ea207beeda5583e8f39b85a83cbb96eb0266c6eaf25e8b2c8625728ff53a649
+B = -6eb723b317ac30d3658b8296eaa7e3cd58f2fc9785426f5f88ba987551cca52c1ab20ed1f17a6863fa34b062515ec0bb9b124dbd224b3b6581eed8e3e202fffe16422f62dd4ec41d276e91b9b5e26057d10674087e093f05c34378bce5ed59e1fa2368fccd42b2955e54ef8bc0faa59fd0607bf7e35d39ef790e713ed507e4f0
+GCD = 1
+
+A = bebf88341ae86d4b9eb386e189efe8dd88fb7a55e6b10646c3d291fba7d5823d59e7e97a6e995288c8ee8b4b127dd4e9e2e2758ec27f5f608075fdbf16e90d6547be80ce7e97e7f4efabad3475b197caee1470e1ccfcd4f98d401755fa9803aa38cc3ca67f3e2b852272beadf4cb400e9973262ec514545a193d29ea98fae3ec
+B = -4f28e7bd738d006cc40c66af464351e3a353f8d8d35d7388180b3996be158ea7e5a58c898b6db659403a3486297d0e33305ca21460b5b5e5ccf1fdb8b861f85b64c5fcd95faa3fa2f964c6460451e0ddb8ff9517eafbbeee1290c9a296b14917f0d8a8dac43818cd05732340662e1298058611138f4a98d99e1cb0668576bec3
+GCD = 1
+
+A = -cc8a5eee49715ca0173eccb68e5be3eacd5699b5998bb2659f08378a218f7b5e1e45cb3396733a46c231856bf127eff8fd5029c5f281da37c0af07049feba7b19029da345ad5ff0760eaf8fed5798c03a10e311e2fdf23801e8ccdaabd3481e855b2ee73460c21a6b74eb1b3a5571a70d01f24433c87039222dbd045829fe68b
+B = ef908d9cb815fbe02b89154849fd829fa15bd034f46757c2d552193f5bbf75f22926f0d0460172816e52f93e3489b651d5ea146dbc16d42539294d6949c103d5bcf8d802e4d0f5ecbacba1c943e5d08e29b190d1ebd2e725ea3a797a4b7354f1f775a2c6ee3b695c1377e7da40c076a310a6531eb2c65b4de12eb4ff49a1c01
+GCD = 1
+
+A = ee25da44d22b969603fb9f287e4a61d52d6cbc118462b826d5bb389a682556ed1ff15fd04e66d03a053f5dd3a1852a0e1d177b7e7abdaf511f465a517b4a1b890eee2dcac330118177e76fdac9ff7921367b9b315c2c8238b364ea190b54656224ec2af0da888739f3ffa5d9dbdd4d76f9af9722331dad933461f2f323c23d15
+B = 33759eb1d7dad9e7098668acf316a6beed01135177852cb3b1f2ad5abf5b64d1817c9119975d6bac74fa5fea20d19ac72e7d74167753e7f191c36ec7c52301a0a17d96ea499ca183a585f640ff27e76320137503400734ac397cabcecbc7850f31a31a04ff562b31ee7c7e3742d4f4650bb9ec5c324b053518ac63716bfef1d7
+GCD = 1
+
+A = -e8f9574b884d9a87bbf4d5f694e7f9938a537b6dfa1816feb451b48916d6fa3bd2b1a123d61fd9f673d45b2dc71e633db4c6e8e515b4a76419bfcd5e3a9e81e56b535c78e0477856601cabc940d897bb8d718985c98bd35a4155539192909caa1c1044a154b8465b91c70c9621d0fcb8317be48b12d2f3a7c8a15ab0a40c8d81
+B = b33fc45b073853f4616469588d43f294ee43a07cd5b2f150e4f229dfa8ea403e8ca31f52558d54c61f0466d20b082cc579ed674d96749e9db484eba1658ab6b6fdc1ce61684e5a65e7e6934741d7933321336190877bb185a16216b267b2c52fd874d258c89543452f4bb922a11fbcd5dc9bc04c7e2580169975520833209c91
+GCD = 1
+
+A = 691711e53ab60cb76d7af1a47f705b938667078af7a1281c4acd7b00d13caae2f7f125cee919fe6c0a682cce13dac2691722f4f3c887c9f1eb493f07c592e3b0b1ed3cb168cd5f0feaa8052466d057e299f0435167ed9df6ed963e708059bfc1f433a6b8c1a8ea8e4dac62dcd941b00cfac66636a9daa2e865a401bd76e7e208
+B = -7d7f2c632d5cb8277cac8b9cee326ba5dcf63dfd7de20c192f5577b3e40596338bdffac2295c977091b578305479cd6eb52b7382f48e4b33ab4a46fe084694c9705897bd16379c2713b6d6284f5d86c20e37a867b4528c83e0ff6cd86e66e8c40939d0ccd81520cce70446f124b977fd572487a2a5d011cacde11a70b12c75ea
+GCD = 2
+
+A = -131502a0f0b7daf349b54f10bd806a7638589be94462408e424793ed426fc01c9feae83121272daa70e0912be1022ca436f928d02b2de9af001332f37f76388e46167f52ee302941366d00095fd030326d5eb990de7cde35f0057ab394ff34b23f450c0ad7fa5d83de2719de8ba8f62638be4ffd1cf2800d4b462608aab2e1bf
+B = -bbea62f6637917178bf29d7dce9e500d7ef9ce2c042ada06b4a48e80116ac3fd668f03b89605ed3bb3094242251bb2a0d6873eb388019165b261762cbc914c76f9b1ba8f9201246e33f8267e1c7f566758a85839d75ba37dd5689a17d988d69b25ac0ba813483b6d4797a05cc0a6b99d7446108db8d6e1f2e1c1466e3d9921eb
+GCD = 1
+
+A = 705512bddf2091a984dd345e2ff234dc46fbcd7e8ced866651ad5dfa5e1a4b7b035854bac002a53592f0585e72729872272c62414c5ab03c78dbfff3df957a4c042326576462cf6ca15cedd27e0611190048a7b375d6d0433d0b93580d63e969ae558a8e2591abf1c9d4808b6f4060fb382d028c526aee6a6601aefbcc0bdc02
+B = c47c3f0e969b993314fffa9f130f862bdeef386bcc1ce35bbcd1591c3d9381b8d1a635fe2cd52b6f98f384e896b5a0bd5266c3f6ddd836b0b76533eac987af5b4ba273fec63e9f11be465c69a3be84c1c66141990a7365f223f41c811b2af4a3b058fe62edc9eccf2ae8bb7ce872ac7bc010b86b0baf38130d422487ee241e95
+GCD = 1
+
+A = -5f2fa7abd4e3b1f8006b2b1369cce82cfdfba1d839fbe5fda5939fdbd8645b6d64de3b4a980fd19de53df15ea268a1ec78e3e6014637da8df6c9e9bd8b06db939b26c6410c824f77d6ae5617ef70c032d06b33054abe2688114c9951616942dca81b883fc7bc626d1e8e4bb48fad5687c3c4e6211046f947ef8ed44b76d75a04
+B = abfbf22956ffecd9c657bbab651401d0510846500e9e97b77c52caf200ea2580e6d55c3152ec244a765570d32668ffd98dcdfb41dad54865307ba45bdffdcd5db4ec65ee2ca9a30e51cc138ac9557284622b926f87aaf2125fcf03acdbbe12261d33ef9ad92f5e92b0a098591227dfb99e35ae95850ae7ce071a0e727a787c3f
+GCD = 1
+
+A = -993cd61f974a15571945ef82a549dd58c02e10348b158742406aa9322cbc961c914c2aa3cfd1cbb204c185159110500fd43d4ed8b3889940ef70e6d0ecadba1ea0386a4b192e907c0f9f6087ce3ad179ab30fb16b7cdbfeba1b382f7417415be95560c001c18aa2a9757ec07685cea0261c635496ee83288b460f6fa8ba813d
+B = -85e3f76a6ac92e52f08eb6360ef0a39be703fae04658149d05d60a8ece15b399a499d9bfd4b038f4d45bad84480b73be496d571c9ea0febfdfc82afe9ab1fc05a90eaed9fad57c9892e89b489dec6efffded496e9460ee8d93b852c2e6bbcf680affb78035ffe243f912b8dc194cd14aacf25263eaacbc36d64d9dd8c5f3bc14
+GCD = 1
+
+A = -b03254fae82386a8bcbad647de09f2de0c95a12bfbe93e3004a3587dc0a83f51f9e93d2b88528e1338df06b5360fc7c78bf1c834e7411ab56f35d429afc7ce8f973dcd5fef80790ec75693c2d387e350b06571744df16b2f66c0e4303ead719a1ad2cdd212348fb3f63e3aa77a5a0cedf31248f04220a471a7f7d2a965cad144
+B = ca67e06d79442a36b7d7f7efd3cead566162d78194aa44ecc55917ec32d391c8cfc771d9c9bd4ab9527d38cfbbd630917d8ab20902297cd08ca68735738a1c731e924eb17234ae509c86fb27fedbed700b871cfd33cbe2d1d785d7aab7c623ab20e1c76d25baae3666b37952c78959ba9ac68e814651d432b9baa6db52cf51c4
+GCD = 4
+
+A = -a4748b9be73d26de6329b56d377f5bed53240259cd1aafe5c0a9d671ea4752ae38e21029b2601f0709ff044c4b6b9e3889f934b3a8fb5c102833c0971dc142a9609dd3486ea56e4e1890a1067a8113985fd7512e8bc0c91251fe6b8cb50cd23d2a11d34761bcfdfa593d72406150fe62a29bb51bc32d91c94228565f8943d2d1
+B = ddb9785185ea24fd27bfa25dfc9c07452ebdf4d34523ee15fc3cdd8e7551f4a0f50d6dd671fb75c0ab96e4dc721082dc15fe9ed706c57393d6f23b53cf02d44f12201c3c2d8c3a7df033e7775d2da2a27390889f4521fcac964b510eb7b442f311144d18920fa0e9f6ff606fe2585ff5534a2d49f833dc7e09fbd99a24a6760
+GCD = 1
+
+A = ea4519a8212482c2676d24336b4210f66d81b3be2b4bfb3f7ff7d0fd84c84a38e03748d6e3c41fe9c913490b101ca04be999d6841c2c191b3c47edb1a26dd848831e1fd69ed688cffec45571595ef28b7bf7ba521b6a2a3f4b31fc87d4cabe399b817bf22a8658514344d7ce01f434b43bb069ddac3e31612e7209da3e32c5ac
+B = -12624f162e4fc5f59db697911e98690559cc5d75a52904f5ee2577639043387f3c67445ef56465311cf2599d86f77444d289db7ea57cb253391570bfa80e53633cacd4474d6185018abb8cd0c17572484b8c632fb6c27a5731cb4e7238d830f55a812491faa97b637257eb9967dcd70ed7c9a32d6261c916a3510655bd79e169
+GCD = 1
+
+A = e3a593598d81487852037b3ea30bb6755884ec6d7ae7cdd43215bf640b6179a27c85cefb9e9554cd9cd6ee17d559e2f788e4b32fefd117072ac749ddf28bb05ae8b05b606361a21b923dfc8382de9520d7079a55b5bf7bef939d937174082520a3b5a5bc562fbcdd2aca5a31dc9582c8e18d68dadba711e043edccb5fe04f3cd
+B = -729b8646b0052bde7cfcf36d5dd67130988db680b4bd1c4a3f2fd90b370a5f70fe7ce220be8cff784e9fd7d263f090aa71fb7a013b1151aaa3fb220e2e1ff6a51b3481a5954c636fa2f50fabf13d5e899662f695b996715c2e7d0be1f4d3a1759688e16dbf4b02b0c319c639b2eb8f4e3ef20531bc3ea59479bb4773ba30bb92
+GCD = 1
+
+A = -29801fe4acc5548e0cae403299735510d5e50f781f7f0461ab843b1bec6db9c1efee3bbc404fbe752bc604298557c2176935b33331cf19af464a80d65824bb59750935e5a92b763ab3394d14e9730849b4d80f4d4c56c6c8f35966f99c3d569f5d4e80ff79b1c19e6b82082e3d591fa1f15a99e40df28f4b74e85ad2358a88e4
+B = bd83d1d1ba6d7fa16279e6b5664d56c5bcaa35b639c53f62818665b48bcb83abb26092881fb919ac6f45e0b1945cbb9f5794ccef9dc42368adc414554313c71d6c36e4cb4f2ddbb3891aeebc34137e8e86496ea291b7fd0886b61e3e3c2612046e0f13273a37c3fd9a6f43ce639761fcce6b827d969e34b3a842cf410903b27e
+GCD = 2
+
+A = 96f3100a31e2d55b588ddd4a8585babbed9cc64db576b879814354f9fd60b67847cf33684ab53973f6337f89cc324e9787ae49243487cc3bbb5572541f6cf056e02bf1d7d368720455bf614524511aec744f4007e9440acfbc117840194177c5e14950c617f8a9cc3e29ed169c75c6ae3ce57d26cb5a66cb3f0a4ca0686c6d17
+B = -82d1c719dfe6a3f707098cba96416992652580647cb0f13a07d76cd8a6774335399fb2c118ee80cc8eb1746c111843b880b7cd04bc82a36f42bb52d9f93bccd27c83a9822eab6db16e0a8c381c7dcfecf2ef8be73b135304d2c7b20ef40e0c463789e81b4cc8a7e9048b96e694d878403d6b819d6e887e5633b6b60b7494fb34
+GCD = 1
+
+A = 198bb55ae906943b5d2cb9ce80eb78a98318d2f5490c7ecb71d905b477cdb28faba8c855d4f4f2726d10cf34ca7f67e196b8c69b48fef0b53b209e7d0a54cb74e7a9c860659be2fabbd2c043cd9d188e841abd4f9e342650e18fc284e6ea77cd994145b0b69e5fa2a0306937d7d3845b1300563f173f265f1f62100e6f107854
+B = -ec5710f22360c2a7272fcb5ba622f8255eb6c28cea75a7d70d70ca7b18e4f75c08a476aa8462a738d64ca89e48a7258ca6b6a8567a5b040ce3b194ba3018c855ce8bd30ddaa4012e40eca71eb3e37e92617201ec4b1d3c006a638c43c5bc50226ba367733561a50a418024534ee32aa49eea5ae6887d1663b9e81b8b516f1628
+GCD = 4
+
+A = a52e8e57aaad729701cabf25e471016491ed51af3e2463685a581f0af296926ef65677eda1db9e744c8e5f6852c8a42ff75c9d0ba142b0e4443d9030047321034f861d3f34297902bb8400ec10887842d7a59f9f8030d26feb840e128f724136139eecff7f5a549b25e1693f1b1dc4ce50791c62bc064abd422d4e3ef23ce313
+B = ed05bd5ad870b997169059c301bfd5db8e24ae56489671b12bf0355fd25c3d0cf85888a96680dec5a048c1728b1c0efe1812e3644d76ddcdab04d0b82175a436dcf15229fc4f6590d3ce64c38a8d8f0934ad42b0c854da58501ff72c6930de78dc4f04544f9547cb837d08c53c60b0a10190439e74020c05889ed166cdb4c9b7
+GCD = 1
+
+A = b37efa02adc9c60695cf63363717d5c9c3dee6a133a90bf037e9f9f390bd129b3a779d88c2720789b92651524766477fe442e6147c2b72d84d74dc6ef03c204cc700e4a955042cd25e174dbd1cdd08384c30c44dee77f5716ac5da92b5476b5eb1123eaf944863594171098cb78cad9f87593eff2359c1996d81a375ba94f8c1
+B = -cfd3100e357d86156cc763942399bb92fe7ae939a272c7fb1518507581e249da35affc2ad60ba12b2e4ee3d3a71c6aebb1f2ef6001c28f9d0abba7978198f0376bea0f84ec074021e1705251221ec3010fde8a11cd217cb047d9f2d9d781993a7dd2273a32b4d8fd440a0e7145d4d1eba6d1a1268431b9d7ee888698110282bf
+GCD = 1
+
+A = 21236de4a82e95775e0a1d89bae60aa509b8d3237e43c2fda8b21c527bf1f3cecf400601241c39ba28c48662e8da0e26c7509e7224c7499bc880c63bd9dd5c37e4277660cb480c98c6bdb4ab9d5c2aa68ee6e178824f25b555c0fb3df8bf5fa51e3f5ff7c71418d3863c5cc5000ab4ab390d20ac0e0b5124bd802125d5011081
+B = -5d14a86a082daba957cdc8fb467da35c8485790bb1d3860516daea8b0d3b21faff88e38f0e07c3a9f9cfea72ab403d87b3b9492b4d1ab6bef55c4942f9d5cd6d094f082ba6b127ebc7dd8260203129cee7a50fcb43848a9d43ca9c830bb49c1b07155db8177234b2e1bae5413fd35027207ca74c3ba70446f72ab998341468e0
+GCD = 1
+
+A = 72f0e901eb0c525cd292c6715a0375902add862612e9fb274e93fa28793a35536d4ecf6c1491e3a938560775a4a85fd03f2a6d1193482c0c26db067def7c24fa4dc732e6f88191ae9786409f6b47e1891979c6057245bdf4b7bb564762cb155d144f8f9adfa9711d61853c3e6f5e99a001917284ae6311a04610be7a09a36eed
+B = be109a52f49bb471dde043923a45d94ebf2d9c3f378af8efc48d7b8b13d48b20b1fcd34651ff0f47f4eddf66412ea4326b1925825badf57904389a2b0416eeb6c471ce76686dafe04b38113486a3b301a20abfb959a42375b3514f619825ee9b8c0d0958f38d6b291a149319175b84a622917463eda11da1dd575e8e8f2c7d60
+GCD = 1
+
+A = 801a28b718e67bc608a06c153081eaca69dfe6a519bb83853e6c1375ad739ca6d21a7b711c8e32c78e8dd1c404abdb9d950c6f1ed8d88a4d365ecc361af194242330340e77e4ad8d551ab6c7cad7b2729496513b2415e75c33074b8af33770afa10e668fb7ff464eb588e1c08c9df3e8c9335540b967695d6ee1e77c8cc063cd
+B = -c640200cf20216baf64ea4fe7e483493528e691b3fd47a0dd17de0c023493f6b2f027825e8a069a1fc8b7c938a901d1c3303b910ab6c99a70d4116d055c404844eaca03888d73456ccc116932819a4a7eb89084c4bc098e1a4f7615c859df8f8a669e8445f37100b934792d2371b206d34308b7682b63f32cfc16ce1581a83be
+GCD = 3
+
+A = 75d7695e510de5a18da7a4c7dde88471ee2359aa8c9e91d36ea96e53ce1efb159f387e6274c7af95301eed366d68d09cab8721fdbdc8df19e1ab98f7718dd333a04c48ca78b95fdce657bafed5571391dd9256cc7010e885538390ac1c5572eec5a97ea6f4a628601426ed8b27339eaa4e8fb0d86019405964d03fc0e90f4aff
+B = 4ee18dd3b97063c0886948f0ecefe74f2a6791201be4d6ad003333c248567a37af91667f00b8b7e0d81f3a0827d17501db46e7d8805d8055caf17075c8d845d25249de8189edfb9f3a069ebd256e279479b2ed872007b54a4d61d4eb9bf256f767a742c65dcc923c776ebd8925d3e3e4b27b51ea3d3e8fcd1a49318d0dff898c
+GCD = 1
+
+A = -83faa4548144d45b5b288c4582a0b13dc59625aa3fc345af6a4a651fe9cd85d2e91f8ae69b8bbe59b60bb3487a52ff80e8c5c81531e9f308db158a407bbac0dcc5d777894881f91a165e831151880c46eeb7abed2af51b715495e0359775950821597c3e4f352d2968c9c392b02ee88c90f091e387000e1ab915d11a456b2aca
+B = -41637b1bebda55c5c440ba24aa9661938211ba049ad644e5cbb46c12e0aadcb2ffab2c285fba5f560350de24c168d586a455012b1894e960f96c3cc914403bbd611aef7643c8d3d2dbdffe3350b77d600b1dca3895e95120076346ca1449e8b456645e1b32cb2685f96e3a35d8719e43083fd781752ad4bb0300c24557e05941
+GCD = 1
+
+A = db477e9b49bc979a2a70e5ae2f90332d0133bce815d096f3f36e84d81829707ce53c1cbbb3cfb74952341dc96ffb26fc678d32daf5ea994ba9f67bad237d4f32708d1257093ec447c75bf4082ed1c6038803721f54a9e4232a52921a0173595bc9d5acd086385d2d6ddcbb99f27bd16b61adbf3f6bb19de5ecb7031632a65edf
+B = -e940bf7c06c93a5003e31741e59ec68d5b62ba3f59c4e5b84b154d421efc18314836413d9de25ccba4e19252038e0fd00aabd7219f8a808ef4db48c5ebb7805e7467056f39c661d057c168a78525796c833d865425151851f3c349cb0c269c9d9cc2f4a61316b92cfd355becf21a3649e36d09f3190ecbe64564a8c61b04fd02
+GCD = 1
+
+A = ecad43f54394487a8a3cd2b2d653402ecb9160f5c6a64fea3187b895657bcfc67032918c8127f827e464eb23438acee2914f5bf7a91eae71d585ed1a2f6446c113eeb0750cf2283839d6caee0c4e5f21984b3ee092a2b1a3bcd17bd3f48fea94387158041ec46ef8fdeb6b8b77c64e46649c7c13dab159ce04889d009704fc69
+B = 9792f7115c06b3effa9c09ad94bec498daff59a907ad050e4e6b0818cd54d1e7273aad7ec1a06cb902d74299c1b9155d36dcad749caab0239e1dce376469db95037fa171ea3edf088ebdd04fc4471cc460fbc102e269c16a78242030d72d2a07452fb064db088374de708dd5bf21a9f4ccffeb7d8fed526d5f84c4d94c7284d8
+GCD = 1
+
+A = 8b398783e2a3b0a49f721682c15c9f7442be5cc75e2145d05e38d7a460e562d21a6ffb794a035ea055bc5b1e1b77ed09e505509164b36e36eeb6123abc9dd9a7fe2b91edb0d1e1000519dd80c6d1659fb627d9cdfcdd0cb31bde85106141babe8bd068c7102a42706d7df5fe0f03ce97b5b2c9c84017646e501a51e067655a1b
+B = -d72540b308701c303074094979c08c543b9a8ebb16a56004e696280cbe4df4b69c74963bd9c6fd7bffdb12bb9fa2ae756d198d35cb8ebacce6ac50f8d77ea295d8487d73a5e1edeb26566268bdeb5b698f8572df828790617449f64f7b959357c012b570763bee27872498e9cfbfe2c26084a76afa7066df951ff5cd22c32451
+GCD = 1
+
+A = aee9ec9d5348d5a3b6d50df1577aba8623718fb94b024b0723a860dc56438957b15b35f384db7dd06faff838b72e242528e2aead34559d0168449d123246fed18ff0fc7cdee43537923e5dcb7fc85c1c691f1f56216728a3e91554e40d333ad928abdd320eaafd118a77c6e8291b014870ec9e87499ab1878150a9f4619e8c84
+B = -f9cffe32a4d157ffca4897ee22f2eb9138672056eb1647955d3717cb95be322969484ed8a1b24a2bb3dd399209b28b52aa6bcfea77694fd359a929bbf61f383caa114cdc91b5abad97395cc2d4b2fce5a54562190151b1dfed7bc5e7aaacb41d8286da97dc586749db11ed044cbc9c3f075c6e919ecdaafce390882fae8cbe6a
+GCD = 2
+
+A = e5c203885753bf9449a409617ce544748fdcb757eb5552842715a7026d33b9e7907f5f4f8c19383bd5891d914b4ade451f70914a1dde09ee2167b1feb574f21760197fa3cb78169231e8b5a0e0ad264d4bc0216286c8bbb20dc84c0a55eda92376e941dcd29e7a06efa3f100f94ed33f35b87017b4e8f30b1378c71ff2e62b61
+B = -fb4a169aacf5aeac7549e124ed024d010cbb8c46e3e3ed002b32bd31ccf3ad826fbb2712a2139acf35fd61fecd2125290b0ccfb394e750a393fc31bee32bac7429950686923677724190f85c1a776de7791c3ae6fda17871e8ce3cb97c37a3965cdb9c67288dcdebd8a7e492d0670774a996c76e7138f3d36c431ab3d3e60a33
+GCD = 3
+
+A = -9a8e71dc74d5e4a549834af4070397ef98beb1ad463d1ba204210afb048b59c885fdf4837701316746d25cfd53ee15a2be3815982d5d373901390c17f9097886c4c404bcd39702f37246175abb6dc17ce2899c0d85e0e85743d4e6b7889a4805eb80f535a695c37361371037ce88e320ca06e1fd9a204399fe70631584eab0d
+B = -1d88dc050c4233b79cb0f911b3cb6b6824c565fb72ae41dfd6c16f1b57d69b95ed4ad38495f2709030ef061ee82d80364952ac72f31d2e0636d034d4bb6c62a6dbf7a5411331fa7ec3a775f24db2bd49f4ca46413a07bd7892ccd934f3ff1c56f6cea7c5d02e97317cc762e802758faab18bd4a3e57da558e35189780bcdb26e
+GCD = 1
+
+A = 4a2f86a19bbcb564045c7d837378c2f832c7b7f986e7aee15bcab9b5cfe434582220f1caef86ca0f8a5e89b5c1f2ac815da0dee7d33b437d04bf0bb90580e843451e2bef03018d58f58bf54d43835d61433469d75e0afbd68f04b4264229d343af329ecbc1eb9350c250dfdaeb43f85e71c95109834204499d02dac584ac628c
+B = -50e606301fe9a9b04d8a753ec7d52b83e8c4987fae8a11b832edbd5ffbc7a6347a1fdd750d7a89d6232e33714936a49ac3b2dab1c117c62c0e3b3fb2ff6b8b2132d02b14bc6455c3ba223184891ad32748a480d40633694829fd4d7bff81057ee043db86f6c1553d50e54654f38ffd9d6fe31cdb51f9bedae30cca6aadec5b41
+GCD = 1
+
+A = 5ea350766125f5f270534bdb2c75714c568958f9bfd2827b2f89b9fdf04b79d1185b45b2fc8e43b0c6d80a1a9d431d1013a91179da7002a4b6d226776b2ce23676cce751b9e9b0aba865a9e7bd39fa5fc947b719320377d1c80e0e32a1a65e3da72bea5a3567238f0d1806cccb1d8547f1aade9aa8f7456434a57a5c494a3253
+B = 46e84baf9e32d8605fd7f08697e98dd7e60ac6fa033964d86f6179d0e61514b44218c9e4717554260ef2e1debdc811f4bfebc495ccbdd24d3c2202b517a386b9405a5e7a083f6ea6cb138b6fde94a16563df358b7c331fa34fb7afe9303eb20034d8ed3629a09636132c8be73a16840578c2ff3c2d7a9577c6364ed28e9c26ea
+GCD = 1
+
+A = a85c7b2bf60a96256fd28a6b581c2f8f4b4c1c5b3ad704413cfd1c29df88932853ca91897a06107519b37bf7e24db2402602abafe09a339e6d8156059e29eccc49f6a7260007c5b57d3e7f3dd1234564f566eb153f4017b3965436d1da369babcf235e15e4153c91ca50dbe884bd5df53a06aadf9ec368b63c1afba90c6b4041
+B = -cae1434ea2c0f91e740b8783898dadc1f708fd9793d09cb3712538a105a9cfb5bfd28ef029d46c4c6aa414b76358359990e42f27b7baeadfbc3d1bd96827b4f37b574e2add0d89cd2d2435f59202e1a62f9824d33bd2008bbeee091ab6db5fdce31df9b3a343c53ccca991eb779b7266edc0d7afcbe21fe6e326ca429f0a9093
+GCD = 1
+
+A = -693d485b24874479422a67968a05fb83687ec6a02264c3d62cfeb5880fbfd548a8c8d0fab6dfac3d86c68ca482fb9de3d490384150f0d0c2bc89729294dea923b99493b6823f07368b7436fe0f1a1f6ff96f6430d3ce90d72c7a09758a5c67a754627edb008457a40930ca518d3eec883e0f653097012fbee803f4a8662eaaac
+B = 37250a368f1f19afca3b77a2e5e2b18c46fbd2a7c1a588b0c05044aabcd66e990d97624c41037cbd7ad94f1991465b42d208eb235d026bd4fc5510dc178000db7722437ade87d045290d2788dc856a9552efbd7abeb75baa1bccef5ac6f0a87f7e99c23e66916f39bccfd308fdb50e337124d3670e79a80a5e1404c643ad2df
+GCD = 1
+
+A = 86a573b4f14f768a3c20c25fc7eb01ba2a8f134a9f8e6a805609f2a554861db96d838b5c6b6dc504ee7d54e0b83884eab5d091ce9909c0ef87dc58e0534bfc2ea2fe705633f5897ab7bd601fe3d30c32ae9ba911624b392de3d32c58a1223aa5f8b63d1557e502ff1b49923bbd8bfaf4d0d0317dee7d864f05f8767a54fc12e
+B = 51e1571a1bc85c3142342f22af92e5d5bf0f3ebed3ffe327fcb8932219da132c0a43a0fe1e4087bcd57abfd151d071105b714ab148019978d7abb5e31b3210c40d1278e78376fbe31f889d9337e28cdd8213ead71cc5370bffc8c87af20bdc7a223d8cd2348057eb7a3ccec0849098f16598a61d91ce4288fd9439b7bcf9b254
+GCD = 6
+
+A = -14971d9f02697a0fc2b1a29690cccf5019176250c7bc1fc0d87f774d0ed9bfc0f26ba9ace3aa35999dced85797317fccd9fb4696318e7e102604ae9b739783d889d737e39d5259d319c7199e992ab32f0c59b589e934cd7656f94a14d1dad9645a1043ee331d8025029655bbbcbba076e693794dc029bc1442e66ef514b1322d
+B = -8707c577d7fedaf849c12b11b06e0b88f96f85b36b3913377a5fcd070d1ee6b2ccd384ec86915a27ba802fdf56a0c3eb7602682de9635cbba3eef78b36ae6f6ceb1fce725ea2de8ff7f8f8b17318476e3d58617832f9b32fb70bde3bbdcc121de817daa4c8edec0569c75fa0b5129c09b7dc17de24fc1f53f8dbd18750c13e75
+GCD = 1
+
+A = 34c031d312e3b7a0d29e2dc92441221e126dcdb9327b302f6f3ea04e9a3220a9fdb3d0f99ef460976bb5e7f76ce79cf823bbfcaf21659dbe0cd7b0fdd4d0be26491e0ac90830d8e5386be073b2d7a7405ef61edc0eee87da33ea5818fb875ecc63b6a611a07ccabd79e06b19e7a5498bb4ff6e02fb1d522f3ce608bd98e557b
+B = 7e6dfb0c4369314b4f74c2a8de20efcfe3076961b6de0ec0151edfe9c3ff56b25689768798ea745f2f5d02d3d3ce0ba995c6e641d0cd3c0f249fc90db4fba2182160d4e53dd3718534da3d4b33f96ba4ed3c3c318c678fd14d9f57b912e36d520389083b285d62254ff55a0e378bc9ad7598ec370dae040c01efdef2c46437f4
+GCD = 1
+
+A = -bf225604f96c61c230809bb145212311be18072cb03dac10aceb6f39d43567a894861d78b318d3590390f888c9f041bd48d3040d751d45903e9fdcc2755a4fbe07bd9e48603ee6048f6481542ea857b74c93ed6af56e939c5d20f6d6df80d9f3f194a8532e9e109f7a940ca98b9f37612966491e96c221bb43002246194e4070
+B = 7bd29fc8d3c22f7ae8675ddf42a2b1bc35172cc81e8dbbbbd390b24fe65e8259a4c3b0c738368395bc19821a7c79ebb560a5150a8ddab8717ff1f6d964b0542ce2d19dd2c00d5e81f4fcbc95f61a1a9a6b1d8cf06b4e1b287ebf5319a775e4bf8462da0376cf634573cad7f0efa4f8694614aeac8cef5b0166cca75ce7d76b5d
+GCD = 1
+
+A = 92f350832dad95c3c7711dd212bf1bfb0486c6747ac659f754291c0839e7d26d31041c592f6f505b1d8a46469aa48c1b03eb223669211b58b226900915be39e001cf032ede5684093e965a90a34dd23a85ed05e5392d3e106090b7259de9105e1f076fd927bdd9ac6b8e385ccd57e7182f41e4ec0f79e32234511172d4b300fe
+B = b8a602cfe062667fe5b51b6fd8b9f4a658f19f25d3d5f64b87be86bd1c6ed5b2b74dd92dceb9736348395676eb3cf1df0cf7e4e29b50a5d3d09cf424ab88d79a43adeafbfc845319f8e3297a90ef480139597c688f7a276ff4aa3afb57b0339ff57a27e597fe8ae7f6cc2570d7fca4e20a1a2272a8fb15ea097050c9d9842dd3
+GCD = 5
+
+A = 5f230a43ec4b8da17aa115a3e271faedfaf0d79632a8fc6f67a9323711be7f50186fe6c5c0f8d87ad4669a13c54d4756bc5f95d2152e263131c9240708f37a58af890dffcf4010ee09cdfdb0498489a15e80bb50647949751c7c1de1da78e0d59e7202661c64fd075d7e2d720636cd77360c7db00b9fb2fd4a1ed1a46212b7f9
+B = 52d63ac9ba7981032059ef2fa4b3e877ccb00d18abbf057a6c8b4b018fe74acf6bf21e9b5272300e13ee8240c326d358b07a98524b764c1dd8b0016eb6274283337f9e98f66dde6ca0e708d9ddacfbb7a71da2a57da0785945c9560467b4d43f00c36e1519fd990245bcf6c941c4a594798d981552c501c07a1aad47d772e2db
+GCD = 1
+
+A = 5ba80444d4c01405a7735fbf1d2c24f0cd9711098086edf21affe08bbc24d852e38d701ff99bfa2851cafbc12f797082749fa648bad505a0a252cafc073c79962290795566b09af21a79189f9592a319f41da1d51238a3e3cc189153b1d787c77b43ac33136357984add3b1d80ef532e355cdc7209659ecb0b06dff5eb86e364
+B = 767fd7b87418e986b41fd90005017baada3706400dcfbb8ca98a441ae912c083871fb6df4acd7f366c7f6ed2ec0acb893d3e1f10b05075e710d3fad5776bc5eaf9bea5ed081c8443ff4cd94c500e1b1cb7cc08d0330b1230388f09bfaa0f932099e9415531b1dfaa1ecec78a3c12cbb348457e8b35f7a87d299e716869a8c11c
+GCD = 4
+
+A = -65c31f8fe18d57923f4aef6d8b70b9494c9a6449a5367572f85023682260e027aff2a2f70c3bd476874c2a40d7a7d70fb94a6f44c42a4985b35decfb430f012795713a7d652c4d56defc04892bd07d06bf4a02734a6789c9773f18105328d43c3cd78600697547d406be89c3a9506ca93299bf036aa144fad0e7c42925e019a5
+B = -b7c5412a323b279e8a2ac399dc5ff3ff11fc538dabc2deb8078b6272dc85027911852e14438d00a3fbec5543e31d16a24edb724cc73a5fae23c473ea21848733afda433affed5c899f4e7a3651c03940c14fd95cd3dd4d7bb64526ee8b78a92f0548d0b1ee2c1961208ef55de4be67d09c1dc5c76a9911a70c675db974a7b5ba
+GCD = 1
+
+A = b6c7d05d7c95135204634b7fd903b4de3aaf9a05efb3d271804b7f22f4ad07606c2576d0c5c7384b33d976e29783fd8fa87adf51ee9a0b93565f4a0600bb9390d2544dabb3ca8b228cb67abb2368b27bce4d25161a6c9c7dcb59a029b14e094fef1f7cee8582298434dbe6319ceaeeb2f5926febffc998f34e43e6378698f845
+B = d4ad3a0f85f56b26b26e1f7db8a89fab3f019e9664216c8deb9681dc5b189c73b0661df2bd19560055b88cc2a69e5154f947765017254c4048181aa4fd0cfa74241b75838ea3c90596331ee2fd9ac61b30f3f09e1927db5b62345010576af996aea0f598d39917ed02dd6d2d05b941b53f179f598fc9589114ed2aabd9622abb
+GCD = 1
+
+A = 51812a5c838f7c6f4411d4b684727c2474293bf59caa1ca9cfddd5702f71e90583ea256f06a6008c320b41913846781e9b57ed6e9f5d5b70291b3c73905436a3a298b68fe121673071b40709a37783e1c0cf73d0022ccef9135b04d7fc3d9cc896a35210400dc92fc1c7a8e027c4cc035d362f5164ac26ebe0449dd1f400e787
+B = -91737ba876bf8400cdbe7e2c7d154f3b7d5345774aa8b6aa91b00155ba8c058077a25699c3218545b12f345d6724ea3d05c03bc991f3e03df863a99339c6a172497572fda47272fce472ca8b324cf2254fbb249c5913e3eafb10bb567e117383ebc9371bcd4e4323531ff66272d5edc6acd7d38456663f14623f577698df6a38
+GCD = 1
+
+A = b4456585f607e3b73b373099cf1ec781c1dbac06ca40d4cfe08ef102d6f942e7c366016b97b23596dabc11bc636af4ed20ac7988ef48b134ec5bcacc4009214858645869261a5be606e114bec229fb66b972fd68ec5a00ccaa588ccd39b6998af946189ca92bde80ddb2684a7e6303c02e19ab10fa5d7b9f9f141cefc12e7cdc
+B = -9871ea620b9ce7df7743c468fc76993ffb86e91add7e127d59eb55d7650b2c2e4fbb7106c7240dd5f063171c58bdcd76d238998f231835c7f1baa6c10617c0e7f7b695d2ca33e5ad5d73a466306ffc71b07e46813bf4ebfc336b9d934cbc35483a0e57c790be33ec5633e7732c8ff0232ca9a8523720eaab653419550e600809
+GCD = 1
+
+A = 665a6070fe3af81556cbb9ddc9e2d9a3c2957ea3471c778ec9b0da76614fc8f95313526c304e2b5cdae7cf040920ec10799f04851278810751202c407166dfd728b2aae11c6b15765fec0763da8d7e00f92a91bbd3c0ab26235766f40bdb4c748a664a7dd7b0e274e5a7db6d885c8cd4e2d5f473fad31747cb25f2bc9546fbce
+B = da58e2cf0180c0f44be6c165dd10bacff709932410250e6c9b159303bf6738f718e874824cb6cbc1b721567b2b66f63cb4735dd6643896b210e626217e53a130e1446f4b3ab368eaa233292a8e1ec67dc5706bdb77a6288cf68b309cd15fb71936e0eafd4bba427fe6c2372d9c66414e61e42841b8d18918c59955a45244538e
+GCD = 2
+
+A = ba153380652a5100bd67fe0ffebca423c2372d2acc511ef2b2fa6724baf108a08cdbcf5495b5a1a2c8932bdae6dac6587c6617ca1db43b1dfbe557cd341d51293cb73cf3ec8f8bf3ec4cfb84caafd29c169a4e8222bc1734c7f47868ddcb29627fa5d4f06c20b995a411c73b72891699d666c0e9cddda8228de1b8ead951a3f7
+B = -99c7bc61921a2dc8fb9cf3bca8b359f64c0f2403ac55e12f59693347b75f37fdfa5635909f60439ec05a72dd08372ff44be2fc9b9d67da359011eee2a8aa46cd953b350b736a6f5431510f96a992e717c8d43288c490af0f222ca8f98ee25bb5be58a7472c19cb018893d22aad041b628c536eedba84be36a965d1a16044706e
+GCD = 5
+
+A = -aee4a3cf9c778b8461146ff2ca1d6e828e5b2027e3a0bfcbc733106f0c6c8c3bf6e9784e5b799d7bb0578750ab304460d6efe7b64e0cc9c9acacbc6a799b40b738d7da1d93c0f018187a3b55522fcb9b00131cce30e332e20e1ecfa6fe54e45720cca00b41d71495f8cf42e9c2a83ee343d9c2c0bb89ef0f185921d40908c5e6
+B = -7e75c75d4f2eea9010dc6effb6f9f2f533cb3590c0c499e21659fe33c6aa6e796065592c5347ccb84eb58ffedfe80a444a381a7de4e077b9b66eb875e6e8e87fb9dc60192bda856c6daae0ee241eb399a1ac46c5d0b8b3bb04952ffdf3f95805080f407d732a8d51f7dcadcb57c456799d02de2232904f1d9661e2a6918e3e6b
+GCD = 1
+
+A = -b1f8d90061550438c0f0c45d0a892754877472a016d1e63948f934bc48d95a0f2dbdb9401b5fa4a9a4d9c0cbfbd87a72033b81ffc4589401eb49b7e84b6b87e2278a267ad809e8655ac90bf0300b03259d7211cbb2c9a8cc93f01c88a15d950573ce5604db103d8c047a3f4e3592cb859daffbbc845579cc66e71df6a537c713
+B = -eaaf6b7f8c144e671b1c4b9b41b672c77a44dbdacfc17ada74fe2b9c119776765a5919fd74dce0ca105784e00be181bfd70177ad893eccf7228f7cb9673bcf0efe23f72c204c4c2870847a9d0cf4c0f7bc19b43caf58946fc45d4454877ce456aab4258e5e899c352f871e8620a30eb150fdbb286e1c189c0289f49cde003ad6
+GCD = 1
+
+A = b3a6883c444a7c53b096414d08db71b228a11b5ce2b4e6caf4b36f36f0ee707b8a3aee2124c1608583c22d56c10fd01d144beb2773c055bbaf73c5f9c28dd1c46561d0358370ce7921be4dfa9ef64e84260595692502a6b9cc472c2535f8a4a8adc79de5c40b23fd0bedbd0f00a52665cccba215079dadb980ec171d13cac575
+B = -2348df8cc06997a5577098d17a2ff610b75f18476e1e4920ce46f500a275bd0c1853cc920eaf6362ea18c6beb632589032897bcadba0140f9379339e21d2a4d0c05e29e453e3c1b1a0857c638bc37596f4b299d30afdb821b74c66d3f6c28c7d3406ed25df52cf62d36146d8f85be1f7b59ea313d292f3871d7bd1af6be9ee58
+GCD = 1
+
+A = -6d10b44903090e41284205d3c2092351553adb11988ca5a9de89b1e582e5e368ea51ccbbb3bd92c9ef7d305ae1ade3033e9aac661f758354043592c9fc434334f3e26984e13f3e8afa39b3db8de20eaed2a1b85719363b497c453ebd2c35ab09244aa62eee6a417600e32dea74418ee55bb82fbbdbed647d641f942a85589d04
+B = -a0c68e483e6f9abccb8c2d2bab7fe95ff010ae6c1bf3d99daaaa7e25e540addf66fc9d43811452584103e6ff6f75af2560d0242d179fefabb9bd5d795000764f9e7d151b0fa4a8f7593a6c2439eae8cb09cc0c9cf0d6802c35a39501f21c7edd697ebd2d4d640857631a4bb6b08ff888865fcbf388a4d68c71aaf95420944a81
+GCD = 1
+
+A = -8581ca79838842f7b7be22c95f38772e520b4fed76e967d7c522ccd297ba8e26c05e3528c2595e8dac023dbe83a7dbcd08e49346acb8c261ff897fab72fa0c782e7598511ab9c220ac709fe4f05525ffa2db3f13c20daec20de7b49318b68a1bf1f0dc7a107f2abf7eea90a0d87f35f119437b13ce64949f2ed36693acf34d76
+B = -70250f2a5a5ec428fb5b25312187afa01348a3447395a13ecf4227a07265797a31088b086942df4a73d5f929020e8549cc7a597db2227d7f6cfa8a4df6efb7edc11f754336d86b04c074d43321ff56f82578f0d1787d4a16aeb5719a85e248a40b332708018639e3bbe8116f4a5e46fdc66207a28b6b5d8033fa1b92a09fdc77
+GCD = 3
+
+A = -c5f1f2c251d601b350066c4c8a0bcf797c0cf2aa5a6d5c943b3f2709e1da155925ea735009a95a0a97e897522a830ddfd183db2018159c12659cdcf08c988605e2c74e06d5b726099d09f83757f94d35d04f38c19b02842f571178a065c96eb00696c3914335886f6daadb9348e7933daa7a88315445ac632682a63bad183925
+B = -300adf27394df6575ad2b0986ff6f87f442ef30c8c451569687c0b0705d89ebdeb9c6cc8b6935874ced54f9055fd4b137e94ca8b2f09c42d17e5ff60683e5d27e61dc75fc9f4bf4b49dad7ca721fb2bef769f58a4ff8d79072e2ed1f410da0d384f5203493729ba8f8af17deb7ad99eaeda9594aaf805c1c6e0323b555484832
+GCD = 3
+
+A = 3e4c6ad83c4002619fa76d7912b6423f9808d24c6ec9cb5fb262db790b6dd9b79ef87a9ab2a349a0416210ff951548415761fd181a0c95fd903edf400edfa34d5832b2a33e4769e59bf9d67976175489ff547179ffc4be5206e7544954f6a83df03decfb37a36e2e352af1ca4607a9815489332c2dc035e0c2fe3978777797cf
+B = 1fc32d6d0134e17fc482320c1b82fdeed06a0d4b8fc97352f47f456f6c7907793ac9cbd71e648d0e8a952e98a41eab71b3a8867151e0bdfd25685ca001b4d3bc9f1d0af481d43fdcfd0f8b4257ce7bb7eca20cddf59fae7884fd901f563a68a2777a9cfe78155844c927807e62df60e401a8652a617686d593f62d24ea7e2348
+GCD = 1
+
+A = -92eb4b85ecfb5e2a77871124a75f48812b9a26caa08975e4459dbadc383c445270335154270fac96b6137dbd09716b0c304c5b2abe16f744951e991d04b123117c05321522f602646f098f4e6d3cf9872cfbd1402859414d208af5a576f8278019b2d521b283e7c984048fd851ae34e62f8cb6037675120478d35e1bcbd6853a
+B = 52b5242829c14ab42bf8b8e1bbd855d55d41524832bf3937c91773885d853fc4b9f8823e411b481875d5766894e87e186caf17577eeeb89beb9e77a6ead91e383e1f350d278c80e77a880e232ba5d803f192bd9505ba99dae7f659cf5757dc81bc2d5e682c51f6e77426c3b7dcff0f02e03ccc2a15807a781a1342cb4efd6c56
+GCD = 2
+
+A = 7203c851fbbbed75db6773e2f69844a15f501c53522559c6260c4b3f6e2d0ca205d275f9bd976600b19c2dcecf06599ba3885a5f24589b00429a80ca3da4cee54326f23101a3e2eeb62956a3009251123ec2a6fdab76d59d7b58dac7d90bee767eab9a19d0bbe1229ca8c5980da04709293b26fcb06a0b3c26ef1c318a2e1f10
+B = -a3871296b72041485eb2967a3ee023c4430ee4e999d7365a804ee12e936bdb29a5a9595fe83b87cc9d30492462758c065b329d0bcd56708295baf12f2556f6bc6a5e57f1347131113f52d82936fe422ecaf318f9c4ed5e8c17dc55aed006810807ad3d4006dc0d5958aaeae0ce6a7062ee28f72623cd12d5b7f505249c6a7644
+GCD = 4
+
+A = -5d15906368a2f08ead6d7ed2c4f6d191dc2c02dcac4f313e601c606d5e7aa3df20dcf3914ba12b6f9f19f8237dd5f9a34dbd0931dcbbd08a87eda2c18f97bb2c9ed7662c62185710c009585b94a603434707ac135e8e85500da0d61979022a9d5f38a38ea9b13a6be9c299cba090953a7260640716d75494a988819ca71ff9b5
+B = d902c554832452469dace6f1715120a439f5d100c0500c9fe3b3f13c431efc5883f60e08ab1b0536f979eaa25fa19536be14c61fd36d45d74aae61f9fcb71fab5ee72c2bd1cf21958733ef57fe7eac6d6eaf2fab19894dc957292207e1a7c82019dcf97091423ff02f097eeabb7da63718f8df88a03c8b2b6d419434cf87243d
+GCD = 1
+
+A = -6961aded1779f616b02dac22e40adf870e263934006423ad5145fd0e6151cb55d60b84a0fe45c2f1cde563f0c048fcf01e45b596abf62242c4f2ba96a5b9dfbadd0a1322f7455abab6aaa32f148663acf446022bcaa8212ece70da31a65981555a16000eb5170467e9ceafe61181162cc22536512da836f5364c47df1c73257c
+B = 7845d10dc62a825a7025e58211fd99363fd508ded7df7b42aaf171d8422d685928673210ef91239ea0c93f7a120b6c4442daac151260fd1fe6bc53bdadfa05d6e04fd79996dc13f06a376b65d3766a051599d94c3f274564d4e239a3143814b250cf559e7e7de3229030941bfaaad55ccd9678e1d1bf919e05f75ac011139746
+GCD = 2
+
+A = cc5c02d7a747bb018f8dea32912bd2d4e7f6391336d83590630ee37f25fe1d87ef748c620c0b547ff705e44c0217879072157ca0521992fa0e6a787acae451d7ad61c019e2b179ef75ffe1032005fbcdef531173c68dc67bb1eeaba2f478e688559fd6e8356fd8fe3a1085ac2490a377986e1882cb2d2cf988cd8a82b4abd5ae
+B = 46fbd5801b4b0c7af7d6be7a3c559cee008b40100a21fc4e8a5c8352e10de67efb142579cd81dc5118c02739fe83f1f352c8a44d2d11b0f7bb74a128dc9d4a894f6500e3a017b372d71ca871652ab30ddb08aa56034b1c7198f8fa9d30d2530d33ee2d4eaff42d769c3f0b19e5dd428eab536b67c7dea4f649f3d43b3da78288
+GCD = 2
+
+A = 2a40d3727a3c1aa736dd976ce7b1fee07fe5bf1be3c9e9e306ce26653bae7db2b4be2497f715372769292af6ce6640e51dc2a34206d4600ae9dc27910a95cb9844f9fa2b356e6528f6ef76df5e99cd0e40bb45dca29f35f8f2289a63f440504ce55151bf25676ca3345b4f27ee680e43b271457a0217453c482d9a77459581e6
+B = ed7feb69ee618be3e273f25b03a6b109c0db8858d4a637811b9e3b626e567cad6ccef5123fb6502d5e83c3009c950e54228332fdce8c28c4cca6b5029effc948299efa8e8479cf8f7c2d30d07624fee7cd2eeeff102adfb98b37b2850c87b005020118b8ddbb1bc9e239dd51f7ba9330f6b8fc9630d298af8e2adf6738ab1f5f
+GCD = 1
+
+A = d64f98cb4716d4af14d68df3b1e2da6a7eb3ba79dddbb1fabe2fb24c1588e281366b9e90cdd8d7e9a945897b717cf92cc68414b3a955f2e8903c4b7122d26e82e076f23acfd2da0b58e6d00a925a510bb69dbf25ce894ea43e5c05983e31e9f428029036322327f82c3c41e8542e2e904f5c4d9a4180c7144b3468b62101814
+B = 32dc426b9914fa0756e86890118f221ab42f1fc031a6171ab52116f49de8c9b0c38c42685f12e4d61c1ef1e200f1de416db8a08ab2868fbe87bf8cd6a04aaf6a4bc91f2adaa9f82d503ddb38a429b58c83c751142386e018fb4179613d1d27a6a794c501ac5b61ce947a130f5400a7410b0d41f822559e0d114fee6813d91906
+GCD = 2
+
+A = 9369bad19bdd480212e01884222a63a171a3558e9f98dce2854f2355a26b052234be13c69a2417e925c418a0ad43b345f6f87a149b830dcc425bfba82b2e9a6d174b8a385fba73f5e584b5dd2c3555660e6afd99735110dc97d40c6bfeebe08c1772f587fb76dff0c711f12d95ffa93fdaf1b3a7db7841d8c444b1ed62e3f225
+B = -cdac35ddf16d4b46f811c5555be1ab672055e1a6f00df8b4886fabf1ce75d8aea23241248c6a3dc51357ba3377539ffeed520d5077e1b521c01c9c2495f937b29a6c482c59f94a95de47bbe7396086cbe1e3a98902546e1397836a89311541421cc5b85ed3ea89d876f40d4ac7699e4fc0a7015dc759c6c28bdddc6fba059dc6
+GCD = 1
+
+A = -2756a26dc7b9ecb12cc85a38b34ac41f5cf9f2d7d6c824178fd6d45f7b81123072669e2387e2e4402090a49772f124bc4ba3d3f0e204f4a388f3d6ac093e615ddf664fbcddfba4966c59cbdb6d906d9d981a303c7f65c78ff08aac4e04749375d39b65fd2d8267dc5751a789e3c70008b5df5b4f058cc01295ea214b6c582bf3
+B = -bd6c01cdec77975ca37b6080172e9e4c6395b37c7fa0047b9399316a6298d3e33123f92651f8c551512bd3a558d9781c57dced91b5e6c11f4260412f19efb36027b77c6dd028258b4b263709f7298d489147375119d561db6e9ef1c016a58b44c4aaf12d4af762aca4915af8aedd436f24c079e0274415a03d5e33c7d774cebc
+GCD = 1
+
+A = b80cc8f87f1bc1b69fadf81525fea5b3bccc081268315a34d78fb981e7b3bbbd4a0b4a2ce1ef3db4456293a0e137a5f0f9ae3be99d8b52b176cb02f99ad6594bc57744975986a8f80b7f0c3a677ec989f339ef91084e08a325b9a06bf5853db35f58d29a4dd2887ab6878f1408f6d7ace796281ef38bf903c6265b0777c0d9bd
+B = 2a1432d8bf1883530795fba19041d1d39406479428b21ccb77fb0efd003ad80ca4fa6a350cfd9eb74441bf00af7eb10ac478cdf42c86240694b927d17442289d9593dd863ef576ae27f74289849d4346f2282b39a984540d632403bde1e33defde15b07104ec3bd1a4d007cc8b6fd6d704c1b673a950589ff73cef702121eb5c
+GCD = 3
+
+A = -8113d81837c3674966857c786a2e3f814d83cd0e04a7d6f715d54855186907ff59b6b00c870c20cd68da2ac0b91be45c979e83764c5a27bddbdfa903336cffb969dfa11b6ef7ee2e8ac64f7748f2e9e51e5f33280934b25015db1b3ab951e963c32ca8f1478a7cbf74cc94903ff9a19ffc01a64b7455e4c90d2debaa2da67fa7
+B = c4f442ba13097a76657a027f26f4699ec1dcf38fdb97e48464252f617b60133d4fc93f916efbc0af49f209591379f478fe64d30b092a5b0f67897513ea014934e55d8bb9ecb781252f624ff18cc334efa9354bdc0492584c1aa93dda5f271965805803beea5c55417d46f434dee349fa229a420d7d96571cb3b86f97959a1aa4
+GCD = 1
+
+A = -6b671b78377121922223ccd40b7befeb5b9787081ab0a0e1e3d759a8d7022eb3d4968384db22adeee8375f6deeedbf8f3616458fd6741c2689ad92d5354249cbfcb2a6c2c397c78bd4283cb16cf63837b6c018c883903160e74d0f3700ec6fbad6a1deb3ef9edb3d1a5592081261579dcd3991c4fae6c20ae3606f441a6b5888
+B = 9e7b237d74ddbf157695cd632ab52b06bc23ae8474d973f18bb09377058aaba06de37bc2121d02d1c00c56b366dc5a1767ced4013a90c1ec1f56f93e1ca58bd7da4fb52a83f68c39efe8518558265fa94d90c2c7585b46b7210b750e4f4faf8009ee8f94f6e96e67e958a710f8272532059c115130eb7633617feee090986b91
+GCD = 1
+
+A = -21a743ce921b7a2e55ee8d4f26f6f6812aed3a76ad58394ae79cad21737e8585162fe93daad7c69bd1ea316c8dcea617f45f50947477e249b7c3172730921cb596c36a3ce790d1cf0adec21e54eb29a4c4d2e0a5dead6e2b573ef73d34fe1e3be1cabd892b9083e48bfc7d0db4230dc94e4180501ab00da11973c6d48805a349
+B = -b20bd0f1867813bfcb4858c7582eb32381a777fd3d1ceda4d96ae894deefd5cd81361cafa2d5f0f1f53b36df0beeca44feff9cc08f37dc78e2c62eb4a9fdd73e499f6e2b4cf7f46a749079f9eb724526046c74f7b936b3e3a584cb31b6d4adf7e7b48ed63c9a9bb525e3cd0be0b3f6e547048397df724faa8f3f6e78662f6a55
+GCD = 1
+
+A = eb1295c8474521287e78b6121f44e25fc59e015d3501979310065035ae42b898db12a8aaf9b4b7ad55eaa9874b98f557e74a6939d1cc1e754be4ca8513b2a411259016522adfa0cc1ae5149dc12ed6749092fbb464e1a3d6a0ca7bc288d37cfdca179ec19409016d8b3b25fd0fbb1a17e05d8d17785ca53ce6cdf047da22b0f2
+B = afc9494b1fa096724b5c66ecc605a13d2df49cac73ca1cca57e13b74b481cab90488c36f89dd7f89062236113ed66a82821b223fcedc7b8e2532b0d54b02f84aae7bc10b51df1b3acad87caae0d2d3f15978e6e5318e829b4066b66fa21580a9b2e1c6009f37fb648ebd399a8f3a1bf310331f8a71714d226ecfd43bff90bda3
+GCD = 31
+
+A = 1f5915f9f6c6665a2fe99d6981b1ed6895b97a2a5ae35fe9e0813e8904cfcf5ca80d0a5453457bb019c41af3f89ddca41ac9c90945745de0b5156d8c7c8a74c3b3d60fba6cda67529a733b89923c52c4eb249e2a8a3c8035d24b3ee1b4b34a5ef9a54d5557a61f3282d5ff4c858f7c82db57aeec8895895e0759b8cc4501bce7
+B = 97d1c439de6673591ac769b53d92cffd0e6f25c1b6033071cd9a7cd5e73540d1897008d9814d276502c68367797fc0227ad23863fb013bb791d411b69e84e47b57f4941069af08ef0127cd0ccd7eef32e571138207c4f4f885b8c73004ee3773f908d4a9cb514f045cdb1b19f2737b32c9c11cd786fc387ab8eee6db59f5accd
+GCD = 1
+
+A = -d0768522dfdb156d91a654206a0b8650e5e7e67917ae31dad09972f99a7702f8e069ec088ead679076ad8f71444b2a4260aa183dedb1d1cfa36c716dd55a44ff0c88a87af218591a7385a7da8162602f410d76060c10e0895cdc48fbde074b9a554d74c4cf80e1990b0fa6326e30bee460ad34ea707fc4a5bb4837d57919242f
+B = -8e4cb4a9b6e16c9bb86a7a75f70a1e4fb8e9107079610d2ae47e7a9aa685a502789cda0f4be89bd247bdca0aa132d662891cec443c69ecdcbb3fba09946f45f08f453480779fc98b024b6cbbb0bf2c3b0b14b928774610c0ef47b4a308c9b47edcc55b59a3cc0a519e43472e8377247e79795a8cd554b170fd81e774333a04fc
+GCD = 1
+
+A = -32e14aa48faa6b475c46b05f6d6c7479979c577ccd50861ee17a24cce662f99e8e2e5250f50dde5cb19a15c7dc53161fcc64feb68881f45f5a0d8253cad6688fb26f1417b309941c21e2e344aafbe727ce3288cfada655f186fd2866ae9f43ce835aa340aa943bd53fc34241287dc2046efc880767de5d6488ec2957542e66b
+B = -427f2a22ceb8f2237f7ce0b2084b9792dc94ade6e50793d3329bb47d92acc9e2fd614c40fbff3f01ab5696486470450f11aecd1bd0bb0132f611e636e95621ebcc1110ddc03e506c6b6b0ebd3c707a162651606b393877340a767357e0da6d2e49432eba3ec8f844d659c944c042d0b943132d7d63abe7ed5fe6d820be513cd9
+GCD = 1
+
+A = be060325b38818c4b936b38c85e6ed8e9da685524f590160d1b4c12467aec4d43ba1b5d01802fa84c99fc8500934794854a8adb3b3b905741075710b1cd2850e80043ebd4a4f8db732a94dfc946f519c8cf60df393ade40a351912cfd14aae2fb2c9587799aaf2c125049e6f52544cb8adc4dd8776f845d4928d8f20435dbca
+B = 71d7e2811660227968f27035dbf3c8462f7dcb5be64a124d4e87bb83b4420da9a931f7c65ba2031462396489d1e279f2e13859f32e5d98c55aef68380cac681cdc93c041a9e0b4f9c5c12f98a271dbe8a9bfe7ff8bd9138c67c04887a2ed8bc5bdf9746fa5af722e5036f70219336c74c9c023f5f8400d87b7caf02f33b3f680
+GCD = 2
+
+A = a52a4b4011b009accbd85bf9fe12626fe5da30103b8708ae06707675c7a5ef423c5916c53e346d12c622b039cbf043c0ed5a56a8641890b44ad814d7c38a0903994947ba574756b52301620438068b90a88f57b411108a20759347602f9371089025d5ece4cd0f24314f230d661cb32a6e2826bd332372a9a7a6c871512901c2
+B = -281b72cfc24a8c19d9978add4a2ccc09877f25353337eefb01f02e810291a47472aa84878d236e6f5d8d1327438f4126ea2c78de9988c9c43dc062f79512925bc58035ea9a44550b1149e2cd18d3670979c2f5a97a993baf87bfc97af96b1139341e129be53bd340452e0cf02f478ca99f82f99e8dc15b9be54867fb698a629e
+GCD = 6
+
+A = 43cfb41db09dc5e81be7236c6dc542735237345fda5988c2cafdf5df170c68c7f3e5601cfd5f3517f5d13cb5eb5b901289fd17148921a725561be723fabb36437c0ab90683fd7d4080f9bdab6e0613f8fb70d0f8044ed2b33e3cd6e3bd27bbda1d665b740664fd6dcc00cd6e4e4519102042ac1eb4452aca5c5fc509b28ab229
+B = -84eec64003a14784c16e4c77a98702674bad1f7d64ba89f62909a2b599d4e6a2d8d4464702ef77e294ec35c07d167e612a9f9591bf8199814b21081c2a8d2d71bbd2ec4f4a4f906d38fc93e4bc6a64240f08ef0f0d098fdb9a40a3e5c5be440dcce2c0d68a01683b162c6556f65a387b1deb058309d02ebea2deca0f129d61f9
+GCD = 1
+
+A = -d4c2de2f8db5a71b8ad653fbed51d0978df81f9a21e39f8f4e1b405100cc4fc7d071b94d827ea7a06ff3b557c4810acf003fb2f4354005f055bb481100a30d2e738591218a456c61e9a552977c7cbbdc08e418143ceecc15c35858f8bf5231e76d63653419f79b0a7d7cc7d858b373179cf2dc72205f4d294116709130c62958
+B = 96285e10e53fc744a21f6db9e76446cad0cb24d7053f8fbd5cdb056a3890cdb1120b2a86da75bc2706258d23347955bd3765f34b4f1a16d55e574a7631045604b967e8dd671b7e010207f766ee82773cc59e5ea295c73030fd6a7c5e5a34d794b454419017ce1e790758e3f16a122085b4060def65e04e4d9a1c97c7098f4980
+GCD = 8
+
+A = 5a600c3f7e973e7979039b6c6bf1a48cdd6b77744895a3298ff108c5a2664e3a34c92b9dfa628a938b55afa9b61b99a9655d5c0f022c41dc9fe1a4af778cabf553a410b3d6869b2cb5b05cd3c49628135fa9872269a7b5d95617392f4ee5d0e768c0a594af2fc64a8fd367d73d4164c8e923a69610c540175f71657e59f1ea50
+B = 61af413b7ebf7f5402ef6161299551359a17ac11b5880577c6de5ec24e12468d04b1de245670ccdf81f4e6fb7d89dd6a64a48421a0853bd2ca298d4da987b19ebe9c0cbfd4debbfd0b67373018147462beed300a8c69f4832213e393c4e5b56f9a6c643fe757fb61bafac999319336f5eeb0dc72b64084fea8ad00a6a318ac11
+GCD = 1
+
+A = -986e5a6afa9b547527fd5a9a0e8146460294e39e0f8820e5f6e9a004fa36a534e9bd7b0989e394e6ce990bd0b11a797548c880126cbb76e967a959b28211a8d91af1c3127a6e7c30e1b8bf35b3a510b9b59ca60ce434d751bdaf3072c34cabc211bff4f49d5ba5a97d927a8c641bc2dc5f69bf6972fd843a9b28eeb1f33c48e
+B = -60aa14969ca4971c9fbbe71aa4724e3def8c8359f45ff80d9e266dccbc341b426300aa741163e4228d1a928f2810d51fbd9f11c75fa35517a483bc7c5f37c75a3b8c9f0d38d68dae26ef4c68f7120c927ffb7ef5661dd1496eeb985592bfc1434cf2f12296f5a929e3fc1348c2597ed0f7aebfa191dee009cfa13c9c53dbff31
+GCD = 1
+
+A = 4563fd1bfcdcc7ee97924ad79aafdbdc5b7463ccf6a9b28403b2be84a88c40d2260f11920ac4c5c6b44c649e705dd7ef6c806c7bbf26da9485f150132e5144e34fb02d93383e1c25e57652295ba9c1fb47c663e635703fed27a4a8b8998f99b6f99051f8807f6d064a58e57391093ac52508747ff303c33bbe9f56415565d5de
+B = -4ebd1938a076106491f44b8fc83779c5cb24c38a25f962f02625908104a81625dd8ba534ad73f39f75d7593fbbbdd31c734181565ff442deb79fe7897b0d072546c5320f0309ed9921c3bd8fdebfda083bb3672e6b9c4c9a9bbd5c802a3e5a13593b7df44b3c165195dfd47defacb11997557c4607086af9ca5174565c70d947
+GCD = 1
+
+A = -47a3405acd11f9ec276f5083ab4b685d5d54e0d7124e0be653acf880c7e782453e311493b9a76c681b078fc2a37784d18c82cc72db900ce213019528ec9383e57bf64169f27e11ef605837370b42c05b6a9580c406030bfbf8e224f4fa375e88fd01f1e38bce3890b8052184eecb1e19f25423e1321dd8fefddf3b5c43718865
+B = -8fd3e1c8b9cd38bd07dc58f00ca62cd1a601489819c75e70c12a74d38922cde630495e0feec8a624f8c4f3e0381e136855e7fae6d0c891ea63b86569ab4a9f08c13159c304a7166c5c0e04c88f51f36bfc3813046704d923c8e236f5d2b1f34fc6b6ae9bfbc599f4f8286799058c9e85a95c47e359d09c6f69797b72f1c0f3c7
+GCD = 1
+
+A = 97a4c14c32af38be35eb0a2cabaa5bc64d23443cac7aa01ac787994bd11b466be9b931b8162900bb0de32b1d39c7d4cff58573b0e8c78f2dc3aee53c76a6bad44f7c7209b248f65b0cf890ae30f09d518dd7c576c02aecfab1a05194385f70e305c6f61c74f3d372bfc34fe8a9565a7b6b3781f4371ce1577fc1e495683660f5
+B = 99e07c455fcc2b2b37e21ed93d1e0fb9c20cd4ebd117060077d2b51a01bdcf8872956e3fe978fe68fa12493f24da12a7668790d900aef3a8ebf50ca6be0bbe4d804930f423146e6fa09211f949b62df3eb3fd663416d4efe517444fd0f9d198b8d9c28367befd14d3894cc1eada2ed74865b99bbc4d4e28f7307a83539f8f1e1
+GCD = 3
+
+A = d6f0b24dd80506bb67b3f0817c442670eccc37978c3abfacdce1a68bfdb12c27c0c7fdd0611b2814180a32d16f3a4c6f8240123b8e33b9fdc6612c9d913ece8865f919e5f569ee0bd87bab6f38cd1a36f2fc593e6aa04eea739642c64d8be542bce5b1235ca49f1df04841a85d30dcc63bd950dfd636a42f3ddc859865092d55
+B = 69daf80faf2b56a66b8de5c7d1fbd9d8f920ddb016fca362237bca0ead515f942f36f5ff423f8904786f5ec3caabb6ebba3e8e1cc5c512a4ee2feae2c4af53f48eaac8b264696ad4a3e7cd5fe15db754fe2a37d9595c1c69ed250ab57d00fd21781c45316e85cf45964c995519bab81d1d5a426a2a2e875781f1e2ba7fb2f9ef
+GCD = 1
+
+A = -ba0e7d8a3e1fca296442be2497f0dc2fcc2e0dd11e4e1a3777f1bb7c97988a1985976c398b9312e5b633062db11bbc9629bad4346b5106c745886b16d988edeb1d3969b1e8e8da2209211f0b461a6469871c607a22b27ca990f386673186dba3572d899f0be2e9f261a35f6186180e92b3b22506da5641ae6560c1247fb22be8
+B = -4b4a3c7c8def6543c5a2ffa18ae6428e3cfbb376d257edc3c627d07a1672af2df9cb56a99f337d5a1bf8879e4f73d0eaacc05dbe489a97bd530d1818f2574df19ac234ef6a7db007446b3822427a87feccd333bf74fbb67d20cdcc302eb2bf8fbf3faecf2f2f684c6955fe2614026a11a6fd8d175565d8f37a51b2606c17772a
+GCD = 6
+
+A = 3dc5e185a984e8c25f26f7fdee08a7f4978aefcca5f3922d10224c433081a77b2dfa6b472d46d0bc9da183f285fd6fd820e9d4b5cba705a25f9a4523990b78b1b460c9d5836b0e66f14787da002b0a8ef2a162748c16bd06b1e96672b7681dd7aeb526cc324701378fc7c49ebd350fc32549f4896b06ef396d349d8611cecab4
+B = -fed11fa278ecf793c0eb288ab69222f6332548b2ad222eddff1aa2ebc9531480167144b27556db069e11f7624870aef8b204bc90a5b404e1756ef6ce032bac6e7df1c4df263a2c4b2dc7e473ffd80c2202c939642f8313fa0e6daa8a3f5497c43185d1416b1287c73300bcbd3061296a5f594fab7727ce2f4e56e6bb58600bef
+GCD = 1
+
+A = 9e5b8c62a06d72d74ffa4d1d33190859c43dfa2bb9737b1ca10dee2ddcc61306df8177d457ad12c8c649aaf20a8eb6bf28956520e734baa74a83197a4297a6ea21c06a73e9b8e444a5c1ecca9752abe524a6aac676e3b58ac8e6a86c17aa261a71544bd490377ace697853bea46946401e927ff9da2c3dad040eb26173bffbfa
+B = -7edbd4b029dfc0116910d43f28e948cdd7b2daed3a9e5ba47fbe83af539cea788891fdf4111969de3d6793a1ed5e911756d10bb9e139d308038e463c1693f2b2693e79275473db668a33da016021ae7356f288dc29c61eff7b2c9d26d902a2deeeb192b05a69752e7f6b1f6a4ac72a9d503ffa095ea50790f232fc12535366da
+GCD = a
+
+A = 2ffa021fd6b07c011b79c5cca063270401789fc08ca8981ec05692bc485f022c30986f806173bfdf4ab54f89a804a1b6130c5489d72788b014c4a02e6c2fb506c7e51129035daec4bc0bbfd779fe392742266e34079028be31159da88335675894bba96384c19a886c27ebd70b9e86d01ca934ce3e0563b5fa0752699d81c375
+B = -782ede960fb3ee57e1d603f1d655620f0976f754fb6a1278b52617a25dd55571d02db029368887b7a7c468d6280508832d5a41924ebea3b01b78b090499fefd8ed95a754700dd21c29238f4a3aa776fb60bf7b78fc84577db809cfbf8f4f4f436affd562200a148c861e9723b0c153ff08788adde482f4f85c013c915bfce4fa
+GCD = 1
+
+A = -891b497ae124ed0122af774d36b7ba3d69d9d1577b941daaf44cd796f03136a858ad5afda36774db4584f97d7958601678642b25f7362fdbe1feabc14e4bd031268f2b91872f8c8823b4584f79c549c067c42de369885db1f55735615fef293e61a65ab3f783fef37b44cf578e2377c0e9328c8da320a19ac9019d9d58c1e810
+B = 4ba26bf83a16f458865e9843dcd7fbe2d6c4e44d6b7382baec33acd58d4dbbed88a1c861d25b6ef0c739bfc11a4281224e9bbfbf4c9e33be1c9e3aa0525a1b4120c2005cc81619825f3ac03fc5e68850b1d5a8153df54d8c070779e79add76f9fa840690f60f847a84663d8c7d0f5caf774138e863f9be777e1ab4968e788bc0
+GCD = 10
+
+A = ffec42a9b9a2587936cbde6d09ee8948a2df033258331d44431c597cbf243f4a8e2b7708ddb503cb0d667588688a936d6f8fc399877bc1e3068cfe046914c207ac1e9caeb2710bdd439881d58e8a5799ed657a76a0f117a16602ec0139d3c216209476da52f4fd2e57ced80e2a4eeefce81dfca9a296544358e0bd382c91e342
+B = a76760bdcf7a60a1499ae6cc4397a8b9891510a5f9fd3bc50ea9844ec483a4ccdcdb3928dee163ab3029d44c8e10cbf8ffaa26b26f5ce531f739c5675506e060369d546ae93af0e3066fb8e6844f61ef376fd264f3e591f9323dd83f8e889c86d8e85e5982974b51177579ce23bb0da10b114b8240d2ae2f0711355474113687
+GCD = 1
+
+A = 81b04f6d9038e2337a3f3a86e926019805ca5a8ef37da21b14e53a6a2f1b5b8de550ae47bfdf1dde68964e287511d8c98e0e6212ecb13857987ab727f1cbc7662a49d7a232b568aaef8b92f57f2d70ea1566073c222997bd2599457183888a19993afa6f6ac143b13e9ad81f25b10e76b02f60922cc27b711115957727e36404
+B = 6083617c7f3b18801243dc8e90503ce5f232b8756750226a98a05cfad092b0fb058f15e4f8e2d264c13994ab0fd7881c12b7f72767c4e094a01474b4dc2c91210f33777f5acbd6107373abb8342eb258c8e4d6928faa19a69710b650ff56b4184c4f83b4f9404692993025d293fe926a61634358ba99cdb36f84908adb8457bf
+GCD = 1
+
+A = -b4a8f6306d5de531af7cd48349ddf3c3c502139500edf9f15f2c40973cecacb5e5b80508a56228dd8b9c574cd40729e6b78f71b00f040bad1824721e25b87ae1dfd14201bc76d7d6c3cea60039401254fbeeed29dbe18a876758f862bfc4f3d6d0c57cb56a7eba04fed1da50ab4e0d01cc4fe4b2d5dc2df8a4d1877827eb021e
+B = 77d7be21aa9bb385e8dba8674dd0035a0d79bc153a007204d8f3f03ab5d510ee5e0a104f885534453daa40d1d50689fc34f86aadae71bbbbc8e359ee76074edcc56f698aaff48768ab3a12da305c6b4e4211c0e347dc6c9d9c8c41642ccfece0001315afcfa0782269f87388c7ec71d7050934f6d1ae84a868c6aaa7ff1728d8
+GCD = 6
+
+A = -6c2884e8b4dd564eadfb853d14d32cf51ac1abc7bcab2f5a8592feee93fe24b623a3cefe7f28234bafecbf2ab9e05801f57f411c318920b5e05f73551c4ed63ab89e4d8eee9da56e51120dc79388c24f096aad5ea9f83386d6bfe4185436a461ccac454cdc968440f78e73d3e9577d3688f0b12945c6cce03a8e60132df88b6
+B = -285a87e39fa8c39929bfa7640607b622354b1ad7f3b962c7fd4105da6e1dca1949fc7fe6f5bf2584503328a390dace046ff4a3f2538f6c9bfdafd5b41d501bf28bdc33b26838df2299cf4fdb2111ee29a6e99313e88ccca187f5fe8415bce389cbf937c2cf03c19005a63e1baf809e9246166445291b40af609cf90d496c86e8
+GCD = 2
+
+A = -ab2d0dd7e99ada6a16bb7350ae8410e707d6b1565426111154eb74ba38f8994f2836f84b6a16f0d08c19b5db0398526a40030f8caf21830670ab117590b268069b6ae98fbf71620d1004eb040019bd1277ac4c65b7e190f06a6718536c5d3939b8041cf545a4fe3f4c04b69e0c05e70658b73530ae26f6b886434c5f2697cf1c
+B = 99fe9e762d2cbe137244e21812a0f72455618d7b0e2cec511788161a342b7d1b60763442630dd4d02807853ce69388500e195ca6f2b260780d97efc97abaf1db32d0704f9136400707820239d83594cbf562f81a004957643fd103e234d562ced76e64e7ba14877f0e1c6754c61ce3c543c27cf4c554f06131258c90d704052d
+GCD = 1
+
+A = b844e52b0a0bff6bb5df5030a9adb8d7116af7abf342ae12c5c74c6a829f5ad41ce60213bce565e4e284ba34da67e072d625e84ee9948e4f72947832ce725a80720cee385fbefea27645e2f92e6310cdfe09ad539b876ebd587cf2b8afc8440a112c7de191fa9519f8ba744a041650509e680bcf74780d390126888868f6d75a
+B = fd63caa1d98b60aaf8487a3444dad51f3ecf9844195a84104921750ee4a3a2235d3d9224cbf7714446d213577cc93f08ca5a07a5e0876e0e868293d4b3a09f3c32903ae4fb5072e19e5432ea2a6fc90149e385a414af0edd6ae6a2ff4e915a18db10e57a79b65addb961cb39ed858d15ef31a14d9fdb4865933a67922cb576a1
+GCD = 2b
+
+A = -6796c966e24fdf498832e58e2956464f7ab6f7a6e86dd90d117854e0b38fcba307c097beb638d9719e341c83c1cdd1a353c18f0188fc19acf91a7fffc0747b1c4ab21c2a1259da048198c787cacb69ee6e01b78f8acddf738e40cca7d523ba5d2d8d00d09a95cae0ae4c0b3ddd13348259cc4ca1127462ef59db73fdcddaeab7
+B = -7eca244e64d76899158bfc1f14eff176f8c780a912d0b1e11dac867879166949b77cae31a4aed6645e89f07d5de79e0217e3802862f06841e07c4876331629c31ee2bc4005ba10b7cce1f584f729e231f2d06f8406bd966a5db83b15d004aac68c004206eb3072f442b5e30a69c767de35bf3cb1b8714346c8f7a966b341348f
+GCD = 6b
+
+A = -d7a4868b78e2fd83c8e5f68345e30fde35f742adb0cc05c5c3bc282fc559c7a03699d3f7e3303889a5a9e84bf0a38dcb721b62dea0bade5f5115de62fb89257870d7b3272818c9066af713aff49de1572aeca8164bdb6a070aff3c2ea8da6bd16ce2cfe17032b0153e9ed2e2826ae755127758fd28194bfddc1a198c3ca79c03
+B = dd93e4bcde94b3bdf7db555891725ff05e6e4f4845e417c70c32fac49baa694f41cad1b900d7ede8c80301ac628467fdccf09f21e7cf9df51d4a888cd5dd125e270403f344bc2b3f2916b0293ba465d41c3e6c5e108c360cb2fd034ee7978f3ca8f00250ceeca0c78afae61a3ce2caaa974dae10844d9c2ab0a872bf5a450037
+GCD = 1
+
+A = -7411c843ad36f46bcda4091e1b977359e4df4224e174e55a78bcc423d68362a24de62fb83f7a8d3944fc157d6666da9d25470c0b8d00c58e3d76a30418acc0455d76d221fd80a16be58fcd316bdd69b509358b6e822cbe28b857889077fb9c266b2fc5ed4a67c6f9178ba6f3c8c083b8154b2da89b86c5733ae28885ec1df8cf
+B = -1fb06e327b0e995e3be632da3cc1e9dd80a9e767866b9aaef5fdc542fe3394e4584e21ff61f211656db4cd4c78d788f46f84ffbda5ee0fa923d9f13d6a8d45b313cabc5326be496723101d802a8f6581fadb719a5c683dea5b223f4c2e38529f433f2fba765070298094c1ff158cbc6d2240e9f7b2516fb3dc9fdc56b879496b
+GCD = 1
+
+A = 47d4707448896229b676cca6c38c76173c2bdb2c5bb34ed4fb88d54da367905cb0661b9b2ba888e3f1006bb506bcf9459dcd88ee4947525e6d09ec48a335cce9d53c3a2c61a1df175a6c54b88ab91a90b762cc273c72246a5d2fda345d5d35900bb120eb30be948aadfe48f80f21db54b539081c284ce9f589a8332f7bf5f096
+B = 7e71dc426dd4eb2f0eb41bba7a3ea42518852bfad21d9a6325c0b97ac1720dd59261c7636d1ff6ad7b75f11c3aaac76c7f048da473a4dd869b73f26b87679fdc40e4f6f4ee989945501bf6ef2235159f3b7933acfebf295eaed5b37dbef24ae4b6920aea57d9c04182305128c42fcd4e4db9cf22be34349dccdd7b06931c618b
+GCD = 1
+
+A = -b8f867a5b3f4866ee166b5c443e9107d0e41f75dc3eaf6b4eaa71f7ac0194ee70a1ceaad13eace5b885a791e1c76e9b51c5916a54dde1216cb9a43606179d76bf44f081fbc27273c7d82fc27ef656aeddaaad435d600a6978b238a4ec0f68236efa3796ddcb0c6030765009cbf3510a7c6fc6ca31ba9be540adc8275ffd683d2
+B = 1fbbfb546c1078e405da72ff2e76ef3f9d445ffdc1f593ca3f498d95b12ae62dbbfe2c22830f06233583b63af445cc09a64f9882b9fc3151af3239a910a01ef80129de0fe89cd4dcecdb982604cd0cb95294912ff4cd856ab3092f627bc6842effb8e5440974bf0781c7fd6237dd9f7e5ccfa2a3c04fcaca33f60c3ff5411675
+GCD = 1
+
+A = 3403e3153ca94f31e8c4d04285958197c59ccba323dae7c9cac8648d7e0d9ea292744f09befb2951a2ac8b034504e1602c2e1301d6e47ff1ba11a077bc96d7bb4ee5f15155fcf56e4a99661b71e964f533ab7056ea6986317911ec859e99ca31474551851883c2ad6d4df01333ffda8d31bfae10338930541fb14d388f885640
+B = f460857e121aef219f05a8ea2a401aadde30eed3d2d1f928074c87b94f35a052edf8f9ce9379eef26a46eec82eece80f3fd2ad36f4a6d856e119a7ae446a6a23f1e217696be4374a70197a97a34e9027061eeb6b73b5b6c647e655f0f06978b873489d8f1fe872052ed07f92df98453c90367e4dae21e5b7c9bc9c7fe6361bb
+GCD = 5
+
+A = -1f5c949d8d2459b9f52231635df546c74f73e9db87c6ecc50db920a2d53ff40435f73f4ec8f88f5f5040b066a7e2e60f4db762080cea6670024b43eaaf0843b777440d4773135ad8a6a7eea88ed8cf5f579c4350afc32b79bf433c12079dd8e096a50d673d2d44dd18dc4af2f8bac000b31c07b672dee1d7fdea07a2b998538e
+B = 989c554a84e3511cc871e48052fd99080ee510e00e881aebeb1fda7db20d3f478732db7e4498047579dc9eb9ff7cf76480545ab18ed677a677a88b7365e73e067bc21ed9b599d27fa7a1f5c52c113ab363dc567e1cdaadd9fd4d56d86a225946486d752b067e5aad7823dcc497b2ea91b30d547d4485cd5eb8a38246de75235e
+GCD = 2
+
+A = -ba1c94e13d0e68a62c01583bece2ab2b363c21b3c5dbe912cef358563191a236c4f51886181e3417bdc306c0af8df3652ea66e260ba9939d32bda0b93110a15bb9319e13e91a00adf56289421aece7ea362341173c1b9029ebbdb39a5fc1fc84df0b35efe20fd0e5bd26b7307896c0584bfae81cdef40a2460e420a65cb2f0f8
+B = bd4f2d593568d9b4746dc201416b8f4f9c80fcb51549db798c7fbaf2bafd5faaef75fb9f7e72ea8f2051410d4dfe93f6b046a6da915ba170e6040a26ceebcccf4e1df7011f10852dc56d05b26ecae91ddca1cdb54dabe6ef7ad101437b826071f7da3065b6e034db9406dad4da0b8534728a1aef1f2211821ec93e527ead6330
+GCD = 8
+
+A = 9bec3b9e7937d5f0af8f947b3212c5bb7c49fcfb346958ad98aa4b6623ea0477f2b8158358195f32e3a59833772e3f398f24a0afe68dcdd8e2efdc92c4372089cf06b26a6cce98fb8d0a2706227ac5ad1e5a17bc4a37ee75b0dfe069d0b6c291431128e4fe425d72262b92a17bae9ec094d254d6ca0558fca528bc6d87b5da57
+B = -6cf1c0d6c89b90698312a1210d57c45d65a92a8cac77db44fbc1af15832a2aff10ab92f47f7246e76f841b395058e0de3fb6b92c84e3c69a0e78d54317f0779c2a4e124e4826ab717130955cbbbfb99acd80d6971481d62925d05c5896ab843e82aaf866f6e161a301c4735364b10d2d2687ec5fb2142ebef6e66368150b511e
+GCD = 1
+
+A = -c02f379b14681a8e22ef49f3017f68e9a50c12b6fcf4474e7edbc7219b1a84ee8161430f51d66e92d5f6a04ed4bd3f6a4450c36856aefebc42e78cceb1b287d11959a1b92e046bf471573d9cebfdff3b77147bd5645e3c86d48e8deb5276dd8b5fc76533b90d6203c39bbe3fc3e6011a4c694e8e736e65d8721e7cc9e875a3af
+B = -bae310ea9bb9e6a4611560202f47f01a08c7ffac2b64d0fa0e8070974fcafdb0a41a8570d46813097f407d3b57e9a82712b1de72ca861f99b608669d8f59c30b66f225ff9d7a08ba15affd9747e627ac93e67c654273fc2d4522050fa8e78b496030432cef93e7348ab35961489226bae444b5e5038375f25055cf113f03e811
+GCD = 1
+
+A = e58cf8c714130a5ea2094e4370a53a2eca7c0fb6bdd1e9aece299278f2136be69c2b61dbc1870d3df7dd0b543e221e32341f6445b0ddeef2a32c33fff7c51b1092ee81342131c4001604a1e5019e968a51ad6017acbadfb20ce0a08dd4d4274685447692463fefd7a68519ec15cf4605a2fce09bf6342bbe1d6fa13c30287ed5
+B = 5aa56776bb3de86cd6feebf730aeb77c42349f3c983fbbe9f17fdfd6a8f600a08555450333175b4f43787877c097c2f69f00f1fb65a06d41231450727ba20502f5c73e37cc5453d0baaa6af8bbb40dbbcb2e29a0b2df58a40203c6a095c3e4b00c483c05646c0b66c9ca757c4e79bad6d4a0af029acaa129bce5162aca5b7e44
+GCD = 1
+
+A = -5695bfd8edecc0022124b75e5f3b5b9432574e5cc4957b8a580684e32dfc9cfbcbee2c71e941d96c73ceec0768ec8f326804d0cfcedf1699cd8665dc83764c5b333433a3369e216b03ca831ebee1fb39181d02a663462087cddf7ddf6ed2be224a1fb8f66230a3f9712b0c514581c52f9ccd968e31a10ccd1324dc5dc5fa85f9
+B = -cd7df9372e07dca86f3a8168611a4b0921c030970f029ca3afe3e0501e77e874dc2fb8b6cb50e6d7fa7bd912d6e112b535f2c9b2e0045f335b3bc1f71ddc87751fd36421117d575390184f35f39f57bbd474d910a839c0e30c53f24f7cb2a357e7fc57dfdbeafdefc2df72e7faea75c0e8567f8effcdc45934d6b5daa21624d3
+GCD = 5
+
+A = -960954f2604cd4f6687a9910f155ad2e322a5ccd41468ad4c59995a7b8a44c54beb1d7dba4435d5956e5757af287a95360064ac99e3dd3a7038aec5c76e18b79dd2ccdea9a49f77d97e8e5b1efce410bae37672c682956c7ab4656848eb1f11eecb58600d47e3e7e831c0fffb5f20d9276b9f4f287aa1bdc31f62bf8d95d9451
+B = 4208f9518aa2a4bdcc9ca750e46a9b4393fb76e61538585b1503a6c52de8d31c7d24126fd5db04bf00227f22b6a235be39a5c083c343d35914a14b9827b1491e76c47761891305363b195e699b9dfe79d92e1d0899210e505871970e63e7869f4ba07f4205fe22c841268cb5ecd12c7c0d4edf48500a3f91c471c9b1b2b1b711
+GCD = 3
+
+A = a3b7cf019351f252a9a7fa2c38325be698f0837ebe9e859a13b87d406210492a498a9c7c0d74e9a4927910cfb99fd09c05d9b1b0e6e1edbac72d99ad36e8c8f1a57781e3da9d494277aafcec17fb7c3328c6c1e7a80ea12f7a7678c8b83a3fc6cc251a1cfb14a460a08853ab67cd2499ea9528301eb81ea9cab59c2f5915e913
+B = -697374ebe8e633cbb1774914898683c883af7e3875357802e9af48a6a4da2a7029426b64489675feefba1ef5bec0c0bd9de07734576a4efd950cbee4a4c851202ba2b0ddd09fa3195ec96ec0aed780f57bb57bfbe6bb48e0afae8dd5b12d2cb819580bc890aa725c6a5f71217224eb486f9121a2d82ef7a491887568669dba0d
+GCD = 1
+
+A = f1128f3a57db5d0812c1372f6690ca3af699ad2bd9b6956f158a5f78d33c464af85ddf916f2a5464af17ff71f0a22f42ed804d0eae988e971db72ede47c0253d28169113f39356170a1530bb068bbc2e6ecc3931ac70f63881d3fe45cef4372ea03f38552ca3e74f251040721120fef165ef8014f5d647b7d5b02d3c13501cda
+B = -915ed34c40035bdfa6727752d3334cfb5863bce5abb7094af232496690922a8f410895fbb827ba34495df84a466c8a924142bc92641f056ee9d12a64054e125128b71a27335f549a90fa11778646d78b11447cd5afb31f1e5a667f9f4d6784a65c30f9cff34f9b5b3656ce419c3fed1defe0638b21bfbdd42b15fc7a7c789715
+GCD = 21
+
+A = -587f0a997722c76827b3ed1ed6f1bf1b9b74d6aa94ba5e4c735cf96a42334d9a9812010a6296f9c84bb011a329a2ac738417c8791fb062845e84ec3ae2bf4888e6ef902220929bb5d56c5c82abf995f1493991552065a59d9ed65314c7a2bdaf20d4596e710d2099c3db9c833afed1c4b5d9cba8ae5934fc2a753caeec7e7527
+B = 2d2ff327e05cda44287cde4a9b589bca20f0c5a15031b9d7edc36e5624e750f46612a89bceeba2d4964c02c23f9e42498992a594d43fcf3ed8a999e389cb640105074205d3acf0a072628323a3f3ff96f45d4af6cf84a523bcb83be204846b1b84f738bd9e17a2b1bd1c70b6b294346f6e87d08b91493c48adcba8428929a2ee
+GCD = 1
+
+A = 58ec55b033a8bbe72f5e27224ccbddb950cf4a1a02d07cd83addecf9b9a174512b5323966c9db4d3ba6e0f6a90d78e24b348d91f717340a3a354b23cb69d236a5a42661b5f3b183f45ecfc3b78791fa2e59797e85cb555a969f1a6c2fceaa8c373f8117bbffa23b9d387504e5dad627c05881a2a7e1d58fc22174a2b8e29ba59
+B = -1c7fdd15c7415163ac22e766424d6685286fb62f3674cdccdabf0f8cb2764788d7c86afdf8b45fbf43295784069e57a48af7d54c9fb13e2cee1a08be7e7bdc5f75dfa947e88b9486041ff7038605b199c2659f80ae684158ffa942cf8bbf9fff50f03947219fd7c8f2e585cbd8a66223a4778b4271ad179e84214e1c66359ba0
+GCD = 1
+
+A = -c1d3c2c81bcae8b8bbcca7a04df8cea662ca0cd05f8b2d99ed1361412c3fc54be413e72e926f878b436c6708c41bd67d92a9fa26691f5e9b9f435e42670b295ca02052484c0116e915b10011db67fd6d1c8d28823972b2e3041fcf0d04c02f3ffcf431a3636d508a6cffd1f33da17b6dbbc5c043c3537f43cc17c44b7a5c8ac2
+B = 67e4cb08cd8eea1e9600d7dfc602eddb0401939fa90b6f7cb7ee81e4332fcbc0d68920a15d3ed81c462449bed1aa7160eae70d6f20ed9932656e24fc5735f01732daa4ee460caffacf5237b3d5d9c546f6440cec219119a0ec7612d8cbed4714ee50ce1504b398c96b5a229f6226c8b456af4cc54fff95cd6907281db6eefc5
+GCD = 1
+
+A = 41b3860e81a337fc40852b093e727e32084efbec61fbaf59dd28493b197a41224bbf1c15265196537928f181194c3742129822576c1fb5181bc707d81e340cb5bb40ffbdc919d5a418a681118b6f99ac7439fa75f23f35ab0e758e2571dbfcfe4cb3868517d1524b2844626e9308fb1b0430f670d1ee87de76eee5b7a1734fd0
+B = 2854ec0663da374474343a01f74b13d5a0b64d0ea2c3e9af7636dbb8874244541219aa549bee2acd061e05857ee7fcdc1a8ec37d52b731bbc9ef200293956ceecc0846219f97facc3c76b2ed3595fb829c0a6ca0f7f041c8650635ac2da7bf7ac1791e1b250b11874c6ebe5718d7de8f090e5df084078b11c47a7b1d1e5dffca
+GCD = 2
+
+A = -f8cc8bd8fd5197095148a12e48afce61b0c0b0f1a5985aa376f00f4ac8f5631abb293ef3d90440523f76329e6e51cfa0c0f80e52096f2db67c83b987840bfaafb665eb99cc856c3ee66d4c7ff7e2d27e65e56f6d1b33be2082355f7d3d3a518b919ddd67929e8f41772b7110aa6fd0fd5bcc25387b62b78124505648a0614e06
+B = -2793d055589254302469cc9771bc837fedf08a153c6280cd835789d4b074d1a9c77c9a5e15029e3e7c78b61629fa9414574ea4c074777a3442ad0baea50aede74c9b6ab26852152e70c84c86c76b871fa90707dfcdcf9501a23f7b05d95c3fe43bfac67d3d1b7a2b8ddc817774bdbec2f1cc0e513c4b1792c2006ce510c5726b
+GCD = 3
+
+A = 9aac4efc5828f646af7002252fd8553ae5b330051502371db87bdc34eefa0f138e55044c7ec531e80b0570ee207656fada2507368a837c7b94051cefaa745f3a301936a2c846e44caf6ec604378d7347b50a860c86a8340a10f728c819ee0cab892fa178c28f9663ccbfb392c109d3179de3387931ca6becbb4d93ccb463ced
+B = 6ac4b6ce8d3821dc7e350071efa6212bb685175ec32183d00424bb35d9ce467c442552ace65fc72a1fd8e370fa891a04f565f79eeb0e086a405ddda82fe881918826688b3b3d5143c4c4c325e66ed0a544f533b2b9c513fa2c98ffdb85a384d9d81e83138dcdb7645d7c0e1b9b4dc135314264fb2929b902fa97440ee73997ab
+GCD = 1
+
+A = a56b5f2d7d23608fac2b494c72ca764ef581482329faba6595e4be73492e41bd0bbb9e0561c328ea10e3bb1a149a877afb937d202e67c51e7613bfb086dec6f27b7b7048899e02fd7f5085dd44f0a873666ae20f74e69a5ff258f2be9bb777f20b9aa402b2e2f5a0ec892341ad0ac5b3f419a8a531012c082686f1bc44d1f6d1
+B = -af73058c3e51b0818f958e6ffaa34c72ed9653c3f9ced0157ca4dafa770d289607d3fad16deca72a2fb295a74388dfe337f8185d3db5954e25445b7056acff777931424710c55ec7d5db3027255b786241f393e09832f1d113b96bac5f0f8be1728f77e8a1c67bea0e50f38c57d2378b3febf0fcfc5bd9bc8e08d5acf5ccbee8
+GCD = 1
+
+A = -156dc1415d58bfcb020319fc2d23f9fa44732388569906d59aa9ba1be590bcda14c24e5b10401976df50bd01003656ba1ec51786f45f099fae3c3a54804a864c5ae6291e891e386cf0117ddf06999887f6b63c16dbd397f6bfd23de4628304c77b1c21ef564f3b500ff93a8f85cd5cde00b7628dcecb43a2b286bd36b36af2e8
+B = -30853db6fb940a85214412173501e71466b87b30a0ad917cc7c16a86f64f763a356806c1154f42f22603ccb9e19cbf98caa02d87205e9b3c89d7c0b50645d61e86f8319be5e98727f017f5cd139eee71bd6f43bf63495c3548ac100bb1de9f4190084531b88b57b82208fbea59981eac45802bddb1c2e867eec307e37baba12b
+GCD = 1
+
+A = -c58a6bb316fd230fd0ad37906892240138879653cadd519d3e80e0841852017d8bf7a5799846f9988c2ebaf0f7393ce92247704f05df022557bde9bc5cee1d37202655ec283057700696f79644f7db62b838d22292fd2d71e4f8b01bbefa9f33e4a20a4d6b88c0774b435d85fb0533d49aa6b3a3e9b644e8a99b69b0fc839032
+B = 413235192140846471e8039312c6c60b8a17d037f0652fc0fa6f7671c01ee197906b023eb90b59a42a4081d8fb8af1dc909208966e297ebb739e103cca336b20ef4ffdafb1ea5eb4e0f19d09297a6cb6ee24221cc1b17a2e78a66605c346b7a4bf69b91258d75aeb1b1715a82249400c499a07f965835139d4090762ca4d7f5d
+GCD = 1
+
+A = 5c67e06428e845fe7170d0a5227521918ed949ad4887a113395929a2cd70e70e1df88c67de3bc54f2913614f224a259279f2b4afd7ad78d2c26efc3148c6f3b09212f8af2a8973cdd29bb07b9a26b27766100fa75ebdd5a8158612c2b929b6ba972e663128ebe0be86776fa6ed78baa0f342da17c9cb358e1ef2206ff9da33d8
+B = e6b9578994d68bca9fd69875f730313103303a5b81a1599e5af9b0d1bf561f6d6ee21bdba8c85befe37f556bae7be5725cbefb0aa2fd32b3f1281c9236b8329d56a7b19a0a904cd4d2d7976a258af7782953274620d0f29117e0d7b9d91dbdd6f258d97b9e1c0ef6b1950a9933b4f6641d1274b160443e41a70c0106ffb86ca2
+GCD = 2
+
+A = -711666619bfbeaf7f5a7ae3b700c210f36a81a7f10c81a1d4b1be83ad08ec6c30d206a1c8ff968d69d0f9e411003f7891ac5ce4263b00bcf4befead45180edc37dac9f3df132c35e8f0c68b8458d11af5c8d6206062bad23dde4ea230e2405c567c50eb93272b9f95e3f6efaae4baafffe844f5768d948f48f60ffd9027f5676
+B = -89a4eb8d2d5310c4b017aedbb5fc5d29532253da5303068619941352950145c993ea10bf3f21a697eb4e3e3130a183625419a29a1b5c15f3687c68a94ce7fde1561992b1369c4948fab8db9f96a0f7c3e3ba2c3474d57a4edd90439ba7692b2e8a3fd6867be22a7e8bedfc69e1c340dae8fef65628c388d62ac97d1dd4e6df74
+GCD = 2
+
+A = ffe0a3763d69e6ab5e90c7dc9451a7b91c0caf76bf48f3c0badf73071731b57461ed99edaa289b0e74bbf011804c8f34bb6ce0f104509181f8e6f898fcc6082f8d847a1682d84d6894b44ae6d3568389fd7f8c395f2c04bf083f42002ba1392294b003b61dfc0d1e1980922f8873f7eea038d4f9b6b1f3abb5082786ed144814
+B = b1897f83b3df810c440d75c2fee6b1369dea666fcfa2d5734affe33f6dbd44e5a1c6eaa65b8a75842a692e98139bb1be164a9ada60733b875c4f4c00eb108c5c076240addf65c68a4a01700a99b383e0b110ab8c9bc4fa7563548f19f0cbcac7408b4a734f9aa80f1e5e54942330cc2f6caf849f9c2069724543524e259d92fd
+GCD = 1
+
+A = 342acf2dac3e71da54c2ca58eb3fd7a45e0a0afb9959991d167baaa17941736b3c4841436f2f9bad425373a4c742041acea65d485664fa5ce67da7438816060578365e52d9d78b70ee92681dadecf384d4923baf4bd80e888914a5f16ec82b2406a4ce00474695468db8bca2a568c53877e4b4a3a51564216292727c1fcb6314
+B = -1276268cfc6cc7564d2e5c20305e28db261b7dc1c2affc8f80a55872fb2975eec68330c186cb053e90cf5b96a3d91812225864740d429a3755f044b4629abd4d6c55a4e3f91d1a395c4d6a47a69be47b14da2261fa6cb5da95f9c4b255f7596a39bed4b3c93d5a795e445f25c4f7f0536ee9c268a98db8ee34756206826fe0e2
+GCD = 2
+
+A = -99418137b55f8bf8a7851cceff88c95e3648894d39ff3791f05a3cf98dc5ce7769d97501d2348102372df1728ed81eca845e426d36b0ee26f7f047ba67b876db76a15bb6c3a31eeba06be51d494b87f6ae30907a34742e36b4f1e59810ed50553e11132dc2b450eed437fcb20c5f0b2938a5ae387b60881e2bad6bf124092858
+B = -9c3f99f96ca456fa647b93811a7a93189fbda5016b9440bb7363b2da1c26185a23d5e023a1ec08051b527de6b37028cc0a8b182cef931945b81d73a6cb2d5e986a4fc3cef6f19678b81aa9cdd318153e23f0dd20b138a4dbd28ec8cd9f5281b9b216f17bed831142395e5c2edae45eacbeeabede544c2c9798f7bbd8d9dcffd
+GCD = 1
+
+A = 8f9c55d58c5bdd33d9384f015e19a1572b54184f436cacee17873a7b2fa5fff8d1939af314ea62dce2bd38439e12533a09aba4701e562650e5d0555dab503ab23eb6d752004a8bc70fefcb0b2d3195389efba2741ff35901727b136c52f1f4d74f03dec04cc6f4a4ff41425b52f87c4dada161858410b18c2879282728bc50f4
+B = ed94fcbb8f6d0019d73240243dacf1e76e9c791daa0c7274d33e07947249c865ebf9943e4f691632fe39d35ac807f4a062705463c8bbac00dcac4f7b517b8339feb035c622be41084edc18cd2456e537590ce526a8583ff38ba28ec14ac2d78c3662c788afdc02162fff51232482bc2a7f44b4cf4e0d5d0966d97f5700f6437b
+GCD = 73
+
+A = -fc9df267ac76188bb1253754911bbd067b00d6b4af03c6971ba05b938028b635d3c7879f2f501f37071e7ad039557a820d9b452b24e5237c31329d34fbc449304c31c8cef0a357c34b5c20580b36f2c1da0928a6879b655267d026615fc9dc3b457b8dcde594fb632c4c0992740dedf1ca9e5acac32175131a0952a0cceb3d9b
+B = -8e606ac0ec08268e625208a9a65a6d4acfc3524f500e6bc8fa620ec46c1d19565250d7122be3a8c2caacdea259c05bddd632092777c8e9d3c0a251cce559521c11840d2711d946b0ecd81dd4a2f32f61bf7b735ff997d5d18378000f1c38310f34d5de31f002d4a0694932c2e9674acb7e81b3bbf4ae16164ae440aabba805a1
+GCD = 1
+
+A = a80ed58487234dd9fc427dd327ec6d44bcfda741964184a9a4ecbef537b6f4c3b27450f55a337f187ebbbd3951ab5a189d2556ce9656656f9c94bc8809ec023bf5370a69a153d3ee53e2684e4252400c48c3f7b5c6870092d58754ad0e3488316234f58353be97761be8b31551e8c7de02055f4e773b027797bdf59d2ec7ea40
+B = 3b48b28165af0315bf5599a6ad14bfe657f4e25cb29c1d7fd942c07c5ccc2fa6007019c21297131b70c70b2177e5fab2e35fda6b578ab9710d3e18a89861e0b9042758c75e8231cb4cefefe873310cc140fe1be9b71f14eda93d1b3ba18fdf889fe2419b010310a56877f980960abbf62f71ec3ed842ca1e358af2ca49c1fe78
+GCD = 8
+
+A = c0ef4bf8aac609aac78c2d7895702026649a813ae8ec1cdfea00586d28ae8621268f919809553bfda490c1eaff89d939ef579fb498ef11bbbb9ede3949877a4721b40e1345a3f6972c2e2874cee23302675ea85cd7c1c937313311d75e000b181839e0da96b44acb5851f067dc7efdc94260cfac13fec4300873c4f3c5a9fdf9
+B = e64ae7744ad5f564242c4863d878ac4d8c116279c70a8590e3c3b873436e07b170c58c58496bc61b1c1c88e2f1f130292f5343b6a7fbec667b40567433f8f6421bea275fd86890da92ac30cb38897426d0da19146ddf5117ba3ab55c26432e0587615f0b4fabe4833e9a6382e354406ec4826bf64bf868d68d6da862461a516e
+GCD = 1
+
+A = -871b939490bd400aa629e2772b7f22ef120f86d950f503e8aea4a6241e43225200bbb539ec4459b448d4131497468ba4b5d1fa1c5dad0ed0f9a1134133bfdbe39aa379d33cf7ad57b3c8b7082129f3090c176813d3d2e526ba25ba84299a406214bef04a0ae478d2f457edc10f5484b52dcef7124ce3847e6c756f6347a727d
+B = e917c319b1d6ae0dbd657cb4340346be39bebe5211836541bd22638e0ab58e5d60a460676131abcdd07309c3139a430d40d5edf6af558587d3fa16a9f2ac3b4f7c3dff963f5805329ca0b520d1daa96193ac8a777f9cfa46a6677b2353c6fc4d4533407218f37ab81a433d219e9f330054fdd632502e481eade4e6f41979d9d9
+GCD = 1
+
+A = 1b37809529b041170bd78579c85f21023afa2b0b6077cf9663ac4fd87dbce5dbbf72a5772daba717f3b9825e4267ca323d0a394f7ff9e489362517543b2bec50e8e17caa64c67ac837b575ca53958424d7532dc74db431bbb710817399e951fe145fac0ed414bb8d74e4829f02a8791bbe274d49027f2d641912861cdf21646f
+B = c6fa35432508d1b49c8e5a047289027ef2e343a46f75c437cc7edd6f1d8cd1b732e95e1d05ee56cb62e675aef96cf6d0b9ddaa772249e34df232cb7a48199b38fd49cbb0cc17a836f6e9dca24284722e1aab1350ab220f03403a24b9e71bdad8e78f038d52034f61c52fa8d1d149d7b13a36aee6c4704509bb7c448dc4bdbe52
+GCD = 1
+
+A = -dbc538fdcdccc1fe7cb84b1cf5d702bfc7cf161b959184c5282f2cf4431c87128a204ec98cb1b38455d4bc0e4842562e1b7c8e4e5d1425f92f78bd0fcc981ec73d48aa750cd98a0d97ba1ca6e0653725530bc44677c93f2e89bd3fb3b5001a025f9e83561048e4602d31fd1bc08826e9bc0e6492fcc2565e320327a6c150cd49
+B = 63218c14728ea6dc6782f04587d3e0b9c36cbb7877f0755be2c62094e8abcb4cb0366060f9564b2946b5bcb2f32401b99ec7f29220227b997d431291b793e610a45586d66ae2543f75b6fe0d9d39704b0a3773543d919e772d7bd0039497c1d495528d29d97a7f4b42373039778a19b27acf99ece57f7182a28b740da9b443ab
+GCD = 1
+
+A = -b6c0363fd5205b632b7efe4f888f99ad0f24d3b290be0b79f0fc51d3c11ad30ee6c8e566a2612c2f6b07d91efb3c268cd4d2ed1b816c11d0947f996dedf7f3501f98851fd8dc61f1c2b9f572093656e9a1fb78c7f4de416812be2e06c45b61fa735e005ccfd5f87a4ca9c3416181b954742c09ed3ca2e893a4730e88547d307a
+B = -90e1b02be60ff20a16ea0641fc1a19b9ab3401ecacb1a827f6ca5d4476bbab77974e2a8201bf07a12b9527ad4db6661d20bab3b7b7af5528892d32c9102bf3055ef3d08509243fbc1eb8ecdea5ebd02b5b080a6f2bc1fad349b3dc6750f5944084961387e0a282fb3f80868bbb9c336c7a57e3f1118a4f89c333120bde48cc79
+GCD = 1
+
+A = b1967b7db0905871ec69ac90d7dcffe67ecd29c9fbb0f2f8b4543742a2382416ea9d527f80e5ceae9af07dc6a836ee26fca58a02d7ea600d6de51bbe22a7c3e4444ff78afe0c19f82a9044cc82225a3b3629005bd6d7a21e459b943dd0994d84109fffd72d14c3b2060f048b5f92c4b8456daf65526b1dca58ad067ddbd9d154
+B = -3543b5c0ddc94f064b3d4f7f65e63552014144f50adba324c009a0005204b3d2a1eccfceacffb0f21325497e12469108bef898c45ba68f0cb50cb456276e87a2377632a64a8e24ddf7f885be40e4f02488c5f6093af42490d5a90679b71415ad29d651f680f494916551082ee1e2c23c9e997c8681b7c39d1340f4fe57de5636
+GCD = a
+
+A = -1745d1b23d2b993024e718c0ef69993c747af9d9f6c09d7a014728c075ba7514a76360e1bceda5b00018367eb4c2257930daa358afc6c3504a0203f37550a55ac6654572120e7d1e2aeabdb98e2995580d4c2906a09b2207351d2a2a0591ec0bdffe7ef6f3b613b004b635ab4e70e20193aa51477eff01b7f08295592e860d68
+B = -811bef5e7f403d063e89c30e815719c0badddf21e467204c88d7d2d752111ea1d68f3211da12eb36f375a009c3b95b6d722dc650862ce4cfb239aa2656454a8d0d01a5172905778d3feee6e0175b0407657b80cf3454396c0345089ef7a65f0866878943e1e10b941b10f973373aeab633210f796ce3136a3a8230d2da7a1470
+GCD = 8
+
+A = -36461c07fb2fbbce73a2b69dff466bdaac04eadd813977b4d2486f8c57246bd1d00eab0880d163039016a8501712a5c5f34def4738477055f7dab27ebcae415ed4bfe34f7388f27e7c0b7f4dff9ccf4765d760f2ebd85dc965d1efa9ad9e913ac1e819ee6b07bea3bd0338a8a2188d8f6ad404938dd5ea002eb60e0830f861ad
+B = -404a2327270526cf65ce87fd8c2b5b6caeee39dbd6f329e29737d7aa950c594bb4d08109836a1f4b3ee45f67815da9fd4336d382964fbe07087c60beb709b2c2b99a6ec6674ab11c19b270a852c20b28bce8408051e91c68921c0925f1633fba0f212584c879423d51adf123162dd3892866a115e7383deca05c989384e838aa
+GCD = 1
+
+A = 27cf16768a0fc66c47b18fbfca79f8cfe704850d39cfeacce0389c41f45e1bb2b6921c758bb7219a1fd33e93a0e990abf736eb358e272c9bf33d33d511e17f7457650f3f2dd67330c2631a0b754a916b40dd021d00e5476adba99bfce8a4faa825a8f3dc950797ec7b85761872bc03c56866746d87526ebd5729f349bc8dc349
+B = -676d85ac2307ef3bbb049b04f3dd80a52c87ed3cb0275f6be0c818f5bbdcc13249a462a1ce7313acba8fc265b6bd6343425b2fcb7d6090a921a2a2b3194e4a7b842d6801683bcb16c7ce3fd7d75501deaefc49d0a219a07cf2af4a5454467e0b24dfbf8cf56eacafa69c78db266910243047c16a162dd6fd8167f3d755838030
+GCD = 3
+
+A = -174ebf3591f5a2fa379b3cefb9b7cebcb7639ad8850e267358462b9303ebbab3e62c5731ad3c89331f3e1ff8df8600bcb64d93caf33c775c69deb2ace4556e634dd4058951da7f52173a1beb37ef159443d9a0d65a8ef4bf1c80cfe2c759633f84fabd2c7ad26faeb02607786032eea5c503aa1da0ef7849dcd412abd56045e5
+B = c7050c87f19d7e800e48ec4183c019b2169ce690ead0f489a6020012fe0f4703878fab5b737e1c789890dd92f1d295902beaa1ec921b5719ca5add72d0c9712cca0921e32b978330b5d7fda19afa4cea9502f2e2e0bf361aacacb124e8bcdd361c28e288a7fd11d67eafd8882d785174b428b92decf2c043861f55b851a5435e
+GCD = 1
+
+A = 10a05dae8781376ff398c34ddf0d3850e318f9de536a5878d7a165df108fb03b0c829615ff47c6f0410647bd4369f5f073f190a5f2ddcb71b20f2b513fef58d41ac90b122e5e6dfd64555a9d2225563aed21e14356c23f3cc3212e6479b8e545289b62bc70dcdbb78a21abc12186394770bd7d0d34493659cf0b5693e7512c38
+B = -19a0090083b5b7efbd0f98d035da7d7bc15246f0d7c91d51b0505ad73c2250cf85ac64267d0c91785b4cb9acd828d1a0bb748136a104089de7d3bd4668a412861de19878547472357e1a0402431252d6df29be8cf5d05a248502e33a85142893e7c47e492c988d5b6c5d8653cb2f683d93b3dedd44a0dd06e635273f8d66e455
+GCD = 1
+
+A = 61839d34940c97acb76c21a22693240078ba28deffe1702a19d5a10e7dd2a405b6c59d88001bb271da25274e444df4978c40a560a94e7e80cdf2956db23ab77f6560ebc7950e482d97837dddf15c7a1d8df913c58f98974a8f4a622714c23af0374fec49682907fe4737234f93c38c8fbf90a0111e65c4caa13c1267372a391a
+B = 7810d238188ff40418ea2994e0f0f095e699843462cb242799cb00e96e4b2d8d81bbba9d5e3521d24287665eafe957be5bddfefe3f19c5f9d00069049ebd1e586e2b41aa4b975098ff274441b579b0711196c4d581fa9f3e878075f9803d4fa50bd5b404e3f91b3a98713c5f28ae95182e1fde6e9b33bd2f2041b2abc84a084f
+GCD = 1
+
+A = bc5d1252908108e46370a6e6761e7744f1149af2b12a7a4af8cc88324b88f07450ae12173d6913c94448204c80496bed008864c4b8362b1ffd2858a25fa47d2ddd511d3d330224d4181329dac0e149d161ba081068c991c9a8c65a70eb115525fe6e3b17e4c2786b0268ca454e5f72f39e36f8986a4cfdd64b42a3dd77dde4c6
+B = 83f26aad6b361c2ca5143b11efa70709d19d1fafd99b21f65e31cd71303c50fbf5c6a2d1deb48490d96092bbf63e555544eb865bfa35db8ec4edfcb07bf5e0acb91484c1c6f103068dacefe42b01276f9f5731e5c6f2b67472dace47544ab93920574e6727613af47b99072e3eb1d5a68a1dea6d084432c29d1eca4bc5251ed5
+GCD = 3
+
+A = 43cc14a533879f7ab876d003a5e4ff19d5155319911733240d2521512c850c292988a2c69760cbfe8a5bd138f96de7d2f8abe799041f94c917dfb7a750b55cd454d12b21c561181f6ebe15b899511f10628fc54778698a5a4f15bc9378b4e7491ef87261f0a50727249c7e126e21cc20a36321f9fca9669f1058a8bc7896b115
+B = -1a0862d017459bc05010f63d69a30fe93753048e39a3af8be2918b70807160b0056dda9b2463c39083bab5521e7e1c89948586d29a58c545b2adf560a7e4353e609c62adacdeee5cb428623ace09631e7b5122dd129b058959809ec892f78fe315fdf1552943dca104346b50d4de532866657a1e4d829f95bd6b83e6af45ac49
+GCD = 1
+
+A = -4ed6004e462fb6082286a72046efb94f9db9b7bbc1a4d1c82db7eca267092625d0325a9e3ad205c01e765b325dd86c4ed0fba4d58c02c0ec7dbdb67ad11b88d4c96fb349ef3058e240b6491948aaeb1023c74f50d3342411dc56c6ce3ce7e84c4cde0c849a197d9f2c58bc97f13939f13553f9fcc6e0929833901679d9e79748
+B = -84fbe26c9e0739e4228a961649dcf8af26d661392008af3e77c4a454a90f4e47ef99c277253f439678f0870142a520fc5a365671790b7eb8b8215410a0fdc95304d1f795c8fed0c41ec208a7e544e98b16cb9268224ebad34124b2d31554320ffaacdc5b3eec2d6a17ecee6adf8657830c63b21ea6b0d9aa05bf95bec0496d78
+GCD = 18
+
+A = -80b9486fd7bdac1ebc36c5187e21961bff9196da51b0f551f3746fc05952fb2277463ee44a97d16c0f7a8b02bda7c1739eaae39514cf741361c9b28b11f54cd0fcd198b5cb5208a910de0ef328b17ee2ac2bbcc87cd9f3226e155f4711f933d61b2eceaa2d57f8b07d0c491c399f727ea42297dfa9c4f181ef9a6b746f0200f7
+B = e5f39906f90605bd6de11c13fa9fd113c3f0cb852538b68101fb824ee36f28864b12242136c92bbb191c19259d063ce8205dd101c5400732b82584dbec0e51d2f14f45510c62c5c0ff67089a548c48b66f2d9f18f19628fa2b3e49860d9ce63abd1609ee6cce54cddfb2d77a4c848620fa8e1d1621552c00aae5a31afc529397
+GCD = 3
+
+A = -e8f32f3a30a2eb10d994eb5cd0bfc247661b24664d5e2fc352e336b23a5bd394c7a3d482b3b69a6e29a0315bcf9229e85a2fe62dd7e29048547ba47ad65abf56c20f7811483ca98a061ad7273676fe0bb5c839ad477688fbb550d008012a09c1f69f11e94a648c210ecca207d0b4867268219f13f45b5edcb2a8ff7067d9e76c
+B = 7a5e98f36054cdeb7498273fbd124659973ec0df401086601c8fdb869785831ac67024c9025e4a80a496c06824758efc37452fac0cef83ff40c36cb0b60078f9daa70d4570375cd0d86d74986536d46834aa7623f9ed64c2d700899d2a9f2a40e2c8f2ad967fb1ae2dc49a7b29a4db3542cee10cf93a6fc6ae8a1b87024a0f20
+GCD = 4
+
+A = d1541dc85654fc89ec4ca1de9406a1d3a9b1b87b02b81026131b99991db35edb82f245c7c53bfc6d4a1d28cbc27496f3ed7a90bffdad4abcca70a39cc4adb978811d424db7604b05cd7fad0f513421df67dd5ff94666b60ae73f4c0ac4cfa128b949c04b25dcbb6a2f218a6e2cf4fdc440be4200d36442d5433756eddedaff4f
+B = -d4db710b33c51067c22cf349399ad31f43f95cca082856621462a9cd3928f1f9fd09f435e04569702e18fb3afbd71ccf2c4b29541ad36a2106a2a2989b7334029740d07cdbf289ad33f04ce81431e5a401cfbb762a69c2279a2e60a4ab7e39a23802c9b5a2729f0549a5951cd74d7abbcc13b80b6e3bd17a59b291af81f7feef
+GCD = 1
+
+A = -8ef899beaf850c3c2010f364235bfdd5fd46060991a5c189d1d77024cc01a616265429e414af6ea0cdc3757d3b5e639842f2521a77f43941a4152a8d277c570194d88b15f713429faeb550efc0a1ded4a9c8e50a8b02e52d4b5f5ca069a61b6cd4b65f3201f49f50a91c60fa38860a04d0a1727f5e90f78029ce1d5838b79002
+B = -cf54c2b60bb0c9d95d52a8c5b75af42d2091861f34fccaa7e56e54e0e417def230bba28b0f32fbd9f68ae8f94b3e2a279e2ca87cc432980b0c6e56a66825e01377b8d88ed4e8df6ef615565ad006a5fece2475661cd02ba2120210f0e970a8c7cd2bab5069170a6613f257294ebd914787757b7cc5890ec5041e0e0aaa1c2cbe
+GCD = 2
+
+A = -60b243ca9b36e6b6fd48323edf6125957cbb16389ea59db94cb990615f9333a64835b1984d4c21386ee83b626d0ce93ad4c2b92d5f43c8693400f7d3be1320bd7ce3fc2ac84ffb0e23b8c283121c75ee1ba85e7dc0c46d8a59b19457b801c429d86e4ba4fbf36c37475eaf12b813018a7f793806a3d5c9561ebd294cef9a8568
+B = 738ef7b58be6b1051adffeca03c058b5a00345bf349d324271c8fc5ae6a320c40f9ee4ebd1e146e078b01d2299c031891e28f0905911aec07dc96a22c776e65e1fc528220e1790c1ef6c734c50c6673a255c4c2e441006619f85a2a79532fc565a3b6ea744fb4a34039c1c396e34a70ec502ac38a7e63ca9adbec823292f7741
+GCD = 1
+
+A = -733affaba63caff2a964198169497944099f9003261b051f46e64f4651d3b164ee764bc66b3eed8da29622502c40295d9cf02aad043892f4ffa61e23c4d0274f1fb64e104db53e2574cf6dd0f3f6aea4aba6a74e6775adb14a82fca016d32bf55263fc34cac209d39b86ceb90c7dc2ffd2626514e106bd827191236263c9165a
+B = e4ffb3b307dc57a949da31c34f38adf9c613880f52736164fcfc443f7fc77fd7fcb12984ab8d18c16e7bb69847ac80cc3b54f2441866e5769b5b137acde112e808619c2fb23dcac75ea15b0ad06fffd7b2a3f00b50390b005d5dc42992da236c242c0887a0b8f518578b3f50de2a4dde6cff5ad8edddd6590b75c8921ce69ae5
+GCD = 1
+
+A = -8c97c1e3b3de021a55e8cec46a29d8d4eb5d6d46067bfbf4daf42fb1dc355fd11bf8b7934fe3e58532e2c3daabf4c4ec11d8450a9e85e826f59d17a049a6446a2d38865634182e4d5338b084a72e30305ed51119495097a19c2bd16c63c185208669b32c72173e911b3ec1d2327591b7060acdaac473e4d8b1b77b16e450d6c9
+B = -3e50e9d30bb5ef2fb3b1d81b5e5a973df2f6bc020fc6ab0ce4393ce5d88151e399a0e888308133315f1f03538c8e0d4c8d75c25fa635f7e68105b531bc40b30c0c2361bd813ebd7a0c8d599f56f5c3a39f829cf850438d3dd0e33e7090d8fef1d1206a98dcb4713a818b1b9eed3872179851ed54f477070f00af38f5ef1d775a
+GCD = 1
+
+A = -8229f5fa645c9c6801e87025feb3fcf0832db4c07fb42aafa583f965c6dd920c54336a873f6d6404d412c81d3af64671f426c98494557929f4ca24b0a2e5621a35c73574c6e10dbf7ed7f1ba9942d5e8ef6edfe0b7219cea78ec41b24d07ca50857abaffa89c3e9992313bfe8d649758613821496a4be878f9392bb2d60c9ab2
+B = a237b3ae870bec995c99cde0268690a5f23171fa2c847cc2fe348bb9442cbe3345298de3042f1748a9d1cdb2c1eaeebd8d8f6f9bd40c858c60a846d7b3d6d5b85f02a657d6dcd70565e87b36f50bb153a13bd1791038eca8a9b796a6046cce7ede4f654126cbdceb8ef7396f9ef0e065d67d6e1a968a18f414947c36a3c536b0
+GCD = 2
+
+A = c6c178aa82e1c2f9f68e8fd33281941348c5099e2adec7486ee5b644916c543305b193a9816c9dc9da8c81f78a02bb0b71ba8c54cbbd9d4ae9cd58e6f667cc00643846fc652e63681af64e59375211e81ee7cf9922e93aac34988417f8f1c87ace781892f8711068161b2efde557d0476bae43de602a47fff059456d92893812
+B = a0f4bc90562601eed2905f4dc02a531b7aeb0bc6ba32df9d763e42aadd46781f6dd92f7fb4ecd1e32fa3bd828d8140f2cfd89c0eb85e03756aba497f81d228199f2f698e2d4f9b53b783c152347215a145744402d89cf21791c2537df76a8ea4ac45775a2ae21ddced0d9bf814e2ae8d75c8efdddf3d115e078c0f1c914ba78a
+GCD = 2
+
+A = -500005757e01917b74069287273a783792ccf6d9b4e9c7d6044ce13f490053af844f0b01b24455156d5a7030af1d4555f0d9ef12dafc4dd6ca3b64c91eab5e3bd974df5920753cbb5d98adbd61c24199c3396da16c8ea34dbe09713e9888dd82be81b881561a7648ae21a8ef990455bbd6aba81424e99087c47d3c48a06b3320
+B = b3c8b18af39f8828d8fe2c239bc940549e994cba15548ea15ce08026466d0a5c6d1929bb87437412516b57bdd9cefbc442385757035f6b92504edcc6f3f7e717c1e5da27c377d326d66fce8e45cfdaa239b9d812ab7b6fbf0e8844f7ce875b257a0b687d5cd6a6fb800d4e07d354fa13afb27c03816a2ce1713c1b293f4b5c18
+GCD = 8
+
+A = a38e1b6cf1b6e1b54531b0f90492791212ad5cc663dae74540899d1e3a1101064d9a0917cbb766e7d78e467088ff3f8537abd747a880e6f270fd906a0344963dc9388cfc3b2446c0ae4a23018f49574bf0665464dc5ea9a3d883fc7980e691e4a41b41dbf15051e5bc65b9bb05638fbd58ac1e4b954b6017afabe2cbda088dfc
+B = -b5208d9377d780fdfb819eb1ba06e5bb41b1aa8f9a0454028054007d0392721f6d33c00d2fa59f203a02033a801af5b8bd7e1f01ab94a6a5212b99c9a86fda0c5338762a16c948cb3ccde5b9502eacc7a463dcd4bf42a2cf7bb4f11e40783ec36079ac2f467365bb01e748244761d897342fafa0fa4a1c3a9bd42b524cc35933
+GCD = 1
+
+A = -3d16bfff0652d3ffa3724c505b999fe53d2c6cb93c2e1b53c964e87d68c3f9ba4688d968441a6af844a534f8cc7fb5701ba2666d9a0cc5c03b50cd158e39c1aec247a0af8638c1089de26695a1fc3d8b294570a9c7ea649be4726e80a4393f8a753b9e8d03e4a40a3df046c64208c72784ca67e451dbd322b8401d1150ead3a4
+B = -63afe6005395093b7fe182a0054419c5c2f4e3724da3fd3e99c91d6166f73b90442521fb0d9f15f506d5458fa104f4f9921b1745001eee3cc7ce3786e28da529d21e7409844a9e4e9c4726613eeee1cc573c9c8b26ef9a775c2ba03611cfbb9d1089f47426be6b3c0c6a1991a06d051230a25e12c94d6532dba66d8ea7afa540
+GCD = 4
+
+A = -5598f5c9e242569279c3e39d7d1aafd068cd314e091419b6752c77aea6518655a44958ff980898642136cb68ff8023efd6139c9aa832867eadc607598b3514b016392ec831abf678ea80a4c845475f180196b4e72d8e56f04f9f7d4616f1194dcff5265dc7b70d399bbf0bc1328ba4311e40c01054d167e568c8c7935a7ddd97
+B = 62521775d4a8548ad2c69d6e8a5e6ee2dbee7eaeefa344979e7fcc275de18dbea1ac9d3e232b7e8e0b6dcc3f467117f6a9767395ce32daac2feef7474349cb2529334e7b1696676f6ced8d0cf4fd7ea3ab32d50742079232419583f239eb68a9069e837f6bf60bf3775552fecb1db529994cb602c30f4ef3fc41b2f11e21d994
+GCD = 1
+
+A = 816608444e008059f116f9fcf67df60560f4acb07502804983609ccd9fd92662b8ba78b50eaf836aff2eb3f311a9e96995b3909012503d321d7d0bd72f5d8314afe3c23b4dfe9bd40cb55d2b1c5b7d142404fe2f8609f16c6c3498dc3485c3521309da2cd0dad8fd10fba7ddc90d632e01e4f03924e762025712d192cfd6f412
+B = eeaa92e3ffb212ed9f194689fe3458715e5e43fb0796ffe63033cc5cf3a070c71a31f57e3333e4de9510a8679685ab5afb494b2d61c64f8e10ca89bd75e271d235bf6221913c14fabcd35204e72ae738c43b2d80a7bd7d0aced8d292445a85a90b4afe7b0fb8f12382cc4c3a75d306b66dc61a2cdb49ee52a19150c6462cfe07
+GCD = 1
+
+A = 5c90c251515c2c1cdfa38a6b7b9f58ca0f6d31bb868774189cb18edac9de86114e72108d07d09541a651bde54f179ef022d77ab15045fdd65e791e1be31375799d497019c9163d16580f67010344aab3829b2ef93abcaf62be6bfa411f04ccc0968dc42a1cc1ac004fcc3957d91f4a970088d3bb57e6359c80d4b9179b5e5565
+B = 92d8ccc069e840b3fedc5dbb0abd6fae25ee702793f42d9d3dffa73e724aaf52451a525bb5e0c5e3c019904d3577c97ac47561c237dee5550f4ea5daf6fc1fb21bd30583cee44554770dc81e9ab41a64bf7fdcb48eea17af80b348b4b0ca8c90dae675a7e216cd50c05d54ba3c1684d9adc83fb99d1adb99793651185e5a1886
+GCD = 1
+
+A = c861db2bb040f3855e42fe369139bf5e8e01f03cacd4e4d120b1fe14cf3e2744efa751a661a882e993360c678fad65782c5245e355d2539b9319a3c54e0bc0bb1f3c2f6dd7af7c206ac4fcfde5daccd5ee4152d23fce78ef8f6c7fa3b475a2bcd3cd9b2b3528b7d6942fad89246fdf51f156f4d64a315655fd02ab817851bd46
+B = 65f2fec5abe10ef65207bcdaac8dde26be064fb559e73e821573416594c8348e48dbec702f5d2cb44f6c3d74da8466bafc5c470fd3bdc8fb1acb9cbc8f7d2236fdbce057fbf4433f02b1e8591e14fb06b66863a48074fcd0d5a1fe55ecc525e59fbcb08f937ba8ccb0905f748894d35e3531a5921c1af9af1ed3293273686007
+GCD = 1
+
+A = -4202ba4ee82cdcea8ee6df869fb9444ed38b1037fd137246b138cb8f494b5c361e24d620d8c7e6b269c72c30150b34cfd1d94d912676e3b8d275b91189c0969781e508e478232288c04a0ec7c4405b144d4e83aa639fe0caf6b67cbdef8c2d8ae56d410136c23ebee40acb2ef56e3be8e8d42045e728a07aac76e991032faf1e
+B = 95c44b59395040ef34bb977b84eb0b64653bd3236a7c5ff729163909f85ace02990dd4c7d97bf7bec6c72db02c67c66606678f7ed89ad962fee26d76539d7b45b658c613c75ba9dec551e47550494894f4af1f384a27ca0eb7e5501dd5f9ea431f14c83a170c409e6a87f11b636f6f36a7e04c28c3a869d54873e0cdc2bba09
+GCD = 7
+
+A = 30db8ba02221849ec72ce02129ddd99f029e35609b432ac840d9af5a7c1ea2abf54b82652486733fb0a4b11bc40ca6498407a3fb5438f5a1c663b722b1b1232c2babfab2b228c309d3893a9ad23e5e77753da94aa6fb5bfb61167529f7a1b5b7d8110abee949b78726e2008e775ee71f94d87a327f897ea2f77951ff33d60cdc
+B = -afa0403f5b009663bb639424d9ae0313d004cd2aa148d0e90b0e513eca64c4eeac3f45894ecc31fb39e74f6296abfe9917a77e5c2c3291d7864375e9dbe600603707afdd0d356b8b1e2b23f2423314be614302d27148a56b0a62abe48f52c19b8b1acac98311ddc7db9ac20d8fb296e331fe2d752617ca5c4542dd89c1d8a235
+GCD = 1
+
+A = -f84afb555df4a59e9ca24567f9515e0cfe5bdb0978346024b1bd901ccb31e83d2cb3e6ac9f815c4b0cdec3d67063f28bf132f9abeee6c2e0c607463f12206776e344fcf63f18a1ac1f3ba15d10a7df881611cfb60acf97a6f37c577ba1022744862a1c5df18890667590476963db2aa8c40d40d7bd1927f475716f72e8978215
+B = 5a49e2a60f0477745125b1f1b4eb64ba6999cb07d09afbc3a718d66af7804aa0d834e0d654314f6b44cf7c8f354ef695bc363d0580406489d04de1490c98380a6539cf1c145acdbf9877c8e59fb53acd8aecd8a3a8d1509c69899b75319eb252f0f5dbdf544fcb35d333aebd162adccb47533e6657d1f04cf41e7b79aed44069
+GCD = 1
+
+A = 3044a938a096cdeb4d3579789fd1a15d44c7ac60438f40bc6efde1229f7aa287908719473ca590105c5c439b0f9b341db95fb7aab7a50a69214d987e1b73bb804bc7a2fb47422a9ca06df3e6e73f0b875d35ca15e31281b100401b739b6ab1bc4657c32f78185e07949186f94776d83032d8b5de744080e9fc98287141a151d
+B = -fca7a3eebf0e4bfd851ffcccab2cd802b971d251547b74bb7cb8985cc1d681d67528635109ccbb656139b16bb177cc8c2fcc71f52df44035ca15341cb208643abd78979208a3a9874473d78d7827454df0bb04ea92811afc264f08d28a6d6e5537b042d24459816a35edc3f549481e6ff75c74417f680e273c54d794721fcf8e
+GCD = 5
+
+A = 454e13f0954930b3ae6e2dfd34c434ed6d29ffbc4488136d1bdca898b220980c2e2c697ac95e8e09f4d5cce2da2494c09db889d2e4ab73e2744d6729059b22fb5d91b9a592839ca84afe0722cbb397c17eeb0c8bc8477592a38892d757ee30256c88f78caef2427b5763be560c6d92b5b944858c9df191dbca884d241743074c
+B = a9b93a47d05aacbcf95ab7c94e1b35842ce8d6d9cf3cf163e7634e7181fb8d898bd830c2a450f26ab5bf01861845edc3626422f821da53ec7ec2720d0567b2a114c131b7d94454026e9dedf722fae83045ea7a735856b492aff536ff8826c2392f862b54e28a1b004b1be5925c44ba8a536002fdf6e3a99af04be4484a505b7b
+GCD = 3
+
+A = -39da7ea5f607693f629305109147bd579c48503ae33261e78fb55821fcb51f7de1a4f11275b8092baef9e4e782235f75638e56c223ce17c5a168709284461bde012f99246e42a90477dbdcf0be39458ddffaaf2266766f0ff9b75c05531b394fa134b3cd9e69fdf38aae23748dd21c969af1b7cd512311ec99b2eee65d4dee3d
+B = -505797fc6134c0838b6c76401bd7ba25e107bd2310d0c1cd6396d03fc7bde8c7f847c448b1876969f91363157739c4b16e71f3cd917b3924c9f8f32ace43b231458e77ca8f6e4a716f300b05718cc92e02a48203d8ce12dd8511b8c8f395595fc0691a4fa2962958a55cb46b84e0fe3fc2ec37d5ef1b6b9599cf11edff254ddd
+GCD = 1
+
+A = a66e1450eeb5e973b2b7d3cc2ef894d252d5aae380ca8bb6b7efd4d79b89827545dc96c4327e19dd918429fb293eb976a8bc74c55548392a1135f40863ed7e7cf3a989d0e9b0a1c9227ca5df20aa5b67506b9f0d5bf29a3ca566355cff7c37fc55eecc95873021b8d81e8136b806231d8300ec1551b153ab6de25910314c8c3e
+B = -3d5907a265fe552ffa02fb4fa2b786f8540d46f3e8cc6e0cfd12532a14a0c4b25803cdc1a4ff68950226451662a958f16b158f16476b4bc7074f08ed9846993975b6c70fa10fa64c3c5bd8626297c784534157f120989e53ad8c7dc61fa0742aace310111912165aff92416b03a29b34893efcea6f63419df46f713abe701963
+GCD = 3
+
+A = -619b87b3fa88453527005e0568d4a1e69f33072bad4093732d4519af4345d974ca845bdf225012e6c9520c30fa1d4ddd6a4da4e724e32713b134b09b88cba5461dece95e19824e105d75ff6360b319b22c8c8807eaebb118dd1089f1318c386ac6743920025597964e6e9ef5d38dd979d312eadce887030b029cf8fd2bb9f264
+B = -84260bcd7657972590f32e5bebb4fafd5622f9c5c0ea7d14e31d5e040300b04fe17fdc8ce4d33e20ffb11d923b8109d9b2240284b9c929dd99182fd5b9dded803cd2e0df7c5aa0aeaa3a37c4ba755b399cdeec569f21ca541873ee807771bc02a7106fe1bdf6fe2ce84e1a0d8dd67f5f99b4d6328621631d26441257da14b0d4
+GCD = 4
+
+A = -7f0fac4bb9bbbcc4a996836bb8d21d4a17a77b17a7aa5078b8948bab72ba707e714fec911988b22f3ccc912fd1b972ee9846a20666479a22a4fe82cc285c13528117004462b44a2a9c60f51aa3dd360e64009abea5fde183d498a00aff0e763d821d1b647cbdf55305be9ca2610a950c1c9b9fc71abf975cb21c208f899bbb6d
+B = -111bf64821ca5c6654ae4c11ca1b0f45db3848fa0ceed695046ac4dd46d2370b31c49ee104d98de64fc2392507bc4c73eeb1b721bc90dca88089f856ec584f8c6841ead8700b32c26870704696c3800ed0f0a7c4781f686e48939f7f09807e9dad9bf633b71f7d93ab2b88d35353f9f15ee2b59f126be18469820b6e7288e952
+GCD = 1
+
+A = -d73352d32f5009fafec3e83e40550d6bb5d5e55ea5ad4057531a8ac6a5999d10ca2fc0d02399b09eb9cd633728a34cae68eca6cd59d9028c93718aa513ce473574a81dd15f49c78f9c0d143a507619ce9b4aaa8e34f99d427e69ed18d5e019c2ce434d159bcf8ec687ef7a335fee06a9375f074ee49f00c27acdddc7c900c2d4
+B = -51b25820f5bf8d98b397bc5b13bc5dc31bb3bf0240b469da77938e112fb53291750e858f4d6bc9d676b70708aad68d923752255ef6ff9b455a127c3b3323b711764fb8f0678b9b2899dbd60b38742a298e1b0663c5fe96158f9944a904df0b55b59674f3e9a142e5783df01164066842dd07ba7bf5a2fa4f7bc2c93ca96cf7b6
+GCD = 2
+
+A = 6153c1de8eb590ee60cac8ec423321caf49ca270e09f2b22fa5cfa725db98c7a7c1bf741866858f097ff5522c1da7bcbfb505a8ef9fbc62b94d1b111f4adf91d7335773d09c79e55932d5de56d334de4249c6df22185e616502520c643a2d4fcce9209287c4405604463c9a95343d55393c9df09d7f96621f01aba3bcbb263fe
+B = -fbb6c9d45a7b7f74e680c61099231fd6d66858cf104996eb06322babaf954021366f37b47f0a8b8ac2d1cec7b74123bc975bd2628df9ca4a707b74610e05954187ae765757d166ffc38eb57e5f8d15ead55b9f6e802886410e020b62e1bc9540791f1d87a09f2c6d402bd5ec3402b7605ff61354acd0ef41473f6478fc658f83
+GCD = 1
+
+A = -574d2cf9ff62560ecde9af20d6d265abb5b3c96f0a169d23c99ff046f1420300a3efae574742e9c8cc100eb70e2711f4e15fce237d8b6d72ef2ae8b3058ee750013a862eadd720ab8d89a82951b58b82a61d2035adfc109abea315f362a38bde5fa8ecd7d51286ad61241040ede5da5bf539dc777c7e0cfd87146ed54653533f
+B = -448f6ae189500de5e85a5a41edc39b9b6c9e1d750c917f843df94d65cbc86eca46ba7f68603c5f7866a351090e9c65a540ad843a19a4350cb65e989e0e0ebca7ca056c97138fac06bebeafdc33dc672587c5e98a0f390645b583434000e1bf56d72752ff6b920653f09be6130c70a69df1c55446ed75aad63dbddbc76327988b
+GCD = 1
+
+A = -dcfa2f0c71c5d49ba462781a383deb21d22c1b40e95d3f8a97549533abf3c00d9531a1e6f43205d77a723bcfde5ec684b025fdfd182d95db38234c368953e67974fb165322a8903d51b358fbc4c9c03fe80cae5c0a93f4beabc787b8b5a56b90784b7861ab0ec588eca15c666bde4f6d9f838d966a14f8c1fc3b1378d047020
+B = 19a441b933f2b7301a5c87f7b270af630cd4667c7d587d4953e18d33e7c483706507bef68df702e9a6d778a9d3cc84c35a1f058fad8801cbb23f0d3f58e6dc890cf236fa5a9e53961cb89042f07b942cdfd3583a6e4ec6fc88f4937c6189b4dd5c198838fd8977f268de39b6b1ac49f291ba8512ec5ece81f8a57bfd0296aa77
+GCD = 1
+
+A = 2bdf5ef23c35d77343a6e5b545ce767178c6691e4bb5544bf4e5b2516a55f167823a1086f7bf8e0ea8a77f05a7aba5265809ea26d5d4b674b7eaee7daf188cb1db6ea09d2ce71f308d1ff0196d3cf6fcec018885127719d1a78ee27713e9c6c680632dc7e7fdb178f226c484a326bf66641d51cbe086dee1e83f42f5cf1fce57
+B = fdd6ecd8f5ecb061a73ee46278831b7290ae9091d0a32b0c47f99c1f7eda9a53f315ca6e9856594e642f2c14e839ff7175202f8da657212a9267db09eb9324e0010c6d72a7a10c50cfcd234b32607501b0b3b9452e68e87399c41e466b759bd08ac1fa8f08d646a008a8a151b49d487c9ac659e37d96a6dab3244c1d686ce14e
+GCD = 1
+
+A = 18c12b494b0f1916cf8ed47ff8aab286645b3ec752e5969d0a13daf2bee2d10770eeb6247f4e44b789492db476ac11514caff3d49d19cc3ac75d95a07333b9c273b246a08ce424b4d56d406b73a50f08ea2a09b67d3806387c3769efa7fc434a91317782e3b312591b5d25566fb2dd0f3c1bde31b371320613b5acbf13136f88
+B = 7eabc7819faf0d0c01a03c2027cbc938381b3546cb174d45a89af73aae10695a4f4dc820a966249e8c14987dae5bb547cf1025f70ddd7861d71e104d4012e92058ab2621192b1c1e0446eb852a5639821663720cee0ac48391eb2e54fde09aed432334e414e096570f13937f3d20d9b5aa939970d89e6b0130615f020675545c
+GCD = 4
+
+A = 6200bc875c3d4db509932873eaa4ad935b2a479078bb291132897ef445078ad2da29a94033fd909c477a868b43fc0209e5bb148b45a0638b086fa7e867a48ba00967f5244e2492b929d7eb2d840074eaf138deb3a47a4c1c97450428160e9dd489a48714ae505f73a3af06970110c3a2afd89f8c9c933531867c60969712fc6f
+B = -aefb9703388710ec605c6133bf12c0624694748d57b79b0d4ed4f351e02f345c9ff4162b5931c0d4ef36dee9e666cf833523b9ad881b7e1ebf591c5294367fe72d28ec4b92ae20a338854da9c7ff33544d66470bb2072ae86f07257e59d596329a558add940b9ddd9a29ab7dac275d50552de28531eed89e67ae7275a9f082b8
+GCD = 1
+
+A = c390d7788498e438568134f52451b10a0bddccba32a0274b4d939a804e8ca1e4e59c58f2b56148a04d7b769e0524627c744f76961c03c85e6f60f219c139065dc143c1c452d99997b6255a270257e83a296fd77f5044812f89ea818c54bfe1b075923286147ba3008ca05d749903b51332a63c3e0c6dbcb8b0c5692ea773e193
+B = 3cb3129974e2d4c6f4cd64475e020c669499501aba17a17b11ea6a51a5bed7f3bef8c880683a219939ec481b28b8865039d1ac2c5985457f28f96bdff900005e27e8e067f72785a5eb4fd657232c1596072ff8b32eda2177d40fe8b65f66accebc474a452c9647e279a8335ba67e2d5e95a706afacfacc04e7a63c0b67bdef66
+GCD = 3
+
+A = -87e2ab1bf32647d6f72cfac20a2e4c55c1fcaa20ab76dd1234c6bc3a0a0ba695de6d56c1ef1cc81b500d6430350f23036413c56628e9cf71e62d55135ebaae0e2e7af474a5292dc9254d1eb215126f94f2b74bdb29bf486b4b85d1ccc88da9f792738ed7e8e167e88fff53d871e5204937982984b5d72a51ff89679f9ad54508
+B = 6c13ed0236912c7e5aabf1ae54178a47a9d21ee0c3924dc699107be6867bf376ed6c1d8949f1b5f4611ed539d89459c8c24c642840864ea26cf53409379a3ea7569ae7633eca1b5259104c144362e48becf00bd27bac0162f6d8b0693e8eed04e5606d4715a692273942f2fd8c27586b4453ad31e96eecb0f4b075f1343d49e
+GCD = 2
+
+A = 62e81a546ab83254c10061e8f8153e1e19e412306fdf3b5bb348fc7620b6813109b3d9ce760fc1907ba1623faae111ce7a0b978a12b3b21798830fc6285ab14448aacf3596dc21cb060bb71bb4fa2cc7ad52ccbd7f83e78f3294b1913628c6b34cea9f72550757297e12b6b8df548f9645804282ee49845494fa0b7ba9a59ad7
+B = 47411a2f25c67809865dbee588cb8533e243bff4413bb01ef1c17875fc3d77c92fed10136039f01113a658c1534593bf18888f34318f6c942dd34e082f0d9094a438ed10ab7eb119d5a2f742685ff1d76aa546f7f55afc9b82d52776e43a88dd9db442187039e4360a1f7544b53e3630c39f681323652e08ebb4706bf5d10802
+GCD = 1
+
+A = a67bbf5bb5e2d370f27e98d964ff06d441422f7fa02676db1795de9355dd5cc57f4840abfb9efeb86f052153cb9846b82e6d133bfce07388d598faf1fe598be9ccf4ff74d8e7635031b0bf89e430e75e03be06e0e3f7758d402430ad31c58a873c57c7ed3ec290501e8fdfb6251520d483703d2aa079cd1dd07fe48f41dfba46
+B = b6b795eda9c4d88855db1f32bf6c914b9a259fbf392972f0a78158dd5be4e2df99e13010133b235139e8e1fec87a9668500f15ce2aae170c17760e76f024a468ddc6e40c713916ddec1ae28e18ff3e5382996a953e7f586fcbf18c4e3e14f58b14e95affb79905b763d38b618c6830beced0719b3d0f91073aede8a08b14b36f
+GCD = 1
+
+A = 60106e517082f29c14931a457aaa583fb9bb429a4153cf74d3a2e42aac8b618e2e64e930e035db9245a89ee1dd2865b2d6570feb8483a7809a174736e17d688fe913280c4ef1273ef44ed797ac9416721f8d17d4be0d5589338f6dcabe05c48b706d754bf7241dad172999a78cfcc27b46cb95f2c1e771843619d3e44fe370f3
+B = b0f3981e6d0a08d26f381b21530e4a35c5e7de444bbe0f4ba48a6a3339529383daaee7373f36a2df0324ef768b0ba9ce800babd233f4fb9e021e4ff06f96f4f4ccb04b6f5683b98dfd060c71264fad4926a2280d49fbb0fabe1c062917cf9adc996a20ec140a6fc253311b2385809bf533e8509efe7f6bfc96f874d688b74fda
+GCD = 1
+
+A = 49080f966745287e68b82e29bcc54fbc2df5aba1846cd31acaef733ed542b6cbeaff66b7011e28a7875b90543221949f0d9d84554a68ce146553ac1e886da795c19f6118d1d1ea3ed75cc584c1505063404a54fd7eabd3441037b138cbad96fe5729beaf8ad4000f174e0e2ed4a1dface3fb74e35c10fc5eede398de1a76f50d
+B = -ee87023b465c59b2a24c7c0c31504bf2c6550ea8aaad3b8b3d20e0fa646786678a2f0a00b534d8a7e300214b31d85171eb053a5404e5d784b13f9af16945d016c2d59dd0c4903c139d581ea546d82b72384108e8f7261b746f67d2e19aa41febf2c53b2ef470410b7044d4df30ce37c15d501d46d7654f969b2c146428175774
+GCD = 1
+
+A = -2f2578e32586590c8cde13cef25e1005c0f1583a1e208ed6603390db8ccc71b846297ffd0029c58af2d2882b767bc5be05d514b3a0a3addb09771f881ecf635c5d10117b150745d385f689d7b1ef4096696f1d1d44b0be51cb2a329db0d7fca98b8411b8cb307dbc57011633f59712463426b20c694828710bd37a846b4fe9d9
+B = 829c7ab5dacd008be39a74eff2152102ce10e97aa310a32cd3578d76d5e05800f8023f48d6cd71716a2e0f0933d54b88b3c16d1fcbcfebf786d6a28de7cd0308a73a44be86231b55f5377200023d432c9c04d82c09c20dba866f10998bbfbc62d14fa685f76c1db581939fc5d6812e770b7758befc37ba5e044f2a953e558705
+GCD = e1
+
+A = -6ebe34f64732da4e4c6e41ff14dd29b0ad338d2346525c0b2254f8619d40d7cbe9e952c3343117ae0e646cf8e97fd5d2b69f177aa83bcff3804999a95fb5d26f3d94e125fcbe36c0fc62ab20185c433d3cf1cc16234e8176a14209560bc07f24fdf97f9e49e73ff722c4a3bce7db63d63b9f552fad71600f9ad8fca4ba644538
+B = 9e7cc1a655037c6c4e2a519426f9405e1335ef92a54ef5b5926c0d5855ad6b7e8197e21ef3c3c8c0e92d0278f5737a7335099a6fd6e09109bd004745f6ddea7686afdafc6ec495f9b10def94f0c6c716d63596c08d73ea096c6ef7fc8715656c9749dbaab2e31b29f7cceee3690b7e3ca1cd45444f388b6a75f58788d6bce1fd
+GCD = 3
+
+A = ac5bb94f0cdde0558bba2022dae58d439761fd6cd94446a60ca949405375cf5f5b2b98d986f7d669c49ff343bce792ef9ba87a9b415e70f2a76e926adc970c6f13a854ce5b486f929b4d29bb69f6f2068cb32ce693a23127af06ca8f5b3da0fc8eb1fb3d1136fb22c35c8d93a6228cb1f9ad6387f772a07ce7036377437cdbad
+B = aa9cf693451c73a70363ed820aeeb9e54835a27f23a68c25aff34c6c3bb4d21cef73eacb85fecc51bd98f0bdbbb1cd81b8052559da5bb9fe5eaabb46307491d46cc0e60ff83fd0358b100b672789de6317efd7299f9ca65194afc220ffcb1723fcd154920526ad890e55de6b8d597284f712e984fb896a6880f707835be4c910
+GCD = 1
+
+A = c53c947d31f4b3424a8ae10636fde67e80b900feb575c7d93b230d827c793e13051a58b3db0773681bece8ab094ba492d8af1abee4a87ccaa237c762af2a09d37088ebe16115dbe2ece992c286aa6fd6eab4e51f90fe4fd34f471ce25ba53b97db5850cee9b1d7749a2a6e0ab99ca0896b37d26caec5ea0a162565787888989e
+B = 7b2171cf36fb8900419b63f25b77a67016bf72cd3b140e9f3819fb1bb4a346014a85038739693b7f106ceb3a9dda3c8bafb52091e6c74fce337b5d6d4549f016eecad9278bd51b804e901dcb453c8abab3c617fac8129db06b178bbfdf63970ce4604433a902066c10552b0682bf7c87a27f6429ffd9c362eb7d7ddcb4988fa8
+GCD = 6
+
+A = -be8c7b2bf91b752a35a44f1f31d189daee9f1c5b91fd68be66e4e3b775eba0c920e761cdf941133083cc116469ff69400cb0341af694d7bb23a0c1684157ebae9779ec55069a502c535021df1c0db9c22d95fe58c8d96ec8c68c1b0160845567fcb4076010b28ef41d050dabb6686a4be2644b16d26694acd34bf6561651c0ed
+B = -91f629dcf66ff63ea7bc22226857b49876eb216fb4fbaba1c253961ac2520c0dfa78518c2cff8022a27d890d8146fd89b2de5ce81b10e9d4fe5ae1d63fb01db53276351be7904694b7ae38c26fc35c37c4a947cbf73bd1dd17b701c3277298c600831a50c367f94d591f05a5aad66e73e2e2da4eefa0160452fd9732013597d
+GCD = 1
+
+A = -df9ad16c807289807764f63d0027ce58b2cd8d37e8161b8ce8372e26725b01b0e87cae054f611763adb9c5a81adad51821e03833c1c073344295b2e0b1e52aa8824d3e0a3de44f78c7531ad8b291f518f3dbb0e4bda591e18051a97b6a71c390304699d4b69158eef420eca18d4acfd24a933b984bf29664d44cb07182e94f86
+B = 53881209b54e0e2ee9d6f7ee905e8eb9afffe060708d8b721e24cdf7058be3b2661ad02707040af99e1e28c2ba3025ce2b1e37dac2af8c2dded84a5b7e90121893c393c8dcd461f77b542cb6851a7a2d74bcae1847ccc19722b869205315e5f23c80df18a6f40e20b60f926cb66ea32ee5257f12ae6d5a08e56525c8099adbb2
+GCD = 2
+
+A = 109957dce99696dc3c46a5bc784623778e3a5336e55b3d5d4bfcc1ea7823606b303b0490b922d1c1c79f7103931ac0148fc96ae0ed28cae06d8d2782df4e1b55d6ed99a8efb9e4f48561038b5b4190cb4d8536c32ba19058bfcc28e372395cb81bb381c4057dbd6b243f6c56063ae0ed3b122a3c7991ef71df93be71aaa21c77
+B = -d362c327be67bf57bfdd7865641fb35e65b7d956decb52fc6f68272ea65caa59a988db0fb0094a3ade660b84e82fe54bc4b2f423b4107a9dffdab699b73c7043b561b7a913331c61057bc4b861476cbf61e6092a4430b846d353d448172d2df7099b93320af3e1940e12d001e66252b5e1dd37d643c2913a6ba791c63f67614a
+GCD = 1
+
+A = 74bf95ed69a2fa141c60132454bcafcd7129898e9c47517f8a92166f70f5fb8bf04822be8f5d10e7ebeea87caa43df1aeabff75c21ea5f210919e16c89040eeb919da568f91be49c7fecfbde5f220b6e3169996eae8cddc818b06b999c1725ae5ec8097125ccbba12e8173ecff268823618d1179d727b64033d080b07fae693b
+B = -5e05bfae1bdc6b323e206083241686ae0dd51247127fb1194c31b0a831e5a0ff90eecf6afb62497e670d28265352d17d230691aea9c5c9aaf4d88e3cf45c8a9e18dad2310357354c6acd7d2028705ab36f92f0af8d6b975a6e10ce2ed991b3cbb01218361d54206a386b2310e49ce1c26c2998e0dcaacab6edb88854a13e5ca9
+GCD = 1
+
+A = ad1b5bba8c641e28f2564e6169c8cda845327eb2f3195bc4b1c85849c086d12a03e560eaf2ade0f1a823c9b30073aef5594b06b0aaea40cccd253cb87c752252c1a5387b62be6a42f92b13ca302deb94ae9e214a263572f4df8be343da759257f507e7d095baf792d51f57c4b70614d4f0f46a32ee403cec8599589ffcfdf17f
+B = 3c0b273ff69a31a0631713e98421bc68612eb589f5f6381378ebb42462225c62e308400bc06610f941a1dd0a18993c38db541e1ec6cc673406b53bc8804a9f40ca20eb42bd43d2799782807624d81799df7e887b2b996d031a7cc2f8f4905fc88e3342f39d68cca6780de50c7ee9268d3f87477650209d1f2a193244857e5e64
+GCD = 1
+
+A = -1765c51d99ec0fd64d6249cb0c8548b59a4e4cc55d35e9eb68fce159d01a035bba9fce5a8d5dcf5f82db7777adfafa598c5753fac278b8f34741cdd4e36baed37d088e0a09b1ba7b6c5794c4e40d677838ce0225be0de200dbcb0b6b5096667f59dab436e1a0342320f2c64630bdc53d069269fb1910c53a2f1ce2d8edf1043d
+B = -ecb2d9c6b9e4845c5ccc4ca1bb538c3b1d4b6fd440126bdc7308c6242719ccfd7ebbdfc3dabde158d4aab7858460a37de5a191680da4c94bab9d2a25a6529be585b54efec599d62d3a475ce943a7476c9849a888b6d7a6fad60d1cae786c3cd32dc6bb3fec1bdcb47edf92cf00fa3fb3a3643a1cb3db9496122b1ab88fb239d6
+GCD = 1
+
+A = 544e92babdcacabfdca63c6949f88ec4ada3ba0afae53586719acefd5c9246f211e1b46b0cf893fa755945ec2a09a26728b2e35e3c09aecb8407d5d8a01eab121dc006ce18bcef5e3144f64a328a5d1805bcdd5eaff50efd3a124b4ec6632298c121adb712cf0336d6b43ecb5333f918bde61c0a2ee166079b9b193089ceb32f
+B = -ec25a3c75d4d7453951c2f08a676c2b32bf9efc321fe0c3114b9284f5edebdcdc991270588bd539edd9679179e8a8112843fb7ee3049042c216f4b57d8c0a6a4d26acc7f65736a6b390975e0a5f21a1a003852aaa8ee5d4b09cba188f2fed5d71fa0fc11ce4fda6c9247b899381c88b416539548bc47b6d28f51312e15e0d186
+GCD = 1
+
+A = 8af4d6588f782ff57335ebb4683adcdd2e75dda35f17e0b6f559784cc8e079bc30d78a2777208c9524843e1de365df5c05343781b65ece72b6a0795f1bcd87cf8e2a2c74e42cd7fb302e64813353aa9c08b5db4da96276346d1779f89f16f47dc26fa12e9e2eb96f1aeaf61988f49824982309b3ff88e8ec5616387b5a26c342
+B = -9213f21fc297f638959e6de8608295b055ed5432d2ada370597bb5b0a31a532bb259bb6651510893e1e1817bab8ea939c05b62a6d3d52f7c0048d0d90d9101fe6d639d75f21c22ee4f6336fb9a680f9aea0824cf898fd0577faf65c0d035c9851405255f3cf9fab840089658cdded4a76cc2cfbb40927d05f73cef4fe709b83b
+GCD = 1
+
+A = -40b9aa04e53a7c697c3f9b597d6995bdb9560e1943e58e976ba3cad7c058991772b989e1425879ed4223b3c9d5be48b9cf79d045305cf9952b6a152d4bac31edccff549e56cf399d1743cce33d7b5a4d777abc2828b015f02035dbf097ff09315304a1eecb45509ce99da5909454a77e8adbc072b1a7440c8f61ae443affb386
+B = -a9af9c0800dddd44f43882bade9fe97a00fece843c319004e5e1d74c70b1075b651be6eb1cad2d685137d2d66f3a5fc0466e17078f13172debc708b6c2300620e29b3f72cb1e95bd47fd67f3e11c822ede6a279ec2aac2ce0758b0da2bd205bb7d4e4b6fb2212f01269c658bc3fd70fad5d95ef82e45c1ab7528aaaf8f0472c7
+GCD = 1
+
+A = -9e67377c24b7f6b9afc2245056d1b0246d4fc6e76c612fb1a54c6ca9ec33691de0fe9e8fa1cca3c4d3d45b80eabeaacec3c2281f7ab01fd2f8101a21ce217bbee62aeb5121ebad8d380a42df78432f829c50e18ed4dafbe648fbc1c6d754595a27a19b9e44e737af6b49ab47cd628e48d540f2f24923211a88860fcc3634a6f5
+B = -b35a48b380ef0f9440f2c577b1b774c9474bdde01b21313376412a7d52c6be642c21b6170d9bad7a4ba9d125cbaa9e4a87527fa0e145e8a97633613644afae42a2ab2ca530ddfc2e33632ef0a42e8cb08486555c27bc89b156195e55d3ccaa552d6168eec126485234edbc517c60af81c40847eb834c9640caac7d9e083a9c33
+GCD = 1
+
+A = -1dedb6393bcfec75b54d0206539cdeef4bb141bf96d1ecde15a7f9fd82392ed6cb838df37a503646c0e9ce00653e66538f798949f1ceec2abf4cb67a62be4ed8a128221d0017c36f5f204187181937b1e0399801edc2c9101d20bc4484d7a3f7638328b842fe5e2c07487acb9531e15e54510ab42c5878b53b750867cdfa0069
+B = 164741f045a849e2cc4bab01946e57721b49ee7ec01b1ec4728f0918580271fc97bc82183b053c47c60ebd146c1206d2af6be1533113fd9b19c9e1a002941e8c843067022c4c6acf7284dffc8c2aa7f8ffd6d145af0497cd48143593e0be23c628a2a90069d310f7c81d4c398f5a7c88b236584c45eac14d2b4c33c3ab7a09b2
+GCD = 1
+
+A = -cbd51213a9b0f3337a4bad0440002cc8aec8a251e2bff581aead81c896ab4f289be102f6b3c5cdb7ff48c2a8b589237adbcc5d3f5e5979bf09428242c47dfefea54b2ae0fa4317eeaa59cedcdd178038c6ee58ff61b1dc944716144de7913d36262775fc83bcdfb01fc751befb0dc0e67c4da2895979521c3b39788fd65be0b2
+B = 627ce2c0a30033724a49f01d9f0e9ddd72e8d6c8699fc227f581f0b44d70f2056690250f2d78d7abe98314903e5b3b16ceccb00512daebcce268d6ec2dc308e2d717055b351141ca9067e59541605079edf26916ed00a29347a7a337145f8bf9aa76d419f4487c2ef8b6bf78fd7501e691dc952031918036593e491cb87137ed
+GCD = 1
+
+A = -1638b7584c4569de34d87c6f8d034d6df0886a054d5c5642d53f11dbdcba47d36d2e24fa1c5ed0388e1a8ae0edf5237a09ce29637861350a9bb5b3b29d040fdd990008a72f49db40342f566ed246eee87c85664bb72dfb27e8b3cd09b981c31f055638cb574d79be7a473d99b57c491d95d4666d572edc5d667776c9870c656d
+B = -4796bcb8d5146f6d61db50f13ae2eabc45db83dc0860dfef2ad5cad4935d97c85c04545677e552a6e904f60b24765cb2e1f1b31ad975c4e244571b31a6dc5e2801815e7385ecbc4b55d96395b60a8b57d3a848f0cedd2438022116c90a5e96de6f6b43b6930359eb4bb7f7f705af8cbc555d5e28d085fddbb8be65033e5fdd71
+GCD = 19
+
+A = 18eafe6ee3100b8b79b6da5a4b5d774c3c7f9d93d323ad7a7b3256c163a09ae66ae998428c7afe7c3bc7824910d75e43bcf8a7613a6f67254cc3ef7f0b0e00beef0c68be3f2a64c9796cbec78ba0921e281e7ba36a2f55472345f30dc5e631119bf0779987ad50f38736aedabac6b27e884537a07fac6ac4f7d93bb2521273eb
+B = -8e8dd2dfeb32af3d3e94aaddf05add63797c5b481bcb2ddddc3ce26acdc72a5dd5050f2a800fca4ae405f255013d2b95e6e73e8f7d2c5c6c638da8cb6924002f6364e03b9b6fb183954049097d2b40ddb3f9cfa25c07b78e6c5a9cae94424c6009d631e9f4756401adbd4b48270105d9fb31f168e237f2156225a5512e6a1efd
+GCD = 1
+
+A = -ec8c435e15d86278a926c5c4657da8974a0e53c506ddfc88c3b1baaee0dcb9fb85cb10e21904c88cbab68e11521dd1b31c6caf5bd89568bf9c8e3dd5a333cf23508e443347a3dfc43d9301711e884402715f09570f6a59b1a0d00a75bd0f0e1cdc2db56e046d0c301af95000884b5e77a740ef0624e1b2266bf7cdc90978e027
+B = -3bde46956f72125f03f1cdd9d966c7dd486d96d28d0cb95ca06dd4192330a184806e3be63ca8817ae3ace9ce043bc83e7a5909d4f802ed9385952e2e778902d0d9c9f064a9d1456464783dbbf2ef27ad77e4cd4cb6f45a5f365f29174a4e785ce2728f2c805dff131b0e2fbc62fdf0a33b3ec77547403c2269ba910ba9c39605
+GCD = 1
+
+A = bc211d811845832e03d18cbdc470fa61b88e49f129726cbf9b56947cacd655babbf9891ed931bcb4ad30bae0c74ea8f493079e8c7ef32f28ed735192921f42e0e25a74644fa99115b8e5799b9241af4e2c5e6dfdc12426975e2a0d287d47bea84302ba639f17432bb10fd4be41ba5f666a51b51e54e37752521e1fab7c7704f4
+B = 206c5dc07062e2c92bea8fe3e60855895ba69ac90c9ef297d736ec740ab9c4b8bfe657fa6a2e53922481f1ff79aadd12963b8bc31e47fb63176505a516fed3df556dbeeddd224c3b5229cd9532954f1d1539dd249f7cf03e50705f71aa7d11ad6748c8f7a6c559b816a7f41fa51656ad87145a6385c18b02ff6ad8723cfb295f
+GCD = 1
+
+A = -f119636ead254672d1d9693ca78b83643e4eafbaead76a0f6a35646ce0064461c22ae899ff0a32b63cc9142bc19b1ef7efd4c1576e437f7e1e87bc6661863adb4f30ec72bc6e774d531e6fe7ccee0cd04ea1097dff2f04ea99986f0d6637ba3f6aa52906ef0a92c305a9a414e118837a169bbd5b3832a29507f3d5e8d1361f53
+B = -bdf4bb35662c385ae6e2b063761e53a84a61da4bcc9fa5a5339c1ed517afa4b1b1dbe7f41e5d7cde4864019cdbf9a6c660482dd74380cac666eb240756c462c16a4e8ed69deeec8f8a52783ed6ee1cb9cf3a13b5ee998ffff93e98d4aae93ae7b605557b5d7b509c127ed462a1d529c3d22133e26e04314e5915268f062d1a6e
+GCD = 1
+
+A = -6eb12dc070c7bd82172e8027e18be401672f0d5302581e678ce450c68d3776fbf785fe5c7d828a9308d9b634d5584844c46699cae03db59ca3c45d1b5510b718d2b9ff50126e86f5b7e4a35ac0662ddd820f4a61866c332fe97b9a720c2995028b1529d20ae6df83057d55ca0c47117c5752e260c1998655d648f7cd00d537bf
+B = -d11cf0282527809e9918f3307c2d67aa291bf3525ad42e93968a48d9b8bbbb07fa4c151b9b1abc1201556010ab71756224f95ac70180d475da2db8d43c1bc70279f35aa7e0d470f8a9a49d85b1d652bc710f4df8ed43685522f18555e8370276670d39461edf91480f945014e3495ca921c6853ca8ef3bf7d819339630a40a9d
+GCD = 1
+
+A = -d4b69a6e5f61860b38dcc92b8ad150e1610af795d6664b433ded41c844f2eec34721cf2b5fc4f8a5cba9f2389fa221f0b43f743ca6e7519b70a43798cdeb05d26077f2aa5dd326782a235b2f27a7ae41753fe5626aaeff1e2ab26a81350046aa855b5f3432cf004d01181796f24dd4dcddebfe9be6d77c52286d149b6fc4d8d1
+B = -31bc2cdd2c3ba67cb8596a29802456fbe2912751091d3497810c5df6c031014d28f52b833794e131f0d41abb8012f8bc6f909907de42398f03363cd37a0db1796ae6771265fd9daa5ecf0d06de9306fb4706c94cd2c08575469c6630f53a1c694c5883e9c7d3beaacb9ea4991eb779b53291de815031a4321ea55229f2b99875
+GCD = 1
+
+A = -aef1237d1e3d7c468d16741023ef183fa52d2432794040f9ddfe17b960738760fa70d7c5fff5594436623b15b7a8e3aca55daf6b8581e22c5ed359ea2e0c437b81e59d51da05aaf674e935b4a69abb07571b6452bd76f2658b6885e5ea87afe35a464b347b68148784c7a37f6c9d742afb5fb67fc99d3f195f987f22802684c3
+B = 8146d11b6bd45ed5c86913b34180f462b0bb73a41ff7a96a7e83331194dae5a0fcdef7cec619eb3178b3fe70a1d61ddfbc3c624d4cbddb6f204bdd7e1271260d8080e80e22b87d9b783cce892fbebeb0295e1c61d50b3da7887f4d14f5b2d8df7e9b2a2c7bcb14be98468321ee0b83b5e839d28169c2c5c3dfc52ca631e92a3
+GCD = 1
+
+A = 9deaf6a161438426b3de6da68110d899e6307e7a3d5f016f04da2ca3ada69f32baa161f3e151f898bf681eb9ba37faa2649c23ca0d48c6ebe2392e4d813ba509100fef502167d8987edc68beda438c44129c54833907b8833fed81e177a286e530b88e9cd6c09bda88af1c3d5cd612acdf8ba7420dfc6211a870e85fd1b08347
+B = -c1de265bca486c6b43bac6e2482a8d95d8708ec0c0d6099217b9f7e9d9013ee9fc6b5bb55bc088fecd88f315ddabb219fb8edf7a130392fff10d1714243c30737d8cd8ed8f1ec7edcb3c2f2322e02e1fdb807db11f27be86b2cf42c007eb0eba852738c8c0df2796db02c368ca81bacdfc5fe842005fce65afeaefc578b5869d
+GCD = 1
+
+A = -698f5ecf3dc1f35a56b40813d8b38a765fc908c959d24fbdc3d1d87a59f2e6c446d2e4d3df19b76b4c3602428345de40b927bf8c2bf9e2aad4b9dcc06422d23538ecebc520c27792ea1bc5ae686efeff8c060e4c34122159be37e087951e136d936e524234b1b86b581a88632b60be97d15c2792962a8e0439712074e2e58beb
+B = -15352d0ec9fede20325778bd77680b3bae3016f801bc8b9f16d3e9b7b590152995c51c61705830a62f12d105f38f64d1b70ac0c193d03c5cc1944ef70c5e0bace199914d2f944a725c5e10f1850b100f9833dbc90abf87fabfb50c7080b0e97d01aee2e118dd218119a7c6fc1098d64262f54e7cbe2c3c96d1342bea4b826bc4
+GCD = 1
+
+A = f29db7c700e22f97207133e8d38f27f6756edde371c81f2ee93c6760db47d76d6b7bca6743a4eec9727a19751b46a314b7eaa0f44325b05519b6ed9fa3b3ad8e9c4749f7e00b26d2d63a1a473396bce96d891fdebf68c9b89725a38458c47a7cd51b42338a1b15cfeb58945db703347e6cad4068b57e0896769044af10b1245f
+B = -2009e0b579f8e9274afaeba9a13b49a5b673eb7bdeb7fa6a80aa13aafb83dbdf630fe63330e429b954cacac9001014219232740414880cbaf11442b899c904e8d9cef92940c644c15b89b72d30f930a1fa52f7a2844a7cd24f8831f1922ad185e3c2332e515aeecee86362273bbf02b8c2a2c679e5ab996f7e352f27e6cea2ca
+GCD = 1
+
+A = a7e3d09900a1b1b8d220cedf76c70a8edb836e223b6fc47139a8709023e8805c2e90041e72f8e60d4a5e51600c48df624e257e166015517f3fcc6f3c652146ae3bfd8cc803e2e37ea5835cfe49e2433ae761d20bc36799e3efa7ce5f85b21741f10ecc54c4c3a1b46f927eed693edf63e0e46eda9fb7d47b18996f0cdc8429e8
+B = fc1e4e45f28cc46e4174bede7aabce0ffe6104a0f4499f8cd3b664d478e628ec2dc9435c12f729c037d9884b16f0b62f5a577536c431a878640c62b63c8871efe46c776ff0891a1ab37303acebdcfdacea92d13ae382eda3cfb015a1e52476a4caef44c57b95b19ff36797f26900b5c99f33b2ba54beade661ef4fd91266c2d2
+GCD = 2
+
+A = -c514e6370b6ab52d35746bbbdf5a8827a8aeb913d0e31ea5981b3cfe5ffe9b681b18809bccd98c87452740218bfd2e79922cfdcf95f3116d722504e631e01894d697cd07047deeee8bde99c15e9dcb95c4291e26eb82ceac34e01a9a4bbec158ed58d5fa09f0f97e3135f6732650d5a7f13717aa1e8a29fbe4ca801175528183
+B = -e9a2e0cc170101b34167c20d28bfd78745964210b5f113efe83b4be3dcf5ba26a10c8f723c6563cad462fb273f36515aeb9f43361520e098e88634aa37177066d83563130874ba5dc27ba41968b030621c5ba40b07013db9f58ebca18ec10508f262fb63c2d8da6df1a653b613b2faadc344db28bb9584f7c3b0366e36b17c65
+GCD = 1
+
+A = 4976b0d18f434098e97a9f6b8ba43f7d7a233ed341e0935fe051bf63d21e66635a2e16afbfde89da14e84f5ba44930c420b9d6e83e6bff0270c1704c4792f7c330ee69b5faa435ccf0a233306cbc2dca7606b343dbe7f2c0b6cb2d5c072d8f6286f208647642c1a9c08e538f83118ae66dc8033a142be65285bf9e9d07a6816e
+B = 3d557ebeba586390616482db869c981aab3edf3de4c7fce05f99f03036f1b550164f8212668b36f40149129759888e12ad315b9fa497104bdcb2d4a8a2dd252127e522925ea1a530b11b41b0559069ddb4eb0a417fb890fe720bebbbad696285ea6d2929e3a3e2d0a8942e78dc20906ad62436008ae9030e913ff8260df84c4a
+GCD = 2
+
+A = c998e3603ed032713696e8299eed63cc6483bd4e5a44714bfbc28d011745ecebcff75cc14c1d254957bfe6a058282013d0b8553c72bfb2572057353869465861465f14e73ca8c1499eac9fe9eece96d06f288ba1b150986cce21aacbb0dd5d64654c71cd208c38a10ead654e2fd37e6ad8437e713fae84c8050728b8835ed89f
+B = -28784b31434074f3a59e143f51ba6f396f91e3241fb913065de8d6b4843702ca7765c44b3730c2407c0185b4754fbe7736f5e1376cc5570e8dba8517eed816805eda098c5e4e3529c88c29eb38ee147328a36450f833040339fdf596e6845f838564ac397c2ce6e2068efc8ad6d325e82646bb08c4862e6b338c79b9f5c07d49
+GCD = 1
+
+A = -ac872b02ce59f0bc1b1766cb1a85cba4ce1aa5d4326ef3672047b4be318d95dbf0188dfa2bcc5d08c16087552a3510c9f9947f2d014ae8f1c4ed642cb67a29410fb0a769cb8871b42a4309e7c465b843cfa17d6e79fe33ef59d0056a6d2fc384a485c15e32e90339f3aa216bf0ca84cb56e1faa8a648ceeec6a89d261f91d977
+B = -18e879b7555d0c5c1aa9b1cecbbdc2fc3209f215f7b8a8cf9a3f1514836b4480d4a9c113109bb5478b588c7ecb4d967601049d5a5228444243a01b623cf516208a5aa216c8cea68d5ca5b091ba732ea5eb82d9de7e3645a84d41a1ffa11dd23df148f78440a7cb943b548017e82f7316a5ffbccb31125cdba682e53d22509fc3
+GCD = 1
+
+A = a135c563a95890c6adf21c575bf6717bbb6a2481149f3613dc6d6c181e065a0a51561b4d316658dfdcd473873e1dd8b96062a8aa590b4c2ce1a817d3e079c4e6b9b930a5421730e5924936c41a4dc6de3947d88f12bc2fa48910986729bb1ef31cbb154646d40ae7f2ffdc2d7dbde0a6221a8224a3946fe8dfde4f03988c1f43
+B = c85e8ed7bbf6910e4e43d5df972c1367dbf86d5baceb05ac17eaa10c83abfa4de9729e6fcd5795c15888d6783fa7da686687d5d9feefba959e719da0daa5f338c192705a157fdb8c9bbad8b58d36d0571dd9ffe8ba32411a6d796cab0db9a52fe6e2df1d480a2cb3dd8623e9db6a7890ed760243249b6f64ca5c4e73eb621b8d
+GCD = 1
+
+A = 639e2fba5d576f4dfc61214cdd5afa9f5eeaa932fdd7e95d8dcb1f9c09cbdf7dd6909d394e2d4485558a7d87c007ca72dbf2af1dcefa43b8056c6151c71f9f40e8d24769bbc042002bee339e8addd4181dd4b7b71693120e8c4a3ae3976af8a88bdd19edb85654563e41fb478ece1df2a68d1ed8edb7bb736bfb7cdd3b85c21c
+B = 8e57c76667942360df8c9782862619eb959ecb1946fda0dba0edd02b01612f04136de81d1408e579bffd7d61ace9976ba5b4ce45fe53acaaef451b56cf4283bd7d984a4b092ba4c63dbd2b75feb6bbb4491cf14dc9cad1f4bce7bf79757fac2644949bb584b97be06db746f891dbf478598e69547ea2368fd983d03b5f816a98
+GCD = 4
+
+A = -538ec7d8441a229e61189eb52f7c7d91202c730864898f527a52498bd1fa63203df7ab6c79295aad17314437b4c2e174040a7b982e36bcc1c8b3b3273e3f1d898ff1ebe863aec0ed9c2658a01563434ae75e8016fccaf60685397961562979b41d68d2c8ba6d110b145b927e18c3a3691ef3b63e8bc2b659817ccf6f381034b0
+B = -f68ed4bb00e45ffe409527a9a27676a158cb238dc73a329fc8a5e0c86f37bb8ba435aa55a77395fd82f8ed5af7988f6951418abd333d17ec3781ecacde86ef4b15890ceb4afacadef0cc30322183a39a1894c76b1f63667221d3ca5c6c31326ce16836a449ae73396968d100c919307cf0574dbc541c7ef47603ce9e29f96885
+GCD = 3
+
+A = -611cc8a712dc30062e174b550e214678ec349bef5228cfe60eda8c1b318ddc5a00be36457c897746c9709e85e223089b5bb85fd2a24d04221d1659356ddc1db61cc3d645a563a202656db88eab043a82fd3c2ecfd2e4086cb879dfab9f7bfa1523f0346abe9fb672ac4b139468b67c0cda63dc0ac5c07e2a27bc2c09741276cc
+B = e2607ad197a93c925b24d329cace976447c2f577a06a2a826f3345c9535152d32be9b8299fb03bb88f28e39fcbe00cb5b611db5bf69ef669e8a83bff0d7cb4ea9c135d6d4db535ad5b48701b9bee638a6dac8063b569ade1c92fab00e6219541b7e7b80af424a005fe4df9213c2c0ed018de23c88d19945194c33ba628065dc2
+GCD = 1e
+
+A = -b13ee553e1727723347a0b8ed446d25522bbf8cee992aa762426b9163e4605dc2641d709648f6d7c51fc588311900c1b39189ef71c7b60557c1dcb530a33f1ebc12113d292a935dfc49dd4c55f535a9f9f3d5793808b53316ab8d205c13f4f339b2d4e5e810ff1c67f22fbf7787e896a83d248bbc363735b00b6b29951e75467
+B = 3fe8bfb09e9402afde521909af5a4d329b8c377ac01666ba90ec0fad38c92c5b4b35dc7915713a4fa7f34c69b5aeeeabaa0f0c1435cfcce44b159a8ead0094e77939433cf664a97d98ec5ecfa259b91046f06d0f2a5d39f4fa6b655ddd3a26a50ec68c066ac34153e2b502c05620a610d8a6a5280a9f71fd0ae8176df518ecc5
+GCD = 1
+
+A = -419b6c3b67c23b7cb7e53c0ff1d43d5f9e6e8c701808cb2a15eaabd3374fb3d3de2d60850a82bc8f18c79c82125214c0228f4b581da6127d67beb52fd833729b14a584349f0d90cc9f3e5b18feba6ae6ba251ea01b96f79be631608918acbc0e734aab99292d7e1b87402b3e4b15e43d2412e169ba9df8c628a1c18d16101d1
+B = -3927617af93c1bd99199ae39ca78d69cdffdd71568c39630e1574da3d0df4aa8025f06e9eee1dddbbec23b6507d906c0f24bebedcd3a82018dd89db8cbb8a09f7c531610bcf21bc06ff63a8dec7827dbd386475f652676fb94c454f357d6a7eb9eba85bc3f3134b2d6237dadc9586cdb95ef27ea2d29b9f4f21a0e4fae14837d
+GCD = 1
+
+A = 7e69f56c11bd82f0e20812c9e10d7aedfa4b35cfc3d49dbffdaf0b1cd30c2a2cd1abec82bb129ac814ac9df39b01159708a4d56ba518408f6f370545d2b966dc166348d5bcaf8c272536c1cfacb718ad9760de6a4dcef5f55cea837a6fa709226b0760d56f046e411ef5c46b1e532094666d8fa79f12c34ebc942fda4cd36f08
+B = e258725b87f6e91f0de53e200936a2eb8e7a23c2e01f470dbfcc01c92866db5fc0a1c3174287217769b40f6fec2004703fdf1dc5709178c4a5e7354806af9674e6f4c9406169ed14ae6ba2c1fa55bca7f622ca20852516598a7330ed56e563d83bb3fc652ae542fb3370cb4ab8a8a719f98730a15e32a2951ccb69cbb485db97
+GCD = 1
+
+A = -b84640c3490cbd0255fa3944b04fe03453e2f87576256abc29d6740e975358bc4e107284490625f6130265b95e251aaeb6ad5b9339d1ea6e33ad07ddfd32b2725495ae19e4fd63497f89c45254e7d16742f2910b822462dc01660e9ce42a94b8c587934500057474110c5239f719e6184cea4edc27a5794369dcb32e1e852334
+B = -bd89d654257a72a48ef4fe626583f97f59391693bd27ef5654756da297131e13f2d4ebcac1dc5099d89a8476282d2e0c42c8ee4a345d1cc5080fe0796918fefeb2baa0992f3afd05419b1b50a71501ae519f5ae3b13e50456651afe7dd46e2b1f998ce20a6da5d7cba1d9d92ce739f8f32ae30a6b945605c52725ca6dee616cf
+GCD = 1
+
+A = -d52f37da9fcd540f6560121140a09a18562f4762ce95cab8f17c0384158cb41bb448039d6f4ec62a6e6d2a1941512aa54f33f1863a5e9d23eeea026f0ee486764c379d1612a021b3b87db11eb4e31f462523edf4c2926e4bd7bf9cd68598247663a4944bb8a82cec1c9f88839587db12f1201632b256bd92c950984a5a503a2d
+B = 74558224195382da434186436b1dd09a8ebf51db1e2cd7134674ea4d140f8c1493af7f8e78be4b525ea440954e643a5e87adbc7dae0d54ee84a3414606f2852758ad2bebd748245515c4cfde2e9b2cb55461aa43200723b792b731d48919ef87af67e34fd95196825451d2582411538fac8c1f67ca9c85c0585a3145d6079c8f
+GCD = 31
+
+A = c04e4316bd4bfb9e9c00cac5c22ce19a5f7008380d6812ef185f1a8d3ae406548a5dcf15f739f2e68bb8597796a48d52ee2136f30bb00787ba8bbd784debadb255e91c1757b7e8df939958841c7adc95da4298663fe666bd1848553107274a2ce4d589ac1bba494fcab6594d81ba5472ecb1bdc6e1ce5f4386626f313d4ce5de
+B = -1aaf10135159a89433a99fb6ab17aa6df49017bac9296b54f51f2daa01bfef96e01e41d70d4c2f2cc16a95f98a86b9c57040a3dfefa2ade9307a9956f6499e0969d912411b529689c81c77402c4a0cb3da2c1db788c0a350afb8c9081306219cafcab8315110f5d5ecd7a6f0eadad196b42801a33e46188e3b08532f62b2e341
+GCD = 1
+
+A = 5793a0c1d4e107b034cf07d12fa365f3fd156c51387afffa3cc3c4eb6325f777620e5f3ad0bd50e1810238c8b6ec6c7a54fff5a3ececb6ddafb1ec70188c678c146b90e22fbd36a8c5900bdaf4f0f11348e9236dd3e8e998310002a73158cee0003abf31d81ecd29b3d349af726d3d19689e5a6fe8cc67e1a9d1a467f59c05fc
+B = -6dc7282fd7c06f6e79af08e8118bd117aa313dc176c5aba1a078d29d4e925524b2e96dd2135708108dc20416c5c8d435de41ea20c6e3a8baecc0f7eef6d65f3d28e202e8c1dcde8d3ee9814e3aec2b2056ac90ec267a6295354feed30f40ea86860255c9eeed65c646618e137f2f64e2647bb5c364ee75a3de73166b85674e8b
+GCD = 1
+
+A = 8ca0257263d88970d9672aba246619baccb1d7d8d1e9f6bcf6048f30da9d5641d8c507d63e96b08e17e7911d0e3d8338a1a4d110d3b6f138662be0d091091add57f80ed8ae2aeee6060e4107885384a4db00b30e01e81ad20aa9d36e9709b879e46da2750b617d59ef12578d1d15bc5f534565cdcdcca27d6ce5f314d6eeb86d
+B = -3c73040bd6a6bef52b10db3e3293de21f8ebe5438fa0771869d06faa7a7b113674fd331aad905af028331012b10ff4841ba360a2cc89fe9dd68b787183d0db734fec8ae9d1dc78aed03a39424cf07c2d0d139e95614b258e461951387606f59ddf4840a703602c36ca4c59559f54a53e7137300a938dedbaea5a6209d089a619
+GCD = 1
+
+A = 6d700f41de52c707a7ef8692b5a51234c41869aa883b58fa675ae37be3ad81f739b9e62db5a85d48afba5bd72b3e002fa6756129ef99f52f482a646e1c4c9a946ce16a78a706626111c19e4cea52fb5c2473d9729ad40ab8bd874ad6452f28ed8e8cadcda05aa66a5456e6f6ff7116f82294dc9d6f333cec4c5ad7e94893e445
+B = ec2047150a0120ef1949869e055ff76b479e067a7a30b268178fdf4384ad8377a0d0d87e3fb91de288913bdc8ccacd05e2f18fef690623f415f6c4060b7db37310b09b5f500961a94aba6a0f752d81dcffe053e7babd022e7c3f292c2b7b19a1d2b356c202f6334df048c9d282c57eaa00e5037b6bff199554feaf3a20d18a5e
+GCD = 3
+
+A = -71a685c4c883c22612d50168560a95e6073e948e6973e79081cbb308fac7f0e112a5680713f901b18a87a78950dbbecac5e462d8931437c3504ef5d24442c91c3fa50b5aa157be57f2e9dadf803fee227656991f752b097162fe3ff4c1fa02d8a317bd57747ee202faf935f62dd46348e8b1592a56af9e9f2be07f180bd7233
+B = -537d956a8bfd896a9fbb603dc42470ebb200913e2e46263b5aae8f5bfef88c9a885f9f7a9cb244711f0a09536530b5f9caa80cc2484cc4ac767b65a01c77a39985116fc7ca8a0a1417eb316ff51888bab06331ecb8094b84c904fd42156a9923d7f6e09f7e99a89d1acff3f2ff0ce4bff9086cee2f38e403f7ef2a835323842e
+GCD = 5
+
+A = -dfce20b74c30e89efe9b9e199607a6dd26c2fcb5dccb9c1f4ca35a9182102851687daa615d35eb59433b583faee613a07eeee0f177c8eed5e26354c1e190223ce00126e96a36e935346fd9100383835238aa93017bf2a4f77ff80771c2f5dcc4f999f3e6aaaad748004aa7bb18933c1de3d8eece5a6473ba27683d176282677
+B = e2dbd07982ff7104129dfee0faadb2536de485eb101d4dabff2140ab2687ab8a4e77a3b26a7bd1daf62f5e9d2d8a0a3da5b0f136cf59cd27b6b458d8834a5b3d3bdf9fcaef0ac9b72352822f41d91518a7e4d52d63f937954994f636259c3ce13c73c7ff86b9ddebb206ae6bf8d2b1e04e16b1af02c48666a6938d80c7813976
+GCD = 3
+
+A = -13eda4578a7dfbdfa46d6c64e6ba9c955de15ae21826d6476dd2322aabab0bffa3405d9d07551259ae6bb96aee9689008de3965f918841b19c889d47c568e127fe39fc1b4b6be2ef357a3ccf6aa3ecd594af7e9d40464c814c1078a32cda9f8b37e77dca34aa11ed3f3669487b1b16197f9f7e3ddcf115c08420189036deeb23
+B = 53cdfc1c082d1332cf41b228ff94364a86c917ae50b99ea2ffd55d36fb3543c6dcb34bfd66cf91acabdf5015dfee0bcca38803c6faf236e9f8740ddf1d5f74c221b8774ae80be322a944026fb1c45f9ed7f0eeda8398fe1bbd2ec20a6a120efa63f2663271cdf6ad6c14bb06dd07d46c0267016c60697f92b647027c7b10d9ab
+GCD = 1
+
+A = c04fa53c0df1cd8754d2d02227675e68c78389c2873f69f4eda790be543aaa67a08a728423b9df14897aa4f6132fc5f645f85f48c572800051903e4a1b035539e24340521245e3126df97df2af049dab72ef33388f480cd6bf5324119bee3b7e23f48cba93e68e7b5123e74127928abf4501814fc0faab549fd6a0a41bb5f566
+B = cc0e8fc19a001965770a1556f34883e8ca343a6d551e4787e33baa52111982149c1f2348e1a657ea609fa2768e3a01c4ea51e0dbda32d36b184477edef1ce1e1a0326af8b402d24e04a5fafffc001a9c1034e5d6e5ec3ac5e21ada821846be0b17da49969e3fd7d941d49906e75bb89ddedf9675ff7590d4371ecb2be98a8e68
+GCD = 2
+
+A = -4b7445cc1cb1fcef572e342a8a461102bdd0f6cb0a59e771d7310a6d219674991797448107b9297e98af1b07afeb0395be0181c65f50bcc6683570a7b5e36ec180e0ea074155b80879163493e480aca3196029c9dbbb13b61ccf5420ee76125a61c8017b1a0f9d3543d39ebee85812ec46499f1b7f4ba313fc1c82d9d663a95a
+B = -7a6c6f76ba62edd5bff66725b6cf49cf0b00d5875fd435430281c0c4f7cb979643a927962f1a487076cb1d8302c0c930dbea5f870a7d6a519960f8e135870330efc694198afc49d00fbdc024afe5e9da0e30ebb301dd93beb71b440b0201ab45c492fd7a339e29b3faef22f42819e80f161057f03ed02b1cada4f7335c74728a
+GCD = 2
+
+A = -7915966851a302e4b76bbf48ca4e7456cb5e39fdd050aa4a0b8fb09f89e6c2fed20c6815bb2e14632790d94dd2829762487f117fb9234a9514364cfe2b600f502edb4fca5431661d2f5433d2a734f50fbd60c773a7b356315a5878a9fee3d9d444d7365b833da23f4b0dc5f310ccc3d574954b4a0398dc872c4412bf0b80e7e5
+B = 4b971b22bf6fa2c9144d33835e4beffc4951107231e9bbeeca1f4e3d25f5e75c44205195989470ffbdf2135f22b33ee9f26455c8bf1e11f28a150dd492ad6bf1419fda88048ed3621998ec369649ceb820d99f5391736635d44cee6b06cee5b7bf2e16f92674236b3b65b39ff71e44b12252ae8a38cf2546a4531ec56c085464
+GCD = 1
+
+A = -b4653953a6df9866808a1e6d02485952fa8fa5ef70b186d61f4c2d42bdb0323a0610353622f60e6e3ce5b9f39ff3d40962e31b464e1227bdcda945c35d3da2f58899dfeab9e30b7bf50c8b1f677ee5f071a02fb97c941c93781fba49489cbc3339dee3416b7e4c2e434703d5142475f2bb93883de6488b347751c382f4f4029c
+B = 2e3363804655cf0b6348baf83da0fcdc2cb97c9178d8b398ae70efe00c1457ade98373a90d1819bc88e7070f733129f6f719bc925b49bc3e0dfe67ab330297b865c842141bda7f5fbf340523c1eafe44e1c83092d14e62006d883796a4c6ebd9cdc62a440627c1b65507441f8b1e94df7e85547def0e0ea7b5dc5e6dabde8adc
+GCD = 44
+
+A = 1353645bbfda9a372f5c7137b03e589414df9f3f70bfb98b5f10f5a71a3d859af9bfc3e6caaa15e5c9c76af0ea5dd58a4867424296ec0c09e4a6c1886e203ea38abf038608e88fe48ea94a4c8efcd4e58cdfe8558162878dbd354eb72e59df737385ba396a8c1d52228c8b11033573093c99961779c48d3c9ad991d700a6065f
+B = -8e3097c84a7ee74acbdb67f5c66071240d0cd1c37377ab8da302ce8b6112dbc8fce40a3d37376774f7261d8f24035c1eb5083287decdf9edffb0da1899fd88c55d1e8bff9341331e599f1a18dc5fb93b6ff988150727ff14e83d50d4772ed47423eaddbfcb052d796b2b6459e895b71b24856d17a4d0a11a312b68f4b9618816
+GCD = 3
+
+A = da8931532f23b89081fed3430d3d8f158139c5cae9157eaa800926a8ffa5b6056d17973b25449aa3a8b7cbaa430c9fc890d3b4cd9b5b7ab16b60d1ed988a7bd5a80bcb6843ebda22f4f92ba6a14cd18a4b3c209d7e5eb8767f2c468833b44dc99c0463a38ba085362d50a63a2de53a225c2a18884f3b996a0ecadc58533599a8
+B = -cb6f15d26c0885d8dd9774ff5eb8b0cddcc9887eefb1d3c3b58b81492b7904a295ea3b5ea6b9efc42d88a7229dbabf19fbaa34d3935635699bafb859f5fd620c7e625928e6ba526f45051bca802c599e61102685f193c47def95f7c31837cad8895dbf85ad6eba7fe6872a9e346da18b0db7dba32a6929d2507f0e6b73eb2c89
+GCD = 1
+
+A = -9ab625db135647e562b78b028fb7c39678991a2121801ae943a1e04493f8e3086ac6c1881c334ba49fe2ff1e875a983ca38602eeadafd61ac649ef4ec78cfd3c11a6bdbef360fae04fada90d6802292cb90ad0cea6b1d03a83f200a88de82873400fe5eb6ff94a1d6c981a061b1cbb27aea63bd245a680ec44bb5e20f3498b74
+B = -e41eff8c883053e3a009ac93db0e72c495061659291ba567d19b2825149ce68887d898abf73d26058ac2dd9d7dfae7602c590ba619704f7638a9ee011f1a7e257696d504491e10e0a22feff1aea4d68051f9c1cd0372ee336f20ea5f189540990450e18a60bd525b84731e1dc4c004ead9d610758007d25f7538c23434523cd5
+GCD = 1
+
+A = -a55e44fa3a49bd55b502bec1041aa0065977c99bde1f07586ba454fdc461641bca4d4c1fcfee771b7e961917ffb1cb68f7deac84e48002568a53a9c9ec5bc861a23193e52ad0599dd1a52d53ba1cfbccf0a854101cad2e85a76861a844f3719134e431b0acd1056719b45634fd6014ed085a67cbb152d219aa80888bb9c8f5cc
+B = d0603fd46ccba49ec9d635f0080f9a7f988083348dd4bc584116b2cd87efe25b2e900090e593db8a470c11d0801f53cd3bf1d413d417a403639098798388af0a6f3c3b645e14ef06950dcbfa64518403777f595c87b06caa82bee72853512e96320f54869dc73d06962a9885485746a1969bd971d17f3b191204651df5fd003f
+GCD = 1
+
+A = -e0761ec774e4ba1f11d7df5a6206b94247f65be9298e5b808162e4d996f6bc5da42093c8453f7d4f9e5a5d10add00a4e823ecf9f032ec418adb1f57775ecc936e18ccd5b4131a26dac7f0679e9784d192aabc027f04c05758efea54204f054fe3f658f8b5293196cfc16fbe4a504d03aa20e4f36a60900765972c6869667f7b6
+B = a57dd9d36cf7cfff4f95eca89b6ed87c86272e71f98512226f0b7c8ca338da4ebbff13b7c42f768ebc7a8671dbb6f17544df6a03f316283aadc6f4686ed3381e77eb27b4a21f87c03313044df7027820aaf3353eba7fb1c6792ff4a5658ceb6ab44455f108c8f22b1ac3d5c3cc33e377f68150943b7291b072106939f99620c3
+GCD = 1
+
+A = df31b37cb4ec55dd54cb1b91c8116b1e7eddef50f7d2f74ab29d83e85723eaaeac8e141ebe3fdb8411f60814e186e0a22da9db53449a7063fabecc439412d9fc50056ae47dfa9c9ccf27c656c0e5c7ea3e78792eef32dea79b9a3cfec8e0212cd220f8636f9b0134c6d76edbc7a0fb2e22fbd3d454d8534aba50aa162762bf6f
+B = 38109ed7d8a9666f0d7768190868a23bcdf08bf114bc64c29527f7e3e8253fd675d98722f92a9b849f5fc7d53968d1b09a3428119ecf9401c2f7d1c08225201d0424249f9a553197e1b1010f89f2c2037d8dbf136670313c3be87e636e9f322a1a1ea99375f8e988a0bc6ca4c884b42a9047d57a053e4ce29db67aa9f1c01085
+GCD = 1
+
+A = 4b7522b0e3d9b1b2e7bcc9f9a602ec5822a40d5696cb8dd88e8cc1b74a3bb7559ec470ab6e2e14e370ab7f22890c0707d07c0019bd91f097558bace0383318497d27e6f2e98d337d52b076b586ae847ec070f82594bd24bd5b7bef17443a5e1f550e4aed7bbfef7197f1a74c809ca1b289503c65822ffe25f85799ca6270caad
+B = c12f0559273fc7b71a25998ba1e00a1da9dce1d8ef35e0fc96420cd0f5c0c3a9d1fd7ada87896d2f570d43be3e1788bb150cf1eb27d50d98c600bdbad722b7517046366eb52b3bc2bd89e4c098b100d323da6ff8bbd917273e14d0cf57362e7f94f4ca3f0acb878993230146ce8db6a755019b48a4b7aed135addb6a2d74a984
+GCD = 1
+
+A = -f8e741bd10bc64eb911130e05457c0043feca6dc21f0b74f9c53885e3714cf65ef6ad9d199f64c43ab4b89241e675c2369a115faea49f718aa6c51672afda6f4ceea91f94e1c55df38ddcf9ffd3edcced3dd087745dacb60c0b651907c8b40bef0cb68f42c08165e51c915d9c51fc62f9dcd4cda3426f3eaa18d75be0c19d4a7
+B = af1d8918fe0250dc485ea7cb5bcfdd7f3113d46d4cbe25c9a2076e29139303e559c11d3c440011bf754b20780f41b2db031a5992488208b20aded7a5e516daac9c0244fdb5cb5e19016cb6d243eb8fb5edb281cc5f19d22af0a0158ec4e672287dbd19ee97026cab86a74b1415509a7836862858a8ac4952d42bd6027a923eaf
+GCD = 1
+
+A = 6dad2dc4488f6c0ab132cd6bca27b198edcc735386c2d15683a67622ca8772a476b806be8a5970b4cf64a150c7eac469c17fc8c61ed21ff2fa9eb38645c65b8632e9b4096174f6c8a0060ea48ad21e45a0442ddfe0682baac76f12b5947e99f7505cece284ae8c5b794e187e7e3fc4ddd7cd61b17d82e2d0a51224eff1126014
+B = -51381a511393f164fcdf6b17a5dce22b3e902ea3d4551551ca88e21150a6ad2191dc1f34711da2009a23578c4f6dcf76da370066cddcd4fbe67590adb525010f169087f41352452cfc4fa0ff304afd1119d377d7b3849750062e74c6368436b9de926bdd6174c1e25e1e83d02030fffc7907e6e2ee6a793f8fc6cd8aacbe3769
+GCD = 1
+
+A = -44fcf777c30334efebeef67151586b2f337602ca4905e2ddd05b7bd51b24e1510622603af6d17326fe14b476f1bd44b29498f7e4573dae76e3d0acc79876cc4d6fbc1218c99da9514def99f615a5e37e0b95c6849d9b76c3a90249d6ad583ec22bf8801ebecc66fa4513260d5e1b4c65e6744964b0f537ba5891fa44f2ea851e
+B = -20bcc244584a8a859a3293bb21ba5ccda6237f2598af0604f0e9c76fb969e6a1a992ec958df35dd0dc8fe37b3516319296359dcb86faeeb6ab9a48257883b6cbe2064a6215d51dae9ae49fe0aa77febb7b39f1f63487a24b5d3b48ff6ee56eb18816f074db12d6393798648c80474d9a31dda251cb7c487f58b08a12b22a9263
+GCD = 5
+
+A = -c2202239a2b5b74c8bb04abf42656a1ad2601637441e6f37cf0a0759df08628197f50ac650cd4395d9b5b7bde8bc85c31a5f2dc12a11caea2f3b2b56a95f7d89d9cb5e43c83c4d4c85ccd7b1a74a7f5bea1596880f574bf653f2f8131a9976fb233de02645f1320e47421766f5e396d675e1da9ca9a8de8a587f70f8d7d77ebb
+B = -b0075b95e49b4a1457bb911caf8f8bdf2289e5ca47cce4806538cbbbabeec5571f030344b3b8fd3877d562a3ea91d659a4007647d6c92747589b6ad910db0ad116b08a9c046ca77435d8074f2b1f00b18df06101c59d5f83de86fc8c750f2c6a65e21d97436a2d061648339c8336ab936412f77e710a12dea3b133e9c4223de0
+GCD = 1
+
+A = 68d8ee04cf030d2566eff7b8d0cd6a0afb53c9d430325d17125010253ae6ab61aa741f296f5c4d58250de272f43885739c20ba3784b72c734a2ce9811a3aa8cd0c6bc3ea38597e1ea39457a9d7d7033ecd39d697739f70421bbbc56c8813c44117553659b0874ce8bf7e327fab86399dbcfd4a4d69da73d70c8b9e92eda660c2
+B = ba9c80adb3b324e3eea0ba07893b48da9e2fe17374a87c1a678783446d4625fbc12ac9a815e057ac7d3e41319aeae93fc2e2eccee7c92bc15c0a13ad5d6fdb057cab8594b922ac4e51c0f861b46249c9a76f7d1b9583e736d35a58b1744a469a9e77ad66ee84c8ac5a071ae4e8449559b3b5a4e52f0a457f41a3edca74d5a8c3
+GCD = 1
+
+A = d068b4b23c3e4ff3e0d65487134aade29da80c0765ef74e1b2f2b80b3cdf9d1f650d04959c9f5bacad62b4ccab9744b7b2b9adb15a90d140b3f16fde0976b0c63b6fabf9ca2fa838a736a2545dd6b3d927cd94cdd1d60f7c223c41e457a435381e3ae0593bec0c08a4e6fc3f5deb5f3cc07c501007f7084b75a2a9a49d229996
+B = -5d08bbc1c5082dfb7cd66f7cafe0b22644f1487907e7c4f3b9fd41861f9142d9f0ef41088d019bc0db541b0c40b03a91488e46c1aa3c5becbef3596ad283d21b7ca531e2a2d9d9228ab64c86da9e9aa439f5d49fbcecb0e28e5c0aacd7001c756eb6b75f71e847552a07734afea8ab4ec56d0eb2ab52d4b8cd843018e97bf840
+GCD = 2
+
+A = -c99b2f7ca90a10481c0d8c9afcfed463744f7a915a207d4c3a2bf182a1ef0a8792857475804e613411e9d7caf66d62c3cb1673ee654a4270426c738984c204e82b662a22d79e7916cf1075cfcd5f149a0555964a4df879084e12a297a1ebbf7653b7bec92de19388749310243bbd735dd407cda8459a4e5531b9892154764330
+B = 14181d2c758471fa2c1a213df4ef08671d3157f7582f2f4646a66b0b730c1e66bb2120c925b48abf0676b567d2f776e6d257007ab1e46423798728d95961dbcfa2529e53e985d1349b882a5a11395ae35e034cda6738203fb3bf3005c344ad93813a2d5ea49f4ebfa281029c197cef56940af09476d96130d00f9fd00f53baaa
+GCD = 2
+
+A = -f63cbf5915fbfa0f0e4ddbea7deab610187b6e177ab0b07e89208b9bc7523bc0b8ebf8959824309dfb546d476164288bc8e5519cb77ee7ff321e3fd3a78cae8b9b5918aeeaf09561f1a73923d541972a084af5a0bd8e2cf437980deac2646bed44a194e785ec590e998b2623a3d22f2ee57e847b9175f18b082a639a35cdae04
+B = 72b9e8cca1d38a34091abc8ae9cbf551f981d03f0d6062ca7a047dfc29fbc9846583d5edac6d99cd9e13f12655a4520352344d8e88fb2232b4b63cb82147847b6ae4834c0f6d6dee52b5f892dec5843aea7473e4acdaeb75b86e62b08e29d10b0971b1c5ae6f345ca2f1573aca88aad298b4ff0df5ced6e4c51d76d8c77ae199
+GCD = 1
+
+A = 123cf2915d3e2de6a3ee109f3232a4a227fcd05fad8cc15f9717a788c88462fd53f278b72dc87499acf2e3517438be92739e04b20e129f0643bbdf4c7fe4a4982832d1958c7e80985728636ddd4be24b1df902afb53066879df8239004a0872b5760473de85af59931e0f88eb05bfe306395ac941485d6a843d95f9cc211de8
+B = -fb0bab19fced224b475243afa5c308ae32f9d9e0cc7d222611506ec1709f68757a60bfb7a881ca9de80e2e06b4ac8ab9bc95d9532eaf65bb88100ff47d5950831191a5f064e6e65a6561c4e810bdc459a531a7b9abf561612f0ca8c5f94c3e7810630e117b13fb0b443f7216935e855712694e6f6b0a229ca8a867e6ed55ad4b
+GCD = 1
+
+A = -a5c4c4bab4df869fb46ad8a7a3903360f71f057c1653771ef7b60f21ed31114d2909bbeee54c4c01c65b7544c75e1a8ef56f134a882af12bba61f477d2405a7e7f56bb777297cf5a27c7c3e4630af1c0ae9e8810efcee88e13638b41f130df3683ab0256b95e53fb022e57fa14b3c67bc66d6977ccb6a8dec771c4aee4f866fb
+B = -aa14ceb645aa0b3d85557da7b1d43ae4d8e2d819be23d20ab7714848a955a5cd0b318f1844e86917c3f28e19ead03ba5856258e0a699566d302f474708b8a04c98b32e02dce2c19d7c5109605eeb56a0a88451fca376e6021c5011599e1edb9128ea08c746fcdd327d094280f73b0c09eb7d2cc8838830be6b82c4e6a7db2ccb
+GCD = 1
+
+A = c432f60292d6de79ee4d778572aa840476ee43a257d3c971868dfadfeea03e7d941c41d4911ab0a91316ca326f923f5b64c22d1c2bcad055d2d1baf94611736b6a27e09792d2bcb8405b71852583c498cd72d77fcde6e90010a02e08a9a9a89fb2a0192bb14802585f2a6084709c7d9e02b3d8262cc48521d1dc0f9ad2fa73d5
+B = a8dd3cfbfd8fe648a3793273da8b26e36a3e72aad6aa21c9c5dae89d6e875fb8e910d565020392f6890f7c5c9e266de7e5cf5b3fe071f7c302d2db2633c4975823d4df76abe3377cdd9088b70f63ed39c45decc07e0d00db5786b5a3301988d3a98e4c2c1e711aee755ef51efc98dbd35f82b06475b5377a58ac7d917d57cd99
+GCD = 1
+
+A = -ff59beedc1d8bff9a050e66f43d5847245c2488f1a72d031fc05d2c88a7aeb0b161afa0b7007565448d427cc9b14212114950f12a7a85d4fd49869132d932444a109883eabc7f047941c37cd7ba297e5c101ee80ef80f73d7f682d133d9680e52e08a048a4f2451df18938f0316fde5fc6fa4ffab8be8fca298234b83c94da01
+B = 6e09e3c53c00d41adc5d33741ff27ef0cd14aa71369465af8116a072938c16fbecc8c196aaae99ae1189a3ea44558ac1e04df56de714fd331235f6d39faa42c70cee662607afc3c84d7309c231a58da226f9a2d4e40e5a6f72fc966c51aaa70ed32fede5f924230530db6b9c9707a4d6907e3d4a68900fc6156da00159a0bc5a
+GCD = 1
+
+A = -a0fd24f5c020ba8026c0a25208397908e7bb4843f23ff4a11707533a9e2997e3f7e63eb660516f5c7264613e70942b1336758172623dc698c84c91b1dcfddd16805f59674b73fc408b686b4e9f252b982d4d5d7a2162887d63627f1623b228f9fae8c8165804f6212cc31ad0deb8a2791ab1294a7153966c970fad32553ecf2a
+B = 6fb229fe1d4135949b781d9756f8fd6d2318e19722fcfdeb1cd0a1312bd9ff93925db04c4fd73fb40462a431e532a6f4fa4b89932f022eb3c0133dab088fec19865b0b000edfb85d3c0abf8362aaf119a2cbb42cb061adec5b8001af12af505a10308ee92849ea3c51e6af24edb020ad15756081257a70f4be0e85ca829ce2b9
+GCD = 1
+
+A = -a593dbe4a20fb1b6bf4cd8e49e20e808274a3e3ea125c7f9cf33dc82cecb44f028bec1a0030b951ef8a9c5d149f803d07bb65aeaee9ec0788dee93745c4f43dda5101622a8290dd17b4720692202353a893e1e9e4c52c5ebcaadaef9ca34d8ec7f3c132767717e7fc19b70cbc0b82ab5f496e4ae2b6dc6d8bf695df055fb8772
+B = -de18e2c611bff98420607daf82b544735a63bf2fa94764cf215dc6ec1f68370a049144a5331e04ea554736686a13098d885249357bb649c2d1b171ad4ca5045a78c9c2f3b4224b09c8f63733f69e1bc13d79fa1f5815cc7972178f910efa41314605a1a3c5224f608796b43b973be88b29b3844258b0d2fbcfd206f30506e2bb
+GCD = 1
+
+A = -e52da4bc3e5d8f60e2da877d1a0190869162ae1c04669519208d74cfa3683b6097b9a5e5553a775e96ea4d419c0defb3eb499c572e4fe0c394deab2bd4d08cdde4c855decf41222707c16bf6b936fe48d4845d270d5e340bf79360e384c119e2f97923de0e4a44252e39e07d85775ba544090d5aaf7b942cad8dfb9e12c6538a
+B = 39827db4e52434a69677be69d675dcf22ff54c4572421d7b75de9168ab051fc8effcea565d2e6850fc22e2c01eeb035c892503d04165da23e29649a196235fb9da768d8391af44061f73a038bbc9c1d62481c7460e9ec5a89bd0d4af2388553d826644c9973c4b73c568baf205c08c918cff87eeba94d47d544972b56c8d74a0
+GCD = 2
+
+A = -2658c0f75a35f852bb84f6d24671a7315919fb42215873d9303d004020be0428dacaa398bef0be232f0814842ede603cd7d61d7a06e6fc0df33c738a1f0de2e742bd462c757d1799fbd56f3b59a96adf7b37847d594921a32cce54dad3ea31b1d218c38c9cde8ce515767d9d741b3ac1f99201d330aabffd9d0cab11b8b570eb
+B = -39ea3d5a9850d83d73da5fd718611596a2f86afaa757d6f253f14f54a27c8a73ba0ca24f08373e3b8c6b3f0d0916492905b73f764e94ebda60b4d4b79ba93719b74a96d4bab92d4cfd20b38d2b9faa63509d15ca473f8ed7a5b432d31b9afe80c0c198ae9608ab4c787961c4e707c636ff75facc899f204eeb007d4e43bf1e54
+GCD = 1
+
+A = 1e9a54cee94fc9f8b860106f323b5093727b0920d963d5965662c09803ab027e6095ea112efc46736b78026c7761ae0c0376fdaacedf002cdcc6fb50858de2b7868d2bf6691efbb83ca61af718f36986536059e92f24beb5cc3a080e27f89323969abf4a4b8ba218cc4c27169dad86d14d675989cbb42fc9ac3dc9a4b636db87
+B = 1a88f27e8921f140ea52808d7d474c7377c3d2748fd3d1f6143fc6ba5b6260398b2bae9342722ab23ee578f15d8deb32a0bb46f13467bbab7c3e22485e6a7e46b59bbba9776ce17e67a15692b8ba92743b562ba02b54e648a3590d98f5df16ff67788b2a9668b8cec119aa9d602587c61b17b555f9591bd27aa5735f7882d039
+GCD = 3
+
+A = 69c9cf1c4459f359a3ecd0b0d148ffa8535a4e28f13c0bbe2b61e35af07e27ce6d25258f74cc766b91933eb3d6c562bdf45190b9085475dbe675dd5b60192da7fe915798130a23a296d526d5ba4f26d84be4cb1f67b4d496830c09d178cbc0e38d2349625fda6f02c498bbbb3fdab27781f69bf29526ddaebefe8fb4d71aab12
+B = -f7411bee2e363bccf0dd48729a1e24800f74187f3f0eac4b0bffea717099102f59c526a9a4b32b9b60b28d191a00eba0bf94a8c3a7e9318bf985c8c42d59cd185b0f1d774b80a748f55701aeafb858d7a894c8cecc07877b17753079a1437e7104d7527e569797051d6e23b9dc097795ba16994ec46dbe8f9795d50c7e56dfae
+GCD = 2
+
+A = -16a0720f665fe6b5b7f20d9830ec2c6dcee247c2ffc3d209635cc780fa1ab08fa36124d8236b25046460fc2fe2418485849eba87adb5c393c473b319b32b0f094376f63b841ae624303ba03557a80e1695b0adf7d23cef1279a1ac3d2452f96128ea18a5d589f477d6d4e63da337ca954f7666d7a05a3c4b8f64ee42a16ca376
+B = -87563ed277ade1af23cfe99685e0ce3c175f8395e6b30348648ac34d85e789a93199ee2c63c0e9901b34bf8acbc8c34795950f9ad0c9bd9d8670feb20b684c544ecc3a9ef65786675ad9282cf2ce10e1e6eb8743d00e70cead41b6ad97bda344c603128f83f1fc99da061ef7f2e7a2a4c14d191e5772efadbe38496b3b10714c
+GCD = 2
+
+A = 4bf84cd267f0bfe1728bb1dd7c977766efbe0124cb138a74f55afb94118100f13f38c6013fb4c7b057847487b264a0fbef5fefbe04833e061adffa9ee8196023ce6a1c3e073fba41c73df3dcb9afc31e9f957fa70347e309b2ce880a6792d652dfa1a6285b77aad7495bffe1f4851cf9b0fd7a9b65867888226de153eb979b5e
+B = -4dd4863a399d3acc18a010578d725233c93058c84b198f3a9dbd1ea5341dc6bca119248ad6848556cad6678befefef66b9b03017d4bb826e594dba1852092faa4ce944329702ca8ee5f4521ed0fe13acf6dc914e5ee8232426b4fceb7f39082e3cee3e7275f7ee24ad296dadf5a2fd85cd6d9424d2004aa28bdfffd14af494a8
+GCD = 2
+
+A = -fcf0ce69fa81b5c7f869835c15ee2d264e6cf95946d75f0f040c565efdcd017ce20d0688de57e54390c931888c08d482043a24ea048192a98d96cdf0e9a5c7ee33da19592e5210247e081b1fb206cdc6e28a54ea2dbe63e8bfb9e9c002b891b42c99584c6727879781c3c208897247b3f1dec0d55fe152a2e21e77ea868b2a54
+B = b2c2041c93d8877be57775b6a519507546f6f5f5853d57b08d74f66d0f4c2812130b846c4ee689d604d43b6eb42cf8021648fea0ed42b272dee1cf0f7a4c1be591b160b0d93ed1d3e7cd068b2938af4c2eb9395c3e34e04123252544e46e3f9d20fc6323870fd4bc1692fcb52c754452f8b68dc092bfddb29c43a7dae718ac6b
+GCD = 1
+
+A = 4c55ce5424f2c9d6d158eb0971014be3f470a70dd526de94fadff2b247abdf5e7f7c605e7546d220438952a6b41e7d1bb3533dd10a35b34ea2c2c78c2df9f8c66eaa9b29a0c51428a7b1bb2fa4ea3330e19270b5f5f56107a72880fa69865b1ccf2ad0d64f827c3e8e91ff68a2454c9ceb376c5e64243a1cff9137ab38ebf18d
+B = -41ba6b03e2853b202e23108f333b18c512559ef3bd5ff70b733c15d3168e804fedb8ee49a62b416088a9991e244b75754ac40182e521ab6cf546d75f14ef412c4ac43084890599156ee83064e7c73faf45bbd14bba3f1637522cbd1f05160a8ad03486c23df1ff4e018110168e9f636ee6b380a92c0528797226e1fab15db72e
+GCD = 1
+
+A = ccc54150481e9f136a54a6619f10b6492ec57993bc4b2d9cff3c6be964f640f57bca911ff7fdbb55ae6feb9c36d3a599722a37a8c86cdbb52a2688c022b58b3ecfc7e1985008853d9d0315dfea05fff1ee465bcb3a89420d2875c1d39c54418f16dac4b40fc6838e642be03dd14f0680535e2444af8f8197a43bd9b579d5cba4
+B = f0053588d2e792dc522c4aaa6926486c92402357c0408b3452857b22dba26ed5378f2e8b5cafa2876ca321d1f22b040bff3b9d34f511285675e1f04d39da0c956e84d9e140d995d81ad7c7774336ac13e64f45308fbf87e956508abc37338aef402450272369a38390aaa6ecbd0d80f7a820b85a282f4eaa3828f316d7f39a14
+GCD = 4
+
+A = -571d26ad38cdb460292c46e0cc0b1356b0b5665b1ae8a955e80f7dd4887a9633f0d21ffd0dc6f0ee36c2c7ca1a45d4c6f995d9b60361ee944e908e0558e1beda07e1e9e8e88cacc1673e39919dad79802190117ce99f934f2b0c23848bd1dfd9ee7816be4c403509574a043bba1257485522f766d68cd47bb56b3c5e2ca8a7eb
+B = 4af3a2cd3081a3b0c5b386894cb6a40a1075878829ceb8109a8fc47d1f7eb93faddbfa851769d5f1090d591194362e8a685efdc98d421e5780001fd8450033ef77102fe55256b80ee3cfc1c0eb02f55099003d8234b3bd3243ab6da6ae04a7032303fba0f3bb3583fb39d2744f807b03ac680e16cb1eaccfe2f00966a74b9a15
+GCD = 1
+
+A = 4ab43d9387e6ae566ed27ae06a1425cf614e740b3431bc0320be21dcbe4c06cb57df34fa652832de2d6bf0d998fb45888a4926de287a7f6d5fb7d6cf544f31acb7a8431028f62583c08640be503b953b2ed39f9a416d4c883bf7b55eceeda63199e73de9dd1d2e4f950d5d01aba94a8aa14a80b25cc48f4c47b6feccaea32a24
+B = -16c55ad418506c69b9f3ebd148c406c93028fb061ef4983b21a758951d50ff8e79f989a4a9925186d527dc3e1b6eae06f1e42b4e07d1c8da988b033b115300d6c95e45076557a08bdb4e7ef90e8428a3ae9f7614a43262a83f9e73bece979a2cc7e27f73caf5ec39ffab0cf29b56fecc1bac9d15e8173fe02ea9ad84d686e460
+GCD = 4
+
+A = -90c11c9fbe7d26b1fc3e915bdff70866e890fee81958f9e2d818b79a734e4e049c7adb52f3a743e47880856610711d9d07a1ec722fa5a9a896600ba0a3dced41e1c4ede945c9b98cd10ce7980252a857a55fb979a88a1414d6bea2c3b3e4854cd706179491d43de684914759b389e52921b7b358849cb76ea8aeacfe31440203
+B = -7ebaa8cde1150e22f914d2e1b8102dd13cf6e675dfac7cad948a3fe1760588fca53baba7c82a99e50b012a0bd4bd4ed8e5373d48e43a0c9929760e9aafe1d6e87b78ff34b078256e33e9cecac09e52244652ad94813ab8f72405c265186ff9d0cf3e78de1975455a81a71eddc70c84b78540909b1714d7b05b5a4d1115d471c7
+GCD = 9
+
+A = -265358b6f4e45cf818bad085c3ec4eee4611cf1e84d3b29ae14f37b28524d36d08ca644f66b54de177ce8a1f7b07ddd898348849bea4feade555986eef5e3fc34acbe05b910ef15fa4f6cbf6eb25b89f58d78071ad883385a17cdaa3afcec445e71a1afcca7121c5010ad74a0e2a8acc58f1b1927b852ab5937a942d50ff9a1d
+B = 33a0e5636d22caa6dc84c83bb21f7993dd804dd4032fd5cc2076e47dbf60a0189352cc83be6a29451eebea3fd033b92612b6969e997ba1c669a9f7f2a9be522a712ab861ece3657ad6c54fc3da21b2cf0581dc322dc327d721c7373682bef98de32b8b9f385ba211ac222d0d88a467d54895e00f1f9e8349487d75537a1ae0af
+GCD = 1
+
+A = -d37493ce7352d1f8b1b9d47db0411e7607c6b7c81289ff059a95741cb8dc12b03cff4d92092231c5f64e6b7dfe24ddd9e12820ee850d5cdc55dd49c76176b19c589bf67894fdc8f2fd37677bf5d3f0bea2422dd1ec20e1f3b0116702da824d2ebb4d61d6cf1a41b1145c73b4e528b7d4ba25215b8ba808ef75ff280bb47eeb54
+B = -7a978f71b184a07de124b64ca99577485e3b2f30593dab6019b0e9c43f749071bb46356205e0e7a941f35e601365a3d4aefd360d7336f815ce737e293a9c2f3bbfe793756d3f3a2f3b3aeb50c5d2157d1a03022fd26dbed943d0e13f8cd222deb1fb8d6a398d8ce39e61f76874e8df6cf96b77d1486f639dec86be6d96b62201
+GCD = 1
+
+A = 54efebc6b00dfb7b78438c5fd3d0ad25370c7363992ac2250922525e4dbd5f306b0f28995af8e75ab81615f10909064967a2d413724d6aecc6d5bfaebeceeba7bc00670e90d66ef48bf666c47fc01cfe3813d90829bcd5a0c635fc6342cb361ca72d00601d6c99d4028c78214739fe29d501575cf7a5566cbcb1f393e8f0d5d6
+B = 99d116d93c4ef3c7e7932b1c732e027256b86acea78c2cc83176b7273032102c634f173ff875ec60a9aafeb5572209eaf75a13b52013fa71132943fafeae00453eb8aeb5aa3207a940d351d051d56a76bb853a589969e501a82a09338a58db50dba58d33bfc233c9e1e29b96bc5160e8638ddff55fe3ca9e0560f9366ee822dd
+GCD = 1
+
+A = -c1b6275ddbfed8faec4d4d4a097356f51c80f33e6221948c23b3ac1e04860e339b60647ad54dc8594637e935ef26cd6ff5cad45bef840e6eb02dc25fb628b7170f48426273b12b14aecf9584283d3d649678d8530683de873595f77b99ce7c7b7f9affa53a32f8b06533be3ac426d14ee754e0a765d93a83872aef21df4ab3d5
+B = -a9663739cf8ca44afa9fc318b80672c9e2dfe50515e55cf1661393b64dfa5d4c88c1ef0a63d39cb25c0e8ea93096d59d9453adb39ade57062b9c0777d00724fe8bec7a7b939e229f0b486c8c8e5847211b0e674e4ad7f770b95078284197754c0f3bfbe36fd9039d0df6e0c6ca0ee08c0e921f1b3ec8e0cf07f536c5844b0524
+GCD = 1
+
+A = -ec30b08a0264800a55d46125103f0124682e34df5ee5162db1503875f5c57cde9ddda23ac0d4fdec41c463c97f6f006a1aecccdbf599e9afba7d89feb3483df3c4926383f4ec9e1158389d8759860a62d142c6678848c41e926eb95ed4258cc760dd8e713836a3efd7da1fb733e131703378f73f1e42c44bf1a6c258dec5297c
+B = -7e69a3a067739ee949b17175a1ebc4c0fae3ab6109ed354e68b9cb5996572fade11a36065fc65743d886c0fc7f7322f1e5b8c452c993d4a8b6bee2f14a10e3e27757e86b2c0b6d2c4a862ebc7906be9ea316aa0d70a79dbe3764cd96a7aac9ca1d846f27b634ab5a6c53e82d216d73d08e3c139799178f807c0302d84a42b2cb
+GCD = 1
+
+A = -9c5251e2677831fcd399b0ed4bea16d773bdc82f28c9df1075ee50e751ee763dcf4f11724b72fed1082d460affbe4480b23d5d9c056cccf256177fa112170f4a781cebb07ccb67d9c58715abbd2b1678f5269b1ec390b032730d6040d2a6641152637377d6e02d0cd2cc0ead56d1d5b50d2583cd0fa0ea5bd39697b510e44172
+B = 4a4c65e59ddc31de1d1c449d338d736e8e3a223575e13904eb51aa8357a90f9284fe6597e1ed4bfe3efbca4c7a6932762556136428c8f005364421858dea66d915a7bb0825e1234e18d8472b9743bcaae7388319dc9aef9037f6b04bf37b1a364a14b794d1d3b8b4928515c23027d0eac67ad2ee0d76ea8456eda2bc09d5a9a9
+GCD = 1
+
+A = 5004e6511781d7c0a4833e4e5a5c45db4c695abe6a6e3bfb02841607dc8f228be8a3f18a496eea513e8f1e1a8ed9ba848b643fa75808d05a962c9169f7c2bd5a890a7729218c1eb4badf12cbfa61373bd034c71b94c2f50be70faf917070cd9921911d881658a7be955f358fb3280867cdaeb4b52de69934a4d741a949f9143a
+B = 207a7d2e93f97fabcdb84a320878d41b2f79d97b8736ac486ffbca7d261a906a8f16a1f6be417d49df024b84f83ee84015e4113515a8846faf6901972a5c44972e0fd82a18f83bb3279daac2c7868059623889ce1995bdfd530641565c29770221719ea602489fefca922a3335acb3b88306e1b1dba914617f8cb24296348468
+GCD = 2
+
+A = 1180638c68dffbd682ba0aec037cb3326d3b9894daa3cfb02cd22f5568c7653c8d33989eb777a1acd6fa0dc7150e9ed73e40f39b9c6f8b51eb0f7e50d84183dab0f164ce14b98be6d933edf7dfaa519669e6121186e39d21357359a9a8d6017b5c57706a6cfc07d31d6b3f105281783342cf135b2e0a521ffa97db383e2436ef
+B = 16b577daa236efc24a918a5fdeba337e225c86137abfda1cfce0a07f59171abd151b68dca976a30c5fe516fa08a376a34f77aeceeaa3f4114dffd0957a5e92988568b3eaa25627e5e91561b299287f10f3ff30c33086ba27a9b94efe6955febc72884007e35f3003d70b2649320fa644c92d866433915f4db22db93318d044ec
+GCD = 1
+
+A = -7b49594c5e44e2eb920072625f4ae7f4572bfa6c6397a76455cb4f7058460bd70bbdd829dbce99ac5a53daab8c50b25436269a1532babd83aaed2f78c6fa4e18f74341d3ae17b0e2ec0870d96df0f7a7064152378ef36ce3c5e02b7022f3183468993ab1aa309f14451ddc02ff2df5e803f4a110ae876462fbd2a328780a30b7
+B = e346503b86bbea8adc538a111859e577090de776d7b6268589f7fd5df46b6ff5e3f52a4c1660b883492399ec45c15cf7092a30812591840f90ac93c49fabc4b42919f3c605217070b0b428b9bcf2d44726e74de487553832fdc842e14bf7a074a48d6e2732fb628ba75b60f400e296f4fe6c6f263f166eec1bd0a79977492d8c
+GCD = 1
+
+A = 9129392d1731fca0316cc58ec96501921568230569769b13569874b56f9d076fd5a01e4f35f32863dafbb3a882697825380176cf4feb8e660fa4a9121586917f0ed71a2b68cb7608e0389d321589ef9cb324d3e2dd53814042db6238798f672f925379661fbbe339f61670666550cd198a9eab6a5d0df39a3c28438908e18101
+B = 7e20839dc334aa833593fbd59d62e050e6545e5caf0e5f380f329f836b2f98a24dd692425a89dfb4072c64716f43de0ca0256b252bf929b17b61d76f7dca91673063e3c2dcf23f836b7748340168614cdfb60eb486eba92a809efd2f9d61db25e7fa293f27b4dbc1a3c7366679d856878a747d59a0621344a541cd97ce8f0e2a
+GCD = 1
+
+A = -20c565ee8f7ad4b06efb713d4ae987f9547b303a2f679fa5723683e6a413be1c62e221378e96e15a4ddfc0f8397ab1edea2741ccfbc72860120e95bcebecf13d4c5a9e05a1d48ca97c8939eb73b3a46d2e0848e0e5f5454821538a788aa12034d878a10c6719e7e68497052e4ba17c559513b41448c6fd683f01b237a285c73d
+B = -2e4f817928c78c2f9fa5daae4346407437c5c386c500c3cb758afb75b064d89f022b98c8e3a4b9947cc27fbe396ac8d7884ff6e4f33c1641fd28c1f69deffe220b0180cceb5029560c78b2748d418e0d2ddc22194be0bd9163163d95c0574a9d4032086122bf6d106b746dd41d6573ad612bd51472a2c23a344a034e21a3f8e9
+GCD = 1
+
+A = -43f97ef65942bd5a04aff5a2ef0c6b42e744185e6cfc01eb434c41db7a30e035fb7bfdd891be1b343d527cb01a3a861d1921f92f2e5e271483051bf1b9838d6df928f807c2e8bab9af2376545b793eaee1ba14e66f97a35a3141cb9063d28105e2595388e91fbdec83d24353c196a99984c4bdadac4f377556162958063fc67c
+B = 7d14c95fd913f29e8df9a31ac0a9958abe7e6d59f5d09371dfa4df674287e85740743122018f77ea23d786dc38fe5954c4b39f8170e7b0fcb513cb8813be7c078fd1142664662a5e22b7c548c38fbc2e7eceb1f42d774eda99ce5fe6adf1d25d0de9a74b0db186130a67a8c638f227f7a1cdd36ccc31e28883759184b2693979
+GCD = 1
+
+A = -775be0fc4df8f50171bdfc95a5dc848f827bfc58dc101bb1b08c79240eb9de9e0aff378befd46c395abfbadb66a2c7b55767946f457e2851e47f507ad623c18315059b1e59cade01d9aaaa32eb2462be9707a0e825a611ed7fa31102ae7cf6f9e0c589c26909d803a68da529bcdefa3181074ae23c09e16b051b9866b47b4c4b
+B = -a3b6cc062228ee98ecf04c67d27e6e608ef259db854667e826fb4d28065d584723da9bf3690240e3f587b7a90e70216af227a793f26669d306a4de8c10d9b564c648f709fd12a2dca20221d9ff576a9398b878a1513f96e11958da940803d28dabf11abb7ff940b6f4fa697605e9c9205d1f858e6062dbc0ac356bea1742bc24
+GCD = 1
+
+A = 82a42f94197ce8f002cc7109fb011d4d839acc4d1611cf21d6faac649b94b602cecbeaded96206816c417666c74ab14d4e0cba73adc0005a891eedbbdef97651d486f021edcfb5cca1b5aaf35a91bddb0b2c19615b20201b1fb1106fea844ae722a6836d388846fd2886f45a29bc341039bdfd8f3eccca247495aeb5e37fce1c
+B = -f43db37636f5f90d577e81b3a386617db7934b4a3f929e069cb98d71f4db3a786320697efe8e829896178ec352359ee411e2f42b53119297a66355b32b630cad481bfeb37e00254f4458ba006ae2b7381d556fd59808d00619aa902a484405a8547fce6540e78db713e8ab010fe09b0049d0c2254277c4bfc6fc748f3bb5ba0d
+GCD = 1
+
+A = -fc5ece215c712e69a60dbc15b5ca83ee381141030d155b322fcb23363aeef379b7e272c919af83f9bceb2b6b4324b6eceec94628c7b36bc7d9a3bbccd01c3aa7c0d7d4277c332d2ce8eb079b651f009d8896da4f4e6706ca208ca13664ac930fa707c1339e58aad5047e2b7d34cd7984cb3230546434f18ae2e00bacf2f1de69
+B = 3d1cfe6f55721e46ab0b4a869f354f3eb7b49a76d084f724db604d0f2d0525e7207f65933283cb2feb8131b32fe384a7023bbdda54d331d99626e16d41ece61c9df2256b8802706bf3f49e9eec73ca4a2a77242b238f22d312bd298fe643a6baae9533b8be2a8382b2b26448420644e17fc76c49f1fb47566ade430bedd093e3
+GCD = 1
+
+A = -304b9a1db248f1b534112b3a62f4679c4564277047f07494ab42385755841521cec3bddfca8f3c7860b2ec5ef67128f95fcaab7112a32fc332df56f5c26e20cb7b6e338fba11743853733d8b743ee8c9db24f179c1b8e0ccefd190288bd6aadeb6c83142e4820a8546fd15e3127d9b1855fc472afd4878e2925d82c118ea995d
+B = -d2d666e855669e676f59ab900e65939bd20833ed8a3510405e74178aebf3fea12630b8c09e208515acd1c199d96c8e3e42993bef315c64bfd0a06a2cad92f9edb04e623146a6cf74aa12b65a90d73d565661c340914a3b34757e89390268b9b8ec2b6753c7c0e0b39ac2071d33ab9ba605924f78229e38417863d008e59ab0e3
+GCD = 1
+
+A = 75e9642a674b1dcc66b17f15f3c4f4fcf860337b21804f5afe44d42082aceb17d663252531c8434e0cc197429b491f0cabc346d69b3a0d5b558927a4370a7d615419b85e1c435265e01c99c6fd9c916d47e587abf7df5af8dd4df54d666a7d581897b2f6458c574c64eb2258512ea7823d0f6fca7015dbbf7875a6e2bacba638
+B = -ba871b17116132fd6cf9bab257d2857662148bd3becc8ee12629fff8f64cb11cfd69983ad203872afee3a4d03d847f64e0f827d6ad35b30eff5a9783e1d91a0af415d08a7d6d762e1181efea6f0f9373798967b9d56dc39166d19cf5e4553e8b94d7c9ea252a7cbacf2407a8ac486ea9bf528534b6f95f60f51564fa7062160c
+GCD = 4
+
+A = 6512d3ab4d01cef3abc407772193535240a5adc152b5cb66a5901afa56ef8423eaf89003da39e32b81115f3f272d48bec5e68c4b4143b3abaa1c721d48b5592a599426893438925d5c41af167c5cfa49bf209b330ebb8a4393ad459c643a976ae6bf394b332def554ba2be6f3fc5dab010692cde549f3c060768f8774d85759f
+B = 2e6ffd2e1407754b7fa6ef98309f3b5eabb8e0ef19f25552aa0120c67a47cfc538c31c8ec4fcb47a42a94742be77ac4fbb205c7c6bb2002bc1bb5ba23fd089e98fc09d4459229c84321d813d8a238d1283c3a6a34c068ac481b95b194150dd649d4e35261476a10c36652ff90f2e7eb20ccb65f458dbabb6df398ea81256daf2
+GCD = 1
+
+A = -13d2a568f1ac69f569ae28d076c80e6d81c56cd8a5c201e459036481800e2accb339cdcd3680f0a893d7b644fb29e28db25e67cf283637d0bb52065ff88399a13c706740934e9022ec61a180ac31eddfbfc47db9e074a6caf58e9b94420440e1ea731ffe7789a43a4c46ec12972772e077a78e8ecfc2c96f164fe68880c584c4
+B = -22078c08005d8fbc1e8b2321384659d3774a00594b032b89eb144e11e8d1765b1358d4bc6d5a2323378a2da4b48e0ee2babf37e87b587dda73a9d347f26dba4a9567fb91adcc00108485dcd676d0889c0aad00b4c4225d9fcbd0216fbd4ee10c92be9ab175536ce7c15afc1ba983566ab82feee2d93a4406ffcdf1e11af96d1
+GCD = 7
+
+A = cd47224e6a25f404048e1b672fd68b342d97a42668f92329810822923b0c499ddff351336b85ab63594e022357166a35284be2723126905e788cc8fc7bb47f5495480ad9a49aeaf913f18c739c4fd00cb85f4b9d6426010f6830cd4e3d8ef7c082a199891824b83d2936202aba14412ef068930f69e18b48c423805d8fce88d5
+B = 4a662b8e37b7467cae23d99c52fc8ec0f998cd064a36c1b5eec049dcd44b36aa960160cd6aadc66ff10178704df95ec4fe5e0c14e468d026ea3a10492c5babd29de256ac06ecc36b82209101fd55650d0abc30b4497830bb2158af15e8b9d54d31b52d7160dac777ce9826633c50618797ad419dd4e769d74656cd0bdf22cbe9
+GCD = 1
+
+A = -9c7b998c8753061ee14ee19464ec7cfb075e02c41aed1bb129702f3fd5481bbd195f628e0f0e9f27931cfc107a966b55f537ea010f01ad48357b5643d96bbcf54c37d447c79d0cfd8fd08f70cdc1c97bfa1f515ef4bc10a6eebd3b9bde420966e507c756da2c02673830027bf4d6fedce14377c3fc55e6bc5e809d4f949e4a82
+B = 2255e99e2ab71f27df9deef84ef46e56dd42ffe6e10befc0d32d47fda1f111da546327f09ab1a8ff9f761010cb23ed3ff1388286ef19044f3efc0a43f8150544d88e8359bb07728ac35a1e5e80b697ee3ca120f32f7f7817c2e65ddf914fa6ec5c209a337705ef567a558049fbc4ce1a336264530e2d02562099ec99ed8bada1
+GCD = 1
+
+A = -41e4259209ffb0bdfa755f8281b2eb5ee8f16f088091b91c8ddd50995beceaf112445c712f66d13b80bed00acc986ca7ddcb27dda0ac47caac8355e17a67736cc8c0e297f96547b29742f835e42c45e831a58e00ac5c7aca18c8e49df342db914ef0be4954c020c955dbbaf9f3e93e07c01dbcae018eec4e8544ef765a36014b
+B = e22e8243f69740f7030666c886853628d4352e6ce9ab11653dafe30127ac4fe86872fcdbca9bde6d4cf36e223154ef85ff43983e46b09d6edcd7a13c3830e80f374a6d08577925eef2e594b47f858d528ad21bf5748508dc83ecf7d3e86817cfe41c8a9214ad1c29fb49598107c275e2e3b2851d485a0bd0962e8ce84341eb6f
+GCD = 7
+
+A = 3d4d6c213dead6ae9536b0834ad7fff746dc5409d52327b58d65ac2a56dcd892a74c78104b516eb63838e3cf9d29c3cc1d1a1a2154619cdcc9315113d4216e68480dccc48dc986a2eac133ec5443a738ffb9a2e321b9ef4610cbe84877d732c68d801c587212076b8e9b28f1d7c48360b84c17f0ca8240a244b3dd93b16f73f2
+B = -8ab3499ab8a349672d7fc047290271817fc88fe8fd8c717a2b7f5a981e17031ade7d37d33a3ce17b2f8f1d0e522dc7f23c0767e60a31fdc70be1edcefd5bffce598cd7619384e8c0d326790e8ebb2ea511b20d2c6fe9a2f3d1706b3c0abb02711dd210db118018235f9dc6e76b61971b768847706e93723eeb9577b13529f6e6
+GCD = 2
+
+A = -f8834743ad62287445644f9f6e1294b4a1c758deff4efdb833c1913961a26c03e098e397532fa83597b813ee64eb8bb9ef783f08776bd885bc1cc19ee07e2d45abd19a3a324b73f83903c5dc8b564b8e257f17e18cef7cbcd5102e7a5d6bb6d89b219f19e6a34aba1d455fb6652de528d42848bcb67cbdbe59e5b336a52a37b2
+B = -dc42c3591ace769b102cc3437536438de4eb2a43bf8a8c274801d0c72a15cfd5c628bd7b47b144a4826ad55d1fb7f5a5cc9adcc295fd4bc02ea2d14302a2d8e0381a255bea31ce43215fada89937c2c7750cb149940f5f1700b0024a9539fb6b6e53c87452cc254d96a08205f6420b7e14edd2ffaec52a774d5ab26d6df1a4ea
+GCD = a
+
+A = 8d0680b4e798e423132ff0375ebd072acd45e0e642e3c127f2c8683558816e1d3b870efabed4f80e82f722b4cfe228e5ad00ac354568213de22114dc05e8c7de18b2befd2d1deb6cbc4e4ee584f9aaf99f8a5e5084a2b0999c51bfe369d05d0d28e5c5989bf266b5caa90d335d2d71f41284010b0e7527e8582567d3acafa885
+B = -7473f060eda17103bc9804528830fd200d276391ed30c4cc665d503c125362f43ae6287ca40a8726382ee2219149570c69588650e61baf1a0fb9af9d3fec41d58f27a15df936fd2dfa4b9a06c1f0a371a24ad127b3b3c52bc5659390c3ac6813305fc852f3a8abe25fcc492ea23d624b5a2873e1143fe8e75a949a5b21e698ba
+GCD = 1
+
+A = e85b1200fbce33f3504f7a367b01f270ea235cda43c0b656adcb5e3fda544c76ec403151aaff9ee0fa909d8d41c0d9d119f097111843e971da8e8e66c088b12a71464fba781d5c0df5a368971d0b6a00e961b55f6bbf55a4c32aaf9dbf3bfc2c71a3afe3bceec91683e36336dc2d66d9123e3d4b8c870ad8d925372ae716d249
+B = -2682ecd58cf75a3f1a97fd0364a792f3a11da355af5a0104cc814e6d3f21e14e70b761cd4a51a47f7485d8daf1473dc535a21b941aa3e899486dcabb0720a33c1acc0ab4cd1b2db385544aa43cb8860c2d6d7971a9c7238d5f7027387fb088013497384a408fcd9fd2021952940fd492fa02faf10b24ccaf0fdbbcc3687b93f9
+GCD = 1
+
+A = 70a970db644a89cb39124b0a890dbca5b0e07e81169a4c8202ad20bff01a46d8003b130e23af84daa919b53f6c17acfba6726a84ea7664289072aff46c5c984e2971152e18d6cc6f52d1171e1f6c5ccea42db0e4b44a8e5ef5aaedf8f3ace469eba2dfbbb19f1843d11f46ab9e20ca085ae4f029c466c519d92eb9b9c78817db
+B = -15a56f26bf32de8d92a618853a4ede0ed62b41f6466aed56b79b97847087ca7a43d1b8f366e32d776c49c3b59beba5559c2a38662576fc20b6efb78bf76d2b1408999f0d6a74fcc9306fdd02a9bd6e9e872965c98840340f6f9a80db69ab42698dae341311140749184a2ceb8b58f73c2de7396ddbc0ecdd11ef62f8e1b035f1
+GCD = 3
+
+A = -f14b60a87beefa6c57578c08bf63fb803652fdbd687fcd05c215e80882cc76cab77241a9661d4fbe68350c96aedda89a041cacb49dbc0f415efe71153289ffd86b585df721b0269bc550960128dc143a8a779c9b4e729fd29a3ba6274b0f1d6122f05f7baa1171673210be7bb523ef5550a7e0943d61e8c247435666a40dd2d7
+B = -53cab2c18ae5013e477ab1896f728de743bc572cbf1ccea6f423a4eb1e9d7a04a52a1cd61cf1fa9bf9fa87ad22ec4da82531353a36071fd96f1ddf3999b1d0b55a43b810f36a040b0529546ec495a8da1fa174b274ff40cc18b57a43b4efb8e4fcdff42d3553db1891ca533b118bd4bb5228fc2f7cffeaae1ca977087a317e1c
+GCD = 1
+
+A = -30c47419211671851c1af0996ea97fa48c2c46a619ee126aeee5b12f7dd3b06df1e78eeb8b14b5b82dc24f73e69b65a2baf32476cb1585035ebee4c1fab98486434fc2da9702200cece572bd376f121ce441f901272dd8a9631d957cc418efbdf795a788e0204ca468ad2d81522d449e5dc0ebf345cfb5cf04566b504c4871e4
+B = -2238c5087a800599a40f927fe2dfad2b950001ba0148f4b9bfd4f269c12e637367c873b0bec97977b8f122f6cd7669a9af2ffeb712c7c13c8edb8628c675e44842fa5a1a895ec4f116ef9cfd580318e078d77c6fc18af7eb9c1dd7d8bae7fa9e1f0affd494ab624d1b146569dc920294044716f91a34b5554c2eebee9aae42d
+GCD = 1
+
+A = -8f5e734316ba03a2dbe3bb1a6d4609af5034312545f958094f055e02d13333e0ea3114e0afe1815af8fd31710467892bb6b82ef478296545f30c554a9c194ce59b423850d9faacca86a8f60554041c4b579c5671609859cb17694e473b447da40f0c33cd1cf89d90f3cde874b9ac3deefe86273dc248d073a7d73ee009677429
+B = a4f326bf0af69ba18bbdf4d38fd5618482135338316674344c5bcf10c29b07562aae8d8aa44563749add52dee2bf58ca7abbe5ed1457368e0c6f27542250f12af5ec948a12d792da40225fc6379aa1b1eec1feae26bda80e8d7170c5c2039f8a8ba9026b81f97df625e5264901ce3febb02fee1080506903a44c286e1dbb02f7
+GCD = 1
+
+A = -a40591cdf91de26b487846e0a41541f03a266b07e8efc031a60ee7cece0f86e0284ebcbb57d2fd1aa8b888eae75877af379bfba7ec58326560cddf15bbc469b96b32fe1130a47c21d04fcba347a4f427ad75d07200329b1aac3553bc21e73b6d9e26685995807707ab5ff52c6c3aef00d95e778207c83cd727c3f67716e80064
+B = -8fb67e563344508261c6c8fe8f4ee855fac133c604284d98b0d3043c9ea0e552b48eafec7292045ea248006e98ed8b77d3fbe27f8d5cb1d7933c1d2b9787dc8cd747a706b19a30a57f0d070361f6eb866c70d1deb76abd3d2227e57c260a9bb91cfe2396f5911013960e29c1a48f755e9dc2ef66b2360875396d85311f34e82d
+GCD = 1
+
+A = 3a5693a85c4f438027458cb30ae5396b690b0ff23347c786ffe7231e60e67e635e104a3b01bcb25ca51a3c604591b37ba494820ebf5dada145f1df3733544e09094a42a97d4989530c0d67ba57ce3a49e75e4986500abe6fbe455611dbf743d6281b5660d7c5ff0274909769c5ecbbc8e5fcef0a35dcdae7a5d8e672cc228328
+B = cc048c716588c40f593d5cdef7a97db2fefb8add52c70d00ef30f9e31d2f2db96cda9b19aebecf0908017782a5a63693ebe60b356c53acfe18d95cb81fa57a50b2a9fbc737fcefb7132c9e1a918ddd8031faaf5ae382a0ca3a7915047fa6703ecec159462d866c67b9b2dec7e1cc24cbdb5dc305c637f64cce54e9c1278cb151
+GCD = 1
+
+A = e468320ff548ba7074444dd778253ab277afb9b4432b08690af12b62941746bf7814050ab479d5a0bdca6f5038bf0d881fc66c3b9dce0bcf4f5a2ab36e19342037a3dc43895af88065eeeaa2062385a2746b0c09f91834fb775a5e7aa91755a3407efaa5841e1dc8949dba77c6b9ba7531edc2af0673cc6ced0a9230f4fd969
+B = -fa4b86e63d1d3267f88354bb06d59550891db99419ad40234576dd72e6b1785a76be0d2d3ce7dc5e0abdd2bf01fcdac297a16cb5bb293a84484586eb0d7937ef2a79e6be9a8be96e6875fa9a89fbd51966056400b8ae794accf6af533e433b9092148b6b2139d685bf29ecfe090d6fac137d6378251468715d50c220bdf564ba
+GCD = 1
+
+A = -91e7b626d52ad3e98ef15b7c5b995614d7c1980acd7276bbb79e51a6799bfbfebbe473e809fa843edc2a4fc5e00a14a7eca5ba71ec233358b8859ee051ae9e68bfdca6b6bd75daec45de9873ad73afef8724711a897eeb40e09e45ef48d7078dc956998ee1ba7ebc8cbaefcc47605af2dfbc5eb780009171cce20bcf95b410cb
+B = 99ab8c668d78d3cb3e986daed70b81b4995d1090fbf578349e62c66f5546018dc2d4b2f9f18c0ce478483a2f8dc6e45d807b3aa4bd5b2cd68aa1d156f3b9211c1cbd2faf2c459a54ed3136560c7a7aa2c0dd4da3fd8d8da8ea934b498b5689a3f0efa3b56952b35eb80b42ea384eee53d1f9767d0ebad2900cd149a518fbf8f7
+GCD = 3
+
+A = 78a6d44c588df41f522ab06c1779649dc525538f5538e34b1fdec651661254f801f2382580697c49d9ba653c368fc9beef86876252cb411657a386491d32846c898bb648b23cb58d175bac519796f6f8092ad5b0fdd69ca132b129df0ab5ed27b637f6b080cadb6ab5f7cdf0be0ad61acef2b1fb8f70d417ad650daa26d73fd9
+B = -e34154eb0a91bf637a7a3b1f13bc0859d72227db3d7ec1267a6bff10cace80aadcfe86bb0c83d421d9b675868fb59e7b463e4c538df5dac6566b9b1551558e886a41c25f46aa478a70305e547786f966571f22439929b5cc940639d35802155bda1f4b8ff4277ee25035251eeb02ffa3451b81e38c80790a7e099c111850bd83
+GCD = 3
+
+A = 277ba648989987c89d0017ef02818f51f8202f2a5177719e8d210224fcb5e1ef3a24ffbc7084fd02fe0bd293bf732215cbf4cecc302b4ad57441ef4a9e17ec3afab8c49ed41de7fcfcac5399d47a7e89b6bfe925d70310277649b8a921b0fb05102c24b0d783f2186049ac8f55f02f94bd7f523e8ec47f79ec4edfcb67458b13
+B = -f240ccbbb4c09e8c019ddd674fbbec2ef862030fe21c0eac295fb2efd6a937ba047b184fd8f495aa57ab633e571ca1f7782e43d8f3662b2779c29d7c4bcee48ade58db47ecc94c1978fbb528ec8cd500bf08ffc28c4e257bb3448110308cf54c0c827264f5fb2cc4570d06fc0dad32e08b0f461d5df0bbb61a7194e1616887ff
+GCD = 1
+
+A = -25fc2f439faed14765bda423a9705cf3c321ab6265da25e5aebbcb2706c4a97577f0315ef7950108908cf844a7c6f52638814572b0ba1c26b6e0a031ebca0f71175f82348da8e9c80b37117d439c450540396b51cc4f7966d21b4829d6ee59f012114ddb89460858a9d353da1b84ba51df5c8f16fc4fc7418dbabd2335a2c760
+B = f1c6868e1cddfd371550ba9c4f3bc6250b9f46864cddf259370366578140ddfe252e36e82f184fc874f9efda5b4595f39067f04c3854f9578355a4a6ea7a74969529e5c40b12a9d0bd96005bea78f80f425d3ad4554bbabc12917b18dcfcb96ff2aca213bc0b9ade99a2dc81d8c03281e35f5e7d82ffa8e2b4cb771f7972801a
+GCD = 2
+
+A = -27020155555ae28e969e1f307e8dd0672d3a62122abadf7b5bfce320cdd83495734ecf7893f3611aebcca183e7269946ceed043f956b0d91c6a7b63de37314c8f9fcbf1a6b3b5686aedcb51b89f5db357a75ec4346911b2d565e8cfad9b4d8e56fe026323a599e2fbb046e334d0510528573c04c6b7e245c42d596d0d56e1257
+B = -3cd68fc1d0347e90b16ec92f6ddee506aea48575f3f2a615fb74ec19ef0a22924a5bcadb946cd13f98da0dcff4d5f8a5d5418ab4cf9b6275aac694e70092dc0b3a8f242d8e05901714db864be88c674d3a9331096f9da2ebe0ca350c792e0df9113017a98aee589c16705cc2c4c61e7a43642d9e814ee6c27e86be3a7f40e316
+GCD = 9
+
+A = c167d1e88e30299e9ef5c70eb75cbda23149b7d438c69066f321dd16c405369baa196595614ef9ee4d1ddf1982a3218e8eb448a43d4407ce49c3038efbcaca7f04254b885c3786f3e57fe4c8d1b49ec70c7687678211c7d7cc909eb17c9f93fcb8a82413314f7cccea01fd3a23cf8ce75b90bed7f6709e5dbcf0f62527b18d62
+B = 838caf24ad3111a195faff7799f02944d86fba1b473fa3ad7b5bb3a3a4538665370653c460d15dd0ad61f37a0a7a256b9dc15b936157b69a6df393de4a665f87cb4a75c62448f0ffef038ce3433b443e077105ca1598d6da5d192028355284e764fcc49c257c51f17b0561fe33ec4a13b5e28766997cdbc0f5d69538b40cd
+GCD = 1
+
+A = fa2f6442a580092ed7a3888f2c19145e25e6209581db175c4414ab37d47e0e01c15d52efa851169441b3f678ca896599fdcf0fd24a0bf54afa42d43c1ccdf3930955ea5e7499cd94af363477ed2c1ba09e3615e2c2a0d4c1fd5bba8ab009d173b6bea067d58a97246610877c3a5f9b9343f8abdd937ec59bbbb224dbf9f1f6db
+B = -b5c75e19d117f35d14ea948ce0edf3614e8cd7501ce4ad8a85da2baa084c1fb79857e703e2178e6a3ca4d0d5294755a7f420995ba85e435b60f30ade497b472507579ced5d60e58b60af8b452553e9998fe2d15ea1097d637a989d6a057f3b1e172e92fc30a015d6010765c9b3ac365ca558c6e545a2dbfbb460ea2f34d11516
+GCD = 1
+
+A = -c29401ee730abc257fd768e9c115d5e5ed1e9bb5ef7c3674b3ae194b89f5217b44c815d3cfb0acb68ba7c14ef3e8c369fdc34a6a61a0776c0caf77d8d97d388c64181d82d79ddffb7fea81f8fcf0debd101acff8cdd0fa18f0a25cd41e2a94d4d2c8065797b88f057aa035bc9d82262f709222e00ae4535ce39c6640e6f000bd
+B = fcd76c2119bddd7f4d0b12bf309c2c0d61eb99f04cb74dd211efba3d39c6e2a6769892d2ce4695545e8e47d00ae65d660c6fd475f80cf83f004bd08b7d527246b373bf492aaa192e4f40147d8325e9dc5af966326e62909b37b7b820a56fc236e277d764dc183945c8f2bfe5ea14898cded5a7b4d7727c96dbd51e5baa899c0
+GCD = 3
+
+A = 3e39eca99ed7b6278b47b2cbf1cf9a401f3b1696426d469e98db7b5d635189e1cf1e799a63291467bc37757c251a461c3763bd712dcfbae9306d76a58c2d07fad9f080910603d782dc6ac5fc8c56c4cd9ee9dc40226d65aae9543dae3dd400697c8f3335a458db60a02100d8e117097f9a9582759da8693d61fc105b83790915
+B = d9fec1b2060d911af5029d4c395f76b758618ffa87d9778a10578385e655ca711d907c3f61db67a6a07c6911bef7b27620b2a7dded0c70d5da92c31fdc67524ebef05086ed7955a2507bc627bf563f59fa7c36f777680fdaa9d25d369df44e869291196206446499c3b86e4a2c73f8b06a6ee0e25fb271ec64e8877905130108
+GCD = 1
+
+A = bd51200da2c3d0770c5728cca3fdaf620f14c5ae882c3d2fc59d34c12313961c7859546501afb8e3772e56f211829d6db907560b663b9e10bdc90804b601f8da641e3c4276e118e29ebaaeb87d8125b4debf937e07a4cb63facca9a1c0ad00f68289840a44f6532c1e1f864d235a9c17db505acb0275e2f2f9b64bf36b616a4
+B = f70ad24ea5364f726c3eec09aa298cac83cd7b2cfd66db17752e4ba390c772e9a30cb1938f5197867ba066734636ecb4089bb8cfd1ca2a889db8ba0ee5b19d614d03b1e9f1001eccb2e0bdd916160c272ba8b989bb7234e441c62b4a14d00bf2196f3634ecbef017f2d6271831db80931324642f6d8fdb6abfbdd7fe67a7172f
+GCD = 1
+
+A = c49b9eafced537e25f85799ffe36e98da095cc114926606ef3215393d0be949dcf853f00f9d4a56cc3b1fc3280a1d286ea5a185c1f8b439b03b8af825f9df745738abccb8a74f25a504b9c9eb8716dc84dd1b476573b3cb6f47b762f4eee9791a55e4d0d2f3cf7eacf87af65ee6059e2f43b0f743415e13cf8eb33c119a8ed96
+B = -a1f2ec34a2fde73c5bc7b990a064452085797da7bc8ce6856ce93efbb072d944635e9a770d883f9178fcb3ce2a38f34afa55ee6f59a688e7069dec33ee5dc5453a6ca24d17f6f09e754c1a106335dedc947e164bdb843de0f909064487dc283d90a6c9af77394602363209977e74ada675639e1fc25d3fcca80933818b126ce3
+GCD = 1
+
+A = 7b779ba7035f4e9f7f83cfcae89deb28294f1ecc88bc188a5d07949a99da2da06ca0cef147c46569ef4dc00923eb6b5bac470c90208fa116a29a1443c7c3bdc2ff2be17c2c76b585222c60f599f261f25678c7610444dd8f6367bef187f82ca8aa283198290e82c020bc5595a18e45d6371c5355402d5d39dd2a5e9ba35e3d0a
+B = -4f87c64d76e5778452a41277faccba96d955dbf91ca686a43716e507476b4093e1b159013d4a9b8fd7497b0617be8f21de9cf6127e94d71cd201ad7ee2200f30fc2f383ef1ae7e319c6e7ebcc30d227f20592ba9685af229d394b336f9e1d20e3f05a9c3a90493e7e6b3e20d2efd3b3498829ee3259f2bf03142cd57583fa166
+GCD = 2
+
+A = cfe99b0e1f529420242abd47b8c13a56c1e6c492db6ac75b7788999fb69e51fbb00d9c027103e240210b06477f1bf79090d74af5ea44153587ba88c779307c9d855fdc688c422a0fe4202796d4d3b273d2c2d60c0c22d22305db1be15e94748157a4a0331c06c189750f9a9d47244fe36d16138a6497df6d94db70672fc730d
+B = -fd8e7d819c4af7f84f57158b9b1f5ce65e595ead9af02393d6900fdf533dc7f9589c619e09c2479afdfa63109984d59406cadec2157b7152a2c50b04211776063be949270ae88d82cf28921fab1ba8020f05db8e15ba85637e1b96ddfb815cc7245250aa6cd8e1c4a2016291b6755fc83e98cd61774cddfc5e1de6c96197367
+GCD = 1
+
+A = -c940c1e846b0e625370161f33a37e32c486e9d45cc2e9c38e362a3e77e13122f22641c8aa11d3ca185eeb94b3bc77d5b12bb906875ee06734f848434d7d58d1c666bb8fb8d0546c2d00fd491816643c05616968c7a41a8b7e5b9de21fb7b20e94da9aa896243db5bcb9b53e0a2a9c14fa288754c352f5e78ffb18e73c0029bd0
+B = 69f1a766a98e27ed9d66f3d4fa2a4540d3fc3f4474babe926b735a3e7c084fd176ee5036d61da0bae4a517e37e65e724cecc73d94e79cef82bfba9d72415d10d93dce42bede9e79575ab6ec2b245b54adbec85517ea1243b9fb1c89c24ae62c65ac66f84da789d10ab3ef9a10e43dce60d8bee12e5fe6c4b51294630a6a17a13
+GCD = 1
+
+A = -618281bb5de3a32cdf4014834acb9a3de1fa10c5f60484b3f34f06175e5242062cb2f024053c3fd889f7beef0e5a7e3512e67c00744f979cb218b62ed637d1c0a75e56db4f71b09d1c9f75a00311a7fb7af7a7b8fcd02725973eb9ae0094bb9896b741c24f03234b3bf64d333fab7cf3b02895d02017b531461a8bd0555d6863
+B = bd432865f99d5ed5d8acd7dc58cffa98799684ed173afc34ea0e9ef6622f651ef6b7a8aabd45fcacf73b041c48ea04aaf769a1956a2bc7b6c47b9bac121776c0bd4a87e8e98ef3f91d2825370794af1ac22fee25a244ebe4ee7201c7f23065878dbfadd180b740c61ee60d0bb06a1e54d1cbd4378a6725375b53692293a202a3
+GCD = 1
+
+A = -b6d08d3b454bb8dcdd5fb576cc1b96a8326ddfa01bb1ff24b41a703ae9aaf860c06d5050b3636880529c2868959e51a2f9992774e32eb11ec877738b36f693ce369b1784ad0197a1b65f607cdd66980f47fd37c97d98a44615f5fe6590d780f89a9ccd0e728974e9bfaebc8f528fbf84a19fdb9c2e2f62a8c3cf338610f44095
+B = 8e47efbbbb4cfa2dd3be53ec2c4c253327c1c0748601e2f3d190ce5e7c1f601ec049a45618338f7ea99b96cc5825b3c429d4c4eb87468f7dd6e87ca42dd230262b618fa414e27dea2f5e0c02f0ac19d0c5312155e2f493f4fb33b2d0c71d489482d9024e36d329cf8c3fefaf1bf45d659ec36b0fa4e919242633fb156c09924
+GCD = 1
+
+A = -f7f3ca34f2937ee1f6f73fe4d7c97861f95f2eb44f34c31e47f31f7eee5d4ea9e4b953a109fff0559b934b2f89a4c8e92db958c640c8830b8156febcda82a9985d4b5f5f46971ff256e3cf5e96a5ce634b68a34393bb2a0fb0d5002672440ebb031eb084fbc83ba5fd40b8c9cf2b62f0f30a66c9e6b8f32740eac6ead8943509
+B = 4ef0f9c2209ddf98d89566abf4c573a5abfc94c5dee0704c4b22b0f013a232069afac798fb9a0240713704ac36bfd6c5543ccf8d2bec2ad83d6547faff19804486ba996d0c2f326777053681f8c1695a4163509c3e18a0953991883430dc9741b29aa73766d226cc1f8b05fadc735b84074a5ae52353ec113f264202497a61d2
+GCD = 1
+
+A = -3784a23ea6efbeffb28395b11676296c3a3327f647137a06be4a57cd4bee70f064434812c3caac0c7bb98b2ca2e2bde1e66a8026f380719fb8e1467aee380e07d88fa120e1cd826bbcdba6a1c95664f1b1d165543044e5580710d3b754976630af7d5745d39314ca64661ed25706d156c5d5dd0a6d20ccc2708946deac49a61b
+B = 7d262be70acad7ec9ca29045bc60fbd9375415c8309836b16dd06c22c5e3c56f563326fc2f77322559cfe63bd2badfc81a14624d0d620eb29a96fd62fa484376c87404df8ddefc49070d6bb63430e57f9a886e62606b2a6e77b6bd3e3f5ae2e73d7f18dfb1673a4c6d79e26ddea8150723cd898a78d8fd90e1ec9f7f10e98ec1
+GCD = 1
+
+A = 6fedc24b248cc9ba6c353261f5830d54abecd1159fb2df362c97a79baf8c9b122c5db6858663da286754835885b922d3240cf464c831ee660091cd78ffcbb26eb85ba6a32c2949b4fccaa24546ee8d14dfe982d4c864e9be378a9b4ff4b9da0fde86b018661bdb1cf76722e526d48d868dbc125973847d3c551ad260b81922e6
+B = -a0be9223c793c6857de0250f4288f05e1b6ecb93f802063fbaa2437a92d39975883edbbe4a48ad03ea0eea763ce6b4e1b1e47fe510f3406a47b1c4a84eef9f2267ab6643d4e4005456c62d612a84e0a99ab6766f90b968844b3c3846d93c01561605acf58b90124d91e45f3be5e88376deb304fe196174322e21ea407bf0a56e
+GCD = 2
+
+A = -619c08b252791873324f07417640b9080db7bfe159ea7c7e8b75080456d5fdc65fb13f9d4ce5fb8e4cb5a9f4f3b1f972b7067d5ced3b57eb88d01943e1a0566619377ecd6ac5562562f0b8e2820753e9c7ab24509bbfffac5a68c41847b5e96016fba3b04168f56311185bee2a118651f1fd0840564b364a981bd094640b9d5e
+B = -81b4e28ce0df6cb45f386a9115abb06f0aa4f707b6f550123b62284bb020c3f188f937770c2dcee4e341e47e23ce2905febc3100700ca227fe22d0965b6c64962e1ed38bde3e3299c693a30497a1c0f8e2639a25c6cadb5b34b0320c2b7ffd0e24371a19d7f1057e7f449227ebf2795b36755f988c184bdd83d0893a48d3cd82
+GCD = 2
+
+A = -5f7e9a7053dee522ddc0c991502f1aa42f1d9c5e92e775847b96150b9530463f76efcda717e105920ed429c65e1aca990b8e925eec5b3c792afcffdaf4f398a06a0d720b75223ab94ec6bdf922cffe224eea819e14c3632a23c1b92b2fb749f60e05d53c24ee9b4b7c0e72332c9c22822df32ed160a99507165ffc739d1ffe8
+B = 73fa6bd399ac802ce4d9c5700c44e7ba28da2a5698b27fa828c67ace56ee660727f9a3672e05e6f3946be233bf0f406dfc0cbdb141c6d9973138b5ce237eb7aacd78c7fb4498ab1f183ff91fa2dd7d6f44f7052004057460704608f23d27e79fd9be41a05294c88bea241ab7e7b8d934ab419b36d15e71c117e96fbe9835c1bb
+GCD = 5
+
+A = -542e12adc48143ec459693957b9a61eafb545e4384fb430f8628b9c3d112608f1437ba9e9a62741a0e4a388332993f118bde0e042b7d251004c0b2af51d3a31f42b68f2c124f4dc10da1b3d7c9c958ca4efbcccfeb69378b69d5f0e67fc91094ff14a6a19f566643e03686ef6130afb602dd063d2b95cee41db6242b812da9a1
+B = -d2a9224127ee5ab97ecc17116c598e21a62b0c4cd8b71be3d89984786d3a8a87e3c5d7a7e552f609ab2b26990fed85e95f445ad80cd32c8008df04c1dc3c9d5757900b3ad9e5d5a5409139eeae271215d1f0a7832349d3115ddad3aa33b0555e9dcbb6dc80ae201242868f50c6233196c7740e3a8877bb16b805ea43f4604e21
+GCD = 1
+
+A = 478f222b9a864d3cb794885169ef2f6343c4a890d4bc21fd3612efe2b69386a13b126b69ebda353797199350c175939caa31de5d0b01a345cbde438029a5b8b64e6de21cb1957cc236fac64887e1f56137599ef419c302a7b1774f89130a585c90fd0521bce73439ca2b63692656295f3aa82022c24141e98a285d7de6dc48e5
+B = a1edf273b61031f7fcf705963a300b855e3120e574818c2b3f5ec096d0679aba1103551df6ace26461a9eb455fd7114db985a06cdeeccd7ad6b22167581d6830264e28b2561730580b48a8e81ab2d6dcc53f8fda79a4bfb7c69fe20a768ffc943ae62529e142bdfcd148bb4dfdfac808b70eac968e0c8d28a4c1dd1e4eda70fe
+GCD = 1
+
+A = 5639cf8f671877ba7b681cdca449159cee1f35254d224ba447eb223e7985dd714854ea75c43c8dbc0da297505433ab6e8450f244c43543c27d81a01804617a5307ebd112af15c896b8432707d26f6251a4c362303bfd839db699df07ed79ad6323cd75ce65c58a99fe63d931f4c97ce3e60c77ad1d4490d66e01ca0cd02289c9
+B = -f29c9366b73050baeeab2ab07367396741fee501f0205e8fb2a41dc4bce2fedc86dda9f4043a089b22966cdbe11211889310e700de5f42b09d36e48d827ddd88972169391db1896e6e621fee7c94b72b64dab6a9d35ac2b1c446816e5db9dec770a5ef4923194dabf329a13c87ed3a2eba2f6f2912da9e02ec0ffd1c48950012
+GCD = 11
+
+A = -40480842c3c4ef4d5b7f9561d4d21ad617380c67ddc6ae861091ebf36fd2ca8939f11442838b6dc6f3e96503a4ebe3f6f7d96089c5cce5e0342d818edc08184299ce6695a5548149fafb818f224c9d834363f286e39461d491999e122f210def8acfe89d6223ca427802779be936d20ab275880e4cbe8e3f903f50941f36db63
+B = b17d57ddd939d891a688ec98b898ad4e36601f5aba8145005ed906a40606e44a2f21e51dd22d1a15763728c3764922e4f2d80d514cf0f2c3fde727ec2ecb3a015cfafc12531e62136ec10a6ba0aee7726f5241ffab7c6455519d7cf44cdf87944010dd8c0e19509949bc0b66e5df48ce3458c8655448bb42e0843388f2c69f06
+GCD = 1
+
+A = 8d98e252f4d11dab689f23e3af245ae5ea4ba545fe2ef2c8b4caaa5e88eddfa1d873e2da792917c05747c68db67d56d023cc228274eef3cfcb76680bdba05e978124533ccba71c9dca8106e113738b6b6ae0b1331389fa9eeb7456cee6531c69214561222549726d0cf15aa5953eb0fafb0a1cb3c33b9cfe55dc74e4a32f67df
+B = -31ab94aaec376c4f17c63e7fcffe8bd381d10ec2927334443775dacc0a14ff1c7e7a77e56e868b4f977fac8c3da20b0bdf4a1ccfc0b5b5d78dadd5ea655af91a1a5982cf92ef22f858dd723ddcdc96bfd809d44e7ad7d4f92df95a8207765b3a37234366c9dc362344f7997f2a1596337956723ead10a8627417d9d213ef27b6
+GCD = 1
+
+A = -320b45099e6a66688eabede6622d014d890f2a06c6e2830f820b9aeee8435c35e8ea683016a1615ca7d4e604136b968776d044a94a18af819092cc383b07bc9785ed47bfd3d9f73a524ad6829e729fc61ecbc6c48e469b587689f9c96e57a146311dfa4bf92711be0fd69162147b019b968ed4afe8b2c57d64a5df39db013cd3
+B = 92ffa658194707854aafd92140231d6fb3590d414b97a82b2fd43d43695f09814b498f5f6496f64752b2c6796632dca417991fe3b6b9d6beb8feaeb1a56d1e9c45ba38de64a302f10e5d2258b4cb83d2c4dd0b6883e1a8e423655c41df31905cfc6263d7d5e2476904209eb6d18a06db87cd2b8c5e2f774ed897107f7f1e4f5f
+GCD = 1
+
+A = -5741ed6e0e435d18de08555c70aa54525368172faa6963c567378eddffdcd9520dd889a1b5d4240cc99c9d221a868cae16fe0b908b486f29caa80e8a345654068323f07e60a50cc0088bdc39c4391ba4f6e55215746b7a0abaa182b53beb82f637eaed0de6b482524975b549ec51cfc2132d02f30faa1b4aea3fd1a81264dc7f
+B = -a337f261ec03650498f7698a7d2f528ad1968fd530f1977da49693dd8f1afb5192d1f5aedf0d23cba910bf013f1e7af945ab18df8340352f11120216d7bc6fe3c331c7a3f4cdd75179e547be866ca867cab2c32683f679fe06f8d3392961ae5877fd60ddd9d5ce1757c25d4e5108d1f0ea75f8d33436a608ab20ac561deef6f3
+GCD = 1
+
+A = -8daa6ab6a98241735c878f1b8c6a001df49795561216f648b0cf9455b1b01ce4644e024cd46d117d8c57796aa46e7a60e8ed51503d3f044b9c071217caad72df3733ce1f1e077aa830cb8f2f2006ab36c83ac1b17f02d631097d177dfb8bd218d6495a86977eb25c6742d98f55b6bdb330c23216d1aaa511d2f177b7671c6def
+B = -15f573bfaf3b1f373ed67bea2673d58255c6aad8e3d125109f1820a6370b6d53d940cf1136560bd59d76c77732b570138304d0d0de84f89892770dd4fcf23843315f88f882decf5349b499dc431dfff2967d5de8120ba02566e877b94256880a22bc6ab216002052740d10b1cb4e5c6eaed94e55a25f36daa5a6babfdba1a346
+GCD = 3
+
+A = 7c699aa2e2526acb7ee4886483736d4d665ef8337e61fe68773735478a155264970df364965dcd3f3472ead35ab7037c488d114f8316b25afb54c445c803a9cdcbb85bf68fe8d339080f04a232dc1d704cedfb11267a3588983d6747959b7575ed302c4c9a22cd930d28a4326034cb281fc227f600b582092c54b7806d9d7d17
+B = c76516579078a666a4d632bf19a15a47a1d3fb48b03c9834d7fbbb84fac67b4182b3d0521625ff7313aa0f5db0fd7ef5fcdd5c4067d97a947b08d77e8cee7c63611d7cfbd7ada895363402b73b2af6036a3036f6be80268b6c4eb6bd0fc30fde9c6575e9f31d712bca37d947ea2596f0c074cff08b68c1e4e7c62bf0942f5daa
+GCD = 11
+
+A = -b5d722dc81258b4d6ba87e79bf0ae3f191bf5139848bf113ac779d633db02b4562c6ba0a8d2bdfa46065ef1597d5e3b5be8568a9d0bb78affd75af4f3d275648145e1e6884548380160e36a99d709b123af2cec8c388bf090ad1683182636f969b8956ee7633889dca7cad3aec39a86ec76557a230443af99344e41e3d7f8d7e
+B = 3960dc516e526fab4cdab76232384b2a55b516ca9bc8ec1dcf63d06f71a70a572290dca3ac11c0709ca5fb29c19af4f1ae0d2b3b4fb8102a3fa751fd91f720eb7d9d94bb9f12d2a26947e037ee6d31e4455cf597d51e3ec3046c67a482a909b7865e6126d01d6993bd447d6ededc17bb1ef2f90869bcda8a950223a25033b1f1
+GCD = 1
+
+A = 538e4164cc0dc77a0db1ce24a591d97dd844596995036c592cbbf942dd7481723f76e5474eed9e21ed5147724bb764ba440fd130014c7362bd9cfcc8315b2bfad71b5238b194b65d96011fecda888e0b4213deed308ec1a36a3274002ddfb6d568c06a02f7900d182b00eee2f190b98dd7dfd1ae1ac1dac5a1812917369083eb
+B = 28c94320020b50021c3293320427d61b5e1e3ac44c763987c8637e3ffd826bc1dab1e077d3fcf9a0342849a527674540e2a704ca719583b1b4b0140f9e1bb3b44be8ba91c2577640e328f5797cb8a6b87b4fd572ae64496cc75ab6fdf69903d47919af72663d850b0e9cb0fdce5586b3f8755e26ca72b47066589a233a4058b
+GCD = 3
+
+A = -d7c9689c86c2c1aacc998ebfe48ed0480a9a0d7500399bc8bf6d29dbcd47d29be4ec52a8a559a042047661f5d08af1eb51f2ab7c12dbf5505eccfa9dac5c8e239de2f49adafd20e861e8ba6366c62a5dccb3a6885fe0eb87df701f969676f7b154f88e3390fa530a261b5d07e336f6587c63cf95ebe6fc6581302e48d641cf24
+B = b905786cbfb32e6b8daf2a58c25f786ff956937def8679f623b32ff3c1ab7e1f1453f192f47bfd76c1ebe513f3158e52d2925bdc710fbd90cfdb34df9c06cc8c277d33e7d9259a2c12e6875893c59d9d95998585996e14f8c30bbae0bf1e226d03eea2dc0d69b302b6129bc9af4e3a44c0d86ad913168de098fbd4fa0700da18
+GCD = 24
+
+A = 8a2acba391a75a2b7727d83f4e67631ec10cd74476bee8c882281480f44fea9408e7a1499b46079b045d85af502f2ecedc3e630da538f818db0858fb163c2187b0cf1b1f23c3ae2c273fb9fe668c14b6d9282710992c2d86e288b714a75fec1f329c74a0b0921251d1c47fa95c98df77bb9a5b159507d601e50f7a104afc4a0e
+B = d6beb6626cf585023a0a622d8ef5343cad5f57c4e0c2f0fc0c0e7508d49ed9acc0a7f12379f7df61a1f419aaec71193847ead7cfe5a73ed925bcce0097b964d09f9ed0a64bf790a44ebed847415012d809d9f1ed285a5fad05ed66f42221f91a004ccf203dad709de93d0adb1b1d9a5cb275b520a61c1366c849e4912f8c6e58
+GCD = 2
+
+A = 4e6dc0bf488cb214ed0f82cff9cd692233e78808e32be2cbbc066cd86ce29171475c4fc784f51b7b29a21d57acdcd1c0d67401860888e14618705fa78577367a0bf904520b979627620ae33045fbc66050e111fe7b53a99e0faf2dae09d4f177879c3874c8a00674295dd35f9a4b25ed1d9139a1425c56e21ac34222bc8011db
+B = -98461e6cb7bb527e88cacbb6a37750c0839f9458094522fbce1ab20982aed5f810f65b4575e820e9dcdbce1dc98e031a440378dfd4d820f7cf555cac796822581323e8cabe5731980ccc2d609e13d1c92e5fcedc4bc657b4f6f60f0fdb21eda413e2fe0fab5183d885cc8626e2bb55acb3e4191359461aff4e8a91d1125118fc
+GCD = 1
+
+A = -ea19f7f26056f11938975558c0dcc901cd500df7c7c359014deb5d537f4c979edc1e176046e1b0fe444adfd70210a78e6953ecdbdec7f368283a7e658e9cc2cdf8e8b14b638fcea285803ba9908dd8b176622cb414ae69c18a8ae12e5693feb397b5bab0788922be9a369c8423a445650429925e5ae3137ce1172bee4a702108
+B = -fbb016ebf67c48f6c4bc33f252a97888f31b80a56be0840ee9e32e704086aa90171a1fd2c65426ea77ef6663abd6bdaad0bbe7096b8a41b2428a2905f40a1e85deacf90ef2ad75c2303265938c3d728f8c18a5b7b6ee3fe33d197407d7bcc8391f41b78b0fcb3404e59b22e3144f6418a61141c21aaacbe9953dbd918f9dcaec
+GCD = c
+
+A = -c168e74a6cfbc43ee11ae04da1580da40f954a3f87247a1e9cadd3468b3aaeb80995b5ee3208a1e85996b895fb242f0ddef185a2d5fc4e7f4a5528852027a14a73b484eedc45f42b2ffac6ec917542b31546f1b6fe167d65e94d9ad38936b5c232ad8ffe9a3ffbcacab9c103829d24c950057b2aa324b549af1486d58255b487
+B = -90b42a0eb01b4903ddfb4a014152fdebfab31ae3e7d92da65633887e780a70f6f152cd155017af87ec2743d58344d30a422d9c7446a0b3f29c9f7925380da19fdae29dd34fc1be901246bd99c90c15fd8fb11704319c779b1ce2b7f8a7ee333e7512344831ef7083ac0129ce0123c0bd4e18f88534cc05287afd1905f000c6ef
+GCD = 1
+
+A = -79eab93b92fba169951e29a88b60ad572a167ae546ae563037f0e8888286a615204f3c7b3b0a43893917ae208dd33403ae537bdd92249cc756715e8421dad70acb2b67f1a807f0e7f5f5b8bb23f9d83817ebbd8bf5f89d0175eb72928c3715c693e6cac2bdd711e2f1fcf0cce857e050102ef2d011e03d5a153d9e08e8acd629
+B = af6d4c5a9f134c9534476767601f9acde783c89efa3d92d7812907588d524f5c6cb1a90bf28abac8d59d5223f03bcf38451d75fbded9653f522fbb0139df22508e0bd12dbbb6a85dfb3c94d27ab4ad28f91e7c514fd24c88829a1eaa5921279197d37f4f02c639acf2df054845a7fa70d840dc04d119b8a1e34f5a43d83b1e58
+GCD = 1
+
+A = dd98fab0bf32676deba2a6445b5b26e042e74b5245dca2eb758ae4ced364d2b2b0b9bfbc80fe83146f0119d1ad96f15ad59f743ce1ebbeab4ddce88da6077d761fbba548223ae8508ab43cb04d6b4d8efac47ccc31dafeaa7524d8ffe287ca2305ba6df9dfb9a6175e0a89543457fd2f7bcd8c10e42602f928b2100009bc4f63
+B = -cef417a8f1468dcff5a7b53b37316e64d8bac3cd517784c732d3170a07fe268e4cfff7362b82f00cfb7616a014c1c7c42a5aa2cd15353ce692e75d1be114167c0f898bb43309f4a82a81a2259bbd0c5b4ebc78069427b4d01e15777d1966cbe01c5c7076fc840c093405bf96432dc4164b7e3f0e3b8ebb561c009f172d965cfb
+GCD = 1
+
+A = 7f3ea13b447818e00d527e160643649c8e58d5003473d75c5bfbebe2cbb2883d0e32e8793ed8c20241152d2718f0c989c041d4592f1901640a08d4007342fa1aefc0354a4d900c3846a176801d01373999eb7e515a9092168e832cbff4f1caf76fa5f30407d158b10bf47cf058728743c29642e44a5f37b4db66ded9a14ab6b2
+B = 8d035269d413dc066d946e34fc21278c3ad5907e9cb2c9ae693b7565b4978bd4ef527112e2ecdf20e0655b728ea51cf6b2564608f902ff7f03613775f1a36df2008408689b1c05178c36468efadb0383affd69864e3d8f8889ae0b223e1553115d079fddf51e29c5ecdc4abf667023cffb0d98070984f75edea9a27473f3fc2a
+GCD = 2
+
+A = 2d30345d173fb6ba3f9f9502f5a177bd91d532118f2464ae88ff50e595acca7702f8729a2708e59ef66e557c37c0f950c61cd9ec88e44df24db7d51cced07021235c9c873980fb8ae5da3e876d4c3a12f70b35951d3b1ccb30b9827d6616443e1bf24cf47e17690d2da81454ba36759bcaadd9a0db16e6987fcea8c134e60b28
+B = e38335b08b9c7de3d13c956175d4d1379e46b173d16b5b583a1b880ca32a3316bea9a8fd761418c7f44dc9709aad964787b51ba206ec164d035a4c03a5276090bf8ec275aae641b6d0c6119b3dd441784d745dee0061d4a12e205a13a8404d158f3d857008597bb80e9d567413450b3a2fb5c54dfe0c89a16f9fdb16fb6d0e6c
+GCD = 4
+
+A = c7584c68d7befc88830468de6708d1f99aeeebc0bd2f06c270236ddd947eaf0816b2c19e18e3f065ba71e6992b9809150afc32920cf744ec87805aa0f743dd78772f1b90187eff89a8689d2dfb76761ebd5fb111b88fb04fdb32e443d8741be49dd7077cb98a2ea9a7fdad1dbecec1062c4b65b15365ef2b6a77bb64c08e9706
+B = -d4b6ad4a44fc414a86106ff6182f3cea4938fb2bc977e134dcf60b7e44d3ccbfb89b21d9c7ab9e0f050f674dbab1cc37277d2b7eff9a3583ea4bd20986cc7f685e4f1031cbc9f61f71938240ad8a98b5d4116b31e774528cdeb9098cd69b014066d27ddecad6f3a6939a633b61628d4085ce1359c9bf06b9b9cc690aa8fa8492
+GCD = 2
+
+A = f364b05aeabad28e1002baf8ee7a4b09f5271f8338e07d321a76760051ae7460f72f13569bbbcd994be653e1b248142abca49222dc1f08cd2690de35f02b86833406137e091a14e89c7e9a9d449283527c13d0f2c531280659a00170f2e558c5a37c87dd1430a614ade77e78c4e55919b7138e2880522fa6578b3fafd2223930
+B = 363f28c9944a8e044e418d5b0289a282e4ee4a2de19b0f16001609c36b202b54825a2cec13a7e370bed3ea2f417aa35abd2477918127f3779edbb168bb86e029c7f006753d8ac2bc365cf959b7b9248b5feceec9a6156fbc8a5871259e3b238857ba10b30c98266259d6735a6aa8ef84dc0f4c3ce2afc2032b10cbf33ba71a91
+GCD = 1
+
+A = -753dd368a04b19e90657d17040f3402a16b9089858d577ba4f81cd74c6f5ae3262e41ef4328c28e14ecf7d1e896383ff2f9d0eda3bf9e43d063d96d3ab6dd1d298035404d30e100400f2fb92d741cd438d2a9fcf4074c6fde453efa8c2e348cf1b421ba36eda318b957b0a0d4bbe1ce879de0be301d856fa8fa7f510fde826f1
+B = -afc3674cfcb1576dee479d12d3a07e2202931b43748b3a01664b8caffb3523d8af13a1e338400966c5f87e4f234051fcf7395d31fff5e40cf5f1a967f172eafa3899495f77f9bb9239baafa8a79917e01d04dd03bd1939ee56db4fb1b70ad6f669e55f9071fd344eb7139c3754cdc27b5b4a6f741c3cb4b54cceb45a69d9aa16
+GCD = 1
+
+A = -56a51db9aa144a698983f98f2eca90cf37a3326b46a8e8cd3bef8a37504575b413778498c74c70aedfb9e039aadfad3aef06fb3ddd4cc3b8a78e76a88a5d97e8a461284179dc105e7e3f8790fb616cb840d9476ed172fa0258c90632f869ed109beb77d8f4b3e1fa4c03945b5aa772eb037c06251113c24065daf55e794e6d6a
+B = 7b003c772c0db595145e3ffef7fc2eb2ce2ecf6ae0c8a0d3af11d2e43524d7a3cb70b36decc310f80a7428a5c7fb0976f1659e6e43c7aed643f800085b1b0925479775513ac2a24c407dd8820afaea544a86e51e4a156ddf397e9c5581783ac7b33abc57836127d84cdaae847b32842b9bf99d7ba554d0f34a37bbfe847ad317
+GCD = 1
+
+A = -a3d2098694b8c8a27cfb0946b007e21b528a6228a03585a919ca14f37c6b454696be7496f3473345894f56884510724a048958f88a0ef03f5edcce2dffc95579d7afe91fc756466e0b56a4518a724a5dc2283e520f95bf1c0f9d1bfebde2151a3423a356001111295810b530f13fcf8d5b02294dfc06b786adc60c192e63558e
+B = -17080aee3412236e396babdccf73459efd7578fdb465df2458aa08c4198bf4c5a99af40eb8964887e14bd6ab0da5b6f11c4a371933b3268c4e74878e702ea8c6daf374f6dbb4787444ca0fdacfae4155b9d3408e6e7d84145a410e115dfe6e734b0dc7b0661efedf04bf6f542980c4c1618c2499a3aacd7d0de2f0ef605b64af
+GCD = 1
+
+A = 306a0e87294260caed538117fee9ac617a96d316b837249acc519e893ae486449af7bf8222f10d0472ec60aa90d19f8b908a1fc4585b128cc57e6b878d676fac0a1b49e6f9ea685425139fd77ad9f2a09e9f5ba126e4c60c2948493c00dde87d17dda784b39ba2e95bf4103a46b12a7f456f097ffb2fbb59bb5e5ca668301a8d
+B = d36c8d9b20cd3a12be94cb277f78f2193f647c406fac01f0a1087e531222298edb76305f0ed327d32cb42fb1dadc678795cb5755eb6a684c35575a89773c8096cf1741e8cf1345141737cc7af2cd5da38fc6d3c517514d19defc16cf6df692c9e9fd8160549bd9279610d65661c88b95b8de9e817fdb5a3ccfa934c6371d77fe
+GCD = 39
+
+A = -d5be92938f9f1e90f41cfcf1be9ded8ad969ee0f79d2740184be8886f4b3331487e84f9cc2a78e71f62c0dcdca9b7092b5060650eba59554cce56ffadc2f9a9827a0e4df250d23abbf3e887323342b938bd99ecaf44d8afd01211c350d1bd2cee5c21ff43456f3dcb467490fa18ab92aaebe1c3730f2e848379689536b936a28
+B = c51edf7bc148f0ea88cb4b3d112e1f3048a08b9da8c196896535c2e22b22c07e8e5be63f6fa18af23f9f25b7c7e8c9bf3bcb76da94ba82f8affbecac8792e03c5fa2e1624ab999d192a3266c8dfa0fbd53938a6bba729ccdb8e4337a75b6564bda12b4b4b989e470387dd19dae5e9c77666b51f07cd9e28634ef48ad4f4d11d1
+GCD = 5
+
+A = -60f96ae88cc77059cfc3cfdf10d82c5969b843d6c76724243c738cc55ef428b4f9d321a480a3fef80caf7707ea10f6b2854f9441a7a77a1c7d8970dc18cfd03c519ef0950e2914198ea89cd188f633d3a68f0d1cf3ab5cbc0bab9feab6a9e57c191b56f67e7540fff882ddd60ac7c18efc550f101e14d4ecd52363dccf9552dc
+B = -239a2f67237c916e8b6f9b89ccda703ee26c79211d807f396428f1df8feb0bbb75b64de95e88beadf2a3fa958aaf8e61a1b3f96bb3184b657c7f568ba189b3dc08f07d51e50f7e5117a02c865aae34cb3306f49d571e48d73d7916aaf68862e68c16246c2a0bf0d4ca55769bfa7da8bed66d2c1d2c7e6324a0fbe693935ec773
+GCD = 1
+
+A = f49e3092c3ca80d325df2ebea6358f449d47fb27569e1f165976597f003a3e292658d296ef55a3d0b7fe880310fdc5841244390efd4f20910b23862eb3390b42eba8651d9ede27b2c440c3665c7a84d2578cb82a97ab53c49d99d95e6b29762371cb485f6029eb8ccd18430ef904422482d3d2f2721128b9f3f6242d4af92401
+B = -bbd14b4b3fad7eab95114bfcbe44bac79f7055492889f9ab199daded5e2bfb0fe73ba311ac226c0f79a52dc6b0566a51bd5b52a9d2076ead739dc2122e67faaed5358eb049e51ce26adf49dbe06ef80bafdafad83c53c933f67832f2ccdc6dea345feafbc6a9f9d2ab755b35ab691daf8affe2993f8b56f51e292e99f5baab7
+GCD = 1
+
+A = -1591b52098b6fb6e18fa9969b06037cd5a5b2cd9f7bc834e2f8f82097a63e30d8de0b81efd973f0d6cc3f62ad14254cdbd087aaad2c051101c99716095f2c3113f046aced142ea90016124b529456ea7708ea49ff81f5f618d3cd49155a4a68b17bbb7f17902c5ed3aea75222c90465911dfdf01342668891443c90fba2a2371
+B = -356c8a4982053aeb6d34b250b0e20dd25cab372ea6d9e98f1f778d2d856f363a26706224d81a720554e4ae831c4d07ec4b73626a50a83467253b1643ee6121df28fd876386a0c582b8065bc62a74850ea962ccb2d777a43a02751762099d60f8993e92deef694f208007bb3577b98b2ef373d2b0eec1a557e47ad24ca561a151
+GCD = 3
+
+A = 855c4c2e3875fcef52321f69a0366e4bf91b1258a3b6b3226a3bcf4c2c0a8cfd310c47419d1fb30064d23479a70309c73f916b57966eef448360ea39a7c1b12751ec19b35bca228366e4821dc608065ddb8acc97917d398408d3a734d15e25c8adfa0b966a940670955103a4226d5700b29d113b943c58c3fb0ef0981c0dae2f
+B = -52a3a9c73b89185d44016498590922155ab7ec9c9554ba06038fc04e3d4422450ad0bb0557627e46127cfe1a657c41c87a91480fb157e9bcc19d1944346f864cbc5a93864add528142cfcef1c042e61d63c2f8fd12d250c7a0526d413149b29641ee7941c277e211f5518ff572cf5b025b495c3c8df10a4a66af6684aada670c
+GCD = 1
+
+A = 23dc368c3eb9e042546f6fa10b87e7eb945c69eb5f44f37310b68d97e60d5f7401b69a754159f8ae4dc9ac935cd08a827dd19fb2ea5d70aef9cf20f0e4818c596c2c7a0ab607e4ea8176e3e13ccfb84871c0d0aabeb7de0d130d50be98cf44ba6869c588f08ef466ea8f3da672b6b509ff5ce31030c9a9fc4e4eaa6708771d44
+B = -5b25674c433dbdaa030898dade6bf4fc8894837045f212ce3c06d10a8fcbe1d67c1a31f9bfb1aa84c00380208f3bcaa8f55ba7f2892a39a0c412bce55d08104a73e9e699e61023ccf53a524fb938c9bbe0b83b88466522f1aa8c41e6720d3b016a913ffa7c3d27697300249b7923ed55774c03424ce455519a007c265d898aee
+GCD = 2
+
+A = e816bd876e1ca98c2e0953a55ec4c5f22a0d6306b26464d5dca8485efd25036a6e5e77273fc215a37a828b80f3016da6086f63192e0962fc80388b0c88ffd3945eb60e5f673407ad18c4e62b7cb5180f8a961765f08c552950d45ba3b63e24939e1eac4c509a3ddcb4ee47446f56cea9706834249710dc47241dd49147f2cadb
+B = -babf7052e1977b4e6ef4caf0065ae49375021c3cca77ccb4e12dc62900ff3038e78b823078e964b653efc5b519e26c7cb034719be94a69635c33205ef899e3f994a9f776f294158660a959385620846bc2211455f981f34226720913016992031a51155d4fcfb964f27ff3318209a7c5ce9433e38d803adcd01bdbda5a1df20c
+GCD = 1
+
+A = 4063fd1e25f259da4aeb111db384426348695a8554818ea9ca54d234e0b19405b30d75cf47b98293d9bfa2660f5ae8ff92bf663b595ba43fb45e59b9c8d89090cd955a97eebcb7c2d72f361c08b228dac2992899b80ce94c61c9426f0d2797808554377aa6f4f94839bca1ec30bd871c4b077952972fdd5624466b22712b606e
+B = -b4f93303a614bfe88241df365ae6e2b05c2af23ecb547b45155475d7e329da588db707701ce10eb358a829fbf040e687389cade3881674ac7cd24f3453bba830e97b6196e1df2f9206572cc732b4d21f380a98276ad6f353d28b275de2a8f1b33f2e0565cc0b3e4e5a6502b78b9315ea711a340c517c2e3501a503da1f28b199
+GCD = 1
+
+A = -21dd649566da91768470548bd925e11a7c24a9607bb275ed9ddfa34f665fb4246f75b02932d152a05434a5df129ca107b50c353ba303540fa569b93704f0daa212d3b59e9645437119399f4f7d37a1e9cf1e74d626cc0e79eae91d8d487095ed5ef22e0d15a8aef00a6db5f0e50cac13225cfcbe79b13ec05ccf453a4c8106e
+B = -c8e9a63718d59605db093a1284dbce0a0e6128f00fab41f86120b526b3569f79af2f9aab1c911d10f270035541a5fe67311d0a63802650e9baf72314426ff42e8784cd15fa49ec347e8511e2aa246371f7bc035ac33b3cfbc8dc76c7d8c390205ddacc4c146ffc189bdba0dab0f31e57efb8156cb48bedcd5e17a2418b687b0f
+GCD = 1
+
+A = b14b6fa2d09c53234f0594c9be1d1116f7f4457ac2b94d8b484b0e27ef952475528cf0e6d18d3df3b57a07214419150c5186540f94592828ae01051b72f34e9bfdde67c0f57f37286e7a0cbf661c4a8849a82f8e3274b3e1fbaa7e83e4e12a6b97d5e3c1d279976b55fe93318c69d1aedef6ecac5f8f5fbb05d2ff5262dbf8cd
+B = -f07562307b893675106cb458cac34e850904533145d58160eb3cf593330969647595881a9dea91d37d6d7d2de8f1783fcf0fc2fc04d59db604d1fc48fc7a2fd41c4b21bb38301baf24b9bfc5b4012fa96088ab3687512a594b6a51d75355f20be8fbf1435e53eb7cefa46f78204eb19a592b5094df9f3f5a9633e85427148b7e
+GCD = 1
+
+A = de9a0b8674ed240b507261adc010c59a6848a863fd10ceeed6373afabac5fff2e31bacbe1ccad29d10192833c873bd20d4a14df4efa9ffe5ae5ddd16b631a8a385aad345e743d052e9559a461dad52596e4307ea8e277f59f9bfaf330fde27ce1337938f07bc3efcb4048d4b7acdb514b7fe06fc37f4532cfceaa16da49cbc81
+B = 761aea78854bccf7eb0e9442a67a4873759e693c9f7626e49124b27518930e67a700b0be817e801b4a4614351ccd709e4a665a8c0579264151b2419715630c8ca53d6f9ce4f597cc045e69761c01f5429bcc6597b00d0ca92430528dcb3bb56e110466a53b290f1e1f3442efb7e26ac6f59c1aa3dfa7415895332220ee34e95c
+GCD = 1
+
+A = -ab1162d98a163a84f24e46191f2a43624286fc535f9c5a5a17a4931cb1105bcb618c58a79b788fb7959a649a5cc0d3d10dd990cd0a5afa8059de2abb8acb067466cd25c1e433c6c2fde212c08cdd67b4b32030497397d492a684d94dd55b807a5e63c01a4aa938e8495044739f9710a9de685568ed2a9f59b06e1cb501896282
+B = -a5ec30558efd043ac3e80296306244056d38d792a29f2113be809df1639e883a80cddad293b487bf39a3fe60f0e15b0708230be27c297bf93194836b9b1da04f16fa345a1b898d5e68752c2b031194a4359a424a0b592eb4b07f53137ea20c3436606773b2cbbc945bbe51ed6e838f6df398cf55733aef9c66d9d7910b2afc62
+GCD = 2
+
+A = -d2a3fb79378be5427bb771e233f32872f692109d39f4f0d4ae9f831dc7c3b8957bb96d71399f1592545693d24a77bde6efa228694d08fcfdffe3fcbdcdfca2e25aa38adda22d77c95441f0e80ba7773efad08548764fd83172befe3d6f3b73df5a10ca75a13947bb9a93bc20652f7309f7be24493c9af7eaf80c4bca45c8a818
+B = 61b4c66345f0fd8ddb0185767da295baa22d51ee461879ac0b0264fbb09d2d0e59fae902625eb8d7af338fd6e91fca3121c699d5e9e5a20b8992c6295abdd17cc311672ab014a83dfbab26bba482f7997cc39f6e97746c8323dbd4026c7057a67ba248a721ee933441f4f716ad6ac4e834fc5f15c8ba38e5e62690c3faee5591
+GCD = 1
+
+A = -1cc11607588bdb98b926f330a8cc449fe85eb876e138b4234d567b3e8dc9a2ff3142181069d0da06919d782e128ee7ce0e2e95dd201c11ed19b8674f82dea6d5d6253f7c705378f0110f6ceff2d72f0f6e8e62c3351ab84164187630db43eb188775207d27f9f11fffbc70185eaa57d1dbee64aabfe8ba8f7c8b653737970ca7
+B = 2410a6aed9afe750b328610f85ad82fe7b93e22d3c57f35f0dd2c449229dfc10ad9713a1b1756c02170dcabf735038e4212bf34f28749487e9b4d1db8715e7803941baf034f7868ca89e76a3fcf16ebe5e3ad87444ab40a2cdc4286c9629798a69f79c807be9c86fbf0b93bdc0728f2a504ee5637a9011965c85578b5187c4ac
+GCD = 1
+
+A = 961722f18949e64fc2b37ce93b4f10df539f61423fb85f6709e269429eb582a9763406c2466bb499d735dad454726a363c3e54c60d668abfeeb71eef5b636c7ebc047127325ee717d9dd7e95192eafe189344ebb4e19fa543c51d937e9c3adb0fb8986e663840ac377a02bbb9a942ace6c13a78fda252c70cc9bfab4d30b75b9
+B = 65cf045c2ebac15a51f54513153ebbe631419aa7bb0010dee619cf2bed1019812f761cb1ae2195200163d96c1a6eda1a5745a18d1474c351eb680829bb604c8046e5b5ba21d3bb39a1207f3bd14c8da8c0d2538f89dc0311a646ca6faf11b0e1bfd3a21a899890bdfd13ee25238e8161284d7533e51958ea5c5f1d897d9d0236
+GCD = 9
+
+A = -62df09338845dc933d45672198acba7616273acfa347c87d0b588aa1fedd909e0939272970d0204b209a6ccbb361d14c1a55ab1396b800b9a34c1135950a055af81821438b8a1a13c64e2015d28870555291d1a812fb25e25c1454d469627bae7d98a5bc4b28e0fc66fc2120933a1f20c24b0506e06595ddf001fcdca2604777
+B = 384d65066ea4300dddb8aec169ef23a2726258b47ff8f52293f959917738103c6dddd0f80b431d99750b22f66cafa7a5813fd71ac9bfb6380fa65da1feda097fd2c4e7786e0a188f89ccd6b24f06ffcd632285f3acc86f0ed2bd8a69f6bc39fa8fcc471dd22c411b6b34e61bd04a288f3b8209683db4485fc2a6b81c55cd154a
+GCD = 5
+
+A = -857f986de3645f152e0e689ac57034a8b31d51918fcb9a8b3d6cffb6c2529ac4102e9d1bb1210893501e7e305771411fa93b92a459e1406d7c9ef66890a2ec5cec75ff6919bbdc813dccd2d987470ab5f639943b5678be5e6704e1a8bfa3d3b077dad37ecefe34cfa6591b900b9c0add33f8bd282735536f8ec66875f7978190
+B = 16c0adc2d3b86fde6f053d1950b83765a9bdacfc22df0a8bd6c56361c1d24e903e5d4590dfbc64c73ab6333a740055fd9ae97ae476d729f871e0a373c4bc8479f01df5edd7e45a96aebe40b9089e6aeca3e291d87759d5aa371139d4b95ca5ae9e248512c6439288358273a918e0714d5016dd2a7bfa4502082e1022e0c7d92
+GCD = 2
+
+A = -1db55d589bda08bd7360140d0ae579a2706937e0d0e4ec84bc0b5906f5dc33a8267ef04eeb3bf99d11446d9a1818d9fa61daec41df466d129f67a38336e05c25de2f7b3034e3039668cfa7bdafd23d0bb81f03ad0fc1bffd152e89011d7399f1a3ed3aa03e1177657d9496d75964d97b13535818e39392ce49f8c604b8efc49a
+B = f685a5babe5a5ba3031e643ca5c721abd1fbda6c75997f86a994a4da1c38cfd158462c8951f97cec054c86b3c4b082fcf8d55b864f88ed74bf9abf61f6cd49796a4def9310eae7323d7f642cc3d6b3da45bfd458e082da0ad92f44948f6093563218946a4c65778a4057242a4905b00103af41d5f793eec54c04dbc9c8793fb4
+GCD = 2
+
+A = -6cabd38b7f13a98bd4e1962a4766bb29fabda331508ae24bcb63e97d6547fa57fde43b4ec07b6b5dec01a0974a7d3e4c5c2a05191b41910c9df1cc871a71900c9d50d81b0aca3cfc2b5019a151b1e80b7b5d56dcc520de314ab661339238c41c6d70fa5bddbc9387afd6a1c91904fbc7634381b431c0a08395d2dea75bc8d8cc
+B = -7b4b05b727311395960b6826c4defd4bdb12bac43ae7e54d631bcada77a61f2c3d10383a0075fe79fd297bab0dc1b03c6820c6bf926fbdc0122d7b9a6c478f20aad3c4bc14bd7a0d68b2bae7d2000a5e1175511e47e363ae2f50d22d417eb2a1f8e61ddbc2d6be596346844e49d893fffa8e95662875b56c0d0becf67301f5d5
+GCD = 1
+
+A = -24f968b4d5d3d1122c1f4168be1ef884218c8953ffeb07f0f0905342c4f6c073b99e51ad09f432e9882f259da5cfb3fb3c420cf8c3fd9946f4a9a43e367f4bd958972b6ae4c28e730d9f49b16bf1e70a0d1f0d6b6bd68761c672708008d03540062e6493bd43aee1cb4bb2685489eb224953d0ee2f8922bbd718536b19dad4a8
+B = -43d82a51c59a02f290022f399f275da2e51c8e13c214f04d76aad258970d3ded269475c07ea8153c34503f25ec07742df602ef055305c5acc7efefa6474c205707cb41698c3fe409d25c82fd0bd6431fe94fa1b456123ce77cc5d24c5bd62dfdd9cd07db3576689a26d0cbb095a170c1a37654e4fc334daf5eb98387ec4a2acc
+GCD = 4
+
+A = 636d11711f36e260069cb73fa0c1b2aeb06dc1eea13bf1ffd60d07a2f362d4fcc910288fc80725ccfd0a93bdb3db13859d8eb06cc49d21f1a4727845113951c52d800030808d55e53c8c9a2880337dc1a3dacb0000e34f0f6b0aa30c16d1223cccf11811145eb37e7994cf7e2ccc88bb240faf25d8de9925f7522f46fb925319
+B = -bcf2d134049cd275476e4b255a3acdf5d84b3419a932ea153a4faa95d1ec5578e2825eca2cd42b0bc62d4553630e2539ac2a11e4cabbd3d212f77438f8ed9a58159c262fc8ac4c5e3574ff23f907f043a431a9c5801f321c845b40214c3ae5edeaed5f4db8fa364b76e0c5ca7a14879f629030ad59759d3c3426088dee036ab5
+GCD = 3
+
+A = -6b0efb5649ec830c0f46c9da3973eb8e120a8ba25738c8c2ac9a58d8cb74835941e6cca4ef6086a49261afa28c771583f772a82d4e3acc26bb4f4368c62d4e6f918d49ec463e8849f7e06dd77cac5ce257c45736c789a5102f31401aac9703848e7e728015767bb5f46c5180688b967bbf1326cdbb5a9b8f397e7e169e5870a8
+B = 6c556488a56d178367a48de914f3ab7c695c704894f9506b17661cee6d6afc189562a425c3f21384438a9b5fef4dc3eb1e845911f17c202260274aee1d535cc7e90542cb0ea978b3201d4650bfb623d8dd192360f074a19471970f299ab59b110bc767d9c0bac330f8234ed2f5f17b0a14889e3975047b3f07de8c99ee6fc7ac
+GCD = 4
+
+A = 88403cb3f6dac3516fd9190978e668b9e76b9180e6759936d0d744547b41326621d9b5e3b80767f33f2e0de301c918faf56f0203f15a2996d86d5d1665548b392cb35ddb1d52fa31fcf376de79daf7486c453809d8addf1d8c9b12185af90e1d7840969bca66673c63061bb89dadf8a11db77a072061e45415456293e5d4ae9f
+B = -5aaafa59cc04fab48e18cb7edcccb3e2db5858ed4f2a4b5909c41e6dc813ca44c74c76afaf669d03df8492600120b0eb8fffba9b19e39f8aa6b66e9a34b8506da889f7ee7aea0a37506fdca5953d55730e4a3fa348b3c5ac706604b2b2559340233d7b5135b6e323656c6582e6acb46379a57be8e07d17d79e8710152b28d518
+GCD = 1
+
+A = 947dce7834d19fef53447018c986183e1c51c390eb823f12a7364b4d9c328ede24fce7dee0d0b40d9fc5099cd5e6f4550f16ec7066ecc8bcac57b46c7a7e4359773499b0df3c79883cf660d41b72c0da67782f71937b961532c2422e42b8a98647ce985868949abf6b702e3215a77593bb4f6e92db2c0c146008468679a23f93
+B = -784799efa56959587ed3b46901ebd76a5ab7344e3a4e2f69e8ed2ea3b21332e37fd7ee403e2244b411197fe0d95950fa11caa1feadbe145cb538652890bc1bcd526aec7632e19fc05ff403ecdd4ecfd919b7b322b69ff11475767cc5e32fd0c6c2a9fff4f54a474d4ca88f42468932c4a0dc9fcff887159a2adcb7caf253917e
+GCD = 1
+
+A = -55e4d28b74ec6d553d1b364f4db88164a5f6f88ec359fcc0dc46bc393d5271d4b5b0744a70391df7c26a3f05c65a6786774d7cf27327fd5c63d6cf9fe523ec0abeab7c50ad3a0bc7722f5a981db8a71bd8d662332f96da6cebfcec6c613f6801b0e7e20687330951cb27bca867bd74a77e814d9125400698ab727f044a5e8f5c
+B = -9a822fc748950318d69565cefbd036a36d1b80b955fa774d3e129138c14da4199c1a235c0cdedc7b37b7d6f49fb4c50a3bc845380795a1e9925f5c8aec94ccde57a468433205d10005246aa1c4922249e8c27687713e2523db9d4a95cbb5d3ac81eea46e6a0f24fda8c34feae6e4014b6c9f11548c7d560bd3e5dcd7b083dae3
+GCD = 1
+
+A = -f3915579101ae26fd8a042b8966e0a4ebb6f450f62e362a6e80c780941ac5435c7a25704ed63af184195f017424e1b9a6d88865950df314d865e2842c4b0484b04c906cd572910d9a2c1166f42f1a836590993bcc0e8a45d60a2d6be0f7cf2e17b11b0be4a7e24e41f92603a8892df8b92617b07d84858cd381f769809fe394e
+B = -3af27f228fabfd06ddbd22bc7611933e7741a1d1facdbcc9726315e2f22daab36bb9cff0e2e7fca709c66fef35ff6d2b33fbc3a10de6198a8e9654c53728d6679dafbce191c14a1ace250d96e92b46cee1cbe4e9afc8b10cc8fa17b296c14a7bee1c22182e3b7ec42f092c046fb80168a802f55492fc6a0ce5ba3b70621e4886
+GCD = 2
+
+A = -1a9834a5331ff1b7b94ff2b8f5ca2418381763ca987fce6f13c8921741f421ba18e45cf22ab7bae201c3457b0eee8f18c8fbf740d7b6b0c135f0c0f6be70b4f89ee3809c90a1bceea7db85ef93870a2ec238fb27ab4e2ed001b81018bc8c1485e4e75c0a1dab521281422853285b2a142a578196de4c55593890d5328df92551
+B = -4d716c7e05dce86ecc8aa5d44ca078155571752b61d36d97db2d1090bc8cd79310ef60d765a2c1eaebb38191455dd71e133ec8d6a21562cdb1e5ffabb71e95a953bdf849c39fac7aeeacdeaa654ae2fbb9211b915fdd1210bde92a8a468dd959b43fb5cb8928ef388c8a5c1cc864065f0c31f2ef65e405ce9f67783252da1ed8
+GCD = 7
+
+A = -bce66a48544d69e2e5c5ce2588cd3693476f7272c67b5eadb2c14be8f9a0bb086261aa2c7bb4cf87be35524e53ff9fb1cec7893024dd1487b12722f5beaf6ffd358a936f6a43944c053d64b73a340f68bfba9ae9f4ebaa1f6fbb6c5b1d1a0f674e5cc34a7612f2d91d2ea26d5f14daf2afc6ba3b85b69b45b693347bf25e1720
+B = -d4e6369c7aef6c4ff6245a801cbcf984b60b6242d3904dadd4021b3b6ff7614102235aa3486c3da1d89f2ded9a1f507a47511805bfb27d31a702fd79251b90e797927a9f1970780ba80f100928f782e9f894100b1992348d64037e869ca522a3f928e43fd8dd69a21af0f7722e36d4f1876ab67a4d63d52741746256f68bfa21
+GCD = 1
+
+A = 2f9285d79eaa65235ade7169dd1cde738e9a70eee623115497138d95fc3ba0b7160876eb3baf065d06993e26d82244ba27378da5e5df7b1208df3b49c11b516fd0e28b30b618d09e8fcbeedae1479b848d0332e38a77a8337c9ee0fee0b5136079e527fb4f30851a2c854baf762b5144a9dfa7c91e6deafffe68aadbd8a7187c
+B = 2415f627334139d33fce229dda858f790695d936d764ddbe8616d0588885456d41d4f6ee5988ef12bbb196dcfa87172824aca0210ae0d1c86ba429ed9811c2cbde2f8a6da5b27c7a2ec1153d8b59ca4e17b02b9eace9850e3ed1e10c2492d7856b0370241a9178f58786432cc492e9d24ecc7c197de3947b857bf6b8630c8a81
+GCD = 3
+
+A = cec5427203cdf62c6a18a25e1989d6c8b5c68eac54757010294c7d3c312a70452840015f22eaba11a9582d01e6f02bbf0477c7fbe8f0e85088ccc6e64df24bba0ef05837ce6394c5a2da76fa18517e5379bfbc007129f6046027d4600ff4ab1ed2201079ffa77741a713df4b21206373c0a00267ecc2d27b7fe6dcd986cfb33e
+B = cdf34772ca52dbf46dc9018f74c3162f521dd2615a82604e9f6203345236d2f8d7eba85b0d49f1aeb3f660289899b401f01d56ee1316df385c4aad81d85a0c66d412d88a8e4db2f5579c648619ba25ab0b118428e77a6acbc3b234cc6110df96f467260880ee1d2adedcffd5c2137c2845342741337bddd9182507cfb1b17dfc
+GCD = 2
+
+A = 2faf9f2f6eac0a10e6b0a14df59a3a13dd9f2b1a19b2064a38eeda0b8c4d70535d5b6d16ee8cfa115079e0d8677c394efb3a963ff67672c4151a1512741efd5fc124947d13d0ec1a34fdeac999b899f75e10451b3f73a2deb3c6b216ccfc67c8f3a4f588f239d97363916587d109ece92240a3db36245a36725d35d6388c01a4
+B = 23bce02f7b7073e037cccce224f479c689c66bfb5d13709ce2b0aa65155fbc27a343bd2c3bfef891b70391629b05ef5bba2bfc5e0363f406dd3902cfa1655129a5423334537ee07e7b929840a8a0966bb5879ede7b8c7acc6e526bd533be5c0271e4a8ec574cb20d6b6c5ba3aba6b77bd7940885ba6eb93023e737a294d5503b
+GCD = 3
+
+A = a6e08d945a2474842150da5ad2070b2005910429ffbded511f808af86d60cbc076f3850b57da719fbe1885bd7f1afd58125ac9d35276a9ca28e9fecf542fb4d20878ec00e3509046084accbdae052b29e4c573bec72f8a2a0228f93e44e91f233bbaf60d45198a9c2aa0cc77649a2b22ee0bdece8cccf9b87754247599abe0c
+B = 1070bdb20f1af7b35dde9e5caed0a216b21c08bddcc01918fac7ccc5edc1a895a1ce0d733af0269db273ddb72debe3998b4af21d198630f5226b03252e0e4447f1ca04f7757d25ae950fc1154c461aa2a38d0740f0c7f821f75da71d7bb20f8aa2c1ce4c53163e030ea3ac74018f7d64e1251844cb0ddaf8d5b7e6c62841b4d2
+GCD = 2
+
+A = 2cac3f864ec1ded24bfacc4e148b32695498eeca74015dd20bcbcb22fecc5aa1c3700a65dfe821fd0d9016c3d7fbcf2d85a97f4f32f041d0cee7a524e97390eca65f508f9df01bc41358b296b3ad84fd7f07a56fa6600b9823f983a7abae28f019d25bf2339cc58454a7e5948708cbefddb76366ee67587b2b2ec774660e5162
+B = 4849cf4106e3f6c994dd0f9bde071f78ea7ec4a4ed1574f03a9dfee2afe74b6627dfc7cacde8801cc8e56e5fee245ff6382303b68b3e5ea71425ebd595fc0c4afeefe4941fc68591b6b9ff4247c8e04e7bbeaf518b1b133eaf86e46c7bfd7b4e87cbd750913e3fa07e1576bbd4051de5272ef0e753dac18e17803f6f9687878e
+GCD = 6
+
+A = -3629f8989e40503db0693db866615af7a0bc134d590ddc326a219e20b02fb658ac1d5ad968ae557c655103c72d2881ea02e4703fad02d6325c50583f10199c80a91c223657694cf56d1fb3e3211a5a2f667e449e953b58ffd286e532297255755448bf5b5facef29c27c545a07ad51078f24315d97db59814a1be211cc357812
+B = 2dd2b61c456ed397ce4cad3cfc11b4b96c14fe4014af610e962e6b7b8a2fdf86bd61ccf5e16fe1ff37d994bf4c47d90badbc366115a3b3a13c5ad5c62d947b446070e2cf729eea8f3c7f5566090aa642dee5cf5326b1bcdaabc62d5b0b35ae984e20960e6ff33fdbe8b2c77c90a7f2de959884dc8cb8a13d6f5af0903593f63e
+GCD = 6e
+
+A = 9497f2226e1214d85f6c1b20012b4e785e0b0f6d8526b4fa47b84c457a599a3bbcdcbb6e7d1b13bab9225449ab2eda5c1706b35de082bb71902aecc2dd7e0231938685c8a7327b344c8836fae10e41c5757b4313e3fa74cfd2f1bbd45e2adcda1de71e8554118d20da0fc253a9552de41dd30230e0a6ebf69d1bd76e4ce1942d
+B = -900de7a1a6affe8ff2515f5fa70e0746e298f0bb1cf6d11c86b838fe13d601026655583137ae20bffa5d2431d988d0d627fb8cd18e57798f7fdb3552179fab6ed11b48e70d0ee5a626598af8b719a051bb621751f58303258f556e533702175e967f95d217bce0bf751255f3b0c2914a65b2932c5411ba4f2444546f93af78b0
+GCD = 1
+
+A = -532976cd3c8e3fde31abee5c5aa58b0f16b53e23b4e4c9d8024422928c6c7419c18e521c68191535c55d178bfb381487d0f360c5636f92d4f3e9261df7e04ad5cc16ab8544c786d8d1931349d0b85c21ad1e955c0ac79771bbc7b9b53f4a514bb570bbadc1bef54151eb75dc3899e72a04a0f76b583f6cb5b5d3ed9751c18c86
+B = -2347de32a5c1e4ca6329a652172fddee596facc84c873b24d0ac575517ffcc7dfe80974a76b15307c7c0c88894702200b6dd071e2cb1dcce5046a053b0b6187e7b82581adaca73238b689cd869102c874afbd3e5269c98e21512febc40965256241f09c6eb68a4384b9364ac066d824400dd3fe83f4b0ee7f372933942f134bf
+GCD = 1
+
+A = -e63dc5a55722e9391ffd14fb4472752020562d56c3ab1aa8d7bc071bd0dabd2800507033448b62e2539b6c2bedc8b993fdaf0facff097a897cfbe0995f8beb7a02a2b7b3e41276f6b9b9326b75936ed1b307950a5b7a1222d319a8e1045014718bf7e6d5d6024a92f70302421f4636a493f599b1c5473a91d44bc18d3a18c0ee
+B = -63e4441545a8e3e9ec06635a41d6bb9f2058dd8319296c0ba537c872012417f62f61cfb9eac28cfd66d799569330a148ed0c4421a2ae0950fb3c20482b05a747a1c5e2929174c128d69b188b336a6aedd6484b9a3332bfdd07290a11ebc589fa19ffd91c8dee0472e6654ae0d7e437d7160affae650a6694d8486da5b61f0776
+GCD = 6
+
+A = 4fa36f85da1ffc4fa6250cf6d019c77bae7e7383de971716adb46ddb77c905d0878a08839cb31589cb651a18f0f14911dcec8f21a8b24c5490b8539ea66c4db701fd6c5b213ac5e8c3cfba14e84f86df32042d7991778df385f608f75b2d047ee971ba7f537327e8bbd89ab48fb9234e0b8099b9ef93ee1875a2d3c59683d197
+B = 6585c622d838f9036f411e2a46a8ad7422f726e502ee4a2f2f0da92264de787c64882dff0f8fbe208a5df0effa4f3e77b63b88a9875ca416b7441dd6ce355f25dbe42ddae5823097bae4164ac15d8efa7c9fa21aafdfa0bb4cb73b48c312ae98db8d434c31b77de08f6b0c6cf1f00c88114337d6b6b38df298a3b67e14747e4f
+GCD = 1
+
+A = -742bb69c130738fb2cb08e95487a3b53994ad5dc80ea81c0815f0d32dc751be13f5a89bf9f13d2198fb86d7521263cb7678dfeb2667cfaff90c3fc95963c3a7867fefe86a4586d759b849c0a21007a665ec65a9f88d7f9e7eb0ab32cb31a21ae9024ac9b4b63f5a1bcd8cb6932a44f3a9a468e56605d24280ff26dc4b668450b
+B = -c617b9f3bc8ea4ecc0920da679a4410611a20f7396b9aff4abbea2d5d444df78b2df1b9070ab7c5e083a4acb936ae78b8833a9e3e9a46ade5a10150c49019c4a20b9275e5c0dbf87746da29c391cfbc214433417c86d2b10a54419f42fa7884c1ebfa381907e6d2ffefa2d968c44bbd8b9cf670909bb994f504fa4425d361ca0
+GCD = 1
+
+A = 3c2862d5e5e0fc4eaea2768a88c3b57633952ba234f8b513a752c8de99ea08dce506d46203b7b5c49eb0d8179cac6f23d9de74c632f722c7a518a393c48cfb71e4d20bb231765e89743a2f1bb1a5c1a24915272eb9407fed1c1a06eded3110f7576463b82afde4dbf7a4e066b643dc7824cd8960102d384b6b1e2ba4ec8731d8
+B = -2462a09282fa452d2cb30f9356ecc7ba90189cea0f3091b16ebdd420830eb6fe89b301bd70e89d9f4573b4abab6ff7dc2e16a1556fe6a8d7e9cd79d3692bb7fcd123f7a63cf3edb1b538b5fa2b15e2c4412ec707948ab75c39deb307d972a318fd29adb7c231fa18c1ccc7e4480fcadb0c0bd3aef789c411cf073368c8307f6c
+GCD = 4
+
+A = -61f5df558c7438fdc0335dc7175c9a59811ae41af43825829007ad1c52cc4820ff4f65cd6fc65f68aa9b52424b67aac2bf25b8ce555d66c80f530267e4844f133df40ab4c0034641b6dac3a26d88df651da94a54aaeff46ad9c4745d475c83e1a04820c4b246c6862822778772881f1978a39c15929f7187461510e3c350ea58
+B = -c5b7b9552a025eb3d994e9c145e6cdbac5ec2cf5dba21c8ece799398ac032cf051f60e828665e8777a7a646add7de115866f01f444a3f0bf1ac795bc2617be8559495b71b998e785f6835b84a36a59909959f8edd4a0a0972f047bca702186cd6839051aa23140fa98874e7b5e2c8555554bdff981eb533cbb7a5dd36420daa
+GCD = 2
+
+A = 648eec6d8325b0a7374a8c3ab1ddb37fb3c3fff07f7120813187515f4ec3ef56480557c731bd3caaf68c68236b44894300a8249ab5789e4a37725906be8c6d8e3d68e30fd4d83cffecb555ef049ef93ff79907aceaaa3c8bdf1abe09219ed73f4790e750abac9d8e2e97b3a804d401fc5602daef1fe0bc2988c7775ffaa5b3f1
+B = -377d750bff734643261b2ff53c54b7951b1584ce225c1b3fd978213f5105e3394e19f3dc43ab782e74d8928a94c4b24420b6d733f91933ce1905db16725a7d959117b89349a2d18ad18c07851b471924da0995f47c973ba7ca26446db89697dcb97031c7f85fd35c1c86facd91b936f6aecfd0bbdc1e26462d0b148718caf179
+GCD = 1
+
+A = e09852d480c6ecd939dac4c0f38977e4fb516ff5b7c2eaa65d5b1b61bd587bcbbd9e2d7d17e488763e9bba2f5d468340a7dda3581c082f325aa9a3a46413e6728aaa3b4d20d56885c5369287530dd5254377324446ba6fc0b6d10949dea78d1163fdf8a46fdecae602c3280e698bd908d7fa9d8a8392571b5d9ddf2906303ff2
+B = f364abe5b51325e989817221d40d486ad6649b094ee9848d0ba7b1fbf1e98f8065860c33fcdd1e40f03d48faff2def9cf27d48be9764c6fdb22139083c57b83ad1ff24dd7ed25321dd320e5ba42246e861e634d5a26d9ce803f09f92037a6ef20f47e51508539c3639da1c1d1edf237816982dfff3c142b012bb59d88f55b6d
+GCD = 1
+
+A = -8a194b89d328c5b8931d5881c43a70b1c4d79eec0621aeb6fec40a4488de601f267c864929ac642c6679c5f8ef04ef36bbba2715d68d7badcc43e22e1c32cb560eba3f24e314085b36bf75a5d6f9fa3fdc7e5fb0f44d9754df0ca65a9c1efb862538b34f4581d79061bf0d2acec5e5945ed7619b90f740caab115b837eb417db
+B = 166431c8f2cad8bda05bb2c126c891902f6d97dce4eb4e4cfa80dffece6bb738816f3ece6f36218c107e46d37f1d3bb58ffcdc182d806ec4d52df0db16a439a935379e738dc476a6c66dd1d7e010d05022a9bededf356a7c31ec953f51001251a20329408a96ff3daf685d0d3f9b2387e7f2c3b03c3669a37d91060e705c98c1
+GCD = 1
+
+A = fa19148af661450ee78d90098ad641a9a51660bbdf8a137976468e404b5e6741e7ed937c8d358bdb1269716cfa2a116b54518f19051ca93ae9a1f815f26df6ae718962153e6a42cb46bf963bf9651272ecb37211cc34d086dc8fd58fcbba5df21a62e7ce3a86cfce24109a3d7bae57e12c74127e490d5ed4d0c12c1f6c69b94d
+B = -7126e0d273390db965e25cf2e9c48ab5cdc7a621756a60292cd4336e83e20fbf4c8c9307adf54782533a56608490bd54a6eff227d41fc6e994c293c6c9f275b9e9abb8f045edd11228751ae6cdf9b36b60a4571dd5727401b689c07deae87b3d0459bdd703c7c6d5ec8dcf7729b37ea93f8293927a8b7ffc583c760978ad4fec
+GCD = 1
+
+A = b31c7b9116fae736fd91ab67ed6b212f14d7301741914e48a7420f5b4999cf59e160458ab96475db0c84a5cb07737a8296af83dbe30bb46dc016221db50e8243136e0069f2fa7eb4b99e65d7d85174abd142aef3dbad60896eec6b98c95a5e31bda73b3dd29803bdf87ff63662296f92fb8e4faa34d7828e382641faaedf7d7f
+B = -2a5e6b189c70f2d03bc32bd1726b55b4d25e4f0eb9b2f911e6b298fd9aa215e82f429c6ed927cb4de5d26ce671ff0fb62f969ac36d72d6bad9352e2588e32134a2530788df0734dc8550046e9898d5c53b323505dcf13bb4037135a093a15f1d60ba593e1c26c427e496f06f1a29d98c43966fb482b8f751d5bd93ff69233d9a
+GCD = 1
+
+A = 32242ac9e9c4f069d58f3f8701c37693b336ccc05d709c1071dd417c7355353c24e622d331c894588b701acf005b07318de1d2585fc8acd71915b234c937e8faa8ec29b5b5647863cecd09bccc40cd826a14f6b4a7a70d52fe7220af5a05cec6ad3a3f6be1284584d59412a381520dc6efad2c4cbc7e1b4b28e2541eb2ab5070
+B = e4829a217d2ddb8a5e30fa73f943d029f1ad187d9ecd61c3a38438e9107f82c8708e2f8413ecea9c2070cea54023f32e3b5cf082c3e168befa7539bccea262ded34055e296a4760639822c65025f830f52422b5ddb9b925fddd2c2dacbdfe3ed2dbac9378e921331a0a570b207f0532c682add29d6a4bf04e7b692d1b7296208
+GCD = 8
+
+A = 9ee30db91ba625daea6ba8c56bd98be6992d9ba69ec48c81e8fdd8f6be874b0bd7c3c63dad98344dcbac909e780e366d1eccc374e00629ba26ac688223fb6a478f8bbee2068f905ebfb18da1d1dec8243a9cacf3560836a4387dd7ba1d71e7a9cfb50daff55138fe7771d4cb112c307d82b1a9da61bceab8f8f41a237dbd46aa
+B = -99e4e2f7a3a7a4879702fdf8fddba531cab30dee44d1b64226efda08947274a53c2b07ec3ce5a6539ecc2c1225f0d88fa3212ff0ab54a9e7c2d3ede3a82ce2a769854ee5f05b1b79fb8373a7a4da58bde0066fa160a00f4071b400d5e4031f2ace0e9c2811d1dbafc022d4e9042e8094fa9b70357f19cb1081880c61a59475a5
+GCD = 17
+
+A = 654d547d4e6cff2ffa525545518c0bc07d6a337605de87ea82afa133a59355da855cca627c0fded08c77ba6c47294931475b2676a3a68f9c735f008a2038a45e189b1fa62a28a4a27b8df9bb66d2fe0d78f60eae06ea470f5f808557e009178bc66948e1454b3623a8976f397950c614abadbbb43e777afe96694e57ae73eb0
+B = a6bd8b20e09616a14cbe9f0433e0edc8fae02662e58d1e38e9746f4256db17be7b41e0e32384cb2676002b25ad0948c1ae9817b9971d6579e0a8b239976b7bfb2bb60dffb50aba3971a9178a2bfe368eb7ec739b3789af51db460702ab0f875cceafd51ed9091e547d3b7f7dd71522e143ddc9dede6905fd4c80e4ccf09cb987
+GCD = 1
+
+A = 46a9c76e64a99e3f7f97fa30c67952b6c9d5d0056a2a9a099f6e5157b87f84a1dc35376308411cff0f8875a88c28f115210788169937745bbfcd0e2c993929aefe34764e2a03face18ff0e8798f3f78443a9a8bd1b9464c722782ecc0ed347d4553832eda31429aadb516ee32b303d08bf269ad78723b4e67e391cea01ba2266
+B = bb06a0f665c935d6075b97c01e715f01795374f52bfb337651a199852a0e9da0f75f9bdd1a69fa5f48451171d896b5406a0871ed1d9eba06c2811a038b9daccd35849f0280c78d102021e526e4a9bd49397a054ddc1f7f02527a7c86e808e8656846c582ee1ed9eb96516c01cafec2388c73db50d1e1b9f00b7a62512cd62585
+GCD = 1
+
+A = cf42c8afeed139d491563a75fff70cfda42e15c93b55115508b27bc5d10fd0883e507142a89bdb95d07e95f5b2c838f30a4ab1ba1ef8cd0ed332d56458ff91d80de696a46409409d07cdbfb031bf65d64284b86f5c49d780cf3781ad38e1f0c50ae19faa115578e4797705c043b088c2df78425bb277607c3af775e24bc5b121
+B = 421969f9943102e4881975a31c5d06315655e711dc5e9dbcc61d2f1318e3c71caff4bf6abd76fbc236b27bbc203ffde8246f9f122b553729ecf83e197e33305abe00f7f8e0f947fad2238b2e2a8f018046c1d4e9098127ccb2b07dba7b85e4591d52da6b17ac1c20889f2c3798ef9b6afd21cd59af891fb3a1f9d925935bb3d7
+GCD = b
+
+A = -25d3081de644b7c3452fe6b46a5e312297065c1c6ee2831524e17c59b84c8c9b53742793b9de25b9b3cfea51f4439d530accf4b6ce53dfdfde9b1bae3828fa3c50a7f320bc1ad77825ea6c8cf6367bb1fbc9a61ff9d9911980d5cb62dea3cfd5c3d693c4ab6ff140f9844e81af99e065f559ce8932d0e812b48ba1d56beaf9ed
+B = -d5cc6be6bed8577194f848363176d17635907c924e1094aba118ccf69e7e458dabd639feebcf9478cd5ff2db365eeea98d71d046ee02d893bf6de41c46d06a5995a79a4f03085a00dd6ae2ede5a830882bec04410f64218008354c4c060714cd6b7f754ad1225b140ecd7c174df46c074417abba0d8817a55ea08719b2e0ac97
+GCD = 1
+
+A = -a432c6d0a3673797c838dcf4f33a9455223d131d9de0dd8e8446bd50acf3fe95810ddd18847cc5b8619bc80db6af336cdb3ed7d15c68acc3449acd63f0ff45b4d4514d557cfb800016e5a7d76abdd61078dfb12f765463cbac43f106eb7b33ff00b7d1ea00949ae92671bd4ce9aee2c3e9c6781f605309de4731d7ab9c09076b
+B = -bb8c6cf5e36f59285dad4e303de60cfaf9419d7c1cdd9808c7993fd1cc3852d27fcad027bdbecb10c21f6664ddc3d03c0ad41ab9b7cfac0a74ffb89bf8a3330b9fb50635448640a83341a4d421937f62f96b2692e0e5594d809d561f746598d90d5e50dfbffa0520fed9c09f0a965846b74f268dfc8849bec973c7ca2203da40
+GCD = 1
+
+A = 68112027785315d5a9846d5a4cb938e952e0abefe520991717457ab258b95893de7f2b930001502b07cc0b091b94ae27cde34e8a714730516f68ca7f5ed304b2a05425c9dbad7bb79fe81400f38c45c1305a497509fa140201c70732bbb1f7adfd010f40ac03e6296f2c641ff2af4911f8031e66fb68c4e04ad3fa14a9079836
+B = -2311d9ba12b6c475467c7fbd02daba863219426453c2a6a5ae96b962df4a526f89742b50a08a992a8f4d985343e5baac745e1d6f692f7cda84e0af8008ce8814df41941ec058d889d979acaa24651e3f2825d437ef98f62628c80817005a61061603f417136ebba4df3c6ef55bba7b9e0868b295b6d4c6bdb32205aa4f8fc75e
+GCD = 2
+
+A = 49757de67af93c39e02d40787b1233219d7ca51bc9cbe4c93b670903cf002620afae43aff78584843db232f77bb6fddd965e5799089bdfa3fef3409c2051a39a13c676677a08d50c9d0c4f81244c6acf5cec9f06a19ec09bca27953972e2e2eadc46d978bc13558e4cb5636fb3340bbdc61f7f759e743482ef691d4ae9ecdb41
+B = -a5890b9a53f5a64d0a1ab08987085e80b2b9f3b84308d8b5ffeb717c1e327909e4aed2d90437b2a0ecef1aec6835b663299999a09d425f4e132d4ca7823f19b21582f3f57a1c3f83f6920b5b9aecef6b7c2813b89f830bcef1fc039556aac8d68b5f3e0938ebf5bcc55a13911088383913e07567fa86575ca1991c6946817fd2
+GCD = 1
+
+A = -5376df749693c55043baba6a3fc403baedaf9264848ddbf8cfe950db37819a38ac901b18670111ba17f341640a621789b5af06d9dfaa02be8370e49ccb5abd135c9ef8f47f5beddfd9ef1f52606292a28db74d4ffa09532a308967679c1979e58bb40a3efe40a9c75bb147b840174cb3d67f1520abb621f0edc87c393feb9132
+B = 7e4ef050ad98132716fd001efc28d3f690bb5a6cbe4c7d1b59b4c80e199099f90f73ed8ca37daf92727305818e1b66e18ef2838e03ea3d11065bf5020f61871fb62877c871bbf31a282c4652665e01913e8a23c8964fee732b4448ee51fbe13efd63df9bde335b8a9c1af3c42a242d551463d0b3875d222d7c6e60b369719a21
+GCD = 1
+
+A = -4ce385a9d67b1ff8c17daac37f47f422c2a6514ddbea906552e1876b687dbd32bf76326bccd20793a630dcc2545b1325b75d4fe9386491df8eb45c68bdacc3ddc7236e976fca9cdd99641a037ed551c1652f6153a0d6a0bd6fad2a759d866a6e0028d2c0f6e96bd412a4bbc113bd618089e1defc3cb0dc8124163ed1516a96b7
+B = -b982cfca38bc118cd767ff0484657b33e6cb9a63434cab0775e66f7fd7ead8521264bd5ecfb478e3738d1dc2bc984ec5b4971a5bdbb0852598c7560da34bf3caf7a055f53ea15390ee0540d2fcac693e646fc1f97f9e19322312ee462c390a470eb74dc2afe289299b8bc7d0220e626b31db2b0acd6c188db37c4efe2aab66be
+GCD = 3
+
+A = -62cd38ceacdaa2b18c07727f75ff52759a9605ea7fa28d51f211f6a2a1d4f3029b53b54e4e15470fbb50c7f332aaee3dd858e27e8a92965acd9a0e5b6001ee1095d66e5044c2ded4337eb21e32f9cc24ddd3f0051635f8484dac118399736bcb356fb7318311686332c892c6832c00b2399bf4e33259375de7d83da4f9b50d67
+B = 83ebe9f4184fe5a331409dbb1713349683506ff6364f20b7424dfe42df4fd476bbc5383e42418e4f764ec5569c4765852940ec7b012ec4db0ad927c8d097145f53d418c2f070f29ea1d943da571cc79ded165473ac62c0e9e526e768793c89ff70cc57730b8bd70755fc9051eabacccce54c252286f7d997c0c5e28316ed4a83
+GCD = 3
+
+A = -8dc6ab7bfed5a04cf4beb2e3bc9c702284dce10eec9ec958bf0dab3169b7c6b78c53b587fd200dfa2b0df090ab142b0cd8481cda28f7e75f38ac8da54bc6213414c9585db48a852b2e3e2b0766073024f09f5703a7959879f7f2feccb77ce6d0a11216a529cc31f11a0bf7354324b6438475ba27e79ddb2367bfa6ab9b9c4db0
+B = -f1284c3d18b59d4bc93b5c2206b4c52f3e6d9cec5be41bd70b7f224936e69cc7e358828c98f75f5adaf68cf30ccbaab92b4a941f45677e64658c95f4104e0f0382e4b966026cd4bd7efc6f8a756153e3bdab34c4a8b97e12db9f3881eb14bd0c2c935f1dcb668b7cab771b47594865903b0434a88bc127361d29e457a50916f2
+GCD = 2
+
+A = ff315251623d327d939c03e221d6ffb48bf84d27273a8cd66cd0496ebd2a3129a3276d3b37a0ceba7d9c6462f5f8a9e211f86dfb14abedb67f5277bbd7c620157376b4018fbdcfaa6f9700fe02eebcf7b15ab24d1b05f83bf5fdb992b8d0083322e53f07697e8235aecb65104ae7608a010170baf996f5af398d0a53a4051c49
+B = 2623597f80ecce7793b6e339733a5f69c58c577c995cbbdbc1abd75084436e151ae59aaf089d2009022245008baee0ff304b8cac6edfc68c5127281a374fab301e890475723aaed6c68d926f93cab14a0526ba20746f1be937236e69153618b29eb66bec4d9ee3c997e98acb703644ce6475fd6b4bb0650a8c99d697a0f37a73
+GCD = 1
+
+A = -b1704c44dccd3d9320a52f68fb111bbf6582c364a8c90ae73f032edeb55a0519c5957715d6e84e29e4a1df69c0d7e87903bd919c7e443c94bf4dde1bb44013390b5ec007b610f1bed3bab1909aea3dd5aba5139a8c09ee6ac56976c9facff3b3cd39880a6c2b5504fef817f44e17980c9ef5f7a8186e9e62e7c9124f65ddae04
+B = -9852c59d799188ce5ce431d68bbcfa66c196ea4b0a4df5d2ea772d0dce3dac278858f5b9006108cef3e296cb3e370179c79ec44337772f2bdc7b3568101f8a2dd3c693a396ca5bc2206889917bba1346f0a7473b936ed5611d77e9d9ea3c28c8a43daff4513e4385608d94ca6d309cfee178d9f4f5b57620cd2d637a4efd905c
+GCD = 14
+
+A = 3c4415b064d1a9ca2e171def49f94412d8bee09cbb3acdca5250da87952ec224d4ddd779c162ef4848a1c01266527c5423330ba9d8f649b7fc6c76416260419bd30a9f00fc1bb169b25428056b348b90c7c4753d4b7b5db37896cd46c52ea8b558bab805010191e239ccc0ee7d36560c50be58397dcca6b92f1269c6562e933e
+B = 3fcece815d5c010417329c3d5085b094a564f712e4c0886750c31567b4309d8bb645201d03289bb4c986357bb3021258d88a5e7ab7e142123f4eac09221d8f20c5ecffc74aed3e8e4bec52837c24993a18249089ba1f182e911cd7b156d4fd59e88d49a42c02b04dcce1e5ce90b466f69d7a43092f1d94b071cec244d867f2
+GCD = 6
+
+A = -4c54a942bdf922574de41783f3a1d00ce711d3fcfdbb6b92a0698a0cd8a38029073051064373ce749e6a5da2ebecb0b64f401209e52ab1baee52d845340904fd790cc027392b9d818a9b046ef26a0bdf0bcde7b2c195981fc29f8c057e77baaa9b799266f3334e4fc3415c1f47cda88978362b24da9c2b5aeaf376bf00ae732c
+B = -bde86d18485d7edec3a185b9c26be8d6f7b6c2bf8d8d9e720e7ee534a968baa128403faebdaf6f092dde6a439993ec90987fb0d14b9385556c60eb65fa78402b708a62be8060bcacf4f93590b6fc23c4e1e3f2dac1174e233fed12ef81bfe4057cea22b7c8c645bd1e2abd6d166daa2549dd04c97b721a9465c368573fc1f6b9
+GCD = 1
+
+A = -2309fcf49841bae5c5c86f55f25c4b6ee00cf5ce08dee7ff3da46000b8dad6736ff9094191e2dd962000f9e64d21acd12ec4ee6355d339edb17016f6130929c342fce7886e7f525413f46ece6dde9931994c392a5478b6ae8e41e04799b1a0934a2e9069bcdca38868a10a3af35e77240310bcfa7962ef128f412448f3b62688
+B = 97d6d24f6a2f2434827cdd8c28b4912851475b3b00f5a7850bacbd6b4a824dcf23671ad8c844e462507d9be9be4e99888911fc2578097707c4b8d4fa3ad472086105418f29a60c31b6ac728c9b50f8cfa957f228df56b64a7ce940bbe87bbf7a9b49a2c4e37115de0648a73b1e2f26f2fcc0ecfbcbfab2157689d99337144629
+GCD = 1
+
+A = -8b80fbe4b6be1cc83bd6a26d6d9080234c5b07da67358271df77542f6e8790c043fd721ed52a902634aea3913cfe4b25740869e118c9d8e47ef387fc5aefaceab3d138fed594adeb7501063972617691fc9f40d31592dc3c84c50ec348c495053455c51c1dcd56b86cf3a058786c42a34741e56010faec638e1f3d47ba567796
+B = e4f5db9f0b73629fed55b0ef26653eac5582bdadd059563ef1de89b7c592529000bddfcfdda420aa0d658e934d98e436843bb3ead0fc604993f72ff5c312caf8d5ae054b4f7bfded684655b0230c55618a1e75ac9dae0a66654c349a655a37425e5d862ed3d92377fecfc4b5759166afe654d6dc2c0138379fd2ed6e0ff3073c
+GCD = 6
+
+A = -25dd341cb3dadb56db0dc8bb2fac2e9de48768448dc2ca90d283649690d60875054bc0c833b537db9de2ea0d93e0a9c8a1e4dece0bb9860bb68cb09e87f8b67efee82d7ebdda3ace99a09fb20b9f978e3c4c163e181c0a21f2b79fb2035bdd7a649810e35b08e728448064ef7f760471038c87a24916bc9e2c79426fb596505b
+B = -4724a0a3b175442acd9cac6d9436851b030f815954d22cc9fcd47ae8df7c415c231cdffddbc2dc8694ac29fc84e3c7e0136c1ca97a034f9fd7151051e02c500469d479aff5a4655320985a02225a0c9d3b3fb753536f38be41179d3a185b8e12eaf323cb75ab89ce857fc32f68b22238bd893a1f51aeaa5940c5b775d95a0974
+GCD = 1
+
+A = 80241c665a7ed2e7a524ea291c863ca5fad804e9b076a36318fef8ae778d589c81035d991ec0a80374ab5d9885cb2a1380807b460731395155b1e4404b974e48e3a79a2c24f959cfd14baa479401b52ac96be56311556b8777b1f60d73b5dd2a6130cd34f381f7faa3754091183b9d92062ce04c2472aa66232cef266d131dba
+B = c57b452005a700815b74b6ad007a5956a9e7b38fbd1e845fab71ba20f70145232483a9f4ad487de1bcc812454384af134a1fb4e5ac5412e99ca9ec38334f4e7cbdd8b1593b2247bcbf3dfdc6d0035aac4d0a9132cac117a3e5e67ff2df09b74343eec9a00e382c6462f77d498773668b04b0f549ece27910ce4b8154acd9be43
+GCD = 1
+
+A = -deaacadc27f44cd687d7389db02abb38747fc47234d05f89d9849506090b3a2d03f157d037bd2d94635160fe7a94420d22233a3c4a734f73252b0596b7c1df24e7c00ba112d98102878ddbe78c06dca3d25bc496222fafd73a439a40a0f47e856ea2b81e9d94504a78f1b61b5ad80e67db6e412e8d35d2fb8825bcb9a2485065
+B = -c190f03096fcaea2a441de085c818aa1e2da9a6dfe12a5fa03ddd5724c194b96ff0835c82132400e17925468bf8f57c24b515728f74e5a80915430eba481adee6a486a752e6366d622322f3629611c6c0163ec92c631cff8015e628542d4469a80d291eb651fce648e8e7599cfe129889bcedf3089232c37fb39c4fa721d692a
+GCD = 1
+
+A = -dc1f8cb9f7bbfa870194b7ffbbde4fd0f1bc91d1f6bb0fbe11d5254ce3c4c8349ee0870533c910444ae83f853d9c0f6cda9b9524a777bf904b831519b3f5ed90a1374b18dd15fb87e55f62b64fe18e327bb3a558b993076b77ab45031a355c76c9c2c44fa6309af0d8efbc28bedf49846cd82686e107faed5ae114ab838827a9
+B = -2a8023a8ee9d2a7b86ea867f0eed181754ba4b77c3456922b248f70dd54d079a7bf3f1901720bd1a81913bd507abcb40d6193b995b27877eae01c9fe562b96bf096357f3f57178dfc5a2d51abe538977682fc8d1cfbd63781b43dc9f8c88848b56d8da6d3ed7a2d5476afeb59f9fd87df055994a3c98207111c18a05baf7f848
+GCD = 1
+
+A = -b6404963ee730caea819b2768fcc211e65e8b69dac03261f23832df155d59fe095aca53831b62dac7f8f28ce3fdc23fc6415498ba01323153c566108a8ab9f8508196f24894e7881215028ebb50a1a984dc57c01afdb14ecf1526d3cb58155dce2b115ddc16ab6d22a49b35703668e257b81b9c3922015fa73239f64b2a9e2b
+B = 6f3b8d004746f2069870ff11291fd76dcab58ecceef1ce75becd2f0361359b599ea0f8b5ecb210b2816c958a7edddd56cac2e40a6c4c4d88ee13cdc392bd1ef94502591fbe17564d7732a37cbf8cd84ed318d3e3d773b4f69d38165a3eef38fb15f401521feede5aec605c5f5c189b95add893a24e437f79f025f75808732e91
+GCD = 1
+
+A = 2c1e039dc7749eecdeda015b186faef593940045ce5da32416a032dc8df85cf03e29ef8f664031b8d91016bc3bf671c9e70de6f4ed616cd2989814376650887300280582fcc65fc83212998352c69651843d797c9d486b1db1d1463872de1bf2596c16233718a3f6bfba1ea08d4166d05dd17a5fcfb4350bb0d08df2752c73c2
+B = -8ccc222a304c32c804507edbc0a2c84e96c9856658149cd86158e81b1df4b989d3f456c24d5d26b04deaf42b1571679e36ba065d547d88a8b915300d63bc07e0e375ef3e36437161db245d15b9973955a027534a999bfa2a2b361dc82998e900918e8880457f41b7bfb4482a4e05cfe253db16c17108d66bdcc17b01d979b769
+GCD = 1
+
+A = cbf176a710cd55a804818b61b215ce7bb609831c7182fe5d900504b71ee62d2d73ad2851f8729ce1f244e8b7ef6f937e655adc37de625f34a3ca76d4081a3280dca1fcf6f91f2d8f15511179c881ab4fe56436fd2a63b998edd2d405640a7c114901c29eebb713e599b44e6bc2dd70553d6ad86867c75c3ef2f867c9372d073a
+B = 6636f1b74fe94cdcb9aaa132d0d53229a3c2d404af1aa2a14505bf14a495a8ceff5c4ff0271b293d3fb2d120ec8756307c6d11b04d4b0f71a9c68b55e88818454a74fca8b4a9da32ed09f659791dde6938405bf7cd3d1e83464de6bb59752f0962a02c53c83e9c3718f3e39cc962323bd1593eab293427f92c5fed1986c4bb9c
+GCD = 2
+
+A = -58fce44487aed61dfa6a86099cd21c987434aade86b3e45c5989a19a3d99d302e76bdf506500b9792bb5e9d6d738408d7622aeb544a6891a902f2468427ca3fd02ed126b16fff147cc6225375f1cb0c7b6289ca5bf81600548c9e1a2c132aca000e4486e7583d72281720331f2ba2d6bd0a76935c006a05ce415cea3612366dd
+B = d8e9d72f23d2d8b47cda6f4d869dd07379c8f23b31b17e719b794c0547d441e4e82f3c3e1fe8465ff204f8038554b88605be934dcd262401c7fc85faa6674af89a46a82cbd98bd1be814579fdc92a3ad0459009e6936d0d62cc101a78bfbf2bc1ad58c9c08ff764b9ecdde87087b8c718137f7ba52b80bbb776f100d26c88116
+GCD = 1
+
+A = 39f19cbd6f6d057db452da95ac4ab52a3ec56b3eda1cb7149521814949bf04629f76d6358dc4602502974ab0c7090eb27cbfca4cdc83417d03fc7c987992c487ff0e82ef13680510ab43a98956dd315350e81d72dee3a280e04056f49a27de6a0cd56a1c728bffb0a48a784e527eca0b08e47b8272aa0a47171c0a6718d3ef2e
+B = 73caf7c97b71c669563026dba47ad94f816d3b50f230ad64c5d4a5f8780081c6ced803db0cf7f9309409e77c30709060e97c19c198917d01dfc2bb001f79fa5840dd481fb84bc023a70e8405f4176741055f0c69628c7c581963c4b55ad58c3c95a884c0ad527f28d906ead7f8fb2f4bbf19ac9afc688ae6dac6a424207db36c
+GCD = 2
+
+A = -ee15e8ae715d4a9128a6a68e1d740d3ec1777279a1fef0b77135a277ed3338976c8d159f1214343e83b7c66d382fd4a6e10f1f0479a0eba7dce759ff5c9d935ac5897c0890a90ae2cbc94db7816cfb97621da2df4222d77b20877a409dbd2323ce7362fde977d70278dfb5bdbeb27e0dc6b2c0c0a03bd538b62c63aa2828d1ce
+B = -b39a8782878b900795a3e854d0d24353b7a86fa182ae9c9f028ead664354baf03a7635196f919ec9420f3c3784c491c67170bbf3af853174d3b996d3d06a52a903b7b37359b36b946bf601bbabe4d945c64e44876dd727359d69d988f2c6838a9cb94ef4c4ebbf4da9bb1de27ef94f8bdfeccbcf9c852400a642d8edad031adb
+GCD = 1
+
+A = -dd4c7f7a119ad97634c818116155e93cd64d40f7e5c4d17e298309f480917530912377df280e87f3a3dce02efbc5324368cc75109eae70918b0d6a83d3142cebf9729421a99d34757b101ae187e6a25e43d527554cf2b86467ba1b222f5ce6deffe8dd11de40dbb94e864456cf397f9902f3fcea5699056f9ee5bf9a276fd40a
+B = -5dcef43bd093d11148992d7819bdd3e39ab27a2f97c8a4d1e82a7d64a1986213236fd7140b60ce280285d6f33dcbd61d4326abe96d9ba1cd96d8784c75a60f2ea186fc1543c6a104dc93f619a6bffb5da228bd03c9e71b5554747288b7391b3dfbd267312a9c81ced1b919a18b405c3b40a2ae2ed1d3b23fc8388b05f4e04107
+GCD = 1
+
+A = 21e25e87c110dcbc1c88cf83e4fa483522fcfafa811eb3a46126e5b47adbf7bc6e3296fcf973b6277807a8d985dcbed207b920071664338f67a7aa9c27a87b5ad6c08f1ae15161c7c6ac92540649c1d791ae3ad428463732e701074e9d3556da7a381451a87076ac360a3150b45dd14c72770cdfaa5b6d9b7b9905e7de13014a
+B = -7026130a40faa7f8b34264359dcc43c05edf43448e3300b9d0bbad0f91c60041a9d65ab1e00d61380be1b1028508e775aed11154ff65c159ff6106fc098cb6138141a13a8dd6ec7c727f0a1658fa867ab81980164e29b9983c143cb0cbe216f9af59384035f59df15871e9a37dc69f4abe9f4babb91e57b1b03ceab3ea71f0d4
+GCD = 2
+
+A = 28aeea020d00e8a8bc2b52e292f67167799a53eb8937bc5cffaf12d913bb5d7cc7af9a734b53993bf9412a4e8bbcc8a95d2a00c48981c2c13f23142dc6fe6f4e3535056135f9f11e46f20df0911d8f68eaffe197dd179b97cba93bfcf57c3a8d0c3d0a18afbb357c2c3458858c28e40ebbf6b6a34e936a6852a216cc4e9de8ac
+B = a39649af490acc0c517a06b6fdc55c054dbf0b146ea75d0ae95a6966c2fe49c4d02f71cb41cb52943557b2e5d46fb3f070105a2da60b6114de2e18aa480d514c30aa03830482b05a2b46175a1c005bc93661f5b103dc8a027651ad74e05b329476302f38af7f38c3e54e59eb257f0ee1d94adfb37ac981b86e11d5fca3777e20
+GCD = 4
+
+A = -add759f78eb0bf1225e75fd1e444e0cf4c5ced5ab44f07ba306f95590ec019674a08547ac37b69f91d7a4b532df58eb79345d29921349d7ff157d191cb760ab8c3d34dd69a2b23ea75d382fa91c46af3a75536f5cc61b7da2dec41cb59d3638bc89adf62c2024d304d748296a0b4df510d82a7cf8b8b78152d2a0b8d147ae9ac
+B = 6440316fca0c1a607872f52500af7ae546a0fa8839c18a50d650a16a25b718f6381f25691989369e1905f5416cb2d8b0bc1e06f9d4cb159be4a62db2dc637ff66e171beec9400e690628d5c031f986a3a5c604f5ccdd419e9ce64b29ae59efc4da17cf2ce57df4989f0f4c860c186546037e6f8b91568a2573db7316d8fe0499
+GCD = 1
+
+A = -ec6793aec3a80a88d520e1cbf9e0491fc1490b86c91dfea1be7a3bc95c1df0d6805f86c7fbd284072d3ff5813078e728362fc3749810f30507c6bd4e5fa81a59652aec5cb183d09d775e5db809a7403984286eafd9c0f3eb7f6762c87c9cad421760e5bcc91a68542f217fb8b0e51626a35900cce7794bcc57f1ba05c3c85f5e
+B = -95b811cca5cdb0de74b07a3fe61b4fb4240b0b6b8ed33c6a57895c57ca992ffa9de3a54bcc7b8859badb4cb2d598bc1d54598179bf246024f2b0d193c45092a6d3b4c9bedb686daec25e865d9b732bfbb5198da003c35d0520bab11b8bfeacb99236db007ff28554dfcb3487b215ef2f4245c270cc1646f046d52f2e4c42084e
+GCD = 2
+
+A = -bf1e7065f80eb95535baba14d484df406d07d30006546a5adfba8b85c719170416f1d1f511aeb5f2c7a997b82536d90a63bc8becc8695e011f5d48964db8a77cdbd0712274fdabafb11c51dc927657d49d09fd75333cebdd41497d6338ca585527bd5e331ec864c360c8984fb081a01e2b5706e70dc38b1ecde23380a2dab52a
+B = 526cf04b0858eba00bb1e50e061277408d8df1cff759b55e31264025bac191f216c412b7944760b16ce8a7ab5c92df288c703184ff8d9d2774882a76072f0cb5868c091d2d1d3631249dbb5cb52ab5094f51c319594ba9485d26091144e1718b4811f21f6271cf3b4122949a1b67076849750d02422aa3c8342e52fe7b2874c4
+GCD = a
+
+A = 59a2e4b8c8f675e017cb86035f5535eb7a64240277ecd16589ad1a369b9ef2ea793d2e7cb546a319d4d94ee689e79323eafcdbf1a0c87c2101a2ce336405f8d79caa7309cf4cfa6f2de330764ffbf004028fbe5623208872a5ea278cada4b4afb4ff9861ecaf65785679788d81d0f64938e6cd11140431087e5182ddd3b7ce85
+B = -1b1dc27d9a046f43701e96bac5c5060e52355b01131c0ae67c096743870ad0a6e50558595720fe3ff1a804c6e275ada04250e0a60e53078d8cbe39cdb97e3980c591c48f8a07a2fda7bfc5f20991c22e45d8d26ac6338cd59562785a29a7f157c60d9eba7384cb99a1d12afdb83007ea9bae7bb33a54f7a82540a78e6ed981de
+GCD = 1
+
+A = -c5855145684dda3a6157c7f40276faa5b459a96fa41194b16bca9f7883d3cf30de7b15f302f178b10683cc874f9a26b5c7592c0531025c3d98d3aa13dbd8527e0256db203d2967259cd05c395a697943a8d8ab2866b353d9e026a5079d44a1564838d2d784daec76c507f72c4de9ffe11dc3eecabad0ef009a089936f85ee4c8
+B = d73f67c414a4a2f1929d4bc94000b4de88f26bc44b06288bff6b0ba1bccd72291557cdbac24503cf06c4996fbf6489fda8b2313cfef341388865dfdecd0fba849d43a9763aec60be142ca840cf99042f534798491d43f2d3e7f0d0ded2562f94bf82b9aee6fb9f948bc2a16dc097d9dcc8a3dd3342f5157b71c2b96cdc5d6f10
+GCD = 8
+
+A = 1eb6e991c2f63f151fcd868d954cf517ac41af0a3c24f7bfcb6a4a6d8162fe69768a27f8ef7001b9b44cd7708dfdf485cdca104dad9688207f3cad872ba29453d78fefa6c89ad20602678ba6ee50799a8c30cab4b0c07577767448f8a70ab86b0174641140717be570f16f748905b60b65965a275b2d045a18597ec9738f545d
+B = -95efaaa084aa7b21d04d821086eb2a0499c13bc541b52dcd3afb0c67b0b2993631beee8d96d99f094a64e176738862f5c2c095b4f5659d028025c1114e75b7b493e863c61b5a1a3d975cbbf2bbd1425eee932a508f6c45ebd5548fb391bee23dfaf1e6977e1d268f381dcb462c048c2d770b28954de2f309cf60df76b9bf03eb
+GCD = 1
+
+A = e26094b51fceab223e9e4f67f32a38dc4c973316509d290cbd1447410f489ae7ceba0719b38e3ae3003e0ed4b875b09a3bc718a81fd3b979fa2905b51758021d632240362516d48306fffe38acfe357c8f71c472c11d71ff6362e752aba5c4b1daddba2af97c445139223f723a430e6838e3889f622b38fc656ce14e52d1bfe9
+B = b4d080b2d2e99d0a47175e28c9108e90d1abb5abbffcf5f4fdfb13d08cc0e5372f250ac514e1d8defcb00755551c96c9bdf924718290df64ee4dd73cc4758475b4b25dc60a1b71af65b0c9e4e33fa98e753aea82ce5ce2c555e2bf74a555fb0b7f7acebb719c61f2fb757a6a0c421937332c9825ac70d993b034b163860269b
+GCD = 1
+
+A = 8c7c206d06d653c17e31bafdd2ca010741f918f76ddd2b20f47f3e4e888ab7f953857d112209bcc6ac880d52f5cd3f054cc9fa2ccd61ec67b5094984a99eed6228ecdf38b5f61d965ccb13f7412b8d9c76ebe7cf0eef816af6f66d3202c4b43bed95fb9f25ccc0eb9943469f7af2e07d66576512045fd38ccff0d97041f90099
+B = -3e9d4b1ad14e0a58255fa474b416aed7cccbb967949643dd99c3840da40ee5185f56bb51065972eb904c7fd2be5bc20a582143b19083d3226b77291c31add90c19e29dc7b622d01cbab78a341ff37cd53cf78f5b8dc354425764ab628b7f7417f0ddd55a0dd520bc7aa365a4d7dc30c8b953340549f4fef96a3ee9b0c5a7953b
+GCD = 1
+
+A = decfe8c4bb814e0dadabfe91e6592be990c548808bf617b79008a9b9148f577f2f0d44cdc0f61a351e15145c70848c8a533d82841215c508c30dc3c0e06005bb111a39f0807f4b3665dc6dfa8ed60be00ce5ccc6181cc55da73a9546172cf6cd41daabd47cfa95e70daef22802dfbd0f2f3f228e8a5b58937e1050e8ddad06e9
+B = e46f4d5ac9d4694c2e5df86cd67814a6742bc1637a5f5460db961f8ca815ff7c010cfea0ec5fdcab593cae6cc390a62012ae56273ea96a64cf7f23e831a63da74e72862399bb55d46b9899f089be38155c03477f958bfc0fadfdb2defd7b93cc95888b8878633930c8eaf2a335adcac45af126fa5cd152b9289882a582338d
+GCD = 1
+
+A = -108641a52918e3f0bdbd0ba2e35485821aa3b380b0f4c3c38243d17537408aa7e3830aad32c8a1fab51ebb765455a71d0e9c2389cc9ed66ceed519f9c0c6a54fafe05b1397575ecc638f397343a88e226aadbbac0580dc81baff3669211dd867857ca698871e312ec0850e2b2e6c510d9cf691e72143316821b828a1d416ec18
+B = -46c241a009d35d1b5fee0fab2b6b3f368ec1ecbe78cddda786d8e98695059e5d871081fb5dc1e355454790cf5a0de801cb6734c3769fc17346df3d55cac21a84e82d829fc8965bb158efe1cbeb1994298483265660529c9dcee1ff73e8d91a082f7db8869d2504d2ca2eeea5b7b4539b33db24208b4fde855c24314fa5e3f448
+GCD = 8
+
+A = 4720ab93840e403322a193d011ca967448fdecff13a5f28766dd52d4ca71a2f7892585636bef4a3e8fa8dd13afaafedfeefbfbd3b1a9790436207461d871b41bfe1a3239f22fe144057b47ff6c53db5342023368dc0769b324884105ec3f70a29ec81e88e7940c12ae2c8ac351b318c4af9245210df9e3b5fff4630796b3bd05
+B = cc4ab82c443279bedf49cbafb288f64b5ad79439d6f1fa4c8e7b545878fd2b154118ffe2f59f01dd4798239512368a155c26e2f47fd4f762428e2acea296ee4dcdde33c1f92509100fbb5bbbe084d229d53f33d3efad26d9da641e67ab536b7a2bc47b64db5469db452410f81e8b7b236c002e58d8cff0c401409317abbdc6e5
+GCD = 1
+
+A = -965182269555564514c8ca373da444e119e27e8754aeb60e60a3a3b55fd438d61fcf33b8adc9cd1a459f58b96ba78447d5d2f788c5537009ef083195bd2711c3bae1fb592d7cad11deb56b50ee40130e3fd9e7c8005691c3f289b18c5b40d9ac9f0666f20cb5bff1f395b86d2e8e84c2906b247168c21892cc21a0dcefdbbc00
+B = -bfa9c90eb11f3d7c78d2e51767a281ce6a6b6c5c9692f7629e3978817aeca66afdaf6e063d27e407dfe4130d6b5d8fbd72ad2a2f39a5da1983613cd93d04650244f097351836f7a748d8711c86974a78711d88266cb3c0e5e56558e8d30e3be738fefa6cd20f879a8180c19502beb0aa9592e245e2ffb482e06f9b75ea5a994e
+GCD = 2
+
+A = -1bc6d0c4da357def16e0ecd8d61a32927e3a3e0f7cd636295f3d190691293481d3e188f2d824214a24537f93594c7205e6aa805e7ebd931bd9678b6e162349f8acae10f2631693dbb17eb9d17c86379b7af68cfaff7f5d55abc78f3038c6930623eef600937a0ea16dd61461962f15b71e6622650d66b973b78e1b9eb0126964
+B = -7dd3936b644bc7108a50a2d4644cc3449415801264b65ae2a2cfe0aaaf78618e4d2404c458a49e9d4b92c566cd648e875c1e71c16c38f205eddfcdba304fc811ebeec2df0ea4d9bef1efe9b0deaa4093961a9d60bbdff781399175385fa970a3fd36b81dd62c03c0d9ced249379f97faf87a0e17868271029a116a0d8a27c2f
+GCD = 1
+
+A = -609cf5364be77cd9b14bcc5427082d76d8699489b7976661ecb33022cef1b6bb3fd4dc6642f019743159e092edde7f27643183a28f8e7750ed993231a3a89c22990a7f1e9aa48163e62a43129e723e8fc20f93d12bb5104c4538a5e41697211bf2a962e0b9cdd8c2e3f51698a7828b2a3d624a30674d11569ad332936571913f
+B = -54cc20a73c9b5ea6bf4f9b53fef33cf5f00095646698254e1f4fe4c9c9ed32c7843d91b2f0e8551c008cc3e3778912be9a033e4aff024e6a90244a1ce63123c84c328655132d47b8aabdbaec09a62f4c78f04e045b87d9cf31592fbd199cf5c976d1db7c4de78110f3ec1595b3c061e6ce4b30c5ac998551eb11c4e1a7220a19
+GCD = 3
+
+A = -9278ab3412723ee755f31b5562e01bfaabc5063e0982d5d206e39baf99c3e1737b4a769d5897191c0a2715956412c83f85cdfe541460170b1e6f2247b732b31928320bcf576e7ce7a5918af874e78877044d8791149ccb0290cfd061a6d75785f2681d36819d11fe614b6a2802ee14540e7dfab83bec25c98f5e72055dd7c703
+B = -4aac16fe70310304c3e47153a22066dad0be2cfdbdcb18444acf6c8663972b5c0fbc2c0d8e9bc3ca65490a7d8d3de9b71fd0b2ca744f0b7d5153c968cea9d9908beb6d914b6465ec4af997549851be29589fb3c90ee05d066aec4fb11c7f49309ea1b8624b2d7f07b4dd13b6132af1058b3434c126abcffa06c7ddf5b706796
+GCD = 1
+
+A = feb6083cb588971c55d225b3397ec83ca47dc16b9c9852ef6388041cc98c328178bfbb1f01acb5370e7a2788307f13750f51a5089a27eb5c7a0425507410cc8ecddebcd6517be411556325c5bd4787dc400e8014148638ff9b79c1c16fdacbc73f8a2fa3027eb44d9e861639b503fd4bc22548047b7bfb11ba9c94739c318150
+B = -2481f5bea05236fecdf86df84a5a6ebc11540d1ff890126def4a3b4d2f3243ddfbc2e1b92333e64e1925e211ec59908740630c5bc33d80ac0735ab1867d51f6d3fd75d47882c6f638c70e90053d83ed0df56a3a88ed20839ccbcf13dc207389107427acfda235945c4b59a7fcb8f0f16269f1f5fde8b6cabc6babdee7e4925b4
+GCD = 4
+
+A = 4d29230b1fbf92c77173d0c58b6bd77f46178c3675da41927217c0e8be65612b0ab8cee4bffce9e9463ce5634f1b06a2769baf331e3d5cffbe45d33c0ab7c7d6804891d3f1ba305aa4e05b56de7a5e5ea7f81d95304deadf974b1a23132ccc5a2bd3c9448bfac6873ae274e5cd13c2e8fc4c93fc2d523f639c6fa49a818550c7
+B = -2af726c1987c192cc61dd4ffe3795dbf798e913054f88e89d85f9070febf1938562cf3e42f18f520f170a776f23827e593dde61de519dabaf2e2311aee22102935c60ed40feb5c07fe595cd568144918ba205cbef87102ef4530b334864a97f3dbd12c34162d4def59a5481236b05a5224ba2a1a44324b874d69deb014b2ffc7
+GCD = b
+
+A = -dd5614cb4dad71bb4eed045b6a8274c8b95daf78db7b9e7b77996d26f8dc47be1bbdb073145801692e0c26546131ee08e0461f01d9a15d092c189683098b246aab46376552feb1d8dbbe9c57ca86dd67b1942b8220c9dc561b340d569625c17d04a19aa87fd7d3dc925df3751ad641d848349ea15039b37d1bab2ea8eb9230f
+B = -dd5fa9909377cf34eb858ad42b67c241488b816f2ef2b3a80c99b49b3b919833002648d7423e55ccc911496925005241e56e2366fd09f5f20c1892a81ebcf6247d7baccb7c1e76d36a68d25e994854ca444c70b235d940a55f84768c3f68336760e6e3315bc89ce4d438733d87c0e04437666d6c28e3a56a5480665a3b781319
+GCD = 1
+
+A = -915c11047d21a43b83958f7766e33e1bc7b74c9420c7a2ceeda4327d9a489c78e7c968c71aa30e421981c2569ee4fa4732406981bf19fc0e05793c22106bff5d73f281512710593e69529a2054717e8e3bcc52080f093a97b936f827c5500f0b34adc125f0b43032558f0f8d72560aa9ffa2601cd2fb9915c0c7a7bef529b1c2
+B = 9ddb97d4e9e1b49b0b0e9a7da9c38b6a0e4ba0b75d2da4aa423428cc008c7ac34b32b8332caf632e6a51240d7470c5032ae2b940efd6adf2fae22d9f005ebf5c701706fca7f84740100917fef5c9472f8dc9dfb8e78728fd8481f6c9a4bedd3241cbce55b266a72428643a38aceacc115f51b3328f1158900acd0f3a8c823440
+GCD = 2
+
+A = 86612043066c45ae60c979c9b67fa9ae4ee85426b9e32ba7b2e7316df889788c385691c9b24f83de75f3b5ff2b106243720819544ba0653745f22cac59535743cd1d471709834ce7b6fd46b65a3fc7e29f3b384c91de8f8fc6c82d10958b68860c8832fa71d2563245e4adb9f796095297b1652ae6c8ef41ead580750cce1abf
+B = -917733cb7b8d867a089f105eec7621da224c139709294486df873114cf494a7a871944f53acc0be462dafcce0426f4fe9259034bf696d4392fce3488c4748f279b8b629fff872aeb2f60905733d33585fe971a048721e2ba4ba910d4fd69b231ca0623d504c2631fe17cecbd8f9a5934f5db095cfdc490ef378632610a15bac
+GCD = 1
+
+A = a7929e42f128d36dd7818b3ab03dca17519e6c057e3d3bec33832b0ad301c78f8ab8e7b2d07c5b0abc11fa02ef8b57e6821e014c5fa3ef5548295e31a877418768b5620a1b53e38084a4b35e143e2cdb8b76874114dc2b492df26e242203f2a9bffbdcaefa953f94517e3ffcd7e26b36600a67340999b065dcdc11544a1b0065
+B = f4b4ac68aec905b66fc923d96ea9c6ca29fbd892633e363acd507c76d19bedcb70c66b200130f687c4a244a83a8c472f1c0eb5399dc010c26613f037f968205550bed377e81aa73571f91ddb714b3270ef6f52639749890efb68a8a02e82ae414ffabbd302030267a8f556cc1092b08c94b092805a60ccebae506412556ec564
+GCD = 1
+
+A = 9a2fa5625026df897b8d3d66dc721cc70cd1740fc1dbefb91bbfe93c099400b67ca41b02d5712fb51ed21c5f3c6450bc0e1eec7fee773d893c110dd67d64da2d4512969ff9e4ad17ae72231a425c3ae547ce1758e33f35d625ab45eddcb53ea832367b7096d44c3578530dfae9d631b8cfb84587b7dab3ea2ecca2874ed76b2
+B = 8b6f058ac42f82e6b1103fe7df1244cd54f686362fdf88d529636b71c60a1c7b612be33b278f429a8bbc00a0905baba66376be1f2fc6a00d09802d7cb08268cb12583c042daa50047c738b2a2c940a6d4beb974695348e7eb7cc7ebcdd4613496e56b305b3caad71d55bfd1bf08493929549d4fbd1e36c1cb5ccae5190241403
+GCD = 1
+
+A = 93457720b36d35c89f9317d0a16b0a9fc47f29551a173a075bdba8e575c0d5857ef29934df7ad0da049f09d85e3a55cf5b7cb32ddfc5fdb2700f8dca96941ec9803151f4903173c219b6a46bb4bf92be0aecc7d055821ad8dfa2fc8f5b3b329cc1c86556bc286187f29943f8bd603c2bc87155725ea746f4c2f14cfaf8c849f2
+B = -dae7a6bb1fd38e5e319c164b0e011093a90dd166c80a773381594e74d00f735f0683c0bd5aea1a202b88ef0f687f7d83819a2e8680c39a98aafca159d443d411cd9b62209a69ea21a708d7f80598d9d18e169b2e8b4e50969a474afc9bd8bc5deeb1c00dc59b8a587caa385897117ef00ab76aba589ad1dd0b1882dd1c0fe838
+GCD = 2
+
+A = ee29d090e49f432d919a167718a2326c1dc349eb0c440da2b7c2c5f076b63ecaa82e8243c39801ad55e4bb61f4343526ea3f104b726a77d7828b89e497f45f13891e72fffed6292d1397c36084e9f4874ec33138c88271c2f3b5798dd4473d01dd7d671ade1aa089acd55c5c67e9bda517ce483b7ec8a9c3ee07f8d7b2aa90d3
+B = 3a7964d6c34f24b721116517746b50a010581f851175c09ac3925294c11fcf82a6a7dfda5b9a0c8eff004fce8b4137629da9a3a39d8f3cebd4f1882c580c64d205c7d40567a3b23d14fee1c6844c0915df7bab14d3e6c7092e336c364a0054dd4eb973829cf67985fff676cceffeb179847ffca25a904df326e39188f7c802de
+GCD = 1
+
+A = 8f86e06ea9b5a09439d8a3d1882e43747e43eab412d711dbacfeedc35f0a0164568400bae37a9afd31a41de54e56778658c116c0017eb3b1ba2f1cc36dee7ee20c36b7169fa46abae2113a058868cec9f4df74a93fab7a00a1123d47ecd62e769f7418b74543570e814911f2cc1e4a9cb3a949fad92f3ad1d8dd6ebe12ce32ff
+B = -8e24b629a7ac29a0b04b888b8b5d85610136f103012f2a993c986e6ae4ccdb7a5761fe803c08e60007b89c7b3439cbd40fac15ebf482ca5c90338ac30454398423fc227de47291d08009a959d63c266296ca9963a3645c16f705026089196eae7187a7df82831a27ee821b6024e1bb6e8f860b909eedab00dd6362681c4dc83a
+GCD = 1
+
+A = -d2db5230d1d11cfbcbf401a7bb988408bfa92a169568d9c4226b59cb3c10c72d34e548a5251ece69978580a761b4a982c2151d3408ff33e3ffdca34f111ac025cb712ce4a20ae5e833bf92abe28a02ddc554d2f21e5fbadc2a39fa1db87cda271c3b1ad57af5ec7f3af6f108c4ee07fd445c604e7fa73a7f40f7a2512bf896d3
+B = 6e63e8e2f79c0f96c1b44c14f563d0d1a129d03b5bcff5720d84c28ab2d65d101cefeca7f7376b9c40ba7679f4b02b6fb6e6a1d5b1788051736943ebabc57579652cb26b63e4b50d5b445355a82bab195f4ace074004af856bf3b974a40f50e5fadda3571a914b528249b1ae4ade1d77e791f6fd1f096050cff54d3b714051c
+GCD = 1
+
+A = fbbe7a65aed45fe825de3d1e42e3417a0f87bef39e1b3cba51243bf320a6bcb91bb5df0eb934e601033945e4388f8af2b2b5fd7a03635e7b8a2d68e2235ae82eff312d25103cd31aafddc8e88ee01346266760414a46de0ca12b164f7e6420c23b084ff28953ae647018ecfaf9fb1f2f0a4dfb48f6fcae372801d9458b369642
+B = 7d0fc73d3ff7f2f0071f61c8a0c75e774ac6e9a46e120aaa5e851f167ee07ce3994dc525945551936276b036d3ccc0063dde1c963516103a4629125a8eaec15e96c5bf6e536aca39b605c51689a5d7b5b82907702b07f598850f25c9118f401d30e554f8ff450fe4693700ba6179e78e7f19c36147a718f6da62377c9565ec74
+GCD = 2
+
+A = -5c9885a9a4e82efdba48fe9aa163723cbf05b085981d92ecb9669789e171751cc8c16a8fa33b5ef2dbabab27bcdbdbd80492204ae95bddca7fd282b4238bac3aeecb63c0401661dba005fad19f336ec2bb026414ab68b66d3d0be57d845e45c597cc10b93ef23eaf307c0dc6c96fc95ed99b6325917879f6a47d372cf931aded
+B = -56eda4e3fb27ad7d32849038707cb1f9f453169406441f7faf2844edaa161d5d0373dd0dc2b462922ae3aca20165d098f4d123e26d19e55100f4a2186bed4cc34d6dec18c894c3d3beaf1318514ca7debddfa390308286d263a1f03bb44f56305f388bcea1794ee820b6e2c828c607953a466b00b47da8485d27bd85e3df0f1d
+GCD = 1
+
+A = -ea08bde44d189903f2bb180cd15649d611f8b24f4e1176f51816d9ff2413cc429ac7c043bea266345cb9bc4cdb907bc8e6a8de935ca8618474dc61773eb6093474f9476279492daed490a89b1993c8f88f1ee17a3ece6144d37e5385cbaf9a0790406adafef398c13022b54958559a00bf7ce9306c1eb3233e373d94a3a03878
+B = 23208b8db7f2fca5d86fd000801047e615e222ad327b06b0731b58706df0584e98e3d8c0ad3854bcffaaa85d3fcea5c8f11588c460be69e8c7d860d3fdf3b0ef885a7de5020c239a1b7e07f77ee3afa8d9af88cb7d5c819e8fa35d283f33032a0bb14312b0b82f255b123d0ed7d4918b0fc7c59060815cbce0c8196ff9720baf
+GCD = 1
+
+A = 40d7af35d73fcd7bb0db090853b0df75e01e5e460e7e2d1d59b5e7ce8f34f95937093385a306ab9e7dc1453728f0969c6f0373973e17cf9c771ffe81236e705d42a76ba20ecbbf0a2f08e5475b826c614a65865029f5812ca0d43c426073169821eca32801c3fb093b79a7b48f10792d59eb5546d5677a04bc58e311e5d60141
+B = 5b669b76c2bea241fb37b23f2e31a81cab2b40c41a48d91686c9877c0b0d4e291ec26334058210e680d0c98aebd4c49807924e2b2f40e5f9ae4ecd098152b1a658b26cd87c77dfa93218e87a172082f2c5b7949bd86574b4b4407c0409415c465767d3fb2ed1865473cff6fcbcd616e4eb928f45b44d80fe767ef760390050c9
+GCD = 1
+
+A = 35590707d2c08a43b87d483a322ba5807696ab1412f33069f39857e9543e149c5636003205b22a0ff3bdf2b29f7f4079ca21210c88a29e9617951ac6d0101326e9a18b5bfb3d78b391824e46e669571a5cde0e4c862e8cf80699fd1c9047d05decca517f0ea727465a23dff61b4880acf04672df713cec9120a5a0afef7b8311
+B = -911f1422cc364599a185070ebc291953015acc84eca89c3edc27fd7343aaa39ea299f4fa47b38d4be4ab3075f2f658a36afc5c9ddf205d5a484973c83ebddc7ee2359428ef2315de59a5ad5a606b265f42041644a85b93cbbded4fafaddbd65ea4e549a67423441af317ce5b51072a3daa609cc7b7f3f33ad906441ad1903e5d
+GCD = 1
+
+A = 55fa1d4d81cabbd6be4418918b5167aeb56ffc9e2c66e01efb928ec1a64db119aea07d16cd819f3ded475035019a3f5c12a9867c6486dbbaef5a07ed3f36748d4419b4040ba6d1965fa1aded4a410cb7c5c739a31a81ea95a0d460bacec055a6f06f8e8bbb70dd4126eb730140eb5b73ef7b7dbdc1a0e0724cbbaccba27c443
+B = -27107265daa7a6708c938d8aa6018e17186fb15e37f7bc4539d5269dee0d111799e0fdc81092f55e83e49c8560269dbf0531af1bfb8ed97754929c21e842f35045bf6769f053d8f0ea68adfced5a70bfe4a705fbd1a2f95487d5a1a8e200e04860b91d05034c7bfa66fe37fa2822f219184b522041ae964c7cb9e6424682e831
+GCD = 1
+
+A = -be3f07aa74a66505783d44475fa9cb1a54ed573fe324a644605eb052bd3d180bdddb6894fb478dd6de6da624fae5c59efd628ac4d6909bdbfa24b6ff4f77afdcf35c4022ec6ab0eb16da546c4062a8077f7a008dd24e92431d66ceddee1b9c7a07ef053979f12100fd7aa9f57f943b1af49d74542b6c2bfc000d465e07836513
+B = a042dd9632a9264df8e736267522c60cc23da0f7cc1dfe38dd68f7e1f801fbcccc3a16150bee8758e9295de45e23b8a2dd05093288152b4e55b8a51bc8a7fe1c5f36467b6b26a9e5876088e07c1bb518f114afb107524dd392742ccb64bc3ca21dc30019a61ec7409cdea9bbc65303a5b5a0291f891b48d86991a7625331d45d
+GCD = 1
+
+A = c5d510419f102fe480275a07e90cea34f791a21c04818994607c51418f148a7d87d8a9bc061131fb13cd521b39ca711358e3a6260e26e0c985af7ede409e93bc8002a349246b97ad43d36e239107256aa6096420f7b1bd902be95f8d4646a908f4db16adc4fb949821267d1b42a760a49d38f45692a657e899b7993d6254217
+B = -ffc32bab6fb45a67800b70a696430fc6658babe4cdd24a42be661ea59b99f68c9dc615da7b622ba993ddd2fea3b7865628f7588fe3c14a2273986d89ae7d8463aec4b7784a0a848564c49dd61dd91dc18aa136bd30aae70c770b11ebadc9260fc0848a6ece5f7025d9f4b850963a08f65944515830b735832c26203395869d27
+GCD = 1
+
+A = -66a302abae8e8d22837778086c4a5446a9f153b75982d19cef2fa8f34ebb3f8416da8db43730e83978c918cf757ab68237ecffeb6f1f66379c5a5af9aae7fd25df3951746c2a562816d449996a0468b534b9c6f7c32e7ce6271e97fe75df1629715c72a48ee76f54d10f737040da723b25756a01a3f9f83e541605dd6e711c2b
+B = 7862f54384670a8374b931da72d32ef47c97171804cdc227112278e8b128c3e108a2da1e9408eae8124e954ff2bdda0acaa61a7b347fcc8ad48a83e62691ae58a48298e76a9a26703909d24ea7ff04b357d283bfce193b4d613e1d521f38861975e27497c54d9d52c671bca8e56ad517118deebb35828c51b780b7b73ed5fb3f
+GCD = 1
+
+A = f40a35e114b30eda18d139407068b47f3b521731e023e4bb56efdc78e9f2bfb8bc837e9218326803791dcae3d273eeb2305210c480918888723ff54ed1c7af36e195a3282167bded0c971bd124c5940d10328db029c7f2e7ebb1f8a794a69e630ba53b480d5a3e0afa11710d999be86e3865c09ee628afce19603997e907ed04
+B = d178894ee19ff72043f9901fb9fc14ee3c14fb27c4a672e4030149d05570c11f231b7d6b1baff764e6d8fde86cc1f2984713274aaa15102fb2e13c489652aee46db185826381c8c4956e22811e4e9b86dce4b016d51dec1406f8dfbe17032aae4fafce0806057de5ee00e60a87742476cf6ee59bae42825f7fdfde806ede0e5
+GCD = 1
+
+A = -6d2bf7e3b56c003edab5c0a356cd0b46a2b85de63da5de19b86e4e739b3e6a5e180fa2adb56e70a05ed59b9d1cd29b5d243d89ae99767a341aad18cb97d81ecd5c4f0a4ad2dd8e3d39417464700f8cd7486db214591b9f5f9d41e3cd2ca286d2e653c92d75d993f6e37fff343c9470fff6a6a79b5b8badab82a97b374835d973
+B = 13fc8a3a132ecb9746994a95f75827429f73a4342e89d14f67ba7cdb404752055e06fdbf44bd381b815b986d2e621683c869a7031ef5b43c7a38568f100e7a35adc2cb8a5819d95d9ac7c5adb6bb8523283f0fc233ac072778cd526f7c46b3a1df886c7e46dc5c3fc7a768890e7c0e4affe2cdeb4c9fd59706a11323e349aacb
+GCD = 1
+
+A = 23c2506bf90e469e550aebf406dec7218fce3c95dc067abf5b2526d032d0c35570b9cc42488f802cbd14b5cd50b17b4380b94ae125e98179f2ead85da7dfdd3a06828272a57f144f8e228b91a8d323096108c5eb9287e24073925ad119eac54d23e1df805c85dc87b53dbf907b12270de3bb358b50ad352dc08eed4a35ab3a3c
+B = b870fd2a72f1e3059a17417fbfc62ec14331c22fd845015c7a132fd1793910ddf019e04b88eaa27fa04bb71b8a7d65648ece878889607cdd143e140cc50309c5b0b59643262e5a446310c8542b5ad442b5b384b0b044b66be44a8968f5a39aafcebe553914e22965819bc64e5b81babf8423c31b6eac7078c050641a580ddaa1
+GCD = 1
+
+A = d98ba781fab893ebc563f70717b1579b9aec15f4ff543125b2321bfa1062ff212a24a6f12a5c9149c9337dcf90dd02055d1340bfe8c2f43367fa956d595e81904c33593d2d2cf99961d1b0c29167d34f3bae2a1edd59f5a8391f9214fea17e797abd3aa22197697e3dbd5880a14da22e1b5a38f2e7c0582944de093a9b02ce91
+B = -85c9a8585f15bf6d22c013a3eecbacd1f7abe74601e6355b41394ceee24af75e93711ae7176d7c09ee6ff6152254f7c459db995f72298184bd8e4654d41ca83c77a1a441fa497770e60c6a4ebf0469c9500386a12e9fb018bc295a7fc197b6b4bd94b352e48ecc939bbbeeafd5baf8ef15826c8957cfd64facb60558899ad536
+GCD = 1
+
+A = -1fcf241c0ea8adf4bb4b280ba94d2eacb501ca71036f841daf004a8ae5725babe80ca52bd218220a3efaac09800dc6754db380dda1f1b0647b1571d70cdd5364c89a9f8351dca47109b4f3da34c577f3671825082d2d02df0d86db392dc861387b18fc1a40573a5569c5a2bb04cd2410a487895cb226d78f468d0ddc56730dca
+B = -f232f1960071ca338f9798a0d40ebd8b9b42480c8b824ebcdba56950427732cd8eeea8a8ffe10bd704cd09ab41f9f3cf506d2491ba2470cf6e845d9bc9838f4a43f83f48713de57e5590754eb8745254715618e190ccb7dda686fb7c214b0d69b8fa8d5ed64b23d218afb5be68223b9e64631c2f8c0e889e54cae11ea9f173e0
+GCD = 2
+
+A = -d73a6808b73654db2d7af9edec52300d1964a6fea675d363060705de7100a904d0cf54823c870b6934f8c1596ac85373813766e36fe2dfa1cc3008e29fd16ea0a353d70946d07a75fa0b9cca2b7886b2a04ceb8db84cc4b29ed8af2fdc63655da982f9c6901c33e8450e9321b716e4f340190a22ed18001c738c6c2b8c7e73f9
+B = 351dd90eb2a8085bec451a725432485f645e4397ceeebcb53d46a165224fe5327ec955548cb9da36f27728f14814aa1c4e5d44f38313b6978cf1cb6ae89f2dbebe58748809da73b03c8b3f35fb847e1b7ce57172586fd7d28b6e94de4015faaad63beace642b023221193148945d3ef2d75dd6e46c554d96d617ac5f2c23c3de
+GCD = 1
+
+A = 8b273a43a24a73b8583750e5f20a9ee68403d3fdbc5d5cf84726325c468d888e568b8299fab746aca92aa9dbdf547fbd5208aa5b75781582775fb9af329ed090f12c81a28b21641867b584eb1fc433301c980b034fbb13038c86bb9c12da135ce54d9a73d31637f0d2b55000f99d7b730ea1f80be12d61c100d1acf41ee812b9
+B = 5fa5449a098a665d62160bdd0a0f2e3223e745e35ef8b98c316b8c5589146441a352bd6b2a398dd32ff53a6681b48e2da80e099e78df01e23f5368fc8e374bb843fdb403ec103b651ac8ba7ca1a24163f49fd64d5550e18f13365f5d01528a8135e2a8eeb9b862b600a63a4fb6b2bb406b60b97dfa57ffa60aea87785f52f189
+GCD = 5
+
+A = c5bb6dbbd1600dd42f9318b40ee906ec90e830586f2189a1e9b5cb3fb3f34369117e7ad75e9919365487ab5cc246d5e54dd49a16622785b60dc5a5fb0905c0d11930b341b10700911f716eb7edf8e27a60e04e59054028eb637341a859925d3537714e126d036852d66a5cafeb5c5e09cde8e62dcce554fa0bcd44a9e8d0417a
+B = -eda665a311807c185f4ed6a55aa5b88fc2203c170b7d8a9f1af3de49bcda113869218a0bc99ebc277f74dea776b6a88e4e79f5516b804929e39ce6eac07b0d26e582422b347b8378956a641c950a5cb4f53d9b7c9b830fe10f8496e388e9a15005d4706bd9bb0414b4c828fc462de3023796f408e8d6015c11dd999d0d47d4bd
+GCD = 1
+
+A = 64e4fa037fa48604a5bc62db8bc35b542946707e500f67f46d54447673acf3b54ce01b1b0bc141a6c6bc2ce8c48cee4d94c3f7d5f272735374cc4fe40103d39c337be1bb97fa90ad5ba8c5459e96f5a1833de2521f987674ea5e7c2c922cca5b37f7f12f0a847c160bf578495d996beff32717451fcbc8758680fab9ddf13ff6
+B = 2cb7a43f80a8c11b29011853c7b981697bf934e8b476668433e0754b7bee52799dae1622513c958c2008f69acc481722c70a1a30bd26a8598e7d9ff9ab62c437fcc3399134e651e0fe2ff811793cab06fb80ee79727a91c00167b82f2c91ac5fc850d7e348e1f9fd9b43a4ba0752f9cb8cd48beca4dab14498faff4e0a21294b
+GCD = 1
+
+A = -1a18052e2a02e8676b55407d91c3e859d96a0cb155551538a5f22989c52ebb528144216b5f82e43ed722cb057c75a7796c1e1cfa93f8daca2affecd251c53df3bc536d1f3df878f31226e2198cb27451b05d40399ad8748b6b6040f5ceab39f2dbf0b1a0c8f427931f9e87c2e1fb3cfc33c4f3759a3194fb222030b9f30e8e57
+B = -6118ff3b70715c15c2cea688d257e5e791ec872a63509c86e192223b7409ba4d3105487e168392149eed8d7410b982052e65655f6c328e86729eb058fd006eb8af23de42d24de102da1183992edd0ab83007fd0b3b4122ac7a81a9ff20162dfefd00332fdaa1aab941fcdff9a62a8b732734415631185a261975710402c01d90
+GCD = 1
+
+A = -819aea41d2314f118f2a35f2918d9bbb91d66071193711df4e147d899f7d2c4922c546dd8ec850c06c42843c8357a6d237349c6b8ab3f37781508a852e67102933334c0869a13d0885edebfb291f1a280aeae31476fc917d9b446cb178cee7831d4248fbf53337d6eb72bcc4a30410e8060266e7fe5a8d6f8fe925413d7f989c
+B = 73823d98c1ed2414abdf1057012377c0055282639cb8cef9a9a8bd06b4a453ef0ec72560cb853ece804db8c77f374fdb39d872db6ccf6b5a6e0a5dcb4aca53c199817862f40ed9f04428778ef61ea72fabac2eb788c6fb4074f5ec1adaa7910fcd73ba2b84594a2533157de9e5535bcf2a6a4b81a5922e2d14782aad0ac24337
+GCD = 1
+
+A = dcd429b1dd6dfab665e9dfdbe7cbc1e95e67130e6a53127cdf37a8528944227ed8a1650de2098de9ecbd9210ed3c692965f35631214235c5fb58bc4519b8e2802bce00d499796e5d71650359098ad82fea34e06762a72f1fa419340d882b028bee4342295b836375bd6e72bc3efd299340cb3c4908373bdd3760ac2f51163072
+B = c96d1e49011c27f9e66ddc8965f3d2cbbe0b4a0846fe08d0d969093550623804dfe30f5032453ab751dec499ab8dd3f6d5e84ba28b2452ca9e9736bca8738917096b7c1de7f7d5d0b8eac389f479305bffcb50295607b66244f7ffaeef340a8dd94bbcf0398593c9fc34dd86f7a4a3ce8285d245cf2695d2e825df6dab61fea6
+GCD = 6
+
+A = -e47a3a8cab43eaeead21d9b42f8e60fd58c244bb6c654559c7ce635e7a7916b953493d849239ff29ae458aee50e3552828831062bd81c14f4bf0e25dfa00ba954d9d1d235e91428beead92b99b2527a728d7ac919b6d3184cf00173eb53c73d4c5891b2897ce5484753ec1ac58393f8ce6891cfa187520686a900746863658f3
+B = -e872e0a28bb17fcf34b13fa4c81da19eb465e81c8201acc77ec1922ba4457b9d9c56c9499a2660479d2669c56fef85b4db6428212cdec7b251c8e6c6696bea9a5ce47b8598c482d56e34fd654bc4d9a292bdcb82150ecf41d76309e7fa275d9d2b31840e3911ae801bcff8039628c4d9d86c22b12b3978dcd4f51c8821e2e1ee
+GCD = 1
+
+A = a325737a25f0bc388f812d88a061e7e90ff40d1013966f8dc4e98d6798670c221bc264f36cba7c29a0fc2b35062c9d84813844ae987404b611cc8ee76086e0e0db226e4288ad36704bd2dd30169ef00376706e39966e91cca894f68c8126edf2614f3a58c88e02396b5e73fdae0f8e6f1b59f405e1b557d93bfd517f538b0f04
+B = -648ddbad4f339a2054824820900bf35bef95d79ea1b47c3035d9f85889ed2cee5351f0a5acc4251843a6e28d0b7e9e6e8862ae65276d5fa5d42c5db7a3613ce68a6d3b4c78139295234d8f8a506a9e0526b1a2062e6af4019f806f27ed15f50c9455481dfaa6d9ac2878d60b9f54f959019a8fdc2655b6215832d474ae6b74ca
+GCD = 2
+
+A = -a2628d2c301970dc4cc026f468baeb9524c75e6b42f2c680fd2932bb4eaf85e9fcbe2ce3e0c36c20757102ec59d3b7cd78843086c3d9e2276d24a4b17d8af2b39f401f171996c20d55198ec549147b91b87e2c30ed9dca77f4b6490631b8527fd7b9746b56b23eaa2af9e3b8ab2ba7c3fdd6768e9f397240896b070044cffc95
+B = -90e3fcebfaf863b7f2bf393adeaa764dc4b65082511f723699eb6ae4230b808f94b938706c7ee626d7e53e74d5e50f0df0c21b7f013d23ca636a3e1c5d1e0794d91f5dbe6d33fda87d470a150ef0a3350f232e6b0fc8ddd6c41db47c4e5fcd32269343026b7347dbac9b93c560d4b4962dec2cd9160101d62b1ed0b919537b74
+GCD = 1
+
+A = -981e850517d3a94fd1a2c79628489d3e64bdca3b15c0f680a6c2b1de31f35a472248d57e2118507526a0bf25b6573acf9d7acf9477b60ccb0b077cfcaf3a42dc2b1b1f5a34071f3fcce65905f98e754aa90462374100b4c93f381b216ed808abb48ea23fe6402ee3a3fc88118f992effafa2620b17bcc1551819d1dfe6cd55e
+B = -33f6f2b67f5804020de6ac81f61392d3dcb492063505b180d62a16a61956b0e07aa575975ff011db7a04b370236f5399f1e07b9f0a54a662b4535030e916be62b595276d5c6cfccff7a8fa243c96d29cabba3de08183d3382978d459278080162519872f245bb9bf13a1290630986ab5a547e1b59655426015e2cb70b61c6887
+GCD = 1
+
+A = -88287bd6c8d80f5285b856af1cd02b619aff37fd8673fb12ea26ad3c2d3e646ba92bf68206402698b61bfa583585613db1de5cf910a538239c90024dd82f71c315800946f7ce7785fa1628aa5f6ecbb2f6f75427fb07bd031e4b4e4f5d9c4b21e7d7a6e3e797aeb4106d75fdfa564b62b5011e7e9f159e4ce9e388d0e5c81678
+B = -5d3b18470511a0001449c8b4f4d808e65de40ab2f0cceff3e5cff4e02757c0c057a15abd85473125be29f73bf048941c12c0c0ff0908e336bc2549f5273784158e90a2509f765e8cdd9fdfa70214b680c290869718bfd0d7c151e8728a004255bca8c36032b221bf126198cb0396f28942dbdda55173f1e54bccb0f057c8f84a
+GCD = 2
+
+A = -e707ca4c7e05331794d2b91e8849877ada09f2321db4da06ef7a47476a47afe389adfee8a27512203a208ef5e33f3cdb0f4b13c0d326fd103836824d6eff00af234a737b86989a35b99d01bd30c92ac8fbdaf8540a66562bbfcd7dd1fdbe1c5c7f00d4a42dc48a4b0e3908d5fb227c0e6e9e9992847de45117bf6757196da929
+B = -998a728d8ad5c87357b678a546f35c5ccc5f8f32bc3152126a6febbbc338a60a0f0831c5d55eaabe3c996e02330be69671e1690aba744e4efa717c5bd4eb3ee6c213947276a84bb0ee119ff259c9740ee097d2245b94ad7191e625afb9f5c85cf6aa45baadf2a5837ca80253e61367a12318c4128fbb8ffbb34aca9679f6a340
+GCD = 1
+
+A = 489d0db8b879bc4e2e17b7e4d0ab8fbb1cb326952c18a237a178a1d5cf46a28a53fb12be40dc827b89229d93b6d325c36815665846181eb3fa0e2f00def53ba9752d4f1e4b9771878023a0df23fddfa5a7c68fb1b4133706afec677180b414268c94516b3f76d520e12ce8f9241605043fcb46e8c7993cafe18c623404da40c
+B = -54c141f5fd5c3eb3c676320d0f2a556782a566d1e70d7ae1d250befb081ce28341ef8a32eaa7db5c403e7c20b855269fd682510581ff8478f57c9d187575d16fc3b833e6e166a9cc74fcaaa6595016c87e1ae96a80c6f8935cdb6433bfe5fce93c791d0858df626687a9e0bed30233d6ba6770b94ade68a22efc3dafa38cfbf6
+GCD = 2
+
+A = -5f2b3e3657e4fd856c207a6a4948ff5ee2011ede8ac0074c46608a08f875f6380e5bcdb1a57ea99ca05e1736ae34304efebcfe34ccfd0297dcb34298363964d854dc70e9882e3646f50266bb6444fac30625041bb75b68d2bcc1bf25c9029f0959a92a940d49ac59082c7a6d4bd2b7d54367d71211c2b5ee0c3559ecbf8bd106
+B = -d0b57739ea96c3bf58c74fc3990e334c77680d7907a97137e708be7bed12dc4d058be1eceea84f50fc60653e73527e2a1fe790813091dd6c65df97e8258a8df63c288f2ddf36538c533567947e275784211e89815475133bfba7863e4e4b635f70b43c47ddfb439363e2812f9f84d7e20bf0346048e7f19a22c649123e5ea393
+GCD = 1
+
+A = 70d8319092dd9e7d46a45449912beedae9bd9e38417653e83fbe1d5cb58380df617623006bb82b7ea1580ff49a32f9a97f6ed82d69f1074823deb7548e87d7331e0602041017f75cf9e75f79aa3f8a5e289edb86af95d0d9a2ad3f434f3d3c046e89c8f35b4bb7cf4ced0072524a5de7661d164859719624e147195237f26039
+B = -984b2883f46970ec19ac99a031c104f669a8894a88a980594bddba1b4c40856298b892780bb92131fcbca38aaf6be2c24e965e24e70900e00ef837196ba609542a2898d97f41035099fda3d118e1840b77f1f7e77725fd932caf71b7438283b7ba5f5937099bbe016303abf33297375d68b8649eea7546f5c2ca3d2be6b2c42d
+GCD = 1
+
+A = -d1562afbb22aa35e4a1e12eef7de39635c6d10f92572cf3a4eb9527eb76323d041ddf58cc22d8ba29a02fba0ca1ff099718699abd6dc66adafa2f3db0ebf337c18ea75a433a4a7be9e318ad76f31608e7d22a5d1b9fad122f067601c89b2bc03a671694b6f8c12cf475f2372ed4bc90d696fb4dae54279d8442239234aea7e46
+B = c51ef6dba8a9c5a036251a9ed6408120e544b8a2c9e360891d85099ef0cddee4eae91b0935de6cb08e04260ef9dc673830dd8c49dfc59d734b171f83579506c884ca5f167cdf57764c4df1d10508b30cc027682159ad772691ec1c39c586b557aca2e0e766943fdb7b7ca75bf6d0327c1ddd03a380c04ec3c12f80ca55bc7752
+GCD = 2
+
+A = -d376809df7e77b76db511fa04ff9b418d32ea16cca0f27b89cee5c63d8960ff1920dd69b9b6ebd76f7eaf1e8b7e2abdc81f5ac5cc7bcb7955ca33298f0e49aa68c639150e998136410bd3470195f478d14830000a7acf81ae15d162bf7106782843ceacce675ba3a62441e39722305b396b29c030b3e9db6ed15bcee45fee72
+B = 4f4d97e3936b1845c2fd67135658083a89a214ff9f7d0cc0e46e6faf2ad832de0a069f80ccb4969a930780704b72cd3ad375331438ffa55228597e12849f3f857430e078ead5fa023a77dea27fa776f2b8bb51c717ff9dafbe150accbbbb8ea7ef91110b930e078b16d857abb3d6a1cea3c29b761059006592d3ff2a2200f7ab
+GCD = 1
+
+A = 491b8c302ea139cf13c1232f3bd8f952f85c2520da2d601177945909bb8bccd950304ba655cccf2db1e196822c0aeae5adcb4e71680f34f5914faab4480a2816b6630d7e7dfe263011e5b6c7c0e6a7f859e0c03a57714cd00a2671897aa7da1cbc7ad295cc1c0f94bd96124e078b59dfa1e38fd19384f20f639eab818e66244d
+B = 2b30e10ff02d9464c7813af10d74112108bf320802fd2ebd48aaeca72d9d8554d92dc6a9409b0d645f3c61d1dd07a1b3a5da63a7c24121a3a1c8be82a3d024d86c9e2e72a252b4cb2b4309a316c50d97466498f458b62f652c9aea1d6478e068e66f7e2f7aa9cedec4e715ba636c2a082346288632eaaaf0e165d7e8e1084fb0
+GCD = 1
+
+A = 7a1f9eeac0d5a1e063cf102defc67644835003a509ecf4431388d299155e5d16f2654d2c6102f2774d35eb0f6d50e53ed37e57cb4634abbdaebfcfe5f66d65b8579e5cc5c72e1e2d1cbeee8f3db419299ac529a55f8eb94575ce1ec8a248a3d72c0e0c7d311ded04f3fabab61e421638323e79ca6ef5e0cee57e9f32581bb4cd
+B = -c44864128b6cf55e3da20fd5363f3f7019fe0e0eabd99b892df01bd185ecb841c7898bdb9b6bc7002e36fbf4ba05235c76f8eddf49bd98fb06a80c4e4bf47f7165226312641f614c15d52fe72c11193f3dd9353976a49563362ef7595b8e4eb048f2f64436e007d3f1f80cc95b56fd731876b9034cb9c30c95a4dc572c7a5919
+GCD = 1
+
+A = 7aa4b293d7b884c068f99a5e71d4a53c7bb9a7aae198655602a54280abdfc355ceb625769ff94911fffc76679b1970afc97453d9147309f9887f690b799fc41980b984408cc30c34a53d193fbca5d5fd1a78ab292195260c1c719afe66473c7d8242650bb43b3f21e8d0f6d57eacbc63af19968b7614293e01ae2348c4d767c6
+B = -bfe3405e6845b04ecd7503e3a3041a6b881125de8f5142e3a71f459a471ad5f4e7c5e12c8b58e3f9691ade00013f050a3d094c35a121d7af383c700a8c115201b1f49fd606059867372e610fdfdace08bfa195c38646150a1b1f71e72f4a0a84f0be95185d8f1c2a777bde902f474566ee87393a1d73ae452363af398ca6d0ac
+GCD = 5e
+
+A = 154b0d59c72dc6f70b690c088233ac0e3d93e9c474a722675c2a04d07050c778e0850c6083a6abc9e1b1579a65fdd2a254365bb9ed9685d6b0dff07b792bc04ad35a12c577c41f18a46a446c8f91d0d689ab668f5f228bb3f7f52c9d63221d30b03c4d02d10d63dadbbb10b5bced629f88ebb40dd28ae4961894963bc0152bd
+B = -3c885a2244ee49e198d3b751900102f0cbdcb35b0d4a62183443a54929c30a5629954a8ade9f4947c3db81bd6e2b7fe84fd159b41f5315191c1061e9463d2d4cd49dfe343b6103564df3e0e09d74722f3b6bfbd5fc556ec61ffe3fc3b4c5b0a2c1ae6fbe2c070cd9513b78eb025e14e71405e0c616d4c9f30c6c9e8caf8e3559
+GCD = 1
+
+A = aedc3dae0bfe44496648449693b32d9e1288864da804f2755b9baf23a35790292f38120b4ab400919e2527cdecb2a0782e8f2abb2c6f167345b61b9bf961b1d4efa29879c1e949dbb698cd757e1eec9d1b8d2f68a3d52712ca528146dc2efbc303ab71bbea8d668e496b13d80f9c97b7b7aa0fcc7c3bb5fbe49fb3ec12ad52d4
+B = -5dce0a5263492badb406a685554f21822da52f6e6ed6c308c95ab33633fc510a61ca25c34488fc5cadbcfdad10ce75fda83571a8a8d18cc8f88d5fca59925c9bbad78d7535c60efed3b501a7f09e64d75cb2471857b11a430d914d9331e0255e7a1e42f167a4917f94dd5dd23f79ee326080c53d4019900b0b4a811aa45bdf12
+GCD = 2
+
+A = -53201d3cb5116e1ed891a6a51814371a5e6598af0e8638ca58f3b84b39256b3c72130c6d40b0a7612907522fa43c901cf074212cc05ba2024ba55e8993e2cb565dc26b211300cfb3d2bb4df9ab6746def130bb59e3f60323cfb693657f38ff99c7840694ffc292801c921e7670ca3e221fd727677e14a23f59039243ce11b699
+B = -784fdb52ff6f2562892286cfa38e6d27f975e64d68b1f27d7f4b911d89f41d9605cd33bd3e14b12dab59db6f36e700f8b811c5032bd6e1f48cfefd3e527651145c35eb3cb61c6400a943c44cdabad5affadaff9d8bd5b6f1fdcbc0cfd489ab95e63e212d92245421227c0b97bae9c8def6724dbf80021c1be5fda067cce5e818
+GCD = 1
+
+A = 522384feecfa9a7ed6432f8f0c968f7cb4b70dcd64ac92079a676182e1670dd7b5cda1d78b52f0d68fb8eff7a7974a24b6ac2f141456d94607f71366d671d549ad7b22e476c11c32825967d58b149e4fb0d6ef3395062a7006814f6f502f606a714a60ea2a68549b45aa7a2b489479e7234975eb8aa4832b1a5c7ba1eb45e0b4
+B = -66f473cf8daffc708dd2d607aad4302faed9e869c65b32c24538c8ce68ed2ef3e8dbe0113ff9b75a1b94450535b3c38f394dcf6026c7401f9ee5d5d661396ade9d26ab389428d7df8382ba80d79ffc04554419dae5b29a72cc6ad8019b45aa0f239078f4ee8e40087859182538f4808cf90856f5f3dd5f7667f35595ca7cb492
+GCD = a
+
+A = -9f3a8d7f4c5ca5099be8aeb27ac88bc84a7c54953503db48fb22682097d87effb30d7ab99d20a774f1f56587ea21aaee6b18981027a406adaa2e9044151126545d20d3a676bfe4267d0a0cd76f9abbd18143580db1624febb96458de255c519c817898f53062fd9315bbb0104206b0f3c3664468232984cfef31dbe7b4d92183
+B = d5079ef5b65d765fae1f1494f91bdbc16f746f81b5489d6ba9e90442d1ce4ded8ed3543a2a74b2f96c6c24e343157274809087cc9c09d49f1d40788bd00bf2361fcaa2de41895a4de9da3953983ad9d0fe4c66599ff66543044bca600305a50f199f232e8a7dcb461404bf3eb0793dad42d7d4475ff253257ad4460a8d9fd641
+GCD = 1
+
+A = -c29022251da8ea9d1797120a448e8f5c506f7a666153d6f2dd57936ff0d68cb3747b5f9788dccf406e0ca34f6468d78c24506503004d34f297017cd45ed782707ffce61f90a97779b1feaa0b4b527157e8de4557372998183fbc4d49e2d3cc1f33731c8b17a4248073f107fc152d471d96c6430cba0b939ad0a3b2017fef8f95
+B = 167a877ca2c4ecafa18fe4179bb71ef26ca1b50fc2bbf5ed0384e1415c9d7d75ac25d142111e51e3b1496ee00fa916d382304cd525afce6cfd419af212999d761b12846a749476a8c5e7d3a3acb7daa77ec7e4c33e08235e091f6447bf476b2438bbe3f6627089eeb524e5854620e9a3d52f20a6264de93dcfb75ff42e96dc7a
+GCD = 1
+
+A = -f1b01a508c7a5e1b83cb8c7d9ba74419711dfe32b252f284b83daf391a7560cc9006d35a2549cfc9e4cff464d8d9bea34e9a2879a67435932503a8f37f563074d00afa79071cec2dbc85bd9f2e5cbbdd42c3f2e8ef85312368b46b78329d27649aaf15e73aa2fd7ede847b8d7c4ed7033073a7867d025e1cb92b1f466e1d14c1
+B = -87d7d498ef57cc24e0032c3d05de96f3456cc5a1865128edef73a5578259b564f141edf89513ac601dd93a6c79b7d59c2ecba11f2f81f34d954b6fa0ca81e25ef6ae4b03879bedce03642d4f34bbad67837a997200feb3a37a786cfdacc946dcd8a5d49e7c02284f2ce1904313a54654289f9be672b301b8dbdedc6ba6af1a4f
+GCD = 1
+
+A = 48a2ca1d093788100b1ccfd7e2efd28a3b4ca2fc68a9803074ca2fde090c16f88cfcf8d21fc0a0b5d967a28c57616717f855e104799ad1f9cce980f6ee5746fabe7bc3cdb216dc9eb5bb809942159592e2da4530b26b1a48676945a9eaf75da4ceb677ddf7d2d9c0d4f40fcedb5c14d84c06bee4630aa608cbe7bc68e95d7bac
+B = 6fdebfbf71eea092db63cb3dd013b28a7face1169d6fcbb53d94f185fbc01502435e648a1115d019af6ab9fa0f9d754eb04ef4f47b827ef21cfbf0ed55ad367e340786146b81428a16f27734f8a2439e21d39f8e9fdf28b27e49a5877e26a55ec6762cfd9bf0c82fb1dc95173db2e9f8a5138de70d79304d6c9fdb811567ef43
+GCD = 1
+
+A = db659d5c87330bfdfce7cda7e84180787c096ac2adac3f16b8658a1aa1631a5536e96c82038a998fd5d92030c4a7cb4ee65e401461299e9812053888d34c9a1e5faf73bd3dc4e8e92cc818e5a72f29e2f645792a471a480ee644ff5b53d1735137f182b6ce6c13ff3df639261d9285ff700ca12486cdbf8fb1c82d175a0a6c6f
+B = -28d58f1ec6190366035cef8a48338f59591deaa7c15c2ac1f1c95ba0f6070b171a1e7ff0f492c503236cf1458bc47fd5575356141e432ad98c7babb5f9c303a585d78aa6b3a995748178906d7ac92ce52f438e01e2643ad5d1079fa80aad66d0a0f912986241390eb341338d3b39adddf4ff69c8988b431262fcae446171d107
+GCD = 1
+
+A = -72e471a443703c59a0b501bc06120f32b86835b9ccffbac7bf06de790d407afba8daf6b569429653ed56234d458c73ade9e43eb282d823d371d340871b3d37de1a30351ed86e5370aafb9ec3bd5c94b7500f8158d53f73bd4fcdcd0dd8d3d38cc90217fcad6d25fc4b50f5ccbf00ba50aeb0ef3b2a13de07e32d5c5ddbff9b5d
+B = -b1aa46ddfba7df7e6096081cba0270fcdf329ef99e8c0153410cced7e326944063528a3e82f4471cad80a66ae71ba63feebae5ec3a2747612df4a1bf4ac187da956ac6614d1be45ea290e2bc88a2112354640e2d08fc13630fe19da20af2720a810aa4ea51d48e2beacefbd60992d6209604c4ab87ea99a4496d8ea6df537376
+GCD = 3
+
+A = f40f9eba98f5a840c6d133f98351f9cc2a9993246d8b848fac591143d4d390fb6775f468409bed0addbb8b7bd97b9df07ae6d7912ff263e37cf611694dcc860cde7256dc80313f811116b187d87256d807628aceec86ccc0c4cfcf155818a75e6bc219c9f7261f22fd3fa5b3ec00587d12e5e35eec527640ea2a2f607358edf6
+B = -54db122a02aaf1e8356cc80a4dd8e40f5f25934f9d2385da7867f9582f49ff4a1c0b396b12136e8325a729e55cd444337897bd7e9b7c2328b60892ae879e2a7a102f1d20b6cda684486b1cfaf72ec410add82ffd2aa3c3f647e6a9e3aee957700de2eb99669468bf8b6a13a703785d0f5597760752b1ce1e97b659cadf1282b2
+GCD = 2
+
+A = c2919cc5632e2e2664a81140b59f3f11e0276b73893c359e351755d3b5fbf459078fdc0cdab8aed9799b93965f0624d85e094fca1a1d2042bbb904c4ca6b2e123713320abef0c6802af784d144850e468b04ec2248f438c8eb1cf7e35968aef74c4b7edc191fb4a7bcf33b27cb61e73fd99dd1a31939fddcfe7db0872d891730
+B = -d45c6aea632426bed9beafadcfc2e18fe6efe6a7c6a70b37f2812ecea354d70e8f3552c5fb7ca56e326324265240e59cfe7c595d26167c3dbcc7ed1fd6e5fbabe93ea5ded35a63a61ee962698e5798e28922dca9b252f62800c842915677a2a56989fe8c23986b2182b7d7aa09b13e9504232bd460e6a30207e44323301305ea
+GCD = 2
+
+A = 288e3ba8025c171a58e1baa1242057e7e40ea2493b5a191db8009dfc9f049b1fc8ca29cc65910d8ce62ae374c4af805e539f65449c89f6b2b682a2d33143941b96b25b21f638ea0d9d95caa534311faededfbdaf71eb65f1744314c41b6e44e697a3d33637ce8077ca382e89137d1da88b395167c11c2e3059ecf2f8eae0b128
+B = ffa3a37f0a81d560285c2cf391189ce07d3ae622e5d46d624bef6e218f14455fa51d796014f933cbd302b62c08b8e4b6908c14e8bea475fd77ff9e91a4d721617a8a9267885326239887275350e41abf437e95f5c59f567ba38cedc6970245d1bf2202e27e61a28859dba4f75796f74c07ccd55d9a0f847bbf28ff3b6985d963
+GCD = 27
+
+A = 7ef5b5abbc4d37656e1361be70d2d377733105e8468e52adce96597f449b0766d08996da0b94cab6fbb319ff0292d2f057681337ae4ba8e2288c4d99f1fd3dcc4c87a620d1706647243858f822e7628c8ee6fed2d74fac90c11aab7450645e787520473bbfa4325851c811217ba544b776984bb648deaa97b3f616ff44be7f93
+B = 5c632ecffdab62d2222c0eee1a8b294a5a2113335107422839ce141ff768529424ba7dc7a6f7d5d585a21c2a66af43a38b2e92f924b0b00de00a421fe9a852e06ebcf05b42b5871729404aa70134efb32c637d58593eef07dfd5ffa3bdd3f845b65c7226799b0f8a57cc980e213c5fe3ae50e4335607084288ef0dff127d0029
+GCD = 1
+
+A = 140db1546f0baac73208142e1dc6ecba8f85d13e46cfae751a39ff618cb51d359f84639b16157b649abbf060b29d50fa86de5929208bec0c53023bf508389437b46ac304315051b27e65a6e04cdec736392eebccd8fce1cb064206704c1f75351df4f4c9950ba8e5f1bdf9eeea353baee1a5328d992af90692b4f51b0e174227
+B = 2f89690ebfb9ff780b85352071f9b91ff03af4915382cebd1e276700b500210d94c92979fdcf6c31c6499176149dac85422656cc5b8ef675c6ea9521f9f9a0b4278c785f7bb1080530165e660070ee6b7277fd81133a01d1e74382ff9df98e2d93ab653f4f3403734f468ca0c92fe26e0a420dcd7201c51b18a2676474dc11a4
+GCD = 1
+
+A = 84084adb6cf02639893aaab4f35c700748396a18d3b112e04aac9e1aa9599de74bc67941dfc4163ea38d5555a6d4f64267db92cd8a4d9e7eaecd26997ca3ba4f8a1fe01ead6a4ff479b73cdf2c3f737020b77ed78df10173fab4c812aed68b8bcc53c56f90bf7bf73961f78a1bd7f756eefee6f4155a6354165ba721152ea72a
+B = -7c46a32ab5df788177f4eb44595339c1137d99d953cf6fed96c0236eb132ae35e3c5443247732f3b953a1ef84eb2d2765cfe31138635bd5169c46a0e3ca2e3ed58f8c82918cf1559e042ffcbe0511d64d4f4eccbab15f69309e88d34469dabdada53fafe0b8b93954ad540e03a7d30e770cd4895c8f6d465edec4204c749267f
+GCD = 1
+
+A = a981fd251483fc2af4fb7af6ab2dffb689485c04d8e129593029a93b215f5ca4766e8fffc7c09e61a07551bfba9c9df8a664f97aa8bdfadc834c4efd27a05109266283f10f6aef075be86cf11c2bc8d4704514f335ea47a2a1bb1704cddd94077796264e56c77004af7d700d58f8d2ea0f9279cb1a25d73819260477cf4ae567
+B = -6ae7fa3301fe3321d330c1f7090be90eb361c4c0a134a5b6f19cff350d7bb0e48a237d42b34a667e947935c329e49c37f44dd7a2e41a1476c0c49f8b71fb4412ccc64707efe1d4a4198215ed68cbb8936a08c11d33b503695a070eb67cff485e0c86358b417fccdd8f93be49cfef57b07667aa7b7ddc1b9d4c52798d5c8f9bc8
+GCD = 1
+
+A = -b631f8a7641b5d41b3eb612f279c14202b99a4207b3af5686de3a3b3a06af565dc40f175e7fa55370e450eee70664ddd161e72647986a61f2403fd63e28a6916f59f2ca89d2e7f547a59c41663419f0d4f47c3416084ebc55b0e32a7d9946d596829905535ed5ea96ddff540559e403e89070f76ded127a63356a887908970f
+B = 40d83735d70fc67b949d6c9011b424b8610c101e14b6c14e3dcc218cef3ed6b9a6937455df733cf28395a6bbd57b58f1bd6b644d7289c406c02d88a5c90336df76dcdb3915129435a295f8baca607b2d95be6f453cf33f27e54e904fa8efb468d3d3bfe42d205f4d215141bd7a667a081dab56b6bf9ac58a37384960f3d00143
+GCD = 1
+
+A = c283bc231037e4382a9cc3dea35145a0a27d81c58d93ebddf41a99a91593e502b85f309c1abe08400fcc242c92a783492d616c9769015770de653108562f7969b164e269112f93ee1eaad4914415790b64b74c4dc3a1c07d183aa9a868de3c8d2f49494e31c5ae8c849ee15786ddc265347cfff8b23b0cc15161f1a91066b4cf
+B = 1de4a88e80558a547a0883feecead664c4631b1f59d19b4fe1aa5e61376730dea4cf628ac5347c69978be6464e7916af4008824544a06492fce4356061d654a2f730f9d3cdda8ce520be84c9c5e45be0a59507be7d7fda93ee14b343d8db2be812156c3aba8adfabfb3b002ceff06710c662e0d3c962294fcad438977bf3a43c
+GCD = 3
+
+A = 839382ff295caf55e6490afe233722d56e9d7658d5fb649723d1e8093bb40941a452e1f6915b808af12abd65f4417184a7bc28dbdbb43bdb87a6b1d79907cebb3f2e88e408ce8ef7f4847d09c5fbf1a99e3d8c36fda1fc2245febd99d9a345f6b547a42d0cc99a5eabf97e4f5276407e990189e671d16f03fa06f75992136f23
+B = 93c2e1c35b426b9a55eb9eaa6d0a519bbb59f8ebca8ac50c0ab37f5d2d56d942ea3866100b8ddaf150601685f9cb178ca7a1e4a6411f92af4065ca58fca5c35e8b1c36b223b874ea3d3360d2d7540a5583c6d7e3da24b3aa24b3c790841b29ef663170e4492fdbb286f58a6173eb4a8d7bbc72ef887d89b36562443b4f2e169e
+GCD = 1
+
+A = -4a3f82c72925fb805a1dd02a4831fcdb7d0bf1cb0b90f1a97053076b64aafaf9cec3df00f335e25fcbee9f80a80f6ab105db6c80c6b4c9136388c68d20847cf31e402c94946dbf8ef8569917cb7c5eba390cc3e8230398a3386f9c55ce924a108a1d7d42451b1d15268c6241601a58bcc5763d909ded7de1ca6992157bb3e6bf
+B = -ce803dd8eaa66bea9122e4886d11e866517fbe2ddbbf4fcea573403b88764dccbc01de1298bab469bd87deaccf4749c93a5ccda073bfeac05e8ee23a98e09c2b9db7dec899496dc86538cb58022307f3ba95d2ba497541c36825ec0725bbea9ff2557f912e9207399b2e2a6eb8d380bf32d6f9b1dd78437066279aa619c01b08
+GCD = 3f
+
+A = -daea240e1c50452d78975a729483433127094ffe17c1504d20c2d973409065f2f9b04a4671ccbea0ea1246280dc5bd398fcae5a91b11a3b106cb0b04e8ccd0fb2dfd8a1fd5357dbb71b9475f26288cfaa40fce158e523bdb2ab4392d630afbbdc12b0ccd6a22e2db09c2a77c4fcd4637c3efec7d1cc9929c5e952383a17c2ebc
+B = 6c6e38391d5c794d7e4104516a24ce0f0ba77d13c8ea294f07ad8f61870f40f587496707e1906d7c8f46a8584e5aa82b0bd16b26b01e5b276fd2cca76f5e8c09bfde3b4628d237dc6ee35ef64e1136fb4e6baf3ef46268c3f4ea21ac5e7683f143ae1c7bb333a7c9e3ec121fdfca6ec8f22e6cfd64d9f68509abc58aded834c5
+GCD = 1
+
+A = 21bbda00bd3ffb167fe34e01735d432378a6dd2f896d936e1182e0882f17bccb3b3d964272d2c64c2a7e886fa92413e6c01ecf84db9f29c435f2132b9f0c49587dbe985b18269cebfd72a785c165777e293ad7b32f614dac592e0603c531619313729dcfce5dc210e3250b8bf4646b447741c10f1dd9e495f89c55a6a5c11bdb
+B = e303980479317084c56d9bd5a6865b31ab3d1e7675014af88823ca388c915e00046d30f54774f0cd117998d2659de9b04ef7e78898b885012dbd3bd1fbb6f0a608aa47ed8b1328ee3c02feaac84adab461329945b062ec02e690b460ca3b5a0b5063be7a7a0a6634050cbae49091bca19fa229553f412d088c6c1a1ef059bcb8
+GCD = 1
+
+A = d35485a01ae17625e5cfdc384f937e4ebf39be59d8143a1d0131bfda73737837d4f59010e72521e9401ea19409d76bb2f0b1881cbfdd515d9d4c1975cfecaa0e259958d5abd2b3237e7da9a76aefd8b4c21bd8349a4d3a1c8a212c980f7984b2b281195f2df08207b99652ab05263e5ef85eb126492918baf4c4d077461ca1e5
+B = -feb136c65beff472a3c83703fdd3959e4c868e63152ae6b1b708e6303e9c0d81b6bba5c9a18b43635161b9cedd55e558069aad4d31e5aeac224ec34f23cca9830f0000e9239eac525b33d00b8c8a7aa90b391a618ecdf104acb30d09ce42cd3836708b05d1f6ddc3f741fbfd7bea55e504ca573bf94af73008cf7f916b97aa5a
+GCD = 1
+
+A = e6234aee21ea358ed4cc8fe9a1fda68deee6bb7762fa4bf90da04aa9e3c03390e5dd60a5932a3a7e6ad93bf9a6d0f0d79eed7f0cd6a8a714f11a82699aba3e11f953f81dbc592b0a2d2a7de70aa074f592d9b40918c37f02fdb9e7c01e641137bdebb7b3d784a9399ba2c7701de09068e4aeaffa173db361a5e2d573bcacc53f
+B = fc8962f424855af7e0c22c9c424fb6c2afa4c35be6d4051f4b9cb3d762d5324bf318fb7ded05755302af37ac5e6aef2184d8178b53b3bb1ba4f0a54f704ea65cdd34550e20e7cc9acafba64c68667e755e6944bb2a01392125f80df14c2fa6a911f3acf4d9b3737312136f2da0eed34109db21c9dea3cf84c56101c4e7ed2e51
+GCD = 1
+
+A = -f3d77b8eb4c24a2e28668be112ec8bd8ac8ccb71f324b87ffe5e96f6e13881daed223d44b27adc674ad2f1ce83b09889a8bde32ca4d1c140c7c2e25bf824c5dbfc50458d07b0a7616e1b97c8dd7de5f30e0326352a5a81a564e220ac9f8980c874a223a624c171a683005bf98a7d282e78076a13a47ddb3ae09cd3108b8b946c
+B = -89d73a5830fb043739438502b5c5b0b4b31391d13e3e8d926479045d3b55e778e698aa2a593d9936dcdbe3c8213c15b97e34d6fdfcb1bcc42880caa9b4e377438295cb3ffd071f81fb71b13ecaa21da10b04fb0da65b79c363bfcda7e1fd8c3a13a586b8d5a6375dae6c21b5abc433be621cc3d3b462127ac4153032a84be21a
+GCD = 2
+
+A = -60
+B = 3c
+GCD = c
+
+A = 186
+B = d2
+GCD = 1e
+
+A = -113
+B = -1b8
+GCD = 37
+
+A = -b60
+B = 116b
+GCD = 5b
+
+A = 1fea
+B = -ed8
+GCD = be
+
+A = 1b5c1
+B = -148c5
+GCD = 1d1
+
+A = -5a426
+B = -2846a
+GCD = 34e
+
+A = 63800
+B = -94000
+GCD = 800
+
+A = -4638a8
+B = -23f256
+GCD = d602
+
+A = 355d40
+B = 129f350
+GCD = 47270
+
+A = -5ba081e
+B = -3a89072
+GCD = 383e
+
+A = -2014254
+B = -411d534
+GCD = 7004
+
+A = -4c1bb1c8
+B = 28eb8bf0
+GCD = 9ac8
+
+A = -bcbd0f22
+B = 6b2528ce
+GCD = 1544a
+
+A = 3b3ea5246
+B = 9d812da9
+GCD = 38dd9
+
+A = -d341e4963
+B = 897dff148
+GCD = 4bab5
+
+A = 1be090b9d
+B = 10e7682e15
+GCD = b7695
+
+A = f8f4eec48
+B = c1b223b0ea
+GCD = 18d0d2
+
+A = 38b303e10d9
+B = 37338b5cbd7
+GCD = 22fbd1
+
+A = -239480d6150
+B = c9bbdec2573
+GCD = 151fcd7
+
+A = -8bfae4efec8
+B = -5cb3b447464e
+GCD = c6750a
+
+A = -17ffbeda3360
+B = -172360f2b88a4
+GCD = 631bb84
+
+A = 2db19fdfdde20
+B = 1b45394b87c5e
+GCD = 312181a
+
+A = -4495f0e4e9ffc
+B = 9c2cdbe69719f
+GCD = 722c331
+
+A = -220a630cb9dbe0
+B = -3f6d33017bd27a
+GCD = c3a44e6
+
+A = ebf8369df6c6c0
+B = -5e060007b69270
+GCD = 1f09ab30
+
+A = 7b6f0f808af02c0
+B = -6291d40baef1da4
+GCD = 1b51b9314
+
+A = 10763885f54acdb6
+B = 48ad72124b927b2
+GCD = 446be8ee6
+
+A = 1a1835261881c618
+B = -489ad34b6f17877c
+GCD = 1381450b4
+
+A = 501a8657d00fec90
+B = -7d572fe34f1e3f5c
+GCD = 14b7465ac
+
+A = -31d2defd8438d0934
+B = 169de129d42f92a1f
+GCD = 2f5f228d7
+
+A = -f654ddd0674ac42bd
+B = -102942513fe4ff077e
+GCD = 53754c93b
+
+A = 53e625b6193b469bd0
+B = -25339fdb5a2cb8be10
+GCD = 69dbaf98b0
+
+A = -e2136db2a4f5c3b648
+B = -a1222b022d7a60e600
+GCD = 379cabe8c8
+
+A = 4d46abeebca81ce0b62
+B = 4be4576e8dd4460185a
+GCD = 277218eb16
+
+A = fcee21b2537f1e316f6
+B = 8152473e34dc6bf3672
+GCD = 7548bd41fec2
+
+A = -4b2223e1cb3699148261
+B = -c9d5752eb52f007b89c
+GCD = bb2037c85d
+
+A = 1350d1270c3ebd10c35db
+B = 14fc3fdc42f3dcc7e115a
+GCD = 1ba06e1280b
+
+A = 50692071b5ee8a096ff4d
+B = 3976ba57d4058bc12dd0c
+GCD = 2d5d14ad4e9
+
+A = 6a9884789299c2942f1b0
+B = 719653120e442ae6650ce
+GCD = 47175a451ce
+
+A = 72e211d36a45e2f9f2ddda
+B = -5e1085e7003ac906d3cdf0
+GCD = e7f966f04b6
+
+A = 1c947b448d36d1cfae4982a
+B = -6e964fc229dcf41139328
+GCD = 945fc32cf77e
+
+A = 24fcf278c33bd31b63e3216
+B = -49e65692c65d3aec4f6992e
+GCD = 2e7f54c97526
+
+A = -75119da40f9986224346a33
+B = a091e0ab5ecfe93c620471d
+GCD = 4e41cf47726f
+
+A = 40b89aea1ebd3cb5f027dcb8
+B = 29a45f4952aa17040c3a34a4
+GCD = 94a2a8cd851c
+
+A = -df2b6f9d7344fb8f18557e43
+B = -36500a4df1f6a1ace9f0e740
+GCD = 1af85bd617d03
+
+A = 3cb73133275e0c9d970f56530
+B = 454f08b3716fae1e8c9520e18
+GCD = 188bbab2af6a58
+
+A = 17ed791c30dfb55c98a04aeaa7
+B = 120c7fa76ee6ccdcd5eb13d06d
+GCD = 68df2b6f94dc9
+
+A = 69e936e19455efb26b03dcc7d0
+B = -5dbcc1a5e9aa7cfd3610c7e2a8
+GCD = d74ad9c7f8aa8
+
+A = 5108d073a4f96af8478989b920
+B = 1a457913f0fdb4b6252070728c
+GCD = 38d5d2424767b4
+
+A = -8f8f62c3e3098f55785870b258
+B = 2d7b6adb4a62419e44660f494bc
+GCD = 2a57445ed9455c
+
+A = -14d2bfa499ee9db45515af917f60
+B = 7b439debbb28643d36c8321c20a
+GCD = eb4d745e1ee9ee
+
+A = -2a757de40c76d46f3a0c689106c3
+B = -48afc1e13db995e04640fdff13f5
+GCD = c200aed70b3c8d
+
+A = 75cd38babb6944db9278793c44a
+B = a0a9e468c75bdd679bcb25244896
+GCD = 276932887bf3992
+
+A = 48123cf3d27668329869856ffb16
+B = -2552b4e917da9d397885694d1f896
+GCD = 3ff19116559b08e
+
+A = 63156f7b59e4bb5caff950cbdca90
+B = 1a87e98e99598237725543cdc0fac4
+GCD = 7c1b98b8b161e4c
+
+A = 28c3f0e5155df3134fbc202ec5b440
+B = 218e4d504823961c73a752e98ffa14
+GCD = 82f502a9cb94a54
+
+A = 66018fbea01eae81b9798cd07cbb80
+B = -7c443a8771b5a18a4459f3b043d040
+GCD = 1c40989249566fc0
+
+A = 4a7af2c3f8707c504e065e05b1c80b8
+B = 1ff4e92c21ea284ab39c8d0c3764380
+GCD = c1a41e0f6a1f1b88
+
+A = -b3777346ffc00540b7fc277cdeaa120
+B = -1d142b9475c0bcbf157ddef135c6abd8
+GCD = 16b2a3123710d7ab8
+
+A = -54fab06a4720b0d095889274d51933a9
+B = -35b2fa44d46cf20e24ef74f5159ac44e
+GCD = e96ba48429bf2485
+
+A = -36e79bbc0be929b8790f64ccdb9d264a
+B = -e1b9be6e7590db6381f7084207711d16
+GCD = 130af4bf2b0ab886a
+
+A = -2e4ee39b2813741a619d1269c9a5ab874
+B = -334f44bd14e6828f4164e54532062a504
+GCD = a36da43ee906a05e4
+
+A = e750698347c58a88587054d34630be800
+B = d40de7a34ae8aec3069438d1049d6a708
+GCD = a2582199696ccd858
+
+A = -27392efba0d4a4ebf0f0f9ba498e806c8f
+B = 26debce4c2d6c96ef6431473bd9b4a43ea
+GCD = 1e67036d83e93d60b9
+
+A = -1c4c40c4489f36c958801b7dec347165478
+B = c5a7df972998846db2abf3784bcfe3a805
+GCD = 1ecf5da42030d9927f
+
+A = 677c6a306c395c0f39529e5d795e6546dd0
+B = -66238cd10f0b9c567e205c82dd070fb61f0
+GCD = 7908f4ee6786542fb0
+
+A = -15f3c0bd1182b58d8e243c55a24123d06bbf
+B = 886e66cacb7b1725ac4d3770c247d89489c
+GCD = 781ba4691294ea97cb
+
+A = -109d6075209cb53e8164d876dffe810a12e6
+B = 1a78a4bce1ea471a3585fe50cbb7650b3401
+GCD = caeed23752cb0475b5
+
+A = 1202067d091ffb7f976698f3f89e09cbddab
+B = 1bd41e29f9450ca4d064cb51e67c53e2401fc
+GCD = 1ca9a074c9114076b1d
+
+A = -46df2a3b758f612ab5047193a1de42c43c9d0
+B = -3a50bda4ca03e98fd03437ff2f8a84d73aaaa
+GCD = 32776c19a4c5d038ae6
+
+A = c307929b88217259158cf2c615804dc6955f6
+B = -44cd179064d7f47b0f12ae52b442e863d9a0
+GCD = 55bacb5c916360ac886
+
+A = -28e83c0d17135602e6fe937d754e752f92bc5c
+B = -4364326998617e085b6a2cb2c68f579e939b40
+GCD = 928912429b8741a2dcc
+
+A = ec320e05a24f118bb243855461de4bfac2cc90
+B = 71e9d70cc20bfe0f9789c94f599ed42aa0fc95
+GCD = 1e369b04f74afbd9cef3
+
+A = 1ae8d12f2faa8262bc454562953fcaa651545a8
+B = -431ab0d696d3eb7d2dd209d793c81483dc85b74
+GCD = 298f4bee5487a5e31ff4
+
+A = -6ba78b017a29c99be57177f0db6e69e6adb50cc
+B = -161adb15826f168fd50caedcae729119fa4e43cc
+GCD = 6562700e2471a8791b5c
+
+A = -384bc4f58d6f153c42d794a7008458c51edf9ac
+B = 1ddfd41fc2007340874d1ee3b2e98f5dfd353e8a
+GCD = 85db7d6c787a79e0094c6
+
+A = 28301a390f514d6bede850fa603fd01c5a0b741d
+B = -12a7880f4b21e70689f2ccdc4af6b994692f6116e
+GCD = 13edc8737b0d454d7a881
+
+A = -4afb93a6083083909296418bcd17fe1917c0423b6
+B = -19f5cae77162c6992b48abb66b28af7e1590828e4
+GCD = 3062cf438b1a6020552a6
+
+A = 1b01df399f465678baa23632e6f636e6e9995ae978
+B = -33d7e08cd12c7fb51393f4d6529e6b940ed912ff6
+GCD = 1690d80887db5b78ac5e7e
+
+A = 4e163c74a44bb9366fa1fcbf7f5f3466bf76de0b70
+B = 52ee9fd13a73c74ecea641b8647027c0b70cae3cce
+GCD = c95d6705a73e87dfb11e2
+
+A = -18da164408d5151d83e04d5a12729011793e21e328e
+B = 1ab7d2be06dcfa6fc13972bd8eea00e374e644e9dc6
+GCD = 1c86138b2c3aaf3456294a
+
+A = 157a8f34bfc93447b2738f99417504e7ae99df675d8
+B = -9e1072f81e35737e956ada541883e55d187bbe700
+GCD = 6cc66684ca87ba0eda4e88
+
+A = -730413d5dd18a82f6c9e24de0fd2bab0b6f9abc4c5c
+B = 10cadbe97cfb99dca72d5626c7b75fad81c2f4113264
+GCD = e89f52db95f88ba356066c
+
+A = 213e3442e52fabc81ec6312cf2b3324eeccc536d92d8
+B = -4476713c86e51a0a1a63c5c70cb8d74bc115e1572677
+GCD = 9bf30eab8f99017adf5957
+
+A = ae87fd02c6b7bb4cdbdacbec9cc0925ff604559ecd40
+B = -74b6a9328dff01501b1160e51c708d27d1731f960ce0
+GCD = de4c9a887083b1c11affd20
+
+A = 24e3a4757c785e98567559d1f444676832c8fb4cf9173
+B = 1ae906ee7a49fcc0239c0d0efdb18161b8cbeb4ff44b6
+GCD = 321e7bdc7bd26256ece00bf
+
+A = bfaceea21b4b3aeef201c24f7243bef3e896f3476da80
+B = 34966d7a58057e875ae4572bdd7459ded927c2c7b8f20
+GCD = c4ba3ab148294a8e6d47620
+
+A = -5bdd783da99a7e245ca551396e093f4c465322e5844757
+B = 59d33cb08a960e4c9a32bb7b8d6b863d5f6d2ce40b8250
+GCD = d3d6a2bc13e9a41307a10bf
+
+A = -36b5be6ff7a5df0f24c3627304d9fef0b8a79097a7c4c8
+B = -f000375b520dde6f4d09bea91d3cdf6d0380c46f2fbe3a
+GCD = 2f2bbaaf28b95e18a84f583a
+
+A = 710afafd13f2ad4303f6063ccaffe6471a0483185434fc4
+B = 306c5f7848de05605aa30e18280b6476a16db89864e8cd8
+GCD = 1afb372ba598ffd1553677ae4
+
+A = -1b9962f376d3d9010d5ab1982723ec281db0de5198afa8c
+B = -f59b772cbe13508a130c3af0b5ed5f905054b1bc827f5e4
+GCD = b0b0f6c52ef3c37154c1edf4
+
+A = f46660653502988f52f5c5dd41803f6ea0d84e6ec97e810
+B = 2bb7c59422b5dbf6716fbe4ebbdc7022dc4b9dae220c6c20
+GCD = 12927f998fd18a0c976da06b0
+
+A = -1544ac242cf18085bde53c7623f058a4be9e74848f0c054e0
+B = 1036957e8f99ca11234ea87465e024542dda2ec01bc0cc840
+GCD = 170e6faaaaee067ee651575a0
+
+A = 48e10040e36d3689f808b56e57d66dc229863eb156629b6c0
+B = -31781aba8dcdba4462d0b0d76cedd86e26891ab3df6d18780
+GCD = fe73ee3df95ed8dbed6cb60c0
+
+A = -f1ffdd2179159d5574a836051465c918aeb443f34f4beab39
+B = 122d6f913dfc171b7c6dd2c66185a07f61d38b9887db1caea4
+GCD = 41e0e56dce7544c8e606562897
+
+A = -2e6ac0b560dc647868c997776eeabded9cfc6333f2b7fc83ac
+B = 146b44ad06770ad42a0f04b47351a388de00ea4cc2a9461fde
+GCD = cb29dcdb03a8e33fff6929152
+
+A = -1390f1c1c2d496fd3776042fb87bbfe8ccd673cc48220e3262a
+B = -15c3dbb1d024854be4db2138ab168116b210760ebcae99d0cdc
+GCD = 16352e1ead35648e7ff73971ca
+
+A = 4abac232eade22e553c6eb4d5b6cc04250215ead1c8af15f1ea
+B = 245d690f3952b8d5773bd304f743fdd4a902bb056f814338e62
+GCD = 29bc533ba87f0017c45933f64a
+
+A = 1cce1905ebd7a1a50d1dba965af29a161964433daef467990210
+B = -c258c1b1429322eccc9e57fdebf2018ec8bcbf937577ab60a0
+GCD = 2264d81ab8eb97b41233ea04eb90
+
+A = 16feda78c59cc9ab1707decd0970dbc3cbb8445f9b076ac87948
+B = 1cac7d0661010679551cb2fdfc23db05303f8660e5036f8a8637
+GCD = c6da69d30eaf504be7f8ea388b
+
+A = -891f9eeb3b5acbc7102cefcf4a94b834f1bb4fcf2e5f47a005b2
+B = 14666b1967cd12b44073ba7fdc2eed10a63e5bf2d36cf9589acf3
+GCD = 1903c267fa38ed6b2df075decdd
+
+A = 48e276e7a4197633d46a896cd1fbd51d85b7ac70ed8fcf277d3bc
+B = -424594d2ffe7d44d425e5cdb97e26b3c48f52f401c224a6f69fb8
+GCD = e8196796f47fdc5b8bae54e286c
+
+A = -4ce149df26eded2015965c0e0277a713a15af9a281e6d24f3ebf1
+B = fee88bb8c116fa6fce83c086835e399123a9624e9fdb27f93e902
+GCD = 5aa90e8c1be239ad94ed9ffaffd
+
+A = 446a6dd93c81da9bde1a40f88f75227bd0f4d832c0c75c0f0827d5
+B = 3a0a6788e01a5cb9050d7b099db23e540705a8d0b3cf7efce39def
+GCD = 98dd9967174f20a3eaceb608419
+
+A = -1c573c54bbd96a6daeca8ad08f7c1d5ddc9cfd203c3a5cd7d887eae
+B = -e78d1e0c739f5c239fc8c05ccced17235899c6ca080fe619ab304a
+GCD = 1f413e9056074460a4c4b1d109aa
+
+A = -18a1943a102954088a90b0350b68db66564157440bea1b8e4562266
+B = -3b3de5b0847bbfdd3d433b43a260d1fc890d43b50f30ef95fbc24b3
+GCD = 33449e94e1eaf2b7ba235cad97cd
+
+A = 18a54ff0aad2453a79afd79eeaed1ac3178bd4cd1ac9c5fd8774ce60
+B = 8dc9232a0a1729f1e7ddaea824de9fcad4c0065e9eba1469e55e5b0
+GCD = 6db23e322d6f807c9ac8aeaee550
+
+A = 6aa7a289de427771d237fe84355807aeedc56da586108e5c0efa117a
+B = -34aa6adcf13c278992a2496747d95ebd7fb0978fe70a19879a7f8f3a
+GCD = fa59ae7576a407f0cc6c90970d2e
+
+A = 14971ed18ba7d1a94dff70cac54f50f0eb1d0b9962ccf8f95ac9124f0
+B = 124ca1338251f6312bb87a181c84cac83e7db24082cc1002b5ad5a439
+GCD = 198d1e2e86808e583f5e08701610d
+
+A = -26b9cca877235946022af4669b526ec373951e3447eb7d5ace555545d
+B = -3428e2f4c4751a204c1c0fcc90ec2cd6f20404b7117f08e12ef7ef814
+GCD = 2778771a4b25f9c0a2a89634755bb
+
+A = d5e8c7732d8d5ce5b28ae4db0476bedf5d0ef5951fcfe270bbc487c86
+B = e09863c4b9a04887c245137387357fb6570bb112eec5f19c7c4df912a
+GCD = 50225f1ebf464370403cd65778c306
+
+A = 420e509b0f8d2c7fe49c4a7bf1e570fecd9dfa073fc8cd37f395a06cee
+B = 5b481956824e7828a5a0e124dc5b77e1e08cdb563b906601c15205978b
+GCD = dea45f684be34846c97e948807b71
+
+A = -13d0805f87ac3040a011d5587e2dcc7deaef888e712305e103e3c426f82
+B = -1d06c9c7086cc2a5046caf9037eefdb11feec095a3de1d4de9adba7a8b9
+GCD = 1d18a5461f9bf6bd399d50f98cc4e9
+
+A = 43705b3956e56bbdd83b60f5fcf9655efc3c7b675ba2728bb4db1177794
+B = -1637ee6f96e79ede1ab97fd6e7943f424c0f340a58f7ebb11fb6e1dd13c
+GCD = 257eb70891655f00a12a58652f8ff4
+
+A = -1adfea565faf9f612859be5d997c38448e931da3643c797fd15875660593
+B = -99e4ebee8cb4dbbc7f2cf9b8db62dfc39e3ffeeb629bb56b79d9658270e
+GCD = 6c7739624ab895497a5c1e15031a89
+
+A = -3bac0f98360e068ea61509b67027db8b5ed9deff3802d3a26b02e1e48e48
+B = 63af576de3b0f715fc8b9e4897a46d68b7d24c01adf9ca5cdbcb3f00fd0a
+GCD = d5346e1979317cdc43ed40ff2f0a46
+
+A = -4e2912454e3b9ef8f5f70e64e255c7b5d45514dd0261bfc1d3e9d6e198ff
+B = -8b2ef5d1398a63fc22b44d1c9959364146787885909d9ae65c4548749f69
+GCD = 1fbeee7e7e619279f5c7c485d43207f
+
+A = 29301d123239d4cb4a6f849e58493b20bb1e46bac07e44451399eff17ba70
+B = -31eea4ea038d528b2d8793ec97a9c426e41c5dbb6018b0c09be2e6f7b36b0
+GCD = 5ab3487d2e00b2ebb9be6ed84aa20df0
+
+A = 46afaa677429aa21f301d151b225f9389c68ee4a260890cfa8a872b72b5fe
+B = 1679adde5a60aa24bda71376a0354579620f3a13fd194fece23bacb7a4c9b6
+GCD = 5a18519583b27fb2abc7a4d10750626
+
+A = 2fb260963b23665dfba0dd8fb0b7f5f6629eef7c960e75721ff0661a89a002
+B = 3b8c650ebca9fc99009d57a49ff98088550446f566be7377308783dd6d546
+GCD = e385d3223b5fc1ffa244a538dc3108e
+
+A = -f1bd28c7b6f8134cf6443c193ff73d983fe3a18c5f5ce58deb428f5c6c7498
+B = 542937a86d14d83bcbd62930624070dce93230b769f074776415cb384909e8
+GCD = 3c2d81daa41d0a58c513d44fee26b128
+
+A = -59bcb00e6f32df3373988e268d466e06b9827cc455d5506f6143524de2bea1
+B = -22464a4299c48e4ea336b0ce2828b4f48ffe97d7cb7c0a9d9e282bcda8e6736
+GCD = 33d7d0c13d19d12c2450e8d86af98c45
+
+A = -51b06e3e977ed94e2184d3899d383f9b6d2c7e8eb3a625034a814a72d0df619
+B = -ec842ec08aefd32f2c1f797c86d40f41fb9483e534f1cc37fb0834ab4ee5442
+GCD = 7d914fa6356c08855ae1f2b64f50fde5
+
+A = 2fda06466cd332c4cfdfd159ecdbb32fe63a508d28c7986e8db333d8f3e1e664
+B = 2e4d6e4dc2e60ad07ea26db98085a14c839c24746879c90ed8d8cf66ab5468f9
+GCD = 4a0b745733b83cdc9a94f6b06e589f2e5
+
+A = -2255ca5fbd3ccd756513e3d1885af3b06d22a4e7abb72fd876103b4ccfc72216
+B = 681d91c5c012a9372c6991edf3003d6cf8bb0e0608b9349672c80f93a5317429
+GCD = 307368f4350085b9d3572869a6567e9e5
+
+A = 503def4d2eecf1e6f851a8ddc9380b3cc3ac66e46667ee0c3f8687abb3134ead8
+B = 48a92023acdac18324e432c25f50c5c619da709cb5b10412ee3f3265897115a50
+GCD = d1f599335eebb84aa19a2e6e4a5c8ce28
+
+A = -160e04e27276bbe20fcacee78cf1942e064120b3c0d44f902b2139249ef93aedc7
+B = -10e34b4a835b74e3497c55c06956e41074639168738a23e5491f24df2ec0d1c141
+GCD = 14e2fa17ac3b29e0ad84222283f0697ed1
+
+A = 4a3c79f70f46d68c8442a62a487e0fa54dd25d16cf03b907a48c5b352f0771664f
+B = -5e55c73e34fcd075825263681b9037414ec73f9cb9862417acf76b474c8b77094c
+GCD = c7866e19d6ac563848052fd2b902412f1
+
+A = 122e6328908f0fc79e37fb8eefdf29d6a53d3f853bc2262e93be1f8a7f01fd5afe
+B = 6f091073889e4b8db7224298a0f16f69fc086b02c6e99fc80d09d47112f06c9c85
+GCD = 10548afed577b8440b579204978d16491f
+
+A = -4c0aa42cf6b8447cc4912197098379387c8c01a9d2b5c1ddff3b69738d97956daf2
+B = 1102683a5e494615ff1e8f9d2be7469e87fdff0761ed1eccf3129047fccb86b721
+GCD = 2d46776613c8d811b81e3cea6430d84e87
+
+A = 1e243b2ca937fef9c4eefa3afdd98ba5a22f8b77f62aaee7c725370f1d19e5f7c500
+B = -73efe730ab094b786236b87d169a536630eb59bf6685ba70b969233a7a69810cd00
+GCD = f6edfe5cdfca81f7569196ef35f8238100
+
+A = 4df54eaf7061d5d63dd303a63e1664c93f9fe246d6dea6b3e6f099e2a49974342c50
+B = eb83a62a0bb71d53565ef81cc81186895d48487d386d77afcf19e39dec64044e701
+GCD = ae8facfe0c968dba0ccf354b840110229b
+
+A = 4ae250b0b705bb71a0fb080b2e652dd9499a3d426732d9a8c291ee504b5639d28214
+B = 734fac7be4899726b5056f4b5f20a91b872b259c61e8a04ef5f6d477c6fe4da1346
+GCD = 11359b62c6e2f9657943b13110059e15caea
+
+A = 3196454581c2fbd2fc92724caccb8d6e7503817467f190b337e0dfb1f5f8d48f7e044
+B = 1ee50fc646b544d97ac06fdd775bdeb077d73a205a5b84eb9ef05f9ca2558eb315ae1
+GCD = 8610ab99094112e4e3e860a046c0eae1fa1
+
+A = 18a43021634ee11eb2ed2d4382850eed6d1088fe057b9315d669454778b976bdbbb2e3
+B = -18d4cd58b158b026dd5c7ba2d9fc88655cf2eb8ad12f140b8718841551f6e0c586cea3
+GCD = 69ca61df8b4e86b35e52d6a13bb0a070e73
+
+A = -5a86aea7a57d8832b6c6b7ef935842e12bce7fb730ed253d184859e44e9bd45cd4fee4
+B = -355c8bbe93e163f83152acecce650f9f3941ce888cc0f1d9926cadd3a339fcb4407a84
+GCD = c91b3fde4f08ca8a4173728af195a3b1e7c
+
+A = -107e5de99404463e8ad8fcb8af83c737d1d26d582f01390e3ab1c1a865970d8228b6488
+B = -18c644d5dcb4d10a8e04046ed1610d8fd4de08735a2932094c7aa9ba116e82ba2928e76
+GCD = 3e7d3538deaf5f1a687a8f73ea8b493f58e6
+
+A = -5fe7a36623304438423cc7ccdc85467954f0374fcbe69cc798d4106828e50799ce38ae6
+B = ba95d75a5e8656f500cf09303b4beb88e18d7698a0a81e0faf13525c2902fc959af942
+GCD = 36c38306d6019c1e9676f65080ac9480e782
+
+A = -33971ed94e6443381734a8ed2a0a848ddd60aa23f0681736f91ef62fe8347481a804492
+B = -592ef66e68f6dc5ef53ebb6d647d578a67a383414c7d140bfe091199e93e537c8cfef07
+GCD = 5cd86af3e50f365969224beb8c6dfa2002c3
+
+A = 36105fd008a760c86158ff4b53e6d61876c6c2fc6e139ffb266f7f4ad980e894394fd9c2
+B = 3b9332665a89fb140bf4149f688bf8a27f724e6021c6968231bccf6292d0bf5cf3b1fa
+GCD = a081dc6cdacc79a42514a125234dfc424674e
+
+A = 13f23783adfc6c3813ad227be1423d07b631b5f663ee340cd6567aef95dd870c6c3f0254
+B = -ba37e4b55cd2de86b030c670966a4138982c6dac29d0b41d47fd2701798cf3a1b716357e
+GCD = 193c1005980042f1f075f725ae2093fe0c862
+
+A = 3adf066a954791b5069d393ffb546082eb40eee2b077d9e5cea391bde6aa17225d04038e5
+B = 5ef7078626d97edbbfc4f91a85f99e663aa5d8256c898de89f887e1bb37339200728645
+GCD = 20b592800a2b9e5e4d003e1649c798d29f92f
+
+A = -1915bc6156dbfce1a7f245ecadb10afd6613422f178ff692f85b7c9da81451e0439ff75d18
+B = 1503b6c6ba1a180a4d0e17e2916c4ae422422ed21a08220eeadfb4cee618c29037d58ea5a8
+GCD = 139958287b6aa1db5c226322ed12b6d3dacf78
+
+A = -5959fff3629304a16218ab255c20e02bb03f1e53eb1b320b7a572e02833bb485231c545f73
+B = -300b04f5ceccdbe15c9f2ac6512833e163eeacb2fede463bde4e8bd2f8b4d3d88e2b6ee31a
+GCD = cacbba40d3c6186745fd977a496b8e4cd2a91
+
+A = -1256037784047e3c7dd9aa9456359d74a0c99580fd89bd34675876acd3fbfd4ce870626131e
+B = 529135e12eb3b7a0321dcd3477b4ff3d6395d2341511437dc1e8917b641ea0a94f1fca3556
+GCD = 18ccffed86b3bc1e836aa43447831db8c0efe2
+
+A = 3d2813b3d9b280a4c03d3db3601964bb35adefb6dcd31e2d27a44a6fca17864d325eee26fde
+B = -20f1972ee28233cf4dbadfa5adcd399aee25c8ffe77f1bd969adbc3dc081c033b0ce16511c5
+GCD = 6e664481df3c1f9248e28dd9622424a413b013
+
+A = 1629971f08614cbb42410e785d48063802e2564173e8eac978a8d5f02c2fed19f9af85475fec
+B = -cb20d96f3826a4bdadbd3763b35dc03b6ac938968eccdbde422bb2d348ce62681b663ec998c
+GCD = eb2e218bb74cf554a5fe5ade02e78cfc588f04
+
+A = -24e9f690a775d100d99defb230688efae4ec7652c33b8724d4f96f2bf7c0f8b4193aa63093de
+B = -20c7981ca7932686f71eca5b2800b0986424e7a8ec3f6e1afb52f1bfcc0e95d24f831cc81416
+GCD = bc687ac30265ca7040bcdde1deca1eb5f25096
+
+A = 1d8c9ed1ed1af6f441719718852973096b7272b2814a7bfa6a1363e3f07b1cdb17d7f2c8c503
+B = 109e421661fc6a123fd111ddf55f7d4e4236d339aa2e0b0549229a36ed5ee806f7195c7bc6215
+GCD = 136910e0a9647c85dc04f9cda936f2e438eb3c3
+
+A = 1292f188f0c08bb3563e2116f7eb738ccadfd6f02fcb3cfcb617a7e61ef41e94ba7b9a3ac578
+B = 40a9cfbbe61c779eb4b72e5d09bcd9061e0f77d3c5885be65ab42182c8519d8d0827aec5e5047
+GCD = 2a9bc97d63aaea3501e3f1b0f07cdb45140cd11
+
+A = a1dcbfa2ad666112a17d65b01a1aeb38b3ecd987e154c453a1624625fb9340a076ca375ce9546
+B = 14a91adfe7a64cbca34b0374c6ff11ecde62154fa140e8eda24ed8539ae1fbb47afcafe23dc569
+GCD = 7d2adaa9139a4fc7a6d72c804123ded5d07a5bf
+
+A = 65781b766bbb0660f8c0ec78dd8448f3aefdfa2570fbc362efc2f15a903e7b3c29ba4ae994b69
+B = -41b59c298c47be0a4e0fdefdcf76ce2d5ba585f1d213df0abf4b93d295c1a11c49ae473142c8d0
+GCD = 23ad77f235539f36899547c20ba5f3b31d401467
+
+A = -10c5531121b0f9a5f4280196c2bbe765ea280f61a243a5bbf29bf5f6b9838299337aa30d69bac0e
+B = 10ef8d5bcc77ba1638c8339e5059e6a2fe97d1f2af0499c2c01d2732ba52d3d99ca5a2f8ba47ba
+GCD = 2c87b8fa6c5008b7e149aa9edbfcb0865dc4613a
+
+A = bf96f79b3ff7ffd5b4b02ddf56cdd06d4feb2ba314796cd0ab4855eeb4cc2c6f65df8f0d054590
+B = -3b0cde994a55d36705fb4bb03fe07f8595610a603027854df78e7087124af820f61ad846cbb2840
+GCD = 3089792fa413eecf9209b7fa444b98438f1bd0f0
+
+A = -1ada369eadb8c2e586e175de26042ad83a8f6d8e8f63e3d80b05f9ccb2b7b1d868e415c9e6674842
+B = -12bcc5a9bb5bad252b832ca1fdf4f23404b67df872412aea27dfb2bbd6ba568a6b2ecd560ec85049
+GCD = 77acdaa5c92f9f1bc3d29da07fd8f6657026cd99
+
+A = -53aa92e0c3679565d691f13c8183b155422d13e255583836b6e1d0f04b79c4b168b25cfb19e77a37
+B = -5e6f97724e9a787d14772355af7f8e0a6fff3b83369ec8c244e3d350543262e7c554926c2bf962fd
+GCD = 5c6be609709f5b8370d7fd3cf67a113cd4564915b
+
+A = a753912c8aae0d791e814ead46107c3141e4e35fe1292c8ccb0a5ddfe920e9e4a21f0e70f4b2bc72
+B = -7240241f78f45efc98c74523c53986c6da7229b423f24abfd3512f89f5dc58ad7a55c7ef38b917c
+GCD = 1eca14bfc3e333ca231c3b7e491140d03ea14d012
+
+A = 6cc04a74eed0c7765722e6ca29f8a0b2b2bc7d2e85ac3782a87c727dfabc02d575e640c087778b728
+B = -2cfea03bf556a932491a507f96aa914cbf61c179a2b3820a2a2e49d761c965c5bc815994d1697b610
+GCD = 3790682c4276ab8561bf2ce20fa7ee31aecaf8f38
+
+A = -72253f3e1b362cd773ed9ca5e308a062acbf1357c920d6a1537a157d1b927aea5fc3c45b047350978
+B = 54ab091f9d0e5d493f0414f699bc7e203224cf9125fcc55a0483af606670e74349a402fd1fdf876a0
+GCD = 43e5171c76f68a8c133bd6b03917a5a67fd706538
+
+A = 267c4aee22204ea4cd6feb4a539dd7db4e9ccfe5640aa8a016810b454a9ec3d1bf06c1a63bbeedfde0
+B = -2e08d4a67af7cf209baf33e06c04ddc2a33e27d9856f95ff92a3307ebd69949cb8ac6311b880cd78e0
+GCD = 894b2341dfffa75a6db26e7cf2a06387a22c400060
+
+A = 79952c504e7fa3bd735273cad2c642e27fe06b94fddee39bfaed9d418e9f3574f3886fc825e829b23c
+B = 13513535014a3fe8e9aff67fee1ad10f636029a0e861151c6b16b3b6dc6147a0ece6fa278299cf04d4c
+GCD = 5fae988932ea9cef1b5e2036a686450258ab80dd34
+
+A = -1e41753cd6bdeff8541745b6eed07556fb0850de680909bac89c3df987077512831c955ccc8bf4873a8
+B = -363575fb00b8d17f15ce4750333e2c43b357e21e9ba71f5a56c60f6081c0ecf6c2781e2d2e19ea6d720
+GCD = 23b9ec49be337e1b87122a8928bde60b88db8915d8
+
+A = 1a0c150d7430a23cc835e3d01bc2e6fa5ea64286fb8f884ee7a950d0158ed4e900345e6fe5b27761374a
+B = bf7c788ebeeff2ec198a1837537ea7ea34b3799da04cd2b37b638e0fc4bea92ac1753c25b9be166dbbe
+GCD = 793f9064b11103ed1527c3f6bc48086c981a076dde
+
+A = -6580c63f218b672fe57595745c2ba477064d73be75d6c00278ba4931e6ecf5b127cc6735338080aa71c3
+B = 4b6f7ca1ca7190a3bf11f5ff3b27f926c82b229fb5940af33f92c0e46d8c5aa9e4741f82a86d4608a6bf
+GCD = dd231785828eb794328e10606fb81e12647df8c621
+
+A = -cc9da1be18fffe6c682c0c804740e73981c5010fbdbb01beab5ec2212136bd602c1f971196ea9883641f
+B = c9b4e7c5f764913af6711e6639c72fbeb5444958bd44e7acd422a669e502db8387dbb10f906a3d92a488
+GCD = 12c6593a022fa6cfaeeb3132f985795fc7aec930ea7
+
+A = 21fdcf5c6602f088e5cb695b6ab2a7ea8e97efb274c829a350aa993cc6e10332b5490350cc5b0713094da
+B = 255349cf969e1e927599069d437efda8a3712b0f31fcd8ed15cf49271741f37751a647edc3dd63902dd82
+GCD = ba4e6766f6ed19f796dbf7015be73c868c869e9377e
+
+A = 5c7f3f847b12342b82b987d02804dc9799252893a009240d2e158a9bd2ae289b5dceea9ad19a35c40f580
+B = 11d701fc1407a7acbd5539771211933ce9e78db75dba455528ac5996ff7c7fad1251a9d7f75dae616fb680
+GCD = 6fac7e8051f84c3b5de922c50e33907e0dc66c1aa80
+
+A = -6bba5cd79bb14c94184fcd351e25fc8feedb77a0bf5923b0ebf75988ad7f977353c1814f2f882ccbe250bc
+B = 6e0eee1ec51deafa167cc7446d0cdf8675d903ab3fb0bf1bbbfff9422d69a82194ce353aa142d86d9e5f8f
+GCD = e63779a558e7b41b157d3805c8b6088fcdc82eb3a9f
+
+A = -85f8209a86567a693dedd65c1ded8d5d94ae95336650f545589445062d68c210a235c382f508778bb82d12
+B = -4acfd476665bdfd71864857764b784fdfdce90b639a6e7823711a5ed41e06d09db5101d394ce0c549bb431
+GCD = 19dcc8d7005558e81c57499b933479d21c2ca6902b71
+
+A = -2707873a7747ead5abcc6082118078fa544d500bc472c8a908a4e97f04264f937970820d3145bf1d19fda00
+B = -11c97886cfac841ff3b5a75bfcce84c04e076cbfaf7aba9b09d508905ccff5196da54459aaa686fd219d690
+GCD = 20d26819ec5a915caab7efc5bcfdf191f8bd2efc8550
+
+A = 7054701496a1a89bdad2a8b956563285d400a22ead98bd91b6094146954da0b10ef144a5d85273b9a1b3738
+B = 1a997268c77427fa51abf229a02948819922c98ae2af2c7e809bc7194420229c372844195dc32cc0d62c0594
+GCD = d83cfe3fc146c35424163d8af62b1520400ab595d20c
+
+A = -2ac78840f309d76ad80db5be322b61a05860962180f29d9efeb18b5470f0d8842311773c8ef8462af2938b54
+B = 3c2e89dc73201d467f22eb5a927b1ec47d19c1f42c7d84a8650c8dab7f752f71a6953b9784297afba5fbe846
+GCD = da53c6858be7847f60fd8cdea3fba9568147f73c31fa
+
+A = 75203de87af36826d6f8d721ab8f130b01785628659423de381b3d38b44157e316c0fc762631970cbab8249a
+B = -d136743cc99f5a63dcb4a1378b95aebb6db2355062c00a7c6125112a2b5bb37b030acf2890dba1094ccdb7ce
+GCD = 11a447c9bba42dbb352ae60e7aef11bfe7ccfca4e170a
+
+A = -da62eb5663c46a81e290ab358e1625846ab4919a4a5dbaea1a5758fe929a21eca5db6f400e496a1d3a8068ae
+B = -25ef945b2823e5e653d0026e84c098abf56cc254749b461e50a98b0ef04af41ca1de0ade55d98c34a06c6301e
+GCD = d08cb1b353bc3d41ece972a634c6a0f6256b1fc091732
+
+A = -11ea55d281fbc84982279b0e83eca8a1d843cb8eecfa994b5a4bb0628c4b07f2856e0a55ca85e3b8f5763dcaee
+B = -17d851f04af3405d40be76c6edd205c72472d24bf4b64614148a64b499289831a1c688b04c3b89fc879cc47918
+GCD = 1dc89dc7ce1b2587d4b3723019d4dea3b28c39233f68786
+
+A = -1f9098186e2ac730dacbe0ae273ff5d2e84b1a6937a7865c9edaaba36ed44363fb1e5c6db70bd7167cea004848
+B = 32cc1dd56bbeb6e985fc3f62f4e422fdc6a339154284d546206093d4d8f0ac747966a6173b6e2d98259966edc2
+GCD = cff905834a31af69a90b2bdbfce3c0f5bd2ea2006e33e
+
+A = -539fc42ef8067519bf74f91215812cd3682e895feffe8e97f014cf8e649999c03f59d3818b887bcd95c558a228
+B = 4bcdaca533de4848ae48e17d75c862a71860ed167cbb7aa5f5e319771cb98a1700f22d03c28e7f5b497513dfc8
+GCD = 107915cdc26bb1457a8b65a4c5ef68b1d99d74689ec198
+
+A = 345238bf3bb2eadbe74f169a17c7bff63a098bd21e85d51c88a164741eabc6331edc1cd16cdeffe52feafe7bf7e
+B = -26942c82611e486a842366e54f6c32827592fe833dd859c837e6bb27516e960e1be23d6a8539d7e1d7013d0a6c4
+GCD = 205d424e49857c462b875071eae87a65c99f1d37cf9982
+
+A = -c9e3ddd95cc1e289d7863a179b44a6f372fc0fd317dc9764c42eaba3290f31430550a984cc3a139236254db3f2c
+B = -1aed15c9166cc96d8d2c9f2a0c2067d8c4743154a5bb78442ae8336efd5d96e041ad0d0be45d1238738920c300e8
+GCD = 6be5ae23ef79ec1dcf03948f09f8a775039367584bf35c
+
+A = 145def3ae36900db349ffdde9e636f50f59754da5107dd8bf6abd002c885ccbdd727c64a280bff0f0ec3ce60c81
+B = 5026b9a0c78bfacb35f0ef7a2cf815e920ee74ed08a7d1e13b33ac18b789c319c22c3dd7ac3f229fe3a7ab2d56e9
+GCD = f29c53708d66a5be6fb6f64913e2b651b6d3b3492acd0f
+
+A = -16d38f6d87084a3947af97cf4191143fff27c27c03087660106a3a9812b7a0b24a589fbd894a23c5b4c55e6af741c
+B = 129a5a1815ccce0a9e2464f9252a58152d6aa82920f9bddc4bcb8becf588e6feed67a04f025b7b2395e0812408c18
+GCD = 1c4b69c3607775a7497f928e3b1dbfb1b0b57be1609054c
+
+A = 40770565b641268e97fef5cfe1e91c21c25c80cac020c9d23cc7d1d508c0126bd5eec638b34da5c8b9fd12fb05b10
+B = 443966c18fc15502b80bf86e85638b203244077ee13e70993c16d6e98ace1e50548543b736bd776c14b8618ad5a91
+GCD = 2a0e7ceca9b0bbc68cd38628b50faac8a891d0aaa801235
+
+A = 753b2c3ab29e927f2771e34da31e5db3775d0f65a9f2696f4802782ebeb326d9c5b17030cf960df1791e2468b8b6
+B = -67a434ff28697a4e660290757602b27a4d2b3b4015b8df5e272864c6388bcc34ef54178dbfb3d430e720f8e466d1b
+GCD = 78f2a1e5760a41cf422ab7218b801a23413698f8b5b0397
+
+A = -286b0890de2ae79845db79368b2f5b074d9083b2dfc9ac123d22e63a24dab9ad6690f4bf2e26cb188bda8e5f4a23de
+B = 6d53b6b7cdddf234b0dd117c9c1f9bfd673bb1cda7931d359f8ce1e95600898438f5bd85441839787a5cb907dd5832
+GCD = 1f8c81a01f2316dc1ea1164df161b3b8f712eb7a23ce822a
+
+A = 1a763357284ceb368fe9a8e56087b3fd1c2356508e7cbc061c8885e7a5045610cde0c8b5fdde3d6bb8f4f471a3655c
+B = -198498012c7cbe6ad15acb6d5d8550a266a9a5f1af731af23d0b1387a96c23ba032e47e463224fc7006320c1b5b130e
+GCD = 213247acd8b9f495b766695517558e78a572601bbae637e8a
+
+A = -151c47f5c8c79774eb97af0dfdf9ed318fdb9b4f54d79296594f9ed156d2f581fd658bd2701e79a4052bc4f19355cc6
+B = 499661fdd595dbc4cba807601ec18b2b2d872233813d832c4d400436efce01d26969983f8a0cd7429874a7191678246
+GCD = 2533450171229c32872dc8ee91419b870340acf177f14242
+
+A = -6d343221fa5bf1388c517f7bae0b265bc291b9df8495b186e78e87e6403dadc114202b745cf6864a4a5bf4f5e8377eb
+B = 5384f5bbea4325890b2b01ec2b7efd18b50e46335d73cffb2b68a3d89521013073d5518b5843b3c0e0cf72297466614
+GCD = 4000a2508db78b08c335d937598a3a5f3007bd84e07b0ff7
+
+A = -19d805952563485e813690d907d9fcd9982b41d72a5a8c6655a41fa48d1dd87d7600e75e581d52460b509a461ec7c154
+B = 4b7c0bdafcf3198e86b869b06e94144de2a1b70d4e04f1556061c1c8d481b96e36d42cdbcc2fbec87242e71a464fe9c9
+GCD = e14b04c72b12cd34361585c3c0e9bcaaee5614a87b8bb7ff
+
+A = e8018581f5556724c2d85d5749059e8927adb87d9f791cc218b51b547a9aa9c84c5b1e4f59ff70bac41e0bf7f42eba3e
+B = -171dc792518a7cf6dccb26e119108fbb9f0919d563c4c33d78c8ab0b4ce9b1052e48cdb008b96d7348c551c8592ae8cf4
+GCD = 3bdb23ceae81fb76d167450cd9865448507b0ae053e554d3e
+
+A = 3f4e204f801cdaffb8a609e5cbcfff78c717941071a8e03acbc27b45e9d4aeb5fef050896c85588ec1c8a16f928f479c2
+B = 27c6d008f2c65359b1dc1a4b034ffa4b6913da1385bd50720c2844949c70af6e379f8fbd8d7b1abc0d3b273e7a6cb35dc
+GCD = 831a3c10761e9a5b13e9d2eb93787e3c70e805358bfb28326
+
+A = 1558dd8e52b4a450d135fa59167d6157803cd4da1bd276fb9c8f02c4a95692856ed7f0f61f977764359a0bd31d5bf13f3c
+B = -ac9e54f36ed98bf1197b7de094c22ab01f3d692d0637800cb6524adc8ba0ec7f8f2518349f887653c719a274e10c1b966
+GCD = f62d2cdd7599bd724f005c6bced3a26e95cf9f989e8b1d20a
+
+A = -479eb40ee5130182b94bc01ab422bfcc872db6c900a226f350718586de9f7725f35817454cf25720cfeb4e6abd82788f9a
+B = -5508d4d4434cebd8f52319fe9af311cafe1e8b1ca6ee4ebd33b36803d4da56a30de39633c3fa16341f89d92349e8fbb958
+GCD = 15efd7670626a771144651530f20b87a9d81198920ded46a96
+
+A = 88d0048b5022fb3e0b20b658b748f930c6aa74b8ec07a79730edb69af5625787017f58b6fd671f5644047e4f9c474b00dd
+B = -113a3126fcd16ab8962f30daee939442fbbc0b1d8b36a8b6d4aaf40d08c2fca0e40ec3242d632b756a64defa8df81f20641
+GCD = 54a3d46f93fbc776076987d9bfea8186d1d29589a60c36e9a7
+
+A = -1bdc5b8a3404c09a8bc4a2706acd9e4b6f703931a91d099915c522953b6512409e472852c098f21ffa46ec06072137abb8c
+B = -19cdfd062e60822f25372dfd9f0fe3a8e70900ed1efe2a9ebd2c7e4a3f9a8f73b5ae6a3ddd1a616022ce2c66836fd5d63a4
+GCD = cba2aa900ce0b370807872cef627cb6f3636b5503646162c44
+
+A = 14c8c9e610760694c5c67959786c50241a8f123554d614ef07698e686f84f04349f4244866598c39ffe0b297e4840f0aef4e
+B = 7de0d0971de3c2fefb1b1c5f843353deb1d7ab787cab71ec163422da96922c38c00311e89d59b191a3c009badce1424b7f8
+GCD = dabc3eedf6652d65f442dae1df972eac04b623a60ad52fcf8e
+
+A = 3cd7a3b0de35b8912302d76873868b5e55adc0ed48e18c16adacb9cf32e3abb8473e130f32cf08117a741321aba3c8e209ad
+B = 250923c0ae66e1d3119db8a26fea6bff24fa1da2f8fced77ef215ba118df16407515165c6f4957ae7f37942ae4f05d6af123
+GCD = 92b68549280689712ddf5911a87113a38da98181d025b9d8f5
+
+A = 3db7f3753e722cde98f0f816d7f486fc22a5f438746bfbdfd6281ab58568238555ebc2381a296af11ac9b58b98d6852b365a
+B = -d1e854ab08bc351e69add4668fb373c452aaad30887b70f14ac7c7c159de296b7ecf2faa58a150a220b895b2380ee0936f6c
+GCD = 1d00ead564d6fc8d0fb2ef4a025dfda5bd278487c9cb1a6ae7e
+
+A = -4543d77a51431895adeff40dec120080bd8fa697801b73c5e1034d1310813c16b739cdb51ce6585bafed527d074d58e0a0fbb
+B = -1e48df0e1d9432d3c04c6210dfe3d8d2b9e487023d7bb756dbf1cd097c48c04814bfa247fdbc6466a6ee003a144da56afdfe5
+GCD = 2a931574a93c8cee4695a09cb2f28b99111afbc3bea74c4d135
+
+A = 8dfa4e53421c11daf4ad243529cedeb2c8b4e0ab68f19adc259476760e1c5e4e8a0821e4b52911438c531d12c57bfd636d940
+B = 1f2658c0a8692ab10cf012b8ce9a3ffc251b37aa6587ae3ef747f8d4cc9c04e5eb899b83deb3ceb93c3385572c0aa3d877f780
+GCD = 7ecab00f8151a74d219b067ede81719c25a0c265c31a7137740
+
+A = 3d3767ab5f736946bc457b408c2546deba1657da36a9adcfbaef6fd8caea8f0ebfa7c2f6c5628a453bedbff5abf88a4aa1b6c0
+B = 219b090924b36fa57e2127a3a47563bbb9231c296abc2d5521ff1227fb0ca771e7c053b5e9f571060ca1459affed8951cde14a
+GCD = 8fc8bad098e4118abf8709040cd4d5165e683829e7072da5dde
+
+A = -bf4a5a19a95159d4a8862d1ae61893c714e42632e2f33788000922b4c5d91829f57d08e620b068f19f9b7c315a41be52eccf62
+B = 73e318c13b8803640b258df2cf53f54f0ab0abebe99c5d593c103ab9c0e1e611fe58dc9d8e0496463f4f6e7e3df214aef86d98
+GCD = 18fbb584a28e138a7e129bc954bff84b588044c2842420a50e76
+
+A = 4e34092382eb35e7d263b745069008fd18c446327ad915833179008abb4bd3852d71bb648abde0147c2c2f73c3b1b88e03239e
+B = -65daaf978c59591cb6a53e938d4116850ba8579cc74bba340511ef8713119e939df7e1ebf34d2f0e443e4d5c0e1ebc94c098e13
+GCD = 37ccb42cb4eae376fcdcf4b453550b21a4e4cf4d6dabfc38c0bd
+
+A = -b9011701d0c08322f97a831f57f754247a81d4bcb492baf116fdf418d1ab5ec54c15d962053127d7299c8c52d07a3481e30b301
+B = -8a1863ca08e6a2d9d36247047b26201294c36f8d654124603d1cf294fabae963e032aa10534cda7eac6f3c6b3b62dbec7868791
+GCD = 676bca69959743317359428589273f18287d327f338cbeb32547
+
+A = 16cc4d9182c42a6b6c839cd2ba010454d3c672b3bbdc3b54e0a9fc793d81dc3e87a3eecab5b1703aee5c62c1c2ff6d45c76917de
+B = 5022a9079d66e93e0f6b95dd56ae565f434be101a73de4c55ff2ce11c9449950cee02bf9802170ab582721cb5a9085001f09e322
+GCD = c0c6d7316012448f8a36a5f3d177c832b740ec16d350a8b17796
+
+A = -cfb29432f7b6e8ca57bfa645629187784344a45c0b6ab7ff0ab3a33c7d858986587e89a5f2f6e0cdc640c1892309d0e9cd363fa8
+B = 10a03502dcf683ea8edcfb995087c324834796bf6d8652f23e6f672ee0930bb565c7a8860b78e177264b535782b22653a5f2c5e23
+GCD = 133ca4e1201fa1e489ea670c0d538bb399d14370ce00a5f7d7361
+
+A = -3273fe450c5a4d13a662665e2b65c7bd6b84be94ca194628817cbcb7a320330fa929d31c0fffdc2f4d1cbf851265591ad6d60abf8
+B = -1abe1b39a3833d4ef3b29c7479b11d503550fa450f4a01502e824338ff496160680b73df032d8b203d58469bbc8cf8ba7aebada62
+GCD = 76e87645b6fd46b767711cc9db0792fbf747ff09753bee7b018bace
+
+A = cce4ce303bb56f35b0a4a0b1627ab555e0ad5ab8216df6474edfc53a6528126514ced5a620c3f38b0f4801bae834079235cd4dd50
+B = -119a0798fffee9cc2238563e22f18a7a9f504606e7bd8445fed7ffe5aed3ec0bfe1922ececc7a49da978568f78e555bb5672c2c00e
+GCD = 554f895adc399ccd3d4eff3c92af8c5eebc7d928eaa653262f8a6
+
+A = -f542da8fc3fca1970bd95a0bdfc055a3e4dcf4210c0cb1e924beb544260c5977a209600ec901dfae031442f9a099806a900d3c30
+B = 15f656529a87dc4e8f328c7b9d9cb6a50bafe670d85bf37b69ca5bffb62c4b725d7723af0308959e387c5e3f9047501ec17c2c97ec
+GCD = 159f00110db650fa7022913c4be9be5f8db038d21457df67292cfc
+
+A = -3b914518f964cbc1a2179a9089e822ca5a5a79fda2545adc867674abbd3ed3281ea29c1d235b45123e20aae5b9383d2673f19fc0ba
+B = -12b0fc49faa313c83002782c01179de99b1412b57b8a05b9b9bbe38980945c063e533bea34f7ed0d30a1bf7d857f41e9116f0f84880
+GCD = 928695828532755b9fbc6af84f4a9ff75f8ba08b738be1138c7ad6
+
+A = -d75c84375ca7d27e9d2b01257603c7c87d35a51174143b3b53668fabd0294d645ba637a04f31ad24a5b19152a6785fa6d1e4e11738
+B = -15ced90b5e836536c57add07d7cfa1b09a1969493ea064b0ddeab1a4fcceb3653bd98aeecbcd56cb72661f5147fd311aacb282d120c
+GCD = 61a8fa789fd156be601a41782066210b0cec24dd29691a0a83bed4
+
+A = -159b9cc0a3863dfac0ccaa1cc7903a71976b9a29db39e3449f4a17adff7ed1fb44495f64eecfdc40f6c094acd74962e2add4943fc7e0
+B = 10c855361a721dd9732215c66ca8295cbe1b311807c3501dc7cedebd5159665900accf405403c11f3b76f563e9f00b0285a315f44640
+GCD = 635bb3166f93745eae06a1f0b4837afed6156dc9a03f52f79e4260
+
+A = 1235a6ee13f28e3fc211e06cde2a30e07024af731c59a29cc1366bd5ccdc1419914508097193fe551a1cdacb94cb48f875f685609a30
+B = 4062e13e531b0f0ab84829f6e292105bf786328dffc60e71533f28390b339af23b0c57f3b09cda3074efd9267b242d7e8b20a6ab3880
+GCD = ab35c7749c37afd1bd42ff0ecf0530e6a5b3bcffc17e07d5b9ceb0
+
+A = fbf7dc8e478080932a0a141b2a36ef37f015f5d78ecc0b3f5aba836c8f6f433b092e391fefed68fdbf095808728aa233bd336814ce28
+B = -b329794340178361748277a6cd1138191e5df3ac4e10b1f61faa21574f72db767c3addae3c8b3b36f9e86918e6dba15a308349ff800d
+GCD = 15b7aba51d043e81d4833d00ba7d252866edcd7b9d9574c3113eb95
+
+A = 22443fd9b5638191f9d51e16f0ce72ded78a31c8caf4791fed8847070afeda7bc212d713a794aa6fbb6488bdc7ba2f3e0858faff2ce5e
+B = 5990760a8d54ba970d310d97e21d6b90588741d273010a4b81bcaa463bbc874d4e926768808703735294e8efe4d316abec856db0b0bb4
+GCD = 3a49cd38d520446ee1ea5093efcfb51eabc18eb7aa1ca2a5abc3ca6
+
+A = -3364e480f552b00f701193de1dd82e94a997e1401d22a9bade30e9843997495f9b265d33a305634230220af7c1c35ad3e0bebb6ff3569
+B = 131a85a51e1b41f28aa94fab4b35f1349769b61db239aebca57c9d11246fa1263dc4187406aa23ec9da70316b405d1d6d969ec6f90b630
+GCD = 4ea0e98af23428817648851780f0aa6c607bf473cf9573234ac0d3d
+
+A = 649aa1f5552567c880f06bcb7c794cf3a7b0c625e25be7d7512bc8584efd003e95135086856d57f73a2860687440b6de1acd0c034bcdf6
+B = -19b85bfb1afb006875c1a730fd8df9f51e8bc596aff14b054421f2ff3a7f0aa0efa94961339cf0a4e89890653206058a1a712dd6591faa
+GCD = f01f1de7068e1231f256057dd0c109d8f83ea8731195c1f3087b36a
+
+A = 4019768c40712020adad69bd1b8a4883c500e738175b3a2aa9a47029097cb4bd09b0c0898eb7dc1cc3654e6cb8290deec183044032face
+B = 18555037a6818ff4f4f71994e13eae64df48e3ef8291a3e64490e0a628dbe89ac188307c4c4cd781d08b3bf0600bff6641396a129c0d4c
+GCD = 3215d8c73b8cab3280e2ca0064820689c076e2811c3f3361074076a2
+
+A = 3373f2c105a5eba6339a3b0e3c1eeb6372cb6b1e90fed0b78f9aba3c16cf32134810321697cb5d58ed59251ae813b03a547d42d1fd1158c
+B = -300ffe8f4e814569227ee23ade7fab29db2840920bd9cffafabc818eeda9deab45b0adfd3020f4a93a8ab273a6ff0411943086bd2509926
+GCD = 2ff65fb933e30c2a25997c291004dca0c48df55cdca6f32c2d689f2a
+
+A = -9bc948668558e518d69653e034e5c4c6feb9a16acc99f3332a791faa48c4ca8f39cbbbee34f6320760699bd33554c97c1103bffa752e231
+B = -13745de6c2c9fa492252beb8c83d1969ee623fba21b3d7e3474a2186e30a4f28f5f7075052d8f19694d762c4ff49cb40e6048a2f6b5bf2a9
+GCD = 17552b9afd63a0a99f1a94df9555b6e22e0f96765b97cfe6312aa0f2b
+
+A = 22b99eb84f08f637b84f80f0ff8c937448cfa9b792820beaa5e283a42545590ba8bcf844bbb0279eb4825147bc5166524d259ab642175680
+B = -22f9f0b193d5595765a4b3710beba70589a24a3f56770274b349472a05a48ba02c0adf06ed4b8650c407ca9cb45775cc183448be4539bb00
+GCD = a13927cc5c5450d6aee173ad5032f488af2a3ea22794ea42e6aa4880
+
+A = -10e836ea0c86027feada0d19c73908bd09655285f0a2afe4c6a281f1344ebed130f2a98081e2acd3c5c0e5e6fcc729a52f7c652a5991a00b6
+B = -15d547eb5f30213c6c9ece29048e91e57e4efac3075d474157909ffa1788e427aef39d5e39952fd4ca661605834d0e5d5ab87f2e31931ed46
+GCD = 35fc32ce12e5267a0e367b3395977b1bbb718e9754cd7a9cfa1f496d6
+
+A = -660d3e1e6c4786e81c7bfe2e14672244cc915a949a74e5fd81e836d0b5e761edd88448f410daac75e988951ecc3548e0b9973cff77fffa906
+B = e64fb42cf6be4f3254b6d52cd8fdd9618b75f2c2192c8158698209436de33bb5ea391b6d659a0728b54b06fb3b65bc95d99ea9a1b0f0efe7
+GCD = 3bbc4dc6f3cb8078f97c88418af7954de1e4a30ce1303b70d1c32ee87
+
+A = -3770dbf23da5fabb8a67bbac768ca53bb0b4f9c6567692467c8c52b89f56178d1c5cc25bcb0ec8167cee916ad8e3b890cf1d63650a85044ad
+B = -db61f1213c642a989f83c898e3e4d84ce34fa63ef96f8e719b62772cb8e80fdba8243e9dee3f16e2e7694131e8c25c5419265eea60422e973
+GCD = 6ba743f69174958a228e5260c971854a4a52fc14f83c304c6fbeb789b
+
+A = -2a65659b013d56e26355f01e62201dd90eb55466c03bf96eeec6cfb963982f0cbcb7c3ec9b451af8e297a30b217664d150ce38255bd4ffb277
+B = -2083732e388f22e6a9f605d182d3929718fbe06f754c39d40be378c8d5cd5a1db05524fc31942fbe4bf2fe39d94d81a0174a1eaed220bd5873
+GCD = a9afbd0e33ff2e7b98cf5f05331909f7b718b36f9a4bf31ae59147157
+
+A = 19c2d5d67ea12f2b7f7685463f73c5e62defb7b27aeee0bd02462695e2b408ac624adf5ce716119bc3a0e3e3a8f6ca115bf176f131df3c8b1e6
+B = -5e8713b5f2d2b01bfc102d0e0c25f88236f451961b79fed40d0667fb71f207ff95a3b75044d18f02a93639bafc72358448d46846b879b1c8fa
+GCD = 1a8447fd535c9645aad89ac2b790c0d4231bbeb1641273af9994ddfaa2
+
+A = -2d1da410c37d40aafcf457ab53629f15e8e24aada4a2d78633949286458df5491667fd59427c0d292ed9704fb10efbe5444f178e657a3fea228
+B = -4570f051785a46938b9db3f0f75858fd81c5edab48a7298e9537847314ca56feea13dcac9b71a5a567f9be748c9403b752f6b4cfbe03f56037c
+GCD = 16e6ee8fdf7aa7966069b898fa3a5b8bb9e494a89200a27eb841be4b184
+
+A = f80bf37dd6f5c8941d9c269fe80ff8731ae1fb99f45f4240f868d43c24dc8995f0970847a759906b7906fd176a194cf4d1c2d72288718b489bd
+B = 105a371338d22b530b68c058b9f30e641ff5cf7663fb28a1ddc5e4e7a6a93f092eea8145a7c9a56d5669a3f42265b1c599ab54590ba1da789e37
+GCD = 2bb36aa6242fae1c6d99f9b32d36f723b1fa8a0f8b1c64cc7f77d404a17
+
+A = -544514f654fd9f60dbfe770092045a201aa318647463520f70c9b999dcb719b8bab9282c83bfd4fa9833f3f6ca1a06fbd8436d76c23c3c48f602
+B = 1eb1adc9b8386d872192031ed92a02dacb6c36a1ad965965567eb2fd16917793e1d3d637163cf920fbfba75121920f8d7511de622a0e5e39d84c
+GCD = 16531bf534ce1bf9b23463e225fdb3f28f6bc55d1cb6fe9af4e2e26ea62
+
+A = 8e2fbcd406c57293d51cddbe10fa33a2d2b21edf9bd0434a9bdcc02c6df1e56284d56924d030b8830450d560223dbde9fb7ef98f603588be81e0
+B = da7d00c8504366804185bc00851a5782e0d99aa1a6b9bf104a1b9d4a8386feabc57469f0e4f95d981dc0183adf9db6c7eea339ddab00664df8c8
+GCD = 29ddde28ae7ec95a9b3e07407fdcb0ec597ab03bed65b2784ec3f597dc8
+
+A = 7832045bdeba8a0934ca9f4477b67432f54be4a99227d9d8b41671c228e20369f5851a61bdebc88d8153abb0cee83effcf886eab9e573956e4e16
+B = -214dbfa10b4573d7423f635ec00c68ff20e9f68517aeedee4aa9b57f58499ae55657b0459f3215a070932294faec5d4aa3a0e7d3233ac3df1d8fc
+GCD = 44f7f79135a865fee8d94c540740e886ae6965af8a60ba7f558363cdc4f2
+
+A = 187b92238dfc9c1179fc485e6dd5ea9b3b8154123fb89fd41996e7ae59cfbe36882661438aca8a0d23c20876c231679060ce87e76481ae9c3dfb88
+B = febbccbb01af358555e22b3e4d02d8512763b853a2f15558199a46b450e4943c79c9e3683e2b7e093e7e72b66fdca956c7ab099ad33d82bda788
+GCD = e8844f9edfef1fc4b0a8f9e18e47a520186378fae7a1ba3c25fcfcd52f8
+
+A = -5615c997de67d9b0d8596296ddb43b07af45246b4ce44a346415302faefe7ec5635ba23bb456814f74667f7de106f85b94423519332ca1d43e5971
+B = -45ec83798afa6c1080bb3549e9f867f29dece4ebb09edfc8e2019076c2af4c4657124070c73b51e7df41aada76a06097e19e9a20f5fc6a73bee7d4
+GCD = 7c563eee6cc5a6b259e11206e8df35fb259f280a2de68a594d93660689bb
+
+A = 11efeb97d25f7fab38d0e36b9c2c25a70f48b357bf4710cfa3eccfa7d9324cde6f86f3bdc508cc23b3f8871c32f0b5221af44faf4bd411ab6475fd1
+B = 175161b7c93a71b2844ff34d2b2b3aacdda47a76896c7c132078efb80983f9a12cd08bc98d71e2cba6c6cf06a84908068fa9ac385cf163f3c0679fc
+GCD = 1f91daca6d11233a7361255ee1f84dd89ebb94287a0de01cef08b3ccd4c1
+
+A = 3f6c63a6240c783fdd6f86a0631c4128d49665c25fa03b00c137358e34f0f499db355d1b48422412b40dbdf24a7788d15b1878171fb21e1af58078
+B = e82b3f2ef1b02cc840543e67cc4cc7351c4ca1bbaa933b67d7dbdec924f815b6d73f21906f8e7b05b2614e98105d5c4329fe48a5484a368ada155c
+GCD = 56a85156dc1a49fc180f75f9fb389616be527a590718d3564a188ac7169c
+
+A = -b28676e1888399b7225faab2d0592bf24435dbd794bf82cc182eeec5fd6ee01b83efe0ed379847fc452ba2a9264f0ecaa4ec15e35a6fa6dfd51237c
+B = 58d52aeee3cd6341d247c92d26360b2147eb5bdafb63a757fdc3c03f5de308cb0d9fb35698e8be4ce919ba5107c5dac6b801ec0397e9a26d941a590
+GCD = ea955035fd3fd8c827095523ce66903b3e181eea3a6a6b3ad023e26e776c
+
+A = 4b59bf66db0d8e183e53690097de17b048cefa6f956c9d5abb2b9deff2019375336a618a2bef46e0f5538917de46625b44b209e9471f6efb775340da
+B = -2e1fc6caad945ab20340ab7bd17b26e214bcb852c995c8a01235adc8ded2dddba5cae806b2b2b2a6778d91b68e26629f18ab85fb017f0c6126198612
+GCD = ebd2978a2d5667594854425d50885fa298a37eb75cf59f24ffd88876e0f2
+
+A = 1452cdf9df4cf479480cb771f247a14808685183ac297d87989a4afbeecec255d34b4fdfac188e3a4b3797919f67ee029025902585ea223957220109a
+B = 27f16868b878666e9a154964120f3aa91b70164f2f29c1d21ebcfb0fe15839f940d09d7ab3818505a2149753770b211c22af03dfcdac03e357e4dcc0
+GCD = 325dc596026e347ad85b9d829db3ff3d1646256f20c40301c29632ce9c63e
+
+A = -39379342dc473bc2253a217e53c19a3cc20760c592a1f5a17d8bfb07f043d5c5dd0e6de758cbe2e46cea56ea003ba810d4727f74be628cb4dc9e62f07
+B = -1f8ee483bf73f5ed9d92f35ab4db6af78b12eff98f791e14e6953e3bf60305c6784ea85ae5e6488136060914821a2430520672bfffb1656277ecc4839
+GCD = 6aa576478dd4b6de1396d6d98671416dc691e014eb9c4ea3b82f8156d62ed
+
+A = ce4b367a98405ffdaea338cf4dee7a788ba1e9a4dcd5a7c995b22d13e10122df5c2f2ee898d3071236805458776dd471bf6934cba95abc513e3e0ea16
+B = -7f47799ad47d1b75bb48b27cd1ed09306cbd4f6ec5c7eb8b47efe3437bbb7b37ab39647d4b6d845dd34742bd670298f0d8806351fee2aa5d0f3a5348a
+GCD = 55839b6e1fa2e5d1822c2c6abea819796114c49a8e92afadedff98a40d872
+
+A = -59fb45ebd96d6d0bca0c4f0210e610da3caba27549ed5c50645581ceccf4f90a1434f0fcfaf6b400ae4845a308a5e4fb96e5ebc6edb3f62028753bcc02
+B = -51c1740fc914d2d7d96f0c55c1ee0e7e38da7278192d881a2f90d195de6bdad5e0eeae228b5d9c42258578056d60f23b3e8e7990f2b1a5274f6b82c738
+GCD = c102712779abe5875d87989c42227eaa40ce3a655d2e1b74a861e386ea222
+
+A = -fd07da97787af8e0bd5357b8c1bc9b6500938676dc042c17e49ba6bcb9817adf585d0c27c63258445570a27bbba502159aa1f6d4426eca19437b6c9690
+B = 917e769f5623cf324ad65cb8a485ce6cdd0ecc20c34a648c5ece0e29d2e5bbebbf68eee9c296bf0db0c18fc355492444ff191d67e1a84d4b5011e856b8
+GCD = 16551e44fd07889edd641acaf2f58e41b986294b824c4da081bcf023374368
+
+A = -33230047b31359f319996c2f965e7da69781165ee2e40f7979638667d7e14300bf99587be531dd179f64fae8ad6236ac092ab3fe107333123d192c74ce0
+B = -39d8abd8a8c91ccae3a14f72c8ae7ceb3bb0da758c91218591355ed43ec705396c061313835d894835cde56ff585640abc3679ea7c48a30e5b8c9423dc0
+GCD = 319366f35ea031f160d10e41703842d4b1b2f30f77d7547309776514ba7420
+
+A = 6dd03d375ba683681a68c25983ced10c67f8733776d1673f0bb5c0714e08d73d7f21a43e132c78645635d9460cf7a499638f7c9278a6735578ff6c88aac
+B = -c102fc49e3fb9a65465d1fae91a65a229d69ebc93a0ca55b49fff91479c26dc39fe50fb1ea8796ee96168e480e12436b274141dfdff2a63356a0cead8b4
+GCD = 1992c8faa77e11bc09a5493918409c76be82e2a3996df8e5251aeed41b59284
+
+A = 3d6e324e5b758c2424aa866f50271e36804639a1a884e5c14dd173004c38645f0a1be7913ba7ee169ec2bfe72754e2117322c48f1099f4e24bb5cb85d9d5
+B = -1a705c545c832b21cea0127c7fcd785249198a2cb669a9e468b8b5ff0b377dcdfb79893c15aad2242ceb4e5fed856841a83a6560ea9d538b0734ee6180bf
+GCD = 3e905cae3294496daf38abef3b923bc6f30bd1b82ab8d297e20f15534658183
+
+A = -3e38036911fd781f5a293eedd1514a04b8fe0a6ea813b985e1f6cb9f67219ce4a3cbff8e2bdb1f935df6056ea96c33df84c5778d64854a0213873b7cff3
+B = 89b72141c05df7424e513e91d93b539cee0eff67bf0c05b3a6b54371da0d567dc2393188a9b8e8776626742dcf44a73417a3efb017b2227316a156040c2c
+GCD = 119694be1b1ed11e745519ad3eb9a31e8e43cbe3993694bf3484cd5bb6b5753
+
+A = 25a485b78c4e6e1d32a659bfc1bda781bedd0ea14d4d6eb07209d607fd201a3e4c4c25b7c51c952a7388d9970505d88af57f928bed5514558df57ac1beb98
+B = 4eaf58609eead03954b323a16475992264f38554c53732955cc90ff309ff12457734d27286860baa6db8f46655ee4f74fef2a165c2172cc8af4d9a36ad9bc
+GCD = 3dc164a3226224f1054be7b340dc0ab766f4ffe0599dc3ecd2d166fcc5998a4
+
+A = 1234ee006305884dc928662380b96d0c5160fe382fa352690e2abb7a08e37f3266f798c87e5d9aa8def77455a94eef3eb2782fbb5d0d1fe0d98025905ef18c
+B = -cbafe80eaa3830747013758d2eadef1fffdaa6844bd0e66cc979d9d8f3f1777f3faca83b65dc7d5c8ca6e055272aedf5e13fc9b8d6fa16212daa8d98cbcb4
+GCD = 7eb693c6019e37c403e4d9fe55f9c7ae5cb86bb5b4673d77de737c80a54c7bc
+
+A = -233de6f43625060b93a2d48feb30a546eb14ea5ce90154263d6639f89581a168e73917a82599b9aee74d58fc39ae0c282da264d0c6b57cd7b3d93488cc87c
+B = 16bb621a85eae0d1b0ef408ed92a5bafcc95a2ea7630f6084966fe5ab984db5b1183e5927cb29b23ecab67f6acdd5c66ad2527edbcf24ee533730ec4116bf7
+GCD = 26d23ea1d413dadc4423a65d9ebcb207693b94df7b5b758c24cd96c204549deb
+
+A = 128566a053ab6a683cf3bc0fcd20f44385371b0a2591ae058c8dad8192e75f688416e0b4620bf71ef9c6a43f5b0aa89f6d3b37a9a181a28281e2b07c4ea51b8
+B = bad8822127a17348713c442dc568cc85c1431ed23c49bca02f98c312c77d3a998d2cf45a0b30ccc8b17142af5ad31760ae42a3c059e1a76344da48b4ade410
+GCD = 46a3a91ebec75f0a3970ff30aa247dd643b62914ce4e525d5ca6258edace262a8
+
+A = -25d318f5848f8198babaa2fe7fca0888ba3f936ed2f97075788fce7e154009f97d0a4ea8ea91732d91689135d1b9fa83ed0e57ce2cc123d42d099ecf35e6b
+B = -41f01924b0f94baf431713ca686ea57580f8932dc6081fd8323b5bab63463e4b94f073fc6f6a6f6d41577fa051fb9f5ef77b4be4d4ee1570a1905f5cad8faf6
+GCD = 318895c677212a08ca1ac28d1c9f22cd29e9ba7e4340eefe75aac405fd55e96b
+
+A = cf9432ed1d56c3346452d47cbb36895ec7f98e132273efde7d8ec77b9ae65e912aba83c5b70af267802f2a23892515f2d0cebe11a917f712360c80f5aa7660
+B = -13b4dfc2d72e3421f78dc15ddf1ccc1533709122835c2b7cc8b964c168994479c05b9edf1b16e7fd618fbb18fd29c839da73d38063425085d1fdad07c8a66fc0
+GCD = 61b109e7eda91d2c9918c44af0f8d4e54710380d616c74962833ea2eb03707e0
+
+A = -342f13177b19497d300f7898e5f948dff17909738b3ef859019927fea1beeacb02659dca2c56a1a84d7da6e06b8f42cf02fd7e4d171024ef645a9e149d19ab98
+B = 3a5fece79f3b089d22b3274b334aa1b4eefa4d60c99cd318d0195edcf70b1ee35bb81780fc1f14fb14c5b1a7194fc59aa2573e6f43ab70af616e53e7bd9e5288
+GCD = 19ebc98e11cd27a6d0888f18db92f14d03046879152c8576db9190c0ac424fe48
+
+A = -ed0a6f4ef2b90ab306d67eea63c37df4136578e1df0b585fcbba0f2bf0b7229c7ac0d4fec4dc1ba1c57ef531a3d6aefebf56f2f610517e1bbd09088742af2e36
+B = f637bc9f8830331f6b1035c31f826f39e225931d8d19ae9838ac43223cc82d28e28a21c1d4e75a0c2648ffaf907d3a861af6f74d023ef0b11c6d843caed13d2
+GCD = 1d90604c1d3c66c15ddf83175c87117f94b89c4b96ad06c41baa3600f216914de
+
+A = -55433233cd172f9543d392f6084a5617f1e6498b27b96e33dbf33586704185f406bdb2ac18ecf5c3ee6f107705f0cb7d914176534fe6314be52d8a5258b861140
+B = 2a3af71b481d1c4a4512af6a6767d6d00fdb6d11656607b4f92c84302f31e6287ddfb27b174d6398f140cb5d72ce246cd5927c7e6bc5886e4e3499f22c8bd71c0
+GCD = c343e6fc91736ba7ce0f38137a88bdc4d6c7d9e3e16dbcfd694334aa6308a3240
+
+A = -ed0d31f14127fd4e513b60abe1d66f8c601e81b6833df01eff45c0fcee59729a567baaff29c7ed458a5129c7e3ceb00754d803d14f453a93981003a76eaf2364
+B = -1e70bc5636f0d9467a8b8d2c8d6622d392e2bc68b7a3d952cf6d6e1c12db51417895a74fe5e0121b7f1a17ce88d8edddf3e2a434957d90309b45a2204afe377f8
+GCD = 5b23d4a881b4eb3eabaceac2d70c7c98529c955139a644d92288393d254c3cef4
+
+A = -2ae4a14e32ec59b00ee2a645b23b5d6e3eaf4994a3d7d68b64b46990f1faf955f4104a232e5838149608714d08235af9b3fa3ed8bc9863128cde6add41aa9c0f98
+B = 12ecec8bf404396989fa79ed0dd79ca7be1fa690c45f3d293953983679a999ac65d5b3d772d2fcb5b7eeba295e70625b1ef6191e41de62762b55666b1693c042a3
+GCD = f0ec5d66cc8b6b10d77abb58fadffd6f4f8fbe58c7b3f84d1a8caee0bc4fbbf6d
+
+A = 10f919ffdd8dabf2e18cf94c14634a22ad0be7ad91185ffa6a9983239bb72469a4d52dfe8a278d55ec5d3f11ed57406cfbd4ca2c1ff00e33eb383d673dc4bcc07e2
+B = 1d85eda70abde996add633303e27fd13b0b7d48ff8d28d6b527cf153d51d60614df8376b5dffd26403673fdba09403e63f209b2fc8f56d39021b41fd37d493ee228
+GCD = 3c5c6d6d66aff1221b2fa18f184e66f26240384ecc991efa15ece2c23fc0c12896
+
+A = -5ac1bcf25121420198e74192cf1f9ac8bf2c14faaeb37767e44478b7040cd0f9de82e73e01528f3c9d476cb710df631421fcc9548472a82aa243d627bed7c33020
+B = -33328d1923438e9c87d743b081df5f24bf4eaa734ba5b69bbca0d5692e187227c81d5fe0450316e7bb8c435832a8c059f5ebd9afbfc36f3afe3998aa9f62d2e13ce
+GCD = 52bd829e4f57d204a7a737772c2abf0281aa225e898f00ddb0ea2cc0ccd2d89116
+
+A = -14af0bd5386a411301648f9d01d35b4de32464317ac13357f0ac26758a61972243e3a1c70bff08ed5853d23637f543412d39f1b327f61b8a0289154cf4efa0972442
+B = -107655a4273c37eb86fd7620ec60f8cde6b9480f0a9740d351ba2f910cffc5e5232135ddfdb3c64674a89a2a8412a2c72f54dceda4b2497f6a4e1da926dd4c357c16
+GCD = daa258591cbd5839c8894cf98d54ac67a9bc7333d8580bd2feed09430a11296176
+
+A = -4536875469edab4d446a96b93364a7b8d2c3251f254e84fa7f6a9734a50be79382eb024fe7d98816839015e352f489865f8c71f79eca212002c42e962b4de8e9f716
+B = -c1c7fc8c2109dc038548e2399b1a27e25506b1c4953af2bb65f814ab573968556f129cd2c1ad6902f3d6e585d7f8f20d3ae397ebebb030a1d151874bafb353e13ec
+GCD = d320551e0a6b177819c429ac6397069c86b8589b800f2ec9abb8e430285bc7c18e
+
+A = 3c9464bc9e40ab4557409cc04f4aabc99250560ca5daac03ce228e00ccafdef38133668c8582be2560b22afbae0b97b6a8300dccaeabde0e597d421a9482caab627e
+B = 1bfa56fa31149462a820b07201a08cce25b20dd47eca88743ae9236cd07f0a2d653e3532a89677e63e09225992c6eda1cbd40e79f7b07cf6af1179cbbee5e97f2f0c
+GCD = 1094c869a6360ec6b47c6686a025ddd07203f177a893ef777cb154232a696e869b6
+
+A = -17c57ad12e2e9e5d104bab65a762c40b18dcec99612a48f8095f1d103565f479193cd77fd84163ad34f8b4f05b25d8f16e1c55649dcb107cb6178e6c9427607d18d12
+B = 356cf097e12f11b755ad67c3c19f94e435c491b5e350cc7dcfd7f403c99bdae1326758d055dd5deab136c94e17e1dc7b5a475b94b1b300092ea22a80ce36dab1c7514
+GCD = 3f7cb5248e10cbdfdb6647aba7285153e5bdc9e20fe2126b7eedf6b0672ca8fbeaa
+
+A = -778be9de017539446aa522f00703ecc74580ed6b042dbb416a41c9439dc8f177f9123df209b6923fe527037224d87c71ddc8207ba9545adc5aa37c8e7bf4bb40b1451
+B = -992f46b1cd1dad22fdebf5f6b75b096184557cbec0b7f5fd8d90fa8df5a640dde3716992ed81b1c94f0e5fdabdba05684dd0e5b620e4c59ded9c03fcc0bf3e224a770
+GCD = 633c1ae79ec8d5c650b9bb565d4ad505137227435d3f7dd60af9c59771d5429cb95
+
+A = 1d41554a541fabd0fe241f3435891361328889288db187480550a06879add2a4206cc56604da97c5b913036a63728a5476442f433c13ce42718b7ce21c6c863d50aa44
+B = -3d48e135cd06710e8c69f9d249c6457bc584908caa66db4e9d07436f0add7cf0da0ad67abc797d75a37ac839df02ed321463d8c858d03bc69304f310c733cdc09d3358
+GCD = 11d4e55d0e81a25e81aa387d5f02d22d39462bb99bc8ab7943597bddc58317fd38ec
+
+A = -8455634c818f411dc3eb7bf027ea21569aad9e6552f06e308a4d8e9669bcdfd2feb2f914e1899f61fbaca8fe52aac80f414f7a21424770f1fdd0aca61961dd909579ce
+B = -fe5432f3c771084b065d03d5a5776dfadab0b2a3d1d180a0345feeda0d2fadb69a137dbcdd585ef41ecc805f12b6f9e936c983ea25ffd1c471520e14cfb48f85248191
+GCD = 1858ac7a7aa0b2e0423c0dd5f779223036b88c7234eb6a9148bc3032df4c599b8841
+
+A = 49dce9eadc368753b29478e1423b8638766749719bcc3898fb6ad0d8aee5d809e7f356d4132c821a0acdede2a563b5a9d5fdfd020e7f82fea2d875730250da3fb60b554
+B = 4975494eaa93eda843db7fb888a6f658100bd0287f3adfacbdeace982abd0ca337839693cc8a817259419828b12cf2540e93ca0731b1627e2dd97ae5c48a7b2b0f94488
+GCD = 630540195d9d523ccf24df7ff9b5010472f8aa8780d2c20cc922dcf4218265fc75a4
+
+A = -d29a3206fb085767882b99d6c6deda38573a7e2a0a800841c54d5d243976e4c6a9781c63f990c69b6563e4ca2bda91e3931dd40236eb7c9540c8b653190f6791696b0aa
+B = 591a8555617d8bfd3ae9ea04151ae1aa360c559d1b22e8a44dd95d14e4097e59cc0e83ae87ba67604e23ff6a64d9e1ee8e4aabd66caf439c4df1bd96c3bb7c49c242e3c
+GCD = 41fb8a80626b259f10881e242a7d605940ebdd903129e27b96e9576c07a42a27d5fa
+
+A = 3b22d53ff858ad776082cfd170ba82501a35559e76c93b47163fd711f96887b4d94227018ac32a308b99771dc50a93e1c19ae60bfdd611673051ad4ee6789130b67ea4f8
+B = -11d795c6ec29c5f6a0972d77bb5fde0e58fd873cd77634d993087ab5c4e83a5502ef9a2fd9cbf4eaae8670678e5a525b733de5e4ea8006a4d3deda080e00db946441628e
+GCD = 17eabfe8bdec99b627bbd1637687510c6023d2917406866a97e61734325ec94693f4e
+
+A = 3578809697b7f6299a80d653bce567f0ef848bbb70ce9815c821e3d544f81545759d2c662fb8c1d850c91e699caeeecc1d9d7e78969581e57dcd96bfe82ac3fbf2190de6
+B = -25ba0f690067e86d7202aef904198d02de63e42d02ea7bd188cff4ab5e056d4fe600fdc8c88bc1e8b3d69e5090d63dc6e513f7adafee6f104ac55a0a0e4316b663453330
+GCD = 387ce767fa14f3e1cd3930f25204f24fa21b5745a6bb6cb6a9636e3591032b47ea772
+
+A = -d6549891f812e60828ffc0b250872dc661b1a224ab49e0eacf8c00367bccbde5ba5d00c5234b11acdb69c68d1f2948dbed33b6a5bec4599fe66a895664c2fe857ec851c0
+B = 27d89e909c13696cecb65df364c885b6103116ec31efbaba0665caa55a1259d89e537bd04d13c8a5b51675360e208815770a64c66f1b635442fe5697ba797d6f9e943a1ca
+GCD = 4d226b68b283d0213ef9c111249b2aa21729b144426133d4cb485e94249eb3534ca82
+
+A = 106b5b5ae06abc4ff3e191af2eec18dafcd61170473dd3ee64d7b174995f7b6320244e4c82e198ddd8d483c6a5bb610b118182829fbf86ee78235a509f046012ab1d12ff55
+B = 143de6cfbbe172d7b759b282f28464b17766c0ac051b9c588b4bcd9ad170d462278eb3c6cf7e18168fb4c8be6c306ac8decc47e8768908d2dc9ba8a4822d0cb3ab8ca0fe74
+GCD = 686178e74ec3ab68dee87868674f5c2663f46d8ea0960d94c83eba3d7869786307709
+
+A = -38953f2c424f21b7b1984c7908938a9e685b2c123831fc7e7f595e99897792a038d0e1d94cd295ead895e7b5b69291737b9556692832c3536fa2b813122f2b3c9802428034
+B = -342220cdf13c19a40bb2afe4d0a1fcc4976f7ef8c6afd8a50ad15c4854918ae8dba140a71dac7236b791a384a6cdce134a71673a7318c91098322d9408178640bb01824bc9
+GCD = afdf4acbd31bc165bf194748ed48a76396f0934960385461fc2bd977285d7110d51a9
+
+A = 1605ec15abc0f79cb0d82636376b81cce7d6c4172c63e31421252d86785357bc6d123b188ced34a81d09bdb9aa452c47be44c2084f76f73d8f0b9e089216b22cf1c103bae0a
+B = -7cb17b1127fac1fe36218815cd2eab25c3176afe683fa13dc56b420848aeba8f1b6ef5f57af51a565edec386bfa53cdfb8d32e6e1bc56f14facf613e2fe6575b199848cd40
+GCD = 1a1ef87ee5b0610f6b31143911937f282f21e74b86bd683ebc25472159b34429708c7e
+
+A = -59e89e8f9891b5b7cf139132731b1db0442b52d9493b63069d8603a7e5e741fa8f2adb05541cece22eb18f2c1d85be92724d27025b5aeb123a9e108fde2dcbd42951416f68
+B = 42c27f07252745b4cee71ebe52c82c773660c57aa4a7bcbdab12ddd8977dec8b04be844abd52d1d5040668a09bd49ead568375f5ad66561c296f312aeb1a082d1fe1781787a
+GCD = 72cc170721f48c83e6e9108f7c1e0bc72cd81c8d44d5e63df148af05fdea8c74f0feee
+
+A = d90060ac81e621c82ffa2ce8096a025ee40604c4df2abe2be7fb5938186fcafff01bdc828a58c5a598e9f3dc9ca2ef5541dd5255d75d66f8c775aab103c7a371dec1b8c2c37
+B = -1b629538569d3329094c1ed857de81a530aba3362c786a39b7018163adc2dde5ff823886122c996810fce7724cbb5edbc3223ac30ed832be86dfe4f56228aee4f6af5674f2b
+GCD = 79ed2db901e029b59a15260c826e96a3e6c07faa31590c722848ba713fa67df8eebd55
+
+A = -31def5097f198ae2fb17a75dd5b950988f4ed2b83558f00f27b77eabe98f4cb47ecc3e7cccdf0fa2f05258bd2fd9795668ce55c16bb4308e958b24b6f101105a3e5903b41b4c
+B = 62aff5c234abe59794bf464e5f1d9c702f6e698f62791cf2e8332873914b3e8c70d3df026c9bac7e147014f5383e797797fed2bb8118f938af6fd96efda37bbe8b430475c6a
+GCD = 82276595ddd93168e0f0d92b58c0bd53e06f9034bca205a8a6698e118c56f81a4741e2
+
+A = 10c90516d3a36d85a2a603fcfbb355638b53bc469bf41be8793fe974b0e6271d78f3ef0b8794f064f0eb19afe52513eedc985555f22ea1810a64ff85fdbe89a303005daecd5e7
+B = -15966c787a26c08abca751dde8f86dad911a9700a98183f6660b6573404f5852a5f75c114f6f54552f22e010d1e10e99b7754c8527717b4c87a4b54194ac9d02281dd1f2f34a7
+GCD = 1f68f6e5c87a4feb57ad18c6a9ab9e115531ff878e0ad319c0b1061b5a83ad72af5af3f
+
+A = -456e43c4e3b371b8cd10d2d61ea9b858ac07b85688dd4c409833571433b9fe3b133a62557d30b9e9e2ece32e1a1b6bb615ffc2b310a39d454f1320eb816141662818d3bb385d9
+B = -195e597d6dd3140c1d5eedadc031e4527fef05a9c4f41a71dc656fd9fb856f7d0dd0608eb2449cb885b92040935914e779f44f53b375c659992098ea694e747cb15fba85d66a2
+GCD = 2333fa556572c692d6067ec6b77351b427bc9c0754fc34be2db86417857a23f61b5d9ad
+
+A = b29fe2ff288e931c6b8570a7941325c995a084949879d043d8eac1a57dbb08074595d88e837f4e190148897246e69fcd620fdd8ce7ca89a6afcaca0f7418bcc81eefbd8ba9b65
+B = -e7ba9a1f97460dbbdbe50d9dda776853413a651dfbcd9a0a90df597c4e5db4f1c10e85a79c0a1367fd3fabb217194d14f05acf1970e0a0f607e2d128bea59fd3101a6e276fd51
+GCD = 52ad4c875f1128b0e31ef13793b1bb376d27d0de470603e47ad89ccd08516e5b09a67c3d
+
+A = 18b7e4c476db1ef45552f206638cc6efeb96e06a3612489a2fa975bf7631fa742cb4f548b2c0e996bf08e4d499a2a73197b343f61ebf36298a5be42968170a03f94215b2057c03
+B = -2b1eed2ed3b6198516d72ffcf0174d5daa253fe449c2aa33ececf9e8d7ad403f1bb1cf04b16dc530b759714e27db09d4c261de4ccaab5d83852010d82c36759cb8cfab49065548
+GCD = 9739486102c6c7ae4627cc8767fdfc14625fa4a350ade34345badd58f428c5576585ce5
+
+A = 24d6c9b3c658ed9e3a2953b0777d57a37a6703608e4cb7e2c59f4c45ca287ef569b211dc30f96716cc3457b3694c6301228e2ac0f1149d3f2e403ec6bac420e8751a73c5786a3b
+B = ae7154e6dfd32233b96252bb8d9810a7e14f1f3c1e3db698e62e38b8651bc1b807e056992fdc8cb087d64cabf8b392ebc2456270b2763ee9508fe1bfef615388bb7cffe99f9fc7
+GCD = 9fda5651859f8b14f902014bd9041040735e20cdecd618e6a66ed2f23c807ce7c77d5d59
+
+A = 4e2cf679e064177b4f8efc7248721cfe252f76713fe0159f0ab7ef39b234813828e73db7152f146584b228befde8767e4daf6be8c45bb149e64dd8234ccaf1aea61438afd11ae48
+B = ed5e1783976dec850f3b89b74ac3ddda78c3eb0b641a79f93239055bdefd50e029041672c05ad4937fc32dd51544fa1857e0583081df6b66ded34714f6b1c9ee7d8935e084a610
+GCD = 19ec6b5e5a1c1cfe588bfca746cff330281a16f075bc4c9f1d95861029e62888775d54e48
+
+A = 69264575fc4ada8ef417a44d183203df0b6442292cbcf271f64f4d5a56f4072f6bd50b7ba7980012d4796fb39d5a07439d72770e51e9a3024db91324d3d28ef3546dfab1dbe2c38
+B = 1497ef81ee0e887945357bba106ce890fc2c38625abf569df597cc007c42355b09c0bf3883d3154b361729512ad36190fae3abb6bedd6a35593361e86df5920bbd05d43e234bdc58
+GCD = 3e773f31925e4666610e6b4ead5785dd553087e026d4d7c3cdf9058b0cdfceb517afd6a08
+
+A = 31bba84b6ad2237c6f9d6280b7eedf4b5c6befb50ece2d68450c31bb156d593ca18b590ac1c6a996f2484ba62b550d0b1d563d198b6f0e8ad2ab9a5c314efbee4af0d8316c596d4e
+B = 2dee795da75d4db6484796d216fb2ba8197af0f96c80a36770d276ab8daace5946c98ef4a6fb882fa8dd2617c9d3e5766806fde07d9f7645f5eef49b1d166462075d7e197154b2ea
+GCD = 11dc4efe9ee2878d33758b97bc7aa0438663845ebd0a0fd4b1818a799738f0996a94d14ce
+
+A = -78d4623ca18af4dc1f6afeae38d1aefabb7fe9c84ba39fdb8680f725f7f49f69474f1cf71e5683caaffbdbf66ddb66b466362fda1b2f6b64d66046db74c66e1f7a56903eda04a
+B = 9180b6d5c24de225d67ac5949fb455a3a7504a6580eee29073b5883f367d65b957cb243b16b895e9385e5c2c358d0033183a28e5a5fd0f32c3a2eaaffe2108091c92e459bc503202
+GCD = 2441223b7eb40dc44ba1a8214975a8ca21bc2c4062ba735c16ded0da63a9d32102a42c5e6
+
+A = -403ae86522f35dc86e1dca273050020218973d142aeba3e3750535b10316de44e0c61d52eafb09b2f5532259e0fc82343af8df47ff8808ce9de34fc991dea7fc095e894870897e2e7
+B = 28eb27d3a7694a1ad53027196c2f8c9b26963abf519594d29e8f2d275a63f62a0272fd3b46bc5cb3687b8f2c9b93a32aaf0542b6c9168e3b529813b80ca4ac6f0c65479a29d7afb86
+GCD = 363c1cb90394407209515643a2818d01942903e813a0b73636139f70eadff472e14a4e22f
+
+A = 1bc6517483e57e92a1375f55ec93afe6e0b3294c7aa7f57505adb31a2f40ae373dc35b2c5f0e7c3bc44e0ba2d5c8f76a677731a18eff1552cbefd2897d4c2bf65801040d12f00ec78
+B = -e2bcb37b05602612b3756a880aae851ba32ca2b0043c9da2a1175961a41fd72acfee03aefa6ae78e67dfb210ca8f80dbaa534819e69cdaa411244cf7883f6c42275f2b501d2de9bb0
+GCD = 69eb60f28fe604e4eea78fc93783ac0969b79491a88fd943b66c287abb603d0413df43a08
+
+A = -69399414e0ee4338b76b928f0c52ce6e10f3ab65d06bcec7f0acbd8da301e7e11b2e8b3ee3d3e19542f870b2d91d329fa994ac807dbb43c06a498da0860dea4f3e84c192d5eb3a7c1
+B = 19789e9dce980e04c6d488b244c9183303ff3a0161c3ea01fadcaaf1b42bc2c0c2d4e0dc159e79122f78846b2a3d4070b137c47894bf212ce8988b6cd194bff55d624a3cfcca3aa04c
+GCD = 8929efec553396a106734507b3e27b8b66292b99ef47f0b0a629cedc017161bf2af037357
+
+A = -d3486b411b02d1f803551cca36a013d042a85817b45e1a519e6d790ffe47d1ff70ac54bf64249753f43095daaf72b883b22151c0ce5ec357dc250696723b12e1db2eee8faf492756
+B = -ea5e62401b2c8e77809561599482781e46caf4fe210ac6930ecf06604c8d78b414b360a56e46885ca120e3367e5dd6141f99c82073e8e891efc981d1707bdeeafd51befdca0fc92a5c
+GCD = 1f6ee8a486bf730f08fcb731b914ce4aff1b1ab0f14c3220bd00d8c6eed200849a9a6b892a
+
+A = 3740de51a460599bee0b5bd1ab5f00f21518c5fbed4a944aeeebad8a009386d1f332d015279cc227cd5f6eb0bdc8212ef7ddb41d1de040045355a8055698fd38202df929c5260c35f98
+B = -4a05929c085e16e541172c7e9eb1305b0dc76b7a78d0cea6e1f197820ec95d86cdb3c5b5a618b25f49bca20d4110b8354458bbb5c9c7aad17f49e28642f164b21c8fea27b1a23a0d8a8
+GCD = 21571c25c9007d247a2399cf87685253f187f893e1e56f62051aae733ef94788646899ed2a8
+
+A = -bc00c7e60987956be2f4c0db81741c6b33b1f090fa6d71f5f7ea6c7b824dfbc593b49c4ecd591674f44dce089f88201fdd3fda245d9660a44d0fbc922a7835fb27ffc180dec627b346
+B = -d28463ced2d827daf64ac95089b8fc3ca77faf518caef4184b00ecaed0a8c7565878dc7b7d387d7bfbb05ba26fb490c1d4ec0722495902397154d70a781b260592f250540effdc580b2
+GCD = a6b23c0c78493c4857b545d108b4e4153bdb8ff3818d2e7a9834bce524b2ede915a34880ae
+
+A = 40e97bd2794adaaaf96a77778431c80e985435a91dfaa9557fbceb0d2aa568cbbed449b7fe79b38136b5b31d18458b7482c6ec23f769e449eed2a345ae021b0c34ad395bcca2b528161e
+B = d7ce46d5d72a65971a16cbe0ccb42d1536f4e3e9efc04b4b97c8f768d851ace6736e823883229d12b950a58dccf683f2b4f28b991b087d871c5376c174dc30c3296fe3f05e83bd319e7
+GCD = 8ad57139fe71fc8bd3439740470384139be69b6b621ef861541dea10b368a090f001c1c644d
+
+A = 6cb8b8188dbb02f95a65ce042372a64840c736844854466561c0045b0a1e88695f91ee0900fdce0ea24ea7e26897d39d3a001d182b3385da3af36776c14be39d760e0ae5a8f64af1c7b4
+B = -c31ce19e99f40db83fa040b6ae7e98e23ea6651dd61c0c870e35f500a55e7fece074247278c18c9b90cf22d89d7a75d4d2923c20768cedee77514f65976aa9ad37d75db50a5bc6d2c590
+GCD = 19b168b34ccd1e8e0112bb72937bd092d03feec245f528873859b336fe42b4973e1f5532294
+
+A = -8f8894864cddf9c384e42b49a9723957939b3fe54e58a01ebb1b0dd5f8c008c6bb7fd007cff320b06efe407b2b77aed4fd31958e256148d702223e1358467c2658e9e35f00a040c411a
+B = -725787378b623a53fbdb5663ab22eb7b5ad93786361764dec8eff6062af2c74119fc22571b84e88320833aa20d81b3b123a16307d0ffe82ddae681623e4d3c4b950245266cef4b00dd658
+GCD = 7ca9ba977fd596140f91a1b8178d09282db3e7afb245c67f6cfcd44c5343b13fa2d5a2b16fe
+
+A = -135672c5a4985052d791db7a517fb9491029eb60d508e8c0bd3e58a440c0de93c79707661399ccc1456edb39fff5ef10f2f0dd2beb4b9bb68a9b20bf5681029b2a63f4117fb4b474fdf3f3
+B = -18063bde118d96bcc66c868a6f03ba8693fe4509b5a13763f7e6d4b818fbc87b33a7c61e81057b79aa0f8fe128c2a2e44930f94751e6726734edda325c3b87c046bd8f7fde4d99d37f6f05
+GCD = 66159313e37208c2d8372616fc7d259ff7d79e9f429c7b41eeccf1197f0c0e6c9240ad734d1
+
+A = -90443b2a7fffaeede1f05e7fe350a3b356817b2b8dd887ee1268957c9cfe522543a6d7b84796cb1cf788e8681199d53ad8b611ddbe6605ec6e9730437dda752c2fe8d32340fe874f2a025
+B = 1bcb30b58f1d36e171eaa83f225c94e10d04758fd1d56aeda422cf97ac45a86d30fe0d4328e27db59c8ed619e49a9393214f63939214592994c815074530899416d89f25d624379cd569cd
+GCD = 99ef70d3c6705f8844886bbb12581b26028835e0fc63d9106238b9c278754773b3b12412b9f
+
+A = -338ceb3926a560bb0265fc4dd4f4e31c23e83fa9239960f108fc7a5c677094a79e43a7343701fbfa025cb0057bb0a6e0b4c96ce608eb88a4cd2c8683dc03aee23856404ecb587b87d7a864
+B = 11950e1b6fbce7740da6cb5e1fdbd85ba2f94c18d261b777684097271d03c23cab39924364aaedc22552cce8874b81ab52556f8702a6d1f45f102d3e936d58be7fa12c383abffbbfd98b1f6
+GCD = 17549b5b5b2e3a5956149c2872289c5a43f65005286243c38050c5e3cecf8e0b5f1ecadeaea2
+
+A = 56d7cc72cb3c8e9485ed8aecb28e4e8aadbe2b2442de843be1ed980b7f953bd3c6ab87b13332ad4f0ebfcefb2c4776164c837c5201e903022b3ea1b8f9cd4db69d2c6d478f8e61ac98018e4
+B = -69087128431493852b271b64c2d13f7d50d3596c5956baa739e9825f9d0a81a7d99012b37c93be3e8e9334243d95cf36c4351a99394385923169778c1a188d9ac933353b976e17b19e52c18
+GCD = 6cc0dfbcf02887a74126d85ee735bd56fcdcb7ce1f663403b053f1a0bad7f45cba33062174dc
+
+A = -103763b67d15ee7896b2db89aeabce477e6044f79529d3852a8fb9957e7bb894a7ce7f593c2ef0b9918a61fe9cd199c21c7407968d1dc06b9f2eb4197054a14e8d372469521a586d91ad99ac
+B = -3094b56ff3c61403ac076c43fba6557cf17587a3b72a791e24c45043106b3717cc3f749984d4fdd1e113708d46ad1bf981c7059234533b488af256ad776e39699749a8a7119f4e8140ecace
+GCD = 441c03015ce9539b64fd41f34bfa2079909da3db36aa2325b7ad0ae871090326aae811839c12
+
+A = -788f815e412fa104b7777a33e6d2cfa9e4cb1958a709773a2e26a7547cce23622c59c2e02a3f93e56de3b0afe919e915c90e75c1498f8af2a468f562352bce10636f15ad2120149668826e50
+B = 2e4c1c8d63e691dd07efd9140354f4902460ca0aa0cff7d92f0a63305c84acbdf07a1692984c36027c105036baeb11a2871e9ddb6b68c96f8700d61fcca17401cc0ea1f71cb5e4fd9fc7f1b8
+GCD = fc40e59bc22676ec833cd8f0eba4d773ab37e2b11783b55a28b5ff82f6e3e0246437f8109b08
+
+A = 61fc055c5d2e60711e7bbd4e442b4808bd66a3879b7df2cc8e3cbb9152adfab493fb0e5027ecf80e3b9f1bf11321fc68790687a3215fa5f682dbb395e0d28d089debf364c6a48fc0a53040f0
+B = 10e7df4e9f571537b99b2864e3a4339db511dabb69ce51e145848c8e19901a6bfd66d630e95b35a61498834e6edc971b9248991af9cd631f565f87d404fb39f8f6f8205db5fbb3b1c0c52833a
+GCD = 27b6a7061e47e45c2c9c0d18c641ddcf19e625ca774c32b95f19f1e456671aa32071cd904400a
+
+A = 1345294cc9fbed6be364e3c3df8851525a3f6bf045ad171db5e5013b89316d6ee7cdf7904646a7b1d24a6863cdd8e950ec7921f8bde3cb19a4fe52e255c2dd393e6df85558ccfe0be4fe0d380
+B = -5c9e0c9554026913389e75f4af6e8a558c4dcea26c19259af1d2d3b078d2e13e201dd85e376ed3665968c7e14ee0da002748bcd3a35f90236ec5b03024cb8e5b3c5107a62f6b18ce75ce64e8
+GCD = 281a89a0f3702ca93b9fd0ff34c08ef5e223761f5726ea5a827e952c6b6c316034c73b5f30688
+
+A = -4e380e77843ff046af1827015ddbf0b9b7bced42f76ec51ffb577715796891ae48fefd930770e3296421dd4ea4750405b92fb8ec3e606c24bd0e027af8775eb3333efcef768cd7594ca30d11a
+B = -fd594abb8ae3fc4fcf752f00a37016b10702b1ace227618c2b340ec2086cea3af35998ecb34960979ef0664241e5c770b256f45f5e4c429b6f14870b519c434b320765786993b40014680c4a
+GCD = 191733c89832c80a8bd46d347a791eb92837687275240f3e7a2062c44d1fa03ea61a41cddc7dd26
+
+A = -3f24c254338adfda1572ca89ad02a4d5082065ee4b592d3cf24e65c629b4f69e4a78becf76fda65c30c698f036844858ac120b6776973098fdcb880cd27e61cd9559f33b8119bc6eb691056572
+B = -3c3e5d7f9365f1fbc3bd8a0fa171d4ee063d9549c87a2a8bbae955f47bcd1b827a3018e4cb2f0934fa69ed2dad1a4f1ad418c4debb83ed06ac05093c3d5162bdec27411cc2aab89427190aaaf4
+GCD = 17472f7b577d2b479c4386e989954799d40f2dda8c54f325577a538f56f09d4ce2ca9e53c0056e
+
+A = a55de776b8a4fc34369c6ef0c233417a94a2b2e0cad9a06e6665ef8ad71e812b59890465ea01b4e927f4f4c458012b6a1e7b89a2b6f5ba8716d22547b037c34cdb4471b9d4d20128b3fea7372e
+B = -c9f04eb588b439724755d71e95848bc19d7e8ea74c4435d0df8333e61647bc140411124298ad492251a696c66ca9339ef2b1a468e3890cb2c5658c7d7fb34cf493669da6421511810986814007
+GCD = 1c54b2e93095e58d1cfffa70e44e6b2e74ad05be158d15285a1f1c6c17fa1010751187181b9ce7
+
+A = -1d941aee517603203dff6d2dfd94e780a1e7c512e41ec7f8b352202ed9c9640416a674a503fe4b4142713a1af14b84f788446bd10caa806b113bcdf7f14982eed3bbc488c0c42a3989e60214552
+B = 2797b8fc55a53a57744818b388ed03a25068c59e63bf93ec0ebae9b314da45176b0324f83ba06406b8a52dea524f24af3b143cb63131f00d0953191307747ac0028c913e47db0fc5a44af9fda88
+GCD = 1418144a5fde082869dbcb7f8e9e22260ba6432f7affa18511c0b5d038553eed8e25941e8608702
+
+A = -23e07e809c4c21ed1fe202b63374a9ca956275342c41fa248c9dd0bf5af47bc0cfd05890ce47a62535c2cb9d68a3c3d7c6e9f128577a84772d5f4b86bd5e6c76e37f015274199d5d86bc5a218ea
+B = 9255011de765f911a770063cfcdbcb83e6b15dcac04dd968f202af1ff336d349e6874c62174f485c089141a19372ca5cb5e8dc53fba277585c6b39086026b518ccd1288a79b56356ae6b67abca2
+GCD = 49e0b0dcb47cf633e886acbc61368ee07c12667911482a690a58dec15437dd6a3caff7db87f38e
+
+A = -2e489e90c13b94aa5eb371262c5a06540cb4bca27cf63d09fd97e4519abd2f2fc25faaae09b72a63f7f0330d57d56128a6bf80caf19b39420021312c7f4a62bdee7652e32c988c65274dbded0b56
+B = -2eda51c1af53551bc8e193fed6b71e4fe4519374a41462c69ed028ca3c1f3a6bd72985309c8c3345daab6963fe53c595d4595c8938c30cadb2af8e76620fe03a1a0f798f285bbea9409f81e6ed2a
+GCD = 833ad34d73b58fabd1cda79f8e69985813e7124624f6da07d7f097e9991e30a6577a0f94946572
+
+A = 7098c102905e6d3617ffcdcfb5c0111b6bbf93eb5783c2a2967a104a4ef6f588534a087453e951586698561f808c2a960046790c98d3585d17679d062edc268878fd4be3eb39a9f414d7692a7f62
+B = 7e4fc8be44ae742fb209e5b571eb0df24cc19127c3d3e305e521b4c978173e029bce150cd0d1f4ded031d9529c96fb0a2c74dffe860b9a1a5ca63c1d350ac74c92f2bd29107d1364f689084979cc
+GCD = 1a7544fd32ca4e50f95accfcd4c5fc186148468f9ae08350cff879212e38fffcbd31c417c9f554e
+
+A = -4021a5a13bacf5e5ccc79246591842a5004137a35c628f92fd98ed897ac12437161c6ecfd0a2ded65cbef3c4582d8ef42d7c2770c469c471148ed6f8697ba066d336baa601d4e9364d032ff1c3d7
+B = -fe3b70405122ebe7c0d36b4467267d9c0deb5e20dfd20f7db8bed22f2eb8dacd126bc2cd659809c7a706996afbd2d7b2b6a47c461283207a1600cb5c65a942ae84d0fb97609c8753269fd2e20d9c
+GCD = 2bd4d226bf431f5bfc6b20c29b12ac95a7715dc2586e12741b09ec6fea7a804b7400428425cb081
+
+A = -1e5ad39c2fe0213b64aefcb9013bd016f6ce29c275551cb5c377e062c1acc028735a4e69533e4a181b2fb0832e6ce3f73ab135508407122c011fb0188bad8e53b6140171ecb6731c59007c220e504
+B = 18e26e1413d9e67d3ffc44105934505594dd24d270ada1241b0e87ce5bff863a933cd8651ef2cfb773b08b3ada61c6284185e2ca90a7c24e68acbebc6762b6a59bc4daf10eb2ece7e290e6cdb46ce4
+GCD = 4dec65efd6ed794607e938993be3e565de2467e27e1aa37bafe6b24706819fcc593d7b498d50056c
+
+A = -d9680dcb15ff468668b48e7481752bc62e8457c3b87b015a43385607e4df8da6f4daa9ebbe6f77a4368c573926711d03e4d47573c723b229846770e9fda80b0a9b85ad808df2e0f06c345d1ef5d48
+B = -6b57e3763945ea2bbc1bc6a73de734b2cdf24746f69d1573afe6e2666e3ee9cb2441e758218a293d6ecf8e118c756fd545dc0487dc4efa4bb898edbddcd9ec679bbed32091233aae2b35640b1dcfc8
+GCD = e0dc97a11a3756147ba6dc755d50eda8f840730bbd6a00ef7749f2161311ab6632246fbde9cd8c8
+
+A = 978b52b96d783786f63d70c106da9ceecc8e56a326fbec2233d81897d4a0a691a3080d3167ab28002e23ab0795b50a234022ddbff1b3a4e60771c3304fec2bf39cbc185e1f2c07ca94d75f8964f23a
+B = 647b8a1791c509803c1ff63c3e78b5e52a785e451f212913e0b11a9627269e51ea95d0305aa176fe87d1132a35629e96105239a0f45956e58b6a40c5d8d1f7a3bab1b8a05d79d1e4252b68ac9a92a5
+GCD = 103692e2d6d62a6c452c95d6067daaa56dad15ffa2765d315a25a3f255322645aed4a89e9dafbedd
+
+A = c1f0ed4d9b13f63078250707fac8cc061f4d36d2a0e9010d84a0d894c109cefd3cbb3a50a30591656bf4db45f7c092e2d476bdd90bdfec3dfd6fbc089101ff7ecd788b57b8745ebbb80934362398f8
+B = -5781976db214c35cddcc93f4db0a7e614c7e90abfb21951849d417cbf4c16987af67cffab64c49ee1a730603f2bc90867391a7ea8ac9fee952550a07166e82168b7356b1a91074bc807ff0a06228598
+GCD = 2850a44ca85bf7de4ff3bdc347cef8bdca67b1e6853d0b70775e9906ef3cfd994a7bc8a9f42d90a08
+
+A = -13fd588777d7f39a082fc06387247ee9470028d4cdadd30885a5ba06bd871668dbe721e5524b3e68e2ec9760802c761e8bc75cba874ed1ddaaf894f8717f4e5b4a47f44ec75bee217383babaf449bd54
+B = -1818e3197077ac329b3b4d53cd98bc99fcb9d4db55fb0bd4798b269109efddace54b3b61deb4fee0b6e7a0b685887cbfe1b1b454a35f66e48d992d906bcb4a3a18387ac3cbf427b6f83bdc5db216f90c
+GCD = 639de7eb76ec99a9c4b8adf0127695d9df7516637aaf83ecd126336576ac5e4889b8fad1b79865d4
+
+A = -78960d274f09db4bb879808c9b1fbaa58684b1aa0e9d73269396301bb2e1d2c8d195189ada3c35245660b78307c2e7e76787298e950412025357dda00bcd92f4bbb22d61374a0800fcb66e134e41109b
+B = -42df0fb0c28989372a84c67fe9220fdc7752cabc7f122d00acb33e34397c5c8ca1d1770511eb656ebeb395e1cd75df1b081d68e37017ef8ee1a55a317f40fcfc17250af1e2c8ceaad708d51bfa6eb3c0
+GCD = fc7e31d2c798cddb8bcc46e3fed48726f9637ab7cf71f3dbe5fa011faa776de1728e734c6ff06ab5
+
+A = eadb5e642afe41b70e79397fa90c5bbad4d47b1b0c2f146e5c7f672a71ac03ba06e63b53ceab5d658b2e18475c3cdaf68549321f3f4a1331448ce37af78badd96d201be6474eebebf6ec6852cffb5155
+B = c0576ff2f7ab73ff8c6dbccc99c376a54f88b7079fcdf1769fc03fc3394b5bfdecd694fd954d106a0acc951da806750a0f945d64fb8a3e47e04d4d8813ceeaeb97fc93a9759f2461a4ef83c5bed48c60
+GCD = 12f40d90f061dc0b573379b2645195438691859a12a18f1245a6071b8f3af1d3fd96656ba4558d7c7
+
+A = -226cce11f9e926a3560df7438288bbe56bad54f8c91c8578f292288e586dd315829b5b54d58a621044c43fb34cd999ad12e95eaa457bcd3de9884d5c67ca18c18f1c0f17e9d9aacf5e29a9cb807707dce
+B = 140150b54a03a165580a780f40f6b34b1b0dcc14016f16253483e273d43234f5bdfd4de155b61d5f992b6e72d4f451f6bb8fe4e3e51ae9a7161fcd455633a4fa6613eabcba1338fe721b5dd8dd656146b
+GCD = 2ca53db42218d527d2b256a13f734424180bc120b06a978c4bea6f46e532da58e5cb10d359a311c5f
+
+A = -13f64964fe8710a8b1200b25c7c91a11de2cad78d7004eb47a2f2a83a832c775815051d7e442a0cb9bb0c16722f1450f47b8d6699595d49f626947665cfbeea0e97bd6e378ffc9eb9e6f32edcc562168f0
+B = -14da89e7867acf9673b8b0f9e4982c24945e93f82e02c9f02845b3b7c231291c6bd468d0d9bd18425daf69783cbcd762a054e7b2a07a06cb23f694e4f73bef316c6c9b620c5491d1e6807ad067e0d7b460
+GCD = 1d7a7e2efcafacb56a38f5b83ecf79419382459d23c7f1c601fdd8c89e36c044d0a8a825462c774ad0
+
+A = 32ec6c7cb15c2c24996376dd7f005757845b7882f93700f4b60fb423f6022bfdf7986378a458f7eefbbcd59e83849ae5b7764920516df54092a50e2a8040db9837bfc81aca0922b9709d7358213d94a2a8
+B = 15250ee8d63a714d7a18b67cb7c697c803f29e558ce309c07f29ea81507d5edf626dc8e524bf95a1ab118607bd6829d51319641f6d5544707a7645e17939b5648b72e292710c8b7ab63de32779649b30c8
+GCD = ae15fca840483a5e2680a2bdab52c5551e07e6803e8bd21e69feae3118d98765fac45614bf6844d38
+
+A = -1bc676af24215c24fcf65a803d9ee7db799bb9ea986b490c566ca37e1eb5387ddc6cd627e3a72bb23b9e36ad0e6e37a2b6a6d2aacb7391dfea03d3f2426b6cb868be5e03129f0a6423b0328513b8efe9ce5
+B = -17e1c103ea6ba8d089ca3eadd8aafc7c56d002efee3cfc9442db35429e9f2c25625e381de4fd702598acc914d7ec09f295777432352669dbc47a16fd1464ef0a4b2513437c15f9cce07ba4ef0097cf2d2d1
+GCD = 1f21d55c828a2da90a051ca3899c4dfafa8b7c5af6f45daa6d66d5de4e9571012bfe48327395a9574d
+
+A = -50c5f53a340d0cf0c6a756edb7031dd078f670dde2cd8c2fa7218411b171dc23c99cd26bee86217c8605f5fd719ead965c44ac82d1c3deea21d4594f5d48f8674511663fe2a583b42048e701f250b67d6b5
+B = 50cd63208a37ab931b026b3936e798a0bdf51c4c45dcfaa45131b5879973378be2e73c1e1b8a83aef6abee3ea625c25580745e06ddcf8555fe5640193390f62bbe983d02f0748df876daee08085fe1340
+GCD = 29140f139d73cdd7619651eec490d53274ea6e286ca33965439498ece6c2f4796b89041888fc3d49c9
+
+A = 2a225454569c2a65fddba6a46568c8d54ee9c0054e64f1017e42778d131065f429e95badd768ae2d91388afd42ea895607a46c1a18099e7a519a1994d3836ebe0b3d12756c4010fd4903ebd51e4e510f524
+B = 1996542d731b9d6a43c6ff3ce16222c1d2e9e92237adcde1d9296f9a5afbe60bcca76440aab4f6eeb07000be404c89e04ca886d98d3a6a24ba0d02525ff50e1a417b6c2b7593dd636e97b815e7a3d2eff48
+GCD = 48e8a312834ce64f1222121f2c328a2509ac7deef7cea90ca33a973706879b918ea6e624c0c2922c84
+
+A = -50ce10f99532af3a053fac575332a2bdb6d5eb4bcc2714086dfa16e1454d962d67f42aa246fb1bc87bd7185665dbda684edb7725c88594a35bbc8b9933af1444be0f89af522b3ccf462e3c14d4e3b1b40128
+B = -5148e5df93a268567c8fc1468df7fbe5c176d43c6285beccd951874f6174be2058b5aa1cdc320e73b21ef19f8288462f1f6048ad59c595fd303b047a576cf116898c348bb17b1e081d199c623c4149013288
+GCD = 63e748b95b57641f7b366a1aeb3c0c8227fbced13124e3691508002c5a330d4e3eb918423d958eb1b58
+
+A = -1887ca50d93b18fca7faafe3bc608bb16917d9fed22b6639d652077110e7f87c2078cc4872bb8ff733471c2d59e3405bae30dd708158136c975909b6788615463f693aba2fbb1210f09f960091a26a4fde9f0
+B = -16ed78ecb8cb39d464236898f59c11041fe03498ff62812d89f3a90aeb7e6b8ea964870edb2c8e100d617b6aa60e43047e0540328434c17e6d48e66a6d7733415a65582c09d698d098592ed467764a02bbf68
+GCD = 187027b5115f86bfbd58b347f503668c57b79c2a22fea9473d226cba9d068a49d4410f8a584f5dd7a538
+
+A = 4640ef1fc83020f18f2825fc867ffb1fc867dcfad4c48ab18baf8528cd170b7a0189a47c11595c586a28119322663a800062a111cc74ef0402ac877ed6d81cca6025e70c883dbf4bb79209b96eb70707e131
+B = 2a6fd447d5bd8d2a79b3c5f3b252a33fbe98d03e64abafa267c7f30d95f8514cb1d3376665a6ebc857c93ff908d77dcd808e0047f26679fbc6694c8b499111275ec220b8a64add0be99a732c5d5b260ef52a5
+GCD = 296d18aa966f3a7229fad11f7b51498e1a132cfcc4b0a6b1b126d9b1f1ec951733194a152903e02018f7
+
+A = -f18f6ff8edddb59fa3a869acca127c178db9ab6f7bf77d9216aee839677f650f0f914d989c5b53b0d8fa847a9a25e735e26b9a296357175e11f002fb4bbb187167c480fbf5cc81c83bb3e73847413c0ce2340
+B = -1cdcd72ba6f09cda94d94dd11ce0532ab0a50f4616cf91dc56a0bd4e0c5b3420502d298280b96538c09cfc31102cf63f3ad0ebd11eb7b988578f02e8e38aa949adc3a5b275e6410e65c518e1754e04012a0780
+GCD = 2c3190c99d7c600b14e0b40fe80022b60eee0c4a5cac6076b75dc3f9e05d08262855d639de8d58823f40
+
+A = 43508082b6063dc0949ecfc827e5f1ddfeaf76dc2a30fe78561f626e2b6c5f255f69c0a1ff3a147caa39e13bc7e00c89fa36dd2f2b5d51ae10e0816fe36a4cb52d2c42c9c94c28a41045e8c1dbcc19be43a847
+B = a168064ca805c2a9c40c319a37d3de8ecbceb6fd65b76b07c8f0f6be01ceab562d1b955ff71d970d14eb481d95d47ca15d683d571cbeb879f144dc67f4a5f734819674b865241243ecfa7f7a5684f3f36450d
+GCD = b36f69d05297b4731f358351f454766949673f187412905c5b5c5dd209d486edc28c6ab79d6370df4c1
+
+A = -3ec96f1259941cc385c5fd71f985d286d0e4cbeef00a35e25e8539ff9a342875a7b5de194dde0250db4646cb047735f4d457941c46784874c819ae6d3c9bd233d95f49029f95018eef2d53eebec7a9213b2046
+B = -bb7af1519143cb6cf9dfa8b2b52ef16a206e601d4da82b3ac4760a024e84c42b9d6701a27a214a3f187cfc2019b9706448448409cc154b15920fdd58786cfa8f8e17eb6c38b945b50b224e709b2289f0e55c3e
+GCD = 1457ff49cbea3136c7f2efd1e2ceb09a9105926445056b6f99cc3fb7d21c2e41a484b14a339f67993bc6
+
+A = -1055549b0e3a4fd6ed34016975fcc47624a0fcbaed6aa0f4941ec986f6ab070dd3e3440c16a701112690f1340013009870df312c0b128ec28f36581fbc9e7eafadcb768697c19022cc3cc41f00a4a01efc865c8
+B = -1576f648cbe4a93dce7d937bea3bd736b11a15413203d2fb8446aa66511314b60a481c69372765a82165475bc1c83c696c6d3f63d41702bc49a318f2d6403213f3c4d4b4ce6f7a7a312611f30aaebb5706bdff0
+GCD = 44a26f9cd9e7421a16c13c1c145e430807d61f1b6eca9ed9892e2de522206e0cc29569384579a0e43418
+
+A = -fa26b98cd90e24b492840b0b5a227257f4f68435f27005f1dfcf22c8cb7f745425975a72e70825cea71699ae7b7775363b79eab1e1d683fb08a8fc81918e9d23c19a23d8fa4e6cdb582f1d85594f8961fc6158d
+B = -125c47be35e7658ab5e106d490029e90f6e568884014b8ccd8ec3f4eb9318ad209cd831276f04f4e6207934ec711016f673e59450b1f7e1c40b6eedd6abd844cb23b8ee4ff70a25463e874251344d2fc572a4b76
+GCD = 7114d898bd8f5f5b724be1efa2a9bcf951d7d15f7c38550fec2663a44635b171104e7841c1732cad480f
+
+A = -5aabb4f5524a2bd63cfebef7917efce47c02926a3f16ce7e02f9c8d606042ff26c9a751d11dde633698280469861f10411316c6428be89964a658dcfab6e57f14aac3544a2048d59a10ea89d183a4275e10bd0c4
+B = ca3ca786433c7e257bcee88493d570d49914d4bf81ea7646a4e1654c227dd116b2529ac8f1b36a4dd9aeab9488c5a266fa0bf9ff071231eb56406d2d588554c73aa684c2dc5ce8c02a0bdb3f050c513d9e4e98c
+GCD = c37a5a32e0dff74d5c5d94b89116895602792874c4b58d35d68cd1fcbe5d902f901bbc32d906b4fa469c
+
+A = 1052c535699a8624e26791242d0cc8ccf1242a9aff9a065365e675e3b979dc68f5cc7dc172a7b0f332a5e4fd9f1660561747127ffe9ae0f25cd03e44c665b2de821558a230a51bfa6083d8e0c49fee7d47726ed8c
+B = 91d3b5cfd9585d0933a58076cd2b0d8e628ea9f74508e304d8de2c214dd955d41a993032ce8773b7c41f3d3437b60dd5f3ef5d6daaddc417754e2c3f5aa1f27ebf05ba1a8a4743e7a7d0e12c65505a0ef7d944de
+GCD = 20c78a9cd1bd03685b180c1a990c01c5b80af2e3e6ed35a05f3360f72f52c16dce7c9da43e6389e473556
+
+A = 5350062a99c4277f68e2b28a27679fcd01aab0365ceebfb422f14e2bce264063d66d04760c524b7734f071c1c2e541bb2811b4d984d31d8671263a76d4c7cd0b09c3a2fdb589ab4c861c10e1cfbf9f4f8db34501
+B = -e2a03db9d8870be9d5628007632987ce53daea454436ff2117588a7699c45ee56aa2ebd229a86920ea0a7799df4ecec76d450100f6e994c58ae609561b3d2009b54edd307d0c182bc7a1993beb6c67a64bde7f14
+GCD = 374ad4ce14735dae535224c71520e76c9fc28c77f64c4d8b89361ed158b44ac8925195d4222b047626ee5
+
+A = 153526288c3b2f0a28c1045687e0c62c673bc757f261f8b4c8197ddb6368c855c85477fb8f985bd03356e4b810e37325cdda78c05ba74f2524662f1f4b8067edbc05bd34a413cbb57e299f6f1cc85a2373da8aa4da
+B = -7d401b5afaa9262b9a1024ba14b88062419ae5dc686bed09fe9343a914c65325bf5e2fb06d1e1bf47fbfae01706362621a718c5b3da596bfee1affe5c86d1d406334def3362bc43a0d4321bbac6fecbbc43291e03
+GCD = 5eca5a9ad59f03fe20d7e10577d674244126b47018ecbf53519727469f156fbc405036adbe784c876f3c1
+
+A = e5cef90304dda6dfef5f20c8bd36c36972e9deba4294043302e7b0b6eda8ef8a672385809adde58b08d1812be0fddc3950c1db5c0e93b2e45cc013172896bdc792d4ccfac813f247b9c491925b07adad49c356a2c
+B = -24846228bc1853135fd15536e9d6e921a9e57cf183ce8d1ded7aecf16c9c1ca5cfbf6373fe1f69119d400e145b818e7bf4c04352b255caf8b2f908602500a3dedb1a15735d3ea79d5a569899079df41e54c727aa2d
+GCD = 4cf4419991947df086bec5d78e4a30bd4b1d77e07c86ab2f04d9969933ae2043d410c8d17a65a46626b81f
+
+A = -eba20237df851bd3b286bf07ef825c8328d09352c8cc4dfb7695530ba954435b75a1b823bd4bd9364c230e3222ba256a9c6016b4bfb8b8e15e195643cf2865a2cd208b775559810fd8279490d351c9271d0c2ba550
+B = -1dccc6e01096ac4394001b567cb698be61e7b494fe0a36f891c4d00589c36dacf8b6f26344e6299b3139d5fc3456ded687ca8a858c9b0d70896026bf5f4c9d31412b4fb2a80c915f424371585258aac9d4c24e4fe0
+GCD = 1746dcc748628fa6825ab47d557fd756571fc654f1d15c49683f4493d482862d767567c635f8b7eb5a02d0
+
+A = 2499134aba0c05ec1d72ea6ee96b55b93f916e2f33627f9aaa21c8baa5996b419df15fe46fb5e0a5be7e01924a3733c24e193064de749e5a56f36a8c8f873224995bb81995b99a141a2616348cf1b344602b6e1f731
+B = 80a0850fee1232e0d25a8d1277a337c3ce4a5ede9cc7b5556361997d9d3927540b42d9819db2d2bd1a2ccb89ac5da528d81ed3070100b03a51936f49d36ed901fa141b5dcefd3d60833caede7d73a57bfbd686ad00
+GCD = 29e1f8deb7125f1a3c7a28695f716fd263b940c4a0ee950026348b70dfda56f156e349ba1f9df657766c43
+
+A = ad881d62206c6472e45b29a26ef710df56d60c756c2aba41482c7716ae46495bab2ecc9bf0d9b5e0bfd402357bc77d584b1acea4181733992c7b65ee690a8389204baf833c93eaffd3927d52b54847911057a577fdc
+B = 9a3dcfdc21393152ba6e459ae384d1ff79327f1f4b9a4b01db25184df7604ca5d79fd1ab35eb946883c0bd2814d848dc19813f9d011207b252f6b295edf98a9bb2eac4383abc089a48ca287fb4e4dd61aade05af588
+GCD = 50bd18adedd47d38ad8c02c6fe422af0d36cf4e21c5776db651a6577feb776f78f5a6d3b232af7f6698f6c
+
+A = 29ae2d5e9a31f8fbf46a562f91a630f9ddf142d0d05d0d70d744ce7bd8990949067841ef1282f0c46a6f8f317ada80520807e79704dbe7905615267c0e5a6b4fa3098287a31ee388d753e9e19262286e5c918fc50f80
+B = -1cc7bd417908e40c67b7ca990f68911b409e92bb9daf4f17fa98277caf4f17e4446c5080345ae8f00222a000025e052ed53050f4771f6e3965e53eba1bc2cf4eb28d7f069185b25077573c32412397248cdaf72aaae4
+GCD = 88652a1c65b4d39a683f9ab787e94f49ffb60bf67aa949269956972dccb865a8f05ac9453bc302516c0554
+
+A = -faa87d23dde64ef02fb948ff6b75bc0a4aeaafd9418e71c57505ae5461d4bb8b1aa1b16f0835141b3c393bc9a33b39d4354dbcfb5981ebe5bb25c8f60dc21a6032d8326cf7ba8b790299a301b83ce260de2b72946733
+B = -9dbde9e6faa351a69635d71f19f12a0e6a5141d3733ef3728ec0676625faf252da78badea0b3732ab761392d10e5f4cd43a0068235275dab8bf8e01b3b5c0c3b0ade1104aff4200bf09291dea20028e9b4b501d3ad97
+GCD = 17573323514ca4475885584a2f7b2124a2fd13062f282301575448013abb48f7a87011d806964a310dcf245
+
+A = -40acdbb91f8466c598c7b9b43a5df213c1d7e80b2a02db487064769a34f9043f5728206b5046419b40177075db2a9d22431fe33c1b37927a3df053d3dfe07e1ae054509c271b24322605c3e499bb825b914a1786e9dd0
+B = 1daa2cefe34bc1bf2c432a810a965eaba1713bd16e81073d31c3dda7cd6bdb676535c197fa8a3a1688086a7424592cc04dbe5fa8fbb3f7b5f2b75064693dabe72e5f3bf3ebe92df24db2a5340f1de5fbc337ae314687a
+GCD = 573777efbe5fd053c604d0bee1dd02a58069e89e58859f65684bd0d6e962d9feeda072a381a04eeac1a4f8a
+
+A = -67dbcb0ac09bbbfc3b3ba85d2f267a9b1b575e24f654d3c6d7700e35357c8c235c0a2006a2a57e61f26a27b6e75b4a24b52772061e0e597ca1b6dc9e44190c1349984ce086f6583eb94e18871e53ba67a104d8cd1078
+B = -bd07c143d44daf6594ea11a3daa8d4af63d03fd8f645b3767f695b243b6fb7e2a4bbabbf34645a56ef3d3cd4c8d56552fcc71d5e2ca334b52c6c7e49d0915f143bf56f10049f653ab14c33339aa701353378d25db7060
+GCD = 6ec53d40d021d1e5760287408ef6faf8243c224ffd7549067b11c1e761c4fb593b1f73dfc7357fdf686cea8
+
+A = 3008861931d6034b0d1f03461c2f6a9d0922ca42ee1815434c0ac6342b405c2ae8ef88fab9652d9cf204f3020e6828dfaf0b8786c206c3917c4e0376dc842557dc6f9b04876cf3d69583b8582ebf83ba97f2a49720ed7c
+B = -3ea448c66e456d9a2ef90d0d6de765a03da0d9e35c128773a3ed1411efe9eab8b37c91b77da6faa3403a0623e9b5b3139a1065da51aaa290657d89cd20061deedd92d51bb433d7d058aaa18c9a9b8a00612683e920bfb4
+GCD = 12e919311351b55cbe90f45b82cc2153287b8f5187e73897ff1a9c83f351beb71c7c44d8ce68049a101b443cc
+
+A = -9a4e84a13e7f72d5cdb49a2c0d1b3945887ad4c6bbbb6a43cd706b78b3d4a1de7b9ff563c3016d4539d1a74af1cb5243972fa9402ef4e4f9ab554e4eabb626258cae8d21b928808d0ec8ba3cfead0dee6b646b8e4761ba
+B = d286af35169dab0767bd2fd0f20a237e36af16279ac6406c6be3c854d48650e82381eae198f7a8ab8b2e849e5c17bc6d873ec92da385b3c0001403a80103838cbeac51fa7b4cf8518274c99e71949f8756a7fe37e13aa4
+GCD = 1ed4b6bf7c29917b45a366fb793d183a6137da4b073f5c8e5a5d36110b3a019e283a5c12bcdd192207db9cb6
+
+A = 2d34eb938434803d004893f7d8f97fa63f5505fe34a4468a71d0f8f88e840da48e5592ed10f9a85c7d20faa3f1e9c638292949f4a1f3e912703054c392a52f63f270738c93369fc66843e970965583fa03f85253af6dc86
+B = 3fdbbbdec30a0479b799de6673afa51d5a8192d5196851dc05c0a0374e357be0ad021db135af27d19d10dc727e4a028fdcede48605316768666a1bcc2f2e49341f5cc37ed90e13b05fe40c991a2eac996cf4110ceb73d33
+GCD = 2a9a8bfb81c34433756dab82d6c6963d9a5cf8bdb8af1c550eaf507fd5bf62c07006719eee9d655a4df49cd9
+
+A = 7f71b9df25a07af8fe3111718d4a793c8febebdcff4e6e2061ca6d832f9327fe4cea56bf7cfbebe21c3015eac801054a439eb0b48eb872819ddbca284e67bfe84108812a32e730a4060722f3a0e645619d1890333000c04
+B = 1573a1e80fd037a90033c15e4ff2c48d4209b2959325245f9d18130f3cc68750a1611b326a0f5521f3afa791ae01f109036e1b4c36b269f2d7a2d939bd9f38b53ffb0e9ff5f1fde1810965742869c35fa634ec75724bf258
+GCD = 683b82f8bced2a7bfa3c7e0fcbce2a865c177ddefc11f65d2b3d7cba13198016eb86e46b4cc0580009b17f3c
+
+A = 28a39945ca08bdb6614064cce1b8bf688e87da127c186ee7ecd2d171f39595c746c6b59dd9cab8c666c68a4d042164fece4819d815355e6539ea4814ef9b7d59e2c78fbc5b17975c58cd6c8ca93b7d9921798583c73d4d86
+B = -48503c41963820fefb00b166bd05aae1e280b612707f1984d33312b644635de00213a631b70f48fa790757d44dbd04921007e5cb33f1938700c1c156e7ff71a171ae3ff288a5ac19303a457679d49d7328c92ed95d377944
+GCD = 7475b638e1797d8b274fe02223ea4c6e9bfe6a82a7bbd39d022bf70c62d25d5886349ba733741d75e07a1a8b2
+
+A = 2013deb59bcabb803bf40ae891eb9c5dbe91732c76485b94d407d5df7abbc81981dc5cbe41e818a78725b103ec9a8f0ff5d42b54ddd3fc24d089a2b56fadad2a46d7e32838b7491779ac47451b3a18d08e9f8ca357e90856
+B = -52583cbc2803db21d0f0bfa3615383163e6735d101ec563a7283af6b44d53ef09dbb1c42c5757e3f87171cc639d69ae2d044731c0b0ae0eaed9eb3862e90273ca2a29f56f2bc7b5a82c6f60e6167fc71fed29236d7ccbd2
+GCD = 1dd7211f6a23ebd4475b1a7be1dd527f78fde2321e02193b19622b608449cb7a082f278c04484da08f7af74b6
+
+A = -4964c43b1fe8d88c7eee4201cae0318ececfaa7023a1b0ce3092e6eda98b48905d31d9f9b56a1fb1d274cd1e6e32db82bfdd62d0d7aa45b115070a10de2dce0695e8d011accedd05a3cc33d08a2ed4479218ef9cd931b67
+B = -315b5d4d8f2b4a6496be547ddea160fa0ac8ec9a7169b86d6eebf6bafed78ba14920b324477c714e20bfb4bea0c1e1f696a51afa67268130d402879ebf79cde42ff6de511c7d16beacfdb6de2efbb8aaf2ed14bca8f61ae54
+GCD = 349c9c6c33221af97e24d4c6311cd5a2be1d08822def04b01b2263fe7622112f1f3b8aa2732548cc5f8bb3a9f
+
+A = 84ec2b3e4ddcd5b98cfce99cb7f8b8edbc1b6aa188bccbff82f4cfe3b4271150472bc96b8223269691e51d77e812957c9ca38661f8e30690bbf377cd4e4afe496b58982889859887a64def7e18e11b1ffa9d971d43953bed7
+B = 63b91f5fe04342ddc46cba2e29da50e839fe08453a33a0563bd8ed2ac745035a9366f965b8f36c6dd96338f53058faa5d88f79e48c518e9c0c3daa545a35a41cd87410bd9399741469cd1903d744ed39de9c05d39a0d32bd4
+GCD = 42776770d683835e30e77d3878bbe32124104a354c69b08d64a70e360c992729120d29ac7824b129d9beaae03
+
+A = 26d518965fa9c84e17a0ebcedcdf023c53959117e9e586ed76a3ce7188ed83625fa87f97a0e9927678a3cb02334a23f7bf2b0a34fd079d0e606f918d004bf68ffa6884c69ceef98ae73fed4aeb7f3c840cde199d7cf64bf252
+B = 2176833c6789541d22b3acfca832a67817784b2abb9506f040f4a4fabd4858f00abd6ef1e92706c29a005cc272c2075bcdf310edbc3c01de1103b79b09d4d4f12bf6b969834602300caf903cfde16ac7c5cf449452c4283f79
+GCD = 9a1f9f32707f8675732502401caa5dfc9ee2dc287d5200bfb67db087409f7aeee8bf7c0304f41b544dee12015
+
+A = 886d4d5c35d30068625ea91efdb7cc9b038d854f390b340235e80b0b35f0708068eb0c3c6131b05e9559bf676dcaddeae8749cfb22c327bc583d40593c78703bd1ba03ae2712c037c3bead163e12b704361792bbcf9c1a474
+B = 10282958d59d1efe5eb83feec1131ed0eded9ad3c2ab1cf49984b602c5638befb07063dbb79738ab5a795b46a351d2b2683da0a2b5cab99447e37f60670d85030758508d3bc3c77f26abd25202fc6bd966d27b6738f6a016fb5
+GCD = 1221762eca77809976eea5d077facef333256d774b7a09f23513637ea21ecfbe7deefd08e957e9907ecddacf4b
+
+A = -1f4a3f71cba63fe3820bdbc7bbdff8b162e3de997e90ad939a1540f113d5b1b10d76b356c6d2d626d019eecdd5815bec2005db24d8ee7c3baaff0e344a7ce9c22a207953a67f383b4cdeb2fb7c3e61a438d761e8a8f43d1e48e
+B = -455a937aceb14c0b096d6c30c3432a28959a132f8337f288516557fd07e52d8d962046636b69015714c73518f593b6912d0188baf570a237e03c21f00b2653edc4ae3f884d3f954123cb34f17ad9116dda176a7312560d6ab21
+GCD = 2c6dca939e19f8420d9eeed95dcd81f57d0781bf48f5f4d59b84a218e5e78f037fa60c2d9dd5af709358fec2b7
+
+A = -2a170c2d3d0fdf6f0f661f35c24f4f69acbef0282cb56c3db9c386b36a4d537e1f7bdf560d27104504d3b0d5cad1d1872b4d97b8fab354fc2553dadc6e08b3dd487f172d41e9c23f2d814443de220ffe4db8cc5f93a3f14be48
+B = -ff06d01a83752146521f2079e17c79140b072be9c3d3df0768ea789b21d0d475de40ba426a4a9088c853b728625b5cdce2359f5a6ac1589763ad80a9a071b1c544ef9ce846dafebfbe3b64c85d9e3c5d96de1d8db2563c47fe2
+GCD = 44169f4c6e34f7b29d4a9f9a0f435c1c6af2cdf7302245a29d72be01d081348c8d8644a274be113fa2730e27fa
+
+A = 155f7f4d80e7b032db3ef5fc181b93ae5cd6cb905775cdc2f80c1f7c9b32f662599124e20ac8a13034e76da268d3f13a255ca7f3607c7cab9dcdab3abac5fe28f8a4c37338fe221fa33faf62f75919667255b033f3836e5b3566
+B = -4664952dbf5f3160aabea3e59d9520ff4225de7ff7ff00962fdd7c6bb472d3412012c4dc977f697c64e51cf1f23d9674e33309266ca5c40b5acda3a36e5e70b7fb6b6f3c6b7a642eeca031a9e871bf382d746bd1f30a8e694a68
+GCD = 16844896b753ec5fc14bde8316e9e3eeec0b77ad773f0a5f00dab25751d9fbf2c9a05529781f85ef3bf20318032
+
+A = -b44b0dfb392bd8531489b6518f6ab1859fd8dc1cd2b9c6f324b5d09b6b393a910a0e761cb63d4fed114876dcde32e1e9eb51813f5cc3bd6e9a95481ca5df7d60a90b36ae9f0132cf4ac6a8c6cd8c06c7ed9610bc8d18447be56
+B = -42a0ec1e35639241b56ce518462366497cfeb2d1a484a950f9009b098fa137e46e8447a78b26881f7dd750dc286e09900c58f3cd76099e9518eaca2d947b312bb2bd250a2126463fdd9b9f2a495be66f25c99b97a1808ca23148
+GCD = 4000283af135a1ad1333d52e2f863dc8cc0247452c461c6c5755eaf93d4b4a12cdebab8976277261e516eeddb3a
+
+A = -3e9cd5ed9f5f5769d0cd65a3f1c01cb0b306ca607865ab362f6ce3cf05d460d320c3e9cbc7ca1fcd5807c98cfd655632944f01c78a9a29f75e9df0b772e4f1c712c572c89e681de93579ee5fd581e311df5ac6506fca3cb021110
+B = 2b7d630e5ef48c414eac856165c1226efe6d6a81be6969828e3e44f4f0e9377cd7acb722b3d71d7130ef9308bd73f592d5e7f4db445d497da50fb0500e3e270348921ed165bc256044b0ff95ba4aab783afbbda491cac1939c0c0
+GCD = 18524fec60bad39231e2e5511832c3d1fc9806e03389ef6c21a3462d022158b237e1f8de5d1d82f1d65af832a3d0
+
+A = -17f7c0f63c5f37371e0b4d23bb67e968a55c65daaece334708b401267ec4ef57c0d4d694ae177105f7484172071232dbca01f18c4c905b4f16a2e5e1deea79f57326f3f39b123ca06ec936c22f1d9f190f82a3de0ea509c5e5a10f
+B = 12b8f917f1d967cb5aa9e8728e17ca088a33e6868354352ab2c6ac0a7f05d3657e134bc304deb3ab2fe2151a5cccd61a8c9d315b6da7ff142c268fdaab4fad5c91dfb67db6b1514c4b97b1a1fe82fce4d7fa1b7d630d4e2497a0fb
+GCD = 60adea3c9e15f93f75231a866f4114020c8f961f87accf77f540b69b886c3f51f3f001ecd243081e7938a058b31
+
+A = -4c2b0d32e1c36e6296aa8dbf925e80f989a3974b46ed648bec4fabcf494c14985e4edc0f0a2fb014a2d7e48e1587ecc51ed09b4d6c98a95385b94d8a4051e5adbff87dd9e55c663c0d4a0dce0c29db83516cf6f5b20dd483a44606
+B = -4f9db15e7e8f83254b3b16ef64f49525ebf9989b769504c3bc77b6f019435e387a6685dd4823f27ae486dbff3396f4ef35d8c9debf442d53f6d0ed6670e4b199ce97b8474a88fb878021876dc89beb3d4e101f0353024b89da2724
+GCD = 1b950d9d476d485d68bc2efb1859af9d3b8bd5a18b8bfd7da170a0b6400a872394e25777f338a6bf7bd1cce7659a
+
+A = -13ca7f56583fcd0f45f1d1b841c37c414dcae69f8614bbc637ac4ad2b4501531f436961b7e880790ea4bb7f331ad2db31e2524793fac7fbbc9446df1e3cee4d6c6364486afb88be29da297f969709750ba88c3c40ac3c68edbe81ae
+B = -12bb7fa8d6daf398f7fd13ab9895e94aa3e8b91a81f897cab24b6aa0553cf2db296fa3bd070fbccbee9916199398b7d4832deb10912498ef4b82bbd9ecd5cf89830990915091ddecfe9de6d769d3b6391293d40690917f880b74e9c
+GCD = 2ab6b90336298392e19bb820144c441f4b7f2feb6dde96a70e5e7e87ad3f4d9dd1306e35184d2e125174fa601212
+
+A = 1be5400b05c3b6c129bc1ff6554913323fe74cba06107c289618cbc07e0984dbd3ede9b4e43fbf00bb0246a9ae480fe46cbb0a71aaceec8faf375391d86628fbc33ab99ff36b5a6dc0df6aa5eda6325a8f52c42bd3aa52373cdd5f4
+B = 7086d1a975093b0ab5a64e9ec40d2f76e29ea125a1ae48c600ce178bc35701843e03de36a9395b2779fe57fb85a543e970edd58cadf4f6e92c9033bca9dac06d64d62f3471027e65b05b1c119649334877ba9fc4e8ea765a3eb542
+GCD = 37fcec1df7348c917c6beea434bcd45b2a1ce061c6c99aef39b5bb430981ceb91dfe0608fe35f2cc2b25c3370b22
+
+A = f8f353b051b550ecec2c0fdca09ffda96dc67b9c8188828d5d950889176eede1caf23bb9279124ed65faa874083a989331d4609385a76094f81e2fe0c3e9633f7e43d7da30f5b566a153c6edf24718903c19348424e8c426247de12
+B = -359189b51aab04c7511d9208656692959f1f995baa51ab1ebcd1468bb50f20df29a9cd7360feb134d157054fca271814a89e79d76166a4a84870c150360005766dc619ea33332b850801a94177c035b9cd989206700231da3c1859c
+GCD = b30520c708db9fe43a9c520140ae61ca8dc6b586333f44e4004eef28ac51d7aa93415b9136ce194b75e4bbe5d7aa
+
+A = a71d0f5f83bcae29b0949ac67671783383dd032ceeb501eba447b6a1382a13e1741e5117c7de63c66b132b035d82df3ed9f03a418feeb8fe073343690b4ba655c6fa8ec5611dca510c056554327dc1307456503ec1d33bdd02a5b42
+B = -6244dd7b23f1e33c407c89c39f0af31e8577a5ad50ac44735521073789faa780c7fb1e644890556d118170bdb463a4c739154fc43647b693a96ed4231f57067b611010fc6a028b9f88704a167957622c6a5204166709adb1517f59c3
+GCD = e42f2bda40c5b833e518360460382598ba653abd85bd2cebb08cbd0f8d9690a5f403bcc3ceba6255e846f735b4cf
+
+A = 1062ca1b121f45fb4ea09ec5062d30174b043fa14b04ead0dc346bd81e60eae87c6a4a416f16aedb13845a91db112fa7351b29f1a979e423e79cf3fa9eeee32baf19b73714242f84fed3dbfe2708d9b2c876368fa20f09f257ebf62f6
+B = ecd73a16ae56f347e865287412c1722c6bf1d691ab26c7ac73c60fd483817015e325b5c18d1f370ef635ae39b0f504c5172d7bc61628fecb14726b4af5da6de0385cd9a53697382b786f08c51e1e3f161053750dda0338184a24926f
+GCD = 1107cf4f5018fed248083ec145d6959d2af23e77d0fd4a1d335eafd2452ef9f2e11da5dae2e4cfb5cba7c2edd8ad3
+
+A = 28e9c26e11c84f19e26c9f72cc40b86b4d612bb5bbc8677de54d48d7bc35535c3ee84a8369acbcfe641f85aabf8a539c6a0321cdaf2d104871a9a03e02cc5ac0c72c3ac5e22251ed33d1f76937a6540d3340f9787a1a44ce3f414f66b
+B = -30b28f961c2e96c7547973a278d06fce9286e0179a8e047193a9214d3ba27028a483a398698d40edc24bb75cd1bdefc1e57a0e7e15a34429b85d3914085c83d5b9dfa480840a50ac89977aa93c809d0bd8913a2f2b083172f978d9955
+GCD = a8cb1d6827f9bc60d2e7b0532a430bf25d809ee1931aa6e767cd1b5a8056254dbcb54c8f29bb840356b5330576cf1
+
+A = -bec4af5bff53a35e8276575aa346b3cd54344fc4e141924c0fcc3714d6dfef3766b39ebfc2327e55c47648d2e335aebd02ae8cefe3c701bb55467530a99abafaf3a7cbc2ff3e5e2693553a01a3bfb3030de9994178f2191d9f26a8a14
+B = 3b1fc9bf2c4faa4573df2ea913e2277dd2101436e1a7a74621aabed4c87a91456c9e52b10af2617f1f68b2ae3ede795c07af61ae2c8241ba7d75e01560bd691d24af95ad1fec89e80fd81abb938b150cfece785d6f76cbd9249f8bd50
+GCD = 1e78ddad371ab2e05f81f5d98ff197d7f886c0371b0d113ccb73abe2c9b18dd3a08f60134de5a638b08791803132cc
+
+A = -187eb572a45622faf1906e52bc66d24451ed8c16132bd470c0527ac5c26ef3e50241fe2e0b8c162cf187e3351e6ac562e1ae2dd0a4bceaa2ce6dc58b11e601b91d33a098fad4a6b96dc7be83dbc90b60a42cf853f4fb0f500af2efe4d2
+B = -2de57c16b9d8c46bade89d1730a1e332d731c47280a1bc219668f1579dbb07bf0cde72d559da4dcc28c24177740fbc21efa6703c9e277a4fe818f39eaac75c2450724f7db9930b1d460a7f15fcdc32b1ba6f692277d3305cf3a07e663f
+GCD = 86172e2a3a6a3c5bcfdaae14f224ef060f19d9f4b2d51167a1e8c23bfeb3cacbff55364fc769ef4cfe64b27b2bc57
+
+A = -4b9a74706f873c0e7dc05d45f1e8f7dafa27e121ff954bb9aaf104ed2b4b673765f8008ede0d509e4a337bd6cfe41d8c88d891f608b5441bf9f0b19af45dfe7a6a7030e8a17c24d16fa58dca6567f79ec34b8a7c25f3e66b723143cc0
+B = 43ac404d0f16e69edea0d924746771f35da74ddc85a9cbbb770662753eac2c11555037edce8e510623ae561a638912ce0d7d968a8f6938ee20e730b156311cb5f906d0f2cd080815c15fe6789b0bbee3db720418f2e85c2ca373806a9
+GCD = 1efdf68ee94dff7ece65330df32eea3a737a724299519277ab2b73f3fed7200fe8705d29ddece03f0064037020fa7f
+
+A = bc6595be248d4ed48eb911e7d6eae643f13a076c34aecd35ab4b19f17401a117bdce2a4f77b5a4b70f9d8fc4e608835d8d82ad5cad6921d01a3f9f618a8c84105f46f2f344ab4dac2a38deef97dadae519c1e3202de9100dee6a153f8e
+B = 205615896afe769ba625d60c5a7de672d00776c685f7d284f5d3c828d231017f38fdc72d7492cfbfb8022b07251849b4320c3814850368a9a1e57d8ea6751cc08db1c8724fdb3d325e3d4179ec49767f36e8aefae4a0db43c551a76ea52
+GCD = 69a779bec79fc59f00a03703bcdef4a9ec6bf77846d03530cf786eb5d6ac78b67d99600e8b61ec2d3d9c65551699ae
+
+A = f07939abace11b47c69e9fa21dd4b024a6299d6d960e5b833a3dc61f1f8c6020ec9c091043162c38575002f4fe44b9215ed98d67bf5e94552de076b7ae28a00812b1f3c0c4dde10c25a0c7f3c4ee1cd12838e454641457d07122fd49a97
+B = -56df35868ee92fd91fa70a89efee7ef71855488f4d6e78b6d298be2572f5a9747213216a41a7cecf061699c6ed106aa713188115fb0b316d91e147dd4cc1da523e1730c49eee73926a8f9f417be8cafffcd7db50f8a01e09a6dd0fdf0dd
+GCD = 4fd633cbc3e9d190a659c7041e858627765ac3fc9b289afea7a7f0d3d5e0a64a1039e24105e8f385692db1880c920d
+
+A = -48c6a705b62ad1fde4bc878db156bb933698a60271f685cf8aebc0758251294a735e18500a125222a4c94bdb29d9ecbfc7c9035cabaeca2021cefb67e8116574105309467475acefe2ca0907dc74c9638383cfdba9a96cfadadbeb75a86c
+B = -2e53ec4fdbf83e5a143950c07006ac6fb152f7d99ccaa884ba3e1397f7cfa346d22c8e09964fde376ed601c0b8845b338c595fbf08fe9d082ec409f43ea15d48a35a347959c30e7f08017f3ddab3a581953b2911927f5f2897fe8cc5f62c
+GCD = a959e0499771c520193a6ac4693ed620a1ba165efa7ba4b29b7e5f7818c2f4abc0ed1dbf04fa9c4463ab73af6e2cd4
+
+A = c2f608d99d0e913b61cc29633b0a9a65276e9d4fbb56e7e1cda792765a8d85464a051c176505cfcfdec9015860b0a0768a6d2f4ffeab5ad0cfad0a071851fa0099ad2c9dec0d52295ec4bff716575edc970f2fc10ce665b2550b9107b840
+B = 1aef2f8a8ed8954350d54082697191f638ab098a18fc5aa135183b75430c94184072c1220484db75c8215c7ed0706867f0a00fb1e2238aaa0abcda47df1f04c1ded288ce15a09e4ab8f734bb832b16b1c3ffeda26a5b6c86fa069d8936000
+GCD = 199d02e025adcc86b5f7ea830740859380c491850304c066fb9ace057b59d3a01d41af7e84d503633f66e6e36116d040
+
+A = -70429b7d2ea5eeca53292ffa80d74d73dc08ce01c1e1369fdd683f14ee1f507f6f6c2b7280e85fd5e5d84cf50a5fea1de52c7bc95fce48185a47d43255d94e519e8736f96b5563c976478f1894e690f43551ecb477bfe6ccd0e5ad9977a0
+B = 14904d2a8392a13efe95f3620be8bae324f485f29806e605b4a22d3995a826593af291b34909fa50a227635948d319f26ac21ad1c81a30fe880a6c9e60ecae35e323e48a18518522922f881cb7417777020753d07d6d60116ba3f7a561000
+GCD = 2267912b74db239e19d88ff4ca8eeb73b860e5cbb2631c1df16c3d6ff12b1d6f55c2bd693bedfb8f4ad36b324adbea0
+
+A = 7776100db14f0cf58ce1afb8657b72d8f0752db5cc04f50faf2ebf110d93c5744a24044aa8dbc32a0b83a6e90539be8f2a6a7cad132d5033dfdb054d3f7154b5f6050e6673ae99b0f1d801b9f75ba2189402d84b3c11b0d112ec2d667b8c0
+B = 704f03362ac1fe7ef4477f7ad6005f6b718dae79a386508164bf52d47036fbbad0efecefc4328aab3c306ff9bfb44210f246e084eef76dee97b7027379e771e4fb861fb838eacd2c23a2705b877e337defa5d57492a8ab2590ee98b3c6800
+GCD = 4cb8921bb1ed9f93e7d60268cdb1f6bcad4dc4930bbc78867119313164d35a42f8ef169d571402758494240f08a6c40
+
+A = 2f490a067678ba320d0c3763601f86df9cc3cd54cb3c80f1cee219a32a9987ad930a4283ff03d4171c89acfb6b90b8c70cb82013181779e631f703d75f822670f1b74fc114721334adecaa06d9453773273dd162403f1ae4aa2cbe93e65c51
+B = -21ab4336c50a8fe382ca29993192af58491a81120b8ae986c38e0454e55c6ea30d02135ff4d82319a7dbb9b2e9d113fc0e7e3449c9920f6544b35ce52f3216625d4090954c30703df50fb38e0e75cb4ecd5ef2e17ced3c27e4e68271b8c73b
+GCD = 9cfbdd01f4970c4ba2590e78e2161e64e0ff7947ca86c0b897d92ff8f6b4de5570df504bda6cfa506df523eb66be3f7
+
+A = -611c3b6ba26e07b3d37bf994a94ab0abc69a15c9f1b649bb8ed5a4ba4a6c6c686ec72e5664f503d6fe20b10539c8ace71e63904053909ebe045ec84ba639b2228965127ca022a5c6c75815433cb05c2a0e29f05eda3cbc81cdb59fe09fb215
+B = 10fb4231a147ab1bc2a5e82e097b5c62b599420dd1e803e9c09c284e1cb3df653904e1c791a0ec19c6aee376f3297fb6e53e02c0ff85ebd0c63962dd60ed8abae21ab02d8357279dfc7968a99939f12e15bf558ec41a9e4cd12650cebb9b124
+GCD = 18c888131cb1ffc06fe9b0e805215c8f30c72135342102493e8242096698623ea5a5569eea2565b87d33c3b5270fd7bf
+
+A = 65b9557e5e30d73f22b7974963507687bba687e1c3d5f044e2c41376b3c5999a93262822a052d093c680cdc2a55367e17b40030f54ab63f101dd5a45797c4e10d7277f3afe0363356c30046fb1d6ffe68b52e160474b1b7a9d19d354fd1ffec
+B = 5b6930e5790e299e721353aed2d7dde3d729851568ce017504e162b4955cb7e0072bbc68d83e79f136120a0598fc3394abd7518a340f03697bb0498d047bbc4361f37928ec294033789c31859ec7fb15c0dff482c3097cec2ceaf883da13970
+GCD = eaee4f9859aca2f53925dc6b1212591de71a573b07fb4b92165b803c173cb9b0577776b24794054c13dd327949bdb2bc
+
+A = -af52d8577227f64c4dd76c35ad05c2b6828c59a122794387c20dc9216f6fe5ea9cf9e7fc4ca8e47e2be52e8e8e245b3998f7e03f22cc6267270d386bf4823c8c13468bbcb0ddad017ea993368bde3988d7ad2f5de1590d9870f481b13673cc
+B = 9d2d9651b7847f58a7693d41224c6d8360d28e115f8e9ce8f3db541f460f97acf9e1f0f2e72e5956e8b3474e380ee19e58dc528e105547b7edd53fd7ca23992d3085ee1e232ae12570453ef3f0741ba3838a4d0fb5d5a8c249b8de8601c0be6
+GCD = 7817883ee1cde88f0eeb1dd45de78eaace94a27b51d82889e6ada013a5620b2d3a8cd864e34531cb295a3b3fb8791a1e
+
+A = -2d1639db545b9ed6cce5ac24bd9acac4e3eb8639d6a98cf7a6010dd760caafee22f45f76fafcd33ab906e10f10eea3182279d6219b47768407283fb881381b669e4937caea374d5fed66d22ed91024b4cf57907db816566154cbb8e73190d542
+B = -32e17c2e843f232a911e3a40ec94e5ee3a0af39f179a15c1ab05924a62ae4a4986e0bdee7c80782fa61f8bcdf34f43c69f6c78d94b59200129e1fda6b5758e5a43a3ce6ad1f36f2bfbce2ece7d4f6d1ced2dfe0b6d09422634515fc6729b2924
+GCD = 2a9daaee9085ba42c19f6a22ccd4bbf2844dae3c189cb10abaad899083855a89fd5f03e0fc9a29c173c171ea069e52ec2
+
+A = -c1c479bfb428d27fb8d6954d614d47f49527cca253427601c6155f6761051d19a1162cffe12f7ce789c142b29250f6a1adb8342d7822eefdf972385abaef7a9c902c020a311a0e3076f3c3cf9dd262af19760783cc27f61369a5032e59a3db4
+B = -14b799ce82150daf38e7287f45582aed9fcaa7fc515e9f15be128fdc55673d5b87140a21f8f4d88322a9b7a8821435c3fc0d40685b78054fc8c230f59191ab0948ee473c0be9753c7d29698b35dfef2b23def672711b5d7e786c595d9d8c0e8c0
+GCD = 30ad136811b362f9b8b222f0c548b889c6d768675161a8901591c5f7cbf4668532c92fcc827b45db804d508609ecf512c
+
+A = -9dfe5e74cdd9b5ec226c517dc4d2fdb1f1ca900a6ee86a9b391e45bb9bd6dd0811155ae6287b317177eb3a38eae68d135950cff06c27673778de136c5f831dea56ed8d8894017215de43efd5b6b5e42bb05e30bc4e46e6d647f7fa2ecda800c0
+B = 1d5e6872abb66331000851b33c2763476d8be244ac2e0a05c639260845154cb56a03ca1cd63829eea2101e1070a9f53b28429d715d62c85918b628264aae7c9afa920883708c14fca8e323a7465ebfaa0d0aa2c3fbe542c9cfa6f1a07ebd33280
+GCD = 4d2957af237b577df31fd8d59756896856254ec1f5d1feb7422e5a8fd95dfb4a9211a21dbe2e605e291087e4d1cb3ffc0
+
+A = 2336afdde64618b3aa7f34c6f31542762d3c55e8a7dad8b5705390ba7ef61619930fbfc4563bc9b7b6ddc55fdd4ff686a249114a86e1893bb4de0d7dfe2063e99bb806cc948180b8d798ca52b305fb6b71371857d8975d8a45065e25431be4114
+B = 7bb159b33a68c83905028224a106f46622e7256b38591e3ee4201b171f1a945f9ec0e0fb739544093527fab5fd17244fe07158e348f29f9b999c428ed972ffd6569011ebc68f9007b05a677ccc00f001a0079ff3ff0b271d513071e830b59e36e
+GCD = b0143de44b85277123fc1331468dcfe2117f4bc55c94a02658b12e48dfaa2710365c5bbd650630134ef1aae30553d582e
+
+A = 5ec49f56fe8598ae1e816972a3038e5a749370964bf2a21f0d9079863b0b5407eccbe5dce3e92b1de5f096e590edf1df89df3b5ae5b3e4c3aefc9fe9d488a406670c6a41ab764d01e3eda97036dc15287d098e1e3cb808c53d68900b3565d1a02b
+B = -2794644fa7d9c5e908708cec66a4d7a091defaa12f2fa714f7a73e0c364c3e28a8df4b4376f54a8d59f69885305038be2ca13847dca01035a1a8bdb32fb71ff42a25f360bcc2a1fe59d7dbb8fd2ca28d5ea5e5fae41a96f351ae9856273744e8ff
+GCD = 26196015aacadea54dd1ed0b60bc37a032aa6bf40125917ac14898aa20355b03022ce855e814c32e5178b2d561a7320771
+
+A = -581b46edd0b15971e75506fb2040d96c3d396fb0bfd54a1659969495b9ce8ad68a71a98c823e587d97f5ffb4d40bdfc4c962c02af7d04c6912ac8021631d82a0c3e3aca948152c43493fcf2c5fb2caace9f8168f3e6fa8c277794fc2e225d9eed5
+B = -115906ecc3f3058f9061b4a74a65b7720adef86a906f0944eeb042916e8ed6b77e1e98a0fccce8768f9c0c2b34268b61a0a0d7f9b9035c4248136310b9ae246f1bb5dc1caaf568174a5b8744111b793625a02a02229049da46d6fed5b70a9c9bbf0
+GCD = 1b7b7f51e9e1787d361394ac21dc5ea9f8b72efa0a534cd93efc7ff880385c3c25f6e8ddb6b41799e848c864a44fda1807
+
+A = -660a270a9cca98128692b269c097542a92a106c75e7775f04224fc13b51e4628d75a00257e9dd5bc4342bfc3a4b781fc70db8553c0965dfaa91e0418e6744d515c0c6f35f09365b6826c9f71beeca315de79aa983153778f70b4e1db4397b9c14d6
+B = 56bc03117abb87d9c4a85098651fd1a3f03729fd659c813c4f7ecb210b937a2b9da3c7a6427748aabae02ea838cd09a2cf8219188822dee3742ae8d5c93ec00465c9f641a8933487d21dd3c4bde44551df130c0cc0a7bb7b2ba5702571d98cf5f29
+GCD = 10af9a9df8bba7e5ed132105c126a9d650b4735839da049bfa036e16df3677a19482daca70cac49d776a7e626b3a917612f
+
+A = -f5069680be2bc9529260c9d279116d273a97fdac960381d17d7bcfe16ad2afc06f88f625d1a31a58813a14857e74f006c46020c0da12b0d0d225158d15a49c6cf41f5b5890aa861bf4d44c0ce75ea1343e0f29866e7b74b663e34097ccf68395eec
+B = 962529257f52161d87ce6d6b0076d3414b660b4234434f8886bf5b044d3b6706207226c0e9f8ff6ec0738d870ead355b00e855ff07baa3bec793b79af8a530b172b4b6e97411a885f2d8ab859dded8b9ea9abc50440f5e7145df4e1e00af72fbc8
+GCD = 4fc34029a1d7df4aea092502b3b4813822efaf2c4c91f9ab716067edfc9e7a200ef307f0942947b8dfe2efb9b0a195557c
+
+A = 4f5d40c84dc43791f53399250623661528787a609c6b3fb0a1ca8db344446d27071b768191e72ddaa74c049f3b32fbe42e9790887902fe3d93a3eaf2c1d9db2a64090322faad9247922db0e96ef16c99c5a8ce273fb1d13b019c3c5134ffd25b6701
+B = -34d12d06274ed528785d60e56e1c35b27478e907fea092ab4b5bd539202771ade58b23f08507dd54365a3f1be450d5299664915a3191209968f8b87cc048578fce74c6ef755d11f39b90922dde5ae8d0b5fa973a24c7950bfac57ee88b7dffc0a7ef
+GCD = a944496417dfb7bdca1384f396bae1d188e7313982aaf4d8d7ddd8c1628b237d0434342a35876a965e95f9ed12de149915
+
+A = -d6388ed41cf345a5d4a99275492a6a9210c120f102ef5f07e1ad5da418d23d81ea7d4bffabf279b8644962b620fb85600c6aa10e70b91ad3719131299c53bdbdd6aa90d755c4a014abcbf3f01e21d550428d3dad2f6bde1bd3d4f9b00f5b127ba801
+B = 2ae4d11a437dec66ca7a5379185057dd30a38b157f0782b3be73a2824f66297ae22811c6b8d1716bdf2adad3e2de46690abebe39504be0281f5f36de29bd36166073618027e6ec8576e76654b58f4ad36fd93e2f95601c87af454a1f37ef9eeaf32b
+GCD = 12c5077cdd9cf58d1e906ed7d6147b671ed006703bb615c93231dd045366939429ccdee90f45929c5a52d87de6cd9ef9539
+
+A = 2e20018e6f49caeca16b018b47accabde275e7e0e6ccf0910382c678a80af882dc4825d59237740223943c4067fa02f587beff484782481f3d10ab0fa907d8fd2d233bb0ce16057db425593f6c52a9b4a0a2a8974b36e89eb0cc22f6e72917422a841
+B = 4948ae142d762489072bd80ffc647fd390b52c85563294985f7a6f1397f3646bbb53a2d6ffe21ae9a9ec12d47b35732db85bcaaf979cca2d08b2bc9d74996633d015059b208567bbea4fefbc5fc566ab13288c01b47167bf43b943daf9edcd43c2a80
+GCD = 2717fc7e8faaf45f7bc651fc00823c6f2410505713a5722bc170814d24ef8a3682e5a2ebd2afbaaea0c84bc5486c0742b11
+
+A = -327d55aea1a587e4ef04b8c0157245f845845c4ad0b532493231149eb243c608bd8bee05c743b14a044c7c55514c5d2a5288bf96a574c7a2686460caf1f97a510fedbbad526d4c478ef07e478e54b4ec6ff2ad5bd05c187434aa41a5847c6a9ea62d1
+B = 95960fd2cd83aa48f7b294d2f029e1c2f4c915d91a99d4ec332b453bd9f7fccdb2d46955510afcc9ee497bb8560d7bd8286d76a5dcd69b357e373a960e54522fa9e576254a728511843fe372ec4961367684a147e9ce193a19d845b311e65d6daef2
+GCD = 45e4931dfc4254446bf86dcb3d687f2eb26e35a01be02e80d54106555e8601e4e2136eab350f4e9c3cb904c97c4f66aa93b
+
+A = 2b97c3baef4aa2dda514142e8139747da67125eab065bf463a35817d6e2e6f7fb947f1c845238e041727802460ec5414a2a7b658b051e366b81a53f7e860ec0fd0e50ff32f6fe1f22cf9dd59fd966a23b23e688e1cdd0558babd9d5e3c30e67db53f40
+B = -3cfd9e9da52a720e2cea1a821e3710157ee6b1c3b2b75871ad63b3d6d1d1897a46c2358c6a256a423afe4c52ae3c6325f0d1d921e4c8d43312e18666c3d430e81d3814f0ec1cb56e42844fe5f6e4e64df5ac54453ddfd327662babbb79df125788b19c
+GCD = 144b29fa84dcfe98cd20ca9021a7b551beeccaf9cb6188d193217e5b37b27fc16c27028fb42537e61f64e99435ffa548fdd4
+
+A = 1051766a66052f6b8dc88d645b5ca03a98430377b4b72ab65591d751c5757a9b91b9dbdb37094ad2c19550d6cf9af5cd3833d5f69d2448b6f3b3ababe94c19f6a4a57c01bd0e1acae3b32f44afd5e7d29985d624762381112ba8998eb4774de610aa160
+B = d2ecf0aa93e708ac853c8101ee8f0f590971d5c53fe7854b0d443c7f1947c655266766a3b8d6c17f196885b4788431b3df6f0cf76c5ddae4524fc25a411a18ae725054fcd73b634c5487b97eda9e45204c57ddf3ef4e783e888adbeb162e27a2f4b080
+GCD = 3ad165ea0ebe4c834675b9c7c33b6dad0eb27d625097ae7fcaec60d752aa06fe7e9be1dc0acb11d0106a424b150b5f4320e0
+
+A = -154f2f847b731646cec8a03643253b8d6c2c6c3225f81ae1b32b6e5be9888a6db719b4d9ad44c0d5b99781510be262052c6187d48569bdbe5ab9c3910904f44f30f8e43839340fec28c51430bfb03d6e6a9873a8a9189fc84ea4aa9c751b33be05e3fa2
+B = -d11e4a70342a88d4c41882bb2d0bb5cc311be50025f6005a44425a1a51e9c1a99615c4dd7e50507e32fc3ca0ab27351dcf9f19c9ee6e21c44784711c84d6b62867e613bd791d8bb6153ab54e38889e0d03a47333eafb43b1509add41ceb22d088af660
+GCD = 31ef02883c4513704a30e2f6183be889f67a80ce84a94cf1158a2a4dbe9bc270e8ac21cf1dba4d494fb99fb360c1b37a2e86
+
+A = 95637d7294f9bc9217d2bedd34d088df3ce5c6d55e84bd0ebf6a86200b2837be8fdb686b3f5c35c717574d81d2aa2f66ea3003aa735661f5143968c2bea8f130202783662952fdc676ecf5414653f6dadca22bdf681daccfb24688c533b49f1855c23fc
+B = -b41a788caf2de25607529e4981ee9c111acb0f305b27319cfd58f9543fee730217e19123847fcba0b4e34bf48c888e3a907866c66066907d127005e4151d12b7add77852a9d787904a88c4b2f188e5c40620e9e0a866f3bafb61dee67a431e4e69ee402
+GCD = 72024a5650fd974263a5de8d42101c0c0770ebed51f7ec4b452065e023a3cffdb86acd15f13ca55e789204abe44f6d544156
+
+A = 2605d50f90ffc219efca5a0b3eae84c3977f8b0c7c3b90f7eb8f27b3d2de3b6387b57abd3efd699ca6776c254806e5a2be5f1f260a10e4e5fe87025bc6fc3f72044fd04e61bcc61ee85157b598fa1b2abb896b82481739b91bac39dcc4345ee92e55ef24
+B = 3cd19af2cf7667ca153ee67e601fab1d660c92756dac7c51b3cbc3e49ee1ce640da8722e0687e9cda38a4bdaaa74583c7bf308279d0329b5ae0d182170958f8aaa73439f5d9c8a7459d3fc75874fe9f084884a66548c7520cafccc9bfdd367b266559584
+GCD = 876fce900ea175fb034d92a1c883370aa4ca3df3ecd133fee3ccdf2e7f5b35ab0754cdce0917110600146639c1a9f862bb64
+
+A = f64b7603fd1207e5c325a6728f0a08c32036457ed9b2d70022ddabb38f6fd5ff226cc788c1daacdd1567917058b510e9b4dfce12d842cb5e32209bffe7cd28a6b145d4e29f834f18eaf6d77dc2e7504affd6f56a0b8946cccb274d9d194d226041e9310a
+B = 1154be1e8d333fbc45ccefafa94b98e0dff121851af3dd0a8e7cbd0a7ee0d17e39fb2bdf8f9a2999df47f8cd68da787630b60cd23d24bdd4f2c7e3fe0afb61214f7b2942619d9336875a18b6ce2081bb831972f421be15a9974fde93ec347f5e6ef8df016
+GCD = 1fad0c628fdd1b9f098fe53aeb498997bc5984f7bf35ada4e890cd9309613b81c5b7afe331dd3f1e26b24c11ced34099c94de
+
+A = -351e40a2cdbbec70553e013e0f6f13dd24dcc19b6815329dd5ce63328f4d76809c295fb74608084fec0f66dcfcc7d82ac302764544533fcdd8659961ac5049a3ff317f3222bb46aba1391fbc7a0fc655a3bb81e16b362acdc9ddb152d0bd6babc49df93a8
+B = 5246b50e2f3c835c4b15589ffd2af75a49c6802de112b58ecb2ef6653e8107357c992e943a3f6252db147858e42d2092a9ce9c1a1dfef0782b48faec0ad7e614dfb08e42a40ac1e74ac4525eab4e918ed4c61457f7d5e2ec57abd958fc135f3ec0e6f977f
+GCD = 29b7ab484cd02e2c1c3c4a495abe3b104b8bb42b1b20c3411a30c845e2a679e4749f3806f47c6dde03a0ec228d2d46cfbc0d7
+
+A = 23590a5ecf117c9786a73d014ee2a31d9930968192d6367875305fa664e7fa3a23f2a720103a62356825f3ca54ee4b5ce9af3723735dbb529191e63e4ef7cd3e795a8c0f53e0ff52f0cb43d1b5f3a08bf951cae5f9c04b793b9d37f3b0c07dc1aa6c0b696
+B = 8c819a7a35ee2e5d47b6fd74a5a0217203890a3415c11170488fd703977ce5d9735d46eba74e141cb2aa5bc8e2d86fcdbdf3a5b4e299203948c587d214827a7329f388a20cfb9e7361b23fe2fd2edde631158f757453b39e087f74d7d77eedcc6e41c6036
+GCD = 430bc8b6324178616c11aa7dd88b440c4820ac849071defc385f4fe41595af29985690ee81fc06e6fac4d5e96a3e56c35ad806
+
+A = 52850a344bc14d18a758b47042ba3d2a8340f93612f94735cf212f4fcba92873a2f50f9a5897ed17dac3b41b584435cdfb674d8b902e46c22c361ab95c9125c3d3d2e650cf9326b92103d3fc0024de907561a0e6ecfb7cc2dcdcfe1ad4a08bb1ed9f93d07
+B = -4091831cbbfc028b8d39e56003f1128b143fbb9f662b9f21cf9cfdaaa0f237a0767df5d249b384d9cbeff6d18f6b3547275a30f95dc214d6cbd5a2845c7abec9486c47c555e06eef10db56b5f9f1fcd68bc6d34c5458630fa94aa34417de5ec1872ecba18
+GCD = 92b931c239eb1afa212ce792362bd5318a5fef55543a219f9a6c7050309cbf56ffde5b0d38cb8b0bd9937ab621e617977cccd1
+
+A = d7cf5ba09cb8760011b38db1fbbae5702e831643549b393fea88b0166a66b0bb648adbb605051c6dbda8965ff62da60ae2869f3d6280517c5b94cc49244a2d77c0c29c365b7543165f6774d5758aaa4b277ca810788fa00a6fa6b2b9d9f321e651bfd46040
+B = 47ca624b0e6c4e0cb1a874ff8958d07eda4318a21b2f5ba92324d86a5dd303153dcafffcd780156242b814111039ef7d5892b25650328fb305895c3c275a373b3c58eb912ee9dcdcde7e9f68110be97957ff9db4e58856ccc51701a9b7de0b7dc3f37fd910
+GCD = 113f3fe13bc4a628375be0ad05cc6d331c6fa91ae158784bb60168ea87b644c4b5996e916e3262a11e548ef86649597203ead0
+
+A = -ad26371e8bb2e5ebe46e4dd365767a8e7ce09176046b2d55eef959e593b17c1540baaf036ceb644dbf377a70e7e4f95cce5fa3e65b2604b02dfc6902582d73ae0ac118708c225dea76c213d8560f9eec160e2e48b960c1b38b9f1ae1d726d8a6c20002690f
+B = -146b5a80ecef3db0af23277b8498452ee778f7eab3323da323c7597030d84c0b6173a205b33ef160bb92f7dc1f5d74c502b44c21a5ce8b6564af44867521805fabc3c7a3953b85ec4cc7d4d3ae45a760929ba19a24c70762067af33159006fe16868eb76b8d
+GCD = 2c3faf7a6e6911a181341b9a5da00ac41a4c12bd331081aec409f0919af60e6b4913f0157f1a7477be6fbf66165500c267c8d3
+
+A = 11414e2ab4abf6e9bd46d32e1447726555ad1fa1e6f169c27e674351e3a778f6ddf55f47fa8c850347a45cbcfbf1911d0e2bdf148a752a1a09395a52fd8ab3214c268cb3ac7bded4fb132573b1cdb0f800e54fad33ded373abccdbf8f48d6357e6539788b640
+B = -9085c12741394e6ec4d255ae74a7efad1017e193786ee6456f8a33c929c34abfd220c09eea0e4352ca1a2d6ea0245728d37b8e803050846364d255d1a9c6bd383ba6a1688aa06e4d66885ecb4d8543bdbc676ba5093e4df92f3fb43f69b71dad783d8014a0
+GCD = 78404ce9ae13cbc329fdc0b307e4bb74027f21b2f885db34aa64136568dab7692c7ba031d2fde8fb0babf2a338b31e3f0681a0
+
+A = -497ebeeee15a0776132c177655fe8ac2fc2a76a9e061626980ca3b20ba64d987798ac9b50087634b8632e8806783bf1a4a6aec2d151b5fbb329a8e05986bdb36f90c70f8697081de5fb1f4a3b9329b3753b94e68340575c16ff4f980c8e2a09918d2c9b954b6
+B = 5cf8e34b62528c880dc9c76362af2f813452222190cbfd0ceb3236ad8f00a9a638f148310e82263db84e21eed54251c01bab14b92366a098f32e43d842ac33eeb24dc46da5c7e4def146dd1c6f282f84f3346b7c666fcc6b24f90053f82a091252ed90ea77c1
+GCD = c733511737a6264522a7f4ed76ddabbe4dd09901cd866d31630c0c7b4f62a6cbe425b4b8411a3877a1c5f43c421338d9927935
+
+A = 94772a01f39364eea6a231544942189de82aecdc1cb20d984e752880dfe73fc274ef42116e4433426fef89755dbe581fbc264696636674f860da559649db26781c0e8d7fffc3bffa771bb3a9d51158e757f566428d4ec3909e378d55ae63f8ca510fe862a986
+B = f9dbe9a8b1b96ef2178b3ac1c4860c5d809c278aa620111cca122394485caa7d38406d53ec699dc7f740aec2eaa6c2157c53e567dd5d183eef3aec9ebefbccafdda8df71b5b3ce40a4ac48c7aaa6ed3f7197f7f2690ffcea902d63e5189c22e4c72b89c2a2b0
+GCD = 240d217b3c1e749c0baf9f987493734fdb84ca6be82c41c2c120683681bcada315b12239c5c68f56e7153835f8171dcd6aaf596
+
+A = 31697f0876d4c2889d2a47f45dee5d39147a9673df50a56f374c0f32592df51b7314bfea73c4dc51a0701c5de3cc6ebee8ccbfd3104881d8cc14b978fd7c3449d3977015f03b6bdb29b0430768268ace8722c12bd353f33b305a94fb54576ad0693852b11618c
+B = 370613f25e7588ccf96fe08d99afd26ac6d304979de48e31ae3916745410d65e688db7bb5b874400bab273d0b745ea39703bb5c75452ea8245b4d430556024bbb79632acfd748d7aa4ba60309d9700c720e37063825ee9491675d0720882ccdcea8a0dcce5206
+GCD = 21319b80553e8240201e98dd33eb02cd2cdc83a81c8fb0657c929da5cca4a6a63627a809e65b37c2f116b0688098b5ce6a8402a
+
+A = -289f13b51b3fe125f795760192631c01f99fbbd14e124087f363c908222425864a750782c855f04c0ea400214f5dd6d8448c134b799a8cf38776d3c5cf70090e8d799b2d75c109f8bb284bc734499e03351e0421f95d604f142c387ecaf68eab7516fdd03d58c
+B = -8deda9dd77016fdd20d29033c3c9cb6db1546d631413afba6e95416789ffb457547e8b21c26ca9fd213f9d753891e66ebe9896833024b9a55d0e4381d73ebb62ea2dbe4e068b8157b32ed9cb419c13972f80f845807b21995265e1944556410b8441323fce3b4
+GCD = 5425a4020f886d8d4e86dc5f34242031f0abd5eb08757a6f111cae901c3630a18dfb4390029d88009704f08a3177be20e708114
+
+A = -173d7ba64a761f8b717cdad3bfe22e55748c48404ba3fbef96dca11695b8d15e36b654be5b305bf4bc142b0d9d05254e19819805233fbb48b92a82d97fc61dd16327a2dcbab280190af790b7a885f7d49edb90c78bae20c162ffeb8e95be96965795b452a92f04
+B = 45a2e16db55b81605020892145cb89f1cfbcca7cf64c3650549de79eb865e9e8b071647a7ccb7ad234cbc150645b5a9f2db5320e70f85a794f177dbfe998e6d02fbe1dfa4d46146eb41ca56479506d5cf600b008638378e47e64bd3f214677d05298e3ecd76cc
+GCD = 28478e46b77c92f4e13936a2a6bf7801560877b5e94fd861b34b53a120c81bd7c0d77bf7da1ec2b9c907f1312862d4128de3a004
+
+A = be301fe6317d4ffdb8c632bd4df21c40663c5e3cee79f7ed23c8676ea6c5eb02bbab42541abbee582ff4681285053645032f63126a002ef2238477237b689b81c7f6374e1b969555df12482aab56c6e27c19e4f014e1988bd92fa5b08d5a4a9f8716c8a44a1120
+B = f7bad65b19d9c07631842d57327199b0355848744bfcc2422d14700281ebfdb35535850c2a6d547f23434096753aab03eea132d4d94fc931f2abb5dc4968b237047579624aa2d22e3cf554d6756c33cbd237b09da66d3119122dc855d56dd531fafce15ac697a0
+GCD = 1a6e2fbc6104c0b239a3f7e6a03766e6dd5357148f868373859197f69a7642e876002cd4cd1b4d98782df06274ff812aa651aac20
+
+A = -e7d0b110dd122e35af8ed79ae43aa27ef020441ac1388acdebd5b749f27aaf04cdb77fe9c256056a57d038d9eaaeba1219c4bd80cd4810a5228a1d1f02522a2c4165d5c2b6f037c3968f965fe5a76dad1c8821792b5886459dfd4e85ed2ada0d91aa93962b5bf6
+B = f76c3229b089f799480a926a72b690dbccffc855ed037798ad0fc24387985b42c38f7749b2043f4a98e2f08e56893bacdbd32a810de632248ad751f8189e9295dd171820ec3a2e1be166d705727b277318b941b24e09ad7fc15ddf401edec76ee9101bc78e0de0
+GCD = 27db61c8fb818289f8e9f215344b58c74af11a14f914f83284ded8482a15bb8de8a9db38dd34c7405405992844a17ab924d883ea
+
+A = -e2f3d27203187a3e5cf54b9da1411c6f8c9f957f4e0590db3659f7672f7c30f90c39f882ba3dce6e253d7032e12842304d1512f2f8cf2a50cab5d68bf2b2834dd4cefbe53bdb33163de76b64873e5424045313c56d59b80ddade9054789e982a403bb65578328c6
+B = -4c8174139b7e759bead0961cf4f7a0f0ba9d7cb35e7959b6341b8d5c40bccf457ef1d4aa71e34ffdafbca5de545ac21a616630c06b088f66f813b45b895ed03c09ef0db925b1e591944f516d23e84d674af3b3c8b563aa06968e0b7c12ccb268745229b193e9091
+GCD = 404da3111bd24c9d57f33222db8e3d21d422dc47e5c345fafc4583140117700e9af716d45a439c14f6fdf4100c43334cd907c823
+
+A = -2ae801e85fe54a39d7cf57a85a9b587266b13a1a66d0b45f99f6590c27edb66e93ea09de783e0facd674d12451f12e469cdc05cc5504947e0f825f47c56eb9f5a24578a64b2d4969f5e7e58a416ad42eee972583c93e6cff5f7d17a49e7aabb5d3b3067f6674724
+B = 1fb451e42361ecddc973baf000c41627320f97ccc79cf7040000166336842fc8f88492ae0282cd3505dababe1305b28e98b822d61f2b2762e020e990f9c73c02fe05d00ac6a54169f31aecf3de71c2154625e6322b730108b3a0faf3ef8fa9b7846e1fa734fe7d83
+GCD = 175775fe5c314f5472aef5100f5cfd5070d162e208f3aa0dc5881bd0be9d2e2bc2c1a429dba9a87bef0d290fa224f57f3c51421cfb
+
+A = 19a8e72b0d85b767b86e4fed1a56fa7d8bd12806f74324fba2fa0a401e84bdfae41813840923a87870864c3797d366873966ec9c50b5b74312f76fdb2dc90947334ec2759484815ea3f25aaff304d8e2ec9f9601ec0de922e014e47157bdf8dfae523abf5b7ffa92d
+B = 142133075f16db0fc70140604d60f6ad1b381a2e1ba9dd909f49647913849a63046dc796b6211b3d8cc012b81f7ccfcc7c1f34a7a20c758bd9accc6fad1778b205ebe89c6fbc79edbbb52fd2e229b69e9919f219e607e0a183cfe990ae4c33227c5e974c86f46648
+GCD = 1b4502867e44fcc95cb18e6cf7614cfbb7289d627dcf04cb95144222287720dc5a4d6e66a7c67380dfb1bb6e7a134add79d54ef39
+
+A = -6a61f23e7ebb4c529feeb351b113ac3bb0c7c7fd143f4dde7f8477a09e1aa56e7df10fdc032c50ed4ea13d94ba17133f3bca3e75b251569567027314c7713d29c1567e26b25e2ada8eeea64cb11027573f815bb07d3e4f020445018bcb5437928d3a74124ab015980
+B = -3d6507d2040b484f2d6831106074dcdf0dd42283400d3ee91c06cd0d2c011e9b45c908ce57e9ba9e9e8f99795db35f6359b538add1a5f9a89cdd8b0a47d60ba52520efd36b7df2e817ceb0af3173ef26d8a1d51e62c3a1d4565a9ec318fb8d64ccd67c9bc7fa91a66
+GCD = 6d88cedf1171d34bd14f314740a17235d5b42ac5d5ab45bdfeeacec79566ac5d02162d2a4318cef45eb0310526d88972f4ece44b2
+
+A = db6e6d3f7d5378642962715666261bb12bc444dfaaaaafb4ecfb51e3331bfe7bd0f492a9d52089f0ccd439472f27e9884b0c8f0e6ff0d4d918ab1a97a49961f124b685d760298879015b2c55458eb287efa1a584b4d4494aa87f76a1ed2475831c0e9671649328a1f
+B = 545d328c07d7ac5f330e6106aef053cf328c627a6e961fdc8f339243b6b6837e1652c45d711cc63f4f31412d64c5bc743736b5b83fa90f80f9c889454bf3236bd61be290127642c7400e920c4a61d8871f94d44daa12a3ce430c42e396c33293e041df8cdad262d05
+GCD = 219160f378dae36736cd6f2e31f03c0e754e17c90c804e10a7846b0dc83a47cae3a96b4b0fea921fcfaa48ee7171da6e6820f2a9a3
+
+A = 488e091d388da72fa2cb0abed3bcd9e6f27ac58e0c90b8438a9bfaad0571dd13a80ae3a7a432d0d0a98d5aa90c39c1d2ac426fe05bfca9cc8ac268404823c085f6ea58014b173ad8b793b2caac7db80881faa32aae16ce6287f7cabf2c04f6b388be9fce99c86c3177
+B = -52b3abe79c9c9788587f864aa0ea25107806ac6645199177e52daf37d9857e8595abb8d7bf50783ba69665daeb70c2dd5b0134e90b6c0f2e378d4e5e40150d1cdddd175e14e2bb3d037b9e2c17d770f5ad99f38084d9f752f2cc829c3283dfacd334aab5f8ebbaefb6
+GCD = 125cb35f34cceff399212789eaba719d0b45538091a3ddcf05c3d15e65fa7bc34fba50b4914c1b9e903e2a9ae8cdb4a0491aace99cf
+
+A = -181ccf1874f401e08ace42a3228ba457213d53a083b60e1e9a8be244b971cb6680f72ff00de3c9854f0e7e408164711b6f38cbb3496fa3f967e664e125cc17968a1e98392c08017a40642bae1c31cc461660dc2800ad722c3391219eef0780f541ab2883f3b6c703722
+B = -ceb311eae2b8dffe86286065c699a985a2f76d6b1addb5bf452d63c65b205c05a68a66761e94ee7b2df45ccdcd8b3e53d396b4b05d17acd111e3ba2fcdfa7ff7e4f252a613c018c7446f4727be226b7047b40f567ad01ea71701202897ecf2fd1d647d9761374cb0e0
+GCD = 1b542b873375e05818c4aeb64dfea05c8e5597de268442a9736584ac1cda5563f17bf63944f91d75d30e8b2870c14f6c5056509d2a
+
+A = 4095d03187686b2b9b7c7f6c84eabe070c51d08975ee7eb2686d392ab2c93941e72a0e334d850c1b170b9824b0da68423b153eab9ec0e938d7490e28cf2f1f0fec23d9d15d2aea07986ce24cc96e6bffc59e0e014e17873ca50430a0e98adfcdb985800acea4693e9b9
+B = 3e15f947f151396f3ab5d34b9422d83eff10d64e2398dd16b87d4f2e4b318c24ce96d417e21854dbba2fa2ca8eb9153cbe59e954aea408552c11fc1fd9d8914da9640ed2d7f63b71db529d6da7a2480bf2b694049aa5e45fdb006d20da0743862d7505252f6900716c4
+GCD = 26cfe771d7313fc58ec5b3e371615b9980aa87d146e97e5ba3a331d5dc9e6f87ecb1b904b6c12f0ab3aab542e0a4f695b733dfb0fd
+
+A = e999572693d3b0a9623f71dd47baa7e17a581aae029c649467a0dff6e8f5cea5374dc9d84a9415146a0f6c3b5fd6a80361efea5d45d00b9ecf13cd6c8e82d2e8edde26ed0de1c63062292fd174f52c49d5eea8575a31f4da7a6384499860420bb1e3f4f9e127d64bb4b
+B = -2ef614cf1ef09391cf7c8b884779c2b939f1614afe829521143ea9a1cbc4f82af152c14e3dd9404a4c108c33a74fcdd86f5ed2f5de48064785f9a5615c91dccac85583abffa169a000a5d7a99d15dd6e82dbfc25a3c28334764bd8753b5effe891240e83616431dc5b
+GCD = 5c3ae308126e13d2fbd7a2c4edb4f51f6ce9fc344c1663747ac46bc130db84647db2806563e594d5fcb0189eb32197a7136498052d
+
+A = -5e930ea21a9f8b1ac66514aed615ceec44ff5974e50880790cbe158a47cbb87fc50d7700a101ac56b1a36128c7f2734af94dd1622965c01336b5a004438396f5d3672511fd65f96341f0d773ebf9eb3f2c66f966a8c44aa6f7e91896b26445c3d833fd5806f6fe5039d0
+B = -65e79a04cda2712f2e794e8ad1adeb61eb074b920b452f33b8799e60ceaa6cd87c1e2e06f96c90305e94f04c6e83195dd8f43830e516c7c4b46f5ed2674ffc82c9ae277b4d1294414c1819531b32fdb98a099f47a2919af87247313b9731cdbb8ad071c83125529cfcb0
+GCD = fc3c52b89fcd7e6f49a7e438c9fa46b8a55bb6652e2318f8608c36d52e15a19d6348a8095c7f4db73a9e56a8fdfed9c72084f8e9f0
+
+A = -84f13bf6f0d8a29032868ffae98f452edf3527c911ddce819f8b0ec8f114c8081e9e9b1736dd737f9e4d6e3d7b09f7cea0a1cfbda36339ccddb06cbe936d46b73aeb1dc6e0ce92f040d6b02cc9e05f350a55d21b5367514ecb7ca15f51de9622bfd21590804168fd698
+B = -999d27b247b1acfccc7b7b98c65a82169d070527d46f4730531a1164b7e209ff399584510d61112b8b102a8de76eff6aa5b2ff1c83ac5cff7c35b56f3cfb8c5b65012caeda4a01aa23801bc1cea112a5ae9873d1f67d9327323800a694330fedad2ba847933373faa82d
+GCD = 19bd3e4990b2ce78e4e44fc252cde231bf9b82796912a294370050c7fc8bd816055929dd272fb86669a488ba21f48fc017729c11cd7
+
+A = 40ab8abede551d5ca27e7b0a88c17f2874f30751f1656d1c6ad4a5c7ee000c9d30d6b0452059374c3fd802a802b39ef88596c3ebf51286794e023ab1bf943cedc0d4c1dbcffa0f5988b502edd405908ef951172ac1284cf9269f1c659707f5b9c6c6184b1e83a3fac3903
+B = -1ea9afac1f523ceba17f9353d677a234b95951f2eb5b39e237e2e2da7cc8ad7a329dfb0ed4b6f458ec08bbcad3edae1e8ec6c643cfa7d78e37c47ed17fad01471352fced9a4cd175b00daef6c32055d6fa330d579ba79abf1ad23c2b0b6cf845c16a168422966ad6a9521
+GCD = 742c4908e58b723a29dfcaa3c5120ad4c3ae897b6a409ceca1542e3071431a9f4501b2dca936a55a1ea4c52de022415f5496200d5e1
+
+A = -d65e10ea9da6a804efdfb78c2c35bf346f712f8523abf8a64be09d33bcc7048ff875f2dd85e756df59f4cb9d1647ec2e22ac0879b55167eb52368db6b686d9ab1b9f50fc25a51b1a8984b4e56e19ee978665c67bfc3ded2be29cf23497a272d7553f12b193a694a71fc07
+B = -25f0f2de52f719cad71d5e8c49a767279fc07b678cd81d0ee7f6a0259b63075c8cb2749c44cc9aeb222c827fd0e7f500f9cce12b20f8add4a6fddc49ef8069b04b7e9463d8491c40a0d5acdff872d8beb41a8c235c2aa6efc340df105f47d817679faf7b84dcd14bbf9c3
+GCD = 13d763c408389dc6808f678327419c39675d8c3e509822d245704ce2efde4df5ecbca672a8524d20e43609b59ccccc9240d0cc88df99
+
+A = eb5d1fe1490a460026441dbb2154bb80b050e28b2261cd08551b1d8214572bbdeb233bbe53db107cd89e36c10fa707bad729135dd34350f1470fa0056b7b3f040eeb2f89b101ca2eb4858189a5d32a1f522bd365e2ed5708eb513343447e42ce4db3f391c457b343f0b9c
+B = -275c2bbccf82396177099782b6b792ee766b7863dcfbf2919370c0ab8388639654f39738d22e9a15888787d3fccc4b89e97ea25f1928e30518d5b52c87f37326a808b63fc7d6249bcc565c1d480b618e4cc597392042e7f6b80871b4cdcdefe7eba730abb56b3f672478a6
+GCD = a86abccfd65c2d3948c8c66d37c44503b7c954b4ae6ec8a17bd767e566ed950ec76a915d16275b310bce27e8c7774004e5dbb93e89e
+
+A = 3d99f894630629dd0eb4daca0bc9dbf6972d6864983f195efce5764acc3b2e56004dd2043a46f13a07e46f789dd9d849714b6d69399ea8a16ca54b3f83b4d00fdb9a590bb3b0ba8426c24503b36ad877715be61ab94eecbdab0e383a5567314600d87f43173f023b6537a9
+B = -93de92a135c29abdfad741da74e7a62f2f3ce7f0f989ead3c9b0ec92686730f22417492508d1cbcfa99e20e055d446fc35d7c0b19ad915400b79001ac7872353c1bd91efc67e57c0a0e1a20779685b36ac0b0c7772ac86c6bf84596472807364d59e8e0f514358c7a7e076
+GCD = 105d443e7aa1a1fe7901d6cba452bf6e7126e22d0e4a8290b0b6fdcd5d004d61139b0a34fd570f18bf42db39ea0520c8e16bc4ab0a0f
+
+A = 25634b628214a935d3e7fd404872f2c555a995f2bbcc04b6639853a2910cc5923237303da47581d7a6ca8dec026f3a4ed91f5297eeaefe83bfb488b6b6a0e4434b8df6a92b35d1c62b79f12d6568e9b0166bcb3a2022f38c8ae0bafad9beaf482d54ed69f5292335d24ba2a
+B = -13a6f891298a63aea3d3b5534f310df9a5aec26cc5585fba4104a9ec2f8b9fbbbf6c0a3475fe41b404d370e720758a299acef1ccf18adc8f0b4f24f96eaf6cf629ce887783107f525eb900cce5255ac7725b20c61a5f504ce3bbd5867f9e0eb20ff9f1cea54bec97726e946
+GCD = 1eb8cdb0ff88ff52c2fb3bf262da3cb089d8d606458c556e6c0071aa5b6c73bfe9ce0e87c601415aa1aa5514c7390b75c3ca446f8c412
+
+A = 6bf11ac8a63e61eda3f99c2d3bb0f4b1850f0f8bc61fed33a1cdf9fbe9cdea242b7edb16931f37e13b31b0301973db8195be4684dc59a0fd669d715b05a5305f5d0f3f8d934152ee4ae244a70b93c0ff4edd693de85908a45ea7b27eed119ac3094eec9ab7e33136c15fb
+B = f9b63a80daec87ecb5ad2b76b766a5d1d12acaf2580aee55289cfcd74bd9c112df6aed8a5c5289759f4383e91f45936df32ca5c39506b21c7d25dfe5671f7a85e2c23eb0eb169d65d2257ba719db23ae29aae6d67b4b50351257f595c1915b5e928bb083f4afab9e970ebbc
+GCD = 668f6697aef26603d17db4fa223e0c162646e5fda615456b827ada62d3d51eb4d48864d795e1b4b6d26187b9b3da633c79fc0699a0f7
+
+A = 119a81ec841f0d8bd69eecc1acb4c237bd572eaf8f966c9018f837fd749f9c5f82f48a57c180b0ce634ed91858e056157ef6d1ad8d0a0ec5200b83e400b0d25d52db788e35e7bd6ab967498b075782bc7bba32d171724422c87a013bcb0e39d2d5a803ad899371d3e52322df
+B = -41e59655552cb7343616d5e71a557eef92dce58eba99222d0565e24be49eb963190bd67907c4529a1819bda6e50662c717e5705c5b03715ec36aa65a6376849ceeaf18a3041ace1f8855864b9756af48416f71b7467dc9b3bb2e19fe1be639fd4bee32e947d83860d207bc53
+GCD = b43c412d3e3b1c7a7c42b3caf2351500acb33e9f49b56d40d6869edb21d870edcc15799c90b284b2f0b92d126f7f01cacb3955216b45
+
+A = -ba162696a00aadde76f476defa27f401a0b1963e7f368acf83f0a707e8b631d91c1abf1a9c8b7af1cf8904001eca9731d43db59ba3ebd7bea7957b2be16eadd0dd73caa85dcff3a55aa747fbc74becb0b7f4b1da30355a3c5de5d7150bc0b2bc14e576e9c4ef1581409e15e8
+B = -e31b40f21cf9db1765a380ee710170531a3c32f8f4e01a5e0a74d5fe3f47bae1a6058b591e69be101f362cdde3a19e53b36ae953eb4eb9875b960659e64de6bdd5d05e800eb64eda772e2766b75297d61d103cf2aa04793df17847873344056e502fec81629c9f59d3c3cfaa
+GCD = 566b2a150c92fe5cff53fa13081c60a5768338738ddcdb041f6254ae9701fc95f3f6077d490cb718d8047d497a180a71761a985e7bde2
+
+A = 22c0939846a6f38df4f5632d3a534e7eec997883242ac0614d833e5e92feea7e16c95a882137516ba604e8c39843f1998b9e83ab91c875bda4a7015c9b17e79674e851466b97ebc7f307771a4bd64b66dc869ff9b08131dda5f1d11dc81a5f4d0376bce0397dcfc8c2b59b573
+B = 297abf05fe0bb96fb9164a13b0b63d70df175d5224071bf93dd039b13e8144830d52631dd63fa76709da5da5dff517b4ff3e99610415e69e95585da111e926497efd1bf3c3d5ede1a3170abffb5a3825440c627fe8473b74f9655f985599b8ca00f530a5ae44678d29dda6854
+GCD = 24b926de88e2b600d3309a45b549a8086258b5aa0c4b4be2b523f84fac28e79814bdd5a2e4385545a3e0886ed4090adb6dab545147a9f
+
+A = df1e6af71f3ec05cde41d3741290f422bc5df92e854880c034c523e8d9bbd518664fc8f2a4eab867f0ecd0e605d904a98e2425dc51a20701b5e0413ba88602e992c7567d3836f38d27402d23bfc87fb602b202c2e15ef2724281c677bc57820a04856321f3bbb414c13a83e77
+B = 196442299f7a20f04d1532e2e78de70a46490c24c3cc080575d06199edbb1f0c315efcea19ce068eb75dc9249fd37957c3674a7015f0ec891b70f7eadf7734a91f58fe4df449f028487d74ccee0ace1d60ecb70c7f85a2477727605ee73fcdeccdd470b7ccb455f56c2341f9f1
+GCD = 6ab2c0b52cd70100f646b475efca7701db38134549e1e02f29ce74d36f80112fc95634a2a83b86f722e42f4a0da91611b6c538355e0ed
+
+A = 33413ba4d0fc7c3078e987f42b271b1f9c7ec0aac62655d8222525a982fc33f3a6c9e8226676ddcdd4e7d500dcf26efbb2298842fcbb57b12a76ea6ff2ab204478fbf64fe90a36ff8232ca8fb2c19ebecf0ff45054c6331b478cb364f837994bc1929efb06600147b220e61254
+B = 2d3859308e7baee210386e3a2b5892ab91b33e5c37217532a63da06f7ee35b18bc320420c1fae42d2bfc2c874a19d7f135373e4e0e0fae1fa5881765c166444d2ae08d7ab1778a1390244b3c87dcebb2b58b0eff1f4e68dcaee5feab491b5cd4eb7544e82f23169766266715ae
+GCD = ec8bb0341f02b244ace6db766a7476d995e5a1bc301d0f2b1d850e3c179b3952d84685f000626b856706f489af54065e7e69a6db64a0a
+
+A = -11d2d9c8031fc9ea2c73d76063265ebfbb0b8d8ab83f485c37747546e65d3ccb109ffb03d92e65b16e2735b4a2dcbe5b2b48e90564bd1fc1e298d5e405308c7ef62535a24b1e4169644c395c9074938c927963ff7efb53fbfbf3c7826c17c17d1a7a07f612348343aa6f734b282
+B = -2ff6aa64fa271f7fa062c486a45fdba3afff8cb8fb5cdd9207556be7dbd1c78fd1973cdc9da00f38af7d28b11f462b487bb080da8507314e6038d3fcb50af67d44493d13fcaeb0a0ab1751bda935b7dfb6be254bb2bf6c40bae715ebb22d302e5136e748fdf4bbf4be5ade6240
+GCD = 467a3efa7658c8dd0b3adf01a5da18939502d17f71d711c75e6de458a4bb53a7179f72caa88b166301216b319d6d7be0c91bfce3a0b6b86
+
+A = 1c5df0689b31df95b9c11fabfbbc11ce0df9c36365ad97b887dc36ba450df64cd959f377c94d12cba6abca9c3f2e9557015a276d2bedc26536c7ef35c199b631fa265f1b95ce36abe09d729ae2468c8acd8da0f7223e9a78805fae4bb8a5e7bfbcf88090dc71dc8f377b273b9be
+B = -63dc6f8b947723444d1f295fe25f55e0e0fb626be88d5329303c6694547dc4e6582a293172437664ae401e3742fa2c0dbc4842c494cd8b7a7f726ffdfcdfaa59e2cd705e176c27bf3cb1ac70c0f4d18d543142954e4eecfb4b92ef4b644f1bbb1bedf26fa1356c8cdc06dbc366
+GCD = 6f460f3d41c6e84f10944775f81d8fc4f14b14a1d3ece491eb781d5f7e922e19d96568779f8977866264fd8eb3e7209f9bd580dce89f36
+
+A = -abb0ff21b635ead4140b48d39df0bad16d7f2b7868ef1f257d47bd28dd162a703b41842cbe56256513850d2ac3c81b5dba11672e15ae6f75680e838071fcdccb9d7401047bd65a79c34cade8f5a21a5bdf0d0b8497091dcc0b6f7059d802bdf4c7e24b534f09ec234c4628487f8
+B = 7f82b461e0c911a23efd31e84491eb7ba7e6b6785b577c397890fa9192270f2c411c89aaa1bb14c14a36506a63eaef75d8c776ba2e5beadce3b9f2a220b2d784d2976679c8b1f5eb4a04bb716b1d00bfc0a8554743fce3f7938d2ea794f72254bfbea51c99592d4fdae708912fc
+GCD = 810540d59b7dc454ae9695b09857c20b648dff676452f47dd390f0ad937029142cf9d6099385e92785fabb29c0f3ab03a74dae18e273a4
+
+A = -1fbb7bdac932f0bc4de7dc7367f328c6a88899d2575e29b7f3075e4b26678e22fea51482f2f85cafc4e6d6349600d7d5529819c43f99f561e8bad73dc6dde79c80a3f56e2f95937ad77134553da9df81b642e0d80eafef05d15968e614181b92022f04afdf7356398bee31761190
+B = -51b1946ae0768a42470cddd66e74af29b62809620ea04724cd3db4d3c907b16527287252f4abcac7ad3b0fb84e6233174063113b542dc0e952e1bc0546d0e5fa1e09a00972fc5d58f226f6ecdc4671d23c5badf45865ddaa9606e000fed506d2b63390eecba015908586f4e4e750
+GCD = 1ef49f17bb05c77d852ecd3f6eed1ac0a3c339282c399f959ae5f96ddea688daf7941ea033a780a8e5184a5a2f61b2c3766a772ac39d7f0
+
+A = 9daf4d175bf52c34ff1400ee9f0d485badd2edcab3500fb080d6c101c3cc315740a8b25c7705681df5f70198ca36fb2b40c06361c5b547ef0e81ffe5f36d9606edbcfa2a0ddc30b8a548e61dbe44cd4a6ddf9b6f1481311f958db289c88d17f334a0f17368db2a2dead43d47424e
+B = -d86e0c3cd90211e48e4d2e2a2c11e3eb29adc31615739db79f56e3b8dda00ee099fab849cb83677f3e624fe65b26a8dd2dd71448d0e7194a70e48cc9b2abfaa73260353206b1569408360a166dda68feacfb92e9f47ec1d0a1eb737ce77d9b61cae1bee202cedade8bc70137a8f0
+GCD = 121536ec30d88330c55c573680ee87aa5c6ba1bfa57ecb31c47877f8403f37d82e9453757337c723ba9f10398b4e8405bb5c23b2410eb16
+
+A = -3f52d92ce99bf4d01bfe8d8e437c9ba17a4783b99f7db254434baa136cd69f62bf23543285737b1cb2eb25f47e82640a44303c308d0191b129d57e78a968f130920228c8157076f5e7c1b378c8a8d52d9bdd2589d6d6ea34f32615777616e2c92ddc9dd6ff6c9488c4d2116e89a92
+B = a72406b7cfe19e33f19315353e84d52092e77a76db1262fcd3b782812faf40cf302892a96c938aaf03b2dafede08fbd933675d759b38fc5060b9e4d18fc6c0df2048c8ea88c156ee62f929621aa58900d9acaf08acbc11f93ddde681833bb382a9164a5dd6628ff9f4d51c38f4fc
+GCD = 23d35279572f58a32bf8c310bfae00fc0a31703f773360784934631ec4d7e45c2fbf183c02db714827b71b5af149b7098b90103337883a6
+
+A = -70625f1fe61ca55407c478e469848c2f57b2039ee1a1e39cecad40ae2ebe917e725c42cb59d873518665842267b2a4f270fdb9d8c7998badacae48e8cfd47d030c998ea19a7cdfd2629037aebb6cd8a3d6c9edbfc4d7710db5b91dcae5e34faa6988728fa048275bea4133ce333f
+B = -13ed950e9b0b2db27e9536ffb1518687af24258846bdf2da04c0001ca90d9ac8ed89bec4580384fb4cda4efaa66b10446486a281eb4a47e1928a2974038cc26f862b34ce2c5e95503b051852b97c8e74c426c3aee5599b126bce7f9052b468319fc9a5b0f4b6e2f0222599c14e7ae0
+GCD = 6a1a9e6107ff8ab752c26c63cfd8db96a467260ccba0e24bb5105b0038384bd298c9d85feca738f5979be245ff94179952b7d1e440402f7
+
+A = 425150f8b168e3ec884aa0d3dd415360bd4b7dc7ad8fa9dc3ba098bcd4b26cfb751c74f65c91d5501d273a9e9727f96e51c93e3be1ca1fab1657c77e1e94ae3d54d5f13b12688e76852d6f6e5142f33ba325d927492e13a777bd804ac4bc55250061dba9d36268f6b8675678cc9aec
+B = -31769d01ed4b7660266e3a281f77bdc710942946fe95f88fc0d619367e96c2e0e2ebb374691bf3e101f4ddeaae4830ffc584eb5bc4e188c7740286ccb5e711154dce18544bcf7e2eedee03456b106f01bf06aeaa32c563f5055cbbefd214d9963990774d7c06b8ba7b5d4187cea5fc
+GCD = 1e57257d1bb7f7da39a84eb480982e2be899c5cc8695cf1689358d498d2bd1ba5c1b997b73f350b9e57d6fbab2cb604a92016893553fc56f4
+
+A = 152064b0457d1f5ce5199ed307f8d6fb2eb786a26f4baec50227ee329542c91931ec9954e9b2b9bfc02d0e94b14496a7f69da4eb4a9ac80d9ff08a03e08ee7769e7af91858d4c91d22ea0958089762994d188429c50ba1c938a79cef47cab55fafb49298ef78f73699dc5e016452eec
+B = 14ecee89eec01811ffd32ba7dd8057ebb019dce69578fbbe6a92bb9830b9a8a0ab706b0db5cdd26c73604c120ae2a1cb0ec5da42d6e08cf00ec261987ad6bc5c40a5c452eee68b9c12eb07770a309afa1bf7ef46adf9ff6c7b33a59cfaa12b0e71110e2a8ff390d8a018e8629514af8
+GCD = 228c70cc4c350368fdab7d2c11694d09573ac2f45a51205a69515ac44c457700ec1a6160aea10e3154a0d75ca606dfd36822b18cad603ec8c
+
+A = 34d488fa70f96c8550f09be15c8183b9042dbddd18e3a5eae1b749c43f686a72a74d822dd632d05d00e245ab255d5acc46b867b1174347db9260e7cf38bddc640bbb2e1ea63384305ac6736c27a8ebdda385a1e77d7f4830d9717c50f41b8eb83b6971788b308f701a18267674647c1
+B = 6342c841eb02448933ac12e4c0a4c947ad1522d5d9690df2f795e983580f24f3757c7f46d62dd199af7cd2b199c518335c8ec60308c1e024831e3c8129a05a8cd462f72291a1036440420a5dfbdace7bee8e901923a6cf72e91e3b2b8a98140488b1153057dc3324cbf800c619501c
+GCD = 26d8a5a1b445a70749d544168eceaacbc317f7cc9b6d299530dc84c17c032626645773360d62790cf387b448e854b2fe69396d9febaabba5
+
+A = -7d18102a1827dbad01bdd6c7503a2c648eaacae4d59f20fdcb5c4daf9ba50a061b51f2ff2e8892edf8901e7f134a2b41befc218ac3791285f4ad2a71b15151eca7bc0c601964b782aa1ffbd8355a07d1aee65aea46a9ca0effa1347a352510f09307f3d3fb9625de9bf220bb4374931
+B = 13d289867c1c9746429d4d0c76197967677d11574a3d6ae64cea892eb585d6a075f62c67e16ee4eb57831098244fed8796522c9c54bca379d387377b07394a209ac4653024019f37e27aab50a5ed93fc63c1770cde0bcd1e17f07797348a319c08cfe29cb021232a12ff98a7bc437dc4
+GCD = 51eeffe4deaac567e17ead80a7999402a0e206d19d2989ea9f3a3f83bc0fdcd268dda9bf0e027c1701b263ddab78ee3eb02b067f871b3fe9
+
+A = -4d03801708304d7dc21b7188c45b3414ec8032fd0ea7846e697122504426328eca1c26a4afd772304d8b0362339ffd2643bf559b426bb8d00af810b4831f64e28094c87d687b9edc02cd25cc3d4f57f5729211e535d199dca7eac80f627e72b7a92b460fbd70f1181791fd85ce8479e6
+B = -20b0610adf8dcbd0bd4a5378dad5078ee9dc3530a4830eb97dd5612f634c706ca5b49a44178c0a6d0c8c2c4ed495a8de503f117b67854cd32ec4dc8495975adcc599809344e615271413ff7032d43e9972b8442176ec8bf92da77ceb6072d95a2fb3a09a41225b24b50e48329b718696
+GCD = a191944a20a82bec1fa74edd6d9beb50d804b4e34e407a08069b12866ace83d284c0fa7c43c89e08f6b78fa7fe823dd1c5e64b42ebc1b682
+
+A = b299f79ae9db91aac3bbc5bf15ef8304314bfbfb9fb9c64957a0b326bf53969e8464a36a6915f4d03a7d1672717153ed94f6c4961887a453e5144f0f3522fa1032b516293b1ef8e336e10fc25c9e0ef7592ede46ca2a782b9d8943599b8187c4abfda919082ce2954d77068f9023cb0
+B = -fe2a56f915a31d8ac21e8fcc6267fdf5535a09ac4d600506c33758b8eadd10962130d47c149939848c20a859a5cb284b9aef71eeb51398b47ea489637c68295a968b572e179445b0b29ae086159f6c4470983f83d7f3bae03b6483771d775bd415c3872dd38b092309f660e4955522bc
+GCD = 344956c7e865b221e4e877810c66da9ff1393c6c2ea44236fff666255183f925908b6a81ec9947f17cedc29b2eda873703c782368b0a41c1c
+
+A = 21cfcf98fb4ec6038090493313de4c1e8e7bcfda867710ccabd5b54d33e7f1016ef527ff0745c9df0bd1f1665a8a4cca400daa44a69f89aaf21503b264571725680a8c6b13df315766cc3f721ee56a5f5bef3bbf85eb4770924950f9efa90d6a0275b6fdeac1b53fcca3f98580c977075
+B = -124cbdf72fd4b3a7bfe1a0baf4eabf0a5e6786cd0f3c39d2bbac5f32d76d937d035ee36ca6da6178ffa3922d55eae51545f7712e77667e4154c54ff1e9b7fa2b3856002883ea4794aab1efa4979647dde79befcba839d49834cc7a4afaa7cf9a505983cf215380b5ca5b2bb07380d1643
+GCD = 235aac61a6f03eee5ceb6aa8ece87f79b7c3f6ff596765226985d4f870a84ad61ec3d501c0e4486f1fc65a02cbbb38b97d16836d0b3722f8b
+
+A = dabfb52277153dd079e78ff48bc86e2378bd7c35f9c497ca2a58c1a598bc9006e1fc39f7780d45157f07951b0baef0cb73785554061295bb40bc4e0366fc2db7debcf25950b5216e56100e634a6e099d0f1318f63d1b229059d7fa4b08bfa765fd21507eac0a0ec19463fb47ad53d4350
+B = b2cff63048095d44bf3c30c170c9b26356c00798065191a4769e61ed7c1bda05351e001bad901f7af6f069298a8bf232e26853707ee4df12be95237b6655b0e1287e82bbba085b1fd11514a47a87993e76fcd243e1ce749987d1f207d42b204b114690fe649c7a1e2bda8cbb330a1f2c5
+GCD = 420c41343d013942898faed835ef8a004a630f47818afaeaa0fe78395c1618f6867bb14c654a1cdbfca7668b75179f4f9f09c72c01625ad35
+
+A = -592b9ef205ce4cef0cfa8d53a550676c30be5fa85997d8f6a5545296bb5d2c1037cfefa15d7cae50896415d061ba41e00364845f6d48688f0be62c6d88cc74ecb0aebb8d8fcc0fd68bdb49ec1d80c936f707e46104ba1deb95d8cddc248e1273da2e4d0cf76ab0e9f6058723ee57317412
+B = -700104497e0af12aa11807e6e038fd35f916e3be0ab45d6dc826b52b86c6e43ff208c627e6f9674ac508997a871f265fd4f6284dddcf55053865ad53a2e4f00c4b1415d6d0f0e666ecbb858bc71737e19a525c5719ebc2265c5f96f4569c02422dc778e11c740027eccbb2b26f9d54af3b
+GCD = f41da4e774c8cf0411518430d1054e870d59912627a6071b85a3192da4b53be9f945f011e281d8268ed10b07542166b9235b50c1c27186cdb
+
+A = -127986f90596211f77b9821e753c5022a34d784427b4a4f30ceddde83fe9d20abfa8e9a730e28f65f9486bdd6d3f93f54f929af03766c3bde25d8fe4c881d731df113b212e4a5912df537996428f23ae0d2c731923a6780b556077c52d7e65a9369473013457e3fc2da148c80f55349e85b
+B = a0af148d46f9a054a6a2d77b522194db82712645cbeb6cfa6dcb60d658642b8e79d03d573f174b414d2b72052e576ae17d4d6df311e1939c749af34b6dbf45704c0243bc304018ae1d4408dca0f84ea0fb8b68ba142cb25afc1b7fa5d2d27697d05d8f2b0f48a29252e6bb668e554e47b2
+GCD = 3ac63917697d8b851e31e2707246c993f3905ff5064ea40b48998af1a17b837cbdcc36ccb84dc66b46d568e1c86b48e58e96370c08fcdd64ed
+
+A = 21800697751eaabad7b50a1bf3a886531c25868f98569111d287eb0acf3ff9761da66a855b86f1c1141aae8a024ae4e9fba7bcf70e52d29016a46682a3a65766fb2de223acc3de7f23b27d7f3711442f969036e3280a9fd0d5eb687e268c89b1b06389e844e9dadd3ecd0cbb85ed00e66f4
+B = 50ef0e0ebaeff229e3dcac026ba0393fd80c688141ccb394540c8f7aca1e346e01e51c13b8e577a21c81ab647dfab32fa891b208bba4c5adb62e1caf925481db460d34e3ad2601c3319d337072254cf9cde7a686e6c3a3a68f8296d48844389c6ae5a4f1cf5001b228c86c67c4fa61942ac
+GCD = 3c0964d9a5bbf5f02fb5f5ca166c87c2d95fc18d341779716bacb3bb6fac8540b89a7393bcb38028d536abb80eb8a6231ebc388de445c0be74
+
+A = -9be4a14d2eb6059ce4fef51e508f9dae6ed8bea2601e7af37d08ce4a25d4e218cbf6ee64542b15e63a4e9faa6d52844ecd5c0db9cc6abb4197fc391a6487df183182edb387ca71db6bf2ee0cca0c95216c61c3317e0cb2004f395ebc418b772011e297afb323ee66655a2b89c557f3c22e2
+B = 142998ca35994542ddb4477a2408c608efae341ae411f9713bdd6e2655183cbbea4f8d20fdab6dba1d842e11d78f7ff6a144996db296416dd1ee6f7fa6857e7b8566d412cd6ca39ed61f5d40e2db3eec7fe8932d71392b239238412bf0d83d7026d912fd078aefb384fed5ec686838ef442d
+GCD = 75b9053c7343b6dd11be59f1dd9746cf1884b74031ba76b3dcff3a23048c77468950c08f082708bfe8d71ef6d379c69c5ad93d5611cb7ffa23
+
+A = -3f7cc2e64b2b17a3118cd9c6c4a466492bad86b6eac6d58539112e7ede1af981c075f2804db23d9d8b30144d7028dc863ea20db0acd2787d05ca6d36010e28683c95e496c96dbc32cfa2eb7a516ec5b02093fd4a456673c8dc4491651d7e6fca5ea099ca84c82af6f4140e0185139cef5e6b
+B = 1cfcd5f34bdd9cb4697c8ecc165f825dba618954f95b24b71413a6a40894a09d6e4af422e8d0f8f681eab80629be55c0f3a728710126eebe4cf08df78a8ff5eeff12ef1e6558ee05a68f23b92b41e973ed4b72ace6c27519d860d403c3c8a50f6c28abda9e112dcab848a7ce9f07896d218b
+GCD = 8f94443edcee33f32a03e4d0ac350f58b1037fba3c577b68536338fd921a14f16031459eccc515f775677625a6cc8460a03e3cae9071ec4389
+
+A = c87607c87d106cd834f47c0b318b2cc26a097d867e8a2d99a0b57dffbac2a81d9e024ab10975831a2442357dc6cf51db46d0875d26c47776a4b7514e04834d2a7415ab493469617ddb3a3daa42f6b63a0d3945fc88d966e590b969d0d0166003f0f5b87120b82a9fdc2eccbea167263658
+B = e0ec85385e3444b998d097b598f14a3a8bb91507df297629c9edc8cc652baae04e4d2ed2871eb0350d5601f5f005e184b3123d97390347e5ceda80c50bf866dc7f5b467646b443fb569be05b982614c630a6b5ddf869067bb6b00b7c2685a3c1404a35fc5d1adf9922b0a77ec487f6f37d4d
+GCD = 1ac13ed8468055875db58597a872f1923d65aedb6d06b7d779dbc5890815070172a39b7221e701354db329a1d6d229fab23300227bcb6bc7299
+
+A = a8a5ba7e7aa9d60ca7bd3225ade327db4e3a2860501d0c06c2f76ad323055c4c93762c9f9de5e4f91f995f8c30d0124b29fef4b0b5f044e036668488d4524b51501d160809379eaadb2228fa7c72f12d76ad4a7337e82f80ccc4b12040a2dd2bfa6b04b3bc2367e9952b1126bb41b8eee63e
+B = -4b1addced3750962dda3d623895550cdc136a3d8735fd5be0042dbc9b83266f2a04afe7631efd1fae63e07b9e326247d742837187c8391f18e90fd1c8e89ef56d76ef33e9a62d7dd382145390e45d21f968a5bbb98f137e8bd4c12c05ce198722dae28e6303a8b06410964e72c86456bec748
+GCD = 26a41ec2520d0e53241e1ead9dd430e2d0f463a49c2182de48ae651eca7beba2e348227c5de45971e8b50ba1aa77530fa9637ad890fa5526282
+
+A = -74d746195612d73fb3a87bf0b0aebed276dec5bd53b3f627757dae7da2ba904bad275b235fc81cfae0b620b99f8318aecd8192e0ed0d619fb2cb3815ee34d613729662ef3871c05ca2732553303473b92cf56d769b0db68c4d4203b6abc5712f76fb84d26a9d1b6453eca768ca8fde5442a1c
+B = 11a3a2a590175cfb9a35b38b8252aacf833264262f8befdc6d791ab33b7607125d5f132cd91318c9a0f7649d134dd8bdd0d203c52f0496844673434e5fdee36b5dde2d443f120addfa43509c3b0b1751ce854e8ec38ec97a7b3c1c9a9ac4349bde3186b5c574f710818f03720c5ec96e779894
+GCD = 61ec699a16aa56f2bbd6d54545561c739e074230ed76744d5a6a7d6aa117b2b20913ff1ba1ddec41ff4586416c2c525e5b70b2d403e8fe3af74
+
+A = -6ba555e1464e72531d2e5f1487352e2b2de72055adb71cc6666ba9df2208fa8b1039304cb0849bcb00db52033428c7f269c6a5e85ec8601a39918f0d7b01728b47133ea490153be3afba1fe7ec3fde13e0cd4cd9e073fbce2cedb17aaa89e6744ea5fee19c67de63db0db704df33f711535933
+B = 4b380882d27f3eed43f69fada8e33c35d455806352dcf6368f270bd7bfa3339f55c7cee88278b7dfa8c353a019da07f9633f08b536b5423879e1e8a00a7b2990fd3da07e0065fc15954dd625e9d5f9657611b80e953f7ef1d07d09203efa52ec0e94fd9c4378306339e2eaafab831ffa44f3b5
+GCD = ede25177adf92afc77f73bcd13c27fc426c0e71e68c32b3626c1c85d88a3f61c5b613aac5550d234fcf45c0ae8852bbdc809d88baef414f950d
+
+A = -1050f62a8d1afa340bbc96099ad58d71f3330761fdb0a7ea85d0871cf15ca081d7dd3770864caf8a50109827992e23c6de993bc8f2753780379ab0bc6a8d0798dd8ecaa32ee20dd68ef9b3aadac8a6130141b1ef8c4b4c2b5a6b391e027845f866b9785eef0dceee47f8870643320f1f913b6c4
+B = c00aa815a83d0697be1ddb85f09a7fc2163660417e4d78abb898cb31cd8392ad78055a819e6103d0f57154427a7c17012da60a55c00e0e446f6222cd66c713432332a5746fbb1357cf402bd324021ba60579e8569db17cba9b0bb1d2a3be9979410ef3c45dcf1c30bd51a8f0d191bd219f84d8
+GCD = 15f18faf0ea0bc24c457e024f1732f27faa740b800c85eea7f33708154483dfc13bb31bf235dcbe05c19360b138e793149c2cc867c1a3012c1d4
+
+A = -1e7c9043f408ba66ae9e516fe04d091f1b4077710449ea1252b6079292382674cf42360dbb9cc4325fb2904b959f0f96f3e4c189b2a54c5a7b2bed28994805dd81ba88ac42f5e6d515abfd23c2aa6834c52942c4ef351e89597d5a746eba26922504717aa8ba866d596d3f488df76b319405cb0
+B = a39e070db3d12c0ad6d16d0f467743e93ddae20105faf38ebc0604b26cb72c8a5052c580b6a7d9eedfcf6b4dc0c7bff0496240aa93cc161887361772dd917fe73011598aa615d074cd5d531819f8371230915ab0ffda00294c2bfd685d0f2af6a936b61442fd989daf26b45f84c613bd49fd8
+GCD = d75b588b75784ec3f5f930c160b00c2e754134d40a287a0055220c2d44e9639f9ae678260e08808da46da6168aa0adfba9efdf911ebfd025f8f8
+
+A = -10c2cb320c2080bf10a8f7d264c1731aa43c9680e43ec0f0db17e95d525e77c7abe8bac779013c56e7cf9c9719e8662e56c7cab18dc9bc0fa50017de1eef3978715253ec9572e5d25dd15116aa17b21afe28b1724f7493443d811cf0413a8bd0f19083d3924d4f06356571631b00bc7da09e5760
+B = 89143b96367b6ac6575b3b43af2070f5354b00380e76d261029cab24f6affd0cf0ea9a834bbc066e577ff74c0f3b83aa378268599ca1dc6595df5b9c1d9c384c069825d541167a1f8081424ad4a9c479ad17bceb48c6809d6b6087b3b14f7cdac43953c5e43afb604f49017582c80c6e237bb9b
+GCD = 479a4629dd49cd992df32e7061b6e633d5b36f7b0bdf46e5ea1a58957e768322b6d50dbb7cf465b83970dd1d18db4425ef00f4fe15177d19a741
+
+A = 137c584c2e3e8f22402761826526914c94a569bfe637b4c445db819af68bf59c9c4d65f500b5e217fc75a40aa716f53881fb754153353bad32708b27e09090ea23655bbe48eb146fde3b4bfaa18ddd0b0535df0fb271eff6733c295a1e88085504a5f19eade18cb7d6b621f91b3dd0d922e87b79
+B = ca574b12fdd29f9efa96a0bb6927a1e6f5b6079021d272bdf0d3af8ce5474cad90858d5ebe6d4b8ba5bb22354dc3f09e7c02928adfcb2135a234f22a33de4d0c3f6dd76213246471aac83e35433dfaf076aac8980f59395fb1e308b48d7802978a9dfe8cdd6eaf7689a140577f59af3e9ade8e4
+GCD = ab2f03c36ae261dfe73fffcab8220364db9d5d6322eb47b62f0a2fa7bd7144b04d9d62c7d1f2dcbf99678a83dccb63767731600ebc4b151213d7
+
+A = d9bf4b25b423b8d7f918d7c84db26043805edf5dc666d50e64423204d034ca0e04c2196ff6e50e6105d82ed70898e4db5465b94df304047679322d1dfef4b9ccbb86266c197dddc6efd7cdae3f4078bba6f516581abe247a86402e9547017831a27e2954d81af188605a78e9cafc4cce01bec55e
+B = -11664c1ded93b5b17125bb9682cc1022ebe41f2319df909435dc6ed611bbd20c80ef7726a86e7a66e9e924d494ced304107b3b9728a2ca0d5f23ab395c464a26060b58b3c8efcb1beceafe4df58a4db516658b67e212bcdc9300878fe0136b5887c9e7b5c2eb4f1705127f8209a7055c505bda6ca
+GCD = 2dd732fa3470ff80786adb0dd19531aa95ae269ed7156318e468a6e3a4c1c8b4372f43cb7dfa79fae8aa6311f32e4a4cbdaeff248dc8d7ec15b2a
+
+A = 36c86a4c4768f05f89951d00fc1599efa0b6a9a327dd5299218bfcacf8b8aa81c0832b5f77ee061c25dc5f73255467d5a1ddfe05320c33b777b9e4bd5d09bfed75105049e3d55bd90e462a42471519ef6227c7a4f98a3412a89ab522cb8f2e37c72a11d38bb2e2142e2454326fc6707d90953afe0
+B = 3cf3f312c89d5154dc4372e89fc024f3bcda08679974a475e02b32e5892697f996881842532e0adb07186ff59a76ccd64b11ce27c2c54b17bfc3a2959e58095d75128c3cb7c036581f7d74075100a009f52fd16281b264a87f32df8f9da2efe5287eeaed40a7292e0efc12d1ee73fedd4deb23f4
+GCD = 3ab23c322e9cfcf456755bda46951198cda9d5459a6177bfe06156d05d7f7c817fbe1a335ff09e9bb49841d1e43239792b0141506080b3eecb38c
+
+A = 196ce36c230e58ef3b4567eb4c2a57c026af2e65c3b63b3d34b9410f2b8bb210409f14fb93aaf1028066239f18c56d4b28490acff831069dada4a6f93f710ee20990ec07bf754bb67f67049f83fe9ea9d490243449454e12cb73c9b7c247fe03b93a5d95802cef7c2c700f2e89cc74d50ddec3900
+B = -73ec289010c03b2ca31ae5825b002f8d2f8384dc674d53880a50e289b84c1c1a64bd78e035f8e952d8e935332d271ac50917603e334c4ddcc74c0ef7c1495a3b586a63702c5d34f06db2b36b23150845b659c37b397d0a4c7cef144178a386d28e5766837d9a0e374072a902e5be3852ce0519380
+GCD = ebc5468c61f0fd4ea0aa687dc3390778f8c09b3cb3e95a4fe30a7066deb667db88730d6331b3bc1cb47616a46a0c8603a394601becd29a815ef80
+
+A = -2e0e5fc49093a906628e9e46db3e1d740f72a572cb3407749ea43dc32be2ab4a0f14580c29d1a40647c2e778c68bb49cc0419ce9de51c42f2bbd77d64344bfd7f19af846f1ae396961a5f28f8cdcecce1a9a7e1a3624757a75127d047bf1bb4d2ac151760399d9c64d856a89c65019d7a057e2cd80
+B = -11805337a04695510025c7c8583a3b4e2ff969ec75a899ef5f359571c49467d2509faa0ca8009af84798da75632607e1d181a510f81d3f9a3af6b5cb9947afa71bbfc3d9f715968a85375831ba72028299e33f7e4f59b212079cf2edef2f5e18715c4c1e77e73ad8cb0ed235b73398798ebc12bf22
+GCD = 219ecbec4d671fa5b9eefbc8a0fc5ebfad06041589134b7f8559f1c6d5d4ec9fcc6e2fc6793a17323931dda067420067b08eddc8716cfd8bc7d2536
+
+A = 1698769009b130a86faa6cb25aa286d770892edd267adb3b265958c9a49dc382de5361e9ccb26319cc27d16585ffedf0637958738ccddf7bcb5280e45a1c323cad72b34d022f59b7ea813bfb650c740ab47092cddb5ddcadc880c9e5c3fe5bc7c74caef8b88b264bac3632a9527e3834b3290df6403
+B = -a23b83d8eb0993a2a9a6011030177c675fe0cd8e0757e502082fc9384a39c2dac8d4056128d89c7bfc509ef29a818b3ab9da66e781e28010522ed625cebe4172ceeabc0a8191c0db4f9e004824631afe268af7d44e1883e07f71634aac006c60b82898b932e40655d87af6b8bc72fff4d17172e043
+GCD = 184b8443e4a246d6b8b3eece09c8a2f46826476cf5d02645e763fc82d915a4bb2c90b33e45e1671696ecf6c44796d80d00dadac6b1237b76096249
+
+A = -40f89a0e67f77eae8ca0a49f0b66df0a90d75f7cfd08a294cea5d594daca79c13f5d4e74dc31554daeec693ab78378f5cbc2c4853809cc485b43eaabb7fa9265adf3ac5497adbcf2bc746a5023aba4fc8cabd28938a1460b2ff122a3cb3f1c0b831a86e5419e106ab1b4e3b1e38cd9056f36357b9af
+B = -362fefd818d1c5f2a76ede54d0be2728e32cda5fc535885d8f65d90e953a58808d43ace7203d95b125f1308fdfeb00ae2e4b2002c690617fafecffcf5cbdbcf69378418fbe71ad90956e358bae6a0d78d4300f8c40b2382348bd76246169081233991d7bba235c4415c3b640c2df06c8cca611aa8e3
+GCD = 33ac061690bf4548fcc29a05f2804868dffbc0ee311af714fbc873c74b35ffa3dffe04b649bfadf05fe571afdc4bcd1609fe83ddf576c5ec2734f5
+
+A = -15e1f05c1381306b7501c0fea671598fd6cfb53b27778e68e40ee79d0b3ad33d3ce5123f99c1552f2aba31054fe9b579d3d78fa63619c4d90cbb652fcc2e68408046acb69cb1a7b57ba420c0ecf57995d3fe1b970062f17a1c35449e7908da32875ea9ffa886a373179992c9f57c919f756ac2150066
+B = -d9f6b2044c6f95f5ce487ff5cb732670dec617e3740985acb5996d385ab7cefc4f675495e353c7ccb97e8902a891569fc7477c37467ab90236cc0a5e7093f2b477ce37d76dee2b922b4bdd05d4bb214626eae837e72761c32d6769ac9c5d967dc99c4736349ac0ef155aee59cfa4140c33b7504ae5a
+GCD = e9493f51c5342ce3613efb829673772a28bd4425e268684c0286382c1785c1850019927be3aa788ad96ae463162cab7fabd350721f14d628902232
+
+A = -2038137c239f3a7f9e9d2ed434c2f9492350f945d4a4950290df0a156cb94ef41e6a7942708b49e258e9a614cc9dbc7f48b1757192b651305e9ec29677131c636005ce1ea36d4d4d7fc32bd341647f4f842ff14a78294ebeb16fcc44a9b39c69a530444bc0e52a6d79143e846d176de1a2744273d910
+B = 4865069b26c718f0610fc45bbd1dcf3d3f9fdeecede27bf6ed8e0be9a8b77f9e1313f17381120d5adf3880ca0a608308b238d1210a2a7af3e2b4acef515991a4478217848bd46276b74fdcba352d426e64d36d4df5f6a89d565802f6f1a6bc5345b5a065294453e17750713b6465e51783632fb74298
+GCD = b1014148a7ba22acef4eae05bef50e7e45e6ccb04a459ef6f54fa020b8a539f9f47c6ebf79d343af5da7234a55ee45d721e4d5e0b798af53d5a268
+
+A = a35858daa90f4fe0fbc8972983f24fbb68efd917ef8ae21a8d2c9d62d08a6e5da13c5cb5bf72382cd411c5eb89ba63edb54d5b34a193617e6b7149d94479870c8c1072acde2eb9954b51e628358246def27e863efc55322a28aa2082d75c1865a0c7e128a241ca0dfc97c6a6956be06ea8e8477afaf4
+B = -72ab83b853b1fc47ec4f0fded9a2c281f3d4177415e2bec33026e26f3cb8e88200c739e142074d9714407b177a36dcf3c36070063d9057501109ed19c3db5c5f97bfb14e4284f6fc6bcbc9768f4bbfe1c9ee1c3091445f862fe56f8e8bfb8db2996b66e647ed728c2ba3ac7c04938a1bc76b98a31af0
+GCD = 6cefcda22c30ab0fa89b4d82712356d12f5a2672e0d31687cdef039b9f2292b305b847c330e759e3fb5c276ad29ef38f2d60d790e70b1faf83d4144
+
+A = be345e8fc34a17284af741c7cf0d885d1042f48ce5e6475913956cb8519d3506e5e071db788ff6f81c9917b1d0accc7319bf348bbb399ea22d99ad96c76fa89d8b6d4a3e0ffbd22502e3b018cdeb4debbed4269ce6f74dbfbacdc3f83632020960e289f247747277f7336b589cf9f83854553a5bb860
+B = 34131d13ad1fb2c3621f67718a324c4db373141d906802e673bc0229ccb5e205ae6563848fb218d6ef1b1cc97008836e0eaa6ea7c9fc00ff712c3edae0655ee7d58d7ddc03f8475c2b5c098fbf17de0e97efc8eec654af861861c493b57b76d3ddf2bf4b40b8ceb0e2398006c16d81b59b050a1e14c78
+GCD = 2fcf3e304ee24d66dc7a8c3bcf52eccbe508e3c12f1951407aba77cb8ef367323fbbeb9b7700ac96ef08909c94a0154f66f332ad480103a7e6d8338
+
+A = -549d7d178daef5cb05e4e12fb881d3c0a49bfa37eacc23893292b7293082eb86fdcec97745af18aed017d7110e839b3dd907762beff45f5630a598a52a893e726d229e299c4264c0ad2fc4f54bec747537cca1a599ec4951f94cd343434b0bcfb772e91431e22f2892cb280c7fa4b43c5f3538c13fb4
+B = fe8666fddcab4c9520dca891c1757451b778591213a1943ef85f9e23f85bc4db4e1b0d5b7cfd354c84de41c675460a7a20e934df07ff30f93ad00a96fa9990b88caa4754d17429d04b8f3adc29f9d0682cdee2cc783d928cdc154e1b4506d6ec233bf14d0a77448606adb3df648b41472adaf6e86d73e
+GCD = 4ff01f35a245dae14ee3fba70c3f06dc40007a11615dde076a13ecf5cee7a29bbdaad794f4801bf089131614b7a7b731e27c370b11a314ffe2c8442
+
+A = 91fca0655d985d0a48f61070f899e9b1a993730a4e050df46dfcbb87853657a4807c21c14027bb72ed58dee5fd378295b5337f67070a9dd10162720f52da293f28f9f821482ddd2424a2843a7b71011ac40b9e9a024787563fd3bad45132080b8b7fac2525817a1a310fa74e4e6b0164a3c2b5a6d31f4
+B = 49f9fac8189229122779f80602d45d2f114011200d662df9559be0517551f2ab1ff7c4f8cb40ae8c453e1b3f17a8e1ac4ef9614438b8e65200b45fb1555a2f656fd2dc4e5b70b1b8aadebca59fb7ea51b4d28478add3a75f04239125822725458d404d9b0c12c2cfc7e3e3296138532310b7c19a4954f2
+GCD = 9c41888508264fac660b6f13049d0d8aceec75df39233f761f775845fc57ee9991c6d643341da4397ce7b37507c485dab704ecf30fe3375098de4a2
+
+A = -d5636b21254fa09a4afa28c410c7f054d7a343c0b8b02af5bea4b436e50a7d365b530f36a61b81eb888c0cb117e4bea2a7080f238e0337747b3f6d2231e229b0acaeda580528c97932137942c84c5ccf79a88307ffc885e16f44e38b6519daea34a9f771dad78cf678a7c97ef6bd02e9b7b5cccafc3df4
+B = -b4bd518003cab694a4a5a19fa86de14f2aa94c473d24a1daeb1693477258962812562228dd9d7ee8cfe94d26296c081b455bb5387ce8f2da1d32ebd6eb6304e766782986037050f275f2d183beb5193f90842d765b2629107dcfca1622666e5908b0f1faed4fe4026f305bc59e64b8a3fb4ced86dc07e6
+GCD = 2d7f650c9ea137da64ad1ea979a9b37912f8e5460246790f9863c78664ed042c024d22dad8909db33925a5f96ad33ebf72d5fe5be8851dcac662564e
+
+A = 283369b25b345a445db025a9b3ba8b4b16234dd03875c5a3ac716ee7b5f903c7687ad19181e7e3ee928af8d4d29f03048172b84c6906570d27b696d395a16d0c42acf513c1e7ced504cf4f72d057c503800096bc9dd79f87ae34bd734b60b6a9939bbdb30e0268a5968d22a82a258fea497449dc5ba456a
+B = -216cae4a75235a114aa89a9b4d6a5593f17f0b1990297215f213cc9e7a54c67c75289a09db8fcd668d75fccaffc36600e4030b40511e35b4d2c9efdb37f81dd082794d6d14c9d8d8651fd279e12262571731d8e1aff6bcb63d789f7393d1444ef19121755e25dca10c0c21844e16d0315bdbe1f4d2b0164
+GCD = 31303a60581a3924d1bae6e9641d022063e9278ffcf08a2d1a34b65fb9f9578a6f7d4e9b87fc81fd3020f0ef1eb69ddcf49132744d25c096c0e5effa
+
+A = -128ffcd17d717821707bebb8e9f981bf88520b709964c42ed568feb9e18a53c3fcb2b2147d01a64261d31b3c1b7528c21376e8437bb1d255502785022bc3e0dc8787f73440b91090727a51fb996b61b9ffdad9c43e913764839dd982bb1c9741bf905573e70b6e7b0471db298c85e44ee74c7412c06b59d4
+B = 1a771b29a19e8be7216cb670c57d2801364f682064a0bd9a3356a556da2e47b7ed08fed6b7bf16c53745d00ed7fdf6423bd385f72de2e396a1322453e96fa941906ec6ab3dde3c21be503025126d58559495f09b57c38a610b9d90da1e0d857ebc8258a43544e617a730b3c97976492570f969312b663aac
+GCD = 2a4e74db8109672cd0e1b4c45f1b59f67a4fc4f7040048f56063d6e844c5d49412221a155848dd7da30f52d888c8f81639dba4beff684c1e22c786c3c
+
+A = -4e95166758c14a62731988165c67fdc3bc68b02d52e9af110c0c9ce4e911196f03217f8a7d54a6d12a61972ca1df4c8bd253674c847ac159f64f91a24f8e832309199736eca41e407f18f2bf18ebff9fe53f5de87e8d919d544150210014b7690bb006b09821d1bbd75a77138ca8c8a8ff1f5448f9147a88
+B = 5926e17df70df20896814a5dd08d6cf51830019d36b136c009136d518646fd3a77d4ce7dfc1aa9c33648b7946aa65f88544d608af691914d29fe4c29f60f55e58a2171e339333fc32a31edafa568b29590f6d1dd29d842774eb6701dcdff04a91e58d2826c2f024653ab3c92dabc011bdd0f76c03e6893f4
+GCD = d575d16c240a93ee16b05241c69c85edf9d11bb5a24baa9b06818a665c1110d6a82229312da519ddd652ab003d10c1ac442e314bebfc786eeb73ad2c
+
+A = a2ca7519384cb080569980a1ae22c782d773d44452fa405dd3d606e0b43911f82b8270ef948385f814e70ac095eb0def562389a867b042d3348da5caf5d584d189f7f26340e4a08e12d1b1206be7abdabe6ee9c9d0d7b577dbc20f8814a7e04232a8e6b61f13f3cc8c8427003c78f370c45a7b325e2f1d4
+B = -12a401e8d906beac59312ed0cae4dd6ce6a745022a1a704fd492541602d38d2cbfb6443c77eaaf9cf1ab4a2327bb52324be9381912bf538dc9e4442959482c40a9567b9fa6989b652406589dfe2f02b08ccf39cba85cd3c1061d42c905fb369af3c764f30cdcbee7ada624cf5d381dda68ee2dd203e98ba0c
+GCD = 1dabe7e5fc836920b45fccb0ee6fdd36b9b2f5460eff40980cd013c3adeb3fab941215034d98361fed1f3210230189bc7536bd3eedf379e1dd24ab5ec
+
+A = -19c0879ba44d3e3972919ebc0ea6b242b121e593e817682bb419488717726083267cdfb5d9f5f4097d72877b935d973fb224fc35bfa3bef5950089766810e4dbacc04dc528f724d5e848524910a69a01bc899d194de5e3cca2cba60ad86d2bbfac7509d61b8fd4469b64c4ac1458cd48c15b6f987f992eadb
+B = 2d8570618517ebedabe68659fc76b01ba278df8328d75c0fbdfa1530c21910f4e43ab6230717077c8aca4f418270dc8f290c7310363ded726f66de3c4e4992f76c9c6c26de623a32df133e006f5455bc5c72061e321e8d5d1469d937c2337c1299b5ab3822654cea10a503d1dbfa869aa4ceea8257da66bdb
+GCD = 3594f8ff717c30f4c8aabe4dc8086b79330bdbc7c10aef171bfaaa28eeae6663a448157adc33004ee5e9dcde8f2c9d16c43d0cda95b29bc75a5c49923
+
+A = 45896611f96f24b3765d63aeebcef9dadedf84e314c926d5c782da595c2c8bc4223288f616f3456c64635cf84dc3649c6040aa993d13f705e459729661e3ba0bf02a25f0f9108d47c630e92824f3ee76346c7d76cec4d6fe57e0afa67aacca8d534489a27fb23d10a82a44b315b2de982600f6567ff92244
+B = 12b62a7a4e0c0d3e830ce467cb87435d4b5162b780e13e50301fef5c3fa3a61af15d7122ed241b6771b198bdea5f3a38525f94ad4036dbe5fb86f08e40b5a9e0a5cac30c46896745afb52e261ab50b5fc3298e4521e7283ed210f697d5f0e0a69414774e5ad82830f1c56b154720b1c27946f49c00e56d99a
+GCD = 4fd3c3efb8a8108f78a32fa3de1dad6eaf9c5078dd2985378938d6c3f8fa9ed30a2cb072d8d1c430bcf6d45f58e4a6475870b563bb72b945f69fb5682
+
+A = -203c075e25bb76ece9bf8441de82b86e2ac215f4e4217894709b0256819b438a45051838410b7c32238cbb62785e3975a91d77286d584723fb3a0f598440904af00dc055bdb1931fbc8d3fc940e5af8f9d9b159bd2be17607be1d787c411e25b1e014436ccd787802474015c78a49a6e05de42c8d214722814
+B = -5410706a185e0febc19bb3e106d146c1cf63f61ab72d770ac9048c6069c665423216827721911e7c2f2ef6d0c9f2223506e1d3ae5e0a7ad866d7d2e2d1f4a3ad7f966f1ad2c8584146c30a5884f3c45caf60d784f2544541fe688964d3661fff7b03653de7b57543b6990ba4c2201b738ff6452762b65d31fc
+GCD = 1cb76da3e6d75f90901e5a968d994d467180f26eafde55232c8dd72acb136bc044b2b1a1fce1e93e2ccfc01d00e541e208b8092ec77b7f1afce9f6d6ec
+
+A = aca40d6e53c58740ecc2d8e3faca8590390ae0fbfc634c065ddb53062164cd646ac2aa4dcf6107d9a6c74bbc013d8da5cd99ba62e5e90e6ed44dc1a1ade96d402d297a265a4861c2d32d2edee48c02e20a38eef1a7eb698661a03d5f1f11d0c56ff71a34110e5a0003fa83329cc860eb74347e86084f806ee5
+B = 213fd4fd30cb71b48b070590f5e32e479dc5cd3c4647a582e7a259e59fc50ff12d086a637720ed9f77ea7496e233932d2ba95d8375d09d0a559bef64cdaa3e5c3d635d8e32456a9c0d3d9182a2a899de5916a747c5c2493bbae171775d8850df88341872547766f8488acceccc49d88988e2aae3a7942fb005
+GCD = 149f0d624a09ed71cfa35f28d42e0d74ffda6b91a522ca050e3b51b85c57282b3c181ec6a3a792b187c284e99961ca8c1fda63b1d44b48c6d1857a5275
+
+A = -251d8412b8d830274ae7afee7350de4a6f85be2f3137544e060c71da2a134f12a50a12d5fea6ec9f80184c11142a99453e42098fec72c6a7138094576687fc501833ca08532fb66c4c67183c0d1aac05257b26dd2ae69f26bca68b70fd5aa74a625b0d2fd8b3226ff2ae84a2831408d9ed3d186e2dba4e1cea4
+B = -2049c4a7415046d0713ec915d86ba58fe131ddb697231fa35daaabe60bb1ca0e59429062812706a6bfe543d0c659bde19af203666ae289648f068ab574e26704e156c0146acc25e6134c59b070851f502925c8fedacc7a71c4f7f1f6986cc077e80313b2b3d4976a265ba108b792e4fc24a446e1774012386c3
+GCD = 88d12b39d37215c55f3c5d8fbb240c59eefbb4ea896180fc95e7c82bf4125b10fb3e3a2a80a08e8300765609dcf67d7f5672a7c8ac1de07a879de4a243
+
+A = f83eb1415c011049d463038d7db7af6e1557f763e723021c14314cdb37acfe2001eeddc8fb8afb676b2f8f1e1dbf78808c5147b4feafc8c425fc917c54e5b60af824194dc4d2a50b74eb3b14dcc6e99c4ffc068efd67a3d4886f85eeddea92aa09f58199b560d493f6d667ade709d6d469a41e1feca789cfae0
+B = ce7e7861e1c786e9d7e42c0a7131cdcaa7b36cdbe8458e2a7f2d5a16b3feede8e12e91ea24fcc01a832866ddc831f044053545c6182cbf2e9e1e1f6d50d1394920d64c99ac6071b8b8ff8a62de638c6904638d75add920bbf06c79929d6a44a923e60f9c1b9330f196b69571dd7e7397939cb91f52372a97a14
+GCD = 738c2164f5ed456dbefbce33b22fb44dcfd78872accdba08f621b79a78c2dbcc7b12ff67a24f15d183ef1fecb37ae1ce305585b681e83eedcb6563a65c
+
+A = -138af74759224667b0149821b2d1622437a80b8306f243e0f03fae2dd106004b18fd68cdd5a2dc2a2b20678c0cea6b4423154cebac3374880b58c2895122daaafbbba75540b31324f36d26107a32ea056e2bee52234a3f54cb4fc81f75322f5826adb80dca1f416d859e8ee48b6fc3e6962cfce88e89371cf3af
+B = -71480328253bafe5b9968c0a3e6871949eabc3acd98096747db188fc534729f17f564c5324cb6e229e06bab4ad4764b66a0c642ee4fdeeadff48df016f57dabc378c05a348390e9429f49057bb09754ea803fa3fbdeccf8b459733bbeccbff1415241a8c14a6b76a82afae5e71ce49c84b88dda7896e9b92c08
+GCD = bbea99bd98e6a6a293dc79e1628603b7ccd0bccc1713ea5610e1d4e7bf4cf41aa73e4ad7c86047b7b756afa41762917ba81414bcde22e573e5d38be4b3
+
+A = c6ecd02ebaa7fa09eb1b4bab64a0a21a340641ebccd545d05f2d723b711d25c522a9206c5a6b506fe2e19d13da4aaf41284d76ad12c3b9d509914287a8bf4a012bdba4f270f44bacd3d523e3a600bd51a900e414df83a4454d6252709f4c07bb4d9f03a397f3dc1db7ddffaedc119ef769e96b849345d4200ed0
+B = dc4a269266fc3d7a1b84666eed3fd1a1a2387354cdcb8a0a7f84ddbc1954e00a18a73698fcdc5ed75fb262fed30cec241152305fd7af2a7fa8cc7a90f4ddd686c7b4425cf199a8a5161c0552d22f47a13baa30569ea17d7ab13e2db73cd9eb879938229535dffc62f83783388c664f64c6cb037fceed9c0c902a
+GCD = 1242c618cb49b1e5f0414bf98db968d0aaa4ced8b22862e72ad7c06b7d4ee6acaf6a53b2ec54111e23c8698463d44d41bc568ce6aa44e8d39b868915666
+
+A = -68767e6f7b1b1f1b7791c6d124ea675768e43624642c0a18c02c65b17c23b21b21ab7c389bd263d778d85df4e7e9e068151cf54e46956c62a6a3a15990ddc912f672ed3f426300d69737309cb327dbf50fa3abc0e77fbe40a3142a9ca52e773fe988ec5e98a0d4eeb059f27bc39bd23786f6c55fba384cae97db0
+B = 49b702d1f7a2f770a37cd2d80fb5880ec0e567ddef08a26d471287379b7893d1139b5614da27262e303e8901161cec8bee11d8b58ad4c055313a996c401b14a09a0e52f053530d57bb21c0f1cf87bc87195efd2aa06737c4087f4c44ce794be02569fdb8a1d3c14ab31cea1a7b865bc8e007d547e601a5d60c6f8
+GCD = 3ba56275ca3b715d77e7b42b719660165c6da197d768cdb21663cc86ef4ef633d9ef5a32ebbe1784d35a8ce36573589623beef5ee27403d97d78b04b8a8
+
+A = -127aaab3e40c06285a2eccf231e529c4e7a9119beec49c036f2c9c36e7a697d92c123a6dc842053a3a862648bf3f5b5159da1d750ae40b97734157093eb3070924d0c45652e9b003f6c8207556fe7e93d26f3760fdb922aa9667979f33bf82f8941348e354aa8e42d11143544a87991a5d01bf4825be68612a1fe6
+B = -ea59227edde6e23afd14a7ac889dd8ea7a160a63da1cf2ce94a55690b9580426c3df0a51073599138b567e2cc9fa3ffd7eb2ab2262b909052aed284a4b14a15498a03f7c976f4db515a70c799b483463d4c35b794fd72a1fdc6a71974a3ab63636a19e3ebc2a6b7a3763fb5fe7894ec17e03fe105b5a2cd530bf5
+GCD = 4de82f2e206104ead6ca55c0c2cff048d442cf31ffcb73535dafadbfddd1a6c115968c4b428b1ebef88a48093b2b56a09e15f2c12a941c70f772551a289
+
+A = 95a6b512180e78225517d22c10ec89f570041c4d11ac1439aea052c804b81f8d2054021a7f5952d4e3a1ecf8a8d808cc752d2b71569aa8cd62f86c179a7ca1a03eefc68797928820f8bda731edac663d77cc40966a8bf0e4a291260cce7a201ecdd72754cdc4d9c285944e5642414918a3fdbf4ddcfc073b2303a
+B = 3f7302e6a5a72d29302a27941fbcd36bdf744aceb77c0e19e13fc5a53def6defb13a9ac64e602ad3d0577b6b7034484cb0b5c03ce9c4cc042657df7c9f913fb6ee3729b1a82e7f32a798925bd6417689d5fe8df008fd8c3911bcb91274c2e32f892a69ad546a0f77a789dbef9bb0d7bfa5c8eaf5f00728cc60bf26
+GCD = 8977794c5a5e9f46a1f6e84100acf294b57edcbbd2ed9dde67d51eb92885b2738878cbfc5da2bd899434ff43350d4d7ec78aa4944da59ad135ead3c0d3a
+
+A = 693cef3efdf58a4906251a2a3be417188a977fec58353d8945484abb5377aae6f51de48f384c7376ceb4dc60676a538b2e65adc40f5ac6fcba8c745cb0294772c770ecf49f5ad784aa9124e44483537a814c2dc2a75d0dfd57fce4e1294a224dbbaa400de6440ccb594a654cb1d0cdb9a86d74002ec2f6f6c81ba1
+B = -3745231d4c7e85d22d5b2a7b511e34a5e5921fab4650333e0799e6263801d7bb212c97002a0eacdd23c345d8f3bf1dc39187e2f992fc03d6a74943d5505dbc6d99f756c9cd4c007ad555452d1544c189214f04d723eb8e26e8f487e024e06fe45e3d0c7e178d7645fc3e3e404e00a323b701eb27d5e2ff0e24fd22
+GCD = 1e39c2da58a27cc13ed1c28e5ff514304e69bc3a61f002f15916ae6ed530668816fcf158c31cbf4e0bbbd881827afd65428249086245bf5e31ea36dd4225
+
+A = -513b395f1a78a339e9113fd5c86f1f88665a1838bb46401bb049eb868817d6e79041f8b654045f9dd874bdebd02474eb276c7bcc5cd951935d15a3d3319af96697ee288762d4c2bee28ff2713f088d14de57f8418ddadcf1bb3b657f4b02f544cd9200ac8e2a871c8b9400433d99ed7e395895117307cfeada1616a
+B = 3cc965070c64eb6ca304ce8c477855d955f93e712e2b1fe87be8408eec38078d71c4fda775342a34f88ebb2e00fbb4204b0b32f10017b9d64c2901112bc85fcfc4361cd49c6f482982c5e81d53e92cdede2338c3ecdb99af66f56bb64daf57a5c8af9a8ebabf745a7a057f93abf5247f5f8bb348acb8fb7db29550e
+GCD = 7df3ca64d56be96e30807b7bf9e24ca7080b08bff91fd302f58f15750b37d27c3f926629d841b88fd49e922932601fdf16a99fb36b0f27d768e4d7ae5b5e
+
+A = fbcd99875c5084f1a0c59b5d1fe603fa71f69d3c6fbfc143a7bfa726dc9d71401860e3c9680139f1112b40456fcef378e7342892ef8433294d45899ae081b6f4df708a0e74626a433ca8e9214b69f0fcad6aa3c53d65f5ee45564177fb8b66d3868d9b2f1e66f04016ae835f2f2d857a33e553e64ccf204239bc5f8
+B = d977b0fd86671b667777d021cd003325ee3918564fa2a51f6e77aafbcce042b5f565bc95c5fc9e1b8bbe35e17e37c22c2faabf883fde575c92df7a7f01db9b9c0726808ac70f320b9af5ce6cdeede6db98a3592a59cfdebcb14af2aa86bc92c281d70fbe6f4ed3fa0444717bebfeaa715fc4a7ff3d8ea1508759ab0
+GCD = 43a145da2e0e11169332db03d9e65b6f258c36e5a10b9c00bbbb6395e6597b19b23e78568e931984304c841db119ebbba8a0b41ffe5f4e23c7249ccd5c88
+
+A = 38d916967815a8a1b9c77c39e9b9cb68b9f5350da609c2cfb904a77cdb46ec97d27261c1a40da198d6b4bb14c7aa76cc9b57fb2b09fc4bad131a01cef9ea7eff248d158be35c2c185357c43f7b5603c46973e06c151ef7475479c375e3ff408f754cd162bfd6cfd1897ff7ca409284d3e873689e3d9d0e61deb1cb99
+B = 49545674a69872a10218e111c9da7b19f75c87bcc5129349cd29f87a01a5c498870a5318849a92b715e7575c7a46c07b4f17d34b456b7c72f4f78a1017ce9036f1040b135f9f9c0c556ad9255918d939dcc442a8b8ef576f71686e13dce788fb3773c749d8eb93344daa67f039579ad47bd62a1afc4a5818d360c9af
+GCD = b5bc5937a6c81084ee5da4adcde46f5f476b1cd5b42c14d4e1eb30d912bb5fec64c9bb0e5337cc85087bc09cef3debfbf584c21b6c3df913c61346c4711f
+
+A = -bd708af6c65e7bb058bd313bc49ec919309bb291adc7fd28f57f7cbb1f1d981bf870ac738ba863fef2da0f8734c821fe985aaee4fc64db5ad6e7c55f5cb8dd4c9554b804b4f34e15689dcd2763316a84c628c802e58499bc3b5435bae10190f0ada815625fd5cbb6efae464746f191bdaf935343e94ae1e3d1ac7b91
+B = -a23c7040e19ad5414e36e9765b6db062bd8f0c56058abd95b1cfccfd7eb4bf030d19831c802b18b666532c20fe4ebacf1e530da650b8ed47695da3a3f25b7ecce8cffdf4eca155d8d6d2d6e37a3b398156e2f8bc2946161215e195e4a1feb5c8b7c4bbbbd03e706c05ca05e1add1096ad67e58e974c1558417509c28
+GCD = 12cf97727e27ae47b69ff22fe8cb90a81649539c3c6c6128b20c270ca7057953e0d7fd9d79be1bc408c60f6ab2ae27b25961996f1acb272b179676f7185e7
+
+A = 2ab0e6ba66ccfeff73b17a0aee7e9aa1d4abfb9c6755887f98fffc1fb1941c0f6de791ce56ee6a4169e0b0d86277f692a5e1ee871439c12850367c9667c0ddd736e31485f15ca10ac5beface9d7b4f0262fc3a8ebc71b3a3f0a8faeb6955c55f1010250cdb01baec3538f364cb9cee5180f36414531207274db53e338
+B = -8392986106b73f2bad56055c9ad846493527013ce88c38f926a342fb0155f5ef505d1294003fd3078b4bf64c2037df9135992bee219c79bd48c7d25ca40dbda361a9d24174588dfb6825317448ef5ec9f00593cf03e2555f6c7f37cabc73434185ceacc7a1d8bd4dc0abf87c571348f65432a2681a4afeab44e06438
+GCD = 22815e36702fa7487e6cef961cbee77287170245c74b37edefb86302d13a2efcc2e80a1c41b93bff4654d7d126dd6ea358a043f7dc0de17363b206d08dfe8
+
+A = 98660d75d759865da5b72d224d114ac0cd615edf0bee553522878cd58c1e2899f88423f3c3f3cabcf99b20343fc1fe5d2ae9fa7ebdf7693329c96852f3149818c65d72da9d82e7e18b6144eced2f33f1797569f4fbff3d6826de35cacf30f4cbe78dc01166ba5a11673d0a5826e0b24e45675cd1e1f7acb876b8bd5a8
+B = -4ff9dc61cfae64efe7300b8831782a71dc73ce10124598e6610f5b0d99fbda0aca67d52bf77aa2478e654651f94c338d80eab969a6afaa714aaf28f3d76063f7366299cb982db59f873535d4b87c2019b21a5f72340183d93746ae9fa5259e4a14f59077eecc1118f981a333f60e5cdfebdbcc5cc0f04dd054c0fcb88
+GCD = 47760b38bb7ecb7ef17a910843df934dd4c6183b2d3fbc243a61a09a86f520fe26ecb245e10873a1e2eace8c416b0a1ac48e1ffba8c77fb6c639b5c1a2158
+
+A = 2f6e87afcb85ddfadd400724f05f400c6df3fd050df7e82b2b1d13eec135ec933145b6ace02de4fd628485de5754ddad42a7a739d6f92f84161821503431aac74c77ce2d73697d336278d2edb0d4e8ad4963654f83505169f24dd514fecae11e97bb7d845620f9e98c06acd9003c4f5e88d49bf054b42ee10bdb0b87d8
+B = 4bb4cf7d6be4ff65d61b0eb51a9da0f9627b2a2fd47cf200dc2936dec8e447adfdaaf59aa0461a585a7b9e6d09d153f42cde62d5d45fbe76ddca200772c26877a81c4546118d8a4eb1f1e37cb81f69d83b9bf82b30211d1b7d62d3296574148023efc92b87ab0c5b436eb9879ea9473c38a5c0f91e48f4613ebd78ee30
+GCD = d93e2f0f2fc45727ceeb2518f390f16a86766578f20cac064816268b00a2536b9294017dfb6906febb8c2a37e6d759d9469e174be737f80476c4b11690268
+
+A = 4e7982f0c2a5bc14095e232c0fc8c042ac084553304472585d9bc19dda0a67af01c054c252596b493945bf24ebabbc677ca1f17243446ace0ef332c8b274a9e8ce78435e7cb0ec1dbc548e71e9943f618b799524317b3b4bf96b81a609569bf756df84279478eba30e64c28245c9365e6e4529a2309a7d8bbf9c569ef8
+B = 988ba75e045aee5d9ae328204221bff8198026f60732fc237958c461687267a716167dbb8208f57bff67ca01b51509352c09d07b4cdfa3a6b1c2c54a563794f688193bafdf5e1135c7f5f8298364ac39e3a1203fe3d5084022d83f948a9e1eb1d2e2e6962d47c31a4b845bdb7b0e487c81d0325a6fc0e327728f9ff274
+GCD = 3677decdb3cc82c048591e67832d5f1d0d0ec4981b5a1db3c1947aadb8734c66032d8feab033d5f3939e6a7057de6d45062da93e872222c2824458ad06cfc4
+
+A = -14eda5a73a01d371ff172abbf56fb9955cdc957ba14b5bb50bb7d8653edd85bbf77f88b19c0f0a404c432133082275fa0bf0773d284eb0cb22960c7926bc1e155b44effad6a630ed4104e88c745ffc72aebc944fd92c16394fd79ae59e60c253df0b3af16c3c3e9b2f2c8be6af669ed8bc14819f588687d81f2c9e8455e
+B = -4181eefb147341f1ead133ada8563629f09b6bfd0ceedb0b00eac1042a988628330bc5f399fda4c60daac3f07ed43f4d8a35eeb02b63f03a732909ff81be8ea9c8fa3c7da6f44201e950e3dfa8742c92f3bcbf7f246c7cef64439387f0466f1ff8dbb7c3094a6cd79c6bfec33dca8895d13213f831b00ed28eed9b8792f
+GCD = 228ef71b4dd7f5e653351ce15f2f96866658af3f69fd5131069be9d67fe302864062a91605a057077f32705041aab5cdfd9cd9d3b2e40b064efe871c75bda9
+
+A = 919950e68b598cbf741370b1fc2a79fc0807909475ebfb3cca608602dbbd609c2fa0d5eb5a7d4c4001fd60dd68739582af356881dc06ff3a5250348c6b05ff2e345bff7109afb5eec3ee95b3e0b6460d43676a792ea15799b23e1131481e8a2a84a77697b5d481f1efb38ce74260087546f77826a4bc77f027ef51f8808
+B = c6847029954c3f457a4eb7e1729434b1b91b0e91f9cc57723d15dcd22d44ef5e838425d627b9081f7ab2402737a41cd88fdfa587042b0afd380bab111070f37ab9d9cd7c8e451d966166c1259d2be0ee713f5b306a7d3d92ccd53ac4a3542c04bec219545e6496a3bd9edeec46d864f81c445b6ede3480a0b050eb7967c
+GCD = 4ec2fead1ba8656e2c3a7dc3af75f3abcda59b85a7f5881fa70f61cd0584ae84d92e21b3504ed80a42ea2486faf6b1db3e0b2811b5b3cfff028fb35a4a794c
+
+A = 2ccd42079ec1eb205fb71bb5b2de3049710b6d29095d3604f3843b1faec4d42825dc0882a8cf3190cbd643f837cea97d0f71b9cf1a70dd519a5df05ae9dbd879130c151974caa059dceddbbcb779c42cc2c7122fde58c91c5cd1d23b07470df75ef81e1fd7dbaca8966ce8e06423a067f3a280f101ef1c3f2e85b8508fb7
+B = 3243ff9962b4f282ffc4871c26ddee9d1cce6e17a3fe923ac6c301dc6073bbe21cb6f39be6d8392702ab4f9b7b52fa1f7333073724cba5465b5d9287abb1a702119e607c1dcfb2d109375ea729d8f741c7e0e1690e10f91b580132c8038a0901f5146415c1df7c822a5e2b1169b11ba9848ff198991621363989b82afda8
+GCD = d8e3457831ac26b35f7f5e0d759476364c22231ccf31a3fb1757f6f19eb70e72ce638fea07c49cf6e55df46fbd7e6dc736c929b212192d5b10835153cdc5a9
+
+A = 3ab22ca0fb114a3cf0e1a524752badae7b41658e30a13b7422276048acdc1cb77320c9b792f0e7558c0e79891c1457f63e7ce9950a3cdf3445b4a599741f9306dae697672666d5eadfc2a570fdc1917e5a1d360845e89fc1dd4d541dfbf2c8ce54113240d853186f5bd71dac2f336888340905e8f99df0f3c4f4f33e51f6
+B = cf7a7fbdc191b36c7c43ce87e244478ceb0fb26d379bc94262bb0bc2996307172425efb57adc446dbb8b5da556fbb05b2e89135bab0dddba0200c5308c9a104a7ee54b9f6b099fb6164056693f1913636ec753a9c2f429976c7f522cb0bbf22599149f53925f5678f44559563381882353a98f7ad6b08761d89561beec80
+GCD = 1b264ecbb1e5dac047c91b5514d56e098c71c0d98a0fbe7c63f8a38dcbe2f5c37d354d5ad4ef1bdf918c4e15f8dbdd0d75ad44f6ca111fb37ac076f61e62426
+
+A = a1bf367279dab65e06110c2dd811a96e54c2a3de86f7e5144203ccaf83bc59e8f9e3fb65bb3f32675f74eeb27f8c321964d7dbfb56e25074a836d7e559027285da0d97df7170137ea867b5af70c17f764079211e7bf3a5ae9f815237731bee6c5a4d6cc48bfb1eaeee6148b102035340831554df253599be539edf856c92
+B = 2497f8eb01c2c60b5c5f14aa63eea6820059b18be163b2b38cc6c9ab53956e451187ce20f31c0b4f7d2113a79728e6f5c578c3b09739647c1186f18d0f2575ccd47f7b7700715677c25ac4926209d5bd7dd50e33c497e0e0653b57701748d5988bdee1f632476e47771ac1b4894ca5165e9d4872a73b457c8a54c2f54c38a
+GCD = bc70cf3f602b6057f8e672eb7cd6f89de87d52b7926de031456ce68929b824309b5bc6e2f9b0b5653d91d305c21aaf592cd27a71d00c060a1565e81cd8a2602
+
+A = 910f9ad46827e511f8be5fb4a190710bf8a18ebbf2fe45778a4088e2560ff2ee0456c287368e9fbc7d44a539fcb116d6b12c7c8dfe312da6fb3ff1fe8029da86e212772826e9eec7e202e8d5f977d7c7646a3a5116bebea317861beb89fe50f5d03ade992e97d216e143fb60ce773b956764116c6e481ef971a7868277a7c
+B = 80ec11e11511fc5f21caf2f45c38b1e01bdbffbd7bc88c902ebb43a18c14e8ccd80f7d6e48f2b06fd582cdb9b4c9465fd7818b43eeea308ad4211d2e55e745b69514fcb5f623d80095a4334e1261a101c524eb39219ed185afa9d9f1ee84494c4a9fb80985a781eeb2baa5b705b5fc7e11b130f26bee0b18402ccb1fccfc
+GCD = df8c939bf1c3ebc939e26d20722bc605983378877c1bd88e9a7f33890406da770f82bf6802105f388e34bc3fa59ef6b1ed652e88c4c4bd0cc92db814bd2b19c
+
+A = -31110cf46b0ff782c66d87a58f873e7f55f51cb80ef55cebc13f32b09270fb7438313490c600e865799e95acf69f3f9d034c50d7f450c19ad312f00b53e13014440f519e5a6cfa080834defac6be2399a0de7e8b82a40194d505ba98b3043f0dc035549669256333c0c8aa0612b870398bec4f5cd64a0d8c39d5fe4e71419a
+B = -4c7f31f475c282eb7ffd707d0b99330bba1a54466ed6b04c2bab0dbe51eeae73017c4cd45307e518f21e8730bdbf55bead1a70b0016e53cf02660493e805edfa0fc85fc04a4d83c967af98da541403ac815880e8761e458a6a79d35114d3bfc2a145ccb6eb87b3fbc99ac8ee147089a9b99770b96cd380dbfb932717c09946
+GCD = adb1501bd969e78f553e43b80e2b62db8fb62faaf5296e3981228a0cca34848408b2d6db9c7f6b911f5ad64d99adb1cc74b041959576e2683112f8b5080af36
+
+A = 117d79a7564215386488902f48d6e8b50c034bbdb1e810f42a1c27dfe2da840eb89e9f4716a841a15ec7145de969325bab67bcb50e4874756468a2fd160996840d5c0df9295e5e12ea30d657ad1d097eaa2e74c641a9cf73dca638f13479ddeabb40914fb0901ec7b6539b62b7c30bc2ff785752a59f9485bf4c0e41db26b34
+B = f448af3a6583cf606497e82c7e1537350d1da13f008c31c4d1ac4a07632851f6141189dbc0dd03cc5136ec17ec8d3ef4b50b89497777b8514dc2c25057be55dc6cabfcd0d4de1adbbd65b2ed69f39bbb81994f32778c9238b0fe54362534fc105cf8a4ae767fbec8c6bccaf1610334bcf0ad7d8b5463f171f0d531e215cd4
+GCD = 19be1a451384eb66801bfbfc93a17e675b17a4dfc8335a7ccf4fdae172ef6933df35d602701d1d16532e1b8053f3be021f89968463fb47191814c2bdaf08118c
+
+A = -734574d9318e8c540f60023869d9429d619eb9e0de390ae72d7e1cddce372edac46c101e21e2b92b2289953c20d40465178dcae5b744a945dd96ed6a1236b8ff14c66ba8d25fe6cab31d6fd3e0fbd62d2b421f91f185f1d8ad77cb71286489f6159b4305fe665e88daef12c28a77dd61bbde725e852ca09c010e6d6c6c34a9
+B = -6c0f3adfff1e856a75c60cafaa68a0675cf96eafb0b611e42c0194d0b06a957980bb5ba074b04a02f3b8d55bb1d3578e4424de407bca731aecd2c098e99a8bb56252f392847c8589c7cafde16d27a72a7aad96b2245516cbad804a9bea22061634d283bbb2be406c2ae89a84435263518c33ef2b1a50027dbae69ea32b33545
+GCD = 3edcb3fc86abfe9890b558555644e2143fb68f80f63a7a71226c62672786c1dfee151bd28c0193e235c59aecce29f50a12e3a5e1ecd94c4e84db9cc932ade877
+
+A = -15c331aaef740df8cfc9062e52a59f12bfad55ef1eda131ec4607436c87f5fd15393c9e8b6a4234fb5d85199194e06a8f6898f0b1d62a8eb7fb715b27474213cbbcae6a999ae8578442c4ab214487bb12974224e7f9e787b0dc7be2a82a3edc6d7b57689b7e2ff67da9b5b332a9d5db38c0bc080f46198825966a850461a47e8
+B = -28d3dc89c376ea218114791d79e05ad9c6a9666d195fe642c18c971e8c2f26c0089d503cb805ac65f4f475cc25e9bbac40c82570bab7da7071c033259bf720c2a6f9d0ee87b2b27fc9a21a0ff15e2142e9f761c946a2e2fc4b7bf472d2c492635d6b2b94117d3fcda8dac96d96b9eee10060ae233de008726087391b6eeae90
+GCD = 177de3b3b459367dd89048f3ded5a7de235cd417dc70e0e3d381bd5c200e812b307d1c4e09a78fc6d7016d3d30c9927c0eb678c8c3d87c8b539d375c45f459b38
+
+A = 285695b9482127e98e8806fde3da4fa50c2e8245d3fdefdde6d8edbea9ef8e9d16a295794d720d9b652e2e54c42ff349c395f855818b441be2a43119969517f9d541a39c19cdd772b180ae4770022fe5c53361fa34428853d2e7c680d1d90cc3521f2f13213c8cef04cd82203f174336ded2bbfac3bb304036cc1a1c8743bec0
+B = 47cdfd479a80ff62478a8a9cc4628a6bfc4131ef84deb0f02465eac7bf710361199318fd9a4b032c0b385d4c7392af948b8f89bf188620861fdb60bc6cd74bdb544c58634b20b9ee1225ed2f24e7878c62865521c8ad6263a9d19fc3cb0e779e1ea8d370c3f0df037d660ba1b01c7a9fc2f71b416ccdf4f53a3a350e49579374
+GCD = 13e8a2a0a5386b21bd4dcb1585260b9ae40f3c9941a13507396979da9415fcb76fe623cd0ca24bf088cc59f8b05f4daeba906505d5ee6c94902cc18688c9a4a04
+
+A = -14f94518745c5fd856fd8b5080bff3df9631e1e9a4d4dbe038d86f9cfe21ee39aab3ed16e569ce7ac70995a328ce34dffd70565716b372a9af31ff1acb71846a66a37a6c9eea6df183b6c8ca4c57dec2a1bab9bda1bf498fa08c489fc4603f4f8066060eb1f0b29ad82b89c691254c93fe607cf4ee123e0b0d02e907c6e707880
+B = d7c5dbdc000192905bf5631f7828b7f24f183912a3901a2b1432943031cc82cf257ab78fa32adc5c18f6dcc38bfa7da6fcc6c71fce34d317861568dd026aa3a7afd53b31a425477598a4348b833fd85d62aa17bc1ca188c36a67d6ca56210cd2a2205c46797ac9cac519a8ac55f5880ec7a0b207ccd8abcc7f9b0b8e5eeeea4c
+GCD = 2e8cfbf2e67195e00a24c0453dd876590a22c680eed6ea0a790567947e97bf9501a1d4ed29bf0a09a45fbbe8346fd2587f07734c6604589e6d13d654a2deae6ec
+
+A = 3febfd8136abc153063b564a10e4d0bfe9c47c9d193071bf144a56ba6855e06142d3007373d223518382e7e09470f2f2105137d7ab2f8faa1e5d3bf280989068a253982a2a312b2c2e68500f40b4eb582a8fbc338eb80a582939cc7925ecaeded2da499bae15b7625c75b2e90484e0e323efbf953c6bf60be1c99904f573b6823
+B = -11a39f49857c5be8a407e1324c3bdb7bd74e3744d2aca071ff3528a0d86546ac7e86b4fdfbb4adcbf691976d530cc1e45690eb65c1c64a6c67beb53c8f6589dd08b6506d7d515c4206da4b5e072fe0a7dc64c3e5f4d46c32a1e8fa1edefc39ced8f80f49ec160de6d29ccfcaa932680c2a7a59a4aaaa9b300716c3c16b37557a2
+GCD = 36273d81ada020314268b98cd3d7c5c5f198c49aac7ebbef207c93900a53a11ebf8a182e1a99b58cb391b0c11cd68377b471d377f231803003a84d6a9d73a30c3
+
+A = ab69da9bede9e556bdf493c1096c5bf522b116c3a06b0d5705b51b70971c81832a97b6fde4e3cca8e1beb24ed68114954474f0530f1ed8b039a401d5c348c7e3ce3ace1c2ffaede886ab18b1f769f95b9beb6590d5157b39a1f09e12694a11877827b4b2957909b085a6cd2fc4ae84aefd52b8277e7271f3e0b1bb45cbf20d9a8
+B = cd5e6e26686a71497f72cb3a579840129317aeaa3f69a74afec69740af77b2bc0d735708294da2057dccc3ce07ea4371313ef88ba7b0a5e7e883e96a9bd0cc3be1c8048e47638d0598178b65eef20c4df2b9d7a2e0726f6d0ca6f5cecfe3fe4923b23e2b2ee92e2b4a888992ae67732cb6a75c25d9a9c35635b7ec08e09c1fa9e
+GCD = 75f66162283dae4916bb95d00f35d29e514d49b0755cf871f6424dff7010dcba0f5a07e69b7ed097c346c3e8c2ebed2db66f7c946dca8c95cbdec761244d7789a
+
+A = 57af33f645d148750b1ad790d50ba6e97731108bf8bd4c351a79842fea8b595da51dd5a25a9ffdabc75683c4a058b8cad823b22c513eccf215a8f44f70f7a491765a70d1867874377464104949fb0f76a4a20e4bd4049874817049529dd7d2fa5c020bf4e4b4699d130b9a9208274aa3947cee267239042ff0b263343fd7f8c16a
+B = -39dc77cdbbbfe740d05291eba1390db06831af0bce8bc093cb1684d59fcab36a4b26b2efa4bfb20d949d4922ff9cc64e26238648810021eec9d700638efa292f2bbbe68d42fca1680871c37a2731177d4302516baecd5850a59705fd6a471a15be5d19ce108a927a1ef42316c768f242fb7e9dceb385ef388a68cbfbe7d165c304
+GCD = 1b7cc6a8cd7ee5860029fc0657ecaed3a9ff8b7dac0277082995585e79acecb34fba5dcfa64849f67e2d25d129aa09704da1995aec86558c542ccb35019e39bb5e
+
+A = -17eb0227bc4867601423b5578e3af81af1d062074185c77cfbc52b0d629149bcad356d4203abe524b479500d9a54ff21bdbec39ea33b29de6cd9ba67d35105226719a34f7647ec9be5617dc99a651815f67830be1118a957676b997fd3cf8aeaf9e3658c8b858ef32918aa98b9b9bd6c7c7f0ec3b283f80bc7a4acf95e43cbc8a2
+B = 895785843bd944158c829a11236a374bb9a186f6fc397944d9809bde5f1095a355e932835794e01e64f493d1c3de93043979e09aebbf9177295440b616d19014698f0a9c46e03cdaca95e4c2c768801ecb543c11d0ec9643472076f563602652ef5996e5ae3bdccbe52083acfda3f4ab1ed74a279f179401bdf5ce24f7fc2cec7c
+GCD = 22e878c652b96562f3bacfed268adcf3982327e5f5a4d271b7547303f2ca7037565b8075e62040f61bc746b71edaef503868cd53b2e216302535ae687fa0eb73e6
+
+A = 42831fc823be26d259c1a55c2be8c179be174b62ae1d5322e445a2aa0e5a0323edbf8afa3220853322798bdb1f115b421e94e236239064b576f69ef60cfec499d9aea749157dda1a2de4495ec93775afcedfc030366a6630d927db392ba842002e67dc4412ec6a61a4724221107ec433cdf192d944cef4e61f5548df3d3dbac6ed2
+B = 34bc92fcc7a6b235184c18617dcc257000379ed708417900e69eaa9ba1a8931adeb89aa07d2c734186b018934844099b77f4088f17b98e990a696563bb7e9cd2ec4a13e9d1d39465f78428cae6ec1918afb3a4b83af34e7f0cd5982cafddb9f4c16e06bb96520a60f314e9ae311562d2e7d7b709e9a21b0d1ac92265d910acf3cfd
+GCD = 22d817c2334ab652927ddc39965cb39547d0e7f38351b738fb89505b01330b8e221064849d3b24d59ffaaa26f6b6ade2ec7a4834f7791c267438bd91836a4542d7
+
+A = 9d7fe1db937e25604935d50dbfa3aaaa34f082fd4666560cfd0b4f485fa5e9a2a123190c7b5e4e21a9d030f66584448d6d0e3b17671fbc98579cc46fc5dc8d254a989107a385d96c30580fa7629c5ab92497a42120f23a589be56d00e421c54c94e35200752e0c155336ae9c2f3f126e3a8ebb5ecf9c040d86c3e6364dfe3efaa80
+B = -6a1263ed757bb83cf53097523fe0d2b991f0e5857683840bbe062374c96118411452842ca32ff60a1cc2f9cd6e692f2ecf191d6d0ed2413f0addf86ee93fc2267bd17b13178ce23b5cab7d9abcc76a5c4da3b3b2c6f44eeb1d781c6d60606e4f3539cf5036f832ed3787ceb8104d81a15d76b3c3966a391fb54d615f5f231828480
+GCD = 37d0d4ed143057dfe2b8b0d2e06321150aaf64f1f2077b8185107416275fb711bde9005dfe09d451f17e5e0f8ff1d301b43893a1752b678082ed299e97aa33ef5380
+
+A = 5fe5c2cd33a5e6c2e7c2e2f60b84f9dcb284eb592d4ec1d6e70b70b08d72fe768f03345153b4530461090d697c2fbf164b4aec85b11b7683a66690de9649f4b82025cc77ecba25f80fa3a8c218b3dc6b8a6f925d16aa74e4bfdca7fce9022bae3869bf2aeab8e07ee075dc57230fc71fe0323155e3eb4b0fbb0440adb6593295e679
+B = 7055cf3fbc952721bbab8da1a7d689d779c58cba85645552ee8b307c438b25fecf26927fed04b61c2fab944f33c4dd134c1e4a3d5d29017ede3f52d5233c6d16e9365de1ee20a40d790f62016c2ab0d125021867ce8190c237c7197741ab955f990f6f56c2696135638be3642f8206edf35e2a7e82fdcfec2b92e576875acd12c2aa
+GCD = 4e8b6d19f248bf2d35688b32a4a1ff4e8bf540f7726e0789f4de72c3b6ba8ab56175b8e5da1902771fbafe0970ec0b1855deb139e2a672ea91d1e215aa7babeeb97
+
+A = -c73122c4997ebd405efd176b671a30b7712467ffd50648db6536c5324e6ff6069895004ec310af586abe578b48b7434a173deada7740e1c5e5f09163c92a6aad363c2cf759284669dde59302b630d47288ef22c94ed4f4f8c9cbbb4d0a3064e7f458570fc08ed73cc7794cafada0fe5e554e3ed4f97c023e8abd2400ae98f643653c
+B = 4943aeeead98df0ad235163b75a061e683c7b315516125bc612d955700d1628dbdc7cd7c3208e1637ad5c722c0d14d6058116f4766c4f9712153bb1c5aa428405c26b277f4b8cf671fda5d6f2a6b03b53b109847e5ed4fdb5ccf9488d0d69e6fc71616672e89a7a11c7eb7aeb5b1c64b8603e940713fd00bfd6408af7c1db0033a0b
+GCD = 117bbae0438ea8c8ebc648bb6008db88d5df35204df39c1b1ec72a2de826fa9c64696cc2721f681cf0f4b793504b0740c51d98da3ba4530c67d44e636c4a351c33b
+
+A = -68ddc8906eba4ba628dbd1d190e068acd5cca42ab7243c66b453f487efaf76e80c648d84e2e795a77d20df712c7657cba19b6233d3fe98f5770c2297a514908078640208aa0101e14692449fb7ff71007a479703e1468145951f9d1c1dd61888ee2311cd2f4ffa7c1e85d1275efad6ed2332c7d17c151d50b5dff1c1b5038d687bcc
+B = c51f295e6e035d3560949b3b7f40fe1346ee74175873e6322b7453056b2cb2084cb572311a669f7a4886b10df5370239ec4414755902c01d9c6bf1c0afc15b9983862286c2265a36b31e4d710c75e561f1b04cef60c6ae0c36238585273de642790ee4c7666feabba536a0ce5161006d7c2b329721af997b41f47c17fef260671044
+GCD = 16d93374722cf4c1a19397f1febe2dd4e085b8f1665ae4af359cc4f05814bb94f92b43afd8cb6ce81f162d02c5fdf0d7b0e6e8080e56614209cfa002d0dfb45c0364
+
+A = -434b5e0b619a386f9a4bf175152be8a216d08dee40d2926cb5662068391c31bbeb231f661a3d55b4e5fe59c7810877284d07f2536d57f5becb264ad0d1e7ed21ac269f6274fca2389aa1787c6535f6f3a96dd8130c9c7786d70de25444eea1ce27716b20ca751ff9a1071bb359739049ae2d507ea9e3ccb63a54ee065507c17586208
+B = -1a473b5a7cb90b20d1e5933c68a464364f3200d1b175cb189c2b4664e4f68402e773c672970a10791512be983cf7399f3c652bb23c467f4833a90f91b05afda4c18223236af16514d7b8b6fb560547ceaae7c8c03589f97c641b5ec8f29b05d44bdd1a4f73286aac830a66e73f37d7836149fea5eb305a375a5f970fa3f9a8191b19c0
+GCD = 5503230cea1ffe7521d5ce4d2426927f848e6ef7ff09f783a7b17ce6395de6d02f1f47e42b29a161a4d13276d31105b47e8c1e3c737c67e8cec49120a2ed1ddb79e8
+
+A = 21fbbd2951908187a159dbfabb038f7b2435f9343998173d13feff6dcf3aac9d0597e1f079505c9cfae77e6a4719ebab80c5807e187dc40b2636aefecceb7d10f6c32be1b2dcc12e5a3850bc7967aee840427ab451ee84c5d84c949574da81c5bc4ad663393511494c825c4ed01bd8dd66803cb60485a4ce46eae80c7fd574e4c22618
+B = 2dde36213453e526013340533097ae365c2e4f1056db517fcf2280a6f140f23b01800fc55c6ee8ac08d6f27302feff8d099dfa7873b518da687572b15a1da86e398e4854b4f16c9cb586eb096115084eb7d63d228ed30f1d8beb6e3c778efbdbac17bc746fd45541555c4dd5479d837d3985567b303692ba687699b7874eef4b45d379
+GCD = 792fa86813c67adddbfb1f05cfd0e94a5101b9ca786150921c6cdd381fac3eb76b26f47aa9db2a40230b24bd14046f1648f1bced16df698b8d76039b9d92ba4a0657
+
+A = -196e63ea3c7eb3219199b74e52086f891400c116e7038ea64ad817b74e38cdeaf36d4d3d1d502691f6889462699a0402d0c781813a210411c3c152ca3503d8a45952f77ef6c8153ffb68f32ee16106fb8dfc51c2b430b1548c1b2e262dfa40db08b39cb1c2bdb4cdd7be2a40b57daac9b48c9240c2f6dc346cba930d08ff16169a69556
+B = 1c76ba300f9d4ab6ab9d8a1b7938f9ad2078f1146cf14771e525196b393f4bf63e693ba8a1b147966f8436e84bc09c47ea1ab236e578d0601e92ba7730041e6681a60cb5609d34f5fbf2ec599d8f25d5ba1269eec1e479d15472b00aa49720ae6f3272568679977de135d2e01ec611b5a401d5c628bd9a7f0ac049e9864a999df788a8b
+GCD = 1f7a689a2ab07219cbe204a5c98b4757fb4522276a2044eafd3548c620528f2362b27813c8e462def1e0d87c1f3056f43765fa604ff8b4d723f000dee6d27ea9afa5
+
+A = 2f42f42957e2121743bff04ac2a7fed455c995cd3ed05bc9487245fbfbcf5bcc81e3700d3525602451241bd54634929ebc086c4e8d349b30a3002a9d4114891975339e62a566c6a9324f70da3b4225787d01a1fba22eac0652e654330c8f37d347f1110a74226a66170ff6f99464bc998a80dffcaf3c0909d8a1ea6e28839bdfd85f1cc
+B = -372359573918d6ca93a1b8c5bced64be2bc39bab0fe2a0dfd542fc08f7c357a505de4bb12f6379cd52365f2e3285ff9e5aed3af2fe5c7238576148e1d3752ea4d3b12026a1979ca71dfd035ef74484cd490d8157421f702d343c065333aa23ad7c223e2f40acf6ad8ce06d9f77511c00f6357fae438a01fe2b40ba258e8fc969b389858
+GCD = 28d157d4be81321d039b22f34555abce34cc1751078e9c5741d84addfd7535338941a1706379db006ddf194310670a13d5cb32429593e1648d0cadd5c400c66c0cc4
+
+A = 912114ac2e9b3781a7f31461816fd6a0e839839f58138cbc3715936f7c5ea133efd7024b68a444ec004eaea478b6c1d581b95c754345713b70f5e21981bd15a29b7720a855f988febdf57ce8a47cc901f2241cdbc94dd386c46413aa4260ca4dc59df4b9e09b1104c7afba6a4ccbfc408c94e7504a0dd38e568c038d5b4de696a6aea8
+B = df7c28305904522fd91ba1e5c618d5cda6fa1a6a16fa41856f2710f6ff217a75dc5567c70a548277d51634312818d7c308041f663d5c228b3eadf2f3494e207ac8a216e14a5f3482ad09682707b237470adbd4901888451f047f3bf378c976422c0abf222f42d7876cab6c7e3672f8729fd77eaea9b406052b4f812f3eb8a14df04daf8
+GCD = 4b42ae4be3ad7bbbab69a1c5e87ded2a7e4f6587c189b2d58130cb94a7b9aa816d3ba82bb657826903694f9009d78c2eb4e189aba371249f36a7f3225fa9282f4c68
+
+A = -33b0188d6549981d2ff03433f8d15305108b72ddc0440cab7c4db0c3909ac117c72e8432e5b533fac0ee131b3edc4ee263b1bd668d8e378d1aaebec00774c8f625e16ae75475f3c020bb3d9ae0fb5fc25f5c54509e0b2e3468f79a05c761148f8702ee55d7a8ea7d6d950cbc2ab73cc10df51c2bb7a6a0dded863778cba14bf03be93208
+B = -5431e7a0c5dd21f0e5cccf2d7797d13a84fef821bb02ea271d3bcd6b846c2abdc643d2d6102999d8152b78d24c0f03aea900cf74b2641a437ebae20a9a385fd4cdbac714d9504c79c34bcb4b930bfa4c696e99205dd768acd8b0f2bb4a1d528831df879edaf97b781d7352a58810829cd83c263d3282fa73694536c57d9bfde19199340
+GCD = f3d9236df3a220da713eecdc7e2b38982ea486c3e35a8a1c541e71fcf2f91413d59ca3eb6426929df9e7c59ab49f02ad8d7bbdc061bb8156b6f035822671f362d778
+
+A = -78a203c5ad5e1f8ff70933335af7be5aa71f82ada07889af874c62829bfde4f82d9d76ab5ea2b7144f999697921814601cc450c05d72fa42c712c59aa8787c08ac621bd0a5cf6252f65d6324d276ad48bcc8b0a0770602bdf693976528a9606ebdef375f2a1881407d1eb83fd56e4fa3bea37521de704f276c5489b45fa4556ed5cda222
+B = 4bbd77dbab2d574e6359be1342f29dcb037323fd80f5ecee29407008d33a755cd2ceff44294cdba0544a014498e6f114788aa4c7edc9305e1bcc7ac7d74a41ace7e86d29cd2274aff47fde83caa8bc80a58fa6866820ad421e08cffbbb7e724e8742842dbd6870750b87d33a460774203665866130636c515695328acadfea7ef97caa02
+GCD = 101d39e31e422ac5658fe0b3346ed6be5e4f602178be52e13b59e40fee91f733ffc63358bea541b3a3cca19bd1397de4892f460577a26cf568e4d6f4158169879823e
+
+A = 6f7bdc88e41e8db957d98bbc46f04011869201712ea9393d990525ff77ce3fb2ba3e4dc5b4081e1e2d96cd246e06d1f192cbaff38eb5505fc65ab7f48d49c9ab7b84137a589e17fa868e7885950f4b85ab487bff384e0979b6ee1dc6192d4c4b09bb693558a7bcf2a35714bd730daad89dc89811339d23254a38c9cd9be15185306c2ff08
+B = 3a7d3c7b80b8edbad9bbd1d42f96b7df533f822d19faa42fb6474d86479271abe8b9a5f4b8616f1e92af92252922b6591df9be52519da928d040976c5e02668f80474fe3dcc624ff08f798992b97e5e4a16e3fc8e21f44e8df14a37cfc32344d34962b5d53099824e705a283bd769f186de8e2c001d4176e589e93cc5fe21455a9bff6194
+GCD = b47787d07cee830d03c22292412348e0bec6b44cfba0bb885e02f8ee7c5ceeb22ce2f01ec7aee068db65cd5026674d71b845cef83e627a26bec2bda1a9df689daa704
+
+A = -13e379ce4304dd1238d5da15a6d0cc5ff548c67ddcbb3003e28e7caec13e0cc5dae59ff8503de58043f98d58f3cca7979dd1446cdc2478abd02233806db4ba3a873ba492845b6e988dffa20aca1664386a7ce0e51d084ce15de51ca91baefa4f09094b5847253786846e9a6d2d002370def6670d4663b2de1507695575295cdffa48b212fe
+B = -d860662e23be93e65fdf63c01743e7d761b1414dc780412a1ef1f9ed10170bf0795ced718b613f8c2ba28db35f0973304ab22d8ad576b5be0ce296ac3a9ff7e6ae77536ae857d8276dbc02a7432d677434da04235ea9e316c3a6c6ec0ac127a7da243bc2ee64a3b36679d10a1eefc70f6a73d65af0fee46c834a2c061636212c7fc0a1512
+GCD = 5142bb437cb3235b5b0a9eb6e9c1f265f75081d9f3925d84632a7826205a9f51331230594d296714355da6a830a0ee83911017cf252e0ca1cd2d2783390cd5755977e
+
+A = 18697b4097ed7f5a42fd762da26b00954810864e3d82bc9b0c4c0d1be6545c78d848130f8635501ca8427247b8b67bce628159095c7312e1a0687061b33a3f6302845127b1284fa1e43c8941bf8adc5b901b2e49a226c368f5c9008a8c76d625ea2f8dd684732d0da624883e1d160a969671ed178b69a54c93c81e8a3727b57daa37e492ca
+B = 305272df438a07083fe0187ba10551a3110e757a650d8807aa3aa275075f240d4c1fe02ec1623baa24492945ede52715d10b3f9290ad3869ccc528c2d507cba1c08c2ac03e7b6783f9a6df6e49b19008ffb752766762277ce2b71f4b1cbba62347ff8e112b45ff664e8f73d4da33bcb46d1e942cd795e9ce1f7f6a3ed0525f6d899917c4da
+GCD = 1a8d4c87d3a53e005f1f21ee7e9bb7c116bb2b62683fb771315fe38538789855f40a3ad139d35a907b776cc86bdeba49396048d47b5acf521414f3cddf69130af5436a
+
+A = 16fe881d102059f56d851563d9fc16ab6c39bf8317b36a81f73c8a3a04ad39afadf715e76d9376a355745a5645030725487f00394baadadb34a2d458d9eb19623c4f3f9134a954dcd691adb85a92be7bf7b2bbcb7426d19db0db61b1b60a21c98cadfa3ba10aefdd26417128f147a64fc01e7cc628e45959a36239742017b2c388f3f1725a8
+B = -16747526d8d646f19e9cec42182f11ccd98ac3245d2a0d8312639d07de4ca85f91e07a7c6bcd152374714033bb7302b347fb225b5be9afe2cfff95e6f1fe8e4dcbc1a46c049b31360f94fa28d5df1f55cd8efbde5db60384aab8993bed69cf64232d4fd9941c416c4df3074eeae4a7f41fba11c5a2b8b53c15c8b3d1db9bbb8197a69322784
+GCD = 1aacd834d71a4c44cc75219dd054809b1c7392e12409e7a7e315e2be15759580e1d86fdf1970ee382dfd2b43aef663c8a7458d2d0ffe9007bd2406f1e7bd7ad4a7d384
+
+A = 13d4c4fc43bcca1dd8d26845a0895a03325273eceeefbb9a2921f189a8489413c261cd38128e85bbdf833adea94925f2475af98f7c53de6eb39f9addbed750b6a6cdffc4e94f1dcdb9e41283bcf84b851a65fe0e1b59ae13042ff636ac36d8370df76245d74b5feab5ffc06afa8c6a2920c98efe217932e0384fd748fb88e8413a0da6475a8
+B = -2101fbd91773e403855654985a8d2cc6e97ff9cfa3def06420293ee04db7247cd3d720d8374d7d9bf20be5313cbec44f1aef6e13b40032f0c314db1927aa562b467db302614f24c1c3ed83c31ec4f22336e6b5138fb028972b8498945188972fc2867e786dc2de8fbb39a4021c2372ce327d8e306464fdeec7207d86ccadacd0509518159d8
+GCD = 20f4584f9d7fca1ada53f64dcf9e7daa2858560c93b18b30f5f8e09066e56fb75dc1e5f0eb4966128470981b4fde3f219f77862bf4fecce7e50f377280c8b41177cb98
+
+A = 7555eaa8f908aa343ce73e003ee6474bf851d8cec253449016fbe39eae19f375f7cb5684707aaddef5832bf68a9e8f3041bb7998d105f0c3d1559bbd956574adce192ca3e82a7040556236fb6f651a9c7dc49b7144dd658bb4bc9c4e24bad7f07cb187944cbf472fbff452f271fa4d64ed0e5bc12cbc4f284848c28a09c4a00549122758023
+B = -1444ed4ad788362ea000f3838f2b00fe58b1fe31b625d24c566dd7ffe9923726c01d0c67b2b42b49f810c942d4c53bd970490b25d7bc2c06e9bb5ecc04af20db30bc685eeb012cd4ac0a9bf6ebae73bdaaf058afd188fc70cb89288958302252dacd2bf5f565094974ff792f65ca785ac9c3a4ac613d29813172c733bc391951aa6b9867d2b7
+GCD = 703358abcef86f97b51ae70443a419123e510a6265c9d9f203f4bc0123f8f7cf37b8519038f8717c4bcf18aa832e6fad0d92faac3fc46387a002d946661980ba7929a9
+
+A = 30bc428710ba249c0c9522f4567702c8f3e0901417702d43e2a5662c6d71b2ab94b9fd1f303f90eb1f6a1b223535a46920d4c4a4c3dbdc84b02bba63026fb08b2315b5fa4dbd76e3968c5b8ee0b62f95d975b644c7f0db3939da1699c9495c51b8bb0681db31e3d2b27476fb6834de4d70a6bc2e2134ff03fbdc84dace2fc2f4d47eebc6e568
+B = 12865cacc72f44784298b8c11b84b79dc5d46151693c3feba814c01092f059ce06996174ad1cf4db13ca796656a85463aca03240db680e824b2c6272568e77dafd316f34e62c5df3375a178378e36ba0787a4f889c62ffbc7507ae9a07fcc8e664b330e61f327a658cf2f72b2dba2b179d72010d55dd4074c13db4283728d5bb21deb245a194
+GCD = c8d609267d731614a685ee2dcc2ce0d3c0809f859ef92d0e655a1c2f344dcdc170883e33a1f1282ac5d0b55e640f98b319eac83ec56d9730ec173cd5d0305113d6a6b4
+
+A = f28b2bc311cc0e8207ce34783197c341d1134362f2383c988f257ed8b8c7d690da00e5d535004772bf708d494fa13b51520098b362611fb0148f921a01db0cd2cac6c6cf2c68c8aae4155489a118f28f2d05e6d5c23aaa7ba3db59776819367e58288d1c363bbfd7decb81a5602a91ea0d963b0c207034b5fbbc76043741bb4052a3c1b7511a
+B = fd94885d924a51e4bbda4f74f7c2d55ab3ea66330eac3a5710cf8db499d3a6a8fdbb94ee1afe64a5b134a47e3adadbac10b26a8e8fe5aa5bf2ce1ed478a1fa82ac29edb9c2e8404ab38a8d4f18e542f9fec20d6e445b1a5ed2d4bd5615db0d1d58e20bec18f01cc3d17b9e2f275fac08e473df2f8f309c0716b04d99ca5f0e2616837b1f9076
+GCD = cd57d8ed89c357417c4bfe4459620bc0a16b89b1baf19e404e5659b9ca58b9062a0ef6c0a98ff967ddf00ac9ce5e81aefa17771db7a0706275d75d0f1b7d7e19610d492
+
+A = -647ba90322fbaeb96f806dadfbd81b30fa7726527d443d2cb73b9686c8d08186536d2db1c412c88832d071745d824f1fa82c977d9796ae5ce0a7ec308d54957d5f7e59bdfb9831de09daa470a5989139350b199a8b50214a0cbd1ec8ec11e5bae857fb03186bfd69bbdcd773562bca7f36e68be0a88d674240fdc40277fba7ca538d20853a622
+B = 490b12ca23bc84063c8a3d9c7ab7786adc96e53b818aeaafaafd88ca962c128bc69239785373cb5f0a4a91f32ca9ccfa54b26c3f36adf5ab7ff7b7fb82d1750a229a8114ee4aaab155dcbd49b7c84d1c1d64fd98e3e6944c3a434ff6d50003df9ad4efe43d62046b3c9f18466acdc0d88fc041fa143ac09496a6f3a698cbb1addcd9a0a6b67c
+GCD = 7bf1ce1a1c3e3d52c4b53d74a41648dcec6a3610aceca319446a7d0ebdc39f1b09e4483af99aad27b1bdfc93a6a6319d22022eeb01f799b91378b4cd1265b0a97e412ea
+
+A = ccb96cb2f82f8ad40e5d0f5833e2e274bf1633f04a8fea29825a0f360c5ef1c57c70801119140af66168cace4e402806fefb9d581d9e376fc0cb7389db658a9df7953c9bd4bdab44941c70f0057adfefd063dca873a207db9c8bdb18b3ddfa91baa7102d204a7f9f5c3bf84f5c9be4439744e0902ce08bb9ca994aa0bf571e2faf7922424e859
+B = -d71534d2a4f1ed6c64200fd070b7c3b313f09450a07177c1b7c2229f3988ea2a2b52308837d4898e3e63edfb5fbc633abc1885104c3e285341ec86de17b63496a3ab7a4f33fee30c659730933e7e36bf98231c3af4300e5f9e0d3115e7c3de2d8e38e7104ffbf5ffd6b7b108ef4d52cbb6bb54ffe32f9902e34b14f7393c04b48f829e3db4b7b
+GCD = 5c55fbd8899ce296538eadfaa22e84db5eff475d2567018c7cea7b6bd6573116e400b41fc798dd832d4057f38df1ca2a8be73d6d42ba83611eef356fbc1ed2ef37cd5fb
+
+A = 51ea54ad859fac06cf0e7a6d522485a3d42e8552ff2db4983e7d808fe1b8d993c52fb36dfd13ea0b8d634fbc283d4e24c97d88c77f2dfc87387ac39dd705ed0cb6913ff791f92b51279b79dd021a203aabdf3d926995891f1884776cc82dbd087ec2341983b3ffa4f6c6b81aa6869617fbab658e109dfc44d1aeee3a207044ac1ae14868630788
+B = 2008d39e8337d5f397303e1cc67861acd2d4593fb58122afee92a22f01c9c7b8f14e45e5f146b4474c45f79f198dbe6f6e254def50f1d476ce7df9e4bacd81244ab4c1fd9531797c1324870af91cdf87963cbaefe67891bd43114a6c0ff8f5932f5a436ada7878e84b8e92f4a1bb94f33478618e277d7e74ab997a3f1afee8eeecc92b771c47c8
+GCD = 214598e8456a22d3fac7a8b41888873ab857c65d3830742f7a30b2003411b41aec6d1c77718046e4c364861dd8da2757f8cebada69c68240e53693b5d40f7330ab7366d8
+
+A = -122cd6f55e92b864edd26f90ddad77ae64d7faaab8f146ab427a19e9f3c239ac9ad0452f1fa0ae94dc2272b72ccbd6085d024f2703c35895be6785695de298483cc051fab848a2608b20d49aa70d165a3dcc9e92a834a2670c871fa20e8a16805b3c0ac34916ccde0ead3303466c22d1970fee358e626b23144531d39b2d1ffb5dbe782b6b0a66e
+B = 87120757b60840bb60620749af76c8bde55646d622122742d9e074be01d4e9aa7feb96c5efd85a07152f90f9e3b86e2a4ae2f84d88a9d4c77cacbd2906bee66dbff8cd4e171f2c75eb3b217b11acc9c5c54f65a5cfa9508a07fbb5a61f63497920ce9e7d0a8f02e860767e9109549751d26dd2c55b14ddb8aba2ce42f91dc0b4dd839d1cd6ad48
+GCD = 157093a554216c7e675db908e53914f964a9422c7ada1b5af774f505a6d130bc1d8a1c496fe22758c9e9a33be75b3fa296ee55ea5df7ab6c1cdbef48781640c5d2079106
+
+A = -bf4a39586658fcc201ef3a3e7df494eba9456a8524d89158958dea392a41a66541cfb1a72484589a1f50087e67d0772782f7064156bd01082d0b97bdc82d2c1911b1ae77391ec7ac9aeed197b5467d66d64fcf5b82de9fded19804efed393a1c8b5d46292f5dcee940a74d56d430af639569687ef808ccb886ae3d148db408057ea635275cdf35
+B = -2f1471fd7288beed0c99598fc28734050663deff146069f220548360f226b8821217269976a107911d1d94688519bfe6983cd0857b6f0a3f84f9fcb2d40af9676f43575a66da92f450fc5af035cb42baf288f353e164ec99bae3e98c37128febde8cf053168c88ee303f3438e79b6c5df2a63517a8b4107af8002c797555d88e3e201c08d1cf6c6
+GCD = 3b7617127bbf518466b3fd055af4e0ada0d96acc00c27d4ab2e1db5c508604330cf04cd928a67c32cdfd7923758c680b3ab28022c2821341b05be83ad54e38524f00b087
+
+A = -1d8da70741ba0124e19aaf5f39be7395895caedcf545e9057d8bd5acb9e9c9af039ff42b28cd2a41d6c7b3e7ecfd8ebed98b4681bad3b3bc1004fd11c4a769595fc086cb578c407ffddc50fe28609882a6721d61e23f79115475260e2a7032a2324397bbe36a526b96be511069fe6bb9c1375e5f52425093af77bfa0ff882ab275d1be7d6136294
+B = 104f32fd867d65cb3f80efaa8ac029d92caf774323fdc2335a25bee3a337b7ff0255da3af901d0d8a0ed3f6600fc89e4920eaec472c161efec51dba95eb3998dd168a0d4e69c9f33f45cdd5f1f0ee330e0c6cafe7bac86de25470b1750be6156b71ab11ef62ac91daeb56580fcb52d18a9982c04c8d388e68a5a202b1c525cf0804dc824797dc4a6
+GCD = 50254d0ed8eb6fbaccb25b99ad37191a81f7a4f436a8b99f7510f125a8a2743dc68995d7310592f2dbb1f738401abd532498d5295b302d3167d0f2af36dc81cb1a945eca
+
+A = 500f8deb6d9dce4e937bea437e9f87f2b85a7c5200fd64ec6301e5b9c2b924a0e6fd1cda1a9472ac000b76466608e7ad74956641712cbca59ec276e32b59a6962582b07ff2b0afb9c5b5298647e956c70585d94a44e3c69ccb417dd5ba4b62815b6cad2d902ce1cbd9113921b1319591639c850323624cc8abd29bf0af8f38a26fe0ba7e1430043e
+B = -5b9013cde88e7331093b5b3c6c59adef2fb069da4b9d1302579aa3b69aadeceb39b8a729e4e4cca7c8b3e7bec264693a1d3aaf6eed508658e776095ccd0cde96aec37f60eeb0a98af41b6d300e507c6d2a6f52712a63c911f3a881485e738f7b2517075d56c3b3f918abc6690f9761bac57fa1673ea8179087582c8dc16d01db3460cdc5b9809cc2
+GCD = ff38e045d99cbb2f3140aa278f7177d4883e2ae3a0526971c8636d17e2e8cb7ffe924521da966923d747d9910cdce6cf6ccb63d92486a76190f12a29e9cfed62f305d22a
+
+A = -1dc1d3b8dc2960cdf9665c5f5d300fa9bcd1da341261d8d8cad88e12c7ba40e63ea9a8dfc206feb4029e6aaf955bc3dcc049f217452fe3bef0d96ee67dcbd7ec7566a87fcf3ed453e5fc6dd449fcb74a32d5140edb62b0340fe45011d7a662975f37075812735eb10362bbeafbcf3e298cb18465d750cb80c83c0b5b659f912b7956d027f2abc52ce
+B = -55f3d3c95a560d6cdfdfd7e5c45ddfa4451c1a68bb3c62fec817f14b72c20732b847927d34cdb7e354849c147d59478d0b410191e7a24bbc9dabf6a60466cb9610d48e096d52ac84c773e2fc63cc9f10cf3a987e87a5b5986d11bc9f83c31d98d7cec222d6ea1b470d4df3049e3e6c9441674a804e2d131644f1fe905a627b80d33deb8711fc064d
+GCD = 1fec8bf2ab1a085d1b97acd55e42ce90c09ee6c213f0f695cf0669c4f816bd6cabb4d961afb4c2fe4ad42c1fbd3cafb683224c757db5a62fbe40bf00782ec7dc0498f3eef
+
+A = -628b0e2a53cabb32757fff133eed716037115d6b23d8869e08e2082021ba0a740e43736ebc0fc827dcb4ef11b4037107bdafc7729e33ad3410022f79438d82a8b05ade589302dd1ff5f720bd247a5db4589a56553c80afb39f45d4589fb3c142649d8a8cc8ed5c6eed0af66796ced843f2772f38d848265f13674397f4e7b83d974164e0baff43240
+B = -31354213000d57f03a63aefe92be435fe07744f1200cf111f6df57b0b89e0368ebcbe4fda50064de60aeb21d2e88e10027552dfb58c67b9833d6a33f077abc53a3fc272fb446d859d96f00bcf112f4188c62b91b27c780381533003a65433710f20e386bc1cf05d1d772f9b0fbce92a06480adaf675d521c0c87f46458ce46b5baaa9dd651027a570
+GCD = 31af548346fed09ea53dcd763f6c56a0925b3ee7eb2ca36b24eddf447f743dbb341551e51658e45526af3bc2bfc6b3f063d5ec8e00b97103e9e450a9a575ee7e91941cd30
+
+A = -172fe45a5252fbec4dd289c378a8c074c7e0dbe6e17b5d8a9a77503b75dda3d22d82f995ab3f9cbeefcd2c5836fcb84bf1ea5252b4022447c0eff74acd53aac886d96556e3a2152b8f9a67fb8d0ea2c9e11984b3ddb00f3b6cd56f032bd24507a1885c06c0c79fa7ffa967e27608ba0ea5d1c5610dbd5c4c7819f4c4a2e4698cabb83dd7cea5c9327f
+B = 6c8ef1f7ee9937b76d865d54f0e9579748fa3de4363c7d334718ff0e5bca0fbdf436507cb1eb450c17063335ff88dbdfe4fcec973da1713f6e6e7eb4c60a50e3a787e8e6670fc58d3b6f07a08a1cf03058106d076bc8a996f293b7d85f2b88d0d257e9d42473aed894244a7fcc365bf0fe254d15365560c7654e2f6114a0353225e014f2f9326adb0
+GCD = 14972c88494cf36cc349e2793ed601017b6bf916d8db44e691fa20924489a9652f507725a8e1eef174329a696af23b29fd373da8cd45c5e9bf006b7676a054694e6b25e337
+
+A = 2b938a23b7592bf06778359502eea2ed28a56ecdd984dbb45bbe9fa60a4cf35f25443ead6946d87471f6936b205cd4bbaec1f932c3e39589520f664a3a03c65e80796fae9caf24e51f66de3ed19dae4ada8396755b5453a4cc431860dab6d0b8666338a71117c66a8483ea1911efc3cc7400d81ba7730730d0ce7ea4665750405a859e589841c830cd
+B = -40fad12d653450e96425a94c74cd5f9a5d8bc865b5ba7dd189b133be7eb73dd491103987b6a7dd4c92f89f30566fe90520dfac93aa6daa801f60521779e52760fcb0b8faa7223d0586fd329620fe2156685bc7afaadd2a22078dbba42979a4542c46d2dce269716c844a6bdd690b2e46d32d7f030fb68f047f6b820b0aa2ac60b81444d1f3054ffb41
+GCD = d51e1be17d01a5a3a562c9e838f72ec0396442454f8d57d2d5cc3ed067c04d69fcac147050529a41c81d7313e519ff2352448927f847bfd34121119bb5b669b8bcaa500b5
+
+A = -cb258fb9b7527bc8546c218c14a580666c299ddd571d52adad2889dcd9833a939de7f037337f13997e895d91310ceea034dc4a808cc21b1db556a27c57d4846b2ea4d6cceaaa51ee962af5099e6964cb276ceadb56f95d65e95fbd0bb5630b76c778659f7907ccb9bbd62761099f46410bdb1cae3f1530ba99c3b9be6309e9162ae6a1fe102f93d845
+B = -b06ac046635ebcc28e81be9f696e0243fb64ee487793d935cd825515e5ee2cde6eff83cdbe1f35d68a836322f99fb0e48fc49efee3055ec2dac9c9c6c550ea379f61bd8a82bf8cb96fd2024913fb1539438a00c9586d83bb831422069e755ef60cbde73465d0cc4fc64a4835dd76a64b3af090fb53f8f9e2111d6ebf43c536fd81bc37cb1b26d66673
+GCD = 103d50e8d7e183bff76f7a0066ac7efbffc6a6364512769a13010fbd897854350ef583903eb0dc6da86f46109597e4a02fe99d7752b33a7416cf4cec2e83fd97155f318543
+
+A = 99bd621b0b36b5db62b260100c57756ee6dbc018c54722cf8f4e3337210f2326cf3050ac6118ed3b76436420a8e832690ab433773ef682c519bf3680b03e6c35a66681f48f1c160976347e6577794657ce3d242cdc29501fb0ff5d4385c496da441c04b383931680d039a1fe8d89e59b0761c91bfd478238ff0787d791cda6e67b8b0a5f728dc43d50
+B = -3352f27baca38cb00ba3c43aff58e6ae19f76c115c330cdf712d698e638bc8f9c66fb77ea734ca6b633d7495b1bb992e67307ab27c982d4a9696791406ccf6226d68cd2577062049d3187d6e30df09d679b156d637687132890f231039fec719bd6b3801d9d0bb19fcd4918a1c48189a3bc1db5287a87d486a7c78c9ad756ecde4bf7ee434ade8f5b20
+GCD = 2541d6f5419a07c6242b70744215ce7eb19149c640bba839202893bdc063f98dbd1493404a21167338a3470f43733b08ffceccb20e40bbf0370f22bf9986dd9823d9f7bcb0
+
+A = 658c5045e7796579b19cef6619bb689f6ce5ec1091353de6a1aa62d22b2d96566d2e99ac3925ac2a44d763200b8bffff3733f60b871cf8f1f9442c3eb1c4cbacd5367f8c3ef799055de647ba23f9dd9bce1531f3ab5ba078a21f42bd5d5b1d31660554907abeb94e84e8f289885d91fc8a8fa7626c379c2b1edd416ed808e18171879a44e9360da16aa
+B = -154a4ebc05c9675b2c684864cb263d6f6ff22a82621d322b97b3c764c05c18dc9d4667ffafbe781f77c005942fea77403a1a2ba943694455ab9665c64a7a338890897cf6fedcea2ee0596171a6185859ac2c84eb99b67b74a907d7c4d273adebad68541910266f3fd30ad0082207709619593a36f0c9648cd1eb3e102189fd781892fda35f1c0972339e
+GCD = 65af96657a43ff35d51b6694bc1ed0ec22c5c932762b688aac12ad9e3d177c649b05ae6d9172315cb48033483753cb9a2f46341cba0c354bc824e887b75f4ba6d712a3d97a
+
+A = 1e4f64ef6776fb0da068720ab1a83dc5ae761a6b3ce958db32b2b0dee7e2c06a49389fc9a519b1f1f3d7e7d543bac9445706a52df1c73b8f444e31a7c540908dcaf983b4d268462b67a4e126a1c82f9832bd1fdfc7d74ef74672c3a3249006ba27ea108978fb0102d6c480a1443135724017bcda82154656a1325ec4021693860d2d9af6857924e2d4b0
+B = 282090b311b569ffccca865737160c0628e111504b10cb37580e9bda012f49aefa9cda58bd06a0ed1dd990ac85f776ca8bf8f74131977cd8106f5f0f8941a6486b181c251182e20ef75b7b0971f9d95a910fe4e3c065d194395517b79c7262c086ea80af119bdbb90690ee837ca5a70208957dacda4fbbd1c40a509a2a70064ca85d2bf7097b1df8c7c4
+GCD = 8f674fcf35583f7997a36e5947f54e853191ebea29413dc1d68e31c895f34e7b5f236da2519690c778a019d3fecf7c829a30f7c9cb02135a3049b35e85b77e23f401557504
+
+A = -42618b21493dcdc96505929fb8ed9a07dcd300d16e29d2f528757273e596eb521c5e7c8190444a755f142a53dc84d8a756cd0ab52b3d4a586a8027bd69855f074be8d4583584af85ee550488dc00165f8c16da466c252a687efab543c9b34d7a86f5b3dd43324912bc4c12e75d5f43abb1e7b6e014f0969f7f5aa43729494b5a3b1d56fa0e33f047a6fe
+B = 2051e8bbcd1d8a00f0d179b124e8506e0817f5e2125353860458a8dff82a016ebb32908e3a81c7a7d923095832a58cd17064deeea2607642f4fa6ed0c48914c8ab1eb68900f1907a430caad8f6c07109ad7186b6863f4ab15ba0c93b3b1d2606c8a0d552a29f7b795dafc163ab29a4f3e06adbbc3961eb1a94aca2b3fffdb85741acacc82f7ef5c32d40
+GCD = 6a45c6720435ce6abaa6cf141a1f12af2f68471644721976da8e3ed320e42afb61958b9689c9f0db9867fda73d7519cd07ad5fcec3e1e7c477ee80d6902d0ca5f231823906a
+
+A = -468904753b138a65ded2657340ede8c7d79041cfb5c12d30cf79ab60380f724ce5142645141c83f61d014ced6a02d74f32d9ca830741d4772f3eb0c0a996eb9826d23292699f2b5a094fd2e4f21648cc8c225922a675f73f2150b5e720fbc74747c5f16e71f98345271044a3233fb4843f8a6c84b6c120a3581588714b9571582141b3fc16733cc1cef6c
+B = 744b38322466d78c8e92127145e39c8ed8c1c3db291009af3260671e7a096a5026fa8680a522b07d20cd6cb2df919c0dc566eea6afd013d84f9d54242190282407a7791a740b803bf97f5b5b3c5273f73aaef095980214c75696a7288d9b7e6cd9136692ceb6276a082639a4d92321754ed94b589c27ed49e9cd634d7545bf478f9a8db4c5284971d7bd8
+GCD = 7af66d790eb6f312134c56b0081afdd92d30ca38b3a85095cfe951f21009060ea37896f4d7871312b2c829821a802da2b5994a7d34faa9af4eef5f0bfe12e38290b94e2cc1c
+
+A = 759c2137605d4895a69d20f020e57895db4ff81253a8123f13e7bd1ac3c9999effd0376a9a39ed5b94932be051621e4af0145d7749e29dd12b25ce588c5872df7fdd10404f95fe458d36840eb6a841c42023e1f658babfea1bec2b2729f2d3d89a6a6bc02c141deb9c86764e7f93f088bbf862b4a19b51ea22b823d5066eaa9d97a5f2330741f62c82fe8
+B = -12c5942bbad55fa6ef6576c96827e7f5f7a87837510366f189bc5baea618087209a905a1f079ff03ae49fea1c759731bd18377b513030b73ea3453fd3d52498361026c4efcbe99cc56f78e1ca11c54f0c7246686cbf1e9015eb2505a4ebe9e6c73ed31cbb1eb1383741c2201adb80ee633b384f71b09db9730d43c8b8025ea81970f09eab2b6094567ed0
+GCD = 589d64e5cfb79309f63d0b35e3ba4e12cda01e26df479af513c7d80f75f0f84c06d1172c82ded097744161b461d5e70e3f1ed4325595c02468c0c991aecf8564d20a8395938
+
+A = 12bdb41d8d54e99b4f211bcca96343998e6fc66397c32d3f2dde511aca69abab5320e08947551849c19e85d72ee1b410e0777372cdb5daf5b13473e16b4e32f4c1eddb7f7860e5535eb1eaddca0191f200c9b51896b645f080532e43e311f1019303c32f29bbe342645ac6d731f647f84bc1738cc102f080bef4f502eed04bb0a1e1bbb35a761ff060ac6d
+B = 3974d7b94750cddc6a255bad4fc733ee818b742ac40bcf30e1337a75af8f38a82b3c8de508ff43c526a50063ce87a45be5520497e9f457ee5bdce7e293bba6c6871dd0d2a50febc574ef5bf9f77fddca467fcc06379eda15f0150a91c3b551126ff2304bf11544f778a840315e2b8c278c048503fd7a5f4c7c85330d7057530b06f5cedfba4ff4a3d8095c
+GCD = cbad210fe24ee6514782ee5c9b930aad3012dfebc1a2361a06d66a99235717a9741b1bb83a475931d78293a06b9cb2ee7d84936318df924591621c5fbe8b9f1490e8a55b07d
+
+A = 13a73cc4b3c6f51798d53319d4d42370c270903447f906b0ef2f0e1a5d8319a030754ccae0eecc4bb2289cce1986d18285cb65f70e6fc6f2c2700dad5d37cbd06a9b2fc9157adb48d65094f88a2713aa4649c967bd19544448f3edd6b5e9a2e0497de560795ccf9f448911d8cbf41268cc89b6a2028c44618e32369837b36d5c1b4500c0d47fadc59b19bb8
+B = ee6dc9328f3696483ef45f839ca880a63dce610bca83f41bc92c3132234ab4418ca70803fe6fe5be4a44d94c0e9f182c03719979ea6f57b29ad2ec19bdbf55a1b89e9799a6a96ccf1d12449f7adfe51df1713380d93a21abcc5da4337cd77c10fc9f2c18154886d0b2b0ff8a4c937bfd0744ba78d892772fc83b4536a4f963fb37e9cfbb3f949bbc351602
+GCD = 7bd5a801017a66f16fb264c01b78e417e8154ff42c5fb216defe1fef95212f5df16506eb2d8f159ff3c4c5cb40b043c1de4d31ebcaec5367373cb6f5670dee56ad91abe5b696
+
+A = 116013382296fdcb0509ab4fb83c0d3d31ec8781b8af5f3d22b3e678ca68b0ba8108ab8eb64625ea2c31c1bb1d0cbc6772becc091fdc806e437e9b604db9671d7207b2303bbcb615903d2867494dfb3ab727c25e1dd34000bb613e740871b2a4fae5ee7c338650380d1bf1eada4279f601818068ed41685febe4b4e896be5b6cc0114491e910c99bb4f1ab0
+B = 2ebb4655bea88385c3e090c6b30bbac5a7f543186e43eae765291f6e759f96e5d1100d583ceab9f01090903592249a9ec83e9c44b79b90460c738cf452b47d17c0d69f99c06a69b6026d2855afd6e6e8fa50f0a3f4e9c7f894cb073d20d75e97c12541bea23fa05ad4c8873f89e9e1e14bf93d030e1729702acc3fdb359e604dafc0ce9727a4403567472f0
+GCD = 2a3804a44bf2285d7f63a048ccd35e567d7a6af4b9acb00e1cfd4d23b3e342076d4d18d64dbd47c1473867080a77e47a457fcfc868a663f221534a6139c61a2d05611cb58d30
+
+A = ccd52b3197c07b9688271b1f9b4cd8064d040a326d2e8cc782e053d23a448af3b95d677887bc90f359890ccfd8cb151f7f1e002a58e82dc32c5cccd358ebe4bd7337e70c7fa0122c668b8ede36e588c92922a850eef96886b362ad1bb46725cfdfa3f34d1172519596c56df1c2aa6058f76ddc892b5590cc77f8d55d66c4c7b992273b892f2f29576e264d
+B = 167ff7c9b791ef06fa36e4b88332987ca835e924b0d45589bdde5ccdefcf5173deededb1902e300e60a3e25aad9cdd6cef3658dd7a2f5172a9c94ba2885d40a35251617ddbd850c37543d23f08826a343beeb7cdbbc49e10c629ce6fc016b3ea617ebc187cee83db885c2d1225b017233bca0b3a52885ae6a13a6f68dc9260bc4433f011a1f4a77793d8696a
+GCD = 7b2e5073a975969990085a7f1c47c192423cb3e32a1ae1c7dd5d95d113f76b803938fbafa78c6190a5ff5872199aa70ac1c12b59a5679ecfbcda909cf7ed16077fa4527d0fa5
+
+A = 3e993a6d40e09889c281e688338d427fccc7300fc3ad750b499312f0f5810d2a03bdefb98dd72697afb2f0893acff757b8631b39c6e6970ed64e378d95f757f95735e4beaadae3ddd710268fc5f01a5aaaea981fc82fd19dd39b1f18f9240a206b43ad225ef671e7ceefc2eac8b425274a29bae02d8feb9e1c1a11888bc4d85b2158ed8e08c0381791ce86d0
+B = 2a38c3f5948a2eff872b9d7352f927b13cad03b804d39916c6ddbd72ff32e27af0d4629213764976bbb01f2b2654c9e8c61f2c4c933a48d973b46acd7e22fd691ad1cd50435dae979eed76f90d9335df322cc9637621cdef7d55c9f5f4062ff57cd02014104a6c3414555e4d679ca434ca698eeb52c942a84d7ca91e090ed60d36352eaf21b8b19951715960
+GCD = 1694fbbd006933a932fff32df2a7d1f897f60b5901cce46f187919b6a5f52b8d03a266a1b1b8c10820140be300bc49535f8db83a0f32dd5e4fba8f32c349bf7fd8c1c28baecaf0
+
+A = -106c3a237e70b4bd2d349c59581820ba71332357cba7ac2eb5f936e63eef61901f324298f956b42bf349d4b79f4e403c8f86c8c103c22d4263e4db720d26cdcaccf8babcbc9f75ece96f43ed9cddd4c3faaa6fc50c351d46cdf2fae1a74e59736d3ab1593cfdf2dc78f4c23bcf5380df577f9b9388df56d16c6a942998b7c7bb08fa8bee6f2a55f8d5b68e9b6
+B = -52c80b897e0f513dfa880116cf0b3b643cb58d7c7e09e8cee4a237b0a9c308fa9fa56b6383e954e31b7aee7198ef176aa82dd43b6fc82eda558de4938d7b200cb00c0ca0b18acf65fae95f1a172a403e2654ea154645fd47d3c408febff17035755d8ff9474fd02a51286223f6a3fa40fa6b528dae981ecf651466e4bf7852c2237e110c9aa358cdef1600b5
+GCD = 138da5c12d454b942196d826df9e4bd7f06329ffc3e4985cd945e39ec5563bc62727c3b1f906529caeffd207d71a752ab4fc655e1b6c6a32d76ece9cd8544bc68173ce6329701
+
+A = 6e116bb11156442aec05e86262e59532756fdfa0fe2c7a8b3e2a11589e52d385bc08b5a3c546b7416604c5d338ac819c9a38b84155d1d11e02e941e5c9b13b850bd82590cd12bb28b07bdc8ae73a4007feabe6b5709fbdc6a02077035f275797e68fde3c6f0f1733d30a76fa8e03ceaa9f0e0235de4ac5ccfcd458998c2965c6f92d91af53c4bae95437d60ae
+B = 6b8b7bb3ec30e277631d501e4806bd280454efa36f5d420cc3e91a74ea1dbbd0d58122cc04769a9da9d77fa83491126097b404f9e5c0f8e7df62d3f022a3268350820fe4d00e7a860aa2cd17152fb353c567f354ea10460e8cad48d2d7fed192a62a34fbb48c2b6f6e27fddab67a5106572c389982921d73377f2220ca87e330c8ee4fae050b2d4aa08aedfe3
+GCD = 4b80bbd15d8054667664ec7c3edffc88a156d502642707c255bbec9dd16d861d64a8b3852751315d8260c598071c0ef0f783654752273799155fb4a9bea34fde70a547103f8f7d
+
+A = -658b769fe1ec0c9470bebfa6d42c5fa822f0bc7f57f23d7b97a7e2e4daa57f550d1a3154ea91945d1f04307233d2c526f0a007b02451c2ecc3da0fe6c52f2a36fe7ab7b2a227f979acaf58649eb92aeee40b7234b26aa4202f178ebee4e4af432d2397db712355c64119dad797ab1e5a40827d7609dfc502ccaf50bba16eb62b079625e832f1eb939138318e2
+B = -15bee54a8e2eed4bdb26a17b4ab06a17823805d1e7986f02283b71c059011d25cfbe4d17ff83f4d3a6d8831ae691fc1fd379d52a04812acb9bb538a3494648d5284e59c3728a1004553e9d174ce3486e6d90d701b5291633a3e0323a00515f75871e9ccfa3d2a40b3365e8004b3cffdb045509055e62a68a06eb4a581ff3b6cc324c1ed5a92817b47135df1249
+GCD = 118d05fe7839058e457f08551fe5f9c89f9d9ddc727f356aacc94ee805b17b84043526556a87f97a41997b53a13b0db422e0a8b58c7cc4ff065d9af63db5945c3e4152b4190729
+
+A = 3773335e80d7532130b503862e7530c9c5d9440553d23cd423a1697214f4933dc50128b1a38a3df3d2a9f8bb66ae1d08386f0bc7c84b09c7436dd2b6296313f57d8e5af97aff0dbf45572ed9fd5cc7f2ff24a2ef890812be54dfc373279c40c8ecc3c42d4a279c6a0f75eab8d07b52f7b69d62f1b1b5676406248271ba2fbb1e47c33e65568f9e9dee2241dbc8
+B = -3625a177b05c105a93380fe83530e6f415b00b7d5d26ef9ec0b2ae9013cb28c6a446814c6da244a67bfa05fef46cff666079937d742ba87fc4b0e32b907522606fb89a630d317134426c8bea1f5cc62d8d0e246eef7ba8381c35a90cda907b79c7868b3112fc1241e1ea4b126f90925ea47c1c53ac3137a2a45fe2284549d97a1fea360d64fac46d23de77eff0
+GCD = df634cad101563165e1541739fc6041ea443098d69381d9df62e21373622b859cb514af64dee785802ec3c0bb82c8debe46b85eeb4eb6cbe06f42ff60de1fbb635360cc527768
+
+A = 16153809f7c35e4d82547efb033f083cddb73e0d069727028d17dd2dc7eca38e6eef767cb7dbb9adb0cd9b4189440fcf56367ab9c445240276e3283d90ee88b3a562c449ea2ada4a19b0af19250a6b671be6d48e3ca201defce42756ec98947a1aa653d599e0720e90fa2327c262b2739800fc15730ee7dce938cae29c2c9e57b4886eece98b1d9a4895c257514
+B = -3d0815770076c6c347449d2eec96ac6e5c56b32a69ce986a6f0812d5eb7be90d465c0eef362499dbb79a792e39064ffe961949491fa361f6601e534024ea88e8b75d26626b9808552540cf08f9a63eace949b51974d63f6c45fc6abe40ba4332e0a0ab90ff58cba40b716e88565dd6ccc329f18fe6bafd291d3a886b1a9f653c3bacf87f5cde9cb016d79c4582
+GCD = 1a11d0548fd3fcc723ce2d5a58d8052ac63188e427203170e235f7d24fb43d1a69a3ed6ff7623c3a47f09879f7e3524487c1f162d80b4235cd72e0c651aa41da8661c717d7886e
+
+A = 19e4f4acdfa6379561e4fcc72adfe054447cdec7de891ed5179b34ddc9a8728a09201ecdc13316b25b3f9c70b234e8dbae0d226e51793f69036ba109a9318e0fd0ef53a0255ab4c08f1b21ee2e74ef07bc122b910836c71a4e52dbb5e8bec5d7965dd166f3e8c8e7d66efeb8153ef4d773042fab8702962841365e7b0d447f43c0944a78ef78d2c159bf9bf92b0
+B = 23a789a04dc6b013f71a53f66f6ea941e058780b0013cab8bf4c5355659167a78dfd7e708d9bc0a9fa9b3ff2cfa0ce41d60f4369d9b30bef9c09d81d78ceb3d627ebb6e88ba71de5b4332e712406005454e78552ed0a34d36b9ea6cf140e2dc79602d63866a43ccdc34da731297710ed45ae2b4c9b4f4eef7bf0c820a1f9786b4263d600fb376f9c75723bc8388
+GCD = 5fd44646d556f78b05fc93e514f307a0cece74985ffb4c216e7463268ddf418e6b68289d8e7151921f11669536d1f3bbc01975eba6ebb8cf3c12e8f7d8458389e8284d110b2708
+
+A = fedb1db662442f1ecf0c5584c39ef4911ba854228d84f6dea02a3302b101d470897a73a9c2cecdc933ba030c5b2593199d9024b9ecbc1ec516894a3ee8e4f4be289f18d6d11ab117ea8ee4242e0b212800dc70b02fbc74de0a805689439650ac089e98ff24191dfb04054ac28e70c4458a7c5bad0cff9947d2dd15167747194a059dc6dc347be231dbd75042c2b
+B = -666c5ebfad976ab023ca571ba50f850a3d9f8964983397c1c4ab996fc8921dd376bb9dce143bd03a1cdbfd9ee03f2961147c42b53d07308777045f51289a3a3689f2a5db6492d478ce26f866383b23771703a02ee1812b0c3d05c331d1409e1cecaa86c10bdd525e0b0cffd7617238e54ba9956a12d5f384f30284b37193df6ca12a3a2313fef491f43581e3ca3
+GCD = 4c314f61ff0d0da6bf4df52395eaa7ed7d3f3f16f5bb9fa1ab82b07e7dbcee2bd5438e26d5f86073e0062e0dde824c4121a377c537d4d7bdeccfbc67f1629ff1e21ed4c4702f79
+
+A = 1dc0aced92994d2e5c24060c620576c3789738ebe5f7810c4d763ff700574bf63ac366ea3971b76254bc3e9a5b07d87da5a567aced1d7e4a7ab90c67bc2475622402cdab454df5862ecc5b46eb8919d91328713df150d5da542d1b3704def1e92da92b0a18031c87c036e8bdff0c83858944e0c85486d3a44a8fc5b6e279d1c4fd7c551da71b158cbef71b22d0bb
+B = -2c03cdfd2614ca09407ebf500a54179d9c76c92d1ec63aae4b5ce5c7a9b0130684491e2ceac349bf84358474577f99f3b1b5b734358fdc69ca96e3dcf43ff49fe06136aac546ccba54b130459771a317003f0228faadc33d41a88aefcc215bc5ae5297ed41ae8a9c04dbe2f010bc49111db4654a07891fe54676edc8378c4c97f8bab7b9435441c1ece0756db9e4
+GCD = 811a1c35cd903d83c563e1fd437d7f4e76fa8e4ea97a61df30b7e993aa7fe2d7fd491dcbf45e545f52493baa941c122f81f62afc2aa4e6bd853b91fb2760978a061b9ad82b9717
+
+A = -1a599ec72823ddb64c36f739ca42313ce91532ab2a24eb61f85266f5659c1a8691c848f7ea5b19dd91b5a4a4b0d23a045352cd84b522befdbcfb9d6809e81c4370557270ad3137eadbc19113ae21315283b039a5c7064cba8797060620d101dcc9741b9e178e6c845857c31d83771bdfd0672787a3d86e97fc22c46bd9e9dc328b82b6f019f5ee1b6e49dee563108
+B = -15350e9da0fb1739125ff455eb09daba12605c8f28ffabd786e2875150650f36b8a7220eb2c571e1250559163e22f12f65f0c74ae5f49a2cb5301f9bff3192be98636f5e03f127e73473f5059a2f4d9bf9efd7cd6cc1ec9d38e3b9e26ad85c8de6fec79e7bbd195f5fc5cf83277139940534e065f9e3f6b50ff0a2422e12b6db16d3ff72a3164a00e2bb6068ea1d0
+GCD = ede3e5a6a8b7f1c693404abcb0a01519282de1832258bb707e158f643d044c44464cf2a3b41261c78d6ecb37c01794a09fcb44c6f4db85a526361971a3738c45261dac4795e0f48
+
+A = 9d254aa6b5c58362b0ea14e115b8d6cf3facd87d028428042748697b3aa105e8e796f2ef9bed4844aa520bbed84efbede2d9ceaed835575233b24955fcbada6c59af92f36d83ba89813e1f40dbc36f3a9495571f3e63f8e5a7fd6ac30b5ea620fc9ba45336125772315eacfb139e49549648311fdd609a1b14bacc262bab25ff95f881d0d2a35016a11f04202a10
+B = -70d6a02d24ed895ce3881585c57473e0179761a0032d21637a06b6786ef177a13877b4892cf7aff93015525bd331d150b06d393407e46126dfc9ee3c706528f6d18125408c01780082827f57fec2a627ab4ed11ef05b988a78f64441b0b0e5dcb73aa0ef3509c7ba297a33fb395126ff097932e7616284efa85fd1e5a503a6c6a1acfb48c3ab1adfab12d5819b0c
+GCD = 34c2f78abd9938d9b89d15c6cef07694dc6e07df7b581666439b3383ae78c4e8b24413c8b17c969e40fa9f50b7747ad37de23b3d9ce53f966c80a0300810da3ac8722c397627804
+
+A = -1476512b768d51d1357c26becd2455c609f690dc129af9a3b0a3427009b31b72d3a7730bf038bc97de142a670423ae77172ca646e21afa4576c3f8199adff7e20d435234fe189efab488a1f97618159223caadc006bcbf77c11675e05560981db97caf54088948b910bccb0a9208cb5ef66c620db4fa59868dd78092a53a8894b503136f1925ff01550cdaef38dc18
+B = 1391c5ed08d372e87b277f16072e6a63a15dd18e84b079c7d091aaeeb5a73783d857b13d481129e57520c61c0f1e915f7648b0bade62a7f9f7916be6a324552062a0a9c2bcf387aa847c113a61cc647bb9a890d1789460160ad3aa1d9bcf2a01919c91c69e7c1ba92f256b4132f96dad1e51bfcab27ecc88e7ba6d7a3f139a5714c931ca20e5f083253f13e8eaaaca
+GCD = 5420356572d3d9c32cb2a0113749c7da88e86ff4e9bc25ae0a63fe943e8cc9622619a5275976ce61cb2962b81c7d6b59f2a0aec0320d17f6df6f694f5d35ad6c4fe6bda1731fad32
+
+A = 1d739c647b14d9c925c9ea783b2c0470e7e86ed0ad7ac19eabe016976a115b70e4369a2b29b83c7c6f826df023ace50ea8049a1ac94d487224f924626f6acb9d45bca737b9d91bc9c49e121ba88a7cde32383481573a9ebe30f593815c65bd5ff55032ed51d474a289b8e2279ba4339fb8bb9312579412231310649964543061ae5f194cfc00387bedbad475a3e800
+B = -1ab0b0ac966f3c6a0d613bc7492d33acd6f6cc4f9f823c9d8cdac73bdce1bc9eb467ba17841c689e1d24f298f93b28af015b2abea54c90672f4ac9c6d1bc6d57a23795cec60c1cf040a43a81c9c7b57c093c61a2ab83f4886879b30d0272defe06bb1ff39d08737f79f9bf7143d7b7962decba9b6ea5fecd764cf997e27e053a0047069ecd8cdd0ba320d46726f377
+GCD = f27af786acd5823b55e2a9d89fb27db0c71cb62c41e034fb8004a7631cbeda8267802606bd544a1045e01cbfa4c439701b256cce895e97fa8a181f1b37894c97a211d97ccbdb83b
+
+A = -e41ba44ef0a3ef96b0e9829da414f941be4ccd2a1f50bb67a8968b5b56e7c188961e0025809519fa41b65c7e81ad7e8d7407cb27dfb5621f662e3e5b33b3d0da660527a75e72b9c09d979b13edd23ed3f980c45d70401908dd2de61008ea222254f82f94132cb902b70d2422d20fa1252a066b498bce838596bb540d160e4d2c3c513fc76bbb34987e028a16e77cbf
+B = -72120630d549bf03f75b3692196ec006b92ba5d592e8a491d78bdbc88e19d563426559f9c3007881f684cd5c9693623beb8ebe8c2bff5ef471d1f15de9bbb01e73c03378117ad9c8bcf91199f9ae6b89d5b39c3d4f7774ea20a05f94dca9560caa3f7a4a5964e00531d7a77db616e18009ded8ce405cdb43c14db058cae083f6c6ee58390b4201c6a322acb2a87dd6
+GCD = 558bc335731e2605651c347a0c442bc782ac65e74925697f0d91f515a38a0fc80f1bbdedf075170260c020e1dc01730dd8562538267f33f082ee3b6d06c94b6088090f1ee18b4e49
+
+A = -50f616a9f792ccb1ef70f12224666cbd106de6e079d372cdc0a6795aa9dece214bfe9b34477aa7f66852e27b9913e7537ff6e3c551c402a1ff220a617cb0633f9cfb622ff2f186cdf749fd2f18c185a2e8dbb4bba064abfc5f00ce96fc07ce53f2fcc03489dd83ce12844dd143b1faa37637cab420fb96d5553d155bdfd2e8a71e14a38ef1ef1d6ff81a3d2e3c6ecc0
+B = 20de912f3266b0ccd3cb688b964c64915dff91d406d359fb8997de628712dac18d4814c1dbcec039ddaf11a1bdee44ed4b5e313d7d60a87a8320955d4f16131f4c797eacb3cd52a005418ba9dedf878360dc8ef9621ac8a9e35caa6befd180e553393ee6397650271a46b80b70560523ce9c3826b4be8d0aa1015c6b8e1e2444b8f0fc313a704715ffec69d0869c8c8
+GCD = 318c076ddc7149d530d633cb8f2fcd72d1e35e91b6fe929aa9c7e7b4817583cff108b3f068157f4b218d80240b5086f674f04267a1266a8c3b17b2793632e2795c96db19f9ed5e58
+
+A = 60763faad9abc9ed8db507825b827c9ae30b0f9a2ef88ce0b07ca284732418baa3a4bbbc44dc351daf7b5a366ea0b166d1001b2dc6d5fc13dc1eddb4bcf002263a23f926d471c905d92c18f4f9ca82a26759b3d379152598a611bd42bff8c4739e8cdb594d3a777c54219c8adf58f3def18cc036905ee3398d5bec163500cebdc54e5247ad6b40de2f039403a018f08
+B = 25206906ea3af2b5f57257d45fe63e22efd7800d7ef8b59689ff5bc0f6c161d80767220cd610c41976400670283adaaf53189504b6e2b641cfbd02973da9b8dee2f01b19c41ff632ace5254df416d216094cf396737335a4c27d2b22ef9ba82c15272e89f5626fede9c4459b9ed4422e6eaa264df02e0ecf786eeaa0e89b331c3a2a2e551d27bcd67b237fc8a2e0e88
+GCD = 475db32beb7608c2760220455b7095397886cec48c04358eda690743b96624d5f6dcd1090a764e9de83ffed812eef64a197642bab60ccc99dc3f22eb7a26224998cc1a0377f924f8
+
+A = bfa32370445f7222b6afef3d771dbd4d75921b3f45feda0c8088aeec4189b50dbe14246b3ff7df898b11472fab719b65118bb1629803dc5886ff63f7264bdd4033a76c6ccffc7e067185c96ffbf488f3bbf9bc0a8f0400776119f4a995ece92ed63aa18fbe79c8c19b92cbdae8e1c0915291af50795eb405e648599372a6e9ba137e4f3979a53d7b027ac1a8208906a
+B = -4116b938d9ab2312a3dd11cc25eae36114941743f9ef0e60b966f79cfd7447c524d2448f29b78f8653243aa9fbd5f5fe1dac68148d2c83f4b61250d40fb4a2b2566ccd44c3816dd8fe60454a8b1b1f488035daecc7bcbadbe225b6387145cb9b60a6a40b75f08d325f5fab9a0d8ecca578a0cfda41561ef25c1ecbde5b593a45ee6e6a4deb7c77a668493ed467c3166a
+GCD = 6903ade28739da85afcdf76bdb7e02d3cc415f5a8d1c0fac40a21c01f97148a61e23ceefff016dddb1cca68a161124e9a95f3c7adcf2fecbfbfb8bfce0644ced3dfd2fa84e65feaa2
+
+A = -160adbc49f4e15fa9005d726e36a334da8e7904a769be5d80f4997cfddf6c5417b4121de7a9b9e3d228ada2abc7435b39d69cfe6c2bda6d3d90faeafd8e86305885f94cb0533a81ed2ccdac1fcf3f7daeed231a5eac79cb631d75defca88f64f700eccb364241cb232b544ef2173422110d6efc777ac559aad31e1410f23ac7905f6935c7385d1a488260f62652b20424
+B = 47b63fdfeb51b3848c747a75dba319a4c4e93300c53e3d621a08caa20ee37399f9f4a8deab4e718459b2f4474de4f1941953372f13a09ea6e98d1b364e58e4a9eb1c0ddd22a32c91170e068853204858340107058844dceebd4e07e14362eacd71ac44167afdc4af0d5d9b20bf1fbf507cb7c3a9880766b91e75aaa1cba67629e0d8c8519d78d851f9331eb0b480d8d4
+GCD = 16fa1abc9c64ed7e5ef95cd9551c283d1951f1e7422dec2a875b655fd85345b35e648310172d219875d4b4759656e18676a2ce6c6b23b76999b665f2e1cf68718989180583f276714
+
+A = -2a876bb3a1f12cf86fd92902446843eb4245950d16b3a17cfd04213806c6f374ec915e7613b619edfa27da1e9bc9cccaef4f3279295efc31f9405cc8eafaf300e216f026fd4b3cb160226ecc129411f98c04dd5c5d75aaf1c109e1dd9f233765a58bd7bbb47ff98319dfca503edf2768a0e2138117a06f615488f9af12d03a404bf350f32b19f956463341a364ddc7226
+B = 3585f45860e9a23a87053cfe2c5ab15bf579a9cfd6294d2dde1eec8555b708f3c94818f23ef0af3efca2344966828da17e57257ac42ec3cdb3bc305cbf1b8fdae81652abbb91142fb5901ab1c53dffe3cb61f2b65875b9febf98d1e5bbef0d960730c7c8d0ba40e9275260d00e4c58b9058f086ae9296551f462cc1592a10700a6f833868a7a2e5dfdc5fc394e865dc
+GCD = 210331543ac4ff9b3280e87a355ed332c0697cf55948e0e07d88e7895fb16c2f9a9112c4e7380a76e550049fba336fceec74b61f275e31f072df3aa9c671985fff8fcb96df773c42a
+
+A = -eaf58935d789e20af6e90180ad25b0553237c5cafb0b35d1b769bb81639c4092016b6f69aacaaf6e544d8273d4bcd29a1592239242827a886627b911dad4d2b31422747f4941276e2f2ed3d93968ae90eae0f57c036f957e2aeaecb9463518c387d091245edef0b6398d20e296d84c35f170bc3555fde665f055ee22c5df405205ef06a37404b2ac584d63a9d5bc918b2
+B = -c5c974b2ce3c113ba9325265723021a5b263bdf32f6fbe35de43b0a318b266e3b92b7bf0b4065df0f9f4ab2042075ba66208470c654294f53e2253e77580cc5986292d9751dfec0759c96342262ee98f3b9c9655c10e0950e4a126d60a6f907ad7ebecbb8c2c96bb1bac281e1847a678e187542020ca9cd7f6ba819479f7c36edf4e2a56b78a3c182d1b6f020fd4a76a6
+GCD = a748abec8165ac6b084ab18f80332206906307588eae3988575fd63972f0b01d249facce750d9c4085a3f43458466bdb2f80443b4687ccc8aa8ce7d7c3d80945cfd3d5505f4aeae4e
+
+A = -1a2ddba7ca3de7b007d3a611dd6e02f67bd8b9f34facc930215c723926bfbc9adf4f6f034321903fbb378f261f21def2de925d9b5e5e4e257944f9aa1d2ae68f985d1af747ad7dde70d88304c32867fd687ba17b1a779079acbbf96feca068fa57d401731d43933ec17cbf40da0b9010cbf2b593bfcfc15b4e591a3caad2181a8550bd571064b3749141cf9b7373df6ee3
+B = 200f4877f01e8894080741e58e6f8ad6a0f1d3eed613e78bac4e4329081785b721005b8bfc9d6a1e9aaead5d85927dcdf576bfd904bcaf4b5b860b02c2bb1def7da081faf8141dd9bfd5b206e8bcd4e5111bad5a33b11ffb7f913ff61cf579f8cf7f65af8a6eb881508c7a79b549d94f41ddc080d7d8b62edc64da308e341ef621790632f429b4a84ca1ba1f48e4004bcd
+GCD = b0811bd1eb49c9c2cf4f5a58d29f2f9e3291721991e6280b6b84e641a0c3a2518baaa7166e256987bb43e8a6a564872e1213337a62fbb2d01e3bf0d01206801bd76bef10d77665a7b
+
+A = -f8d14349efb35f8c1f91caa7e72144d3da751692a506e1cd7d3309a414f197a87e46aeeab0cc9f17ffc78219facabc3274601e197ea1791b3f0afc05ca0e6a4fdf588c5bb5aec074f3ec2c6fe964a013a7f5f70039bf2ed39325194a6b97c1882750b0f4d39de3b43058a646285f71ceaf3f1f3b6aacf1bc6e443af2706c7b5e851fa713cfb1153c529734083286cd5edc
+B = -a8a0667c624fd770700ab81f486ffcbfbf31c5f5a3b5527e3562c019eefead5caa62d18e4690a5ac0b1f54b45b3bb94198f9214cfa7ec6c913c93c2ec75429ee4d340736dabb028889b9789dc203563c38c0c4d3fa8f0a0b5e5ddf7145fc03b8e847bfb0cf5c03f95b6a11eaf861371d08d410f079432da1938fee4f644a21f29911ae352cbbc78c53cf24e43fe1c452cc
+GCD = 170b537a61b9ca5a169820f72c0fb4ff90b39b74f6b560ceafeb1c7558a005a178ca17b77931543f909559901ee21d38b8642fa79d9b6a788974979fe6b876ebba2d7a8e572d9105cc
+
+A = 41ae9756fa970deab696612859a75d8b64e446820d8b76e81ed081f713a65c7663b31882d1c28a90af05b1d4a171e9cb39b538f15e93f02e8c9b488cf99f9cb5fb551e0ed44dec761f067e87af900df63701f8a1e4867eab59a640ccf9eeda5cecc88f6e4aadb3354d3130e98516472a439d4160056d111ca77bdde0bad1f52f515864668217660bb3988a379bea87d8048
+B = 253b9ab0e304858e5df1e26f5a628a25d0ce8b3bbadd7c451d202d782d80ad2beaddabb0bf0b8e3d575761723d3df42d62c42c16512499e8b4a8b6eda2ae5f919d1bed78ef2274d5a845f709bf8c8ebe896ae8f0508cf0a53e96579357de334ad9d8ea3f8bad168d3d1d93ee1ef2296b578a656ffe1d37eb0824ecfe95da822eb91b49289c2357e04bf9141cc94344583e8
+GCD = d9b78f4a2eb560655a9e06ef684624e0b8703120209778c907abf06ad75b0c923bf93194b7708d36f9eb3a731ac11a7f84ac55a65b84f2e544afafa2d420086ec23a480c129fb4dfe8
+
+A = 1a81ac2de202ded79fc388027b33c256a04d1ba346abf66a47d8b10c60d06410547802f3ebf9082cef504cc1e572fd4f403f84b5c4101f271b784cc92fe443a6b0cfcfafc4af03f8a185e015d80443670e5e52b0c768e70100852fba9fbd173dc158be6ecfbd91b629d58ec5feea6f97e91e516a16c78acf88d01000f696fee4849feafa666545cd4f0b20e0df576dcaff51
+B = -162c7b5fed1ecab532afe3e81200f5d7ed790c39681d7db4e5d5524d359c539a3e5d33d105f0785bf2f9ca963e8721a814bd9b535f0c73942169e80e49de6dc4695d3e5097755c13709541ebe42a2a59a69da7d9e3abb456a9870051dee86fce1cf106a4ea99996532ff602283413127e9ce555891b83574697949df316fae4db30e95a2f8aec9f549f653b679ca12c76352
+GCD = 6f67acdfba992a6a06d55e346e05a5198834bfa3b94ba9af051e6dd777805593dc4b792783c36f171aee92fc04002c744d0cb3dec5ed8d189c2e6fe1b32dd965c51783a1b7a47dc155
+
+A = -62e55f65c5a45433f0eff7d84d4a90684a7adb36af0b05d8e9d4b3c975c8c70e54816a7c455114324e6c08d594656f1641564963e4121f3822a5954fca08c76fea29fca093e556db281bc3ce510246b608becb67a7ae9bf1e5900e6d5d2c860aeffa57c25cd09f8d1290c7c2f71df8eac4ba456f10e66d6a4aa0bbad1c14d0ca7eaf9073379e666dd9ca88026472513491c4
+B = 27dcd52867fe0e75c5b1965271c0220cf022249e1567c2c3b37190cdbcfb05c8c78d0955f36c5a61aefde18259d9dd10223374fe71041d52508be0393f2f026292d187d1c2c04df792cda75e6a5828e4ed353f2ab83c22b661c6ab6d0a242cfb1329cf33060b1356c6f5c8ae323ae5585da70d7770788655f354190e9c29dedb80f45b02d95e785e3190126cbc09e2f209de
+GCD = 5c70ec695161818b41fbf0324cef4a35f6be0f8b537b510e26f07c2a20c7b2c245729b1e1eb3a8ed7999d316c8bb86b3f15002b1c519f61881b984c3f3c5fa5d0043cc8b39d0c2888ce
+
+A = -31b786b561f1f2db190dd971f5f1e2bd87ae388ebe0941595316335e26920145a3e122788ce53b1d42d27dbc8e14517d3199abe0ef5759bc46763ffdd916021585636a00d2b476f6826dfe8412971a74bf4c9b4d6d61b1f16768a4a8aaa4bbbab8a89737da56987c9559a42ba8aef02946932eea76b08be78f8ccc342a90b74a756cbc9ae56f19605d4cf3190433b1e013c
+B = 11ede709c3a2501a61dbfb7b6e841b0fe345b7b3dff540afb724c900f643eb5a30b2e19c2eb1ab76011de1a3b4f6d9c11bbb98dc60f900879e91b80c966cdaf753b64600980506b35d9e6cd38402b545f1a11fdc3805414726820f53feb2b1b5a7a879df56b0b27cd8620f49bb4b334834e272ab58d8917a076f0b4adc99f3542435b0b02928daa323bfffe6b49c7de396ca2
+GCD = 3d50685289251bf777b6c9d61b91e4b645eeaa7a4caa5d7e38fe5eecaf386977750a8d403324e6b6e22e3f7a30b4bf9c48068058a1c5d286d1818480c993ca0be952a061538284ad2ca
+
+A = -1ae5054ca2fb5e9a90cc0e35cbd014ef9c6882c0ff76fb730f3aef494c532a409a018a994d8170a00654a901d76c1db43224d3f12b95d11ee29297bcb7d59a4004d27829353cedc140b08208c89bfc58c9bd9d0e873dc6d8228cd1324c09b0bd91ad908098a823a58e064d65a4d5db384037cb8fd9cd22b5d682c70691bb038065e4454f83166218239ac6ae4a32cef472592
+B = -3a1d124ed840b8bcc770549b78a2904989cb64ecc797a671d9ed2bb1034e5176561574b032ee9ee0915bdb4d68514ee3adc7bfcd1f5b114561cc51fbc485dae29a62562085d6644419c192a6f9f97f4834304582ed5cd545eae322cf07962ac4f12fb53ddd3a6c4c1ff7679310a949f33ffb990da9fb44efd90dd5c26ee04f8e4445354bf6410f0f66c83e5dc00fce811b114
+GCD = 6603bf8fefac8c3d584cc08c9324a891bef616c354b4fbd60d379310e187b7c0bb606194e37bae74dc817037d1a2555a60f5ad3b529cf7b4f2defd82476a2c3e48181ba81976dbec3a2
+
+A = -350e86b67f805ba1c9ee8b5ae4d20dc5bc3d5be3775c37344e324b8cc31410538e43eca744c95e9d24a0cc2716370094e24ea4f1fd8729a59812564b13e37ad1550d07d7deb4fd920d3ebe3c11a392927ef03ef09c141cf828f243a3ac815cbc7c6c50496e19b54614f45e9511b34d571a8150307b5ce9786afb026112ccef51568b04cd4f1d1decdbe44101e172e4eb90148
+B = -fab5cad155fa226f4c3d840c2c4a33a365d9028f48a4faa1397d3289c12d0cce7e1c1d6a0c1b3409dd8bca027c4bda0ae387f8a847176a854d91fc6c82f36112953821816e606be9a06425a91e2ca64781185e11957c1cde65e3aa0a09c5f8d832fffa0440295a6501b3805cc7792b23faa74b8d648d8c733bd4218003f4a1721a3dc088bd7333b46d70e7a8758ec17dbf210
+GCD = 4404c685e043167e72bb9ddb94bac36ce65988cd5efcea67c9f1656ffad2bac3b2d9360156c872a52930a831ea81b4ecaa68c03f30294489fad28bf9fc88f2c52c56e971620f2071558
+
+A = -4626c643aab7cc7c137822fd6afc7eff6c683bcb0cdc66dd8c335cf25a9af0e6e6ea968b458c3c740a4f531d0a14ea16304ed1c60110cb05abb44798da54e436308e84bd124fc987ef0ae756287bdcaf549c9e2f82820996295ca5100e27ca73112c171fe5586eb5c0932c6129514253656a58e37f4ea5fd74269990ca5e2c0be214cc0939107923e540cc657f1b35b305b660
+B = 474abc656d55630f5c355510d4e18f9068d2ccee4fcef73e99597b1fe372c4dfb93d687e63cc8e8277c76df0b130122d9d0e7877be559ad0f25561e2a4860911fdd5412bef2f304a27d383e26fc392e43ee6f2ec0becc9b099a5e60ea49c23670de62a453bfcae9a0f4dde712dab6cde187ac376f0bbdd53fdb35e3aa86e77e362410731aee46e84321610c3ef0c10facc10a8
+GCD = 300dc9d12e176647a62cbffa5ea4369fd5fd3d3aa3aafa1fbe76683dac3e303f15d9cd7b5072ade8760a5f791fa0e2ee22105fade99e0b71807b20c39d03e999190e11a6b72bee481f18
+
+A = 602094e49801835c943e1b40488c873493d58cca6f5765e77a61b6682980b7089dfbfa1371393bd2b199fc5239d97da88207fb384ac533415c2034c6713646b7fe95a397c796c5799609fbd51e024fcadcea6fb24b610596b8acd61eac3ca4643454975375c9fa16de742a98f769ca73ef1e00b2bc457e1c11ad056f80cd02c58bde651d42e1777bc64762459895887e162710
+B = ab39ea7b824bfc261bec70b899656ebf089f12694fa904c5ae9fc38e6331e6ddd39afb19552f491ff25cfe07a86b0f94f06a0d78dd073632aeb0f618beeddb9801d5698c6fd210855e7cd48d54cea02cff8ee58dfdf4822316cb6589df0c5cae76c43b0ad7dd3b8b9c42afc78ba2f95192c14eda3f09b393de6cba225989333890ad59aeaea496818f695a96f7f686fe6175b
+GCD = 165af20abf538bc4abad7d8a38933bb4ddb5bcdda900a829868eb0b6dcf1ca2817a3499fde65ccd7361dd5069ec226a3951dd3c14989e0dc387a2815d08907f2e1d305d1959b446c634d
+
+A = -6dede822eac77dbf0cad2050b60762a3a1fd708470b2b4d681ff942bcefed2b522a23d09ba37bde3aeec22aaa75ba4899cdba3fdef80c6332596163596b5b771125b1245d2e781f4819cf067d27b734f69c5080feda008d27671ab15f2f73723fdb5792bd206b3fb230674cfb736fab0ae2f75f9fc30edae880c5efacf05df7f79a79e2610597fa15994f313401c0d5876b75b
+B = 16f51bb41673fb6c03e78ce6909977a2f9d076eca100f5065a1e090d186ace2cf41f0716a0fe5316df7cc0cd93deef912f8e4ce37da53eac896eaa9bac318f7cce191792525920222050b268585b76ffa93975332a13bde0ba36be5303a4503962ac1f7d3ee174ea088bf3600274321d5acce36cc961d87e03a3cdeabc43eeeaf6673c558da867016e4bc990f99f1ef548f4057
+GCD = 372945b897af6e0590ec74d710280e60391bbc0167b6f4d2b3a7ada91e1dfaf5eff12c41c2fc778e17ca872b6092a1542c7bdfef1f89bf2361f7ecdc807645b607b3751ac96fb16d8c99
+
+A = 1d3b3533c3828ebd09d45343e061999c51d7417af2049320c124fa9911516748eb600936f2f0c28c9c4cebe3181de4d75fd56aec0238d66a050e6a27a3fe9a59da229f20918fd3fb035514281b4909a229b4e077362cf2f841a5e1cf03177cfd22bd2183494cedbadb6113fcb5273e7250c3c5034cf0a97f2d33a2e569eb4498bf573e26efb8e745210358b4dd232d29dd284fb6
+B = 12054d1fed423fa7058f380cc96a754f1107cddb4a5ded5d6e13a3a374ede9b10e36d1e4ca9613a9db02922b3e4654fe126584361615e5ad2cf73239a89211439723e6078f992eb96d2d46464731ef486e0f553a4e5f6be86a0469872cfe430b5f3cc2f354352f7af04a0c58e7e4d8b1911229bdd617eab2dfe02bb18ab9d13f182b527d05a087a01acc0f5f9866c43a34167b84
+GCD = 7dc05ef3638975908fbabcf3ef57505a5f714b20f806cc7305ee9287366caf547a026dbb3ac2744f917fca87b260c8611811cf797cf80f0834b7298eb29242cb6a3b9f7627d2901a0006
+
+A = -47c5112e78a8bb851d1175c9d5b48ed3c37a5b45cb13593f4c0449fd04fccc2a2633c6348e0a7fa9bfc18e6a4935e9db3e315391d1005d92f250abb54cfdb0592645901fcdb4138e80f34d00e37d38ce11b2596a1f7c7937628c41bb28849e0cc25bb5c68f4813efea4ac2b5f386ca9e73966f4effb3d5e3283976edd68d4a281e89dadf275007a7e18b760cbbe6635124721e24
+B = 5cbac0a8858dbd1c95861670920b167c4cec1fb3076eb0020bda54e7851fe57f37ebd488a46afb089fae4c8101dd6367812889f4c02cfb1587439b03b5f123ff425b15a4c9a1e89f67a1b56c010aaf949a8480b62e5a2c87c3182922f97117f478fd6b56aa85cac96dbb79b19288e95a6545176fd14e8ccaf69d8f9c881ef3f0b06742dbc25a0847e4c533e8014a60d667f9dcd6
+GCD = ce7c2709928ebe3d93233ec39c422d4d4bd266156d9651412762627708a40cb6245473e861a24007770fe51114c573b1520bbe62a62a31211520f773e7eb11d4de921a0330fe3ee52502
+
+A = 1422769af71e2d543ec2740d4b9e0dbec99dd7f005a4929ef59a472cd10dfb9698828d17486ce0d759e922e1162c84dadbe1ba21fb1320f8955460f83dd147f7afdda33c98904ad7b7b68dd14fb6536b27b07ab75ee495c816917255408aa736d5bc04f16375a0fc79f40dfb72ee6a52293ec773ac8dae0a2cf95cbbbde9caa9f2fd5143385930e99ae48771837d6bc5cdb9e91e0
+B = -a080e0aa6f4f4559d277f952b2077db758a4140f080207ddb465f978dbfe329fba08ed6d8375a1950092bbabb85eb61060950343a36fe47d17a891986a7c0df2183950a491de337e86084e8da681e4979292b3e59521d5aa4c91acf714da3d5dfb2552c04fab3404222f4b1aae188b797abbbfdc53c7750ec6dd46e2265a837e55cc28e821cba3f9061c4617c3f801defbc57990
+GCD = 2124144025a5c03658bc6a9c3c683c1993dceaa8226e34432f42da465f9ebde8edef30c62e35446e52921f0d2b12adc6d7162748df2aaa2744e75bd3741b4764be48642ca1d04544da45b0
+
+A = -3040e3a6a0a988d404c8d1c390c625a4b4005ea72178af01a348e0e9b39091867d907bd95ed6586a6b796a8e0284da9dd45b88e361ddd101153145a2cf6bd7188cb8b8ab2f9e9be3423983c0d8067686395899927ca4eaa7180b0a94d6b49ab98aedd55af6987ec6f6be2d03506e2ad082f52cf23c7543a7abfe814bb95f6c1d27f9a3e3b2fe82a02b27d9b7a332bb3f0268f1bf7
+B = 727855b3723cf68a0f8b0e56faa914798b23ad3ba1625ebf68498153377f60b7064861cdbf44121ac982e00b7443830b63d78fbbc7fae7c4d38772e128b76c9483eaae6503c338d1922e017dc0862147386a2a9f43f29be4d3854b9715e88be88ea191ecbc427890e07a7bd7c50722b59d0279bbd96cbf54dd6912fcdebfd037673bf6695be2a9635b8a938854cc563a9b93d4c17
+GCD = bd71e442bcb18d2f6ffb6fa3dbe53024c9418481045b8fa7f4b560878ba84bf414e1d3e16c79ab81eb97fe456311d556d83c87f7cc0597cbf62bf2f22af9eb29158e1e4f63bf037149dbb
+
+A = -8584fc510b131c2e91968aba69b8448b0955cad536fecaa1123a4471bd76fb621762be134622a6b73dc1c1b912304955c53e94a0471d3ddd000291798ee53bd1d3ce3aeb6e9e1e7412533771147029cfe5dea66c2a448748abb7839935515de61c89e66ede9a6ff861401d6a49b0f2f38517c43a8c125822f09bc3b1e29d6495cd9e30ae8795b7bf279995f899e191341e76830
+B = 19442bba625c7be7988d554e11035ff7449a9ef5df972fe17f141f7daba01558841af389b22c61ae32b830d8263d2f59c5debef873b9de9e4f151dcce5300fc4efec23203f2513998fe624d17e86810dbbb3d9094ecf176b977400e4a252178be3c054a9cf54fb327ec6d1bbb7785cb19ecbfb0024ac0d755093d60314a92f0941891e62f29468583feb6bda31747177b8d963ab38
+GCD = f1ce3365d8037b9b545293c982035498287716c050db9d93abcad4464e39fb2bb97b922d5471f7c7e68a75a0530aa3c603de525ebbd7c930830d9c75d9ada6bec681b2feea37dfb13e788
+
+A = 69646509f5f87d6ae1736bdb51bee16e9792b0ff7329d254567c3312b70901ad592891515b8221b7a0196037d642056a13d60447469c6e3fee7a3199f4b67feea1eca98655913b8eab2d48684505dc831abb2ab7bc339c8e2845fca854d02fe02aeee5439b653b501220c8b9616a555cd5c9bcf36a8dc0dcabdba21f3b7f8dce69fe14dd099103f15447da2fb0d1ccc51d615844c7
+B = 4c7b5f0dedfa6ab91903884b191987bb00eeca8d6aa2bf12b58f5ee1efe40bfb3bdcd81a55654a9a774856e9f3c81dfb54870ea22647f055799762bb24b90509db14411370fbfc70ec8e0eabb9396c2f4ce4f1e04939c63402ee171ff4fcf5783bab56a989e1192e8bbbaad97d90615d54648485ab493d96225564c6b58f4a31f0776d46df8bbd7cafd46be3cd2ae12cd48d27c835
+GCD = 2e761ee61d22905cfa803106c9f3aa51c8e09c20cfbe026fbb94d5093189aea49538ee7fd8745656c0e93587fd6a0e1ab594b28cd5e0c7637ea8226f58c0c2a63c7a10dcda172d7f9253ad
+
+A = -11ebd1c45f0b69cdda8a9656267e9cd4f7434fd72e0aeb55a7ab0ddbb0d976b21a2c67c6357ff9af57aaa471e76d55567d4eb6c4c687c7e6b98a75a39e5c77204fdde6613d6d2860cd18dffaf62317f7389dd97027b1d1a1dae76bec28522bb94e0cf4d40ecb5b84d93e9398fb87f7aa41b233d3381c550f1d4dd8fba767904dffcf58f9296714b931ab13fccba91841b1c010414a
+B = -48cec63837a1589f4c8800f186f35fa5377667c869dcc2cb1c54ceb02aab1bec0fee256d012eba7d82f63c72bbd648ad292ef6c6a47c3eb67ae848d823d5583fd4f4cb3773aa8d60e11d53a45b792b19aed58bae3544aa8ee708d0f04abc835c07bdbe9612da5aa3af4c08a6557dc1554e751166d8ab426c13753c498a58111f12f8687f80a174157479aab5115039395b669f4eee
+GCD = 2b9fd6762705d9a1d0a22731dce79cf8df7c9bb55ecce498b5ea0a9dda028f34419aa95802bb686ea242fbbf6f1bf518baf618c50c245f2fd1c675da775ac206530e46aade78638785aa4a
+
+A = -2e92acc3745356834ec38e1b3e21f09bbb63350043dd712c12c8880c36296f19949199962d660044d5b188ec31b8982ee8a895929dfb6121b0031d04a3a8645268dd1334039ed6e3d5d6dd3192d6ab6f31ddd23bdcd9b71988a6418f3a97e992c4dca7933693df8c305398ab32a38433cdf287d4f6b2cbe07270d5df5d05de891fb2ba8a82113fb35ed8730283983316a3bf298f08d
+B = -baeaf785f9826ea4a955b15dc7f1513b12cf588974cc86543221029785eed5ad5ff8601f52189def0da883722b7a33f4f9e874b50af7bde2a75fc7688cfd4986d8a672bc50f591f6dcb7ef53f85037e0e6ebb89a6f4ccc0c33a9c3b3e23b4dda431b205d8e481c4b0ebf0a980c0384cf74417b23cb975811cf156982b1f3f3e7a56871c19dd31cdecd58d0e42ca1e957d8e5c02b66
+GCD = 2676645447f9c6673d1d536f0e33c25db66cc20b526cc1572933d9c5cfea00f3aa056b4e49cdf2cbd4fb929d3f2f52f100d977a672814cd389b76d40f558caa61e483fcf21858db49fb3af
+
+A = -6e3de0883dbaae94b7058329fd28fb29c948eb7a3b35bf2650bfe11224a92b2020bf6e33181ee1a288d46fe5db4b9a5ebc8e8d21075d46b9b55585ded50186c51967d3cf59af38927e91aa648afff1b4ae098b16ef583968cd9a9f46aa81e46c224390b1fabc653b3af3fdac53b2efde9d26e88b959e599ba0ca706a176eda4a80ae1cea368e791c6cd51abd76c03ebbb993110521c
+B = f59837df661773a0c4508ad0fed3a6d83bfcffb06eadbca53c99c68c279bb1084d68e367772baafeba2bc79bb7c67fa2fe1329e244b49f92c99e758f3fb14c6c901745ef7baf98055f6090bf4fcdb7df9c909b8c0aeeb2f456447096a39706ff426ab486029ff9d404bd1480f9840ebc1a5ef2454aceea2312b4bb1f07e6df5fbcb4ddbc40cc75d1cd0a849584043acfa1fd8620ae
+GCD = f6d94ab31f68c082524c7de07c66f3efbe8bccc7deca97e331f8d257e0eddd4832c094fef6e024fb6f7b707237cb64059712b91f8c95e9affd13d4b2db075957abb30926bbac9a65ae22a6
+
+A = 1a038147277fd94affbd1b37531a2a442c0a1a7fd8a983c646c29ed71047ec277ad3f41e7c2bcb362cb921cf005d558ded5ab92db67be88861b3987e04bc113b76e7f2ada0aa6d1ebeec15fe78a99021695af9b1e9fab3a3bba690920d1a31421ae876b63233633bbc64b8675c5e40c6436da9d0dbfdd56e1c724d2ede8184632dbdf13a82c3a2c5300734d3bdc6f1a0295246213099
+B = -1425f2a98b63cfcd471a00f21928e48e7b8817daf318b43eeb595b80252ab8531bd354240686eed310a53427cd89b8430779ef8bb610c33dedbcb6a8a800d873335789f76f9265dcff2d059490dbaf84dff06e4a9ffb8e5caa75206edfa448f381179b6bbc8829783cc5563f2ab06d097d25a0d76e7285d163cf0014d2f6ceaf0b58d6794394d42fbbb4cc2d30f0af37d5565c959597
+GCD = b001ebbf5f474aeea9bc7c268e1aa7c7c4d251d1434cee15b7d2de1023bdab467e00f045b4f687da2b05cdf1e0b49d833524ff1fabb5900ec00b56d739a196be3561b7d113e62a5532b911
+
+A = 8abd6652f30d5114f3b08fb47300e9c4f064892dc98e47b03be6122848bd677efa9f0946b9a9e9cfc984cac0be1dbfce2637248cc962578524a647fe9cb8040d09c947510f1b9e83c2a842c65cbf623a957ec99b1dca7df84d01ba617dc51f0f2e814fa0e46d41c917d75475263b89a5460945b30be2506f256a3ed65acce8958c58e3add0cf21d62e8c24e0e1ac87983f465b3aaac5
+B = 71a2ac92dbdfe7b9c394d19099e97d7138a20ac17ad0212d3c6b1acbcd29afe6761c1f752d05c358ef6126647fbeb906e60cd591008f8b6a2e0c6cff637a6eb7baf2ca1582fb5872cfb141ddbbbd15f1d3a76a187df71712ab60ff201c9f044e0741f2015461513555a2a6d91c991272b016acf88a1d165ed7a1ed8fc03069d270a5d5fc83dabfb62c325c3a06f9b3190875aa99b8bf
+GCD = 14aebfa6ef7c22cb429e8f011d2cd5f8d722c8d8f9c603931fd26ad6c02919916136ac7e6c2c9b1a4db9a4ad2ae408909e544eb5251221fade828959ab37d921ceff929aac55ee6c33d7947
+
+A = -121ac8de1eeaa402bebf43a5d63575c2e6d5d49329f9320319182d32e65eadd7bed1dc2913e08c410b01b70e298a709eb09e6246da75947e84860933f4ed07c2f26fb90a702bd9316f77e476df80d1bbf7e8e1f8a43bffd6fa596b8081d16a98ae06dea9203d8f96256a86c3e6528af077acbd337501c3ffbc3bd9e727f22645534e035179be9a62dfb0b451328d7f4535f83de84373e
+B = -3b755b8a63903180eb3a9999aca1d94ade18e021fb56979e20d2a8cfe67edf50119b8a31395c85354a471b2ce19648c0d25b0d09cf8f8de94b94088d69b352ee4425ef78121ce6b02573e4c75f15dbfa540a73e1a8b6bcf1bf378135a891259da0975cd6978ac1292aec14eae596c16099188ca7ddad2940510ae76686a8b6c20b109a227009311dc375d538e754accf0d1ed9e3a583
+GCD = 7d5efa86f82336ff2b554f561670a2b6834678a87fe164baecb402caa76745a4d2a92cd4831eb1c92c01125881880cba737b97be11fa9c78916daa4693a65e2c8e7da0488db3bedab705cd3b
+
+A = 1a2ee9716e653485d99ba938fce257d33b21dc38cd992e97749e44d6d4d8266a94cdd9bb9b2f735d54dd8657b481440094af2c06c9007c9be42ef3e2ec86cbc08664adeffa10f9184ad8d67f152847f7ff3889a789b1fce1b423d772fd4ae9e9526ef2d32e9a84f37b65771fa752710451ad4e8ee257aea2579583538dabbf0d5b53aad6ecd4daeabc5a463deebdd37481041ecbf035af
+B = 18b25bed7f613ff0730f8f59dcbf28e8ef54ed0fa62b1a00baec98d2c2be7e5c5e84674036d8ef334226295492c73ef06cf712366e0561c735d985543cadfb4a377755d63ad0fdbae9d0b22273330d296ac3596c04036d1aaf86e2d657cf6f40dacf60f6921cfec8f1e11858a0293de95271dd02b2a68bd5d05b79060d709f007dfb8137721bbf762c7d3786b1350baff749610dd9de5d
+GCD = 17d64e8dfdaf7a86b15a713888635cb7c5f806d5ca8cefe2fd0b6abfc3ae5fad9888df7abe3bb6d781d9d44041807b34976e64a5209593e48b89c6068c12ecb0cddc3e29ea84b826934a8953
+
+A = 52018eba76e2932a9df722db4e74a980088a7731cf0db7cc135d90051627d6476fc413a718faa56b68397c7c25beaa7480e35dced32788dfac98e2f1899ed442e20f97fb4788c5778a9dd8eca1eec8ad3c573245cb8118868df9aeba962933a683c2a082cf35b1eecd9835c87d9d138a199a4940ef5a8e2529b55a73f5049e48304c589315cb87b40609d14d727ff047ed30ebda9fc969
+B = 2dbfddb374b32e5086e4214b34e65addd6abc54e268868b0e5c752179e4c090b5edcbdbc98bef4cd633d5f031bd0d3e77263e544ac82bc1e15e974a17b6d8a6c80d82cdcafa0286cc1f44067d3e60767c8082409217a44f53c2d4fc638def6b4dbd9831d7905c31644a98e6b8d12d34ce05edc753f545089f21cdecd0d6ccbe8c3c53ffa5914e925e515bb78632b33a365c1e1971fe6c7
+GCD = 4e45533244ce6acabc034e0eef8865a1b15698caa6befa0e29eca392713e432c197b842e1ce868ea635de4583ee55a178bf64bf4a8f6d20e2331881766d89dcf71b6755f05d4464ea08a122b
+
+A = -1378401e3b2fabf055dc0c9cb24e4ca6c553fc1d36b63ee87721f3817422e75ac5eed34f37ef54306e1d215ee72d9e993aa5c507156bb7448528f13fbf34eb3ac279ae628b74818fe658a32c491c6137d4ef23ed75aab40f9253ee1bf393b927194561445509f88500bbbc75a5f75aa7d8a9f9579489e8dbc782f36cc0ca4d1a880eb2c01f4677a48c7c312dae8d9466dadceee4d210b0
+B = -4f77cd1d352d466b4a584175665db1f88c7b6e4750b05a493d0c48a9f977c1cf7a688c4f1831035fd0094d5831405dc1191ce1a2070e0c7d32389c31600b5ab71d78b36bc8329c65e98b629ca5de94980d3b500e0d1e5df9408960c6fe66959401525855af7f5982586aafda276587ae2c989fede042bdf8ad63372ea6ec90997e5f9fd3be21ebd63ed54e75a15dfaeddd16f5503e4ada
+GCD = 182b0d9801f4df448a5d1ee4e21954ebd6efbb7af504a327b416708efa797f22da2e6aee968d8716c1e7b8b4e7b5a937b75067879465d4ada037abca5f4de946a182a9ea57b438283b032466
+
+A = 2a6de8673908af397b7d9ee18d2657b119401df64cf6b20fdec65d6a963b47dabd459704dc1660f62f9f55abff64d9a6866f3ead71f9ade3c6a4109af320c5a3bc3eb67f48594369a598483bcc96d458300f01d5973c90e153c5e66fe372a8ff998084833f30b65b866c459d55343f15c61d1cbb1edd620df04160c37695b863c70d6ce2b2ebb94fa609d0ac43dd8ec2cd02782d43a7000
+B = 27bf09741dc53651b8e5fed688b6c872c976c65bc4b485323261223a7a857f644b355ea1837f3b35cfd10165d33934a0bf73b494db1ced697dd621df4c102fc9251632e586a0984ac3d7f60f9c64885fb400f030ee14bb1d15313f0f07377f65da65d26c63cb30615f761e8582bed3610a7802020ce9006611c7ee9e046aedd047759e308d03bc652c7ae0afba38cca0b3e8fa555b0c000
+GCD = fa9bf4d083cf83140e24ef8923add5e79a1a0deb33cab3120397ae16084f2e037f7e614ba0d966ee7a55b108b56d0f000da4c447999d3832b1484d6b946d7f75f7176405dec9bdfe6a95d000
+
+A = 181f907f9b5c90860b5ca2aca89c3144107b4aeae174e52a7491e4da7be7eb786ce360236d9aab3dbfa1e8fa76719c405b2a0c4686d85639438a5c8e12f61770e99ca065e51f203ba6d640caa7547947d3cc08d98a8d589878e5e52396162c286315e32a7b6be5ca5a86693a9dcf7a2236149651fe30b19b6afa1208f93e2a9a0924c97a2e394d028e6cc94c6b94d83064b2352708787a90
+B = 2d1fd9677f05a05cc8e7ce0bb7a4763c90f00eaaa3a3e34aa9cdc5cb62c8f204b59bc96fd11dfe27736be47dc5dc337554ff8a2d8ac5685f8290c2d3364bf4a4a2c0533a945ed9dc84a656aa24dc984e578104008359d2eb372ce648d35c99aa7059e13251739ce26aee0c01a5852c5efb0d0108e2b31cfd41a80c91a51896cbb3dbf991f6930ace351370f9231733a777eaf2e73cde77c
+GCD = c71b0de446cebc51864abfe48a9383a59705afbbe922ef55b979f80b2744712a70086e61912e603fbc753cdcd8669c7d2ebf0a805a3c39d530afc53f6003a86af968e50869079a0674a59f34
+
+A = 4bddc13f12794628afaa4510c5dddd49370bf3386a087ad82a91d363a6f22979e5f6b56af4d97e3a9c2afac10e40012876d69cebfcb8686832a2df1a21f9b683911ace07dbb66e76ba81341ef1746ab37c2b5a24f4c65df6839f44917baba094bd7772c562506409b71c77476b40f694bcca2e504b1d9ec360f027cc75d1105ef09f06ac3bee1ce963c197cea5e0c2512c76c37d080b7b4
+B = 8a5d482387c2cf7ac99545b29bf69ac65c51b7a41282cad18c4a9267ff3dc2d4cef107e888520e3bc6901c5fa48ed80e21707700cb7680baba8b221b2f786030f7fd33f1951978d73a61f9581656b4e28a02b5ab860310f7c33a9ce349cc5a7fb625b471a650ea2ae41537834f1ac1c2350dcfe428cc116dec090477cf572ca0a0b2aa7646da2abddb81b39e5ea94e6da6a8a834ca90c70
+GCD = 104ee6f1f164d6da363504e3d5d605f810a9b233ed591b3f30e9404cd85438fd3cebb92ee5a7ac97cfbae13acadeff18e8b3f48368717d72ea61cf18c0ae46124de932b3747cc6a32cbb0e434
+
+A = d4ca76de4834f462c57f667bc824ed872cd8a8ddd1959abfa6cd9e6d09bd7f8fc7be2d904698a41966d88ec4af40e61c7bb01ef4b6175140dcfb496070da5dc2c095ff0a9f980a34dbf0bdbf8f715de485e9e113c63e9605d734a065498b0d8c3d11c2f23fa641853047ff70c2be27cec16b67823c96606121b6729262237fdf3acf9e7adb84d1e76956968038f6d618bfd305870aecf928
+B = -5595d52d73e3385840028bdb222b44f30555f659af124179a0066b9e57bcbbdca312378796c32bfd551e44074f5b4b0c36d1205b97141c6353c767d97a0dcfaa5b57c0c11c3a0b21dbe71bd450894723a05310606652ea2d36ada212b2506410cf7c112b8478284b9cf7afd0a23093d7ad05f75ecc0b515b39cae5560d82edbfdab9164c7865bc4554bdf503a7839aba35e59ba1bfd19d8
+GCD = 5c04e7d16f92ac1cb8729bda7f54fb0fae00266958bcdf06ec58b9f4e210880caa8e12dabd3314dbfb3f258aa4c365fb16e12bf1f60a6f05ebb17efa56ba61d7e7d089b290b745a1500aa7d48
+
+A = 2cc15862ae6fd26fd639a7ff6e6f682e1f22524a2073987f5913ffa301b9b6cacc695ca794d946b8279bf3c59bf42e6549b011619e2ee424c477dc2f26b9c59ec822294ee57bce82dbf2cbd696bf297a2f376fdf7aba92beba192a6ce1daf1bb0cb23b656f85273f7bab908eb9f199c1300a21e404fdb69f29bdea40b1d6c64359f30dce71e6cd5435c2da3b8723722a05839e520fdb3d8ac
+B = 270842d84163eb67aaf9eb7ae0b066af3c0660e9e03f9794524900fdd89a336a250a53a7ec83b7d7d2ece779c79febf180e59d744f1b396e7f3657ba7708a1d45a9bc4b21b2d8710a036bb8184a440d4288971f90b631f581c0c90b8739d0bf012642e3b048b9019933fc6c216bb21b8ced9a99ac52bd628f38a0d726fe18516452de6f059582b18365b4ee2ecc5a4bfbe16b8a10213f5810
+GCD = 21f1190be258738083ae42209230e2bd95794317d31990b0825b2c32514a1576abd806b1fe7e5c4690288b7105c6b7f36d192dcd00cc9409822ff8ed6b22b44cd0a1de1fe30de61e4062d0444
+
+A = 5e6f002436329160d3c78ed38b7a1d9dce7cd0bb6550c22ccc3c2ccff68e86b9c2aff78a8fc3ec5c1689afaabbb28321d2c3add4ae5b297bfb42c3b0db18a60526790245983de55781cab420f00bd43d725dd2acfa21f524eda475a8de83e6ce941a1a2242f87887ad7486e72f7f0fcf550dfb9e6776e392de2709712f21ce126486dd123611f0c9d7b6195b7190404c4c0316e5055262f40
+B = 324698b30e6a333ec6e3adb2db883677cc51a593215efc54e98ae142de38572845167c0e4671bf2b397144f2abe6980087bd1c38133157eab312ba9cba7356932fff04f9c4ad05bdc33eec314ca5f502b1234c028a60dad9bfbaa1fc67ca712a1dab8439bfb6203cbcac2e04a3d935d1ce441048d8e927615684261463625078e686aa1bd89dcd1f50810f59ca5e933cd82a4498ff7b250ee
+GCD = 62084be150aa6dcd96fc7f80e8dcd45dcffb9aa2eef16830e4517b36fc98d416e5bd23eae779befd433cabebde0e0d8106387fad9ceb1e7abed5e220de921c62eddb3b5e776f754c31851349a
+
+A = -38d468abc5cb92fabfb0ea82d1885ee1e092cbad90d00a9fe84e8c03430bfeec2722e3a576460419c75169fa47d5ee9ea4d67f8ef3180aa16a8a3eb324f987ea099a9764cfe1d6bb1588e8b58b5e5be3244fe1d5afe2c1f97892c071dff5264cb29938989943f08bc8b9628353db6e41d25cdf04abf63e35f45c116a603ea71e191eba975dd48f69d530e40b91bc48cb3c8221a8ea1b431d14
+B = 101dc13f64746a4895e5d68b8ac38078c2f7fb395a2c46caa7256e610d4c1aba97b2ec2684b0bb0f136baf6da3fe98957c93c8ccbbb27a8a586cf552e895d876b37a5fa8bff7836938b728ba21c60bb24d4787c1a65d4e540ea7f9d1a0a3c87a630fd93c0c44c9dc7aac51c5689eb0462597d09ab341373e8185aeb3ac06e12f998291e7bb0c8278dc3e2f1e91d3e1c0b9ad8ef90bd1aff120
+GCD = 1d4076713ef69e00ba5890ac92add6d5652f3e986e30d2e638b6797b64d66923fbeeaac4a015441f2aa03168528bf42022d09cedf24d7cce88640fcfbc49c19d1d42bd0b195de17d6459be45c4
+
+A = e04abb8fcfe198b85e66eaf1efc0453bb2b4cb594f950a20fe935521f0d423c3b4214c394ce0b1abea152e3c0af0038262fd86b98fde9a4084acffab4f5bd3a5c40d4e8b11b8bda6a427b06cbc8b56122d790247d2da75eb682e3c21dba3dc82344245404866a9017d999290c4abd363474f910021ed61fbe1a650ff219ba6de899394da00d77275216953e59583711526d0a1edc1580ebcd8
+B = 17c48f300e5d74c4b32d5e8abeec6807ab18634ea6524268f653d05a66b9bfc3bae9b2f8a70b778e19cb7bec7304ec357438ead766d6864f89f773cebe9977e42e2ea1ca31124dea5ea9333df48411111714c053c3fc1cc683c51366208df5e7e67e5d917d72dc5b6180a0c2e48f340398ee4091a7612093f8d1e81632e44e1927bc56f823cdca13a22c6f1592038f94c85742b94e22dc2b3f8
+GCD = 7e122720ee9649ca530f8583268e6eb3bb111cddc202a223d552dad06b52a44941bd081f0dd451c840a9ac985fe315f7fbe5f35deae91643f3ae0c27a4e9fd85b0255e13ee1902d6c650981388
+
+A = 42dba7ce0ce53ad8f1eabd7f4b5cecb9a0fb0982326c04143322c19df057eaeb71f4ec7b7fff6e5ab596627e12f6f9fb8da032d12247a928df23b0446b5eda4c89726139c39267b38bae04a56106d0717c5fc43f08676f63aa50e7ca1a84c087c3799a5bf70815b0f04ef2ee038edca689609b78e775bc018ffc090713a2769574b3c5c2dd2b6a52d10d652fdf9f719be0d384d4cc7f4dd54e9
+B = 4bbc94e2a4de9ba761e5dacd1c904d02525934308bbde7bc15745e842b8cf3c008a340a776c407e9143a8e0dce946feed07f0d3fbe91537f1f252d094b1d0071dfa556a5d1fef7fd96d579963eaaada916e30468a2b57069272b6d4ad14000a3fc265362eaa332b28a522200bb99c280329ca0b76fb01f9d34cfa471e7939b1cb534045b7fee18102d0ebc06fb8602c95064f9e76ab3b80f488
+GCD = 2aef8299940daa9285daa3a775b9a11644629d1648fea38e63c939c142d97f04e3c1768cb2d3b9d4efbc7dd3636704bb10395484596d7c5d9f663524581a2bd253d1684d3bbbf6c330419e7d65
+
+A = 4af4fb09cc55aaa8f20b2f80b263a2e41973c360d0e16edd85de66fd33f27c6be21dd6600cc2b9a1a8c32f74b819aeff423b25cf0aca7060a2f7a6018aada7173f78dfd9d908247795c0560e8b4ffba8a309a5b70707bd261a283914264e7daae944f42e4aa733110293fd082a28cae7088ceab7a7a1147dc58602fb6069fbfdf35b9448e86631a94a6d2418e9c016a9082e5a66b9bd2a4d60
+B = 119b492a5e891d4f5bae2e884a69b29eaaceb1d13a4501bf4a1467810027b5903ed34af1b97e8919105cd572ea31b23a63c53b78d2b610cac62b5e9f426e8bcc6c8cb8b9a59e37a0e4b73d7291a73ac1783785496cdbd670c921beff37cc80fbb1a789eab887cf1639a49bce337514f0ae832cdbc143db6141ffc883e6a021f6f8a6303d8deaf3f61a01a9524ee1e55ce595bc5a482f5f56ca20
+GCD = c2210fa02ad93ad54170efccb9fa90b0ede9c1037bc3f15384c1a8f640acefac6b37b17e81f907d4e86cd136fdebc7d2726a5714bf6a9150967e3bcf7ea5f5041b21bb6838a7371d771d715b20
+
+A = 2007a605868586e0628c98583416ee2780b508f472e099fdac69e02fb778726f23dac8bd27afa7327cd503bf0d29dffb9b12582e3b2748fb202f54e25c0f7cf1a1034f4915a6d095c305796ba3e496a9b90054bc6f96def3fb18c87f9b35de12dac3beaa4adab6b4665989e492130f7fd58629cc779eb0b9ce96a776dc2c0aeafd8dfc802b771271d0d0725bb01f6b752f71d81d9a58733127d2
+B = 396bea1845cc6ec5d087bb0e4d9a6068e9066907bd612069edd38818327d34f7a1380d12edcb2a1bd4d58e9c3d010c925ecec2853f2e2525bcca3f107825676079c1628e1ad085e02347d425eb5e986db85d96eef0d5d643e11c41cf6d8c98935d79d6e335806c72b71bbe4a8c2caaaabbf99234e99e565c457e187a6dde3ad4530b0ba53c289add844e343fb682c3c620ede6daeb43afc76eba
+GCD = 908e2b8bfd1de4b4e26c71d46a59a07023e5b971145f09f8d7b522015613198e79e266b72b66889f205b69306ef0845c0f907f1faaf65fc5a2c942fbe1eaa6a95dbd2f95efccd272716311b99a
+
+A = adbf3586aeead2fca9371978c02969645e316f7e337b34a6a3ffbe50ddeb4ef62b2ad59e5a49451783c4b20d7d6d60372064b161b20afa3ab5b5d7bf074636379a2895455b8c80153be5c4856bdd1b99dc1462e93e447524b55d561219219410a00ebcbbaba8ea0dde9e480ceacfa09495bbbaa5207e9155313e7467eea3b5279dea6b91a53a78e87f18d5a59c054dc5f254c9d113842eebf85a
+B = -14d5d48264f1c8f2c5856dc4e597235009c15342522107995b618075861beb4fff65487ab60062d920bff8e678863d94e2755b652032868ca7e49ce95877099743c6bb27cd58b45d6f7098b54dc6a6d7bd1e390eb70d175072ed26858159a2cdcd0de1f62385c6673f53373a17641b975972bb4bbabf559f9a01e167c8f59a0b0d30ba7f2db8e577d05a5a5bbd34d0d84d647aeb78b9148e62d8d
+GCD = 1bc4aec0fe4a6625537015b56df9600b4aedb8e1151099af509dbc567a9bb0e77e202ce85792d5ac7e842110db298836b29552f0e978bfc945b985b72e9361b84de56eef4df5268922af94b95c5
+
+A = 58646c8fe8870c50c2916071259f12d455b9ac5cdaf218aa6c527180531f42556bd2278bbb8c420e064adabab1544485fd4d385beffcb4d66eea27117747716cb8a21ca1a71b6e3ad8d3440549321e65d636ee896e16f26bf352de3af92709c8265b5ad791bf04c23d50ea253be6c586b7ac4583513945b33dfec760257aad9bc6a9293ccd03f7ca4d0857938eab506870feba7c41afa50a30a10
+B = -139e1b1a7f920d6a162865f09f8769a129bed9a60a042f0d3fa2423d4761be65c7556ebe9ee844a04917b80fe8af71b92e0e2956bd9241aea2c71c55b6c6c65439577a66040b3137d62477fe360b93f5ac4bf7495030ab05319a452922fe86a661cab36c96e4867b81430fed04dd3cebaa735280b305726a98e631e780571cb3d61ebb243981b9e21b22d6315b1db30a97e66336670eee2c03d40
+GCD = 175942db2db2901f6d6a3f25e461098563b4366815e469ff6bff97ee511d08565eecd5c411044e26f9850be65aedba6419a4578925c674cc80cf7f6b5520569af364b82106cc2c0e42c9fe4ef4b0
+
+A = -32870601aa13a49fe9e6d91f69a3060795c3380aa892d2457241a4a09a4d6355bfa177ac9a32a4a03526f6fc1c1ae3227c5d8829e7b2e651d50c6b59bb30641a24bd7c25d84e51b4ed3ea4582807cb18dc8dc6a16f24aa990f0997192a367bedc3f404b2713ec5909fb4a7130d1684009130dc2c55b5086c268eae279fef7f72b0ade8755fa937a03771ea2c86b5802d848c1c4749d5c71b9b124
+B = -b9c5a1ef1409f8e9fe224346a6e249b905464b9a00c4870640992a6752a73169a9aa04b356084a7ff086c7352d441b08c9cbf07091913049f65011d1570915e8b9d18db204512a81a6b8f831864e928ded462c12bfb24f1ae482fec0286f4b0a292b62c9888110d82bab37bd405024d25db4fdb80ef02927fc7b6e8653a7af7f081e1a52d4a5843215faa62011db167e5e4463fc74569791a7b60
+GCD = 76d6d56e7f6da82573a9a269e01bb82ec405ad92da07c108de24e9aed8d476dc1be3d612c4a5acdd8b2e9f757b1403c3add69804b482bf7003e5d5bb7948478d8fc2ea97bfdbf4b99dff4242b6c
+
+A = 31c888e7a03340107798150093cda9d0699fcf04a28fecbde5ed2aff96b6777fdabc6124bd61d508098fabd814884e4202ee432296fbeeaffc84025d2147340ae57bad12e5daaa80f7c003806c0bdad595716d9c97fb177400e9ff9e12d66f1853db836b400612f713da67b69ec1ec0329afaddd67b8843addb9840b2bc4e6bc033d76d5ed80000cd7d14f2863d46cd722c2534b656ea8f9c964ee
+B = -3ed3dfdf2c2c4c9e02149655361c99927b53f33a3fe57f7269252d7b0a593c70c3a49abd7936b07234d281986ada0e92c9a988acb784c178dbb1f991cf24df4336cb16b17e3c8bfe5602d343875d0abe880e09b41292e9c447694dc4f31cccdf337145b05ad79ec7803ad372170e8de8ded9119270fa821129bd39b81bb498ea97cc292748b41d0433693b67349eb9ff1e961ab6fda548365624e6
+GCD = a3472a57ac5873609dd19d90be1918fea56ca9bac89b4a877e27a638eac6d5374b1d4dfab9f6a7af2a6edf3df57d16d019ffb145a55e0d93072ebcf3c3a6eefacf1f99a80868c06057b88119d66
+
+A = f5f7be2dbf17f5c1899f5e71f8c99882d3a743915b0929bc2ceeadfe9584eab5a3e5daeaf743fbfb01d412807cf88d3d664da81fbf2b39dd7b94e3d2bd3ab7b5afcc84221c10f9c4145835dd97099bcbff1d750acab9fd55bbdcb6643458af5132a3ba2ecb24b795b18735eab9ec6295c9a50d466aa7be0b09e2033f9ebd852571c1a7133bc48f79e4254f7f0b3b5e6cc14ad05f0805f74ce75696
+B = -5c70585ccb8d7e52a49befe55db178b302bb3ed1192d5a5ba564fabbf314f146ba99eb57878e249647f6ee0a1651867f5eb550be61acd7f20d0a4132871096ad3f4aaea827e4c253ab7d1bb4f3628d573b0b88e7fc34c1f55dca88df7142d3e740411b9fc94d9265b443d04b61c5d6664fd2facc9abf7fa59bc5c81576596f650ab621236bf421b29d2c330392f76f480929163f52f3a81437e3ec
+GCD = 1ff3367d3611b5b629da7c151340a062e89bc289cdb062dec002c43ee413dbd313e6344611c9bb5f1294b08ea985f146c501ac654f08766b1661721df38f63ebce1b66415a3a4ee2c32b703b5862
+
+A = -564ef0b63ce0f4b0a0d8169f64f6662fa8593f698f074ee53f11970ba767f82edf7dabde47c59d48c1e44ab44fbd8f22cc0f6c17f8362bc7beb7990cdb65cd5532389f2a337abab0fe16cc9cf38a4c963ea4d7c2f8e3c40d77b1857c7200fdc08fc6cd415cf6a9fead16ee58ab796f600c3367cfa4e7141b8c9d5c1268cf843a8e96d12641c539ab6c8a7060328dc55090cf7c1bfa73c315143513c
+B = -1b870ea98e7355f81a39d3da1bc5b15fd2ea73e51c94e36a2e457950d229d08b7ca380932e994122625274cb55e992adbf3dba66ff92818eff0b200386d64f2fa27f1e479a9660f8fdeee93d03c43c01f8e7c4d6c343226804d9d36052514cb501960470d98da10569b9221bd8aeb288a8b8fbc27d924da1c20d93ed8049b0e8b01e8d6576bb27d27c81b0fa512a6a2f68b2d96ba7b0e2de6738600
+GCD = 117d942ae2eba96555d67c185a5b9b174085634e8e21684100d096d4a3c8055c3cb717af8071aa072e578ebacf01e9485a94e9ae238e99add64af951635c3d4f70e477a9f16959b21d85cd87e071c
+
+A = 15226b1e2ce794a66ee5a6ead3624fadb25798d01bc5eb02154384ca9f6f94ab6a8826d130ac59e900c9667d538881e0af6fe4ec75ad786c95938bd90677bde58fb9e2387fe80119f179d439c4890ac2b979c19a8bde2adeb3c752055153dd6ebc6e35258376999897b602bba79eca73de68df9707cddc476852bc114fcfbe25da67af1ba285dc0868bd8377348804b094efa627902425af91550f84
+B = -12fa7c984c929aafd893b6006847469e7dcd4cd53e63afad236bbbee60e2910a20ebdba5f139402b7b943aa8945a09d1bd7b8671e327ba5f4afa51c7b77e2132ea71f99cf65856ba72bafe2c0336c0268010e403d3ba36812806fddacd8929fd384b0baa2ee54127eee864b9021f871d5f4f69ac64b6050f376a6bbd54f35bf60a0215530b929848226c25a05d771eb7bcea33adaffb9dee157be24c
+GCD = 552bbbd7c9a970bbb60714f3d89e3153a5544b549d3a3998c17ea7ed4bd8c30eaf2cb58e3d7001cab3e2b4d64b2e3172288a41ba2b0f5e29592b150847f30b50e2eed111c8ddee2a3e1a5511aca4
+
+A = 6533b1d8348bbc3a9890000d368a0291d4e5863837f3485e789b6a6eaaf3cfcb9695ebcaec55553ba472fcc971113632995b77f854cdd188d8eb2af4681a6d4b71ce35b6cafa3ed2170a7cd9a7dd1c5d4d8f67bd2a046cae65788c43e88f966fda91456e21bf71cc316f7ed795dff82c2d4cf389ba2aa0a1370b2401aa607bfa3d0bc77faa2cb45d127fa0c383d6a128166fc344133403b2c7f8059
+B = 496047bd81c7b12f0f86d6266e5eede5f83220fecd13a29ee806cfd1fbfa29a52cb11d60cb388702ab553926945804480e328113d26760b0482e270900a60211a30d226cdabdd318f9ee55bb4fb453e1327ae0eda6299a9928283d3b81da7c05009eb505c46db402e26ada63b087f5d67adf3242c35a2732e65442ad9211d951fc20cd52fab744592cdadce6faf2f28a52a0e236c2eb29980535eef
+GCD = 814b1ee9ca215e0b7679f0fa034ed7444ffff2237ed4da9c119fa76d80671321d569dcca9d45016d6e1c2bc9e11891a31302dfa7d1636273a5a430d7b1b5e2afae809e748d21cfb5ddb6ddfd987b
+
+A = -f78f107e9004947af3904589e7eccda7fdc1e3824307f8c5caf18d729f53fd932db5c380cdf955eb862f9c03124f28851dfdcef4ee2b0a3b6e7357f2ae526a8c78d8de6e8a32adbfb1667dd8bbeeb6084518bc84549c2e2829f3ebb8e097735f4819781bf734b6808ca21c301212d234f2aa250300be247488bb78af837ab64336252178c7183fc4cb14a3bbb65b48bb50d93f4a4ea96d572e891e5e
+B = -b8e6fb094656fdfa338806359a89cb8db9dcaf7ea61cfc9291c1e80171e0df00a1c4948950dcf38d15dfc3e4a5603ec3f47d4a2769f00ae5a290cc98bd73a4099eedee6966690825ba4527a283fa064f4a25d5e13c837e9938c059aaa7af4aea800706e02d43d80dbced7e96a223380c8fe72a5c96b7dc481b5b5c5e01746cc95b18826cc2bcdadcc6035a81413d27276e4f165cf1ed8a87004654e4
+GCD = 106190d22407519b89825cce5030c302a685aac4c03c6ce7a1039b9c5f3efd6d69e69539c1f5adbba35686aed52c3e46669949329bc048f0b732d6d70897b1a2b5b3db9e289610479d2e4ffabf456
+
+A = -18a84b2b1123be65b079aed11e50ccfbdc591224f585bee3f78943bd69c2a807bda189c1dced3cda5425a747e682811c5953eeda5633cba1dccc4f98884d3632ede89df1a3fcfccd13af3b9753d5f742ea3986ce7832906954a19af13e3014909a5f7e4baa9793c51775527c0505c31fb62eef5c118bd17f3736c16142bf25356639399a66a5cbdfe7998c53892f10b6480bc5586bce2982d408f5be2
+B = -2d00c4756a7f3c8f5226f157c5815ffa979924612cb789af5cd3afb0a84ad25ddc9ce6026e23e45d9f78bdd0420d0a5c7028088158d0d786a15e8e1c4ed5d27b527703670a5b2bb36f2b5d160295e9d52dfecc263c8a05cd66760b5fcd11681d64f7851d4883d8356c109dd271a86a91682033ecc2311495278dbea9380f14b1f7436ceb594c563445fb2e9a69bd79b37f932cc7b9d6ba388c9a0269a
+GCD = 6830ca16f9c00ab398116345f665fecd3aeaeac6cc773905518928be45dc98054a04e081cf03eea002113a872922048f0b27907949f7e14da3c59c22d9794b1a993456bc8d2c9c74a0392a0cbe012
+
+A = -1a385c9a54caa898b408d8c8762e43ca11681a52f73d90ad59e81c8f99e2335452a92c153a9cd7c1b48f139b16a728df3c4f51c0d2217613eb235944b08b421880d042f5ff916189e5e308a7c3566d6ea4cc1662fd2d7251afc9427b44e51c3969f4eb5b57cb770d13bffa7bb6f44b5c57e39be1a79873536035b7fe6e9e14602044df959f349c75e7cc1f24225c7bfc6b6a42dbaca0ffc0899190410c
+B = e0687e1255a3d28491a7a5c39f8fd74e04f0c183d43c5daae60ac6d8d6616a30c8ec984fbcdfdd5a3b7edae6ac0ae61a08d14992f11a5755ff69e6ef529531fd5148a6bfd696bd18e8b03b86a412af3596c87987b1f7c6e0c0a3373817a788f2676b6f14cdcd1cd9bd13eac049de3e4ebc512cd94a2f4fde208dc3ec099b819ce2835903c22ff20338fa702a162f6fa3c5ea92d472ae91cd411f90500
+GCD = fc31b2635d9377d8d8e68ca2800298eb84cf66ddf1eba1b402b31f98174b83fbfb62753954d065dfb73b5fec077366fe64e54eec9bb0592eb090da222f8ffbeb8aba20cbd7247ec4ac4ead112166c
+
+A = 2ba6e23083f93313fa20fb17931bcc471817493df912d1cb196c2ea6773130043aa3183884d77e2c68b8f2b49bc895664c1fe8bda5fd3255488c5d4d06cb93f77661abf7e38ba4463b5d1936ac9e814ccde6a6ecca1b96c701aa1fe968f1b34b03841e68df3914397618f4af3b847fd10e974da477e3c541530310f70aac0bc484fc7d344ba7a3db729554908c1af61f2e6b0f3c1d73f3469a135e3376
+B = -1ffcde75881f30657031b1b19e72c3b5c167613547bf4ce805642dccd484f9bbde59469089a02f30eb3f705d3672751bbc3ae5cd1bcc604a142702db8bd5021074add58895ce9fa175db991b6080a98706c2e14ea6d8ae686a92d499255074e0f7b6ac1a35842fd01bf5b070c952b0eb2814adb34db1a7ef325a55f578f4a6967ebcc5dcc384e3125fd4c88fd8ef6bcdc0a12550b622a04de1adbda405
+GCD = 9ac73b7e17d78a0b0c749c96889c366e785b706e42f5a5c62cf26cdd1ef210c35dc80b93e786b81af1db0b3e1e804faf3db469d01f833c1ddfed0c30b67cd70a9a5ce3ad37d4c6f0e1e4fa21a8f5b
+
+A = -119a611a08e0b1d47b8e271865e3c517ff3b15243a76095cf4ecdf906f439e31e5f00657e4b397eef894f29794bdfe099dbc3fe99d9382d75da63334e0090968aede9422af5dcab38ce8054307549cb6fac65ece319c98e0b432159b0229ba7bce8881e91c00724f19dda2d445501c61b07a6f1096582ca017a4473407ded4700b3e09b5e9c5da72de0b19722feb9e2acaed8d8e209918c5d4f591d4ac
+B = 10172318b15c5d9b2e316bf59b23e3c05ef61d2e1c7e94fbec025cc980f6b079c7e54957e58cc498308fd0fcae482e160f319e7420e6a61500ac17919090ca9c86c83068e2fae9cef4a75fcba65db41b69d09b4c7e35c289e9e66a437473f8594553e7e30cb8e9954e26b9dddfc825383e25af0828596d6271632ccae0527b6f743622855c1927fd586b3f295277a88d2d9c5a7db79f5fd916d759cee0
+GCD = a5b0279f6fb918a460636931ea895d469d343de2be28bf387cd6049ef18db62326ee08c629bcb4b5becab054bb77468443720068c6205ca74ad7dbc75596f4c7e0cf0e13592ae50af0ce70640306e4
+
+A = -1c229c1841b818383929a227d4a46aa7f0e8d384000edd9549f7d5bf9a4b768f26d7a60c84caaa4576dbe70592fa48bb6ca265b4a96f2642faf0a74df18886098eacbd1729a34398321141f1576a779b8cb4917ac827ac924d1792c6db76d2950706e2adab452daf232dcf399007a3ee82c86ea8d3a25a9bb32acb0d869f7a68769de0682b971d60b3d3f97980d4632c88a1df25603802f275f0301f38
+B = -2d0daf7ffed556790fa62b984ffe0403732044a172d8ab866211d58d45fd8f358bf5882bf7efccf4b255678d6daeb4538c7953a52045ff2c4050648d4e4d31100124520d04b848af1569b7589ebfdf24a4a9a07011e70f5c804bfea1a01dcfcfb48e73842e9a5d71ad2f30f3a618206eaf3e73a53c311dcf39216621c2b3b2a0ec0a53218431f668459022ff0219c0a25429d38e954f9053120450e2e68
+GCD = 2ae2053b6d15976d4415c92c71a407d0a4568527bdc1eee72e047436c9ec1831c2a32aa73727f8542287b37096ee87b9e20e3a489fc6a02f07ca812e1ae291349fcded3864bf76f82d767833ffab78
+
+A = -11512883cfada5054c4c3c9ff16c6e9f31dc7368f291910fa71117e65d890f8b5531380f5ce7a68d45cc7cda4e73406197cba44c22af3cc01fbec474d4077ac123e9337ca996488e101eba0cf2e5d7cc22be36f7f34029db1482ec63e2276d8bea80c071621481321dddd118c90b98710877000e77b42597e56cd8a13e4bac9a00a396490333d2394c4cf4f779fe08e33645b4b5b9774741048ab4ba9343
+B = cf4728f3249bbefc7ca89614b0ed2b4f699973ff6384190e51866f68aa28ce89bdef7e5514bbcefab17cb3afafdcfbd666479fad44dbce428810f276c96ff741bbdcfec285dc9a1b40e0573d7cf0c04918c1e1760b0703e67c96bdfb23b94cf39dea1a707d9246602df75fc3db49eca0cabaf2a7016dcfda4f940ebf55bd1009c56fe6b49f73797165080eb859f962df9598ddcac381d99afd7919f5180
+GCD = 6b98e6b66b8948d5547aa8a5d7eb202011f17693339beb17154e7afa2be42034d450000a128401a061cedec95484bfa5eb27a1c1c018294808c54662a1c7e45e4ddf8b173b5a2f76ca371891b55de1
+
+A = -39658d70403668d8996b0cb6aaea6289c5a546076c550c306fa0c9e413b26c4c0c54669d4a189141844991a5ddb1786735ce08c56ce5da2bfe295a7e4a96fa0a5042e873a26f19c7c3c4aa3c1226d6da64e2d479ef62eedead5468337bc62df3b55dee45050f16517473494ff20d3aff1bcc73a04372e65d12a5e4f93b5c0810cd19bd717643e5f575300db41070faa92b3492cd72d8d2adfcce5fd99800
+B = 37e41a141858200a5e2e23a8867a74255f259970fc4dc07b95489e98a2834de461852949856a26157911210ab1c6fceda182b94f748db3fad17d4a3c6db79f18ae0bc2709d295fe5d6c5164a7df4556fc6c6e96aaedf497fb157b1824f684901dbcf756f954ebb8e9eafb054e3c0ffa098b050c64548e848e491140bd0af9c600cdd3c4a8587a47c64d520a5ada6da8d56735539038cecb116f40c53d520
+GCD = 8f47724f680f3546964521df9da187ab638caeafa53e676b0d36927ae202c1cd021565900484661d55e7efc93cdb6c966b8e42b32f98cec9d019c6f98cdc7e0aaf7bfdb6f7af53a924a5865026e75e0
+
+A = 12af2dabd799d5f77a8c1af5a61796f19b721485c460a9411d91c03a2b41a64a181ec8a192258e808979f2101f214979c04c3dd2c32185fad5fe7503e50216bbd38c22a7252bed4fce99f264a3ab15f156d4718d26f1df3c2f799f091b911b3baa1941b5453ebd247f4a978235371e5c4782468e845279766d4790b08f3cfb0e04ac7fa9e99028adaea86d2aa4fed8d46f9f004be58b74b181bb9b781e3e0
+B = -21c68056fce2b70a4915e4d52145448cba5ee900646847568024eb0777c83c26b868ce6005a4f1b04889d45ce4694269d13ee36d6d7195807f4a3edc6101b6ceeff71f632d1381ef3ecfb9ea76392439ec45939ed95ea9a66a2d03540b02766a3ffd0312477736e058dc9338c57416eb1cdd44cafe9a4db9a51143690f1bb7b04da5bee0f6e778c15679988c73ffba077c7d0de0257e2b651a5670fcac79
+GCD = 1c3f412419d522ddec1a02b4e659e31f81c83e366bf18cd7915636d2058e5fcef96a9df015981da7e9dc0d00c3ad20ee8a0ab0eccd4e7bab5b49c3b09ebce921c186aa10a69100722cf794b56963431
+
+A = -3fc5a116192dfb88d643f29414952b6d9da348b052154293f831a6c315183327cb8b501d91a021c339a9f6f888682b371db3d787c07e7c101262865827cd26634c2f4ac503aa590c7cf3123a075cfa123eaf57b359cf5006b3b962b3722bcdd323f82276f40baf9f16bb437ba14c424c7f7c940e6df6c245d790cbdacdc37406e2403bc7d4a39adaa46ec0d543c39b0963d2686d2b6ac4104068b8a8a3a58
+B = -a977335dd8ab37fddb331d34db09a447172cc52a5b91aa7b3393c1ff6c7b3f7e3fffb87fec7b8af6928c30b40e477f499bd199da2662176b8e7fc98317d7c7a7324e6032cf95f93b6fb2faccf2f36a4cf417b1e4f31ec2f6c9a1bf4d88fb24713113c854c5886d6c9b296fe8553b1791f9185be29a3ee834d3f0709fcfcd3f25496371d8723935528888e9f3a3d993d1def5b659efb77bac94b1c8a1af38
+GCD = 5c1b73d28eefa4966fb89291f85c257acc33b1d618ee8173df5027817f27f67b792d1de371f635060e1c66a4b12298bc32b27dac176054790a57920510195d75eeca905d7b630b8d4656a20c22c4158
+
+A = -78e763d5a089a7d6568b2efaa0d76bfd03fa98f910a5f870c0f9211cf1d97118cc2cb414a1a75b7eaded20b90776c2240e633938e349976f6ef5bb101d3b88d6f890de73fcd9a145efe3dc778446715f6a66f13d52b61f1259fc1bf8f73d6116d6f92fc91df5fc4ded5102e527d8fa4a7e926de954385084d46a5e94c81620e0ed65e47877595072e11ce2fa737abaafc63aaaa2a639dd08c450a4eb2610a
+B = -18f77f869661a2beb37d54bd8cef3a2493bbc89891dac3f6ccf269e1b54a5c23f20a45ff51b1b3b9cbe77027c22c46e715ea42901b8ba7b118c4ac3291691c95ab2c65b1f052e69df83003908da3b152732baef38ec50037b37a4f9d9a185e30712b1a4d81e0212f8157c725db0a2e08cba76cde3a4d398899a42fe68344ccfee919a767e9540d390636059f82f31e35c7db1248e358db1a4a4bb5bb6cee03
+GCD = 7e6c34362c5d3af1364d6e295de00b12a97a4a47f8da97f7e2b15ae651a6a0e1044f5c59bde90972ed6b1c2814f2ac6ab5e235c76ebfea52cbe46f700533f9fc59370bdd6ea708ef335d5253b71dc6f
+
+A = -4042cb1f17097d6dad28ca72ffc6438496f96f904b59c61360a21b1953e88dc8c54070ca2d00447974275bc00cb5c4d2d8f97648038e17652faf48058f46ac857ab751af432a75cdd097b1b280e41ddd5dcf09d885aa3b6cee9aaf044384020232a86dcdc87f3a41302eebc1298b6c9fca49b3a84347f6f31895d128eada4e4fbb5db5d744a22716fea3486519bd3504852851d05e1894d7033a85dcab7d80
+B = -d8bbaafb35257ecc29ba4bed2dd5891fa95752c37b1313dfcc24b3935c89b4de7d655fcce01abc26057833bcc5c43b85590add8bef2e4e7b71ab8eee48c6f15b526cf58deb32d25aaa473622c9649602d9311c8ff99ef401f624a9571a29aceeae76dfbfb83567277e75e7faf83916ce7b31e1b60436c17af34829778b5e0ca416190714511d3edbf56ad49ab2cd63629121ddb5a9a0a5b147c9dcc33d62c
+GCD = 5170357aa0defc4b91f507e720d5f2f3e5896da5253fce4ae12a5438e46944153f94978c16a7a0187d09af17cbed1e9c5168bb0ff1cf84f3496c7ca7076a58769e895f23f06b023a6cdb1b56b866269c
+
+A = -d5646f9800faf03bfa0b1f54757523bb30589df5bb062b0deef17d27dcb01c50115ce768b71e8294323c9bcb37c7dd880432fb8e6726178fd2244ca2e9318c16caf087fcc5beb4db6b284d3f3cc956142d235c82a96443e6d443b6c07923d9d7c87d6f08826e5139b4f863f027b35522df3f33491171a8423311e6d034ad90bd5315f20b16d21e360dc3ec1fcc87bff901bc057cad089d7c05dd49e6ec4000
+B = c35abacc3da62b0cc14b539344861bf9c42b4ded0728bce10651e8e4eaad999cd1faa9a7ad9cd34ed8829705279512e959b38fc3acebbdaa5b9b53d3421d092a80f1867d3985b6f98f9ba8efc3224022fb434c0e991aaaed449a3324710dcbaba0e6011dbf5564acb73db323f214e3e8fbe9b3afbb7a9b4f33affc828bdee61398c12ed474f32a8db1eaae025fb3809666f961ad38b8e4a2d3f2fdbf86b980
+GCD = f74651c283e71afba05d1d8457a4cbac720a2fafa7e1a75beefe28b56eeb97776185467c151d241ea4365e364e42faaf73f1c357b13dbb969059888260f2aa925f1c71303bd43d1fae045d69d99dbd80
+
+A = -a71a0de3a7c1e449dffebbb2745ac544ac0c210719fdafbf1ffd7c1aa1dc7ba178f59fc08a7be23fe5c35df07c7acaff53aa6230c76ab5906d3753ce7b670b11e1372b3a4e8b281a56a7566ecd9c53931f9bb09914464d8e5d4a441b9c7d03e1b2c5add77f95a5f9b556aa7f0a5eaa03cb421556f5bd6ab7f7badfe4a16196396456eb75ea9052c6a29af000608911268bdad9640b0aa32ad0df3abaafd894
+B = -ebf7bc338388124422f4cec02b8794e53ed7fa6f959ac0671a65baeacdc56fe41b655123bbc9608482c1a766f21c640d137cc08832e600c5bbca1782336adc95507e3a1cf267de7c2a755acf7e2d094a4f738358a9fe2a9ef7dfe0cd43f89d590fc2e6014dc7b17c742f805c0cfc66b13aa575322fff798723996096334e85fd8919c1d623119f33fc006c2ae57e895a7000509d06e36b823f89dd412f1176
+GCD = 20d8b4168129981402cef4af98101235ad8f71f5faf8dee805b75fcbae17169e22f5def4adc598cdda3c79c560b63e31db627e5cc7e4cf263a51d01bac985bd4deb0633649ddb2775e8d3b0d19084ffe
+
+A = e9f6a346b458499060a642ba815dd6a08864b85b141fea0a3cfc0fbe23a878b361283f0d8cd6306294b77340aee04e84c73fa171e39eb560689146e9080a65f7bb14eaa050c1312ce3bf68948a73e9631ced01ca400e04d75d959b13d794c344c90b265e0858efe3393c600a3183c7164873e585938caa800d96e6383618f4f5808364f190bd1fb33aef0250ece196c0e15ad62f3c20b60162c13d15f98bd0
+B = -1f138f9cc0500601990eed3fccbebb6cc63d4380fd15aef2ea70d42a979d891594ae9223192c90ea23bfeab1e9f4fa04244fa17b0cbfc440947106322c65721760f7af35a47df0fc6687c84a298afea438402b0041bc73f5f5e623ffb7c59bf1a939b64a4753caa8e34d12ad3488a237c271ac6d820df136955d778dedee03855aa751d8f102d8bdd15e78ec482b10c08d14bb7e877952b64ee4c40d150615d
+GCD = 5178e11bc6a653b7471521fba22ae4bc5ba84670e6ba6481a4fdd54e513c4f10ac0fd3086ff5c46da631fc9727e2c3d5a9d7e1c34308aaacaa262b789b57a9e7ee5a5786f02868492a1896538ab0423d
+
+A = -9e1e0d0d509927d91abf4c5b2dc4761ade78e7e04de5a72a8788b205ed23d695e7d3ba64fa99f62311154ccf2132edd680c0781c546c4104aed21d6906f1b9b9a3c6796b4ef777d7e8bd1498934d15445c487c8305cfb879aec7aa028b653a22e09fc6fbde1cccad60af8e1776b495c6cd5decc963d1c9a0735b7e0302627b9b352c772c16138db8bad1fd922fe915c5d3487112e77908acefa5f489cb9188c
+B = 38de5ff6da902f592f03fae32ad918856f07124a3e33200ff78b09b9518a0b304e0c22726d2704126560c8ed40d256d067969efd8926220cee18bb4a33c0893925adc188fc32e6165c2de6acc6c73e5e7944fa375c2b5103e55b5739d5569a2da4702f921852481d21fb2234150e14978f290e44b3fba545d3ed0f60743fed951947acbfc89ec52ab0b66ac316b5ecd88d67df06e8f36cdfb8a47ff712b10a24
+GCD = dc73f24667696c99391c4a9defe9c5ca45732f6233cc53ca859cd3e2c4aa90df24bcb0f8a36c354fcb0d79f3bc078b1a0d3730e536d29200afb2cbe7890ececd551725fa0a89f149d08cd7f79aa96c24
+
+A = 424d0764481a415fda9964655ae08861dba717b72a009db2246782275c5ac9c503e204db16cebe9b10ff459e9d60840fcc945d3ef6c6db813a936cd36ec6db1bd112de5c5771e96934fa653271e1bbeeb12248b1f15bf2acf91fa4054b6668e6cec3fbb5bad7852e59df6b061f4d5f0bdaf6dedcd140ad0bbaa15a582099d54c3d43c61b4769c67a0ed66ecbfdb4591413e59552e6293ec13362a354ece6d820
+B = 1a5e8e81757a79341b4e86b04aca38560656accb6efc1e9d982c4e4179bbeac7b36b50d3539fe4ff8b04d9db11c166c161ad1c8072f3829012a9dbd354d414f930182cba135224493408676c3d7aa7eed9014508c2701bb8cc2d2f963cb06bb51aec51e290f4b1203e87b1df8c3c16daca5862814531795cd0f494f7440bef535112667eb797895b6c60a6fa60f96f7156cd869f1d013d89a4924912438eb54c0
+GCD = 6a52bde7a93e30fb969743d8587f14314e2efa53dca0218601f6196ce766e5b3243b0403f476712838eac8e710a03882ea1876a00f64738635c72c357fde60c032ecfd88ada755a8018f35e02b8927f20
+
+A = -15db9e276016c57f9dfc330ad290ec43853d5c45fbfb1cd2fefe427f4c866e22330f57d5f2a752f566cb0aa36a2c62a73d01db1ea33b4903080d5368916204afcc5b5cdd9a1a39ace70f0347383f85eaa661248fdedf37ef01e2cad2fc8f320868d16c23d2668ea333192b4d4aa3ecd2d1a872e63541e971f87f02d272b71b910b483f8862f5f89a20da957bd15e4c86ffd4d167660290559af69e2539741f40c
+B = 4dcf192166752a6f7dd6a00c62b8b3481f339117d8412da06aad82200b2aa9bab2545e6ede82962c6dd09e43b26a5a3d166f69bc0dfd0b8799e908ded998d1e1907cede348ff03014f057e2ef4be4f40fd18eb0a2b200a3cd02550e980c298f340ab183c68a48158be8e2a5b88f0b5b30109e299b6438c3157da607bf2676b1ebeb289e1a8973226e4c6e78d2eafe0db8b4d69412514d297d0e1d02ef64e29bc8
+GCD = dbc2d41161d3f18499ae0356ed22e1d35e8de178d88d1db47d55e57d30e3ab1169223657adb97b7322686d2a760b65bdf05d7bfd4012046c809375e45ec8fe8e4beb18babc539230959db698f6b8d503c
+
+A = bf84863c031c2534fce9e1b1e7c3f776ba329462013beb5d3dc9a1ea0e8ec8b5acf9463c43a590f28bc4fc1dddb2e157b266730820b913a09d4e8237900ddd7dc7261afec182a207848cb12a3bb0e7124d91998e41a5aeeddfd93b38f9756260b06710626e920b3a639a48acf61ea466356caeb50403c163c19e654a69fff86a8190f187c02f90eba8c3801105e21dacdbb9862bed024aaa4d4c15b8ccff9931e
+B = 12d7ac84f45b39d4b66d77eee8e3212794542c556edf9f4c0abc983b056e2ce6962342ab63338b864298f2806a50d1098c60a0680ae4ecc808be8a603c863ae45424dc1b2a1d4fd285745c3ed9baf6f057f4bfe91e5010dcbc4f3a2ccdb1099cc48c9284d0b70421e4c1838240d297391a6036dbbeb25e0ff8701d6304bfcd4b8164f3d468adf1e48a48decf4cf0963b7948ee5fd9cc2ee3a778dc6b9b2da14550
+GCD = ebd69fea03c3509afbebcac25918c8b2b3df76106b663fdc514710373135f6863fb66475054a183a8c80746831582ef7b1b3f8369cad22563c74a07a39c933e400f457390b887a4b145239ed227a2d90e
+
+A = 401421ead1760e4444fe51d0ed157fc26a4b1aa704cdb213bd5d5b820175afb1c3db3fc399efc5c4c539ce4a44eca4ecabca01670390a3308ec235015e416ad6ff79df5313a8d5b4247b62359423b32ef1155d6fc4ef6f3d62d8ba0cda98049b1c3f73d3a8a7cff430d99d88a47183d54950c02e61ce3ab8a57d4e95b122dbd30c67a8c5473200abc0b6657b0d916c129576f661f0b670b921029804c6a7a10af8
+B = 36cc99bcdb2619adfd93e2fa2f6ebb639a18d8227df5751645f76d903f18afe129a0993b0da5c29bd7c2e7049da2b4284ee3a46dda22e918961622fe66c6158bc8c57ad9b00c3f8f95199d0550b5cec929cfd7c11a93b4178fd9839880864fcfd58bad1e2c6c96d4ff464cf42817ba1d9bbb59f570a26b640c1d1dd5863be54d5f96e704eb7353e502b1942fe35cdeee669ad4ca960c87ef6addbc13e4f860b1b8
+GCD = 21fa86999658121fe55845e7dd43a1ffd21c4ca8f37a31af2def0a3e27d8bc51e04ae7eb5e65760302ccaed852b24c45e06a8b6b792c515df4344ecaecb9bc985f100b8898690dd83dd840ecd0655b8b78
+
+A = -18c3f2cf758df5038731c1be874d26a9b072ce26425c64ed74b246926bfae53114c0dcb3f1c0f06cfb09f43f6b7d3e635085e7023be56d3e54bef884c8fb185635927299154ec13943124d4a361f7671ad41c4564e98f73beb9035451fd5e3b66f92afcae903613dc597fcbb443de7b56b493f1ebc6f3e129b2ec595c6afd86d54bd3863bcc83d27b13a57279d6f788a7bdc6a84352d199f6a55004da315b3037c
+B = -85a31a8cc522717473980c0560cf50193d999d7457a6596115b6e640d4ab4482b5ce216872775b7da243aef7eb7c5f104425a4211a07854806662838b58f4fba5613f50104b992c69daa5faca1b2e83d30c45b191b1e7b6b66ee524fdbb912db191902ff72e192d4228b581dcc2e41821c06cbe8f655583d86dc305f05989d54d7d82835c0cd8f16fe0d4832af5fef0f0ab52f19980df538ca8087f85b11f2107
+GCD = 11cf3710ea8f9aaa7662d95dc9ca2e8c051d610fa95bdce9f0f4daa31620b1037296006db1437e16bea23d7d3fd86ede7411556425b52934043278cc4bcdfb565a224c362af57a735ed0d7511417a9b5e5
+
+A = -532dcafcd2ae2d7cf964756dd347bc63d904b671c11d69d1a723dca15df97e8acc465800d6aac4c6a86632221df1e992174b6c02deb796ba19cf1e5ac923063a3d000a0aa3e08800e9eab98d2a035406d133832d576547b13a1c15d86af6d844bc83aa93cbdbdfd3327e1a384d0b7d08d7fd586a5e1fa75a7d7a721e52767331e1b3025b7909c6c85858468ea2dde79bb44c5244865777788969eaae29adde8c6ff
+B = 3f2f6fc19738170b40b3551dc8f27cb13eb4b6f7b80e3e19dbc508fe609b743366aed5d3778760303ad9f3a375922ff06480cb57b9f26406672075657f6b4fa87ccab72ae32aab322306b4af5cc8c3ca858b54e66bafb1ad62b080e6569e9fb72893f5eb09f44be2212ede48454de9f441113ca345e22678c1190e27a0e32d379e4fe7157e5fc517c10de638f909452811617b338961d8b94fb4123a7c3655845df
+GCD = 376426bb3ba481678ab10352f0744dce370bfc0d1a3aaa70dc449f6680e29fdef8e4baa9e957344ed9f0b2daec8afe3908d9fad50771c6e8f4b462e2228a4a13524cb418f3dbdd01836b0cb9b6f4f5a967
+
+A = 4ecf32cc2001115da6179d222580a560477c42bb246308352c7b8214efc9a4e1f0a933cacbb48901c4460671d95ca5639a1a74b993a2ee979086bc589afb4587676b9f5830918613291d6e4d14c9ba84212057af208363a7822f6356fe9d468fe590311f420a42229be8f900b63804ce52a482b29856c69c7a28853a5b2c71bf949dfb0e1fe985eab4f6999cce6b63aaadb7aa4a6b16a14a14c7ed25a607f73f536
+B = -1cad64940069b07660420d1103e5c54d4bb1012c0147a6ef6bbf647ba0f35b5b8b9f176df6c21ec34584114a1ac88e73da3d442c7caa7fe6e22401b7b26bd4ce75dfb55a2818f7648652cd9b980561a21428dd08e3e49e67240f7ffc0c6b47c5fb7224e3e13c8ae241458d7577e96f2acf38de2f3bfa3b42cdf45455bc875aad6755a778e057341c680c84dcbfd18afa697a73628e37ae949cc2ef50845b7f253e50
+GCD = 7985cade73c3d55095ed9dafea25ee23e50d1b07969740df6d70a4f3f7ace2ca17f54c47ccd78c5962edef8e77d44757bf286774c6052fc88741008ea5af3ba8b6378a06274896851c8d27a85bf03baeee
+
+A = 5bc091dbb7696268add9958c0c9bd2140df8b30deda2093d82dce05450232255b969d75b550475d9e3bdf7cb8738869916344cb1aa4309c28979c2e57ec14072ae31c0820334f190011746a2e2c3cfafbc6c48dd20924cd200ec25743713a71be451ee47f8d284940ed0981235acb1ef55b4cdb5f99e9d4dc98d3a927a72edbd9ffd12ef22eca51a1bb38aac5b4e5fda027db16f253ccb9e727c91b6dd1d53c5d60c
+B = -215ca904647d4cce9ee41149f6c03af74a9eb54dd1f43c0ee1e1071e3fe9210b6a5fa23ac95529fdf1207af2d1a2b1c61bb0ff5295a6366f4cedf64077207546f7d1ef6896b00de6e99217fb8b644c3f2ad80f65c9d2f50dc940d74189ee97339e54b4a45b1eb2d3b5626003ccfead467e532fc2bbf5f2737631f03672c0c410afbb288ed15e40126a7b7a023350a742bc5d8086754c2d2887c38e015910414470d0
+GCD = 1c4729f28b86af92d0840cd009e4731e8ac551a192e8de759c5212d4a6bc8725dc5e8a5cd34fa1d7ec9c482efc8b999412337f5e0d4363314fe93147990bf419555ddcd8aa3f9ca655a45ec7face2575c34
+
+A = 1a261d7d2a82303999efd12a471cc73d302b5ab9d1c4dd205fbdd0c6a8039b8fc675d3e5cdd78b0b45a8b195e07a62bbb7b807d8fe2d7b5bc4d6cef0c65aab0dd3042d35ca5ab0f153bb1ba11986cc505c4b7309d439ac2340670da31981a0527dbb2acb43a3f297cc359ae3ec71f44466f5de95f68804358f5419c4d004b7e3a03e4116faafcee5ba852af09639cf662340a7005e598a2f988058b63554be7e4ca8c
+B = c61460ef4326daa99a59f63597d545e49ffb0f169dbefbf48d3c560c3b824f53f8435107464905a23f520dc0548dd6cec9765ab10a737237008b56b9b5288e8e9d3edd387de302781265c434436c3d5e83d74e35ed15569c04649a5ee612e2dd24042e468075e2fd23be46c8d58e445ceece239c8ae3d8f08037cbe0c2adc6c96d44d864ae2cbc7e93488d868751e3786a58a47f15e0d9080a25b592b0399a1a2760
+GCD = 6dc08b6680dbeb60835b34fc41387d27ee9a728d043d95c87ebba8058e033780fe2073a49a4278a3048c68bd9290711f75a8d338b70d17fbc54ac69d0c08474c4d0920db3793cc4f4fa313df5a9f7a62e3c
+
+A = 70e80c25d9e805222b7d6ad6126e1fe0715d57a5322f70076cf62ce91b61194664c7c715cb3bf656d4ff203973b198846c64a1fd92bf11d0ed04351369f5d8433f971e61e2c0ff6d331ca35a651735951694c82a47871d36dca43b1e963660be719ee35dfe4dbcde4f380f08371defc826f1ab2b2ca86b506f7791841d6a7d29c1103afb9e3aa9b7bcc11569457743e6c752cb3b8df362524eb03ac0f9c7fad9aebab
+B = 4c3c5788da48e310686eb58be40d4ddf7572687116fe94d7ae085f001c428c89b0d8c6ea9ac239273659be933c9d5fdc0bac2273b0a0d3a9bbef903da0fa108b0570020df25f97673d302576450cf4a33dcbf41491d972934beaabf3a61eb4d3ae278f82f99c4c64e7eebd9f4ef82f12f871fa665d2d6ddf5aca29a0d5fce1c4665f5b5d3658212e87ce38ed6b79a9c51d61fd4dfe2ef25d5033ac74869c651fa905b
+GCD = 3c09e59543a8cb089b2e54d261f674a55dbd8f9354f8795656785fe641f1b6e91490ef627236119c840796d071bee6a03c6c1d6bfd9892dc6511f28c3ca06f681857ae07a9ce3a3311e592c19c4c718436d
+
+A = -efbccc25630fe209d37e9bdda0b734d1ecc2900037bee9ba10d2c312bf36362931f1625b6b53b1f7b4778677e3c2c9a6251a51ae7bcfdc8a4fcb0e3f6de73f7d2648c14c8a2c4c75a2f867ff6d524455121ed29b149a6e166faa88c772f8d98fdd1c2d34f0fcc0ca1c64de068047caa4350af5794e7ca3cbde87e2d24ed2b6dcf2df69f70b300edd600e9f5b31ca830e60c1e7170d0b293227eecb0f60e45c96e0e81
+B = 434bf8c6b3147dae8d526a2012ff4baa5dc6ffa8239c51a3b95697c65069e375bed7b1fa439dea48e69cbe28f2f183157952779f89d0a9e295e533b8101a4024db5f496766f9c266c7575222f0500db011b437099877e43705d04b028cb41ebec51381eedee14adc67a3a9cfdd6d90dcc44bd885529370258b9241e6fdcbe873d67d4ead4352946094d91b574341fe36e053bc34131ed12b201eb9351ea026ae63308
+GCD = 5895d3316688c60d0ba7a2147c2be7727816ecc0e703a084d5b477ea132a3fd3fa4ae311f4521593ec532d0ed4bd2413d86071360510610a27790e822fcab7ee5c11f7b91c22d62322cac6f4e16dfc3fdd5
+
+A = -29da1816f4c6a61f0e459cdc54dcb4639e7d28f6b74c54cb06380def3c8561adb39a0f790a1b70873c06ed025f12ae8cf31933bbb5a45120ca47624bdc39ef86e572e2b6314bf86e57e9e81b14fe3cf1be57ff1a67f16a63ec8430f10e0066957b21915852686c9da65c03fe7cff5d9db2c8a53194aa274d264baa6ec857d517fb7ae0cae537a4a7fc7cd07a116c831acbc7eae6ea1d5587559cb5e0162e45b2a70da7
+B = 1ec8109d26c1abf8eb91c94fe9a820bbfaaa40ad6d82f641c391d3a917c88a6555f584f3337df1aa16f6d58d4e299a96439155ae279f931b6a89a45c480879b9258f0ddf80ecf68e2a8f682d1c7d86cee01dfaab196c62aca4844f52ba740dd775ca4efb9f52b898f580033c82d51f9de34b821500ba0a9b06d980a04359aa9048c81c66aee2cce29054b3935814b17f5419ceaf588109bc99479873a7c8e55e6e0a0
+GCD = f97988300c811da26d3ef64bebb885b1762f8dc7872c6cdaabc3e688764d4164d1ac51ac33064c326706eb4200fbac4cad0b36fd9b3afbdf72c8dec8dd576c78301d304fcfc405508096346792138820319
+
+A = -16313a0971dd751ccb75411ccabec39c995802f68f84b7f89ca20fc39252481cb8341533b210a22608851344db451a8b6c121b25c030fe2bd8e26b8a0557d292b9d400ae31c9ea576a7f5f3fb0766107d6ce528064289f0a5f08f768634217692bb834f823dd46717d0e05ef97b1f7559d91f2fff6ad2443dd404894f8fd57b76a27d744782aa237236d891d758b8609a4e43bb6630ef429e7b8fb5659f72de22133068
+B = -294335c2a9fcb1f5707416fadf23977509ecb21fd704dfa2ecbc2cbf5ed22a1aebeb55bb98578ab96b277924d530853cb6795f0c480bb1419b7cd9a6d78f3de57cb7f8420d7d890dcc8cc01fcef117242f996f835dd4fefae27b3c0575f974cafbac6a537ce87928633e57c49bcb8c714e6d8c53ba71d3517f3aa19b512ccaa4f299c1e6b6e0c22a4d8aca2bb58c45476f29c5c281e8ea3b4cb0cbc9c9fa7c3fe470a
+GCD = 2d6bebea4991d099b6a061df6fcefe00a6b05c0598694eb2dba0d6f64a06c279db253f095fc60c362322ad0dd70f4737c6d67fe5abfbcc822b3e7a61b6fa4dbf00cefac2b3b91ce4624125e18d15fccd6cde
+
+A = 329d32eae5e3708cf6825da399ec12a842062d0b4389316fb99582721a5a19e4e1601401c8f003b03494d087d84e35c5745fe19e2a2f638de6aa97cd233b2e7afbff9a8c789d5ca362ee51d173fd6b688b36f33eaba68ea705f56e05c841958c5a887d459aa129abf2ac443da537e03cdb4fb8d489b364afb3c06de65bc5550609444763039d7381b351ff02d977fed85320fcef4181f990cb00a2b68c960b17a931307
+B = 10616bdea0e5df2797ec5a5ecf134966f3a309bacd8d1881eb67f8b60a52d0ee2aa81c631b2fed25d922db3846914c1cbeb7f7195546d5a5156e0621d7fc2055f456b4b67a44dc8349ca700b3d1ee947e16c85abefa5f60c301a470c5e30291691d927d6bfedd4a7a02b0f86222eafa139f9ba6c09b7a51268bebe9047766b9e94ca0ba1940822a934a1ed9b88e7ec5a3c0edb5eb851eba448c7695ac943a2886b5d2dd
+GCD = 35055166237bb1af9e01ce90647c1827a79038cd4a8c9fbc2ad4f2d6dbc111a76549786644cf01e803380ee6649821b7b7146956b3a6273b08c6c338ac3748929a59f8133d74ecf9ef36fdcd96af73b5b693
+
+A = 36904bd5a8280f879e08cddd53f4d1c496f12430fc50597ee51778dd6722df6f29049734913edeaedf5ae14d1cebeb2f9f0840e88931edee9e9d0c16663930df00ca0df636b6126752374555bf771ec6414654db5d7935dff47deb669fbd2ff28a136e3ddf3b9373cad67b6f4286cbb7f04e634477a7856b7c850aa3c5d606cdfa5452c78f07fcc505e4339fd0a23c350f30098ff91d3dfb4b8e60ff0e32335aa9fbaa6
+B = -10e983c846b305d2f95e2645620db9865649a44190e8c9323a985fced8a6f5c6198792b844c8d6342c24dcae3e58bf2e4c71658b0e23c7c9f6be8a6d9822ae7af644058b21f1bf848cd3cc30f7230a1769d26ed291ef3cdd741b016de806dd4b664e16dcd22d9e4ca9b532a78ec4c42ddf2b6b6d3d6ce290a55c1cac5b0b856124444964d976fec1cbf39834d8ce7c65490bc517eb4fa081c3c16a34ae83b9e78a0b11a8
+GCD = b30a49f8df4592d567e91202f3113d0a3042d8f83da32f9e384db094fb87c92c953e0ca1f1f5d648c31b24892b71ccf1558ff232754ae613299d0fb08a37acb0d97693dc71f5399a6a1307f5526ff32f7f4a
+
+A = -92d36603e5e2c4ebfa4dcb11e21f059b3b8351f89e2590893619b72f6b5b5bd03099a14f52afb8cb25a42299e2337af648478ad4d21f6f24bed1ae0ab7b401f61331f69ad73d22f4169ada96b405c310355e9e0f40f12310eb64693495ca9811609a4094a8f1c5ea81052715d40796f84ba0b76b6ee9aad312d8347e31ec97c5098a921d89fbe29aa8a8034f0fbdb956d96a62ca0f563d7a13b18f50d542eff534a6c36
+B = -6252eb51798b8bad5b7276af580909389a378edee5fde835ce26b4d7ede5a694cba14cb61ec0e32352df422fe663203226fcfbe686b25b4a1fe0170ebd4ebda0cb11c49e168f4ee2635ecab10da9a8f661588bbf1e118740236a2c92fa213d3a073ea0ea6e4a0c18f12a8290dfc930b85113ff6b6beb5fa03136644ac60cd072a7f408a681d3f8ce43c5d77d2d13e277f5c9d30f61fcd61f494b60e5baf112409c193f9c
+GCD = 2af5d3edd317537e82dace782fdcafee33606808d7747bc9cf2bbe4f966bf5ac2aa7fb6166d4904fa97402e6ee97df8dc545d4612ba427522bf1fdab9ab975fdd442500775756b2019a20d2fbe2a023f297ea
+
+A = -1a39d935ec82e657e1d543211119a4142e21e852a1c1eec13050e0131cd9befa7ac06cbc194f2c61503d3039c810db50e24d6263d271feec5e0a94b8bc27119913945df995c14dcdeb51fcef8fbe9e7b6444963221569906bdc88dad351609d13a15307d5ae615c230414e9fc46a8a7fd053aa1b9eed9bb3a49a9beef39d339e981ed2f29a40a8c1e8ef30b0523d28a7571ca5933d8c0bcb99e6ad0b2eda90e925bfb9790
+B = ad225ec02ab789663525a085d578a5822f76da9b9cc05f9118a9dbfe4fd3e06147e0d6c492a94500ab728600a3e2e2cb0228cf059c449576c15fc3279b373f1e5f9e71c211b3b7c5ee6ea8048de0eba7d405ea149e8e457cf1b76a3ac99d7285f0e3e99e3a4b528f5ce058df799e72e7be1ce459771ca3ea9e0e55ee04fde1dbdab7fe94a30860b9f089ae64103ab46fdf41aa41f6ffba41a6d5d27e793b2c9b7a33c420
+GCD = 1afd7bf54947a0180df0d0765e3d570b9cf5caf805483a5f68d693dcdec5ff2306f013c69000af2acd4e4aaf84f8e7144ac1f7abbac51deb64c3398f508f8e7e02234226240bc93030a26593c1ac750349690
+
+A = -36cdc87cf80cbc81b79a7c0b0cfec2437fc585e7c66d8d09038984d93333f940eb47bb59a7a0945c357fb87307487fb381067b8590db8622ffee9b1a6ea5c81ee4a2f0d2d05dbac5811e69596ea3766b2a950886ec6c0f731765c7cbc9bca7fbc3b9192e7c1a14113a1efa92b6c40abbb4b279c76de0875096c65d38c5effb432098658909788811015e91f83adae3579eee7d03af0c0d332d1297e980fa9a22d1e43fbd4
+B = 4b026196c3a48a799ff2699b398e5001faa52328102d64c66bc92f2fde7dd054f6cf65bf97842d3e8b201de3e520e64f3ea2c2aba0e19ef43a451e3e576afd0aaf1240a3eeceb71e25bf81d0129d0aec630cf20cbd4602250f295e54cdcef0e416712da7c97ead81226119a844d7753bd3d30606a43e04c2d5ed2f8b0b0e494883791025bd297fa3f06f25e9528938614a7bc471d9fb808108fac9a8eb7a89b3852255f46
+GCD = 6f4b0595758ae08b899b898394354466b0e95e27d15d60d3788273fcff330e6d9763cee432adc494f6f30ab274077e667b6da3ae4aa8d4e6ea05d375c411167e959383d39c03147e29e3d12f6855595cc79fa
+
+A = 178d2b2dd5aea994e261c28e702d7d97586309cc4cd2c694bc8a5cc27c20cddd1786088e7b827c98f576517bbab7fff5ab23890651f0bc776202839624b627307f9fa44d6010774872ef18fe574aff2207a72accc462eda36f759dce5e4ed08753b75fe7e9610f1acdf7ddc09b24ec4cfcdd5859f21272be818b8b5aed29ad487253ce96771fba3eb274e3514a1bc1ae0321447f7477cab39f702f8732c213c394fd189c27
+B = 1a9a8bea97eae9d2bf311d86133a9ffcf8746c839ec23b3a61da91fcc0b0981f86a2b33582bd7c57635f9f12b79f118727b7d37de2af2dde2b02fe4a229823e880d79e213f18252d96c185906ea56861a39726f3998bf0f55c754f2b2d769b3de988e94e18bb306ce2ca96a310cfeb28268693c92dd96316340d0989e9b09979d6ab7c276b59eca4b9adce0fd195404d4319930858b108e9c15ec9fbe1269262694ca8f184
+GCD = 7e65b25614174c841b5d1871b2b8414911d5e80124eb768ee0e7ff33679655f69d2426e1d7d1ddddecadcc2b005324cbbd515fcd2d93668917fbd36d182684c271f8e184c94c899bccd9adec28e822f482177
+
+A = 5b5cd404465779d6c27b916243c4352078fd2a36127e031391e85fb6f2aec27176af9c0473434b4fa8521f479b3c8a1ea87ac2594cfed6a614fee936106eb3aee4cabb8cd6c1cf842c6191779e9065251bf33b631f65e57816e3b6bc016083225c44a11dfaaeaec8146c334ff3a97ced48a48ba804c372c2176f37bd6da0c54c7a5b419138d3ad882cfe2ce8643abd67414556c896418b155416844b8308e6138029e68a90
+B = -360166e3fe682f7f49f5a57c4afdfc50c1011d9c7d9e860e02c5f2a8ffc38c2533e7f1f830692a36a769cb0552c7b0bca2632d3999e95f8366ab7057f4c469c84072c5de67c3b72e8fc3dd5f32bd94933ca30287751db74fc558d2ef7e6efbcde9bf72bd125c86da989a3b7e4bc9cdcd8952ba1668324a8639cf018bd9a09a76c4871683b2fcba10ea40da132929aec0fddff0b27687919d5be2aafc519bb90e7dbe6221f8
+GCD = 25966d518128d11cda4f9cd2dc6558cb70f7a706fa26050932978341930191d8e9656fc4e629881820e124cd5a9c510a4ad61d8a212ec9bae6d98756596e52f66b2d927c787bbf280c27421c97355c458760e8
+
+A = -cd4bc6c3c13529268d34e6354fd4d5c56b46b8e0793c7bed82115d29fd4734fb3bb1ec7ffbfcbcca4047b13515de58b8f6933ff2a9f1b58923316caabaccb836fc4572fa34d727da6866539de71bea483b4f2a2380a5d8665423acc9e7bbc8aa7114a6a8a43dddb4cc0c61c2ab9834944c25e5ab0aa8dfdb6bc96d9dcadc9508747c331b70742cf78593e41e4db17b12140439a84ceb03784a824048a89536a1acf124af21
+B = 1a5050a75419d16a46d11d76b31a79c86a585c0cc2462022d32a6bfdfba2e8ed85228c6b77f7978d93d26ef360348c81da5a12f5b93eba3d51d2b7a36771985f6a962f2dcac00205de8c0015048d01be79c8cb9330de91bd014ec243e4dc97c934b392d0ccb3cd4fc82b364a0fbc1362637d2bdc7b6dced6f5e69aa2e4d0f0206de40f7983276c27db7684d3de9b974911068489e803b4ddab8831e6df8848abb2ea94001b7
+GCD = 1d33ff9865126df1c8e5235eab5b72ffc84d7edf36bb8becf5e1b10d58fcdc335353a22219d816e85041a492a4002cd9b7166a7f55a157b2cbd3d40d09b40d335bf5a3a2ffe85f2b02d1459e64c4146445e573
+
+A = 1712a552347c8e4ffe985b423d999a8981c376883a20a61050b377501ef9ce7ba01389cf77919e3c165f875d0317f350a26813febd1d9a74ed0fe2787b51e816e3ea052dec169f0fbd21d353a7948307389b8adefa4f1b7fa283b686a2cc61a02d4794908b221cb327028ea949aedebf8c7b89b821cea04e3ffc2d78f34046bd370e781327eef2e826c23f029552da9277dedde2f4da3480e1c796a162c9e9ab8470e0d960a
+B = -510f4ad313bfc9efeea3716dddc199bcee421420ecfa455d978cda66a574834d0e1f2b559c40815976c612d657ffebb27a3474424912d743f7821856ca2f3ec80985533f348cff3280a07f2ee13a203b8e1c0449dbc416e3b789e4cd29ba1b798264527c74774ded1e4fd4943f813901c3a7764e1f5d8ac78676987ddaaebc3966772f4c4b873d6b9ab2e2e8a8e5190eb87721f784b5d20c58a06eddcc40657abbff94d57d9
+GCD = 30754de8dcd11fee7f17326d3153ef80c9dfc58ef76cf8337ddf47048eab6732ddc9f1d9ff5bc8fc42736474834ff48027e0cb51dacbf8d6ae07725b021342868292f22ef4da35d4639c01217091e868ba915d
+
+A = -fd9caa8e52304ddf94c0c6291729a3d5e7e191c9b1ceae3aa6f2ae8017792c6a51a8520087fb8cc4d60ceeba2bea6d976fe95eb36386549816ff0a0ee90bfbf814bd9f2073df078222fc763bd073a0c98ad4b68cd47e71a580d6ed9ba77f2e98d76205ed196c68479c834cb5446878d8d5897607b17cabd090dfaa8e51b95de8c103b215e067599d334609ecee96a20031d426632cee68af43ecb37063c6d4e127b82f730e0
+B = 12caeb3bac156e415d7bad63a04659fe81040d1b40db05ddd0955f0880aca88b750d6e0308a2c2446fa314fc6007e5750e62ec6d9785d0685a480a1e3bf84eb0d376b4686b321f17268ef297cad1c5e347c9dbe477c9ed9c1b45c491f0611d60d1e659c746c3721cdfda8197fa1c417e372870d8d730537f3eb726f5717f61e79559cbf063b119e6420a4c9e605a892161681416633ce1888f63fb6e15cdbb3a6f541a6a08e0
+GCD = 35ea5c7f74acb11126241f157ab0c26f3e7739ed788e0f11fb949482c44872703591e3ab8567718c792c6dbcc88cd08baa179ab8df2252efa219df690de0b6762b53c3028b7f636d9f50fb4e910ea42c46ec860
+
+A = -20bf133d2f89848dd5d32d38869a02c36ebc2bbf2b686aa42a3ead56fe42e04ffaa5e446fca76c689af6cdcac055d021951c09e71d7e6ff91a08863c4cb0c0499d9ad39438e31735009ef0c94c8e58ca48b4b43ed65703e48a492d5b55f9218e04ed96635e6ffb7f00cd2a3fa1ea38be43b620fe1e12a53ccdded2378d00ed21d7c09e85eaedc199c16433a4de6bcc8e3e1d682e3aadd7cfdee5ff9f97b1a12b829fbc086a88
+B = -49f414cb511d5de559537903e32dc26330200ddbbd9937192f5a8741ff5a8c69114ee63d6240a6433d4fec6e55f075fac24683e47176b17ba31ae997caa3f8c154f38080019cad6ee00c768a65953bdc21b68c98f70d6d097bda7b0d16c1eeda8bd20342b5e5bd12504bae876b74bcb8b0c20c4d516ae6c756777c2b7086c94bff6f38a2e0b64c0e341a14e9ca703496fea9468d6e41f7df70e5f4afd0618e1f1271b11678b4
+GCD = 98c8629c61898cae20781d5c01f7fedf5cbfd10f80fe92f5a7fdd17c1856e0d17473791389f74b07da3c17241b12c1db5a556720ee65b9f1af89a5f1f5921376ad38ecdb6c748b16dca6079d2b652c81f8fc54
+
+A = 1549e7db262eb1036b5dc6af462186b037409e1c712d65e568ca8535ced8ad3a8dca8d28716d2706ac43c33a6f8b3982463199f56806dad1a4510e2ebd461e37fdda268f08dec39e95a89583fc4a6d6b4ae5a774c0586f5bd23203ce784533dd2b223ff02651a455eb2d7700f9e19bb98902eea5303bc2b5817d0954e7ffdc033cf1012cc3f55a8e55bd4f98c1ab7a9246d2df93ac07f76a73a09882ce791d7d0572438987e7d
+B = 155ae0e37ad2ea6125d69e4522aad289a3bc053427fc8beb903033071ba3dacc948a9a8bfff7d9cfdf305acb2ba4dfee543a3a4079b51707f27d5d72c7835cd8e2bc0638dae7eb613befff172ad77d38356f341c67bb88faedb20df5fb6b2376b2cb27246f36c76d8883224e5961d14f205be0f9c655545b408044ed2859a27d93f3e69f596e9abbf3c9bc90e61253d071c74c8ded5ca3fab79d64da119e551de0c918bc58b36
+GCD = 1a884db4cb40c045de5ef62e54956dfe783446ea789af2b3b6ce3f6a197396fc205888616ae914a42076be666c9778574f64c0e5518800ba72aab9683771b4fb9d080033d6d02b43931d7950f2eb651fffca95f
+
+A = -25fcc9d9907e1e47fad29e264691f4b621affe96b469c2edf1e0cff29e8f8a67c0766a73b728cbae4a3abc9533ab25e4311bbfe128209dbc4fe38022beeff6d36e782095d2a02380f9e1377ce4ec02c461e3e2e0951d320d7ab4ec9ea95f4fefe52c7a1d3f3a642b327e8cfca21c4947d9079c7774943eb747edebe0d990a3f137eef270e438420fc72441a2c1867d9c40464ab647d088c11af78af6d0e2095c302f9d40c3d0e
+B = 4df501302608822586ad0c5dab8297b6ef8986569e7810c00381422003ab17c2ab1cd878fd5d4e5d0df7e8de32b0300879e6d772cbf27f525091314a7801efb5585ccf5e1e5e84bc5b69b2c6a5706d10ff47df285ce3440cbecb565a65c003251788818557c35f21ec6e0bdb58a084717204e27d6b9fb56f5644edffe278ed63f73f6ea44d58b74ffce2b8367baf5116d572906c3bdc168dd8e3743e2a244cfd557a12c3d4e1e
+GCD = 4eeb4f4bf9f712cffad8115b4d63984095221e83aa0615cc0d9497b0614587fd294dda9f87e3e9e8edcb0613a7b515eb4de20f87eca081e5df3b1d48e6ab66199336f95ebecc765a4e16c878b171b5cdb0761e2
+
+A = -17e20b7adf1f412b15ab588b58e91083eacbebdb148ebbc93a9cb4b8bf1d2d974a24aa0c17b496fa715537a802421b95dcbe6ff7788696565b0b1b47029447837738f895d0e9a35dd52a10b0cfcec5c79ad0e3369e23a42dbc36c559d9aae58cb59261b7185f087768ac004b6d3d2ca07151fee8d1224846c0ad923b3ee8773d8d9fc31836b46282f10b56d5ff1908ca41f30d1858434ded8c303701f52cc41ae13c87414b0c85
+B = 1c680d414e1b343a829fdbd1c6daf747a1d953bfe9fb0498ef09a9bf3b6d5f5b6b5582e0ee00b9591ea5122d8e798d41a7255a6749235c6e9970c05050a5ce2cbf06e131f9b0693afaef3148644ad6a1399c7b99700385b1f65ba78a557b465de68df50de0325dbd483940cbfb8ffaaa0c7c58a925a60ba462e9a79b2032fc77de45616d979055ad621a1b9efdf18c87857b2829448163111f0120f186962e2467d74334f6c565
+GCD = 790f0cf744978e067668f4da59b3b90291eb5c81bd3feb77d50e2c57904b6f18850ab1e98db71296947f6274075aec399ea9977027d64f8dea7a07cc4cdbc2257e0097edc6cea6115f5b99ae8596d226c3288cd
+
+A = 2e19ff84a9a9b888081ca210eae3e3c0a6a31bd8d540b40dece7fcff0b94950499861b56eb5839aea6b236e8417bf7a36535226ea68089da5fc96b308b2200508b33402e2798b4a2d73e28cc3e2cb522f86003507037d6afc33b532d3d977860db87b493ca0ddc8a5eb0304d0a480960a276f31e72c391bd186757f96b0092bb72e36e29eeac6c786b68a50288bc5b8e8e704cf2ee270316551474447d3e6538ee0cc12dfdedb8
+B = -151ca7bff32d60f1172a9da0927bf5bb0f720e9518762ffa147d5a1b20496961a00c65987866b83837901cb16415c540ab431e6608449bcbc8f92589f4c54c046550b7bac1cbfc76fa2357d4a5e223180dc2c6b3f1cbf1766ff5fce51af2bad4c71f3fc10c16d2e56eddd60b94cde93f31af8e01ec29b8d67700646666e0ae906617c28a4e5369edfc9682e34e1b0c5503ebc5cbb1be9a5643794b0a806a5e84ec24e2376182f8
+GCD = 84ecfb4f8437dd4247e24392b789004752212d5d115708bd95d9a03fb20bc0b3e489b52827b7febf2b8c7424c53d00d5082f343a0e99af320c6a47b54494903dce809077166464da5accdae689c4d1b34cbca88
+
+A = 15512745fbd011f138f17318cd664ed98db7f4a3a2c3be33a213d04120a33ab4458e37eb9917e61f288197ef540d67467a09e932744709d9cff9c8f7e2ae629b9ae2ad4ce997b52bb1c7a3b963775ce6599cce0545c9a37e73d5bdb8b5201b8e3027bba7f0cee33a090e02b576b659356b00cfccfc77ec77f952cf511e611be787e0e1b06bbe85ab951056c41ab4ec001a212b80af2c1bf25e38ad570bcf6ad87191e6ddf7b39a7
+B = -bc9646ad273a8b4975c627d9d7860ff12e3338d9939b33f654362e25581d615239dc1fedf22f12d3bce02dbc7892f4a7e3fe3fa65e254e674db130734759b79afb909cff6a65acd2b5808facc3c50af77ec9ebb6499868cf537f87a8ccbea9eea6f7c3686883803687295c7b077f89d51997202b57ee7560f55eeb75418af6893d2b3ff52ea68dd2081728499db3d08f09fd03d00fb562e73f5ed4c2d7e377499ae3c342c5f40
+GCD = 196a58d478b0c26a8f91763283c06f47b5cb1922eb4461b12fed0602222d3ed64c106ae4fd79da90dc4a85fbaf187885e598a7e203fe751a81f83f492849e1220ec5dee8971cc6431c5234405a9355fbc5e08419
+
+A = 38441533567e323c3e81094a91e486f669e00ebe71c1450216cee42a8111049bde1702a2e9cd4e5f8f8873ed693c907fc5f8275f3d7c5b62353c7efb1708d6edc97ed10ce3fafc08e40fe210d5afe4188a55636d9a07ef06fcbe1928492a72e6962b9cdd539ff3c9622b9d0101a8659181bd5c8b9544c3e057c22d0500b052db92ad8a1615aec3f11e2bf76cde79c5213d093368aa55d8cf069fc6d04d73e95268302958197c7c8
+B = 542710a700b1378f123a45eab1781d51aaedcabb1b87a117c993f95ea69a811d10736ed6c8d0c29826a88a7a34bda1d04b52e997c0fe1d3d7cf596758365a7e91643f9853a32b369e89d107c7ee9f0ac65540633ec717ffa4a631b74565d42a8e8ea99f5eaef60825f510d753a5a28833f5a4fdefdd2e91c05542a03e8246db8e49b90cf09be4c2f76fdd26797923a361250974987c2d991adf90f148c65b9769d282e88a1f5bc
+GCD = 6cd62d01a949b45fff6d5a973fd49716e5d123c137db5113492709f862d31085b4b7a80d8ca5b8a2bbf453a748191567917fae8c9d2ac8b2b5832736aa116bf80bb2dd1e1ea663aca3c759027539f91e6a9c23e4
+
+A = fde1cf508ddb315a775ec5f312160f7e0cdb6007e27ac54f3f04e6fe60a06c266b78d9497a0a5ee84f4ec2068a8abb3982ff6f87554fb72ed8465c7e09045b330b55609ea4b5419eb0b4effb01395647d1acfcfed0c7d06016db94305bb58a6a8d0be078c2a7787841d17ee4aa3f9b4fba057c61b47072cbb5c0b570d7517ad40cb0acb97646b247beafd0c42f3861749cf68b81ec42d1889c7b54ad70fe51c6270ef08d1b5b7e9
+B = 12c68fc67295bd9fa9bc65ddc2aeb6483d67494c0df292cde481dc3423126434b7725eed546d3f920035ba8cbf7842523b7524cd1df83aeed7030fe02aeeab9636ab8229153446c6d38d368c76a65afd9fc8771667ba4ea595bf1b3391540322e07a11a31923ca4629c9b77ee15ffc3edbd546598298f4fd12a5e17539da50f5af66b3fc75effbd4c9f05dd2132e8dced427e28a72c660a4badfa356d4df29ff5e813d0084016d2b
+GCD = 193801a62dc53ff7f3013662412ccb3b64527d6e971a47ec0e3bfd8f8908bb88669c3445afba870847dacd52be8eecbae1b376c2f49700ea303788fbffbfc097bde53992cf9c91479180e44d19550cb2d3454d3eb
+
+A = -132472a5dc1a3cbf5afd3f729650983622784cee23d47209fcc04ca0eb3a4ca0e8894fa1bc64c3ce72066b757250babadd215afe688f5a0878d864358eb02d512a561b4f79a4234afa1ebbb2355b38ce8e0d7051f446017ac8d876dd8fd5de28e361ff2feb47335305cddaa0945c1ce27c2d6be3991332efea77dc5ac18746f7e0a5da389b1a60cd9609a84046239a4535b12a6831f8ed9d0f6d1cf621d5de18181fd84ca4e8d3da
+B = -299b32e1415d646dfc536f6de908f937d9db2e95381da51564a328e10bf65c9cd7f553a9b9adbbe8e9c8d30a60cd68d18feedbb070b6d281c8209b8e2325bac5cc1788a64762d0e6ed9b9341820be7d7059e1613c03a1e69dffbd3e18206b5220f31c49191693b94f7dac8718f6841f10f1285e8bf9fe257c2e25555016e73a81174ae65010f69a4ec135ad94c2ae04c977c215dabba0b28ec1eeb5007c46c9a8e6c9fe203efb604
+GCD = 3ee96bc4062f032952491e7d1ea14e2d692b7f801481e01029369887f34b967f4366d2b3f61f9189caa332f39bb95269ab5956d5cba7fc4cd64d1408d1f1c21fa13f0d6dda63e703d4ab638689219d3275018ca4a
+
+A = 35e70ae7a1fce34516ffa77495a40604d70c7099fc4eb2c0beac82bd72bfd0f51a030caf0e0b3cafafb4420c7dbbf02309a562763b4961398936c26c049fb23302b7e21a1f6cf3c47254d7103f7f3d44137894fb659c3591578058353d6ab5f68690eee0f37fc19b68c4a49c9e915057816a54e2c792e5e1f988b3b7e1e57d165c5de60a1f29e88cda53c0907c19c77f4a6321ec5380c51e8bdf9ebe4a12c19fdd6a26ea8bc6cefa
+B = 1a418f34a6432b7c7499a21215585d3f151db08ed3ace5b9f82dbc4aa7d012da7583c5ff5b7e4e52476bb1418520449fcaa6686b4066dee72cfd6e153c77ecbf25216cb0a5d5183390d70feb41a631892a23981e7da31a3d2f2985014535f07905210098df5a103b46cdbd0deec0e7e6d837630036ed001123c7b538f382e51157f10c2f2d578b54d56d9d224f0b1504487617a5087e7441fc790809a4756014994e40f21db272958
+GCD = 1d78490e789865026c162f108b6bb5c9dc924520ef2a8af2d5e308cacb84fd2b05c0db566b3445101b524f77ea3ee49ffe55691e987256b45e0b9bdc87ec652c2069ae1c9a00ed18307d1044228c43d30570d6626
+
+A = 4ba5d7dfb78447e62bcc2c91deb7ab34486ae55860417d9eb1db637a1eb1bf8926755d301c3e309516c200be8a4e0c6c1854d00cf9c65b8c69cc01ae93574f7b8c69194c7dc053209460d2ae28482872bd282b0136441d3b4fc3bec567fa8bfb38c78b00754eb4485a4d2d59b9ea821157055158edf6d3ee138d5b3674cccccf5be8226b6204598b440bf299502c0ca91b23597eb51178a23b1117700f06fa572ba6fd8e48debaaf8
+B = 413207c997776cb0da827cfebca52c65f5fd87305b3de70ee614240a65c6aceaf997d55d2734531f3c8b0ad11fc4f4cb0affd1ac9f3320e439e9470ca09e8cba5fb97255c5320075a146bfddb44d9153ae18337bb65800b9d2a9cbcbc88c3a1f412eafe2f1de5fcd3f56a90d61fcb4de2ee0ecd9f5cd5619caa8dff3688c557ae72ba8cb94a79970df9c2e9f8bf16c369cc0afe35dadcb00ccf9bfe544d5ee1233a12ec248b84e84
+GCD = 56e620e8c6282ea69fa2c6e459463605eda72fafbb8b27888776ac8e3d2d861339ca24d56aeae3d227549293a6a988235605b89f8bd5a28df37dae254addcf3b346e5e39bf923469824afad5ed9cb50e6da196d5c
+
+A = 62c6a8078685566f99416b21862d67f519d90f3b58587f34abc40c66ec31ff97dff9e28727e555cd28e534ccc8c54aee33332ac827a8a72c69c796db8182792ab3a2cb2876991f0672e8026ea0ab9f42eb5b011d2ee79eccbc6463ca87cbb6633a081a3dca5c66d3a6c6f6eaf2b09aeb7343251db226e464310a1c6f8d46ff0decb396b3d364e64d3b909473d03ca2a51dcc30ea0e0c24a8ebeaa4862def92fb3a8f97401c88d6ef6
+B = 4dd40db96fc6d596467d5dcbc918c28170d1b60ee8882ef747371be72771d1d2dbc6fed637ade6ed3b744580ff1eb936050599c4277551af94bbd7c3fd2b9499e5c65a40eba3791fb169a32e04e1dc121da3a0bf7f242145780926590af4adfef015d1c947af1747fb31de5f34a823aa326cea2f85e64072352ea4f87f7b4104aa2e71efbb57e3e7836a6ff07cc30007ff931e9c73c12f4ca4c3403d964eda9d6b13cd644e977546b
+GCD = 765ea443ee10c0176186891c78d9987965dfa0d1157b5274005d38d00d06f6e1f1cb2b82011ec12adbea84313161dfcc9a84472f006d07fc034fa029ccb9ec22bb84da383d7c6aeb8954305191f6266d7f564d31d
+
+A = 7261adb430d2276980682239cc683be8abca470ec39f450d1e7ec08eb9f16dd0217e35c4ffdb86df642d42312a57ba0b8e4566d16edda08dd7a360e57ce56d8aa5ab3d85b92fcd69907cf200885d9da69390a45050d7a81110f02b1eb4f55481145b50ecbe65f6580fdca674cfb9b4bc98dd947060636b6e7aa164f4330bcbcc90ee538e4e79ad947db0562ca173cfa8fed91d9810d7275b7555450f8ce12011325f9b1c80c550d3e
+B = -3a43e6bffce626583e2f085621d733f37181af78964f314145855f1e4e27b798f2f0917d032c0a597ff10ddf88c2791b773c6d71e203d1e2dbfff279c836fcdc66a04c8ef8bfc6f1c97c966862427649f81f39a443b22764d92e048eca7d5a51e7b65d43d71f85dcdc11c33df524a08049b273c4ef22f9c8b2d051bdb6c81a4cf11d16d51eeb65da98a67b691e04cbe58e0e0a626bd2df2352e95023ee4983ad3924895850fdc9ae9c
+GCD = 1a0ba7d8776db0311d7dfbe98b7f23500737ff2dcfa0a8acf3f9865dc60b784c32535fa94a82e1606a85e030a85f9c533a7830bfa28c06cfa1a8b0ceefb0e5667e8b1dc76044730c67ecf8c1fa187d1fc834ea4416
+
+A = 13ed6d7e4fbaaecb55b4ff46ded919dbe0f2c7e56ce3c4e1af4cf69c2bc72203d53d3d5c69c86a657ac7588ea974d7b9e9aabaa4adb2283b516b7ed6e085eb252dfaba3e2c00bbc9f76d8f13c0e9632c3d3c36c2f54d81ffc51468b959afc879c8a508068ef3d0ca62cf1cddc2dda21db307ce61bf078ecf7a10221ec3b40bd844865e6661cf2dce441d3919fe754d541cf125360ffbe6e318737b71276c3dbaffa0b14a29726a646c6
+B = -1ed4b89fdd2fb106a910583fa7dad5600717ce9ecabbfcbe39852fc080e333adc207a76d86218991af8e30e8c2e2bb66a13818c89a011ce1d0527b97c0a9bee9f8e8d075f0efdf3f89f75357800af625825144a3f38ef557d859d8db501a0c02a20c7d66f2d9e34568dce38697aaf31acde81cff478a5147172a5c05da104b3561f72de906d3559bcdf274a9070a780b51ab6c1bddeb86ed85cadbc1594d98cea4fecbcc3bc39830f28
+GCD = 3e7a282dc36cc24335061d1fc8590bc0d3962340d963e483f0adeb28cebe9471db408cd7cf4548a18f60a7a888e62b25736b8dbbb9b54faaa492b434487717fff68fae0a26749a2e0eee233149d5b7426797e73826
+
+A = 5e32469ef3b5820216d038f09aa952118d19ccaebaac236cb258ec5dc207ad14c3d2ce5c7d932a0a0a4d23c75cfe16694d31e0442fb2c6921b7e2270cb7343afa6df33f1a2105a0a5c14dd5bf4b8b6078b638cc868039c09df400f758f83e92bd7178796471d997b1ed05bf555041834f96f630c19038847ac7a9e485c10f220d8218909bf958cadd3e70101a1fc4e3602f10d8efb047b8fd5ca4be4f74806e9ad4e4425b0c4d3d594c
+B = 2477e1ee4ff956827cd95304d8af3868908408139d2d22a971cc0f57335880da2ebc64404ed11a4430c03bba2df91e29cf03e3e1aa8bdc4938971d5503195e8cd18f42bb138d69ba17bd568741e13c3055ac0aa39bd6cc0bf8e726a0cb4dfd9678f598f95a15d3a3489e920ed7591df8857d316b74a2389da55fae8bfd13e05ada122e87e7cb6259fd5c74132f8b7bba5120853220cd7a72d3be6428fd9086f3385e6fa3a04ca5ad5c4
+GCD = 65a9c9d501397d080210b1eec9406e94c3be8380f53c94500e3601576e469e9aa5d04109e30435c693bf0784e4713a4338f6fd6038e8eddafdc397f9982155bde3ce240bb844d538110f3e8c08bbf56a033a84738c
+
+A = -2fdcaacd3ee0ed9032986deb0477b0b3ebb828d84ac4169c775d03b349c56bd9b8f69e442b85b1d339b62329cc129986f5feacd5ff2d844ac13270fdeb5a2d2b0bdc4906d2fa4f9c6ad929eec769c7c3e64a190cfd134922ab518fff3ba95d74f7b2bb78bedf0d6bd087219b4c87f8d7a24a3138557463a7501cbf5f89b24c254ec021a8143b32d90d15718f0c5b92b905847afd78adf8f54cba00b8328d5e2a929bd6f2d63b9c4dc70
+B = 1efe80568714d3521c9cdaf6bc2299af0ffda74916c4d7be1122924022c0ab8d099bdf52a712369356854aee634674876ae8176afb3aa02061c705ef8ca25ac7cf51ae01318437808f995da5df480def3685d5a59d222c316e23ea71bdce61e39c475aff1411223aa56668db2e55917b3251a24ed12b9f7d06c4028800f372213dbec3af023b4b9e4cab2fe2d92e5938f3212b22bbc3e3580170c01131d7560e673284733de8eb463ac
+GCD = a26b42b0d92547b64c767322c057b9f652c5a912696015dfd74215a7630f15b7a6b10b1661ec955b4ce28a1f60696d0d168399fc3255460e9610faf09771b14e8c1528ffc309ea53f75299d1e8cb649dc7a42def44
+
+A = -5842be67889bce1fb7d42b76bc2bbe12fef44783beca88448b188baa4e8c5d156c4bae8bf5d4b934c92ccbe95f5af56f01882f5c0dca424684031624284f8e28de29db3e66631d926a43b9b762890daba5307de86871579d17fc86bcb1f94090c8eef033d9b0b140d0957bd542cb0a0f2f6d231a0e464a4b1d6dc0de77e7e8b7c9ae79d5790a011ea64566013210fb5f9d2c2298985b66d84b5a910e1f42cc4d979474d81803aef5710a
+B = 35835c55f0ab4e9ebb1494b34155b75abd36b627e921887a6a45d4d0b1d48e994fa4818bb9b1354e1c4a906dcbd7ff0d76b35a2cef15182a88e69f1490d530bf00446bf6c380a1535bce96aa61513a9f00d3c4c9426c69e9e3baca5904f2aba102fa72b8e3e8d4caea9ce98d7afcb5298e74bd0dd7e43f8901bb28279c454b27f8ab0c91859dc5f813bbf3374b7def2b4d66313f8a1d2bf6f854b3eb56a542b811a150d4a562de412fc3
+GCD = ba8c6a5f5eb53be4bd364e25e51f4737d19eec142fb2c166b0e4fdb4ec39c536f64b5efd50fe178f00e074f7f322a5008f47028330a3142d889e8527718b95f53c60a1e164573cbb932242084b956b21b4c33a0077
+
+A = -1476891f3236397c1ffcc2bc68ae74588cd68b28bfce6f166fbbdcdfe32a380733198c60cf88bb4c5bd6a1e3ded4c8360c6ac992bf6441c097eb96c0cb73161cc10466f56d52b1bc5d59a5a21dc19380141344c11426ebef7abf8515e362eacc0d0de342a379fde5b6ba69a1165f1e90c89f859cc25c17d3fec12463c68f23be2d4adab0ced891e00a3ca8c55c73cf0edf1477f7a7721b93aaf017be06a4efab66e37c1482f972d597031
+B = aaf15e5e461b0d5d6f633c887a130a20e896ff369a270e0bfa19bc870da38b267bfbb108e9d2a96cb9ff568987030ef6655d4025539e089d5ba03466c45fd1dd470a86576e91dfd0fb51dc32ee49503adfc77e7daf5b043ad18acaecac3913e6306569b936b624ebafee95eb0c5ef3434d761af8aeeacaa7aeb5b122b440a345edc3dfb28cc3457540716e2cce85114b11c31a278b6183174dafe2d8d42307cc02a913e0681ea413fb1d
+GCD = 16833db0ec92756058522c045d4f2a329da0e550e8e1561a616930d423b40a6349acdaf9039252675e468192557ce5a92cf1f8b86434e7ae6532cd77e2d096d778da6d5af877bd02e5ec8ae44baa81d19722847a993
+
+A = -4b34aa6c23f237858074feb32e348481e84337050d59f293b215fb5b124ed42c42aaffee56eb25c3277f42ae430fc4167258ce10365797712b99aa54a3fd4c33cb64eee458d1e03f52ad95a444091b69b6d0e4ffe455ed28f5d47ca0cdc874908aa48702b992c1285b03f7cb496a61568805db6acfc63aca1f7dfcc9036dfc4a96b90a83a95749630c86006e2d9b839da42da040360a86834a6e2decf20dac1a5ecf5e431d227b3e16ef4
+B = 38d5891e540ec23c8ecd5ed9894f1e7fbed95d0efc4f6f19b9fa688f217162b4d2a242f88f85cabbc94fd20418578f0a0b56b89b68a817223304e42171ca89510c3c97c9b0a1245a5abec9164c3527d26d4293d9fc12502860f49fd50e4a9d2de261ed092b4b64a79cd9531912ae9ad00da267734c86bdf5edf14e9deccfe8d25a70aa9ae6471bd2d76415898c9c33c1107959bbe86139cac02bfca88aaa65cc792d5a3c53c3f8a3eae5e
+GCD = 64f2dbfd8186bbb73044c2bd67df024a0a39968d825e1cbd69778bd177d323e046eab2aaa28671cb5a17f58bd0ba42129ada2f71767958e13f11558c4c2d995107729ac18efb9ba8db0b1faf7bfbdb24ace3e391d0e
+
+A = df51506ac722b32ceccc6f9043a43f01f807387d6e7312a5a077d59bf06c79dfea0f999ebec31d2944f352052b1453f768a710e8eda2eab515811601bc9e0e1df07268fa0dec7d080a1e4b43dee39b4f24f9bb408b6a78edc80a4a5bc55345c1cc8cf425662c259cc7998a0465163044e238559139921f9258a9296cccbf8a48acd8251cb5b1cdd5be58278d13cb91152839b559ff3e11d58f88ac6f1de49c3c499ba90575b100274c166
+B = 15989a29121ce8dee3416cd6a4e687298f7cc8b3028c4f7b9ae6309359ac20fb3b9332375fa5e2c7bf3c83832ceed535ee976ba9299a7d5fa76a6cd642f30060c60f545674a1cb481eda0db82a9fe9e9af21ef376f135c7d7a7d0c8e7a3240fe1c1b68051ca5e9e2af2138f806203fbcff1c86d8b2c4e93f1a698ee23b04d8de4ce592fe3ee2566ea9251aebc09841b2f09919aeb66a5b9e14853627999b1088a0ac0b267b212c99cfc9cb
+GCD = 5a9021a22f75869728307397d0d910f90fd2c70cb770276375393e4d3ee350ceda4e2dd0a536f1429484d56e1ec976779f59d3ce9216d8d293c495601b37ffc3b27b44f0a11fe53d67f3d6c0412b6ab8a7d7970479d
+
+A = 54ca782dbb149cf235a72d5ad953629638d50028fdf95f39a94e6294fc75e35a067b490165a6000aa25db6ae7f2ff4cf9ce2db3be65ab7cd7033bd2c7810a7dd7103984f4d3a7298b072e14b6f78d31675e7e71efae369685ed74fc14eefcbac9fe9273c3c8a1a79ca7faf0eaaa383438df0be4bb96172451a07e4e7b73ffce7b9f6c54ccc4addde5bcfbcfef9f482beec3da6866db40edabdef3d22db8e0c69a8b6c7402e895e336e4d30
+B = 631cf572bcd91f01b112fd347ecb9ab43b1600506c7311d1335119eb7b9196347bf298c62e5ebab1c20b8cb24dcc135a24686e0342418444c5d7d490f1606c6d2b04f8f51f70b8f24849188995c36783487152be62e5353af774bdbccf9d4d59a0eeae78fb957cf2f1ba2753f75721e3f133006c779359b5e09e9aa6113a13d15550deff0e336a6c52c92200fe9f3a464a71e3916627b66efd74eeb0aa7e4557efb1700a87e0287f69bb08
+GCD = d705cd8fc62e0eb5777b81893737de088f1b9509e0d069593cdc6f8610f117f99c40b1f2427f23691b538977708d64deb7aadba10d97bb4bd8c09d40bb416e7fa206673f15bbc1be779ab35372d26ac07bc2ccc55e8
+
+A = -90eefd3f9978e7026cd564fceffced2455b2c42e61925040c7a664e5549c748959bcecb428df43909df652116373ae52c56d7a10c578ff827f262e5aa3d7777ea80e1e8aa7ba650f819e133a2d1a3a776a094110ce18797fdd4513b068d1028e2089bcef766692a43419e3468d8e9a36f7f54c9d3a4f9bf1d782d77481f2ecf56eeb573f2022c2c094443d84006f1185986f8e4194521efc02307db9b2f3e1b2e0ab288cec3b051132577c
+B = -b5a7f20766a8bb9e30d67814685c0ac3a3ff34bbdb42215df89b039683c322ecb6b15799a89b065366e6b458a87494aad80394b5f8aef440261ba7e52dcb127289d49cf2fb9e945faa6dd7e0d8b846573ca6063b040fe5a932128daba61a5745a6f71dc8b6d2470fe90f10eb2e1b09042f8a0df5213f286e6637a0a6283dd57b5a0c1d1e7d83bc50ebac864dd974e0fa2a215953fb92565fc13874782f858e6151f15900008f2fba6180e8
+GCD = 129103ab082602d3202c1a50cd92145329f7d6c09f7eabaee0ef9e08c63bd6459c99e1358467cfba979c3b2d6e6d3c5eec36fd079430f84f2504756b77a58e2450ca0404647ac7f35f54fd8cdbdcd0c03a38400832a4
+
+A = -3eb0797b60adcb6e3d06ab1349c9581bc902d88121d35c4bc239317809c2322cdfa0b48769163e1048948e91b02e2ca69e926ff8ecf6a9c3ffbdd5d8d7df8774de6cdc2e50133c6bbb570e2a229f70e3e8e66cb4aa2c4b5b0fa905e7c6044dfb791d511e5497cd69d0f4628df2d0825208111b5214e3e39cc24edf217e9fad07006c0f013360d3857141d51bd54c4ed1b23c1f3de576d4b46aa990530d9e5b9f8aeb556f54eda909a7b07a0
+B = -3123a6032a395a916463928c6a7f40d6c025dafe61c9477772d3925b68c06eaf6c1a31ee9ae6ffe24799bb98aabda4b6a4a6616f97ef82d703d02dc70b0bafaeab8d171f679e465541aba13125c26ec3f802ed981f40d8c49d507df2e5b84b9856c4c6e803908ae8b564a757f288fe302f4b9180bb681011ed206c237f630ba16ba38da9482975f579f180f3355f7a94b21c66358e33b90b8aa1f53ed5b0b574881a53cc9ffafa69072d7be
+GCD = 342bdea8d1318d08e1f1bf411de00fc3ca4372d92ee3c3fb39e590e3846d6e52f2499e06177868e4f74c3642392ee63cb5d03c399379efc2d14a75a5793df073d71f38c6bcaa056bc7c69f4c1de86caf803ebf992c5a
+
+A = 45814cbd75809f9295b893581d7be1d6c393752e584c296bd9998c15c494522262c61a8877f39c0828bbedd02531617a1cc3994a276a5252ab9ec34308158f61725b850405c95a427171a0210504e0980fea788adcd263e3721c5bcef96fb5c93e6af7a9452e88524dcbe5c40f2d455f83f8e900825efed45c731e791f9ec4be612c63af7da4b7fa4dd7fc1f356fa286b71eb09c7deebc7de6dde963d2841ce137d0500e3f9543d1774f72c
+B = 127ba47156cead29569dfd8f07af990639a55f67808928b8273dcdfbb366ba298c0742456c2741a5af6724449755b009c4b4fa67dcbd310d50c41ad21d9f2613489c4ab76f6368dfbea76306283edda3383698d6e578a0bd8e477f4fffc8f2aa9f9d63f51c06f3cc448dbde50d9b08e43caa23c9002c29a44a30428034799aa226cd427d282181cedbdd829c3a20740780f682bdff71abbe367abba8eaf6b1542c7aa32f473eda7c8493ecf2
+GCD = a4e05cdc8288383f74a35e7300488fbbdb5e7ef5188067bbae47a92def0549fdf1adad1c425fb4ad4dee817f7673b9733b6c9f9d1f1bf2ba6144fb5722d276e29a13a4073c2c77527cab70982d0a06135b1c7d24baca
+
+A = -5c21735fba18eb16703fb4c9385fc5d9bbb68700685a4bd84048be92b330fbf5f59133bfa60a6a28974d85593f674f6c4760e49b3c4e9f930fb18a232b2c7450633c78df5797151df6e75021966c0ff3285460619e056c2b794be9c9051db5533c797a53453d759b89ba8468c5f3ea6cb73da398637b36727fefde474ea97b621589f8b27c6c2b1a3cd94d32b20c2beb4772ead066125469a21bd12c4073cd4a52ecd53226a41f01e6a8fd6
+B = 4cd41cb97102170a8648c96e2635f879cf30ff8af6d2f5933f32eec937ec6b65b5ca0c7bddcfe5b54d9a1a37a114fbb4e3371c8b9eed1d348b48447e08df0d26013fc27a42b69251f0131e9fa2b4baace7de87b18d0e1f3f9df257dfcfb6a942f94408fa325920af7c6512eec710303c3f1758a2673e4191066bce31ebbba9bffa4add667ab959bd32144de805436bffaac1dc6d2a710d93fcfaf071fecde34139b9a5c1bb5d49204b09d83a
+GCD = eec7c90563e8f623b19c2042902b533ab865096fc43abdfc93249badfcb52c43114f8b9738e0eea74d03ebaaaee8f2100445b3522390971b7bfe706708056afebac0752c31910d43023772ec42b025f3e47434cea472
+
+A = d9f077b46fa50251d9f104212bc92cf0e915d90bf24caa755f1453053607dc01fcb874fc12f2f53969eee09716563ab98c354f6f8cfa942db8c7bfa8e9ab05a1ee3e9ffd1a024f3070c6b71a9a9efbdf081e8a005480211e5563bf55f4ef7e8d387449448ee9ff65639d6ef1a9325f51e81eb15e81eec0e7ee34d76bbf53915a46764b9d80b1e1211610902991e56797d3a387a0b87e51d5904880a3ad924e32db134197364829be262a65ea
+B = 14077e2c21c4de0aff41a68c2fe31a5312c59549b8ba29145ecce53734f55d7f858bb39a75c59574134ecb4199a81158155165f0eed2383fd26410b9140adca64e13cec7518e0db3bfbe1d51714e58ac245e0f50d0a1e87eaed5ee01dda2b4d2a8c8e37f58e3a7ddde2ce6348413d67b40ccf364a9b79e4ac3391b60d1ce31a048706477c21d34d802919fa93608aeb7e696aaa4a30063ed858d10d9099737ca6d2b06bbd729e16f9bfd92f32
+GCD = 1a1deec0618b775095611d906b9bacfae3ca7b218ecc3c16d1d32b52a15d420278b0e975d8b517399169ac041fa07173f8df266038b31b0a49c5ebd9f7e8baf238d8fd8f82854c7d4257bb8ebe72b8828664195e8504e
+
+A = -12cf988bb4fd24c883dbb33a3b3fb8ce19a9224299738d3b270147dedddf45f3a377fa491ecb1fd7ad9f9561d0b074385265c8cd5e3715066b46e33433dfc806e5110d49a8586990ede450a89500b063325566bf53a69a36ef945031f62baa28938820debac55b1d6fbbe41c13e7048536d1340643058639bec3f76d3841a788f0b0d6dd44a30f3146e794b1cd33bf32a4c4b858bcc6e2e2755f0d5957bfb9d97212f8781eec339ebf4c683d7
+B = 67cc4e45a58376bb9e4a1ea167a5c1ebe360b52734d9d1378376386af1d0eb49f3dbe7773dd6d4d960ad3f72f7b5a65e0016f6a7dbc539db504093a4a91a3a12d9739aefaa428a731a7fc85076c577fa40f46f6553f0c34e29d9b1e8f175c75090a94c6893684cbc13f8b9630d4a4da114e501072560090fd6510fd8c2c5efb977440bc57afbc628e31587d2527a4cd651d33b8e12f09623f00e7cab719dcea62a76fa2f953126ec0dddd6d26
+GCD = 3c443858e9810b4b144aa123d5b1393e524114342251061d0cc27bce4358b67ce0b88b5ab7c170c09aa5b2b85617caceb814482d90bc605fe9c44f3d5f656e280ae440f9bbc9d0a0b79e8d81965b8e98f579e62d92cab
+
+A = -fc6b7a0be5a94755e9ea7bcffdda73effd9fabbfad9f8025cbacd7ab20985e32df1279ae5306ba4ee8cf31556d1191fad3fa8958062646b3823be82c58dc1213d1e58ab7f72723c22e09cf751616081e97af353590d51ccdee98103ca2eeba50385aa1caa9e2bbed6614516d90ce3cc9bd0ea62280c2e491e612737e1f82ba660538e32e6fbeb06fbed413ca7046aa929464639cf923fac22c610537f1681a322939542a75db3717be2777150
+B = f7c3329cda5c4ff7dcdc1a482b64ebf214b83ea0f99f85ccb1803fc2f2942a93751a26073c7b082a517bf6147a1e557be1ef09872f2c7cc2fc365fbaa4695d876da5bc78ee6c1fdd5d235d8b48d91752f376b1c979958a8badd1a5639c417cbe6ad0315dd201cb06d885fd44021600648524c6e36f501fac9991cc30c9d49df8552af7e8789aa92f4f46bbb15a6bc9be42f1c09e61387595efd1de3cd51b0672d4a5bbf5102515a210b2262ad
+GCD = 7b47800e39a08f0e7c51377eaca79ed2893d43ea440b9346d1d7f2359cfdb11f2800540e87747b006fcd55891743c76c962dad774d1c235252dbbfee423885cedc4015ceee1955f9b0f9a4f65e87937cbba032d52ca0f
+
+A = -517fcbf7ddf911bdc76a2c2d9aa9706e177f73026a869b7e076cdac4620f42dfc24c3a82ca58f968275374bcaeace8fcaad9f51f07b9c1af0de5e47b344820ebe279736cf39a5f4ee87d3ed4e4fbc4d695272a5ca8a5e0138b5aaec988e0ff84e33a2403248113c9afee75f053401bd04365c3aa4e0d8698ebed44b3657d26c6cc9b157f91a28923977e756f6a6755f722ca89f41f3f7d4659b8e20996cbb84cf3f4775310f255648a5af94e8a
+B = 2d9c3ac886c2b29814fb18346d461bad4172551b116f865f79f36f0045efd75bc8137845ac949c05c68f42ac9c9108c84a41b7005e065fda1fe5871fd2f24407d438b761e58c38fd3c68249f383ced8801a64161b609a57090ea15171824a69a2df751236e44bab6e9e51f3db0c01e658d0c1a7750c88b4ef6c563575a197deabb77f362ea53bf3693e6987ede05ef1be11368554d57a773aa85fe983c05f0e691819d5b218f5f82f1e88c9d3a
+GCD = 20d987638d520f54d9913104ef61bdb757b963c876a33ca10a13cc1c6f52771c8b45c201821c23843496b9f0138b9142d28676ecba7781ad5d1bdc3c80590ba5884db2ae80de69bf0c8d40a47a08805cbc4fb6e010fd06
+
+A = f151babed8492ea7e232ccf8c29d87fe30244af1efb4e3c696fa942425bac19e9ce6cae5a9a6ad774d56ed57113d459b7b5bad715a8901b92868acc4bd5e062ed60e503f510bd41e095495b31d2cab9a43287b97165bed0f7d0f6e33e0a1f36cb0846f383d7bbb1f9cfdee7f2bc4588a8b938f4a75c973689deaea4c4a131c8d83fd168e54b46d9633fb619491ba4794cb6e550646097dae9fac47e8241b87238f0ba69151d50c92e75c4e55b6
+B = -e8c75dda971d38b171c1dc2d06ef786a768ce7398f48bbf29761d6d666e9bfcd101b2a75f5bc191866ea3959de2cb897ae099c9a85256d5f033fd9c577318c3149678c7efa84e667c96f03bc5e95bfbba97d039bb78a32cafa7da697171dd1c03c1a1a616d3e058ca3d408a4bdc33a577fc9fede6f2454bedbe96ca9201868784d7ca5de50283078aba9f583b7c8e2d16d7c013b71b385cc19291b1715a8ef094f743f380d67bba711cd76122a
+GCD = 28b4425a7e9ae40b5545c3bec259517689d7de9eb32ab30c4456c3a183b023c0d18d71d86a35186ce264a3818186ed4dd1f952e2dfa70c60d8fd7d54e0099e59d4ec70650764d45475192cf1df22a7de28314c9198546a
+
+A = 2b9953677d97ac64a66547a9f213f56fae7f823b3397a841f65c65362fda0b0949fd99b7e3eec69824a15c1fdbba93c34bdecdb35584ff1e72963ad0f0b34393f731a54c5bce64b800c1ce97aa6744d256632fd49e532f72ee415658f4ab4e8c0c0975077d7b0be468f7302232f3895576f3d2b3b6c59ad2c0720c3a874ea86e2058ca5447af9df8926fad08ad50bf87ea7e8e695780e0deb16471680d39c25e78a24daa17684c10724f0c4942b
+B = 2b6b2e9ef5e03265ef9cdb1a53ae1e8120480c9322d10541c7f340fbc93684a8d95385e1303c4f5a9b3945b29287d429c8e1a04ba97e745a94c8601062b35f797cd4acb496a592fae83a015c6304c5776b2af34bae3e89bc759a4e50849e50520b8c5d8036948a2f963627d5fd76a6a87f4d2bd22cebadacc2eac012c0eba091d309a0a7c6ecb1d055885a8185343fcc3ad1b38ae10628ab1d4873a2ed399730240fd903ecf813c888bc45ba3f3
+GCD = 21d3f3e89c28feae8b54b0d2d137d819ab388498ccc713efe91cb2fca6ba2e0a876e1796a1673ef65588e0bee1b169fee00396cecda8ba94a4b3e4d2972eb8bdac48255a0ce2359f84eec2424433a2df03b8c72da596b7
+
+A = -1838ff2d0f9345a61b45acb7016d2623c8c422165d1210b67085c076d0fa5aa5fb7a549c6f77be830d4bab730c60d721a4136db218c9148af88542a5883f5218e84e2743a20f83632f62e63bd7ea97b4da64138c2dfeb2f1e257255429b1a917bce75dbebc14c4db30edb98fa186adfab94445a43927728e963c4b53176671e269fe965c962d961f42a5196ebe3cf736a8cea5bc84454d658c79c07b1329b57561ef83e23388149bef2499a2d622
+B = 6ef76d82e4ccdac702e4ba64e6f6a80bc29b3e62123daf1c3e2bca81301fc20cf2f959b59c36487ae71f7c1e7186e40b09df54b7f5553b8fd857108144768973746032ea798581122ecad5fb8e1450bf41a6121e5451293166b5360171b15dfdbcf87e6edc6c69e852dcfccd48cf71a4e4562bd4e0317c018b038e940cd943b34735a12c7f5477087b1166a4a6f92fe5021726f296c5b449499ad6ab0e7b88bd14bb9935fea7316ac9dfbc322ee
+GCD = cf85846c99e5cfdc51d599e1b8c8816dc09d7ad6cfabe3aa8756afcd7169dd5cdc0b9d088f33a70891f7cd0d488379c0568c8536aad394c8ebbe91dea92d7fa79560b8628e095732adced45202d22024730bb223651f72
+
+A = -2102c4ded42c24beb3980b71c79cef56612f80382e1849048a09916238a7745e098726ee17b06835fa10fe3128a87d224dc92018ca048ecd611c03a594d5673a987e78c84a918f9d2b6f3eff39260eed33a19ec5d98a4398345d53206114dd97901bc1dce8c8ea3899cca0eb7f36883badf21d07593e8b167bc191d93883583c0fd47ebbc5665f5e423cdc5fb2252fe26ae1c06aa92481d1e49ef4c0c111b8924bf72706769e3f0bfa6d6a138fd0
+B = 3ff6ec2f168c0c153570784ba0386734d1e1ffa0c8032a3db7afa726db0e700f4e194a534cdbb9e0844759e6c85196195e61f47744e7daf88d8b96423614d761156bb2abe2e4f7b9c2d8614b89c66c8389bfa73c1c666b0b4c60a03e5ba47621f8f6d07f9a71614f7366a5fd28c620199dc939c93a15bda5fc6894bb4d0dbd46313aab82deaf307e5c4813d7d6b89d692e8236fad94219f688772eaea386b057b299835a0a55f88856d59a8f2bce
+GCD = 8b34f3b4d9e2470da5fa8439f7c118891c5756ebe430291596acee659746ce6c373db19335cb9637c53ab56439d6dd3804d13ea7145d6959f09a76b9f2958dcd1d97d8ecb39141d1119710a7c2a67dc76f3140c9cbec42
+
+A = ea4c5db4a2b1a44ebf308d4d0b4356a791c5c939908916dbad298dce2626997d04cacd64a27ebba484ca53d406fb295099631e18c75c0714b95c30c4752984bf99d6df6808c7f0e87c173416d1bbeea89e13bd7ac23fe030c53c6e1ff2c9c0a866c8e4455c83759fe3d46fbc5757764ec662dfff01c36af9b58b83ecc9014e1232099156f5404a07d4a04780ec77030a6bb10f62c74204401c7a1dc963a53fc41761b7f01d7a84be385bcafcc4b2
+B = f0d774c287edad48691b027e82f185ae4bcea11f0dcd4ec0012eb057ed521a096822a90691955362338b56745c0e12fd308728da6bdd0f173388165c8e84df5f38b8481bd72dae0e8edcce07f60fc44ab1dd29e7a415fc8b24e271d45e622f9532b79046e1a734d8deb5b5186b8a35bde666c1082125495829a24cc5568173e8c12ec41c76db77b2aaeeb15e7dfed1c38814da2f81da2a0b16ca02fb7ac0f039e841cdd9c675c980494b256ec282
+GCD = 119d1c9938d9c7767e0fa7b0e1b2b155f7210352d87a9b1deb34aa3baad7b186f0fd95d75294abf1466e57f475226b7024b5d84c55be21238e6e4082309c582ea2beb2c1430881b0e846bc426b40ef4b6d0883b6ee3812a
+
+A = -40524f5be9f7a38a393fe5223279f8a0d0a1722f791e387debda63c787bce1137353cfea792e7bae34e90b7416cea44ab86a912556e2b852475232358b48a97b0227a8f51c7a7e5b1f81e2c3fc21e370a69f9ecd1ac4e16eee76058fbebab27158127c311f0ea72b9286fa4ad635e077ab2bf883583618bb3627ff0636ff7dfa4c76b95f07d1e8b9e7e2928fa8bf20cb18b23056ed1a9bb08747604eb6ea76eaaff44d65a9df515a807480f3ca360
+B = 19774ba7d9e651fd425b06d2b6ba6c54b7cda9ca41b295aafc7288f793f242c0154003a931e7aaffd7d177f71ccc5b540c96947c7e4c7cf7d786f4f88f84f540b1e8ec8919b5d2b47b1f46ff00238c10761e16d69344975efb4083f11b7e502a64475714ace7424e41ccc0bb189f5f7a266cbf45d7fd22c0c37792e7cbda37fce0a38826722f186275e60b756ab47ccca5f12e5a0f6ebfc8df19c384277fd7ded28cc59b215866cfe0a4ef028f640
+GCD = 74223ec11152ca8052b60d4fe3b42ae095a49eb01724da91f413fea833f89c38b2b3977c701f411ebd8ef7a4318649ae33dcd2e3ea71209c43aad07971ca612730396bb4ca2da2c74e2bba758b5b066d8dd2b40aefca920
+
+A = 42bf75ebbb33feb9f5ce519643e3fdebd64a4a535f1b2d8b5d224900e62a4306a966899bc3063fd69fa6120bf2fe7257d554c574c74997f4266119b6bb0ccc36c03390399e5536800274d3f7560c32304b33c41ab17755ef47e5b542d4646004f765d4b0d0a4c4f29772ac7ab18656a5c7d7edd0e84071a731bd1f579c13d5108bbb0550caae1c16b8ea3a77efa3e0331b260d118332e261b50f16606403de300ac4cf76a240fea066426f706bbb0
+B = -135afee71965b61c57fba34721d9acecd571faf57e88cbcd571407e1ab9975790de9799761c831cbd3650fcf726115b668d458b6aacac75fadfd912f5b7c2387b111f1606548cc4a0d43c0d75ab3346a610d3ab519a4738d3a39a508ddb823796a93bcbcbd5efcfc7980d7d01faea4b7df352ee4e358c0de22b6e6f8bc00ceadcda808afd372587706086cb5aae3a077b14f234da0147f38a00e0be8d83f7a2e9b947aaa1afd5e02208d566d5a6746
+GCD = 4fddd64fd66bc318a62823ec16745e6db02305975304c18940798b0e2567a8d1494a0e4f7423627bfe82a63651caa1ce27de17aa3f17af5f7280095f5f0f038fee3714019debf1df830c81ada139554ec018a9ee375f126
+
+A = -149547bcff8d0e5a0b0b81f05cea76e3f12ba9aca40f76cab4bdf5250a10345a7b020b5cbe228e6963d01d760407bd6c78c356a9ec6f0e7fdf1ec0243a4a198d65e57c862ef9447ba3c04fa57269d2ddfc26a0c87988ca018d71fa578e8b18f02910505ca8bd746c57c9e856aca9a7344c5cb3be1a7290237e99029eb34c9d6040eefad467be247a16247d9a2dc5f4450ecc9368715a2eaa8b82a9a0d95e93aa7ca701cc7667b2505b9927f22aabc0
+B = -3849452a433e4e3e4a319e25de6ff59de7342fc50ac5e91b68da927459d8a16d0137372d8e6983bd98efa87f2d4f2f558e73c4d3ae176d5a2e72ad3c3a4bbff768b972861df72b98d7bbad953c643bd05eb323ba41d2b243c5d862128beac9de8e3adb0cfd6f51bc79b9ea44083804fba24d29cadaae4619fe90d60a2e7535b0109f54a4d7a12efeaa5e64c5f8de5b629af157b6d3f61f92c15463bcbba18685ba536a58d8a9262db111caf5575680
+GCD = dd09d01585a80a29076270c63275ec42a159290ab4a7b7158a0b358d701c1c746fd9efd7ecb326ee3a106c8c651806053174b6b6b49b0d70d1e316229ba10d534f847a5a530926236d0c383fe9bc3564ee5f31ed4267ac0
+
+A = -b71fe85ef0334a769cecda9f6a2455ee32a78f7d513537a6ebba602c6b7b76352ac825f46abc4ee8d48b56fff2b4c1db159b3eb2be5b475e3e16b55934980a54b43a790943f6e39b2e228cbbbcb5dd588d3e4c25487e7b211d65095dabd151712c806e5a999ea3b0a3b2e2e18e71d003f931603e1991428cd789a99b72970ed0753bcb3e370399452e70bd27378bb36b8cdcb7746127ec497fd87caef4ee861266720a7a7d3254f3340a4b134cec7
+B = -884c8654554413e76ceefa384ef7241b468163cfd8eb3ea0dfad5153e0e1c697ff0277eb3bea62cadcaf945f5700479c5dfdde6ea2311a31aa0cf0c08287465f2fd7847f09c4f64d949fbc222f9755839fa9a91f039679d65c0c8243bbb557bab3e71f8261375d85111dca66889671c7ad5ceca083dcbae4ef7a7049f20faf62cea268329d2f64e2439b258546f9bc4b56181577282d86c1a98774743f9814c97a752713a50aa7ba74d0c65c548949
+GCD = 1711f74d5f7e6822bcad7c634938c9b911e93e33f21aa65f19ccf7840d5db4cd106ac07963faa6b9c6498fc8b0d3fd4cc2f9886e39a0517c3bd973975b5e6a800621dad8ed7f3027d3bc8e2f05962f321809055655b7d30f
+
+A = 3a35d91e7cec417f0a499e734bd4a562b9daa5d7f13908b7aee8aef3a492fb56fd67e26cd271d6cb9d9f469f5cb3045e8136d8335aba5be60ab7bd46b89ae45b062bd719dbb17690bb475b439d0a7a54c47ccbd384ad7ebf9924240bcf54e57782009e109dda8f5fa9483f972302fb211ceead34d8a9c13177a38650e92b86b09bebd9ba8844fafd3339b940440197a612513584b20a659203df192b2395079d5d2390b723d5d067fa61a55ffe1c28b
+B = -464fbfdc84431f7491a66d3652bb3a091653b95804f46ac72d05b6be4f57c622a7a6981c7700a5a19a847059cbb50fc8a182718c77aac51196891bc2ad44b450b17f0b522a36509500a4c806a078b7a03a8974acb206e0805e0cb23986a50e83eb2985cbd07059f196e8dcb9713d9e2a68c86c52885cf8595fcc587fbcb7632ce87a6d13a5830c2b356c2c591f5ded0d457fb21b3944c8382448380a71ef73c7d2d168e8e3fb5ddbe76c370e78a8ed4
+GCD = 273176accbab6342fe9fd769d3b996909579dcb2c5c62d627cd860b0c0fa98ddbab3ac0d8537e8e5c54a780efb7cd9435d766712a063222e140b7d3b25df07cfb545d6d8f58ead02ddb971ff5802840fa4b5a3f00a82e71d
+
+A = 87d2f2f88cfdb6dac71ffd378427d8a8209759f46d967146e105b498ace7c83caa65d1d2083790b3e562350c05060b4a0cf5d69fdf958b4b0a85b0cb05ded56fe8feaa82ca645cf278defeea795d6c4dd927301c55e557648888062ae6e8c51164a746d22f0be5cd45272cd2b5656c7e599ad63498fcbc6b86058fdb7feb92eec91de782db3e458f6925a254aac1726f5ee71ac5b55d29828f1d7d855007d3974695bb74bfa7acdc58c7d8d83de968f
+B = -4bc2d2b73b080665d5c86169585e4081e40c4d5f3c93285de57efacec91f2d7339499f5dfb79f68522e53ea5c98217eb5a7372a016e3d3fd4f8d93b9c45c2dc659511e672e095b8b34d4d66de7a65253c9a21e37d0d58ccd54172d89a93a1a99144ca72d49b3397b407168c27d64eb14fc1eb3706776d8bd80d189e13dd6193e4ca13a266c8819e81e98dd6115637cfa453e29eca559c5257f61aa344ef0dbfc3c2512e3fc543183e2187e079ea6392
+GCD = 75d638e8238514ff5ab0f99d88854128a886fe6973ca09b7c3bc4a6870c126154364e2d5ea25c19619c229b0332cc716f3ad627f4e8fa30b1ab82381b6d976125760157a06859e9b9acb329c2da24a9c719f0581235971ab
+
+A = 3fc450270c1d4a8868aa7090a89e16396746e4e8888ff6742191995cf54f946c6ebd6adb791bdc3d3c6954ea6b8cf9306ff53f8e528ff0ba7ae894281f0f7e775984d11e7ad5997e0b001d1e1bcc80b21b4974b638eb0365845b67927124c490e76b06d99496e55186ef037708307e2b3978a2dccf79ff84e3abb5bed6184631561aace89e517c86155761505aae3b2fa3dd3f08234a85f3278fb02526c27f7103f9b006a358b96a2e1981b6eee3d89f
+B = -2050a940e86713d32b8272008edea1d8a05a3bce12d3de892e346f24cb5782a87574e355a7dba28911a64ffea1442ef0c61c3cb2920cb90903e639cb34fa53d61d8f37fb891ef6ab8e607cea1fb9767cb57e7c2dc0e2e9385d8ce24a00f9e4bdf6442fc4be67b777e12d3df5c0ddc1a3fa2d30c823f6ee436ea7024f1dbfc6d132d52a4c18755ef5b0633e7864889e55df518b7b70f3cc522007212dd239178c2026c645c6de6ed1d153f77d315bce50
+GCD = 201dc5d87c92ef902641b261f6fd863685b73e91c2d7dc593dec368611ae717143f14def1a711f6a3adbfba78735aa79f6e56248b0ecba12b7d3174c9b2864b5ccdfdacf2cbff15dadd02ef7e739a5755a90ce03f7c246777
+
+A = e92650d273635591bdab110806119455b998301adcd3ac90410556b721af81f46573e7c432290a82319e76beaca8ff6a2e433e3bf22f2e0c84c97ba185fb5ee35af5a9569dcf8eb6053ab669404425fb8fd1cd3315bc282984e4ca86b4d1caee3e54e290d6e48968db98d157a1f16fe5d3d1f50712d2312890074d40607be414b8d3147819658d81e6fb61256126b31c9f2b99c2aef9198cc0c9530134601bfc65bf931ce094f87065ff2616f15ac588
+B = 9314a7f4de474d635413aa25d098ba32b6274c7aac0177f55aa932f1664cb744a9d61e665a76c2e73b801f7f7f4dbcbb4bb3779dde12fc6654e2efefe6691a0f521ee93f78415493271b7f8f149abdf5603e1464dac69ae0a0046e5c6b05a5b2ff8303f8eaf22c91bf76dd6047e07978f18c048384a1498de3acdf199f2ade4a42408dcc699688555c7a647a263997115c078a711c29ea6371105faabd34e4d81ee209228e127c4a0f5f7893060e1e54
+GCD = 10010eebf87281cade0a400a61e00b23dcd8486157eb9e48ec6bd919ad09434b2a1aaa1e603d95f692ed6d608b00cc9af8f7c731cf71946737b6c0905f2c071d347640cc1fdfe13d30e3f1bf58d82e107d9086fdbba9bd9fc
+
+A = 443d12cceb80bf41be0007e6e727c5468c3f4558d64442622d03748a00564c737e08f2c42c6f4c936beaab57387afc43ea9089c9b1eeb60b8b6843b153327f5a5c44b7fd73963a4ced84c3362d817e5a837c6b598d4116efd67b1dc94ffc462cd9baa03ce7a192f533dbbec6aef49cb77b18a82c87a163a8817dae9c028c5fa82fc84b82e1eb5774c813a5b5a81ec44e29a9ec7325c31c88517334320f5a254733eb1fde23493fb2cee1bd65840362049
+B = 36806b1a0cf2c54868c3cb1670d8504a575db538de8ff7dabf673d38ec7e04075a7796c9d44589933cf14ebfe95e8a47cb905abcca0bdede63f7d975d4395735cf5404128ab2a0a47addab6fe604c6f069fa5dbfe92c287dbf9d32995f4f1bf39fe67ef257697e895db6b0e453d544df680b953271003b2314a46459d17b123126a3fd543811affc9cf5e37f923a542ce5f3609f497506332963a93e87d5e2f9f3232fd1a70e608e604caf6a164788ba7
+GCD = 6950f453860b69135d070cad279a26abc9b3649230a809309521049b8c1a4c83f7d73140bb1dd6c6a11979e75e6943e716638fb7012647a6dbeffe10eb92bd8b5422626f02fa263a03c8cbf8c5a518461fbccfd207ae1dddd
+
+A = 108663ef079d5e2dda023320bfa0b1c1b336fbdb8d7ed18734f1ef91e255e379c23d16a2338ec8ec9b02a7099ae02fb463776e5eccf3108438b411f17c9af03cfea660a0d6d4e283496c1aef05c1aafab63b5039e491b729abe91d266f72b7cdb64bcef355ee3435735e7740aeb55dd939445d7bf783415dd55fea3ca26f159364ec7a0ffae87b5b4edf8d14ba02eeb4aa80482aef5491f84c8435a4285df8b76fe85aa2dc4249a5353c370df2befade54
+B = -14e2d1a6e133cca1270cbbb5ffacdf95695c8a36666b58950e20363065e93555061fb78356d0207a8be2c6847e464e577f13fc0ba288badfc26b185663d4cf35d609df7e08daec122793226bad3c125ab8e14bc3cc4b887e4a7a681ed81d7b3d0b715a1df04fed2446dcdde5375c318351be5a58b3e9da8db8f037743dff1e7fa39ecc03586c166393abe79090db849b5f9b33f1bcc88c4a57d9960e8b0482da75942e1bbfb3985ca00b3371194e3edde
+GCD = 1cd9fc043b5a4ca167fc896b5014f8cdbc9f7d5a693b8771dc5d3a254d0bd6fc571d01aac50a4ded840b184fbe95a3ca0836e6243aabe51b7e3d5b8dbc62004c6cb1bdd4a5a3a310bbdf4f90d3d9f2ab5f9a3546abae3e5d9a
+
+A = 270ceadbc88535bf0c75c911f2e2ccbc0cf028a9d0b721ecda79f7bb12c0e244a43868015d42cc1c5b45406694b49b54fe44b787d6f26fab0a6ca34d8f96c826a6d69bd01ae169fead3447febd39667ad0e3d3eb47e90944234160509d47a728c480594b54a4be1243436497812aa61aad134aae775927c4cb057965fb640cf71eb613f66954b41f1873cd4a5f83b9ae624ff842c9aa336a260cca41853b8e1dd7f4e1ea9ab441cd1779b496054078e5e9
+B = 299105762db3be09870c3a81c8da37aad1c72e5a756cb9c1f1872e5a991346a621092d622c501b387949425c26748c6cb6657ede3be6e8cd6c093a4b9a0233f49ffb7265a0cd18393f724c88944f913df01a1c16ce6cb25808ff5018c25d1cfa38edadfab9c4925988e5e02182e388bceccad20cc5da73a8ae479618cdb77b80ab069be5d9787ff5941e34892ad404758af0b7c26ac4fa17879e06e73396f0efed08f82c72c584c946d41d860edbefe7ec
+GCD = 8194356c56b9db7fae60c64be7249d44fa7f00259c3be6b6fdc5b697bca142efcc29fbd43375f66484dac1935214f39fac0b98eb37620672157e5c361ab70579a410bb79517058b9095101831a95d1383f7ad972d31ac2823
+
+A = 789c11be89f706751e9ae0a2d3e307be6b81023eb82e26088e83620016f58b876a57b5de15372aa555bd28c6a6019c84c67093fa502eb4ab58394b1a88083382ad92578496aee31f7ddc96ec14b64dcf10fc3c742bd71b5b1c7a932c18f6b9eb2be0b6137c31c3973a4373749e82991b682e4f646689597e58ae5d177f408eda0a6f28c75d7442ef48861ddaabeea6462db634af2d4970445175c27faa7e8fb807027d7fca72d629925aa852e75b959f10
+B = -1ca5f220917cd86ac4f852a99fcf7ef01114446681024c76f1f8d4d3cb3f596598807f1cd04f52bcbc33047137fdb042c58ac713c234d2d661bd7ceeb4bfedf14b3b73eae8e92b781f41fcad46df9ece8f294072f9e586e6d1fb4e13e76f79f31a67f559200705677c41720495fa9e9178d990c25913b19eb7ae2c3337f46510538f2385f6592288b498be95cf115cf863f991aa6e05ce8efce9260bcded59b4d1ec3dc18afd351e60bb415a2c37f60365c
+GCD = 1d24f0716fc0c0a903db6e4255a9029dd2e5a547457db22a846775cbfb3cf662fc589e8219039b24f693de57be12f38fc68b09dde3c1e8f50288738c625b9b2a6764a862dcc53a81df68a5b5005456f81d4d725716d1d8da5c
+
+A = 230121b69016dc721d7c022f1829ba2010e82723bfbdcd2b78e0ed4b4738b30e4c4efef3dcc89f4b41bebff65bca9e5258cd0eb3db39b17ee329a8f1a2d08cbf6049307e3d585815b7bc0294631974e920d3d383dedc81c3b5221bcc895187f9316eb789b1c4921806289e7371a4b2e20eafc00ea875a87025c40d47ba5826bc2cd382c477a72e6404aff1297dad01bb40df7791d1847d069e82ed353994d4322b9ec49d36644c68ff0d8031d2364046d45
+B = 39300819e3f4eb1820d6ef40bec89440cfc5b370e84cdf484ff4341da5580b64c4cc899abc254c188c495195a95438605fa3fdfd9ad86a9eb8705da86f2c2d3c5215a73c80327ca60fd7e277e86c5d2de85ef150209d1e3cfb465970fd354238e367bbfc3195dafe0f95cf3bcbf1da82b585a4836f9bd912f383d62757d8c02a7aafb0a0b0a84d27a2c0dc6d1b3f6756923c690688ea155ee35277178d2f8b0fd699f14866c93d91a084b0dd7ea08a489f6
+GCD = 237921555cc263469cf181ec0d5f1d24bb510b1b5d7f845bc604ad7bd4736e69658904a03ffdf46d84191a2dd1e064f6e2b3352a13c431df6dbc831c1082d69641ec709c28eb264763901c827a781821a686599e73ea0fe3bf
+
+A = 42d803ccebcca5bf684000da4d175ed7db1d9978546743658a9c06b0616164fd526d6358f9dc1bf95f84c7129d6ba3abc4cf2eebc09ae62af5b7da2abcb2c0844305ad5504664b80db990c6c8e705c4e36f1c0c3bd9dedd1b4491703b70aed602ea2c6f804da5f93d62fe7dc11ba8e0a949470251b5290155390ef7ed9ba19a122869849f8a57f7b488e7cc0927abc1a3a52b78a236558e379613e101c7373ef221afc7171dd7b9939750ba18281548c3a0
+B = 79452ab68a9d724b81c9064eccbdd3e565faf7130815e94ce9e182cf5a8d1e64321dd4f6bb69e05b3b46f08f5e1c262ab171dc3a2d35b25501bd38948ae2689fb4e847e24d4726e4115af4580a2273e38744b202adccf7c6c1f80f9185cf1ddf64a807ed84c95046bd4180801816b9f71f231a502efe5bb55e22b7fb6e76c2f4ac156c77120d8e4eb8b740aa05d2d29d91b193c3c828aa1398d014d3f707d9dd1eca3162a38ac480c70e29e230e4a5e6c68
+GCD = 431783dce1522a74b069a73dc23ae16f95b7dc0dfb7e97898731b75bad15269d0d06e0a9adabff33d786a1dbbbb2e0e75d6ab36d7a19c9ff70580100d6ec050fd611d5d7b35810ebb20c56dd61268e7fee128a7d7d82179fe8
+
+A = 4b3ef094190e5a04e9f36a79d85569010be600184b73bbecdc48ce4e30b72d5614e37961eedc406b21ddb903dbf61d224982759c92b101280ed4edc1d7d3828e791f29b0b6fe671b62a537aa129c349bf055c72f7ac44aabe989430e9119682d2179d515a7d03577f38a3ec57a0d7a0e173deed714ac6704bd6cfb75f462fb3bb0ea768ebe14d6e5a9c88b9c0eed03068d7238626bf2020249d22a360ba5bd46c071bcd40e01cf0439ada8c5a97e515dcfe0
+B = -4b5b86ce82f174b0ee6078dd1557625d3fa395105d6551bfe5fe025839c18962c77d4adcf482b1473e230594173124237db0c681b909d643b62c0a05b9afdcad02f6c69d6865b1c2c81d91f9da5dbabf5115e6a9e635c458706f675fc64b68cb041a01a5483cdea6f9f2fc71c939fec3624343eb1b7e04f82547d78f794e46005c7d3b7532219a2aceac7af7cf37b517151a67f265a19c9605334c9edffc5e57e96d4288c9f1c8218e9b77a90632ca111510
+GCD = 1942596cc7b9c487d7d1a8ce2a6ea63be8cc90c8f6179e3e81ca18f379b4e4961dd6293944a68e854ea2c7a784c4d8246e125fa58d0a59b38b2e3a9906ab2a84f1ae22cf7a3cdf1518f045b8f18be2ead9097d1b4b3c4173110
+
+A = -17ee9dd43d74259e4d3d85c68af8f0912bc628babde4bb96b58d2c858cea30c0dd16f6b574899ebda4431001f33f5213d1d23808d9825d57f71c4b0d9a8225f026c22be1db25f3ab027dd1b9fe8b03725e3a5a7d20b09886b0c1929302152f45b53cf6537ded2792ff07cf90f691982e2d6e5ce576c8f09ec4b15743077f24ba1045fbbfc1ccbf55ed137f92422e5482cfa430b4e11716bb5e9d480958f5e4c8c545b9a09395e274c117e3df92a82fcca7c4
+B = 5b3ab6bfe599072fd842401bd36aa227adb8f4bd64e6906e6bf129a1e07f58ba9edbaf1d7a889d06af1dab384d42aa34b3691bfbdb557b7a0debdecbd82718469791adb3af9cf3d96ca2fc6f1d2fc65ff9cc6fe9e4f09d169cc837e9bd1774fd7433c25dc4ec39c28aff1803c02e792ed738cc93a020efcf3b70a4c33ba37e7b4b2306c85883b4870b6e4ec64734cdfc34852b8d0b50037ede450f27ca154a3489e963ebe67daa4454ae6efdd0d3f5523725
+GCD = 128709cf00768373f4766271fc9c669fac66410f08574465e637ee4572e72c80da853158a5091a90bac4ded1bf4dc41fc39c3c51e5ef347e5496193b21011dcbf4a4cb33e7270ec94d04fff621a4a2022ff6e40de359055417f
+
+A = -4bdf6822716e69840ef4a27a95a760ca401ea9530fa70c350ef200b8e64a318248837e171a71ae7b1044924dc436c9490a3ccbed98c0a3d3fe7516e3f86835803a3f89eaeb5949259dc48b0ec2438135f298458d607d390d0c43ed3ea417cdd1cbef781b152d95dee576b5d061dc9dc4447c851c44a1aef290e471fd36e037b53aa8b4857e2d191a46bc0ce67301248803cc74541a21c6eb616aa9cd7e680cf516d0a5d641ef647bca10e20ed447af4f76eec
+B = 15b240b2e7aeb08fc4273e44207d0454f6a504b1fbb4339d2154a41567ff79762a35eb496edf22447eb6517ba14c76d183329199a800709fdafd3d1ce20a9b434632d8627a9064b18dee1252f333403068bccdb5ddc4301beebd8356ec244930e2bbaae9a1235ab66ffce69951b8e167bf1e4509babfea053a4bf635225d8c9de8a4c931d7053a1c9f14604a706037ff55ded8a41dbc034f2208891c1e8047b586f974755c2bce54a2f6298913f922c5581d2
+GCD = c71117ab88689f2e3a601e3be314a4429b25aa1457e7f64f59775ad83ebfbea271acf4f10907c32c9f04851088f007bd880c0e7ac543b06097dc5a7f16fb052a1071372c0888c36780ad90106c3ad71a663f7e4c42353cf4e7a
+
+A = 7441bfeb978cbd3807918e58634089c0f4c555529550fdc9fb9d3717dfd23e699d69c87d88361ce747d3f016cbdc32729fe03be0435f5ecf9e1b8bda1eb56ee29ac71006e60c25fb6fa9c15a97ebacf66574154b7cbc3f21f2cfd8801e760845bdfe6fdfb34061b4d0bf9b727fe16466afd65e289833290c1e07ff9e41489757d2bf1e6bcd50133d2398b6bda0c173cc998f63cc402cd4fc7b2ed04c441f615033123f357a7e8adebc6ea6cfe8138ca8ac2fc
+B = -825023e14739b4a16e28247e7df06d1565ff708fc924581e09297616e208e4995b880b60070714075c69418b2f1c957d94511eb21c6eb21f0368d24e9435daa06b0063491c99e521abd2c9bd71a84c773eda51c29a846b4c64ee40b7a4ded2f113c092e449a6ce13b69b96de8c9d5342aee01591301bed0720b894d138cbb713d768b11c9fb7371ba44c8aa4aef1c74802fef823a03d2fb70e24edabf3d183915086a5b13251aefe3f42b69d2ac1d4e779050
+GCD = 433ad3b37fc80411a8a0d5035148f5effb469ff5aca7dfeba449a11de5078e2a2f3cb70e03833c6b92dc34070a125426f0dbcbfe5f1c1db0856b9b9c1638bf89533009ee1c23a187ea4be5a4be0c716ad1370a6e27a5ed6a58c
+
+A = 291b0868208aade231362daa7fff8f803b1908d53dcf65e03b6ec332ad37243c51c9407abd507e8375a8c02b43a17c13459cfa07121480167420701c0b9da651c22fbb952b2456c7cd56b1ded9ff03ed9b306ea979436fea2b30a04bdc416ba6aa5f96ddfe249abff75b68c08b9b0d17eeea2ba6305b4ec9d3a0614498b553736f8a91ebd7b780c7b61596a062b7dbaa432a78b243b08e0a169083638820a4bdc2ac65f2e4b51e370e98f919ea4da43e528a11
+B = 26ca38c174827630934094816bf366b1a4f8ca2d984a5bfce342e44a4da4f6006f720c613408f89437fe548432f1e2eb4301855a8cca90a05f9a34e96e141c3f2cad75bc3bc7a269eb6b78d70bb8feb4e0a5abe968d996caba943201918b4329bf5adf5dfec5d9a6a289f316aae033e0695ea285701d494cf74bb6dcb6f7bdc5e0d36b960d74ad29eb7f150879317449150ac70102a7d00e4c4df665a5997ef401ad3a86b881212cb345a5dbf72e7eb0c9bc1b
+GCD = 23b564b1c7e4f6bbbae9ee90e35eaf70392601d26b28953377c0be2e6e4510f6d7b3fe3b1ceb0b596d297b539e99d300e07cf392162f186db73621a67b9a72c0520af9b5fc0a6b9f2058320a7e0c59c2597db64332f6d908afcb
+
+A = -af427e803e6a7f089efb4c6157d4e01eda487c3dd7041c63ed785afe3eff2332c74b6a2ecec6955594a290c2cbc3c602fbcb9c752c617152a10fe6b3b0bbac214662a09ec1115a59323c930511b28e426cee2d771bbf0045848e3bf90aa0bcbeee89da74144e900b9c7f38b394b1dcdb9a09ef8e0c5d4fa37e8c987c4319cd7263f8adeda55b732a92bccdee22ef4d2102dbd87560a8cdfb1dcf3a345e6de8a0b9e1931d316905a75f1b8fbd051305ab3bab38
+B = 10b1c679c818623420ed624cb3eb573612aa74cb01fe054bcb1a0e466cf937f2c4c4a2d494db69876135b8f7105cc833e2b27772bbe69efefaeeaf1f3ee522b79ab63f5df172534462559e4fad8b9fadd913386ca27e722be8e983368692017039b6f7f2ec0d8f4a0fc51ce9afc3a9f9f04a73d94e0841b59dd4e03656e9fb46e7c2feb2f236eb71a6e562cf87321795beec20611b201496b25738be4de4f77e89c8cfd77856cd6d8cff3fef8da31161e24ad6c
+GCD = 36813e6571e395a11bed781f203a75fed1dc3a7c2b0657f829c5cb9e46de166538118eb82fb9e56f4d711696a56cfb026be434c508f648bd5ee1d2a111f8fe59d498d32791de1824c434b91771c43805c665b6f0ee0bcfac16dc
+
+A = -485f6af70f3667e7411f3878331cf63faf9193eb22292a7ebba3375c2f01e4e9b6120de8d177fe7c0af6061337ee65c74ea47610d4708ec03bdec80b70053d72145383d85a4f1392f4f558e22813659fd8a9f76fc782f53f05f189457dd1ff3f447d2d34606bf4eb7435dc5beb5bebea05d3cc0d8d2ac26c6d0d8793d39286c45570b4a0079d0401cceb618ad4caa4be6044a9aaa17ae578bc9e825a5edcb96b40d998115bad40176d26822f3e4e37910b882ba
+B = 42c00200737ed42570aa079a41fe4dbf7d27bf6104cc77672a2d8e67a61a09a0a1a9ae67fc08e0168667e398e07cf7cabefe98e682d5e402ca1848ff1b04181900eafab18b1765e90fe32881fc44a4f078c4fe3333ac3bf6ee2b2f8df3716e15866d5e97c1a1bb265bce515f3452f1929c7baaae08edad473dba976ad7c5ebb4997f9529fc9d055a4c6dea15a968486735ace7690e73a6be694f3bf8e0a877295205c8bfa6563c2a7a149381f1a715bd075613a
+GCD = 2de678c56e39cf64c671cc7921df5a1f5eba53c19ca35eb568186429151d32e8cf51c8ce6ad4bde43641297983e8c3e6cf378cfbf50479370b3446d708606bf0063cf3050adb4fb519ba89e004a0d823b7ba41cea89a4af9b68e
+
+A = -1637f1fbaa7e162db33291b8f8304b2b280597467f208834bb1713af9f005c994c681cafc28697367ce01269af117fa3e2f42aae605bbb261e29892b44da54dc3ec24eeba23d8c58bd934ca6889f3ac42b8e6eb72fc440f5146226eded26b806c07d9f292b7d91c49cacbb1cd2e7a56a5d596c49dc7cf14ea1db77a4e13542a648820227e41a21167d9ab72b5469b3d789c6c798979557119c897ec58436c5d0f52e7d94bc9d77c9fa1f9a8e73a5c962f77914ab
+B = 13d4d0857fd2ee6496f1d72f7f523cfa95b8f43947dbee8fc380f05361046a52fc9f52afc31d2ae767ddceea47848d231ad4a7e424ef06416e514466e91a08c15054d1bee22953e56fcd68e19054b749a1391c82d2ca58b5745eccf69ae9d723996572ebbef091759f21374281bacc4cbcde3ce87b7d713a76a22b14f6085e91ff276d564778988de9dea6df08408e06c5f84c3db9ba139c8db7f77b97100cc418b8e772ee0d8ad5206a4c17cbcf1acb9f1d412a
+GCD = 5f055073079ee62b77ac3204176a691c5143cbca5851c50e554bfc0684af47642ad1a80e30d51337d086e434ea1606f1fa244d4677d9ab6b6df8f6acd63e81c4ef1aa030e6eaab176c848b65dfaf781c18f44cd070ceadb06985
+
+A = 223b096e8c446a32712c5668fbfc84de47617192d9ef4a3ba8c975dfdd128f356d654c8a98d9611a1198fb491971b52ce883343d5aec36b9be0ba7f668e3636996d3b2dbd679c144436f4fff41a8637f007e97f02e23002430c818e08f30d4f3b48f3d61212500229574e6d16087abc73675de0410d5b6b5845245916dff90abccaf564b57fee254d59c7556dd14149bf9e92f270a133be98e136d79962510bffcb78de42027e78b80f864963a70ba026eb4db04
+B = 1bd4a89040c7ab24b1ecdc71e870dc83af5a3612177e7dde91aa094f901e7a3691b831a54cc3a60b02595f77e590b25640bedd4f75990573673294fc53be6819f81574cb561cd8bc1467467881cc2d8d7323bfda55dd1e8236ec94064f6c3cb42ffa85ed2902b8a91f5a14d19cc1cf698f24d54c867c5fea84cf5329c991675a12dc2497ed66612701dba0a8e966e5215b745aa87d0bc52c5f6065978e02e230ecdba80933a356921e915c68180a71e2bb497a2c
+GCD = b3304b852de36c9961aea9f17398a985554abb0faefaf378ffc57bb9c598d664612120ca5f3a9250134b53df8f18c474cb56dcfc02b87c34d4ea4f3d46e4a7a339bf32b951d7902f072c7b82339cff5cfdf56fb6ab72280ea954
+
+A = -164f46663dcda80b362f4f9a88be0d3e579c0e11f3844ff8ab203164a73a2fd1bb3d609af800fc0d1f2e01cbc7463734f4229c9ef86130729f3d4ea2d787eb8d98d0ff42797622bc62762bed5ebf17226a4b45d534ef2c61564d2f33a548c302a7b6eb5cd4a3269b3667c0f33306bc6267b93600ad81198af2ab74fe0046683471934b50e0f49798417cca9557c68d1deffd3a3c0b7a4119376c3ad18f06c6ddc8c18f0dadfc6cc0b6f128ae2882e80c2479f8dc2
+B = -104d1b5f238e0e7a026ca7676a043f89377ba53988c078f8e5c04da805666c56932970a4df9939f3143e173f7548f1aec969b125e454e312b857055d559cca4320b470ac0c108ec119993c056adea9e963df92ce54b8239ce47e7de1af6e84a57f7aa9b392722495ae88b8f17a927f2d76a087bf033a97c01356d2215a75f7408e4354f1e00f2f1cb9e5f8f3df5dcb2c177fbdf041efdfc78f761f7ed1ff8e607456a37ba26266cf6f1e58208c9e53a64b5434b7
+GCD = 1a2d589712aee76b21e7da910213242aa14bd521e76cf949234fb137c5e8b679a27aba445186d4577bafb651af3af61ae5762f12c0555ab85aa3cde74d327d45fa25814678d0efb2ebaa738ef7e06a4a021686d3fd7707ee25e49
+
+A = -48edec672e8de18da5525487ae3cc19e858f0580b7627610b150bf7f15f57f734925f9410fec3289dce26069636c0dbd21fea7b05b9f390f502d1e1ded20ef8b5e944cab1dde7e703a00b2af9619b6f41647af823340b1ba3762e3201714c6cabb84a3ce1d09e46fe25a5248e193081de659ee987f0756d59b4102f9b4e24a49ed49d77500e16e731762592140fcfd65cf806d4bfff2e414026af3f74dd8b704f9a9395f713f0ec222f2bf915af1e12bc8fdfd8c0
+B = -a57f98ff0d055bf229e0fa98be06ffc4564166c3c2feffdb0c38206feb986abdeee954d9f93bdfa1c3f325549a4744a9c6f8a4449095f6c54e966e0969cc547e4a55b1664e47647d966acf05ee5561f6b6c44d99026d4ddad7a32bfa0017c4c739bf315e8b25c4a85c737b3417b0fd20d1afa824b1c6e21c67ba38c468d41e438b7a212253b07c7ca548375645e4a47132929b290fb696fb3f2398100dc661cb87cce0238d069525c2815e889fb1a78060f6e938
+GCD = 77dafc8e2b5f342ec0c74d5fadfab795006d559e981c8618b1549fc4f83b97b4cc4e1c5eaabae3a32aef02cb1449b1a36b446bb94b5f9e493dce63f18e089ffa45e3cb120605813725bffcf3d681848e75203cede1ca403573b68
+
+A = 23201ccb157cad7123d94056bbab2b1e1f9f7231671a76e53b177b2d2445e6631f920cc89d626fdcf04d368d522f60edf4b4b64d3f2f93beaafd224c168c844101602bb218146179f458f3e5a0b51d4790c36e1d2094582e19560ac27dba2fa4c6e403731c2c66ecff2260740d226d72c5e1c2af9afa27934f9c678b4b1b91ca51e47d52c0e15af61be06f47a96bb7ed4c734a4d6abe2698b0ef7c2c2d04908f0a957c55e0d8e9a6b6dcf7364f82a23a6648122f0
+B = e4c925cbfb1c32f155ad954a9f87b72978a3870fa5934f67ba03cae8913de65e1f606f4adbf2351bf4deeec92bae14f4cd64a9a5fd904f55fdc528ae5fe29068a6315c36173d903d833b0c78e559325aaca56f93ab629d7b586dca0a83f28563d6b186c799744d01f286500a029ecfda64c49697bd1e894901028b19e4a457db866e344d8808319b920a24ba0f4491bdcc701969a07d46c07b96ba115b4671a571092c44978ccb72986c6cf3020272a01665bd958
+GCD = b846c8e8d8838395758e03eed244ddd6785f67d91626e1994e4eded2ff10e409460e921db681ed0e3c432180f7cb70f8f1a6cde520545bc4561e7ccbdc5f48ab5eaec5de2cec50e65653ffffb07355db32518a9274951ea23e038
+
+A = -19590fe7eb245dc3b0bbe9ad7c43c00674763c91dfc50b2968cef169e04eb4467ef7ec80f2aadd7fb9a3d6cff115519e63ce9e8ec44b484be0ed9b0fc213994cf15964ac17a13a4d1401e9227c76716e77bb92a0214e7bcd1b22b073acace6f5da7337d893839398e07b787ba0f3f08c6a323d52d65a388b512f0784a1610d4d89afa3ee53a0f09324b84fed1a8c7ca2287c21c5c2269aa24210e3c89530e07d137132dff37f489e600727c20cc46ede244014ddc6
+B = 5495d3d0633222e3ea4ab1e46d1717aa3baff445d1bd1f085399bf517b49fbd8a85c32ac2f91600828b150f0898b251e84448502e323ca47b919d2d485b80d7fe5d532a2c59135ac29d47af0f23cb6f547de30b9b4a7145cdc4eaf51bf2af3b24f824bdc5c22618e77892430b89d26a30b13767acab54bfae8747ee99270c7bf6b943bc58f3f1a95b19f461cee35761e86eafdd178da054680583f5ee56f3d3e25da54e6b6ac1bde14d1dd380f27c8fdea5280f43e
+GCD = c70bdf01319378614152136df1f79a97d0f2d1c57ab9cc2eb5bf837d07c33aa7ccd56d2968e0a554608a6cc4123c671915f3800c0b91ff1dcbef32cd3edeb3911612b86f27c7174f1f91687f80eff8287a9e22158c2f73727d442
+
+A = 937498bfc72a1c99b081a3ec5166117d0eb2d26725079ddf822cd4f6b1772774867dc786780f4fd979d94e76acc1d10a6d9dcc48a867d1b73710ad17387c23ba2d5bb345d2960557e96e8592feeaeb980cbc283f583d7b3a293f224bc6e9eb3d83dfd8151e73b17c4d0aa1e8f4602e99e0cd40c0aab341036e5cc32472a68c85e36fa691f36fb68188fdf3e1c8f6474c99d73853957566dc6aa78de628dd48849c0c42c2f5f95fe0b9697675af2b3d299e44080d0e
+B = -82322c9359f39ee3a2f5c8333da0ac53aae946b7321e01242df45fdc0e1dcc6d944853360033c18f338d6fc7e666d005bff1e54513d27cb236f5f5eff33645f79cf8f0086fccdab2584110c2c684cfcfb2d492c38f9a926ee9ac4abc4e10ec787641b3b568ab6b62589b5c8efd7b064b9e29822508148d80f9c3716a3f755aa478fb2e6ae80434f39b030c596d78fc9ee8dff299e64deee3a4ad908032cb00e45f12941d2e6fd24afd20ea5b5f855dc50c6d82f646
+GCD = 7252ba814fef8c3ae82ed59e513ee1097fe6c86f9777a63a61cabf6cd6c32b1a8784ccaf3facef13b902b36030c6ba4821b3636f91e7b6f98bcedd3c8e510db1eb819f225989237eca7ae9f596b38937e884faac2fb6ea8383a87a
+
+A = -70366415fc855f8bb2dd8e4d137473b00eec4890a2d29871c92cacc313bfd8141f3695136502972346504bd198a2369ce4ab7339714feafe9f34ce4a2bacfbad8f3e2a90f1da39f91426bdafe98d93c64a2bd6c72b10d8e906c01eed19c91ccf68c01572e89ac7641b13a3a6453006ba35738d6edc07f178a48b83756708d803313fd54669c56a8b21c03439d7dbdebafb0aa69ab9a66222da58709e0fdf7fcdaf6b79a0399f9ce14b4bf2e1bdba9e8444265c38f30
+B = 2afc05994744d2fc2cf2e764db161a81b68a437b4f80d89b10a7b907e196b945d1daf75f7f346b3e3b9caf38b2de24059316ecb7de7a1191f47677427985bcab0b3c87e5ac7ef5809e720ab77e8c43e1e9ba8dacf4e7b1fa201f90fe75c95b9af49e1d07f1424901c294ed916c65220eb66f98a05749102ec4bd8592dce4be683c52de182d16bf213dbdcc6d0e95cee4a5e08578f50c7b14f324168cc5ff6edf0550c7ec46c4dd27df9aa805042ffd9d6a835d7ec60
+GCD = 39f8ac185898b8127149d632ceba9f6af8be9366a5b77b9c8d8ccfe2c2223270cb909a5163b2ee95fde6d58254fdb53a74c42f55d7087f2de86f8b57ff9fc6287a8563a607bd23074b878dfda0698bc9c54c41a732fcae50b7fe10
+
+A = 170cc2748ef29a0f23ce419f8fc7ac4e49dfbfb381ef719aa42147afbc74e8144d3f863d283b05ca104cc9feb87f47510902fc76ae9ce3765f5e6a5e413a71e36c46e00c604add4c13bdaac334082a5dbaece946db38d91a2c30ea7914ef81a4efda7d1a6c9490f60dceab781485b9403848267589b597ad5989ade971ede7907777f45940e10bb998238cbd873bc4694003179a0bf3d5df7e96e80fd9f1452b90e7da9651259175b5c2c588965d9f1da81924d1ed75
+B = -13106192936017990e8daf776f1ac03afd40760a2ed7a89db5e3fb09b4f0ec82ab84048a9fc4f113128b65cc9807fd5236f6d7e7370ef56b130bb3062fb299a548fa033a33176c09ed719cbc37375fd794968bb8bbcc60950e94795edee12a7ae0a6a9bd6c4fffd20918273035cac233bf51a68704477fb92047cd81573e70822deb1be9761a4422283bb54a91b19f887024b26671d3576843953bd84c3d4dae143a817d416f10dd0f14e75f774d7dd9bc9fda0b4de0
+GCD = 6d64fe5e2fd4519883307e91830a321328af15443a104bd8e730a0f501cd59d126fde254a39faebb5ddd3552b91afef16ae77fd54bd1bc50030355e27baa25cc4c98561f85886aaa0e3ba37aeb268f4344aff7e0349d5f1f6c21e1
+
+A = -4f4aaea41694f3f60bcd11e5d64f17892f38938d8d893370063d5c8f0c83efafe0a1ffa5f83db792b780cdf896cb93afa72ce2aaeed05fbbb267835814f3635e3810676e820dabad59695b87228ff6823305c1f8da2b8110c96be17e3e0137221e48e96bdd9c3ab43a6d4f0ad4b653d7fce173a94286bd620609c5288adde887d6529b0125e613097954d62b5f907ade4412e4097862ee608800862145299e968195045790f3b68b39ec859db96f43c5f6b819ab84b4
+B = -3fe6ff3e85cb26400b5c3eab69e5b46a713166f58260f25cbe3c722156837764362e6e5e9d1b36083dc0d562a6573acf1a2803333b9e20d63114a9a99b54b88a2c5c5a2feb54f83f12b1a8095635b33b08a92b017855211cb1c157e2cffa18ab49d1128acc7a39fd2c2f7610e13167e0b14cd97092cbdc736b52eef7588920ccd05493097b58ee4b473bd66b5e1240f986e8db618e5df6b03397f573f2065e672d8e4dbed3041c792649c95799a1ddeff3a6222b8084
+GCD = 8e786ad5bca1c06f8b0a93ff734885f5f5d7b412ff0a28272a5cac1c3b9fdd662a6e549b1fae00cc58bbbecbb4cd892fd2c44d43b84413ea8da0e9d1356111a06a92c7e28d9042d54d80965392ccd7e9bfcb2db7e1acd1be92d6994
+
+A = -ca8aef521f3b3d7ae9a192d93932ea00da99d85b5a122372d9c647297d19a7dcbe13568fdfdcbff78eba33e598201d427d1bcec32927dbdbad30005c3f3ed8177164cda68040fad8d3423f6d912daeb61773b0e0d585f682ffe7e63db225e5e621175d1ca392ef5029c2651d5fe8f1a519bda584f687bbe9107947de6523a4e85a96cdbe491f9985d09a27fece2be80b8ec84c4422a51162603775741b0f18cd44bea9a753747be2133bd78efb044ba283c645c6cfef
+B = -82e9e7404926b3813164f342380909b4bb7e7b98561cf27cc1dc26c1aaa9e9b5c7196b6ee0f972ac6182a3c871291a20aba75e91842f69b5a911b824508d27931402fb48124c9fa8d81067617a9c4d9127fd79db1e85b3f6f7b2f69f14145c191639467cc9536ea429c036f6308c8771a849f689ece18ae980f707e7ad672d38122e5d83e4e91ef2809a20e2ca035398d7451f81957c1db1d669c93433f98cee1cde4b8b40d9ee4aee25baa4b846de01e52f5e1a90ff
+GCD = 1ba5a5000518d4fc3705994b6517798bbe36c7f3c51b9ef4be10a0ed68a2cc5e035aa3a635198bbc9fe70c5e4cfb420191e3ae7a7de5793a54bbf43fa2428285ba95ee3d5d83474e26f001db1edeb43da7d124e7593e23d964d134b
+
+A = -24a688f8e8bf2e06653cf3c8b384393991d6d3804a3d68b3214cb81df0bb043e364f62d448711a1768699f3095f80636ef1a41a84cfbeb3d7cbec93d9d3bdc87bde29efe4003c8a1c142696ded7ba2949c630eea60dd8225d51ce99ee2215aa349c2180c92a730bf97a47cd071c40ec0de927062942073f3369d5f9c7cc93b172a2511229db783c4c1cc06c172d5d18174aff253a2db9c6250bb74b7fd2785d47957e52c4e428b4ae25c0e88e30854cc5cf9a17540a2a
+B = 33abdc189d00b2b0946a3f7a7cbf2983b5da0f71945ef55ad2e3d00e0a71609ef045a0ac7eee909cfcd688428947f7b08f80710c7c2928945ce4e353eb373d6606012bb32f4589d01e3c0546f45d05ff443368d319cb54b0279a82d1992f45bf2099c4947af1887ec495de9b34c6cdd818622be12e2915187886105f01af9df2f11e962aca9ac78745154054b263c549e7a47bdf052eccfdb228b33ab15d437128376718a220b98e5acb3b9b4ae4a4a9eae8d58db8652
+GCD = 257978a8360352d5e1723aa69977d8f0cd4f51717f0d1e510a45ea163d720ca79680b2dbd941c849f4941371e0368bfafd95b4856ba5132ea621ac46896d6bfc80f9b36584bdb79c15dc7c4b00ef1222b876ff3f64571ee076a8622
+
+A = -5dd39f7bbc0a11778f94ca4e9981fd2afa92dddeab4ad592dc01a72949f6d7f5c2e871a6bbe775d0e2be0c0d11b02c09a228243e62b8f1ffea3fd822761ec5ab047ef94a0d662d2947eda22b1d5053251e34745ca66169b9570345a83373502a3c9dde7360b6d8850bb4d7a9923cb9b227c703f9db23fee96104486c29376f0d6a2b17f3c616f078aff1529c0d18eb3919b5808be87d805ba8f78f9a4115adea3d6b3d84a410fe0824cebd225731cb5f628580bcc30c5
+B = -62baabaa5c6a275cc602f2f6c3506cba4dfcb5df0446843a33a4cbb27c8f9727d1ab82206a96f1dd7bd21faded6a4d382402e237f4a598cb7027e72877c6f851725231b61a234433077069bdc15af7f6ce29a0f34ccef2b020e482c88fd9660798a28519b58434b2f184f1fe42ccdbd2b73d824cce1cbd42fb02f0e69fc6da1822ceb4de2adf2f1cf3b00e8db6f1f8c3186b92ab51e97a28de072688cc04993a2571e90ff47d9fe0bfe5795d38a4fcb84a6379f2d06fd
+GCD = 535795a02fed391ba9dce6c4d2f0943cfeb85ebf08fee668e47a9624ff6560d48179cce2aa68d9b0e7b2d5fe9813f0595c30cde08ea7c7494e0020ccf4de8acc37ae65529db3a8d831aeeaf19d5fabf232b82110cf929f76ec4626d
+
+A = -5f0e8cd5b1c351af4bf4d699641a5e656b1b9fa91f223ab36862ffb575f3381997d51871473a4d4afecb6761559fe591c3a110086b5775b1dd70d30222eea3301c570bc0e131f691fb57da568654b76b221145b037a1f7f105f73a2ae76ccf4e20fc599e97130ced1db18812cd221fa8b49b0e85de79edf54ab64d2a95be4fcfb6d0336231cd6a147d8a0341004678552752ef3fdb69eb4b6faf38612e89491f8cab5a96eb61657f750d988969f04c5b0207cf7cd9f5d6
+B = -52764c018b2d65e7f755874029bf8bbbcc5e9264f77673fa4bfcaef8b723ffa066f698bc19d7ab721469a4365a74523cabc232dba1c46716f9b978e38dd137c25023b4b8f743a6ea895b20e0874145569066837fc30fc2ded5bcf0b80fe1bc830730dfbecd807335215ac84d03bf627733c0efb66c5bde2fdecaf2e77a669beb2ceeba07f5df07f53673b63b58355a58442709cf1fab5c5469d40dd8b11cac7ce51bb35075067e2d835c1e5cc4f78700938a8b6317aa8e
+GCD = 19e45f548d3a5ed6005bde50b3ba779f5293c1b7c1caacca6fe8416bd43713853850b931633e841220779b34f17c3189259e1918fcb387c0c5aab8b9a84d678f890536d9ba8996af54236df0716f628ba7484a27efb7373b61e452f2
+
+A = -135e3c4b8bae82fa117e62ac222a8d363342391f7b92b358028db2a868194841dbee81dc12c2ba38f3a6a2e8dd340262a90879fa9b2a8972f0c274365cc8e941545230b24147c17417ba122bc7b4ac1b340b088d476e026e969926a7c30e182d9c47bab846d83653e25d7b4a46c95d0cd31a95dde12396d8c47cc934ec46de4bdb460a8de4bbab4d8ab78528d66ec8a8027e6411b6de939f09d6c817fa8fb087f397b77d5b57080ad12dce0eedc7c86c5bf4058847f7bdc
+B = -e6ce41ae73b5e3131b077d557b8fa91ac0ace8d1ad8bd66140744963b87a4302d2a5f180a3c2a9bbeca169a36105ba0b33975161bc16694c8cafaabb2f43e8d615559cb2387fc4d95922043b08e3b574a4800510cb0410c1b09817800fdfb0ecabab9803a65988c1718adc0da73fe38f886a20b32a903333f837da8fb6ce30eb21e256b4f6e6277b3bfedf444ec4d61b4c90544a6f59f261983ee0c6714faba622e66b63c25283fabce8a112f36a56a6babed2171851a0
+GCD = 2cdb00e7344c6e33e2d88b25c6e8c40e079ef4d250d96036363d61d3576310f5a92b1435ce55c30c71dd61d33b15473566699e35e8e3fc0ba87eb95532d337508daf826855906f65226e07846d919c98be5434dcf1299b836bd462a4
+
+A = -14e1a1ce285b72a768e39e0765a8e32f4e554245649ed49679bf960426ddc3f9b119025747a520bde71fa55846e2ba2ba0aca2b4d2fa56a92c69b522140bbd7771e60aa70afd50d4da4b5d2bdfe0072f3b9d5e83d2ec57b481b8eec1795f57c90dafdccc4bcd69d7e1deb2cf2e3de2967b3f427e75920bb80c94aea7fe121a37efb17aed031dd5afc2b03c0dec3bfff2fc243e279e76fd80c4f8dcb485eea9865d544a79ca00c485be82a5ea960e602573cb50486af3e42
+B = -167df5b5e649e58cd58d2f77d682b8eadf7f46deced6ea6c94c974c00f145888d21f22157a60c0f3ad4f982b1398d42c34c4076c739da81136840d0227e0296eedae4053b223c87ed2707084fd779d4a7a7d698f1e4dccc2249597ff739d9e9f54303035a8fc955985a6e8968f80d76736797faba4405de22e68858e6ffc5c9749d0d269692e69b9a7a865443211fd9c43d832e2f0b85b2b4adc1f357ebb84bf0ddd2d0d75a064400e20e27e81762c50fbf3a4f4cac23c0
+GCD = 39c387b62b5e841cc195294fd31da851b01f2c7db1a34e30f55cad5b3f72a1837c5e7ec2472a6fcadbe9e10fbf604128f0a6a7af509d25043a9be3388d6f7fe5a125cab09e979833c5971d32cbe5ce962c1d875aadaa80000c3f1fc2
+
+A = -108645f4bdc841cac8c0cb5f9b774bdaa482f8be2c4b443752b4a3bae0407bac40a9e780efa03045d44a242e030c8181ef4562ef81168b9b0e34e2f2a5e6a554d75a79276d189ba880175171ffd00119d79f6c990d8690e253b9cdf877fa91daeee92abde1a6ec6074cd8ad95abab6621bcd321af402984a54a4cf2971cd8e17849be20c5df82fd281cc35684055cfeae9c6e33f97c9591c0ed34d0ce85e899e1faa19314f03031168eb9b33660ce623940a36ccad72a621
+B = 9819cb6792f67e55b30e219c52e59e3a3b91ef9d4e276266ff8643395d67a3da8dfcd4ac371995a582c9d406e04aa4bdd641eb88505376e8d713dca9ba097dc0d045702f8fe91045c735905bd28883526f8aa3fa29cd7aadbe82281a1f680f09a07d72ef3013bdb6aa32cf7fd1b95669a3a80e36042f06f9385e2286b1cea2ab6628747f659782caf098123c4efd6ec3488550d1b33d49284fac8fe229fbdf89baf9a95572cc10db103cfe39b806280d4790aa7f253553f
+GCD = 4f409a349256b7f7209d64cd1294fdeaf85f4cdf9740dfc77aad12fade6bf3025808f813ab5b8d3980c655323818c5a026e6cf401a7e69f5c4a697a9d8bab976a15af22e92e4261e760045330f735f11b16987ee9f1c7be0243f4e81
+
+A = 393d46ceb9421f76c9db7ddaf0d23000b112334ddb12871eb3054f0ffa32fd4b22af6d86581bcd13d3330cd1399772b287539c80f35f557b291c3d2621ca139e0e2c61d1b49c7d22b7894c007270d5f2a3bbaf50e96e4656711ba209ecd7eeb5003b616aaabd9ca31acc32bff72585c82956237fb225f0d25fc1acb8529a86154cafcd07962939a18746cc8c3a867f404e06594f0e2533ac64a8112d7532be3869c50709bcbb6b2d441c5ab6a714df7ad699a1929d9c4587
+B = -1dcb1a07028d32049cf35691ac7df45112eb0fa8620c8a2b92cce874286a209280dfeda74fddde07f107657f935b7efc7ddd6b65be374951e56378b5848e55f8d19877efec0de3632f15a09b20af385f44d0370318c6a1da18056dd5e0288202e2e895fcc6941f05ce7c12ad5c0914380e85085dd377b663a76dfa6f6d81ebd6e0d34ae08f453b98c406c9f21f66492b98bed5d0a6081867752f3116c27284b8053f96f37e497337429672accf730a38106fde6dc997f983
+GCD = b81edd7d0dc9561b52ecccc39d71b5bfcc9952817b13e924b82d44f1896c9f3e407b1f8349cb4bd7347a9d5dec605d4634d3328e99449ab5b92ffe2511c44d2a692be4f0b097f75d47bb74b4997c7f8c6d96409b0ce1c6014f0702d5
+
+A = -15444181c49b9196b94db495519ec7ca5aa14e9df79c25967a890a1c198ed7473b950585259896213aafb4debdfa6224735743afbdf7d1449f8a658b5890461227b0b87771ba5f3f0a265ffc9c9c6319b502b47b8df46f78de1b172094b2352521800e9da1f3132b3b47ae1330b349acd15cd33dea1104b8478c07136beacd3547bc71a53360e8a0f2b0a375a55f49d40aa285aeb0e8cf4dd7889afff0e7548248746ac2d4983870de13b843f3667120450cbebb6e388f56f
+B = -c98ab3680d4595e701a5264e0127337097f11a8acdf9dae43067090023e763fd780cb858efbe5c6047caa0aca4575968eb3244076a73bb730e36cbfba2ddd5d2ef51c43db9837097f8d91172cb91f2cef9e84a6b23049c0ec1ee6bdf44ad10880430a712ea2550f9dfafb3196c4791799a5bfc7ecbb886935ef975a01df8d1d174daf56357ccc1b43fec4b8507373530d5298b4995a88dcf4fac3b97f922fc35f285b66a0748054670819bea3db9dc718e658b5058634480
+GCD = 15dbbb82f5aaa55b78f548385c9d7d8916615dd78be7b1164723cd7c13fcdd8345e3d0685ab8e61388d30ed69495670b7dc90e972225d248ba794098d52530472360ed82ddda7fd8eb360dad049e551b0c90fe7811ae320c7d0b64b7f
+
+A = -316afda744e782716e6434eef2fc0d91994acc80914d3bc594a9aeb00bc29dd36b4be12e643b1f37dfbc16f7af519ce7ab729b7dd71f71d9489e35b9379edeff34f382356d66afdb23d5fbfe7749787ad282bea8f83f5a0d8fed03321d137e0516c0b8a7de6f4fed758828938b3e808fc32b219936a10c0bcf1ff29231bbbf48f18bbf097fd73d44d421c343bf78c86142b7a24b47c7a233c67d709f85fcfede53ed44d9468320a154c4d3e4639bc008af356842a030468a8
+B = -64e249d32f29db88af8600ec23792defbe572bb66ca4734ee7c446873b72c8233ced5e4dc7fa48d5deebc044944073abf6fb14c816ed0ff6e13893ce58a5b82b642b1e44b8896e70bdd59038b87e750207b42d5968886e1c46d4c20dc0be1f8a97210f78d7d1aa46937bee7315cffa249b27c2394a9ab6dcb06770407aaf22ea66a52e51ed44aca9d5c6088ed30e154ccf79ef64d7dd025c6bb4fc3f0f96edd1ff8071789c56dc8b1794f8899778025ff2dc2fb75394e2f7
+GCD = 216c4766f53d1afa59b1cfb6753dba52da29d2ce6e57e6f393685699a355df58c148d73edb9bfc3cbc51aefce6edb5eeaa2149057a59d52a434914cc1743508899bb35ba30b3dfb998cf233925668597cb6d808625ac27a109de605bf
+
+A = a067d8f392a5c8e3d7c5abcb29d3c3161488ca0d5ce4ee7f820cc1bf8a8831bb452a29ec61655c5a0ace54f87ef1cde7bbabadac69a674e1313e6c199fc4d15aa3d5932d037b7df80548f2d2e0db2b4bc7e5e3e47a40e064774bf40b454295dc7ecf80b4d3fb02e355ec3d9457d35266ed20e13137709fd04edf2ff55232bfb62ca9d33ff53b42c7aed320e46ac0b0cc96173034477c6ac4662373dbc9583866c8f1a0068b62f92c20368ac39bd3542766fdc101ed1643d8
+B = 12e65bfdf3b8bb3cf43a935edafda44db6ae054f24053d080d44d366452f1648e04c1813c0b230aa1d954756228ff7e9b0a8498de305b1fed1c800424f03fe9f9da417201756db9010142640ee059d2ee963f904b58691f308cc1dbf8eefdb2353508b329e0c535bc7e05450105d004f0906c6fd1c444aeb22fa9520b265526f72010b84db29a1fa26ef7b7497a1b3182324d8dfcb7086ba221dd166befbc66519ba6aaa5fc8a01faf5884ddaea23dc7360b71991a6232ed0e
+GCD = 4d0d17834c1be77caa433259a55d89849b4140bacb7274c704c272e039ced5579311bf499f7bcfcdf812a45a35d811eddb4623f7dcd3cdefbbd7d8ce4266be109dc73eb60a1c396708673fce78d22c5cf9baad087f82655920476daca
+
+A = -30ef6b0fd55e5bfbba9c45169f4404e07b8896f95764b9a89a6f2a2647aa58199af4d12e9d2d876519bf477ecd3402669aa321ae9a4ac3c8f71d82a74b98af162a18af0c820d78610208b27889793dbf77ef88bded6ed0c61b46214f44886826cdb5a9aeb1e121f6efc8f9b0caf22739c827fbc4b331b98a607296615084aa2177fa9d1f0d7d0ccc6ccb99c2cc7b31683bcc8ee216613b08fdf740c20755f9adfb3848e3a2f4ed855f88896409fe8c97e460a7f42b4b0a28b8
+B = 39dde6cc3d789a25800989f0792ee0e1803084f4328920330372e37e11d0f995057b3a260e410b6bef5ec8a23ab43af52cc3b529e95a2737bab99e50db60060e4cdde56e0713db678da5e3f1d9a93e3e624075a5b3e6adde0517962135d75c895db1a0766aed306853a181333ca393a1b0907b7554032fad51c42358bf781bc86abbcc47e6713baaf88689628030b64b6f7ebfcc359fd74483b3e091e1ea9bfef9bf95cd7c1d5536b29a3a413b94fca7fd7265d60f8e21772
+GCD = 80e0377ee214f93209ab886d6079e03f6c1c5341c81c640ba2ec846cad0644d3a2a70d783f56d5a64e4af899fec3ab4a18b1d48b878413a4ebc872cd9dfffd61423a2ee6cee5772a3bad154bc32ba37a3482013dc1958e6a2cc0bd01e
+
+A = dd0e72f5ff1b184ab3c0096f90ef037d7b80a47af8b6eb92b9148487fa774087dc320b820f2efda9efb145f67bfb26e7d4266c0d29cfc7e9ed3160b285b3d96699975a79ed2ae5af47d1e0efbd883b70a54a2a10754bbe581a881e0209efd5df3de7020812f9b49733d17d56a1f88b22911af5c8d9201ffaeb2790002594fade082008cdede850af0560c894de3138357b51bf444f865edfe12a37b156bc4ef689f3076110f0da119889d67b12d07978a89d46922d555623ba
+B = 19a5303d92007276abb716d376e08550cf4cc5c3ed574d9c10899d1c87384ad14ff56c05aff3deb7423c677261875acf0c2d6d26131e4a0e98d3712d1ef8a669485676398f985dcb2d6e815530d0eefabcdbb9f40b38557d1d8769613f1183af561e931116fb643df7c9e371cecd58d37c1cb3acd60018bac57e6ad48a248b54967d9a86a0305568bc3b5d671a53ee743985dd8f49e03eed24e656ee1f29c1538ab1eaf2925a373d6bf60c74a6a60a881eeea1814092b4d196
+GCD = 36ed85a23324d6917b6d3ef09e645f795917c54ff5d9a4bb70df1bfe9efe993e2fed853a7cab8dad3487996e42badd803e523bc59a5edf6a066a63c73d7b8333e17b94637ff6d2a0ea0771c118e26e4200a27c5410d4b5ab708fa997662
+
+A = -34e7020e63401aca126294e7a15bd3ee50d3a6fead10d18231f65f0ab184871a2cab9a95f3b44d11016852808400bb2d6a9302454efa11cfa28015e91824b00a1338d3faa8f32d04b9b774d77c3366db87e68b9d378ab8a7dfa43fc31fa9613fa35622964b1e58852cabce37b7eb6278aa853759216a10131b9bc1708cb176240b51342a7e63304881211401fbabc7fbcbf5fa92ee0c0564aff0385ca59ecd53b72207c25a465c1630798fc466cef584345d9a017129c8fa57b
+B = -e2abdc1ab0ec8ab52e82e4fdd544b9e00f29d6c0f6142719bc9a6eb2f092ec3026751a99e9ad9989a5099355d169599cad3c8d784db19ed0cdb406db0d8628d7263fef3e7b8fd823ea831206a567705d849d31243347512d795e80c7be707c4208e18747b4ac485a7e4b8313ede011dbf8f1857e2bad20fda6688a1c11ef89a06ce4b3c49c55c7bed1deea3bceb4ed646ad5ab3378c18e19fb7d1cecf20d0d3b37827bf322e5a0a88a9645e1178265560e767edd5d5e6eb0f9
+GCD = 3a222edc8f0e632898cb45b3ba1005b2d350d529b3ae5676f80f755fda5db61b846256155c4f05357df35153e844b9a465e4fcdf63362262ad1193965da4687b2faf37c2c7407decfddb017f578a417c81bc2a50c0108c288cc9697a8d
+
+A = -a752426c0f0ccfac667bc37a750d1d1aba3ca8aac71f78330bb3339d1273b8a1777538e413b8522496b103da4207da94a03c245ff91ba4507e70e52d0e90bdfd99f8992b0db209bd9d30760bed5d6f4aad0b7e845600cc81f61d59e8502f2c48f5f72320ad6402c60fe41d71bec8088cf977361751f6e47a38a079bba38caf05506d080c0d097a68d1c8575ad26e2122408e03d22518365cf9b1d7b4e9f16a8c6a5fc30cd0fb65d428d3f06e9b1ce10a30a8bf58d00d0fc048a
+B = -2de71a8a324bfb5dea5ad270b1e9ed80d15494c8d62e12f31a835eeac499999e81725b923c1e22981fcecde12e9d265e3defc112ff49ecc16737384e21bb7b83f0fd5f9e698c83d81da219d69134f194d686e69ebc516885e86b0bf8aa5c94cfade5f204d6dcfab611f14019e9af35a9c59305f3aa894fafc6d5abb4b7f38d37a3d208a5272e041cb4afa5c38659c7612dd29c4cf219090ec819d6bab6f0617bd4bce8e0c3787037f10fbca6e8cec78c0670d86beccdc5b52cf
+GCD = 4df63a9dba84ec2eafe43410d33b8753c0a11eedfdb796ea333e12dea11bdeb41e6b60f4f24811804266efb7b369b5f874f849405cc645a796a62ad1472290f4bebccddb66de6c9dd7aa51c4da6863a477ad0f3cd6c099ad752b716711
+
+A = -2c6d0fe2ef413d98b113fa992b7238a4ed463d94d5d891bfc038e56cc6a16ef630aca9871d7e281b8e7262bc8739c8c358ce52b744e9c371f640d03cad874bae5830aa818287a710b669d27f6163abaccaa89fa98f4ac8c0c11177b467d30117b7802e563bc996314d8f84ccfaf577eb89268f7a9ffded4371e7996c81b0a071f2943d37063a86b252441365699d8454ee351222dfc13b894ccf483de409e6804635d1136f8c7337af463011351fae93b3a19641399da23eafcb
+B = -4ee5e128e9895c443166a3cc76fb6b46aa40c0e845cdcf85b01c4f36b3f87523d64a623f27d62cd818ee138eef95230de9022242cadbdc7251af5c4503a88b0dc4e72ea38c82652c0f459a712c66ef2dd0ee77f392bcdcb7d4a7a87775b247b51ff5db4e3c8624bb8e98bf83ef70420435310de3358f96dcd746e2d2475d39dbd7a3eb9654dd524993cee6ffa04c4f90269247b91a493e5ba736efb87a05e31a08e752d46516d4d129a84e8f32b8d3f6fdfd0c891d524a010ff1
+GCD = c87533896b5b213ed2a49505683bc75f39601c5d1d57681cdae0d42d24101226aeaa059e51bc14183958d7c6a196d5b698eb194f8c6216a69ee3387c470883ea3d3eea88664671e2623d76a887e918db7281fcd5134b3077840bc14585
+
+A = -bd0fa3e41b10450a6bbb3714073106e5a38bac190885840a7927a3eedc9f4849acf28d72cf000e121b631d982ee5cbee7cd22afc559f4cd05d04d675f5e4769f7a3898395cae10f3062ad483be985803d454c9973883b68753b21069be6eb7be9047698c36d10db9147550fa41eda6c0386d7c50dd02017ccf7fe4669585dc77169fcb668ad0fe6dd3c5efb72613bb7d7b0660c08f109d746c129dbe487e8ae517d4d6e75d00beb324436eeb9c06ffec8694c3f3d2c0a7b535ea
+B = 1f413b0a5b91c93accb04da98aa495d27ecf005dcc9347e685be5723bd8512b8e7f38162bcbaf2d4f7f93ceee46ec7759e428bf525789f5fb59d5bd16fe8e2789068b2a8685ea18583a27f32ce65eceaeb64d9ddcf49c940ca628f74aa4062d3131ec97d83432529b04e1bd1fc6108a6ffce161229d898e5bda1d4d661c8f45ad85e8c90ac60fc53ce5c7956c00378f9487edad5a82290c235037fc99f36f9782cfee5cd3434d886574f6cb681349eeffe1fb1837f2b9ed5523f
+GCD = 11979410fae8473d1f5bdb34b44d7e11a6cf21f343562a5680000f2ad68dc2d1d9c7d2f7119ad7eebcf55d24db4078aaa97316597f351e2c82e3a0e0107d4f029726cd70245141de0bda412e8056f8352271429fa4e0ee7a8c7e99c5353
+
+A = 5f8ddd4e5bc3cd78fa8eaade54c12b9a4247bcee0cea21d8e26a7793becb35a746e96d018b9344739c52c6982c5cc4d46c5b2256687e40d156b8f4791057286875a0ab3ced331d88584e56f0a3580d89023f3d1bee4f4626e635d0c114dcf1772ef007bacd2b0c8b70ea6841bffe8d43be9e53cf7437d6d995ce5bad5c6f0b3f375775273bb3226893406e71ed3a6f1372033a501e69d60d2321160b55e7149d2494effc861c86ee2f1c068a50213ff512557a83f8b8a855a6fcc
+B = 31668a7b453c3df62edc5c9c5a098be6efd88d72c3ef1523d9f7d146ecff154b1085fb3ee21047ca8d8ece6854adf9ed28b96d32e0c63fa76cb833e66181d30f883f4989a6a224cc6be637c0f00163fa3bcf85ccf3c52fd133fa56c96d127724289cb1e5d029b2769d3e90cb7b5880ffce2a445adc75d4934b810c7d2bdffd8d771f77f5d515c4b33d5f2f3e12776e4951d851d379cdfc84afaede440c99940c40a0ec5278c0fc064aca85237088b2289c54d9b5a1c04114d570
+GCD = 3abc4293155c9285d194d9a6090a7bc21e6774f8a485e47b5c1bbca223d3510fc82ffc2b10cc8bb48d71cb047b8fe5ae0097aac81735e645a121560dbecb51bfc66f562a9ba3c0a6bfc8f114aa9abec278b2e375e5e4255e58315c9066c
+
+A = 10c145186b93534cf2a0eca4112eaed93d0306a6dcd69728bc0d2793e54276089386f082f74fbca88e371365a3408f3af48d96efdde0c1bd1b5834662e12c53d232b795274f689249a1cb84a2ae491b47a269c405fee56bf1a315178291449bc8660654131fe3a531f95ee0429c876114cfa7df7524800a127f2c92de2f60cdc7bb3ed1ca358eb14e9be6cead1515055de2b782be054eb2d5ca00ca8e08fe8ca3277ebd95f06a9d247c6f7317486427803cbee192002f882e43300
+B = -1395faef6301135b24663546b8efda0de698fa87b43bfd754c74faaaf709556d208c87d5877e9ae7825df647ff33be0d0660e52fefdc3d431b81b61fd254a3225da1b385d52038d7ae0bb307c92e2f78167e1ccb730dc9ed3d077502a3508e7e834ed5b8d0a236434354f8c1b87ce615f1e257bee383dc48bda318719d97e7afb4bf2e4bb67ae8a1cae0e671563dadca529bb95c2d1fa1f62f2befd1c92e1031dcf809e190092c868cdaa8c9c8745fe1aabedf580beeaf6791bd44
+GCD = 5feda34ef7cd1b55374506ae300f7dd568ef58f1e28c4f7e3187e12b2c09a380bb40ad2969e8095de5dd851ce6ac8b35fdaa90af30f335650fd10a14d586e10eb654bcafe7569a505419412087b5ca9058d68dd75a79e5961eb577b5ec4
+
+A = 33f38e6e451ea0334b00847cda3f772ca9226e2f45db9fcf9e23c5995b453e831a3e4ae921a0e9e0543670007f41b6225961e3b53bfc1a64d07b98589e1e951e8e112565e957677f2a89b90a24338e8ff8ad9feef732733fcf29077cee51c557255e107958a7dd471b0ba5b3c09884e1135207957ce137ff070f87ceb331f33eefb5689700294d77cdc6f339df888c085d10c1c529e52cc2221f2b6496bb229d3b2484578fc77a7b71cbeaf19335ff6a289a1fdcf4cbd7ccfcd906
+B = -4f23607f4bcbdd8f210145b89a54048c7b7a37aa08ce24bc51da01efda95ee0517382c728cf495fb35039781547fe9d187216993003c62ed013870eac3f82880a13ee3b6710c665148dbfb67718841c7b390a07f7d0f314a62826b8c364166b28e369b8a7781e5ed0cf0fca432662051b1a1d9d366efb73750ae18a1adb89dbc6773719b2b0517319f0426849e88ec5c9ef5ee87a09d29e9079dde1a42aa0cf75c2b0697ec0d4e2c4c8ad7321aaaa591b0034809fda0fb69a24030
+GCD = 1685799652d73d1d62ac270e3a265583a7384c4eb5b72d4b1b71781825a0b6841e15c75fec36d0ef44191c2da0980f092de4d83f0ab8fc2339c4d4d02aacfed8ac786cc6f9c844d0efe4670f1256dbdec2bbc963820dde4cc325e684d7a6
+
+A = -fea8d8db29fe24d7cfbd1e4391a77b62f4b6bf9b315068986b187b8031350a89e81fde4d0de1c5dbfabe0f6d83224736e3b3a8c3de3571f4d7178ad8a78e00589b48d7494b77f83a01d99d4d4b00c5521f2781a9f1705cf208db588cf262139bdae33934b43cbc8cfe3225f37e51f9293626c03323457b2339cc1bb261e68916d12413320cbf9435e2836c507c3c7d3bdf21ec7a7565657c6e85b241048adf843d6cab529312bb89d5b03ddd96c9d6f1974b6dc4516dab8e910640
+B = -15d11f25275bd956d3993bb1404f6fe787d4761a3977e2cde42629904646cd6c96306afd54e4e9e7e666c1fc05636c835598a4e0e3c636a1fe2875761853b9234e290ca5096b48158e311e9a1591e594c440c340e6bfb6dfac712cb90cf113cf36234363515698118fce00a9804d641426e3837c9ba288d086960f9ea908761b9dd1df175775c3744c6d7b72fe8eeabf8e75dbe5fb413e1ccac74fbac29693893fada4f14beeae59536e4509d24449614ea9c46c0a4b4383b464c80
+GCD = 1be167db4e8a64dcae6e806a29d7ec96a4942b67b329f10cbdd88363c02e94e2a2bbe6951fa272719a2dbbc515e8fb59bb01a2da887588e12e4b69e2927e292e809faed6df8bacf07516a37a843a1f71540c43da5f022bcf774990595c40
+
+A = -3b7162faacd65ace7eb8094d0522f8feaa3d920c5cccc2f60e92ae1b4a456ec97577ef7d4384c9dbc6e7146bb22b478b1ea6d1479f51efc646f22702a6c01d73d321c7ce093735c389ef2d2660200a527452abfff7e91c8dc271d3d85bd355331178c8ff01e76416c23b26c5ecc81e1332656c92025e78ce53852e3a9c050bc15f57e5618401619ea887099fabe156529c79e5618490ab70233db1e07c62006a48dcb8c907a3c122e279e2fb5a65ebc54d8d44633a438a6203cf0e2
+B = 41a0bfc19f2b8f7de9dff565fd86ec129c3ab27ad884ceea112fc5ca95bae42bb85406611b7ad289deef1ccdc5248f9d89755620b2e58b49a3fe3e9d9544f260e36d0b644dfdd48e4986934d75b131b6998c967390fd5d56b2dd06e1c54d0dcebb0ae3c3cc908e6d75647144679183cc330ce5f9001262f3093cd5b6ee31e6e902eecba72ab79ca8342945424b8fb9ab61fbf615c93f745521988a07b7fa0142f07c150513fff4b5ea673863a861747444df543e10a336238b3a3a6
+GCD = 2083cfed43d42cf163ade1b27b77cf828d0d0bbeaf5f1a024513e5dc6fe533571497cf1a3702f816035830f9f0bf71e83598fb864847fdbcfc12ce9515b2a1ae5606c576723bd251b6d84c8666c01287b336d2c25b9231778e36be0837a5a
+
+A = -3882009372e2a219aadea3975ae6bc5030bf0b7fd08f688cb33cb90c880b08ba9a620a296dce0ad2a7a1995c765eb1136ac53f76e892e0b999d94c4f3633f7c554ef23b8a8f3fb21cef368fe16fcfd2a0147fe9f0b94db71c8846d15cc04009ff83d156d368044f7122c051d1c54f7290acdf26ec5c571f77dcb268b4a40cca8e7bdd171d443e29ca48e04a2224155d5a5652606040e4fa5c928513dd91882372a017647430c259ad9114b0287e08517ec70848fbe77a5c9ccf1ebf
+B = 888de61cf1211367b21ea81b129dff1e05e4e65e78348f60639e6daaa6cd36588140eeec8c2890dacb2625fa24e86e5bad9669d17de48a8661234279844a62862c27e2193f18c8bb3f2cde5dc926399ae762e7952e3439aac4ba9e0eca050e7be0701d9248a934465dd047575419f4b681e2e845c6717cb93a0e45ba785cde93bf20074c0a3ffd2a24c54dc81e4ec75e48215e35bc6edb13f7b03a13d95e10d6a9a12e5f9f2399f696404277b34ad5a7c90fef1ec0eccbf4ab72f3
+GCD = 53c2dbef83aea180e153a69bfb75c6d4cee0349ce7b5c305ad191997141d5d87cd1467c103b244ca8f4abd22f76aca8b6f1bf2fb9b3789625e356f5df89c2a8dca4774ba3ac46a28c5dfd48c5569e8818f073d2345a7ede918051017bafd
+
+A = -45cff50b64f590c8cdbbcf93e1efca53100192c876ed43725f7b22b8abeac5d2905bba71bf9bd8da7e989f9acf12a9bbf6b3eebc3f7a086f4f38bbf545ec08cc86e7dd80325b7ae1186741df777d7fea013c9556e2ec971d69ad3d02483f2987b0cefc515acaffc5b7c5b38299b6012b4052ea58e57bbd8a609942c0e2fde8b223048aca76624f3b5afdc972acf65fdcd21c43ea82e6598cc99e9923ddc2be3584918d8404578641efa9adc39938fcbc861e480f454b7120cfdd5c5a
+B = -a73296866df9b22ffde1d971a081b56d1dfb5396cb16de99c528d946390e24c64c36eee5fa0eda797070ff16596109835711557d91bcd56ee7bb58e4bf5113d22c40d127d8dfc8f621d0e07a849ab7c90e3231f6d550afbbfc0c45de7afff83b74428feac4dce9fc492fb10ab12dc66396d6d217449b12398d66aef94b22152da548998ba783a241f2c8f072017fafbcd764f1e8328e5cf5f776cb0a66b4adabd7387f3817f1ff7a9f464e6f247ecdaa678db9d18a1b0bf3b4b2e2d
+GCD = 912fa0f10b1c113b65dc70a92f0cfc0d11a32627aba2b33763c2e184db5e2e8e35af05f03ad3c300279ca798e404dd29fd141dc8405b567157b4133c1d7ed6f00ea5ff3db568fbcd6d4d0bc7e6ce563e3c23eeda145f80b922d85278c705
+
+A = -13cf497921fad45a1b9ba4f7c26c54215b0a0571d30bb10fe4bdb70a83f406b8918beabb58bf10af95eff1ef650156aa480635893255081d0e7a8142588fcdc3150f6099286b2a2caa59cc3001e80ee343c04a165dd411b502851da7dc688bd1177d1461bd90bd08e5d08727d222ba02bedc5101a8972600819a7a97afa8de2e14976bf1aa2f0d5b3a6142ce07223049bedc33344898fbd28ee57f25324a980d0373e3704a7efbba99aab81ffade447fc6d74295675f4aaa3d10d113c
+B = 8ac932d7bd1e88ed5606c7f16ec9502d5ed891053fdab61ca1281617227a3a59d090b8726c19bd8e359980fed9d499a097d64fb56674a485d5f1097fa9eab486e7b1677599f7ac32d545ac4cfe8ee077263a5f97a1185514e22a5c6c6d909eabf8ae1e6fef51dd95f63d5dae734418862327415b3bc84bb0bb50cdcfdd986a2f669c0aa77008ea86d3c8baa90ba38d4c6ac59b678c24e58f8d75e0352090eb50cb6e7af09305c14b76d6be11ecfc4c197bba65c6ea8643e84b791ca5
+GCD = 1777e197cf67b614481961017f7ac81608170c0afd3198cdc6da43de4eb681f03b3e88c91a10119d3618becc58f7a939c0ec9980bc908e584a66276daa0754bd2f40ac33e36b66521502088a2eeea0c80680cbda285e9995bf60c92a6fea7
+
+A = 383e87fca5ae1b66ad21321a56a70b195bf9921b26d98747ab34a3c6058947749b927566d5e50a70696f9a0ee336b9bfc23799889c2493abd5179867cb7e47d0f898bce268390ebbf60695be60451f48723682194cca95461852358271c7a3b27767e214a563fdba3b26d83c2e3805027ffdaa53eec7c8d8cdffd94660f9d0adf3cfd2e43bee893ce330cc0bfaae486e066b5e67eb2204caaf8820d27944f10e15b025b93d390c3adaeea991c5b530cc7864adfbc969410fa23d48dbe
+B = c9c36c512c12d2d95bea2fefc1f9b6280280bd0e93c093366ddc2161f1d119718c8b8a04b26836deb16e88b7914e4561af2e9677f883118a0ec2da299a8b91634950a0148f1d724d9e51bc4780b288f3cae8eac2e2a4643e0274a8267f2e099a29801041a4154b7fc1984b2429399ced6b56c87fb9612c7e35c8d8c9c47cd9ec5bb006cf1fbf09fdc1d14ced9527e9342c48986595dd4787983b31657a1403132cef1e1879b2ab288036a0dbdd4dc410b1555c19aa1901763a837136
+GCD = 39e8fe73dd597e986fdc5c6ff223ad7182ae3ed249ea4ca732627f5c5caeb58a915147e681b4a0d263e711a2428170ed8084ffdaf5fef57d514bb0506d2b1da4810d5b933e7eff0f95996deda25e759c207af1b092860eb9b2f7c601acb52
+
+A = 153e9781b309ac5bb022c348889c45e07f70ceffbcaa33a954b163e89290805f06254d96ae7bb85f7f11b046ed6877c275052ef09cd64b86de08f76a8906df1987fe71105335657d61541de92ea4ffd495e2a2b4deb50c895425cdbca5037c22d28b128bc6c3137c49f78f540dfb5e9a7b4a657440ff1d7947fe53813c8435a49491313d7e0e919db38530370ec3208e21bc9894c3fd4c829d1c43bfd0a03c0b380225f86138d65fd098a85bdd53e9084e19b6eff67643352a8a9fd0c
+B = -7542a60ffa12ed2330eba8974c8e63dbaa1f4ea7545cca203fe2ee3e96e1b9c62762e7247e3c8158206711bd6112b80f1375d3eab46e26a92a485e2feab46db40e99b4e906980fec76fca7b79b6766dc1d7270ac0193346c45cd4458b9abf93aabffd0b19469dcbf6ee88534db3b5c43375aaa39eb188707e6c4f026d85a2b92b8473b381584bca3da51cb30e03ee965f8223b65dcc0aa0ea810356627305969c2d242a13b46360414aacff6ec80b27422632a71c0dbda4981bca1faa
+GCD = 37a4b8d4ef042b17abb5737566f9b4557c7e6a0154c3b992946b1d25d79ffeac8a1bc0473617314b39b3b667b64ce3edb90aa12d0767ffaf26ff66385bb400979baa5c3ee284b05c0bc7e36ff5d1e28fe3b05bfa6fd8f92229dcd92e3b6526
+
+A = a3bca39bc2d4394ad80edf2610b39577c23c58842c14065eb3a9400f2ad6745cd65ca5dba479e40af7301826c2945bd2e52f9733dc0ca4fb578d0552f5ea89592ca8a730a4e46f2008416a03f78ee1c08b7c5043774c84b5f95b7e77cd06aca2144459e06dfc701b750048d992712dca63bab10ce6c29720a306e8e172da5bff450dd6e9d6ef808e7b7580e1e35dba7970a4dbdb100f89fef04b9396f17c59256a9e8d1021f7ac924fb44537618f13e099ed08f701ef422f0bda03a46
+B = -1176edb6cbb3a409ff23db30990edf979444cdd712bca6d43ae41e56199797d28278e93f880d4132bba0968651d1278100a3b80400f3083aaa98392d4430f1af29012f345b218ca3d5cceb51802bc3a61ab51881c451711040c03d9e1e362e274af9f288cb00985e3da678054ff3dbb21c0a7ca1b6f0696f46de45cb4e1329c6d496bcf35aa23a69f9ac34fa2502c89eced548611bb9af0dfde3b6f088c7bdf4f1960f574f570e8b8ce06921108fc93aa46f405bd06ba2e65af22c03dd
+GCD = cade030b377485b47d602166afbe94f938761fd442aea501ad6e8a2897fdca68586f1ed23815db3b59873790c5c2e3ef1ef65c1e28e94c17e64e9559b3a782ddcfda10f49a990a04baf876e670d38a404724b05d04e2bb29f79e9b184cd79
+
+A = 171f11142e8d0424cd051b20072366a87bf5f3e851eaf3445781667c161e56d064228ea843c81268328cfb30b4d6a0d5bf92fcc501b3e0accc3ec22aad82300379ccfc5a20710337b966a7a47f4567651b1fd9613e3289abd72338b28cce3de9d17c7e15ba4b83261c4df893c3b2eeb3458a9f1ce1662a3e1045db6a76caeddc24095a072b6fb77469654dadd7027e2fba3cf61432ce069a41d44526f8744e0645b121bdeb49c67b1eb0a4b3f8b65727118411b534e923a825a00712ab0
+B = -10f8e0a9173613fee5922fe313fdbb186c793f0720b3685325f5d9e9d3eff55e85a9ddcd7cf18d4c50783835690213d51f7db6dda3c5256082a54eb0e942629974bc284692f02c16765bf24fcb8b10d750d3d8c7213980794606392f5d2cdeb2e47a0ca3e368c5a6c0dd51b5089589acd04a4093dc7c1ddc9492b0de2dd5ed027f9f8525c87f02a60a0d8ede88fc54fb0e47943619c5283d943356d04fb18ae8bc81dabeead0daf920ea5067ebe01ec314bff84cf75724b7b9560013fa6
+GCD = 1bbb7c874fcfdb04344f837bacfeda6846b3af248ccbee49f138229ced34943abe509e1abca5b83028bfdbeb6c62c25c4634f8e93a5e85463f1502855efb1acb3529520fd1d9129a57595fb56180db4a7b3f4f89c5dbed8cc3e5a0b1bc818a
+
+A = -52080b23d46b6aea8fd13266fa88e3520c2922dbfa5d0bf41a171a771fc706d0ec6a6b10d3bf324f0c9d14e8c052d890474de79afa56ae4493bffbd6b6b63ffe3b6c429a2390ab3086eb6165210b7d377fdc55538fbd228dcd4311e0c793b9913fed8f7c8325c041e48e8916808368ad29d1ade10814856a7098b7e0493021b5fe062b33767b2f70e2a41f15b314de3b48c6ea0f5e05f185a770e048e47ed820731573bfae9e6f40a39276194342284fbd0fda9e7fb80bb5deff89bbae8
+B = -56478e1bf5bc2d7a535e89911d3f3627d19d9eec6b24d1290628b205fdb254588ccf055f60966de1d44afdb604b09b9eb48e885a4523f78ae07f742a0e54ccb776cffe091985d9438d8dfe7b039c52a52bb6f8bacf9af67717c6b29f0d9ea74304563154abbf47282de78a821024b0ce1e3f1f51ea78d1da12b2303c320e9267b497c04beb1a5cc8007fdbc43cbc98fd7059a634c36e3e4fc4db9e25e22b95f228d3fa94381a166fd57be1f66b15989bcddc83fffa6aa5aedb07d7c6dc6
+GCD = 3e0c0b78a0745f7ce354771882227e6b99bac48c427bd6c5fc1c2b0529e9d39485a94d225141950475b32bbebed8e331864a63cdfb4a6aedfaf07b39eba9d9c4e8fb1c621c734afab055ef27f0d09f04cfd68d86b895730f634b6a936bba42
+
+A = 6358c13a8109a6521baa86f1edf7f0220328cd4aa5ebf2c1f67e19e0fda95c471970f29af9bf6b947179bca14087ee21fd74fedd5ab669f9f6468fb5c7f9f9353ab5f3dad7ce3fdc4fee39dd6ebe5ee409c5846230a0998c9796f78eed6597679c39d2e6107204b8e2c01d403951f8c2728ebba705d0a97f6f0600bbb1b0d9349e111e388727efd7e88c65dc72aa6e77735754426e595adbf0230e343a8bcb52d90880c44b47e8ebaa37eb364b07cc3a407a9239d105a316f236e69ebaa
+B = 1375dd747402cf3fedec94bf5e5a89edeeb2caa73494dadaf28ea66a337134b4727efb89c18ece039c5e7a3ffee63733903f86dd7906858e747a9cac9d50483132e4f879e295bc17053a0823dade577df8979bb25abf142362b7ce7f0e0ece154dbd82c702b801a6ddafe3a7acea146ef0be931fec3141e154941c50269519ecdd9de50d72da27ab18becb10af5de2f448e38597b15b3c7a54eb79e7440e43b3dbf8d5f8eca470713b7415fe83f3b54840a3f644dff80a5ddb38e220d2d9
+GCD = 60906f336c3627c181f538917cfe666e74c54ba93dd8d013b178a9d1b31afdf9148a47589872c1a3e68a27ea48490fa438f1ec918590fceb665e8eb6446c508f390f07bc993cee9df4ecd6c4791b2909cab513130f278f691776bb6a2e11e1
+
+A = -15a7330abc9c378a42a04c4b798492ce327cdab32fdda4da62eefeb68fc271c9a099f26dc308058fee835605dcd763823d9f947042d6f441a5bf9010d4d9e6b26228819f053f84a8a767e9780f4761c693e93808573e556d7d034255db9d02882115f79ef8d4514143738e5b209099d80682815f136b04206a69c5ad283fc751899db529de2cff3ffd0c12a61ec7c15e6945526f25a8c5114e13e65bb801b4e7541566c48d8321f172d764db5f92367b9eda50844688d882a82fb3c0c3c0
+B = -ce07f69af6ad7179cc052051c99ee5e6149245d6d83797c466ae7df9223765a25bbeba50cf7973fdef40b16f897e06305cc2a8b8d490ed56ad88edc8751038aef620238c97b6b1f8c4e6881109ec24ca2a2001147e489df685ec24c3551a20fc1b8cf0b2e780e10e1a172220839a52907c6b8ccbf4e8928dd67b3e2d012d3a66b2f830925e08669552093c6aff84f9a15fa500696f0051c24615d812d98f952acfa2d473edbdbe41f265da1c5a8253f94fb394d71ac1a70f2b53ebf491e
+GCD = b93ab0924e66785205e35349bf98be32a23346baeafad2b343a1a92d4748bdfc1ad4ed6b48825f070bd85b54e55028551125d3374ab572bbae5dae0d869ecf1094619003d52505edc54997ae517e1e0e3ab685f22144487d6d06f70d2a6b96
+
+A = -10ddcd0194f78d9e9f305d69196f1eebd49935bc658f8e5612519386949324e4a653288339510ed3fcd0900a06efd20d0498822eb63f170d82e2f1d05b33c91428d225ba3b41be5d1f5101619f83330dab2635545d91bc349d23585369ac160ba8ab9f7d2950f0a681c3604fa7dc3026597b702c71c46a5243395e43892370bfc8c4f5d395493dbdeaa3495fe5fe3d4cebdf98914448947ef738fa041fc42b22c2e243d2d71d428f366b01f33aa95c873f1b1cfcc505b679343e8d53e5ed4
+B = 2de68ae2c1bd54ec7582f626ccf34ddbafa1230946cecb2a31ca2f11fbc40c4a1e5da8d125a820be41f9d7a39e7ff7c4bf4cf39d1a1bf4316b1a265fcca2aafccc672cd8e284294993cc1f651ea9cbfbae24c15bf2bbff1cc2f8222e496daf770a859a8766ea5d67bcf1a14a8612aa47f9b0081fcb28bd8885f78ca45cf092d0815eb2d9f7969f65074f6c7abf7cb4f0235768cb74898d9321c403ebe010bd23befd6fa1dbfa65b7fab3af9daf1eb9138c1032b6d9f6987cdb44c37dd1f2
+GCD = d71858582a93f899c5d648a159f2a96d2aeafcfc5521a999794fb41d9f6555972df70bac71dfc45a1548f8f6b70f56417c21dac390efb1351ed54da6bb50da2fde5438bc9d8bb9ab0f1ce8a83a81498300f091c7a4ebfb5bd668fd170010c82
+
+A = 752f49dee1380f2018bbc5cd3f747ecbfef03d5987ba64a830a7453186f69d7196814efaf9a6a1ce85d4866588f2bfae03f6e2ab0d4e22d06cbf3d90d69898f10884e7503e821487e3a80ce76b9ade991db2c25eeecb5fa75d198fb0eeae483781f0ac7e9b51c1a8d8a48cd82fb953b180c263e18d9bc687371bcda75a17065a02e11e734e86b1ff45d0046c70252726e618fc30ba2dcc0fa89bbc984d4ec812581f2d59121d124f74ba96b87754e8911bbd83c9532f5a151186b4986b90a
+B = -c96ed7194229535675ad89f0c34cf58c106f992dfdcf1e3733bf16f3ac0597a6d336dd09acc941e15f284018fe304b573f92139abc33634b677dba353b37e195bd7d7d3fb25debd96d0dbe2c5ce065140ca20e620a11af163f07d043b1415231d33381010f44280235eb0a47869861757724e6d583734f1c114838d3e9a4edc91ea15148b4e2fd460fd1f145cb4785129eb4e9ab7c13bb8b64814da8c8f82cf815c3676dbe9e378765e3df90d4715d7373c16ab98c749eb702e0e538dedb
+GCD = 3c0f1a13934b1dd36b04e0840dd0fbbe485de70d5e763c9fdcb723c6f175c849b0b34f9e4b328f3600e798e14329e5cc2414344c3d0fb4cfa737b5f2db97b54c718157abfcf6d1eb144d77ed6dbc3a6c9eb827ac3f654112f63819fd8170fed
+
+A = -4f22885e92a59c6be618f2e23dd93fbfbda5756837d89b72ae36a99bf1f0903e5912aab5d3dae911a000b90a7f93d6ca0886a04d92f635fe632e20bcfd94879ec7bcf8d105f1ff69b1f0f8745bf5e6cc4be153d938cae44f204e8d95d2b91919e6b8a9e506e4731789cb7c157243084f210cd0664f88a2ea79fcebaa3409a4947dba2742148883f8627c4da184908b793a8c0eacfd5169f3af221df7c2abba84941f7a80297af5e0b7d6b7228deb7776a577f930737a0b8412fb29f8ee2f8
+B = 6ace5ba1d15e78c95ab6a09249103a06cb866b51c7cde2feeac8639ef52d3a2772f168e5d5ab4f6fa00ffee6ab67d5d05635e674c8e1904d9effcbefaad50dfec50f5429de83b75d7080cce4f19be6cbf0f769e4a570cf896405804fffdea35ab35335a67816bab449b19b0998198bf2599fd5405db4705f83858c07720324af3d2625cb479f5cc949aa2f323e7706be2feccc1cf146b824beebab309d969dfd4cb159c7d0fa00881cb9113dd97513b5261c2ed3fde16ac5df19240330369
+GCD = 53cecb07df45e50cd74e12eb97f74d1c63e5e2e3d285cf4c1214b6b097812a3e3fca40e7a4b6a72aceb7a8cc68edfda6718db1b984fbef2658067b5afecc7cbebfe35c829d193d75ffce416233949f610ae92c78e06d9ea2263c7632f97b359
+
+A = -3e4362fc07e4fa12017301c9a4e3af1a0bd20a0f2de52881fb408e09ebbb4e8ad3d922851ccc1ae538e1c0c5a9e1322d3bf6d68da1c876a81d8639e2b60075d818d4f333d5f5d6026ce812e0df7cc4ce8e0ced7d28a98c553e871ff6b6da9fa702e99aaa1b53b126d777d8691045d6121e4cab7f5bd48737e927c7121521705cb92c46b1d26de708269064edf6ec205255601345a2bdd716cab2f04402355650184da4bc03ab3a93caff40943862b3d25d3fa6efb9ece6d366c63b48ef92e6
+B = -3d7d480b261903541fe6e922a4c6f52fdf67772ee0805b3ffb0485f4fcc55395d7f49c0ccdc910daeadc79984f8cf17ed5db9470ab61ab9681ff14ed7ade9052c72dec807e62bb26e791691712ebcab24843df7f64b22f8d4ca8cef028c32086778e570129d5c7fdd9f8b8e47d9830f7b268396dd9ea45c7402757a7597634cd25bb1582f269cf9e04f2f07dacab0f42c6ac3e35bfd4ba7c552c9d9f47fe0d71fefece6a6ac916e398a492d6058d3f69d93b4a1cdebea36d1bf6ee72ab33c8
+GCD = 19db5a143b0b59f4a915feccce1794878df40aab0dbdf6c9fecb620528200d59bd980f1e55e232c3abdde16631e5932e2adf3623af35ed42b4f7143c24cf5155198f61f57598254326eec0f0176d9deabf751d8ce501d41af24de2c58f8e6562
+
+A = -1b6415af858a1d5723020b830eec479ceb72eb6b4005f6b1f1649999366a8b0ffe90cd8c3b6850c8494dbbf978a67313aad8696e2399d8e71aa665d68564ad1ae5c8315a648b1cd70acd316b46c08c63a39f71c23a2811833cf6460eade5e9d8bf154004acbb14bb19cd287c2a133e8fc229e84dea7026fe327df4f9c1156f605b03cd581b5305675f5fe406a8a5c2659a4120aeac6a7f64a26d553a59de17941f1db052e136ce385368d5a03c6f583a9ccdd84c830d6b06a665b0e6df255ec
+B = -1229e2ad72228e981ca63fe686a4f296df232787f3053eedc5bd63a974aabbcea28fe76cbba13017d237a1066124d7f983c39921a7f5e388de21c61254ed9ea9bcbbdf497c62edd714305fdedf924828595335ea40394336ba7c5f530239d4c81674a03b7ca369a22b94548a5f45930fbffa471c5003cfeeeeba57a1ea3498f07da5381fdbd0ecaa3f210ce1f2aef7d657545e714f40445e7e311c291a5ef5d8b97f53a4508cc45e7b1f30064078c26a0115a06b0f879b55b767c000ebfa728
+GCD = 1b8d753b4e1ae6629d08996872ee4533b72fa44620162dfcd69d2f90ed26b14fb95db3ed72f0528ceffa28dd4213deea3aebaf2a4ff494159b9e62007cd78503d638e040ed62f9f785514b873668d43f002ee14d57ee4e5397f0cd34d04e7894
+
+A = -116e457e99491a7ba2f413a366ec885a641c0f694a88caa83a6d2b2ae1c428e2e2f1702d5693ead0b274fff2bc82daca107eabcb801375ba7298094c1e24f58fcb8512d901284b901eede1a11ed28c9a66ab38e850c3bca185dc332af4ee78dafceb4d91a15bccf52d187395dfe5e98c30bcbdede97a4cdda0fa4454c2a9c14a283fe566d2b99a36db8839f9fa07dfa85af432a897bf2a7866567a44c5d4d393c5359247f11b1c228478d790a99d50bfa8de61ab3d41e09cdf57427bcb62a24
+B = 662c90fc7d355e284a889b957fc53fce481b262a6bf57a056fbd22379c7f12d9f033c6f062ca15a56ac1c923038dbf1c50b10739cef85f4df2f8d4429fa1486951d8be614d5cf6f525931c518926d12f96eabbf45774a93127c7a918c869f0a03285df1d378fd0b107c701f0726efe0b3613ecc435459128867ec72237d0da2c00fd941da335ffa143560dd2f6862d9c19488fe05a71c7902c1e22a512d1881f37603a9796fba1dc1522cb5dab52c3713e293a23969debf33732862a87e6995
+GCD = 115bb698c9d06096fd6b226f31b28ef71f3653888f3107d418f35c1fce565e4f81bd4a3f1ec25711096f685c24eab8f6ad31aa394e529b24b3bbd14f125d0c30904aa21c783127314f9921a2deab725860e8408a9afd7e2626280be134edaaf2f
+
+A = 29a3589618ee0b102c2ce5e1d23908b3fdee7b6c767a6bf9584861db17d748e364d98b731c5da72fbb05b2d8e91ba143a23ddbbb3ff305d5a1d92a1993387f847e308543352d9740ff259405f386dd3dbcc7f8cbd0b1f568becb4548acff28a0760e68af31e7c532d8b30e985b738edd351acca267d8fabe97bdb0be633ff541de8c3973c107a41c2f0a89d85158e9cb999758107568682ca4c5fb601b826afe12ac4b7538d9c728552abe517a3859f9213608305dd861365fc44fbfed3b99e
+B = -1508f73927985af5d351c23ff0a8e3ac402c641b111f01d17c36c0938aabfa6d5edace3c83de6e6ce491aca87dd2af561b2672602b9911ea15f424ba1e2d50e37491c5bc52fd02ff50cf6bdedd2649c66d92dafea318f7ae7b3724a3224ec56b6e585440a0a446ddd34871da1bd3affe736e862dffc324ba9288177c3a4504b8bb2e21925abb772c0d58587fb72471a13de67470deb576a91bca1dd253ea4d7f8220902bbfa8aa2847db00d2c78ac60d7951693257553b8d4087a91a654227b4
+GCD = 699a87037694c8e5c46eb62d692add1b20f7b62eb4a73a3269d800030e0106a4365aa642af842cf10e01ad599999a8ce2d4cbd3117e5666e60acb9d20223272b6ea548cb1077d4a8a92b0a9b418e0c790aaa3b71f91f2b2a1769465e8256f6a6
+
+A = -3755bf34cd5fbfd07147db9be999b5e85f010ca9ac457e9aa5a8dd248aeacf2209a368aed237150d62cc22cda4aa1552f98604f7924be80373807bc349a87d7cdda2b4921e9d016db3b9691b6017d3bcd3e30278c0aa274a5dc0a25b81f3c31b62d1effc2bf4dec4cc8ccfa9444172125f5921e42528abfb0d752a098b68555d68c669fe71ebf65c30623a4cc6ebf15ef9c2bb89f33b6869c048c5651b5b40ae10f7b113dc650b430327f32552e6d4c594b0a00daac99f56fe2e87995619fac8
+B = -605774f39ddf7883e6a5bd13cd3782f4b60247b2f5df09e77b7eca5b7d8c98bfb1be397ccf7dab73d8d4e432b367fc80a55321bab19755b247b245eaa9c024b2870296d7bdd32eab5b0daf5164600a4c7e337e334836c10b54053e787088d1267d5b83644f8ffd29e8b09496b7b6a4c9174ffcc7e477fec613c13ee365cb262e1e3e7a991eab31a2bac7ed48e9ce1e361f310667883a9a8c803ac5f8cb572c6c8e93e98c75e8aaf929f57b902e48ca56821cdc6a5e1c1a4ebdb2df7074a5220e
+GCD = e1c50c4699a8247d6ec400ad7a8b207b52ae8766e3555e549e248e10b18f06cbef14b0ad4af33ab311e4f2226c2bbe25b9e6503745b60c5e472dccc7d5151145c1fd9b86607cd6f166bd7f08f0c51f8e1f39dc740810bccb6edb55bb0b647c86
+
+A = -13031a3a39b4556011b08769bb552c083b219b8c03c988cb851fdf26a5844c2ce0526e34f27605d06d2afbcb4c26554dd2a8e1af51a8aa30c972f3f63323342efb342ef8ae5ffb7ab21df7d39fb01d911c73556235e7ce1c7a2e0072455330b03631ed077e0c037f30d133152972d210bf458073bd98e091f5e2bb049485e44f23443c299a02ab4deb2faf70a0daf42d4387f40f22565409a3a885a7465e694340336063f5618af9789afa828971bacdbaed05bbc95ec1f09c169e13147f46800
+B = c50d9f77cb2cfc8f8b832888d34e103978fed3f8db588b201748f9c3a3bcd8030336cf99e48cb31d0cf782a4bb54a13fe74b2be8d11fab69df21743faa6e58b6c4d6fe9d8b21ca8d8dfff9d709e6a1385aeb8059aa7798d7b05e54b2bb531a437aa2c691919df9824c9e264ed39511fb1a8497f71ff7322226a17c87c3d00dc23346734203b94d84caa2cd458b6568545cea6ce6ce629f9f5941f16ceff4a0c4168e1ac182e849417912ec07ae14d88c64c7c63c396548fa7da0ae115e470780
+GCD = 18cd3d0767e7995061a510d667a5a2681ab92d8ea29a6b6ddce87ae4401a3c02b535d410d8b33dc66e97cda209605b3bc10dcc3b5cd2aa5c58d4266faf25bd9592e7ef85541dfa49a2ff20bd2596c729135d1471099ef4d75baea1ce10e05aa80
+
+A = 2b5e7d009b59ffe20f0d376c51c3bad9929925b029ddc2e9cccc213f1e5143a2992ffeacdef5cc6d337afec29402c8096738d62fd8c46a0991225fc1015918f4a581f4336e6998a8add17123d8d69314c0874c744bb091ee2f1fba68b5e7bfda198dc9050df972bba863659d0ed344164ccaea4d7dddbaf37eeb7c3f310463b1f3350c9dc6924bd52f168b59c08b144da1cf2e5ae00f55967cacbaf976c1eac2a35dc26f8b81cd487aaf7075e1ee635f78e855d17a142f8930fe26911dcf34044
+B = -457e693ec38b2429f1a17a0805f129436a18f69e31615e50f9056320f8ca715b58a2f44dc7336951d070b12c4fafd2f611ab2ce52a0e1c55a46db90b626099047426de73aa9abb3951f5c31977f2cebcd14b9263f7dd2cdd7f121bf85ab7fcb6945c979c2af06acf8ff9a52b6d4f8c18008ebb59da98ad6c9de472c42adf3ff6f526c501b87efd69f48927284f9ad219080f923fc221a4f45ccb4f4d12bfc6b06ee32009baa6760dba8088383090219a0eb64349209274bbef180369b5ecdcd0
+GCD = d8856ee87419d6d67c402017f5b22635ac68da342cd726702afef116c964f71acf654ff757e2f41a26c0fe1a6192fe45b217c9245f4b64add4276d0e11a03ffb4a303dedaa8a3280abac053ed4ba4c80167904ce45bffe4d635e61269c0dec9e4
+
+A = -11faf74e5de0661b17b47a5048195ca4c7bc6082cb3e0e63fb1cb1ed7e31ae827676c7fa0866b69481b7872daf2c2cb00a6ccb9cfc224a86a14746d5a67d69a8ea92b9927b3e032d1110979b4741289f4ff276e45e94b0e198ba56098605af5a1aa1bb3f9659ff43a8229e7bbe5e0695499b11b51890f552894185ffe211a45d5c34389ce2d5783cdc3e483223d61ac2b062fdae09c1b6036b10e77940a4b06bfad9e35820d0bc51a6063ec6e0e3d0c1f544f4276ef96711dc7ef8b22429df9b88
+B = 102ea6ddda85e06591610d8165cdaa7cbd61811743d19b73b5df51ec5dcadcc045611241a1b987e2542f2a0400939ee1e26d0570894a37eca0631d837c19500851409c6cf69796a5dbfea92d4a213646a20e119662cf84ddd366b6fb245468f3d98b2105f6f682ecfefedd6ed53b99bafba61f38f487f97b31eb2564a1d71ed7116265b14de4efc1b027b0bd5df1ebb3175d5cf92f1eb0920bdfcd10781047853960061cede6d49d1b462f2b8da0bef4c1d6052b39107ce2888eb1dba734391760
+GCD = 37a9879e5f49a9fd939cada534434a6d19d1eccf974015e0304daf6c66c05f223bd7f9526d8de078dbbe587ab1ee9ea4114fb77a698c9646ef1b4c85092f8459f2046b6dddfe4b6e3366130ab41fbd3e96cf0139c281a254bdab1c0bc02d344898
+
+A = fac9b74e7f36bf643337fe27e889dd6a024ade0958eba72095521beb91398ce01ed19bd83a44f13076f30a21c4ad7ebb6d74b62a63e8fd458baa498f29db5a3fab4e55b999fc2a8954be04937c24b6c4df8ee1f1de61fe9a99722451c46ce16cb875fc393e2fd9b67c0bc8f712c4d3de90958b2106bd3c7d453618ac0b2bbb22868e22874927f1012c99915d52dd28c116e21440a841248732e98a3eae587e5dd07409dd9eae97d0a9272c1a74d7755d1698c90f1105f1ae1284e73429f396d84
+B = -445cd6efcb3f03d125080d2c67d7f8c8bf618de7da2133e34a77dc4553dd458318aa34b6b4eab4e1988c43922ac339f1826db141f1a2fb3f540beecef7f994686621d1531101451ba5b0a05c4ee39bee690f6ce76f7bc93311bfa436865a16cc42a9a333c37233a2335f974c8807ef69d9671e0bb5822a0cfb11ac1fb21d7ec947a4968b399539c4c8a07f9bd64ba8269cc1ca8a567f9eda05ea5f0dd9be8d44bc9d61b5bdd0eac0512229279b16e8ddbe233e636a7a8db5db44259f06f49473f0
+GCD = 97f75404f5c9ceebf7710e2092f504797e578c25efa278dbc785740c9daef899539519e45bec45a1812a08bfa5c7a34cdd9f7f8df8dfea1cfa15fecfde7f3dc24b93750a7cbba0b1c378f00591d4aa899e139e04f6542db95f522b816aa49e864
+
+A = -2ad89fc1e2f64e24a1b124cddefdcec53f6bf8094e681704c24e6d5e381e571fa516046494705ba52a858bc50d72ed7143c5a2da8465aca9f9f5efe240816dec908d91bafb959b3958a8824c48a27a3db56f97ced2beb16295cac4d292d77e092365ca30aba14e12d971250575aadb3f743ef299f72d6f0ba0a04c5621325bad959a883cd69c70710c491bdf2cff53bb59e33ec7b04027691caa5a0f119c213d5ae6a773649c7bc10c7754215b0f85850218d722cdb1ba1bf8644408c81916535
+B = -3579eb843532f8eb9d7726f041b455bccda78bb12e9431f5e4c95d98d3e7d58c5272fea65cd89b2e90cef492044fcc3baa9f0a604bcd699e42543aaac1c769c13152d995c55f347ce3448b6fc308b34f2aa252d574940ec7c8f7f1f3b324aa2cffa2e4ed8475fdb610f0f2a7e9f3915c90c9d91062b44a4195fbfdd3b8aa19a91d3e01f982fd3465e2851bbb7e8ec3b191a16e63726afd3adc6d2ed2f7e1abd0748c8ba97ce07e61ff3c34ae7b5b61a4c03daf6ee8ca0b8cb6c29d920594ff120a
+GCD = 11c1456db647775e9ddd34b6cba2020ea23010d94141d40100e1816c546af35ffd05f7532437719475e39ebcb09910dab940ff99c432e58335f10f6c783769dd0c7e837c5d335fd4e3967690d4cb0b8f6eaa780c1d065f4294747ef842ed70e12f3
+
+A = -7940560cdec3a4d3651d74977e0f3f76ad4bfda3ac9c7c3a8fb2883e4476d9b5e6b10d55437b262aecd2abbb9ac65a7315b56d43f4858b449dbc1b11129d9ccc89442f93889bfb691bceb80da46d2b60ce94cec4b8545f0470940d92e332cdeef2da73d694d0028749099147f7672652f1265151b1a5f767a20f5abe0acf0d50e9a9808afb957f438ff79484215920ebeb156c65883901390c6ce71756a7da0768e6122063f4f5afafdc527fbd0ed9a07a72aa6a19222f06350c92dd996d6b428d7
+B = -16c10472f2725323b0cdc43b6f4093ff527c0726c65713105c0cf4d80e12fcb8ac621ae31eebc24b3d87f7d1d6738ef8d8bcc6e065a5602c2bf8d04e7ef8b0c6aa3a66d885654cacd5aac9fd0442eced9a08e084e8e17dc14d4948e507329e91abbc5ffc7f883f69a06de0f967586edf17c4e03020fbb1ae80049ebffcf5da1d73947e0b2820c40d1d947557f11d3102972829a00e6218ed9d55a91928471af02945a909e709bf9a5ba1ffda783c2dc9a1131700010b817a1d67d9e706e139698ab
+GCD = 3e8d7a6f7c3f8cb9004d43e8a8c6721f228c035e92cde92f1f0e27237f46a171145e5e36a9ba2de9b860f55794816effedd4dbf33f9045cb4598f2d500b6847333affa5852c8a54f87168311fa9f5365a49bf959c744e5d5ea3b2afa494348efd9
+
+A = -15fa44c71af239325e9260e4fbf379f00e67de718bf10388d59e9dacabd2b6a6ad3d39eaee396c39d10e0b991dbb91ecf0afaf5c1f5471a637d2dd205989e29524df9123b43432d7314c3adc6e30e56996db671dcd0aa4295233b92647ac855778313b7721d0f4a2009a34c819915366f0db4313ad78db4a779088b47e902f66d43ad005b4c9c451ff64917afeaf21bece85a540ba04f999ce8364e60d08c1ac88f2cb0ed8312a8bc17387c5fa42be6ae247a46af677a701672a5baa423e1e7e4fe5
+B = 95a309437fb8b0ec7a4b95f54e7a297e71ccebbaeccb3ca21bee8d04d255d9b1a2d3f7cf2d79b75c7d002d713bf49279ab16d7bbc313dfded5d67cc9c6edb210f80c193852409350b1ada2547879d9a6f232ad6f0f14bd8ca7ffe602f3415560a5dee83a98b0a9a98c4728e4b5cdb2299a0806ebba850f51598050bd80269e3cb3555394acef71e9e2914ca61061ee9edfb6ab0b949496abe1ee14dd0b1b8dd3090f62b6bbfd634115e5d2cbf471432dae9f96e974215caa7771e84abcf57a8d577
+GCD = 7d78e98677795446e580a2575d6f6d5af8ac073bcb41f712cb60a83866f5e1f3271b0e502206e6ba5ed4ec7ccc844237dc08496b27a1484553a72ade7601d66851f65d927a7fde908afd682b63275aa3bb9b8c34d574fb1852e46a377a0f39c6a7
+
+A = -4fb36216ac23149576159af96915337f1ce472c924e375590d264f1f8bd8fdf921d7586354d252513fb4b62f1a5c2eea178c8f8485c0af8de936b6102d2433662045e9b980a16c4b33ead273f3e8e1e92d380e391058affe761e09353edecd8b56fccea8d8afedfa782b9884caa033d0a47db5e19e2cb374da5eca60d7398e20d1f8d246a2a82182ad009d517f733ae8bc4f6a282623fe34cbe5b17c1f0de356cae77b6a42c92fc9fe8b31fb7a26a7f403edc2657feb48e49b023e1354b8bfe374d4
+B = 1ebd9bb72a46b52446213338a26ddb6830423335cce495955209ab8a0caa58b839fd608d5c046374c78ef45b79802bc3954cdb5b07b42aa3b69e7161a21c1d1954f4bc74ad5bceb0a4df21d9ece603bc849d68fb44f77cf36f9bb2f054309e9fb02e0477d48f122f40d14d445a032bdf3e3f9d17b0671471e72ae31a301de3655073d77f76cfffaab30b1a636753d6f9c832dc5bf632ddc59fef52bf2daba14ee90dd56b2cf4c2edb74f10cee784ac85f32a38bfbfb9d0cedbde5a819ce8ad7804dc
+GCD = b10689a4b5ad275a4bf1d70bdf4af4a3a9e23c2ca5e2e152bd979bed923bde249be8e63f9690a138cb56302ad1b040d430b1234069fde127d2110eee5982ce8577cdd6f414524b240ef879ca4b4d2358ebee43bc33c194e8a8301b1cc648cdf0d4
+
+A = -997b2a54ddd367301ad8ae5c3c9fe62b4acfba91553a35c9ad42ed20916e31e4750147d7b7bc7dfa58dc0e59d4684893c9453228cf74cb6666d4e8e6e31acd8be307e899959a15f31b300deaa5fcb6962e37c0e0ceef7a1f183ef4c38eee7962bb593b696ad0994b18a874ae033c5a12f5f2c7f021319cd571de566a80c27d24ac325e363418f521bab77ffabe6c564edee6048e72df8fe7b8a75bb7715a6ba62627f81e8f36ae0d84d1e612cd25c9878cb320d648e2909c535d85b4ac958d6e6c0
+B = -b67b0710bc8ff145a49979a7375232ba41973997074ddac30f8b3f348efc98d483e5f63b73ab4fe78769079a4564dd04d49c4420a5d3d4ab0a25e27cb6dd5574d2cbfd164cfd7fa7c2982c5268358de8eead68eab73c46ade9144ccbd46a6e4b7c6fcce126c44af7d706bcb978b8d3c3e0b9ed1203fe541ba9807564e60e7e44bcc4b872ec3791424ea693311ffd0d6a21f2e7243a82658c06897f28f9437c3248e91dc6628e0e675698ac0c5844b1e0fba1564e7b1a2c36c905b57769794dd00ae8
+GCD = 320ce00900e6f2f432fbf7d8d6c47f62a951673aaf76a7fa8d361ba9e968554eae39c281759d270c9b0869448ef6391d39758392409c9b8244337830a1e8975b53d71f8866c6212bfd34ae016469af33dd4ab7821266a1b4937e659e74f99799408
+
+A = 71aa7d9df45dedfc873eff26285941097a2c1f12f044cc6fe84ba6c821a3026e73d67d2a8eddfe43bcf7f0faa0db9fbd2891019cc4edc1bf5f4b4dbb2bf506c64349284ddab7b4b4aa55d79701a856c46f139bfabfd698a709101e431328db2d006604ac624b7cb00105b84fd56e42432e8bfd7db568d2a41702eef95efaa8936d2b799d96c59cd152897f642eff8032f5c04d919b502e81e99beacfeccdedde065099f43cf77c61def35415961d7e088aa2d54d76970496133a51aab1c59a48e2ef2
+B = 477f8fa9aa3afac8eda8083825f8866fcfaff5a90567510df1d271bb2572c38f133e0c3e071831e107587c2baaa1ea26a426885f201ebeb3f4cc3c07331758c6e240f95480e312653187b532000e6a906b20c104bb42054ed4374d0f3509c6fe54675dd556b8432f080c087e1a88de58b65bff2f9bf2dce541b3e12c7ec73ba414d04d73bb2269562970ee7076a380c912e9427b070e8a4cd7f2454975092d25681f4f7d5faa29c02a12531afbadeaf93cd67df29be8a1745a6b0183e1452b61b8b48
+GCD = 67adaffdcf6e6fc974323336f753158ff91837a5f156dac056d4c2e30e2c9b96bdc990097817ebd6bc5088c4694d3444781d0b8054b6a24d0a1db1f009eadc5d6acdefbfcbba2db0b4ac819b62314af48fdc0fb5dc15aaf313900a3bfd239cbb596a
+
+A = -109bcc9b5acc608206d9c03c1c65bfc25754b6896836fb415dacb87d3ca79a1a5941f9beb09d270ae36e7b9e36abe396a40ce8d50784516a06bf1d4b20d186ec32ac4ac554d268e25914a06eabda9086ca7f2811f59fc3a03f421f293bef714813737db9c077da606ddf3bcc5b494b6bf16d1a556fc7f7c9cc3005be39c61391e1cfb63abcc651cc6a77147c374be86ea4eb9a97e2472c51a7dd35e705825baf0694530e69289c4b15c4cbb347e33977573a8b28c9e33a9eb882840cf566032042af94
+B = 16ad52c23583867f853b8f9847e0f4ac758b12b9ecc634c51bb010511b54f858a849d236d5f7b22c02856b47f7ee7549f6402bae859f1bd0542dad481ba826f5baba64cfd906111992addce57535c0f0c8ee0d1fe634e08e1fe9a793cf84fc70e8b9bf8b0a0f0bc14d5d84927b4737d1e97eff6f779767879938a9ca4c5052ae101895fabb8580d0e974616f7e895848c7e446f28bc139bfadb56a8b23e7874e6a2e8ced2dd7da7b93a2490f6f6f4917177722158aa243c010b2a0302044b3062c0c04
+GCD = 1ce060fc15a751ced9a3185743d1ae21df73224a90eb9786870dbe7db9442bccef112d713a1a9d2d7a9d39d9a6d4427e47112f777b0505030bcc4b514872fad8fd4466830cdf0d76f1084cf53768b7d6df333605243dde403857a1d8e08382d074cc
+
+A = -320d7663c393a90592c5947bcf3891d2b78aac9bca762fe79c35f7ffc3307e53cad430065a08f487da1d14fd6a1f821de83218b3b69a560b1ebb4ad3512bc7888c7e56fa31d4bf9fe1d001ae71ec5927a291b2f7a81721293f0990d7fa5d640adbb7147ffab0d2f8abc62be210ee43e2a283de858ddb0662c6f780ef6134bbe1d078b70f6b66289b33b108e3f1da3ed60e35e071e6bd33d9a80b95cdc2baf333876356562ddac9dc832526f706f3f740eb4cd88aaf1661d5ba55780e0e375fd8404cfa
+B = -3e61a205298e015adf6f85c5cce0eeb55017d654ad457969fdd40b8897e1bcd579a95253efeab59a6b96f6775237a8ee1e12e3b8914efc9353f39af123e1bd65d6a9de28d9ea7e09b7d8f8c2136047ed4b7de125468f0c3fcf5e7af084d420513ace61d93b69f1a0f5443f371db388a5a9e560fed09c2d929b111974f8cd67cfa0610d06c403cf00f9cf6c946ec8d62fea43d0709465890a47a16048aa45a2ae9c7dcc061e0b23a21214e01816813e5d3a46c7e6acf92d4d190c43ef3537103aa16085
+GCD = be2427bc76269ac50542be06f4938b86528950d1334d2218bfdced9a66662e86910d82ff50725a97fb626484099109353b97fc32d01787d3e2ba308bee4ea2c8c8ae649ccf94a3e9b1c53d98b02319194927704b904316ed37a2d77df06a0b3c9ef
+
+A = 5cf2aae7bd0d43aaea244ef29ff5d5f78bddb9c7ea633f96642dddfc4a2ef8dc8ec290db003f1d11b3f90d03b0b25234d0d7073099ef57b9b177d13940c41a8d9c3bdf0a7f84948309f2a84d68cea93e9cdf96ee3c9e6310d425c0b03c40d01bbc7db7e4e5e39371d538e1947dfec6b2cf067bd99625d37233bc03a381eb41f50483d9efb87b6cb03b838189e9416fd0d1c64160ae34cfcd2bbeb77c630db0c571e05859e5cc31e398c9cccfeeaf6e1ba0f5f70e5c0fe199be108ca3d377b5c9128de4
+B = 13b630132e60e77e27eb67ca5845a3c48068d02598e6b0b59307ac26e5e1315520a71a8d360933bdc02a1aac05234b8d7a518a44e29b322bb32d466215ed1fefdc3071e0c1130f2c8e2c8080b021e6127b3440a395dd67e1f5515b8258a0b04421e0ab5600cf8d4cffe12fad441aac330919daf551aeb88069bc9d5fbcd0b364e19e0881c23230c29b291c7883d76f4fa0e2195b87811bc1aca3210c256ac2d9ce7ccdd0643025035620ee4832838acd4e4951b675cea702bb15ba8143e0d721282ddd7
+GCD = 1d933b6399aff53344bba97bd6cac0fc8e12028110b531cee84241c054141e551158c242b12505af5424a68487aaa786102eca79126e277f92dd5f4fdc4c99c97da9420406b050d1ba9aa190ea192c2d1486cc56d57e21a49d0413de50822f4e32a1
+
+A = -3aa9180cd6688887184eafb48dd22dc230738306f3b638ec8ff2b3daebd0fd4c5f811e5404676bf16f09338967445d154c1869b010e31b2de3ea21dad9fa6ce769e983960c3417122b3193d079b5f2732e59c6d8f7b2a6db7e889656ba005ddcac2116d192aa6952db7e3d5d456500140d58969f6b0a45e3d7ce709849fca19b481f9f62dbf309536ba07e2ff873ce5c5e2ea61fc1e2796c0bca9f90f61505db8b177991402c19da9f99ab3d83e4c4a69d41d7b2944b177cbb7cb182255f017cf4eada0
+B = caaecfcae71cf27ab410be8281378b8d7f4658bc3fbe63ea53a7a8bc3488c2ba846ce8584db7ad22ac923f01ef5856a18e5af2e1b1f0df3631838f252b139a6b08f22964a949dd20591ec735f8581fe46e4b33874613daf5e2c4d768698f966518ca56e392e5dadf6c555c4a647fc120ea2a8fca0bfe1fe1d706f25c2ec9df8aca9699f21b31bdb48ce805c9a0b05d498a764393b9a22f95d64c63db8436ef4477cd0e8e60e398662988bffb3ffee5e086683e156534554402d4fb692102f511eed110
+GCD = 26476f7570e0953dfcee79b15c46347b79d9400c1aa0c03c18100fdf8df79d8d9bf1bef6941cc969509f10b144fbfacbe973534c1a34006fb76c0beaf6dfcd90d36dff75027c218eb94ddbb130ad240b91e30099ad1c795248f321c066ec9c131470
+
+A = 11b7bba00ee2b94e3eeb03f89b40977e242c37a13f4284cc70b91f87e17d905a3aae5b60d9e9506c844d3d81f6e204d4d57304e690dc17303dc9135d51941645bcd47f62e97059d4da29dbf8281e8eaef04fbc9736715530c8cac368d5b7e305400bcdd20c7fbe35da2284d0bfaba3721809dd6d9a07aae45e356b1e686031785dfcbad42c2d44df90d1b1b56a60547d562d0b54b41ec7589dc3a5dc92d6c3303b6c5c7cd7428ddf5cdd9b4aa2bacb1ed90109ffc872d8bbaa9cd9fd884ca34fcf357e0b
+B = -d5b633efb032e68149dde2fdd02cada1c687cce6635a14b31fd8a21e1a222fd307ecdefcb34d521816a3ed7db3662270f8c20036be798cf90098a40119ad32b3a08555970cad50ca5923028da9fd2efd64c7f4c4da013c1e8399f7f8cf3b99120dba559c70ec4ed8b0b2b4ebc6bbcde716f5884e3af177901e8be6d2f19cf13ff6b0a893ce9397370dda052f873fd446d05bd3de3dcbb0c87575c028fbad95a5adc6ceb149d7da19934965e4987b6d3fbb1ab7c047a94358f7f3e42dbdfc053a7db1249
+GCD = 5659d551ddecb6ccac3466c4f5d40d7be89ca7f12452d6728b0ed63723ee77588fae505d89ca2283ddd59268267721e7d1f5bd1e82a74adc141db003b6ac217cb60c00d99240a0df6aad7b9fd9d8b1a8238dafd8589b052f5a457ef2aec4f8f2dd9f
+
+A = -695c26f5e9a7f84503f14b165d8458669d729db288b143a3de9c32c7ddd1eddeda69f6683453b49c3096d572900e5b740f1174bc6ce963e3308af5ed13721f035fb3471f146939b9130fa6299b8eb23391848aa1dab850b1c4ad6848d72429852a8ad324b57ba400ad888f9ea4d9c2710964cdcb59dae6a384ade2e9100a48205d2d5082b458f6d950413ce899251313f929010160199298c8ebedc791e020e440ddeb155e0a43e423e2227a5f10b6b2aa142ae5a2efc8a999eb8088a4a138dfd717747c
+B = -28a8e610b170d3b246436a6882ebc62e05661856149776d260cf5ae4e9956bcdd0fee765b119bac20a308ca4fd73bdb8c5f72cf3684458395997012b886e7556c40e343e09094246d968de4fee47819a365143eb13cbcc5df1fd6ab98bab489f321ae77d3e4cf7ec7f34555a35e5b1353c5bf2965eb62aab91f2eebf65a2f25039350ffd710bc8d1e66f857adc3e5a3edbe6e9bf573df78d2ae92b13d8b139849dd7571b1ef03f31177c88334422ca016f90f303c4e4286f298128d42f43c518876f95bc
+GCD = 1af5be2ece28034dc8e6172ca51b10b1cffbab170f13b1b3f3573aa2432f192cedf63fdfd291399202027244097fdc24165d417766d73e75500a580cac20e3e579f111b58d672ecb12a0bd3cff06995401a136f2deffd492b1d741cd8a5ee11227bc4
+
+A = 1bf7391a6135c8a61a80b3d73833050f7aafa87cad5a74be8caf6222e0af6cc68aea584192ee4e640b31495a4981a5465b9260103cf502dd3559b10a9104422051b6f559cd8000c9f415d218ef19fc09f7a17c98ad52bca1ff2459d7ef13bba4b0c802c28ce4f65dc0b2ea89875d3420aa23424f30244694f7365e094e304e65d149ba4064c85e3db83bdc3ce5a5eff5eb4a05ca83db90e355375e7e58a9411523320926dc3e2b6a58d663ef47085239f5289dd0f5df6dd4c538b4245a9e0cdac3074b8fa
+B = 285b79ffda0687c16cd380dbb6a9dd14692b1ddfd6b337c576f50e39cece9e7b45e37564ab2c57790f231f0697eca517ea455abe444f04312356b82c9c0ad2b8aec3d2b1d4115ff6ecb965eaa9046292e3292a546513eaf3ee030814b647b21dea92c3cb574b64ee8fe6f8d7064269f19f5b86702d05d92212c2c1768dc5776e54cabbfa2041b3fd7e54fd4c2cc35d73d283f27d597b40d075740dead24c2702c419d702ed964c1e9afc021d9a51d9cfc412602854853f669b8c909692866bdcea1ea0f0
+GCD = 1f7e11a8ce42e2f739a9dd09d3c186fc24be1fd22261580d491e4d96f70b83db80b91c670d7e36fc12e690ec7777c72d11cb0b76459609dfae523def75d4484d030dccf76dbf033958423cd05822b1cfaa3a005deba7584bfcaaf996d78b7925dca96
+
+A = 39e4eefe6c7e509f8d47c39ad468fcda0a2d2442ec94d7789c62acdc85eaaa5457197d8b2d36b52380d4e30ff3fd4f31ab6f07ae3089ff9ad70f1bd09b6b4982c9fbd68f8fd1224dfa16491c7435f7edd894b6ed9798643839b622615a5da088b1f723cadd3b743ef2bb30b783aa96cdf42ed9788cc959ea4757aecd8ccf77cc0688d0c79f77de623a86ebb4825b7cf54d1c278928ba37b976759c47d0077f5621c0d091012a05ffc4a51b52df1c6bb6b367829d8f72b3d5b7bd87bf85f59b34d4d7e8460
+B = -1f9174affdd8c1aa322d5b7b51f88d48e28894618470e787e8f3f2cf6a201848e5f414ef23bf5fb42811ea888cf94f19a5df110a8497636b1b031eca9958ee27f86cb483a0290e1c0739889b71f1dc6fd51151be52b5a43c7e5dd6415245384875172da04328f57951efe1dfc7cf2716bba73b14f7744298f17d9b005b5df2f30a28210ce479f8eec1011b8f4131132908eb13e618398c758718b5585171c60b7f8131b36b58df19a38a441eded741e3b35ddc700061aa6adccbb1f1be3c9fc5d2b073280
+GCD = 228140e4dd67e44b6487826dd57b30892cf69368ba0a14b540bbd13cb45f776763163196faca6649be8ca338b7192d9089b055d9498ad5267f201ec35bf24aba9ec390cd2b035c9395aa698e2f5441f01c2d7eeafdb9c3674c26145cb98ce8d2db2d20
+
+A = 644cc77d65b67b61afd6fee8d89cd9d00ea4b543b3c16b5f33b957b8324e8799ddb135bed175b14c3e5740df1beb7bcb6bd205d341c43ae5f80aa62bcdcf9d6a4afcae3b854f0fec8e173da51e67b027ccac2ec3044c0d0dea2d6a23fb8068ecb54b3a33654298fe7ece6e5fbca4c10b6cf33b2c1194a71dc5ca2ec6bee3cf91dd3485406f94681e3c63e8a9be439d218bae8ba40c21f8c007cc2492a72e83b2015e2f6d7a0d5f7a3a4403acf1dd11690f1d600a02da88ddb5ac9407de26746052333f4cc
+B = -158edd961ffc597e66816ccddc1f5704f160471f0415a41164252309181c39c02269f423978e32485ce961435adf8e987740e0d2021c9ff19e8374122fb87043d59be33fe3bd554469d2b35eaac461ba58dc5654f863e18d666b17e6cf3bfb3559937d99a3a2e1298203184d1d90842709785d13d79ee22e31117fe01795b2ee587e78734acc86e0d28688099c491103d1c78416cc6f40b084c941cb13353d358606e9d535a361beb727f10615ab2262bb2de2d130ea21215d154c38651c269af064535d0
+GCD = 5eae6aaf79de173ea82b71dbd3af23ba52676d8054223922891bd993ec57ddabe7e8ad9616d3d8a8d601a5d7513b332df14adcc699bcd642a093b2806a42f292ab186e2edd43b1c5095dd89d64fb9e6312fafa1a7d52e06b1609585d4a1fa50675efc
+
+A = -422c530adf6e4cb7d955842733b2e0a51761df56ae8d40a2ef13c8452de64cf12be8c8c496f3f8dc6155fe6bd07199d2922b98c345dfc4de57ae8c4b5157f9123e961bbe574cd48b5d9aaa949b26a0079404873bf1efbdcad0f1e8002e24f8a719f7928a5157c0c4ddab1e8a605f23a68b8a369464d36fe3138991531af0490f1d446fe389465ef60c650591b9ddd96669ed6e2980b43d4f6e3570a339dff90d5b6b215b179bc039402b7395961aec27d93549ccac1e1b14fd2efb4d5102725253bfe9768e
+B = 1bcd86f0cd8cc8f2e3b282283ed15f8f0cc75c28732d01ab368425d2215d7dac3e3a4adcd0b431db4a6bf790835413d0abfbe832956d791804596db415508b17ad4aae9da3e481286806777c3a048261d3bf59cc48abffd3025e9ea324797c374099b376bd9d7978ba2d0a3e8a622ca0bbbb6a698c09e0dd4d8d4b434c4375a5ff476ecc7d77557cd3e61c119c9f3c64aa27aa3cfe13984ccbb7a270d57aa5267e82d81ccc471bf23fad29b9521df3f3ce702fc4dd52a9d5f46b1cbaf3fb497efc3dff0351
+GCD = da26cd945d466a236b1c9b36afa60a1af9bcab7016405814858e2c954c763ba9cabe19adaed4fef51db1bf91dd415fc200598cd059a34da861502330db764cdac3c52137b12686716bdbc691ea71f2030ac99e73ba38df50b6d37aac0165a0a1f8249
+
+A = -32f808d3dfcf394d8b153f0ec65eb196fb7db0160623f05e712468790c61176c993bc5c43a36dcfdb9a90d8b09ff0a78e98e87f1985bddc8cd5bbce4d624add27737235fd3283fd2a5aad6c8119c6bb96413e84d372eb4ea4357a77c54e6b3dd82e8a35f6d380bd54d5c3acdca4a775930ac63fdf71f1fa4f9b8a6350057eee8bc94ec31e418c459843cf78e13c58487f01eb8d36aa51f59764d35abe2cab2866468cb3373042db0472c8ad6ce7aea3202777ba0b56a57b75aa050499117b648033dd4e320
+B = 1f7c102fc70a9e89cb47498aadfff197a7995a09401bc1d228c04630d1eda98e91983a61760c00fea04af1dbafeb9b60cf1c51e9168c655d32d11e5b0513865bcb367fd68497e53eadc4c83956b89afec9ba59b674d6d052e93c5bf7878c4c451ce0010bc7feb85b3d3ad20a591c72ac61a5e1f52254e952bd06a0d6be0a757926abd4ea590506aa2bdee018ddff8bac3825b328217f0207c001f1ed933b888978ab7430e504673908f5c120288a67e8ddf3b575a198d790029595b2ff96783edfbce6d6580
+GCD = bdcaf72d9237cfe427df7897474c708a46073930e0ca0ac93849bef751b168210b26ce12513e2f4bd7570b926d21a13e741c71522ea3204be3939cca85e3073b608530720a7afa37d3c6f4b397d5f2f7d599088f3df5f35c305e70e086aad930bc5b60
+
+A = -401305e272e7e9a14db093ed9d2b80b20018a67f7387f98e4e068690ee2ffe73dfce983ebd2640d6babd16e869da39358769292539df36b8bd0e9d1e41b8daf9b93df93e206378675df5ff112e95d56c5c19092b259e23d82cff13a34cd3eb418a0d9637c646a79fa69ee3dc3e5730e1e295bfe755425ccc22fcc633e77131a31880bfba24e7bf3723d6dfd248cfe72776e327f8f8fbfcd955dda598ba6d7d7d28bdc7329008326de5418539b6b9a229c9fc2ae9c51005b61563ff294441e753ea071eabe24
+B = -39aba6a13caed06f8594850f294fd43407c4a5f39c7b0759355e0fe404475cb0d4dbe1e9fe9bb19430a51724fad6bef02210fa51d7e6b3baffd9b19e03a2eec73821242660d11309c5914d7d75faa1833c58dbda2fbae80be5f6cafe9a735e14b3ae5340b939a286d242c0d6bb6787e41d1233516f4786af3dd767cc26f0c8245eb118b73e13226908ee7474db3cccd15ee4c4bfe97bda6d55e6f16f9164cc75c5eb3cca30caaa5ad7e9c555ded9ad8ae454729463bb6f27037f6c0a3f20a1d84dae548d608
+GCD = 296a1bc3c1848d61cc0944faff02a35e2330137eb357d7e4c00edd9fbdadb3923a376510eb1a8f9a93849578ecd8be586221c069ee590cf55ecd10714459bc036d72ec0da61a92a94f77e6d5731b5248a0e53a221f62809312226d7dab11c66b7e59bc
+
+A = 86712a1d494814294ce0d7fa6337e514acef90aa1963c02674de95ec2cbc8a737978acad7c4d831f340f0c6fcdada3546e43d10a23298beadd58bf9327c8defdc06e75835376a9d8f146e2f5c2e213a07cac712608c33dd1f250c11f597b901f640e9136652bee88f275e91bfaaea641c29469177c6888f34a9d75a8ffdd17834a4285e2029d5df943aaa47a2817b356cbc127844585a7ac066bc0fd9be34526a902bbffc58dc71588128025f4bcef09a15ba169b2384351b2a053d5e72764d5939cfb04fd4
+B = 1a069aef8d0bea0bd4316b3c403c998c5edac6272606335eb32cea42fdedec4a3263f2ae2d1c6b4a317e02f8d5eba7485ccf3271a6ab8ca365f47e092afe7c5999becb03ea743f308ec89b8bad21ccae53d678004711ce1ae7ccee56d7aa5ecb2fc910f0063abeae01f4600495b3e8d821d1982ed39e4274fa9babbee5ec89557abe7a0be9fb795cfbb295c065779ec94b8489e7af59990b641f204d53f9b9a991da4ba22a58252f89bbc7c92db6877c88b150662de4f3b10303cfab3cee2542e05caff638a0
+GCD = d457fcfa5c2c8d1386f68ad13e6a9721df829045d0375a34f40f67df66452e63dca9bf8ba3dcc270e95a44b7fa4105dbc0700f71155161dd776423def3b9373228709b2296a2237b7a630e9753374023b6538c41e575c32c6a63db5837534d2439c6e4
+
+A = -5e0f0550a74b8682832697dab0d6edd0d6b98cd049617b964fd663bdcd0299395466b163bcf6b371594c5ef53a94853e89dabf2856a6a9a8d02b8e8a33cbce12465518d1ca1369a6cc71397ce0a04aecba72a63afe9408710fc964bb56398c35c1f0e42396698049cf40bb99e58658c2ea8f7ac6d7448be7c2b3e0a05c4c3f5768db4b83d8221739b2592d5516d1cc8a6611c1a3ce2b33d5082ac82b468c79abaf3686984788301186eb7d2badec1b0606a77cf5d036645f762143c70f6f8d90cd2bd1bca560
+B = 9fa9c99fb2283316b4d44a897c045c862c71ad8fe64f4e5a57337df296839a7fd1525f7eff657318b5c6c049bf69ca63428c23f30aaa8162d68c4464edce2b1ab0671ade48177eaca5e5f8aa93831c813bf7769037470177bd393e652a2de7f2c7c9b93b2728d9d9abf55d3b9b8c784567c4477f646f72cb794a5f7aba80572bfa0cab7923b4783bb2407de5aa1dcaed5b5eeec4b2bc5bdbac83ef6f631bfbc2f8f4aaadfff07a113057140abb45cac7b14d8a7d6f212b303a1233cfedcfa70e14ee83e3d20
+GCD = 45da7875095d075995feb0bff8300b601b290eb7e3ad96c575f1260f6f11fcb9890707f2c82e4ad4ab92f739e8a38740db1899a5671be5439288aae52eae699e78d28a0c9b7ebe3c081bd7115cbe82c0beef65d0851bf22eabc9f331f7eca27f023bce0
+
+A = d26011e952ecdca58fdcdfafe64b56306f0f589f37a9ac094eebdca0cd827f0d9783cdb2e41689489f505cf313874437b96cff001715345a3f2f89881d762112d92832ed282a1d81f3bc3070438846a0bbc5eb9fc27087fb650ab6a7c8c92da898c6ae6d89a43b7f6c5ca7b361c9fe88e61f16465dc9b1d318e0ca72dfa8be261e16913e4d98748b416aadb70fed8a116db796c2d47d4dafce345cdc3c5c92ee8ad2ab4507d7404e454994e47a1f17ffe2d457a2c102bcb22bb99006bc56c696c77f0afeed07
+B = 908f35015d4563be793b5a956898a065218b6ec9c065156dbc5f665752c18ee78ad6115c8b05f402b45f342e34a9c33a77071e9c4b2950cb184c32024ec6c52830d79c107e5b6d1144ba4a2c0768266a49095622eab60a7d41701b883f9db6a887688b5ff8d828c9c0bb9829df7416ef2f992c8ec9b0ad5c98a1ac600ee3ab59228698a2d09fe3bdebe8fd0d7620679a4b69b8eba92f0bf2ade933a9e3a79d10a886254f3377a655239b160811d4e80b33ed04dfd4ae8672c92f83d1261469938d7bbddba6ac
+GCD = 1e1b191be6d4f3db6410c85a3681ab54d7edbbfc83b7ba899e8b2a46864fc159ee83730e7e45fa10807bd83eec8372f8add9a5fcd9a03320c2d5d7ee142a9ca6f1842d3da0ca3603067510df4b8285e35d6d12bef12a90ae773ed516abe0db6cb936b9f
+
+A = -3489ade7022c6ad6118669e7e5d24972ab558badda67a5b9a16d9411442ec8502a5c0a4fbc297074e3d2e923597b76416bd17fdfc1a7b49f7a0e7889a5568cd9c9b388b205a053ee97ff5f8a30507979e9b2d03ddb3f54eb97013e4778b4001eba2723dd9a14050754029d6c3aade4cfb824fd24b4b57e2a7b1267c3ed7ccf16ed9cef3154923f2bfe8ea761961ff2d143c2f8efd19185b131adefdad2c765b57984482d2c6b629f1cf13f9e03f223d33df8154e2c1740d48ff245cd3f3547ae17f62706f1612
+B = -7ac6dbd7fec276931ce753183c21d71d1d2b20a4931b931c9eb973b2dda39590e9b95158c47360b3701ddce8e843678cf88fc7ea90de70644070338725cda4d694918c83ed4c490770097ec83b2984d255404c95ed2013ac119e9e83d148e3fb9c0250edf98e767253890c8672b306c1b9d8abe438ef8681a5c6f60ebe86e0a2dbb961dce73a690fbc0143435bbf912a832b4df1b7155ddbef1d939f30113e01f6937253b6c768f6a0411a56495338e7bf2d21aa126c221d7a9bd8b1bacc7a16ec514e5176a96
+GCD = 7b9737769106c155ac8c20926a401649535e016f68b5732d9247b8498dbdfc49043cd2c8bca28c95e1f381c47f4b032bd6dc135a8ea1b2e48b0b4497c90d063e23df950d7d1fa6e75ad3c5e5d050014d5711cc0a0140a387c60762e9e7a8423c00d1d46
+
+A = -5dd8db2d99489626dda66b067aaa96f395a9bbad26a93176ecfe52e3a71bc0fc1b70b2c811445b7a9a4dd9a8ab30a934e993e6f18bcd01d2bd4a812f1473915275c9c5a5bbb67aa06be725022b99442715813454ba612a85cb1df6d48ea8dce8b896bb55a0bcc9b94fc1ab81592d3735415db2a6d3b8261c1eae2bcb15dc7a1f598ed684a4f6c7d40e78aab84b0c68d4de1a86520c1eed8e172d7758b23b9d42d73eef532be31c0ea6a01bcdd0a4b48e744d18c63ec0e3e7f49c9f219b1b92d7d12ccd4be00a0
+B = 16acd6d305384892e53eede09c586bb10d905a06ced4a0260be887c6c14d6bfa95edad6ce334b7f252eec9c66ac71d8976148acf50927f9ed84dbe71fd350c8558b0c67009a1b131d14e317b16d127e4618cc8fb6f2524eff9d4db519a12143a9259d1ca5151df2ef85f372d15bd8bb50e71b50f5399e580db9853ac14dfc505fb57fb2c6f00003853e23944b1db5177733dfc5bfc7601b05a83c508121a4f1ee6b7e617f6b6fa319932c17446100bb50cc82a0d48c9a6d5312c098c4a6e36328883e309961e88
+GCD = 1e717809d1cb24d62b0c1680dfae01ec4cf1532ed989789ca847af25d38e082b3e7fae8c3535e308811acbcd1ccd3a4dcc8178ac968bc9c3c4319c3fa499943e02d342e8cc84d5fa51d020355b052a56fdf407404452d560ecb575af580132f8428dec28
+
+A = -17877ecc7b471e7ae5c7d40e163946178abc88db713589d1968042ac4e3ebf2499dab854643d0aa5cf56fc102cf87583656da11683efde0b1f7487429da4ab0fa1931f8b58a7e1df14dae0b1b30c534118ea7e1a3673fa3fb1556ea07bd1c893ae663f18f9bfcfe13d889fa536d605fbaaed1576626ff377a95584a01be912424925f331aa2d9cd76f288e0d69359f7f4ba1947fdb00539c9ffc210629b6c55413807e103aa678f5e73a3797c4c0bf134d13c45f35ce444c3f506621859f2ca3fb66189571f690
+B = -12c4588c9da5e78115800d028d19f30a8a85c8c47f708dad881548fec80f51caea08955554cd1dbab36e62aed8f0ddb14f30fc6fb618feb92bde94acf67cdef5e9b4bd55186df482c50cca46385c7b779d1e17b9394e7a32571d6a7d1a24306444106a0364183cd972f9351959f7b462afe860956fbe36e93671d13b55c9c001273a01dbfaa5c3ae906bc5a2ee98485e8c531665fcf588868fbb2a7e0b84d06d20cc507d8edb01ed38065eb044ce556b21f3a34fc88b0ab317b27950538850c6c07b5bc5ffe8c0
+GCD = d5963bb1feaec15dccb278d3c47e09d9550c500a23dc192ee3a5e990d0f13cc0badc218738a7bde407e657bff4a979f7e387946483fb1f0c15ad85d6f2e977c68a06ca49a43d3bfa91b03707f824d569a60adfac9e607ac0c681208db395f8bd17f2b70
+
+A = 4ee8ad35a25975f31965c362c4f43350160e7909edeb21cd702caab319e806f522d511c4f15082dc88d70c210eb8127d389d9413acfedca32f9059a76004648871e55991c44be932f5d0b6d3d9686dc7ff14f411fdd605d9499473d273c3a531657de0801577db7b2592506d9f1c4e8f2dfd93702637dbaba8aff8615427fb6c7371da1fbe9cc753fb919f7a5caabf0e5f9b3ed1d1b9c8be56b5fe5f5057357a42ab372d5c249c0a7a3f5cab08b6f4e53f8d0a1cc7a46f0aee86be2db9d29814f69f67fa14a364
+B = -196343ce38250328c3936bcecfd807604210f53a5c72b4af4867beee558604769663c097afd442c5ff7d08d13b1330e00cd82b84e2ce0ce45fdf77d040379800bb95db6c09753f58d41b1003ab4e90d2fe32443cc66af3c62225789164a64519f715f85363ecd5ee6c37dcbd3f048f92ee439f92062b06edc43fb2b09e0825054f0a91cb08a66ce0981c1c41d19b5faffd3b30334a6a300e2d651e11e60e625c906474330e1ed167e33bb1c1b97395279168f52a6805d09e66f1a7c98de52f175dd42f4039134d6
+GCD = 1f69c9385e3538c6e25670d9a0fe0d2237f84f2cc4b131c7b71844cd835206c3f5470bb2b6d47f828e3336dbf94a02927d692c7f7569bd2a69fcaa5e72c0acd9665a02c97429d0ac5cf8036fd931f331718c9ea1c5ae9fa7d2d359ce862bc76e15d45b2a
+
+A = -27c651e570d2c625c7b4bec0841fdd09675d4365ef57796ce2d9b469733aa20c50e14f3cf665e8f80004be44823b2b986977b4aa08d633fc32fc793e3a9d60a19834b5af8aac69a712286661baedb749baa6dba37835897d9dafd1fd307da6c116b89ed6010cbbf8685fe94666c1ef57c0f833b21fee4d6c5182cb157db2ff74ecd2dee6f16727edb2b741fc48681d04c94c0df990771f140cb7f6c0a25d4114086ecbd5965f1259773b05a60fd55e77cbadae4bef733fc06bb6a834242729b1e3ecf151949fe04
+B = 3504084a47db590c812c672586ae99635dacc48c3a42bdbfc706120dbf0273c08f73dbda651c22e7196054c9f2c832f720492b329873024771b35108a9d8b1263c77241d636df47c3590cc8fee14ab3c7d8cf18387ac4ea616f954a3b90e296660515a9403c4fb1cc2c36fe6491366c525d224339d44887771221aeb08ea1c51c913ec3f2982b257aa826404350568969557a12978951f4aafef2566d4a76873b121df9434f2afdea96b233475584b698d74a07e13224c1f7de10f68b0080fb4c6db3ce34298cd6
+GCD = 519fc7daedd5d32f9351fa4764942e1568b78f4469fc2a8d9e43fdc9d213aee766a001d0e83f80122394b487e3831a0550772c21ce3cc69669578ba63f79c75fa4ffa16a8c2dbf04049ab59b645efe17e36c6388957c4438d02409383dc96a841211efe2
+
+A = 1196d041205af939a013b26bbacf6296bf76833afe634d5cf57827710307e98962f8757dbf236ce11a8f1cb94a1a8c5a7a4d6bf7227c4e404941996e63956f160e0a83b5c2a3b26c9b3d10050375977b20d5e61dd752b6a9ce9b733bc744631928a092a5f1d06d370a1bc0fe7beb17e6b742e7ea3925ea2021575930dbc05cf435d5936e18b28dd21d80aa626dba30ef13f48d86a7e10de95e3f9a9e479e3709da31310e25538dc9a8ed344f54f269250a6b95262f7a313a11fada099dba04664a878f5d2f121da2
+B = -b4643d5232b27c3aa1966d5d19a2b38ae378dc2a42d8a281e37319dbc9683763c022b508316e150d7ee3059c196a50d879cf0b4cc763c38fbe6321fb69f60a23e35287286c304ec77be43180a2e68fc4a315a54a12bf6b829e3b4823174863dd0f25f3d1a841101f7da4e3732d4b144431d04d15e5a6c4711f35bf4da4888a7e86078fb91b0cbaf7c63ccf4bdc19f19ea74f9ef30c6a41ad832486af4f42130c4f6d8b9b2bfaa77fca85ad60fe535ddcd7dd720bc0632f3f487f6c1f106099690aec4ba16b435f4
+GCD = 61e4ec9f6e205146fe076bf849faceafbd0de3582d6597283760b11e01a80257807d805dfaa352aff62805f78613def8b79026a457d47400b671a1831a91866ff33da9a5bdccefe7b2fdb3cfd3cd6f90b99dfd7d30e7d80b8836f645333af36754cf7fda
+
+A = -691ae24f1f95467e2bf85c1bb179e304ee83b1d50f8ff7ca0f6f7f42eb248bc59eab3bb6b990179f877372493787ee590efc2f0a5d2bcc81566aa4417e9f082943b9cf7fe32e18bc01968c73af31a2cf0266599fb270316dba50125879a11ee902ca94b8754293bc417dd183c145dfe0a1c57e06f1ae40e83c444fa56b384b84610da99489ff2044057094ae5f6e4755fa4c84dedac84365587f25e80e4aca375e29db21b3839b08865ce503e5d48859d97b253f09933758b574865b4edfb5e7962e9cf04ac9f884
+B = -2b4a2dfbceead3ee496271c6129cb84f99fd8d902d2387ae9d1da853c9f72cfb2a30dfaf85100063432afbe5a68f65fa7eeeb0661cc083eb4c3c7cafd98a980e6de9a59333eeaabf6251a504b2e8618ca570d504f8c9bb7c5d2a5ac1c7e5f76060d06d51d2b933aa4223069fe190f8831b28d7aa5df5ffb9bf707198c49d2210f7feb24266dbe6dbd12bacbd41b6c70602613316bc6ab68dd439035bc1a6876a9098a07db89f79e0d01f1a2e0abbda496ff6dd7bd2c71fa2f4aaa9d625cce015a5f06a1c5ae8eada
+GCD = 1c80e95f7be5d775af933d8fe31adfd9bd67b7236ffa43fa10a51f5b4c7e494459b6678ccce88d29ccd9409d1811a60f5bd92ab23269440c33b76dc2c6c04becaa2afbc59f9300f497d4a32bfba010d847bbfc5d04b22b8c3a332d528b71de3db24cbd686
+
+A = -f9990c8fa318f1f98e187dc6eca4075ce8f50d1403c7cec2a5c0c1cc5f74e26fe5879322aa438258f776a260471edf4c1cc15a111a0513fa47c4ea6304999bb5321b785b47aa68118198c2267dc68ef8a38101dca4a5cc3e9cb8b876a06bce26f96c819aaa68d4266e23db7ca9e75f9f5f670b028edff16fb8316d50a5833068d2a561cb408f00124c9b90e7986fbbcbd1eb5bd45eee3da02cff35e8a78888b20c43f8fc52a0c85bf9b760fc5cd3c9507dee89cb3a1500efec9467a1ddc6eaf61b113f4621958672
+B = -866e0687ed22b6932c988987124b9b1cffce7223c5c9e84fb8da17f084c747d46264d4e6df18b9315d4dd35bbb02bace7568af473535acee5d2f9b47593858f693450927a06b9f8efba1fc1a2a186fe4f7969a6856be1c01b882a34095383b8589c519827cd94a34db5b19495b2b6bf79cdedba9ecd65b5d4ba445236d4046a014ad448626ac855699c5d30bb2780f84805f0ef3c5d18f562947b453c2f61cf561c7237c59631428cf3f7e8a75b6bd16f10edf70164589f6047edf919bc8555b44c48d7d891b78dc
+GCD = 2040d3adbd67dad5b7448cbef6f5a0a9a1cf2c30e2a43cc84dc590a24ddedc9a7fefbf35ab168272e88410c5c27be0a219e8bb8dfedc11e33635a17186eaed486936af01c4e1b986e7853a2a61d9cc3f94d12e93b9a45660f90e70651fa1fef6b43ad9982
+
+A = -2796d5683b25d4ca29f1d39c98d351a88d3f165fefee3163e66fed6ca5ee50373c4be23a000019546aaa510009b960df63bbc64005e56d15eb792c9ea627f66068d07af8611d8ea0359bccff1266cc3ba5654928b063115d67b62e8b5e76a64a08570b5d46ddae63e23ac0226a5fa5406c7c634a5ed7688a6b440f740c1be800a8500587cd0755d2dd92db0333812275823af3ac6e4482a9379919d6ae78315f6e963b902dbb6652ba75621d13b0f703ae70eb6f3a00ccf6eb320730481c80698f0bfe17aa08d46c
+B = -21057e4853134cb801ec73070de0dd9451d24034a8599e7236c06a6ce0d3082704d958a2a31bfcda646880899ff8ba2b6dba2f2a416f58558370eb79f2fa259471a27838139b8551ba740fa2e9194f800cd6a950d05baeec875a5d6abac69f48cd1894545fd4fd10793e67f2cfce85ff3c2def2aadb25bc5e7e6999857229612c8da85d55e3e6b9c33794df967499acd0f6d34c12f4f1146679c5941542d820956987ef2dcf6dc9e1ea00b17fad561d439b274789d5686950ddbbba784c20e4fff57ee8cd48ebd20
+GCD = a6c16d6eeb6241faace0d5644ca80901d85eefa9c97cd7c04bb762b7dccc41ef49f93c273788e52b115084854340a32a56fe271f7949a7639206207c0cd09bc6f0101bbab59a8f4875249caa3669743231ecfb5adb0e89d81b13de77e6ccfdda58ec8aaac
+
+A = -171843003dacde2d35330ebe60f7d34626ee9bd50abb3b57b169ab2c91f9ecc47917f476a7fb528ccec0e30709fb98d3084a8e3587f38c84288ed029e48d4cd0d8a0aa1eda442c86d09ce93214354dee58694061b3a5079217787a46e8df25dcc8850c1a6eac9ca08406d610a067fb8a662a62232a81d7df46b71157e99f307f25fa3dc97bc516e06d120209c87aca87f4d04125075c9e2a73896df2e4f87733d3c30f45f78956ed11c98e4992bc8f4ca8410d0101ce6b0d97e9fcfa94d1f902f90d7618ca9e5fcbb3
+B = 150f378faa79443b9ec77e1a107aa8a7bc55889797353152ddc2949e0af76e9ba3d2903559c369ad27cbb025895371744aa7544bea7c91387385ee72afade8eeed0da5a3bd362b69ff34b3b65d701b7f44ceeb146bf6ecdee8c56e3ac2ac3ba41d7ffd7f62bce95aa1907974144de26b6ae1ab190f27f839473d74c10f0756a63c9ea525a8b0245daae026411a713aa07c90bba1f443aea713eb102c9bfa2474b744a438f749e39e45de62ec83d1ab6429e0037b197552f693a4fbe893dd9c7284a38a542d51604bd9
+GCD = 62a6cc76ab1b4ef8ce94fe7098254ab7efac7a01cfc7957c0accbafdeace1db2f8ad559060a6b69edf0f4f8359eee7f7af1a1ca50f39fd9469a5ca83080e655e00059d1ecb1660edba16c7cd088bf7aa622197233b523dbca4922d26f399cc95233653531
+
+A = 498762cdd4f41970aa352e0c6be4d444815399ab3067a5769bddbefe475bff53e3b71f50ab3f66eba9974751f9e12965256ebfad4c1f49d64af74b99da7235823affba624610a4b66f7e18d556c36309360003b41160c1bbd42f4971bf86ee2a5e04770c47c24fd660d93deca7fe2b51346aaccbd0509379d0e96583686173ec0fedf1678f02023089ef24e095462f6ccb3bdc58147e004c41cf0fb7fa843b9cb06c5790fd770353bb161dc9ac45dda9d869496e9ada13de24ffa47d0a08819d18cbe5162c1df399c1
+B = -4a6cb4688726892554ed2f66e32f6ef803e6ce25a19bc37efa80a291efb3d24287b5c9aab66d6e7ba4c920403df0a4f9a94768302c3f152b0c1759a4395d6e6222852d956278f7568c752240bac4c3f2fa7f20ac95629e3da196f1794dfc148e082f9c448f40a8145f37d1d514bbaa280b81a012fc34550a7fe4d50f118ba5197f11e216617d4ab15d9e789f5c8dcf3f8e6f938c130556c06abab0d41a06cad93267e4845f26dde0226cce36a7cd94ed958897e5183eb4b99a5170a7bf70368f9c67ed083d8d244464
+GCD = f7e7522cb3111f6c19f9a2a523abe270170dac23a11a97b7690d3c8963ed0aa656939fbe29868bb41d73c79a96d8775c53ec399ffeecc09cecbc453f32e1a7c38b9289f917e29a33ee713313581afb8ae2648fa45e06e5913384a190ca4742acaf92586a5
+
+A = -4856fae34e2a2e62d5c5423010aa81e76e7e66ca1557d9567e09f531c2090b54d612dcb48f332a206d2cf0fb6eb1a8f012fb684cd6d7039f608de1fa7c3b271fc0dfc104d271d62e70c054cb5a7c1dfa65fe5ea5ce7bf286f0f106c99cc124c4d0aa243417bf3695579acf8d776ca799f1d11b95f039f4155db09165fceace9695cb9ba342b9526d4007c8cf0dfb5b52a612a57745eae00ed64b2a52a7792f89f87994f53dbe877c0276daf4b2f2fe78ce13d2d07f2639141e6d013462d7c9b39a39f5fa103316186b
+B = -3ecadb4521e63c5a5f495d6e70d3bbf72f4f4c22ea1b4065256e0438bc9d1eecd41d1fe799718449720b051a12b0dcf57d034ad41e1c48e258651c1222769d611224d2750fb153880cdf5e9dbf7770ca3abf79c9081f5bbaa1f39becda307ed58491a3f263f367b20d78004aef27852b3f2fe3876adaf99a66e731981cb6e3b054fdbf230fc3659a8c92302cf21eb6a8970c6e933f40c9ea25d6e41d7825465f6608bde29a026ae09ad1d7c7507cc5132d834e72761c51468771e46d76c8d19cf0df241afa21812062
+GCD = 1004baa61c90bc74ae6997b6a6f38aaf187a03599fb233a49cb992a82fea4f72ee3b6e9ebfb7de41b4c97720a1b6503bf28b30ae613167621b9109da976d7b74d13e3af46610c810da3a959f5b914d504c55310ce21f690965b13811081c43395cc03d3237
+
+A = 5622644a61731e8c9f5380b3ebf67b4283066e66b65cac981f7ff25e1081cd41c9aa50394dc1e5cffa0b8d3c338d453c013df29a9d10d1782cad1f7ef4da553023b36da6a927907af9acd113a14a53f2724d65509e29f18939c641128488fb68d724233b8acc19842b605ef510b539ca5db7722ae0d95c6d702d1361e72ee8abaf6671cdb9a0890b544a72ac1a363bc95b325a074aaae8a9990be3514a00a3f361a34bb83a515a5617c44bfb2deb265caa89790b360f24ee03145883b9f34022d3cfd06ce97b0f804bc
+B = 6194d8a8618f6cddd71ca05d06b9952caea8be3ee209d625ecf024e2662d9bab06c31050eba583695908ca0f794e6a2a6ba4a3f71d30b8ca493bcfa884c3a1f64ab85c110d6f89a2e077f27bb7b8205e6273c185a7cc39a31453870fd3eed72162b276f6b2dbfaf5dafef3eaec04f9975a283e3c146efb40ea2538ebc75f36e11edcf4a2247003294a1c6d0eef7c83131a338dabea53f95043fcacae3d96f51fb2606ff688121885e51bbcf90a35119cf16a587130962d7126653020e4c88482ff4851ef87aa872aba6
+GCD = 37254ddb948c44e1539715650fba971c107a4cfeff0454424b6468ee595f9ababb6a01c5b88795e665c28fa7d30849faada5f9b594614e02747a46197a449443d0a5201854e367ab0bef206c05c74fac918fc1bde784d76655f280e41d243180457175d806
+
+A = fef6c34675f1f45792a0ab3b547fe93cd2fd4d7da43f421eabc41c99a7930705c90c1b3b0fe0f235ac98bf16d2e9afcec86fbcb8293ebe031a5cdb880918439db0bb6954f90737d377e8dc8c97fd23f1ab6f1d46779c7c25b5e8145fd5879902bedbd2f6525607b385c10eb8c7df074d78eb3890207140c518b3c8066914d5bbf8cdc2f7f5aebc2b9c17ebffb85b95a0b5054c08449e09bf1fd7fc704e2fcb83221d3be05e7645b96226c2da3057099bea2a731c9a968c1213d7cb04bdfe35641f671534ac699b850ed
+B = -7013c25dbb99686b79bc9463485c2f47eb7b9ad4e24dd724cbbba1390c43b06fe94661f6a2eeea1ddc20936841208539c87f41487ae977e0893139e0c5fbd44a60848cb2c9189c4290c3182c293487494c7965ddb66b0aac6ee85d158e5531eba04f368f3928f73072fd8200199d94ce619a0c5d56936d8f4969187b11818ea21cd76d75d3d0cd6cf5d5490b2cd622dde3f1028ca5eeb7f2ff444e4add8844b54430dc8c912cf7ccebfbccc5020ad4303abbf725db805835a0ab97b4de1cd9df6d5802ac9c98748977b
+GCD = 73232880d57267ce0587b30ae15b47f7fdbc67f33263500f96bb975c6d75c91e90532c26ca5aa26855e51adee5868216cef0f4b9eccb7a4049d663c81c1328fc47f32d1de240a0e337cf4d18736c1f34e5cc91bf1a3707105a961b82732b62e2a3996b21c3
+
+A = -1ee51059732f32908bd36bcc05b60ad4b4ba9ff91e0332059b0670adb1cfc73579e5bbcf1f4a014e5acadbacd1883188a3444588cddf526cb67661a85868e21215bd3baa56751425c3a3bc485d4a5b281488978d3e153e75c5daa31b088a717e980c8a070e9c43e00fc61a6a7710a8702a1b1627d2f9e2f4775d081c50ce3be8420aedb9bb843a11bb9f1762589cc67ec382fecf95f675321701f112cac48400ab5b6837cf9f68b750178edf492e7dbda5913799ca6be5ebb437deffcbe812ee7c406eb5f1d8298b698e
+B = 2c8f835444d350601b8045901796b01991c0c97701364c53afd26f57ed43eab5eb25d7288cfd25baf2736c9b4d6ec77b553565cc794d001a342eeeb5810668922a0ca04325c7965ea603baa1bde0e32d33d71e6b1ff494fd17a8e0adb1e0f2cd48dcac522281712552286eee79a209bfe6097de097500ef798c679867ba771ab4c379475377c130476099966664530be6ea9bc7b9877519f3478ffbfa8d22d9382198389747897b600fabf0418790699d2b94008c0e00765a69a58cdc24347f8ccc1b50159526e740fb0
+GCD = 104eb83b6ad6e2860d3ea1c7ab438e266c2915d3ee1397b98f508c0ee5cb4cd06627dfe839c667e7f0d10c740d1a081c5e5fc3afb99407063284443f91e8ba34c4c8a0f4d54dcbc8c2bd02a971c965d298cb49e065fd9125ec366bb997f2b76832f8b499036
+
+A = 21507e334c37f22b9d70d37d6255963b03e6b39b9b5d09661d03c2a0184b1eea7a4e8d0bc2fbc9403d9b8830ad85eb1c4e22610aea1364710e67b9257c2d8a5df6db9089294d3e4d5dc6cd6a472a732670157d2b39e6ee32d5e11e38c919db15105af99f903881308c0047e8178ff6ab781176bfad1c8d7ba607a16fd7c2884e6b9bc71ff2a81ad7753e18c5f9011331afc55d1e7ced3cc281ff90da09f085b75d60c649b2bcdcbffc80217ff805ab55c78fcfd0cedba38c89207f8754e833008168f9a84d57812150c0
+B = -13383854bc8a7ce691d2fc05a693f81f63a0ae434d598ba2470978160c317f20b0ae8c960090263f5054bf00e7bbe2002e02bd4224ad2179b980a3b8e5ec9b91e3225001e8f75ea10d2baca94b0f11106a2f688d316a68c955155050829065024e47cd0cbf9c31a713f46001c819b05cb2620c89a5ebdea8c1cf364f203a372600e165e4100e0d7b883fa9e9c678a4129b3fc9edfeea3e18adbdfd4994f24e08558cc4a77f3ad0a08423c9a7879a422682d80d611a575bc0aceaa1448d9b1f3cc533ae8e0b2feada64281
+GCD = 178049839cba8b4302b23b31005fe001ccf8c8243c4e95d883ded2f42952db029ce0594288cc13c86977744155eec92fb8bdab65b2cc8e5b1092a4fbb524baa3143fe484b08cc3a875b6e96fbd42536369dde2fe0e58016566c7244ffb667256c23f196d6c1
+
+A = -5d92f64dfea1704aa7317339765b0b42b4450ff7dabda93598749b8828eb90ccecdbe630c8ec41f4bebc64dfe288dbc6492f764a85eba22bb36da1517d5b3861e9d821474398e25751ae6ff1f767d1a2247f67c4ad286d6f77377f6d40999071a69d35d00acd2cfb78e4b12411007762cadf3c1f076304483a08dd8f7b6b3b87e4e2b69e6b6a35a457e5168b7a5cc5735f30dbe042f90eff9833cb8c0bc84460600c4269f85011f0665d3a3783526e4fc87e23cc045d7218384acce0ea1397aede30721e06bdb384beea
+B = 2d87714d5af41bac703033d870611b6c6a309091181b2cb08f5f97b14144eed5d01737b1251b57df1afbf720c33fb66d2856c1be043cdb5647e966ea3d291492dcf88f723f247759ed609dce93b801e678fca455a7cc466b7911b754dd27f1ae6774f79ea3d0ccd73e79f8bbd4620e5a573a22ff1b28be166ec6ebda893032082cd6766e94762338b17bb134dba81515ffce703a92ad4cc2f7863e52baa10c07d754088394c231b07cd8db8621f4f00012c13053c6abd73601d6713ababa9c633ebb9a4ed928cf1f8a481
+GCD = 38b665989165a956253dc7819a03641551e91d990487993def43ec54408efd9711a25e27e792b251aee4eed7a45619313b95967982658cb827bce80eedb0e4ae5f2b25a146b17fad50f532f76c2923d3bd98de2cd605ee2c1eaa6a5ee3212ca35f692e52951
+
+A = -9815c62e65eec3c3fb7e2dfe3b69ceafa71b155154c4cd9927d52b3c52f49a6b2621a1d8ca9eff2f12257e0512827a1dc28ebc7f3c2bea12a82a1c103c7f873eeadf81c574ab5feec9c383a8e323c9a436ae184ae4aed43de2b8cf01a2c39827be75950eda80bf5d15e7096d9c2cbe520cbc8d6729e8f436ce11ea9488950ae46a998560ba1f4a4293345fdc8431e4d4c74d4ccc14ceb88e4e1773edc85491894f88e8e56931b460e7acecf050cd925316107f7713d2070220a1c3ddc397730940533574bd6f42af744e2
+B = -368feb51dbb5906219be08f069739f5cdbff5b58598f3383015a995320f345c8491bc6830b86913943991a82ab7b65fac430dffd4e51786f7d73cf5e2d9c6574e88c0e9520fd0002a7f7fa5df3e4f5824058dd171c02898d3d3a4f8a5dfb918c643b29d6ca3d04232af573dd75f91dfb21d74e751f2982f139d95b9f371fb844804579397a14d6c23847259d9adc2670a6a72c865dd1264579113a1488e077a758724621d061d159a07a5bd78545b3954ff7129f8bf46aaf35282d2849ad2faa31c9c91c16c9d7f2d4433
+GCD = 5cfb2483ccdc5007309c84b9b549d8a885a96d05f06caf97258f11690f0ea613497b058464297d69b3dae37da878913426fe5149be90338985557631924969e5a095e4025d614d5c170935c2cfd47165844481da76108599ce055ffba4e7737b2da0b68c559
+
+A = 3d168d266eb73d3862baa050ba67aea7ee219268153f2751f932d0744faad7a983752b8c8d645e22582138bb7982f383da8e9f6485dc1633d870228107523c9623c4bfdb910c27573dfe89abadf569395a4c8739785a36ed10f3523b4dfba29fc1dcd164d3c8b5d2fca09fd24b4bc571199d7c23d932f74703e9f3dd3ae39269b113176231977dabdabd804565269c8097abb56cde74db785f40ab9f73f0a69a91c96decf8668e10ea0bbf56bf4824701a49b541612ba8855923c58fd796c2eceef20d78d3c27735238b54
+B = 6c31b3f24263e3d37bbb5d9113f0524333c992417495b2b3e247580ce55267ac4f65ca4297212ba35a385fc96e01a3ece7e1ef7f2187703686dd7bb22d28fe77697ff45cee7215081b31a33f1b1b684527c8b02bdcd388f9da13ed3eea689d36519000c65863488efaf5fb54a66141b3caf93158af0a7fd4be05f2bf9a35c551053abaa011c141550622bcf9fe1d1d4d7306a23db92c3423155498ab97496457eef48a40e45c469c501aff1511a71481c1d5b8ea84fcebf52f95551bcc8639d4c436853b927657608d8724
+GCD = f7977aa28e4dbb83c0a0bfb05ac1282ac6b93d0ce91f7f0c88586dbee6df920b8dd31d13b03574af99a027ddaa91104238d029af809ca9792886b4b6864b52e6f68262f3a272dcaea752ed818b259eeb027b695f39c3be795c4c76bf007866f3443b91dc38c
+
+A = 24225db6ca9307f2bc6eeb1d28068363a7dbe61102ca907e226e5f39668dcff694427894839e24415adf26de738b668a8a87d84f59b4311984ae062a44fff7038a88355f513c9f4e8fa1612b256f15c6ff86a24ed0cc02dcce5fea5769854e6da404eb7d67afd123c85c3e52245288d092d979cbbb62e6bf2b21c0c2162cb409fb0240eda74adbc7eb75f5e0704425bd4d04aca84dd4fd4938e2d003b9ae4a1a929addbc287845dcb65a8360606d4f4e1c48adee3a50a82312004a2de471ad6f3463e4af38e2e0727d680
+B = 122fe4639eecec24f0c45b2a3c71300a865480827ac5c73af917ceaf168d353b5795fe53c66449aa568f11dc25877fa04e3dd5e25a1cf0e2944f23bc5cbc3ad73c0e43e54cf0b8eb90efe7930c49385ebb49acd395b936d8b04be2677cc9178ba2c515fa60007085f87607fc7b26a75f787db0cd909114df28638c03659ae3034fb73edfb4100a0b838319bfdd23b2ae6552f591f99ee483b9e21fad115331d1e774e39d65877c56efd4c508e161b351ef2cd21f18e40de614112c9f5c2ca5a421e17154656761fa48efd60
+GCD = 247eed9441e3a8f7bb074ca1ad236d71da994d4b7b3d1d442620236bd36586e150bf674ba23e92e4b5de395c7c6338bf53b229d1ea08000e66b23bbbd4b92fb7a1c6c32ff2a4ccd727774154c734aea22c8286f1e39a7677fce72de7c76a76d07b8640187860
+
+A = -280761750ae4eb940c9fdaa468842b33603926121746aa94b4d6ca2ad47fdf4b8ad7b2e3d785d93370a829c03ee80203f542486367a97da7fc950c2b503aae2165d4a9583a93465dee0c59ea756bf744f7c424c6153fbcfdc1ba24627be33bda724e839d27261ec084886eb04da759b91f51880762b5cef0e757654903cb4977d25a4a1017cc95e58b1c04cce6a138ca5dd1d168681127d5c6963825bc9f41d16fa2c845802ae0a62b4431fe2efc947c6898501830f261f86edc3ea16a50975a8acaa39ed1ac79e508217d5
+B = -2483dfe0264fdcdd7d3b6d11bd932b4f38c6ace3eab93a3831406dcbbb17ada477e4878666e114991d1cd9282e20fdc01d6e598a48828633bd78c6c68febcf3b6be8b67148120d36f9f754e76f3d7aa2c8115a82d36f5d5a4711ef017b3a74a3ea4f154755c8e8cb017173fcda8dedec77bddc2b0f8811684fb84085739fc15826de6db5990af0f5a9b90431dce6a558d4ce394fc421764f733a65fc98686c3c0a91f9e2f276e4801bdd7d1b5833788460e65f99571bd9760c6552c0014e061365d8f719f26bc8630059e4f
+GCD = 3f2bb69be2308f8d9bd86f0d4b4572f8a450dba5225797a4d9c4513cc40468f5cf8d4ccdc55ea555d8872f00bddb747b4e3c836e61e4759b21bb7efdcef94e9f4305d6920f9f2f9c7bcf52a8c9fc021e9fb2b9f2006d9303b21b1e47d1cf33963820cede3d73
+
+A = -107d197aeb03486890a3ff40862230f72ad68c09b60c449fe70aa75656d76b05815badc5c5971ad6b68ae7056493a582a93621cd7b77dbd665c92e41543c239656347391d7a17582aedfcff72244f712e0dc9fadad12fc9f38b0acb7d2b3265fa28f28e86dbd10c5d606c88bc9b63491ea7f40049e8313e2cff6efcd28310983527d3f2ad12e45eda7e6b1d9a36aea3718377f11aca645f64aa1626d8ef7a267e2b6e2571ef42adbcf09791f2e103c054d7b1a60da51d44570b686453e42b15f7894c0cda07a81763b8549ee
+B = -4d980614ae5117edb7937aabb4f912b1564fe81a1da721d523c52cc44bfbf337c06eded8a4ba67c025af629c70d24a5b85cf1e7ba2dbeeac9268154f4a716466631b85c74d5d26f67913e4e2017dc57b9cd28cb78e866c363e91bb2ff16a4737b74d4768d80427df7aa9fc29a7da5250da340292db5bd4e3184051f0e812672772b8f1071147ef4b5e961d56db7e65aceb5ccd765ef1dfd61ea8572855bae2eee141cb719d9c72fe2631092d7d31cf2a54abe2a2ab4d8c3b5ff99a8bc026f4639b3eed49fa244d704bb4bbf
+GCD = 5364a6650e9d93ab6a05cf7394a077c9e07afb9eb842abd095a785b6533b2c5fb529eab4174c3a051e6b955b5fbd9a99c3be3b3c44e714b553c2039fc0ee378e86d5c057a73204549e901306e82a738230c303e8962f192169a4c82f5279a8593064c071a7f1
+
+A = -290fe19fbdc8e36c3e87af5b2510633c695da8dd1e8baa39ebb549fdaeed5ec44f615d4ea4b66458a2c6784faecf4a9e2d6ee2d5b702916dc7a9d7c8694f65b47b26410fbafb99af2db93e83d6f80ea7f79f88df5e24282acbf0f9a8c76a8888258bd168bfaad700d559e0073ba75502efb4cdc6c8272087f17998a0c4c2bae5f7fc33ec8d6f3e6b183ff05fd72d290c9c9de5cb2343dea97fcededd93f0e2af225346cd311ee6787113b0f8d29a8b6b0a209be1c5a3dd5e29129868c73116fed8f5d98a0c002e0d5bec0658
+B = 22ff217909c505c7cd4da00019bc1985c7941008ce16a336c911a42ad7761f11a4fe76854cc66f2bdd8026116ca425397ad753d4be0002bc9e79740118e7878bc89e69b22e7dc009625797388dafd377c974171b03acea053a4cd00477733f1e9bab4516a56bce614f6a97b0f116ba0e3be486bc0f732326b3377174651488a1225fec76c601aaaf82967320ec508f3be4f94369a73d7b66aeebab080d92eabae8f2b8db20823365ebf006c4db4bc64e1f1faf0aec8057d224fb30c846fd784c72b91500a31b1e789ef04a80
+GCD = 147486edf3c1eb2c9ca713d33f07e374234d76555da57ca46aa97eae817e1283c33b3bde1e35f797b744ae53de1406a8421188a5e29fbb896f3649a206ad35e1ece45ccf851873b2478537dfbc130feed4f3dae6a07e9b07ed5487e0b45055c651f8787c42008
+
+A = -314f4a18611858ffc662b5c1260dfd6f3c810be13cc66cb455609c0594c63e49ece1e7244f1f56047a55bf54bc247515abf3d5003f063a3e214b4569c61dd8b0ddfd837867c6cc550f7a332a8d274463c5f2f97b5b15d0c387acc4a7937d923c7fb93da638dbc87734a8165faafd8430a16bcf6153fd8e984eea856e406970cef241e47ca97e3cc9df9e0ec09bba1a26ba25d522c792dbf528335f2592cbf509fb72b93d3e850efe4d04450c5a81ac7fc953439893a38246fde3da68cc81db889ac92b13e6e34ab3eefac315
+B = d8315decd7a239fe74a6162a4ba75cc8a64d9cd18f5bc91b9026e6e09cd37e196e584ef66c30ece3848d6ea0d293973bdf8d6a5e707e35509f0e5087235ef5ba5788a1ba5e4dabcbc974f5474bad5e92f0c8eb42cb220d2c1d222217338c05457dc0bb0d6d8a7b0e1025188120503a5976eda63ea1ac9012699539524ac16cc972a054a2adbbfeca181a80d779bc07284992a5a37f9efd710571e93de1ca41b70e3dbb08b3f59c4f24cff30e1de19b0881f37fca2140f015830de3f7b13931138711350aa719e9ef1d1df878
+GCD = 17b917648215b2852ce2eccad271d9b2bb321f0b65d5b23641f4247a29c13d9672d79f02d180d527d171b5b652421811b110cd7b9e9df182b2730560833692a0c8216e2225478f5a1043fe864a5ee9f96e150161ffeb4e9bbe71eb3112cf4fc6686b0e42abcb5
+
+A = 3bb81e51b01c1a9632d6401f6425c2eb52d5b93d4ef41e66582daa74f273097f9c4809a0f7e94830ebbf0ad875ca8738af314e83a45e0a17e14255775d70a69141f1ee8c9cb20e6897e43243f38ffa1f2c71b67f752ccf49ab4c71a4183c5ce3ad7ddbc920f5a34656535912b3fa99bd9e7937713f32c99936c0486e19e846ee5796701407b20b08373307ffeb21e8280f692d48ea16e65e4942e08e19666b3df2f73fb45063d56a4e010a84f93db8c55dd1a5c16afc1c104f4baa3cfebad0965bb61fa62f02a3ebd7d5389c9
+B = -ad0c46736ef9c8968f68b7d9948e890c86624298a2e2c5cdca75e3d32ba5c14ec1e12cfe978fa615c6ac711942d36b30b071559225143839e1db4afc69e48dfa6607faf93efc069ad1be6625bf8749fb9176f46d16b85bfa6d1c5b8c84b966301c2fe680037e66deab01dd1fd0f02511d010e8918324d114f92c237f95b4efd9e80e82f15e677e74f8097e27dec8505bf2e9e5f045b747bb2ab15c629a5f9394a752c38fbca21ac54b122b0a9fa4d08537ed9cb9608f0729aaec847e325558769ef2362c19607fd43098dfc0
+GCD = 102af2d00763d432076b62ecb517a8bdac8373860cb21685a176828de7f9e39c1a66e612c046d77b6295d033eb9287e8a960baa3cabc6ee3575e13dc353b58836e60d8dad2be05d4dc60b0b4d5ebd31c032d25f9ad5d68cf8fb5988a78df9fda0b928679f82a36b
+
+A = 150282bdb80ca5d2b2e1d8fa248b5fb2a5d5be916d947beffd8c66f7b227a3a6a221e297fc3c4c7b0107796a9b5d9fc1d4038ebaefe7d52b7d2e13165c82451d033626b4e8e2c36b06f8cd8b8c396988eacb64ff0c5c684f460889e3dcb9cbd04229128b4cddea969be206ddd605ee2459ed89cf0fdd453f049eadd45ff4f040910f7fa6fc1c3aab6084563f9c57bc6f280b0f6439ae5767ae250052827b22cb615ca8c311e5c5e5c81fd119b93bed766254107c454a8ab7871d64e70de736f4804aa94dc32dd047c5c528ffe6
+B = 4833f9f80cea39cea88a47993e1bbe18d374b92c6abffa4d742ed9ed4321b1bee84e0f56bd03a362ef4f1262c870ec64f5af5cf6800d885f2eedec60f93596970e853b4d4c75ffdddc5cd257a4b2f35e397afab111028d705628fe7c75c6a9ae13d6af6175354e05df9e21c4fc7f0e86548dfc0c98424b0c232afa79ecac29357877fe87a55db88bdf8694334f7503baa5d836323f2c0ba3d745b32056b76530108ecff81bdbe32369cb0dfd325f4f68357eea539749cbaebe12a83855cd6bbf7fcad36d44bf93ff14d76e69e
+GCD = 5b3381d11052f443eacc0f25b531239167105c6f1a3681e2e723de7eb469192b05198f4f1c299e3973f91062365f8e88f6f7892ecbf02a2b63be4f7d33c886c60e36391a650e3aa438ac1edd28776acd037ef58917b897a3abc26a295a7cab8b996caf53414fa
+
+A = -1f959229bf50b205f4d594b99721fb6aa2c7fe8cd067d50018efa36ee7cfa86e96606498a4d195db23a8f3582d7de69283ef10abf6abec3844b3ddb7e5f84097bdbcb159882e250ceb044f76ffc9944411e97fa932bcc4a2b4cf89c24d7c08369d044db92e03d29932d546b5a4de321bbe6c5c43e5490747f65707f267cb603ae7c6ec24b53814df22ef17f0a71be2e9854a76f38c97524491ca666e23687c042333d2ffddf097000d41b8b3bdc78d409ad702f2e8dbb50320eb25d2c60630a9800aeb9b2883fc8088230ca874
+B = 10791dc3e6cfc6bc6344048c57f1b84af5f213c025fa7fadbf9aadde871773ec4ab4cd4fe5ffdc16fd57583d90810fde01c5c7132cc7aecbeab86d7c5216d6a8f6805f34e5726ab4b510e2b6605623d5dce877ec4a3fe0f267a41b467c1ce0f807b5e51ea1e96eb94c2f03136ce1046e0fb7d070338714fd3af32acd65016b0095c44c8fd3cbcf3b3ac4799ca83caadc599ecac8c7c36ae8b728a8128337b037f84ebe84169aa9510571e3cbe73934e37761bec51588eb5d9fd7d41718847959c78e6912fcfaa996edbb315ab8
+GCD = 854341ad6c6b2035fc174490be2ad3964472ed109e7de141ff72f35b7c80e4d6721752af249e045fffdca7ae34cfe8a9fc3943139fdcc4c43bb909fd2ffc72bb296a3b166178b75e46455d1c81c38cb3dde91478bada7cda5aef5989dff6b43e8e9918b98a6c4
+
+A = -12b4ba0f3598084bf17a73ab706f37f60e13b931d2773c135f7d4dc6d52f34cf5fded897a04d1de7e3ac701aa2b8117de85baa0a4be9b7efc231d0e00dad0346e1952db3aad175376d98691ace884b814195c7cf7949e6cbfb019bfa1bfa36f208625178c52c3c6a555bb17f4cd911418a0caacb3e93628a4997dee8dc59d4189a81b1f6241926c374717c1761380ea7b6c4e1624c53861d8606efe06a01846ad715c087b1c3fe76c9dbe81a32a6e7bfe43fcec739936359c1a995f56e458621c3bb0f73fc824f584919dc5bec8
+B = 1414e5a0c3719e09787f64a46147c107776b5d0368642a204f6650509821ec9fa088ae59df37154f0e36badd21171e0b6f33bf35de1377e5fb5de339ae59d96bb66f595725533fc2b4301fe9bd161625e25ba41b350413f50b6f322abbc4d4a0e6f12ba4b1aac8f2a5c7e893ead4b3faafcd88f50855ab92a48a62159112d503d18ef073a8d211a0153e2fedb974ab02c6563be2d3658d30d533c38daeacb85efcb5a13d329c7c06b3d644df88983a76948e281cf6e1ced33dc0650308da716f4fbc384a2b355917e8afc1989e8
+GCD = 325dcb67516509efbae96fd4232035718e8dba318e7b9d73d3ae01065e12c68399501585dbc55359e2c7ba49e2bb013e46639fbea79e90c9d88da020f07506e50799964acb941744679f41a74b82a86490a2f98fbaafdb89e36dca3b4c9f8b478e4f3bf72acc58
+
+A = -4fd1e47fd914ecdad6b131d48395505ca4341b1e24070105cffe0efce7ec2848c602951ce7e7bcd5bd58c672371e571730f67203aeafabf883f840067c53a58089de95721b806c29bae1a14b281971e4d2b091f4c8117a052ec6a68b76073dc0303fdaa3ca6f5858132531dd15c5aeaa778572dd02d4532e023cfb39ffebafd1e2a7e8264e743d31fb0a070c77d08e33bb121713debd178f40d8af76697ec15b5cf7f140ea559f49acb9c8bdf97c9028d6e55e7024aad9be5ad2a23673669cc7697df24a77adc749bf71bfc6cae
+B = -2a8fac5f3183df8c2ab3b98c12273f110c30d349cafa7e1cdd17fedf727042a5dbe7e0bcac8c14b6974decd1ad2dc7b5bff4ace997f9038bc3e97d411b5e3381a904667af9be7225e0239fdc281b62c43cc401af9b7eb010f396ce98e401b36111d0a94320bee8daa7c97bcd272ac21090bc8de17b53fc2ea4fe9cfb304b46f682a05633f9ee5f12f093fcb8ca8d284bca7cef7342ca21467405236c3f69b2a0d05d9ecfcd4fcc8e076d8ed3a1c039489007e567f0d1806534ebe0d699ce68355c2b70ccfa55d9d2567210c5978
+GCD = b9359f0391ea5e2c8a0d71c00caaecf6c9330e7753abdcfb42e5608a5593f903722dd222e57dee4449a4d32c1b0445ccfb157f20848b952cf0cffba9b0c12dfeef23c08faf77833d30e8ce17f98c2ba91bb3261e3c3447e3ecf58d6b7c4f83fcc864f01c326d4e
+
+A = 178ed2106ec30b65b08b0b24dd79b31a8d07510dd56f7455644def261c2036b0321da9e40e235bf0f8241e26823878d90e0285e0f9f2b404b9aea0459edfeac09171c27fec58026432188a475754c1e9659d04d0f3a34a61fd2f0e2c630761871a2ede715f3bb7504d106c198551fbfd51991cd07d91c8dcc6f68c6fae42d161128dc222be9809822dc16d95c08dd27b8c0ca72f9263d45033789a8c4d33ade74aaeb5584e62edcb9c5ac8b3abff4fedf6c253a849e1f8679548bca0f883e4c76fd0b13c7f98803c2ce8e37ab88
+B = -54c516ad07a7e038496372cb032b4f77f46f996f9508917fa065326a96bcafab421b0b2fa93abb0215a2307c8e01752cb3dbc182586723ee82ccb49dba895abfc2a0b4600ca0e43318b4562ca0b0a24bf5cd820c82ebf0982e0b6d376353cfd2a1044bc83c7a8b5e8bfb7ba4978f6906bd8861531e183d6fb411bfd6e6e2f2a9dfec2b0020b7959f10ff6c3e9834da1e35a58209e51386cf14d304d17a87d9b42f4c330d6c20acfb4ef91e5244d5d7c82b00af534640ebbe75e9449fe9061e8f3ea3732670f060d27b43ba24f30
+GCD = 46fdfbfd0917ee37b42c03b07321de682868704d67178832030418ef8d795fad359216c6c38b13f095f6115ca1a8d42b4f1e551340776474f59a4bebd1719d2cf8873f763020f375eea773f12242d6d580e6f69b585d6618947209d2615d9af9deb136b9444388
+
+A = 46504e907a83503276354d465a9e7835dd1d39447d6f5c53e4128747e420db87a4d6f6eac237248b9d858ed203918ab79aa82e622c3608d8b755f6da6b5fa5ffbbbfa76c1c5d749c47de43a6bbb9a944338cca0fe28be90d89ad12979b8d598543b1447dce8697f4799a0d4ddae70c9d1195177c8a5193ffd1de052e15a2c34f9f550f46d0247b6dab40e8b6bb68433852f9185ba5e9e06375d7b565772909efe3a3ee351d89d0c2cf7d28623bc82c4ac7e77ef98ec55ca82763ca1640d8c2372e63e6c02b16745027b6ce56f7fa
+B = 4eae9d4e2c70f0899f3c6c8cc74f2915f12fd900fa606988822bf254bc9c5095985a951d98b3c069bbda6fdd08a85e0f5004133e48ab4e757a33321e95ed97957faead6de30a0087548f78b9f44c64db94fd2a043faa1e8d57cd226c17c6553d5123b8acfa6a0dc549d5969b815b9f129fac9f06266fef65ad3a73685b194e85e381838c4643fb1ec6cfef7fc49daa369fcca7346ceaf53f9f9a121be0a240cb3841a67c214090461a111c7c4602afcb3078dac4c59e122ba522b223835d640c63d714dee36272ceb69bc48ac3c6
+GCD = 18a87a65011fad33f9f783dbdb0b13316ef778a985873096497d84b18201943c235e1d2681ea924414e8592b52206bbd454da5127b06ddc13794932f065f1dd6efbda2941121df2d497a9d13006d2d4c2039e935251ad44b98840b5878deb27ae310fd26d17023e
+
+A = -134853eb8de7792e6bb4b5197e9c55cb595851423998e33d3d53ab1fcc7eed63a60aff06099be5d8a3091c013dcd34606967f5eb638d947525eb93681422a402d33f8e12c9a1c148607f6615b90b089d850347f12289422ef5dca8120e5efe8caa1bb4b27ab132e97314f9c696e5449aae03060b2493374b1d7a97294edf087cc85a85a6482f6d5f26f045f7604698d7bedaef428cdae3aefe035d5ca97288febc854886c9b6b53ba0b0cba46394dd03ddf9199ce751fb45254e031c24928283491994ec6e263c9b136a64e096b0c
+B = 16cb2aa16d372302d569a8662dda475890ef2e0710dff07152b42f3c6460e300af14d11adda2e8b6889a5c894584efb82d8425bbc0b8c8e3eb68e70a3903269b774a4ec947d3bad6bfb310b3fadb2ba2cf823df0a6bf8a45c80815bdb83257e18aadae98a27b8c4215ae3f24133556ee95b63c2c9d5c71e33169e5325a899a5b13be11746ef6b8604415ac9e161d5348f4c173898f0bb38a50b7d686f7df72b2c28635cc89ad029c08987261267b77c1c0da8cf4daec91282cb279d701811e41258db5dbbadfa5ef88ab35c2442bc
+GCD = 16b85e0dfc4a7c1463c372bd09f43e6b3a191f0c6a074c6ba728a538c54327bd9c843c73dcac526872790a2d348820fd215d50e39e544bf7165b3aadc0477afe2caa9effbfb4c87be692b9df3cbd510c31de7118ae99a17af997f3408e7706a6d111275b6604cfbc4
+
+A = 479dbdd255485fe7ed2cadd32a19a9e4e54ce3a48c17f2fb10438c89e53e6378740e5cc8c4866c448c1195793a0836929b473bc64929d2ec8de176e7bbd83f4ce0a4a348c0da4e0a646f6382c5ec309bf6c2252ed2d9e1a61455f9ead89734284e576b48d3e5e8c3cdc339d9032b3b78e53d67d8927aeec68b9fb5660a2f147a0bd8c22327b371b9d4f82e815fe3661ddf7da5361dd7706e2eb8ec2e6612f5bcf255e9303a72b685a2123472c79825458a98ea8e401c15e155f7f4fa97ce5fe2687db0d56ea4f17e589ca011c7962
+B = 47a2276424a8fcdd6551cb70b2e883f52a2fa62839e740448522f8a37897a2a76ab614b6990e07315f357a48b0cbf1d108ece5a33a2e430587c240543410302998b239215dddac39a496796bdd47b569802fbd4341aba23c36824e5e0eae8754cde9807a842d7ec891618fa03f6a4ee1f98890560d5c4762ca13d5eb87f5ba55ac885bd4721ee3311fdaeae2d36d2ed5aa552816dc9ef7cb8d61c15bafa7e16d692ff6dbe1d37e40bdc01fd2d99f8a5fe52ccd91836244dc55e277684eb6c9c5223fc68aa62e7f6e9474f333320e6
+GCD = 31c74f1ae4cc28ae9c88e51cb1b6e8a725939a1c4cca9d535cb252a8d17cd6931bf6eddde2f306c08f5d64e6361d50d5cadb714c2dc9f82a48c9406b83b3885c2e9d04d50196feac58c221f5e2e0507d5832cfa372bb881a5dfc737562f4b69ec53fc280c1f42aa
+
+A = 12ace83c8d7e178658de51120c6ff7042cd3b7ab97a238d88885f281e115995fcbfc748cc9d11793ebe291f6c6b4b39b26b34a4457dd72027d5ac0b77e580aa0c109c72a0e13a39be6b495ba2fcc61f90328b9f7ca1b75b720d0f6c44e4b1215658f1a6e8c34d3e3adb064c3633d9a9b28186616f2ee61fae4047bbaa9d1bb9549a2414fb52a7b1b8d76b102e7d0665802574f1f6f4afc806c4afe3ccd56274a1f6ffee163d641d9151f3002fdeeb2f0b4e67026d0e058287c3b5e79003795b1ce99af11470831daa9ed8f511dfda9
+B = 967e6b02ee6e1004fe4b2bd9be5de4cf23fb566baffec0bfa5fc2dc4def2800e1478b8212fcec1762f30855ee92199b70697d51c3683e204cc1bfb69ae5fc3ddbdb956f70fffc34e6bebbea236a9b19551b8b8b5e4f993e03d8461085f6b424b3d8bddcd333ea8cd14839aa22edf4598a777ed757d097a6056366bc2e66f6ad7101778ddd31c3358d2b02a43ab15a33306d0359417ec91f043396d93f9788b89778bdb9ed45e8ef28b30a3dc6ac558bebec45bbddd71867e2f505a7676bbd282c9de92add37a50dfad8ef08f1eba6
+GCD = 51c98373ecf6553f1b2747dda4475bdcdf43c01d5bb0cb466e3ea6dd217fb19b252fd6fd17638ba7f0ed4a30bcef060dd464202f264d85acf645825ebc6b16cdaab39dec692fb3b91afd7d5a51f399af800ac96dd087175d5d8c342f4dbfaf45c14150637f42003
+
+A = -e269fd4af89e7752c83d68de444cfa373a5fc3156743d790318d28df826201fb3cbb201da72cf9c3714517b9331e4c38e43c94b49c01eefc1ad8e3215f419f75070ee5b0765a02a500ed4cc52c9e56fac05b88dc80ac3311745bcb6b695df8c13d0289f323131533b88823b45faddf9edd240c5aaf0cb19c962daa78a913875eb2208df9fcca7845ebdf1402f217bbc98495124ab003e9b54f0f7fc7f4e8da5d3db42eb7d511a761b41c7ea3603a6df0dbfdfaf1a65d092f0ba56fd9187a9b2d2014b1c845aeccb18d00948f4d239
+B = -36b650f7cee24b0dffb8d60bf3ecd31f01840e84bd20c558c7a2ba2d86b0ed345580f93292ff42365405ea5210e3bcfc51963d7f3d1eefa69e43b1c9836ec984472ec4dc4bb06a8b09de1c3169cbb9683b14d5c483d15df972d992f48d439fc44661597305ce8c88521a3d59e80722745f9e61d6466815ae85ba52335bf5688d8ea23a4c607fbc4414dcc8d9321e4683e258e8f9ccab49a078e0abfed4e6d3bad07680e7438849fbbb9561bb8e9a165b9128791b8dbedab4415c7cb3bd91fa72798aeff5393011db3e0935f073e6db
+GCD = b9d76ba3efd3bc15756258c19b0c8e2bff206cfaae8e3bfe9484a73564574e3761ab5d67eedc94e4de12f4ad42e9d908b45e9b79fb87c4060034e48ff5377da0844945a5770b71d1dd18fa521cf0425efb27cf4bcbcc239c228dcbf8f54631ee3ed3db694a5c063
+
+A = -bba04498cd3204cca36bfa305dcd5bb7c9ee54c8848098d6b04c51ddb45476cfa1f41030132c5614af03c0ffa513c8c7f4a5380870509c573c61aed5588a6789656767212a85c3f65db25f06c32529e598eee6b20d7291eb597bfbe489f238e9f7e0daaa556400bcefd39e6bdf421a79dccc2f4da088c1634eb8871b9a906e77f1ccc7f4b75b3b2f869e254dfa46884d452379d2103ebdb9ade615d2cb2103e9dfa509572b2fc925d3d1399f125848a94d8895d0a005c749f11f50e63786f7474a1c8258f7261c446cd634f346b310
+B = -a0e1ac596cd6ad5d6c76391d71d7cf973b9af40e70af97ed6d4cedb0596704aab60944bec9ca7c78b9626a78a8afc7905544a6045771b049c9523366afbf50a7bb183f2fe927404ffe5cfd7ab9eea89bedb7f1d2948521ad413db972722a590f7df032bc2ca289db99835f4c2862792330af3f3f699d52d32fc5a97574706067de637895f65584b8580860cb04548202fa0a4ed1a78c2c06411e6be4a5addf2a8652d151af7a335fffa7032b4d5540b11e7f60b7f34af984a29621f63e54d32d66a875b35f7da75781d5cb090c75f0
+GCD = 5aa6a389e8e154eb0ca4120058da179f7199d3aa28d111f379bc834987859cc8d2a021635af3a21ca7e5dfeaad33fb48ef19820b49dc91c556dc4d3440ec504e159fa83ec455c8a4e44bcefc63bc47c814f5eb44128bb74fe761a7e8f046b6d977b83883adf12ab0
+
+A = -2a8d88ea2b666c5f833f986ed6725fd3f0d3793e18b743c7d0891942e519f101d653a9ae11e8600d785b3f46f4826c9d858f0703156d618fb1d7d2c37dcea8962d66df3bc5c00d2a4c200478204b6c793a33d37169cc5f95f46b5b2912be10b32ac5656a7fcf982dee420a9fdc799ab05c03c756b28ad97d4e1fa94952f0aa92c883927b7c7fcd9210bf07bc903e4e231caa13acdda3efb1fcae0cee44d6cfee93530ab6d7f62c2f33fbe21e8ecb676099a844c677744dfc59ee6ed0d4152f360285d1057a67e530a0d31a26f4d79d8
+B = -4552356256168426b862edc277cae7444bc934a733a61839e942592f937a3d6ffd2de989d537512aa30bdf6c137f688c20f24cf747312ad507ee9b1a15d71314fa8adc422f05d7450abc038a59783aa96a4ac1a67f38e8c91b174c3f0d1ad252349c783f99028631dc6927760acd57af214e40ee21d7a47535a0c3f456ac0b97ceb5e165eded205aebb4ca697f5939538c4c257bb8a8519303393714e08f56fbdf2419e4a47974bd2f194f21ac86c553c19a35c4b5e77d6ea649329fdec391a452cc2f91398cc059f83bfd3a14ba3a
+GCD = 56080f82bbfd98cb52f632c18f6e276b1042d1149acf02773b233ae4c9d8138965af412fa0434e34f3f67e4298a214b744e74a1a92debfe01db90d457f83139cb9ce0dbca1385a7cd4cb67d42fe5148347e8d6aca0d7af52db2f9f60e6aabbdea6a8586aee0f7c96
+
+A = 570d697470ad67a1bb68812535ec07e9cc38fd4556c4b332c2a8dc9ed8a97bb81d55164ce7743ee77879b05d7c2778a994bcef891c6d018b3417a4acbac92a59bd3e41db10587b7845c3816d037adfab0dccd8c062559d339e5fbcef7fa8c8904f1f67a2fd7830a981890ff5cfadd5d733289a9b8207265753091970b6f6a8ef7d0b639b7bf1da279cf97128690998c41ac2811f898b7cc45ecbd0c6b0e3a976286c99fcc6ddbe1bbe01bc65e22ecdfcd24c4b81bd2f0bf825c6b127edbea6894df1d70bcc6cd666875d73543a8d3e
+B = -c8cadd60812092823981ba3735c26768b89cb5ecf3b0ceeaec33f810ae4f15bb08ba8250928df5a16e0f92e4f4f2a0d249fdfc2a27b93a6999490ca39220436ee6de8d6ed1af4092978d1ec46e58cbddcd4fb060c032e1a5130c1193eb741f64e4540573ac42b58891573a19b73cc1f751074d36c12591f7d6e1883ddcbc393e6dd2ca1a7019dc40082f3e9de983f068a37fcfc019a61ccdcc99f2fbb22bb6b82933d4ef8d0010e7dcaeef4c9c272e167c55e88ba6ec606f4048467027d55bfe939ac13480713a19e9e92dfb3aacd48
+GCD = 4f9db0766e42779807c5716e578f1e07a4336a86ad6783e251e61e577ae74f384f7e0ef443f8b409217a83567ea8bde6e847fab9d61304c623ffe34bdcf10ee8eca726f843f6d8cb909f260f0276b70488e8cec11a8916b3d5608c0e9b10caa9823c1abc999de346
+
+A = -3260866889bfed187cb832a388875f4ebc7d63106cc361740350b8d2c1af6444dc20ae73d300081de30442d224aed5b7ed482c8b038bc16fdf162f6c7b2f38ba821ddaf0590e41892ea835737188f27d3ad0eaf795b3fe72f60ddfd612182045de8587b4229b4deaa26d1929fc4ac9703f10b0ea2820e88a199837e2d3e7fa394884187d64c4df7ce026dd4ff6465e1b41fdc6d43509f80613ccc37788dc95bee6b8f1424dec74f3ad8ccf446df3a11b86b89d8a0fdf6580758e9ee1d1b7cfb1da8862db3293b842b8494efac39f2a6a
+B = 6c269d46bf0771c46be864fab851745c8d96a96bdc12068317414c551291539a73f551807b5916d7804e19032fdeda271abb369d04814a5e146a6e9b0d57963e45caa932f5b325574bf4fa1c736628f0759a68b63a9a05966da3c11ffa8eea2e26f7857ceca899eaa2339eb2d57b2a4a723aa74f4faff4db3ceb6a3f5c5f56402f7797968b4e1cf68e87eaf0856b62a2d1a4eb029fc28c173f33748952dd4b13374316d7e78b868fae8f3bd3f508fc82d472cea9588e5bf77d5bb200a4babb47e6a295acab69dc0675d2ce714f850320
+GCD = f4d75ba3587c8f87184a69802c6053d9ec75ea8640629d8aff9c13dd0f42fb65b6b4a46d907c0bc3a15be238915278273593a2b3659e7ff72e7763f31685ce0b5cef5cb25a498c4f4411085cd9dc4f51a3f881d962a15d900c301dd29fdaca123e7a759664ad54f2
+
+A = 19e4eda7d88db106828b6ee793b51690108b9d53594840b58f60a1ffcb597712c4d0e092518b131e41c39c1a6d04224e2fa9afeea3e70328b774ed7f1fcaf5f3ae421f752be3419ce6b0602b9b7a3a85675ad446fc61461a57c4deec7287041b4c11299135ef60a672dc6ef4d1024ae40187743e952f0744ac911d84c77d045633c69248dc820a751cf83e2565aeb9f99a34df85dba3a53ce3a1276b3819e4864123bde29d2396aedee370ff9ce7f56d7682d5d6e6d5136ca0b65c44dd11162542999c1a46fa11dbd88cf9e8b9ee3976e
+B = -123274288f790ae6bed2a05703aaaece2bac76cc86f671c6e496e7d21a6358f344b7b3f97e80259ef9aa246f002fb77895e63db6250146636fb9d7c2962e88446a4d4ccb44a10c112f1974f074c42373d0ea96906b1d0860fefd91f034d88fb01a68b4d1951b1d18522bc03969cb9923d454d4664be9aafd595b1685465ea1608f1ace6fac6481317c1eaa4856e8c5b65555284d0896b7577b4a3a524041de60a4ee826d93ec571877cdf5a8a5538e67720bf4fd77f69f07306653784ea5a9a785eddcd1a0da746409d0717f1361b9a78
+GCD = 3cfa3e2ae7977bfedefd1b3dbf2c920a7725a80068e2b6ccb00b543e89591b551e9e42ec400a93c57af0f19e4d1de1e9ea02cd927ebef6abac12ae1f7b3d8aace5334639afb06cea6899e6208fdcf2ac76c3d1656a76497b0dc3b94c47d92a7dee78df7d55c4192ba
+
+A = -42c7490e79549680fc543f3c9e56ce3c36efe3200446a55a3f8e010988d1c611fb82b90f5ccaeeb854ade1f065117145d4a160994fe0dfafecf809cfc7ede461d7fffe6f840c0d266e9a59bce2a5707a23a0c260213e629b35345a756cc32fc710861e273429ea2cc735722685f6e7f7040feb8f11737eb8d6577f98551eb95c7c420d4d70b066f0d0c2afb44ec7901eb7b34afb10c966628096c9cbafede2096e2d664b78653ff4c6f57c18f36eb24d94a57898ccd9acc815a5f89aa7a3246e1e32ab6bb2ebf693272f9f5c349897538
+B = -47a51631d32fe44477b979eb3c6f0b8c67e837ee37ca451e3b2caadf918f40ba8f97d9215a6d86174e1a3e63683dd5a2d1c870dde6b32081c4a75068bc3a4adaa5a035d3e2d93d79f7b70ec5e9579720e3ae84164c909a606958d6cdd0d3e33e405157693b678fdda9830a1d8e4583c63a60c3f217746d14b0ff5d8ea9693f2fd3d1b57f84bf43de25c4e9755e4e494f86230fdbdbc6b0f8af3a2b072ea5f1b6f9444226b194d7f9c715084b1b247365abcc5a735203f0621f6833da7b244245e8069dc37c94e34a5bae55547746f1470
+GCD = 851b5a2bdf41f30c173f28e4a35609f70e9ccf9056221d788e80aaafc043916edf0c182a4fbf357a45074248f7072fccf298888b48aa6ff874c92331ab5c3efa500f750e2215a97161bf1ac6e425f7330d4a3529e06b4a241972cfee6e5b48c6f04e0736df00f4e278
+
+A = 992283e046e9449d053b046dfbad56a99f4145c01950fd19c3e0dcba65a571b0ebfe1ecdc28af8afb2b7b223bb414c5c0d357a147e19260dc42d6e5c16a663e3429c1a39d73040f3b5666535a6dc0c1130aeaaa0c429fd2f06052c4375bb4e8a8eece5dbe8f68cd7263db5a11f712253b056bd7dcf6ad5760dcee092957201715704b7e8d1ea5d603b720e94e80f3405561b63f249db8f84859e9b8326b83a8ea67fba23047f9a619642168b3d6b344b012dd9eda5ba7f17a9d71b25f0d037c526af5ec545d1fca5e5cfef45d8f9583c
+B = -244806ec43494fb8afc2dd3f8a05a3b6ae973674564f04e9a94b2e97006a15d062b9fe2a1a32cab2eef61db18ad4be5a1e6d81ae618e14c6669e17007a6f81ebb169f2f60561c63019198026eab8a33af09588dd7d3a0612cb19efd355767e62c613dcf52b04e830694fec81c733bacce7026807279a74b5c88030b1cc13f5583a28e0ab2d77a3b2e0ace71eb05245889ca135d98222f6ee30005c516467c54dbee0b95964174068471049ab342780865d8c0f32d2457dc5ecbecc54b3c2e33e1a075563716bc0b2b625e8c4bb02960bd
+GCD = 5ef3df6b409c57c5015f7e75fe3d9e68ce7f902ae1f89bee30ae0edbbab5ae7bbe7ead24be38961f64bcff23a46f0ab9ecc48b3094edca70b6315a5123d807f63cbe94f3ddb414ba10ab395414eb7e520f73efbb0954398dc8045b36c51aba8291a36b20dc30c5427
+
+A = -2cfaf6ef7f601527d1861ec20c05c16ea40fe84da648b8f93995e4d16cac355a723a8f38087f46b4ef2ad79a5b02da5354a1351859898b6bbd98da6a73e99f62e7bcfef5082e34d8b01ba3b67445f2be76ba25932f0a5cdfc458986ffa41dcd17b87206974a1f5d31372a1bb3e515817de4626ee1318ef18ea2fec5ea1a6d35c05b293b96e4a0f314ab4876986d12f57ab6383daef654c65ef2eaf3a430fecf555101e0a5d050b6034f5aab975c397a813e25448450fd637972d437100a043590b57f0b6d0f3e736319ed09d93210aae61
+B = 49aae949c54424eb967e24b5624febeccaa784c8429707aafeb4e607d36c5149856b8aacb9f00e16aabb9ae12444fa2a8552e78ddd42fc59d596e0215cd3c69f3429181c83d10e8d1bbac096d8926b1db560abb765f84f11776f6bb083b90e7202435afc6278e4779bcd85141b8378988c4641d495a4446a85ee9d07a24ed03491fa07a7b77bcefe6090e03614ec0aacff5bd3d3f53c1191ee1c5ba241120158f2fe5bb72c2039bdf1b0c32f4e3075b6cab04ce749153b1897619a2606be3d1000760f94dd1ffa923b242f98dce7d027b1
+GCD = 1cade4bcf4010cec6c2e10399370d7869e74a95e55650ef8534f9fb47d832e153c65df3a7188e638cf98038e395daf10dc2ab1591c37a61f9289bb3fb1568f55f95f42ecf34c49b26841eaaca6a9f71b3151e11b9280eb658fba9c6de91bde34114e993cee7cf5e21d
+
+A = a9c4ea796c95a7b3f35c4bb336bb4b11da44cffecafc0db7d647588edfaf0e6d8141161b3ca1b87aad446f1e8245b1634c889f0ad314121f0d11407495ca3c4823b9a25e02c541b26fec1096def857e98d5cf0a7678a03cfd5746731e2764a36c01d95427dc4f1e40a652078e16f149ca8a30b9dfff2b3c08970c3e4ed9fc95cd9123a5cd83dd67b7fc93281891ab445496c5d4a5d18a914c1b5d6521d53af7ffb159e1575556ce7cb002ff96e9dc6c476427872fb4fcfe68f7a1fe5858ef352e7f658f19b920a060073e5d003a23d4678
+B = -3261ce369957b0db7eac4ab930729f070c21f6fb84f7e4dc2eb87093ada48f7b5ce29d81c59e98c2208c525b604376ddd40ec38638bb6e16d2a1d68040c726bd16762c6f60a80f9926a704c525be51b0109d6cc8b2a3e8679b6f62ac1b321a1a7d0cf36795f1e42858ecec24eb66d40daf25a5d3eb0dcecd2587ea19a3d213c840816000d51e4d041e740989aad76c73368c87450e997990ecd4ac6dfa55a7d4d62149c0a08fd072e731d1f691141bc60f0a0edbe84494f515a256d5ac8b62a0c129da7f969fb2b6556cb586aff71c7120
+GCD = 19aa3dd163f9dcd5205fda207fa62d9a5c48534ca7217c272f862ad89fcd57c27f205ca18cb33c5dc42adc3771c1f806bcedf912e1adaca321d3067bc9cccba02280548175090507c76c70be2a49d9c504ff0dcdb1e21d4909e30b5f733cbe1079bdcccee0b1bcbca8
+
+A = -a41a6758ac0ce626a2f88ec98c74c82c9031fbdf08e4ade768fa7d0ab0901ac2928483e817feb95f0aac060803e266a3ba48be7bb1a7da130325802d3baff375250c5f27f4c724153d189cf48091bd9b00a51397af7a8c2530c515ac967664e2b46e15775682ba4d849ebbe6b77c6eb1f724d96f371b1423ac84a3a16ada86a81ab3e90e21329abfa3f47ad9bbcdeee7c7c24bf81784349844e173065de3249e9e5391ad954e3f1aa80bbec04266e26a43a9de8341728e3311da25fdde1677ef59a79b5f8ca9afe8ec646e5266c269ce37
+B = 127265cbca40f0619ce99fb0a9aa5186a6aadb7c39064d72dfad9f359c6e81fa4903a7243d44dfe67642267f9281c9d0ae87ab332bc11a056151c12e83811125cdddf25cd8520606c38105d9180634e2ec859a307c3a43f1c01dcac63832c87a1ae30060bc6dee9ff65c154ecc60a80986d13f0c63e82842ddf9a501fce8e6ecee9c44431b81f9baccb33b582d6bf95e1aa9f8f59d3345ed237548bb7b2d8002d79143a499e4bd700097a69642814bca89efb228b209ec430c68d35aa7d1f5eef19e02ee5a8e29b1e4cd1a9531c4bd140df
+GCD = 2bcb6613319cb6ece4bce2323ff4071d85a84afeee6080c24a961a3645098811b27278993b5119365f5df0ef56129cdaa6a69023435f36c43a535ba944deb5f6682d39244ba097639661e34e788af0729eebe73d68290de9591d79c086a671447676f95fb32f82b709
+
+A = 6e7439658308253ae3a2fcb6b11350eca6b3626524a4219f4a129608324afa72d44c1d942b884e4e4a1b5b02098bdd9838dc06fe6925f182f7ca12d55742d2531fd5b4cfbfb50a2f27c18c14bd54c18ad22fd50531fdff70662d31b8f9a01282acde6e62cf2257f0170fe22b9ebe371fdc595d2b341947e3a1d32188dec9faae778d34f303b890863004a735a78d65907f1204100186960a76e4d33c7bd35d6b9264dae859bb120b1fb7a3c198ec683426bba6fc65c46576adf22ca5578877d47742b8f7eb6cfc9b82cfd511a9886a9a208
+B = -affdbc796d31f7a8611806a0983b290007c7d75a7d3a11710cbf133b2f901cc63e6dcfd7f034e9e9bdd43a9514254a22cbfd50a412046b540b988f32c78f4cedc1ff82ff6c10e3a664dda01e886edc6dddee82077fa06e29c14469b4571238a7f3882a116a1c0eb6606812a665f11a9298e1d52ada7baf8dfe12ba92cd7c8e530d8ab5a6d2d41a15017ef74b83e5101824bf88c3816e2c12ef335b2817d655d4503452747471d998d1f57aafd78592f03f528381b3e41a58a03157710c7585a93d3ad8bcaf10885593f3bd307cdf77db49d
+GCD = 493012046bcba1917df2dbcc2ef2783fb7759753e6deb8b65f243ca26b1ddb99893ccc69a964829cbb9fb00d6584ac80205cc7eedcc136374ab204765e89bfbf126924c47f6a5ae37a0505eb3ccabc7d8bf3845079524b323f5369e744ce74e78dfcbd4d98b77014f3
+
+A = -324db2ff987c47de97f3fda5ec3b4950762c0591a96ba4ba7090a6d53b7f0e2a275a6eee26d1b90256e879d481b24702993e0c936814bfe2d823be8f411c713c8171491304ca238a547d626f2c975d9e9e3a2dccee6584e8a71e269f90b139aa98e59d27100369ead5fe18631581c79dbe81d16664b660e16c96d8ccb1191cacfd2f5c4753b482768b7cb2ae5fd3bef6a9aacb4d78aa2f3bc8066a885ff65dd6db8afbae13a96621a3f5164583a75b4e71c6c0000b6446838c886e88df2f7280567c5d1c571423c72e2154280407e6b4bfea
+B = 153dc74164d05e8775b9e2e7431ff6eff959db8f33f4f02beb7d5511f304d46460ac7fee591b3cd45d79796aa9b2608053d9f076da2f89c78e76cbc8cd0dbd1de95d6074de5935e14a7d2f6cca49cfa839b7c6455786ae155d97187de33a03b7e2421f9f7337748490b312b623d0282465c2254fde2eaba9302cd84ddf78f4737e22681eac32108a21f1ff7d4ddfd74707da02014def614d09d275ec49823794ef97acab0293949a894d20b56815007493cbb8df2a8cd1c73d7fcd45337dad5b0dcc44c78a4a7e003b33a49af5ac72f7d669
+GCD = 9c45c0db9668b48b2dafe8d93088815943af4cb3f2b7048474faad800e8e8a0c785c0dfbd2960e22198a01567f6b3e0b991ba07d9cfe13ba1d0ffd227ecfeef6a181325ce61f6d290ef4037c6a5ddc60e94b7592271c334dbba5349ee57b93c63799d9e0a4af332d3f
+
+A = 3728d53cd29e37c9053b8ab8c7462a8e5ac2c672fd11390d1ffc4b92723537f0504e4975969a6e46136217bb4716f8b8933098a0763d883365526fd7d1df44310f6a83879cd4d30d4b4ecac02f73494853f30207113376f1034964f502032c776798976e1e34d613cac4e69bc6e995870c6f3028d7c822cb6dd8cc69c3b0c1d740155e07af6c1922aa3f97292f0cf1c4f9c55235efcffc41ce1cbc3989943d315fd0368003aa09b69c574135b73dcc94dabb54e4fe6cb3fab81c1153e77489a2e20d33ad2f01652ef00b536c7a61dc98cf40
+B = d1bb2a3567d3ee089830e5ee0445dab8a555a50cae1eb04b06fef95680d3c40e4446bff776c51b1c97b29db1662f35d14346c51d8c86bc946496417915a2d3b90751c709611f9a62ad0ad8c9d154045821c59579d00580ea074e3b150357a22c2f007f4cebeaa87af915f60f46eb068eb03c30cea7e0d4ab6f92bfbeaeca31b44dd562ff9ddbbd727d161a433f7eb8dca5c5dbf6743f868eb2e491c8ac6d93a9e422eda3d6393ffeeb93355593946b56f933c9fc30afd8df4c55c9b162dda608350feff9ebf0f198340158a75fe0f6a6cd80
+GCD = 130fe4fd2b091ac289b64afa11aee9521c74010d4a64c13fb512a07a80c397301906026f219164316556a1d2799a6470424e6a9ce0203e03e446d7d02e83f3c22a22baad80a547e4290e4184e8bdb77a69a2a89fba2134f433ba086dad62d54bdf61d94ead085335ac0
+
+A = -20960d0135780a9cb0aeaca044f56006d0a21808a2905bc170afa846f43fc141e20efd635fbb214ee7e382dd77d9e128c1266120302268f5592d85e01b01ce133753d493543fb41e62cbf7ceb53be33f757545a19e93d2f28bd1c8b27ec236b1149b6030da7324bbb98bebbc5c06d97b3db6d1b3f12c3363df3d8b9942d3f4970946a2f4a78438c26d5fdb83f9acec2cf1252b86db03944dd7776ecddecf05edf78b1c5c1f6f1ca96742173422f9d8bc814a417c3ce7f97aad2242cd9369c33f7ebe69dfec94c08297567c80932e06892aac
+B = 5c1330c1bd410946b99cb44fc5d0e1fa4e2b2a65e933aac7b3ead33b69902cd33552dfe086ebba6ce5f88976132593591c32694cc46b0fb1443db2d4c05750b824f77ae278aa42f947248b66ceba3140766db8fe832e42c58661b05971e77ec58b8145a8615764cb047fef46d81b28810f156b036d4e1dae0f7579efd2391ea5326e18fc828d368a6d898b966e598918f6aebdc0017d253848350ab81dd8bfb9165184be7482c4adb717c8d8aaf9301713e9390a698b73ea58be37e2628f1f191438380d3453223fa3df38b25c2da52d334a0
+GCD = 786b482e548965b1769d214975b6cba3478140caee2aedf19cc0adddeb05eba0c4f2e0c8b96a2521e7f549657fcc030ba10756a2b05635d30e4057a2b8ddddf579045aa7b7fc9cf4f77c03e09d82f8a0f12194fbfe1a8f9be145c40713ff49129a38ec4e16dd8f741b4
+
+A = -13c0aeeae09ebd2d259e5691ebea9dad07c5309498cd33a82c055924f87e37a1721acdf7250cc93748d2be5c5c1a21deb205ac3903636aec5b40ff88cf7ca3bc733e1e0a428dceb67684970ed529b9bdd3c362348f1b5557458b29a0120324410f8cd89c8906edaa6ad5261e4dcfdd41fb72fa02856fa0e4672f5274a06edf011acc78de7b21850ff26b4a8bd127038b3b373f89709fedc330f3bfca998fda71a7f20c80c00f9dcc2fe6632ccdf2c7e53a2e7728ba2ad5d0e40b7f55fd12bb55280ba6222da2f2081a23f3f109765e14e17934
+B = -930a79283b37a9bd126fe8d54ca1b9efcaf0b7a710479ab4b63f5fc89bf39cb0174eaf663eb34ae199a3a90759ba7042618954d80fc38226a5ec9032a43ec8b2ad4af6f87fa564efd17f11bcf9801646e181ba279514406aad58567d9f9f53d50a76b58ea07f22f6e141c06c459691f868eec8eb9e56a40b28c7449ddad2aecdc00d838beabf2450c68f9d6c652ee592a3f2957f4282560a0e4a2e6d5787a6543c327c6f4823bf27d800c496e8b46718f3e5b7b672a6b35c81a3ded205a227d70b8f8a9e807b4ec7adc2ae209484e2f1584c8
+GCD = 3db80cd15358c71079ec993a417b2318c09e26bb5b1e5f02c3393b5b19f7fa897109eba8fbd406384b5b3981fb2d1e1c43aae2d2f006036a2ac825ff4ec2cbbbca56d2843d3b0152b4501132aeca06793e1f43aeef718ab1547b8eaeb2680472f2a65774f7bbf464651c
+
+A = -21553f8ed6e9f88a5a48e60e55f328b46dea2f55a64e080ad388af88c22f7905594413df715280fe937f7fd386ae43ecb53d55b9348d3666ec6cd144da6d81eab33d092e0b3480d431b6b35cb9d61568f64b8df364c929ec708de23313c2bff04b1deecc46b9450ff374a3a5fa8faacdb29c5397a1aa0e0a278cde58dbcad55cd772061a49aad0583250d4474cc24bccb4e6c00edbb5d10b84e80bb24c1292f605c8c9d804a6a6b4ba3e3801c0163c4814865c59e47bae162f9505bdb61aa81cf26f8c080c67347ce0b8583f031d24827b2783
+B = 48d640ab736238b9ef9f86e573f46229fc9269ac24c292a29760727f2f07913b390690ca7d66bf3af66977ed757e886354ea5474e9bfd8d305de7f5e679a96a833a42985c08e1b389597c572eb53b9e0945136e7322a51aa9b002a5642b4c0bbf2943d5ae4229be8f1afa4743a34178a3b8b7441b72d1310fa45d96bf878ffb3de022b172270f1d2e4b273b78d89f8b80e8f56ec94b8e1f17f7eaf1ca1812046f8a2c42cf652c4721c81ebe3a5a7f849c6387d67d5e5449965d3848beddd1ea80c2365eb806a5bd89eb385398abf7363c2a141
+GCD = 9e1947864def325c288082b6572ada0a696beb8cd761b67227c48a9a55db3fda0443363ed5f6e704da27d8a4e9bacf64e3d5580e693fab840d117cc2fd024f8f8ea2eca6c6b861d9e966eeaa7b041776a0c90a9c1e0192c8525888a4d7495c4c7577f1483eb4b536aff
+
+A = -a2f61f3c6ebc5314175bd5c50793d4dcd6bd8ab5908eddb5c7e453079f3b91684a6302374e43d2081d771fbc16a08caaf64d27b58461cf019663c6f33099112c16da67002d727026c27046cc50af8e5bed732e34d8820bfb861835ebe0623a66ea2d398aee9fc31234f9a32bd91be78498a009bcf86d5a88666c516151eb1d8bd77800233422f2eefc17840f176742c3ee3d218014976c0b86c62eb927fcd281f34b2663b498c8d0115af60aae8373a8665170d288e43185b377aa5df7029c32d67a2a5e207bab59f3d7582474f68375cddee3
+B = -fb489dbf3ffa155b0d820e61509a7f52f5357b9dc82d6acebb37f98fd9d70bb8eeeb4ce7ee22cf359895d96990b4e8245510427d74a63f80d2853c26f158fed0526c17b853c067e26e0a93123005f89c3df30e79ad73692b135f8f7959c9b0b21bd99d252d371e5d5eaf5418dc3cfca7c75b406740e7874c620140eefc748920916283563647d5ff3f6deffc4e940daed7ad3d98483da1115683e53888f3bed190db138fed7bbf4662b349f369e7ed38dc72cbd3f6eea86d3bdf859f25faaa353a7f224e8de34338eb82469cf56e7b00e6d7df
+GCD = 13a484cac4f1fdd917ebc10a9cc0631a01cadeb93522811a8c7aecb84fea273e2349e5cc212b1a7fcdb585fadea58eea06e8f6fc91280ebcab8e2de2b48778d647da8707b546d3bbf067f7de75e41cc0206a9801e26a22571b0a43081e3e899948110d789d2bc85ea83f
+
+A = 4395b701cc83ea6d64835e0a3b6dc4e5bc5ba039cdda2f3ca0bee40d50a033cad1081c3f33b19a2dfbe58107ad50ed586b385d3b81973a6e172691f4eb3eaf73ee83925e3ff4c9a05ff845ab72461e0ec9a501a248830637732c0f8ca05170994aa5c8beb9881818cff6bfffee72c88451c5d12bf1323fc150e836de5949bcfd4d6fda8dabaab425d85c99b64b7504c663ae0274140e3bf8b6d2a8aaf5687c88abfae86f77a7bf2356f1399785326e2771b3c1d08caf476a8328a3fde423884662ad8b6ce5c6a17e6ee5d7005b4401710f2857b
+B = -3f7b4559f1603ee48b25561a3be2d0b135d26dd6fa721c5e68f21cfcb63527969809cb550e9e68493a4729040bc2c6840d1e6e23407b89bdc18290ce27879a90631ee32625f909c028c26f4b9c27df253441fb73ddcb0abeb2c05b8474d2bb2506a6cbd399889e25d82809fb99e9ff6468e5b6fe07d64e2facc1391c25323ef8251c410fc36a99267e6f406ca468d7f0773a043f5e4fdcadb5fe0c50bb51ac27bccb963f2efad5e76ec7e55b32115cc677ff2f8c19f1cd24ddfb9a1d1e7f7133fc0670f6846ddf5b89c3489736aa425e89a1e5
+GCD = 3256b914b43afa449f729e5caf16e7a74422a46846511cbe4c1afe8e1facdb61ec9c1eb7d120aad212f1b42fefc7f02ee9c057d14b8727073a4b50a4a25c89ce61ac523cbfd2e0a2c243214edce1271494db117be2eed2417686605d3f0e98cece81513cdadf0d37bf7b
+
+A = e04824990c93c5bf859eb9993e6047e221f6e09732523d229846ce37257402246c99fcc899db1dfa3d179c2dde4582d260e00309fbc44e27cac544781412f592e9c7180368efaf7a0fd41b6924f7a17b39aad6111e0aa42893dbf4d999ff34b3313e46f49b83bf3227bb001bc217c3ab60fe920183cbe0b7e0d4b0c859c96229681f178aa5317be8188252b438ddfaaf3dea6cdcb282b3785fc3eaa49a9c85cc0a0cc0942120a48d4e83b41de62add66d0e8185bced36e4dcd2d206399e93dd4b9d901107f608d50be93e9ffffd6052d33d0092
+B = 9943ed6897661272cf6ab2d43dc876ef1ac444ce693d9266278fe47058b8f1c5f61d4b0e856fa0c27333655b05cb9d88f1e3984de3159302538011663ecfad4f2041cbe025c4afa241cc5639e5ac753b13500fcd80a99f3b3ff3fac70cd3fca11f6c45f080a6997d592acb3bbaf2774571a3e95019539332635e89c004f55fe4350245fb2e7a451929f1ccbece66144e9cc6802da8f9577e0645ab61f0064d601dbd8f235344468184465dbe467e8b30bc92a6bd77a74e792fa73fb6a68668d9a07508ceb140b2df9fd7ad7990bad3f48a1d902
+GCD = 4285c7d6573f9c900098add5575c13db7eb2f45a4403696045f4fa652b3bc792c57948451de05c2e9a89b1ccf1d15ef80dfe01493f2dd7d5bcab16d051ff60da2d193f053e19969b735c432cdc18d2d28992500dee75f1dff93872f21e15e582db8ce55c139155c65736
+
+A = -5f48591f552efb265b53bd3fc779b6ea159323cf170834b8dbe8347e6dc31aa7b619a816dfb450728ea0481865c7510af876e4f380d6f256cc76fa046b7f799e089e79e20a7db398aaa7e2bf11bc6e659d94795ee6afddbfe1f139a45168d60fdc7a8339893f8b9b2ee762be7478ac82795a2c6f75992be4e8514172b3438081ea23a45dcaee58a0654442a4802b96b96a6a12f95c0fa2706ad4d06d2c14941540c34c7f2614a4b4eeb382bfca210da42613ab44ab4af185af54c26831150ec5ce84d2e48dc452c0703afa5407924979192e638a
+B = 2d22ed7a7ed26d7365fcf0ab31f566e4d66fb31ddd8558646dc76668d6f9229021285233c885fd6b1cd9b0e3c68ef6f19b2889dbe3a48a71587dee74f3f0654f2d3f6492d0126e9cfc6d133e7acaee177068bfd8cedd8bc672e11e7e012bf4254d007d6c1dcf14c2bf129e4980a2d6ebde81e5ae7f1fb8f4fc107ec3090e143b0acf0ab50b75e096d06bfbcb571120b1c30cb1031e2749ee39529a1046c71dd23c4c6f80d3e2787a7582c132dc07a85fd97d3aa19732149aa3268c063d75f6e28c70199b711516c1f9bb88f284ad9e83f3da9698
+GCD = e0ff6aac8b2ed106e05736b761e8d50b55d075c2cd87d459533566617aaf707bd996d8acb863714d00b5f43567a96e6df1ac700aa713afad241ab0667ee580b7c7dcc42d5c4dc76e92b69b4e2033ddac6e07d69ad20001ec11f69a41b931e1a9d706ca22bbf20b88ed96
+
+A = -f30dc9e03b781d1205699f77c0083db25033ff51a4c2ed5c320ca249026eeee3294202185fe3d1311c7d4d1e2b3f350bbf2d7b73adb6d8ccf4b10983b6f6a706c01a80045a110bf43e9709a01c55733553693b5086bec6f89769248a7fc5b68183b32c642800e1b8813488a1b7db986f8cd015eff30c889a22215f9513f7859faa2743524d8833ccd78dfbfcf7bb6c4e3559d646cdb812245c048824e1887bf83a6c7cd93b07d3c283a8109bfd020d424c65f9b970b7cd85df1fab335d31f087ab4855c1eed314c246366a53268dbebce64693fa
+B = -d21e3a8635c79786b330b836fb676306831f0eb9e5f83f4183ac19a583982e8910e16975c09084438dd9335e0b29a08a13e0703ddcf92e95a48c4aa92eaddd8126d3469bbbc362ac2bbdf04aea719518c28d642a0628d8fda3fefb0274d932f993bcf231aff895d0c2b06a8f466fccec4947418d20ddbffbb2df98613da774ac8da6e9c093231040056b253038693482a3d6cdb8125d7a10998b9a24b495d94eddf850be7e864daeab9f46d6f07a6101baab685db2cd9eb491a7dccf177c2589b6e0546f8aff74a372f51155da8254d433fe17fc
+GCD = 1ec6659c7c6bb687558a63707211bc261f6bbd97bd0e159b31f3083928b1d0384f5363dade67c27486b57b17630b61d280006e29d590b263fc93a17e63fd4bbaf2267f19059da7f16a2075a0fe64c480fd08fc6a2ba3ba1f96c914c8ce5271ff2c983a41962116be2adae
+
+A = -470776ee7edfae83c1e780efb6411ceddfe38160a199b62428f0c52f0c430279285e374e3c83544b11bcaf779f2645f4f5fe6dd978ff0bf81ca02d5a7d6c8ad0e770046c712c4abda8b17f0b9539e52fc31a00ff17235396ad8cf638ce688767ff7b7c2de9e95dad03c7981b2aa9be16cc5a7d0db915c5a2ec05af056ad5090be5d448b672584b819a59037a74588e0bf6ea4436e6626e741a86c4b907f821e749ef4692ec20284ca23e75f2493c9ff866127556a088913354b218cd9132bcb48f49b0311ba8a1b539c19169f297f91a2456121d8
+B = 1ee493fc66c058c7215909feb07ddef942fe0424de439cc3d2c08d3cbc6864965657a7bb8210eab31446519e0c99e4ff5f502e516a7cbfc006c77a5fd926dd876c2fa51fa2073a9d721031d26b1eaa461f25b4eb95458b131d134c4f88d3d3deb361e37aee07a69156e5ba7e1f7c31e0e311d9530e089d4f4bec878391337d21469caac27480b17cd82aad4724e5d5d0a1cf07a61a18f22f474d23d41c1577b648fa5e97b70cc8f3f263d2c38503263c8ebc60c14adfd54487caf80a70a8782201fdf675f050cdf3935090eddda8e7557276ac5e2
+GCD = 472f7258b3fc6444abc1194b85227a8a3507fb003cf68cbaa692e543778acf9976bcb7f8763527eb0b46686591fbc3b5e6f9c1b759935ca9b84f043de559e5bb2909752ac488f6d1aafeabba5af8c960531f12f06b8cf5c65b9f0617ce0037f4b6efa41fb7d31fc3e8372
+
+A = af5e15d8b89b46ecceb4fbd18b1a08df5f057e18c242d30e5a9d8ee23aa64b49c76cbb92fa896e71563e8141a389c97dd064fb42c5f0c12032e06d6634153657c38cb203a0075513d347b9a9f1e6409c398239d59542176e32dc7fd8b4fd15aafd502e4b85ebe37dd6d8c3885ae90e319ec3210ddf1dafb0af681e3f12adaeb6913f18112c6f7ff9f97b791e4d5d8b371c845929cd5bd8552e210f578911a42087b125e499f853d76f4f913cea5c2838024520287bf1ac69a0220b3f0eeb5af70f6a91743101e1f41f8395fda1985c21d0f83e7c0
+B = bf03779147d6706f6af24cd390f924c332c6a6dcb620872bec3ce422e6c4101b868d8f40025406f0ce1ccbd52552e323a1d7ecf78941c93a11201d6bd2316da427cb3a84844fd90cdb05708283b4421beca4a7b5273885b7ef5b973213af11db640718f643738d40595c7a8de3c0c2da6c2a05a3751786ca120c56045225e79abf38b976b2be69ddf0086698036141a6516951eb6007944e2d156dd0f16f300472e95b3bafc1bb367def840c61c2bddc1bb28ea0040ac61291b31acc7675f1f217c85d57a8339f0019c35fb56cd0f3d9d99155920
+GCD = a55f8d7d9562c4e6e4180dda74cbceaed91ea8c6866a5af383052fa800f65df1e2db6ae3721aa3604a9da30cd0298e659dad33b0c4684420b69a471c1fde93403658504fb6524b738ed9727186ed1819db8cc27d6526ca0a4b10ce33b2c78bb455a492e10ef67977a2760
+
+A = 2ea2383b39104a440aff46d2e5989c8846df5f0c439778bb3b3ff91caa7e6cbbf80bc7cca4e3590573b9c1505d9d5a8c2cda59af8ccb5de20ccadb5f05df216b6b870a1eaf8a8737232ba6fe0e21001a7163511be5696d48167066f2b5a1b6cd303d02abdcc65989f94e3f82e9c5b0ca25ad827245fa1394921f100c2bc148975a831bc3a0b95b165ca25deaf6eec72d38466fdba2225044e58c2050909a540ac6284b6c2ae3bd76a678d6b01b5abb48f954b2da7b77d8e84cc92e5ca3c1768df7d1114f934ba19974e1377a3a4e36dc55b50544a7
+B = 2928aab086e84ac5fb3170784d45741e720806340792bff9420e29faa287ae9703632d8e0f7dbe5c09a9ba71d00ef8fbdaf4a585afa5527ce0de6c3f73d8f2578303b9c8bd9d7d981f3ace81d42c303c013d39535fca806b117b473ce71b215517afff953e6540cd519617f7b47235559c1ced8648d694c4e9199a2a460d6ba75c0218fa19be6e08f019902b9df934a0e0243e5cb821617d5d5b0165e4dbcddbda053394670393c362e1c4383356f6dff2af8e2dcda069f7bc8b8eb538cadf71763e4f0a8d54dfcb1c3f940618d37218f6a11a210e
+GCD = c26b8776797890777ec9c3c9655e49e2e4bfd6f6abc3b47dc9009d7d87e12d5df260dc583cc98084995e24604312347ee7fc5e2242ef46edbff1a03789450607190afe4b9b45236bfdefabda85f57a0ea2e25c9340101fabd8c66e3a2b6c9cc460c874e25d6a5c281a3df
+
+A = 376ae2158155ee514271540a043bd8785c45837bfbe3e9cd22681d12299f04158e97518dff8d22c66461f65756cab407c8857966aa14c1a5d32c793ef965525e29d8acee92e8fc2d93c6245b575ec46c08ed2c26b5bcd299049f8b1e12b1a11b0a287c5eaad63b5988bd00e55744b52a5059c7c7e9439d895b8357f1401cc28d4c7512b7260b15a8031574223fe37667440d782bc98099b4efe6c4216761234e0d57cf723a1fbcb8f4840e791b52558dae207bfc444da5030d5f4450797adbbf9f6769ed8ffad8fff44a52bb84eb6e21ce756537ea
+B = -8ee14eb4fcb63e596f098cd5fea5cf406d2d5598bfc8bb238e749503fb6f986226046f2481c321da97b1927af6192dc77e39be7ee659a1416de1516478ce934835f7f73f028c558158c7e6607c4c9d0fbd0ad0d85917fda76407fac4ed098d25fc431c5cc2c5ba3518d6bb04f2617d21b6cb027288ca5060509591d4110e52762d46b71938227d9490901ef77eac66e33ea7e8832abb9ad001e46514e6b7c8e9ff0167c110c3e2bc838cd29d6f6924b9808c04edb6b99e03923eb93fe354202718b8cce6d37000aa4c98ccd3a68c9e7810cd5cc0e
+GCD = 13a3bdd7d93c387b214d4ab924aa23efaf686bb517116d4fac44b81112aaf4e10664017e2704aaaa3f4c1854d6026897b8e59a13009c8f387bb83fc7f3d5a6dff80bdfdbb39a2dba74132c42304a5a059984ea8615d1b4ea3ea6b8ef6e3bf30f3b8ac70d4252f04351b706
+
+A = -63f220d51a9ecc72c8a0478541b6f187ad38134c055ad52337980546aa581c96125437d47cef096f4dd5ac61ef20e3165d2a051d993cabfc574a610e4245e7a42c99664b7c7c7b858748452abe51f66e02ec2e49ff003537aba854c485c747775ac33d9d750ed1d540e3c3df35fb1c42d6e4dae9c602ec043cde88beebc91df43fe8378199729bb7a051ae50309bd71e756b58199617dd86607f1c4180124b150ae3a285de5473d60920a8eb2828ae15032ff40a96a4903e5402136984e7ac252d53d3a84ec4c61d4e37312927e38df078d1d602083
+B = -2654686b932cc6e275f9cfe5a5081a0ba788a007d333744766aca794836750eec8c57e20bccdbd34ce418fe3856780c6dd7ec37dc5690402e474220da99937a82cf9644a4f96996fa3b77f0535cb4cab46a3d270ad2dca3dc367b4c495d6bde8f453dd2fd3af49ef13246fcd2e03adec7789992583353bd3fda485e53c79efbb2ed69af0221ec47bf5e48a05839a89517b84520af4321795fe4d0ef303efff9055f7c04e6824ccd9e91c4a61e2ee12ef07f338a8a907553a863663a6a8757f66015dbda590920c42df3ae9fd3b9c09caecef3e801bc
+GCD = 3822cfe15cfb3966ebfae76b53c2ac36215484883d019f699edc77c6023e530d70dfdd60c3e1d61a9edef076a988e1818860b9d3108f98af2186ffc83c8981e0a83d7f0655be11f5c6c8d9da05c0943ada2182cc4cf514dc6be13d39f802093ad63c0193625ac06ab397c3
+
+A = -23adee5c85a79c0a55dd12cdc9042a1d13a9bfbfd6845fc39a122c39a8d573939931446329a0c89fe0280bb2d9689eeaf407ebfd263ee373d5c277cd8203a6179c3ebb87f1d260f89f7c5e62afedc7a3f8fa67d93324038835213e425ec6ccd644c7b9628bbee49dafd9507b5712532d7d2f1478a561cb187fc83dcfa06b19d677b2e9cf909f4c14f681aec69d6e2a3ff4bc23a1a01cbb8d31ffece65af16662a2194276cad5f288348f9c1542f9e4d2c2637ae6c377a71b9b33328f632d54206a3d1e854ffe1513ba8761ede4b541fac95cd972fcb
+B = -11c04e9176334d0d94a9b0b549e435b15b518ea9d8952930703778e5ef01d7c1205aa0c41d6ac0c1c78f951022c75ba6a738a6d7ff3360a187a4b45b66bfba91eeef8894f45292d5304eefe308df4483aa962d2c0ce3e54442fd9e19a71b27e91543b0145e0522c8919935c196e5f6e08da182ec8fc24feddde107ba76b6a8588febde5a82a6fc34540fb368c31a73b114e34172a921dfa5f302abef0fc7641e7b61c0604e7ad92f72d3e8ad85f40dff9f15e565bc5492b93ea29827d446e1b54594e644339e1b3a212048e949639d5047e4a5c835ba
+GCD = 54f50d80c7e43770f7fe3f081d1c94e0868ed09e65dbe2ad01e9b60555bfa164e26b699c3608d86f962663e6500fab6852c70f2a61a45feb29b52d48981368b1b85adec9334ccea116d55fc8e2b27963e4109200829e1bfdf42ddf0105d38dc73fcbf8cabc9b15f3fc7ee1
+
+A = 4f5a15383f578ffbc4dc8efa64328b7e234b0346797d9445773d883a5da940546d6b119c142cab6b2104fe397e0a0616f7cc31653aa3d765e5598e19ada5045c2c6f75cdfc381f9785b638c9056cfa45b33107121e2c5517a7b3ab1768313f3e8c476a7eea7e8d7fe3e5a1a56b1756b0b1f7913c7b6cd14c390e6586cdfcf8182cef221839d2ee30f71ed22621b7f71960340cf9236e419517aadc22bdf0bf766bb58aabe60057bf354812838f21bcca46fd67d642cc72a33fa16accb864ee39afcdd8d96749d7ad24bbc6f8331be7a6507776f13432
+B = 7326aa2bc4c04d0b61f73c281a69b6f2299a3b0db947cfbb79b7f249c5f6b65b386398445e00ad5dc52c395b4fb259c2c7353444396b294cc8780c8f3ba1f7dd857ec4a602e966f75d448fa310add402f8041b0188d7e88b751c71cd967462fa6a8ce23285e2c610597af59daa81c3b340eb006b66e72295914aa474838fa5c3077f2eb50da86dd03e5a10150417fcb3466b9bcb852ac790c4aad5ed90ac74704695c441be98e388a6d1de914b06a48f01862015c49e72185faf772f80c8090603a64cdace7bfb414dcc972727870021f7086fae1fa2
+GCD = f36d2d696f9850261ce219dffdf587dfea93c29d56dff4e4e198874b9ae43c57b363914c3bfedd787e362ada19e896e0086258b91b21c47b7443aec5eeb1dbf492cf2b5c61d53de4b5f74175a4317c7b72bcaa571d47bdbc97d45df32a7e792499e8e8901df937fd152d96
+
+A = 4834f5ad8b267c3d77b5588481b8c20919aca3dd926588a13d07a9c13ba42b24a127dbae27feaf6949e3366e80c29e9ca58770f9dcc1e99143a8f099aec27d3beea8fc7edd6db12603213635cffbca3de9a8a698664d05265b591dcd25e5a9213c544f0da31ab85bc4fabdef47d60829cd9fa698d30a638b1b68dce429a9c2fa3bdf8799d95ade49126737a553edd5708a187cdbf5aab13f4594cce2a947f6f0ef5b997792bd9a69b02d680b14b60d28dd4b73151d73ee11563e4eef2f4da405a937765a5424b7024b24d6a8b56e07c2e7a8481c2200
+B = 16dff423e06f1699b0aedb601aff0ce8be690671c7d4d8ae3fcddbee4bfdc064022e9bb47c34a32af7f95b19554a79d7b65596256db6eaaef9a2231536e0172a86e550a8dc8e2e302bed4e7bbe31b6fa12d66ea920135b5674a97c12ff1923908fcd320e83187cc34e7df39f72904d8b7e150a89ba2fc46fede59cdd4f728d65cb4e0bca0fda09c93b8b1d11c15d2ba39e13c7ceceede607335dafc5980c4150f510257308538ff9d443140f32090e73d59f82c642185439b002da6a38d661f9291041d99a6e6213855f082ae70daa613341bd177dfe0
+GCD = 1ab875f3f8da5bb12fabca8c0682682beedb859325bb686bebf3e470a5cf58c186674cb54b9c778c0058860b317f7812e74bb6aacaf4bec47162d797f39cd945522017065f9ba32565f1c0436d1ba5d4f4029fd7ff9852b3658c7b59a91a0a87f117d37127f631f3d1bcbe0
+
+A = -14cd3c2b85932d460e19c7418d6c54fed7a8784e187dc41f7da8eea544c29fb8ccf852f97364db09a20d0addc985c1d4ce1073b449b0ceab2aeb17500c9ba7e5f912d0689dad3e23424445d78ddbe91cdb1c3861dd62ab18924c8cce06c6ccaea2e0caad6f786b36ff1c2f9c5cc9812f8b2cc507cf52bd871bbc016010e5142e0f456a3bef43cda12f77369c9f2321397107e3c723ccfce6d9425c8f5277e9024b2aad66ab2adfafb40c52e5d819362db87bf06e3c51e44d1cc552734ee9af8a9bcedc860e996e2c4f0b064de98cd08debebadd7af641
+B = -18d850b77e1cb63c96fc912150741c6a8ed963b8ad516b5e3b721928b1858ed76a672a9682e7c84ca99a6dbf6eaec5d68c0290801828dfb55abd62020e71b9c041fb3b905d2617ca029bd35cfa1c2c034e6b8e63171538857ddb2157eb69f582684efda22755ef851f8e63d098707a4b7ad73b0b67e2ed88a60fc5ef3adafe294288961ae92b34165e657b32e1ba34901744300c4586964b6b2e36202932bc5d516b726df63c487c13a13603bd98de43d2a1d70603df6a5dbd01b57788b8dc0da246035b0af2a0e57308cfdb860e5f0957fdc5e6327e5
+GCD = 34b4936e17939aaf24328b54e99c6b6f6cc932dd2562e390985a73f94db4c2dbf7be0850f76cfa25df20001fd519563bef158b0c804c5d3071a6f7f6c961f0dbf89d0bf6bbdeb6aa358297a1c9fa30ff300bd838d1f36d44099477e32cd282b7af5b871b4ec5a8a22e210b3
+
+A = -811c871564d5b3ea841d103932cfa48ac9f8310024d6294c5a2fbb5ff19d2c62f55d2c25c5ad0031e84ab35f2d3e213713680573f4a36e4e74645f717e1aa2d2f0eeee8d43ed1889ca698f70eddc32763c383f0757bb523644eacf8f01125f115010fc8366238f609d1294763f7911c12210156be097a818a9d0eadbb621b67637b59cb3bee59dcf60c96230d8504808d23de4a2b927164437d793d4559fa718abd18ccf2c52ba05f447440890ca081dbcfccdb059d4cc4fdd2ed6573cdd91df8cca75d8881b135702b4e4a7f8b948ea8497e8478e8c2
+B = be146436ea9abd765f9dd838ce33807ddc12454b94bd5d9978b388e60e417b618c639e67655dca27566e04d692be56968a95f663d0d70e5228d2d628ad1be390bc39a4f2356625c69b5f3885e7987721c276fecab6e23856610e578ecb9ee8ab5045169b0733e5141209708e9f84c9c2067f08a6c1d551d84ea349da2d15e622f45b56e8a4a6856290342c4a3e1045919471722bc270cc2ac3420f0cd5cd6bbe657ebe036083c691e5d288333c53c6ee7a83092688a2f66c96d5be7f694c1e31e57f5769023415ed0f077280630d41f23643a89e91c32
+GCD = 600671238399ec8ec83128e16e8c7b702511e4052e5bf2630dff45969d26f1e125e29dd621d4e1b176477adf2f8aca3654beff0620e78b3363d6a97b9dd35fcb92f369377fdb49c385a080f883224d10b81cab74920c54fff2dfbc401e5023406d7e0941ad3de9c1e52c93a
+
+A = 2ec6c6997943d93491835a059adfad16be937bed7a11bfae86d5be980ad1f96e3584ff486b197ebf67722fe0656d01c8acb5d6713faf39d20a25ad2ec247cb7688336ea7c377bab1dabd3d5c6532a5ba0bf3330c7756b4db3f5e9d7d2145558ecb3f4a0b4acacb62ff2f37b44183da773510c6e344ec9c474883905c32c9abd405036639f2e7be7f315b1ecc2c8ae1476fbb0958c3d730971c8562b91905a81a1ee54ee62aeb681a7813ffb5c389cfe341f49dba5844ec6049941ea519f91b05e89469125171cd85605d2fdcc3955d5278c3945b13d698
+B = -452a91b3877913af1eddc84ae4aa3db2ccf6287eda28d9fa6d81c0a727aad3e7f95138956bd17da1fcbef8be0c73cde30c6996f601811578c352d3be30a9091ddcf626b71f017a32caa5a29532dafea6b77ae631ba6138c619695ede258e3063e18624b1a936c9f6707d2092df574bfc48f73a0f3440636b2707e0a989cbc25a232c386fad7487db7974c41c417112fb81c3e47f566826fa7f1c7505123ad380b4d9522a5e335e774ecbefc769de163ac531ea7fc2d74cc324a1dceadff695dff218f0b5a7dc06257d884279d3730bb1c9c2e6e69b0830
+GCD = 908ab132d64e253add417c0f4830b22d3ba803c844d32b8f0c30f7a5af1db75c4ad15bdda76b00919d7ee5eecd2284c16eeddd137687515e236dd61397261d2264813f0001a3cb27cde35bcbceb720c61012646b5c9d3635754b6733a536af69c81e0101918572c48cd3408
+
+A = c2e55033eec5f33206c6eed7a9908d65a9e9efb60d420607808abe82e18b1197bd1b07c1e3d11dcaee028f4ff0dff0b488148f599711c7f1989c1c6fc480f69a3c05e28394a2efb3ade1d7a176291437ea2cfabce67fdfd3b0a237bf10a49324fa873056464640783701d8c9cedd8fcb56ea5a6b260a807acbd0ac4d3af6b4a4282124254c41cee1e60441d2af3c2890d18202bd75a4463a4af629c1d8d8204d652dc0bd95fef8786114f08909f9babeaedfb6cb04cad665442dbee0511f22a7b0c03ab8419f030bad1e71c110a1b7893942c845c54c2d
+B = -29ed372cd9be405d0800e62496850ff8cb8d366499319da78ec5849043a600387fe52fb62fff74299ee56bf378d17c6969f903cff19107c9da3a1781492003d3c2d02141859fd5b5d7b02420a47c861283929667c3c6344f0151c52417ce698287d5f948d8ca449994234b16d30431bd5446c4ce2c938105c5606a22e54431d50c0abc7b087127c8ba8dddce2e9cddbf922308afaea1c6ef1e04d1b01a914e03752fff756b9ee1738250725d8f93e95bcffb5e26d645dd8a1b1c98acabfc9098deefe2773959977a240fee979ef4b86f06bc105d852ccd
+GCD = 103c476c792670238e34ca359958b781ea74b2725e34494d5e214c4075f1eb0707ca3abe7c53e8453b70c84de159948f49f1fe181898f7dca02228ff9e8531899c2865be84d65b3d98127f79021fae48f8a873c312e347f6213e15d90b832af3b51ed95fd1fea825b1015ba9
+
+A = 6abcb7dde59d9b916fb69e594c5f4452d255bb94ae38693bad2d08df28c1d29153e277b61bc63607a116e1ba912b54831cd35ed63fe239120397aa9c4b9b6dad5661ad9a0ffc9e4cd1068b10ffee61d52c1babf5cf2a123d3af1d79593178031636c11e6a099ea1df437848ed502efbbb548d28ec7071625f652558bd998524f0fe7dc05e93942031654f5ecedcd632b75da312c5507b16d61671a9c9df94dfc56e1a39ba253784de4f9f77fa9f215b517a9da8ec87f228a9f6ed399f265a03cea0928426b99ab82c465e9fd2bb7b6bc17709734640b91a
+B = -61941271bdf17917bf9b0ef273f1990ce1407d5b69b093bcb6f2b12fa7357cee984bb96ac3bf6ab161c1d4c2a34f965f0103f3e364cb46a6cd4634a9bce894d3c442f22a28f95432834181524468ce047a92a32edaef938abdb1b26791716aeb857946bda29dfdb8e1f13d5e90ed39a616887e3cb9df43cff177e09385013fc9655cc4a0dd5cd1219b4b9122a65476b6fd65a991fcde21186780ea13d5dd1544878ab144ab66cd14c763ab17e88c4c7ddf3540794ac98060d552a8a54146c2766ed8fe5905042d81e7310ecdd587e0b0be8fd3fd95762a
+GCD = 1535691bc1482edf5ed7084d74246a922e7e9c9422c456342e68f4b8d4cfa33fa38ff90b081f5f9c38128a12da582729419836d4f54659b7b254948c1e4acfc38cec6221a3679dcc24410e18dd780e2218c95072bfd6a3191c2f9e8a4a4be07b655222203bf657e8c37ae687a
+
+A = e0c33ff19aff7c9ebb09b37a5a03fa0e49d19b1ec74192ba95df1a854ceb7e93b5dde250f9407a54b4543dcd0047e4d94e63d84d19e62b8a1ebbadc019c762896c8face0520003012429170ddcc426da38ec44cf99a3c0e7ad12f564251751385eef6900237bf2f66e9d90359ccdeb2f469007283869cecb5210f30e90fef28ed4fcea20a4c7c6f20d0544008f8b40b524d03bde03331ece7e4334b428fe9a019efc6e4a84e28db2f19e2bc323995fb3d780699db25db694d72906d88c1f97c2842bb93eb1f823bf7d0f8e8577d97c883cbae0c162cc338
+B = 390bfe07b1aca8402d8f1c3589b8b892c7e4a4a51fc066044e6f121e27480430612fc6cc133babce36cc81cacd8853b455e23ff678c8da745d54b91bf7ce23b275c1d8161779be25cbfaeec49ee6d40ccebbf5e306c8c66a6da57db657ce62a125484af5c2da651ae584c376f9590ded16e261151766d6d25429e857dbacd0e85d21e251ec54af7af2316b88f8be5c14594c7956acbd4f61136615dfd88d1d7af9f0db41fc6fcfb823ffd33b5ff3add88597df6bd94bc3430143de72217b268c104f770f83429734f156ccbb77dfe301edc6f54635a9ca
+GCD = ff045a9fbf222e980b500d55552738248a176139620102f769d956a9881c2a0a0b4c99ca07204ccf83dda76977e276f192490d418ea0bb120dc404b951e08ddb62a26cafb629d3a801cbd455774a2de2b8dd61bc36c869d08f7507f80327bcb643a30b22e33484b335d90136a
+
+A = -31c4f524c95b089a7284b44922494a3c4e40fa3fdb1a9a5690b3f7c1f5bff7a75219e40c7e0305f88c87564ea837b1001c321d73b1454a557170d179d0137b9327feff43ae4b38b55576a9fd18de1f54e545c873c2c403b5f6fbe31e0c7dee9e139889037f4dec42c89f1ec86bff46e7babe9b0181da3d6b7fe202b5435515e28fe43010cf90469500b7ca1b3476c12487b53404136b6601279fdddd491632a56603751808c0537a3997de90e2c0768551b717231cda943a3e6574852dfb8902800d05d9f44bd0f2beef43734e906dc924570499b98e5786
+B = 2b4aefab57ba2a7b643071f86529dfcaa8686f99f1952a5925ac7261707fb69216f3d0c7dc6ab40c365b0cbbde70db1bb7f5e92771dba99fa5263d29a820cee6da7d3437c7ec19c6e8740c760e24506aa6df7aebbf378c9f19f2d1e2145e5c0724603a66e58453d2837a84d182b642d58ff98a21ad29d77f37cce10389706449cad5d3b3ee0b925f6d3f8a726814bfa84276ad74029fde17a8a3fa7de218bd4f47dd06759d4669ed57d8fc47d9ac36d068d0f136822d2903cbc2b23b37c0a46c3f98ffe6e036c14d6579ee387f588d51b6b0e3f1f908bfb0
+GCD = 19f03d9ef07f7d20e550d29072126142c7dd981e25f41a54a63b7fed1528e2001fedf11c7e347040d1f6065e4deb13c6621c2e14b4dbee3840b043695c7f227f599fe07259db77a0d1c3920712e192cba551781e9780138c58fffeb96741a74f62c8f27e5ac4d486b9d89641a
+
+A = a6227a9e8b9d8887ed66563b9e91158f3601b865f722417716d2f4109ba560cb41aaa6f2d2e6013f1a88ec0e68fb5836c5f376a78ca0845e76c0436ae1600fbf9e2b02aaa441fb7681c0947cd1cf1dbebe27528cdef48edc0423eabeafb2d0f5ec36d6f986609bf741a79556ce712ac59e209267ac8e19f710132c6e13d5a32255b73e959663044af8da8703c5a6206085e5f63635dbc7e0bff34c73d48d4c7d690c45930163102c035480b406374ed07e0f400eaffafcc5ebcf4cad544526805e7c33af8cfbd7c9d6cc79817fbc17ba5ca0d82487a8cab2
+B = -ae534f8de6d978c99632a44ad0cf8dc9163ca473fe0712678efa08ce31866b25a9d9ffd479d7a9a5b150f550979bb909b94333c8ae733fe9574592c7e0ef1595c60a2b8c05d53c4a59e13f6b5c7ec0500f46ee83462d38f78d6e9b65df03fdad2e120a21f6647d74b2a04970ca4ffddc0f30ece85ef43e9bacb2b82a9b029cef1fa4a0d8cfc1309e9dee74c953ac7b74675869c172ad6d2ebecfb60affa2720f20f3853cac34dfb51087dae47726e27387e6e111890fc1bb8f09e90d36488d98f427f11c1837d1182acf653c5988c067a41feaff9af8d01c
+GCD = 2868ea67876fb1f10ecc72461bf3001e83bd5e8ce5fb3f49248c072513fa35079ced43e5c676df80c6cf25e9b3be88fab56e1a11bb6abd73a9ad2cd36ff2a9559c7ac30b2925e57593704594b43fb411f75d1f9e011c9f9ee6a2f3fa6579dd74f0adf16cf9010b3fd79fcb972
+
+A = 17e4623572fd48fb138a23f21c0aa55d9bc5537a24d6102d641567daa33f1aaaa3f793803892f51c5e551bfcd341812de4190c02d7d68c0369f89dab6bcb203ab2cbdf57bb4ff20721f593d4c92fb196929b839da3c93cf33818c5078518c43a39fbe946537ef4be768c9852c1c18f7ec258daab22c7536cfeaa73e68ea56ce709fbb650a31abc18e7a8cd6f16764f282ae8682f259848b184200ebf5f6929403cfe868e16e893c50ac76757e6b89a1a8b6a3cb19f51dd7ae1354c653023a0b422046c9328318519cd007e3f85f8fed9fb3ed851651867d3b
+B = fb1a0e15e5acd3847dbb4d8fbf2cee208d89542e34c6b9bb96ac37417a51a3a41d5dddeb00cbd598db138772fd993cf7fd0a33f459b8752240378379051b5ffcaf934c1bac1f85ee9c6dc30bc3bf94cc8e4323d5a566299bf0b6958ed538ec78e2d87d1326daee311adf0407fa656499c1376bfd9760992bc2ad1a5c638deaf606acc5b7e068b227e6efeabd1cc11fb8a902820d3fe909630d6c55581b7e990ba056aa12953fff45512fd79bd45f517207a85043e7fbbb30613aea14d183553f24432647a049c63a7cdec0adcfe0e052880e470b4a89551a
+GCD = 327492372f235a22708b59ce755b17abbd33d88902b064339bbf3fed1886e6752cbeba6379c376c730300d15bbeda580effeabae39b625d16959a36f41c11d396c230b5a1d1262529a310c4a7a33ff534b172b811ba318e08d54631f7c8fcf2ea8dbd2d2893386362714505c3
+
+A = -19833a12fcc2514bf5cf9254526d0e0c3bc247802766b5eb6f1754f8845dc6caf829c7758f2ed869df6329b1274607eb93409349b0074ecde5cd04e3cdfcfa33f4f6df3b3f7ae83207c7be631ab71ba4775d0c19dbebe3d068893291359ede7b40745d84b9c8355dbefb23f31050e2ec6f38703b7a4665cfd06501d33776a2a1d03cfe48d966c7a354f45b79b0be6f52671374895a393fa9ad26ba60ed4c87e6339973be7651a61a7a1d07f6c7d6c58277a3f5bb7b61eb1ff5810cd064f6be1369cd8194b062d782c197c3aa5bf6cf5b69419a4de63aec37b
+B = 58e271c8f626171e4076f3e149f7bf6e9638a82de4d10f64045be01d2238830ad10f53e7f6ec1c032f7bb4c3ba60b9fd68a7a35d6058ccd39abfc224678b47af11d04df750e2177cd88164b111425b65803aef2dc067cfbd1903ba4f647bf45b33bc6bb3a43d552028fe3e5affa7eb6b20e32c480b2a4fb60fa8c716f3111a00f09c27a0604bfb07a96d09d7a7eae257334f1aafd8934a73565f66d3545f73384c9beb317d625b54ee467e27bacfadd55ee2b6d8d778ff3a542e484112a0ebba1e161b0d228ab369bd313bcb9cd763329ea88e2d25cac2d02
+GCD = 4d335ccc7c4ce89df160a1aae1a90eb6ffbf40a59c98a80770a1459f31f8d187983a93c7b38b30298a252fb263a4eece1da7efafdcfe155d745ee68fa90689f33ab27dde32d21e316ec8c160b2e1ee8fa30fd1a40f29008b0e3f3117a32fa152282858d5406bf27f7fcba4f11
+
+A = -2161f73c6b3e2562ce5ab7adc8a71b2f0a07e1105fa66ab420ec7850773846eca1841e352820192692c730ecd76556f7471d41917b7597bffb6ca23fb7c53c015c97755f16186b96b34261f7ab537921ba79ef8d2d3bd997e80a923a6de157fd1e6ffb7bca0b732f8441e01af789c74ea5dd088aeadf4f928dbfa31704de7d85ad89db36ee148b9431ec3b5fc8f45c127921b4f2789f0eef45af57b229749aa40cc5c175f8078dcd46c6e1def1ca832021d7108d9c30aa536b7ab269d0516e33057b9c5029d86936de2a9fa436588d724727b471abacfd6625
+B = 6072e72318b5e6eb1cc9143d3e1c918de10de4ecacd998c375f5814ffb6f25fccbf399dc5bc8ac4843a2fe67cdf33945c7d91d2642591d66ab76022330d1a61b76896f96ea8eb2f10795054f20651520425c8dc4ae94d05e558d4dc04f5f3e594564d18ac82d87eefca6be9479c1cda3c7af991c636e1c44ea7656b9a7f6b3df2c88f311a4bbddf6a89eeb75682ae3b47a071c6a6a0a1e9cb9ad7823e9d7380341fea885e2e5bc1ab460a5050e9f6b683ead053cdb45aa4852709f08b514b4065125890186abc95a84aade138b9927cd23aa966f46de957aaf
+GCD = d837634985ccbf1ceddf1126d4547e37788c82e2ab93b886f60488e41aadefe62004545f3f47f531b2aaeaf86b0b7ae0e13ec3172ce454c984862f06f2aa3dc9053cf4bf498f4360b62345502d11adfc7e78d3170f12b3376c9383fb161f4232decf3c94a1a4124968575e75f
+
+A = -d4a819713e00b31910f452601b22088eef13e86dfa38c5428a7eb21b3f538f02abe08962c3b77ae0db68b299a7ee019e8d51179d4fafc39a206164402fa2af40af9f97bf637bf8da6c848bf26e3bb1301d7b530a0cdd3fce20ce341dcf4ca55c2647da8717b5fac490f883545f23bc4664b5e61609875035d6f161ed603096bb20e5901b0c4ecb7717b00223fa85892c591d00036a8b5ce09355d9c9e18bf9c3c9129da204dac725b675a6bea38c18b6d23f3031eea3b2d85606cee92bebc35b4aee0e4e486299decb79bc9dd3cf87d62c6aef529ed80929cd
+B = -17584f7997c1b71af3fde24704c8773bf58dd4727cb57e56b4796e863d3e8b35c0be7867ef5e96c469125c88f369b8de52a8a348e4d720728fabaab31641b4285d6ae00596b729715d0be126a221dfdb5a04a1ecd2fedd69991b966d25002c043d6eed6c1bd1f8a33379017da280491c13769af88960afef42099d34dc67b27397f7176550bffc599487e7dd7d9bd92c67127b497b405db225e64cf791af8463277481d4254b2d4d10fc3f1c5bc48bfb6cc922052f7fb9ead2f2ebc42205f8db3c21f1f288cc38f6a7e3f0b78272110c9e249d189d95de6215a
+GCD = 1b45e4d1246bc77001316dd453ba4c705c35ce2edfb8af757d90460b2de0b018dc64e2dc27490bb265853b988254323955eef10e9974f1aa71644e79dcfe72d5b40585ffdfede070b85c28c116c34bcddfa73c741c76368860c6d25f5ad9061785a0a99814f0d4376536f0fca1
+
+A = -dc555677ce7ee3ee8b84a900948c00fbb6bf4b0fc5a26d770f46f68482ac9f0d473e926a132a8d951c4118983ab30cc90614b815b9a49cae6435945262dc35b33c275c45689bef8b9ae5a1ef3787531dcd19ef3592e0933c31dea31ce4f4b867ea800f78c078f48e4a00d47c2bb77702b49b008944b6a78fa0b4690d07a1ec8e7097aeec981801c99931bde147ba65fad2f8a394e44fae73fbc8856ab235d03bcd110f701f4fff24207570efdd718be64c6035559cae299a700389b39e51a447441cec3aa95db560dcfb046d2c898b29d5ea4e80e8e484fea8
+B = 515a08d7d4359a0cc547a2c49b041ef4eff12bcc3737143df1312ede20f0504c0947823ffafb59f90c8738c644554ac0e4879605dd6b0d88a4b99d45fb95ebb20f59a87e98ae98cf1b066828e292a4bb89afbc59906c5e1363b481f2463540934bf8850e22034e3aa3dfd23db16e7f179fedcdb0a28234621249d1bb0137e76ed084b793a91346e0925c3af6383701321245b882323e3367b325cdc9116512344fcdba4b8083edfa3add3d05e5ec59878e05855a010c7851f57d7875fe7fecb15a351c3f28cb0fe35b3e3993f79ffcce016773f7df078fed27c
+GCD = 3bd21dfdf5d8927466f7db1c2e9f2bda7015e00f56c1e510b992ea8850d1363630da727e7440904f86f1ef63bccd70e7faf95e924e0a6094a86449fb2dc873e680b4565cf8555e030cd7dd2789f0b5017097e6e5546658e56fe9dec9760828a8b99f0372ef942e130522d4d8e4
+
+A = -c6c6820e99046833aa9c9e551ee0d042c49a2eab6601a32cf80de817c8ef59c1394ba5264ac7cbf15aa7773780a7b43e58d78e241695f1e42979ba684bdc968cb1f008edf09f1ccf00bba855e54cafab0a15a74a916dceeaccfddb41fd5e753ae22541da9deca40ad2225c010e97c77f572ca2c0012f6f05167ffe247ee9cf3fd1f2f9122d15ed441ebe29a4287d62b128428be8467a7ff3f52fb2b439fcf791a1a3977bb032fa009455182e12922c34f6726858c8d8f0a65b6f546cbb31b7a13bff4124fbbb375ebb8e3b74b1b1e6e78fd603568a599f808a0
+B = ed206ada84926801e26028d6b3b835c4737f816222a57de81136f81cac2b59568f86fa2f878360ea3cd7fc9dd0c9d79d31f992d95d684d3c131e2b3af5e28cf187a7abac8f68a5fd72785fdb882c19dd0ad44f07490ca160449f76be6b3005c3219cb64d4180a8f94f1d21fce452cb95ecabfab6889f717879510e1a3583f48dfb0572b27792b8c76cbb6dc3d1081955d973135888eee92cb21ab112b1fd31dfaca04f26d05d890c07a1deff6f82b4defc9b62d966bfb89d06a8f0ccf64826fd9b1706d0e92694734c5eaa28961bc02ee5b71ced0afadd7f6f8
+GCD = 84aaad330b4bc927f7c01bdb05231328e39c119e19f4c67bd7b5c616a3aa2616c430d7d16e6870f0bca4f6477d3ebd1a8d1c04df26b1346a986c6954aa76620a3eb1922e3a11b0974db7c0cd2ef468614ff7e1b43b8c5c525c120766cc48ef2aa0aa563b36cb3eda8cf65e70db8
+
+A = 463f508f2028fd809a3284f6e3840f77e2c404203365f4f72064cb1629b1ebd822d5fdae867be87a1a8698524bdbfec8141c20bd349ea394c67767867f72300bbc4e9f426a640162cf09346d4e431df88ebfaa9bf55e3658ca2c9dfcca7e909416cf3d2bef719fa5103be45dd643851b17d628762f78d9364582e671987117dcf87e21e65878512566934c18b6e071ad6c046502d6e4edf6baf0d1fb5932381e8936aaa5abdb31b94cb6a57efe4173ac9bb732d9c4bef58c279601805a2094146fb233378a68f31c9c9326cff23d54aecf66abc0ae2156fbbc64
+B = 592b4d8d1053b9c7ac5c5769d6723ea97300cfffcc6c9cdb1bc07692e72fd42d4a7b32db565e240dae7b071ed3d9521a42a50dcb562d176088a6a1fae28e7f37a4c0de823b6de1cf6b26b7bbae0849f761741123a9c15403f0de96577b739db3a43cfa159b338b6059c02ba1e1a997defd29c1222ff10f778ba8d8265972e1897798a6843d0edc335286aee3ba32d0dfe9844162f586d4d5c2313109cd4a25d63fb7b7f1666b52678e57f9c91f2ab4ace91350f8f2f2936bf62d5a28e696d915b0477a3c27196139b5eecc03e8fd466a9e89fbf46f43b50c86dc
+GCD = 534939041aabc54a5619452330f81044ccb1c3d4be9d688aaad6c78c02a3807b42676efe0ec727f17451445064116e0920a5b8c0d35aa7d92db287dc4effecbff3e4699e913db26a9bd4bdc35cdd80eab1a0c22ddd161b102efcc52457de53a383ea2755302fbee607c3715566c
+
+A = 1667e3f3f43f8e259fc554a7e6461e0de04ba4b25785e8797c1769e6c3e128f3450a8e35c099f28d7d4cb02068e0c116903cb0746027b62c875601ccb089083834ace5462437832b7a2a4fe0d95f1cc3218594a1d9d6056edb75d6cafb0f3cdb5b465d1f2c7fc6e01f4a215bcbab260161f2d025a62b1208f672c02efc96c807083edc0cef1115f4021d0d83d50b3f1df39791b364a1b9b845521868488f3b54c7de44bfd378b041977b05fc67cb28fe7cad9bb98145bd2b7e783bb5c0159cb7284ce540f623ac41f2f08bfb4c061811ac8cae246070df3c2403a
+B = -1cd69670d375257c5acd55b107ad4a575dc37fd8ab7ec0eca7a248370f9f95bce23f7c21d4e39128a0022112e5e907a5aa5bfabe64c970b3493563cfc4bd0872c9de6b5e9c6fcd98542c8b13aaa39ace23d93e374ac2597eedeeeb6d97bd4007c5cfcda2f5b5ffcac7294d7db10a8ef0ab161ff272b6bfc68b97a8dc93e20c1909938a95a6fa8a41108ff6f833f5230960aaca02742fe0434b20e5a584f45804ae8be5737e4bb06727578b59c8f58bd828722257738bb89305a296236d5b6a4b575f84f1a59740b86c8d1d3f26e95944c1ac64ffb4c6f4852f954
+GCD = db0532bbfbd55fc7c4c0a5acabc77f47cbf7c369135f194fe7d84a85c95dde590ba48f2220f0037f0f63bcbf80def284eebf827a0d0c6fe6720aba60363cd4344c01ac10da268303d3d15bf1fc4a1d7de6fe2efec92e4342d56e9a352f559555137536aa76579f191d237c3739e
+
+A = c823ea63b1316fdb4dcfee6f7f3f1d7cbfb0e31aadf2e18aee5470a359dc22c7eb1666013ef2182382940dfb27d8e938b5b03fd53f505a9da086d598c3eccd40804d07d507dfa0a2764ae09caf9ea83d19cebbc2c824b0b3744a74dae66f66fe0d7f779554b58932dc4794172cdaeb150963e69bd56d97a728decaab959670f2e15baeab311c2377521d6264ff184df634a88fc329a0d24e01b90f01bc01f6111bc2817965fc08460fdf015ef97ebba5bbe351f95cc55a912687d7fc007ea97e6b622149a7eb09b36d497d6f59a40d46de0288ff36decd21a0aa
+B = 12607da13ad0d303a0b17006dde959cb654e43ab680b47fe0f1131f840e8be73d93d4f236c8149e659859ade29aaffdc9456579cda03692bebf454bdb146ec6f3ff0496465b878133032cb47e3419e757e3e352460f75dfc80fc618b28656c74d9458bb0a44fc0aca3d0e2589d952474f04547489079b9617ba73e64c5b102c5604e5b94371d2974f1cf4a1d0652f0ffe1af7e17fa87977ba0e9e25922de585454d4685faf39ae101ac35ee3d44a7aff049986fec974d0a725c1f9353f7854e5697dcee2a94d80aa5b46bf313322d7553cb62663ebda8179ac27e
+GCD = 4fd8493cab54b22c1d930cb1acf3f3c0e87a0908773450ae9858e292472aee041342bd0c6a0bba299333d61250377070fff01342a642b490f7aed97b2546af1f96aad1ddf50319f017be093fe0aca1a3b5091fcb7b2054d6db8e0bc30b4e48896cf9241113132a9ea859facddf2
+
+A = 1d12b6ad0c5d84e75d61d93bffa8ba0b1bbcdc1cc627bf489f5aadaa0fdf3c4d43578c1cca07d983a0ba672faf024ceecd482d50aa7d75bcc5eb97da85a4f126f47b19b717562a055bf0bfd295b180197f3188c8cb2c573d4ed67273bebf53448ad47d6c0fd073d3de2cd578499a18f28d272f2b2b9feabcc2f4e201097a56a84c7602c5cab47d6e3ee452fabae6d9bffb5716c45792a1445409342510088bc191578eced9b5383c5c5b4d0e0cfe69afa16ab7ff678f9c2609f551e52377b3e9f8372e70d61b8cd11decbfd61238b71fe49a9552fd26fbcbfcf3ee
+B = -af675140c602c88ce053d415772dd43b51e6b318ebb19f21baa9ebbe6d03c0714aa5a201eb5fe78e16a97cdfe5ce6652eb2b6568af93fe74343556de3b038f63b80d964f5c76346c0c63333ebe61daadb1322aa1e492a152f6c6b04f26574760feed38d583b782f6953d4aea509a940ad1ee4c32b7351f148ac0cac6f8482d66a252c6d9b53091709bfc4b35fd8b732cb6784dbb15a3a6c7f72561e857d1671c6c2ac7c5e147552e233fc78ad6a792708caab8566588066180d085f00e496cf9cc3f96af4b142fc82866d6b4969a0af1c22923b0a56ec2e7c5d78
+GCD = 7d08d7bd306dffe298ab4eca4b2d20b6c72fa7da6f0e5998458ba4b818477ca2cb123436f0b4b308e41bbc46c1587babaeda68c6c7d46785aa3be1e5ff0087650503762fafb3eba9c6c6ee5f8c914e708aa3dcce3965772c48624dd0fabb84e9f4a270a9da52849114e27fff5ca
+
+A = -475f8b7d575dfc23fcccd16d280b2bf60649ca32313a8f668d4c66edf1533b243e5d6b850760c26533c2926d857290010e32edb7f6e6c035cf92e1c6aa41495874e607f07a71510bd193060bae6422d3b7468b66c9e20f56e60645f861fa22ce5582616dddcc63b214dc2f187a1800225e25cea2c1acf5cfb32af9a9af20bef986647b1abf8dc9c25f04ac021afe6535a2df819e1dcf80a857dabaa8125c3d82a9bb5f7810eaa2abd36b71543d1c9deed4895b1673bead6cbfab8c66ec2516c6611e857e21bfb61ae169ba5eb9bee8e8448a4cc7ff46cbd805c69c
+B = -56a142f58fc7dfda307fb8a196077ada3f0f172f340316ed46f944ba0013651af391aabc6d5921a0ca1a7774587604fe73416afc55ce3999abba553bcf0fc8d75a86b823181fa4ee2f754e6584e9b6cf205e3c27560b975e143a28220069c252dd650bb4c0751f6dd974dbc0eb38d34b1168b453c567d308906a499a819aa2254eef27d028d75bc6f7448356f5caf53247128072ffbacf8fd70546fe8c826971a6bee9e981ef2445ba9df3bb0457f10cb707d4e8dd0f56484bffb95f96dac800cfbb17de90d506c794091f95605cc70186ffb30cf4e9747d2e5707
+GCD = 286466a1f51349bbc00b06419fb9ab3523851e85e7f407531e38ea449af177fe22168693d6f613bd1fb329e1da0a23c935e00c1268c3bb6f0e1ecafb97904d3b9bcdf3aed12c641ac79db15556f6ca332eb038b4622af928d9684dedcea3d61c84d61548bcb99c32a44c47a1714d
+
+A = b3fdbe4ddb27312608d5302a1d3531e2796eed3dac6943e0c06f3f311d73d172d4c19d49683905c52fedc89e64e5e203b84d3e56c885014f60edfd3433a169a120a3ad708cfba715e4d1d19fd25038c34445bb786ccf33f854ce68255fed4ddefe1ecb27f0f2ee847f364d02094c01bf06c181afb1d6db7063b7fd85f4571c96f77a6e451bf16f4384c4605ff56478f12000a9584c45ebbb33f53b36448180b85c9024447454d3b065a100a9ad9343250b9268475e31d6a3022f354e94fbd999b77789ca1e8a80ab5c54dc7a996727dbb8080de2929619778d7322
+B = -d8042a2bb9c1733babd69fe1e824ee11a90745bca0cc3c10ec78be54adc745ef407638b9cf73a17cafdc4444c9c4c4724aebd098ff16a0b7d14c4574fdc4fa5540542da714e3e7ac935a7641047a2d490d93932238d56de5579b9731dac66ed345fdf4f2cf99c6332facc398881828f6f17f32449e310d7b90cfd578d84abfa283a359adf6418facb021dcc890408b7fd950273aaa3ccf40e628bb0b7bfceae7201d71248834a342c8d18e6ff0179927502ec5c20c1d11401a67628c38814bf0b10a64ebf6f52ff759e8bd540a86a7c7404323d02d81a6a9e1b6e4
+GCD = 2a795748b8d5073c2c0bfaf0e4f6e4b055a27d2d78844c29f01b45634de5026ddac533688cf14c55f42e02e7cf5881e7280b674807d00d36d6f60dac645420eaf0dd5108d2fc2788f2ba377bf43de6278e168f984fe6fd8cb3bf3d8a6ad5f110cea9d81037d8dc1cc746da99d80e
+
+A = 3b13d797e3cf586899374c291f174c5dbb0dbe5b64bc3a87e6bf9c5ba1eb988cb66bee3884a7b422182513d2a8da2b955892ab2c887c2be895891cf6ad92fb624668b286d1aab0f4afb32204b2caa8ad8af190e21124febb9d329adce66deeff4b22b4ca19a95f9a7c3e8ae467a94497185cb360add04b2a662eb10e9fbfd78e5c7ef312957daaed4b6dfc52ee707415e94b69702361663bfc2c86d9550ba7268fcfaa29179cd79f016dfb7041b66cb276d6b716d1435fd91683059c7a9002acaaeb775477eced0a9f064c689064bfb5d2dcbcadb14f16015d400a0
+B = -19b867ffdfa2e567fd50166fe20f88a8e1af5ae410f264efc4257198ab5aa26cba841455eee9dfca4aaba04bdb0756a22726885210a78d3fe2859f7070b6a54e65c1f8f9303202e3ff55235c1ad303cb13d4c20f2cef25e14e65961ae1fcf9dcf57ea09bb21325cbb822c6b328011b85e40cb38f232240af1215cfcf1192d5b68c92d9a82db5c3944103767745771b554fcfdac15f57f24e4047db6664b843cdfe0937790c793ad67808f536117220b3913aea29540d081f948355d4cd76b07cb3227779b4683630360146eca5567373147b1b1c4b9bf3b76714084
+GCD = 37405b95c1ec60b7ba5342750360c0dd03d319e345a2b023a6a4d8b462e1072d0ce9f02d977353f252680a528c371f4a11e79a0b4f17690b1ea374a58b2a7add75e97d15656a9fb3ff40a08b2f82e6973317a95f1a1412fc64942245a6ed583b16777316da5788639d0ce92ef38c
+
+A = -1f0127bd1ffe25fe21b934eeeaf1d9d7c525e3c08179aacf7be1f550cadbfa60cce6dc5f3d89b8e0cec74999f27ca3c76164d78cfff5a68af2f96542aa3ac88da7f64e15328a3f93b4736f9015e1306ae232f0e41e6f4c9cfe4ab24996159627f2ece676c20e09a2a582e38b6adb8527d165038d0ea06146883ca277a6fd0f34e580935a3b81fc066583c15951d0ae6cbc42615d87eed7fb79462240ad8cad84fc20bc9f1ca72775da98f5bfc7e04c805fff89a05f408b761b6ca7fb35567e8e8aa6a9172be24776f5a2482ca44079762f1aa7cb3e665dd6d667938c
+B = 125aa9aef5c5d9af33f15e1310c419b8b9befd0700db34ff03a26e8031f5d2e4cf425308e09b085597aaeb51ef407a79a5a5cb3f53ca74845bc6da0b4415b05e0d272b41edfb18b50c041d31eda9e25604fa061dd1a70c41848e575659d2922210ebf753c1c70fa69fd7605fba7080f59a80b2ae752f684ab2b99f41e9b76a6d03d0282fa03a37decd8b08d4b98f0ffb01b25151c04bfce6919c9395cb657bd58f7c9f43100cdbd27eb44e70018fc71a2fb6683fdd06947bb7a731aa7e565d9c61a70d2fb8e08c471cffa81f5909f1e0e18a29720f6261cac93caf70
+GCD = ffe4cfc33929720c10a50d79e86a763ace7f2693872510081fc480b6d810c19c25017f5164b0b692bb8b1dd6b2c2ac24d0229737f444665a8c72519949cfa61fb965a30d4af3c62a032b528afb66f66ae81da3f181bb57afc5553817f1376f4c58d134762512625d7145a97aa384
+
+A = -42874c28267812ef9b2762557d7db31414c72c7f72ad0a427a4533b04df6407344b4dde15be9e54815855ebea31b10d970325eb323513c5512eabdf43b100e8394dd87da52b4bc2b22e66acac7d9c33cff25b096243993b960cc5ae8e123e62d1190b331d3abf85fe3ac1597e1050b6366b32f6a76a2ced1e7ee45860abb20259f70ef2a6a7b8cb2e1249a162dec0e7aeca52d95dfb8e9db23f95e09987edf2a9f7e3273a47c629b759e66c9793eefe4e7ab6ff45242be1d7619e6d76e9f0a23dc2b1c83aae4dc34a16b0c3c443a8d72e01f24a84738c92d598dde40
+B = -3676dde59351749bec5f3e33bd076d22cfd659a25ed739ad45ed0d2c078a5b34ab97189ed2867c271e53833267764b449ee527b61ee12bb03cfc3d4851e93a75c65c759cdc6a5c88b488a93681cf0193c2709a2458ae892bde55148b5d39acf4e1fc1950eafd5aca224390c2a9ac28e00e6f5bd29becad476bec35ca9154553ad050e46258559307edb3a7e13bba11ebdff10312c50bc42c0cf4b6539f6987c6c107ce93ced42777359a6628485af740ff8b983b317ee07a7a5b0ace63f0beb8443cdf7a33f730b6f1d2db33762b1d1479baf1ec0a69dfc405362370
+GCD = 747e05b87df1279d3c852d3ca73d820261e95a157aa16445422148c43cfe9c7d1c746ac93968946269ccc90439aa468673acd7a804b0a6ca97a87aa77feb8fcfd0c3593edd4f9bad9d2c7fc41d67cb49ee28da0329efa3164b1c875ee2acdd9e93a900d0673a2b18046dff249bb50
+
+A = adcd61d26bd6dcfdd92d88182506cc9d73367543964e01c1cf455a9c09dd395eeed64c77548e9f367fdd9251a22c9acd25239b22f58e43e978c19e7ed30041bfac12b49e6eb45bb1a1e8024753e5f20992ec0d6043e4e9dd0baadd83743dd111e71c10b899f5ba56db8a832819c1c3f7be2dcf29c6c1d4d2ec5c953f999dfc8e51f224953dfc1309da281e73a4ad1b80f6476e28e8bf10e2b6488fefa050829e15115082dc003493fd741a4ae69e31376fe0b038dcc4f7427096a3c510765a4ab37eec7ba339dcd584e888eb7b6199bfab0ecc7b22a6c418598e6f41
+B = 923bb71361faf6f0a75d3c8c3673c0f77927264bbbc9733857fbdbbb4390d7890f7add79d09ec6363aa91e6d8ae9c3f9f78606f71f819f6bec174f94920d528fc3c912c1e77c366c4fe09bf36252a4b90fa14066e545df777e07783cf89a67c7561691a1c0d33e25ba92d4d5f8cf08c037b64751e4bffa046f055675aa96d048ac7a096ff40bc2d71595faa7f91eaaa04d1cb505069508939146ff039b1223392d2b6f78947c447e38c3003448748a8d8803a9ac0f4aead43e031a452f7f6664dfd29f0c8fbf8ce93ea089aa4d37ba49aeabb1a41f9d4d2043401848
+GCD = 12ff2ac3a4268a64e19c0d1e4462eda1b5fabdfad82c87d435f16e53a302b278e1fdc5fa22c729655f17ce07e8880126ce0f3daeced1bc3f84856357103addba1165553173a1eb31de8dd5821869a2d749455b97103d2172ebeb91b6b08b1efef3717c5ba7123613aca5549ed134f
+
+A = -20e61dfe5fcf44f0faeee89c63cae74f883b12515ae5cc99f9c0a0f116fc6a2bf69d6576fd8be225aa2c8e824d54297c974ebcecba8274aad93856b3b58f0de574ff69154890f489a8039ac8bd641312f0c908f502c3df474153a760821b4c2fd097fb568e757b9c82c1c465b13e2e28d0fc166f2d0989b742e812fa435b67071ff2f439e236da56a5aedf8588343031bb6ecc6e3f88f9f87e594e75e485e8ae821a5bd91e3d67cad37f77d0c89db07c0cafcb960080236f0fd63fd8eaff1be78a234ba388102e87cd7ebacf0c94facfc9c6f16fb0e490e5c24d91a50
+B = -3c61a0d2f705af55c29dbc3e3f99fa942eb8d13f39fbb001dbdca1e89a0c61bcf44f60402eccf80265a7c8a3e3cc1755da2a0f7dc94b5227b65db11aa29c6350af02259bc49613269f003c51ddfbd6d0358cf7ea871de278cc8e97c8206152b611c7f70d9150769ba6f861215264451bbfb60a144efb6a6dcc91673fdc5662e81a60a4aa8b235699c8e2c5f27814b05ed6114c7caaf268080bc469721de11e15d6571c2b44d1fea8cd275fb62f98fd817bb934f557818adbb80d5086492a80c1dece0021b97d333687c32314d76fface79930ac7b2feac86849dee194
+GCD = 45be1539c46a2834a1fbade1881a16b8fb2fa0570c363599f61b138c83d6110e0d6216d30cb8caa97ab7206d42209022a1401a7bcd18f48b6a53c4bc6eb00d863d7bc040193c629ab3e74910d624706a8b3291563e35a3c0750774ef91188cc5716476beffe3ed4263243eadfee84
+
+A = 4878c5e57ca36ca033c4938f320fbeaf7e8fdafda0f146299b8b155322a15d98986b900405516e0a6e44ccf0e730168ee01f0330e031e0fc9186cbe5d0012719679af5a2612ce86b9a3d2db40783abc3ca018b6eb1f2a03424cfba61e5e730bb6ab5c422bf125e9e65246cf4eb1fb100ee5a9ba575a01c1959157a04e6e965c15d7819a17e9647410e4f070fe9547afd1885b8572ab85ea257fd88c7f537383d48e685f57c775a234f64fe48387c542bc6617f426a8a5be365728e079c3c57d48e297c125fc4daf152c245ca3be58474453653d50f1d1e9cfbd3e5712
+B = -86745b64176f79b15a173eedd09793897d760ae2aabcd5b399f4954f339c62a1fa34a35abea1b94757a4513d234dc729b45f7d4090d52c7123cf0a0b12f9c3bc203808f33cfd145755ef22f630ade100cad5e13fdae21346307c3f7156f7ad10e7c636fc9b12443f0fd0fa131b62fd27e859dce88430f9a86b7d3a7fb0ffa31b029eca32bf53048333abf34af9e738d3259cf0902bb1b03d20e7eca505168a67c0152d2c56f084575b4c3daecd7f0458458212ba6a861a0354d51a01e57729c433c8cb52f6dfe630b5c53691254cd07217409aafabfae5c1f4f93ba15
+GCD = 4c1aca8c47fc565105cd9f58abbe21b8ac3137cdb7b5801bb7b127a42a1631f5bd6ef2088260113a9d6063edb662b1f71f81ce5e4da902293472598d530470d446082ff37caef7a9798406dd077844c92214dc99a3990efdadafbbb260b3cf35dc17650ee01a1feffd33f545b3009
+
+A = -565deb72b4c7d0773c74c4f78d6010a6981a35422d8999dc8c13c14ba116ab8242b59427c43a9de6830f35db724f7d7511387065195758ca0ce080cf05f4515c1fabc54943aa61c0525de7c46d2141a75873608e5c359b7ee389275d01ec64d95a5d17a06b7ae1b8f573ea18ecf7315c2acd0148a10043f077980ccc6831e97e1fab4f29b585beb0808190122ab03cd9ac23885e703cb22d623e8eeffe54d257b82a2065ffb17d5ba68b7e43e3122793436e2ecb0f9bf1b2ab00dea83c37fd7b429509bb4bf4ed0bc8d56f8c88b31b9af2ec272ae74030008c14e38a7
+B = -42fbb0de01be3883dbc4417379df7f0cb45f72084cd6d5126202ad0a6fb2fd71c7963daac0b1868ac3ddec4c320a7f42b0d50d5305e7af6971ce894a9ce09054e4dc7c716eb25776fe7afc547b7b5796d240eef70579ae7e46118cda2f07065a455bcd2c0a92139b5ae8a6445473af0dee6c12f57512a3544f7e5c6ce2588d41e0a90bb656308623737bf0fb39dff23af1b3349b2ad6739f6eba0056ce72ac1c88c8826be49ba233935228564841e3bd569a2a891528fe768142af9169853efd150a0a361febe19025fb888dfa733d710c6a11b20b14b033617d3c5325
+GCD = 8be3b4c3b4675483919118bc17457798be184d821e9d81a47356ccbe2f8fd25d3fd35e281ce90d3c11250b20e4342b0a29442b3047e18db2bb249b0af688c1e31cf70c2d59663f34cd04a5d9bf9dc65dec984c8d68bb967bcbf0817bc977f07f5705ea0b6f13f0d8bf166a8f5ca9d
+
+A = -eef30db01b72f8a0028b8b384527b106e08de5bb096bb085518c87f07d426f5a62420e1e37787f44a73febbcb6f1f64b6d4c517d1afcc1a2835eaf09978131682b62ee4e9dd1ac259317b1e78e3cb3a189a9cafb04253d2f7244a7f60a7a7281057f0099171f24894471bf7a94fbc5b3cbe8518185eb243ce86e17038fe75f31f07b5a108c54dde8069c9a6e2e9e17c32a4f0cf4d2d28eb391a23a8cc8cee6219d95e849dead37db7a9c1ec708f531d754b3ff008000ddebcf18dd40ca6f29b53fea9b4fbd928989ac76fffcb43afea9e0e29ffb1033d135741b570a78
+B = -17cfcb65a271185b6f1017a1c5d2c81ea23d765e2d60eb0ee2d18d5b2e281c992e5cbb452760cc02847ac702f9a2f65375a5ef5887e0c14c795a5b8c1b8d57f90f91123e5f396f72dbf13b91a71607c679d21285fe11b205d8e5bb209304aa3df14824d855a75f4d499b6f359262a03d906c9a6140a8652b8942c17cc756813974b49fb299b288471025089d86b9574fdda0b08a12eb23b43859723c04229c090b53655711a8f93bcd8dde9a43b080cdffc494802b1774beb76fa89d766936981eb080d6bd207f55cf7557870a92ec7357aff88f6b8c2ccc472e030e30c
+GCD = 1e82e176994803a418616e837dab8a2ae2bb68983b090b15af6886eee1f2a877f362ee20fb385193867caac5be26996f53c91f4a31ef9edcd166ed78aef21fefa95b1a4eb63ccafa60f943fcb162b31a61ea6bd5c1aa04127255b36ffc9e3651f458d46c214764e4e801ddf4bc13bc
+
+A = -c3922aed31518df5d5b66383478410188bd0c546ee91b8d08d052e8db0b93035bfe322b3564e4a529d7b5b3847b64fc07fcdf13493c948420e0a654e844a2cbe753fba0337655c1a8c4aa58bd914592653b5097d06377c2da399ae0dd8b11636b75e7f5cf902d417d68c4128c3fc124dc401a57ac851e7b5b230a0d7c66055713ebc5913889d929e48c429145fa50ed05937248a8e1404238e4518a2866ed62abaed2d847f90f99d92b930d68fef615e544671995e3cf8db73a170bc0e3dee2f98587f74e26de8dc20ed5c14ba0a7ec7142be000fe9f9daf6088a12938
+B = d333766e227d220325efa3a638364dbf744f3a038f28e9baa4ebe3d61a141f17a58c558fdaf56032e86046d28706b30fe7cc72bf8877fe89b013683adefca877ab44dd2ea9251105a39e28973a7d9df470c88c993ff7fb58ad2bb14a62c88a5d350c8b1347d407d8385f25e755576008340575112dc21c8ca340be6b7a9988513cc49008ffeabd0724d5c38736da898d8e0efae1e059f9a1e7b1a9f761c01a148ca4ed49c4e60e7286b6ed0ef793fe90a30233943ff0eddf51f2c2f31235dae2a23e67ed66408de4b87df20ee7e31930f3da011b7faf919a88612129f0
+GCD = 6486d245617f8c040e48647247d9567d1810b04b08a9a0b9c6eadc46d987e9856b52680fa01314aa29bfe60a3e9bf93136e6ecb495b4a1a63bf1bf4f0ccfef86e1a42256d22ceb0e136314ac0e1e23567f8ef087a4cc554ac251d8effbe040d1849adeb223cbd030a548fcb5f6e728
+
+A = 11fee09859e58a5d3ffffa5edced83d5f9bbda1dfe8f7079650a1018d032a322bfabb3dc78a35feaa0c1abc705355eedf551ddc77c20ee9ac79f52b8644a7b9b1dcdc5a1b7c2ac1c06fd2c46d5fe5d06c9672534776d880bf759a04a2310cfbcd98767bd97312bafc1569c515f2fbe996b5e1dbdde393c1ee9f49c68fab84a33285f49daa3ca4e999f6b4c99b8f58e1fe9869e1d5f4f218b64afb75f531f54243a812b4c83b87b877e7d6b0934f40aae3c352f6a5cad98a1d2b400b5b1a226fc7249f8897f1910a949be5b38977c49087fdb360056dad0d827e6fb61980f
+B = -fc38ce95afc61765cf2703b190eba47db1d31c539c2f75f09534297643d789c3e3bb33a51e42d700fb4f8bc93a4408638b5189f8d88bc3b17f6e97416b908c3917b04ea24cc25e354a1ccfd61342315c8126589bdb4c333a43a3992dae58ed5e374f30bd978afcbbcf03be131006d0c990a5d1d61db7d35b4e6024de876e2a9ff697dcb7f0f42f32db151fedc046465141b5f87a5f8716b50124cb8ef7a2ae925614a49b7e2e1e2ac9861c8d5ff9da4b2c4284e09829d8a51e5025d5b13166e599909ab0da8c612d37cccc3ace25867e0cea21d8b045ffc7ff1acab320
+GCD = 1a4f2ca964176a0557c7ba52ed55a7fc7a15e75235f2512431428df5fcdc7dd8b82d7a6efcfe55144362ffd204cf9e0d411f2fdc726ddeb4ab95c5f291c02fe2584fbfaa16d7a39d9fbe210780209430e92a6fb19b18e0031b52f11b2a96beff8d3454c81bd88c636f37a425a33d719
+
+A = 465ce20a359d2f8b512f9c3db247f5e7f3898e6d01f34c12cf1f59f84c6cfe131e32a6d2ed8ee392a40d756f452b53b830e231577876c7d37c4de6bc6b392d9ad1f8bea907e8ded4703a1d81639cdff8e649d70e44b7a39068ce2bffda0f445e621a9945fc3205a71ebf701a8edc4b9fbf7d8b6d0fa380c26f9d84845aea7b91e6ddde7b2cdde693ba73db1ea92e80abdb538906adc1b979660eaaad42a2dca6e9fbfa9be8730bada7c595bc5df008e3081274377067e5a4d770c4d2830da8a866e3a916f82d18ad9a1aca825b1dbfa070d8be372e23f57bcced94b782d0
+B = 2eea0aca5b5725a6b023bcaed986272637e1e04ea0466e46a1aee8f7760c65598d51c385342460c21f4e07c5c612d8852a25943c28b0b42f262a1d0095055b518da4f7320f5f7c1297a06109f7c1ac713004bef9ca9753530b2e933a7b0ea62c54b5a92fc1e867ff7a56daf7ce966c63369adbb0c49c41a8895f9c0855a72beab389a8415a93f71cf002cf48f29c39af2c9b0315aa71977242bf2eadf518697320ae86c043ef6654a12c58426552333c59842f66a9001ce237210a6683266b20c8bfdfa128adaf7a6a6d0f7c3516f9377c882d677895beca7be0a5d07b34
+GCD = d7a7aefe0f0e9eb9db3f52f0c5e3f8dc15d1439880b835b96e5c2822ea1e98ab967eb10db066aa1ebe6df30120ac2f4d5d9c7bf7979bf0ffea365fa35a6fb7c741122bda2e4bf9797a2bb5ca7ce788a0ee065d61ea76f573561ceb85e6f0d13f15aaf0e3e2068941aa44b8d1b96f4c
+
+A = 3f12d7f8d2ff8db9df0a180298ad1b206f41127b07076c94d9b69c5e69ef2080576f111a6f9b958a0eb2ddacbd9e0e2269fbecc1e5f40d8504c93fc53772a1847aaff3e3b263c0a393e4b8fb34d19d9c32c7be3b782535bb3c0a5056f794e489303fc02e7d2e81922faf105ed5a601512850ea9fea4a40ae93d046391b86883ad2a1d2cbaa6a43b14d3daf7fdf0d1327a2a0c7da31e8804054826564d7e87147be9419467abb9660b5afdc474574aa62fe27a7fe30e73b75aa4fd5c80dc6b58e40fbb9cd6d0f9fd580f9f55ccf03ba3db87b8e06cc040c4879fcb69bf0ba
+B = 1ace81e971800948189f0a863c272ac40ec217849fafda84accd637a54f34a5b82c02ee09c84dfa776e2c68f0eb1c7c321d8f88f47d18e5ac33fe70ab380bc3e97bc879446bbbc718123950c449b3e7b94f80c2f0b99a3dcfe90eb222ae5610a4917df4736f13e3b684bc2970f9eeca5a2006a32b48e25d9fe7dc29640490f9e4bb25fdc54e02aad4f06711d48579ce002b031cee0834cb0ba6d11ab22ad99b2cf0d92783320ef0aa38999f1900ccac0e7b79cd0fc111a52ae842358d825aee7eb3d8f585a063106a449990da6e561d8451bfd2983f910e4db1a98fcb82a4
+GCD = 39452d1f3937c1890703410cec285ccfbd8b17e35829065fe47f66dcffcf6d4b0cd3a9927d74308401fadacf12671d774aa328d9f9ce93578db1118f6bee542043a5d94928fbdf09f23d9d82ecb830072c0acb31ea87025908ede38b3ac828eec2c67cb6d258d224b6cf5e2fd1ac4de
+
+A = 1afbed0d54a6ea25741d2351639659091978b1bf8e8d5082e9c0a360c665f2690f8fab55546fdafd580d9181646692a72b31f4276ff229623ab674793af440e31399c60680fb2b204cfa71fede9a945fd8dc1be228fe727b237f0f48804274f5fc8e90011fbeb35929227d2f193d79d02b19ac791ec1bb94f27a07dce536b44a15d30dee0684c31c22e9d21e97dc3a2ad75c7878896eb7bb1d405f9402bffa2e8041e5989e82d08bca159bbdb5cc0395cf7b1c6f2ea185787bcb94a0f8f2a64e2345d4850af22163edb57f76cdcadd60c9a209993c0f27a2cbfde0247e5ab
+B = 2fe34c0c99a6826dc332867dfc77dc99b8dbe52e9683b86b26244291ebef67f9a3b9bd46b673b1005142845a38d4496c6d069ed27653c414ba5e3023a8970e050b4e54a54a2ae90e04cb35599872606dd5da7f7f80165fb2bdc539984114ab8e77b8316fdcd8ab3d22447b26712cd58a71026664a35a61529075b0aa56e201607ae8c59a3c1da6b5a68144fa50e031b2c709ef350541f1b4487cd53746181b4d99b71f42f80f3c2ba363f6a4666a0fde51f9153efdcb2837459ed75353ec9da649385dd034bd273f193a1c3d323e840f1188b21cde141c66bc4c77cf3768b
+GCD = 248ee1f194cb938360dc5e0ab026069d44a799a7e2105f9fc1a89b96169ed3cf188d80311a8fd0d2f074b1fb6970be469bed4a1e819bcb9407253300d77691b8877b95cf442ae76e8d8b47148a6f9a233a7b67e7eb8ec5dc1bccec66ab52a9b946b1bc41acc8d95adc84486c5291911
+
+A = -1be0d6f6e188444f0ece9942788a4f99bd3af074fa80b9f428d10a4ac68bd1d0cf322fcac4b7e718d1b936604f5423e621ca1b0f45e28565507f07cb39fb334b28a05006f5f5aa29dabda17f16d5037d17cdbf170ebe151db47e14d90025514a17a0ca18acbb78a18ea4d83bc1c13cc1877e410156e1398188f842c55972c6b0d939c566c3f17d1abb25b15640153220c072968fcf56cb3c1f6f39f179bbaeb38b96f0fd5693eeb2247af34cdeacbfd56d0ce09d3f53a79bfea10085237dbca35b1172a76e1fdf91637939ebfbdc2eefd43105f5d53bf7d33269f92b96617a
+B = -9172f4550e4b5ea55063ee562477fa88e74461a5ff42ebfee0c624bff8efe839d0d69da897b7cf4bc6f5676ca9c87f7e39012fd8da3b41b422a0227d1919618c2dd5e2cc098e1c0434d39166966b0c2dd09ac310fc45df6b611f87aa181461abe77d7c3fe471a8fd57d4a7a7793427185052bca466454afc8f4726543e3b38efe4d9fee8a9cde8a6335d956f2680a4ba0974fb0378f6491a92eb77afece22b799227709e6e21b4d3560af9fda8de9a7ae0425a9909652827ef6971152bf7478f792af023e392c50bb6c8b7b24cea6344e6e4d0afffd7dfe43ad2ef4c338ee
+GCD = 156a9ae1f0ee924868ef4376afcc86c8d55c73bbee924bac55922ee3a01e6cec17359e6eac36dcfb37445878612938fdd6c4fedd671d9a3e574879cf90940d44a93eea5d922a090ff55273f0973218195690d2ce88298ebd81e9780b33f1778bbdef68d8410d6f1a385be9db6113616e
+
+A = -56f539d41403be769050f817ace840895ac570babf8c3033b667d2db42a52005ce726fcb55575556775e627edfdcbf1bdeee323ad1fb675690b011c97eca7d88918e0f71fcb596d266d994ee0753a8d7c7c89da69e0a5041bea64c79c3c93bc4011c444e17cd2ac5add4d3fd10b0bdf2acaf6b70639442665cd330d20192ce0e4b0fe7bd37cfbcd6d1e8f4366f221d684ccf4e1fd89856fc96a22b079b5d1611d6f0922d2428005863f47ab6c485d71ded4ea373b3735b19d82c0568877a095f0223015ed5a41cb1a060eed36c06bfee6ded92f14eb96329d15c136d30e939
+B = -4415503e5f846ba1f0f03a90ff1c05dd80c4d085437228364e0b4a33062f95368112ae27133c10d5d7d4682d4cf2dd9024ebde4804854ff547c69912eff87c25738a0d7c8d5ef1912643a36e61cfe8a1f40c300dfc63172387400519719b920bdc55c9b7da3e1c1e858641a7d5c5e2a28b005934600a2bcb859f553974cd1e0705dd10ac144afff0121d3ee246bb0f9bc6f330920cdbce9753082b10eedfc849414aa5dd933af9055b80a33313273e4f5f3f91caf9ecaba012c10972a6788c0e0444078ac041440493a79ee548d137aa11d3d0a98145f578928216400e1a89
+GCD = 45aea79a5239e0836adaf6641a2775b4bf306d38ffb9cd07396369d7ce988c4fdfbac92b1d96ad1308be1fff9ee341a430478f47c35194abac2a702d40600549707c8b8bc377187627b55239741db2f18609922c3a5710cffeeda24e103f367de5bbda61d38eb12b1cf04f90034e3f55
+
+A = f20c4fa93c955d6933dd0cee2acc5b7240c4483e6b7aa87b07af0d6a675e17fb93c3edb8e0b361e6c93a1f791f67b7e6d93da495f61cc4b2a5d0e8c02c5030ead30d96ae6f204313c53fe1b0cb51c95973c921bfd9dd7e01d72ecd4a8fdb68e64988e9145ef498f6848642191840480b899202d05de083ec9e2ec62072231faeda69480e0106eeff2d35385a312d2fe8708e5c61f0603bd5735a6d2b87935b6b8dd818d0d167b76043ef6e185f3d20828e9a2c4cbb601e0ebcbd784f6ae60f752f0e2c4f348d5479ab8c07c67ed908777729f861a3a4e62ed1071dc122af03
+B = ea2ee01685b57de18cdd73f91bf904741192a96abd66a3d1a6c187ef8902318370e32fa5aa56f5cd76fd536d381bfb9009a7bdc062c491bd4763f759d6e773efac7eb9a2ce2396ab45b88ab6ec0d6114593c5a2c422ba440eaee760b51ff25700e882668f36eb1946ab369e06321b3a0fb805c2b49d548afa4aa63b3b88b1dd2196a25533b7661eeda2d9f51bac4c0e23e4bfd09d340e6ec0f4e706459d22044421f0a5e802d6e5abf2dd73c60c083280815e2aa68dbbf5b2cab139f89d3fb1a96bed1db64bec1dfe32549b975d0a5271960cafe9e10e24c2d16a7871d0b3f
+GCD = dab08f84f8847817acd2164bb91cfc1f8bafe8223e4fd8bdd1b8a5ab42d652e768385ec71eed5e08af81d73076ad436d9d4521bc6eb87afe61374db9f23647f20f101c2c565359c97f94006f3f5b3db4d5cd4d6cc7984a47c3fc5eeb6e19868d0f6808aabfdf2bcef7de057cc6910a49
+
+A = -2942a1927a93d2a128bbf767e48362cc697d248d441336d20047ac900e50e7a0d468e0aeaf3b57528fdc9ac6b1b3958cd55ecefddc050f1a795bf0b6a391015f33b8579879cdce4cf7473ce1f1ad5db6dc9246c1b76d6df9e9d70d8fa4d41c57c287ca03398aaaa971dd245e0489adc3cf9701e3ac6770136cc95a874c501c257159f944cdad2cc8c96823db6cfa3d52fdf7bec49de3c6ee249c5bdaa2b5bb155f5adf57339f2102e2e15ba77479b8ca59c525f3c214ff1c7ca3e2c6091074b657286974261c7e4d8d4aac743d328075e6ee221606c07ffc0ddf79aece931b4
+B = -471ced19b06c7aa0fa0fa99c9c5e159f72e511c617ec2d4075168e4562ee742cc643aa6e45b5e1a00ca711654a3ca8f2ab16bab6da0e9e013c9f980c595dc14f250cdb4398290a03e520ed14b06ffc2d764c5650aed43e29624577a6d5958a794cc6466c826b199455289cf24c08ce39d1b41c342584748686e9e07ea65ddf02f7da5c04d0489edd8accb2307f783566ec1139b8b7f7e716afff7fb40da344e9e49ba969109b07483dfb7b3cb6dbf1441ef5a9d5e77cc4c68d0956399c9479eb7fcaca5e49b61a5733c1c9cc031d0877e4737def7ecf5770c9492797547180e
+GCD = 49bf3d936420e0a631c19cc07c32f897dc9eba63db1f4b6b394619b3d79a7b06aa27628369c426a60dc868f52db7c9c1f380bba102910c89c7aee61efa4520b6dd199994e245d3c8a9754f661b0395e98e1b9555a10bff432b9ba7c24b11c36f510f74ac063487b86dacb369483b860e
+
+A = -eeea554e09138296d800d60dc2bf5a7c2c80671aa931f70e3947771d1c9db9008be9746a3843475d47e96bd10829fa77a1018421323b9dfbbe9f7fc0a5570800f29d30fbe27ca4be1d0801e6b0a9456216be6f0ae0eaae947bdbaaa6be2a611c6a653b2330b82d0b45ddcacb61087bfecd085c4a02d3247dc627ed70ee8783235129ae2afc42d4f77e930f38819e4cf4bf582f4f4e02fbb97e452535883915ff0e1e2b2b6d979e06ba83ca2cdb9982992f09ba3ec0ad12615bc0ffddd23bfaced60eac37c654fc0505a32ef61395ecc70d9e75f377ac6eb0ccc784f99151907
+B = -7780064239bffd36397611985f54f6ade9fa8002c2c771988c3881c17626204b8908ff93c42af8d63c9ab835f45d0f944831b9f21afeb4d75bcad5a3ddb8ecde498a82aa7e57d81857ac3dc961aa885edff580c98841bd752c6fd06fd8b7652b573bf22df9c08fe538256b54e2a6886d12b533f9d6ae6691ad3c2333fa6f8dd97097cb0d5c225b59b584c953dac02be5f4a263d028c9fd522c3ac462b36ee9eeb34786e91d8d7e765ee8f3ed291938c246a2e3e9795ada0cb3d768b97d9c8480625f26c857605ef5553aa5d61d995ea29df1ae8622c90c86bd9458eb40e3b79
+GCD = 69fefbc7fd8d81f0876631974e9692b1cd231a40d8eef4395650c9c1fd48096f5a6c4b43fff1c2dd645e6a5f1ccc47c21d3bd0b19bf9160c5e86fe6523acadc61bc9d001ba79ad971a7cc003c2da1389ddcfbd83f30b4142b0cbd4deb9afc9cf63c6d7e0681c6105fe964f29a0915787
+
+A = 3e2fc58ec40beb7ae7bb16983aa742a4dd3a0c23d7bffd643cdddebaeeebc667be7ae9c02f178e12159ae9eb3a09c57e0e0c1f2c5a1267bf2cad926680faf94299c043643c5ef7e4477381dc1b2c5181b3f509ba2a1a2d7280f263d2160ff248cfbd5770e312839f95773a9efdb8a14d3408e80308a31feca9e5c98ab1f93ad0c086634c4e3fc647f073353b94e2a5a3f4d2dbfd1ea4715d67acd5d214f2e53a48659edf2a3cbb3de2edd7482b7d1a9524ab5c91e624c17d7b48460f5536427ea1c47f7461205b9303e4e48ff5766f4ee1cfa00694f294b9c1b1d044eea8c11b
+B = -1db6e556e6441a313ef9278e351916fbb1d1a8f60b0473852c545733aa56cff148a5e9a99a4648ffe094cddfe85f13977eb992e573d38369c71103f0d453d7f1c9cd28bd22fe0f8af239a26740ee8a52920a2966330613c815f9e4f5de7a8cc4d595206771475fdcc0998aeaa91cba4ff23f5755c4a62e46c488e4af8ab3ed2e671711f514495c47daae8c7b39bc16bd7513d25f9c9c5a2932cdfa9a4822b97915fb08aef9a8d700745ee1de2b1b8315cddcd939bad1eac02ea4f90a5a51cb0fa9754e098d5cae722559a5f675306b94a3b555fa1f129d0a8e1c2bd33d644c00
+GCD = bb6ad64703bd74ee232279542a844c115240879b6ebc22b737ba06fbed48796a20fae26940d9f07a4c8df49f6dc6c02779ed89702e7cc8824079f024ec1de0e40820b909888d80d22d656fa3f1089cbdeabc4ced21406a1b278ee4c3ed02316d5a9fde47a448488687d3085b88387a8b
+
+A = -73bb2370f128449853de02fbf16710b2951d2cdc00432d9d559407e5dee3ee124482cc8841367719d261ac6ee08990c780c541819a5ce7724ae42bd19a13692bf59e36040fbc28c3f5c6e3082647b96957fa1294aa24bff9b6b13d4792f7defc708ec57b6a1828acc17001fce817f444f154fbf50310e03f3f3cabc66b8352c130e90686827187021377f0ebaea9968248fa22fdb2c7002eb00b64852d1a26250410aa9b43965728d7af0ada868e28a8139debf8bedf59c37d3e47da5d6d1ca6b34d6c93921cc626b4a871c6e4b14137ad1373a7067042ef74983faaf9752bd8
+B = 960b1f8b08542cd8bf6594332bd841403f4f4626f102df49c03353dbd0d62a5289b581b2548c7c8a2e38819a27ce89efd30f06fd4929f718cfd8b7873b79293220a07638846de5a066a09e5e128bbd4e45dda9786a63fee4ec23bac09b2c88b5e83b6954dcd3ce851cc03a37834f125b3cd704c8477d2379548bca77ae370bf54f45247de785fc115eeb5f4091724791db4e11a06002ea4de58b0e89dbdfd300730afb14fe91ac16bac4d3801ba8920d988853c9ecbd345854237529b8e2c2285c56e0efb9afa54bfc117cbee3cb457cfd26516438f700646c08aa0b38f3d44c
+GCD = dbee0e63069d014880f53fcbeb2aafeaa97991df3499349cf8619465f47e5dd88a55d678be9fdb885a62c072e6a30a24fd125a4210ce4d3b02f8bc140acbd53d0f084f9f523d57238d793d788d89a53e6442ab222fcb0761fa574676c43469fd1511dceedf8fdf1ca51c862b8531810ec
+
+A = 1ac5c776d25c58da6fea2a5c1bd1ded76e001f29ddffcd431325de81d61a5dd1cd7afdaa7a2ff3c1f442f4832f085e6983c6d10e48e75109af7c5c1c3afb94baa236b738443d7712a04177d4c967ca5d7c4df7c761cc8572fc6d8383e8886e1f93eb63eb5c2ff2d3f7eb631c63896b4f599c60a8d9114620051ca3ae40a4775f8c9bed0d425f0371ba8aa07c3e258275aa05f3490ad50f067e4c6ab1f1904df1f1fdf4b72ff00bf9b8d34fe223f8bb2d3634a44efad47c8658a35059929bab11c35ed31089e959d870d27dbf2bdc41768198e93f2d86cef4687184d1a1b7de22c
+B = 39ec69cc272060466aa4137b2fd9eb5b65d1471925b399b9481b5a2a91fa5047469693991e813dd9bfb8c4242229567361f42ccb50f933a48843274027b866f6605742d5f36878e2e24450494cc385bd57a808061f0483be1defd75038eff0b3e89b0855227540157acac06651e4cca8a150f6f4fbcf21994c48eb9e0d5ca60da78e1c410968192717b623fee6b4d48c5c0d876eaad9b970b3699805c83cf3f5e2a60a2bdfd265b409950796335a1f9c704c16b6a577a5de02eb74da151acb6afaa8c63a6a0eb341439aef9a6312d565fb5d6a982d18185c2a3d13afd47871930
+GCD = 2d32837528df392b9f03d87842e8eb30554486e30d647498465bdc7a8f06d3ceafcf7587f8ef5934dbaaab3cdbe176578d4df84a55a0e45531428cded60cc3de24fed19c687e8a603fb46bf21d70a382ebd4fdf15df2a2109709a7d76ad28287d038dd62b617e517cefdf4aa7bfc9837c
+
+A = -8003378719862360e61a4de0221cee76cec0deb355c8ef52fc14f1c90cb0c58173ff5010b1f5fd2e7a3b2988ae5e806bcc363299ab3e43f0808b16e046e9fcb5a9bc24c58b02cde79f96747e75f4aac790193ca7c104c244497b5259b70c342be35c9da89e9fa2df22a21581969891013b11ce81007e3dfc4970cf70c5d637bcfd0422c17f15676f08755948572d9c25bac8b75f0ba6dc6f9092a6ab883e82177daf43348d4cd1c5ddf6815d7e7df0a60d1a60fd21b553594d9969e54d107086a7280d1d19c37d63cc9de66029f9395c0f20da7cdf25cef3d517bb6e08ca70c80
+B = 7b9a733482154336d56aaa63c85d2606e846c76377b12486b96f2ca135e211f3fb71a3a7623ea8f008afd9c23385352124653f1aa9b6af07b511e63f5f5aa8a14adaacf84ae01183d9a26bdfe6bb1439a215ffb0597b78b651dc954a6a0813553bbed13df34c6262fe7aeb182d3007c6c048243bb39b8c5ce5a874abc796d6d0c76b4f1e833491a1f73808fe29a078abf2cda5cd909368b44ebc39e5659540090aec05fed5735fa164c68b18db260a8f28848c8aed19c89ca219ef53508da4ba527893c1373e790e30c27b7d5eb7226328d7a6018024ef466518222cf5f15fdb8
+GCD = 5896d7e146b9f8378b12e6dfdd299b2ee9d709eefd722f730a0a0d67db0e9a3dcc60923fc54a4975c3cb621704ff8b00733b28bc66a6098e56782834c1fb59df57d59f37fbbbaf69bd4252eca8bcddf68d87bfca9419b27b8c834a9eeffa1070ed2f2c24922933be68d2b5a3bb90a3068
+
+A = -10aabbb89a2ab07998d0fb800d0dc7b692af54f1d0010927d3241e48e301efcd429bcc894d1d6acb2b6824ba23abdf8d9b44898b1a198c5e2d03b0951d9a019347805df2288b5cd6ab02b43d2d191c6e34c028f0d5e701a2b348fa37e3e6ef9188a8d170706e8e0831c6a0f1ce1cc9f20cf8f282376ca00bcc806e416232c6e56e88fbf224fa7c91eeb883e2daf8efd665a7605d93cfc69bdacf06e967f2e22c40184f457eca4715a875ccb47cec223295fa6749ab37146666291ab0f9490cda54b828baa3c22dec3a99c6032d26a2511517f8aed7d8f39e6ed5cf60713ac175b2
+B = -24d35fce2c78cf78eea08fc77c10595871d1fde91e89652fd9c83663be827bb609113947aee14dc9c9efe58aebae9a957532a046e8fd8e6db28b6a44b3b3fda27cc116f070f3664ac34b73909f6e2a2e77f5f7a8ce5ab650541002765ce18eb0db171a0a260d0cc9b47208a573a714d92f261f00561c6fdf87c4adb1a3506eaa39d51bda047ba67dde681de74e39f08c9bf84a49cc3eee67699b57d2981ea61ef1bb02142d47c2aa000be40aa72ad49e90cce186583945d0aa5a3533b29125b8211d083271cbf3f4bb44e157f000d7c00241e74c3150a70ea623acec9c44a61530
+GCD = 930b2ae56db52dfa3ce46f074e90be510e2c2ed52f8d12712a29ffec84036eb08c2b010612ec0dbfbf58a4ba584b553ff99f60f240afdb4c1c8c348b12d1181fe345bd4f015621955fd3de9f40394e8a106f5ff4652ff89c91a8690186e6302b3a864469864f45316f2d17fa94124ae72
+
+A = 114517f97454f6c2f29b4c1b6589a9b00a2c629cc6fee9e710514cdda09f287e78131d9741f7989dcfbd89247601c936490731e36cb6ea2439b2ddf93769964e753abc02b4fa7cc92625fb37d7d96ee30f33f8cd2c006384727a1b620bc230a9aad1bead5364a8a1c73fdbd9b67207180823538b985d4df7df80872357a9450c71ba965c76e5e35ae8cbd2785fa04c5fe34db7c17d3984986fde851070ba856fc83faed335ab3dd533d461e7b8b88da40f26bbc41ee3026ad402811842757c613d2f201e29f7bb2b2b4e6df8385d03eedd8f216182e70f2a67596e5882c36b17370
+B = -2d26c32401b306156120d17eef5dc1df1cf56b84aa61f8f89b98f4e0585cfa2a6276d59d3c9a6554f1aff4ea846c4bc4c5f0977e22ba387bb24154ea603af2c6a4538a813e77eeb627ef479dfd3628a8c92611370bc7147bf07cb3fb2db944ab1a565133d502894da4cb57a32acccd664c8ada0b5a881d8a9446a929132c325954010c1bb7229ee578bee1f55a602142f42fd4e29ca7d645528f8eb197721bc770acad5c5976e4cc635a82ff8b3e253f6687e5c44cfab956dd5a8e04d5e72f302d2be6395afe0fbd3997aacf875bc559be45c3664f13c18c408c746c677446ff88
+GCD = e16a6f2561cc6b4971da18eb34c610c4d3fe9e90ba59b896084d6757a94ea16065554991c0faf341b8b5c866792350528da6532a95c5363061e254b87972b56325e14d36e65618f64635252a00a2528ed3d4e587035961778868c8205c3a6300de7f7bac945488a9b28b0a840f3e1b6828
+
+A = 3c18fb0054de1f379a9a1fc8324a71ee1fbc1e364c0ca9ee88e5001f3f18a8fda872ff63be0198d5d334f517781ad63831a79d2f5de70f4b9a4cd233f5a07795d92e43a3073615b69a23917ae867f508cd7d96f562025306f6885aff5e374f65f9765c56aae1fdc356ded5dedb5ab2b39bf68393720cc3ff6f62a91f78d65579db2f78931262e822f1e85ac201da648f49f19828ebf2ada440f719fca6a1c027501b2261e3b5700cb84056d836c4b58cf6c8e8cbf825cdeba06a16c9f6f30d072ca1456d32c03689cb77124afd0c5a53c0e70d417853ab4d09f3725403919601440
+B = f51a4aea1175992a7e214a98f18bdc8603a1a301b48ef739d451ef2086b35f24400628745290214275fc9a91ce904f79959a518a57a0f770c213248000867f56e4854b1d5f64685ec0807db455608ba64bd1b261f5f7f19f3b386af735373615ab513dafa1a45ae870e9e3e1e0335678bc1c9dde6751d566ba39064b1ff29be00d687956c371cfedcd5d546314a7f0f859d7b2ba75177692150b8101346f311cc10f7d04e3d7237544af0328f2641b9b4b00cf4696e5bed6794e118a59decd69c3315c3508eb396e13285cfe79845b8f8a0378f2f6279e3b9f080aec68b79e5f00
+GCD = 27220d92ad86c3242b4ee7dc91cde7551a1385a1c20eaa6f4641dca256c7d36f4654bab606557f7f42a07903e026658d5947905520c2a3d7af4744fd89d818e837fb590ba4d2a4c49c6313309b05dfc700c8e35ad69baa311654f98a1e1eafdb9f0e5b69dab0c40d7a6fe1259b535f4040
+
+A = 13c8372f0519a9e7b7246d0339e11372f3837da7446429d33b56b71b240c8fe8cfbbc9c980dd7657c769f685ddc26f1f483ec7634bd88ae7082131e2066bb191ad2e46035aca1996401f00fa11d2ace9245e8fdd2526aa7754436f6586c5e0e16623fc32d206c7a7bb65572ce48037552352cac1049cc74cc2653c4745b96eaf1cd220d1eb207d75e1d4a138f0264b21786cb3769782a2619afdcddab57335599cfbaf06e421fc2911004ea32ac685c0bc5402048e268e428db5675e4ef8a34d0dd436aedfaa58ba31decb51b1e8076594779c28a4df78317f19f5a7abc4cace3b7c
+B = 6d288927fd82bd3bb59a235dbc56263e28c139f297857adb2b21383922c47ed3749b77d6dec3ceeb50f9521b5c5a3ce89e686936179f82120b134f6a8a9462acd2d5251fe84976783e71038e4b7d00390ec164dd9b329a4dfd631512e8fab4b6c09e6180d73360d816035794934f285fea324760d532963c3bd3a762d4b10cbfa83bd47bb606e6dcd0e5c4c1181838559fcde8b3a1ad0525299c5a58203df31513692d2171a854788de7ba683c2f3a4648477e988bab2441020f1888c82ea8eaa1fb805083608a541457566b999a1e1efea8090609368721c9ef54ca784ad9b1804
+GCD = a48e109aa498fd39e7ff176fb9832ba616dd28ed999e9fb201377c0def71791af5bed77e958c4dd9b4d1e58e7d94f68110f514399819724f18370aa1058222b997a27c1107131dc5dbffa13e9d7f86144c1ef8f80bf5e6847d6826d0bf42e22185aba8f6d4735113bd82c929bc51c9fcd4
+
+A = 2dd5b46990984dafdc4d5027888fc5823ae16fbe5b42e1ea296f35ad0f65be426754d4749e408f9d8dccd0fdd0bf3f8c283db2a5714b4d0ada6a9db57c2af7ae295ff2c8167775008531ee4cce17ef316633a475fddce2a6e604a63ddb42ce861f227b0481bb6a8bc107b44456c07e3a74ed719d713c2fbc04823d5756123d54c9d4c972332ea0d56c80a438205e8afadef6fee7ef02e9afd0509ffcb03853810edda51fb3513ad1a97aa73a2860997d3396e368a4378fdc658400e3e70904ead9d4d0fc034ec4c6800f5ae90a23701dd0578dc7f53db66a2771d34a8f753339ef26
+B = 19970b4ed7267d41f82735c71b00b2765e3f30f2fb61fbfad9a99267436e0f169b3e215c762c4d5bda9139e13fc67ebfa7eadb0a2660c1a764ec98afd63699d7a810548277d84ece74e981d9c8ad20afc1afe8945a23199108de1f56adcecff9245a0b95bf8a1a69875bc7ae94f47b56ed0c1052486bed08a50b9529ce1cbc34e2b7dc798a02ab4469809ffa4b6e417c10f8307b96010ee9774ce5c78afa6e1b7185332777e822c2c8733786a1222b1e083508f6a18d4e3d2472acf15ad2c7585018c551c0da4f98695a82385c756a195412ce7d4c863843e3383ecf18b5bd35bb18
+GCD = d5b2ca996ad2a962d06e3bf99c16711cd742ae010528f392d8ae8a9b62475da6ec5a5f44fe58a600eb4eaa6a1993d4f85c68eccf577926b2536df910d0fda0b6908f4a8b79f8a6308fae75ad8e43c684eab8ef3afd1637a44eea94e1670306fa043f9ec16068f1475c5d8bc04e24e8fe46
+
+A = -c90c142add4cb6025fef5182c08267a33d11c6bc5f288f17a7c2cd3bca6d70b82655427f43331a43a89682f67a13e2389166c5a1c1a3bc16cec2f3d7079f61bbbbb931b6fc4eb138fba8cdd29f0130be25a09df1c34ebcaf37bd750ae601237862fe0e002d988814cbb9de83b9f9261693f5409af575674bc86dafd837c2ece00b1f7694eea21dcbc312fefc3c15597a297b08c5477873486ec592bbd5878ec5358f715374a5d0c89e1ab55734f5f4e9a79ad3a8aad69222669d26025a6ec4af9d4e27ec978f2602e960a8ea7714347b2d7cc9ce938bcc9e74f70bcafa8e0c90b1b6
+B = -4fba1ea0c0410f92b7ee0053202d0af5cd97f4c3f7711e59038ebdfcf570f5ed371ec7677ccdfb1ae9c16ab0e1928b7fbaa222d377251f63f34e8015205b766326249bb8473c2dc44d218ed194c09000ef7dfff514c0e1b8b9421c9f5beec5397d874c5bd91b18cbf27ff7b0f98b2b1b14e642bb289eb62602c6ca1c34b4ab3fb78e00d8a8dfbc49e905bab4dd04d1e20e8f4cff2ee2fbd96cd0cc4b9c041f3730f75db19c720f9bf09e211ab3e8917f77181e2c6ba7c259e21ff78272588dc0f7c5db9eb2af0ee87c60d2849b1a35aab0c5498289d4e24d618e73bd9593e4dd5c0e
+GCD = 4c27ee7eb8d7f39135166947e0cee7548aeef26149fa24da5e42359a1fdb59428dd830e9392a3cf54faaae167f12d400c3cf870bb97144c3ba32fa7c0613772957c7ba658371f43d7463f9276d2648f25ee5c01f7d134f60c5f16bb2da335d6bd3f9577135da91ee07f22e301311af28356
+
+A = 51407eaca8a7d4e49ee30612bb7a917a0f1a2f1f8ebd74fe0f6d214d698c2e777bf51ac38c236f0a7d961a468517060e83c8744737043bd393a2cc5e6bbfb3f0bb07361415b1dd9e3c5ca03972c16c4a7c99597f5e3d06fbc88f2707a7a9ce2b92429bba6750f65dec8b4a95b1801b9df47a813288c8f8c93489ff57c49cbc57bf059fc75881143d7039189730ce5d6ebbb247b91718c9dd83d0453c45c2891af317d9d98b696896636eb06ff05e2fe9d16eefe0a2988e58bf52f104bd0e99a86a36986321920d101ea815336bc92638fcb80fe401f7620fe26d8c09af965fbb7c446
+B = -4753075acc3e52a06627c3a8f98273593853f6d28680b48310d63cc8841e5b9cbbf309d1dd8c138c39f6fa092e88b57a08251481b7a046a322ba8940f33aaa5a12c252d33122725dabcbef3ffe8e9f85f411379dba977ed79d77034c6fe7f3672464325d1f9f7bea605a5680f7ad66d4663aeacf5b12166167e5b78d092c83ca68808fb927773efc1ebbb84c4ab7ce39e1a410b452c8b61ec25e863006c28f0ca22f4e30b859c9058562c137971dd7a847d27c549ecfd68ef38e8d83b726ca8be7e3e9e7d8ceca45da2891b9e2da9f2cfaeb960d4ce5f5b0cf7d887deeef4e292d49c
+GCD = 2fae0be8e73c72f9a5cc9e08e31711c7b98f3f534884890bc9d5eb7d5e3e12b5afeac46a6356759a0a79c424fb335daac0d253ebdc40f1f638ee9187cc0f60040587056e5eaea8eb300cc5df84664bd11da29b902b1016faed622a520b3a457e8a6cdef5fcf7474431d9d8723ffecd4b83e
+
+A = 44c3b4d2611a1e2139c8700a89562c4d7f30d32634ce0ff096ab1e1f6ab7d16ca855af4d64864da9bf3d15093971e16862d42ecade782e5358556425db227b8dbf63fd8c9b05267cb8b92031d4e81b656def8be573f0fb7b769df43e8d74a191b5bcbe1935a48b8bf517a9d4243c293e02697c4fb9d4997a650d80e96552ab78002e30449f0f268ea63d6711e45775da7836dc4d0d21e5ff9722ec8ddb0c61995061d04daebab654990b896f9d0549e2a86595ee8e7efed3c5c06fc5bd9956f141192b7de127dc4a745053279005465f15f3172fe8fd79d2228e3c70fb47c6daf2538
+B = -323b29283f091493e58868ee85808101324dff01e33cc9cdf3e2fa98615d55c063a84d327901f8ad582fa8ae7772d2bccadd4e90014f3172a727bf6a85bee37a35e0db71d385b3c65527f3420118848de88b35efd695989b2ad329b0e6cba69f631b3207cd4664e4aa36cc77eff4ad00da2f51f8e69a1381c1ed7506468b61a797732ba77e86b08184c55e837e67be59cf59bc69032914077639c5247ec544f54f826607833d3ac5cfa760b6777ee95c9c804caae205f5ec44ea9b8fa16582321968d3b293842882066e0cf6da3a58d4ace0292d84f2b243653c6f5cc3544e1b3a5f0
+GCD = 461e865fd91c3746fa3d7cd99e8f7c4cb5ee68c10a886202831ee554f349a7cdc1e18346703d758e616c9b2225f56b30c6ae07135431fbe464dd31916297a6bea854e980d685d887770855e6079414e1188d168f42713b8fc04303584289bd2e84d1942c9d6621798b226da1b13263c3838
+
+A = -484a14524658815109e22b3e0afbd75fad59d1171f886f1deded1427703e42c1e6a39aac949d54e3b4761200b76c3b56957f7bcfadf5712fd8d6a3932a640fa4ee648106a1b6012b092298b510a54c8f29809ef1c5e232a7e6e2f701fa48cc061bf8a849c6e45ce82c11ad4f45ad7b5ef4758d3db3c098c936486d8ce8d271f68e56e1d9657a21703ab8801d8592855671884a8c6f8f00fea14ca3df534b286809d975240e5fc6922e03e4b682f49e885cb52f6bc7e153bcbc66854aeebf7edabc3fbe8f1265bae85f171f63edee194b1bab457995217e097fb6d6761b7ecc8bfb23d1
+B = 53e323b8ffc9a9de9a2d4300b14c701ed5cbb4301a7cbee623d883b4c57ba787470807c407e9d85f04fdac64ada58429d9a2eb1ba4a63b5cdfc28b23e5b6fed862001c91935af702db424e6c0878b804088201b2c7611a711b01a375fa3a20f05fa67b462dc7b7e51aa4edba1e5fe4fd8c1ca5baed8d02af19dbc0070247a49205aa64a3a2a05f40f162bd4b8cace8e3341cccdca2bbc2c8473f5f0b9efb4f4cf22f322b63f92ff947ff273a58f1cb48fb6b9d12082a1bad6ac1361b9eaa46e27eef7001f471536e11b7831572c273df076c98dc7ba04523795d354decbafd7328e715
+GCD = f644fd3f0e02931b84cb01fd9e2ce8d295c5aabfce4da5028940919d3b31acea6922dbf99bc7dc3629f587951aa79600a408231f6b35482cbf07049d5735dbf8185c506f55b099fa413d8a712f88e855ec8e022847687b1eeca356163e2a20ff4e079694048df54f8ddc75bf49f3e3703bb
+
+A = -28876a61642abf9368be3cf59fd059b35a267c43e52399924d53e79737f3303a95e273e5337602f086d4eecb03811ffe23e4d5a31a9dfa0a36ee79b5e420bd8b843569fefd1d845ac608b61a277612a14e3e285600115eaabd48be272b0a7903ca9fb8777c2002e8fba92e6839dec9b6fd07d1ef356a4911946ab80330eeed6da5728b840a9877b3141d186fbe74ae97c141a9501771f4befb6536611185af5027745b0464db7a9a8124b37246e0c40dacacbc49a60d7f748f0881a741c74a84a67df2d021d1dc6114dbdfcf5c440ceddd5599d19f3e6dac988878186fa951076510a1
+B = d0a793226b62e9725f00dd0b75bf6f4311b028b88855e4895075ed055d48df2437afac38cc5801e3de57732162a837aca55d46c0a2b9daa7218fdcac4cab5aac84084b3e7d0006c810a153df3126e78abcacda33d4506aea31b6fe0e02e8ef97c1d48bc6c81449ecc810c98e66d599aea4a36d6911673a9eed1d837f2cac9af223a41c2fbe0bdc83998ac9130d3d4f5145865c50f8c5fdce6aa6daa825751b998249637f4824a32c20ad59a9e59adb4564e38ab66d6965966a335d94360e4be5c6ae2a8d9c490d61231eba282b91db40c5cd7b5d44f714c08a8ac3906af1379b536ac0
+GCD = 1aeda3db46a15d465ceee006c4b34158e06b6236d483180c966c9ca3a2394d36b0385a6d2c785d47df4df803df305541b8153450e5be636ce6cf88d2832e06050f315afed07025e32d96c1ed08c7df66d53bd47b1665aec135c872b8df2828f7805926014c6890ac857dfe68ec5501d88c81
+
+A = -3fadb2eb4179a7244d02f41b8b5fbdfbe16fe76aab0267f6a5020a6beb819fdcd9128ccad97f721c86dde164e35f2900fa48baed7c67ab42577af5512acb64300cefe9a0857b63629f6b7f73491d99144192d5a613e2d6dd1a2ed1ae23c079c06927df11af2c1ba9ffe2a6b5a1b7b78da3c039e8f5ff326c1b60552a5416d77c7cd2db663cd1ce4945fe555fd96a4c2f37a854dcf91a4631b676a538d122b688d9150347c9f72d8192f10aa3eb812669a745cfa4701f5381c14dd4f6630758fc2d0674e3ddf601ffe480e6fcb900dfaa627f76f390d12097a11e09535e6f07ce7196158
+B = 3a8df796f2f3aa3096b98d38018f757ab2ddc72995b4bc5abcecd7618062a94e59deec43fa7354e11b63876eb229d3ec4ced37c932c0b472fb2d5abb9cee3021188193d5771b09c52b7bee1685de9be055c34f8e1f5ec663dd8c44ebf756fb3d8c1d9ca47be6b1020000b3ba4c3f3c85c17bada14ff3120c7a4d2201fbe39ea8b3695a5114f7b12153fcfeda2cc4ff9f6190413a9536a7fe639d05c8b5289251a286d6a71cf3b4c1c5f24f4906dacc2adcbea106c9cf5e071e79b144fef16e233fd058424a8ad84235eee837096aca00e7bf7b619bcbd14b7b8dc244b0d252e41f78b0
+GCD = a5b9777ec6a4000f87c1c0418df938cbfc53de702367a2035a317812fb8be40e3d39b5704afea69ae652b6cd5c17325f31508b64ef019fdf0072626190c797e923616c097c159e5378817cbcba2aba68f2f650ed6240d087f429eeff283a1eade84077d9a8e1d23433cf21552d7cc2e98358
+
+A = 4546dc88545abf3991ecf7964abe6fd4429091e15059dae00c836bb6d43e7ceb6420896430959df964ab6ddfeb2e2dbaae0b98c6de128f2c027f96089d3ea7fbb665089a684b0c7f121fed84a05dd5e419ec9c2523b35955dda5134839143f03f26017d962ecbfef1b12eea92b018c68f65200daca146e6703a96490a47f775284acbc3c3365e18a524734dcb075b7abf6c8a229dac543e0066633c0ad141405d58fd39d511565955997f0b1fb1dacbb0fa10a151c7b1ad55d5d8cee4eeadb58496f8b1f3a2bb945ec2794b71d816953401829a6d3166205ca1e40285e27dc3205fae27
+B = 507fdaa9bf3b4d4752d3651aa4a7712edc430e3ef35e890797aa626db17ce8363d71abd9b5e137a7d3e273e982d0ef9d96da50115d1434287616caa69a2eb92e7098501f3ce35d4c02fa6909ab39cac1a7d86ba2ab55c92667e631508290e0e781846e6362a0de48936c3b5c8ec2e51f3a27579eb02e65982febaee6ec0e5a916351b1a6221219a00e5cb0a6bac543a434d69941935427e214da344a92d5b71e6bedb70e79c7cbac9868cbfa07b98cf820585f6af62cc2988bcc00843159311938ab76ddff776478e75ee386386f2814ca1ae65c640a13eb466d4ab38b77980fa44eb55
+GCD = 443e3bd521d2a8550284501529e20cc19a8924f595a7a1e5cc7df8c2adeb80764502332844e61bd7d7f2749112fda7151e2cfb7c940862859b294d2250b037fb71d3b9b0da435f7bf6b3e43ec703778ba3d728b0e3b9193150970b6ebfa4d55451f5b44304db5b55346f9afb2a1ffefd54b7
+
+A = 3da9d76c9f488318c800429485935f3392ccf854f168ce9668332c66b604bbb1967425a285dcff49f4ef64bad070c3b9c459e8d6b7e0de45e511653f37a146873bde37daea52b0d5d0ee240faeda35ee6a0c4a199f88cbed75b688254e22d19a2e2f2111eb444343b55914a184ceced9106333b437893d2bd0a7848e5bde16b61a4facec4326e92cce9b3c779890ce4c5bacc436becee62e156d23065b06fb4f99f14aea51f12893a5d4949861bfb47892b894f0c73d1e2abf8f58c872e2f170df8cb3c11f4c818688836dbb74a173d5531ff334083a7a16e38e5c851c77af48fe89c7f1
+B = 418a39b25b12c8fc987ed28132ab13a92d42358649b604ec83df11944d880efce6a1055ca83e0e78de1de2fa23fbb728e58de3d2eaba4c14c8fc3cd5f3a6e5d8779c1db2b780a564c85bc0e61503bc5247ee0a26fc5a4ffd1b053610fa40ba85c78eb3d319cda05b28d9800878e0bf6eafb8b5cc21b0ddd7f5a7ff0c1e3cce9293bd348ad35aa80d0f09cacb008c13817e4b4e0255bf7d0d12eeff8e805a600dd6502d7665fa7e31ac52bdf8d498a67f1975b489b47d2199c6a67023470d574c55b6f2fb357122df2e5a504431e501082031ea9ce880910701b08e3eeff4ba7422af65bd
+GCD = cc09aea1e5c0f063c86c23b3ff69a0236b6f7b1ecbe680c03939244bfc270551cdcd7ee5fd02895d838abb11c755277178450c0093ef1b2588ba52a1a6021d24cbb7a93379e093be891e3a091cf1dad0d318a1b8a316e9149603bbab61ac866383584cdf9599f0a972536e725e945cfb1a4f
+
+A = -30930a5058812e9d1a321c0639f73e34ebe5118f079a1f5ae55ffadaa31e0a00422cb5fb2f64fc836941c1465664bdd4c9bb772b7d4d7655225a0281a68807aa0e79f331384058f183385c7ea7e66a9a9279414725420780f6b779f790d6dd1f20320ffe9fb4626193ffd3f67420c27ddafc8a95287aae955ad4853cad2826285d0b80588364a6e3adbd8dcd6d57219e3c177041722cc052a12c78119c6808326ea017fd4056a31cad667d22bf13e184b0fc0e779b4aad8dfed21c85befe2654d90d427e5a2f68314e77ff7dfe691416563e30b3e7c4382494ecea90a694636ba045a1d7
+B = -b4396654068a9980d7698bf6090e2221b9477c9611abfa686539391951998f39e8c7ef838ef58ec33a5f26cb67b87967d45b607a6b3b1d0b8960bd40f1960a7dfa17a40967228324f06508c0a0cb40f9ef1febd68a086965447eeee232b29ee54e43f8b555fbbc8eeb63833f723fa5d7056e9cb5cabe3a629c2d9480cefa10db82b5064b36e0c890c065f84f061e8b96a3d57764ad56710cabe1cf0223d77a19217e7cc2b85bd523999d9d893340203629f46bac67478256a18e6d9e05f3c91d1ad8f5b34c2920ec53b6dbf41d1a47be60918ee9b02d4361f6c31ec380995cb9cbac11fe
+GCD = 7948f81b148567048ca6761c68e2920f6f910dd5e172e619c191fdef466ea55fc3151c697bf9d2d60f340f49dfc8594e46dffc564381343e9497b7fdbc3679346ee471f4793d2a94e3da634b24cf8201964cdf6db8f38e9c8e521c15f4387a0e038ac5509439efd842061deaa001cb9fabcd3
+
+A = 2822e040466c5e960c876091f4b148719c2502de412bf3f80dd593bdb5702aa2529fe4f9a47cc53aaa154ea1cc02837b753e8c0be83143afd84da0faab225104b0cd2e1a7e17bb10741c40895d7df77356ad2ed0fb821a3a050d8ecac86ba3724404ae3bb0a84f3105fba3c74c40e0a640e84cd4df3761af3d64683c33129fdf657053588d12e6d5ad32be50bdd2f0e717cfc2e2c87ebcc77e2b84cc638b207e3ea510cec224a2b9516ecc85fb67bac6d80c65828ac5950e981ee378b3c7f0fcc63e85f316c3c30a00bf34f09839b3e8f13b45c5dd75ff389624630f66ab8632ac291627
+B = -6f60430bdc2b03eccefa2fd0c772f3b615e256c0c787118fabd7b1d4695a1e3718441e45864ccd1566f57c83a6f204739862422979c18db6231d5f307eebe0eca2634442a8527d5b932960ed67a8ecf135a8d56107bae8aea83daa9be3f3bd56b1e7358136e894bc5f0b986b0af75b176ce7e884b62130a275152ea022eb64d60d6b5b9ecc00a7da611589cbce65a17c6343e879a496bce744c99394037c8f9d95fb34602157997c45be0b8c6c93861fd14b0303be507f61d4ee7f5e4ff11aaa28a0b947d4d8bdcf4055740c4f8573691348c4009462dc89e03b6c1b0979b4ec7099e1335
+GCD = 387cbd97765e8fd3655450ecca4ef9ebc040e8cf909000dc199474a7ed28ab26220ce6afdeab0c8e772e818a87f13bb61e17b551682a5d34df2af8447d2b30ee06cd4c8fd2efb16010461e4065b8e4b3d30987b85fca9b3e45b0bd953d151eff3e250d46f678a2ee46849ffcfedded2cab855
+
+A = b6673cc591252d4a0e447feae2763ebe658be5b2e5bd80bd370f7510d5ba9c3f89fc2ba85e54af92604e6c1a5b0db8647bac06d3061c410ce418aca3a8c55b966366f212e3d5703e7effb87032c10628de2327935ff550c7eb77f91c2ce78ba23d47930d9e41624561381297ed8e2214fc916fc96c13f733a3e52b3235c3dceb0e9d0781fa73190b901ccbfa69fe6b7a7156364233c0a2472f834928a73b6fbfe39ac8ab15b07a0491829b88920982cd6bf2cd8068946c6294af451822d2d45899a6251970cb51903e1eeba99f65853dcec035a6d89d90accfbf7d3c51c48118641cd1f9a
+B = 165553204d8853b7b379b90c37e8c96b534411abd9fcfc1db67e654e860d31e3a0fc0fa1f702c2613514aba14b816c349737fe80cf8ccce628ee579f372fcb081ad9ae87e305dee73d9b15b5d00f677accd5a11c3fcf20058c42ddc2a21bbb873e7a5ec54c68b77f452263d3e26a017fe72c47c4393334bbed3bc28205e79984538c33b41aad4ba73490108c81b2f14cd40b8189c3accbc053499dd14ece90d266f5bedd58433198e78461e945817a35f184b15bd9824edec047a22e01028711700d76d8e308431b96ea57e11b87cf780aec75504194cb1f288a93c01a26f61508f180ba1a
+GCD = 5af3ce452559f8f500a07def004380462e4f767d5b974a253ca4e1268b9303719d9245a820e1653bbe6001e429a7e48054e2f1ffb0a1e2afdc05cd79d8319e3ba979c652bb67b8646eaff17fd0cb7fe162dd6d56646f5f972e8be1cf488d731a26fc004ec312e6bad5e2980bae96e691eba8e
+
+A = -f048642178f3a5493fd98ccc18cd5069ac33c61ff5d3c7615f8dd3bbaaf70314cd504c5037efbb84ae1120a8ba65def97696a9969726f31780b7a499f78af24990b1ec7c152a8744995e4d96f7fcd8c097c6f02ab10fea507d48f2ec421007e0344fbccf1c7b5b23f08043314bebc0b359163823ebb9cb23c5d83e7c6ae2819f87a81ee46acc1dbfc17ddc9450a9d16276a9ab6ffdc574f07d10b3475a334e6fe34512b1d52c1a369a766c3f865cb10c90d5f9d3a1db4c5beb1b97d9bfa2604d3601d0dd7f5bf26bcb96c3a35978b18af5b215d75f37406bc7f987c69859f964afaf911c0
+B = 646bda2711b65a7a8e22343db6002d48c2e6beff6199ddd5b3005770010d29ba617a31357b692a5c7cf77cfba9771997793e64c01e2ad60d58f858a3360a03dd35a061c4841c5fa4ffa3b325f771a51635cf32097d66729a72cc1e550c57ca72b0427bd24908db28756297a2bff7330d0b7999cf47c552c7444b5fd3d87074ad42a757465c60ce2102db04399bda757dfe516ffd0597cfe0c211c919f731d0ffd06b19dfb700afafb2b54f832ec94c797d51f699d8ba47bba7e34579c90ad50a15dc4b3a71f752ca41d4a23934c7ae221b96ca8fccfb4a346e2525ef08b9934fdc14ce0c20
+GCD = ea95316b8038b8eef1e2d0afbd011876a1d4733f7c47298937206b053d072d6a4c88b1083fbe408aad7da2c9b9986bd5f689a5f70ac7f27287efbf457e3369d9442bb1ec76d489ccf45fc4ae1a38c08448cf04bdb1980241c33c8d910b674dfb5e08fea2df9e008c79346525e1dde7c6d0560
+
+A = -14c7c1cf7ddcb8ba7345345f425c774b49b56e3642ecf1c21c0bff2c3a744f578cf53a1703a2979e0397ddcea3a6180b509296dc6d12cde958211c9fcf9fe4e0e6e0065ac3765ee6eed36f15fbd4dd07c15849abb965a12f2fa865f162299ae1011472b35fe483ac79546cc2f9524be07aca9c7d527c3e78669b398cf427f62347dc963abb45be2235ec373fd6ddec8b96f361e6b5663d5fd0083b84c7d075c453d93f674fb5aebf2aa6b100bc6950d23166cdeb0b2405714a78ea5ef5bcb2caadab6edf9407daf4542e40a244b391a52b0f3ba78d216c19ec064a4aa45983683da7ba3fe10
+B = bcb4c900d22905935134b81f862b7e0b11cb14aaf616529c65f725c52294c47c61b8a77b4c1284cda54f008826b4fa4b3c1859c3597ea48bed38f27d1194dd92fde5ad6971415639048b7cbbf52d167ec09aebcab3e3776e4afc3a977b4696b6b1c8ff4725595e181884d3faf38bcde08c25179e825e6103f60b1aba0e9a62c0b3e4e2835f5e103dac8ebf42394c1fd4b46300b1a9fb07763bf460480c84c5ec4a0ded881f86490447e48825e73491074be834e17747d01f223aa7328e1b73a15c9779850642bef7d2341d8d6f94c5689020e60df791a8f088301834e08657fe37952abb96
+GCD = 1838f6765028f611a0659d913c8d1bad60a03d29d87351d793efac22a9545c1662467963a38c57ebee6a1042aa5b77487fd2e5b09feb19ff9fc87415f6cad068248186631f6fd10ac2b8827327bf65c832bf055988612b96a2cc62070f1df00c0a9f280b6b5bb855132695008d4410b6c592ca
+
+A = 1c48ddf1f4e2e090b77d2f0b6c9793eb421b32e37d1ff05a80108ea48485e228c2512b0f55ce5c3e14db073cb2bc041739f428dd632557e8c81953d9a82cf0c4735108330a317abb9928121b29f6f074c46b803d845da1c8df1869751dfb27814e77443f87ecc558a22ac72fedd5f239f94a5fe18e432e16c5341c2602c756e631dca354b4058c92c924e00132d0b66b9f3b6279b2e99eee4fddc1af37cd7059fe49b0d2973ff1db8ced02f5994d9021f0256cf0a9866301c9596d4dd60f087418377410d54d90fdbfab920d610e21d54d48efe64df6e9b441c94a98cf7613ce32b27ca8f64
+B = -264f91f06321f47a7d63b1b293c4ce36d290dae687690484533f0d5e7de7ef6f32fd64f6e200c184fcfe3594ed529df17567074e70a4f003286d991a29a68756cba644b4951a854a713abdf80ab49ee0c467d57bde343022ffcba330b68967089be4882df51fa06922ee346e96ca81b9ee9678d7869c09f17b08e5f3aa3ee75e0d8f3e9d5b43911db2c81d44c81b0f74793c932bfd1c86a0974cc53ba881aa90058b53c85008009c532e919e079c34a35c0a6477a6a6bd0f1149d20cebc5a1dfb66dd3814f30ce96f6dbc4d8baa5bacdf0d73f81c90d29cc0f88f62a315fe0cd16a1a9efda0
+GCD = 3eeffdbca0cff6d529b2de69af208e6b99a9b42028c92836af2b33b44d94074188b26ee0e94ffce40369999a8cbced6f6a94fa0944c8445494b5d7b983dd8952abca8366a7c0f0195cd0a4a02a9833a33d9efecf635529e99bd97fa46a8b9c3f129c0546513b4cbdc3fad5bfe193f7ca258764
+
+A = -1334b8fdf64ea14a5ecfa55ee2be8d844aad16cb58e880730b78624c96af300cb57ff0e4dd9bd755b1efbb257b67425020c584c32b55baad3bd3e09ff65d3f2e2e1fd2e3fa422863a18a0943151e01219448cab205ca585fded65a9438a04ffbd07bac974c021c93f1c743e6054ac0dff56399d6ceab5ef2592738f4a66315ac452cecdb33d4cd67e37d630e0ea4aa341eea9682a015ea2e3005e1ffb635c2b0cc8b8be5469f33526aafa7c6545ed82dbeb979b5178ffedadac33b1fd37284423daf18c9a3e16defbe1c68034287298ffddbf505cfe69684bd36c07f41dbc73c725400133dd9
+B = f1e43544265b7d2a460d8a619ccb001a6190356fec99b45c1ea457ef16e8bba1d5b593f62d6dd8e462c07e8696c7bc49249dd30424c01dd6270f3ef9a701ffe4516beda9641989579bc3a19850e4063589b43b10bcd8c588020b58110907368680103f420eee6159e75e286bfe7e57fb9c8bc00dce8f2c24bcf4156cd6ad8abf810928de7fd021493fa84e3bed7c073df52e6c64ccb6eb42a4013f63d19ee5a08ccf38aed7a1801997abcd1828ac28000bbde8a4e17e6590b393a0a8450815c69a046164d25f8f4321573e54755787b4bd2d61b1d54a69f2f690881f36e03d095864addbaa
+GCD = 13a227b30d272f363b5314536a673c8394d47382a13bad6517fd2f25824ed656ee5582dd4af61b57b29dd411f58dc6343f79f2ebd1f438b75e36421d8425a8f45acde7f5296e572ff3933682dddd17cc5921f8b7bc08f2f58acc8bc598a0b7c345b4f5546d1e6873484e1b782a61b486d5d4649
+
+A = 631439392ab44709aff68581006d4d26f08c91981c556ffd73e2216fb6a57e967598943b8ce21707e3a4e913f2302eeeaf5f6e698834b671fb70b9faaa5803df021f00fed99417a687d018fe88a3f6d451659c88258fce8e2eae399e13420981abc80ca62ff4889634f112d1a95ee7156b963b39984fff66832c01ded16c21d3e95beb9b80b586113c572906a1abe64e82ad599049df08fb15a3332a701d4023f72839d1ff81bed0d949e5bf577d0b17dc757cff6503dce26fdfd8f19f5aebe0970f3413f11073d668fb4b5b95848e933e08777a396b9a4e876bc7c46c7e764cc8dc8961b2a8
+B = -68fd910c09db7c7f91bfe1681694f9eb3cdae2038da568d2f651e3de40c1c49681f04bd0b6e6138b22c7ae472e6c8d25aab48c9793f327f83a8720fed7ae600fe9da69be87b4d17e306664d98abd18e7569df688375ff67015cc8b24b85feac2265a1c8c7bf59c892ae6f6a06c32c724751acef03b0c6352a7f963aeb1a0f26428cb9bafabb4bd00b4a023c69a424eea642c32f701771ef0ca92121557276670fe4a6095d4af57b863d281283d1f6b1b81eb7e4a06f63eb7424a1e3e3cc37dd66a3349907037301338b940f974460810aa71fd4ff503703f1c615996867d738e158691bbc1e4
+GCD = ee906e3dcfa0bfc80ba7ec6f60680c35b1f736751ecc2cc44b788f2ef3eeb5ba7050b2770d16bcea3486ade92b2c4cd57843713d03c82227f90357bbba7873004d32d00367b65abc90eb9f8de7c0a1753c11e185205f306b1167f1ea0f65c3b08433ed093e64cfecc42b469b4cab9614c7ffb4
+
+A = -1c3c92d85ece7ac25acd50d92583baad9a55c081183106eb03d094e95741461643e47e3f580dfeddac4f91b6c54abaf086aafa076e81228d17e928064789771984bd9a77fc48278c7c3d176fc5c6f14ead8c2ac1e50b5e61f1b6f1f5087ced3a9fdc60620952a6fa89571636918f6620b57be9e73d599435c1d3768b8af7f53659c199baee56c45e919a53e7edc14bf052bf8108ea4d10159a6a035b9e3d2c34a59a93c2018c089e8e02f0e78de4abd7aa4873b64d969719b7bc2ee0f4a5d1b7720db9047a69fc06b05e70d308875f0a33ed409677f0402f6ece663423a0856653ef9cc5cff53
+B = 123238a9895b89e4cfea644bf0d37f13e826de10d159bb22a898a0886d3dbf0c97f9f95637b70b7a732354c176cb89bfafb9069e60f9ec474eb93248090ae6df18101e301b617a67deb23465dc8274a2872e8c616ab41ecb41db68ff83d6729c5b64cc4ac2645bf92c59326738518652ffb212a2dbb419b4f3945cb6d3e7687c565a75857973dcbd37d89e3b24017c6c7b594e77f10d51162107f86bebb5f48406700b8dcc67aecfd058b1df64e75ad24569daace6729afad72b62689b4e7b9e0bb1d00fc0ebfc4b861a821789a502b137516b6a984de4947f83acebb43bd5f2fcfe1e01d6751
+GCD = 1d9a0e6e71a23dbbc63f9152d9d650241a510786848dbed2f2e86354e97fbb30cde2f7bff63c69d3cd1ac5ed2b08392ff8bb87be42e1df14154816e81cf7f0cff5bc78f705af9ebb9f0588f3c5fe578ff8d01f86f217d3de0dcbe67f1d3859a1db5bb3ef1dc239d9af5764b46d474972fa0a107
+
+A = -3e5e2a967d53faa7a12ad8f4dab9fec7a43bb415f748e3a3dddae9096b87cd9d742d2f3b7130f2a82564682295e521754a7429a5a761894769d54d8f2111cb9552b5064f93544fbfa27e5f1a1ba07ad05e89fd2e446dae65d55e71877089407e97e50b40b6b07278969d46be1b985e4cb185b0d800e6a8a00e3a768cfe52ad7f625742407ec4a2c3a246037353c86ec201b0bf5c832e559608194601410a6fd94d8010483bdee47f1d38d79a0cc5a11192c3e64b656519e6568f0ec45ec664fbbfdb7d0c24b54eb0e25cf1794e3a9a1f72059f6ef4c93045bc828a4f3089ba23632380be40288
+B = -26fac76019831b0efe3b027a929ddc42f1baf5ad08c7812e3763f5009b22bc1f993e5010f1f6a4e0fdf4c1a42ca7cafa9d1663c5fa7d78a9d907ced834c660baa3a97480b6f712b9b50e73e4c1966e4342d382538582e1c3d535760d0f6b183ff811f4243220daeb64eb4c4180494a31f3b84c3773b3bfdb92215aad7e68829b31c9448fdb857205862f085357b0df5b3be17bcb36c809d27ff1e19035c8df35d34a5cdf190f8be2eecbf82ac6f7fa534f76c6f88b0e46834aa28e17125d4e57766a8f5f397ddc235a7ff3fe5e755fb867fb2d933b5cf117d0bbf9e3198de2b0aaf0e3e59ab0e
+GCD = 2ccfdc5914a66cb177ac376f9d8dce59e0f63ff15828b8a07461b74afe7c4fe7f5849ef7cafbfb994de8bbbe4d51746a2d78f9b5935854d157b8a6f916cc8b18c7b9b17ba98ad8d1fcbfc7976f56c59931f017dd6016b6b04a0011764f6bb3468ec2497f3643bd4c4a622768f8a359fb650f332
+
+A = 1c6b60d15f6bf611e1be90c5aaaa2178e9db0e2ea1d389b5a897684153f9b4f4ae3e5daf908c186a93d12a0ecbef797fd6c2b763cd33cedc107fc3affbacc5aaaeac7e3838252f3dacff7c7732e97de098b84f39c7cef85489ab381f387b43037876b7c6e46f94c87cbf1888e24854a7d6332341ffc8e89315e360a36d572dd900932fe8e5178bd186b311655c882de0ecde312a171e11354e715db5df75f73d60e39872b603a979901f5f87e969837f700b5e992fb0dc1a69744411bcff242df634ea062087e9e2f7be469c8c68fe1f25f71af94a0a7c11fbbee22077460acdf466b4d71c8f6e
+B = 2fdf68664229400d21ca8e86fc520d7f294d82b989ca2b7e6056fde84ef1c99a924a2a35b83567d243d1918a13b292f5ffbb661846caf1ad308bd71bd48ecdbbc3d2346e5f227327ed68b04d29fba7de045e911bf66d5466a9300543e2c8cffbf3d9ec46d8fb3937316c224c7e622feb89d671a1b5b9fd992c7c5ecc94ecb7244342c1ac352fcc0681f072c174b61bd443d65efe6826807b113758aec5abae595e28399a9e210bdfc4ce6128ee5373d631ded0840d98ecad4422848dd3d302ce1fe06ae928aed058f72b06ef37b5cfccca09119ac32a6ad14d5fa3a12bc737fcb25bd0776fa94
+GCD = 76e6be7ca709dae8c7ae53919df8629ea6b2bd6f3eb1b0a19da01d043f63d5ed21b497cfb03b3385fdbbaf8e721d9fafb24a70441c55982cb032b5220ebdc24e9b723f9f89f3ca961cc764a11b5a61a896a591419f90a9ba979e2be8ca469597857a25c827a54ce07058f727c8372441f9a42fe
+
+A = -427cae2d686c2e6f2d9d754cc3b4dc846bd9d1f502d6b43f698b26c87bec28f9e29e61fe227272e92e5e488dc8b8b9be83b2288921e576ff2f96fbd7603d03cc51bf5bf0cac33da421d2030e8cdbd3ce9ab8c63967a49aa3bb83c13a060a71ac3795801d82a728660e9b1def1c9d5e7916164af2ed4f5107e04bc2005bd1edf83fa72319040686686e4f1f4d0de0dde71e98ec1af683753c2f95835d162ea4891b339f9699795a569a761227c9679006d0e14d8f73c932ffa429fc3c6408a927b8612b506beb15ff31327f60c089f281091cbe8f3f45d0feaf40c56498464940e26abf62c618f2
+B = -19cb0ee8d08d1003a9c2d49df3072537bff98ed370cece39560b22a83fdf3c3216a1c6a994a1d6c1615f51fc3e407abd014a66307dfeac566d817987c78e2285c877e67ae16d9242e277c4454b98c9516c935bbb1c57321e57ab44044e41c51d2e0a9c8a4ccc2ba2941a8e3037018956a78ed9bb3bd28224e7ff39170e260fedcd3b5af84912c0560eac18948a8aeea8062765ee874f5a8415aa8413f0eff04b3ecbf019aa8e74645b3299cd79e67de4c6c6c2a8c16da63369f6b900a5923defe4bbb15be387661a5928085aaab2170505ff1b0dc761058bd7b444545ff1abfc406aead8ce21b6
+GCD = c51a0059e7ba25ca99f603eaa19c4f6c85a1fe88f7cce5f63a4843241c632aff66a0f67d419ec95790d29bb9dcd194983bd9257e8801aa189b6c4193a2723fd67fbc165a61f60c8b641085dde1fef498fbf0078d244b2b541eab89a7943c9ef00fdadb1a71d7437eb678c8d866ca5a7c01bb996
+
+A = e86355e0e8bcb5e6d27c26eee1642949077300bf57af4382e42679a4b56f44b28539a2256e1f50a4bca0a18d91b5739cff22087736af74c1c5f5ed75787125fb3740ace227e23fe23d062bbe2ce8e3d22a77143e99e9c400bca08a5a98ab278c4d0ba4e053bc0b43caccd8bfe568070024b918550a5072003d29cbb570afd7cf30197bbbbfa12bd0ab6da8ae38c7a7755ef31602ae98db4f76344bc72d0ee7c57b12bf7dbc0f33fca08fe7222582187327c8c97ffb7d655bfbd99e77018beeebcb685dc3d33dd6f40816d5347685692b7655f1c01fd65b8bb000a66c8730f30dd2dc7233ead8e5
+B = -9978252808f31f59ef028d16bb19219423c8bbb7c0dae3d0cfa2afe55d587ede9ccf04caa421fd54bf00c99f5162cd1c7001173381dd2d5115fc59890b16a1e127fcd560145f1e4344a29773359e1845354a8088d31ce7008ac09343a610bf0049cdf5b8487a8631d1b9e5f44f2c140ba0b0f3600b05751a9128f9e5deca2bafaf2a66603b1aeb68fee50f8ff763daa95a1b196bae0c8eabdca0b7d0d1ccb335094d326e92c463df36e283ae041c486be0767398d26d3b2cc3160838be3e356b4e8fb87912484d5b10c6f35f2c73ebceca736c98c70d31bb52d6acb71f0c2e31da5545a1317cd7
+GCD = 10498e00a7854872c651f1b8f70611af8720884468fb85e47fdcb02268727b6134390d832420c4a9495011d9b01adca356c73381a65d3a463943dec1f1e46586ed7636986ece14002983365c3569e0ada9b2fafbf225abc82a6e9ef1093f6d3abe4e5558d6ac0bfcb59fd0267bead429ac2b7399
+
+A = 33056396ab8cec0fecc98ef3162b02938c587a891f1f3a6555db52e92a063948ee74da3f119dd17f65759f6acc50726978f2c773e7413de0a549df231b6f8d7e805deedbd338dd91b9150d6dd1cfcffd10cb2361c74847ab9ededa975afc3525853002e6654a1c8c3726b13773462468ef0d3ec2721f58aab9531f2361b86a045e5e474c5e60fde8c443e3c3e1912aa2738e2278afaf782f9f66a1a224433ba5c0b509c62fce091026095313d2e52ac427163bf91e9ae0e007e2fdb37bdf5b39eff0fc7fe718c21a9231d05723c8bb6220ca1efd41528109595a08615e2fa7a8207668afa1c84bc
+B = 1794e6fc76f28672aa31fc5ce06f816a23a471a5524c349df29f6633e70739f06a673d58d535d76dabd629e5837290fa48f07d327eedba8cf5be816598305b97fabaff5e445fd941f041ed238b1044ec28b234af9af90db93b8fef73ee16e107e1044aa73f055199efb82a0cbf8f95d0d4cfa1b389cbd210564a58c557b7e27fe7c20f01e49a3070fd2b9a99a27c7c5e3e4fed2eb9b8cf2d628e0df0d4467545e259dd26271c7ac2a7e0e0f0e3bce27b8e71764e46d44bbcd54fd1ee345009abea06317230cb28ccc926dbf90d8a89fada44e520d7e7bd4abdafbe489b779b2674e26976849426c
+GCD = 66c0c2538c0f215bc264063e843f046e97acdd72a6be8a4df097fa2092062aa00d647364e9cb9f3fb4d6d230ab55ca2978fca9ae5c2ecf355675668b8244f1292a7a6a3c757cc466a3babb50f459e8717ec74c9fb3f0b707d075c42bed7287ecc72335fbc09e5c3a4645ee6c0d012c179917fa384
+
+A = -3b3a5314bb4664ef2ab0e91d6f1df9cafd0de2129aa3107b114cd827834ad48c32f685fc2df0bbb35a639f1c5e69ea5a1f659edc5c6fe367d121574ef045ddbff7682655619753ab3c0722541c2ef0520f004036dfb6eb6d657fdb4f22001d5afd1e27c99b2692c60341c5076430180889cb0876b829ff71cf97194f2f276080bcccae82bddfbd9a67722994c304b77d8e64a4ead5687811dc1c22f9c2768c5a65e9a214217666f62e5d1f9048feac743b2b6e4a1b70f606167afbad0296cabae1c96875de7d25e70ca71e4aa27d5572bd988c5c79a2de945492a2a8fda4b0c282acc7544481ca4
+B = -8c581db9dec18ece53c7b789ea7112db2fc3eb69f742d996148d09cd4ecfe609cff2d1127f18bfd8cd0e1345dc861fc403044a33817d74d91448aa37ea60eb01a8f056994c1c727354962b68bb6013e3596d0d26a52246514eaa0969f7cd1631a8b61ace1b71030ba5a265f21244f33bff821eb928f2314ebb898977b280195cac32156d5586ebcef564a946c00f4175494f025003afa0d75e507b64a1cb1afc812328a0a4c324bba02da1252678c4dd8f487a850fc423748c7af6671b185d110ed51ba57c15951cd968d4cf658d4ee8aae261c9c422ccf486f5ddb7ed12e0d82723307daa63960
+GCD = 1542dd51e9b797a6836b721170844967093b734f90d3f3c2d994a3ab3ccdb8540400243c04f569643c5521bee0028ed99a073e1556ef4ef494b75e227ed7bb59114235173aca3b269c69edff2992a17ba5546a641e89f40fdbb9e85904409cd8bc48423b0c9c0aeaea17855c86648a444370f8c0c
+
+A = 15e2b28ff803f51f8288785b8ae7fa86e4f3950984ccd177c328eb670bc43bf5c3606b67d87eb9d66f5ce67358e2b5796daea9369e70eac202a172bc5b964b2e35c6783448337626fa942d8d484ecd43de5950a75b31b54138199167f47f4184ec735002816a5328a66d5ee19f4380a1cc4f401644c5a38390736fa9602380934c5c436950f31c96b5f8caad7eb9c0a138dadcc1229232f5991e555f4d50b503e0f779feedfa70f8a1728f607160a13ff98d0014839522cf750a46cb0d495a2edebda15e6a14004ce0b5f5b54f30a92eb85fc73a1a0cbd21e11fcb857d8b038e3caca8b9f6c41000
+B = -49c127992b7db7580b12f2565a44109e46233fc3362880ce492bc32a4bfd239d1f15ecbf1235f172dc7eefcf9e4147dc414dbdc0dbb1f3b7dcbab491920f2ac7222534e7061ee9c64a7379591d9dab761e78f80482ba97af434ffdb7cdeb807afd25c5769ee3a2cb2ee89f3d65dd4fe30df47cad15d73eeb0522f5338ed8ac1525be55b262dcaad3240bc0388c07b01b4e3ed5b1660178aef52cdb1ce4c7578f5a8be6bec03ecef50db96f9a0499c36a7e56da927f4534524c720f64267b41c37192d7f2dc42c19e9871007782560a6d61eba2c386a45de5eae7f260623ac4611fd71356255f9100
+GCD = c694cc1b3ec498b42e0f4e017f489412a825b44adc014c8ab6aaeb208482328c74398cb5b0a29a23d98684b7f66543de2a64c0051e320f3b7160c9825bdb58dd54b745cea68c4416c2a18c117bfb927188eb98ae09c1d0bb6b8fe33317304da17fd1590e333a7037cd14d66f3d141036a6146d00
+
+A = 144c7624c202337f31addbc25c57eee691d4c53cd144950380b0a258f0ca3f9b1070376af553fc6bab7bab5e24d29e01db5ca843ccc372a2626c7bd9bf72354fff731db688c306eb212b8ac0c632059365f1f8fb0398693045c20effef6e1be6772f2fae9393e1146e351cccaf17b2f94854388a43ac8e9d5eb88d2f80f249d5569b34752795719f8364eca5f95b1c81edcf0b132fb5c842631e4f11ad9ea48cd7954edde4102cbaad26ec8c6fe6510c89e888ee38581065a14b837d553ef51fe463b4e60ea578b8a8c9db30d7d371cc8245bd20fb09320e5a02a2ccbb095ac49a88602956dd30ab4
+B = 12905ceee8770f359c84edc7a690e5cfdc622736601365cd5873a06702f159cec39a844715f1244746a4eb3696633ae0d58ceebec67a5b13655acf3f43b634252c8367bc748b255395bf1717eb8c3d2e35cad72a593b1f0072b746a957805048b28286f427459446ff9e989600b48f7c536dcca749746f1196ee459c66752a21aa62fc1c64e7ec1ab2e253f95de5a30a4a1f94e4af1344ab9bc2c348baf186112d71e54081187816154b17c554615c7e695e653496199d314f248bbd46bd569e2c8bb946b479fd57bb1bf24466d05e599bd610bfcf28ff58e5bd5029e0fcee95cd090c55f06d69dc3
+GCD = 19cd7d35cd66d6d82762165b023f0ab2079d010bc60c3351191298f6aa84e7ee720edf808ccb7fef965aa6a45d161b61db517fdb81bf844598cb89d8da88f61066d6754b5ad1d198fe097229ae809befc77c3430601832ba014e8003bf48a44951ba07a6d0c5455d3f8d15c757628537061594827
+
+A = -64c6f8f645e5cebff01bcfb1789002372de6037690481f31c6460d6559c9a991c11c2f52c4e23c7f7aff4cc7d414b69ada090d985fb88370d7d90e4ec3d5c528916ef0924b1e3feb091a79e8c076038cea37014cd4a6919fd8b63d07b6d974a73dee865a272468b2014c48d04af52a0994f0ef31d192f4691f8a6525ba83bddacdb6c5794fa0180b24d196b6422b20f1c5fd0f87d8b83a23c3eecbe022aa2c1182dcf7f6bfb654f6ef768f88b496b511146d179dc63ddad0c0e1c320b69f1e44eb8ae9075f58fe120177c695ada018469c8ac75e2caa2ff7be48f78683b5d65d3be215326a7fefe3
+B = -31c6ce93d717e079220bb57125aa35cfa1b0372cae028ca09b2a8ad4ff7e1aed3cf6a4da340be66d5fefadf6f0dff307728a6d695367c00d83ba34c8f606aa5c2d95a2ebdb32ea62e6d732ff85f6d8764be1900f25459c26f3aecedd50bf0ce11f5995fc56a3869d3c635871af6f45f36af89dd35b309ae7fca7db380a4a5b7656ab7e63176f343ca4b4e879b23b7a6d0d4fc089a06edf9c8d0ec25de94cae1fbd9cdf12a74dd264b0c11761c5944aa8f419299dca934d253bce4baca8e7501ddb2d6716992bf310239c881bf28534b89caf9e72c48a25e033e65894638b50878f31b40080eaec060
+GCD = 2419a972e10b2dc32d8117f561e4033d49e83b290965e00c9a044dc2f5ba783a50f3d03df5e0391ecde035d887da4b0080d2a2913510bd24c8af1eac47b5c0cfcc3e6997b860f7ec6314c6dbff675bad27919ae4618c05572dcde1a01c309a7c9618e1b0dc8983edc35895b02f643603cc3f82cb9
+
+A = cd6606d6892510aff4f5a536b582c847ce3b56b81ca1c0b5364dbfe56875fe8f8382090f9eb54989f746adc00301bc7afae592a49c6a658fca77ee18d14b6c00c81e6ee634f81cd88a85f0d9a2c0de12033cdeb6bdc5fd11c2c3cc2f15692869f95913823efe48460f47e594a40087c92eb0c363bae3d5d71e38d5430e74ca9d4042e8501d639b8b5a9e27e106c7fb29cea7a94a0dffbd19baabdc3e9e38d60d334ff77c874660b993ac99ee8eee45fb44d79427f65e84fd27b609bf1fad3a4bad2dcd411bf58673de4b6833ae1352922b1983b8d4559dc11663b0e8c5148ed321c28680a63c8c5cd
+B = 8892aff7c9af626380c036c35b9e4ebb7b570cafe38e36228423c12f0c06b970cd0894e51737a55ecf3885045a0496a298061a740e32eb1781098b16e5bed89d65d85fc2f697d58497a6b8a5e8ea5832dcfeb07d8aafff1fc4028b0e726d70f0663cc23f1d3be6c775a7d94389deb6879e596442d173224bd61bbdf659f8f9bde48366a9ca2cf1847939e29b0883b2011a690c932c1a8fc9c33b4689445fa289fa8bf015d5d35f398cd9719fffa214080ae6d6596b59dde14209fd6a4d1bc9942dab9fee88fbf15843efb2a2a0a747eab57fb7884de2448b3b86ab6d79fa79eb5c92080f579730629
+GCD = 15eb812c409a908ffd9f509f93fae6f6fa24467ca7ccc5f0638767f0d7a8e8df8293971135652819f5492c5a2f35a1635f72cf187e0ed7959aa309eee13c7e58f8c44f6da62cc49e658acb7e76418bd735d7e9e7ce507985275d9bae2e1dfb9a561cc89bb03583ca7ab4a79eb0df7e3a9674e16969
+
+A = -40032fed495cbcae331309b15837a774cf9fdc6a738978313a51edd3b89629db07252c4dad9149b9506cd5b2bd779864b850d219682dbe33c86e39911dc656974584c7529fc385d44b7e8a8250097f3ef852513fe6fcbaed44be53f63d378c6cdffb936bd3e7fdd262d50f66941e179700b99255ed290877b9fa2643c75ee44cef7d0a288a6544e4a269cae6991e46e961441d3544b39c6b5efdd16159c98edeeb3be8f0da8129a68e346cf0840577fedd5a0d5d7f665c59b43aefdc62bd3c61cd830b2fec4421a73c710407eb06dc1812ab6e725fa65a065c54c81a48f7a437611a60dc32c26bceb0
+B = 30a36676b41b072124887ea9e7a17d99376a53796aae3d5c2b72f769f749d1d19ef7bd7ad350f5e4027bbaba8999d6b0c970d5d78282f3484a696e4dc435f9ed2a10c1b07cd60e540e812499da84ef41dafb0dad73c9c56bf03f100a6cb2b0bb94ed56443ab4844f5a1ca6f76d9145573f5b77e09282ca550e6cf5825e9da080500a7cc903a00e5dfc9ce4b493ffbb3107156ec4ca3497dc436545d91751c8335e685ab97e42f36bdbdb331427e805c49baf31106a4ad4ba9fd94e67941b10a0438c7817a8b3094d50bce92d89595f9fa0e153850c9f29f213c331843ea2ea7c04c73d3e00447a9350
+GCD = 16eadad2be9c76f1fcaebbb87aee3c816c90bbfb701289b53aa8385fa518517b420a3a740b43a1512b64d53fb814bbbf71cdd88ccc58d5848416b9de7da63b18b9bb6bf587a6da1e22969052a2432d3951b6e4494a75981f8ab2b8b1f49f672735dc79b062230cd1436ebf4b11b2d9bd879e5fbf30
+
+A = 910372f32571c79b73a8e00a347b6e5e00416f7e307ea838efeb34b5ecf4a80bf89f3115c02a52d1657f169888bb7d6b377fb758febcc7f037ca33edb619a12ca252f196df9a36bd00b4ecd9b125ac435c9bedd04073c8c9442722cb2fb1020dc3e6c90bc84208e2e152948e624d612b01ef8c34654f46e8b053c8234cddf0099a8d09d6f4d7887e5bd0c1f87be84d4c3ad62cd49e0158269cb6191644d88c6701c64b4669f6911874ab5cfe16dd795e883f440a55143a1a81aa914e253311411ab6ce7328712f707afa372b4964fb213be59bf302b7dd3120fbb44be5cc2b6d25c04257a49a0da624
+B = -16ccfc21c05b259ba7f85e36770a524a2e062b774408b67b8f923f3e0364d2d792d539b65c55ce8fe8d465c0248a0bf7c45ab24cc327bdfdbc7128c8ffcde21fc18d2b2ce5eaedd1c0688ee6da89071cf4c95c507e8924b7389d6110e255edac5f35b87d45ebc28168834ddb5e4ec8df2a44c14985aa427b38830e745c926ef6dcc7ca350ba0aea3943ccee74e7e8c8a661f935adf919ccd6ab9af7e91d688734fa0288ae4e161e41e0bbc7d94921dc24972de45babae761183d85f2eb263c68abe78fe461f8db6a06f8d50bfdb2cb26b5bab91dd6d6d8398483f4640f67f1689065043a3281eaa86d0
+GCD = 19cc28786f681d8114e48257854da5089753d5fec4f891c7089002d19ad7486a59d7f78359de4eb46893cb96cc85bccc5fe01d4591974575342f81f757fa57cddb3dc12872168394a8d8a8a74d41192ca803134912474c551d0093be12ee93691256d51f6330db61b804db219bf54be07e5f9a8214
+
+A = 493304b7f96f0ce1fa4f633beb3b9fd4a205c6b60db3990918346d36430d34969523e6104111f49c870c0ddfc03451023a2611849e6040bb70e5c27ddce0e9763f19d23679b723f2b85c734249fce4f5d39790d57939767ff2a813450dfba695ab61832523268ce4c331f6128fbf8bc99c00986f31f9894404ce325ed3d1ce0227e29f7e5d0b56534f8db4795c3258de47972beff8352ea5940a15dd635cdf7aaa3c15570f031de45fa535af0b78905fa47a75ccfdf068dac26301cd7411e2617becfb2d6c996dda9458082eff6592b4410bc5320900832cf09e64d247cae6180e1dc428477a01fc417
+B = 4399c9fb7d23545a484fcdd57014246c039ceab921aa0aa358ef3a2095f75d5b8a3d36af98099c54a02d4365573e189db4b022157315268f16b75a15b075d93381c2b6b02dd2273647c5dee06fe8d6cc3f2e2e34d8e9e09369311caf6ddfa468ad0cb43c1cd523791dbee16384301f1009e4d59bd3732dfc9733ff053470896a71785f621696a781c3bfa6f4aa61cdffd8c16e7cb8e8da76332e8197adebecd0220aa6d27256417ec8619e37d37fe6de9a0d2d98affe94f87f5bdf9e4e90d0b022638d646994bc0d1472a892bbc70c50472bd278653187f789acc69f090fa250209c739463a1acd55b6
+GCD = 5de5a39c97c6aee62d45826a13fb87f7301fe30518d7b5f141e24b90281c4c3c554afcb2dd0286c3f65996f8f2cf801c4708b89cb63de6e69df18204fa1d478054c4c33773c52f93677c0d1a7b55e337d3abefd684c99c189b0ac10052d9ce7ec2d3ee6290947693ee42416e1a87daecb270283a68b
+
+A = -787fcb2e73fb1c63b36d5e87afb4fd2c390d2d51d7dffad374cf13da6f2dfc56486fecce869414a0d65ab8541fcd43361f824917404082497dd89db3cb383cd384403fff63e5f69ab47e8f7f167e98af338d6cdafff5cee5b875bd726a3212137945b9dd3ce512af7f27dfce8816a420ef9be3da0aec033a8242e48e24bcf843a095a157ea892c4b4ad0a4a57b105f8b37f709706645e4b77c88304287285cf24b2391ba960f7ffd77321345bd44ad7c61bf16e7abdc1a6201ecd4c7fc3546dc6eb5edffcebcd09ee1eb89c5a676dcd2e1ed8d58a468962bcc5046a4e08d2d40d217ac70c3ac9eab855
+B = f7b007351a8385cf125a8bf624bb4626fcb401a2fef8ddad056c168a968835996a67cbc2bfb23f0d042b9272cf8dfae6190db8e110b93b1694b85d6d89a33863177847a47f87233f700e76f662994329a4b910b386916c3853de530aee27f2da9498bc53ff4ef847b267be4b420e8d3dc634e832dd67af0c011e76f83c88c6a94ab119db00c6047e0e3392c3c8c5d35033389e8cf004e1ebfa4124d18ad7e5d293e2e2b5e45aaa1ebad6a31eb4c1867f423418225e544c84cbeb0beb5ead0419f02f332469fb116966c6da3852b2d57cee0e35fec7657248d3dd801d94b5b64ee1f7f8303b2b9e22e02
+GCD = cca8212b7da1088bccc7d58f92abd0f95b9ea3fceda0449b8e3d0a5f6880a2ca71e3446968346738ad797a59dcf53a2f57a35a131c6c4020ddf485761f7b28541fd1f805e3b6d3f0a67dfc9eda59abacfbf7cc654efa84e05d1a30424d21858ae1d00564e6fb03a7a97af1243e1df12a7a9d561c49
+
+A = -605b0c4d45508914a93ae9837b3ce24fce2157cf34eba1cc224afe7a9aa339869b0c82780223f432b49d99c35162e21d63886c825cb5764898fcdc2d84394686131db17ffd6af3bd16391148d2efb3f21d9406e0e322ce82713b4de672b25dc8d7f4c669fcd646bc2ad95f874d6a9efa618fa80aed3e1f2bd560a5bcf504ac0ef5f27fdfe906f7b56bd094b9506ed02eac31a100345d8111f2104fc24bd8920e2a502bf703dd6b7591ce8d119d3a4d2320ed0eb68f225bd7d231f9093475bced1e96f9d20591052cfac4b0209b8434ce07ce8d1781fc3fdf19739939930e8f019fcbbcb1a8020aacba
+B = 4f887815861ec237f5a6865cd39ac99cd4e4c22e3d86af0e7306769599446f60d16b3a9810a11bbde61a4ef382124df5a12b96b37beed4a1851150908056b27da473dcd8d3685a04e13c83c88bdd3b761dc7688c15cc454039846c13ad5ffb722193ff6d737254917b90169bfa2b407ad0ce3edfcf361239b773d2e525348ba7cf6d45889384d15045b3912e1759ea0949a0f76e623a025b79fa96d7105fc2eba2867bd8d3cf3f1d240c7aeeaa275e950d93c9c0441ddf3dafcd81e111639541bd2e2dffe78513025a0cffafe600f7d5e4907702a55bd7c50c7d790471eaa6c73665820769ff04673dd0
+GCD = b49cb116fc7b64ecff52cf6465edac4e6bd5859bc63fba48bda6232b012eac29585dcb58ad8bafe3954a31b86822f480cef8f2ada21eb5f9da2d975be03f37a78f8c52accf862383acc6b522e8a460b36b4a22e4e8750cac4f3ad1f1aef905bd91301c27626b6b1c2efa5c3bc470a04ba0f82e48e6
+
+A = -5a0bd5360007c82a34128bd60b6da030deb6158dad4f83138dd672aa7cbe2cf918c0566e5d66fafb7a4a0c6a4ee152b9892d670511cbf82243a9706cf05dbb753970f4919805948e1cf496231c5a6d9448335ea500baf021f44924b12783653ec9c96b249fd055a5f0e748753304ac2126138bc90437014ad721d1795c0ddd460e420df301bfeb4c313a86e058b2adcd4bad821f450af08332fecb336449eccf952c862000845c06825c2c952dfba038edbfe0e6832ba67e8a7bc5a17283dfa88d7e8ec03adb7daddc986a8adee256a66b09ddadec5de61dd435ca9104e0a6ea8353c5ee5f0a2d7f9570
+B = -f8876fb325fe1ab2412e3ceced8ead14b1633cbbaf19c1cb7b3405ae1ad4e05cecaaef6f2241484e8d0a9000a4669c2f1488220cfb7664c4f0ab847f5dbbcbbd61b18254e3e467914af85da5322127c6c269d543e42e852f7e99b54bc64b2506ab070a08118ae82df83d61f6e02787a28121a64f7709fa207424f8e2aacc54240e2ef0d56ac7876ac7adb23594bdd518eacd1b694177d71114ae851fabe9c9fb38aba0eac6f7d8555fd12e3e73a2adee2e6c8826ade7ad921c3c33a57c372c83c19436888876dbbd691cd74f88723a2049a39e3c5581382b0e11d82f79f007a8ff66773b306ee4266c88
+GCD = 1be3f97ab8856be5f5794ca6c116dbff7441360931abb899d6048f3c953a65d58585eaa4ef19d542b79e2094d70ebb34f16b4e125f2676df70f9ae77eb8d32d1df13cfaced879af55ea02a77e4e7c81214e22f907448dc54dd1d711adcc42317b8ed6a9ff900e0a4e01c49596d326cbccac1b5c4728
+
+A = -32b6265a4c525dad6688cbaf8e30d60ed57f188e30bde7bd76e2aeb8e4177d9ff6a5a5b6c2908a72b37ba21397d11315de5c6a13bcd95bc8b02637e5666af43adeab5fbb8491f1bb21b6055d17ead95c06ec27922a1f4ad65f05aac1fb790affc99e3808d90d6c461d4c7cf5ab358bacd1f40e4bad8edf473cd22806167639e83019c12d328f2060c8e2803bc55dd6052043931ca369bf8d048e26c7d28c4ef3e6315b98283389efd897af3e9efe682e9f1bca690143765bdab96678ca18d17861b047edae2fd59fc38fb133f51d0ae6ca6396281e241db69ca56e75113f1dccebf279d365e3d313d5be0
+B = -16414cea556c8d344a309888331fe81df7984cbf03ab2ba6d805377fda4cfe6727a0665be8f80e66cf9843eced5baf72267869ba1bf58016c5ed700f61068b6170196443c1ca893ac592afbf375c62c5058e6064c4e574edab913ccfc9b9b783085cc8191d7f125c429341b3f0110594e2b0aa598a14a74a73d26191a4b0456223791fcc73815973f9f693fed451ad5dd4766e75298a6760387c10ad77d577e4a8616f2140f1bba7a9a3aa09d08623782f169e70fbb29ee68c2def93be8d367b96de4cfc8c15e14f6de227ebfae646998d552da2a34b7dac4f6f640f857462a5a1a5142525e81a27f2c58
+GCD = 2607c20d0a73bb16f6d031b6a305b6cc74f4d8bc42b50dc0ba7af12f08e52907dd0cfebda50782f984adecb31ed3fa935b05a9e8275441de1a3d1428963802f7e67051b8caea74dc823bf76f6ea9ff4889ab2004baf3ac689d3ca24207613df7ed2cf8a2d1730735a1a1068b93f8acc5a9f25061968
+
+A = -34556ccd3afb5c513403caec74d40ac9951148ef05eda2c9216905320302d7502ded8431152e969deb1fa0e3aa8bb2ab44f92c4667047d98898f2d059aa23ec7120478c2220faef1a339ec03e4eeace99b9fce9b1cf8ecf06cfd8e6b0c1bab4d6dbc2f06525e19a3490a126e92f7132bd5ce5158749db8e5c2f8a13fe2b7aad0cf2b2d883f4564fb291481a73d1db19872f4c02524064dbc914d952ec7618328983e7f7f3d2a343cb5736d252aecc6d2f4be47c642bc7d027f883e961340a8fffe0a2e4df0721598056abfe02b035542e78ece6b9ca34da75b37046290133bf38a05016ae9f4ed69bfe2e
+B = 992c80f67d8ab0244c02d2d5c5d41a76e9f371b632dfb7540769294ff3c703b5a6f9c54d6ee4e0627e76cd677c0b5d301e97fb8a31e02eba424c3259b6d2af105422abfbfb7ac58ea00d57c2e6de5082ba5340d3ea57dbdb33805c03f630808b424f5e70f2b3d7b5eb678b8c2a69d4b82dadac66494a9901bf8b12914f2f675b935e8d0c4cba85a7788f94f1f2c1ea1ff1b13c2e45dd0faf89ec3a7cbe34cbf24aad42547f4e3651248171ff93f9f5a2a3142f70fa69825162b40c48672fb3f591cc2209c27b302bde4820abb104dc58e394f665574a65587aa7b51ecb097bfcdce7e226e441466840434
+GCD = 4186d32872115f075f3e78fbae6fa4c562a70bc291a7d76b3b1e49c15f32ecd8440afbaf516b3b33918fdec066034315fce6351364ab998cb0d253c4aa7f837c83f8cba8d7d5a699b79242abcf0dd1e1ea7d8676cde77af2c1054796f91650fa30ef1df88c89b0bc1170b97af466fdc1cfc9e7ba212
+
+A = -6f3f89acaa5e4cabaf55a49e5ce54283eb0ff8f906f18b170981a00a8276dbe5fcb0f8a1890203d570ddaa2b7ffa01ce00fa52dae4ac2cedffc5c3e23ee1891cae96b96f796bf2728ed84fb506c52b5c4a2c17e584b651bc154aa7341fd962ee5ff8f17b0294057a9cd68d00a139a311137b9aa50112dc9017780fab6bc9f6228cd9545ae9b13aa4dfa0218ae30716ee8228c5328a0479fe9b8825083ef0477bd324116ef28747103c751ad3ab4dd41903f08a0e759b669067564eaf35e95672be21236a92f18e8b38cfb28bbeb6eaf78397a20b876a38339dacfb36403359b69125ad0c8c133211236927
+B = -447de267e22d62cafb9163b032fd4b05e5890436e130d8719367990bec8a839eaf7970a8df7c0df2e170b2b213f3aea2c7564ec21bd058066c5f4eb67c1af16accc7f0cc2ed9e7dc09f18146cd93afec53b7deea0fc76f69f4674a35641be085d143a8cfd566f65f89c4de11edb5c5edf7ccb4e55a3d7d5ea695665f541bb16e264cf1e68933027344ba21a017eecbd381de923b0ed0e8372b0a3151c2c098fb7cd907a91db061aa80b7fe1521425d9bad0799800fcdcf708509d95d3efefd9cc4c70fb40473aa6217065e1167ef1ec8dbf61e8c4303b6b56db0d9bef2c8edea9ac0155c8c94c3a54b4025
+GCD = f23d6ef60f002c47ec68beff8a5d37e1d237a5b74cc550aa794588bf7075dbfb7b0b2d33ab5d4d11914b86c5e2dbc5d9aaaf800d0921c128532f180caf354c3a999816b3f530c28d9dd98729929aff356df0feb21eefbed6e8048492b3cf367ecefe22611a8073abb02828fe2b41b4e37879a5ce20b
+
+A = -122db965487b2aedaba743fd7c75005ef9cdda325b1c071b376639dabd87c5df076a3c554d9134b615ef7e76500f21db921a3f29080646eb755c3f413f8b9bf18463e8a7231aa989b7f6b4171f51d416bad1a33f422f6034661d7c29697d874f7f1cc8b9a9d3f3483944887533e79e80182ea20e428ba8116ed326aaeb8e947283e9c16a476b89e25e3fba975e9a626bf8d60b11d42def26d2af5c8b371092059fcbf0d4df70d6928fc314feb9d3db4dd7aad0e0e4b99676fac2a1641fd422009dd0ec4e6db48e01f73ae48d7df9c1fdb8080d28b2712669d8460d28b0d6742979ded50970de9512fbf17f
+B = 1cbf584d71b5d64c0e1abb94069fee883437cb199da2be679a8555bdb281afa9a622811eabf3bc6fa2e76e05940f2837a1a4d5fe42be8c0fd60846c7e41de85df5cca213bc8a437a5cf16c61fff74a565055d043716cee41df8a39ae25b1983bfa94936fee682be736251d01a005d738502bd11fb892d5f273835ff1e467e2f588779378389d7e8335fa8594bcf6dccada1ce0b8c3d250f0a56912836b01b361e4b67b1ad843a31866b3cb742e6c4adc4735b906c308d7211252a905e7c36ad258662f1f05c112aca9c46b6be0bb67bba542d4e4622542db284f3be920038c203df508a8d4a29eb57ab7a1
+GCD = 1a16014f6779396badfc6b6c72a682ec0a2abead65a8d91f0dc8f4add86e910524f457b45d6ba55c1ff0073960062b2992f098c5dd8d91adf851c7c53320a28372e4e7fe6dd3b228453745ead77865906b70f2566fe2aabe6083e13d22ba3b0e9cd450d6bcbb556751c860bf1eca4eeab83f9b1b9cd1
+
+A = 31b3a9b6981ef0ff0ed65e091a110ee281654d81a43c4230046a058b823cfb7edb5d3f990982de7677583caaf62442cf5cd732d056e3619c59479387132ffa3941b18aa87407edf0eab4d0761cedf4924615cc54ca6616b19ef924121dc130176710e011f09b5fd6f37455ac3e37c7b3a9b6e4f173be6f009647a184febf14b6a34cf649f197a140f89139b20db0ad28c7cf1e4210573ff84c8219ace07907ad8d01074c6f089880e0621dc6ba9af775d5bb6d829f818c65488d6254ceff0692ff900cf125fcdfcfb4efe8197ac06ed721c2b085fc1274e270465a620ba4634c5a346a3268033b764d3182
+B = -2db9c3185c27240951e05bd53b8a3c2980bace3c91437ca26c1e6e2431a28f040e2b8e76d942f38d77ae89ad6c84d034af9734bdf523b4d6a30f6a671d0d33ad095a2db15a00ec84ceae7402c1266091404440c685aad75ecba7fa5ced7c5a2fee0854f6215680184a8f3d59ee3e92e86e568fe6e0478f63a7da71d4bbc1ec3946abdebb93745f86cfacaea2ddb7fe55177e96202e5e2c530311c849cae60ee45dda43057b74b1885d2dc086283e29bc06b5bf80a1715b74a2dd74ec5e2d6ca92d79957a7cc04f78d8fa32039759980fe0564f0522f3a49ccdc897ce4c184acbf1a51b5aeb7db55fb6cd1e9
+GCD = e9e570a6f0a658070201ebf674a09bb9f1e2b47629280f4189e80a5ad13b13e9f77f3c2d1ac5ba3e8c0d33d7102bcfd243b58f5a05f981d30571ef924dbe0eade1befff3a71634cb7b2632fd1824b95dcc423eda49095fd6c367d065e336768fd8dd1417957e535fefbbe2032ca62e08b20d1a2be88b
+
+A = 17482df2398689658b744dfdac901114e972a3deed4258011d211d0294d4a9026aaa0ed3824e47c1ad1da1befc562300822b59cd8395b22251a95d4d99ac2e294e0d666bca09685f3eaa48ac7ae7a223ec9eb779df9cb5d30e4462b5a1bfebe54ed39a4fd60affaa56fb2590997e12124b4548897a2650d4a26ff4fd8b7d128a55f99dd900fb8b7a8386033442b25f7e0cbc3703e6ab3ea8ee16209f8562ecf02f179a95488419744e88c00dff63fc745fface8a99ec47e878ae6881a3cf0d5abebbb348a7a8d20180cc0dbd72d7a6a7a9edb63b7c5daa079fe559a69b8828c35615daa02bb6f6a9582edf72
+B = 1a9223592d3478273f8a2dc7b4c747604eb5e7055f8a5f0518eed3f97671a276a4806bbdd7c8d78c3b2f6c22b23c0ecf14b0ffe61f505cb661d40211ed553b947f7e322b543f89880151f81c31440b65afbc24d912c8de458066e17ba2b85b05acd57fe8fd7cd9db652da09f09e59f38ea3597d8dcd6afaea783351c55b73536dde2a369b4241d6544b2f92a935dcb1400b8b8a2e4e48b657554f93fa127ee1717c06f1bb82fb01dfd3ebb10837c4d0e34a4f2d6ba9c1c3a05d74a67535065a7faf371bb9b14db65ec143f384530357e626b4b0f76bd28b17d7d31c343188c92e84dc9132872cd82483da2cc
+GCD = 6aef2fb6f066c0c14b7986a81f95a7d886b7f265fdc4915d327a227dbdc932bccc4da9ca8797a1a41395f744fee1eabab075aa3a9fb8e16f4fa05e5f86c1fd832cf81100256d39f149d5a38ceef9b30c693eba28be10773cf9e3f75882227150fa6857318408e9ec24f2d737c2435b19d12fb17903d6
+
+A = -fd1c0466f7714ea2ba6063d0a937b5d786c5c9f356024e6d6b1b8c4db1e7e766635063fb6e49a89fcbc6c7425d61825279acf71b53ebc7bad844dc830793a3ac88c8be79be94570063f96c12fb545fcc93ccdadb2f9aef50c258a8a1bf5d4ae728d063201fca3c380283de44d620a4c7b1ffa8782b53a39e7eb9feb624dc1018a63cc38ebafb5ed220a06344674ca5bebd3a4e2ef8115369adb9a344b16733c39f22c71fcf90ab8041c8c5bb7fe46e911437b708e555a1b05d9a293647e1fc26e9cc4bb4c253d4d2200a5e027bb60fc6f30644f51867e1ed1180b4fc8c887c90948436b967141922399fdfa
+B = 6ce66c4141a3c3a9342f27e47b6ace43b6a51781f7b325242339ca0105baea91115e32469e19a4e66cd160266e890f9f802142872e070fc48eb794d8f16b107cafea07434e7b1263371a12c46875a8feee338aff516866c0e409cd6eb1cee3077520ac4e56c5119cc907573082b7c43667ba329af930fb4eaeb2105f5c60162dccd45669babae312656d99c7bab86645dd002802672d5fb7cf46fd4f6a492bbe1d94411f894014182223b8b57f33bf7939ef8dab98020681465aac458b186b7a591352607dbbf3bc1583c6bcd4b004c258a4ccec681cee796f1f6de02e89d6c2e7578373922096728a05e3ee
+GCD = f9170b8925c94a44be7b823cd9225198df5a4f5ba75a1de35633fbbfb9c1b6cee1f2c996ad7fe0d0877bbff07731c54b4170b9cad50e04ecc771cd9adbdb21f6de041e0a672535dc473fe87455664ff315e2cd56f1cc62ae32707fa5cffcc10352ec8d19465edbf4a16e6e4fa84e9af47ddb49ba70ea
+
+A = eef0c318f88a58ea569f007fc1de8b8a20eb1daf75bd074cafe54a98d0ff42e382313ad332fa72131ffb892ff401b6f8629b6803984601b3dca097665b3366ddd718701bde7a3cc9a4ed6d32bfb03c417f46504940693ce40cf4974c221fac6dfde39b6342cebd40ba92c4c0aa26d055b1dad111ac1f8191fa2023c2f23d99d66b3586383de397a0c66884dacbfd94a0bb00e14e6b42dd3ba12341e958b8312fc137e4ad74fa5cf2469cb8b77223525d10b30d23b142f1fcb55ba65f387dcc3169250a425d899e211c900489cab7d306c2eb601c41f72881469bd072938bdb1b0343c061c85e9f6fe1a5f148
+B = 1b125078001bed77b9c4b5e87c9fedbf07f76e17613815623726c6747f786ce6755a892cb09e021d8e19716a0f2fc13c47dbdfeb9ec0860144fd8c5828fa40a937dd88ae2ca6d99b7f4eb13d4214b0ee6967b933c8c04514898dab3c4c63d58e9addecd03bb9201285df8b3ef590f35a4231a4a5d04b432c91b4a5e5f77cc758909450682072c461a5e375198de87b4bc5068c2485f2c39ee78562c170e843d50cada38aabca0c54daeafb798bdc23c04662c7688aed7696b9cbd122b92b1d3e2df4c12311428ec3890f52a9301036b279c56a46b53f56bcaf59a98ff9818a679086e143fa141ba9d2ff52b40
+GCD = 144e99334fff16163532ff0ab0e059bdbdc5bcc1806510c8be2ea456c498418ea5ca5c238e440a6bdbb158e5115c263a929566ec6281873ba40df8f50c180798adb5b69cafba3e316cb86a73f27aa25be874c3e56cd3113f4e8c3c9c49e143faaf4de622ae598edbe2a53ca6ff80b9d9c6fec3daa51158
+
+A = 6791ee614290d9c57ab9ed346151fcc58e3fcb9d52ca6c47f9fd9d776c646462351bd5942c10ec7fe74a1a353a1c654fcb8b5d222ce9c99dfcbf94869b2867229e9c453afb7eec49c9abf81af1ebfeb01f9f1aaab650e3e4a20df44fcb6b5330c65e041df0843cbf4717be50e0296b089992dabb968abe34fe183877fdbe1b3eec9fbc988add47bd46193521d372210e1713add6e43d77dce093f713d313d3f56ac9dedd63436d12fb314adcd9480fa18f5dec67a1a7f6f19a8a8c1c1bc2a3c9d66bc80922a1e033e74833e128feff522a1a8b82384e4b444b3270d258c0524b44cbe1c2a13efdf3bdc80c14
+B = -5c3e390500aedbb40eb6df147184f086cdaa404b9f3067ee919f6583e41a26cca66afcd2f4638eb2f13deae0fedb6ca1087a41479965e00d86c270c689d6608a919f20ea5bc19b1480caa0cd87352553a7b7a9e8676511ae5dab60ac2ba89ee958806620cb8d80fc22a3e2e689d91101484e259eed684e491f8d24fe07f37f2c76be16710f8264f86ccd1974118f425762467aaa70361def924f3c43ed47673c96aedb99e4eff0b3e49b9028b7c508361167816531bedca40dc13eae1ef4dad3deef629c51e53a5edf4b69398f3c87c1c1ad616349f165b0b1b4c44a5c23d32b98e114f5fccd7514ecc22474
+GCD = 94bf24d9f0da7eaad7694019b2819cd1be541661e24a1cc56c5d17ca47fea99f221b86a5020e740ad910b7a05d12121aab47d8642ca90a50bd4979e3e01750929ee9e168205b44c4aea451e8bc13d4c9041841ba578a1a17dde7f590f98d8e30cf0b83cca4678d67ebf7614cb127c8f4c1d9a6059dc8c
+
+A = b37d970823b12244dd6386423b600fc1cd6b708fa33c0ea4ffe02af206e89873f400c7b4ea15ed5f125b3bc7ec117e036006fd79dab2c05a86d5a1cf0bf0f99b93c8ff140fca3cac9ded6696f6a9f391e2149e24a2e5a87ee7728edd222956479fe669b595b16aa55ccd979753018c3aafca95f56fe010e614850aad199d12b5b093c7ca255ddea0838c6290ea717ce592409b8cf4557444971175af8c2db0dc765bd9c52ea1f10effda3bcb3ab08e1c14b44449244bcc17f9cc792895d7538ebd1a61e43f000cc6ff9c2a21a9bcb54e0e42ed24a5ee2fdebd3b18a2661208de553e861a8621f85f52343b6a0
+B = -e5cbfd8548192a199aa4094e2d35bfb8df4e81551a1de7ee4c7840cc3d2cc2adc2fa14c7faa6e50a5c6f56d4475ccb182d0683c26c178af35a255d47e1a90f410c22dd3bdf8e9ee1f3d31db2f722e980ccd78165558d78d648cb237e5cd1dd7d32e89f77a1109e8e630d02f8fd4296d7c59566d95c0a2766142cc2ba990a4fb5a3da46234613020b137a4eb98935575187879391c52702e57eb3f841144adb32a168b9c4520c0a08832bd6257af939ffce0fc3dba908f174f09cc758c84ba739ba20f412ff463e14bd6bfd74dba1660b17b627fdfc894e0adaa7fc69db4ed6b29990dd921f1ec5df9312bc5e0
+GCD = 1754745095ef8bdab40ba3fc9af00182d694d63f86700f7edd9fede8bf305f44093b8d3c4aa0fb37e561e59f6b0e45f0a637c9e3f1f2a938eb3aecf6ce923ca4455844731a32e6fa2610a95940596e0f5b0adacb63199d62c1de4779cd0c81486d7f3b1f73be54f8b2a2afac110d550de10fa05fd1d3e0
+
+A = 174386f439edf19805e88fad230c3c49ca9943df583383551689380bd18f9f542682e2a2aa5299abc3f89ce8cb17fecc4439e516af296721316ae6289b6c17af8646afce30a977ecd5add7893b4b3c819a2a93148389cfd974512b73086d494daf2ed9eba71e48d944a041d6844f20734e9204701de46b5c3da9eaa2631286a15a806777733e8b3b6c4207caa39c0fe4fc2c0106abbe96ce3bab358eb53c5dcecf720c3e3fe1932d84a64e3ed4d3bec94fd5262aeecc4b6db594dc31e85d486657658f54bab9d15bdb109544e50bef4402d8f82aeffc85715baa88d5c8957936dbf9b77ec5c24227f136a60400
+B = 411dccf78a8cda1da2180093cd1bd62e939a844f1b748c65bcef8c19430bbe3e928fca5838f9d4fb3a61d2f3580d70262125bc96efce26c53df0aef063c14ab2fbc4b4f70adbe6039ef551388cb9ae46ca95765824e83b667f4028d29e07e477ebd850aafdab3348d1a50a56e965da68702f5557ccc920d6dc053ffbb4c1418230b79cd0bc2bd67c8c4b176f5095d0f788b1528f597578fefb735823550c7322cfcaa424f2b1c40b35b24f89f85d7993587b5aecd48746b731012f905ccf86c9bffa64c4e183c3f3db257af4ddf67f15201bdc1260100ee07305100bf3dd80da2038a20fbfbcf3592a91bee400
+GCD = 4038075a3913d712f534c1bd0e38b52d5da623825d079b2f3fa45ebffb31b1fb5ddfaf87b6fabab063202472cda6f5de7d8b8466abfe799647b49ed41659dc80e640343cbab8a041a257e0fde6374a9d8dc1d208bb5e66428e5adc19fdbd2b34a015c4df383ed067ca0d6c4fa45330b054ed48f3f5b400
+
+A = c04fd6b66104840cbb2badcefea7d4bfa18ff2066d31fe98d8dc092b01f9bb42632db53f4b79242440d63b98b91a259fab64282fa7fcdc3050493d8640665473eb753f833c7651825f3fac053e4bced94329b7b28fe49447c353c4f38f0744de34a6a36602a3f45e9078c6387d72276798eb9f05a2bd4206f3c929fb113100e56620fc37382b1c088a99f5e44b647e38afdf535b387a65ce38b30ef2b78245f0712d110a224ccd2a5a934179f0440fe2afb3297932fe9d8d39b18526ca4607fccbe4c2682ed7ccf9906af99d3aa391c7d1008943db873c336e3c3b70111f99611a3b54e623a0e95c8e16e3ab8
+B = -31e939c8f89188195891ecfcd8dfb3e016743a80610143579423dcbb8ce7c0b13032355f4a8fc48a4b358e5631b01030d3f8dfb87b1bd9f182ca03b77ab1d1e3fc847ee3406317a37797f1e99e2eef1901d2b943be0588c4dc34dd8fc35cfc0cabba0e60090b7176f56d36d9723b03ac59206a8035c148c294dc04439ef340be7b59566cf2234743c1c714d85ce54738c7835f8aa752160305222b79a610d803a77a51500d73c03777f25367cfc92243dc14a4c27d0d593c749570a5f4a8af038427fe7a85559866c1d24cd505903656aebb7510a9369237422325d86ef578f242b40aa1b0dcf56be71ad6c9ef
+GCD = 1b4bfb8dfb59933f302e2f0470f335adcbf2cf2a5854f2dcca53fee76041ed292c026bab508c3aa080dea74bed44903b4006a5d74988cd723af379bda82f7295d9af87ec11420260a3b13805a31aa234eda0ac956482b5779c00c2ed47f405d59130ccca809fe28e16279371f84a32c996b3ef5beb2195
+
+A = -1ec84d7ecf3c26518a107f674c281bfd12515af1d73e72903c8d5e119939ebd75a9b0455494bfe045a32c244e92bd683b680d9f61842aac09d7d0ae531c844e4aa140b740c53dd989d260c9e448e7c3629cfb588f1986931ac615bbad07e5da5cbcd539b23dcab88d966e5152b8fb6b9cf0fe77ca160cb196a77cbf745bfe85fecd3284001859d14f996bbb545b10b97c6c8977079dbf1706c71e401b09363aa633d6c4df95e71efd2e88090fcbe543896f3c14fb4993ae1e0f4a7af55ba23d03be16ff35552f37713abe690268e3ef44564103893e563a7b2f63adcb3891d45b5474d3c4f942e981e40aa59fae
+B = -16dafc071f159b4008f13eefb507859e951027aab1e7e8806a05c3ab146984b2afbb857db6f4acc8b832aac7f44a32264d0177684109c67a9d8bcb8ed9ebaecbfcebd46b81cafe10b5adf79f7f06d0820f3aec4d0023a76ec0e7de29cef09bc2a664507b289aed12f1886f18a031889c3082aac506ee702f057fe6a3e3f8fbf1832ef62f40555360aacd4f3f49067f905438f87e7ca2f3d7d4fc7317dce37fdd0ef53716dfa6bb381b18af5bed2433190742c4b8db74c2295c73bf32a7e5af52b880f67a7094022f5a4c3e5cc9f8caa2e2d5b8b4e8261d155e5852b2469cd881123d95bcc079388bf253075de70
+GCD = 60212b367c8604754ae62a482f83c726f9f86f8049e3e0a457b69e92fbca6ade5243f1a6ff929f46870cd8b111264647d8132ae51577aa8c3cef7899a615314d007bf8a5f84e96636a1ccce31012c694ab8b1a7f99409a4a2151d5301066626ad62122f509ab92291b2f49d461136aec98aa2731058b1e
+
+A = b178291fb6e1e9c507748d4ef472b65f20199462a13b9d3207d2f0c4b40c6af8a83588dc1fd8e267e6ab2293a193eb7e7fb3bbe3f6a7bfba2169a97a66b66ee0facefd0e07846164e3146ab2dd79072fc31aba3dff30a7c38b79adb1d571eb7ab72f253e9bf97806e7cb12d57c4a89f85a07d825ec263ecb4d39424114d532e891c27e32c4140d6689b42f968f0152a053131c22766e7f3be78d1ea90cf63bb6c5b3ba5cc69030996e40cd78cba5c474d979b151bc53a6a0bd488d5157e7648ab512f98e99e3a399e6ee30835ee3f1f86e649d8db323ec77a87d9f57e47842e6461d5b3ed4f7c8b582d97af9f18
+B = -d7c7451d838403e07b9f637c9c33dcde84b208069f5f5b045565842819f97514dcdacb34fb61925da000b05df70c61e7e89ba27d9d1d41aeceb78d9057a0afdee1965e822cf9b41bcc9efd09d443fc3617811e1679a8919b3e010632b39fccc2ae4bb640626991c8aafff6af497f27d4564c569ec7005570c9ea7de397177c53ff799dc8182bd6b88550c6976076c9959acf1a8edae670fce2571f5c313b03318bb8af75a6305847c56ada5a9bae66a4c8e7716f0d6cb31a33c8ecac693c711e70fd6be3cf7d6a913e6fc1d27888a4698e302dd7fa765f61844677f0567de1418586ff8d782626ca8b11a96c440
+GCD = 46dc0c1210cfda85efdb051dfaf039a051666f92c9de8d9e3968e85c0c8ed0fcf787f60809df46a9a34fc8c3f2da82ac2b03a56b2be43637bc29ac7b5cdf4ce87fa240cec59a71c5fc53a136561da626ca99be9a3e0c7cbcfd51e6e117dfeabf53e1dca8d4750ed0a49b1ec35bf86f8e57ef1a803388b8
+
+A = -4c6d26c7d4540c867f1a49155fcfd4e23098123b55618b4363b8fcafb96416b8dd104195cf1f6540f19671cb388a69775a3a2733f4499a968f638c5dc58361f91edb5a54218f7be6b0aba1dadd014626c6f02969ed684917018db3a969fbbb48fdfb6738f7739f544f111814d5d89e44edbd2d314b25187d7c1f2bc0b44a7ed4f4feb91a5c05485a3b52d283e9ff08f4cd5e1af0ceffd9659c1e92debedcc53af3d50dfc8a3312b59cf3f3596e855cc86fcc4cb00b88a172c7b274e25b4c3d002ee92f2099a2948be75c4c880983444e6eb4f250d804935523cc3c6e1589b43a00a8e604ef0ba3fdee87d2d12e14
+B = -691639e248536e130516d522327ceed5344b019c19c7ed83ee5dbd590bf40f75565e1cfc588ad936b23c3f1c4514aa5bec0346df07a25c7481bf2d6395f540004249b4a2d4ba8e56c167f3551deb13b794ca396d39b997d5757f60f94fb9c3c938060310a302a4b69fbfd5d4952242b3b12bef46928d64645ae9ecafc7b8b888f098c6cb39c046eb640b92ddcfe5ee9abc2b7a59f23a99f9a925dda294cff0d09ef6bb1f5ecd7cf6429f7362d25b9d87f93a2baf440056155caaaf40df3b19c52772c374acf20a652e6c0f546ab4244045766075206f6eb0a8b9e06da4d40501d8432a20ccd1bd880b3eccdda48c
+GCD = d8e3e4071c8adbb32a1d190edaabf7765777333e3e8ae7a4781e6e455f2589d4ab57794e81ba8515a42b1fb0c2d5ffd127b66daf7e1c712772e18029fa1c9495deebeb8c2ee27a8b67ea1f01e2d313ef01c31cb6cb0f43e9097e8b2be44ac786803416bc90ea8226f7befc64997b4305eb0fb4916d3904
+
+A = 3b8022443b59bc90b3cee319324a22171b8d4d91f24a960013fa9ba41b1ade6eca006a6239bf990d21376203c08446c63ee9a295bee7bcab02df79daff03ab532f4988846476eb2f705cf1d2bc73e04420fafa9bfcefa63331748c555ff209d3622087e899967b7f4951a46dc44898662b0904534328d093975086dbb96850a73dfb2459b2edd0519b6e231da5ff20149fc2ed48f175c53b59868cbb3efc884cfa6352bd9c08cf95f10cf35ff79add7a6b7b0318fc3599bb118cc74fd9c30d3f45037856e35ba416cccaefb8b42b6d71cc096941da66122656f13df8275d6ab76111579fa85a99e84092403c8438
+B = -1370e640b51cbefd4b1520085830175c8519354e1674af763ff8dda5f049fa81364d8947ee69d8015f2dac66c24464dcc7074f65a3df989a51efe7dbf40a642a7a8ff6e78d7df722c0d7e3ca803906aa949e8f8d423037ae98e2e80cf175e93bf15cd918dc0d339d9e0b7b57d0d0440a54f422da220ce175f17483f4509d42f1deb5f5f4f9453a796e47bd922668a92381f05f566e989890b9fac0b4f033a2bf6bc0f36dc83d45ba1c6f5df726adb42ab2d2b01573563feb3eaad7adfb28902c7402b7dcc4041b6f097ab9810b270f7180bdc4786f65c207c3f1d591d82870344cf6fd719061f3ebd79386743450
+GCD = 173b54e0de1bf6d7e2399c31ee6a53a2165268717f8e21b4429f0c5c7c09de122e78f389b9d6aafa1dab387ebcca777fef562a3d37d845befcef6099f181933ac69197c400a739cd8fd878875a7eb48f117b1e539bd6df3d959d20ae3b87a5eadef33b736888507e60f660552027c777b277ced6c84a948
+
+A = -749d3d1b9d868b86b905e92496ea7ca44168a9cb9dc51da55f4edb684fcbb57306813e4f10e4b93beb15f46b51e98ca9b4a3dc6b7ea3ed7f5563cb3c2b6181d5da8aa58f92dc21a898d6a83e947dac0a5ef07a6d005d807c3027df50bbc8915940733b4dafd0a7eaeb6fa2098ea0ac5d0c3d439259fe4f5c9fb90b1dcbd6519f14a2388d68033a7cc7ff347d05d07619e8c97cac5120b3574fbc5dc8782d1a5b43264f992aafc920a55b2c4d3853ed94cc493431e01c1990b68ed964634d22ff7f6cb1c83f20f76ced68b6e0c042dabe2e2867138457ee5afeea49c6aed0938423355b10d2a23508ca0c788cee472
+B = -2b3d741c37ff20274866897bf9185ef567dfd2753496d55403bbf4b62d65abb9d8e2660baa774ca923229bb50d2701a4c8b26bafef6cedfa1a5f2f7f68ba0d6a21135d3f0d5c87ff545a464c62caefbf3a9d94f020fb645e142d3b3a3124ed5b4cbd844a8cb237fac64bdbcd3e8425dc647e3ef7a82456a05f542b3073e0e9b934b36ba9dec34ae03f8a39d1dffe14978bc90a78058a85d8dda4b30518a8f961d9633a6d7e269359ca61433da7c9e6ebc30e5e90f54f5e2824d5156320ad612c10cd9144ac09cd6c4dc5056565cf83d87f6f7db34cc13ff7e4cbf10c59d06c04a8d06ec680f9469c3c1aade760f85
+GCD = 3e88cf2db1bf24158b04a9fcc3ddffa918173bcefb2a855afc39878270ab61c4683fd16d5da1286b6cb3d1487cc0f2a05c9f731a0fa132036c9a59db500974f33b340c38adb25737d558232338a2585ef1882668a90868063066ecf5dadf7da643df01499c54995e94c42f35741da0e54fc907468ddf651
+
+A = -14f5c3e5b58f5f53a8be6c4329f11f3ebbb98f940bcd7deaf1a90dc7263e78d913e1120a4cecefea9f578523adcabfda6ebadd0b19d2b585a19330a11b47ecc7a3fda5782537bc3ba57ac14da2d11e6d840297d9cbef2ebd84b72cc51426c1b85dd2d2ff5c1c9e31070cc110f696a50e440353116fc02a3eca267a50fa314c311b5a26146212f8713abea8593e3ea7b7b9af8f03b804a837d93628175a0ee06fc8d96674103dce65205248b6f3da6f6902b5901a2c471adfec09f8d4e5e41a7f714e1f2d9f72087c23b50fbb6d0d1649a2e12239af1ccd28241f406e399fb3e29051ab89aa354935e029250e9e7ada
+B = -bdc010bedffdd5fa24ca7a5460bbec7b023587918bb9e342d52b6f3610ce6539d22b30f2a186bb5039516daf6582076d99883e02cd0424f0d0d40a4518f122eccfbbfdd09bfad58584a96f039e8b329df8070db246b55a47e718cb7417531bc289e6a4e894f2f02df96a1ee4942ca8998bf27b7ad6c81393a67becedc76c7a3db9b0c659702f08331938436707a5c74e07f383dd77694d4e92493eaff259871910d30d8ca092512362a7784e9d432524938649ba66e9acac41db0aee22d40b7dd163c85636a30a0bc9bac7733090a6770e09db8c07fb3692a008ab3a14cfe5da495aac423ec93bb58374c70aae950
+GCD = 21ec0047881bdd7b4e9e1bacc1aebb7173c9facb8a4873772f39e17b7b42b1789044beec05ccb3b4fdf9ce65b6cd7e882b22b611b69d328956469330a64c82ed42e30bdfa7ae78fe1711fe879484aa4242c58ce2a7ddd58c965e6b0c3a100ad5077df840c1f757fb09553f67864c0222f1e9d3a453b4f926
+
+A = 2d983b5c3a8f2ece106c9730fd10f66bdb245c1203efa79e0e9cbd812027f49b2fa860aa500c2980e21a9e545c778815615e7b1eb426cbcbea0fce91eefc6d3416b6b941630ca5aaaea606fece9f79754ee6de7d757caa2f9b2680c08b75f957ea107cc6e046d7c28263a458dbc6709a950693269264e368d468a5a8b10c7eeb38c2957a0339636b55958c707cbe9093691a7b47f6fd67bff83fddca4d4f726f403ec0ca1389e556e5193c7cc98fd3ae09d6d11c0ad83c8a49659ba885e7deef0e6c52dd728c7544dca35ad7812a5f3439039dfac6db1c7688a5b91b560bc0e462633a53b438cbb05784ed4904da78
+B = -24b8cdfcdf5eb60963ee5b143293a3e25b3f18a66f7ab885835e3b01f3b8ac64897528ea6dec4c9c1e391d061919d15bd437717647924477a9107266497dc09dd3c8473af213177e96b9fe31399a6aa4f6b7a8f38dc12dc10333c3b6a5ebba5c617f13c1ef6de12479b94d31933789f0da6f51d7564418f33ddd01f8cd22e2deea7d772a2d8775b8f362835a37c76b0ac42aaf48dd9d1ad367528b467bff0ef059f7c30d9fc004dd5164f54e0f3d87eb6738f7f1e958ffbcb4722ed1a4018ae6e24c9a9e4707bbb3eb6755fd2195aebd98d629ee2977d5306da453b850168082b65cbeb8bb353ad6a8f433dc574150
+GCD = 105def511d8250125e9ef631c4cc5ec371fb03c57e5f7e6b9d27457ac21ea9332d04da023cbd685365caf405016a09075de4dd4d76ccab56c71103f2c3947f71102c12a67596a3697ea12c94b02b4b2c3330716813877c75a75775c668472dbf013d266085438490a97f0fabd6c5e3b9a7d9a61b51a0db58
+
+A = -bd7940d141f8f2c2b9a8771aa6782c3f1ab5cbfbb64e9504ced0cef179fa18c3e2e9686d2b51f53ca3f0ec59a1280513d68a907cbe449fd352e56acecf41fbdb5da3be225cfb7c93ed16fce95b3bbc522b4bc115b9605960beb910317054ad3790e1e3971395f75c71abbd5d1fc245113379e002e501bf095a214d9066264d60e9d7947e5a59e03126c3ea3cb9189beade2759d76ea0ba06c4982597268bc78096ac109ebdfa423dcdf0ac09ea0d16a5715dbdabbe1257d54ab6e4539ef66a8815e17e61df522e7f705258035b0a05513adcc8349532efc08cc184adb387d724f43f25acb0f5bd9cdb9c9b388d8960
+B = 1402cd8364115ce45b11aa799c576d6accb3927cd29e460be8980114a28d560941450dfa04c353fc90632f24eb226fdf1a3b8920af1d8adb2ade8e1613f4befedb1232659ff879b5084e5404c6246ca54d68ceefa49f969957ed43b1a7b93d4836cd0484c4eeec591ba0551ced48e931b4f04a10f3ac5d474f8b070117d430752fab4694241d98b09a54d1c137a6cb8b706e6d8dd239cbd239ef027b51f036a16863b110ad3917814803b6de942d2f41bf3f0291887226dca3a4aa7f1acb42022c511bea7180cc70cf9c7e694b63e6fbd12554113f0d4593662f1c10d5820f797cc101df7f798e38c20099b05d3aeb1
+GCD = 1716d462e788e204592fa74cfd7cc6c7287f42022d0860d9f2f678b0f183c54a7562aa74b5af92e858f4e6feb97c6123de9934dc101378f4be88eaeb05dc0544fa723b5ed270867aff39b2ae531ebd23bc22e444de9682409aa45067c5fe14d9550d18ec71cede20f2eddf756383b6e2269ee8c573c24495
+
+A = -412ae3f499945d703b913c31fc818b237fa4fbeeba620dc64632134f427f3490f4265e06dc912387500a6f3b8bd389348cfccbbdf34096959ba937f7e3c8ced1a5c47387ed09ab44ec5cb9ee88a6ae83044866c269dd7cdaa3e4cadab1af2201c95bc3aa47d2492e8f64397f4f69218ccc0f9968b740bfd9a020e6bb6f796d36e223bcc3cf41b6119b6a167ff883a19cf59168430e53a2407ae65c520d34c596af1b525f274be1f1e0f34d8468889feff5e3a54428d50662c754559681782161b15e35cbf11228acc2955560f5e2760b560fe92d234b634f3211d35415f7729d7f1574f5ada9c35e419fcbe7dd654b4
+B = 2c1b90954547193a4c2a5689715eb5e57139d1142167652237d98d9177669075371b249e1a5faff8fb60037d15dbd865acb5be7edfb8374f316ad411f07166e2dcd5b0bec5ded44898640af5e96d7496037aa016881ce9c66da39c749ff3d7d094a6dc280ac6016d0e7e6519675e2436605e25c0be8b9d62ad34a7c8ad694f198625bc52fc6f5933164da87383c3a16593845d6dae73b08284ccdb4c3e730711d37d2d69afcc52c102c2c38d8768855299ff08378e2e8fc7adbf8c621b4ebe7649610730fd9b9865078209413cc22ff3d3b1f8e5febc64c2d187f350a27c5b8eb96333d4b950e869d5f1d7a4437485c
+GCD = 4d8c7fe1d4d113e69e5e584cebe2f42a03faff4e8fc3f70e986b2e00271727d072f9a4371934f995143db2ec321b2502af5fe98a901c586a24156fff1a958d0c1431008a7fb48f779c7e1725bb217a9c16521f64653f8c0f279165803f22d5b2da8b01d2dd135cb65edeec4b1ef1e28c512ed02be13985ac
+
+A = 521f2fa1c832ae50091f1ece98b88bcc6529af62fb8463d01ba2c00d6de37a2099dd5448c44c5b66dbb5cb6014dc1efe94d37f7a18c6a86de1a065fb72e4e28120ec6491d6f8a77d90a4a5857fdb10bd5a6cfc4f613dae126ae70d5f8280556d0c533fc790e3f4bfeea54c27808dc8f6a2537ddd7f20a46a0b6a2e48a1e17c9f1d587c1cc646727da0bed31ed5a783da305425cb4ed7d20f7c6d8514a19a8624f503c454f2b738ef1c86297b2e3a3d28c545b2625a147ab7ddb53bc81c749db4e84633f59d6e7fcfcf6404721ebbb2b17992e4e80ec50ff928435fd22795cd8aa83a41d5ca3ad5c8a00db25acc0a9d8
+B = bfb846b6591b9514133bf7bd762e19d74a6ec85e93a83e60f8f7ceae7fe2b5599f720d534a13da48b9d6c2d0083e57f514ca9e269c68fd55c57aee6c6e6c8cdb132c3056220dc8a10c6e2a7397580abbb02f5d6bcb5b02a96a0bdb7fb76fc7244eaef2b473a34244a58786f09821563c4a0fd3387ad21099e3001a1b7a5e52c9ba398d51099f1541273a24c1341d51ed8c77b569bd9ca1fc66f4db5947e854759c9428705a06deb7adae92df9c9be567407c14f10e04333286f851213babdadc67fb9ad035c615b5e52713bcfc3911c2a1418af6698764f7ff6111d525cbbc74930be8c6e4a8f64f7d292848b9fa4c7
+GCD = 5bcaa8952065cffacf06c004531acc5c2fb89c9186676fcc8361e4f8c7bbcac2fc5479f910be93a1f72abaf1384857346c66abcf73a1614ac6226e5681b7f458ec6d341b4d81f4711a1760e4026f2aeb251a67c2c0ec8b01f503523aa113e6c0e3138414a37cdcff4787bac6d2749355ee86568093a6aa3b
+
+A = 342cd4a21e3bee4837c4ca53bac294b952a7a9fa836cc9690cccdc886d55322b37c9e846faafc205796b5834806748e5167010aceddcd383cf55f42d9830b980cb4a26c133e78e1f6308746c6777e843fa46c4c60a5c6015a338b51c862b386fbac8e6ba60debd0f27b126390cb2e441eb796e6633688cbf4525b95c2c44345feae1e8dfce6244fbdcac16a2dc533879314bab11873f716d32bff63ae0580cbbed5382ab5b1939cb0008d8ad61642c808a3c4bab5fcd30b6ea9067b83efb59549ba6ebf2d968c4724e533e54d3f9823c8be37a80c7e8abf2ae438ef7a90898d91c8fe9d3f5255a545a3d10499c794e7c
+B = -266eac6b3d6f05464364e85663c55c72f8b62b6968f1f137f7e02bf9d9b84fe257fc02f135c52756f18f57b92132f87adc604ca161e8acf309f571d569354c814fccbf1ca687ad21825398b6fda7edf2842767628b8d126f07e26f1ffe20de0674106a2e538197744036c2fd888ba5606ae86d34efa10b5adc56bfa688c532cede9e0946c76786de5fb277977d3e9a009e043a4ac265f9b9ca8b506c60c5a07d36aa372028fbdc7f9f7241987d5aacb4348865eba04aef096315e0c9dbe4637fe652dc8f7fd2517382fd04b075d6306f4bc10b8ccd0ae6c34c442ec4141de37016d62a99179c45a15f688e8a927f8d74
+GCD = 12188435c600201aef9454fa2fb9e758ac02ea05202d034105a7713f5b50c066d5495c1098e0061c59dfcef7375ee68dba4414960e4cdef8da8401478ea3c571a0be72d2156fd4fa8f787e64843ce5ffb62910a58d0cc01b4e8816d24dffeb0c8d97880f3048fdf4e244e76331d571bbf2c1061109d776d8c
+
+A = -13f75bafd5bc6ea46745ce580e10664558d811b7746c4e74efa6fba8435a981d26b54a6d52904b3e221c7b28d6e565d96c73f118e28f86fdc85c58b9825018c3df8b7a9896cfc0bd5b02eee8716f29ed8b5e5c9d48f8a413cfad87124a41abd329ba24b28032fc69e788ee9c61865021679b389d736584457f723021efa57483d5e3bef7fd1277cebf09cfd9af9a53bc22029dbd48daf68784369fd06c3885ccb2681398068046b9b6d6dd00b4757f97a61e14cb29f75c3b714884b741142d08297ff185005166dd4a0392639288260e327870df12f4080fd0dfc54a4207c1f8df88a7a312da291ebb9fcb2559d046792
+B = 1788835a5e1695b131c4322c9af94aed587b7e7094b7aba62f53eb0906a0d7f02f2977b65c6948e58b3cb7290df3aed12278a59bf618202efae29ef98a0a0787f2a8825d8126a540033974310070342a7f1c56db2bcd313a4bcab94a0f1831ba28b393f0a3096338168a5672154a246ebfbe9be14e096be38630a8d493f989f076179de97de6b50aed240d9410db59c6a5d3d72c969b949f0cda1b0a0b09989b435fbae08b6201cad5fa59bf53b0712075516971965abbeb3e6e78d37cb13c965970ceb4366d558ee83e1a69cc666acead68bfbb08ea37a4e0ed1918d58dc63403c1e997c3e1c30876e85722af8056d12
+GCD = 1ea54133b01807a50d5bacc9d0de012ad3054199298fbd7b797d6b4535cd1d8ec15395b603ec83064c51f9b95605a80385ae598d35ab81b82464f4960daa52c8c7120baef072aecf987051300f1a656e54a8b4b7648ac9f42f713b3a0437994dea769ecc0d4c4540cf89d641fcce72da2d54681503e9947d6
+
+A = bb5b75ab1272f8bb02e733cc23c2a1672904c7fe3795427d0eacdf5da2fa0baade10bf08f02fbb5274a2dc4df2447bbbeaee74b52ac5deef980bd631de315914de06d0c31d4584d98b0a980d2dcc386799694f6437210399814d1b654b0cb631091745dd965c399008aa06a2bcb6fac1c713c8097f342c211f2bdd2e30f0f009086b79549d0a36d68f03ec5ed5569e8337073ed430c319a45e8884fa87d4c960bcd1b2b1f77125bba061b58c5138f1447c4f97e61e1dee995381f200e9fb310cf04beeddfd03dce4eee17d4c6defd96672a5b989e15f4960f7a5e5c66ba6cd20cb3f0ee511a645f0b7175a3c6e767bf9
+B = -6cef7535acf902aa763dd7cdca6f9e6f3b4e30f948ccc7eb24be2dca79ba6bac23f63dac80ba078bc953c9be4cdf6a9d63370977174dcd4084d5a4b70d35d97af3f631285dd04306f568f57eccf2c4ad4bbb43231e57242f6bf67b71c70cab210bda66f55749e8053e6a1c71559d2e1c64a9f72a1fd273f108d09c7ba3d809c5516b0c69a1309026df287089e9cf6ce8b8b1c9c5329d4411812c23f52edf3e246188216ae3a0d2baaa843a0fd71f5cb9cfd10beff6d990e652ffc2351268fb3a0378c47d5a5a846ce84b901238ec3ff5ddca84330f32c17bd0205a585aede464260ad809a1214d3205ab693d3f23d45aa
+GCD = 389eb82ad2531abdb57d4011b5262e4df98c0590b57bc92ae83e90eb0c5434f6eb25f1ed941f6109283e3597e6ef01503b72a563e54105b20e366469620a464ac5b187b190805d59e0b4d52fb211d88ca8401181c2866a848ebfd18982fb342db1981892a6d5791c33a430dd943964060f4b8ea2597a30971
+
+A = 189805bad506a888d8646987ace5940be0fb07c212ce2696d1bf5fc4bfeb5f0c85db2cc6ed633badf296dd952b60a59c403d8373f884a5d9a3553667d28c796c5e3de0b62afdf75f5107f629674da51cbd039c3a2d312dc724487337b9d40ab4a1c3689b5f61eb9a5d18303514b3b2e8dddf79a4f0e1b52eab17568a26bede7f99b7077b1f60f657720ec0be7af63b6cec850a17f9149f0a9ddf85ad6ed9f33f5297ed0c90b09b9e43cb03f9a4b98ce125828faa462a5b07caf9d31f7fa85b96c02905498c19dd41ebd447a2661c9aa0809bb3d034c0858498ca2cf9b49cb65ac95f6644019b1d548bb8b034f8ee7e14c6
+B = -2cdd4f188d41cd6ff1b17800827da7c37c9455b5c7967f25da8373496f2c90e7d302c4cda5815fbf589fbdae0c1688ad93bca5af4b4a157c57ba3e7b65dee0de4e8c69121c52168b4acf3428f9378048dd64c43063ed02434f350997b456db5df5f0aecda1fc702bfe76c49728c7ea8e49126f6bf273f6007c87f18eaf09453db04e294d70659cfd7c20678de19621261ea1ad07cbaa1bec0baa6d2cad2e3c4a7ce183c2922fae3db0e9ba03dcc9a865aec8783f8752480e7296aad74e30620512ff8c7a605093b072ebcb1f7e4cef6ae0a0c84f3ead823a16e9d3c74a896eb94482a1e50426882f20de7f3960de859e2
+GCD = f7871589591a6022368e85dec3d7b00cf82d5ae5aa1e0d27478ea03dfa6eda890409f2ed3da2b20e4b8dc7c656a33135350a15e2b92cef7b73b73668534f1a63cb4398d832b096abae15c0722f161d622a4bf62f9ef3085e6141876cf1d129c57b66c2b24040ac6f93b81c37dcbe06cc8ee30ce864e48f6de
+
+A = -184d1912e5e7a5bb52d472077a5f5660ab45f3f22ede211781e48886ad134d8fe92999a507a96332e24cc1e6b844e06c72d6d2a7c031410045278c4e98116d6e4eae5cd5e20d135c2747c9edb6ed6c54b002eedc344278ca3b31a4e5d5ee991dbc6ce5bac07f409b0644acab4b90d83f2875b1893991eddaf115343d519c80c2394950619c5359e78bb900805bc78e298129b1ca826103f1d70512ad9a92e369d9e8cf796a21a783b83493d39186d4490ceac9dee529a48e33839c834b70ecc4743062e68ae80bc1547dd624246579d3314dc0baa47850c9560b3cca9abd8ed57171a109b9aca03a4622e215124076fc4a
+B = 32136a15cc09b55b8377b0f87fe1541f195880767f2e018f463684b29bd6f8f47d6b06e02fc33b44b986f3a1514e40d6e1e755c5d07d28c857a0105aa26e6218e9f28de1dcee56d84c7710a592b0a9a442ba0b270cc53cb85b75dfa75b299e6f368aadc67c866f54449c704b50b355340ca9d0e33327da83b516b904edb37262c0bd7e403b9e82d2f023095c0c5cc746613b5e432e18769d62b4338ad22c4c727f43b869b3f8ebd3cd16c94585d4d612e9fcd8e7da9c466d7e09e9a60073552bef52dfafd65e92efe5969bccd241901114494f550da7076d0284d3783f3544dfd2bc2e117091f2d60c4b58d1cdf6ef9608
+GCD = c6c56c5174e4f790fd73e3eca9b47509e9bc836d32b5c9cda12615c20273010e4d35186953f53c51d19d6a0a3629bda5cefbd26980f17f8fcb339a028ca4ad59e355295a90e61028bbb1ace71aeb4267ddd3a783fe3f14d2768b086957b3ea750a6ee13b4a7721b6518cfa3ad753d9c5265fb99241ac7656e
+
+A = 14b8783be74925a07fb0d1c23353d9e1cebef26fe0fe594e4b995b64d2b5c0b12f74d9442ad4414fb9f18da2680500b199372d4e3d503830f5ce7d5524f59d9c6fe2673e8403f3c6feb2bc0f33b2c15ab9d01f08c4da8e51b4c8d0e27f58a8540d8c783c88bd35e1359af633e48e40805e1e007607806291facc207116dbc283455d4334fe1e820a52b4caf20ce3adfa08c77e7114ac50634f8aa2694a26612dd6b67f741e0c0afc6f58580b66dbe49f2472ba2aab133f6f035233341218e374ba37b195c7ce1922732f5e09ee77354d9c29fe086ac78878710ded8e49bd7c359f916d44dfc656f2762c567158a0ded3ccb
+B = b8b7770770458fef314c0ad89280272cd482db0b9ff04e6a66330b13d38f3ed546e9764875a0b74e8dd3b1d9c4a8b110d6e9b2d1b8a59893fbd373e86b1f5de59c3b8839c21e85f2698c0c75ec145ca2b82679c27a706842653fa3662fc906fe8b4b9f34db8d5feb5fc247ab8b774382a5db82d42fd8f3284c7b396704d8d9be5b6a16cc220db334ab7df6ef73a21a35b3041bfc360480ec06cec67746eea5958f629427ac690c93033757fd8817087b0c1b86228ad5dc68b3ec5609f50df456fd7aeaea3416ba89e95d4b78c457d63741ac3cf31926cf14039fcedef82009a58ca6845c7313bb15baa492993aa1858c76
+GCD = 1e668cd8acc5d0053370c5a4e84be9233c8853d7a5941fabf24d413eb5e5ec9ea8d4e177d4bc7175877a773f2a70098a81eb8e3be7d1f8ec7b76a3b66ae467d80cb9676cda1d651e51dbd1febe9b713c83f31ef11ebf91691dbde704d8f45611754afe94a986d527a8d838a9e0041ae6e7869f17da3def9931
+
+A = 583bb10ace4032964b5956803080c68517e0fe2063abb21fdc96b9e47623934e837548326b4e26f63f55604e3d8317a73ead9bf237e09dc5eb98125c5d538c7739e65cc0fb0a80c9faccadeed3f8462629cd0a53d20308bf7a4b0ac78dbea7483a0895d15446081918574bb9658bab94b8c6ccc8ddd9443e16917526e5515133d43239ca7cf1e6d2842f397041a1629ff8cd720bb73a4926b22dd0e97f03b1ce2755632668026e2f4e3866556b07fb5b8613ea758eef61f7d188be2aeac261400fc94cfb421de242f83772f7c4ab91c62ee5561dd54638db6bb2762a1e2af40fe55d23535f1140a54cf00cddca11af8f860
+B = 34222902b4eb240e3b6b01ecfb4139f7c1200527f59dbbd72e9d8e73e989b4b3a21a0f6559fca698b3c066870bfcaa0365b5b905c3ecb04e0d008f46d235f629309dd35553e047ae96997b746f32f885eb87730d797f61584248266a97b37adc067f68795e15cf7af5b25909ee51edee7dc03efe89c0d704048b4b4766d0dbfa0fde6316317cca0bca806937782d99486c9fc4cdc8809c09c04e776357caa5e061f40830ffb01cf575f6a4a8d8b4ddff100f52ce409d7a6520d489ea9f6483959c88cb05d787693bb727cfadf05ba3f1d593f7e65778980eff3621a0f93dd1c79d94c75fb640c79ede9b30b03c3247b8a28
+GCD = 33643f51a7115c978417dffd2004b660edd6b2326960d0fe3ee7b67011506db769c35ac9f28599b6d220c58cf51137e8b382236fc314ed97e54e06efb58dc198339a07926088fb5a2e598f50b0cf50304e3eafe0ffcc0cefba10fb459d3583e919e0797d4443b0c5c1ad05ed5a437e28405e7dafa81e06f598
+
+A = 18e6777c879cbfa88aa063feb1659d79ae3659a5d798f5bcc8cfdd5de7e71256ec2d90ce65140749a6ea7ceacca7258a207a836ed6f44e7a76ef20e0b8556060531a1a53f6c89286002ced71de78b23a657d8b4446b2f9dc8a3077d850c29c9478c3c599b579babc7b4c21d88eacf4b2238f78301b66e8252536e3c83e9e4e9c52b50905ebc8a07bb6edc9d0fde4c4543951ed676ee6389a88a1805dca58b1824a667167bff4b75173bfde062583f8fe12cb5ea282533f2a0b5f9733f988816b682a067b2d98f15f5b003b258f85f09c473280a7d5379027f4dc5bc7fb722d90df788ce626f4f88728ed556f014956ded442
+B = 10fe850f6cb20e1a14bb4699a53b014347d84e1b078a9bed4838cd91873ed767f43ef5120e0d088c3065c041ffb43e788e4532c9255fc9cf315d293900c18f4181ce6c5d18392996dafc6cea5f1d70986fb2fc1036d2b68b333bfbd190fc359cec72acd0d25382bcf189af2991ae543d2744e9d2992b6fa29c14267cf6378ce172d681630c1b792eca740ce843aa1a05059021737e9f864d4653329134bcef0569f1c7d1852ed8b22f86d0ac4fef85214ae81726ecea88b7810a5a946590c4dc3348204baec25ff2e59ac2f90b755eb5838181d4db6a0d77abe9d338f8222d6ba23ab724e815b8b8c08a131773e52ae2ad0e
+GCD = 6a3860d4c05dce55b41f3f19dcfc26161f6459ad3ddf161fcd8e931d022d89df1a1aef041c3b5324ca880f3c5966f8bcc63cd79c74198c9c6fda459efb8362ad0ad1ecb1f9fc9353d46f881e3b38dc793dfa2021fcf79b701834506ecf9b23553ef21211211345c13a41db522541ffd20b1bc27fa4c143dd1e
+
+A = 34789df833a4422e9adb9e8db7c706af8d39a252830f2b1760aa677c532dc2b92aa992f17cbabf7ef673dde6e46d46395421540b03288d94cdf97c87262f42e8cbcb07afedf79e269bfbbcf1b36375d46c841a1029df4531e883661ff0c24dbff0bc36df64a329afa5dd54830e2692620b7ef8fe04cff0a0bc99276bb782400cf7edc2bb2e566a380a6f9ba12fab753ebd1085ba40cc26c07d02895795a25882c57973cb6a65860d27d357c6d70e85498c8c11e3ecc98200ce09578b69c9c724abb51d4722f647f9d3dfd7fc79f771f5091bee89bf458570121942a6f0df4dc01dab09c18db361fbaef8b4dff1461076ca88
+B = 521100a09d6b38f256ead652df3ca43815e94f7138e0923aae22d9dc90ab9101dc6628679edcf7c747829d57c27b62c3ac4fbf97609838d309c84ace4180320bba6178d0221f25b555ef520c1d3829aa0054b5cd1d60a372df855a5d88741123ec67a9ba151e9eedad28e0439961cce73c31a1900ce6aedba344251c5df9b1fbb536961b1eb44a0f159ac47058e9557e12324c9a90d7df1f441d2d8595ec5f9cc8041d5086d42c1b376f19a327fb9d02b9f75fba80f516271498af7aa44d7a3c7e219fc93071939771795d36cb4235518db81965ffe760043b1de885b8662fa97c279400ef564689c83cbc283011fc1d7dde
+GCD = 1a32bf839a0c1cace8996403a20d76da5458b1d69891b3442b4ab2abe8183428d6955dad08bfa9997a4770fee07defb76f0d44ce81383c551a7bfd14060c8e55d36c7f3ffde08a62433d114da74b4001a07d7126e7790bd13e565e75e2d71fb0359f3ca22248a5628ba0d99a007ae8cae70e559d65756bce3da
+
+A = -163979bbadbe4d08624685cc3fb5038896df186bc8b31e56eb15d59748e27fa3cdd68368c279bf501b57848ee15a11b71f8c95fc8ba6989bbf7fd45fcbba0cd1dc458fcb1c2b2581588de73eff27e7cb0c0d17a148955bda62e07a0a37caf0fbf2876577f24c2e924c7de43811973f240fe8090c8121731aed4d186863f03a17cbb49ddf48c58df56635926ac7813f7b6ceabb9b1c6f3af0dbaeb218edb5788ddd866790a33fa66635b3e38e50ebaeb7fe82c2fee7460f9042c625af314f19b437eb77a8796e3c42d162c36c773de3cee21e8639e7212324708c3fd2af7b0712f80e5d3a079ccff59b8e67085bf8b74565ca2
+B = -1563e705532fe7a1007a723fb888f62b18d963668f64a0ad76aab22ed27cc854959b93f68af219b46cfc1e24de05d36997d208290becc0abd92a23b505f42ed60574903740fa857c53fc706f8f9bb7217aaf8557cd8ed04acb0b628f512e0169b3adae4b4b17faf8eb4bb77080e5b8f78309adb04bc35f3aae94fcc9385c4e9b39cb2c442d86890aa3f079872e99c591587a9bbdb364766e2b79e901a941d47cc14a3da23a13408095800a4f9e7962561f46f7dea3c9b01813c7524a5980839e7b1a110419d4606baa55ac1ccd14b791b7ae513a8a89fccf4e0dd5e25e79ed6223f1ffbb9e8ca99dbdf249049bdf0b01f40b4
+GCD = 1c8633e8d467c40dc5ec4748768107a786110043902537cfa081baca652014befefe4bf0406f16d0754a0625bc3b0303944594b1f0f2434cdc785db7c6be8f2ea4194f360206b3bfca96b81b38b036bcdccfb3df400c8cd6cf853264d577f33bfed6a327bcc627ce3946858c67ac537649c2b4791d03a89d7d6
+
+A = 1017fd8d5cb35f27b8758a9d558a168cea02ba7d1edb4781fa48387414020e5fdedc26404e2517d5659eb9ec68a750248764d5ec6db6da948341f981b690953b1220d58787528e50f1b7642938e7e9045dec1bdfd60b2e25e52feef634a27bd04818c5f8b4873afa9311f28cce262aab6f672f188cd0b10e13a082582e51c249b4f93c8800b1b438a9598fde7f5b101094ec4b2f61b72e0d4114732894c908124724bddc6ceeb5d0ff0956f23850f19a108a4c147565c6d7e260caafe73ddd9ecd4bbe6a02db6b0e7947f6349569e83f275457e935b0fcb04d85d5dfbf50b660895d45101a0baa71cc988c1d86a9804eb3d16
+B = 3dfea7193ee191dddbefec187107e53239517c601cbee0bf198c37604a66c4350a012b738620d70c704552cc74b0be6d1c689f04ce6ba07d99c201983aae7b9a09421910f5522460fee9d13fece90a859df2066e2edc77b4d65811e56f17ab1679f78a3edbbd6af94b92803087e71a14410aa143971052c052a1513ec86364191003112c45f9e04d19373e94ced9425893283e99684b8d816a46f9bb15d44c15b53429dc93f2c47903c536eb0a71d02e55086b40340af5584cb35dab557845cc3f67c80d9ecba4b2731202009ab27bc3ddb134859df51ffced2463679008ee2e740cb37fb101511f51298cbad5963897beff5
+GCD = 3426c6e901c7c93ed1e8fdc631827a3385117ba93d49ae53a2f18f1bb75496e6091e15a84b416941ff7ea9d6abb442a537913d211b36b9a5eb77c7174c0979439d193eed23fc532b54208959db652914b631aaa21e8ce74110b2bf128571985042b6fb50677013f63fadbbdb973a7ac5deba708d7979802d221
+
+A = -7a80832cb129929a1a44e0a9d5cbf264db00e105427c34e5759c0ec01f7d2c8b86f7c3673239cae99f0d2ada96e4d04c743f997d1c3703505649c4009ba69b118f87848b25f5b8cd6ebec196030a51de4728b8003fe71fedb3e93b7b70e5376b154b89bc4efbc3df143a594c791b906e258b5a39a54fd892e87826239a5875e7ffe738d92c4b56642b59d2bc63007c2a87ae8fdbb2c46eae8121157aff6dc06475086481cac534f15d939edded0617c9a5e585301b0251aca7da99411ebe5a39aa90b2ad78832483394fc20a026aea57eb9500ded2424df97a3b32924a80708ec8ba218a0697292a57aa948191284e75c8de5
+B = ed692893d0bd3e7b1c3ab12946b4b38ecdd761fb42ed63308754b1956911c212e03cb4f8c81f549bd37a8b59e5b7fb38266a6f9397f83e8f66b63aefdcf27d1e30d386f07e3e86ca2dbc6588b02ea4fb8cda2cb37d3cd75cd28ab9154ff1fda5a2c05bb2620350b3d3f17cb7e991da2987d25a108dc9d10f5019ee9e2d588abbbdaa0608b2144876c5049c1ca00103e8855861fdd02fdd8b0be96768c3ba50fd1866fb5c4b1d7ecc819244af3198fc68351280991dbf077d1096cce450ed0b411d97d6a7f0ab040ebde88f20f8eec3aff9904779386cb1117b5da2090aa60de0f26f3c8546193709f5232705cc80d28fbbc39
+GCD = 44a20b3ec29c0b777e1861c53a9a89a29ae1402ec341351d46233d4930f04cb7dad56b37d43b9d7a91a8a3160f10576324670ebcc22e0a433a912fe355372c6acbe811091e8769c1697d6ff363c2cca7a2875027ce6e36a3d2d2f55844170e42f05b88ffb792ddc72c9411f87077a1083228127551538feb95f
+
+A = -5997ca5bf11ad822c7f392aa2f9d107d5dc5a2dac0962dec1f5b39c9e9471c9ca86eb4da11bf08abcdf3585bcfdab2345e1b72085826db1be4305c30654f22d7c5ee1656c72825ec8a9f5442228d6ed65f1b7fa1ce601da8cdb429ec820fc0aa7cf4ffd5421667cee6e3d226079aedc1b06485fa2be5848ed306848181180bc25829ba96f0d58d1a8bb9faf6963dab15e4f68594c949855eed4afa10a707fb5a349c4c2c4215664ce08491dfc4b8c4b19b5fc7406096248cd89682d444d1a9bba38ccb2da4312c60597f0ea4217f8e0d670dac74d985f9d4793382d78b532024ba87f63452dce34f8fbbb2815b802c036e613a
+B = 3a4ba0191cba8bfcc18d6f4f3ab45d4267553c69ab14ac373c32f9b508732cb7ece15c6d93a27228573ba808897be72196582b7f6cd088fa56e801f73eee92dcc066de5077ead02d95a9e9b33550cc75337e842fd055e217bde8d881b39f637e6b571f5f49da09c839fdcc43d9853288c0dae6dd20ff2fc5561a1be56afd2a1a767b18af0be08bd00fb042629bc8b65368de6ba7722179b6ed1e97f8bed3d344cc7f7ba7406cc2d9c655b8ebf4a35fc5d1a2a63155fdc6d510aa0eb4f3947530d74ad46a5c809b29472c9159f9e3898b1d6c049e692243111e53c4a468394631daecc1640cc2da98dd4bba2e97ea836ec6b074
+GCD = 23b5c1599e4297f5514d2960edbb132a60a0b9d82537e530f3647c76ae92de592eb446a0a9fef50ab6201e4db8a77f253f449d7fbe916f3bc45c18f6d2bf1cce1f2176964612750382996dc015eb2f9e67ce426a25a155d1f8c6f59ec65e33d1dd9773e90f94db939b97e2a1888e468f6cc57b5d7236a9252256
+
+A = 72470e00156eba5e1878fe4f8d45a181987a702b420cd31ad92777d8fa9352685d93bdcced6d11b075bbad00aea2917dce89fd01051f0a7c59615bfc6a8976c603082cd0b393f3a46da520d957fef9a5cd785cd3496d150b95c6667d8d0c997e572246d34e9a840709635d8e8c49b92bd885f26cef49efa03f1c258f18796631d8aab0d3a435e2566b81b742698cc732129cbacf9c1f9e46ce996c0c61c3f81a870b95ea3d4146c5721be6b8ae0befdf2f4366a689453acf1490ef77ba3b1da815b721ffc381b081061890903bea3586ec7e3c5d2041db523c3fcda28fd9e63077754cd143a6dcc0d7e95364e47c65b7b6c5b
+B = -15c249bf0590e98bcc88b7fd2e899c442c5b6304257e931725593da7718454c64d7fd68dafeb9cb45c79a0335841a214ba0677717bfc32baf46d09d82913d64c210b1e50bb2668a903e23032fe7c2150c0c32f78d0f7bb7c424b3f681ca092f30cf7a5cf577fe718c415c2ba35317d791eef44e465377e55f39204ec4a0c573a008ee880053d6cc015292d1133677622b10b7462339be977374e8096f7f52d6b4b3e30c20a42daaf25788e61b072a6c5f4a2e5f8bc16dab400e6b6b30461c47f0fab47181c7a3d09da3b705d1a32bc87c4ff32f08da2c4caea914fafb7f97072d204f3801d643062f6fa4b2b78d9699b0d56ae2
+GCD = 1dde625feedcb23e81b13be86b4e8d051cf548f9264d2107ba5bd6b86dea749bdc630ec68d272146fbcb722f44f64477d15154c64a9b7093e7d38d6591401389b13946afe9d90424ce5dd079d047312389186c2e216400ac78a80f082181de8a9ff0dbd1a144838478e5a8a4e4a9f2ff8625702d887aecd67879
+
+A = 384e80968a8064b47035d52ae60255ee091789dfbf643498d6af2425a36fb8c818711b72ad17f1d0b19c682a726a7f7620bf41b61563835506f5e0fb63cad7c9bb779a7c8e50a44a87ffb53c6ebaddf60c510dd90761978ecdb2a1a9197109220e65c4aba6cfc73f69e56733a64eceb3a2e1ea060a0f1e61ee40524b028904e4e00a2c4dfbe51eae5c02d0bc11d1923a503e2e06aa911096efd6feb75f17f870b8a201aae68eabf23e2dd27cbcd0562390f6163bc73ef514586a190ed1a0629754b3d4679ad0f70bf018038dbf24716ccd84f3076d457de1955db88217b3b3493f764c2aaec7e3039f14a07f56984af22d807f0
+B = 2a76529bed94bb1174c60d5b8fda44af805645c5d222d68735ac55a2fd4ec313fdfbad2034e308fdd22c2f275199590b3e8362045cc9833005d303367628846b5bc55eaa93de58e919cdf8f5d7caa61b2bdbb03eef5f9c448d2e10375bc7a7f8b0828bf7220b64dc4a302cd3c3c5715ddc01ce4bb2206b7186a0f918a3e56d5b581c02ac5c97ffba587f7cab6bd87bfa765edf1ba77440e67e43b09ce35157e0e031d0f64570b54d09843d45021aef75cdb16c9f184e0e5598bfd2d96a1cdfcd194b7746c84a315afb408e25f1c24369069c1c6f56a4f8dda9c5da77b051bea9ca6682260d12859af944b0e56991576692063a0
+GCD = 4ae7467f979b4891e7088de3f2580e880425f8b12f3897bd77ca06d06ff791085b4db8ac1c7e2caec13253c344c061693b1d09f97a51881eb2e85f9e33deb48794dfcf5a62e19258c2d7f6bcf390505bfa69e85359ea991e21eceee222e2a0604c33132d824616609a167cd93bf2b12c035d51edc5caf4c21230
+
+A = -16f4207f86fd2ec8f63291a6f6fd7fa7da587052962071251bd0f8ee6cb32fc07aefa9f100e7c308f5b75fa507b7e4fd4d14e24fd073f3367877e64ce46c56ea65aaf68f74084dc09257f1641350b38d0930f67e4187362cc3b731f77f3ccd60a261c4151a815a8714265f8105506e5e075fb82131bda64d8f46015c98775c4c77c8695d1307528e1e133d1e0e2306f6e7789530f089632e6ff7ece92bf2a553e2d0c3dd45ce4a3ac2e763bbd99830792edd5c2a34305e4e8f889de59cc8d63f3f2ef96eb89b7c9ca4fa7f1267a0f7cb1f39308d17534103e89a403fe8be49ea4a3c46c84252d9a5eec50b4a5bdb6ae927498d63
+B = -6818ebdc18cb717eed0dfcdb81a1207c6f067c32bb4b8b410d0855e1b96e70d22b05be3eb462319419c6dede364bb2dac98c62ce7cc447104a6d3474628ccd2a0439c8c73ed44faf3e9662160cd6591b51dd5b6736f0821ced838200f5a21850852c2392e65a58fc7d40295f46391f48af3b0c0ca04eb0b1d118187391cafa117cc316cef2b9779f3f417151ae7536f4271cd4fa4e74106222c3294beb626c21c00262964f404c409f7226b701f744f301edd2b4d01cf2a3e107285c3bd669766e10fdefdf96cfc1b5335399c9187bc42fec3be01a769c39b5417458ca82878ed875b8a7d21ed4debb71122359e2e452391036e
+GCD = 7281aaf204c1ac8866a48ff86eeba8e69b753e17e9b7d372f64ad7dadd2360f06e5a960bace4f8e23d2b2005a6530373a6b8557e885375f2378b1589f57f1ae5b059449dcebcd91c9978169975aaa32664404a52ee05f5e115e073355f7ec5a8aafdd4030a0324c8110c0c48234d6c6a7adef4ce057bfc6c8483
+
+A = 29cfd25415fb471a4e60a18c729b804637f53057af3d708735eb3a9a0bebd41d77c158b4c6506899366e6b6183830295ae3851ada7a459c4e171dfa200d83490c396e4cf7f6e8c9d54d6f49a9f6e2eef69c8a9ab8aec8d5fdb17669906af0be4821316101e6dc2480e03ad8e6b8104dd0eeb3faf0bf65609ad103ac43f5d8dbdc460f48199a47073f66e2dd33fd05311fb424a5fd81fc48d4073492b27718927c2fc02b32efd21dd5694490a88f43e7e5f2bd3ba498d53a6395d24ad1121a62f76d23442ef2ea467afaed2038984af9a6dfe1925760e7ddd4a535f1342b60778acde2e317255fee54ff7e88f0b3dae25e8b5f7d0
+B = 18c5f8cb81371d749cd85a869bfc4b6da1fd988e629adf8b9f9e3ec77150f7f8e35b9aebaf5767e1f7802fd323e73e86178445fb3101966248e0d45607c251c448bbc3b0d5aaec5c687bb185ee1c09819671f0d4c449409f351483e94d757e563c66c1940529f982c5cd180992d10a8318f7f54b0019c0405f57842726f0bcdd9497d4d68632664ab7ccd44eee532b3662e0fccca27224bfe222e8ea37d3d0fb1029380ea67f67c26a5c133afe7a5581e3705fc24b4408817ea455dcf0549f947052d91c441b454dcb25691facec66f8e3a886041b8a932eb18792bdc1b190ff695a1eb2e2400265472427854656468bfa121e64
+GCD = 1165812c9b00faa32967fc6a35674c8410c110cf24eec4a02ab4f6e44e625f4f2c30170e9e111040595d7429fef35349cc7d7ac47c4d22aa636ffbf39587cdb6a5db80bfda515b76e16ea887d8f51ef5106f2b46341b89bcc236f0cd4f6a7f2413d95115cd884ab7c1f57cedea01449e72841fbc7c3a07cbe797c
+
+A = -97d2dc5ee51fc2a949d83a6caf4ee84ece160a0ca368c6f5c01817d0e5b9e512fada2e4969649293b90106c4ca44d7d9f729ca1044560337ec7d597f22df82b911ddab0943b7d3546857637279211b748d360f7df78831de0948b3eaa7858e0d340d3c88493e684b2674a07212e33568806aef9ad69a9779212dee3951a9120325ec8d94d599c62f307b352e8ab0a21028d7030696968850ef0ac4f6632af0e5743a9a9bf3442a2af053b2ac7a2f7dac171a2bb355d060ab4b71d5358ac35fea5bfde10bdbd3d41a205e2dbb735e9ef6619b941fa71732e041439668b53746fe5f37cbe66761a5464f1c832bca9c1e18f4b8a64f
+B = 169dc83c1a986a0e8f03dfbab56018e50c21c99fd9fb3c3d2e550eaa214bbdf49646c880453b7b24f87033250ab20438d2e570e2a787a2b00800f71f1bc7f399964a7a64d5f178da59c1e6c2533f6c4968145886a06b9296f6a93335adbd3797322433cb146eb04407e0a36c56e690f1da5ede26410cb50c4e469e816ae7dc12f41511f892b4327450345ab74f9755ef5a1182f89a9074448ece46978c5c12fe61a4022d1b352ed4c768f2304ea5b5622e5c31bb9ed7aabc972c560a333a86ba41c8fa803787ee8085c4585d1346c6165a151a96a8b2d9502d82dccc32a5aa8c472b8d91a9486457f48665f59f88a8464f90e7481
+GCD = 1eeaa67dc52b75fd2ebf04310e25e1cb51f8218d61310fe40b51f5ec981d9605ef0a558a5912e45a8f1204f5e9c7cb9445527fb8e975426ccf7e73495deb00a02a7915fb98cf385b4b08d3d0a50212321733a8088d5635ba2f625121538316bdd0d60690b5eab3936f55e41ab154ddc7a55fb845e4545bed59391
+
+A = 56030780c03be379cc6a1b64cc45b954f36eeb201f74c3f7b23e42c68fcb4bc030dbc28682ea56f3f8c69cdbcd8c14b12d12253aad0d26a713cedea590f8cc9178790160b80e4703736a8e0b9e84364ad5dad25b4630c33fe60ea966d65af4aa205c221e6aa4a246599528f14200cfb67043d808bdea60001c7175870761ac95088d591422e7a8f235c501aca8d4e88d5a0cc380d7915cc8e5dad2b296caeb2a34c7107f5910addb86df6322c1acd5826edae92698aa84e54184891a528e28d60e4809c336382ef88d0776791c8a5c1c5b7a8aaf77394d34c3d6b29a7be52810b42d17139100f727bf9e2228d358386b177034740
+B = 318b1c18bb131d73b2f505e2f223667abaa2bdee0d8197f8ce458efaf74b470a1cf0cf30b052d9e71ea10e2ce97b93705b7225046142e99e0597e7d7002f296777f37f08b1354ccbdf191f60028ae3f5b833a5eb6373bfd4fe6ddad73d712ec95a87278095f2f35ef7e9fa46e379921b05db69f34474bfe03d834db03639678a271a1437e708f887630315595f036b2ea3613bc1a2fc79685a84b7bea5f6812591c037243f2946bc3b48920cf5bcb1b967eab8b0bfd1f66cecd7c02ff9f09b906f4c05f727e940f7efe79d7824d78d262093a8bdc957cb73c4317a74fa951c023f8c9100b9f8472af46d15bf0d787977f1f3f68e0
+GCD = 7fdff20a53bae9756728abe67d783fdddf05acd71c9e3d51d4d0dd492de950fac634f8f7de635539eb9d2e77af2526cf2f09580e568fc4d7acb5a306c09caeeb0243b96f77998c92458b757b15d17473bdf3e90dff7194a3459c6eb7dc5ec075963b21da313bc0b0abe425751d49f803fe9aa86deddc4f6909c20
+
+A = d94cd11d2a93d439eb826087f195aaca42b0b9457becf1c7d648d0f27d11d5f3e64c93be955d129e7b36afde711ab97b9a5f3a4b209bac91c054e6bfd11470b1e8454ebd6090dbbc113d2f5a8c983272ce4c1b93c4f20c161cda14113ef2ef3cab9e1520dbb1894d3c39640e312ea04e1e3c622b9a29dcd0f2f0d42286cea76e53f22c464f39a7dfeea2898b9fb75152032897250e5fcd85722eb8690e1302e5b7fb475c741bbf2a0ea6c57cc2cb61bec83313a2698511a209cb69f0c0cf590806e15bd55e41cd7affca36cd2d1a3f99eda1b8e94eed96b4b18809ff98705be00c900342418b2d1f60fb0bbe7d10f1937897f30b2
+B = f995dd7d4cc178649ab3a418a536589feeb28406aa5e3d96e4ce9df5b392094737d5f8637b19d9946b1de540b6526b52b5980012910883c046d0a4be56c9fc4943a7249617bb45ff11bae3a497fe3b0de10f9ccb635af35fa21b0e00bc778a161e07cd8d552d71b6fd6f2678833bd593dffe104a00dcb377c133b115ebe2477a128d30f4d07ea73c541c656aafbf6d4442eef998cd55fc6b1f457412634a365906ed988483aa9ab684cbd4589a5f7616d84b4942e0f6ebeb9ba4e2807f99a691c370f43bb6adbfdbee4d5d474b9577fbc8b46791a115b0f27628997ef225fd26838bb9ee872605845e23b08c2bb41879c04a61794
+GCD = 10da41d390027bed1661f01e09d4d8b3db2bac9993a531d5756c999cc07df488c3cf3772dd2287a56eb5c6865e56bec0ed991749a4ed50d16d6d4d741c506f569308fc2a3c7ddeb908889e6c92e78d32cae7256ce49cd6d19e4b81aa5132a2f061d6ae9bc44750b279a5361a4dfadc064384f8f4c4975ed7499c406
+
+A = -3df39100c5b407c55d5ff7b9c9c916fa195c722bb94e062395cf666c36acacb0b7af94d8e41645b0a89fb25e0f669ea70416d91b5c5e7ffa7553167c23515e0ad57ecd4a7bd109cbde876e01d387dc4980e52d370f5e63828f9a002b7762b49342420d9f82a86dff69d90aea52a08bc3e458be2f25719bd41bcc6ac959075687f8a2b4242d3f890c3aab83f1fb3675e5041fa90e202d1f7d38dd296ced17ded8812e0610884954d23acabb83e7e10a66f482230d3b1d2d5499239bbf6f5b79d589aa289f2b608b6db3caa8a527838b58c67648dda45645d550ba7198b8107effc92b7ff7a73ecc6efe4f4e66f803c9f8ba8ebbe2af
+B = -20cd74c5bf7860fe7649ca029fd197af9ee0415850870f9be6d8498d4651ed432534681fef24e93f8d8dcc10eca8317214a3920fbe1a0c96d0f9bfc5cffca9c8ea00a33403bba55e40c5bc2d38392adc19f36d69af26d9ff7f1a0fab8c0fbf4b9c72116aa2e5d581a0b719db3efa14925ecd3d5b3c626f266e022e181ab968a84012aecccd64eb8c0f46b4af50f0d2f2305d4c3887ceec9cdb4e6c40c48995cd10b49a9e6eb2bf57a7e830f22c01d00e0a7c4b75074cfd7867f8af858c791990f897111638fb50102bd6065c403559d46dc7f5214d71a86f0160617cbbd82a81c1f0ab84896d62e2c95733c3e58042b82a439fb4cd
+GCD = 96aae5ab17bf62e9806df66b53b142c93d7758cffe62d830ab75ec3b606f25bee4238acb6bb318a734b838286d8595d11d84acdd91e3d139e132e38622bb69880ce2a5679d9cd5aaee8f7c0f27532e7689cc9e283bf93beb95b3177643204b81b76a4c03f2e3ff1798e5f8ac9716868dfc4b728b3a139fcc26535
+
+A = 1598fefb6de3ea095576e4bb9c5aa21581c5cbd07977be6c8bb11f5d090553d88e7d9e1dfa0cd2605a4ec04344e21aad6398d8ffaa243ac47d18b3bfdc39aa1bcc62919516c285f4c270025a38c65916af539e2e9f85cadd5bddb356b03c450d70c32528ad449dcc42ff2bf2d3269d6d2ab3f9792af69ecd8161119dfb37e53040eb1f4ef04b85b478db0547c63fe6a12db86973671e36a728d17e7efaee5add9d5bce35270fd060ebbfb876f2d75559b327e9adf6142d74eadf3c106d4dc9ac9d2bfae3c65a6833a7728cf30456b570ae9e4232569a4788574a5546ce0174610a2ad2fa739b6cc8d531a642af15a6852398db70c9
+B = 1bb8c6c15ca26e0c58844b44bcaf8eafc0aca6b0b324d8a33e24fc61f02165c9f642eefe05ffe2377af7935551520fc0ad1a75cce57417866a753c13c726676662c193066e2b012097a781a5e41554f4bc260317f378eb6336b5960b62fe66e6cd47dac4092ef0469f62f43b2f6ee1989b4e63f035763cbd4fbee4b490f1540813226c8ee423b40a028626444ff9c0417faa57029c61795d1f080fe81b40532ec10de84377a786475be0c025e1b4754cd59d847e4b1e535cb22728239039b5ca3fde90d0f30fb2606503d19b24a513a2d653b05f2af9224c51fd2666dded815e1d8432b7d2093398156941155a8b3a737230aafa683
+GCD = 58344ae83d285583bca65018029c3d7f5aa0f867d4bd4c00438dc9d20124f7fa23e1e67c992a071346a60c4c89d1c499e622a2dfd7a40c09eaf0d7d0a452e85d5c177ddb312e55f91eccc6e6c332d6cfba9b7f39f4c13efceebd79c3edc58faff5c7f4d891f5c5b9a0977903406c9ab157af2d2ab9a2a450dd5b9f
+
+A = 2ea36bd4f02e5b8a759792a825a953a1c1d05e3b436c3f1dc39fe7da42098d501cd25ecca3f383e167c33b76bd390d6d91208b05b856cf4364adcf020aabafb8db943a077b74f152cd06c2a6aed920063fdb6fb9a5ff7f66ecec98d4e4d2e6e2d36f22caa968f61dc2b13a0912ca4c652ec559a14f19f47e49d3babea9a45e1f8df10d5f13dabc3237caf9317b00ed3a9841d91ee2692d034e39c05f8ba3283de54e580e6df70b3c89c58c61f994b483a8256fd6d9d66a8ed249f461712fed7bda784ddd412d04129fb98a9b0fdbc0381c0cf28648aa77dd7a17d6c5e1bf7e5c06e826c79de52affcdba957b3b9bfc0addc4d2de1a8
+B = 1859c6b6891744e23f0c893d62d88564026f092a1cf9e766575e127879fee0f2b3b3ce67d2e6eed4b10555dbd023d658f4ce94a0fff0c38dbb80fa9d24636b04abda0450352373d0590dfc13cb2bc49bfc25a6b6cdc3b23b8c93b8ea1e7035b493465bf95f02f62d0d35969432654a568320f68b05ae713efd6706d943ef548b50ab16891f07ae22615972ce2f6d4f516b6b41271fa693e7cf0250a402857f6cbce5dd31fd3d7630c7f908c7c0b806120bcd0d2c7ee7cebdf5aca552fc23d9a3da054c7d1a29bbfce48f15c64994fbc452b63e1d2a8a88cbd018bec033ba74c700a78b6d5e887f62b6e0ac56c97c391e140152bcb40
+GCD = 31274677bdcf02dfeff976b2e1d78428c48f7ee3c3cb1a51463ffa6e7272d50ebda4bc24c22166093389b68bf81aa8ca33077aa9bbb784dadc0a009edf35f29a3ea9e4533f011d612edc2c542bc0eeaa1c0ecfb979b68d2b4f0f11faf6cbe47e507a5e27303e9dea8fb446567051c8fc7ec784cef2a44386525f98
+
+A = 10c6b8118628c5e16acfb4c679d1ef7f8b1a3d9150975da2232e887fe4f15ebf2facd5a33a6e80a899069ad96025578cdffdd463df0b88051125001b70d63595d7595deec99ff29c2093aa5dcbc0f82924381ddc8e626891ae05803180a64afbbd2e50604c95d6ca42e31c9f4709b036cd5fa55fba0375e8b408a0273896ad00661b8d104f03faa7fbbc76d440d4f04cca302bbcc91a1144133e083fca1481b5362003edf44f28c9571d51d23b845db014f12a2f400d87a98f5e35fec42510920960a9f9006eecd1e9209bf3acf8936d09ba0425023242ce1e79a3a98c9337f4bb4b526f65a61903afc71a6de91a971045c72d4c55d0
+B = 1082c0641174a2a16e4997fba9398bc9b384a2f748d6623110ec42f0df582fe9f391198b4db07b7caae5ffcde200572d85a962bd3f91db6fc318279e16d4e863039d98fb3efc4088b9890639448c94230571558fa1cee119aeed99a5c1b0af1bdb4683512e40b93df0cb0ee42ef873976a6769e21984f67eba44b8403550e7a4f69a702cbbbeb23673beda4d71f4105766fb148f29770ae372deeb5eec480a6f7bd705a71028f0bfe1dd2b3131a0a3a6d79876d642eb57461c1637ad3ac82c83fef2c70ef9cf0e0e7f188faf93b239cc9af2f2916c9da3802e1a02693f940f9251386f3231174db519cdfe74ec386f1df4d2f03ae518
+GCD = 66bb753d8c7cf7582527c0578ee1dc0082301dd423651f8f6e258d37562e88cb0b7ec75aca3ea1dcc95397303fded4ffee648be4d3edc749530a4b30934bc44d45970d84685b49949f16b871546bb6c2c3653f7ba0786691b64c4e90ea7f3f5215d7003654646f622a28d794485564f813c6e68f9227f93ba43ea8
+
+A = 620604644f880d374995edccddeece0096be15aa99a6299f48a811eda41d6550d820f23aac58f576f399fdcfc2baff7c2be3a0efcedb4bce05e15a833355507be9fb6046ed475acb5ad43be7541371868ab5356ca5b250de290c21f2cc35e1b518d67f53af96221ed450e06eea7e684df31629406e29ad9263758b3ffb7edb41ba0356f0db13b7fbf2b4e0bfb08a70bdf2c133e73fbbe7026132a6aab1ff87b7bebc3ee7b5ebef294aa65928a157e971267bed0d9da98d2bb530bbc10e759fa28512a8ffcf603a09b4406ac1d28b3198d693940acd463a03726122e2e65534592c78fb80ab7e29ed74173ca970114a60a71f57ef8d1c
+B = -611ee44ba8bcb8207f3519d53c8333d60d0d526f7c5921895431dd0fcd9be0c7e11ac6d69dce8492f9c22b3b98cdf14dd4571b751412dd915e3c6ab7e18867ea88b70f6c660e63490b809d16d945203e20b09947ae189a3a75f92954f5dec36c3415403c56dde6bba648d9bbe646614b9ce6afb2c1b47265e4b260b64beeb9443df63892fef3a28a8174f3a2b15c158173a05c2a296b8dfcdef4707bca0047f330e7dfd51bd14a69680f2c95505caff1c2847e45b4c3641b0979a1f3325bac6dbc8181a63c94cc3cffa8762de46a2f4546949ea7349f8fcff15650f0f5fc7a710112808143fe70651053f11b119ef4af4780c678b376
+GCD = ef1d091fc6959b2850da342e0d3b20a0ab96b7e1d651d2d4904c01d4c706da1f271893a718bdd2d15b6e282313e1bfd3fdb4a3241ce427ff849eaa1148669ac719fba88c92245936c61205949a7d19c09642e7ab74c9e887d37e8892d172b584dfdcc280e636096190d27212585aa2741548d4a0fb5f2c1daf3962
+
+A = 14996de930ca62e6cc5c6d9fd60cb02712416170fd95bead3a84a2ea2e953ea210f41038800c1b532d9901b2cdeb5a7f4867d6b1e3b5f269d1d300ad4f637162e62da04cbb6c286ce58c9dd3a85acc43d68827510aa45f9349227e2ffbe29950cc0e9e41f0d9a46719e691f605694b8a8c93a89731bfd9264e5f95124ce740c5e6d1fc0d66b0b2c8c5ed37244fd901e35a21c18e9ea2ed052b72129a344dedae884d9154c8702138a16575bd0c84b5068fb3252fc0654179387d3a5d6e11beb1579f52ade7bb99ee29d45cac6a3b57091c3570aabe58538afc4e50f27c614f78ebf25f965ac0b2bdbceea3c8e6611fe98a52cb0ac672c
+B = d374d1db5c5a34e428141401ceadb25cfbd583e15a8f1d8c679d3fde17548aa9350010f01c4f21db0aa29c8d7754f71dc315b4af4fa8cee3a7fb2eb0b6e671dceb3f79174f71f5eb5c5dbacfd13d1cc59d95a22abaff6a83a4086e1bc526c774dae63b05d18fc7acc7ea38c36c269f75cdd01c9d4fb5fec8063d80a1c83f0ab47269e482c3821dd38576f79d5c4ea98abb52291878edb71f922c583d194a399658127908150116670db363dd6ab8d46bc1d369c498e6c88d20ab17c88cba7f1b60c4e6a746294fae41a4432490cbc2d461c2827159de96258978db6196a6f6eec25dd5ebd9fd4bc14d300ce5245bc9b43b8e44fd197d
+GCD = 15faad650de43b7b5846090c058e476891f8a54fbcbd2678d0daa7444c3f80e1e8e30d6796bcc805b64417b8ad7ee9ec7111d1cbb0be221004b2d900464b5d4e141a4724beaf99287f075d12cce0b669feaa6849918788a88a5e72ff2b63aa98c69469db513539e5bdbfae63ef26e24566e9d079546994783cea659
+
+A = 12b8c832937b80cf0dcf917736905c35e779f5a8e30ded922d7fd15c0b3c29ddfb3ac7bd462cd0773f063d0ad3ad4071242e3c38ddc0586de5c352397f235c85501c649afc9eeb559a1263dd9c53cbf70af9bda593162dd42cbbbd172202f05d02bfc5e7d36f6f3b4a7a5abf46b9f338125a95cc966ec461837c8e2884c2cd7fe25c311d84324a4f811d5f99403b92a8cd56dbe5d64f94372f224419d864b78f4fe0527bc74fcf2ef6f1fa073f49e4123e4920ec2fa8439d8b63bda06e075d3a21c0d300ff365190e428725f9c1521736652df0c2243b3103d3ac3be94c1d89b2a8d8a7c212863fc709ea0ec24f67755ddbafea7814ec
+B = 46db9110246dfdd0b797c12445fff0d56a0630dc0daf5d5fee918b5eb115b944665bda3569a9bf4a1619e5b8f29683bead704836db96b5d599429a1f615e205a7e8fc60156cdfcea88e2ff2e9e9953dbbf8c920d860da619ccffc364c6dfd75ace87bbc2c4f819f5d164336c3bf9e75223c021cc2bd10a82bcfc44e8d55fd5cc6c0c6de6b5026e6efe187f83376f9771020b0d46f68b8b9ce5ba7df42389a05239fc62f5f207bb0246a4d899fc6011c69b3381f65d776b89b4dfa4e0a821c8eac5605bc7b4b522b72d6e1500560e8ca63b1a0d5035d4333b6e9f13394e9d6b9cdfe5e0b2a300e47570e7e6bcb98ef4028c8e2c00a78d9
+GCD = 29e6181842b41588d1bc28d9f5ad68e08bda98544926c98b3a8a12ee5139401d6bcf9edaf8b0dda1f58f4da4c987b2e39bbb2a84c02af78c3c6e62debf76cc5f459e102882941f1f921dd043e6ddf6d89ab4cad742325746c4e4d3a1a6b800090e294a8659b49b78edf598035b02351af351c3dd77596073ab84d31
+
+A = 427fcbbb101796dd6c979821197254a4b595f54f08f93bac183498ebc5536ee8917cb712d2b00648c4aa79f5a05e1680e42e3d8d0bda711c8373d11151845af88b0a5cab9c363a5502b59808570b94398ce0d8ec3e15df6330a3cb3752704774e70838af0ed7e925b50b5bfff0aeb26b6635e1c01ccf42bd7938a23072c9ae41a7357df6aa8d582824fe9812fe824023a148904005b7eb5ad26a7bc6e7ce235c85cc71730ddedf3a9982476609fb206e32449c7d081af1df8b918667d327215586161409b85cf662f374da6778f5350c21c3892f67d5f7dc432d97ecd2db44e4522a051feb3f26adf19e2d781e7755c0224a38b53921d
+B = -79a88c16df3d5580c9ea20533c5457884cf17f8cc4319081b563bac995adecafeb446910da9b6d3da2563be5684a0052117e904adfe2d414dcd542fe75ceeaec5fae62df29b566094525c9214adfa3e07afffd42fc8bcbcaa8ba7773823a733a1fc3110d1d34ba4ae8da8f145f48e0b1c43ec4c45d168ad760c125b937d8bf75c7e9a6e30d781e1eb6b68047406d65c18a9c351c43f46c06e66565b27bc2c8a3321faee9444dad5ab79430e5fc8f345186a8b741b70b041d320a10ea6dea29e27b37c532123c3b8a04aa2977b08ec73590c7ea6e40bc89a0f34184c9b5414eaa60128e518aaf0b992a3d02af23d44506f90a77fec3323
+GCD = 512893917572477a865e5604d127d3e6c85d65761e2483d4b0a03cb890c745d1743645fed873890e8b3d1be655965e01cf83bcf1335c3d8b4e47e34bd514f1142416a6e44cc4f9d76d2d1e95cfe8d6cd76b01575c38e33d475b0996dd236e182d0292c60d401b88d116fbcf9bfbb467cc4e317b7639b6a659e28a55
+
+A = 16cf56a31493c21efcbd611e77f0fbceb65bdaf00220a6ba5ed99bbbc354756081a017473f2dbf8419166e8276260361fb9ac79343ccdfaf52142f27069f7566abce21c95fe06fc72c389f2d57f3f14aad0cd6e21f732428b5f46e2415345c2502c5229887285a96c1bf50c8dde04a9ff552a8542b72d16d9ca76ff6dd56b595a7a91db6c008337658d817191ed248f8fe221268ada212706b1501ade8a73626ca3b8c3db4460ffa625d6214f5490a62a9646e7693f651bf8c2c347fcb6c1975ffca9224354371095e690e32ea159ea7784a0c44953a9c3852dc18178ce48e306f2e77ed2235374cd19e62c0be21509ce2d6fd774977b0
+B = -60e7856c34622eb4aff6d8688873bf32cdf8893a831ddf7a0b411cf466f373deb8dcccd7effd3a955d2997de249d65ee9141bab3a0e17a05d69e9f8f6756820451dc0430241c133fecad26e22762c26b658c51d8c51f122bcfdd3ef83c2145bdf1c35fc588e6a06e0749c9da7a158f6cf18618c211cfca118e5d3233055ca294a9364b30ebd2a9d76fe7bcaede8c9946fb1bfc24557d1bd2720d60db0ede7f8dadba1c0d5eebe74f7d92078aa890f96bacddc11cfdd02d3a1db2d4188a1c3ecf4c20084f9da1dc95fd06b67cf1be41e0a02ca966d7c6f30f4cfcd81a391b8f94f22ba731f155762d23e5f17f14849c0730d9d82ddc8436
+GCD = ec994cabd5fd90689244aa42eb5443040077ac411d9cb3c41f0fae8eab242130bf77fac3333eec704be32b4592cd5336bb102a8defad40374783c8362ee55c7d93f38948fb0b378181a803053ed7fb96be3f7083c238b3571f90d0c7da9457e6ec84a2ce52cb05f071d6bc904c611075e75154eaec134715af149a6
+
+A = -c76821cb56fa19feec6de64c6d73da824bb9e93fe695985680ec3190d21b6cc79d29f9a6d0ffeb967d55ac43a501b0cfcbb53cc060cadc0fa5193a1a898a12b7b8a1bc3e14beabe4a8a2b9278b74e9484474c9b9652f8ac7a441610291f9f88570c40c5035fdd5191f4ae4690c47064b0e237871e22495201906e7124613b87ae3cf64c38b2955fbb38ed93355a14def279ff27fb6cd80da85e68c60da9294c863227e6e072e53a1c650efc8862221d7179e2863bc25c3941b82c90809bd47fa25e2764c2afbf03f86b8a2f6aeb197063c18db559e5715e744a1bfe7a54a66d26b613bb6f37f5f0bf5275319c4fe3e6d58bd19c793977d
+B = -1ecbd66c42be57dfa52acd2ca259595ce9d601616c429940a4a7189909b0d63d9de2f5e60eac9693340b7911ba567d6a3fc2f3f937df0d883b906df4057f6577311a8d3664262eaf9e59968b873edb4387c3c7c6b60db6dde344ab2d128b9a4da735a07d4540961a113cab9e1cfc437a206d8f2e14992df6fb79f3cbfe5b60f3088584e73772d6e3618ed6a3bc4ab5910e5fee0cd9d1b2c4b2e3b73e5707e44b4eebc8fb27b9ee136c7d9aa00604317808784ff15a0ccc6759078aaeab09454ab9a3896061687c21be71ff3671fdb17df9c9834bf5c63674e6f09ebb8663803c13bbdc80bafef7b6c2c5b3bf5055b96632ce33d720a7667
+GCD = 1fb005228170361e8b951782c67fe3acf0654ead7c6597029b1298c7d782c06a41aa2d71cfb3cac6c580d801deb7aabf90d85e497ccf72aa373678eaba3865c798fc3da6bb0e9e8ba741ebc3c980c4cb1335cc1d83b5dd33b0eb4a91ca3aec6f33681569b7c12149fcdb3b16e8c8017c2cb8c711a1d96d76faf4deb3
+
+A = 437a2c2fa137da861036c4d9c50d5fe39be5dc00a6f8cc0e4a0b6707c9c830b6ff19b6fb614caf965b84619185ad423194d4c046637906a2903b8d81f8a8e85bc3d8e98638b4ac9f670acedb49d2a8c412303e91dd853d17ed570df7e4de88a929389d92790d6911b042867ded73273040a4d0fa78dd83baa8b34eb24983e948494432695924761df44df8fd26c05144718b90560927233f118414cd56930d598b9b242a4328df63156e07194a703908d6743f0d0fd37e5f35a0dc01cb3f7593bf62afbf0e59735f09f57ab3023ded4c7a76cc6af51956efad253dd7b41a96613955fe02840e48b8fb8b17d0f35af633d6c170f4f9b6eef
+B = -51ce55b7c836028118d2c8af455c7708f8a87a5e8c5a5816da246120efb0b890205e128c98151c02910379ce36bbbc71f49a7804b1e588b3a50654ba85751949057fdef186b1c9091dae02efc6ead2cfa758232404f0daf496a1e9c454ae3f99db3fdccd067a12a654bfcf66005509310efa7f7eede9222218a7c2ce884d2e6d268e02cb466b3b1d8cde94da8e844869fdf8188e37dc5ff633ec45421b424faefaccb85b5f766b6eff516711e1f2824c257651bdf5c3faebc25daa1dfbb6030d1b8b6253959630f9bc5c83d2bfae6efcbf386c008e1f63b137b3651a0a954835980ad572a91b96472d20a6f554a67965e62ea2427d26891
+GCD = 3301281f6cd418783dd371f68c4e896dbb8ac070b44bea3a37297d613a2541c3aa72b80d23ca0dc747f65679014874b66bca6fbd8ade940b744442db95aff5b714a1f8b9b3202c16b43532dde77397b4aeff6229fa5664abc42fd5b96386f41adf41000a3b261bb62139b4d603257d1141bab7e43d55d57929ae2bbd
+
+A = -e2f3b6f0f996be8c48baccf202068b8b351ca086da7b77339401a937c58ef7f2397d4a5dbaa3246ffbb6a39caf8af14801a2b2096fbcdcc9ce7e7cbfbac5b72086c7c8474398d32c1e26fef5cb30d5085be03cdc0936e99fc8d65c992bb29d9a3b40363610d6aa37c1a6d9cf527de33333fffe9ec4377b54f451477837de6f832c3a2f9f714dacaf7ffb753f2056af4ac45f4f393a8efbff6a051e37d7b5b8c96e5c29dcf707f91a600279b577458e77eae16974c08f605cdeae415f33e4ec04dbf73c806f38d371513a0919cd86e3ab55fbd000a266ff556177d4a8682bc7b9ba0d8be4b56e0074c4c4d984d53105a3a23e216c4a625b1
+B = -56af57e0b2c7c713508f859342dbbf56c25696c492a9fafea04f6e89f26cce17f139861c5c0179fed39531647eb9feaf2040d4745226f387d2bdd913b7e6246417f7893618bc52daf2ffa9cbad83a4756501a0af3c3ff287013ed540733be09f4e2b401d610a913f5539dfd5a291d04bba1e83e5e4ce4d2cbb5e358f5e0312a58ec5da4f43431aa26e77d572daf5ebad6b619a7e468511d57782eed5e4c4880cbb29476c679db0d5f2a2c4eed35b0408c6b78eb1a337a603ace7d16cf0c30a6862526b47bf44ec45277bac7baf1bd85c642c08a851c2c15a271e3e14c78b2a97ee0b431494701dbb31cba8804dd198382e0d26d55d00910
+GCD = 2e61134555a6cfac5c288ad9a47377b50937eaee240aeb9de35422c3188d65f90667bf056fcf742d3c92e2b7c9fdc71b0de465712bba3229d8419d559da2a1a7835ac27d25f4d61f16c1902f2b1de60de63d08afdea9ed959503079e994a04a65a85b66b51f085d9cc4839f1232748d6881823da710e1e1ae8cca0009
+
+A = 3b7c2d16177b27e39430efd11ee929fc2710c967fe5dfd5a6f7f8176734fcc6209ed64d551b2c31be45b16540d11d2bf56b75d0151da5ec2e1299c9cb64558cdf62e158cddc57a53de6a5afe95e528bfc129d16b426a20d48dfbd3c8c2d0e5c6469b0de58f6b9cf56f1c6016a7a4f8f0f6c086ad2d0491ac49bb93d24f64de4fd9a024fa2ff09b9a22b9c18723e118c1db1076e270a8d38be2469a580e8d92781e51ddc40c8f420a64a169b6951f38000be1344d5decf59a0033bf55b85ef695d77aedfec9cd6abfb3f7872b73dd5bf98e817677ee610a673ce0b3936b331bef4854fb801e4fa702d929f9033a0869901abb80200bdb01d0
+B = 476e3ab9dc271c9f5ac231e6f652417cc0d188fb1e6fefee3ec18d13d86bf880be0c6ad97b01d595da187bb412f320e07b7ab385558128936c014c8f9825b0d6157a340f2bb02039fb09cdb348af58adb9b117d9c2cdc36bd409e514bd1a36b2f98765883b85decfd123c86bdbf1360f76cd8dd78d15c9bf026b3f85b19f5ab6e641216f42ccdac2043c15c299ae28f338581b3d13310b5542f3776ed581292568a90dd3760b29aa03fbc90026c8129b5370922347442a9d4558651856d3af6737986cc18c04c6ef70c75826c20f6319ee6e8d24ee14177cc92046525e2659221d3c8eda16a02c1c5a83cdeb57e57b0485328a06128a3dc
+GCD = 86da1a48125bd9b5ff7384207ee9a3be82373e991581e003cebe55f2f3373cc880e17b3c0976ba7e8f6e52df44e712bbcb28a4c5a70950c799acf61b9f1267e13227813a64064f9dc7ade122fead8232019c1f2c4c7cc8858db581353b8a8541cc193679c622b7e73e63caec0b6ea5c4e0b8d25fa5550fe585565204
+
+A = -5c233d0847d3f2c90b25ba955d6bc532374a49294198bb81928fe20fcec48d09998a0cf303e7654005bf827671fbba7a870e722c3a3cb7f6500071d4312030249930536654901bda17d57e87d0e66633bdd7e81b52d57c00c1e716ba7e797b80d42ca68af1a70690259d27e97bad149dc1351abe8950693d53fab7b5e249a832e2fbed627f39bfe30397c964ea6514d0553aa015b996a9c8f61e2d72157e6ee6d41e321a226aabf16ff4cf18b82e844525fc93d6258fd33add533c20890ee81a0de4969dd87497272f78b56bceb7679186e777bbcbcf66864e6672cd43e7f29bde658f134ed8a33540f824b1656231a6634a011cf321e38d
+B = 106687a163800fbf94973fadd9dc06a81616f086a26adeea327a31e6b6afcf9a7225d7f2b9a90d839498681bfc857914c972bb1cfba240f7f09bc756174dcdce83abb32862624162a7d28c0b5a0eea6185ee8cf36f72115ec97f503da98aa493c7741cd96ed023b03ea765dade214a2e4614c56afef4513c6e0f2d29895e1bf79c34a99ef7a3aaf5f298b55fd4a194289d92541ede8803576847a9fa42cd183e33589e02bc9b6840efc7825b876cc39017e582af93ee5017bc1e8699141bc4fbfbedbf45b015d58825aba17a8205efc4e21e9987bc0844018ff82e4e17a83bac3e4685dc1e6dcd8eb220a70149ca7a6b6a94c81861726ab3d
+GCD = eec8d0379c1d4dc604252b182b510650e291b7ea7d54cb9af8156284792b9a6cdb9761769935b50d525c162c1440d0fdc34d78cb6d08c069f17eaac3f03d86071cfb61b297acbecb2265f2f24394f51dc50fb8db083b129ce6e61498197745e12e4f23f2b11b22e3880183e3a511e9d5ee3e4767f0aa6e193e4cf23d5
+
+A = 24b297b90586ce1632c35c0bd59f54bfe141f1490922732946cdb0c4d6dfadcdfdf04e59dac3382793eb43ae8870d16871778b7de20a6b15e491665d9b82d96418b124af95b3cb3b56c96d9723e247f46aebf779cdf968e9f070af14d67c8e8b407d1b32e70dce00f60cbb4e2090cc1c7253f1dc25376575d83d0d491d3a057a5d85914481ac1125542863c557732624839961c8bc8c7fc9009399023a91daad0432af4ac11a6e6c6f401d464422af00d41818393d9fdfbc963e000bb7a18ea285b93e14c74d5438bd364d5491fe340d58b39b1ccc22491439c049cd7553406f055c8e5a7a9026a60287b3a60b6b6acab9a6f50671d6f3153
+B = -2bf37113fb3ccae3ab5b8be2493520bc293c1971ceecabeb9e2ff0dcc7c7d4ce773729cfcf55b29410cd1fb73e8a3394dc6f5c1d34c54f3c9a33014e0295b669dbca794914b556fc91ee57f92c8e0c13ab69ee4b763c55f2fbfaa434075a6c9e7d8137dd4ce7c85ddd016e0cc6e6eaaa1ba381adb1deb77343fde7a43d0c86eb6f6dad0cd5b891dca5464c75528563a6db9e32415d5c9c667941cb3faf8c72c42c3a45d81a469b66b0b855d4407734e7f0b4fb1a00299e6c874f1fc4b42677c703fd7ac5541e5cf82efc3d2d71e890a20cc361470a23dd1179676a34642bc0fa4fc181171c704c31464f76802fcd009e34a3b2e22e907b98e
+GCD = 366296f2cbf8640863130c575f97d7dfe071aa717e2255c3472720eb1e24ec3771e5f91e5c9042abd43e1c885b520767e8ea931892b42a24623a93ecac3daff055c12b3edbc70126110919ab3a89e1962080a1deb242c4bb37f981e14bb0b45dc3b4476021fa6632621f095391dd9e62a86bca19f7b3f64f8fbc2aa4b
+
+A = d8e8e8200b8e634171208e8562d1a5e1fd7a3bcce95cf4ef276671dab8ddc3a1d620fc5bd2b6f62a4847d7b003fe5bbc9dc206c932ee7d156798e66c18418cd28020e9fc6887d22d1dc4003eed7b281045e083fab336bf85c79db030b8c0146a03832860f49abdf1b56ca4f2a4aced560feb7a582d1950aecdae54e4d3842404a10b90887b46396fe4976d0354c18060c1de5e93c7e8eb112828af35b844a5fb17410852b6071930633caa96c8f5a9c3c0e5f24964d43067b3652fb7fbd49c74fcde261334f3f18741cbb265842d21b5532d79bb2e21b954575a7609bb70fe3cfec2da53c7532cc7691d0876226cd4e2c3c33c3ab67f1ea00
+B = -174f98ea12d342c28988e3b6cd60555172f1b19b402ceb2f2b3fc03f8c0d310df5543dd4f7ca3fc19a4cab9de9f37d79a01cc88b09e0fd3587947397c53c1c92062323ac5d56b27da4a979f56786bd0954e0b79728b2b0c2c3458311efe8ecf54f4d354fb295a83994106a4f5343a2626681685fef69d8f3d81b06072a76dea2ec650342b67a6bf17e73fda8ed233662ce298f257e01116d94a37edc0d66b26869478888195c379fcdab50ef63f2d372e5fff7c36ea41eb95fbd8956b4a4a7c60e254ce2b1f86bbcd7e9cca7c894c5fe1d6a032b94f4cd2f8fe6b82e1b98971c741da9115a9374be711a91b47257f0a79f6405ec1e62911b80
+GCD = 6e023075243f3f8174f9884b05b0067f90c38ed87e45fc1d69f1a68b33c83ff47ec9af956121c2579332037721570c5e7d5e59261b9fcf9ef22b63965662614e0b47bca6a242b94030f291e53c8b7210b5202fa126dabf5fd14529e53600ade873057c82ceffd2d09e0081bcf56cac97070267c787e4b2fb55100fd80
+
+A = -43fb1e1cdb240d8791a0287039ee80d6d5353315e87312539aeedc08b1620f76fe55202de1f762dc3319ebf440e3aa4a9edef8913866b048622a428bbad1752468dba59d167a5ed4a483e4b373e32d137c1901afd969b1ca0101827e7e51571fc1297f35a2419c75e33bed6d82581f9b62dc01bf5e6fbfa3efd14b6d5579c015bfe5ad71adea276bab05c33775ef3fb6fb555c3acaaefef1be3d0221e4e2c8c43a170dba23cf2ba50c91df5d41a69fd8d94c6f2160311208885d07259e90c81c1cb1d0ee95dc5489ca3fa8c9d621f2ad3b5e9022fca04d97772e413aa036aef9f852fb9b43d9c06f8c77c0b9c4dab12663949489e8f89f5f30
+B = -395b2b91b73aa230bbdad373b25448d1b2e931c8ebe6429a16e3230c5fb24400f71c6840309a7b950b493b1fb745dcf85365cdd65131ad0d382ca8c0a9a764cf6f91cada266a1a39626e2eb6f83cbfa5013e1ac7ee3c4450428317085f8d7df15d9c6f1a5744cd6a9913d00e035bf23644f6956933c32bdfb8ba63f467f4b37aa0223b6faceaedf9c17daa7ef1941f604c261c1018d5e832f3f88c983525421d1c8d268ec826660c7a4813faa434d9b0c12f7114a4e4ea97f8761365b528940a932523cad2e9b9c3131f5e1772af9667b1a27a8f31ea034150f2f90307d221e270b46bd474e6b107e2f16ae856bf5e60465d8e0b42020d9888
+GCD = 153ad2a1f0e751b235d0af57a8fb1f90b11cb628f83812641a8faac3b06040c6118fd75760b26b94ae163112a455d042df4bab66b3430ba2b42378a86148bee151a9b74e539d8859eb8d06cc89ca6a9a1d810662bcb272081741cc38464f97cd8e18349ca64362f7e47d08b6aeb8f9902681259adb6c56fbdd3fa36618
+
+A = -1a38c2c3dc10e0ce1170fb14f102f9757015b1a08c68b182045c6b733cb6f54f48de89f703777320e666cc8ce955e4bfe6bde96abb7a144496cdd3faefcc41f06e599fcdd0a487709f057c9ab1761d0243bf938b9d26b1caa7c057ae0e61d4bd819ce3d87322d1fed97070c0d6d83f5c64352095959c5a534662c7cd103f1f05fd5474e5cb3efeb664fdfab8ef75a04cd8a5c615abd58eed63945db507fc2d066dd00b8823e4a4ef51747bc3ca88dd82c8d5841515ebe9505d78ed2d06f41db3c36a0532ecbb1a022e398aae2136890e031aadcb22d8740b2916bd1067e4b3e72a30942478912c39533090bac35ed3942d44590f382933df1b8
+B = -cd6128da5517dcada7eaeb3acd1a0cdc0b3a5c9092ce1666700308cdbea645a9c6510fbf9b151289ff6858c3edb08d935dddda192db4d0d59a4215dd6012e48b9ce65e6e122e0a88e52d2faa74eb0a3bb602772261f8a34e611f439202d0cd53f2aad75d881cab93abbcfd6d74d7fcf02162eea1ec2cdb8bac3488190493366b5ea1998b1feb91335b9bba8fda20d9e01d8223809074847b9ed8fafe9183f0632f2658e6ad2ce6e5349095df6a7f64d802c1eca18622473aa04143836887156a072a32490e8f1ae088e9e473726c57690be60c1b2be1453d954bcc35d7c08ca96217d64494f6226d8496a6a17d5748843f3c98c59d529c8000
+GCD = 1ebf297c8711087fd27e2cdfdf8a3e1558fad2723eb59edde0b93839e6cbd509dfb5710334977e89582802b2eacc6d7a90f250819cd239086a75f309026df80d42e7b83df99f6208cc90e9776847a72cb9f000abe93148e003d0751bf2f2e4ece6d0afd5de554ee526fadcd1240de2e11ea95ef62ec640eb648a4620e8
+
+A = 3a60c12381b876a884530caaf9008852d95714bebe29cc529c87c1cf7c02c1b033629fdc878b8100dc30424accc68bb03ea76dc61aef5b64633e2ada58eeb6b59d9cae96836995efbd73204ecd37a5b78ed580cf947124051367ff69c41d680b463bf60acb0576c3160f7d9c4c4bb7df99cb111f0cd7ee9fa29653870ab98f00ef67aadb0cfbc9641a294da31a574cf60f36501da3a5b9a047f6cfca111c9074781d3baea46871a859425e90c99bf3c55294ad3af646d1608463ce4442b8ba0b298c89fd17538082e2e94b25365592c924c094d3d3347575015259e7e1ae86e5a98e0bbc0e3b8a0cafc640693ba9cda727d79b5cc75397f1290
+B = -2c1812bb196d3c11e74b2d41d3be69a4fd90f4b2ae94c10d20ea45347a34c1ebf32d916d06d658c2594fc56e0458eae8c8d245ceb58437f1b9ec1a079b012f71833436c79b085f685414b71559bc4f23d225c8a7229c7fbdb0521823778ebc48fb7b8107a3f0117bfcaebe102d0be73985f678946c362469c3ade21cf9e6f2c7954d2eb029b3905cad470fd4c18006f79c7398096a375ddd50ff1270c1d39d86a0745b702904a8d5a059d290e0b47c8a3fcce23d9f7cb456713325433e4cad5e676e509f4fa576b1996e30406e78bfcbf3a21a2ed8ed0c0a5ec93ffb5b797ad734a02bffd15faf348df263e009f1fb7be15acd24f81ddd16a10
+GCD = 2383ea40aee3b5a84c5f299f7de0982ce4bb6e78116ea27572dbecdd261e7bff6d8fe49ab783c4777e359701bdd7f855db7e386c18f76f521ec0ac2e4052230877c7dba2b40013f7cfe0678702bf604a4f19e70327d4192a9da27e61fff9f8bd5e7bb8f3bf848d3e3656d17c681811da5520828c6d55dd33d9bbbee2270
+
+A = -810c4f3a0d42985382437794719b3775eb46507ce1cf463699eda8cc39052e8c37fafc770b5678b6007654169886bf28b9ed4ce1d6084d57dad947bb04ac5e693c9c6d7daf30e919a32d089c6a9e1fef351971335326e1c70bdd1fc90c639d54da784915f8294607eea06f452a6e0119fa427e5838abcf3f02bf13401e4c0b50305a1bd3212f22f43a9ecfe5cebe4aa59175b21c4f3cd210449a5a193f880a55cde9aa982d529c7af6f75bc5adbc6006357adacff724a723f3c061c19826ad0cf78dd80495c6ae41f89483aca3c00dbfa3675e5a20a8f42446f831dde044b01de4bf87e4aff9953a6cabcc2b6d07917b82505f6a1d8f45c1e6
+B = f7925292bd9423ff9bd3fc5269c44468fe187750289844265ea6673f29560cb35e45b0387d81860941e65045888690770f47b031b382f440612a63d9e2000a852265a15adf5f740ce5f04874acc4e6d535c0b40b33d4d85906e0bf6b01d40dbcc2a5f9e39c65d224fbfc2918ff51085c1a596bc96451e0719ce0f9254ad835c92cc154e6479866664ac30c5f19a15bd918eea00962529ffae65e8aae7c3ca4c59b1412b3a0cc0d4aac5b0a0dca91edf122f9a8d998a6257494d76e0e1dc25670cc1e054957928b20c9448c7c2c8526039c340443e4d9ec6109ce90c590ca4e3db91acff3d02fed119ebce973aa19ca28b65984c96da84b0a8c0
+GCD = 6bed8ee5bfed88c05db1395562042900eeec9df91c1a1c31a3ae436d89c8df84650d46f741671d37c30bfd9e39c12fe59f4f7daa68d962dbc2ebff361b88d52a300f14f460855e6c3abbf6e0dfa3f0773fdfe3ffa0f7f8a372aaab4d7598ab5cc8e75f783b6cb7ed5bcab37f9ad52787da39a9f20fef0f8d4b0317e31a
+
+A = cb3ba6d6b562d85c2ca514bb46d7f2885cae440929c5fe7c9bd93918a456d6ab00b0cfd9de95ac396c307e11a94e43945273bc6477d7f40cdb0669a4021e4457a382528f94184dc88f8d88220ab74befc0055062cd529333af187c4650958f88e159bd5ad0b22fefead6dd13a31bcc047cbb058e9d7935cc02c3bbfe3a9b40767abfd75966c5a2c0b4cb20947b67ff2932265f99311ce121ea1066f2e24bb9368b9d95419ca62d2d4678d05816455283b2d3cf00456039767c8003d0d88a49803fd6fdab65b613c758c3b46670c9f25a15fff3e53404b07fd67b8ab6b4beec2840e1ca6fff0920cb251ebce05912b70dc9682b58d846371b72d
+B = f7274714312e12983bdcaecf7b89534a3e84431c6d7412603e7e52e60d8b5ea29620c4257313ea8c730fccd8941659835f60f8e83300c5d79f5b31e6dd8dae76c03f684ebfd3ee982beb54456cac8e5b6d57334fc09888b6eab248f510c582a11dc75e1bc1fb1751563d7ccf67eadaf7e389ad3c84fdd5e112595bdc54fdff22d873e6a1c84d5daaaa7256f355ea9421a064b043877db429ec8b9cc927bfa0ff8961b06d13707117a0207affaa0a7cea93167aa0fc3e1402ea06a133767443f845bb7424ccbb01fea1bfd4576675f1bdc7693993e759ca4848a826ee3a5b97ad8d85e9e23fb4aefb02ddc82942d9ece28051656dadc8ab4f73
+GCD = 9647d4e8e2ed5e97b35eff12b62aea2cd969525059351419ee6a1c50f6f757124e25aa83893d7d52edc4fe93d31bf217f50018209399e1b483170df20f4cbdcebab2c1ef375955176eab1dfad10e578cb3539a22c23e30806d1bb0b7d296d6932946b7f319268d7ace05c3c10b2ae7bd7f64f8b5760f6177ddc7bb6a27
+
+A = -f7e7052386dbb5c4f7e1b4ce05303f76b4ae7eff683a875a64ef7991f533f7a22313b06a1c0a6a719db8fc8605182e8b327910662175c34273efee4f765b3088e4f3abbda45f72ef3557a88562a873ccef2df5f822376ed050d323015835e230340667e24652c7988e890481476b83bb102487a60717d67125ce36ec703e1029761db10d0ed7fbfa2ca4deb98c3a6bcccdbba32786f4048cec1501c954dfd67696db790123e72fd7296790c59e4cb1e9c10f4eca026d216172c535c60293c6dcd8a2db98a6d832e004dde753ad10a84b5bd5b21b722aaa83f75173d5621388e7eb4e1bfa5a313ab172fe2a2d152bcc9846f3753eec88931cffa1
+B = -850ce1823dbc588918fe52145302f42396d98dfce857d0c8b7d0293cd634a22d2c42899d89f7ea98c50154d3d035c7b31a07e9412a5a6be238312738161451bd312c3dc70ed866afe1bc302348303f4427717486e82dc9cd2707ece4c7829d542fb804a9d45a90310d5964f29920031c7fa6c780d3bce2d6a78d7688f61a9c60de28101fe12b7cb728c63bc095dbdb95df0993a2aeee15a0210a540d3e38242937b31aa736886b31a7a8fbedcb6b026cf31e09e979785b57f199e0974fa97682cbc05d0eff648cdab4799ea4e81cfcdb1d46ffe346252af5f2c2b670127e17bbe0ef0060a00feff840560066df531f8dacd8163e4bf882294c70
+GCD = 14563bbc87f212e3a7255841512c03a9377f720083a8f0b6eea89e23cfb25092272c89db386eb0069f8a34e14abb5c690b0396e57580fb2e15f74b02427d368e1d199c639284a1083dc96a0fcd904aeca705ab939a14c8faf58fec37e4b0f93656d8e10d4417af9c7706e9b7dc0d4f0a945fc4d481f1a64d80b87d1455f
+
+A = -5b41cfb43547a86715f9dd09d281fe10ac08a2695843d073c23375ffdee9402de37067507346861d0fd8b589be1205e27ffef3e7fb9119be3016889eb0158d808990c410a740643f25ca66cbd2a513d1beadaa69336b2a54382cd7c79c253082c03953644e3c3c1517f62e63227057bfa9653c908df32118e018aebf7cfe55ecaba8b312aeb9a6dd7fa02db1972b616f837b53abc2afa7ef7658eebb2d36b3c32425f079078c7545e784c4498c4fc4643af4792c0be12ee01d8da36d287bf5ba0b4e79906b2cd13e2e9f576e7ba6f51d195c308c148fa01774b863dd96b40b91ae2d6b9f11d89269a6b3c9e3116da567d842e1efe3f785638db78
+B = 2b763a718d77ea5e538bb0beed96c1920e7330afb617c51b90364cba5dcff6abb197725f9ddfcc6af89808c183fb4a84968f2b9ce89662441da9491b4da4c4a268c26667b0e548090b035349691b6370831a07d69bdaf370b072494f21d705639419ee02ea0a288594d0320681531ee87dd92d21037610a437124cd5e852d1c32b1e51257bded9ccb7b4247497297fb1dbc6e488d3d618c781fe14985a41388be05b771862d2fdfb966fdc200a4ca8f94f37230c5ddfcf3259584ed284f4be8923b483a74560e2fe1e13b7b30036ba0e64e496851c1e2a0944e4df7f0d730dfb4cc08c04a64d091921b1c6c95be3d5674b98748c16f1ba73d0da0
+GCD = ce2c5be9890f6ee73999e1adcc248cddc5fd7ed739cad873714c99c698339300dbd7ee7f7bf40af301fb8d0f29d151a4e27cfff1321f625b5db81f798c5c423d3a3940dafd9fd76903882734292dc74c153a508738a0c5b50361f75a1846182902b8e5ce0766e0ee8ef58db0cee43cb6c5dc2b41588c7e928223b7fa5b48
+
+A = 4c333fda7185d0395bb4604cb89b0d369d0ccd87fdcebf98dcd4264089a5b7993434f830be604146286e529e8130986c72c9271966b911eeee5da67a6d579343f49fd9cfd45f2b405fb4f8b4a7828b4b1451ca3f0d0110634d3cbebce17452a622e2de5a40e94c0b199dcba1f1d8bf7a32f2fab56d44d8fdd17c30b15b38d51f57b869e47562a0e35c090ec4cefebadbd3831aa63871cb4b9460c2683c8d518a5d093b84ed19059c0073fbb19aa7f0d60dfd0ad853e9f05f147069ea351400012f217ead887523c5f5fabaae264d2c1ab5b9d3a5baefceab630bd6c116d5a00f63d5649cbdefabc6d6e2add3eaf3c492d9a1e1d1fed782e81ed1e
+B = -657d9476c32154321858a20c321f90c1f359d63d1cc3add45f348186f9a041efea0be39b92e56297f377a1b7f817092fe4f5bd418234bcf4493b9362154f9a1c3eabee938d441709ab66b01863edcc451c2b0b837bd8790157d602d86b3616385be19632247195a0bd7a786ee5937fd93891369463cfb9dc8f7f5b5470fbf43188bbf90d25a39f4b459cc3e5681ecc9e80bfdea05b79529231fd35dcb3555e2afa5b973fa713452f26a3bd49c49e625c35214f26d6669b48b97d64ed905b5af6c59f509c9f74baa2f1180cc1c0563bfa9e9703ca7833b1b0c27171c34e3e69019447dfb2cc84eb905d5ba0540d8f01fcd337b92a1c7ff686b949a
+GCD = 487e5e7f8eff78fe755316697b182e1771aafb7357b90d98772fff9db1944128afe9d261cbccc716d634efb9239f7990ecc14d165197c6aa56f1e20728b05886b4cab923815c39a9c8e7abfabfc5061ecebe29fc7956c7c2a0bd1120c13cb416d58f0764f9647ebfcc908f9c6d3bdc18de837a3a1e594398c26031dcb26
+
+A = -29e8fe95cb58e50a3138565125f0350558a33e41824f9678eebfda4418e67adf0f04af34ae8d0aeee48d24c1d7d1e0857cc57f86e9c9765ec9664374876ce23635a0678335a448e586e8d2ed2ff5fb7ab3e4e199637b0dd17cf276e0dde4cc50110c55249c71618164709436340de9b3f36c86fd2fc8f05b906bdf45c48d12617aa620d89af7141e6b7abc7e73a0f339d829290acc3797991f65ae97de55faa1040950732778e8f7ec1bd11c22d13dfca305378c82976690244f3ab65a4b0a139e7d6539044534cdad042546e8cbd4c27f3666a188079adc867b2c3e13d2e03ae5bb2bb67f737e1ecd3e2dd02c2bb1d43518495038aa46fe85efff
+B = 36503c45de4fd1b1174dee35b245ff8c51bbfe36315688119e1a952cd301d986060c30114870d238ffc6b81e037724086bb2a356f956507f5f334ae8532146969405af2e3fef139862df472a51b333b496d35800cd1258c0687eccfda1d7d1c6267cda4d999a7433b798c4c8aeee409b79ef507ed4871ec6a1b5356b11d9aae2c702b6df3d7151ee6ac29a7b381adccdfc441c060f82ab51bf27f8fc89a17b4d4a08e54312638bca6fcb8067b0d66c4e1656afb56f87c2fcf73ea7bb59a6748753ccd4157749a962bab9847b6d616a188625ec539089f13322ca87f3f06faab680197d955a46ad5b8302dcaa53f69568ad3c4d6f0dec476bbc63f2
+GCD = e47827dce4ce75d7de3eaf561e2b7fa265fc494f375a1b56ff3ea2dfbf4738f5b0c219fea1a411e15530240de3508767741ea34e9ed738078ea6b0e5d87d607c20be517c65c1cbf2d47cf6a170c54cc235b2ce79baf21c6befb5e40b8b09ad0d312dfd90e0d2d4d508b75044a47f04537a6d4e00211be9d6b6f1a80db13
+
+A = 364fe56a3f151a386ac3fce6c73c036a2e376a4f1a6c5544ca68d6bfb59250ec4a99557f41c50d6b0b100abc2ab464ab946877e74a0b39ed3869530bb68252e986e8302744ba5be333e4b75189636708683bed665a235b960d7670a75c9977be943cbc4d5d8a4f7ce7ba061bf32636f1d68e00e75e7dc97b68034516dfc7a36dbfbd9106012eea8646ca4d1edd6cfec26f69504116b2fbfa30ce1cd920773076a441b2c80e9aab2c664d727e381c02cc36faeb26cebd7fb7b0c459abafc6d82178dee21cba3504f52892d5bed65096fcf7d384d734c2f2a98ab327916c6c6de820f6dd30ad14bb2fc36f5f3d1390bb0e7a58e96c135e9669d238fd
+B = 14258be7d92a407191bfa3404a64eaf33eec47328c1ece51c035684c4309307892e7b56d687ccf3a6cb3595615df87708628b9865294725c80fad99481b92dec8929bce51f69b74edf2377dab4f82b4e8a5fc668e2918f6255f1a3b9f7f61641185496e2aeac0f238da8886a3e575caa4f9f773fddecd8d8be4703b59834cd6ad249fbe6677e7e5e729963f725db5ccee116722c7df5da84db569d791d9910ed7f1737411dbb4731da03fc330ddbd860cc94c56166c88cf097c11be40f63e335cd3f9d6aa2640f9e5e2dcfd2463b180aaf4506e170e8cd17f6c02eb47e95d62c2524569a495d1bcdb0edcc03700b78bb3a9c44363d0a5549b8e6971
+GCD = 178532762bf4fca54ad2759f52f4e90ccff079691eae2b62c7c0c12b4e7433109524e644f0bfebe49be19750882ecab0d14738ca03b1dad124fb0f544cc970f5073e9d37c32a1edc271325158049c49641d49d5e4dfb6273ab9289ed3003d355ad8a46a910e5bb66eef4815f80b75ea232a3205516bbed5e991a64f66747
+
+A = -54591853cb9d22aa52f313bb4a590b21fff4738590be6607498520c9efbed68e505913796774f9a04c6cc623353d66318efbf15e61184574b7b3fad7a4a7ced585f031d1883e676d3210f4dd0dd41af8b14db7db4f575176aa0aabbbc019be7965b9fd2d5f9a30b9071a8062010073e157089eb6a930e8928420f404b103a6b4e617fb34b208a7274fa1c3b7e9bb0a1c72485b4f98473fa227691e94bdd328ad27165af6cd554060d8694692a17fded10a5969ac340531536dd6ed1acb0589693d7e941b5695267376018c761bb557c06dea2b47297c62e455532d8f3a12889dd19329893e3905407b5cb72d69552735b12b6a974546ebeb8980490
+B = 67462b36bc44fc36701623e79c3195c421bdc0cc729f304de09853bf298ce395eaef1f939199371fd1978bff49cf6fdbd6c6032a57c1aede2a1617c69e21bafff4b27335012ce03e6900d87641c76f8d65c489a2b7e384ef35ae6a79b5769b67be6289116f4b63d3e9bbec74d5a109de9ad1a3268fa176ddc8adef0b7ff54b1ba2054860c48716daa93f9bc1599cbece223f59cdc3adacbc4f3f706cbd54d9ca51d56a0ac78a723c781c75749b923de9a30f4436d1422cc7e9aba819d153df53a051cb22cb80352062520c88a75873294a736cee191a0789a362af0e0008d72a36f3a6340203e71be92a73904ce127ad9c90df3d94ebdc80d77950
+GCD = abdbcecd245602a478419515209b4634d4b61214afc09864dec017a2d3d3489337f49e352c613d567d49d2a3814fb1c9b63107525f73076cee0d59da82b4e92b88cb8d39a3b654f4b4f721572d5ebee134d77649953c0206cf3a123ed25b2a8fd002cd52edb314f4d3004daa4eed579ee7988fc43aa85a0785dbd84cf450
+
+A = -5ca3d3caa9c2bb4c11a489a97dea16ac08744eca0d3bfe6f98fda58a2c85622bbaf6e525e79de8ce28edff3e2b48c7df185e883bb74fbf08a2b81908678098725265db7991a5f109a5f09d8d3065fd1d7fcac927dcd0a8b4cae4afe94fb441a1e060b5cc12808bd50b333bba611ea780911570817c62a87c28f7ea8744818f6eee020ccedfab2c806e186a05f76e78522adbce9597aced45cfc05262ba34b340aa1fb165451f785804d2830c04f106b6ca05f8c30724166c936bd25fa1ecb5dd8c9910bac776cf1a0c7bcdc96678bad35442630bb55841669bd48405d77e49f88e19c4fee4d22df2c2ebad1859f9ddbb252dd88a5ecbb3eb917959a
+B = -11c01a8e72897ce99f746b170a38d05f252cd4071f6f0276ab83a1c3e74945740a3d2e4cbde6e25cce8830147f3f09a776a5ddbcfc0889792f7285b940fc0f0a62ce8fbebb6881bca8d02e7a1aac2b911e25809af39b10f7ef3c3af61ca6ca0f3cd76a7ea4b78ed29cf907eff9c2ea57067b7db92ff23dcc7e5e3b1ffea31d3c54590c547da6d59e0370231bbf0537715aa0786ce71bdcd3739433f835c5726778a6f02dbd75e714fc625415b82db00921d81dd2df7a043949fff3550f7c9163539cc96dc1fdf45c033e8a505238b64658bccdc722fb3d6c782d4b65244a8f70ed18dea697ff0c42f6b46c0e241f3d5bd139ae972065c5be2f7ca62
+GCD = 9caba9b74673029828beadedffbc86d58827d9f8a9bd6060d54232e837787aba5c5728089cc06a111b0e987299532f0e664a8491198881f276510f7077b8638029250c78162328909c69441feba6ee2a58886773f77485936d05027b2f0fac2531d3ef2c0323ff11771848eaf424258f1acbe71a0fb0be386c986df2d67e
+
+A = 3c85eca05e9bbf46f0e89952d56e6927e1c8bd815822864127bcecc9c565fc37e82548962573db82af0c8499fc54b0a6cafc902a181877c394493c354d7daf9fff8e653009018c347c30cd5b066e14911a162a1c79a06b3d1ca2bbb648aa6586f96c64d70878aac3b3779cf820d2123a944dc3d40f5e20aefdc13c624bedebcb35c09eddd2cc8f19d7cc55e892574be668701f86088bf46f0ab7bd33737e0a987f21bf639b8a8755fc253d518f1511b99901a2654c658556b94d8e6178e82a217df45435dffdb3bfcc0be3eaa6c269f46e3a0b5129bfe2e3d7034dbcfbfbb740aa2386d912f87b9ded687b1e70b8e54703feacea8bb626a61a991d4d
+B = -1add0b26e9b687958af83ddf86511e17c29457b772a5e345f8bf8dadabe916285640bed4c4e5f9f336789918423beb9737f7413630c6840c6b8dde720394fd542a2539522f59e19dd60dda517b6a0cde042153fd9b9b36ed517ade3f24434ffec7bd675f244e0eb10619d8e31ed25aa4fd55146622f2ad648e1ad8b11b270fbfb8b1db0c6cd00c631a6572521c803e6033c24221418474d1b35a6ae72b4a47e069515d21a77e32e1e988c2e842324772a4108a8500f4ecd5ad34637778d40e2b0cf4c0e5d91a997cc484589f609f20d5abaaec93debff5b2d9654c7810d9bb531028391eebeba74e2fc52fed7d3d18f4a15b71d3b1b68f7ee9bebdb
+GCD = b9d5c1d9f2c94760472596696b42bf1aa80a23eb1db9bf9a91bb7193709751c6d3c1a98b463ad81da903de4f788dc20cf70e8d6587be878c2c32b0d4af741fccc896fc0bd467e6a12f90fbc5bc35e4577cbbbf95d61dfc581f5cb2008801c333d9978f5b6f859df98411d00780f98e3897a369b1405508e63bfec80de727
+
+A = 10976e10f74b6cef7dc42b7b97c8c41d20cd8f65381e699c0a9599c4e468552259f77af2cb819564cad6c01cc9db16eaf0b0225d9fcc6b4380b2ffda1fdb20505a452872d4c48c1a6bdcb7bc33d60d8b9bf181d0d91b6404a2bfc39e596e5a581d9df57e6326528cdf8ef2dbe1c45aca8e0850fd419fe8e6caaba74808edde2f6e24b2d590cb26e1bd7abf5a14cb0583e32ad36f0ca4c1624bd78765b186b7b69bd79d7afd6b81b3be9b6b523fbfe214d80f37b3fa561638daa9eefad8c2547ae177a3d166d0c7f8c7c8085187c64f49a158d9979da48596eb3a88e65d4ad87e6a96629f33157856cf463bcf89c1edfa91b0c27b566b8a191bab12c7b
+B = 27c7ba62ee49fe0f0a66879383431209da2df1685b5d665df1e53595caa7f666e51adb8c2fe8be0c241056ac1ba2377b60583f7ac73cbefbb32737eefd1fe407bba2f270347dfdf24c3125cd5f20ac7461c042a37fd744608f80e324ed277a772ecab1928f4a31228b486bd5843c367afc2595ed0ed2e48d31d35c09ac6565a996a68bef9dde5cd5341bfef9a5384ba7c942dddd3d833adc3462f54de47e82a95908f03dc7e1c0e40b29d0076ef6d24ca9b214ebaec801a662eb5f90e62e58ad8a2740c86402eeca2dbe57b1cddc121c8ef3ce749c8fff7382fe8861e5df07ee465c32efcf49579e4f60d002a695641790a120db14bd7f671f2aaa8a
+GCD = 10d23ffdaacafcfd9a481699874fd91036cbe6d5650431124a81518c72628bd0b08400d893604bf5cb91406e4a142d5652d14a816d2a33c42ac6f926208d3c22efb7041943fd42d278df0a774692b97b26cf7103e53fdbf880ccc2be0b67c6516273db60077e73185c6f019ae788d7961c82c69c726202b27fb80bfb5249f
+
+A = -26c6e43a6ab963dc0d4a63602e05d6e41a18ddb20fdd99519daece7c064b31a087332b43c543a80d1e0c8134ec0a00aa2a48b9858b4f75af44a2f3391a5b3b694e4288ef83aef02e4592822c0d82a09b85183cff21e673895aea3cc266741f6da4e0a1422c0f11c62ff01de78c43c34bc75271839ccb736084faf24c3c7e0a9facfdf94306b2f466bc2da2928c5b7f5888205263ec1fba518f3df25bcb4d99a1471a26bf1f2401474a5d2b6ec9a652de05e95fdc0531401ef61b0192f55590670171da0bef1874e211cb487daaedd78d9342f6b7f4e7a4018629b6f2928b85014e3bf5638744f6be525eb8e13964513f6328eb522f40333f6dfe1354a
+B = -59547045a76027af29eceab178c00e53218a17d859f64dfadd1b0849dfe15a84ef29b9c19881d796ee3751a6033a6cf8358bcce35534f50291737e097e4c3ce5dfd28115d7feda48d6dc586927b77afbe687199d18c427382ae943ebff2068bc0f129c27ef99152478a0b576de3fed1e4bbd3534353b9c432e5b66a3dc3f2dfdac04db230c21ed046d2bbb0d670e919550eb8cb896d989c920684cf856090b61c7de364171fce03e9af8e481a900b3cd63c305a556b8dec1caa51e2af20c16a40d7e9f85688cec02691306ba0daf1af7f9e315087b256f0150dd9c685134326462fd9bdd93f1a53ddf70f35c9ca1d1181a915d47ddac09804673995ee
+GCD = 11a8396758a0a66b022cac4bb51219dd30c79dd0c8631019bff67fc48f2dcb76cf837e32577d148de45ee9a4169e2055e2e1e9aa396afec4db1a393cf8cc6a1f1b3bce7fdd5538486120e8a7f897c6a3ac81c998a5102e0d7208cca8acf72867d8d3233c578aa3a8472f3ad8377eee1df357a343a9c56a957d66bd7049f7f6
+
+A = 1618626eba95e4576b267310c93aa57f4e057c9529bba875822baf8385ef8ee2225d817d94016efdaff0537e4c9ad49cb1c1585695de1558811ef7fbd4d028c935be8df458a7c49e8d51c45f0db68084488e0ace24f7d396d71dc3b471e0c6aae03671c67215b5c03fc1556bb1775eea131d7dfd54e9053f18fac01aefc5f6d0ebf684da647112596a214f3f24ebd52fafe7a00a490786030a2b4c84a84b054589244bc6f2c344d70b432e6d244e08517f4f28346d3f37dcc8e6ab7efaf819245fbdb27e07ac452b0a917877e42abdb90f3c14bf57b5befd34fe731979b05f4e645b6364bbdcce0e62f1e4cbe2254d065c1901e60f87074518835e1820
+B = -193f30173ddc6bf69de59ef20141273a3d0476a962ce225ad415ac13184bba80878729cf092378aedad5903452434535f275c09a4b1c01d245c5451a9984565017ce0f5d2c7d57136ee03a717d209a252c586c21b4ea1cab98f2a000781bac254347b6911b8cde726092d022322de5721cd06b117d9f3b329b6283741fa3791f00094575c26722606f1bfe1bdc6d5ffd00654020731f3d0f4404514b2de525430d8f0c577b16eeb90480906838e78dbf2afa90646ad9df7d7ed23c0cb87e3ac1ebff039a968df62bf3ea5bc7448cf680fc0ccab3c21fe298f89b0842f25e0469db4b53deb8c6c4e8d327ea1e15d3aeedb4a533a7576c390a926818520a
+GCD = 14fd868582aeca9dff8f0010a0bc36bba0c5e20931ba5d9deab02584beb41a06d5a74f0d299dc6fc8399163e5f1dae3b86f09d334692917f7b02dff899adefc375aa9f282b73d4bf886df04ea04d78c93b793ee0d120d98c05e916577b4325ee352d07e10bbe3f487fa29ba402f499a0c415ac1a8ea1550b410f09719ba712
+
+A = 61ce4d75b826be6d9cb4f2df8bee18701855af6f2b69004f15156f026bd0bf067762f29631161294fec2a72d0ecedac4aa56c7bc5a7eaa8c5587299c04e1f08342a0a6ae2244e90961ae4ed086da0ee1781e1dfa0f1cdf66847960e101b87ff2d6a0d0f4bb1a5dd4988fa9b2ea7f85082dd62f5ec4f4e90725e264633186b0fa538b2a4e2818fe894604851c72d1cc3326e6b0480547a7f25cf352b90d45604044fdaf840c96f290f25476dbb580dded1a7c88ca3dbb686aa1c0cc1d9b1c44c4d4d0fa2f1b47c37ad73792ed004f924bb7e53427b1d680024c9cd938ebf259573732081f4b2db84662340498dd886dd280e2343ca89201fc6ed42877
+B = 3cde6dbb22f604cbed4856a852d8c9d0341e05f98b5c49e4c5baf499fdd9657e40b058d36d930b73019b7a220dd9cbdc833ea2583ce7520245d5d38e2ee8d723b1498ec1ff9fa28a697affd5da6cb966e4a2d4bac3c98143b4f92f1f1ff90a32c08ae4001aa25f7e05cbf112d03eec1c8075aaf0078f06d7c21ccfbcc8f328196ae1b8f6ff2277c7eba7dd50c62cd0557a4447b435966b8b17495062806b878747dadc75108329225d13fa7752101cf7f1af841d4c728ac0f0cc5849d5ed4227fa95e20f653a5f237c7621495f7dc55be440f47a93b265742b57c18794039ed37ef27d4beca8b92b32cc794f2e22143b822b181a2083a03b0d5ec20910
+GCD = d4d9e617ea32e621017d190bb8185cfd688cd3704140033a28e09a0150f3f88bc6d98a331d24fbd440b62fde87abeddcbede601988fe9bf9a6de75314981578395bf4ca25983b84e0bdb55983c4790430e02d22d103d96e9d07ced26f7820dff2ab2b6043237facdb64f0f5fb983f09d2ac007a9501e0c5792cb8538c2735
+
+A = 43e3d75c753e93c10232d0023f161123917d5ffc57c892111aefd51202f765d1b61d9a838671f705ef5a1e9a8bbb8306f785c7819d4382e3e1d31c88016d5c18a408a2f620d9eb040e56d8c993eaa5cffe90f80f5a78b3a6b2d35cea6b22c93dc22ac13231b054cd72d042d4c2cc59f891e49481203e605708eb7fda1ff10b89c063156c8520d9bd004a9301e47e68e22dd6da5710851780af104bcce0d157afe4ebefedbabf7a19a7f3f91321cb7ca9350ca3ab28050de50947a6b1c813c12997cd48fba7a70010810ed4dca51688de1d247960e998f21686d6ed929dd7a2f93a1107acc08e7920b10e1545dc6185dcc02edee2302e2e6a6d2c6577e0
+B = -4be0721e6f5e653c3247b0cba80ee5f13f674b015e6025fcd59e67ba9cdbeb37ff962d4875a8155e3a7a02fa720e49b19832ec245012ca5f3588abe013f07e62e9d486bb298e0800ef4fa78b6a43783f2a5298c4cf0139f3c3507cf5f76a83e03a757fd163c45d45308367beaebdfd80ca5eb73654d7664e432db05fbea2be9e23bf531c97d2833c00683621c38d8f279e86508668fbec72377f3255b23cc039c4353ddfc1ea591bcb7511cdfa24505b32446e1fe321ee5838d2b9d32275b2132764453d725b9aefbd5d72f4658b1a6d6ecec1717a94134a2d35763d530b881a0aa7a61269d4b68b96b5972b356995a8e3d1a500d5cf22d50b273f4846
+GCD = 17cb2ce9fb7116345f17f45cce621d9dad7b5d9887610976904fa204c757a060318b492a71290f6326d72ed69a1fdf06ca98c81526b4b889cfe67a71d6c6ac2f47b5b6cb01db4272b8cab35155674fec0392785b82ab555ca93db29e0163b099eebb83904af5e522416bf53f81cf3c5ba53c0ef9608c9c0167a4fc57ac9e5a
+
+A = 9c0dd4526642fe78ea9e07bdc7129d90966a962f8ed38d16eced6e95afcdd43ad016fce3369a928aa9bc65bad84f35f3e39c5b3d080e1e6f35fe5da2af5f9867099ee8f7a683ed4d7e03b71b3b9b148470f2917c27871f4b7aee6a948757b149902f65c31cb62725672ce3e33b8ad054e1878f2720f33ab9a6ec732abb1a6b5bc83017ad9158e6b52eec37a8dd5c804ed4b40c63e1c22ddd7efdd5969f9255b8cbcc0db157840e73b6a4badebc990a9461cf128fd8bf4aa7e6510381f7f7bad86e07d5d13a44c688c3f6a5dce999328fb1ceb933454fa076cb3e3b8fa65498e77d685b2a4c2a4df99d769d00ca9f7551588d973d82fb4505779a9b065
+B = 7314af78aef3b7b2c1502bfbfc338041b4a48c46733d853d5103d6c4de9521cd97b8a0655528075f9dfaddadc70b1d02f0c412537af49c759aaefd5e2e20a55a277779caf9b014ff93f3c71827c8eb96ce4a4b22de69b3b0bf560002b77e66e4f59a3167dfab7db8372328204505fb656d6cc222cd7acb30517b47e1cff8c9be61f46d092f8b99c8ab6d3b8051bf3c35d6492b0c75ff5bf7a482bb99ee85f9440a74fa95a29e69be36ec7d30c7d45c74cc979c935ae30b60b5719701d664b5f38c4d83eb70482798a24c8cdac93d6b4a08603129139f62bd57d7ca45c5825836b8b6407d7149a1eadfac2bc22a178d40492dd8338d3b683ecc9ed573203
+GCD = ba5e6c0fefaa102b2412787cf5fe8c86a49f0194581813d52ac3cf0e42b0433e7dbf808a3170ab105a794143e31363d9f1810a653bf20f3a4859b474802b2dc5deebaa2ef0a3403b4741df8f2898df8cd17e01bcd9ad631f401a3fe4175d51868ae10954e8880f690696670364cee4cada6b2cbe8c4f6383b94910a283690f
+
+A = -b1b583848c790a95c0c90297d7c7160af8d78ff34e8fe38d407745891d39b30ba01f7fa48fd8c4cd6c9e86656532039bf5ca29fd3848441ca53a7f043d2a808bf2584900c8463ef721d5cfa25cc67a0d8efb20b2a608ad9d46b96e636c5e4acdc3a2954831bfd4cec0843d5b0f65bd0af9b861c97d8ee5ce0d1054bf1a8f5fd77a1420b7f14ac8f7bb9883cba205a2a1bb370011b7e5e5be963f41c2b25d3b475243fadcdd1289e56ad79791e298f80596e959527621501e85776ba2be88a33e8ec8a17a6be37fd7150f19acdd62978f2956fb8192b1eb3a9397cad9db1cc1a572d404aa99dac82d88a41df8c42db063a8e198d8df24524b2508f84cad0
+B = 2e8a44d9ffee95f1167c210688f7c8d71037beb506f84978cc2b19ff8774718a28b42a49a4d7f5d54eb72819bf232cc37ff616c69c9262ce5739fc1aa605036ca6346c4dddbf33c52403e1967885bcef716cd332382e043e19764aecbb2556073d45b0446b63edb3f396d1ccb927e6a6e6deb7a3da8b00d7ae86cb9c6ef9f2af5d789b69b1606b8b2977d2cb45f04ebcdd0274e6eb84c3b4a663e78d98c4db4c8424fe0239c8d2c433774222b7c722e8be725beda55a2c3dbe131e40f9946b0554c2b7dc4c8568b46980e70ecaa5075ea1a3a7f61e9e76fb77005af77e010d49df0b08a32a332599a86f6528aee63fe5b5155198f39f85ed96e09625e68
+GCD = 46fd5bd037c89fbf2389ffa12cb8afdd90ba2678c6092dd51694944de5adbc5032998ba41ab6e0d2509756ed97e66b191628f1d2024a0ac686961ba904332467af8d3a957a1067b1fb966d944f8a3b7991ac0c68e7fce929fd6edd17f8e5b8549459b746963ff3133c4974857bcba0289d5144faf1ec8bc9c9c11e088a0c68
+
+A = -5e0722e97367ac2cd30922b4051a878138be5f3a3a156a654d3ec6c6f711571eda12b32cd44291e35199df82074644fe12f0c950792caf3c7f577bcf5141afddd67b394990af0621e3866ae009760b5cc6d5aa4c4d369cc4c462ca8f50cfc2d6b3bb4f931ecd48bc30d62f0d4905e3eb5e0233b3eb558056bdced147afde5f6dcb0e29be3a1a04bbf3e14772c51d4c127eaef944523727eb3c0153c92fffcaa09c873a3facc3b7b68173b109b028a83453fbf88db6a8765f6f5bca62fda9664cb99fa1cfddaad91dafdb2334eeb571f63846848c8da7a4400594d42c6d799856dd23a5f91e33be24be0da823f7cd13f7d76a57351be5f6f143c717a51554
+B = 38aefc7d052f121d0f0e72b63d4a1bf577f707a1ad6c320e8717e981afc1fbb478b12dc8abb83ab6fe2527592735bb844083bbe2b2b9867251c88a6b42d47f75f96adc5110c5ee90b4074c137791360a6b13442f5f0cc519a1ac69ea92c05b328e19c828b67bcb9dd2b1f1b95aa5d85ee3dfa938fd962af4dfeb85e02f1c75c71234b6c8b8cf3766b236fc9bd34d930480410aa2a453189d8f3d84f57173a61a6a150c72bd0cde2d644c43a394d66d86264eae1347f88277e76badb59c62460692be26a63b35c4f2d54b4d190ff403ee9647c28dae718bade00151abcb1eeb8b566e4e5be772bce50441dab8bec1dd602d7bac2e5a9b74dbe2e5b86dcd5e
+GCD = 271439c61c1e75d7bb886c53b5d44414b63faac12ca02f399a38b53158945bc3b4592abeae070063f6bbd36981934f739355ef8b12b41144cd5ff10436bc9c009fbfd62fd9c657f0d96a5799a2bb0a60f77dac2f8c6a17f4ee9fbb7fd169bfea5136aabf0726b5254be32354e123d8caf4da9e7c5fd1a32c67e8063962c9316
+
+A = 13ea42ae8b28dca79e5904aa9790b8aba2f12ae46f3c818a90c63a82deda20194cfe4f7e8ee9227c4ebe697154defeb8dff031f5ae0d9fdf439dca2e9cbd1d35a6a22b053dc1e1540c1b5e10a2c8e5e14c42c043410ccd582abcf9146d82022d813e2050f7cc552a0ca475598c2decefd4f84bb6d353835bd9f72eed2eebfc90a66063f14b5d61c6f99bed7046b086b0aa7c56cf37253f753ee0621266085d680800c21e25476dee2898547e47ee75829b914554ac62f9544be44e0f3f270207d2dfb049b5756365e61814e8ad579cb505023989fb71986049e738a17cdc7f4e6175e0921fa8c069b9fd1745a02e04d5fec7d7192649edf18b154819bff90
+B = -105fc092502bab04e958f290226a2ade27997e77c8fa69ed2ba0354f937f7ca30aa66f33d883d488b05295270fc827482896151c774918923cb03b250a8829a9247324ee159e2342117fbac08a1c45cfbc65f7e949c18bb441aef26e03a7a1fa9d831406e9519bfaaaec9b99f225a9d1e7ddd91387b58a2777e5f3e2ae3c73039b51d13186db16b46072766f0e68fd6d53299c41e7c5dc73295842b67f085d099844ed596f2c3b3dd33b564dcc59a4b55e4ab318ad62d98d093550a976b448062c91baa1e96924354fed8fd8764c692d75d8cf8c293a5eace3bac69a8a46b3985f9e95eeaf6adef9c5c2440c693c41a81effe50160aadab47fadcbadde074
+GCD = 15620ca883a07f0a470c7480c812304b0288a3bfdf7ead16f01725c90e68a647ccc0a8a3d1c06162416cddecfc9f0d4009149b9041f72a93b25f564c39f6fa50ae419135b0d6065d2772bcca444d74a6deed6822823d591360149efb61c3e568f6de7d53b591830de609d0e690b3881c3103911f8ee00743c376e4fb7d21a54
+
+A = -32df35e05bc70a024fbc97d2f869602d7ad9667801790207e8269651abfb47931eb3ca99d7b235957082d97f43d0bea44374acfcba3e1b4579ab4e8372405757a187f5208dc4c921bebc71f5ecc9ea9d763a8d447c6e92b8015f3beff11961ed764dd13ea33675eb174e72f970704343edf777862a2c7625b56ada136577488b11cd47d1d78ac7f770cfcfa72fb2e26acf2fb7b54475df03d6f822bebe8f0b6b5ceb4ed8914449c86447be9f4a0823faf7bc010ecd81734c7497e73c533fde3658928451ad344cb4b866af6c605a8154d15f09ac02e283d83b270e3f7e86d9af1935c63555bbd8b00de88878c42ddc0cdbb2bf7e5b5a44bf9545a1ed21f22
+B = -22cf762e509dbceac0a038cc00c2839a6005f74d0f1b4e8d6e820c014c0aeca621b44155a13baeb093436c5bc4f4e5513c6b77858935305becfe74b0aa92aebd8819cbba924426be6d2d11363e7ce3dc841280ed5f8a147914521d1865ae1eac0bdd31fa7c2f55b3c318007c58599c2a7226eb7ba522e784871110b55fff1e0329a1969767778af9ddba955dad31b2bc507b41c5dd45368f7d9439611fc6d3e1c20ff38899bfc4fce2b1cf094dd0a1b80d0de564a4abba64484886a5dfe3d03e6f6861d60bdddcb227044b9ebbcb8f26daf74a1a971e5710d4dc1d266ddad023c6a160594ec6e58364c9436ba2119784c2a7a452e42633686d2ca4380cd30
+GCD = 776d7044977143d3ece1255814b946e6ee241ca46945648f8f676c9ade014caf504c1f8ff2ab5fc051d7f4da7f713b1fee97b707756100f39e8d94e5f18c3caedd1b58f00a9ad46d41485537affde4691a7f0300b4efe71adf433eea7e726a26685236f0b65910baf0f970ec937ca6b9b22d688bb60f5732834eddc75ca3d82
+
+A = 6f370eb62b979ae0f73ca116899dc77bb181fabb60f3a5eb0be087ed24a73ea137e2ed3c3319d7ba722bc604e10c5e9113452aeb3e489a7d20b2fdebecbda7b521168e0a112b0d2d30d261fc78dc98cd4ee95af5e3f4f1eae49413e275bd904084276a2f7f0e95552225f9bcd0aaa64abd1692da78a21f59fb4fc527b37fe8a9e4c18ad38d434ce08dda473a516d7b5da184ef91a781f229607ed3680d771c6faa8a268a1d94fed758792c0f456024b50565943253ed97ab16700ca412d370ae0b107703eace5efb3bcdab2b8aacdaa7fa9a1cf1d075da51e773d85266f3a88ab5d4eb379db8f136cd1bfe2801e11eef0c74dae979170b7d4ca0d7c03c4fb
+B = -43c28b2199c4acf51f3d867122aff0fa7b1c068ca4704f877ef9f8409b888ec4c4b8a60fefd7064835e2bb25c46990ded6e9713aa9f8fd15357fb24219a28c8cf3c35e602b1313cc938618494946b7c0555913df427abe356af8409565be403a9d4e6e87851fd42776468fa45579b07cc00bf40fb63286bae31d9a07a573acb334a9a16e8859106744bf3c9812ab3b7482e7d6d4ce98570bd212654ba3aac1e5becfa4a7173750bbb03182eb4a9f96aca0c43887c4a6f13ef664d15c1f04bfab284ab901e43aa3940b008f03a4a6a6bb2c8b62079480ca4cf8d55ad6d0bbef64265e50a28d8139aabbcd5b8cbd6aa99cb155e448e4f3161b0e9d0c687270b
+GCD = 5d85e455ce6f9597289c29f0b1eab77198831e5f56b6b8ec5f4d459fd24317abbbc5309850803a0dbeed7d5be676e1ae590e6770383b4bf4823b240d8a716f6762d4c1b05936f0423186ba2904891d8e83ffcf2804ca0dff140f325ece510a8fea35075469957354d723042a359c9986aa4f06c964cad7614df775d098d94f3
+
+A = 343bce97d8f2c3f5aa83d4101c3fe5aefd6aadc9428543714c2e8211f89e3fcae7cd798f496e0c6fb3e618a98a65a6e5dc36fd229394947106a50cb5dd08886da042ef5e6279a8403cffe7623f1c16308407c15acf21dfe09411919ee962e18836da0a6e218a9e798deff1b6658c8467b07da45ec1b28b5a05886d3bf1f868995355b0b325b08bd6c93adbd2d93baef7eda56fcc075f73586aa72a271d29a6a462c476e2c3b513277253d2e78a9b302218a71775f92f6c784ad7a625655c89155c4bf7b8b47f9e9d66285a00659118e091a418748d1ce7211c578c88d7a053919d9f8075ff76a97c70120fa179b080d4ff76ccb72042c467c29f756556f839
+B = -1adfb111016e8f56994b63838faec53ef88a59c7cafaba219127469e50cd6503b5d819759957005032083cf72ddfe05d302e0b6e2d5ad5c1a3b70ba7cdfa3fc916b1ddff116b6f690d828746f22c0e10da814aa7c482bfdd38d83ca8abe7154b92027235726332d7b6887e9a53d4557a5d500143cdf91a8b2ad05a6b81c34493a1983ed3a9754642a0a51cc61e8adf1c6cdc36a1bcbeb582b2a1043ecf77b0812e6927c29aa7d476869e7be287e859207b1d98ff67ec1433f76c7a79c0de56ce51628a67eb2599d8d6e9df3e258ab49c66a6435798ddfd74018aa7d07a141c3681cb383aa4876077d267ee459b65adff65386d5378409402e33cd56b28bdfb
+GCD = 99c6b58bb8c1e01bbf8a75ccdaf5df74639b2832f47517a4ce10201f0e863f461c871692cf10c0b0828570f14fd06009d4adb049ec0231ee19485d91ff45e24287c13d3a71b3bfd7917c480b4af4ec31e6073a329f811391a34ce32bc1c233e8828edb25761763217b4e0050bb5aedfe262bb6b8349996a677caf876ca78eaf
+
+A = -12d63c94ee481f3456beea44af3c495a4d072745d7b02348b266978c7af7ac9191369734b0cf4bae3314a358b7b1048d2a6e8231e812c6ec5b2e9e1f549bb3f2bc3df240011398e695ee7205d71b2ce1b2f3baef6910cbe938bcef5bf01fb6a3292d20165a8d3156942bee0ef847814c8477d39844a830e4b1e2fef916fee437340c36d85ecd0038cbbd21ac1c40b164360cedda48ecdba13e06c7991cef2c5622c5839e2706187f7cb9e5aa92f45fe18250c8e2b34a7a49aba8c7b34e332bd84095567ba3c067268ec778110001e661f440e0298c47994efd9cff7c0c16e429f8f8c12da541bd7f6e58eafb2a9750aeadebcf16cd84bac62f585cbcd464f2
+B = -81408e8671c0a8458c3fbc5e0ce88ce3032f2c674b19cd41a69b45ab3269793233783bb14625ab91e6764c22eb9737911e30d952c2a47a775e8dadb1ef01427375a54cb49b7ba5faf6466ad30f9bbfe13457dc76412db92d9a84c9f475ba1e21581f76c54908ecf3e14f54ed87ec1c9146b296237bbf2db6879b968414407a1b584eec438f3ad03475b6125ff992749483d66190ee118062ce264caa4fe3110f0801500f46dc1cf5e8c9f7cf2c6025fad12e8633b3ac283546771b0cbb091cd53fd959566c453b41f06d85dfe5fe7d9d2e7d5731d57646cfd7a0b22424c50c602e5e619ed079472fa7399c9c76d5e7c75cf0ea9d473ffba8c88d4867b8d19c
+GCD = 6a578439a083f05c2edcd293c34cf167310b33edb30d8fee813e056d374a558a033519a1e271a5e52160ea4370607e019806923e080dbaf8c63824157c99cc80d1419c15beeed74cad27db4f9af54cf6f0ec8ec5cef960831be79d265715694fa7097cef5da3f1e4d7c21844aa7bbe1ad6d1dedde20ad88766094b1438706896
+
+A = 2d70c2484fb4239b7be2b51c8d816db7607939a721fd1108091c99a6ce3f7b5edd687710303c7d824ef71b42edaaf93495ebd7e0dd4002b325a81935aec39f4044c370cacc4f099b06f3c4e7dfa63c3beba9182a358cee1b367743b4e248b8f2f34b1ffa01baa77ec2039be7bb969e4d1f4246e89cfb93408ff22d616acfdf17c7a2b41d1151e6853c2de04574913f1bfa63501b60a0eeb1df94b4e4a9fea54adf35c8119817c5cb498e47d9aca746a813c9aae5877004fb1661636cc3a17e4032db8f31bd741ad253235216ecdaaa42cfdc16b4387e0a28189cf147811546a12558d15d394523abad5327b6cb85452b829ff61419ffb66c5a9b0af6a11816
+B = 4ebb703b172536964ab4a8583b4bd579d61952083b712f0fc26019a0b960a5fe650612a1bf95401010c41e56e2c185c4b16d65306eb9945b68bf726f17962fd90436b88a1b897380570cd008c7397ee34907296df75a2bf405615ba50046c630388ed9f61a66a8756c5a447ab4d137791452b4a9bea297497a3d8a2d3dad91085dde290d2bdf717124ff9d7f2de486625b87574bf1a7610b56513b68e012fc25a8bd10251057c747153db7fb16d97952f88e191ed3213f00a30efefe98dd8d35f6631821a357915decd4db65276b244cec14ff9141f95f5b0d5bfd74a747aad9df25a7d482274ff4def5e52e1037a1d9546b44bca371349157c08649d2edeea
+GCD = 2a82a48eb23be56359b3e5f315b6463a310a0b0ca282bad140ca37367a434cc5350fc90b64f3152949a59ce007868c5e2685c037cc57e2074a3b93444ef4aea3bf9291d5d096054fbd2eb7f5b915e8c1df0c89f41642e6203cf891916d9d40ba46a3391935f16b4a05608ef714a18b4510fde84bc457e74e81fa9cae067fa8c2
+
+A = -8d8e49ee7f78439b7f11ad119a303ba2dd15f0e4f1f72e8d4d67658c18cddb296467ff31fcd666c9c9a02915e2f3eee86046fd5ae3671b203fe1c1d8c5ebe46db6e8f56ac6d2e380d333435279b557b18daf065d4df4519cb779333f7d612d10236be41ad4748989a06c2ced17756d8435e80651ea3e226badd39507a4c7a8d4b3c3411b5c65e56968be5d4dcaf2bd7e53d59bf027047ce86ff47265de652952c504716275efbe2f4c10ff2e053dff7f0584032226ddd98c4a2abc2564d95bcf7fcebc138124274eefd0262e19b7a384949ed7f50b91256e2a7bf7f9a6632f2d5dbf25be62b0fc18bbbee8dbb1832a7457e667a89088e54212091788cd29980
+B = 21c880d8d19cd58561207695df2ecb75c676ad8eb3a3c3d93418e25f4f8532a45d38d832a63e8218a1c159810fa8178db4624dd0d13fa383d946729f62c086a5d275b604c44c20566ab874b815d217d71725b8c9f1665986f5db654d19bcf8f7adf4e9363f7b1cd7cb52aca2c8b3389101e93a0195c00800516e7186b81d99f1c630574432d460138b96210c6963dfe6615ac4a5515d44369b3e9fbd7e151f63b467652912ef4728102dea2c474654bb6e2c4b49feb17e1baa6e89cf7d24cefc514b76b2b0d2ed0472a6a2776a6f125b4160faa47a5c3e7c78872e4f183207d4653cdb0c4708ba28e591c67db99d1edfea084108034d0040cf86f586936683d
+GCD = 608cb28fcc93aae3bae0c987a43e3aa30686e1268854c792fd0a480fadf22ac38f716d22561bcaf84b6864700eaec9a0ff95dc92133703362509567bd92437b459873a6baf7f8ecf0127aef06f5bfc015dbf00fac69a2abc7c21934982bf2900a6d82a5ec44085c2958ae650fd39f945cb3ea6c3802cb07f9486b89a7f65cbaf
+
+A = 3f2ced217cf5cf5ad1cf3847e8c037321f2ee39da3e6677e8569f3ec4e4efc96637b9492e899e053089f256df8a7979e73c8e1c91b0a04b74349971388848997de4cc5517a7c2ace999ddd34db1acbe282697eac24e65b8c15a5f8722570cd84d6c7f6cf4d4f8723eebe9e27d314d45a3750f78ce96200a173f4235fc54cf9c3c6bda60706dc1264f92edf293dbe71f4a1fc8c5cbb59f0314f16f8290e40404874c555fa292868c3bbd6cb399d3a0e78405975548cd2129eb748f85d01205507f4a41738d5a30cee5da6b0bca2e1e5ba80ddaa12f1cb06b9f0f0e8fab000973f19d108a84241be744badbe0c7bae5cd8da4d7548e84d76a97739e42ec6e45fd3
+B = -45dc80f0970a8064c44aea117c846f9cc2edbe53a661b3743d9c66a28eb203fe02f788fc887bdd4a72d4b1d8cc69390c2d9f3ac324085bfd99eb924f207fad7aa78a5ea08454eb30f2603fcabb74800795fb718ee977d31edad0a8e7ccda308a5a5bf6284f6221bdfb4b1d1d8dae08587b58288b3a257842e2646e273b62786f2d6b2c2ee6488b732c510c3e678099bf49fbebb21ca28989b2b0f25cd94f80668a51864addddc4e7b27a875afc459b194c1b013498f87deb14d0bb1e30e73b5fa394eea244c0d6887a1ee950cfd2f6eacf78563c966cec78a3179a3c270141b63b7cc10d0be93af9513a64265a16db221762d1a55de12a2718fe85c2803cc3fd
+GCD = 2d1af9e56799a3104788efc7cbe2482e23d3d419034745fd236d057aa42287c17e5570ac64c905beab44acc9e97f42b8aecea503ea2a3802fa4c1700b9050354750c957f8258153d52ff825a67b9bc9b5af54188019afce4be77b39a5190d57e8ccd489299012b1e7f528b5b7256feec8b52e422d7fd74c9e130d3576a10d50b7
+
+A = 5d3d9f836b291d015d1642dbfbce62826e1106626276075a076b65760b22fa89aa775b834fa7930363e696c4b75eb71c18742a33a3f9cf7754c1eaff142a9a9ff049bcfbbae504779f513caa081bbd116867e792df95101b56198697a1f9a117ced81f45f6352eaaf094e8572fdcac58444a86c7b31cde18c82991fe58f4802f1386791143281a3c9c95e7d79e6b89e1ba3c68347e847105af0fd4bd730b1bcda51c229d27d0adfc1a4be1a046f31f5774e2db8a015b33733c04bc0eac32e4583d9e5410d16a17cbd594bc41f6db341f84cc981ce8c6d3c88b6477aa28440c8f573a53e88d3d8b8eda98bd2cf1f9ca6efd79d42470b9592c7d30553cbe05d112
+B = 1c7012c654e4a4ff773ef934c72d4349bc661cfd68c998cb8a9dc4f8e2ee66a550ee14995dc7efd5191dd800b0417f0420cbc575f7a84c203990099cd4a4f44b60cb5eb565deb005554bc3827bc0fb546927c0e07e40de514297e6f44924996e881cd738cb034f6690836c4a307d6f892975e90c0cd08ec335ac2253cc1da0ffc242a46794780b3304c8ea16d420250d4fd40ed83cb9243f5837d99aeb3d75e0dc29b29b49f9816170d4f48f13829221ac699088a823cb15e0570ce87d7b7e279891a6c6ba4acc6ba416af6d6f5fcdbc068fc0dc0c6c900ff131b368c0378c2d3cbb5f6dc0ff7904a813109501775775ae568f39cf560746ee5e729ded29b1c6e
+GCD = 3c2ca5fb4d89f71f1c6281e70eeca0249e64f39a2c826bede8b8dcd2a6b0e477a16b56e0b60d71573714892d708cef230983710dc7514bb017593ef14f64f480ec2fe0411d8170936661963522f279a0a148f043a1c33cc9ccb5b63e0fd3dfb4bca0fcb45b60c088e0b3d58f7396fd1800bd32183a2ecc1e866babfde6ceafee6
+
+A = 44ded5aca185dd694407bd38eebc9cca768cd27f963d9b5cefbdd98049ebd2831c80de83b725ddffb97b2ead6fb610e673a9fcd453a08f5ac0d870b345580e294825f396eb860de46afec56fb05f4f3b409aa7a1eda21546b3ea4eeb7e5323dee1c48ace3c71ac2b551139bb30a193335ae18ae50cfce13b091e5b43b68d59ef3da4cd837336e3cdf14f1721982e78ae29bc4c07c90f27783820fbe886fdb367a6b8e2effbf5a513e14bf08e28a78d186a74a397e272340e4eee9a9104a156096f37ae04d1d0de20a576ac8229dbdf8ba093d9519a7abf3ee2ea02c77d7de25a17849e66091e9353fe3a9b8e04abe6fbb6f9519636989554b7135ff2902124843
+B = -1f1c2fa161b604e95fea54f24f51c94317468de7e94b7b4f474de7b275939113092c49a73e49ae21e5c6f501089a2826ba562b9db28d9ff00d7ee600c1bd18ab57062b973c2a7b4016d973ffb54ceb979dd043e8d2af0b10bbc57db1d9190abc21e1ef4cd947f67c2a38a25b644615c80c72bf98ee62d2615667a842e954d7de3e68d03d048a9323b1be5d620b4a8a2c1df47daf567e0366ce5137366e13a8600192ea886bfcf4d56315b9759433714d0b8a092d87c92c9c9c2c6151eb661f2da6de09455d4086a15fc10d1b3afcc0c00a9241e4de0823a532ab3afc09d9f5b0620bf1631ccd3a470999e36e54d33964988e23ed9497e22687747ab00db8c432e
+GCD = 22a354280da7ef2e3499f2a7766498d49782f43277ea6394625497be1ed6d04ff9dc5158af8ea751dd5ce0a0281fb7b1316d96cd631079485e7689aecf2ab6ae90e9b19fdd77c14bd7a345b37c24a28b2885f3664c2c7973b81469026ce27885c251bbf021b805e22b587e6dcd2e14ed9fc443ba63a44f5809c2077305bd4ab25
+
+A = -1022e5ed6a58542642d4b171a779980552168e504f5917d606f2925cf30c84166dc864f4de6606b4d857fb30b7343d77c57c732dacb943685f1d0648712c7bd83a070557049764a9adca35381882d3622176fc41dbbbcace10d4804d17b2ae0e8873336208d2b979ff6a91dbf3580e3feffb99efa19e68f06587ddd81c41f7fdf7af7db856b03a41dddff08aa3d0eea9cd0970d5120a8006de36953c11bde001f11f7025a8c569bc93062d104058e77e9c1e0785f03a8792d4fa39a038af04b53f0922975c8fbe10436ae6d0f21bb2b133c8020a4e03484483e796e76239192723754093ebb308f9e0690e99cc7f1c15698c79899689d1e39e1d74c824c2280144
+B = -9882caf7b6f0eefc03abbe274a519c611f4be88253cfd371c204d22b72bdedb3d6c0424e205decb797611d2836fbe5238b7282076635299b4164cb4df3904c24b46ce4d14a624a88d525621cbfaa9c8d5e3508dffb3333d6fcd923a39ebd3336e82acd6441aea23bb98e293fdb5d2a96c0bb342402342960cb77197b454af97050d50839b63a03b4b4843c9b9a3e5d52c5d6232d9e6fb46bb5c258ccce89b4e3f3cdf9a4c01def7a9e2b1ba59169ce8213fbcf6dbfd1f55a976e1f88ec3522c26d96f25c1fe85c243c0f7c12810732f80287f706988364d59bb3177fca0fa3686efba90467ee81aaf42ea43d2e862fd941a679c18058ec777668ed8adb480d268
+GCD = 6e3d9c18125d761dfbda9138efac235d55f5099154f1584ec213ceab34c557e773e8b57ee5fc6346722b01e7ee7d653f5fd04df80ce2f0fd060bc53616eeae5f8a81644bf5285fd352aa58e05bf105c3d5e511ac2e8cb470c9ba6f1e3d904d7027f89012e0fa0d02a3e8c289a691e6009abb4576663f83dc21541f96093d15c9c
+
+A = -27d092935233ad95df5168764e57f35c82f2ec39e0675dfd43701ba2df99aab5bfda270c85bee01c388b1599b58e290eb03bde342f222baee86cabb639539506b5e40dda162a40788e67da48864763f55ee1f3fe88c4dbd8ed14e7638ef99626352053bb687c6a09546d01de5898d62e6e07211536f918c3d2f3b15b9d7624ae72c3d5f46f620c1f325dec121ca609ae6d0df3e191009b6ca824d1620db4653dc4f797b5a6f9512a73442c610674fd8fcbafd40d5da36b1a3e1722af35a7f67c8c5127b7c5eb9f29feb2544ca2d84e39d8291fc9543a5c3fbc3bf8039e0d318949749039a22b07a374eab5ee414ac1d84cedfde0afa1acfb4c4e4aad6a5669ce5e
+B = -22771f47b6835e4be04657a7388423bf339803cdcff3e92ef4d00d988c642404ac0e81e7a3c048e1e22085068fc33fae70aec7da3c15474246f0b0190afda06d99b5b2a728afd3120da6bf986fddc623d8cd9c9838cc68062169e1da5586ea56a5e765929d2e8b9cd7da7388279f889e24fc06199d6d3c0498b97fbeafe6cdd56c8cd74985697f5bc0b21fa9b076e980561429638fffd6b46bf17046530963457a530e98fc7be10cc085525b38838a380ce10e73f1d99b1a9b3d4e17e903904868a03f915c35aace842caea138b23dc6bf1e5f9843e4099bf1a5e52c14ad190fd2d1dd2d8e06725cb88c8dae6af357a853ce8a201ee0dc6167ba9b67e309b92298
+GCD = 8d3294371baefd04e1fc6f1fbaf5113799ef022f2c89430a940a862a3d3ef1c5cb3e68fb2c860961ccd7b399e25571b55dea36c187023274333059c780f53944ff81dc5e5bf2ec0dc488716deb59044048bb9b619fe1cc9635b4f687bb36c89b899731e137db1f76958053f0e52fae11cd3cd34504c884ed7edec573a1c031e0da
+
+A = -122630249adbf9a46c2181cc6a46e0016742b5c7ea1c9d971d77a041172bc232ffd8ce18d3e0f4f6a735099a2dea3d4b4bcbdd70b20bda8cb7bffc09b0536c4c7cc7ffe544985302f08c4184a96b5f67c3f64badcdd2066d5822481e806193b7d83df0c8f832ceb2f0799be735a1028ca59cd9779c8cbfed1be89c9fd969da81bde4de41847d50405a98d273f90a8478a41b0d31fe631a411b38dce71a9a0016ff2774492bd62a8ec70c44ebefda0c9bcc674e7f4b45c17a93c52b764bbaaf28ecd2a1fd73c7505c6c302536a362c6ba02fdb794abe4265960286b43ddfae23b713d6f0fed51ec7543605042bbf2eddb756d09871a64e746bd7a68053f0e74bde10
+B = c5ddd85066c65e1369dabc68278fe3ceb033d21ddfd3f7097bac56775d93c45c98405f79bb0e960e6e8937de324152adb152887c51fc7e8ac01d472877fb507dd034cd4c662db8e7ce5bc23db34056591c639e52e3c13c0d68ec6aa16426947f79c759974f956f0cfebaaaf89c29c7dbd5e8d722fa35c5a9587f70f4cf082a9c992f35a768918e2fbeb20ceb717425208bb3c20747daa67ea9e9708a6a4a8dbabef958fbbd4e47fc7db110b49e36e758eb92165a6283d8ad80231c08b277cdbaa87c549a8f64cbfcc1029658bdd5a24a21702b1c37c32c01937cb808410144844a53a347d787e36ce14fbd581eab309673a11dd0b200d0041bc102c716ea273950
+GCD = 12f0ee0c662eeaff462c1baffb25684c415115d0c3dca31f7138bed62a2ce98f0f7a83daa113a2ce50c1f3317e22f0962a01da9f1e2aab917f12cd9b4cbb8ee9113ddaf1080c9dc09cf7dacc27308d6b610a3bb64c98357135331be3c146c2f9dd00bedbb9f0863281ce1de58186bf9b968d79c31216b6ef331af5bfceb44a5ee50
+
+A = -3d296bc6206930c4f781b1a438c28e06751278e472fb1d57b49b5587ecd7bde36e4aec743ad9864b3a91f4b448d996fae6cb70879680081ec2c6b95984f964fdf7c811aa09cd6fa0b15dcaea0500022e68fa7c39c04c46ce398d5c72cad23d18e073bc2e2e4fe0dd5b333f2637b4b26818ffe8e41fa5225c62e3d04bbeef39556ce4f9b6c8a2228bd30a8fa6670a212b2fdb64e28dbaed715e55261bdb7f03b409b0befc70e225e9544d0249efbdaac7d2748216b28b941c415f4bdf2e0e04d7f2f2f278ad4c16f8d3591259929d9958369d37ac1ae57b940f0f67077d77232c8452d71c5c5e833d0cbae77799fc99cf2ba698dd698f133096c975cd5279cef1a3d
+B = -3a088c5c237b3073fb015a3f79e8f10153fdc8e92a880615eb2ebaa10b99914ed6c29cab2006836ee9414bea85883a627573fa2d1b3ce3f3f776264951dca414238ee0b894220ebcfbd65c94e6ea7ba8b98d23151d6d936dea1708b5cc1bda1fb39d781eef9a2096855b32fd96852fd9e4e5589bbe6dff7d9d05023b9048d789d119b94aa2b0d6c1caa3b62b7798db1f60ce7da9d2331143330a5057f00316d433e7a2daae49a4d129bd7b1633dcae32944f1d0237427887733b2ca434c1412b21db5672f32cd52982d832283172134be29bc4184ad3b983c28d9579bee7183566aa1010c929b0d08769779fa59739f86e085ddaea2bdb951c2f8e5e62baf29a8e2
+GCD = 24c2810440f3d4773dacf9f7a67b2cc0d03b35c059bc6aa3b8aa0f0a5299954061259310493cb1940a2dc5b62537ae82373b82ccfa115413d2d3570ce4c4cc5475102991617363434b0394ce891a7bb8cc49035fc9eff2b4df6a49209fb441195f9ad7334ecddf78f2dad78c50719081f1c88d5df36e0d1a2f6024239b3eef8de1
+
+A = 880d499496e6677c1f1e86c5217bcaee036ed513660813c1b2f35fbc7bf500e0cf00a9643623b8849e1a5b78fb86ebd873061139a11ae8b1ea482cad5b69f04a6db0bcfae5c8944921b53ccc7c531c7a4a80bb1368f81a04a9bfbc14ab1d7b197f5c25f7a8ab853023a9752b06a35a10b434b5fcf1f5768c43fa7ef9a9555283e019d22e3a4d8ad2218670828e7dc06f98dab27ccefc42fdb386830245c3397838a18d59e0c232b2affcb4fab7965e67fd103596613c83bc4898c710ccf106853329acc1f6d70283f697feeb0e1593cfc69c0e86e58829cded2a928b4410efd5f1f9484c6684207dd8ccf18394a0118f5c9e668202219dc09de8071ef9845044f70
+B = de506155c2408beed4de5d031ee47d882806ba27fb8cced91fa9589357d96a96efe68bd4e35632ffad751b8dc384d563031862a612998f79f1b06beaf53e98ea881f70bcbc6261b1c4bd2579e12b370d4e01a31dc5a2d3bad7f3d2595e534f980ebbd84da0d1dc23f479d9ce7c9657ddc49a4845c2652f05a89607468c27b1342c2b8e04032b035b605a2df2af7056b0ea18da94e3eaf6c7f2201508e31a94d482a9f338f5cc58c877ffb589bea816a83db41071f71ee254bc257edb76bb955887971490b52ecc1ca70dcb61b5bdd9d70556bb18fb51bccb0410b204014064f67d50d707be0dcc9d56ec6e6a84e1095be1802318fc8fdd049070921c833dceedf94
+GCD = 5999a34cf31246bbd94d697000e4ecbfa9b2e6fb473d0357f6cc681d40d5bec39c2d063727dd36bf3d6d38386a09e38ca13d967816aa5d9d2c3f0edee4b7332e0be284d959055658bec645dca93ea2cdca8419e5f7cab41b85f33d46663bb20869798a143251bbdc3805c6eee7ef27d3f8a8843844863ef13ebb48db7ed58ad214
+
+A = 42664fa1ef8ea6bf4a3dac8e6498f19819f3fa02a4aeb73c712b43279ad3a807dc7cfea3c4a8f563b61ab3d63fcfdaadac5a118461c7db09dd17a44ac35c5bf0aa6103e6285326576cbc94762247bb3272b5a447d194e4868b9be85846d55a64d5f0f6384d3016bd139682f966f98b87b08155547295bf514a16c94f5767594f2114a3231d05ac9d672711f5775cd2db0306e517a777d3fa2522078f86636cc1fda0c6f635b6380764c9cae50b16878e5b028ac91aeb51cc9925d47b23873c82e7936233147347504650fb4418409c7b4e6c6ec4cc3d52fb6a9185965c4132149968342dc623dbbc74cae5ebcba93756a5e22e4c24a3ab2530728b6f286f57a8e616
+B = 1e129cbe8232716ec69adc048bc1dd118946e04f0e981bbb948e561c0151e78bc5b4981d0b7a1b5741d4a41685049395943fc01516f789ad0c5f6bf504aea362599ea73c3be6c3afa7f468cfb993be3c33eb2ff951c7995a93c11b6de6aa44cf404fc5000b426f8f395015f2bf7956c6612edb9f7f2d5dfaded21433cf069f51e5a1361a1eb370bb113f43bb3f52ea2e3996a8f0c7c238169375ec9a45ea5bd554609be60d53ea9a0327fcd893aabf00b9879ac539d94ebddfc512d90bb6e235d842ced85024c32f1299a1f5be22df6bb9870de6abf0809af043b2bf68a02e14da734c91cf786772ccb856610e0c4e66dca7020ac7f455009e87b7707bd43683f3c9
+GCD = 9e8648a4069a067c5c165312402cce4e3c2afed8203a3902daa571b57622f38bdc2c1df7c9936ad61a65e5d58b1c1119df5be38aeee409130683fd0f4e3b8d10e94ed7e95283ce981147863f656c7e1f0c94d8f6804822554024c7acd77db03f02062f5a5d8860b73aa2850a2b11b443aa78ae7feff331400ced3bbf8274ed3d41
+
+A = 8a10dd2d80ad1acf6f163cb29f6c2168deeffb44cb71f8a7a97ac991f330781d412c12cf73adc76b45e1e4d78b3c68215de81a7b991894feb6b1f40f8996028d0194e03339ed1170f24f4c3688aed8bcac8ab19ef47f33126112c5df2feba5517668637821ce68b64c8efc2cc25785ac41b5f181e30dd2a90b4a7ec5bf166d5b9d756f97c7415cf45a501d5b639299043af483a310c439c56cabd62af455107bc74e6eb36c16b57ae1298eb81189cad56465a691346da1357e8043493a13317c009177c096e6e46d78bb18ad3ebd289f15dfaadb58227ddc765c7bb677412713b001c97b64256f5dcc99d6828fd378be65f6fd0f6c7f5beef034a68a15e16cd4e6da
+B = -19be28ec2cd1023085e3b5e3eea13ba07762d251aee26fb3856b720bb3e8ba4cb7ba97f768a85539171feb7204125e8230f0e8a62ea510000387ae5afa395280f03ead685c2209f53519f8c6a3642c8e5af10c6b0321d8a47a53425896ea87b64403aff68f1fa0e29f33e2f178be38f92f8ea51aeb1cde9005328ee6dc8360f0d516be9280bd3d81bd026222bc510d58400094abbf9fe2f7ebf26d77682ce695e716abf2a3658d242fc693f0b2cdf16487dcb434fa2806bc407ca39e7644072f40e2ca1d692d45e2a4093bb5d98c6d085677d4f268603e9f32864961a3cc66a6b901ce63b979f5bf96b1257c7994e52d3627f9c8470dc62458cd7565ec027e74ceb64
+GCD = 1e637995253db39d550bbc2c64444c3730f91ad9876f67538abd456e824d316468066ff63e3ced26776270d8114c5aaf0b9b59c7ad9c9e401b9753b9ab01df767629ad55b56bdc33ba6c92904703503dc0b786d537586c7403b9eeb6a2db13b78e4e781304f9957809a0e06bffdb70c5e665703be8b03e350dfe45fcaee026e96ca
+
+A = 3c3b7fa369023905f43b24f1d3ca278af92ee61bf3c075bcb7d93272f1cd2e9cf341cf5437b67a06aaf999d1afec6c7d1843e9a37dd779da0418c414812e1ebebbbc30aa55960eb733062feee5d2feb4e296d82e49e1e8ac57989b5e22d1aae76213f1f4086d4e890f5a9a85b0ed7826df5c755920d964f311f85e50e29268b05c4af1e2cbe43763f681d76262d39627d40c098216922eae54f21d5ac78629585220ce0de6d4ef46525d0167a923c459f8aa63cb893e09ba15e6730c5888a8f70e63d9829d732c172976492e4053f377e2a616ec67d0d3a8db390e6aabb233d7bc361f0b33f5c934606549ef7aec4b8cc089bfb049f6f8f3f28452bae47da1797a9c
+B = 1bc847100c03ef795bccb3144b3c4d6f76329c06f5ffd5cee5663989baa871fe13353d4ffc9cc7cfeabffeb39646941682ad3d17cfb4cfebb578fbe1319dae9136e5b76ad41442e00919f52da306e4221bb9e8a8ec90e34dd632d7f5d1753a7d69b8711a004d51e3f625aa8cde54cf425ab7c494a67d74caa85faf58f5f1864348ef305bc582e7f1520f1fc2cf0b42debd992278262244d0a111e61ef942ecbcfed603a126dff45968ba6b29b5161cdcc36594419f121a7d250862fa99e6ef6e2cd06b7385c47829efd298fe4a98d9dc3574931787ff47c5fd8e1127c173854a621c4179c90359e411be18f9a4d9a213b9424bb1328267aa3a5bbd89f93f2e4e69b8
+GCD = 2ed040b9d16477eab33ebcd47ee9e4ff1adce5df52bb02413990b1753bf475cf93729be096caa3028d2c93685d0f46cf22f424f80fad643ccd36438221057fbec594d90a6a3396e762cd04f2367ddbf1d634e7b9323aeb56683058fe51fbf05554035d07d896e935dc7ee43e35f27d36500b15249892ce848dc9be63dfa96d6d284
+
+A = -62a364660647f8265008afc2974862554d2b2aaa942fbb0407be48df89442645d7446c505b43007c85695f7577b72819ad502ac4eaa4cdec4c530fbc7b92a8005822516a32c18cee1d491c29b16dbd584d3b0d9c752dd01f11810fca4e6aee381a08fa97c3dc313a36bd8ab1e37c88111dab161fa8736ee9a0c3ceb9531d03b3f0b8afd57441a0518ed50785e856ee8c5791459fe1305070bfdb736086bdaa2c0902134a3361154d5c1ed7ddd83afdb9c4e5aef5274b2bae363e969261f75c289e19f2d758a04f26903405d8bada8d100fab0ca531fd1166a7427bc76e8360ca86bb94676a75fbc5db11bf74c39c387e222ca34aac91e5063d1eb00e78fd990b53e87
+B = -fa9080f1c8e490a5d50ff202b8abca91cbf9fab150716040b4618b40c61d2d970494d9e0a4fac37a23b27297130c1f13f6621cae045bbcef5018a20d651d62e665283d3b4e48fdbf2ec5c7d68e18e7215b3ce19570d7722f6826ae37241c7e2c52a421ffed336377fcd97ccf962c007f6bb027b7472afaab4f85d80a8b0a389e23672e9fe4186e6c59f68376be6f602d2786bb23d2a55d30cb2d411b35e6aa36d7340b85112f94cf6589d2b798820e4febc0b8041c8410ba0275d89e6da0ff109659e4d3649be1c8ac6b9e92694af53e1ef7830b96d03b201d03de4bbaa2d05fc8dd588e543f0e08bde0871eeb59ac940f109f05c89312084468bc31cdaadcff33
+GCD = 45c6eb6e4cae3c81e071c3e72827cc2ff782d8c135276669162099d81667c07c499d67a7a7344c99cdfbe00af5a10d90cce05a751b65f6aee02a39f88f619e6dac16c944807a725e300070474e72164d514e94f5399bacaf1695f4b35649825bc272cedafc5b76a06d5903e0c7aa25c1e653e0dc425cd157efe4ab07ed19d06bc43
+
+A = -1b296994fd79cb769d59e51311d5e241a9822b72c10a53136ce55dd3c28340abd6e4cdd6ad72a905fe96a7a8dd8e5f2042c975d64137124c6140201292a98f095fa7ea978a0c7ba97ddfbce7d297ae6e23fb48590355380419966c30edd9b6b29bed9abbca475e80a61463e388e0bd03b5169928142d6a7612935ba934eab59159da3cf586a13d803d495f3d41ba3db6ffae334175b34a50e4f6b7ac66e5cfb2202f2b8882193744e43ba17bbfd53a5d865014700d6a82c99b6433af33a1f3cc33f04afdcd69b029f3e9bc9a9bf40b5361c0003dfdd86449f69cd38bf5f30bd625f87c922c4e5d6d55080bcff704288deb17ccbffb915a4720151d5978fc9e11b813a2
+B = -4947c29f4cbc4414cfd65b8b7838f4e74ca1594687ce6aab36168212b8d77d276610f5addca1c8446124481c6dd2997e90e1b6b53d9b643e08722020dcb6bf51013500616f7239d55426515b37853cd22135b5fcb619194e3a373cf5a7715f4817d6809bb960066463d522b071ce9175a82385e7ea5390a49c4735c53f9868374ffbe47be53e2b5955c1f09505151c2a3b937c593b02b8407d90b1c8f25e8ebcd8ac3daaac6927cd664ab3de61d04eece2629e6924e7932e3395e20d8654e03beea144e8f16c4bd96a2e17208abd0fa4ebdf8f0e18e96adc86fe4ca9d746bd3d3f0ac8c13c77b30da5f51d60f9ceb5d7060ca623b0bfdfbf50eb8dbaf2ce33867f1e5e
+GCD = 25ad2f69dfcf036d2059cc9cd99c1687be6181bd59e3a59350ccc4d1eb76fe35be9df936ab4936cd6f898862de133fd7bcce05bc6c72d4f28276b3e8aecb34cf2a96b337ea35c326eca7071f010710b58de5d13ad5252ab8e92a6e7966876a5cdfb6179b0df7f81b82ab2c6cc83813b999588794a42fb82e9d246cc17eb31c385442
+
+A = 1ba30663617d1371aab0e7874898f6e4646ccb31d3198352109a0680587232ab018a8ccdc948a7d73a2ac51e9625d808402b76ecd3135c10ba05ca89b14620c6c79548bfa0a429fd96f5df7e7c2e923da33bd99ed712a94ad1d2de009b286c9c8f0c8aa2859171728f49d93502949d26ff4b2fb1118ce8ea3449dcfdbc90444d8c18600e71ed278f9486852ae84d53e07bcddb3ea1136c0c1e0ae54b55fb6348a83b221685bac25fe461ba06f191f6422f8d44644f0780b2e2567518f460b4e2dd006a697d8b9ff3a6f476cb338356aa8c7fd601dd5521c81e9e1854b26baee4fd13aff8e945bb8986f9aef8f010c5bb5d82ccbb12eb3f422497544bdc538a0f36281dc
+B = -96bca9eed1024052501e75cbc0633046d577dc3ef25282194a844e7fa3719609168ede72cbfbb4f4466e31211bd76457bf9e8b3bc784df4aa7317d8e2ebb346d2ac38aae3f765fc9e09a5acc30b05d67a3335727b4a2db5952545395147412aca32642c3a3bcee8bc8c8aeff88522d13f90269f2e343b7fe6210cbab1d76e57c87738c14226965e4c1abde211980812b236211f707b6d0056116e7b8254da4b966db2fe1d0bcbfeb3eb1b270c946558cbc42a6229aed6ee344507a1c7abd1f6cc942cfc82226e64c658138e1979f2676da1dbcbe3e483339ff1e5eefeb4a92e72f69011f73ed351e2087b2c003118327e05006761580bab9ff28ff3b15b32b18797db2
+GCD = 1cefe3ac66ebe9311b57f32ec15c00327608abc08c8e0ea3734fa823cfd6a99d73f10ae00d571849be753a7645bc9d0d5f3f964b27e5e87628c34431bc928cb2f1930e177f76e340aca6b4e18dce426e2127898370d1211203ae043fc1996b84e99470d1a25bb0750f856122ca32444f792c6683386108d0474bb3bab0e971750f8a
+
+A = 478a5c3fb819ee019af7530797a6507dbc6db51812cab82b89b88bc8a0ab29d9964314304802b82f590af06a77334a569b3055b6a9d5eb65e9eb0b2c8f7c402668f90f6f6b468cac6f1cb9c4116004c192b0266c07b5b23012911944900b88ac5bc611f082e01b024bbc888b43e1330d8864ef89225c8c378b0af4c3db8ea4f6f16f35307b33450260db8219e1852285cb28396f3be026a7a49fd09c80d803355220951f67a68b906e4fee89c8c47e6a2fb465be105126d30bfc7f9b8801db3e79ee1ca8b3d0c00974682e868bdd3cd7a07393b26108fd73679ad6faf539b6cfd0debc51cf106d37b629af53075b9aaf52f06fb3cb1ead8d2438c41b0719d1e8152cf00
+B = -273fe1b7359bb865c48ba7b76d09d47e6a6e24e5e916cbe0fa0f16ee90497f498553b490df54f84e4f9948c5bf6056d7e1c4abb5c34576fce390775db49a46184ea8f0e8682e480261ed987ce9b7017c30c80229db8abb1ce1a1f0686071f88cc90ff7cd134bf5eb03c321f8f714f680516261ba86d0a752419423be905b830f5688496cc498e35e571fd10d8820cb8d19415b79bebb16a0f2d78fb42e5c6aaac12910495b0d7a84583667ae6584fed3f400c76783e24031c6a9ba6fa06aefd1b456fb721ed0db24494777bc9fafd74a0d4f86bb24c1794f2ea38a618bba57422650159e885eb81831e89c51bdbdb14bada21d34d9a9a3c3158bdd373531b44f8eb5f80
+GCD = 31ab60b9fecca209c50eb632233a509b83cb4b8e99161eede6d02e6a77c7fe9035eb3afc9fa10f98aeffaf736f5cd9a8cd1f039c9c247095bf2bb9f42a07ba0d661660fd165255958018c867585f2dfeeafc40a9f4bc56fc0f7b21e5448294c462850b5b82c0ac147ef399131bc3d649026fd12d80e75e8f6b6e6e0821b7c32b6c80
+
+A = ef4ebbfb56802a5346ca57ef6b20ba3643618344fab5c3a8370eb1788ad9359c6072e3a8d72791e344bfe64e16de468bb2c11d19f401401e175dbd22ec2282fc93f399dcad1724f54fef7790af83bdb43804bd68bf2bd871da73d5fe8f81b9c444130aed1e3bb8ce8e81773f96e1c816035aae1f16e1a5b36e1409086e31a60da720d35da7b0b73553b9e01fd8c75104aa371516e699e86533567465606d3a6b7bb2bed2841754151174dd1213d2ba7ce73f4ceed9ec50f219a18a9e53f667e8f9e0b0f91ca8792802d357b577c8c39bce244ea4219e080606f33bb333971dc3af64e47058bb5274d31327c38fe6ea0c09696398fc13a220b6b16549d5a15fff28cc88c
+B = a586e32cc2143ad4541ba9f1e50f3fc43abf06e88b1df4121e395f0929e8d5cfcf6567ad1213810630011e48872cc27e3f666912eca9d157bebdbb77d6aaac64f0ea31eea1f3880d2a6bf236a0aa9fa10423111373d641f7aab4ffd7404e026b6e1ed2c7cbcded9e76b2b091e7049b70ff140cb02014444cbe342e86a61c064466e14ff77606deff5ff09e28aa4560fb2aa3f726f3395ef3fd21b7b3bafc0cba401ff9802ee9c331404ef30c92cdc669fd958096437f9c0eeadacdba4f213001377a8dcc1b007abf6d72a50e5f0d8003c46606f894c34650b7d63152e2b07257b61f4b78d681052eba3399fb94be715f13397d912794fe41ac221a81637b59019b803d
+GCD = 639815f214c4b22d3b8c2b1924988031364d49f42b049474f385ca466e87e2b78a7a4f1a3f598c6dd42a35438b48d3ec303851cf8527392046b3e09fda9fafd93d7cbf80ef556561dfc3d29885abc8309c65504963deb020918df5337d101c5fd6a766feab93d04f7a36b7f2811cb6896b62c04703bd012becdb287b83cf735da987
+
+A = 660aa07b71ddd146c1ad4a96fda710b8bed1ae67b1291fcb476e41260a8ab2b9f7ff01db898b6a75f1441a630bf519a08dabf0c0925a6667f3ad986cf768e7dff357a7f5eb86d5f61e12796b5f8f57949df590abb98c130d5f7d6ef45c80dc2dd757822fa4b55ae221a64900b18a18c586a5825d5d3821071f123d2ff5acf335cf5f7aee7db76f14525eaee94a134799c848b5a7436ba962570bcb092d4295f975696f952f64d9dd1dd3fd4a749ce77eaa1f049a8b8fd0865e0c4af34b6024c532580a05c397c1189997cc89601a6144d75916b84367186c3a5cbbf4e2c6dc1a8989205511eed59e14098bea69201aabb1e91580911b94c77d21b8cd5b8189dda506a01c
+B = -6ae5047e9773d0c71b1d32e7a00223e99fdb6515327ef026c494c6b13b85c31e9374353afc16aac8c2569e0186454107b2ac0ced76df60b9fc6baf85b2a273b05e33e319a3f9f2175e99b1995442d10ad639acb76389c2bcd3796e0969dca58ae45ae6bdc70208339447a237d6629e316ba5a0ea6ef1fadcb0f6d686754a4d279f9dfae41c1e96c276e2b984e2ab1091bf06b500181a64b53b431b1be53678f16604843b13f249fde546c92cf92234e477f096d73390496032c9725cc15719ce8162f51fd69932fcac4efac4c6025b1344a3a2dbd0dfea936c6e85a4521a983feb787f1f0f508b81c1c88e2a9e486d9894faa042c8495bb239c8af4cf288cd828dd0bfd2
+GCD = d8c1b2d84dba1ababe689df7f9f002c334aef2497dcb45053248ce402ef7eab27e74ecdb1ed308ccb540170dec9a51b50ab96e10d57d89e63b45a0412a010d7540b39300e65b5967f2c054195f6ca1e783f455991c37924d9fc043deb534615f0f48ece51c20ef0d813dfd288da02677c8af8338b054ee9c0971ac8abc56f3d5f826
+
+A = -6bd8bb854e44382cfacdd6dc062fdf5d6d568e895f38f36c8a9a0d63a84b2c3d9facd6277538331172701e818029fd17bc320bfd4a6c869e3c9dd2d03bffd29ad9f4a0993d70228b58fe876e7538c66d541cb832352596bd4c89c29d3d8cbae8225d32a2ff1a28e32b1645256425fc8134161b86d7ad3f91417555e138e1b65ca1a78fd08192b5f9903ffc2d8c8fdb4003a0eabb51f0cb4c519d53f7e8b55d68e9c5f2caa55bc7cf881d224fedf71c6a40614e83f65331aca2d351836159348af6c1d0accc07a175ca997c82a044c2856361c1acbf97fdaa7411c52c71e640f50c6198434c4810a83eee537e261e18bea5a2580a7e34361bfd8e04aa06a6f3f0f47649e8
+B = 82c86e23ef4c129db834ea5da9e3953fe3b35fb0adacd2b01c4a42b257290b53d5532656b0f66808e1a3b8a194febb9fc4f08702560a5c6bb48c05f4a56b6862965d49a1014b8a317b3487f23b765fdda605d7322d4d5fa5ef2a245367e7bda972fc0ad4db2bd5016c5ce639aff7f31ed4968e79aea482de806d156fb74155a767414e23ac86afebc70efcf657062c4cc1a9938faa1bf90304941765626fca23b4091a6a82eac33d3aeb4f279c437688b00c08c2aa65dd955e6e0daf81b1c80ff34228a018ac0fb475a8b0b1b837de37b6e01b2d30177d65965f56ef60a8f72fbb47646493aee32963e7a63fcc0b7f046e1e4d32810889634a11339c14e4b827cb320714
+GCD = 205328dabed1a58b47f878fa4d310e2e1a18db441ce371a625c10149852cd14c35937c50e132b1d3f16efa56e2dd088d8c6cd6af18b2318e0af5d0aad80e031e19a28bfb88fde778e2d03737a8725af4bb6026985a789fb208a5043db76a62f618b12e8cb5dfedc8753888160fd74df134638d44a5838ed9246d0b00521b953ccd22c
+
+A = 45facb489c84e19e182f255ce24db33c49e7b12a54b71181c72c945fa3513ffe20e3d9e752f65c69e7175150dc822d7f8ffa85129da94224af72a1f2c41827aeb36ca124d12f5179eb5d31312b8e0543f73cd78bca197aa019356995bb16fe9ecd143edd4550a7b1a99f32592e89bbd00356460ded590a107497acbeb5abe2b75c5e1bec98c5d3e998323101bc920f90b64aa114e8ebe81cfac725466b5c56f607992c55d8aaa473de9cf1e75aa562d739172a38fb76f2e11948ffec7718fa8301a5d77688ec6edc80c23e866cf68e33a957f3c82532abc99274899f05a0dd47a44b147686eccf797e72cb5d7caa6ea6cec8027c8fab51b5748c7703a8c9d1fae466b5018
+B = 4f3bfc7c390e4b2013529f43cb855675e9e375e6f394d3a25be8e9f137e8083eb62ed60efd901e54ca601d2db0a04981845a1f16aec67a1c35d327659c4ec55b50e3de0506957ca501fb8fe9fa7f90be30bef19e14f156b158203bb3998343a47f7a47d91131cf1c8d927d67bf9746d8d9dc3b6c90d61b9ca4d6bb2b50ff140e93d226134999eaa8bca183f04a300fea185dbdedce4bce79e3b015f8ae008027f6e4d89dd1188fa03d46e6b0602e8c656b1fbf81ec8f9560f4e6df513e4bee6ebbc2059d5366c3ed7b71c78f96df5abf8e40362d17169f8939e34441621af836da20ebb69bc1bc6d4b2f47468d49228b97d42a9f15e0e84186c6f3aa08006a04446331f58
+GCD = 56814ae30565d9ea5d1a77feef3072a708a03d4f377d20abfcfa0aa72acb0be911e0f929b760c357ef76262a6c3e947d843364430409acd6218a5919acfca9d11795dcb82f78307880c0b5ef7acab1c01f1c5532f38247d34a3dd845e45c7a64daa88c6b2cd33c4d8ad3594c7255008e693c3dd3e35aea1810c02af06f0ee52b60f18
+
+A = 170431c12e5da1d0e1aedff403f2f7e02d7d2df4f5c7e70b6ebf12f1993de5e289432d006f8d3e239808b614fdf917123da677b092f595f6642df5b2db8dc7ebf7786e4a062f52ab777986ed8d7ffa05a54b6ee27d3b69ad8c8956f9d8fac2610870d45531ebbe39790466e9622a80f31b6492e06d1183e0933fb15caca0851996bd9e2f1fa8881173dbbf6f65969314f83cbca9a7d7488964071e75a85ea50d3af88179d0c8ac818a062856b7f12dc58a0478c9bf9c4327d0a45c2b185183ded681ad36678c035b914cb82151bdb88fcffa1f488f2554b1edbf12d16c58e4a792a489e9147d5d84f20bbf5741b9f1cc52794cb53207e31cc146be6cd6e78d55692c8bc0
+B = -b5c9f28d6abc091aa453dba450d01a7bd62b60d71ae0e2fa0f35092afa53de49c77989ab99c71684bff7578aeaa4b2eee3b372bc6a763b9a365eb94472b9f4a83166ef4a59de9db0b6e84090a8b9d7270639f78d8af981d070102db58534b6544a35e80ddba736ecb036740733fe7b436223d97d3b3939ce17cd1ac0e2a14846328011d6621ef7c6f726451e5e2344ef5e12ba9a5e9098e29c67af968dd8b599cdb785a9e43fa0a0b07d02f2a35e5296097726844c70e8a61367caa7257b6a22616116aebe1946f2fc2506ecb32dd43ea02bdd5a3fe61f1c6d73b5be3e9aeff42d11d5f7e0835c464f9e688999a2046d4c32a8ae501a798152baa6633d5ed464865a0360
+GCD = 43b413a30d57328a6eb27e1193168df76da0c4b8b900c859ed7680e8fcf2abbdda4994a0710b400453582a86a0dea35812d19c07889b73040a754b2d4d8df7e0ac7d388ff7219781ea0381f4c1322e207486b0f4e5231078b11cbeba57375a71a11410037546b5c24829aa7ab85d87894c3ed58a70642eded9edd2fda2881cfbbafe0
+
+A = 362d093b97bbef2d9410894bf0033199bfdbdb8b452d79b997bb0f614eb51efaaa1499b3a91d0479953ae6681b337cc19fb14bc8753d606f0880b34ee9e7256314aaef9757295581b1aa83fcd9ec9e3ee0c6b2fb4c13b4569532e06e86e480645ea89776ea9217c764bb5ce08c5b686f96752af5d22e705b38f5566a0b512d362af51c004318bd744c21beba52cd2d4d45cf811fefc57dc3e5694b7c809a08e18fbb58094c5707921fc8d96b7a2b90453cdce7863ab538c183d43ccdf33e898f424e2e88fa0652ace337770bae72d8a47371d466510ce432a05aae11c3c02481f65fc5e87f2d5535aeef52bd7d242601de8602381a03508a643efd1f8c6fc28cd4a0672b38
+B = 14673926e6be16a743a789298e4e882675723c475ca45d7b85f5a62b9d982079f9618a7cf825ec7c235a6e058dcc2aff331510fdc29034f29aecff663493faf7a600a9cc4d130c994be02f0300529e0256940541f83f849f31b13bbe07112768e032f2c92c5c37689b6622dc9321a4ce726858b30274b18a69231712864cdfb29f13c4164db7b1a2ff640d7c32ac4f8b7181be6c4e363cde63dfc1232a2eca9f58e3e0cc7c466a6c92c70930acf58f28929eaf1c64804551cd3793e4fa629ed7ce4cdfdcb1753621c9929ff81e889025cdd8b67aef79a16944f256dae8e3a9e2762563b6072e29d3fc393aa6866851548a22d0e3f5188a844019dc0e47903c99213b0f94bc
+GCD = 31090b46338979b42b5c3690f7f197cb566af32659baa035e884bb6601f99d2612e3e613ac8c31b68af42f2bf52c9ba9af037e96c638eb62fb921658e58d805fe4cfa091cef37be5be7cc1aace5029f332519c3e01d76983616d9be40aaf0004fa9949fa89a73f6e053e0d18dfef1c1204a16e8776d64810ea3559c5fd0278a3e039ac
+
+A = db63d208a0633a246a89fd9031611b78bbe9d4a52c2df17383b5fff064f593a517c7a77958fc2b9285f961bddaafc19c989e73f6f1ed507013b084309467eec3381d28414330506b18150ae4716d09e383994ff3bf96fe36bb22a905637574257a63ff1efbeac747a10edb159ff7f8cb81a43723c76a29f647bd282b5429ba09b33894a46e8735d510865832e73c4aa5dae5ad288909cf300fbe50a52bd0eae44f368066015c5bf54a3be5f8b41dbc4a6b3d4a231f8abe2e39fc2227ec6dfe52efde320a5a1af5de37d0d45d63bea7eeeb05333c4baa7c73471c6d6c76054f2792bf6970e31bf511cdc98470d82029bd997ce7ceb463d40c4464c3306c425dfd40acc9b280
+B = 1728242ff6b69959114e0f9e81f58ce433367dba897d14fc31dc13806df4e482b8859f227a043562e93b72f3a701f508202885caf7767e69c24574dce94ceec8db32d495bc7e827ebdd0ae9eb61184673613182b12d7663c0756a91ae3ce082795c449951cfb965cbb5891540dfdeae9f1e31074d5ceaadf01e7fc91789eb6d953f56b5eef7a5d58ac5c1d92a2b7408bcd9b92f391bb75ed527115c81ea64b272ddb20bfd557e20a78c8b75b2993939d45ae510922554bbea25232ba0e128496b9762c43d1481314f044104092b3973873b0344bed20b84db1e31e843b67209d114e214719c7dc22b51bcf2a3b3fb00316112cc08496a06c4935bb5bca797ad88ae8601700
+GCD = 3cc6bbb37ad2151ca283060f19eb9f038565a1666c5d0c207374f3492a660b62f4e9ac0f28936e5f1c4103ba5e0101b8fcd29ca5658c977a2e1c930588843f6efca205efed539f19829348566b608e9265fa0ec3e64d34d830b1a51c2150d9c5285b2b1750c4411358cf16b48f9aaefb2ec1137580b4e3088de545c6bdf09fa0b74380
+
+A = 59d18201e2c7cfcfe4a2873225463a60ef53918afeedea61c689ff19208f8023891950976204be6258f680a43d6b55db9ec4487113a5da1ddd4874ef7db18b7f7e36b96f533cdef63d0ef7c038f50119fb122d9f7fd6bdfe5c9da8a1c6fb3f15e4dc8ef235ee15a419137bfa0fc69587201ecd18478d1dba6e17124fb73d59eaadff001760945dea6de751e56f954705fdcb51281269ea1abc984236caced8741505cf27dab022e6c61467fb7598d3e171de5584f7a385214a43e1f13a4fad3deb294617b1ca676519e3a326619ae873e9d8ba2bcb4d90c9ec0b4032c8fb6d603b70f565ae3e4fd4ce4ad07ba52186243d1c10a1b74150abcd4539740e78aecf830552e6cf2
+B = -60d2a3646575577781227cd11feed4b28ba36b7d4a225c4961b566a00dcde2f4efb0178b5e88c873df721da4ed42c15dbd397e3ced5cfd9e2281f3cdfabd00c7350da145db0ca82858af52f8fc8f122b32c3cf545b9dbbadec8eacd2d8f4ba5beb465c71655fed57f0161eb5d9baed7ad1cdbdeb293ccc1c714e5f06510dcbd8d3e58685774e598a16d58bca880583de5c602f717ee080308c8b9060c298364f6858d4ecf467177e26b912015d6a9e9a72de2649096aa0591ab3d139caa7c5a59fb7e9eef5dd5786ac73db2e2c163ca85f6470531f8bd3d66b5972644465f725094ab9cdbdf742a83b05768a539ff48a8d8c4c717e588d7385cc55abdf563785b4543b6bb04
+GCD = 26feb6be47b997cba858b3f78200fcab6904b417cb9ada8af0b2abe6ac40845905d8fca55baa7397e17f2be24952d05076ad3bd617b07ea259277b1498a46c782e5d92d69aec722e38515e3a419fbfc899c62e445b0c0f3ce08b4002ab67e7888a59381ccf167f276d9c1df96ed25554a42a5e3ea345a9c3ef5e6a2236bda1fa95f3dd1e
+
+A = dfd87eb1e3a63116912102c87f987c39356e4030597e06493468d36f0a515c5d2baa8fcdbc87ee38459c2dfefc897b2f4fff810c704940aa7bf3222fc66422a156772b48d041e5743d7ae2d683b4cffaba49fc4d5dc66b40b091d27c7434a5852a24c0107b776a197d7b7a4bf4995dc94a0ba1f4cf52e63ec641422a9ff7f3f00546788a1e3f7547f44953aedbdac6bc4d8faa6c999ce8f5e01631f37c3338bf9c32820fa630fcdb1db71a58849d827e9145fe31c64fb8beac082c84a222594bf093eeef8b703466f3c93c9b7d3571b49fa9eddc6cfa712fe71bbcef6d5354a8d959faa109d0690d1ced14e0f59ebfc4ba099cdd983a4aa9ace7220be2606945d01fd4b3d42
+B = 81712baf4ae40cbc70b89a1ffa2b72de9c9ad78d7d23cd33cd0d866c83f5666787b664ef7340142e4f343a7bded17d12528c6eb210fe0714839d16e54998d2b378f1a5c589864067d2e0fda24ab671b8aa8f3d21c21238419e18959bdbb777aa7f52a907e03ce2eebc0862b0ccbd9673d32b61390865dca7b937192bb29fcaeb8c5dab14cb53414ffd4d3107b56dd2f10324592e46f51ad0ac62e3f8c28ce1e5b295d77de5a02971d7a0ff28e492b79ea66479ccddc5351e3c10afbe72e7ef7a85222b279128cf4ca257506f645f687e5343eb7fc1f5792310ba90a9dd4e0480a965dab9b28d45e5ec85d3e0c828a9c22616c5a2eeb354ef1318272250911e03b115e215bda
+GCD = f45f95fa28fcf5d223f22c9892695422dd22173cfb042e903579d73f48b8f6e44e1bde303586d914a9f7bf74232d8cfa71187425d4ea32a36d96229d9f0ad0947625400c50162f661533ebe92ab0f73958e5138107354a216717f1338042e866d3c7d0450870368f09c17449b52b19df50dccd58cae0920199041752e3f06cc8d08c4a
+
+A = -50ce4256ec71d69578521b3d16707eb6094350fe4abeb6001e679c0c3ec553cadc92e2e561da9504a4b522c7d9b6937aa701c905ae89cb8f993736d2189def1c9966ceed8f25e415f5a7d4a2fa777b51c32a26f14861465083eabe0a528b947ee7ded60ea68ef46d1b9b0e65bccb15c3432754d302ffe1a8277ddb0c1256bad67d912622536a9819efb7ef39ab2aa0552b22ca258143d90ffa312daf40ad669e3683d4854cbae04b858b40272529e24333ab91c3be2033d6242648038452e73c8abe10002b8bef0b657b5f36881042e417e67126e6c6731094d784a2f81f7ad4873b53914a55b1a786cc6220ebfe54b8e92173b790ec973ef9a290111d948b289edb5391bb0
+B = -e1a6bda5e162be758a03884738cbf5a6944382a20f29eabf23e462765c4d0c7aaa40267f45295d43de8bad61163e5c730124f227dc811e63965209220490918eb2ffb637446d21950fdd3b9949e9917f9a51231db8c4aad80b2892e2f28c72af69177dfed32d0b5319aa88cd6007390ac38f4b822ff3beb9fbd6e0631b54030fdb78fb54b520534dcf7559ee1be33384dca543f2bbe3515cef09481101f40b0676fa430cf4b7422487eab50c69fa190bb048b712a50b28f416f799a342df9d68b22675d8ad36002234e103801b229d565d28b3ed1f41fc629fea25c08bd4d5aa90ec06f07b2420072bec46e9ca146f8a188e75b0a6d6cbdf49fbacf5680d33585dad60b912d
+GCD = c54025b47e09a9cf36e5f2cf3ad8368899a378558f92e81ea9f2dfc0f91dc0f93d2bb99c7f3a49147ed0414bcacbde459f3915f48ae8c462ec286360eae10d21907535debb1edd7c5be5f6043692909961d4279511a6525218e359cfd9b340c6be7860de954ce7f921d3c35daa198dfdbf334f0e14e565a27d76eb4d5a93fd67fd0da5
+
+A = -18236182044d104142b78e76443a4119391bdac56950d697e1c95037f4ee8138a412b04a9ce583c1bbffeea5c89a61fcf12b0068d49b4b1b9c925227f3710d3665a75268153e26a71f66d7bc184c68b9036d619bb81ae6f18178a7d45d0b75d6d96a89b4be1caa6a311847d42b7199138bea22404e964802d89ea8ecad9969836181a15317fe6e52f049b0cb67962d03f25f3cf347d3c76afea5b12a13dbb9af4e2356390fd0b6c779354fdf630735724f5cb3d14d98d38570762db0bae978cbb719c08420997ec3cc09307fd7ffaad6c94ebb03926696c82de2fc4d0234b513bbce0c74373387b44dfc10d03611e08033e64c9f09573fa39af07188096b4677a21c0911230de
+B = 959ea6d3db86c81db39ffd1046120f9802d085290b7b1d3ce3934e7ecb7b5664c0e918e3cee3b16c2ebbf91a1e0221ccb62371c5e609af54e587b19e71c52bb5f101d80e9c841e993cf1d3983f736d638df1683a870d878cb7ef3d3ebfd8759dc6bb73a3f3d7032488e32d91cabfde7841a8147da3915e94951978f4dd0391708b46122cc718a49333c685f66001a852fac7c76b5081a93eaf9be803007f2f0fb70a3134fc7652bca56ab105db1c3b095917497c172c3f82972d26d4c9fb85ddfd9876bbfe120e37e1c650cd2ba7783d13ac53bab52a668a2c632b3283a244d1de59c52bb59d84665af89a48b02fa825803ad180dd5d5c924c61985e3d4ec975982bbe32dd5e
+GCD = 18600a6700a1c58e78a0dab77ec2e7e788d578a105dfe0c125bf7d40aeb2e03a65b6652edcfbde90af4672b44c316674db8b3174cb80d10793a034799a2628d8c978e4ce70623350a738b62ce5cd83c576a49e066c26d3a419119075bb1af2f3766c74a59014266b3509e0c1883c3b4eb69be0dbc72b2225d79ed32b31eac9c3d5d3c2e
+
+A = 3e48b78a6816a5946a5d1c79f43149027d84b27589f8462710cbc47b874a70f68b6301ba3f7e70ca13f35868d0b79e90ea54bddc035e4e98c7093b6e47f62887eb0802557c12c445f73ba3f5f801cf5b698d735cffeca747d35e7d4ac213896ef1dd5a65da752006d9a555b0e715b9a0a0a7e2c753426f344971bc29d514829c1d337ad4f4098aae1560912dc3c64eea91491aa2799db50b2955d9b00b1ea5df2247a6aaea2e6d15925cbceb055f2af63304cbe251a1342f2f3942aaf77d2c34bf03bb1b664bbbbb82f535bfb6678d3ce61a475b139b21f3341c12f90608e2586c07b02b169e94f8a235a0d69d2e8eb5c150aef90dce19a7c26a9b07fe3a14d3861774d67e6a2
+B = 2761ab95eae22a289564218b9188dcc6267e6c35bd3100263299a1f75e23d11a932cc3a790988ec23a7c3e8026508e817c33b7c8691fc0b3b331803a5bbccd813bafd3172055799aa0de0840491629f6efb3eddad90426f2b239be9d69547d43fe66f534b2513f55a9dcbfc2f670469a65a15a2330dc0f56e3eee3ed3a2e1a5f253a791ba04f6553ddb4268bd059ac14dc11d2786a824bcfd1a428bea936f32860683d6f6287af66d2e8b1e4417f1e5de5e3bad464f4c5e06e05357744f181ce05dcb001bd078a8e1c1ccd0d25f161f1818b197c311412251a7bf7d23274b45705ed0f0e9419317f063499826d6661bd504cef5089a622ea1413b6adb2a30cb8a46acf602e38
+GCD = 603d924f97c6102eca531c37ad42fb269645f78672ebfad8fc58f276f6c71cc7d42dec7e4fbeceeeb61a4f291b69b5dd3d859af901924e46a0db605f7e9ff203eb1fcd48456ccf9b23c31bdd57cec06c558fea920576263bf513c06dcc3df1b55a4b69648b6950ffac92b945388c05409128166692c5d6fa9f47fa5d77e75374f894406
+
+A = -17631d528082d6a1c150926ddf55fb7c6f17c227226931cf5f20a8bb42108cd7acfa284475fc6ae2692eb881d4ad4b705d13775f8cd838522fc99e32d721a8aa9eb59d85612113218c074cac2869c77aab0db610aa01a5c0058df81f98b71f2a70357ce6d61aea9acc60a51bd56b2ee906a51989e8b22787b2e6dfc5005149a5c25cf379cce0f86a5f5318b56fc0a1b42f7a9ed3273fb07db498685936ca712b374d41c268d894bfc824c2a234a0d76d1b66cc3d13f3a3c9c35c28b45de3f039e4660d3c5750990eb65a04a2ce9aff48c316d2a716a4e1fcad706802ce9af852691d244f2b16abece67edb1a3e9dd9286061f43e0861ded79ab7294823d5a97c7a219c79da489
+B = -9f1667dda719bee10b08419e8f87a0a623eb3b56f0b552a7645520b78b1926cee28b32b67c0ebc162165e551c67181813e6db559a8f07b6c920294d46c60fa717925e17765f71e0ac3ca5132e83b2ac3e45b679411c82850c676685ddd9fd917c7de8a3cef6dd75a7ac5f22aa4921b92e52d88795e6801afe6f8f5e63113422fef546fcd69155b58b881e4d182bc8b0c0c76f48b4a0ea9e278c68d101e31e096ee51cd946ee36ed3c8d27cdfb94b58d81a517e2f759cc9145d98a92da35dd26a4200ecae511dcfa3a1bb3c845ad7a95d539c63a43bd5b5d938eb7de55774f6e3a7e43abad0a45560a4fd327571b6012f26a36898848a1aae374fdeed4cf71c4e2a84330a25cfc
+GCD = 7345a8d4cf2f8a4b36ec54101ee13e57e0aae443eca251206fc0f0e714756a759fafbf36b7b3134a81db28b715504020b08cc9fdec5795fcb41b4ade0ff63b52b06f3902296abc3bbdd6589d0dda3ada2e75e41ef8356d81fd55d8cde2240ecae6054e6b0603823d45e3fb70935da77730260e1cf585f84556c6aabcbc1088d9db919cd
+
+A = 450279860ea9c8c58694bf377e76e78e087f1d6376f248fffc7a41c274bf133324798b103fe8636362070fac1d1afc5cffd552ac002dab43a81eea58e41ccd90fe05fd52fa50194a9c6ff2d089af872cd48c3bb10cd2dc9628115fdd071ea1c66d5a8e5e4856423ff1f3de87893bfbbfade73e447f2e1086c336d5e0c8e208212f86d3da351dd47bb4dda499ea4d19e96e57ec2bc5a81154012b0521dc49acdae2e238efbf48206f03da1fe21c93477849edd12ac4bcc14766470a3a4e1d5967421074eb6cc22e35d9d4ae5a2e86a73708bd45c7d450f677e922f6563ea598d1302f75c686f56c27c5b51a6a2df3638d7576212e406fc6d97941b8258be32b7541b46aa21dd97e
+B = -28bd9cd2ceaa870e8d300cbbfa75696f5850dddb6315453748de86d02d4c2da2a47b011af07e16e1c89faacc09eae580e245330f7c48d25ceb4ac00c4a49c61b837ace3b5234298f7b2cfb3a19609be56ebee9a1818b718a393f702ee72277578a183a4ac7be7f8dc786af0658c874349afb582397d06eb9ad1df1ad8868692bca894a6fafec9d9e17b278575a3fe06786d4bebddf27be21c4708bedc452008a7f2073ee5d38a3e2066d04799843b5df1e1350a7623c3f931ca6a46361096297b7b603d57bbc2de8233f6c70a58e892f5b084664074fc52d7687d5cfec0f63e2cf51ea54aa8120728e5095865fd97dc7c3336433766e4b297c81993c7e5548e61aa303bd3fd4a8
+GCD = e491ecdcd0c06790767d804f1c030479baca750dc5f21008ebc7a2cd2d81d6da34fb91786a45299d90655830b11f9e0669426c27b6052b220393a001f5fd022e0105472561b1a64b340362eb276d27faae59bc9499f8729061d5b66302b4675ed53e5b53837371883a245811d669c130dd3509584b727d551e719d301e06f7b3a85a3be
+
+A = -1ce80382cd89418a201901888938890a7062b5755837c09d92acc1accb0a4ee3394938762911e39b0dc9da36662fd5dd21750bc1583a35c8f132d36b0ac12b40c1f237ff1a12aa8bf763657971e75a352d56d7b38f6000f71322c65cd84ac43e1ab510d651e5b3852a54911dfb7a7e38e3263045a3e37e9c14b335ba7639865bcc6902ee7c061602bc16510188ed1844b386b767947d9c172eaa55918be776d85f9a81f8b9b90d7d820bf8a931878c4cbf8b3511eaff9cd6a66ccfae465729b7fd84b1dcca4450439bc47c801669681c54ac3a3cb2bfabf8e276be0ba5cd8dc5ef6c55c4408b3d5a1d1d5da8015a659e82bfa383bdd70b1ff524c56ba1a95eee1a185f28276c03e
+B = 15bb342ed65dec3431cc8f21a322413b25a344ff38cf283b309d6959c08e97837e21fdd9b1b57dd3701757a392f1010fa58a790b6c90695888a9ac8898abc9da04ba9c4a6a8248c8c81bda8b266b42d4d924801cd291e5f4b737989467b999cebcfad555b0c528e8a29cb632dca090cd100f0222e6ce289af4f924d61bbe3eff3fb5973ba3d4672d8d678043cff5bf993250ce7754cb64b19411b643f4426fd71f1b115b241d85c28e5f93b2453954c5f0a99bc28df80242ca6839c65718ec2df8a458f4bdf8754abe713469cee35a6b44b97e6ae324f8401ad0723da5b27e73c93a43ded6e0d06eaf708477ea7c5b292ba1932d6ffb0d544fb8784b123232a9fec5b30e86846ea
+GCD = 39d5bd8a23898aee733c4094756541c3833a3cd2fc1c520cdb91b541437681ea04959330f13f0c4131ea2d48f2db52ded4726b49010743e7d4f5459485a8ab3f0bb26bbafc7c19c08f84ed9f466eb1eee30d3381f87c18f107722c52fe6b1adee89c2ad39794fbb990127ec80f9a113bde1414b90809ca915de82e27823b0d816ccac6fe
+
+A = -7bfb811495141502abaa51787f4781e4bdf869f2659a4eb92735ff3c865101da6dfc129bc6fcf4c2ef4905b82730c5b941a40ef7e11bc4173ae9c4ad56b2d0882345d96edb828cde86bb090918858d58ecc75d1a05bfefcca1fab9cbc66f18986e2dbc95935cde461574930da5e15d0360501c5681e90afd5eea8075cffbd14f0608f85a3be886956ccfb6c29c636f8192645ccbec6f536aa523918711c263a07d6c2c790e2833a93e1528eda4714b8a48be27c7848c6f202764d10bbbb7c3f0fd670adaadd69acf2dc8a8247aa824d76eef2cc70e8f53a978344934768f40857ba3b1bcb69744d78106a86cebade2ea12c2635e2a31053cd68673c48bf1d42f7ef5bf9c7fcc67
+B = 3c09c00cf1a7bea3acb4360d7dd5f47f4e8349fb8b3aa03bba35bec038431a5a60247e9f3e61598a9c6ddf7f04926b28d673ede84388f75ef31c48d13a8fe4f57838babd5e8c7b3c85c64e72bd9c6dab589d254b932d835d266634f91dccbd12f56f615d3b419f28c6ac6f56a490dedd94a55229445f0892513a7f273dab04193a29b6fa8cdbf7452ea8dc25cd43d8e75b602f5980f90ef54c79f03cc8b1b720274adb4740082b1f821b394ca0e74c74bcc2b5f7a585ba476d97a12b9b0b85aa26bf76aa4de7518d12dcb57c47a1fed4783e711f1a498d45c11b740607d7a0f82d105c2194a0b988ad04edee0ca91dcac839ff5125c19146510c3d4e3a43b62c0dc3d3ccb465971
+GCD = 669906cfd7f14d05a626062cf68fb90a666f7328cde6fc589a919bf105cf5342c006ef3da8074c48f4b087fa91cb7377dfbb5d1ba167590163ec5f145b299fb51e225efe6515e5a1e272013b671f6defd4823a2ddc161464fa4f05b607bdbc94dccfe92cc64f85adadce47e96d0942ac1c192dab5525961819a2005b5f33723b1aaac55b
+
+A = -d4678ae5cb88ce55f3a66e623a7a0889986b1bc96c3a186c74c7c803d10f58363eddef30e5e275dedf210dc41c2bdb951c8af8d85c17c7fefdadc37ea73afe8dab4c83e64eea676c82df92101080d9490a0500a770c6fa23d641a3162b49f9e7a1db24339ef8e33e9e8c38ad150795d78956212d0461fdddc4dae220cb80bd738a9490abb457ea4fec31ec4240e20c9d0ba8195b25b341d8f3b67c0302c938f2c6b226eb3b3adbafb896a6c08b6f0561f75f046d7248a524df1871ba86525ffb7ee22c63ddbfdc8fc54a75ecbaec125be66668a28e5bb03f4207a26f3759425e2a745bbc4e0789a9941a23122635e235f658f0062ce45cbcda4e82ff81cf82f8220194637612218
+B = cc67d33405eecbe1d3fff0a229406a19a85ed02b217e700e10f0b86f8ce194334202d8d7050b3d7dfbc2e0b9f1528235327f56eb560aeb39e364d95717dea640158d18e171259a0d24184db0a94e9a4a9ad70094aa250a350b8b09542a22f620ce4c8ab3d8f64f0c18c5f46b0bbb8c8928175090d55010ec8315d159574e7d34c1a0143d04cd77df3bb90087d09297fc89c0b01e54544e8f33f83ae7d3e8fa21f58440c369a259f082f3a891459f23bfb98ed959cdaf23a9e322a8a2f5dbf547540ecdbe18fa4edbbb30e65ef80e9a143d1c22af38696e4fd21ed832888437208984b5e67493545e7736916c65da14ef6b6b6135a20cbeb1e332f39fdc7af9f2e1338e541500de8
+GCD = 20bc27d10879a749f8731a43d12b91a27efccbceb90b23544db8ecec9a3ac2db2c4402ded97dbf6a03bac6344bca62fbab91344ac557f8537c04cd4c65812199fbe1a40aaa1c484851550735314f158273d1c927b7dd516d5a8e8ae4a74ad6c27ef8f735cfc01dbe39a6cbe2c4a5253d4cf713ea0df14a0d63847f12b07268f16fbfc66f8
+
+A = -359246f2eac8ddcf3c38f520c0bbac164018d3782fbe37acd9799c81b6550e5ec9328f9541c05602b7e7434660aff0eba05e5fa16b826f89547fd97e927a84ccef536fed4086abc03b4b8280e607fc9cd8f0a1bd519ce2afccc024fc916793e270f6089c5c1073695c25f34bbe20373049121b37131a1d4aebb288de2062e3f9671a1573afa852a782bba2190dd3fe6fe56c7d6ae8c69e2d760a908f7c7f568e0a762e677ae4b678b984507ffca8b74bdebde1bd69e474de634dc229a1a58d3a4340e8c96cc286a9ddb672504c6ac0ad26085f8fbc1e817794c6bd5cf81010854534919b559e7a31de5f855c6ef65981efd80111a6e2e25ef07238e0950a61745f1d42f29bc93231
+B = 4953790691ac06af76053bc8003afd5ce5a2bcb15b26a026c80a1b2c1e66ae2ea4c8ea1b6714f60bfe86f6dd3c45318bdc12bca557bcf58ab2c6dfe984c17ed5c87529438dc927d7871fbdb7398cdcff8e2295f986e73a1b6411d518ab1743929c01d0d49fc0d16f7a7f6aae4a2267bae5e041598011c2a915e46f3c199975b2074146fb1e9a1c9ba869a1bc198a4bd612ff5b0321e7158612bf6507827319315cf63f68d97b02518c42d8ce26f91ee578db9007b23646596327f0aaecadcc7ee1e3d35e1db23558b3aee2f8cc0d6daffa802d911c2ffd7222bdbad3e36e13c58c7db6cca38a5a88a080476ff268e372613b6e38f8ae0bd6e76899ba78cd9d9ddfed56573dabc07f
+GCD = ece242a01c0b2c4daaa38037d7b22421b66e321870107df8635723a9287c30dc81cc42e80cc2a14b62c23a117ebab6138d8cc5dda2e3dabdb29903b00b5a784b571f83b62bff71237405db944b32df92d156664712e8f3209f99cc5d94513c5dc34043c10c6473c13ee2ae9289a506df1bba78d3fcf72d5c9a73c40cdc5a4e4a435e27ab
+
+A = -a04d9eb9730f57284b12d00ebb201f305b4d30638162b089c28fdb75f737c48d55311e3171d64c06297e08421e3c6a6bf26ab82bd6e2fbd1f331c3a02f561f5659c5ad14dee297b0109ac2494cd526773bc1ce19fc2da5a7c082bafda240356d2e6737f18e96ea7a3aff1ed1df4007efc2e6dc6d06c87bc35aafb2bcd15f9e09570b6d689c4fbaa6124cf430cf7524e2f8ea5459c344f586ee190c327abf097b34645a61a5bdc69be8b44c56322aafe675e006888c33c2e908af1d0cdbdf594d10b7356d1b71927344c42aec71a206864ed527c43ac7dc0968d0c5511e157f297d79c47bcc2525227ea0358eda3c7609917ccdd08f7fe08828ce185d08e2b2675ec22140c808c820
+B = -800c2fdaa0ba8d01e191496ea282dcca877e0165de2cd7d86ded996dbabf860ecb4c80f8ecc69493a38cc56956da5b3fdb91d3feeef139ab2b08fab8c9544e0ee12f837fd045d226b942667afb952f17bb9abea344de050f9776655c62b3f00aeb364856cf929c9962cf5183dafcc6fa3cb28b313604adcba41738844523a856936b5e3e9fff898c634ba68bac472ff2b591b14ae70d1a36c410fefcc38a2d7c03b94f6277299129ba6e94953992072633e77bc4712fdefe1fbf4c76668f5b43358e94c2c8b6c55637b6ca840f034d5446ce137c006bae422875efdfe134dc04c199d4b7de2cbbb71e66626a5a7a0b2af88c39f1cb558e99b29ea926c049197eeb5a8171f68c5fa4
+GCD = 8e7e3e423b1594da5e562308c2e1ff35045b92092cf91cad833a0f64a015aa3119770011029ea3d6ddfa9dedfb7c50e761329f50a81e24f6f1900121d58e5fc38d74a54f27256bca7a2e953c6140f1e1db54b31f1e7290c8981c68623a043553e4bdc95db4bd8ce38b9d00a52b7478d918ab867636e865f5b09ef3463a752d68389d0c04c
+
+A = -288c00722c67a90bbd5c69f7790f11660fe134629607f12bb665a59d4f6a0a23159258d320dc2efafa1f2dee51538ba795c2d52a54eba9b8786db79c34e4928e3cbcfd96c72d5c480039894b13f17832187ff784ce3ba8df628502c28ef28808ed29ebb55f0e4a52bb666b2777220776c5db82b070d9cd37fe95e0b23bd797ae54e8ac5fedb7d0574bfc029997f0ff13757d0bccf20c7d7b9c007cebabfb3172d1fb1c1ffb1b1fbd433f151592fe2181b4c471e84a3e2495da7f100ce76cc12e7a1c7c0d17deb6719058467d109ae8bf2148e6904c82a2a6d4c151d4a947ebc3bc967e485ef47b95a656cc665c74035568780d3df278efaab910c0915735eb992af2f1fff3526666e
+B = -5183ae4ab00b06337a82e8246d5552a4d9c625b94674ea59aea13b2c9e289aa8ab26b95548ef1b24c275510f7cc7b752313ff568bd3d1d9d6907a0f1d4fc6876e99b2d6b07dd9976525368e0f93261baa7e8d9a5e166d9f84fde2862d3974e5e468feb0bf991ec89340cc3c609cacface3a3f30228b094bf480f95bc26817bf9dd379fa19191a3bc9189e1c6fed5fbbcbf8561e210ffa2085a0383c4287bf20f84b4b88f2e316350a48d73d0d4d39916d6c2a28e3d44a0486430ca1dbf46e3839bec6a859ac8233a90624458a53f096739c23ea0594c7e504a8a90478c06ef568cc85e45c2f77b84fac31b960fde82020a603cce8f49725380a00769b7c06b002982d1bc4866b1ffe
+GCD = 53333be01b3e2bfbf04d1677d7b059e069551affff56a6a25ce0a78b2b4bc2226b538cd30f61a8e0ec4ae2e28ab648d6c16a5eace16898f4ea9c69de6fb618a83273caa003ddc6cc33a5165416f6374df02f8ff3ca9467d38a8bb2ea2c4f89547cf14d5e1fd26352c3b7b5d0946e3ccf7ba658d86d1f1358bf49058476a89d22b518cdfdb6
+
+A = 43d6dcc73cc475695c33b6cd5f806ee120cbf72dd0df3f40a056dc1d90deab0282a09244684b5bb764eb6d4def935fcf23754b0cb376e7670bb703f4871d7464411732383b8b4ed8834821bb4213b23776ea16c462848ae5e34f77e347dba312767571c12699a8b1fe239673640675e5bf7fefba62708678d74b4e8614cd4305504764575d3abad7887817d89aceaad2223e65382d6eab0d03a720a55205a8329f5ffeade0dad46e680b840e3867402e68e120a03dbd0895942cd4cc2302da6fb58859a6c3192040b1746c4a26f6e5a4a959883ffafd1448fb64ab5e9909df0991c11d71e998f579d60074d85042444e8cb466837abab0029819def11761fe6a8e0476139ebe85736
+B = -a8387576996c5a7e63059d17bb927b8f5751aedf8dad083267741a637060c1f8ea7d1ebef5cb6627320ee372e271613bb95b8afaa48c3e60daca22e27fa3864d944f386472153ece6c1a70743f81739fd428a17a876f0f5db6d18c1110e3faadc6049fe8321a6223c1549db6ac1d3e5bab32f4570da672f1b60b279ad40ca61285afecd076a8a9e9f330fc3b4e533b44a1295fd105ca90ed7b190db7b939b3a53fe28968e44de0f6b983016301fd1d2136718fadf0c36b1c557c098ec1f6b580c9abc9df42fd5adbaebbefd4330a818f33c422c2d54104e25b6c31d7ffa88aef3da32cf962884df87a0162f48e3b74a599ccef03cbbd20ae67c0362c96bf248d41a652f040c10b93a
+GCD = cfaf67474417ccb841f307f55e471037ac53c0a4cc8131e4d288f829f276f93a3dfbaf51ed3028f29e965dd380926426a2d110a4a141f046af0c951531813773359189d2e717560e4f16e80e4bd630a8922f0626a5d05f5c4bd9ec66422ead6b25b46017d1ad636cf9b8e7112a33fe66bdb9d0ece338e56b4bda1c877200eba011e1cda86
+
+A = -43b1765ff21cae14f810af47a4599ddf4ff257c5c36e38138080d0c3a0cb22c7151c393133fb97754962379534e859ab5a3c5138d3ec769c809149f19cc89cfe20536b8f38ec476a70a21a9a497c49dbfca5dc2261708b65fadcad68fb59575a9dd29ef241771b905511ada66b8bc0fbf3336b7ce3fe010de13144e9c5b1a2d0b63b2b6011db36881fd880079d44d3cd73f8d9cd0b22974d25663005465416bd2ac5caab054ab7134259527ef90fac99c771385ab68dd22177ae3dde085a38f30f1e1b3fac99f8f16cd5083601f1f1c1afd04510124d4e970f9ee410256aebb9ff43a4769fdd32f2d452ce1ef2b6c8f68fb192ce601baf6be1d55c75cc521fe23be00230e26b945308
+B = -43c70d187d9e79f1dad18ee1b898e949e1df6cfa49cb9c2a9b1733ac2bbaeaecefe5d716f151204c338bd515539d5f01523c08194a70d07b60ba1f1525f011d5d7aea402a8d2f266526790228b80558f029a44688577547d43b397d87d0f20587a0f55ebdda11cd1d1ac55d7c87bdfd24023d799b4aac3c681b799ec16d0ee1d28f1b88dad16741c063be1133e1f90d727f64c10dbcaeba18a61c6e56c411f4e856f5738ee59231fece9d0cfa7e8577f5bd34486defcfe0ece976562fcd8ad8b4ccfa3fdbd60d8fd80584b56b16ab604f4e0413042fc41efd98e735f83ccaca3b9023b124e6014997fdf13964753172da6698d9eb7e30d65ba2938a8af05512e7055b984719fd0aaa8
+GCD = 1c316c0d5e61fb4eaba8b5bc86da1d78b34c76107ce50b1dd6e38519ce8a50b4c04d5791ab9af772be819db4360b44b066734e8a7744de11ad75d8b7b8723976fb242153bf15f4f4cf71a15e5af6a98eedd89596a1083e4118bcebe7de4ce492361fb2dc8242bbad2f81ea0e0c76a5520cb8ede35be10d7863cf8b898b04a5a8fdb311e818
+
+A = 14ee5d7fe36e16531dd89969abc3fbd6bc45fff29e3d363a41ca6ad5b4271522cb85c72e260def6658cf42988d76dc32089df915975ee73248ca207d11fdb8da81aae4d1ed62ad53c1696f1d5912d750f05ed82293a5d116fe7523d6530da742e73e6a976942ff52cdf7ae146ddc745b5eaee01d63e12c492f4e7ac0c1fcf0dccbcb828db06d49dd87ae2d1e3b9b1dbff15931b6dbfed01a1cf55528bb62f3f22a0a1c9ec283205b06607afef4ee59aadb43882cdb18a60d0cf7a4ef1eead7dff649382aa2f450efb47936f50564d648c80142b107cb6520131bb2c2db2c54446cdfdd5f84aa1b267685339d3e09dbcc02e3bd810340cecf93ef7ad3718e9d0999ce37e831a7cc8a352
+B = d8a9c1e97516ce24c7abfd34e20b367082d2e85eec086695e8b95c9bab784ed721ff8c7c74493ec85a2112170dad1848a43282bcbbce953541e4d7d4496beb1e3ffdc719894a769a5c437f2ed3ec7260ecf180c1f2736ab728ebe994736f0f327711408a0777c0cb33b170e0f4f6aaf839a0d8442a26891456eecd65ebab884c678d56d35042f246209ca2f4a9475f48b15c385e68318715cd89aa17947850eda3b1bd29a1bd95cd683fb9268f1f091ce528c4287a3a27a3b8353305a4384244ffa8ff98c7eb0df6e0f07d693d3487dc83913cf3027391e022f22065d9f238cdcea6e47dec3834a56cb02938fa44f44ad49bfeaaeb1fee50e64a9baa2170702006f70b53551fd54d02
+GCD = 1216d48642c32e8dd3de1abd62b02603c90b32fb8b6ab8e98cf00fe1f5806ebf933e0d5b34d7cedcbab33f8cdf74f8869b4ce321f72723c390b745cdbac65b47f134eabdf9e622ef5690475df063111237263d171bdcd9b7f80f729061b314904eaef91562a3287598220aa6fdcb0d9d3cd3a6847046de1201142abd674bc3e8a82ba39a7ee
+
+A = -2b327f24f4f8ff92ab8b3137c80f7d28c65f76f9d2c2426db47c1ed4e1d6d12e716c8e21d13c0688fb30fc47d306b607869e2a97988db123cdadbc357268a8b6571e1d66953555b039ac234b574573038a6264211c1e2594ae0d9055379cb9e4f9504a4c3e90d1033d8545c9cf2b5f763351f99f8c0f92edc4186bb78d3232074613758a1d4b915d7ec3e666de52497a54e87ae7f5854a9517ba3d43214b760aab51731014b0b0f2164acd8e01d04802ac11b72951989cf5fdb95801a81a57558d1d3c0f62602a493495dcf4f99e8a47b29746c6ff281a6acaf6353441bbd8330815a480b277ef40014d6a67e72aa89f1335a1648e7d135c47da25d4ac42959ad00a1337522e08da1
+B = 428651f337aaba0b83f0d52b60953200ed562668d77a6a1fe750438082555b4d7191ecb9d15efc8e454ce79afca63c09405c7b4e47927d6d5e47176644d71af3348cb157cbdc8a1fc289328d30b1779f355376787e008f372ca4f13b54f583ee71c5839f86d82d8aba253de43412eb00b029f73a99e87a60e112ce39437bac479e02ab662bff1c7d7e58809ad1546903155145a80a3b21b7e487ce854f6e40d1cbb7113f4df8ee9f2d4c055816a8871fdd1fceb6cf34538df43150e54393407eb2eeb9e92b2f8bbf8ffc9f76dffa318b2c9324f2442a29ab2af7de49ae2650a64c94a7f22acf0eba12424a38ac776f5165311c51f54bb8fa8098c18eadd7ee3a3964e654b93f5ad53f8
+GCD = 2b39e5b72535027a27e17a7b9ecdb73373a641f5be8ee8ca14baa8d2df49a3c3c20ea4a7493ad866c7f52dba2d3b2076f218e0395dda52109aa4d2a48505c01c8011cf9d6418d60802fa1681f573506a9788b77d341d1794950a9d686f32b470bac1452ef0334592ef9d389119e9b13c4e4686dd51709374634afd7a2da2d07a87127aa479
+
+A = -3a2c95f50db9dca8db619568d3742bff52bec29269bc9fa73de925cb1e6671dcbae8be1f0777cb76ba224444df1fe7121255bb67bfade578df0dcff07c5a8b0d3fdec2d6c8edde5fd8bd74576f6fa48bd8046acbf273727bbba30a885ba2780464563586f9ee0ea7b92d5e65920595d6915d75da634c70bb35e9ef96a8ecedfe3dc17be2a89af472722f3cd7b5aa45eb0293069bf4a6d7e26b1657bd7c2cfa86062385383844661b491fb99ce7d30d7eb3601c1a595b91c5aee23c9d66581edd0e5a2b6aa53ff56b1e4bea7a45aa97481b66e17a4ef778b2f1ebd05b4a1c733c79eb8523dc5a9b9697b74d5b87e30097b0b19a3c01b00b5978990199545b3932311ce4d7849c03b16ad
+B = e698f97f39e0aa713b37d17dc632904c894381b1b99a0077ee11c61b084b7bb7401e5c38245fab1b58f8ccec7f5de08af6985ba179d7e15f6425fcdecea7d03f14686b07bc714dda33af32bef3b8234adf94a3b2caf91c52cd74b877d4befe24d27be970e7197171d29849294872324ea11ab399d65df15611d4002005b9202ae50c1091c6f41ff46c11be9e76692cd7823df2920958df5b3867cef7596a10b587c91d70db5e8bf0be1e469a337c6dec812aaed55e8b0c04047a5bdc4deebbc65994a9e95f047618b594128e47d6b7b04d4236d113de8fe88394e8d01eadd657aaa2d358cf488f229d8a07b24cfeeb03019296443abae8ab266e16b2a47ffb36a3442eeaccdebedaffd
+GCD = 41e538e08a930f0494c72745b80a4c7100cfbb0bbcbcd9b9c6fb303b5a6aab391ca0315e383e81fa931adb42449613e77c971cd4df4759a51cc77747d47e7e3851bd4eb2d1c0579d43c27dd2174d29d87fca628fab8bef005657036eb3a2859d04a27b5efc87bc0e5a16f96d10107ae232614659bd31db9a0715d07aa995126c1f7c0b0325
+
+A = 3c60ee228fafea3bc50f5f94fa3776dad51086048e49f9e59e52ffe7758a380cbe46e82c200a9739c1af13f90e2e2c74ba6202ffd14612e7d1f916eef9dc920140792b7b6cde61b5a3b2543cf7b2f230fdb4b509ba08390476a3a17c3c094be07518dd6ba7c74b1a1f1d5ac50fdd3682e3a7bd0217e8cbfd5e983e93ce3ebd2d9a56c6882ae93ff1bf491748b21edf90a900a470af82cb4ed9cd474caae3f8bbfc70f9ec7bb8aa4fdf6ee7365c57532f3e86a763028025caabf2bf913b808b6a7f581b7485bfe03d27a1f3a2fe2bcd1bdc224c55ce5e779619a28e95bcfbf04764f579aa24a57685deda25b80c29a00b0ac9e27543db9700b09dd7c17379c1674416577b2323d52dba6a
+B = 27fa3d4297b81beb81a0e7bc11dbeea5bd6e72dcb24fe8bcdb6f6cd5b249a4bab93538974c5fa385d8441679da2eae4b773ae85b4ba50dd2748183d483b9668a810a1f7551640b0572e9d98bccf1033574994d57b5bca946ec3585ffbd7167f24353241d9e5d56affbabca7015150567685c3c061f823f25b2c461c719e2399f1b34817a5badec396dfe013b996b09f98132c0a5ceb2b4344b3d184bc8d311bec363b8e97f75ece3fefdf855bf8926b73275219ad56ef017f992fb548ca91f43be23ba12ad090d5c78d771d03ba3fc5ad0b5e193fa5fce3fbf99874e72934d5a25cbea17daed8bec6b8c9b5b1ddca4f1848f00ea4446e84ce6b6f9bb5edf2fbd800c3d4a4d9c463a1084
+GCD = 14074e50d27d6938af1ad575241daaf9978627245ff8cf4416945013851cdd441052057322f3ec45520dc2eadccb83639fd8a17d9dc51133c74f2fc87429b9f1ca74f6204cc41dff4f9abe1cc28d95fe4f3eadda225453dd551cdb43a84abe586a1adb12c53cba7286352a36128d1a9dda87c6b2485a7334966ee645be5d882d969539906e6
+
+A = -fe47077a3fce7a187470c1516eb8aa6988430d4574f9eeb739b0b123267bd555aa05eaf313b0393332b0f73a6fd0d3c1f6714ebb9f232ef8f3a6d3f62377baa93ecd3f8e72afb6aa519a58c219f7f4e388cb9dc09988f214e0dbe6f0233fb39ad802a6fb36bf83048973e8e4d99d9182b4cb4334da6828b1d845868ed7eb1b485803247add993548c50addbf150ed451e0a102dadb946df65723fd8c9b84ebc925e6af7171dfc5c208ff30a05ec338bd30832b5acf82a53e97d1c7a6f1c449d6addf06184b2ab78976187c5f367a09faa107ca24ef55d8d682bf4fe284069907bf40472ee9f8ee743bc7408a2f1e8bcc09a7e770e296838ea5abdc6d289d9512a2376da8e699fb878c57
+B = 1272170c011a0c7574d6fc213e110b51ce1f5764e249e302853523678d991b9b4ae44ef7db13b26f4485d7bfd681c22a2392e80a6cfe506ed0db27ab9b255f6e0afba57e6572935976121e7d2b35eb0a7521f33a7cc1ddcbb5ff7a5759094aefa54e90e97177c5fb5d2ba262bc94d0782449a74815fb1bf16898b38e9e65e46b062b12666a506b464d92274822e9825d9c25308ae0b8f2fd818cac8babcc56c1423ea4e44c880a3b9c39ef60813f614041a3d3a2acb5f286fc52a87060e8375fc2b3d6718be6798a3937682acbec39d4a5fdf76bf22e16962e2399c8d45b6491c859051a4a9e84d6ddd5d0601785d9c2e9d38b4d0212bfb2395de76a2c3cd607fa364ca109ea3fb805eff
+GCD = 1ca8143c210406e268b7652a3625b0579604e11f46bd37d07c19d47fe7156c5b26c86f22822818ad8be737cd832f63f28a8d29978de77f92cfc38bc07d88a5ed5faf668bdfaff5ae79ee721c2b9e16a0a1a9cbf145cf1a8c0553b354b5b9a2eb3f68009ad5c66e7bdac8e5ad1e6c191bd08974039e74d67dea481bcc16baa431ac35a27fd0d
+
+A = -2f8ff241e07728fdc1d5e40f36960af699c76008e5a7c6c9332b68a6eee07d27cdffa0c3457f064e0ae95c12a8276048a71269740dd433e0ccbd0a8450dce85d214245a1b94f4c1a30af588bc66dbb175918b0ebf483be567d816c4ccf646d70e39dc3bc41729681a92719c8b08fa97c87b9123466285c58d54e171f7692952e14d1aae4de27651cc7dd0a5c5d3d5e59420d64fd9a95fe2893b2f251ba8ac92b0f2b7ce8375376559a5a30e5418712fe2263b27d516034e9a4e5f327ef928f8836fa9ecd7d6b39db40835890668e2ba29df4236b26936e66f638a34a7717483e97be9a5c2c18f102655f8ec343fd4c41cf9a37a579ba2d45a6fffdef448380d8d2abe9fb7435196494d4e
+B = 466357e65252a9f0eb17d4e98cc43775b383d63aaee61ebfc798e3d23b429d63b2f7e73d2b8916747605c261aa757d1d715f784b2c0bf4e645c5659a606d0b2d5474a110b794cefa1ce5faf224fd157ed1a435d101bd3ae0e7da915887ae5fc6d78beddd80f690c310c5acb75d2d04de439fbd6b2d79478714cc8f46236cc146beab071f1b304b056cc45a17c029748c4c34a026aab66c5f615dcdbd452edc6f37b46ef7454457c435eb997b9cffff9fd2814344aa9981d741bc5daf81e74198a39ae24da2284cf5613cd725468eb9a636381ae5f6c0a0255acbfbd387973d00d9945b1f063c28c96b4a40371bd67c343987c847e553a2dc3fd623d409e5f2889d459dfd2995d231834ea
+GCD = 71e6ad248b6d7622e69a71549e33d39325f5df86c1f397b2095fc6c08d2daa317fb71dd643f647e1738f59fb1c18f695a540db023f60b047a173ba7984b528f7c44167f4469bcd7ad8995169cb7b53c00c6b09573f695264805706e0f9b093affb72357834b507eff632321a9fe39dcdedbb4c62039a8b20c5f7e6e79b13abc3be351e13676
+
+A = -dc757f0e9bd959c4c14334d39192c5858653b3b519ff9f9f33844d1d4a19d1b95b85db433b147268abb45eeea45557bc609c31823b270d6bb2f0b8a93f4b01ddf6ffbac0080fd86b35f27b2e85dc055af83cbbcf7f9440c6de0c5b945e41708cdfab31294df29ef1cab9ad7973f87afc4a3fc8713523e9f21cd6df3daba26681b52190453294b5d31f4819ee4e4d9b4d3cf0717fdcc55cc36e473a7804c22e1d01e01812ee28a81f0ad45a37cb7b6908fdd77cbc59475f92f95729ee88488022bb7459ab5510c9b53a9f8bc5d48914e6453813ba926e44a80932ac8d5ddf14b72bc4b613f72f9d64f9116e7c863c7dfb72db4e2a2d48574988d918a4d0d46dcb582d79578e19253e75625
+B = caeb70d03d8cd985b8acfa004d209f59492f18246242b177dd91b11f3c37b763b385f2eb5456a707cf07aa96f77661027cb6b53dbcede76ca6be5831dfa1a069ac72dbfaad0eda73bb3a5277325b285b21b52afd2688351227cdcb41dfd99dbf9b8c0fb10b30d7322ab5d86eb807cd20943590b2c96d90101e6a5bd04a961dfcaf8bb128ed282d537cc240eebcef853b83f1073924939e905f0fdb78d252bb9cc994417958ddeb0c3a2f6ef0bb1da86b5b1f67143820533bc932927d1b9d96918b111c294adac1c0466cfe8d9937858e6a6652ae54eb968a3da0280e132c8693b5e815e91b041db87c6e6dad292ccfcf2386bc0baa0ea8ee125e7a542897c1f2046b0943cdf57047cb1c2
+GCD = 5081931aefb242c7dfe51de3b37cb2c1f9ec86f10c814a4e033ed1e994fbe768f598c0229275de9042b68687b2b08de512225fba6877ef62ce2752f86cc61f49c33d4bdc575771d98334521af506a724d6dca751350d8387b7afad95d2cb172a81aaea644d68b76f9bc0aec23375c10174b79beb8a0f4e6f41f07eace82140228e34548711d
+
+A = -dd1ff48cfd49a2aac8100334879743e715e935c7b2f51ea6dce1ab2e1fc99f5f9430c0ea478543b82b05f599cbc9580405b717eb1daa1c48a85fc707f34e9098b807c867e1c8a85343592d5e3a3f018b33a3b09ff58db1e5f29e55c99a62bded02e6c102e84d985ae17fc88cb3331294045397e1c233655f122f9ef3dd184f77d991a36d8bf5f77e7f20d993d2fcf769c19a5ae98956d1c96061b1b7a8683124ae7857c4650a55e89983f0d85e894d3cc6bf788dfba6fb9299a863507483e21e3fb78335e1b353be27f1af246bd13886be209e110e453b3cd279f6ef7ae18f9ac136e7f8e81072e076ffbafd30cb70048be9eafcca7acbf1c0b028241319c7a6c393eaa724b4e2d28dee0
+B = 755a9280fc761896d919f632d050bcfb6f1b6bdd84944413fc19871a5c9fb3652b6a38f3d067605052c10d60a3ff094abefe1b804c2d9b360137f0928fbefb9dfaf1f5b6b12c010e48ecc580419d4d40f31c7eeac94bd427bf5821aca27f2bcf74f44cea4cc02de5daf3f687aaaf5e98e0f31a0c9be1150f6da94ad40b5b4bf5c9fd814f94097f5d0a9baecaba51aad9aa70354e7458594a88f6c04341b8469471faff6de26ea08fff1b43779e4218598bbd6f2f0b2f46e0710ae95de47ec784dc60cadf4be6b0775470b61082ccb7f2c36d5c05fb070dff97fb817e7ea1f4682a38b7b0bffec7d86d9fff04d11dbabcebbe34b30e79a20e2a8fd805c2a3feaef910b7e29df40fc5200c00
+GCD = f501f2f3a21fbfe4b42be488a48557c0d5d3f0eed66ac01a0d2ccabc3eccdae9368d8689e57d6012b370a3a17ede6aad46ea1efa7ba0f3906b3dd4f2dc7b16f4af54cf7e5c316ae6f93104c6972fff40a80354189536b8da08884b03037dfcbe058ffdb8d2a8ea640e3f98144909633c8a6803b020df2df91a2e15d8c743ae697607a59f8e0
+
+A = e8e471e62d0cdfeac35ce8f2024c661a525c2be69e9251dfa6f2eb700e112efbdab9cf2e7b01d768f3118131aac24deb2e3f74d01063b274c2348cad62d823ed9ec525863cd26ed08d10d7a37587b85c3cca83165d3f7980e039c64517259dabc3553c5fa661c8d4254cff9d13b0f0fe98700e96f28443e14f8a71d491fe566702feb4de546d4a959677f4f391873558c30574c95778a59d0ac984e54db93102ab9112bf1f2c2fbfcc6d4055faeaf23b41cc1cc27e0710ca1eee528c7fadd691e6f5628c81af26a960d17dba8e9f5dc1c6c6ef99a8b905237a7cc30850792492733f9b96aa397511186026df7e4aee5f30f436ca72caa8ee2d0a27d6f62312ebe4b69925ecad90d20baabc
+B = -100918241880164275553412f6e1c786a90e56f2eb9f57ac71e13978b6edfe8c8a4aa5d3a14af71c4db120919c510258d00f87d3d20d0afc651c15edf737c5466f9be203634b5bbdf1027981041ee140b60f8b0b42d6b6760bd134c5df567e5a5fee3f3646dc1d6b3337186bf48b595d2d4f98fad8f97b49787c2e26231c35578fda58414979ee10cc3fa581c4a5ccbf28f93d4dadf83f37bd4a9a1b6511202ae3ee7675cbcdd9d6a5f1a0eb536b2b7a391a76ee5f2f5c8cbbeba5cc16b37e2ce2930bb0cd9d6da3072b763b137b03fa486ac6a85de3c54bcaae5ab22275bcaa249a1ed1c2a7a9b51137198e5f1c21dc3884f8cb904e89a673f9fc9bed34fcc2a839fc25b6768b52d278814
+GCD = 6285c2ef35040d0c8b2041ecb3652120420fd41b3288c7e3501618bc606ed9ec4938e02de51bfa938671e2df7cb145387e29b6a613bfccc975e2a4d53049b87f5473e4ad696fa698a4389d972ac6fa4898ed6965a02982598694c748827bb89dd120fb72f026492a80ad900444fa15dc309815aade990bf032f58f3a65c718b8b68b3576dedc
+
+A = -21ee7d30a1f4864f8c7424e1d3e41a0830ba0ba5e02954124b77eaa7ad0df95c849d1fe52b012f637e2de145988d9e5dd02c55bc4894b35c405f0adb6589c8b4e976e20b7b3aa03664ac88595e53fb3fbe7c7383bf95dbd5ace4ea186d969c021319fedfcd02803adbdef0a061386173a507d76c3b5fdbacce16624ac9df4c71d270da74cfd0fb2f490f34eaf26d974fc5d724484f9152630cecdbca7cd97605bb26b31a7a8a81a29a8bec5bee6e1f33d3f8d24eca4e6c12a0bcc881e944b443dd90646114adb67499ad87fad2f563449e2d543082480e1a3fd9504f1434009f1619947119d4e66a7eb0ac49c244fc6af09a3781e9215d02cc611bc638ff9de8fa7026801a904029fdd6204
+B = 2b16e23c0c7353c5b8da923fedc59ff6890e290a4982ed39bfd9bf02dec8ac5e60536f101fe5ca3a2a11392ba2996057e8c0ee462298c7f5a816442588ff9e28708c6f2158220a1cba2fe2e62f9665b37f5c6fc0eac4e4cfde0ed6ac215404535b68ed579b949968751b21ab96062e10644b9d74d9df98def6156a21cf955b1dfa4cb0292cee914c627fa83ce60529b12a09657c7e40e4065ee13d3095e335607f1e146a61ceba5038163e54a86d22e90f6d6c09ee68d1d078ac59fed7ba5c486a8174b9ae2683ee61f3792e107debb0edac53db8ddbcbced97de930d0e134f6c29b0a07c1d8b0728a24847da9398f9d5bdb1516e817aa7da301bb123d099d38fcf2e27ad6fcd5ccddb649a
+GCD = 2e0e88c449605357a8d4ba914318d98187f1d945aa8aee2280d10b6cd3c6a0121a94313e281d22ad1710378c607099b097c99ce39607f366ae5403aeefe25ada4c50c642deb44774b9fa0995ad3782456521114579370691a679124cf8cdcf70a59744d56640ab94ea1f5b4302f87ccbe2039b94367ed8cdd003fc9c4053f844de46df0fa9f6
+
+A = -1b467372e79846807747663ded1dd3010b777d1f98b5ebc728d8531764ef57ad7b7e8276111394cc4473faef9096cbb3cec8666e72b52c209a7b0495edc6b4493ced65576b5491837bc4986876e09b0b526a4fd8144e0c01d6c39ab96f635f4c8a143e9598b429895b58072ad67adcd41de4acfde80a986885f881d99bb58484ea49c40673b532a1dcf3aba4f5ef56302e10a88e04b693fcb4d89a2c86fa41a4fff44ef3f59c14e7c547150b97470d9abfc6ae9a4a8545422634609f2bc26c955493e1d124e58b26022819316a55ff933282b686ea36fbe59f81641dcdea326c07fed68440b9f0415253a12a56ddc40a8565e8ca53192d15a8cdc152817a16455d21d725eff93a81177360bf
+B = b9e9a85147faea25aa0cd2b8836d556907d288ad420134ed69c06e46bf070b4a46f4c6f599c5962a014b8031a8d9da2b91bb271c72c08b2050cd482eb5f89ed38cdc57905dc51ed09f22cd55b663a96ba90c15e531efcaa02d3a68a3f3cda284cdbcdf75241db9d42002515daf7bd6d6d2bc5f8d07f22d1e9e4fb169b5b1ee5d5327d466c371ebf2a65f27d233d4bf331ed1a10997d8eca020204644671ab956e014b6e01e636dd8c4fdcf765fa17bfc87de62d8679b2f2bed4d78d358dd3ac7b008836c1f276e0b984165f9968644e4c9ee44fc2cb00247ec7ef077e27e708e68af892ec47ebeb6486705b1e8a29e7887d3e2590372140ed54393b4434c59758d3383352ea571e20e095
+GCD = 7953b4954af555caf5278b33990826784f1f240affe3d05c5a14f0e425b3d20f7137bd9e8f86c2cadc8111a8bd1e5a0cae0ddb5cec8f6277f50c432b2cd6c0e82c8bd3e666535e6ff059ee44d50f94a50fffeae9e5f0bc480350f779e606bc1e559c1f9b7046142269b2d4a54bbcd91d0e489aef9c5c78dffdecaa5e447684cd4e76e8aa52c3
+
+A = 301fab800437e00e4e1f76f41da718b0c39715edd614b31d825c1250dd59182d70c4edbd4e1899b480e1c88da4419d1b782136d4f36f18146cccd64bb8873a0e72d5c4443c35c69d9fff6c860511200e50289737c6e2ef4ad9efbfd35b99e1b02bd7bbbc7af36bdecb0be436b04e963cdf6614156f5746a2242cc6b4877f2c9416b4d297e34e032fa6298031e393a7e59a82b9ea3ec5f3b791ce64e101df21ad1371201f4cb1a261c281ca65d0ae5b6fbe5d7ff37c0a540d624d7e993a8b1e3009a438ee926937e4165bc079d13a65f499fab81aaa19a03fe68280eebc099064e5a7cb387429f5fd1632f901a6f85dc466068fcfe0ac68c8a11f2e1cd8e1f077128731e256e5451439c9d369
+B = 4640d50a88fbd42e566a5a8a35e77f1cc5ab51da7858d4e0bb38f13ec258a310c9ee878249f9c40ca14b821d7382630fceaa2429a8d6371e8ce341bc77381d557f1de98f118fb732e78f43c27682c998bce30697c29b26964bbdc8b5978040516399e7ed850e5b95306aaf3f070230779c647e086d44bba4049cdf0bc6b1937ca15c5f18de91c8f48cb5c95b48113596e0c395f99c613884dce1d9de02771571752ee275f78fd5593c03fb50984851dcef67c83065037c1086cf9a1273d43ae59940d220407912253f100df63a93dfe00920ff5943fd43ed5fc6eb114039bdeac3d3cec319d86b7d3d7e13ee6d48a73772f8483ca40e2d0f54724933e001937cdf0ce3be5af8662c01144afe
+GCD = dbdafd5d80b8f16e14bc37a44c6063adc1684dafad76584f6b7a2effd1d66791469a0a2c1bf1a2ebe54cea60a77ba399de6bcc59c6eb3fba65d87a2fcecede80730e7391f7fd70ce03dfbfcc891664106dc8276ec7245d60f5fe619f35e8af1841367a4cd0ea692d0e46957844baed6b30cbdcb4ef922413c9b91c8c09caecb6103bc85e026d
+
+A = -a6411d8b4cacfeec18b8011472665de329990cc68a56df08d76cace8ab675c06aaf76d43e726160b0021702303026fe67f979a2cdfa7aea084b7911fdf29a9cad14b31d750978c1fbdacf574112585f9d5617803b5d4386cded42ea09fd412870935e3986ccedfbaf394145cc51067da2a6a71d40c4b87a3d453721fad9ff0d12095fc3495427466b8e13eee53e6df7b196abf1130a43fe9a7c9d23fe6a7f2e679ffd7819bfbdac1d08a2e21aeedaf9e7613081aad7149aefe2c3a7431567b1a2c478c88fea646b4d2272642cbb1c17137505acf3ece85f92a70b52cc0bb41ba594794218c732f784600b6e08864f1a886df9443520332bdad652cb2326a32c17cc093cc6b7123fb8687204c
+B = -7145db96f1c153bed1003420b73be789e7362379b0488dda2b6c63d93c837716854fd14eb96460ef0a46ae0af8df9c31d61058d14f46f301d608e9ab37e9ac290b2ca3e72d2febf1d27e51577643a0c1bb3719519edba0a796f43fd23b865d20645fa4f02a90214fc33cd18d6147da0a7879392d214e4c44cb8e1623192d5f31c253d3a030a70d24474c862965431a7ab96a3681dc42182076bd532730ce6d4d9537914f1a76425464a34ba3efde35dc11174b24ffd9caaaa17e86ca46f7d819800426568908658b3b7cebfc9c0fa730dbdc48e0d89fafb32cb93d86762a6d71a52bcd785645b827db4029e17f2b4abbad524548a19a7b20060d1460cf00a688850bdbb0a932e7aa2ed9f112
+GCD = 14729f8a59c351782121bb434c363ce47e30c961b42c8222c9cd10742939a993352bea5c5874813c6d3f4e5f546993029cce710ca4760f5af8b5e2ff4cf1cf03b154f054c0dfcf3e604f0a2da387e9f540ec9ae94c59ec19a30f7272b912047451a6ef1251ae1b0e4a9dcacd80d7772f017d2a9a4163d82fe1da35f5d31d9d27163a1d6b7f3ba
+
+A = 3a0f12537bc676bcb46be8fb49547b5a901fd6b66886d6289a04e047ebf0ab81b5257b15c97f305c33a34fcf656d61d67319c1f7014a9043ebad74e557b00b5101acf830dd3162f3c8f6b6f028824d9d62eae3be8fb8fd5cf961b72dbafe4eba8ca4b8e13ec89564b782daa27d3eef31bfb2c9e4a19d9a6b2d26291694f7a11c5f1b6b5c99cdcffcd7f5d72e53d56dcbdc6a209ed00b6d9412f8f34c05ba0564d8c63b1124c559d7ffc736b864cd78e8b6bb65c9673331095a6356b0add4709683efebede3ac0205758ed5f7233b1fcb5f78e430cae962b7e133bfd0374068d488f1400479fd02db2219329e39e79be2329f2ba22dfc614495cfb583e5d86651f29c132d81cad9191f59a5dbc
+B = -5e6acf3c9ddc3d77ba6665d86616f4533bf1df9b158669daf15a686e377d433314efa9f9bcd51accff0aa6c9d0eac3768a4cdfae63ac9770bcd5aad18a4abcd8864ff8f97456f702c52326b6f93892ac3a4774f8a540d046d4113fc2b0e93e3314d3eda815457723c81579a0903a8934c4e422dcb663b73b1034afad7077c71fde0fea33d2c7822b87c38c355ec586f6eb1d9675f6eac4247864913c7399d783feb965714234d1d03ea27a92d6bd19156b0d09d416d681d597fdb25b4dfaacd5213dac605be992253283ff7db60ec77fadb2e5b482610b4b4519d463ec52e279a664c58dda1540af6ea16b20d971dc93a2fd3c0c30c1e60d61276d4af49df5b4acb879fa1e74850f56084ca4e
+GCD = 3a2c5b44a5064167641c19592291b76459b504f91153c6d2e6ca1f57a69ccd1832ffb2e85f4df74937297eadc669c6a2cdbf01dbe43ae20d136fe9fce459962f43039d24213071e484ffa4c2ec5fa80277b80dfdf68b490a90c13469883de9130ca625e41115640a9813614a68fad1d2c00dc31c8a2128062c062f531893a2747bbe187f0312a
+
+A = 10d4de652bbe8a322997784cf5bad12fd2e2f9d9b7962c6861583afef9c14d3ee4609db7e1cbd4cec23e1ab39ced85f1977447b4f46aa6cbb695e784fd6524dfc9b737a76d0d2c33bf1fa94fa2824160bddd6d212d1f4a756a2f43ce7493c77ff707a54ab26d937a554e7b7a854c7cdfb1bdcaf85726e01f48b8af42b1e33ffc24e6503211c24852d265497014dcfd143b5ae5c23c0ecb6c88f6ca75f81ab9f8c79db587ecaaf284a306b31a9981d58123ae9ef0d0bc99c7b5eb42c5af035b2823a68cb16f1e7cb1e1a33dff094c6c4d2d0d18f1f97ed93e673e3fbc3337d6ffe7fe64354f892e3c5167441aac34739493659eaa9c044c65b99a867fcaabeaf7082b520f4c7fa5c48e83ff3609
+B = 15da2d6e0bb4abe2884b7999b53d877933084aab1daf634a46b51fa37748f5c1e4b852454c8e4af673a18ee4fa063090076ac153c0a98b15a5bdba88deb33c6e4b86b9b5c5ae4c0333a6fbfabc27d8bb088f34c3cfcd176756fb7f10403f288b2cfe54821d0047498f814b712d976511b132547f26e12e255cff9b7a2498fadd3aaff503ad9ee0b2268516c464ac337451448a19f248680d6e84e3ce64d69f81ed71b57c86fa38edcc6ef869429da9db4106a2058d17d426a65b2aca2c8bf9da7717ac6f9d855f7b1e0d9d5577154ba5c03e9de0fa635fc52d0a7188cb3651a4978c6b3be889f69658d4bc9295937b6456c86c2f6f7ce115d0ef74c002680438133d028734115d9b6017157383
+GCD = 7bba9e7b68d528e59057364fa2c407ca821c04b42cd57212890e2a50ac83390826d2936c4ff3257d1ce399142beb17a5ffe3005208c9c5afde2e4a539db8a47884995eb282ff0697e43030cf497803d0b0b5a9f74035cdbfbd82710a1c3515d05a11f5f4b46bf33c4706a199ccc13324705be9faf653357adcaa60402963a415d4e4ba9677e65
+
+A = -2a32286d420694070f785810eaccf9faf3c402fe9a977602d0f3362a17adcc0f051361b0d1361a3e43d00f0f241ac16d6ecc3baeda126d1bb799dbef1ef3a53abcaad456a53ad591080e9692b5e2f051c786b237b7bb54ead6d22b189c4b48a5bfbd98bcb2a045c6fa8eaf2e36d15ac449baae8e5f786b64cec976f8bbee72990af2c42ac5ff5d7d65c097bdf7065c5ad6567a3339705c4d73d363ec6f73cb1528eccefeb485196379edff9bda8bf7204bd4986880583190ced58dceb5911534c2d223ee5f98981ed798da5e889c232db0a8de0289326edbfe5dceebbaecc7e1a4671bca7685713a9025cd72b2bd0e40b0e63ef7cfd6fff265da67351e9efe2e3848179e5d4064fa0cd21ed1a8
+B = 18051960929d074624777849a7142e48fc75269fc5881ebbe6fddb5c9c1d0b5bc728270202fc7f3f9a73ecf79339f44e936be83a4d7d2aeb8861630851b5310267d7fccf92c0d166f6434ea01cf5c4a78e4511b95f22467b4736ebd30186d804e133a08a2d8a523267a9c11ff629e6756fa24978250fed9d8c475f107f7657ab342c58a96ca9278b238f0b65e8b4167c06c244e5d7579c8f45dad21872c90c0bd253cf8316eef49cc4dad73cde0a638e4bd694b7ad701d01d0b55edc6cfb13fca9d8ac6fd803e231260b0ee0209b2a45ef19d1f55cb152661528ff6b6924ffdf572e81180eff67723700ea9fc2314dbf2b73ad9a6de6abc45219b633fde77985bf800e861910c3bdad9fd9f87c
+GCD = 891fa5ee53d287ed91eaf87f3136e9aed12e000993ada8b756d5022fa9138d33c86400e68887ef58d04ee6a42dd51d2562a55f456dcb6ad3b118fcde4f80a44567ebd338b225a2214c2feda5390daca6ccc4ce55a6641acb71912860db28cc258fb854ddc8095a854d4dc1c74f525e313c8726614ae26e290657176cde169584b82d83b2979cc
+
+A = -5d7fa06f9475db9b54ba5674cb1d9c4d81ef55e9a3743b2ecc5b000855451686b0aba10cb0f764603a9c0b69928966629faa1dedfc9b6b3e3919e12207dc7b9213c6e7b16751a7f7c3d26f1365b726fc0cc25e341ff577d58a31c5cde5c535c68dd72fc81cf0a848a3d28c4a4199e53361fcb64d80fef4ee54124b7fa76789fca70c4660de90090a87b2cc73d1ea4380ffdf2a9f9486a7cd62e2266753993773205dcb982e21fe27d959533586f868ae01420314d37d66bc0a466b67ba13c535d97ee4a8101d568218116d090cbe9aefc2a23bda9ba714061d83607a25d2277f16a34eaa6889b7f053e20e34209fd34cf8423886099720dd50b4aaeec71278182f2e8cdc1d081bb0c6c38096d8
+B = 17eedf5062d82945024e10ecf121533dfe302c8012c6afa237fc0eb51bdecb5848375c149c51fd81f79a80c5d1ccb9aff7b872d895e5880f164c47f8b40b52171ee894b824a82b3e8255498e8c0ddf9f1f466b6fe5342da89be535ba928e99e72c5c51ecc1bbd15aa4a221f14d792faa85ce9b19a2c979c5ce6cbdff1d6e62a4ba9aaee1b706a89afa4c7b795391b494678f837eb587da774d90561712b9ac7c8a95010ebf60084d20d1bd01a91c72a50a6b8e4011c57378ad7a20f1274f5a574cab2ffdd83329e5b33617d2ba50d00e0b379d307672cdc1d0b771a8cbcae92a27044d4d2a43e2bac44bda083a02255a26ac3acf56201ae79b0f231fec51782a9acd75e60ffa4e52be0c11cd6f0
+GCD = 1dd8ba55606f1503b6d013645e8d0e119e057a7e4ee90516eb08343eadda2eeb39e2e9fc7999be9464c8769bf5de5b36bf0807ef3b44f6d85e666e79ed845cb608165abace86e6bdfa1872c004c2a4403a2b71ef09defef17045909fa30b7e26c43f26142877f1bf2f1b5ef8cf07b4f6f88d6f5ecb6e4e946811334bdabe05cf1d0ae07a4554e8
+
+A = 61bdfa4082551ffc776bbc80587b0612c9ddd02715e821752cbe72f7239f5b9c2e48bb23de9ba96a662ed4f0e4526fbbd1f37f70cdcd81e0e6c9dcdb7fc74788f1220a1a71b73198fc2d0576d5ef6261453617018f5a3d51ad386468c08e18bade2f5c6488c7ff0668e5ad765df4d2dd837096033e40fc93c113ec071abacfaffb8121dbd3c9aa87dc5bf9f5770d4b300adf6b43cd8009fb75e7e426644f8a1734b701ce4ecf385621c2b7193f08d9cbb86fbc80896c46858b9ab3cb3932d435c0d55a8fd2095922a1300c9d4e6fce1cc43e746881c06a222a44d184e1cca48cd394fc1ac6a52c5c22d435898dfadbacd7fd7d96c272f3ad5fe4f8a3ff2801f3b86216780051fd18cce2a03042e
+B = 1841b502a53c90738c124ff1c1f0a0b25cbb29f462ca883769795040f2063c860a1b606902a3cf56619326327625972bf562e9c495ce0554dde38aac4600b9102f17838afd232c39b8f0a6ed74c46dbd35da7e8078ad5b7a56b41a1d89e89fdc28c678b71131aa4dfc2ba207cef2f44dc8e3b146b03d8b6ccc5d621054bd3a7e0bcfa6d59f78d738d359477c4853773bc683ec6b8916a757d0e39019b8633f9cefd56951e312ad130482a2b502c246eb63fd74d3a1e1f21bd3a96d56ca665f065f662f8b9d45f0ad8a9a564eba4fa60742b273471331de14399548ae81505af302fa2c3c1b457a5227fe6fd6e008379e99c3b2dc7e3532ccc41a560053e922160e2c54a3b1338f585b82379c411
+GCD = 13d301acb4f97a5deb2bff5bea432736aea5c4682f3b26327918b67b54bb8746ef6c498d7556a8ab5a443c42a62ff72379e6924b441fe322bde3d1505d65236edc66674009466b21b70a14391926bebcaa9b820ca0229c9599bd26ee4d4050f7dbb4298a87cf6811cdfceec16130fc196ffa41903fbe5519351d64dd028bd76858afeb81170ecd1
+
+A = cbce54a50d627638d68719dc2ad8aa9c8bc25ec2a9171f4ac0c891ce70f0cb0fd4a7f4f79869d8651eb355520ffe2c953be20963054f8d8989ae5fe0c2f0d48eb4485d6f9084b59d718fe10de0fceef4b2a9866931439ed5b0f3c4be53140c1e87ef3cb3e66f7a799790e31c7364c2a98c556d40c49045e953b7cf4153864aff6b8c552dff0332e6e7b402d66a19aa430a9ea09c2721ce969e6a5295827a88f5a631f8a96d37ed4c99b27554d3aeeb7bde1b4e1cf8c0acbdd21ab32397c0dd1da9a7eb6a0cb466c67744623cbea929139ae145ffe5643f3046d7f8923c053af9b92a7cc5f9cc0652407d1050b7a31058781a4da322032ec2c112c1511e96c5d4948bf6de83d4d3d60d949a612
+B = -13db9562a14aadfcfc42808ff5d3b8380bf95ac8050cb6c0ce97ffc3762ddab501b512fdf70c6b806d69127d6c7c01dcb92f22aeb94f4db24ce96339531c99133daad4f7fea9d079f6dcee9fc9e901a777c2b1ebeaba74fb017d3bcda556fe2a8c876b4888457e5235d2625b13b97ce3dd6158c127bd8dc32255b1c9c7545d53d51e4e662f6d22d5f72009cfe2c3529aa17347b322f9b9ecf6604bc6a31251960cd9126fe97b0e90f976955282834c9316f801298739dae6036c8ab90c733dd4db24db4c4ee5575f41ea9e184419a1ff34ebbd9ff6b04b63740450fb027f8a00015dc69ea4cadd475205b70d1985a36daec48e4070169f005b21a4a4864327499313a0dd24949e5a1dd053a7068a
+GCD = 637c0719e5e2fdc4db6bafb8fc01eeb160309c12014305e0ffc8b5deaab31ee00a2e899809f0cd1c7b13210f77301958a92133116274f5ecbc96dd604d7b07bc243804823421ed0699a9f846796d43f4e96a674772a4b4ccff5b1d37e5d76965a790e3f5594e4ac32de6a62b4ae7bad8e972acff07c6cb59ea0b6627623b527894a6718a9e9d7a
+
+A = -41175f3d43c5b5df8d77847750dccef392f59908527d1026a4fb1b71e5c439a6b60daaf146bc6c4ce000e3fc19cba776209655bf238db056a679714dc9186b014fbee234d9f158a55ee5cfd5670d7a0501e351feb43f034187bf0ad68436e9202a55720ede01fe166e3dde88575af35b7149219ccd824515a27256edfba2a3e107913f9aa9979d4a6aef9530db1a4fc399b8f06f9f33c4ef986363b10766768273e494624a7cec1c7d7be0b1e9aeb568d3bc3e4cf01303ced63b7412722e3d1f6e91263c6f4e9d8364a0f3ba56a084c7d5a9e41a930397c6706e0991dc1e9a6b7512cdb72a12bbbac332810c85e35ec1418681ebbec32419a907c0514712ca50f9e69d5be3cc37f1ed50298dca02
+B = -454b6acfc90b59a3a0743bbc296b2bf6a9570602f6a83af372878bf3ce46302e3d4a878819a9b886559175a06449c5711b6f165af543001f85971a60ed526897dd2af746649f598a6f5c3ef06a6562d97716c4fedb2875dc13294e3f94d720ca91ea04150aa336754554ab6074881e52e6475d5cd2513347af8c7adb631ac8e6a7c3302202bf81188d09cdbfca0a3415c3434ef8f863724e00447847164c52a1cac32f00c3775ceb063c296926842f435b0e7f2059a5f2da1b44caf87f8c236bdfd9ca978868dd465129b25f988a1f8df8e905608423f00fca26a43eb8c0561b7f5217341f3babc032b47e717825c337e36762c63f08ad018d902d974427594be8fa0b86ead421d70e13a89ae925
+GCD = eb681af7393b187f21fca2198ff863011eb1c6d99f6e0658b22489a9b8432b533a00ac70cd1daa9a2917e9a3e1d65a0c52874be3695934766a8ab1482983a616163f9c49a6f8cdf4db7de27b607b123e23cca9072355109dd024412467402f2c01c94921f6d22463acf3264c19a78dbea0ef59a777cd19e03e1b2040c0e5d07b3ef5f34a5d6a01
+
+A = f858558cb1db4e261cc6ee60654f1283ac97ddce36507cf5ec6b24c0dd9caa9c8ca7a937a5d13bc3a60bc630045d7fd99f4303eb6d477799338ab37a65cd313379076eed330a255e17671d6c2c33114953141977fce29b40beb0de6c0c79c83476007f0ff87412a4cb893bb9f68a052dd5c7bb1e7c362ed2f7b4c0984b3d34a70e8b72465eaf1b9d982286ad65e45e37ec1be754ff07efda0c9acfadc358431ab519f16af812a99bd041558808e61fbe20fcb0206945dae9c6c0bbb07c81dd35501b5164e02f64a7af234ae130103bee9933454e32ea4652e0f2f58d1fc7eea3ffca39d284113e7098783f41b12cd7ee1d74aacc0a90b07d23fea9cf9953b95a8e84948b309f217c17c8d7d5ce2c
+B = e738d7c21b448b5f4604ae919d06022fecf88fceaf3c24c8f9cb2629cdac6bb9016ef26f73e2246b5672fb3829ca4051c33f7d6e2e5d2b6f63c779862255f551b625843e9c10f15024fc047fcc04026137ecac41e4e24d0924e1018844d3439996e3c040b6279fced710acbf75433cc4d5a4b9d208b98bcb901c35a818fb54974a09ee3b2dce637dbef2312faf938f535e7d78d65110b2cae6bfcc47ede122247c105119f0ef5bad8dc8e7efee283e3287eb91e26544d364ab1c31141f3f55b5b07f1860eee83038da17dcba83c265ad16055ea0cee46a994837e4c5fd5316212c993aa772032cb83bbd863421f645f9cea873e11d42c3b82a5e2407fa615cb40ad189c0f837c07dcd0a94281b51
+GCD = 1288a82d090c30126cc52961274d35f1a3a0d393c54274a1d5d10a9b9bc4ff7e64867e6e21557c21d3130d522627ab7100f1b72bd9ac73bd2119a1164785b791a4da66fd4b2aa8dd8e4a7e7a1b72e54770cb2de3021453253451483610a2de66a2d2c273f736df753ce774b1d65c0052080f1cccb2a238e1bbe932ece25f7463fd42f192f2a46d7
+
+A = -a34bf19c4bf4dfbaad2ae8c769541962518f36596897ce9383d116dfa46eaa49a2faebacaa5611b6f27f1b6a5ed321641d3c2d09ac7f7ca64fba57b592cbbe091e43581c6a734398fb2737c2714ebb721aebc37567f70da1eae034aa7e8e825b0602895d37554c6f95d01b843860500b76e87fd20f42feb339cbdd90a964ff0cf11b645cfa23691d1f2ba11d54a24d8dc6c4836749527498029fd38d5b3bb6d3b2f32c5b138a11c145b085bf9d661f9d1210919661c030575f141e965b2ef7ffa6c5409519795d5a9eac22fcd9ecd28ce0973fc71aac5cd148b5ac39666453633ab9683d42682c73b30af741e3623de73172a2351a03a19e1f00428c851cb65696b59fb63a719af8e6b939547784
+B = 21ca93267d72bc085247c0b37912d5aec67c94e28ef0db16466762df92220a1742e63766e439fe9cd505a098bce1bac0cdf6a1bb082d0fe8337ee86e5c21690e2a724a83b3775782804ef1d7792104da5d5db9281c5723a29da8d4eec9736732146c8bd3a390fadd83b06859b1d7ff62786bb8af4154d36042bb11c301d67f08a445afce39a321da4118cf6cd265d0cac2cfccfd4c5d1fc9a66b9cc2d0cab919a00d9f13e8d5960e25ca1012bf16a4a00487038c249d502dba049663ea693142464845511961196788b83298878b3d76d96c42162e37964a52d2677027b2fe8c996ea9160f9738b407e5876f27a106b615be5a4e4429b281e9d969c13fd90832d2f4853af222af1adc20e432b48b0
+GCD = 23c1c49b6c10736aea82a11344480c57c6f3e899517880498748c436851fc82f9bdc27275c1ed6f335e6fcfc91f8cbb517e297af3075534062374446e46dc720fcd4bda601c5dd6de2eef63e41759d7f5cd29e78bf602a3a45920b7f11fa00414e61ee99f536ab63a45b6e4da04c2586ede05f31453b7e5975c30959e9ced265f4ea7b2054c14dc
+
+A = 65943a57f03a50300d421a07be6932266e09bf72e995632ba0277b8fe73d12d9f54a7351a500ed4c9ff5a91eb6681d84c30fb525c3313e017dd3169666df1636f260d2770e72a0b123d83506ad0218b21c4936dca9c76cc761a44fef022f76dbe33b700e25408404bb932e29158635da68d41c4574051fcbf7a8ff9a4d0b710845a88375929685cddf2548f532634326023d098fef56c5cbd257cba7defc746b6dbe32a6f7070e1f9a83196d152715f551ece17cc8413b848d4dc5a2ac704e538ebb1710f62a2b438d5b73a296eb2526bf2412ec920c9eb59f0138c4758d62fe589e876fe990e2dee907aa401480649c8ba8c54e8f9311929ba804b86c3175cbe30dfd258a71f310967cdfdd85d3
+B = 16de50e465c619974e0de401885b864394396dd1812bfb7d269e0770f72d03ba4a06062d3ab44645402ffe4ba69455cfd4bb6c15d601b642600c3c2cd3b11efc41b5b4791ece7f6c423785ef9c21a3589287db7b15438d740b08fec883314920bf351341e14abeccf18973f6d56ea686c47b8a35adf9b978a150316e2b2f2ac6469e1b88ff69361bf91ee9a5977b6e8b7cb4928a5467fe6e0af584fa51485ed27cac4d1e83f3367a39fbf3a9561491061614d6a09f3b55b214e032faeda50fab9c3b6f70602ff12d382c038094755ff667b6a5d396ea2251cfbf53c683e103a583443b0b34b8d2c94d3bd6ae6ef1efb06a8331cd7341a7fd0b85a240a1c9e2f7b7a38feaef40451c1ad614813e422
+GCD = 4358d21e8819bdb7fa6f4ad1978b9ab92adb4cfab6251b7448db6cba6eb65c98988128127a21ee50c122041267885332aace74e716fd6a0dd06ff2a2a371ffaaebe812ca919ba2d4bc00126f79ea1d6708187a105e05e4e23e07d6b45786a6f949a8b7f38b6f610daef78127255aadcdd9d958e8622957c4d8a939bf99393ce1b254bbe8290810f
+
+A = 4433403140ec4f8028ef0877fe83deeb9cc93f5a9cae3dfb8cc1b55ca1890dd06cf4742c45300167e473127eac953f54d2a834151ef50f11ce926c6d4c3d5532e1e35258100d7ab78c8a4cbfe80940a5ff6d203bd24bf4495e20876b756475d6fb8191253dc557182952d0c3b70d53771231ebab1be2ba3b3fdde24ac9a0de9678852e38fe0ba436dc3f2ccd0244e623bb1e62934eb44d3b37449a33bb7204bfb046b3b4efa61712d25afb08872346c126092277ff7027756b3536f3152eef2460a60c436056c227ef58d5f181da45f0a07a5ca486e9560bb2c49a7b24c8b6aa5d6df6da60521eba751a299b8bb277aa878c8609513bc0af28c191ca26bb5533299230621aceb7c06443af85ccd2f3
+B = -31f90dd532422ca4d6fb167b35216a0c585a34712a14ebe0aff74ca15ae9816d0fb1ff0c292a5eeb694eaa43e40971d7dfdc88049a9bde5fbfd4607302d39c7868da8b9a8b87bfeb9b92e62f8b7947d378978394c82a0ca79d85a20cf757bcb420228542dd04aefe0c83ec75cc97e6c2d91f38c979638a9cfd498519adaaa2118ef7048f8ca6250c62e6a3a25b1734701161847ce950157cd5fcc869bd596bbc16a2e5c015c71458361cec83344c410824154240af4e844b8db36359f445fdb9acb6188c59918b6965d192e0ba731775771f46a6b2616ef6759ae37934e1aa478b5d02d64b3a00d2db22455b9cf8f8b138693e2f6cc9cf39a7269cc0536ee22146c111d41cbc4a5a890611e2829667
+GCD = 929fc56193af43220bb8b258caf55d20dcbf9b4c5a9c72b0151fb2e676b7fa942d294eabc38be689d6dc4f5e1ba4e441470e81cfcfddbff7b4e6d66414c3aa3f1eee18f360e6bce779a64316bad7a1914f4112ad0de6301f6f478d3e34079734ad2f510e212863da53588a8fa05d2239c4f72aa05e756181e61d6086ee3050f99af82dabaecb38f
+
+A = bbde1c851190ba2a157615abe5f4606590734b2da23eeb9b40b25ffe9154fde0e3de53eaf847c18bcd68ec474b2ca80f34861fa77a93e550aba514ae5b9ba9d718dd0e8667925e7a59609bb2a9e7f98bf1175cc0d5b75ea328e480613c9858f60ff1f3878aab1cb346a69e0a10ed5882f3f37d9a78ae647b185044b44f3e98a4a1cece1d50806a39f56229373b8281326d44f196ae7e94f2b0fa9d3c3ae091baa2c42407c5306bc2b7004462d17cea7f37b80f69af8775271958e5493644cc5eb11bd310180b74053c43cfb3be85704bb030ed64e1c84820da93d759b02dbe3e37294bfbf04e83bb1f4a46d22de31ddbf0e7cebe1058cdf47287ff0831881991572c846954ecc70af72a65a18c58fe
+B = -c436bb823c11242b634e38eed617f460b6ae4d34058cbd124d1b5e24614d68172d13b3dd61bd9f3cbfc906d68e19311b72792139d1ba0dcb555d476037c1385183d58b89440ed1f7e57c93740053707ce4ff09286f5287e82f58af471cf6289480451a1d61836e111584a1a3b262916e0e895192ed9d45ec24832d3c9bc97982b167a4fa09554760a3927227772bc7d58be6ef80776ddfc60143844e90621e537a41250a31a95ee700534aee6b490b9b708a803bae8f06286effbb8f2e928869bfea564893471eeb27db6ffbb3f203b6e163e0d558258496b1ba171bf84016b1302f8f0f18a2113bf5ef6918b77a065b4831526b3ba70e73d768c25d6d91b791aa09f641a5eaac9d25c2b33d6b0964
+GCD = 1184caedbc857a571e163d9db99552ed498c1a6eef5abfdf0b2f655dc8e5f9538d9c9c371a2fbc2fadb2ea8973066364f8b211ec862e94f1d7d15242bd5106a101cbee70b6318ad02ba149c1fc19cf34c0e11f7d99576840c1ace56fe31e35f2f33d36285250a90f1837453d7a89729406829462ab55d7591dc00ddb06c9852814f42e2682726482
+
+A = 13229e6b4023589b758ab6b1b54320380e7a611c80e48b87c0800f557e58fe6efbbad12ebd9d9597956737d8340cf26ca7dfca35a14d9dfc33460eae6b36c71ba0976f9fa8cba07d17f2edcbc83e73e2f2a34db103eb6f5a9ce73b6d4122eb8705e88e68d67c3d77bbc1d395ea33e70d605a9a90df8553e953b4625ed108a4556410475fbf14d0da6464aad4b4934b66576fdb0c9f85c9e04f75c92ef4afac6b5d38258705d9831c791940b6e5426275562969c64cacfe7235bd0fa566a2def5eeecf32bedbd0eb90cc335de21a0649bf34d5503cddb8c17fe334f65c47af6eca7e5e2779ec4ce6711efdcf29ea699f4ac86466f5f40277f9cbf6d3dba662b62e761dc491d26f81c26e89a19c69e374
+B = -2932ab66a01411c7ed6ed0942eb637e7bee470f1c36e26a2a1c957c0cd16e770916421bf60c665dda682ba26a3f31d10efde61cf0f596498f0bfdd8e45df480602d0dd8eef5dec44fcc2686d3c99b2d12c0001b0a1a5eab96b14af69f78a03920b280cda457606a7f17ba86fb8dbf0eb322ead4522ffdf57b2374607dc96323cc5c2a6ca81f37675c381d693b8dd0abb6711f3bd1b794d8d2ee4b00a34d4a4853061f0ca86fabd98b9070d351c5b27077b99ddbcfb61e67bc664b58d7a4d115a782c48e1c6ab08adffaad97e334ce506dc0fca0c85b7608a31cd81d24423575345d05cdf2b10616adb367ae8cab299c2cc757329cb2796619eae279a2f345d898119cd7586932e5ba38f585335ed89a
+GCD = 3176f95620a041ad21ea85ccf6dbf566d4089638c14017e351e874e39cac86aef060358ecccc11845f179f498b81842d776d5d79db0268a8930f90b77559374567c8759c5e9e28d95bde79c78f51787052e7c67280cb8b17aba50156f05a681ff88dbd525b4f78ee324126f5baa8eee83624bc38df080a8d0bcbabcca7098eb85ed040eeb65d16f66
+
+A = 81ac8b57641306c25a78440e4fb8f1a8301b842bad5ed80b7d59f708cf57040c4596c3f95e89e8623d48b2e8c73015e32d039af51232cecc95aee4157153c404691a3232035d9ec5b53f3b1261772cfbb8414267cf92341339c4fb5f3481cddff4b0cfc725bb341502d005d02005542cf734a49302673f927a2665ff7f8f1b0980928cfdb1a9b06a6a41613e07c892ace3a94d1ed578e9cc057196851adbc6274aa4bf76930764d05781a4426bf9d92823929e065a136d4f38a3f2037f7d833ae4c24117f0c63375ec0f9bbd87047ab778c2a632875990ad68bbbebed593dc95dafbfdd435929096e66d59bb91e405a3da74482ab7a37173b142ef88def69f5830cfdb0fc096e8efea7e826f1fcdc13
+B = bacc4162130805583c89d287960658dabaf4a6072d05f4b79c6f2d152b1bc088f3ed7dc3ae3d366c8bd55e6d94d7b4bc8bdade587f98c17fe7198016f4dd12e4807641920df3015c647eb749221c8acde393086f5e83c0d3689a199d0b8ba228b439d80dc12a124b9d3e5f610357fe2201d42920fdfcebfc2eaab09b0b7b659b40983d31954302a8ed64285125ff214428a190fb9eef80c2853fc42d2ca482133ae4b8b12e5fc384e0aedb95faa9de4395a42fb5c7c80c9356a0b093a9f838b4be305d24c73c216a4a832f8bccf0bef1e2c1924064198ded63f57c874d1bf6e99395d35b39f87bb25ba229016d4ce3a285b3e981221fa22f6d8e3f9647337cc0c9ec247ea902331f362e8fbce4c6877
+GCD = 5e8e3ddae831f42ae315136017111624aec5d2c4f3ad57f5c408ee94dd7f2033eb5f48f21dea9476db60aa02a141c39e45dfba7ed531c85745ab2b7d923abfbe74b382d71099b26ff5988dde70ef696a2621fb369e369f6288f91c1c1934a85fd0aca79a33ff77db1f698ec095da36c6f722f9746844f8554dabe0250aaa2edad199f79732fc4cf1
+
+A = 22d40cd71e86c8760a19cc623fe214619a71947f93e618ad04a8e2b35a34c74da0d3fbabe2fee9e0c7ba5b6824b524332d4dfb4b292d8921f5ae59bc023cab10c4e56a65188cd673a994f53ebe7609dc32efd20d79c945dd766d9024d51af8ab9345758f4f8b0a56d624bdbfb0b63238fa2516daa5056913c68cc77b3a83296c10bf9887e99db04992b46da9f1c989cc9f9e5ac46e6bfabc7ca421d254a5f02fec1f9ecf13a90090ee997b099696ed84f7f1b2fb3129ff4a8cbe16ffdc5ad1017e8efe332535332dbca34763b7d34892d8a4fe4d21cc09a4458c09992428a5d38a99f54f1c3d20f9aa74ee8745f91fe6691f98c952924912870964cda20ba6d10078e00c82e97a3a0f926b00d7d088c
+B = 46a015fce18c8f9dc8873479cf61171f50de48f8bb5abaae95920fe57f7a3f3569da8c9b0293e7c66188635a316ff28b7226d911ff9b0ec050f0f850cd1a0c50f6b5a4bc1220f64651d2195f5c97f5edd01ae849b14aea2aa4ffc38eaed26a74b55b090d86da7fce05d0cd29d64d846955b63452ee23311e7ee98f518dff48042dd4bca7cb2aadf9afb69b5340ff7e28e17fb926206e1ff315a6f6aa6137d6163268a8777ae6e7f59986dfff870fff98f54f43d38ffbf9123742f567814426988e494ef43ff1c21c73de26fc16745b684159bc54be81ed8bae9285b792db16b816536d1579e653a0d31b65a2bcc85bf8167c3c0908ee82e8a20eb806552976ae21c523015885373cd14cebf4ac1c5248
+GCD = 524ac8b2820605cc51b8ec2b9d1f283c8df0e639bdecf4b670c30a68a3273dd08e9963e964c5bfd1261b8de70eebc776ab8b02f5cc141705f39e7637170c283df86e90003e35bb16828eed7fb56a8db2729aab01efd8296dd205fd9f0d3946565908c70ec148db9c1529810a4eb9d9e10e14c8ae5bf0fc861a29b41d1f3ebef0e3399700866e2933c
+
+A = c3bc1c27eeacde663a096a178a1c56dedbfa5f5860eecdb3b848f38c66b9d96b0cce7db956fd9a44043bb7cc83b4b1c4d2030d9b8815d6a1eaad93950e9c084bff5349ea60128568a7c51c123251338e087dc75b2ecced7b67676d37ea3a801a49f5631debf4f42e2117a54ccf57e22157c2b772eaf41065bf6dcaaeaefae847d9233d34fad1e12dffafadf0e22f052ee2f9329b150f5739017011149df395c856892620cdf539b472eca4acfadd353d84bc72494197e95c1202a2e69c356e41d4482b78424ea0796f35037e2739c9a0c98201b1311eefa955ec0ad9563dc86c46f7c04f5b7c1d468e30eb02daad35d5ca1dd2771c8ff4590c95c59c08d58ba56f2ae29f0a7297fe7cddc459822e666e
+B = -1e46ed933c3a6e199c42e47539900ef253726f519fd4be30b11056d2adeecb3137e76576babefc6251a80548f7badc138e1b0df7c52c8e178ab128046791ff193dcb6e54b170b9f0f2bfa7d755028b59b87b4bc1da3564e22f8d78f37dc6f35f27f8bb3a60f62a0990aab45b1a227bd01372d2e443f13f355e9a56e60d064471774cfa06821aa47d8a07daf3fa30696160a7b7ff4acffd98301e931d9707a7c9772a37925787f7796fdbc21215a4a8d77afe94ebe8503ce198ff901d685751ea6fdbbf71989431ee18d2f6c1ddefb73913b0612a4202c4a43250bf0c6c7b16ef3ea258970f08594edcd478962314283b8d05ac90c7d65cc76c85ba3a0d7b018d2f90a06646bca1d3b394ce8d2538555aa
+GCD = 1f87a51efe5b0fa59caf2cb864ecb1b2b1a00ad8322085d975f0bf8fcbf73f195c58f1cf1e3561ec0f7331e1f214ecf913d9e9de76d8fc6402948642b785c1cb36319360cd7ee27387919cf36080109d1ff9777eed5bf95b7fe2d174bfbf67bd3dd81ed985721244682176fb6b54c4730107b16fe41e08105c2afff1d4edef299283dd9e82cc6cafa
+
+A = -190e2bc8d27fdbf1f10b9b43a6f6ef631ac1aeb1c57a802f73de8624180544e3eec2d09a796ae97a3b3e01943e26aae128a7030d9b5a0514cf88dc2d7054d1b22506650fdacc18bc4932b8dc3e411305b73061a5c7e3b3feacce25f3d6ad42eccef4bdb2c762500345c6eba7805768c72b03706975bd09849a804a84f1e8307defbf6ddebcbf9e81bce8f313fab1a6a7cdfb9a8107b184f2ef6be4a905a2d3fdfb439b20308166b4aceec4c24ce125458d5e3b7d322d107bba4bae060e54f4f4ab0adcdc9709d1a500c426b3369eb80b730ba9dc74b5e73d66d2938aba6ccc472dd691fc989ae8e6a27e8e47a3b358591b2437991f274bf1a8c16f2d8e017b0caba6cd984423f06c343c6739d3ec1cad9
+B = -50d6bdf1d4918bdd8e5b8c36447c6ba21b1dc52ebf434c69feef9303e2401a4dcf36c1ba935dfd67ffe108cb2f21cb045ffe041cfc68a0d463e8288b51dadad10344241e660a7ffd4e1539bca21ae2da4fea1aa10287188bcdd4e4946a4eb1744db38fe3c66ec542f1d79b36416f660a0ae6c230a21a90d972494005ece6232b99c0e758e507389a8e9028bfad47d0e97e4a09fe69a1775132b005453458ebc5a066ec5ae780cd549228adaab9a0427390e1137f535eaf1d468fd043be5eb5a5fe1e6df48102f5681e89f8c0ea9a9973e9755d424697a1c0b5e6629f1b7e6a391d360b670f51adf89a615aa09ca48eadf4266482afb7cfc9b1ffafae6000f386e9f55df77df85360e5888a606cdae5a96
+GCD = 384d8cb23deb11876000a97f36c0935bee4d62203096f0ec7f9a4ac2375f66829547986e3e08870a0ab9f96acd1b31508a4fcb0fc657a644917aad211922b960dae44f406f05fdac72e1814bb0b61652edb8bc07e21b7ce11cc8ab8e18898836f21ec94266a4c73988c76c79820164335d1e4e014abd9be600140b2384afc6bd5c98d81d249120569
+
+A = 3a109be74dd5ba2b070eec2a49725d499fc2d4f23ddffb288a7ce3f459643237955ab1e0196fb9edb59feef3298a410cf712b3e4211097d2a28b87b514a72c9927dc6d69bcd794f304f30ec0b85d56c0f8a4a117e9660b5d5e585e19721db6281e0994a81245f0354319e03669e7651343af29d63a78a8a32d3f9ded1fb9c3bcba0298840dcb707b9d71203e4423f65311b8aea635d85520adda744567afeeacb6ec23b0ae219525eb618e896ee572973ecc3b6e53cc54b5a64a8add76ee7f24a896594175d0637947ebc330fbee8a77b8f4c1afa092efde54a935f18b991785031619eadae7aab9d06f930210dd2252b53009214f232e8db7d8f2e740d0de2ff94472da081c13e4e4d35c8f907eb3b80
+B = -132fecbcff4a181f2c8d0dce9d6c59d3539ac5ecdb0cc3a844c55c64904df3e1e37a6d6db34f19d081a516deccc0ee5f8a1648fcd7f9b44421660e504ba3ee4c680c7ba78535d5c892fba5017644d0ba860fce39d7078c03ab902ecfd9676aa24714e35fbda79a9770f202bae311a977f50d86398e8e3ae5ad47b5c2f72e90126d01a554bf592138b8ebaf838157303fa3b2c3b0d998575c34851666b0d6325eed741d7f1ad4c99b930f702167acc3b3091169a31740ce87d0714f5eac9cbbde8a3e81ccc12f809d18b6f3e5909393b3b3449e8b8bc5d0dcecb185b4e0abc5a9baec3e381367ea4196ec04b5a2ff8d6da984e3eaf036d14b8e3c70ff879f4308a3e20818914b9804a691062bf1a966a780
+GCD = 3b53e7230757053e0ad86a2ee8dbeb49fe8b60625e77dcaf1599b765083c6eea2addb26d2a8a421de10574410f207f33a24301d412eae3f6eb08289b977a48e4e6f8b3041127fb7bcbf5a8e2f4e9b2c13e5f0622ce46dc8dc9d8e8697a50ddd7a37d9764ddc1859a44e47d184dd30c7737039216cafe6931bb4c8f5816b3ab56dd2fef1ee219959380
+
+A = bd88fc5ba0cd6bb11e28ea720bb5b3dd3b3fb4d795934cff5f258d83ff90bb13f0d3ac4954116f668ec3f041f4647006b308eb2d5dd9e903a610c788948ad99f12812bafa89a599f424876ff6b5ee6ea17a1e821d18682f8e028653f71c96ac328d8cacf620e37ed654d101b6cab7b83d02a6867fdbbef746ac07b7449dd9380443a00951e28d0bb62450059ba69c06c487b3fee5184a559940551adc7867c6363db1df203c42708d81333a3dc2b256deef3fa2f3598f924d8be811adc0508ae9f826e84aec1fd243dd385f0c20c27457e648f9624b97ad67ade150efcb5230ae16f4ce42a0ad7b61e9c8f4b041245a8678b5d545baf521cb73ddf555ae9fa2481f1fdb817872472dc8ba6bdbf49458aa
+B = -3ff6520cb83fa7df001bf2f8daed79b497f6bb34e7edc8cae52c2f94159adb79127f5130c639ca55e605b76d24a4ef54e53ddc7c5696c6470a89cff447f0fa0331f41b7f2211449a22c030071dd1fb45505018b2f76e2536de44b06bab358a4d42a1f71a8153e39d62549720d28dbd4161eda32e6eb8867d3c02b5caf0af66a5927decabab1a73360977afaa0a65da7c275b85216fd71dc7d9875331e634bee302bf970509c788e3cb4bfd8b35573b8c97cba8b909f781a2730c300949d788c6b98044213dc7c9004c6012b9307206723cb8fbc95608d501288b9a5eabec461092c9ca76a3e10b79f5718fd56944ef859b32ef429509e2d242720c4d2d46b10dd03c869bcad2c8312b71dbe18b29591f84
+GCD = cdb6f4e9c29d299805159a1ccf5c4cb64dc5e3977f9f60743eff5f005381d4a67a5f42095ff7e97c82e68c46fd5535d5f36091b6136d4d59ca551983f2c37504320d3eb72bfbfc449da9577ebf4ef2088e6b1eb9b2cf8024c8bb6b1252f99d93f5435258d1f65db5aa9f036f6bb0166f05e4b43c28d2065d49c779fa20fac69110a69d1eacf253c86
+
+A = -4ca1aaa717d6742adb7fcc95b9b725ac07e4a0133daa94aa7e6a5fc0ee3aef231982b6fe699379550167ac315886982515a4007526629457f65078479db3efe0913105a4bb476ff2db16918f3763d80717cd42c65f7034257a0ab1eb840236c8f6a15814746cd12cbe3f8c5bfc771971b4b2cc20d231e49b1df10fe8e3b5fccba169d6efdd467d115fd706edf16b3730c3b32d44403752ae643ff79a20642a6748f2413bd7a3298c4bbfd435ccef4cde649cb101cbde34dd5420483cfa0b6be3aed9b3181c93a1507d77a3304c41694c0b2430d24b3fa3c7c76a2c838ef4bf59b0e5b9d78ffd7c91df3bab1797a5000529c18dca21fa12a0ff6c4281acc9f0f63ae51f44b04d6e4952e53288033e40e908
+B = -6831b24e29ec0b9923389233d00a0af26d0fd2b9f575cf63b06c0af1d7ca36418ccaadfd0dba06dfa2c6daf59d0d6fee6116f7a9d124072e50301f3a4549a3f90ae504af55eabbc50c836728de3304a55d8132831d8b14c7024cb3d8dff78a98ccdb4408595fcaa3c358b7a6919c7ca8157deb2e683a81420a25be56bb53babeb3427faba3904b811081d67790c14122be5af04202f621fb17735f66aff5db598db15f375172c285250de66c011804d93782229feed0f06c35ba05d9d95c67fd62b53c0e7e24254a474d94ed7e147490f468657308d30d77731c416d78c5d3e4c188c431ceaf0104ad21439b2639602d5e336bbb86eb502b61dc54be1111a45ad71e05aa945f662a487841f2e1ad23f9d8
+GCD = 185561aea368640f959192c8a920128db7ca628b3d1b2cac30a13a1001b29ec59b2fbf2a489462adf3bad76bb66d2f5a9b7f0d075034b09d80ce602639e923778ad60f2640283d64328af605b82475c92ddc9c58cd92f792b2ca6a602e7c09ee7bb20487e673c65a65067d4c32aeacd91ba63679bec224769295a926d4381b9d72f80a8948837bdad8
+
+A = a1d7dab703cf1fc6ca78483d9c6da86b19d3b851a77b2e010c36aa5e86d4327066cd1ddd345178f13a684d0749999f84f08a851578143cc7a51638df265f4bbbd7d1b47311bfaf23debf953f06838c033d72bc36bcd7a4b187a51eb9a8db7c235fdbca91ed07596690cae6f9717720fd41e31165b804d0de690ae4132265192dff8bd9d408c7b8786d2f8c18af9af4a3f49170c5ab71b0d3566d4173b1ffb0234995e93bb0592018e6147398d09fb2b298d7fbfc7c739fd88714bf2964f5125108f9f306e342a072bedd28010690ff8aa7f9e9fcb0f4aab81a03523c117266b546dd1d9a54df67f6087c8ac57572994951a6ad86278846640f260a3addea1e5542f1082bdca58bf3307a1f8b1b0dfd11d8
+B = 11b87b63d1d4383776480dff9baa0227f9711b5dec6c2336e7de596071de513b4c12edaa10bd3f410ed019c6acefbe129c7813ef1ff825f6f7ae597795789959304ea72bc1c3fb5074bddd2b218e6d1c6cb099f7c7b8d1321aac4fdedd185b2e29c34b5856bd9bb4ae5028857443b7ccce87d7597387023febc8095d8a98c31aea2eb40a4c84f5a89723b3008c3c0e00ea948a4597d5b1872f4710e2759a74b37341035a8aa105d42be89970534987638bf89890d57d1f47cee2ce1572cb01ff3af6b8c6ae2a8490399b349e607e01c441defe3817b4fe8b030c956cc8ef662fa706774fdc20816c739ae23d2a2045d6409860942010e726e2d77833ca108d79ca0e53f87fdfb121ebc337987523bdb7866
+GCD = 22c04f016b106e8634db74c3a7537d70fc17a822ea286430befd67bd916620cfff9510599ca31f139ef59f171d7c11f7a59b0fcd22cedc93b06281c3187217cd55e4d98c90c3da9b582693b67752e7d7b13bd0db632aabf2daab8a27e49f14fe3fa4f7915a2f34981edea0d6819ba022633b3e1000d4b0dac3ba126544265bff870f0bc47326d924b2
+
+A = f64d903668cee86d1c0a84098bfc6a262ae0fd69128b8f825cc2397797b4aea27de896b629550ab41c5ae8321ac83b872090ec88a0fa757b505f3cfe96584d9763945c89101921144eb930f3ce7acc736c410b6d2a9dc6013b9d748632f7f178a1f62328df55a232e1f9b69efb77e7ccf8a97ab38f342175eeb304ae3b2a60b81aa028f8d7eedf27da90bf1b004d8c037302cc55be00d7b1829230a57af5a5afbfe2949c4d8749f9ffb34482039bea4988e10ab1ecd3be4efe40ede4e6217bb4c247dcbcd0b6bbaba4015f445d8ce86d9eb8a63918085ee8c1e3198ec0ede1821dca33754d0067424b1a4b6f4e5a0049b1711578e3b96d9cf43f0888ca8f1bb2a8ace00b042b60be38ba7df9dda7f55f5c0
+B = 1480fe598decbd5e4469a0399bc4b10b097f661113979e091bfa273186a357c955703584a32b6aeeb0400e67cd4a14865ae082fde635c372fed76b8f934b31e4a957e4ce399fb56821218fe905a14ffab644ffe30f4b5273aa94bc857d8befee283c6be29d9a8f2bc25bf9cb9342d4d78ece0e5a67a8c9344e2d47d220555a668343f78ea0289794babbb8c6ff68f8dbae079efb221869240ed123ba3b28c3e79a84b7f76a679d3ee26414b6c36ff2c86824502f0aafe648d3a1d45f99630d45f8116d565553fd70de8a696c8ac246d5adfa0757cff8043fcbfc560e89cc7eea35c038854707106c79b0f96120bd4df77fba3ecdafba38b1e483d2ce4d40dc19a2b9e0d5777188bd7a995af286fb361bcdb8
+GCD = 59824fc44c1ae92ebf3ef5d024c6a890d3ab4a8a6334fc7b3f645bff451b54d131fb13059b57393e76cadeefbedde85414eca7064643dbdb6d9e364f9cf7bfe4b88cc0b72e1958bf4086fb01b01293d4807deb6bdedc03270e405d7c325e0aa2820d54282bf389d6340c55c0ef2282faca675faf55e160e7d1f2097e8a0637753e365b03b87f4bb7e8
+
+A = -7062066f8cfc03dfbf0b39a545306699ee6a06127b3771b964ef67c1008b7781ae84349e623f06685d10ab1f0c5ac968a323a3fe68e33f2e3240e387f6eb86810c349db309c24a0e07b724cef46afea75e8e0bcb6d7a80584df4bf4ef6aea5a408da2a33b4cf3a2dcdc77766ed8bc560ea8705d1052d68c5270ce8ffeb2b2d72aaef25f7a9f0c8a9682cedc8620cddc16f5399b0c09d2531335427a448c29d5da1648c24c90edc7155ebb0d2ac38ce4cea93bba3cf809e0ca4361ddf4e018e2898b0389afb05adf8b73b973309f7ff60faa6ee061a780ade7fa6336c41e987937cf0d1491a8b2b3b32808093c7fb4955e70f85ca10bf15221a69c55670b5d38bc224914872ca5da591fe8bcd80ad3690a06
+B = 4337fb2388d1064c806c9f1f5516b3baed5d8f9daf964def6a23538777cc309b4c61cb2551f191121db65f1be69f07c366bb748c1c8ec594e7c7f87efcce3d0ddc2033f17f30539fc28cfc7386dd9aa0e14db03038da12eec38a3283c0f4253d67beecd800619056e5f8e990abb2731d318bef4adc1208396a568474fefcc4fa01c74228bf730a04abd9883604429913de1c9ad64dcaf6b83998c8cc5d1c1f53970f76df098dc9f6653f545354dbbc44b852b52d8c19e45f02c077264d2968181e620b8ae2f6eae3b6b258f11ee5a33d598336328c5fe2cb954371d2d3b845dfddad1cefc909fd668719159b8de473d1fe21ee723034048000945053be31c64ba50e75d9428dca0c58b13f9dda3b226c8717
+GCD = c2151dc3983722ed6283617e44a828d911ed3db448f1e78529bdb7eb8585b77dadeda19ca05586f9ce138c5c68a854bb0ffed062471ca3c8d4766a49fdb777a329dc1719f2f615fc356f97b0acea290d4ec1a0cb692b6244040f20851392f4fae804a22860f7982f4bf18d21ac5824eb369b7d81b68b9d0098ba9ea71d42c62e74a7be1d71b7f29455
+
+A = 39d191e9583c5502319c3fcc538b2fbdd533c6c6ff9100479eaddf38a62f7df2aff6f8184dea01dc5d48c2c4b5f74be23fda46afc4d9e440769ee25f75058ffcea992b79fc3a2822b556966591f46524b78e3493ba9ff599f2eb28a4efa60912d97835c4914f32fa948aa0275f3ea39ee7a65af10fb77565ce944be8606fa07a92bd8dd4969596a0280eb9f748a05de2f3a6dda6a2cb265b9aae0d0ff20da969a087596aca2b2502b294eee8509d705e75c0e740c36667df30b838c113f2892fdfee5c472015632ef9de79f4a64b5d787422c2ea467843978ec008839fa09dec06e25a54449823d259a7363104eaae27605b1395f030309c34239a263941958ea7591b6deafaa4d52058c917c8fa5f3c3ce6
+B = 18e6463f6b3b907d6366553fba34937bef1cbe8d231ba2339112023f34c286ce3122dee44f895472edc991d470171b773a192df044555eb166ec9f9d92d417e9e1b6ff3d4b22923ee0842a984497a5c99fdb960cffdba06ec49572ceed281c63d9ce83f4aea46db1dc46e84d893f3549de66eca124545d50895e2e907a356d0ccd54383910df2e400f39df61721e4eef60a9592ee961d0a8e4f1a6a87c9cc793e6cbfebac5266649c647658e67faa0afffdf481ba4b0055db3910431e7de19e1dd95fd9710fe70d8030868d537c4b9f8a3969200fcdc5c5bd70d21e24fce19db061dcf9d545741b96caa624be1b4410814ee224fb0ffdc076fc081ea76e6467413ad8a8526611d4eed34e1fc593d35f1a100e
+GCD = 19462da8985245b5f0234342ed254102218663d120c7b7f2fd9f9d1dddb3d03d4c126423c53ef1262e946319d5dc889f6f9faed4abe7052ac1127c84c9f99751de247eb4ecf89865da9ad962c1cd599c5c2bd7704f37e476a9790dacc7d9c94339e4f6e1fa25c168bf72f168c9af402605d714e690da4ec7c3782ba87afe9555499edb2e825bb0b443a
+
+A = 63bf1efc0fc1548233924e41667053b2968832fbe1aeaa8127b3fdacc07f10a889ae46cf5c846160ff088fce54d0d9441cacf786740e6fa064f9f2879131b185e3558cb654dc21956f702a8869c23ea23ecb170c22721326b3a3f336685d837df67c2654aa8f1615f639ef022aca63372b2563e1d20461f0daa9c27fa1bd4878bb439a729203f2c03c7dc785ed2c58321afcb51998aef18f6d8eaba05671b6034861bcf145464ef4bc3b3e16424ff8f4f171bba79e3537b1eceacb746d1d20ce5adf52f45e8c30f883e5bab9efce36d6bf1a03cccff228114c1d833424c6088ea1f76ddfbf84347870f45667c9faafaf5d47742c37564eb7071589f51cd0c5352ceb2eeb9f255de75a4fe10d864fc9aab0809
+B = -ab66773f75ee7a492648bda7c800a3a1a6eb83bbe012a29254aac4e9fac933d2e94b623fa09404bd1374fb64ed96e0ded036e6ac1a8fe4bf517f0b479b186b3f3bdd300d11d9df3514572e967d89f80e3b0cbb969b2c484fbce9660a4115bfb6a57a2a1e191c2356db361ca28f16f59266b31240ea61049a99e0763a5220257644bd9b8480462f93406ba4e3d29e8e160d8e39b60bbdc9017bb0b0ba598a354d1e04167888d7c56258edab42d5f3a24bfa6b711594fd5a95e6c42bfb75db39181706f0f3daf8f42e5a82f2faa0739c459d09353f1d16b7ce8501569e08130dccd39f46356cba20ca61782c8212d36524924e017641b49189adb09d21c4323501650489b638a087a8503ef9e0c9c5c4f8f43
+GCD = 33024f5087d06c57e1e0a1ab0e80fd9197b79a8a23b052dc13840e96620fc09100cc3d8b5613c50e4e2139704a5eac581854a7fae2dd549ac203ec5cdbd3f8c34aa9a403e4e26e64dc656f0ac8fce6e23778d96e9cdca38a61a942750d42d99f546ebb06ce33f0c79620a2a48c23ca74642dc33b149f329e2701ee24fd00a3c3b7cbb54c132b9f3aae7
+
+A = 1683a12f7a6276fdae1bbcf7d3758af624bd34dc8db139ca8c2571dd169a5d1c370877165a87404ecdad08b1a0b21f168d265d0a1e3841955f1ac659c818e4b8f2dbd01af6c56a6ca19f862e443754d756e9b2a64d57f1352b0c49a4ee1e69d945616354fbe2b8ac1eb4c3ffd925fdebfa79d7b55a8b63c0605df7f2097c440b714b99f4498165757c558f283e75df7cea0f642429f08b423810581bac6debb8c84bdf8c0b5b4bb430d7d1dd6db6486a3bad5d61bdf5525760c231539fe2c6463581937fbd7c85cf5620c6c0713a91bc7cb8293a2dc411c4afeb559cd04a204fc15c6c631847b51bd94db0df91ff088652750e8fb023ed73d408c804b0c27aa5fca11dfcc9ea78fa6970d9a2838c773438e932
+B = -132f8811888770a7e5eceffa9359e7cced76a3444d39236a1a3981b85c754644fe18ed271cb97f37c3ee3a938f9be406ca7851ab3e8d17f5e66ba3526f5be09d9f9e9ad5cfdfa3b566b611ab16e63ce9300cc56b5f21f93b7dc881bcf13dc0f13d008d74e86b4ea6143e123df693d2ef44b2a0057da98b33d3d172720533eb13185f0be9441c22f8cb9b9fe68d18f943fade223827b4786630eb9ea97c3df5e9c2156ebfd0ee3933e50f3b8b463c3b2f8fb5d26deb901f848db2a4853ac48921f5d53ec58016b78d2a7089148a90ca0fd99f6bd4b918ebd0116722d458db11b0d5ddeb5c3ef0ef7430a74093b66c25bfc16173549eec82210c9685a2b540053ed73e2b25068e00181f1758d90bf65cd4b9d300
+GCD = 5c3140e5edd044d33799aff3d29be00220d86be14a0b20cd585bef447b7be4fc4c6348dbe2dd615b47e64ac95c5d1c29911c58d06f7334f38d7e9010e404a3fa756600f2706242c5c7aeb5224c4f4b52d9e3253457161f30dabc123725098a145f94da649d6961a0d4f9fd8d16a2f89a64dfc4e0066da3a12d2abb341e7bf92035152bac699feb98202
+
+A = -8e96a6ef5cdeab379fd8d7e5acb3f4f36aee7006de4ca37d8d41067dd023a4a2e05cd0849dc4a45445e60c74baed8b1ca084e9f2fcd1ad18ed797b0e4608486f29d649e781a22fc6a9dc76e12695edc96ec3a93288083eb0d7514e65cc91e9974e8736c1899c39cf5d7cabbf5ceaf983a1a6f676fcb2fa8c5a39ca06a9dc5143a7314c2a04dcdbc7eb5ec1436a3b06c71421bd302c80881da3aaf9cf97554564ab59d7051f374c30c066045d997027df4ed82c11cb7f9fd3fa3da8977b342d7b5295e6f15e9478f9f19de0758e61b4ae35d2249956af412672c27bfb42503f8903bbc23e5fb1c1b23cfbbad21f0e0c596fd760daba4d75d14b6f290efa81b53cc0b7b8102a854565ef0f3b72c0402e283e34
+B = 22cbbf9702f90aaa51185193937f164c39f6b01fd58ab222143566d7ff357c0aaaab994e41be1df885b8799b88b0e3b1409480099c0500cac43fe1fe9507f6709180e0ba373294a4856cea684b4e91616beb3f894ae956c5e8eeb9d2c008382786fc34874f19280c8f4f711ab0408a4418cbf7541ceda69274a6ac7f2cdc63d1aa46f073d37f5ff85b10325c8b5eccb52324b5b5a01ea995c60bae746e2fa265b4fdb88f66d213454600b59e4e77cc2f9a84eeb49681215b57c390ff07440a4e9dd5853b75a07a02f7aed4d75e62181a8e5ad1637d72c6ed8613312b69208b03322c37675ace92302d83bffd655b6a84db7b6c93a7981d8b5440e3d4b51c116ba4a6f2189cfd4b52f315146843fd980dcec980
+GCD = c168035bd895faa92bde660e92181575c809c7b64736715154016aa5ecc5881ee7b5b1802d6f306455858a89fd8dd9adb15c728a93813e410b93766e6b154ab7fb08971dc8928a48d47cc95280c879db374b113382b36fa1596beb3dbc1698676354550e55c9b6e71abec679070d3e7f54b6fa8a8813ff475237444844c46cbf47f3bf660dceb647d5f4
+
+A = -40
+B = 30
+GCD = 10
+
+A = -50
+B = a0
+GCD = 50
+
+A = -360
+B = -1a0
+GCD = 20
+
+A = -fc0
+B = -8c0
+GCD = 1c0
+
+A = -1380
+B = 3080
+GCD = 80
+
+A = -8c00
+B = 3100
+GCD = 700
+
+A = -17600
+B = -14000
+GCD = 200
+
+A = 4c00
+B = -4e000
+GCD = 400
+
+A = -7e000
+B = 15b000
+GCD = 1000
+
+A = -2e3000
+B = -f34000
+GCD = 1000
+
+A = a8e000
+B = 26d6000
+GCD = 2000
+
+A = 9d7c000
+B = 3264000
+GCD = 4000
+
+A = -1a3e8000
+B = -1d020000
+GCD = 8000
+
+A = 8d6f0000
+B = 2e6f0000
+GCD = 10000
+
+A = -2441c0000
+B = 40440000
+GCD = 40000
+
+A = -f4bdc0000
+B = -372d40000
+GCD = 40000
+
+A = -b48000000
+B = 3e45500000
+GCD = 100000
+
+A = -539ba00000
+B = -a065600000
+GCD = 200000
+
+A = 10fc8a00000
+B = -1f1e9000000
+GCD = 200000
+
+A = -72afb400000
+B = -e41f0800000
+GCD = 400000
+
+A = -1855af800000
+B = 18483b000000
+GCD = 800000
+
+A = -33fa62000000
+B = 556e8a000000
+GCD = 6000000
+
+A = -6d3a74000000
+B = 14e25f2000000
+GCD = 2000000
+
+A = -bdd7590000000
+B = b4028b8000000
+GCD = 8000000
+
+A = -1b352d8000000
+B = -2ff23760000000
+GCD = 38000000
+
+A = 2f952200000000
+B = -caced3e0000000
+GCD = 20000000
+
+A = 25c48a380000000
+B = -2f83b4b40000000
+GCD = 40000000
+
+A = -6b0a38400000000
+B = -222e02640000000
+GCD = 40000000
+
+A = 10e693e00000000
+B = 2a91159200000000
+GCD = 200000000
+
+A = acc40b4800000000
+B = -ba62b3be00000000
+GCD = 200000000
+
+A = -250800af000000000
+B = -21f913a3a00000000
+GCD = 200000000
+
+A = b11e010b000000000
+B = -5e6cc495c00000000
+GCD = 400000000
+
+A = ecf2f9e4800000000
+B = -2230de92800000000
+GCD = 800000000
+
+A = c55db0985000000000
+B = 31d033ac1000000000
+GCD = 1000000000
+
+A = f4c61e0c4000000000
+B = 1fcde4e65c000000000
+GCD = 4000000000
+
+A = -10745bc688000000000
+B = 77683c192c000000000
+GCD = 4000000000
+
+A = 200587969d0000000000
+B = 3d7ef4d588000000000
+GCD = 8000000000
+
+A = -1607532cc70000000000
+B = 8b7ecb6fcb0000000000
+GCD = 10000000000
+
+A = 28b168914600000000000
+B = -3856bf7e6760000000000
+GCD = 20000000000
+
+A = -9b383bac7700000000000
+B = f393c8054b80000000000
+GCD = 180000000000
+
+A = 18018f46e9500000000000
+B = -a306ac669f00000000000
+GCD = 100000000000
+
+A = -61e6a75d0b200000000000
+B = -4b50bfa706c00000000000
+GCD = 1200000000000
+
+A = -e450acfaf1000000000000
+B = e291575d62600000000000
+GCD = 200000000000
+
+A = f48a77d4cdc400000000000
+B = -e6fff9026b4000000000000
+GCD = 400000000000
+
+A = -494237471ce800000000000
+B = c8e850e6759000000000000
+GCD = 800000000000
+
+A = -d6494ddcc4d1000000000000
+B = 4c0f47d040e6000000000000
+GCD = 1000000000000
+
+A = 30a9130f3dc90000000000000
+B = 2fe7cb6ebc7f8000000000000
+GCD = 8000000000000
+
+A = a7c3b70949b1c000000000000
+B = -c5bf9f182cc8c000000000000
+GCD = 4000000000000
+
+A = 192222d38083f0000000000000
+B = 3acad956338298000000000000
+GCD = 8000000000000
+
+A = 70c733a418d460000000000000
+B = -371eddc44a7670000000000000
+GCD = 10000000000000
+
+A = 15f5b98bbfb3820000000000000
+B = 3d90bdb79075960000000000000
+GCD = 20000000000000
+
+A = -1d6f559687dec40000000000000
+B = 8e5e98dfa1fff40000000000000
+GCD = 40000000000000
+
+A = 2f1b28e861447a80000000000000
+B = -183860fe42628c00000000000000
+GCD = 80000000000000
+
+A = e764c621b8005400000000000000
+B = -4677b0a1fac61300000000000000
+GCD = 100000000000000
+
+A = -3d109e5bd79873e00000000000000
+B = 326a517d52fbdfe00000000000000
+GCD = 200000000000000
+
+A = -4245e22e4767b4000000000000000
+B = aee0858b9de47d000000000000000
+GCD = 1000000000000000
+
+A = a61b15b32c68f0000000000000000
+B = -2eb0a136be0c53e800000000000000
+GCD = 800000000000000
+
+A = 4913fda76b86739000000000000000
+B = -631996305a94305000000000000000
+GCD = 1000000000000000
+
+A = -63c81b10007b886000000000000000
+B = -242e79463abf483a000000000000000
+GCD = 2000000000000000
+
+A = 4ebb2f398c6b1c10000000000000000
+B = -ae1cfb1b1522898c000000000000000
+GCD = 4000000000000000
+
+A = -372396c308f698d08000000000000000
+B = -39d922031014ae40000000000000000
+GCD = 8000000000000000
+
+A = 6726ce6e60d72f280000000000000000
+B = -14c44c6025dcfe090000000000000000
+GCD = 10000000000000000
+
+A = 3b46a068c908004400000000000000000
+B = -4a065c89a28bbc100000000000000000
+GCD = 100000000000000000
+
+A = 328b811e249293ce00000000000000000
+B = b8e5818c8cc09f280000000000000000
+GCD = 80000000000000000
+
+A = -e012c46d945baf0300000000000000000
+B = -3a8bb06a27cf2357f00000000000000000
+GCD = 100000000000000000
+
+A = c8b9bea266a64954200000000000000000
+B = -755c05c1902061b6100000000000000000
+GCD = 100000000000000000
+
+A = 15744df72897c00c5000000000000000000
+B = 5279559d30bd1460400000000000000000
+GCD = 400000000000000000
+
+A = -44ba631c302f7095dc00000000000000000
+B = -747f3cfcc387f41c1400000000000000000
+GCD = 400000000000000000
+
+A = -1ebd7fc6984135ab4c000000000000000000
+B = aa79e2e13827aada9800000000000000000
+GCD = 800000000000000000
+
+A = -7ac09ad89f79a1bcda000000000000000000
+B = a43fd330aefa16d157000000000000000000
+GCD = 7000000000000000000
+
+A = -155def35220021414b2000000000000000000
+B = ce4382769da41909e0000000000000000000
+GCD = a000000000000000000
+
+A = -f9f77fab368fefd99a8000000000000000000
+B = -a101321d762b4c01a4000000000000000000
+GCD = 4000000000000000000
+
+A = -a1a6ad22c56079d9f80000000000000000000
+B = 1559e6242c1fa61eef48000000000000000000
+GCD = 8000000000000000000
+
+A = 2e34254b68b7c9be0db0000000000000000000
+B = 77128985c832fb347a40000000000000000000
+GCD = 30000000000000000000
+
+A = d8d938e7980da47f7120000000000000000000
+B = 253d7b1df25cbceeabfc0000000000000000000
+GCD = 20000000000000000000
+
+A = -1f348f3262dc6a0ef4140000000000000000000
+B = 3142783711847a6393e80000000000000000000
+GCD = 40000000000000000000
+
+A = -22049f855665081b11600000000000000000000
+B = -1940220494ed3874e13a00000000000000000000
+GCD = 200000000000000000000
+
+A = -4d521db201494fd7706c00000000000000000000
+B = 6387a820186821a8782e00000000000000000000
+GCD = 200000000000000000000
+
+A = 3aab3ea97afaeceb70e7a00000000000000000000
+B = -aa68548666cc83be088400000000000000000000
+GCD = 200000000000000000000
+
+A = -5bd02ca7fa07b72f9199c00000000000000000000
+B = -dec0777c0384ee1b92c8400000000000000000000
+GCD = 400000000000000000000
+
+A = -36c76eafed39512ac1122800000000000000000000
+B = 3334ade886f4c31d00147800000000000000000000
+GCD = 800000000000000000000
+
+A = -4a427c54c5e52ce325bd3000000000000000000000
+B = -2752e4305010c661f62b000000000000000000000
+GCD = 1000000000000000000000
+
+A = -2564dd87308c0dff902752000000000000000000000
+B = -177d03a64ba0336ad8469c000000000000000000000
+GCD = 2000000000000000000000
+
+A = -89b7ac648e188cb046c53c000000000000000000000
+B = -72c2e4fee8cdedea38f58000000000000000000000
+GCD = c000000000000000000000
+
+A = 1a050c1872a4d5d5404a750000000000000000000000
+B = dbbee819b9a75ac460ef80000000000000000000000
+GCD = 30000000000000000000000
+
+A = -10d69f2e208887798fef8d0000000000000000000000
+B = -fda80c69223fd86ef85e6c0000000000000000000000
+GCD = 10000000000000000000000
+
+A = 28b01d6cce59fd4aa5c58c20000000000000000000000
+B = -2eed166c8eaa15ba37834b20000000000000000000000
+GCD = 20000000000000000000000
+
+A = -5e33185bd74be30dbd477800000000000000000000000
+B = -90175dc8104ecf4d81b5ea00000000000000000000000
+GCD = 200000000000000000000000
+
+A = 3ebda3062e8ef2b196480f780000000000000000000000
+B = -2687453e2ad494d0a87afd880000000000000000000000
+GCD = 80000000000000000000000
+
+A = -4e1ce2e8e2bff58cbe823600000000000000000000000
+B = 7f36708b6b8d09a8e0aaee300000000000000000000000
+GCD = 100000000000000000000000
+
+A = 2c8969af424187b908e2890c00000000000000000000000
+B = -378c0156b6f46e367578041600000000000000000000000
+GCD = a00000000000000000000000
+
+A = 828ad918c0a0e5e22bafbe2800000000000000000000000
+B = 775fbcf1f1b42890269e799400000000000000000000000
+GCD = c00000000000000000000000
+
+A = 161e2b93c33b781b50524b9e800000000000000000000000
+B = 3c25387b0a008605f0ea99c1000000000000000000000000
+GCD = 800000000000000000000000
+
+A = -9f2954936d4b82a0f9435e6d000000000000000000000000
+B = 53cdfe93d4f21a1648a9bf3e000000000000000000000000
+GCD = 1d000000000000000000000000
+
+A = 8f883752a3660d243f6eb28e000000000000000000000000
+B = -1f3d9d82a559fa36739849cb2000000000000000000000000
+GCD = 2000000000000000000000000
+
+A = a643b038a1e887ae0a03b35ac000000000000000000000000
+B = 90f6efa766e06737a757cc8d0000000000000000000000000
+GCD = 4000000000000000000000000
+
+A = -28eae938ad87eab54ca2487978000000000000000000000000
+B = -2d60ad0cc9748cadbbea2300b0000000000000000000000000
+GCD = 8000000000000000000000000
+
+A = -1cb97483c93c1a12d9bcabad70000000000000000000000000
+B = 1e35d9ba7a7bd12ff4474e0980000000000000000000000000
+GCD = 10000000000000000000000000
+
+A = -3164f9bc827f429f8b87a269d80000000000000000000000000
+B = 2d9acf86d4eaa8a631c75d6a340000000000000000000000000
+GCD = 40000000000000000000000000
+
+A = df5dc5365119aac6d4ea9dd5200000000000000000000000000
+B = -ec5b8435cc4fd54601e513d8d00000000000000000000000000
+GCD = 100000000000000000000000000
+
+A = 2255062a91bb17b7b37f880b2880000000000000000000000000
+B = -3785731809b7cc9bfa0b5a071500000000000000000000000000
+GCD = 180000000000000000000000000
+
+A = -50058d044bb0860a34988fc16b00000000000000000000000000
+B = -421c611f48a2ba32e072c99ed500000000000000000000000000
+GCD = 300000000000000000000000000
+
+A = 641a23bc425858946db6a0d1ac00000000000000000000000000
+B = 18905e23596541629a15f8f5eb200000000000000000000000000
+GCD = 200000000000000000000000000
+
+A = 6d544b776658b9a25899d1f60b000000000000000000000000000
+B = 7ed23e078b9947f34ffa5fb1cb000000000000000000000000000
+GCD = 1000000000000000000000000000
+
+A = -1b7ed1e8f77b52543b4a826073f000000000000000000000000000
+B = 2704d694092d95501428efa2137000000000000000000000000000
+GCD = 1000000000000000000000000000
+
+A = 3b94302aeec9a3648957d28fb12000000000000000000000000000
+B = -ae42ebfa53218581eba8ababbe6000000000000000000000000000
+GCD = 2000000000000000000000000000
+
+A = -350b65e297e885f157f90acfe680000000000000000000000000000
+B = -e268a405ea72f181770ce2b6e0e000000000000000000000000000
+GCD = 2000000000000000000000000000
+
+A = -8da9c4a3b032fd6de17c69e0b29c000000000000000000000000000
+B = 576acc7443c36be3a511970f684000000000000000000000000000
+GCD = 4000000000000000000000000000
+
+A = 321c2ca739873e897095e7ce2a498000000000000000000000000000
+B = -4869bb803aa26c2cb962e7f28328000000000000000000000000000
+GCD = 8000000000000000000000000000
+
+A = 401c67a2f811ce7df32b12a307020000000000000000000000000000
+B = -487f4eac43168d62033f8fd773bd0000000000000000000000000000
+GCD = 10000000000000000000000000000
+
+A = 10426d1ff29c013f85beff319838e0000000000000000000000000000
+B = -12ce3019d94026f2b878c8f9cb8e60000000000000000000000000000
+GCD = 360000000000000000000000000000
+
+A = 9c946e6980886bc659ac7fc112f200000000000000000000000000000
+B = d08c89702463c9e4aeea3cd42ea840000000000000000000000000000
+GCD = 40000000000000000000000000000
+
+A = 2e8a27db4a3da8838c4f54b32d17580000000000000000000000000000
+B = -2e6b62fcacb7997ad6cf0330cb11380000000000000000000000000000
+GCD = 80000000000000000000000000000
+
+A = 4e015bf2dfe803df203e17fd8de4c00000000000000000000000000000
+B = -bdd8e3c306f3d69a2a6305ea503b000000000000000000000000000000
+GCD = 400000000000000000000000000000
+
+A = -14e3010ef700db807d8a15078bd2d800000000000000000000000000000
+B = -26ed488f2fbde4584afa5723404d1a00000000000000000000000000000
+GCD = 200000000000000000000000000000
+
+A = 3addf16e96d4f5544ad4232ada5c4c00000000000000000000000000000
+B = -ab44ffa06f1f65dc7133dd5d9c20800000000000000000000000000000
+GCD = c00000000000000000000000000000
+
+A = -3f66f37ffcd0f38a0963b51782fa30800000000000000000000000000000
+B = -7843ece10ca9825c967329820c27c000000000000000000000000000000
+GCD = 800000000000000000000000000000
+
+A = -412f766841c72e133e4d9f1988afe7000000000000000000000000000000
+B = 9b9c85e517b60c657039be0dbef669000000000000000000000000000000
+GCD = 1000000000000000000000000000000
+
+A = 3cf0d01057ea0d91716db93e3dd0708000000000000000000000000000000
+B = 278a7e815475bbc166ba7ca19f03572000000000000000000000000000000
+GCD = 2000000000000000000000000000000
+
+A = -e1c51a0ba85f068797ced9c387fac40000000000000000000000000000000
+B = -8814939d264623a52dc84a9d38fec40000000000000000000000000000000
+GCD = 40000000000000000000000000000000
+
+A = 17b5ca5721f414ffa8da27e587c80a18000000000000000000000000000000
+B = 8c2bd0e250098de8e88aed8f18b5808000000000000000000000000000000
+GCD = 8000000000000000000000000000000
+
+A = 8c751a332822b3e8debb1595c60becd0000000000000000000000000000000
+B = -8b790e7be19ae6fca63a08cccd4da300000000000000000000000000000000
+GCD = d0000000000000000000000000000000
+
+A = -338f3ab22f6ef6115ea0d777cbb050aa0000000000000000000000000000000
+B = -133f29bd9798206fd4d3049b442220580000000000000000000000000000000
+GCD = 20000000000000000000000000000000
+
+A = ee299e5647dcff3e6e029b661d066e680000000000000000000000000000000
+B = -196f98023c5b3cc12a0ccfe142b7aeec0000000000000000000000000000000
+GCD = 240000000000000000000000000000000
+
+A = 31838ca3f10f1db7dcbf54196c320c2c00000000000000000000000000000000
+B = d0adda2eff2509465f0902dbfbcad1e80000000000000000000000000000000
+GCD = 1b80000000000000000000000000000000
+
+A = 93077bafc067c86fd6258fd9bf9359c000000000000000000000000000000000
+B = -4b2e822e663d6931ee0fceb5b6cef58900000000000000000000000000000000
+GCD = 100000000000000000000000000000000
+
+A = -aecc7171cd1da55461691235036d1e0800000000000000000000000000000000
+B = -208316f273ab5c79aeb56cdb6586d003a00000000000000000000000000000000
+GCD = 200000000000000000000000000000000
+
+A = -445e5c8f6343d7fb36292abc0487583f000000000000000000000000000000000
+B = -8c627443ceb8664c42fab6f5130f7e58000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000
+
+A = 33ca53ce986d7cee7ca377bac0cef916d800000000000000000000000000000000
+B = 334c34e04e1813a2da020f37ad1e7b2c7000000000000000000000000000000000
+GCD = 800000000000000000000000000000000
+
+A = -a0c07b8043d5b32a50180af1c9504f164000000000000000000000000000000000
+B = 26ac4d054497c8ac5be97f8d5dda85dcb000000000000000000000000000000000
+GCD = 37000000000000000000000000000000000
+
+A = -12304c391e9a1cd168f812f346a794a46a000000000000000000000000000000000
+B = 29bf2b48182457ae8d69d317d3a2fbf074000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000
+
+A = -debcd7eed81fc3472e75ec1841bbeafd50000000000000000000000000000000000
+B = -665258163ea6838386d797fe6385439964000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000
+
+A = -17a194307272e596b6a2e76fcb57cdc7718000000000000000000000000000000000
+B = 236997cdd22b1d751b20337dc631efa5270000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000
+
+A = -cc5967443162b205d51a9c3a727672a5c40000000000000000000000000000000000
+B = -f6812ebe0844385f946fdb16830e0807c30000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000
+
+A = 3251e7eff252d55d9eb5d727aa231dcabc80000000000000000000000000000000000
+B = 2b79c8b59f0e4556f4724a7c625623419500000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000
+
+A = -17696c299e662c98d6b064b85b83e6d2a1c0000000000000000000000000000000000
+B = 2fee90da5ca697442e418e011ea48b650140000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000
+
+A = 18ea126b5c4246f2e283c45064d2b90953a80000000000000000000000000000000000
+B = -ba0f40849f3f7603be5b2cd9cb67e2e3f380000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000
+
+A = -fc937a91f7df232a48c9fd1fa925538f9df00000000000000000000000000000000000
+B = -b7b058bc740c55c99cb168287fddf742f0500000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000
+
+A = 2fc2c5f3f4bf5b1f79441c4ec3dfd5b24ae600000000000000000000000000000000000
+B = 204d71607e258c2aa1784f31c2722640ebf000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000
+
+A = -fa99fa9cdd6b959806e29cb4c60bdb6a001000000000000000000000000000000000000
+B = ddca429d34b063d822248e9c728927b4bb2400000000000000000000000000000000000
+GCD = c00000000000000000000000000000000000
+
+A = 3c563270d66c1abec92c2cf77db9fcc596f1000000000000000000000000000000000000
+B = 2696305dda274f3c06e1fed02f8a0faeb11000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000
+
+A = 79543254b07c4c0a422b79ce0282cc7b0ea8000000000000000000000000000000000000
+B = 8aab3933f6012c1dac5fd1b21b749c771a31000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000
+
+A = 3c57aa1f45046a22a1927250168f07ec39498000000000000000000000000000000000000
+B = -19440c23a403a8785c750650489e2da5b302c000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000
+
+A = 5877bbc53bb1d89758333de06c0d54933600000000000000000000000000000000000000
+B = bc46e6788e021c1162c6982930f2897d0659c000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000
+
+A = -1a55b09371366814ea66e79e224be58d4d4558000000000000000000000000000000000000
+B = -22b8a45e70787335d5350f7ae281d2113da490000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000
+
+A = 7b7d5019206af67a46f74b6939438ec66e680000000000000000000000000000000000000
+B = -e0d9a95973b3d9101630f3073f3cf6d66ea370000000000000000000000000000000000000
+GCD = 30000000000000000000000000000000000000
+
+A = 75b0123b720e3176f16aae7bcd56864ad89280000000000000000000000000000000000000
+B = 3fe6b4c667116b7c249d4bc3fb4c23d18934b80000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000
+
+A = 674805cc5f1abda27cccd43b7d6a0e876e64940000000000000000000000000000000000000
+B = 8b359ee0bf4e94c01e16fc47e6b74aed00ea440000000000000000000000000000000000000
+GCD = 1dc0000000000000000000000000000000000000
+
+A = 3f1a1457927f83fd583ed3e2a71c5e7c27299480000000000000000000000000000000000000
+B = -127b7271e516c4320bffd052e4490fef73ba3b80000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000
+
+A = 175f1a90b456e62c0dd81ac8d7e35284c4876500000000000000000000000000000000000000
+B = -80c9572b89ee869f8630387a66851fb9203ecc00000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000
+
+A = -22b95eae624a08375afceefe017b7915c49b3c400000000000000000000000000000000000000
+B = 3d695935a6844f8415e841cc95dfd86f42544d400000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000
+
+A = fd74c9ffba5d348190be52319be273f972daba000000000000000000000000000000000000000
+B = -f5552c2f126a1dbee6361bba508b2b28b73bd7400000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000
+
+A = 1be43f43d2598cf8fb8986a25e6c645a1525167000000000000000000000000000000000000000
+B = 87b054f3eb95d39b6b000bf51238807c7b7985000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000
+
+A = -a4117ac05d856573e0d6e4befbd19a38ac3bcef000000000000000000000000000000000000000
+B = cbd5a243d36008c3a6a98eea3b7375b07efbc02000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000
+
+A = 17ab52c073d6114433fbb724f7460286f6625050000000000000000000000000000000000000000
+B = -bf366d0a15e56c579d5c4cd5cb4635082d5dc72000000000000000000000000000000000000000
+GCD = a000000000000000000000000000000000000000
+
+A = 19f3e96dfbe39797cfc204d12279dbab94f01d04000000000000000000000000000000000000000
+B = 6d95037e51dfe3036e31473bab2cd1ba9f5519e8000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000
+
+A = -1261b5a6da70536fd2f643781b9ae1e7fc9c073b0000000000000000000000000000000000000000
+B = bc3ee8e9dda7dd6fb6986243d0a3eaa090b5f4e8000000000000000000000000000000000000000
+GCD = 208000000000000000000000000000000000000000
+
+A = -9e2c539702e244988e4825829576155b5b0f68580000000000000000000000000000000000000000
+B = 716108c3394c331ea6b51a22e8f752ff46e6e47a0000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000
+
+A = 292b8e145910756273b49801be397a137929e85c80000000000000000000000000000000000000000
+B = -39113550b2fd4fb2b65bb83b78e3070801fee82da0000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000
+
+A = 5da9dafdf110c09082407eb9811e27353520ce2540000000000000000000000000000000000000000
+B = -309e91319958738e6eab49b1632ddcd344aa6e4ac0000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000
+
+A = -2c4b69ae900901d733697cad86ab9983bea72c72000000000000000000000000000000000000000000
+B = -2dfa34fc752ae4e4435f1af67f1e388f32da035ae00000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000
+
+A = 4e5a43aa186ba7c877d76e9f707fa4518f1cd9c5700000000000000000000000000000000000000000
+B = -a090f8c743842066da1d6e642d4098da6a2ffb62400000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000
+
+A = -e600887b9a9d9210143e0f13363bea3ea8129844200000000000000000000000000000000000000000
+B = 2f072f38bd75c4501c8efc1ef6d0ca6f7fa421be2400000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000
+
+A = -ea8898f0494f3ec63b5a9731b6e221ecb71421dea800000000000000000000000000000000000000000
+B = f59f3215d2639a11201d45f3214f7291cad85d0a4400000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000
+
+A = -152f2a6bc29e9740b1d87e0fec30cde5013e7859fb800000000000000000000000000000000000000000
+B = -2f35b5beb74deb007a816fd110813f0c1c48c4744a000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000
+
+A = 26600e1e189d9c21ac0f223388c13e0c5e6ace9a97000000000000000000000000000000000000000000
+B = f617ff2544c2aa4ff63111a9eac7f159eec823ab1c000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000
+
+A = -27f912561cf637d28d33ab505c028784bc2a7cff3ec000000000000000000000000000000000000000000
+B = 1b2a8f9fcc0c88a3ed3df0ec762e3c1554ebce81c32000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000
+
+A = -c260705d539aa727814b56bfddf8bcac71c34016654000000000000000000000000000000000000000000
+B = 1dc209e15f674ad2c0b87897d466ab8c97b2ffd09d0000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000
+
+A = -7fb7e0c8f2cb96b06cd0cde919dd72de94f604efcf0000000000000000000000000000000000000000000
+B = 847e0701ff6ba19cbdd0dbb14cb7e90288a08951c80000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000
+
+A = 7399b6097a7a752be239b5c5032e6b73657c2d234c50000000000000000000000000000000000000000000
+B = -12061bc98ecc5fdd53a5e15daccc6bc0e7ccdd7e4630000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000
+
+A = -fe59ed195a5655dc3c342540863a7c770acaaf1e3060000000000000000000000000000000000000000000
+B = 1dd42c3497adb05c371ddc110b3348a79d7b00ef232c0000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000
+
+A = -10701695c7b48a563b8720d1f6751e8f4e8444fd3a240000000000000000000000000000000000000000000
+B = d3b66258304917581fe1df50e6178391c1d3f1af78080000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000
+
+A = -3348718913c706428d5200bc2aa12ab72e0b01c14b2280000000000000000000000000000000000000000000
+B = -38b56ef8091cf98c6592b58cdc72bd2c374014ae923a80000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000
+
+A = -c5621fd5516d572ae32e4ee6b0e0ff3679821e276ee200000000000000000000000000000000000000000000
+B = 3d8fa2400ef7a9480216f87385c37323e4943a837d700000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000
+
+A = 2205c5e1ee1b55b1207cdaaa5e48855896310db99fcb200000000000000000000000000000000000000000000
+B = 9e3e40b865b88bc8b8f1bee6b74e7646c364f7ca2b8200000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000
+
+A = 1abb17518df28b80b6567803c2ebbfb8eeaebb3bf3a2c00000000000000000000000000000000000000000000
+B = bc3422ea07febba4b6b678b258f494d24e6a62ef9b79c00000000000000000000000000000000000000000000
+GCD = 10c00000000000000000000000000000000000000000000
+
+A = 260639cf93de72a8027a6782b8c10b5b7fee7825d759b000000000000000000000000000000000000000000000
+B = 1f435dda1fcf2950dfbed5709f449484584a142a5dc9f000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000
+
+A = -35642d170268dc6b6ddf5e358be48b6979772a19254d0000000000000000000000000000000000000000000000
+B = -96f6ab2642f10846d395b8bfc1e14bac3e67bbc5b72c8000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000
+
+A = -2ef8fad82a3dddc38e6ce8c4879d249757355d99d8ab1c000000000000000000000000000000000000000000000
+B = 31bcc349db0d5e6c25267acc2b5ca1c400e757cf2eb334000000000000000000000000000000000000000000000
+GCD = 6c000000000000000000000000000000000000000000000
+
+A = dac0c7873411bdd732faa69b7880ebe5e05457b8d24dfc000000000000000000000000000000000000000000000
+B = -e2792a6029c9a68db0a9a3d8dbffe81b38b00d339473fc000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000
+
+A = 23ec252109101aa038ef97b7c1cc78862b71f40890c1fb0000000000000000000000000000000000000000000000
+B = -3386c16eb8098d00884d28a740cc4f9f45c4a8959d07568000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000
+
+A = b900a1a1b79792c52da29e0c1a4d0ab4e5ce3ae31d06180000000000000000000000000000000000000000000000
+B = 1d3c94e2d6f852b956af53562b246a0756a14db8fc086e0000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000
+
+A = -35764e9c59bda2f0e26a18cc6bb88e22532536d9c98261a0000000000000000000000000000000000000000000000
+B = dd542a5837f1b61e40facbd3a0a74526025021bc24a0140000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000
+
+A = 9d9341df132131a10beda342dfdac37e90f0f75f9d3fb400000000000000000000000000000000000000000000000
+B = d909bc3054242ba4385e9ce86ca4c9948ffe0506661a5d40000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000
+
+A = -2c9744f2edc9842fbf79cafefc73b96082f1d16158db88580000000000000000000000000000000000000000000000
+B = 3594eb2e4525ea28e77c3900e98f1f736d81f9bb1ec82c180000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000
+
+A = 4f0380b7023f532777f1ca66713f3ec4ccce8b001ef53f500000000000000000000000000000000000000000000000
+B = -d4f481f6d7e829e7f7878e77797b185d99c34f6ee97fa1400000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000
+
+A = 2c1fff8f18fd88b6694597e5e175e49b569adafa53f541e200000000000000000000000000000000000000000000000
+B = 1b4c4b695c8940882a212776e21f3cac7d84eaf240e5211000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000
+
+A = 5270eea57faeaa5ac301763a35345d663a7fd01fdf2c6b8c00000000000000000000000000000000000000000000000
+B = -71ff575f38173db436b369517e314719e72d36aac368ed2400000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000
+
+A = 29f75eba92c077b740592509ea945d282c70f71b6bb9014b800000000000000000000000000000000000000000000000
+B = 2a73715f6358d26232d2f1f7d285168c6226b4d1e562ca4e000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000
+
+A = fc852621f4c19197765ab0a228d7b82a287dfaa91ed3a456000000000000000000000000000000000000000000000000
+B = -f19b7d2096cb2f974e4bb7a9e9d45d823839d79f20f2d265000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000
+
+A = -303ff91df0e496effc31123636d8c8edffd3dbaaa523f148000000000000000000000000000000000000000000000000
+B = -116897261d06df8e32d2e989f8e5339018d48568c16fc3f6c000000000000000000000000000000000000000000000000
+GCD = 11c000000000000000000000000000000000000000000000000
+
+A = -b8fa326ae0d10d3a0ef0b1e54fb10cdac7a3935dafea7cfe8000000000000000000000000000000000000000000000000
+B = -1af5edae1e10c4d53e297d557ae3d18eac43590c4d6f33fc0000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000
+
+A = 37d08c22b988566e31d14aa34565e104bdeef8227ed4a88640000000000000000000000000000000000000000000000000
+B = 27b1306a178a1ba404f26b5bc6cceb06b6b7b746a12d6558a0000000000000000000000000000000000000000000000000
+GCD = 60000000000000000000000000000000000000000000000000
+
+A = c648da88817879f3d3b00b6b1a96cc97cc93d8de64a28033f0000000000000000000000000000000000000000000000000
+B = -b21ead6580678cb3516cf813c032d106550b337025fe8430f0000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000
+
+A = 105db928be54803e351b899ed25dab1d93ed64ff9d907a31100000000000000000000000000000000000000000000000000
+B = -3c0b25a15ed0858aa89297c2be53eabf1c21dd704995c3157c0000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000
+
+A = -f50a71e683623285b964b182d5936ba615f30411c27e298a140000000000000000000000000000000000000000000000000
+B = -b84f81fc6ac97b3cfdbf9f26c09fefec8168b24b6c8fa3d1880000000000000000000000000000000000000000000000000
+GCD = c0000000000000000000000000000000000000000000000000
+
+A = 3689a92df7ca547e640e14131961e421bff4ad7ddeed2c4ad600000000000000000000000000000000000000000000000000
+B = 4511d475ee00c8232c86c6b79f2d7907c6843949ab9b8027f00000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000
+
+A = a64095c546c229daa3fc5a8e2a7737c2b0814d9ef630d3f34500000000000000000000000000000000000000000000000000
+B = 5612a2ea517be7f8e82ccda780b33b43db6c24af9dabc8d4fe00000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000
+
+A = ae983123b24582e24bfccb5766516409d8df8c81aaaf6574e00000000000000000000000000000000000000000000000000
+B = -39411488cd427611ecb996253ce4b834a530afed08e8a3eef4e00000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000
+
+A = a69b9545be06f44f9c7317d955c4d0aef3661ce10958d5dcf800000000000000000000000000000000000000000000000000
+B = 665b3c29bf5092972e9ffe8794cab8def847dc6ea3f98292f0c00000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000
+
+A = 194c8241a5c25fa630fc23837b5a80b27d098e6eedd38770429000000000000000000000000000000000000000000000000000
+B = -3d6ed3500d2fe5e19a0eebb5bd9dd98e5e30885cfa24ba5628a800000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000
+
+A = 78b5787b64436708da73d68e6f37e1221e0ca3f2f0f1acae0c7000000000000000000000000000000000000000000000000000
+B = -85170bf9304fb4d5ed9202c4c56d9d18ea11fcc6e0fb7e5916000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000
+
+A = d82fa4b830254fb2bbceed1c6cea06d5d6adfc43ef52ce3f5ac000000000000000000000000000000000000000000000000000
+B = -36a00056061db1ba516812ed0a8fb3fe7a593b05e96751455408000000000000000000000000000000000000000000000000000
+GCD = c000000000000000000000000000000000000000000000000000
+
+A = 617e3c103e98e2a94e416dd94ac5cc2cdba4757b99cb9f2106bc000000000000000000000000000000000000000000000000000
+B = -eb0e6693dd6adae2f0ffcef2b0cdb2e089e4fb95df6da3b64f44000000000000000000000000000000000000000000000000000
+GCD = c000000000000000000000000000000000000000000000000000
+
+A = 3716b9e97174e7a9e9d21b816f6b7192d181044b305cff4f3e3f8000000000000000000000000000000000000000000000000000
+B = 11428fa3afc240f22ee7a45315a28ece8506d9f53bb7180ca17c0000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000
+
+A = c68286e0fd38f898d3b9927a2c865fbe207e9af108ded61dbf00000000000000000000000000000000000000000000000000000
+B = 4e04da8108c01b1fc1043141001623f11cfad13d663fd7ca96250000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000
+
+A = -157a345d8f1a57042de04d80575e189bdc5d66967b2f3228b17b20000000000000000000000000000000000000000000000000000
+B = -2790b2d96dd0c991731d69dbd7417822339a0e332c5a4a96ec3060000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000
+
+A = -9985ce3a290f2fdb2790a9f8188c6892443e27d829d0f4b6dbf800000000000000000000000000000000000000000000000000000
+B = -dc29a9184d398324f826334d69ffe01556e3b283f2b686069be080000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000
+
+A = 3fb0089ba23f254458b62ddcf13ef920a9dfa44fe99311a4a123a00000000000000000000000000000000000000000000000000000
+B = -16bfb0978a2fc18cf8c20ca9bfda3be3a24b2833e7136a96dba8080000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000
+
+A = 2ee4017a3d07c26377807ce39a2a9ba7b143c97e41475fa96ce4700000000000000000000000000000000000000000000000000000
+B = -2cf1552c63d2f6114c2d99880aa30f1fda59968ca84a2a55eff9300000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000
+
+A = 269968caab42a13b8053952a95e6ef222f5ba45fc4d92c813300d800000000000000000000000000000000000000000000000000000
+B = 3c055ef547ec72e5d2d1f109285590052ab1be675287de759da000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000
+
+A = 941e9ee74027982612505f4caa149bc7aaec395c7ee9defbf5e4e000000000000000000000000000000000000000000000000000000
+B = -ab4ae9e3a8bcb781a075bab079eece10e4a4ab4664968d59f88fac00000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000
+
+A = 91f4199e4fdb0726f8b6e72a4b49974295d5f0d7389d49ec12ede800000000000000000000000000000000000000000000000000000
+B = -1bc6b1f4744a8a6a894292d69cd82057fca37ebfa700bc8571560e000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000
+
+A = -dca2410069ff44b2ce97b82987ec40ce22cb60f7a74533da8423da000000000000000000000000000000000000000000000000000000
+B = -1cb0e9309db6a5d4f65eaae98ea56fe00292f5336d9af3492196d000000000000000000000000000000000000000000000000000000
+GCD = d000000000000000000000000000000000000000000000000000000
+
+A = 32c61b5e8aad9b3e3dae15ebcc05bd06ee4fab43165f4f75f2e988a000000000000000000000000000000000000000000000000000000
+B = -34b8cf5ddeabf5565004cd9f7db5d70eaf1a4f445150733c7861370000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000
+
+A = -b6ce3f8712a36932e4e0fd81d9d43815fec6b43d9add51fd842630c000000000000000000000000000000000000000000000000000000
+B = -4a96b6247c0b255581870a232610f0a49213b6740e21cefff93f948000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000
+
+A = -1ca58f0ce100d4bb83f20d78458250d498e65153dc259ed30a793c8000000000000000000000000000000000000000000000000000000
+B = -324b16b3fc2761e4e9767fd2d1db6a36cdcd3f433b20bc0bacb4d008000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000
+
+A = b1808eccd148b0f0db592f71c8392b6ce40eab010d06a19392e34f70000000000000000000000000000000000000000000000000000000
+B = a794514d4f6e7dab41bdf2bcd88e168bfd2a777524acf1a558966da0000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000
+
+A = 1f36b03fcdcbfabb8502321046e10c5565885cf5c14b8defc5ecf06a0000000000000000000000000000000000000000000000000000000
+B = -23f6d59be786b54682d94ef19411c7f7a08f0c6059762b8e9a9387720000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000
+
+A = 312c07959f9678ad701956b05d8c1f4c1d8a0c92f6494f99273d9cdc0000000000000000000000000000000000000000000000000000000
+B = d80601f251cd588d78c27d7f1aa12d1c835599d9aeff8d6506bcb8740000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000
+
+A = 274292b9b9e694a82957e50b01d2548afdd4587292eb2c234cc1167900000000000000000000000000000000000000000000000000000000
+B = 2e8a0036eea2bc483bb117fbdd964015fb776f46496e3206f3d9133600000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000
+
+A = 7be6e3ea49e0a4d79a95b027f088bdd999bbba41e6cd7bcfed3c848300000000000000000000000000000000000000000000000000000000
+B = f6f297d14eda550587b3c1a5f8c611520f70541eb8a75083822951f500000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000
+
+A = -1d7616e629be37328793aa35d83bc77a225f1900e997784e5fe1d7f4000000000000000000000000000000000000000000000000000000000
+B = -39e4bab54ce6183539d7772a369844e33e3ec051a8758b4f97e83347200000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000
+
+A = -80b78be51093bc446f1878e8ac0ceca27d7b63d78f466ae441dba7d1400000000000000000000000000000000000000000000000000000000
+B = ef5484d711449eff57945ce8d8a530ca31ce893a59ecce964c1f844ec00000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000
+
+A = 25aaf376d060880084d3a7fc84d9ce95454ab0c9bae41af960c58eec3000000000000000000000000000000000000000000000000000000000
+B = 2fa4be2d9cd3ac1900661ee77dc9321eb80a4071e23a53e13b33d662d000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000
+
+A = -6cec0ae09d636ea3cb3d0c3931debd1435e57e4a53251bbbf29979de1000000000000000000000000000000000000000000000000000000000
+B = 9b2e64573ef799b4c97d3a5b5e4d3176f93b1d75ae170a50b615a36cd000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000
+
+A = -d182d1908a4241bbd73a6177f833bb8ee3f952b67c67aaf5feb5ce8ee000000000000000000000000000000000000000000000000000000000
+B = 315e20c8535372093139049e38b588bc6fee72836b779e41134d08c91c000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000
+
+A = -ac41107ac9671d7c3667445cd7b890b3d25d80bf6166980ef0c80db0b4000000000000000000000000000000000000000000000000000000000
+B = -1de8d5bfc31bdd7b1605a11199eea5a300fcc044665ea13b2020f75378000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000
+
+A = -13f8a1499f01144769ed90e9d620abc1e5beabaaed7c70c910e118b5f78000000000000000000000000000000000000000000000000000000000
+B = 1fe53a5add2526b1ae223a9aaec94af7aea15e635e099ff3e0e65040ef8000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000
+
+A = -f47bea5a963270813c5a2b1fbce981b3fb9611c88db75553e08aef649c0000000000000000000000000000000000000000000000000000000000
+B = f4296227656efb17ddc2481f959a516fd696c74b55d2f3766395b4ce950000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000
+
+A = -25a3b4f8fe551c48c55ddc329b2bdc02f2436f84e59a7e0cdb3ee3ade700000000000000000000000000000000000000000000000000000000000
+B = d667f0cbe6421b4f2b29d359334919134c1efc91dd328c3eecbe2460a0000000000000000000000000000000000000000000000000000000000
+GCD = 60000000000000000000000000000000000000000000000000000000000
+
+A = cf0b9a281239cafd203b19d92086a229b58133ef6eaf8bdf0f88adef5540000000000000000000000000000000000000000000000000000000000
+B = -e1b0237bffbd95873b0df106a6c2459fb84d3cce0fdf16d6e168481ae900000000000000000000000000000000000000000000000000000000000
+GCD = c0000000000000000000000000000000000000000000000000000000000
+
+A = -1781e494df516ea916d08e53c755f6053ecba13fff59ec4f4b76453f31e00000000000000000000000000000000000000000000000000000000000
+B = 36278316b0a8e725e9b72a26628a902e78b446a67cc58caeddce4ed81b700000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000
+
+A = 232def836a6cc558362d9f0090b5f651633d768f4749fa06ffb6204d6dd00000000000000000000000000000000000000000000000000000000000
+B = 2cbeaf4e71c1134b7f002a58a9444271d717036d8191a588efd96d2990600000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000
+
+A = 20de8a5e270605d6ac2e74f003c532b8deb0b9313f3485567373c4e5b46800000000000000000000000000000000000000000000000000000000000
+B = -14d214ecc14cc1d50dbf12230146881b6dc2c0e23c167f53a224bf6f1f5e00000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000
+
+A = -cf22d2d6d3d6d8a4a4cee97d92fdbcb1fb6ace7ff4648716f28d7e2ffc9800000000000000000000000000000000000000000000000000000000000
+B = 40e496940fdcf65a7ab08a9cbe74f187acf2c81d95efeaacd526b46ef0bc00000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000
+
+A = -2eedc24cda25a083ce21ac16d787b0e3cde5ec73785fe0b270f0a9ce25ab800000000000000000000000000000000000000000000000000000000000
+B = -2f363fed3e53a7f4afa99fb76e7117462671e47446b462bfb36f37b69863000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000
+
+A = a5638b46010d5099a1bc8217620501679c333a1e8e8bc2a9110c5f087658000000000000000000000000000000000000000000000000000000000000
+B = 6f0c64f047659a63bd7450770746c46858f2059f6b65e0853a9fba2e4a98000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000
+
+A = -cf83fc1803b44989b2a118698a6500880811fb02426c0c9ab037e955a3ba000000000000000000000000000000000000000000000000000000000000
+B = 3a65484959c2f5e4eafc7059ab4d917e56d62607cd5e40b6ab229f7e33012000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000
+
+A = -6ec3bed80423372c9f5969ad9ef6a4b0197cee325d4492de2d0497625a1bc000000000000000000000000000000000000000000000000000000000000
+B = bce0f040f87920eaf776baaf066331ae30334618de36c89657b84dca3988000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000
+
+A = 3a19632e88410e9b550b0edb09f60e611fc6423a81715dc6ab0bf49967aa78000000000000000000000000000000000000000000000000000000000000
+B = 3b2161a02cddd1f666773d04984652e5cc53d39f5b6ee6ca15d610f0a09598000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000
+
+A = -d8d412d4c7ecd6de9892912039fa148b125656fe9e43ece9c24566042f6070000000000000000000000000000000000000000000000000000000000000
+B = -3f4e8037e969fdecbfa2513101ccc06b9ce577b23672467e758bbe7daa23e0000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000
+
+A = d5765f39f5652a8373c2a672c239cf939102eae550321167858b3873b5caa0000000000000000000000000000000000000000000000000000000000000
+B = 19b951fd6f5187109c7853625b9215b0cd2e2dad19af0b08399398e121e1e00000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000
+
+A = b4683383b08f572f4c341f5e0c5f5c47b5b45747bdf557f50e525ab4c8f9280000000000000000000000000000000000000000000000000000000000000
+B = 64e6f98e3e1fc6a1dd9dc54ddc6c23e0edafed2153b4d5ee22aaec646853d80000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000
+
+A = -1c62470f1768a7643a60f33f4f02f60423c9b45a6d91e55d9a615b1c5a878800000000000000000000000000000000000000000000000000000000000000
+B = -37b36519c07f3ccb483ef9073a58714d9d7592eaef3586534fc756fc0074ad80000000000000000000000000000000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000000000000000000000000000000
+
+A = -ad2cafc186989a34a00092068410444d7add3128d60ecedbab07324daed4700000000000000000000000000000000000000000000000000000000000000
+B = 1be5f45e51c8db22a19db44a6f24633da7c9a437354655716e7f9f576a26ee00000000000000000000000000000000000000000000000000000000000000
+GCD = f00000000000000000000000000000000000000000000000000000000000000
+
+A = -b0c32b510943872842f04d92f478cd9e3e6aa356ef45d71e5cb06772a9f6b800000000000000000000000000000000000000000000000000000000000000
+B = -9c1517ceab0b9b4f7deccb9a682fb40cd1b8f25cbeb5c02e3259b2748529a200000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000
+
+A = 2f6e884cb66b6ece457cacb8980e0a257f516aece2e10d4b22276d462854cf800000000000000000000000000000000000000000000000000000000000000
+B = a9efe48c93454696ec81dea21a80431d3feaefd64072b8268d3f0fc9d6906d000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000
+
+A = -35d345d5f3b09c5c6b5e3a8c0ee4b62b75d33eb9ad216b1afe5c06b1dfde1800000000000000000000000000000000000000000000000000000000000000
+B = f0d13e2ecb84721870f5598fe984dc6cdda625257ea0cfc6bcb4c6160a1ff1000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000
+
+A = -366f787d461e84db7dd6c78187057aa63161056752f0184c7c8b7269ddb4988000000000000000000000000000000000000000000000000000000000000000
+B = -608342055904dd99199ded355d90ff8176016aa1c01a61deaf917383cba8d4a000000000000000000000000000000000000000000000000000000000000000
+GCD = a000000000000000000000000000000000000000000000000000000000000000
+
+A = 17e0bd33093dcac82a76230cbf259422a1dde5a664a6fd2641ea2e1a3d6915b0000000000000000000000000000000000000000000000000000000000000000
+B = -3cb4f1b8ecca3211afb467690da79470d9346a5f07d6fef0735f3d5233f8b87a000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000
+
+A = b6d42870aaf202402138b69d0653f924e7bc394eba9abf6977b3c8f91becee38000000000000000000000000000000000000000000000000000000000000000
+B = -c11e29ac4b0084e8e1e2d641edce30fd24d8b40fe3bb7017e3dd9c1437e821b4000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000
+
+A = -2b9908965aef333f7a69b9611ebc02fa7918cedf7c1f54ae5c26c361916375470000000000000000000000000000000000000000000000000000000000000000
+B = 5ff09037286235d9c7ef63a0ed438031ec0ada0efcfc3b847b2714ac4ce14d60000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000
+
+A = -a67ecd61d234964ce910de6ab47bd2026b1fbb102a31f49de5e7d5208ed2a33a0000000000000000000000000000000000000000000000000000000000000000
+B = -379decda433171077d157c2ecb2d4c1a092ebd94d2a1287066624b25114132fc0000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000
+
+A = -3bbb67bce8bbca285c494bf6e1e15095eff1c2ca7d9038090844509134be15b8c0000000000000000000000000000000000000000000000000000000000000000
+B = 5e40a789f4ff67eeb14de00ebe7f7476015fc6850f71628493514e35ad8bad100000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000
+
+A = -c894ace9d6cc4f8f7a0ef8e8d9a2e69c55bf02cc028c788966fb8ec273e9b5a0c0000000000000000000000000000000000000000000000000000000000000000
+B = -bff7f2fb8d4afd92f4df0a401ad9b3620bf5ca610b276303619ab9622f975b640000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000
+
+A = 53564318ec432c30a9f5b914cd542db33267133cec6f121bb075d4b44ee12b1680000000000000000000000000000000000000000000000000000000000000000
+B = -584ccf1cdf30d796a83f382c5299f9fc45435ad60219e12de87d454b128d0f6e00000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000
+
+A = -a875628ca5208d211d7b4810a70c4b6012b614027747eeb837ecaddd0770563f800000000000000000000000000000000000000000000000000000000000000000
+B = 808647ac38b72d828b90185e07045a840af09ecf82d7bf1d614ba86ca960b539600000000000000000000000000000000000000000000000000000000000000000
+GCD = 600000000000000000000000000000000000000000000000000000000000000000
+
+A = -72cc90f561bc466ce15e2d9a4ea0893dda75a7df6c998e3e97787076c53e8caaa00000000000000000000000000000000000000000000000000000000000000000
+B = 6f2ff336ce8049ea1e7a43891caf58c704500e342a998dd41403ace39d903ee7000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000
+
+A = 5772f939718ae5b84986c5ef86926ff784d84f3ee0e3afdc657c6dba098629dac800000000000000000000000000000000000000000000000000000000000000000
+B = e845a7bb64a0d5b3379ad1b6e27bd885636cea8dcd331c50d8b209e6957741c44400000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000
+
+A = -238ec37e5f2aa3ac40a7580e135d64b4462e2d1b3dcb0ed2209b9f45d0fde30f4c800000000000000000000000000000000000000000000000000000000000000000
+B = 3ebda919b6d230ef6d990174ff7329f22e12ff527f72f9fd230c3ea1ed32a1f289000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000
+
+A = -1d2d015724e5d7f9c28de49c9bc66ac25bc6e29f72afb2cd10ca1adf41589c820e000000000000000000000000000000000000000000000000000000000000000000
+B = 7ae8895af0e25348c76a1c9cae4536d0737e3a49f9ed3908f4b2345aa0b5f2b05d000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1fe78eee2bb343c6f7e938fc0c1d58a4334f051f5a7c4befe909a513d27ee80102a000000000000000000000000000000000000000000000000000000000000000000
+B = -32aed1613e74c83beefba13a1bb8e7210668b88c96d14241f7a938cd805733b3eba000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3493c45b156a2eea76c94b03d286dd11ae414d8bfaf91caec482aca649913bf204c000000000000000000000000000000000000000000000000000000000000000000
+B = -510ddf29951e66b6eb61b65b091d252c0858eec9e802b79b58c42e03631af88b520000000000000000000000000000000000000000000000000000000000000000000
+GCD = c000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3a9a161e75b8b0819450f7033a588350466fd6817699fd0f6e60cabe3be7e00e5b10000000000000000000000000000000000000000000000000000000000000000000
+B = 111499dfa41ab6bf37d80d2c57b3d9ff8978cc441f9511b8827c879ea47518d2e50000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000
+
+A = 92dacea76bd085070a807d3cdb8c31d464db98f6c8dddc938bf3da9678c449dad500000000000000000000000000000000000000000000000000000000000000000000
+B = -76e10078bc216dc46078619821127efff9002adf75d16665e37acd43dc2331c7fdb0000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000
+
+A = 325fa6772b3af91d5c90329edf99dd87101dd65b50c5eca00a83249f2223ebc97c2c0000000000000000000000000000000000000000000000000000000000000000000
+B = 25f9e7aa32bf6aa3474b0022a27587de36a6c84ba39dc37680fc9920bf9c179837b60000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9249461c2a7da5a263cb923edb548e676d1a64f57c3c923214492ab7d2f79ce1bf3c0000000000000000000000000000000000000000000000000000000000000000000
+B = -ad2b0e2963c4c3dd495e774164d98a12ace50ff933d9d0b5e479d150d9579244cb580000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000
+
+A = -23c73df6ecbebe08eccbe255aac00e42e3ab80fefdbb1c7b94221a3e2f54e81c4f4580000000000000000000000000000000000000000000000000000000000000000000
+B = 26daa7165efd7a4c93f3feef932823373be0156224810434c33aac1d749aa839096d00000000000000000000000000000000000000000000000000000000000000000000
+GCD = 780000000000000000000000000000000000000000000000000000000000000000000
+
+A = cf2c56ce276df23b75399c41abfbd440cae5733fb3626385179db049e3e520f7ff9200000000000000000000000000000000000000000000000000000000000000000000
+B = -29bbd64bc61690ad968097015e9f0a3e5db132660e8d86a0c6122fa033bfa2c1324700000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6e80995a0295aa364889dfe4518ae6301d2bf4b47ecaa4e451b8f9b5a3df73abfe6c00000000000000000000000000000000000000000000000000000000000000000000
+B = 1c2f8938627b1cebb4af248a398ccda5e1a6021a4b80c822e49e1890439e48382fff600000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9b30e510fea8e92151daeae5645601fd7413f27f5e45b839836e0291fd994def2536800000000000000000000000000000000000000000000000000000000000000000000
+B = b0b9efe537b9f862ce5138bcb1644771a864c4a1af36d986ed3a94c2e630d8297a01800000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2800000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3b3175eefd21c733ca267846e39c9980ef6cd229900b3dbc975737d99e614d9d92f91800000000000000000000000000000000000000000000000000000000000000000000
+B = 207599cf9023171fde89be6b48d555dc64f72c7e4096d5ba32fb46ac29e47d5b9c00a800000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b42d06aaaacb45d6e6c3edfe0972b8f213ab45cf6ee4cc2c835decad1f9b2c61522b0000000000000000000000000000000000000000000000000000000000000000000000
+B = 65f733032d0cfed1b5769b6b6c1392dcfb7ab34e0d38d19fa3c38e9c7e4a3d2ef8b51000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 12073418c52ced08ebc1ed6f4134918b4657dc7567e7fc84b4e39b2485e4a69cd084ba000000000000000000000000000000000000000000000000000000000000000000000
+B = -31b6debc980eb097f4adb9a9023203d54998d62bfc4add0e04b2987604f74281b9b12a000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f66284aa162ee1c3c3d4ad53d4b6eab1030ea0748f6de1899bc722a5fd8456f2336098000000000000000000000000000000000000000000000000000000000000000000000
+B = 51f090fb43b903f14f81a96bfd11f4c6bda571fef79649e7def633795210d36d299100000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1746f8eaaebf001d9fba4345a7c778483b2119fb8c08cbf49e1f33914949c2896e84c68000000000000000000000000000000000000000000000000000000000000000000000
+B = 285c10d98ac4e9990df3a06d2f347862452666bf7e67113452146ace61276c8fe97cb90000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c77cb6dbc154296e9d7a46fb2d3e5e520de910bfcace4d5cae36715652e9c5e041be800000000000000000000000000000000000000000000000000000000000000000000000
+B = -290f8ad162318a0075a2c0148153dd36849e57802b7bf38167e930e28a672e77ee07ed0000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2cc1d18861c40cad056bcdebb3bfd80d1356e19ba6fb96fee3c372f4047061c7eea5b40000000000000000000000000000000000000000000000000000000000000000000000
+B = -22f69156c1dd1bc2f7c08027392fa4a3e5a349a99e241edb935ac2a3d6319f85d2fb3180000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -7251cfe89fa31c84b5f832d5b52f8e1b17a5383edb03c8693ceb87ed01d2f619284effc0000000000000000000000000000000000000000000000000000000000000000000000
+B = -aec6b8a40a58e86ac734f487c64dbe8c03ca4909b82b3f383f8277002d7ac6c7eb381680000000000000000000000000000000000000000000000000000000000000000000000
+GCD = c0000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -174890c84552f03b584c4587b28b98e8d9bc3ca78e7f66c283e4478af2f26e285a0287400000000000000000000000000000000000000000000000000000000000000000000000
+B = -31dc2323e683fc67ffcc2f6eee8dc861c37fa9c84aa92268a2cdf095d554abf132a51ea80000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8196604c2380dd570bb9d424b5b73368dc33e32a8a49216aa0c1c774067e1f9702ee7800000000000000000000000000000000000000000000000000000000000000000000000
+B = 2854c0c615fa784672ab949ffb29bc8500fc0c76fd725634bc3180a023f5cc39c9186eb00000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2883595b3da39e5ef96e10c81123d5058d4a2396c579ba585f8b0d4e76f83ff0a7ac13e000000000000000000000000000000000000000000000000000000000000000000000000
+B = -145d46c227f78ec8bb86459225281dc58e36839a2ae05c55c97c6e1a1096f5c296ff4a4200000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -d5475966b6c79deac4485a0bb4a53392fa9d1f228a7048044b2c862a1bbb4fa98d99be9400000000000000000000000000000000000000000000000000000000000000000000000
+B = e5d94e8f68d56cdbf3d270d2eba9f2d16d3cc31cdfc777c302a2f1fecb8f6d392323bd2c00000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2b93290c6dc5efe19618fb0b57b2326ba50e4ebf747c4cf8692e59c7217623cc1e17267e800000000000000000000000000000000000000000000000000000000000000000000000
+B = -39debba8f0fa5f2827c0d6ac31315f5da1199187581f74a7b46e27abbe8b569902955e2c800000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 647dfeade3cea8271ba696f0d60b8709cd51d66a5c98aba8c668322c37e234b5ea5066e6000000000000000000000000000000000000000000000000000000000000000000000000
+B = -560f4b993415146ac43dc46520663d0619a088f6aa6651ad8c0492a110ec60b4c6dc86a9000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 95201d4caf75249169e82f2618c5d2d11ee92d576741cab49a090cf32226302929f4dee8000000000000000000000000000000000000000000000000000000000000000000000000
+B = -271788bb47b154b8cfdfa45e2ad53db7ff339fbc0c826bd0498c8231b5d0adc3148aea20c000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9c5d847f14699d0accb6f2031bfb5add139d274c7cb8dde9a5aad50d233a3a6112fbb6370000000000000000000000000000000000000000000000000000000000000000000000000
+B = -72325bafe60cde9ac4b74be76f9c9204b8623743bcd339b5015608fd9a1cce3a88b33e284000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2f37dde309117ecc7c93781e97ad8d39194ba3b2d664238b8a3774661d89f6e064f7db2010000000000000000000000000000000000000000000000000000000000000000000000000
+B = -186a4be6a289ea413960cae96984614b4f8845292e990ccb9d281f023dd860c8ca8d99d008000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1577ad348cb7eee734aeb4b0fc1644347e650bac208301e18484e86a0ce8f53e02295ec8f0000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1a5c495b55e9e01ac9af9534290b0ab0d666111a0ffa7591f118115973b3122e534ffec1e0000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 30000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -958f3c096939de2c0a007ce1a85058c9cbe2d080843317246119f69694e632c88fcb704440000000000000000000000000000000000000000000000000000000000000000000000000
+B = 29bdba3ad1fa40cbb955bc50cee72c2ef9043f5add3c003fef2297970fccb343c9f38dff540000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -821272f1f8fc44ff65e068f27bce697086f00a4850e76cfb692e916bfa5383825edba943ac0000000000000000000000000000000000000000000000000000000000000000000000000
+B = 34512ebd519a16466e83a86c7cccbac9bd92940f346ae7af1c0de3aacdc9efbb7f3e4a4c80000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1025c83caca80bc22b2f8662939641a3efcaaa1624056f9f1e816279d06e7b3d39b685050a80000000000000000000000000000000000000000000000000000000000000000000000000
+B = -58ea8bc7b3e4ebd93bc7fa85e20cc41ef140599e1f5a875970c6eea3bf6e5b1b52a7f80ab00000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1444b6fffcc1abf66fca58d7776d7d9861c0ef2d70157b315ad5dc41889d7b40180e3fa09b00000000000000000000000000000000000000000000000000000000000000000000000000
+B = 960b6e6001ac53a527a61bc4e4466a9f929616d3700bae77327e7789dcae6d1c691dd535e700000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 140154532a964dca1c7b84ea513ba6ec8e3e9c24c4f69d19120fa104ec72269119e12921dbc00000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1b8b5363cad0815214bb507678e2c20d8d51793da699ba8880819169c011258269b03ba1ed600000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 582d15e20675e0a3b7a43f0efa930786a874651daebb750872da985f20fd232746956039b1000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c664348e983283783e65020ef0612d3b7d938e601c07ace8f9e9019a6d9ff49fc0451e8e4800000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1f1d4e2fec18dfebef5bd93cb225d51ecb69d7ab8ce0feaa8e1c5a84954259ff0a941f0304a000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -19ff8931cdcab3a789ae13fb67fb704d4be3b44c404e5ca30e09931c6fcb4de6fdc3d6727b2000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 688e477ba62e29da1ba3b1ed0fad94910f048801ae58f360347628049a772246127e55232c7000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6d4dd09715cc7d874d693acbca821dd54f75b5530bc8ca37651b153b9cbd3b49ff208a8838b000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 188e1fd967282fc10c186b4eaba598cf319a4215624f5ee6f9dc87f389cc39beedcc7d091fc0000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3d0f048b2f99f5a3e5ea50aa47e810dece1bc8b7a829d71d2c83eee1fd0cbe3502038ec08d62000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 26000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -391c64855e37941d0eed0bf52de43bf671eb8e5b3b73695b791f5ad79c14aacd1ba3b67bcf90000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a2453a85507ebc7b95ed48966f9065b4411f68419e5265d9b6b42236361a799d625c35696eb8000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2152cb78708c948d1540f808476c06ea96aec7b5567fe4165f1239c2d9bda0aeae559583b7688000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3f315526ec906aa35e10acee74b3f6eb6a95cb1e950323619ddee6ef7d3d90283df23ca96be08000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 141b5a100f51a8ef67434626ddd417b1e6349b3f88d5cb2c113aa50a81c8b6ab0469fccd3b0e0000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 68a66ef6282e4a0fb9cb34fa19dacc85f7d05565d60be79e74a6147bd6f8fe691a84ce5d1d190000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 332081c6cfb22e1315fcebd0e0281724b41a66af831b422ef1db9cb026eb7396527f019c1cb280000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2106778c2e12f6e40e369af74fc1b744ae6950aab15177d72ad561b4bac20fd504abc673450da0000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = b1065d0e29d59a70172db2943e016ced48a0ff0a73ced97b7bef5f87252b7680d3444b19155640000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c439f89db6f12cddaceaaf161dea5adee2b80a183c99b1590671f05c05703eeba95bc53e637d00000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1d5835587921ca8c7c03b5a451aaea4579f174ac66ebce5b2fcbc20d3c20289237cd8c4cb92b900000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1993512ce0c634a7c14e8099a73bd357e72390880739927eec3c480759958011be3e8e077e69480000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -de6d806e52508ce1317c341e9638b23acc165f74d0fb7dc407b99767d9c427e0ada5c8659fb4600000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1ecce5d9478f7e7c7ab4723699b625e7cc3ef0362f1c291e2e5a66183257aae4532c1dfc70f9600000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1edb9e2797174899ea287f95b8f58b885f3ea73abe62fc1fd63824a812b685e9e9127cd39fff800000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 350ca0688726b705fc5677e4a77a65aa60b859b73c47637ee5b8ca27aa81e54d6e4dc927ac27b200000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e5afc34fff877e4b3fa38c39a016da0c709b6aba02429ac3a2a094ef21fbcbb64f18c4f9bbbfd000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e9f7e1599b890c45f06db24bcc4f0be7fe07612b452900b4ddafd8ada86829cefe23988a1175f800000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1800000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -83c017f5543ed495f0a0726b7a95e82b135e381ff8ebe410b85dcc3a91a765b1d25d2e169e64c000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 39b5881482d531eb97675a788c787a8ddd9790a5b40542bc70f11ef0d854fd84c2212a16425c9b000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -59d12844ef5cf8d0772e9da694af171d97062c3c3a11c13e50f007ae159b5a2b40c45acb8bab3a000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b0cb15e3a75b6d52469a0260be456de4de30690c7ead8c91f1307dbe6d55a5607550ef6f9af582000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3a74ff25f61099f5c6b48d0dfd0ff2deebfd35126e1ddfad86d304dfa7c41d0c38149d022f731c2000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e34df7aa7316d55bcf39eb6d9fc4c77121653d5d8b5f72c5d60304c28ffda59f52718afe1a91ae000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9fd415b36e981b73eb18cf869ac00667ef1f8a8f0636e25c6ed93476de12a025750845b19213bf0000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d19137dcb5b46c2a77b2785b50cdfff666972b02fe3aac06895e0a064fd5c0a81e0a1eca330ce78000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 78000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1290afc6859ee575e06ff6410c5135ee8ffc537385394b6cef95f76a15da29a00fdd69e049492178000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 165a886e610231043572364d875af03190e19c88acb1574f0c1c9a4fb3e288244b1ac2998be4dae8000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 7f95f72fc5ef05254dae26e7d32e03c68d737b12666fa20a6eeca1bb4d55d047247ece9ebc08ff90000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 28ea43b81639afbc4d5864c99759dab61a83d65a9bdb3894052afced51451ef87031f84aa3123e60000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9941179294d92f3b76d9caf05c79bbf3477a996c0b7d03fe6a42bd227459e1b9fa38474f07a2fb40000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 372a0e30fc1ce25b816291ae556f40bd912cadba448c0c7b431539992a875fb54a76edbcdd09f77a0000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -faa95c366815fc97b0969e1659bd6a02257ab17f56dc3a7652cddfdb97d0cd3a7059173d6fea0a240000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3d1e6440c4bd6b7c5b2d1c79250808e716302ffc2e72932719f8959fbfb88c2450c459ad9d6d2ec80000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -38b706f1de731e442a402fb1ae98dbe1eeba724c8874c400712850494da9598ff453905ac97c346200000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -26c29d97366f85fcb034cf4cbc51883ff92dd97c020908ef1eed1a45f2e672eee3aa398bbd900cd600000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6f2629e222747e8b58cf5f5645fda3780d40148fee400500dfc2ce4daaab245b7d44466eee81a54600000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -7cdb377fbec367899d49ddaff12c72554281d373acd1c6347a0381a6cf30b50c1586ccd8703a14d500000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -35f3a218057039c22155ab0617b6c3e676e2a11b9661f72956474a974db62b25f464c5abd7e9349e200000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6a09d99531c328ee974782ddd7837cb571833af2ad7f59c3aa3e74836a5b08fb4359e538e085534600000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 600000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ad7c12a88969a3bab8118c556a9d83dd1756f076be08041a0203279f8a00b77170e111a3e31d5902400000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3a5367aaf0e697be9dc3e0e5dba63af17686b34c1faedf8bc387fa5a23c624a7f7687cd1fc6a117e000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4da40cd3081d23ca87a023f0e3ad289b5ec2d3dbb32b2d25a7a15188703934d1b40ed1d57af4b734800000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ea6071422dd7bb5bdaa7aa30a302c62c1c9991f7ad0dbe2824012799964c5aeed3bc3084629bc5fc800000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -a1b1e18758b640e6e453fe98a548d344340d4ffdda3f65725c5531b4922a74f844eb6326dea28fc78000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3403c5ccbb984919a2a891d053cc47b5f38914d04dcffee9b811fc933843757b68272cf701425f065000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 230514e8c633dae3571396cff6f441993df9b39a24c539109b18825dd1f36c8394d0fd4a1e54abfd68000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -22c00229513502ba7b80b9e128285601cda047b90b75b9fc3bc6186ed22141f5b0bee9ddf376eeb788000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = d00693e9419398dfa7e4e9d6998d41552387fed25e240541d0a041aa54224fc17def39358d1144aa20000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -42ed34771876f07054ea280fe97626618f0d9199c6f86469bf9b1ad3fb19939ab1399775a444958b00000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = e0000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 15c173deed253f108c0bf7e404b71af80633b86414a3c5ce61f3dbe756e3e720b5fe11c19d3a8580ad0000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5951e97bdb1fa9389c439e473eb52b50bfedf71b08c594a28207b5f80ad28d253b815b54cedd135ac8000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = fc9554bafa1d9d981035aaa702a8a371d1a06c130984fa2f59de1479118d7cbac5d2c0067c067cc2df0000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = afb18d13e3094bedc8bb29282fc01b33dedd6e66667b5db73ef98927f5b03ad9c29736c474068ea2350000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 240c91d01cd58574a88bb1996ebbf5195e3f0fa2541d1736b2e277a2ce3c5cbe6322621ad273e9a516a0000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 24a5cc6b1df1f7a717d8a3dff7a3c9b9b996f8f30f25097c1e20665a47384fe5791961531351794d4520000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 241f724cbc27a196fbd9e06f4ee55f8d92a184d56bffe5a12bb108ea0c9fbd37a9efcf8fa7dda4af1d80000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d0839ed7a634c5c1bdaa8b6acb2158d061b00ec2f2759a8a6a2b423b74e545cae2742963f1af521bf940000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1181416485aa95e9f68495867a95457a8c8dea9199387c42b5f7206108f5248f15e0696b542ff84558300000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2cfdae739f63fd936b0ce58629646f1e2144604bbee7ed313af556233bb94993dc9633875ea78d51f2e00000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9ef74aab8c0bf652281e906b68c65c382e4857f70716971280b4a2cbd63ad90752f774b8cc0d6ef12400000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6f71a3e4934cbceb49ee81747149bed94256b996cc0ee6489fc74906051194568206409cff00549376100000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -25fb8fe3efdc62597dce6bbd5ea4b2f02c9e584ba828c571d108e1e9e009420821ee4d90cbc5d2c0017800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 21660ffd8377ee1f809ed3ced359745f656e552316301b8cd6dbc723d6612dcd00739d713275103275cc00000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8e907201b1b81074992749d92787faabc565f39ee49fb06c9da719aee790fce0d4f695d7e2f1b3f2ca0400000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e981aaed594eb68739d6b7b7c2e8587f74f4d5206c83135fef5f5041f1caffe62815e6537007195ab8f800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -23ef01da093b303b48b4dee7cf2a40ce642fa4caab1941c9356852dd5002e23e9c87042279cf611f4430800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 335d6230a1db138f8b22030c7e7cfef25115188d6b6472e82dd8d89f7aa910591a2a0de5d5cc5f5098c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4cd5bcf34ce219138456818263fa97959dddf4be46b7b4f2a89fc83dc561cb7a14a58e1285720118dda5000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b515b4b624e845331fa2f933558307b9daa75f4e3d0144ec57c41e1c43d5ca71688705f69aa59791178f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 350edf706d4ad29619e989f2742377f35160bbb9f0a87b0dc7f99d54bfff8072fa5f47f77bcd541d5eac4000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3aa5c48b4197dd6915b580dd9f17e387a1e8ed4d353461db81a226c8f741f990f9ac72809b9657739026a000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a8f4937b3adb1c1376ae2706bdaa0f856b85249d321901770adc0a7ba4d7485f54419ff3eddd4680cdb08000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 527674f7462341f43dbb60310c31041c869bfa5fbe1cada3e00001d686412474b96fb4008f8a6d51a542c000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3f56e3c041e3dd859f1961181e4afe55ffabb39f93acc4a3138f2ee27e7f1e9f70e4e4c809fd4ec1f78470000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1255f9ea2c0cf8d49a351579d49e1c4fdcd5b0e5ef4a4f667454dbde6b4e33b2eadcad2044e88575c101e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = cebd385e950428979754c10d25301e87d84fe783c3bfc26da1dc9d19b752dea3c627fdca745adf6653660000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -60acd49e9cc00b26c22179c7eac922c81807a287cca898f6f0b0b95aa53b222feb6f555457e0cc9d6442e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 60000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3813086699261d758a2b6761f34041572fc267c2c085a869db1834068e73b1dc1478ab0d1b49cf158dd3040000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1342f426979c393b085a1d73887ae1ac921cd13c98bafb7f7cf2c492dbdb8b8c76481fd9cb40fe232542640000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e92ae3cbf173edd390f605eea8c6ba9a49622014fca4a515a390cc701aa6a748137b5504e3c25e65f83c140000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8609296213fe3b854f2df1c21d69c2ff9c721344e7dec07ac254ded6ff94b4bb7c38865818dd2dde2580d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1947756348fb288ab26bac87054034ecdd6f0b30b50aa953dd0f0459ba83e9f6517b743151488f6030861780000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2fbae78253f33738d80b3440153d35e6ca18f36e1074659a223a7a2ba0a59bc3f6619f37edc989d556b0de00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3c307613e235b45fab7d940eb12272f5e88a64db4275bb2fdf2447bbd9799564c69fbc74a29727f88afb7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = fc0c7fd87ae1c5e468b9edebd0e838ec602da42d82fd694af65eaa2f09bbd50176d4da32d5eee3e6f3f42f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -14513e4f561b81872e379e08f915731e58c34dcbfd1031a39302d93c3b5da670dcd4c691a29cbff47e858da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3c09cac45f8edd52c7191a0d64ebfed9bea5ad81596b9215301d17b0a7c56ab04da74289ebaa2d7be5bf3ee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3041a8ae615e5098d0540655552872b00be6fae7421043102e1d6ef56fb77cacac82d90b8a36d23e822bb2c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 20456f8406b740aa2e7d04da9e46d065bab12861e8052e213c5a00afdcbaa0c6064e942c5bd0a03170b5bac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 24bc4fe23155ca187127648755da3b8e93b7d87f1879d4d1aeda2631299609e966ecda0468f2add54c45d8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2287b1449914bb4e029f826715ec11dfe23c128ad43a108dcddb4bbfd4e71af400d27129da2b79e3840643c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 4d5ffd2fdb1dd2b35b79f1cf6185128aec655d8ab465673c347e1f9a3991c7ffea978d46dfecbe08b7756ec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -20093a2a97d5065b55b5e884accc9bb800c43b78d6cb274bab097adab349a8fb1eade475674e206661f7a36000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -39dc2630ce224810852404a8dcf1455d56794690f04033bd8e28c58cbac4c982d1af5d2684505d439f387a3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -10afbdb72d6e83aed1f8feb6138ca67a4149fdfbe243614321ae39415705589a1a3b64d072748775b7ef11c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 652179015683a45a8108bf061cdca1c9581177d247f4a6fb5982efc0fb669795a5c2c6275fdc792eeacbbdec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -926f732df849004fef37ad8bda6e9c53ef204ff95111782f6c580a75849c65529d3004cc766c2f4cf19c48a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c661f708499e6802ed3736543ff327b90b8a17d5bc8aff3e05dd68637aeb71fb94feba186d79fcfda6102d28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -364335a19d0534cdee6a98d800582d471965f12d80c1c2a9868e5cd0e2fab7e260ac61b3ab0789b9213774a20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 371e1b4f542280ae1bad791971f0f0e0e30c427b6babb6fa80d5322c402c36ea6fb4de528a130d806453b29a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ef43f80c69a5e05e18763c8f7d1c1dfe0a9d46d3fb08ca529b7732ee664f24d1719be76376b3c907e72d5f370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -17f9a3ced2da274ff55b74ae12c1634386a0b522c6cfc185ab44c6ca09ea4c4fe5ace8fe4c9876e94397001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 31ad1d9d6c5d410f03479f3c8b4018cd5a927f3ca1327782c3e053b5312e3335273f747fa26fd4e7d8a3f39260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -9140129e032845da414d04a1e547d917f1a0741d58ce7a0ea9ba7d660d9dc8fafedceddf425f708a913621b0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 47c86f36dc3301ec6c5a874d3b3d7d0e44155cc03739921c919b44c8abaf74add57d095e44b0e60442b705ca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8c20a03383c22d67b3a92fe7e1b9a613eb1e1642c91b8aea20dc1cc7c8b9a4fe18831c34066f5e589f1107d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2531eb94c7775222e8d66104cf1dfce1735bef9abe443d827ced467bf1248596d34255de2b97526d4344c8c3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e214c332a8026666ae815bdf7de65c7c2f260a2f1a66291bc9c38d89e6339f0da276cc524d845038b4f797a9c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ef27a51ccbf428c7aa06a669cdf1c4c1f72a39c2ee907be9ee27d966144465f9995ab07dd9b01eca20de0c0ea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3edc8efac638a20c14095039810bb5af9edaea30ea145e6224a770abe0e10f6ec6c3fa7467feb838a4c347275400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1d83fd1b4c3f5c220135878586e5ffb57f7e8be630e41b1837ae79ec0df7448509982105fe7f44ee66f787b56a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a6a1e8cb88ef1e8541ceed32dad47bf265b25f67f2765ba7e50203fba2eddf9b56bb6c569ba8f44fc572084da800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2b096aa496e3d23f77f5fd83353fa23b87be1fefa9a3d5a3b61f6f101d791f3c6a314964f8419d0dafb731da6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2b37c703cd8f42b0c3c59e0f6ea5cdd552c19df0b3ba6e44538ce96a13319c1f78e714c8aa88912908a9c68b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -26324033d485cc4ceb6c712a86963e045debcbcaf8f9db49082daa3dd777e3f2d7975afa8bc55bbf3d35ee6687000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -27242e87f77928491e62432c83784957380f8c98ddf83c1569c9c6751e5ec1f2fe53f889e340c078841b980dd5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e7998ab476393b8fe51acc4012c1b2b557c19f0fddbdb6b177aaf14c1073ce5b5024c2de35301c6a73703bac1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1fe059727826cac35f2c644c5acbc6d557883e614b712897ed24fc5e86124bdcc7f9db8d9ca0e8e7369e3b2b746000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2a35653d48a7401de2af0a23b84343faec3b6fe0350de251137084aadecc232423650804d0a5bbc73ca9ee23e68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2e254a5c58f04c8a48eb4336929cea559019394056c9fbb4ad8e9a2d8169bbbf59b5c34708925edf886471c672c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -11dd02b8b4b02fa4780781c380a7815eec5c965c135c7fbd1974d114116768100c508c2b37b330f7e934b0d3510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -17322ad680c539c17aaf4f75fa429858d50582017a810c15f88d5d314b2bfbc662586ba2fae425da9f2fd3f7c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = dd928374f275074b60388cf584b52314505202eead2fb851d6540540bad426f508366616eb135a7e911864ba168000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 4f3927617490d6c0d59b6665cb2b37e7b9fe39ff97e6c8481f57022ba306aa45a74a133eaf1cdecb5ab785476060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8991a85418e1d51ee1298ca96d944a76e695f20734670cd71824cb413cf85f97eccb516ee5d32e7dded7287406d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1e8682542530b67653755ddd1793f2c01da11899a157c0d23145559aecc5c8120f416d48b9b1e284063702d39ad60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1485300f63970596284a2317e04e9cc924e2ad891a476abdab354b6c387602e3cbe19fbefc590a575629747820e20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -cddeab073ebe9dfde5ad4b2d9252de55fd9316eb814fb89ee3b2b00913eb1cc60afc44ac5cc62e02f7ed2d2dfc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = fb00330430e3960f76524d77cdf33bfa0591642c7e094f15eeac8f15380b48464c203e8c46ed7aa6e79756fcbe980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1a14b3330f8833ddf4d2857a60168d93367ab3ebd192e6de76234dc8204dd641f14104fea7c6cec13b91be73cd0980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1c28a5a0f1d05058373b0789d98f2fab619fc34ae9b161e192176428f318809ec7e9ee68d03acc3c5a35c1d3482700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -a4fce79c04e37242536ab86989fbfc45f420e670168c91648bcc0107f4ecca39c9eaddd62370062d886ca2c3e84d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -48b2e479318d35bb6af09477f71aa44c577aa2da6d2007dfc4d794087dfb1ddd684362fc5b459befb211355b240400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -307b0f95f6cae4c4eba0cd6c6ddfe277ddc90cf050b55073bb8303cd45164bc4eed2794a020c8f6b725698c57fe6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1be152a4159aca8d9af2fd2511e5684850dbc9c2bce73e59a095edcb77ab92b6eb2c62b02addf8bc4b580ec5b917400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = dc1dd8aadcd952eb3cb0dbdbd38d9a843c429d4836c41e70b419052f1da05132c41d934950ca644ec10c9c9f8285800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3279fb74e93723754e9ccfc59e74d5d363de01c777963cb2788c9e3308b74ee3aac80b275d347e3bde48e54abeab400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 12f99afba8bd42972528817a876666f773f03a325809c20082c49bd10d2b246aec9cb244f8a178bc1df323139eb6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2c1ccd22e05df3ca39d2071c517d8432b8b7540eba459eabf7834a4fd68925b7b4dab8b2432326e96ab94690244a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = d94c6cb4fb0d88f6c7d749e6fd277efa5336cc554cf7375de7325662c047864597a7bb0ed6bea2ccef9bb58dfda84000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -fb422c297f913db32d0a338267fee3bb11774632d91d98004bc2d466af46ee138642932a67b48df75c42b0af6455a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -69d05e3d1dffe6ac3bb4c79ff4e4789f1fefb1379cbc2d9b97008a5eab8357f44c2eaa2c678588311809846412ea000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -294a114c84ebbb4873801d67d76fb0c56a3bd4b5028983ed2653cbfc69f2b60e38d8c077344a5b29cd76339ab75eb2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 854c7c862164a36c41cdfe7feef15c8c90148dbe5ad2a8864215737a40f2504557ac07b468b41f33a2108650488510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 14b81e2e4033f78e2b4edf99bbe3fd4996b19fd939b015884f26bb1b0467e0a45c074e3cc6a79eeafd9bf05925785c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 124ec38ec3b78cdce4aa8731b609044eed441bf6ff3043418c9b03c7ce5cf8bdfde183457c8c657ed249e97c58be9b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 130835fe70b5b458d1245728b1ee3fd26355fbabd03214e0c22ff2feb740cccd3d5e06dabcf49dfe2d745a50b8eaca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ec6f7ab3b16d66f8439d905ef765524b76d08a7e61bd0814f7d2d921e6f82cf5467cb5e67bd35bf03d76e68468b0be0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8ff2a9b6bb3e02edbeb2b2cb3c31ffb2521aa5426fd308ccf5c412ad30d08ff326b9b01aef71b5e6c1a11efd4c609b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2102b3334758f61920c922d277c663405664e22da9aff33f62a348740fe437ecb898cf4eb99f03031d8f478eed0809a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -21170c1ccab1f49c0c4398c27e70b415139d99875e5b7922bc9901a9bc9933f8491c4dae54788da90c84453e26ea2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8e756dbe0b3c71be7060e5fe65038f3ba7162895fa0a43d56e1ed15c673cf3fe09066d7cbe9fee49273b7072b1508380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -37e0446696db8c14c955f377ab3074fdadfc60a7e0e0ddeceeb9eb566ae7f2a9bae71b0cd0c8293f4dbdaff04fa15d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1cf467bfe6c13712d15a9a7d50073ee04f6fcbf58269b3a9f5b3aa903972917f56504002a098550ce8ead2837c5feab80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -19830fd8ac160304a4da4ee9a631af1e11eeadf3d6ac62f7847e9166f6ba3c837116821f7047f2d50ac1a7f14abb33880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3a2dbc0b3acc06a4dbf764199185462bb62d406499a9afc1602da6c394c7e1ebf1f0e7bfd60d8c8ba9a29204233235c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 33c006e0348f5cfa9de96f05b74a081b63042c393511b03d0b3a7fa681476636cb7e0e55399865477906ac342200c6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1651570cf022eaedd5940ccbfa8e768f9e9e34c47eaa117f6d9bab2925e5e6b45dad5d5c56c6c17740f73c2c8c34401600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1064051c3943f180052b02328b50d793672dfa9d5b06f7107689c4de81ea691cf0289b96c33161ec96267ed05c48089e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 11d1c5a84ea9fdb93b0909e1990162ee2a36d70d5556fb65ea381688eae30dd82aa3910f3166774a10b30f49defbf7a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6837413d83947a7d0a192fd4a423d5493af84d94ec47bf550ac783e6e0d863d2eef32e8a74ea518af6faadcff74b8ed800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1e2233d7423ee38570630c70f75f2eaac3aebe95e8b0a5ea6b6f413042c1735778255b7e4df20757b79c0e4336418b9e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1c410c961b2ab35e8457b0700e4baab4085e92ad6582cc5f4474299310b7ac0359501e50c44f06b049191eb70526bdba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 98c2903fc0357305b52adbd08128b5602e322f0d64fa996c7d250c79bd8a365f765307aae3ee1b278b1ca63a518ced6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 39b31a16f51199d09c8e7b508b84d3cdb3af37114aa8224d3de42f6aea8bd77b697d881b51d9d8d3d989e359f888540e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -282fe736dc0d2d4647636f74b280cbcb0cb024373b0db01e42cbb703873aae2a254269f0a009e89040ee0b975a781c71e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 246d37eea4013424bffb473b962445c8d11df2991b7aeab386f1ef6c74677f490b5cb9dfa192c49cdc0b8e2e7357b9518000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ea5dd04715e5341a22085353757cd8d5d1bb30543f9489b5c0e837d2343f4f59d7988b540e8445addf5e3137d0ad19e60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -676d9509218f6be9e45d6770464447613feeb9745ced277dbf7ae736a57331af2de73f3066f1599bda70b500fdb17637c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6bade001a22cd5a2e3791eda1291f868d0ac2f915249b2f87346593a472971a3f656692ba7db7ccfd4acd7bed294b7ff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 18af9c999851c80d8f79712e4a010b4444fd7931b61ec2387dcc22843526624fa803175f8f418ceef9621ecc2747f0fa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -fed943e98f18ace1f5f036ffbe2d7233d1e4b3b842b8a0277afff12a68011aaea1644ad3f73b4e84cad57b9b0fb37aa3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b6d17c8a7a63501c257f0d3f57b05039aa8e4b8cb947f24e2a3627772ed7de7f398b62eed66cb4ec57d9c6a56db39e74e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2acc4132409102df4cd128c9f12f622bd978a4cb366fbd558363f6f65afe7c4999bebbd0ee758956a2fea42f1db0a607380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -301972c9a8d4d6269f68872b7ede48d32f924119453460d2bfe5f6d4ba317422ca550269e6435363370c2ea5c073b7cafe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6ac00e41b206588b14b64c24fb326bfcabf1801bfe0b98aa46ede6b39ac52ac4746e70bbadb1fd6176a96a62ac98f7bc540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -a093a78363f45090d26832da116b21c5629b37b3066141100e7c3be6053fcabab91e1263b805b506d86938887b5694bc340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ad4314dd81d9122b9915a256ad6146b419786fec3eba40273b7f8b42663ec41c9b99afb7f018dbc3161e4ae85ed60104b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3a4665679f910bd369cc6e0d1fc1fbbaeb63775d1d282c850a3b6603c8f45f4d7a0e5a7aa07cbd2203d8adc6d032e6b82680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = d1af57f0074a7f54e54a06111359a80fb13c81fdbcdb9824304bd5e95f0f6f659338e8f3f1646fb4344f195f1614cf3a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9d9cb0029cfea20a45e20f39cafbd042fb00626b9ef37f3a51d51b5f90d20638f390079dedc49dbeb92f4877d05ae9d16200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3f7f8c1af3c2bfe944eaa8a87a30defb3c376e2f09608e80302958c529444f50f419971b06b568755b92df7a341c2a0235c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2fcf1abdaee977b19b9290a64ef964032e3290a8d5afcdc337777641e5a1507771e3415568cc42abdcba9bee6a814f5d57400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1e470cbf4791b48008aa27fca23d3ff38cf4376ed222008c512b16e1d32f86f6ee93dfe85260ccb90a55c420517cb6c136c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f5ecbba8af69bfd4078444e440d42ca0dcdc7efacdae3735b1b6281e12fda186fa78ea91f760acf778977fb2e34c836de9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2a1e087a3b5f55538b58609eb94c9cc1ed7fad85cd072a23441792d832475c11a87a7513df1fead996fdef9b6c25b17a7f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -33d295fa352017ac6de428bb334e914cc01ac1ab0bb03b6b4d5e3e100df9ddeba1b73acc4770b695c545631da0742deebe2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = c512e1a27bd66a7f91480fdc5c05237056e732987254151412c77b828f398fe679147c40942232ffeecafec3aab94d1f9c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f55d0b760e45214cec64d08a4afc6ee1b111c9d2a2eb18df83f26fe9ac56765b194e1950263ea0239259061b2d6fe470a91000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 138c24a76e69273b7435ca9bd630512ac0fcb8a6f8c4c3fd1365f4100600fc2bbcc976881030fc27ad2c17ee32706265630e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -4ea6b8808108ae4c9a1b89b39b566db49319e4b540ad2d459cc0809cfafa6224e2eb7ba0997dc344b2fe6bceb064fe9f316000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8b4fe99f74380edb445aa10090558c3058a76155e682c16c45b74839e2605f97a40947dea3b6d2aaa08363517c804840a6e8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a80eb7adf3237c54ba6ea96261dce81a5ee247ff348fc7ede7165e1401cfaac9e8c087d7be34d9709e0da844bbe9e20d3b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 17d4ae83724c6c5399f423b436c89533e0847ed090dbaf67912701a8cc2604eeb132c64d12efb941f9d0cea6b8fee904bd298000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -22b2d5b78a8036bdfd99d3ead2f03a4f650755aef8fb60a501b9a5f8d727caaf14e82064c9631269c6af03158ef872193050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8f471eddb6b49c99e73df4a6b9dbc6417846215f700ac3b6ed2856cc7476ba2c70b08f9092e867958b6a62885efd0ca45d6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e6f51bd41bf34fc11790ad62c664c0982e4a69e4110e4fdc505efef238bfc5e7529b46cb04900cf41ae08318219977537a930000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -194b35c91d18478b81904c92cdd7dd1540eca9844f3c443964d8a760c7191b750719f97fca6204f7312d2fd00e3a2163f0bce0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 179da11e3a581160555c68e11f7fe2db8774142c9e7da3fe873c5858253ab63a849139d196b61f62f60d42b66de35f83946820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6dfc9049e88ff41d5185c1bab18fd76cd62aeba1b4a545d3bf6e2a441d9517c641f0d3d18d178d6c7f9bce775f82ae3e8bd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 882035cf6da203c7b5781e64d70b5f2cfc06ddec556cb62b5fa7e1e07b63a8698074625bdaea5752767fab901822549bbaafc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -54e49be210ed7aa8129d30b081db6570636ac42e8e9cb481f0c07d7237bc93340f41cb05c32b094b69469be1d0e6e1dfd1b800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9fe3e6e57c139c98b8e9dd90d4e4874620b53b9bfad29b8b8a3306e70be5503f2c2b5c99df23d15d5d43123d1a23b184737d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 958d476232f2222f7a68f0093a67043d70f60578eeea0465ae1a26dd252ba0373eea6499123ed583fcec8c1fe619f702e80b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d2456c06e4c04a9d31e739f2e3ed5413cba17f65fdd1bce2b070cc95088349b6fd63e7e6b0545082623d70bea0cc97a4bfe7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1581703500f07824e4f8f7c364f96fa8b5dc82d6453fa7e6732516b2193b88e92bfc96954b8bea88f8b6c664aaff9459b34e3200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -330212ed7c4a5318a3fa333744ea8eec4974f5046e49bbe5a188bf1f83b8b1182458752d657a8b8fc65caa5dc4001a622dc83400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e7658e044ce7ffc378e38f3465f214369765c5272a1a72782521892af48b89be9e5f07a11aa6f18e38973f565123de83c8969c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f43156d81c7b7917054e40f432e084739f666c9f5a763d2a8699775a1e9733498cf45b6dc8c2b4833873c8569966beed75179800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b654d4669be8c827ba52a896538b00e6337c63692b825f88f860143687b8cfbfdf8cfc7ebcc2e29af7939c5a9946326f9498d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -12fcf9c041f91414c846594a5207381ba784c7b48a9e77a4c013d79b69c9808534603aa5d2c0e0d6773e762357e686c4c6577d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8bab5fdfad182cece36305fc1d77802c499f42f40ccedf7b0e5b0b2d90f9166480093c90e1bc1fb07211883884c78bd75fbe9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d86079e99f55f6795b13d0458a0858ca85fcdf06d4eea254df886e9fe65f8c9a175b43c2a359e9ab46e32d40bce1b71013f8df000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -311ef54a66aac5a28513e6da7c3d54a1ae9d6633862fe5324716521bdc382c7f676d318bae600f11ca07bcdfbeadb0dd1ec7be4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 19f25f317d396c65c33fb47f6ad21b937f6cf7b7662829da46df7820e00a637b25ce6e4e3851212e635248937d098177a2d0532000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -50d9adf389f58db50113428b6378b0e8fda48edeeb10c38bbebda38929fb5b3ecc6a9a719129c834a8c158dae6327fd72d33640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ed90eb403352d0cc9040374baf5fb06ce09ba122942824d368be8aa2a8ff49a6042bec0a902fd018a7a536c526ea97f4ec2c960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2965734d214245bd7932f3ffecc4e90044a3609e5130e5748eb44d23e2df143c121a153686fac129ddf84b5350dcac85e2dca0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -327e6e2a02a00f520f61bcaaec32768c295a920c54143a9d759e588ee2be8ba54c3f7f301bf6be3fe4ebb65621bb31a3e52563b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6f23c91694263de0d4073fafbcab2d345906719c82f7ffcad1513d56aa08c6a66ced982f99b98edc5682db84f7bf620f8fc35000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e10989005881611bd1aa21928cf9e737efde8a0b5ec3848c85863fbe03725415a883883307a17b4dae7550cb21638733d16d6210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2dd1bcae3bb97e35ae06487bcc759faec26a3be3318239c238df3b28ce510438bbd0a8c90f8da7d8d7176a9f0d8f4ec03989ccd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cceb0a7efbb07bf151e0bfe2c33806d3ab558829413ca2359d0979e05ac1cf358031a172a3d4f22f2168cfaf4e7e6f6e03709020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e4198c176dd9148aa1cf76ac0e4a4191cbf5e4b501e47e54f380cd5db9fa18562e3eaf9ff04f2b677512a3424daa44cb201c8bc80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -57c6067d4294d4ad6bc68f3c00798c9d133638e6f66579ef80d802b9c797fdfaa1ff584b027d24d97b6cf653abf98c1f3202cb280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 11e2e13f3bcce80fe92dd8b24e5b2f17dd3d285670d9ccbb1d7ac790b1dfaa07318c3b74e41ce636a2f6bb39777b456a100175d680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6b0d65c740ab0227e1ba732c98702e1c5cd6ecac774ca6b3546250e9f3c1652f974d7463db67782dbd21bd1026045f6964506e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1dc8e0151daf411d192c77a87195448abd4bfaa2a1024d5ca69fb3e11f53b3d98408af5062d3d11c8271ff7fa56aa426c94568a500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ec9df07a52e35157aea6555373af2624a810f2cc60310753220148259d7658792ffe50bf90065864c0a4244a2b86f6cefab9f3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4a7526ae3dda5cade40ff517f691b22230b61f8f78b174e6ad1a405eefbfd8925512b2e74554dabf1df4ffa7c1495faf9b8aed7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -195301ad6ab2db5c721f94af0816386f3e7faa119a8dbf04f01881b66405e669eb4aa6d2cfcbefe22001206b04526ce1aa645e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 24b2bdd6a06e918a55263cdf7fc579c5f8eb7a63fb7247d2c0c45a7a06da3d5dd64d6ebd29254319af6845c30105ace8861614e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 73a5912ad60ac9ad9d8a527cc48581efdb725c4cc32768f58ddfc4375c65b0b4e68de95c13b9fb0154f8ede094e07fc37b41171800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 23d370286c9222bcd14cff27dc613fe951e37df44473e88b024c3f2c45e3c7cab430521419e6796bfec87b1a0ffaeabbc4afb40dc800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2729b57e76f3b7bdcab35a888fd3697f8d111ddcae2bde871e8747d8d649fccdbb4ade66622a4223225f8bfaf37508f3101dd7be5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a43009bc110acba7c6abd100862e70624d10b7f7eb1d1b2947fa64e72737c59be425bf7ba9b2dbfba60d8a76a8162a15da4264b9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3e413ca8bd8abdfefddacf3ca06913423ff1c33419b5b34f6ced3dc6b00becd148a5fdbe07af06edbb4148f29960c2f355a0d25be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2ed4fd5b5dffe6d38e905ab03aef5c8431c82bcdea7320daf887a9ba83ca3395f434f6e82870e9a6e8b739f194f2479940e40f9c72000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -7d3f04d250207912400c8aa6cf4f0508250e70c00f626629d6de5609c0169b39050164df8e6c17192dc7e3ef8449094c89c1227c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 944460808522b6f8b81cb51ebfe567a412ae60209efddc643c15b829f3deefe4c1b7a5223b9a2994a1ffd38fd2c904b4a4d6cd50a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 83ce1fbd1060478b0b565d8fa29e66d3d0e35f8ed5f5f6dba1ffa7f706d544a7d9226082791d67a0bca58fd0519174acb4f560accc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 82e61ae1d8627f2ee2fbaac1263a665da181678e47557089329027d52399a91892b854e18d1b0ffd7fe6295cbd9a5462cfa5d75db0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5ff76d333dd06c73cf8966d5d87c5732bcae8cad41972b2b5f17806f0c5efced740ee1da8c765a49aedfe9434bc86003638491ab48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -37e0a0076fc20011bb270fcc5641c2b32afcbaa5e0eadaea14feaf30317b4a72e02854c1a738188e6e3dcbf403850bb8c3e6f8b7630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e16000ff2e062ff557581c6b1de878e90c49c2e1c548c38ba6a6212d92c994eaa6a47f809c526e39c65fa8795330353647ea78935e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3b9be8e7c92df3cc568694d2f7dd460d73ccc0e4c86ae74cdc1fd00b31d969a5acc11a8a607bf6d2a8cadc7820b9243249c781183fa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3b730365d00e743e9a2d920a4fb14769447a88754db96ea1cf1ea8bed9a38d9045340ae49ca0c34ac886385160edb2e0b5f5a817c280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c0d9c4ed0414925abc546956ae50da7f1b8591418198b67e5a2f9ad5e7d447fd905062654d3d0550e269d08840406c80816688bb4640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ab9690c558b46ec921cd898ac3b263765f3f9aa91b271fb3bf788628b673f2506ce75476e1cb75a88e34857b1233ef07c4f9495a0ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1ad1cd788f58d624d8e0da103bb403d949625e8b4fed472d3b963edaafaeb11e617df3cd703d10501ec32118c68312aa0ae65e7b40800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1297949d540eb282c7f3173247f6f5f5b760b8bc1eceb588760ec0575cdb8f71fe1c088c0c81dc8fd04c9f5df7c343512a4b6bbc3d400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -df52543c9949e056f3983788382c612149b179cf885c30bee2f5d41326a63354f69a75e8f7e4cbdcf73d5ed7003ba3f4b430a5ac82700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 30ec298815f8e9d897a5ada0b36ce663b3f0616f7967f99f41adc2efcbf19d4d6b509a08ffd1adac237ef773af49ebb591ab734b11c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 267b5594560e0601fab746a4a47e63852401d9e7e18b50c029b4fb238d796b1b3fcae5f44fc761fd1cb5f039f0f918e968e10c329b3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -257550bf80c1c70b1f4dc1a89db38406c46f0dd64406243d286440c84302bb227cd314c5e69be7484a40e928cfd8a48a0c1545e5c6f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6a490ced9378737d442258c906738ea6afbdf3ce7ff1892a36927695b33a55ea214a68c093f039e79e76d9712c0ef32f965025c6f0f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e96c8416d3bcfdbbb7c6c476b2d655a1837b56a458e3beb365d6c5bc93cdfbcb8876f9702629870d47fc34111334fd672a6ad543890800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2a17a681eb6f0932c21619c6449aa538413509ea46989b6ee64c298ee5d7d9123d59cd76ba4803d3088142732562b8366b657c603e9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2d35c043937c08c99ed7639001df15aa363c0962d7094bdaeadfee8e34537b87a8998592e08930af04f1b41160da896929a8c626d0a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9b048fbad603070034ed736c50a5fad0e886a5141f23b0bd9fabf996893c6dae327f79fc367767c0c7dbce5e8f36546392f15b41d62a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5da6417524be6792cd46fd0501859d43e8a1bd671d3fa4b29a9cae9a8ee8f067b391c6b452cafd47082258452547281f0cf6be85c8be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 208e90d58703ab23b55b2b01e1f5c1049324661e1916d50981dcfb0bf92895b41191450d9cb635075ae51c0bfd85ab2921709d5df47f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 20a6bc3ee50ddc723e7b20fc48f685d713ce243c8b19938f375f9c2e018b86e6bb1860f8fdfc358afe963812d602e8fbed66eef074a5c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1a58f7dde625bd918fc21ef8472db72356e9e111465b9bf88288b14044057fb8b9aa053eb0599c6274c2f54186c580e27bbc216b8fee4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f60d4162c50b0b1c0a33a552dd518d73738f70a6353bd379d85a5f16b2c3d5bf10888585887906da7d181fa2b041e8b045ff0a5642ad8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1fbe3b860e3479cca3733a4c4161dbda335b5e98b300c76ce6518e1849e0438c2922214dcbf3820d4ebdabedb5f59242a740ee3a6f2358000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = c4d1e0a02c04321bbcf34846dc28fe8efe8ca6e21c7bbe2a8a3073d7527bcb8ac9eebb50bc5106d097c232d1efe74bf83c0af49bd4660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 5e59959398e8df61ace92301a6ec9586d2c76530a83724516ba7eef4c5bca45b15029f4d19ac6439038771e4547f9b7318489e326bac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -74f70a85eb5162b10eaf8e77d5f02c5efc84b7d8c059ca78ad6b8348681b7cfecb49a2da56648159b0c9d297f8635cacf146af2afd3a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 16082d32566fb15e2f9c670d23b01fe4bbd9be3ee55926da6e50bcd1276f08eef649f563949a94b7ec1729363026c812aa93f07ab211c40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 31fe2973d778a9a03d0be238d07adb77012ff5ae14ec7efeb0222953e30c58040e90b065b9fda7a82954d6e3065bc48d79bcf45b5fde3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -97fb3b3be9fa79e81a8df993c145744f3b07d21c65df8325cc255206b36ef286b3bf3d380c07a948b9b461c86c8ad82d8fd6128c4842a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -892da4175c99696192fbf5ee2a38dbdaf634474ad22e51c3a7becc2e19165fd642615b8d517311164c9d01a146a59b14f69df4f4efde600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -363a3b278df2164b2be39acc0916dce62edf49fddcd50bfd720178f14ee6ec036f29ef9ee69e4c907e5f524ac51770bc050797652910700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 26fb54165025c14b29ad1e68ef821882b7fe12783d03ba762970d075a091e519de2108a0d9f7e6d472e82a441f5732eca0b6abc883c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ba71d99aee749a2ca2854e9e709e41858766351cf9d03783aaa550151323610da2f091bcf366b3ff5904bb3255ac6dffe4f98cead6ff4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cb6943968537a36b323fbbb5cf16e13974a9a510e1a4ba28b53aaecd41ad63904b3de54c58aa6bc36ed640c9b42311b93bd2e43e1c80cb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -15fbad668e356cdbed65299297cb9a00aa3847cf34a0f206903145eea8e13bc2f21d17b8df451d3173db6094837e7f70162e2c073bb5b0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 19c26dcb74045c8383eb2f843402031777df7ad1967b6b135db778127dda9cf68b64e92aadc49a5ce2d645631979c8009450d110418ef0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -bc09adcae91952e05e87ed4c20d862c7d6eae3b0d4c796e172ffdab2e72a9e28f232a93629554e9df545646cf121ac19bfeefea8b62815c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a4b1a564df345bc6d035baa9c3ecc3285d538a79df8382306202ce8ef0cf5eb2dfce424a097066f489017734809259935029988ddf7610c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2922278776b7f43a4e574478892cacda00541526acf1863cf2041ef24b49ba4ff0ccd77457804842d2f9aaf6f47c23de61db9b09a458116000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2d1d896d9963e77a5cb57c8670c0e5c09047a79f620fe5071825b56f1f405cc79c6364cedf1a40afbb9c332263ee97848379f58111bd145800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = faf78dbd28f462715b6eaedd26d587323e29f4fcc7e101cd80df87fb329c9e33bfbda8fb67c1a306d0d9a798a90193a6c46a00f452c6bb1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -aeea244fa89cfd16309c6fdba144c4e6c005831d24b0c5cd2c5fc425595489128238bd833a79aa9abd4fcd7b4d95aaccd6078354f734cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2df2da3abf610152a19c56bf482494dbca4d30088a41dd8849aa42a422e3312b8249d074df493e1205093dde7ea559d64307dbbba360172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ee70f764499d52ae0806082618be35732bce0c76b621a631eea1f8eedcbb63c49f05acfe02868e2ca79e37d4c4bb235c8caebe27035ebe6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1ede350481c5a959b3b08a5eda4da1d16fd0c34ccc616752c49b47d12eb9b73494b573045fa9e7434f5954f89b2eb24c80116c9b81b14f10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e570159be0df0932915fcfc3e4fb2ff4ef245fbac2b28fa3f4fa59d38b4ccd203092a82a5b02c19028a915730e7902ec98bbaf0840d67380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2c76cb01011d9cf305f8c300651ac806b3e1250826c4e7d0320a8fe20b4e70fbfb9bc95585387552f6d16c0be81756c246ed9286c779af90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3ffbf542f9a809b84d77abef4f7b5a9c053537e880e51d7d3091d530f4a165a854025a903f66e6bf0030d2501da877ec996d614351a618b10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ae2f624ec2d2b69868583373927b188ae50f2970fb4ec6edf4b29ff2d0c13549c06b6067d972efee7545b678acf43a08449b0f27d116fe270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2cf78b9e68ff2042cde8eebb99a2e82b59015fe0dd86c79647a8b88f9a1e80e369b66fb80964ed8b9af9fb0a69ed88e06f332f7bd8c10ebd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -34a786a37fc6a8bde64f1eaf945b0099e4f9719bf9fc95d0b79cc9cb9285313ea530571e9f4ebb38446964b6f193ff9ca4387873393ace15c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 10cd04ad0b00c658cd7bff4b865e61ac6d5e4b8df9a55e140e84189187437f89cc4647cbe2e2cca368028efedeafdfd109271123c896299700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c272422435fd24699bc0681de381e71059a882f507df8329912c30fa14f047511cef47bad9b09e6ee505d4fd034df0a914c458b423189f9b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8e2b70ea907cb490da9a1b252bd90c22c1310d3327fcaa488ba31aa2317310858e132db83e8f30c67ec830404633cda100452fa83a7beab900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 516f10e222ecf6434c523eec10ce9d229f3761ee0c320ccab1f244afb0b3725efa93678b196ef0a08380cbbadbcd6f1062b60f884e392b6080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2c262c929c796fdef0a4d44c2dff288174e455d54d2833f49e077556b2550d2d8ba73ff8212b27e91bf9f0d3caa7a4db058da813cb92a32c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 7b1ce16fcf11492f7f256f4b5f238a6f9d86e974e5bf58d195a722100160199d4eb888cfa717907173a5248a05184da7e8a43ecbce717ef9a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f8818107ef4996375a8ad5ba7393e4257b64e46843591f70d275a8a2e43ec8c3aae8f8658508224a2549ae960ffddbb9537e306db044a574700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 551951e8aa1caf6cefd8199134590aa1ff0d3084779f676998daf3a3ed39b7eb954d13da7b626c77dcddffcbfb6b0b0fddd13d09ac99588ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2c3a5b9edbc2dcebbb177edb590d9d6effab91c623d485fa7c0c37c7c834c96e40437a4da133d143c9f1a3eedadd05a31bb2a6105b9a62980e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e231d3b4cdb6dea59d14edd59ad2e0f311c3650ad0fd4ddf2fbd689d2d90375003241be809624b9da910fdf83f6128980b4e605bca8ef5a69800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -a74ef9ada673ea5c05f0e4b2f0ffc46d60d0989fab2e4c8cbc06af1bd5f9349aeb2096b935aa342235bf847820c305f8a82fc17cda9c40e08400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1fdc596ac22f1abcf93ab2a504ecba95ac6551abb98ba9a1b524c5fba7f9cd280e3030028ba85b1975cd0457beabe0391163dc8962472bc772000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -12b29feb62f1b4d67154855bdfead097ae3f37950b02a51020a5306bbcee040fdc23b8f487fc152e351bd5ef9677054b1dadbc874636fc357e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6f2e0c745045f388a465a5a1b13592d2c123e7df0436c6456f0bc7dbd275400b1504de33b22a4ff4b52206361656a5e56b786b7f2ab6de00ef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -a89abff8e197495007735a9a1568cb2e695c20ac580c5a22dc03938f64e0d1e7acf6ff18850e7b5c74a992cb29bece06492dd8c852103afe97000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 32cca0221850c7ecb158c64946632f52ed7f52bc412075b5b6ddfa8dcb85e9bb1cba14a98acd4ead55b58d40f9696f151f3bc18ae56b35da6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1bbc808f64bd3b93c81f0632f44175016f7a3a544090b6bf125551049f2c70408593f01b8ed54a4bf8453bde6a88c0794935774f587ad7627a2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -9e73909beadecc79881a9749624e7cdddc6ab102f9286db62ff117d2f46d2d17bb60e80709f116431a8c019366cf419e1a34d23ccf480077018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9eb040d4de8ba6f2637895f9a58bcc9b5609427e7131c9481653d2d98bcd7d57cd6550ce688f4a9b3a53915d976a8e8a4c34c8f7edc6ec9dd70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 63ef6154081b32aa9a54c6fe1288dda73d2f5d4659b8f95fd78f36fd46ce7814520c6a025c7e8e4fdce83bd4885cac77e6c5c9f1a6ab89fc2c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2270890a4d3ad170dc0a1f1c37b4e76241daef0d9414da48cedde4234d779e2e5ca782469a91abd88a08676c42b4418705adfd1f49d53f637740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 85ec1d45235227b6813e9b60099234a943e22eee8d53be6de88ccf81ead5c4962ae8901ea91bec0633831641dd3f8dc6e8a98e40c8ff6e9bed0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8d8ecef6e4a2bd54b92e0f1b75ebeab968388bd1439951ee041619e95df270d412bedd79f62f60379dfa630d8c4bc6c224cb28ab2b124ce72040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 353135c72e72678d03beef64446c9b241edf7ce26523b03b3914461694822d3569d8b998607c31b666fdb3a91aa154474727432762653c6103120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = bdcfc9910518ccd75985e212dade91844a80df4dc556d00ce25fe47316f215daa2e227a039047f0dfbc06dba0df4608c33fd962758e19c472ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -96d436cee6dc8bf6e2763131a4ab60da5720e94988fd76e106cc2ba5d92906cb6501fe05af3288b7726f8be3c531f8400cd8c8f66681147c98a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ecaf35c0babbc192368acd7f10e065b5c71db207d8372fa59fb0267b11782c7555e67b8ab79ca4f4ac54221a123a3ec235f108c9e08b9e3614340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ab5b5cff843f4dcecbded74cc4f8c25208df0db32fcdfa3c44174bb8475576e31f65dd19b765f1bb1e6c5242f02ac1470331a8bcb52f1339c4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2a24b9da3ab06853eecfd6449e96100d41859542a870efd081ab7bb5f48ce6b94c4478f8b66ebf53c13ce34a8df6665eb1687f95d7fc74c90ab000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e5afcbb2249cb03ea1ef4e40b8017223f765c03b849cd9f7b0784a849ba55af75ff9bd0640b655db156402041039a84f9ffaf22d3c42fbec7a7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5f4ba47ab54e8b231c153d22810c12d61d959ad3078cc59a4639444c48619ee5cb62d3268ef2cc34be1b350f8cb31b8bd0631d49c7538f367d4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -29e1a91a71611dcbf2623bfe7ca7771c31cb777e5f8dc672536ebc3033d7983a3f489975037fb95a6f6bd723630bfc054a0e13899c02b7a6526e200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -24eff5d780b51a1b4590628ddf97122092b0e5ceeb4c50fe64d9ed0380211f88d49a1db2f840cda2dc645ad06a43e51334533bf18387649a04ca600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -fb3bfae230ba49750552d047c0f9b255ea611f968e81a9a74a62593a4e7318b386fe22719e7a2fa13ee45a8d1be8e65d277814b8e877176d79bf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 59e9b17b209b41ca1a436009587eacf69ea8b489b9a66b770512ba745a25cc75f14fd37546a0c38868a9a81e0f4e0d326573794a573769a1369d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 900a7318487dbdb6b334efe8d79029fe03aff62a14ff18959727bd04127049a01a2f96fef02ddd9435ad0eb550a1d3dfcd8dbd9cecbe9c3a2620800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 34fb3d29cf790d6ff696b70b2de1c5d6d155503ceab6947f7fa83c68dba89c6b3b4f1688cbda4ce44ccf1fa3f5cf72515ac86ec8f6f119fd30372800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -fd338eaf9ed9e031df47f1685d164f8ddb19ff004db5e4ad3e07be735cd38f46e499ce5f9066cf50004bf036142d392e0955f62dc77794678e279000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e0af0809c14d94c337467149b20986e9fd8a98134ddda7c994ea5a474186af371437d0e67ee80e3e3e78e3db418f5c8049929f8b1357b11b189bc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 223824d224548789252d3cec152caa7e571637ad3fd8e005e93d1588503c350adccb3e8dd215bb85238129204fe413c48fb6c7704a19b8e7fbe2c2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -32571ac36f5eb76205a260aa40d1b240189dafc8721fbd9624cad7e6201536bc608c40be1d0d14aff548017808d2adafbf747c410a407945d33cd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8731514480331e60eff29b617473e8952b4c89d050110463405721455d99354810766ec54b59f7e7b3b2255caddd121909801fd92789afeb1335ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5bdee4945da52a0d9c634dc0af9f4429d8b1428c84d2196cc0a64dde3350686525a0254b0830d53b7f9192a07ce5842c3194b6b93e74a54ac0a840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -7082128e57fabcec7f005cccb225ed3ae3cf7027cf41f2f96b6721856180a49dcf8972c20e996971e677671a7ee279c16779f5ca4935820513f670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b4021152537e9a53d96a0c9a714532821e7aebf6a7be45b0fb9ca0b76aa227c5bfc6595b7937a9d71012b86b697f5d672861f4593bb3855bba9528000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 331e9f6e41932ee23a2bb7879acacc0eab97135ae92bd6e138dd494ef3faa652cfd55ffff62cff1c1bba6a5c937d93072de2914ed3e8c3991bfed70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 390af362652bc43f8950febf12fe5195e024b657a2ce1be58e1170f75ee0b8482dd27652eafc27a947f0d9e2bd89292ed8a3f068b356784fd6c3720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1f83a1797554f26c691fdf5342bfebae08143b990be1bdf8d06eac9746cef9e56aadb17582a01a3621954900789c1426892ac96af75a250b67dba980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2eb2cceb5c264929ba59c9a5260013dee53fbcd17d5e13b0443d055ef47a1eb2eed4df5b2e0fead20cebd187435f70c759f6eb177b9f87d86310d400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -da1c8854613f6e8f475f6675d71ab726f4693d5d4e3addfaa4399226409c88cfafc71b312d70ce86a4c8c8da7d230ad5c345e359b10f9996a3d7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2f99abd9ffe6f66f50badd207c8eced0852103fa4cfaf89da220f87dd3711d876bbd642a8679154bb8574ec31ea31d7162335bd729c8f2ffac5357c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2dfa9862f144202e2c362171102a6ef69795fc63b02814bd0e7c523a6ea5fabad318e9fab411a8ca95bd1ccda6089cbe4a425cfd95a027a5bac4cbb80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -217d292faf2a779fd290d5dde5bbbc90aa0a6a77bd6751d923b05515db8658c390ea9ef20f98d9a7456f579fe43fb66bb8bf3158227833de9816b2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -247cdec3cadbf66a170908d0bae2abf207be70dbe14c26be270fb094d89bf566b4a27eec596316ac97afb580aa30e79277fac190c4826d96510f6e600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -850febbed2d7874609a42abf0072b94d10bc4cbed313321c35706789e7a74864f0dee6966ca1b9373883cdf41071614e25a13099c2e00954303aef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = bda57e6e09de23272d33322e5048d2ff42bcc5e976af53be03c2830fc5d833c74eba8d866248ec7d504313f14de909bed17cc5df8c3d275e0c85eec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2498e6383a8b5ee0036d8f5d5c76f9aa75763907924b90649557b2b2075a58b29c2518ea9407c67ec41158dd7d2ece00ef9d96f36b67805244ce97ea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6f5cb41649c1229346d60a89cabcca3c4ddbe82e0ee0428c9cbd343298d8287426fa90354d4da84e6cd737e252bee4dfd69a8731588df2755add77e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f6e7d4f18c22b78a0a83d8369988caddc815ec9e7166fcebf2a0daf998f5ec0d5848c693996a2d4964f32e7d45d22eb4db71366c8c4890755220a4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2febb3efb022b1d7911bb67e1837c1bb7fb6e2a834f48e74be377b7b06b9a6766e384c8db9a0433e3abe8a545e02119f8dd31d41d694d37c1f7263c8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ff9ab7f3e2fc852de1e38988899761914af5992c76a555d1a9f64ee63bc13f6b071197830c794548d3a53d9973babd7a664142515fb13939e3060b0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -838c2dffa394d85bc7d18f4873e533d3fbf67bc172200de210ddebf1e35ff1bf6ab0e2de5a211615e0036bfaf67778ff9dbbc06ca305496a0433d10e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e1698ff1d48529480e5b0419688d4db827fecdf5bae444205121fd0d0df4233181bc0afb4416e53cf76c10a7ab93b1b9f21ce0a9ab0344ef2712fd1f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3b89f3025a43d0e3f21221f2f5c4905d55f14739c01e8adf34270f56a578ad356189c1b38dfed105eacb14c618bba2e3cc7071967d774b42bc097c742000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 19c324a99f067219f3143e75c538cf3b9d1bcff9af69c8f44d2bc14ef026daadc84ac27cd42b1a491cb0716621844a551dca1b4dc8e80aca5bb0f561e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 7fae693cef00499fce3a2dcc5fe727f2a0d22cd25579fcdfb006fd7ad9b60d6ba1f050c59b5ec061827f09d17a8e674a65e79790e939fbf7da27ab5bc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 388e0df3710760d3fcdad1ab1d31926f0230fa4fe17f8a0e63b68828b3519197a9c546cd8165740d3b85e74c673c2e1cb80b657dec8056ec0f8096a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e26ff64667dcc8c960890610a8d8df7be42c2d6f8b2e4e00a4fe260786df4bcd24141893341e43a319862b2bed8c71fa170927c4adaac6df4556db18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1c0d3ca8395a05f1eed8e218bbb1bd8f18e274e7abc609d6f21c72bc938392fe7d7a6079b48cfea405553be8af9838793e3397a78ca34dc61571689078000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -513a22eaf115ecf79666a081e16f2dcf8f0eb9275e64d08d0b7f04cc62e98e143a9e4b7713ea56b1949fb42f24cd375221c044fa778251c2b678b322d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -43f9f88bced1ae081a7c9a041c171aa7232a188c0172d6d3ece4f8914d154046d85708e2485d43d4b5c7f52a0928b4827fb8d0b33531a5f0c6a48a9bd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -923356c409d17a6d511e7e818f067a177e47c0a7f26ac9a76f0cae85c429b01fac2081157c109227d46d11cafe00495c5509b8b081aeca20c606d75900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -37aa0b9f5a20583c5d2c6518ea54d6faf0d63a87a933f52fadf559234acd426c045144bfe22eb8414296637255efad18f20c98d0d68bc9ba27769d14360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a02b58571edc9bfb7453a0e38b6d7918b126111a00d5ab1cbe3da59b909439a0ecc61a25588d29d36bb6980f7975e928ad26b1175b48348b0c460bd8340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d0cf8c65d816be77cb215363ce328c1088888960c5460d1278a747357d7a44df8cda8bad480b5ea3daf5655014eb253116be7b8e9dcc12fd40edfc37800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -23749983a144d147bc35becb5720a490fa0e8e3808459b3e48155be953e8682166ca720a2984cd86b6d4718646cbfcc33ebe2e980eff05ec316d0b2df580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1b54064c43406206860d48998ca1588d6c16a6424652bf14cfb8d13669e713310dd52a70f0d6e0617d78297f278e485c3972f2bfae5bcf706555c9974980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -32b14914cb086d8e626a4a1eac3a5b1470b02569e1e6a0db352605216f12a79f245d0e48c56d447965e693ff22ec727bde075af266896c325825a5159700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b3b3c629be94938448a64c1b12c86da103e32baeb54a6ccd48a270bd665cb4d2427f0499cae204e1f49820aa60ea5c128f50ad6e97690b75a6075f617000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = acdc472ad8e9fc8cddf53d62a4571a9b6fc2f673a11f3e6e35a1a699562c9c1aaabdf6b16263340ef352a65939cf7d2f9c439ede432701008d99f76b4e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1759a2cab2212f21ef69b13bda6c3b3b320a29c9a62d0334ea8afd6d03d3f689d96a59380692a44a3ee12f17cd1a88ad1827224a184d23d2006df0d8b2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a3121ddf0f3a7980f44064c692e446d8e08b2c654247bd08ea5af98cfa0cbaf82529f628b75bec4785fab8198242736c6ffa5014623b0919b95c53a22c400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 783ab2b9d58c4c0d4e62267bd1a85727eee47acf43d0b2e66cf87411ce1e0859ff274d86566d731bf4bd424cf1933917e273466a3104dd1f69602d1d15400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = b1b92c5352d499ab0ada9a2ba2bc6a667d598cf0cca8ed7b6abd5dbf8048cca2784f0ee72d5e729c5d4ff20fc5b2e11f4f30ba8d4fe902a5235415ba25800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f9a17755d773008e0ecedef2df7666f474454c54b088e7183926cde64589580fa74922f99c8b18708aa19fa5dd75d305d7efcab46f37751d5ce514b942000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2c1d4bfd7d6a6632a3be43350ad103743f3ada663c758628e44c92c70e3579f4213e47b443c1431885813874e743ead363d1e4785342849109ea24c15c4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 48886413df621440c0241e1aff57d898af8b2dab0c0de494d46296af92245545edd820c8905173b2c0b944f576b95d45e26bbe297942d0793ac01c5c223000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2b1d620368293edcf80eedf8b7a0e8a775b40a3816a583d69ed235bd061d5ed228f2a2de50ee4c5703e537de7c2a10c9cc04c1fea7149d9510649fac961a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1cc7c1b3102eb0bf43e2c1c5b68d4d62fc88a311c409dcfa472553858002363653a8352540dc74232614a617b8026b9dfe510fa6b8f5a26c8cae4af86376000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f59b95ea8789e47bd3841c17a237a02fa1de1c01e698ea1fd52289aa5349fa43f0d09268fbc23fe6e0ac320b18282c6151636dcdb29c84e4925e2013505c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d3410348e3dea396514089406805da3d33506e2ae685c99754e122009c0da127dee944516c04af8f0f5a89dff36162a6ecefb86956216cfa6e772f65ef94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 92a7ce1f54f94a00aab996ccf53137e531f199c79e1fb114af6cf715463ee90272e01bf18b076374246db41a51e9648465d4a77800e4026671bd0a5de228000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 163548b1a1ca23c4c2e1f12afcc56636b96be88b452a392690ea716761b1ddd4f55708eff6c04a635e32dc7c1242620e6de1c3687c5c5597fa570ae44d598000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8c276618197109d128694c11a3c785058d7c88a95809997aeb553c3c1b0755cb395935b9f0e51111a786c2125c6b8a29aa34c050ebe2a6f218bcea899d190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f993daea0136f9fc35de26a675c7bab421e5b833d701ea93a900e7e952920a3f3516589b4f73a56514f69dd0b27fbb37dee7d7390736955e7d808a7b8d3d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2af073c61f0ee9eb6183ad21edc610d4a6c27a8b81da22cdfed1f61aa6ac1870f644b9b806f2a1866c43d22e23a20802e5ad7fc3fddc544162c5c913ed6180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2f90776995a9729bfc9b68c615657a8ffc7a31ac8ab6242712ad5d7073358a59ba8d9511951b26747253a1b8ebacc4c15bbb9df59bce7f6cfae61ad321abc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -16f26314ec7d96796fdf07980c6a664e13c3b81d8a84393363f6c67b0f6e22a4132107c41678296f89039f168b7152e3cfcfe0d5513092372a3f331f60bf40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d8a5627cb32d8f63ae9c9eb3f147f9bf4306efcea2f10eaf63b7c2d9fa7fcbe09b847857d4f60e7a91b081cc60fca531148907ad980f486fdcf28385acee40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -36f0ac29cafa342cd9f00c3b83057f0df4f1da417c60eb7fb7d1c40393e2d99ab8b43a97b5081015139317b04159ceab7ea6e55a20d4a5c28f60f98fff98d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -21c2b20eafe04c06d7b23591154857a17cff6282b9078d03104513498dc77d632c23d7a99934e8cb5ea05937cd2376ba105efe0018ed780775a72305ffe3980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e3970e72b0674529411b7458ceee10fe9d549f19b20e164fecee566ca836c847399cc7866c81ebe9fe8e73e71715e9c8844e7f0f4959ac395878dd64178bf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2b1ec2e4c93b8e68a4c5a0183e2975e7b56478b98d6edd8020691bc0fec3fe47e34300ebb83862a51beb444be8103c1fc3504eb14423205a2ba6eeaaae9dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -30f7f6f577f5e4310c5dab7e2c90e040eaf0d8bf34137a4a04bad7b4cc1db45fb1482c3ebda69b41c107998db633412cdb595f69d0cd6783c2dc029ae8e21800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 26ab4478fb0f20ed7bfe05589140254a34e7b1b0af2812e393d8fc0838642f42bba70b847d4558465388d268b89a27ada2273e63c1982fc14c0e24891fcb4a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e230d1317d3447a0854fd4b2149f307b747a84c6023658e04a2b9596a8b210e578e876abf84673731ccb679901136d5bdd72ede2da6ddb1d9957f205cd85a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = cf1308a9170df766ba6499e378e156af0c48fd538e3d0588f1036e6e0c2743c12efa020972cde23420a6e67695c971cb5914bcfaa46c7f8f50830a28b2c01c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f4bf3edd5259df7e4c226302ca06aaf38631d07c6c4bea94b95f0449e6e869a62631c8ea4af398b5ffd03bfc9906d1d744b82eb0edb09df99fdc04fb5087000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -32ae9c6dc645a78c2721713cf4f10d811c965e390305e04f003d05f0ba858e3ded6a9000b0f30b3cd30bcffef520aed751845591ca734ec534ee36ca863d2b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5e196e54ac7cbf4631a29e29ceee01d2b5ca391c2db5e8adce22e3309346f378ebe5de45935d728544498e7b19c06f0ece20aeffee3a309fc97506fc83e2b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b0f4fb017ca8286f4df6114bdb668553123b42f4df2bccec96a3898c054dc5cf772add17e59dea632291e7fcd993b0a1d22a7b8f5bbf83dbb5fdb587a9cbcf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1fc7c7a7f7dfd1320da030dd37fa14b85bb12490d799e7ec7976dda6cf128c7427843dff3a362ca01eb6debfcc8483f99447e34686aebb581b70c274f7533fe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 69708076c441b6caf5495f2380bcbafb78cedd8fc8db9d2f6787d1480832a6b60f1ac99befe92609052116a767024f881781646e209cb33135bbb40f1534f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6760d448fb451b8ed42544eba4cc95bd6825c290631463bc9dca6a2aa14e6ad3c220f669122d795839e1c8bb4e992224acdb59d628bb02a5aa0cbe3fc089150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5d6dd4fb5bcc605d1f9acaf14642cade815b8242bef367e3ea78898f3ea1a36e34c79169cc827578b5f15d4ee71380c59709b1becc19adb2d3fdf6b0a365eb4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -38254c89b4d163a247ce6896d681f9de0466ac6fb1ff64f63572bb72abef752710899e1f11beb8f1afea33bb6dd2a06bd6741cacb6f7e8ea4f2c921faffa9478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1678fc0cd096fdf111b32d187012e03b2231751fd463074574ec2f11fac435fff827e51bc6334f5a678f59aa5f5424937ca43139d2b2f71212f9e08d72a2f2e8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -7ffc62087e70288057435e7d2882b6d326327c5eeb54ba862acd05b5bb96a637a0f9a6ba1d1d888cc047935c93ab119aba1ca11d7a54d8157aa9345dd89b6e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 44b594ee4cc298a222ddf63ea7152ea82afe72b48e84a6c1292fe32e83ed99ed79af1464671a5649463378132b024954f812a10436064107a78515adb4a2d730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 118492cd8d0ed2e25eb9b56aa2e6b82e5dadc4da71bac1f55da5eaf021252f5e77e44e97914136d81e344f522b16fb42f6399b1ab2cc8de520e6fe1e6e96df8e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 22738b08fd31410b159d92faf7edc0eb3d155abac0acd00b22f2e57ee3656f9fc27368369f1c039f6391a2194b6e6f6f2d646c8a5762e3df9076eb1bd5971f580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4382aef6024157d2e49b0c619ea6ce5f137b7266d4e6f77053fc60eb772a00356a335fdedf915b3917bced925ec15fd0cc49b88dd4d929edca11616d62505a380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -20198569e7654650331a55a9afcbb0a55cd3eb6d16c0f974fe51a84822f8f26a7bc764e535353e837ad2941161884621879e25ec00d4b3e2cabfdead89a1f4c40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -23f54499fa6e7541d6ea8b8b5d7b67fea02515c032a242c1ed9d58d0f246d5f8d5f6d8597f8c25d8b79421f6f059bbcef464539bc9fe86e245312b6838127e5580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1348577802b4a1117228cca3d3be0aa1c1982dae31d98c7e7b81bc58f210a02312c8c9a08a755ecd137c03ea70c6f340f9f7f5914577f5cd73fb06e7160712b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -99ce8f3b4939a883eb043bb0dab55fed83d521a4f25ca5455873e88449bb1302ad94437649d30192dae11c1a5ead98673a52adfa05a979592bdb79a05c9b5db300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9b099ab2b2514ba7da6b4366807b3365dbe47b5f6c9568527c4a2579e63c1942df4436628cd49ed7a03b77254ad56af2239cf4db6610255cf3852040469061be00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3e9bf1154d31add35e65c42a7b51676a202e00b735d142f0cd0ed1329edbaf44954ed27324f9e4e8c28ef9a43562ad7d1acad156f443513d0559d7db5f89789ea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -665047a9ece503625deecdd474c25db4a40e0359704863b17530f46e3ff6772e5923621f5531d7119672587dda42ff1024dd62a51ed7a44add62f6ef545d5caa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1ce3c8990c306c835de054c4653fb5ee2b6505ed960509bf0e32abda3158d567a2312a931f15e35cf66d6dc4262c1d2eb6b5ad524fb88bc1bd87643faba267bf800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 160fbc927dbf087ce08170188382dd0e51dc55e0e88b67f18c147bd936bfde3ada7f42ef560fb4c2a38cf204c35513cabe7489cf679ffbac0e2e6bc75056d01e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 11e0768d4cd9ff290f656309a1aafabe42beedaea17b21dbeebc4f94158af9d70c4550aa353ec2a989af469022df73a4bb69becf48f2f710e2ebb11142a61ad97800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 28181c50ccf79180629227b3e026d738ee286089453a17dcad8eab0ab1aecfa7a26603ab46cf111bb120fc50ea43b5d9e22815054a22bb70377e3b1e02f3fa88a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -7e956b5052c0ae2ecacaf56fe1be15e054ec5aad0b9c1d8c3fdd84af3dceb3197338d72b76fcc9ecc5c5f4404ea1ec263828719b29407d4faca3886fffa92a19b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -778ea399fac2aa749e65160be226eefbfc02eb4b674ed4d295cad58ea94975514aa02500c20482eb98a8a63447805698c49b78927a48136bd54380e2c8c5dd514000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 28e8e5c63b5afa443aedebb74b2f137bc1c7500f3dadbb25be89845f0917af92e42cfc210c817bdb100b986ab71711aa3dfaae61c377ca1aaa3c2d2f5f571ad24c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1f904e03dfced1d3fa565ca17d03015ff80f4cb1219927cde8b1c46c06243ee8672ace58d58ae75d50529b47ee870a5a6460b7e2df4b5c6665d3e71aa9776c160e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 288745565edfc017dea20cf7ea538e80454d3edbb2869405b623176bd587d62b5e42c1e41e5447c957801c99190d2ce898b7bc5b31fec8aa3d1faeaa3341b13548000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 7cebe71bc4ac92a1f6a4929e8f85d4ba9a2e399e2a92116c44cc006b932cd93e201ced71754290754d3989ddadb5f65d4d4e914c02d6252136b02113fbb43ac368000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = cf152a7c7b566d97f65bcf4526ccf0b8432baa768be2ce9fc58407c1b157fe18344b769fb0e4730e5d97ed1090a521bf082746d9daeff26af271528e0217e5fc28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -12c0c20a527bd2ca2ca4f15dd07f248d3d58829572e09ffdcd17974cdef864264b4532f9499b20dcb50b3090bfad60e69f07ae45f1e8934989bebcb9d2f0e46fda0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c0c2a12f1ea3e4f4c5b28f2ddcb438adf9663b36ee2c39e5a93d985910a3ff41a87490dcbf36ea8e7495992dfa92aa60c6b906409e73a71a682270e31bdb0e8fb80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -80bcc1fc4b6d26187523e3dc5a01cfb777070cafea95ac54e24b214ef47110ec0d6e321a0841f1af178fd35dbdcd91311b77e994a702842e06de5b87c273187e700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2252a0874e6fa6dc2407b75c54701be3d9baa4e8d1ba3f6913b522a965639fabaacb9a774e4d3ffeeb3751d27aaf24ce96ded8e747fb0bd4a10abbf0c7d19566fe20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 18815efa4f4b4e5809be802135b944f64b894e560da9fd69e05f1f60c37b3078fe39555300153d395b79320a253d017f7d8df4daf3c06566e8222dd6f911db88c0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -affb6582a587b5e23c2f84d713f72c42da09d50d698883ec470d8549fcc6d512b04d334aab7b4051f4e73459fba5dffbb16951a0bf554282f5e9cd32623ba538c140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 25f8e60615cdf5a2a2234ebc0914aa747039e7484b2010d850c8fbab93af72673bebc3e52b753dab4e4ddeca736d3fab7187b45b1e45a7521fecfa705941dd8595c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1b7af3032f5ff43b2ec05f7f55e27c5c7299efcada3aec926fc45c2303ec1e2ce40df3fd18b14096283e9b6213b39939a61519b97a41d394ce81b892bef0a58396e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1aaa12303f8e3982eadf6767607e48a7cd625c4c25527f7d09d5759011b7db7988d5f5efbb3f85a5c80d307e792b44deb93255866164a663e1e7609b62879d9e8af00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f0d0dfb567eb0ac97aaaaf9eb082c7925f5dc64fd5d818a8b50a56786208155e6f0b713aa9545f32edd4a9c7a5bab91656dd66dae4f6ba8a1cb72b96ccaf17b493700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 36b636c0e29b914237427a6560e1bdb6a3e71b9e6a98fd917e29a901e03abcdbd554e3978d906844926a97700de822a60847beaa51c9ec4850c21d6c7047265c83000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9108ed7905975da1e290bdd613a17ff009c083a2bc0e95fab7c38ea5b1f0b055a677f73bc163b302c66543ccc1794ea7f37485956b563dec294d7235a7b05d8a85a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1feb728ed9ecfc0a44828777c08aec0cc964851597e9014abeca8983c780d3f4fba94750889d47853373342f4bb0b52c8874635de671ae7c96139e6a0f616349239000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2b3351edd9a73a4bf4f3fc29a7ce664aabb7dc4151c828a12e4d46d4ca4910ced0411ac5e3b4202f8298f71cdd4b8d8187c1e0c21c86ef8e8c9ae5da58410b5fe9ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -fc5a8419016d2a7be170a574cf83e3ef338c46d21b0e20b824c1404c002f77b5592fb9838d8b8df17d022901593c3cda0265b19656f1bd4a7eb744b31d8c013d662800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e30c0590ac6a9fa20d8a313f2ee1196cd758f9241285f2edd88af1e885a2bd50ddfbf49414f445838b44997bdaa00ea7e0b99d580eee7a5b48a397e68e9e156ed96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2679ad0c3078e4518b83359b300e7831538aba6e396e6cffde171cd83d5cd4d2e07f7caa650bb0e946078b108fd162d7bf99481a8d470e7259efeca79855f7554168800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e7d769a1d9ab7667bf28fb2882d1e026319f4b8e06520308d8580419569edea344166c01d31c49573e7ad7d571080f22a740ac074102ae709f85ef86f285dac0bc11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a3c59ebb4943e99803b851d73ab9eae5d83ae8570b97ca72c7770e6b4ccc6ab265aff5459e05a71766d8886bd286a33eba3ae4a164af0543fa441b327276dc035ad6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = c1b3bd1a0fbb17f47d0888df16843c3e6d30e0fcd6379788e37259fd1df5a639634a74488f0936f2609a2715b5a70a094ea0a4207b5326dd741cc5baf986a39b127a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 21a8ac6eb4b76550d3e31d28a3802b03cce1e066b43d0c76b03abb7d2158099c7f1f3ae97cdbc9461f0083e493ecf768ea4da463e59b32749cdec861abdba31eeb0be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6a5d7f9dee5e115e59360f845e48df06fe67b5766b1a9fd5d6f023b183f14f1c809e929db086b13f38e1bcbf8d60550dfcc43d3a572efd6575630c6690a494a11374c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cf927ad55b20d854b6f399abd7d437db93cae5ec89d567221c0bfdfab583b92f816d2e34da3dae1a71ab9851bf384d0a889cfe1685abc352184d87cea6636cd6b79e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = b22b667b98670e9f21b7b2848d6bc484eb5af058cffd99f9a22065a4ccf25f040d1b03e8328b28a409557ab2dd7192d30d25067f3b6462e600847630c7242758397f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -32e4abc7ebbcdd4958d18b3e031f28c3d5dc5c98baa9c87ed3817bb19cd08af256a181f0769ccbf796ae1a20b717d2c405d6f340ebd53912f855d8c59b2f8e22af1128000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = dbf0dce0895d45f91d6dd1d4d2d6512b3e0d64d609f4eb3a4d155ebb07790fc707e3b859f3904493420d9944a3a0ae4c75970e7577be5a109f867e40046bb9cd901360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c625309d00a1925c755a94493e8771b933224b68ce19d0273330ca1e972f828303cd365afd690ff2bb86fd6322d704fdb487682dd6eaa9fe1ec2f46cf6d837df3486a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 295075f1e58871ab36ffb030aef26f8d56efb0a64b28f9b6afcdc5a83c5cb487b4c25989b1b6edf9169b86fc4407a4212444f6fe5f828039e6963429d28774a24e2ff40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -4afce5aa413a164fa216875f7f9807855c0067674b4889cace35ef764099b0c23861fdc8647a80d8a0b5b8e39b57c57681bd47bd43e79cd7bd5cf8cf28d9d50989200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4a19ffaacf689dee2ef81ab11ac8816a1f16aa937b9a9529364c67b1d75af4d7106ce95ecdd8a17b5bf59cc429c2449e3c1afffa3e9fda48e83a7aba0a8aa660de236c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -41b8058270aadf4bff9980100b3bbcb38b11e0f73f1f53565ab8cce4801df130b5725809319eef07bdcbe87c143a272162602c67b8a9b7e0907af7dd4c176ceab334a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 180e9dea79aa76d6ec0be979186553279882be2805885f759580749322253bef770db6bc6e52903f328a306c50d7832d6e7ecf0e46c19000843346c4cd41f9eeab6f2b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3e12347f609a12cb34a269f346af04b8c7850e58ea56607ada103b11972d9aa38893a0226b4abfdad12b7c474496faf5ae3e2211995d3342f17ca59732a8c788f7cd3e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9b39e01de2adc1dbc620f828eec98e2c52c0ad9408cebd9246b9492cbc44184d0287ec448ae9e154622f6b71d0b1d644617dc5ce45813752a4647a8848f73769eeb27300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -9acacd3f2e77657cb12fa0f37d1d1ef46218fdd66b655c57e34afaf48870d6123ac4a0a62723a9b37c7e3fe57df5e6d5eae1adaad9a481ac9e38a868ab8fa8f749209200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -14809f99f79043e7e8faf145aefb298080874305bfb32dadb14d96e8dff98fd3aaf81fa7673f35608025452bfe8dca32707b7bcd16cfeb3bb83bf55f1f7759d0ce9cde400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1fa8d1c9aae763fbab93c3bfee133ef11f03cbabd46b1a450221a9970ee80de126846c379320b678bdb5ab94af0c805b034f5d5376eb8c3d7dd4f5afb8bfe340cd29c1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c1d7f3758fdb9f444c86c14dbf589ea125fcee0e2310fe91269385e5e47d2cb920b78f67d47d795ec274e2f487a798a5619f531e6d878dd9c0b9de3621a6f4559cd1dfc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f2ef96b67a682360dafef4683a0c36f3772a63c8dab54fd95223c1ee443a993d6d8aea637a9215eb86b1ddf34c10a9b4d4d0fa17b7f636aa25314d56118d16515cac8c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -17d3054dbd1235b6b7467ab5ec0b925589524a94c551c9a1c67af55ba5be88179a00cb9df5fb7a0687e322554580890c867f6005a3bc008b82cc5ad6b00156c36188847800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2b767c295fdc9fbaed6cfd45329ffd791b51b40bf20d0e50db7fc214f8eebdc6cea91ccb28cf134f4947afb4c6cd039fccd61c877d5d262ebcf8413752c8a9072343ec0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -55e977cebabe0f9a6681cfd3a8d01b864ae8644d5e54b93288cf5dc6c711c6ffa0535e39810c39ce2bcb396363a3c78a9e24ac24e206c992d9244914466e76df4f1bfa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5639237afcffbfbcfa6efd84e0dfe959ec120964bd350efab916df6779ff2932c94ce4195b71445eb6062abca4d12b3145edbcfee3198ef92833a7b47925cf36dbd16b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1448c178094d085b2e88c6d594f9a3e4f283a34d63bb0c255aff97ddafd270413db01d10b6a332f0ba09fef6f2ea589df7afdb31e0c02fd75c741bbc2eb746e46878b8a2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -136e2759b393dd81ceb6d569e50833b4da1ae16eb952604c1a713755d9a76b3946e29ec37394f8ec93d3c9b398cfd277a98f278b63e0fb53e4869272c0aec00fd516fe4c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6dea4d9a634f1879a164f7c93e3d0b878b8ef6ff49afcd4f90f9b498e2fe3808612a6d98c1df3e0051ea32cd13f680bf03aa539d016d2921d43209e396d305fa8471d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -783dbb7e5e734e9e529a941de127cb954ae9d88f97f33a2dd2df7a9914305c6906687578aa1510c0be4e5929949a3d245dbb11e7b5323871edcfd1fdd2d4add3944b2b84000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3489112b6caf64a12f1a007d61c4e5feb9e6eea1a85a3dc2c8879c858e244a81ef78ab4492cb1feb75277a48920ecfd85a1e96ff63665801cbe5b4abc714277247d7822f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2d6b81a56bc3dc0ffce2901670d6e1d8e3021ca2a2689bba640ade37aac38a52b1004e98df749a416d699725f16ab9e30f9c99180472b8c98d978d7b4af629bb1c8e53c38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3295472d95325e6bc0efb21cccbb1a546ba95fe6a6d80269b8fa7da9034c8c5018010c412b3811b22f4c206db41d8f7bdcc8b9f6cd6b445d5da432f1264748c1f79be6ec0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d6d06a2885cebd9b1346a8b89feb4dd02cc81b82be3ecfba2586b5cf9123b4053eda835bae0127c1b7c947c9b4baf598c8d72941da1b2bcd3e4167f022557244524a48970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -351082991e88cabaad8f1cc49ac6952c5b2214b0a72d9592abff4020f9b7c311164091383490eff5bd804be4e164f55fb8d8dfb81fc5a0b26fdd9dbec8693acfb6c19e02c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b33eadf37428933c2fff3924bb8d31b4ed4c21aafed1b6b8c8f816c24a093e3a68bcb88bd0e0dd1d3579eb504bffd0c38263746cdb3d8fc44bf36fa1a11432192118c86a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = da140841b03751177eb5ca4430bb409cadfb316a40adffaed826d6cf4d5ef92757a727eeab5754e6f2ef8cc029cd1c339321e38f5da03e8096965cad6616350c6770ff7080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1f6302078f3414043c023607c4a7294c751554cea7ecd6104062f4ca153608d8c36c2db671b35c6b5cd6b49293ee5ef40edc30208d1358c228c7731f91ae2076e7bbac1f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1a7148d11fe366d6b5fab74072b76a4aa690015734017aac49bac2a3d738d63c2be509f0d6d63348a06b39814778bd84b0a4206db11bdcf2ecd6bbe1403b8f27d7c53c9db00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2c1a96171d763f927a46c5833a5a2ba671cb2e3b89bbb64b4245b0cfe17523f3c6929b7c374c59a84d7d6424a8e3863d5a79686824d897a3dfed9606550366c462c30f52580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ba78600be661666866fcd91dd5ea72286f7d3af064c873163c3f3650cd6e22315b5f548167eec50c71cec69216351dc61eb2bbfbb0081e1f9085d93a1e1f454a980bd5f9d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = c3b9bff1345d2fc68134c7b13e09194a4466341aa7845133c4293754648e5b03e641522b643e92da37c7cb745c32a26e8253da823959171f0568815ab3d1397332caaf7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2ec731cb7359d0f8dff70a867cbc41fb962cf3ff08f3dd3ceebfea6218b09d9f1bc29025a7e328e9a0cfc4d9f2d2cceed509282202d0d12c50b0ae48d362d7b25b5b25eca200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2ab64e4ec8a9defb5d76b3898a78e5301e1ae2a4d885e876577bc4b06edf247d4c6e15bef819f33c01ce1163c662f8492d9c0ea3bd931e82cd45fbaed5fab14d5fe904fca200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5ee6e113014974927c21f715adaaecb42a18997865de2147d1a4cffb616b1030763ee6cb936166221886c5c2b14b59237dd2bcef4642ddf49acc15544aa96a03957d7898b800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e66d111ff788fac4efce5166cf173987441e6c30e7b5159f052a46810ba84f9bfdd415ba2b299301443ff8fda77592dfca4966bc0802044efdaf3d187e2081d064db0ba24800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 250f805869d5a3a55f3211faa1a50cfb02c01d9677a7d59b27aebc8da12b96a3068d9d450a8d95387cd19599364bbca3b74a94a2ae154e80670b7869f3fb0cfa6de814a5bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 80b4dc39150382b976d880ec95fb87d976865b560cde71bd6dbb55f8aeeba51477332835b3b38401183a8cca9b11a72723a0411ea77d7dd5ee43b5d86204f7061dca5858000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 5c19c420c0faf0c6b28da5ecefeb07a6e898098b4a2d782a672ba8288f36f775fc6d4dcca0a46d39122b957188eee10f518a6b722dc07e27a4e2d84f0eef058d694f7bb7db000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1330107703991300e2b0e9cb667085015f457c19276903d93ecf5239f3edc4cd1711de633ec8488e7c6825bec8cf5f737c57a4b00c410038af1a7e11bc0e129891eefdb102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -107ff77dab6312ff12e0df30bbcfd129228f539b9098961cf3d46ebe155b6aa8d6009eeda4513328c296a9d14fe68f619310f62885b8f00be3e7345083efadf9a48c809772e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6b45f44d68c4fd7808b5d4bd9430840f88b29be75ed13be089988b58fb534af75d5bfc81ed44c9d9a83c029daa2439c260f658f4cdf3f35fce14c388211d503b7a88aad844000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f83dd9e8f2b08778ad3db0d4ba57320177d9f3d0d7d5732b04bd5ddba7712149ce5cafa880c4a8f1dc301b262dd16c5c491edc3711b80821ecc9417bce5c2364d6eb2c02abc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -a60281db3202310465c7d532dc7b6e2401ec1ea028219c44049baaedb47cb13d6d770c5e995b97996ffc1e4ca821c80829c5306c9884d60095969662cd9f14db7521aa852d8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 16cedfb0f0876627514a5301619abe3742ed5d0d88d806b58f09372ca0b26f7f00dcec5339dc3fe545356ae96f43f24e85729388faa4563a85b3fa378998d7b370c5031df4f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 23943a41618930db0403e2e314db112efa19e2e7d481f0d5f1903d08998e0473c2a2948e867a3a28b53b66ca8c03f4f38a3bd44cffeff298f478a1a4f373bdf31d59770cb3b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e1ca924b3694c28ecb5412542175efa184da15c947b5ff068212c4a8ddfa6813f6c62bac2f8cea20c37b0389952af6ef88d5e05f90476368055dc39f87f65aad6663720f9ea0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ca7427c2f9574ba00a0904dbcf18be5cac9ba3b4fae6ed6f73b435c59f0cf284b076be7e2200a14c22f7f62a378a16d4c18e3ff699bfd69dbbbc1aa5ed700731ab9e8bd51400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9da975db852f32afc04bbc8d9f8915f389191339b0e5c5f6dc0104acc257f6a0912ba8c388e0bfd3bf647e7a8e135aac45721e3875bc8f1827f3a1afc2e2f3f81fbe609fece0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 629b3cd5370c769995fa8fe925a793aef5279d3de021caa1f887c65c275229da8a8ddc41c3cbac7edff578b50f1fef3da7fc262a947cdd0754d7d4dd14159c9861564f0b9480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -686de013e6e6d5f3b5c5461b3d6e0f4fc1fbd6883bd747be21ad48196c955ce6f788d8f76996a9deebfaa3590b58e9132a29d78d9be45f87c601eeb0da3ea8cb93f64c7dd700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 78312f90b110a6f402ddce36b4e1a0f61640fc90b6d8ff0f668c2dd90b38ae6c4ae28c6b541794e56288a959f17e662dd49db425015ab982a7a46a52d6e7e68ac0759a4638c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2b529d665f5425d7415dc293a97800da79271b47907f8bdda4bdacd2cb70c4bb75c7cc3cee7393d85a1e3545671815133ed4afa7aa4c7dc6024b20414199e14942c1095635a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 39aa0aa7c00560bb16c8e15eea885c9b20e0bc05b6c3fd76bdf47d7cb5c2e160d95be47a69396d9e5959939c60a8067a2837d05d86b41ec2d69278e882cca67f70184394279d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 4790a2f7a20e298c1a8da49cc47be214fdffa14621ae49c630e094ce7b6a4ad313867c6d550f05c3dd0b66bfbbd50375cba7240fcb8f36733aa7eaabc79b4aa3b8352b9a4c5900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cb025913fffab193e8aed2ea62fc2a5b03fee4b214242d112b3c2d5d6fa1b53934fa2ce0a0f7e12967a6ee056d411c9e5b17a874eaf286454fb929eda796013f11b9c86006f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2bb87cf96148492e4c0759b4ee81775a4c851d560fc32f07b2a9e48727380ebca6a8c341e52a3a528e599e6564591f1015e322fde39c47b9c080125aaffe65be9caa830b648ea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3e4ca5b3236779e4d2d220c12edeae8e925ac9e49ac7c8a0f0e0f00f546a69ca772e577a36d408726ec22c4d76001b34b2c2b5b310004e88bb046886eb75ecd8a2cb282a1d3c200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 5277d56b67ddf63abf468169266983e1187be5f871a36195c90426471b1ba7c8984d993163459487fb4f71d9d1ea9ede81d8620fee702dad92a466779e7ee6412edd6b34db7d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -4792e5a7ad8afc3adc0a5f2e851471b9428c7f6a28764a0aada982b89db2e46f8cc2b6be9f622894f7a831d33f906d41dc2005878ad1470c99f766d8eb73837d50c109afc1f7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2d6962e372fbe073544223f50bcb028b556b454e938c065d79a41e48bc70676e35f4bdd7be96a5a401aafe60b31f27b09032bf69a74106e5a77de2430ed5eda515e02529b6aa4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5978dc9261771ae842817bf5df722ff2611a228ba85e60496097f2c089ea5c47c242e2c74e53739f26962836f2bb39e804f869f8334a00c4aaacf18efa1241cf18d787aa5465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c651dc669449eeab7891b1e12e02c95d2d8e9cdffb98849f4ebbe1a47a6b5f98e4ecfdee9e27e654c4129d56b3b8c1ab7d35ed8a611065d8be050da41c0d8552ba9978a3340e6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -7ccd4e2babb3c56e1d280a7dd9283ee7afeaac9da2d82fd7154addac39ef2ae69f471532410ab87f1f9ed80bf74ce9ca4ccd7069a91cd0a73e473b8cee3f4a7bfa68d5e1bfe04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3b4e67185baea5a158cb21d8192c9aad9f885ad54c77af3c114af737ea6f1d80d909969f3c657a06deaacc2ed5e5e310f23a97521896b3619ab331a431da7e751e5041bd3d7e96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 34f608a38e7d90cc7973ed23763c170566d44a57bc279bfaa29c0b5c356f5df34c04c7d3a0889cd94704bb17fc5c13f1ba18fbd4603ec773bf8776011986cdf6d9f1057c5093e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 799e9faa64cc139f28e8bc10d861a3b5565bf2e4e8ba8c860dac6addc68c47d21853add5dce84779c9d3cf5d6ae7f06b111f72caf7bc8cd89314141c1f2cb85577cb6d04be9db8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -bd2f4b3782ba0e2662fda9138234ace0ae43dd5823718552cfaae7e19135a32a4a9534300bdfea4b746a97ee1002f475cad2f5289b893f62bbe29944484fcbb2b0659068829600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 156c81093ace55c989716d33b8a02ea545a044447bc325bd39d8c8522b43e7086919b048c2f41bdd1ac77597d500945ab708885d5607d4b9d0a80cf2c9182634cc63f47728d5198000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c1d329ddfc5c4961ac022cc0a3349dca96bf5fa48792e7c8fd29e8ae5e79de3c603f82b3b3176078cae1daf8d50669f61a1ad05fe7493b67bd1d8e7931a9bfa85aae6d073033d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5eebd504cdd2058d3c24db7c240e1aa7427adaab2760c28da915623c03e53b3871633a6a753dfb7a7157aa803d1daaba642b581a0b1cebab4ac39f7a5cfd7d8b1a879f4949cf4a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e8465aee0bb16d6d5c4f04dab98c0f9a17b36e4e2465a150f813448c6e5374c2de2e12b818378c89b9111125975be5a6f7e1e54d40e730ea3d645925fdcbca2a8a6dadfef0287e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -21aa19f8fec866586d444adb427d391365a09e10e3531a816d8ca0118e79e76fd6a7083313440f7a624539a438a4c45f5e75d6c2185c22a98ad306d0cd3211e652933efcf5f007e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 210ea978e0f3004a8e1845571e2e9877cc4fdc38b830dcf13f6f8524dd62a86499e5d2ed70f4dc62cd2b44dfca5ea1871b207448eea701b9ec845d50ffc7d00bb4cc2dce638950a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 195b9ed718872ebe7d43093f23f34f1ed46d083aee06ee14453ab6617d7bc075a01ecfecb1bf529f06ab55dc784fc916a02951627178564cb0028b518d8ad6f3015fabe8bad3de80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5b9f73c8a65c3c7856d21abcea5dd1b134a442ec26af0a0f11235fb9e52d7e2942e040aa9a5cf8e6bd1a89811c1d9833b08061f54dbf0a9ade7c8252c1493da67d929d053a75fbc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 104415d55883defa9c001238d35be5e1a1c4ebf3ad6324688854acc432e8513334399f96ed3e8eb8d8c4c08a044ec85a843093174e63616d726f55d82bfd5c788bf9b5bed1af11d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ebc9fb80da94d6583093aeb4151a2471442b666b86b904bc1f6da70bc40d860c50c922dbba010ce9a2e07a9fd1e4c68143d088f6fce2e69407ebd473c0eafeb0ea4775c0d8b4ed00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 4a74847de1da755048f53ea435e7f26698f160942eaac2644f6b77b844a6a9c2a43127aa5737a4d59a6b2c67f52bf7a7ad999ba2da5b5c7be6cc96ee658be59b2e9111e8b44445500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a04c8690ed005a74f635a9e36202838e2c059b90b52f42e1c77143af69767e4a2a2dbcfb05a03bae1511600fdf96f58006af2b73651eb09fdeed454ee9e5306e9fda5e2339f600600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2dba7f59276b8a6cee44ca30a9437df88edd74efd96407e09389ff427f1a359430f91d298411c8a9c8a6574fd460ecf4d9349f31d2a974e206229cfee722aed4e680a01e72d6f61400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -34f469c119f731c32d9601d45f30795fbda09f5608bb942194e2bf62b6aef94a8b9ef5fa5487353d15af9e7a346ab6a89ef3c6ed4e288f655d3a543b51d6c6aa4762a33238f7de2800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8a8335bfd0934d96e10237e17679f0dcfc807a4435796f6a853bba4c78de7c7ac93da876b1b9902df48f98092ffaa48d82781dfbf92772c7cc5cd0ad8617543d945b0ba8d3cfe7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b0395a79949741918a4033cd1e6396ad4b21a6029146a742241eb6c30c472abe43fcb6e4f45e22e0a695f9264a3142e82391e8e3260da4b2d212ebf69f9fc39e5a5eb66dad7e1a7c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2cf68b635c366d71d4f444ce4afbaa0f9f9da5a7212dcca1d33512afa4e47f92d3b720f6346baa1c6816b55dc40bfe3140c45a8153e22d532f9ed05b46fe14da30371cd3e038d018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 32e2ae89b6e134b0454fe7ef58d9436c9bf2376de028189eb9c2f5c51260fed1a47930781e64260c45f92cbb9e3b5e6da571be7efe35af9f076b6e9e57a05aa2b736497b656c2679000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f0dc356693daa13538a76ddecca447dd4e2dc93f8d78e3f941bbe8e92169dbb72705c48175ce235289b05a7279b08534241d772d156322dc29978e717a080ce9ddc6e699976c1d68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6ccad296b3b3f2d23973bbdb09bc68ba103db138239807f343bfe0f7b49cee5a1cc3ee02de50b7ec55f09263d1e0b8834ae9380ddcc0c214051b4167c7defa9286c7621b357a0895000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1688605fb7a03d95abcac34931fa34178f3761d227c5e4218085fef1039c53e65da7c39ac92e6c39ac1fba34d1256f3d5119364f841a268de97c39c65e28e0096f6b740c63ef04ade000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2ebb06a379d4dd885036724104dbd489b0464d86c956c9fa17d4ab202844e217ed766ccae180e59d429a7553dad0854053f1986a588a64b1cd5bb48ec5738b47e610f14de4370167a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e50b63d6d2e08ba7c284c27c76d4dc9ce98742ee751f7bbd7855e04a4bf5d4bdcf911653976ed09e3e3cec2e873b73d1c1f86fd659d6eb68bb989c26f0b6609e0812c632c29e730b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 472e43f62fd89b37324beab655f45124424322f123406074ac6810e972c6a877e5c196a16708972da0ce3c1c4253ecafeccc5886a6130e2dd2d9f045ac11eefdb0787c32510c34f78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b5822caf74d99885e457d0b2f244c2fbf605ad6fa6ff13f4b7e810613559cfe6f03a2a57d5f4853f5ae5647885f6874046e3cff68f79125bb37a68920963e187a1060e79fcfb7ed90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1b0d79a27bc72343fc8abc1c3a010a303001cbe87402f5bde15c1efc5b1f5d7bef437f0aeb49e3147647785343e285aec43cca638247724f764828bf38c3bfd7cf2f1b03a7434e1c30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b9a6bba2579cefcdabd37541ed80c6c9a7ed16086ef4c31e5f4767157ddcea53e4d043e53fe0fcad4ed233fa262b9412ae079b392182c754af516a29c8cdb8eea808412c7d8a9f240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -bdc7ac394e4759744bf4c4bd32cfe99cfae404348e63a06b77ac4fbc9f9493d60042502853ab924b026aaf2a2a0c71f4b90a0a1862da912f4e9da2469ecabdf148667b017491f858c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3827f66e44556951e02901cf23f1c34243c782ba8fc7854fb9e29d1be4626a25024a3b22e4706080a4d70e9401ef1c7ec4b1d22a1ba2bd06682e8c4a9586db2aa40dbaa41ca670f77c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1b431f24fb6a72273eec6f17a963e2a9669e5fb8a8129c5d4a42c8e27297d369cbf55adafee9e47456514b3e155c06cdfdd75841484b9c7231dacfce750a8efb5ff55b6d6aad58f1320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ceb5b967ab82136dbb948712d62f47f4cc129d7cb87a90505e75ba82dfcfdb6abd9aaece8109487cdbbc989b86773c3693e4350af88b1b9bd29a450291a287cbd23b5baada488076300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 4c7ab13d15e098c4d1dcd068bce3c0999e42fd24f62c829a83be09ecb895eb9908696e5a6a61814a4a6e8e839199c9c3fd859d1d1b6338b8fb2ac8e40723eca21d46480476f5809a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f656dff6c082d2bfb9534c1230f0abf78802fc15a7cf5075fa6c6b20554b33eb4fba7d99b7d7cdc5c2a7a3a0df7623ad4e74def1ee1c4381c8d25d55597388ab4141925a9feb9324600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2b2f9772164b866739c6703ca209c2c7f3fab556625213aa7eb9075cd9bddd25f6e8532816992d92637bbc6c415e356186390e9726ae5a2d4a461a835450de22e36c84c1297d1ac99d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 71c6b111479be5821e62464e45bc22899e2b665cd75e9f1fd961b8ad52cb446ffcb6e0e9c928437d02490dbd5c1ad464f65132d8f2d01a5e6ec257462f61c87d25cff9e318b8840cf900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3a53bf17a2791baed62a805ea83e8390c24b63b715db9abf9238e50bbd8949b1f2245dfdabf0e277f13c355d81a47cf47555ced8b6a6c84e26f492e92ccc0edd48ada95197618ad54700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -326e48ecddd9dabfb0d77b9cec0a16cea87990196aef5bc2b3dfbd4df06b07d661cc5672f2a0a913016b256ba44675553e7f6dad7b2c1e8e974052c0106e5ca65aaca62e0ef1d14f47a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -26f1a8998d574a34cd12c3d424a2863f52763aea29a6c6487a43ca219787d0994e27f593d085b393ba2be6d5c235f2209b6f6ec0724a2fe63bf0dd278dd7f6fd2bedaf2cf213ab9d14400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -10f3e1467845c667315575465b1e4d22b53fa819faa47226b0e30516d6cedc518b5fda240f085ff9dca4bd9e111b0d61502520c9f0eb2d0b8eccd7bff169201b2116ec6c929d763406800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -77c24b252187db6b1faab4f7b06ec2ee9a2addbb94ef7dc0f3ef715b27560b61871cc1b13c76a5f6fc2a17f05fa575ee1957cc0a78bb3d815bcdeda635b3c347692bbbc26cc060c45ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -10a298a1fbf0000ab661a322bf4440d0e40c1c0029c73deda109d9399d2391ba474323e70fc2918724205714b19ff94c3c83cf5ff4a39ccaa56e54c1dabd24ce0fb41e48b9c40c3765000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -102b981700c29897d263a831f9a3b74dc844f659d0e750c3c10afc44e6f8856de057d609dbb58e25f7ce3c81f589e7811ec8352eacf8e52e253f77a66e77df5af27077d0c2693326473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ac412fcfb459b63ca2ccb116c34d2d924101c5e5956201eb7e499ed5908775a766e22e285f832aa742128c07cd98217767bf29ee0329a1bb74e43f044b77fbf58cae1d2701157c195d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 96e8706cc05189e77cacaaded20d819db4ab7d169ae40cf384d31f38440d4d7acc8aa165ce2d1317fb2b539e026644ab0f1ac409a6269015ea3d136e0c201a1488d349470e690783ae6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2ef3d41c66ee24f085b6ccaa6c746143efc9e68a338b4b18586498759bdf38573fb4d344bba830861fa30797a5c925a6405815f2b45248d64fea87d5db5f2847615e84ad3f6eab4a1044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c7d7892e5dfa354626c60fefe8c3ca85d484389680fe0a0095ad6a87d85894d906bc645860a7d4d2ee2cde7db8f9c8bb47b899e5879e6032b0d43ba5b8069ae9d64bd2f15712f89d354000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f1c970941277c410275c9b8f74ec7c38556a97a371022a770790180cded46ac784d688abb4a08876031ec1fd7fc2e1d5afedde492dbc95e4669be2f4718178193be12a48310d4526ee38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d564e66bc5f8870ba72070ecc2d7e33b8345060ab255417274e1f985b44e145e9cffcf7f01583c1b3852463bf599c78ebb84bbed22c3c80497160198207964794a8e63edd4cffb79f604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = d68e68f0c79ff18b7684deecb42c0d71dfbf33d690d12963a71ea7b0eb761ffaa1c06ff2af71b901906ecd2fbc5d0d1a77e07b1b687f7d5cee9d2a32d13a5c23448daafac376c2d3dfb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -22e2bad4ef3548b28f4025ca79bd71b66740b7fb2fd22832551501e8c0169038c0bde07d83152287d668d04a62e8e8d25cc754cac5481960ada5198a5b1fd017d234176def75a21f070b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 898bccca01e5970734faf2983a09067505324a51bd664f751c027299c6eea3e74dea5f4a5b114100224dab29aaa9dccf8e3e42a6108f53e27f6eeb9dae52d4a48ff0cec5f01994bf18b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6ecf477a99c7960abfbf7271716a41de9e86c75d911c154a36d15e35fd299a13266763ac8d41475bb4a2c86922a000dc25ea1e7a6d28d21fe51fa3481b470289e3f213d7aa16e465d1890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -39f938a7c470afb364e73ca8e882f16df063cb3cac62cd944b960b5da516d4f7ba60ca4202a1db4fed5ae3e18c96fe6a7c5d968c7cc322f5278eb17e19677900896debf21ef74778a233e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 124ca0bcfa1e758714db681eceebef38f55ec09e50750fb52b8443db8da196a7a56afb8a5fb598a27646ac20689e4f5f16cff1516e99688d7e8169c706f3cb33878884e0c1baafefc7acc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2f23ec3bc3037f8d09d2103c18fc0fb60ca0b2a741c1721681bd039684602d845ceb56bc5a4f52bd0100b01544e14dff643f73c6032f61e3ffe32d80ac1a1fea9642bbf15e56fba184480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f7fe71411511fc4a1554c027f21a78d91c8b455f8de5d3d14b6713ffc8abe9d1d9b6f26384da2dd70c9b96b8fee0d7f48d7f06ecc8a9b1195caf7b548b224e2be739f2764d92a6057380c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -34aa8ea6bb27a7c7c8788f273ee7a97bf6248e0a18c5aa9bd60c4abaaa8b8f9d891cabd2e66893e056a54a2c4a764c3e46d39643e394c9c563f2a86310f072cfc53c72e9377ec43390e6f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a7687b89a793558933c14d47d2724270b5b3e15b914b4d561ec8b374aad07cb043ef0ecc03bb784c1e7b3ee4d7d40cc22d8215fa05672fde54fe43f6b79034e69f822b98b922c5bf49b600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -201e5e4df48331949c92a02d7e187e9f985a0eb7af85e8477e39d0c0d3fd6cf8a3eb4b1c3aaecbe928c5e775bdfa6275eaaaa3b237ad5e8a7798af47e7fd8ddb71be22d5e35b40d9801d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d8842d928f85bd7e87586cae8db0fb7a2f9607e53a56790ee80cec6dc9bca8093504aa7db5fc4cacf7c518375dbebcff77b7ee56a060a91032664f3eaa4e20347af4b65e21c4540391d6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 192851f6b8389a76d81a55c41327c3db88a1e56fc5570d72b99ddfbed5cebf41e3e568624071f21af907e52a8bbe5701e8219b00d223ab0cbf240d80c769d98c5f19ab39a0e1b1725460e200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c51f0e24ce9fd9d8aa57dc0cabb002ba4df8427298fbe7dff181cdc7a21b81a8022f1ce3b32a2b335ba9bd7e70737963c4f154333e46338f0b57b79583b0663f2f74ef19b2087b9b89fd200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -cc52a0b091a32ac87ef968adb3175cd0410b66c4bc0bfeaf0988f9e49a68c7fe5169bce9ef1e4789aa4930135e5434a8e8975763d803cac108e93ab87033f0c1fddd6677ac8029fd82598000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -37af4c1b0fcbe6b60a1d7e1307f66da7db712956ee34d070accdd676f6e5ea83913e4afd942030af4b008f149986270c7d0702bee22d8187c363720f85d3c689ac881e1d6d20e7b04ac23800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -14ec17b74e3157719f586198898652493d6358e6d8b77939698af9b274aaef2c0409b118693ad62aa4dfdfbf549f5e682a4449826593bff662155bf132305f4923fccc73b0a79539848326800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8ea20c9658a7451ac2fca5437f16604e7a6b13d1bdbe1cebb3cf21d08148790ae4d5b2e35c79d249c96d46ec9ab7237001c02287c417a171e12cedf229cdb6929951605d1b74972ab701a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e6b13b3e8d98cf62435d9316d5a3459eb4c7593c953efb7d889d6382c28506b55b11f9dd04e19fcad5594a0bfc5900fe6a402cfd9db6aaba9180db70bedaad22b3bcc998ee26a5714216a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d9cfcf8260bfb63ab2c8019411c3a754db9df492e93852a6f4a70a349f3ccf46210acbfcf557aed7f1951de28484624f772aeabed897fb7ee229ac02ad838cb394b8a5b16e82df87fcb9e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 4c6ec221b98a80c052a35a573019d8f1c977782b5d880d99afd7f1c1acb83d749a4738e0e264358f0419745c52af7b0073a5b9ce164d812144c291323d3cdfb9d1b9a0f485cbab9682bb14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 38560a04b2f93f5a1ed1b3983ed6c9693c1f00e2e3bc560f7317f366ce9155f39d17f38df617757389dda7f0a03208177d19d8f3f831421872a96dc55ae8c54720bf1675735d797a54a8138000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 818b788a417cf83cc45265217e51c28fc4eed3f69e728347473ee0ef7ba97c2d833218889d1ef5c419ddb3ffe73a6a5adc1743bb7e634915cc3fa02c26ee4dc3ac039015be7b106d2d7f110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = c80ca3c7486deb375e6167b79f1d3baf2d4b32137671a283d3e5a1bda696f25116eef09e986656495c0ab9d000369a379d614bb90e3af9f241ca9be181790784d3910877a6768582be3342c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 128106752d9b8cdca7b6b1b04a8ef879f42307116953e33da8efb95743552dea6315211a162358d9dba7b89bc40be64e362bc14db37fa582fb389e0ae449d90d8a4f8eca265a0ccfa68ef028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1e62fd23dedcd375b8edaff88f6bef17ab4b14a5b0ce93f56e06561ec28fd44c465368f0bec701c02838f43ed6dc6ab0620e5113bbb802d33327fee4e8d401b850fe1b19571fade342305558000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -45d72f15e2a370ae0d53fd72129bcd6d935df6aecaf2d1b73732d8fdc90ae75223add4b43f4de34f5b7254dabe83e4620133eb8d8f80b8a33f4c92f66e6d6044431404c20a58c49b29874640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5b262a4276313435f53dfe48f032ef961d58ddca94bf3d32ee1948fa94943f914c8ffcba1b13326a6b3e1207d71cb5517cceca54ca722233aab85e7a1b0e2e6c159d83fe0a9186122da13430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 25c10b467ee260ce06ac75f100d778f9bdc5b3bb27b2eedf36054023f2e441b385d0fcf6a61eec2ce5e2d8cac639790b30c337ea6d52fc1324afaace745e424e8ce7e2c570509dc77ca272de0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3f09597fe3bee56b66cca04d935b2702e530ba533fcae1e8b360b2e537519e3142c8893ad74f47070d559430826c885786199a9ed87d71dd417a76ab6ff4f71c33d8bc294e6a135835af7e260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -964c14ac2a1a8308d3449071070558bfa87f369b670592a6713ad73558bae7ed8a0a9b5e4870fe28cb3a56069605751a5375a82e34ad11d9106fff94c1904981f0b516afd2a0680bd9e926480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2a5957dc1f3ff0569bcd986534614938b6b9da4a795c1165b263f218cdfd17e600ed650ea52b1d57c74811d2e492eaacfbd4922d8beb8866d10b7a9ecb7d6e3f5314ec4b153ccccab2972ce80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 320b5644cd781d204bc8ce7d72531c8026c40c6cfcbfc0fde6be6992de277fab8574b17c8b1f5956f0e2ec4c9668d94ee2bcf709fd54b5dbc180c805cac7a9b6b608f3c4c807bc064c49f5d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2c55dc669b26d3c44fd6ae05abf8dd6cec67f6565635b51382655ad77c1a55aee8403ef0992e7321606265f1260e9dbaa78b3a7ff1a3316ba530c48c7f0808b7d5149b6d0d86649095fc51e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -fabd2a24d083912d1a7909b73627d861123a665a0b4768e7fd4793676a3a4f6a9981780ce666d3072ccde7f51570844b43fc46dd59f0e2964aa9d3715032a3b007979752e4ad4d67a6eef7b300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8e605262746a3b3441023494e1d06b2957b33fdc70ddb6406f40f8a79aa198024126426139e6573db55624160f7176bc7b9883627d458c1c52dd64b228fd54185b5f8eda2c234fbac2266fdc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -150a6d472f5038981e0ede41aa4d1ecad56cdba9127b1553fdbd4088b354c927cb8e191ca0b6b4664b3c72e5148692d2af6fb2611a8f4e749a311973c74203276cff67d1af9b767d4129a947c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 654f5f97d8827f46f481504bea489a0aeebfc67f97478bc769365183de8a769d9e0375c0d940b2f13005df3b0633abdba9fc6d8af7705f55cb9cadc195ee3bc0d513802606f8c002b8cd367200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f8323dafcef2c0b873384108cebdcd279580c8fc23216546f89d9d6f7418eb22bcc10d674953f1020c07fa77920bbb9968cbcfa13443f6f9427ac41ffa8453113b12d2ae7d9ff54a5506c810800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = c68d97fc1916699de0af674abba49642c3a6af6c213a083d529883691b8fc7ab460ae5c7a92c862432e316c687bf35759bede9c0bfb05536d96bcf863afa4eaddc64cb1caad0cd6c07f56717400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 14e59f0d3b0daca2f39bf240f0bf077a1c1d0d1a0fba0813bea19a32822fbe6e70a58e50d5d88b21447563951ee0d92d1a907a25b979b88cdd24800fd99ec926ebf4688fea4099d5b05ed1829000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -31b90e3a192de6bd857c0621c92759b619c30ffa09f9429e6cdf24a0fb8447de49e869447ed0e0db045235233331782db6620492cb0fe64f4c42833099e70c46ada6d549b0514ad00ca7665b7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1aeb5cad51a3128a8179e84a7534d849a4da06833568c9914278efb43133811a083c4938fdff6a1f85701e6b83b8ee4339748513530b1788217297fa24515d8bcb9d0fefcd0cf62fe90134853000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -9c5859abc02609d48e54e4d3c56852cca1a6442f78163c55565ecbf1f27e02a39a1168b8592d64aae8c1d77a60b1280fd6cc181cce26de442a5cdd37647871d49f76d3cd83e704c1affaf455c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1226e14132e4c3fb74c05fd754163b7d5e9aca93de995382253409c32c2066bf2504f8b1b229f8ff70f3aecfa115f7c0bbb176fff329675b959a877ca704fc86cfd18e41e1a8f68c2ad485cd14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 29a1cc5855fbd4791dde1d7e0bc3bd02425902875f4346235f0643e5577bdc303fa962fb76787a20614ff5e2ab2695393cd8c141303661de0454291037beae466ea184ee61330c0767e0082476000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -9473716304240a9db6d2e0831fe333b77e4c68b216c57205cd50f3e4ca07cc7ada7dfaec57c34d4e725f4ec23a184264ee47aca846ad445278fe886824b7cda06bbfa6ff12ff4d07b3d192f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 43ff941d0125a8bdcc0471f531213130656d25a17f038f6ff51ce542d4660fbb87c6b54f66cef8728609f35b26dc465f78deecd9d67555fd0ac3b644d4995f03cf665e113ff41dc2feebc4c068000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 21a9391a03832b876f3fc3dc567823912cab836403af7b3167a11d5ad98dc590ad1129c19ae623f919d28c6e44c6c646e63d650b7aec12aa964ade8bd7aba27122bda8d5e08f0e03f77c6839848000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -181e5d84c4d9e3bd97342df38adb3a5ca1322be8d49faac09a6fd965020e1fdf8c36d94c7d46aa05f1c1cd92e7368e7d2f5292aef720348355afef612798e816e5149697a5e8311638306c85d70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = fc3e6675aa8413f378696e9147deb2832b1ce2010d5986dd8775379aada6e45a5493b7f471aa4cfe9d3fa397c0c2ecb6b6d4ae6635317e9923c3e5c1f5dae798fdb90389131caafdd84508bc940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d5b28faa913499c442206a5e8e4a0f4ef1104de2a7c2c5de9ab8c1ba23f64e5324751c26c6ed0433aaad9609499b309ff0051ce9a839873905a5dbdec4ce1d18b00ccb48b6258a3bfc6e5fd0be0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -22c2c940899b48192af2c4dfa9dad7c7a92c391c52f6ebcda16bc2b14972e2604a9c0cc52a5cc62fdf559bb8420800147d159f016ce5c4f10cda1d892cbe787752bbfca7f289c4b506df4d761380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -17c5761f1f2d80d9a42e2de2d64510c8f8aba87b49a8f8398dbe3dcce7ac8d06ed3a8e27f4f555039e8b1cfab465f9352d8c616f80788dd8bcdb0e69248a87d8e15eca6363942bdfa12330dfe160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8232d26cdf0a272682abceb8aa2c1dd729306bcc95e94441c32bbe5ac99c4e9dc0699257cff7c1f5630a0edc8ac4521eedfcb80cccae3570ff4ad5cc6f470684e718c662df0d7b7587d94f8b21c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d388fdc9a907488e9ccf9c2d443b876404c61c16d67cde9f0bea89ba503e39487d3a232a765669e64026bc0ee1b26209feddd6f482d5edb83c79aa3ff59443213d6c304db2cbf6d1ca42937e8d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 13e865de30a6f8185f9831085a36c90c47145c8975d22baa5581f13fec020a07c82d0df82cd5cd08bd312f563c19628ccec6187520665156c81d54cd78a2294e2b3dd7b6880aa7582a29718669f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 202b0c892ec4c29d5ebc54a692af434d8baa95c9dd38ee07c87f445d89469253441fcc0905a87ed1573fca424b4b4fe29f95963223417c1f69fdc55522946cc776e86b54862ca811f3975188aa800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2f4a68bf084fb138f9db1fc0b68dd2c47d45ed8e28d083e118fb954341e30a67976cc8b5caf42b8aeeb54a6703360421784e0b2c888ee52a452fc83628e2826d8bca44b03801177349df764d2dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e4e3f0a6fcec71cc6c2573fdc2bccf714c02fbb906f5e1ada510d07e1f868a5bace89f4bf7b4947ebc5bbc7a07654e940380cd2ad2a128858d6157995640939c7f8985a54987e8fc27c106fc2fb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 14f7390d80b0cf7f05b9b515f057d2c6d5aa21e4716cac54d9b7d174412ba1516fda05a8c19ea6381d319435d3f51eafdde14ae16dc4264f058ab564e3286cfee35fd0c9551526538517a6395b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2c7d44f4de01579699066ca6f4c435dc1029470bd2a9a5d20d533204bc8b802fb18db491e06956b88b2cb0a5857be6df776f6dc33f19a0a7a4e75141379fe6661c48ef660a01bfad624372f3ed5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f45b05e249216b7055597bf1d608c3b04f12e6c37dc483e271281cd186d7138a2bf746306482debefe2ed07d4c09142b9e67e3284c07abe4a97d87d1e7482c0e9740f0cb87d7734f6a753c84c89000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e0e641acadf688457e77c93aaf971743145e8c5a96669e63d707800556fdc344c2595ad7fe9c78e5ea5b08112efdd2e1bb02d0ab47d247cc7cfe5d3276a6840486917f0a9e361e30027459f70fe400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -37937604fb879937a4c5529ffd5202789c7c7f223ddc338cc2b3c082612a13ce1838db3bbf8c71182227bac47810f665d9a60b968d1a1980204965f10f05b3d251bbd7b93ba3996d98be92529695800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 13229bdea1724b5cf7c69af1db9c8578f5a084fda87dfbec47ab2531d713545ccfadfebbcc265f020095bd002bd86429b8d5d5022d2acc7097603938d66448dfc700c5250926eb8fee9d072c43f2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ed861630d1590dadaa79387f70f55d797f0b612a387864dfe2564a6e6741befd024f8c9ea92389b4f88d0b841e0c5a73ee043d15e2adddc3020858a3baa30f7f3f7078cd134f5944b13911f16298000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ff35449d8727d731a693d8a1bfaec12ffa85ecaa23d36a4960b50c36fdee1336b485e37d44023966004d3d21c3ca40d9ba61bbb83b606eccb88fada760da990dd3c02617d7b7261c82e18953ae25000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -28b4209172dc81a662726a2266cef47c04accb1dd337ab840856d9723c18104675388ae1f5dd551aa8e83d101647305ee14cbe47d346afe29ec43a0c9dd8f8f65e4a30a8e97aba61ab103cfb58d1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -10693e3636f7c37b958bc5d6ad086137c0e34c4d3dd8c3f8512152266eae6aa310d7f05af55f85411de8a0afd4a994942f1d5467ad7c1d20401c61f7eb0dfdec9e74e95043745d8008f5f3debc45e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e6a9d9d735b63f124bf4bd59ef215a99ada7487ae32b08c96723f227fec1f68c20b61dd0c0628e13c0da6582bddbd97748cf2c088692d14d5cb9c6b6b361e80e7db7bf66f7c5697d195d80090390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -4442e35617df3071009fb4d9a7473759107813714b022d026e807f9ec8f5733ea2f491d0a35b2ed7759ead21faeda2801acbe99ef76c0efa114fd7ccf1e93eb97824063d6bb51099195f956f3cbb4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 10f32d60e2c46e8749a6d12d553c4fa27db4271187157a1fb8cd65fb9e167461c18d49c4c72656179a1b2ad971113a61cdef05bbfb8bc28f56a764aacefbe5beb5a44c63f1ac544941819bebd4b478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -21db9339c514b8086cf4592b84b0de19197b1d4df0a53a9cf80485e1008963742092ea1ad55e1b2d206eea116416af394e2383fc8fa100e78e3241981b13cc2bdf979c66f97dadbf944b98bc83a468000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -bde2e4428cc6ab40df660e1553c2213fecd9e490c9671d1795c5239f4659404d074e84191fb28edfd0f05ec9a58944b980eed805806510f5314ecc75ec561fb71772662b4db7e9251d673b65926760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2c24b977db1e32bcf76bb631a3fcb02dcf265e522763335a071f8ec936f5e536c3b882c671c446e61fad2047b339cd60337e7f24529fb862d8df007fe920ecf4f0fd70f421f0bd5c79e1a06dd47000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2e966dec3675c7746a5233ede1340878b271b97ed2b938ca68281fe09e09e173b5fda9bba02a2372a139c4499a86cc9b0c3c2884ba480b22fed620f141241a6beecc60734ef06186d3df9a6c12c87a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -31d972a7bcbae8bbdd35489259e19b3ac8429f69c88dd7c8a73e12e897d8fe6d9881b8593107f5b31275a1255f77f249993a0e136b288114e46f1a9387329d3b345c46f5a1d38a40d46e962dce9b520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3405b06fbce931933ae8761c77c9f435926874d6e117c2bad3846086448ddc84c2f977e9a8ec14069463347278aa723b3c2ca3ccd89ec8b7bb7c6305f5a6229a7c9695a4d667aa3884fc6d22c2a8580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5d27a9c302d549fb9074e6e5dc099974f2ad29f62629de79df71314123b00d965b56f298d466a3074ca3f57e9e0b0230a12e31be008b46bfa5e2b1521fc700402c9aff59c18e07180a4171788179180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1b36193b04942306cbb5629460966e6ef97b242ee90636e43502892ec0fab6bd42629e8ea9be6592d3f3a8fc4e95d89a0d33f64fb4ae3c84b85bce9ec99c60771b6ea9972714aa178927c7a31e69ef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2b97d2eb83b9ceb48e07b336a276a9b71c2c2a4858cca60aa329afbbeef222acce1ac99de226e9f532109a0354cf15f64aec6995b4d824c856c0da28dfc5a00800ee7bd08535b8b8f4fa02a09c363280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -792b77866e775b0a128f378746472750b8b59077aed5b750eafa91421d83bcb17013c214b867d6b2394a0f7dedb9b07f4ddca7470ab43c1b3bb1d018db63d265085485b526ffc47a32eba5e277698300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -85ab2e39d5d92fb5df765662cdb3f37d1acf0534c1be067cab46404f97ed1f9b6a365d823743b2ded1aa8bf8e8291af6624c6a043a3526a8e1f0e5b8099afd355b4bcfc857d8d7846277256fe240c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -21b41187b815c1ebafdc5c08ebd919541f261612553818ffa2c854bf48792ca3db31020e8b685e7f5be75e74be2dcc8bf350d2b524c38a987a7d317a9f0ea41736d23724dea2f40b795b71c4285c98c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3128cd486a1c10d663ee9f3d51afcd123368372a39ce725792034c52462dcb0df2408c12285ce01a94be169843e1f797060f658c58e09b06b02fc3a20b4db597c7d3e3fc6680cf2f029b9a295f11c0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = d28d32af6d81cbaec4ed1974ff2e6dd1088521821e8b5e104a4635cc4ae2879829cbc089e41f25638c138521a995b487255b36e8a785d758a8926d94972e722fa5b8e47c694e82662906003893a78400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -be5423e477e82ac78260175ecc97bf62e1decc141fefd8f54cfc7bb92fb2936b212c72c17714880ac7395c729b58eb2e77d207d68299b7bb0e930c4625de0524d6fd49672e8b5aef5a52905a812ad2c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = fef7c0db96c5fce2e1e68d93ba14cb1fdde3d10aac3bab3ea3799c306a072828dc19129a9b59abd36e19e8378108bd59e12e51d877315e89d7e8ab2ad69caf763b679d3dc62fee69e5263b9cef2612000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d2b961de879e2afa8369124704c0c4e4082aa1bd49549c8210e392290c476d84b64fbc35abb96ba897f17f33a7715cfe5cfc22ba9df656dcfe872bbf78fc64b2ea2306a79e81bc4d640bcfb17dfeb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ce0ffdb7b7ec9e1d3c7290f31d0337c7a199552114b01156245cc220cbbf3964d87889b011b71108e56bf277be9e425d2cc3ed43c2a7f8b0d1d68151b4cd7db3ca3dc2fcaf3db161410ea29a985a79a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -9535f2a54115d68737b7f3021f13c14e26b024dcb3f4407f5b3c4009111b9f3cf77ec4fbbba0beb595630181462a058c76797008fe2af157447a9177746f88809b238deacebb83146b0c2327aa4abd3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -9c946fdb992e3cec54a0e347d9925b5e09739702f9e3e7016c940a34ef4f241f188a2d81f0a6dd26cc3eb318f7a15c787c40cde74d9cbc189230178bee0b5f8785def78a8c64ff338ec94f7f70e428c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 26bbbfb4ab38eea78671c873bd532a8194c330d2ba42bfd9dd05af562c6164c85f174efd85e0dfb7e0101c4dadcabfe76df613f15888a011cc83502d6d52cda2fe03900616c937989509a15395e79e9e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6990a3fe643a595328a3f093d83db2df0e1ed61b52eaa561429ab30190a74e017bd151bfc78850ed96537319ef7c35d9015609f1c7098c5c00d85ff2e787869cab03b621fc6082ec45245135bfa6342c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6e67e3b592853a21cf0dd2396a4744cd6717be2fded175bcd3d6bd6a19566cfd73a10b406f8031a77158fdc6e7b897555ffd4df47c0bfd86eb17c39225664aa6c8729c9ad7558761a3e38b2a5d102224000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -10bad5333a970bea11265908344b71a33d0a04df6cc98e7f73baae5b45d19f05b563a2e104d6b11b7fc695470c64891c4c9bf78cbe0286d48eb81ca6723760809ac615224c9f51d9f21b012fa7b291610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -185f7ecadd8650caf3cd254e4c24f543e89709dabdb83ace62a52e085de34c8b1df15e84f4cf4915b15341d23cc2ccd2565af4d339633dc2d7ec072c5a66d89b01fada5cbca94a05285a2ee899f817320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -a44b2ef73b6f073ba33a1a3f01deb6f2d1d933dbce7808563de6114dc75855f6743fe5a36ef6762c9a19857ae34dd8363abaad02600ecdfe718c96ab977d317b0bda73ca96e6786dd2510121dae5ec730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1c59f51f2ee75e54591cf6d073af0a963bea3fc7422f10a3b108a182bd58bdf645c6e332509a67ccdf831edfe7782cb677a9acb605c54c2e1313768e469f2103bc5a1213d24af3be77e4189f175b59550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -379e8db19b3e55a2b32b836eec8197aa9fca066e9c117b96462cdb696624a45a0bf3466f731dfc905ebec1f29ce1e6db78072b0aea46d6388ed04772d19465317106a69ecfc12034f664dcedbcbd6f6980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2566d2226793aa39782152c5dbe7ffe93044de9aef633ce53396a2753a242788ed13b8da4b9dd386f8c02fdda25d3c873dc3eddaf80f9cba14a246e03771eeba3e71732d910b10fcc49e205c7e272f9b20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6c095e16fa70cb7fb22c83d9b3e244d4597a57675a912c597862e2dfa99f0c734b0470a7328ae471c94684ef50d9f956b2994d545ee6119e93727479c3dd0382a3588335e60651f23a904b58b0b799d680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5712fc0285df85818f5f3e471ee947ef323d0a205a17aee7a635d85f57083120ea6d18e445ec5e62798850bcc9916086c1095272300aecec9b40a85d0644b756d7b7abbe3edc26fc00b2629c14cccd97c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -37035ab793c6db81a0ae052363a74935ded723c4168689b9ba489893ad9b4ced10f94a8b44500e5898fcc63242cea815561414816d597ee2e44ec23971482a2ae0d412487d55da562a3c7cb910c3b5f7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -da79ab3687e8a0f4dd528248b29bf6f7ceb0b9b8cdec8ed52a2d65616adda74891f6552370603eff5511ff2cd0bf73f0a5b05122eeab87dae9a56548d54cb0f9dae23592101338289b086fd99a06c95800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f703e850bd65d424a71cbb505c6853b3807202a9d4aafca93f43dd0a548fce74dabead8e16b6caae497ffbea197be7c36ee41594704676df87aaf1f9a1e9e73485ae51b564cd777a7650358041b37278300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8bd396e41f00ebf645dd0454e27bbaaefb383745cdd1e2684baefea51665b2370b8203a9c4d02df17c4e526304879e24665c2ce38aa183d6a28e606f5d916407010552c4f936fa0cb7ebfa6f4ce4cb1e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ca605573d4e309932959a4bf016b7d9eead1e12a0c215ce79dd2179d3b5894c919c4ca54c58e5f6fc39512568dfd72ca6add39ebb48bb0e9da9902bbcd3569e971f2421b70927877df16f6c27cd0f977200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -191397fbb1deaf5a36ae3445037f3ca7a603ab612e9d54b1ebe1b4db4a3948f478fda87eb80cfcf52495485b4a16fb73f9734be9ed772aa9e3c63dfc5367f64324611db0f1b776b3b0b3471239d28d93400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3cba1c4359d2356fad4b4614e12885917c0d9603425c131ec4c90a98f35f1b441ee1d1bba81726a7d42b2170ff570afbacac20413b9b4ae17784b886fca8d42c9fe3e5850543cab015c1bf7528ad76f91c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 64e5603de6308091cdb0f3d46d2f6b8d8837eae94a2c0fbb236737b9b105a906919fadb6f6089d557fbcc44afe2260f4b9ac95343e15019cacc5a66b3e6bf394da26a6cf72b23c9dc8cf82bf92fb29361000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2b274a8a39d493d0ed601635a17cdef58f393b5e43bcfdb4e3100e02e5a48e5a7b2a6db122c789f42b624b1ba43b1849721f806fbf1add3647c37c9147a90e2a923a71bbb0fa378f5f16f6f6d5dc79a2c3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3751156368e1ba83bd6b7899c77caf76dc9583a443efa41465ec9cdc406bdbcb58af4ce17cd1f4ee8bfa8804f0273a724c15d81ed5520f610b111ff6e38e57d785c6320397f2edb80fda894a65a65c64ae800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -828888dd3b05421dea8c5d4d626b851579391d5427e6304eddf3a30f4cbb86ec74ac0079087124216413796ecc318e50edec9d324fc211a92ed8729cf870c610ccfdd3eec1d29a199badf5221b5e11fab5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9e403f804b0e396f368bea2c591b169cf72145fdbfe88613e0a3e2745e373491522672ddf1d4201db227f2e42cf46646b5732274e7f5b3610377b8cdc8cacfa31f924f69863ae1ac9051584558b5b7ae64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -28375812360a88cadb4dc6f83658c12b60ee4ffaf73661f7b8d8a295332d53449f48725d3f7ea5f5716380c5bd4eefdf8f1d90d57f7580d2060d73b5eee53bfe73a5238a9a8d769dae166f9ade9d29fac0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -79a3862c72d914c6eebdd05cb8382a1e2d004b7b716019898a059727b47321fcb1e8ac62a2648f747d0634389268e3bc3396a45663e77ecded8c789bdbc72baa30e7f61f460bd4badab01d662ddd709bfc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -a053126b1b8dab9c3c6cf9b8b01228afc4fa98803c54660b79f5973756b26807d0a1a3dde6048696b34fdf5b048fe1e965a3e9c8376808e6e822407c1b45be9becc488566c9208404d173b50c3d5a1e5f90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3d68e79b16ea874a903970fd2c710fb49949a8bd05b95ff894adc4684d0f596fa1565b9a15b8258d08222bf62c2fa8d5505758e1d4da8b8e41263ac87fed3d45fa7658fc54916469c9cbf0bbf6799622a08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 11cfbbfb43f5acc5e0c87bd2ba8ec451ea3cd56e2e372f97f0d67c964db090a16e7990b1bc431cd04b5ac6e07212683195934f4f2e6edab76a22e827fdcc955943b3e0cbea9086df28bb4184301baa999b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 4697db048ab018af7d8ce18c422d72c2567bcbb693254da74ee6889402eb34f724087932fdf1168bf67e2685285a775c6159c681a5b82c56fc252e3c54cf7b2630b44495f13af95baa9d610200b20902f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -40ebd3f5348c1bb02ef98cdb234df81624363f99265b0846a5a3a2662e68a6901418577f7bc0bce001c766aabdd0740ae7a86c245349f7ab580f41305c937dee585885feb7423a6450fd8869218844625730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d23c2cb72542c48ce2fb62f0fe7c19981f14fc640b5425462ba6ee8d35cd6c60f7a1248b491d1ac5012bffd10c37fb0c376283d3a6f4e4466e0cea765af64ad21035a9e08a00ad8f167a59928f9477193e20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1e3e98d7423da28418d0b4c8ea3993ef568b07ffd67e9b7f5bd7ccfd4cd15feabab7cff7b81bcb53d69623deda7aad2a79f50bcc4cbe766af568a79031a653c0b5dcdc2687d1679433dbc253c2e2497f0a380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6dce81921e119d0d2357a311a593e5a161157e6f40ab944f54829acffd7bafda4b96a4dce256cbea5a43a668795662e0055b64020b23a468023bdc6721c8c14a9fd56f141fc5631a91c7b7a153b27378740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6e7254ec6f83d8c0001ad3087207a8335d8c7471eae26a73ad67ad4b1e35df2dc6218d492d00809840f72e63a3d6dad89ad9856258c097e0f64d47e23eec6bc58e978154dbd56c4ba19341ec48da43d2cb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -a310ea78595b5cd7a1667799baab3a13cd97b89e38dea707c5063676962a2ee856a105926bcd7fda6e82853b08a7de9cd0aa0e42c70ec36507b2d87b43dfc8e2dd7ba4a4ed6873f24228136f0220bce21540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ba063c376d3fb9a8c5622bac9cc708aa17d37a40c93ab5355f773af7d738150cf8349af1d92e7c06fd5a855f3fb759a249f6d44cb20cec6d560734ed6d92c1090b62e5461463598f30cf576c04c8a27845600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b0d4b4292a72cd5b0fd111548f9357323564f09d3c7cefc4f887a610d57212f4130d63a81fa447d53c01a81c6efd85d808407662cd8ecaeec7170ffdaf7a176e9639d62145be96c847f96a72df7ce6ad0fa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -deedc3cc5887bf96bbe49cf236491f2f72c9a8424e786b428b9206ee2c33d7edff931c0f999b51416970d342dce77af955bfd325442d71ca7c928abf860f5587e299ff5d1c68250a2f65a60a05f6f1eb3eaf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 39f51e067769458934424f33a66d7db94c63d35a24b9090a79f6caf77cb62d8f1146f65b30ab935bc11c8d0e4b74337fafd6770889fb4647796e4ca955f346be8a30c1f1dc8f0acdab3d2a6db4ffb759b5c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2a8ab41f26a008f282f2c5c56b704f9f6c942941744af4e5ceac569696e5b2e893478abc1b4a8ee5e45862fd9b011b1207fa7b3c979a2c5d9bf8aa33042c9d5131d99952b6d231e03ccd10058b3d7c284afcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 11b3f99421e7ef1c7dc0a0ac3c76b7abd3d8264a328c93fc8e094eb1269b52a61b7dbb33c6b5474c2d09ce5243ffc37fd2a96277b7f4384f532d66b4040a077d015699971325af009e7b7a52afb9eafac1ada00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -307b3c24701d4c961af6ebf4c70d63e47d5a53892abbe342c63983121037e26fa6057ec15e9186c632b68fe5e4a1cf9b34c3509bcb15d05377aa9c72b5c0a21df98a19167b709d53008cdd50796aca21b68f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -80ddf4e00403a985e318c85646be7eac53c18be0c0d721e1cd8fd2990294c672277a587b77841e3097ee15a0bfa18de411b61e7b902645b04e5f0b0693479f308f5716fa173dd98cbe52758b57f07f9f7f2e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3878a3daad859d44d3bbc10bc8bdbc4306acd319a78892e5b3e9630c2dd9d0e8bb23d8c4cc39be4815f269743e84f455456651af163933b644f655c4bb1356560447a0db6a99f358724631a0d5992b867f785800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1214456e8d4e7ef6881d6b38a1eeb3ec3d08aab51dc41aa3cc0001cdfa232c966a572bd91999efd53979d7049e1554ef1b9676fadaa12a3262d10a774e9e726021ca9062fefa916fdff7af968f3bf8110ed10800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e1a0484b318c7c9061eb3ba3eaf1018e6c7b5cb6b022d6ed1aa3cb40b4b3b76104a0e259a3cc23d3fd65dd46f42ccc987b75eabecc99adb47daf04f127b749b7072f2d793c855f84c186ec46bc7b94949daad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d61b57b0b5b7a23f7e98b0300bd49690f45b4570aa52b426d08aa7ca3ac0271b6569b7baa36120eaf4c85b33e53e1640359f8ce92e23fdc0aba467349f69cee0b981c7922787935648f0c304a17131bef8063000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 354177d72d8ed98a3b5ce83e8cb3270344b0d6678850a67faf400adbd1313ec269f11683f99636b5389ba017865d07a82962bf4da03d6efbd7cd0b32bd9fe5de9e84dd28451e75548f0f199eb418c07dd111ec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1c869ff580cabf37d1ae8c053c6d08b06be8813238043d658bb7fab7bba49cec186b59a2b2fa3f5bdb6bf1753a600f2e2fcccb6118eb1da860b93f9cb393bf4398013df0f18c9ee09fd91a4e5e7bc527b4b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -aeadf7ecaeba086bb211f9b8d6d974540e32b89dde3365515753d219fa2268f904860ff6f8c2c21b4a0da726916897a39dd22a41d41b0bd7f9ddefd4f554ac6848b7ebd76fb22db55c882a778cbd62c2bca064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 91aa466bfcf5fe847c06caf54ae43517d3c8368717040e73e7afea78a13b813aa19c022fb373b324f0a8bd85f635ff00918be0581a765ebd545804cef47f1c74aaa89db7a797a0527e4b002d8dbad3ccf1ffc8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 110b5b15ae60fccfdff6d14371d7885c62b9549d6d9f1538cb372385e5c84144ecf70715d59336539ab6ef1523bd12838a66c06b8d56340ae708aef8db89819612a4996192816f05338bb5f9ad0d307deb08410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2d965ad7368c742f34d5895c745f0b53c6c328c781ea59584b10b796d4a797f85bee3532e8e1180eb93d85bb7f499daf460863dc89ac4c48cf85eff336007a0fa2c44946076a2b9d0835c1661398df5e62938d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -99a3ac5f2416154846591aee992f5fe9babd3d95046b40c8fa74588efe2e45999362554315b1cbd555b14c2c0944f8f9edcf17744379d8e179b36696e3ac335538a233851ed473a2b85a491681e5b016346c240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -12af32d95e207d78e0f7b180f19e12bf0e3c142c4143cfa778444b3761579fc5ccd0611dd22071608a7ba0bd4909786ec9852910beb196405e7249af80119103b30d8b3ac66260f3ddbf3151ccac6a902d15a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2fad99f0b65a4b04f04638538c27dd7f9f9d53d727b7438976a235e22e87063c30c896d518c5fa6c28d203772dd2761dbfd9a5c3b9643689e248ac9c7ed0abb5b4ebb5e4359b3c6239d89bd076efbb678438b980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 33c4b7a3127227bf3b9309f319691a44388bb5b0c87cd3e6132f8a28d96494d80ded5dc334a1a3424c87cabcf0656f2456691dab1ea2057100c04b974d78aefa6c3bf64b0ad7874534a2562a3cb5120ee9ae9b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6d4cd50c28e62be4e4b27103a4d87f0c45db31edfe07c99d8b54c78540bd7e47d14bb5aba2ff24da6b50aef0f140aa4f98a78c4360b609d3f95e5cb82585bf1946dbc6041df4c8752c491a0339afe2e9a9dbf180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a913c8f79a3bc4ac8df5f316e08644e0585844190b6752b7186b2dfb9d329713213f9a9447d25a8314aca96207f1ad9b13192443aa2262e7a2befcc0d965a1c3f7e22f76f54d7cc04a6a8027a68e8e76e0b4cb40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = bff09a4b84f8a4594582a6addde20fe529f15d62fec6da61b25832f881c938845bd3a43227fff06fae64b09e11579fd326dd558b48c506efec35600f37cf6a00d6c60b11f533b347759eb2aac3955c891c16c480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1587288533ef6e089c2376f8d2031e4224bc787be4706a1c851e138571ec4935529d05b861af5b9cdb8856c0c16841b2ad6a10a496039371debbf5032a3c108ec0caf5259b7512a5c35399967527565d89a6fcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 65b42eac4aa8a9a0b572918a6e0a45dc8a61f48ec97674c0cc9c183bed2849bbbbe5380fc7751ea3c1aeb1dfc1f58a537b32e24db65a6c3d6594845dffb4190bf0e717329396e2807bca2fcaa7f86693a5105bf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6773409a5cfac5d1486639c18ddb9bf5f6682fd05a71bd18f42f51956cae3a719ed94300d92c69f69ba0573be5bf5d26dc80284abf080b13ceebfdcb198fe936e1d52ce7523082af0c56a2caa02dc35942cc3c700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1ea9106601ce432ed996404ebd1eb14da09fd7997050a11ae40c9b9e785dfc2e7bec6b0fbbc5fa5452bc51e5a1af6b16183950a624c35a00b561469826370457c33eebb1378ad406aa15cfc8a6654ddf844a6ebe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -102f0ad55a93f9cecbaa4baa81fb0a32f725ebf442f215368a96b3d9cbaf4c601950b6f86aa869f7be48cbfdcf29efddd6049ee197acb0433315dfa501b8c1bec1fc33d841c2ff3761945d2143601ef81bed126200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 50fb25fa83450783f62633e986bf0bdad3e30e1647f8b6aad52d91ee8b6abe6fb5842d67e2600fcfac461337e7396dfe3f265f5385840c1d2ee81ae91a594360cf13ddc6faf24ed8dd5341ecbaeaed687ab7dc7c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 49844a18c4577c8075c99da0a7f5fdc7c8cab48fc45ed3afc12560fc49b18dfab7cd8007879bc04d8d5f1adc03ac033aae23889ac82f6550e6510d85123c564a57ad67d85dca126564315b952b3562a26fa43d5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3d8fb635d8cac518d62b0dc3a3397147a0ecdcdd7d9dfb6fe645719518f2ca13c776d99d10218b11ef2ba0e386e43fac0370f929ddc397af82bb9d5fb911817a3ad00060b16183fd3fed19a126ca2623bf19605e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -374e7608fdb77d47042ade7b7548befdd0e73207a76225b9be53534ee66f9883abe58798813d708f28e20f466feff1824840db2bb639b2e3865dd81780594f89fa6c97882b6e39b6616387af7e471da06a6fa087800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = eae308dc8a82057c2b71873c06a67910b9aefffd71fd9ccede1ace519a841f23af579e137ff244b53cc2e1c5229a4499f507666507d63dfb0beed8e3e5dc8d4381ee72ad0ab08e95e9e7c214037efc4e3dbde8a1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8253a4167b81311ecb3ae4b5ba35e93d942b1d4b85633ae7be722d82a43337798a6fba82c4ada7dcd0e25e642bd317307a7ebac393692e2542bcc399045221ba4203d382685911a674aff9e9d7573819f5690c7d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3329c13e0e73df5f4ca0e22bc7ebd9698cb33aab9df94c4e025dafd1f278c7c44b5def53fcd1c7b164ca977f027903ce88c77169b7b9d5392781be85c8da65417e733c7b4c84bcd01c923560f079fb35d8573472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2e301315fdba8e093dfcc7a39d2405ab730ca6a8e066037dc0ccb837e9447a08070774090f60cfcde7729a3b896a9dfb2ef852fc6ffc859b82ee4fa2120d1a04157742b8157191830ab93c72d9d6b4afafac5c7a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -bb351879413ecd24b6654d316043873190dbf8b93fee6ac48882039785339f84854e0fd681ff93cd6305115e565b5bda7d0d7dd3f84b687bf7342d14daf2c516abfb9a2b8cf2d0c0588bb405710e93bfe5a535c8c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 529d126927175d3effad599a0fd559c60317d3033b3cc7900835bfad69815aa7bbc40cf5857f3008854ea4782147dd4bdb1eca386bff45615e251ef86fd339f8e8913d9d8ce5e91a46f3f5145bf4d0d1c3e622f2c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -13f9b067e97d571024ecc1fdd02cbb130e6886c27d23dcda086c15c8b03168d0b9442a882112cf0aa84462886686e056754f448997211fca2817259397c688d1d410e31ed4131328a5609e57a86f84263955dda030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 94803c8a8df3568c1cd0c4b7616d35769e4384520c43e27dd715e8cec0cfd350054fdd2b67fa430c306affb389c370445eb2274cc8c903a9c0408af597042432fcf486be7b5bb458ef58449cdc8409481b79a4b48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -7e7d19558051775a4133aed906444dc1ad43c21518c3e5fb841e6130b23dc243d48607ad2f123a67c0ccc5d9698cabe99ad9ada5e000810b22d9004e9bd8470ebe5ee605cb7e4eaa10f6528d2ab24c05940c252ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f008dc714f610e3c907d801db659b375a37abdd6ce9c109d91cc34d72cb3a987b7ac5c81f9bc3361d3ee7e0a535bc3306027309bc14d811e96f48c2f4d56d3afba5f0b59faa66fe77764c1c2efab387b8c394539b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = c57b0ae60f9ec4495d604d5296620f6d80614fdc663c4c52243ef1ab18335fe608d0e451eea7bebf4d1b0003b3e4303e746256883bc083ab11b61b1721fc92889cdb15b5a8792ab0f56cb9bf2d8483b89fb6a7d2e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -35e3bc3edeb83b9d3beda50cd864ec20d7d7fccb09b60dad372618cfe32eba29d39d32c7cb4601514b69a91e72bc9a188da89a3d4b32a6a57785b2ef948d4660a8d893f05d42768e1dabf76a094d437c8343b868d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2473e2102550c6567f14544713548c0c13c9dce7abeabd9a3d716a32f89eb17ec7c26bafc08b4e8ff474080816e66810c03405a158063cc03a9d4e6e78b83f8ab535fad271a0f7fd98efc5e892dd7a22da741bfb940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -356491ff28c5d88e3380266e7d9a87cd8df8bfa0523f58b57d423a7d596133874a3b4f886032d6710a0eb83450b3bd7ef76c94c11ee449eeabc195c04e853741534acd6739d4b16ac0f1144819dcfa4a0718fd46940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -bb66b6105d5d905e38c36c20b4491df8c7df639ab7c66c12a84bb36fed7c32798488c30ebe1352d05d2e76793c4a64dc5f0dffc431fdf17dd2e5354683f66a39576e0ac0d92d3bc88c493f303e2bb9ea11427608480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -28ea7c3fbdc2457f5cb61932b552ae30f65d33ff182717f39878ccd598f6c70dc74d07cbe22ed6851c66eba682fe25b8b23077aca392c00be8a24eb7d3ff8588a27f2011a0c09ca7aff8c2a5c62f133cb0f6ba101400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 47678704967d48a8d5d4538ba077df1f2cd9c17d69cb68fc6fbdcdeb13b07385b5e9c2848006783f4181bf937ee55307f52f95733d3a9a41874938f3b1d831b7dd2a2ee46fe3a05d93734c8b610e3b9ed18856bd9f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8090b3a39e6299bd75518848de71e35bb06b8250d2c76487728e4a55d35ebe13a1c790650f741ed237d01bd9409e9711d086d18ca73a3965a57aaf407263e6ab21616e8ca559207c932db832ecf35eb87b1efbbb8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -52620f6c2f8732b8fd31982c85a51a125c272213fe6e347d9287bcd152f5b3021bdd5689ee44f3d246af8924ae51fd48aab32769547d23d2c109ce12bbd45ebd109d907a7563c03580c47913ddaa8b0b8d7dd4235a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -30b1d15e13d4d5bd887bb4d9434689cca544d9bd1e8a0628407161b61e85ac8fd31aeeaa9d60774ca786724d361aa1a3affecb7560588ef7b1c53b7cbc7cfa1faffb3d00fe8e2d544590c0108bb6448bd35287ecd4a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4d70e8a340f5d398dafed2952b8cf73a86b57b7b32f799e94197c494ef73e589d82d4de60eef15244e436eb6cdcfc3e5917b9b7e90fc6bede1be13cce11b9cd48d50f787375eba58ac358394919e59b14890db3865000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2922d6938b75653b211264c5ea010e01b4fa9d439996564952e4b9009265354a6cfce5a108e4c30ade296cb66d927399194308288353c099d43e7291b1ef61b5d8563d3ce71624d93730b2858a803f3e489e2b7138000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2b9676e2ff418f0a52a61db6af59c2c917a4736c9a47ebc85de4d23650d8d0a3e805aa3c040b8a83fc0b3381306fa44fb81af687b42643210414b31d7ce1ab72a778a7fab27b2f6b57e2d0d1948e395aadb15617c6800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8e79b30ecdb9ff276887f4601ad7acfba372a3224f19175a383e13725393473fe135bdc668991bf0a51c1babdb4de04a79acaa62ed771231f4330375657d5f64db5ed8f6dcc41664ff4b071fc557e4e40168c9ff71800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5d12700486f5bf33b09070aa2293120dbce01dff1938746dd44263488eaa284cbb0d8f5ae7bd322cdd4d8f459df5a2162ae237a2355cb35dcf2011f60ad2a058b6e52c16438dd49809992ee492462f88bdc14637ef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1b8fafab62e79a2fcb14741ab3f69b93d22e36c6c7a7c30d0ef28340af3f3e3b3b3f7f5830fb9dde221ef228e83e0296c8ff209155b765e758dd238becfe9b7b6efe5dcb7fb336f33ca2cc469d63e32be77b261ca60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 373d78eaa714205d05e8d1cb92328ea8c989feb89b5a91d5610329bdd55caa3855b5e599bd8b449cf657e9a9648dd4e96ee23f924e2c438cf815d8381da79693211a6572c852a40c9f4ea093415f8294ac2b1be5a4e8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2553f6c075ba9ab1a29bd193b90b1082ac12fccf0a820cd4a1c9c64cb33046c9096aab72a32323ab1fadd2793ba1489747142ecab4e1a6d057aeed6538c830a0c6fe4835df9f8c1e8e4008c940346d9ab2ba41b810c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = d9a29f96534062ffe0b0eef5e88d906dc12ee95e07836d4a9668aeb0ba6fabcf4d35140e6f750777cee01a8b2a2730d2f064b0163d21ccbcc156e2be71a43d741731f77159ee1069ccb4e5d005adec2468eaf4a0718000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -bf8d532307236739a10ee6183d5b146fc85c52cb0c9b73b966608cad0fa6f6c38bfa3d89f95bc36446cbd1212bee4d8cbd48210ffd64602986fb911a30afe88c6f503e4720268d312b295ecc317acfa1f2fea6d5d638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3bbfd53592b98b09851d00156e044a6ffa7b6d8d2db884c542650ec7920972906892370f1ecfee76a54133b1916375977b324d5e58badaac5eb2ae1f30d37ada4ecbc0a417ab7cbcb5f9c3a33ddd5e517a23b515fee8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2dde93139f4428e2d8223ba88c5c8d58f3b87c67b816ac6bc9381088d07a34a7bb1a7bb2446d346683d1e92cb833d3f4283a3a8a4086130eba056996374bd737dc7e6cd02cd6b1862d45cc84f00cc665e209f86148180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6aa7efccd5de6028042968dea5438dafc98ad5769dbe38e4e837bf76342b060056a7b80d2d38364fd34849b755bc9d0378d8e3b981e30c3bc06f523124c17196fed96833e20ccf7a7974ff47cf593f39fdbea8829bcd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6e9a9c3b31623a0b692ffdd15edadd959a6e5ce060e032c40cea3e3f961d09b4dd197d67653de83fa01b829655b1187e25f44273610698f4479fad75d061fcc036dad02490aadb64465c3de8580f30ee78d6ed7c67d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 7394cd7462e9509d6a8fce359ee763e9e385c838a6b16cd770e9bb80ba418cf86ec7b6c9f4c9cc1315937f2716994469d0b196eff78d7a123788b621d21410183fe45574d9269d6c89536e4b59ca0438f13a6378762e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1dd24834865964b50cf58dcd5cf46c098b384a9b6028eeb956a8a443ad43a14828c7c92676e6f7ef63c4c5f2cc8f99e4062230c8652ad9092ec2504681164af2d1432b354177e71bc184e6b8522c99f515787b305ebd20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 16507f631d982ec900df349e020d3f9e57475455e7716a2f6f2dc484d3b6e1d61b33696aae2ae3f994bb5f36d9e2fe1f73b5d8230cc9d03a3db994a5518fdd6f4ceb160d2c32e7d10ed9a0c0d7604430e95c0fc9c89cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6aaa1c5dcfff985d9def276f56d0c9ad406614469ef5bc4c73a2f233fab44442309aaecbb3764e3ddf35d7cbfa5f526cbbe9b5100728e169821f9ba5ebd0270bfa92f80e9d28067a7d5d67fc911aeb2810e3434d072580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -138881bae54de0424acd0559ff2e63bf4b859f88968ef50543135f7b8376dbcdc928f55673b83bfd266bcb6561de1d8996a83f50202ecc49b3e6efea55a469eb6fa7db11565200022c0471b8e3da7553327590a581ea200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -249a13ac09651f7de34e6a8a302fb588e921cb105529a36df666348a66dbc98294b4d6b46835fb70b4db277b79113f686734c9c0d5a9da9da5bcccb18fec120734bc5d3a4f104985778aca40601ced9e4ace98ba9859480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -be98cac1edcf987cd441d237edc4daf1b57c9f1b50e011be93330846275cc5d26f215f37b58be75b9bdbdf440eb399907393dd7c1e8cc42e1647255bcd9b7034053e561156d55781169aa94d72d633dba26fe25a1796900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2f7484b05f2414dd9e210ef92271c316e07a18eaa419d4c7bd6cb90fa20d300a4dae75c3a6639a2301d6f0b6562f2c1cd68990689221d825a3f602ab478c99d35bd603ac759aecac16686e54d6ede79e2547e85fe426d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -245c9e8c1d735f3715411b60098140bab483be2ad048383a09d1f014d6c2d57acb490653bfcccde001ba89eb6a865f711034562359243c7250d01791cec395d63f51193f76b34f81c5ad5385de9b03cf180a9857d5cd6600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2b95d2f3d3d1a53a05453c9a0911320cb2c9ea97df2c36534aef2b26e3b4356432213edeaf6b36e2aeb98fd7d18171a76bf57bb9a652b03574ef853eab3a5b6b4e454519f547b3c914720b4d6bba242b23c16ee105500600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e3d475821180f325b500839b0aa4977ce46dc38aedd987a6abc0617d749497fe482e7897f221c9d0412ff86c5bd8ed44e7f65565e1f8be94f4d0ee3642ac6fdfa919f786f28961df56569c96beaf66f5e682df6c10e40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ce135c130d080b81953876c1d1358c002692f7c1cbb6fadc13478f54372e37050cb1e7adbeede5577b03d0677131703e916288a17c55f9e0734bbc1556b46a1c41bddfe1af201f55796187624372a2484106c1d222443400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 13ddc817e8da56185590f0595ceb1c17bd0529db635decc778616444a37b6bd6505659b4c5f13791427606d5d48a2cc8a7b1f3fc826e79995f68a00073b239875c7e07dff950f5d0b957aceccd8f3daf529faa554d51c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -4c120d967912b508ddf362911588a0e2f20a1dbe6c775d6e85e53eebc3c82e7b00155828d1762acecd3f7b61101c2130b26cbf87f25592e0e72c18665469fc77b986ac29dbb43c73cf385221c5f1100b73d5826705ce800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -bf87d80ecfa743e30ad71c2b4bd5b9f30ef99fd92d7bd8697e13de0f7bd9020cb1d793005824b858912f9446c91d840a5b069f5643ac1a3cfe0e9d6015d62a763ce2dc5801800d11c5b5f9b0315fd13d0f766d61714bd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8359c0a16a774aa758706606f1a757e327a8b7c6245926518773108ff49f99327168cb77efeda7a5e6e5daa20bb6a2bdc2475645f00b0d55edd9f640a4567bea32f7078879e0e5f6c7742d712036129fd1f59ad1ba2319000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1af1170f831b1d6df1d541930d4722cb5acff2aab852ee65d8fbfb41f405a51bc53923c7e9d23e90653750b23ae57f72a860bebb62885271d366a09b1e276552725b7714d1766d7256d281954583ffe88d261c44883703e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6cbff5902b5e3a9d27eaaca0b5c6e3f0a109d52e6e03f4bded3bbd90a3c9863a24077540e08c1d6fcce57b8c959de5ce6b9e8ab6b2669a7161f692f641be469b78f5eeaacff0c483818290a38bfe4b56fda79058f3abdc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 58ab783f2626df3b6b5ea8905be02d0dc399dd94070ee8f78e1f60a9206b8ffdc0e7aad2ef2743c98e5130cd06ab42420256042c71268e0276c0ca236968fec3ea157a0b62ee413f741fbe1e92d01c7577553406c063fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 39705b212d6825490e688cf40882909d44ab287fbc4a68aa65693caa41817788e125df8551e314572576eb11f394b1a4454a13b19ed94400d844792f8e8477ed5494c86b4e4116169ebc56b156bfceea0ef9224cc5a8cb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -15e7d0eaeae0d84ea497197b475e3409f19d921ca5a62634bf91f844bad33db1f6adea5ac767bc138497c5e4cdb370764ea20e5de01e4ab757fb6c060b21d830415bca22b31fdab4f28db89c174336cfab15489b11ca18a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -4b9fee61cd0edfdbe38fa31364ea859a39958cc0e273eac31d350b341006b26766bbe69396b3d71f73c059308fc8c7baaffd8caee7a44cec6b97555ca969e3a1165950af4aba5a119b584837577962e491166fea5f18328000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ac58036e4d17768d24e52e49cbfd1d3a909368306586d302cc5b1358a5ef45d7747293f6b37b847431b7344af2fe5487d5344630179ac9a77a3334e91e472bbc73fbf25dd1ebe0d50d2f024ec4a9d02d18868fedbb8de2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5d1b1996e0a9982609e92443e310f198b04bd7c50fd06c0d81d232ccddb97b2ce7a0f280a5803dfc9a71fc3588b76aaba221d49438e499ae9ca12d6eb390014d3ce471ad0b6f54c80057da114b100b56a08fe97233904c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1abb0c7b0b7782edcca259569d18baa90a60730e526ffd73d1ba61a8894cf6d98754ae47f633c0816bca7e6eb6507e13b5bbacd3ab5012f226403bfdc651375b7fbb196673be84799032adb9496df0605cb0121d0e2220880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -36c704039a22cd123acb30f3c65c7a02460496bc2a0c074a62f0ed8d8ebe49841b00344e9ba0176237cd8f7678f75f9f0fe538e9aa3292957b6f5861a89469e77ee873509b44545462fc7cc3b3377ab9721b89ba845105460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -97ae9f7662b66e3787879fd436f7bd3491256a4d5c770ef771a7d879f54316ece26708d6b32f11d2a582a84a0e7697704affd505c72cbe17134a8f764fb3ee784e84560d61a7e32f8615c5d4f816c5a1c84eef4aebb8f7b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2692b9dea6f4699c2241b8b9785d1d91b23cb94029578be122ebead429633e8cf3d31a024a19688070f1508bbfe6c45fbcaa40f28e4f195bf1430a9958c210dd707f66fea0128807eb6a5189a60901091c7e306af3d13e600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3bb8f2553741d64887a10252471fd0abafd5507c2c5931ec65483cba44c3b308bf7bd0226187a001b583e6065e6524bb2ae605c19a4ed5b74c2101c0ee6a1849096f666e1292988a6be056ff29faaeb52b452e2edaaaedec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 26195bff1962d7095654161685110b3b7c98d96ec68a0d4c61e592aca7d1b7803101a152954006142abc41a30fbe9cfa862a4809bdb5a2e643f9fc2ea41ee43cf97060e05f907ee22703852404000a68734edbbd223c336d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -dea436fb593295ce6ac1f98dbe82ddfebebaf7053bb605dfaf1dc4190d72b4168b6c0a89c4739db0b5f152818963a4ce4c4feb65f9e4644eb7c7bf4a94a7f86a3e89c336a410d45252f679faab0220f284ec585fe126906300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 7ae8150ec0bb43509d44b9b227b1a6972ac317a0798cb685a498bc6d81c75f793c64d0cc7612103dafd1fd25e419e397da3d4289cb2fd78bb328314dfb3000c1853dc53831d405292e3e7d061404b9e940c4bf5bf921a8e700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 572dff70f9565cdef3baee92b85bae80a497379943b47a772cd05c02cb70086aef3e8d36a04cacfa25f2df3c7860a3c99a67f9bf639607f6da1ded03c0ada90efecf76931548f565178d61bf0e7739a9b5e4e3bba048e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f6a4d15ed8c23f200f38b7bb6a7b164383bfce93a140943f0b8fd33f0f6272c69ccee7c5f0a583d8a01d31eb76d2bce20b5f7790386a8ce1898580dfdd82d71fe888f50a0f5043a2ae2338d3f9422090a0476f10e9ab516e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -87943947a84725ca5f5c55421c8bc6deca1208a70e544718bf65ba0c1e0d58c764882c40e99df44f4e8cfe8dbf815a66dfd164fa8c4d31dc440dfb335049f5055eb1d766a596b9a00be5195891b609746d9815821b29ece3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8f7b4f38c994be2d302ce9f40b6acd27cd65be901d06044dd618b95540fd75f031b86cb765989840507b9d34e6a08b968b8267572981fcf377ab8b0fe4176eb4c49bc10c4efcf341e9e875dfa441456fbfa91f96e84b6895800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 37ce28029446158d85509d9fbe6f4c2ae891b70697142aa1da15e418465ec0e7ef5742625a4ddaa01eb80e3caa6d1b890016b16a6236bdeee46a2ac5aa67226286696e1abb2f9eb43a4c0397b92f3e803e381520ed1278389000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3df0ae605bb5ca01ce32946837d2cf32cbfe538951d0c2c8fcc5066e5607f07e44bb1417c33eaccef4444b2d9ef863f02f5f6e86e6d480760cef96a6ae117179dbdb65f3e933b290fef056d4f1c4f8e497eca068dd9a8a74e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -a975c5b5967997e6c2e0f6aa92708ec0ddd56a6449dc36302290c005cbcd4add07cb3aaaa66fb6cdd6d7098818d786e30356151532f320e47284293dfeb1324002066c38f83492010f2550d8155e9294ca5d216d5c759d4dd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -acde76463f45766f150af1c277e208b64978adb81b0a4417bdaf39907206006006ff63c83a5e76284e9e17edd4a1fd6bd3335a2f8f790708e6b978c7fd74648c80d49a95718a62e3d31dfff6c5148bdc6ff55fc51c067e248000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1a8f950d7b4942a19b317f7dfa0b2fde73b0f76c1925974afc030d571b80d59463ec04cc05a19e999ac1d459a79efe8b6d9dff2987ec242f5b9a9e743cae516a7a2ce203ce567737b0b2a322d62f74b4b81a043cea10334222000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -112344a9a2291430050576f64b2356fd166d3f744e07e01d8ce299204363a992d9c3a031cefe5aa386a0038167a6eb678e4ef471bee816b7cae170b77eab8a816a7a44a5308ffa25d779056482be3e6632d6b561ed09661dd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -7fef15bcebad90c173e70d9c388f6de08c4c7faf327d4024bdf03663e5ebebdf9212eb87fee654767f7db12253b886a1114aea52ee64cd9818f1f2c31ab4c01f8d2974d30b70af171107eefacc62ebcc138fa0a380e4e91cac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ffbffc4c5e59201892b86b5d49a0669e9577a70cdd02a17cec4ccf70b14eefa8a08123f92f0f587b33355c7259e829973a625ff507a7a69aa5ca19a25a2070504eca038a1b41fbd8bc1c44c4914dea68ad06f509efd0c85d54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2843f64b7199cae744006ced88703dd09701a13e195e1d19f44270fc8e9022040f83d2c2e764eb3a0728bbfde55be98b62002cdc5f8968a05710c72aad6459ae264147127ba82e1d5ffbce5ed1ab4aea8a9a871fdb83e5fbe88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -16e65cc197373cc8d78b87281dd7555043b058abd9c46f3bfa307bfb51024fbc4f31cba7fcd5b5ddba1cfc132a02251f7d708ee13a1f265ae37fba0499f49b4d533d9099e59b01fc7774de46be34a3a81d5b6b64046dee710b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = cee30c89fb65152e2445c72391aa4f8050f4d7e70938d16e433732e412e97a8c26f215a1accea3ea16e6507e844b203260d3de26ae9579c2f963ea4c7f3235ac94088db12ae540fc5efaa13129ebda722d91963e2ecd80b41d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b42cac9e32f6114b3ecef52cb041e4a0b758991d73b56943d8d33d48e7b682a1a2a923d502bf2ca80106a9932b45c54bd574a0216558df261a669461a16e0c03ad7b9562db420297661a9ab2408a019557288b7a165973759d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2e2d22c028315c78aebd3d5cca19332475e39ea58a9040ebc7ce50476acd753124b8b7e663443f64c8d254873a621f9ec356aca49cf9cd7dba8f14c6dbe6e481b612e191a59318a0f349340a6ba7755530b1621e4ef66ad6bc60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cc3c3dc8625c08891cff45f3d5c006a6871e537b4ee28abccd61551922c01b26a0395feb78b740fedb2560fc8b9682954108c2005ea5b4b947b3db508a216a5f0672603df315dfa060bcd3d1d91229ce72f8725e3b8f5684da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f9b816bbe0d61e668e3a47a3bdca69a72358ab50386b98d6307721e99c5ad006a8617f84234b346bac7700627f16633c3797da2ac8bd29136d02cd370d3aca2bb6126784f8f48d39d596adb2b6083a26117d0cd8c81131b66980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -14186360e8df6ad149bc49de5ea2db1b688cfd5270182e1430239b423a832fa06441f30166f01c6cfb499ae4dfd406b6e05d87c3c45a2d3ea79785cfd8e037977f3927e6fd1c3cf0fb7f84bb1978f140417fe688ab46d3b8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -15a5b90ce927a66fea4e650bfe6628adfeb2d7105c1a95e7f3d07d782cc5c6b7cb6ac97052dc2af4d78b950f72fdd203ed3824800ccc9083fa3d5692d4f50caea96ae1fa4306b09a14bae4eeb8fd8f6f63480d7a5556d5ec89900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 15c139a1bbe42cde218547c5b71e8dd8b86dac18a689b30fc595368f956adc7c9aac0f244f9a183f9ddece78cfbf97f7789c4a41e6e1e8db99470ff722048811ffa715c684411086b5b744e785137a35142174c4327b742d3480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -eb1cb387acb66f79b377bbb47ce6030242bc0ca9d1bd9d774f72dcd790b780570e484e4f0510be11704c717efe2074da47eb5e140de31986b79251ed7a2db5532ae3ddf07862d45dc83e51de6528f796058d07d3b83cf02e04700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 889a8926cc6b66d214394227d0a6ef0319444d40e73016d078973a85b531d1d0df0bb11de23171504a9053ab470321f790ceb3d991291f97f1124e2c5f3363abb3766b191cd23505378892160201f9ba1effb2a627121496c3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1f92ccdf1d3d5356cf034a859829c2706a269a33f858ef1249a34127fee2a4caa4268b6d07a9750e8c8ed3b0eee64fd0d3e8032147f95b7862475232dc073c87087bd365c9e420d4336d5a3343cc42cb4a7916cc06878da8d2e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1e170e09a01ec4b8b507c267cd4bca815e6728fb6a8b110eeffefbfc861190ed74ab9b543e47ffcbbb1bb191c6a9ca3c5c94d9a98b35dd059b1ebbdaa05f57a014367e7e5268ce851055d154396891f3ffecf31ef3f8dc2de59800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -627208e084e8299bb03b108a3e8bafa70921d532130e0937038272b5cd10ebc93d6188aa652cb2fdc1c4d43d7c5191b4e6968e5a14be8b8ad860acd7bc20a399112c6ee85a0f09bf2a9c7797d582e4c5bbbcd4f9ee5bd6d29e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d96fc314d6f99c46e78db480e8c84dd0b87784fba4cd728f8dff97e130848c7f06ec94e2fecd062987998dfb16ca01d86e0a6754619614183d36489cf2727b190382ae62f67d5604b2d87548f52c4269e5da46870cfc30cbeafc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1e3cb0e0cbb78d540c0c9ae6d429fb438dec839fdc9f70df4aac779b39858aadc80daf1cea3e9cb1d3f896fdccbedbe2b25415af50598753082fb12415106ab0b8374b2cd671a16e7304b1f951ebaeb782c2592ecc84e0fe5e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -176f0062bfc95a26f7031aa85daf62298a4fde27d0d2ffb90b5b905b7d64bfb4d730cfa3ea8eeaed90c515f031f8896a2c6cfe791577cc2eb51c8841ead1e0013957fe8244474a491cc3f11178c160153f3c6aa985d3b0052fdf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c7df65a155ef27b17b02580a3a8f9b1ffaa7528c563635da28663a05b4b0f0c70dcd49c29acd0e001e3b9686f628fbbf8dee731a5ff7624377832a6f20d04cf567e5cd29a452aa72220d677729a8b75d2d9a7206fd8c6daee4b2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -febae8905c837bec5a7546129be98cd06ef61ff3fa5cf34b42de12c6fa5928b122fa8bfe2153a0258d6706341e8ff5b246201bba55938b3cb718dbfff4cda54bd4b64c1ec99944d67252082eaffc56a7f15c6bbced8333293b54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2ebbb333cf867e4655ca12e0ec9449cfdb74178c81437f2e4706b4dd67c988b077bd0c66d5fb68f0d4fdb010a1c056842b71e2d387a19fd7b38fd7169397b8b82d2a96628bdfdb0bb8d8fad429a88ce52608db0449771b2052cda000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -32020260ba3987cea0caa6c3444747b0cfd1887e1270ab0e79e3835108ea26f41daf43af7d30ed556a8a040a736587ee85e080def09a8cbf2730c15655146b169ede7b205524e6359b3481156fde7b47f97b6a6aaefe0d371d15a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4a93ff1d21a66de2a3120d08383eeb127b3454c42c2097f7f47c29b393622c61b11435789dee2b94f09f5e802457d5f6050dfb33c9170f2462d1adec630843a65c43450696cf756f87898c309349874c8c5993ae0bb6709eb2050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -bb4e921069bb3cf5362132a4e5fd01cd4e12b511c8e548dc5e0fd3f08ae4df7987fa8a57f4ed4db0e8c916d7da0f269c015053316cd7d4cb9794b835706003d5626a20437c3c093fe3a0fe70caf00e5d8f6d7f34996d17738b3ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1ffa481be0fd7c805d24e606a7d2647dd279694f2511c1cfd433958bd0935ab674fcb8176b690486c0b3d33b2886254306fb2076ab964c1f670714a337d16d6e7fae6b2fbf7ffd71de478c0a1ec6eafccba5e5082ba662c932bd58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 11426e23d21950e65539d2414ff6fea641073b87686387c46d03caa1fcb8bc498dfed8ab148d331408a55f8165e5978835477cc3fbdbf793fdcf2a359f42dca19a6d57d4fce09ed3fa87b2bfd0d63a7360c1042baeabc78fd5de88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -cb62ff6a8cf2ef4d976493dbf29de126f94b2d23b6238e1ef2d0179026f118887bf4c37f7c87716d3be20c044ab9747ba6857fdacc4362a39e7f7143dc8191a0af69091e4426f671cb8471de9ec8766711f5bc591f9d64ef2f7350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -39f4b8b2e74c218d7159cdd5e2c16e322cc95301664a6922db4cb2bd8d8102439287a2f22ee2da3d5c6b981ccb8f90cc29af5ba5a84e262007f4bf8a4f0179ee406f1a4e7a4b9c0e839ae495f3bf8d7d831ad8b5bdbf6dfa5e5550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2620620f38849f532f38aa1c65510d73ace7ac221c04ccfb6047e8707196d39c24e56a955bc3dbb6c9a27f145ebda9ab1dbbcf868c3380a8cacdc411561231d22b2d7468abf1daec419f733fd0c48db0ea046c6f7d38abaccdda760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f041c21e771ea661afa8ba9d888b038cee66b41934f336fdbf842ef4d11f1f169a11b0a82e191e98c0bf8c87e59d6852c31a7ec9ce77d67264527740aff2c9c71a66e78e1d4a48b3f782eeea61eee6d4ebc23d700b863f84377ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2e250ef6ee22eff619db0bd810f416a76a8c1066b53002e8eac726e6a47062c98c25af4350b26a5d339fca9f2b995d9c1221c50df5a4f67e169f48d51d1c8fe829f9908d9dab948f6424e8c4eac820a4582d1b67a141163a23f6b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 708378bcfd51298a2044d9d50b69ea096dbe731de46bca73980cf3f79cb03af9b048893f11a39ef19fb6c22e998569b1085e9714bf61159f443ecf13675955bb298c468d6684a90cd355b4e9374b59ba0e2ff246c51f228c752fb40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1bc12653bec9e2917504928d6e84dad306c5d86e49ce205fd41b335c0506b8f4e0da2b4a50198a657e40ee0a7023b11a36cba876da2a3f72c69d85bc3599cebf0a33594bb04674acf8f6ac821ddca68471affaadacc4ffae10cb9d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2f3c0c4cfd5d007bbbce12ee00cb238e4ecde1b1eae13d23874b760afcb369b3100308cd2dc455888792a055b588aaeb5557a7fb49631c796b3bd111b68ac5237b0485386ccb66183e23fe3996315a838fb5c4c4ab8050d6df115380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 11ebbfa2a938a95424587f8ebe271952576dc3f8bb12193f09b6bb146cc7ece4c4a374a73d2f7513f451df7aa18dc043bcd6acb7d67bd8ccb577c5957b8fd5d350e86f1dcf9b3353c6c0fb04b06d7d37885a4477ba060a3d1f939200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b6e41ea4a47addd244c02e8dda63feb1cc86cd91b70a7aabd810a32c29e0f9831422076d7905fec4f42bba275d02120f3abd034ee07fb4bc020d863b6a465c578fadd955d845fce11443a41d67b3eb51ea139a3457cef6867bfece00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8a2beb342e1d946508affd6c228151271f74a5a04124267d75f1961108521f12863c60e6074e0c9c3e15453e59a1ba55799d714f06c44e8f175f3ea7b99bac5637a31742e842e731805d348fe89dee2a82ac2e6e6211380162861e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 98e164a711700bf6005248617e7f472d322ef2c589231693ec0b8530b823d7d1a8a2e8e622e1931f9bbbf7d3b7679e1e5e97f5e22c52702ed43d08d7f432d30c94b0cd0f51f53f0cee97424a94b86e19f57652804d4760878a6b7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ca101640a92d25c1314d5704af0c6d0f5ea0411ee753588f524bf2ed4ea688949b22728ae314a7e8bfc6950b263e1c2ec1dca4e48053324cf0cefd00a3edf389ae5da607d26102e46803a1a28bc4f2f7ae6e3a08bcf8743815222f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = fb8e30e506f5ffb975b52e71d89d1ff913865c0cbefa64054382e6c350a292e0353a1dd3381e9e9026ab5ce3a6881d90927b6af0dd9d21026b6c6fb06c4b621d6ec9f5394ceed3088009a40d9eeb6b3ef27ce24933b750c9a1f642400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -d91f8ab747185d491f5facfd4610fdc22df921af3c7cdaafc00fbff519b2e364bdffe703f327a8fe26738c4f0f95ad9c72b73dc15f47cfe8955743102d16e5238f18b599da8f0c99518523dbe0ac7fc1367b978bef42733e554ab5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ad5e2e124deaa22e82ec0ed0a9a27f29030acd9c9706832a6e4e87d5cc3eafe3b88838b47a640b89df4d09fd377d6eba37b0c4a93678cc2fe026f3deb5d1607e4cac5ceaeee376d2857fd6774b11e3e5f9fb16cbf722bdbb3c860f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -fc79b17e262031dd15833c58ddc11b8f78c450f9fcd0a6dbc0d2ce62ea6e6c893763c08fc3caea0a6fbb1814426bfbdfac5e5006fb02816558ee90a200094dcc6871e20dcdb36ac7d09fb3699bdf01020ef4ae2859c09b44c82c932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -7653e247187429c972fc90c5c5517adc96e8b678f4e0163cf02e523a99d4857596a35e793b83bdd474cc26ffca8bc2539a0be5aac512fc537bedfe5fcca23cfc5d6e8bfb20ab8ea2b80963e1114967794132ad13e8a67159ed5a1c9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1754baf85f229120dea62df5784c7363dac10075f1c7ece808e530783274fc305134290cb2a88b96b9513e68a471161182a78475f5c5e6314f3165f494bf7cf4aa45102be3f8df43f9ec67393f77c3814a6af9ea33f3e970fa36daa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 731148a79ce8882c1428cd504a00d052609086e5dcc6e6e527c503d4158528ca9de4ed17feaf46255d3dd8333988106f6e4fe251f9fd602a5353349784bb0056d75b7f694d1aebc773703597f33ae978bca206de125a4ae9ee5cf1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -229bf27fa266b3428ef8aedad88fe3672b99f8849fc3792405a4d923f7b9c9675a98fd7bbf75a81901190a643b8fd8e190b342ebacf7327ab366ae54cb817feb850e4305e98dfc66deffaebfa3a06e6071e8bebf1572d275cd080ac8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f4f82601548eb91b872fd7dec3ad9099121fa8631994a91b2be70a5bd4ef4314ed882b49916180fd59e238b8fd5dff78678bf29da1aaebf5160384ff83fa23645a34edc0f0e396fda4473c243e77e200b0b0226eee9836b72fec5274000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e56a12c7078c3419e9ca3467e09c5a6ee178ba2a8e30b10b6e02de84553968d23d968f250bd75af3de6eb2f211b7172a2e09ec4e9c218c053e25e93bff652d55098c188d7d3da8bda5b7bbc7e0317548de5f35f328a14d66936a5768000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3bee937431e052b1fc6383143ef06603f9e581455edce877d90958c4d2d56152e3908ecc5d5b39c87b6c3d0acd301be1c542787d562a848b59b8b73f8da2a8a25fedf7ea1d72aa349166ede2cc7b184cf133e2c04a4522f64e5827e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -703e9e75555c62240043f9374d0e9fcc46693300ad11c95a3b8e039630046ddb7dafb42548d278fb5a09869a14dd047dbb2f0c1b9708b73e6ed2e7669771e45aea54eb9409f7f25edc46aa8bd08f5833ca096b808fa36a7bdbc6ac060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -7773cbce560fb51696b12b7f6fd5698c88f9dabf6b5bd8eb145f9e5c36bc3aba573d79888083919f0de7929358ee73ed37738788152a0c3e1a336804594bb66f331e32973cacc43a3e8b303a689bc14663e70bf9282340f777d42ead0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 38b2ad54f93f849a8bd34cb3755e74be5b935ae2d418da919baadead7826ff5a9879312d1ffad923d86e47681e61bde7f1372bfcdbab2306bc6ce19ea07d34b17d069fccaf90186e4f7f1c20b0d4c189b2bfd7e8f6de86d07c202157e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6ab0cc3d6696557965ff494c3e51d280a9fe85ed5d3198baa4396d4aa659140d3f82e0644a0f1fedff13263621054fc5e4facb7d822cc9a57d7ab627f23cd5f3a1ef481fa212ffdffb72657d28e4445b4aea06f0f80aa5da8cbf1e880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 44e5a66dc46e93893255944e55621049bf7a3265aa8204b834f94adac8077eab79d185e2bb649e9e0a34978e02f4f60b73d4d2f0bf4f288fa34a87752f12cacb0ad4a2bc20c7385df96840f3e296cf134ae34fd48a507abfc879514ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 559f5791eff4084db85eb844c7bf704d636a1c9d58f1e5eedb50a89e4f6b47696e9078a51d2a1c70449cdd2958dbb286808f3cd25897f45915259a3d67d29fb485ca1d5ce1e5b78d5ea561af84c2783269b971490365fb38bf45ca6440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3a9d11d0422329dbaf948512e81a32aabb908d9a7dca7df031220d7fdda6ab67a4058c25687ef11f1c54559a0097a8bb54e4ae2153df7dda262cd4cca1d3cc57735fd595eb1efe00db9da6877e06cf6e4f08186c4cfe5d686e2502f4380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 17c7e15f115823be8651d7eef9c13f5d8d5f88fac433758aacc8b7ecc11e3ec0bd8c1f26912aff0e7ab07c7bc0a155030a33c2de333217dfd6d6c9ae4b8e554eac22bbdd02c754ae5939de23cc73c307fb5ec6e2e8f435b5b1686eb1e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -bddeea0c88e4206a8c0e563ebadecde651dcb3b04e3f8f61ab2a311336bcf21b04f2924866820cbff5df562082da3a756a93d1bbe914cbbb6977cfefdd80f87b90f39bb73d73a094a3725415741501d40aab14d07e61bb214f59a7c4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5bb59380253af56d1ddf3b4dc715168f7111908c51f2792965b42d47fa616969bc68aae34935c87d09e39bcc6b0536e71bb50ffc0a1b318883b21a670e9e1b183687df277b8e765b3470141f26a754d341295f6d08ea3f10f14f0bcaa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -176ffba30471a011d4a21a84d423199e036b2a222e6077b20b1db68c3b2c36348c9ff95f81f642422015e41f671c3eadbbf7ed746659669144337e7fe54ff23d5e7c279caa850e27abeb06a35326767ad0223cd576b466dbc37c449b0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -244a00acbd15e533b66021aab67949020e3a8601cafb722ebc55d36127081a8d45018f722bbc47742ad82c84bf72b7680f35678dd5c82f2d9dcc4adbcc2033b0434d26e60d3935b93cae072d804de7b085e6154f712d20e69c785be46800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = dc5d667da6c9e85b93d082a861c5c5d975b5ed0e98acbe367682526e49fce5a01b1b2e2ffadfb70fb9084d68e25140113d24a291590f1ace291ce8a8f84010f364b028c9d006c1e885f4985545ee36e81ca00cea5379982119bfa77f1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -fb82526eec274be217e93176fa83f324634b1d9b2286bdd0e7c4aec104d8619ceae274d55c62914ed2e74fd80a9704c33aacaa3ffec4f68589d03fdc6caa0434055cb09e408910c70910023b1d82f724412837cb2a094bd1309cb7914400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2de934ad05815f20474756b3c2f85717f1be00847c2289652d637d0fbf38a73f8ffcd00aeff3233a49c2c585b4550d39d10ca70460e0ac7029c8d239b518cafe9582da98b645abff7204afde09fcd27805404ced0b6417d7c9bab373e3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3b6f1c0348d3c0a4d0c0646f52b5adeaf79c88f61569ab369889aa6c5b731d1d1d324ee58fdb87a1f87e5ec60dba0f55d635e8d9fa857776920883aacc9ca153ecdf15595c5a0ea971511303d503553ecf0592d66ac22f6f6aa48c885c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = b6c90f3e40d7a466d41897f7ed3ae6ee78d710c7ee3e930fa401de421c268df7e8d7b69ddad045cef6c5284fedf866912dd410055c581e6aeb5f3fcb6e3ffd939e61700029b18be4573782a112e527804abf08ed4eb2a42d6d698dbc05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cd3f2ea827e1f8eabd900e0393742414ba74b46d4bb7dfa0dc56d7de632274c65ce5a0fa48b6e4c996e6fae90f945465360fe249f2104d3dfff771054bae384fdf331cc70db6a956bad54695eaf99f5b2c001a7bca8164a0a72cb2ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 30e82e706f0273a0e4fb7ef1e9821b1c2e9f193f4a28c834febc4e64e5ed1bcb17afdbc33e6fb85128e64343c5609e800f0109d500373f9f92351a9cd6b2c2b63e61169a61c2b11b8c3af01089d42be8e9675c9cee9e567159eacd02f2a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3c492de6709eba41562d667c39f3bfc03429d3581bcd86fd0116110d7376566ee6a4b68228f56e0b14506a8ddfa2bcce6613f46b489c179489edb05cbbe46ba9c43af1bf7b1b8feebed2725b16337736734449b6dfdde208a0f74cda7ce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -71583dd3c2931b1a53f012d87718b0845f1adcf635c15068ebaedb6b2d5ba1c96143456d80f36cdc6ab0d349f732cfcee630eca6c2e74b34f7896d5e432bdca27b523ed1fea698d761560e1961438e2372fcf249895c290c393c2f8a284000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 58ee561bad40160e1c25a07509627f6b2a2b216a6aac780dd6a0b1fb96a952c9a1db57c67e68c43b31888745dde4cebda2a7238382da57831280b6e8031defb4c8037964a8ed5cb6f883193fa6bb8d8f2661a28eb22bf7ac8906268df2c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e2bf4577765427a8c262efb64728d773522abe41edd099b2f48c48733a96489904672c350c032d141a5acfbc17b27982fd5bd5b87612347dc6f4d5ca63f9ebf44a211e67d7662f0e041d072d95771ada24c663fde7e1176d494aaac9020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3ea2ee00320ed584667b69eb3d88220349466eaa49eae784461ee5b9036d03c97f72296de6de636ac473155a58846c05e30a00887c87dd0174e21e63014fd202c5d964b19b9ea460cf1d3a95b2a314bcd845cf369208a6db4c27ab019fb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8172ecdf5c96c559983fd7fac55c7cd22599fbd75b03fd289b53056a0184d4fcd13993c7b837018e11569387f63367c8329c7555fdb65296484eca7e38ec55ee5f42b21d9add1f719413d490620d67cbfe3aaa6a942763211be1f48f95a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d5cee4bdf06728b5e1446bf3740872596c1af5782617b07de9cdee60ca8124b5ed9c73b56ecec945c10d0b8845bd84c3313a69307c54c3337c811fe69dcf238bf77ddf04629ba601f08fde5b8596e5fa7cf8319a06ec70144433a7dab470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -12882ddd0a46c88727bdd74b622b47fab2c794b3bd40801cefb5f351b910eff4064a2939a7bc5af179edf667879c932b5b1b8ac74729f6b445fb429b0dea5903ca003cfdcdac0f0bc31a59fea22478b3d8f914a4bb3775ea6ae9a7311a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3def49ad3cea35f7baee23d66a8e106194ed043e6d17d2470f02cf0a6a387f23df88b5a4f13392825aa5820e917ee24c391e5da17a2cbeea000131693f2237ecac8e0c03a4a6928d532797b9b38c5e7c6b4fd17183007d156f3489522fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -bf162d1ed11ba1efbea570f36cb8204eadd08c7678d8b1c7fe97aec1c9d3372539e14715e58c5e174a6bc239b9a00970176e1227fb4293910f2aea5fbd60a3a9dd330730c4f1708e4de6dd9618da59c0a9bb68b76dbecd061f93476a13240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2245c0b428bbb83491310f6dae37f84f1b1da1681338bfe7133e11b731aad31e75887be98f72cda0274d17e121f2e740e11af0fef50b4f557267190b2dbe26a1fe3694213255044a3efde98787977606bf311c06d1f7025a5bbe3bb0efb40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1ac8774d294a39567592998fb574044219817be4179174d06d19756dde64e762d9ce6293953492804dd1b252f0860bc588af89bec1b55218f744ac22a3b2bbea5df38e6601cbdae7cf3afbf1fce2da9140b86584a9dcefd3ea32f63a7ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -29fef7e0ebd48a9139cbbcab9417b6e983195b50860c61a1992631d48d4d0d2e5b44cec6022fe639b6a0ea42bec0e863684a5ef5f4b530bd387e660a532dd1d740ee262464c7739fe269ac071632b1bb64112c75cdd5ce0ba37c4a3bf10080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9a36a56c7b285f02467b76009a67065e227595767b882e99a4d6aa5c92903bbabdd941221d4adf55ec4200f58f6520c2b33464e17fd6a86f94eb3e5d86da317b3e0fce355569e42190cfba437a47be56ffe0da27ea023e39eb0ffd738e6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -7ee5541f016350882ae0fc0ae71cf61c318e9b3eb0580bb4af5ff5a4d5d9b99800b203bedc038f2f5bdf490da44169fffe9f5be750cb1a36a382cee7ba91a8b6b75c2ac21d3bb259aeac762f704919737a623ecbedcccbd1f0a25277d93300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 32de2816039a3d1c677ffd174e2fa9241bfa8506d78950379b9d0e169da53366626c05efcb23954bad12a6e5b692393154d06edfc893534fbf999e451d3b2ae02442ce7575293654dfe4640a5673620b98e1e4455d1b253665ce7a353a8b200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -187268daa035c61e091a8692e884fc19c4f534e125922a3ebef4f62128b7f3ed6cef16212299690ca0a91c61310f13da059fd75f706e519d237ec3713cfe8f4feffe377ed15a19deb7681d2fd3483aa7ab44b74f96205d42621c9b99f6f1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -333af4e0381c747386422eaea109c3f9af33e9a1240dd93ef9be946921281bafa54585e6a02185c61fa80cef74096c13655c1c512c11bb699cdaef0f2feedd6b941b89ab7079f4e1f3af86e4856030a1670689db8dc9a63cfe2745685626c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -20b445877e2fdce05616c4f870c2a6f2d99cc0807d1cbb280e30d73b6b5b0996c8dc964e29d83b70aa5c1005a2ccaf29a582b1f25e3ba51ea8a7cb881cc97a6a1319184f35a4f4f504e8fec3fa441750c771d5938e3cf31f49df7123bacfc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2250dcd7e20e07d81f659baf791f73fb9bd74b8482732694232a81baf27e141854512e3762cf50782cc5b1cfa3bd99aa19b73f10d388f6d4e6f7fe7ba5ad740b42991ad3e07f5d4d79180657d005368fe51afadb02f8dafed50f5402e715c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2e07c7331d689731a8e0d70a4064345a24fa3a35ebeb312b5c46fae9db03de6246b42b9ddca2f6add61511470b8dd9cd40e47f501749c59b52b39acd45b433f0ef703d1d01468ab8ca291b14df66c71c20b624bc4b2d1b4770cec1cdeb3a1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ed343bbf0ec1abc725556dd794248a92fc6db8866660f0ffcb0cea3a67bcc1fc71a4fe5d6629848e587bbe95ba83aaa2fff2ba9472d8d99ad0bf72cef0ed1703b2d27a507ba6688bce5208719b6c15a9a34ff08af5acf5ff944e1bf8ee3eb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -702a435e8cf5159c586b0527f575f1b4c4949136136ad991a82361df0882e47893d1b2b7365012f9547a9a9f4a2ac219b0a240d420ce6c170de472e90d87c96e47d6516978f8aece35dc111c9725368b792a5071f1cf523bf1d9c127c69d7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 290650e83ff7e5914b0f4243a4118525b8a83b7276e012607b7f83ef918987ae51938338c590e914dde3297928ee78654da94292fedf680fef8dc79a079c0b9eb690def3ffce21103657e5e91292ef4a16f6bda98e46bee70cfeea32012bf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -13570081a8543089733dab11992f71ad6850ac82e52188b4925fa6b78cb57aaf94627b14a1a79b8a62adae538c0e006c19a727a690143418090c29dd7df5a8e34805ca0e82179414bd20df2ccb276fd49d4955e5e139a0164308a871864ea6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -def1909e0def73c3431248f36be6f531965e32c79c3ef2719db948215344b610decb9a827af3dc9cfa4bdf915ce15e95822875b61bd6423e33ff2941da23342130fb5f4198278cb757a0784d3078178997c4995bdda25621e05de46c1fb18c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2c8351c6706753b037ee6c6c685c5f975d6ba8fe0c4783560881d3e1d159dd902d30fac3b1069f434895d5940e1015e251f453ee6b21f52b007836c489e581f430fd51fb5814e16fa81a01b36817ac0152ba8094e00b06d6f5957faa9b6380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1329b68a55872c48ea22489a8521aaef8283eec494644efe905667265d09592165f2b6923022b75de6a5e2d3e4e2289adb181dee6b0e8f494c750f4d2f465f251251c0cb0c6e892506523ee4568396ffd4e324b9d789951279224b7661f6ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = dca26d8c4282945ba832242622391a7227ca043bea0637f867acc7d9e7f41ba1e7c1d42b9ddc8d50c65072442d9ad6ebc32afb37c4e4cebe9dbb7be6848bcc73b2b5f039590d42700c37d33746bc140ec2e4601557da2a69cbc13015da32b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = b4c4bb4f85ed1ebfbcf6ea868d758b4eb29686aa6a1b019a879f591558edadf182bb9202efd1c7d6fa996557268b164abfd9acb22928ec4ce15d739c5205952462a603a852a5a095e52e04c62d630d0ba0f84db159b78191eae9f72a98b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 856be647b6fa7d68b7d0552288444365cafe8cc086ae01ba5b80e3e1cb421f7403c497565fb1ab1723bacffe24072bb558ce407a7e94e8750de9de44daf29fdd5edb2a683fd21367b253da28a95b7e1baa5dd9d0b2cf29cf0c9df981441d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 233c3251498d7818e8b5d65493af3cbc3412c815e424f57cc3226dbb541365e0aca544a43063300136100f3c1abf100d31ad604e9e497211d82bca7661feb36e771b892ba11a607ca6f49354ecf24bfe2b679acbb060de0d1666e57e21003100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2178dca2e0da42edb48cbd8f58c4b129b579fac0dd183ee6332c12a6843c6da7b40a3522e491ae6c08d1a9347aea875a14899ce91ba152d06b578d766cde8621fa2d4665373ad77cc47f2947e3261e1f0a81f83c3b3236547d18b844acf0bf20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b4f2db6a7ac2073b01977aed81daad284ee32f6a03e758e7d7e4ea3eb1bcdbb1664b59e1fab2eb71983e6f23e23b8b65b7172434c32bf5ea9e0e5fd71141fa6a8636dd289a1bdb853be1414742d2fa144de542eab756a5d69569ebdb20c1ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -a407ff572bbbe22828152f2153d8834546bcc12586838f28e1ed3e1ea56e2498976c6b71fe9660b0377b02beb0c14fd2feab71ec031b4e032beeb51273c91f456859254c14034ac7dfe3814bd504621c7db5c6ada5fd0dd3baec77b9f65b0c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 90eeeb459a2ba042d5c1fd87b940bc298d46cabc7acc7531e87769762e485a7f1e75d28ee85bc8268903177166d4cd7ab1fceddddbe53617d7a71c53c5cf3a62ea3cf67f09743c5fd9b49104a1af2dadaba267681e6c35e9e6edae3986aaf900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c103c35e896679c6fde7da632aba294b2598cec0c61b6306a810db9be464ac456d78cc996cda3636f5d699f480f370b2694a7c25d324b6c05f2f0c7406cb56d4d36c72c54f1355693541db3217dcba0702bc290fea8b05edf5a6733259213680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5e2694ca43b6b81564b4ab089e48ce9726ba3d02c89bd3ab7f36d96fdf9325a56c8b943789f69b20a44ede9d080b8b23b90fb5a258eff30e66cd2755132e82661b6b88ebe1d67dadfdff20193dc9415b7cee66a0df6040636aeb340c2d7402f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 509c9e73fcaabd5753c757836328c571321850078a8fc8ce515dcf0233389ccdc5ad89ac2b58282c8f62efa6205f33bf4fba817c88e519484b290ad58ab3b48318ebf292ca7839aa0acb463d89bf4bcaa61a21b5742e1a061af73d2719ff08f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -12f7116a0d24dfbf36c7f27f1d781584f136e515821d7138f3b0f7beaf533ae94f82431e97b9e663eedc754688ad5f4ac1de137cb70f465fcfca6e858729246030496e882ac3cfdba28404fb244e8f05098c0b2847aa364d02307722212d247e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 33218cc50eeedc8a2dde01644961fcc0eac3416243ecb82c9e16f36333f678e149628a33fdfa328c2a2080d4fe6f959d99cf7e55649ea595c9f4b4e2e2d1ccc1aad881ca95e8bf4467704229c16939e0c39483d82dc7fec7ce73ee025a579dca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2ceb0fdccbbcd8871c04bfa3efecc3c2472ee6c2da6a2c64e28516a78276a2b8065fc5236eb7ed07d18fc1faafb39410a96bbd2f75826b727aa90595b41e19e816d57c6ec7f0d5f2875a028261a9eeb40a7cb36948fd8e557b1434bb6ac5340800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -47b2d10570049ce8e8e2c325d95c45b25997bc9d44e25dcc50e0d36284f85e42c2455ace24ebfe18afeab2260604215be0cb4e21dcc0d6720044af7541282bfdb8f0d87ffd65f1dbba77cb762902884f285a75521d7942b8e7341cdc4c1b0c2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 15945870417135141d87d66c071ff64843aef977fc78972b461dae07fed55cfeb670d230c76f361f02a4966864aaff5d4820ffb0322e1fa761dcadcc50b00092002decec03f2f69fe96586ba3ee81f9e3d52f6b1b559b9a610631e95e33c0193800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -369c4d93f4809951579a687b29ce5cf80b15b8d01ba8a80f08e78149a78072cd13fec4647bfe23772b5f3d90090d9687e3af33ba9e64e5957ae52e81a50e997cf0cf8ab8ecfd5fba4af61c7785097b32e399b0f29f02bca56aa4d3c3ce5df6cc800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -37723924cfa663c4a474d19ae45b8df78a144f121cde1a8a5787e89dafdbe1e6d569b66e2cbf279f24aab934ed1553f17c645499e4364067f9affad78b9cf034d4f2d8ca3c8de40ff34f20de5435817f0639fb3f29c414e055acfa0880f907c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = fcd4c8d320b3cbe048d6af90bcd249e4270834cb9c71325dbf9ec912586207023c7ab2a7bd1ecf780b8f565583b502e8e30565cd8cc51e616156d0d21e056e7d94536123d7520c4de93620c93f3e9e5493d64bcfc07774bae7c366fdd94bd095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2f31962b30cc655d1bc8f94f1cb9a9a52891555c5c2f86f750d5edcc501709887148d0a3cc6c598812e815e8329c48a90f2fd2f914eae22a0d7da3cd0751930a16c3246c906827d80ce6df7b9ee89b1d9e1a71b5be3c60abf89662acb58863626000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -eda66584390f93a64d7f37a2aa0a1d0b037941a87f240a0d4afff2e1c36e64b5f395b079d59849f1dc010384c20538e760797d578a862cfe20cd644fb9aa59bc518dff95eee494b0161c7a011cd22fb3dcbc80a15ca11d3e84542fa58b4e9f48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6be528ea05e074191f330b8ffc0f1085a69af967815c66d648e4f761625e0ea3222951cc05c4ef7e9da38db78c976765cd8cfa4d67907d9305713dd564f82e7cfa4d3415c6f9cab781f06d37d68ce02492ebe0c98964b14ff09c420f6322818bc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -701ca238852c69f883c6bb2ef22899f21fee5c19833f0f17ec560d05c90be499669a80ce040ed937425354fc6026c0a75494dbb21a550e9b6a96067ddf69cc00be9391cbca6d2e12854930cc60b9637489c7832619682e3a8501288eb5716c994000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -348153335172302f58f7e0d039f6d0746dbb8d9149c1efc4318dbb4fedd868955a69d119e9db77645e9e75eea76e12553fb2e7454d5cec83523b70d2d390e44492c74d269497338328d0b36922fbd36aa259a42879fd5b6fcc49cd366101f0ee78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3c5c339ef9655e870cac0e565a7c99be763afa874d4ea1a902477044880a048e5302064c0578d01d851b69ed314a84a046ef7e246b4c8422ebc7883cbfa61f8be565468930181ffb1812edb4724e9bb574bfd8c5c08ccb5d33f5d4b47b180db148000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 174778c27031459d2f0183b715463d3f432d77c694b5946daa208e881ee0c6854dcf0c16db37c767246554afc76ac95225b2ab99f736e828d45a08469ca9f839ba63fe3636cdf567a578ca4f363f05e658144a8aa9250e37aacf7004716eac60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 85d10ea08ec273fd8fcd400f1ed35c85a76adf854af66df819966b8f77ecacb97b8c7d6e789227727f4b14e543baa0355c2571da5d68cd2f8fa4a5e2962b4dadc9de001e3ead8d93a8512c8d07d9da31765187837ff94589c86d949b92fb3a1bb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -345c89d5b89fdafe9e8c160ec9d54677266db1382e561cd3975c428a6639e9bf61c6ea27e19cae37654c392b00cbe8be189be4ddadcc17354c4a4b26022246fa452b1532e29ec25900e4abf5c0e158211b4664ec9fbcb23e4c6f4235ff9b08674c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1060f7849fca647cb08732e04e11f9e896208edfc2df7d416277faae0704fdacd41d262d1e0aa4cbe5b871e1bb5e7f58c07a32aebf77ad4b3bfacb723147cf13376d5598759fd222ed7ee96a87f70d1ac617f10078d41e4c4caef666a0a4ca3840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -528a2082dbecf2380373e2a4b2e8a4c441fa77bfccc72a0d33bf17ebc6ad195b1096d85ce91b92743c4263985e808a8f69d8a595f3eb49a3150a182c3b3bfcbf90bd676664f4359700c19c4102fd653d9178e84148d439ee575ad15de39082cfc40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -9ec51cbb9af1225be617cd1ba85a91b51043229a51f3d373ebe404c9c0918fc8c0f64bf27a4a9eaa9948af977e2833a6e08af634285e2a815adbaefaf71db314e49ae54c0f071cdcd43858ab352f468d8fa76ddc29a048afa14ded9f42026510800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3c7367bd9ec918898e9676feba4ffb1f53ada0be897c1200f737d3dc9d5b0ac0fde887bb3f8b6bd70bad1e40f1b729938c09b55cf968c65dfd9ec07c1d6845e5c9cd9aef2d00ab04df04ed5cb529df88fda8bb7318f2e207027aa419d403dab65c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 76ad939070f8da3e64545fa153f7c4bbdd070bd87910f493d36bd62b89e3d633d3fe8f4e90a79a8df31889706e10c6d9229560c5fcd9bf60dec0a8fa58c0d1a33f82a19008f0f106b76c287a997ed7fb6c5f44dc958d0ad6ad5df0d658d61eca280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -182bcabce488cb1fbe0737d1cec48010216270e17623770957906cf8eec670aa888b69f38c066ad73fb98c44a0aede069d149c4d567000866a305cdfa03e8bc1299574bb6c62075f6cbbfdd9c0e17c6cb148e9229de52d709d8ca08d8485be740300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6290e3354c63da4be8a01844c08c8507b03600335ef1d233bc5be8c7204e56fe0d4ec0619b670970d3bae8c4a170f1ceb7a10cc18d5a4abd41f2143335cbdb9be037815109764019c514ebf6914d9e445ed4b56ec0cf6492504f4349bc1882e1bb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 358fb85ab0c854becb2cb8dc040b9e9ccc4c79e7d2237211aeed6bef754c7c37dd400dcfa41ebd2694dcde70e143816f4d157b6da38f0a3fddabca0542768fad3ce6d1e92d317c06d35952f8829388b2be73532e92833b6d46feae4b88b204aff1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1841e62e10b52e10bc4cb257e6a45c50caf8534902fdc2e37821dc9bcc77b998fa4d3a878cf92fbaad180e0b151ed68d190de57879a5b3dc66fcc1db38d78628e833aaf5375bc5d66c9573286a84318fbdcaf8d331c7b2bfa9c7b9f45d5a4d81c9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f4644715809c37f738e8cf78760a4b9f09b9ba0ec14b166de892874d35b97d4cb9ae5626e166a0c96665e011403665099e0beb1230c8bb9a08f6f0cb7dbc33ae38208e2ac278ff02794676976e5925ef898b0bf460fa66aed7378ebaeda256e9b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f83db7620a649a31aec030e1a3224693bdb81e9f513122d338ca74cc10baaa5697236a36b4f03f5bfa4684c3d0a18121f8a845041411e8443c1c2e27df844d2077b4b5d02220d739499531d8c0bdfad31621f126113380b6c22e7457b02c1a4ea4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3db77f11a1fe3d39f2a2768cb803c6ba90fd13fdc41dfdf3d119718c77369f0b6156f4799bd5098ecf8c2019298269488e4107f746a884cdd78b76359894e3ba71e37c4f7940b263517541ac18ff13f440be430ceaadcc4e4f2fc402443eb8c6b43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a8a2322e8dde877781c34540afbd57080cac39e603c6db37722a89d2c8a24fab5feb42f36fd0569ba8a74fc94510f27bd24a9eda05375c54d45d4961c3b6d4ced2788351c8daaed59f1d465ca3cf269b0f7e6afcc61a68d56b925f5239e928c0d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b6a299162e1d87469fe3cc592330fcaae818eab17c1cd26c3424165cef08d46c6f21f89db9ab2544ea057713901b0a6b84a37da9233ff64be7a0b71710455ba29ece4078bed3ef1ac23f8e97555bb2e15dc83d688a7d10da7091a859775937c5e46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b0ce32ec7a0bd9198184c389a30e643395618a66871d3bc264afaee7be6209902fc11e6524b09bdc4800169f2130f410e055af44ed60cd9026abd6a194d5f443583684583d73f3d0ed4bf26a10e150149022c5e6a576eb0cbeda5f98d63ec6fe6d3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -239c2d4b65f1daad4e8d4fd63b791dc3c5bbcdde63bced68c92db76dc6b1f526c19db38c66fa90755520a64dc0c0f73188dfcb6bafe6ff3b35a3cf46055b5ad00fb4dd5c6e8a47170e93be2379b0696de9a4c78830294dba7ec7f532afa929c74a2c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -9dbc75e308a087fc00674d142e62ea6106379f089edc55d652405edd9597210347366034ea2c3c613d281a28e8979a4f3420e2f3fa67fc0a1390ea6b0ea5cb247d371209da6a9b76d0997ab010f64a9e9016839982b94463308e2cdcbb4fff96cac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f5f50796d34838c9d4284f31ba55a6b61b5394e1a964d913069873577c1a6ae4f07f156bb01393391c4a69719ff0066d070c9394962b1419dc50639ad1bf7698252822df61bc098ebcaa665ca841979f37ef817cf1825bf5396369ce90e6cf22a9f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 72a9dacca5d4c46b3d5e2904802742af901c27a9d964d10f2533837c1772b133950b48beddfdd65ab67e3c5e3b37e5d7d3aa7c3740f786b3628820cb6242f45c9c750d80df9f52a00f1e3acc5a6c07bb99be3da3106259cf75a6c26e03a73a33a6e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2d99dd1ba488127340dfa74e6396636381c3d5cd35c8def1ba0887ab4e7a46e4d316f12d426b535a2d0908110a38f8038844461122183883f0b130be2bdb8a73a20ceee467f9757ff79cf4e3b851d2b6a6cb9d7aa391117e51f7dd4aa397f188d5390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2a2fd9977ba3d1fa68155b53aa70168bf10bb7f8c875a30ecfbbacc05d15bd85e23c788c24c4a551c3f66a3aaf40695a84c4d6d1d2bbe5f8218162beede02aa50432cb19bfee7f2abfae44762dbdae085500884c014d76f613a625e2cf78dd0576f28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8900168a6b2e1a6d0f765da22d603e19355cccb9a093cd9f3aee4d0e0342c12d3876091525f080190e6adc4941e48f202c4a4ad1b2b638f5ad7e88221835feec0cc2a509d36108c484133d405e5afbafe99e827f1f2142fb56e0623741a2127a69a50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ab7308b2da2035eb2495e92055c060034311eb7a31136f22ea94a44857ca00d89189b58de23db3f2d52e8997fa49e725aca8ad548c55a1198b5a9596839af0594c26503973c4114fc431cfb13c85884a36323070f10a57dec788bd4205235f5a98c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -90f7301ffde3ff2b6c946950a434bd24d3b79815d4a8349921cf9102210896f989fa37184e6a094938d25303c7943e3d28101339bb0651762c7414321cf03a40a2336b730f0ef231b55ab1f5b911b2b3fd6d299cce372589c0b7fb6f3803d221ebda0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = aeefa1431f2fda3b5e9c275a5c8cc9d15d31e0ba5d074245ec5bf8582950c835343b104ef7ce8fe3cf2dc02904aeeea117e6ca72d00640209b89db3fc626d92c37de97b90a2d5a28630595003ddeb1642cd64a7dec8b27b418f69dd7cccc00b247ec0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6218b9908879c620cba99e46a3963b841c6b5666d4258d40cc9a115cb86fc9c72c09989d470afa3ff623edf687ac9a04e07f04e7c27efabb85b1032e4daa939d0a7d469f470e1125594d9eee6beb7dc3652379069b546b1f24916180d9c1b0de7c7cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f92ae6ca3f155b7adfffb06ec5438b3233d621c3616177139e0d04e7c82f026f9755fcbe730f84ac30288e73f66ac2f5f23add77baeb96af01dc9fe9e8f3119a2825b0567bd3ca16bc14fbdf619f30e64fcec1f095600d444f5bd6a7677b5d037065c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1c11650033fdcea3bf95007aef07ca8858744536d5666d5efab80521b378aed24a0f95435b48613326563a22a18b0b96db436d86fb460a84a52ea26fd2d6b1ba38df63f07fae533536749c59ac046a1de3c1d3ecb8ca441a7237049de20ef5c1956f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -92cb76ac6ba76c702c314dec921969b56b67c00a2aa81e8071258d3b5b5e112497e386285334ef32d8ecfd0469f39462da7eee0ca138d6ee5c4785d279958718cc7ead0b436a2c1f7aa95bec896bff95710e3cf67da513826c06dda0dfbe4e4cf67080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ec33007430ea1267e10db2b92ae44554cb966759304f20fcd5b7dde74add21f729153558fd3c348f5fd4b2976c887b3804903a5bf41321fcdc350566434d93cdae0cff37ca5d6498a5210f81481d54b20788a8f597b6018322a9380cb1f139f076b3600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -388dfd9df4feed4d48133633636e409db418273ffeeb38654d749776c22d0df13f692047c744e7d3fd97d795b8997958aa59706ad4a06e2761a2b855b7811117ec59c4baaebfcfe95a095984d1109d21170aa6e52b01e91e6af365320f631c94220500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2229102223164d17c824174cb30f462346ac439e8901a28676760b73764b42b40d404f98c07271b62bd56da28879510af609121ecc03643bc5a48693571afbb17756d2976cda1fb14b4d87ec307ba69238805cc347b2ad386cf10130377e8e75fa068800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 36255773bcc30d813acef3752a328978066cf259c3a125bb3d302734c7c2cd3981e6f17ef88c1851dbc2fa9bf1efe18bae8e939133811ea230c57dd0333da63563d217467b75779366801d9a7cba984bf71a9b3646ad4bccb9dfcc845518eed4a0d17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c4897af4a02ff65a0dc7b1ac4b63940e48bce3b40a89339c54622d3ecfdd93c87f55d88d41113c1271694972396c68e39bd81d7f93be7db24be0110eb395ec942335f7fc5fca0ebe79f0aec418009fb021fd68e920d6952d8fc4f9da4269a9f1b9aaf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 427668db6b7fbfe0fd19e58b124d64c69bf7b2d60c2901eb51d0c8bb7dffa8943b01a01cb91b8f8959cc1d32e1fe5102ce4bfff05bf0f35807b9b19a85127c8491622e5e3b194b62373824a689f82c49c3be71898b3f3458b29353f82b86dc544a7b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 96183d0ac2676abccf2ad89e8e3e1013175661bd88504372dd67d03457b8bc21ea399c9a288afeced6714a3264694d20711467f960ed710c396fda8b474929da06e69ec50fc611e7d86d46dc4e4215917b541f90ac9882f14adafab154557e88ba8a1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3c230bab6fee63ef7ae7a30c3e3979e420164573ae42e98718c7c3dad0a68dae76c7d166a27812adc09744ebcc14e366374e3b224a77ee7f77fe1565573616919fdb9c8c2852c988f6c3ca34097bee43cc484ab66d8e2ea87e43d121ea0587010c8991800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 27ca8b71f57eeb9c5ac9f5652901bfadb4bbcedd802efc898bbb7958700180f4263334be98b73483de82f619aee3906844f69ac1a8bd224aea6e3c0af46d0ee520b6e884a9c1cc61e7e76910976bd7b1ad21d9d4f1821180854f1d8fdda1ec32a55f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -bacc3a682bc63ef47ea5f8646944aba759d2be73e2622bfa78d8c06ae2015f5ec5688da4b4cba07a4693323954b203062bf4ac3e380558b3ab47fdb07376aae56dd469ebc6522a8d17311a411634a3520da55b89dc3efb29f77c1483767774eba12e46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = cf5107ad84f9f26f817c3a41a9a5745b42979a9ce43cec7aae33d753de7b2122afaf68320a01d296d3944b59baac9758b092298e0c47febeebf19146f5808721411be28e3a301f8662b1ade319ce149dbff9e8aa829f76ef31702dc2bde6e428ad5eca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -35bdb1fff23a1b5d296acd34f0695111de9a672a7d582e8428eb078d9aa6245da95798777ce60a7396528c402ba9f884857444c14dcb0a1b5b87833229a2097ddbf83089346074c555d69a3b8c72287b31cfede717a15be5681ec384201de4b4dfa7862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c82f082586d4e512568eac540269d9f0b3f44f1acf7308640532c93f04ebbf656663c87005477b9a32242c47f769f7379f56329b4e8f7603421fb591e501e6e095fa5d3eb94df1f87815c8cbb359943cd23233e2d845961829781a863c33de0b6dbb754000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 4a893fd44907aa2c3cbbee27e1c3a5064c3b05316acbe23aaa6b413867c85e3da702a25a7f63b8c880d2611949ccaafb5fb62cf71ac961310ffc8baa6c929ef58738ab5045ccdae9b281f1974a9680e124311c1de4160a3859a332f45417613fd8c8134000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1b21de02e0d0827df44b23604af7594a7c14dffc0ac43abf0d886ff4a24a0b0f3610366f5ed0becdcf68d266592474934f243c3a09ccbc3152b0274d422e9c29ffbab5c2eeaa8200ff98dee295b552a7c823cfae391209bf4cc1eb8e021e8984f943abf8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6baacd8f9b961f37b77a77d3b78ba19697fe49ad4c3be55160682417d6077f8f784692c003ca5d00ecd33e2d395aafe45f261405ffe2450409cdc9b31be03d56ba4c29c2c762a1e82aded3d9b4f734e6d87f0ea8a71af5739245f8466e6004bdb969f88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1827a65803974cafbbe7e9096500ed68b7384a73a3ed589068dcceb5b7237e90b29bd6e6c8b71f642517a996f6a44b96fe8fe5823b09d8ab42a91fd9f2b2e6b52b7a7b047860f8ccf440c7c1f15314176cf32112d3344ab6f4a51b792b46419107b8a1f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -40d2ae9e146211550ac9d8eb7452bdd6c2af764274154c0bd218c7af79db3edb250105538c0a91aa4996be9f28cf135eb75a7551fe80b2ad616cd9cf4d8c2325363f3025549f1fabe9ee5f1c1faa1545b01800f5ca2241985ffb29576d2a1761300832c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3d6fecd381b02ec5964e3ff5622f141e76bdaa365f661cff9c4ed8667fb5df6939c418aac64e45fb92bcbc81fac60c901d0f54ae5ab97b1323de87de13dec179d9535ca7dc02cfe19165de919a61913ed4d2cdaf6b273532c02fecd64625f3f24947e61e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2815dab571ab9e5105e4f155ac4515bd9cadace83520a699ccb1ea007eba588c25e8263416b2ba3bc11584c9df75d353a661ad3b5b4174e8649a142debe2123bab65adde6d163b1e91e2b569ee1acf470e9a9764eaf2e0c7dc3cc26652016a74061ee2620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -63767e6cbca76566059a5635257695cc885ec41d0ae06bb32a7a830e5990e59b946f89c158d0e7405d014b5d0b39dc727bb039c2ed49c822d95ef1e3fe144c9fb26546c075167885f79dd02b999502db28fd654f5186d4049ece73d1ad463cda9f051f7c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9550b35017bf73abf5ef3bee12c31405706507a1618fc1c30b3fcbefadcb336d24b093990c69a9a5a3596d0726987d9b719be25e5f1bfc053620392d4aa68e634893a0354b3363253293b5fe8de1d686cf336f95e2a27beee0114f115e4179e00c0c48380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2c1549c36bbb6d17d58fc75116c5dabe06aad745da37f77edd9fbfdfa7b83fd679c7b2784508a56725d7b23e92df80c514d6e8323dff2f3cd766879a8552f012239fabca8db4477656526bf365a28d54f0547062842a9adc6f1208bf5e8d483925d7089380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 241f0a73e3c4535771f6d300636280c44a6c3187bc56599e42c5b7bcad11656be46ccd5a45743752fab7919d41c483995217f0c486b49bfdeb4b351568070c517a6a4309d2814a5613f1a390a21c4a4b714acb26e2e6a9b82cca2ed248b27b6b2d63015500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ac51bb5fcea7a2cece919a2b6cd128324b8731d67e911e2bb1bdeaf4357b3d0bba6d761c72dc74b6d03aa1185730115ef36907a9001f139390290ecc5fa9e5b600f23ab9aa090467ce686e6e344eec5163b67f7874218ecce2921f6f13479223b90d792300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -9b42a76b8d607219b208303e0ab7fbda3e9d57392659e35c22ad3efadf12e5ae9d3da407466abea031bf390346d52814f7743e7c9639e51496b2a04c4db7a78a3fa78babd374b2809c443aa5db8951040a53e16ba7e9d8958b19e76dd7484c71f102adfe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 14455bcd859bdb2f2669e8845731b148ffae15ace680990c9b1ed6b7df08cfa1565fef003034278188f2c0476bb455582ebf71e2897fe339a8598977f7c1a8ed8146da608ee51e50569b6645d32365186a94ae4ab2b84ee86a4415f3d4099e6e8009365e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 7278d021b9990f34730a69ff74d6fd42c516325429ee995ba4c9eb2f9994e7caea70bf35c90225bf598849c77300f59a3cb72d472cfc00e7f5c05a42609c1b3dc81f895ac07e062057e61349d85cd1682e6bcee197607f0c3828a1ada4d5d34d5e9247dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2b58b20f6e868514fba7c2ea38955cb9a434c9b65ac173f2333cd9de736258c1f172cb90b037bc781421d0e0f4e03c18b4cc7d572e26f49f4731d0e35fc60d1fe2fa33ddfcd2fed53cc1d4360e278eecb7f1a190094cd8c58bc1d4aa3eda09447e8848c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9f18f0984870e1f06ff505f4d3c817bb71c6347cdb77659e11961ea943aa82a18c7fcaef20965c12a510db349f02f4ccccf701b6ba022675d2922e5863160852f9467d1f8f7fb3411379c5ae92b8411a1d33fb751faaf012c3878bc5e952ef4f3d540c69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -24591f36263a047e63e9407931a0e0d5c3639fd6d363a3cd563e948e7d86905e20a360c89565d193b0e0134f9ae57d92a511ee47dcad40a3b70c7d5dd063efb58ca04b0c48a32d8508e0db79d0f88565e16422308f6dae93ee5bc74d38bb06d52f02a1c40800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b2bd6a29e62b438e37a313cc688f8bf4f021b101620dab239f68577c75ad531d6dcd83d395c1060fbe63666f5faaf1bc86f431cf74a064a6cb7a245c21e65c3d10481c7e2a73743333220899d6084dca7de98d3fa0dbaf28bd65093d474fd0d713fe97ea800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f9002fc1495b75fc737f260f72a578901eda7fe42590cce518e2f0cdeac5c263774e35b1f5323dc96ee376c65e8fd2b13a8dfb73416fa0c79b4333ed0b9f539eeebc8a727aa5f46f76aa33f49bf664853a4e0c14bef19ca7cb7737edc560a3c3c64bd7d5a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -303a9c25bbe671ae82b2d22d4986c66fa24410bf5821c5a42f68e6448d634a53ec02898970e6765dc523297100e13c39a5b82ecbfea974d47eb3dc4c57d629c76ab1dcda79ceb91d64633a5291789a9a46db67e34e900cfcf8943a6c3b583d6c75a039034000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -316c0a67cbbe90d211a29f89298d739a62e56c12afb82a7c70f10e60c1ef798b8591e46fe099a7dc111616ccc8453b743fccec10602c15be98de04cbfd44e2a40c6b4ba25aec7610ddf8f4ca154de0e34640cb3542b10932cfa76f13df0e2038707eb1112c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b143caa2c95fb2b3053207a7a6eeab2e450a6ea81ce7e7c90e2b110419b0462031a4404bc76e5f74f266c0d3e11901cf763877282536026421b80062631ba81dc7f7149084d27f975368f9072eb6e22e87fcb88f521e12166b5e04a1b1c0686841f847f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e3399f452e38f640c8cb7141608b26bbd2a37bdba335c93ef3b3682c59b793b763718dc5235f395285c16220b867ae3922ec0662e45fa97b636c348b78d87f72dfec4e2a0cfb9217b75d51459d506e5f79a8b96ad67f0f7d19c8100f152926be274ff08840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a7f72c3d1fd9bf95fbd88ea9fdeb33f154364ea9749def1d2e756d60737f7608ba1c052d700bcf7bda2d62a0f2bdfb878ddb30b0bb5c8b4fc3c659c39eda3a7f5ef5024e78d5912995691e8e76bc9385bf01430b5ef7f0e6d864b7c6cc04e49b4f5119b19c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -108d2613ad737d4777012c0695576c50cad9939021a86ee0828d2d63eea1cadc8b611b3df9567066556974b7876a45c1506f0b0e6208f5ae40a4b2cebd9f4684cd68ca62dc3a689cd948222c1a1cd1c94ded0f547b7f4df4d7750f1189edc9b6d2b53dd9848000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1e05b1530d8bf7c2defc9e7e7629a930620ecda096f0e4d4d143d6cb309f7533fee6cef27f01ab528fadf155e765bccbb6ded36160d86af98823ce8af95053a1b31c9e618280ae4907392ae961d6bf334c543f951714249b343fd6dedfff3336b3a1f05b9f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8287c6d78fc850948a8b859d82a952e7fa5105e5017f4b03dabe676179b35840c0bc46feaa5deaaba3762269daf1a1fc5f7dfd940c4758987386bc1adb248b71619da4983895dc9a4bb360679cc5c588f924f6bd9aa68e5f19946f42cddff71effe0ba42c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -dcfcfc2895cea9933f44155ac194cd08c758f1d782db2bfe2e735422a9fc1eb20cbdbbef2a53f338d7ceeca0602b97ee37979c352a265814afc080456958806b2af6bc57e0ad438d540a8242c70b363fe1b00092f408f4420c7bf71ef3239e7988854c35170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1e47a407be0f7169fce6759446b0f493ec70e7092b750a067d1587bac5a97672d483f22a2202007764217f4d483e573f80e63cdd8e990dfc48edd60ede270027668a37a53352c4445fdb845238a4fbcd72fd269f091c34e712e5ebdb94ff2e253a5cc5230fa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 292ac25244b0f53b51ec7c2f35668c01ceecd26a90f5664e2cf6f80ced3a8a522e08989ec752b27c8fb5a2d11c6885ea34d05fbfc81a75f01b3eeb64a8274d39f31a14effd62078e79b80e288f7e03cbf0814ace3d1e44eeb4853867d42bfc887bcf883dd2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a66488b2ad4a58c69008db1d7e1c3167f48929c3e389ca3e0df34746e3b7f386497b53ced76fe64e58705f9b28885c84be9fe88242d9197f7e195d008df59393cf0bc016cd28d07a90f0c4a8ac509969557c3cb97f1d04a17ace5f2057f5f8731f688facaac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c9b91dae70b1bd2a897ce98daf6ad404b1ca7c813ac24ce8e2603eba99cb50a993198e582797d6f573ad5e8904a60e3ed353384069674f0993cd85247f0d58de7622b38d894bbc71d137d04bb7f093ec5358b1e997fc116477b18d18a9695990d0b87c3e8b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -12c5391b1713cef8efb49d7012c9413ffb9675c51ef0cacf4e54a00975e6e99b87d7519eb3aff4d492a2955dc9c8b85fe35200dbdca2a9ed3dbd9537feb64aea465d1ae521c384086864bf0319e3a67f27740826e50f04f458b9cc3fa3acce84fa1c928496200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 32d1bf67427c0203ea32dcba2418476b090ac77f152fca97c24a4042c38f67c22dd8ca138a10714cc26112fb090ba57830257621cc404d4a72bb2c410977345c1f2d13d3063f293e0ceac3a272ecf1ce2ca46683e4038b0c94786385df861637b7af569104780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b8a33bd840c1c9f71b8cc0f6d70dbced1355f94b82ea7ccfcb40ed37674325f1443154bbd9b5e7eb468b0615750ee57cb6d413a3b46c7e3601719f9bc9b09808466811f58f5d805965e3eaa2b1789c9f2b85583fc024a9babd9cb582d84f7bf0548501c1d7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f7c14cac82410d704a8e393ed7675df852ba5ef876606236416787d59c2ac2f2015ef864bfc4a50950e7590e812506a61b64a620b8db13bba1f1c462a69edfc043102bc1e1d4b6cd0b98642602fd6b4a2198397fc64c6559de897474502ee0aa82153e47cdd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = cb79e6c821a3eb0caf4b9c81984b7cb1bcc3c5f27cfec1620e668b7e3b852b8e41a592592b24364a088efa303289220b8727cecf418de1ee6f6c27ab0c5595417ca4c0f06edb0195e4aebab5f377869a1bd6b1de5a02566f21bcd9903a6344ffd0791e7f0f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 546d24303f14e36e51b6277d5177d38c82df3f2a085ed5c477ea335a3aadef96281362ca40df1a13e3c0769d24485ae1e94264af546071cffb6fcd815403f8083bf079a8b1c7322cd45a83dbaaee0ce64a7067becfc9c0ebb0be660777af4f4c9f076a5c46200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 5d792063f8750453b7bd95919505f1f7249aa7cdfa73adb35fbd790172643cd70a7164167ec3cb7a2347012d88bf3de5138e0dfe1a14df2f8b5d44cacc7bd07daf1c75b5d482f5a89b6718069e2982afb6dfbcbdb290312f8d5f5034561ef4945a43aa409dd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2779bbe6064a68c056c9147eb8f5e35cc4486df2c773d391356f0b5bb98eb2528388db7213c2cc0b1de3a0df94ace76dae5f07a3b7ef1141893994aaab9648277a80f4beea60a5a43d85bab5097a587256a47ba4debd41971dfb306989d343696da0e2efdf9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2d09c701cc3599040b108a5467287a92982450edbd8fba18c57e8d067f2965cc5b6928057bf54f7c2bc340401e7438af82cc150711ad056a89f50a6b2a868a2b3f8c709adc67d007bdac07a8566b13ae805295bdc71dda99eeda422216e04c149abf7a57165b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3d6f585d85d68f31bba0fdf03d43b609d0781e064a04d2360b73100ec2fcd81637b8c1b47355c53d4d8bc022c72d2d0c7eec6a5dcec18e596e687f7b7e37704339d0a9de4bd7b88ec635326e87b555a8973d80ffa9f753bb5875ded595cfaec781aafcdc4018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f0d6bf3b9d5e925cf8ba2f1a6d1fb5280610459229a5344e3105d9b0c97c23a0947699969a19fb443fb2fcd9496024539bfbe428638ad739a82022b36b9947047e343876bd29705fc614813d1000c9bf575a2b6f1563749c2be57498fdf2a3f04ee09c3c7599000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -39cd23197ca389b3d97abc764cfe722a5efecccedb0081d3f6b1b093d6586928d7cd7aa709604b4bd3bb9b8f0fbd78f8297bd4b1a82ee91481f6f2c2701cbb81ef8e2fcac9ee2c3e2138bacc1198fad91d1e655f4450940d71ccef3d7e220a8529769782baa2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2a5a1d307dc1802b8c100d5f3a744798ced9ec8f1aa5996386c8133a7ebccdabffa4c747e41b7732cbbad4b4440827e6b4114b585303839b2e37e57b4236b8965c2ebbf30f53a289b935c86e1ae6f26673a1e06d16470d62ce5504f385eadd258ac129335aa6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 27d309bd2065de0ad84cefa4bfdf0cde6e9677ee9dab8e185c06815ebb9167f2bc1d7306afb916293d12d077dc801a6f2de541c2212f01645b6ba23b145bb8c3716c6dbbd4666fa8c9ba47687da2b0f9fc6d68ac3ff41fa9fc8009e8f481c011c1299ada90842000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -47a155dba7a48d4bc07511d43aea7f21186ef9cde5a505a53a6d19b7475b05a4f6220b2d018143e82207117693643be117aa0267d4d5ee370bcd05e7f9d8006e7feb9db80d716356840edbfb7c98e2e21f04deb1c6cb5fe8afa02b2e6f7c859cefc29d2239e8c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = c006c6bfbe4cb7e98bd98467d59824323a7fd67cf5bac0e365dc1d752955ad1ee00ec610e9e5a726c672e6b08221a49fd966de9364e4afa10d8abb42ef310415a6729cf0ae084861fbe7e0cec5e73662fcbf7be72396194fd784887c2c46b11c5ef08ca660974000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1be9a30ef137efbddcfe98e216d66dae4fd854ed95de5750edaafee2fa55eaea74f347b6c544c407511059e8a0642303e9e42d3989d26620c1baf4099d8c1f8412aa49a3268353503b912b68dc49ec04abc2f12d329a12a778b472d0642b30c407ed3bf84193f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 145351af348641c30321854e83f0a8bd8203b6c5e337aca47fd3a0bef85f5f4c905c13b4eaedafc5349319616ebde6ff49c49bb00ea6fac55fb883831c03699bc2726d9605e108f2037b1d7d9b51983115b45bb793fa2cc001f98746d923848d89b93ec93d1778000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 7de115d59ee283ee0744a11f58fbb46bad7219be452738dc4ce4b2f5922d27d862ad9125641e042465ce2f0edffeed923175babecb97727522feba2ee9a0e85b1f3d2d676baefd09113ae7ac3d459f48df4681837235c082d837ddb24fea0b8d2130e6a23674e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -75a05703dc00042ccebc5c221b7c827561eb30b866670a68eccd5eb782d2e23c5a8247d235d4550085c61fef51a26d6b3faf36876aa728864a4fba6a6ce48141e614d506a3461e57efd9aea708ca21006a1f97d5e280b5f0bea6ca85eacc14f074512d6d44d300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -33673f6487695a596dde400e28f61d692a464592004b7b0125b2e14858ba92cb44e99f4e5e8750853da0fd714d73034e3c2a813ec16a76412aa2b61232d4e6955642a853b120d04725b730d853d9db40cf721a3738458960d98d0a896276243639880723170e5a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -12da5d15fab87d1bd39875c099e8a4dd87204195d787ab0bfe47fb39af46e3a71504e3a6c1ead891066e2f7587f021657964141fd218e147f34608404fbb5b58935287485a5e2ef76b4afa22c45bfa3de3d47af6589dc2276e6cc14647742596550a3f6529fe2e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = b9673e319d9a47b0beac9e781f87a4336502b4ce71147e955fd4d22ef664b963ce2fb2ba480faa45e8ab65967767cb011b03d1312515f2d9810e5542e4cb6e541b866a1a226d068e490e4d7d2cd8a5eae6d13c4c0dfcec696cb2a5728c0726ed682e03ee9784040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6add53fe3f30b30c656844f7289209822eb04fa7fdcc3774f6ce5729021c8e4a4b4bf59326d35765a5f9fb22438b163cae61b218d9277ee048751859e0c32fee1ee6312f19c41630ce5cbac97d0d72f8b2bac796a59df56895cb8e7f0462e7e07b85dafc6d937c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2b62cf6c6346350bceaab2ee3c30da733ad4c9be74a93ee12c12bad23a87a95975f5a4b06a3f1617ac4447e87c016062e1dfd0f6934562abe458fcf5daf99b19f8e2d74f9f1fb76ebcf002cfc9efa729d42b623cd3e9a85bbd2248dbbc401e6e108e94760a4e5780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 14d318cd7fbb31e6b6d5c34b7deed20db517febf073ed9ac52755c0a0c41b689c44974ce2a332db390f9a725792fbf3c101d15aad4523565834c8c8965293b26b991b181f7db74f5ca4803fe0b7db069e811a52a81dc4273f71f52bac04f2062e0eecb249a558a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e18da8114aea706a97e718f71821a10d9bfc5205092e840a46ec257a6fcab4aae5b573d89716919abfb8d153a0e28d5c5d4555c5621d8616f07c9e8eed27e8db87b83818fbe6b971b5cd9fb13a66377a1d57486fdbcb564868251c5cea0de98ce1cd9a9ddfdded00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 88308b59a75180c5f57f4d5f113fee356eeac5294178ba9f7c172e16ceeb05b19f6fa15a1ad30ecb954d7451cf1772a6887b2279effd9414e0c25b2871bd92416b0cd5eae0bbf38de38e1f195806a236f257431d8249e5d3c81d559bfb5e795cef3d7308d4663700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1caa7db6d78c4124636a5942106d71d0319a0ffde27017b91d6957b148f53a76db77a6edc5cd24b2b3464f1bb84541e52f353dd2ad75255b42357484e3c37b2470336186a890340d2496011ca52fe6f8017d9b503e113c20a403ce6f7e23cd53e55520b11aa8aca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 18dfd6cfcbaaada22d22a3fe9f04cc1c5519f6882813274850dff2b7ad14413e72ff4a5b4ab11d0cd75301a8032eb430ba3a047525df31b6a992c0b75dc0ab11776fee52c87547d8767d947acedf4deb693ad8a0dd540741a61d5e66f0c0e837c244b93ee7fc4b200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ab8051eace0993c123a519a66806d70571e035136dd4e69c292860aa13767ed5fd490f5fdc498db5c71588688d13a91b9eca9a9e3b80b64848ef34310612d134d1c1c0b7a8127cf84fbeeca99d31f2f5923e737b108289087eca01abc60d1e731c8cdabf2a9e7ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 52938400b0726f3899cba4ed20ad5fb861efdf9c5d87d8aa2023e62e6dddaddcaa0b0ac6f0be2590301a70be0e8e54de82e56e75f67b11518692acdb59eb981d89fb5e044980ba1711c99996a0813995a55ea4323bcf648d6baa81c8f9ff269dc0a26f0a0cc366400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2cc0652b3f9711e848d6cbb20553edc1369aa0c89ca637429f13fd0fd4b8545c3d98f40fe74870c3813b62b2acd54f2c8f6c887091e63a76ad00dae646c0de2efa6afad39e95eceda666640955d3dbe19673177da2ba149652a7530383c4f3b3a031f99242b2599800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8a4b175b197b70fcfec3f5a850b8268147c9570ff6fd8977f890fd69b90d054fd7d81b0d48cdd83cb38f0f6be753784534eb214c97f7d0358e5b6fd6f59d1fb1d8939faf310aa27ab857bc66fa7c91e50f4cd378a9a156cf82dcd9b6e74c154b99237f69bebfeb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 5ac0f80b9981ba109dc14caa5c40e98fa2b07250624d97028a6c721f4eefdb8dee96205b5745794db4412ed2f0816453e338c60e63c94d18c09d1920813847c356e8ed706d716181427d9dae20d9154ff0c41f3d66aa5e6ca59d98bdc8ee7710d1fca138388f717000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9814ecb2d488f8231ff577eddd9d4e55fc882f35b93509141256dbf950ca6116ef49660ec9978dd1faba92707243a627bdedc925208cd41a2c9b7cce735d88aa4a972b81b662151e172be1a16496be4c763d335d85b1351639a63a40914e020933ed7051ff71265000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3547864209d307f3c9a833236458d9ed9bacf51a171c0b9fbeeb43d7f54893ecbba9f513115e1cf60926e2c7de5b8c3aa6f2868b2bc8a1c8dd34e132e2bb7d44adeef1cf70e5be8d6d6db2e04a239baf0ece95bd6d3e7d2ffaffe9dd82906106684376aa78161556000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a3dec3f7f6364d2cb70428ec1ff48e95b8d7973474db52a57ad8e02600a29dcf5b41836487bc6ef51b8d521ffabbf2a337fc54a4d576772bb811f83e66dc64ae7cbac70bb0325a20bf0b60775de98f5ba39ba959ffadee8504e8153130b87d4c523e9dcecee2bb4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 32fa3295c80590c5ec9621838936a1832fbe42ceaefeb789813875c0e071eb377593215f82c114b1d897196f7a0c79ab07d9aa2f210e44f976e5b38149ef3ac2d1cf4fe23f101b90a7c502586fc2a676ca0555889f684a25243ace84993854311e898783f27288a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -eae220e96ca097be7d9201bdaeb8b2fc5585ad437f64b7296a95e6835d87c0df948c60992571a6b2d089b7ea6131567e550d951885645abe15f37e2f275a5b4ecc9280b23e0983e4d6d7055e4449980381b49bd1f7d6885a7a146e6e0b1de735d0e9d97022589234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -a016c846c1de41b3999409d824c52e7e2b1b24adfb498dbe48715d3bf29a88a39ff9097f573cf2d62f0f4c05d03935cd791ff87cf34edbb7161553c2fdfb5b34c0505d22a3094acae35213b0eefd3b258af8055b9af2f453e176c1cb9dce7580b9f7629b42f06408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -24a4475f77bdce9c53145bf6d5b982d1e7d9156650c9b9a1d29f93bdb06ab1a9182d839695f7169116776d2bc568a2c5c94de6cd2d8f685166bc9075a1f143e2807545b303086485ce44e87fda55bb4f38e8dd0e2d9e33744a58438cbc2ff86b8347e8f73476c478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -668a14ead996a59001795556417da97b26b23fb26f1284b1cc1bcd378ec623fbf083b8fd5404a7db64bffcfe667ddfb15c56335eee67e0d6b8d6d6002bc953a7b28dc8a2031cfbdcf94e2e0856b6600bba878cb80fee4ffcab79080f48f6fedc99b9a2158df0de0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f484d8d9a8c9e0ba06264a2673264b2d18e5463b5f3e094973806d175a9ed45e4c217e3831c63b7c44134ec9270d2f75802f9cde92cbc9a0f0a03b35720002c0e09b7ef4d473d95b224d08cd6e5b7b2a3815d877e35b4d136190f51100d9484ee6355af486bdcbf20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -172de6d9e654c55e04537bec828572b7e92ff0015adf2d872be9ab8fa527f720fa2b88f76ae4c69ff76eb9771153803c7871716c6806cca5c53359e91bfb75d7aa7d086b2a921d8823190efff01a1ba28d5ddc0b4de51c8e3202b7e181f28990468b2328318a8ee2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5bca21e9aa0894b59f787c05e91280db0cf282f038aadf9505290cb71ece7882ac3a380285f93e6b68b54cc7e5db94a426729ddcbbd65f6f152fc8f2f82420fcf575dcccfb148e1d3b6bbd303ce2dfa49fc61b01f63c3b10244e53ab4f89b502313234516c13ef7c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a76a577c63bd8c9b280b8687e5b47b630574654d62b7848e154751dcac02c0091589610181ae6a2e7ea41c829ddc3dc0caf85e23e61870bed55c06e9f23db913b0ae67d9db84305027e25ceeca410ef6bae40ea38719c55005f8eb5fae95e2dd57f9182796d6d734c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6804e6939eecc434606dca268593675ef8d0ba1521cd67e7d91da8b5ec595aa7bb7d3d62d3ea1c24798dd624e36012a3bb09f3b01077411399bb22a7a4b8c3894f6e797504243837f1061f96a37c9a2a1ad447a041a5d82a35d28e9ff171752a5000c9b6bd70860340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -20928e92514f46adcf6e611946a0493f31fa73476a0ee17cb3a0035bf1b9089ed1c9aebfb750b35deda1f3fa531e1da0cd016cb6d73f8f5af19296a5925e5e0856cd229ce3a740879188278285f407ac37e224355eb7909ec7337c125ca4b6265a3643acdf738916e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2cd54b06bc1097ffbf7ad9f02559b94ab5d37ab061ac04202faa50af55f05fedec498783736bd4094057f33029203d101636f67e801e258628ebb8d24b4d8f73793a17568b957925168c45c342ac679507ea3e89fb7a617f58f74507c064cf372dbf6ebb6e96d48e600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = bffe439d2ddb42d5b241f3d0ebc715f5a8ca911237cf7f7b678b43228c3c81ba5687b40f5611ba878a46f8f678e2b1a8f011768a7d2028288f737f76c8a1863727ccb9e45c876af48f8cf2c51980e186eade3c1ed19807566693bca23114625a6a888a1cd71feba1b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5846cbf786cabe9ae1b79fa9b34c3afdf3eadd45cf60beb3fe1459c2d2a73ba5864fbb7a71fb42e5c701565e316eb3c50eaacdaf0f60fc7a4a8d27dd25e907c23a7555ece41ae8667cb9aea1c5b6ac6aacd5ab04ff996e2e23215e08d67225424af8fc9f7008c0aa500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 329c281ab4180d5b6bc161eed74ec03a993a1504195534d9d2b3111b003a3827b2e41a1b85037ab5b5e758a8a15e7bfab73964b4f285b90d43b669e88611cf98b206abb6f2e2b77f6e7640e00cef21c8e8952dd28a94698711c55682384a4c43e33348983fdd0a136600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 303e951d6231284b173d5f99a397941d46f1f84a9f8bb94c39f34a64e90fb480894e957e10a689d9b57a52bf2b151dc5dccdfd262ef21568c6b21e612855c043a848cf7e54be7dd666cad98b5dab49f14acbd9e6f53a759e4b5d8f520fb8c002f3c80eb7f3b7f1d4f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -fd7444b417ca029184c080a97da0e36e1fa574d4464816ab2f1d35c92e1fd3d1fcc6b5457390c4f7a3ed72773cc97ee1512aa0ef531193e0c32ca440570d4f6e0345dbbc8ada8642336d8e680a97924e1a0abf78b29e4e69d39cd9e8a71dc51eaf3f73d1be529551e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f9c349227e2ff77cc87c849a2d8d488901f2b9d0c41ea69d594f15d93c05e55a48a4b2beb3fe9825668e3868cad2bd850f10dfa593fc32bfd8ab2b60abf081dd5f6ee245b2dff6c52b0faa8e192221e395b308bf3674d7e6650279861cb674d253111d1c54053a9cec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 19420a3292590cb896ef68a80ca089348ae2f1d6b731b7dacc22a6c2d9a9c86ff44d2e55470113b3f4bba3c3a2d5bf57b6120cd16e2ed1fe42d1cb2a7cff8753e89dd99c27df197e71678f9b81e066f00a033706aff0c13ea9f6da90bd64af70d320af4f09b0a5a3dd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 38cecc011fc23e46d8add2c8e92930d804f8692487763b54bc9848b7833af1b76156ee9832ab2006a3b52a5c981d48b697dc7b1fbcf5697edfd883d2cc89e34ebb41e34c4ec358afcbd9c5625231db7648c25923886f97407021cef0d39a41f97721a1b87c9a9a24cc800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8d824db8f2968f3c0999036ad1923da35899b24af620413dd77e0c9097f7c5da140ad2761a31fa0725c17b10e21966a7e9a68648602e3342b5169b2ebe0515798e7465737dab081e8a43d32d971368f43f0640eaa3f141e578c942b676306afc559f54e0dcb22da931000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = bfce8af7080132ed18a5068dacbecde603fbf6a4b8067e41d73c42cc88562737ea9cf4bc7868e99b06cec5d1587e57804552089fa2a395e242cc47d4130feb3ae256b8f91b511bc868cd8f359eee97513aae1057afbffea12d6c40cd041b8bc9ecbe820af053961965000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -380c82a166d52a647c3e02eddbf495ac62bfc4a7189e11eca51c5e4cf6d2bc8bcbd7b0601c0bdeb4bcfc46637246824abe4b7c2072dff9a75be98983c53f4a658bd9b987497bae6e81c6602623e98d091fa2eb85fa507bc7dd3a019b579fb2f3bd9b8ac54247767cc70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = fccd7b313df02df309b9613228726ec664ea3cd382c2eae49dcc3e867973731328d880b686b643a4b52574812016f53564a6aad49aa315b6da3dcf6e9859580e7bdac40781101cdec50b4d20091beabba0d15c6fda0d1b5df53bb4c937bdcc1647704b81f15ad66d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8222f0be1808e2ac508cd3f424fb27ee2c29a3d190daf5aa01faa8465a15f216cf5bbe43907171f6bf28df1a82987f95a993723829735b2a078ddf50c3e732eab14259f5694525166a651e2f8fabbfcdb063dff5dcc4c5f6a3d42cfd177188d9bc70932614fe17ae7d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9f8e21a537eb7794ceb3116394ce73370ce5882bc7408cce85fdb0baf2600875de667182db9ff0485a284df51299cc1b2b2cb02dbc9f886de478f6fd9f35ce26690f6ed9019a763e43cdffdeded768c56af35edfb4443548201c7c18a2ec7a81bfc19629b6081af1d54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2dcf1833dc448a8b40ec5ef445bd985155bb85b03e03bf40c9eaf48eba8acd3c33efd4cbc8e42065b77b68a871d3c6249325d976810de86105b8ab0bb41163a57221af58ead9d42ddfa22cee4386c1acca48f1d2d384e3fe3493f79ba3b6c6a4a2cc48ae6de3c4e98038000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6eb6239c6351dbfe3c1427a949e6f993cde006191b9e66e61f57a2155df3127060ab08077f65bfdc5660e38548bbc096ed1ff9f10e1e1a461b3b4cef624952cb80b27761f70b2dc9b4aeb7d2cc4735c240863dffd1720afe2ad3903c1108f84b7e2acde57adb6f100d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6e04a51bcd931dd4e5f0bd32483fbc6bd040fb0877158846e3f80dd4d6ed660dcae2f421f3bb873f7a8f44a1e32304d73f6455dac7c01b9b41f84e5aba565e445c638365d98e19c178e30a3800b2991dd165b12830cd03743775f3faa23995c5bc2913e89b1b8db4ef80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5021f02f3e22aad67c30b249bed4b68e8c041a89ffa1c257ecf7987d3bf1fb509f0747696de11c03a374314f37536f1bd497495b3780860d53fab9b214d7f1c31a8ad9beffb76621c47a99a2fa69f1a493796b6bd1a7d38484d4d81f1cbd0fad78016249d1a31159dde0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = c31f2bc319a9229f7a0f79ad99c1210073d695d2dcd5a12af981bbf5a4ae7bd971c1621ff2176e05a3d7f1270fee4398ac23d0c0c4510e12ed74a18cd46b01cb3b3c8b5d00280f632f46127c228b139c6fb1a95faad99a0d63fec546804d4a55c984c97c67dd0fe3f9c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 390de50d178c7823203c08d0ac188087815bd0aab5304a186c56096e53e937adc05053eeedfd234bc6163e35b4064d44c55d1743bd4bafe4f3e7107262627d8490ac73f21b4d8f3c45f9d7670642e59c35fcff53e397eb51a59f67b95f97f8e1a7704da1acd516886a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ee26ab8f1fd546cafaebe1914b75d113775ef4fa553fec3d605ddeecde0aeb474755473de54cceca8167a1757a353ad64932a399a5d1d0849c27cc79018ddc6607f331610bba7bbce7231f3b3e37e2436e88683f331180cba53ed374bdec448fa8f2b5814ae8d9f8d0640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -e92a0d5646cc9fd5e569404a3eb9d8eecad65b164c76285f01e1f1f58db57e70cb5dad5007adfdbbfcf0b9dbdbc1be57a316505d031861af02c5721ce6a327e6153b775d45b0a645993c7559a904904df8149b0e60a0dcde2ec076bfd6108c7c7f48cbc57b105ba15ba40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = cc15e46f7b6f80a3d2b7e89d952273d5fbd6667a29b03bc0448de2919d02a240f119209955eba18de15c4a782eca3d5c774cbeea0f4e911d17c112c10de205f97429767291a2d9343976ffd227050591bfdc7eeb91582d11305c850922fd5ad233a70aea146101fa74380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3d848e9c67ada490412f266ab542d6576ffeaf367f7e4071efb23f868d06d3b1248277f0e976c042a54a9d82b066277f5018f1849bdf49ab65e81d15b8d9d18a584ed9e108e084fdfadaed81d402dd87c469f41eb7dcdd7f770ec0fdaff1b3ce3c1463800d85680d06e500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1841c1f36aca21c5969fef4625e95666c8b763c857846449f4215b7427cf0c0a329379851d9dd5c7fd198e3ab74b3af54094de58869556a46f46f1f936fbf0b8d0e8ead13f0b0c66a8519e3cacb4298983d995ffbe6e2ba06c0c47f8c4915e22b6021fefb5da57256dd600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6e6117fabe798f550b4ac89098f1ef357dc8a737bd25cac0ae130800e2d3aed1346b588aebf43ae66d81edfc04ab820f48d63242b1b976de120192b411608fd4297d7a55037eb6a3ff81008c2825e3eb72e9e78a24f8965642464f6b4e5c75e36755c74dd6ae0f5736ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 33ea18caa8a278b8a7404063353cd63639f5bbb0e5f8c55ffa565fb6472844cb169c04b7a67b64669a5738f3bc12a3d158b049e7621c760fb0c2124974f924373cf65582b47ff4b9996db6e9465d57c36677c5e2eb146fb0325a69921c2e380452d7144573d3e4ae44aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3c602ca9b35791da9db25c665909f7b3247ccae59cbfe90287ce59d2808e8c7895e2df49f7019c4155e74621d89c4a664476f426ea3e68c79bbd34b7a7cef9038303da48fe06335fddfb522e70aa1e24f16643938d7ac98ed18353c075dfb94d900ca586ddea27395daf800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 870f613097cd2ce78e2de57b31fbee701c084f9936d6fcff509bd844c09e36c28f4e3ae0310e30b19b2b4afe7122b2ce65b1743c14c250181284b081ef07a1f2269c73d7205aa1881346a84b96a8900229cb53b2ff281979a6bc4e60f8771950540ad386c76c17eb382c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -db5013b62872ea05b1c6853473d92aec524dfe7c953fb6f3c8c05ac8bd2d4371b44f176e6ee46f67c5f58c1bcc2a2bdd91b708a80cc988729abf9706340a9fcc5441369bdbc958c981c7a07239662d69682d073d0d5daef1ec7e7b2320954f7daad800971b8f709ddb37c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -34f5259a545cb654d355999222009f6b0ed0db6eca0a4de326ec4a63f65b95f9863f52098553ed2b8fcfcc5f948781cfdb0c274c2bbfc03f2d8c497f08fa776621ec11f8b3a49933e8d6033380ce3903399ff663089ec05b8464c36a17aa641b9200adf074a38726aeadc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 87f377e98f88cf0df8f0635864ceed9abd472c98345b278868af687705fdf54b4908c760b6b65ffe79be336c78821f492937a8b9dee014a6206263dbd661118ffcab03a3a25e3381aec56054c15f11fa6f77a812349e2d3797336dd3decd4aeaa90de160e73bd3e82020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = aed6f4a5c6dec06710bc9b6e659ca8435a97c2b1d47267969d64ea3a21744f7c9f8bf6a39568758eb337627c02f5c7e31593a9c3a2628553a2adbfec1c2d041fbf42b4ff3944fd020cdaf6d321c759c650a33793d3ecc7d7275e610402e42fd4f43a86c008a5f4b235dd7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 57fd9149ed41a46c78b09eccb53e7780aa33e335f5af93b149fae8d3712e3ae9a83c6f29ecb8b4c474981e96f5fd68a03d1c8b7f4610d053035e9cdb156d8d625de94eed3e5dd9f4d0f4b55eabc67a126ba20816f8bc33f3fbd3111993eb0b4f72e79c83d9531f8edd4c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 13ffbab01385bcfe84bac46b0df763d15685be3055745eb75a98bef405b0eb24104f6376bb9fd844000eb21a5188e2711a6486d96e9f29f13ab757836de854ed12f168777f043b6bccd6d6f10a99157582b2ebc059ce1ea27ce0d29f87aeedfff550f7e13222c6a1cb70da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2fe8bfc17764dba8cfd936eeae062b5a1bde1ba4f5874d56e99bfaffa183ff47dc8a0f4534b5a74ef0cd74c8ec86da7198efc18468d215524e3260234b98966d256bf5758383c8eaffd581d2eab4a4067b05285ef8da044d0534f92cbb7c8739a0407c70ddaecb2dd92d14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b430ae9a33157f41d8d2205a3df0626a86ad2af9c96acf2f5cb7689d88094bcb5784a67b5f8f7dd697ef2ce6b5d29afeda608a239fe65ae2d7893079cf6226195b303c4336d960ef40beba79e2d00f58008e323293d6eb005921ebd7a293d1645e6670a2180caa20f9c14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8558ef648d05e77487358a5d99bdda5ad7b22acf7bf0fc407d451ed0699fbc9922e12143e5726a26c0f61e8e7845433aaddca6242dacb62bdbf7360234f9437cf8687becc2f31d72e9d6a5d514e49eec6f97c21dfbbf47244b9a1956478d7ae845bc69c1eef5cc08c90bfc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2f6141d36d2055f8c624af0ebcf0e2ae82a83e804224964c8080b10f3c7c1100745964c5312b84accd6928e8fa1fbc2de76960ed79a1ad4998f3bc78977618603b589f6dc912a1fc58eea7368e31627f9a363ad1a361521070b265901911240153638778a32992fa2dc8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2b2879547387b9a3001ddf81976442a5ae19e73754b209bb37c5069da4327bb06c5ef5702376ea679c5d7d4d0c751bd592803e0c5bfb39d315d68618f970e58d4db24d220a793472aad694343095dab3ad5bd67b30795e821f10955e7667b8b2c5111e1680e86111ade950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6f2a08c662c428615ac99c93ebb2d2996d96d3df1610b9f1d8fb097fb44d57d5107351e2c36f91c24596aba8353bce7c06aab6e67933f5f868f873ac5abf1b139315850e33a1f9edd1ae0c161c9ab52b8a2e6d1f147c575dfa53644163fe03631ae11c69ad4620d5dcdb7b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 95909e4999716d33d190031a08a3fdd9b32d26c411601d6cf017293c37d0dacb7a6578a5470555808b2b0f0ff05261db8ca90c53588aab2733ec89c41612130b4290678afa8fb22d0afcf0cc1337f6db3d37349d3e5eaf85b9aa6236a486561fe31064128c2dfb19e6470b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2b1c0257b5cad3cf7444e7d6a316cebe94799965f22c23fad06ff5336ec2fcb4f31a37fbcadc759e32756eca7475dd7e50f83affdf6b9f1c1c4e2c7a921b49d0ccb681a0716b8d3f463703cbfec47255228cc9760783474f4fd9624e66610cef9f1660a8811d12890ccb7a20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -34cb938b560bc08e7194b32fe8f0a2ccdccab010cc25bbcf44a55e55deb351a0b1fa87715aa9ead09baea17a589727f81c4484e33d59e65ff98363e635cc31f5454490119a07c7a35cef4d6f1992c2f25ac3d836e08f34201429b8a6b7b48d1573015eca79854a54ee73b7e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6b4ed0d217d3b0961a2dd257a15f2c80071c5d5e8ee7b0c76a4354c6696c10550c170c8938897e8d61bd571bfedb0fdf2551b7735d1c24fe733f3deb867f91ce945b88d88af151a65744bfcecb0844a80674cc6c57b0cb581492d080625a080929b0dd4e79d6768a769a300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8b44c912fdd8177e662db0845b5fbf9678717630e1a0df6c116106c56d3b0c1ecc2c5be0bc8632dff128dfb7e13a374ca11a6092b3796081929243bde8393c8f095dfd0b9580a75bf615c2287edb6b0d51f2c61ffc2620f116254cf729943035c3554d9ddd93ac41ffd66e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1170d18586114d4f8af92781ed5b4ba0d3d219bf4e2e265295a34d6e28b425969eec3763948e26e216675ef3ae4102d6b4ac58342b18eaae5e92650250a51b6ac3ea4447c746cdb3d6b3427ecfce96e97ced0d3d1d5f36cf8f9d34da00857f729be2275af36dc0bdc694fb200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3cb071f495c93d4cc768e9c19b1ca14340f2444cf72e868c248c84a6f0ee8fb5e70e824bc0f7ef30ab19ac1a7254ae51916ae0fe03dda742d4da21dfe3c763c05cbdd16b93fe1dde42df4381333756d5b458a224ac1fce9510e950c38ad5f9f04861d194c8698389298450f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b56b14609d058d45a11abe2e256de4170fe6c00d189ed86d9290b41aeddbeb2371be9daab826519b141f02656666b185ad720f015be2454158e4386c9a4e23ffe88008c72578ab91caa35c18e686bed31d6da3d73d34a1c0c142dc12931de569a7ecdf19862fb8444d026a500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e6c06d71c507ad57f47997818df0dc6725fc19e1b0b0e4a9bfa6431c79737ccba7986d503e644615ef66c061cd2efa1a45b9a58c2deb95d9c13899242adad2c6b880601e4123d712819ecfaeec578b4b6b57ba12f1fb28bd894d481073621050f6614eda533da22bbb4ee5500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1143f7c83d2da5cb41a830c619f22e13a9822c6d146e29ae949bc8098c0c2444dca58c815103e44d8bb1a813fc6b43ecbe60a3740a96672f16717abe0500e01d3ca3472ac989f4de52107a9d1f374939a1c50366be5598bf1e3454355a95a97a5470eb1b1bd088f45dff8f6200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3bc31bcef7da86bffe3201ee14911374be7dbef3e25dcdb584465c051735d325a3a2b7bd6f616b4badbc74f3472411972364cb7dd627ead4282a0e41c5f3be73493b81aed61c3b26b1685c9a12d18736d4556fccd473c5fb5bdcf818a55a603ff58150c55c40a95b4fabde1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8b7c2d94907c29a44f711225c57ba1b1e793eae4be78f2536b71f77c85628d00ffe71e3dd872052bfcec4bd0c3fca79696d925c79de35fbb1751fe70b17fb8714d911139142dc65dbc22e1d9b5316c69db7725f5d26d2996948462ae4fa51dab7052e28158ded995ff69e13c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5882601ff6b14f5632eb45c5fe0a4cb3ffa42a66a2e945555cdeafe79bfac2c8f8f35e5de00c9618a95e393f96af3cbe1bcf14a606c5c1b38a549217bee5ba50414e154c8de27d3adaee2b1dde6b0e6d755b36c889db83926032568b0810149608ac89fcebae99c9a53442f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -35292784c408a72e8bde974616b78bfd3a86876e024baa386466a9578cc57d210d8be27326e2192eec0c7c85e687f3542e39d3806ed30db6acdc93d58211db96e59fcce9ba12e3448cee1e41c2ff53a9c49bdc2e72ff437168c5529c770def4d7f73aeaf277b57893fb975dd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 30f07c1ad4b6e014b5a26b699ede209cf9671724a63989d691fb9834d5e2e918c94431cc9ba0dc5e2f1beb632dde34b2448f6ece783902e27294d8a12864cd4a651fb2205623a7c853d0861a385744308ec8d1ee027d2e65794163cd1215a50ab2cc6459ff4cad20d089691d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f68cb72ebec0b73207f6267c0504cbf7de856bfe0f3c985d332d3d2de2ea141b952be33a49ea912281c2103346874109ef62389106dbd495a707a668ae69c4f78bf85658319237f8f46e86019af3142a4a0ab586d3718ba847cbf9e4096588a23daadb40e06f68b678bc92d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 7df3625febfaf2ec851a0a34d4d5005729e9bb9a1ab8c1dbd1bc7ae40074b27840bf67a92ba00ee0066e73c87f0c07193f5db8d36c3a3f8cb7edfc0e9e3889a8a37535a98635cbcbcd50d09794ec780a78bb417cab95d8df270f973af0d6447e9592b752081a2ab893b2ac99000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1097efc8d5d7c6f2221b4252446188a10ce6e1088ee0d668f465f69e6b48cf9ab838fcc5291ac14435d37e91fff27de80df864344fbcfbabe289b3dcc7bc7a04158e5248ec73ab789869b719b23500715b6b11d4c0d2bcc51dbc7bf8a955b914967c502ca810b8eb50d9cab2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 11b640d55832c9dfbf42f1f40ea6034998d1cf0d4274fcf5892ff1d5fdc7914aa039f4bad9957413060505985a55edbd30d2c8446e4f2ae8bbc0f0ce8f9c4d129d9597f6162040f4b38eeefe6ea7ddda52590a7bcf3d0c0922146e240e5dddcdd1985c7c9d5114e0501e4a28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ffb84b75b8f98489774c1f8c5552b98d2c896c444e877a2acdbaf8a11be79fdf3ffa492f9e14c0d9f78bc140c88d86ff7ff40d93cf8778e90fb99bdf320c157a192238dd1f22a1f7cd62ab0fc7fab95c7281ff9d76d2e5a96645a1a22c6b29fb5329ed1ae46bc5cbda97bc480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3efaacd682fecedb625abd6cf82d3a7c7348b2c38667ecdaeb4988bb8384c64fffd9842b4b04a51f841cb839db3067e4449f6bc64cf83d23074160e61236b3e6d705e0b75a24669f031cd81db7390f07d6e87f7b106db719a8dd0bbf1f8290717a512f7a8a5b4e54ef45e8c30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3fa7ead587d431ef4bea7ab9ee6506b0ded4c07713597ff71fc1fdcb8fbaf861dcc74a6cad5b94b308667d6bd69ebba135f4af79cce9c38108f7b8193aa23dc7db9e3070fa6e4225a7679a334d2d7abfaa8596b8fc88b461e5eb20a802e8bef620596fd286e5b4127198603ec0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -58ad3771d974596f172f5a032cc523b663614db0ed4d8ac829b389546606b9c2a6d26ebfb240d86c162e944f8f2e0995419ab72d1390f4051dc282a848f92834e2c8c3b94d3a8636ea6dbb178f60050be8b11eed5d57aa960fd895c6724e7d64ecd6db07dcad5cba8ae7d2e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 22a46669d4fc9ea8b12b7125a3f49bfdc45f1c12993b267a92a3959e129948496e4da2d3f4665a55baf27404b8691f1ad9c2f152abbb407d9ae0ec34d817586adbc0879dc780b5457f2a2763b2e7fdd9342499a9fc6cda37c670d5c7234c62f17921ea32398e21fb8740b24a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3f5117a1530fe19f0c72c3c44cd45dc158ec38a47c4c863ffa8c223a054e47fbff1fefcf39c513b836e52954ae6f1031d8eb9637f5d72efdd84056431c84b386236fad0633042d03a99f1fc5d1a23558b5d31bb213af80db4d5d0b356907e30911d626528d95ace77bf8f21040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -32be7d42ca5a16751894b1c95bc064b1d91e3c154c8a2ad502a66fe953eed1b2bbbf66afb3410d57e8477a8a64ba7d8a363c681fb655d577907bee7010f228da8c6876256c01ecdeb47ada1dc2eda32786b23fa3b2e353a1e13dc1bc3ad66e02e9f06e8fd15a2b53c71f036f280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3715598e36fb3a5cbd8d5569504b88f006ea8580850a6109adee24c91e9441a6543bcf793859588ed1e5a14882c3fd7ec2825bd34ac75055bedc453f71dd27400b2e12058eb4b864b1b70006b7d817bf4de10c7905b865e229b882d81c9f45992cceb270ed4865f4c935e1a6a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ce098754f6d29e77038ba195b27698cbf868bdb0f2745359c109de289dfbacc0ad3f205146a548be2a372521e54ffd9d29c1f4670b40ef0c6ac6ffab5f1ad37908ea7025ca03faf31b5a8cdbddefb0cc71abf7eaaf31efd29df30c88ec5fb6c3ab90372b4938d8f32efd1d40e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d899838bd351f021a5cd047daffd53ca086bdd872573e87079b4fe44b137fac826154986df5da52853cd0746fb8453729e1d46c329895e5202e45f6d9186b987bc13f50e5f6c4fa38371cdb27507a8d7a830cb1cc1c4e933c9974d6f08bbb457a2590d4d65b3bf09d7a3d98dd40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6dedd208fbc41e34b6ce4816f990d4b13be69248f672acf29c91a5d72003aa9306aa6e388a57d4a4b54efe624a218e0653ca7a46f216fcf0215ac7daa8f6682cbac489877ed49f269e158e7d9d72e36159f0a4a37ea29032a79570686f0bdb19d0ebb6a2eecfaab6b027b1d2780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 706727440c4d4be63ed9baf6c34e771f1dd79eec668804cea01503ac6160d62b422f918405fbc307c48bc62c7fbccaeaf04cea5af7214db2cc34248c29e9f8f1dad5f1ac9df635b354077a7b542aaec51639b6d690f94c95bb7d0947e32b0049b67281c6b747cc82a09504cf80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -cd19e9c7e0b76b1b1735761340a8bbe2940cb9a3f5ac378af497a86f3b91461e322795b2ae5d8798e2f14fce6e2e65791dfa40a43b062b83d48c5e09a0a669faa29470eb07f1ed7634a973a2900aa8e4348056bd83aa7676345f47aa621a809ce1075366afd13e997eda8723dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f9081f5447a033076401e29a3f731aa70323bba1673c430b4100de929ae5c4a033ceb9de35d0f71cd7296381315c6a99174664f3c04cc16b554c399484017cf512eb7570b339cd4e17b86e6cb28becf18ea8fe4e91930e247e2981c33fc8cc673605e547650af01db1792c010b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 55685bfc3211c12e90f2cf115a0516539dc2a03fcf8a6e5462e63a86f3762605788c1c59190f94825eff2397bfc1467a917bb4927c318899b1e5e9f73cad67f978069284e3b3bd6e2d1584145ab37e006d0770ea15d836e9f741e9aaaa09ae3d2c569d5869e07d52d833c94d3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 136f384e7d2dba3847abceaa491a68fc95687e047fad1cc4bce16de4e7c8e09f6d3da84fabfd789ee0409dd90df1a229dc5a8051b420f4fd83cc2b5d6483cae966a2bf6a62e8fcb125932501c2182a9385ac5d28c8f3394e9bfebb8d774ebf3334cd68c1482a67121b41a20cdce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b02f6dc8ad99ed080ecdb1c802d8f7abaf01ab37f0a0c281395e445fcf1cc4edf2d6cf5b874b9766af175d3efbbd3f0f49ebd33d80efc5b0d24c0e09bcfdbf8da58d32976278073e3f11348799581bcfc12c3284bba71a06c8e12f27958e33409c426350dc513093923f5e38d8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c3a99e0aae4939aac33aace167d91f2e7db0f7b486c26c95e947cc0bef3dbee74882433fc30bda9084ef795c7f5ed3fc11fee1e5a3ac147be653421eca5f581b41d7b4562c811a4f2cc55e95707ca8a9460a6034f61122d23314bb75efaf3b7435cee2da2e8a50dab14bead790c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2e14e0267631e868e8ad5538b27d6629bf61eb30cad471933c078015645659f479115f91c712e7337821aad89c0304f8b45b47b096a5a2e446a94d8100b266523f6a099c2f3b6052796455341431966551bae368556819b8a83cb4361bd689bacd4d5c6144fc858a1a5f55c203b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2d9a4a7ab6d210cfec39be3c0deca8c6933e60c990f9d9ee764ac8923a3930c1ebf7f67a65daa228474b3737d855595b446a31e480bf61927cdaf22f0995870ab9585ffb7d74b7c659f5dc73f7fd2161ca170e06c917cdecb98e815f310ac00d1a0b0cf49905813f2855fef040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -503eff1eaf2a8c6e37e50939ce2485c9033184fe64af1849babefaad28e1666d13edab60533ea9a2ddd0a5137649f350ecc682367e068d094e0376b1d0dc4714f6fbe6779ed0b5e14e865ae84cf5f800d376c5c3abe962ae6942b0c91174b6767e207d9e1066b100942e44152d9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cc63f790764adc9a4c23e324cbc8d03dcc627484311f3e0dfe1fce55f7d8f73dac0e9985ef28ea0665d507cc09cc8b17be3026595034ae0985a1d5b0f0e88dad47c4d85fd1cfc3dde9b7b2fc44b348b6be41d6a01a39115743c48aabeb7ac8c50edb2d806776be823d9b391b97b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -341855a26fba4b48e589edb2a4b6b46d56283cc105b6fdb097f95f4fea5fc449cba749dfbd069b6df0c87246a4ab914562eee7f42636ffa0e819d90c6bafc7106c99dbe68d89dcc8ad208e8f99b3a0dfa0a3ebc81cb1bfe8d7f1320a4f4d562e51a4e4ba7cc2a3b433364f512e60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2da609ffd63ca27be7436c6a65cb9984da5f90656c6de62ab532aa12373d9408a66fa8b37c1b5a99f1061de9def59daa19b329105971139b67fa65df0dd9e26e976a378f6ed7c840341d4f5922178dc16521e8d5591c38b0e3dde29357845b1fb928a853c4c7e440b87395256e60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 69578271dfa7c4d657d98441588425262822cb9380c7549e06562cc17c64ecff1cbcf18516ca2c12f72aac7071835809ee83b49b17eb7561ee9680f3370a1ba2cde0e0bbb32a32792a330572f231043e03fd1a3da3ed893c5e0d9c6b7715383f8f84c2004dca17a488863236ce7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -88bbe80acf0da35fffc87a9e4de857cd735feae63b23ebd0ee854a018f3133bafa5dafcac09f07c8facf74dda40436e509def0bd8d1995f25b60134c53b86fcdb76bfb5e4a55cd400183ac182f22f352592934ecf495475723327a8c95cc99165923d44ed8a62848f7c86304ad8c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 21e3cbd21746a9407f474b11d77d0e4dfccbb6b2fef7497784dc353c5fc4bfb54ddce46f62651401720a8081f95f42cfbcd4fd698edc1d51372a3e63f00471f3d8cf7025f2a2a98821c0c0bef7ec39b595fb18b21252724d5f8874e29f266126e06ecd9e58ad868a18015643f43b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2af65c18e9d6fbe072449ec5fee414d933e358b080762600aab65b79810a6404870b9d6eeebbd9bc87654a5ff452182abe880a043b561eafdf8665f7c840b8852f30d439f6a26385bc98b65e952fbc7ffceae79e104460a38e5ef4b5ee5fd552466ff91d478c715b4bd94328ec088000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a777bc1867845c9f54f2017272a2eef0f206c02b71e73b01cd0525a03b148b3c36abfa0a304f621df9d7c7ad295d762c8a149f1a501af4a6c62eab9d00ac55d0c1d771934358763f79647d90ae4fd9c58e2f24eb1edb5d6ba1b369c4ec19bdec549367616000372957a93d0857790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -254363d8921c97e268b48478c03cbc63a7523c90811a31e348559b09eb1b532c042c12b4b0f9b3fde42ea605ca7a7495ee151ebbd7ebc26aa6781295fc7ae803793ca3def6a2cdcc7b57614045c31c297d5bf1ed3e194df32142c751261d6a67ef3c512c12b780b195f5e5dec9410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -13b79d423739c10b69e8ad87aababdb3c6f6e82d05b71e51c348f05e70c8ec88fdeaf4ea57f5ec245872f50b2133951836fdf7e67cd73794053657cb6335691790067eb66b10e795ccf20bf30b104e0f8dbdd56e2d07cd97b69a3a96bd04fc53e4647a9add7504b491fb1f2facdfa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3dca046e4285490ba3eb8748c7836787165ce9f692786fbb616b9f4cff83223afa52e9f82d9313fb72a207de1384b5e1f6a0cf951bef9236de5483eeefcdd256020257c087b693567bbb2a97971d48cd5e41cd5f84ca4dae227c548fff6fb2796a4f45fbcf48aeda042b75ff64d340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -85bea6624c09172e9d5ccd5c4acc1a207f451e909f1029f0fd17f262c994100d8e7742ddc22a19c7dc1fb0c432a3844d5255ad66fd494a8219570f431ea74bf246af96fb6f06e807901006401319510127a6881bb85ddffb1ca4708dcdfd431c90aeb443bb4a2907471b618133ed80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -6bd25d83185b63c51e1feb5985b80e525d63ce68580ab9a30a9eaa67d193e74d06c7521bb82966a72ab772c1f1280137094d2b97f97603ae88e232106167cba952c9177835a450f6f9414c01376c87921a19501c7359564cca84e3341b155ee09820cecff314399322f7287f607b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -fabe09c5c0e823452480353ddaaab18fa0a34c43b85e70a218652220d7fb55f6ca5ff7fb54e055d6912eb55957a731e2246fda8b592b03362599291ea464b529025c8a0df3cb4c7c53e6c3f8baa19d726189bebd941936e454719aff59a8956c4722708035b4601d57daaae10cfc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -287619516a25c887e1fcb586d6eeabfd9b34e67c2bd940505eb299bf14a35471746e5bf4f20c95318e9da7323b141f7094474462484e65976d72ecd8787eef7dc6d6839b5d5e00b45efbdadacb6c7547487619138a8a428cf5dbfb11301368fbcedadf640900002b17a26adb944b880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f1fde2a2fdf16d64c0fcfc13b0bd62049ce8885945bf1e3dea6c16e656347b2254a60a18865b8577361ac22ecf4cfcf46e1053eb70d0d63f029be338cf0109ffb4bfb0670957273435ffa32b5f5510f60000ee2dff380b316a351bf8eb0c1a963c29e5132d8ca9e6fc3339b5b04fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 11c7ce7961bab6728fc04983ee9b2de5ffd00b284c4b64f7cca262601e65ab57f5ae8d01abc95f3bd13fdc99cce5b605749b7f039d99ac820300b36bce0b6769c861c6c86422eefa77a7627e31a93afa53b47e35690af23b24d6c89af9607416d5501bc7f2a603efe20ddaadf5b4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 35ba0ab111dadd4b8e4ef4346bc5843a12acc704d2e90f503723933a2f27a10c0a32c45bc1c4d29166179afa2cbfe0eab946d384ef075ab6ffbbc6c6745e723869294c3efdfc82e90a5f493702e940e16bc3bb7ff1bd76b2c4dba865094563b52e33b4ae7909fe62104668217da84400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3d233ab84e5fc8da165be78697a57ea8714967148c27038012e2e3bd6b6d0748d25db2fddf9e3a872a2bbd793873ebb9a8763757ccbea3a38289a67dfb262306b2913b98699968db6203814a0cc428cc36da2db073643d21f5b2f40f1fe09f8a59ec7ae1c7b718edaab3a89599f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a7d0a7874aba933020fa4fead5d9533267c8e2265f5abbabdcb3fc94ce62bb9e1d084aa056ca762341671b7b7eff642daaa0ae69c0819a39000b5de74e30a476f7962c5556253cae090ea3307a161de7a74b53b96e00775dfcc2be51cdd0210cb57bf43a0f61a967138d4570be6e8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 81b4f227068ef68cd46a0477e457dc8fd33354e74e56643c58b28d0cb53d788143c5c1051e39b81efd60787b40dc63d30e7e422e9f2b6d64d70e96a46b4f2239cbe3776b06e6b5a46acbc09d92f48f0940517b1b556d57895ea5633fba65783d0f498f23936f612b394487c148e0f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1a3b3ac1bcd831269c0457e962d8ef378cf5fac5678712a9add50533823fb6e0e850213479a1ab65ee2a218503c482b87ff705e9f2973a6faac3a34a2b343d95c3e8a0e60ce984af7cc1902510b2d4a3d808616ca8d43f674807ea5f8c47e47e4c8d744e6764f8c179bae895f00069800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2b035f783d44f9c2be5e6a811959801583cbf3204defe1476bee476d8cb9d88802644d1bed1ece498e441c8a3d83f8477636762991d2f4006f6cecc5c286463e6632cf47405dfb6ded9046bfad2bd94eab421e15ccc538c62b3d5a834f3c09332b76019d25450965d1b4f372c5b0c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -694660426b6b90271fdea8d00f80f1f1a8ea1f65f8474150e3c7960de17ae16a39c333ccb2d46288352f6bc8b6427126587a9ca9cc2ed64fda88f639d39206b388a51492b96a26615916c68e7ca041fd4c202e244ca94c9fb20a7bb3c4f1c659f3cfaa2fe6cb981b88b80ffda15e2a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = cf34f40a9164f8ebc27743c933ceb28daa4f5358d1dac10c11c453ca4b50b03b3dc0b345460f07b4940cecc3ec6feb2a3809a164d24a62155b7f8445d0dbff56d1c89a985316da745e53d0fea6dce91406c97d3e5b01c04f95fa56a69fafe96074b68cead25b011a7fdeee0d89c2ea000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3df056f148686ad33b19c955e5215f42728e718a7a2f4704dfda2b229e00a4c3c5edc97c0c2a1dbdb17c30966b759f08daa6df2d1c7c0664f6a6625a85f538f0cd94ec458f56141eabc51ce081358d52d11f4b01e94556958f8aad0b88c11e6a50754f1aefcefe40f7c589ebefe55e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 25ab6b1dbbd72c52618ec9513a62a96a58e1a5ce9a2326fab8ace8120d0f1c9008fc197896cd8c5d8567c2c74a6e8fff00f1a0f4763b2c12e632d865786d5181430c82568f14f111bea98874747b3bd3d0991eb6c7618e77047737460ba23f3d8a26d0292fff9990c6d900dcaf345ec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -a35f67174c572c28f02e923b73018d35ca5d392214e54ef6f9ea5934a2a4d77f95d05a67d2344f71dc6ef90867e39037f20dd1e778fd9203b0bedcec4466f8ed7a53c7a9e294ed8a7c59d5c574549d6d8873c9852929c62df9cc1fc120e58fc4d4e513976c184146da98b1562b16a74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b83657ec6352e5855b5c118ff12f4b6006b574e98c0768616a32da714264215e2f043e95a2566c1171685026812fb1b84d3f2d43c8f080853e11e719c3e3c9da962a713babfc633bdb0ee443eb8c33b46c7387081fd1a8dd61ad226f1437143dfffa13d3519e17837b7b6c33a7fc0cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3a0c9bcdc9c5c109abe7f838c02afb108cf7449395689fcad9119f62a467628474e608ebb4e60a8bcb19932566483cd3aac5471d51b8702b3e08b4d6b205293a6e478fc0ef3737ca15c39896959bd2c4a297742e0570ac280cc2a93b01886a4fc46c4a0b8b581783b1d44101ed049750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3a4b2759484c73da523f34bb058990633bef76969c80f0efbc33652c47a4df82368f18c6c1cce72e632987cc65cb298eb34b59c51a020873e13ee8c93d2bc829eb326c80b9001e05356bfdadcb611f24ed0ea20db3fd6851779e8f1de1137113e1ddb0dbebcf0fc6e798ff6a2ebb1728000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 884f37222019cfd0b3e2674c410bdf6df0c7bd04e698670ed5008c07d95969e04ed485c9aa8819e4a0b95853f9cf4ba1a52feda3fc7a69d27d83b6bb4adad98bcbc5a9de08b3da6220ab109dddf042a4902b31c9fa2f53e6e9b8943ce7645dfbdfbaf3b0ae293240f4cf665f52c26b20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 17fc2227e83c7ab9200e969cf23255820fe87d42f94a61cd3fbec70c2f1cc3ba8514844cacb165220336af91e03f6fcaf707ddc1d91a0616d2a10250964623f805e64057676b3e99bfe36ebb97aab664c3feb0beb4ff840123d22e0f65019be186f555941e3c51315567bb50bff16190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2bb5c756aa501a4fe3d1aef04f7361081953eb3fbdebaa25f07b826a3682a445dd0c7f45f71be2976a258840cdb562c1b0d9fe58baa533f17aac78f62175637c31d698ae4f3f43de565661b33482e3043c8823658622d78a8c64f5aecc3fb5e4054b9f92ab7d264b8f284c26103697140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3e1c575a511c0f1ff2e3196833e608616e6c929bd0851849e52389a8ff9afe7b9eb7f0890a569ccd33f9c3c1ad92281fdfd2766e26e0860a9131e8db294bbcf7e59bf96933c7967215485bc68f92ddafb77401f43ed4683f7140e6cc6919829e2092185ed150e461203584eaea9ccd3c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 64b55d9246d61e541fd63064e36f50a26e4ab65e040bb09dc45861daca52cd3252dfcecfb803404ad264e3e4bac6c3cf6ad40101563dbd852578e319b145de11b5d36c6bb00fa11f8e6e364fb17a037e05fdbaa5b3dd95de9e12aaa35d791c71ed0272c74d8425cb949688f7c61ba3200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -14c588f2889f01f081134b02a8b4c3edf8d0eae8723b81651ba68278384e78138e2d72bf43a35242e1c19278c8c38b800642262b8c53a8f5349c9b451b7c5f6faa37ad15f8f2d8c14131709ee23d652198183eda0975b12773a0237f948ed4968164c6be33c64ebd98f2155cefb1ba500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2297b50e9af952e56ccd1a7b31fce8c950e12624615336ba3aefbac042061203ea1eade19e467e966539e64ed95ce928aa604cbb09e158ad7f0efc11d5ee7409b4a5e02e0425e6da9af8cbf7581687b7cbf13d6e07af909e6e0954b8d1da782ce558866400e7b0c975dfa9905b77e3ef80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1c7fd3a4b516486ecc20c1a2a8c31cf7c9e43b810060457d160131b9db7155416b641c732e852621750094795d5e9f3fdd03c1c6c26debf477243d151491ffdb8dc780eca25a5a5f9bcc33e71cc37bdde4c666ca9e45fe4de96f292d148348d18fb0fc73a41ee72acc4ea30de8513fdc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9d5f7ff2cd0008805bf525ece0bbcfe3c2bf5b421c15870ecd86825c92f3f6e2504e435f5bb5a818afde37e940b22f1e60512aabacf949f1c2ed58b7cc53b6261a7d8ecd483afe776ec753daf940f5a62a94b31599304a8d59e04c567a40ea46152b1af09c9eecb46bd322ceaa80d2b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 713d174fd1a6531ad57142ed52b13abe49a6fb4850e930e129cbf350aa29aabd42e83440384813c83c2c096c4cdfa1d449c6c916b85e3db63b9f3ea05f914e3d79a7d54e26cdcf602fd899f2a08a91cfa3a528009d11582f1307e2acb7ffeee79f0378b53d5843c842762a9d4786118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -38081358a02dfece4ffa2c03accb9ca5788f6875dd89e0809d453d8980fa4098361626347c81162147fac460107129d6f080a0d040f1510a8429509125c7ef7eebd0f2211f375dad32e6de1e85387a1763a30c5c434fff798b86feaeb163f183c3d2964681cd004087135ee1bac08beea00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -35f0a1e1b7a7260ab9f22c4b3ee9443b1943311022b7e2fb78a2fc4e52f91fa0c8c081418453aceecdfb888d8de4288b7415ec3f72a76837f68c7bd73e04b8b20876578bdd8c73b2cf0d6b7938526152d55c1b611bc7a50edf424e18d05a2962cebaa6a4ae28c76ebd6e0e60d5f65574200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9951eb91b0e3a0ce40f17423d04923634899fe559d45318392301c3cbe9b190b4c113e7ab2a8c637f95135f7a9d0a59cfa7697069fd3de01defce4c6c57179a7971eca850479f3e2456175537b9441c8cdee051d7af3d54fec5402d2a1445c3e2bcc54338c6ab662fa180bcc5efa0700800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -801a1d18d3a853a9113eb9bf2a60f6e8db7585d65f05254f58c720e0e08a160ec9ab03b1c20827bb0e1188380c6af56fc983fadc9e3417ed9806cc5b0de400576ed675f0dc63f5ac7d22bb6277bac0391eb5e5f3acf785758429ae234347131fa1461f1c36e59442fddf40570654f716000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2d30631576c86c4193b5ad32003534bd1c8b6b9ce5128626177c14b12447e9b63e9bef78d9ed53a343bf2cc6746ca819a0298d1f5e9717898ef3426f72c450e03b97a4a6ecb06e4b90042a9d6afb42b347a49cc484efe36181e6524220fde97de41f2273aaf77e234ee57b62376d3cce4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 274a45420b1bf947b2ecfb46b52450472fd4a826f1a4172743dc9b26f72a8d30e46db4c07975f3d364c022fb996af00d3d48035b22b8818a615b2b13db7ae17b820e3c526bc673ac12c25400f459580d352a7ac7a91ae9cc3ff1e3dc8026241bbcb100c06a2b33482b0b2cfbc6cbfc425000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2428df01a7c01127ba03f512ca700ff3901a7bbd9b800244d06ba237135d22a9e2782190e6ba09f23343c4a305edca56ca4b1f3862e893157313ffe65d18c26625a023e54cfc820f6f8bac8ef15db94dc233091cd3613bbcd4e7722e65858a9168185ff0d5e1e61349b20512303accfa5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5bdd2d097e0367d68722b55bd78e6cbdadff68525c0b5bc3d5e67ee546f4d3cf3d363d7a4af8857bfc99b37bb0dc50922f5c573d988dffb57ee6ea7ec2a26da565f992d9c8563fb87643463b2109e7ce4e32664feb7ccfd7e66e7a71439181fce9af817cc023355867d708adf8ee8319f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 372bed5c443e6273b1b14ef2e5b79fc1ef08a3e57cd908bcb12cb4f05364ecb55b464955a0668a52ddf17612c2e981a239734a0820107f4599efd67f2b4933b8ed9cb7e8561decd2ffa91724851e12f881136cfe72cdb139924be23294c4ce65636d22a076b53b46e8d984a7cf2fee0ec8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e88fb24f72c462cc60eded0a23eabce7db2e14bb25c7d16c131d5651794f83cd62d6223220c0c0cb1c5f55cd4bcf28b708dddd52228d5f0742cdd0e572d2501c28654bc9f924ef6a95d5188f6f5c1e2d75524cff5635a11fd1d49684cf9203ac42ee90593dda1d55d7303fc0f6c473366000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e2bb2a187a9f9bcf0c573b8fde019131179930f8eae0288b9e1876e71c2f054e31b49040f712cb7cbbbf857f27abf865f78ce4ce534f4f4d44d3b242be8f41fcca6c20636986349f86e820ba002b300ef464484a3c40a9675092fac467169b6b81975009a88d6838259b7cdd9da86bcf4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 37a81999bd2a12c28f10b8dc2097dbfe8b26412712f64626bc91820b5f2b9aa378d282035d1c61a9253c68ac3a152b1b776251d3054ff95560e0c61d6164bbc841c7c58176ede49ee31d84cc22965e8a6f6bdf5cc13013543740d0572fe786133bf4a71acf2a9c807e05ff75b52fd60560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -de0c99fd22d3c5da7c550f062dcd1d8e330af597956bca374c4cfa5c43a8fc814c912427ab35a28e6c5603cbe4d7e225f4bb90ee4f3513100ed05909c117214e6852087ad99eadec1cf58333613bbde23dff098deb924e2af7853274ef79835ee058e7766746c39621f019e11d415cfa08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 17914290a6c82f8b1ad9becd4d2ccfd341a9d8d54a05b9b6dc435a8b57e10ff9427edb9a002031d2e536979a1d04e9904f8e8cb92251fa7a18ddc2128eca9c87e2bfc2bb95e03dec1021a680b55bb074894f41e2f65330f57b969f66be4b11bbf3cfbab02754a8c36b3e4300b091abfe9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 5f0b25f0fc8ea180dabab4831ff4b6b548bd47093164ded15ff9f7e50bd1f5b541adee5c2b6e84b3cd091e805574592a67d687c633f6a10988a3276a88de805f5861a50a07241919ff7aed1da26777843c861f00ceb8fde83dc0d9913afc438b4a06f4b8923c0f55c753ef5bd96e16fe540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c4657e6509390bf6540426d3eed52d7b6434c8f7f80fefe90c703b90eb4a7802636d260227d81e7f2e8fc81adeb27710893cd081393c43fc65259d07026fddc61f74a9a56006139efe58cea17b02bbd8f7d9e025017b8b99b4f740120e2cb1aa9458d9faac4094fd0e037d775fc0b00b1d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2986f6cb4a4de6734e734847b949cfa976042e5890046c344b764af38e16415acb81f9a2a0972f3178836ac8e2fb7a3cb4e270b021b378ec9ec66e98f5d324cacea09438ecd68395ecde493a219bd2167e1f64240657b4cc8afdde33dd7d98b9b68659b1bdb39fd2f7a072ef3dfbcdc261a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -a03bf95666326fe4c78a4b5e75b77b6eb5adf857cf3dcb6ac1ab2fe75522185578ab3299ec049c7ce352903d99f7972e94fe396c563e710f9da5d9c05b02e04ea977c92799a22e1a7ef8ca43fcccf514dbd8835b17609834626e1532edd5adff5a33662d0d897e3e391ba8919ed52241e60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b0a0116618bd7e69998c40475bbfd8ddee377598b895f597f7634e4b12973d2cac039ac295644526094aced4d38c33d5d93b132438b28caf4f2bd131c954ad67b0f2850e0548810fa80a06ae37dc679b24077d398ae872cc8d7625f3b1d74aebfb476d76c97f7f84a3d326abb6c68dd4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 65240cda16c4b490198452efba2c68ec80b124a091ec400258dda28e80f13eb9c435fb7080cd65070f489cea5e494565851491c44461d5b03e1d663cf8c1c9a6a7e491341a14513654e70b00f79a7581bd14bd1978696a33f8d4f6c9372e3f1198f7a972de70a8c528a5dd457ad69030040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3275484d39c7d7d0f1a2da40b50a70c9f63b5328020bbac6daa1a9acbfe673e891777a768b9bd8892fdf9ab821bd781ded3cc8430190fd107c9cfca9e6e68c1dacd28a35733bab19fa094e425894cf81f570c353be659ee9edf9e1ce3c83403661c9404b46ff5eec0522dc777886bcd842900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1c2bcf471b6ef6f7faa0369197318b89adb46ecda95e557ddcefa85045d13f3ff8ab7370249220203f5c67c1605723ef4ce54b7ff58e200088ed407cbf36a2079d35ae8e68ecc0b8ba15540143cc14268bb2d6c43d52530ddae74f143c0e11a01f663f3e81d9fa3587ed62a022dc65163bf80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ff733af2a67c16b051dca2816c3c67f0c6aef1e605828a20a29c11b96d84424ba668eca8ce909f0627912cc75115081534adbcc58f42d7c520cb9aa4d05b2426c3ee09e472613b17483bba64ac61dc2bf0644763d2c1970dc21fcecaef93f9cc081fcb97fbf76c32de9e5ce66ada52c326d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = c96a19405a87aaf53bab6cf7a953e1cb65072143f9a4f43cb07ef42a13cc61dbeeb32fc7ea6ed359d4be2f9dda8829dcf5ec7bc6fe414eaf93bf396940627f34dfe73d635d231fe4940d6149e9ecfb9372831d32544ec32f1088cbe440773fa5098a0f97e996909c3e4c0b96492d9bf42af00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 97120446c3b122c679a763eb3e5fb23627de6bc468fe025eb5f96e89c061fef575c095b9a7e1b8dc530bc37bd5818a361bb833f155c2e28dfaf811b37cd6c45ea3f08d6fb53f9f8f73f25ed9c52417d3216d3d87fba2be12398f700046d172dda93465d53e8ea152bd54b1b6e826d93046400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -320919c193d4e04c6488230fd8e39e6bbaee053d2b267555d1e6bd7b9aafeaabf1a476f4077286b4c60621703782d0c9d64c3fda3ad31d659c851497cdeeba59bbeca68ca125231244d8228ce02e95e577029b3de03a2eb046a2f437870c0d5e6810d3ca828efa1d8d0f79d1e26af24e77fe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -9298578ab4ee24737a2818d0efd50385a588e0d41480a34a12623f067cf69adb5c3baa47443e4c3a371a04daedcd93cac586599a3a16939208ee611c1362dd2ac1de435f5eb5ba0084802d659fe2812fb419964e95f01caf69184c0aa10567a5918417597dc8ad01beccd468ef995073238800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -21d188d2e614c315a49b1dd8f69534acfc5b85de32c80fc16c4bb00dc4381263396af904eb9b9209c9d65b91665ee5657b73c71c8c0feb03405c07a0049b4187b1e6600206c545ee9cc1d151cc2a688e260e555af0642ab2dc781fb38ecd0dedb0f493e3160e8096cbdb512b5d7294f9f52400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1c1cdc5387359bb24d335e10d5c4cdd3cabac0af8b767498d52a71abc7b35ba9ea2646c5560ee0edd426beabee96b25028047f50000e70237501007236b4466ccdf3d08083619cca8fd5302684117b44449373ba40bf7254cd0b5078434fbb6f1637e58bd5a597e9cc63c2e1aab367f4c36d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3490fe54b668aea949e6193a1b22a212617b5e84573810b5851101009981b1116f4a6bc2360528fafd8aeeb5c8043b9bdff996eb5ea7f73d7c465b6959d214fcf3dc16dd08b107801eecaa0daa2fa267b935c156f173bff01896592e8e983e761469d2c6630a5a6f9ec1809e362fe68524fd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6014fed3a4c676ec1849eb62aa298aa44e921fb538ad53e1082ba89ee2fd3cc1b99a2e3cccb606629bbdcd5bc6b93b80388a935d1910397f0ca27fb479397a0210e6b19b1ec92ac008b07a2086d3c140f990d96cda45792201159b4aeee3a5902a525fad031dab18c0fcfb40cd5d8e28b0e6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d709f9263f661afe397d0f0d6ba30c51cfa48774dcd4647c93c9639e5b3d5381a9a06e07d969080c5b881d11a7c8823eabc061c20aeb7e6fd42ac572724ddf4d0d38b81ff5e5479ec37d0a72c37c137ecbf8845cdcb74589495a729620269e86c29ebfb6376f3cb3b6713df4730e931a0973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -146cfa6f13fdcfefc60307ae7d751e79feb646c2cbad3071b00673b3814f731e0ca5daa60c09f72618883f875f72a5139221daeec9ca87435fc4954174fe03e816fb5a505a3a686e5446606b12ced609d916f8c8c85339d8ceec23917b63431ed003318c84ecc66919eec0afda8cd6850614a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2a1f4af5f1598eb0b402d74cbc5c5b6a0e0e0395fc0767f9193089769b355e08425f8b00bedcb6bee19e0c6c87ceef2382945576e684dabd1a9f8b7b1b392de13afe312fc81d2295f46db9f3af473fff09975c8dc02469563947cae96302fb7a2291bdcbeacb5341e33cecfb2109ea51f99e8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -659cf2aa56ab84cf8478cb4c42d5bad57e9934e3dcd19d4d1242e3c5aeb99440a26a158c15717b58f00d91c13b739b29fc02ce8c27ef2c8dc263d3331951f2846aeaeef05d3f5fc96c26ed74fe7cb03b083cd0f01f89f45f1f00b7ee15d072c479eb6aac20750e52838ab0856f1bea15c773c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2b62305d604f953fd7e02473286675f421d78de3f8c5f616a9e9ef721ce5f2dbf4f269b002864519454ab61f07118a00e16a8e59351abadeac0064acc5b38b6c5828a9df57b675ba80a61140a6d978468e4e7d0082ea5b226f6bbafb506e6efa3e50af3aa1edef8f5e7eb8f4188253cff53e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 14f3606b3051632ae380c00ccb95aaa815182db0e69a94f3353bca39d1cc98ed95d65d61f56350126281acc1cf3ca07c25644ea55e13c1064ea208ffe4d30a38c30140070dc32c998c3c2ca57fa368603ef68f1cf19169399b4f47a65e9263c53d9f223f130537cdfd0da7685256b0f62a0458000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -35d93e4c3411e26878549212ebf134c0c6d63ac76f5b13195690123b13d9ded48e055ba404e559bdf9fa2097f46472dd5ad0ba8414b0df925181dc74d62aff83c94e13d7fc735cd80094a08c0f7a36ed91af47f81c531eb8f81c03aed911bdbb3cd8ae55e5e590a27dba30e22b1bb422acfc50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = aa4851e2479512d8de8aa716891c259368ec9d926e21d97b13b7af34decbbaf7addf53428dbca13bedfcddafddc872e445a8518faf260b6bd54df9413ff9e5d0fbf50868c1c9a6fa352d7ce5d264e7f93f6a1efdd083c91a4947694329f4f873767cb96cc4ab86d937f1e812ba27715d432bd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 265e8290004ba28ecf3cb60525b86129aff11c7da89fd52b561744564917a640daa6178518ea6fa405e6c5aef7b0aa1d7946cd6779b3143044e4b85daf627defda93e66bb4d9608f54e9d20a1a302ba5afc75bb57919664fdb5ff186322fa07e371908a04538c1fbd9a63ccb78c4b6f4cd1860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ec84303600056ec8c0e21d00cd9f9e3e5ae73a6460ac00a4d316101e7ac7d99f0d70d122be51046f73e79934840a2e492ea39fd8c5eef9fb2e6de4dd0824337513dc2a8d0a79c1be9470f95006fd19a875546e1944ce04921f18ccf215f31dea647236f5939bb30afbc20a26e91d007ce0780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -286557f8db3e2fd7cdc32a6bc64ebcf77e68ebf1674cae863e0a316a6c3eefeb3ece6bbc72c923361778d510654549260546a5a9aba12cc105a058a6a148284c6656f6ff315062a68d547e17866d51f473c7a9a5d184780b283c46270b5e01ba097a3a97e867e5db77ac587f6b0dde7273eb9a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 17fc1295632514fa2a8b5ed88bcb60bf129f77e017211699f95590790892c26efc75c1c1b640a32f63197b1db4db79da460794eb08c7389133c17d378cf21009b466f79793413cf83edb9f7f63a0f06067e540f2f845c2d30784f0f72ed8c97aba625d7e42cc1a29584388492e84ada63b72a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cda5a80dd4afb7342538de960935541ad745f1d14fbad9010eb856ad70a449ae4695d8ed65eba556bdea29260dd85fa4c439e4a970300700601f1d5ce0ac167ac5476b87f1ee1d65972723a218e3ebe9d6aecc6d1003c4f79f27031ce3f88838ab51deeadcd89f5d9f8fa0968fff58b692f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 12013dbf5ccc60a918cc531b5d3e61a8f4c310ff8c442eaf5e16a2e03b158caa88bce252a072b4c86d0407bf61082b5ab03f1beda91fdae06e5274ed4681d96d0202a77ea1586fa4e46dba4a50938bb2754e26bac6c6422249f023e5a59be495d5357096921d06bb100be99f533091ffa1dfff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1a99d39171984492bad3ff33eb8905fabab5d3bf42b44daa96728d1ed42667999ab7b9ac115fa7159fa19d8d44caf455ddfed62e9719444fc2a72c5571108b218e817e2b367980e189784b07681791788bb3a95ed8eba2f15a3e40d858178d36aee450eb71240b6cb44de689883c3a7e7624f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5e8e70787f668041499c78328ada0c20347b32f76131ac62892e7462eefa28031e4b10b8eace25b86972340ab9bc858846a49f8771990dd0120508f41924a415895b54c00b33ccdb4da41a2ba9394a45d85869c9f8d3e42493ac765e65be21cbca59731d7b88a905a62c9d83995009c620143e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ad11a3936923b136189371716225ef85f7df3393a24b72fb254eb4756e51e54ef53db532c83bd3046cdd3cc04a5de6c993a30780ffee152d815f78a0d808824fcc8441bf62d7081ab91962f14b42e714eec0ab9019008b29636fbc192efa4db719dbba6f533ee98ccc18287321d8b9fe6605d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ee3e5b23d03dc4d3bf84177b1cc78f6ff5d0781adb56fb997182bab3b9264655760059808a7c3f2653d1fd7c18ac254da4c69f2f143698edc2806d6a5cbf1b787c02162c7d1516a4975a83c5985a5fc4073926b4c2d0c3949733a324e398daf456224fad273282341197c9e15f2824708dd78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5029956d0a4dc03959e4fcf88af1317a1bdec986917fd404403120a030c8f1f1af26071791c06404a29c99292ad84b28c3c25985718cccc53fe73e3bab330001318e9214b87779feb1fe1c0c6f878578d357fc7ba63f85b189388de0688476aff9b130d6b7a930ad6a143fbd0945bfe4bdbbf800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ee330558d15d8cf0b8116c0a457d26dd2e1e7daf5b368617ed7eae5fcb6406ed568b57be5d1f843d2a0b660102d2abbe055e0234c67e470fb2d6672e31cd652ed32070c662b7d07da9a605fd6b6c4ef74e0776795e58deba5b2e3e93f9c49602810c07bf4f9d975bdfee6037888b5cb5a6aa2c400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = dc631d3cb8cab205b6d6b9769ee98b4e6c2f61c34df5caf2b53de382d2ae6852792cc066da60d692c04ed9e1b8a34eeae5c3c9b17a2162f0396bc4e84eb790303caa38ab2cc455e31241ddc55fec90c335b2ebd0271080d3970519bcfbfa1831ea609bdd23ed8a25f69fb540330bc3fed590da800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e41eac4c282094e7c31da0eff2d9f62bf287250ab4b3a377dbe93f070eabbd8ff854297909739ca41c23c7e6dfd61f35b2940c22c645969e88c21b20f640db72b0d79bec60275c4f590cdc36fb1f6f57d165e994a0b84b906b5852bdce4d0f8850b9ccbec77537ba3bc750b4a031f5b10c3e87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9a16023c78565ff3fcdfbd6d8fc24b861c24adc0036c78456cd62273b6075a5d09aea66be10e88aa1efd58c76c4da6dd6f4d101cc8a5a50d7e1bc82513d062c444eb7c4606b494ca751e52ae04c824b1b981907f29735eb9596a4481a236e0671135713b1ca4c06ddbdae113e479b7df4762dd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5f21bd428e9040a481a24b3a5897f35eee28e8a94ecdde5610e8976f292b827b32de4be8d54b3dde58d22370590add08d0a15a19162a582c8170eeefa4594f73f31327307151c9c7e5306246c0f1b559cc324ebfcb91f84379ea98d3cff4a604cd23b6fee6c52c06731e5c69cd6dffefb36b7af000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -466c611713a53352fa19c1c871882d1b9e1374ea4e2c77c549c2029bba29fad65bc49593cbade826a0025532b03b29e37ba83f2642871885e78f5b29f8d09821d748ea1ff91453579c7aaf78cc78dc46a1951cfc5e1be00839f728a0a94df611ab50f242f12ae9824daa0373bfd1ec95e7818b7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2f9bcbc132deb760c3bfd399a07c0afeeec7f105166a2cbec75c38d01f35398126af657da847adbdc7f2ae1e43559b2bdcae82ef8f436ac1ec3957afcc06663648b4faa40bbcaba2f9106aeaaf18731edd88a1c49181b11b5aa75355a8b3461cbe63a7d7b9b87b502ab27c2013648d24420dcb2a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 30c37375c1309d2a9e08349587a0fc6b161f40c42279a5c5fb4d35a5e92441c270dd333af11854e1749c294d6cd0445f95aade2ddc6f1ae3b32ad2a0af4e0073377da547a8264c36d486d6901062f8663770ba1c125110902dc8d96c8a6c10e46a5dc262994ff812401fe3558537081af6c5fd12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 6fd14d0a85a78262e8bde0187134056e9a78a46466d78527b198a868820039d98ac9e5b9806e6afbf57a875012a20f1e0844874f9b966d519031b0b8c3e447e9d0d295b6ebb4014beb0de7fcfbd2201ddaf437caf1e6cdfbe7db4a4e97f7cb2a428b8f859b978e32a066fbcc60e2971b0050c654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ada05ce17e25a3fae24433692229b50f52af2e53269b2f43831b8bf117ece68df1ac16e76a2d8d82fba6f0d565f27589f381dd845be8fecb5ad80035061ccb0e9af411e27efbf92d7e76997dfbd2f2cc8c445fed82551d39ddde1c8aa05b6a429973a97809a70f68870c0ad213a3bdb4fe5054cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3c217475d27d51c2bdb05f35f8037afab3625fefb11a61d32fd2e2a02d267054f74da532568a6cb516cd571b65ed42580be32104c08eef5713505c7d9df17d9700f74bb94a9e1c271e15597bcb558e9c59f19b490ea625e8674a414c63b77e5d8009cd9e81379f1933c6a61e0891ba374a6d164f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -330e265fd8a58e229f5861dd5097ae8177b709fc8ec9bb6ecc4a9349998874e378eec158dcbdfe7a0e1de61e53496e5a71b53c70b6c87f42775c64c78518a4fceae273bbc44c62d7efd200f511a9bce1abada83fbedb899832a9ed482e24f17f4f1c624b3ef36436ffee9f02a22a8ef2b8b1d8558000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3d84b1b6b473a3a6053bd4bfadc2b193f8843ce428876fe54aa7cf15e161446d8dd3484acfebb74b1269f2237fda9ca552c8604cf69c77cc5d127c324daf9e54b38cef46eef6e183f152afba21aeff5bf137bfc5e9464f03ebe68b71daec24f5f9bf23ed6e722802b38ba15bbd77cedefcb3ad510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = da8486504def6bdb34f50a3ce30e1953a04ad9bd0948edbda8619790e7762f48605f09f6ccd29b9a3908aa77447dcca79a50385f41d1bc505b83705a9516ca33cfa1cb9011e003795c279f5776134b940813cdfc2cec4d0b7f93fc5a83b67041e49399a52afdfc833f41c74b4e5c7250c750ab6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5c4a11609619b6fbfd1c3536148851a3b0da4e741b2a47b36309d883f797886ee36686344fd4952505cff1b0441412a5cefa937cac87af6b191c98578542192809792987085fe2a1c300a1f5d55bb6715e265bb29dcbad54d1f85ceda923eae4051e4c2c4369e3d2695a6292e6b42d568868140e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2c5ed91d94cb102bdcc3516aa9443d72a85f23b71766f9861b76503b108510a8defcb190a8c982ca8dc398228d87abd0d81c40292733c60744f2eff02e32e355bbe764289728165cbedd70abfd430c594b3080caaaee65002fc14eb901da620d5ca86dbef304143d8710cd7fd434878872239dd860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -60c390e07d4d76c1661c2ac86292fd91871583e81036b82a6ab7388b8147678a60cb902907fa20b3fb66f85917d12b2cb74ad3b69e5f3935db9bf83d61664277f5872295bdcbf04cedcbf2a6df955234cf1cc4656c11591bc1c9dda2cd618b870004d4bf4212cfd956be2c504e68d45339036833c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9b23c117965f921ebdc3831dc12405f1d00740126167f0de7ab8a7d655885705ebd1287514d5b2b60b1a6844b7bdacd90af888d0e2c65f1b802e98d0a790a07cd135423175c97f4df8112db44d722db0f4da5e00b68ab9d999b7af0e4e6afb9019c6621c056f616b5ecfa40d74ea502e8f06ff67c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1e637f3e37a12a0a830607a41a524035717d8dd3c2c236b6d6177130d351abf96a61f48eb979ba5f64feca9a83706b752ef35a42ee383f7fae74919b8286fbf975b5d5ad6a9de6dfcdb381ec98b513c36a4b1cf473e4275dac269c1fd760ea3efd6a2b7cda3d273e03153c434bac02bd481f398a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3fbd1e88f1eff9252cabfc46e509c958bdc1f3bffb522a45143f23b84274c39a63b1326f9856af257b53d2dddb55f6c10c21bc80c18f85f1eaeee2c3b389699f73741329ddca970f656e46be97bb408bf8defd98c4eeb5853fb4f1b1b5b6d78e25cc7c66500853fc9789d2e02650efa1bb1ce1bd480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9e64dae8adc674c175cd9600e5124a95e713efb7f1781bcb8359ad668893559c6c2de9ee3270fa2989dd08a57766b64f3af385c1241a90e8ca9071eefc77461d319e51c4a943804c030d3075e0d6c56e380bcc7c03aafb411ecfc9cdf27913a1a8aee4e32c17dcdc17d9c980164e3bb6084ad1ad200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8fde0746a79b88acf7ca2d177000a7413561cc664df8dadf37c3610fd741b7cb77fd3dce413ec984083af128a8a7043402a660337c62cebd14ad9fb7f25a859f6aac62d83749bba1e41815723cbeb6ec8f38569c3a022b5976167b9560ab15260744e9e9cf957e841e8d006ac239d3526c159182600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2c861832ee18ae3482772915cc1604ef91fbbd198c303d8d35ca1b87a385395b17fd07be5b4f0064d4a206611cc6e099da9054dcc0f95704a0213dee703e3ef79b6a52142f7dcd966bfe55dcd1a1ead0f2ca37d0e8a397199f840dd4a43a05394877580caf9049bc8444ef60296efc94b77065064200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2332c774c5f36b950b6550dde52e9187ba75fd3d7aa80881c42fefc794ab19c077912255dc08886eae35047ce7d43c604e8f1587546581132f74d6cae2a0700d6f6a29fec9880a0dfd3b671da6571566187ec887f37a8481128868ab1a139dc6c531777446cf1d7db133cd2346d29d26aad58c965200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = b0f2bc50c4611ca11d19fc5ac4d0e46bba4b7c9c80733bc801245c51389d220a7350b1807b53262481b3a3510573a3f746a2ffa087bc5ea0e8df2fa4400d93014e5e5e157f086ace94a87f29b21c31baa8e53faf4bb68334685ba8a48df1c623f1fc85979a64fa7492a18f2f8c9c27ecfbf020a09800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6bcd1ff255f4071709767ae1c502d5905bf3ffdce3be1a4336d1a0285e3761d6daf163a3973305a2651e3465258f7187dae02c803d86c9b90442b48ba42271c96b6c3f9f301e41ded44bb3980e1af1e60e892527f16f664bdea44b374920ee335b74719b24a0c022f129f032f1b1f27d89618de42c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2a4f80acf5140b1ba71ecbc6195cbd0b78eed9ed5592c91aa605cd01e8c655d0e2e5a7b2d4259f81962afd98e2d94dfe73fc35e4719d8319526baa38f8665aa79b91f18a0d1c4980b8a295b6668c8aac09136f50ad17e0286c9f42f26f44d2eff44f3d06456c88d432ad8de9d2ee439c42b829520f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1858b41acc2a2dfede257fb613e56ba5edd34e3b28e77f6d0a7fd0a20d9a0a0bab3cc568c74d61aa988e6ee679f0ee8aeede27cfc8a40497240eb5cdf96719db3abc585d45e9c08cf5cf3f9f1165b1d2f8fd2d130de2c3fe4eb8f9ac1aadde0f115c5a6ef4fa6edec429efd1ab320e73437e9f87de000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 5454fde00b85262a58f7d5abbbdf1c33516bf1505365a86b9023b28db02e48ac6bf429c09a362bb8497742b1ee782474d0334dd721137747124b110435d5e3cadc07781c74c4621e1a95e66fe05ca3d722bd248ac35f0af94cd1ec3c81e58c9ace36b3c6c71e40bd97ac453c7b45f6a877800662d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f880c2c62c56e50fbc0d99a0fa583c575e291d86d98cb8f8cf3738e86ca2ad18d447e778c22262b73bb8e7780d993cc92bf9815461d466cb7ce7571c2732dcba75f75177b6b3d413f336f2ea7e1df68eef71f375a61d4db0f273d4263fd92466f20aa0232c5e84f99f8e5c05e8413626889fbf52aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3955d62c51cb3e8cf4292ba35a10f24d95ae10cec3f4d66f9ea3758c6a323797ea764c85ea67eb7998cf509d0f02e037173e2710db34ccdd2130906f40974feeadda912364f044e2d91dfe50e8f294d103a451f8b5dd21cc7d6fb74f7c3d5a54023d83a07ac5553c518a09b5ed0c6eb60c9bdf2de0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -31ee34bbd847f16fac91940260d168e9e0036c2ee48c99a70138c494e5b72d7670365d7b41a0c6e62a3a7da29817a95f6f9799c8eba2f2b131e3943a860766ead0f3620cce998d4005c2e191d65bca9724ffd2df8b99327c33dc257e238eeeb965eb6aa86e558e44967c8429a9919e77aeb319102a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8889ece67e975f51ced2f114efc005eaf08d3968bcc7fd63fe2955f91a64eb465279168aea5e1a30abf24766d1a6f5c2ebfa132b2cff996b4c5a5ecaaf0bc7514ab8f81c0f5e3b528ed665c6fe11ca9821842925a0fbf397eef244faa3edcaa116cdf585052932c5510ad96ef37818943d451567088000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5f41ff8d1ccc4d076dd42848b389730b43c2c86558ad6548ee91ab8d1069a05050f177c4343c75caea3444295a49a8de03c95f4b73f6948c640101ef08985231ed35638a9c8f11e95dc9b1c5fc0a35a028121e9a185bfb3c2be60c90896e34d35fb3b119ad659fe651b5e4a3eec81c147c0ae76e934000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9e4781f0820452ef4188198da7f3330c71e8a8cf7281afdf0b73ce65ede926ff32e8eac62d67ca8466a5a4e18bf2447fbd404bf9ea51eae9b92d50c8e2065d0b6158d7531649f702e9e4d1560f17cca6fbaa53eefab76edf973dea3f17dba35b02ae55bddb95234d2172773523873c99299f6d681f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 231efdcc3b444cc804922524cdd7459245c73ab1ad4c384b36efe72f62bde7820f90c0939fcbddfe9b4411b76791b712c7e960147019f5ce03e0d109b7a37f9cb7dbd729dedd499bf6f6516900589bd410e21bf998b3f3d67fbec7c318543bd3acaf9e81d562804885370eed0014dfaf88d585bd9940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -b9d51438901785dd53d81e50ad99fde8ed8ea6d3885719f5becd14f15b488e20c265a696d86e5595c25181111f544c70b223f77d410051e5f4809141aafd84f7474b160778a04ad87c8f7545763b76bba9742ed787079582d86580bee7f8ad0633ccdfe9e3fe595c3a4bcff3620821f6d0931f3b2850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2e2c585937a13c5488c47c13027e79d1c8fb68364b33d3c1971a6291e9f3bf2268e670b5f4f10d772383212b718bdcaf1a3ad8a2fff6eec0c28dd8990a6ec80e0ce5c787b04a66abfebbe796620d0b8ac6cb089d7b5b8020cdc39475267b397aba7c0b3261a5fddd168ff0ef63857b70d28a3858d810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -39246a962d69fdb73a2262dad4a2b493135564eba665eaaa51d017f9006c4eb5523eca002dea453778b8dfb37ac279037cb4e97db55befc99c89cf54f7621b1a4b68d46e0a042a7348b06a9013182f4179118e4a60c860f35b96fa22d8b4862b267619be0603c06bd8d86cef9d9a929a4dc0d2475b380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2536381e765007f821ecc27ec66300ba313e79d244a4b4f728de03ea3822ed037a083e17b6d875a848c8e0ae853ba9913915d006cc8cc4faa088ff6ca8d6a68b6362ea75ac87660a7fe36d796034af47341047a8284d37b98e36ac19f16fe4188f8d83aa9743f1511f3d96527f642a1277df154d09900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4ba8cf2ec7b20f7ecad43a8bff4c544422fa81d2e57992c4ebb80aab2b432537c796ae7b8df2656818f3491424671c13007e774c6ccd0b390a56e8cfaa0c73ad966f37e69aa89f56e1e1a4d9b37dd6751734ac276b766c65f5deb6a8571469b6ab441c22555f994b07854827b00d92610a54ae90100c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -144d1297f2b90178dccfc09127746eb02b779fff0f26600d6c975e6b1d3339fb24c04a96e72d106129b9b2b17017e60dfbe2dd04ae8678d066ba690e32ed298708a95f1127e899c8213d766b3a8ae07441d63961e11192e1ed8c7438ab3cf1deadb6ec38b0059972713fc9b57e7151887f65a5f953280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 297311400083b0b5b6fe4ac529750931ce7ecbb7527d98324990aff72e2102dd2d41abd05de1efcd96484dd4b3b3d27221be2c8e99c0b90301c814dbc134c2d6dee664fadc83ccca2e9f96eb2a0ed2ad5e8be031cd7ada865c5345f009dec58c7eab9479ee23a986bed81f27da98f9a86ab8281cb7b680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1f9477ecc16664c753a7b332639c1e09e1282fa81dbcfe11106cb77c62c5115c94cf539a0f3093332839a2caf2329d57c1111a2c92041eab72cb33edb6f30047cbc71e519cba32a15bac44eba4926df458190a85029257fcb3420b297f31bf2b6ed069a000e901f9bfb6472efd56dacd17af6edc13480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1f1b40029b6226705ee3c949c70d917a31439467e906355b671f9520fd65e9e940892b039e8d32c1742e8341056d9df2bfefd057db9750724140848b85b21f9f98f44fd982eeb9777ba70e54197c19e0e2b1e6b13dc96f5a56a29414b41e1e7767277212ce3c188a555ae2b5fae185004a15c3f3e34900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -94e9028be7f53e05a702739726c7f3e47e7a2be62e9e45f43f9528d6d086c20ca78b5a56027888502f77957ded5a7633ab0ee479787f8db01c51227ba8d862cf772bbbf5192f33945b903adf40883060cb6ce4bcaedaf074efc76fb2e680080ec7166eb3a7cd8cb88fd11c6c0a2b0e50e68d09528d2300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 22fc2b24abb592f1edb0035814108bdf0c28a3fd2e69d5ecbec57cd0075a1c50bd2136b2138960a4d9b4ab154fffbd38f7738c992927e069c1b18ef8ca4b1411f263ba4ddcb6cbff3d12e40e5d33358eaadd99b058e36c7230f74ada15b59b8b5e9a1c678a3988495952e1eedda82a241f3e4bfcd61f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ecb4f684d42737df9b1a6dd85d11e78624cf7828b35016a5a5d01b87d471f8c13c55d815815d559dd18183e49db00c9d42de9cc310c6a1a5f89f7281396a3dbf17f782756970c5f71e72ac2b60a6068db482c5d40bf1d2512160fc7af052932a51fcf7825951ed298b89e0de6e05ab22478defbb9b6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 216f44146c02d89ee0ccc1e4998cc4c150d18ee88b739f0afbb076330e6719896c73d7ca429eca2aed6a25db50779c2defb5e5a5ad1403ce21c6af56fd719a70ab5620818d8cb913a0811704122fb451181b4837263e1fa167aeac541624305c894c2b3add05c8ddfc44beedef83438c05a1728492dd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = f631121c3cc369b64c24877464929d510d2f032f97234aa15e2ac5038ad530ea9213712f81b9229e37ab9e4656bf4cbfc9d613098c089007a4694008355e960cb7c20b393665eea8ef2a8239a928ca6d6f647f2235fc1fe791a29820445f765ea0892b33daaf550ae0f0193d761a6bf74484b49f559cc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -24526bb53e783e68577921f8bbd7e396763b43df6cd6a99afce6619e40438dcd63456b3fe1c2ae1d603ecbbaa13720080d645bb838ebd013e027e612a7de15288fe6c76e709f9cb002536cab0f86d43ce863158da7f2f6d37727931d7b9b6ea08dea039a8fb7d3cd3c14f8f6ff1aaea46f188e4392ca1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3f29319510cd47869f96f1df28ed644cb015a3e90c85debc29cd822bb2607f38f417ae9e87109ab41fcf99e8edeb159ea1e3bbfffea3c292bd65c4d45dc5a841e8aae43d32c12554b291599e210e0fc85feb6d5cfcd9bec1418dc3bdebff747b7a3ba10cf77ce07123fa731fcc0447cc335ab12174a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = d9096dd3a080659669a2a069c801e23b747424934f0165fb0a77694e0f23ac433f0579b910b2d787b190675159fabda95c90f0501f451c94dfafa344be235347bea59e70ae1d5adeba8ce2b50a9db1798367d7e239d382e0584c1e950cf4ad9af2194ff1c6569913bf8a867739fdf43ee2b4de13efe40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -4dcd1248d590cf321b84a1bda855f94444550c4d3fe9db72c40f1e46455573cb43967e536bdf297b3cbb2380da9d283162b650147c1dce08e12231f6f8e67fb7dc9d876aa5b483d96ccbb442373fa658a07dbfc3e3f7dc121a8c8ae1a81da32d6148888d8725d125a8d19f31f5a782cfc0f5c6f4976d7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2dcb2bdbea86c4f9e372621eacbe901962d5f3cb6165a08ee5093af60b98242b05d4433cb76b22e609a16d9867122b2c24f835a4e145f9de0d5a2e29d7dc1888299f7fe1e119de4715503f04ac79a00a53c6d220806f3c373770b11161af2ea864a694fec5d417f6d22abb4b9c7e18a1ef1120410177ce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -383ae5467a056a033d84b480520555525b26bee4679dcd5f8f1d1509ff86030d976dcf02ff39c45cc9da1e165ce54845ec5077e71a7286a26f9ef3ba9e26b4422cd9563190138ef8948eb9d238ac30c4d1a4efc228111323277f740cdc0f29451c685538601b18cf6d92ff292a7858c0001b3c9daad412000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8b18c4317201cffe6f75cfad3c1d27bb515a6b9410f0cf0f080ac4602fdd3724c9a315ed4c4f0f9d977be60b5261cebaca387014eaccababb80af44f56166a820614df13a224c68dbb8781c3a41b4d335e4ff8cc76f6d3ed95990b1d359ab06c796cce3a769f898f7884b5fcd7a1459166b10db5347c54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 878abf5698c1e59044a9a3b726b134c93f92bf14295a4ec207ac7b9907f1b770c9bd95576458b12112e69ec932eb7ea64e3736462fe13cd882bf10b035ef52b9f9e40c504d274ac6399d86b98fb7ae312f6579b9853768d960a4f7297b88eb3fb1cc98cfee008947a21e4a78b7ee7b59d1923bcd09c26c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 19fbd98e49bcb1d26ebf1094c5baa53a8fcb391481e1c48a5c4757bbaa8c8bc52e776c97b2773e0b59acad7d6cb16b2ad2e1a6b440a14f15c34d81d102be46c20e093e96b4fdc4fc029905da1c71fdc1f77bf3c095523249ee787096bbbe92a87bbbd5d24f6046cf60900ae1c02b31b0884369763694818000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1075534c626d32298404a07ecbbd7593f79e5a152f1caf21de28efc0608c9fe844471ce1ae3626b5616e6f6cef32b02b92839128c84580de3997e8a3d38869e80b3eb8c5ca4a447642bc7504209ed5a061bff4315856a3e686bdfa4f600a3bdc67bfba9679678ac80e2afdf020364b122316bf01208a1c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6339f7f0618f4bf29e97922730ad5452e4009c3066e043a32a59661e6b6720a7eb21658c79186f8939f25936161d54f9a71b4cfbb422014d104abb58eef41c2c659a7969147bd26321e13583123295698958ed73d77e088158b26b8e610f8d2de4f7e681b925ba79918d9f4f06ca5e97ce637a6451902e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f8242cc4711839007ca5785f9f82c6b8e170091683da65bbdafd0d0e1fa4d88de562e474c6439efb81f54eb828382b152985e1853080644845b63b2a14678d53752f8867532e61782689f8330bc55f98ca49428e6fd6ce5acef057a17d6320fa1209de0e1e894d6f91bcfc3a3892f15f8cadb04c3f425e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ca67be5b9124a1ff74bfcfd4bb5f7c81a4d7cbe490d3a10318c88eaa5004c09969f427708394c889e76699ec990b893436ed1d9c33fc8e8ed70fb43595011aa1850595c0e372946b41f2db58686566f1cd40f1f70d0a090dddf4da9b3418e700f2c6056a9eb87d627e9526b93a0f96c871026b3784e8220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -33d6dbdcb2bbab3a407a1f7d49baeee711ada1f7ebf669aa46aaa9ffaca0c698a402672b67eb6eaf57cdfcc221dd37caf38526d40d9fe0573c7fcb7973fec89aa9b10ab5ef4a692d4fba9d3f9771f75028dc8c3de233268636e9429f90401040df113915535b7adcdb09bc3db687a017899b10c1f79d51c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8b9aff023790e16422a9fdc0067bafff612df67b345fee509fa2bd14aa29cc17a28090830cad75d2ec5d97f8a99360d8da08a1f62902a4e50f47d0209e9933ab575f6e82404ad977c5ce738c0da80f8a6a34d1e35c1a0e7f477e5b2b550ee96a5038f68c188f924fa2bf661a7b01fba9541bf2400beba780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e695f1a9fc7c302858b2144b940958b93593c90c62c7fc9267c582d052758569d7494a1c67c523812bb48810308e45efcabb3659d771751cf2e4393ba5e3855653b5c0cc1039a1399007329b481e459ac02ceca235345631689f060e91da8e9bb41a0d24224ac02b59f425ea9d0d0e15d9d628a73525b780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -56e9a0028840b96fd0f38ebb95ffd1b540c1edf64b92aff104b9d7bf9d1cea05f58020840456c8da9f38a14a0b3d9501f5e3fd0b8da0bdb84894cde81c85f107ca44b17b1e92589a3b8dae8be37b6c24b1167024cd5412868cd3ed95d20e4fd9db5abe7fe08dc8f4b34560d6af28275aba46cbe389016900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -28a270d88b6cc7aeb028b331be5fb9d5560ce97f54c4dda9c4f8aca6f004a2d78ee998257b86f8262197f0959790128aabae05c094d8e82a65909f5d0e017cf1d9853041102758d6fd7f20b41723a0e90cdb875a7cb894a8e9af66255a2ee07e1050e8fa32e4e92ace4bd86d53c7028261479f3e23780ea80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f625b8b6f3c43b0e1fb9b665bdcb80d94b0ba3ee46b236000b0d0be55bd27450bcc1cb57fc581a92677ee52d6e726e6a5be4900c11fbac10dcc0e9822b0f64be4c373fa386a3448625e2ec54f74f83baf5bb8a8b23d2868126517f561d7870a0313c419e27f8f6dda15bd2b360b0890c888f0323129dbaa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f0828869220db53a9d0b71f0fcee806096876be2764fadd6d70774883af7088b9ca1f24a56f4ca084656dd7abf85b9de697d8dc9573aa2b5eaf6f627f41367832ccd6f8ddb62f8a07860a3ca416af8b365d2eac2cb620477c2048b5ef2a1a741512754f5c2cb9e4b7d3ab14a9b314a25d4bc2c005b0dfdf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1a2e56853009c4cb41ee5e2452a086b14b501a3f192afe41b902a9aae5a6c7b787f609cab483bb929e9f744f648afd3dacff9b77043a149d46187bb741b80e475aab3a439ccfd569fb7d34cb055e8cc3e913388eee1cc52f570417381b46cfa6970268b097e142026464e56969bd1b76e93ea1a8b199cd5c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -132cc79aec2c5668f4e33a835444c4cb3a5153011c1c0bb20bd93c2f66b58169488222faaed7f0ccc2677fbbbd85889e4c54bf2f48c1158646cfae7e51a88a0c6d1cc2ee70d1b3de251abda662f99ed2211b9531d3db98d2295aad9d811989ac1485ac5e87b82b971f0d98d3674de136599bd09c2392e00a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -6d5cb6a784c06031f3bd3568d0278541e2a70c0b1c3bd224648e62fdee87110a1130d50dcc908e08a7ded8f62d245759a1e75ba36096fc626794b55a59a378efa3dc9caf1c58326676837f6e9748bed9e65b8651245591aed8bb66108b2f4ada085b47bf283621a5a4045c2381059ebb0a42b3cb3e49e54800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6a349d1491043c0f6857ead2be209707bd67b00a90b21f65fc49dfdad4af63a48ba6dd9d993be0bc782c3a479991d022aacf3ae3ccdad6a879865a06f912bfa1ef997663da88b37954f15e9d9386dc85a4ef8bcb991225a7e697ab91bcac5152c1cce2b8cf93c17611927ed909acdf016ca97c0746b2469400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -38c326fd395b254c83fe24b9e31e2c5764ede4efa5309a467fe4cfe3cc792abcfbae1a90781225bc538e12f69583823482dc96c6c01d5ca4c6486407606d117a1f2c8ec9bd38ee2263e714e8836d45beaec19e8f0362ef6d96c56ab10f85885ff94526dc9151311bb8d61f3374e6c0b2b7606919dd2e0558800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 183caaf2e63f1f4c91f5d7f20df80eab1cd470814559b6f72c8269b0e24b01587bffc8a970a5444e85d85bc6706d6e8b28caceea0f205cef1d85bb88ac1498964079cb30eef9d909a4c868f7f5f73398b5666cac4f19f070ab75708eb7cfbbc5619e677d3cbb832f0f586ed24e7de4b6467d92bc3f01e2c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -484e2a9eb3e9f1b7dab570f3c8fa4a94e282584f39f2d2201c728886fb5ce3a7269802b528be893da6d1ec8823cb09ec3a8ea7f31d434e6de270da7ef8b2a82e68cd347165f09127e18e7316c10de7720c7807701a96db0670ec63bc626341f3db5fc416ef6f4576195a0e9aff56849ef816581da3774676000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 36ea685f9b5e16eed94fe64f1a26c9559b3da6013f4b1ce41cf5274785e90d153d9839faf0d236f7c9642ecccc8aef9dea454ef09e0ffc13323038de384c30f88baaaf06bd7accdb44f4330edc80d12e486107bae0a2bf0eb6e7ea9d5da2f4846c668170b0342dc60eeb5926296db742b65083addbc31930000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2efca3b752eedc4df5a6b5f7ae6567de76ac5787abfacf3783a38707018225b98a6f7f6ae76bbab2812a8d981d206806f63638bc6e3a6a64a152a8cabecf8f578f0e0d77a500e849bd9fcedd53e43a462725bb508112bf23504116b3593066c2c620d773803b730b34324359ad8f6d730c76fb5562eb54ff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1d249453039e36efb68678e19185623026fe37256c9dabe0ff0cdcc0f5bf2f4f2cfa95d1834a75a4d34d37111d5467a9f967fb3287f3e9e5da33187da319fe8cb622cebde53352066c1e41d572832c243b5c15327dd712e94145fc948deb3b10a28b5ebb19e6ca2ecd5aed296dac3563b1a8e521894f4a81e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3ad7859a0d78109dd37e437e76b03d575f43ecab4318fa5bc0edeb7b1f21582afda9af334346b5c8d1b71ff859b956b629c29a594c9fa9e9aaf8f59e80a1418d0ac9fe53f59787c7cada79e17471fd3c8a2942566eb0fbb59415c1fa0171bdab9c3b9c423c362b06c9cd5a6d05dd8ebf72f588478dd31726c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -d39d915636290c75ea99a9b35ea8de378069cb95ce67c71f58c2aa8720fce19db80efe41ab9753fd5783c2a9fe0719adaa8d64a0338c915c420cdc350bce3619bd61ebc6421cefdd508c2a467ad7ce7e91ac31ab1f2fc83261f35ee6d5128205141158035de23347ec1b817b08ce57f3f133c1eef93e193fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2c31f2aa4ef83def0df007e9751c6a23a3f360ee8fdfd2c98fdf7e7e035b2b559217cb33bd3228b050d648e92043b8af0fe24dbf67ab86104d1b0dd54a4c361359fd8ca8d45152a596d3eff430dafada4ca642c92f1542b0c45343da0da0315f3ee96a979419adee1603e798d6971f0cfd855bb9e1d811c4f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6ab9787b0266f75188f87762fde6529c0a4501594934828a5915826af5d8cea2c23797ef3fc90aa6d9547b851d2a9df9f07da0314af720977064d7a6f731f3084be3fc7a7c98226e069538c4a14c1533c082bd75b64774bd035f6ed9a44e5a294c92e79e486a8011fe86e78cccd85151e179a9c66920b5440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -87d9f6fa9f2e2e2bc2d89a008a26b169c62c7d1e3e70c8c2616052e30f5452ec6286ea656e0b9590106fb978ba20e9b9d602410c913e1ef1410910e112cbcb84bb5ce9e10270524608996e3adedd75609e95502acf348be0ad708f6b3aebb1f6d6b03b09778a11f20d0279d7ad93b9936c064a5bae83400d90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cc166798f648983066a376c07db4e5e7fea10696b6904de8e1c7c07b0bf1855d9e230499a6b5a25cac7e33864de6a813816d5bc2e33946029267b3dd0582bf32bb2b21410b5cae6d4269a1ce2598cf7ac14a1533db688ecc30e75f20c48efb6f5e62d6d5cf8449bf9ac17cc9c29136dd99e7d0a7e789d56210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2229d76ae7026b1bf4c494d7bcfbfc4cf2907754ea77dc9a7965fd74b1638bf5966817ecb565261f1810c1997058cc508e8e61f9bedd77fc2fe70f1195f175fba7204ccd466768d78e9da06c01b955e2489cfeb709d9e7aeb801fdb0771d3fa189f976eaaea993d5d0b81b8b671efaf403bd1b9b6360cebe700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3872ba9a68d7dc2fe46446aeb3c49d17e76af1decfd9283817a5078ef6cdee80602f47d08be6fc95f9ddb4c065cce869842c165545c535c0e8d95cbce60ffb9be1c3fe67a7accd28eae2fc871c5b3fcfccb6233d26ce06d4e43cfd9fb695be8d273f1172b40080eff478ce24848b4567b6f6bd6d3b451c1f5e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e629e8f1e8b39371a90a978d57418986c06c6521344202a67e42892665e5a96c29776b6d4f1f6c38d421f90c4ea7950438203e6503a5a051f0b2502b5fa2bb6eb8890a88e875ba8adf94cc64f75c5c9699fb3315f503b8387dd114525f6409c16700689dd2ccda86a70cba904b7439ccc3a471c7419e11108c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9060f2d28850bbd925f07f54339a5bdc8206be39dbe3bb69af7f8302834d040dca319672b80c108883e7856f0b792962582bd82cb9c55d741762af09bc0bfd00255c9728190aadf8f7e76b3a55c902ed7f9d945e543e84bcc1ebb93770520cd9767f7ae4ce11678f14faf4de6b3c1cfab01549f7f414e8a8380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3d044d97f5ba00da94205a02bbf53f5fe70c1f888137caa84c8492d4a91c34c8dadd2ec55cd8ec901a9b54fda6343370481ce47b249c2b7543676e51b1323d086eb60f11aa2acd2238d2d7d432d234b9cdd2ee4a640786177cd94e4b4c0aa9e689322b7880d46c8399dc5be9bbee62a4cb584c41642a8975d400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3a86361c60a9473ffb082f3995a5b80486a71a39c37e55b724b24b0f2bf01f4110c1f482fcffb4c64294a84f83aa4ba0cd6123b6d7af4e9d2f4f9ec56fa6f865b8f82de069083382f5265797637be9fe2bfc36eff30dc1c734e5a004e225cc439462dc3e7efb2d7a0373da7795680fc3f34028231fcafecdd580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -925f5575616e915f9a0e4d0a37e5aa9741c779f69e0333523b432e3af4b84959e65a72d2072c3de90d67ba57df43df34711970647bf0fcb12a31504031d55ea68704f574dd8c19cc548749cd72ebbd9a1e30a21e6364312d7303845c218f01036021f8ff75034947c42bc7defff9f1a98a2413eaf1f51738e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5108ccf531527010e18e9c267a8497cfd103938ef21706742579fabfbe4a67c3ef5aa55b9273f465135922b6e89f7539968acd044fc4fb2b810c054650cc8f03f6c2aa8010b51dbb1f00b71f7119acd674f730a2314425f4b0f669fc85c9ca3bd40ca63e22441e7a6f7a8970da90b6e024af009ede5319d03b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2c258c31aad5ceffdf560e1019a10733c7f47c2a8e6e5bdf1d8dc81d1de7b2ff122e86ec968fbe90d1bd52d482d3dd1bf04b2e0f2d2861e97fdebc27e18a24a7f766f32318a4d3073322cade14ce6bc54d7735da0888cdbf923a6fb68bfc38eebc3f6b25d71cd48e7e472aa12e93d740c8c9d0144d85a55ce4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -128516c78d1d3cd91f8faeb6e2c59d83be9683bee9880487d1f92c315ae8a211c864d600aa911b2c4dea23145693ac811b99e114e5e7aa8f16bd6efd0dfa7b2a2a31d614bfefd6eb7185015f0a4e4a7d7d281b3fd730823847efd8376fb4f046df1e5da12a9ea0d9a9c7937f0f60bf0e86d4b731577d300681e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 5cb0c1ad9d07bedef928e9cc98f2ff20fbfac73c7581f854dc5243e52cb12afe8bd7a0f3d142f1ba36b51622965611eaed4cf420449a09f1ab1f7bad5b59e44c03e87b3ec5eb9831bb19dde6618b02d13ed1fbf882dfec582b336582584f63570b63b8e8772d821a070d774a4a227f1c5f23486b640167648a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -23d91b2821a0e3d964fa8e69e8a39da13b1c69488098b83d7f1e8dce1c9fd8e1a249bf3036fb96c0d74b5c863dbea09eb2cb0d33f842ca1e2e0df72560b469b596df0b713bde811704d5a0628aa9a74637dad9fa1f633977c12c46da97ad0a641bf42f20273e57da6ab316356b00140763dc77bc0e7c8476f8400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 25e0358ae755d33948981e61b4b395af4232f68f56dcf6df3dbcd33c811056340c216b52e17e842db3a958b38161b2f93d1aead3cd58b41bb66e11b99391084eb869b81298d2f93cca2eb1b74ef25f147928d50c85edc7ae7e9249d556fa58ab5ae21527b432980c5fc8ffc0a0fdce264c514109f41482c1259000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 207116c23f1fe5b9b6a108eb8b6575efe4f96ed462886a220428612b59f7d3938ecd723dbb714b4d175c7407f44a7473bcd6245aedc4fd6ed4ec702341a947535dd22fa2b48239c820a221c14f2090d85ecc406cc42f60cd71fa4fa6ec7249b05645dceb9e843d07d1766ef25b6560a06a2ab674c442564696a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = df9756eff9de913850525649b8243c1ae331b5ca42fc72270368ad13addfcc0907b850077b7a9136a0b3410ccc4c90dce2a613d0029c24612229d00caff9b1d20d1ae3199f719daed6cd0e4ef83a0571494332f11bfc68cd5eb32c569377f01fa25e23feb109c9a1fefe2508ce98c8120ea3a9d7a8c522c522f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 16cbb787f323cb794e290007ce479c1d34e50ae2d646b1fe034b8009667864572a43f5b68f4cc6d441abeec286f47b853137e1abc37306e02dd539c5764a60fad1d3a65f995e7167ab2331ee91fba1929a504d9e100f381145a461221293c5ff9c46837e2a0deaa95803ffbe10c4045f50dbe42287397228774000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2db0b66eb1dcdb7b4bc1c9fe627384c9cc753899487787020a94638e60c3da331e845b37b463788049f468e6cbac4cc3acb221563a9497902cc35c4962a6b65b1d9fde9d11e3172036377bd425736c5cba03c4dcb8ad51fa282ab2cf95021602bf53dccfc0d07154427c0a72d429bcda990b217c7d4af4cd7566000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6b2b028e94560b105c6876f95ecc06214a8df3cb2230e141ca3e9028c310ecce1c40979161fcbe7d676c720e45c7899d24d0720f3e3c75b328037e17ef55a875c9569725ec5adcc39c019e7e242f2aff1f0eb56b1397eff1730e8d6ddad1e0253d9cd43963b7471eec2713ad95156b15f99726144d4fab02542000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 638d6894cdc0c83e288cf86857f6949b81069bfe0cd04055111f129c325b21fd98d3bd57a1d61395395db75154a468ee61b42bdfe271ea827cd8bee6fe0695c52c654a8cce146dbcc5872861b99f5f0523923edf95d8ee128d2aef2f1122bef6c19db5377dedb0282d763e96293a54585307c6a84ecc4a1d6890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 788b2e25542c00390a7375f209f5f0b55b4cb79e03cdc226d72af8c8c87b192953e5c938b74a01a193c8fd38910f89318d4c1acf8572b0da417d0691b377390bf987266c5c15db27f90d0dba4a74f2b7eac965aed74fd91b0b2f1b1fc88334f8f24127db1fbb149473a289fd5f31d6f371ca29b485adfe0bd0f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 53efa85e847dc1570ada6b3a92c08751d4afd36ab2946674dd3ab9f41f5e026c533f796b7008b52833038216b3588a78ec80058629b1f5956b79acd7da34f8f4e53fb6cbc8a3e3e6e806c4da832f0974eea6063869489743bda5513aa7dc5498f440318a167786c8810757d38e9a7f1c368c4384c66caafa5c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 39161936e5a08fd9855f62bf98510b02d2d4cc5272a28d2c7d40f51af55c84d946e228d4d1e9293f0c1ac86cf46d378e4a54d410af83c393e04944e043bbf5dc83670650a3d3c06d8bd105aa8c195bfe7689ec3b4a4b1c4dab8fd7cadf9fba387fa30b01a8067d4d84a3757f5f0c889efb3e8ca1f600a3aeecd70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = dca9afaa3d395a39073157b8a50a56b4e4fae6a6c87174fb29ca296f0ba1c350823a79e58358b48e535699c6ed70ec4b72804c535196c39d90835726e0f01ecf79827b78c757070e35bc1987e5d919ce295415ff58d7749d146204339d6e352329fd63b448cd98eff676e2685e8ae267b24fd0ac54f5eb1cfda40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 725831a1cbb4ddeb20171346581de3088f106ce14d134eeff3f08e559f3233c314ad1e2b8ad7d76e07c8524bcb1bc169581813f17b8ccdc091b5beb6b359b6a08afb38d01c8d82f2ec991b9f9d2c2d0faabe8ddc9fb3b528f0c09dcf50a13ea2bed6495ebe50485bbadc92fb8e45e94a37cd920330bee87cf7930000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -21cfbcac6b185cd6b600837555a05e429a45ebb20961dd82069758797dce2d321e8f63b34fd55d95ee1b6d4a73bdd7a000bd7d61c3d84041ba0cc7e20ef4bd27488cd1e98eee1a9f4e92902d934a20ab57e110dbfbfe1ee1e41ad4710610b135c04844f21d20d1de37092022e7a8831476644d18862efda17be820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1d200c729f21eefa8e49c51456717a0243a774730140d3613203eabd9b233b6e3844ad5de3fb7c8fd579d564e955b1b177b1b9b0eecca684a4053181d83e318fca8058d0a9feac0848f7bcbe3b942a514aaf05442bae062377ad5c542253fe8bdc415e05791a11935ab6fa9b3d4b6e6d87f8cc4511fc787676e280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 66b674da051c25f230547970bb2281f49562e4140c9758ff95c036002fe86c0ad47ac987fac2feba6f463457aa07c90f0d171917c9196c86ca67cb94bc221c9bb2135cf4269f520cc8d820781bbda2ab0659918f5ba6aeea1b8c42e16185a998c5515509662a17225e8f599adf791e1217f52627983e5dadea9a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = ff9a60d248d583c3196490317e84a1be1f67259449af64703e21fc79fa8d4c517c8a00dee4a170e53648a005d406ae37b213db5611ff74815757afe4195b6aac922c5b7e290b71fe98f9cc769ff3373e856dde151b83e40d2df300fedacc46a930e8912063c48d90498f6692c84b87314eb28152287bf3e646dcc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1208a6079377c1d43fbaf4bee4eebb1ac6af799d90ddd79d9d3488d9c1f1fe52349442a1412add946a1b2efe014bc9118e12c20630ec10620d17daf63cd3a8f8b4f81e94f257d86c6ed478a5611893456dc4077dbad99e05d912a7f8d6cf4cb4ba69446f62a5a56b836a77120b64e5eb01f3ad7b5d4b7bed431fb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b47db1a2bff7153bb0434fd23f9069c947fb08c88ca2b97c921411877c69af522f880b326dade953014292d05a1900087b769e831fb76b360f49203bdc52e4c1502fb89f5cfe92fd37199d94195e788491c398640db3cdf1139503c66cd9c364090f697630c94bde7cbea07da6b2cc08b227f46dfde4e1e8f9b200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5d3359fd11f2cd520bacec62433e8db28def356fde9dd2cb78911ac90f57667b0f0397eee11a8118f9c49d169c584daacf142a3ab1af2cb5347286166a8b6e0a9869ce50a879ed97791a3f175cd12a39d7ed247f829394787cb2ba8c5ac7ac60b2d27428d242d9e4542d025e665ef42e2cb2594d6f5eb038d167000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -402e754313e09604d68f4e3ff730f5f7e7d33cd55bacf8b1e2ed82c0c0557a5d5e68bbaabf2fddd4ef596a7aa06dc4bc08d2a80fd573878a0ac99531c1af8465ad4ccc6e6d567c5d5d13a5c2b5844aef28c507699fd45482cb7fbf52df80fe7b35887e20cada5bb8d230f223467f1c54f097a1a54bf6d0e8a4cdd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -841c3b52156e6a3c38a11df06682f0395846aa0011ea0574b0b76c2c0fc229d6ce3c606dcda5b6ce146768b1833a0450dd52d1f62ecaa62b8f60a6417b4bbf798e875b08aa14315aeee9f4649fe00ea268c2dde5723c4c5467eea41a3b33f8c7a8a0da32fea9a66a17ec3ecf92d4839698b287c0a3d1e71f212d200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 13858fb38886f134570e677c3c9f9d89e6f4fe8b5698e8c2e1070437c4fb9a263b861dffdbaecf814d7fc8ddc59f1e9a7da886b3929f272f21bd86482ae91a40878bb364347399fd4adbe83a4762ebd05074d648972711a84b21891364b7151dbc02915f0cf8aa7ff5312307ce02ae79f3769908ec443b73de972400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 76c6b2798c8748c41f86c0faf3f39d80638edae630f1090d53eab29771ec16500c28fe07bb7cab699f06927f7526e4781bbe19a272a6615588bfed2a46ba9d32a884b5d9506d8240fff924a3452c1ee97a9388d4b89b0d4ffd119091936616ccafdf84c91ab2397ce42d7c3b696df9c608ddf3e54d1237a703167000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 9bf59a255de006ff43310eeaf7ffeae176343dd8001eea6b5462accaf9d044672e4197d76d4bad38d588f1a5d2759f12363a3ae11d711284d9fc076382ca74d791bf2522f442e20f28a09813a885e02f5b6d4beed8fdb07357d51caba28692e3e5c31c2c3d49bbc5616f20107999e98f7a179a871ebbef407198c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -98c93c4165da31cd29abde97eda07c45d73ad51055549d1c7bbc2c21f3f5198ae163b77ccd5715547064eab9660ac3906d12aece3f15a1de981087543be1d555f62304a014edfaa89defba6e4b54b8ffd5a714c21b35129286af7d0318ec661c07104187a7602f4d20579af33857f69d66b6d040c09581eea32c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3d179e36a1d0e4efd4dd664377ebeff19444aac8fb8bf0c14b1ca8a5201dbbbcf2967265d9f57400a3b5a8de22506918573d1b564a746adb7274542a76939d3de0cd8507aa42c21b0819a82eaac30b3e1a27d710ea0d2192b55272e17bf7fbedcc13b808b8c7419063dca827460c382e814d53d174063b46a3aa24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3b33561d2e57bb80c8650f7c37b56643e79106f1c720a918a4ef1b50c5d48064b74d45c8b6be850c46b91180ebd9acc348903982e344a567309c47f2148832005ad8a76a2c913c3c5318677db7715b34ca63e37de1021ddcedc8d97864c5fff63aa5305ce2dd9c5eb00ecc0b3ba6e0d6f9bb631f45b2548254c699000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b5ee3a5537881a82d2b902bc19c03e3452cf8c68b0d51b035cf407fa0401f5ddc214214d5e370cfeb79dd9a6074b5b45024e434bd496f2c6cb0fa43c9d7c937ac528423276a9522c7e912fb749c1b3348c1c16233689acb941620db2ce5c17bc19a5951d8ba03971682a8c6ed72bbc567b35a0d51d17c3cafd52d3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2bffe06c2ffba0c3433e151cb05757b3828f3ba3f0c70c2c5904c0bf97dba9781472de29926f73483b306436f9090b4b348066a739b20b8c2ade09129655e4ba5f881dd0835fe1cd2882c47981ec9d8b8e17a3eb118b1d140154d256267350220fb511021c44d6d5faee5c4f44e01bef1ccf650f17698d8121b20b2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -9363bbfc49e25bee01810e26a43a6ed2fc656373ccd2150160077c21999f6ffb28e4ccb72f71d561e4c7e96f73424ca95fc0d91207390ecea5c9a734ba29d2630bffe0ca62cdb463a8f0c777f4091edbf4671c6c12084961fa1aa165d8295d07450b232a11ec4c623e90ed2509495c37df86191adb33a4e1f22502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8c3177856867469356b377c22ebd0f1b74c9bdcf344d3bb9922831f975c5dde3a476da65cf0fbd54b0872841142fd8a20ea6429f1080c21a9d72f6cf3dc78ab0201dbc97c8300fd7e99d2ca05aa331d5997d6186129e48943b650c0c540a0a1d1e41e23ab53237692ffa42f4f479b1cfc4dba982eb56ccedceeb47c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 4653d3f456f75ffdb2a5ec505c575711d89cc5fbeea5aabebca9076b81d29b387c03514d026f4bd7fed944317dfb67cd9dfc96c85da5aeb31c1145a751c5274c733c69590356fa1f8b84c65e90d47de3a1b0d1d4074c19f2ec32d7d954109312d00e187fbd0ff6bd5600a8d7fada9eb174e4550c1fbbee2d05554c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -195e1bde5432f0770e7919b938a482f6925066eb122053f37774ca6802f33d94e9ae8bb48f189a253ff709fd54a72800e0fe86ed6623e33fcef1fcfdcedfcc58335f17dbd231c30291bb0b71de31741fe35f8e917dcd0afebb9f774234b744bdb453af05317e517c3057802d2bb9cef2927145d5f7c2417fc47f8198000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2988e0d78037693085ab15a5cf1232e96f5f0cf9889582925e1c278317f9f81a95243d27aa8121e70c3aff855d7d1a64ab11b04daf74564b9846b2040054313109f5f20a4c54f2d915447f8742d93f63ce5e45bebddc42b5f106c5b507c77c88622e42f527596b3f0d615fdbd36c7f32659ec81e0a27744aa5a654a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -571c5edc3314c11f2037d8b6d40beb11eabc217d2c30674b642c44532aa713f6acf5124688efd83707cf816d48813c110e38353b2d93cadf8d10b50531fcd7105b95370445e3b4be146dd27ab0a8850322106f859f895870a86f555496349b7480f857f5248adae6bc6cf89e9d752d0ce53666945c085f37fbc42710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 7c4acded9db498ac3ad6a84603a167c1a1a84de344edade71019d0d2e9a6a0dd1aefaa29e9310b1ff3ced5a9a0cb71cfefc6a8bda0a5c2e43bbd5d87d48cb64bea99acb6dd5f3d743ac19590455207ac081a9a4b2da914c70666f8f57250ba4099b194b69c823212c1ac7de9cf2badc85ac8abc36816db9d74f31150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -742c0ddb8a791965f039bcd066ca51f498d2bd0d6141439b1d65882cf861216a6d55a32d24bd58f2f9d82baa87969581848983235ef6263dadf161b60f01173a240d32d7720fa91237f6438c38c845013d2bfe19ace5865d05cf01939cb677f01402db1337db5d9ad842d56a0e0c6a1aff0c1f12b17602ddfffdca20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 83547886621b70cabbe0c9c41d1dadaad33dad8b45e194134c2868eabbb9039696cf0cd28fd4bfac182283d04059a74cef00027bf5209e79ae967dacc373124f0e21149e42572dbd3071cd3f66506ab2f81d1a83f62442cd063520075baf848f9c885aff295d397fc90eebfdaf94f731d3a42c7cab45bcfddeae4a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 87b38f78888717ee891b89a8754003110f60739c503f05d0d70f19fc594061feac2bd0efd2ddf2711fa6a829436731dbfaaa1b102a6690a1d3099cfcdacd99ab516b8a4c0dc94db3155882dc31251edab8b02265ce7817d016087f4946ec45aa72b7a9794049e037e9bbd22eac07984698b4ae2493df861fc7182ff40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -88606809e28c2f8e60ce003a807a2b296671b34b5eb68c0a411972f777d7a5cfaf17f99fd7b966e9aadf30c460b2bc15ee1662c8828c6974b899570720820f0af2ee529abc0c0a4b82ffb9ab2d222defa6e267c011306b1616af0f0ab86625ab461ca7ef64c6e88b76b354b4f171109d2cc00a626ea369f5702118e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3a75c1f6df832ab583216b36dc4d121991d98dded7211586b58e31bf997243ad331271c6257957da0c63f67e2dc7ca5994d9b8a53d0f5e541a9916f2b69f0310436042e74d1df47900a618c2731c354600d1ef5cbe9133d424c68964fca3f426ffb078d2cbf00d8affac02155cefd7a5f019a64a40e551571bac0fb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 34e7df32a6153f4aec68bb4ed7af88f31844996c4113566621d4e24799c5651fd42caffb49c3dcc2440cc9e778240289b9f137178e1ac3a4c385f9b53f690dd80fc5138bbe969c1e68d545ff2467798e079ee7a9ef972c80059352c55c6aec04678d5efb45aa1a3a11b80d7ae8cb7c4b56f1d0a08643d154b34164cd80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ff6d5a3da163d44edb4dce734a15ee42265a501a41e2b8640a1e14aa39355b6ae39a1e1d71dd4a862e6389d122948979b9729fe8eb4a2b353f5ae7ef8dae0c0bb71cf356af893a847b9454ac1dc3230e1427278586da366cddc693c5c2a7df1691bb6cda28d1775965b142a5430ec87cc6544919fbf66788509d943e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 77172a12ff1c5d696541c7f3357ecf66a182e2262954944f5e2e94e8802480d649682b5b867777b052d495263ec876bec84cc8223cfec015a77d8c24171a9c2141a2ca0547cf92d97d3bf17e11c9d308d86fadb8b41192ef0726958411aa97d86c62456220616354d6ff8772736f490d40f3daa3bd077a37df95eaf300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -fd977386718ad7f5c903835c46f4679c1bb4f3cd685e63c3cffbb1499a7e7a024bee803db563c900b091e7aefcc3f2facb3a1a84a73d097ff5ec456331173d1711f1b720e0d5cd023e7baa0abcf1d86de25574642aea7a12518b45e9dd199244c7690d1d5dd05c85d145af3a4d13fb15a087380768b9c1433385873a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2aeb1afa911597c72efac3d62dde42ebf0a3747825f6addc173a496e0f2b0f3379b1b437ee01307237201a98b82bb7b8efc3c75b6c1a051abe9427f49a21b4c08da61b6e424c91da9f812c48bd34dcf7579409bcb57bfe229a45c85c3fe708b1dd430244e428a84d6abbdd6e6cf60e726ffa39b0d46d483c6ea5f3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -dda534deedf303e8c951cc8b22cd423c10a013cccb8ab693c714c8827951462ee941c0203fb1e44460069c85aeacf8ad340c42fd64a6ae0530b9019f6f19d9b91dee2f2421e558f265124fed3cd7315f5bb3b4a8740c116e85a330583077200b8e08b9dc1a19b949498ba7b58ad46a112b1d0e04313c31d4da64efbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -65b91b20498c9c7c4855ba0781ccdf503885a5ca64d20932e9c77160650dc019ed758cf3b825cc0607ccde2475c5d7b98640b964547c4a5549170b703097998c5f50f1f50b590bf462c52cdd2c286221a9f55477bb2ca44e8d84de6d7a6a04411bb3aea1a21d9711192060cb13059c39cc95c42bfec648cc359a0eec400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2338a686a912fdd26744513a25586dd3f0a83426c5485c5bce03afc45c48dcfa45095e4bed7266001a698d009da9d8741aa192d63678e2ee3fda97c485988fffc438d2ad1bbbc0544316c958bdbdba3278b2a9b7878c3798229619c26b8f043eb32eb00ebce97395cb52e43f5136d7a451f452d7a5e1d1908207490cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -62763b2c80252956c6ba69952fd7a4da0316e326933b58d8d28bc800dea472df2f25773a74bd56fd085e43b0bfa8cc2ce0b1d2305c496a55098a63318c2f0c41b0c96d60f705a6651be9e749972db9f4e0f295c96dc7595873047dd4d3d39aec37261e674e0a7eb44afca9073abc750ef1b4ae4c51e43641bace9458000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -a09a615b8dbbc4164eee173db4f7ed7694d4dbab39c616c166d8b7415b12b0aee07c167f25636a2c41dfe22cfd53e69251c92ed8b81840b52bf4151fbf4d4198ced5d04ff87bd6d1e62dddec4719e550ec68c7e7ee9d54847aec82ad6be66552d5f2bb6d1a086b1b8f48a76157b006fc1959c21287db125f3d6d2f94e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8019236411550c1a232ff011be4bd4a7f8a1a36add27c7473b211abbaa04eb1700c43d1638637942de8e2b52de8ed1e173f21e99c4ebb919033f3d5e81f5f9a778a3683180b9649129752f42fefa25f0473af01d5bfc171f1d23e0fb56ea17f50c36ceb85eb6d4a8536722d76d3de040ca8c008682f028f9527383dcc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ef176cd0548f627aa68580c015508568474a57b351b79a72f5550c3af1721493865d0419884c94f0aac8de7bc09dc516d56b64612a6113b025d910d9d9c147fb6e610eb05ecc1f3838482b30f16808ceef35e888b881ec91e950992e3a6368991bd7d59d5b9ea8104d28b0293c1bf26583c2ecdad118293c5d4c8302a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 207de71220d3c498f31b4002f58c103bf0dc91394d16f50789c334eff81629deadf5db984e109f1b905a2adfff7d9eaa0da01ac0b369accf54002a1c7269270f4e9d3b345e1362140e6574199a8b1546f2bbd62bf6c44eea68d17d1a5962db43d464afd34b8a8d0da895bba38003916cb789e991720a0e644247fdb394000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = a8c8696c34af7c2564f341e3ebdc55d4c9bfc4340c49e68fe41aa2ddf1517147dd13bcb53358cf17ca9d0e9150a96425345d381c625c475e01c4412db2b2a4a9177973abb6032e60a7a756ba6d9944ec8b5259158ea7df6ca63ec53df886383cad3b376bf61127a501b5e929f46c7cbc7e9a8b377773b7cfa5e9325404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 618904aeb15733f7acd33fe331570964d2b90511567f90aded691b437a10efb80fcdc0f33295990bcf12ff9b7d805358c8672e79c19f278be5cfd45fa41f10af926d62c9e7db3a5aa3ea8cf6781c3758a0ce85bb44611517eb2d614163b1f29a33813fccfb2607c311524ae2d3f470501065f68c9c4aa9b281cfc1181c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -23e4bd86996a3c723a79419735a5680645120888264251835f79f2e2f27351b755c49bf424cdf9a076de8f1efed3b4eca33b1f7512d61cf1d1ac434c12152af7b56bbf5bbda31e2dcb8ce7f24fc377d1ef139d937f1729fa8ca13e25ef1d3c9402bdc1d585fd3c74cd334f3602ca7dcfb4bf3ec74e662ef5f7faca0bc60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = fc4337d9286de66a8fc0620bb5eee0d84d0647ce7dd0750fc8d60477c4ddd17ea7cfb6e37cae51c2e910d8fd769688aa79375e8133aa88d3b7e7ff25138c2c0eeceaecdc5079e0e385f517f94c9c9fb2adf25bca54e07ce5153672a5ace66ffb6b59de977ca903728d371ccb4a2fa03b8088e3550065cc2be89b3d9448000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 8b4e5f14eef22c3d3875c045b834190e7c6393dafea9c7654333fa635c64454600b006414770d933b1d32b9b2a5a4c6ad45344d5acc6b04c8c1828b69216e8d84b56f289c238af5333731de0befdc3542859ef5b194bf21aaac2c65690ae6ce4a8b283eddf0eff36dfe5a47b485a72210fbdf0751759e64085c4d761c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -eb0ff79a51a7201ab35826acb6a989d227968aa9418872c2cfc796c1cb350c2e9962f966242afca44dbecf8b29ce39eedc6a243a3ea0d834c8b564e1b4eeec154bef25d92cefe0c0991405a7c8906d21a319340f8a68893b5c791b4742f668e03a7d320e241e39328c6dbbc1b39fb9aadfab2b9b45ae3a50fa8f66dbcc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2f688bb244b42b2d81a3916ab131cfb99fac535c09a04d5e317f2ad40e324f39405c786c9fda059308d0fe27e3268d08c1e992939b9b11d30c46e5bde38966df1a1dfd7266604d48646f27947a6eefc592e5e39eca15dc356b7e0167d1ebad1ab4cfe103054c346504679c9ccb6936ad66663f3018cbd9bd02b5f7bc2ea0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3e075c62e753f95879405c932d23486d6f582dc9edd61dbaa3f922ce83cd9fe47624f050578c59e3a8938d51536f49d329b17f4b369bfb58b5e0621759889f4f106c5f579a34363c640133cf2a453289925662fa92a3cfa089b1dafd636d003ab4fadeecbb8c6aa6560271f55c417f933587a389f01b42f6f4ef06e1ffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = e2db71c0a47d30ffb02746eb1b82199e2f6f2ae5080eb757ea8aafaaf6a337415d59894cbd8eb1116ab23e095d7d3af6c5f7b7e58a06f8508d4b632741c4e587f2566faa0fe9c058e15346b075b84bbd7c9f29078fc084b6729e1bc34ef733df154b9e82e0a42cdc6c300ecb252bfb9b6cfd1a6db947a53621c2af916340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8bea87957fcb0be3662a250b913a7b8150b67a25af8c84a2a0f57d56b8b5245f548e616ec2631fd8e0bbdc474ef24b5a2ec59d109dfdd0610164d661616f2b7b383a955182a578e10f1323d773f25c8be307f810cef7f9cbcaffad301b38235af85019ab1bbd2a9ce3d0f67b06f3955545344b3d7008674b9bc48c868600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 416f8a67d9cb1579006b36311121f3bc5d1cfb602872a4b703041afe73fb8b8e57d961fe0cb8093d20d58f6b6c44e4f25fa499dc1b4f2f01af6b1864963f9cc58e113464d62271d401cc8bf5e47be0331fc2824e12188cdf3c9d7214bd415b6c49f7dfdf57071ec1cdd48502574a18fb9cf244ed5c202177929842b68300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -11871949c1deb938084b82205474233949354bbd2dfbe4b5b509a5c220f3cf071793911f8e935302e3e9886c41927690436ad08c64057a0ea080972cad71c833c560d98e2f2bf75f830d811787a542ac53000664905d3a0dd217966c8f961c1dae78f36b11a562d84946191aa3963549d0ed688d434a2a8a6ef804a113580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c97345c0f4d39fb5ef3e2a0eaaab76b63d32300d5009e627d1b25ab7daeca66fcdb66f3737cb4320248602aadf01872197d8db19453037168e83ac4befa2aa056a0965bee4df712ce0cce374d18f65cc96628b88c383afd0f76d23dcfab30950674eb91507fc0487839254e14d325278541a7de9841e1b5e45e7750c2fa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2ce483f8a675f7554e931df7ad5a3d31b6f7ffb7bae0b442a0458827ca6cd3fbacf94e828c44dc54576fff5d8064478df295b385bf4a1a9b66f954b8035e921969d4ca5f6d46ab0314acfcc81c6b3900dacfa0d77c473bf66d735fabbdb563475200ab52dae57ecb9be438c3a4e35d6a46b258f7265bbfb9b7bff5e7bb600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -748ae2b7abf20ff1bbb704e0598529ca8abc66f6ba12ec5197553c73456e9690befdb624203a9b5d967ea657be7fa0c42238659d5a10c2ab207813013b696dd86a046b9d16876dd2e81519b3da2fdd247bae1111f8bce5faab675498ae7cfc739fd3c480b037c87f544e93a3d51858f9e84e1d5ded0e065fe92d653092200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -30fae4da020d1b96f25e28250e7dff3ed50133fe66ced7659dda647d0febb9a191b65872f1379e8078cc257d3aac4eba0d57010a03616cd55d7fef522822ecff283eb683c2cdb7ad9bdfbadfbcc75bd5a474098507774751adba349e72b6de4388284fc8ba1dcb2bfd181ad55a31103075db3f3b0a8b9b06a97cea4c755600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1527bd8a59814bd5034f332e1d1c1104d109feabfecf4201994cc15a953311f550e5fa6fb63dd9d49404efeb1e02669a8b3dfeb6c3f8b7c9239b1ade51a3a462deaf7ba1b21c7ec2d823ee2eb31449c6b9338314b938b5f509bfef1e293b55237810e2efc22d92cee77696933d1d400a3f23e79c406a587eba1283f2403800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 92b4114cd087b0ff8037873ceb08e2e4d70eced4de49f514e2e12f4fca2aae3b94510fe7cd4e277a3920c067d56de572df9ae57f3231dffae00f4bd2b08918d9cc71a32d20335094b4af4c464cc6860c90b6066439c8ff34c37c2206ad32bdd2c8e2546fa695f8dc4fd7f2b85c97c912a78afcb0ace03cded44c4a65f57c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 16a43b210bd2aa20ddb3cef8c3baf66f2291b05adc0df2c35d7560d8e0eda5f19f11281d1c7b40926333e7f420a1aaf587c9bc216f2f579e4f0cce3af1ba5218bfe15c2b63632a0a006a67d6264374ec3927b64cc76ee5b5e9e5897f718535fb0d917a429ceda378b0f76c9861662f3cc9807369c85690578868dc12804b800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 212d9b2893f14bd963373b7efcfb263cfc9cc95e345908faf4d283faa83e336548e5f257f8da850fa4645a9f28df4c36f26f3189ae626409db2de11a3b8aba3e2d89e95d4fc6937f1c452e916ce01c91bf8314e4bb1e38a26035fb33defd0be2ffeed1e50c046a2cde9d872fad1650d4f6ae82ad77eb9247fcc3c108e279800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4e48af5a539eb16cc84fd2dbd9dbdc6552d4992fa3ce9ec4bcb17cad082b73474afd59efcdd75720d4d198dcf05bfbfa9757c227aac4c0362a507cefa3c413eff54144c61f08b5bde17e8efb0e5ef5337b3dabbbae1fe34f96fea04a5c2c3cf24dc90ef0f14dab82660d2cd61035c566e6484e5b8861aabe29f0dfafef86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e8ca19bac0c67881165097eafc4b008206ecc3c58bc496344c0185e5d1f12cef44d856719d7c93941313da6ddf80c39b6320ac5f8cbec308718feff4d3534489b810045fb38b1bdbe761e465c23c6935759aa0a0c0ef551209e979c6838ba23988d6bc49fc06e5c1d0fe395db4ce0687f9c441ef32149e3f8523245272cd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -19f21057422a4f269fa2d00dc46669876b84accc161d198f29d840e936a2910a8b0b6593a54f1ba3a6b3cd23735aee230f0ba1855aab0d0bc9f798f46f89996bed9e981abde24e3b593a53bd9ca0997f25bf95743213a0cdb8051a245e3e274cf023e8486585dc602719e32a8754d7f4089d30c86f5cc995e08d52750230a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 36cc89303c9cb72d9fe47b167b9c5fa0ed0f2f326ea4d1f4f9e50cee4ff76912755f1f6496a634a18092303f9725c769504d9e5d1b4e351773587efa96b0fe5177139d92fe9b72d9e9d3adcd12deae96f59b493dda6edcc2cd2d9c7006ec639d4d7a538a0ef89f1bb010e5f0aa2394a0662fef59555c7ed15336e7cf5215c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -d82d5a96a3b2b457bf961b01030ce0fecc3578137b30e4eb1275ba2e66806fe90eae0468418d0f9629b8500414e2b9432e7e89c36cda2f1e2d25b96a67f12773c27cc5e8c098f5f0046695bddc5389f13752f41f0c4a79ed9406e916642b7789591cb9c3739af86a2a8b9f6942a846edc6e920f663c14036f67c2f15e1b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -97d0818ff37321bb5f193e063ed1dedab3cb2f5ae4fcd975a700cdbee73d7f9662ce91c9e9b7707801cb2c82dde73df1a1598046814200918c35df28396600b3019102bf309160734f4a33f1d7739207ed21f2ab006be5e5ef7ecdb50ba38570182321dd76088c55955e8fe341be98eb0865209d1be8c6e8cf252913abd94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1e5b8679355b539e6d72260ea0d7b989ca2be69d8b9116f5e991cd01edf996298b89181cc0ff0ef1cea85d721adfc2aa8f9d4e1051c52a73f74d76268e418800f274197c483d40163ea49e82915ca06fae6720c0dbe1d6c38063d6db43015afcdffe59db7eb69d387aa65d96a81dfcae3c7a41a94283d700a8a5aea5dd8c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1ca2347408940468dd593fdb32f7ec0469f699940a2f076dd51470f7c78fcc5df63a0fee855cda122c798947f41c5ba820562bfee3b0968ba03b54ddea35a65ad61707be506cb8b90ff30c4f738337fda1ba2efea3aa07174c1a7216dcb89942bf71bf8f4066da6772aa7656b19b543437a794f411b9cdefb21f9d3fa09ea8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -9b4ab9f0d8f2a5ca33762d419e2643b4e647060f7589c4b9db1c32abf78fa842f66aa49bed3545edf5451223c0b52278cd3a28cf17bb63b42afd17ab2d3d613dcf33066200e57265af2a7e32596d662be11b50b6bdf804b5cee16b276799a4affe483c21fcc88b2593dcac4dbb7f28e31241bf77f3278eab2e952bcb479310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = caa51572d208f08e44ba262e0fca15782e256793124453ee5e77579211970e8ecf676e6dfcf826c67bab08ac06ca271ad6ceaf0940d102fb08cc27f062bcb15a3fa3a66f87ea227bb552e2dc7a72d539761da2222740e8b484072381485a2623ee7fe50f91bb5e1127c7cd3f4caba5cbc12a5d2b2e39b59c79959547203850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -16c3d6aa23c80c607f3163520e023fe57e8305c4c5bd39e04445ad448a5bf4dac9bbb1711c96604bbfe72abbaae4107791dd6b12dd9924195122d6cf2a2202a0728a92a952a2bf0752fde6523648bc8cdd48c659b8a67530f6bc522382da8df2e0d63ab907ff4432a0f94f5c0fc88a6208bfea3fe1fea8d8c37dbd203ef5d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -20f95f1409b1de44509c4241637e838bb32639f548236b8077a11c3300a0df3d2bab1049ca7034522e96f49711797085df01a545a003131a9a018521fdf652d586e781bd4067ed8a5434b9eb77b5a411e15c95f78496b9bff09b621f47c85e05039f1ff4de842cda4204479e1674527c286abb940b233490608e27cd7787680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f434274c044a33267e8e8ba99b694b608637d4e8fd67ea9798f2e379904c901e159edf3d293510e8f41df254853aa48d373fd8995f64f314b7b03306bc7b90d0fc2126b35d67ea75f58e5b4fc59087de7a8921d8ae600203fe033d6a44b514cae149e7c683a3ec50c004fed9f89029febdda2b1178fe903c0ac16f0920b3900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -8c9d6313f83e8e2a1b1a229d891dfff7cc8f5c86f2b2d535be5666e78defec8bd6282328a445c6c84083aeedfb3acf5f58976bbabba1de8686315119bebee7d58bb7109702238cbe64e1e6862b67078ce00e5feb964ae1db5b957d78127263dbfa5b474189507cf69683b4ea535ad8517fd9f9abc6b7228b439bfb1e1898180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -15d1b17b521be28ff2d5d09a62861690098f31c14e1b10349cdca17f2165e5c8ba6e160a886af85415bbd36754ce8985b3108fca9ee3fd1e81d47b5e72f557be693a02b0b1b48d11b8dbae02786590b7051b378c6381e88a76b6477d99028adaf42a7c55c50c5d2e6c58c31c0b378282c1ce838e5f53f3b931b34a767bb8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -258fc9984f75e7110e9bf47c3c2aec7de4c49d3a0d96c22ecad8c246847ed964fbd52f818c14eb1628f25f5e276ce7c676d653027fbf176c9fae8b01cff65b50da4d7b4338a82206a26e69db872ac1c7af707b69434ab976a0c627907f67e066310c8c0d97f5365b6755a4d5608898fb13b319c9a701c9c888fe81c1e3581c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 51969d1d27c73cd3cc789f470c91126e1d0e3796ea39a09105bc40ff4fc4bd00c2182a71c8f1d9e79295a275873fc03bf55abcaf248f1d0b845c11115f342c3ae765a9fde32f01ca796d12f34464e084c361ced775af41d54a58f4d9f0f827fef97c33bbea38510828c4e553c2eb9636d261ef4143fefd5075837e05ae435700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -eb1d2a6f39f18a1f7ed9527c4a24df32a297c6bca4e2becaaaace0a2da0873cca08e71704fbfbb41ae4e8ecfebc5d9c9cce1dcf06eb520b67bef67f4a21be9d09cd151b14ab0c1e1b92a7dc686cf58c8a0b8ee9e541f8c994f3589cd609eab345df5b7ecc9507fa99eb38901aa5f76a396b3e61ff6c5a1167777ecc298320700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3996694c79eb5603e105e6ef36844601b8d92b61d39fd369269c5d70bf4a15b3c30009ce5ce58e8ae9793558d770f07a2b788ba7f7d7fa7c3fee4c18f9b3a4f08b1b7f78d9d3822609d66698e5ce0da2676e47ee992fd7f8271ccc60df1b096523d028d32139243d17f37522987c55353506e30f616fc508df22d5d8092994400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1932f5d828b2c2a20b45599336e1a8d5964f74347d52d864486875552ef08abce10df7ab88c763bf12b51071a54c1a00f880c1c1022fbaa71724131aba4c17793899f8120db0e7ff6c9d1702648404b92638a10e0552e10e2c1c1aa5c72e9146decf31ba9460d02af93c97e407a828c915f12ec6877cbfd2791e1cf4db8b18600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 4bbacd4000540734947206066144d599fcea0f926a9b4d23d761b07f5085c8b39702f2054f9509edda38cfdb42370b74eb07a452f888e8946fd319503220255b699dddc6ca53e863529decef0fe1d904dd849a6cd7f82971c73c1fd1584f348fff1871c8431cd0965916e61b9c3cb44e03242e748140cca020b10812681d0c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -a0a9024b63e7fd73e51a6bbd469ea28353581af323e9c18230afc3cdeb4a2eed8595df4238bacecb4d108b4a935d18ab5e7b41dd9270f25b8972a2431f2fcfb3639c546b507a420ba2163070f949c81f2f9af52165b99dedcb1fd5c5ee71ec587bb03fe846bf68250003ab122ccfdcd0ecb1eba5666bc7fe42108e88fb13d3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 29839cb4f399406c6dc9a8cc64c8ea2416c78274408162b5db901ba49253606a0db14d03b7167e7b9fa0e710bb22efdea52b48129a8f1d049c3c2cacd7420fbc302b2f50cc427a72b58d70bcd56643066b74e41d38f212a6861570edaf401e888776b94fd2881e835134fcd29914f32178691baf6d5b736dafab6669a4d70e7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 370b69ee1bcc8faa1c69444c0f5b2bf1a7e01bde9813218e06257480bac2c418915a4de484b45a7a8bc4654d3bbbcbbf219624028e8271d5303ca522b790ed180cf8de2a821b6bacad2d16eeb29e652de2eb9a6fd4949f31d99903fcf2ff474c208ab333665687ba964ed519e5005bd787f244826497c3da8540d4c03c3483b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -aede873ec348b7b39d7ccc579b13bfb6317b7d72f0c10f3d81a150038f53ef57545db6b4e0a6a7b35b169787121ac988e232f515c73dafc37340b8d4ffce6bf5c6afbd25b68a1a1e9b94028269e2db55c46fc4732d2befb5369cb92162b9ab296e8fdf434fb58696d9b44bc0e7a3a48cc19d26e55e4e574a57d63d89428fd6c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = a64eaa0c5dafacddf7669c68426a41f073019211f683c55dd4ffed1cad5867da4a654124eb1a366a78792f1b5f4703bc2cf5335a882cfd282df18d2a0c6c6edf0ebcd8fda28da626c0227c16ac40447f6cc6b836aad4c84f6701c782fcb403f15c2492c510dd3fe98e0cc3414fa881b4d922155547d2f50d05e39d9e0351e23000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1b16988d68303cbd170200da70eae638a29024d6f448feb2b0e0ff00093c436de69b508a2efd72f8cdfccff523c99ec210080535e73da35bfb528dd399c82a08ea878832b39f01ebf96c9e0e04811538bb6ec4c55f64630ce7241ae75bd2c2d92497d3fb517099a3c6b32f2fe70ddc4fbacf1d9aab68b7499d5162ceec47fe34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -463f96c2000c90919a4ac824162532ffbf011498c1531416ace09ce4effd78fcd417a63c457ca52bde6b0c69fabec529ab7be77c48515558f7913695c9141315089339359cb48d5e82b7effd852f4f6051bd10107dcb074d7e265b7f45dcc49a9682d76d1e6976604ea695f8b5bfa3108f5a0ace9a3c021bfe645342b243960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -fb07df943d8e44a6a5d1c0f76b547e3ceb4ce5a8071c93b59db41bbf989fcdd7481a78bc077550e359eb1f7ab59fdf92b8381fb8d845f4eb2811cb5a41297f832a6b8e2031f7c6d29788f1006a8c63d3d0263892a088c19a69d7b98eb563502c3b6d1839bf22d8eee378ef3964869d14d8839f95c876769f7f2d23bb69b9d760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 456248c3ef5ae78efca922630f53f89658a02f4e8006d05eb23f5f4e85b68eada1270046cc44f0aa78edef24624727f6ae46da95c7cd0b4fb27229cf86c386c5cec9743e3e08cd041c2ecec760fab05afa5abf27013877d93ea532fe974aea584ccddb9f03468e277a5f670bd95ef307d778a726516cf21df00bde4eb9e28430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2145a1a13137a503c6eba1bf9bb766b127ecb4f73ee3969d57f0d30dc5b60798af3d53cc0b4848330567861789c4a7048aec4edb5848a9b9bdfee8aebbaf6f16bd398d091fd0e6ae5be5bb4d5f44d60768fac70ce4549515890bdd67a34eaf004120360a1a0e7c52ff9f6a3ff931d5146c8624f1e6421a3fbc44f04060d3d96a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1216b969557c239a99240144408a8aabf697b0ff91573bea4f23664f7c7bf7fe0f1408da1caa659899f1cfc3d4f0bcba78c69c1c54c5c4a385fe04065f69dd3878e8a23aece138df3be01bfd345184cce8e2118d53f6d22e7a7d397c3739423f4a4032c63c715383c0b6ca49953aff993d8b78406468bfe4d807a8e72547604e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = acc3eddaa918087e1bf9b9d469ed80c74ee5d71366ef21b6d13a2e0d1390b69c1ca673a850141ce5c5beeed3d9f08344b126b78ae97594061e2831aadde08096526fffccb2f0867b50a300e8dc6e8349301a229e2850005b790ae94ed399a860f8420dec999df0c9ffd53500a3ab9f92a884fa6ecef8449ea03577410165cf7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -76848b60f7cd9cebbe9570ab9f64d20754cc1b2888e48efc86c51079d18cfb0de410d9a64e556361ea9f0dd6845cbdd528489c65eafb298781f76b778dc33511fedcc2a6afb87e2553c63ebb9515c6635fde850cc7a00b6f8b5717050bed4d5a864609e4f2023efa077efca406ce65c8a0a3c0c66ccd9e3fcbd703933d90e5d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9066e8823853b1a423b03739ee64769b8aa449488b8a152926f02305e886b30736bb61140bea898ed28da305a51b5fe39a03554b46abf998e90556f10b2e5d4ed1463b41b591ad987870b074c05b0589136432c736ad813346291200c78e57847c8a03ade48729a1353b7e52e3d284adb7005981e9704a25e91fbff09baeb4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b6a555f4918ea404fe273163630e859041439c75b14d68bb5dca20791660e3a9682b7a2d686423d80c09286e4f80ec08965f6b8c3a46489708d02fba567e7ff898e272bf55e4bf0fc27f7f407c19f5573d8aa113cd18320e506e3423bf709ec65de2e9bad5906ad0e47ffc61a38d98afd6b5875d0def37ac495d650051285cbe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 637919c5ed41184df439972049c36760a8d9a2195c246884aac16294924cc276be69b48bc9328522ae518c3dae992bc79b98d9c48724b34a36e04c7ffdd5d063c08e023a528cc475122daf8e2549631808bcf245c0583b9a460fcfd9806197d4724221e123ba87432dc16f530d7f786b3af0d54d2dae3cbf2fcfaead0f27e3eec0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -2064bd2e441167ac18dd98205ce704c070663eef09d2e38331918fe0917e92aff87ab929e1d4487ca12543e61bee8dfa75efce2301c3e0c5fadd097459ffbca3486864487b8db614a94b0b53b91e300404668323a3c2df9e21419825d87885da478f287272adb706e7704d2843a4facc2ed891f0dfd3ceec2921fdb4fd05c1f280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3984d014fd7e7640ce2faef65dd2d3ebb375a5015622e20c9b9fa102dc27ae955d8c86b27f8b84a63d935ace035bdccc6f440a3bd82a15f8e5bec382e3e039bbaabb14212c5d6d40633e00ea736420841448f7cc923f983b38645a2a435fdc507ada1f44f2fdb139c0dd0f9f27382d9b3bd5e521dce81e94114fde74dcd8691e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 28be7e4d7d5e387bf81bdc9acea5667522ca0453ca57aff122cef74b71cef8154e3aa3217302eefba88d8608dc5e343cc4c2649a6e76ce9f049346266cc13919c7e6eac8d40e5ddb44a073cd1311e735c1280b7eaca8b3a2941c3b7a08a777a53ebdd8e93c2f61788a7fdbff73e340e27a9ce1464047043e203a32173ed36919d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = fef191d5831acf0c2b9ff953f2455aaf52acab805ccb3b726e82f2da9c155b8c78749fa6136f31988db9c2a2d78554b89b2f88c5ddf0e914cbd4cd4f59a1dc22b737a942c57be59f0ef92464a6798776779ee70c1d2ed98b5646e80935d35a08df0678ed6a91bd756718c68f1224808e051ca40610361527e5bfd3d0606c4c22100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5ee8758b8c20283579a6c94a384f1d8a726d91740fd09f5227a4337a62da2f4dcb25a1c8ad48ceb3bae7e646bac6326e634c2520ad7939ef4e9c46599e8d825b39d4bfbb27e1d13376b304bf6d7ea89447302ea014c3b3c4905ad2236245f7b2d834c5050515351819664c5939a4445406481d82f0bc21561809cf5cdfa0663bc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 22111dace0da89e209b06417e8c07f134e3e44833ab0fc2b4579558bdf1b8a437ab9f22153205be7c735a303bd7aa2a7601dd24602f23c3022c0bf7feea41117179d503b797362806b64d1ddfa22fe5f949cfdf2c81f907ccd1746f5eddb591d5ef5e8c91b17241048946ce09c17fbeac9c247f857f202a34e24c093cdff4585ba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2df5a807dc01a4067482b8524c649ab0f95bf24f99c4e9265e10eebea2a9571d801e994349dad0af51a02a19a4eaf15eeaac5883a7b3f8fd5414c0b10e7c809a5aa5a11767e10d2fcaa8171fd67d0b98fdf4dfefabbb8efbc25ef730c687514bc4f3cb0c724337de8b5f09aaafff2d8f982e41b6d9388d050773c714d48c4050d400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -4c96ca21bb6a565ba3a99d26aa5c87bca4037aa3fd6120ebcc65522d483d1fbff8921812f433679d35a6d18d2c9717695635cb0db32e9abfbf0f7fcbf9cd18f7b4243ee61d325709ad4cd24f702cff21d08058709365a787c2c377d382b315bba75ac743277d0b0a9f2b4ec437e5242443e274025fec11bb07c4439fc4e7a6d2ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 59497b7ebeaac2c81a0b6265ec20d6e2143278f574dfde2c1664f7ef14d89c141796e1c4218e8c1e81b7bba80609ce6d7561c6677f4c53dc9deb358ffec6e5ffa40cfe4722a1be7817b8e6732124aa4b17ef1ec663f423f1ab8c2c7e4af073b38252a69e2818202d166f1f39d3f83d753e0e6bfb7a8c3e62d58b6aac5a25f3a6d400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1e00c2863a6d918de2ca1925fe32a7216c8164ba508c7d38eccbb592aa39ef365129c398c7c1ae14491573c896626c6ca64122c894a6b48bead61b540508d776b93f11eeab9a665ef54700694c3799f5e4d647540c3fd5553bd09b3d1a3f27745549aa33adff1a0ee4241c75d9d9c5d1e4fd3103f614b740a7e4cb3fc1675e3624800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1241c5b30d86f9ca8eff910f3943c98233d3bd30d8626f4a25b5aea5c0c91ddfe303c943248b29c49788cabf9e6f77c9052e8e4f9aee2ec20c727e4d328c60f9a99f39125429fe0258f56f7ce3199e579feb965be6118d72c01ce2a072a0e8ebaa2dcd0bdfc46503bbb8ad220002d3829167a82ee2708bef14a3af66d719cb1061000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -a7e5e6ac9eb543d5d8208c46aa7d7df604ec5a8accbb0713135a101a15930ee7ff23a18bcd368cf151d5a679cea86062b1368e8d6cec2f01728483b4e828e6ec418b3f0ebdab8ffe69324775232c4ab45d0fcd79f9b37d6abc4aa6dd0e7c2822a30797b353897ff2d347e1039443363d72f98bc966c59df6a715d3add86ecf419e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f40056d68ea45bec8e56855f77892c40cc812e7d82407df5a70acab437942b634317a362918f149f0ce3c101d72a54b9d81617a68830e746d0e024b597c629c97a0283b757ebafbd2553aa30ab51cf3e39d2573bc9c97663875b08e9820f30c498cc4347f26798411de5d81d36d92da8977d1fe3e3c10fd203a4f964ba45fce829000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -579a6dd9fc0b5c971bebcf421a155605e268d0ecc17ae858ffee8aca2b425eb4772879cadff7c2ef29d274ca06b3a42a4a63d0328de1e7bb1297b3288cc2c5150213ea710588fc48e2eda02241611d1ecfe2fa46e6e72a9592baced5177c762890dd6b19ffc58f409ef5374489a32f2a13efa6e08165f84966481a4c948d6a777a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -10e2df8a8184a10b44303e9b9fff5ff161f7c96a474f6b5e225b8bd5fa15bf9d034a11c4b54c871fdc97f4177410fc771c484aa900f9be0d7449f46ab36798f858c9ffd409954ec42f1c46c7a8b2780179b43eecb6084731e3fed16fe48ebc716e4b95e3e257254e4456001aba5c7d244285ada0b07f4c4981dd5e8090e871658c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -91b0c39f217b842fc3de8a338cc1262ca84b281fba73ede688150e728f6614ccad4689afc8040c57e3572ea6c17c9ddcc468e9ddd3f36c391b043d8e068cbbb8993131c5c45c6aa0dfa72a78e58e96d5e801f60120b55578b4ee3858252dd2e875f6042c22167dbd87f3bff9f6d60958b0958f7aa191ca03c819f647757ee579a3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -a4d780393ea8070b9e3df83d6e5f527464e4fc9c80ec0d30a4376645879bb4135e8b5968b1673c45366a105101835d22b13038629b9f83c7de20c4985b3776c8f1128b8e3bb478fad9e39ab6b6743fc20e9787d1e7290c2040656dc1bcfe8acf9dfa4c925fd3c0a06c93f46ebd57ce775845a95602967de7ff1c539dc6f650f37c4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 28abbea60cf5f40c3ac52d10991f0dd744ac5f87bf3138f35034c1686c358d1b8103a9a91998655ee29f38b9da99056c1388616e18ccd8ead711fd4dec7953d58b0d66cf03100ed4a89a3b448e18fea26bd91f37fa79cfcd58ca0afcda065ee1543f6f7d35c97196edd057ef79e8502f24aba4d8a4d5cef231c4cabf5ee9856abd88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -77fd04b975ad0abc97c0481d33754894f96e50a16f99b4d14c4eb84789228f8d45b7d843038afe04088e4873c59acaf0567dbfb57855cdc8f16d5dd92c86f10811274c6d4da85cd1f88c413fb57f3c145a666bd1e63cdb369ca58c9bb774f622d1f937cdc8eeca1ece27f0b12c1e0fbded6af6bbf4bfeb52d73ebd9e0bd248c7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = d642e15ace3f0f1444252138017dc1017d62b74e5a3adee4170e1ac886cbbe4aa572153217ca14a350d13bdf9d5f102b42849ecadf3d470cd30b61ed24afd36c0b148634d6726b7d58162328084ab395ef3774db1bae7b15219df8b88fee0d7f4b46db80970b31be19b5f5f64c6ed7ec288489944e22613f8fe016d943b51280abd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5e220a6ca70ecd7ce3c74956a05bb2604fa7a54b863fcfee65b19ab55885af7edaa84308e23efeb9f62de73c43c2b68b71fc406b19b172af57568044026f688f226eeff8a748b8ca23742b4a62d8e7ff9a2a9e661e1f0257ac0645d7a429740cdf6623751e009c3b845444b1c84016fb500b039a130139a2a837b2385b6a28aeb170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2b1010fe718fb84086aa87ca3b823815316f038861971157b7a5631ee93910ed8e2ee15abe284d44a0d8d23f8ef8e204c5364933aa933d422b26c7edea2d8401b4f438c477dce93df131d7c6edd0c0a181784f7415b47ef53b4f74d9b80cec160b0500b6bce2c0f1411abc6eda0660e403dbc527bd549214184bb96bbb980f0d0a2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2bd0e11970066936256d0d659c83d969d26638799996d0a0345b89a83f18b4d4ca59bd9d53d440b84286c22ed5ce64426d3301bd039f6b513e72482bc0ffd3330db509d3a672723e0afefcf3c222f84f9f27a4a00b29f1c02a908afd01dce7d616c4663c3e6d2dea3443821e35fc9acc6feaccc340bb2bc987bc6934a3aaa94e2c7e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3e6b717fc2a49427743e553ca63c186701e605ce1bedb7e80643aa5ab629336c155180816c74416a2da0c8767c3b6c43f16d276f8fb8f819cd8af9fb1189663dab07357c3f8ebb0cd0fd4c0280ce5902a442bd0b3806d6ae0396fb5b20c0a7340dc064b34f6395863cdae6077e4978c4a3fcec84275fdd81cbec446653eee86258200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e009d6e57d8befedfe77cc1e5d86e7a57f7ee83a9e77b7156a22d6107e4d033020754aae2c76873bb189075c095bfbe00af160b501034b4fa16cc05876aed9e0df31b24463fef1ef6c120199ae1e52c32fececc7abf373fa25e1b2bf27c754be4824e79453951aef3aaa58224ceec9844f953bfe1eb35ec86078cd7690d932a9d3d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3aa6d9e782eeb281ea33c26ef1afd397a00cde263a9b5333d5d829467e924dc49a7e927bf82782d0539049b1fabb18f9f5cac78eee46e191ab5173fb96caaf8167461415887fecffe113ab901dbbb6b5c60da3d343e53cad585c5d94de2fcd42cc8a804d667b63a8368bb2d346f9d50deb29f8261156e9e6e01b5a6f0dba093ddbf680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 32bbdd9582323a87045c80bd4599143b2ed927713d3336a084b5a8a010e81453356c4660fee832960cbdaf37afc22697a440c07ef8936b7f90421415367c41a8f6b205e8d7bfce36d70898500a8daeb15055ab909b471acdc4658e84afa3528ee8f1888f13d4981bc9b8b274d2c3c6e260d2012c4b4522bc976d22a0eb572cf6eacf80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = ea9e07e4dded1f772c6148eef99bc188d9602bec1fb713bb3c28d94ba102828efd8e65725609118075960da09695e9bb42a94d19ba5b54f15e1ab9eca7e59cfbdb5a65e76a0c8fa824e336fca63cf511baf8bfecbb6c25aa0969c5ec56974fe2cd64d8a109bb46caf45a4e044c6854d31637846091b99f6343754df8f70256abe82900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b3b083fa03d98ecd79ab28c9ee2bbeb365c53263c6da226b528b33eb5b63f967929488b4eec139fd8dd6b647db3cbd07ab33bfb113bc90fe50aecb8f7919980c28568398d0a3e5e484c83d89498bc67d23da5793bd19302625951987dcef2ec8b622fb8db13238614a24390a2bc8e37af38ffc7011196afb7f865fb184de7cc6546f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 221eb6971cb9041128d7e4498a68238fa07dc5cd7693d09b03523ab1b8026f1121b973fab312da0d46f4bfeecab155da0018c343b479b2b50c52c024528aebbc9eba803d8c7b02121aa241e7e69a25d8896138e1a693f6faabb90d1d49f45a2e573646f59b3476a0450d3b93bc56121bdd4099c706c4db287c8bcb76dcf24a1401f5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 19bb09ace014ed245c13df13e8005c9f307e6c3f8d3b6fb255b2f33fa93ff270b0972ca248119e64a3536f30c233fb29a135a9301429d885c2d43c75032307d4320a26c90a2832e4ba33d64b8115abe69677a8574167add7e441c1918a8e876af3d19a36220ae8b00d26f1a706ac5937854bda319332d304f400687a79b46d68dc90600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -94bbe82c7507658c1aa3521d38de789eac9d85d9ae2aae767deaaef7339cbf900144235b18dae17e99b79701629c23899702802a1a2ddbf0196625dc0ce5b84544c8408287b95835b7131efbf2c44cdb1fcc62f0820bf600e60eec2b43fb8f9d3fa1e619ca5e6bc16f0ef298803202de7719bede00dfd04132dc2ace7523a831a286c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3637aff6430b75003e31a7397b7eddc1557714fadf4cd0a99f30a53bff9f9460e1b7b89908f7513189810749d4d1065224f4fc703417d9e960ed298ebca64e9d322337813024dc7ce2dfecf099a57a3d039bfe132a2439fb7c58bc0e1bac9ac97221a7dbe086dca70750a700d64e772cc9d8d9e62e1b700600f99c1c45ae3cb2d368c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -12228d7f6a6bdf3d655db12535ee699ca8e797f4bad01552806f0a2e2f4a82cb56591b2455f27fb02033a776b105aba006380d9d60c54eb452943d05ac17b474a4be4f8058851dfce5a20651cd79ffdeba4f395e585ee2d98f0d606ed755ad585199a3787d6ef4d439746d6d97ffb97e870fb68913075caf03f2bd4772817c554e738000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 188acb32d7bd55c1f2a511aebe8601530b5343375ccab7a0b38d336c0e20991f8d1086e52cc5198a3d479236616e12a75ec64e3b4f9d2893cad884a63ba44f6d6007c0991669382004c1bb4ad78bd184b96c60703c5386786cb4c7bad062f93857c4ea9f98257e4e44d5601e9ff8135739dfd6b9d74caed202e582dae013bd618abbc800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -c89f98f402236d785add1115ec1261387bd197af08f65a9eeb94e4b972c1ffbbb691a7e5cf2c2089efa5529dfb0f9502beae6ed7c88f1521ce437ec744bf317a23aa00f3d671fdc1721abce4a3148e0da6815507fa06a6dbf744c9d33c36a05e0fbbbcc3fcabfd0eb0a67d7fdb3e893519e42a0314f93933ad2650fafe57e59bdf936000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -52bdef22ccfa5c7bf272eb00e20fb6393e973c38476886ba1390de8a9317bb0b7966207e0a6fa78a5c0edd0b9f034d9a17ca692f965159d00bfb0727a162b797f0463c70da612a5901e6e630330ff630b9fe42c9afde9b348c8ced42f481f29e2104f84c4107d946e9fc84d95ef6ebca0052f175bcc36778375817c6515a324a4adc9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 39f0c03b27ea3e9348d3dd6f1000bd87386895e3d5ae6ff3f58851bd07a3ac50091ea4aa54461eef4fc26113341afc9f6a08e6cd4c04295802f394f6cbae4b644b05c051533c25e09786bc9c2b3c722b2fd26bd6c8b863d25276e6cb06cb77292131bf3306cb37696c0d275ff60cd28f0d150992d4acc219a0d542b2ffff4259a8708a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c56b34e490d66ae17eb2922a9fedd71a9e3a1310bd373c25327404b6c35255e0e1c4854af2368b6a336fb9bfc35d337cfd313a9b866cad9a62b511b803ec579a1d1d6bdb03b978b03df63f99783e9d06402c12a4ddb4abb2194d6c737fd422ec0c4685e51d7b2025fd3c4c80522cd27d99ffb6115ef37f9c70b75a756be66df1bdae4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -ecd939e8af21e998eefda6afb3412e13fe3f2ed854f457fb0f9dc62b7ff2a548477af16c371322f538c551bb34998a4ef15244d4ef5a741d047cc873d432d38795363be15142df0c85fb084e16a1c4f8410836152988754887ddece6ae35540172fae31de59c22d3078d4d39496732834fd84281b5188ee5cac0bb74fce82c90c73ce0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -b1477e6625e92c5f0d9e550ebb984136b82ff9f6a55b1da874cd0a05faf13e8a558b9a90eda86272388cab2301fff1cc9f51c3edf1e28ec0408ee1f7a4dd550b3261682f10976f9163bf4fd2a0c21b45b822c162a32cb4deed5fbda47844e05df8059c9472cbfc55af00a2aa78a08c76fd429eeb494d3abc9a74f4fbf12aa2badf29e8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -28d10de50fb99aeff90148a82cd57e6528764c7a09cf0bad4dca57eff1c5ea2a6ab16d12ec9c8277396dd67f841c35c86b26382ad1813ed2451c54edc7cfa0e36bfd7ef1cf8aa0de5f0dada2df21917ea541ba839e0e05aa4b239b0bfd274d3f730cad29b4ad18c5ed14766c922d199c2dab8de3126e26f4913c904d7395e05d94e6988000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 215b62771393b15022a82f7143a196f570de4b33b5daa49505138bee6af2cab684c50440ada17a0742213d72791bf00a960c76c5e539b367a664eccbc4c24a174979904d05b096335b102609b04fd40ca3788287a532de3dc19ce5e5f68ad4794fdf3f68817968c0eaa680ed239dfe88c7824bf4b3992e880c7e095081edc79a7827ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2182db8e300fde257d3580790969555e745afeb6ccb2f50efb129e4ccdb18b79a7808535dca99a1b3a072470f74731abd09fd40d5b8397e4f5308998da6cc1d827b6f047fda8b95bb89f6039a5a0469ed6a537006d5880925b752adfa3d3ffd4b681c9175878da26c1e583e2a48818ec0b37d505091dfe333c1e0167ec6f3bd4622dbf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -f44f591ad762137a5c7e10e0cf75c78b79f80645fd6a4966f4602c47a7dee5ee466755f9cb74ef1c1493d5c9b96e369f8b687ddd17281a11331555be62f532823619c06801e4635dcb387378fdeee6e5ceb1122a490782519c348150b2adcb45a6023f287eb85f0ca99faa7b78e3b6046cd6a6cde2a353890908c3a7e0355670c40f670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -17f980c3597df69620288e3c7592cd3ca68a3afb73aa01bad20677bf2267e5001687be358b591c45071119e8bf45c25e61bb8284ab8758c6b52959e2dbb88b55a3630872ecf66e35cf17b1f3afad6477fd2bfaa541e93d4206a20ba3934765f5b5460ea05acf340203b75d9a978ba8f92571ada898aff309b1da878802f4d29e09dfa480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -3782cb583f26d1a2a0b214b33c5ac0a64ca6c83899589d9aa7ccbcd52c312f9b071ebcb22369070e7bd907e30d9994f542345be0e15d66edc44c8b4af0e66274710e96578854a7bb63d6eff79061652416df3703e93f807e9c479099d9dbf8f72d6f09307f3c0dad5657f3e29c5011724da9124a53f7d749893826fbc31a71cb5644b760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 5010306f48c64a885f9e9286471924d2f3f32ca981cd6c160a30f3b4da43a6601f8cc1d94f9904b33cf4d980f784a2fb2c921a8109459c90456ee13e13431766c8205c49c9678866da906e53f61496b68a79d601b9f589ca0c34bbc2769674b2afe198a0e51314c0d1fdc6c08e24309a45a1ea2d753ecf67d5db443d0d66bfcc306fab80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 8caf656623c96af77ef576cd7d3785ea88d51a6c65d0d0a5246415fcd4df5aa753056f7c20c66fcf22e50738fe3d0b08ae145e2f0564aa3b5232853ec5ae298edbd3492c307a8ac6b3926869c5e80640fe73b94418c245c8e90cf41008bab45521d619d16e4eef95e1cf81746d9f7f1f3ebacef8b04b9f08c5a49b37a4189ab67325ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -11e6bc4059b8c0ff3597d96892d4b08d6636389e9e38e2b1966e0b29934925d6c174cafac69dee3ee983983159dd7122369fd1c37a422ddcdc27a354f77eb8a2a8b498f19e2b22a8f21c0df56e7b648fbccb80dccea8ed507155a94c548a069d21bcce80dd27a03769ac2569b81cf0af707d53370d2508b72fddc03d691e66833ceedf900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = e0958583958b608012e15d8f2410e1c4cb336aa1a05b4a26c565fb37e686a99434d41f25f14c8dc9efec9b9674aee4eb56a0923fc81dc83dd1a5f6d8a387483559cae08be32fbca1f83916359d5908493071b2e614aa11750491f4ab6df82337ecdd099dee80ad99e7e21117af459dd614807157dda591d1a9f83b84df229b38001f0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -8d4b01522c1c9939dde8b6a0a9a2864cc3d4d767aab28aae30a72b8e0c9d4024e08f9d7d7692216e9e9e4296b2bdd6f507f81a5e8b39389d048839a4ac214352b5af9cf6bce23615290847721550793ecd155b7b784c6dcc3d7449627a4072b1449949392e78ed58c710d5c690fff0fb4fd6da5a463c035a9239ab925c32453182e629400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -7e0fe63d55442e7dfb4658086ea6d8a635ce9c32924290d26f60385999ef8c1ba6394158781658cbc96090c1371e4ada8737977ca2f1b7613b6739cb7ce27dac8ee918bb73fcb1178ee813bf207283ac9e5861c9c555af16a57d8504b3c9fe31961d3fa0d25c1e6302eb25ca319cf3e3217a1a3dc3177b9993bec2608221bc39c36a8e200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2af53d2c4585622d31a6a6b62523399edd48808f5bc71e1f9110476cbc5e025bd48a5ea82879cf28c2772df426867383366e72c1743a81300c000b1fb64d0fceb2d87233265a6318d4b90b4c89c3c0748dd8761136d94273e6bd5189944cb0339c90b4d7014f44d3ffceb57ab7896a08436459fb3e0d29dd4f6c0d6c9b9d68dc4100214800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -267ad7df6425bd98cc3bb78770e6ba7790025aff8d4281f118e0802fd352e2e05ac34e553e13571ac0e8cd9c3cce2ee4f39a22c49ceb64587a529a50cc8db45a22fac819ef5b7bd38bd671ff34f90b492a9e291e732a15f4d65e8e57cb32b9739e9571bb16c20eaeb4a89d82d753b82764c2e50dc475d68de153d800bf98d4723a83e4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2457086f74d8e667292905cec75655775b849bbfe75af0cc3211af598165a1c5e07bf173742c87a34be372d46f82702d15b5662e6be73db34a5cf61899f0a2a520437a3d12d0308fb9e028e144d2057edb33f849ede147e88f669b90af70dba4ed4ed8a5b4076b040a10783056c5cecffb5818bc76506dbfc08f634b85a48ff31e16542c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 50911d15f5cdfd9c5b66dff145fdd4e2bfcfac67c64ab063cb239a25c5ed410bdefbb0de32fc3956f815ede73140b93913dfc8f39e7530c586202c1140abf68772729d290276118548b5c823dc5c53eb85ec5a736639a70fa5afb417b72fc0d05f091e4c266a1fd32005b78314f811690f0e9828dfad735118df52b189da8b1191e47b1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3d441be9957cb7b35cde97827ee4e362848ead24bcf216a896f2aa8c367dcbf2ccf4c713d7d6e78c2f303b62c5412e84ea61528e46e837d2b3a9ef3c2fc7a797771cb001196ac455b8d83cf7d9ea094b39f88ff0d9b32cb537be8e74d3a81efbeaa0ddbc660af3c68f2b16a4f5344ffb8282f98161530b398930402733c20cc2b7ba78dd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1e0da059b94a56087b24388e92b30bde14844418090b87b02eb04dbf625462fd4bf1b081dea30cba230948e0dc782facfe24a3bc3240e1d1ad1da2a68a9f0fa175c5fe73e84081071d81103946001a4be284d2260b4a2cbdfd9d0e152656d197e79eabe303e5dcaad1c34cb2023b6006a4a04454d176062f65887e99e3e48c95a061697b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f7d8c30b38fc4eb8a90cb37262dcb706f2c0171180061c351d177d32502bc3f738d39564e5873fd30f2d928282a16a3ff56cee7477dc06a17e946fae840c0efefb40faf255b32524a74b69366e9a61d24ed4d18e76f1220b8ea9cd96883bdb9a6e6815ddb6fe09c1e23fff98c6574da901cec51cc299ac4a1af85c25197d28d6d9bddab2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 340a08acfa88a15a2cfa0d971c00ce5173543c26e87448288b4306d84f8bf2468cd04690185b073dc85a76bf63a81ed5905043a1f93f3d8e7a9e182b8a3881fd73995b768ff4ee76de8aa5ea2e74f4a59dec315f0737d83fa521b5e786e56a5d3c3605d6e9524936d7adaae740cad6c067dcf9a4969365a752aaf7ccbaed4ab973795495000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1a7e58f65e3ec56dfbb10a34e038b660b3c9251fe9d8a9e7b55d6d59e88972391af804722aebb01ab5bdead4c8a6347dd7532591efe93dda39a37ab78459ab45c7f92a8feb3513236d70c89ed86935452f6495863afe6349723e7e1c716218b95d63b1427c7ca6d573ecdfe7c6043caf0ab3d4e5a22e0e28c3b58ec094977ac3780472f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 243884e10c8409cd05f4564c72c27ead4e6313baf322385baee4d0b6df83ae905bd5434223630310e29937c31ead20df8c5dd44c9f2953ecf12f73fef1d03d46d66cdc252900b66ede16f33b19c3e5e0640e10ce4ab6bf8ab5c9920a173c1ac278da2586b32e807ee65d67132041ba3da164462044a8f0613b3b2463c6325aa7a5ad4ec90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 107fb1dee04192834579da9de966a5ed43dfdfac75c271a444d8ec4e46d25cf818b1142652e017aedaa2deca46f62d1cb17b38f5cf3c7b6c9565db40e028d5bedd23313c568665c30d294bc7c6000cc26c3aeb97f25238e225e1290440e5a29327cc7e5e657d1a6459360ea1fd26b084acd853775973b12e082bb55383686c0ebe3495224000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -c481839908a87416a0739206d0e464ba12b4d18db8fe898b83bbac8154b5257c2a64c2d5a4a221d54ee0f7a6d4f339a90ba2b72703caa1e90af4fb0a1cd10dd6c9cff98b35f3d43c4161bea474774618e2e587567706eade88adc07ddce43e667bc6d0e1cb534be0a62f91654af906eec28847fbbcc98ea67dd31ffc1a1e08e6b4850562c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 3e4882c6732426aa7f4059bcae4512bb16465f7446bdce065ec270b92f846a23f4433c6f9d80fa60ab26042e57cf76309f457cef25e82fa0e58b5c0a2ab0a6d61ab8615bbf23956962d8620716ac8a0bf8f0a320d87ffdd4f290163a8a7bbefd61777db72ec45eb3f505c1ca7aafd0a03de0ae5e55db5372727d6eb0dfeb7c155f22af9d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 1cee9903b3fdbddee4ec95ea1035b19b6741a2671035ab86d2c84634784638cc15bc50faffbea66f973482999942be35970de4607f4993ed1adaf5240446b805da4f040293849c13a0200c8ab3954dafbfdd32b2a1a3a1277de649d719d94882d8c73f87197ab3155f6227da78af9e8d986ff7efa73efb2b5061f335a539884b5bed621bc8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 44f834ab5659de0daa41f2c7154f27d3e8bb72c8b7d8b7f7058d9696fb0b80b4fe1674f56ab48390cd780fec6133f52f5069b06adb4c205d7fa80891becaf82cc4352646e090fce98f270d415461226c9648d7a06f6044d1509d1d6c69a44e40ae9c30f15e2d13860b733ea5f7112ea3947cb338582e84b4fce025b680a2b6f61e44cc66b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = fbac122f7b65dca81679274e75a412c1948bf781ff97c7762ca08db6a76a27c651db330f09a5c6bfc5f964814c7f8d0f78971302b86de1191f461d24c2e3901a1fdc4f68f541a01a49abf77e6d6c7b7b254d085271dbcd92201925dddddc9d90df604713aad172f70e6e2314b258c0934bb0a6cc5897f36435ba928c6351ec32ba081b84b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 32a60b538a5c06bf6212640761aa12bf3f251cee36154c034945d256c360ddcd750dc0fcb4f9e98fda007f371e7b524700da5d733fb6bac21c48f8f60b06568d6a0f24ed03b54de3566ee3ebed277cf5edf8e82e9e522d181a06011f9ac34e6f02899719fdc2bdb9d99c918df0da5f24dfa2ca57c5d52d71d41a8809e892231d32f13eaf7e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 3466558bd989a31186c12f1a077d8343a1fd7f8a0b8f85d1f04b7f6b3c97f7fe0d1071d6087726a46a848374453615eca17feee9d3c6e3d0a3c2698a493640e1a87acb1d8f37ded9887cd599eae75ee9a190e9c6b4c70ef29888fd692b17e56656a56945cf1a7deeee9fac867785d703585de05334f6896f8ebf03e0c7ac5d0b7d88c681380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 98c94fc7df02838f9fd6da21f1b30ed2fe624ff6b1f32a9f8b6f92e69ab201009b85abcd41c30de208b6062b2b5eb24f375365e2f9c96cd958279b8092792c8076a55d8c1d6509e2dbe51e7b7f8814f818f175184ae9b2c162727d7c078cb646592d5f7c3055c1a01a4680000ed43337f0a007f5cc1d85e9bf0f6080d4c876ba2d8a005da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ba9687af1bdd55f5b0c67494685f5190ac19d8e2724b19de94980cdd41bbdd62d0e43026c55eb341481dafcf91e60c605549e4ec54b5b4dcd341645961c9f3f29cf35d4eeebec198fe627194c856be81093ccb31e7c0d9913882a5fde4c0b70c0a1fd29f09f95e3d4c0ca9e48c78aac948702c4a4635999da3470ba5717b60d644d6038ea40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2f66dd1ab3bc65f832f5155b2949d7a479e5649c6a6a835c52406bcf237c0ac8ae4ca147b93ec9e4317b96aa5743ab8333abb700584f2b5c39827673095ac06f56ad9f5f95ccecdc125393a02c325ac69cff03b00024a32ce8a093a5c7393826be0d0de8eb0fb57319c9a9b71b45d7daa6dc2afe5c620d95564200213c36199461200c1a2900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -25b346f2aace8bb0138f8ef717d421a9db974dae2e1d4712329f11145b31ec3e944295f8d116db6c16cdce1eaf777bd5568789473b8b493856aee14384bb1a08cad5cd84f8b4bc45fab36fb975fb1b1629c2014522bfe0ca4361f0de8a37ec0ccab35602e49b9ba4a0bb3fca79bcad046e923ce9361eba86c2d80b94a1f8491703249cd9d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = b845d7992aa6a3b3b49ab888562f7055801ad877c22693ec561ad9fa6d051cb7669453f00a3e593c2b7aad65d8a8777c12e6ae514e88e56a660f1cfefe955821fd4789c9fabbadef2bd8d65b08ae8eac2acf760a6bf0e0b119e27a3aa4b44a6881b20307a112b77afc4a8fafa59aae68d5c8e6078201c659554acbc68204822efeee10d06500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -5d54bc5a4a3eb8eb624a204a216e307f97876582b6de6bfbd94bf08ad81996ea5d1c3df6fede8c054ed0a28f73fe1bc90ea34e0a1abeb2829132612fd690dc5d740177264f4361f1112e5f7ff0d3f8167fc92022aec8eb50596428a95b714af44c8754526397223206cfe9049e9bb17caf777d5141f82ea6f1dcf4966801d26dc429db768e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -350b95c9ca1b99f025bf1b37e4b1db220969655c49561513a91f46a85d517cf48e509c0fd3600a2f51a32089fb3eb95aa5ab6d35ab39123ec8cdc356471769d7d810acd3452a5517841ebc6044c4d8c99f5577341a39472b502c7f8b58bc6efeb18c7187714215fd4999be7c20dc2d159d9e994852c79b635d67e926e18b6e0ebbcb4d56a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -97d48f494b1b5e2ca92942c0017f1dc257e33dcf4e33a6a06284a519f59b0b80822f62f5bcd903fca6998ef2eb715ac2b6b732948ca139cf575bdd8c99d21a141e8aa21f903c170c5e4529bc9ddf633be49a2abecf3e7f79312e2c459caaa4d22723869343e9c977a90312a361d37be21efd36fd0cc9b704671c7c1f89a963657a91045a8200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9820f24e0819da26693d43a0efec9720c46de638fc5d40488c2f778c1bbe236600d6d77ebc4cf47733cfbebadf13df05abf6c0c2bd6b5dfc4b3e59d38334c66c290a5b79ea1ffe1fe0bfd92551123db35a784fb6ab5a5ace7c2cbd823377218a91e88d1b111f336205131d64a6625730b6ff834bb24f0f437347408f247761a4c68f4fea2dc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 294b75a6a8d41d9e0f0c71262220750946fdea0b09e26b863042c40814c5a847dbe820de540d027081ffc8aac886898c413b6cd85d6c2d5c4eba85a34799b78d38cf2827194e2eec1ae858f157305626456be85640004cf544fa36115babf88a5d6c341135bd5243cfc669c6704651715eea5468c3e9fe19831fe051ad4a4bb4a597ce7c41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 31aebbf37f58d0e37eb71371e17b6d66026ef96346b82f28f87eaf12a5a688211826a174ae5379991c162049794ee0323f2d43bb4fc9b0491e3b062de6b96441d227bdd9078ea61444faaf5e09b2e07e0a4f94e8228887b73063467e7878a5c79628180a720dcb77a4a539325c8a8a408cd5322eb8388ca90e64cf9bae332a7f3eaae63f367000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -158acdf3c04dccdb554cbaa35c140e818b0256b7c53c0b76828253d5c69d8d3ec842c112298465e8730ceb0a505025c1d28245d0f8f21c3e3772321bd514ad978d78b50ad50e09c1bb0ae487c37e22746aa89897bed61e1d8b21e11dc4dde4707d6bbddeb40d9c7a5b058b3517e4dd6bdd5a33d1a3576a826a720e024383df8ff5e9505046f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -df6854990ceddc969330e6128699de4ccf7242ee32f7f3cc8541a321ec17eecb439adb6604761dc4fe39352ed352d07a52c23a478882d5323dce08a8804d14c29c45714e84cb60af2c0576c2ee8606c5f407b28d6c67681c0253d7747921bdb94052bd08e3052d0058b8a72ef5c6fc942d56f399d27c01c7f3a015a22d62a1821bb312a4968000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -12ca12f6a8859955dd8ee97985357a3ee021acb111aa4734384a00c16011744dea1230966df9fb9ad15bad60526176ee1226e0fd2ae6c86d1f9e15f2d8d34b1d005dbfe95255f307a987ba3be91a3a9d21456bfd41e91668d3ce8c4835ae38bde9d1cf2b0ea38679942c2292866ba9f4ffde4538156ce5e6d47016796e0657d3fdaa2d49336000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1dc3a30f745b41c365f8c357a5bec715b8996a40dbe068d48486d96faf0d84acac7d953834d6dcfde9a027f18d2b99c4f7039ee6e1b87da9f95355a3444b992c9aeb41bb6551813473aa3a63ca5859a3cadfe24784e840efd976d8a17b972f1dd22f0d97347c1b6a774c01cdd59aa70aabdc5408167eca4c2f36bb3eda4d82d7ea7eb601fc7a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -9afee4641401e9d621c30f4017ecf9273a5fcea6391d6c4ba01cdd519679a2fbdd13ae7ba761434ad5004a4747f397265b27e0d4d3094271a34b3d4f999ace7d2523cc0c2386c8a362243d093de31ced55378d2eacb31cefac6f450d8de438286c973f7cc5b9745dd7d7d31c6c47b372e61ac072fe9f3109a55bb461bbfbcb7ae89da6315a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 4cf3cb988cf3fa5943470f5e1cc27ea5ae1ac2d88411c82c1da4313e42cab4116908b28203d00124824dcb9d99579e53d6ea3f28b63c3fb9fcfebb34e47b30506be00d8d8c307d1f8280d2698335b95617d49a2b98bd6d7d50aae69e5074efb6bc0def258ebc684144e54973c9aea9b44fe8116861428ac0b3026a065906c4bcf788040d5fec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -ffb212c1a9ec2bb12f975773d0dae0fad452519ca9819b4edde8856e37e978aba12b44eb5ea6f446f2035d88568a8878b6e041811aed0ab091e08d704b2eb677dfcb9d8a520d55a7f51ae9fe220cddd35adfe896811d3cfcff9fbbdaff1a68f50db4724fc813c27f0327a22d80fd2a1b3ab906bf44b785fe311a415c7f50b3a2f2280b5d9d3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 228fb062cc6029bda2b493cc252ef3ea2f6b351f3ad329735e6f5dcbac79303dbcd1f32eecd63c7a23d97538c44261f747f3dc8150291bafc999dcf25c412cfadab14f9dc385794485db43054a8d1cd9f172969397165ebc26f2d0d9f95381478fbb37ac5ad231ce8e834e9e930a582354fb3398e5821ecbe67b635a4ecc33660a43ea75323e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -bec47049220e22cf1f7c8abe315be29939e719d9f272e2248851627d4a68e46cec9c49fa41c732068a5a83b76c40dba800f319c81a6581369b3da7b66be7a42884937304fcbe9a7f0969890b7db6dd4a978cb055c24f9a08b701a3ff630dcbaa7f60b41b92532b3979b6676d0f06ffb9a138159c92c6c8643c3b64284b01784f5c01917cd6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -e5320d85610b4ef3e6a16c2f2cdf0ec7118dc72c863340ff30aae50447db80c6e8407ee3a6a73b9fd988a7dedbd67c4d87963a17c9ea56b64e87873d0dde1312f553ef3b17ac87ef2ec7e7516cfbdc7bd4446e0947b1a09567f31471486dc6f07a7c5e72b8762e18bf6511d04f9e0cac3384774b312a96b01ae93d343e5cf6c11ca83b47c7a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = b29ed1b6a1701aebbee3b484e90128753529e32be902113e057978a30e61233e10b29329d45600f9aa84ca1fb3248bb9d1bb814ee790ec881ab27b53a4d0e984c361de3fabc8d4db2764d3e02684da1242fa70f3a0a7d250b2fc1b5a444ff596218fe57d443f5510a8f71a0a0345e9d93d0ba5e0083dd2b87d75e1ce43335b10259d65720b50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 167973df7d7ae06da4f960ff8e66c0ebb8e2f7fe47bbfab1a87b39bf89a4d22f416ea08c5d52a6cd8c3ca8c392e67f7b2c071b6a03dbbe2fdf0465c845b445527700649353ed25e700ae660452b0b158f89ac21dccadf3888aa82989a785b14a22f9f81bf7a7c7a48943e1fac76f750d2b81da1c379979729096e55a6e3494a9f9b573087cfa40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5e52b04dd30fbb74992491ee944f2e827ce83d275fe8d2a8fa435d95239753a8c96c9856bb4f663095b8d56ae2490b7e33520513576696138e2d80ed5651afb5d8e003b3ad3dcdd708b534106da729fc56641835123053395a0363670f599d398f2c09758a1923059aaff2c7c837de078f69c981c2be73086b6f6698bcf038f793a157474a7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2060bed776bee6fc83330be02efd74c2891a49c959d6766d162ec181afecd782b70760cdd1749c0f52b7d17169516bff22bb39f9e791dfa701f64c1834d4e89ab2da4ea8810c3fc1bd0a62fb226461585d7f76e150978509dcab411a42768a9dbcf7079b10203e64c6713c69525c322a374d258e9f49d0979737f180aaaa8f4da1f1d65feb9780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -72685f7fc7635781e05a7470846bd58797ffccbcf65e07b574ed16e2fe6d9eb8787f80b9277de8189ba8b3d5a6e7db557203fd1abfbe25683cd03ff21636c6ead30508019bdcc0c2c3b5c26b0206d027a376aeb67d5b6ffba1f2e1c8884dc1e4067160354794c1072029bdd05e3965dfa818b1a8f3aadbf49c00e886f4d676e5e05a59c1bc77c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -242c2ab5058e9360b4b1908604f790b156829d879a0fb37a15694207b6cad653c9d4a2ca8e2ec985e7b9a6ea56c59c0f0ba5e08d98d0460473a2036fb00dd022dd21f28cd4cfa5116cd2217aa9d276beb7b532665b0d9ec00fff5b6c51e13bfcc755a313dc3ba2f584bc5cffffb7b088befcc6d9894faffa5ba42da11c04ba6ed2997695332100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 19cecca56063e459384a37f62fe4d9f5feba0461d3dc4a21c6152dddd22371203dceec63f248064a529a6481089ad9fc874c27f1a8f725da870173966acc6222d5164763bb2ff00a1f58cc4e84cb1a37933fb355790b6f68c621fdd8e7053c6236384a02719f88988873dcb70fe4ef7ae87ad6061cf6df1fc8fe12ff1f52e108352eaea9dd5e600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 9991c205b44b632b6c68dedf26a76930e9d20e72694e02a6565cf2b397ed2497044153595541ccecc55822a803753b8313d3d092592d8e6022b80870d801b88e886c31a5683800ed1c55544cf8c886b5b0e3ca42c2737bfb9c22f0e710cb323c6052d5053243f37c0f303f221beb09b9958ed7b94543a595ee9d24e32d6c4856af9a0dc1770be00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -50f8ae53b60857c25e58b01c89ead7e716f648fb210022cae79d37a91f4294b38b2d0b23a58484b522d6d9622821e6842c2b2d4a9a444029e072c7fb2e6c1d3ff3588b80a98a86addf398469f52afa0cfc4070b8cb921d1b31ba075310c33ebb89ce2f7e38e1f0567886ad469407d8480f4a19fffc986a6612648592561a7497b48fca58012a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 23138189f339b3a8d5875ab2516a83ed98de5c3f5f6ae849e3fb922ae890c30d9f5f6946f395303afe95aa8b694c6c91456ce15dc25485cbd71eba4a486abe3e02b965d8ded6d1523b8f30df9b672ccf829cf6f440b047c3bf244022b3434087b77d673fb83dada87b1f461dcbe9d774703171a1391dab7989bce115162c17ba2344e40dcf0d8c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1cb821492a2770cc1834d2b3d47c6659c3493c7d3f9052f95d22d2533425aeaa3a70c116c8c9eee256a8effd4d99c72c8699c1d17ef7c4557d53f5c6115adad143ce1776273120f9dcdab14f9db3ed1729208978288d2832901ac72104d6b93cbbb699370d65ebe1de7b1f40d00acc3e5820d3a54fbe15d1b6cfa0d0152b31cbd92d59ab52a40600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = f81190ab08c1ae2340d91fe8e4b7cceb893fe3d66c15eca2515db8da30965757b19082d5bf48b8ea6845365729cbb668f3b53649713bbdf42a5a3ad873543e49cfc0b28e838edc67f183bac106011fd3bb7f61f4273b8c9a2c45eec9eed6e92673461210b67dfd7e69de8c4e519c06d0a84aae4270b144c387c3ca68eba94fe79741856e64b0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -37c4d7494c237d4795813e4ba9dade1766828fa9741ac4a17fbe20b90cdfa43a656df93ddc3383391074914be91cee79a3dd7499ee2c63fdb5491c3aa8e2b2b43ebd15c410cfe8662da2e4373b936f184778d16a158a8ae30e0b19b6193e83d428ead31cda4ee8222001cd6b7caa3734175f11de3d8f567ed43160aaebd70a2d4054a28212a54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 19b103711fa30ac4e7b58b37a7d9e2b1e922fa7f6d4af30e7bc513704be043bd8bba2d64e86bc80d9085d984b8ed54561c6d6319a625297dee3810d090e4c1c068084e100ad8fc8caf626337ff55de8a8a389777b48eb6394f4b5fea3eabf1a97b49d039707baf777111d5493c55c2942cbe55533bb436c282465fe3e7f4b04b8114cf4bb2bdbd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cf68f41f4edb1de401e5d4808cbe02c14ed86005b6fe84d061d966200fdb106853f788fcc0183158c4cf42a621a8f2af9a7dd71af223597df4c9606092226eb372668bccfb777ba494403938426c44fec047c3a6c02bcb2d9bdbbe54fcd6a0877931a9bc71c128a76822d5d93f302d1704ab8c8c2313d5105b915e22aaa796054e142822db464000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -53ec2bedd4ff80fa4d06e31fa6f726e1c2e9274c7ebb1377bc0dfcd5aed7e4898ce9c136abcd5e3d4250cd6fd8f2255c097998e37d0f825d8956350b2c91b65edbf6d81c5293d50239b298fdc33b5cefd82e6cba1147198522ca1d34a8efae3ca4d0081abb911ba5d9a86b7327922b158b31b4648fb8f0895de35c3f6ec799712b642699b17c44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -63dba43255d5b9e33fcb4a8fe2bda6efc8f5a51cd130896dfa6e7d09b0006bc18442bdb5b14da6a1b54e4d7d8594f9e7f68cbd9f1999ac179319cc28d01a17e3e46ab0f76f449b1fbe45cdd62069ab991e106797933ffa5d5f34462c49255f87eade4ceed11870644c6939736b6e32ad6ea032825a407748ce29063e91e66e1b24f569472fbd1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -71d2b87df61bd229da950f7dc0195ce4573278884741e9e7aba666773c577d6759b42e82e2a6db0db0881bb13a23a932b8cdaef49e9d8734b15ffe4594c5b249de7ffb22f20336ade907585c9bbbd7b725d06711ea22574e1ba51a246248c89c33ba7d619a04ee8c6fad3c70781a853f504da81aeaa3c1e1efcd83f749a21902f7f83a95e8239e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -677ed3adea9e1aa602b92ce5cb436c57033c91ac56ddb7c2139e6cbe1367d5b566c3cee760167a0fc95fcb117ec16989882cfb298aabd96372cd2f506c863ef7c3f4f7534702881ee108c53f2d8458c1390544dddf74415553286111deaae1f950e58b7fbe774b914e51eb70434d07b9f1d5971c4713f44f4bfa3035070e65b44704fe36b5547e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5148b7ea383b1f556cdcc82b7c32124354d4d5ed7395de32039f9b0e7bc5383c0497cc9fdb060264b9bacb947b5b5b1b003b0e88d4617eb6e8de3b9a85e061a037716f565fde6e3becdcad07e9671930d4da3e5eefdeb6ba89203d9e6711e9feb49e72febd3fedd72bcbb9ed787df77ec2bfb90350e901a670d56b367b3d4ead4cb3d3e9a9d98ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 4fe28db65b6a1afbe6e35dbcb2158040fd59be2099d109f342d3bff7213516712df0be30bf460aa0d2566d3b2d6027e97b71917b024de55271cb0cbc9676ac4305cea51217667e9b3e235e5a52890f8d022d191a83f05ec5ffeac063fa368985ed4811b95ed491aa25e71d1b6a01a517dfc540a23ee7af85bbfa1e350df9185d27133da4ec478dc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 257274e0cee33984a9e2b5bdee00321e6ecdcbd409dd11a275f6e5d62818dd4ce0a260855e14e90272b5b3cd13a829fc9c93fa69cfac4a26063dd1d9385d647938300c811429a73dd952061ad7806b073eab77b5b9a9ecd487e01bb170b292d142acb61ca9f6b50ad010ef411d690529345ad1c617291db66d289f2bb4e69251be22a6e55a4e11e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 36d9a45dfc5f480906fb7c5f021166c00ac662cc56cc4901a08d8c41406e7bdaeb22a77561a72d58be822e82c4f44ee5d42d4c9b86ab7815582b8621ef8c06441af4b031a83073d94aeb4cd08020b9f9e67545e35e4a1decd140e17342b0a3f2f96ffb16c851d4ad552b3cff46766ac9cf29a09fcdd61047b2b227c42e31049ea23410351a4ecb68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -29fae802ebbeb68689c705793a8c6b341574783df9e8f950a52e80e530caebd448470e8c50ebf39cbf5ece9f93b3bec9395e86e8cbbee6a4bee96c6b43f4959bde3454478d842de99b92448f1e7a8cad9071611b515fad1a211696cfe9778d8c925431bc202a0f286f74f285858db822c7d6eac0033d46745d22744e8eb941a9a3992f8a53ba00e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -9921a8db545031dd9c8370ac85ee39b96a86b72dc0efdf9aa0a03b3b52d18003410379aa2cdc1df211392c16a6202a57d1ed8d9b41e035147e3c8b6d929b3537403706d0cc4e046508a8cf443496197aebbb0a93838596bb88071759ef3a3c0be59f7c08a57181414e9474734cc89cb23a6c5499dcee84b82e7fd2ab2e8fb53130e52b23ed9522b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3da3a687c61f38cb5004885989afdd57565441fceef576a3341ab964f333548bcdce0950439230825cd11c5669f898b598008f42cd71706fab4da8abc4b4a6b9a08d779d67b12380027cc8d4f3268e715e55ed7c6f5792902196b91eb2429c5f9389b0f864062274d4984923595243f7fa97f15da5b75b315d9950d139d8a3703945c6ee9d63ff7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 5ac509893c21f2a9897a28e0f0c37a41b44e36d86b2fe432a2f2d2725ff1968ae440063dd0f6eca89fccb793e6d74318116d0cfc561d2a273d43e047b9d5f722b60f2d6446a0560ac3c7626bc04fab0aaed1f8d7e56ac923d6290f7dfa4a2b0128898d6149d859d1211d0367a070505feda3efec035a02ae2a167e3b0ed0a3de140356bf43f49400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -df01e5bee623f255d17acc2ea9c120b8f7b56e40b5cfcabb91001905d86397781f53500d79a905a1a5cd4d2520f9915b82f710c7b5c06c6f7dfdaf1819cb8164bf2db2d9e526804b937986182f5251873e0a51540b756e82be6b81095dc77e4f7dafaff0dad347ab1a9467f41e74f11590798cede17d47008f6afb2ae41de8dfa708d54088211ad80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 92a6926ffa4e35c28b441f1dc2c201c4591a692ab00dfe43033816adf1b700b92242862a2eeb2012155ff6224ed89de253c0f09173f8aef525fa0ccdd6174a3b51603a393520ca501abd6ea8066a281d02e932ad010f3a785c24bc04fcd90bb7eba704babc385aeb30e95deae0c020f2172d4897342a5d351869b18558dbf1c240d91a30322d66780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -5e00df53c4c645bf7f425bad10e002832e9cef0e0f2ae613468e7cb246be9c8454e1c2017d1aeae67bd7fcf560bf89ab9010a3af7063a31ddbcc2465e087551a054b2066d59599f78493d693720ef5118b262d5abadd639be2132d66b3b2758d39597786697dbee3f90fc5522a94007aa8ef909d5d4f45fca0c4440752c547e32a7bf0b9a51f6e500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 2798f27b31040c5f42eb5783275dfd5a3d1a1d3509d3ece2c8262d46386fa9aedf44701e34628ab9c011fd89d3a32825372fa368cc777b7204c167728ef469ac8d29af4a0839f161f67f8e473e9b021c769425993bd3ff97acc33a3b88b9f37803b9d8b59da288c9eb6656236e33810eabb552f72d125e787c3489fba9748b9adf176b62234fabf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -99978839beed5b0d9283bcee5e23bf1e74c5b0ecda51e0ea72c6272a4fdb1bf6336318890f0429ad3b77f8dae16436e30181b0a99a4e8c1a55bae02d826d5b573800bafbca2d0d8746cb5dfaddb6ba12fcf59b3af18aa860e17dea35d5c8b131014aa8e9f353c695398e0b230bda84de5a0de9440fbb6c16e295a80151ba2db2608f0608e2e9744e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -1c95741ea89d724075842d2b4de97e7c87f00e5f1ec1a73c31ca5810068e417a97a26bf76040826195e9d9f2b0c96435960ac9b4ea9dd153ed0f04efafa79b12ba80274b9dab878b755fa1e5a5c1f6aa40ed27eff95e42ab0a211a5cb537e138dbc43845f9bdc8213f3d69dd7a89ac9273fcc7db7ff517862cca58e6e61d96c8a6241142bf8c0d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -1d2223362d6eebba7c14973454b675539ea179cf6343e653c7af3239eb648ae3829e2fe112b1b568e710ea7cf593be726c5d11e6698a075f5983938de0401df8ca19992e74def6cba2c859666ec9086262c1b59189f5b72b1b205f82457a631ff68685e7a8f2ec39ae3b9129d7723d22781c688e4a89f945afc34a166177f136346ae2f4beb2707c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -135b3f456bf34fa25bee38ef36f8d939f35e03a674b1fe0cfd43cdcaf598a5105b05d87d08c65255f39a005bec9f97518ec07f83e62a78eada113336d473d6063c1462287a440c7de3150e09550a8ebc36bb4b6731c316e04e505937467a68e0f76aa552cccda62f42038d243acd3e57d43c788226cdb5d8dc0b901c9db8581febbd3319a40f956d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -d343e7f8f9dd3eec7a78eff83bb5d8539babfc7185e14e17273426bd3a350899a2b8009a9aeb5ef56ba929d134e274d3ff00290048a63ad44cd48daf3b0a71ff6a641965a4e45a7e0ef9b5108b3c5501865b3570a1dceff8158c26c58c6063472d686f2254d79069ccfd1d82f6fbd4c48ccb3b5954582f42194e4ab614e1906026eaf280095e316c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -70493777053ac19e9257ff94512179eb6a30812f32c7d3d66deb1ccaf069029e6a62d5e1f58f62a7fcd292df297ede0627d14dd599d0e9fd83488fc84cbb86d6c627d6ddbc2bb1deceec3fa2b4ad14b2db8b99d4567eab79e123e21197f7c98c078d59df5be88778c581ce5abe9faf90dbe5e48bba77d5ac7b66f6c47f5ece7af5a5b5c6971303d7c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2ab06c12e01e3193ba8b909c61c58aa40c61ede5f91bb2e93c9251fa13419aaa80fc895755857713c1fb475028178a09a88498af6e97c752d0bd64beff1429d58e6a49376f9fed5f91e1b94f5841a6eac6af8a16c78b6fcdea0880661dd8c7f82f36115b2cc914f215a21e828d95f375f643c2d883c4b1f9358649cbc3095aa0c4e6a9de9a2db8bf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -140e3926cd9f9a1e6cb082036f0cbc4860106a66b2e07f86c33c59828b21b422b7a0d1961411ce54f9ecf88e433398a6d12fabf4704ccda8f7d45b5495c9aff6bf66186a331ff00da316c4f7f8adbd1e6da81a9ab14d5280eb9c051e58b9ff325d45a74b311d5a5c8a6fdab438e5c07e7d4842f675327510f976e6060f15da9903185cf8f3e25f87b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 1218e061ec1213c57c98016b710ea81483fbf3f771dd7e3e1b8ccb85491864fb3e746d64bf43a1d7f95271e54134555d3238fe8902efe5f7dcc07209d0e0d9f63a5e2c7d4d33b39d2c8e3281da2131ee692f9be2a6dc7a715b46c2c0e9f716dc4f847175333aac66a1a063f2583608f175c88d1d42e6e95e895ddcf5f36dc67200d33a561c8b8d1a1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -400f75dbd3c68ce3caebf48b84fd068e3a7f740d46e22017bd6fba5c131728f280619a5da1b4b0cedf1f01cb4f872d44a1eb5d859990843f20353db0834ca20fecaafab928fdbfd5b6215bf5fd0b864d47fa98501b3a0974dc5b4dd194685fa74f0975d29cd8b548120bb341aa48612f7c964be017b9ca093e7e1acb38760d53826c7b36b72ae64eb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 2b0495b246b5e72bdf0e45f139b3401b19cc816b5a06f8071a7b1d8ee74ff5aa22d8a97e1158e03256230494d929b5d4fef8d4e1f6dd8944ebf8c769da3dc502848f936b04355fe366058892a8e0e58c797b9c078257649646758c6eac6fe01b4b5d245d548810df18fe835c059f5d2089043eaca34d4974cf6e2bd1c2c9baa9fb396601e0590d238000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 31472510527a8facbe29495cc3c340c42bce9f52856ff5fd125ca90244d074a6f792e77cd50ee41272c11064b9c38fea186e85c95fbe67a9636a7b0a65a9ceca09928ede77ca1b1f7c861b0035d7dd9ff079f910777bf1e3912e257533b4f5f66851fff00e642ad3cb799dd3c57e1e4768f6df286099a91053028047354b837d381cd69c255ddf7e8e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -d8a3f716a4c18f97bc93a24740d467d08ac6cf0f9a0b2c732f608a36eb456972f5eb8b87420e6791bb25771c943147e58ce9d95dcd17c6abe059e7bdd6285f5351b54af95c522c199abc55496345e85307c216151c6cdac805f939d32a4b01ab70ad2f8b38c4f4ca62a284cc5301ddf65c9bb2e5a1463a329c984dc9766c55b3d90d6cac4d05a0f960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = d7ee1e2cd3bb7c3f7478bff4b3bfc98423fe41ad51a8eae5136b70b22a5891160e80c22fddda1e4ed1b20f95f138a8107dc5416869af9da16f79729b717216985f2ded22c6ddfff2f931cfb809d42b0c2e57b5ab4a52fd85e0d3fb8935a0c4c58cf63342305d80e3fcded20cd29f4d700f2a517855f5ac04e155bb3453063420f971557c30d6019aa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -2c7c9d1fdb4b97520aa72b7b765cea45a652bc980627c30b66139111d262b16503416217b9416a26f2d741f069e1321d95cb1232b029effafe2c36b279f443f41cfaeab54caa76e8689a3b963d8361423bf9bfcb9e04e9db48050be81d01f89e20b309ce3cdbd64b95b0a1648f38ebfaed9d50c7ed429a7d8028afff81d15c2a3f41f1d58fd70e30868000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 6eab4675d1451faaff2b02b717cf7a762a8dc0609263e44a53c2d3b08f9ec4fec9e5955b3765859f1ce66be6ffa42c824eaf513d23c98f3330e354b24a3f8500266d69daed2571b2fa45b19250eaa0e8489f05715d04ac0c1bf4bf0b205e67d1ee7e6a14d2859a376654036b8decd54e8b68ae2d7565383f6886c9e8468f95e4ff11095da6611af258000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -f97e345003c91cf9da51d71a4328cf12544d935bd3bb96cc3ffb44af3b174c319d53d0162cf1bd1b6317116b747725b501341705418b2768188b27c84a7f23444e78e646282c509ba9cb4a8231612c9e5028dce70e894fa54e0989d3beef65d6650a663f5f1cf1635216c8c0c4aadd184151f0a5838631e969a0b56189fe7f4ea541ad24f542c13e9d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 73891528dea0b2abab1dc159620f601835fe4f1f98904effa6b8aa60f92b88c06b8bb6989d81520c2955c2fb25775999c3f35f50e90c566d58fc2e022c3e59dd96595a17c81998809451369f5a1a75ff6adbe2e5bc7beae354980cd9b74742d1bacc8d8cc331d47d5e6fa2d4998ef7761cdda0f135253c6bbf6fe6db0890d4dbfc22be2d2197f87faf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -3e5a0c89a0c761eed939d9ea124d22d72635291594221afd67112ddf417e1decb839ff83b10dde7f3e50f7041788b91d6c0a5e5cd7c077f3d15351264235327239b156e64a0244ec9bbeee046758a5cef0ac4f95d64c33bef1b8ac170defea24cf79fb6c60555faeded96586db80831a8522dfffb0ab26abdef2e3bc6c799a81d74b04fc2fb0e67cfa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -22ec4110e9faecf4bfe1d4376af3eaa816fec44fe4f0efdd19a1c70283c43144d3aaca24f4746a1a5350a6eb6e713a85b606430dbfb7803928b875463800f491e3474b9281a9c6489802b05e9e4e6c060bb2e684c946d95c3a4fe500b59c914f524b23d7ac4acd3820b10db7d4c34d9ce8edd2cfaebcf1f4c2dc84fa08703fcef677bbd90e37d82e9980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = -930954a2f02a8d738513302495a720ad8e7b36033c78576d96ef24651ad2820510a22b0a0bbc03d1a4596c7bcbd6153acbccffa544ab271ca280bd9396deb9ab4280872594ad5840ffc519a9b6316d9f3018de05c4770450d2c92114d17d6c717d44efccb5dea65cb21e3d107745de42628c4c130826179810eeb957a1538abea3247434f098622b2f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = -cb12bcf4eea6f10c9a7e9e9d67a6a6da60a6ab500d17f47859e8f808d72f5de30fb7f140eb55842080150557d517c1bc95d8e888dd41cd772d4be6a6f174cd49222f69eac3c363b46651bbfb10408451c7fb454cbf22f012f9acedf2f1e74ec6ae1b24b3c94073fed4ea2f304055f126dcebbef59323a6ba5a830c35d1ac3da487b0458648a990a30080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+A = 58b6214f1521e171d06d7e3c30d35f05bab6a3b2eab879284e28e7a4d847a1cbaa9f9ed1eec0a6e71ceabfccad751936c9050ab89be2952d73196c4ae6df4b876ee2534267fb17514b5494cad0c66a9d44f5568107be450663d46b1f5bf39bfde15a781f98e861c0bad9eb1e3e5fd718e35b1c04a7b5501bec2145d9e0175230cd6ac68d112b591a9b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+B = 20d05fc0686051297fef03b2e53ef9eec2d2a0cd3aa4de878311aaa7f544ad19c04fd2b79800bbcb742732aa39a16a59695a0464a4faac7e6ce87018408e89ae96266058b0448722c5b04d8c30e1d619a2c644528afd132a6975cc1023dd2cafae93bf2d6ed9508a8832ed41934cbb11c3bcb51db4de08e934edc941d369dac0aa54ddc2eefa3e1d65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+GCD = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/test/recipes/10-test_bn_data/bnmod.txt b/test/recipes/10-test_bn_data/bnmod.txt
new file mode 100644
index 000000000000..85a17e0a05dc
--- /dev/null
+++ b/test/recipes/10-test_bn_data/bnmod.txt
@@ -0,0 +1,2878 @@
+# Copyright 2016-2022 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
+
+# These test vectors satisfy A * B = ModMul (mod M) and 0 <= ModMul < M.
+
+Title = ModMul tests
+
+
+ModMul = ae2ca2ce7addaee2e2b7752e286b2bb6a58b51cfbed5c924f00398e59ec36fe6341cd83da43a33a12410f45f6228079c4aeb3912be87e2e81fa1799151bfa0fea29873097475b2c3efa312145d0bf7e51b2a7c9bc961a4f4dcf0c883ff90b919b87c21099fba40257645be31f95a3a277
+A = 6b18497fed9befdf22a01d988d34213f6687d8a96e86c188dea4172e7c6095a0d18d3c86c0f5a1af9c6e3aaeb6baac2a510930b3ed06ec78ec2e12b
+B = 1a058d99397db0d209f01212dd4023ae01b15da04fe62d1f76f21622b2695558c67d706c535ca7f19b36f8ef2d508ffd6cf6fcf25e5
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = c462c7cdd79b7604246a0cd97b40ea5a9a77408f13cbb548b56ee713c690dac0507fd988bf28e77462832f4307b08564a51510d4a951c1ad7564316dbead2b53540090827a8ade8092a6133af0e5fac7310f787dc1472836178ed6992b9f71224da3e884bef8e8379a58e6d4be0fbaf59bc520f786631857213305e23fd5ca65
+A = 16c92f77c139706430f396f72ec7adb045745cd9f5899b0074d9955bd32de66f57c05c7929b575312a7f1c04f19e724d64744bff7b31ad0e6171437763
+B = -8734c4a2361fc530f60b28a5f1c7e93136c5ff6bfc7553965eaca54c61e6befb3c0f8cef4280e780cc5940d21a740debba31f863ded75
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = c462c7cdd79b76042469eb41a7a83115eb84103da4ba438c3e33227631dc185054ba4e607141d1e60990d8aad4e0bb0ceb645ce9ccdfe72d4738cbe1f6a73ed3e070194fa4feca6001c4a853940a227d15c1f1cc153d8c96e90e24805929fb11e0665e0c41c77d5a97fc5903a8b215360e26f6a19922d650f460f7056274ee92
+A = -6715098ab2ba3ea1e6341e89936e3ae913cdd450dc831c8534071f3c362841e47d88f2cd29c0d1239aa0949f3685f12f8519625bbf10b2c7a515e6d00942
+B = 536d4b3e4815ae5ed55bae6950f5a8a61d52439d2800ef1b5ba2285b85ed0f6ec4af9fa0e364a6b14f6f6b8bebce9200467804e787f9f3e9
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 309b3e30f74c58beca8b2c23f64fe1203830db8a7e306e1fa2e2022f0d6d422851da509d1b2936f088f0e35effe12a7463f47ca369bee2f2980bc48dd8e696b2d8c6f35cf55fb8baafc2e613b4c684de26129cf196741aab873f81e498b1e03018a539b5eadffeb5953029f31f8579df7ec0ff3f752491910
+A = -11fec955948e007b59fc50e729941ee9d43d552b9411510b73f6b4faafc0465f261f8381d96f647267f72175883172918b5c866cf1f1ffc43c55f3c96a60c01
+B = -2b3792f39499767e0a8b7a6a406e470a78f97ebb36765beab5fe52e95abf7582736db72a2ebfdb2405e3954c968b350a459ff84ef815dbc5910
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 9143ec3e9f74a8eec476cab17ad8636eaa7c60e108e89ae0702dbdb2b255a217ba2530c6fd52658cd931b962054a9c20c8713976ef3b7989c40611cd25b0a9ad0635d61f6dc95dba6e0c4a7d53ff539b623b97ba3d66344fa324f905abb861c6b1e830c4b0fd5f6a4b01f09c8e1408941291b2285c4625267a108c
+A = 7713413d87f1e50840255927ff27bad79e5de5898725a876e4647913158cda9f5fa031dd7fc11d2e8130a0ba99e8706341c1a98d5fee3218763ceb1d131e9cdcc
+B = 1384e60753dd4bc20cdabf398525e7c4aa40065255c5058cae0b2ec90a3821bea8de672a712431aef5864eab719ba621cbbd8b46fe86fb31286091
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = c462b3b4a0432890d141c0f46a28190a2e30ebb2e4ba90ed132169cd72316b290dbf5c261984d98e63eea6525fa890bf52185ad7f164cf49f67ca91c2f35511f3bef6eb7f3da31a602a78e4752e326d79dea729f4ca6438f2aa65eff44bc60979b42e44f6a301cb5de8fb42abb47bce5633c6ae9479d39c9e8b507d96161e0fc
+A = 17d806d7c76aa8acb051fd9c0c782443f1b1b6387455f7cfb737c41658d0459bda5d13587055eafb87ad8d209bccac1fdc392aeca0774ea48799511c1fb9141cad2f
+B = -d7c9b6574354e131de4b8643d766641e98554a03238ebfce1112c3da5f049d6c410a7f05758571aa2625f7190b936a214797570539317b32fb94cfd8
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 16c84ed15ec6352a8ce6d5c2bdc0d9f13b333072fc7041146e944a29391f83e346b8ac0bee6dde98a420ba4f8852801d7c5bea6f1177a6cbf799edf2146f8297013e0e796917cc967786788ff12d9c1d07d9ce4b897bd22a1b8a391d3b4ecaa5b5c85d0a03aea5145db6350c42a964a41ee5f83e7d35e14cf442e5d99ccd0ac8
+A = -6d84cdf18a2f53fe496248fafef183914d55c42267af3dd42a39515e80cf29211fd58454986f5fb6afb56170dd9865d3158249090270bb9af341c830522a4dcabfd494
+B = 6f6f3f74187b7d74dee92f79be864d0a2c56d4bca3283742e9cdf15112c8f4208e3ac8ecc98b44b4ad74b0671afa4aa9e48dc31d34224a1f66bb2b4658a
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 8fb782e4883ccf3aaa2d3e020b08993d580c69ec8fe66ecac152c5babc8aeffafe406736cea492450fe6adc25dfa2e12723a3f9baeb02fc0f785b3db760ed28048e1710a78a2ae0c96b67c109c5034375a512b6fc7906847253f66316baa0ef90facc9ab992235153684d49d6939ab9e91086529494d7386f604ed69aca2f53
+A = -1f745c8f0c8fe6ce3f893d77fb274c61b72b2d9f9c5a2eb2467bc00d1f496d0ad469d76bce318bd64ff1107ee5fcad4469f84d658586a5789c068b0cb9b866d8fdcbcac5f
+B = -3a2347b491813252e8ebef1bd181534b074a368d076b8c80bde2e54ec3b4ec99001f43080c7857427e069d99b1b65cff998a141ca6963aa5fad1ee632986ad
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 7c0c1c05ae1d6420bd93596a01aa0153000ecce660a8a14d6fde7d4740719cc495fe6681a9a08163b2dfd51659b3ae7db0fbe09504370bfc695457d7b32665a4df53e879ac817bf715d5bd6ca0e242b1ebacb1ffd6698ec90c442910a92b35ec103b345f9a9e5c7b005f8028da4dde80f36f6f6e5675040d19e46aef06040eb3
+A = 4c09264420a9452c6f0b55baee42c076aae5a73697cc6bbb88b7c922f236ee4c18e477f88e2c40cee03f0bbe87d3ac8dffd75f635315f856a3881c6373e8b9a286c813325d3
+B = 10474ece7ddae5c53c4df5b594439124370932dd94aa5d5b4ddaa233b1a55634fb7d72e33bf1b02965fa9d1538f97e1cdb5ec0477cec8ebaf202aff8533211169
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 481543f1556df756ae2e422ffe35aae020c9bde9e9b1f760b43043a4654de363dc67f381c0df1c3c1b90edb4343c47ffb8345a1aaf5dae56f446fee08a0b9ee8c42fff57143e10846610a9925be96418c4c957b4e92af734b96fd6f21974877dba52a0db1fec4aa97640e357434f95ba74b6b8323cbe17118dc489552844602c
+A = 11bccd165d9fa2d8b01a48c0ec549a6e600396cd2023f0240056193ad27e971c604eda8aaed6ff6be8be1001f3dbdc8655f1ae84eceb963938ae7bf428eb5c968f584798c1bd8b
+B = -cfb6629ddfc98a242e3290959f4d0726c0b1770b52393bc7488a471a90f7f0951362c03e67f443c9ecf4987f5303a789bf65e0fd59cc5eeb9f5d4f40d3e4a14080c
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 2a770ccfbcb2bad207d0e2dfaeed04b6e7509daef00a1df88e57509451739a8a0f15106ce8b53d280a4b4e09900420714cb6961ebb0e00e88567c5df50d2f2908b4bf8e0a9a5a8b3c6120503c14f16a99297459543c467dcb67915e0a10e19f72ed5b6891a6121b66abaa602818801d3306630bb04ea57e6b31b2c05e368d398
+A = -442c80289bfbf00db06eafbf06109b55f99786a323fc2c6db5686f99094cc24aef50475841243ec3ade2a1e0ff28b4032fd8afb8bb5e28f3b2863bdb9fc8f033adbaeb5f2ab16fe9
+B = 6d43e3c46f4a55d49e78f40d34033a7f5fcbe50873930e7c5452b6b3b176534e6e70033868c85b4d63052964093214dfd0bda6a84e893b1aae3cc72aa83d039e51c014
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = ba0e8c91a86af1001b13deb115c77609a1e7a3736a6b807255aee898e3100f469ef6222be532dedb1b8d3db4b3b55aa4b5da5629c83e9b2bde76bf2f2a4119a5378b5cde000980b3e58595d988ff776f0388fe025625ccf368e20914fa90dc771c826e4a836b2890e82ac2274471d586b4de5dab3278f0e70207562ac6e6493b
+A = -14be403d28c8451cac4dc83fbf895a9d2b74f730c39b0fcb33d7258f99211dde31a78f182ad1d27a559031d67d6f2f94a741f141bab80fc692afb452ee2d502099ebd5760ccec7f7ebf
+B = -2742dfd02134594edc6d3025aba5ca4a34dfeb43821ad84164510b43be4fb95748f8d0eed7bbcbeca14efe843fb676882784bb36c889be29bdad9270e0956286552119561
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 20c691d6544912fadfd9894cbfd42745991f39a29cbe3a1cdd302bd0487bf70c0179b9579b77f8481bee13ddbe42f32d734b6118af92884c946ea8576f6dec867c1c251c73777cad7c7c76e90da00ae07f96c8d6a751e5b18157dac4468c05d32eb86e74e0e8312bef85905af8193a3f5c799c5875badbc9eb7ead1258e56d7c
+A = 7ae9b4d5151b11bb7bd4d1569a6f4804f3b4d77948e0c6300e4f28d51c9a0afed2ae7503e53489edca5359e2b3d0c82a9cef316cd7e1c1275c31fc9c51a8c1e5fdf23935484e467d6460d
+B = 1f46f88d39fbedffa8501fa1268bdf3460aa98e12b629da59676e61852a4d3f8c59f72a2fd717fe2faa09639bc651ba516cd39297e0cac67444ec57c0db47c2a4e250033d02c
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = bf21b3cd55c0df8d4d568d00f757b10ef3de782ae71b289cb2b59d36df1341382bdc1825ba13199f2cf279a72968b3bbf5f7e3d13ea9adeb96d81132788231fd988eef04828119dcca21ec1fe844998909cc95a8d01720e883df27f07ef4dc3f09081015dbbdf019b96707c18b0b1db6e689e8f86466a2afea4a9cafc576e10c
+A = 1243b14aa3d16a55935f6f8ca49295e35e7f75b03de7192e1e8a479abc0a430e0d340acc05eb9a61a5dcbfe3ce3a4c5c940699f5043e924f282bd21e341edf8b7a6741c6ac72d7587a9e7a60
+B = -bcf08b2153e8ca911096189e35dbdb21b77ce89685484f574c89f1747612f39340bf1b204a23530abb36b2c5e195940b86ef1252d6729393c25d4c73dd434b6dbc3057b05d3f15
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 460539d96c07e72acba5b59c88fe904bf7f1e1648612908444b0b08172d05968b31b43456918b4287dbe01afc3cb4860d9c2fe549a580c989b6507094f6c241eadff910d2603f747f8e289e7a8176ca4a978bba89288a4cf875bf3e03939af966c54e77c28119a39d34a2b7055465f58ef2efe7c82ac547fb675653198e4b504
+A = -5a44cb669c055ba7c28d49f84bf8d12179aa30bbb9db2a48d7a6b09e44dc0e0f7471e3629cd2fb51e5a53346ae025fb49f9591ed1d71bc79daeb3f1254342d8a2b091ae07a758c1555efe59e78
+B = 646cc0f766346aaecbc5147a4488ce157a6d844045b80884eaee9d419087285fa71108b5ab4a05689aacc8d2e3dd0e6714c55eb8f77487a3fc5e56c3c2df0c4acf28a457051118560
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 79b536f4f30f9f7483f90e65e6456ef8072d9a7430405cf8c9377ceea2c676afc338837643436d55ac6af2326ebb362684bccc5092367209822581700d641cb8d331432b761e4c6e22639a27335f45a25ec019d180fc53dfb53d69216d7cfaeaa07db8288adc35b7bbccf2829631c1eebb821e4d3299015c3d462dc17aee5024
+A = -167529b1e8668938ec02a68bf4d76c22dd018c41e19be25e2f821f63c2046085d0af30d8b4212ea0f3f9943be1c14fb2d2a944551107cd2bbf8dda5bf258957325f06277036282977db4575b0deaa
+B = -378e1be10a57e03b197bc2b1287d643ba6d89da4bf6a6170816691fb6529c602eced237863ee39659be3729825f032a57eb5de0a87b0894d1a1244523e85b6f50a3d9976dbb038490e46
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 658169197ddd0bfae101c10c3e6a2b10dbb456048e81160b47b197fef439b1e0ed710399cfc80ead8e436f1c0399064f92da50afc335847515686e055fc7bcc0ca721184435955b896b0af4f4d96672ebed2f154538d49fa507b945c0a6ae926793751231980274213c80046666c28ada213a2f87509d1466b8d1b2122e93f8
+A = 49136d37ae8f3da71a6114327833e8aaf3dc8b5a9a27e9d04c953988456e525263f86ba94397321c2093803b789f8db3ed7cdba19c4b796500b979e02952e1625246f8e977e01fccc133f94cb22832c
+B = 1dca005663385fc00b4fd58c73adc7589d15ddbcb8cb2fba03a737a320c447a2b21e576ceda73811a31d8277883fd31e22f776bff3261a098ecf8f40f2855b0c723d1265eeafb43f85323e3
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = a49fc8084f3e780537b4038bb769b8db3653a3315298a99c2ede6739a1732a636e9787f2e8b09d0b9bea08fac43cccca71a315e6f4a7d6417d171b4693dbdbee8cd9f95be0847ffd40ff027267125d67b89737e1d0365bef6c4429504d13cd8ddc7810f456d6293c0c57c14a307b94010d79d5c13b92a907f923966fd3c5c8ea
+A = 1e7d8de2061cca59d1cc19b356a8fcdf2ccf917e0d81598f014167c5a8de027ccfc8f2cb8c37c396ebaac83ba862c146bb2d551d10ce03de9528f97725804e8a6de57b9d9da811200604c2a032462b6ac1
+B = -e38592f3acd75b575f64ced439d5ef2377d21c61bc70625639b01bf755fa2c6de803ce155744993493debcd4de40860bbfcee86d0b117d7f8c3f8ace68b67cb6fe7a81a145535553896424f7a
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 5a99c8a6afaa97d8e7d84f4899803c7786b1bfd2ecabdbfbb3bbb92247ff91ac213a72f6d23c24699d60babe91a7d9cea751e686c027fa1c954474fa5680f0059118426c71299462b11de5f2817d190599cc4b352df4d2e80605f9ad1e32eb13712d3027a2b6a19d52151e37e7fa057d8fe59dfc8a943a42a1756a38f103a75c
+A = -7df29221e6a102e32757c18f87927cdc90ecb012ab0557e0ab855daba832d76ddf595b9c5a62988ca968b64fd5bba2a147a5991810c17cae7edfde38bdbb7e13a1fe5206724c05a9fc9276c8d4e503a860c7
+B = 5c586d1aff7dafea3b8ee42e0e8854712c95385374b5bd1fc8ec41a72b296e070940c4160509a4a1699a678533ff3d12299338fc441b0f01e29a48677bfc5aebc644555285756e97c74e1af6aaa8
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 21fd2d881b6a52332dceea42664aeae1ca110512c13bb33e25ba4ec0f39f80eb73b1fa0834c998c23a2453dbff971eadb183c51a30ba78d593f23be9cb6b2b33a554ef31e4a36e0314fc2ec889f18debb956b89d1bf8172553271bd56d89ed0b30abb70e68abaa2c76f73cd5a3de93433747d09c845b5f8843f9fdf9f6c975c8
+A = -19fe3bdddcf08190a037768b77666de803ca4f7f0d7dbe6aaaf334a486dd0da7ca024d1b3df11e0406b0326595a171be30b04574c1a7d04f4d2ccd334663690fd20e4fd168386280510a00a70c1a11e99483048
+B = -33b2400173c057980b0e0cfabbda1a5cb5b83b7ae80708c199f28142237f04b071c6eeb63d42e80eec04b76152250c9e4d4c4f19a048cb9815dce6e66710fad1d27494db5c31d9af37d2aa779d12d7f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 1c45cfacf30682a876cfe253f05b393a2cd4dc065ce73126508ce897a99a723cf5145187643ee62d746f6edf70269ddce3c348a1432316286a648ee9ac31ef87feb14f25c42f2dfc2e84bb5bdb4ec0124e249c526c55ff2cd0ae938555c5f86d856eb181572ed01dc045f1ababa52d249e56aba0ecccda905d7d1e64bf89bfe8
+A = 6a40d948eac2fe5bf6db15d7f6b89fdc0712e32d39a881c21859e8f7722391ce05973efc7c40e2c0d7f56c217d8a986bfdb08bf87bc0435873cfe4d01967c46f7d39464bec411d0369f6f5d1d83f42596fa47451d
+B = 12529775e8253ba220d890d4912fb95f91e4edb59610e889431208b6bb42b089cf2aaa12ff9ff98c2482e7f4cbf35b22d15fa28aa288217bf766e937a706fe1e600143087b0a67f668cb7b762c9b9f38c0
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 3b3b08e8eda8be3918bf648227eb0d569dd898729d9cd54deb32b1a1dc69cf7b2c4184c8ae9641f0f75950df263a5e236f428ca86244e617b14a04edd0f31c02bd4d84f25bacfcd4a2786825f0361251475eb6c7e99020dfee4298a1f1bc260d4e364a332bc6f651dde7ce5026dbeb0e5aa75ee98874da54c7930108ad28e3a0
+A = 149d36918fffa682cf90c4d3f3d48e6408e7ddcbeb44e78b9cc7fbb08108f65215761a61d79f37ec8f67cc51e0a9b4bcb3834b0ebcf6734985153f29a2778473b80147eddc813b4fbeb98843f5c1ae6cea68f88dbb4c
+B = -ca87f66182e271a69c0964eda92a009d438078b584c3eede28ce1a501838c5f497186d305c09922f32ba858fb55f2a0dbfc9cd0f93b789c1f800cf092726d6d33db19e4f26c7dfca69b83925db14544ebfe2
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = b199655160d88b6b4157ada0e5675f82b33b5592408bb57c46e2f7d8791bfccaa51436dc3b772b83e907c20ce7edc2835ce96595b78c0647d244e9bad6f4184e0003eb0899e7a47ba0be888b9bf795eba95e5073a85c4d20416fcd4a8d4e1e16b403deb38845fb8bf9e9264d68807acf02d579e8cd104cf2bd555e6cf73d0450
+A = -70ccbb73e33a7cec30ef2071f3b1f2e008e70fd6d00fe8b7aa4b9146fc6d0549c57d984cd014c7e0a4ed6d33376998b7c2c9778fb9580d8ca4ba795c88612721c153c186740c58df3fa63b6cf7a4de76e049217218c05c
+B = 6cf4168d44a8da8e8446b4420466fefbdeeaf9623a40e10b77547687b25f36916f2c18cf6060c03b3b40e0959479f6aad5e44dcff0ba799262ef53e280f4a7f667d262d472b2e573265774deb5ff8f25dc1822b
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 6ff91af444c61d2e2fe8ad73bdc5377d5becd55074eb60f0f98eca3d8f4be8c02f196b3afea12c36f78b78ae6a5ab677ffb7d9c0bd58987cca816affe468c7fb4b56055f5d2326532d6ed1c00ca2d052ecd103994e8929bce04e067082b4ded7e1973566f99c514b4e0d95b9a8a931ef4f6355066940990fead70208a63841f8
+A = -1c924bea12ad6f8b65abd1796e381fee2cfbec15138191bc22d57165928794bb080c83878fa5fd19a5d657b2fa91165459966f50aabf19440f7d75f027b32e999ff4d3f7a7ce878fe0f33a847d644d86ca19713ca9968d97c
+B = -3abd4b281b8f25f5957d1f2fde904457d49a3a7eeceada26b454ceb4ae0e879135d376571f08b5038b7b3d73a9a9fecbe265b72375756a715a523ba66737085e5ef7a4ad988155adc93eadd5d95a0faea56914983b
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = b9076229b1a1241e8b4da3fe143ac31d060785be6ac1e841c2fa9683d2bacff2e2b5dbac33f58b0b1718ad2053c37ee55ea54a9d258ddd8930d2784852844d85db24e4721762839a5c73cfe588efedc8932ccfa585e1b5975083919be9e32a86dbdf5cef84d3d4b2ccaf7a006c0cadca1e35fff2da9da7d7e779494d8f85bf4c
+A = 75eb0fe6c07559c2b0c7b2acd7d29b5798f6c4cda64a504ebabdf54bdc773ab28b218f0defc040016178958d5561796230b71edf49bbdcbd3f14494859843c8ca7a0f777cb05827f2839f3982832f4f3e3c5e50af17ecebbbc3
+B = 1b8aa718d61447003fdbaa748a9d86befdd2675a677cf34a1be7c81e4577f665d71135a8a243976a4f6ffa1636695567bde522f8fb1948033a7e0941f833d827e957781cb4349a08c6be418befc8959960fd5fc1b288c
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 9df82b7c34ca97a3a5d4efa28d5ed4f35484914dd73af9090c4bb31ea3496ece8ec650f4e7b07dc779c97e597e76e43cdadbfc6e72b61ea718c073be1cd204f8ad2bad0df1e530e75705f3d3dc285e9d793c8d42f04dc20773d3fcda8ef3ac1cb10d33d20a91add0358ab8658f49d2fe51d0d2d72684e31c0eef85e5695bb4b4
+A = 1fc2a171445ee6add5c2e4d29e50b91d83338f8d63c111e4d3e95f16d2a33be02bef24dcc3d6ce6bb8f1ef980dbf8fed409a0232c0566153014eef840aff58ed8c33e8d463d408f93e2f5381a26fdea63676c4e5397eba1d39f928
+B = -bdac7a177c77451104852bb99004ce8e617036906667258d85adcbe8cda21ab7d03aa7dcf62cb210a9db8fc750c7e1ad290b35473be0fd607fcdc686de0b78fd9f258f5b25e2ed43c2ad1a38859f882b9f6b293dc258659
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = bd9f3d2e8a1086b177698f87a9860e3a5f030e04a0bf4ee9436ac55e005bda01ff4ac662cb85d39e98a41c723ae542a83a936c3bd0280c6801ffda080ec0aa4230b45dcd0bc5eb41cfcf272028bce3572847637a92d1543bb2b8408e880f5b776e1cf14fa28d15cfb584f025596ff10c9f091c837a3aa622d9e5c856db8ac207
+A = -7fd5357cbee7c5e31fb62ad03bd47b705b574d915200fc7f1013d836b9cb683db020b152ae9464de6aeb8baf14999ac7025dde6173fae6ade325c60ec310eff6dc4130a8efffb15ddae90d760cb7f76a27d0368175d4a44a22f7f223
+B = 5894a0223e4aafe4efd4572752fbde4952c8b09cdfc35137e7e6ed650f8fdcfce9de673853dbf73730b159b2656047e69377d7c5025a6b346fb08831e64bc8bc34b75765012460d8135a4f7a0f41d768fb85abf17f5e2f5c3f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 2c61867bca70e8662c7e5435a5aec020faae86fb079b992bf49d8497fc5f96abbd38a6f04f6ca8510e0160e546b3f68b7baef4ef0f404e881771cc12ec5ed3e3787c2d2ad6bb957cc59f8d56f0afb4bea49cb671cb42f4e8a0ee1dfadb6fa14f84a5b3269dd33e20d658ea4cc39499c7a39a4b5650ad7018d32f97954610f676
+A = -1bf5ae15f24c7c14eb59605136a3f679f303cd5b81e4a27465281d17715afdc2c231d7ccbc59f80ad176f4e0326eb757b52e3695e27c6776d7936da47e3a8a904f735b151422029535045ef489e61ec93f02e6d588491c8dad1cc311f52
+B = -3238dcafb85ce557036d19e42e7e7e473de9f9da6f920e18845dd010546868d2652decc94596cd2c36bd16b02c02559892b9f573bf21ab18c3c75591413d046b385d08aa66d849ab8adc9fbf788e837b047a7ce2b9c63f7fbd263
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = c1d04b831b712d0619db462c3f3fb5973f5984e9a48493ff273a5abe17a548e185d751628899e2851e425a7d4b2c72d4d908dc813cd122b8f497e08e299dca9166f19752ff8cd9840a70155ed9e8c063a3840838b3679f96f1cd5f1cbf0e037d222029e02769dce7fdaea0bbb5417f85497d77c76a387c6b970eac15dcd128ba
+A = 7aeb60c134e84f289e419b74f99a5ce5b4aed5fc630d5d591ac7643251ad32d6ca7f052fdf8857f67138262d221de644140e9018f7b84879d74883f8f251303f65e06bb52246ec6a912772cb698b47de41c1826ddd065359f6b9f1ccb0cdf
+B = 17f81e53d9fa6201e4d3eeebb32267929cd5258d10f053e7c021c4afd17094f8ecf433b1ca752f8740f6d6bd84f801b1b9fd64bc4787b9ae5e5aba0b4318a63dfe27e92d5a3ade192af7563c74c9d6006ae7701240efdd6021a83cf6
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = aef89874854ed34deae1b77286f9cb0e3017e3ae77fe050bb244acf4f30dc03504c73c1a4d44b769709bdb53811a5d0f8a76a08e6a66fc2cc4e98537ad6a8049f02494305b89a49a55e71fcc3f5fc42d6b478456ada9b19ec0a03f5ccfac5538c0040092771660312be5e51996073ff1a506d7460c57d54e10dc2991c028606a
+A = 18d3af14bbffbfcabdaabe44074b407d69abdd80a6eaa5954f0e45fac85af7ced1715c78da872f7a8fabaad3207e31f12b7195cdb25abef0a1e54d3b13349d997f207fe130d7985e2033cfec899a0af310c9827749cd22bd062eb0b1faa254de
+B = -85a7d9f08a60031e689b0e611d7f7f46e1178eaa2e6459602e738990c77f4d3783ac43fc04d53504cf67fccbeb02f9846756f8e32fa4a9316b6d3b45f644254077bef096a72bcff17ffa17070a4355121cc5daa2f782fc0d0bb48101db
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 14a85edc6297763547702c212b1a8274b8f85d53ef35cd1b01ed51039bbe030d0a1b9626ae2f571a43f1224d723847a1c6708f2238f6f6fd75db6656e6c703a5acb57f69717efe8ed58a3713ba2720d8c001d026d83de0ce5e24b67c41daacedaadfe404aaa9b672f00562e6901fbd0710c4303fec41ee3338100beb36c9b1ed
+A = -44414ec207060d105f599b9a66aafecc5b232b55214c1a5e1922f6b59439b3ff77cd3a327bce4f7406871196b90350e6dca9aae147ce03027dc4de7563c734f111d95171f489105de5ca80047cfa43f7e932917b816ba7d41fb95b4106745d700f
+B = 45f2cea1b9b75880ac3ec206740cfe0ecceb488c9155cfacf5885a8cb49be78af8cf221ff8de2328f4880479c031f830a3c9eaebfd83f7de501b7c5cde03c4720c56a676d331b2a13c4689a2e34a43fc11f62825b8776e75d31225ca7ff65
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 7670c1e2e141d8f8f5466de8ae2e0ba2eb3eb7634699eab8415d3a37f8df291d00def88361e9fb64a2f116433dac3ac2764fd62f3201dce4e48a3b7019e5465f82241ffda29d5eb0462fde74dea3168f8993ccd4d090b9c31a5a6cd7e05f725bbc89479836b89379b422250ab049f31c860110df5ed69089716877fb0ad7b0dc
+A = -15b4a2f808a85a5bd466a342c4853c04ac0ab73f8e53a4a0477f73dfeb8d7a911ab2eb5d3d192b9b084d0e38db491148947c66f838aa5f460c37341b129137614259efa531c0e6ffdf163ec6851737037a5299060418d96da035e6f583e6ba79d0414
+B = -3e94fdf22004384f7881875b1d8f58019ed8afb1b6a31f5d591e77b0998f3100b34174d6f3466da44b4c7fc8b92ccc5679c26c146b704198a65a88554d24291adcf897bd758a035361f671a82972b5962002c6a828792980f86a64547165327f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 35b49beccd8d2010a8d777c1ff69e28e01a1bb78c6466e717f0a934bb62f9bbcec5ed29f9cd2c14d240a6c33b28c986eb9c8912a4927605532483dcfd31a50876e1819f3d7a0f49bd276ced5c4110470244fca52d2611ed7e31cd8b73e749aa70743b39e92810b3b52320342a65cad3180f6e2966059d15f79e5574348f5f66c
+A = 6fd078e3cbcda6a71a710e99204da640edc71a65974fc765999a74ab50a0e4b090d57ed0ee869c8da2cf694b6fab56e87c4af62fbe73eb8890bc066ec3460beba04dac3b8fae7e4f316e8f954c6e8d934e946dfdc9f4cde0f26bb3d40d5c444b03bfc65
+B = 14d8041a3b83468d2f44f150ad8d8d0a1a22035d630f2a17b70d5c3d557d3abc7e4d753e1ebfb3a3ba465520b84746073d211a67e079ec7f47c2cff9c06da69bb5cbafcb6cabe7e0018867c42e07931d6797d4499463e3cf786c6d5d6c8cbd600d8
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 2f6e0fed8a9720fbd83ce950d7545d2c6d5b271582194570424f90309227a51777cac974bca0ad3c1289ceb91cf75af73b0645cc20d71e7789144876b8c1bdd550328d9907accc316189e8ad81310848cddd2dbe362c9398d814a048f93f9368fdbec0f19ab87ad2a59d4066d738c3da3cb71d4716f2cd2336ad35ea1438276c
+A = 14bda9e4aac85b0ab7abece728f61450b7779d3b5fb83be813758e742d2ad76597f132aed91e20a75c554f0d61ec4dd118eb733d04942b2548b1efdb4dd22fdb543d9bc1e4bf0574ae2cb2c46fb98cc4835b6a074d6df1a3bc5443beabdc784d542e3349ad
+B = -efd765f8ffd72d041ac3244078b8dc4482233e9411b289cbc2cfc26fed2cf28e286835010438ddc9e7021ceb098b10c68bcc4732608ec1f4052df9362176ee14812bbf09ccf7c2882714ecbbf92bbff61c06e9dc35a368208a05dde949fa2cd091ce0
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 1f0c436379f6dff55a59093ff2a0626a9b959e3e3e59365afc33c7a7893f04bca863ec910c446957baa8de4e35a1f4e9c4a776ef41b053f03b775f327eb7e5fbe68bbb478aa4339ae703ee4b573d6931e47e09271d40239d527fe77098a7fbe519f5eda1f26dd6a7d0ee6833efe37187d8a85844690fecf9fdc3a4d80b921130
+A = -51eb34de29ba24d2b1fbeb0a1c324f4ebc69cda2dff971a315c0c2775d988b03ca29891ed0790f3dd507a1d26ead461dade9284613e45df338dd83aebfb66050465d8aee554970b43f7d4e0428e1512289fa1f9b23867b67095c455b66d536b91207b749189c
+B = 55259a1122eb7eb611a69118d3d42c2f05dd228d71c0e1e42ae3a8d3d180a95b74150d844e916ac85105805126e4b995f2ed1cd3fcdf28e1fd241dbe3125dfb3e4d90556256eb513a2f7c9b596719c83b26931d92bfd3573560e8bf054138f5d6b9cde72
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = ac321a272d2206df4dcd6ed8ca194a1049c1e3a20bf325fa44809d302170f850721c077bb5d792f86f7ab03ca259567397cc2fa1429771190bb632ac2c92d3fccf6e05e13cd33149994cda5f9c57da155439663f6a13c66f9da553f5038fb92fdba186ed9ca04b8ec87cba4c5a68c8edeedb94e38a6dbe293340dee1a4ecc768
+A = -19ac99d7d51456b00a193b3b04693c7e5436e05763f0154768db078ea5111cfe9eda3451091af213b9c8cc649d341de66c12ab2803ea39655d3d7de182a77355ca444c5d2778f791d39952a7a11839e497f5dfd8a703df49ec4d7628bfc25a992e94a6477e6be39
+B = -286d1d436f113308be594f0f43d7a05120639152b7e2f93058cf602cbdbc016512bfd23f7aa937fb358b7b602d15998ecc150f2b9224c58527c0c1267739e065e24236771e2c683957871637468181e6e896b513569bd004b9845f0f0e4c26a5ca123365e1c
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 3466804a1b7d1af8b6060aa93a4c325d9cadb33ebcc8bd991f9e44cc2cca8918411efeed0f005790d649382ec40278c8cff903cf3db177d24466c58cf6a56ffc14e595c36bfefaa2327d37f616b1466eb702f5c49170598bc361d892e18051b8233dbc5b3fd6832befd9a995bcef3b0f3beda6efaf09f7306ec203172e78264f
+A = 6710c19330d3f974fc377e28039e0c0ee0a558621fd67fe724c326537c18c66dc5eec60980e07d401ad5556a05688d2dbe7b271f9d5eda3032bf7cb7c420e7b5d65a195bc037090b6fe83064ac3731624ce2baaaa62a6eb07156ca12ee51d4321988026cff573ede9
+B = 137ca18f47a151363a3e8c52dcf024262ba525ec8852e8e406f460fffc2cf88f1999b17a5821849317fcd84d09c88ebb6eb0340120f113d7ca5fbd91c6a40cd790bce7b422552cc0cfd2a6417add2501db1667f2802e5d0f4df824adbd033a90a155cebfbe0b53
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 6f248a70b2cddd9627b32fbd130f05a604866799365f94d97f1eb582b28192959692a870be7c2614536a8de84cd8c1364a75a3927ef9dddbb8c6c87dbf526f2d3a7916384f2daed96002831173fa4a51863c28b4378f99b1b201010581d5eabd66ad1e328cc4e647bf5e0588bb775e130b4a4d029eeeeb5852c5742862ddbc3e
+A = 1f014cdd87cb33ffee623cf454edf2c476e91df279b4f0879637eb6e8e5ccab305186de67585595d34ebc195fb150408c4620cf6c7a0b0d9695ba0e0e1d7552ca7d0be3dd678b1cce2beedd11939891a6804770f1c843e16dc2ea6aa8e4043940c37fd3d950caa122845
+B = -8d8d9dedc80994fc5db04d8c935301e47054250fea9020bde8d5fef01f2307cbf458d5afef5210a369c396287c5eb453637a2d721085af3de0d75a5dfb5dfd22fde3b229d438439af7b296b9e68ffc982efc6c825556c52a735f8be12a214a06c4270824d5268fb6
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = a35ff7e232f047e575b200b9fc4c9253de6ac04c612b8a82c275a951075eace5e7d6664fe8f78301d554cebe7b996c1f4ec3ca59d8d12d7196eb3909223de94c220f0445d24233534af1c93433b05c5924799d2c781fdb88c4537bb8d442e6bf76b2d966827bfb4f40378a3f135103513da056bc0d375b1339561700d15a0227
+A = -58346cc8a9a1e5b8babaed8e7f59415388e0db654ea7cd465d96781c57faae7a8af8e7578e46f3a8de7bd1027188e1cc32fd1c0d60be24fa3289a12cd822a6c9a77dcf8799624856c27ba88fbdb047473274e651760581b44457ed048cf76c166d38bb9b2afd3416ac7e45
+B = 61951a16dc6466a9fabae99df29b7229f1ab96b476092dca1e4f8fc8e7404e2fba56ee66486d1f27f89bb3f86f271307228d7d6cbcff943961e177300b6acec1eeb46af1c5725f745a2d2af0fd9642f57a09c9ce6742114be0aa6e939e638bd5c7a92a7c206b2d36e35
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 90b441d8277eb1ed454964acf567067925881b5db0b446a7d554dc61ae87ff979bfb0e58ca1706123453e62ce31284a5a2db1228d259e27abc7fb5cc5848dbeb9a6808fa1b4afa844ab39b652abc41423c2833e1209a1674db518b6df7ebae315dd7f416df54e73088762ef64cc2cd0a08b1cb01c49d9299d149cbe84145a55c
+A = -1ebb693ea7d18e0ff4a9a51124ebb78bfa3a4635b75a6387e9fc745a2325409f927324d1289be8a4f5cf2d5c04adc7ead20564f97e453287f03e5ab59a6133584f970446652d05a131d7d382c47b7cb97580ef6710a532dd4f5a0369dd3db500ae5a3c5efb587cf0cd2638382
+B = -3916ebc4653e7d6e0a4f1e234d765d41e9e948b5acd7ebc73cb595559c1b20b037a3c8da0a7aebfa5fd327bdcc922551cdb8db3fb0a581fa0620ca2d2559ccde3ebc44542b4d80926d061e2a35c08c09547e0cd587c396ff2959ee93ea64b1e6b7e2b624cdf445988e1f42
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 3ac61c3a028f4a2df6645acbd36818a2f76a3229d229ce22471760807585a909727411e8b68bfa4e76adc459409a101a1ce83900d46918e8d0903a163de87c07bbafbd60c7f536a62c59370ea53b6cea4384345343146bbf529334b4201ebdc7585b6e5eee42696400c9be9f496406a4eb51d2fd1b40466224f1752b181774ad
+A = 5a16d5fb9047949684b80805e5d962bdb939d0d0368b48517a2a826679c37ee0ded4fa83e657192d9ae84294e450f7e2f2773d1f13395169582cbf95860891b9fdf8f3240a16aadd1198e884f22b2718219d478e2410fd4bb98ea534a3626201959af099fa55488f5390791bcc7
+B = 1f67066dd06ed4a49cb556dc2fce22814754885a7cf6c13915d974b46b0e6269c0fafd688f45ed2deeb026a7cbb772c080dfd577d21ed2c81e50e7537a70dd550eb94fcdf626500040da88c43dabce13c82a93769a9e0ef66a471661292dfd3b3af07169e2dc909e43678400b
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 7087dd62eed6ccffc7e1370cca9444dccc4ff160458941aa9f49dec1a2e9ecce4cf50ac2daf06994c5010cf225cc92238cd60e1aed9edb2befb0fb354ffdde94ef5e8ad0415bc95851d59095a5c4850ec52a74c78eab58309f395d3078dc481feb9d30bcd9f113af7a01611b94d085e32193dec738a64c5fe9bdfbf5dbc98cda
+A = 13596eeefbf06e9ead8d883113d8ae6cc3da8b6fa13ab66681db5a9c083ef9e49d905ec19c39b149cc09452eea0446b29cc92d4e865e6f681827336945282fa6b276ef552363229a976c503b822e6e4a9862d3fb30dd0c3627ccb97a7046a6a679050a39166388a9daad5ec5555dbf
+B = -a4e574363f2e5982cc087b38110d257019962fc166c2d6e6d396220bb308a8a0dc7d90c5cb2ab85faa19b07ed7dc11eae9bf2abde0a5fed279e77a717b43d35e70fec4e18445e37741262d0b0c20dc4375371d87d839d39934f1dc41122e815f3f37352d04d0cf514738b351f02
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 8495eeee238164082240ae1db1e3c1e36fb6621e6b714c9de914f9de8a587d7106b8dc5214f7c60c0ee231d7441e03cc26462e71adf8e29772ac95d0395722d2756f9f64daa8ed41d7ce824a572d7f9fd419112ae823b5b48b8aaae09fe093e9ed05918c4ec88ab159890910837ad0691849b44be95993682b2da2b124de39ec
+A = -403f21e1a7911806747bb78a4f20c4e6572d49c6c4ce071db0c8c91ee985e68a16e60093e4628414b2673d25c9f13c4c43600633af95017e3846512197c9515aaf9953570ce5861620716b3d80eae7de0f033772fba82652484cb3ce7cc189d1fafb14e044e07a88da302547f2e623d8
+B = 689d1b4a968b7c00082ae3a29c8571f826c4630c947a7767fe4a71af43a5de84db9b5baec0980eafd0019e09de1b5c56173ede68c9a6acf260bef3d9a03f4c83a33106c94ca7e1a8615b3553088d1d05a62ddab0f1e5a126df5d960f67e3b92981022e1f0358c7970bb2fd5dce7a7c
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 397df584bcd3b2e1ec7ed89de624e9d104bd6812901e38c5740755ce91bd54155c0b624c590ded199590be5d98bd1ad4acee56a62d05d6b5fdd1ade12f7db8e3eb08c4a5996450cc1204be7ba61b768af0efd563ea478033324731e24fedada1ad6e564238c891494e85ded4feb2165fda22f75bf120856034a9206511885fd5
+A = -19cc480d1e07523bac502872a971d78bb26955c5453386f5d51767150e229daad3ab2dc85e0fa0cf6e72389391fe627fd2d9f263f105508642eae5a095ec4d88545dc9d0a2c436907460e1ea7db174673000eb2e0b60d57163ced261bd0f6cd8ce54133cfa10591f1fd27996353110060cf
+B = -39c45512fc7c9620194fb7ad22abea8f6dbff4a137dc4523115ad7e262934143cf1f320892f8c097a400d4099e787ea7041d0d69b6269d191fcdc8ea28340ecacab71058cb39a9c7362c848826b35ab560c27113fe53c497ca452397891c81365b6e7f07f916d47961e50b8c7c5cab38f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 263ab04c98efac12210beb66b13fec7c260c5b1cbc20cd732a511fb3786b917a617d6622847f4eed70f25982ef5d0b0d13848c62dcf447e3a1d491f4c80e69cec03cd318f6f93134d582210bfa81c1790562053a71091333348c6624d4d793fd6ef971d284a4ebf0be0771efad302015abfaf3edba017907f10ea14a46d9fdc4
+A = 7a354753e39b9ad1c0ad6b65575fc7247487f3ea320fa82d1d333ba8dd5d0ff925331994a6961c9c603be5775ef1842159551f0bfb34920b93d90ca60e6abd514650f77ee8ffff2bac0eecd0fe8ea0fffc6ed0285c9f3c3cfaacf338043975457d62f9c8dda8cce1e99f34529435016fe2ed4
+B = 1a4384f9620567c698ced05870b4dae983d8f0df6aec888353f9dd6ac8ad54340c3ba8346bfa47bac38897f3963fce972f6d55f3407ae03f5c7637be1a34e483e50dcc27148b76ef079f117104162beb191d146ec828ad5c5bde5ee1683a031d554c276d837bf1f2f622cd11baabce10212e
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 91cf4d1899e170bf75dda0d51a6481f79eb94c333b876382c9d04681073e949191223926523f6531f0a45765d7f382221eaa080d7bd05a3c19220ebe18802b15d8009714e8e4e9872223049622ca02040eb041707c7e525f698cc361847c66fe3673a72e4d701466bc374f55fa5437216eb59375c0e2c4f7020149d0118ea72a
+A = 12f35c48024e8271e8f9a60a48b5a214bfb6595a837c041b230e6ac87a4c1d4b3f93a2d3a193c750c9857c8627d0f7c454d6c4f224dbf14a865eb83e990b1d9b8bfb729b8d3dedbbe9c95032e4d60676c2baa2aabafa698392590add3b83b521a7a5e7d6f8af207e44ebecd735374acd01ef5822
+B = -8fc18f92c0613d085cf3ee6f586b39b99ecca864bcbe60fffc63c585e5613df68f3534ad46e244916b1f9188507a3692526c9e403b8e93480b0a5a6297f65215f1a5d8e20631a9d559fa1acc15a98c9397761ce18903f393b10444ba51bc92ac44df90d4cf0852da9d75902230c6de6f26dfdb
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 9af562a7b61c6c84c91bf979f32ba5d246d2ee2050f07ec2dd5cb3f9496bd37c3922ecb2b5b17085a13e93ab2dac6022077cc18c621cce3a2d2247e5e89de8692a36f596e5dc7a6969a4f3ff0d1580eed380e6550c6218c1938caa2b7ab401ae6f520063c811088504d60a19da3b5018d640ab8d340f35d1337a2ede8bc64bf0
+A = -63bc10b8fbcb391dea305fe61b404d3bebd035514a812d0e1d38daa3d67f9f1bb8f02d2979270cb9147aa51d66ca73d4b5787e472456a13fbe0d568e92b622439d33ad3c357a56dd26806ebda7b3bb592385ca5dba7e5eb5d85eed0a1746441e8d56e22decdbf8f4296e30d222da5af17c427e832b
+B = 57a602bbdefcdd00f42ed1e2cbde2ba858d171804da56b0ac87081424ad1569df1308fee7c9ed349eb496d5409c4c46921f09ff0830bc9f57e920e17df16523598fd90314141955ddb84a1522ff3ebfa812cfeb6670525123476a739f64ebe6a5f1fc805a880f8e5a71b908c483a121b38d05cc2c
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = b395c9f264172a3653af6637e72c4c8e564d1ce68032a5d761bf546e0c4b51b33cb026bb4256fa639ae98e54e5ff7d8921ae411497272b53d97c2c44b5b9ecc5aba43dde201f64f1d033056f19ceb0cbd04decb486a1d07ab1c64fd213d7eb6db9cd11efd743462e137f368acc4ca0b49a7f85587bbb5ede4be1616889e2699d
+A = -1e71df5f04001f6468c3a192086bda948aedd19c5da9a5286856f30524238d95b0ae71940f2af123315ab5d2fc61964d3e970d5858b7c1a78d0f2cfd10cba7ba4830a8c19a09b59794ca5d7da32cd8376b5ab06079b51cd9819c0021ea41a9e43aee147befdbb17a92cac7c7767705fdd908bcd291fbb
+B = -394c187308320ba1b14d91d75b8ff993dfd57f9c84e8185f12bf9924e046629ffcd7174879f9925bb643988259cbe9dc9277fa83a25012f91159b012f1964aefddd5a94ac6c2a55a22bbae93085dee079f84cea1d53dc4771901db9a3db5a14eb17c25aaf5377e2beaff6276cbce7cee97a9b8f32737
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 6602ce0fb5002eca37e85b60cc871b7b2eed13d38c20a37a6e0886ee4814f3ce2515f8714c67ad81e8c3abf6a00464e6a51b15e55b6c11296ada43cf459e15915026d3260cce8fb796241fc2b0bdd2b65ec04bee3b7ab6626e10597f3b13b43d16c34afd5b43a219917626c88b24c6f8392bde1b2e65a50b7f1a8dc5eb096702
+A = 4855ce75a3d7dbb72a257f6291e9f6ccc158647aeb2f8beb3e8fb32f6f59af1a46617b77440798562d6f58bfe826d3ea7dd28daee8f5162d7d24ae6c24c2deb2669b15898689ca789e2005903f3a94e991e7d3c8f3ae6181029d959bb15e71d7ba94d2dfd3ddd10f6fc49a65798b5f6ffd64682c78b5d91
+B = 15b3e9992aa3f042fd58ff97a8c04aaebf46b75fdc38caa9224394a1805cc26e4311bfb498d5a04d19396e98d11c8810620979362df82b23a115fc1711b57c7a56b8408e2682a2edca36cf9311addfedd2d0889a78cc1ab170d1379245de6f1f6f4db815fea9130463dfe5283f195e6e81486a1d39634aa
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 6a81ccd82f00d829bac186fb38b85097d52afa3ca83a026856bb83f94d6af6f6c6f3141d433f8fc159d11397df8d2f44c769f255cf8148249d8e9fc4f59ec3bc8e804d7d5189e71e20b8d0e540b59a2854ddd7feeebda5a95f17605e8bd5f311a63cc2e4ce23a51229d0a49ca04982c1bff79c201de6cc6150b690c98106a39c
+A = 1f1589c9b5ad9d878631cb03c23ea7e94680220856285668838452a63b726e01709588b38e578da8a4845aa5cc2e4723beafa4f81a1a2e463f67d9a3e432de7064ba8bfcb943cd9efb0e5a136649cdcf5e85a667917075804991b997f318752304f4946d69abf161625ed0c03bf9abeb4ef28034f818e2a643
+B = -909dc7fcbd27d0bf7d6a3d0e2937ce725b5cca0acf78c103d633206cb431e2e2c785aea4bfe2042df32417143de76b71d21587112f36d067f878e556b94ef63d59a07d19647593efdba7f3f5324d64c55f93a283a0dafe080167f6576053f9beb326994f4a1d53e18e3f3e770e69450bb70f276d128e48ecc
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 69139f2e10726f83300505d15dcbad5b5f284d1c06789181683b7b8caf35dff063dfa4968c35facf32a3628dcfc19b3fa4c30ba0e030b06773832a2631529fe0c0c402e05a0c4e9446a8b6c22754c70ef540f90d903d83a2e3592169ce6b5edf939ac5ff25b8bd48aa2425321602a9571661a1109e275a3b3039ff0c2f430b18
+A = -5d02cf3969bff8789850ac898c00fcb3ff1fc49a22cb243ad18703bb8fae25f83502bcdd885417fe46e8237fd0b444712c4fdb8f4972dbf9278a83eb305efc7a8210ce55167c069d1c4136a9b66d0c4dfadbf036c079d12aa082fbb42bfb0098006136a61f3da43aba3d3bcf2f5ac2d7884caddd0cfc28681d33
+B = 50b369234d993721288662d83298d99b9052a0a66336a5a31b76dfb20ec2b5be3aa76f78b2c17c63d78402a15aacb585be5c8d2e7083145e316e71e111fd34f5c79363c4591c247b1a94b20ee042d840c42a3001d6c8dc7cc1e1348e0e3ea8c6551f9d24af2dc2d0c38a54ef065ff048b148ce4f11ed2b549c50
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 87de406a6c957e85c759f8ff684023a0f98e93ad4ffcbc6fb0038c7a7ceed2486f15f36555d286338aab3283aef677118f7cc3f88a7ff0ac9fed31da6786ce895c3c08d3edb652bbc9ac2b44c4cd24ad281ca3a8e8e6e4d730f4f0c25487cfc1b2afe222934eca8b1e1572780dcc149422a88eeb1bf31065c929685a0a97ac3a
+A = -1878e0497aa1c2942a2e6956957c876dac73c4bdbf42bc92498f29a006bc92f788c24a4624b87324a7c8aedc6b2c0c8a1a442aa91557aed9bf2c02b6664979e8a9a21330dd839f4ba8f84515fa6f7db9287f7c20f31732b98fc09ee7796dc524870dc35851814bc57e1a8ac49d8935fea04bb08b8760df33a98149b
+B = -32f4e94bd073cf3f70810d9af7a873996a0510109bc6fdebb855f27dcd012c59507491152d30849d75f95dd868992c6fbbf29b1d899cfd401e9e7f4e0436732cb4cc9e6a6d6b0cb63fb0bee21e422b7f7b7b14dc5d2b6d10447fc4add390fd3c8e7b06f1d9b181adfa8d04459ed051bbdc9666623b00e3871e597be
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = b456ccf9d066dcf4247a21c7f3820e324ac9cf004cecf8dd1f6c3aa40c2a33e24c423e97190fc71bb9fec21d36c5a687065a7877237a2a05e64cabfb3b20bfff0b1f5ef2e9adb7edcd7140d1047b0919a2c770579ab44a08e5ad9f63a06f90ec7d5885b91de5e524b2e187937609b4b81d40a0b33e31a48d7b9868add75286a6
+A = 6c484e3c6b530dcd3644b19fee66c41c7c2c1dbcde574d87ee13cabef9dccbe5b41e25c32c6a56df23f2e87176afd28249e5fcb918723707fca94d7e2c9623a3493d395db802a1b49d550f52c29666f785652fe81afcab00a60a5b50cbf523cd13dfa06d5a5b0809c68ff7264a2cb35b8d52284172c62ee658e8417e6
+B = 1b4fc753d0530bd07094bae09a02b1ea684fb4e8519086b1e2ed9d59af011f61d1b94ffca6f354a5b428417b328bb1e8af3f6c7ac9121dae58de9f1dcbaa9c73a357f408b870e62b0c7db1a72c4c440f2e6fe90b199b9dab29fc23927190d3f2bf8a7ee926a152e64474283695614ad696c85ea547f5f51d02d1b823e3
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 5e7c63276f350f04816a6ed9f98507a78314f1d99081fcd906affa3b8395fb58d029ec657af82e77ef45611bc988095bba9c26f25f8fd404432fecd02398e69635f3315a824d6a98b33eaf6a91f12957a5e80cb48d5b086c795eb3b1e04da5432a7e8be3d683addc586a44b6243ffbb7a979bf9664cc7ec41e75f267d58a7127
+A = 18efe267d4c62576294f4ba44c67a058cdc0bb44c48f4035682b2d6b8a63106081af43d99098ce133f8d7f9cd04d4dd7414f704e32871d43d6e5d73fa9f447873168b43b32d6ad19378d74a967f92ec7629a690d29a62a5a6e734e9ccf5b84857a00d97b9db846b057004b03d88b827dde717fc30e6a5246c752d65dd625
+B = -ebaa580d3eef5361547c692e107439c8391ac0a2d1cec0cd275d0be69133eba8a94bd186ff9a129af3f5a015d5ebd30215643554d7064635dc11ec7a8ed2200fd637b099e534237f0495d2b629abd4c8f84aa1d925d53e98490d02f9fe51bdda08b043f67f0903c0195fcb886c04397d3612e4501ab8c7b7db69f781e169
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 76fcb39f94dd2756e8266c025cebe8e801524a757b976e35ed45e3da3db720061cee9037fdb34776c704ad2059ad8920e400bfbf10eca9bb157eca7750cc31fda06473bd22d4def80189c47ba32e2824c721425f225563df2a2ea1edd090e01c0bf980677db5a5dcad37d21a68e2832d1012586f506480e929b2fd9bb4aaddf0
+A = -75f903ed9bb0b6db8e3be16e797258f6c18f6cb7b16f835f04e3045f7e4974d7a86a63f2ec351c88fadc0635b6dc83a797cdcb5cce1a1674f89e44190991e0930575b19e2aa1512bbbf2ef6f8c3e707b17516756fadb635d8c6bf9caddeba14834b5950a4d1e98bca79a4d15e5fa5fa3c1727d7a49b33d481d32fb14ae4164
+B = 4ccc582c8460f7def2d26167b68788a681c41bdf6dc805dca83127a18bff6f5ebea6db75cd959beb859637b200ccb5c7644d571f436e46a357d027edc9769da226278f7ab947963f7caed1e7e70e572980e960e9764a40c6db67bb526694b084976142471270b2331da563a10427cbbb38e76203d7da5d67487eff701d75188
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 5adef30c67aefea4da3884b8a1d0ce6724492bc76b477f1053621e7d19f3cac15448e9401d34e05ac4b508b9d1db9a8d323cf43722e0af6e3c3b6d463c6007449c3bc3236d156cdf988dfc308a1b4911554ecace52938a7b10f463d14f917ec3d9fddcf6d33081745009c59b58aa22bcd7dd8c3bbd489997d4e0bff5473ab9d5
+A = -174e8e057a1d66e22eff88de26f43fde1c8efe5611f6ba4f318f027f5a5818df02ec3f014dfedcdfc8c143c5005c3c5098d409710967c93474f5854c1113fe4030e6682bd56d389ca8b9a4587b8b9262d146bc92fcd81d75c3bfa4281898f394f45d5dd11cd4c7344ee7a933ee346bdaeb6f5188967c388b919a0ce6730c0bbdb
+B = -22702bcc4f9d5bc6f803af6af8072780ff7de7a346d6b9293ca751d6ee3a81493fa86738c44cf2b7be4bf14a55a4f8179c35c09dcb1485f4c08ec5e9f9b1efa91f4b5f15a31a46e1ed71cd934ba6bd271bb22bb5703aa468d297f360ecbb48f9fd6c572683e83ebc3d432203347dc62e19fa06f93e087283347950829d4256bf5f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 5c2f67b1607776c10fe2c30b112e541c4d8229f5f99f615fa02cf715d3f20556a28eff5c233c58994e9c6c1fcc37b3416b0875b9a62fa5a09a4b8f9e216487203b387ff97fad1f39f674ab19c5e34cb2f162e6b0b0b0084f0618e64928423b73b189c744e3de9fa50d66f45975f68b14866cc16c8c6c722a54420adf027880aa
+A = 67056e93b69e8a7b789f1f8b835d9c6ecb7762f844d656b26df9844a60bfbe0d55684f61debeed31a24ef4246485e8a1d43d49eaf97ed9e7b9f2d2916a8d85b8c9e8ad5575cf5a3fea42392e5d1dfb23f7ad41a7b56a4f21e2828aab38a602d560c99783a4f807120292ceae366b1fbfb4be8e5d4561bc8944e7f17ebbcb0fb6296
+B = 1f874f244ed6cff9f910ba9a58db0dc0a7435e8d99ba6412e976b8f64d4106d3c5c57ba079384fced1c261aaa538e131734451fe84fd3cc5cc8b3ab46b2031f888d95084cd3a35a61092672a9118eee4ed1a0df0409e3613b3ef45a8b16b71ec892755dc3f83c5492b67fb9a143ee6102d053078f4875636b20b536d5cf851768cf73
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 7850019c6712f18eab877faa8489daba23cf34b512a3193852508185b13cd5a2e9f503fe8d61b74b5d3930021a5b8c38322aae9b9b1b4814fa4c2c5bc409b58f11fc8fd7854b17baa94a6bff5f234832f9468d90d148fa2bfed774ac03f2dab6a506a70db4ce363f932adcae202f04fdcae968f632dd674416c23d4e21345ef2
+A = 1e378a0f27e6259763890d29e112e3d8d2bdeb9994c49fb67ab680b6e71a52fa0a7db886d3baf52f36d943b5430ae8bcd82e229f4197239c35678eed254c5816722b995e9c311be942f8124e2f80c1e59658433a57f346adfcdb83202e55457308161d2f928b60efc39538a6469f90f1a868cf6077568c8241623896ddc2705cf04e4f
+B = -f4ee37e39d4cadb692bab5483ceaf0258b068f2c0354c540438803780c983469ea28324ce7e209c3bf55b91f0a2f4544bf318585e4514333eafb9b8c2f02170c620e9b5280a828ce1d8dfc64ae9c28577e15071825a85a59656c5b47d9a382af6b78a5b3dab1078dd647e0b473174b8415d401543d30a4018cc3eddbfa546d0fad9cbb2
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 4c8f8b671443a3af5ef5749885ce5de8e2afeadef9051bc49c0d7e72922d049b1accdb79d82288e472b07578e8b6d2176d6cbdd7f0caab593dc0fd9224a94920235410501fddd6001b62a7f7d8eceaa7a8e4c0de52029fae68656e8120972b5cc1c2e909c2742e836f2fecfa51e12e4f8a2ec7e69eab061c81785374ac607fbe
+A = -5769eae759dd6bf94468eae94189d3396886d4569b0ce264c22d39b623be3abb01bd5008b9fc86701a3373f7764118becadcc69481cbb134c20f669cefeb376dfc489dd4ee91cb333d06afa391dd322abe2b3b715d11ee372666473a473e29dd90fcc97e939049b455be52b3f288db306999019c1177ab5820d94859a9d2f050b7ee1d4a
+B = 44adcaf1e2afbfddae19b23cfc0f0ba1f940d32945d0b541db23f3a0a9d06fb1f67ade9a8e620bd96f4005ced99430c7a55eb7e93a701c829fd5b9e55dbb4d3833afbcaa0d9c946916b1a86af4a6393b1155c6439b8b82260e09ccf0ce5d1c4856f4d524983e4b0fa123267694a1c6118beb8be26113a02721a02d7b0ccb01ec6e9c0f9e19
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 51e25767b8d4d7b2b0c2652d9ca6bfdbfea06acba543b1bc8d3d25b2fe5f2998febe1a6e742abc3f482b4267854c2223a5918a9b5c84e0864278283bcb5bace0c046db1d0240443404fb62d70ebff3ccc655e5f5977958df4c878d9859a69731744f3d33978ac31551487270bb4fb56ccbf59402ef9fee42cbc329420180de08
+A = -1966812979042198f70b3f1238c93ac5c6e5749f1108c2bba869b1dac7680f910e56318c9b59be9212e713a348767ba6e75917fb599e929ea2144880d18d4fbda4f4663c7abb49b02245169f385e09098a4e01b56dadfca8c803acb7cc244f3c98bc17440ab2afce318476b80e1d0b4ed9a8d6f2a0be64633f8faad5eb48de2681a38a633ec
+B = -2e4f5eb92fc34c753c61dcc826abab6fc4f427c6ac7e73ffdf65b1037464b2a9a0b0290e713d81ab57c0e1dc30e76fdf96046fe10a34cc4511398319ee34bcaf73763a9042fcacf59a100c43d3333ffb3743048e8df0dc61fd0da3f935fadf882ffdfa9f0f42980c1af6edfdf161c4b16087e2b14277f655abe54582de79c51193e13169b55e6
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 33539b5f38a9943b15801d449adabe02da6e21651d96acd9aa40e866bf65015fa40178399254e8af6bb082d021e2a05da0f45b699d193b70112e114f0d25287476dc0c733c5cf9df57667ad0d3ffc4ea2f85b43cd10459cdca9465b0974e578c00a6e275e0b97ef2a4c9886aab7b5947b78a88f84a3f1d8c5f26bd07bcc59886
+A = 531b891fe9e8db322cec59a2115574c7a304c423e6b11516906b840542b2c608785e2c18033262ab9cf68f63edb40ad4f073ce8841db602cf8fae0a6771d741c6392976c9b333ecfcd0c8e9997da40616ae2a9e0c6be93fdc7af0dc0668ded1e42a9f729c70f74500ee76a91d3d993c075c2f645b35792a20edf17c157459e35c0a48da6c4c6f
+B = 1a6fdbfed1054a0c5758f92f72db7e5737b0740c4d8c3ae4713366ef6709b21eaecb6b74c92541a9a0c99ae18ac6ef7de79d4c84ce39ad59cea9c203734a99bbb895916275e8778cfcf7fbb7b7d081a677769e4ab96bc7bcf23303100e629fa8e07f5b8fc2e39c7b5724c72907eaad09d3088783b3118e57c9c8ad1799b43a13f73864c5602c478a
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 2eab6018361f557ab06725ad90f6886d4b468ab1a193f8fdcfb4ad15fff781c8681329a27aeb5f03a81d7c404b8017b12fe23165e941ea767c733513a07e921aedf20596763f6f977316e37bed70f6a617e5c2757c229c59b3d7b1fe8755b5f65f7f407f13634aca7c8a267e661ae2f77fc5a95f56cd6c8458119df587478b1b
+A = 1cc779145b2b7bf9ef4c9692845e162329940f96eb43e04db8728bfe736698082aae6b6a1b3c32867c293b08547a0941cf4059d2d567840ab6ea526e3724ad59e715a3782ca656cbb739dfdf0c113a18f0dd62423d4edb60057fcaedbb852178d38f1b5a232842b4fc645cbfd97a8cac0b094b870064302dcdf23df2c9e9f736d93409cbb8ce9ab3
+B = -cbba16086b51bd83d3460e51cf193ebc79b826e4f30978274eac3b2dcb04e9d7b56a1449b7cb128bbfeff5c4720bae45271fcc64085d3ee501f0f21fe73cb7db5f275d88be55c339f9180ea21a8cf3755a875331931b75d23f57c2030c89c6f9c1ead431cb4dbd4480564c83f8470610e5673c7eb6c0fe7351ffd7ee460df5db7872c67041aff0227f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 96fd93535728b961b4167be8b304e570cc34e787c12a9a5d76e099b336ed6b837cfc246c5bceb04b0f4744c5da7071fc01d70e342509473e5bd7c60d6046c9b4f21c5ee71c4e678447f837db3a7694fc3936ca733efdb7d387f0f6e263b3ac0b89054a826da9716691c9d580ad38d701d08ca090b6c59be466e1b9833e75d820
+A = -6791fd686f46c3773fc8d7f4753d178a93f6fa4941f4305d9689c2a305bc67840bbef80ff05c7bc6de3a595f73846609327d28540cd705f5aa94a3ae5915ef55304c37c4c43a4b46906889331ee16585629bb303673d439de9c0236f708fd19a977e6e1032e0576a921853f7dd328979ad1f1aa945905dae93a82b3af9451a541f544c18ed2546b66e
+B = 6ae062b39c77bebc2fef05743e6d35e14a31c6fe1fdc42d8de2db94ce70a6d60d66263c7414b1081ef2fa6ab511b361b8baa9c71ec628dba5bfd772c440baefc2fbed68d40897878232d9715c4b7e7c9bdd41cfe7b6986d825f68be8cc16d04afb0cf593f3028f3dcd91bc94923f3d7211aa5f0f12d3270e8df8bc191808f0e266c4fce2af97ac7ce06b0
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 949ea5f645ffe5d0d03359d51a663c7dd6e6013812a47be309575e036503126f48677c68c4ef6e7b3f72d76657fa282ad5881263e649b5297da82e24298300d032af3f5e8309ac7eb597b16e257a6f7af3476a264415aa7783433e83be57ffb3fdb404a9ddc3527d6a9c297f8cb7b6674961b3af837ebb65f218147a46c39cba
+A = -10f59ba073126d92a201529a5374500612bc59a9e66322c6706b422d35a4f82d97e668b268f5527b4641c6099c80bcea504234f3c1e3fd29eba0f161da97c50aea542becba499f29d4ba5571873d4dd9eb3f48cb26fa6c929a704fe8e49791b2ca3293c2428d9cb453263935c9c90a4a2b39d23a0baa12535845f907d42b729033a0a1e74d18da30a88ed
+B = -34fdf9ae6760d4f434d09ce2a7760ca2dda14bc256015809745524dc49d841b07102aefe5a1d0182e3e09d4d45b415e46f653185742b9b8ea6960160752080e5c9577a12182ccf1a293407b534ea8ddd33ad16cd19ba537d8db5b542f86a2a292423d452bf18d82361240a7efa831518184572c5a8b73b108a81d5036b3b530d98bd47c7fb2123418f12e05e
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 9ab739ddae55a0d71b39974628d4601122ba6c5035c3ad0439691317f23dc33c0014f3e870a105e4dc1432ec79693bac658433b21cfc218ed411e003990b94ebfa87767f3614ec19f5bc30704adcaf85a9d3d15ea764c8f0bbd52ff388659637746d39859398c79016ace8c6f97d3a5616711a235b85f334fb889b9280ccbea1
+A = 76b15a0aa0f59ec804a5e9a627e1fed524320b29120b6789f8e71b1ac4e00a9a8c826919035b84f87d291e2f35460bee181342136dd9eaeb99ed00c6328b8e44c49ede3921d6275f6e7f03de179fb2374ae2fa6c58852fbb2649e214691daef945ead6c8bd5a53ad2b130e9eab6ad046ddd6b80874ca6515322bc171ee32749333669de0d9c883058423579
+B = 1fe2171056ed4585a143b6b2bb5f44047664f64d710dfc05c18be5840ef9426ef05b6e92e4ecb5544ee4622e9030153dd9827f2f01ef38e62b88ecd6c46b4457d16644ef6d863c226acfd6928a40de614a5853137124fe69127a7f05463eaa49bc742d8f7be300d06b302dfb0ba86801119bcdc01b516afa360aa8b22b7c6c1839cff859ca1bf26e3f7e030512d
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 5631048ffdb2767aa04d59d8a5750016b38b983a2d53743ba4de5d93bcfc8ec30183a84bb1e290ef9c72c7ad357728acecfc613a6f9b3d712456d545ed54a337930937f4589fe41e66ee930db3dc10a4fe41481008c69eced65b9d1c46b8574c5ac8f7d94025d8fff00ced17a5e17508527681bf94c2dedd51502a2c4652538c
+A = 1aca12b1933f25ea081e12ff4a4f6f9ce379f96d976da2ff7b8eb8ad791fabe31c1148fdec22dfd67828e540c955a1e13f40c5b125e1c7e6bd839bfa84e5bfb58bfed76058c6db77af7a34ffd25fabd60e19f65e1faeeea6371d7785f2e5bddc8650a7492e06691d61f997483661eeff54a30656f1daacf31182486bc40647975151fc05d2f64b50e632f5d5c4
+B = -88ed894287043e7e5cd2eda3c1e5c97f85809f7a246b0c20891fa9a024f3aba4ec1f3d112580fe6ba6b0bdcaa1325ac7ec9508aa88c187af08e4f37631eb6cc97e4481b18f747ce6d35ff355e425a4833834ffb8d34a818bdb015fb818ac9f58feb87020234243aff912da5590ea3f6cba74f1a9fc3ffa2b4aeea25479c55a3b572621e75d86d8c8f6ee4f587e0f5
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 6ce341aa4a571cd5bc110dd436acaa09f409661967de0bd096c77c60db58b2b0ec95cda50acd7fa20ea4266b2c579eeb6ac214a75d40abbb70845db74c4d6c93f8c545add269d45fb15d985e7e630d0425565d06dad4a3ff9835411e51fdd9780c24f466dbf29244cd1b8c3445af181d0928db399bbc8632f7ebcb9d48c0b754
+A = -52c53999b02a92d6254557203cb31a21dcb896495d1f29f3277d19129ee43e521ab9d5a297204a844a9537d63b74686eceba72ea2e7b98ee8895513395cf7c44c99348f5c4eb657874a8115f0027d6a416b8a04a1ec0e6809b7701ee7d41e99996e307bee9c295ab3df1faf674e0067d0ab3bec4da998580203e33760870ae472a3045bbd66e352b8f4d284efc00
+B = 4329d110504caeb71ce0453b0706ff675f646e70a6bd9575791a38f672eff226f4958f8b1fe4123c0001d8f8595d8030d0e9798232942725a9b9d654ecf50546adfba7103fed796b455ffbb4c153e70f941bef7953c8a210d6f2f4ddf5d9a79d9938503ae8f24d69d5d7df1c988630ed960e12dd877bb80a1ab0bcf6db67e0c0578fc0c40408f72b19052534da8d31ed
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 4b9fc1e0eb4be199427c48bbe1b53948d0135bc1965b8aa5421a4ec704b13cf934c650405ba02ad611b0f29d46d82d4a1fc5a84651a29364524e37be2fc7001cbd3c792aa477802999841ff19620cf66dd2453c9b05aac349b9094d43b40e358f32805d87cea3cfa98e05240ff95ec57d88e0a12917628ebd34946eb1ad6799a
+A = -15a223b691d8b3696306b0ccdb52c1d62c7c2d1ac71e5f07cd8fba960417b42fb5ebed5eb9469be67f231b5254bb0fcfadf5ac5d2906769e8bf8292f0442986cabd88805a162c0c1f60f9ff0bcc2029ce33452d05f754375c0bd147fba745bf8a0008792d4f90d0e0f2cf391f2d7865705544f4a220ded44732321473c0ae7870394d4e625df11bd0923340cb70b995
+B = -340e5ccd644849d982bdd455ddb3b9a23ca14e168bb87256bcc370ffb6b7fe78fd062b3bcc1ad3c8c3b8cb549f2baaf1b7f0f6522aba02fd35b651f7de52b3aa2e0e40352bfd6ed0f84a2bbc3b3a396dc8512ca1db01cc69611925f1037794c82a418f10e0d994f458d1f19051e8bea32b90ce744d46718f42e711c094ad0a1ee96c88920188078f1b044ccf307e4cad7de
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 31c090e5160faff9a136a7a482b42a43ae3c7d00c215cbdad28804be0e7b12b0b3af820c1350b1622a22c8875f24d48ff16231c826d1a946c66f70aef92d4e6582e3ce9213d907267251ac74fa3cca9f1c8fd53fe9898aec19936a2b797fc345d68f0791cc740199be39c05053d5591d874b415e62653b04a3f41e263d00f230
+A = 5419e87e50b28b6d24927934b541d8de548a8f4ec7e9b00aadb6d23f2d33406177d3fc72d29ad2c2e141ab2916adfd30ec4791c626af61d8d192276d632aaf3b54e2ffe83b44f6f1ac441e6823b6b58cc08fd7a0af945a02eabb5aebb2c7ff0622a17b38077cd0cba906ce23e71ac7f4da40ef6066565b4cb3a62ebda28f3629eaa251dbd9979b123a5447ea20331723e
+B = 184782ba4daf429cbd13ac13fe93fe5833f09915cbbc707feca3293e505ce9cf0b4b12ffc8b178e0a4617f809be53d4895a4182e7a8a65043361e654befe8b01429ba4b7420193d1d7d90930ee19cee0316f33a5795335f5fa517e1ffbc99b95101b0f936353afd3bcfec34851ebff1ef02fea991a01b587d28640c935ec91496d1aa3ab8d38a6ac75b3a4198ed27b9019bb3e
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 5eb9f3ca660de481968a3c7321281f22fb9273b16fc10d8eff1fe34842364dabcfaee4993c1c8ddb7c8d6e509a8d2afc005075d5fd3c4471f0622753c7797aea900e785ceef905e2606f64f34e47239c40b74f07e2ca70bd5a18cb0a88780489f3e98232221f65ac9c5ce703a256b7b75eb1dd38778d8bc05a37ac9ad8d36b35
+A = 1c73d8e3d5db127a81477a5c4c6d61ac62af446981773ca15a9a01fd5175a2826a8763f91d68df28ee606e8ffc203305875a238d2095345556f12f3b5e10c5bb6ce3f90342ac74b9ac057195c863c4b9d28ca1d958a98649c7f8897bc6abbc39becae963f61b33bab4fd20d9d0e5464f21c2cdf06d00f597dfde45dc5919f5124f26888b12d72cbd2f57de3f2de7c014f891
+B = -e406fb60e35f0abdd313b8431f4cc89fbb034daf71fae0cc727e9a93cdfde53566fc74e48f4cc2111fad158c63293bca0b21b98416381b81d2443d0e91647679481cd6b6869b37112d3b6e575eea7fbb5bdea422558d817b49ac36a829926553202cf9dcef09423c085d26176a89be741ae20a434ea461def090dbffaf2e2ef97bbd4ec779041ed69ec07d125c7b85a2d215bb0f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = acf9d363fc9b76ecf7e61c33270031340e66595e559dd1c9dd4d2243819b660183521a4124558fd4b216dcf5c52c4127fe517c48cef428b9ee0f1bebabab487c968a80b9815e82c12e807c096974ea3893a8d5597f745365c352a6bc6ce92479176092f02907538c5e784bf26dcde7672338f402753b08de8aa21b9480df6955
+A = -7c03ba6e3939ebbeabd35cca277eecaec31f326ab75f1a29e05af50c4e62e0175d4d6a57acab87cf1fa3a51791e9a2b2d4d5db570ec3941263902b0c74544c323c106557cd5139d2a25f3c3ef81ca009d4e3c16f1abf6e2b5196df1b30def46d61eccdcb3741a6dfc8e8c5e6db68ec29c82b0adf6e35ce7aacef8da806b3b58bfa489d319869b20768f8eebb604a9624d048f9
+B = 4e021959da96ebeaad17f9896ed53010d80ed3fd4c3a826a266e82b80ad81b3032303e7c0e58034a652b8aac00c08d42a530039de60d74ad349438f5ecca1256342ded6f30e3bd2aad5bf2b49124cb27f45f697e157550dbbb37f5aef0f04839aaf1ba43bf1e77a1529818d0fa91d940904eda6b748e5c86cd1b37592542c43b7b4afe2b8926fef6dc01784fa431d43900edef27f8b
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 24124c69aaabec7a7b4e7a82245f6cb14b199852a8b314a7b8d9049cb66096d5ac93ac75eb58a2004de8b0fc8375638c0878fb6a45be8bfbcc292e3571df1bb8d6e346d5595fa395fef983a365e4e868154fb3e337d47771419e7f1dd5e4220900c564d7cbe8e7792ab288f99d265aeb296c5ebfdaf08b88d9b30ac660cc3ff8
+A = -167c959417e9566c93e7e05d2a410f4850e3a313e516ec958c3d2fbdecbf58072d05691c68981e176a867d7467091dfeca11f695f750c8c44ebc4d08e39e679d96c4791ceb1ea3b89fa3ce26f7ef214c5368c03ba694f7ae592bcd8ae53a66cb3eb1e0cd3c105faae6eb7e7a8fbc88248be722406f2d35e46c751b5ceabd992091eeba15191ccf6dd61a7ee0c624d43b188c42b6a
+B = -343940f3b2a5f73a51d6f609e8af306f44ce7b5c2e79edf6f4dfc07866dc5c4b2e0ba48099b5503af87762a44ae451d166f8914ba25b3cc41a766583bf73d27e40784064582fd9fe952fc00e9aa2d4e4f1ef35818978e725e69c1bcf267fda4d635d1d292d54d3ad10bae9763dc5d7f7226f371184465695f2d384d749fe07967a1bb64df22f294ed88b13600c7068d881f713cb8e3ce6
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 50cac148215963e58cf6d2ebc36fa518c63a0ab8fb136ab84c9657fee459043ee9f42aafec89e8ba5fd1cc5c4495a41e80590ce197e12c087ff7e6ea88ed798735f55a1634562b82f8514488ada526e5dc10700058980885000e266cad55948d1e080f6343f84b12a3698d9ad5427fad4017d931df77ed2e45e2fb8380b7fa39
+A = 6a9833d768a22ea46aab1a1619f30283a1ec254a2de5652981d73146aabe31041ed04d271c6f2e5e2d090cd615518a06563a94ee2b12cf9f142de3f15599998a712974d0ce9b122a2aa65bf8750f54c6324f12e321a888154330f0f9e1e5b7999acd70d4e6da95c2df1da2d19544b7abd2bd3041e3228c7cdba44f7d1cbfbcf968f8fe87fab523eede0485efaf5cc9e56095cec8983
+B = 11e782e2b3f469b1e3d14ccd1b8301ffcde7e371f6e9afc99af5809110c6d70e1cca5c0bbfeb95fc3ef8352581c11ba75c0f8c445ce2aea903769a24289581c95ae5ebd9553fee61a30d155bf6011278807833eb2ce7ee2a98fececa23fabaaa259409e88e3c4f4eb1e04176d44878ad3f6961e0615ade2fe86b6eb02adeaa7c9019d63231a28f84b7dcc8bb0e71e2a717db09301e1dca20f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 7cd49d72bcf5ff4fa2c686f21e1f0146c4f24b9ad2e900dca1c0a5d2fac5047509064e65ac582946b251a3f04850c9abd8b80c92af0fb11ac13debdae8b94927f1de0e4bb217e78f5d04897c6a0762667d3d883cb754dc610442c9dbd44228a7ae4f14fca145550d813655befe3bfeb52f1c76f989ea8a1dd9c10fbc7e9d6574
+A = 109fe33568598972063279b71ba0efdc2e03f770cdec331428fb8ca084c9b20d0fdb5cf9ad7ce90c8cb8f0fef10d219d7dfcc6b4599440db8cff9971da7852880bf004266886eced8763b3569720df3a1fb0dde2717ce0183f2250034871146628430f206c12f5fd87574c206b203d90c0f2c705cad3484c73da8bf4e9f7e1bd433a6f7fd27df63079d30c490aed7161bc594eefad4bc0
+B = -b95da952cabdebe0194b7fba519768e1b56149353cd12023b97397b59e0d7f4dd1d27b65b833948f58e66d3f6928cc3140cced835dbd612cc82a7e9fae1621986f71ddb6707ad57926b03e87e165d30fb145795a70627975bbf9d9ac9bce07492de5227c666663cc28b3e70b19dbaba7f16849535ce5fd61e91cd2875e0a534a10c60d21f919d566a3469d108a35ec3f023210efd5d318c7210
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 98a89cb3c9602fe503c32c44609bd4487b6c8323737b3376dafacc3eff96efcce7a31f1b61ee6799dc9561e77ac058fe5195cc013e72a2864f7e492d9f35244b321d46270a582f6f14f15fa8203d392e81b183a1d64d48b51d70e38d49c93869ffb9d7509f15ccde547d2d9c4dccd50eba49190b6e831a9f4f9000a95dc83f3c
+A = -67d7fc8f1766c40bd476cdb65d4dd161c3d4c2c5860a0c559f0e87ada213c9ed33308c36bb1c7d615fa69ec53656bbae6b57181a0134af23ea2a75f8fed3290a2f483392a3745fb57adf2121738c84f6d34325121a702c8ccac0090ea27fe9a5ebb6ba9d4f397e4a7e3151850b3d7d25643398bd3e4c1da081471389799245d986cab825a2e6ca72b38ff978a2753c835299ab4597bc65fc
+B = 676ddc4d18960817ff8fd2adffaa68c87d234d62d445d6ba3847ded849356d929d9e4ff01f517d7b1c0778bf90f475923517d855956f17ece1e032e2fd474d2133d6b8a591995454d8b587cb4f6fdd0fa29305f146d340cbe6b6efd28a926c73735621be0c5decb792083b3f063a43dd9f635e03f78c1bb56389a5cc993c8f36134d755a324d4fccc2ac3bafa270df67db0a4ee6ea4497aa33b5a8
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 76c31404854006a7d55554762094df6e11e0393f5b0451d85de2e5b104432df72023a35f44da10dbde01cebf77b8f9d3ad582373c5d32232564729af0d03c5450e439045d96a2f0a38871c922af2bd38c545d219adce0ec80fccd121d6a733bac09253604a8a0b1ecf0f24e44b818ab9e9974181cef10e9eb17684c57d72257c
+A = -134e8784878a8f3cf49ccb952075f9f9bcd24a20f8883955f262867045c11a9c566abee00638927e5de924872fb98f6376e321ebf3f567db6cfeede62e04f839617d78b7c9d3487b60a0d3897b3fa49b14c12511d04854bde4a9dbe5f31424a3d05cb75d23b46f6c0819536020880afa5a2c173f6881754b56f82a2864c99c820156f96b5cc4665d603597331d98d90a52f4a30c6215ee5eaa2
+B = -3c5c0d35de5fb21c84d2db228829f43b31132b582556b92b495f59df502a6d00584bb5bacd9b8c1a8c7eab91db0ea24b40f07e62a712842d5c2e1d208a6412a068cd5c6394d715260b67fbc03e3ae7eb4862f74f4d7484f747774fff03830c65fe022d579adb6737f6dfe297db750e6a58d1004e7e2716838befc2ea97179ecd53b7f36e3540e1c3a0f3e044bfe2d0efa9b89d2d308cbd0bd88ab3706
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 5b704b3181e5d0494937b4d6aa8172eea82919fd1d884493197a6a85ff047a7bcd5dcf072bdcef0287be20d4ac49918d1df550d184f86d7220f0a84fc4da3ad05e131c443fb529df01fec9fe4fa6fa2f36e791f9e16b4092759016d2f9b1ae7c3d071c57edf26386aaead767a3109c12a5004c7b9fa595e6d592daaa2dd1df04
+A = 48a0ccd2d14e14e2aa862d306501efe5de239e8ef36ff6251c861a0aee9f739411f402491bd99aebacdc26c4f30306f9137ffe4579c2f13efa81b979ddfffcd23675ac6307c0aa3ba8ee77a2e3a3c8e241bd2ade6484e6ead32ce8d752fb3584d14688f223758c5cb8705cea9c56136b219d87f9904bb56be2ea1c9a035df33455206e6b7972cba32ca4c3db41991117d88da3521780fe65c4023
+B = 160120a35ae3edac3edbede9ff1c6f317d95481227d87785b7ee46cfb80fac9973e418244884caca3211a3f6cd3bb419cf70fbc22d82ba5ab98ad80e1f6c2cda753aaf7be78613ef25577107a47ad1ee3c3645db85c4d29bd77900e99e1f439cb23c6c68662c05322f94feffcd9e37d8665cde984387093a043447de590e7874e6acfa37ed302040df4d5c3dcdf9fed91b3d17ab5c141d4494d0f301b508
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 448c3a64958b82ccaaed3c74706ce0a48c5e059c3610cc03a6b5a03a7de5d4f1d1e4b08a31478fa8edd58401f0171697f0662146ce2b371e335d695f9e4a671255f29fc0b9b7d1b2eca4cc7f8357aa0920b5942e31bcfae84e909828fbe5d02251ddf10dbe4c15351f675e96e2eae6d044da1f0858ce8ba9b7aa146850b85d93
+A = 1b2a52aefe44170376df29d17ae2dc1501c9c296f72f271c21f53db71247e72c3eb2b780190c45343bcc8f548507559ced3bd4a6fb13f9174dbddf965b9c4a56c3d88727736d78be9db2268cd02382e50c6fa28ddaf8eab9f44ad45d5882a5100b3027c150a7f3bb36f29d24a76e40f3820ba116d645800459f06c20679321cf5be72450879462f0eac99ab6ff8d26b464cd0e6d78621c9263394c15
+B = -b7d9bd08d7d8e0e9596851b7e03c78973a502afcc7b5fe5b0db6034ebb8a11df1ef7ed0ae1371eb4111cefd61c61935d768be3e3755e481daced219874cdf0d07a76e7144be626cf1fc21c8a0e9db4389ee213193775e95d4d86741d8d8fc820c239b7a90937000dc3e89b2fcd61b44e1c38c655bb3d31aa7e422b4406c9e4a88e6a2c18ec7c048f4a6b5b270c90d9fb378f64be3b5b351621db48a6c18625
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 2192157490ae044a26c23eea6da51d3a3dd08c7fb67a9beb76d37ee24ac0089863aa7f00849b81bab8259f3a0e1bc744d841e07aa413c286e4bef2ff3356bdbecee756026915894584b4fcef7e49da4012cd9fcb5dbe3f3b867cb6a7ee959a328b0fd56a9eac1f4e40a22bf0a30073cd2d48f99245ac03c373810c54eaf3306c
+A = -598eef47b40d1fa1ce260edc561bd1c1ab286a7e068af412ec2baaecd07c5b9cd596505ea1bf0370ea961c4ceeb9be76baec74e6952cb846f20e5da406bd01368b85d59569b403b7a305cd7448f331f10a34def43c738fd633df9a3eb194c32d53aeb567889927271d71d3929d43fb9338248b64f7d23cd1b053239e09cc2ccf5fe9c9ce240f1a10fb151a8583e4b4cbc70ec3082dd20a9962d564544e
+B = 559fc917de34bd7dd7a23a432142ed79e3ac4a6caa357eea21e423eb9af7fd94f1eca735d2588ec4c2ff013520c3a0e209627217cc69bd5a07ca46a43ec1f1bdbee5f09ceb1b2c18bd388d3852e51070943f16152a73da624be680c671057677356c6f281a4ba1f7c60609125d7fd9086c907ca5c191820d80e483886b70c1074e2963c49996ee92577334881edafd88270bb967da795aa4fefb739e4367390ae
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 3488bf00f67b852592922fbae64fa56d2e4e7081678e789bbb3b4f48df62576d537da2e99c9bdd721c725b9a828194662bbd51ee20ba73d4ed5562482540880686d9fb1e8ae62d08e39fdbbab1d18e399ebf07b3a6559dda8b043fc25a8152858d39b10ff64776e00a839950e7a9ed5ea95b594b6e9e9d4348ceae08071ec5d9
+A = -1b135d8cec9969561be396323e2f8be0c60903ca59b6c418cb19876e9e3cdcb9ce4f5251eadea11fd6e785476c70822aebdc94617063d161ebe55584a8a774ab230b8228a2b65bd5a6c873bb6b261429eefdc7d0c64c7e78133e739efe57f835ad03ef8f84601e1a2310659db5e0ee706f23e3c5c38c9f8c36e5b15b654d1cc528f1dd392f1b08921af8be6fe4e4e6db774392441883ef867bc729338943b
+B = -34fb63435c90018e5843098e379c76ef3ba0615b6b500854b3dda3e77fc5646228fcf3a6e1cd87a506e4959ab05e24474990ad98ad0865942737734c03dc289307f1b1f424b9a8c2264350943449b3d2b0f71f989039131e23095d122ae98c0089a184dc530669e804140134e5b602861a5e61c030fc3d3b3eef0a59f8c0579fc9b0afceaf16698de3fa07c43231312254c04ab11ad7a29efc4597780c2cd1b64b43
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 8ea5fcf7fd41803606c95729d2d910941e43b222f9b0c93a1a803b197fababbd653a92ee34e805906fde29b307a962a294aa4dabebf0d181c046653ad0fe6da1295eef817f3289dcc6579cee8869198c39a9f79992cf6894162d35d812df327a64470c935994aca4985d0e6a783b853ad762338dabd575ca71034e29d768d014
+A = 6858d029a62b0f75e4c59f3ec067e3990b2304c90a097daccaf554abec49a9d297ca14648471dba08f22ebbf8e238c89ea06f188203599aba56611eb3d4df09ea795a7e28f91f4a9a582c6b949c6ffc584a076de653446aff9b24e87202037974aede37aa9a121b5b70a3e9b5ca376c9056c2c91f5d5484baebb64cccb6a09b4f40529afad1ed64b4cc4aca586892693fb5f92edb6b4d5f678f7a2441e51410
+B = 197d6deff7adc30b025e7e418cca0a641e1a1b35f78fb56b9d8847f0690313475e6fbc6f73c3a718b10bf37434dd9fb1eca33a99bbba674195b20d35e3b34ba9d7c8438eede24ebb48e6d39eecd93fcd7dac44235ad32f208919f57b261da70ca378f9b03ae5e5a733f97f0b3f4102d971272015bf50b6f3e50c7b36cdaa14a8a580366c9cb0118ceec6e627827b0b8f614656292675ddb66e1c55355d5a1d78e69ed31
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = a25db977e7a8fa4578fc530995335411432ced67e131fee2cd7ff56970df64a6f0f4a7d225d2f4ccec8e98273ec9a0f1aef01dc0b866e425d64e09cafb9ebe3f80bc0ad71c769f1ecd5efdb4a990ebd3a94303f52f4a97e3a1d615918f8b2df5321c4aa9339b4453d7a710a803106dd0ab49c6cd9aea431f97fea9fcae0bbd90
+A = 13f97ba15ce46ae32147a0aa4c1639b6b555f4d8a1af15ede4f1103f7a0b06b4625bf456d667720adca0c4e26e858f008b012fae63cd89322b33fe51e87714519e7dc3cceea27d968b46ebc04024d063b17901a7ae978591ca6ca41afffd81769f04b714134cfaa6700cf23bfda6ce67313988bba5fd3782bc62f76cf551d140c978dc002a779ae37400d34cbea013a5d1338b203ff267861edd88ab8ee1e4c4d8
+B = -88d8a4c8c680fb01f493f73753c70ee753951d4734627da14962e36449db5490b8c575729fafbd203a125b500b96364e6799d9cfcf0efb4ec877e86865eea5e99e2fe5e7655c1ee0eac641e73b71c66d7a72c2934d1ccfefcf59781035b2c7b89e5de3f7d1e9128cac57947d22e7577832ba374492a2f53be37e17733d8bc625fa77fa5cf093975049a5c477f792fe75e85da26cceec820c8b255df0292824b4c3a8ed455
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = c1f2165a402fe9becea284dae60453965ce327f540bb8969562485fd1bb60372b8689d9c9c97c91bcfd699dc370117ea8b704f06cae3d972dc6e5eaac971597c69d4dc24a68b256f97229e643706aa6d2d844078a5fee2d08270820055ea58155d7bc754f09d0c6f804e55ebe53e3ec418747d4130cec68533f6f0c2f8fd2409
+A = -626a1580e52ba52a877cdcd62b34cbc7f949148671d4a61201e03e98985d704b2975b9a2d9c4557deae065becd662ce8448171ac582894bfa2c59d4ed20c6d0471fcad1d0fed1291df5e4556aba72f3645486580c8bfd0e3c8f6cb34fe17ccdd75fad4d4a2db4e00bb8c2a23ed17a31e95631320590f40416c153efdaf897e3b278a1faf1917554d9292f90c4edd5992748b58492289eecde1af34976ea8ff507fb9
+B = 44c336d7739118340048939d6c198f73f90e13030b69be286ef920902391d87a58df3632091d0ef25340eab395203e8dcf3389e95debb7432165147e145735d2e3226637b4b8cb7d85d68308be07f217f57fe439b31fddf3fd469869a20f1f852e1645b0d4903432ecd1fb6397db4c11f6b6b9c0fd25778b0ff00bab9ff576b16538a6b7da40f01fa7b987af8ead41ecb66b8940c0e8a1208d0026773e711153d99348e92303
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 98eaf476f11168bb63fddf7dbf3347e619f9b580ea6804ab893214e94ebc089cb652e307f1f37ea7ab9052a352e260ff7d1e8c17461bae68c52a8a8f1a57a84c79b2c8fcc2d504ac4f553d2534f2a776ca129ec1942d83c8ae24c772f6a8429bd61949ca1aa714cc3881ed731497b84415c88ad4b9be34197a549737edcfeac8
+A = -15897a5a986641fc2cda42d185d72aa1552eb92f788bb71cc74c0e424bd038e02c620d0686ff88ebdf0bc1632093c0d89e724e7d5b526b0ddc4c7e145aa90b36be0d8574901fdf286df84a6b52674a78cf21ae4865618b4347bd905461d878537b33cc41710ddb290964c48e44d4d2ce2ed82847de75938d23ed418bb9ff1caa03b5c1ac5d65692dd1defbc6013b3270c4314a45dc67883762fda5509b915e8277c1924
+B = -3a7141f54a0bcef68cbc3006166f7e15a5c2394892a428fa417a485981316a537cb3ec757d4a2473fdec2cd61010a9ff865852af8f43afc79a97d394bb6c58643858e2b4dc5cb958c33781b5c35aced7882e8b8d7b4e4249c2b82150adfb0c8f2bbb1cff3d2ea27ed24eae030ef468ae4d6b7462f0b072cd2a2f02426b3290b87b14d14b34e91a94c5bd69e9eda53335cdfa7df90a57f97f3d023ff85537fe0a8bc5d8fd7901722
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 34464b7a50713d17b01b5940b5acfaa7006aa6b9b083bc17e0535b08783761391eaca8703af2edbe13dd0fe9036d38aecfd9faae08c0861042ea1a25b41fa8a15b7721909783de3aca127e955e177987518dd010306a795bb66466fccd55bd9e2bde17470cbd36b1e8f8b63805229754387a5fb40f3ee9a8afb2e51e25c8bea
+A = 701ae8c5bafab7f41c999e492f04a7626b2b1054e6dce1b83002b2d3de46717225b018733b0fa8fe3f973202da8a090ae3fd14f48b27097513ecd4ceb1b9729e7783c17fee9be5221fce4ed3860275b3b36b7416594d2b65e198ff564e82301cae23756c878494e57b5ea8fd22ad800a582cae32fbc985d122cbc6e0eac77c1000d3ede45ae7aa087534adfdea8e9f924efa1b19c43dfd3b7bc83d7c40df7c6578a320a19
+B = 18e0256543619a750384d30b6a7afbbcbdcd9a2ce644dbfc97a8ff699e118032558f706502c9b956695cb25a46d7526596b3d0b67b69611009265838bec533a9488d24583e7d7f2284e23c3cc4ccc5920fc57e24f60da0d479d41f5b9c6ad9152903a4f37842176c6257fb1e3e0681d6d583e704c1d1b24cf616fe638106638fe9d79a0c74f0df67cb2df9d99185324ebb037d01ba0066ba947d5345cd3201b19769d438c43292f572
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = bc57cbb3e1051d3a3035f77c2e375c7e3221dd472edb1a5ccaa7521849fc0ccc7568238aea9335a733d839e89ace6f2b66ef238267e0050c065c3d9553cf50cc5cd93d34fb43c3ea1c31b8ebf0b751f595a7e5e3e860b366229de4286b9d3f0267f78c6888ab3f208c55d9292079116ea0eb9f4ec2934c97149aa132c03336ea
+A = 1ffb0aac11f6d1d257ef7aa997a030e2a12b0615fb11ff04f344f6ecd550e8e77e9883c246e009af33a51204e4066ed4249950e022a61337848dae17c88317e15ade5b5499c0d7597a69a02b6c18db0f975c19c16d2167c583571e947676ae9c15be60e69d76e78329aed5fa57dc5e616795b5487f3d52bfe74b54bbf93ceda093c2e14104a6d2f017f0d200a9fc89deaa283e04b0bd9015ec67598425312868eeefeae9c996
+B = -9de2d82e25b449b8ca4b02b2d2fc0a023fc5804ea553aa84674a815bd74193a2e549070e2cfa0b90a53070646875282fdf855940905f834f5a07f073093c658cd1813fc5cd7092af592092d789ab5481bfb14b6683139646cff8eb1c5dcdb6a33113d1c97d4b587f15f972c06046730b7e712a8e3dd5f4bfd07cfae289047de31776f222d11510ab6b70a200ceeb6802d6c33f913c509b31b96e2b8dba9e25b0d2250c3b102d814683f1
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 9f7f4e010370ec1d76fa83f73c80825c3b71521855fca5db06d7ed830c910d0430375bf319671f6a83bf6b57d9d53cfaaed5bc5d615c5690df0067b18791c33cb9f0ac9fa5f0473e4f4eb7840b0b660962097606b3de5744089ffb37d9c0df1123a91a5896d4deeab8aebec469b099a3a9a4f6d822030ec2fc4d11636706fd0d
+A = -7f56093243ec2399548ed95df79363e6ff09de211dfffc314b7cee526535def0f9a8eb9aa6f1736528ee7aae8be55c06645708d576111766ea33e0564c12103edd61ede3128a7a642f968eefd0d7f3768b1325c2dd910d459b15e54145a234225fd29932234e59d3ff5099ec4d5b5c6075f56382ade1101115c7b94e1e2a7bf075dec210fdaf2357c735416dd5d616335002d1cde6056bf7c478f810b78c661a3dbe6e54084bc9
+B = 4df1a6296428d06f51f31a1b0f66d0b77a04db3bb8e1b80d64da649899a1a55d4041bf0bb47d3e3936ee0f3740e1e8c2b235e1b8944d28c7d617d1f968abcde9dce10d6e3c27b2e3607d8df815f5a39da9b5569e95eee1fe5532c0a80011e7415800d8a9ec175fb1d13dad959becf04964b70dabde6d37072dc9f6d914309b850cda33a565515dd6c0181fc48bc7033b314ae0bd5872480e02ffc08dac4e3030d83b33488cf149e19b0021b
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 6da5fcea305cc6eb47fb17190889e6a39c339da1bea2d7c95e997fc538b4aeec8b0edf7c109faad7fb6c656420f4afa104ada7a0d3d14d3ef0fc6774b59aa2687c0b4efe7c3fc83194a89c832f7168346cadc2b1fa6fa9a23a67c91ad731b4cfb9943738c7f9951945b2eabb3743473d9c0444ade756291f53fc7641501597a2
+A = -19dfb98f9f7d20fd331ea749d2019d8367935fb75ecde45d6dabc815ab9e593e51178a72816f85aa678304e6ff3a2c24079a59aca253d76c4ac633fea1070753ce770765bce47428f8f5ae40c26a3ac91ddb551b3d575bad9a3b6fc7954acc93aad2131b78fd212fb0db7cca4195b41651a5311bbd4d8c64f1c93e6520eef8e6308e98caa1cd0d3c9b4041182cbfa131c4948257f1200b1c5351bee77ac8bc8e44680ce64ed0648f3
+B = -2736d5038c60553927f389c0650bb1355b0ce745a7dc5f52c9909039465344af910a5f6a9cc4ec130b9877c1cbb52fc08b20d672e42b853d26a02bc07eabb9e3f91399db8465b6a8b1c9f4a4b9eeeec6e9b6180f1a770c139c8f29ceced61cc7ba182884ae01d14dd85bc924391333e8ef039b586b6a0ae18db3570aa560c2b0226d5e23e7e753873637c25aeb19e74997da4f5d0755571785bebbc7dade57446e0df4cdb8df23c1003533f60a
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = c0265805aa8ab52da5aec06ef7cad2026fa0b18edb27b4903e3c068ca6464465e34d3f3bdb4bcc10a19441040deaf5569645f7e09b36c56631b3a6144d6206d39c9bcac53b54210db6d484cd6a2780bc68c07272de03a9bba7e51c9d86cc8883cd2e1864a2ed711d505930143c883c57545e9c40851c6df8b3314a8c9a0d201c
+A = 5622f906b077d243521325be82a43fce321412bdab1f15e4ff0c11a7066a288b7939afc01d30243c8a4150e74286611ac1ca4daf457aa23508a7af869d2d55f54f2746afaec477cd7df0d5711dd636802ae7f673b3f730236ac3899330f89cb71d48c2838322fe856d9d8b4053d9c1e66acdb5e43614ecff954dbe37c5269d7ffe00b34e682c0be3d7cf653ef212daa3d55dff92b329126636e440b0bab55f4810a2849f77c39ebb93e
+B = 1ebe0d1800b1fcfb67d7d54568e45dc604450c1dbe103ee21d48dda300c1d9b9415dcd9f5a56cf12c2ede3c862e895efb83621435377387b29b882b2acac78386895c7daa90810092bd3062a3a4867f92d54622d7f0b89b40fabc4709fd507d4002ca80de231596630c234fa418611ede0ae4a9616d570232c1b03329bad02220ef64e455c164aadc16190ce35b78060a6b117b4b0641fa64dd8e8cddb5914e7657573804e63dc7b216b1a9aa175c
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 606d2b6f756548568013bdaba6e811dbae88fb01f5f36d30d15dc1e099d86bdca9fc1eb3a785034ea14cb7f4776586327d57ca5a52ea1b30f26e2a76140bbb0e930c7780673770fe22c5ed443c349510e1494ebe402f2621b1e6bde39b8691edbe5c7242efaa6634553e6af146dd40666edf4a3db5d1e7f9347fa1189c1e5168
+A = 14ea5e6fd612945c71fdb17ec44d95015773edc908a85a6645a8eb823d11226545d05b81791401cefc81ce9765eacea7a619cb482f29d38988d355ce731bc9009969b7487a3acca2d2065c1faadc5d6dd8ca1dcd3f3d4ff61d0a75ef75272e62193618f6b802f70795041de26d6ce367ba996dfb91167cb1fa16c8977f982e1718de7d60275a7f66e4ad72ee55ea06267cc4e8b08f488579825cc674b0bdfd34a01bed08b62004fda15b7c
+B = -8a542280f6c8bf4d9fbc96d5bfa6ee0d16a09dffdcbfeaa2dfa1097a760dec7bc540a0b5b2020bab1eaa594117a40a9bb99c3f16fc340c262b29909608740b8e77fe4706a88dc0fc3bcd47998e88fa02f617062393978ac1bfe14235d43f3d5edbdfb9f140412f4fc2dfc05a700f47b1f0f90da7ae07ae781d9ccdbb951f19a8b8a9a7dd8a65942842cf207f3baed3a0b2f08a06ad0d9ab7ad0110346293d51ec53ff8165b925c0e7906be8b7303252
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 512220042f151479a6a8b7c743ba83366cb7733caf37164e9c823422ccbf78b0b83f426a7230f559d50bb0ed3d9486c6a6e25f4cf96c4fdcb2c861566c6a73215b6d08995a14569710cf9e54abded1d77fc7722d06fda4557a3a99862e5ce963e1be25336fb42a4629391cde3aacd47ea5f5426e7185c5df27d9136a6df26f54
+A = -4d108217b778694931088bc255d1f69cf8f5a14252156163f948ae58d58f2ed54f518177d668e795474952c930052c1bcfcae11bcd15af168ec2e881e6ddc8de257d0cff90ff3ad409bb3a080d30fdfda99078cc3ad8302a4bdd77de66ac082b40fddb3cb36c75a86bacaf60984a74a0fd575d751ed2830650d85844aba9e3f781b2dc6b515bdb8d9459b083e1aa653ef177de76282e86c99e97dae9c0b050c9e6456a051e7d99adad7be4e4
+B = 7b9079504c635655a588ac360955fceb10cdea5f3de548ca2db681da38c17a70df5798f72cf18691d14a5f400ac69fbb47e64115cf071466c54bc7077a228249209542683ba57791352ef3409f6a947865d8f234ea9d39491b5c001685487b32130bce9aeade97d9537afe3f2f87e8f3315619ef7f215a73cb724f1adca99b90912aeecdc81485c0d00a74387ea99c965118fc6a9af1163e60d1ee6a1eeb12d7c2bb9a54f747a415beb5873d616fa0eafa
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = e36899d83a143c82e19e11494ba18478c0a9497fc89fd83df38adcb6b33918645a416626409a156899c6583ab9a4426438d9c32cac54b78df579cb7b6b1feb3f39ca4a6183743a4b823082896a89f9f1722be842cb2d2ceb605f84a9f9b61cdc7e184593fc2f9ff2994fe6cc4860d255809d04ab47e154eaec9ecc807ceb298
+A = -1422272d9e91a14b38b3e81cbd9411a0cafca23addf4f33c94a1bca70603db879dd8a9c0b95f5986bcb447731219c4f9b32a1e3253b027b7963ce40279dbf4008e526adc0bd7bcb2b533392a105c6e8e1bddfdd2bde7dfa0d2e3b1c6ffa07fea07ecdb9fc828283e93b0ce4861945562478b1a56de32251b7d31f9a2309488f7cbdcc38cd6b1c951570675ef0d61e1df69fed78979dc755f160d93ab5a3e65dc2944d3333cb85aaf87a153a90fa
+B = -2424fc1e71286ce3be684a10dd885e4891b52e9009c3021d90ebcaf68b6db81130bdbb74869cbf142e0f44ae72684fc12c85abb5157987428c7812889beecfd7bb43fcac2eb6298ebf1dbcd2e70e4274841c2703b8685df18f6e5bbaa1422004797defc6ba843e77f891bbb46699a863bc1d77c5e3cab809c247e2975e8170da00fd9c8b232abc3fc6b16951ac4e6c96f9503c1ff2d6832ff9c35b2c8aa408645849c577d2b8599ef520da57fe2a9eccfcba6
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 4e8a59476d47ee2cd0217bae2981cf25a2c38e5f5d5c30c2d8bf95856a6e8f42429e565f1836365e550d85207246514624e7ed932d6f5802a50ff9f15d500dd84b27729c1717a3df0f2d6dfd40f0094208445193ba6500ba03fa3f4bdeaf9251aace8729b32ec3215bcfa170575e26265fe523cf44a071470e3b1547901e9227
+A = 452cfc78cb9597e67aacd4ec83e5b473ab8b7a1dcb6097fab37e25d5a6e25c69c73a6c20de0e2a744375bbfe7f612036e69c7a503255d9e17c6ec1dc6cc6f634d4c79bed4764496e5c7c026fdf9408242d3b234195e67a5681e7d7b861f58eb631ddb9aeeb0e5b3ff7a7657a7fde5975b8a9e1f643893bac47debf7918c7ef8f6d7439320dccaf63b80ec9761559078baa8e35d98fb9dc242ba83536eef7ba9901395ef02b19990d8312203df7dc1
+B = 1dc222e7a737e6d97a703fa232defc6c0a4fb2bafd247c8e547b9c474421cacb7692ec98f94be19a5e40269e1f5713d06a6d081a943dbc667bc867e481b99c55e437061cd44c4482649faf870d9347e0252ba9dbe116fb4992dc2c2a0583c1351e9e01e71e9324f5fa942322485bca93c2d95cf304028e68224fed446966073ec7326c93ae326a7a533a36e053437910418bf1761abd9c4c5ab7e6f538e9bf963903e6c80f21a0a38a683e8166e4626a8d8b743f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = a4d5e9fb7f0d75ce41ffecacd2ee1e4d15f82dfd4decf5ab1bee75fb97792d0d574fee60a30b15af80bd38e6a25b1821e61628dbe456e39fea3f8a9ee6ef3d2332412be1500fada0c1728a1457656eb3e9d94c64fb2d0ac89f10f2b9ff57d73207274ae7e8c7538936cb7241615b830cc9011d4363ef88f51c7b3ed503c25179
+A = 13eeef030b3110451fcb1a258434aeb51d3dc805b38c72ef7c79d4b0e18d600e5dd28b552b59f3dda1898367ec7da5dc6d9089a585cf52002eaf8f9ec64b8d3ec50d0bef7dc3faf203c48583ec89757cfeaf888ec4a91470a6b8ec9f26a6b07f3311b4fe972cac2f2ffe47f5c11d2dca87c62680e2229120cba4de9cfce9f7f5c33af8398c07ffabac1675de1845e05a32536329647214e54e5d9216fc0cbf2730898eae19e425688bf184d16bd1d655
+B = -ea324da99252edb03f40100e528d9a5080c43be97fe4b7e03d9563ba48040d328e57d0defd4b7ffa9bef3ca0d2682aefd2a0ffca8566e755b11f2e3c6c1b707f1b9465592aba6181e583babd5c70588e7123361a8ae77d8c398e33f894ee288babea1d7eb63e2f3de469e502b5048417043c5a9a9a3eb921cea1533162e3ce9c79e6caf62bbe7e17b180b72c59b9ef5fe1a001b733d909a8278029fb4a63077ef9b3545f1159ad73dd75030aad599ea4884677e01f
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 2f096fb8fe2156c41ab695956f13f0fd9a084f87ea5f5b1acb6b60c62617b8d7079f4b072223ba18cde474af3942599fe070ddb0ac1a99f42b9506a2648e1b8f6106015aba0bf7a824842403bd3f4ac8b6fc4a9861bf0e8ac59be0322f0495e4b515fd579dfef273160ddf96e453f4ab663e703609c709fb1f016ca919fb26c
+A = -4212bf679cc00adb2ca502604b71dd5dab99cdfaf55ae92aee6bcf8b3b6354a384656c09eec6175a95c8cb4591ce118e783d6344525c25e5b356e45802ea3ce1fe764833132e6b7bec434e4481c9cc2986904988bd8da7dc2e31cdc481fd0e359674bbff524124bab1ba4379885a6cfc1b73d953e6d1aa1b938129d74fac9dc597c31383f2f7e02fd995f7065290a9812ba8e205316ad5bac6fc65c6c7310f1a6b033503ebfe85bf6d3851bea1b65b9c15
+B = 7ad83f97f40d5be508cb394c128764532f0aee9a108eb02840ca1c635860b6d751d5f676e8670e2f61466397e1bc68f97ea52d64b335d07aed22f20bb1ed19e3e42e4205d650e6d37714c2f80d39b111577725e3bc7ce75bd7ed5e44f8377d5fc2b97f05c3c1ed5ca1ec90ba3ff7935a25a8acbcb15fe1fc7aeaa1e444cc2f06c1e6711721d24b8969d465e4958cb87924b3e0fe99ccb371009b5b15747bf6dd5d0fb73b8fdf58d955c8773a55424a34c741406f6f904
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 909626a69c803e9acdca97c56781eb672d6fb31430a53b853f467ca26d4ae96c182d71c0212894b776c88e773acbe9602e3ca56584c39b5947724290def7dbf04c6853a108c1282def95dbd5bdc015b68daeea0ee959b35bc5af98a4ae4cc7486e627bc9432bd009b21ee9af3085f074a3ae1bca879e321018e991e7898f2897
+A = -14eb8e28dd04a159c576eb10578c24fad9eedd3d8b7560b681002a54a4bce2167de05cd061338f63c50b86327a79595a2dbfc1d3f4e76aabaf88cfedb69faf5148c61f8cfb2130511a3bf4a17d846ededd4c08f3b635182dff1854e8c4c48007af028e06f01235fc2becdb32adcb9e2058dcf8f8655624bed9915faa06be972282cfbf8530bc0cf2de5b2057df32e4a6cbc3c772feea0a511cfe3408a6dab0e2714fc4cf15602ba0da03bf0016f1f3f5ddfe1
+B = -388da160568aef9f82fc16f48a22e8d7aeac99121cfac9b748c815e5d3a823b673ddcd20c1168f98ba204df5e52535f61b224fc0374092f8c834321949fa0a812b5e65c492fd9fe8246b74143a943bcdbeba16024e311d673357a3dd3eaef9ae3a72bb06e03e34e091cbe5b6a9eb9fa3d7f36c03baa5c3e242f2c186b58db5dddbd73f6aa54aae027529b8f8f0a536b9b283ab08247b9977a2ac2d0d9f162ad03a2fe247d2c589b1a2d14b5f90d5b9c0a95918ea956e261b
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 128e8844a2f04704a4a60cd33e85cb7ad373ff683abd167894a35a1daf947f504c0abd7a614e293ce10797a5330147c88c4d5e1dad1bdbeaf74095e3f5a515f2af68b7bc11ee1f53b493133905b654318dcfe73118ef1931eac47deb6c4958406b704ce027d9b027803eb8e639b52d5983094b8ff4b54e86a7dc6ea169ff1af4
+A = 75e6b045aa44dd9b8f4b434dd4bb1346fcf558a5e96b00fef9b6cfaca72fe8b1672edc2a64beee8b959683b1861138b297629b44a0caec6bad2ac05665728379cffaf66a129f0ba40aab7c6b1c3fbdabaabc87ed3dd580ba80ec7ee765e9a8fbe845c0d207eee7a1a3a0c39650c75ccb6bcdae2e0d5149991dc3bf899ae9b7626a2baa17b168b260d82fba84a12f10e09234035e08b730cfc230f0d2651c03e34d4952fca6409b5c6ea5d8791c90466bdc4adf2
+B = 102fc193633b0e60a48dcc17aa76f3e52cbbd1012f179736a0ba7a102f8dfadaf434063b0ed1b1528a018b349eaf192fe62f868b538cddd7e8e6fd98b93147727d58561517b2836e4a373bb31fc8d5e42d16126ed80b880c1a37940c138fc1f7255ee0b7fd39b1b799c34e5178580cdc076ef3fbff65fdff7497398fb1cac75e5c09cc7df1168a20f88a16e7b3ac78091a90f1169bccd48c0d06b4707ab79b741a168deae5ced5d48bb5f5dd3f465e43c82b9db7edab24569b2
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 9aa9699d1e5d2c6acb21e31890c1899f30a925b834adb5b8bc8cce83a1718944a2c90faa71b34379a21340457478c0c43121dbd65d62e290eda2ba6230bce4e6f18555a1380c7c95c1700793157f7c1cbabeb09460ca28dc596bb17851ab2ba6dc6bf311ea69bdb7fa8eb78df74adf171d4677a154b8536f8104d919bdd58648
+A = 157fb9e1b38f288db78a1a0e22fdd9f48a59779487a9ada2774a094d34536b85993e7b9ab6e24f081c4cdfb64a82271100a054169e4f1c24e3957ae9aa8300e85eb2a45a6d5987eed4f0fba6fe8557cbf6128e018c5f9df028131bbba6c544b2c6312aeddc71405f0e4ce648fbab9e5d51685949408e4ccbe06fe501a36fc13ee65c31f062313135054b7679eef45964c77f5a1556ac09b11c496d0ba8c6057e283bdaebb4e6d9e5c557d975745f9f98a288d5bbe4
+B = -82cb6334479bd997c771e894cac1ead87dcbaf8f5006be5c70ad48ef94303137bdc45f261af91a201b276a17d884a56ff27af7dc06cc5b7b9c94f7c4d4a36f68f8d309c477b4969a6e7cd1b2afab9deec06555cb753d8a0eb00965359ef865a84bfa87b815a42b2050e1635d5ae5e3743c007bd79e820aa37a968702a960fafbddecebe63f022553cadd7a4d4fb27b4dcb981e8b490e80bbbf13af8c4412d158775db71f5fbc9986e7b8a8f9299574abf7bdf9ce7544e8c4e85bc
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 46e401989fbcde9d830dc6e3c42768999f153d44d270d4805c5beefb470bc1e82706aa7173b359763c5e15d146eca91a32a36f0a80802871933cc7f2ed15a5472988849a2d2f57543345b531538db57ab9bcbfbe787efb0a82e61baa505aad628df5f9e881dababb35bc2decff267eaed3d3671757ae1764ec5163b792b4db3a
+A = -590c16ea2cf7fa7f63b5cf74804333f22fd2d0e1da7d226da8425abad2b39a4672fcebcf5cc15d220b0ecfeec09665e682fff0140f16889f7a6ade9ec11aae3fa3a369b3fc133babe52e42b7a8bb9a24777521f4d9e0efe7d7977dced9e40784c24d2c6056b3b668ada7856da71af73d2dd33d2e481ddf40999d86a6e236d0d73f31a67c52cc8b38203bb2840c0b92c2612ffe5fdb6be87f9a787d70b3dd506f9a63d144db3417495f0a48523c812d14a89710d95bc6
+B = 5a2865cf2254710a1a51ee3056b0c1f6c5f77d22d7aa8f939e6f48ecec529a169e630c554bbe682a8c4de9ce4daca77a278d7e752cb678141ddefa75ba42e661885a82ab55d699414ffeb75802cb8f4e7583bec8a7ab58803b378bb60fd46f476ea490c9aaba568ec17f3a6afdd6f20ec54a512f7aaf62d2f941e35b4b72dea77095e863dcb38bcaf8777707c1dd437ef2ac6b6a8b2b832f80ad2a6d6f279c053d02058b1a657a1cf5b6b269e15d29087b0cfc0c2d4c3fbf32a167a3
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 1c9649f4540556ae82ffd71b2c71ea8588aeb845c50dab595db9f8faa01a26c809d30d8433b6c0add465e164cda2b6723c942ee87241eb7baf9944cae08babd8e22a0eaf35c09e9efdfb9f8bfa65d53ee6eb23fcbe1d12a66ae05e7592ed788b231b000f895d098a24febcfa4372d249575926a5faf966072f29a62a401ec51c
+A = -1bc9ae5fc2f6a3f1274584bac1e145f02c5e8c4779f4df15e98dd34344c988c1437ee4428485a09090d81b18606a6ea5c1b9136872ab5b37373fbffbb5b3fa8fbeca1e112b9f1643658c2f38b9548cd8f0f271779ce0acad403177057ea0a2af2e7435109879941fbf463488a2522b831b95c1cff21d2d816d70c25156369dbcf04a0e28e1d746afb8a77713703fefa512816fe73e203bb4c3428efe09b946b750199bd7a03d30feb90230c219a103ad4528cbe0de1e5f6
+B = -39cae179d955049f830867d4115d3bae25127c945b1fa0c16fa850e8fd77c1b3b9b7916b9983c1659b7cee77b7dc72abfff1c56681b7931c5e58cfe4f1bf0168ae32df0df8f652223885717a98f858a497b1a4be62a2215c39316c34451b0d957791f49139921d9ac8041899b8fdd5d3d443547a26ddf5748147e4c3e93f5043ede42f38a9baa628df65d3d6148ac2ce182056700f0f94029be05d3ea3a218b40f65a87b4baf097fce107c080de24880259f1046175db1297016af76d94
+M = c462c7cdd79b7604246a0cd97c017700feb25908656b4733353af8119ecfa0212e4bd24304edd566adb5c1e9daa40894290a9e2e20d523bfdb5a2603409b312cba43d567a27118c15d4bb2f3867a7ba7594e02859850b77b929823049d43573a881948d674e95c7427e2d04d4ed81b5f4de21e0d5904c8e0359c99d4bdc901a4
+
+ModMul = 9fcf6a47addfa336557749821a88ccd2573a5ce2c3094a17d9a29b33e043bea165499e89fd2c939f17a670694aff05e9af46836b62c96e597c83681092d63ab9d6e22751aa8fd4b9ea94a90a373876ef0f6514304a495edb5ca1795c9ade7965c70f9aa92f8ea460ccb670e9a62c81e9c
+A = 71b93fbad39b1c2755f2051ff7d532d59c985756410d58aed3947d6ae737ace5aadc35e7e0d29c684b9d4bec9c0fa277996bb30230f70431cb7b905
+B = 167be8381a3392dd4df62e150025e13b388bf366922ba8632614928922cc290772135857d1b5234d51c27862cb1a055c1b86260b6ec
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 8e2ba940fc5165c6c5f7f4cb55cd89d1d5f59e90e78730bd66fb120a814514784879dc43ad4f355030ddb3486a59bc34b601474978a94ddbceafdc0ee23cb18708bdbd824d37cc32577802ac6057fef29a71f168e816309fc80cc46f251e7289c6a57fd222d5868263360af63dd73e7c8b1dd6b3f3b6939849580b9231940a4d
+A = 1220ac4bde4feca135268550ddc79d8b05ff72f483b39f77436f348c4f5360c22c598f7dfb76697bf6d2ae86c68e90748b8b729b25f932b2e5fd33f3b5
+B = -bfee56cd412318cd62e7b6cc49217345d3a94e7fbf6fa19053fa685efbc0f8b320b7e43883189396781c49371dffe7d126c032d1ae4b6
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 8e2ba940fc5165c6c5f7bcac0e449b64801e75134a390f120acc58cbee43888f50d07f7aa6dc2b33643c025cf745434d20eb1aeda8fcee5fa3fa5baf10d67c21390297857aa50bbcc4a29a6b10885f97fea60f1b88fc72512c111b938142ee8d67545efe386622162e8fd50418b09769b8c22efe54fdacd652580d609f0528bf
+A = -7bc53f6f2e78628678ebc8e35ae4905caeec61acca5c64fdf595689cf005bde2265cd43172802fc133dafd933d7b48def44256868d202727a4aa6c0cde66
+B = 74147c93e729707111d0d531b1c135453f3e59f63a7e082b43dceb8b16cc5debdb6d7c0ce0c00ec9b5ca51e7673e411c3cab34938124db6a
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 43c47d7e319c32a758360dd726a1d91e2cf5c57f73cdf9ad2040e61a9c282a2962d96d300e04288461eb1ed37df19e6b88f104a250f9885898740f6487b081515314e0a217df2d4345d3cf81eabb2bfb346b634b9c251624748f6e9407cb677aff4c53fcf42cc027de267e6ec011e14bc7f3bc6666f693d21
+A = -1e6ce0b44105047d0da0eca7b936980267db41d41319dd5315889fe8fa2329023d7cf54f71ee179b5bfedf442cdad1920d311966f7175cbb953bb42ee105393
+B = -23a330c7e06cdef4b6b121d15a9c0bc774eb5e432e72d04c5f03a0c588e55e010b61f57c03c51edb1211685d8dfd2a35393091fd0e3ad2304fb
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 768293c84c431b9c8dc6e538ca3f856c60ae5e1aaf42325865418b7bed16c7fc2589968319cf41cb370657c8edc7b969de10e0566b64ec796470b630e22477e7aafb38e99b6012f100c9d23d5517d486e3cab1fc60c1568c0228c9b55d2d77d23b1351fe37ad4fbf9c07f29330a539de4a32709d043dfc9e21aa1a
+A = 6bbaeec78b6a41818b7eec42fa3be7d639dfd86fbace2bc14e0369dba6dd3f04ede8b808743d809f43f70f1146dfdb1d649546441919e27f1f7a9760da4a3b152
+B = 1199dc2f52868a0cf440f6666b576541c7aec1e9cee14c1d22010ab0f53fe8bbf3029c639ff78d89dce82de85fd8eda4e67395d435df60158623c5
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 8e2b90afbdafa02ce68d537ae807b4e7f3e05a66b20b84cff309941fc3150f99d083841ddaf6f19f5a76886ad5d853c73051a0457e95eeb0fe3776a084a027ee77d14f3825713a59622ea163a679cff904db33bf6ab23b06eb4b31f4e34fb122c8c170321164439db783e7bec1c265eed33f33bd9cb6d1611c00aa18a9b4b90d
+A = 1c4821515167f7073d4b7cfa318ead1da1131499c12497447846caa84176a9d4af576fe549fd8b0f77bf8dbebf6c395f84dffd40400101bf28b1dda0bbdcc5da255e
+B = -de60cd639044e863c6a49c73213dbc2ca84e4225aefa5f880e829f2d9cb48ae92e3f2680c462ac697dc34da38f65fcdc1b4d8c3c99e8cbe29660b539
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 33e8e8e193b4b99d8bb382c29c1fc5403190d7654f43cd77e28d1bf77bc3a728dde9de9a89c6522ebc7222d25f46833fd1753a44275b04485c77b675d816090280b3541ca61bfa33921a79f7286830131d6eba13acc46cc2c449b3a359f1cb49d67a4d0cc1245f3f8b59b1684aa0c3ff1c928b8e880a3375ed811dffc991fd1d
+A = -50ff3e00feeb2efc6df6387d6409a622b7a8297a717b8d94d0dc41c6ec6f29a8455c3580019349660b31dea1e4f66b74147de93535e671c853b604ba06a9b62d34646c
+B = 49ff858c7081392defc3ba12ea8869fd61188ff15d9339be72657b00530b851de53b1fcbe16034816e73251fe1ec97bcecd8bccc470373974287ca328af
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2c88dc40414969e8b614bf8db05fbc38fb2b7ce144d7e707f9f8eca40ae2309c1fc67e713a8da5fbb20e808ad20aeb369cb72a77fd285e38a7895ec0fc795ade4ef1f1680f3a3b3cee4569cc9d5e699984daab3385815d2e515ba5d67d21dd1defc12ca81bc8ea645f8f8d103b4a0a9cdc92eb50690c07a037df274bbd5217e4
+A = -167ee0fa8e5d8b569d7848b068df06f6baed80f6fa6a442f9d11d9712622b512249b92c7ccb821ac751fe4ec0a7a47e04ea5571c7cb45a7985749ecdd87f0c0faea01d232
+B = -2207fd8dbf2b8e9a5e3cc515479cde241dd3671803f9fbf7859459ac66705be055fa759c85631ed2a61139657eee7eb08fd963b49e33666e60b7e75dd26b5d
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 674885ca3ef617a53eaedb9564cf96bcde131760ac541a81f4b25c174a6fe1444c2c206f7171e343e1bb43f81610162994c497419e75aaa25b664c122ed2b27640b45bf646fc5da1703fbf1cc66e10a3c306eb69ae5f937081a1a18dfc8db376ea18f4c1c499109b0cf8806eb32cb1f28985da790047bd7b32c1f67bffb9761
+A = 413cbcbbb5851a4ae12555801f7f80ccd888bb82ef1b5c31b99e1901d7e0ab91ee489c84044bc21fa2010f11aac21d0531fac09feb482fda579cb9f224c3149dd6249b0225a
+B = 1b6bfea70f1d80350eeb45f9a5cebda954d72cf5cd27a299ef5a42e1ed0b50a541d1657b70e50b0cab69b22e31d0944fd735957b1ff764865d9385af302bb802b
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 8d74ba5fdc67733ced4d468f6eb6ec4c1ebd79c97682c1d4daa06105788ed9c5144992e555d903804d7ed0dd9b29ef2648568ab7ff462a03e0bceb5482485afc3b91448fcfeba435dc587db6f3a022428d37fa0e85392d0e48e7d4ed6b21253084e653da8175587b3b709e28426cddfec8d9dc582d4ac2f3d540305c0fe17327
+A = 17c0b7f0e2cdf316e4d32f040e26d41dbde1e6689d98f0652da1c380daf5dfeb6a511b72d82f1b32d3852e9aa2f594be10776a8fc89a8a35c160e8e41b42a06a342fa1c309fd82
+B = -d7b7701340c5a358455ca5fa314ad83860d9f765978ff652d7f542de2e123bb976930b8fe84b9608648324450d8ed2bac4e44f2fc71711ae813cd8793af8d3796e8
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 57e60f79b4e156ccec4c253e70df8d86e4aef326150d612a5ac4dc285761e88ede412d28d9dfa5a6f5c073d3c91a65ba9c86067d81f296935f0d0ebd2af82e7f6b5b336422429cc3b8427fd8d3f5a6fe936f4208362632093bdd3cec1aa8f4b176d260f605caf4a12cc011f3d1b76135ac2507346674e41673eb16c0f55d8010
+A = -4f1568c207a9ec970b5c26f068f3cc8019e8cb483525d251cd2919b368d072ac8f40017a19fc7437cf88e927c9e7d6f539ee84865f0af24be0d6d98fb33d74e3e0d28020c00bcd61
+B = 723db98a78f42aa45496f31cf78695583526d25e167da48ec310e447ad3540be2636813a2c2f7b8c622795ac451992e91bb8e43e5737f0dd95623282e729d815b08ed8
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 237eb5726e2c628a515104bafd44348dbf099569815784eca5d6a415d3c12421c8c70fee23d6d82f7b5b136b70ffed3b6d9e98cb47854e79239d96c26f2ec955e4ea8dabc29a1b0765c9b7af6ef09ca673d1ee21c680e4b8cfebf47bbc74c993d017ead6cb6f3319ce4de9e9765cdb3ed8fcc57a1b153327e1a6a965e5dfa89
+A = -1fd1f634685eb1470dd9080529a891253a28a0b31e15c662733e20d43fc4cd71f4cfe83c3774adf8293a0fc3bd806d0b31b61c6ed0b4414ccdb91e2994e22797e5771c63defcc0887f1
+B = -3ec0478afdf54c949a097ca411be41f931acb750ef4f0ce97d0f0fc77cf15970cfbe24b170aa332de04836b7a0e6c5d456814182d27c8310d5fb662a818bc421587d95fc5
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2f1d500443fc4f4b86e7ec93e4d0dfd3faabda35a6dd31445021928373be14c37fec369ce80ebcb77aff2151b7ea94d21592da1823ebfa0af196f286d7a69ea54799573bdcd4d09ca4f33b8a3a93b35de5ff7f65099d59367914f1c79440b471ced6773b0802bd8ca99cf531b62892eb1e78d67f8210592208859b0aa1754b14
+A = 572de2984fe2ed0d5ebb5bc3f62b197fd592795d91cb16b48a0c898991ee3e884e5870b92405f248036ef9b3898c5ee6100a09ede5a48bf7edf3a067e4fc77e7e6bf6a6e3d4f538e3d66f
+B = 12c379402b18a34dc8b80c0dcd25be16c99d6f76d5d64b6050b90910cce594bc022794640735710c7ded857ebd44fe5b2e51574a2296f7d7a61b59c0123051bf2ba4a168cf8f
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 4001c734e1391a88640007893f167eb79ef61e4717d5eb14b8d80c25ed59c753be63fc8e54bdaded22c9c7d3e49753eb49efa010439807dba0d90ec4f9b498aa97f109af542bb41922936223213ddedac4d0fad8f1446498f4228b758aafdf1d9692f59029c76ca2832125ba50e811cb95f2b982a7a4d87b4726e6dd8b1963fe
+A = 16792909716b581a936287d0a8550a1f3e840935f0f3ddca75aa32e3489269b078fd19a16f8d6b2326eebaf46da76e90890c0ead3b35689bfda8c1ead17a4f672588f982cfd3da2c2b9bdad9
+B = -95ab2c47f85001aa852d6999f29644a6a55f9e4e12bf905f911f90d29cd1e4fa4fc9d1a2aa6c215bcb5c5643561499aab8f2678fdc5fa9c6ec138aeb2d62f635c45f239e46b0fa
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 1bfad44b58d3f8bc987116d4cc7ac98f89f838a8712d81d726189e9e1469cf46fe04675dc0b82e6e556b02c350ef4e30ec6203c7f1df937ea80f435af7c10f48538fe7755ba78993f304e64ca0d783b0f46f61bd14fd3fd30768f233c59018ce911a94b495f58eb96438e416ca3c7eba5b1bca9dea5a770c1d2d9f2f62f821e5
+A = -78a6a6ef40e443c52036e75f0b35938d632bd45aebf45a1fff5c2e1b6f601a57382b9a82c3e8b2984e643eb1570cd83f3a6be6daac567ddf9f37bd96785662bc3cfee6f47503d239c77781a8df
+B = 4920f870cf9f371050e64a419ebe07ac92dd3525b41e8ecf6939a267e1ba853d54862dfc95dd21b3526eb0a0a7a7f8fb67df2e9472dbec81e15cb13266257177c5f2b92fced4cea5d
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 6b0b84505907a5ca37abeff9a5ba169975792c69b5751d9845c0f09dea833fb679c8dfbf3895bc470529e0cc736c9b4a0d08b75d709a1d04525ae583c5ba082d3bca1355055c7bb674aa1b92689cfdec4dbac84a96e81c855280e417f60e7e4931ef4f428420c0b85d2cd11c1030a47788d6ee6af0a76b5364fcf23b270e9d4f
+A = -143d843e3b12431fa0d873815a757a214cf731c298db61ab13cb87fe78b0a6184bd1fdcfec0c7661b10775b4ee2c815dede0ed497977c9ec5154f7b24a8a786501ddb8dd257bea51b9fd9401ff760
+B = -25d4da7b64f439987eacbde66abadf0da7c1653c1c1c6d9b2092351fbc714a20d2d7ad8093209da371150b69b3602480595533ecc1f3c5005a8ead10732272246d8cdfbab87c49e65223
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 6bce40524278ce242b0b5292d27751a3dc414f962d9c1cacb45fa3ee693ac6890d2ff1647abe578c40ea8d4b326a2e0e2fa7cdec28fe2da089338b5fed91c4277cc5be37537eec2f17edbf48a45fbe38f15c58c3e733d408d001262dbd40c9d246c323e7978df4fb7207aa9270a12921743cee2a483e7e71b221b09a6b2c667a
+A = 402671b0cfe14655bc650bd35dd0c36ce7f65de274a0cc4b708c6f6c3e84c2125ab2430e702421904950b29aa8a03b049910305127890457cd0cc97a3e05df67f29d28b0452969986959df02f59d207
+B = 1648c29205f19fe4c646eb62e8ae9b65260c2cb8424a526423c6bc04ed55870cefef9b8ba808f8ed2e1ab170e2e411f68b934abb1a22776969f79f9420f8bcbef28417582942e26646af60a
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 40db38dcdc201648da555f1062bbbb92c632c29b66902eabf90d98dec69ab3f3b28e60cad1571e7246f4c9e6aa62ad26a6d0bc08598c7a8571fa830cae4c2875c5c95a59f3295f998681edba7749b7e38cbece8887a7823b4752165e1a897e638836d408f439f009d0fb6c196e83e83ca3289d2bd0f0eb36b721331e4f9f80fd
+A = 14361ace8ec5223bf0165b78913b77ef921b7089bb5e28891d120bd3db6513ddc90404a4e6cd027f9b51fbc02e80d376d59e1f2b043954199ef8218bf26cacdc5e749f668ad3b4ab35cd796f94c06307e6
+B = -851a39d8b0101fdb22ea9e367286e572dd132b8a77a6a14dd0e995131467aee898230f37dc6224e35bed2eaf459aae579181a161450bd7ebe6b62ea7154a8a0ab590ca4a6c2f05531c4e24650
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 4b085796665458b798f824d1c1a88c23ecca456fb88713b433228ca8735141a616633ccec4bc53ea4f6e0c74e4aab6fece2e4cc4c4efb479638cf54caf55d4addf75908076f5fb487ed00d540e5b984acb8f81cae3ef51db926a06382a288092b352793de721c23c371fd0ce7a789486b2e8b867d35f47b5daac2d339d22dbde
+A = -511565611538828ff7dbc45c273fe46f4f5105d41ccf5dd343b41e9dc579429e56a9cefc54657ef0422960d1375b72411a5cc93ffa323455e006e242580358d6cfb641f46b9c36fa777a613b17dd4a187454
+B = 4f22597947638b9a9e9b9b7c2a8d37f77259f1bb1c7db65003b6e1a1c807469c84c89a75b80bbe0324fc3aeefaedc6ad9c0d9e470dac9c30bc48f6abbbdce9547ad7624f0ce9ff3cb6be23e47bc7
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2b90a57349ea94ea818207fe15c164f9d3530c7cdffcae178557274552f79c4ab56acd78033a570bd6c3e45789704ef0b0ef586594fe4cae3ccfbf9ceef46e769589b084adcee3ef8345375b7103232465b991273df724964248737d5eccbac558e35e4190112571d3e7c291baa7aa8b1800121bd573b8419f627c0091e1bba8
+A = -170cc62ad57094d307ce1b317ae5e825c2f2e317ad6060437afa105501caea00dc9a86af8729e2f3c3a854387dc3ba368c0a84aab1a527ab34fe27b0a69bc71c728cca87be728457c65eea7d7538ef3aa282615
+B = -3d9da1377a88f647de57ade46dc7caf71b4f42bbfaa5e77f16cfcc90f00b5d3e9e9d82355104c7cd0db4c1dac0496be3aa35706cfc0a30a1329755faa439694e8e9b41fba8f1ebb46140818c7008e27
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 4cd4da762c7576d582572d3427abc4b4297f740705fc14a32b46347541b152d0d1e3a11f27213badcea1e2009e34a63350c7a59e4d43654b28298d2757d6b54c4d82f580e98de4230cd119ba350416452cd4b8adff29b9f35ae0c533f666cfed716838e2b91941dfbea8d6a978a369d5f27554ef411f15e5a89850655d7f3f5a
+A = 4f4a28af27b926d8ac347503d6ac0bfec388a6c0b38a577501c3ca4aa709c69601824ddeb5eba4d9e437a97f3e4477e1487d5ce7b4a35b90fb863657a5b2d901bb8c3c838db40b89b495ee9875e8eee607d7b8013
+B = 13ca192603bc8b2da29dae67159e4f8d32f351a503434ed9e4e24f74abb5908ef7da80781c71b1a5ce64fefd13a16cc1eab05a370bfba2a97e6cf90cfe98d3a487ba72dde0762c36c10e1da175f1c1b5fc
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 3812e9e835ae355fdf328b29ed8b86dc3f6895e379b8b5d65a5de41eab5fb20ad3e2290c8ca69f9500248ff883d9715f59d0db6257d13c5cd612211bb1fb99867161daffc77968bdffc1fe48bcde0fcce02ca93975b3cd9e93b56974ab4beb59582c3d0ef2a65957f701549f8bf858de0c5bc98af3e5722f1450de391876a2d9
+A = 14ca6101af00d67139b985ac9f149accc260336237dd2dee802b5cc6e506e217b74c1a007ec10c20012f071ddad34e7407012669109ec1f385566ff04cf1a1ab7562353c0af1ba1be0baaef920a188c60db27970f64d
+B = -94b683326e9de19e414f653aeb2cb4bd7b17e76a23de6a4d91c43d717a35e08f2155b444a9549dfd01a8aec4dc901ea9f629f16bafd2c84828b12d2f63dc154323eb2d54938895ec4c9efbcaaede274fd4ab
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 5ad7411cef0581b2e675d03b0ecb9969102a283eba5e779bdcbb7646d94e843083a07269c932d18b973b57abe54eaaad0aa76cf7b61f30505a263bc95aa063efb264ae829eb1d1d5f7d380a0b4db59839de9ae6230ba51901e71b3e3d59e8c34a79678e751c8b7ab139123bdb2f04d90a18ed81d2046ae86da1a73c8dae4fc4f
+A = -469f61cbff01f0e4124ba69a860ec6dbc75cd758dd8ac7cbfed97645b16488a329adee62d1a66e90ee4212569d56d58b61676262f49dcb68296bbe5d8e23853e3fefe8a304710cea568ca65c183531a992ec5b4d82e226
+B = 4a0d48e31cb8c24a3b2c9c95fd19edbe46823032ef4c97fe65d0a30d5c2cad7a4fbbe89e0ebc9940ed9f9ccb8ab18bac269759a9740a7985809d0f38259e680f0703febe7fa012d1ded47f0cace4a133f59a721
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2b2953981db406ebc544c39dfeb08a8b089064533221536c7fa2bf2a7a0d3a1192859b7dc0ea5036eeab5aa371e3e0070c3980433adb3e3a5202ff257bb546bcb9550423201a35501fd717ed4c0016eb3a675ed399340bac7f058a04e69c1774590fe747ffb9c27e78ba50fcee30ce533a1659fc49dc080a60f21357a6265d24
+A = -122621d97f42b65b060c84df3f0c0da097b5e240731b77a37bb9471e7e398b242db6f1b5e25062a9bed702860ccf6aaf386c1d6fcf60fc31b8c190d3486949c5772b9e621b863a7cbf29449ddd68b7e0c21e669492e58e94a
+B = -33978406dd30ec2b192c416e422428683deac210017cac9e4355e8446d6969295b0fbaa8cabc92c1fc0068da70efa047f938a419bac160ed6f794a9f69f53a88648c9725610d5f309b652f5462bd3011cf68ea859b
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2104dfef151526e072c09a4a277eb981a035379de3b1a55a88cb060681706f26131c388f5572c5646826b119c85ed450207f32733487e3c4e1e9d701a65058c4b4ef0cd1db090495643038229ed177b54695ac32110619038f1c1cece14faa693d88476e3d70329b0084d0ba5d547bbaa5b59ba1ce1fad5aa2f1c11a75bc7c0
+A = 7b79e6f1330fefffaf8521089c3348593e40ab7e8d4da3d4346571b43b12740958336580afd13619be3dc2d42eefd9e30599405da3e32e7f3a5655ece8b77a367059668021aa092460de75e627526da08e6206b0f8f539ef40e
+B = 156e234931907c0c0970c1fe6bd4b24225ed94d5f5b1be4693c8e141e9a6032425b4a47b6eac6265afbeb9d796eb230efa707d5ac4a73808225181cf814b319142e9d175ac461c75e6d479bb6bea53954bb981062eb16
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2a392c5fc96c29df2f5ae9eaf76e7d981dc1e2f3b47b43a98eaf556a9465ae8727c622188123c64658053ec50c25e54ac5c6c8bc279b134d326e911f14c873357647866eccb4f9038ed0cef5082c2058ebd71e1619f7c8f8f2fb80871ebbca3fbfb7845bd855d307d2efd853f1bfd467fbe030862f165e53a9cfa633d0d3fa23
+A = 1e0430e7cf15173d00592037e83e717c90d7dab4f54a5b2f0f5772762fb5f56bc0b2a53ec1bc3b960afc35e7b043f9d85d0af6c29288486af3e186e52bae6300b58917647231b40a12648cc8c020a797683a9bd7ff34eb6d41b928
+B = -e08372fc766eba6e0ef55a9149d700b503e2e3f978c8a397912e2735d5bcff69c461561ac0822c44160c7c1bbf722df421b74beada57462ac54a9bdcdb42d6a27b86413036ed2282abf62800fb2518a32a4a135bc948053
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2608f68632ef14dc3979725c8cf1a0db10a1651f17d91247edfae9935b53f6364d233b030eb99871a87b7bd876ab2cfd5a643387a7af9d337e81770db04a14f4f8dbda2cff604838c9af9a31e8dccf9277d453176589ba33abf77855b9501e63370b2e6cd22831e1e70ff1815302c0a026c70042957d08e74dfaff940a91a7b9
+A = -5d3568858c05a15bc9777af949eb01d33dfdba58439fb3f7af2ba792efe8e78b16d7fbc2a303a4c4c4be7c9d43f57405e88be54d6ab55268a4739945ef582921d2877019659dadbc76e0939f4b2cfbc91e5356ba2ed531526ed5b9b3
+B = 47f81f65ea1af04f702757c02a175a299b23cd8ad551fdb67020c50cbb4110b5371dc5790b12484e9ce647eeb24c0220a5e62aaec3461a9dcdaf1a22814b6f22d66372cc5ee31944bef33469f905458c172ec7871d9dc9c301
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 5735109bd21d31b5f54e9221bbed78c54cf387e39c13d31557e8173e173f786b2d2f1acf3966c3bf4552fe9bc802d0868a5a7632404cb91609a7a45fe0fb83fea8d83b0319666c1b0ac520169c15be708343359447f2fd37960c1e96d32799ac9394e839b391f59dd347acfb79bcc4e34e76490880d163ac97ee69e3a0a6e68f
+A = -175011349a0a1ceba11756bd528f2bd631c106e709aab223032d08d52d7d6724e8c5b055b6f97b48261f4860eae297badc1214cdae9b2500a7a47b4b777dd7b8f1006757754ff1143b637d2a3adc555f38eafbd5478cde0b04e5f46d3f0
+B = -2aa7f75d6801b04ea9f690aa0c5448906595fd28b53775059c01efe54b463f1d87c9fb4b39cb038e770f99bb995a2118b86ff8d004bd964e958c2af82becf362fb0b927c671cc3bd7185990419d26a827a2d81bbc0126e1029556
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 3b4ad19b75e1301d19b57ba9b68e0666c28c7c5c99df1d5fbbe0685dc1d3489ff39c919222719c5d8b7ce2d7ff967730d776a02b36a86064ed66a02011bab82eb575390f85f0104715f6e4954a1bb28518450182a8ef58af35d00e2fe417f07ba25dd9c85e00c3451082becd22e3aa0c9bcedaa96e6423c7df6c375b4c799c65
+A = 58e1ce4a9b512eb0632b02cf1207936d6707b802140540fbcbbdd712e5ac1426b4f36e74a9a9ddc812e572855d4fe4fca8a0de6644226f5698fb46a5f2a479dfc8b588aa8e02ddb15acdc79ed3d17143e290f1317274f425b869df54a4807
+B = 14e341cbb5f5a7f3b4dd864172b82ceed2887fcf20aae7d0598b3d8afafd2f10c27bc7456c1488abb570be3df04f43d892dc6a8dbe7621f55bccb0ee3acb1ade989a510b4e0cbe29b6b93968f323f0016d87944c908824d249769f8b
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 7fe0bbbccad6032069b1a335b3f2dac16089051cd9321f903181fad23be6853e2d209958e8c48e008be94a62c6206b34b4e994ca08b8f24a2df0e6394ea65b3b7aadb3bc43d04dc9d35a77e673c4476dedefd4568b4ade5d16f9d89486f3d5ed0566b1eb428cb0b688f10fe3901037744f278385754fca481f937cb630f60308
+A = 1cc0e3ed58090db55063c9ba11401636f89262d6ec096d361f448496e05181c5f7f2604333f26d511c13534618e90637adc807d622097f7eabfc03266135cb626e1bad20997e72da71bf2b3f65a4973dc27d2a594b1fd96b7bf7ec14b9e4b983
+B = -87871b2058d33cb67d83b6a56ab27839c6a6c771bd94e55f200a1257f2c737e39c4a0403fa410ea64e8f442d300df1c19c2f03d07fb74d94f86d26814fca23d4cd2cd3718252cf0cd8a0e36726f6e68827a1dab6bbb1d23b884381c702
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 35d7ac5cbc7e6c262ffa41be168b02a3bde9e112c512d1f68421d705ea34461ce3e0dafde67f44d44cf31d91b38d4d5f2fbf8c6c6a44ec3ed0298dd58f3d45c04346c11e57229dc3d2cdfea02c802732d9a811d7be5e81094d72172cd04caaa3c9d55a951c09f454f42add6e89e2d8a98e124aac86379df377606e7af9bc6baa
+A = -4ee01518f6581c560a186fa05c6f4bc26809c4822cc74a0bb74d5a6b0a368aa9bd0108f26113443422b8c589084ad49f919a9e7821d99127bb210670e732b7cdf610e464e300a39d3dfa7c82f90cf00ce329bc6763d7b1d4224a020095112fefa7
+B = 72dc8973f7af7122a05c90df190bbf1e39abca908c197590dc7ac41fd0712f48f838ca62a72a177a293ee6b2afa7a10c21e7993347c3df4f161a5641ff62ba123999bf1eabef29ec0d33ed0919818f4b7c35b5f41e654759fc9abdc0f80e7
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 5d83a9b34631dd6c63c05a0c012adf97b4d0f20f61907e1c2145330211e9a7e38128517b058e0a85e993c385068d1cec768deb814bea1323dbd333de091ad2cad72431f20c1e70ff7e1b119768ba44e14292c38b88dae7e55ac9e10ff98e9bcd5f0ac05af499196b4be0c6222d1a63227ee895fa6a8221a4a182a1323183cd7f
+A = -17b3e0c9288be15fda58c8fd228216bc466731d631218a7ddf1d2c9cc858c0219cb0757d3b680bca1b1964eb15031b5b9d761a8bcbd160db89be339067a2ea35e1ac3cfed701912a17ef9ea03999d92e3592e893183ddc05cbb98a656983b54590c72
+B = -269f96a4634eb37cf8a6608408128587ba45958405a29827d0d03d34816fcb1a2297f1319485439d3e8594532545086efbe4d21d31d30e2daf09b74fa8cb27df54e8f9f993630cd9a292c977eee70887158bd3fa3cfef321ef900a0598ac8cea
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 7fc1c65eade94d9de7440eb8dfaecf1004905135efd4f98257c3295b1e76ccf1e2ab6808d158d360b7419c6210c50efe960610973d9ae855c72ec0e81d423e5863c80b542ad455700d2d0dee5fc403dc01eab460c24687401cf6a3179642e59f2a30268df95fa80dcdac230702352bbf6b60acb9ff5d45c5b09a3403b954d173
+A = 7906bd8d3bebb1303c1df1fea0b2503b0abe9c69b4f4f5bd01eec9e314788cb7d44b93428adbcef570477e8ecac2a64822e481bdf520fc381e1bb0b2cdae2fe94e484cef5236dd524e4dc364b72f4c06d57f29dd3c5079e532b1ab1e71dd6a65b3362df
+B = 1479ef2807b9c23c094d0416f513894cc92e023b134f44a5333360dbbe98b8161ab899302f4fa11b470b97dca0c4e8ab7ae47e5fd0962834e6cc1763618193f4ee027f667368da580c623080de137b5869c3081128e6081b9d5e2dbafd791773242
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 730c04094b1ce944588e8291f7e6cf763c70b79cf362dc8a1bc63bb8790cd4cfe4eb51cf15a45a8464d69ddc3e1b9383cfbfd643f317108cd9ca6a6eaaea177c5c8b6747bbf40108cbc0437eb8f11bd2a0939da59b70c0c6129e2c249823897f2ee536b0427bc45035f121d2cbe7441c175899b97c490e6c3ca01539bcd05848
+A = 102cf23cc3b81785c73ac3613c816de47fd585c7d5f175185818dbb4bf0bd47d0dda9702bce97b29d66e48bfaae0fd07b47b40be2b48ed702ef21c54b10bb927f9d6b43604bec4f4b2796b44aa6b4e83f8bcd00f2fa3871dd901570e1a32888d8691454c40
+B = -cc5349a9c5280a933e87ca38ce458a711c71ffebb40bb1f7612b42b4684afc495e99c4a5f32eef1c9564c2b7612ea4cda7a0f5df6b3ec9026447dc565ca08563d46aec7ced9fc4cc5645960210d44cdc3944149051d569c9295dc50862f8f6d1f6cd1
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 1cfe1842a53d00e4619265e2fce7cb566ffbd912c9213925d01408a956af304eacb85e29fb6edb812a95e90769bf1c3d62b0cf6cd5bb8f8992391d2ad70f38a14fb9d1d1eb522aa7b7fd9f1b52790beebfc887193882377b7ce567d317d8432e1d9a908d6ccfe8d2de7de497d77b023b3959cc042ae30aefcc0229617fd2a146
+A = -5c3d24fdb193ed83f5f6a825c1716f98e3cde6b32e09659f253ca3fd2a39402b5bc3a6497ed7bc908838e93422559a13cf59156254bd3fe1e3b8600b2a777943cdb39b9d42c58043f1d587424425d3ef5f5538ea157112970ce3e09a87fbb5f7c96f1b5e65fa
+B = 675d9d2a05288b438ddcb330acbd59e4639375f3f14ac2d0e9e8b72de6ffc1d217ce62f997577f7eaddbe4603541b132cd41f2f2740363d9c331ef22df92029d143fc8495ed0152b918aed7ff22f564c7cd94fd3fe4178c90365ace43def8fe30ab05c0e
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 83ed1948276d689bb7fde814e67fcea72c4e3509c48873c3e7349a8fa1c08ae11ea4d814d8deb1021eb8b8ceec342cba5002a2ca45d5f340ae1aa500af4c7db120d0402c6cc8a840404be7221bbc46ffa10236043e5ce4415d3ef1355bde26d2d26eb7127326d4b8d671bb96a08e38a2c1dcc281830ac77202903a5e4777ff02
+A = -1be86e7c87827922d2e8a06e3cd6b64ac9a280c525749bcdbfac4856916321a964c9346d17465378251e6eada42dadf38bc9d7d87367bec94ebdc21af6b1302e520db08a64ba6b39920683725ef02b011a3e4ba46ef0eefadb98582cb911d0cbeae9c231b5e432c
+B = -352059faf97b433089a688c702b97adefd0c91d51a0395647f822c6762fee3287693e302fc5a5584a12c048dea1a320cb96fa70b5daff7c2ea21d249467d14c6bbee15a1e94c030e908342a939fbe8ae0de58cb6d6eae7758485e392ff6d5d64465b701692c
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 402525e19b6b68942253d1a51fd9b2ca36fc84cf938d80b3d52fd4302de142b9d93d1663e89340fff10c2b5efc8cd47fc3b5cc5ccd49a6ea3038ead6454bf190b7f88f52c56bcf00c6ad5b0f5dfb7615915ee8af137dd99cd3d21172ab772f36d291a6856a8e7912750139c09aa024b930a0a6b9eccc83c2c5c0ee2473ea32c
+A = 65e5db532ecae639bd56dd63045bca39b33b4d70b2db82ca3d0ee8ca436e671828cde80217b48eae7487fe110830589ab1be889f1e1463f3b0757d529b2f0cdd2ac92c35e8ec141885bbefb6040a3b5e00e64a541913a38fe05824a929f8c5a2c46568c61989c3ca7
+B = 1d9c73eef8373cbb1e8393feb26d55c33a245c33d7031c234abffb2f06a1601f7f3a79ef1e8664c51ce5dba5f5aaf3b9a9e42470d381219b4616ae93c7f6e64792d23bae523b6a224c1f714ebc82a11f9be42618922b8d2eb7b55e4d45572e68a19fb0ba72228b
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 7a9cdb5dcdfb6e04351057d731fddb9e85f41eb432f01c0d980673d294d05ba9b0180133a89930e74cfce78ed54991b494a19e7f80f310b85904784cebc5639bbc631e80751807868e7fe16719e8ffcd1f2cbd1b9f303c3ed488b647670be3080668b5fa0e53b6342c33c87f0ca1efe1ddb1c877bfe2556aeb61805b06f41343
+A = 1e412c3d66aea2c503f3aa5dbad368a61d969a2951c0094f9da32d2794e47f3bf4c481ae23636baabdebdcf0753d431426b1865e62de8eae7238a9245d62820ad7f17b5380d701f5db776cd4e1ddbdfd542901731ffcea5bcdc247fa9c83f7e08a9389e5a76d38be21bd
+B = -afd61df72361260484fade8b432713eb740df83a401d73492883a5139c918d5c911ff5dc00140637da1c6acfbab4b0bc8fc1f337243d90beeb1c2a083ad8069494c73a99372bd38712a5b5393c779ec1915e878600e0b48157bea44ca8e97c6099c4ab07fbda57d1
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 712580a1ffde78c8cf98ba71843c8130e835fee3afbb45e372d04c04cc388e403c9efac742611d7974bbae982c3aadfd1893f5da280afe0c1db1d81a9ed73b6ed9b7f05a20ce828316103259112d7754560d66733041e9470ae0d4dc95fd0484bfd56d66739f38ead7efa4051187ea41f7bea8fe5d958a29af41328246e2bc35
+A = -47c5755ca61ca8b7ea927f6fbe347f1362915548ab38c40f0418f4c9ba4ad520c3b2469d9ba3976669dec0b278461bae80eda53e9d11447512963e797f45460f74678acdd69fb9efe3897913b6568f8e03a6d90b4cb5bfb06af132bf118574b70e6bd2f6d6cb4d0089379d
+B = 5bda68c0a64218d3609d75eb4832d5468298f19498507d7d515f4c410f04dee535947571a5e75f1af7f94a5b3b05fb742fde23e7cf3f8b3dbee0a569e5a36d7a3d31a26c4a48a299044fd72339d2cee1a68966c851e76b93ae34130b75f4abe4f2260207d2254d23f56
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 4a1a514aa4d1ada84fa841d0b668930c904783fac521377a7d622201867d773ad23dbb667e0d4181616358f3cb088cd157c8e72bcd03db64647b37aa1813f870cbb0318ae0a3667f8e6c19f6e0706217646ce633f0cc8bf4e8f0f4d7329a8647252ca6d376416d545e73cb9a3cba40f8f9465d85d57c2481b84b6d95dd42d50a
+A = -1d68bddd8c3e6b78daa0acfc63a6f39e97f19527a43f6cdec47568d57b47f4e4b7ee88e4a28d683b569e406ecd2510351dba25f10b9f7c82d6da16d848bb970cedf7675e67937921bd334eec4bc8fde83d67aca57eec804ce22bb342167602fbff452d5f0f2a7f38b576e1e50
+B = -34d219765916a4c8ec843ebee9a7aa1162974d41cb4d6b60532513608452da9993749455d9701af6b7b6c7454d7f2fd5c344cc938baa5259301d4b56ae8d25b6f6510ae6bca114cae6791fa5a9551e8a405f5b1c0bbfc27138563b2d64f9a4d7a8f42a23bfacc3f1ec9393
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 3fe24e66e381eca525b24cf767215837019f44ed4fac6ab118d02cdbd658066505ee5b0feb7af51859992ecb97d727121e38873f748a61d70201cc43228a7732156a80dbe399e05764be19e37dc1b93222bcdcbc45b1a4817460f7021dcf1d70e632bc6a306628790201222bb522f4cc80adcc907463a539b02f74004d42adff
+A = 773454a43f495959dd55b8a064d70b1b1ffe45c084f5f9553582e24fb402b564de68e5379a8d9d02af101594e717a6c6db2e7173e557a64d2f28fd45c4e06041deda040705d99acacf8086830af19c7ab5e27f91738ffbd937dc27e5b7869bb6caa12c2d7930366ff75eadc570a
+B = 13d884a2396268f1a8186748a15722156a172a56dd3d8c77b9cb7001b6ee06720653507eba9bb9918f2f699cb37f3b5ae514f5180108a704647f19b0fc075826153edda66dc1105c1008ea8ec6f8c10057f8e8e479e1a1274edfed9ef719b30827a30f26da78820c3696d01aa
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 715bab8708e53f76d2ef2afbb845bdaaf978b54ce25f84dbbf9074f16d30a18733a02a4ba5d7b092fa6c25d3b9b0d8243c743910f1b7b785d9cb02343fc6d59eb0817bcff05646030ce4fbb2b9ff76781cb1af66b46553d365d02c61e677ae97defe92d057d4378dadf8cba9824b0022c086e0d78b5442bf3d3263ba22c643f7
+A = 168186208c734383d472374fbedc2d5d430e85690a4881b740008623120a4f7f83b2cdf85dc28bfaae5870abcd7ff1bc782ef11c78a75c99d41f8aacb52fceeb5f10266dc65eb00b0868937340146d8850887686d54218badb97647a6d82c0c6650ca1f9078d73fc6222aab95c2967
+B = -9711e5b3965654bd9427f79c89a0b3f3cdec1c857f4451eec236c1f221bb6773e5dcc30e7381a18a813ac2b03ff4a4ba679aad41e0e5d7181d4627f682ca2dc8af9a8b4f878771446fb225a979ef9c7e641cac819c307c8dc50d9c1ebadf912ec7c844e416f95b546cf09391f9f
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2714b99dcde70d6c3be8b671d78abc155793f13105fd4b7c5d760a4c68ae89987311dabf2a9238d18299f983b8aca69a9ce398fdf2c9775d90b11b3dba17bcd8edf661efb6e9c50b4e37553cbecb54eb214fed1d0847287732810e550a4c86b51d4e5da1cb7722ce4317e69644620ad806d6d1c94e1e3fb4d87de6178a997453
+A = -75231ed37f1dfa4487c9fc79a6f7b36929fdca086e42ed41f79430b2dff521919236fe415ccce590e1d3b986e16dda866f3f0d29ac1adcf55d87fa5cb67dbf4693293188516e360bac513303769c42181483fbef7abcbc4fea1310c916396d29f37d9058a62aead94511aded7c4b8de8
+B = 5aadfe65df0e5b877fe45d42d7ca02882cb6c686d486374da5ece6f87771675153c84d74b6f40df1db567b7e1e3c60c41d21816f958f5576fd2ce2f84a8c3be4749dfc7e5561266b7c9698c7581292d0d813cb77955458d63bf94ce87472924c4ca79504d1ae9d5f025c7a2504156f
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 6613b1c8ccac0cb8fe2f59e76fef4dd05acf1f1b2bfc20aa3f193622ce3e9d4c7824ad544477553bc68f05f0b546e7c1ee87301e111af7929d1f40525291b88e211db7175f4e5c0953141914fcb4fb951dbf77442e7cb28fde495704f1b5141de1e50fbd0e359d0d86ad709c8f564c84dac81c7602717c269219ab1cf12e809c
+A = -1bc03897b02d1edb633e2c019e40c20c1d89a210b0733412aab675563fae8bd75dd7e65988cd8df4d9b343586e27f548becdde274f62dd421679554ed9eb127e527a69d69fa8b17aac0424dfa2a7692d1e63617ea45564b55f01a70325bca050862d583cdad96c4a2e123d0ed827348a745
+B = -3d5239dbe7bb3dcfd8027204eccf5e9444e68d322a0b0c535a203a1d0c054e7dc1e588bacb891388241462a5d2b43e6cce34ce46a23e6ef29670603d31001374dfa347dfcc794988e58945d0d2d17da6565cfea559203dec119fc357d396f65b296deb07686b0ad2d25a13fd4fad88d2c
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 3a7fc5680aae875b9241200b9f4112a82cd624ffd9044138ae3cd65200631ee9d7b918fbffadcad7e598791a9f0bef3e23005d6bc0048ba92461283492df3bce74c66e417b082ee052fd8f808d71f3ab18f9ffc40f8fb51ebbb936d09c26a3514bf868141f7cf238c1abb3d88e5d50dfc188902254f07d63fb8cb611ef8e4149
+A = 4a30f32d467b29dc83b40bca2fc4ccee5f08a64069cb87f20e63387b2219b12aa312400c4ca59608f50a71d2535cde40a6d248290793fe01693ca40b93a5cded2dcfbc9aeb36e187c9d650782d12bea917daadbc6525f266e074037803e4b2f300778ca8dcb304658cdb502c93c94a16c6261
+B = 1ca5e5218dade077fecb81d579e1c9290431b34df5ec84aefaaf233d68f17dcf60ee010db26320685af13a821b6daa9d73d8f3a30826c3ae7b2bc5e219cadcff826283cd7dddd04cea7a5e0585d6e7c9f23b27f14ff815fe53bcd75fe700b1b91671bddaba737fb43bfecd2a77e5b752a206
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 768d312175ce7d2601f30bb38339f046e4c2ba5c19ae5f7ca5a562cc2462c579fce9985e9e8afe2578db542c8d9e7693e0c74ba161334b249ce720d568e9c18f09c87cd701e6f2080b752362f2fe6252a1d0caaaf1fa18199776e4c6078d89d520b9c63db159d5fba7e0838811e68794b1413c248f3f7173ef29eff28f15b656
+A = 149353e91bdb70cdca8f06648388508511a64d05221305cad7187ea40d9ccef91fe17ceb1e79667bf66e8e6b7a57faa90a83bad119c02984a8f860bc1f23ffd33d4ad84896610301cd2e8e80a5ca7e8d3ee63e7dfa459793c9dbaef3569eb4f8a021c6a3d032a9c94d3f6b8278274d0088a98228
+B = -a7cbbb6a434e4b022d312ecd4a45fc7fc4d3aaca038cca0fc56e529fe7119ccdddc8e76d51a2fb862ad3d27a16ec8a51e5f66b9c7fdfbddcd05a0ddea14172339cee340c8c651eb653c6aab6551c99ae94f26116e15dc62f2c2e63305bbf84590fba1327ee721150d46464d7e22d45d53ffd44
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 763912f4b16549e6ccd60eaf7a0a1f64d9c3bc83e4a9b87e209a3959ba3cf609cf47183bc543f08e346b6e12b8bdd5d1c07c603f74b286ad432d58d7001299ec7a4dcdb56ca875dfc7ee5c75bcfe2aaba14959bf3facaebf8df92bc12937cfd4a4865b3dd74b243ff62ba256d110b01b4089730cf48efdc66fe272f9241014e
+A = -4df3899b40d51c83dacb442fb143835bcdb550136921df78800f0515a6cee77fe3236dadd2a0800b79ebdaaf8cf4aba5ebb60cdff3e4b4531ecd0903c1674a4559339123e9f09158080fc53c4c6ae72c961c8da2f357b7c05368157b4956e592c41b25642457651abfecb4fed5d9fc1fc3825b772d
+B = 450eff382e73f2f38bc3a4abecd5f8de478f80a6b99fb6252173c90d7099629afe859442bb1f796855ee9a2940f21d1f9dc44f462edd74b479e1f2926ff6faefeb55adbc6152b5c97967b1dc8c44dfb85b5e02e870d2920b75422c8a427e99e35e2a4be92cb0ddc04cb7f4044f716be97b36f045a
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 56ef57d56c6d1b94cf0fcdedd3611a8ee444c2e25522b9ad175587619598da341916b183be03b1e73be300f9969120d8f3a23750cd8c4ffdb87124a2139e8ff2c15d8dc944bc3c3a066aa16dbe6dba4a74925e16acdb2b2e83cd7fd5cedade6a7f7409a509c00dadc182b2860609cc9a375cb8bbdcc350bcb2c0df9b3bff882e
+A = -143caf995b7783b1316b5551978727f06512fe114b419c735b3381ec351275fb7fbd6ca88b848c3e8c9faedebd6d084cb8a231636f68f6803d14bafd90534609d4a4ac0fb953417be7fee4e4cfefa452c5ee5d1e1b97ee75f83cca8691a0efeaa8bcc1f1e0f18c0c5d6c7684c9da6c9495d31a32f40a5
+B = -3025fa05c55826c40089b12741b7d406f748cabf692bb0227519a124653160142633700e3c0676000943556f97551171d231c1a35f7b7d8f96b0366eb74942466ceb4660f09aecb2fb2ac050ef699eb05bd8834a2ba959ac71550b5c026b9093c8cbbb7c5fb9390a7818db682b7c11e58996c9d0add5
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 42f363c34c20c443c1ea7a1c54f98c6977b6671164a80308000533b2404a7f280adb1f3b98101cba25249131288f7ac68b0ae2572c7777e7381c1f4d05fd82188c4b1ed5636652e0bfca4d096bbf4189a9358b79f6b6333b99e5c4b7a940c2f7d1413bf9f47a2ef66b620b5e220b2c3dd7267452eb1b9d8d9cfb17bbfcdb6abb
+A = 499d05de867bda3118a8cb82b80ac91fc505e0fbc6c7dac5fb61713cb6e715f56a31ae8af4b400461d7ad1687a2631faecd90d7829f67d1b9e36ed7d55704b3f2aea65eac061172d698384daea710ed92cf1140cd4da427174bebd173c2ff1675b2407a84649b0a318602f33105006fe4d5ed8d0e015b99
+B = 17a426a12a0175bb46bf7a7e727eb5238af383cee6f4d5e2bd82b0d29b9fed35f3d8ec95cfdfcac49bee47b25d3b5f375a3340fa83f8dd9330a593a974d208debb7e567e59dbb7251b54e42dab2cd50fc63aab050a41bd88282373f8195c94c35f61bb48aa921f574cb4ff0984ccedc070efea8c46e5cf8
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2f03374e9596cb56cbbd89794090ca7a4b437f4c05fa38a09db60e5ca900b208fb85b52f71c29fd35e62c9f9529d7ffe46fcc54607ccb07f6f8e13fdd4ff1185033ba4fcefb1ed4bfc42c3ea9f05276767d8dc9b7b4aea4c8bc0ce84951d1f590cec0751f73667db19060e2bff64da30fc048a1f5700fe3f489920675cc3540a
+A = 1073531f678877ba854fd1e7f857659614c526847ffbe8ed131dc9f2ccf69e1f1e917bb44a7b905f7ff758f61c06dd59ee09567d9f0df2550fcb98b776ed1381ce052988aa08fc5153e31c621c6a51ca61b386e3a9163a5cd69608b3e200476a8ada35d906c41d044bafe71ef5c6f732935f15b53bf36f7ef8
+B = -de3563925474e5408e245184b57f328e265b6cb62eedcaba809d8f257eccc0a457eeb82c451f93af93ce9f36dd1aab386e7c02b356f31c2d170169dbe15e70cf5bb9073b35fe0e7c7fd7faa91c5b2b0740734f12eb741a9d9ac6dcf7cff59f6e16324ea39e1e07dc5b9daea27ac674dfe5d0a5790abaebde9
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 1aa22f9013bc1cdebbdfecedf710c1bcaa41c696a3d7dfc1c8c601fcfcc1c85c8cc24be7df2cf3c7311b3b17a4ef2dbce545dc467d2a92d371e02a196a9977cb9042b236acf99d8c0d34a1c4dd8792d3497cffbc87c397ccee5d01fc2c89ef051324a7061e423720d0a3821a36739797393bdf7a45b5fc600824a17043312bc
+A = -4fb2e3fde2a0c653104c077cc6459c9234f86cc2d7b317329b68289826d3e2b975f1a69bed1a53418a0dd86e1b2723f4c4c5a29d003161e667c2315ec24a36f8bb5f2eb0a94f261e791bb829db685cd0ec9e1e301dc140ea57cac1da228124ae029e2b8ab1fa3ab99c55a9ca94dc7b767162c0a24af851fbb984
+B = 63702537a07971e399aa9a1a0795db052d6c8185c79107216babe11d6d8d472b61e604cecf9eaa6d44a2fcdd1ef0b6b52226ea0c6902d929b09e16576e6d1a6921765b2134c5d23c69ed61f36ea9a5552e5819350366240693558fac7a9d09ecd3702076c8c758a4bf6843fa843dfd688bef3f73515db31bfc26
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 6acb23ea695d4b60cce53079390da3cb3a4bc3a6486c238c421f3bf6c93c027a0475f656c3e5435f0211e90458ae81772aa956ef284093020f7b58ccd9373f3fdd39fdf4adb8dd64590f4a7fc05238ba20017bdad07f5f9a6f076b71554a7741bdd8c98ec68f8fee88396cb1f47c64d6da4c228caa3dfc7a9a1c032a9ba4fedc
+A = -1b2496ef929bc673042996ae80f27c6bbd33fa7c20580240ef8fba985d1a6117d6e746989924e34f281e7d2509175d0773dd999bde16662e88fcef52978d19cc45fbae3997fa580a66171d398f4f0e7605d9f4aa4f728902cb886e6b6dc9f0161e7cf1ebac05a09c5a1bd69a92273280758173fd2c14550ec221275
+B = -28399206ae2820d26a5aa0bddc4903776611d08fc4cb34a22a8bdc2a19e9f8cdab94217f346a8070a4145f989e1dfb49cfd100267635af0e062872cc879c534ff138fca603b5d45a6860ea85b6de37cfca000c81fcda3d14ffe81da919b2a25214209b085bab9cb511889665fc845acbcd038711533da171d8308aa
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = c012c4d17ea4c95a360218adfc3363f6d89f5aa524aec70049ef94c2c05e59a66ce01e25588e164bf2412f9517b7740de53d037e71ec3a1d426f05b18b128c41a878da75421e8c8ef3ebd5effd40735c00818eeb1ec63182b44e817403c9f1f6c1a0155334be63a3a15109be6d45ac0d1b1ef5cc99e9b284b00c487d91e5472
+A = 796fba6276fb7129eef2d1572b305f63d7b8c49371cfb3b2c67b141071e66ccdb5e321fa2c1bcf624c77317e2aa135e1137dfa46a34c3ffefa2fa3e316be81f45614d422bf86fe4518c2fdb7e416bec199de033cb5fef7f193a80c0f0e6ee924a12c8f705f5ed3793ab770914924b45cf2578bdd09c701169f0a881e6
+B = 12cf934763127284e642ddc232b1c889cd86617307b6ad72a9fe0d48befd7c5c5370a0062dfbde2add256dc0af850813b22320ceeaeed347eb9319bf22320b2fcadeb51c4bb26a160f7459fc172c27a91d367d5a232d00cf7bb778fba83afb744177bf1ddf45446baa035fcd0065f9b493d92eda37e9138f4fecf3ec55
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 3de123bbd50c35805b943e76e97b7e664eb9feb99860750bf97e275029e836217375cc1910c13269ffbd0bd72bb82ca445ccc4b693742a96d19d3dc23f78e5ccbba46d9ff5975f239551c36403ad5fe86997536456c4a5ce54807c24e3b5317b1c7b2a1661aad85b63859d427f0703b460cf72b9acd3f87e2e69d7f8f15e972d
+A = 1d0433d84f1de082d2058475e0168ceb369013a67aa9417f066c29c28272a0b3f8be5ac7190ab78591ae72a1dc8ce628c683281a9ad563e134387b9258b9c96d2df288fc118a8cff068ee49d635343772c2fcc252facdfc93112358414e1734d6948b909b53e46263e9a0cbffa141ef77bc98e7fae8ae2bd85bd875aa7c1
+B = -a31a574d105305e47f4fc00ccea0cdf854556886b524901c22e6f3b59a42915932ab209a8d5da29ab70d1472dd5378d9c79a7447d17665f9d1f1edc1e545e417cb65415cb8a368075c16264f42555d26e83adc704b5c126c6129318a8f394af8bdbb32c8114470d11b2acfe806acdc7b96e1e348a32ff96a988de76d4623
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 770f0c3104c0f3395fabeb75ddfa2c21a111d23438463941239f7c63e4b6e6832b84508ebf3cde1d90cff0a2801beee05cd5118f9a726a987eb58def6780be899b473ea71c697557ff63a4c6db894e9438595acdd98abfb529d75bdf3c1d619d6165a9edb6aaab8ada50b61a3a84de654706a9aedb7321b0523558e8f18116fd
+A = -5fafbd498d610e9f29c38a5c6c262b71672fe9e9c84f0f071b549390353e4fd0101a059b7c547007e27df97761767302458f1936395142ce5776b0959fc5ea039429d64ac5d50c2ae0ee45d60c0c50b7ceb4ff9853d57c6e883f588017ffcaddf5a1aa3e23ab068877a114d9a2cf742f01f5f5d611424c8ec0d082f5c165b1
+B = 552155ef110c126afcb87dd20251220c7a43bd0215ecd22249a21c93583e120ba6f046c6fe03086ef3c97311c4d520110a450470a473d8633e3560d2cb44c25559af07516aff50d6d176e8782c06cd9aadd3354cc695c4ea8dbf85e01dad479c8e8438154351fd5fcc6fc7e9d2162ce2f0179247f756f0b9b34b54be74821c5
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2e9ed66317734668c4c354d720a011fc65bb67439b2ac9203dca65a8f567682be40cbad4f55a83e836f1fc135596b624e4327acb085a61b6398237fef5a6e6560b488d4a673b5ae7d734b896d9647d71087621cc81e94d58e01fc2cc2dc775f9ab1b6031840a672fb715b77bd636e3d87b4949ec7bd60721bec8f9907b7c072f
+A = -1a6b046d691830d33eecf2c53953676ed3f6fdd20c2252f6e915052ec28ad1fbf7a5f264acf87ef8ecd515ed921ce6b85017f3d8a8f1d14f269f31e3307c6f935ad468cf012a912b0650a15106fb949cbae7b36c9cd496538bb0646a7a28989dfadc719424519bfa43cd8833d3a748c758f813881d83c98f7cb2a63c2a4d06b8e
+B = -34f87db0f839af6e4c4bf146789db36b3d0bcebb9bad81db690ccc3a35070d8830c9745b2fe730a1f3a252612e7026bf9889169b57b8984a5479cc4cdd6844ee3e150a2e7bf7680eebbef30e0591c895cc8b2ca488d489554f2339e2f55598717ddd8ce444a060cc95cad9eb478491ee8d3b8358c3762a970224abdc1068af0bde
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 6455ff7c12bf3bc37120fe3f1302a9916a6ffdae6ee6a37fc23ca2f3a7ad910dc0e1027d4dc304a8eb4eccbcf3c87cf52a13dde472c07e2df2420c1d36bdd5e88c3d76e774ccd2ecaf6a0ef55b8c60231b1348a738f812a4fd9d0c158fd5a9fb19cc7cf9f000860d4cb6509271c8e43ae4193843324db02a029beb58ec2955ad
+A = 54ec203e2ababdb0348135c0679eca2a8e778ed46e53f195331a48d3828e5e40da804ecf95eed819ecefaeb9c5377cc1afb1fb220175990d347981353e7d90637adf8cbb16812af8a3783dd312d967a490f8efe3f23746929cf2a5a8df58e0b878367f6c5e4d3c086f947fc2bf70bfc3a0008a8bb1d7d83f002930640b6ed94c334
+B = 1311b88a05224e15f1465c8da26784dbaeae84f818e029301ea39a982f714c64312f9f02d094c401abb6a89e8537d64c178637364bd261f4a27beeaaa901cc7b3d4e36ebcd9453cda33d47a53c6dd1d121dfb83a222cfd16158eac23482c8abbfaca59e765f6c1fe871d884d281793eb19f6409dd6bbe4083bf762ef24c24f0127613
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 64104f6c06e563ec66de4442d35d88117f2535edf9e012897f44daab5a1b8a8696f84db7a68d64ae24a394debb993bf6734c9df542c7e473b2e497396ce39a064789d5d7b339b65766b002a18096e7fb9f312ea5997c2a85463fbd6fc18f25769ac2a2123ccb0e72f14b0608c4c22add72bda138b83f986e78d5c9da31b15b9d
+A = 145f580c2ebc6c0354ebdfdbb1d3d7fa17f0b55493b0b9a11b71001c840a967dc77f0206c3dde161b5a773a6b5fd9471fa08b205cb6f728e3afba440b55268d6a9542e234ec313d53583c580a391d8da5943f4a900b279ec9d8933f2cfbb260b74ab714a8b9a1af3190d914b6e42212df84f933a237728a5fd5473ce2e272eb82bc83e
+B = -c67f9b9295dd5844307b8fe3cb9c1875257258e4be6229ab097e148c0175ecd0de4d84fe03c8da6e27153c709c2526092b1abc73b5fb40f1d4da9e0f3d8d2fd5f8a4e6f3c30befd80e189b73fbd77e8547b34010d2aa57072db0f00537cf3ced95eb517b23e0c854b4becce128a575a31037c3a9e106a476d8b0277d26dcee435cebedc
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 11913c40d577f70a5346ff1cfdca492ff52b640eaf257510d311872c8df7ba9756973da5b9206c6e5254bcbbb4bcfdad5fc4594e41ee44e77f168e2d20a4b228480a9908b102dafddd039ba7f7619eed7057e8af3a72ee491a61dd049bd947e5b09a94ef94d5f336945f47104fddb8493ef22fb648ff5376b68e96c0555d74ca
+A = -5537630b7cfb8daf76d14e617f7b69f7b75b472801a9a818179d83ef2984d0abc8ea4214ed3d3d2bd785060e9c2819e861d0df760fc1daca8340e8a2c997c9ad201d6d2f12a82ae3883cf9f5c51ff1c25277c28175859a7b8e5b6cdec7cb3875071cbe415bb698b85cb19f617162587516f93c728ba8b2cfc19f238e2cfda115b8ec0431
+B = 597296cb27080f33a24241c1e98fdec32f7a4013a7340d367e4cf2a521cd462a2803109c27fcec353a30dd20053a1f744394fed75829e8396f8de434399bafd6cdb6e0ee81343f0cb99ef3087a7c69bd43bd722745a46cdff0c2c837fd87543c3c63df3896ac101a145b478dc224644996fc72460a89beb5741b91a42f2fbaf0d62c099b32
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 42f420adf5c6b32ce53fe23af4e392517e37013b8c3a7d035a93f6ff45142b0b0bd5525cde85f9b7bd9ce219bd3514617e89ef4d9279cb9a3e89e44f1994d72febd23ffbdb0a4f19cb76448199b31c5cc6d7ec1e46fdb67be1211c0ccd93c123d56ac0d9cd2ad11f0c58c713165003495b75b60665047ef80f6a393474cb727f
+A = -1c6ac9565d1950ae6c55025f76e0a040eed0462218e97aea87208ba879acedf413ffd5e63a92dd8658cf5f49d633ce7b126091a55701168ee4932db004dfe8c35c939887fae3a892b0b04d8eb74191bf8fdcf5566b4d3796a5d2596b1e750f64201057ae60aa705edd58aba4b48f6a2e511bf5007a6c44a27e3efd5bf2708f7046c1fff7864
+B = -244f2a90a57e5d066fe22f4d52f91b44882b8ef76d1dafc3387abcb224eda4a2100239e729bbc745237f8129d457e98eafb2ede2f3afb81e63520493da2a5730f1170b31fcac21259e90c894f8bc488c5e5dab2c2635bc7b1ff56c3685607f6fead73a09f83a7a168c4245729ce5b06e482d7d3d72eff33d14cfe2f32f72175484ffa292a9af6
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2239459025b257fd0b6659f54b8874f93f07f4d6240f8ad761c9da288cf1537d8bd001eced284bddf78edd611c7f28f1393c6fb879aab6e7df8eefd347d63628b1ae086148f488b01272f67ca19db71a2b284eb17e17aaf1e3e8f23ea253595de474d5cf47c16aecfae360eab7855868b8af361491f6ad96f893f9d3eb66d07d
+A = 558613de283911aea1ee21d6b926f531f778c5226e978ce329860682b5375fe5e5328ae27b00f504f2a2d24470d16c1edcb8e76b4d1a740e55538e79ac7da4b45c5299993513ec3bba7e7395dc829a00d4e228618dd348fbf838eaf0bd50f6c70253fb1c1c734a07d0813915be25d3163df13511f3675022cb85af7646c14ba5d13f615ded8e5
+B = 1f3c3c468146c29408d9207e15b25186d3b06b3fbf9556eff7ed7ef7788032d87ae1a4d2a0983902d4c70936c615d8c9ee26c89af8b58d60231ede54e859763237d5ac59af686300a3e92f456484ce77700557ddc0f93bb40e5d2e5117f2356ac7ffca26dcafb3ce7a5573e07ee97515b6b082fe75fcc9dccd76b4fd416e69a247fab2b30965d9be
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 7650985e7c6e5461268867dfa9782cd8154bd6a4bb5857d6555e9d9746ee79b37e44638940bf8d5e974911327f0e53bbcfda0739056bae2248015c35839f35e7e359e93d3a339e7af38c0cb43eac5b41e1406e34cdd4afd458a5d126f70b5d683415b490e0ad61269ffe7ea8972eda6addd447d97e60891e5099ee920e18f233
+A = 184845d3762ad1a9c925c51fabc7b9e15570a84a06ecef994910845d56869264273d75fbb84a31c97c27eb9779e8b39f6829638a78b266326b60546507f65128caaaf36d4e7f85939b75cfb3145e2b1bd8372531cda579f59efa0da9c95a8efc72faf326d35c660b4444627d328bedf50a919029dd164de051a4c0c924103e365cd640b9637d8244
+B = -977390f52af784b52c1d54e82131b072a1c308406e9b82587102e67c6f7145f0020952231a5f0ce9d130677bb5a7a37d5a06dc570a13a29673c8a9068f06242ac438806c37ec46136e7c1c1487ca2d330fc1f3c1f42ea51ba2805b74c44a61fb2fac109710dc3dae78a07057a753898d4e849b910f035bfd807178f0108812778345b256c7b59f8883
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 35d48c3e43070a10dac0e256afb83b219aacc0036f554bd998b9092ce3bf87bb5d3b00947f2c86fd4e7ab830502d15fb2d4e47ead087f5c779a9ba56e272ea86116e2c81345d379dda6b581e9c8f4df8ea56c78f04d4f7412d245e00ac645847af6ae97d5d2ab27e48cc878d8b510c2dc753f6ceb1b9e7bdd923e0e065a6c11e
+A = -76e575cc79d7f0c313a489b255e85d114f3933383cdfe75cfef649f639921eefb9b3b3184351fd0ad252c6e477e153ee586a0ff6da1e1b2bfd7e953e6dd778c849843fa5cc355b31f5529ca45aec81ba67a1e364d5a74a4656d266f7decdd47b2fc2d81d6c298afa2d1c39b5e8eed519a9997a14513537cdcddde0b5b41314476264d59b7d3f0e9a65
+B = 6b7faa437b4e8db8fba56c62eddb8a81e9090d1b6655a2185d656b2db0e85225992297381d653e707aa15f3017880b0f07abf3dc455cb09c4e551b3df3516c6db4ead79b88339fc33dda96bba76ff7c388363c36b67fd5dd0ee63f92f67549dd77e37e9902ae51cb58057579f03286fc48e3b7fba763fc5844c222e6a1eed9e1634d0bd034cff222bf147
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 445039f359b55eec647296fbff4f22beac09cad32cae79c13d591e314fafc2b77839816aa4f641250938865b0a2c30a10e23da71a6dff5985ebf3df4429fe64c327557b12d987ad9e9971f7c7b1e4ad01c94e1e5322dbcbc4707a959a401624619029558fd6f5b14564469b13146f9a2555916491e4d77caa70f51716b299135
+A = -18ddf976fec2090f7d1f4d41b8f875e56c813c04338f595d6e591b3eabf9e105be792f45354ee9beff997e6c0e8ec3fdc714c07b3466ad1a949b9d30da0115f5484c3b9e00c7cf0c117db57c3c6cd7434371c6d9ac7a5da1a0e2d705bacfc22f62785222d59bb5bcd3e3bf2df8e845953c6ddf1b546cb75b1698dc8e20bc611294ff288056723f1e46ec9
+B = -2cbaff39103570df7d85a5673b50fb8818434bbc19ab4e33bcc8289a4047d85de1b7029a5cda3976ab12e1d891b7efe3d5576bcb3713c597771f93532853290068761bea04200fcaf9b05d8553b960ef5e28064de89d9e5097d12b26af0b64beb40b33ff82a55af7c5838b44282917fd4342e2065942c724f3cca515d9142fb8e46652242e8f0ee5ae07b6cb
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 6727c0d0ecb4a375d0fd1bc52146da1242099d445ed9e87b1fad4daf8369fbeeec49027d88bd98efb425c1e3f73e412fb327680068ae57d4a53992f3759af0ac1b96a92f56c2cf552e6682d1fa90c3910bbc5c0b1754862ee13c5ebd62d5b98bfe8dbbf9bf53bf9ed0b967f3c9da24d4334b9f3f75314b429b05b8e27142623c
+A = 5cb6c49efc6767cf956885690ef740337aa71b90c1d4b9b0a9e4734de0c0c50f2358fd45aeedaca6e1dd0fb510bf097bf46513ee09f3343bbd1c11f507eb61d51ada40c5d6b730561756480063f60caf05141bec9a769c241d367cb92fa8e229ba2e471fc73f48812a25bfc7553c395ca77b80443ccaa82fbb7198f8c35c3b5a2fff977d8b2a29cf9358ee1
+B = 16ff229a0e67a410555dbd4b687f1470ec854ef67db73a902f2d19953c55071c4a26dc320baa8571586f1fd54fa490b0d87dc83e5bf20b78956084275518b307ce69aa4ca1079e3aa753d97fa1cff62e0b5f3b99d96a24e411fc3a3e375ea21b7b35a578a72df68d28286fd9a324c06930905f696424780083715f77961532bad061f3901ed276a9eb6e81ad4b4
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 6e9947beae4d934253e481d27e854a59c4047eeee4fdc7df7e174a8f045776109c148ba3721685195b8fb59263def88891c5953b5a0ae85fcdbf02abc76f4d3c0f5d9496327d063ce8b3ba875b4f119dcd8beefb3ac884c25955af61c35a69d0670c3c349564e5b84f7df4252d6d3b29d9a75f09e9ef79f0fa9f797bf75b8ccb
+A = 188785951a3befcab56128cb6fb9576bee2412e6cdd7dd1bf5643babae83c8011af99aada405e119c3be33653862440005be994bf37d3802cb6c73cc312824c56841004c8e871ffb560e93a1d222c93d63684e90a91394b9c8ba8cac27b414bf818ee0de7217bc2faf099783800485ce2e93612ce39fc7e2f1db708bf9bb032d92b66159073fecdb2e0257058f
+B = -8dddf094f30284c213577ceb7f1b2efb1e4213a548e6aa840f801cd6382fb6d4995908b7827078dc3f46fccdb9e071bb8531ea8971de0ddbb714d678bb71ba9d961e58cdd5f41b8472146ff9b814a5d1d6368bd94812f8d38f235f39aeb2421a57499fe7102c1ab167df7d33b32a6dc7c8eb8f4babdd6b6c929d1ebd9bf4774aa40cefbf136feda7b6e10ba4dbef1
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 3f4a8d90017dbe8e77205e65fa7a0875a1ace6f3f215c2974e47dbac779804143da3dbce92db391c2614c078997c7d1a15439ffb51a5787f5bbaf98a4dcef576a6317b9b92dd8141a8fadc05d3be7c150630668e620a4e07b4b00519f34e422610a160de112f1ab8adf09a9169ba95b60242c89196ac6e155021dd84b3054511
+A = -65ff4322f8e46e03aa6c1fd10a207a5e51db6991bdca232c0dbc9d73ba77fc485d881868be7b14c25b05bb59b7f5bb6c4b2a7d53f35d2d7af282a0423285c5de656429ab7d3af7d92837e41ca701f527845e98c2bfcb51647512e6abc6675cec2a7d34ce55ea4dcfe9e7a8397d45a7a3e73bdff06e303a8f04ab6285eeb1bb78b1455931cae203078eaae826a6e5
+B = 4d936b603eba3aeec3d3f1f9acff02a0ecc28a8ec64b6bfd9b153b1bbacf4f1e186d3deda8c1c81e759237921cec53251250e3e838f5063c4a1eb6cc93637f35aca10b965533d18b713617a312e74c446d63eccee93cc97e3723ab27357ae9b3cbfcb3e2bfc589a1bd582480e776198df047c3ad85f611ca6fa480c70aeb98af02f57d56dc9659b2a6bee222dc3e0566
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 8a7f3cde3230af1f1fc25e0c0e9ebeb69161d3864fa5a03e5d7f8c82d9940ded285df35c008f61cc151b4578e2677b2f2cff3236935de5bb1d113597eee448496fe29bb18343687f6e9f1c783863e949a0954de2993d47a03607423b458bfd18c844ab57e9e2a43930df159ce8564edb5a2a37a06425626502e3ff9363b73c79
+A = -100f2984dc1451fd7b71e5d290e4b7de2d26175a47b9bed524fae02bd5abf96faba06e955107329559bff3805689633a4a57275732bc42183acdc792cbf7b6b24dbdc8921b73c0308d0c0ce5d8aad75f7eb16352e67116e859b323deccfe5d9ffdd1f0265297bc9eede073146a06acc3c330458b07b8fd0bb652c7325cafdcfa165f69cd0de8b145d49ddd576fdde15
+B = -21ac4953e54347a56800d75f6feb6ad660b0442174cf3c5dcbcf6528e2b5da95a614d3a8399da14507df4b8eacaddcddd627b10ec2dc5fb8c43d96a38e6dff37189ba275afb9484df800587f4953e327af71dbd58780bd5885b4cdab15ea0f2864f961bbfa9bba6b2d9448443af87c0cf178990254c1ae6e19003b1621f3240a6e5d0a3be2deb5dd253f5e1f88dbb60b522
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 76f8b44df8d8547f8b3d8537393d2805c699eb37d19bd115bd5539adb6b6a00d004def3b7793d5c71e0ccd2b7e9fb87103c1a5f56a8f18ede1bfe1607a346297166596aa78dc584c7c32832e11b72fb4f2d40ae1591f341919bc0157080ee8febb7fee5461a918d2178fa407c37a8243e24206ce2c19c3addcc2b7c3c1912b6e
+A = 56f4d397530f5c90203df1ec799f82a0096888fd370d543e33b5a2c8042108bb75a86265204c40fa5a9a44965ad2fb41896b134ea56c79699a230f38c0e3fa4e5d346cda70e0253b9993c9da5642f4e645a0d96cb732f8f04c99a83d1f1360a385c6e1a972b89915489245ce58830788ce23b9e62d6b48a7ff9a486614d6979033f7914a0735d201c6f29e512374088db
+B = 10fe818f6af7a95cfefb0ea0726f9a3e0e7c30dc9785b1fdf6e2b810515448386c7efc656479794d389e109ef3efe37fa6124c5a7db3164268da0d98538606c57bd2f7df9482860e81f272a27c727d7d81a66fc1a9bc8c385cf02b7ca6bc7ec2d8d6ba1dc992caa216d02c9bf0fba8ee754af77567c6e275ac1b6b1b36b065760761300d156e40da8445712b8fb206c0df346a
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = f580f9d2438b22700c3ebb23d1dc296f3d33deae2d32dea51c7ed3a0ce7b06af11046bc1cc279bb744bc31e7f822c17ffcc5dcbbdabe213bf97bb85c7e19ee71a513bf59b25b3b5787e42e9f3ef6aa1acb8705d69924a107b4f88e0cf9276c2c7c47fa4bf56c4900b557aa5587418f0ddd899630ad3ff678b5b907c07247b2b
+A = 1017a4fdce8bf41ce804b7c9c836d85ff6ee899807e1736bf0357b015b701b9675297e5ebf588ac6c295feed3c6a367987e192be0d89523ac7d64b0b9576f311b5b2705c5398276a52f06085027480c2ca72884ad7be34967bcc6c8cb4ec4fb761e88c16866a2e284b40180eb14536810eeeb180ab701ec47ece62af65a0753f95ca657e7d04ebf3c3a7db02993da9089840
+B = -aeb03379fcd4e87cfd18957a72fce42e016951a72b673a9e81f666b3cb20d2bba81400ecc2b38601bc3270eac46a633a1a6b55c50f00e9d7fc8a20176b93e971cfaa4f41573b17b8ccc498f8a3230825afd0d7f102daee347a9d59cc0914ac8689c1d8b39ccef1f3def44054307a7cb7706535f0cf4007231ba21696424c3d5b42c8e85c278f7c2e8b7d1787effa601ad357eeff
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = be05efeee19cc91e30a9277a6551aaea63aa3861b63f6061efbb0b92296e09f4709529eb849d9f40406fc59c526a4697144cef9661b556040458940ffd6a87ed56cb073d2ee0e6d1f05936fddd1b9a8974a3088577847ddde6bbdfb3d69158d5b3899c13ec78fb5cb6aa7204efe308bbe0b52f18381fe838536707a8a27ba0d
+A = -669660e75eae9930dcbdb99c477c980869417ec9c0e8c4053f0bd8ae62d496daf7539f37af96fd1cfcf3149bc02b8182a46b413e3397b49d4b4d204491440eea65505cf5d33a8e797af08f3da41f5a0804214846bd95d730260c6545d51126278181719ddd396c55f119e84da71f0683eb6db8393b098b3a0c5999862644e073b4918b5c8aff17efe860744d85bc94b582d45c
+B = 6045f903a750b69b709cfd6a1c8ec9fc0d7da9c53a9d26fdb0ce9a17c6a0ed5ba633d6fc01f004f4a48cf247d61f7df609008ca5bdc8eafe06dcfa06bb67efa6a584b5a2f02768718a908978edd475a2d2926af2a6e523549a5cbecedc78323c5c295bc0b8d3e14053078492e82e339ea2c6301412a5dd7efc20da0aad0577a37d853eed820776e672bc6d23dc821b5855eabcceb18
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 705bf20b7d92e68a69019cfd721b27373c7ff22f911066907f556321371fba70dbcb9774d3a26ca43e44ab20c586a3c1546fc3152ce011be66e04a59c6631bc8bde18efb7bf1743b9ed75a7a6c5bf5a4117368b81b112a3cd4e1c44a621f534a11c426451ea5fde880939ee5bb28d9843730e284520a976cd9f60c94751050ec
+A = -17c1dbc1ad1d2d33dfe1af7b4cdc7b69fefec5a92656957e111aac292e44719c7c752ace33dc74a6568be38b576a5ba174bcba77a034af5fe101699c99ca39f8a3b0a20679e6d0180868a232fd8fc775089e185e5eb81585403f32619a2f4d857bb091a824a89de2e84529e5b0702b45771a5816c5a823d81ddc89f8a70cc3d3a0c6bd6d85e9d72b69d2713b61c46161f7f4700bf
+B = -2252b54c602456c5deb86a0f249f3982c3836b70a946f636b22fe00c6e3b91b94e19200a33087fe734ce9a3f92a6099ad03a95ca523b7edb9e1ed3464d38fb96c470464e1c54790cd48769677efc5e1d22f5be4c15288bc5ea1dc184a05fddd5e576b3b4962f37437b4f9709dcec374377db44c8ba1d8611c0c3ec35f9bba213eac59a047e78195ebbbeff941c7f862e8c80eafb72b1e8
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 7306e3172929c00c29ca1db360eb4ce82066f237e9cf6aae368d1f531620e9b61eb64f5b3e2b735a3b565587d7e955d052df94a20e4aaabe493dba2c18e85fcfb65df166cc48733632d165129b112598bf5e4c58dff662e558e5f71b25f36708d3ab6536b1cbdb5aa2ee56d9e019a9c3629185b188af909831629ffceab634fc
+A = 6b31ef80767a7693e7d0a9ecce54beaf5848120f036923d80b7a0245aa6a46135e32314f3b227268e0bfa1f45b4dce83bea890526c7ac3efdc8e485189ce2c51597c2864c2d3664584be23559c03670622a53edc2c17b3f1a92640078ec35189dd7953e55e4da0290ff1e2996d164d69f1bbe6f5285ae89209d611a7d760e413e23285066eab8e126c320bb6130a91d67ef26d4dabd
+B = 183f06828033287497322b05ac08f62dcc5fa67b7a10c6c5a319c9a1e642754230c6d9809dcfd2de4bb9e360d6e6e1180f6ec6e0d4c6185e34ed299b6171e653521d0f7b8975ed5e7d2c51d27f9784a4b6f9b5e97379fcdb42e4df981462cd5bb9d0501f93f217d954f6baf70343ec710065eacbd2b778430ddc36a7ef0515f29d5fe78d8708d8ffb6c3391c6f632cb1bacb4ec52972ce0a5
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 361ce44d153f4d251952c0b90681a19b7d2d8df7a6c5d459691a80c06107b2e818f93f30f8dad352d2dd87b01530d51fd1c67cede9b1a6167697098e41bdc5dc5e7a3c310116aed0c7b5fd99dfcdb3517c13daaba6ad10879f600eab846cdc110d392d9bdc0e8ab34b317840a725a7a12ceb48c75e8dfeffe2947aa85b2a5158
+A = 1e1f2e44bc7c79a00afc3b2570d5cd27ad5ec9f45aa94f63f2ec3fa6b69077480212a1cbde25ded7ab1c6cb1ec26d5905948e5c1d6d109bd5047b1e038666054606b42e880b609f6f00a219dcfb504d481d6fe709f4362940f6c4b6f2e05d243722cb32bee5508ec94eeebb53b5befa551d3ab5dff9cba3daebdbc97179e56cb778aefdda6a0c24265728ff9e59ca3c2d615398d97e66d
+B = -e018708df037aa2918850fabcad82731487fb812213b1c067d0688462a4d518e5ec7c4c84f2cb2017aa6bc960e2faabbe361ad8f66355366cae869d366f06d7cc32ea08dc51631e7f36a4c775611095d8aed06a0086d0a471749246d7157947a1eb5d5503f207723a7062382b3e45bb84c6f555e48f6d63aaa1c04fe13c0108507c0ced669a5296bcc16debf18e03c32eefd177bbc1dd2f19cd
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 3aeb3ff6e797d271fd2271499a740a91569f300d7392a7b5898084012a3c5ad379a57d5169e43089cd58fc7210314758d5368dabca2f0ec5cf6786801bc99b45cd60403c732d9f98936aed76da724bd3e7d4b622dc690778f11fb0310fd4cd980b220627f7a864e107f93a6259081c6581e5dddba4890508af8057c1af29a745
+A = -75e06b47f60edd23148c3736c9c125a617beea7c8fd47e662c9d9be883ae925b7801a0030df3f4bdd3c9fc386f18c4e002e5daf4a6f7fa27b2f71252c83d5f1695e50d62a10b99e1900987b342290decf681a064f789e11bc3fd75d64e2e78ace56e7491fbe0eddd6f9958a5f95775c920ad6c051ebe7750fa76891ab00f42c910550a42bbc1c1e5aea0ae13b7e6f916a5d228bd57e854f7
+B = 434c8e4767d0d7df2125def75a978bb1509a26bf8305cd03df748c6c12b6dc580a2c1ca9a4526eaf3936fbc4ec797d0733217a54ffc9e1d7c6ca04fb39679859d5bd3fa64cd0a09cf1a056094b9c20ddf1f00e134533ba9892c2ca7346ac8d0655250eb45df9f0b7983bbf71102c6f1a2d9497e7a45eea7b3095cac037b7aa755beeea8a6191da268780179a652d94a732a2a5c7b626c0de3145f4
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 734a429c91f5b0f06fd47725ded06222c0193dd407e9daf136696f203e153c9bf6df59016849284cef93fbd35edef2cd31c9b956fbe562d2a22100f177254144718ac7d22c99783fd523b642984794bd7beb0d0b363e28d3f3469ee332ee364faaafef25c1d4a11b5e517e44a412ba717a113ea9e1e8f2d6db8fad6f10d06950
+A = -18dcd213e9938fe4b6a64abee3b9867f65e47e5b0365d45a8dee14ddf787f34072ce32f38d4d48ccad236005a23c5fcdc02b72cf27001495663fc56f428072d3f1bf5e33ab2c5f9dd9facf122f7225ea03c2f67321530a642803f65a2e9428f32d0d974e68a25f705e4f8140568f7e4b132942b49f9ff53f04f241feaa29aa353925fcade33a0cc192fee2628c2111da1e652cace9d304d0f1d
+B = -2e5397658a5e6db9d30f09e93e67a30dc84b1e17c25786e041fca48ab710e1d0497ce615264f1abcb23d5aae8412b58430bd801775acdce06cd362438898697940712062b611c92ae6ad10da31784207c5e7b9362b20d7254da0df8caafe0736002dd466d76b1a03e91a8dbe8a71107abd5f07b00fcdca2017391c7c3263881a3d02a89b0e16a2a765a32d24ae6584cf44a88975c539402db9a301dca
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 427609751f28edb62c717bd98ddf999cfcf65128b652be1b5aac0dfe1bc0f7687c580ec70c8290455a9448c69dcb550c0cfdd109af561ece2ec8707c1d02e8097e780f32ddd932e706f81f68711acda0e7610f4dd0fd55f6ac7ca3a3184f655b0b29d2d62974739b43ded96b413b9e3f0033ca1edace24b6bb610bf06b5d940a
+A = 6576c31d48daaf7d6bc3658952c4ba18095f1a0d73726f6fe59381af45a2a6b592adc79fbc3b597e1eea711ab295cd991441fb5fc4ce5f047e571a7d949c709e0d31156184be4b8a6a49691ef93d7d3b120193f6ee82246aeb896b8b7b4c74c27c02cb39fe0335883a3f088a71ab42b947a0cd59dd2155c65a0274ec0836bb8c2fe394500724ef84d869bee40291363389e7012d672b1eab6696b
+B = 1ba2888f30be283b588cddf00eb3ae3c641e35fc0bb3a9fc85d7fac1e81052129f499afd3e8458d4cf893d51fe4a2bcddf70f28c8edef16c7bbfb791daedf1a8248faebe36953560498af652d1f1c7aa0e9a5a667d9c94f7d9525cbd5a82147d58b738dfbba5aa162858c2c66d0dd7d8db38d41a2261e6efc7d0c8b2dd2d6962be0fc796705cec8e87a13092e4a3febdda3d4dbed9d11a1d5f92d7dafcd6
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 533d6d8d7384e6e65569ba0daae0a8cffbec1d20e417a6edb42d401a59de0a91a7e6854db081ce33b76faa63f6d866993c245e69ddbe6c86d339f7107a4807856cbca23cee2bf5496388ae8fd8d7c78767d0775acd7bd6202dd75451b424034e2766185969b5663b638d539f718e50a9f752f406c224c000bf1ae1fdd60a2a82
+A = 111940235b144a42a13201a41a3f9e4ff02948f8e9127d9a3007906988a50b36d7622d1221155f2516812074a7888b1d8334a01c02ee33b3164d761d02b36729c299ce2455a462bf18471fca42e5b01615d53723c3fefa5aaf4a039a6caad35c348a0a4dd3f0204f084f35c0b93ab233c4066dc50c5fd3897a769a7c5bf309f7a9c30e905466c8394d509b79d62a69b58c73d8d3f1665ecd9a8a4dd5
+B = -e2633e43c38c0b4b8713c20bf4e2b8ccba680ecfc1139954fc42724277beadea438596942fea1094091671c2060dfccd0351b2fba8cbed35dc963cc18f8e8835052da884799d88ec1887712000a0726b17cbc4302421011d5be8d234440eecc363f09e2c04bc9cded3cbbac9a5bdf0b6d418822fdd90dead20e5bbbb3566ca94ab85f3a00d32842eee6521edd18b9aa6872340b2f47deb961f58bf231e01f9
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 33960d7ceac73f342d46275e04fed56563decf2fa4c0e9307c90288e911ac8782f8e1354fb051a9da8e2db83d7c710b5d2b611495e72ed42259ce783a7e7a8f601c07061ec749481d39a082f29dda1f9c7f444a33ae1c1055d37a677b848af371cd3bd41c851d31a07e144d7add66df39576b8200a8b918201630b3da8e664c3
+A = -402034484e499a8efd610200790d443c5d3be35d19d8808da85954d42dca3f24177de48f55fa2efd7e4f7f624d806a8d461c3bbe0b626fa1f3cad2145746464108b367b13f3537ff395262256bfccce5f0414e1f98b59ed29940171d46ebc4bfa1a27802cc30d9221cfbceeb92abdfa6e84ab4a54965568aa10ea631e82067ae358a1a93a3a3fe3a5ed5636a0c4cb373b4d49f46f8fbbaa665a19200b7
+B = 78ec7dbfa2b28e268619ba6db34a23adab25e7f8690aa9464a7d8fb7c6b87d5dd9d33d4c023bb665f2d96febf2638fc087ed30796fe7517fd58e4120c0d319688e67a32bbeaf62a987a9764be75384bd499b0e00a850f27e303f615031299c631844d10abc571f9f2a0f742cc0e8df2fe3c244bd825bf1d9134b2f1059e2a1b61985ae8daf9bfbd9eb24ba268ca58553891945ff1a314a78fdebb5444677ac081
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 3a1ea3fccd6f336e6d444d68af1753b83145131954c20f1e3c433a89eeb7e267425a34d91f67fd65191dce85769ece2fc7ab12d032f3e30f8509095ecc05148e47a85391b21a18257c338a6a3ca9816987abc8143fe443342b34afd8a52fff00dda2e42b1b39322bd38c6a1f711051f791d6cad2a47ebd423a9b933485fd5861
+A = -1869c53f86755aa350115a9f49d6248cedd42a339506b8ff59cb878b7745956f142fc4387322c41f369773ed375b72665026771d4ed1b9ece08f84e4782d4c3b0177853cf9ac3a55f7e52f39c1b82aa42b30628a4fa6a838754ec6ff9809308f675e455bca6f44e298394888d85fee29d8a0c8e9cdb9aa08d68cd70e13a243b5804a3ec199f52ccd462ba6594d856602cf1d5efa509047633923d31f78da3
+B = -2023c544b6cdd8d971bbb345300f7a101f6dd44dede6bfb5f4e6b4eafb7a40728a3063f6d4bdd0f606ddecf062828cf889b2f632d0c9254c28f36dd974aef116b73cabeb2bba98635841c2b4d2aea833e35eb1db9fa9a9d33bf7b51c49a14907dbc6036b027a039192b47406bcc56bccf375fbdf40b82ac4b3c660a43d5a6eb656868d383cebd099d2a73506f675cf29649617fe06097a46de93c13d1e590ef2cc71
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 4331f18a94c169cf0253136bc4eb7480c9fa4401c18db1194371dd53e5f7b75f07ec2e1e1c4116a5d2a8b2cded4b22925b67a88af9b8479c6e821d58cec7ed9f780a4c41e729982cb33f69b87d01c11cb9a8f7952db1920b6eb2124fd5d820555a99327117d7e8e26d18e748fea3ebc17e1d07161fda57a21a70c7f4e251612c
+A = 5e7d4ef7d6ace6cb106e38d96085d3f3505983fd952498af3c1d9b2af61e4ba10e14961b339c6e64e11ac758d5fa18c3222138290866970d67d0a4f4e19f453503eb8dfb85b44d1050c86943e7c5d6faf7851bedf7d0cb6b13d2acee25372243591d37dd230907457fb440f83b62395f80f59a2d02b87134887406a78efd77614f3193e517f234434ab3be084f1484d3f2c1f68c67c0d6e863585a8a5ddd0be
+B = 114b6e6726433ea88a2ba965f0881beb3ff4d377526e4e099741f069abfaf29e129a1f5fd243c6599f725a389728f755f9cad767ca1d6ae5c8b3a32102e47af211e86d67574bddfa42b2cb466d968f38b47333b1b55211fd9a315acd5ef62cfd3e83c13ee9d3fa20a06b2292177961dddc7dc39abad9ea31ead1fedd3d699f651b656edceebb0bace11bebd0cfa581dad577b8b42f0a844bcd8c8227880876dd7b0aad1
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2468cdb1a26eaee34db3d2724e37f023c8a1788526b3dca99321b574685cc8303c609c85401a58fe6da181daf4111fe8c6d4b7428b1cd301cdb9bf8cb6f33140756c8b490d3b2e538ff294fd6471c4d17b9d9e4adeae0df088cb9daee18e825a368be57af4a096056b9e76b94c8d3b911b6a074ed41082926773a585007752ce
+A = 1e6a59efe0b14fa017c32ffd0962700fa9752242b06ffd0b604b9bfd125114d4e0909534ede704cdf1c9e88a6567f4a2989df752510d087d7b7afb515ad594627ece54b8a8e539074386121c9a3e1c12eb2641ded8719e56d42ef50e2f3b5d7d59f8a6f897174cc00a7449d2b91f33e9df07902a95479731a44fc4ebe8048c449bd515ef6cffed70ae78c832cd43491203a247fcfe0a403862266777947fc2542a
+B = -8a9d3646831dcc852fecc8e2335549e8baa2e2d82fcb90846ee82bcc715c716d4a9f62be29d5e1531db73c2186a4d2f118266de33d966b78f989600d772ffc55b1364117d6750cef67f4bae851e7e3f8fbdae7b79de7eab54cc1fee56e25d0632b2929e352c882ce78fd64dd0a1473e80b6572f0d4eb67f6bd6e45c7617314219d6f7de5e505a9b395096cd36650d23e8d57d6abfa9faaf0ddbff90d32865bf5ddddcaf28
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2909d3aef7a21244efc9b5b16626e260907ac11f3d00647f2170ba37197e47b9767030195c2f6d5eda717a83a152141bffed2e26777417ecd8e27aed8666698c2e85a414dddd52b07b52b0da7e08b3217fa6a331f84820d21086a4424974e1e8cfed3501eb054242a9f8bf0803a94981b7b81776eca6d07cd50c050dddf81d68
+A = -73ecc8a6a1507fb5dad40677dc6ec75f0d130ea704d1e87b00d2bd56a6be21714bb30202739170b8dd3605f0553ff57439051efea2a97def70a6d2cc3fa2b9ec27a00c1338bbd588513f0f320272b8933fdf6635e585d1e79203efb5c95a454fcd7f33aa2aeac08902107e9bfb29587ce8610d50cdb7f2033c5b726742fa9f7f20b4780cf9244e6abf6b812171a64b870c3ca4c9e898d4c15e9f5b0194ae736c3783
+B = 4049ae926bb52e862606842bbcb4a5148bd1063b6a56f331cf10000c524b4aaa80b3bd914cd697ebc98d68bd3c2bd5c87fac4ec68606c264c56e25b19d118dc9f2eca19bebca07269714f2955e107b3fbf85530b1fe99c42d33031958280b8e8abea5a918a41cc7e6980149ad68fbf1c0041798d2046d7f88a395348b295858c61c2f33d8512b6fe75aa8fbad62e2f9b0b7876ef95af8a7b7338a2d6b25ec6355c276fc6ce23
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 22407e4fe280ff5a10eaf46d8e1f5a1e77a07410cba4106466d703b11764c60124fa355733b47327e952a12869476306926cabbd797fc80b4a6dedfbec0b7718ee754d447825cc405a98b85f1e09ebb9294c4a4636aebfc61af4545b921cbe759d3f389beece3f29c2c7c07691a4c46a1a72ce418a239fdec80df48732627866
+A = -1e165ca7e1eabd2ad1264d5ed9c3d2b687f2db5b507a0e4d21d9e042cd46e93c2444c6aea8491b5caba2d8146bac656b7754b7b1ae0f6216029c7167fd3b1c3ba2e20469d386d8566ebbc05cb51bf1f1eb2cad9dc4fa454b07cc1bcdb9b8f5a43e354c4e0f4e62d52798f667080a0e0a15414391269fe8c92f06da74f6209a3b215adafa1eb6866f8b3e419468e2e5b4db0d0ada80514249320cecf034477977bcceb91
+B = -3f314681eaa4cb41a3feae8467f7d76b8b05939731fdfc943235aa4d67bdca30e64de541d17a8971e829bc0159384643672bdffbc93b3eaded7844d824604f46aa58b1f1b9d788106aff53438954af015a0387268266a6ba262e2fe7a4c51b5af6ff7f918674b7407ce8282f66e84fd2582edd809b465e4401c67e5faaa9e5748c06e3bb8ddb23fa649ccaf9657dbf79b937eb8959aae8d5bd9513c1e601c0e536cf60c4fc3802d
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 385ba217033463cd9cb882fe30373c2d8e8475dee54aba1ca9713a709f40844905c2544ad792784cc8eafbb412dd68de6f98522dfca1c3de8e3bf4cbd09bee4656c4341153b17c98f9ac09411d16ec9880835cae772bdd8eee51eaba7c02ca6a1034c2c5d2d48e7ae3eb0e22f59bf69537ab6f1e49e58a71c64b8934113eb069
+A = 5137226623f4ce4dc9b80a783777ef4e53ad3c2ec648264db472c517a96383ba1173e52c2659a97ce36341a11e832f4ad293b89696f91a051c35bb1db6182260d4a276d1a9b4be848c206899f87a361d318d38b4073a7470c5743b816cbbc3bc1b20dfd7971b11ad4e20d947e352d42760104a5a3cc590b985ee3b5e98c779e38d2581413a2208d31873f9644ec979602671c9da72fa6f66c603c1bb6d8e690dba8bf4933
+B = 13b45d4105e3f5e8e0ba36c812faeafccea2f1a30e2ce8ffad57ffe0dadeae3a23e813758f270423ecda3da083b42432eead7f04842db8865f9f1e2226a3d298ec1895ae69adc55d1d338c3fb787f0676664564eefe46ca95206e81678cf1a2f173c52d809b1e06641a9b467f191ea09fcdc597271eb43da1a9a856784972ce0eeedd49ad363dee882438f09863ba5af063925871c525c6c0ffdca428054e039e149a424c6d1b5b2b4
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 7865f718cb30026837ca006f5cd997c5b917726ac6d9bd8c3fb9eabda0854d528d6cfc10e4cd3f93f6848582690c6a83955072daefc6959d33192fcf42a111650e50776ba9ae43d3d26e0ef2c6b60c3871aec33eda8c56353903e7ae96592fbf350b88d2f56e03f7f327022a2aa9b7c484a000135b85bbaba6f8836cbfc81901
+A = 16978c06a03276fa2e0bea45740a98d55fccc9d27321fd0a5b8522298a2a90d391c06c5c59e7eca85efeb9b4c91d4a1e9178adf816d597311f004ef98d209b59a2d4b901fa14c57b7297861ee58b89c9b2e931e4ce5818dd4006f3c40168bb4d3dbbd059c1f1cc24ecdc64d37df16b8e8d0529247c06f905ca88a5d283ca1b9e6856fbe8115a326061905b369791772a47900974339722d19b3aac16a0bedd93e1e4e4289bb8
+B = -de6dad276dcc0a9e271ad523620ec570fe6e3b350b934932ebbe36dd571edcde968b6590be14326e0f6394c0a2172052ff8dbc3ff15d94fb6e36a098286333768a84fd0404dfa354173d01f98484fb20897c439c48952b7f1791209fed94e9e72bfb3df5f368d420d587ae8bf036db6700f77b130459e9de2a541ed885c69c5641defa9436a4f7a69d2848d0e5d1074f77fa688b6dcc4d4c7de25a3b1b040546ef7f418112127cff173b
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2d3dfd14e7ec60f842d1db83e29a0f6b052990fe8900887dc44476ed3948870c57e72e91e1941c476baa6aa86f76dd8ab6e6ea41707242c46d39b54215bebdb1f28e59d719fde18bea9994610214ea68ad9f2da24e1ad8a06f8bc698f8e76379ff332a2745af472d52a4b8e57d60280e19f93d5be669e0832824321e9ad8e76b
+A = -5144d5ca834f7bbb35d3fb95818c1f89ebe08efdffd35993a7691c05aa1b67f6a28e219b27fdcb66e516097c9ef5f00e4257c561b1f94c52c577471cfcd7a55314d3b0fa308b59449a36adc884c48ef5f34753bea746bd6fab2f20b86814c9fe50e8abaab742916313a50e3c390c67fda8e3729ee3329dc5e4b7d3107083aa3a07daf7952ebbcfea15fae7338cd0b114e9ab2f81dc2e80f90abff7a7ac59e3aecf76fab87633ec
+B = 48b927a46dbc4e23d714b256084fdc7cb9d4c96a988a71c956e0bf98785ebc9bf22b9d5c6ba0c419e60afbef7b96cc0c4a13e397aa2d2dd7995875d2ccb127169423455d138131199a263151f28d232ff4ae24e316907ace1fedd02a02cb5ff9c831de33e6702010fee2232bbe3c1c193ce792eadcad0c81e7d7c17e49168377b68690bc61f22dfddb17d82a3b993804726037cfac8aabe8548befc52a3c6c6baaec89a392133cd9c45b1b5
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 3f66970f600a9d09d73fd1ff813e977f539d69fe1784b8a2f99506d868418e4b47338ee0cbceed555f88824f98ffed39befb69e8907a5822ef7cd2a9950a070aec8fe4db9d68e1c0620f9eab4ab529c7e69466e325fe1c6c011bf7ab62bfd1a136597d7d5c47e8eb161ea048477bedc88fa30e4f7ddab2cfeec3fd0bb3fb61a3
+A = -1343c391be3f2b72c4b79d8d6091389c9602e97774b18eabeaae81fc0539336cd8c899341cf75fa758421c7f32eba9df474c934642003408b32db66cfa92e6e414b42b1d49c7e655ffb4c80f5bbff8d2774ee4f7198839680175e1ffec0428939653c6697eb3681d0f92634cab1cabc63f423d5a71d65fc7150aaeea74f9e0153923a1c65dee4a165e6a01a88655fbecd2db7697f4d2b49fca2508e2b8f84129785d36d88bcf59f4e
+B = -225a0a4afdde6f6450f28736c3ef6e67d67ec6206a63b11763bc6e69b03f1494b275ac504868caa6d56d684a12dc1098ab0d030583e73a2f45a42b8607c0f19031b9c5f07fb71919868911806d210d43aaaced5894e844881e89bab85a203af9ec3adb105e50b4250343ca50c26df14c46d73a22c2e4804d26d44ff0bbcc13d0dc7e326c9e4eb441f493c9743ae0eea0de045e05d19ac32d2379196a165e63ba640ca42e4861caa24c29cbfabc
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 54e95e86e87bc220c8f53f8485402327885be34e34063a1b81e52a23fc3056758cea1c039ac4e513f70ed9d394f5806fb771dca8e342368184e674e6296b9a705c6380bdaf11550cffc73f9f55b9385c85fb648f105f11138a3e1f9dc0a39a0f9755f8328701484d45784e3e4b2ebddb32c9d9132867c6513201116428b791cf
+A = 5f1239e0b5dbfefaba906bfd9003336489ffdf634333cec2484c582dbc19b66782ba40942d047c3749597ec4d89ef61b7803d33a9842f0c903461be37c679ca213aea894d36c1e12bbcaa1c679599d2adda9bd23e712dd0d0bd3f91d146e7a04f3e7ddec8b0db7e12377ab32ba241ed1e01da070c1f3ec85efd8387a7b9421453969ecba8cbdeeeaae6ddb098084bcd250601af780960c32f0a1ad7d7e61fb19f40dff1060c5f332830
+B = 1113f145de014bb6dd6ca05de159b97e9736c45bd3bbd8477f739daf79615fe329ce948cab9787838d7daf797218af5ba7925685ea341b802690bc9588ba3e916145cd3ae9d0c4a149637b890cf50fdfa8f89a62e508eec68f9332787733aacdd57ec1f359ff7fde76138d5b33d32e64cf7d252f2bcff14be3adb1afd8da9dc930f5261e6d715ac75752b29f083bb1de7b0b89ddba633b8137f3fd299a7f77abf79781a10d897e7bf2c958a097227
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 6e0160eaac8e1c31cd3cb6c5fb91ba086d033b4b69e41dfffce7569e61770f6629f23e12f0074c47c46653bbba94701ca798e1a242f7c4e25708d3acb5af6ea307b95cfa220f8879cb4cfff96b843d6eeed2b15c8f1bb21bb2b511cefbad0618d49d9ba33cade6da6ab3b846a6a24e35fb36d41201d3b85be831522b9bf509e0
+A = 14f4e24627c773527ed2243c0d1947395aba5c9cf95ae62a48827ffc1477614ad9c7aaea4b4fdd97e3272d3e220601565aebf87928c301656e9edb08d6e680de845615bb3a81c61ed043adb9d708ec1447f057087211673fa6ad8977166a2b4a8079a4f29d48e7fdd6875ccad05d2c219922b814589996cd9642ea2b798197407acd274da30d3ca008fefb40a25b38cb6042a581393283d6448cc69df9a5dc2b0777052566a8608a1010d7
+B = -b4188ebc5bf3ba31cf7c5e100e79806e92ff6f863c3d68a66aeb3ae8385f596dabe6f627f3812d0f2baea319d93ae00de41ab65e42eae7d396cc8fd0a2dfd35f303117fde4db5e8438df0c2b3b680dca538b42a7c844a9bf0d3697fc89ad0a73594627578dabdc214e0f4aa06b40987aed473e7f42d318bebf7392d9c898b4b8d73a94726aef65807b2ff746d4a9aa76303ed7b4fefbab34f5c87c2df82d20457f68289f7b96dbeab581294974e322c
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 8dd91f390c1f85f153f332de17e5de82979755d835398cdf3dbda1ee73c68f8e7565a964ae33fd5b1f1060572bb3af67eec79c4c3e2eb4de118d471f74351b80a5dcafc682bc3cfde642e611ac1d5bc2c49b308c30985b1161c4d78cf7621b503e2dfaceed886befc004f3a729b4a9bcbb8f13791d973bf38fb8101d6b7a4d4d
+A = -70e99398673324ee83495aa0aadfffd7bb9c94ee5251fff365124fabc50175d794fa84509f034c2b86d83607789338b0eebdbbf709a129a0ed0afd21c130d94b279c56f1c7c1eacfc6cd13f724a9352b2b37412242a47b23ec61ef0040a8855371aaf238003c45ab9d18a66cc7dab9653b93c323815e5404762d3f964d4654a6995af507bb2db2149eea59acd72af4d034217eaec0be5ba1d23890081a6a234e125572e3bcf68a6ea52d9437
+B = 661d8832671a4974b493e5d71e547cd46b36730f4017e50c5d1a7520fbb75f0314cbc2ac948744dd494d566ba580a2108106b120a797cfeb1fbfdefdab6bd6b2e073f90c77e814cafd0b7f79afeecd59778b1dfee3446fb32139b2311011576674f96f151f896b477c631237995e11e61e715dd8dd38e802af93124c66eee735c472972000cb4788b26752a630ba63b45e8ebbd979f0a4da5b359abd2905f0b7f3a21b1d381cd02ac08e284218ce41c907
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2b591d2c57f6a5484b43cd7ca247c48a1b38319e843257331c8807d499c7763de4eefed529e70d4c144e5e843ac00ee8d106d0d82163cfb7afe528a7daad8e7ed105942d1128a67e38d59325cffc0c3dab9185247e0082e3ccca82a900d917c9bd0f892d4b518a752f8e9d38eab2acaf3b3b59f15b0fe4cb9a3dabe6e0191493
+A = -1896f67485a740720e23e1642ef02742ce5f10a92e51af19e112cc99c0fbddb60d7190086c942d293d076b474d056e74ec9f0c42055d745a57ba370c51ab2b761d889b766cec909811e2b2fd11d6916b753ae00622f038a4bc55b813a5d06e6ac136e81689407de721ee852cd21ea989ea7c8cbd00b64614caf0974a62097b2eb865f46fdb0c1a2e4f2d839066b797e51392e5ebd14dd92630c070acb546dc7438631fef01594878643a4cf77f6
+B = -3a8e2f3b8378a2605f5affa21c4fadcc655f2f8357a3427d2cec0118e55fc2bbc25931259e294d91bde8dcbacd39e6cbc125683da7d0dcbbc67d7c5866f08e7c4732cd4384d9366868370ea40a75beb23b81306303da4a3e26ad357c5c743d0a4ae775a472afddf8f21cb4a1a3350bb6aa71037607c334a0c79468668d3e727cf1d0610e49f27780901c68aecf1d145953e45f5b090855be714cb39aba2efb0f7db2786b331dd9bb8843de8c73c95ab13b6b1
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2f53bdd643b5b22445e2af3667a93de52f8bc7bc151e196c0ab0bf3b4e4dc0e5dae9e507508711a9e3de52e2aeece6aff7fc8a1db65588de3272839390a35a847e29204d3b9b70e10352c88a10c86cd33e067fb530d20a3a5ffe67938c5a7a9218f1164f36a73324adef64da64d5fa5540d29a76a87ce010fb7d73a59b109280
+A = 75e31ab221c08b3bd73bed03f878bf7742f9b36a89bbfa7e90f9b05ec11edeb0140dcff6e9ad1d62cd7af34bb4284b3a52bf1b48a40f744b561d9ece056a9405ab15f508700b14914e4f427ea1df3093497410a0108066e9b259c1a26ea72082b3cf0e3a99ad054804da7bfa0200d93d65354b75e605b47a4e1e17ef851a37c59a95e1b5172801e6ecabf70f1e6e382740998fcfd8a297aaaba7d04b668e3d6eed40358247767323a8393ec359628
+B = 107aca18938a9cb244ad646a37a212859b3dda7518a5827aa2146b47bfb3bd08d772eb7a866e1f674aab7a1c74cfdc2bc6e9ad1a365686213655b2c7b1977855bcd42ccecb804bc01d92bd7d2667069d853f18a0f0661f028955e39f71ee82b9ce6a81dfb2951b33b123e71264e819bba4d0a8c53a1d99964ad9ffb58b7cb5cfcd3e30b1baf5aa5b3cbd20a0df7ec37563e2b32b4cba91bbf3bb6fd1cbfb2fe0f84d720efdf36e9645c7e9ec70442ea5174528bb
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 32d16f7ae2632b5cec2e90c34d191599acd9a1b5f97845595988c1d0d4ceb9acfafbc4aeee9924ce55e109ec88c57610fddc664316e0f9a5e3ed56ea447111c0383ecdf117ab42351b80e72720a4b1d98d4c73f5235507c5b4f7849d5e9b527d054858c0436ac3d2de2704c4bc25de4cc702f5880d5ae34094766938bee555c8
+A = 133a439cf006c753c132a8559ea13c64f598c5f8bd5043b89d04d7ecbf0ec58b225551c8df8dcb341198fb0b487774867e5b68f9058f58b3cc98168fbed0d0ffa86bf74b4fb0d4235976fa86d52b8dc7e82df176d70892954223cc484ae58b6a60459a9a0803ab856ff9699789172b163615e322e193bd758016f634c83cf50403e416ae241d9b1e44add17c2a663771ac88cf8b9dd94622d80d879ae41f0f4e7a1a32a1ab164f981900fc159aa85d82
+B = -fef33e21c07dc26a47d692c3094205bf4efae6af32f1c0f46ee579c1a22746a3663d66f2919f46f973fe558c61264157d531e66bb9ea10b4b49d9f6ad3ad8762a6ea8169a9cfe01d3dd65518c2e6e58e8c88d1b2f42d207399d7326752560cd45d0ff571309301683770793fe3765c1337d14021d39ea6980934c5fefadb93047ef07c807d0ea5625ae0cefd098988d6eb7af993c062ba313e23176e7abdebcc6e566304a5f9e03da05bc1cc58dfbbc898a67a5941
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 20877c7f53fca97f8e484ba31f23dcf51ac0f4fe4c5121eec576e043c6ec5492725f1b9f9ecfa64195f71909500a69fab2e591377cc2120bd5f60d3fb3812f9e80b2f6c787e0081c1439dbea76b819ab44bf6bffe87dffd771a870e4f5502609249c5260f91175fb217a9eece4166540be877d564049389306e0d6b313706297
+A = -534042b0811c9afca04d20d83898e7653f91a73de1e4b516f3228c6d6d9b963c7f8f4c36e05383da90f4edd072a7eda382c47b84b46b4dfa16f269c2d9ad0fc53ed2ce51cd31e4e32d0c1ee21604d3c7eed2deb35cf8df6fe1c0740a1515e4c702a2074ad6c0fcd403603b4a4e2195d19b265958ae854ccb0b41cf22480389a053f71544cf594f6833f3e4d91fd3d9091df0978d04d3922ed72a4fa3579c5fff50eee812dfb2a334148227a0f5739f8ac6
+B = 6935a3444434b0b03d27545721e253e4281884da027246e46ddefb01fa7cf7a9a030581dfe618431a68ef6d79b03b34f3ed598e7c8ac030e2b4cc887dd31664604fb8afe4e71fbc3135d6d3b4e596044d6b615de7184ebf8dae8fd58506286ae4d3b797aea911eb59ada39dac756d0e9eb6a6c767ab77b9348929a00f8e311f639d19ed88c86eb91f0d4cfddd34e98130eb520fcd2b77507c24b6804d3d65d1b21e6f6d55d1f6e92bba0544829687a096be79eaad7d88
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 24823628d4fe9540103ce5f611f8a6ccf18788120280179a40c2636f30a13e5076503e8a4b6b6ffca21da5b0f9f0d85feb2ce10b51292ed069f35289ebf5130972d720d20dfb8e6ee80c3ac598570d38e57ba33dbd75f1b03eab7847d865c3e8e471ccaf302461a6136dd13b8d31c9f163799a3c24c7284b8826608a9543816d
+A = -1d476cc98529efe5b926aba3160b261723b009e9b880bdea04e9b5b03f173040ffafd1627b38be8e00840e85d7acd3abbae2f7a60b305256b920c2b25a8a4373ebbf1a0c69f6e74792cb0d849872500519b6d1c190da30c572e26b44590b7ffdb464a900fc38db013feecf909b43bea549e05f1b7e70d6ad879c613293cf61f0cecdba1a6565eff1bfcdf740bf553ffd5bb7d74f7e9537897184c527b990dea20387bab0dec3e32727786bb14975b23ff09f8
+B = -2b6e12c87ad91a2fa878b9245875209cbfef400e637b557c868ccbd6e94dae65f1ef8caab61f292d739b139e384137a747210c09ee6f3b2ceb6dd212e14525852b8c54215191e116b7097f6729f6426a8bebdff86cdc16effa08d932ab512d7265cc0f57303aa5e6fd2afe0a45180557935c230558d02c3030b38ca88de5fc75c1240d25a22fe32c4e5096aad0078d50989812d7dd0cbb02c736fa563efd32d14109c44297cdb3d4fa3b93a2e15bbb6eb678e93e943979c2
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 2c4bc23d0b4b1f79141be9149ee20cc9f1b58ee0a76d5f4205e0862492c18daa20171285d6ff0b600c358be487e78cb5450d151efcff8d53004eece94c5a37f49a15fb2b5f62a79568382cf0a4232407b139e1ec5a9595bee8435b4f138dd72fdc2946b03817e49864812b7b61f179bdd8389791178a95bb6311df0a5c60db2
+A = 5b0a181f07068af6e1e4b715d92c1b8391949a1e3cf0fe0aa49f3333c826f5582615d39ec28b1367804c1ef54f15fb83b3c578ef3ae957fc89ef22a343175df3ef2fd425f724ec1c3363aa000ef624d64c6d678a4cbd90b41cf7d69a7e03dd60c5d3470dbb75228b34d35469847772ff3d74b1a89a2c492c082d3ddb45ba4df6e3f228de6c64913b79679cbbbc36a2924e722c2c640d0c5a0e90ae86b5364dfbfae80df3d75823aa58ac6c1da78e988a11831bf
+B = 19567bbcf615b777b35fa7030db7da18126cd695ca7dda67f5146c97beeb20df24ba0fda4a4f03523a0d9b9f85d9acbdb5793ecf9c1f4ceac81299a1aa34417779175a4bddc0e95ac68309da51e4f115dad6fec33a75d0c5520692a38df64e8d684c9304f9e2e6ac6a66d2e16a03c19a30efcac712aed2b9ee774ea28af4f37c45609464289de3f9be379c733d711875216bc223f2f468a0c9b4a8277bfe49c590ebce2e027102537bddbf2856c3b6e9389c4d1f5390cb0f346
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 36e1e0b44e5afc35d1e19e88e75f030569eb99d326721ced9bd7416ea7367a98305354eeafd204f1f8a652a8442eb0823d2e6644e6320933ac481a3709777381dce8a7c165b23aebf31b2ea2745ce5b352acdf0707234c824da9e1af98bbedf80e940fba00c229539f310838bd625f1fc103f267265ac1243855622c5df72c17
+A = 1dba8bd9d1e6cdc117a5a01b5046353084946fdddf2696f831a942d9db4637a5ee76b84d4ba63156b8cbc72e40559a2fe9b8e2682d8ba1db0cea042bb86f8ed71f6609df52526c42e7494f6114bb62263d36784dd55d396018b8fa47fa49ca6e5c76ebb0b00e6c764e36cb3ec75e3af6a2c14dee01fab78070239638521743d04f184dae79d49a2bf209ddeb4cc72e0c94a93a47c107f5369070ad95ffce034c554fe2a8391e67f817c6cab5b88ae9748072da5c9c
+B = -849602ea3b79b33af2bd3ef9d1250c507d332e759d428902dbee054fdbcdcdc0a357a51d00aaafdacd696a15a64cbbdb7e1fdb347be5ddb1f609a4390a6f29f79ccdb51bd1f0547d0d9a2780517f8753a906428fd236f8ee1b433e57f2810d0ad51846304a5729f53a871d8b0e14355d24d3f092e50de4f044e2b8aa14cd8a51fbb2ff36b0b37defa7be768c56fbd4f5169d9d4698fb9072cbb0a037c219552728587d7c35f27456c02020f5f9374b6c53bcf8eeaa14be51899d3
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 77eb3cb5277ced02b72368e41f04a35796c2c6cc1273f109336fdfa745aba7c755b6ff3833e9b124d9c78584f6bfda1c94273522f020371107870c288592b7c23964320729d2308bac8813586e72078119852e1d7706d8e15c195486b8d94358736869b15d59c037ba4dc8032ceaa31eac3a9e3dc51ee17706a6956cff8537b8
+A = -6a0753edddef8b74f762bf802d7fe9b38638923ee2d81bfdda354d40df4422e6ac43724de1715c4088da2e68b63c10c90b236d7dcab39b9a0ecbce57628f4c2950c79cc88a89daa20d7a8679232c8ce5fa30525c56011570107697222e0eaee6871adced52ba01a3aea0ccc9901cb3a09eb4db2f93aba0083180bb41f3f9eaae00fb458381213dad01997e9b88f21b0a79ada1ec3837ac2b63611455fab6839363b796b105c3be6106ff284544bda2a32352bbce6ef8
+B = 542c5fde65111ec8a38d76d8c5735cee17329dc41cfd0f13bf47e6d0e0093a129f3449db380ee9a70ec1e44640839ff18b950c8fd89346cb4701ef753e6ef49dfd9bd27d9987e572bf8e68df399cf945813582fa1d33e07be938a7729efd9a5e7d730bf61c537770a0727f6bb9ea6add5aac9267bf910eac1b7d92ab4184734ef8b1d184c292b2b4295ec1bfd17b8a2a2e4d315a8b37b8ff9bf6a1e94a4772267195c5a7ea6f0a0c267337fb97a023f1b50ad697ea31451192cebcbb
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = 660a1f378a23fc3b47f693a347d90640fef43add9729d74546933f4b78a26968cc9a70ad6fe8d85bf28164881bf7a99e8b96683c6f4fb54162c144f99a27e3feb736f0d382d7e5b934cfa835c723191e5692b7672cf6918c4a7a93b24af00b1beaf1b80320b14cf2d1539e3376779872542406a5df961f765e59f3480e1cd40b
+A = -1cd74c052e62ee8156ba5d97f28aada75211979b1c5925ed015ea75f693a04c4dd0a705f6a723ae7b79958884c96fc07f81fca064ce2affc70768923bfbca6049952eea3ae048425b7c6ad1611ed4b8b77f7605629b9d198a77a27f25eff2f82867845cc868edee4ae31afc5d022b2ffbf43c14fa01bef8d7cd9d0e58362a0ff9abbf250e43ea5065512cd707791ea4868e95d8fd2357b3b3aec1a06888ae940751ceab01cf9e49015d42371fac30d48ef5853b6894ca83
+B = -2ac904d3632e25a4d536097d80a157791a6aca6eb10246ea21f4cae07aafe907c6e4c726694e14ce12e376c02d326f4bfc02ed539a5b4615a3cf5c838ffa52124f9b843598a3821cf9f1fe94e7206d6a525fad1ef77e7e77162e8c6d3d860d4f568e8f81153dc47f167860cd52c1ca59b15f1eaac6b9023c8b375bb63b6adf6972af8ca62b39f044378b11c4a969f3939d9fed5cbe18c06749956c7acbf963f640a1e1ceab73fc4c77463ee8d1575d018f49bf0f08161ce4f88aaab5a70
+M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb
+
+ModMul = cbbeda9c467ca801ec66fce801c6765a20148787dc6becb199a15c58fae8d20c1d391a1d9d57e1c74bb412e1b8f271dc2cc53c3355c83f3e2f00f15eaf0df735160a48e2273fd1bd75533cf94c5175ce67e79fa6c1422996fae36ba288a658a7a5422a59d39dd81ddea50979e933efc02
+A = 7ea551efeccda23622a1a5029e5525f46d5ccb83c28ec9adb7a3e97c2b7d936238c483a4a9bc92fe0e21208d5703611e2795b91fd5019272d255eeb
+B = 19bd92c534f56dc4235dfb7efff6d941112d66acf81b079382c86fb10dc5473bb8adebfa53ea3fe6e4df8412e7807aed029694ca786
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = b18a9cd6a0a89578ea773fbfbf642e05935a995a38bbd54480ea3ecea1751370ef95ff5ad0e3203613f0ef6833237d549676a95b720848c5e9897cda82642a2f373951d5746b559bae2d98ac00fae26e5957c61ac1de95318b1b1aa6d5c64a6ceb6575f1b807060f9e2a241e378e6ebd72ade7d2df18d5353db7737caf52f888
+A = 13c68e450e9e091ae45863f6c1faed25906dcd90a43620b1a40e7a506e7a954256bab0225f3678e7ce6c4ba6e3a83c8f04a3491d9bf097adbd98fa6e78
+B = -ddef76382342178fa6636e62887fce6e19590065c766b047073329ea15fbba96f2cf088fa5a989f6ee3f6a513fbf66f621c6ea6ef2fe8
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = b18a9cd6a0a89578ea772021f58ce74cbdd8c44a09b3937b198adbd8e95e8e35541eca26438351bfdcd8600b4f9b71616e1f16cee707c712d40da9a440681f8c8647bc90ba4c68b08ce4cbca458bebd5110222f06b2ca980a2e9419e71064324e8c36289eff9c67f6d5d011e6db8538a54aeff8c20800b0949fa42c38fbabfa1
+A = -6d7e88715e9854b435876fc9bb2d25218a1451efb73ad9cc5f52b2bee929530e6618a858000b3f24fa5f47b5f461c84eca971e38cda6e1f475f6612ec32f
+B = 49eb76e4614ac7b0ed3f534811a4ea6da5ea24be925ffeaa38bb228fa117ed56ae976b590d6c9d9a7a8546d8a6ebe4bba771d6587ac44f09
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 44f8596fc06afdb72a6e4f876b70b8d5d734589f41089c510b0da60ade642fd79cf8e705f09910912624fa1f646da596c137f124ec1a327beccba62a44f228f3c0977fda2af631e249b2a4de17d170df07bd812c233a96d17e1e93910267682d24c5c485f99aeeddceb658a7db258a2fdf73eb0266d26b92e
+A = -122231b14c249820f0dae625342415f0c6e7f93787b4206b79e9ecaeb09623636730810c7936e17a1eece68edc7c97218efb17c069bc59bdb9681a79c910c4a
+B = -3cdaed858523fd55553ef85d018c1097d7b88f6c30060d1e77b84821ca20b5625723c7d4331ccad1a70371eacc7f7aa11220f83f1bf3595650b
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 6de7efcfbc1e8d2cb14cbe4465c4ef71f0d1d7e80a1d80d9ac2d0b161d45fc9d915c54e33131591e8daeaa11ce02404c9b8494added1bd83e344ad4de7c04f626315caa56fcc5ca2ddd4e1ff064a2957afeb5d280477bf1f1195c7294d89049024fe821dceb53c7d270a8b4653e2fc0a4d8a3863a854bc3794753a
+A = 47423c4fec1eb6779fd23e3d4070d0a7bf9a946f5610eb469876797a39c58577242daef8c34926f6974089fc595508d9c573d0a275cbeaf37172f10b8c849a493
+B = 18ad789cf09e9ea182eaf43b28b4f2540e533f0fccad325430b73101c00e440bb64b70ce0f2680184aa8caea2f6f6517e9b80285fea8b61887a41e
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = b18a906994d3247bf8a00f20e4b349a500159d086aa863772e71a68f91af9d19e4c021843f8bb6eeed1df708d55047dc8faf219e00d559517632dbd1cbf4bda61651b9644481d052903be1970f04bb4ee8faab9adbbf858324e6cf5aa9384ceba655a1a107210a9497552ba8a56d5e0e70b0c757baa71d1613683707357827f0
+A = 122773509ee608cd9ab3ff6763629a18eae41be64bcfb05122e0b3e112db48c64d2a5a515d96a042850c1c848ae5fd5f0ccc57b273d25bd8d68568cb00bb17b1589c
+B = -af398208c01ec9700e332f3e694894c7cc412a73bde8a79e08764ded92f0d58db8056883972c79a0c9e0ce810786cdaa3629baeb9e5c370a5a59d3ba
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 64ef5e7063a1d95226569a27218e35e93d870a19a43fba9889a2ca98ca5c573fa56ebd77f1403b3bcad17c1351803a809c245a97bbe32b45e21768f28c5b11ad542f5e687a17f7811df6c8735e1778e94d9313c19fa32a6703af7ccbd88b489c96632d10eebb580cde3b905f6345a2a2b86a871b4fab36fa4b0dab9a6c1c5096
+A = -7dbdc37a51b601417efdda2516aba15827a40ffc304c523a47c544d5c0bba6c1367a20d8a6268a5c3f723b1b68de57eceabbb00d44185ec4ba7ecdce5d80456f8cfe7e
+B = 641cf85fcb5fbacd6214be4b7b06fda1b80f4683c21c1d08311f6e23a15434b42d30a51912898a1c46b46c00aef7ab7663ecba683897825a4b07d2b7dd7
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 370f20360ac844bf4275f78b7fe71ba5db6f0bbabfbac3384c04b256eddaf04725d2d57b31afa48f047aade156c34441b4a41c0b2146790a2e15d13b584021ad55965588c6e55ed3b5cf5c36b780a27c5dfb72678d57528ab17ca2ac696aed3d9abb0ca448d9d5789fe37e632fa9709f3bb924c4ce34244d239a940dcddd9c77
+A = -1a0cc5b07271098a23f01b3c0d47cab8b294794b74a8b162ff3b313fcf85ea81fc99433cdf4450970311e1d5ff81e9ba27eb867073ed250aaa7795e44ba8d4000e879bf31
+B = -308f93984acb78c5dac2426d9bccc2e3ac361143807c7d34c24ef8f8db5e68a904ac8bfed1edf3cc90d21c87ae4d224b8c46fa42eea77797f94aa848160fef
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 4c8f466d1d9829aaca1a22fb6ca5bdba885606b9264933ac2b4c18e3afc0c406aa71ee7ff490fcaa804f457096e44576ff8096fb1d2b3c68450a8bc36d1a2797ab8b621ddc91d75e7d6ba01d86e959171fa428a5bb1f26766f94a553c94f6dcc2e0af90d7776ed3d9fb67e842e88f7d7342afd86e2f5d159db7304ae4d204a3f
+A = 57e894e37159cf3c161be9c97a946454e43bf09a7ae8e1437570a86c6b06f84005c1463d27d726afd2e25aebb1657eb78957a9a12c8749049d12007a81d766dbe008aad6d83
+B = 16dba5cf077403ff4af47438f5840f65fa4e058c5cab3cb730154ae0fcc982ea097c6d0e75bbd635e97314f33ec7e31f0e41cf285ecfafaf36382b33d5e83cd55
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 29d13ec304f26247a45ab6869720720fe019d6cf370b9e2df9a65828214aeb4f8b17969b8dd54339d08eb99bbc66720ed78ef79033fdce6da33501fa8588af86ec18be4c4ecfe01781f9d1379865100dbbc020b892e77027d1f04f8171ca51fb73129dd9a96568904eb44e19f56f842b223724a9ffe28826803185e4208f0ff0
+A = 135ebb133a0beb909101da896e3aad7e26ea72b23e60802e54cc6c58a07b1205e2ba1fef6eb86c420f011b70e3f725aaf9fd1873b6e1c1cc7005c7c09e55550414875cfe846357
+B = -e8cbf3feb7be7fd12b01d5bd024e47538f434b496613320ad71f48a8972f687992f97e4b69b5842d2d6a4176a5701327c40325e98b27e4c0f8fee5a457d92181e40
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 4309b728306535bafa6787dd79e58324b3f86eb5409d772018cce2159f75832b87909a672b8b4b14342b352e76ec5a6dd66737cb0a20b81c5ce222133bfddfea878b132b6f9fd557133973a0b44aa41a01d54ab565d6b9c62da67378a4058255047a95923daf5f0f7adff2a3f06074ab1facd986d7d26cb475ee818199a390b6
+A = -7a63e108bc9790ab687e0fb8a1cbe1e9ff876e7b5eccfbc136ba05fed93412dbc2ffb1ec49518e9fb867429cea1d7f82e2b159b75bd40eb8370e8a54bf0e0ac0ff24aa3662774bae
+B = 51ee025b2ee8abf9dc5ebf1a4600131c00ae4b6bff966dae5c49ab5b9017e6b1abd6434736df6daabb2bde254022783764c94e66743dc752c9040563df7016a1581fe7
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = b9ddcb9ab858d2229cbfab87d87236e8206cf5e1a042eb5ddde201d56e2695a3d0b2a42bda6a284fbd2a5b2c2b80446ce88c024137780c277ec80bfa6e9d15397cc5bac98e58c9130756ed0fde58d475a033fd94b1fe0ecc6fd91a8b42177abf3f77e87c0847a4244b9fd4980f3b42c7c955836bc994f2babfdf9c5b43315ca
+A = -1f971ee9a7c966d1e82166503681afc280fab255665b850645321f67da8934baba1226e9efb59e0ac4483c8724f63556a213f2224b993e4e082eefff0056f7aa8a3cf5b655e0f72ddd6
+B = -39309313b04bda1103ca6f56514026538b4a29ae258a2a66424abe2c652b959f5c1dc4755ea37ebbfe404839505c2807ebe069c9abb9150205fe35bc286ca12b64ac46133
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 47555924c31f040619681d4a12064790e981db2c7853efa17e4d20f741f33c56d80862caf86bfe0730870b6c0afa9caf66e15047e60256fec29469d1760d5e9b77d79a84fcf7a1dcd0168a59f870f1635eb033e0ae0ac17bdb73da803206d48cfc1da48507cb812bea540daa2393321ccb0d88b57abdbf3a3bb765692a2c2ebe
+A = 754d78d5608fe8c7ed8e26a174fa27833a24c48d23f0e702454b7eb578cb107da537dda11027dd6b41daad329e036794de562d7623bed8d9b0e909cb3fa38d4d21a95c5f4246e0b030a32
+B = 1839baa8b8fb6575832136f1d4632f72f36cdbbdcbd00f197fff3cdb88b851cbd74910ef6d43cfae9d3248e9c85662d7fb596ae45a460feaf308823f06345bc5fae8823230af
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 9b2f026b11d0674e9ec060fdb24b45fceade3070db4405b363d53df1219a02a664882819fe602f430636fc0bda935b14c55c8a0bbcc9b6683417e3ffe7f5d58fae229122ac6e42e76899254295dc5a08ed43c79120a5e5e4124b8fa6048ee90836bd2de51bbd2c6b9b53212e913cde871f11bf32f91b3a78575a006da36627f0
+A = 11402b3b1a45d67cde9730062e38aafe1d04fb1f8bb1975f25cd9098813efa2727cb229adf9490267bd437220d9ffa05bb993e45d2f889f140faed3ac3c7b53216455a830d6edceb02e8db92
+B = -d8e011f18bde068badedce8106f6602429fbcac4766334a0101b57fe94603203a4a8975fa499d8a68198aefd9e68f28e68914f920eea1083e37c67d59476bca9819a8bd628b89c
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 3a74066e7eebd9b63a1dd28548be60573c95f29816f3b3ceef68a5f6bb797d7eb0b0f4ee612dca794ff82f5d7461d995b9dcc09649e2587639ea017865328bb5deef17b5283691724e8aa331d75c635d5e19ebfd268fe5471714aaca8b48aeb846f241c1675e18d35f029b132f81128f19028b0a471b3f75a530321135e35fbc
+A = -6c5dca3fb7b85573d1c8899868940794e428171e207b5f9f89fce4b7159236c0755e2959d870754e902e9c40dc1fddeeff6364f898ec0dd669283e6d26a612d9af3c3ab04468707bb8a7827756
+B = 5446269bbeb613e69286f1012ff62ea767965533624542f3b5c866cfb569d6193aa603061701992cb4873ea8b766606da1b57d7b37cf52f52bf85b58309387200b0ed36164f30d52e
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 2a4e727ac67451ca9dcba648050a085196460e4aa4836c5652de863c3e2a76213e0f590de3aee8639304c54a9dcd5f7d5d3592f647e3d07d322708e1e26329f4a31d66c7f2e9d482f22cd9823074dd57d14040a4f00ac2af9677a2c98d58ee1e094b1a8c40092e77eae454638bc3655e77441d4f218c637f95c147776f5bdac1
+A = -19fa688008a12cae228c6ac4982ecbc88da248d7ec785bf2289dc9103bfa3a91eb1e5fd6afe9e0cc035d3312e9ba64028fa6a229db6d0eaf8af43d8c410be7c689c3e557137ebd60d3fa04edb60cf
+B = -3e8c87fba4a41c3a84874c987acee9f560b9f027338b584a775c1fcabb766700f758c4d451077a9427257334a569037b0bd006375f71223add62eca19b1e26b86dde0cc251e48d3b60ef
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 52e4a3f6892b425b935c6f9d1396d2034eb0331cbc5241e1d745a9619fa0cf0fc521585cb9d6b1034c5fbbbbecdc81c757f768c7a82f6ca291cf5afc98500c579f82ccf0be233066730f738c205c3c188f94b878c11268871ba42a5d950dc8a399887997cef2b6b68badec1ca641b88d1455e6d97a2841da49df7eeb766b7be6
+A = 67df01e34a26e8239c8edc7ddfccc3850f39864ed237d4dd67588efbeaaed1f884105508f69e20ff6a5cfae1516f6179ae6fb515a66ef0a7d633ba4218c30875287ecd0cfeb5bafafc492619942f97a
+B = 19f5076405b3c81519c0863d0c963d545b2834343e42bb3c779788cbb46d89be3f775b62f4114268a0ca0e6af6c0dd659607d40071dfe7f1ad0df9a5c53b741c04612158de396e9c96f7523
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 8ac1d96abd2cbcaa8f7e3267b716f675aebd23694d24c112d202653979636d4d47e27cc36f850355cfc5ca16b78cd1848944f8759fbf6b03fbb7eb347536a9328a5cbb778a6bcd983081374a3f543b1380add14a9468358009ec2baa7ecdf13e7260968eea74083459406e8889936b2fb98c8b9a3597e5f9ca10b76e1dd0337f
+A = 1c9ab23ea37f324544280d176cc02762db7a39935f1ede9695b53a3ee2db49d0485c6a3742a3b5cfb51f3c21711bf89ed05afd0886bbf61cbd57b23439a8a165484ee8e4c0e1c0ca2b6478776aa2897d87
+B = -e30d28dd01655b7a419d939e3e7530258a667420fc759bad585802c63fe5efbb309cb502babdad0afb208aff5ce5830071c5a974604c69ee47f76fd87e2460a5b03a57ef0185881502625886f
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 5df0700adbd880a5730d8c0637a362a9d42c64503c3b9784046b946c2459a619b5bf804a41c92ed6370bba730c7d39fb2e01558f7ec38511b0449d6e9db8df2cece4ed348782ff1582396ca8b3196474e7e5817f8c197c44d771923b6e286e41e7e23c33fcd8765e06793169999544a310f2e080ffe13640b85f21a18fa11928
+A = -5c01fc52e86f3a344180bac284d2376d1bd693f20a46479c77fa57077df62f83b1e81c94e577d1d6733d276f9cf70555b20e3afcb97534e4e0108a6cce87e9292d78b2d7367ff15fb33d2c3289d2a2913b58
+B = 6bbc39283be06382ea91ad6b1630b38f32385ec90019d2ded7ca6fdaa39defbe22585be0df9c0cf613f6f146c71f901adf525336f6573f7f43e661c44b7097f110d4551e8c75449da8fd39201ca0
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 2a01005f1f387c4d8d24a365708e2506b044f86dfc011262d3577f7313a8f51ab943037361bed1858e021f8a46491a5c73284c666eb65cea1392a780219f13d7188721d7d4b975272293a5eef63480f30cc9618aa74bc51f4175246301a46fdbd34a6ec72d5974aa920be5f321a97b8f19c0ec56ba10eaf2e61f2b45f134b304
+A = -108bbd8824e8c16b81dfdd4dfee691e012e578cb9cc80cf050c0ec4cebf71a968732da36552979ffaccce6667e46c29144dab75132cb087681d5549dc5508f3719e129553fdc97f545d7ddb7d3a4fc575ea67c5
+B = -2ad4d4078c47a3c8f5f9b48e10d52d72349ecf0f54abc60bad63bbbf4d8efb185de90e5e1a686859e1c429e30977fca492aedbf084019e9ceb4490aa471776ed2e8a09151b37c5caed9ede66922b7ec
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = a1b1b2d33cb610f1b398e03f274ef39a583d13af14b79e6766859b9ca748237b481a3cfd5d490a073e82e3c53d3ff5cb6219b2b2f71927f27ab6f567547a22dd35fb5919e1ed2b6dfae4d536d6d44fa6216d94d26b33f52db06c4ecb29702588b73ebce87569639f786df4fcf569bb07d5379bf8b83743327248c2d71b5dec6a
+A = 5bc53b3895cff2bf7bf10e24fbdc43d17d277a982d5d92f17b9b5a2b9ed8b6104229292ef3997591e2e6a116fca21ad5d061ce438f33b7f7110293770f8313077152c7546cd522ef4054147edbe1878072b1043e6
+B = 1599b541c9809779df3ef40971e7a83f21564bd5d6596d51a3d96defa4dff41e83ca6247969a3dd9a746ab72ce21137f2d7ea015ac6b2ffa8a32997e8b821064d35afde3435b23e47cccafa74d5192535b
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 4fe8897417446c493725521c0ea5b2110f91a1b5ba236cbb6ff3f52b0036a49fc82274ca949ac2b592fa4bcc792114bf2f2a78a2cb44cb22c6fe7e4bee7981604de47f6da2ed1fc6a8eb32cd9b8aaca0f2feec76a2438126ae6f409645d897769a6d340308f82dbc6a98ac059fca6f903c5aecd668fa838b67300c654d4013e3
+A = 1717c6503d069103f10bb4b36427fbdd2371b30793e492e4161fe185b2e27469fef6a25566d6b46f6a7f97446315a22d1f1f662f912b17e71feb2c82411ed7eebb84d4f594deffee14934b75a845d83761f36141ecb7
+B = -8808f540521c20eefaa037fc5da782c891fdfc668b955eaa2e4edb592e027a964b4cfbc94c548d785d92992abe282d90dd137c4d76419926740ce138d567da7350d89f2e56772d8f5bcc9ca8d7076540fab3
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 8b9311808bef497d8a5d14f7d851567a196a051610246964917a1f9d4f4449357d2411ba9fd93983f6edd76b8a8e1501146b08b6e1fcdd97b6a41cf637b6ff0cff7a2d6351aa1ded93f8fc1cedc81879eef751bebfbd1559d5d0320595c79e3eb1db0951d7c67c663bc57a672faed9e14c7da6be6b0c6bcab3d4d515e51a0b5d
+A = -511312fce1849c3d177d42088e55d534f9f7096282916e16b041f66ea90e2cccddab5cec0ba8ebf0b047ccce72da349f420cc28ab19bc156c1cccdcf5216f19ea922698127f090e97444751dd58fe7a2c90197a9ab3d35
+B = 6a5cab5e322d5f651f798aebf43a62af772fa2cc379905e72d253c49be8193a07ae6164f21cf08baff906ef800e361e1cdf1604f454483e10c8b2bfdcce77c12b0320dea63f9ac0afbb86115b656d0198aa883f
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 665e16ba6cba87c646637a233ae04805a302ef4a10d79c5b65b146cbab8c9ccd491faa32937d0ee955dff7dd0ea3f79fa43c133021c8680490b91d9c1d8a8102ab709ada7508bd59042940b2bd3a4f8c195f781313e45fa8d3abda1f8e13b35811b638b2ab101d1caaa92188d2b75b2b10d596ab159583135b0d4d15fcd3d882
+A = -1375af024e9974cf8170801f4a709b4e5862ab7d18464077727bfc2581e557cada991e9484a1acf80182458158c44871e67e783f7573f214ee4ea1f1821a65068f2bbbed7575f03a4bba36b0fa8cb6dc58c73b100a6c4a6ce
+B = -2d64b6bd987d496a3c121e89f4b0c88b6ebc6e30fa9d47981b52862551f3b7251a3fc376db0f2d6daab6e6fc5ea8fa10b040d0dce334ee91d8cfa6db9648df907b199bb11b2b5c41c67d72b760c404b0451f70fccf
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 49e9709810d9f3fef159e5cb45211453e7a94878dfdece19af839b89c0e43b226d7cfd46859963c7ccc753350e74c2501131474e3b8e0edcda18583b0392ee15f1dedcb7144000fc7fa7eabcbc83d12983d2ade477b4687d75b723c1a98a951d21b2e8ed95735aaec77e00de288d16422fd259c665a08a34331cb99299ac11e2
+A = 4e550ba2fc2a44452f068860ce2a59230738a7a15f5de0aeb4d15bda8c61ee3003568dc5971e48343d402112d7a86860a7f08f5cdc0de21fb1aa064ee5df26fa23839b5ff6adaf64a4a18c07efb3582c2fc9612d2208fe99f8a
+B = 16f31365545772f276d8ac952506bf4033a884edf1ce583a63d8d9f6809e29d9cce3b3d227f839e6c09b459951465ab4570d2d36127c0f677fc0a63975801896f2fd17887ca16ff7f265e2e7adab1516ce56ee1ee9de1
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 89ca20a3fa109a65b9449edcc729fe97ed45a9bd69eeb31d4a566ec1787b24cb7a2c25b3f89b36fef1cb3645b17c69ac8ae243cdba35e17f5738b35278478bcc391add0b5ec42db9ec1eeffa63a3ecd2ac0338db57cde9d2eb9ca4bb1df84f1a62245c4e585c4f20f26c98fa1957df34409a99a18bb442ac14f0bd309266a35a
+A = 1fd8a096be30e4435ce8cc604ded337a3d9d2fbc9666d1893c38546c4e155315b536d1bc323c1e7be162bb0fcd58440915b053ca0d0896e99265241f2afd46605a2a7486e1394a07b23f3382cd190e943e596c747b6529b04bdb13
+B = -a3960a51af5ecaaa70146ce55d639005e9b6b9b58592441d5876fa71470ade6d1e2cdde17bb80532551bee0dbbb71a0cb24dc8a129c1f6e28920055d87e9c66be27fc4b425737f36add7d72e39bc83aabee5534637e2e22
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 654d9c55d4a62976670a5ecac3a6165734a65f1edcc1ca81a8c444dbc98c3409ac8c4f6fbb92f122045fef8b7971a276c7dc4eaba21f7be7495394053d4f9bb14b63fc02c8a55ad8fa9bb9aa26aca5c47968ea1b7646ec606f53606d5529ded83639984683b8a020e8ded4b2d9f668ceadeaa8160245b36a819db14e58cf2bf1
+A = -67abdbc70db183b8c25b0664805ada269922556bf15aa80a47d31f215e216673b8d59edfa10a74f3f09d066055c3b9abd5434ce95eba91dd51576adcfbc7e2556df95fd6642a3b7e0486a635ed5699eb7fb285589c887c8659a2b7db
+B = 6ad3e854ea57aafb8980f1e99ab9cda24f183dbbc513e1fc92d4e239077816843f47927bac28e41d3f31c9ef134b72c09dcf14e2e9677a430d43002ae70c577d9958341243030fe58a800a068d6b01fd377e61844f0d434dfd
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 74bb23f7b0cde7924ee52e58bc0680f151e6898cc1bd4a2eaaa05faf218b419a19ebf85b0219f924a26002f9251b83506684af659e5b680e05138432ba227977f38a479ad9d1f3cf68a86ea214645fc4bd1a032f995307e9c9ee432e816fd852655ef20214e24522c17799ef41d1eebc6e097b9792757f7fc43124c609ef9696
+A = -19d3e6fd6de9092cbea55d65154208a0c93ae409c3ee35569cf774b8c8b7b1c9dfdd52e9f408e14ea3153073ed8d92746474e524a903a45a882fe46af92b033f2c41eacdd7e3c1ff661dcc5349ed6bd1aa845eb1762f27593708aa185c7
+B = -3d466d29e8c0008ee6f402551e3d62fe044787bc9f243db9252ea97da9bb75f5be416def97f13cbb008fee77f2eeda672bccce1f36fbcd26e1f1299619535da0a3fa3ffa0c6fee82a494efd7407cc770cf46ed1b8b143f42790a2
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 197eaeb8221b431d5fed3d701a175abc146a9fedf8060e8e611a54f8da2fb27d2fee4539ddce1f3481e6a64435f09a2d5012540d6069900a332461471b22192fb87b63221c7822d3f2fcc35cc38feb6b3e49b5b0fceb52b0ccbdb4e1fd7b0f3eef3d582a6ae194c249ebc52f215b568712b3e50bb8e01c64b114955ebac2da48
+A = 7bd216d0acd4ee392258a7341cd56bfb0968492fe75da0c9d935713a6ac883525a4a520b5b7940b05e3f5e0c40372cb11b7ca193e93f0d3883fe5840e66346aff0f38829322bbc1f0a0e63ce5e528ba5b13596ad7ca19d20b2a7c9bea4214
+B = 1ed4805e53630b886cd733e5281f6d2699b3c79da615f4056120165cc63858ed2ddfcfd0af0c5fc54662aad90f26c55dcf70a30d04ce05bdf61028730b900587716e690dc0c6e02419622ab8c115078b92315e7c7a5ffe38c4a404a2
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 40f69f2d1660eeb6e1840164817621dc95eb930875333bc3f62a644ca5910c1080505de0d54fc9fb6404a61bb2c03b3981e558abf9e86f2047c3928599b529ef3d91c7ccd13c1d69431fb9ea3f02b001427cf519d9fd8182219ad904f47b3785fa05ed24cb0ceafd537311633a2e26c27e61be92eefb28a49d7f583cb6e072c2
+A = 155fb75044fc54a6ba6c46972e2f97531861b8d6afbc358db456bac33a44bb0545deea2fc83023c08b7be473eb68accf5b65b3c5d6af88bc6d8ce722c80d5d1527e475905226b01ab9d7b5a6557250cf8be935339db330df2dff92f2e88e80da
+B = -8c6016966a2cdea4b2d8625aa367e1d079638870f1b61e6b3c3a1e6281ece41018d2ce93684d1f0088d021107fb595390664c11435c6c0a7b93c2c6895217a89c469a37d3250dfa457b928ba6119b5c9ca5f2d47b36e60e4325bcb4383
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 9b9e6e1727326fea099eeb008a36539f3d47e3882b77d6089032b99c6cd36ad79fa75b7c19d1509b3ff022ef781b6a8c16fa6881f9ee2c4e00a4dbc93a49829622f4ce6ba9c55639656102d81167ab8a5e1fcf14d71caa60be732f1fbc71250256520c7c5a4579c3fdafc39356a2bbf2c7ecc526dacc0293c7578424c939ab6e
+A = -54cc11ea9806ef27911ba721f19e2ccb111045711d301863792f0cfac798758f0a29111e3a0f84d294a79721067f50858767abf507cc10ec9ea3eb27a91f06e7f6b7b4be7001b548cb7fb734166bad6739935081bdf6d35d58ef56180d377e5fda
+B = 7263e8b9a6f5387f44c55af64b64160efe97ec8a8159e723ca8977bc17c861e22041ea227c9c9bb467faaacfe352b03cc620eceecabb6db2db108b49c69752bd0cc61a5e998ac2f404ad052a51286ccbcfaa214ea8ec14cd9a2a6db56c3d9
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = a18a7498ac9194f600cea3d66615595c27a3efa7ea196ba12a80b5f608f85fa72afc366d23f5ca98452dd190b8f86031a9dc097f94a217b29fa676a6042a3aed2355cc8e767d464a8adb888491c8cb82dbec8f117f57c4a07b41e7e6f6cbd7dc25418603b1d1d865dd2140a649c9d52019ef39dbb6809d1b28b3c1ae64fc6813
+A = -1b663403c73e4a9003467ed12766f16354f79073ce89b66066857d19f3b42791eb360004d23e02874254bc6db54662717739eced153944c4776f334576746c5c4145b21a23caa2b2a137498554c7b749efcaf3393c5457b2bb87ee2ca3bef5f191107
+B = -21d12aad97a5c6e639a2ea0a82b1292aebd418567718014465a22b9ac5c8c927963a2a4530c41d5a7a6c14805e56a7092c8716e4767b54a393d8552c5d3c366b39fb3b8667c60e6075e9293bc938e407c53afdd1174843b76aed187f56bb4be5
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 1983576ed73d4d87d8b94cd3f70c149c0273e966176b85fbbbb7b3202e2c843bf1f8f4546ad7a4916ea4c731a22bd337b6177fcd2da8bd301f3af9bdcad800449b57986e7cbcbc7eb313d6512b2894c0cbb6cd753a870860a49d6a682c20b5e883b8c4839b3321aede51bfc42bca163a924191feaf05e196d8dcb7fdd9941a60
+A = 576759af0f02406e8dafa330babe9473d9d970bf371ceab30d2f98f4470f669e042e1708e2677d52cb9f99deb9b53f30727d16c389bb63e71e923475314b615762c7612269b5ad7bcb5108068bb5159cb8dbb8d08de2bd4fa4d9db6cf6e3f5997b9b416
+B = 1a4e34794747cf4aa626e964b839ac497b1357090ff63088f9fd4399312df894e41b395d17b8ca1806baec6115b1476912ca9c4309f00a46d5f7a52c8f640075422af06d6d6d796359132f4955072ce90e61b40c992a155b2bc31c262e753aa7d00
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 3448648ff9f7425937b6faa54551ce14dd15566e5d41b2bdb1a8db62037459235a5b9546d289cc2295b0ed584fab2e1a798bc25a0c114238f61ad3381a5b441cb67f92cbf66007c980db3351adb9cfd2cfc769b5b9b0bd1701425ce1ee8d4b9f438ce1207fa850aaa1d3d1f970aef874c2b2499a150d29c2ceb7bac375009b77
+A = 1fb54cec882c274b98913e76342a9b8e631bf1d381fd8a4f7e0eaef475642ab3f5da70ca2e38741bd0182a959e5e985f1e0e7d737beb8c725c9b5ea22f7ec25b6e564809601e8405a5b1362e7792791f55ab64a57c03a99a8518d7f65feb0e21be619a6a95
+B = -8180d172d3afe00e0423245f47591d5f750f20d2cedd8ba6ab6f9aa24f74498a96c9001a0124c4f98dbd402b63e71eaa3a7af8b0d2fa417fb1d45f64e10030232b9155169153496aa202745a432e547002954eedda7cc9c1ca76811bd902b192f1a1d
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = ae0fd585408a99643271eef575285a6261a4c4a92c1956b1ab436d3cacc8d4cffc07044e57b357ffa43bfa9aaea57824319579c5c3e2fe4dd48bc818178beb5fc1ed60afa08828657d00bb88894c975378b1dfb452a5b88fc3c1d81099644a998a47a497c8a2b12c444fd2a088f47576b7f4fa40f34a208fbc3348ce33e59150
+A = -7dc7dfb753c0bc3ab4d07d5aa78664a7f57d64be4d4780ea81e3efc967fbf1bd1390248bbe259da32108ad96bd8b39f2c9f118bfdc96bd06147f812af831288bb687e4e1742dcd1dbf2b7adc41afa28d07dfb8df8bb2da5359e66330f5c65964096a96b31dd8
+B = 756f3e407a3ae698f103fa37759e90554f38378a9b8eb38581e0970ec8f9c00f8392612c61aca5fd37d1063b78c19e3109f35c0684ce523c634190b3164ef06959cc42e2b77e1bb2fd50eb59c3dccdb6090beb809ecb0ca30457a5c5948328eb218e219d
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = a2aa4550e855623a8ed488bb63db8fa4ac374c1ae953781aac590f78a364fc33380ca2806445fca5bb9ca2fc7ec4db5819dcd5769e3b746286c49a7c80149e7fe276d095929e2cac6ae57e8102f7d4c96261ca44cb6f1601f429528495b6c3169e15f9babc5be696074d45559d5abdac42393094c450d6a4a45bbf60ed7847da
+A = -16d0aea9c752b2e6e4e13f7ab1f0a2c1776874967b0dfeeef7e00f8d9edd1e11d2aa702be45fffc284c47811c51dcee184a134b8f6d1874026eb51e2ec80c94837af4602cac3efde556ebfff578fcc56c00de99a43638ab68387ec087ee269ca64233eb5b1762ae
+B = -3c6b60b0ce4b13a5d6d9ccd67c76ec6b71b94ea7205e408eea099c7ced2f3a462954741d353d0af850b10ffede8ce0bf80b6893288413674504829793d7ae0cba53b163e3f26cd99beb0a9ad540f6d2cd5097beac604b1694a9a2f4c48b28338f9d6a63e75b
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 8a1a8fcb68c53846b3edae33ec070ef5cdcc1346ab3a98a116344e6d2810e2e3f60f0fe435fe7ff257c7ef4c122b3c34c776f4912a9621b6949308e2cfe2e0827536c7464371ce804bd7cac1d76c5bf8b4a6fd4ed56b65434c3fcf0ac7be543fe2d09ac01c564d7b9b463740dcdfa9068d4d8e33f29297ab452e6ec55c263de
+A = 7c4878334ccd9e20cb11a643b206626ea5d0b20973f18535cd8f0fc2f0325a67d3558e4cc9cceed0d88c6d2215c220b8d0ce230fd701502b02081e3f6548e58e02bc2e79e4991f8ef188a84b0a367758b4e534b72cd87de7f82a26de14fafd162a50b359574812cda
+B = 117d8b1d2a3e2049e6edbb9494c68a97145ac3e658aeaa05e8ecec4b090d5f467cde34e05fa7f5fbfa32f1d9dad70955f22130c358468eb371555fdf57a40e1df398c166a22a9df2e1f4e18590b00856b4f880f6629f1a4296056dc66a29b6f0f25490c6a8209b
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 2cd3de06953acb87b773b8bb28172b24adb283d6adada676f5f4548990827635c51506c85670767828dc5b4b91b45a7ab89a700d70bdba4e0355da32b52c173305767721d18dd2cb6c55f890611e7abc854277a453c7500efc4cd4fb8e6c9bb7a73fe5c77045e715fd35d415b3496f7463ec902cbdc18f9f6f67c33fd78c3210
+A = 1a20ad042f46330df937b879c72ef00dcf39fb85b59186b8e7a9d40723288677ff6ab2b9bce95f34f2de37887c8a9cdcaf231254bd00c7e25b6042695d7dfc05a11765120d1dbce29dc74f35aa1492ba0c5ee65114d9a246b57dcc2eb2ea4a310be98383fb934121db20
+B = -f8ec67323cff9d53499ceb3afd44b28f0538c39dae8c965ea27d645b430c2f8a4965eadc8ed864f2549eb636ec558419be71f986f4c5783d0dd5253738b876d9034735bd13b18fc670438387f84848308d9357ec2aa4f6a453bdd36ff08d54a6800bb41df416b17d
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 1aebe2bc35eb2e449bda63513b1bfb55988cc8e6ec8b3c8fed5ce4dcf53b95f1b438c41e3b2348412b35e1f734edba30273935b03d16efaede429960442a01849c352349e23b4af88de4d01e9ddb53ae900418d49a84b7fadd2669261a574557c4fbd782f8e8f400895f6a6c9679b72983ce01bcfdb641f5067c94694e9eb80
+A = -5f97994c39265b5389526e3847876a10aa3699e3c3762a127d1a9f892180cce68ca6139a6f71b235da26c287bd3e1aaa1436746d983c23c3105c33ed2e06baa1e880f1744d81a80b98ee1f16220940d721a92118a9b949d4da7d1477db8f5b357b3ceb7df34eb5f62078cf
+B = 4bb4f8f4f4c8e63238e8774ed61a7eeafb3fe9a6e19cffa648defe82f4846e3378c892d223957564fcce79596151658a726031a6921cdca0adf0f5325d858c048a6b94312ebfd19b803eefcb93bbfaaddef120ec3b8c366b6d978524d5c74218da77e4c3b5ebbc66cf8
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 5d64678a32c163874d1c81824d628a1051bce3b55c37055acc47a8630d3fee648df5d319e50b4c56f465bbf696433409b89c07e442425d3018a059ec757d77b3a40d516ca3148010036b003721ec9c999665915a3c442d95ec3c01c232feb201be08c88fa3c6b0769e3da30f1d73b66f98e31f4306bf4e23de78e74743b224ab
+A = -178d81e419f0473c426e24428caf25d61b648bbf963f7fb753ae15e5ea3706b53b00bfc8fe917ac9fd6c7096518584566ff71e6d35197f9aa25107a235678cf9ff8ae1501c1d5a15d2a27d39d066e169745e1e8c808209bcede0d732423d0c9cfbea322ba3201ebefc5315c0d
+B = -27ed464895b65d9518923fde5caaac0c72aad0d1b38fcb7827d6ad4e0c8dc09e119b8b98183f0ef8d5d1133f3f108e951caee035bed0d48bbeee6d1ddbff5864bc192b84eb8a500cefd223972ed51c7f720d1736646825f95f2f10ce6ad47a267bdd8c80f65d644df158d7
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 52dfb6bcbbc5cff46942d76ba45301cbff76e9b894703a6a7fd1af29d615336372d147c3932589affe5c6533f28d3e6a57ce2d3cd7448bbd81e09a13266ea31630cf044f654b87ec3fa3294eb65873964110fd42d86e78d128bead5f117cac98145051552cc3a86c193d738b973f866d068a8994a49df3fc7c7314fbd9805e80
+A = 797c67ebdc083f3c8b3ddf9847b7f3c2a39e35ce2119f746ec87fd5d86671d8fcf2b4f6d440c43e93f45019032e629879799eb58adea729d43d2e40ede6485143bd35979609a12faae7e4393879c40c0511c886c66a24454e4f9912bea944eaa417c9942f09ddfb227feb14e4b4
+B = 1a599d1cd0ab3614f50b71b93c999942bd3d4cbfe7900122d5083151c71d9e0c299bd927095c5c3291418424a7c12947389bd4e0a3c2fdf67b3f512094ec0ce5b52695e527de2b3804dca2edaeb1ea4b487911053272ea926cf2fb3386dc4b1dc268b808bbcf4eaedd21168ca
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 99bb9082e4537426c61f3b813f8c97675c44ba9ca418960ca6e2464cf61ad4eabb01ba00798463567ed3d829d3f14201c740f19fca623b1e9b57b534a65df0f070a2130489afae89b91003cee432fab11426c4d13b7721e6f9db1bbaf0adc0064b33e4b9f4b795511a0744b52f93e3db7bc9c0a991e4e122c463ff344fe14cba
+A = 187a8144a0045a92dcad94f0bae7285309ec8fac7dc864b08914e5a4dc3b1a6bb9212161a18c22682ace16a4bf3c03dbaef088b09844902a3255fd6adc0b7c6397dda86d6ab67204d8061c36ca20fd4bb348202037b249f6c110c31580148db46dc5b1bfffa38a683a27054c35326b
+B = -e93ff16817b725016279a32dac247961ae9bb00af890fb49c4fd8cf5e815cf98b58cfa1e3735095e6034c9a2f2b5d8030ab30e2271abb45b347d755cd9ab5ab5ce37950380cb306bbec42b6b8056793a0955bcaeb23e2d6a9548684030566eca2d34c458f224c8e337cb8e3c252
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 631f53d02c031f592b3dfaeed106160488c08e0672083ff195b22a2c0b006f11165a245acad6f35dfb15a871a9a2b45c544111f71f86c920b42fdb6551e56c55199e6173c00e27c9f47256349a80236bcfd3acd1730f823031ff9ef594725cb9429ea183a7fb2e03124ebdd98d435313e43819d995c4fe81fdd4ba718aeade94
+A = -72e20f1aa2b5f2c4218fb9e11ced3f45a218f4c83a2017d97d0cfbbf227c9082cd43f939c8909e52c8795cfaa75d80392d3649dd85ddc35bf1cc54ba389bed9e9dcf867da1c05eda080274beb6b868b54fc85e12ae127dcbfffeb043f9d59333d0ab3374c24971e1bc7269450b418c8b
+B = 61cb021a3a957703d14061c21d3b0fc19598e19a17df9d6f2418c76d4d37b3f62bd4037aeeb1eda37f83df44c440f5e49924cc72ec5b153856c6b621350ec89d98859d9d1ec7ac4f0c418c6599674322e7d618c5ca588d5a873d5af356d4771c6cd375f5dbbbc69f50b982b8c4d1ec
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 4654a62d9491f28599a976288cd2068d8e3228da12f645413a92f482efc66d1737495cd4a4c733f147eb5414a2ef6266a116ce264491a3463c9df1b030d83b315f76f3bef8cbccb5c538478a65092547b91e991e6be91ce4549c3a6e34aa7b466e63eb3b88054f6714083695c616a078ed54e1ae46e00f3593af845fcd0ff51a
+A = -1a342c154aad619e567fd32e7053aef8d98335a4fa0e35bf06acd7998c43d821de1076dc1fb67dfa1156d7ff30203ec736384a9aa7f5f08cfb302eb3a2a7179b2664094c2cc0df73fa05bf2af24a62b8e394fc76014dd83b434df26f8a67a624884a0b9b4f08f33e9828ae64f5d0c8cdc2b
+B = -2c57e15889c3dc9c94361c17585d506933a72fa954ce44dda9f5e33408552ebf49cae87bd0be35197f887fc6c7deca1452a4345eb67d19bd2e7d3dcf651667a8900388e4d5ec71e9433e3b01d2b3d91bb94d0fc3c51c70793f978e4b5ef93a9c6356c0b2f7accb9e4eb457a2174b50dc6
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 6124d9ce4de2880ae3811836235d6d89a1a4b710f1d5a517153ed7729dfb5b56b0ac10a4bbc811db9b26465f03cda355701f9f28c5257fe288743cc0789cc54a8661f46e36eec357580b00a84f1d4c8e3d689bbc18242f1cac30a87cb7a47ea06f80d7c5633cde4c8cd8a1a7e27acdc3a2aacd608cce9e2efe7864d41a56ceb8
+A = 7b48a9663d914e0225d7275e965d866ee6649d7267474d5336d28d54027ffe8572f4aa26230dc7abe9957d211e6c2c8f3185cae962b878cfdfaaf6cfe32058c299247f372ae170a1f7cf71380787f6e90995da9ca5a4be8ab1ddfa8e6e5dc65b6f168b9b8e29e0257e0eec853a6e1911b1afa
+B = 1fc4dc77f4a18d4406a4ba536e500aff68d133c6e7725717ae6537b527c6f40f93202a2292522fe7d04e0ef804d1a7013b04cd3d88462fba31534770b56d2e5672e8a6ec7a723186024c40b4717defd1433b9967bd692ef81d5d4e39ba10a3223d250ab6e71d5d253dd0a732ed386ad57e54
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 6443de73e1c826c90aa36fd7ec5d0c3324c42058b1c35d3adeda1685470d363732d23cceb08c3f973034c24fe65506bd33dc45d7d617a53048dcc103d3d1b4fd0534586c2fb7489ff5ffb98303bb068fc14b1bb6bb43f763dca2c891095e613bb7b6920163aa6cbce8cd93d9d39f4512b6e0b28d361ae11cf76037eab4cbc819
+A = 13f739846ed2c3aa0a1923168cbb46f4f0a2f3942ba57bfa5c426cb4d4b3d80d9530405a31bda329a1814c560d54defa3e03fc4f808606a598607783d539dbb1338d5bc0c2e272a7ff6ee6f93e1665d6f5a0ade30308fa047db086646c763106cb875e014e2c18ff8837e4d4d86861b85a5b7197
+B = -ba019333046f76325fa9f258006a7c10d27e89f6d482b95c79296c07a65b8e3bff4a9c9fa7e5d0038da129390ac851f8c0651dcf655a3d4164a731cd20a701895c12a906c732906038a8e459aaeb293fda21346964a6d53fa3e370ebf43c7ec8f66229405095c6a509d0fa15dcf45de8d0e901
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = d3a6fdf4a26993edd175de9a0f012e1eb15a5a1c4dd2741dfc6d0f9177cd5645508b8ab09c7fb34066ba893c38144c7f2ecadfc2b0d15728b407e5db4fcbbaf1871580426400433f14dceac43d28f03376e791b7ad01a112981f29ff4b66102305f0ecc4fd134c2cdc79a5e9d9f085bfcb7e6c187980e68b6c7639c12e8d200
+A = -464cb16fdd395e32fdc613c63ab4768f8cf72a5b74a0a5b0cc581ee4aad1972cd97db7966d3124e30c9a1c80d85c46da2d36eecd7c3bba5866f9eab4d0fa55b2d440a311654466432c681372a80a7896c9163c12314ac51f652aad68fd9012dc63fae6c7673c5da8faafcfa1b4ed5550f2baede5cc
+B = 40389ba4d2f5fc152308c9e8a8c36258c770fb2d03e6189b96c4f8dee97ccbe426cc14595c8482e9e22486b61fc570f0e7aeddad2f4e3a480d4b75d14294a3b912928da5692043bd98ab88ece87a9bbd973ec82f990c0ae6091245318c2810187d69c38fa80e835300ed06c0723fe475f3fb22de6
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 8a0f9eff3a210912828fd7b5f2d72479cc9ccdcfd3e8d21739e301de02dd5c257c7ce4bee2def06c9d0c90d5a86bc45fa9f31e456d353775916b3d5684759e4500f99ca1f91f6767a5e2f4b735ae4b756d56c358a06447fa2c2ccf0ce667be4ed143e9e1dc627a561d92ae53a62477270a7944482cbf671138bd2a85fce92b08
+A = -1da555639228fc6ead68049d836d60a4927ee77472fa0ffd3c787d55b6067012560f5b1c2ef8bbf6119345dc6419444c675c1c9cd50602a93ba3718a5b3e1a30bc108d796998b24474cdad19bc2960b295fee97e03f2ca7589a3daf35bd28eb37a67b5d2cb35a30998d5f8622bd7e6b7d3fddd1ae9670
+B = -291fea1ae6dd1c66c62ae3a3d22904f4b4adb2a48cb795d50074095345d661a033f67b20c5d7231236dab871892deaa9458c235c342bc81457cca3f014a75f5124ff4da005dcc1108e75527528e5cc9c051a97fc6cd202bb9166f9e72e366bdd77c965a70592e5684fcaaf2e03421a2025ca190fe158
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 50f4d25875150bab63e4162265a632109d6b4743f9d6b55306858034732a4895ffb3720286acceff287c38320ee9945dcd0a1bbe5ae1456b7f36337cb7d22b679a6821a450765471257d52b6ab7d59a763e75e9e64581a93aa54761f6a760866d6baf186cdf4ad2b1a6af26a3e76cdc261d1f07b0a7122c8ffdef595812e7208
+A = 78a1609a7f08c93c9bf9090ca7c93459aef815719b5dde5f217567a9f68ceca05594f6ab17a4666ce1c0c4434e0f4f38ca1f33e501d6958a10da47211cc011da219d4373d2bec4b7c6477b1ab3b00b6c45279212db39bcc11d1e7ba49916c4271adca7eea531adad509ae119348f374ef1203c5af8bc019
+B = 152b46095d3f8db5e6e1a9e3f35c085da00e52764b261c3aa775ecfcd38572d2e86bab2f4bf29c2de4fd2fb6f35f66e8685714634e1be980773526bdbf9c43b1335c5d59f4dffe1a1fe2495ff9b7a3fae3e53e7c3208968e1ad1dd1dc8cf2e2415cc76dfe5df9e2e1eb63f7c7687d539706502d56247728
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 5a3ad8d6f1b0763b77f5d40169ff0013de638b459e401f50f4cfb505565c8a4465e28ca1bf988071701dbf52ac456e01e170788ebd2b7cccb50dbfe1a65a89a8aee18b3c11986c9d6e6571f964f376f322e10a1ddd9310bbb40f14b0680385c40975aba43153970237c535c6b0e2cbf6bec918a8fa26cb2f69e98d77215c23a6
+A = 1d5c14b0b51cf31e9d97b7c49cd26097d40454978663f8a74095fcbf9c63e533708befb1a467f94cf599a41220ce13493a273fc30c49275412c5205db712d5e1832b39e65c150c3a4b251e2aab853e4ecb4f00ee5ce6982ef9215775a33565bde3ddbd932665aae506941d3ee31b3f9e4ffc0651f1fb4a5c6d
+B = -93cae5dd84584a2a3d88028d6d4cec4146cc5e350b4d92c52ba2393ab69fc1dba96e244f98e2f93f31230904169641aff30dfbdd3dc5fb1f3489d63aae1efd29335345a79ded546e42f2ee4a70ed932699fad17a771ba65fe6e689664bdd1135219aaa905c962d39531eba3e82c3425c24041e17858cbbcf2
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 61211c706730a1b98c628b3c8cb070a42e2ccf9fc6302bb1c2960fb165087f210e9d93416ad9fa21634a05dd0723cc23b8d2a846ab7c3bc402999138433725e737102094db5792249b4b5b1514a416b80c804ecfb04653c5ab18b0a34d8777f6c2955ac66fef62c9ec2819f0e3c075920f951f86b32e02bc43239d9218580067
+A = -46c8c68f492d8f7ac7834f89bc76098146432c59b3301d4eb70d9861a6e24c7c9073f910108c7b35538a79de10640291b54e5755359baf47482b97af56475211573576e9412ee017dcf961a090a6ffb5cd995992ab68e3fe60b6186f7595bd9b8acf8695c4f7359cb2ac709f032fb993d16a74822b4935536453
+B = 46953f424d988fd20700ea08880e7e09ac22d60cfc294bd4aefe637408a3cacfcd0ea6822a679b68b665d6bebed3506d25edc83cc7154b83e22953f9d91157cebd219cd5177fede28c63a15710d0f92bd9e542a7586855bbe57a94c520408fc920b3f8d65b194af2b2a580c90db1cdb27ec26ba929de4573c6eb
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 50a063fff02f2cdc68edccc23976f4b3db99641073c85709626292b9475b9a988fb8509a6223f0a517dbae0cf7cd39dcf1e8ae75196d9f5008c661d8b5153cbdb9520c71068e4719820bffda4c393032edabacf99339e0cbafddb6042ef887b8c498e87e16b62417934015172e63e7457242b864a47aa10e203f47320f03c0e5
+A = -1740e8be7b4775725516d37ba643fc64203f3a61e6b0164d112af56666ad97afb0059c2c4981fa81d72264f8669db4e50e11865907655b1f669c88f5935cacf1b12c1db63cc84507af12cf0210f990994055d04d93f148f213e3d4fdcfe9dc42117c059897697914e3e3fa8fdbf0eebbbb9c3b9fdaa7efa0c9d5c93
+B = -226308f8fbb35b5f9d129c0f6a2bd3e5c272a408bf32020905acc6d02d7e506191e76a3a2ac47cf7a63e6306b256f489ca5cdf76c7c3eede175ee4a7acedf922955e92599647b69d463cc14f2b178b88cd471b8a1c1512caa66b6d5fd8840b98b8d070e6593136e98cce9643e006b714388768920a79944be36624f
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 747cba0d1cde75dfcc0b2af9072c5027986b3e3917845870c73c452858ba21d6d1615eb71ae1b5a03ca44e22845d5432b368541b52a4bb02498668e8b99dfa2eb90ec1948d90564e6ebc388ee9816e329e1d8da0d3e2b12d901d47e22e8a1fabc37408be0f89e7a4ab0f30a03f7e2ed817006809e69c21104d0efe548165f64c
+A = 5fa76e37aaf0eb3d34d4f4c590e02b6c63fc62b1d4c9e172cb0dd82409df87ecb43a1680a2764f62d13a5e919db2db08feaf98d5cb92a859dd42bca1047ff57b8fe5974fb3ac11ba2c0d8e2203750f30650db4b2cbd31d07fe18c4df84a0dfdb30f9e528932c097e89d8f8be6ff029dd970a7d2c2551529455b9131e7
+B = 111199f91b3749f8cecfe90e9b9b6951472cb701beb39d63068c064cbb2a1e1d30736026f781836a52ad0d828be6c20303c6c0bd03ad664dbf6044a5bfb67fc20a049fd37c62ab0795d836487b883768ef7c8f427eb98e5ab6621fece77b4955822f8efd190c417ced398c221215b50e9532a869eceeb605fa1c936554
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 646cdb3ed472a7b4599f02329054846a8da173000eee7533240ade4dba82ee3d7a6a92baa3783c19dbd3f76fce6b5bdd83f1f229b1c71a6faa18602e368f1b0b9f8c62bd8c854844af85c2081924c9a153e27853b2a48147950fb614028e090e2198e613631c95e565c2b9b64a43237fd4052089f9d1dd2c00525dd35fa946ca
+A = 1c8438247c0ca376f508ccef7933724df512f9e0877596f7f4ea73dcd824809bbc472749833b537eec01ab23656e9758da22ab8a4aaca1aab3fe8d2cffa6672ca0c44ac029c2ca6c3e71780c28c31b5f154c8dee782f6ba009a69d83b1a3a03a2d6275bb8bc3932a1170470fb7e405ae081f4770b535edf49f73a12ba589
+B = -e365c8edbca8dcc4cc11986a5a901e4ed0adbe89b0ab70a53aaf5821862432a1320cf1850b515177b630e12692cb025e3aa43e9acee0d8ad5e48bb15e9a3f34cbfd39d285127b52dde58751f572ae68ad98692899ab12d35e33652c4426ec60c5029e51f7e32ec3d2031032aa7b6b2b63f84fb0023c81d031773f3652cd6
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 7a3e22f4a3f7ae7512ed73a07abb5ce291bc90bad507a5ccc0c17185804b9d231b0ae2e72bf270dbd60170f34b240f716529a449abea0b3d98ea2890a4ce3d9e2214819aefd070e00201e9f271de925c4ba59651e55174c97a13a30197e46997c6c2b152548111aa98df120a617c54b71f8eb8b0c8b4dbd5251f5509fdb8a1a8
+A = -78a99d206b4f095847e9a21de273aa6c47034c9afd4c081a8e93c2d75f4ae5b090921ff5108c863785c413e2f7b4a361506fb66b7561b8b1c5cd537e90274bddaa4e91ce74ad81c6dfbfe1a34a631dbe455d74ed9d041a9183da3bc469bdb214d2ffe893f89c3ae30f8ab99c3aac4d2fe864b891fbf4f537745fddcc60504e
+B = 5c41274e9590c1ea44c113ce505931758f2cef80ba3b10440941ec9aa2ac984b29868bece2922eaa225555dde84a8334f1caede99091165151a39538e5b7390e81df757f521236314239c213e9b874e396a022f04629c09bfaf929a0e9fe0b0c7386b0541446f6a2570491067f64e662d8611c4fd6d1c78a9f3ae69f34d14fc
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 7fd27b6549494c9bc860146a3e8ceee785ca03faa94b0ce0a964844e7871e813414cf3f111da49fed1ede5e71e5539f34173d41f9a17ed129016bb9b04c86487f5def9fe350fd4dffc67b6e181e3cb26378ea15ff9b9ebdf1fc86c072c82ecd8bcdc241301daf1b774af5f90f37e45e6126c5da7dd3753a1e5b366038af6ae31
+A = -1930548d105661dc25a5ee303b61b559c4bc1f2e28b2c40cf3e25f98dfe01a7dcca0f3dead6463b55a5b2e0440a651cc9e08e125535e081c742bb3b2f8955ae897909cfca683a4822896d8a4a7073c29a80571445c6a0d53d2efe4a30a79d2fb5d08c0f95b735a1cab17ba40d71b054c9270ba6bc870e58591fb1bf9dc9b7ee8f
+B = -3e2a4c1509494f94406e3843c9446edaf0a6060144637234c6d9ce84d70fac54ed163d77d210bf557bbea0404922c8aebec67a0475a3c7b74bfa2f226403ce987c705c712bb8eb0934c2b390a173c3836378fe71a6939e48d187b27cc7236ac115309fbeabd9ffd0396fb7fcd6d46a1dc683606c757ddc3212f5d2ff3f2e450fc7
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 2078bb5c82a394c30a287aedcfdc5271eb3246be05954181ae4f86ad2880ce674640ecd55c2ee3f4e89e2762139586516a28558481303e3071cc9ccb9a538f887553bf5726f3849fc41ab027fb1c680ce7dee3982587ec71b3760e5da6956d6894ad8c4526d8de953c0e681ecd44883a21f0abef1544fe601743efd3e5eadb8e
+A = 40b4ba1e977825b7accb941fe0c0a49936a8a47429dfff53502fc0680d705b9fa0efe003eea3ff0b649998fdbae8d0831bea7f34159aa4c7add6bc7cd56fea97d25fb9a6a10f4572c26d792b76c18ada19b0ba06b6142c420dbb40d66be669b7c51d8cd2a5022fe1a8aef7b60965c0176eee69c32ca5023782c5410adc1b15dbdc7
+B = 1bb2f18d7c8d306bf80ae1901115c8dc3d286baf537b812ce06d6872b61e5bd44f3c53d7f31ca8461b3628b255f85338cc325856fda5a6248b7c476532c1bcdf9713dff9932a50e52a9441aff96092d3fb0fd76046a8d88288d0cd55741083a1bdb20fc6e9c20e82490273354bd826bfe001322dde9a15763f2c0e6ffd2cf60019aea
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = ef21dcee9eadceaeab13287d6e3c9741811f6ea9d5bd111799ae05260b1de2ffbc192818fa45dd7befc3baf6840e3b9d24cecbcb2cb1c3d653c4aec6531b941d926fb6692f548cf81526acd0b6b0289d70dd11ba50ca8de6e174f502eddf47e57440142c7f74f594a9abcb48ce1873df057b132ccce8b364de3edf411089d28
+A = 19d0109e0c47ad45f57b8bb8519265a4390534d2ea07f969d84ad33556518b6234d40d1631be3c3cce6d59b7be14750aed114008458f50a6a84ff75b4ee7e4b826ddcb2d2293842ed29e4e484260a92199c5c66367c402bdff0f1a8057127c6ffe452498bb352802e0005e6cb084663bcfa82783a3d72f3a2a341b8075983892e86756
+B = -81fce71491eda139ed996f6a289dde8635a3a257ad6756e844c768e66746011fd797658184fb44b0e3f3c5600c56238ac7687b5be42529d5c9b97c3ce10f3219e1e451bb2dfbbb44cae0828ef894eff3b52b8dba4c115c3b471984441045f2c2db426cf5f86949d5bb7662cd40bb3b3172a19ca3fb6858315d688f13c17550e700cd5dc
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 8a5f90344071790373044193cc4fd92116248aacf05ce639b6aac4461ec3ccb0805ff9876ef44fa71088c295db14fc820f7ae2c0aeeffca055f8f7238c6c90db706d02f2cc43b4960abe3ca4b6dec8bba55327b958e75c60c5d1f43fcf9136f12481c267481a725eecc403a16aa6221346df680560ff316a63ec8b51dc37aad6
+A = -7a54e7ca04b9a22e2b986e72e634317ffa20f6f4ee90353d559db3f3c1bc6b3b92ac6b364f6c5929090373962b49b59cb5d87554387761164982955470cb45dd00c4a8982dbaae3a1ffe700e8903a4a8e4a21eff9d00fa496d475e0e1a205be267499dacecd31551f8a9d437f37dacfdf5a2754f0876a3e02509b78674e7ea2169c43f29
+B = 652001f073d63ddd526abc957bbb48ca74154c8f9698b988178b3313dcde9acbb19ea11a935184fcbcc31e0117d8d2ec695ac56b5a71614a12cf90f21c8882187428755b6a5f11c314ac8b952ced0f65db0987f0f87e20b82a811599f4160e65c7418af7f33604e7b8952b70581e3e02dafa025cecda970d04383ee552abc620dfb9c5df9a
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 67f903e0e5623258826b681506f3e94cc0b086e262bafaa1395294aefc9f6b6323410a44427010d5e8d8288993973ad9939199b85cf02ae0a09dfb69801536a3fa6af5ac373add7efd25ba5fee6d8f040e97056f9f6fbb45795c0bac94c51ffeaf496710b00bc9ddd8e445261d976168771060c9bd9d83838a84ee9428f59d6f
+A = -19c695ee3a4ada840a7e3626e61047c5081867b15843ee9a6506ce45540d23ad25ff23b72f988bf26ab8b98363d9a2997773604f43fa732f59a4b16ddf3a45acdbc7976a1fce01b3dd55559c20acfbb7501730f794bc45fc09b1f035d60413bbcf32a83fd3c41599049a674f165ac5283c42aef213d777ae47eea960f7727f5758146efe5bf
+B = -210697d47beb73f45207340a183a729a1e78d84bdde1c7d8f80bc84559c4aa4572ab0e6927ea175acc7a268d05616201cb235e610d1012500c8ba9351a37bd68b4ec42227bea55cef5ba7d12ffb180873ab9d33d09e6e969df99fca728dc12dda6903169acbad38388fa9b001edb09056a2ee2aecfab0468822bca14a4bcdd3a4122290ec5ce1
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 5fbaff0ffcfb2330283fe59611ef51cf045bc2690e31f2ad3265046fedaa990b5d5060b3c38f17bbe8b2696e527fd77ead8650d329c2e0c1f3b2f5bec4dd85641022f3e0ae6f66ce98cde1a785bb52eca796ae45c33142e8264621ab447cafe988de926544e1a7036710128c42fe8b574f7ad69d830894237d95a55d1bc7f5ec
+A = 482db04e35f9fc1d87b42bc5efe25a049ed924f816e1b0f9c8ebe34bc771e67e26d6057563fd5d5320681e1207c0b0f4b7df547cd6d5be6a2e0f2bfb088f990b0303d0ef263cf45681e0e9a1147c29f2ca5251faa633ca53f6e0b109ba69bbe20c58a76a22789243d1acf128dcc936602e832a20a2bfbfedf963bc1027650f483814d7f5e6905
+B = 105aaf563d4c1d436c6a4552770a527776f40bbb844b7701313c5ada95180160e7cd4b7175ddb943e5a22c910585dfc184b52935f06b12c84b6431395f28af2eb9ccfa66b2ee8f40fd44d753c6a83d67a6f3fe3658fecc7fb2f4a8f357c5d244422e48a33d0e2971059695a59d0d39b235d5194e919facbae7623ffc92d771532b6b0cf771912c24
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = a9d204c1a497f350fa1300cbaf682c947eaeba8b3aa0450c1db9120852a2edd2a0249dedef3b3746298ee42834d869e9f765ce987a2aa4712a1f35ed10d0f7ba9cdef938b073c3a526e5bf45f3510c94ff1fb84bc77b08e2aa50f5cc75e2f4da37a8a711f8aed5e92f7e486877229cb4ff2a4d0755029972323c0b51a14fd1e5
+A = 13fd3d7cc9d6d6821d2f2b1c40c8e070bfa85b994ee8f3e0baab544dc71328a1a57b7ee57392ab6d24bd85f9ea0f2a312148fc4f4b22c589e9a265d97e73c7a5b420bee180409ec179c438a67abf37eba61ac76197f3c9ea5edf2d4b8aab91e9bb1a432ef1f214c043664a51ceed1f2854880dd458ca253f09d6f6acafafec310774a672d07147b1
+B = -8c90ecd56d6c7cb129d1c9c26e94cf919c5747450542cab52281d11d8fbfcf9ea797b29588340d146cc40e77dce007b68c0c24356d4b75513b75eccbef6e22a5b88417cb6c516578d17d871e7d0957c09795f9a0f19b811db75d61c27e1827fa2773846857fec020f98444e307d3e52af501114b962ea705cb0cdf815109054abd00810dcc270d7bd3
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 57aef35a3f5388c810f576dbc30d4e4e5a39248b319b7766311157179d8bc1d7ef019cdd8c2c0175a8424abe7b33565afc0128724fa38f0900140b6f96bda2e78d7c803124cec8c2f2d6649afde4030c76cd33394fb386342d1ce97a4ecd180872134fd4e22667a687915bb4fda21f7e0bc9100ed8cd3a6668ed3a235d7b15a8
+A = -673bb11795d9d20a1e4ce8ae71d041705990463964505befce5949f895fa31c92d53f91fbc110df4e789b3f3f01f184c55df92927b8b680cc92864466ce5590ed2e98901cfb78b32ea79bf68b57a14cddb53209e08a7f430fee23f4a1475fd2640a515f8b609e98c760b4301747ecb61f1e6209b07455f1c8a7bb4e20c269e17937f39c6a2fb7b2990
+B = 46beea6005cf96a2acb16f37e357bc8975f4dad502fc3aefb4666344dde456c0ee7ea43ec493b6aecbc7aecc7d4cd107aa09e874ff564f5d59d7e12047b048c1da1faea36a7e2d02d0567bc4db41b54a75110626d13597db698fffd577a5810286ea8bf50625296ee8070419345fa269a354ca2eb47fa3108387f6a4b2c0ea3e779908a14469106eefc14
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 5cdb7c451b2950c9d87638857407276959142958b06241b2010a9f93625f9106f065798f79ce5c534b9e5a31fbcbfc63cd200fc1cf10217096aa0194acb9043ccf7ced30d9f0bf66e0dfe27ee2ecc40bcd8de66fe2ed6f8cb0d874ff7b5fe71951412731fe4e19c34bee64c9312577b9e7b2ac08ed15aea753a6cd3e286192ec
+A = -1eee9d5d3854db52f9b43698e05d6a0f1d1f8df5f32884a775b25110309c46ec5c7e112eb64b2d7f948868bb9670068779b0a78bfc7e17860ee02692ec6790222b4384b9bd7db5abf29c46261c10d95f503b821a4694c45553e0dbaaa977892b916cb8990ac9ec29ab5c3d63ed77138fa1e95f395b3b233d039ab5daecb0296203166e9386d1071c61cb1
+B = -34587c2bf3473a2c5d7f3399d5ba2bb09be8105a0b9f3d8737d67b03d8b91b1c869f4e223d6246abd36d99d84052ae5894e58288a614a0da8d69f1aa57428632c2b059ba99315ea2f68ee210e65a741e94125ee4a723a7828bcc410aa2dae06ea8ed6cd23f66ccca7e85d2e071055787f230ee405e50d1519377cfe0cab4e5f97b6cb893b01134813a7c2c6c
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 95d0b209654de56bd7d6f74afaabed2cbb3247f449d80511d2d3c689f84c9b79587d78abdf0eb37f1b89f1f8dc8a83f7f9fac2c8cda1fd3fd64e16f5597b7f0a1df6da6db9e828ce7be0e876012bd52f5a74ca73ff8ca4611dd9f342bf77b485305ac28a1f8ac7538169f2bf3e4ff4dc5fdb9dedb97fa743fd8ac8791b8e288a
+A = 7821d4b65d529c30b8747e184e450cefb11b5ac5dc77905e6fcd3df64336661c82ea68d588ba616d23df485ff0658fb3376d5276027a40b392f47219edc5ecbf510cf0c5b431b02c65e5f432092f941d32ac5f71ce3496e403c7637f63a23b91e3326d01d2d32e99e0ab265108dc5e7919d3983839b3c7541848dbcd420a594e850e587f1846951852ed76d
+B = 1adf5c428f2a95c27a943637758d5dcd7ca36592fcb9d52ac0b7d27adddad5804e3edef257aa51c716801ad0c731e13c5dd000f11b5ff1b69c198f236695c1b2f99c0afffb5d084f80fdc534de3b0df4597404b50c7e784c3c55dfc9753c414d145eb0ca4d07e2f65b63f3eef8d391250a5500ef64d9bf963d7250d6906694e7670f92e3d5a7930f0f85964a21a
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 46914b197b84fa99addeaf55dd803182083a7ae34d6d4d3a55d6272af40a600563cc8d9f6b48110d0521b8b99751235bd5a340b1743497ef1cc459dccf5d6da970c4c3103c978ad2d513298f1fb3e68b24a9c7b0795f47d8f7f6ca9caaab9a9d80f15982599d764f8738217f9158517806fded5f3552fef8b7dcd2e725ee04d5
+A = 1c9f5f2a0d72806dcca92dac1450a50cba05b5dd571c2b3b988d33528d90ecc83444e3ea8df80802c30fbd5a6ec2ad9969be73aba6dd27e0dd2c842b95371d7547768916c0cb036964d041284cd323c8073095b2a8cb8797add5cd80f03595de9d18af8df7dee0d250ea7048faa47ae0131ba3f350d82864dc95e5829b88eeaf2681433dd4d58b2c6f70426af3
+B = -aa1e1b3cfd5ca0facc75e46d872584d55144620f849ab05931210b4e1526f12679bbd9cf00efdbd8863970e2abe8fc9fa7bbd21afa9e364e3c9e32f51fe66844fea4bab7f3b1bd278fd803f6bdbd0d296321e67751a0b894da338ab431871adf1514269ba05e0cea5558cd5691920fbc18237914f3dbe4b253f774e5dc1dc57023c080a3b90a004b809d237658ca1
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = ada55d93c533716ebd8c16e23603071950aa714deb942ebbf77206753d2676a7aaf61673c03a4db69d67faf6273828594d85e3c8cbf38460fa2af603fe9c1b6ce104854e7281757b26589f079da80685aec153fc5fd1a223004cdf30247f8398b8e92899857dd199d5d5c32412bedbf9d55f20e52895fc1dbd04c84cabfe1264
+A = -7d22392a8da1966e6cc5ef50d7409c614f8c8f8e5791778f68a00b4a056d0002707933043d05e48347bbd4d0dc1b6ca32a1aa4bab9992e7e620263283eb68d97af13b90a29c1b7dce39ec0b8a63878e8d65aebfb3bff4e67129e3b3725f999f1ec9ae92007911f2cdf738499661c5b6c9bf27712d0f29e871b17318e95c3d14b2e472cf9e466bea91fb71a493b2d
+B = 40279eefe59f954aa8c51c9c214fa07707b1d095f697ca40edb820401a45c472d1d7bb413eeddb64c14ce6144b4863fe9337ae4ae8698db92facacd6a56f3b33129c5b608eafa29e9d92dea620113051b926b80b75f320d7ca3d2ab597168c68774e68c47670458f5ef2ffd4604f20bffcc7817eb09c9057fd9989a6786a7e067ebe6724a89e7d1580f94ee4ed502cd4
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 4dcae9def5467526b0ff071003e56f5537852cc0bde9d86eaed2c15e36e6429c68c061e12d321bad12e29626b5013c28f118ee59624ae2f35d2c53bfd89e6afdb6db79f0321ad5c55cab03e6a1a97ff7bd58c760d0e9fd7507de987ed2f94f9c79569fe7f03652cd53c67ebc6bd3c9e6c5672891a9d2ee11b300ed3b19753c0f
+A = -127f5ca6924851faa2340c4c8f425b1dcf41b313c5c2910e5eff8ef2faaeaa43305de2b3a65a75fe54c00fb30c0ce3e8007db1ea222521190ff1de6d0cf2e777ed61ce8211dc167bf115a77890d0bd1ca786e967a04f077c89939ce484bbb1c560f669aacf7756a4338d97cbd7f09a376d2dfd4d632bb451f52c03c05762f050ebbf112f8dc5acdd9b631292fd7073b
+B = -3bc5e9c352c46449a9155b7ce5478c771293599cd2dda58a962010f1f21d094aa6bee03f9311545e8dc6213f6aa73c08b55bcdf4d1d84fecb9eda35c83eae5fedee75b2d15a003f8a82b2b788ea19f7460fdd8f447d973c950b3b250a3022c19ff312ccdc86b6ab50c4ba627b15968c8a66d306bbdae8e88fe28c1853fdfb3fde92353f46b5bc448ae42306a4c91202f03d
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 62a812e35f46e04b3afa7d26c8fd4eb168b6b64cdc839ebd0a46bf2a3a712af8e97380cdf0bfa8a274f7b73e887bb4cc73c6104a176d425aaf5352f14ee51ba549a6926bd8d059b8e3826b174385d4635b0c36df75a4e7da44c34e51eb82322b34ae00e8c712eb75b3882822bce5a2f2f5fd74355319ebe1973284c690bed2af
+A = 71c57b08127a956f0c17fd3c639bd1923ba19bfdb83c0cb9dd78e62b8fe4b7e0019cd0a6b73a334c622118f96fd6d91c1e06d4dcef8a3d0d6bf8f5beb6389226c50d14d3947ce9f24f7e0e6a7befad2e4e92dc9ed8fbb9811d908c03ac074b2a5c67b67831a350c4d548ac70810bb5617d261a045e53cdc48117b9fe86d35950d0a181b73c8cfd35edd31af031178523b
+B = 1cda2a51a707f8c4d2cbff6337c3f63519705614c26a489b545b1faf366b705af1d953701b568a684856fd3186c035f878788f7e5dbea16b5e7b6e767cf611452a4272abf2a9c5e72b7251a1ebea5098c60cc5bf649cb70980b97d48580967ffe2913309b6b78cc12d91025ae403928851902dcdaaa60f5b323a1302a5ce114cbe174e3eb3c2fb5eafc44076396c23d53b028d
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = a9213cd809d41b6bbfc2123bb84860788ce22d5b91f8e24fb616efc286a218ae9652b42912a58bf8ce596a1b48e4c72f27e52c36be1940f7d2138eb895ee36bbb917a59f73e0b6c3266bf4759ffe2ffaee3f6179492658e0778bb43c4df4bfa1a46300c9da496033142ae2c1e33333fd7e82c5a14686b255e224c51aecc2a590
+A = 1cf4e2d5924510a5fd06ff4eeb94a740e430613277149993004b8de1a2b96ada54b05365f305e896df5fdffd3d7bcb54f9a9dba9689e5ad498012f7a684d083c31d7017aaaee720bbd42382e526a35d2add21d9369f7faa41dbcfe3dae426948a402635771a977e19d5c353ec7c1abd279975f2effc0b7bc19990154b723f2f8c29e606581ab9d3966702f68d8bb8065e9d8
+B = -cdab60f9b8e1add4c54427b638ec5f76b30654d3649b500f833b2943bf6cd5d8647549657a8ff999eaffe413ed87e06267b97bfc1b77637b57f29039235548a7569fe6d4bb16ae9c6cfd38c0b8c73aa60797d0d69b03d5a98314f7f7ee25df8b896ecdfc782cf8057f038b6c3e79c99df52f839fd4eff302ddd1256e51eb31cee24585782a0439da3db2eee79a58f889d8847fe2
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 4dde3d63aeeee47441a7e733bcccbd4f2e495ca3c746468e9855177f7672d5d82e51da8e268ac24e8971d802e25d842a16a6b8d76b8e46a7724108c02d38a4830453408ca5ced7093676a1db4bf4c94b9b7a9531ab7c26f8de520bafe4431a55a5f5d8c7576427a0f5bf2081b998b82da2e8e959f2ec4d5141b55e40bf6ddeef
+A = -5770ea0a75ff451fc2c86d428f2569884b2c88cb6d9d407cc22b191849d389f57a5765b83adcea21c350b37bc6d750d4859f547da22ea8a3698a5cb6154b946331ae2ca18e7eaace951dcd49405bf8d8a716f7762eb242b8bf5e4c53a662c906c3be89e53ddf7a706ee2406c7d0ac17b54ff259c1bd5a092325938832763ac4caf0232e80a016cd1994441808d8db7e546de3f
+B = 7e4246ad4af268695a51912053ab6628969af4fcaf7f1e97dd977984a1604e8c9fe6b920f39a764c27d89f75986a4bbc122f92ccd1860f24677cf346474fd9441f572f769daf834e6a00cbc027e15d6aa7ec2030becad41e1068740cde82abed768de7e2cfd325848f6063e2186faa76982b9ca73ef22434a28bd2e3a5ac477af50f258140bff938d3fa02fb904a8ee0ef3c1f6fed7
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 3d8bde8d0625fc46dec46fc657c49c8ab12a988cec4ec1c24e6f4d8ff94514c8d8fee4a08399c6bd23fb6464a38bb5f249591456c283325e343cc289c85df0ff2c1707a6e407ff7a24383b66ab603b75e2dc3835ffe9274eafea148f20764b8ca30cbe483c1cefd51f82dfb93d7793b3ec19a57f2ba03d884f345bcc3188fe28
+A = -1680dd51d8be6069c86ae157922d55df3b58ee6f53738677bcf7332d6e7ef304ecc7ff7c5a5e1f525459d77202f3e815c68f17f9a6bf358654a92f9f9acb252ed8e9e6a849da7491f26d0e33900541ab67ce966d042607258b4382b8108729a703b429babc34496528f198a7e0f814db80fad4900fbccdfb64908febf5e09805d3a3049c0f164f0bcdaaa9bbb06df8f05309be83c
+B = -2c6c6b3c89f6e1d1cdd9abd1a9706e4f642a25738aebbc97cbd60e1f4ad79b419dd54bd14f2bd147b1d8e9bfcf92faccee61a43dbd1a2c084bf06a2ca476b3d169fa2c99794fc827b7f4dd010c0534e7cdd03d00456033ae0203b78a7ed229afcec2d1cb96892eb18898bf53584dde56b4316b3bc5186d97e3a9edcd059d7fe14561eefe4881beb8519c1cb7c3ba22cd2e13d874aab77e
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 5b4fbf0445807c8feec7efa3c2bf8dd86b1070638f3c87f1e173ee980412a28847b263a266506e70381aae919ae05d306d3a67a6c1e72c8ccf1c27d6296526e87f0f436c98fd1391f83440b58fadd4fb1905a484bfe8f516661e7176a268660387fe6a7266ef02e5fad91ffa69247bb11cfc1b5c3a88c76b7923a26f8a31ece4
+A = 65fe4d55bfcbba2bbfbdae831aef3dc8c8746e1d04cea174c1d336974d81d026f562225b4a297b1c3b044ccc5dc9c830a805a399bf26c0369b52ab0dd2c0ad19e723fcf9f5de2990ebe5a1266653195a2aefd9a392fd3da8c22c523a362f195babbbf5329018e3b454221b3e77cd0dee79f612f86332b1d104aeae7d8d84ad06b107715bb76bce20220d1340ecfc666b2bfce812814
+B = 12f775dbabf1c112523feab443f6e95d773e8220d66fd87bb7fc702588136a048e17ab6845a9c784dca275cfa445d007e8d8383740b156df7048650f89c5ef1a84148488fc405898f9e326cb8052f626c8881abeb70f3a0f52dd83e3ae0cb82d178cbfe8c393449caa2a87e7c8e2901a87e276b49b6d012f3cbb65641add3694fed3e3177777e78fe375f3a3b378091bb8d2998286562faef
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 4f0af7cb0c4e82d0e6589b24b55528818bf2164d41f58505a2b302a8f677df146f8077945dad3790c323e19b37e3379eb95de8abdadfbe4417f8bf8da643768a622ad4898513fdbc72d3b1d2791ec9ff40634678faf0e17d6e0851f08c39405907db85b74937ac403a9a3a1004013c7bd95a585728010689fcaf63b2031bc8c0
+A = 156dcadeca94985ea8bc0d1378daf1e85ecc4c7f8b6d6c7a5cb9f9ac368a97c07e381004023bc575691c082b5e9e13a02fe813a55e76196e4ad4b0f9b1e089bb71a0d5c94254b66e3e645fea25d69bbc5af266e730482a60105306d664f0ddecbd76d54e7235979aa2d806b809b3468078b5d90aa22cbd2c441198d4a52f6259972cf3d02003dc39dafdf3581638e56d08c5181d36e9e4
+B = -9a54586072d093939ad86df11fcd3337ad7e9e478dcbefb2b89d7555883fe8565abcd5b0a9c88ab135ce5327b2a326db645bc7c0e3ce24f902544675ff9d946abf30302f123aeed0f4e28edc72758ffa760277caaf4817a3ae8615784c81896d2404e2cf47c06b09085cd0ad1ec46cfc1f04d0272eac29e774b30f19939d08c036b185983c93ba15d1d27aebe4a357b9f6a298acca3940d2730
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 7c3ac09486a6fb518b98a9bc8a8b382bf2293e2c1154470ff7961212430fe2dd28697e49256b1ad8add082ee27b6ecc016b120e971665be801b720069d30c0a8c6ea4795613017e8883e5c0d0e68f982c328379d7a0afb7825c553e087b33e9d78f90e0b95a6597076b8ec2c1d375e2143bb778c318ca0680a64072cf9a4fc08
+A = -71d8e7ef13d63b4f417c01ec1241020a8ff4c9b2db531500984fd3e45d22b2bd581894c8a248ed7cc345e70a5698407df8f0e4ac71ed2c0d42122a4f92279346f463aed899253206786928a0eb7c37f2e51e1cde7f97cf9288d85c3ed7f49e62af0bf9abf062d2c6544d83b9d3438b3881e0d07b1fa0f2a4446fd43ab3b4f81fa2cdaff199c87965e298943c68cc15f2f3f3225efad68b73
+B = 64d52de221f102af62ab1e9526935b005c81658f8fefa019bc58e641023fa785798ed0dff8f7f999dbcc2ecfa47d5314ac6676c82170d6f2b18122c17c1e1ec1b9b54e333a184a46ad35b2150c8165f0de19a24b98327715e5a641c1b6d3ff9d247c89c8749e775e6fcf5f967c6eb5e73523d4f1ec12db7321b14398f26201a364e1371f0ac922781ee252c6d2b3c657ef259ab73cb7992a370598
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = cd08b388ffd41d0aa29a3dbde74106c57b18d325be8f446a2d9ae95fa4144037dbd41eccd50fa34096984cb11bce555c117c5568d76a8f79d308ce11043fe2413d37d6aa60c366af6c1da93d525e4b2d79fc82c0a53ed62fbf72c919db8a3ae11f5ff8057d7501f5f6dfc9ae461c308d21919d0de9e31b759d1d8e3526fee58
+A = -12e58708c30c93383cfe6e99ee3c5caf1900a7e610605706e77d8f428fd59db2884f5021d7a382cb18b75ed22528961cf43be1c700c581ceac3877e83eabd860583e6e94f3f2989c179ee5047c82b53d37054c9cb7ae08be60a91b10d49510e9f0b90ddf89f93790c3e18cccad5a9d223c605a6c567550e2b4950e184fd97dd68bf30681d3f9c585365de2cadf36a43f5a5305dae555396dd50
+B = -26ea5079ba7ed137a14d00d413d6f818e911cc183c88764de4d91d7a9b4cc7af3fad703142dc7905992eb8bf489f6d8231bdb25603ddf3c31fda8bd9bc4d78835f9ddc1e6445037f05125cb1ccd92eea2e927297e5eb915d5d965a25e5d58feb8d79a890e6036c80ee91e7469d9eb672d7a8db68905d06f5981fc40bf486575a067d35cf14ceee3ccb79b72871bf8f52b92e4910ab17e5e59ab3ae6f9
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 34714506322dccb91308c403c267f1ec75f80faf3cc4272dff4a84c13eb1e6133af6681387006c61e7e087046b64e7ae74eea8a3c0564a7c1f381e1c940d92b2c766fffdaa7318d07dbeb877943a73b50517b49e5117778b8a60212284fb92f29a9f5304f8f537e88acf8afaf01fdf64773f988cfa9551d6884baa70587ab76a
+A = 638b7c549ed14256956bad532945ef9e11a50313172965386635a2fc7db79deb0cb5c157e9854117c17f1509d505d01a0e138d2e510dfcca45b4f7ec968b5214a6699b61b8ac68adf64d5394f50d577a154c013612090e2045462160d1f552592197d7da78e03491ae284dc9faf643805f2674af8652bae93ff230fc3eaa833dc62781e5f74d0f0b90290d51d481b0a94ae6e972197c6e84ad7ae
+B = 141f62297ee88ad527fd1e0e09d9ab5dd80e17b32f34a674a27b00d719839701664ccca1b00da2613396cf633b0bdc4482ad3a0c3e209eaea7c22f33706ae44155f527c9ca4e341e651760d1c39f65d5e99e649d013730d2502b6b65adb8a73e6bc734b7d879b430798dcd53fa6c0badd57896cb566d9f1e0a7b3a9161e9808e762ca819330ce9319dbe7f49bd663a9f57ac53d65c6851dc7bc4ee66e08f
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 7adf54c77eaea2a1743bc5011ace45b7651846e77f90402297f117d8b1c0377f93f49e92a2457f3d3debec3022a96c74c166d01b2279553ef518ec0e612bd7b382529184640c55b89255b2679da9cf370913351592de39f804f1724de36db90c045fa644e8ff20627f67d6afd4546f00d7af093f668629f9a06c07fab5654ac8
+A = 19c491d5b55aa25f2e18cfb7fda18ed4b020e3f63244eb9f6c4dfa86eb8a70875cc898e305a7acdd3eee081300edb3e4c837940bbc1927f5ed9f651e46581639e133515457464e9c451390828e5e7e00a688daaea74620363706cb69e02717489ba9ad05774c424c18e295278caf4df4ced80b4cbd20cd631df43f2e16ec0334564d9dc03dfbc7111e4252504fb449d5a25cb13630b7c0c565a82ea9
+B = -c3f765349639beb80f888d9c8b7b335ab46b55064ce2a88180c80ad280c6b7314df52b7e73095dfd82896e24604854a48121353aa1de663eff07882771803010005905896357cd5a56a59f0db0045f1aa2c0b5626e132c169abc64b9893f95932f54c1d8cc25f215a9ef6e4cfdd6dba85f6faefeca81793b2258ae1d1427e81e458482aab87f6563abf435be69a05b195d1eda90146a8cc92748ca6f798b10
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 32ba5fc81a7747c3d812cf036bc0edc49f08824d53b91a65a6d41edfb1651d99c11ccb4c074d7f04e652276ae3fdc8d6eedb72c6e46cbb1f7f4070dc9d179ce3e21a3826f7dd2c27943a8d26b192d7f5c4aee9ba0647e406133e3e89c262d37cf468aa3ab8c5dd1b8900dd06cd600abc6d372d9408497d9e20c86a9a6a4ad9d1
+A = -73958019a5a52357b9c1d954c9b14f51ddaced32a4d7b7c95730697cf90029564118ea168d23a54381f7bbd6718a6b662e4c87410e48ac53b7767148582b0bd6a3d35f488e7fcf2b128e0a58b5d468dedabde4d624f4a82e808dd7b175af0d3658c6df1ac0da6495bc9a8dc012f8de55c2003da9b2d478e1a089fab776d99026684026968fc309dae46a6ef2412039a8207c3084f96b4e38e4fa01d131
+B = 4330fdf00bc6d13ffc267073b68aea7419ebef257d63f8f244accb9ee46edd04fe5481292de69d377ba6b6304804ba7ec0a063b42339e6e37867261b9945ec705d3a0029c6f499420e02a773476546993b3c5e1efc2417f51afcec7145a9c2625496865c11636e285d4c8b053ffe66887333c51a712fe9c8ea57606103fd689dc88f1fe37dbc33ae4e92067c5bf51b53e2f8205164c800e5abd677c73949b00ef
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 69b850a99b471003a56931f7856da357a2254ac50ed81dfae019c9b722b95af16047a0d5422cf7ab66ccd898e85caf0e03e74cc8a5a413661e5da483b3f0363e63a7031bb30626c8f73d6e99e290071094b7fe5bbaf4d303192e59acb5e53fc7cdee78576b51595d9f7a25ccf3c7f8889de68b9deec167778ca27ac9d4c71c3e
+A = -1976b3bbbf92acbfddbc05b5d9e7b62a7666b239c1e6270db7ec6dc2929bad1024e745b897840853d14cd815aabb01aed580e1cc66ce37f9d1cc4c9bef8ddd35d28285faa29f2003d2a4623ead7d73302ea9f380f16b3fc06b7c2b8bb4ce4c8b03bfb6056a61c620e4decc6048cdda5e2d3ed8a13b779b8829e2bbab91e9f6b0304b1c08bf8fd85e0f3cd7ee72255e5342e077ababdbb545d7f809bdf8145
+B = -2cab554f7a5d21c499a1025f61e6c81ab0fc68a874bf60470cfac57425a451365be62c380ddd31f6e202f29769e2b6106868da7c81522e03fa6f0704522a5f8bfadbd007bac65595e149f6c585d7fc022db016bab32819049e7547bf85d4232a7fe19084907c528e7eb0434f2e5a375ad9b7d463821bef2f6a721a635252576c176ba42519bfa5d97d0e47facb4426aea0d755507dac81ccf1537b1003ddbb0727f6
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 2ce33adf34f2249f8a2d2e073976cb4c78b71414e027657fcefd56fceb022a06c1969dfafd519eb9e2542662c7647102f5c528734dd005fca666be57b46234123bc3db286cfce07bcbb399eb6764daf2b9aafbc2898a5ff43ddfae849c7549289640edc4ab7c4b9fcf5e159623e5497f509ad6f0270a41fd864c9437302ce380
+A = 509f5d5b160e923b4fdd72f4d522a713d780daa4bfd10ddbd62b26497a2e7925c495afc2abf0ecfcb7980e588f96c4078bde51c7b2c19d86d15bbdad5de72fec2e0a284dd693ce0902b40e54af87ac5a5df38ae6d1d882ea6299fbe6910121ebfebd06b454ec5f855bf3e7cd544a4b0d9a764428662e824e2a6185723534f5e6ad829734347d240c48c2c0f8bd6be6ae8a495a9e383fbc7402a4096b8c2c214
+B = 1a3b7f55307031609afc974857a6cc75821e73a1a9535bd6b8e141437c3fd4a6871c904e22c5d9289df7525ac69a0341d3620bcfc5f04b38ae540e26beadbce0002a8a8bfd0f6a270007e4c52aec2fab11fb2a831b9886997256e4b7e7ad3b0ec64c0f31fb0d637869143712291f5073a5756466d7c82c31e08e09683478229bccdedc2cabb7e426af9025185d8dd5124e08afa4e981236180e0a390004adb7918de6ba
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = a81fcf9a18ce476a839c896cc5d9b639fb1d74610e2f618c25310147b57cd77806c2aab90be7be4ed10f0122baf9b862b141ee8e4be5e0c23ea776267f14c31e50b119bdd33f2b41f6a4c43d35bf6f095864593e0d8c0f1fd4656d8371af844d197308bbff14e5a28b7181eb6e6a2b31ead7361e287f3b4550ab0484bf7baaac
+A = 19f1ce60ca50bfdf8e02313f1c9a45496720a2ce467f1e8bdedbb32525d762878b61476989c7f6ae8dd29c983ea596e521bd4cbf74dba4d505dd9ea5df423474fa9725d5b65f1575d26ead95725e2a59a6c8a5397ebd6b54123e42bca44781b84c014b8e5d2c1a86cf34d764b242baaad5be285cec72ba8ace808058a0226c04f95eb2b53a828d0ac41e6b40e5a4c4092788d9f7e988752f175f075d545f421205
+B = -b115a1101d97664759538d22154de4b000c008e551e2ab10ad05f12274b10a4cbfee762d232df5188fa1161f37ba61d146e8b95fa715d98e016da8beb0600de65216cecf8b8816f6e7e73e2a2bfa7d0bac74b517b906bbc43357fca69de9cb5507bd95205515b97b3a4d6842f3d7b09606cce1c7436c462f49dd05e915d04ab6fe2748ccaf025bd5d19749cc468d228ba43452ccc479c146ac6d781717bb9966bf3835dec
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 1473f092540ae30de595666beb33e430cbec42d7a28d4f7982e62f58025cdb617cfc33f1e5ab93d2ebefd7345561b81271bdc50bfbb0db6381dc0ea023ff7c72605da26dc7da2b5664d2ad7967426ca97b3745f82528964bb68e70087e14dcf2d71d30fa0d1f7b3f10b19b357e7053fdf22bccc5188c6919eff1e5c402b750a4
+A = -68f280cecc512d51ae534f30aa198cf7b170c346c1159fa9cf158d0127d43e50a8d4704ec54b8b4295dd7f51c6771cb5767fe0c975414cbe6d2bb58ae66a095e8832d5f443498b1ade1f5bf249da58595ebd878677b34e3b4c99ba6124e2b71d86a8d99727a16746469de51b0a61d9d981459a6cebe206cd36a09f00ffce7f532e2c31999847ba000b9e01a4b84f454544b6362a5c093b9abe9d583716f4534f2de4
+B = 5b79684387f18d7de6eec3a63d737490dc2a46c0616ec16388dca2be60adcda11ae13063ede3fec177171a51dbef430f8c4b3f6d297b9d6c020fc44e3ffab891d0d751d033fda813861bc067c181118dc613335ce89c5960f952e5fd28bc72c41b7b6e374ec29b837f1e00271cab646c794579d315260921dbc3b984b86d98b8f8816aca4f16de50657e4102f34d9e29ec3a03e0da06e70f69952339bf2ec4a7e74daca82239
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 5e4b3f4aea7115d592bde9bf7c6594fee77372ffb19f7745b4de878a4024f81e8290c77d2915424df20004a7abb64c214104a3123e7c8f230c159ccb99bd937521b433dcfb065b186a685fc40f9166bad9380a02e297ffd6a307ce8d2c8f2f1330447a9c06c327b74f3cfc2e98f3351a8b385bae855941228969d1c29e9da3e4
+A = -11c1d396693139df5bd91825c119d1241c3f57b7ce95b46472dd82081738cdeb0868d18eb7c8ee7808016b3311f982adebd5a2e5f4e201ec4a34f3037d260fe580e771222de5a1a67947a4552cc03c5c59f9e60e25063a702ad3c3aa43f061a22567f938a91f1dd697c3e3978fa11ab1d65030bf327f8049bda745658bdd4ba8f3e34b060c6a2c6c5a8be54c7cb5f6b106f54a37d2be9f674f7747744d4350b3acdf373
+B = -25a65b6acda692ba3330d70dbc3ea4dfe208c0df358c50b7872245a909c5ac19ec568b1a1340e1a094f5b8e7d1e3b7e04bb4df002558aefd4540135d62d75bd5ce959128c1300b9d98429d7369610866d98b22c345e531f2beb80b042b6ad48da077043401a82e223e9e529e7407bfa466dd2680973006d047d837c26a60cabc36a7ef538f603ba19f8e923f168ebfc3834df8f77a559c9e0342e33df245f551bb242e5a66e5904
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 47872b544fa0425981ae17bb450ea346135e6ed7a9de0572ae14a6e85e8319f27cfab778cdd8cb5f93b417d9c66ae0fb7bcc6652620f7f3f74acc2bc9f2c090129fa8315aeec9ca7adc5356484474ee803883ba4695d7bc47c87eec508d16a15150cf3f757c4713de71366e958d6af045b2d282b6ce96976692c80b1e0b6f846
+A = 7e8f55c040862f12d8cc6e506608eeca65ce38e9e8ab18ef7007e3cf0f1c9a0696795bd10f8e1e1f55bb4f4f3a35c2e0ad18289e250571ccc26a961f730346efb1e29fb143ed97cf72deaab19834fa2e98e9c12ae4cd23b9c5ecef4a04c439f7d42e110b30caedc4334372ca24cfe4171ef1430528f7b57bbc823fd606fbd30915c5817e6c57c967c4c404a0847b1455da17effeebbec3f9357358e00001239aae209228f
+B = 1cc00b95f6bd3abfa697400c98110725a7e109aa9b8cbbe9ae16327c4fc8e5bc93afc7a94da32e98e85e4fd5eb545192c73007d97a4e84ba64fe187ef61d17f0941e165c9fe64c7b8054e24dad30f92b50d1f526b4bb031e6b1b9058be24884b170a145212273c51692b71bc57ee53176d8702b975bb6ba96284b462da2ce38e12d86b342c7f4d3cd489fbce88a309c7df1121d7bbbaab6814cd1e54953e5cc46813ead98f02360372
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 5d193b085e57c3f1e825cf3b36c8bdc936c603136bb782a244b04a79fa713dc7b08436b85ca3b483d2e100a012d6430679b30c8e4101c8f08ca0f9010dc0f27fb37be842054dfdd99362e03a7f55ae58db7b47f694bd35d91a58975ae1f255c41617e773f91c2640f768bc702a213f073682dc761e056b34c57edd85585fe04
+A = 1bb1c759ea94b61a1721ef5680f42af30fa31444b27591a03b7c9bf5b90845ab965339f463a78bddedcd62fa21197c32d6850c61bae195f86e1c7a23e7a20dc618c59ce3a1c6ea6306c0b01b11a36d0fadf8214c36a133d689438021ce7c78b20c85256ec607360cce14f139513d9f3ea6eab067b1ffd0935d7c43419b93ecfadf2c5a902b7c39a69bdc023173bdad574adc77706c1a666d66f69578a5bffdc7cd6eee28ad8a
+B = -e8072c49cea603d48f20276df188fd2fb28f8721d578220cef7db1e56379c04a6b372e56a047cbe59ea84ad026adc5d0aa930011db63bf4959f15781e060e0240dfac0e2a2c26be12a21e5650d12140bb49a2a8e0f6a86e4b1eb79d9b8aab3202bfd339096529170cfe3e0c18263128686bd9305e92a3c43e1523f97d8a6a2707773e3d441da162a79089c9ea1e094cd5a23474121188013c8c287965a5e77599f6a7d64174b06cc165e
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = aa79c899c2b9518857c9e4f96523a44607c3f6a97d1f40d6474ec79deb2feadd955fe92d789df4d362c828084559fab56b5e33a971abc5449208d31671c7e220c5945886e33ed1d804c059a8e439a92524a785076f9730732bc5a152aeffb5b9ecf3a7e4b55983016355c4c29827496fd4d7e6532c270cb9ef263573e4c63074
+A = -41b326c2b86e7ac14a2050bff67bb5bf9697f02594789c4a2b3e8455df4522546278d0620f28a680f6a88ab545de5829305485422f4e70a5ebf0ad15508dfe3f16ac556436d8fe8a8cde83ead549d88e0bb24dee52ebbb49159ae71589d918d3fac8011cfc3afad613ea09173856b7b79b55a2e43e0f7cd21eb9122d5f6a1fc5408414f5aafcff863b870c67b740256d317a0c58af9a81d8025a086a1f3d79f7408d4bfa06b9dc
+B = 4730f03c389f9bdd92fd864177e06140c9dcc02d01fe7d37b51d44de140696f116d11bb67adf7db797edeb7c304386a7f5e37bfac46a5462a6d4c49b1bc034c2e0dfa56f14bbd2a4bfaf86bbad4f6d0dfa13c782fe680847d4b43373d7137f5c2ebe4ad58c695a7d4c407bfd888ce04abaaec60a3fd33db10eaba6b6acf0e16cb61d1beb9212c2b07921bfb5595ef1eb389200b356eafe8b5288d8f0e2cf252b38301de65190d56bfadf57f
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 23f9850dccd2af799f18268c3a2918a69019513c55268faf2477c50677fce277d8ce58a0cc06dfe389170faf5f0ae13ffc4954c746eebae66efc14eaef2c2ac9001f3c7ef7e32fdc31dd725b6a8093e33daa6d19808908e0c2d3e7c1c58e0fe9ed92f4d7cf3cc222393ca4f95feab5d34fe29116410a1882dff7cd92acb87590
+A = -10a75953e5fb9903411869a2949f8f04144d6e2d61f95704ff55a02f40c4f283add405353a68bf7d6acc1b8cce738f0c6f9271a538b4c688dbeface58eef0a0a1d491a9e66958750db97bd01466edfd245cef03bb6a3acb81acc63c38538e7f15deefd15afc422a8641c357c31a069258dc0ebb63f06094ed8fe7d4d420246b40302361967c81f0a9ca542fd1de01967514ff2565de7ae3b4a200d63feaa22fb99a251cad66624df4
+B = -351242b6e6d0122f7120deb8357c3bcf25d221a15f83579883bfb4dc2e6099e6b7b95fd08f6e573d93354b0676f7bc9fad563d6eb0f3567ef43efe3d874b9c7733e4fe1ef491043e1f80aab6094cc9b9c236570972233ea74e8779a6eecda23a65d08d878850cab6005159265893dc0f66920a12c26dfb421ec326a1ac09e9ab8085825c31aba488af02cd51f96b205c50e692dbf2d844ff0a989c3ba9f1c2bc7f2e7dd9458a72d310eb28d490
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 69c7fa326630d7de69249807cd8bc55c9315acac26fed3caa3c8a9c6b51ee96a7dd0b3bacd5cc13c15f199e268c5eb91d1ec36c085f83b437b9906caa6e39ed7bf09778610b621426cc8d36d96f541d0bfcc7693525d33e0c2ecd77ccfe80289a11155b37c7ea7791b5c2be3f9b954e230c19d746575afe9a1a3a9677d23c5bb
+A = 7cb78ca8e5d903096630744c85975719c16333e2e44931956d8c45b001d35ed4e184dec88c9e2167d2f338fe6f25540a144cc419590a4ac7caedea3bbbc565365d3357baa62fdccef2c5ea616614e0bff60e81916eb4abde0c9725b1bf6869e8b1e11f6d0d08fd712bc68003e55ed462ad4946f7f982e663f65d45c07c659d9620d5139d2b3332a68d33aec36e21716a3b75f44272a19f860e6ab3864f06def9a5ddeed340ac0733353
+B = 16d5b074e008fdd30e73ea95cb5fb87de806319388b3a44f33c94d38be0e6f1a92103dbdfb3d23b6e1d19bdb29ac14833003e9482cb7524d0d7b4c377f4911e3372f2cea6f84c938d84e3994e80f0d68e7e385ca29e02f70294c921dce7cd3829c5854ce51d1f4fcf7dba910b51b48a3f53cb1f187182435f21f6981cf8440f9c8287a9749c92c0304cc2bc91eef32d8e6526be802de8aa16684e8854cb0b67d9f7ea00f6f0145d14e3c251f70881
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 72192604b2f3f68b9ed3e261120ea52b06a05869f6abd21828ce8abadb3a71c360a14947bc738e5d1d530b9636d796f785bb44508477eefa80c4b77d4e8e35463e15ea2a48c682d3288c5abeb66181e4bed7d5b4e0db20fdf5ed68513aa5ae7e0978ec1c4646368f206636ec90e808817bd1d03acf9adb9ba57dc153873fec11
+A = 1112d291463b28ef45e879412e6607a3e20d50dba5044e71883bb3cdfe9bc694a577fd7d896dfb836a171f3a4d8fd025d3a979b43e41baafaf7b535d9050e47f4880828640e952435648960bbb74a3c25dd90bccb3fedd254dfc0f031d0e8a468e93bb69f771ed35f1653cffea1a763491fdf6efa21aefc287cb611f5ea0085f64cc3705c784f87ce00846901833d01a3c45ce047d822ba390b538f0a24720155409f60ca0d90e13991aa1
+B = -d553fa2dff0265cd9d083ad097af87a99af3d8d93a9f4c07440a28a427082004ae5c81d22bda1dd2429f540de8df175c1b4d0d50f0227489ba570b28baa35055df951d05b584ae6b051a135d7eb2a501b2441f82c135a8ec0eb81d379b96ef8f2fd526ee62293bcb934c76ef8083727a4b28bbfc9f515ebcc2bb7ed9594a106e137ce94e9105b2e2f4776aa9c6abdf426a181181fece3251c3ef4f8eecb634e6bd47c5878663fd51c74a66b92713fb7
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 459e19faf105ab17ff794927aff86196b3cc3461e69cada53ab8c8c81e2b1820408421ea1af6ae10257e8cd9dc16386906410761fed62cf9ddcf0da2a92800d99563fbb9cb1ab0ba46a17cb9dee3f2b68992c2b832a5932e4533fbd5c4487d870f3fb5d7a1c358f4aef02993360915a9e9cfde234df5f51c761d84568400b618
+A = -7a964c62e38e4124cd2bad727138dd12a086a2bf01c095b078ce2f81288d3c8435ccce0c8e00229184091130989434bcd107a3a0787a2f5f4b0e8c23b1cee9a8f39ea279fb6081efb6c3df1704fae9e87d63ac6eac4c6687b3551ab7ddac5ca0541e12047d04c2fc760fda0916cd2b585a90d25880fcc1bde8f0a1a413969938d42e8b3b5f73118798e85b901c2e15860e29e2ee8b1c95336b97dc10a21f5300e0352adb60b40a8a99333380
+B = 743ff4d91ea3e0f9c4f72e5daecb4fb00b15b86e30bacebbe4384324523d14e22abe29b00573733f594d652a88d98c987f8db08b27b4dc68577784fde02dd410ebdbfaad9e9afc6a22a8cbb13a780222bd212fc61e38faf409e940fba35ed909e6938e83b0fdf5b5e3ce138604823e788efc3aa0df924554fb70fd2faf8249e17a827c5d85942005b328bed97e5ea1f1810219d77f2fe121ce66518e37c84d64aebda3c397684212384deebd520a776b95
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 183950095d9424b0ed09985aafbbd2e5d64bf541a56b68b42ea8cf9b2c051615ee7bb6c0687ca6fb0036888fbc927cb7aeb303750871442ff2c0087a95f4efad568f48b03bd2b9a9ac26af8c259a3fa97cd2af7e3d8f36148c26785489cda6c00a21e7eca219d1f41b2e82ba8e2c1cd752eb08a2fd50c6f9077f3096e2eba05e
+A = -1d2fc778cf44c6992d1f3a056860eeb12f969358cadb087dcaebf5f96bec42bc0aa98672260adf1732da057e9e0d22081e33f5fa71f248cf89dd361036ad58692637cdfff584a191279f178242ec0ad397efc52e99462f496caa0f3133c4238aaa877fa7094662f080eb284c4cbeb992a368c2d157ac5c8c9160c167716406190fa39ce0abcdac52c8020969b87a4f84bc09a51f7b2ca288c93b1aac64e19623a7d9e69976a31074f637e4c82aa
+B = -2f188f1245b75cd21d052ec76edeb5881944a143fee31c67370fab0420a748f3f1957bb8332ffefdeabd0ca806169629f130c86c99bab490a9668fd8200f4a9b1704c589e75b5c8c855f133d50b2ce06191875e2872b36c78438d6032d53004c047f49e4cb81e19fa84da16d053e6cbc7c8eec0b9129a8831eba690e0542ca3fefd204258624e92844c8b7bcdccab986475a47c8b22e89079ea6580ef8f496099cc24dc2911dcb1921d1451e2163b55bbb7db
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = a02c38d5df9ff7055ff84122342ccdf6ed7f7d54fe8227af091371f5ae62844645586adaae99c11f4ccd828103a81471bac72dc20625962e41d603e760591bb3569a21f45bf062b86b5fd1c617a4769a4d767a0ee14d104084c12ae875316a8f2be7adec0104381dc02c20b5851efdf7d4bef0d68076975e0ada3e58e101e8b4
+A = 5daf37d616da184acb278a75fda4e4fa49e544eadcf373c054b203a309ba198233f2285a1b55dc92e05d0213b26c82e261d8383a845813077b2e1b5f4553400f09410987c8dd21d4383e0f05747d0482d1a89f160a5220b22c78393873564fc5b1e4d5627ef3d4a05612709f301381df35606e99560fba07a917d7ea7413110fb5a8290e114d5200cfecb00b6c53b2ee29911bcb2fb2930eadba0ab9dfaf46443370307d9c3b61a329f0b8b8cbe7d
+B = 1d9539fdb1afabeb9be6e774dc7c7cc4bb4fd63af7abb557a5fc80a3fd23a4600de3c7fae89b91f3d441b61d3e24b2fd3d7803cd71620e7313917b4afb89ef5171a3d8a68c3c74aa3dfc8058d555eac429dfb6db40a9e0c25aacd2050418d6f32bf21cbb76981269dcd5883178d4b69a931a0338b93022a2ed0f78f3d8877989cc406f19d6d082ea344309318c56be7946412ea0867c78418ec32b9fa3a61017c10939c9345021133116933a3d1eb86a3ef16424
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 5fca287abf1f487e0ec18c230860eed4a2e550228b1500b1e33bcd6675646b5afe505b55073129f22352dc2b113c584ea1b98808214b6916933e90e036b129b61657cdea9026e1fa087ee300e055ae8f94ffca933a2d70453ed220468a5a3cf1a65d81eca11cf570d7d038722397f487af60531f24a5f069671354882c8bd2c1
+A = 1d9fe15171dce97475f4ad329fc8fb5469fb2b8086e4b01eddb6ceffe5324cfbd28d791705848569739b6758ca7e7d7d49adf0c11d891b0a5879ca870d1ca5ff475513322ff218cd26024f97623bb8a53084594e1fd64154e1db702522883fcf4c0d677a7fe90096fc76dc3800816996308d8f0be2dbf3b879f8a000c0ac534511437e2ce2d7ebcf42fd1698a829eb846b3afa581c24d5bf97abc6e247f110f4e872a2474e3acca6c8c0d518104c3375
+B = -dc0da8f7adb8e9f7b0e3f293cf623528dc8e9668317910417e52301c50c62e7d30e77ec7e38d6817d1f5a93e851f8560f642f23a0b9f836812d27b1b41c0867088a3108332b8711047560052ea30c8840f03a25c65b227a175d8f340095823788adb5bdf2b7ebb801e20f6b6435e154f78d17b8fc4373aecee56ec7b8f5686a7d22c8571797fde85cec884d45ddc4b1f2cc47ebf56a879bf286f349a0edfb531168b733d43de3b86b49eacb10b06a432c96c63440b
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 6222c1a14c6390d73944cead58eae5e7a6c19d19e4563c36cf624f5b61d99991bed7dbf6a0723abc56469eedfb1f7982987c2c7af6191178cf0933ed5f191b8117c9d726cdfa8b82a2fb25ca5436023f5860aff5fd482c611f134569ae87395dd99e5e9d400b5ab1e3064210ded096411654518110ea45899f4be2516e35a229
+A = -7f6766be6c6ca9bd1fd7ea1f80bfe68693f7ee4b5ba2946846839060d6028eabbb9079a165c1a07eb6a01239f3f14095225b8617753a1cc3d9c1e69b516d8705cfda396f4f0d05b0944a0f08b478d261e968c06918914ba87c8e7b7adef5cc2a875917d00585571542af219bd726e502b7f3f0bdf0cb1dfc6796be2e22e8ffb5b8bfac7e15e991022974e75d3a5eba214ab8a1aab2fcfcdbc6ded2abf834d1899d2e3ff94bad9c696aece045212531773f
+B = 49c6f869745983cae44d33cb7ba141234905441ca53172abd1a2dd8bfeeac4b236605cd2dc5b04ff9aa13de84872145b935b85479136065d2d57fd15fbd97480c25c6354636c17ffbca33c9319d65e82523e39fab49321380a130fc160857a451a69b1d0509d5718a9cff8b49c2d677c1f66bf77333d2511f58d3eb2fb47b3c162cc9be8b012d8df70278f0e21123a69724a1f126369a236d54da026ebe222c513f24b577707b5ab4b90ab0e22b4e38ceb4181d4ca101
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 9e9cc8c5342dc6d6daf55fc9aa9f79ec18592e8b9724a66881c379245c91f06a7df50a6ba0964603a6dac97e77a55d06efff17c93d5faf107fe65788d0f56483915f6ea0f1ccbda7656eb58fc032b5771600beafdc12c2076110a9b9670bd0754ff6a72c5d6e1a9e4e42c688e1cc96d7aecd815bdf5dcb16fcd1be1275ce7282
+A = -11635fe16dafce21efb1c599305e9a16eb5651187cbf054cd9d911c13e8eafbb738013e212f9c2b3662ea15ac9bd82b5751d43a38e4475d2310945a812262309094ae9cf59e0e9f3d02c92d8ab01f5733a20f051054a240bcbe3a7b6bb3f7c434229f631c4af239d33bd3ce30a372a480fdb49b2716091d26071aef372b8bd8ee8eb7f2965a372a836000b3737d2a833a39230e721e4844e16031ad69cd45ced60a64510c1248fd776611934d8d2a913d965e
+B = -3bb2cde9d3fda96fd7e6b24645f8e00b43affb223f2b5c3f4b7cfee905ddd6703a9d6c01f1f099ad1174da215a645ca4707d8156e762e2a253d7cfddd05ca19823ada9d33924013f677cfe4d86bde025391e0aaf91c6b776a9cf8a09dcad7cea59ee7aea1cf5f5bfe67c9d4456332d1f98e5310db9a0230381e1867a8f75b8757283f911f1a5e0d4afe5d544afa8d86637f9c9d87428fdcf8b4eb8f477e617960948253b24565b2f23081c47e211cd3c788a92732a49077f
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 30dc89bad4b449d1df9ea9b8f9d40b323c71d7e1133bc44d33bdb87c38cddedf83bb849e83436e4c92a06546fcf3e24ce6cc89d2e97a48aff2c7e3703da1b167a112f662a89742355e11e131e41052f1b379753cfa32cb0efa3a07465a258c585cd68c86bc9a473f5262c86c50992aeccbb9725b69ea8b3a7ebd2b6a24db52dc
+A = 60463fae1e9354559160d55a453c12d75775a53d1606d1fd16bef7e4ad1c78f9568954112f9280c46781180951534c5372dd5aaff3f33ac9c2e0ce4934d7009aad2ab5d6a5e5a141a36846e8925c7a28d116c68fb78aa9a687ec9bef173c1b69e0d7261f96eacacf237e1fe5874e5d553985b0fe7692ce8f2a5feab9ad9a2ad9c4bbf050b73b8030ebc36b94af8c6ecb67f8c94607d80cf600efd4ce4aa006f9b1832da8a1fdf8a564be0b4369149e8639e1714
+B = 15bfc50290b771ad147695a4c6701c47f2e8aec0657a4ef999eb45685200981b0ab5f8abc143d64878b85e9548651a1afd0913e3b14d11d3a26ab9793596801662a67b0062fdc8888feb029266f71d170518b6a4a040f59996bd4f257f221e830d0faaa9688aaa6afbc1f9b40d25097eab9d71d80aabc085f3a07e48bcfb37119aa00de60be55fd07d5b1281adf7b98bb589cdf2026252edf2f075ee176e23afa6b1f924c9fcf3c34c76752e833278a2e6b62017b88b77eece5
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 8b506c9bfb75ab7ab420ae6c9b371ef035fab512188d9df76f0b31831573b44cb08266186a04d20cc761d61b6df3e33ecb86c269205c2c79ae6aa4d3ebacac8ec71d9bce1d7ab146530b131c9038041c6ce8152a6f1c09b9bec8eea4462dda0f08d75edf296eacbcefd62a0c197ed30f799343268bf6edfee4995958db7e0420
+A = 11c16713fbf8bc9696782cb5a88174cddbe68a04e8fe93dd074aab33dcd85f92baa178b2f3b8817be0cecb802cfd3ebb06734c9d399a1f090e3a8a2110aebbba0e920427bcda74bf11700b945985bd532286d44a1a615cf7c501412e454edd647f8371cb8149474557a0d47cbb782f460de7a3cc28991491ea0fc510286711b882987b09341c079565414f2c930e7c3c3a3e3e0f1d786260a7f45c70e0fa20dfc63849906af61707cfdf5a9b7a4291a1c1586d16b8
+B = -cf5638af39c6da3757a09a92e0bd54f852742682dc91c71dcdc6e72f7825a0979a1ead2e158479ce5565d22472dc3853e6bf7ba43296a5e0e0a355f0703cecc02ec79da83e3e9de10a6eccb858dedf7d4c400c27486a5b8cb34d787cde6a5fd271e83a6cf66057838fe30db1f30663cdfc22ef5d002b0b5a05831228ea200f95382a58d0d8aba36523d9b5cb7506f193131916f3ab66ac9552c26cd0c2ab1c449eaeb8fde752f4f3c3f9b060cc1f8a1e37c4fe5ec306674b66158
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 347706abeb168205cef9b0b8c6b9d6449ac501af7dfbdfbd41a20a6a47872cbd7d4cd32f7b0805ecf1573d534418b7cce98181e079d5061b02639fdf0161cea5314dbbb2ef39ec841f695281f3c7de45f33664e0dd1658f645adc1dd225f781a3fb1634517c556403587b2aecd56dceca9ec19b930cead2b1d303aa056d28bc7
+A = -5e1c869e5dbcc684c245d5c69093bfeaadf388cbf928d33a8ae2148a2b5145937e4f654c5f6a36de1124bad1de8bcc9067fe1f9a44fc6ffe55ce7ed5cd0dbb6337b0e1e96bac1eb2a3606dd97b0bdb975ea59448be50191cc7ea36481ca9fc85c1c3e1c97378dbcd6b355622046888df2ab3d18d805f4d31d464f62a8e630e955beeeb5e00c70242b8f8df708705abbeb95dea3561756298b5f3f7fe16e965294eeeea4546f5e8bacf9d6b4f2136d2e206a87dad1f47
+B = 70225f0cadd328be36ece2172c836405db3fe80ef99ec74fca25406b73a537adf5073f2b550abfc4c0fcc2c2850dace0da9a266768cb4d5ff7fc6c1c248ad74f47592101b61ef96c1302924381abbd96cf49f50c44bf7e0551721a8ae85abdf9925548d13b8c5d1a27be8a40d0f43eec3136bc3035057b75aea779b4262cc66e6bc68da93c218f1920979291105d4b02117d66deb92c3e511aa588b27130202acc9f69521957f79c7e731bbd5461552b9b6b24240dd71ac449be9777
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = a2cb238f326d47f95869e2dcb295eba819a443dcc7c2785461389b58327742702f4c86e47af129f1fd4611cda93631f9333c358a29121d58286333083d13e66f30a9533b77ba3e26089e7eff7baf19bef8054af4e24735525908864ea9c4756b42a69c897003cab7b63cfd9a5927ed562e29845308eb2a55e7f8f03c87a5b7ce
+A = -1aa7ae6f56c38b654b281525b9da953ef366c2b9cffd3042105ed428dc7e5f2f2d53ef90b468bb471753606cc7a3775d86bcd2f4d5119cdde3c487cd39bf31752c5ba297e529c1b8121487e0e1de702156d0166ccaf51888a24fe7b48624eefaec855e2200929c21858676ec9bf4ceed0a832b69efd5065af544e49a3d209b85a77b0953652cbf0aa897527c52c9a98de9ae4c827f762e251478c88d410123625ea52b3478b52f6b9987d42009ae427763357ab53195772
+B = -226630b6fcdb5e274a25066ae2ca2c803549dbb935a97c0d7f6ab2c971d74cf6acd265c9d6815a6b2dd23dcb3c23b390fe8b1bed92b8c64c76c0ce62d5e7ddd7ce445bab0ca905dcfd0f128e5f4ffe966f3903d7ff1c61fe174e373cfe35a6d83249ec40b4a354d46fa1c90682efe468e895ea3da710838c262e8a47752dc6e7a79fe20051f51180173b58e0aa37b22eb8efee5b6dc264459ce4d135f430cb15afbf8c53f0de894bd2aca1f7ea32b4209a22a075f7b3b18e86f778a9e47
+M = b18a9cd6a0a89578ea773fbfc0767c8ab817cdd585c16afad3600540d056c323d83e7756b1b74e4c2a84df7edd562e011412a0e2eb6b64178a9e04f67550f3081797873f444dbd03d776835d696e464443a0a6f48d509228fe976c54cb82925e8a80ee65c01ad9a5f56784c54192112fbca30a76ce579d3eb6e783643e971d48
+
+ModMul = 9ea62ef634
+A = 55cc58c9d8
+B = 6b49179821
+M = f753311ac9
+
+ModMul = e9ab3a2aa60edd30108
+A = 5134a36c2bad180dd5bf
+B = 2ba6485656d041690666
+M = 9b9cc4409e86c8b0fbbf
+
+ModMul = 621f9b797e866028b7bd1ff828bf29
+A = a202338dffe171c99434d84f3
+B = fb71eee7045b3e3ab5dd809dd
+M = b3e6e8d53b7249df670e3c59c55d33
+
+ModMul = 808d463d06b7b7f98e3cb2783e2196c349d62672
+A = c669426a92d3cb5b316e2b5b9
+B = ccaea3874008dcc92450d8b2f
+M = b04dd2bb325baed1940cd000e8cb2d786009ccd5
+
+ModMul = 872164b92b9426b237858c4cdafe1694f96b0e0e4c19e894a0
+A = c3255cb24a813e27c3dc410f0
+B = b144f39e7c2d33605ba7bee16
+M = f3639f4dfb782f3107eb402fabb5fc878903acb5e02e129077
+
+ModMul = 6124d7d171
+A = 235b938139
+B = 3a56a22a28
+M = 83eb4af4e5
+
+ModMul = 9c006f56095d442ba98c
+A = 207e14237c42e3764e5e
+B = 8a495a26872432fa8e33
+M = d0cf2b8ae5c67d6736b9
+
+ModMul = 97387cfaef652932a230c82de59cac
+A = 82ae0fc5e943af5bb8c4adebb
+B = db1279be12d59ba3a9c036a61
+M = aa36dc1d13390169cd54d711eb511b
+
+ModMul = 32ee73c98da657464c6fed4274df20b099689e00
+A = 9baf08248ee24bcb17714e420
+B = a7f0428147bfe098666180749
+M = ce0bc198331c9ed1d21f0d498326e8185d3d602d
+
+ModMul = a8b3fc0b53df3b92753edecd6fbcc5f4840dad3a44da704e34
+A = b36249e259b303e453757721c
+B = f0c1db50670d92abd93bdc84b
+M = b05cf978bf2dc7e093d7d164e46d547219c480382df32b33d9
+
+ModMul = 2663b741ff
+A = 58c8e7f7f6
+B = c84681fc87
+M = e0a50dcb45
+
+ModMul = 21af3c0b42328f41b81e
+A = 1f79f5b5bf78c9700d
+B = 5bd1734ba0f0e59c2a25
+M = 9ff3fdfb5c089244f327
+
+ModMul = cbc280b5106c2c36cb31ad7e7c986c
+A = cadf6482b769e83ce7f7277dd
+B = f9862a06da1a9c89547b76c61
+M = cc36144c88139ce921d2fd1740bc4b
+
+ModMul = 3813f2fabe016e19fd8e70687ff473651a5fbb4b
+A = 9c51a5bacb5d9f055a9ac2962
+B = bfed5625b21b4e82d1f105a0b
+M = a47977acad7c5deeb683ccd265cb30cb193f22a9
+
+ModMul = 76ff291a02715fc87ebfb3e99153c04e53358dbd7beae43478
+A = 997c4a7b537d9500d73a205a4
+B = c679ce666af284a459ae5a26e
+M = d0d0fd4922953941acad8beb65c00603b19eb44fb8ca51e3c9
+
+ModMul = 1a90c92fdb
+A = 94fa7bb475
+B = 564b0a3339
+M = a1501bdc75
+
+ModMul = 5e7ae5470686bad7996a
+A = c725797912c6c5f30d94
+B = 3a7f4c99ee3f5fa9582c
+M = cc50c8b7408f09a74973
+
+ModMul = 72a15b13bcd1b63747342a6be8f0f2
+A = c33357af48a2df569e3c11ce6
+B = a4b4c5c14d7796adab54b6cae
+M = e22a0fdca62a37f4c8a61c96a429b9
+
+ModMul = 31e179bfbf65b0695dde36a4fb72d131830dcdd6
+A = ce8d3adab8cbf15c332c0b289
+B = 9333f94eeb7d7a86b82becc51
+M = a532a76bd5cff409b580d54d12ef75ad8179b381
+
+ModMul = 8f4b8a585415adff3a7bc35fa88891ba31e4a82672c664fb14
+A = 9a2b56a54bd0727ab4be57ff2
+B = edf1781b4296567990773005a
+M = c5a7c3b97ba00d6f174a019c6d37eda52036c528f351bef0f1
+
+ModMul = 917bcdb402
+A = 55c7dbd314
+B = 997b29ef79
+M = af5b4cbd0f
+
+ModMul = 660c4bb2b771f523a4fd
+A = 43fe52461d5139620a11
+B = 1f8ec4b67de1db54ddda
+M = d0458e215b7e6903d96f
+
+ModMul = 7aeff02c143e4426fcbcf32bd1277b
+A = a2671586369a990dde7829f36
+B = c7ff67937c900daccc0ab1d8c
+M = 8ad9c1d4d3cce681d1ae27c27982df
+
+ModMul = 4b153d57433f0f7276674d3484e9bd0d25227d07
+A = aea36cf51dd2ce06c66b7a407
+B = 80c9fe5bb0afd2bf8b3644f96
+M = 8cc22a67ed7e5a7a2322aaa09ec2be94998494f9
+
+ModMul = 7f8447dd983b113f04c6288f9539e53a2e9cddbca8b2fefcc0
+A = f67636b03821c8f13f21217a5
+B = 8473a29f4ae33f36a0d2c6dc0
+M = b829af37b557c3ddbb5257c8b19144b90708a45a274d6655f5
+
+ModMul = 17fe4644a2
+A = 912611576f
+B = 7a10d36b80
+M = c5fa605133
+
+ModMul = 8159b23d4fd697b4fd35
+A = be2d646e76494439e60
+B = 60fa770d05ebc69772b2
+M = a6e7c940cd749925a85b
+
+ModMul = 7c412dad5c9fff91357bf181caf2bf
+A = 80f476ed5acae75b34ed54c52
+B = fb818e2bdab3b5f4bd84db3d0
+M = d0339f7ee41337d8462d1a9c207d1d
+
+ModMul = 70432c749da4ade2c38237545ebfe6c4c6a92f6b
+A = ee9c92de52210e61adaa6eb4a
+B = 8ab55a85b1abab62d33e75fe3
+M = cd3faa6de4cb62fece4c3f94492d457834a6a041
+
+ModMul = 9fef1c18778a8691c5e71c0b5208e82778e9bfb632da0b7e28
+A = bd162c90bed25e84dd5b6b77c
+B = d887ee03020c5df356f091db6
+M = a2c2d45fe9decd93a0ca3edab8fee46d27ba23fad9b5294d5f
+
+ModMul = 958951bd0f
+A = 12bd0d3375
+B = 668bb65b4e
+M = 9c617dfaad
+
+ModMul = 8a109ebc9cbf86613e43
+A = a3e7019f1bbc35689a77
+B = 3189ecd3fd4ffd0229ef
+M = ddadc50600dff2abc1af
+
+ModMul = 2b4d9f85a398c852b3a0cc82524619
+A = c244fd157267f707319ba6c6d
+B = 8a07018a748992429bbdbf326
+M = bf3813fb54f749ea5627f59ce30e07
+
+ModMul = 28cab7d574e6dc56a6a622f8a7523cbb8dcc5e0f
+A = c9909dcfd3a59a3cfa538b267
+B = 8bbf89cd5a4e24adc2d8c646b
+M = c8f02682b9d480ea98faaca53b747ced33ed0419
+
+ModMul = 69b2dfb3f1d8dbb13e9e479f38edcc427d5968acb7751a226a
+A = 8019266c548982a520ab48eff
+B = d33c3e3b13576dcdb3ffaa796
+M = e6255103732475604df7c6f7ef7e6b49a8ef9e2b0c717925a1
+
+ModMul = 3eaa4c99fd
+A = 6fc42faa85
+B = dd0b4e318e
+M = fd7f22301b
+
+ModMul = 56b6b811ced3433755cb
+A = 145573d17cb0c996c69
+B = 9d3297d5ccc184896822
+M = dcfb3b383506239e83e1
+
+ModMul = 34315b6bc6d3690c28060485ae331f
+A = b963a26973894cfb42fcb2d22
+B = e8523304bbcdff1a0ed4141bb
+M = d7a379aeac7d8cf94f19e7924d35d1
+
+ModMul = 2ec9466e8b3357496f07e37ba24d36a237883846
+A = a75f3904e564997695b6707eb
+B = f9f47bd779834dc1f5fba0654
+M = b3ae5abed45d09c4dc5abcadc3ac9abebe1949ed
+
+ModMul = 88b4d86b2c1e1bd780e8d2499c2221e05fab4f9b7047c2a044
+A = a38eceb9c551f0e69a544072c
+B = d5f8e7c2d534b2b8985bfd213
+M = ff81809b84fb8eed3508ad891d3d8208249d8a902a12d6acf7
+
+ModMul = 172f2e2e22
+A = 1584ff1055
+B = 2e0aee014d
+M = b904cb0bc9
+
+ModMul = 122c10d3200270b9eaa1
+A = 86fd189e62a6dc1e4ba0
+B = 5235635f7b0336f5f235
+M = c93da97d0e95fb63dc4d
+
+ModMul = 3e461e10ac4eb749512097fbf76616
+A = cf4ce10cbca07164f3812f89c
+B = b7e4639c233fbb0f923fb5104
+M = 949647857e1406871593fad5c30101
+
+ModMul = 88117b59d9fed79dd6aaf083ee938215a995a221
+A = 94c888795567d434123d441a7
+B = c60ca79e61a352e34e0f78bee
+M = d2553a7c5dccd639a3927697a2e1af03845f2f25
+
+ModMul = bc5f0076a8c2f6cc8f4e61540d2d6f6d6b13b775b363dcd71c
+A = c170eaddca5295d6ec6272dc2
+B = f94a5685ced7661df2efbd34e
+M = fa6bc46aa05033af72aa42793e9174af2e3ba38992f33572fd
+
+ModMul = 1110cdbe5b
+A = 5db02b38f3
+B = 3369537903
+M = a8863f7979
+
+ModMul = 90fcc5f3a346d3d4ea4c
+A = b93373680ea0feeb31d8
+B = 37f9dfaf0e180be64bd5
+M = d595cc29237d1c19e2db
+
+ModMul = 8623a9997e514cf3c1d06c33c14053
+A = b396f5ede6212f1fdfc7e7b77
+B = 81a1ddc18306f2d2e84030148
+M = a6be32a91b34857842255ef8b1aafd
+
+ModMul = 63f8f0254df06356f5cab8941b77619ad58025ed
+A = 806b2627b08d987438f920bae
+B = 83297039f4aa8efc1a185fea3
+M = bb8a7e7c19be02c25cf5682a0eee655fcd5b69a5
+
+ModMul = 697238dbe3d395e81f20c9fcc8db30c234a1f75f3b2bc27438
+A = 930b04224bc097ac1d8bae8be
+B = b79496a80e45212c4663e5b64
+M = 8ff7e19d967d317c255380411898d73e3786269f09079f19f1
+
+ModMul = cd93b5b8b1
+A = 47a51b2d5a
+B = 86d6ba5155
+M = efb0ad3643
+
+ModMul = 2037821ea789118bde0a
+A = a92215dcae19be637ff
+B = 93b9a3664a406737958f
+M = 9df360b69ed26f610253
+
+ModMul = 3bf11785d28ceb668dc55b870faf7b
+A = bc8758854dc48e057cb6210de
+B = f03ca689620a77ecd8a6f0de3
+M = f3ff0747d6e5f34a0ba4200f579259
+
+ModMul = 7b30b44f75ed12f54136858ce4fe77d00e0952cf
+A = 993cd09f3e46423a8ba2053df
+B = feabee384158032dd013dc08d
+M = cd0b21388cb2033b1e792ec4078334df70b6c8f9
+
+ModMul = 8ce1e17972f1a9d2e9437d0c5219354728a5f31337808d7650
+A = 90e5d18b017118177ffb080da
+B = f8e7e09032574f6c66e623ec8
+M = da795e6ef63ff7dc4baef5c327022ccf65d44e3c4e24823f11
+
+ModMul = 8fcd412054
+A = 2e7f9b1a
+B = 6283de2c9a
+M = 9bff560ae7
+
+ModMul = 57d0d3b79f1e2f3632fc
+A = 2f8cc403de5af54cfa39
+B = 3b798c3ead52878dfb2f
+M = 805e6cbde400d4b4bc9b
+
+ModMul = 23331614e88633af879201f568c359
+A = f21f19da4b20980979a645dac
+B = ea752050b79883dcd69222536
+M = aed3faf4c88f7c4afe257c5ed90599
+
+ModMul = 56dcf9ae1c787e773774df3c8762babb4675a212
+A = 9accf901fa599da05fa6ab5ff
+B = f7f6b9b1d7bae06237532e39f
+M = b5bcd776bb2eb0805ade3c8b47e883962d3cbdf5
+
+ModMul = 61d0ee0786963906a028a1df01f836841ab6d39d88ca2717c0
+A = 8e57680f213d088ff1a1e7db3
+B = afebecc9943b0093f87022940
+M = b6201f68a45265d7e9183c3255feb4c110c05dadbcb13881bb
+
+ModMul = 143ae78a29
+A = 334abb952a
+B = 74203e7a50
+M = c9535a9505
+
+ModMul = 897a2b57e69f5a1469ea
+A = 1ec8ca0ea4fed52bdbbf
+B = 3a6273cab05e478a57b8
+M = dcb33163a8ea42c1ae6d
+
+ModMul = 4a2c10e90e2d37111db79a44d3e31b
+A = a90e7bbd63fc4af6de83029ee
+B = cf09c3dd50b41afc7045e057b
+M = 8ab85d47e4270116a64f97dc4f0f15
+
+ModMul = 70f94276c9d85fd3f71edfaad6051456f754da85
+A = fa3e9ff6e1aa1fb78e51711cb
+B = b115ed197c50b7ec4040ca255
+M = ad63f69ef1346e7549ba71c13b24b279f53bc9bd
+
+ModMul = 861e7ef401866f815b983ba18a612913ecc20a67016d79cfac
+A = fc41a9ce06e882942f751be7a
+B = 881c05a51d1ba8134d126a48e
+M = b12200b39526c33b70e8aa23ebc400dea0d4d8fe42be103d5f
+
+ModMul = 4e0051898a
+A = 2a06523f70
+B = 651b5044f0
+M = 9da4eb09b5
+
+ModMul = cc8274c88d6affc3742f
+A = 9ccf0133f9628532f4f6
+B = c1d80907057be7a67b01
+M = d6e76e362da831f32685
+
+ModMul = 568f15bed5c4405be9dd04673a9c46
+A = dd6029c3196feb6da7f0f4a48
+B = a5f6745f2cb64913d1d3236d8
+M = f62f02c9b9ca8993e3be9a02b444bf
+
+ModMul = a629452d5ed19df040eca26eaca37d82c0fb1d8f
+A = 963c51a9415b03e85ccb09f25
+B = b1cffe333afe44311cb968ffe
+M = ab2128698d498e8d75455033cfbbf4487535773f
+
+ModMul = 814030123025d287aaa8b826792999d72f2d589e0c7f7f3dbf
+A = c3b33f391e78bee97ceddf313
+B = a9136f3af450fdeb245eff425
+M = b6aa9c517eaecb70781e597b907583bbb569e970d229235a35
+
+ModMul = 8735bd486d
+A = 563e15c52a
+B = 31293264e1
+M = 92f4b193df
+
+ModMul = a541f69ca163b288dd0e
+A = a608b48c1dcaa18424b2
+B = 891b0b296e911068b00c
+M = d4140921f4b2c84f1eb1
+
+ModMul = adc1b7cf65967b013d046866b4ed9d
+A = e97941448f65060cf63ecd486
+B = ca68936f76cb87a8fbdd37311
+M = ebbca2482fb82eeca2866057cf1179
+
+ModMul = 44aa9f0dd58d4510a7364e130698b34eda23a632
+A = c11f83f01bb964ffac93a2e30
+B = e05ee40eea39f4538d735193d
+M = b5e8b511738979dc740a6a1f7291cf4561787be7
+
+ModMul = 8b16b82f064f471983c7154abc9f9ba355111bacb90400372a
+A = acff8da571e1c96810bf95707
+B = cdd23e5504cc26d0c34a62b06
+M = f38902a99190ae0b5ef26849a6e943d651925666fea271fee7
+
+ModMul = 193f453197
+A = 8cb3078675
+B = a8fb003a87
+M = b60ff22f4b
+
+ModMul = 849c26c8cf5cae426a80
+A = 5d1e3d2b4d038a0a34be
+B = 34f70325565bf0523314
+M = cbc189f9a732cad8f425
+
+ModMul = 9a4e64ff530c53a4c6c5b6b5021920
+A = f53b81723cf74f520a61e614e
+B = 9d8ac2e6b839143fdd079a2ff
+M = a115375435151798f3644bede9d863
+
+ModMul = aac303a4623e80158af1cb3331965cc8e3184edd
+A = cce0a88606ff962fdc37e72c9
+B = 9840a500a2051625c517104db
+M = b99dafdbd91ec3c05791031df5e193c03d6a441d
+
+ModMul = a31401dfa761bbe82b66b5f094151865b18a4ba75bb9b3dedf
+A = e6f48c027284856aaf3b96425
+B = b4c326f72a6a22fd4b93ba5b3
+M = e57d9608ac6e5b129b2c014958bfc59137f63838b1ba88a4ab
+
+ModMul = 8b0929adbf
+A = 61fdf77ac0
+B = 8892f05400
+M = f12b3766eb
+
+ModMul = 91b57f353307b173679d
+A = 33f8e73752072b4b5cfa
+B = b4c730f79f4f2c07945d
+M = d41be1d8d2e5753e3ae9
+
+ModMul = af04c564adfeb120bc4770bc8c650c
+A = af151333b3d4cd1d29fd801db
+B = 9ccaac44ff91be11b30bdcdd0
+M = e0bd6e70d5f5ce08fbbfd48d43101f
+
+ModMul = 1b8d623796a5065d9e993a53a9587a0fdbea1bbd
+A = a2fd08df2d4eab0cd6d29e213
+B = 92c9d26ae7c215b52199ee28b
+M = cd529f4cfa46f3bd3e7fadf167fdc02f6f881da3
+
+ModMul = 4a8573dd8dc50a4fa39f3579d3869745eb8c1153ca508deefd
+A = 855f941d085305725da617f5d
+B = 8f09b7d2c36e0340523da5421
+M = fd8caa05edeaa81beefa01957eed97a981ab34bdeb6d8c704b
+
+ModMul = 2d278e089
+A = 59d20a1716
+B = 8e2a58bc75
+M = b3d61ef699
+
+ModMul = 2f937ce359d0f6cedd1
+A = 1019d11d26040ffd5b1d
+B = 7cdb6252087423d43e08
+M = e8f537323004447e669f
+
+ModMul = 6567332e25af83089f7458786ab0ca
+A = bf9565e9f8a098894447b58fb
+B = fc867626f268c24cc0ab7bf8b
+M = 930f39183353363dcd822933a438ef
+
+ModMul = 3692e73ad1d91ddc19cad3808eba2c5fc88e2bf9
+A = d0a42ce512629f0ffd233a9aa
+B = 97f6d3c4c655c7353a62d6ac4
+M = eac2ea84851f880214b8f40f881a2e56a6ba6f2d
+
+ModMul = 81df390c9e51b30bd639db15adb464c7cb1d011cb5e260be58
+A = c237eb242c40960861c938c08
+B = ab2f481f0d768eebd90d2574b
+M = 8697d7a28a5f42c9a7b31949b8b568f861142f44fe66c6cd3f
+
+ModMul = c952f9aef
+A = 81973bbcb3
+B = 28ddee3bf7
+M = c4a40993c9
+
+ModMul = 241dd53d93f7bdbbb2ee
+A = 2136eda4495c45c9f96c
+B = e74c4baa8ca3f6b7cd5b
+M = fff4594e7a5f0a1d3e15
+
+ModMul = 5f861ed8b0aa835761613e6c869cfd
+A = bfc5c1572086079f5f5d18d1b
+B = 95902e14923c8010b7e905178
+M = a819c6c109d623f9b845aa23712c9b
+
+ModMul = 5b8ab089c4e4c6804e48a2bc1d218718b3a32598
+A = fbe65d3852224a812c432672a
+B = d57a3f38da966d2471d70a048
+M = b9e6a626d3ad026d14248fc90c882bedd64a1f13
+
+ModMul = 761438baf5b02dc095b7040e082da7b167c2b9ace956284ed
+A = fd91701ed2151f8e994bf4ee1
+B = 88b66e735b76972bccd9db182
+M = 8008b2d1274456aa68dc627b1ec3e1762c6ed2d660c64a1a55
+
+ModMul = cb743c97a1
+A = 9c69ca9b60
+B = 7488f48f5
+M = d67040ed0d
+
+ModMul = 931b2bee1bc30725a31
+A = 650f567b544ce02303d4
+B = 5858da30dd1fae88a675
+M = 91ce30234bb29fb9e833
+
+ModMul = 5b4f262cec958a20390b5e568ccdaf
+A = f7e240e8a077e8e87506db2f1
+B = f8653fe64e3bd414782f51634
+M = fdb8225eefc1620648737d31dfe1f7
+
+ModMul = 4c011d1ddfa30c901793cc6ce74db47584cebbd1
+A = eda8e9a9ea3cdae17bd50b1b4
+B = 992e8ef4a45593e4ceff67876
+M = 95e2f120cfcefbada1058af6c8853cbebedd5763
+
+ModMul = 6e99aa5b8107399848cf24fbd88ed6350efb68d737e505b466
+A = ca6c51ba2f410d09bf71d60fe
+B = 8bdfa8fe5ef3b2ad02bc63c4d
+M = 84daecf412b8c50ad6dfdb546c3eb783dcc6f32003eda914bb
+
+
+# These test vectors satisfy A ^ E = ModExp (mod M) and 0 <= ModExp < M.
+
+Title = ModExp tests
+
+# Regression test for carry propagation bug in sqr8x_reduction.
+ModExp = 19324b647d967d644b3219
+A = 050505050505
+E = 02
+M = 414141414141414141414127414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+
+ModExp = 208f8aa0
+A = 86b49
+E = 2
+M = 30d26ecb
+
+ModExp = 27308229
+A = 17591bb
+E = 6
+M = 30d26ecb
+
+ModExp = 2bdf498f
+A = 21292626
+E = d
+M = 30d26ecb
+
+ModExp = 11317167
+A = 4a655df24
+E = 10
+M = 30d26ecb
+
+ModExp = 2e1b88e
+A = da6b761a86
+E = 35
+M = 30d26ecb
+
+ModExp = 20a12ec3
+A = ea811
+E = 2
+M = 23bc042f
+
+ModExp = c42ced
+A = 1011a6a
+E = 4
+M = 23bc042f
+
+ModExp = 4637d79
+A = 28d9a601
+E = 8
+M = 23bc042f
+
+ModExp = 20e5669b
+A = 72fe6bc20
+E = 11
+M = 23bc042f
+
+ModExp = 142ab9e3
+A = 9a07b9363c
+E = 29
+M = 23bc042f
+
+ModExp = 14c64646
+A = 822df
+E = 3
+M = 30915765
+
+ModExp = 160e35a2
+A = 15ea542
+E = 5
+M = 30915765
+
+ModExp = 2f23a488
+A = 34d2e02e
+E = e
+M = 30915765
+
+ModExp = 28e67f93
+A = 636a32703
+E = 14
+M = 30915765
+
+ModExp = 29bfeaa5
+A = c8646998e6
+E = 2c
+M = 30915765
+
+ModExp = 30959e22
+A = 81dad
+E = 3
+M = 326dd68d
+
+ModExp = 1a1da4fa
+A = 116adb9
+E = 5
+M = 326dd68d
+
+ModExp = 272bf0d8
+A = 2d21ef08
+E = 8
+M = 326dd68d
+
+ModExp = 29f5054b
+A = 76989850a
+E = 16
+M = 326dd68d
+
+ModExp = e6c7b77
+A = b88ee70d2a
+E = 3e
+M = 326dd68d
+
+ModExp = 369605e1
+A = cf26f
+E = 2
+M = 3ce082eb
+
+ModExp = 168a3c5d
+A = 1f82caf
+E = 5
+M = 3ce082eb
+
+ModExp = 125c4bb8
+A = 2e9c4c07
+E = 9
+M = 3ce082eb
+
+ModExp = 1c5fe761
+A = 523ab37f1
+E = 14
+M = 3ce082eb
+
+ModExp = 21703009
+A = dc832165e8
+E = 20
+M = 3ce082eb
+
+ModExp = 1228d1e
+A = a5555
+E = 3
+M = 24665b27
+
+ModExp = 5226af4
+A = 1077bd6
+E = 4
+M = 24665b27
+
+ModExp = 1b14eac1
+A = 2db3a834
+E = f
+M = 24665b27
+
+ModExp = 161727bc
+A = 6bd962cb6
+E = 19
+M = 24665b27
+
+ModExp = 10d61d0d
+A = c10caed407
+E = 28
+M = 24665b27
+
+ModExp = 233da406
+A = b125f
+E = 3
+M = 33509981
+
+ModExp = 24032799
+A = 1656b7c
+E = 6
+M = 33509981
+
+ModExp = 129ecebe
+A = 2e671504
+E = a
+M = 33509981
+
+ModExp = 20c20bac
+A = 4d7a2de44
+E = 1f
+M = 33509981
+
+ModExp = 2e3ce9d3
+A = c53b3def4d
+E = 31
+M = 33509981
+
+ModExp = 12fadfd6
+A = b4cf8
+E = 2
+M = 36e9d4ae
+
+ModExp = 457ac85
+A = 1b1c7e9
+E = 7
+M = 36e9d4ae
+
+ModExp = 31debef4
+A = 3a973028
+E = d
+M = 36e9d4ae
+
+ModExp = 2333ad93
+A = 552b97c45
+E = 11
+M = 36e9d4ae
+
+ModExp = 99ba1fb
+A = 8bfb949cbb
+E = 28
+M = 36e9d4ae
+
+ModExp = 27b691de
+A = 93492
+E = 3
+M = 298fdb16
+
+ModExp = 3c2b70f
+A = 14e7b0d
+E = 4
+M = 298fdb16
+
+ModExp = 1486cda7
+A = 29acff81
+E = c
+M = 298fdb16
+
+ModExp = 11725275
+A = 507489205
+E = 13
+M = 298fdb16
+
+ModExp = 24d14627
+A = e71c55606d
+E = 35
+M = 298fdb16
+
+ModExp = 222b8d14
+A = 9b1a0
+E = 3
+M = 3db59d12
+
+ModExp = 3b8bd47d
+A = 13f4e8d
+E = 7
+M = 3db59d12
+
+ModExp = 17e72356
+A = 334774ce
+E = a
+M = 3db59d12
+
+ModExp = 306447ca
+A = 47079ddd2
+E = 12
+M = 3db59d12
+
+ModExp = 90bef3b
+A = a75d62616d
+E = 37
+M = 3db59d12
+
+ModExp = 1
+A = cddd44f47e84b3276cc36a5c0d742cc703e61c4756168601fbb1b6eb598c161019562344dd56ab6f603d920a12c360b285e6496a3605a2f8d691c3598233ee9366b5f2692554893bdeb67b7bdaf35ab7273ac593145e26bed82c70ba5793bf4bc5cac4c80b01785d1496beede493806e4f4aa89fd8d41de80dd6d0a3e2742678
+E = 0
+M = c95943186c7567fe8cd1bb4f07e7c659475fd9f38217571af20dfe7e4666d86286bc5b2bb013197f9b1c452c69a95bb7e450cf6e45d46e452282d5d2826978e06c52c7ca204869e8d1b1fac4911e3aef92c7b2d7551ebd8c6fe0365fad49e275cc2949a124385cadc4ace24671c4fe86a849de07c6fafacb312f55e9f3c79dcb
+
+ModExp = 0
+A = 0
+E = 8de689aef79eba6b20d7debb8d146541348df2f259dff6c3bfabf5517c8caf0473866a03ddbd03fc354bb00beda35e67f342d684896bf8dbb79238a6929692b1a87f58a2dcba596fe1a0514e3019baffe1b580fc810bd9774c00ab0f37af78619b30f273e3bfb95daac34e74566f84bb8809be7650dec75a20be61b4f904ed4e
+M = c95943186c7567fe8cd1bb4f07e7c659475fd9f38217571af20dfe7e4666d86286bc5b2bb013197f9b1c452c69a95bb7e450cf6e45d46e452282d5d2826978e06c52c7ca204869e8d1b1fac4911e3aef92c7b2d7551ebd8c6fe0365fad49e275cc2949a124385cadc4ace24671c4fe86a849de07c6fafacb312f55e9f3c79dcb
+
+ModExp = 5150fb769d5c5d341aaf56639a7bcc77c415fe46439938a2190283409692f29cd080bfe3433005d98d24718a03a3553c8560c5e9c8ed0f53b8945eb18290e1c1a83d919302510f66dd89b58acc2de79ad54b8a30d3e1019d4d222556beefca0821b094ecf104b5e4cfce69d2d520d2abf54f3e393d25ed3d27e8c2e3ca2e5ff9
+A = ead8c5a451541c50cab74de530c89376d9a55c723e0cac3c84b25f0093c08a2961e49ab48966361c42c9f99111587252d98395b76788400d75c66ef208ea2767a28d6f8dc3a859f39c95765d57f139e7fc14f47c908c62df051e7216d379f52028843b4d82ef49133cce8fe671ae179423ac8da5be43b01caaf425cd969300cd
+E = 8de689aef79eba6b20d7debb8d146541348df2f259dff6c3bfabf5517c8caf0473866a03ddbd03fc354bb00beda35e67f342d684896bf8dbb79238a6929692b1a87f58a2dcba596fe1a0514e3019baffe1b580fc810bd9774c00ab0f37af78619b30f273e3bfb95daac34e74566f84bb8809be7650dec75a20be61b4f904ed4e
+M = c95943186c7567fe8cd1bb4f07e7c659475fd9f38217571af20dfe7e4666d86286bc5b2bb013197f9b1c452c69a95bb7e450cf6e45d46e452282d5d2826978e06c52c7ca204869e8d1b1fac4911e3aef92c7b2d7551ebd8c6fe0365fad49e275cc2949a124385cadc4ace24671c4fe86a849de07c6fafacb312f55e9f3c79dcb
+
+ModExp = 1
+A = 935561297d1d90255aef891e2e30aa09935409de3d4a5abc340ac9a9b7dce33e9f5ce407f3a67ec30e0dc30481070823f8542463e46828d9cafb672a506d6753688cbad3d2761079f770c726c0b957071a30876c4d448e884b647833befbcd6b582787bf769d63cf55e68c7b869a0b86374f8920516cf5d528f348b6057450a1
+E = 0
+M = dcc24236a1bb94c71d9ec162a6aa4697b932717e82b667cad08b6bd1bbcbddf7cd167b7458de2b0b780486b39574e749d6405f9ede774a021d6b547271523e9e84a6fdd3a98315607ccf93356f54daa9c75e1e311e1672d0dc163be13f9ed6762f7dd301f5b0a1bb2398b608f40ac357ae34fc8a87d4fef3b961cbdb806d9061
+
+ModExp = 0
+A = 0
+E = bb552be12c02ae8b9e90c8beb5689ffefe3378d2c30f12a6d14496250ecce30317c642857535a741642c3df689a8d71a276d247ed482b07b50135357da6143ac2f5c74f6c739c5ff6ada21e1ab35439f6445a1019d6b607950bffb0357c6009a2bfc88cd7f4f883dc591d4eb45b1d787e85aba5c10ee4fe05ea47bf556aec94d
+M = dcc24236a1bb94c71d9ec162a6aa4697b932717e82b667cad08b6bd1bbcbddf7cd167b7458de2b0b780486b39574e749d6405f9ede774a021d6b547271523e9e84a6fdd3a98315607ccf93356f54daa9c75e1e311e1672d0dc163be13f9ed6762f7dd301f5b0a1bb2398b608f40ac357ae34fc8a87d4fef3b961cbdb806d9061
+
+ModExp = bbad67352704a6321809f742826bf3d1c31c0ad057bf81432abeb30dc9913c896c03e69eb1cde6b78ffcb320c4625bd38ef23a08d6c64dc86aec951b72d74b097e209ce63092959894614e3865a6153ec0ff6fda639e44071a33763f6b18edc1c22094c3f844f04a86d414c4cb618e9812991c61289360c7ba60f190f75038d0
+A = 855144760f2be2f2038d8ff628f03a902ae2e07736f2695ec980f84a1781665ab65e2b4e53d31856f431a32fd58d8a7727acee54cc54a62161b035c0293714ca294e2161ea4a48660bf084b885f504ad23ea338030460310bd19186be9030ab5136f09fe6a9223962bce385aaaf9c39fe6ed6d005fa96163fe15cdfa08fc914d
+E = bb552be12c02ae8b9e90c8beb5689ffefe3378d2c30f12a6d14496250ecce30317c642857535a741642c3df689a8d71a276d247ed482b07b50135357da6143ac2f5c74f6c739c5ff6ada21e1ab35439f6445a1019d6b607950bffb0357c6009a2bfc88cd7f4f883dc591d4eb45b1d787e85aba5c10ee4fe05ea47bf556aec94d
+M = dcc24236a1bb94c71d9ec162a6aa4697b932717e82b667cad08b6bd1bbcbddf7cd167b7458de2b0b780486b39574e749d6405f9ede774a021d6b547271523e9e84a6fdd3a98315607ccf93356f54daa9c75e1e311e1672d0dc163be13f9ed6762f7dd301f5b0a1bb2398b608f40ac357ae34fc8a87d4fef3b961cbdb806d9061
+
+ModExp = 1
+A = 9d92629c1ab181c50c31619e8acd0d235a1f5fc7a0bef4d4fd54b4f1968d45921f8522efe88e69c6c14c576c564592b9feb00d1554b88b038934eaf4a8ce81a2582732387490181ef158360c8b2d9ccb326ffe043f776a50cb8202837f08ca743b562eefa007150ab7012c341b16248478d4775c02ad71ea13d5e82b71e2d600
+E = 0
+M = cd607549668469b792f495c141e500871880b0611c8004293a561ec7f9ab6561f8a9b90872742386adafb5cd1890e8204ae12aec529cca0a9e382c96439137f09de9973b12c8492c62847e107deabb7dd946ffbb9d0ac73b462c481092bd65326a17f21d8d6527c47a5dba50aaa20c7048b8788a49eb3ea5f29bd5cfce24eb3b
+
+ModExp = 0
+A = 0
+E = 9f43dcb641f3ecf4dbc97450f2bdf3b7ec6a2f3e8e96bb1df2bf34b8d2d78e1a9018d04d960ffd0e932cfc60d3b9b923e3f9f29b3f3d61cae3a9f7245078143475c7fcb896ff200f7d94c4f2708bb42750e37c185a31c876814e4f06a00771707654e1da2fb69c16b6500b16385e3b933e2276ad3569977473f699b1c7926c3b
+M = cd607549668469b792f495c141e500871880b0611c8004293a561ec7f9ab6561f8a9b90872742386adafb5cd1890e8204ae12aec529cca0a9e382c96439137f09de9973b12c8492c62847e107deabb7dd946ffbb9d0ac73b462c481092bd65326a17f21d8d6527c47a5dba50aaa20c7048b8788a49eb3ea5f29bd5cfce24eb3b
+
+ModExp = 24eaead5b57883c2f454928f8edd470a344bfe07a953194f7d635d705ef13ddfc64140c8ad6f363d4c828e7c7891a6b6d4df37335de4552c319dafd1c06d1f743240082a3535df4da1475d3eea3fead20e40815fd5a0876c881c162ab65a1eda494280c258901ca953d1d039a998bf0e9aa09273bbef4865f3054663b72d75ff
+A = a31618b4532f53729ba22efb2221432fab1dbb70853d6a1159b42fd19fc949965c709b209de106a652aa422d88922ce51dae47f7f6deaf0055202e13db79ee84fc3d3c6f4c003ef96597c49d6895fa53c22ac9e4819f7048146b5272f6279424fdb389819a0b251c823c76f4bebf4f1246de455aafe82a0d34454f5039e90839
+E = 9f43dcb641f3ecf4dbc97450f2bdf3b7ec6a2f3e8e96bb1df2bf34b8d2d78e1a9018d04d960ffd0e932cfc60d3b9b923e3f9f29b3f3d61cae3a9f7245078143475c7fcb896ff200f7d94c4f2708bb42750e37c185a31c876814e4f06a00771707654e1da2fb69c16b6500b16385e3b933e2276ad3569977473f699b1c7926c3b
+M = cd607549668469b792f495c141e500871880b0611c8004293a561ec7f9ab6561f8a9b90872742386adafb5cd1890e8204ae12aec529cca0a9e382c96439137f09de9973b12c8492c62847e107deabb7dd946ffbb9d0ac73b462c481092bd65326a17f21d8d6527c47a5dba50aaa20c7048b8788a49eb3ea5f29bd5cfce24eb3b
+
+ModExp = 1
+A = a8558e7f455b27c0c46d7d0862eb409cdefbeca945e0284b5bf425b7ac0f3d316bc365594cc1639decffc621214d61479bc75135120d4ac09ea8b742ad7ec1822091b62b1c6f564fe5e2f4f5b7def92cbaaa9a898549207ab01b91c2324fbd306a87f7d6379b6fb6493c5fca76729767f136120da9c90bdc7d364f7d242d5acc
+E = 0
+M = 88f3c87ac5e3272a21b8a858da640d6939fb8113a95412c38663a0f352686d69a5d7927e60b484b9fcb8ef12978fe25ff2ebc9b61c5450e04222ef20ba3cbbdc5ec45581ce0f58e10be7bb9de7fa08752303a7a1db23b2ac9c6692ec63bf09ecd6639e06c5491ba568ea886620d71da32d329615f0e1443a75d09ae35b8a2d7f
+
+ModExp = 0
+A = 0
+E = a5524b41dfc6b570df1d8f6633ac7777c1131abe3a99c6166b0d29d3b8883c41b00a0c53cdd6f42820bf05c810b6ec53e77a8c1b9344ea0c91d4f410a2f204c369f3db33bf8c88217fc2cf802a9d9bce8119242d8e781875b85431be170076498c0963574ee423551aec9557e2fc672ab1ab5d0cbb1c400535df9481e7934d8f
+M = 88f3c87ac5e3272a21b8a858da640d6939fb8113a95412c38663a0f352686d69a5d7927e60b484b9fcb8ef12978fe25ff2ebc9b61c5450e04222ef20ba3cbbdc5ec45581ce0f58e10be7bb9de7fa08752303a7a1db23b2ac9c6692ec63bf09ecd6639e06c5491ba568ea886620d71da32d329615f0e1443a75d09ae35b8a2d7f
+
+ModExp = 292f0b39ca0f1c850b1a00cffd2d54924fcd5fc7e7504c9d593e6c0ff74760b1f4bdd81679fe06c50248336f3108c593fa111072ee87d0fcc89a63243a1dc89044503663eee9bc18f51c3e0193d9108303e12ac90ff78f6ec752a4386af09c42db524a7cbe9a3d4fcccd56c34d283bcc9debc17158b5fe8df0c1888a9841bf8f
+A = b4fde2908745ff92cc5826a27dcfdda09e8fffee681844fa4c7f1354d946d5d84e0e0c7a4a4cb20943d9c73dd707ca47d796945d6f6b55933b615e2c522f5dfc33e0652917b4809bab86f4fa56b32b746c177764895492d0a6a699812b2827fe701d40ef7effd78ea8efe1cac15ff74a295a09614bf04cae1a5017872ba22efe
+E = a5524b41dfc6b570df1d8f6633ac7777c1131abe3a99c6166b0d29d3b8883c41b00a0c53cdd6f42820bf05c810b6ec53e77a8c1b9344ea0c91d4f410a2f204c369f3db33bf8c88217fc2cf802a9d9bce8119242d8e781875b85431be170076498c0963574ee423551aec9557e2fc672ab1ab5d0cbb1c400535df9481e7934d8f
+M = 88f3c87ac5e3272a21b8a858da640d6939fb8113a95412c38663a0f352686d69a5d7927e60b484b9fcb8ef12978fe25ff2ebc9b61c5450e04222ef20ba3cbbdc5ec45581ce0f58e10be7bb9de7fa08752303a7a1db23b2ac9c6692ec63bf09ecd6639e06c5491ba568ea886620d71da32d329615f0e1443a75d09ae35b8a2d7f
+
+ModExp = 1
+A = e2845c572b46496ac158a731f612fd40ef626fa7134755c25b1b7614f4d7b29164e6142ddb7985e4c7ebc575855ff901e95927fe98a5aea2ad3a4720c75782323bea1518b2c57790f44efd9411be4e95b3896bad1e73c59658290b309e5a7eb5ef8be08125063e57336b80f17eacee88966d12bbaaa15a25929c82e027cf696f
+E = 0
+M = cf0dee80177869a532f0c6c3a0bda3aad79bdb6b70b6c227b32d75c26e394a90c1f2a6c2bb841ba9f6556b15654a79d8b1dd0c90709a093497bf40be0807cdbb378a74de5893c25067224d3ea8d37387ed6c4a981138853cb89caa9ce6cd0f6a1e95de24d558e90960f93844db4d01e372650350d45a9d34a36042b4d4b9e78d
+
+ModExp = 0
+A = 0
+E = a55703a72ca3f6074b939ed3d748196a684a3c8e411c2b39a9beb98993b6eb7ea3fa16f41bc5b5c3710b91c0fc74a8072793052f872f61695db3a2df872eaa427a110f1a8d568c85d58bd350d0df8eced7a10be80f7567360c1a8047b9c44aa2967cd0d9dd2caea2c1492358c2db4f0214da343fdf2e34272865dc5c63be2ae4
+M = cf0dee80177869a532f0c6c3a0bda3aad79bdb6b70b6c227b32d75c26e394a90c1f2a6c2bb841ba9f6556b15654a79d8b1dd0c90709a093497bf40be0807cdbb378a74de5893c25067224d3ea8d37387ed6c4a981138853cb89caa9ce6cd0f6a1e95de24d558e90960f93844db4d01e372650350d45a9d34a36042b4d4b9e78d
+
+ModExp = c90e4c69df92e26549b016950b59080947f5403430698e128477782480dd70be96bed2b9042dd8c708eb432e02710555b97af11ce6fa9b53395022851c32d1f53f04237fb0763563b440ca6e81a50d909d907d9c26b7d3c420dbf88f7dadd488666848135f8cdc608dcfb0691989289fb54379c2e84c262f9765f68c012ca1b9
+A = 882ea1b9b6c79a3b1bdfd284658cb6227ad825e0178cab713c7413c2ec34f03cfaec470c4f5c521f5e9899a2123878ff0f5b36a4196c08ad1b04d03746c4bfb5d126f5eefbfe172627d6732710a8ac8890cedbd4fdef69a19f2b3253a5aa0e5dd5484f72d59b17bdd1dad3db209a3ab839368ed3975069685911d7b35e41a9e6
+E = a55703a72ca3f6074b939ed3d748196a684a3c8e411c2b39a9beb98993b6eb7ea3fa16f41bc5b5c3710b91c0fc74a8072793052f872f61695db3a2df872eaa427a110f1a8d568c85d58bd350d0df8eced7a10be80f7567360c1a8047b9c44aa2967cd0d9dd2caea2c1492358c2db4f0214da343fdf2e34272865dc5c63be2ae4
+M = cf0dee80177869a532f0c6c3a0bda3aad79bdb6b70b6c227b32d75c26e394a90c1f2a6c2bb841ba9f6556b15654a79d8b1dd0c90709a093497bf40be0807cdbb378a74de5893c25067224d3ea8d37387ed6c4a981138853cb89caa9ce6cd0f6a1e95de24d558e90960f93844db4d01e372650350d45a9d34a36042b4d4b9e78d
+
+ModExp = 1
+A = d7a99e65b8af86b1c51d851f0447e43cd4f343cb0ada7236283e69aa7ebd383826acc9809e5dbc4002d0f2430022cb026458189db3805ce2de1142a31ba71a6c064ab51f0059eb4b931b8bcbaef023c38d57aa5f3e14f5df77e547fc028702071b58bd57338be1e1e4f98d3553484e4de359cefa29c5f58d3fa5d823f389dbef
+E = 0
+M = 8315dacf124bd473c578946347e83d1b20c750a7d9533d6215591be40bc78bcca77821f8c8f95375bbd6372515ada63d22bed2fa49bd6fabb0040c538d08db25b09d2fda02a93ab086cd1c27df93c37ee9c6a0527d089179b8f92b5dc3acf5ef1c75906fb80b03f5c2442a7a4088640f66376575ecfa4c697c1a571397ee5a0d
+
+ModExp = 0
+A = 0
+E = 95793fe33696f53e37498b2b65aaf27079e27acf1da97dda2c3e0803e8a02139f574e04ee03f7d1ddd029f528e3f3644515ad6f10f0beac2767f23d9cd8a8b9b6c6e376e36b64a0ae2711d7d31a5a75011641935b503110edbefe9f0ff2da27b5c5f6bb8cc151fdc86f67191bb99160c6cacc86ca368d5bdfafd3f3ff5161b1e
+M = 8315dacf124bd473c578946347e83d1b20c750a7d9533d6215591be40bc78bcca77821f8c8f95375bbd6372515ada63d22bed2fa49bd6fabb0040c538d08db25b09d2fda02a93ab086cd1c27df93c37ee9c6a0527d089179b8f92b5dc3acf5ef1c75906fb80b03f5c2442a7a4088640f66376575ecfa4c697c1a571397ee5a0d
+
+ModExp = 186c50ae259aa0fd31859cbcfea534e626a254de33956d5d719334bb32e7cf37cf199a21f079a5b90497228994d05efe19ccd8c769cd81f896286e8ae557cacd1630a928c629ecdfece29ab3697794aa707734e007318fa7029b050bb09ebbe6986187c6ca843f55266d275620b3f0fec0ad5f847ce8b314d929d128b33a249e
+A = 9d5e345793faddca9867f23eeddf6816c1e837f7a2cf96fa077212514acb6be87ac01a237d8f2f1d07d27a8ddd1b0ae0d97e1bda4f205a89435017284cdedea3e407b1b940d6f52112b6359b3e86e4c83074b17c210ae2c8856b42b169b4a7a6dfa65b368a7959496cf9bb1ee93d019dbd79101830e3f5ed08604ab90890b914
+E = 95793fe33696f53e37498b2b65aaf27079e27acf1da97dda2c3e0803e8a02139f574e04ee03f7d1ddd029f528e3f3644515ad6f10f0beac2767f23d9cd8a8b9b6c6e376e36b64a0ae2711d7d31a5a75011641935b503110edbefe9f0ff2da27b5c5f6bb8cc151fdc86f67191bb99160c6cacc86ca368d5bdfafd3f3ff5161b1e
+M = 8315dacf124bd473c578946347e83d1b20c750a7d9533d6215591be40bc78bcca77821f8c8f95375bbd6372515ada63d22bed2fa49bd6fabb0040c538d08db25b09d2fda02a93ab086cd1c27df93c37ee9c6a0527d089179b8f92b5dc3acf5ef1c75906fb80b03f5c2442a7a4088640f66376575ecfa4c697c1a571397ee5a0d
+
+ModExp = 1
+A = e6a079bdf7b0638d50b183475e9ddfd5cbdebfb29f5fae8e9be402a0bd36085737b556492ea7fb4b1000ae9ce59db66098129b757cfb29224275fdaa46b8b7eb18a93ca7d3e446dc38c734b683d7ba7927b008d993aab01f44239d3c76be76d1503908e9b5e73b36c43ae0771368b01f39c042693bd92c4fc50810f059e1b332
+E = 0
+M = 81dd561d5d5327fc5ed7c9236b5fb21ef713c6d5e36264ba65ccc801b8eb107b714aad65bb503bb1f4721c0a6f97e5ab89300f049f42a4616ae43d29c089c286687484d18629c1be1b5befbdd0b3cfc86b1d28add89df4cc5e68dac3f56f2490a9068ca9c634ec258c030ec5023baa9133fd2af32fd1112895f9da549d410247
+
+ModExp = 0
+A = 0
+E = f0460c5ca9b3a5c2d1b93c201d020dc43e1c81d1daba432e2cd310902da23eb81a5172b0b357484eb8fa2c04c270893b8198c8ad35453405dadaf05195b3aeb5ec0ccacecb4b6227ca43b27b97e240a4148a472670ed60f304302f757495fd4a91af0fe09800db0c3043a6ae213bee6703ad80523ca433d99ca0eab1e0b7c929
+M = 81dd561d5d5327fc5ed7c9236b5fb21ef713c6d5e36264ba65ccc801b8eb107b714aad65bb503bb1f4721c0a6f97e5ab89300f049f42a4616ae43d29c089c286687484d18629c1be1b5befbdd0b3cfc86b1d28add89df4cc5e68dac3f56f2490a9068ca9c634ec258c030ec5023baa9133fd2af32fd1112895f9da549d410247
+
+ModExp = 60719701a2dc0bcde281a93ce0b8421d1a718adee43c1b5d9fe9e697a48ab3db4f9f33c73cff305ab6b6c300c149b05c6b289dce4580860dc56bc59de81ac074ecebdc65aa3ca040b44e5b3c80ddba1658d78b9abbc4c77e5f171f5582e70ab4438a8e1e2f062d618c4ad09c70c73b5b5fbc9f8f0bbdf1d530a933b705f85af8
+A = e1b400cd3b1f2f1c6b437adfdb970d2c8108f1b39bdbb13582179552011c6c97cba6bff2c463212b7f62776aa3e3aff9f175990e79395e819c144350b0a23d61638d500ecc97726b098e1af334aece23a851c718612442c04eb7b3805a24cc8f5b90042145eb5e5d6a408092832b6bbeb8a621419a9282fb5c075f41c7f1fdc1
+E = f0460c5ca9b3a5c2d1b93c201d020dc43e1c81d1daba432e2cd310902da23eb81a5172b0b357484eb8fa2c04c270893b8198c8ad35453405dadaf05195b3aeb5ec0ccacecb4b6227ca43b27b97e240a4148a472670ed60f304302f757495fd4a91af0fe09800db0c3043a6ae213bee6703ad80523ca433d99ca0eab1e0b7c929
+M = 81dd561d5d5327fc5ed7c9236b5fb21ef713c6d5e36264ba65ccc801b8eb107b714aad65bb503bb1f4721c0a6f97e5ab89300f049f42a4616ae43d29c089c286687484d18629c1be1b5befbdd0b3cfc86b1d28add89df4cc5e68dac3f56f2490a9068ca9c634ec258c030ec5023baa9133fd2af32fd1112895f9da549d410247
+
+ModExp = 1
+A = 9dd1e6f2d3ff24096b54e0ebf0f10e283e484a1cbafc0431adda1296ed97692f3ba99440fd4f67c96dd8bab850e1123361c99362df9ea205ff8e90d1b329459f54730992d5a360e46fcc5f5a909e691abb9a06613d6991bd7c2aa609f0d7b441d7ded0c07b8c394327672d38a905efb2d76aa3be5bb14d0c002aa37e287aee79
+E = 0
+M = fda6f9d8588e3614f5a68ce867a5619f6ddbb8d64450ff402e1c4f1a08b518f79dca21e5983c207c5b7324c16895a1e9f1282fc6cf60b0645f6b02b652ed5b129e67c939e854ab492dec30ea878c3edde10a4b7d1d14c57100c6cbcc5fc085a0d7308715ed132fb917251919c727487fedb66500d5610b0014a43419acfbb92f
+
+ModExp = 0
+A = 0
+E = 8622c37631e428402343dccf8ed09d47b3f4201e95058910289a62707c3ce0b7113c390056cc4796cc9893e471b12cb3f63f900f3356ffd25c8b2fed6f6a7fba2c684eb241ca706c76cecbf72473d8a58c02338e40714b5610465cc319f0a529a7aa3898d9e638b247abd1380c6e8f7fa210c9f1a1a2164db6db83a6bba79436
+M = fda6f9d8588e3614f5a68ce867a5619f6ddbb8d64450ff402e1c4f1a08b518f79dca21e5983c207c5b7324c16895a1e9f1282fc6cf60b0645f6b02b652ed5b129e67c939e854ab492dec30ea878c3edde10a4b7d1d14c57100c6cbcc5fc085a0d7308715ed132fb917251919c727487fedb66500d5610b0014a43419acfbb92f
+
+ModExp = 86fb0b8dc161c41de2adb0f3ddcc8ad49c1efd729a52793a3ac987d4011c9c1dadb18657dca718df75c8ddcc49d60f152c46ab85ae9076ee7bfd405679a7da3a5195a1bbfd7d2b998c7b135ea91f8c445cbafe1276fa502c2a85477716829a2e0d24ba02623405a3654bed8f355bc7ccdb67c3f9a01e249e358b60d7699498a9
+A = 816610e6018ca47074d55750dd16a281019dbf95dc752605794cbb8ea8d75775317ce685737859728320b529fb3b4414b40bf3a93d08d8994a21ae54682cc1c357eb529837a7b0129a0843eebd9341c9bee3a8ae30475bdbff517e885a0c9f2b6a680643bd981efb53bf9dd49f3dc3cb757e117895fb34b1b4336d9bf8384558
+E = 8622c37631e428402343dccf8ed09d47b3f4201e95058910289a62707c3ce0b7113c390056cc4796cc9893e471b12cb3f63f900f3356ffd25c8b2fed6f6a7fba2c684eb241ca706c76cecbf72473d8a58c02338e40714b5610465cc319f0a529a7aa3898d9e638b247abd1380c6e8f7fa210c9f1a1a2164db6db83a6bba79436
+M = fda6f9d8588e3614f5a68ce867a5619f6ddbb8d64450ff402e1c4f1a08b518f79dca21e5983c207c5b7324c16895a1e9f1282fc6cf60b0645f6b02b652ed5b129e67c939e854ab492dec30ea878c3edde10a4b7d1d14c57100c6cbcc5fc085a0d7308715ed132fb917251919c727487fedb66500d5610b0014a43419acfbb92f
+
+ModExp = 1
+A = 9edfce4691f46eadaa2043c7b1092b831ed50f3429f0bca02f985c0b77c686d951be84d772ae4b55f08935bed6e3206c8441574f215736b5c1c1b7595b3b789b55cf56db83741b10144d6767ba2b97b23a5e83504c60e06ab22834b0145655aa0463108317a379cbfc8a93de8a66925a999b8b02bf88dd85fb9898cefe9c95c8
+E = 0
+M = dcb68f6aa530ae9b31d078e2e82670adcc98228e7cf1aa59f81e66426ef14b1591b833d889463564c75b5fd5551ea295a0da581dd80f62c7008ff0f26a1c9f4f756431d48198af157149be8698336b306b0a8b8635d3fc2c4c2194ecc4d2af31ca1892917cc2e621d702eaaeed0d9a0c3dca575451eb8bc5487e313988cae745
+
+ModExp = 0
+A = 0
+E = a3be10ef04535fca6784e5dbf3733d677dedd50fabbc3a860496628950b4747a328c2ce0d903cbe1e700f0af30f59fb917202257815097a2b516df5d0a82642faeffdfc3b7883766c78fc4be5901ebef891a9ca27f3bcf00960729e659bb3fddd54a19ce628e95ab86e4c7a168588bc9f67b05dd21a583acd8dc36e615945648
+M = dcb68f6aa530ae9b31d078e2e82670adcc98228e7cf1aa59f81e66426ef14b1591b833d889463564c75b5fd5551ea295a0da581dd80f62c7008ff0f26a1c9f4f756431d48198af157149be8698336b306b0a8b8635d3fc2c4c2194ecc4d2af31ca1892917cc2e621d702eaaeed0d9a0c3dca575451eb8bc5487e313988cae745
+
+ModExp = 442866609915aa6f1bae9dfb59e721e1b63f42c0f75fbf0a88344120fbbd7aacf15208fb7c9d8bb8477d553cbd826d7e685ad764a8423e81c2131c040ee83a03cab8d5ce50866a941b48c78e9f1330794d908562d4141cfbf26e8c80c69551339eec41e37e2b37b54330f7bd75748f8d26d56ab9eb3b0c127540484c6445a7fa
+A = 8ff65e2cbcbcd8697cc3ce9a26855d6422ac7eb4e66500648c08be697e005cc3c854a54cfab91d43489cd60be8b516a9b3c9688e5e009a1689c6b164a133859a5464ef422c86344fef42cc477c9df27768377c126a066d1b62f593b7f6d6e906feaee16addb7cfbfc043d741b7dc81a87c17f167b7b8ef1b1fb3dfd1eb14102d
+E = a3be10ef04535fca6784e5dbf3733d677dedd50fabbc3a860496628950b4747a328c2ce0d903cbe1e700f0af30f59fb917202257815097a2b516df5d0a82642faeffdfc3b7883766c78fc4be5901ebef891a9ca27f3bcf00960729e659bb3fddd54a19ce628e95ab86e4c7a168588bc9f67b05dd21a583acd8dc36e615945648
+M = dcb68f6aa530ae9b31d078e2e82670adcc98228e7cf1aa59f81e66426ef14b1591b833d889463564c75b5fd5551ea295a0da581dd80f62c7008ff0f26a1c9f4f756431d48198af157149be8698336b306b0a8b8635d3fc2c4c2194ecc4d2af31ca1892917cc2e621d702eaaeed0d9a0c3dca575451eb8bc5487e313988cae745
+
+ModExp = 1
+A = fe9f77f7d0475e00ec964c0effb9b8e079c32e376ce77a9c40ce4018c3df44a77b4f294d9565502b2b79accb30cb58dda6d15e1543b6d4a53296543ed11c7f51baab60283ef03fae37dfeacb431392487ec2839551a933895c4dbf18844f7b375d3e6f558d3c39993cea1bbf7fb743a6a07bd3753c03eb7298811476d7f3ff1d
+E = 0
+M = e7a96cf6fa930f73c8bdc2726bbba246001a9d27f39cc2b978c99dc6f15af0e8aaf26b565302f1112e607e2df4066948baba931b89cd9bbdea2072e05b9a4968fdf282c43d997987c3a3a0434e925a679ac81f316b7a7b724b79be3d6888b66f4512759bf66cfaaa88b9513dd27a44aaea75437268a014c4eb50ba2e50093511
+
+ModExp = 0
+A = 0
+E = a0bc148ed50a9b54036bb8fa1f214979052ebd47db8b347af3bb03b806bb457b468ba34781f8a25f289a7a90af4903dc14809a166df2f4c3527de2ea6911cb1afb9071a4afbb522a7d50634d66fd584c73f32d05217dc9f7f16394c68a692a953492ca85f89cc11da95fd8cac6231647923ced48a1b3b0ee68c010286d452836
+M = e7a96cf6fa930f73c8bdc2726bbba246001a9d27f39cc2b978c99dc6f15af0e8aaf26b565302f1112e607e2df4066948baba931b89cd9bbdea2072e05b9a4968fdf282c43d997987c3a3a0434e925a679ac81f316b7a7b724b79be3d6888b66f4512759bf66cfaaa88b9513dd27a44aaea75437268a014c4eb50ba2e50093511
+
+ModExp = 91fd879d02f95a9f40fcd1037726f73892caf84e9b43b4aa4126d9062a0d22c464e7af2fbd91aa849612d99d9519b724a7fb1cb018fffdcff321d883ab2519953c9f174f09dd8f13ac87339887385966eb4a94842276637b2c36c0a5036b1d3bbea438bc6efd4b4851c7ec06879d60694df894717569bcd31c4b13d80df6cbca
+A = cdec5edc1cb3ea974342b85aabc0f9385cf877ca328747d40dd4d297623ad69ab6582653faeed5aef225208305135cfbee32e066cb43e18afacea3a32acc8aabbc49617ac33e741651924ae56dd6aa044a12a1ea50fef573b5befb2f4b21b9cf83ab2aaa6fd153580a0761666ade8fb94f202a3c3dc4f33297eabb4564374168
+E = a0bc148ed50a9b54036bb8fa1f214979052ebd47db8b347af3bb03b806bb457b468ba34781f8a25f289a7a90af4903dc14809a166df2f4c3527de2ea6911cb1afb9071a4afbb522a7d50634d66fd584c73f32d05217dc9f7f16394c68a692a953492ca85f89cc11da95fd8cac6231647923ced48a1b3b0ee68c010286d452836
+M = e7a96cf6fa930f73c8bdc2726bbba246001a9d27f39cc2b978c99dc6f15af0e8aaf26b565302f1112e607e2df4066948baba931b89cd9bbdea2072e05b9a4968fdf282c43d997987c3a3a0434e925a679ac81f316b7a7b724b79be3d6888b66f4512759bf66cfaaa88b9513dd27a44aaea75437268a014c4eb50ba2e50093511
+
+# Craft inputs whose Montgomery representation is 1, i.e., shorter than M, in
+# order to test the const time precomputation scattering/gathering.
+
+ModExp = 9442d2eca2905ad796383947b14ddfcc341f5be8fec079135c36f6f0d9b8b2212f43e08bf29c46167ff0fe16b247cd365df4417d96cc31c94db1cf44b73b0ee3ebcc4920d9b0d003b68e49c1df91e61bc7758a8a1d2d6192ff4e1590b1a792f8be3a1b83db3ad9667d14398d873faf5d885ec3a2bef955026fae6dbf64daea2b
+A = 3a4b4c57e62c5e9d1a9065191f8268fed9d5f6f424d071acef66f0662b8210f4c029ed991512e40c9c912043c816d2c4c5b53fa0e5c253e16808aad4225130dafbbb89fd4f30cdfc1c2f2179b636a7ddc4be579795820b4b9377637bd8a21a0ef5a90d0e0f865321eee23d9be2a3b7320b4012d02941b892df2c40bdc85c1898
+E = a2c56ea1362511cac0301918e15a9afe7d37edd438a5c3538d258ea01f0a6df758de07111e868b3ad8fc89b629b4955d78a1b3af902be1806410ddde25ccc6a196ba5949395c1ad5d8725b18815dc1cd5ac1c7dd17773f571e3f2e628255af14476e0494be23a4a4dfd18e23142f33d7a59c236fec61660e360d9676a747c69f
+M = ede35a3a7afac817d413373a2032abbc067b1493f709ae6e1282ee5469743391d891b904938857168802b7872d3cd7ac18ab249a9e540a86f970b1d0f310a4cc29df1cc9d4063d98c554f1a32f4ca5eba3523cdfb142e0fc609907c7a92bb0187009d97ec471db3545f42dd5fd29c07b7816085d09477ba31fcf90084660116d
+
+ModExp = a7f5844fa9e7202d4b70ee252c9846e63d3d091b0387768ded872cec53458e19df0d9b4960226e269b8ca5dd4c4eda423a67b6dbb48235c08c12c6c7c78db47287756d3ed9cecb9232f7d18d5d80b9676cb68ba4a290c97e220beb1a069976b5e6022a4c1e5ddbeec86b62dda24ffea1deda37695c9f61a8817218e6370c0679
+A = 7d6d0cc947ceb949cdc4e9e1044f5deca5bb05a491041e0d85bc4b92a0944a57c72845fad91e59010c61ad1712bd2f612d53a846a044632262a9f2e3373b062fde2484e0c165ff947f2469f743ab6e2e5e13c640fc4029b1c9213eb8473c674e7f9e95a4a5c5636d4656c1e696962340d77b322daba47d6fc894f2a2cd9e0afc
+E = b78012afe806e2344d004c739c97324256850980ac97d88c4ed9a838517639ca112e235978d21a176c33f5a68703aba0f2a05501bbe3fc8d49a000fbf530cdb431581dfaf8683cb15a2aee5e239cbc542827100da3b47babf4a16ca7c588aff9912e674abb449e0b767a15e415f4e7f2bbd6380d7131da3df8d49b13bfd35ce3
+M = b72d5c55bd2998472f1965e75a51be6155c1ba04656da8f66bcb34db36a7b1db66a89d1d05b1bde10206acf85be7b474ab689220faf1bb52ab39d8dc00512dd4e26df1179c11b973e1274db85a88c7cc2a17113abdffe58cb930ddc5f3ccc4d68b4e65c913730509f7ce5656e8bbaba9b1be177ab9f766678f018fea05da9cdf
+
+ModExp = 465ff295786a88496828fdc763e9292d557957544e9322b7996807b87fdbfa7a11614bffeec557ca831c4824c8e4ca3b1a1c7f3f4f95ec3fd6a86b73bb13d78b73af2b3c7e76954d0cc03bcb0cd606867ebb3765a8b3d0108cbe4f343a14016be9c33f6d200f0dc547e7d6b02bfab1e79dcdf9c9835a814cc6c855a12ebeb66d
+A = 89ad02bea3e9ab839a6e23f20122409daba52c68e1e893034b30d321c0305434a6af940015e3fa5ca9c35230da34beeb1ed4fbce6c1da3a8bfe3f3ae172276c1d1723b47ee61e6f8fcfdafad102d6f7ee2a79f510c7edb93096205a40a6c9e665b88b18f39a979e2e61286d939952a6f02fe8148b7515bb25f4252337cb6e60d
+E = cbd6ac628cc7afa3c61bee9c22a06a395087ec1811fe9681b55216700c435996c815e7cec8aaa90016dd2382d0306a5414630124e14f3d396a4ba02ee17851bf720f1607ff813e4bbddf01338983db12f59bd6371a738eee3eeb716f21051d6174d2d6c77602942b9edaac18d4b3a723096c0d00dd23a8a605c585022f311560
+M = fa7a3e40364c8a8d0f14f0213a3f3e035222ca0ea19d46d10ba41580e5dd2805c8a133f3856d7d5d97f922ea540e5eb0d10ad04dfdbb74f518f58da0099a6fc2b3f3def92985176e07fc78aff2faebccca10a429794e5f15ff92f75fe90f527c60ddea8093a9078c703c372ca09f7aeb27ade02f3595308c61dd9c44e62fd101
+
+ModExp = cf08bf00261402102e9fe03f3074471dcf0e9b3c96d4d1503f099f24ec85e1901b023e9e048c1ad042244f5f70b38b25a99f4c0a7b57d5844bb0d0137367f45f4ce2cc7746105b77414768cb97648dc5721149aed2d4c682408cc0d50d26dd0bd77e848911f8625c727cac5f32e63bcb548f41a57d718d772f23983a42f603bd
+A = a419646a6631c2c69b18f7aa65011825eb31692eecaee9d74f92d92203811b68e9764bda31a1585bdf69b6273fc6f9f508c395ac081336506525dad88473512f08a205621ac8b16e9864c7a7c5a4f17435de00d0b32badec6ce4897e3e1076c562b6d9523f63d0b2079eaa416cb090471657763f24931d955d1fa2720c80a9c9
+E = d5a6f4a1842aaee39805356dc8d0d678ee03b2c81277345beccb2742f899132feb43271f95968a01ae68aa8277201851992dc0aa7a71c90aae71b124d873ee264ea400fb131be0fc6c4ce8c04c45f6bdaca89ac743635caf6158983d257e21cef6800d7f990e912ba21bbfb8fb779afa4abd19e07e7e07eee9908493d1ca502c
+M = e739689b6cc6def1d45fb1a2ab551643beeb303f4aaa4da47ee5e4948510f8445b4c40e99ae8354dede60b2ba6694e93bc4d573b7e8adf871b7a9a9636eb7d70f2e49328e2d7978143b177cee8374ef01bd1ee2d95862765883f5e7971668b53ef0ff41b6539faf63c397522b0bdce916388e72e26c8d3d2e58dadeb9eb5d479
+
+ModExp = 827e6312ec3b14600203bb83f5b277ded197b2967363630ef673240df05edd3ba8ab2b11c86251a612206569c6c33952b31e264f129909bfe723bd0ee1624b36cfcfaa893a6ec8b5a1f7de79f83e79b459a3350f89f412ad1cfd6bc4c2a7a29272c783d6ecceeb1398fa17041835643f4debef9b5e87b098d104bb8912dddf7c
+A = b8e49c637829021d32db3a39a0c1e58cdd4c6e4eda7e8e9293be379e9c2e2d184f929d278598a81ae231cfedcf69cce4a6e31cda3c8ac14d753a7311f2436e29795f0dfb60259a0f61a997918ff984aa2284b43a9d64c974059e9682adfffd018305835f74eda8c75fe4877d811c1620f654ec9f7f32d1af5ce59115e2f41785
+E = 80e0febf369d234bf1aaad4f82df2e2ff02882c3184781f6ccdf4f7cd93b6887af86830077c84dfb02109ada05b40970b1c65228b0c19030bd6361c3537fee22a8155c03b4e7007ca006c6daa3659518d05bb81ea0079456d0ef6116df248dffdb0c935f321f5a1034deefd5a9414a0652aa6548de33325b474b9e5a8507a082
+M = d5eb1d14af842a9973274f7463d90cf0ccff19c47d710edbae184478d4f29b02693ed7958bd487054327b9e6d8879e24c9af7730b92f323eeac05558da6c1b952e5dbf13de236050a77628bb5325fe0d14cc5773bf73338759d5ab43c212b414581280f1cee250007e53791b800b61c90de0328acd7bc43fbdda48158939392d
+
+ModExp = 4a1efd29c7e78549f5cd4deed1454b37462c7810ee6a8a2493b764dfa479be13b314cf9ff98259517d61865567ef499a511630c0038c97914625df181c6fe07892f329f98b344a78d751e9471483eebaa7977371bf97bb25187ae7e93a9227d6c124ccb4644423c961a11ae59c4354f89d5a95164c23d9aa256e289e9cc0858e
+A = bd86c9211fa6a47a06e5016c46cb8a99e34a043a29e22f8c3196fa7197c26b38927b8d9bc0ddc11a5fa4bcc44deb69dbf37cbe7ebc9a2fad6c74e09ab5a9dd929fa04ab4319b6caad1035739be78ba631fb0748d9e53944836d37ccda6e6a62823c696d8f31139ccd7f2f86b22fa026ecf433cfb1271a3539ac4f1c83aaac059
+E = c40b9972006d28a84c2769a86e526a2b274f73afc7c5c6a2742166757f61b5f5fdbb228afa157af62af989ffe966f232bba9e6beef5403d1690ade31a6410f7f349a35bc4267a129afd647993df7d45cc0e1a1ba4678d7f1b6e8a344d8ff7037679e1f4db25a454e4246f6b55c416567fcfa188e8a3865115851d9edf0aa8902
+M = cf424d7af75ce7eef90cad75ae55ca8810cc7b4703fdb5bce701e7bac07e0c371cae06df2aa8facb55a0faa6793e4d2bd9d7969703743b9be170be82792aeea55e2bc0f7ab7617b276486bf474dee2f4556aab595ff3ef115139cfe5e21ccd4ee05c0e1cf901bd85df86cc17195a783b0be836d00bee82ce064077f9191188f9
+
+ModExp = 3137a3049fd4ad2e26d870f5c998cf11bfe82101884a82e85e43facd0928cd7434a2e346ca124619769fa141bbe92ad6f36b99231032ddaec3b349a410f82b5ca36f45e56e5fb85dc63d32053dc90805d3f1854ab385281a71a57726bf97158494e7476057214ca7379ab8b70f5bdc15f70bdad3adf33c3a1f9cd1b6bbbad556
+A = 39a1dc6a4c3f14d9c350ee968d5ce139ef725952c967a2d1bedf48ace22091283525be03807e2e263d2640be77f0525247bcd07149bba50568cec5a082c87d72962cf9e43bcb5cdb1e7e9a650fb53e0ec2fad37f09a9f036c0d7dfa528fef846769f80a9a60854910ca1b4ee05dba82ed2ee018348d6b3e52a764b8ffae61e0
+E = deaee3a3f80c9f684ed7110c0653847ccc7be5ff6d982fd4b49f59b5dd35f7210b1077babbcedbc127df35cd469dc6e569a0f84e58149b5605c94b09fd7f0b098d02b4a04631328b3fae39e6c2fce25334225cab71829abdb9507cb903701559660f2c08c3b743336119d1260a0db27054cad3f28bc1b04b2289baa58fb33965
+M = 938388927d06ed3bb1286c0f06d3054cb0ee16dc7a0bbbf13a45293c09a5f40f1d611b2e1a1b0ec2ef109b508e27af4274954905cae52034f8740a744153b4d22059f0dd262ea51785522098ecacced6da07709ee6b5acc8c4e99331379a7c3de7f4e2d1431e43b19570140955b7bcba118dfbaa552cbfa2be531e8f781166ed
+
+ModExp = c15ae334455d9f4d1030cd33e734726a27c63624c2afc576238cce5e0498298a4a0c93090a0d19568b41290303c4b558f3d9dd74f9cde8798710f68569ea0d6fd971ce67ec5b54495031de3d8842b8b49288725bee5c9f72b99054d64986ccd4e18d70d5f33943f08cd694eff538f84438ea993ebaba0910c95b3a694f213510
+A = def633b955a917569df3ba8517455eef0655e7a35985edda27097a063e0d82c7c3a76dc36c5d8a71ba9d540790ddd0ea514aaed98925f9a1808eb288d387aaf9605a9ef8a333ebee7ad7057bca012efd619d5867f02266f65976ef4b16da17468426ac4f99b3e8921707e01b4de20f6f9a068e6a19d872079a27f3a44449db83
+E = a465c47b0d15d48e01bb8b1d8e3b3253e11515f6874dbed6c25818adf1a8fd927124d5593beb367f685c11e46f18415be73ccdf16fa2e93a600b728163d21d232849e5278c3749d903edad3f1c4535a2f55a2ab65e7ebc64888bd2a0527e876ecf38cec3ab1980d08138709fad8eb88ae65d960adc3f0f8e92f784fe96fcb693
+M = e43cb9ac1446154356cdc31ec771c79b0e461e22d95185bbe1a279c0945e3af07903a0cb54d553380716fcdcafb4b7cf5dc6da481dc74a8c583d75ff6c1f8e429182d200246ebc473bb56e173787987c1b7fb2dd23f5b2e438a97bc4a1df628bc044fdd1e80c0cf37030adb7b04784dab827d0dcd64f0dbf37c980612570ce11
+
+ModExp = 75c3f79ab7c991b98e65505342a8a563cfb08b5d3ccf8664c7db1de50256b1d17ebf7096dc98c7bb5d7f027a894ae5cbb14dee04d5d445e775ad7e239acc82673b0ac2d819a69c83864f34e73d9a636f05de8279619a067b4c90ad038db5910447e03841d2034635018f08cbcd21efa00994247763a249082594128112f95232
+A = 34def7d76f6f158a359fd12759fb889cdf6af0a24830dc3e84283a1ab4e9b2647a6a36b86482f829b2cdf3e3d6028f9a884b1f64f7262315446bea8b0231828e2f3d990fb103c17f820b39e4b8427c85643ceeca8f5dc8f191d1255768300e859bd7d88c770319ef38269660d221cb3bc061389b6fc0783485ef042b1c7d6fef
+E = c6c46453dd5aac6b37277a446b1d0c69cbe476eeff55b3ac35edb89ba97116b0e7783660f2c7b31b2a2d6c4709d0ab45d01a838100694b0777c9c9c14c959b07c437c73a5eabb7402f1001e802d797a2e7707285834fb6440a1c2f727f7bb84ddb2a49312d32fa0ce620c43872655cb5c394749c9e75d7fa25be00efe50d47d6
+M = fbbab6698a9142095c46b38a732592e4366c1838b84bf40f8c8fc7b630f73380a0d09765562365798f8c8030ed1b6728329d8bb06e882c35a1d59bfe84146a9db2afe42a414014e247390281c782fce806d62adb54778d2bcb49555459429d6ed446af5359657667f6aa19e8e3e0e24ab2bc312b2d90b5cb1ce6f2f15af15d9d
+
+ModExp = ba16d7f3f6e162ce248490d164a13c00e7720d8a667e2d3ebeb13f1663e15ef5408d5b56cbc7bc793a8ca787cc50f8e15e0e9d4ee764531d04a9114eea556bb3e206ed7d85267151a056b6e68fbf35e03f2cf829708ffe1de13e95ecfe365aff1eea36340ffcd3892dee659fb1ecbe50f5080e54737c10f9c1ba638b14ef537e
+A = 9025e6183706105e948b1b0edf922f9011b9e11887d70adb00b26f272b9e76a38f3099084d9cccf12d04b1a99c0f654f8b9ed90c6dff9478c60bf05d58d734ab60eaefa14a22230ec60c90dc1f0704b61eef0bef345785ae0e6a9af7db069cf6bd2b4e0fe58a0ade83c7e46a04b9fe1d24cb9b65c6f80de713e61d70eae5b286
+E = d7e6df5d755284929b986cd9b61c9c2c8843f24c711fbdbae1a468edcae159400943725570726cdc92b3ea94f9f206729516fdda83e31d815b0c7720e7598a91d992273e3bd8ac413b441d8f1dfe5aa7c3bf3ef573adc38292676217467731e6cf440a59611b8110af88d3e62f60209b513b01fbb69a097458ad02096b5e38f0
+M = e4e784aa1fa88625a43ba0185a153a929663920be7fe674a4d33c943d3b898cff051482e7050a070cede53be5e89f31515772c7aea637576f99f82708f89d9e244f6ad3a24a02cbe5c0ff7bcf2dad5491f53db7c3f2698a7c41b44f086652f17bb05fe4c5c0a92433c34086b49d7e1825b28bab6c5a9bd0bc95b53d659afa0d7
+
+# The following inputs trigger an edge case between Montgomery reduction and the
+# "almost" reduction variant from https://eprint.iacr.org/2011/239
+ModExp = 00
+A = 19c7bc9b97c6083cd7b8d1cd001452c9b67983247169c6532047eb7fc8933014dbf69fee7a358769f1429802c8ea89d4f9ca6ba6f368fbdb1fa5717b4a00
+E = bbc7e09147408571050e8d0c634682c5863b7e8a573626648902cff12e590c74f5a23ecce39732266bc15b8afbd6c48a48c83fbdc33947515cc0b6e4fb98ae2cd730e58f951fec8be7e2e3c74f4506c7fd7e29bdb28675fe8a59789ab1148e931a2ebd2d36f78bc241682a3d8083d8ff538858cd240c5a693936e5a391dc9d77118062a3f868c058440a4192267faaaba91112f45eee5842060febbf9353a6d3e7f7996573209136a5506062ea23d74067f08c613f3ff74bade25f8c3368e6dba84eae672eac11be1137fc514924fcab8c82e46d092bd047dcbadaa48c67a096ec1a04f392a8511e6acbad9954949b703e71ff837337b594055ae6f3c0fc154447a687c9ac8a2cdfd64a2e680c6ff21254735af7f5eb6b43f0bce86bda55a04143a991711081435ed4f4a89b23fc3a588022b7a8543db4bf5c8ac93603367c750ff2191f59a716340fab49bb7544759c8d846465eec1438e76395f73e7b5e945f31f1b87fefa854a0d208846eaab5fa27144fd039911608bab0eaee80f1d3553dfa2d9ba95268479b97a059613660df5ad79796e0b272244aca90ccc13449ec15c206eeed7b60405a4c5cfdf5da5d136c27fa9385d810ad198dfe794ffce9955e10520efea1e2eb794e379401b9affd863b9566ce941c4726755574a1b1946acf0090bfb93f37dd55f524485bbba7fa84b53addfde01ae1de9c57fe50d4b708dd0fa45d02af398b3d05c6d17f84c11e9aacdbe0b146cad6ddbd877731e26a17f3ebed459560d12ed7a6abc2ea6fe922e69d2622ef11b6b245b9ba8f0940faaa671a4beb727be5393a94dafaeff7221b29183e7418f4c5bb95a6a586c93dbc8ce0236d9dbe26c40513611b4141fed66599adbfb20fc30e09a4815e4159f65a6708f34584a7a77b3843941cd61a6917dcc3d07a3dfb5a2cb108bacea7e782f2111b4d22ecaaeff469ecd0da371df1ac5e9bf6df6ccba2d3a9f393d597499eaca2c206bfb81c3426c5fe45bcf16e38aecd246a319a1f37041c638b75a4839517e43a6d01bee7d85eaeedbce13cd15699d3ee42c7414cfed576590e4fb6ddb6edd3e1957efaf039bfe8b9dc75869b1f93abff15cae8b234161070fa3542303c2ed35ca66083d0ac299b81182317a2a3985269602b1fa1e822fcbda48e686d80b273f06b0a702ca7f42cbbbd2fc2b3601422c8bff6302eda3c61b293049636002649b16f3c1f0be2b6599d66493a4497cd795b10a2ab8220fafad24fa90e1bfcf39ecce337e705695c7a224bf9f445a287d6aab221341659ca4be7861f6ac4c9d33dac811e6
+M = 519b6e57781d40d897ec0c1b648d195526726b295438c9a70928ac25979563d72db91c8c42298a33b572edecdf40904c68a23337aa5341b56e92b0da5041
+
+# To fully exercise BN_mod_exp_mont_consttime codepaths, we generate inputs at
+# different bitwidths. rsaz-avx2.pl only runs at 1024-bit moduli, and
+# x86_64-mont5.pl unrolls 8 64-bit words at a time, so we want to capture both
+# multiples of 512- and non-multiples. Also include moduli that are not quite a
+# full word.
+# 512-bit
+ModExp = 00
+A = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e
+E = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+M = 8f42c9e9e351ba9b32ab0cf69da43f4acf7028d19cff6e5059ea0e3fcc97c97f36a31470044737d4c0c933ac441ecb29e32c81401523afdac7de9c3fd8493c97
+
+# 1024-bit
+ModExp = 00
+A = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f
+E = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+M = 9da8dc26fdf4d2e49833b240ee552beb7a6e251caa91bfb5d6cafaf8ed9461877fda8f6ac299036d35806bc1ae7872e54eaac1ec6bee6d02c6621a9cf8883b3abc33c49b3e601203e0e86ef8f0562412cc689ee2670704583909ca6d7774c9f9f9f4d77d37fedef9cb51d207cb629ec02fa03b526fd6594bfa8f2da71238a0b7
+
+# 1025-bit
+ModExp = 00
+A = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011
+E = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+M = 010223abfdda02e84e11cec8ee7fc784fa135733935f7b9054bb70f1f06d234d76dcf3beed55c7f39e955dc1fef2b65009240fd02f7a1b27a78fc2867144bf666efb929856db9f671c356c4c67a068a70fe83c52eebda03668872fd270d0794f0771d217fb6b93b12529a944f7f0496a9158757c55b8ee14f803f1d2d887e2f561
+
+# 1088-bit
+ModExp = 00
+A = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d
+E = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+M = e91f6d748773cb212a23aa348125615123b1800c9ea222c9374c757702ae4140fa333790ed8f6bf60a1d7dda65c2767cc5f33e32e333d19fbfb5a2b85795757c9ca070268763a618e9d33873d28a89bf88acd209efbb15b80cd33b92a6b3a682e1c91782fc24fb86ddff4f809219c977b54b99359094bbcc51dfe17b992ab24b74a17950ad754281
+
+# 1472-bit
+ModExp = 00
+A = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d
+E = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+M = a8770362f4bfe4fc1ab0e52705c11a9b6ba235d5a5f22197c2d68e27ed18426ede3316af706aa79bcf943dbd51459eb15ae1f9386216b3f3a847f94440a65b97659bc5ba2adb67173714ecaa886c0b926d7a64ea45576f9d2171784ce7e801724d5b0abfd93357d538ea7ad3ad89a74f4660bdb66dfb5f684dcf00402e3cdf0ab58afd867c943c8f47b80268a789456aa7c50a619dd2f9f5e3f74b5d810f0f8dadbf4ad5b917cdcb156c4c132611c8b3b035118a9e03551f
+
+# 1536-bit
+ModExp = 00
+A = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002
+E = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+M = 878cd000778f927b2f1a4b8bac86efd282079a7ac0d25e09ffd2f72fbc282e65e233929d2457c7b1d63c56fb706cdfa04fb87e654c578c98d7cf59c2293dc5641086b68db4867105981daaf147a0ee91f6932ef064deae4142c19e58d50c0686f0eaf778be72450f89a98b4680bbc5ffab942195e44dd20616150fd1deca058068ca31ab2f861e99082588f17a2025bf5e536150142fca3187a259c791fc721430f24d7e338f8dc02e693a7e694d42775e80f7f7c03600b6ae86b4aba2b0e991
+
+# 2048-bit
+ModExp = 00
+A = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f
+E = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+M = 9f40a7535c561208ecb38e17c9336d9bc8484d335901b2cd42759cf03689227f6992f10cb6b586d767fbcdf30e9d82a0eda60d2694ccd0194fa96b50b56e0cdeec1951ea9e58b07e334a7f108841a0ab28256917fecea561388807ed124a17386a7a7b501f9cbf3404247a76948d0561e48137d3f9669e36f175731796aeaf78851f7d866917f661422186a4814aa35c066b5a90b9cfc918af769a9f0bb30c12581027df64ac328a0f07dbd20adb704479f6d0f233a131828c71bab19c3c34795ea4fb68aa632c6f688e5b3b84413c9031d8dc251003a590dec0dd09bfa6109ed4570701439b6f265b84ac2170c317357b5fbe5535e2bbdd93c1aacfdaa28c85
+
+# 3072-bit
+ModExp = 00
+A = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d
+E = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+M = c23dfd244a58a668d514498a705c8f8f548311b24f0f98b023d2d33632534c2ae948d6641d41fd7a29fbbd594bfc7fdd6e8162cbb3056af3075347b6fc8876458d33a9d0ffdbcdf482de0c73d1310fd8fa8f9f92dd0dbb0e2034e98a30f6c11b482f7476c5b593f673a322b1130daa4314e9074270dce1076436f0d56cf196afcbb235a9a7b3ac85b9062e85fc0e63a12c468c787019f6805f9faab64fc6a0babc80785d88740243f11366bffb40ccbe8b2bb7a99a2c8238a6f656bb0117d7b2602aa400f4d77de5f93c673f13264ca70de949454e3e3f261993c1aa427e8ef4f507af744f71f3b4aaf3c981d44cc1bfb1eb1151168762b242b740573df698e500d99612e17dc760f7b3bf7c235e39e81ad7edbe6c07dbb8b139745bb394d61cb799bcafec5de074932b0b2d74797e779ac8d81f63a2b2e9baa229dfaa7f90f34ffade1d2ad022a3407d35eb2d7477c6ae8ad100f6e95c05b4f947c1fabfb11a17add384e6b4cd3a02fd9b43f46805c6c74e366b74aa3b766be7a5fbbd67fa81
+
+# 4096-bit
+ModExp = 00
+A = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+E = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+M = 8030411ecbddcb0fe4e76fd6b5bf542e8b015d1610cf96130ded12ba2cda0641bd9692080f218ea8b0d751845b519d95b843542ec8d2a07f1f93afe3189b69a4f35c983011c7f7928c3df458cc3eae85c36e6934a4b1bc0a67c8a521de336642c49e10a7ffa8d0af911aacc19e3900449161940f139220e099a150dcaf0ff96ffff6e726c1ac139969103cf6a828ac3adf0301506aa02787b4f570d5dde53a34acab8fec6fa94760abf16ee99954371ad65a6e899daab87b95811d069404991de9abe064ebbddf886e970f10d260c899dda940191a82d4c8bd36651363aff5493f4f59e700007dcadf37ebea7fcfd7600d16617ffea0d9ae659446d851d93c564e50e558f734c894d735fa273770703dab62844d9f01badf632f3d14a00f739c022c9be95f54e9cea46ec6da7cb11f4602e06962951c48204726b7f120ddbd0eb3566dc8d1e6f195a9196e96db33322d088b43aecffe9b4df182dd016aca0bd14f1c56cd1a18b89165c027029862b09ffd78e92ab614349c4fd67f49cb12cd33d0728930d0538bda57acef1365a73cc8fbac7d463b9e3c3bae0bb6224b080cdb8b5cd47d546d53111fdc22b7ff679bcfe27192920ee163b2be337d8cccc93b4de7d2d31934b9c0e97af291dcc1135b4a473bd37114eec3ba75c411887b57799d3188e7353f33a4d31735ebfc9fcfc044985148dd96da3876a5ab7ea7a404b411
+
+# These test vectors satisfy (ModSqrt * ModSqrt) mod P = A mod P with P a prime.
+# ModSqrt is in [0, (P-1)/2].
+
+Title = ModSqrt
+
+ModSqrt = 1
+A = 1
+P = 2
+
+ModSqrt = 1
+A = 1
+P = 2
+
+ModSqrt = 1
+A = 1
+P = 2
+
+ModSqrt = 1
+A = -1
+P = 2
+
+ModSqrt = 1
+A = -1
+P = 2
+
+ModSqrt = 0
+A = 0
+P = 3
+
+ModSqrt = 0
+A = -3
+P = 3
+
+ModSqrt = 0
+A = -3
+P = 3
+
+ModSqrt = 0
+A = 0
+P = 3
+
+ModSqrt = 0
+A = 0
+P = 3
+
+ModSqrt = 0
+A = 0
+P = 5
+
+ModSqrt = 1
+A = -4
+P = 5
+
+ModSqrt = 0
+A = -5
+P = 5
+
+ModSqrt = 2
+A = 4
+P = 5
+
+ModSqrt = 0
+A = -5
+P = 5
+
+ModSqrt = 3
+A = -5
+P = 7
+
+ModSqrt = 0
+A = 0
+P = 7
+
+ModSqrt = 0
+A = 0
+P = 7
+
+ModSqrt = 2
+A = 4
+P = 7
+
+ModSqrt = 3
+A = -5
+P = 7
+
+ModSqrt = 4
+A = 10
+P = b
+
+ModSqrt = 0
+A = 0
+P = b
+
+ModSqrt = 3
+A = -2
+P = b
+
+ModSqrt = 3
+A = -2
+P = b
+
+ModSqrt = 2
+A = 4
+P = b
+
+ModSqrt = 2
+A = 1e
+P = d
+
+ModSqrt = 2
+A = 1e
+P = d
+
+ModSqrt = 0
+A = -d
+P = d
+
+ModSqrt = 0
+A = -d
+P = d
+
+ModSqrt = 3
+A = 9
+P = d
+
+ModSqrt = 8
+A = d
+P = 11
+
+ModSqrt = 6
+A = df
+P = 11
+
+ModSqrt = 4
+A = 10
+P = 11
+
+ModSqrt = 5
+A = 90
+P = 11
+
+ModSqrt = 3
+A = 80
+P = 11
+
+ModSqrt = 9
+A = -e
+P = 13
+
+ModSqrt = 7
+A = 7d
+P = 13
+
+ModSqrt = 6
+A = 37
+P = 13
+
+ModSqrt = 1
+A = 1
+P = 13
+
+ModSqrt = 8
+A = 1a
+P = 13
+
+ModSqrt = 54d4cf0fafe265056a29016778cea6b712bc66a132fb5e6b6865e9b49e4c97ec
+A = 599c10484b22d0b5a115268c7538ca99b3253a311a4ab1ca11c3665b0bec393a1167d1ad94fb84cb2c7ad7e2c933e8f613bdd08fe1f1aa4a9b0b9de0c8a7c9d4
+P = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1
+
+ModSqrt = 38a7365a15365e911286c1be2a7afe76ef390234d76269e04dee17313f6ea54d
+A = 1c4aabb4d8369710131c664ecf2849e963c1bc31d66e0b939bacf99a870c71f24ed71bdddcf566f3908271fee43fc1ebb51eac7e3153efae641b49d2e796a12a
+P = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1
+
+ModSqrt = 35ab18a560dece04725667f640ca61d1d59f14d191f94c79f58531acd097d444
+A = 685168ae855d60eba220d803f5296459b30a289580668db9ed51bca51cc2d453a937e13819ae34f7a9a143ac96d17420c53919167e46279b562b550be1cd9abc
+P = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1
+
+ModSqrt = 288370029e87024175e5bec0eab0929179f42e16995e7f6194eefc61061e54f4
+A = 2a14ab77c045bdc48220ba9c463e1a4b4049cb01edb53be0937767eb2ec19b7d719855052281250a36a0b76d9a5d967d0756e1ded7a052f7056191ad66bcfc9
+P = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1
+
+ModSqrt = 32255cf01dc943577ec2bcb221b98491d7a1130d046d6c68e95fedff643ce3a4
+A = e26f6dd46a513a1dd3fb14b71be1d4c9e9d79eda1cde10ea4d1eb8abfd4d5857572205e247184dd0cbefa37b5c0bf680ba2bd28c5741f725cfe2aae37419baf
+P = cfc4ccae35458ab5be1a1bc0664188253301f8702af4f8fb19fed12de0c653b1
+
+ModSqrt = 5172345e801ada63fbc4782e32583cc3b4fea88b9e6dfd542f3542f8538ade66
+A = 40dafa8342b302bb04b1f3ddb3b9015a8fc1b597857c115b40631c7be9e22de89358fca23b331596ee5ff304dad7811e6d8e8822f7aa533c9e7c882634ea550
+P = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3
+
+ModSqrt = 4dcf63c423bf0e39aca2293d57f6792d023db649d6719fe936446904b9f7e60d
+A = 5bcdb514bbe84261e169203e8017909b60c9bb330400c766ee01b0189378e70e61867a164a12643ddc9e94b61e09e5b158cbe85be228a3cc48f95a552958b8f2
+P = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3
+
+ModSqrt = cf77c5c2d12a500b75cbfb1f3e66ee75d886b9365cf4f8b4d1bd18a6be0f387
+A = 4652ddc2ea7b460d8ec3c9059b8f9b5dae6cac55b51f2ad86fcb336b25235737965cc515e2ff0b54835015b7ebeeda6fadd986471d8cb424d309fc353d1e269
+P = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3
+
+ModSqrt = 1e0549e4c5a26023e9d24fd8c67419960746f82b1ecd113bdac66f570a475d87
+A = 5f4a6d450ab1390d96ab1deaa0ba18f897cb63daf0c9e1ef6c08e804c26b5e842f6c08f13db5d4a6e88f07af2a3cb04fa06fc3e59c410b9356f025ed81acc74
+P = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3
+
+ModSqrt = 144481a781d831c1ca046ca9e322d79ad4d2c6dd9f780bea9d1ced9cd20b7b23
+A = 4c254fabca441017132b9eacd4ca40a336db3e5c09715773fa07af095989a91cc968ff07a9ff56ed06b0ce0c5269f7b2ab68564ecab9f4467a7e96b6cc6b21b7
+P = a6813d316f9aca30f98b4f864b8b4b8f51493af930bd4d3a1b205a710e99add3
+
+ModSqrt = 216fecc7667f488a3d2d102a38b46b4860ab858300b8638af4f34e1103fd73ba
+A = 17878f8048227573a9d70f53c0e76ff13fe9f56e9c984c92514d3d13dec23c816661f0618d21371b80dfd885cb59551bdf80046f65f22ea9b89c78645a6e455a
+P = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95
+
+ModSqrt = 458e5e789ccd2417174f7e30bb31914b9656bd8cf2b9f5a9752a8737a67707bc
+A = 5c7d39a4bb04e69201aa519f80ee7e62ea14ca55e13656d1da3f45367e2fb2d061aa2940708d02ac67d35cd2ccf54a1bf95bcbc759779e692cfdcbb3aa1a05b
+P = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95
+
+ModSqrt = 543125a16c2bb8b8f8a2c39c497e5224ec77533602d7dbe24002e32dcbd2ef1a
+A = 3413afae333b2ad9ff45c7f3c7e5934b3127e8b1a55225958ee6ccf42423e81559bf070ad3f3353b78c0ffd41475af49f59d268ef78bdae879f5155e8d1cc07
+P = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95
+
+ModSqrt = 10e16859c67bdb2eaab52a7c847dbf37162eda258a9f6262ebacfe4cbbbc1080
+A = 21ce7905894faf220bdf4a82a2d855994ca2dc9feaecaa53c7f146e1f49934215695e9bb46ba370b7005a90c399674caa8969eb442e7914d90f749774d7fd194
+P = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95
+
+ModSqrt = 32a00586adc6f6cc2b1a04e1be0ab569fde235e1436c38b6af92bc5ebd60bc1c
+A = 350da4fd8cf03c12f7dd6ac6d3ab801a3413964083e374662aaf878d6838b97d4feb9e52cd307a25b113e101661a865463ee2480c626aa4e2ec437d72e7bae4c
+P = bd37c850cf7d702bac879f3c21a51a5a4df2b8eb0935861e0753a6eb62261a95
+
+ModSqrt = 971f75bc7afa8b4b50f1d4b05e52deac7d4836a08d30546f29649bf1ca6a247
+A = 655ed4c5d8d0afb4f9360372ee1ef1303898d2423e585108a3303faedb55064d2ef25666ed4c4d71fe6063fea1f3142b435714b0e30b339dd791d347c884654
+P = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7
+
+ModSqrt = 48fa882b7cb6a29de9e3769f72eb67f1efd4d2af56f0c7e410c610efcbce2065
+A = 14f3503f33b243800eac1defaab33e04c01e80163fb3efd03860970cc016832431ca4fc6d1b760f4f40166b0b8b3c40dbebc81460cc10890172243770338f090
+P = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7
+
+ModSqrt = 236fd7e397ea7f8bc2a288eb7236ca41936fa702b7dccca56c8852e147511f7d
+A = 1bbd0980feac854782813bcde4da85e8a054549a1b515e065da4236528035e756882e29e762cf60453e375cca9dc6ff637f9558bf86646e3b928f68f82af7efe
+P = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7
+
+ModSqrt = 693f0cbe8c81b0afde0cd2f83e53795dcae6b0cc4ba930ab5c752400d787f14
+A = 7b20f9664b23907e152ab8c9a907f72e8670c1c38ab4cd1411ea7c2159c09aa131afe068929b8e6ad1409b74c04975180d1cd0a9fa74e923c3fd451e8da2c34
+P = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7
+
+ModSqrt = 4a086c50b0bad576501ddb6280743b2c9d247841eb7f14d90561432ff7dca6f0
+A = 4367431ec0cd0d7626538b93a090c30fe0c97c18ca03b97ddae304b619112b5b4d02bf0f041fa3fd673f9ef2ceb07eb2079d11c56dd903b1a87e8252a97b8079
+P = 9810151ad4bc9c5d68fc326395b509f2625bfebca1c3801ad4da7539fdbaa6f7
+
+ModSqrt = 18f8433fa468d8065157708f1f1e53b8e31d39c6011fbc2bad93de1b5548e19c
+A = 739c032bb4139c199c40f548d37234298772e4ccb9d3ba28412b60ad23b4c465b0787e2382f1c5a4a87af2d20eb978b7dcbe73f2112249477d15c8a85e54a79
+P = adcd56924f73836ebe4dccfe006ad3b1e5076562cd11b161642cab7af2284659
+
+ModSqrt = 49e3c8eef5e067cabd51a7c01384ce05ab8f4342f655559d8a689eb7b20e0106
+A = 18400c2cc3e06b99b4e39c77b9af5ff0e9c683f1708321afa4cd5b6988d13b36b1d9eb4379b7902d9ceb40c03f814b2b6a01b90509bbb4532f13ab1571c4d04a
+P = adcd56924f73836ebe4dccfe006ad3b1e5076562cd11b161642cab7af2284659
+
+ModSqrt = 35548c530745f440329325cc8a5fbd90c16a7f0788879a4869bc4d4f73acda0e
+A = 181a3c5ab02566e7166c4d6d2f2bd4a8ecc25991a98d270bde80cf4332766a7068b14240bf5f5dcd45e90ef252596da3eb05b11d68b2063f7b3a825742593ca9
+P = adcd56924f73836ebe4dccfe006ad3b1e5076562cd11b161642cab7af2284659
+
+ModSqrt = 1ab7046e6af061ade5f9719008fa4d989007e2a579a134a5b9f19ec410984096
+A = 1008a03e211fab0d45856377079bc96b0776c2d4c0175661f3493246cea2ab0a02a706c85314fb707ad9906bedb2cfd577d62092ae08ff21d7b949373ea954c7
+P = adcd56924f73836ebe4dccfe006ad3b1e5076562cd11b161642cab7af2284659
+
+ModSqrt = 2be9e3e7515960d90f115b89f60dedc173a73ce163b4036e85b7b6a76fd90852
+A = 392053a9f0100540a8e1a0c353e922068a84dad3a4a8e8962fbc0bee2b6a06e20d08ade16eb1409a16acfcac3db5c43c421505e07035ca308b15c4a6db0864c0
+P = adcd56924f73836ebe4dccfe006ad3b1e5076562cd11b161642cab7af2284659
+
+ModSqrt = 5b301bb93bdcf050183107e36258b53b4805918114ea1c2227b0911d5b4dc077
+A = 55e55e5f94dc3d7aabc921f6469d85fa2e1e92a87347c57afad5872306ae69f9fb99297d1e3e793dd9e8632244208154de5da7114fd876383bf1422f7ece024
+P = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb
+
+ModSqrt = 2df9609e2f5a5156c3260461b2ee52eacdef00bd8b091479813143a6c5283f71
+A = 2099325b7f12fe77353ddf3f2b2c5ef77b49671b150af954cf84e9675e3ecde3e057084641a633d19533b4712ab49924c8b5c31d591abcc88291f51253fa2a7
+P = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb
+
+ModSqrt = dfab751710e9008e25e422d1199d6fbec4dc7fba35b4da9d225a746eb4126a0
+A = c006af53d4737fb293584df6ffe2e4cb3fd8dc77fb7c1f13b97bb9c249e3ee5fb9feff7488265b3093906c08a4946f142ac7b491937d24bfba6413366ce371d
+P = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb
+
+ModSqrt = 26bc030008d6c60a09fb0e16093a649fcb40c6c21a8e2da2353ba4b07c4f85d5
+A = 1eaabcfad2ed349ac9356e6f4da0b301266ddde811cb0f817aba8f5c10fb8b8ba9d0ef2dd386b668f16eac296118fdb8cb7afe1b865648c81c2fa3cf21f2711b
+P = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb
+
+ModSqrt = 35051b1482ec2578f3dc0000a422cb5111e43c37f1ac20b1844d3de2128c4556
+A = 315ff9de178681116f2a5fa78eebf4818e1d680435eacdfaf9d0e5c4fc01fc034b352c82fd52c81ca30d68864952dacc99d08269c9dd7ca99ccf22da98c3840
+P = d43280ac150f725f4a2a1dceb1c79bcac57855a4eba72ae93762d09bcb2444fb
+
+ModSqrt = a5474252885cacf004c460a7793ff0b0a2187bb1a9ed700ae3470199faef71f
+A = 19856fc1351c4b02abf573bb2fc6ff92355fa369d62bb8f2260fa772fb1693f509a56cad661930abcac049dd70f4b16bed4a4c172e73e772504c9990ce7f92f
+P = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d
+
+ModSqrt = 12daf4722387ecf47de1b0b6b110a062dc5ea2685bc9dbde66b8d15622985029
+A = fb8479787069116abc42abfd7dc0c24d2ad04fe0c04b42a6dff714af715d17e0fd77855f950f264542b06d48e8818de813ddb7975798b7debefcdaa5ff86beb
+P = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d
+
+ModSqrt = 397996ed5c0ac6ad32e43c337e9de421b87774cc162bf7ac7bbedf4a9029255e
+A = 5aa04353321bd2de92481be740357f979da464b53aa39111fdbb734cf7af6b3857d1baa08d3a126a3dd34a2fbae2bf2b84e900686c1d31505b390185acef5fe5
+P = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d
+
+ModSqrt = 2cf4b844a54ba359dc592ef1b49f43fcfeae84d1087edfefdd0b9174b43c0a3c
+A = 365a8650510bcfd8fa87432f167cf487234c215857403b9270b5eebeafa48cd6da47fd60dc311b94d1d72baad0447c31f0b212d755f46c256e16e5e015e6546e
+P = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d
+
+ModSqrt = 9277c73043ff767c3fa606f0cd66b9d854a600c8c18287f191ce277758c3f31
+A = 62cec3901626d03e8df66299a87c54b1f7a55cafc99f0b6bba1b5d51a3d2b7d2171c9135a9d8a5346d436e0136b12e515e703e3cd84ecfe154eb94c6772a6d72
+P = dc315fd52684fba79e577a204de9053b11a5d7a414263fec9eff6ff62188829d
+
+ModSqrt = 4189e5a90c1b1abdc1c7c05b3587e6f362e06f927b6cf5f0d271aab3d6f90765
+A = 336b8d0f9dac842c696bc020f49c6aa023842c16f2052eb02f17959006554ca0012042c80c72590f21c6bf5a3714c9cb552aa69730e33db93a56a909b273f39
+P = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f
+
+ModSqrt = 36ccd38cb5a6bd8a73bca55936a2227c503664422c2296faf7e2b1c6a375a43a
+A = fecfd60a376befbe48d2c4f6d070d716d2f403cd5daefbce62b720df44deb605162c8f20f49fd7ec30d4f8e70d803d45b3a44b5d912baa3410d991165d7c507
+P = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f
+
+ModSqrt = 198fc8569be172dc9b71023ed3d42d2ba94bae4099643f6517ab03f540527fdb
+A = 65bebdb00a96fc814ec44b81f98b59fba3c30203928fa5214c51e0a97091645280c947b005847f239758482b9bfc45b066fde340d1fe32fc9c1bf02e1b2d0ec
+P = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f
+
+ModSqrt = 21b7f74c30ded681d6138cf8e6fd798f32a049e94138e982f1845df3dc9e686f
+A = 9a30b791c1ba4f394b4e3dcd5837e474237f4fe8987b255c098a47b2c14c598ec69d2beae444dd4fe9c4ede8173d2b187677cc706a3c28f3b81627d8a5fb6fd
+P = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f
+
+ModSqrt = a1d52989f12f204d3d2167d9b1e6c8a6174c0c786a979a5952383b7b8bd186
+A = 2eee37cf06228a387788188e650bc6d8a2ff402931443f69156a29155eca07dcb45f3aac238d92943c0c25c896098716baa433f25bd696a142f5a69d5d937e81
+P = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f
+
+# Negative testcases for BN_mod_sqrt()
+
+# This one triggers an infinite loop with unfixed implementation
+# It should just fail.
+ModSqrt = -1
+A = 20a7ee
+P = 460201
+
+ModSqrt = -1
+A = 65bebdb00a96fc814ec44b81f98b59fba3c30203928fa5214c51e0a97091645280c947b005847f239758482b9bfc45b066fde340d1fe32fc9c1bf02e1b2d0ed
+P = 9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e246b41c32f71e951f
diff --git a/test/recipes/10-test_bn_data/bnmul.txt b/test/recipes/10-test_bn_data/bnmul.txt
new file mode 100644
index 000000000000..d0ff7bb395ef
--- /dev/null
+++ b/test/recipes/10-test_bn_data/bnmul.txt
@@ -0,0 +1,2678 @@
+# Copyright 2016 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
+
+# These test vectors satisfy A^2 = Square.
+
+Title = Square tests.
+
+# Regression test for a BN_sqr overflow bug.
+Square = 4000000000000000800000000000000240000000000000000000000000000001fffffffffffffff8000000000000000400000000000000000000000000000000
+A = 80000000000000008000000000000001fffffffffffffffe0000000000000000
+
+# Regression test for a BN_sqr overflow bug.
+Square = 40000000000000000000000080000001fffffffe000000004000000200000001fffffff800000004000000000000000000000000000000000000000000000000
+A = 80000000000000000000000080000001fffffffe000000000000000000000000
+
+Square = c2fa18e1d110a4639781
+A = -df6a253c3f
+
+Square = 4805f01d379f4ce8dc86ed269
+A = 21f253ddb5a6d
+
+Square = 57def107babc1c2bffeff858947e69
+A = -95fbaee5a09c86d
+
+Square = f3b01f7941961b3f5cc3361e3ac82423690
+A = -3e71292dd4ad3ed3b4
+
+Square = 5e2d9c36d498ad1e8b6113f442ac513eaca74601
+A = 9b45cf6c7a43d910dcff
+
+Square = 7b7c2eb3fe55615e422b41c6f725341527626398cdee4
+A = 2c7314e72a2ffeef170de2a
+
+Square = af57c0ed328886642ed5d631b375fc89c03a99f1b427c6bbd1
+A = d3de077f8286a04daa9c497c9
+
+Square = 4d9eac3058e6cbc0d12e639ced961c02ec1870afed62fdd44c67ce4
+A = -233da7e87ea4421ee8fe7e00c856
+
+Square = 83c292d277fae28cfede74e8e80eba11dc132e16f78cdf64595c12c7dee4
+A = -b7a8aa7452678abd45d2ae6c349e2a
+
+Square = c80e07dd01f9d19a5cf7f3c328ccf4de70fdd113de69382701294dd29674b9a90
+A = 389387eead58fef2c76b5cf920f35c5cc
+
+Square = b9f69ca47ac855830fd7ed39c81822c520880c51c3ea60d3ccc106db37fc2b04c47831
+A = -da307c28ea67ca8d3117364ba93f0731bf9
+
+Square = 81bbe3a13a22a73778233294ba0c132d9dddec111f768300f177468c204f8eab69b98e62d99
+A = -2d8f715bb32d410b4f475c4d000d56fec7cfc5
+
+Square = f815ce34e9bc2e31e36e75cf49b2d15306d438a2a713b2a85b3ea156ba60c867c28cc65aa58fdf11
+A = fc02f2e1a26cd69f6a0e54cca4bbced739b43597
+
+Square = 5f968707f58ea15c492ec9677be09c309d91164aafa754ab16ca47a411b5b2249858fb6f96135992e8a04
+A = 271b8eae3e96cc4900d4413d6c00b73736a5d89ed7e
+
+Square = 4aa616aabcdc7ad48dcfd40d71e00a3789bbf549ff39b3e2ebb52017cb56014941961a5a6d52d7a9980fc99b49
+A = 8a3d3f15e6d7d2130aebd8cb99767defbe4c7704e3c1d
+
+Square = 845e46db8c40f3f6f6f4928b5748618f021f9064c6522bcf2df004f8d2105e90cd354785c15a6cc32fcc77da2ea3001
+A = -2e0543ac8b8255ce30253cf2047a0ff353dea55a58551801
+
+Square = 5dc5706dde9b326feb79941f08bd296ec3b6fb67270516b70fad9921438b9175f395310fb756b60d72d8e73e84ee8673cc40
+A = -9aefd7dfa709dec9e721f5c22867229435b2d6366462d0e438
+
+Square = 63dc6565adba27974a66bdcc626596e16cf399541d679f754d9063ceeb320649bec09a940309dd1eae5fbba0b558939afae9689c9
+A = 27f8e071f70b0053d70eca9c6d1e28303b8da2d3c58083c2cc45d
+
+Square = cf2176449bb8b215fc37288b904ca27d5d410780fd054d2a190a94b405f6aa41970b41ba3cc43eaabb97c2248e1e21457949070ec0f6a4
+A = -e645c7edc27512d4b3170d3c5430d0712a25c13afcc09c9b30bb11a
+
+Square = 43194e5f12e828db6735824c194985108269ddec12c49a14658be3c2b7d298c2846da1aa3ecb7064e73c317af595601de59035faab6dc0fd911
+A = -20c3fb73a03217893fd4a9db6e53a3d83a8414d900213d0460dc91bf69
+
+Square = fcee79e598f061157ca9416491f2eb069bb95a4d78a1d0538dab5c8008653db71b90ce3139e693ba284846be7b75d6b7aa80228420fe75599c12f090
+A = fe760dd61798c8f78e52b328fa27cfbe41b898de6e6bb4f4a684f038b5f4
+
+Square = 4f0db9f9e6eff9fe7fc938f6d6f5e4fb017ffea0cea0f7c57f4fc1e5b2bdc00a1cb9c1e6c865e53309b6b73c4339b0bd485860ca9edde3019804902da6b61
+A = 23909968dd5d139994fe9baa0a7bbfa009b013df3859ff294c5872366eb7ecf
+
+Square = 4441ff36d785d18208481470a5b8ba8cd65a45436c39190dde0b8a2b7d00bf67b185d98ab5c4a7853423778d6333abf6b115dc9567a9f9c71916d3f9db3af82c41
+A = 84307277f79cfdf33d83d7093f1fd8aeb94499a7075ca32733b68fcf88e819421
+
+Square = 50ee0dba369b0fb61d75706652487ca08043eee712ebb51399122353f77f13745ce2ef0d8f0ea7b3fd94e928b0b2b42c2c9141b5697b13b6d1f3d66c6a9186625b87e40
+A = -23fc02d45c820c3a4250124cc457fa3886beabb41d3c1e26f711309604eb253c6da8
+
+Square = da11876b316d4891a2d650692ca776f77afd32a1db08f591c9579fd1053a4a46cf78b4e4cf417eb99eb067ff701dbe3483dff22e7878d2ef2b234244cf7a29d93f62d6d6b611
+A = -ec463653389de3689fe1881679b83ca65134a1498a3543168dd4833a51b23edd3fb617
+
+Square = b342b4aff7e5bad38f7f532f0f32a3672f7ea6521d23652fa09ef7aeffcffe52f056ab1b54a0f3a2147f43330fd199d1f290988c866f61360dc4928c84b3dcde8f395120008472100
+A = 358e27805e2a56195fab2ccbe3f931a4bd14023ee56c8a191697926f387c40decc578cef0
+
+Square = bf4045fd680caa514e9c410fb4404e5e3a381abee023d5b509d6dc0b97386421f55090af8bab5ac08e9b2eb8a36a64c55960be9179d564c5429f4ec595d03d12111defafb7359b418902b1
+A = -dd450a0fa0914f0d65a1b555baaaf9380eaf8d58b272bf9d95435bad53b01337ac8de562cc7
+
+Square = 86abcdf183ca059257c2f6bb91efc9853f4ab42801d3cde88df72d4c904be184e93d6bd1af6fc21a6836c93c4e0a1f728b3722d568572f7ade418274ef2e6ac3463c5cc50990f1017e01cfb91a9
+A = -2e6b4d9eeede7a72b8d0fcf6429c7e30cf291352e1bb43e92c14236716aadc02c02f75c7e6aa8d
+
+Square = d5f37112733b097cab2bb11daa3d9481255060abd7bce42b752a7641a98e140922c375fcb68bf13d4326b374eabe3b01de0f8f6324b7b3e4142051c02d2f18ae2e748cf3c4bcc3fe157bc94227631d21
+A = ea087236372fbb01b80e57b1ae4edeeaa776355457e18165a5dc60ef4b6ddc0b127ef494dc44ae11
+
+Square = 9e4db7885fa5f928ef236f99df3e7c8d17a5a21983ff882032817edd5658575f443eb9c5c97d95ee798a3809cda76d7a0ab9fde757a310e2f5cbb299ab88e92a5771027ab9f26816c02d0c97894da5976ec90
+A = 3253d712d4ada4c12dab41036fcf79b02e80d1a632ff6ccc44d3c1d08467a019cd6221507459b231c8c
+
+Square = cf9c50ee8773ba94c9e943989a35513fc370adc3622beb125252bb92ff9b258b81a497700e3bb15bcb23a5b3082c095f7a5d6eef20433d689c20a5427b661d43fb0f9b7d1b16d1b73b8fd59ed319a26c5eb92fce90
+A = e68a0812d2de2a922f24c4e63b4c33e62f93943b7673e900d12405dedd0bc2a906daf8b4bc336bdeb52b4
+
+Square = f3aa49c906844692d3bc0cf101adcba80351c2e744be01762a8c24804a9d8d5a4cc3c113ccf529eb79cb3304aefa74178afa53f235c5211192d4cd8610c3b42e246621acb3e5d1f9d86ff39a20a7fa9c568356de5b86919
+A = -3e7069ce11472563b0dbeb9a936884df66db83273a690c40e5d3b5f8926fb502d3988591abfaea7b7bd76a85
+
+Square = 7c9a5057ca8095cdfa289b2d60eec80548f9ab2f3a996137ff9be403b529c4672e003d1eb074c76c0086e3d875cfbc90a40ccb61b799cc0401ba160d8d6b6ee46b2f14ed31c83de54cdf83458dcfc01e3234d9717b5f2c7e5079
+A = -b299da84ef84095d8191fd1cfe847b960729a3d1857082f05b2fa30ac45e90d2fdc778013b023f38db2c8e780b
+
+Square = 488294b528e2c2da0145217ec69de2d021ca27f145f7321f06c03316fcc14bd4a9a900bd6a144086acad6d5ad32a6245f5a655e007742aa336430c6bfbe174278884d19fd93916ef57215069268ade899cb92dfed29628327b84d8240
+A = 220fa6eaae0238e78a91e43fd8c2fbd5db0c8501cb96d66265c8edcbd376814c39e4a6f21ec9a6472c6abe8c04818
+
+Square = ebd685edd991dd5180706b72ce20ec4f6c5d9ce038cc8768f2ae2d0e676bd549d6d3f97f6c26f6e36bb664e8a7e6102192bccb354c024670085711db30159c6b7badab7c7c0b91925675ece3e23126ea6feaa28e977598a890e4e476ead100
+A = -f5b657cc38fd11ad2f1b188c61721b5ec6c9762c09dcbfac3edc1f07e675bc058e77eacd01a2b4139b1b00c40a6cb70
+
+Square = d1b3ac1d7042c0200f80a989e053dee31cdddc835889a57482a0988afd82b0fe8d3667270a72967401c3e8d80dae349ccd4063f11cb24dd7f9a5aeaaa7c0bd7bf7991367b0d7b4d374dc9c5017da81ba39fadfc3b760f68da95ae1eaa2eea3fb040
+A = -39eca1bf5e4807fd6a9ccc9e3138a6fb390b10a330f0027f0ba9868beb77c93160b623de58054a4522183fb3e4e2d86b08
+
+Square = 41c5e4bc851d48673e0a16336f0decbcb59dad36959b310cd1a042d24de00c587db47058c2d91d7f9982bdbf470c73f86e591a122b3fda71796e465513e10e3cdbd5e6bf035595644d588c091e23a57cc47b5173743b0dca965902918d61875f88735a59
+A = 81c2caee75e98f1822c854448302243feec55a5247bba948647f12d7e0bcde4b1dd6af63eb1ef948eec22a87d2f3213de75b
+
+Square = e712c3705ef2779ec997c430f1f8b7689d7edbf2daa733dca89612bcb298180b882cdfe8e5cc1104b9f5d6d8f0978b46eef4f297dcc83fce4c39821ed3205e399328d69ad484d8b3189e207193203ef79b763f5e11778dc24839b4feaab291a0464cc66edbe10
+A = 3ccdebe5106ff5642b4ac0751bb799c27454f904fb72863d1055d1412b2359120ad196b768f6137dce4cb85cd29a990838a95c4
+
+Square = b5063c05ac122d0d4b1e0d15c913f70f1309933ba737fccbc02d13a6c712e7b75fa757ac0e4fbe65977f17bbefde31c8fcf51f867a698233bf25bbdb1f03c104dcdbf1173886a48eb5a8b4d27cd841196de0b53466a3f1d28500fb4dbcee8d3458662443eb2aaa5de9
+A = d745c04ed95d4090ed66784339202f9d0e57bdc1a6f6b6ca09337153f0236cdf99b61db85604791b3a373885210f6aade8530c8d3
+
+Square = 974463573c968f1734741dde2a800761fa749b553dd6499b920d3af9bab73a87f40c9cad39c51cfabcfa0895f1970281af063d80f89f4103624a75bcb0d23f5ef6c1cd9a10930118e1459ee8732728ceb7961f7d83cd2344a51e6229fe708bda46382e142706137facf7161
+A = -31323f98f0f73fb66e541471774ce0e0fff53d69b2b726480b9ec7b0775b345ec4ec57c4334ab8ff4b388f4c7fbdfa3beeba0f3e0bcf
+
+Square = 673a62011d769ff0333f69f10f00b28781fece47ddeed25fb0bf4f8d95dde4efff60690076aa520ebaa3ba63e6d445541b9586241141ecc37cd75b178389265224533055ec82a393e5dd61640d3f442adaab917c8fee1f8fc0ff8ca8d577e1d2d976c2a8b873f699aa92c272c164
+A = -a28fdafefdd393f993a8fc1ae321e420451dd0c5071410367d5a911b2a3a668bcae4452e134159e0b1974505f99865cd97cdb020bab0b6
+
+Square = c4f34585a29667b582a3ee69b1a5f6c04746d105a57bc92763958c5add45c64b5c1cfeb1a321fc5194aab818c92ede5408afae0a2a74ed4c7757dae0bcc602169a805d525c5a63ca97391a9a7987a3eaf04bc44c89547c5d312f7193fc571851b1a8f8f091849f649ae91e15a050f5799
+A = 3822b607fccfbf0c5be97d4358bc682784e6453c71781fd3eef9d247485211c55d742279a35bf35e64ba8ec8cfe20dc0889688e2bc81fe0c5
+
+Square = cfdf0eb68dc27d60840b8afa8daf96bf831002dadb2801c5d6f7ca558256bf3c7c5372fa00f2b3e300287745f8664dcf8e679fa35adfcac93839cec53b349553f31058a4db05af40b047bb367234dd78717aaeb80334f0deabb09d2d4d90394ec28cc3589b0aa78cf227ce8678b8bb5cd775e9
+A = -e6af13779d5a5eedfecb7c4d34009affee1f0bb65934ea9656ed6eae02271ac8a29104439000650a3a8cd7fecb171a7154c0e2bb2b1cb908cd3
+
+Square = 6ec1b1333481c37be059ed7e088c862f869bb559b34360781f7263eeb206a210b90321aca198aa41c2a79e3a8d7df4336c75c87ba2ed4b02052a07b234afd9d2cb55413d4296645cd0dc8f987120acbc82fbfb089190f50e55eb1f509c86734dc14b2e8ae42ce880023dc7a014b02727b53d0e5f779
+A = -2a18acca3306bf06fd90da4ec2cbce995fb08beaec6d1cf4b30694d682c83e04b39f9a569eec52782b9eda7db0680165c77a1b0f54a1b995f8bd75
+
+Square = 5382be4ee86b9d80dc2d4ec58606ac538ba7074d57e2011346f0dfb9a9d6677fe015e4015ed607906e9068a3c5601f0bb77186a9d147416ac68e344318cbae5c70c437c5e1dfc2d6c3c8725198937ac2d8e796f749bfe95c7fe6d0e460a633be2d86462d48290a2f8b344ebcda2f6ad353d6fd5f3355d819
+A = 9236f7ad22da9cdd8c187082c630098bf3a558b04856e876433c570a63d39863416c9890dd089f7665d6ba073b2ce90f88e7d04af96f1c82287903fb
+
+Square = d68e15e8a46e001e47022daf63d2b33fee0f9d3dfefe9d204b0de6daea31dca4b287a60827bda9de2860c433b77186aca10bf3ac1d02a204ddf8bf070c3c20ea69d9638a865c8843e8e63211951e10a844f8527345c5bb5417e3301a19c929e6fc48902f0e0be8e393ecb3fe0e9de6188a72d102fbae846d05dc1
+A = 3a973dd50d4239f05d86ba25ee6ca8f8ef46424951a8bb89e7d1d6e066d6fcbabb3758ad9e1647a440e51976c0ce628d78b59a4d9e42fab0c723182b31f
+
+Square = f03a448bc7405d2d54c0ea1a9016d8757d4af893024e542df80fcce448491d07a4b451d67c9e7d9a6c7c5a6155bf156d3cdf8103162d8e0265111655fc0ae46f4be944fdf275221b217274357977abf64316615dafb6ec84c5466f617c4e8d9ad4739f3e5050e583892db75366a4a7d2c4558436ed036a79084c7f9100
+A = f7fd0a9634d14d540daea21c7b804d37de49b7c13bde85c045859ddae1dd3142994e385f455becb7ee30576d55d4dc2f3d9d82e86032e170da1730b2c8a90
+
+Square = af945dc2241029744548517dfd7858d42097076b06427419e74ab08071a23aaaa1f5daa6290287ce8e832a0524ba5581d64abf054408ecf6ed21a4f8289c1e4c7a8087384d268a1ccf7ed40e74922a619b5c1f2c08d810065710046190b7cfff33d4f67e58927477500eec54ba4f63a57532ed10c6b861fca9d46bfc3d32640
+A = -3500a8b6d244f1a21e10de7cfbeeb75d57ffa62e9dfbbdba8fe93d17488c56dc89787f13e660d0d7c7755242f8412d00988bfc7d3f6704782324c48691e7ca28
+
+Square = a466e34dc7875aaf945c088bac23f3347a41f7cd039b0c9120c2517ada94b96bdd72d7c9bb55539af12931a3a39f6e09a4cd4311fba57dbfcc51bd17b03905e2560275c8bb3d786defeb131a634e86ecb793867355b048dbaf2db8b654a4d50aace6bc9d60de6934ce25ab58381f6ddbd1c063652e283c30a2dcd61d9d776d60e209
+A = -cd26a0c3d84e83d9f14dbe95cc39e3ed2e8861b76f4bf55ab120ea636d8f9efb0b6198986eb52075108d0a5c6ae0ee762f834f3db802c3f20bedf938f47b8bfb03
+
+Square = 9f3f4d5110ea1bad21fae923825ba869a9982b753284f1946edea19f22cf0a49485b9336a2af7df8bf2641cb2083f4dce82202162d85a5779a4394213bf3bb3e47356bfc1150e66ddb6cd945092c9af14eeefd2d08b76c5e4a585ed8ef39202c42dbbceb25697f22f9508e7d954d3c1da103818aa6f63121f895e2c26d3d7463aea7ca749
+A = 327a2f6607c41ce920c14e9c9e8a059a931d71aeebc3e05e93107265a2810ec286819a4b2af9d2b70b754bdab6022b10ee6b81b32a7382cee99fb2bbcf6fe85af05e3
+
+Square = 50ac4c46f2014a7a382b0d5ec9db4a67f34ffe9fd5410995810d3ea8d7d87d47442d0253c7eceb1799272bb5f5e7bd63174959f9844e5b4b65b6a4920166d83d01a5c2638b4d3b6db7fed99e28b9128dcb7c10be539114c5887842f8e5a7fb743298ec9642e50bd0979156cc6aea9ce802a0c1b14a2a1b7afe28dba534c9933209f14474b6e484
+A = -8fb585e01a0c62367dfa8a1953e553476b1564e843bdc2c5d964864ab2da56e0bfa7f5ce5b7850398451619a061de02ffbe0c336ecbeae818d32dcd40355fd11a7a3822
+
+Square = 9214e31bb62f62a7f92d6c7f1453bc4430595a1765b7223a1e50ec30f934908c19fe82d7bb8ef1174bb6787aba9df1a38a84203630ae9f62e08fb4ac55ed329282315937d193992e9e12adec9727ef91df5a065cc5858062c765f34bd2630fd3f654a8f8421b75dc384477744efef3d6f0d15820c9328bf43a43409f6527dce48a92c3e1ef145b5e284
+A = -30587ef092cb9456caa844be9629d77ef1bfe21d2ffd5625ea353beb1f294e38a7fdddd5bf77cffe5caffaf609b8976756c9eb4908ca77b1630ac0d706503c46177c5d905e
+
+Square = 54bf52644a244276ad3dac90661a1e21468f23a117a1fcc904c66119d86ce98a0b90fd4096708bcefa7a9df87c6bb85149305f193cf5505802172ef9ec343f662a4c895a9d19edeeed5d91e20abc894948fe59c1869928616392f3694d82aabee325b651e1170006ca1fc355212308442a5ec8a8fda4f5f90b7fef2aa731f3fe0f028143ead04490d78b2151
+A = 934b16f56700b455d5791ee8c119b5921976a829bb5d1fedb201e63c9ebb82afe4e29aaf0ae27148e4d34269c48dfa42131cc8b3b78e23ac3e7292eb0d715247a345c800f377
+
+Square = 63b7884fbb6d5521c38f7deea5cc131ec6bea15a362322a8e27c762880836cffb69a069a168663908707bee9d83aad41c045bc84dadc6cd927ad62140f8c2fd001d34f0a7462bc939cc8996e17ebabafda95a73483c70191311a6fb7c670c76c9e2ed7e589e464617888d30cb7793e91672d7de9b3b4b1811b2c009dd1c690d44710bbab832d91f16f9b3564a0c49
+A = 27f17f0865513350381ea1aa1545439fde427ccc64385979bc787cfc4c7e6b624b2c77140da2c4176c55dbe43c506fac14b4cd7815e87f3120330dd3003bee087a371f85d6f4e9d
+
+Square = 9d1c4239accb286c3c7868ad3b4dd97b93774fd0c65e04ca8dd405c0298ec6d1f52d60be6ddb5f8f0389cde756b49b23dd2f0de568a432fb99dbbd40db798261d1dd39bf5017e6dc74cb9ca91f8b2f892c7eaa28485c04a96add206c7c38943912de065be17b65292db5a144f82427016b5e0eb4ded2e4d0b7d12b01cb0b2b61e5e1bf22dcf1567a8b149cc0ef5299a8b1
+A = c88cc5a46bc1cffedad4f45e66fb55dc4347eb2a24a09878358d40fbdb03e738ca1d54a1d26a777915248fd730daffb0d3b5305684709db0f258f581fde06b11a33a3f76b3fa53e39
+
+Square = 789545f15fded8fbf0b4275cec30c3ac65eb42ab8cc75670fbb2ab0b4cd90ed41a1290383b5f14bf87a88c67ff1e04d0f478fb11fefa64e86eae5777855ddeae451e166e23ec30227fb4021d51ec7cfe4ce531c78ba1bf6c797dc73f093b0a5a5aa59ad8de3234808e776d690007c8c332b3f03331dbdbb8645b91552091afc36c28c3229220b1a7966c7cf13db6bdbd4673440
+A = -2bec94112014c1a506417e659157192dca1df58f933510d7a8d6f6feda5031d799a66d2746c09f827199ad9fcbf11f323a636feff5806c9fecb2ac684c2870d60c8a72358562c4eaddb8
+
+Square = caa64c9f6bd66f76c99604d1f2b8a29a9a10c0d6a41cf32b5bc40edd7a1d97b295c63aa62c30498f15d70e427d5612ec3f6a2c1f2997fa9283f48018435fa6092269dc2e4ad524cc6da9689302f5c398d79e2b2d19470ea8240db9df0bc0bdc911c4d53f4f24a7ce44ec76378794d16d367434b4f8b6184c7651db77fcbebb8fcc5d3a51ee9739922cf20d4a8888139fe4669a164400
+A = -e3c4a10a64b7e67d786aeb81bb7ea14655637ce963f46cce59bc0cb6b5a9cb9c92afec3d527119db97bd2605d315cf28198992b4b2206e5616d3c560bc8163f56cb1f5626a7ac6d8427520
+
+Square = 429e4283af7f895fe732ee88e4904348ed01bf579a93cffb7aa8e135d41cb9be218f8b9a9cb4f556124105cf042de51f34c8162fdc7a981de88e005a014149c955068e87214c174daa40fbc618c536a6e507ebd313763fba197059d68c69bd39933d614b2c32f235cc955e335c4a37b9e98cd7f98c7f26ea2da932c7f82ffd95be22a7741da423123f8908cb188abc26afaf4ba6d47b56e11
+A = 20a5e2a911627544219a1639c3321bbcd6192a32129b248cf62351f85b7a719cb275a4e44368a74f4d1a307ffd27ea2cae4d8584a57070609a30fb4e365564908f3d501b53c1a54f0e37745e9
+
+Square = 9bcc8d423c3fdfaaaabe24a910e6ac3619eaa15e23b9f317c844d39d164c952fdf5c4bd270a83f3902e54d3817fd78c96018a706c1f652025dde0b98afe35597e0d8782deaeed23337ef6b3edc9317d54e3c8a57e4e7e2695f9d2681bf82927bab193ca1f135bd0e542696772f08520faab61fb4ea6ff0d15bb91f21e68bd7f084a6b8f24a47ecc30a779ee86610387b29a1de94de517f81318001
+A = -c7b60f4c355f2ca3937ba3c124eea2cd8d3536226a44afcaa3d17abe931c09ccaabf25a1986b172fcf46fb02a0fc36f2c163b6e42cee047c54ab05e9d30f03f6943b9fbab83aa6da12d7898c001
+
+Square = 45df25540de94883dbc182009c29fec43627d3e5758e6a07cf40064e0befa0df184528a84757b445dd079c2b0feded48b651ab18b4bede2a81796be45caad0125c3692560d19cd9a6c8c0de8383fea0bc1ab46f6aca4e9c36b26575cff88fdf1eb1e13182308295457374968fe3a9ca34c6acd24c753fb84d41246614789dfe154faf34fc684cd15035dc9c1c6b0ea171e089e0f3236840e355bd123ac4
+A = -216f8a9a3e54d4afadf368c2693743efd3eaa4cbda7a87cd07f5b1a713eefd2548343e7f091ee4d9d6ed1d4343c06a0597db0eb5194b91bf2c858210557a8288c1aa7b0e0607a24dcff9de04146d8e
+
+Square = 5cc707d97eb107c5c40c0f19fd432cbac9855f280082802dbe4deb45bfd193ac7a9149fd12c4ae6e9282411e2f1f2ca92135424f215b800634092ed4ff2859d16ab9fb8619ece41b50f8888d3e13773d38789e19158e18396096dd57fa5470f50b391c22378d980e59b4585f013e6db52c1e24c14ad83262fd37d42f52323896f7d4cb3e38868abea8a07e7ad3f90512eea001c5147645bf00396cb0e7a553f1
+A = 9a1d1b0beea76e7f32bde9f4f2c8bcff9094db2d32c04fb7ff43624b61033646e482aa0fadb9f8b4225b47121070b4ee5d6818d3606ed775aa631e0ed42da68c2a09dab26b6a4d09ac226cc09321fed9
+
+Square = a32fd053eb90c365e77ff47573a24add3b25b4c301f4c662dfc1fa635af8e18e7947381989b37a9c9de2713ca438b9f85890b7b160fe251933aa7dad1c3839d502debb42ddc927fa0e9b40c80dc3d408889be567699a856b1c9cf3a393b3b818432e95feea825c17d0981b942236b3779f2acaaccaf9a5817ca47bd03045fc4de454d8f1d4377e218c5f7ece369aacc35369ab57a71652dd42621491834119afbe729
+A = 33190b787a2c3327b122d1f5823bdee5c93b19b586ce1bf79d801a19b2558aafc8f6274d0908bb7a8362f7f71d3fb52b8ffc87d458249caba7af3a516ce868e8a620e3126ad43d6aeffee11866fe77677b3
+
+Square = 74215d33fa398e21c34034af6f9c7af6a3e01982320ec8cf23074a938f1a31543f80e6aece01de247668fe67f276cb4411db27666e1dc8fb2bfa4eb68cfd3563167d1ac4efa3361f920d8dd0fbb7f06362167f5ab5ecfb72956c20db934f67ff1c75aabb594c853fa61f43d219a3f5d0d45274005e3b167cfff5493b0f26d15f85d8e906a0a6e7645eac1f40c6dc637e6d1e061e5b9071a1227469cfb2c0f17ff983684100
+A = ac6c0b9c69785f35dbe244dc85a54313ef836ac67c853531ef5db45b28835ffe61dd258c5528b0acea50f5aa5c0f5d08dcb8d82ee19bc432fa8a45badadb50693fedc1cc79a17d63aa73fe9597f1d4ce8ddf0
+
+Square = dce5cac967c47b8a58ed6f1bb1d1e6185e849400228afa2bfa05b9c2dd327b04a86f2a4da2d02ea102868ea0c4da0f3e5a40bd02c87a08aaa5cd8d9358b3a5ebd8c9fc2dbb1268c261f46d6717b0307b993deff0adc8190d32b4f2bf695eb2cc74a6a9a712c5a621c673219ff8a24ded0997508f8f9eb1ea872008c46e71fa97f55b839950e63130c38b49c0ce3ce724a0e8faa9738d2e28ce6e7fc7eab62b3561d2981f314f751
+A = -3b735400064b15fad81b08362b8557f8318c20656839ffb4d2513512015036ab0039442032f1cf515f8c10c9933afe4206a2f309e933d1561b06bc665af2f04f4d064e073eed2280053f56cbeb137a9482c0a077
+
+Square = 6b619bcaf632f0d8b1d715e8850c0cbbd29ac6373a9a5e93dd1bbd2b82744a8a50a7446b48c6e215911ffafcda9ed7becaf5d26b7d6df7dc8798d53239f62a482f974bdb654750def1c941c49a24fcdfcfe73881b556a7b528d88daeeaea8d62b357211a1946c81cbf0819ad8d0188f60aaaab4ea2dfef7e9012ade7abeaaa4a23d7403c1248c36aa26b43b8e7de8a5aea639a0449f50359e9b4c1b125a548383af33703f8dfbc2528e4
+A = -a5ccc69663a8712c15f96e6fc746252af89a8c2a6317caef905dd2d8a6d4fe878ac7aa66cdb3c3721ba7dd36da310753dde9801b31d759339ac919a464ab52541bb2e0dc938752bf0f1ff7a9524eb98340d62576aa
+
+Square = 77ea5b715823045afe13d10416dfd46a511141a7d1279ebd624f1de428cc04a4f246246e65c3f84344cebfa32864de9264b2e54d4b3010c4de9d3e6a27aae8f5f9e9d8e49fe26b73ac7e65bb216aa6a42db36ac03d749b5dc04192df819631593202a58264714628686507fc5655f169483b0ffecf45995cbc12faa105895564d287a9f4b220947d6c93786c85b2ee84a0a29183483f7c241d6a67fd0b1c38c7f74421355a14c6d9ed5720e24
+A = 2bcd67e6bde3f54c4ce0ea428418fc5c97272217c6c7de90549238ee322810dcc1bb9385967673aa3f9f5a5c05d987c6445135cf1efc26b3c17e55b93cc052761a77c9dcb5c22927b09e90a92e053ec1bc799bbe7597a
+
+Square = 40d113460ca3e70545bf3613c2ba5de5d8485641ebf531a43b6b8bb76884ff4f348727ac6606e026981d2116ef1e60d4b37b44ed7e2003410d7d636b58aed2f92e962003f28342aa5f059d23b3d58a1ddfb47833ffe1d1deee0a7e78b8f7d9d6487f22376664f1ed9ddb5ee3d17f43afda296bead11680fd17576a122c2599fa9802ddd84a2115f9fda03aba898f66e303895f452077c920a322b6aaa0965f51fbb36f01b1d412c6ccf390da050d24
+A = -80d0699a46619db033461aa6060983def7deeb976d1a71f5c6ddb85e8b46dc70b7ddb1d254971d38ca87c7ee3905e63506c6db105dd683375f4239523cbf1874069266c2c0f4b37edcdd261c51088081d25813758bdbfc6
+
+Square = ace99f98cba0d1dc1c758dc7211aa4078a2aeb6d3fff19bdfa6981ded0982b15bac792e6b542ae48a86f9b40c6de937e402e230fcfc390b10c3e60202dee1337ab39da7a342999487b8d8b0e494f2809cd1bfdb39209da5daa590f78ded211b6bbd3fca9013300b951d8906c9ce8d1c0dd9554d5d1d352f9784f822c928dd9700ef8a5fecf3771966abb1dc6a70b301461eb6b6087d6ab80a4b624205489584224cf6578f75acd8091fd621d02306504389
+A = -349936d60c9d77a0974dc8985930d8674976db6b3cbaa067554ca6b30b1de33f2d4e1c9564ce102ac6387755aabf42916f63632a375d995913f9d45ebda54bee3fdb7cedee46ebb5c8ae7764e4de323c17c797d3b529230cbd
+
+Square = db6c73be2a59bdd35dd312240aef18dde4231c72aa28551bb370a87dded587accec2279bea24c930236f06f24d537fcf242497aafcbf72f085fd3ecf030cd750fb382efea0f82ad9d3195680324d73fa99d48802d085c150164aec0d29fdcc3262264bbe72311f89989cc71a4afdac6ab103ab4fbb6e973a42a1f8711bee463d198f727dc7bad848ff8fa77cd3b2f612d142ba46e95bd79a86a1fe4c2b8f9181be84825d05989695842113828a83b826e7d2c8c1
+A = ed01dd49d2e5d51fd30e9c578259cf107771b4ded6bf21f8b9b632fd360e34da740e0b1af6b5a67789fda5a44025af0f1547271ca8accc7a975d98ea7ec3d41c9697018d84ffb5d49b88d884ccdb011f715a199ddc44a4109261
+
+Square = d6e38250ab89ffe11abaf8c5d07ba11e9053f1924ee1228f834111af16ed282389d04330cb0f47dbb186dee577aed82878ecb065b759312eaf167c4698eab5ed03a8657341bf5fb14a8e28e3b443a6b657c1f4379ff2549498a33922ea84f1fb19d10866fb0ad07ce1cc44c93cd4d9ec6bbb0e61c797750c6b5d7e8d55499655dde112f4747798f0e985fc2b937a44da9b04c2dc4b0816cfc57da1f80179db653c1ce287e786ed7eff7ad6d1383fc6de8c941d4af7bd1
+A = 3aa2e696ee570160b2a869c3f21c3f223959a185cda2274feea1c829af2234c70a504c959bcc49fe0313f4f5ffd27448e28aa0fc6ce24f36943d334c626459d7e6017339e787ab074879ebf697a93ad93835d69ab09294d007a0837
+
+Square = fc39360cc0fe040b6f8340e0728c650e5e74cf1664f7b301e79986fe066f36e8df34d38d1a06b74a1bdc76867baeb3f39a9161acd200bc7532fa4aa0ea829377659646f073db82ee044279ae5fd797edd37d3261970819589853cb320887a085c4011c23d0da9b6d6f1b5911bb3399146c2912a967ab3b3f611f0bd52e00f418e6a6f0297fcf5c4a1f71c6bb8cc8e1c76694bb7301502d1d00c8b6c05bfabbf5d350590561abf3e2b1a82e98b56583e2e4e25cf707320a0e40
+A = fe1acf3d7b54e718c901c53f365894c22c8bb4182fee8a4c2558731e01e1519bfd1bf6e353483b8c4219453fa66f06063c6c99050068c15cd13cd1648ffc42b5badfc70f6fd4a0a5552fe637e54c4f92ca45c60cf9a0163978ac08d58
+
+Square = 9abf1324ef65c726330f64643a024c466fad37604f4dd3dfc404d31c2a430fcfaa0c78283666c15a094d494b96d3c12de6e29a34d2c99f4f8cae8217bcd2a989d59807ac68c46d60600238a86155de499eeb35642d0f581045481b40e4f0a76905f9b6bc5b9585f77f8410b99333f7ea983c3f29f3fe66ca7b793b784a5a6a4f74512aa4385dd1e996832b1f41bb3af965be58c4ac5e867cdf8dc6a4f9d20a6f1e16e153fcbb45ae5fe8a798cb06a4ffe467d6b6aca2b31f335a344
+A = -31c243593ea611dffecc65d1439db345b2e89941113f9792c91a76b4890db6e4dbaf1482ee812e295d27956e48d07a14de38357f15b5931c5cc08d1d248df7bfee1cae5b5ce98984c5043a3e1a2b449ba1671bf1cfef91011e12bab94b6e
+
+Square = 66aee3e4f43c672e0478c76e2092bef33e7c60afee5d4c7defbcc5c0c86d8fe956c90a740cebe604224cc3f518463b1208699b8ea2316315474991d0f120ae905a67028492cf46fff2ae244869db2a02d06aac6ac6eb054fb3c14c756d8a3e7ca64f06586e3e86e4477f185ed527a8aea6a3c741f3fd4b64a2ee77ff140190260c431cc53f411fb227377c02f85d0258a75bf6d44dccbb8bd04ebdafa115dd55b176b6eff5567e5b1bedcae15110826574053681fe25a695ac4540186e90
+A = -a221dfee30286adc076673cbcebd24a41a438a0a7a6a547c75d33149cb1a094a8425feaa5a23cc234a722db4cca8d5912fe1dfb6db4e92bd87c12f0d06b6d954fdb9b172955412b2eb5c9fa3b4df2933390384fd1f929a2b1a8dac479ec94c
+
+Square = e880f8655b51739e34393c3e6d69d63e0256b1a887f7e69f40c78d21133b17e92277a136f5e37da2533ed599efad189975d22ad0340005ef58db0b471651d749dfbd48b3f7b3b8a42d4677048a855e99dae6c729d8bd7eef86911feca9f5490dd216b06d9e8d1ab695c1081e72449baad28dfe113744853382901e6bdab5413c67c52d6cbbb2e0bea711edbb3a219a4046e8739c04729cf8c8210028dbc4087737bc6c1d7e0c15ecf16774690168342b1372d3646d4d8696384bc932144c98529
+A = 3cfe075d4525a3c780d6d05f7bb708b2fdf7277a0f9967e0a209fee9d42136a0bbf98660d8ee8cb4720a8042da09f6271c45ad13db24eaac465f8207f78629e9085c1c890675f441c78efa38e5022b1b80afde5e3fd08e55648f2817631eb6cb3
+
+Square = 8d6cf4eaf58099b1323fc598b7554b371f4afef5ab501dd162ab8429333d46916fe15dfc4ed6a99ca7fa7fc1aaa0cec3533b41e291fb7f69b560259507226eca87aabd07b1ae2eb93bb53f98fec508f051cc04db4a172901e06b74229c4fa3f550a81626c7a63fa99d41e46c2cf792287a5cf7bb68946971bd43c7c0356312cdc25e524665dd39a24b6464bbbe64fe8e87ee313b860639728a9143c3a6118bc8b150dde6c10a13bea637fa8873c393e6338319c506aec6ee973b4b52a272a74bb62084
+A = -be46a8072aa44b3bff0f90c81474dd576756fca624c15f55a17e1d0bd2842467ae000b04f79f561690c93ca7118ce17ecf830a8da3678c15436876d2a74324d9714dc8ad8181904be657d7f1da3313b78448cc06e32299a09ed59bfc1961e8bd722
+
+Square = fbaa4fcf9800673fbd3a132305ed3e14f4889518fb56ab82aa5e9b3529b74d7f9a467626d68f4709a2030264aaebcf05c0a0edb511e81f357d85b79d925a24605f1bcd4645915bb75d363654b676266329df532cdb39152fb360df1b9500e0c296014289650ff77faa78a604397a82b34d16484e94a8de123fe720e514c88f11ec276725111563db91477480c3245542ec6bd0bb2f4aaec02c6c4eb1769030a31b05da3798c224c9117f7c38d3e98a343fca03ab584ec2d7e6db60fdc4273c3d8e23cc1ce09
+A = -3f74b25f2a9c4d8d977e69a4e067f9fcec281136a508e365b282e5fc3b1d097bc6a0f59f7827fb90d4890b08840a0a1919032c67448f8f1a771f785a0f125a4aa4137c154fdb489dc1099d57bfcfc75f4ca5e69f93f2bb87ed09cc0dc620d3e76ecd03
+
+Square = 5135becca97d93dd4b16a5a1105ba3a3e3fe02bd6a7c3cd182186fc63ed4351641182a2727ab6715e9672458dfbc31aded4781fa345054eb4c317872e2af6d4ed64b2ca7e8c25e1e664b5349df937118632a64e4ce439ffc625a5ad3358270dc83fdfa73c7afba03406094fa36d87517e5e2e1fee5526fd2dc00d9210a0f6c3745b3d4bceee5f8b03d976d696c57a09d1e08e4ce780972eca4f2ed6500c23bf5782c31f13059e48246180fd09db693d2fb5d48d51846ece8beee45cef7efc87c003b44d7b137a900
+A = 902fbe2127354a7df5cb7fd057f3d080a7bebbdb83c86a50560b8c287a37a841bb9c8421c63d359078d2948b6b57559f98fad8f8014f93c912cb70a6701c4dc4fc5e88aa413fcfb685c32975a8b72424742eeff8262d28cebad00c5fcf88baeafe8f6730
+
+Square = b5976cf6a6560412aefa6704b126e0d987dfcedbb4da436c08ce17b1bf1b6e0bab9f934abb5c4186a5415fa38724fb8fa341d381319e7d768209ab108c8debd99075d31deb3e03ff7d23957d4f3204d543b7d9079cf337be3037b1cb4908fd8c104d92e52f041b4cb27c045a741f4d64009980e8d27af75d9493920ed98c7234777592d6577f2d1b3a0eec645ab4cee2f28d9e4efd3e4514db6796487ba68a462fa0e316e1420d6604db2b901de46553546cab42976fd0d459afd81196275cd88ec4dd448ff331bb35499
+A = 35e700e034950bdd7318d5b3c17e90a4772ecdacdb055b9391b31538eb823fc8a4599f029e78e4fe5299ba1a423a449dc257a431d189dd5dca275c02cc1f12417e111c73b731631d8a1741b907dd8f24de226ddf9e3044cf4064e8e51ebd55be774be7ad2bb
+
+Square = b7de0f73397893a97928e266bc56299cc8d43b16a251992662646072b58fa578ca80f7be1e12619012b130e9514be803dc166b12ddfd26f558d36c2053ee6209b01458379e49469753300ef20f6b3dcd5383b121861c76ab25debb28c448ec33a81250d05f7eff80a5a4133d522d270fab29f739b607395a77278609aa5e1a55ef58d1d48492b71ee30a24a6505aab1a3ac22b9d143c9d6781fae14bbb980fe3a99dfa9a1a406611d7d0304493342f53faf5fd79f9c96b9583a219a1b22aad02dd58f32ee98146b3a8cf054bf9
+A = d8f4d3bcfc7eebd7068b851858c3668ce062a834927e165679b49132d4f780ca682876c65c7cf2e7ce34ed10e43696477da6301d13f92abb8c76e2424c4bc28a6565f15e59563d607b852dc946652b68fbfda1c3200ecc2976400ce7296b96e75fb059a4c8eb5
+
+Square = 5ec02661f49fb9807bb73debc3c6eccdac1df1735e0d61fa7e0eee07471068a5809796a2af490c46a77d61f618b44a3168dde67aae1cf9e530382411056958d55bd18f0e76fe2c31c98b00f87fcb7f5691ed5b65424f82204156dc361ef6dec5d44cf690582599b3994ee47ef42850d5d2370a4169c5f73942657f85422ca24f66943877f73af493c865fbeb29574cc1cc730e9bbb097b598574f6b90257748e950bff867bcc01bf62f8df67d7aee1b6dc1d5db88826e86a3f9fcd8663e09cf8393ee71a09c43d0d38ba6ef643f4ab1
+A = -26ef9b6708a80d00f4d01e0f0a5546ed217085ff23519819ee89af430580ea1f086beb0eb51982682c6d3b922a2c92752dce63657836223a9d94964bd584bc8e37c6e30fdcaffbdb128344d51a92705e1c9f94205ca36452c15a08f7e62e0e02479ecd48085de8c7
+
+Square = f6364409467a829abc2b13c93979dec84984caa12154b7cda2f4c8d91bf24ad7c45a968ffaac8d6722cc26e6aaf52dd29ea2f09370ba46d79684b7a06faedcd17136f35a58e5b550f3a2caef7b195d8409914fedd3c3154101bd735155098e8b10fbbb1b2e13555d2ab5d5b52b203d4efb27e498b240f37178f2e89b413f94859b0e8b2ec10b926c8c0b6f2937ee2d0355445364841c7e0539f7073b88c7d568edf1b253f3c10627e22c2ed731b7d4d199449cb0b5e7a66109932fe2c9cd741d75170deb9f98469049549c10a7a622bf6e91
+A = -fb0eec3246e99212879e51b17ea6615275818ecc5ea3058b13dbaba2576ef90e1519e3629b09fdaeb02661091c395c862b848f6326b9f536f7af45718c4412f09f19261b537bca36742d3ec66f964343516aae2ac27e249a15beb545b447e37b4062180f6c82809429
+
+Square = bc4193ecb5dac900191e02be06297106155c6840c4908fbf6e41e9aae137d53c3d4ffb87f334f49837dc4ab7a66299994e4f5c9bf6ea03e7db663bdef066e94c610580a8896a9ae9c8f6587eb83d789683f5d6391bbac3a1dc1de60b4108428e6f5fdeaed6cd3e74fa01f85c6368023b61a413b69b14276b66f22653491e4f25790985053d075387cb13c79dcf963b6d880d01174314921afe1cc700c02efd2979dcbc59c417a6316db9ac45a2d60d2a036571bfbd75f9f5e42048ca086cfb4b818a9beca4a6e0ed51afa320ef3549151fb39e100
+A = 36e1f16043b4c9b4a304496c39dd63459d6521d2ac92916d348daca3f972835973fc8d21b07b09d8f5e3197b39a8f3fd0011168b815d67c48143c413e169ffe0f56ff2cf8b6596bd0a3b5b7a6b9a14ffb797f350b7e6aa7020d84d1d1b8006850139795abe2c74f03b8f0
+
+Square = 4cbb5bc1dd7112326e2c94581f19efc8fb25339a299fa9c007114c3a22b395e9d39a8ffe21134e97ad1b87b97e667ba48b2a40af61afc81fb1e20e8e38c7ba666b146016af4dff3faf5de306591e5ce6eddc1173fdda6fe241a9f2fc6e054c41e56d296f8954377df0d140096b9e9d6a5a23a231db4dfab0cabfb11190c7a0d1c55ae35203836d433da96ca7339682bac0a7edb8b5b4dc267c6e83ac9b67a0d0d564717ee3c20aaf52c0a750f3aad94a12537c6971ee009d0f82ff576e984b06c7f7b357f5c049454e31326b952af17aa62104780e9ca1
+A = -8c279ebe466de3115b8740f3ff9c1f605b4eaa75512d82fdc8ca5ce84e11a68688154fd603ae1d607807dbfcbb822a8dc259098842c6a7b7ec350be29a3daa20fd5b093a56692e9d42e7a389c4ad2122a74205f835e268c9742d09ad36238c34e143f6e2ec69c0f490d29d1
+
+Square = 4f771ade09cbd1a033d2bfc6036fe46ae6c12acc6f2b9bd52e7781693fa6358cf93089f23d1f0ee6fca476a43093b9b52446f3a7abd72ed0ce9b562dc438822ffd84bcd898ef9d092f1b0b7ff89c4fdb33d8715dd4a0d68ec49ad41338fbb62ca87867d847a4d99310641a37ea78b04c85606069d0c0950484ddbeedac8ec6f95124e7fd83da4e942d40103bc14474f5cb125fa0b06cf167f076979948003dd8dc3711923f5af5beb5f56c0a48ac0c5240b62738c1cdb06b87ac3dfa17befbe938ddc7281f6c248c41a1c7b99b93f69fac83a46eb298a9fd8b9
+A = -23a845bf2007ba8480e3ece0a1bbaf8bfccba6bf061e3fe1d8bcbcd6c761e650891c0958bac68618a1f55b27d2bc6e1e1b50afc29f58e2e034bdda8405e5378cb5bff0d84efcb458c5428fc607597d89d589d85d90f3da4b89a64c9d1623b98b10518a6f2e7d2295c37527026b
+
+Square = ab45d12a4e15a294830741f4b9d4a14cc7dbed1c3454612047f890211c749d92ae0418f11cd44acbf1585b1f7323b33ac9a4b13c44e1a7e31b0dcc1c6dd4eaa12a655b5de08f3b948270a152db7d9e04dc54677075797bfad6a9a0e3958458d40e3df5e15028954bae99518de4dd3adfb2ec4b38897a8a4e4807849e1416aa4040c95a0e49a8d2889f6fb0537875f87516c3723e8d3b46da8da855929c67c0eb83daad62ceced52b4f52d2bf1c4e34f26bf16aa7da3afe0f5df76c0858ed98f21e1fc3d01e1572715b774bd5c2faabec5fa3fa59a7a1f32565a4f1f9
+A = d164d875e1f766b4567e9228241213e69d6b6c58620600166fac56938c5d9643932d01f1f4a2263dca4b9ad26dca1548e4b5b7e27581a63375d0e624f4e4c99b7fb9aeb25307c61142760bc4771e48c7ce38f5eb2408def632096fe40b80d488fe17a455d80edfc1c23c429775b5
+
+Square = 5ae4e7dc5727543af39ed3d5e9ac086d1a2220421231b82f6f41caee7b9815b4049aea0d43ff499c6c9e1f226f8641351d03f37731c64686d9a9ce68e9234d6a762efcffdecd42f81044111599963d9b6873cc20bf4c8284fae03d2e4f238a14a74df4388fdc80fad0375a5d0d974da7854ede5896ed2ab25d2b49a3c39093600f73120e4fd2faf75381854f6ae80f81b977f62fc72f1fd01c278d183544052b77bd753dd88ffdf5c01745521fb8474b5c23b0b7dc709bafeb91cee0863a0c23ad7192c43cf15fc181d629853cb9b8334082c915dd3d04e3a0a81511d2e84
+A = 2622a7bf45ccd3cd567c757f4c5796b5a0fbca555bd0ac2759c24083172d82d6a887dcf93d9788fde052cb20a8963cb6db22bf5eee6151600f9d1896a7606b11a1b100cbc0925bce037bcea57e361efcc560a9abc495d7f7f45831c6429ac8f979dedc08c304f4da9c0d4d687376d5e
+
+Square = 473cc933f5a650a4ae358c7f486d325c0e20c83b54838fc08b6ac3ff010f7c4b6a609bdf472974dfc5abda0c6b33c5ec7dc4628d85cb4276108e2b0bc4e19cba135533b3d7bb6a94332aea3165dccb230860d2353166b9905635e606185b014730e9dcf2c433e18cba83859fb2eac4aabef68c8314ef86dec2d534a184ebc4cb193643add0897341690cbe18bc2e775327fd7d71ffc7ebc49bad83cd68394eb276b2e615ec430180303010a454ef73b6a8f02bc48a1fc8a32f8150ef1b733f07da752b8e808000329f4924976bc8b8573927f18ca7c88c210845de6dcd0dee2904
+A = 870b2c4b054076d0d02877b19fe1210a8fad3422b00905a6db748239b8e807716ed9fee0d8c25496593717917edceb5db57f9960bddc1956b6652868d6ace82827bbbada5ae8c15efa26fda22657126c6300906f90e8fabfd58ddf312ce0eee760e0090fac44f00378c676115cd0639be
+
+Square = b151124402d2f04b0e6599222d380dcf67b9716ef50d2d9ded0b21521b34a7294171f71b41762511b7cca93d9f50e9e30083ef19144882928011dbb143807d1b88c55eea6b19f0c4180023be6da63a59b6bc027aff3f5abe2f65c73b2de1e71c5f4b248bc4547040764e83a860cb3f882bb8b5f7821f92802808fa37c50f2f94d8f56daca841f42d3362762ba843aedbd03d3cdda887f75ba92423965ab4256eb842ad755aa7a2af331b488186f891065b07f5a299c807dc24fc176e085a8024bbbf12f386ef49ccc91bd4ada0936b6de78088cf5952ae6c04f6916799378bc0ede0da4
+A = -35439da9e361700152a35ebdea253378a1febec5f288e5b2bb0bdf25b84751b47e4da5aad7453b70cfd6640d5832237d2115575c738482ac6036c5fc21a981c0a7f979c8d621a92c02166b777475618aa6362a0e225dd6138ead3b2766ed9785ee01e4950a863d2fa0b7f5cb4c9a108bb626
+
+Square = 4ed7263ae5beb0069f24318b38afe951a5a058a2e960e67f086c9680d0cc6d713f943812070bf94152f7926bdab9e5908941261244542b832f458f05ed5dc048c8b9eb84c2a85efe717e257796b4ca816948a6c8ea209c0675efb2fb5af4622b44e36066593db01b17f4dee21d7c1337ff41436cd0e5a8d01e4030dcd3d49839e59996fbbf1d39bd205343a424f2395b4d3eacdeb9ed3235d8df0dd00a2573260af63db3116a7c65d1dc69684a05caebff34e3d2cba9d4869a953a7b1fce10ebd008cba021008ac3187bba846abd7b39a1b97c9c07d8080549e313dd58b716022de3c1920329
+A = -8e1141dcebae61d5c4d81697f001d792ee2e847c589816f923f0ed42bb4de0d8f911b8ca47ffe77f80b9da6896a9b42f0030a3276218868bbe1a3fa64fb0a577704339af5dd82e66780da6f58900da3f1d75ebfcc302f78ed66ea3c7a737898a29b1f2500686b43bae1e6571addd2842cdce4d
+
+Square = b09f5e9472cbb75070a67d025957fd5ac3be89c41e4acbcd5f75780ca459562461082c3f19c5a4a416a668b0a55f31f74cf2ec44555ddc43fde64da0ba781adfac4520dd0f78d04d9d2fd33d8b49c72663a6bc845015523e2e4e7ccc69e5b748b8b891e4089420bf0a3f6032602824c7230b5ff95f85a688dcdcfc890af3384710a9fe32ecf9ad7c6cc5761f13079b19d7b2906c7e63c14b64fc88c6f4bd7c41c0356c777d35c3626d49db8cb2d1e89ce682c7fccc3a459b08c20c4e5fc3a8eced9b37d01bed5af6ce9baff0d2b435e6e62871fcb20cf9ec10d1897a5c76e73a441e07fbcc2d9f4e4
+A = 3528e6581de547de385c93ccf1086a17614f23356a918b25bc6d73656a2302b318963bb679c9a93357f4a4f614e74f2e5e88e9c8aed8a6fdd8434630f664ed15ebb6095cbff1593f188a12f4dd6087a85b202f6c24df68ac3b137406c88c5098faf47d1eeec0743b35baaec7dae29b5a44eb09daa
+
+Square = 5d5dc40783411475a4aac7c1a1eb760f76fcc6ec68dfebb754251cf499870654cd309422935ec841e6be4f5a15078356235c2b8cbe1ae755cd6d814e811072bdb76156b83c7d2064a202ff90af1e0f88f5889e5729a3cffa9faf33c463b74d0ad21fbb4473d4d3ebfa8a52e9c209ded5ce5131b12b69747c365146fa17ee5810e0dbab992f9da28b6c323062484d62472232721d608cdb9b5a341a677e2d7a6e5a983247d9a4001e16687b489b10b18bbf205f982b7ceee27cc3e9c6641827ab7952373f15d36e5f177b82d7eebb3f5054e12cec82c5f520a2675afdec6cbf6235d358c2fe73344002e400
+A = -9a9a19fcdf11bba84b0395088c5d187d84d69b68b77bc6418f63c88bbd8dbbccfe02917d814f9e2241fa0709817a0c85bd554fe887babae7439d96248514c12d71587c906247b3e965e954cdd57f1e51f1979f73c3237509863169efdf281c1359488daad3d9eb990a50ecf4d3fd25d4820077832a0
+
+Square = a4d69ed4c4c9c08116ec5cc49ad458f0fb2ca00f356aeb148f18037bc49621e14820f325af39f3954bddc9cf01de7ba1e443088545883a94c04ff41a7ed5f65676109c5b711b4115775489667e00aa1b77f6dee5ac5c1789bc71c9fc797abf41c7c5ae3e2c1cf82d5b49b6c0da25190dfa9360b99b2f63444d21ec6114038b8284bf598eed24a2ab2b9802d6edd5b0fdb52f60621a87a14612844ffc71ca98180ff0915cf75f47432f73d28dfd7a932a125095655f07f50722b1673df2cc4f7566a1c6035792ff3f02356b9b9d25e905121df768dc6a1884cf5483eeb813c1c009fe4ed043febd61800ba978a40
+A = -335b12e40bfe0b847ed6ec143490df33d2e64ef4363869cb78dec008cb5cd66ea671dba964a53e48267da288ef4040e06371e1209691b81df02f2c86a79cac85fdcbb6732a1e5309fbbdbcd899fdfed18518d47258c9e63ff7f116ef4a8f5c4867aedd907ccc7d222cf8087afebc108f2a0f197c717198
+
+Square = 74dcdacc1a4f02a99e3642f54f9d917b117d2ae8d9c392f8b6dee53fac66ebe1680c8e8cc29f5330e0eed3f63d10980060799bc37b34c93dd7b384d4ba30a5b5d42a145acc412ae838d7b9b7137637546d1118f7cf3eadf88b785f0aa01da8638f027c56faa16aba8591b64b45dae6138c9a40309b2ad29c5029a867465f9c6de8fbc5fc4b0442c8a8946272667c7622454ed6f2a236103bed7697dba20db84b5154ff3fbc6b4b9eb67ee43bcaae741d87ee2093ee67defb8eebc4a4a22d97a4e2aa7d4c31a1c88abf4a440ba4e2a5e40c4d903ba5ee4d80b4e8dffb8864bcb9806e015c1ce16490068df87282393111
+A = acf70350e554732c1972903cce269b215e985ecb8d6eeaa67fd5398d0a1b57c0db63368c0f8c2288c3a0466e2b3db081106b90920c46462faf00b5bd654f7140a689b78ef656a26b82af8dd1988f166ea04e9aa777a094d892bc7da4bc7bcf0618526f496cddea6d67df7bb0de9e99a35a0b1b210ff07497
+
+Square = 9668b9e40a8bdde3c93943a918ca71fa0009cb05a1f592b2bb2c6c6172b2950719bfd80cddaf45d044cbb6aa99715046088f40ec6812945885679231c07f4200023548ead086b834abd8c8f8294db28b203329553242fd2f778ef5cc5ed0b48c7356d8c2d782a01809ccdb6b012896617f11d963300e7bd38ff512829514d94343476818ddf9d712bc70cffe7f767a9fc75a5630e6250ed45e6831b4660eb49d47dd1b8b6a0dddf3fb3ff0e12834337f145f741f70a2aa43769af50f099e004269ac47fab79e060800dc74da88141adbc46c15c7330931e3a2bed9b958f78b30214f81a64d121f96fbcebf7569fec0cdc6b11
+A = 310e7a40667d9d5dc29744b123cdf6a663a1b995f62fa9d4d853cbae0dd23669f4778bb2040317ebf6a06ac6299b21067aece5c5c1afbe6e789d656745ad66464991cada0eb237c6ffe991cac4670bfc90eed5f8c75073f4f846ea244bca0e9502ff56f8e9bc9b6caf275aaef38e26566fef35329ca45392069
+
+Square = 49e677c8b052b7db97542948542449af47e14248021f8d3d3f92b9af41c803072f71050f16dd848aebb270affc47e85427a7c73f227f0d63f140d0d293157af0d972eb5b38de494fbc78ad3a4c3d1ab40197bc4427752b6102d1ced6d6cbc9d7caa0d1bcc57e708535822180055ecc9d9667e0590274b778480a3720823e931ff6daef358b1a1a9092f1f05fbb5b10ad5707a124e8be63bc696f083eb74e5b4f0e3110de8f297ecd30dfd2bcb010dcad4e387520d3d00365fc51c2a3dfe064b1ac77a9295f66beffbe5dd4333e5cd823b0f36b0b94d66507b1d9381060980f62f38a62e38e5a75203233bb8d64089bfd100f3205f1
+A = 898b5f3655de74cec3b0fde2ab03fd18cdbcfc3eeea48ba39317d26917130c2b78e05237cb0454ece268f091cab699fbcd51ce341b53d6ec0cda5d0d5388bac25c6517214a39d03450ef8502e1675bfe8e57bb6086f10ce4cf8ce65eadc865b5bd8a00dc26394f3adb2ace609149e3582cf44246184b2adc0ffd9
+
+Square = ad00f10fed55175159b2409dc80899f9113ba7c8099d0402ec0f520ab4aeeb46d36369494a4e6fa23675adb38148fd2efa082df5094c0acfb77a9ab6ba7a299298d69b04b58011c35325f46b765e580b5c05eca721904f1fcc355dbe39faa92af5c9a6dbc4ab80e62b815b45983d9506ebd52b9efa7a6b9da352d1e4fd6ffa81d3b4596a0c14fb825297da361461ff2240e4378340d2ae529932d78f3d9f6b3c6d65d717e66122e5f590c50ce0a5d81ad8e0f24e104c0913cd8d0eb2de4c8cf62a7535bab5502df3fba08bb4dfe73d89c8b00edaa7d5f3274be9959e7ab6b6dde54f2491728a1dc11fa8e1c6a95e67eb7617e9b7471ee40
+A = -349cc2a5658fdbe9ba5c350d3b25baa38b1ede01926694bd550d36883e53d8758e8f1ebe83e2f4560605510413a7d880929e2d9cbc2730b1736dc2689cf7bbcdc68a342b6398e547a9bd67cabe298796d76b98ed4c1dd9c22e36145892e8fcf2258529aed24252a70b6ca8fd2aad8a84becf7e1bf98b1e9bb024b8a8
+
+Square = daa3835d3189ec9ade592e6076e76d441838077a9431273bdec02379b3a6ac38aecbbd57c3755ea58ddef8105ac28f2ecc8598ec0c4bfc9c1c80222fffc776722eb0621cdd8a0d55f08767fc2922282a76e529d81e4d6e21a2542b8c9a403709ed1132e3b52786b81e684591438fdddb5df2f0b72e6b39cd2db6c0cc55c759c2dc1b6ccc20a5cfd10c6fd345fc766035c7478570d4ac534db3fdb718e2bdad3d096b137bfc09a562043800957e2afe4fdcfe292881f6189edfce52370c0438c2822ce3b14d73b3eff32f7e5ca97e989326b4e3a8fa35544193f8590bbb0ddb1f914894ab87998090771a0be1fd23917cd792be86ea0b98e6eb24
+A = -ec953f1b7ba7d561edaaa23076987daf86f50e9a66c36f0993290549a9006dd9d424885c0fa77295cfe34fc81c5edce9e2371b3039ea18d8f998d1956196284e6d81eb1c62ecaa8cf3fcaca28ca7e64342803c8dc3c139080bdd4a1ff30d7288b085a579d9e90903bd363b48f2072bb6fbfbd9ba2cab30a8a63784d246
+
+Square = b33f4f3ae453058f4e865ec78f0844bab7af66a97dc2f265ca73ae2232777474bfdda39e10652d7386c16f145272192af728893c3d8a8e92c60d77722b924c30269ff5a399a2449ce15e50320c528c22655ad06227ac4efe5a993179ec61c2fc9115f89d75b53961fd16f7797657f6fbf55662b019608a1d30f64a2c0838e0018b7526921fdd34fd462bfcb2462b7065e2bc7abd57d71371e45dfd8fcfcc00a71f7e45430820747c9a060b72e4f6d2919cbffd00beb0c31a2bdc32afe2cc540b38dd04a2b73ae5ba481a6e535f37a757bbd6aaa972986213afadfa47cb7a15a6f1d443f93cb0ed824a10b4b7d82cae524a096b65ccb39be3c37c07f59
+A = 358da59ef65f62f633675764e292e5a68879df24a4727eca1fc4d232b3a6d936976c92eeb11456b5e8c11319838c145c6529d2f3acc828e55b8274bfe9afb5db241b102715f8e8164e454ef39f13ff1b37cf367a5a66c4f743c750896b7c3c29026e448bb36c6c06b0d9a3d048086ef0c3cd922a02e794223f388b5d646db
+
+Square = cd4246489f6f221f920acbd8bdcdd17f47d2b77268f72254de4190685c123e8c5eab8517fded1852e8316c9e549d3fa355142d91b2921a3c94aafd8862cd2235429340da38a2af131b8d002f17662354f5805f6a7af7afb6dbd2f641036600614cea42bd8b24d86a5109eed29c0865a5f30c5291b1d1ef3223f9b9826dee773d98ce972da92daa19e843f84ca5f1cd77925a3c1117242ab0fb509b94a83f8de4fc8d21f856f37a4d025b3024bd0dbb6d8acfda4ab2993fd6eb7a7448d4f66ec725d37f0eb14eb242c0ff3f0c4572ba6b98a4ce905fe1b7ca3daca56c225171428c56af938fb66b37e99e54139157bbf41f536989ef813af738837afcd62290
+A = -e53ad05c88568f09f616797f0b7f2756fb543d691ec2a5b645c1e5892a247302826419a35b1348cfd2c1c569c23c31b4c46d6c57d4a488c29ab5beb77904d4adfcd0a01ea0a26bb0cc8790441cc2c8c900f030d7315b4319f1a3cf5685a140e03abe6b94730ad79e8de1f4a0cded86a3d6cfe2db267fa7dc9b2bb32872a90cc
+
+Square = eea8028b26e0df090504d54da714a6f5f2695202e53cff479c78aedd47a8dc676243ec586740fde53b3eca9ca02b91031ce766242184109503fbe25b1b6d318e3cd5970fabd16dfa22984dd2e9f1e0f14c189170fc69c031d66663703e6235a942d51a4545bd7b0769d01d302ce2b00b83f01568a1e378f61fd0ca6201b0490330580cd9de85719e174a71915d7efbf65cd73d8f4e66f27e0dd3144d58ec09ed0f7ed7d1238ee596922807100fb7a11127944ddcdec6a9ca3bbf6df7301e354f3f049bfb7c275b43c3d8cda5907a932fba507c9145ea3166081c1b48fcc710ee32cd931f936c796b14f8a78a592e67753a7c9e428a01719c8ba82652f3a89fae110
+A = -3dcb44be1e54c5a5d7db48055ca9afa1ebe2ae648aa6e16ac497502a7deee09ffa124720fad0ab163ce8b3ea6a90f110ea52b67dbc424d0cf1e8c9726dfd9e45bebcefaa5cd5706edeed27896525f31c6bbea3d67ee97badefabf3e2532470b66e3ae3100f66ddf50cf02fc3a8e3f44c304251d3b6a7ca3a6e4bd5d16a41bd97a4
+
+
+# These test vectors satisfy A * B = Product.
+
+Title = Product tests
+
+Product = 5befab3320f8f90542f3120235abd926aac3805a19e343f690
+A = b057af553afb120db6b7764f8
+B = 857734c4c27a1d17f7cf59dee
+
+Product = -ab1ce167f4b2945c55ae3f87df50ad07d4be87cf9f8aa07b0c
+A = ae7a6a87ea8981a567d0b3ecc
+B = -fb0fed5f8c737bcacef4d6cb1
+
+Product = -c2606cd48e6b075c8da79eb4668e7157f1f175c2860fd4c475
+A = -c28dc31984d4583e9d45424c3
+B = ffc4581a5c3f885cf42767e67
+
+Product = aa6805b5408aff7f914472756da07830dcad902834dbdd6944
+A = -ffa07ff9f503511954e5dd3f9
+B = -aaa7af472ad8957763f5a7c64
+
+Product = 58ca2569173389df29b5ce4b784086055dee821a7243db7210
+A = af417d936f4690008811a1ae8
+B = 81b26b80b43aa65aa55ded52a
+
+Product = -a043d31dfce8bd01724d31c863d0a64f1bf013509d77737c42
+A = fb5fae5edefb6997d44a1ecd6
+B = -a336e50c6f7845a1686cc88a3
+
+Product = -b5d6a45ffce851b201239d938ba551bab7dcb59fc11fc35fce
+A = -f918faa58bb57a2ffb8b01f05
+B = bae08c3006fade695029a1df6
+
+Product = 6f2fde7d1a18625d727c6345ed85e597d546d9228bf7f0564a
+A = -8d108d7a16f0696d4ceb24445
+B = -c9c764cae465207097ef8d2c2
+
+Product = 93808b1140841dc9735cd61c6f855ddbbb83066689b0d7e1a0
+A = b386d08daf3fa2154e9c768d6
+B = d2557dceb2d02d04d9c578670
+
+Product = -ad04212ca8cadb1f7861c5130ba3a747046a2a7e4a0c72b69a
+A = e4e5f7d1311e0c5f2e404d55b
+B = -c18057a328d8c7375afdfd4ee
+
+Product = -685e75c232f2b4a0e455fe5ee8aea52f292ad8b8178320e692
+A = -a683312f132b2320632e74ef6
+B = a0758f12791453b4af354730b
+
+Product = 6f588c53185c503dc5b0dc3002d3817ca2e7eb2370b3e9a647
+A = -d70c9b93170261091f0c53f27
+B = -848c86c51a186ac4c9080d3e1
+
+Product = 5e3bc5a04e054a9a244bf7c86cae215072fdb70e9199989427
+A = 898b64ef09d7cf63966e1a3b5
+B = af638b12f26aa5d12e97439eb
+
+Product = -8d8372b235b16108285203c03a8aef6fdd3c0e1a9fd31d4f68
+A = f6003dc83818c14fbe36c9998
+B = -9343f6cbcc81fa4c9399dce5f
+
+Product = -5ee6509abeeb7af7fc5caef40d1822ad3150c8d74f522dc7c8
+A = -875ff6f56ca72cbdf614bb9ca
+B = b375a68a21dfb1f159c22fa14
+
+Product = ada25be404a17385af5a330da799e5909da81bfa0715baa6f4
+A = -c9b8df392e76abc3eb7d5ce04
+B = -dc5ab818c70594dd917b4243d
+
+Product = bb24422ee4656ddfcd50ec38201b15baf679d3b75e5cb878ca
+A = f8e12cf4defe388b78510f687
+B = c07ee817b4ae95c2915b88966
+
+Product = -93da296ba164c7220a17330647aef0980c94eddd2cfa2a3b2d
+A = bc5dc74ddf7a1363d1c2b1f25
+B = -c8f069bad7f93cbfe6df51169
+
+Product = -6b2e1d132c4e0b0dc9b7e7de7d424fda5180480cb5ff47c755
+A = -a8048acb66a8bb88df39266e7
+B = a34e0b265d71435ae8c92a463
+
+Product = 6ccb2cd93783576a8602ae43f41c786008b6623a4cca0a010a
+A = -b071f1f54790c951c1dd2a1cf
+B = -9dd89bb4d9b546207e282e2d6
+
+Product = 5c742ba47d0d64bd97509927ce957deedb855766cc24c60016
+A = b44f3f252c368096fa62747f2
+B = 83439b97dbac579fa4f7b7d23
+
+Product = -7347ba65691c913286c2fb55e45b177f031c1d86ae0e9f654f
+A = 937cf0643ffa53cdea24d642f
+B = -c81881f78243dd5737a7d28e1
+
+Product = -9bc0649a703674e59f83ff9b8a560e5cbf51f65ca310f80f95
+A = -b536f8d9769be6f62da941ae5
+B = dc0746fb101881ae0cacde6f1
+
+Product = bf4992fc3a124de350f9fb90ea825cf663b1fa051282ef22e2
+A = -ff7eacc7de1bb01d668c693aa
+B = -bfaa6627f9fc7ba68ae41bb2d
+
+Product = 7c8992d34cc0b63f1c953f68d4e12a99d3f3a34d16bd76caa9
+A = 9e0d5a850d078890a983c0ec9
+B = c9b72c118b3e1f1023a696ce1
+
+Product = -a75840c95082b9a0ae0d6e0a4eb5e09288e4e2a66e9697d9cd
+A = b2b042a21045a74ef1a5091d9
+B = -efbf8b120b384e869692a1b15
+
+Product = -a510b333bdb4ed7479c142e8fbe2b12f7671a42acbe16c0998
+A = -e7fd5e0bb5496b9d876c27f65
+B = b6262653b2be44501af1d85b8
+
+Product = a1c1e90afc4684754155526e307fc6ed798746f347bae2c880
+A = -b84674832b26ded0a690a8ff0
+B = -e0b7bdf2fd05a038ed3640b78
+
+Product = 5588e0c33bffbefcc5695ca0615abd383343f21a8a0d22b222
+A = 80cad81ad9a66ab6a1c2e5669
+B = aa0453a77c8af1584f54750d2
+
+Product = -6460c2fcd6cf3304ab163ea883ac48e2031cd10f2e9014c0ab
+A = c49ad3d7c8848d4fbf913b10b
+B = -82b3dedbe3cc7cd532ad632e1
+
+Product = -a18717330b711669e85abde8c4dce426529aa621ba3da2a477
+A = -cab4a9c0a331a5a5e826dda1f
+B = cbfee5041c13075dfe3399aa9
+
+Product = 8ab6282ee892b53c083d319a9dcab48af97a1ac8493c0bfcad
+A = -f7d13e47f9aaac8c25f9bf75b
+B = -8f4aa95231c1e2336aa092297
+
+Product = 8f2d1c23c78777ed371f13155445ca3c88cbc0a9b299bdf9d3
+A = 9d8248d00defce1ad081337c3
+B = e8b479295ecd9cef7301f24b1
+
+Product = -86d5e0c5b581fe59819730b4b71e33d1f85f9ab504c7dbe2d6
+A = b21b45e88acff48562a19729a
+B = -c1cdfebccc763beeac394b997
+
+Product = -484ca05aefa113bdfcb1bc623f730c9f9555b462a8ab4c9606
+A = -8c12b406c02c4417163c0956b
+B = 8422b15c80c1c087b17eedd92
+
+Product = 614c3c91f60050c785fd229a3ad74674577a90cacb654e0a5c
+A = -93d45bce155a23a397506d96a
+B = -a87e339c3fd5aebede5fb1b36
+
+Product = 9683285f194a7e4feeab196a36bdfc4f828035fd184b9cc692
+A = f196d8fe760fdcae7eb60e2f7
+B = 9f7d88a2163ad818bf3a6377e
+
+Product = -988a64599c19cc64f3cadc1a83fea6550185f6cc3ab82af822
+A = d0584b2a306671e4d2c9d0c7b
+B = -bb6e7559df199c68d6df3a3c6
+
+Product = -68456814cb0edd951196d04c853172afdd5787a5bd69a57876
+A = -cefce1b0a1fb22862418bb597
+B = 80f614139947aea5e76cd55fa
+
+Product = b4b1cbf5d6566e7a57aee0cc5c9c8ec4ad885e8766aa7662a4
+A = -d68ed1bea046c6cad057e21db
+B = -d7988b9be54f6e332d019032c
+
+Product = 6b09212675ff5257a1384371e17b37dcc268bbb141577902e4
+A = a8208053adc20a609d5d01404
+B = a2fa927c5458c4fe662d7a3b9
+
+Product = -8361bc26f9bcf55f677e047d822d3004027da0d0455b244d10
+A = e82b6410b29020c2d6810a977
+B = -90ddfe0e7f0d6b9cdc0815f70
+
+Product = -f1b6da00923fd513a83e32040a515649fbd362f69ebc016d9f
+A = -f9b697d9ec774a8d1ee5ea905
+B = f7ccb46a8869cb028492bed53
+
+Product = d06206963f2e150bacdb32c823c3a47f013d5a267c3c0d0c88
+A = -ea8e63afa99c719897ad7f2ab
+B = -e36f11f55b6148d1b4f46e598
+
+Product = af774a5eae6084df5ca499ef005642730adabf6a4f9533e2fd
+A = e4c7af7eea3ec9cc2443b7319
+B = c457bc264c8461789931baf85
+
+Product = -76350f428bfbb95e6c253ec0f457aa84cebe8c7cb1af2a2120
+A = 8fd1ff97465775d44dee58ae0
+B = -d268a7d328f44baf80e35119f
+
+Product = -787ae3f114f9a8dd4d249d5d3f3b0897b02564b9469416cefe
+A = -bc0b398bd0ec045b0cf147b7e
+B = a4050955c234e473257d0c641
+
+Product = 9d6320b3d4aabac097a079b9bd2aca7f1898bcab0f23409fd0
+A = -9d7a4ebac630cc0662b816fb5
+B = -ffda517d3eb3214986b04e290
+
+Product = 80bab8bd800ac8c9dc3bb57dca306f10af6fd88c5d8314833c
+A = 834bc50140d6c6ab938dc58b6
+B = fafee47793cbc533b3c66af3a
+
+Product = -b08920f5922226b1dec87151ae087d8a7e5c1aea8c9be148b6
+A = bfd5b1ad323c79428cb2db36a
+B = -eb956a10edebdd658e6810fcf
+
+Product = -6d428e08e8350bb4b0fae3b662c82df2aef7beadaa17430dbb
+A = -a57da276998c548101f514e9f
+B = a9040c1909712e1149d295765
+
+Product = a57da276998c548101f514e9f
+A = -a57da276998c548101f514e9f
+B = -1
+
+Product = 14afb44ed3318a90203ea29d3e
+A = a57da276998c548101f514e9f
+B = 2
+
+Product = -295f689da6631520407d453a7c
+A = a57da276998c548101f514e9f
+B = -4
+
+Product = -867614005cc204a8d19720fe13
+A = -a57da276998c548101f514e9f
+B = d
+
+Product = 12bf3b676f64e5929d38c35e803
+A = -a57da276998c548101f514e9f
+B = -1d
+
+Product = 24d8f92c68303ed0b96f91a8167
+A = a57da276998c548101f514e9f
+B = 39
+
+Product = -49b1f258d0607da172df23502ce
+A = a57da276998c548101f514e9f
+B = -72
+
+Product = -6fd5e6ca25c3d51b2e529f22173
+A = -a57da276998c548101f514e9f
+B = ad
+
+Product = 1276d4705b81b82da4c7e82559d7
+A = -a57da276998c548101f514e9f
+B = -1c9
+
+Product = 1ddb9abfc5d4017f068a67b5f4fd
+A = a57da276998c548101f514e9f
+B = 2e3
+
+Product = -3a8b41c914b1b4a4e341433601f7
+A = a57da276998c548101f514e9f
+B = -5a9
+
+Product = -97c0f4ba414d6e7d4c8b7ced84d4
+A = -a57da276998c548101f514e9f
+B = eac
+
+Product = 1198739e0c23639c176d46d13f7c8
+A = -a57da276998c548101f514e9f
+B = -1b38
+
+Product = 159150954ee0dedf541e4dbac0ec3
+A = a57da276998c548101f514e9f
+B = 215d
+
+Product = -441d4bc44c86f02ff12c3d91a1562
+A = a57da276998c548101f514e9f
+B = -695e
+
+Product = -64726b76005ebee27592237ba5dde
+A = -a57da276998c548101f514e9f
+B = 9b62
+
+Product = bbe4ec7cf7c5bbd198e0ea86bb658
+A = -a57da276998c548101f514e9f
+B = -122a8
+
+Product = 21f717d05681fd2eb1796776a69ef7
+A = a57da276998c548101f514e9f
+B = 348a9
+
+Product = -396ac788a1748bc6955f99be4d2c64
+A = a57da276998c548101f514e9f
+B = -58d1c
+
+Product = -54a213eb083aed1a04f3d1b2da62e7
+A = -a57da276998c548101f514e9f
+B = 82eb9
+
+Product = 1366fb9c20fb14b8b9a9be4b3e3dde1
+A = -a57da276998c548101f514e9f
+B = -1e037f
+
+Product = 238d65fd26da4733e5d93ab2485d40b
+A = a57da276998c548101f514e9f
+B = 36ff15
+
+Product = -38272a99be154d531e922be405aee9a
+A = a57da276998c548101f514e9f
+B = -56dd26
+
+Product = -64651b62b6a454c08951632c7f2c398
+A = -a57da276998c548101f514e9f
+B = 9b4d68
+
+Product = fb272e3597b816144f8b945ae6130e0
+A = -a57da276998c548101f514e9f
+B = -1848320
+
+Product = 280d9f5ed7243712ecb9a7c6358bcb8b
+A = a57da276998c548101f514e9f
+B = 3df5795
+
+Product = -2fbb6bb8e1ba78cefc47fbbc20e188ee
+A = a57da276998c548101f514e9f
+B = -49d6652
+
+Product = -57f29c13691ffa1642d2860dab9d288e
+A = -a57da276998c548101f514e9f
+B = 880c2b2
+
+Product = 139c19d7668e6aabf2d7206cb0723ed34
+A = -a57da276998c548101f514e9f
+B = -1e55aa4c
+
+Product = 2950ce04bf0cf836d4fe94b88fb757d0a
+A = a57da276998c548101f514e9f
+B = 3fe968b6
+
+Product = -5175239488dad05a58414251496d2a06c
+A = a57da276998c548101f514e9f
+B = -7e020414
+
+Product = -945ff0ed38bc6020cf679cbd3e0758c6d
+A = -a57da276998c548101f514e9f
+B = e585e573
+
+Product = 11c69ae98f6b27e95477986f796bc67c8c
+A = -a57da276998c548101f514e9f
+B = -1b7f653f4
+
+Product = 209afe75e8fb5ac76d13c06b545f5d4d73
+A = a57da276998c548101f514e9f
+B = 3270154ad
+
+Product = -386d64b215e41506514f4988ed237e4da2
+A = a57da276998c548101f514e9f
+B = -5749c891e
+
+Product = -6c13cccdb1d140d0babd52707ea72fa278
+A = -a57da276998c548101f514e9f
+B = a72fb6288
+
+Product = 136228a8a45540372b9b3cd7f82021f6546
+A = -a57da276998c548101f514e9f
+B = -1dfc08a2fa
+
+Product = 1f0ad3babf9d132eaa08cf5cdb8f19dbf01
+A = a57da276998c548101f514e9f
+B = 30050f2e5f
+
+Product = -50d615ce183258e95af77319b766fac81e2
+A = a57da276998c548101f514e9f
+B = -7d0bf92cde
+
+Product = -817d358293b86a56a4e881e50257c549471
+A = -a57da276998c548101f514e9f
+B = c84efb12ef
+
+Product = f09b9e80be251de474d726b16e25a6865fc
+A = -a57da276998c548101f514e9f
+B = -1743322a484
+
+Product = 22996cb0f9c60e35dce49f3825f8a479db26
+A = a57da276998c548101f514e9f
+B = 3585acec11a
+
+Product = -2b307a37c91791a61c0691858f5f783e4678
+A = a57da276998c548101f514e9f
+B = -42cf6be3e88
+
+Product = -8826698fcba6c30d755fc523de1cc25301ae
+A = -a57da276998c548101f514e9f
+B = d29cc8af592
+
+Product = ae37fc99fd419809310782714530d7428d77
+A = -a57da276998c548101f514e9f
+B = -10d8059d4a29
+
+Product = 1d544a20f9bc7d95ab67d1f65743979f23bba
+A = a57da276998c548101f514e9f
+B = 2d5eadef1c06
+
+Product = -367897184e9929a0294d320f10278889fbeb7
+A = a57da276998c548101f514e9f
+B = -54431582d0e9
+
+Product = -943a509076a00060a2e7fa1cddb7468d734a1
+A = -a57da276998c548101f514e9f
+B = e54bb102f4bf
+
+Product = fcce6e42879af5ad13545c0bcaab85b690cea
+A = -a57da276998c548101f514e9f
+B = -18711db522cd6
+
+Product = 258c49f86d0cbb14ae9edbd3456be8cede2022
+A = a57da276998c548101f514e9f
+B = 3a1562c7c269e
+
+Product = -4a8bbce59ad7daa51136d557f7fa16e9a2faad
+A = a57da276998c548101f514e9f
+B = -7350e780b0f33
+
+Product = -82f53ec9333275d5cc271876a7db936db49280
+A = -a57da276998c548101f514e9f
+B = ca94ad312dd80
+
+Product = 11daee4fcc713db5b2806e47fa5dff3b5b770eb
+A = -a57da276998c548101f514e9f
+B = -1b9ed6758f9635
+
+Product = 17038cac4f0c94dc24985ea108ae6682e175752
+A = a57da276998c548101f514e9f
+B = 2399b8a9b1116e
+
+Product = -37e5f14394bf347a3ed061769fe8e6424af4348
+A = a57da276998c548101f514e9f
+B = -567840a7569fb8
+
+Product = -9253d4a32a88d8f725984514d969012ead7cc9a
+A = -a57da276998c548101f514e9f
+B = e25b246f733f26
+
+Product = ace3648371c16a931d29004e79f5b9678391da5
+A = -a57da276998c548101f514e9f
+B = -10b717b27b6a13b
+
+Product = 1faa5b45d04c143c339b09d3aad94d39b94ef960
+A = a57da276998c548101f514e9f
+B = 30fbd672e106aa0
+
+Product = -3fdfe246d27aae0d08d63b2bc501461d2bff3b8d
+A = a57da276998c548101f514e9f
+B = -62cef5f078a8253
+
+Product = -5b792bfaeff04ee3d948cb343a249d49eb344f57
+A = -a57da276998c548101f514e9f
+B = 8d805ac65649c49
+
+Product = c5f824406161eec321da5a58e3e00d393b55abe9
+A = -a57da276998c548101f514e9f
+B = -1323dd41d2e1e077
+
+Product = 2226dec8a57be8e84e42559007e2d101ccbe67f8d
+A = a57da276998c548101f514e9f
+B = 34d47842b5d0be53
+
+Product = -340f50f812c7420b502000940788a700f6769788a
+A = a57da276998c548101f514e9f
+B = -508836d8e1193d36
+
+Product = -a00f1d96e19c590479625c5329a87774b5964cc78
+A = -a57da276998c548101f514e9f
+B = f798fc858657f888
+
+Product = cb94f830cba8997331912a6a31c34f1bef826d121
+A = -a57da276998c548101f514e9f
+B = -13aec7a5c52a0883f
+
+Product = 16b45140b048d6dc0b9fc811df7ce7dd88357fff04
+A = a57da276998c548101f514e9f
+B = 231f27f3e347bd67c
+
+Product = -2aa94179351b4e87de5849ab619d94f47450640199
+A = a57da276998c548101f514e9f
+B = -41fe3ec2189599cc7
+
+Product = -5489401d3da93158d4284e557d74016c0a7cfd935a
+A = -a57da276998c548101f514e9f
+B = 82c5281df41bfc066
+
+Product = ae04d5b212ecfc9a6d7df07794d565df52991fb70e
+A = -a57da276998c548101f514e9f
+B = -10d3139229f5d02432
+
+Product = 27821bc811f45d63089790b41d307be978d4b19564c
+A = a57da276998c548101f514e9f
+B = 3d1da85cc012b3e234
+
+Product = -3de3c9e9d7fa3020a578706339314890dccf63096c2
+A = a57da276998c548101f514e9f
+B = -5fbcfb28bfc9044bfe
+
+Product = -627dcb299a6720044abcf11469bdfd3f951edbb5bf7
+A = -a57da276998c548101f514e9f
+B = 985b930517b78e6ba9
+
+Product = cc0622441497a37fddf1856d5e2c99df52b99ea4573
+A = -a57da276998c548101f514e9f
+B = -13b9b88948fb7e95cad
+
+Product = 1a5168e1a492210591ad1ed660adde9110390e4caf32
+A = a57da276998c548101f514e9f
+B = 28b631c6e04b6ab0d8e
+
+Product = -4d8ec27b7460ce616421b9f5cae708c2ac241daa59b4
+A = a57da276998c548101f514e9f
+B = -77f99bdf1eb09da6dcc
+
+Product = -55afd796db7bce822a00073fc8926d3bd0c79772f036
+A = -a57da276998c548101f514e9f
+B = 848cdd6212b9bb3620a
+
+Product = dc494b0d73e8ec07cd2bb6dd8191d2b4d48e7700cc34
+A = -a57da276998c548101f514e9f
+B = -154c39567bd8be5f6b4c
+
+Product = 240e9301b4345b914ecd91a49a0e651524dcecb6fdc6c
+A = a57da276998c548101f514e9f
+B = 37c6e7ee89cf87674814
+
+Product = -39002ecfd6d96661b336157ccef6536756ad2e9219be3
+A = a57da276998c548101f514e9f
+B = -582cdab09915a652203d
+
+Product = -695f49fc891d53f396f0593efae3973082b76d4f9e944
+A = -a57da276998c548101f514e9f
+B = a30074dbce2246af043c
+
+Product = bba2b7b45b97cb0d7fb30fed95089870742ad69e7aed7
+A = -a57da276998c548101f514e9f
+B = -1224195afc7b394ae8cc9
+
+Product = 1910edc278515ab7d4cc09b496dc3c06c32c75bc7368af
+A = a57da276998c548101f514e9f
+B = 26c6701c39334169e7bf1
+
+Product = -3670b7f9b661aba35ce50984d83173c84c8fa60e04d100
+A = a57da276998c548101f514e9f
+B = -5436e84b4a29858a68f00
+
+Product = -7fa0d3e0082b37475342b7e22e5dbad7b8d4cb5d64f871
+A = -a57da276998c548101f514e9f
+B = c56e0f44fc63bca242eef
+
+Product = da7fe3367ce640fa5941c033ac1874312f10ba5950da75
+A = -a57da276998c548101f514e9f
+B = -15200043166ff309f0426b
+
+Product = 1871d72481f66b1d413100edd6b339cbbaa67b3b2b3cd57
+A = a57da276998c548101f514e9f
+B = 25d057879db26fa29a5e49
+
+Product = -3cf1dd1e2df3456757d72f35353c3c7a659b2ef844ad857
+A = a57da276998c548101f514e9f
+B = -5e46be70de21949df67349
+
+Product = -5e861cbe47aefab2a7ea59292aab1258932b9a322f66e63
+A = -a57da276998c548101f514e9f
+B = 9238670897685a6c9cbdbd
+
+Product = f623344788efb857db55c924e95a437effa4dc8bb2bcd24
+A = -a57da276998c548101f514e9f
+B = -17cc0ec84c228225a7cf45c
+
+Product = 15514c916b0ae7cde6add16c629d3e19ba52a101d75dff72
+A = a57da276998c548101f514e9f
+B = 20f9f925b3ed307edbb154e
+
+Product = -460cf5b14f9d0b547c3084bf44207bf881745c409b08d07f
+A = a57da276998c548101f514e9f
+B = -6c5cbfd29f3dae1dce99221
+
+Product = -5ddf7fb91d765af97dfda5333d8779e80837c2b51cfb4f43
+A = -a57da276998c548101f514e9f
+B = 9136aa79080defd1bcf90dd
+
+Product = 12c1a0edfb6ab6a0caae2553fb3743827e1470a8954e0a3fd
+A = -a57da276998c548101f514e9f
+B = -1d03b512470dc3052779f3e3
+
+Product = 28388a244214abf046488a8d95308d95f021eae4b994a5a52
+A = a57da276998c548101f514e9f
+B = 3e37dce784274962ff862e6e
+
+Product = -4da476e76119deef291c0f56934a912a0877278a19a561ee0
+A = a57da276998c548101f514e9f
+B = -781b2f2dc40094a7f8fed520
+
+Product = -5792496d33dd45e225f9dfca17419a04e075ffc0c90b37b82
+A = -a57da276998c548101f514e9f
+B = 87772a4fb582acafd3e4ef3e
+
+Product = dd3a3506a7d748de16fb43d666928a87de0354d8e8a1bcaaa
+A = -a57da276998c548101f514e9f
+B = -1563841bf7851ff158a395716
+
+Product = 24e8fb09a9ab0808ff643122479dea5ed41060c6c5b74e8752
+A = a57da276998c548101f514e9f
+B = 3918c30b5568318a58e9be16e
+
+Product = -366c125f96b38b58d01c939c27c4100af3377eabb792b5491a
+A = a57da276998c548101f514e9f
+B = -542fb814f45924aa09a16f2a6
+
+Quotient = 0
+Remainder = -1
+A = -1
+B = 2
+
+Quotient = 1
+Remainder = 0
+A = 8cdaaa7c422f3c2bb0ace2da7d7ff151e5bdefb23e6426cf3e6b21491e6e80e977bfa6c65931a8dee31fc7992c0c801d5d7c
+B = 8cdaaa7c422f3c2bb0ace2da7d7ff151e5bdefb23e6426cf3e6b21491e6e80e977bfa6c65931a8dee31fc7992c0c801d5d7c
+
+Quotient = -2
+Remainder = 1
+A = 107f0e6cebfe22ac11294a06fed2b994d01c9b3610d50bdd254adafd08c93be8ebdd1e85e1286fe9c9e682a90cbbd6351681b
+B = -83f873675ff11560894a5037f695cca680e4d9b086a85ee92a56d7e84649df475ee8f42f09437f4e4f34154865deb1a8b40d
+
+Quotient = -4
+Remainder = -2
+A = -3d8746ae2123c2d3f1d35910b42af1f86f5e81f8e98986cea20b2a1bdb8af6cf111f1258f112c837accdf4868463fe9eba536
+B = f61d1ab8848f0b4fc74d6442d0abc7e1bd7a07e3a6261b3a882ca86f6e2bdb3c447c4963c44b20deb337d21a118ffa7ae94d
+
+Quotient = 8
+Remainder = -3
+A = -5645d65662eaac73050de06f8f982a9b2ae680467712284be3e2b0e58ef4bf4d72b5be5e12ee1fd803b47f161759662ff5c4b
+B = -ac8bacacc5d558e60a1bc0df1f30553655cd008cee245097c7c561cb1de97e9ae56b7cbc25dc3fb00768fe2c2eb2cc5feb89
+
+Quotient = 10
+Remainder = 4
+A = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b4
+B = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b
+
+Quotient = -20
+Remainder = 5
+A = 12805392c55ffa0e27e85e15f2b339872793664e9ed3074cd2600aa52459a57197130d1ea46775ef43115c9413248cc7b34805
+B = -94029c962affd0713f42f0af9599cc393c9b3274f6983a669300552922cd2b8cb89868f5233baf7a188ae4a09924663d9a40
+
+Quotient = -40
+Remainder = -6
+A = -3579fc4d6083394c691b060cf9e20318fe17da0487337f76710bd11512578830ba94ac7b587a2d5ab7cb4afe611e349cdcfb86
+B = d5e7f135820ce531a46c1833e7880c63f85f68121ccdfdd9c42f4454495e20c2ea52b1ed61e8b56adf2d2bf98478d27373ee
+
+Quotient = 80
+Remainder = -7
+A = -74ebad4b39ebaaff82cd91082408c979527907c363d8f0f75db410523f8477c074c45ff85851b6275b1ebc5279029818e78d87
+B = -e9d75a9673d755ff059b2210481192f2a4f20f86c7b1e1eebb6820a47f08ef80e988bff0b0a36c4eb63d78a4f2053031cf1b
+
+Quotient = 100
+Remainder = 8
+A = d2d8a4419fb3b1c22bfca04ca08c2ee066ccbc9fce2f41861b5eef91efd3c13eeb7eae5abea0ef1849662cfdfef7bbff892c08
+B = d2d8a4419fb3b1c22bfca04ca08c2ee066ccbc9fce2f41861b5eef91efd3c13eeb7eae5abea0ef1849662cfdfef7bbff892c
+
+Quotient = -200
+Remainder = 9
+A = 1bf534da2f4365c96fc5dd4928e73ac24b157b5136ead90cf6596033ec387a2c14bca828000ae1725f3a5ace8ad67a8c07a0a09
+B = -dfa9a6d17a1b2e4b7e2eea494739d61258abda89b756c867b2cb019f61c3d160a5e5414000570b92f9d2d67456b3d4603d05
+
+Quotient = -400
+Remainder = -a
+A = -3a172cc9483774544311a1366659d9e61cc9fac7dc11c68e36aa991ef4d5e96becf5bac3e0967c904d926617ea11bb9551b980a
+B = e85cb32520ddd1510c4684d9996767987327eb1f70471a38daaa647bd357a5afb3d6eb0f8259f2413649985fa846ee5546e6
+
+Quotient = 800
+Remainder = -b
+A = -5ecff3a3e47fa615b6e3ce2dedfdeefbfe1d437c394631820968a9650b59dc3a2dd1c9a0b06537e4e5c408a59e580921503580b
+B = -bd9fe747c8ff4c2b6dc79c5bdbfbddf7fc3a86f8728c630412d152ca16b3b8745ba3934160ca6fc9cb88114b3cb01242a06b
+
+Quotient = 1000
+Remainder = c
+A = d3ef80fca0ab3ac3432b22e2b485131d816810c39d02a9c82dcc05ec5e6406bc216026de3abe53ab103ea3b2ddbc2ea377ae00c
+B = d3ef80fca0ab3ac3432b22e2b485131d816810c39d02a9c82dcc05ec5e6406bc216026de3abe53ab103ea3b2ddbc2ea377ae
+
+Quotient = -2000
+Remainder = d
+A = 163956bc32325f28f48d41d32bb08d2a9c4ccbb0d818368fb13941e82b27da21d04094f7e897ce79c2d0ff8470505f1ef63fc00d
+B = -b1cab5e19192f947a46a0e995d846954e2665d86c0c1b47d89ca0f41593ed10e8204a7bf44be73ce1687fc238282f8f7b1fe
+
+Quotient = -4000
+Remainder = -e
+A = -3763f8e43bd05e6ffeec6d509bbe6ff9a9022ced8cb191c9abaf5fd0e0b75a53e2ad581455e3af09e702a77b164ed3fb54ae000e
+B = dd8fe390ef4179bffbb1b5426ef9bfe6a408b3b632c64726aebd7f4382dd694f8ab56051578ebc279c0a9dec593b4fed52b8
+
+Quotient = 8000
+Remainder = -f
+A = -531dd44dfa9e79a5aec8fa7c84bd3b753c146770d22d2c14a6d2125f7ab95e9b320e84c31cf3e0d883e1295a220f2a546550800f
+B = -a63ba89bf53cf34b5d91f4f9097a76ea7828cee1a45a58294da424bef572bd36641d098639e7c1b107c252b4441e54a8caa1
+
+Quotient = 10000
+Remainder = 10
+A = 900996b61f58713f0755e68bbdfa4e0bb47f034bb0304f77829847923d14715def1771f43b526c41b9667438b434d2b966c20010
+B = 900996b61f58713f0755e68bbdfa4e0bb47f034bb0304f77829847923d14715def1771f43b526c41b9667438b434d2b966c2
+
+Quotient = -20000
+Remainder = 11
+A = 179d7ede3db0c105525286551331d5b9e1f97a7883f0c13cf250afe9765bb5aaa527af7945c19cdd4596565cbc8532a3cfa5c0011
+B = -bcebf6f1ed86082a929432a8998eadcf0fcbd3c41f8609e792857f4bb2ddad55293d7bca2e0ce6ea2cb2b2e5e429951e7d2e
+
+Quotient = -40000
+Remainder = -12
+A = -293dc443c294c6a6c53dd49e84f58305d59a432afb6c7ea2039cd02a513231239571ae07f29b5427e869b9faa485511ca45980012
+B = a4f7110f0a531a9b14f7527a13d60c1756690cabedb1fa880e7340a944c8c48e55c6b81fca6d509fa1a6e7ea921544729166
+
+Quotient = 80000
+Remainder = -13
+A = -5b637eb8aa51ef15a18d9b144031c9756527fc0fb96c84b6df03700e5079ae1b3e96940a2c1e07f3b47ad8a9b2b8ca99171a00013
+B = -b6c6fd7154a3de2b431b3628806392eaca4ff81f72d9096dbe06e01ca0f35c367d2d2814583c0fe768f5b153657195322e34
+
+Quotient = 100000
+Remainder = 14
+A = 87c846f5469d4c5819aed0c7e77797209b2c1b83a7a0e2be70280b9f30946b5db9bd0f25a06cf4bdba1c7183a1b9eb75c19400014
+B = 87c846f5469d4c5819aed0c7e77797209b2c1b83a7a0e2be70280b9f30946b5db9bd0f25a06cf4bdba1c7183a1b9eb75c194
+
+Quotient = -200000
+Remainder = 15
+A = 11c2a4509f419aa977c3d37fa446fcf21b4b3b9f983fbaddeba4f51c285ac4032200711a54cc6edf24297b1f3d46ad020131a00015
+B = -8e152284fa0cd54bbe1e9bfd2237e790da59dcfcc1fdd6ef5d27a8e142d62019100388d2a66376f9214bd8f9ea356810098d
+
+Quotient = -400000
+Remainder = -16
+A = -39e37ae0edd92b957e84682358039f5e432c42492a44f3de01cdf74d643760260f2837946608663e12291e9b0695449c1153800016
+B = e78deb83b764ae55fa11a08d600e7d790cb10924a913cf780737dd3590dd80983ca0de51982198f848a47a6c1a551270454e
+
+Quotient = 800000
+Remainder = -17
+A = -72f725edd5a3dd6f20b5e9ca7da08a99f8ec9214c80588182c0d42e03bcff34b488b28c03cdf41813a6193c10672a8ee68f6000017
+B = -e5ee4bdbab47bade416bd394fb411533f1d92429900b1030581a85c0779fe6969116518079be830274c327820ce551dcd1ec
+
+Quotient = 1000000
+Remainder = 18
+A = 966df62c26acab2d3d1dbe729e48d0181c68e9f5eba45f6caefa38d60e34057d09fe620abb8640cec8cac755957aaad7c6fd000018
+B = 966df62c26acab2d3d1dbe729e48d0181c68e9f5eba45f6caefa38d60e34057d09fe620abb8640cec8cac755957aaad7c6fd
+
+Quotient = -2000000
+Remainder = 19
+A = 190790727c1514b4ef83a1c6aa07493c0af7087fbc8a675bfd9a1e97b8ef80ef684219d6c6f1a5fb5b919f105fd7717cdd5aa000019
+B = -c83c8393e0a8a5a77c1d0e35503a49e057b843fde4533adfecd0f4bdc77c077b4210ceb6378d2fdadc8cf882febb8be6ead5
+
+Quotient = -4000000
+Remainder = -1a
+A = -22d115ab02f8663d8c009960086a0275d301d358cd3b250bb9e7c16cc6ebed4a8fbe43bbced856d93be64a17377d95f5f9c8800001a
+B = 8b4456ac0be198f63002658021a809d74c074d6334ec942ee79f05b31bafb52a3ef90eef3b615b64ef99285cddf657d7e722
+
+Quotient = 8000000
+Remainder = -1b
+A = -41f2e708ba47494a13607223b08e6d99c0b4247436632961d873804e83446dc97139ffaef3e25969950bd4b5bb4ff73b1a25000001b
+B = -83e5ce11748e929426c0e447611cdb33816848e86cc652c3b0e7009d0688db92e273ff5de7c4b2d32a17a96b769fee76344a
+
+Quotient = 10000000
+Remainder = 1c
+A = e4b52f78179039499c2f6b500840f41103fbd60eac0d7082297236f25189c18a8301a92f533945047fbb83427dcade334336000001c
+B = e4b52f78179039499c2f6b500840f41103fbd60eac0d7082297236f25189c18a8301a92f533945047fbb83427dcade334336
+
+Quotient = -20000000
+Remainder = 1d
+A = 10888959278661bc36089519a215bda60f9ce24ff7c0ac1f543b6e652f94dbff1f32aa40cad2b4b4d676f16948551501c29f2000001d
+B = -84444ac93c330de1b044a8cd10aded307ce7127fbe0560faa1db73297ca6dff8f99552065695a5a6b3b78b4a42a8a80e14f9
+
+Quotient = -40000000
+Remainder = -1e
+A = -3ada453530a180fda58533ab8c62beb4f693a134f512e4d23e487dac3b575e5390c0a90992400e402bb47aac93d46ded55f54000001e
+B = eb6914d4c28603f69614ceae318afad3da4e84d3d44b9348f921f6b0ed5d794e4302a42649003900aed1eab24f51b7b557d5
+
+Quotient = 80000000
+Remainder = -1f
+A = -57879eb5d92d565daac3ac5173639bfe44b6ecc69ff770af57bd79c9b93841c5677042cb362b794f3d8b24b0d3b73ed1cba58000001f
+B = -af0f3d6bb25aacbb558758a2e6c737fc896dd98d3feee15eaf7af3937270838acee085966c56f29e7b164961a76e7da3974b
+
+Quotient = 100000000
+Remainder = 20
+A = 89a2f1792afc54467955839eddc9ef2e37d391ce7a1a4a205291220c1f49f59ee31fc7a7a7f7706c199bf5c8c951a0d0743d00000020
+B = 89a2f1792afc54467955839eddc9ef2e37d391ce7a1a4a205291220c1f49f59ee31fc7a7a7f7706c199bf5c8c951a0d0743d
+
+Quotient = -200000000
+Remainder = 21
+A = 1c267719338a4562e934bc57fabe6da86ca534a34244bd38c15032f01f47c2fd498c83f644b345c5c661ada0e586a096bb63000000021
+B = -e133b8c99c522b1749a5e2bfd5f36d436529a51a1225e9c60a819780fa3e17ea4c641fb2259a2e2e330d6d072c3504b5db18
+
+Quotient = -400000000
+Remainder = -22
+A = -250249f2185d4b428fa9534f03ef3cbed535bd31c56c0b273e6c3d35e0266f7777a6e59a99da5738b8e3af8ac60061d6716ac00000022
+B = 940927c861752d0a3ea54d3c0fbcf2fb54d6f4c715b02c9cf9b0f4d78099bdddde9b966a67695ce2e38ebe2b18018759c5ab
+
+Quotient = 800000000
+Remainder = -23
+A = -710b30c23c3c4e646ba90da33d2ce35af2ff181c40b02e3ffa607966730c6b6e274dd4c3c78e578e0b10f431f2d832274bf6800000023
+B = -e216618478789cc8d7521b467a59c6b5e5fe303881605c7ff4c0f2cce618d6dc4e9ba9878f1caf1c1621e863e5b0644e97ed
+
+Quotient = 1000000000
+Remainder = 24
+A = 877f1caf75e7166ef18484d0718947893fd1ec016984387debc55c19e378a487a5ddbb03a80a88316f6fca16ae148933e719000000024
+B = 877f1caf75e7166ef18484d0718947893fd1ec016984387debc55c19e378a487a5ddbb03a80a88316f6fca16ae148933e719
+
+Quotient = -2000000000
+Remainder = 25
+A = 1ed1b7d9e4cf3d44ee98ef69850e61a39f54cc407c6795c07c887374441fd9ec258c21193f8a8c55802fb8f8c579cf94cb0ce000000025
+B = -f68dbecf2679ea2774c77b4c28730d1cfaa66203e33cae03e4439ba220fecf612c6108c9fc5462ac017dc7c62bce7ca65867
+
+Quotient = -4000000000
+Remainder = -26
+A = -35d324ba37d2000f960ca1c9e1ab96e341a2ae6a5ea5cef014c73a39dde000d8ad9606b817ad67e4e4593cc5894d354854898000000026
+B = d74c92e8df48003e5832872786ae5b8d068ab9a97a973bc0531ce8e777800362b6581ae05eb59f939164f3162534d5215226
+
+Quotient = 8000000000
+Remainder = -27
+A = -7039477c3e0a6f415e25e9f9b1dab1edcd8a23f984e7e3bc149c206a3b756b1be001450af4049cd4535e4243d7032afcf6790000000027
+B = -e0728ef87c14de82bc4bd3f363b563db9b1447f309cfc778293840d476ead637c0028a15e80939a8a6bc8487ae0655f9ecf2
+
+Quotient = 10000000000
+Remainder = 28
+A = d6c59dd07409da98f7bbc7ee471b6e06c4d9e832e9f4d04ed9da63564d37d3072a950564cf549bb5d6e7dc85565d3cc8ba340000000028
+B = d6c59dd07409da98f7bbc7ee471b6e06c4d9e832e9f4d04ed9da63564d37d3072a950564cf549bb5d6e7dc85565d3cc8ba34
+
+Quotient = -20000000000
+Remainder = 29
+A = 14d27a16a9cf2fdbc85b88a604dd8f0e57b5b34a27089d75d805e05fbb367dfa61c085aa98b896e3e53b85ef774a3fa52417a0000000029
+B = -a693d0b54e797ede42dc453026ec7872bdad9a513844ebaec02f02fdd9b3efd30e042d54c5c4b71f29dc2f7bba51fd2920bd
+
+Quotient = -40000000000
+Remainder = -2a
+A = -3bd0119619fbb5b260c44050d61e6b1925a49713d754ceb06bafb1d730a93f199df654b153c40e75096ebbaf5a6ce3c801820000000002a
+B = ef40465867eed6c9831101435879ac6496925c4f5d533ac1aebec75cc2a4fc6677d952c54f1039d425baeebd69b38f200608
+
+Quotient = 80000000000
+Remainder = -2b
+A = -61a283fe41d965ee770704bb453f689cb82a81089422d6d904a91776a06d32857220286e6ef6327807b724062dda143b46890000000002b
+B = -c34507fc83b2cbdcee0e09768a7ed139705502112845adb209522eed40da650ae44050dcddec64f00f6e480c5bb428768d12
+
+Quotient = 100000000000
+Remainder = 2c
+A = 87bd03a64d9c56fe340137065ba36bd07b556119546dd1fc3ae087ead32bc79ca7efb5c7230ea7bfb00ad419096d9279fbe10000000002c
+B = 87bd03a64d9c56fe340137065ba36bd07b556119546dd1fc3ae087ead32bc79ca7efb5c7230ea7bfb00ad419096d9279fbe1
+
+Quotient = -200000000000
+Remainder = 2d
+A = 1eb7cfb197d19f56ad994eca52d1af6466fd09da07d68d63067602046b2d42d3063ef5eda6b58afd69fd92b0b727a0ecde1420000000002d
+B = -f5be7d8cbe8cfab56cca7652968d7b2337e84ed03eb46b1833b01023596a169831f7af6d35ac57eb4fec9585b93d0766f0a1
+
+Quotient = -400000000000
+Remainder = -2e
+A = -3ab858b3329e5bd0469118be52a867b2febbe2894d962cedeb3a5be1738db1cea106cd0710c9f6937348c2c63b109ae623d500000000002e
+B = eae162ccca796f411a4462f94aa19ecbfaef8a253658b3b7ace96f85ce36c73a841b341c4327da4dcd230b18ec426b988f54
+
+Quotient = 800000000000
+Remainder = -2f
+A = -6137bae6cf7573afcbb6fd5c066ba37648cba8db0ecafe9dbc66959b19deabf42f3083719a2268b7602bafa2140a1ee8ce7d80000000002f
+B = -c26f75cd9eeae75f976dfab80cd746ec919751b61d95fd3b78cd2b3633bd57e85e6106e33444d16ec0575f4428143dd19cfb
+
+Quotient = 1000000000000
+Remainder = 30
+A = d00fec043edadc093673e5f5abef0c6bacdf1f3faa49a831a645bf80db7539d657f69403b122a5c6f879eb8e63be54d35ed7000000000030
+B = d00fec043edadc093673e5f5abef0c6bacdf1f3faa49a831a645bf80db7539d657f69403b122a5c6f879eb8e63be54d35ed7
+
+Quotient = -2000000000000
+Remainder = 31
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -940693131e2ba7b2af531803794983337dd526f0d84d08d58723edf002a388d55c8502d88c2a2a6e78233a2a1b1c8d339a13
+
+Quotient = -611b743a0e2acb1043bb33de50a59eaa0405b37bf6b622075dd69291fe5b53305dbfcc377d1f3082319c153d0c1ffb3b3346
+Remainder = -16e346b6a4297
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 30c77f3380ccf
+
+Quotient = b9e34073d5e6e5b9e5d2d7250150f8ad86870faeb88d5aed5029fb25c176de216e2388e0f5d33f7c3b56102873eb40b06f2
+Remainder = -16ebc86eb88339
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -197b6f6ad5b75c
+
+Quotient = 141bc8752e846cd63743e6fce4a22efc3eb5f0ce46ba81b8f578c94c516288ec3610fc9923f45d4af2b94c0b0a20b48ed0a
+Remainder = 9bab19f12d81c3
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = eb90162ecae18b
+
+Quotient = -381bd85c951e1dd775b0d7fab344aadf06b1b592c643b5852fa44aa55159eedf3b3e47fe0d9f399ad92da85ab2bfd18240
+Remainder = 1e4f817a2f52b71
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -546c109fa8a9d7b
+
+Quotient = -5e385a83b56830626cf8306acc232f955178080e86384bbcf92eec3a8961360223c4cfc1d8d118022972e61866cbfc46b
+Remainder = -292e149300fdd1ad
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 3246242094394c8c
+
+Quotient = 9af0246f4b49316df43f61ae3795a764fe9b1d071ce227982ebda7988a7a7a98129c94a76635c6913cb15e4f75ea1608
+Remainder = -dd3b3e32ddc79cb9
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1e928618913898b2f
+
+Quotient = 1fe40099811c648aa4e84e4fbb8cbc19706774a11391fc03a9667d8dc72dd0b26c4a46d0bae56ba90fe4bfac1517d241
+Remainder = 16e021603d30dde2
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 948887c1634f4b08f
+
+Quotient = -3f4fa4c179dab02ad461bbea8f890292c934496db560f72878323a4463d77ae261363f4dc8f53eab145fcc3815d3253
+Remainder = 407ccb4f0b814dc5c5
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -4ad17434071e1ce664
+
+Quotient = -4d17d19f7f6861189a520776339a1e425876808111c303e391118714370111151ef4ad2e6e84250f59b0fe09ab3293
+Remainder = -36f745b0f421d16db7
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 3d71635bcc25183cdde
+
+Quotient = b976d544af44e711351c6618106d3a002c42ebbe22fe939a2457d24e8dcc35c95dde5c7c77af6b4545344a198be82
+Remainder = -107334ab98e5099fec5f
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -198a54e35fa0cfa328a9
+
+Quotient = 1307bb8e89aaff7466bc238d32672fbbde7be19d15423bcfa14f9a23fe85af9739b72807fd4bc420ad0b0fac37a42
+Remainder = 170ebe9b83d4c43b79ab
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = f8e923a8bbc0242eafe3
+
+Quotient = -3925a167c1c4d2fae265f277302b989466e309a7211e0b7173031cbbb91ab7fac8dfe43c9d832764e222e9d8581d
+Remainder = 4d404e93edb435dbd60af
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -52e36cee22274556059ea
+
+Quotient = -4d5a6ef346a872142b999ff9a5429198b3c2a97e968f55aa2c01583efe30e9687c57e2bca2372db4d3d443052b6
+Remainder = -3a2ea5f9d204dc31f21833
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 3d3c79a115d9071b573d2d
+
+Quotient = a49dee54430f1737a04543d5f549efafab25f0f28f5e304f1bbca191f99521c2c4be1b9927bde19e1ec2060bb2
+Remainder = -17d02758f8fcadca911a95f
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1cc65a75211f2826c9d0811
+
+Quotient = 1808ab7c0ccac2ff8f7cb61248bf4624fb60352a356fdd1408904f8c6fb0cc52b7642ec59183bcaf5dd89ca0ac
+Remainder = 5c95323f3b8861261dc31ed
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = c516e6e3fa6e3dc52cf5933
+
+Quotient = -437e04d7076794850aada0cb4ca7a1055df103e74e00766be6a2fdb2631bf294cdbf2695d0a2f8f9eb5587aa5
+Remainder = 1fc63797594c56160536faa9
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -462ee529b488d1db2b6c60e8
+
+Quotient = -5dde5497accc4575a412e7232ce75bdf7905936e09e382d5c9f133faf82a05ad9dcc94ad858aed34cc14c714
+Remainder = -15e79293d5e055f906381a899
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 32765b0a34c88864d39bedaae
+
+Quotient = 11ac52a9287472e1d3b8577b3d50c95076e190714796761322b3ce869d96b44387e190e824849ee345d0a22b
+Remainder = -a158ccc7c055d64e7df3fbcf0
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -10c061a37f6cbd11bf0c327643
+
+Quotient = 1ff5cda1551867577c5ca72c86516a82fb8fc5f59ce967b73c6bcc1b85168389872c9a747ddf044d6dba174
+Remainder = 21e766a0020ba429b330a325d5
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 9435cd2dc2a92c950bb9e69b83
+
+Quotient = -2719c892fa3f4dbc9951b2095056a16159adaf32dff902e20a800a0cc2e858ccae408f2161aae25d3e1f6d
+Remainder = cafbe9caa1f83fd0dd3d5a6881
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -7924e4dcf8f96da61f54bf83870
+
+Quotient = -5080dc99dba295f4a2d9a474c2ddfa3b232a82fe629fe62177514988983eff8195b37d3fee3afa343b497
+Remainder = -94ae72f78982ac1ff83f300cfe8
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 3ad70d4b6b9b5f5b2eb65da67e1f
+
+Quotient = e475eebcfc53d49ffad2e0c2a4ba48fe7ce02c42ff107e01ab3fe5b26eee45c83c4f58c181d77c259155
+Remainder = -c83ac7582a02b47ee734e0f24dc5
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -14bbcff5423a260b21895327b18bc
+
+Quotient = 201308a421b85291d23465d648ad2a8d6f3393efc16fb675a42ea7bbca635ddd8c2449b1b34e5db30a03
+Remainder = 8e07efb8ae4c9df39533042362081
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 93aebb72a81ba68e8881fd1a56a90
+
+Quotient = -2584cc534f88f091fe471c652ac66a695906a7cde1fc1cde9be3ee09026b690c1a899378ff31f6acb90
+Remainder = 794801d9d5770a60e312b99d6b9f91
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -7e408caf387a0ce9bbf4309c80755a
+
+Quotient = -63f7bfc0fe5a5421bc0a19fa6c87713a72eeb2a33e5eadee8c2f32c20d14f403ab8bdc424b9e8e0c68
+Remainder = -24227c242afedee2473c1a66a5cc29
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 2f622c665af7f8126eabfd90df8e9c5
+
+Quotient = e557e6d2180aeeee5d2cef453fbdf38e84cc148f4608ade8836045498be2d318520ffadcea6319432
+Remainder = -dd290149e0e159f9ba6bb9f5a4b003d
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -14a7623d1d9dfc177e913d3119d0d30a
+
+Quotient = 1651d852316d472b41ba0460566e43fabb9257861859ad0fb6ea5a6433a4164299e078f4d50c58afb
+Remainder = fb60aff5fdd2a2b794b0d973ac4d92a
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = d439da27b5e70342aa5cb365ece15665
+
+Quotient = -3ae357761a8ff43d3b1bc53eb336260342a39d22f8fac44eeeac96c2f6de32580dd6a688faa9c515
+Remainder = 4fa6f7ee4faf2f6be99c5ce4b65cd642f
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -50700f9c0da59482165a47a3eda2bf07a
+
+Quotient = -543b4390e4e254226683aa0b83b2ca176ec27a373969fb88f766ac72adc9125ff83b2652e46afd3
+Remainder = -12ff398d9a7d9e97a7f63a0bb293c8fb0
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 383c5a4f1767e83fc382ad4f1c7c2b7ddb
+
+Quotient = ecb72c14c59d49287fb6b2cacdf04619ee617d5f3f0f1b2890fd4e79746a4fbd848613cf5eb437
+Remainder = -1035512a2717a89062d48f1bfd213333ed0
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1402b751a1e5f3fc46e22b43240d6ce9b27
+
+Quotient = 1e800ddc5d5126f322298383f32fd593623eb88a91b2d68c5d9f56e20c16ffe2cefabe873570ab
+Remainder = 72935d534bed5ba557b91ea023601f50b1d
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 9b4df766c608ff3efe5ea1f65cc850fa73c
+
+Quotient = -2c2dc2378abceb983904cdf6728f361d279b4c821710ae785724a7251c43fe4f705f023afa7e2
+Remainder = 249f6433af4e8e224eb570fd438197af62f3
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -6b382f812816c77d65c94c0c660b31a69b8f
+
+Quotient = -5f3ced1e42fbd3c6b2c6f1e16953e0c1bb6efb4e49566f974a968f69a1a66a3d7558f5a802a8
+Remainder = -317a7fb1af65982fe4641fbb1e5837e6ea3e1
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 31bc97372d17038fd842b72eaba2abb26df62
+
+Quotient = af3fef8111c449b9e0858e7e53e1d00b764232f7a077d75043249c387ece30af351c8a40335
+Remainder = -a1493bcbf57a8480461d62796aa8f8541ece4
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1b076b2f7b78b4a0f0e24ba3a05d6c697efab9
+
+Quotient = 196734cefb08f09cb32ffefc07da8d9545d3451d5a08736757184bad94c73be71311cf1e01c
+Remainder = 273e33521f4d74840a96b3fffe169f79d32855
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = ba7746f4400f812919a3dc86b00642e1487691
+
+Quotient = -3c5989cf33145057a9c8e904435d12939db519cc6b9ca1c0a11934399cb139a73613950f2f
+Remainder = 456ebf56c636d54e37709b9e799e83b7a08cb93
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -4e7d4f389423f42e980eda55b4a6a45f6f4bdc2
+
+Quotient = -8432cf3338bce1d12586f83025aea50cff3864af3eb2103a36bbb0aba10b0ba4831641633
+Remainder = -4f62c678137df301c4bef216e6aa910104e76ff
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 23d4c57b5a8162aae8d937be12efbcfd7b96ec06
+
+Quotient = 9f94c4399eef16dfc65a1e015e0786c86470299865932c4d564b71c9b1551a9c0308af38
+Remainder = -168b74a6073b4a5b54fa14aacb5c3bb7897ed0fe1
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1daecf01ec633610373b79e04c22cd7499012bc66
+
+Quotient = 1d5b838dce6c0324f157ad125adefde6e1045dce9ff97cf8d1d39b79bce02128e3433ffe
+Remainder = 3aa816216d55fc3c910a030fd10fbda1e12f2ac2d
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = a1598a12a84e9cba42ea0e200e88d4599c9f615fe
+
+Quotient = -3edb182b53890ca8762f3039d2d71a8a27c36cc884d0879e0635e6326af0182bc47cad7
+Remainder = 4610b2b1305220bc0de584dd3f87d90109012a8077
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -4b5c2f1ba3a82047c9de61d47cbf1bec86b6ef90d6
+
+Quotient = -7571ed4c509630886483f6ca0923859e644063acb38cfb338bf3a681fe449501262516
+Remainder = -21c579846594fc3e5efc53ab01576a7b32d69faf41f
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 28550e1f7c6492f4cb682c37b105f92b049c13fc03b
+
+Quotient = 9ed8fb31327a110ef4377258681c5287de8ef9dbe62aa4fe84a7f2a94bb69607cbdb2
+Remainder = -1b7bb759dd0ebc346cbe216e56be8063f063490c17c5
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1dd1e61caed1efc07d21ce05d889de1ad65808cae026
+
+Quotient = 1aa716227d1ca6af68286062b2d6dafd7ade16abbd5d6fa4ada0365832fe18f73bf35
+Remainder = 32e714b0c4ecefb38735cb88cd5e07c21c81be858cae
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = b1b959a7b3262d7f4dff488315903aeaffd982b726d7
+
+Quotient = -2a9979a530046939e0b43a25edfbea6775784eb5cf346a9fc3a2d22e1aad473cdada
+Remainder = 4edeb91a2472e80068b1883cf2cc45d68ff9bbed1756b
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -6f31bbe097587a68fdf01d0bf93830bd03a23920ccc0f
+
+Quotient = -566ff76814e1c7d31ad53bfb9f3c0607ef1f7d1cf9bdee6e1cfb78b3ad7018f8bbd
+Remainder = -1eac095d6d84021c33aa9b219d191bd0637f20b5920eed
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 36ccf5bdece624b4f54c729a8cde13325d8dd764f44894
+
+Quotient = aee4f377611179d8b6315811dd94639aaaee63e99bddcfa8eee297ce1dc04daf8e
+Remainder = -59cb3ba7efa1637c46b21795872e8deaff90f13402cfaf
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1b157ad838684b45065aa77ca3238a4d8c5427f719cdfb7
+
+Quotient = 1c72d32cb83cf4a9043d3bb5002f61b03e29c34e44a9fc5cc4d613726f5e618546
+Remainder = 7312d11fb5828c7f1a0060a5152a7644fc1e6a59de28d03
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = a681444c4d47d829f7b629b561ffaa0c3be1232346c907d
+
+Quotient = -2702afc4095a0396215e3ca36e2a59725f743b30de0dd8d4ec4d943fef6c37162
+Remainder = 223dd3080ede3a64744b14df8742cedd71388b0df99073bd
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -796c9ea38ccf516a2054a1e584c18b64b996c9679960585a
+
+Quotient = -805585c6a7badc933bced6f8373ffdfe9796e963d3fc90e85b1a22c38f842062
+Remainder = -a6ebff3f651644915d5c466cc2915d104f0f85a44e08fd6f
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 24e8fb7a6a3057ddcafff92916c46f7e4038b98c3104ae831
+
+Quotient = 10383ff8feeb180d4fde925b534be97ec3d5f1f1dab5d8cd9ab5d8ea646cfcdf
+Remainder = -a7efdd0401c74a69cf74442fe3da907acf92e8edc51668828
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1240a71ed8d81e86fd9b16e1d64f438b35d6f8eff672494017
+
+Quotient = 195d95a520fd22317492117dc756ff97806c48c1aac67a41ae56fe503a60cec
+Remainder = 8b8692bee56f8a1ada9ffd8b3583eae33a0df9b73a7d8585f1
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = babe02063b61cb90634ac0493174073d2419e00728d46ad2b0
+
+Quotient = -37791adae674b866e4791c107a697363847dee4a58a37806391426ea48b8c9
+Remainder = 33986fc6a5f5c4f4e31458fc7de55e08a4e9320509d90299b93
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -5563bb852e7338c65aa21c516eecf47f498e5788c608ed46cae
+
+Quotient = -68a30494eceff55e4f54a556dd9b30025ccfa22c0952fd746adfd13d31d00
+Remainder = -1b511d0ab81d528d00a1058850bef48df2e9ae9357e779bb9231
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 2d44e919fd27bb3fd2093062d11830c30fa77febafe0a2082cc6
+
+Quotient = bd30999592dbeabb8871b76aa04cc1c6c3794a83f0178c2ad505d8189485
+Remainder = -b0dbce286df5faccf0bdb40ca60f508d436f9410c5e49c3f1360
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1909930e2d16fc877c15895a3ec8b2125858bfa1c5a1b8776bedd
+
+Quotient = 2171694ef4a9d57b83b09357a511d4e11cecbab5e9387928b480d686a0e9
+Remainder = 29abc8898d5ef85f87323c2a6fa36ab6e1bdbcc0ca742b1a2347e
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 8da37bc9c7c9bdc62f49cadcd40e156e776b7f4c8f7ad543f463b
+
+Quotient = -267d470f32911150d9944e684c14e1834734b15475bee968748dd5f6502
+Remainder = 53a2ffef61709bd7143c4c876e021f20a99ba481f2b11abcd45da3
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -7b117ddccee97816c2ca2f1a612cc0d94ac67f5a79ed41744c8fc7
+
+Quotient = -5a21a3bdd3a3d4f1361a978706ba1cec409c296a5b3c369e91fc8317bb
+Remainder = -2cdc818f1e445fb3772d2a56833aefb2f5565a5fca80662e6fc1845
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 348dfba3c793f0018d7d3a70c4060c3148b4a3163ba60af9d6f8b04
+
+Quotient = b301b4050fdf4ede8f9c746b26d968110e1eb119ca42cd9c9bd8d4fab
+Remainder = -17993daf81711fe59204ec82e363d2b91971129af9206ff9506d3cb1
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1a76328184b9bea8770c91cfccf8ab98e75b2224d666af58022aca80
+
+Quotient = 19c401336dd43c221a61264f8b91791d250e6c99c61850efe6d1e3532
+Remainder = 6c9e547a77c98eaba1b021777dbd98ea88f7fd37c95a2b182f2b9067
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = b7d7b1f95f4fe2f267af88b81af88fbdf603e54ab6de73ccd000c32d
+
+Quotient = -38a77853de88a8db14612884b515e3cd7c673175779d4ab71ba58f83
+Remainder = 51851549cfa00dbfae388cc3b46fd4824268e00e12fba288acceab339
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -539c0171f48e4160e5c308ee9e74f35d8b6d032e946dbcf748b1335a8
+
+Quotient = -79a7eab82e5b65f4f6734e8803fa7c30852ea3ae56e801c5dd11778
+Remainder = -f89592eedcbcc68d5df80663b3cdc638d9d779707d4ae5a552d97d009
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 26efac15401a945ffd37066bc5af23191292765164a0f1e4fd537fd64b
+
+Quotient = d33afb58753a21581c5b2351a74f3d220599ed56ebeacf1d43eeb2
+Remainder = -f699437f44af44b3ddc080f5b74f753d35f70baf3866040ba3c64b30f
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -166cc6a3c60facfa0d8d318f26c6514c7eb9113f6b625c1de804ad379f9
+
+Quotient = 19e55bdaaa5a375c36e6869700f8677db563e5cf985be2a8d1b012
+Remainder = 7bccc3a653f29f3f45b52b8de2449c868c64d976666c01bff2dca03a8d
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = b6eae7a82b5dd1554795573cbf558d7cfed813eec270c326bf290adccc2
+
+Quotient = -297530094c3e4270ab5cf67e60fa5af6a32eb41b18b050fa6d46d
+Remainder = 62d8b502e172da7bce53fbb7c1ae376b6c21b3a3a47523aa0023406e353d
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -7241ae5f1aaee9340d437ad2dab94b70dd29fc6fff7fe31b100aa5001644
+
+Quotient = -640f3c38230962c6d6fca459afe0e46137525e8d62dd9b84da73
+Remainder = -16fcadd5155910764ecf0b4bd0afc3707e2ce49cedcbd5414f1c7d860e95c
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 2f570d2da7a4e62097eb494ca43f7bde33e36525308dc864ffbaeb5d48f97
+
+Quotient = b3895ebba13c8f383ac0482be02e1f5518511420cb4513426bb
+Remainder = -21bc847fdfd48c7a4c36c778681ea20481081cbb7af6b281c8b8ebf2b2c3b
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1a6233954b3480af5f911a6bb8ad33967d5e0446c3e56f521e892c986b6b82
+
+Quotient = 243f3fbefbf842c79c5e96162fc42fe4f177a59d27681c54b3a
+Remainder = bbfaf15a90e744dc4a1caceda3cb339e5491e4507a1118613c5e9739f976b
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 82ae783b8a13e2e65d52dd3a6d6b057163347872f4d72245ff364dbf2421ff
+
+Quotient = -30f7cef2948c9ebed8fa3c5ea9a9bfa96ee4e9729c9b18e9d3
+Remainder = 1feb3fd887629cca60c664e385dddf538d9bf7fff2d34ca9e0e7614946d807f
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -60bba60d69093c0134fcb90aefdb9c190e7bf037ecc13dab3cc7915d7893046
+
+Quotient = -6b6f0183c1f598a68683ba7435c05d700d74681fe472669a1
+Remainder = -1f4d58f81a8c18523918d31791a00ea9aafbbb87792d90a5392273ec4e405da2
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 2c17372a5128d7c403a3b94838072ecf9aff88d164764b12bfbf6261df957e2f
+
+Quotient = c4347fe42b2a7d9d5a650b72724369c5c1f59262a7be3fc2
+Remainder = -1103ec9c4a15373949cae4e34b7b42e242da41edbf5ad8362ce5e5426d3154a1b
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1824671758069b7660bad819f06c86fc76a9344ea38412058380363e5c5b4086b
+
+Quotient = 15e8c8d6847dfe974cefeef5fee93da9e58b74d640c6c413
+Remainder = 61dac240f2b39832903d5ecad9cfda5162bf8ebb0610545f259b75c3dc6ab8771
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = d83386fb9682576cc70cf84520c53169e391b414f5421cddca6e257bd77753c40
+
+Quotient = -3572711bf994e6ad48535cc4d65ac323ef1ccff530b4337
+Remainder = b5899d4cb879e37022c539962959339d055900cca16153da09b54c658753cf50e
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -58a05faf5c61f85ac5a090b6bb045c851ea17332d9bfad4309ce2b7a79ad3cc575
+
+Quotient = -6931ebfc6e34305e5d7cba5284829d088d1ec0abdde508
+Remainder = -1b09eafde481064bab3a5c7fd895edceca40b1e62a9cf953eae1061dfbe00936391
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 2d0769f392ca9ec629ef1bfbdf08cd8cc9219330ffe3c05343df792dd94b1147714
+
+Quotient = 9a4800f0cb2bfbe8d234410deb510103b7da30cbac7d9
+Remainder = -971e4a529e439a1b96b942001631027ff2fbe40b8939e224adb7f2ed30faff64d1c
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1eb3d7971125a036c3a67d9f5ce580a4ef4c469a492be53a55bafd2eafd4032b5b9d
+
+Quotient = 23116704b7a1a86cfa2ee5707ee46268634db5d50dc0f
+Remainder = 467c6b64c8121e4f250492191ea36a27119a0a6d19af519bf7ccdc2436c885c99d85
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 87134e98f73470e23a96c6a9139af3d4d21574de8aa9ea1d720df8940bcbda343694
+
+Quotient = -3b7f72ecf4f55c02366c52f38a827f5773b7cdebb9ba
+Remainder = 194b334b2046a66be3ddd7c6df01c88967fcb11e97b8206d000bcf6043c6e9ccb13f5
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -4f9d0341cadfb1f0bc38184d93503faa196fb8170f8ba2b5d3b512c09d39b7f79a5b6
+
+Quotient = -6db1d69019dd4cb26fd65d5b88a31bb6413b30278a1
+Remainder = -2042a060391e181882dc0c8d91c3b03c1ea35e2eff01babb3ae876ba1e57a505d44856
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 2b2e8f445c0c3aaef0285945e4ca37a700310e003086f34d02c891b94b117f3d3032fb
+
+Quotient = c0e5b9a5853bb21b5e2e37f469764579d5cb2bf984
+Remainder = -154669d4bce7914cdc8d79f2b8d1faa43e8cc3b20fb0767e1c9a47c9e1daed4b665cfdd
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -188e619dbb719381e701363de874fe168529c10f30d3ff184e4356991fdec1649f72235
+
+Quotient = 180054f8c36833d44cab9dd61e6d89d28605c564af
+Remainder = 59192ec5c6fbd9773b8b7dd7d8ab1800dfecc8eb01c29997d15ad75b79575d9e26e1fc9
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = c55b5eb165c63ac2794bfac21980ebacadb93f1e059309fd2b855621572e8d9b3f29018
+
+Quotient = -31412e97045c19ec38951b0e3884c66d1d7479437
+Remainder = 56f1425227bfc6eb1ecda7bfae0e5cb59e92a2cc5306b28465c8739e40893dc5c1e94cbc
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -602b8c25ded1ab3877f58cb048c733649c7dcadf87b2652e35c4e5544d2306107ebff7b3
+
+Quotient = -8da1489ccf7203ecead94c67a5750884122b6e75
+Remainder = -15162026586a1e55dda72785f31c9e6140d166a1fd34c87a7d8c78f8d8f87bbdcf8f75b1e
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 2171ee4a6f7f67d5a33d0a08c367184d70ffe39da28562655e75f6b66c866b1c2ac93e467
+
+Quotient = e635f8bdbf80e99723aa5718d3fade4e573be2c
+Remainder = -ffbd73bfe05f95bc2b135f12682288c620215eac3d6d56503d93a90e06f236e597d1df975
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -149375d478a096e724b84faf795c589ef0d772c4623f5be38da99006cd833dc5b28363faed
+
+Quotient = 20f76f5c6d0c8284764a10f6936c22bfba5f851
+Remainder = 82e3fb3f7252dd87b5370d26d9e8b9e98c7d333701f0ce8a05c337054c7aeb343d04d7e342
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 8faf8c0a3ef94ab1069394998e5412a7d84f44aff97edf63abc46d96f897172c38faa0b13f
+
+Quotient = -382586dfe93872abbe3a504fc62a8973913f96
+Remainder = 4d407323ef56093eea2f3993334215950f4e1a85ba18cdcd77d819d92b8b292c3ec8edea425
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -545d81ed25602b158bc79aadf98a8f655fc399fb8652ae94333bf54c8c9ffaf8c6b3f2a9d52
+
+Quotient = -7d179efc493eaceaf46572a1f3a62bdfc4a38
+Remainder = -3de3d817a9cf7d529b5229a503e8ebbbd2c53215ac3c584c010947f780198dee16ffbf47791
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 25dddb00f65d6a1ba8caf7815a8063c5da656d775eae9e0108c68ce11dc925183810888dd04c
+
+Quotient = a9f7e5f235bae0e3e29393ac5c99d510b009
+Remainder = -150478b4a0df3eb20dcd1be8da283a00636c021c5c6337e7732aae9c4b49853b95f6d2475ea7
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1bde6cae7f5ced9006c0b1a61fb50982a433e4e2050aa486298f456556d8e909e96933e2ba3ba
+
+Quotient = 16de125df5936181981b4c2d0051a8b4d211
+Remainder = 29ac7c8a11f9beb9ad649257994216146b663bf4f237c561bf315d95778fcdb1010283475ebf1
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = cf24735a60ff5906410be5c4d98e3c9247919b57e404aeabc7eaefbf07bd64762bc61b96c9040
+
+Quotient = -268a52cd10ab4814268f66d9f44f71a98eb
+Remainder = 20293699f12fbfef2e391963866fc082a7884cd13b1c9bd8d5d203558feed2b889720be936451a
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -7ae7d548212830013b7d653072c33f0dd54a6ebd8792bf75809d29a8c798dbc67c3edd99a69b85
+
+Quotient = -8f051067ccb82b6a3dffedd0ff2ee97c46
+Remainder = -100dac0d3bf5aacc5fade281c071eb2399560a65349566567ce1c0c34e43f175a575ed1eeeb3b07
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 211ebb5dc59a051fdfa3b18ac491971e863f2086cdc099672c1215af4ec877e29950efa4f487be7
+
+Quotient = 9b7ee4c499386f922432fcb1a453ee2ec
+Remainder = -f410122a74386d724cdd45b2e548645ac5ee4a44cbfecb82aad34ae470526674da44ebbf557bb75
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -1e76750814dec1ecbb1af0fa2281ab3185e94e47fc16a77fed312f23f261ad7709ad7c9f85862c1d
+
+Quotient = 23efb26228d7bcf281cd45f54572e2b3a
+Remainder = 65bf2ef1c2f8e94d98060aa305f85e6cb869c74eabad99877010d30654aa2e578ef6aa3c5f1122e3
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 83cfc25e90a61cf8686e3d5857b2f958674d478622c54cf8427275ca5e9312ed24e44ed4a1b5e413
+
+Quotient = -2cfcae0e922f2d884bfa0a3346dc9812
+Remainder = 14de2725b11a9c6784d9608c52770d29b9fbf824ecd4890bf28f3ec0dc6c52e4df9be540332b8882d
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -694b057ff381badb37c7c15c81e74cbd6774e8d61c9e7d450811c36262ea834fc1287fa59708ee072
+
+Quotient = -4c0238ff3c18d4d58e543f020002802
+Remainder = -2ddef796c50817e82ea6f64a02a8c6b30ab40070ff5401c2d39ca14b9c4d99de33834bfe566a0c2efb
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 3e51c9ab14f522b55e8f9d3ba995c0846a864dfa2d568ea211b0cac1463ce6a1da72d0a15746fdcc9b
+
+Quotient = d41f9102a7785ce64f76b7d7b870b0
+Remainder = -106eaafdd518c658bd371164ee43ccd915a01b513fc7d220900039ff840ba36450e16ce9987e08e7141
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -16549c5d57b531528dd4d781f03cf275b66cb94eba038b782b739c3ab30b8631c8706abac06004a942d
+
+Quotient = 1616b432b3277e774aad92b0cf544c
+Remainder = 2c89373720b834d718ff3df985ae47c3a7cde0e0309f682f5fd48dc97a1ff3d69fa0dcaa1245e956445
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = d6721300e877a8145d05f4f3d8085697c2ca5f34a5357fed0bdb7169f83b6f8d855232eeea594846b79
+
+Quotient = -320fd6a7375a42a3961362ae196d1
+Remainder = 5336711bf81237ea3449f4e9f4e6358dc250f8ebd86082cab92a8079f2c8f835bc783082efb0ed7e3f66
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -5e9e8e1d446fdd314d487cac1226088696e33161d923acb67d3c75e87e428bdbc193e02f53200610fcdb
+
+Quotient = -4bd06daed3f30345d269f51e4381
+Remainder = -1f3513bdefa40662f0f50a04b418a833aa2f85522dc6c399298b1b147662ef2164ddbfb7247ba9511b8ec
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = 3e7ab7ffe5f63a6c1e109b95b83af470ff820cdedbb3c90c398ec42e44a45e1ca894870a7fa51f17ad5c5
+
+Quotient = d6fd01a0c5b55fbe36e58bbe77b
+Remainder = -c51af3e8b430870388357cb366ea888bd7b4ccde09ad3a1d2ee1426af060245c6d6b5980ae87fb66c4642
+A = -1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -16086df3dd5e665f2631a294563c68931faa19ee67d6a2153d262940a648ae71bb3c1745daca5ea977331d
+
+Quotient = 18bd9a8f5678d28cefd955cf99d
+Remainder = e193f2fece67b7abe16373c3f84f18dfedcf654d951bf47585fccfaf67ee04f5037354d057c9f5eaa8eef
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = bf758acacd11f3f3e6665cd740517c9ab2384266f3c7ff9afd0888cdad2f6c9401c24d6c11fc3949aabbaa
+
+Quotient = -371239db55c79521206c9e60c0
+Remainder = 93773085af7582dd298b09d7098835787978d820289ea6850f27d0d77eecce8614785e32b228f46ca4b371
+A = 1280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031
+B = -56033fd85be464301f10177b58d895fbb6df6154da5c2a2a7cfc3a24d83a96f5295fb17a08148a4e51dde91
+
+Quotient = 696d8e378d12221e2d970c53bf63a20ef381db8566701972c22fe067cdba99c57b68706a5c6e52f21bb3de861e49ed2141b3036f07d1fd0ee
+Remainder = 9f0e50ca76031b
+A = b2668f5fbcf4170820ed3fc9b12a61862acf8e3cb17175482efe23c5cfd3556e77634d407b6d1f98a73437a8d6066319a7a860afcab2338a1b1313037e30f4d9
+B = 1b1313037e30f4d9
+
+Quotient = babe271ea266bc7bc16d193097903037819f82366c7e9ff8f2cb14157b40433c6ee327038d5dcc44140b070d823befaefbee5e13419f6f17
+Remainder = 93d7c547a9ba0a4a
+A = 74b1a591f449377836f378e05d2902b29964df59c6926e5a9182cc09ce3111783cb7021a185340b4880d56635de268d6f3855c4d9997373b9ff8df899ee3b3f1
+B = 9ff8df899ee3b3f1
+
+Quotient = 890139fef28aa3b77814e1122b9c7f26e746ee3c507e6082b508fcbe380de83b06a01f735239c6847c30eae44749fc8c5e3bd97eb40ba297
+Remainder = 6c97aace900389d0
+A = 7e89adea82b4cb6feb41297b6dc8d948e72c3d5554a987900e7fae48cfb38fb5282b13d9a1f5793cf7cbf1ef551865041c3ffe0e287714a6ec7123556af55a48
+B = ec7123556af55a48
+
+Quotient = 1fdeead441e2d7a6ce3cce2389b2a22248ddca7970ae3f7e7d8453052fd08534ff7c46f6a4537fb6f28df6c5fc8a7d384336e679b74205315
+Remainder = 2903c7cc2651bfa8
+A = 9ca66de3d83f0a747fe986464522bde5e42aeac20e8ace1ea13fa6bc9514c58517479a4281d4128c6d775489b85dfd114ad184613f308f6c4ea484a22ab0ad1e
+B = 4ea484a22ab0ad1e
+
+Quotient = 12f16c8f9f898a08853982e2ac5a906d784c5ab8d74007ba3ab311e861d7c1ac115efe694cab7583f75a4a59ceff2887dab53b2f1022aa452
+Remainder = 4bdaf1f352e87aa5
+A = 6e6a97b358b591b78db43772378dc084a11836ddc9dd4607f263ce620714e8fdf6bf67387c163b6f2999f84270802b4bd5c0f0377e949fbd5d42fe145e66ffeb
+B = 5d42fe145e66ffeb
+
+Quotient = 14e0c06c8cff1f9f5dd8afb6fa6c340f0953a18ba7d2b26b22d8e7f946ef20fd5ac277ceb59cbd4ce3e8213803c3b5b0452ed449e22bf2c29
+Remainder = 55422f1caf4a9a00
+A = bc9c054ff568af73e301e0751bc1ee055e82826cdc53449f2d9f45feda2ba227bedd6df9b74fb58a85917d60b087bef04a156a571716e9bc908ae83784ee35c0
+B = 908ae83784ee35c0
+
+Quotient = a457ea94da3237c0dd15ee30e9c13e7b4ca1dc90fcd67951b873787206babaed837a3eb17e298d74cae92d1059636f9aefe11aef9ffa31053
+Remainder = 124768541b600598
+A = ea6dc82b1906c277526ed867fe8b0fbe32feecfb935dbab860aef59a7d72799fd4e952e70b4c9304c7b2a06af8badcd6cfa12d0b6c9db38d16d2c4a24099ca14
+B = 16d2c4a24099ca14
+
+Quotient = da0a37eece8972a0e2e8817c54e67c4d9f92373340488539d5051984bce0ae3300ef6ca9d0902daa4d485dec3b4db6c8b1ffd2c5d08b18ae
+Remainder = 1ba15c46023500b9
+A = 36ca8763e20e6ebf07a55cdfdd83892bef0bab68ac092093bfdac1a49c1da015541196a24249bb2262e70f7ed53e0fbae61f02ebac4b61f740548136ce50f243
+B = 40548136ce50f243
+
+Quotient = 3d8c433daedfbf681b528f88d610204d33bbe74d0b13978c34a617ae94177e07a757519b5a8f1a93a73d0751c7b5b72b4bdf475a9708fecac
+Remainder = 4cdfd72349c6110
+A = e0dd7e73b2a64dc017da65992176e2535c43b6fc14f2f7b0a7d894d768bbc77507eac0112b2dc3ca83d70989a1b949ccf374be6a012d80a23a74bba39671fcd0
+B = 3a74bba39671fcd0
+
+Quotient = 39d084b444e39c32f2883e9968301151802da15141f65893f37b8b834eb01c074aa1e1a978c5c99732c87ae106bf8db09e1728c8bf2aae88
+Remainder = 2950443357cd7477
+A = 16df31dc290559c3b6a3d192cf15d825cfe79f8dbd5c9848eac7fa90eea5d87f8b430cccf9baab3e8e4dc33467a4234d8551ff25e33af175654686ff1368e96f
+B = 654686ff1368e96f
+
+Quotient = bbead8f70c8e61114f22d36e97861f16037efabe1347613e78c51d7f539065421a66c907faddaed13ad2a0f0b00f8fd594e917799cd937e5
+Remainder = 3013136f5f728b68
+A = ba5e688ab4f8ab5c25592bc4334b6dc2b7a06d491d0f919b716bf1cf109b62a30d9dd59dd4bdf870dd2687894edab303277a5f3e3a537cc8fde3ee3bb61767d6
+B = fde3ee3bb61767d6
+
+Quotient = 42aefe467ff2a5614efef1edce25a1acba9c476b3abbcd680140a3aecf8f51c1ebaab8912de217451bfaca2842c0bae717b8a030b6318c0
+Remainder = 1f130dd2ead0d35e
+A = 17bd50b5322c51ac883852ad2a4446c039dbc210ca3aa0313065fc88cce6819b324e93b036bd0c71be58586cd2b243d01a4a918c10ea0cc5b22f9d795df09de
+B = 5b22f9d795df09de
+
+Quotient = 13de73dcd72a3638fe2a907fd7f6574bbb228698fa60e4ecffb082911c5f09c74bb4f50564d3d4035d07eedea38b634a3e3acc26c8e9aeff8
+Remainder = acb8702f0113e0c4
+A = e0327b2e59236a3f91ccf960490cc69b2afc854de9299ad2edff9618f9fe24251886afc65f5c581a9bc86013f356d599e98b8b10f5236a51b48a6b29025983a4
+B = b48a6b29025983a4
+
+Quotient = 27d11481f00519b786eaee96220afd45bc51700f7366fb5e7da35bbc84891aac3d9d2b709dddae371a6b78439fef810c68eef586e1d68350d
+Remainder = 3d1890c5e1555d74
+A = f3504d5d96c9e27a1527725ced337f1cd0a183531642051e166507432c01e8d44c4e8918701c2a05eb8a9d7e26bf04993f9adeef2826ae4e61c602477f849121
+B = 61c602477f849121
+
+Quotient = 10bdeac209c67b023044186704735c7291423054bcddc24b731ad601b49372f4d5ce6e9d85002f8dddf0411efce943f81a5e42cee2d0c9fe5
+Remainder = a93a0c5bd51004e4
+A = fa29e37b0d0410d19fd180149b14f94ec2edccd347da65f6832850aa06a61b7b78c96faf64dcb347893c93c560b8043466419864a382c6f2ef1412873b2d8cbf
+B = ef1412873b2d8cbf
+
+Quotient = 1c9b6cffe44241292320c0660b89f2f77aaadc8d36e33f5ac3da0f12b3c114a156870a92079f7192d237f8bf49aeee6282531c929cc56d75
+Remainder = 1ce3e5eb13ac7958
+A = 144325a641463ed6bddfcbd73e50620a44c606d71fac38efb1c9d2747b4903f7b51fdedacfb66db022aea09b43c7c2ad7b851035165ebe59b552d4f7eee617b2
+B = b552d4f7eee617b2
+
+Quotient = 1b4ad18dc0e634053beb3cf840b53e35117ea06309ea8ca22e37123fd7e1d391c96c792e5125e322c27daa73301024080d73ba3491484b659
+Remainder = 3286bdce6dc3a828
+A = e3a2b90d3ef446f6bde30d3e726cf3e78212324054b40deb0b18fe00645568fb0a6234b6bded6240977373731bb30d1349e25cefd54b7a9985735e9b78002691
+B = 85735e9b78002691
+
+Quotient = 28f5e8da6733240cc2f18e3cf4d42a50d92816062af33a9e1871fa89bdb39a0d905c49faf51cc1c1378741bea34d25ac2c8e522881a6f6087
+Remainder = 135784870eb40c68
+A = 593206f9367b72f9cc59b3e37d2eb23b2061422859162ee53656899c2471017474f500c6e23efe1f6b1e57852cd4229329dc182ba01a257122d76a26aaf9b844
+B = 22d76a26aaf9b844
+
+Quotient = 1ab276448d16c533b6e90b5b5ca266e13ec27b5a58c80b7657df963ec2d1fe4eb1c1d24873eff6408bcb3d0cf97c31e85240eedf0efcc1e5a
+Remainder = 27b105741264f875
+A = d84fde3d851b52ed3b2a1268e9b765ec6c09c5768bba709b3b799802fadac30a6c3184185e6d57249b1c34619f3c9d2b90bc0c348b22537281a39fcadf738083
+B = 81a39fcadf738083
+
+Quotient = 84a87678485b3e60ee1cae3701ebdf0a29ee44115a492c34a0c8e84090e14070eb2ad0abfe2c339f26b5099327515104fe3d1c5546feea98ed
+Remainder = 95f7434941f9d8
+A = f79a0643bcd9c28cc22cc7b4178b3340e4685dd2672792516d6fc08567d2de2d3e25d43f100a58826edb146ac94acac4213bb09bdf8a258001ddd0ab110b89fe
+B = 1ddd0ab110b89fe
+
+Quotient = 516a2ac26e5b3afa502c7f3c6f15376f7a380e5842c229443343b5b74dc3de84db3ae99a0c57043e32a504ded19943c0310cababb3e92cf8
+Remainder = 327cf78eed336523
+A = 17c0d5814e1020d5d69674bdf6b9df193a16c0c8567a589d014e8eb7f6c9c36560791f7acbbbacee7c456eb51a4cdd7ca88011e9d8d9f2d64ab08ad74f7be5cb
+B = 4ab08ad74f7be5cb
+
+Quotient = f0da0beebcfaa716f494cf3fc81fe65117c90adde3b3942e8e66986fe8050fd5c9ebe1c88c5db04cea4c4c14779555d70cafb53870671f95
+Remainder = 3b2f844440d7be00
+A = ebba8c393c2a22b094d824ed95b4acf6875719fc165f73ee6d359e1134949169fdacbb42d5deb8cea96e11e3aac985635b5bcc6c02a6778cfa8e03d9ce6fc680
+B = fa8e03d9ce6fc680
+
+Quotient = 56527f07593774f0fa642241400985d0bb9b41d3dc9e025ca069130d93afc972d75e3fe0f798e127c3e1b4e925000459a3a5a83b15186e516
+Remainder = b620b7a3b752b78
+A = 5d6cad9e26267abb480b2b9ac5ea323bc4c3c53e0de8ce40c89c85accf0499aea5b11703a04296519047585ff12f8795f98da0546c20016a115100eddabfb468
+B = 115100eddabfb468
+
+Quotient = 294dca3b56ce9529aed2c132a9bd6c0c61de7a58ac50582f396b4fadcf7873b502bb869f801a9ab1f12384631cefee72b3e6050a7f69eba4
+Remainder = 53a0fcf5486c7a6f
+A = 24aa73803f270185d23310df2cf3ef67b18d7800bc41aad2ca13f372a27ef0a9217194f3f512e79f545a903895def195a5eb9a1a1b6b3f4de340e9da9b305d3b
+B = e340e9da9b305d3b
+
+Quotient = 16bf4dab1c29bd284c9b6649de65a4ee58f21d6a8b51627ca133fa817872b1a4a9956662db0aead5898ed0eda08511be7c47449638f2fab95d
+Remainder = e7751deb047d98
+A = 77b04d93272491322ed2fe651044e28cadb2ae7825f02b55aeb0f73b8b8a8b336802416fe08c718ab681581ac04d87116323f61f50bfd2180542fcd4a46dcff6
+B = 542fcd4a46dcff6
+
+Quotient = 388ae1c243bc9111e663c0c80495c36e8767bafe188b532b7ac84b5160d902af1b638aec6e4c66955d16bd8ce94ce6027a7bf95910f705ad0
+Remainder = 7c667ea307017c2
+A = 52f357e9a57722a867d8199242e100f06e8df810ee913d6992bfd9dc03ed78bcf44d692aaa7be806df0c9e0802851d7ae8405f76114e6322177907198f85cb62
+B = 177907198f85cb62
+
+Quotient = 33dc2fcceef7dce92e3a9df58566c6e28d03b58ff6ecbbb31e43936cda6380a56788285d37b5e8f11487afd78c39cb2150cc98d9d78a0c6cb
+Remainder = 429a380c9f8eeeba
+A = d99cf9a0bfc347c9631ae8c69defe1f1509c3ecaeeee5dbc61317bb73fa5cc6e704f64c865cf4d898f8a2f63214dbd511f61aa6e09856222432376698f8d2f67
+B = 432376698f8d2f67
+
+Quotient = 18ecac9e5539a014cffd8310ceb1170577cb23aa9cb3c523d57ad83069d1609ff743cd3c275b67097a038b85afcd7105ad21672f9ecbbc7df
+Remainder = 37924fea665f5c92
+A = f87aa8b6e62b09291e0e9b832ad71d8f85d60501a8d89d2638dccd4022e89bc4932c186a198557282527dfa86dfacc2f90fe0656695b61429f8220509f5106b9
+B = 9f8220509f5106b9
+
+Quotient = 37c0649a53c8cab91a7458702870bf64cb1de9fc1c6b9a3b92444119d368501b62d3a5138af72bdb7752eab8af6bf4e3bdb9e3beb1805b88
+Remainder = de179463e3e91ad
+A = 995c04c1f24c4efe88393bab7a7545e39193662d5db7c8e557d6c554ed4367f5af82c463d0ba6bc3148620481140add5677937989e03fb52c0323980d8841d5
+B = 2c0323980d8841d5
+
+Quotient = a6d193cfe7d8983768ff29908ee6e07fee99927a4bc4ef41d01f63f3b4a2e7029630b7d925d0979458cdaa903771286af672253cd99593b3
+Remainder = 6bf69921db298b3e
+A = 55c856daa8110599cc4fde0a44acbd69a68eb177e0438f7d843ba0fb74caab2a7e0c8a6f176f5555779e65c555e9157a16a1497edf36ccb583a458f0372a57c9
+B = 83a458f0372a57c9
+
+Quotient = 63f379bef9866b59f8bfd6bb0120a75dc03506b0034e7440764afc8ec14d8d735aa6f03a568ea98d0a74ab9bbe9c6e11b288467e5f79a2539
+Remainder = 11c077beb8667d88
+A = ff1fc3ea60fb37ff23e2f2f4e207a86e055cca41eebcc5bd6376904b51fb3d233cb04666fdc92be33239b5ee552870e45717890e35fdbe3728d6ff55d5662419
+B = 28d6ff55d5662419
+
+Quotient = 285ba8cdfbf00b112e496ce65cdba2271c82a273b3d30bed82ef2d360790c5deb97f3311bd5eb9876a61e33b3a37782d00c2d5ffbeec752ca
+Remainder = 1672a8aa119c3a1d
+A = d614352268930d301aa4046cd38e2eda4dcfcc52eac984943f2c863de5c4f8a44473a8ecebf12cb8f4da4722d305e5c9c3eddc0109d416e854df334dbfcfdd4b
+B = 54df334dbfcfdd4b
+
+Quotient = 358178128648fa9ea28dcfe68b4cecc7071e129e3ce4d113f5d1e387f7e5a412e9d2dfe5ff16d9987a544004d213ade9c134cc240eeb6871
+Remainder = 44c3fdb374bc0c30
+A = 18b973dd011969e29a1f4a5b8f118313f715c2e31dfebd9fe0957cf23cf36eded89c38637a8d3512bb23324ff2a3627d5b942300200c823d764b7a6c12d1c91b
+B = 764b7a6c12d1c91b
+
+Quotient = 19ea7212f6604d423b308fe3f2f4986f31aea9d6a117a3e207e38ce5bbd8d7a866285ac60433630de547fc84e364c451457fbf864a82c6613
+Remainder = 2718de2dd0796f08
+A = 83577f755a448d5586e19486b04de7836818223ea920465c4eee979a9ce5696ad8e2fd5253b5d5dcfdf355465e8c0819658ccc5580fd29b351169b54c62b779c
+B = 51169b54c62b779c
+
+Quotient = 13e0c5b9905770b60a6f978d1c983cbc84dccfaed0f4222f534df80c7d3d129f5e8f74f19581332a7f6d383915424c71db4ca19bde2591fcd
+Remainder = abf5f6c8ab6ed4f4
+A = e2bf43c91cdbb244790eb165cc13feafea36f5187cc9bf8aa8cf202042efd5441e3822a1164992da5be750aaac0bb11f09375bdfbd4a39e3b682c7ee6ab5f5f1
+B = b682c7ee6ab5f5f1
+
+Quotient = 3919f31521e87f90df3a4463d0c83fa31e3f569449009d307962d26f07d854e8d3f0badbf55311c206bf34e6227949327a93b1a5ada7a930
+Remainder = 6c3802d44dd4668f
+A = 2546880cc6f97fb379afbc4a2664115ba7909414f35a5bf88be2ed5187bd1a24afaf82eeceb0b438d4999ebf9b7ec752236669425bd3cce6a71d9ad67ff2ff5f
+B = a71d9ad67ff2ff5f
+
+Quotient = 121d5ad4115c2768b962e51d09f426d61624e0f203ac6c923289b4e7964e165b34f3dc1ff938a7cf37478d407de251c64db71d3ee629c1035
+Remainder = 660a35e1c1245910
+A = a36d3250c123697adbbbdf489e6cb40be57febaff654ca951c9fa0b396b1714c55ed6e05e468153ac443dabca29de9b43cc0cc4e62cdf24690593662c86fb5ac
+B = 90593662c86fb5ac
+
+Quotient = ad81debaa02f6e60da58b46e76ce041fc4da64138634ea7b3c165b8fbda027eb64b6b5339e70babbb83430d60383c2cfe22029e617fd03a7
+Remainder = 2e4aeafa2ad76832
+A = 8992cd131757ba5cbe54aa58be115723ea3438ddc782a4d1996980b7b312fa76e4483584df744b10340e5fc9e468690cef538920a732a8f0cafb4e30846cad1d
+B = cafb4e30846cad1d
+
+Quotient = 67a71b9ebaec91121a8cf6bc2932b6be01af7954eca69c5202d771c2c2d13683cdf90ec942a3445771ccfe484f947f078de825ea88b3c05a
+Remainder = 8395953f744cfb31
+A = 4f8ada84096198175174896167405b85cbc03fe0642f6b263a70f9a22f19ad6c9aef38da8ac036d409e6fd925023c95312cebe04eb653e0ec473dc8dfed98967
+B = c473dc8dfed98967
+
+Quotient = 9416326e2347a541b777a0fa1b0c35d8fe76c940d24c6f6806d6ae8ac1e280c16e480786478bda3f780ee92f3f3c361574efc2ed5ca98e26
+Remainder = b8ff45f31bdb58d8
+A = 902f5e48b96b9b1fd16c3b21292ed495987ddac4e1d92b2ab10378f2966c4399d6a41eef622a4991ccd1f647531dcd145de4ac99b3036779f9414ed2f4ba7e08
+B = f9414ed2f4ba7e08
+
+Quotient = 403c651b4e571e8301c4158fc185396554bf61d900708d2af5c2bdf495b3cb539b0b9b5acd0d71654b3aa68024961d5a7bc9e2788e6c822b6
+Remainder = 7856ec047cec8dc
+A = bdd6d846983fbf140173a26d2b709b9f31b4fee1eac9d25fdf0ef3523be0e6afb372acab470cfe1806b36d84017ec99302eb9eb5eb2862222f4916d8b6201d14
+B = 2f4916d8b6201d14
+
+Quotient = 1b6d967173f9777cb6194c8f69289b91da731456fe5a1515a49e4463cd906c84f97381cabdf9f358d97fad5d3cb140e3a3de397e7f9f683157
+Remainder = 83649246ade8bb4
+A = e3da80658acd53ada7c2dc57178e697f2907c5b0c64f4a87a794ca7521105a0568a32874207646df3768ee60964b7d1d2e29ea6bf7fbaa7e084eabd4ea553a72
+B = 84eabd4ea553a72
+
+Quotient = 27b8f1e49e404455cc68217a20766590e749507976a3a6de25a7cf2c32593aaabb04d84deba1ec6bbe048a2959ffd747243c396dc53c9c811
+Remainder = 3daa032278ce53d0
+A = ff3ead7c7b27f607d16f1ef4ffa91b6cc28301b9256cfcb0c22b6818371ce648ae8812dc50a86e4bdc0d0b1e5b0d55c6ba07b240886a6d5766cfb3ed0937a543
+B = 66cfb3ed0937a543
+
+Quotient = bf987f58700508356fb6274f64a9f78d455e4c436fc6fcc980ec0800287ab3789b91c29a8a72b16645ecfeec926b6f8242f3c7dc3adb40cd
+Remainder = c007da44faa80584
+A = 971aa67c9af10f70977f600e10f9278b8e66d2471956da38e5f4b3fedce9a5fc7ff42b800bb4a78314c70bb59394d0880383f5182b6c1960c9e5b47ef8e63be5
+B = c9e5b47ef8e63be5
+
+Quotient = 7332104442474715d7c4cdac15fc1731240f8b4dd0e6ff3284a15a62a8f9a071dedb87f2220efcc5839cb7e6933a8f65d767819db26e134dd
+Remainder = ef65a7789f54174
+A = bcea2ae4b1edfebf905a5820f0481b6c58d76a69df9dbe84764add3f49496a5d7005d645eaee3754e0ed105c13a114e6a0eae5cc4efab6aa1a3d3a0050fa86f5
+B = 1a3d3a0050fa86f5
+
+Quotient = 3f6182804a7ff12fe7ed3c8521b55564559b1a47a78e1fd56597b9470e7e0f6e7e48c58bc8841c9d118718ccd5e0c0bf9a08d8e244ae60da5
+Remainder = 398e30aff5bd284
+A = 2b877181a960c5e29ab1b2672ee22539256a82369e8f6cb5bcfb69e5e4a41f782e89b58fc0ef6ca336469ff929729f8492b44f12199f0e1c0afd12b2c999e787
+B = afd12b2c999e787
+
+Quotient = 1a80a681d2c42edbcbde552323dac3a1c03b43251a99b5549da6cb39ec6947daa0d574f0df68512984fa8e269b0b27a5576b3aaccb76ebc23
+Remainder = 378e44fdc7a5ec4c
+A = d37e62f44de27a1418f348139eac5ab9fcc1ada21ea6d7695273daf638b4d7eee6745f54b99a9678cf742d304736ee356f66d16d874f8cc67fae9be5dfd41a3a
+B = 7fae9be5dfd41a3a
+
+Quotient = ee982a63816d56758c29d284c19b9b984908cf0a9ae3f1f926e162a2cae4f88703aa477c5c14042247635c103494d11593c2c3839baf4d93
+Remainder = 39afe3275c01aae6
+A = 9a0b0476cd33861d2fc3137df292728e1f636f6fcba5105f384533723231a3104e7c77df46f7f34a4bdc63d5c67b418cafcf106b26ad020ea547d34edac1d3a5
+B = a547d34edac1d3a5
+
+Quotient = fb3f4a39a661e5c31228a6b7b4c27e6e52d1954e8ce262b98b61650efffd762cf2a1aec228bec5d5787683cad6b2e6e49a0de91c15c81874
+Remainder = 63e5ed36ff73a42
+A = 4453712f56467328401a69d4d749a0771732734a760a74094e50a62a030cb604e735bfe0bf0641754edff94ac0e0549e8c10941255f0f21f459e52a6cfe4d9ca
+B = 459e52a6cfe4d9ca
+
+Quotient = 7af60a7c0f995178be76c070cf49eee311e6d1e3afaf50c8c93ff200c1b3fe742b23259b4fc0b9ed0947be4fc9a6c212d86de9a0f7dbb5279
+Remainder = 19657d8ce516a138
+A = c9c92a31ad0f3cfb56a294c42a26eaecb77edf33ed40a7e6797927a0c996a7c0a701b484741163df388bb082e3daebf4e1b7a99002632d6f1a41c1d517238557
+B = 1a41c1d517238557
+
+Quotient = c890c55a8e2a3105b9bf9344a57a9b9fab5fa1fd57083d52431b695553bfbe7a44a9b6cd1f83958224f351f8511b14215d1648e88e938573
+Remainder = 1bab5b03c372daee
+A = 88341550e470016c7ab600b9f6cb410071a77f907a58cb6da4ce3e955d1e859534c2c1098fcfd91b9fa66926e51896733c36a824c3a20844add94e27f30ca651
+B = add94e27f30ca651
+
+Quotient = 34c240c42da400317f66f5151630493a2f200ee418d5ca3300cab10dfb429c2acd7280bf066fe19115f86db83d8f5b93cda714533b16abfdc
+Remainder = 18cd326996ccebc1
+A = 7e96d7b90ff09b114dd4393e9bdfb13d8ff517681126c566e18dd6369d87d248734d94bd02a1f19cca90be7642822b636369c51dee441a9d2663ec896e1d6c6d
+B = 2663ec896e1d6c6d
+
+Quotient = 10d18159e75efa8204e325e6be830b4ee8d2c07419e8276edeac6cc286488fc0c888300db3ebb5f935aa82654d3b932540f0093d1880e1d6d
+Remainder = fe9b6b8ba7c30f8
+A = 731aa6e2fb2ad1e1f80d7668c7b0642203af24af382abd207a5ffb588209e8b5caf953e9a96b478f39ec03a397d1433998e3c95e382d93376d80cf0c957788e6
+B = 6d80cf0c957788e6
+
+Quotient = 450d1f4a105ff8d1a3efbb12165ca98c67ae70404472e4862db479e03313b08783ecc42104780c9d57df0ddf19c5b4547ee9ba52ea82dd0c7
+Remainder = 169e15b4d5aa180a
+A = 902bcb1904b80183656dcbd51879e2982e2b46a547c9ae3119ffc12c6a003e4321b519289b7f22fad19d16480182d1d797c3045b2d29dcc12167f9ce5e233d89
+B = 2167f9ce5e233d89
+
+Quotient = a426f71cb3d75365cd076a6c35c10765bbc3f4bd317fb83a70083b0f7dc43a4e0b95508e60dc1dedb780e9b485f4f7a8870960de669b73af2
+Remainder = da381ae5c97a506
+A = bd59dcdefcbaecd9292c4c3685fb87d3a94c0f0ed01e43e63e1f36fb65d6c5eab3b584f3d1f76d31458c9f6b4c69869d96e943c61df102771274c5b4d821469a
+B = 1274c5b4d821469a
+
+Quotient = 26ccd4b7be090af22221729b0ca51a5e66435c2d33f8d88f94405f6c0123ccbbbbc8080cd8448a977946019ccbf5d267ac3f151ebe686720
+Remainder = c41f9e7bf20b376c
+A = 212dbeff03f14b5825f0d7cf8a7501db21b60581a01a26d522ee44e7fe69545cfcaaac64dbc76c7e3027ac39ddc2d80af6f3fca1824c6ff6dae90967d9ab48ec
+B = dae90967d9ab48ec
+
+Quotient = 801df28f4fd987b4e980760f4f2625276a2a7191d453095c82aa98a2253324ad2873abae70cd98c28ef3ce102fdd53469b9f01889f3ba8b0
+Remainder = 8e435da582e59809
+A = 48341b28138dd04807e522e341f74ac46b0449fa45f96d7fc586997c056a21eb3c399752a6a6c023509f042cf9e879f397a34af9aa2ec2e8904674f2ea3ff739
+B = 904674f2ea3ff739
+
+Quotient = d3857b72b70adff9b5dec3cbc63de7c90ccd7aab6595339b2de39bd6b9789045141d224aa4e6bf9a06e017aa3edd00e716a771b3f5b97771
+Remainder = 14135c686d2e9f70
+A = c1cea45dd46409d5e24fb7ed7d849dbb079247af2d312e01083754ed07f65f090e4dd50d23a973488702ef00936c5d78af603ec0fdf03dceea8f939c922b1e7f
+B = ea8f939c922b1e7f
+
+Quotient = abe20c90896e261e7d31bf40e7f3136d36b0b78006d12225a4dbef6aaf2062b609379eefe7e5af5bcec17126286f196f1330da8477096763
+Remainder = 230307c44cd55896
+A = 19a637e4f3051be0f7c4d35513bca4a91ca9b8082fe3c73899b70b6805a7aa0458512495cb6ee1ade55ecd5851be1dba96d65202f06bc7122633a0d905017545
+B = 2633a0d905017545
+
+Quotient = 5ed3765c4a777a903e182f7c9ce39d19c01460f389b904c3ce1d3525edf25ffe7dc0f4d9e24f0bc8b7e01bef19c83e74f17884bd7bfabb2c
+Remainder = 40f5346f8775e20
+A = 546578393e914be30581e24508a33f6560a5805dfb1c675d1ff1d6f5eaa7ee638b9e0265f543413e04e3f1f3b0895dec271c9897a48d9ce9e3d7df32c15b75a0
+B = e3d7df32c15b75a0
+
+Quotient = ed73a67932746985465fb0606fb0e81595514f1647c911c303d4d31eb0306e3b2aece07320f6fea57a7071d73150591ab2a82a7d53968a81
+Remainder = 2e495a881876da00
+A = 8976445bc318921f7e12c8d4e8e50596849a1503b5efb65e939c291de136597c05a1fd16137f0bbbd7197df943cd612118d1e55a50ee097c94331c1cfb1e941c
+B = 94331c1cfb1e941c
+
+Quotient = 5dce24b7a16d847b0c43cf365ea20bee9679fa0e8732813e827cf6ef3c9bdb7fd8846b5689ce8b80a7dc0dd05721cb06d2700aeeb7ff04d6
+Remainder = d8ead1ae3126aded
+A = 59b99e5d028e6771d27004bc19830a5fcb347f7ae04c0ba7c49130bfb198c5b16821e425c979e6d2dddc14889ae58475bb52c6cdefecf2a8f4dd6e462bbc8f47
+B = f4dd6e462bbc8f47
+
+Quotient = 170e10b399a4c5fe354b536fe59d53602102f215d5107493680ab6e181f67d75ffd45bf49ffb23cf9269b856156b5ac6b1c5def4ab1abb18a
+Remainder = 57131776937c5df9
+A = aeb35966e2a616762768b7f63ce3aee5e81561080617bbabd7846b3ca03fafaaef83dd05b8d16cef40db0a56f3b0ef6eca5e236681cb57c8793dc0907d9aa30f
+B = 793dc0907d9aa30f
+
+Quotient = 1acdb88f047f9bf679c50ed67ba01dd24dca92103f8ea2677215b6142083b64f9fd2a365499dc8f2bc61e29fa176f7d76b55557fa58e34f9
+Remainder = 5065b726dc6b3758
+A = 15a6292c9fb66c6770a8dbc6fd431d2a4b57338581f78d0860fda90182cca563eb2272a79fb4f5a6fc72c90dc23e8a95713b65988b5b3f9bcec4f0466c1c47cb
+B = cec4f0466c1c47cb
+
+Quotient = add8127c0a27c961203ea0351aed5b3c75aa816e9c2684574e55f55c7140adcbf69d2cff843e5f53c157bd60b43c45c8b6658de72062fbba
+Remainder = 67f48d3584cf4fe5
+A = 4e8938c8cc46d34e3369c5d8536b18c963dbde56020678f77cebac5f8777e0afc62ca2ba4f533cf6cf7561bdce77b6f495bc1b05f1416d1173a6a288012c7c73
+B = 73a6a288012c7c73
+
+Quotient = 688ddf883a0bcc1ff9bd582119c2fea7c059e19aded8c048390a1d8fd7d769666987418bbe0d4cf4b67009a342958928769375c1c0d558acf
+Remainder = a5356d04b64ee12
+A = e0c9e32056977aeca72e229d83f0d320fbaf5cd8bf3e033289f46101c75ef59a854982f33bcbcfd200034e8ff439d669a03fa404e7dbfea822664967d67dd5f1
+B = 22664967d67dd5f1
+
+Quotient = 39d4d94587fd1445f31457c275fd6294fcb69ba155e7da3e6cfef38ed1272d6c95755bca49007ca62cc101b038d264876f18594b8fd4c329
+Remainder = a34980d5046e2ed0
+A = 2efcb12fb55c923f5c6ca7ae076765059e15d9e75240a6e5fc3db92de184143fab1934c7450c3a380a9851846c9f43d67bc199a314e82e72cffee795d695f82e
+B = cffee795d695f82e
+
+Quotient = 145ea82eff186b7db4b11fa1514674fb9d41c698efb33227eb1abbc4eb78bdb2a280c0c4c47adaf4e010a4336cbb5650becd1ef544e223e53
+Remainder = 36052bba2867f5f4
+A = f6a6c7e33fd4c664652d696c495df387b85b132cfdfe34bbd35759477b4a3c052f610df57e49e85720489e4bb8dc923696400a4a28dd000cc1bd491446a50b96
+B = c1bd491446a50b96
+
+Quotient = 35d0c9d870348b113868282aaba22b21ec87cf421519a23b288b150604729356f924090ba038d7400c0ccd4932836c65902b4d3c46a202a0
+Remainder = dc8c7d087bf24b0
+A = 22228c8a5966ebdec64007704a373b0596ae702d62e29e468653b21a890ace2f02c27f26b043f48495687ce8c2ca8092ead21aa250ce0f6ca26129615a2432b0
+B = a26129615a2432b0
+
+Quotient = 52fc995a486c4bfd17ed9722948e9ede1c4ac2fe80e6bd7482fc47944c4337a185a506a9ca473d49073e1b813ad742f19b13d57914888d5f
+Remainder = 75c703f654ad630a
+A = 3473041ae301dd2806da30dcf06b9c09600086d6873cf3ee9d5a0be638849afb56bce2664f797de4123f6f8fe3e12acd32e33a285bb7f493a1cc13a7108327f5
+B = a1cc13a7108327f5
+
+Quotient = 1744946730b2789977620f2e7439641125dd338d1b31fc50813b34dea70b83d209330bd17fd527db9a402ad9752c26b8823082ec9971f4ae65
+Remainder = 453a3d59303ec3c
+A = c0f592d83649bcafb7e2de1a8a71fa863c1f51b595bfa638c8fe30731c6fca36da975b6f19c657e3ca29efff6febfb311c003ec68189998c084afe4979b5bb19
+B = 84afe4979b5bb19
+
+Quotient = 468f3eece20aa9d6473f3c559760793e702758a3d9cc19d7817216392c7cc7c3968778cf2fe0c3f0c1424d7512cee19ac0717952f18aa287
+Remainder = 5904e71034e3a02
+A = 1f0c99a128c757d76ae6dfcd01012f0453c8f89b00476ec46321ecb872f99a48b4da29a4abffd0bbff2b727dfa182652ca85350b4ce100fb70a6a40ab6c41d95
+B = 70a6a40ab6c41d95
+
+Quotient = 12198913ef16c1cfc7c1be13f1cc5991a61ff74935e09f0c46d26456b7cf2825403b9851d07d27e0197c1fa2ac5e32e836979a184f14cd94a
+Remainder = 33431c3df719f946
+A = fbfbf5494a9c5384c7ae3df6c02a5e1f9f32dc31cd7f437832696bba164bae1a9d95daefb8bc08e0e8e637436fb747084460697b5ef5ac9ddec06757dbe61aea
+B = dec06757dbe61aea
+
+Quotient = 376c2f902566d83c21eb7c3aa3a6fa0482ed52c253f67f00d5b915d0183c2d9a2891c2ff837fcb426a4c990c48bda4f90e0bf69d13558696
+Remainder = 31540f5e05e8b4df
+A = 2527f8cafaf7e8319ca53104229199188ab1ca5fe592bde8ecf605e17ca6446414e06898a85e177d6985b5cc6d4eeabd6b222b5f44b4fc1baba050665c090b5d
+B = aba050665c090b5d
+
+Quotient = b8fdd5cd7b2d9295258bd99e2780921cb2ea70627a79088039fc3ab1c62bcfc6307e86db4a7803f18e5339f152063f9e41d370e97b1ba2f5
+Remainder = 4ed4f2d12e4f4ba0
+A = a25bd113c5a8c67ef65aa80f1512de43c9441fec0c41250048d29c406fbdae80912eb3970457d621c552e3af7ef2d6bc1b5448e7df5be724e0adf6f71df7eef8
+B = e0adf6f71df7eef8
+
+Quotient = 5421daac8cdeb6acc2b8b0dd85b592f255ee4fedb3a9e90f2a5bedfb0f9f033d7c562c96958346bcdda4664c67848b9d9fa7d3892bc4e9af
+Remainder = 7e5661558c345eea
+A = 490aef65c81b32f5df76dd58decdec3e3f73bc1fcbdb6aee0c93cd98725056153b572509e75d2cc4b042bbeb0a77d27fbca1e39efbc765adde41a7dfc5c3576d
+B = de41a7dfc5c3576d
+
+Quotient = 156a8a24e7804c5f576cd1757dba44cb4185bc13cb56603b54ee3b70fa35cd98db1992904d4f7d99a63b3a486e6fb31141a9d39cc0301f897
+Remainder = 29e9c1627537e5a4
+A = 5e4a10e772de8dd2c96acd714f7d3880ae8ab460095a01038f3aa9b8ac8165889403b42019a1e70e0e7f32e77fb388eae3579dbcb690729c4671868b0526aeca
+B = 4671868b0526aeca
+
+Quotient = 1b0eff2ff0aeb2c02ee3cc9e0bff808f4d616eb290293b13a6b58a84127972bb417d55e1d001a9720ec72562ef3ea688e64c4f32c7e26cc87
+Remainder = 664d57c57d4952e
+A = 806b8504abfbeec4d5923f83ddc071be88e11c4394168854448df96160b95adb1fd9c288852e2f3df3e36916ba5118815ca2e83a6a7d9e074bef9c961e2958e3
+B = 4bef9c961e2958e3
+
+Quotient = 2e363b13b0457a0e9effc2d7e297df78f35e5d24d0f8ad4525b573fb2f66f374871291ee8a8ee3d15a823b560156d474c678f79ee480bbe4
+Remainder = 5ba8f49e0ca36ab4
+A = 2e1bb261d98ec405dbb068daac5efeb0a51f08149181864e9dd6bf6cfcb617b76d8facaee2ef468807e0403bc550d58e8ad9e5cc0f094b02ff6d0277fe642f44
+B = ff6d0277fe642f44
+
+Quotient = 149a5b1a81b9e47ed36be76252055bb202dc25f8fe7beaa1ce59c279b32941cfbaf8fe4555867850b2fba43b10b74534db82398320f9786d25
+Remainder = 1ef621737e81780
+A = 63de892cf5df40c98de78c755c99e94e0e76cd5dc0b49b8856fe69dd0abcdc535bb1416f0d02b4eeb54e8a939cf7ad4edfb7de4dac87523e04d8ea8637e50920
+B = 4d8ea8637e50920
+
+Quotient = dea8a9211974758752d89965eeeb93cc616f88ce757ec2809f829cbb8d99b4ffdc3f0f643779fc5e0bb53b5273a5b15965f4a364863592f
+Remainder = 9ae7de3edb6c7edc
+A = acd5cebd069f7febc38c318867ba3a562bbf8ea9b19a6b33538ba107e49439f8ac6e880c6267c29b39141dbe2273d93062464de307efdb7c6b738c0bb282c3e
+B = c6b738c0bb282c3e
+
+Quotient = e9149b347cdea84d740be70060b239af000c4336ddf36fd5159083b795c4763588c87a959df0104212a04cc928baf60b0ea72e8cccc6d477
+Remainder = 3ef5c6ee67e6f5da
+A = 6ccf1b8b406e6a106160e73ac4122a04c0814ef5a47708a6776eb52002d52772d3fce3fc05398172bba191390aba925bb23aa1eee626410877822f27d1e3cb09
+B = 77822f27d1e3cb09
+
+Quotient = 1606c2fe44cd0b780ee474a9c7daf0b2bebf62db0ba8ef5a99fe22036019890a4c7dff73e678965bb0e2a6e61d00a74a1d33dc1106842115a
+Remainder = 7cf920ba2897f714
+A = ef9a3983f26237576311a871e4a3df0538593dd0cfda58ab90b889fdb35c700f7d158abafad127605057ca0532e846992c41ec06902ce58cae0c1fe238c726cc
+B = ae0c1fe238c726cc
+
+Quotient = 8ccf17de5068451fef1c2808c62e19997c7f920d5cc0fde1f5a247cc57c6d730df553cf33094b786597a343a0ce9e4bffef568247e904343
+Remainder = 2689c40a54df34bc
+A = 8435babd279b7a3833d01988c58005d4557f7689ea9b7168ef42ce2b31a1a3c32a982aff654f271a651085335496dd826ee4b3bc27f58920f05dc6676e51c662
+B = f05dc6676e51c662
+
+Quotient = a9e78c48c779140b1d15843089765ce9ece3855537ce88cad3eb7aa7bd6ec72df65adacba2bdf6c491066406bdc3dd3dd734a70e93eed958
+Remainder = 53da0b15ac079ccd
+A = 78550cb7b58b58d6878b615dfa25a5b90a1ff631740e631c7f8829962446903c686c810c46a1551b6c1f7a89ae898435bb8e36d1bae24a80b54edbf4bbc9af85
+B = b54edbf4bbc9af85
+
+Quotient = 1e3b41304ee07f6baf1ca061e0e28a3740991c6ca2749eba70d3ea1f9cba8adec45cb69a31cbff22784a9e056e884713c0812e8c7981e49328
+Remainder = 3d051148ec43a72
+A = 76b9453d315e7a9c592e1f2640f5b6b90a65e7f2ff8ac24b9b47e35abb76fa5d303be6d501b341a882bdd9d2a1c81a9280724673f87fbe9803ed5a2e7edaeec2
+B = 3ed5a2e7edaeec2
+
+Quotient = 1921410e1a538a71d33d9c5de95593fada116200c399fa7590ebc374282570477f5f4abdd5166784ccee9671a1a23b96378df62168049f6b8
+Remainder = 1a1f4aeb882d7546
+A = e4aa84f782a65d376b10e7789a7d56695885aae274db6cb37e0a34414397a57b4a5f76dced11376af5fd11d31828203e685861a6dea239789196fe73d0e46116
+B = 9196fe73d0e46116
+
+Quotient = ed2afbd2e63617a651911017d9d02224d521e99275ab642ad1a941827983b17ef0f2067b5405b20e8e97f2ae6099150a1989df94276aadee
+Remainder = 4578107045b9cb81
+A = b547cd987638ff7e3c30fec9b728bc10c3b8cf16e7040bfe0fe9a26e44d2898c4c4d28ef525cde2b4007b2ffb3aa80fc4514a99b9aa2e112c3acc56b72ddbe9b
+B = c3acc56b72ddbe9b
+
+Quotient = 56181509251931afca3bb9dca21eedd6ed4226be67497d8d1bd0ec052af146993e7358f132e842f9b6c4934cf1b4501f5d6c5912e65c8d3ce
+Remainder = 1b9861df51429a6
+A = 32988a4e0769a5aca200f6f6f1498512e13b4904a9a311cd8a962fdd688de0c6e50b04f42cdd2cf8bf9b0a6922657f9ad195773e1250f85509672452618da9c2
+B = 9672452618da9c2
+
+Quotient = 1fa45bb973dd1d2df0002772afba55284a1e41f6aa4b0d1a6c6a4beb8ae00b52e88a9889037b8bfa9b7ee38036c57b713b48af156c3f9e8d8
+Remainder = 2525d52ecdec8814
+A = bda657ddeabe24c82c883e85822941bf64448b7cbb368468078101289b6fca36680b3884e35edc1fce5a5cdbdfc11359a1ba8ac0785c09ba5fe5cdbd30726df4
+B = 5fe5cdbd30726df4
+
+Quotient = 63e21f5568d07976aa81a2690b9e81b76fc3291cdeb010d1693d0e80191186815c7b2f83551a5f1b172640425d4733f06f4df1b2c8a7e6ed7
+Remainder = 14781a368471ecae
+A = 9f3dad0b3b56de15ac46cde1d79aba6a2f3b34d685cc810e9fa3f2d865bea4afb480d58653630319a258e9e8ded9be93cda3bc52b80a9359198221221724cc3b
+B = 198221221724cc3b
+
+Quotient = aae37878db016dd758003b85ef52acc7288b7b74c4723e3876a710baed4751d3be2ae49123b248f2b2c55a5be702c4428b1dba9b8a6ae8a9
+Remainder = 6c754d5c167e1228
+A = 4b93a98eb7b92cea0a4f5c2223e77abdfbd332b39f295b4ac40f71625d88e4add7e482adf3010082d8dd8854cf714a54fba0887de87946e97137cf7eabda038f
+B = 7137cf7eabda038f
+
+Quotient = 9881f551c4b7e67611f37df29e77cbe4e2d9fd5e17b7da3d013d6f3d4312e53dd26dfe3a2a12525cfef1ef81e6ebeeb7ef8fb4f918bf15ee
+Remainder = b14595005716bfe3
+A = 7737f8e7337160c14cfa8411236ca0354d8aeabf389b9fc4b14bb2ec3bb68286f3d82eb394dbd8062862b955e9fc8e86eb646317d1315d09c81ef51b30288cf1
+B = c81ef51b30288cf1
+
+Quotient = 4c8519d4d85ccf845fc5b8f31c27c60f0893ffda29ba86e8a3fd5fe67de5d29cb29362679abde996039b8febda2ecf71f6b9e1c1874361464
+Remainder = 10fae644af084f8a
+A = 900f7846e927760d9986894de6489e53cbbcdd59f7707917e7581422508f2ce79b77bd2c56d964a41e60baa927ca679faedcd9cd8102dde91e1f583ae834b092
+B = 1e1f583ae834b092
+
+Quotient = 16ef17b40bb73063f3cd0929cfe2405ca0ff2d3d426ac05f8a8dfadc85659105f7f728e113baab59247c4c7936ab975c08d6f1c72c12c532
+Remainder = baff11e6961c72e3
+A = 130b212cb6f3d854e4f17524953fd8592f5e59dfe92fc7d955e2899d1dde1ae4aa20d749caa349ca8d1bda7eeec2310532a7af54660e2a1fd4929335a1623bad
+B = d4929335a1623bad
+
+Quotient = 1cdd7ee2eff733b83beda5b862673177e2f2151ee0fd9ac0bf0ec5b7e05516f1d1b59ea754b0483d0e4bfb7668bb99117907a58a8ceb78028
+Remainder = 29e33e0c2a515780
+A = b0131ec2c1ffe9a523591a9453d2fc740bf885e7efc1a0158905da1e646745ef1bbf39b406564cb3da2f842bee307b36219bdee5991c969d6199279c25d4e380
+B = 6199279c25d4e380
+
+Quotient = 20bfcd06f9c54c537ae563e33dab31047aa30a6bc4e7eb0902bfbab3bbb7e65df442c46625c39e08c88310116348e9ebca2450ab463727f90
+Remainder = 11d8f2f6d4c1f55c
+A = cefafbaa2990eaa88184162ecb118d20e5999e5a8fdd25ae7f6248650ea74a8cfb92c58efecdd5d31eceb618f1596d7a6bfd31d092cf86da651f629975faf91c
+B = 651f629975faf91c
+
+Quotient = 37204c5735e4ba5e47e845d8b652cfc2b1dc715abf21ea0ecf5b1c6c8b9e596591fd7a7f41787be1a028c147a721ebb891b0abe3bd079b589
+Remainder = 1ee700ffb0ea02d8
+A = ce22d36b3cb913b32bd0e25cc14c7270d3f7b8e600a9b6732377f846adafd7fbd8a09d12fb7011f2283d988fc29aa25948dd4a0f24512b4a3bd460ee19887d35
+B = 3bd460ee19887d35
+
+Quotient = 191051194e4362bb201f5471d4bfaf92f79b6fbd119ca3dc1afffba334869ed9f8acd14fc42a2d8f616d652610a483ad90f5140e9a5ca4172
+Remainder = 74785b6874d8fa37
+A = f3c79f9a6af1c5bec72218d969620149afe8bf068cf7a7aceda977076665bb5a2c30729ac3aa976c9be379c6a5458f1501db8802652ef69d9b9f4f097027ddd9
+B = 9b9f4f097027ddd9
+
+Quotient = 6c46c17fdb03d192f75d636e1e2ab4e858d55f0f205cffd75550c4347726b5cfe036c6c901782cbe5a04f1985d9fd1dd39d747d25a6a7a88
+Remainder = 9a836be71a24e72e
+A = 4f6cf6e357b4985442a25b5c84e2cc0a5e685e2f5ff71ceba439b81f4123e16db2296dd4333fff23eea92bdbb812daf1d27c721412fa9847bbc9a0bf08879b1e
+B = bbc9a0bf08879b1e
+
+Quotient = -4984390f93e11c9a77880cfbe157dc41d43fe901c8895ac5091c5367a77370b16d42e8cc260058adf4d3fc8ee8cc6c0099804f4c319f15561b0a2b1caa7d703db82a726c9eab569c
+Remainder = -19374dcf21822188d720d6ec892bda2c084e8af84f38012da7029a3c3660c7e813fd4f7644ca80373575ff98ab6d743e939269c51bf62e04f
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 330af318ce0ffdaa92448777ed117de9c104e0f975651322c8e01b1c470f3cfb7a78b11f7daeea57614cec37d18b89155f19babeda0016171
+
+Quotient = 1a56f7d6c06a316a9a466319cbd558a99f06843782673a54775d859768a61933de3fc410068d00d5f6ab13fafc9228fd40ad41434501f8827bd7461441140eb6977f18d102d446
+Remainder = -3c3d566cd48a909292be2ce30f88ebb68e9122a3359f52d1d7b0189c467b829a9f226c0b64845715020dee12d179913ddb7f17da2db86d854bd
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -8e770450768d07ce20ff8f5f6af464b1ee5f1d0e8faaf927a19d3ff801f6089378133e822b8e63cf29c4c9ed721adfc91d3355a3c7bbde77bdd
+
+Quotient = 42131cf8f52a6a3f189697ce402a8c9439bf05cb3dc1cf8bc49dc2f07cef15b3bf0102c941b5b3bde6440abc6eacfbf77ea8da06ce932fffb226b33dedf001e9657464b0f06
+Remainder = 4cd483574fce075404dd22072abe61200fc455c15b382c7f2962ffd82c38ec1e2c60f71267cbc35fcf77fe1f9301d6b5f884f1c416304aa9f4d4b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 38caa64e74b29a7e9bbf341edbab112a730b17103831a9ecb70ef077e9660b2dd1fbf71d7f6bb4cdae2ed7cdbe9070ec9fde996c91b9bca5b83450
+
+Quotient = -11d6883fcd705ac97cae5bb7f8a2929d6f636f4f232ae9a4af9769183dfce9a9296fa0714c3f4fa1eea467a5c96a484a59d0cdd87496b9398e7a818daf89a58add3a39e80
+Remainder = a6b7984fd80d719ffe2e6eb756e4e3bd7ab51f6088e04ac8fecdc744b0385294dd23b5007910109abf40cfca814c10addcb5330e422b6f5eab6efa2b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -d25d50f53c694cddd56aadda2654ae5888603b39cdbace93d19c117af5505750aa24e615f95446862bd693f5b444e2a876eb2cf49f6c7acd007eae02
+
+Quotient = -3fa898b02c621915f44b213ba4e80b8e85c7a2f4c78df2bda7d99494bbca3eb2d9354965d83e1c9001f10aad9b3f3ed837a630b329f5a4b28935158fbd9d291a120b08
+Remainder = -320d41a3875da2e83ea9a83947f5abb1a7026c84020e983381722bf7aa87d5987ab088cb2c37fc3781c82c81bef3263fec560023e236a747030618e9d2b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3af2721aad4b18db27842b5e539d8cada9dcd7ac4c5b885065dd2496a6f76fa73c8a51b239b5c068ea6feffda22d8ea806fb488ad5a94210264597edb40
+
+Quotient = 179307c3e14de14a744d082825ed723b996a4e15f156ac473960583138c43f4275b4436c50ef8f21a7b450a969819b81c15bc355fbc5fb55cdd8e124d931d142851a
+Remainder = -9c8eabd36a25e995c1811b79a2a0357f6aeef4477cac0ffdd130046cb2a647f928a34d91d9b489d394965719cd58604b957c693a93145328e5568d33d88a9
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -9f2d3da1da77914df66bc889a40847a0d705d4648a11f282e09173d170e96d84b5a45092d995318fe7a954b54b88b784423402519a38bb521e84a4f6c5485
+
+Quotient = 6c0f316406afb4cc2aebe34f7948422de0b612a02dc47f4ae59419c579fc465ceae1980a3e524fdfdbdfad4862f168a9851664688c9ba01a8bc1ac156a6276643
+Remainder = bf52a2fb6493eac22fc8b334ccd8e8fa347620539d9189d535373f94503310a027c5423197c7279bb51ab8c459e27f548d57b55740320e80b753290d077aa7f
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 22b9e55639ad3ff4f071a49c8bba6bd9047e162fb31882421db8ec5ce46f28fbc35040bbc74ead5a948c47c43e9c7adc32fa52046b53f12b07b5224e0d8e93e4
+
+Quotient = -1008fcb6894d8c411905136fb3e05b38ec5d8df35db06379fc2d6d3e3579bcb34fa6e021b98b899d9d082c111b1a6ac8e50418fcd5968ade6aff8828d8e4777
+Remainder = 3d7dca387b00c677d855fc4af4d86d86331fe4309929039e828765f0937990bffa964d3ffc5d4f2f4b8bea978329e7cedb847c7cc341ee52217f903ddcf9446ce4
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -ea045323f406bd7ce25b3ab4993b5f6dd92ca80e3a02607a862deb13470ccef229fad67ae958cd87fecf4f08d9609595077d0d1360d9fe48c4566e237aa877e7b1
+
+Quotient = -42a50301031962754ebf9c4b1e125e6df3dd40ffbe09c044b1cf4b62ffb4f92d298b05933a450bcef65e86398da80740a610ba45928000a5c12d26e9f6a4
+Remainder = -c5485b82cfefb3f980e0fc7c6cd89b1345a8fb942299bdc36ed4ff8916016315a0da84ca0ee2824dce3c7e5ed49d517c45173c9c8e30b224940af6cf828c73db8db7
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 384e523d5a687bd1a90101e43334894b6a27e8c6809a8bf5bffabc34d558a8309997dd6f2a3b7c1a63100dcc0b6647b444ef7e5aa4a9c52c7caba1ebd096c3fae6f95
+
+Quotient = 1054439945ccb5bc5461fed04e364c7a36d5dd2c0428872676debe07654b2ce31e435a90c81f2bac1032143acb0c49ad101398feee8426bf270bdc0229
+Remainder = -7bf919e14b2559ab82b3c1bf428d083a4c851a7a1fea44718377e9e945caa5cf48e0b1ad727e251bbb330292402a75ecd96a56db4ad07146533a3ab5a717d0a25a3a7c9
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -e5cd83a644ec86b94f5e33d4dc307a2f14ee8653288145dabb2b5f894560c164470197fb9e37749656f47df343c245258627aeea17965fea10a57336bdc6b4a47443492
+
+Quotient = 62675274798218da426a54ed7158f8f737b7b3c328a9c351371f0cf61f41712f9b28741f187eb635ce45866762fb5fc5051776151d202e2556c5845
+Remainder = 1aeb5d1fde3c259917e430e6790b00484d0d9508391ba6ebab0f6299190d4b34f5f7d8ea2174974471a1e28ee2c15e05da645db971f699d5d0e80569b7eba7908ae579f5ed
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2622350611b486e6be7a7c1c073c230d604d782c2696038a3233ebcc3f01c6a711969094e47f49e294f2c5bcd04fb1b7c0934f19bf6e7aa519a8d4ec2c172ac59cc1a57b26
+
+Quotient = -12970cdd96b92c37787971cd8dd166999ff241be881eb9543ff29165a9c1a3beeb38b1910a5724ffe2b73ab95ac1ca88d3989aa531374d4ec6122
+Remainder = 627455cb555398150e5b4c1c53ee16dac8d80d9616ed1ef40031424287f8028a9cad1a10bdd8430f6f65368cfd00390c8d4355aa5ecdbd1ff0266a1ade235f33cb5309446961
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -c9dac93cfb7abaa3fcde359e09a92ab0b5c06359bc09ae9bade3c6783064dba90b233b4c8d5c6236a13ef96c7a223e37bbdd931eae61e845e5a10088f75b3ff5f1158e833b15
+
+Quotient = -6742b3871dece5986d4e219bf5f43c101da8896f247521fa286fde696e0b71ffeb3b6a3e4f33710c9ab150b7a1f747cee76839c5e7f2509f62
+Remainder = -203b2d6eec9d485f7b439fe9d4c640bb31170af38418faf4daad577c30e44ca06efda55ceea4fbd959b3809fa2002b6e2cb891decb09334ed89ac66ff05502036b2155ff62f8aeb
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2457088096865cd052e9cd9349c6e5e34e46c89d6e860a36f8e2a0bb1e5d983e07d05e6f6b31edc67e4793cb4d40979c029c80a13e654b66c8acf6b894f615a3ac800bbd09ce020
+
+Quotient = 15eafc416460d757d0abbda8d094eb535262a71dd033c25e704a6df54265b6123247e5625da476e0c220ba88582a1ed94265135bf8bf1fb1
+Remainder = -64ccd9a0ae0b0abcb5507d51b2e6c8e52e67907474605c439796febda06eabd8a3185fdfc0bd088cc49fdf564b5b45890b07269c15b1aa2f993cd9872b97aa6cc37dea2f03444b3ed
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -ab34d3906d8a2b806b22c73d44948d703c1e05a9337f75cb0b5df5205c5e2d23f8a92d8381372f9398c9ac2f7b9302b83e48b26512ccd0b06e6b8ef1b930ec2678d71e2eddbf7349e
+
+Quotient = 3b22916d9fe3145fcc3b8872bebf5aee4e14235f618e0aed09199852c6bed80df39256d8407d334c06f4479f230913370b7d451fad99d
+Remainder = 1b02a7b97f9ac1f6306aa00fff0e59f55fce463ffdc640364a950df29474e08b67cdfcec0628e973d42fa1e4f98e988ec4c47e4915651a1731b71d5e36a10a0d1b3420427dbb79ba7d52
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3f74cafe9ab0c1b307cd7571fd442665fa3205fb2f45b3811b92d1d38b096a2025b8170663a29c52ca84da102e62048e583fba96a594c0b23952fec587814857c25221ff2cd0533cba6d
+
+Quotient = -12ffa4b6fc369404968911c17358012b993c18c2ff34122e06f450d3d441926b5f5638b40efb012d76d8bcd3c0012d0a0ce5d55c596
+Remainder = 64548684fd5f6c816bd296234740a4eed772570bd4a48852462f9cddf14f1350ce7c7c6a58aee8f66ad7df87927458db09e3af08eb5376de08444f35e5171cfa0992fb27f70b81574f6e8f
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -c58383afca9e1c480ee75d3cb6b0b99ea42e827d39fc96bab6b0dddc97e3eaaaec02a74847f9f7d49937f5ade3580bfcd491990737d172d4079437067251ab403c36a9826e974b113e2d2a
+
+Quotient = -4964410c2b038573107b0151b36177cdd62495e0dbef536b59c8aacb8836bb45e7bb014e5022360621e8e82a273d0d462b8eb6fc
+Remainder = -1250c42f8c9b129a5c477be446b86356edd1b19409d362c3a5fb5d59c30f1c3fdc1424a88a0d6ce20bae885905d98c8a5a6495931f73edf4c60112ed78834e3bff6de3ed54c867fbf16a1cd53
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 33212ef4a8e80daf1049ac6f639f8e1990142ac32f7ebc97675ec90f8eb1a2814dfdd295ae67317253d0187ad33f3932a3a7efb056d0a3c87d28e64e23e9f1de751ee6f0f61c6f39d08d72f0a
+
+Quotient = 17f77efddeed52ef2e423bc2c10d2ae15c97384b766f4108474964c2a44789e61249103d9f5fe00b4d612772dc6ea12a42e395
+Remainder = -1ec95323b7b95169d5ec0667f3cbf683e98c15dd0fe44df4ed9de9586e43f1f69337e41a6d11d889452665dc0b03cf8d9ef2effe0b350eeb9f6468751b8a2c42608ba2a33192b770cb62381a966
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -9c91fdf2dd1827ed103a102db254630c278bf8b47bb12a342a92f081acbdd8ae5f5476ae194e24b187011ac25b19fd09e6e690777f9d3efb6b3a32c8f5905e1478a27fe4b1adf17a70abb4e7571
+
+Quotient = 4f5dec525ffc737094f40d27446ca0be5b7a2aff02d51d99609165c4cea0dbbc1d92bc0a8680782b616c149bbef7f5ca912
+Remainder = 1bc84ce56a9a0c74962681c02ac927051c81f3824d9f3f0f91465df333ecdb449473d9c26ae3abb9509add5795e89ba5eba6ec7c89b114c86e6991ca0c185b34d6e66925a14fd82809dbc4936d273
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2f47be01e6dc6a86097676fbd472c2af0c83a2f743fcaa885e44fda7e9f350e9fb7a8cd07fda59ccb7963f1e95e6a1236f5f94939decdc85afc0e523c711b24641c844cd3113c17fe35ca988ba407c
+
+Quotient = -163cafed5bcfdeda88555f30bd4cc2da2cefe2bcec9a7c19c36ccd04a45121a5a0dc28d0bf6ab7fa4b78933c47a5d5286
+Remainder = 93f856077f5b2907cefcddc4d767ffeb0acb7af64bb9dd8a15dcfdda6c244c24fb8404ff9ea2fe1dc337faa05930d33cac4f61e171d0236e222374cb3da76396ae1329a407fb4ac652fcbdc568d0fafb
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -a8bfcac452a5e48fee9132b73bc2fef771450143ab80aabd8690ce54c9b52c2b5a669076a7a35fa6d926268077bec6d90b722b5d074f28ce3843fb0147e567c45f4e91a11416c082762e71b5c6129c08
+
+Quotient = -617dbaeb8c6f9d584e8eae923c872048f9f9bf039ec6b50cf8f09c061bf79acc3311b37c2502e560848c05ab316fe8
+Remainder = -1ab4613767c4f1f7d127e848f2bb7c72a3a9e1dd6173b63198b80d3bbebce6a31494f19b53ad9e3a77248e6f9b26fc59060e2759a20dcdbe785297bbd912da9a1819527fac550d64bfd20ed1f96450c30f3
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 267d9397138fd0374a7a58593d41627ba1203a646ec2c04997acf607e9d217b8f40183d2f9304447d6f7e727a476e636ded4697a5ff30a9ae3d249baf97969658209c1b32ddc0edf920b0b278e9b5464313
+
+Quotient = 10ad85703fd51870306c5e36b51512341d6d39e0bac47a03732787b2f62e49c76666f7f49b2596de6cb5c5b2f31b
+Remainder = -846b4479713bb19ebb8c1f1b75d2be0f39fc1095a3d2ca149b5565146bc19382b86e5ab0d098ab1fca1ce701d582400190fee34b602845c3c0c498925710f0b9e3af2412ed5ead1fe03d77e9b2b407ac83823
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -e0ffa4e120f2f46fd1430b6022fd03f71a22f9b120f8d40e901279be235b32d94760fb8c2403d23cdeb728ae73e2b16af7322d6ebd5f5673187668c99805e700f1e997423886bbcb851448dc1ed4cd66d6598
+
+Quotient = 41567bbf616ab41da51108d7edcb5a8a4877c5a8663b3aed7559421b1fcf4b535a54989efedfcc935b3917fcd
+Remainder = fc026e554a0821e0d36b796fe6a676fcd7383a55fd6158d78ace4edfc3d8aa87c65f0eb41baa2aafadc51218b0562ff4b5c9b17bbe84afc491d9e309217a5138ad48dd51e1b1a9aa51d69963b608ec47d63fcd3
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 396e9b45ce43d3f89386cfad8ddef4b483ecb5173234530c67447ab74629d246c18b9da09522c77f598957e3fd2a1c0c9417399912fd547fb1023ba6b90d63d223bcbf3e7ba155e51bba7e8635aa5c39d2b9dbb8
+
+Quotient = -18f1f395347ce8df530d9330c61c0e30ac9531b50a0af2ae7809db1258285c15ba7a436121287990fcdbda2
+Remainder = 51417b9e9995de34316a66a2f70c146df8e36952fe64124819607bd8691a465f4fde98e590dcd56f0faeb95d1b67751081c2393626713c27ec2a2123aec2a4ec3761e5ace4aaeb612d46e52e16d72a186d2ec8a7ff
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -966dfc779cbf9c388a84e947d1128e2392399ff45d9491259c7cb19589154f82f41e852e0c6bb5a728f6e87ff4ff95abcb9b2b57af1b6b7fc125497775ecc1338e4bbcb5315f7afde4e283347184b908545211afb6
+
+Quotient = -3fd962e88dc1d501fe9335fff8b6b2d50eea967c3035a3dcbcdc9599b81f9a445ed5a6ae7413b8865fd4
+Remainder = -97f06f6155f8d0ee6850728192e0b4fcf55fbd9ba982c5f1d598ddcbc4e1c4be0e209fefa6ab3b7eb2b4c645e4dc40217202285ab0a7270d085dd9d4fd24e5293faf6797b4c3c79bbf3ec63fd82942549f9e8f862297
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3ac566d6b2d18572360fbdc626ec488aa316a74f33d71a17a2d0e1d2bf26395623eb91dc4abebf2f944e9bc3d669fae2e4332088e9ff9d9f43927a7888b1390ef60f05efd6e63ec606ecb3e164ed6dbdc9d088586aa71
+
+Quotient = fb5ce21bcf28490afb64e6746a1a81792c90eae17407c0b4c5ebf2464eeea43e516be2c615f84901d
+Remainder = -3d255bf94c3d610c32266fd472d070c0f5e7dddb88d32723b2e1a20709aed2faf28701e0d0227c2b33ecfa9e708e5ac354a97be732b786210d86f1f05d191513386c580b1ad1f4ac6890f87fd0d4270f23cc5c2064502c6
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -eedb64a6e204ee3d6df508830704f1d5b2d2e627698d38a114c07458ea0befd593a80dfd2e08fcb1893adf57061ec4fbcd3130692de7c46f5ca51361e9b79bb7a91963618b8e5b7591392a5f0e3be954e8b9978c97f12e9
+
+Quotient = 6933a3123d0b32693351a834751345300c49324b861a663e8700bdb3b70ad996747b284a8ea5c02
+Remainder = 13849ef93cbc77460c3c496e8f31f7e01a98c21cdfcd6877547161f9601680665b394933d3a0824f0d32854508c89f0e4a0873280c779c7ca636cd89cf6ee5d42a917b4f382be3b9654039f623c11b43164827f870fa0f0781
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 23ab6042240a7709d43de7ee17332a9710bd0d913c42b3591341527bf48d5bc30abb962482292d45a15cb03c9457cc8d78d1e00aaa63358427b000e59e4260bfe1e2cc603e175d7fcf02bd9f61fae3740cb8e10a510ea3d1d5
+
+Quotient = -10e67cbb33dc6e24765893a047252766c2bfad8385150689dd4fec9ef495dff63ede1fdf78bb6
+Remainder = 9dabe2cbc734b910fa1bd25616daee5657d25b6e4dbc2cd93cf8549715c87974a8336fc5070d86c11f6b670d4b3bd5ee8ae3af2bb321fbb4f8fade3f5c6c2d6c366b4d800dd13ce897f13b0d3fb79f1d9ca525b4e7286c56ff29
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -de093dba98747499f2876c8b6b7a6b9587284835ae35f0716dd594c826cdf5b9179f2c6b08d800a77a6936602ff2b64ee0b7c94493bd5009633f5bbe423454b7f018ae96c21230510ab4bf5db394ff153b0e9eda3ef90eb4c253
+
+Quotient = -521f5e35300b9ec2742ff472cf61235dfe2e449772afa638b1adb812cccf269afd164b7602
+Remainder = -2ad10e8758e1d358d4744ad344ce319617027107c0b8db195d1b58c6e6035450c9b377f026fdf9e5737750af5615cff2ac3ccee623c060d779373136d48a735b353d64bcc5f2e6ea1e46083fd799b5f57dd5ad0ff3e6df9764af977
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2db1990ba1e353a1a62de1b914ccb691380b6ea937c13621a29f0a40ecef460cea52cfbc77d98706fb3c9939ceaaf962fb8003b0cfb40535e0dee22e8e7d04b5648fce2e58803242c199421cc4b26cae776d3603f2ce410ddd1e0da
+
+Quotient = 1d45aa6fe6837a1b7ac95efd55d1690b66487202949a286fc85da7ac0b50b860215e44fb
+Remainder = -7984639b596f1d4e6efea9d8b4719215588620ac959034b303584679a44fa84a4be0c89fd2e29f54e62959f9b7a858c06b0cc051176af82d4b85e7334555ba11c39e6cfa1829995c383ba81dbc220e527e90a1d440c1d069703cc1370
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -80316fdc405bb002990d3ef7d0e98defcd1f0e370d1e51db2d21ecbd96230baf69d00b168afcb7b8da9edc3ef7f6621ae5c5a0d7797e5c92283342e42468dba1036fcb2ffef1f493ff97826477364f6b5a41dc56d6389a01b83eee041
+
+Quotient = 3c0c3f7a777e611d1bd0d17d669a1ef7920b72ea8de06d4b415a73b836e37d6cf0780
+Remainder = d8c77134a75584ecd5ab29e97a909ec139464901f9cfcb1d3d9e29a63d204615b6845d466c8710873980f107c40ab54eca9f8933ef6d726f9bd0f3e9e97eade5eb1a9bcaa7b01b6ad51ff3ecf67d6e4d345f128e990494a2db434fcd3ab
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3e7dd961be36c0c286eb9e78bf3b33e6f9bdf2c2137a0c660f1d21dea31ac9a044e526bf47ec8190e137a60f1f55e947046b9cd04a2485679e48cac80a1bb064a915208889289d63a6e338cf7069ad799861c31ec6eafe02a4ef2c2641c9
+
+Quotient = -178d749de2dae3a2ea4898c59aaba98ad9f340762040f5aea13cad45a793f1256ef
+Remainder = 6c5d9b19aed9f099255b6e3d251aa50d1e534e6c86d82eebe097dc8dd0748201e48ac62eec070a999c21f5c7684e5a700212e9079b5fb731321dd1e16ca82ce80c1f5c17fd1720f1353bb90997f47f5fce335a43a6f59facff0b3724423393
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -9f52ead13916f9807d0cf0c6699578af52c54816828f22de62328fbd7b4fd6c3740ffc82af4e24892092c7ecac44b5e775944445e6615fce25610984030a345731f944128f5734e6e315a0ea97aafd7563105695d026880d065761687b75e8
+
+Quotient = -4fe43bfa9417839ee408b254603c3dd176653b6915a89de5b781b400162fbed6
+Remainder = -1c15816e03751a203ae23c48965c8541849b09996bc81d28e28d7871fa87d1c3b2d383c056d3084d7d01d853bebe270fe2c0839e71851e169d417c47caacab2aff8a8e05f65dfb20eb17ed8f67475702fa83087bd868246cbb885d52639797b85
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2ef8419306ebfd215d9079c7a2b959a53ca2f4553845e3cd32caab2635c0e77fee8c5c016c121e3cbedfac57f810c132486ba78df9e719a976e0112516893f14cf9b89f95a89aaabf31cce509ac8e7e62ec3833f0be4336afe6d7d73518141d39
+
+Quotient = 127e8c06e12943017f9dd57ca24dca0ead230092811d307386c81b6efe009c
+Remainder = -24f3431858d5aee412443feab243b465b849f5dc97e4de4db88c7adf774d9bdda65fa0a28cf6b18eac6078b00cbeed2ac406f8426aef868d4b59ab045825d4b0a18af6c9105e32abc72fadef55b221278d329ff6fb9019630411bec143c4156df7f
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -cae6399216401dec0f8ff5eaca884ab061469082ee3a18e49e0b4d5f9cfc98a598c373249a8ad2374e0b3de71370e93a98650684fbb931aa5d8b4482cb0be142492bb71743c251346df66896806f926a4a5dd4c16ca3294f01bb998835e6583d29d
+
+Quotient = 3f180694e59df85f48ac02b6d4faa26278af9641db18d79f198da5d802f
+Remainder = 36cf82dcf8c7ec783b4de68e0627a4a4b2a508637c176de09feef62dcf382bfa5d8b88539b5ca2cab6cbbdbbd0e54c092f00ee13f4a352cb570034cb0a012cc0fbdb6ed32967f3b81d146f352139bd3d9a5c27789468b7d79b84d6a8f6085f859532f7
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3b7983bfaf565c5ca444367654a07b8bc2bf7fdc04ef12128c392bef2f6b67d9475b4d2f0ce1c380913aa98616fbe1d74dc5c9d64df15f5c9b87a8bfbcadf335a6e8f863c7a01ac175a7d79645ababa5f961fad7d1b9926f7284e254fed33765339e0c
+
+Quotient = -11f635baf7b7d613e84dc38978a21ade2f4cd741d0c4f6ae592d93af9
+Remainder = 4317c686dfd56216bc4865f8dcb6a3446e13d8b33861e74d6c4a3223c387ffb8caeea0141049898609ed1abfc2adbd21756cf64a72272aab6c0b8f2177419abcbf9086635dfbea80a7b884181f2f2ec9a402cb0505e8208909fe062d5e6dc7094d66af62
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -d0ea50558197566f22704e66a70328cacd6f4b7ca9b00c16b7c4b4e7dcbd47c9b2526b3858ebb4de7a571ac570872f3b44ba1fec655c0778a8a87ca24851f6072c5c0b7591b5e67a8cdaca78fa46f201e02379fcb9a8470e4a4971acde36cf501d369751
+
+Quotient = -64a078497f85588d3402355bf3e83d25ca1f0ed2c24a395ef6de6b
+Remainder = -87fc31ac66a24ebd629a26209ccac1b2c85e52dc83c5240269ae5a27333f33d31152c9470efd41472af034e8536bbe94b0a49e892b1d23db3c13fd84b7395d7e3f19d7d4cb4a4c07dd1860826696cf7202483446452aed2b4980388e7eda0ccac792d77a33
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 254a85bf512d9159b00a70678239902ee7e15ac2790ce5747c4a4743c6a0851e6a179b64c75acf312dd37a7b82a729246f79196b8a399ff476c48a05f89c29fb106bb06ef0300c4b330a7b2bcd4ea1e82584c7a96b99ec2131c885c5851343cfa6ae4d384e8
+
+Quotient = 116a06b1d38067cef9f55875fee1254c8ce39b42c19fb232a287
+Remainder = -c15a797fed3810e4f536e9509564b2142ffbfc0c961ee5aa923d43a824765c05d2a99fef79bfcb6310c77a91d9bc6d0762bd687493865de270c99989e891fbf6da7ea5c7c7a1032449457eb73222a011bb755ff44e4bdce8e86f8aa9f687840c0832f7fd8ce48
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -d77c14100d19fbaff6334ca6aa504001a1d56f274632dc89d48e1d517935503c26b60c047cab9e186a55b72439761c884f63fdd2a38ca1acc653f6ccbb4b7262e6215e6d00c8829b448b7ac8716fe0bfdbf8088c8c61eee8f8db43b7b5551f6278081ac2eb1c5
+
+Quotient = 6fc9533f6d0e6c55494cb1b319ec47bde8e621aa92d91155e
+Remainder = a1a70f674cb141a896c4adace0dc58cdcbe2503fd0ad36ce348dc5b8afc96d0f2f8c65bbbadabf2920012798b7ccaedbe8d896dd2674082ad3cc75b54c5c190ad56ff34e8cb5dd29c031656497d48571295d6da396d5f4cdb652732d874a79a674d06a1d7b979f5
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 21917f48bb8e65646c618068fd9069c06e22ce8c679a845f9c4ec843849010abeee12e2d3c61fb963297abca30813c446f2ae82e909ca6ac7839fb58974fa65f3b5d91fb8b3f99d948519ed56653d50026d694060208cf48e3c757f64885b4ed4328c6f071e9f5d5
+
+Quotient = -1abc689fd19523d2e295f260d248041bd00ad3009cc7581
+Remainder = 1ab5af1478fe7373d012befb319b53ff9e36899c1749ea763fb74f7d24624e70ee78faf3115c2a423629528f45295e4adec7b122b993b5c29260558be4831df06468bb1c63e8afcfb1b9b533ec6acf754563d2ae25e2adb4cfe5ee3024611e03a156484a130ee01f3c
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -8c5a7b6bc8ed6ac015ec24efff607b0446c1b736dc8b409e2f433e69d0ca015d70c64b4c924175d0e0102ebc3e1dd96dd4d5bb01cccad229e699f9d8f9ad0e04339d70cd113e93d50c10c03083a81264396f5db2d979d272798ed30efa15d52289d0c72f42582ea56f
+
+Quotient = -4aa210fbc0457fa7366a8aa9a3acb3f9fce812303ec9
+Remainder = -737bc4fdd3d5496fc7f936ccf14bfc3d93f5b7caf4718c444db7a3228b41015c67aed304fec7704ea8238ba6cccb1e94cac3bcf4764a44bafb49e5fcb0339ae44c0114cc304b9c4370363657cd2bec09bf962ccb21f6091b081e71d2bff8556600576e18d4f78fc68b12
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 324774e49bb429553c10156e8db122670d6dcaf6ef5291f515c517d7ffaee36ec5ec5ccb4d12dff71ae7a05bdfbb03ebaf4dc6c4e8bfdc165b77cae20153c27d53bf27d92ff25643b4888cb586e773955a1c02ecbf0fa6958a8ec0b832332eab2e449be6e72c48d2f1ad1
+
+Quotient = 1c8631a18d189f1fb689f896005f2dd2098e0dae9e
+Remainder = -1a1ac9612fc3354056a5378de5b315f12591ee71f0fa9d8a6b2ea2b1c4eca9947e5c4f5ed3d4b78e69ef7a1f5a9894b9c7d85f6e2244ae76881eb06584eaa98c78b60b46084b517f4882758691f91d9e2acfd580d5e901dae14ff4a4fd6b0d7c73450e4928fc6f02fb5463
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -838df2a27bbb033fa0e581073b879d6e8747fff38539801a1870f2e52d91bc84cf10f2560e93784650fba080304244dbfe9da679f207b6920be46b0214a1e490537e56d99beef3f58b30f311a12283501ad79a5407ff209d19a6efd0421aa144e0cd427380d89bfae5d1f5c
+
+Quotient = 4213d04b9f0b30026bd355404bee887b22b2cf9
+Remainder = c2bc097d1c20f050e88912f066b658446cacc7a4d510343a8d88ed007a8c0cfd5d44fe5f067a0e81536d121b39f2d0feb8dd053bb5632e3f9c04be5f6bf4091d646860cd38c96271cdba466ef8b7e2377a51d5669117e664269fe3c08a51b10e1e019ac063d670a3c7db12563
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 38ca0c2f03a5c56676a2f95cd7a69d4aa2085343af6b1d2a71e0d1c54157ec0e8f9125df2a499cdd484c04feb23b1e0042ca908db74744584036c79f21c25c40401d551a65afed0ef35f1ea000fa1a99cb29e6307f6ca0304145f7e483d008cf9efb028ebb654115a8c6b87a08
+
+Quotient = -134e043b3b88b31f89ff4bc709cfa1bd2c1a8
+Remainder = 99c1c846cbce5e9a26c5afcc0186bb1e43b2501ab3205d13fdf01dccb9b1a935bc1cf8adf74d58f1c316381577366b6d126da49991a0d5e02acaa678085f335ff8b8e975e5bf2e52a05488ebfc21a3e0d0bc5bbe67442f77bfc3c1f0c03b7f7ce42bd0fedd8a498f018d8cbea47b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -c261a6c562fcdd56e67fbd2b91027f17c95da43175eaca6e4069c16d240ebbd240582dcde953eea739a4668fbfcdc6af8ff3ab58674c95de90fdb43f64a61108b030d644a44b0319b912bb563f61e520dca9c88f411b32e99c872cf00a01f5badad584636352913b7429b99ecfbe
+
+Quotient = -448c4922b7a7d5e1efec2c3f41d0264b76
+Remainder = -2599e928027d10d3a11056eb719768e5edb1a625fc0b8a1dd4439ebd30a82bfdf89e617ac7c71622058cc64ba32dc242d96fe3ecb856f1b146f831334af562cf88139a99410dcb869b9ad6ac4826563b400b59f55d8fff262dc920fe525b12b2fa167ec237028a098c9117cb77bc3f3
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 36be11eb72832f8ae7b6bdf689f794f62cc1c885e64706d14a77a11df9761c2e9cd81d8f6a0ad0cb1696c69afd80c8bb992cda5100cf1162d600515568b9dc9c81a518da9d240888d4984df65c129ac0b4c557b4e63ee5be79a27473ff5bca58e559cb04c4ac93b61545e7351bb6514
+
+Quotient = 152474a1a76700598c18d9301866ec00
+Remainder = -274a2f9e2bc5f9d75f9897b28f840b71bb10a3e4e7a35ee1dc1150be61130b4e0e987e8742c5edb75a1ce3158eb8bdb7d657b8ba39436d7c88fbff160c7488ddff2f13b3b95ffe149a3d0d2d406b1737a7671f69c0e5d7074a151cb2776b2d13ca24bec261662f2967fd22339ed6c3f2b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -b17c79a31d5085b49793b6a6d628109a6047e3b1afc947e5212d0a9ae32b1955cfd6fed07fc60634ad15f32a9e402d7d5f750fb6d1ad958211f9e8ecda8990689e5212cf72b24e9b51bd07a6e0477dd4c02381d0ab6c0ad3cac1f620f723ab004880800736804751349f6bb19d3db48da
+
+Quotient = 5665f53d5a7405c83a5ff382ec376
+Remainder = 252d055186ec896cb3142c9e4e49c441e2ddad365b86ad21ae4ef1c522d3306c2834d6993a5e1f8c64a1ed582bad8ab746f7e773fc004b1c47814f73560db72f7237ef6e2f671d3b19a8777be2e4c662a76db87ea64f32c48ea371b1ffb15df26726854a417e18afcf49054c6d2e0e337e71
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2b6eb2caa3ca650be02fa199e9ea6c48646a76434e268713753a547e49571f9817ad396f2cb7b16d307801fc8892f0af3e7f93ce08f7955a8acfbc0b56add4b4c7ef7351f60e402b9a8ef7fe02ccdcb4b00b7ffe78c7009268dbcf1d606c3a1b5307d9a8ee6121c6a635a742b8bf36b56cc7
+
+Quotient = -eeda035247bb13860f228d8f2c
+Remainder = 3976edf710ab42bf069e5829de7e16962d1b765f6ae6ad0ffabe723e21ab01cb9f3f5f4edb1d8c13cafc0556c0aa93d72dbcff754ae9260abd294647b71785bb049bbb865a26bba22defc458a14af019a796e942e77d03484028aac2b3798fa730ae0193d89728bf80a8728715a0807b3c497b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -fb5e55f261aa96f54983869d58b3e9f0757d363b9c43aca5580b7c0380096f396ec79d1b30037702c19be5889fc6376793cad51975100f33ebf43e0897dfabcb9adf3adf8d845aa7589ba1f6d155b25f73dae3b2f835595ad6050401fd4e6392012d06194af415b810b0c10a53bc56350bfcc4
+
+Quotient = -5b37eb0c3e3f8f8d9ac6f4e4
+Remainder = -28fde388257b9a11441c592580cd38caf2d69e2ba57d43151c77d26535226e05e08a9e6d8ed470d4354e9f46b7626e5f2b22b652a2d78f817bb51598c727a765941fba63510b58fb3dd5f30717f237da43b42d20bc260b06d488c9c912bfcea1e7808544c58960a3e1355c50c889cefe75d4d9937
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 29232a3fb059242cae6e0b419ff13c479048cfe46a9063188706c6a3842674b16a1aeaf771c5b0ef401d2dc8a57f6fb4fe1b3c7bb545c18ae763e39421e6a07c4469d234f9fc737ac21ca67a5553c7ed693eede4325dbd132dbd9889d815c02f426801eff1f46e7a52f72845234acc6c153f34065
+
+Quotient = 1c7ac058af2e7bfbda9484
+Remainder = -54d7aa6dace87e61e24d87053b9d094bd160916b720d7cf4f740a4fc5a7f03909773d0456c530ea0204427146fd44d3ecec51d8627b5768de1494bf42081a8a4fa97163b0b93b59e70e533f3257723e441cafa4aab471ec4086601021c4462e1f74bebf298ef45fec98fa8e6ea97415f84c93c12633
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -83c2cdca7577b32c20e9e20fb498a2bceb7174ea9aca09d4dd2fc7a1d3b922797b4e9640c7eb9dbdb4d93c7fb9daadd680c1c7645d8102d77e9c877a9f65b13239f9a650dceefc1fd41ea9bd2b38a622bbec99cfddbc6e88f377cd51cc29fd17a27f3d0d970403a2aeeac6ff9fd69c3bbc5c2b0fe7e
+
+Quotient = 472df5f4393f33cc382
+Remainder = 16579a289cc776a47611353e158c43dadf0a78833396f8419fcbbe47d90c7e840e2c90e73e563e6c505bfcf691120ab0f1e9ef9c31db608cade70eb8e487b1113a46e2b5c7f4a172ad99b502eacdc0f91c295fe608389e61d030607a94d09d349fe1a0cc46d1e07c8db533cedebcb4a3b89afd8b924993
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 34b7f6780620246f5a0a92a768072185f02e57a52db1d865c21c952f4386ddb7e2dc1df076316cb4f2f394397cbcde1af0197fcf33e6428e6f5d42a9ccf623f75fae5940873097d4591d9b1a4cbd00074d134272700ab06d901742da695c3ca9d4f917a808113336f883e769fa8051cdcb0cad7cabd1cc
+
+Quotient = -12b4e74d76bd306d9
+Remainder = 8768fbe8ddbf60b548938d8b4a74c4a326ef335257e5f513e65a7d2cfbe9d456425ceb719407bde3cbc74c9c978970597b5663a0ec61962e77eb351adaee2d2d37f1fb55b5d2ceccf282ea3a0d398be1dd1b166d55dce04a39ef434fa392893618003adcfa61401276ce4e599051ad93152e3477ff524f0c
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -c898a753745f0fc178227a7004d917557cf3dcae2e85e95aee51e137b29c895755853ce2d61f214b80070174cad8ebc2795a7d070790acd335b383f9dc88c01227eeab85f1f29d76c1136ffcc7b9fdc073a3a03d8812c7c561b32d8e69754fff64acfd64994b7e9574d2a7cae6bfd5a6fd61dee7ee993bb7
+
+Quotient = -548c97fd02eca7
+Remainder = -939e90e281f97a433eb1c6510668d0fc448f03d737d92693b6362c692167add7e4442105d60ff3db29c03ed06c3121aa4a53c4625906519a4092e4821c918d2264ed0cf088b7da43a222877f3ad9a9fe8ec06fc66b9cfbb44e0fdca1dbe4e461dda9b85231b5b9733e0c78852da83bae557755de3680ab61d4
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2c61dce04200e725ab0ecc5016f66044218391bdf650bc0bd31f3749ac06c24707e79526ee459ccfd4bc22834f8d23f391f2e99135f92b5abd0b04079ab75a263c0e98e46edfb440cd865269ed7872e8c1ada312df1bfd6a5fcd2ebf548d7b7d1d75bc36f62e5e9d15262bb8652a8041e5c8f4d673eecb777d1
+
+Quotient = 14622572f311
+Remainder = -6d197a84d2ed486327790059adb5c073218c56345f48c15caf6892734fff0aa7af4782738bebf24d984bc8adb3056f67e57f9960001a67fa462afd8c57ac9d60ae6517d58ffb4773b637ebe6bf2473a5490511fcdc576a4c40ed03b3afcb2fd27c57b66a26f6d3f9b2bb101502b1117ba3ce7214c9db6302fe20b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -b818674faf69bc92085b7230d9335d7bead0413f2905539a54e8d1233843ef13f07cb5538e0787097cb24f152cf54a92e62ef143e31cfbbaf3c09650b14229a4f61a783eead26430949c88a87f1618788abab9728aa52dd8419f5d568e6a109f278b2afdea91cdedca43e562d4bb8fb7f1b7aef13992fa7edc320
+
+Quotient = 5cdbb03ee
+Remainder = 1cfa68d5da7a600a7ac598b9ca1a0759f972fd9a46ba62e5e96d8f6f00fbccd0ab26ca03d14470b43793411ea9803c9409908625fd74ef8f9b2d7c2064b2e3439adcb684e6f01432a1feb0f492fcdd2b8b5a6cdbd0bf460272218bcf763974be8784e5306c219ee535baf5541b8580952e3690b585fd99f77c46d69f
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2869338cd16322409d3efbd328b27e2ba53cbf71816ff5c093849b1d866b8cdecbd6bd8ffea0b7787251acb760f85c277ded21e56acef05d29bc728cf44f55be87cb4c8913408a01a1ad53461058a1cf94538f05ec14a6d3eba804264df957de7eb1a61b794a1141218966463dd42402c260c229241ec46afdb5a06a
+
+Quotient = -f16da1
+Remainder = d8b66b622b5a54963c2c84aa186bfde5b67a3562e07a23a5f6843bdb615a3c5d4f007ad8b275ad7e4c5b1436252efe35699cff2e0546e6dd8c7230d6ad560c51cd54db6d312be32ae4c708e9047c3a25c211e2566c58d6b9291de31612006d4e847c6916702be99b3f7ce40e1ac842908acb7f03dc120aa8998c60737
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -f8af8fb7002a9d2218dcd0f0c139b8e3dbbd48e25a5c910f6d0b6684bca224f62768b64955580306bac6bfd45b99ad77483563fc7dbe015edc06bee3ff93b0afa8f5866c23c7a7570b366550490c97ad84062c2495cff30717aaa965a8e15e270b504dbd4fa943be4f97a7fd1f3b589bc9fcf4f907a7690d99c978a374
+
+Quotient = -71bc
+Remainder = -13316e9b053a06520526f579718c326402d2a9686d51a340375cb53d7cebba99c8d1ae93388db0a41cf55d5753dd1174014ff3305fcdbd5b02de9e90c45ec0d2900ebf6ef847c2a045eab7f80f07f01c81b9fff093a779a280ae42239df79de8d2ec4bff6723788c86786fe276ae6a4dc1472442b552258e1e5b597305187
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 20fe256859a2e4c4f77db6adef78b2aa4758b29ad0787ce7e277bc68391d5949bb4dd07a9b1a79fe890c8a760871d81adfd3858e27d1bd6de33fd31b8aa6131fef9130a50f995c3be1d615d1bfb9878804b7f6494237d8ad78ac219488f17335ae54b494532f03a3fc8e9576cab6facd90c662658878fec86db66bacda3a7
+
+Quotient = 10
+Remainder = -23e09736f469c83f280052ff01071b1bdb52b7e2b061e8a1a8c6a4e091fcd7ca0b33ade885d928a11a3375599aedfe554d1c2289795daba08f07327a19a8adfc219592bcdf9fc5aee5961a48b3b1b5fc380eff5ed2ba7d7e564462397fb6c6187254ee41c74602b141d7adba99205d2e0b35da57efa96397b3a5d112751cf7b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -e849bc0bfd9560cb90e42c8e4e88df175133c14466e530716d89ad0326b660b0e617b4efe8df6b000f517d3cc24d9dd4cafa2773dafd4c6bace0aba54e43c17e8e3ff9497a97ed83e6408aa0aee0e6485dd1d89d52520d1acf4d587422b0c5cd2d5e7e81fdcf842d6331779e800f96628206e8be020ad4021789008a641f67b
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 22004040a65f9b6f120bb7243c638cf3a4cf6fc58c230da932c79568f68e31af7a7b8569aae77af671f8335ae68d6dc1698baa9d6ba9cd633a662101b45bde51d55098b50fabde8546f317ecc2ae7a39521bc075942e3751a349f51ca3c371f3b8a6cbbea3e11a334d677c07612bcdca767194c07fca78ea8a06cc3b0dc6dcb8ba
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -cad46f410062dc33ad4d712c3b743ae2b7613576b2bd7c346a8479ed679a08e3644c7ee4f23b95f1cc9111905714b170abc37ee1003956f64f0a7e876b38d524fbb2436ed56069479d8d2e4029770f7801a7278fff99b3dc76280f35c7d43ee594073f725554a92eaf4f785c18a7cf6669dce5adb0995233241f3294cfb5bd8f4741
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2fef69f9745646aa13e0c38d77951161a1f881a7ceef032698da3fce00764959f11140bec7d7f53d6777c3622453d4525fb068da48047609d18d463a8fbacde1d21035963b668ca11d5b9ae66db13de7a7a5b66a40608dfb56d9f9f0c8880426641083a05b5ff9e6ba0d6da3a04af1af01dc218e9b4f6ad7b1d3a4d1d26a5c906093b2c
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -c50a24e5ddafb768f64677233c5cf09da1b4f06894bd68e194b23feb5c5d6844320a12a02d13ad012f13b1438eedd6313bac9c1f9bb4548fcd314988d8fe0ce6458306735307afe08a96a0c2bcd9cf126f529e48b7ff4b8266caa28c40b5c3d2a473ab8805c860d27d7ee9c032423148d96fad019490ea019d40679de7a2a3323e80979f9
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3a8682d0e5a4efa985dfa8bbddc2c0d72a4400b8b070a8cf7450aa8f831d8a91c9ae3542641b7a4ad793e232a0d301b82664fe2c7f20bd9bf8275828a2a20027d6056b211638b9b0220fa4252d058bb485dd3c4622b1eac97d54b9634b558ff1bd5bd11085d4f3d288f7965af52beaa922b23ac0207d5763c24c085076128e0ef7370eeaa19d
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -f00fb238bc9383079c7ecad9b9f6efc622d58a76f2d5d40ec7cd7c3c083c459fbcf3d128df4d20ead5f585505515aab11c36584ca622d28e0cf037419a649d598346063a07e29c61b7a8e76d1949dbce3720d45576763aa0d391b39dd6b694c7cc60a1b4f4f107d87130402985695e1847e82cce39b8d0fb5c88bcf3b37d6dbb90baf5a8553c3a
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2b809f6baacecf61198856d9edbb768ca2df2abe9b7b8ce1669fd9259732c8569c0cafde2e32d253094480ed281a8db230f84e780c6e8bbf3657c0b0baaf19ea973fd8daa2870c9d79f3695d78e063f9130fe07ce806a088ca267fd2820f10dac34b5b32aebec20e4362dce26eee0c29d2fedc1e020d452bc2499234d07a2a6e54314e3fd6dd85fe5
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -90ed75629073df816ec1d6dfedd1cdbed9239661e362db706288dc4d774d806bfacfd4b32c3013ec67d8c2af133b46989f12f809fe202d33d5ba53659bd2a9a85d3fa542de4a5c656aacbbf8899aa66ba816b809f2629f37b0444cd3a6dfc99103bcf2a5ee87790b8401be806b5d7fb7064ff0a6fc8ec769d0ccbddbc3d35f7dc4d388d8d28021c95b6
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3f60052c9dfe0bac797a674ca7f11377a24c28a1396ffa0f46acab7909543086aee1995cf51852ea4a21ff4bbf6e7309cba9848a7b2e3b33dbe660bdc58d513d16bc709f1f2253648b46daa7aa037332552db1da81b4ab9850ac4ec66621648fc856a71eee3cedc6617071600ecbc5ac8636233f288ec249b7ae0bac942a5fd539d03990c4fb28a46653aa
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -c12fc156d9345cdfcff94bdd324429530ad8caf8afaaa1a82297eb3a8aecf2ac021384036749e489fae05e8776da0deca7e4325436bc8f383bed579c2d67a456c4e23871489780d760d63d0bc0d1d0ab41f06a091b44f602bcdc0bd4e817202e39ca6a934c0c9405adb5a14d24da895c58a81d1c7ce52734183e00d80a414ddd8869998822364e029b3f42cc
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 205dc6227dbd3adf8ee49dffd43f835882822b1c94f92cf38f5efc62f943075d80b33588973a0e0a8ff5e800ede21d394736ba98d4eedc53a9122f8c262cd09fe9e91cedfd0237003b0124d757797ee13cd03e7a3a257bd8df756940a4d22face9287edca00ca23e7d5e629966ef710b07e54241dbace041aa6d9f82687c3ecba818203adb376ec0b201894a500
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -82c30a9ef6a83d81b77825c71ddc563939b8508f1b7e44c725ae0f61006646ba9b86507ec9a4dfd3755ecd8bfb451c2d43a61599732b8aaeedff7a304ce0a9327e2333f75e9a010556ecbc3abaed02214f25e1c8373bfafc2c288ea36b8d5f848b76295a141d8f633609a6656c07f3d98177f5fa83833476dcd111aad179001f81d6013ca3a54cddcd8dc0ce7eb24
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 33aeafda3cfc20710f0b4a3d9ace4817eed80ca57ce6c82dc2e7946058a40983c9204ac95a1399fa633bc96cb10af3ddeee3ad2337c64391a42dc7794fca629e3e1e4e03a2ae24a000e7113b91c1b6230cce9592e45b6ee7984680b45aa0aabd7f56cab1a64ec310cefe5211821a75deef2e0c8e43eb467dea79dc8c03d2d523734498d079d5493c904a2ebfd8a3a9bd
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -b897bc87a40211ef8f93645b1f6c981fa00ab3b12e117a89375400ab5f4c64bfbba01d265c7bc6f5e3a8e26de5de9df3b8f70f4a39c0eba577db5e4b7a68f751b4a69ff4a38915983cbf70dd7e066779405d572f5bbe0719c978b6865ea1a72d90d3ec8a8c146f20d98595036b3de88a7500d7b476644913e4b63e85c4e2632048e9600d553e560759770a902cca680b17
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 20604e080549e1c503049ebf4a56cf9447d90fe699a9773915b0a65588890e15bd58f55ad7b52bd7b7992a8b24704f1dfd5fd07c70aae4ccba5646405ff8a9cbf542dc334cc0c27a790c05420b552539fbf0a155861bec0e4d9e3fbf045720ea3aed58307d5738b64252a963f3fd5ecd0587cb4d7e159b4980dcb112e26c9c34f10a192e090ade157eac1d7a6f970871eaa69
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -f11fc9682601cab97c25533b2599f50edb1ac65d46f1969bd9c3cb3717461627621c8cd401a0a0b91f3645b8804e095aecab31c1bab0c26df556adafdd7e7f4f0510e0bceefa3619e26b8c9a1bc613db03857f53e9eb5d4b8f75a8cd1429feb81edc705e5a779d5f95373d2243368ce17ef22da79a6a2672496bdf629171b7973fc4659c8eae9ae867cf38d6d7617029bf59d2e
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3cb0ffbd9ad21d0e86e4e4dab4d237e2a17d97356bdd305fda772fdd99acefcfb8309d813643c852f66e1c6c7fa41ffd44f8335ef7333b2b3e846139fa9be2c4ea762afba4e11263c0b5fab18c5efff2a18d83ee89844f5f4db2c1325f0f55e066a9e01030c07a85e2c9bbd37b5e767ebcc9b95f474ecff24df9ae52a19edeb66546a3a28980f616eb5a351cd399e5f8436f17faf6
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -b8aaffe779855c6ae51807f8cba780aa64bc22e8fa5e33f7f1dcb084fc476791565bc33eb37b4f791ef5cf46d64576f48b5fadc9f096f20c798355861ce5d24a7be1450bb871f9821099f98213d74a5e5cf83b895ae65e0e0fd096698463906a112e6e169a1cc0769df7a5ba6812300fdd33611761b6339385e1a70f8f8b2be7679ca216f5b183140e69586a27aaa9f2fac118118875
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2b7ee3ee34347dd89ba4a81415aa1269d0390346597b07444f0febb71d490a01b6fee174634bd88e8aa180409549b2726d044b4690353de2fb2294c8f69c612485aa066f68fdb89466760a85901cbc7312bfe5a6f656e67dfd2d4ee099ff97694b01d6d5b8626ab1650eac5267be53f5f3ced5dda1aa86bf42ae132a28fddb94902a515da40e0fd0586dc8b17a34af8eb03d06f70ab89df
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -bf8213944ba785e01b8d37a12de77b2ce1492f34bf6f67406cb51da89675b4f70f4d4f314f30ca8d65cbc48ee2fa1f0a3e4ac0de3a87d2c4c589b6812e850623d78ef2e46fbb555f6d3c69b211892c11a4a2dc3d8a9a19e96a07952602ed5ffc0232c140c3e828acf990e5425d8dd9ce0c1107ad1c6f96c8fbc90ffa457abab0d843094dca3c8a45ddad81b7850190625613a4851485f38fd
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3083421e375f0722b9397e156de47f77635d62ba1d51794469371b473b71c02e3722841bca2ca06b5d1cf1492bbacfa0abfe394dfdaa7bb8787550ddbd953540e9c97631d9a1efe0c8f8e14f395c82d20245cec6d8021f8564b4d66e7779c3245734c56fb74481172f4e349d9a113cd0ee5263c69ebf746c5285cd4c0fa91d9531f769fea3610c2972ccfe9a22c00aa62ebf52b3a4c6135f3069
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -d736bce537f47ae4797faad797af8cfeaf8a4fd42df1f7e61febf8ebf6e47dabc48252ff7948f3dbf8cc369b6952dc58f64cf09b4c53447d135c7a753c21b6052a9726a47a61e13628edf0f2bdb357f2e780ac1ae1f28f211296c8961c2955b773d7dc2904dfea96780b2877af133c9591a0dd54cb20884f014f363862478ee7ec45236bfdcf0321af0692e68f744af28fbcca827ebdc7b210da38
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2cf1708f1e675ba688c0d19eb61a05d2c8642528ea6b1512375faa732acc59ec04ea0aa55e0049144be09eae1292b6cba6db7a9823f1e912df6a5032bb9674f4f26c0c8244ea0dde7acfda566574956cdc33e4a27bcdea25fe255c19f218cc4316ae8428ea61d1bf865197a066b959c5fcbd7c9596207997d05fc38e32322aa189ea06cf5139522571661745c0d72b740dc6d842f1dd8481e318b5792
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -a9180e44a284b5bbe72fff46e55869f749b626ac33c8cb17be1fc260d7c6f460f24a89e1367112e00d0da4d213a821d09f103f35bc4eade5605bef23c5d048b1cfb45dace8b9c637af626a85fc773cf51e6602a7a5999a030030cf114ed6a4ed7583465b9303a72e7f60824c12329517c6763b0f64abd8ba2b9b26cebe882a51f05ef8076e527d53a213db910a5f42be5fb78729a3dcd08d69a709920a2
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2f26e156b3b1117f7cec542b20fcc06ca66cec03a19b6f5eeebf22b4c0fc265df5ff06fc9dcac569735135bdc142b526b295225711efb71577b10aacda2fa446f5208487c725407c2188b3185237740c813e4455a6f1dde4f62916237f23164a3471aac0fcfe24ad1ce1dd81a6144f5861ad0cf22dc337abe10fc4a88b36116dc4929602ab48eb971fdd7a5ff747d6b9e0b2bff75c59621550991966a0a19f
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -9fe18ae697576dd36ebdb621d14cac1cfdfd1f5cbb7cfa8962c5a7dace96f9f54fb4f4cf2e650dbec5d1ba89ba53d251ecef7dcc1cab8c2ff3d77903f5fb5f29a4e8e3a2a3c05c105d5733b5132f2f8d88f99d17de86ca1191c32ad8ed469bb649ef188306f69f183bd0fcc32759e4f855170f88c0a3f6745aa98f6225536821bfa056a42b37535a622f42b009859c974cabf2e14f75c749d0fe5a01fb3ab0c0
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 33ab185854b20a8126884eed85181b14e75d4ee452958cc1043b099bc16c24b9c2f3e0b792744f230013907844496e600389800e45fd55133fff0cf19c9c152b9d031039eb90da568f9c5212a3ba283f4d1353ff8ff9dd04d292c265bdcb77c3e411716f471930bccbb8ddb819ebb0e0036dc1a18457cd97f4f5909a725baabbd15e8ce33875895aa8dce77a4dbedeb0271a2a4a17f77f5920c3776caa4a75ac650
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -e7ca0c037bf8bad5f8d9c5a2737e044d9f7284c616156d142612a53eb217f57f4aa00b6daa424e6c0d9163939e1ad0510a1cd64fbd576f3e54c59d7aa6228fb3caaba7cdcc951e00ed141ac3a68abb9780bf46bf544fe0e347f677288e962fb69782741df49b27cbbe8720c6f8f2e769147d89df6e17e3c592bede2e696d384b9f01b99b31c505d67eb6193a8844f8c4cdadc9fe45dd446a0dc572c9da6e58ed303f2
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 22b76d6973e37aff4a09216e57662f186c0a0748c4375d6bed370ea61d1f6fac2d9bbe04487a629118b6b0b0c8cc4179fff7bedcf048cc529498bbd9cc81ef3a103d6cac49d58bc41c83f961b6df7f00c7171fb7d9359e03c76e4364cffae5f67321ce646e9b05f9c04aa16ea65389e940022eda6dc740ddc070bfc7e589b86fd1559dc320701c39de20d54d0483fdeef6c4fd012850630b982c2e243ac1ff918377ceb4
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -e6e4d69a82b83e26ef8ac0f4c3a211153ea6655b7ca12840e7b866510d114693049c5b8b22c3a097eac832bbd1986e60564298e54dba3316807ad64bd6c18903a0f22660c9e8d5dac180f57cbb90b176b842d5b58d6dd9f47499a037833a92a18f397238a8bcdc4afd129382fd6d200d3d267ca1e6bcc2cc65950831cb8e30bcc01665c8149b874c9f11168153c187341afdc43e4d8652ce4fbed9f9eac75db40d64344ade
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 319a81f052db21ee213c536db2cb8a71e0dcd0a9b2ce780a9588c38b717c5e487a337f82b5223f638fb552e92b826192e6a1c27771d1e86584bc6c7cbc5d9a6ce6edf2ea2ccf6939485959ccbf3183b40e410768c4665adf90a0ae2792fb4b5d8aaa06c6294e31893620decc3bc72fb4eb68f1e56b48e39c59abe869d07509b7564268d0b7f178ef09ef5dcde6e7dbd2a20fd1d4fcd707943dd63adf590a117ead1ad10ff85cb
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -eced809145e696ceaa0ee8f831eca67049509b31a1b15e7fc86cdd97a73a2ca05bfea5f4b283d287e49906463ef36f2f8ea23c2aa12d5534c08e9769055e04822be0f8ac85f404f5c025a6833b4115f78da9470451c852ba0f24062397d20385f58c5aca10f3f09072b2592e5672ffb989a390abf86cbce74268aef1f4ffde730b3b962df1088bf8745105a7462379ce142f819c2538d9bba99e094ffbc4478625bc54df16c5e1a
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2c1ffbbb30e71d5fa77b5473392f95297b489c85f83013262abbe948842473154e00c86b2e354278844083f960fd746a3b7cb9baecb9c66932774b3a28f678d50dd8fe52fbeead43d8c8adad7c0fcdbe5e02664b0feb0ce214c5fa007c5fa2d08c5fe96787b95639311cc4b7eb2a7217c9c38c6d93444fa60c1f52ddae9bb2ec1a49a593e210e47377d3623cd2c4994ad9343863443911062e12233176f4a65ec715b3c9731c4a0cec
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -c3bf056b905c0392a7b5fa57446ed350f325eb67d59f1784c744b04c7f4d8f5397db913407aa8a7f1dd0225c1a9673828db0d8bf3d4908ef53307131bf5b5c4c6068ad73b874aab98e8db33b0a758532172acd8b2c830d0679a8226537090166317b8eea91e8ee4a7282c0ab0ab6f2b7b63d728d22b534fdc88294c376a8d036ba9a644c2489bcc84f6aec83afbac08067a7b93f3897f8dadfb68c327b751841927a728faba47dc44ec4
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 23fcf9510caa531a304eee8d0b2d49050fca83abbf287b6b6dea06501c5afc6d87d2924df1d45b1bf6c4bf77b563a3013cfb4ad9094f8ee9892d33f6ee1c70131cd5721c5af804a9da7654510e8591aa185ee723f8caa78046d9e6fbb891e6024d2ec70110ae61c3969995e35941d2c7f3779d5bb71ce5b693bc9ce4b087068adbb554acc4ab23624e060f7cea169ab512a06ff3d2a36c2b6e3bd9a75f1a9ad30a6a16b0256c42eaff2c3f4
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -c32d5e643b12db6616554116299c1da672efff1eee394378c5e9e5f702ea4ad64f0dac8904bd2751d2cef91adcb283599f6c661967dbab27059e94dd50025489cf74c6897a22e95013669aa3063fcdd4b73aa6a9a1ba5cad3956bb26346e22df6741cd0ba1c0ab87fbe74035618a394383823216df47b910cae495b8fe7ac5feb3b2cf0d0ef6c75db477160b75324db8eeac48a0fce72b9abbd7079ce6f529a89025a03a3777cc7d1deaf3e4a
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2a8f2c530342bb6ce683a760540e956a1155c0fe065476e400caec59861ca97ca71e51a11b3213b2baea1a41a29449998778e0f533fcc181698d293f05e28bff2750ef4095170de98a19a36ddcf59a65f3789a3808ead51680245070262c9544e446f23652eba47065a2bc4701c55378bd49733619ed2c213f8ed12a4a317c465f37efe07ff2df8e88fc33d3eb42cde9408dda28215702bfa607030839285a8bbf89b5e8842fa7d7f50d83fd4ab5
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -bcd2b2362aa146cd120b729e81c98ae598804006d046a7ed0f9782baa10a85e37c7c22288dc61c24830a1b42b123d63779e88d7555028292fed5ada1793264b35e961b608bdd7398e421c5474c33a65059ef13787e0cedf4f8f032beac48c4b5e5a67417109142a43b198ab617d1de1a38d6fb4922c6ef70a5aad3faf6f8d5da3af9679c94cf61ee760ba792d2972376425e2ec9c4109e969e3d9c3dd90cdbaeaeb7382cb7bd024b75a1fd6d621c13
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 3940430ace4b5b87bf4baa2673582db3d27307ca4cd8e55e976ea3e10da72b6deb7de932253bc9228c85cd4ae7766cd0264004c658a66d81e60bb9bf4dd66e2afe11057b7f7b53a1ec222510748be53a93970fb056e8082631b2b77413fccb6e61cdc6f224b7903d75345afed8a4f194b4bcedfee1f16dc256c2bb9f4a129fab6a9fe752895a93937a3d087ab7ca212991ff34f1bf1c55987a574674af43986312bbc3bad3280bbddf4ab0217440f851b
+
+Quotient = 0
+Remainder = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = -ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -f0dc20b88450f45381791e85d080e4f2cf38837391e16e608b8cb5e0ac0ca75e9f72cc04bf2f56f130d46aff31efbabc0ab14f0c0ad680d6899797297152be85ac012644c8d0927b5b6c70dc3e5a8d79ef92a0873ec22af3d9683bb5db1ffd5ebfb698c5ea64cbe2b6a8b9f14d4c18624be1b78b19eca14942ae9542012692cd0d5289ebf75fcf5486596f92659143e9f952af3622137e633376fb95e628055e0fb1ba3a37ccdf0af69a4c0d6b0793078e0
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = 2f2135850715f623909e41a745eaf7b37593567fa8be2d1ccf76d10b93a096e244b91d8700cca37a2ec1bff7c3d21cc3211ea8b03a3594921dec32faa185e7f3d9d17e98cbf8d881fd2abb944181659242ede21df7e5e8784f541cad678df1ef6ca4a5fa91f7856c62fe593c4d24436810cf4fbd11125bcb571f6975d82afeb81bd0c7700e053fc175fb5fc7b329c438479a863b8d5fbe6b4436b67355c51d0306e8847a27a30c9e61f0e08232673cdf0ba4e0
+
+Quotient = 0
+Remainder = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b
+B = -cf429f101a2e19a65af1e238f6745215cf476ff2609c846f10289f1ef21b89af2aec53def3f4ec07ea42041f8b5862dc37fd03b2df12adaa8c9f1933cc69b526d47797b40f49545fd093b8ceddee3c55721d1fa19b336218de0cac56d410cc6cff4e620578cf820f5cdaadc367dc4d6372aab1e0ae3831a6d153c14920b1dcf09e7629b7442a06385420d79742e409677e3b82ec58bcbfa668ca072e981e20728a983d84a432605389c855a6668e0ee0d2b67449
diff --git a/test/recipes/10-test_bn_data/bnshift.txt b/test/recipes/10-test_bn_data/bnshift.txt
new file mode 100644
index 000000000000..9ddfc1835028
--- /dev/null
+++ b/test/recipes/10-test_bn_data/bnshift.txt
@@ -0,0 +1,2427 @@
+# Copyright 2016 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
+
+# These test vectors satisfy A * 2 = LShift1
+
+Title = Lshift1 tests
+
+LShift1 = 0
+A = 0
+
+LShift1 = 13116120bca5df64e13f314254
+A = 988b0905e52efb2709f98a12a
+
+LShift1 = -13116120bca5df64e13f314254
+A = -988b0905e52efb2709f98a12a
+
+LShift1 = 2622c241794bbec9c27e6284a8
+A = 13116120bca5df64e13f314254
+
+LShift1 = -2622c241794bbec9c27e6284a8
+A = -13116120bca5df64e13f314254
+
+LShift1 = 4c458482f2977d9384fcc50950
+A = 2622c241794bbec9c27e6284a8
+
+LShift1 = -4c458482f2977d9384fcc50950
+A = -2622c241794bbec9c27e6284a8
+
+LShift1 = 988b0905e52efb2709f98a12a2
+A = 4c458482f2977d9384fcc50951
+
+LShift1 = -988b0905e52efb2709f98a12a2
+A = -4c458482f2977d9384fcc50951
+
+LShift1 = 13116120bca5df64e13f3142544
+A = 988b0905e52efb2709f98a12a2
+
+LShift1 = -13116120bca5df64e13f3142544
+A = -988b0905e52efb2709f98a12a2
+
+LShift1 = 2622c241794bbec9c27e6284a8a
+A = 13116120bca5df64e13f3142545
+
+LShift1 = -2622c241794bbec9c27e6284a8a
+A = -13116120bca5df64e13f3142545
+
+LShift1 = 4c458482f2977d9384fcc509514
+A = 2622c241794bbec9c27e6284a8a
+
+LShift1 = -4c458482f2977d9384fcc509514
+A = -2622c241794bbec9c27e6284a8a
+
+LShift1 = 988b0905e52efb2709f98a12a28
+A = 4c458482f2977d9384fcc509514
+
+LShift1 = -988b0905e52efb2709f98a12a28
+A = -4c458482f2977d9384fcc509514
+
+LShift1 = 13116120bca5df64e13f31425450
+A = 988b0905e52efb2709f98a12a28
+
+LShift1 = -13116120bca5df64e13f31425450
+A = -988b0905e52efb2709f98a12a28
+
+LShift1 = 2622c241794bbec9c27e6284a8a0
+A = 13116120bca5df64e13f31425450
+
+LShift1 = -2622c241794bbec9c27e6284a8a0
+A = -13116120bca5df64e13f31425450
+
+LShift1 = 4c458482f2977d9384fcc5095142
+A = 2622c241794bbec9c27e6284a8a1
+
+LShift1 = -4c458482f2977d9384fcc5095142
+A = -2622c241794bbec9c27e6284a8a1
+
+LShift1 = 988b0905e52efb2709f98a12a286
+A = 4c458482f2977d9384fcc5095143
+
+LShift1 = -988b0905e52efb2709f98a12a286
+A = -4c458482f2977d9384fcc5095143
+
+LShift1 = 13116120bca5df64e13f31425450c
+A = 988b0905e52efb2709f98a12a286
+
+LShift1 = -13116120bca5df64e13f31425450c
+A = -988b0905e52efb2709f98a12a286
+
+LShift1 = 2622c241794bbec9c27e6284a8a18
+A = 13116120bca5df64e13f31425450c
+
+LShift1 = -2622c241794bbec9c27e6284a8a18
+A = -13116120bca5df64e13f31425450c
+
+LShift1 = 4c458482f2977d9384fcc50951430
+A = 2622c241794bbec9c27e6284a8a18
+
+LShift1 = -4c458482f2977d9384fcc50951430
+A = -2622c241794bbec9c27e6284a8a18
+
+LShift1 = 988b0905e52efb2709f98a12a2862
+A = 4c458482f2977d9384fcc50951431
+
+LShift1 = -988b0905e52efb2709f98a12a2862
+A = -4c458482f2977d9384fcc50951431
+
+LShift1 = 13116120bca5df64e13f31425450c6
+A = 988b0905e52efb2709f98a12a2863
+
+LShift1 = -13116120bca5df64e13f31425450c6
+A = -988b0905e52efb2709f98a12a2863
+
+LShift1 = 2622c241794bbec9c27e6284a8a18e
+A = 13116120bca5df64e13f31425450c7
+
+LShift1 = -2622c241794bbec9c27e6284a8a18e
+A = -13116120bca5df64e13f31425450c7
+
+LShift1 = 4c458482f2977d9384fcc50951431e
+A = 2622c241794bbec9c27e6284a8a18f
+
+LShift1 = -4c458482f2977d9384fcc50951431e
+A = -2622c241794bbec9c27e6284a8a18f
+
+LShift1 = 988b0905e52efb2709f98a12a2863c
+A = 4c458482f2977d9384fcc50951431e
+
+LShift1 = -988b0905e52efb2709f98a12a2863c
+A = -4c458482f2977d9384fcc50951431e
+
+LShift1 = 13116120bca5df64e13f31425450c7a
+A = 988b0905e52efb2709f98a12a2863d
+
+LShift1 = -13116120bca5df64e13f31425450c7a
+A = -988b0905e52efb2709f98a12a2863d
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4
+A = 13116120bca5df64e13f31425450c7a
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4
+A = -13116120bca5df64e13f31425450c7a
+
+LShift1 = 4c458482f2977d9384fcc50951431e8
+A = 2622c241794bbec9c27e6284a8a18f4
+
+LShift1 = -4c458482f2977d9384fcc50951431e8
+A = -2622c241794bbec9c27e6284a8a18f4
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2
+A = 4c458482f2977d9384fcc50951431e9
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2
+A = -4c458482f2977d9384fcc50951431e9
+
+LShift1 = 13116120bca5df64e13f31425450c7a4
+A = 988b0905e52efb2709f98a12a2863d2
+
+LShift1 = -13116120bca5df64e13f31425450c7a4
+A = -988b0905e52efb2709f98a12a2863d2
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4a
+A = 13116120bca5df64e13f31425450c7a5
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4a
+A = -13116120bca5df64e13f31425450c7a5
+
+LShift1 = 4c458482f2977d9384fcc50951431e94
+A = 2622c241794bbec9c27e6284a8a18f4a
+
+LShift1 = -4c458482f2977d9384fcc50951431e94
+A = -2622c241794bbec9c27e6284a8a18f4a
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2a
+A = 4c458482f2977d9384fcc50951431e95
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2a
+A = -4c458482f2977d9384fcc50951431e95
+
+LShift1 = 13116120bca5df64e13f31425450c7a56
+A = 988b0905e52efb2709f98a12a2863d2b
+
+LShift1 = -13116120bca5df64e13f31425450c7a56
+A = -988b0905e52efb2709f98a12a2863d2b
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4ae
+A = 13116120bca5df64e13f31425450c7a57
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4ae
+A = -13116120bca5df64e13f31425450c7a57
+
+LShift1 = 4c458482f2977d9384fcc50951431e95c
+A = 2622c241794bbec9c27e6284a8a18f4ae
+
+LShift1 = -4c458482f2977d9384fcc50951431e95c
+A = -2622c241794bbec9c27e6284a8a18f4ae
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2ba
+A = 4c458482f2977d9384fcc50951431e95d
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2ba
+A = -4c458482f2977d9384fcc50951431e95d
+
+LShift1 = 13116120bca5df64e13f31425450c7a576
+A = 988b0905e52efb2709f98a12a2863d2bb
+
+LShift1 = -13116120bca5df64e13f31425450c7a576
+A = -988b0905e52efb2709f98a12a2863d2bb
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aee
+A = 13116120bca5df64e13f31425450c7a577
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aee
+A = -13116120bca5df64e13f31425450c7a577
+
+LShift1 = 4c458482f2977d9384fcc50951431e95de
+A = 2622c241794bbec9c27e6284a8a18f4aef
+
+LShift1 = -4c458482f2977d9384fcc50951431e95de
+A = -2622c241794bbec9c27e6284a8a18f4aef
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbc
+A = 4c458482f2977d9384fcc50951431e95de
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbc
+A = -4c458482f2977d9384fcc50951431e95de
+
+LShift1 = 13116120bca5df64e13f31425450c7a577a
+A = 988b0905e52efb2709f98a12a2863d2bbd
+
+LShift1 = -13116120bca5df64e13f31425450c7a577a
+A = -988b0905e52efb2709f98a12a2863d2bbd
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef4
+A = 13116120bca5df64e13f31425450c7a577a
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef4
+A = -13116120bca5df64e13f31425450c7a577a
+
+LShift1 = 4c458482f2977d9384fcc50951431e95dea
+A = 2622c241794bbec9c27e6284a8a18f4aef5
+
+LShift1 = -4c458482f2977d9384fcc50951431e95dea
+A = -2622c241794bbec9c27e6284a8a18f4aef5
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6
+A = 4c458482f2977d9384fcc50951431e95deb
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6
+A = -4c458482f2977d9384fcc50951431e95deb
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ac
+A = 988b0905e52efb2709f98a12a2863d2bbd6
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ac
+A = -988b0905e52efb2709f98a12a2863d2bbd6
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5a
+A = 13116120bca5df64e13f31425450c7a577ad
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5a
+A = -13116120bca5df64e13f31425450c7a577ad
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb4
+A = 2622c241794bbec9c27e6284a8a18f4aef5a
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb4
+A = -2622c241794bbec9c27e6284a8a18f4aef5a
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6a
+A = 4c458482f2977d9384fcc50951431e95deb5
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6a
+A = -4c458482f2977d9384fcc50951431e95deb5
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad6
+A = 988b0905e52efb2709f98a12a2863d2bbd6b
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad6
+A = -988b0905e52efb2709f98a12a2863d2bbd6b
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5ae
+A = 13116120bca5df64e13f31425450c7a577ad7
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5ae
+A = -13116120bca5df64e13f31425450c7a577ad7
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5e
+A = 2622c241794bbec9c27e6284a8a18f4aef5af
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5e
+A = -2622c241794bbec9c27e6284a8a18f4aef5af
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6be
+A = 4c458482f2977d9384fcc50951431e95deb5f
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6be
+A = -4c458482f2977d9384fcc50951431e95deb5f
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7e
+A = 988b0905e52efb2709f98a12a2863d2bbd6bf
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7e
+A = -988b0905e52efb2709f98a12a2863d2bbd6bf
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5afe
+A = 13116120bca5df64e13f31425450c7a577ad7f
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5afe
+A = -13116120bca5df64e13f31425450c7a577ad7f
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5fe
+A = 2622c241794bbec9c27e6284a8a18f4aef5aff
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5fe
+A = -2622c241794bbec9c27e6284a8a18f4aef5aff
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bfe
+A = 4c458482f2977d9384fcc50951431e95deb5ff
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bfe
+A = -4c458482f2977d9384fcc50951431e95deb5ff
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc
+A = 13116120bca5df64e13f31425450c7a577ad7fe
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc
+A = -13116120bca5df64e13f31425450c7a577ad7fe
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff8
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff8
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff0
+A = 4c458482f2977d9384fcc50951431e95deb5ff8
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff0
+A = -4c458482f2977d9384fcc50951431e95deb5ff8
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff0
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff0
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc0
+A = 13116120bca5df64e13f31425450c7a577ad7fe0
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc0
+A = -13116120bca5df64e13f31425450c7a577ad7fe0
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff82
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff82
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06
+A = 4c458482f2977d9384fcc50951431e95deb5ff83
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06
+A = -4c458482f2977d9384fcc50951431e95deb5ff83
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0c
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0c
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1a
+A = 13116120bca5df64e13f31425450c7a577ad7fe0d
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1a
+A = -13116120bca5df64e13f31425450c7a577ad7fe0d
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06c
+A = 4c458482f2977d9384fcc50951431e95deb5ff836
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06c
+A = -4c458482f2977d9384fcc50951431e95deb5ff836
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0da
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06d
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0da
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06d
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b6
+A = 13116120bca5df64e13f31425450c7a577ad7fe0db
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b6
+A = -13116120bca5df64e13f31425450c7a577ad7fe0db
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836e
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836e
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06de
+A = 4c458482f2977d9384fcc50951431e95deb5ff836f
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06de
+A = -4c458482f2977d9384fcc50951431e95deb5ff836f
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbe
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06df
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbe
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06df
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7c
+A = 13116120bca5df64e13f31425450c7a577ad7fe0dbe
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7c
+A = -13116120bca5df64e13f31425450c7a577ad7fe0dbe
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fa
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7d
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fa
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7d
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6
+A = 4c458482f2977d9384fcc50951431e95deb5ff836fb
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6
+A = -4c458482f2977d9384fcc50951431e95deb5ff836fb
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbec
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbec
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7da
+A = 13116120bca5df64e13f31425450c7a577ad7fe0dbed
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7da
+A = -13116120bca5df64e13f31425450c7a577ad7fe0dbed
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb6
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb6
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c
+A = 4c458482f2977d9384fcc50951431e95deb5ff836fb6
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c
+A = -4c458482f2977d9384fcc50951431e95deb5ff836fb6
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed8
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed8
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db0
+A = 13116120bca5df64e13f31425450c7a577ad7fe0dbed8
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db0
+A = -13116120bca5df64e13f31425450c7a577ad7fe0dbed8
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db0
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db0
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c0
+A = 4c458482f2977d9384fcc50951431e95deb5ff836fb60
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c0
+A = -4c458482f2977d9384fcc50951431e95deb5ff836fb60
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed82
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c1
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed82
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c1
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db06
+A = 13116120bca5df64e13f31425450c7a577ad7fe0dbed83
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db06
+A = -13116120bca5df64e13f31425450c7a577ad7fe0dbed83
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60c
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db06
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60c
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db06
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c18
+A = 4c458482f2977d9384fcc50951431e95deb5ff836fb60c
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c18
+A = -4c458482f2977d9384fcc50951431e95deb5ff836fb60c
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed832
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed832
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db066
+A = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db066
+A = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60ce
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60ce
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19e
+A = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cf
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19e
+A = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cf
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833e
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833e
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067c
+A = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833e
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067c
+A = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833e
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfa
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067d
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfa
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067d
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f6
+A = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfb
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f6
+A = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfb
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833ee
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833ee
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067de
+A = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833ef
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067de
+A = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833ef
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbe
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067df
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbe
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067df
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7e
+A = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7e
+A = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf
+
+LShift1 = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833efe
+A = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7f
+
+LShift1 = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833efe
+A = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7f
+
+LShift1 = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067dfc
+A = 13116120bca5df64e13f31425450c7a577ad7fe0dbed833efe
+
+LShift1 = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067dfc
+A = -13116120bca5df64e13f31425450c7a577ad7fe0dbed833efe
+
+LShift1 = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf8
+A = 2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067dfc
+
+LShift1 = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf8
+A = -2622c241794bbec9c27e6284a8a18f4aef5affc1b7db067dfc
+
+LShift1 = 988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7f0
+A = 4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf8
+
+LShift1 = -988b0905e52efb2709f98a12a2863d2bbd6bff06df6c19f7f0
+A = -4c458482f2977d9384fcc50951431e95deb5ff836fb60cfbf8
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e0000000000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c0000000000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c8380000000000000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b41386190700000000000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e00000000000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c00000000000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c83800000000000000000000000
+
+LShift1 = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000000
+A = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000000
+
+LShift1 = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000000
+A = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b413861907000000000000000000000000
+
+LShift1 = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000000
+A = 1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000000
+
+LShift1 = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000000
+A = -1569d01c96acaadb32211d67966be2fa35d07b46768270c320e000000000000000000000000
+
+LShift1 = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000000
+A = 2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000000
+
+LShift1 = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000000
+A = -2ad3a0392d5955b664423acf2cd7c5f46ba0f68ced04e18641c000000000000000000000000
+
+LShift1 = ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000000
+A = 55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000000
+
+LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000000000
+A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000000
+
+
+# These test vectors satisfy A * 2^N = LShift.
+
+Title = LShift tests
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 1
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 2
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 3
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 4
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 5
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 6
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 7
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 8
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 9
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = a
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = b
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = c
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = d
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = e
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = f
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 10
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 11
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 12
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 13
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 14
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 15
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 16
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 17
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 18
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 19
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 1a
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 1b
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 1c
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 1d
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 1e
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 1f
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 20
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 21
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 22
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 23
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 24
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 25
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 26
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 27
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 28
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 29
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 2a
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 2b
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 2c
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 2d
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 2e
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 2f
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 30
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 31
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 32
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 33
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 34
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 35
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 36
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 37
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 38
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 39
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 3a
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 3b
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 3c
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 3d
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 3e
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 3f
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 40
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 41
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 42
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 43
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 44
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 45
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 46
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 47
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 48
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 49
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 4a
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 4b
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 4c
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 4d
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 4e
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 4f
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 50
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 51
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 52
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 53
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 54
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 55
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 56
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 57
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 58
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e00000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 59
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c00000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 5a
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b27800000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 5b
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f000000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 5c
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e000000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 5d
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c000000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 5e
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b278000000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 5f
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0000000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 60
+
+LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0000000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 61
+
+LShift = 3193d0c10abab29b960da016fa3266c117520db0bf45b2593c0000000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 62
+
+LShift = 6327a182157565372c1b402df464cd822ea41b617e8b64b2780000000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 63
+
+LShift = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f00000000000000000000000000
+A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
+N = 64
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 1
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 2
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 3
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 4
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 5
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 6
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 7
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 8
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 9
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = a
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = b
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = c
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = d
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = e
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = f
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 10
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 11
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 12
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 13
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 14
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 15
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 16
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 17
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 18
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 19
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 1a
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 1b
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 1c
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 1d
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 1e
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 1f
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 20
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 21
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 22
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 23
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 24
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 25
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 26
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 27
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 28
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 29
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 2a
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 2b
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 2c
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 2d
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 2e
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 2f
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 30
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 31
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 32
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 33
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 34
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 35
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 36
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 37
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 38
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 39
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 3a
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 3b
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 3c
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 3d
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 3e
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 3f
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 40
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 41
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 42
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 43
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 44
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 45
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 46
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 47
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 48
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 49
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 4a
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 4b
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 4c
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 4d
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 4e
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 4f
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 50
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 51
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 52
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 53
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 54
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 55
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 56
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 57
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 58
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c0000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 59
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b2380000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 5a
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f300551844764700000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 5b
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e00000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 5c
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c00000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 5d
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b23800000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 5e
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f3005518447647000000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 5f
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e000000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 60
+
+LShift = 1d1cf8b5ccbae667bd05797fbaf9d4c1ff623cc01546111d91c000000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 61
+
+LShift = 3a39f16b9975cccf7a0af2ff75f3a983fec479802a8c223b238000000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 62
+
+LShift = 7473e2d732eb999ef415e5feebe75307fd88f30055184476470000000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 63
+
+LShift = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e0000000000000000000000000
+A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
+N = 64
+
+
+# These test vectors satisfy A / 2^N = RShift, rounding towards zero.
+
+Title = RShift tests
+
+Rshift = 0
+A = -1
+N = 1
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b36380
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 1
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9b1c0
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 2
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365ecd8e0
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 3
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c70
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 4
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b3638
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 5
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9b1c
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 6
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365ecd8e
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 7
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c7
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 8
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b363
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 9
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9b1
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = a
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365ecd8
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = b
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = c
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b36
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = d
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9b
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = e
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365ecd
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = f
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 10
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b3
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 11
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd9
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 12
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365ec
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 13
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f6
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 14
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97b
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 15
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cbd
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 16
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365e
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 17
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 18
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd97
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 19
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66cb
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 1a
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b365
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 1b
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 1c
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd9
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 1d
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66c
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 1e
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b36
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 1f
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 20
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596cd
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 21
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb66
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 22
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b3
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 23
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 24
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596c
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 25
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb6
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 26
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565b
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 27
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2d
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 28
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d596
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 29
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806acb
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 2a
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403565
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 2b
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab2
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 2c
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d59
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 2d
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806ac
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 2e
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa5740356
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 2f
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01ab
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 30
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d5
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 31
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806a
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 32
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa574035
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 33
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01a
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 34
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00d
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 35
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae806
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 36
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57403
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 37
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba01
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 38
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d00
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 39
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae80
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 3a
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa5740
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 3b
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba0
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 3c
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d0
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 3d
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae8
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 3e
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa574
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 3f
+
+RShift = d9ce8dff4f2f39c216ea39a461080552ba
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 40
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95d
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 41
+
+RShift = 3673a37fd3cbce7085ba8e6918420154ae
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 42
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa57
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 43
+
+RShift = d9ce8dff4f2f39c216ea39a461080552b
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 44
+
+RShift = 6ce746ffa7979ce10b751cd2308402a95
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 45
+
+RShift = 3673a37fd3cbce7085ba8e6918420154a
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 46
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa5
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 47
+
+RShift = d9ce8dff4f2f39c216ea39a461080552
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 48
+
+RShift = 6ce746ffa7979ce10b751cd2308402a9
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 49
+
+RShift = 3673a37fd3cbce7085ba8e6918420154
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 4a
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100aa
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 4b
+
+RShift = d9ce8dff4f2f39c216ea39a46108055
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 4c
+
+RShift = 6ce746ffa7979ce10b751cd2308402a
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 4d
+
+RShift = 3673a37fd3cbce7085ba8e691842015
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 4e
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100a
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 4f
+
+RShift = d9ce8dff4f2f39c216ea39a4610805
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 50
+
+RShift = 6ce746ffa7979ce10b751cd2308402
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 51
+
+RShift = 3673a37fd3cbce7085ba8e69184201
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 52
+
+RShift = 1b39d1bfe9e5e73842dd47348c2100
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 53
+
+RShift = d9ce8dff4f2f39c216ea39a461080
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 54
+
+RShift = 6ce746ffa7979ce10b751cd230840
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 55
+
+RShift = 3673a37fd3cbce7085ba8e6918420
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 56
+
+RShift = 1b39d1bfe9e5e73842dd47348c210
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 57
+
+RShift = d9ce8dff4f2f39c216ea39a46108
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 58
+
+RShift = 6ce746ffa7979ce10b751cd23084
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 59
+
+RShift = 3673a37fd3cbce7085ba8e691842
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 5a
+
+RShift = 1b39d1bfe9e5e73842dd47348c21
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 5b
+
+RShift = d9ce8dff4f2f39c216ea39a4610
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 5c
+
+RShift = 6ce746ffa7979ce10b751cd2308
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 5d
+
+RShift = 3673a37fd3cbce7085ba8e69184
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 5e
+
+RShift = 1b39d1bfe9e5e73842dd47348c2
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 5f
+
+RShift = d9ce8dff4f2f39c216ea39a461
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 60
+
+RShift = 6ce746ffa7979ce10b751cd230
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 61
+
+RShift = 3673a37fd3cbce7085ba8e6918
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 62
+
+RShift = 1b39d1bfe9e5e73842dd47348c
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 63
+
+RShift = d9ce8dff4f2f39c216ea39a46
+A = d9ce8dff4f2f39c216ea39a461080552ba01ab2d9b2f66c701
+N = 64
diff --git a/test/recipes/10-test_bn_data/bnsum.txt b/test/recipes/10-test_bn_data/bnsum.txt
new file mode 100644
index 000000000000..4c925ea18a9f
--- /dev/null
+++ b/test/recipes/10-test_bn_data/bnsum.txt
@@ -0,0 +1,2626 @@
+# Copyright 2016 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
+
+# Sum tests.
+#
+# These test vectors satisfy A + B = Sum.
+
+Sum = 0
+A = 0
+B = 0
+
+Sum = c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d
+A = c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d
+B = 0
+
+Sum = -c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d
+A = -c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d
+B = 0
+
+Sum = 0
+A = c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d
+B = -c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d
+
+Sum = c590e57ee64fced3ca84d4bb013bba7d633e68b2ff4e27bf1db43f386dbfcce501f112b7fff6fb9436a576ccfccce12867becf02b91961453ea41f414764407d
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 23f85668bf4d0fa273d8c7f63c5fee57811062a674111e295a73a58e08dd0fd58eda1f473960559d5b96d1862164e96efded31f756df3f57c
+
+Sum = c590e57ee64fceccd54e0bdc52476a756d32e794922dca0acc780d2c6af8852351102b40dfb97009f95e019a5bf38e5d127aa78bc34425edf96f763084a8b09f
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -4b5b16252ba2355e0b87f01baa721783c403607a4c1b5652c09a68e96926c8e314fa580bf0ad3f8f59bd70f14df86a4676661899b54c79a62
+
+Sum = -c590e57ee64fcec882fef3ffd015a3fd9024d8f5f6d53eb537d6abdb0ff5e76a8fb08d5feed113fc9e74745d957adf32704a08339ba42efd5746c5d478e3f57b
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 908007a2f3c551c58958d1059427a0391d4d768f61cb802e4cb062c778354ea3eaa8f0dfbd14ca8203e07ae6d07269b58088a39f7608c5586
+
+Sum = -c590e57ee64fceeb242f8a0893eaa0d2ccc3dc57ec40fe917cfde66618fba678ce0c8fffc566d4e8c7944d6443def8014fe8ee410a1b8dfd06cb0b436619e0dd
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1999301bd9877fe07ca711f308b2f1bc4a704fd194ec4dbc297355d6285340d6ad7e90cb0add1770aea19737a06750c3a7a6fa0b778ca995dc
+
+Sum = c590e57ee64fcef321395bba088ca0a867e1e85a1ea77478f8783e6a6cf8f3e582bff83cb2d7d9fd549fcbb40dea22ac140351007030059500bdca81413600e9
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 219639ed8afc21e052422fff0ae5583231ebca2999404b099628093e6540b1dbc20b9c495aa7229b5965b19a5fcd653b3fa0eccab567c5b5e8
+
+Sum = c590e57ee64fce834a00cc6282cb0eef49eac7a8d5b51988cb49253ed85ae261c76f2327a691fc63eceab02614807048b2816cdb9b89ca66a17b6ed1abdab580
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -4e40fea1cc899fb166dbc721a6639a28be4164ef92545307ed934796afcb9401d75c18d23352471709fbd049c50740ffeebe5590fa2d959581
+
+Sum = -c590e57ee64fce1a17609c61ce02f1020c6eb6e241e3fdd01546ce7247725589de32db95f36718d410f9ce9a94fecc8fb205e876fde75ce83f4d01e1bd5d818d
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = b7739ed1cd3e67cf541943326cf76b4476f767465ee53b94c57c83de417ebee5673809b3bed1c8bac2fc4bce29a4e36d6d2083fdea1c12c974
+
+Sum = -c590e57ee64fd03e2d08c3d8e5110d08e3d36557d82e0e49b408337a8c9d4298802ae5f0145a9587531a70d2f8af932b8262245428b5c549817d333f2dfaeeec
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -16ca20955a9d8a64cb2be217c089edecc02a75a1ea95fef584925742c18a234974c0a16ee7991e80bd8d4106db385eafaf421ac3373548aa3eb
+
+Sum = c590e57ee64fd1bcac71b5b055e5934ba15dd7f56370063369c36e57a6b753269e085d0f4d38bfb711d5579dd1d89d07f266e727b232a497d5b0d9bfbc02d8a5
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 2eb21724781497ad2f57babeea62a20c3ec5d1559867a0968d74351a337db12c17bc8d1d5446b1115b5441530870f67da4275dfd9f3e2928da4
+
+Sum = c590e57ee64fc7860b0be6ce861bc2f099db7fb623912b7b0729c019a8183c669c73efe02b195483a4cd2c78244cd59678ac4d62f6887fe686a3eed37ed460ff
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -74b7ff38760864efd658bd6699915be16cc058454b78495ade8be42c9f7470ca9b7a43655e1427ab1bc35a5693dac424a6ed92d10f85a9bea02
+
+Sum = -c590e57ee64fc3126776e79d9fca06233bd2ef5570a65e4521183627bdbdbc555e9118508cf63f519bc0caedbffd5b1a913ee8c3603804820a9ce54b1207bdef
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = bbf238886916ca0ba32e9def9f9c8a8e401eb95dea96ef02df9fc25a186e52fbee9ad42b76ba6ca2c381d12cddd4292c5d355341a80c7688d12
+
+Sum = -c590e57ee64fe6dfd728dfbe45aee52380b5a00cf1e05e9f09ac582e2714bb589caf2ad038111c5b1b5573a45706ab1f6fd5d5a1ee7ef4a9bf186dca8a9ede12
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -180e4c29718f394424cd5b03b6bdb8911c57fcfe435cfa66d10941f870f8c5eb1e1fd251f14af03f23ccc1841f014bb42a545f476dfeb12e9311
+
+Sum = c590e57ee65004b3e18a5820de4a6d25e7c3d310003e0b8716bbfd51d5f0f3e87fdf8e00599d713397255281e66ef419a9d9bb228e8f052764f5f861ccca656f
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 35e2568ae9f1d1dfaccfc211e9c0c6eec9400a0de880a94309992528d428e77772f84e21d0287fa76cc6fb880481ebc43ad20524f895f35a1a6e
+
+Sum = c590e57ee64f84896a5f11f575d34b6001f27d4b4d6e7cd9485260629f8f7f1c6ca6f6115b98d776774295dde4d59cdbbceccad097a0a054b501bfb47d81e85c
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -4a4820a05c39969774f623bf6c03ebe0c56dc45bb46e8d1e6b32ee0fc3c6168d26c4d1c0ec7b81f1ea76f164ebd00b2a2a00aacf40175bee62a5
+
+Sum = -c590e57ee64edf1b2b57b4cbb92d778ea6b9d9878a0374d4ea81691b09811b105bb6dbf23a57d89264f0e6c83f8d00fe00681644feed56e15fc81103ab9b7dd6
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = efb65fa7b963533d48c77ef80fc7af4bcd72222cabb6232ccf3efeffdde537ce25a8e4129b91273a8654ade9a05ba3dd73740008eec82dd4cd2b
+
+Sum = -c590e57ee650e25da7b60146e014f472bfff9809aa8f519db7943f69d9ad09ee75a3427c6127cce7bd27f224b9dec03111fb066956b4903f9f9740cce1aa4ba7
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1138c1cb69317d3aa341c9a4daeba71400f56aae62a98acff1f9f1aec88a4ef01ceac74246fcb531738de63a94fc8b3e9c5ea3fc64101083a00a6
+
+Sum = c590e57ee653af8752322840ed720f628f9674c81073b58372e49ef26d4a2a9d46a0391bc170336614b27849de98709a4b321da4ddfb978e9f10df29154edb9f
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 3e0b5c732ba11e1074f0c69e48b78d724733c66368a21409c404debe97f444f4a352acbaef5f077d0e9479ce067043b30cd393f3fdf5d3bde909e
+
+Sum = c590e57ee64bc13634cbd149aae35ee47bde6ea3663f74ff300cfdb2d845f902f017586c6d4f83f08c3b4f0c035055d13fc9d340b7b9ed164432aed44e8f4d7c
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -40d9b56339ce561876171a9d37aabd30fcd47dca1171e5467f14c6a9f616b04d67a4abcc8334d637731816e87e35feb10dd3f1b9e50f78ae0fd85
+
+Sum = -c590e57ee6477eb692705f8da1357e71591336907a5e0a6e39715088d53b2610882765357563fd101bcf05ca545a0c718f52879fdf4f80cb9a12cf108eca60ed
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 8501af88f0ea16b3541e4cc9eb2bebef137d8d33cc4485772c43ed28f54a1fcc2012b2d347c8f126d7ae11eff2f00c37b4989c5be30bb4aa5ea14
+
+Sum = -c590e57ee669b662e37f5abf13d00d2f0c1c9a8b99ec546361aad255f375bc2742a3487c351c5ba00efef09c77331577460a47c57125c620b643e9eaf36a146b
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -19e791587fec9007654cd8e66ab13c609d121c54fcbd84c6c7d1d7e7ec8ea4c2f65d64c5fb6e43106b8e2497b89124ce5afbcb5672ea1f19f9c96a
+
+Sum = c590e57ee681dcbf1554f22c0b1ffead917dd414299cb37ce6967ffec9c333931e70358729843c8130ac95aba47fa1fa5da74000eff25eecae176f093a4effca
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 320ded8a5583fcfeb53e576bcbeac4f04d7135d9e86b2d9d154943c3b97bafb75e3e45e7a913523db81aa7af5589604d2794974e466f3d60deb4c9
+
+Sum = c590e57ee5e505ae4a2e1f25a1ae9b7b4d17dd2cccc09f2416d964e55af6d0d31fe259c160f87646a72e6732d5110256b3b35425225d622b81418435c9dd8cc4
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -6ac92340d14f096abc24dad89a0c226c8ea322f5d4afebd1b7197c3ad46016112d87f4a1d51b2691b684fbfa9e627b806d6829de8f7b960f92be3d
+
+Sum = -c590e57ee58c3ef1582bf7a516e36f92b60f5a587e2c8cb071d1d52ff215854e52de1519fd5204fa52292dfdc397d8d76b78005941358b63a3e6ca41b0eb09b7
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = c38fe032d37689f58750c36fa28ef6bb22b5969adc3fa13a98650107d8a4bd74d3f940f6da545ba32fae7b42d9b64761953ef1bbea358a2885414a
+
+Sum = -c590e57ee80262967da4038a143f8ff2e78646108f25ff7183444ba507d76f9b05a34c8310e682c05495d0863ceff264964dbfa7c064adf6d26d2dca6e22ab13
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1b293c4f2a4955b07d4cf9cc1d45cc155d6bd2a769636d3db29854baaec92ab9ec084850b924e2cd6286b11e7fc09071d99e3a1729c2dfe94b26012
+
+Sum = c590e57ee85427f08e8c89ffebfcc05c73370ad4cb77696c2b2f3878e6f6df341d4d931b5097aba49f14ac0312e7da1c843d6fd08119822e75e6e7a8c7bcb7b0
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 204591f038d1bd0df9200064d852185922827251e8123a7ba48f4e4c296d943de71ad69561129a9ac2052c9d5ebb92fde4eb7d91615e7dcee4c6caf
+
+Sum = c590e57ee051ca1a363c47a4cc016c3de7f7e17985009b545528289e9fbc9086f4b42a73826eca0c278b0d1b4ef6d74b9a0bfcb7855d40fdb201fbad1074b927
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -5fe04b754c3268a406954183dba07d5b44ea6f2b785ec328cf159c866028f63efb7342f2178753e17d0b0071445b9e91d6d8957adcf041ec8fb91da
+
+Sum = -c590e57edcd6e9ef06fe33f3817ba3d0c50c8122b77615c4b8fa50c5514f113d7ba53ce057d487bcbc373c4384d07b29a527b7ef785ca609474879b42a9a4c3a
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 978e4e284013a3b8aef1c8560a5682c81d92c8253b3c40bdb5ed911df117cf71a51767e8ccc4615e1f70c290929feb12a6e244c18888617aed5fec7
+
+Sum = -c590e57f0436bdceb586a093522eb1630e0fc08f8790957aba1875a42b7676f9ca936e8f6f3478d6ef5cd590bf6ded0700440dcd769496822af8015f0a6ba2b6
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1de6eefd2a87326445c3f10ce85dd7404e415333ad6a60d2fec88caa6fdcb4b7fd0e7a9ba659533758a665b451f2572cd3c9cc2ccb27019330fb57b5
+
+Sum = c590e57f1df3f004d5e49f49fa28603b26659f1fd35e0d8d7a2753591dbc12c51e6b588427dbe3faba2f0c1f2f0a2aea9ba1fcb2fe71c6ff40555058d23c8661
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 37a421334ae5311aedbd9fe500b3b5d09a0ecb466d793e87f10e2875c3b49eacb5b5e5bf712b89c5c842a397ed5046125ba6fca9e084508cf8cc3b60
+
+Sum = c590e57e9a4abf4572fa7c4c9f73e9d3fd1227646fd6d15b51924bd7a5d417b01fe6b4273eaa6ece387422b81c8116f29702d7d66d2f6e8c3454807b3b7d413c
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -4c050f8c1804f1e26cf6d682289fc1eac97870ebbb1bc8f986d9d29f3ad005b0337b8f6d108f5fa14a467060174edeca359b5bc92b7c7f509df309c5
+
+Sum = -c590e57e64216c306f17017ac9dd7085113e16c83168664dbb77c7ad3ddfc79b09f9ea0c474a0b497ca15e7fb258eed9666fd009f691a3b2d691c2c6b22ba3b3
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 822e62a11be86cb4428d4fd11473d28707e6dbf951364d23eece22b450bccfcb2adbf2f1cc6223d9b46e987947e1e696ac3926a2893f3d052744a74e
+
+Sum = -c590e5806ab4d09773c4f94a4aac09f6ed7609eec1d0bafecb09e30f032f706e9adadc191ff9e6d7dccc821f7a8666a590e521749d24912c5a5ffeff246f7c85
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1846501c5e8c58b1b3e4149a0c7c4209f888178b7be5bce3dd681861f40242241add3e89c93c8ffc613bedf52e2936ad3fa59c6d6fa8eff334aff3184
+
+Sum = c590e58248cbf5dd61ec57994fc862ab479dc6cda51cc17356c45cef66bbfdd12f5cc421940a561581c123fb17483beb7a1cce2596fa9ca76e722a6f4621eae9
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 3627c270bd6ece96a435da25521ebdd7e6bcd7f2c4a16481e3a0e1381d4a60a4a21e457da38bda1a1b080b498cbcb1784f42fd2520ea12aa36cb19fe8
+
+Sum = c590e5771a85bdb1f26c0386ce837bec4b0af5656496efdf4f134d875f066dd6d477ca8f87ffb275da07da4dd1bed4232849a526836b47f2d69f2d53b6b3e2f1
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -7cbca111f98936aa83de74469daa6f3e9d4b85267bd9ac749cda77c78863eef47ea264bc56efba80b9508b32f8608117a1f5f82628931d27822bc6810
+
+Sum = -c590e571c76afad23439f904e8a80fc28dcabb6cb732e361ed3eef471be6fa755e3fe746edbfe448c1f289ffed7dfc01fe9066d780564f57f93abbca9b9a995a
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = d1ee4d3ff56c5752a23c2b09397e72de2821c5ee51f6f258a10c6efd9fc76d290846619f28710f85979498b50afc14fc922747afd669644013dd5b1a7
+
+Sum = -c590e598cd5d4a59ff5d6c97c6370fb517f1d492a7776f90063b0ddd6702e37c60fc78bb12857911cea37b7263584d7dc815676de6b8880200acea154b59b08b
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -19e70d7b88745dfe68b9cc4f5ef23feb436e282d48f98cf90c3a54f92d0645bee3a05f7ad6859ff918fc90c62b19c3b0cd43edbdaca0dbea4971e9658a
+
+Sum = c590e5b5829e6fceb77830fbe999a98127b50302fd0f6a86ea4aea27b846747a07e6fcf5457676e6446137d6bdd8ff4fb7ca747b650b066d65d7dc1e172488e7
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 369c4ea0fd2c78c2ccdd2ee92b020319b3c3c0283fdd9cd5568b988a2aad30431dd35078aafb5db57d571177fd0978bddac2403c180606dc523db43de6
+
+Sum = c590e52a3ab5d5c458634254e2f672a322000750741e969d2f6cd12d172480ad1455300e3a0575b068b85d50b58f9737be13073188d0f03b71494bd0fd2fea16
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -54ab99f90d329c2bda29744db303b1e1fec530aba9dd4143a4158969a2466189c93820888ae04b2508b137f01af03eaf6f19f9da19ee87b3fadc4060eb
+
+Sum = -c590e4880579ef7241bde94e8c7847badc705f53828751f9975f0e66371d2ddff8740b143f32e88be8e686e2bf5a3ce03d864d7699a813b1777b9239af242c7d
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = f6e0d5df5f494184e07ff2789b494189fbb6c7f04d754f066af590bc6f6242aec332f315af601cfb76a76d4a7270cb692a0922b6a3e8556d922a4c1e84
+
+Sum = -c590e6dbe54098694155509e38c61d503ab7e5237d2cdfc2b87fb57e3a8420fe37fe50a0dad4f0eae3d38fad6198e4ecaeae183a12078f53d09ac8099c715242
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -15cfef0c997b655e26f2c5b5cfa1505fbd443dd9d7babd1a0ad0dd636aedd4796c968aef2af9ad00d53fad15d9a005c61996f3cc4fe70c9c83dc3010741
+
+Sum = c590e906254d013be2021ad591e76e26706a6815b8c484b6528fec65416e1066957002713e1183f1005f565983aad7aa031e549e6fc57094ca3e4383e7fdbc15
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 3873efd326a5702aca6857cadd04ab87ec67f75426f45e1d79414c026173ab94899cbeb85b5b75bd4001ce3505754cc9dfdccfaa63f6a6d43b80e8d7114
+
+Sum = c590e0e0079190d7afd80acd6326fe93cc00903318608df31ee4493d11271dac7291bd142cca0e5dd7dda59dabd460a69b7855d9c2acb5f062de76665e07cbd7
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -49edebe3df9db276361a943c1c259b1591c20eeb453edc9cb941b86cca2e824fcc3455befdd7125dcbbbaf326ac12d960c6e01e1464fcf289657b687f2a
+
+Sum = -c590d9ae456d66c1b132d844eb223867ba4560b36f53c42a616cf8cc657e6d252f813847fb9fc50127227684e5c0f5cd890eceb341d21e788e42f843e9b64080
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = bd0a0e2680fd9cc95ea214887ee6b6c889bc9fb7e1cab411c04c72f7d2a2b35818f7686393a21e10bd4810691852542e7ed60f8abdcd18e0787efba0a81
+
+Sum = -c5910498291472fe1d0047d5bdd9e46deb3f26000e943fce8d83d700d9ae233ab3a28849bbb346803da142db6a471e9f79cd49571f40dbc46f7b727a4bb3016a
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1f1942c4a42c9200d9a6b16f2417c58d3cb0d544fd8780d5c22fad0038eb58ebce72498d4844f49dc082037f974ccb7b92b67c76116f0faa72ae7242b669
+
+Sum = c59112d841ea109440e78563d9eefef201c81e86ae967083f8b7db80d1eaf58551d30519ca6dd79164fe69a29cf1ba22446cb2999f73292241005bf17b37528e
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 2d595b9a41c2b5e81734cd843e9bdc16353775472e3cec09c6afa53d0b35f71c4b425847d9561bfae749362a32cf961afbf8fca85ecce12f5c25a1c7078d
+
+Sum = c590671f890ca06c74ac6d2c4d75aabeaaa55312e85a5e1ea9cef0e08e154e2b090eaba869e9f6e4a47ae10b9c1eb0f6ae4fb3ef12b3121d96066c6c8e592b6e
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -7e5f5d432e6516530102bef515977b0c963c50f4e42862df23f09e989c2451a80e2f083c0756a488a14dcaa8d65c000202b19017b837c9ca935f4b171f93
+
+Sum = -c58ff0ae92ab03072154949a7143d45278ef77a0ba71a785d5a370e0d30a9b4b4f7e96a395d13e6afeebbd717365d471ee56ba11c472a63c0532558104bedfc5
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = f4d053a4cbca69aad9949b26ec03acc271ae7edd9ac1370aa3f059a34f040b382333dc54bfd04a17c4e7f361b2e0bffafc8ede5824195a9eaa4ad4b16b3c
+
+Sum = -c5927a5fcc3b31abeca3998ad99c07626112288a6ad95b24929fed581040757fdce73881c48b02daf09986ea436a3f5ceb6833c31fa2e1691567601a26c7a6c9
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -194e0e5eb62da61a42b5bcd31470c3b603f3b318a18dd85f1d886e3928b3082307eaa5265049fa7960490dca2b80a3d167d227cd81713b596604e4d575bc8
+
+Sum = c59395e94d495451e3fea153f3e4361a088004a7d5426c1b94aec44108ad6f5cecc3a80dda0cea9f51b882747258137e171bf021b4fc59f4dcf0106d4ba952fa
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 2b06a66f9858058ff3324e77975c3e2ce1b589bf329d48800af6fdbff850d920cee3667e6ec6408b5001b0b908c2b68ca398112318f9f7d1f10a1723907f9
+
+Sum = c58bdb26c0fd6766f3affea389cbe7db25c06d5d56356d3d945347775bddf479ffc9e279e7d1ee88eddb239906749815ae4502fbbc6fe978a001ccdafd89cb10
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -50a582552676a974f6f8b829ed87afff17bf1e319d509785acd59d0cff5d55aecd75d8a540fb25b285ec06052ef3d000cb3a4e65ae0dcbfcf32f0dbe67ff1
+
+Sum = -c581afe9b7ae86d4b7053f19649beea6cb935799a553f035f9b9a7fba6d5559e4ecdcd1637c73c8052c6cc52ee1c28d1e5aed9db7261b7356afd6e3dbc213684
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = f35952ea147fcd3fa2f15a7ced1af5a1e91b593fb521112f46cd585d894b10be8ecc13a5ec1baf63cb60678ab5e80c8a2dcc53069131ff4d3918e1d4f147d
+
+Sum = -c5a19f36a65a6a8d52a53a63f99a1b957d6e376b7010ad14695d78d67b0d7c86881006188bd27bbf205c8c9c200dc8f5c08ab6b97dcd512f6cb93ed9a361ff9f
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -10b9b7c00a9bbbc7a5cc34ed2f5b3f57bc4e1c36c16acd5caf64054e5f92372d594c4119ac7d83d7590a42b94641a312390018db0286da0ce83f0dc9f1b49e
+
+Sum = c5cd0e5da24b67a894402b0eee5dd586ab70e5beb0693e263a54995193663a9b770141379c1f097a49d1a889bbf0c348c6f40ed50bd7bdc11a7869c6106c6d80
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 3c28debbfb98d70940bcdfe1f3153085befc6f7719fbdf2da6848066b8504c1c4a876029f90b3f00ce263055293bf618a25834690cf36bbaa769fa36fc227f
+
+Sum = c54e2c560a00226701b76cf03d5de27a8c69b38a6b85dad9f7c903d2e87f9a7d247522e72491460f6a529e5ca2aaaf690cb238b873ffb49d9fb0ecacfedd4e90
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -42b928dc4fac6a8948013ecf0cdddb994835c4cdc9676d14e510fe442e4fd2364196f04d94b82bdeb0e3fcc41cd7e9a19f7de82ecb15b7c020131eda92fc71
+
+Sum = -c4bfb037f6e6e861efb090ee610c33e7568790259f747dc6e55d442aadd68c0cc93c7617f83980e8813c0fb7dd28c8aaca6ad8fdde5d2bfec9ae096faa9ef54e
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = d13546ef68e66f9b4edd40ab5e8c6ecf2a592999dac4802750d0a67ed75e42917a43bf79ec7d52c7c772a1899ebea7e3e6dda2c46d9e569622f65c2ed155b3
+
+Sum = -c6aa2af8c9ae8be4aada83f66b7f31a8bce5e92c67d8938424a1405903e5502bffc4ee1e333da4bcfd0cb383b19a566372f877a8344b66dbceabc9786dd0e4f2
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1194579e35ebd131fdb15c75f1471529733ffdd2e89513d17f32b87d73765dca50e3446c117a681b409312a4ad2cf10c4a6c10791809c866edac9ac946099f1
+
+Sum = c8aff66c9bdaa49eafac0f65d3ddff223b7a5471f7400431ca3a54615d600fc4a163f8fb648bddb5fd6915db1991611805040e0f86f152c8fd3333ef70d632e4
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 31f10edb58ad5cd24aca136c7733ecc15c86b22bdf0c1eabd8c3f9030b2257546ad3f23f265df7ab4659381b2c9d9c556b2576ee42688739d6234239765e7e3
+
+Sum = be1b6eb768e2cef388eebe31f9b21e51b38b351cc8175eba06d49eef04c2936f32167174dcb82297fd4180d0afb5da2c455d158c7a5bf01bdef8c295a4f20390
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -77576c77d6cffde0210affd12b8a2047226b4327137e38d05d975e227eb56e028a04862956ddba34bc20188b711ad2668f4a114286eda3980d83d36347e4771
+
+Sum = -ba32fca1d5cc5f31ecaf5407f376d3aef9f4abc04fd4c6893721d3e50e9141abf356eb2ff6f7a4f9b42983148670d2918e1dff7aa7ae33a6e9dadcb708b4f9dc
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = b5de8dd10836f9f9e501a2718f3eca72bbd3d8ee97a7bbdd58c40ec1e1ca8a3675fcea77b2e594194d9ff44e056b4c12033b725fb1c96ae75f62314d0bb5125
+
+Sum = -e388afbf17c495f86aa7298a45f848eb57e5baaee42b1f7de8c2311bfbb8f74549712c05fd3bd11ab8874fb55abb22a37ba3512e733ecd5c472842e8e6f7b179
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1df7ca403174c726dfa7bb5b398d88953233d15faadbdd36dc141c4acf0b0cf5eeba722e8b15d2df6f83cd5bf3f39b50cd519a8dd0740306e757431d0d876678
+
+Sum = e891babe65ee02c02e7e876c0df3dc3bb37491008f3642ca7affe2d623fa82a6d5a9e5400944a374ab70fbb8f952dad0c8b27c77475b0dfec7b0694051dcd1f4
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 2300d53f7f9e33eea37f193d01891be58dc2a7b155e700836e51ce04f74c98577af32b68971ea539626d795f928b537e1a60c5d6a49043a967df6974786c86f3
+
+Sum = 4dfc2f63d60f83fb1d397d2406b02a3b25c1a57c09c2fe02c76696b7c956e44facdef11470074d8fd8220c7bf8e647ba873fe9c3f9e77d6aae7b5fb64f1cf566
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -7794b61b10404ad66dc5f10b05ba961afff043d32f8c444445477e19635705ffadd7c8c3021eb0ab70e175dd6de13f982711ccdca8e34ceab155a0158a53559b
+
+Sum = -3c19bedc60e7d7dc3daaa36795e453d810c952dd5185fcdc857e2be806e520068dbedb91c4a1131b9eb6dcdfd500045209514e3e9f6e6df41d2ec67fba20e10a
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 897726a28567f6f54d54cac776866c7e14e89671e7c9456a872fe8e925c8ca48ccf7de45ad84eb1faa4ca57991c78300a5006862035c5c6142a2394c1f4f69f7
+
+Sum = -28c2bddfeffbdbdb1ec6f06aa310d1bb6f0c4b88d0106a1b381ae6fe8f65c18bd9895fcba6931ecf06d9dab6c7a3ac9e00361bf165f16bd16af25230d040cd842
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1c69af880196deee0616f987b24a25b60cb12cf3dc7b75f6c75005b17c9ae2e6e3ddf42e2f70beeb5249a29131373428d55100875bc4bf2c14f5423412a9c8d41
+
+Sum = 372ea360832e30b16a3c30a2157c8bddc4408ce0428169deb09bf68113e4b8482d887de1a7cfc80272e597c3f3f104e6825a1fd2a68b41cbc307caaae17d453e6
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 2ad5950894c933c4518c39bf24b5dfd861e56e4b4eec75ba3fd115340119d9a337dd124430ad681ebe555f9e5d848c71577504689c5e95266d0abaae23e6408e5
+
+Sum = -5b29f4991cad86845a50949f25ad6cd7c883d71ceec9795cc528f58a4a4aef9dc139e8e87cb82071e112b2d256181eaad0a98fa36b25b67dc673608939b48e08a
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -678302f10b12837173008b82167418dd2adef5b1e25e6d8135f3d6d75d15ce42b6e55485f3da805595a2eaf7ec84971ffb8eab0d755263231c707085f74b92b8b
+
+Sum = 98b37ecc0b42a15f52c8fc8bc2aba294031bc2dfa37dcba0fdf1f5f5da00b8b3daece033b47bf254e8b5e201bae24995034673800d53213f6ee0796be1ca93845
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = a50c8d23f9a79e4c6b78f36eb3724e996576e1749712bfc56ebcd742eccb9758d0984bd12b9e52389d461a27514ec20a2e2b8eea177fcde4c4dd89689f6198346
+
+Sum = -1c15985f3ee941d7ab6bedad88143cf497681424e7456fe30eafbdedfcdf1e927db124c775b87f36cefff17a35972ac40d498c4be818883bfc206f44c5e5eec23b
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1b500779c002f208d9e0ee3f5907d2344142623b980c20a0c7a30fd92bb270a82e566e0d9e46593893b6edf7dc30633cba9b3a954775bd71a6c09e44fa0c7e773a
+
+Sum = 34ab71257e63b234258027e26bd35dfa5e07f67385b6772c5ed445438478bef5a835e87c9de413e23839849a71f5af99a67427098b682bfb6becb66d20eaecb2e7
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 33e5e03fff7d626553f528743cc6f33a07e2448a367d27ea17c7972eb34c110b58db31c2c671ede3fcf08118188ee81253c5d552eac56131168ce56d55117c67e6
+
+Sum = -44f9508e3430f93d4e2c8be1b856f46c01d6940e1bfda8515c747a1a95239547322999e500e718ec98ed211ae04ffc76b0e6f2364ce9d913ffb80397f24ee8d64e
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -45bee173b317490c1fb78b4fe7635f2c57fc45f76b36f793a381282f665043318184509ed8593eead436249d39b6c3fe039543eced8ca3de5517d497be2859214f
+
+Sum = bea59d2cb0bf556876d4f8a248339af69644a12d3dc1d9a3d83929929b8db5aa26289bd06e2488a96820ea8f59168cc82f19b5dfaab20d245495d6e24bfb260a3a
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = bf6b2e122fa5a537485ff810774005b6ec6a53168cfb28e61f45d7a76cba63947583528a4596aea7a369ee11b27d544f81c807964b54d7eea9f5a7e217d496553b
+
+Sum = -166abef6a1682bef78d4c5905a833b81a03c0bf0f3735973bf7f02181a8ce5c7f125f41fcbb10c7f5905e492fc3f6b172f23d041620f8a7ac6f76e0c8a53d3cb5e8
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -165e65e84979c6f28bbc1599779274d59ad9b0d25e7fc47f9b0e3736cd7a1ae94c3048b42e39ea1f7551545ad6a8fe9eb9f8eb25f8055dce21a170fc8d963cc6ae7
+
+Sum = 3245e002843eb7116b987b5cf9160e6891a74a6843039f8517fbda68b0e6ad87fd0aa836a2b6aacabcd67d45d327e6cab43ef569f488354e22f4553eed09e83d601
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 323986f42c5052147e7fcb66162547bc8c44ef49ae100a90f38b0f8763d3e2a95814fccb053f886ad921ed0dad917a523f14104e8a7e08a17d9e582ef04c5138b00
+
+Sum = -464684d68716498baaa3744d20c112a854e148e6d004e4142c79f4e25a36c0acbff72c047925377f377ad690c63fd21a3f05911d11fb8bb79bec4ea68fef9f1d575
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -4652dde4df04ae8897bc244403b1d9545a43a40564f8790850eabfc3a7498b8b64ecd770169c59df1b2f66c8ebd63e92b43076387c05b86441424bb68cad3622076
+
+Sum = bb90e9e393538df233d499955020b8f3c9789b1f18fd5ba31cdcca6afe24842166e6cbf1985f7f9e002335be46de06ce11ffbf6dbfe743642cdeefca1a856219fe4
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = bb9d42f1eb41f2ef20ed498c33117f9fcedaf63dadf0f097414d954c4b374f000bdc775d35d6a1fde3d7c5f66c747346872aa48929f17010d234ecda1742f91eae5
+
+Sum = -1804d154182f4b71cab3529447ced41ac310a1d14121847816c74171759998b707db0f1f3a9d6f6e01a2de48ec83a45e5dc7d0ac9133c8e00ec41814e3d2818834f4
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -18040bc332b06521fbe1c794d99fc7b002ba7c1f57d24b28d48034c360c86c091d8bb46880c5fd48036795456a2a3d96d675225ada932615446eb843e406a817e9f3
+
+Sum = 3b75f0b892eb00075eb21961cc018a2d297764bf560cede3290cab6682a56931b831380b72a9afc3dff88f042ed5bd5d8468d8a1e267b36e508c09ccac2a565936e0
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 3b752b27ad6c19b78fe08e625dd27dc269213f0d6cbdb493e6c59eb86dd43c83cde1dd54b8d23d9de1bd4600ac7c5695fd162a502bc710a38636a9fbac5e7ce8ebdf
+
+Sum = -4b4bf674436c9b1079c2b24cdda19247d0db44061c562ab6f5300eac53556fbe758151824b6bc6bb63a958895fd7c4205cde5484a9fcbbe787fe38c3d36f4549dc23
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -4b4cbc0528eb816048943d4c4bd09eb2913169b805a5640637771b5a68269c6c5fd0ac39054338e161e4a18ce2312ae7e43102d6609d5eb252539894d33b1eba2724
+
+Sum = dd8af6a278a84889cab2d444efb282a7259a608117db26583287f051bca1b70c21f8c3d95b2f4e0b7d25b6966771a5c41414c386bf4491ef7b055b07455c12b5d8d5
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = dd8bbc335e272ed999845f445de18f11e5f08633012a5fa774cefcffd172e3ba0c481e901506c0317b60ff99e9cb0c8b9b6771d875e534ba455abad84527ec2623d6
+
+Sum = -16cac44109b24fd5d47dfb5994caecbbd534ee11178aaea4a100d9e63bb2c5ecdcafce1e2080eafdda00d26c29e01980166d8db67800e33027f5260d154efe1a98973
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -16cab7e7fb5a6170d790e2a99de7fbf5292f8bb5f8f5bb0facdc691b5a65b321fe0ad872b4e373db7a1d1ddbf1ba83139df862d15c96d9037b4fd0100552408393e72
+
+Sum = 22db04aa783edd3e1a55d263262805f2892c013f78ebb86239f2e5981090158f57bdf3bb171c2e0c1c7bf9bc88ab62683581f8b02c5bec8f631bb24ade9be235108bb
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 22daf85169e6eed91d68b9b32f45152bdd269ee45a56c4cd45ce74cd2f4302c47918fe0fab7eb6e9bc98452c5085cbfbbd0ccdcb10f1e262b6765c4dce9f249e0bdba
+
+Sum = -4c8c0b74eb7a79a12ecaecf885b9672ac717b1c8db5ad251f1551ce80af89acf3a495066c85a96e6430be8e5888ab1ef3edd5e76645b5914ab55d221c34d07f8d5ce0
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -4c8c17cdf9d268062bb805a87c9c57f1731d1423f9efc5e6e5798db2ec45ad9a18ee461233f80e08a2ef9d75c0b0485bb752895b7fc5634157fb281ed349c58fda7e1
+
+Sum = e3718adf0c2546c8cceb0e8c7d909deaa50b50f51d7b80f8040763eafbf581c017e7e12325b258503fe651ffa4c3d3ff9200515d816dfa3ba372dc937480d121ef056
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = e37197381a7d352dc9d8273c74738eb15110b3503c10748cf82bd4b5dd42948af68cd6ce914fcf729fca068fdce96a6c0a757c429cd8046850183290847d8eb8f3b57
+
+Sum = -18dd84a4e54a29c1b3106ef2f2d92be21ba64d2e26b3f4c2ea68685557d01a07f9229365c6d109205fa116fee59cf385cdd61b7fa5de8de751f02f1dc0eeb304babb4e
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -18dd83df5464aadb63419d67f36afcd5b0e5f70874caa5899b262148a9bb48db4b38440b101731ae39a2dbb5e21a9a1f064ec8d15427ed448725d9bdefeee72b4a704d
+
+Sum = 3ce64e7953aff0e057cdd6c17499461666f5bf8dc3a929ba7ba919486c1631c25c0e142584470d3f759157c045f9f488502a76024b6b7b2bf84c0adcce8dd7c6d6898f
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 3ce64db3c2ca71fa07ff0536752b1709fc35696811bfda812c66d23bbe016095ae23c4cacd8d35cd4f931c7742779b2188a32353f9b4da892d81b57cfd8e0bed663e8e
+
+Sum = -6a392e555c2ae89dd73f86e11fd98d1d59ed03072a0dd61add633b317d5638d67984a55e51f01a2db94ad6eb6488fa80cf4f25a32d436886599c33b5287a9525f41a4a
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -6a392f1aed106784270e586c1f47bc29c4ad592cdbf725542ca5823e2b6b0a03276ef4b908a9f19fdf491234680b53e796d678517efa092924668914f97a60ff64654b
+
+Sum = 8202089b883a5e77457036254c2a73aaf32f03eb1e61fae428926028b499b7d0a4f4e5256094f34bc2478f0595aa01aa79b5d36d7f30136d3af2be93b70552fc6e988e
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 82020961191fdd5d953f07b04b98a2b75def5a10d04b4a1d77d4a73562ae88fd52df3480174ecabde845ca4e992c5b11413d261bd0e6b41005bd13f388051ed5dee38f
+
+Sum = -13a2e13d675e3fa89489c870cda617ae92ccb7d2f6b6405eafcad9c89a682b63364c333476adf0322febffad973f3dbddb7cbaa41a64b1ea24dcb2bc2196a0af42eac3f
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -13a2e1310e4fe7ba2f8cdb581daf34bdcc20b2709b97ab6b1ad6b557cf86de506b6d8e3ecb4252bb0d8c1bf9070718276f044579354947dff8300d662486a3f1abe613e
+
+Sum = 2bf9f45c817a8f5c589a208c57c30b52866e75a9b6ee0fb7c3f0c7ec3761f2c114858241a189e331aa9ab440132dc8f5ab7dac0891a69d5573dbe42fda019d30610f07b
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 2bf9f450286c376df39d3373a7cc2861bfc270475bcf7ac42efca37b6c80a5ae49a6dd4bf61e45ba883ad08b82f5a35f3f0536ddac8b334b472f3ed9dcf1a072ca0a57a
+
+Sum = -40557025ab86f90705fc86e3ab3d8494255bee490822e27c5551037f36f9ca834fd33c11a1a162357cb21eb83254c4da56b9f8f54aca29b95283ac03732a849258e7c41
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -40557032049550f56af973fc5b346784ec07f3ab6341776fea4527f001db17961ab1e1074d0cffac9f12026cc28cea70c3326e202fe593c37f305159703a814fefec742
+
+Sum = d2985750cb9579d3f5dc3db7d2229f06e2a0d57d195819b3646f84c08eafc093def93748aaedf1f430eedb90c1694d894339caa4141ef5f07708e1a3607c5793df599b5
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = d298575d24a3d1c25ad92ad0821981f7a94cdadf7476aea6f963a93159910da6a9d7dc3e56598f6b534ebf4551a1731fafb23fcef93a5ffaa3b586f95d8c5451765e4b6
+
+Sum = -13a024fb88eba47aea55fb69680479058efda97b81fb1e6e7cfe520e8dd8ad12deffb69662852f9a94f3b029a37befc620d792a8589660e2ebc7d6e1bc8c0c8f35ac1216
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -13a024fac35abefc04062c97dd050ad68292e9255c49351f43af0fc7812a9841b251cc4707ce75c322cdb1ee5a786d6cba100b55aa44aa4248fd0c8c5cbb0cc35c3bc715
+
+Sum = 22701a8dfb82a2ddc8a5485b05362205a549bcdd24bbd660f2041a6672732824bbcac4ff58605ccf1d8ee066204a4a639828c41b722fb4a1e6c9bc3f82a89d85fd042f85
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 22701a8d35f1bd5ee25579897a36b3d698defc86ff09ed11b8b4d81f65c513538f1cdaaffda9a2f7ab68e22ad746c80a31613cc8c3ddfe0143fef1ea22d79dba2393e484
+
+Sum = -4f73fdc6540686b350c859bdbe8f22340786ddb04b7ddb8858d33ce8931bcf660269129607f77dbc1db38d8186d8bae7ebb4ec8716c6eb26342ec8290d8d8988b1f5fb0d
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -4f73fdc719976c323718288f498e906313f19e06712fc4d792227f2f9fc9e4372f16fce562ae37938fd98bbccfdc3d41527c73d9c518a1c6d6f9927e6d5e89548b66460e
+
+Sum = dcbcb3df6508052fd0d1cfb0a6088fe978227066c58317cc359f508bce9f45987ce3152022e19ef068b0381ce7d781ae3e7c04243541744c9f374a3f28dbd746acd3b9fa
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = dcbcb3e02a98eaaeb7219e823107fe18848d30bceb35011b6eee92d2db4d5a69a990ff6f7d9858c7dad6365830db0407a5438b76e3932aed4202149488acd712864404fb
+
+Sum = -163f4ba6595207387ef0956796ac29e3c6862b5344abdce3db4ff7e960b7727fa0a2870dbbe17bd8c446000b3074c1145368d4b84b39029110f915b61916fc29555d7d800
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -163f4ba64cf8f8e0908b987a7dfc3300d5bf7f4de250be4ee7bb03c4efec91328dd7a868c636103b4d23a0277be488eebcfc5c432053e72706cc6910c319ec2c97c678cff
+
+Sum = 3588d982604f471ff0ff784942bd43d85cad820864e0b9ee80cc9a9e3807d2739eb58d447830f73fc8cadc88d864f98577e43adf5150b2eb104e75939caa7de02419b6575
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 3588d98253f638c8029a7b5c2a0d4cf56be6d60302859b598d37a679c73cf1268beaae9f82858ba251a87ca523d4c15fe177c26a266b97810621c8ee46ad6de36682b1a74
+
+Sum = -4d51ba5f184e5d20b30f8e41d663d14dbe4f692f1a0749789c02290af4c889268c319fad8b9b7c9cc71e8d9878039931447fd6ede967c5c82c1915631f3237aaacf4a1763
+A = c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -4d51ba5f24a76b78a1748b2eef13c830af1615347c62680d8f971d2f65936a739efc7e528146e83a3e40ed7c2c93d156daec4f63144ce1323645c208752f47a76a8ba6264
+
+Sum = 9d7a5610dcfc50699e6bc065584fed73fddbd58dfbefe377eaacc024e33e6b4fd361fac0844489fdf13efd8dca7fae0747603f4b26bb2a9bab9de5241a3af4a935ac940aa
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = 9d7a5610e9555ec18cd0bd5270ffe456eea281935e4b020cde41b44954094c9ce62cd96579eff59b68615d717f0fe62cddccb7c051a04605b5ca91c9703804a5f34398bab
+
+Sum = -1258b397182002c966f064c2cdadb06910e2042d0f51b4af494338c12b6efff052fe564a00e581c5aac0ea79fd8a1ff68ed92b7f74baabb03a51337d4b9b01a2f64ac803cd
+A = -c590e57ee64fced18aff6e2f0c6ac05625b1e94f394f42470cae14d12cadea4f5ab6b9d77225fe3b4903825966c78752ae51b6a0a2caca555fd0ffcbd9704b01
+B = -1258b397175a71e3e80a14f3fc22b0fae1d5996cb92c02c5fa09e97ee46251db81d1a85fb18acb0bd34ec47bc2411c74357263f8220c59f999ae68b2f63b30a32a7157b8cc
+
+Sum = a1eea50170df6807aef40929a52c097081e1755b575a49548ee5868281973a141920234cd0176d64f84a5874dc417cdc8a5c338cb54bca390538e1014d638b51
+A = a1eea50170df6807aef40929a52c097081e1755b575a49548ee5868281973a141920234cd0176d64f84a5874dc417cdc8a5c338cb54bca390538e1014d638b50
+B = 1
+
+Sum = c7c26d68246f16d9d9996fe67616d2fd48809916e8121a5ef95b17bb9b8333d84e2416bf2a5eb3b686c936b9722e0a92a376f357aea7719610e864d9e2a5a677
+A = c7c26d68246f16d9d9996fe67616d2fd48809916e8121a5ef95b17bb9b8333d84e2416bf2a5eb3b686c936b9722e0a92a376f357aea7719610e864d9e2a5a676
+B = 1
+
+Sum = 80d5de21acc1eb10fff4e534d23b5cd39e1eebc3d7f03aea438bb6e5237ced9955bf86898e93c74565c9a197e3ed2ff8edd3acc41ecef97c4fcfd52e1cdbb07e
+A = 80d5de21acc1eb10fff4e534d23b5cd39e1eebc3d7f03aea438bb6e5237ced9955bf86898e93c74565c9a197e3ed2ff8edd3acc41ecef97c4fcfd52e1cdbb07c
+B = 2
+
+Sum = e020b9bd8d194468f8b563c8f586f6959533be8507bd4d3d7e494ef3733007c062caaa65da5c51b52f18cec4894966352f948517ee92d5f9b5ed00f020b1d1dd
+A = e020b9bd8d194468f8b563c8f586f6959533be8507bd4d3d7e494ef3733007c062caaa65da5c51b52f18cec4894966352f948517ee92d5f9b5ed00f020b1d1d8
+B = 5
+
+Sum = dad6af803cf2f40e75cbb564e8229c0d25465930d2ceea73715682c26d582148a943c1c767ac5167c0425975ff75a66eec5ad418ded078569dea2f77359c1cf8
+A = dad6af803cf2f40e75cbb564e8229c0d25465930d2ceea73715682c26d582148a943c1c767ac5167c0425975ff75a66eec5ad418ded078569dea2f77359c1cfc
+B = -4
+
+Sum = de90e3172430754f80e116cc8c848bee88c8e31810c6ef0ded5b05bbef6d5b81f9bf6593622ebfcb2b41be2e87d62ab7fd566763b74428275a16d1da482e5f76
+A = de90e3172430754f80e116cc8c848bee88c8e31810c6ef0ded5b05bbef6d5b81f9bf6593622ebfcb2b41be2e87d62ab7fd566763b74428275a16d1da482e5f7b
+B = -5
+
+Sum = c153ce69e35411c7f1e52809773ce03ce8d2af10b5c7aa3f4c9354de5ca044b7ef25089f1e96bd14d6c62c88b3c39951df19c73751ba25dc758534adba7faddc
+A = c153ce69e35411c7f1e52809773ce03ce8d2af10b5c7aa3f4c9354de5ca044b7ef25089f1e96bd14d6c62c88b3c39951df19c73751ba25dc758534adba7fade2
+B = -6
+
+Sum = f0c843f86e227571d67cfc34ac00d0e6f87f4cbd3273af68562657ae5ca82ddf5fd63476d56d5cccf62dd93f8320c0ba88658493dde282abc22bd09a01f6f2be
+A = f0c843f86e227571d67cfc34ac00d0e6f87f4cbd3273af68562657ae5ca82ddf5fd63476d56d5cccf62dd93f8320c0ba88658493dde282abc22bd09a01f6f2c5
+B = -7
+
+Sum = c5ba28844b8947aa0c2933f06aa88f0b34e0e10ca9baf1cc3bd5ff2dc0590e3ac5a2f2d3a1408009e1b35e08426bdda001adf93e872b03f4f6df28d34a3355e5
+A = c5ba28844b8947aa0c2933f06aa88f0b34e0e10ca9baf1cc3bd5ff2dc0590e3ac5a2f2d3a1408009e1b35e08426bdda001adf93e872b03f4f6df28d34a3355ed
+B = -8
+
+Sum = 84da246c2485e335d1f3b7e31c2408365f2afe7bff7b596440281c1618bbc8bf7a3896ece480fac4a29070539a95f1d718c151ffbfafbb82629bef9d2afbaaf7
+A = 84da246c2485e335d1f3b7e31c2408365f2afe7bff7b596440281c1618bbc8bf7a3896ece480fac4a29070539a95f1d718c151ffbfafbb82629bef9d2afba900
+B = 1f7
+
+Sum = 9673d93165b5be256689ba4e750243537f85bc28daac7f65338074081f114b3a83871683c89fae3c87d44da053557aa16dd074b1bdc16c02a74c5b495f875449
+A = 9673d93165b5be256689ba4e750243537f85bc28daac7f65338074081f114b3a83871683c89fae3c87d44da053557aa16dd074b1bdc16c02a74c5b495f875453
+B = -a
+
+Sum = fce022b2dd492a96f8b095712803f318a45a9a8f00a48dec06accaf793e54e59daa14c56c2fce011e30e6394937f7bd6fa6afa1b6dc3b5359ec7bb4f757c5d89
+A = fce022b2dd492a96f8b095712803f318a45a9a8f00a48dec06accaf793e54e59daa14c56c2fce011e30e6394937f7bd6fa6afa1b6dc3b5359ec7bb4f757c5594
+B = 7f5
+
+Sum = f04028fafffb1aee499812d12f9fcbb23e6a872b3f69fe7a7a246d8f98ba2aa954f78506b39c023397855ead87854412c881fdd16267c07ee12f085b055c7c71
+A = f04028fafffb1aee499812d12f9fcbb23e6a872b3f69fe7a7a246d8f98ba2aa954f78506b39c023397855ead87854412c881fdd16267c07ee12f085b055c6c7d
+B = ff4
+
+Sum = 9c008016815a6580728b3f690eddc7695fed44171557df8a4a6e8c0d5e7c3296832b4ba9ee4a4cd7e6a8ef23cf8c64fcd0518664289c4e72105b404cd6c0ab6d
+A = 9c008016815a6580728b3f690eddc7695fed44171557df8a4a6e8c0d5e7c3296832b4ba9ee4a4cd7e6a8ef23cf8c64fcd0518664289c4e72105b404cd6c0ab7a
+B = -d
+
+Sum = c12bf7e503d2c5845c60886ad5ef87d24e002498003b44922e462f36592a52c878123a6d1037896ce9fb7d2c680d008e80009da72c8e1415e957b2fefb52c34b
+A = c12bf7e503d2c5845c60886ad5ef87d24e002498003b44922e462f36592a52c878123a6d1037896ce9fb7d2c680d008e80009da72c8e1415e957b2fefb52c359
+B = -e
+
+Sum = febba964e2548ed1474dac7c1eb9b1cd169ac913530b7fb358d67197517266707e5a176a814ec82cf8945214b30c36ca7ac0b1ade1848573e72d408dbede8f53
+A = febba964e2548ed1474dac7c1eb9b1cd169ac913530b7fb358d67197517266707e5a176a814ec82cf8945214b30c36ca7ac0b1ade1848573e72d408dbede8f62
+B = -f
+
+Sum = 8a3f9eeb76e96f13446c593fe2cabd4215e0debc54025df7791d924d8afc08dc8f607b82a3d07d75897bfeee0c42b9a32e0e77a098c1cce9c001aabe0481996d
+A = 8a3f9eeb76e96f13446c593fe2cabd4215e0debc54025df7791d924d8afc08dc8f607b82a3d07d75897bfeee0c42b9a32e0e77a098c1cce9c001aabe0481997d
+B = -10
+
+Sum = be825a00c3c6b192d04863b0719ee1e687dbbf2cfc0c331c00b8b947c17fecb7700c9e534bbc49bd61978754ffae1e57d80aab34f5fd23a267e10a4b5a13a9d8
+A = be825a00c3c6b192d04863b0719ee1e687dbbf2cfc0c331c00b8b947c17fecb7700c9e534bbc49bd61978754ffae1e57d80aab34f5fd23a267e10a4b5a11a9e9
+B = 1ffef
+
+Sum = d1c861822ba0e93be81fc78a2628756480146225c79b4a389588a9c3bff9a7500660e99c28807d9ae7bf8c1e89e81d4f9ff2f72d35ea6b34d09df053d46dd294
+A = d1c861822ba0e93be81fc78a2628756480146225c79b4a389588a9c3bff9a7500660e99c28807d9ae7bf8c1e89e81d4f9ff2f72d35ea6b34d09df053d469d2a6
+B = 3ffee
+
+Sum = 98ac65b4c06400baeb40ed137ecdd930a3607423caecbe1f1a936a8210c28fd84b53324e5bb73b7e4b71209b1a4d106796d57a4a23fad2c23abc0c039539080d
+A = 98ac65b4c06400baeb40ed137ecdd930a3607423caecbe1f1a936a8210c28fd84b53324e5bb73b7e4b71209b1a4d106796d57a4a23fad2c23abc0c0395390820
+B = -13
+
+Sum = da02949862a4b26a4fb4bff43b21c2cdd048189199612616303d3ab34dc6f201be256f5889e368867a0da200a0b03e904048d6ba5caee1dafa16f4fdb1f00029
+A = da02949862a4b26a4fb4bff43b21c2cdd048189199612616303d3ab34dc6f201be256f5889e368867a0da200a0b03e904048d6ba5caee1dafa16f4fdb1e0003d
+B = fffec
+
+Sum = ea9523fdde49d481c9f449969fd8e191e118058e0593f2a27ef0ade666ff478c50acb274a6c77d9ec4ca628ab0d7f3dc18708327423de28616235187acb197f8
+A = ea9523fdde49d481c9f449969fd8e191e118058e0593f2a27ef0ade666ff478c50acb274a6c77d9ec4ca628ab0d7f3dc18708327423de28616235187acb1980d
+B = -15
+
+Sum = dab5613ae3756d29f22bc30213363900e3fdced153a3c20852d51c71cbb9af41aba6a16d0b72926192ef48f25e8975881ca7973a69590dc6f0224395e6f3684d
+A = dab5613ae3756d29f22bc30213363900e3fdced153a3c20852d51c71cbb9af41aba6a16d0b72926192ef48f25e8975881ca7973a69590dc6f0224395e6f36863
+B = -16
+
+Sum = c442f3e574310f78e0ac187af96550d4999b79da9c9d6ffa9eb9437a2ac01479003d8e795ce68dfc0f87a4fd9b00b6c172c72c7f580a32af015a3a3375b85285
+A = c442f3e574310f78e0ac187af96550d4999b79da9c9d6ffa9eb9437a2ac01479003d8e795ce68dfc0f87a4fd9b00b6c172c72c7f580a32af015a3a3375b8529c
+B = -17
+
+Sum = b9ac1e23fbfe179d9d3ff99b2ad8399754ea5531e6fce5dad997e2c961110d49d0e3d9c2ec03289edeb39e5a6b4744dd4b3cdd6c43f4e8f4c8e91617772e7fd0
+A = b9ac1e23fbfe179d9d3ff99b2ad8399754ea5531e6fce5dad997e2c961110d49d0e3d9c2ec03289edeb39e5a6b4744dd4b3cdd6c43f4e8f4c8e91617762e7fe8
+B = ffffe8
+
+Sum = e087174c20cba6c4e1e8ffc2ecfeeee770898916454724c24b56d8619c27db123078d406d6b7b836b0dd3092b34b736c472f1afd983971230f1e2b729b00acd4
+A = e087174c20cba6c4e1e8ffc2ecfeeee770898916454724c24b56d8619c27db123078d406d6b7b836b0dd3092b34b736c472f1afd983971230f1e2b729900aced
+B = 1ffffe7
+
+Sum = ba66837e8e8bdefa4c3df73ba5ee65d1ab45a68f51072bf2997446b13b6c73b29c26d15ddff186c9621e156bd3b650caa267dffa54abb782734c443bf502b276
+A = ba66837e8e8bdefa4c3df73ba5ee65d1ab45a68f51072bf2997446b13b6c73b29c26d15ddff186c9621e156bd3b650caa267dffa54abb782734c443bf102b290
+B = 3ffffe6
+
+Sum = fc461dea452aaf0e2c1df10b7cb4293fbc498d40caa7a917a741c6d3534914fc039bb7a62d14cc3e9ea6cc8d2b41228628ad56687d18858c3867c75ae83a3216
+A = fc461dea452aaf0e2c1df10b7cb4293fbc498d40caa7a917a741c6d3534914fc039bb7a62d14cc3e9ea6cc8d2b41228628ad56687d18858c3867c75ae03a3231
+B = 7ffffe5
+
+Sum = d109e7982ffd500ed77702054ccbfa49bb47b5cdb2220988ef58af3cbe0ac90bb3b2ac8a2c558fe744231bf227bf35343e12ecb312242ce50a85fe461e73b601
+A = d109e7982ffd500ed77702054ccbfa49bb47b5cdb2220988ef58af3cbe0ac90bb3b2ac8a2c558fe744231bf227bf35343e12ecb312242ce50a85fe461e73b61d
+B = -1c
+
+Sum = babcba83c01843f6448fc3f91c006a673e514c9626c6399d43c016c31a8fd1a9fc58d1c63ba5b9565dd7320c4a04fe4331fbb79de1e03d68db331bbe2b4b9036
+A = babcba83c01843f6448fc3f91c006a673e514c9626c6399d43c016c31a8fd1a9fc58d1c63ba5b9565dd7320c4a04fe4331fbb79de1e03d68db331bbe0b4b9053
+B = 1fffffe3
+
+Sum = c52e7fb27c4f670109b32cb6d3f705e1685e2cb7474a90d3815e486de77dd2584a0b65d22040059ae5279450682a189eb1b0f847e0d3fe022628a73eeb99c54c
+A = c52e7fb27c4f670109b32cb6d3f705e1685e2cb7474a90d3815e486de77dd2584a0b65d22040059ae5279450682a189eb1b0f847e0d3fe022628a73eab99c56a
+B = 3fffffe2
+
+Sum = b5f074f655dbe68df022b0093534b609b23c17eefcfdc9b1b150c8cfdafe1d320fff7452c147c7d9f9cbe16be25970a23e6499bc90e689497c8bf2d38219e4f4
+A = b5f074f655dbe68df022b0093534b609b23c17eefcfdc9b1b150c8cfdafe1d320fff7452c147c7d9f9cbe16be25970a23e6499bc90e689497c8bf2d38219e513
+B = -1f
+
+Sum = a1a41b6638409305ab9ffa22bb3cb9434f587d4ce6f6da47c0ad6f8f720f397c37cd61254f35fc9f0cda36476ca6d95f233604b9ae5ea2f1a1207caf15682e81
+A = a1a41b6638409305ab9ffa22bb3cb9434f587d4ce6f6da47c0ad6f8f720f397c37cd61254f35fc9f0cda36476ca6d95f233604b9ae5ea2f1a1207cae15682ea1
+B = ffffffe0
+
+Sum = f187feee94925d57f65f9b1200193d8e9359340d670bab27c022d6d63a54635e4573593790e6c6b779becb9e5ea81c9b075baa2d3bc95493b0c5a2da1fccebbd
+A = f187feee94925d57f65f9b1200193d8e9359340d670bab27c022d6d63a54635e4573593790e6c6b779becb9e5ea81c9b075baa2d3bc95493b0c5a2d81fccebde
+B = 1ffffffdf
+
+Sum = dc9c51e1313cb655969b4a069f2e8edd850d4fbc5bbc36f05df42a526f4e5b3ed18886263d86231193442b3ac3e7a71e5a6377021e71ad07dd9411953dbeedc5
+A = dc9c51e1313cb655969b4a069f2e8edd850d4fbc5bbc36f05df42a526f4e5b3ed18886263d86231193442b3ac3e7a71e5a6377021e71ad07dd9411913dbeede7
+B = 3ffffffde
+
+Sum = f2b5e665a6a2e7009bff8b2750b5fb11576bfd49dee5dd7f32b02c46430923b0ec95c3fcee0006b0c2591cbf1fb18dde331d8fb119d92f3196a7dfd8178be33e
+A = f2b5e665a6a2e7009bff8b2750b5fb11576bfd49dee5dd7f32b02c46430923b0ec95c3fcee0006b0c2591cbf1fb18dde331d8fb119d92f3196a7dfd0178be361
+B = 7ffffffdd
+
+Sum = fb0f545b752979151bc6004b3db33bad63230c26d060ba00f5b82e7bee7e2c854b09b2a7c6b4186776c6b3cc45afbc50ef35df7abad11fec62523a12be1cb7a1
+A = fb0f545b752979151bc6004b3db33bad63230c26d060ba00f5b82e7bee7e2c854b09b2a7c6b4186776c6b3cc45afbc50ef35df7abad11fec62523a02be1cb7c5
+B = fffffffdc
+
+Sum = fc197e83249b069fb34552188cd6d06a7e0b42c6a6a9869ede485328a0fabd0c0ec2f79b81747129ccd70ee5c0f9efea62c36d1a4e1fb2b80393fe636469c25a
+A = fc197e83249b069fb34552188cd6d06a7e0b42c6a6a9869ede485328a0fabd0c0ec2f79b81747129ccd70ee5c0f9efea62c36d1a4e1fb2b80393fe636469c27f
+B = -25
+
+Sum = aaf9a8ecbbfee9c3092d9887ec35118a9614a9fa84fc50b79b11d03a4967066c361f67cbf7a8e5beb620c7da55f4bc7dc50ad44b22c9128994781c7816a439af
+A = aaf9a8ecbbfee9c3092d9887ec35118a9614a9fa84fc50b79b11d03a4967066c361f67cbf7a8e5beb620c7da55f4bc7dc50ad44b22c9128994781c7816a439d5
+B = -26
+
+Sum = e74e32fc45d099ed147bcf7d798bd3aef9b046291038d98431698e90d22cf944a92bdcd8a5cf378e9a3aa0001150cf6e4dc37fa4e54a25e13c75099c64b9350f
+A = e74e32fc45d099ed147bcf7d798bd3aef9b046291038d98431698e90d22cf944a92bdcd8a5cf378e9a3aa0001150cf6e4dc37fa4e54a25e13c75099c64b93536
+B = -27
+
+Sum = a3486d022ef4d0a0c72170f05300cee78df844db19c63754c2d631d3d9ae20a0205cfe0fe947f8f4d2f9fa34e2081f448a938a446e8764ac2141157cab01dfa0
+A = a3486d022ef4d0a0c72170f05300cee78df844db19c63754c2d631d3d9ae20a0205cfe0fe947f8f4d2f9fa34e2081f448a938a446e8764ac2141147cab01dfc8
+B = ffffffffd8
+
+Sum = 8952cb3f70b1344facdd7fe79747773f9c101bc2a083fa8fdef0679c24ba93218d14d4d7e848d293ce431119d1542833e9a0624b812f0b31b2b9f7ed9455e8b9
+A = 8952cb3f70b1344facdd7fe79747773f9c101bc2a083fa8fdef0679c24ba93218d14d4d7e848d293ce431119d1542833e9a0624b812f0b31b2b9f5ed9455e8e2
+B = 1ffffffffd7
+
+Sum = de9cb4d4cdd1d58572fa1052edf72bb9241555bdb967bd8cefb26cb12c6622d6147385dc3f72e110b17afbdebc5feb959cb6c320a2ba01f36585b53fb1c5f07f
+A = de9cb4d4cdd1d58572fa1052edf72bb9241555bdb967bd8cefb26cb12c6622d6147385dc3f72e110b17afbdebc5feb959cb6c320a2ba01f36585b13fb1c5f0a9
+B = 3ffffffffd6
+
+Sum = d37f2e1638c0b3bd624104d244d9770ae05bf37f7a6ec32db552af413c0006fdcfc312cf281190eb6738370f3a8c4655beddb6b39b342f0a67cc9af92a2c7fdc
+A = d37f2e1638c0b3bd624104d244d9770ae05bf37f7a6ec32db552af413c0006fdcfc312cf281190eb6738370f3a8c4655beddb6b39b342f0a67cc92f92a2c8007
+B = 7ffffffffd5
+
+Sum = 831aca9ef43bea89f048250aab79b06207458647ce347c68f91013695299c80d610c6e49e2dcd46eb02dd56573d31720efc277469e573f6ecfb71b12886653ac
+A = 831aca9ef43bea89f048250aab79b06207458647ce347c68f91013695299c80d610c6e49e2dcd46eb02dd56573d31720efc277469e573f6ecfb70b12886653d8
+B = fffffffffd4
+
+Sum = da95fd2d2438a79843bdf92c1cadd0e9165d002d22dcacbe4118cc3cf7d5de2fd2106aaefc790aa1559b28b641f83e4e5aa0f8446b57fde5c3663c13efbc04fb
+A = da95fd2d2438a79843bdf92c1cadd0e9165d002d22dcacbe4118cc3cf7d5de2fd2106aaefc790aa1559b28b641f83e4e5aa0f8446b57fde5c3661c13efbc0528
+B = 1fffffffffd3
+
+Sum = bf9e3169dd4b6d336848e744231d1ca85678aa3d1d62d42eac0b16500ef527e028757da54a456b3d684199f3bb3c866a002ee3885c86d2a79180487f4e8a45f1
+A = bf9e3169dd4b6d336848e744231d1ca85678aa3d1d62d42eac0b16500ef527e028757da54a456b3d684199f3bb3c866a002ee3885c86d2a79180087f4e8a461f
+B = 3fffffffffd2
+
+Sum = b5880868d947554eeb536246c312c9765ca8c96888817f3ffdc16cdbafb41fe8f7c151cb316da27562d3b82b2d45abf7c9304f488538386e84c6a23e3dc375fa
+A = b5880868d947554eeb536246c312c9765ca8c96888817f3ffdc16cdbafb41fe8f7c151cb316da27562d3b82b2d45abf7c9304f488538386e84c6223e3dc37629
+B = 7fffffffffd1
+
+Sum = 84b1e4079d09df569a1623b990d917871b1197723b30b19fcf3c063b0e84c9cef1c3ffed16f33aa9bede08b4831bb3ecdadae1622c93e1f86b474a4989496fa4
+A = 84b1e4079d09df569a1623b990d917871b1197723b30b19fcf3c063b0e84c9cef1c3ffed16f33aa9bede08b4831bb3ecdadae1622c93e1f86b464a4989496fd4
+B = ffffffffffd0
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30c6365e1eeb044
+B = 1ffffffffffcf
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 80695b879bb74400c107619981f3bcb3c9987c76d545f6485ed128082377799534508a83112fbde2ee5558c246332c656455
+B = f6446ca2883d7e27209eeaa01fdec632d4027113b81bb47dacc8f10eadc3b3ffc26d84135d91e70deb8aec84c7820332e8cf786e2af9b4217a4c1d32b5894bbe
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1b510bc480138145e2a142fce8330ee5f4030dccaf6017a1dd85bc5bbe9b2fee4f9d8fb484661a839dc9613652bcca11a00eb
+B = f6446ca2883d7e27209eeaa01fe0fbacebd20e03107a9f993e30f63358d6bdc91baf4f5acdf81e3ad94ef9af3ffc315c6e9acfff91167f0ce6738f328308b0fe
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 219f59352ebda4cfb785a18834ec1c99145a6647265baf5d8f3b405f29a746785a5e70777d528ff1526688c01b9eee288e6cd
+B = -f6446ca2883d7e27209eeaa01fe16091c2dcf8a54917eddf26e5c1c43408c33ea356bf1449b339931985aa70a89cdd6a7aca5ec6e7f1c8df5f101d54c47796e0
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -7e5a2ec59519143f7bda2829cfee4ae75cc8038f31303ff9bbb1e2cbfe93c46a1367c9d6a2a3d9cb40f1a6930c18c78f85724
+B = -f6446ca2883d7e27209eeaa01fd760f94330bb39b824b7e28bc5741dbc01b11805f14655543e8ac0e6d326bffa760106d5e85f604c28935c69dda1d968f658ef
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 9f580ff614b449cf9c46c91256c20983f5c70200739de72b917344db81c1aa1bf3927c38c22d026d6ce38ac746ada2948e538
+B = f6446ca2883d7e27209eeaa01fd5511b3028c1865f22b1187d3d06e1d23821281edd1f7ae1212eaac5daf3e19f57fe5bafc666cdc205d43e2699f88bb8a5cadb
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -15773d29ba363a15a0cb31ac4a60c0c228967e857d7d11c1ebb0a8db855c0d0797c0e409899a50e1b1c989a7dcea6f26238d27
+B = f6446ca2883d7e27209eeaa01ff4bdd95944430511bd40b6baacd3c32ca01416c461d66b15c5f687ef186c0948aef8677cdc23eeca8e6c007aeb4dd508123d3a
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 2f90f72f59dd7738f5572e31d41b91599ed500d59537bf5c21a1bedad709303cba0d5bf1b5e4eaac1a85c261ce94c45b64646e
+B = -f6446ca2883d7e27209eeaa0200ed7935ee3ea423511ccb340368e93c416529914799118affbe79dee6a192c7dd144df65086e8894f7283934dcf82a3d531481
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -73978eee2b2a4ac8ef12b3042dd5e1ae8724a0a676d0a52035e801d741a61b92c638a3b0cece6a81bfd2703e3c502ad1fa784c
+B = -f6446ca2883d7e27209eeaa01f6baf0d415ee280332d62d20a349d20bbf058f7986d88b433a45ddd3c5169e0ae50fedfc283bb33671cd00694d2133b0ff437c7
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = a462699ec5214f0d7860974a669d1728b4983a1c3c440213d12b2da58bba9dd1caf1d5ed391a3ebd80aa6e9ef0396e62260a1f
+B = f6446ca2883d7e27209eeaa01f3ae43290c4eb7beea414edc3fbd5eb41c2e55e22a8155740091ab16e07555e6f4c45ad86196f5f2b5bf808341e29f77fc8a5f4
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -130f7a12825a6c5b6b109b91e2506505a261c9f7c1a62fdfbe252275d3f6844dda2aca2d0ff6d8406ac5c679c80ab6d29817b4d
+B = f6446ca2883d7e27209eeaa021103e3d57afb390b2cd7f3e2c877952c49d9a37bafebc574fbc980670d278411eb9e4264451f721ef88fede6f8f0ed30b702b60
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 2863fa82289aff06fb16bd1b866da9ac0ae0f411a8d8c2c084cf78b81d6713a9a4700248ef61d5e52ca7470f1f251380368df10
+B = -f6446ca2883d7e27209eeaa0226586445213bcbb6bcde156c6c94d9d2b258cd95971e5855c273d6a95698136db5e37a80248a6fc3ba716e7c500b49de5578f23
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -6176f648b54dc4e2d11ba7e32d2d9d3f400fbafa489fbe7f126daf1f929ef8f219c78ff1063dd27650d4751c63b6e7ad7d9a588
+B = -f6446ca2883d7e27209eeaa019c7d737a435307ccf0abb06db8f992e767681e89a5a5d7162b36aed1a69206d1f7abe8462eeac7683cf5b250cd2f4eb0a150a8b
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = ccff1ed8726e309c4e0f2e166c497cd718a8eac347674ca57b6f317ea491b743a89d25f87c37f379f6239b13d848eee1ffa9328
+B = f6446ca2883d7e27209eeaa0130f54aea86329c1373b82a3a79ddb34f8eceeec0a6de48efc2352c72949f488068d6523eb8f0a66497a68c59589d477c1f41ceb
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -13d1c041415fbc18179c970fe989ad9e1f10e4ff658c1bc550e93f6ab9f9cc9832fd49cf6f2e75af72a71dbd7b121111ee0d4098
+B = f6446ca2883d7e27209eeaa033b106dd70e9c8e313b90c94f7ec20a089886297a470751ea4c38549cd8cdc9474148152e280ff4d5b83c0344e207477cffbf0ab
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 27ede3a23479dcc5447bc3b64df32c121761de88086204484cea0782b8d63d72b57192f2b20dd3dff395e937c91e21cdbd13b68b
+B = -f6446ca2883d7e27209eeaa047cd2a3e6403e9904098393b5c559f1481d95c2047465da1a0c44d61cc694d6ef688ca7625605d7ddc728bae9c2c85339f02669e
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -4ad10e7f5637cc48b04d4b250e4ca00a0d102c91caaaf6291f1248b7a1cec979f87b7251c50db8e5e49206bebb30b7f3f25c8577
+B = -f6446ca2883d7e27209eea9fd50e381cd95240824bcf2a600015d2f85d6751067439633034c7fd2771c44682489bc531ae44d0b8044a9bb817ddab71ef922a9c
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = c6b77c2c932d9d5ec6175def706d6e9c411216fe12ac52043c617761d3a37804487f158de60a9c18e7a19646c455804a65bd80f2
+B = f6446ca2883d7e27209eea9f5927ca6f9c5c6f6c360517959df504662965669a2c3807551778ce7d3fef97f7f89821f58d47ed85013b0c300eb8e31b7c312f21
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -187976849837d4ad4cfc9764fd0e3f865fa9d1d9f20d98ccd52a6b3652277100bcfff85fb8414c2967dacd26f269502d3c2caff12
+B = f6446ca2883d7e27209eeaa1a776aee5b307579fcbe5ebd4df466b6865149b375fbde626a680f944360a20081116bd7ef7674c34668974e5f9a36639a4b9af25
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 33913efb99088ab80c706ee229e7a6ea6b274097f6ed3734452dabe0865eb86fcf20c9c6ae0e613b72dbfb8b126383e7d10e8bbb4
+B = -f6446ca2883d7e27209eeaa358f33655c012b84bc32363a7acdce1a91ceb8717adb7cc9da6b503e7797e96f93323d3ee54389d55169c5b27f946a1e2f2d76bc7
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -5d84033a924ff84666d3ee1a1342ac118224264c439bc658213b9762586e8dbdef141024d757175f30bec23a960ab145832dee9af
+B = -f6446ca2883d7e27209eea9a479f12f30a8a88648edd93e3da37b1ea483518d40527f3d74020cfb98caa341d4fd63535fde113aadcf07ecd72634f0daf0fc664
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = a2aeba6a0d6142f527358ffd4c9139c390c9dfab07947c902085d1f3c367035db0f22f249295b974b1d9ebe7add3dfac7ec237f72
+B = f6446ca2883d7e27209eea95f4f39ffb5975dd7888c375b0454ed6c95dd982e7c59c90574b7d26a2dd22da2131f4453a49f6f252cb3de3fbf5d0689df5cb30a1
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1e545f433c1bda45a7900793d2cd18ba630fcb11d4a2c88bc7a0fb392d270088a1ad126743b80342bcfcfa9e939c9ccdccb7f4f198
+B = f6446ca2883d7e27209eeabe743e89d84b6452728c240957db7b2d657a428f6ce1ace520f4d57f0c3a93989dee299ec72b55cc5ae5d7410a6fab313299e3a1ab
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 244bf1eb701c53bc7847a644269277f53b58dc23b55a2f996faaceff22666eece40fe14644aaa2ab0197a5a915fefa394a5c357db4
+B = -f6446ca2883d7e27209eeac46bd1320c4bddc94343c2b9aba0da683dc353a14d9913f2c8fea945017a01fce050f87dc81df5349f80824b8cd2089cb03e242dc7
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -7e3419b44f3596c6486e095c3fc9a84b5599868abd292354278a2520f54929d5bc325dc3d095e84431960265dcae84f0815ef5beb9
+B = -f6446ca2883d7e27209eea21ebc5924cf9f346828e13194544ba27acd0f0f2db15c10531c9b524e9ca693a400eb973b2dd6a456c52da3c9a248972e482f8f15a
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 81fae0f8555d46ede9e74a93b8a7c6273c9bee0eef0f51b4575aad5cbdc0e10a3d03d53cf2a42e6a3625074c812cd0ae41d94d34ee
+B = f6446ca2883d7e27209eea1e24fe4e46d2431ee114d1e1cc669c4bc5ce896ea92f92a501f92ce92152b205bf3d41fa90cf241f67c3d555f5a63db52408a17b25
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1558c919b3dcd4cc2eacfee2ae98a3b4286bdb6aa67db97ce35df3ac72f6c6418df10444ce791109a9a71250896f20d4dbf19d559f0
+B = f6446ca2883d7e27209eebf5ac70e1d9fcd6cfb5cc0aa06e989db589282e28001a7c278f33150d0e7ff728db515b846b046324385a01ab0dc51bb124fbc40a03
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 3a9c8b150408b2449466b8328ccb0a5334f2340479203cb790780e71b6609f7999c691ba19f947d8cac4329a4e45377fd6bf226fed2
+B = -f6446ca2883d7e27209eee49e89096dcbaae5611679f9e51bf07a6518db7c52a42afd260d4c161451d8aa998aa32d92307d0164a2c06475b268660d1d415aee5
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -450c41a9cca23287b6448a0b248d24075ed20bec41c600279fd86869b1a51e1842cb7f4d59144436edc1c052f44428965b3b2d98757
+B = -f6446ca2883d7e27209ee64f5bc4a9d20c619166b37bc33c3c21fd1549b8b97bdee1df5bcd53aac4c1b18bcf892261f22f0f1ac1ccd773329084fdb22f1528bc
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 9d48745690ee5aa8fc448371f9236153c584466583aa30d999461a3defac314356230a763c204c2595794db93fcd3917f25b83d1b85
+B = f6446ca2883d7e27209ee0cb9899dd8d49df7d06b3e555f2d84d36aa2611255d9bd6bfc4f23666e4507eda9a106fd3c16e90304654010e79ff7ce44029b1948e
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1a3f8af71d423da8c007022421f09a53034c6e9d7d23572b8b4b273b091a6f024ea4216ebbca25daa4e9e83fb46a1d9e65fea344bcd4
+B = f6446ca2883d7e27209f04dfaad663de6d32ccd1fe409775a8b5764ed914fabb960fe4a47b154ef982955ea06285f34d992d2e87d11c56e0f0acc96485336ce7
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 3cd13ae384718065169d7e6b600ea1d1a514832649029f92f1d2b5bebbf83454fcde0133f3bb4716cf452a3f930d28f30e7f22f21982
+B = -f6446ca2883d7e27209f27715ac2cb0dafef23687a87d593b0341816ed9dc69ade774b2c099901d747e80cda424b2b3eba6958e3131c3583fc0171e504e0c995
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -5849ade77039ed0b15524c08929a4553a6c0825178f6522915592ffa9638a8143fe8426df9757e8c06aabc97a2ef87b4a58869d1df4d
+B = -f6446ca2883d7e27209e925671f7d662427ef778b013e2eac90ecc41e82604a1ecbb440023dfafa66b7ed013fea93e0df4c682f32c44ff874b59bddd781cd0c6
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 9c4b4b4800fe2f11e1897ee8c8e147b143a252847548145e77d9a9d3e4e3a79283f833e760bdc69d5f75fc1d0356615b0c10b1e34f9f
+B = f6446ca2883d7e27209e4e54d497459e00782b417d33aca3c6b12f6017f308502a85e17faa0660fb6c008c040d2fd6c5acb52a27ecbf9f2071b35755300b6074
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1bbe5a805b857ccd9dae7cba6f3dab95d22f7d2e1621a2ab382898bfb2b4efccb263929f752397da4ad030e6d5c8773dde8fe04c42f97
+B = f6446ca2883d7e2720a0a685c7e4fef3fc63e7b2c7c3695fc7bf95fa3d58dfb26997dbe2dfd5712e105e36356b0e89bcf0f736a0f749fefe46ec4c63e6b2dfaa
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 255c9a10ee08acfe197fecdc7b6cbae27f8dd38887f135cc5adb1b9276c94ccce420887a7476b2d17c2708c84b7e9a8b4160f676f8d1e
+B = -f6446ca2883d7e2720a14069c0ee2726ff6ba4c9c9e42c50bc8a6bdfa2fffcab9baa070b0d01b273e0615204c8be7eeea06a4c0e75615a607bc27975495e3d31
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -4bb5296b4ce3e960ecadc3f15de0a3a0dacf12d34f690cafaa8f2e31b0e9e69d42a3b16bce84361c81b7584be32210daaddefd7184659
+B = -f6446ca2883d7e27209a2f4d892a785d997b41eebd06977ad454c6113d42870773e9b06670bf3740a9bee5c12a5a4f40118a6e28641e7055c56385760ad669ba
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = efb45966d1f6d79c9b4c72c3a584e26e7b7136295fb79a911433a10ef649b47b14b8d76cc42e54852176ef7da7d08b86186cbe6e98b23
+B = f6446ca2883d7e27208fef5a8972272eb5c05803cfe21d36e77abbef07e1821e95d3161f42eae143cbe1c46eca4af49e2b00722ef102256e1aacdc99fb0524f0
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1e30bf701cd589fa3d2adff0217e8f748d1a254b771d77d342fffe3e3138aa3d4a75ca8c1e6636919636d4d96d8b04d583af4dc208b51b
+B = f6446ca2883d7e2720bd1b5f8ffc1c2629c737aaec3df41482ef8d27b5ee9b1012275957920b7e8950dd85c6cd359dba04e8c072c24a2d7ba89212b3a3f7652e
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 320eee30dae44f272fc9606477927bac85b677c3333fa55f4c5b5c7e71bc02266a906d8838a096551a8b5b94980cd819ac721a6ca70a71
+B = -f6446ca2883d7e2720d0f98e50ba2aeb56b9d62b60940800bae8297a2daabd3d9e30b4b5d24c01e139fda069c94fd819c86d14f97d74af4eecbad5804e95ba84
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -5819f4921a515433459006c62df3be1c4e642a52340381b5954df3f9dd0ed5f73f8dc9a17e536b88090ae8d5fbc411f16eeca2449ffb96
+B = -f6446ca2883d7e272046d0ab8dc4f547fc447cc435ee81c6f2140ed818437a16894f0b6559fd37091c5382329f98e417eb497eb512e0de64e19f76c39d4eb47d
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = f238bbcd9701966bc4482fb8df8ca395ad15e2b83c014e59898e33a36623580e9c91faa3873eb26a0e97c4d29ff209e22c4faa0a1295a0
+B = f6446ca2883d7e271facb1e452484505c3c5c49b433ce8e178b55d1fb23b7c49e55acb25b074228704f67e019d8ff8d10943f1d9163cb06cf0e213bbd7dc1a73
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1e00b3b3bab1081231e0f1a2029b146f8391869dad416f6c8443c124ea7c908ee402f6b6fe06d883c2d232713512ed5d8636a07898523f3
+B = f6446ca2883d7e27227ef5db5b8a571d52a81be51c4626cc069b8b6c454b948f0728956ba2820ee801d33f67b0f7a50baf7facc4fc2dd14cab71cd6d6b73d406
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 2030dfab0a9e0af1764f416171c8eee2d0b87bd5b80e6cddee4ee2a7509a301956050b6e3bb067f827d13c33abf31693d4101951d4a0b96
+B = -f6446ca2883d7e2722a1f89ad089274b46ef00e1133904733b6dfabfc5f864661dc94783c8e3e8e0a8f360b324d23e02f5cf9d61239bd3e0104f64faff38bba9
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -7427bfdba61a57b644fdd11b2a3ea1d3507cdf4ea1389436bade3fbaf751724000774127923658c7b090f182d1d7e320aeaeb1e3dc0b30a
+B = -f6446ca2883d7e27195c6ea2657da120cb3a2fb949788b67d95aa50d8063f454d336755da4652ebb138b9be9c7f3d1f6f8497a85bbbf2444c8237847a42dfd09
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = d23891ab621e6ee43b3b250d66ab139cc97db21429da33e01910635969af402b6792f6d741292a0e1bb6bc30b2a7b32fcce9f5e8c2e48bd
+B = f6446ca2883d7e27137b618569bd5fadebd65a7a25b1c44b41ca97e127d9da5a3d535323bd3f51dc5d19e08ecd04a4e291971ddaddb22743d63fc40755c06756
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1d6d78b7e83cedb64f0afa17c56360a58eb5ccc4e647bd3c594feb6695531f9434adb169ce314d4c93b4efc260fc92b268ca22143fb7e994
+B = f6446ca2883d7e273e0c6358081c34527e9506e2c17fd62a9d183fc750bf3ad4983444bfe92d65734840c1660f4884d00707796049d935293bd8857a21a699a7
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 255261901144afcf37c28015f4ec493bfc06cbabf851997d06cdc2fa742a97e234085ce67dcd867451a19d3427acc5ac2fb5b919f1514e06
+B = -f6446ca2883d7e2745f14c303123f66b674c8ce0f108bec10a693eae62c9171545b21c53c804ddc1479b6ce2bee4bdf7c4f426d21089682302c41c7fd33ffe19
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -4c222346b39b4b87631fb26dd9b3a8942374f10ec577d0aced5cada7bb0fb34d9c85bd06b6d52a4229ec662ca5605aff7896f7d74483fe99
+B = -f6446ca2883d7e26d47cc7596c43fb14cc6a5a5d2268ccf0eaed81f3a4ffaceb5187abb198ca9291770d52f58a420d4149662371437c47775a776b8e9d6ab17a
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = b832106ab8bf5c27886927f67c5bb95d81280a5b4a3a044c39c816dfa5c5a4c6e8058d34c3e44bab649194932e42c197b40d16213f6565e4
+B = f6446ca2883d7e26686cda35671fea74a720e4d47fc0bc278d3a68a7203d794c051c4279ae14a1182b8d82c77d32ebd80ec0f50aba99e0df1f014d44a2894a2f
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1e4bd432a98b6d68d35627f4a46b56f04b378a535b50c7287ec949008e8ace3ed04a128043cbac7a49c6c1cb98dc27b684c4f971d69b51268
+B = f6446ca2883d7e29055c2dcab8961d2964ec8c1542d1e489c1db18381f83f0202b78e9623c8729cc183438007dd1ff280fbea657769f1ddf1f5dfa834ba3c27b
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 2af2a9aa0364d970115f35b6ab676f4baf1f4ed52d07cd808dcc7fc7bcdf2268f917a7e4476e429200a37b246e786e85a2b62d6b52de13135
+B = -f6446ca2883d7e29cfc98540562cdd9d457d6835b2936a40005760553af455a11bac55d521cc6c6ea50d8e40b7fb60a37d8a3be4d0638ad0fe713a1b0fcfe148
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -5dcc7b06c24160a67934f3adf5f5a468f10b0bfe1b82e133c797674c941c9480bb1e71ceddd1151f88244bebc63c2da41557670132848e482
+B = -f6446ca2883d7e2143d73a33fbc93c349c3ad1eb9cc22ef5fdb1b320b2496a5bc56de4901210fdd361abf30e6405e58af10dcae18519c8357d97f352b9a5cb91
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = fe6a6b7e6ee19b5e4e2a4cef85f637a5b0a76007bf1080fcdc86c952a49adce824573dbb3c0d3f94d519698968594e0b840b6c91ec9153aa8
+B = f6446ca2883d7e1739f832b931c590b74ce53dd29cb8fb2a03ec7286796f6dca7677c42f0a2c775cce1f344880433e3621bbf1076347c1be92579a4718d9756b
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1f219dbf1e789d4d74f10ff27fb947bf6cc94bf1e742ba203caf33810589005f8326704b8414819d90698fe08d9b3c16bd261beb922a9af9a5
+B = f6446ca2883d7e46423ca9be987c94112099ff4ab56434f1d7ae64e9ad319dd4ee17da5edcdaa5623a035b805598d513dce26a2b8418b933f92a4ef80c89a9b8
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 25bbd6ed7646662f6dd8481ac4c4a531174bcd05123889d4cf904d12d8d2bcad5425074d9c7fa1ba70ac5c8a3723fe6b20e064fb4a9999e716
+B = -f6446ca2883d7e4cdc75d8166645760a07d2278fc0c1a69c5a2f7814a3015267cf316c322696f333389a5d98c0b8f1f41faf13d50cdb0d97b3735eb07b889729
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -74af822547dd8aa99da2b3b60b1aa5d45c33cbbdca0d2876531b31a25cec244482832671c861b749effc1cf5e150aeb9d8e88583953aacd577
+B = -f6446ca2883d7db2711cc55842549cfe8cd656bfe176a128da96b5385d4f074523b2b6fc67b6015c906c9e33df5fed93773593bc982de89dea88dfd0a741da9c
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = d35d55e21fdf90fb0abaea71ae6d7f44401f615e7dc6761713ec45650b94c02f85e7bca8c2f43ada8975617eb7ae6fa41f4eadedaeb544654f
+B = f6446ca2883d7d53c3490880404e4b91749f9b1c8e9d3144ef011484a4016684529ef44dbf1a16592bd667394cdc5cf9fdf10ae63a6cfe57846075b72caa4ac4
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -14872666f07cb43b47b4b82ef6df5b7696c2ff49a88ec9308e27d27736df05f79d452957297271756ca1afbc47ad011f1b77f32bbff831bb941
+B = f6446ca2883d7f6f930559a7eb22fb177b0cfc38f1d3def13e570d8b570a867abc0bccc74439bfb366288293682e8e4d8e4e4e18b8ee942e52411f65650a6954
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 2d2316a87167a23eff9da00b857c9423e44feb69620852e9e8d87ac70d96367a8947729b57804ab1d54022442f5504d23ea42a6cb0eddad04c3
+B = -f6446ca2883d80f9520971b69a033696098ac522c55eb3ca0d190922efa61c25c690ca32b741ee738abcc57445c254d77576cc933929c66115b52e74bf9bb4d6
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -4a296521345e531b059bd7bedbdee650280008947bb0de4012c11281d92be141b2d29b92812a4843eafc296fa69c55a697b4e9620a79fa8fd6d
+B = -f6446ca2883d79848a4cd75a3aad9642720e1f0d0db773050dd92b475c937c6c2dbc3bc695c62ab1e9d9e7e99c92f8d3b0bb8f34238238fb847842be4245b2a6
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = a29d4661e53bde02d72f6e0e3d19ccbd85d8c0a0392d7153ed330ff11e6f75c9880dd1f77a89be8c4e48b10bc7b43b46fbffb592a9a2f23b932
+B = f6446ca2883d73fd4c38cc4c61ff192938a928f95f509d2782586f6f93623ec50de547725c7dad5e36739853a52e729ee841cd22a52832b6d7b538cbb2caf6e1
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1c7a1c6185b0a2d7c02f3a7884e5a11513785520f1a27e8c29cc30707300edbaaef99509e9c4f578d086b2a8c593d0a04d32682c7c71f6a3d025
+B = f6446ca2883d9aa13d007050c2b706cb6a0291b09d3188fd638364a4e903a7646f54cc5a4194f4d8a89cf9c13690080a25fb4f31b97cefa93b3adfd7d8928038
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 21eaee9881dff114d10dad6acbb6e712c6d1acc6b878ec60253c44ad7e9272bb5ab0e2ceb2023fa9f427a23ebb464b2c8c411bd86032c6873ef9
+B = -f6446ca2883da0120f376c8010f417a9dcf4d881e32f3c56bb292b7b56d7a2d48391d7ebc695a08ff661c1fe80c12bab159144e434092eb7eee6c398a875ef0c
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -46f16fa8b7a3b6ecf476f8cdf5f77ea3a7c9be958ced5db6c6a9e11e6bcf3a156b3fb60bd5ff862c80d7c3e3f23c15df57a8fd7822d4c7d9738a
+B = -f6446ca2883d3735b0f632fc68f2522536bc16d37d78cdbb4fcce6150cc0b6ee5dc5ed8a19c4da9f5d8739fcbaeab6abaf6e9761d2fd4acdd59640911a153c89
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = bdd97dea2fd68c602862b0fdcbbe47d5e2e23ec1a10925cf34e9773d09d90caf70b5beed3ae1509392289be0ee66b649d45b3dc880ce4f48bb4c
+B = f6446ca2883cc04da2b4bac9937f1e397e8c410cb44692a2cfa0d1f944a848aec7a74f80472ad52954a5d51af083a55ad7719b373292ce1b9545e29792a5f4c7
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -145dd43715b37e7df4b56e5afa79caff8668de6fe4c2f725866d0f84522682f38694a26bea588a576900862dee9c9498df909fe788d72db324f6f
+B = f6446ca2883ec404641045d807be91f31539b467ac14dc12f560bf31dccfe46937297bc18312af293a51b584e68dc78bd6317367326a9b80d186f0d8bd20ff82
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 35094bde0256df169828d23a250e3a10f35f1fe30f168d463ccd8389197b8aaeb326ca86fd09b3d8a29769ac3c6ed856c34f10cb0d993e38252d5
+B = -f6446ca28840cebbde7f100e1148c929532c5dae9d2bab770c93646b3edb4a707775f111fec5784bbc02e0977ea160fa0e16508b6e48d767dfbf3cf9c57102e8
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -578294d2b3d43ffd19b79a65778710da245eb96fda50d50a3aa6ae3295dc50d8f7da1f5c8b98f4a9905ee840dcd139a62697eb45678259d7639ff
+B = -f6446ca2883805fdd373ad5c200dab2289329459ee7a2f997764cdf519d3d32d5bbafb94464ac83d1dca566cf67e3194ef44bc8a4e7a38f81eb7eb4044787614
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = ab192cde88b1cb3e6b094409c1e81ff84715d64ddb7413f6fc5dc1182abfcaca481c8035d16e0d698476d7094f2bf7cb3de1b1210ba68701168a3
+B = f6446ca28832cc9452b65f836bf89607eeedee48fc980427a984bbc12b07b7bc2d61ad5ca735c4171035f91b6a7ef01602bd96de6c28c45bc0fda8fd71dd4770
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -19a7abdefad11d1c9b6c4e0c4c1ff1194c490f63086ede1e4c43d964555a2f5e561a9bf5dc3a670b7ddfe8894271197747860c78949e6c9e357460
+B = f6446ca2885725d2ff99bbbd3c7ab2ea3bd62cbc1568be94716ae1e088c3c171a339b388b230607b096f4a634c95176bfc94fab7602428834ba301d280242473
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 275ce169251250a596ac64ac6e23ae05f8785db63b9cb83a9dec067472d059ea3aef07cf9fc20b846b3292899a8d3fe1aed5b92f21a89c1d924bbd
+B = -f6446ca28864db0889c3fcf0c575f300dbf830790214ede2c49e0fbaa515699eb35729b33e1534e6e332d207c5826a15fced16ddca8b783002300c01ff80fbd0
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -61039a571c78308b819da54c1849d8d6169a82e25f61f26e30ab16b545080417f2008ef89116e002660f95863c47ac02bc161bbb7aa8817457eade
+B = -f6446ca287dc7a8cc982726f945da8f6e371c2f22605db022c03110ffc46d281899f51553be845501b01f91c3eb127eded1641f1e6208c5b1793bae46d96c535
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = fca0b32bf9e248320b8c10128ff4368a766dd34fbfbf77e66cb2298fa3833bbf24451f508a50afd0131ad49c9ac8e851d4fb53f2fe33675f5e6b34
+B = f6446ca28740dd73f4a50857edd3ba8c1cfa189471a607b1bea2b38a840acb6eaf40d61d94b600bfc308bf4c71041caed6b7c0b59707a722e0102ffe829044df
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1c6f81990e54d6894188d5b872009c3eb5b2f10137bf7a27999d918790b587594afab3950330296979c354851164f95938d1df77995f6c0a9a3edef
+B = f6446ca28a047640b1843808b3f7d3f7b6aa168ee777a49521de6aa4e41156b0b7efb1cee889f11863c61292d8b36ccbc468d9337c69c06e4ca45a268b929e02
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 310b6086b85bf12c7e391184e070f623c9cfe07a8e495010fc13d584d748098f070ac4b7c31cbd28acd32ab6270e2a98f48d8d31525ada808858785
+B = -f6446ca28b4e342f8c24a9b2e7c2d7b47d911c2d38b9738cb74708037a38baf08c58d9f2444af22a8fc4dbcecbe46a2ed5c36c4778257b49e834110dea743798
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -4a51109cf8c033e683b1bff229f081d71cd5cafde15dc2d5f8ad0457e79b9b2e015659ee564de59f27204c685ef58977e13e19fe36a2d017fe6860b
+B = -f6446ca283986d1d5112e761b7a42a9d0ceb04ad8a4f18d5304c96d50aecad52c06a9fa673c4e0402e2e31a24ea532bced6331066ac8c0d6efa4366462082a08
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = f3e425af6aa16899624f20b49c4e9115034aa4d06ce9db9aa742a6e60d59d6ce0a067f5645b8e7f896c8561315ef1f7151e073d115f8e38df274438
+B = f6446ca278ff3bcc29f4d41689ba5490e5c523b9abe7cb380793d548c0035329de0ebbec7339dde9af37817cb7aab22241f397a6d3be9b39c1aed52d02c76bdb
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -18b2de417fc4bef91b5dd82b0e93315b306bf3a7f7bf0a486a567e9cd1370587b7e47adcb9accba03a8dfda5871b0bb1bdb569a90c079f7a9a4e87d2
+B = f6446ca2a0f05c68a063a9993b3d1ec73e1d3e262c88692d06217d4ad4cdfc35101b5ee10bbec0bbcd3fdb9c7ba53528fa6d954fa6920c1fdf1602e07c3d37e5
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 26b556807e84a9bf7cdf2697050cbd7145a42b8ef6fe10666da7a2e69827ad04880bb97ab3108a27da5fcc29a041bd6aebbaf00ab25a841674ff9f1e
+B = -f6446ca2aef2d4a79f23945f9cbe6d333496ca3c41c0a11405608368d81f207ed70c065ddbe5ff59c6a39a241b7703ad13944708d49792818568e77c56ee4f31
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -40b258c2211cc2cb9e2614ab4b23cb9eadb1ddcae903c93646e9f5e5afcaf912a2fdef26c864d83dcdd6f434ca2b0aa7f8ea7a21e790a9e4601de110
+B = -f6446ca2478b2564ff8227d481b931f0e466412c4e6a97ba255ea9cc238d87b28f196046b0dc56b84b2e37be7340434ea9277ef5eff22854eb7db98181d0cf03
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 97631efbd149bb0fdecce09d14aedf2efe30407c01c68e000be9c7be954999375e1f7720e8e5f1edfc48b92f9a063f6b2b378996459bffeae3d362e3
+B = f6446ca1f0da5f2b4f552f90411265ff1adb2d9bfdec35090c9be5025e8db5d9a99ac021f5bacebe2aad1e0e44ce7e53d94c4a32bda518e08d72637afe1b4d30
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -15f4c3634bbbd1ce04fdf96a69b2b8263290e188ca83956b74c6d190e7b877dbd176657a19ea125dfe9c95d2764002ca5d98e28315cb391779d56fcb2
+B = f6446ca3e789b45bdc5c07806fbedd42cab58f2e252a8e11b69bc9b9b6e496a6ba6bd7166b409d80b23435dc2ae094aad752b643c26acaa82fc1f4dd7f45acc5
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 39ecc3b285eb99a2ac91329da615e581f791eaebd477d87c7739dd961a2c5c6cf86a34c73856efcf3b812909d830186c910f8f053192cac9fca8ab7a3
+B = -f6446ca62709b94f7f5884cae8f2707690e864ea753b244255dffac9de1556f9e1aa2028da7d925299020ceff929c820f6541066f9d592c9ec3b1005ac7967b6
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -707e64f8bee7a679d9b72bd04b231cda716f5dc1b7a404f8c0679770c46fc944470ee2a221d1e3d166619ba6a430d0349e7e75c0ee021ed027dab5d74
+B = -f6446c9b80572e9b32248302846c89977d583f23e52699699422237663fe068bf7e7c514e2ec1bbcf674d2e5dafd7d193045865400f54667f2ec76636443529f
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 9ca2c37f4b1a392c34551f570ff06a74c5f027170815454c5ed3535d5232df54fb1f65f2304e32b4995bb77ccd4ece69db98452f182dbeda98d525a19
+B = f6446c98be1146326efb57dcda8d512b3083657e9d1a04148d0e1e3c7d4247c31bb66409a1e3e6bc0eafe4b2ab5bbfb69e65a3002f584f85503275bc549c55fa
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1190fea35b9a1ba1c280d57888664aa7db5f9d6d4325b35a6276bf61291d67e6e14e3001f5af1753faff61fa53861ab8ed15d15965e0dcb05718bdecc6
+B = f6446cb4193c2182baba8c62a0b4bf2495d4b4a65bb9e2c83415cd64e136dec15c4c403aa20a47d4c2aa63f7407931d6f96d428afeadfbdcb3eb13bcfaac9cd9
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 209797b717f068e5f808dd2b4e12576fa056879da881bfcc1819228e4f9dc6f84347edbdbe273657d533d7c928e51b68a82c59d93dfb038514c104c1bc
+B = -f6446cc31fd5353f1107d09828bc71ea41e17c6b52a4132d90223f1a839a0be7dcab519c9bc8039d3ac967d174ef00ac586df24615367bb4ce11e87aa2f371cf
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -7198b6aa26be42e97cad682aaa63d68d51952dae52d4cfe5f9a6acef93f35b6d7b7be87a1f2a944cf7fa9483cd6c3df7599d44c5b56e5ff38cd43d23c0
+B = -f6446c30ef86d400625c012372771bf1cbb37f7966eec73239928d08c3ca8e044b88ebddd7f1cbbfe8fec3044682b3b6071492444b97dcc164ae6fd90db18c53
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = cb788549eee4fa559118f0bd66b68d94845bdb7d07b2042d53a64921f3e3df76a2b143e9e9ad39dacaf405cec5fed9fd59050c5d27322142e4e11d4ede
+B = f6446bd70fb834383ba4950f06ee893578fc7846a040f87d5c5e45aec42e5ba45b04e2b6a2965bf5665935314d1168bd74788c44e3d0454fa0ed208100d16135
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1122c39c2c252ec96e9274bdf713bfa8200e35ed9f18dd087fedd2005e5898b6f8ed37e1cd7e1f7b0c5be137a71a27b7e4e4669b1f412e154e6ad2ad567
+B = f6446db4b47740e9738b8189472b260d6b848ecbdf7b4f769c32fb014797837dc86fc8e8275862b6f58ac0c1ff2ab1f515ce07ec2f46546ae5efb84c8f19857a
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 2d57e15c8039f8367d2e0198d9fc27616e53efdc9cb0adc0b0199362d08f5698af1f07499cd2b72005f1c09900c71b677e57cd62094743a9b3ae541e74d
+B = -f6446f780653462ac0225272fff8d43bf20023b03b1a3f50193e7e0403adaaa1344de44b444edfac3f05105b5d20c78fe509018365b2c30b4748fea0c7309760
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -539b4413477ef77c15fd53e202d8e5d183eb1c91fecf5b89959bb8d60d3f7907e95c5dd045d698a6a17f0150861b43bfeb2e5d40bdc970839b0712ee17f
+B = -f6446768d3fc49af312729404aa1266ea12cf48c4a53559818a9d9a8aeea1cc44753dac38dfd4181aa08a5e451022f21bf168aeb0308969a3c0629b570bfce94
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = fe46dc4f55346ee27d6ced0256b0ec64f82d5150c3b49d4cc7d56a60ae5d10bb649a57f4c97acc146388a6a9d25d3c3c7e42372e46bb4f8a72171ea5979
+B = f6445cbe1a7888d3d9b0c2c9510f213120c3bd4827076949c48da68513d172b26dd8a30fae5af94766d1c9c3b6ac9a5d9f8ec1b9c569be0b1e15bc447004569a
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1fbd702bd26d37bb1fa554ad261f1e7161ea438f49b41aab950884c5c87eb1e0b9a3a69807b759a1440ef9e5683c1a13b9d610fd87fb131619cb63997891
+B = f6448c5ff8695094585a0a45748c6cbb4dfb6eb53fabbf39290e080aef3d4616f0c512fcfa724d966d34540b3afc9fbf8d664373f9da2a71e6247d31458828a4
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 260abc8cb124b3c17698ee342bdbe4b1513a085effb4f79aca252c98c8799ad203dccc9c305cdccd2edc16159d0e2c7a125c50f8abff9e12dbe8d93c655d
+B = -f64492ad44ca2f4bd46061390e137278143b5e05047b753a05fd3d2797104611d9b65d362076763bf0603ed8572cd4919fcc9bfa39d54e7671213f4ebb2b1570
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -6f961198d2039a92d24c53bfcafd73251b575d5e06565db36666545d5994e511c4c3905cc0b93586f05916c08b8f51a0e0fe1b6253fcfa41bfec25196482
+B = -f643fd0c76a4ac23860c1853cc1f7b9ebc64f1739ebe6f2eb0af0c9c161a240359d29495c37d8525de0c1fa32a56abf421b1a89fcd7a4e79d8cca379bcd54b91
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = ed86313f32aabf2f7487dd9f587431e17b9a46e1a78fe89b0ebe81c737a73c2a8fef92c0963fc36e9808309d00c3bd14612fdf4fb236e06add8fe9329252
+B = f6437f1c56fe4b7c616f7618423fee27fda89130b53acdf525c76443e8b045f102b9c969c119af9f502477f4107a36bfb63e286e098cf03ff2a385d5f8bc1dc1
+
+Sum = f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -1741bce7ae27a7b3effa5b08b39f9d03d69efe7b0716cc57dc106aac17925a2d77c18386f7398db17f813c9c6f2dfcc9347e9f55de76b11475fcf77bbedb1
+B = f645e0be56b860a19bddea45d06a8095ffc776bae3cce6f1d3e034091538f6bde1bbd5718c49b977eeab08100ade2a633fe5d187de3a89e1e455c33559aa9dc4
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = 20bd41a0d6d691e8554ee8b90a775e04f086f318b7afdc7b5d6d7c3b7ab6b955aa286809856e1bd195dace84b18b2d0365edc8e066d2e8db9ae8325d00843
+B = -f6467876a24aeb903f243f8eab6fee120fd9153a2da7f082d61849da2e2f2903d43efbdfd4729cc0d0ac6da9296250364388e87a76e30fa560c811e907beb856
+
+Sum = -f6446ca2883d7e27209eeaa01fdf469c2f8a0ccafc1c75850e6273026a777d983ee4595953da45df13930ffc411737837352899de8dca276d30e6365e1eeb013
+A = -685147a1e74dab824bc6cb7fb30a773fbe5e380f46189574038d2d2f3983ced8777a080af6b06e9bb3c2d134a3302fa099b4bc78a4f01a4c157424ee3c773
+B = -f63de78e0e1f094c687a2e3367e415f4bb8e26e77b2813fbb7223a2f9783e55b515ce1b8d32adad829d7d3cf2dcd04807948ee52215253752e4d0c23930ae8a0
+
+Sum = 1
+A = 0
+B = 1
+
+Sum = 2
+A = 1
+B = 1
+
+Sum = 4
+A = 3
+B = 1
+
+Sum = 8
+A = 7
+B = 1
+
+Sum = 10
+A = f
+B = 1
+
+Sum = 20
+A = 1f
+B = 1
+
+Sum = 40
+A = 3f
+B = 1
+
+Sum = 80
+A = 7f
+B = 1
+
+Sum = 100
+A = ff
+B = 1
+
+Sum = 200
+A = 1ff
+B = 1
+
+Sum = 400
+A = 3ff
+B = 1
+
+Sum = 800
+A = 7ff
+B = 1
+
+Sum = 1000
+A = fff
+B = 1
+
+Sum = 2000
+A = 1fff
+B = 1
+
+Sum = 4000
+A = 3fff
+B = 1
+
+Sum = 8000
+A = 7fff
+B = 1
+
+Sum = 10000
+A = ffff
+B = 1
+
+Sum = 20000
+A = 1ffff
+B = 1
+
+Sum = 40000
+A = 3ffff
+B = 1
+
+Sum = 80000
+A = 7ffff
+B = 1
+
+Sum = 100000
+A = fffff
+B = 1
+
+Sum = 200000
+A = 1fffff
+B = 1
+
+Sum = 400000
+A = 3fffff
+B = 1
+
+Sum = 800000
+A = 7fffff
+B = 1
+
+Sum = 1000000
+A = ffffff
+B = 1
+
+Sum = 2000000
+A = 1ffffff
+B = 1
+
+Sum = 4000000
+A = 3ffffff
+B = 1
+
+Sum = 8000000
+A = 7ffffff
+B = 1
+
+Sum = 10000000
+A = fffffff
+B = 1
+
+Sum = 20000000
+A = 1fffffff
+B = 1
+
+Sum = 40000000
+A = 3fffffff
+B = 1
+
+Sum = 80000000
+A = 7fffffff
+B = 1
+
+Sum = 100000000
+A = ffffffff
+B = 1
+
+Sum = 200000000
+A = 1ffffffff
+B = 1
+
+Sum = 400000000
+A = 3ffffffff
+B = 1
+
+Sum = 800000000
+A = 7ffffffff
+B = 1
+
+Sum = 1000000000
+A = fffffffff
+B = 1
+
+Sum = 2000000000
+A = 1fffffffff
+B = 1
+
+Sum = 4000000000
+A = 3fffffffff
+B = 1
+
+Sum = 8000000000
+A = 7fffffffff
+B = 1
+
+Sum = 10000000000
+A = ffffffffff
+B = 1
+
+Sum = 20000000000
+A = 1ffffffffff
+B = 1
+
+Sum = 40000000000
+A = 3ffffffffff
+B = 1
+
+Sum = 80000000000
+A = 7ffffffffff
+B = 1
+
+Sum = 100000000000
+A = fffffffffff
+B = 1
+
+Sum = 200000000000
+A = 1fffffffffff
+B = 1
+
+Sum = 400000000000
+A = 3fffffffffff
+B = 1
+
+Sum = 800000000000
+A = 7fffffffffff
+B = 1
+
+Sum = 1000000000000
+A = ffffffffffff
+B = 1
+
+Sum = 2000000000000
+A = 1ffffffffffff
+B = 1
+
+Sum = 4000000000000
+A = 3ffffffffffff
+B = 1
+
+Sum = 8000000000000
+A = 7ffffffffffff
+B = 1
+
+Sum = 10000000000000
+A = fffffffffffff
+B = 1
+
+Sum = 20000000000000
+A = 1fffffffffffff
+B = 1
+
+Sum = 40000000000000
+A = 3fffffffffffff
+B = 1
+
+Sum = 80000000000000
+A = 7fffffffffffff
+B = 1
+
+Sum = 100000000000000
+A = ffffffffffffff
+B = 1
+
+Sum = 200000000000000
+A = 1ffffffffffffff
+B = 1
+
+Sum = 400000000000000
+A = 3ffffffffffffff
+B = 1
+
+Sum = 800000000000000
+A = 7ffffffffffffff
+B = 1
+
+Sum = 1000000000000000
+A = fffffffffffffff
+B = 1
+
+Sum = 2000000000000000
+A = 1fffffffffffffff
+B = 1
+
+Sum = 4000000000000000
+A = 3fffffffffffffff
+B = 1
+
+Sum = 8000000000000000
+A = 7fffffffffffffff
+B = 1
+
+Sum = 10000000000000000
+A = ffffffffffffffff
+B = 1
+
+Sum = 20000000000000000
+A = 1ffffffffffffffff
+B = 1
+
+Sum = 40000000000000000
+A = 3ffffffffffffffff
+B = 1
+
+Sum = 80000000000000000
+A = 7ffffffffffffffff
+B = 1
+
+Sum = 100000000000000000
+A = fffffffffffffffff
+B = 1
+
+Sum = 200000000000000000
+A = 1fffffffffffffffff
+B = 1
+
+Sum = 400000000000000000
+A = 3fffffffffffffffff
+B = 1
+
+Sum = 800000000000000000
+A = 7fffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000
+A = ffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000
+A = 1ffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000
+A = 3ffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000
+A = 7ffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000
+A = fffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000
+A = 1fffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000
+A = 3fffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000
+A = 7fffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000
+A = ffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000
+A = 1ffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000
+A = 3ffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000
+A = 7ffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000
+A = fffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000
+A = 1fffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000
+A = 3fffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000
+A = 7fffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000
+A = ffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000
+A = 1ffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000
+A = 3ffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000
+A = 7ffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000
+A = fffffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000000
+A = 1fffffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000000
+A = 3fffffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000000
+A = 7fffffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000000
+A = ffffffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000000
+A = 1ffffffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000000
+A = 3ffffffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000000
+A = 7ffffffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000000
+A = fffffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000000
+A = 1fffffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000000
+A = 3fffffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000000
+A = 7fffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000
+A = ffffffffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000000000
+A = 1ffffffffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000000000
+A = 3ffffffffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000000000
+A = 7ffffffffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000000000
+A = fffffffffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000000000
+A = 1fffffffffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000000000
+A = 3fffffffffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000000000
+A = 7fffffffffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000000000
+A = ffffffffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000000000
+A = 1ffffffffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000000000
+A = 3ffffffffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000000000
+A = 7ffffffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000000
+A = fffffffffffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000000000000
+A = 1fffffffffffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000000000000
+A = 3fffffffffffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000000000000
+A = 7fffffffffffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000000000000
+A = ffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000000000000
+A = fffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 200000000000000000000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 400000000000000000000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 800000000000000000000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 1000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 2000000000000000000000000000000000000000000000000
+A = 1ffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 4000000000000000000000000000000000000000000000000
+A = 3ffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 8000000000000000000000000000000000000000000000000
+A = 7ffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 10000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 20000000000000000000000000000000000000000000000000
+A = 1fffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 40000000000000000000000000000000000000000000000000
+A = 3fffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 80000000000000000000000000000000000000000000000000
+A = 7fffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffffffff
+B = 1
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffffffe
+B = 2
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffffffc
+B = 4
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffffff8
+B = 8
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffffff0
+B = 10
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffffffe0
+B = 20
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffffffc0
+B = 40
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffffff80
+B = 80
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffffff00
+B = 100
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffffe00
+B = 200
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffffc00
+B = 400
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffff800
+B = 800
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffff000
+B = 1000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffffe000
+B = 2000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffffc000
+B = 4000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffff8000
+B = 8000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffff0000
+B = 10000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffe0000
+B = 20000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffffc0000
+B = 40000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffff80000
+B = 80000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffff00000
+B = 100000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffe00000
+B = 200000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffffc00000
+B = 400000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffff800000
+B = 800000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffff000000
+B = 1000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffe000000
+B = 2000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffffc000000
+B = 4000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffff8000000
+B = 8000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffff0000000
+B = 10000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffe0000000
+B = 20000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffffc0000000
+B = 40000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffff80000000
+B = 80000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffff00000000
+B = 100000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffe00000000
+B = 200000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffffc00000000
+B = 400000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffff800000000
+B = 800000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffff000000000
+B = 1000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffe000000000
+B = 2000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffffc000000000
+B = 4000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffff8000000000
+B = 8000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffff0000000000
+B = 10000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffe0000000000
+B = 20000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffffc0000000000
+B = 40000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffff80000000000
+B = 80000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffff00000000000
+B = 100000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffe00000000000
+B = 200000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffffc00000000000
+B = 400000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffff800000000000
+B = 800000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffff000000000000
+B = 1000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffe000000000000
+B = 2000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffffc000000000000
+B = 4000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffff8000000000000
+B = 8000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffff0000000000000
+B = 10000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffe0000000000000
+B = 20000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffffc0000000000000
+B = 40000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffff80000000000000
+B = 80000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffff00000000000000
+B = 100000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffe00000000000000
+B = 200000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffffc00000000000000
+B = 400000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffff800000000000000
+B = 800000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffff000000000000000
+B = 1000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffe000000000000000
+B = 2000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffffc000000000000000
+B = 4000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffff8000000000000000
+B = 8000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffff0000000000000000
+B = 10000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffe0000000000000000
+B = 20000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffffc0000000000000000
+B = 40000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffff80000000000000000
+B = 80000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffff00000000000000000
+B = 100000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffe00000000000000000
+B = 200000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffffc00000000000000000
+B = 400000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffff800000000000000000
+B = 800000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffff000000000000000000
+B = 1000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffe000000000000000000
+B = 2000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffffc000000000000000000
+B = 4000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffff8000000000000000000
+B = 8000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffff0000000000000000000
+B = 10000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffe0000000000000000000
+B = 20000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffffc0000000000000000000
+B = 40000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffff80000000000000000000
+B = 80000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffff00000000000000000000
+B = 100000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffe00000000000000000000
+B = 200000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffffc00000000000000000000
+B = 400000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffff800000000000000000000
+B = 800000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffff000000000000000000000
+B = 1000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffe000000000000000000000
+B = 2000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffffc000000000000000000000
+B = 4000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffff8000000000000000000000
+B = 8000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffff0000000000000000000000
+B = 10000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffe0000000000000000000000
+B = 20000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffffc0000000000000000000000
+B = 40000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffff80000000000000000000000
+B = 80000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffff00000000000000000000000
+B = 100000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffe00000000000000000000000
+B = 200000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffffc00000000000000000000000
+B = 400000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffff800000000000000000000000
+B = 800000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffff000000000000000000000000
+B = 1000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffe000000000000000000000000
+B = 2000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffffc000000000000000000000000
+B = 4000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffff8000000000000000000000000
+B = 8000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffff0000000000000000000000000
+B = 10000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffe0000000000000000000000000
+B = 20000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffffc0000000000000000000000000
+B = 40000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffff80000000000000000000000000
+B = 80000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffff00000000000000000000000000
+B = 100000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffe00000000000000000000000000
+B = 200000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffffc00000000000000000000000000
+B = 400000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffff800000000000000000000000000
+B = 800000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffff000000000000000000000000000
+B = 1000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffe000000000000000000000000000
+B = 2000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffffc000000000000000000000000000
+B = 4000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffff8000000000000000000000000000
+B = 8000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffff0000000000000000000000000000
+B = 10000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffe0000000000000000000000000000
+B = 20000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffffc0000000000000000000000000000
+B = 40000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffff80000000000000000000000000000
+B = 80000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffff00000000000000000000000000000
+B = 100000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffe00000000000000000000000000000
+B = 200000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffffc00000000000000000000000000000
+B = 400000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffff800000000000000000000000000000
+B = 800000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffff000000000000000000000000000000
+B = 1000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffe000000000000000000000000000000
+B = 2000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffffc000000000000000000000000000000
+B = 4000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffff8000000000000000000000000000000
+B = 8000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffff0000000000000000000000000000000
+B = 10000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffe0000000000000000000000000000000
+B = 20000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffffc0000000000000000000000000000000
+B = 40000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffff80000000000000000000000000000000
+B = 80000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffff00000000000000000000000000000000
+B = 100000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffe00000000000000000000000000000000
+B = 200000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffffc00000000000000000000000000000000
+B = 400000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffff800000000000000000000000000000000
+B = 800000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffff000000000000000000000000000000000
+B = 1000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffe000000000000000000000000000000000
+B = 2000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffffc000000000000000000000000000000000
+B = 4000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffff8000000000000000000000000000000000
+B = 8000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffff0000000000000000000000000000000000
+B = 10000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffe0000000000000000000000000000000000
+B = 20000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffffc0000000000000000000000000000000000
+B = 40000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffff80000000000000000000000000000000000
+B = 80000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffff00000000000000000000000000000000000
+B = 100000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffe00000000000000000000000000000000000
+B = 200000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffffc00000000000000000000000000000000000
+B = 400000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffff800000000000000000000000000000000000
+B = 800000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffff000000000000000000000000000000000000
+B = 1000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffe000000000000000000000000000000000000
+B = 2000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffffc000000000000000000000000000000000000
+B = 4000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffff8000000000000000000000000000000000000
+B = 8000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffff0000000000000000000000000000000000000
+B = 10000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffe0000000000000000000000000000000000000
+B = 20000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffffc0000000000000000000000000000000000000
+B = 40000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffff80000000000000000000000000000000000000
+B = 80000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffff00000000000000000000000000000000000000
+B = 100000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffe00000000000000000000000000000000000000
+B = 200000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffffc00000000000000000000000000000000000000
+B = 400000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffff800000000000000000000000000000000000000
+B = 800000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffff000000000000000000000000000000000000000
+B = 1000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffe000000000000000000000000000000000000000
+B = 2000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffffc000000000000000000000000000000000000000
+B = 4000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffff8000000000000000000000000000000000000000
+B = 8000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffff0000000000000000000000000000000000000000
+B = 10000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffe0000000000000000000000000000000000000000
+B = 20000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffffc0000000000000000000000000000000000000000
+B = 40000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffff80000000000000000000000000000000000000000
+B = 80000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffff00000000000000000000000000000000000000000
+B = 100000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffe00000000000000000000000000000000000000000
+B = 200000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffffc00000000000000000000000000000000000000000
+B = 400000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffff800000000000000000000000000000000000000000
+B = 800000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffff000000000000000000000000000000000000000000
+B = 1000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffe000000000000000000000000000000000000000000
+B = 2000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffffc000000000000000000000000000000000000000000
+B = 4000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffff8000000000000000000000000000000000000000000
+B = 8000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffff0000000000000000000000000000000000000000000
+B = 10000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffe0000000000000000000000000000000000000000000
+B = 20000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffffc0000000000000000000000000000000000000000000
+B = 40000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffff80000000000000000000000000000000000000000000
+B = 80000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffff00000000000000000000000000000000000000000000
+B = 100000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffe00000000000000000000000000000000000000000000
+B = 200000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffffc00000000000000000000000000000000000000000000
+B = 400000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffff800000000000000000000000000000000000000000000
+B = 800000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffff000000000000000000000000000000000000000000000
+B = 1000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffe000000000000000000000000000000000000000000000
+B = 2000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffffc000000000000000000000000000000000000000000000
+B = 4000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffff8000000000000000000000000000000000000000000000
+B = 8000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffff0000000000000000000000000000000000000000000000
+B = 10000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffe0000000000000000000000000000000000000000000000
+B = 20000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fffc0000000000000000000000000000000000000000000000
+B = 40000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fff80000000000000000000000000000000000000000000000
+B = 80000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fff00000000000000000000000000000000000000000000000
+B = 100000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffe00000000000000000000000000000000000000000000000
+B = 200000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ffc00000000000000000000000000000000000000000000000
+B = 400000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ff800000000000000000000000000000000000000000000000
+B = 800000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = ff000000000000000000000000000000000000000000000000
+B = 1000000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fe000000000000000000000000000000000000000000000000
+B = 2000000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = fc000000000000000000000000000000000000000000000000
+B = 4000000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = f8000000000000000000000000000000000000000000000000
+B = 8000000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = f0000000000000000000000000000000000000000000000000
+B = 10000000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = e0000000000000000000000000000000000000000000000000
+B = 20000000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = c0000000000000000000000000000000000000000000000000
+B = 40000000000000000000000000000000000000000000000000
+
+Sum = 100000000000000000000000000000000000000000000000000
+A = 80000000000000000000000000000000000000000000000000
+B = 80000000000000000000000000000000000000000000000000
diff --git a/test/recipes/10-test_exp.t b/test/recipes/10-test_exp.t
new file mode 100644
index 000000000000..d83a25722b66
--- /dev/null
+++ b/test/recipes/10-test_exp.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_exp", "exptest");
diff --git a/test/recipes/15-test_dh.t b/test/recipes/15-test_dh.t
new file mode 100644
index 000000000000..46aae62cf7f2
--- /dev/null
+++ b/test/recipes/15-test_dh.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_dh", "dhtest", "dh");
diff --git a/test/recipes/15-test_dsa.t b/test/recipes/15-test_dsa.t
new file mode 100644
index 000000000000..b2747e3d46b3
--- /dev/null
+++ b/test/recipes/15-test_dsa.t
@@ -0,0 +1,47 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_dsa");
+
+plan skip_all => 'DSA is not supported in this build' if disabled('dsa');
+plan tests => 7;
+
+require_ok(srctop_file('test','recipes','tconversion.pl'));
+
+ok(run(test(["dsatest"])), "running dsatest");
+ok(run(test(["dsa_no_digest_size_test"])),
+ "running dsa_no_digest_size_test");
+
+subtest "dsa conversions using 'openssl dsa' -- private key" => sub {
+ tconversion( -type => 'dsa', -prefix => 'dsa-priv',
+ -in => srctop_file("test","testdsa.pem") );
+};
+subtest "dsa conversions using 'openssl dsa' -- public key" => sub {
+ tconversion( -type => 'msb', -prefix => 'dsa-msb-pub',
+ -in => srctop_file("test","testdsapub.pem"),
+ -args => ["dsa", "-pubin", "-pubout"] );
+};
+
+subtest "dsa conversions using 'openssl pkey' -- private key PKCS#8" => sub {
+ tconversion( -type => 'dsa', -prefix => 'dsa-pkcs8',
+ -in => srctop_file("test","testdsa.pem"),
+ -args => ["pkey"] );
+};
+subtest "dsa conversions using 'openssl pkey' -- public key" => sub {
+ tconversion( -type => 'dsa', -prefix => 'dsa-pkey-pub',
+ -in => srctop_file("test","testdsapub.pem"),
+ -args => ["pkey", "-pubin", "-pubout"] );
+};
diff --git a/test/recipes/15-test_dsaparam.t b/test/recipes/15-test_dsaparam.t
new file mode 100644
index 000000000000..2f06c1f4e058
--- /dev/null
+++ b/test/recipes/15-test_dsaparam.t
@@ -0,0 +1,78 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Glob;
+use OpenSSL::Test qw/:DEFAULT data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_dsaparam");
+
+=pod Generation script
+
+#!/bin/sh
+
+TESTDIR=test/recipes/15-test_dsaparam_data/valid
+rm -rf $TESTDIR
+mkdir -p $TESTDIR
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_4 -out $TESTDIR/p1024_q160_t1864.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_4 -out $TESTDIR/p2048_q224_t1864.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_4 -out $TESTDIR/p2048_q256_t1864.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:256 -pkeyopt type:fips186_4 -out $TESTDIR/p3072_q256_t1864.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_4 -pkeyopt gindex:1 -out $TESTDIR/p1024_q160_t1864_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_4 -pkeyopt gindex:1 -out $TESTDIR/p2048_q224_t1864_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_4 -pkeyopt gindex:1 -out $TESTDIR/p2048_q256_t1864_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:256 -pkeyopt type:fips186_4 -pkeyopt gindex:1 -out $TESTDIR/p3072_q256_t1864_gind1.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -out $TESTDIR/p1024_q160_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -out $TESTDIR/p1024_q224_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -out $TESTDIR/p1024_q256_t1862.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -out $TESTDIR/p2048_q160_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -out $TESTDIR/p2048_q224_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -out $TESTDIR/p2048_q256_t1862.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -out $TESTDIR/p3072_q160_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -out $TESTDIR/p3072_q224_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -out $TESTDIR/p3072_q256_t1862.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p1024_q160_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p1024_q224_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p1024_q256_t1862_gind1.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p2048_q160_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p2048_q224_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p2048_q256_t1862_gind1.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p3072_q160_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p3072_q224_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p3072_q256_t1862_gind1.pem
+
+=cut
+
+plan skip_all => "DSA isn't supported in this build"
+ if disabled("dsa");
+
+my @valid = glob(data_file("valid", "*.pem"));
+my @invalid = glob(data_file("invalid", "*.pem"));
+
+my $num_tests = scalar @valid + scalar @invalid;
+plan tests => $num_tests;
+
+foreach (@valid) {
+ ok(run(app([qw{openssl pkeyparam -noout -check -in}, $_])));
+}
+
+foreach (@invalid) {
+ ok(!run(app([qw{openssl pkeyparam -noout -check -in}, $_])));
+}
diff --git a/test/recipes/15-test_dsaparam_data/invalid/p2048_q256_bad_q.pem b/test/recipes/15-test_dsaparam_data/invalid/p2048_q256_bad_q.pem
new file mode 100644
index 000000000000..6f7d98ddfb03
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/invalid/p2048_q256_bad_q.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEAwmWp4Y+deYlczoQUPiioJt6Qxthrk6L1CAVpGH2uRRlHfTl41WUX
+JHIJyCMBgRDtVVQdyAQ7AZ+CxOl1wpazvGJddyQVynhmIFsaUwHF2fYIT00MvBRL
+9VA5PQqUmX2Tnog5ezu35CTsEqlBTOYcGqkQ7ctNVjfvjYCkwzvTxJS/Qsvki+dA
+fE7NDWe+9r5QjSGEFZtH45alIM4qUnBS1mcN2Az5+S8JxPiivY5Jkt0pXoRQnvCM
+In4bHjM8ZOVmLxFCIrpB0dNgKDg+2zEjRjmL7B4aZRcO7wDyrtDPc7jiYPH/rlt/
+wU1o/Y1fnzN9+R3f0AMeWR44bqf5Ol9jVQIhAKDEbXZJcYLbvkUYWBr8TKsVu2hc
+H57M3PwkTsq+v2/dAoIBADKkGYUe9qsp4mqxkBKaEdpcjmjfLrvtE+3ikipPPGHh
+tbAX7NwZc9WCyhniKYskEbJBWsuAZJXDgIRNaSpCVLK7dd9fx8ZnIKJESO6Htv1z
+JfSIST57xW8L6m78Lq2kxpr5dVcm7I4pelTfL5jscTURm/1Ua+2skI9YlZU/Vgux
+Wrr30H8bp4fUgWjcgPJbeirSY7xVI8FKrQaES0s4NRFbgGMFUrEGddBF0bgaGkwd
+mFEpcXAEQDTJV7SPJp3rbjFug3CF4Atw3RmkV2T/sHAbplyr9YsQDmAQDhPsaWjQ
+eSsoRUq0aQ4aa2V4X/gSzSj9It3Q4ngQwkGGOPJEo44=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/invalid/p768_q160_too_small.pem b/test/recipes/15-test_dsaparam_data/invalid/p768_q160_too_small.pem
new file mode 100644
index 000000000000..c717c917a1ff
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/invalid/p768_q160_too_small.pem
@@ -0,0 +1,7 @@
+-----BEGIN DSA PARAMETERS-----
+MIHcAmEA702xO4DjQl4WxLId1FR8Q0tZ+FQDEqyhzfYheBnLra8Uaf3gLp7V0g52
+aQqDTeY1TK76ZmNo/SvESDcYTHjlgKphYCKLRxAhvuyGfX1RRPWa80BrM76wYtJD
+mwB9KSBnAhUArp9BUvskZ9/K8Bzo0MVejsHC6AkCYEugdq5OD0HjCrxt3hFMD3sJ
+ZQ7VAZa+Fnu9SJNjCeMYLEww4/A6fktqokDWITjSQpdJAAxwc+r8OlDRwBb0q7jT
+w1IDvvbF/xGex5VzHHBZmQU1G1jH+Lq3h7dQ6d4l+g==
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862.pem
new file mode 100644
index 000000000000..a348548d6933
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBHgKBgQD9xYIlQ/DsVYRe/mLETy7f7U3uKakTOPPDUcmd1Oyaopii0hKek+kN
+Uo8gKEMrakJfJcWQmHwGrxbbPRndY7t/3VcNDukETNlrTeHenkIUOfGzE/+mMsr/
+yS0r8xKjsZU886tWU22ngQoftPZ3a+P4sm84yjBzWbOKMKKSw3G3TQIVAMiAYpYu
+M8Yh1gu5xsa6GHugzBBTAoGAOxWSatlBZLsMYzqJmzlhzQpc3yJ4RTu2tBZKZbP0
+1AOfLCOD3XXgvVWBEaY0t3sfTqv+iJw5qvmtfkYGeFyU6U3z/pTtDUcSenykU2Rf
++FM00ZgsjHSFCV80V95SaHIEEjqsrvfq6g3GHElxaSJ1ov/D9UrB4fiFJk15B4jd
+vP8=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862_gind1.pem
new file mode 100644
index 000000000000..9b8522f847b3
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862_gind1.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBHgKBgQDSK3iZ8B7b7aqw8u4h5frUf0245I7CqfIP1smwcCPuPpsrGAIpto2R
+/VjaPxTljGyg+DoKBHh8+g3GyIDTCF95KZITZFnNhdgszulUMOBo6BVIcow2xb5P
+5OuEEs8SI8msPJ+DELktb4k7R7ErmQkFJkw+js7Cp+OynJXFEeM1/QIVAP0eH8DN
+0CVrbBWIKTni5GYMq9w1AoGAS71s2Qtb3i18BTjQpvircllI1JJg2KM0PSrd395l
+U5QzWLlOiagq3VxZasl/xVPRWLEjsjJvW0br0+etaK/RUCRh9umiKtAA6ej0CU8H
+en/LyRimo/62jB9OUGmNeIlMbDCmTBj0wSicbxTFnyMmnExyRhpmpwxB4R5D1Do9
+7no=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864.pem
new file mode 100644
index 000000000000..2ee282a77518
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBHwKBgQC0mfNiG3j2s4OVjBSfxcHRAKm0Pq1EMInOH08H6rGDv2z+jxjpcV8M
+trTPH+edBXpcPIfj/g8W4uHzQbrhkgBD5oVFgxeNkdx4XFs6hYR/+Rffoz1yCyrK
+Y3u6KuliLh78b35nrD8a60c+sdEeyqyQyityC/DLfDPsHsaDoci/pQIVAKVuzcUl
+eLXk7fMosqqyWdRYuqT/AoGBAKA1RycVanmWQDK0GC+qz7YWK9pbN6jOTor+0lYZ
+X+ZOOgOJfd2VxN6BRMLrLZzwyZzLkLxCfGewtIESt7VOinJXlV/GQOaw4jSVUpMZ
+Vk3XXGzlCREZ3Io3/RB38jvK5L0GAvdlCHC2+SRz3zJv/xsu6jp5YUDyKA6BCpSc
+Z1dn
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864_gind1.pem
new file mode 100644
index 000000000000..64abf5ed23d1
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864_gind1.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBHwKBgQDAs/X8j/GO88thl0UtbO1yzQd1rmDrZDuCz9u7KGb8nih4FMqRvqZq
+6SZ/jsgWVVmKSz4BR+pBXYhtzjWk9hJwtyDDMKgb/aQ+A6ceN3Q+56+wyrtq4IHn
+GSxq1qos6OGUo2eJ/OnwrFcssmdhsPJh+mRbksFlj4ioOiWFZP6EdwIVAKTxLxHR
+1mqrb8VzuKQtF4v29OX9AoGBALIvy95r7pNVU21AvWdgiqZ/0KgOl6Ltw39a4YoB
+1KJvAB7w3A+++Y9dJ2KSOcDleea/vOB/zke6Gn8tchTLxC+5wgxqJYWQyIJ2ayU+
+kuGbg73x25ZbxwOf/L/LXawlbYw96K/q8gHtTAemegbg3mA5FdB980PT4QO7r/Wk
+8pE8
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862.pem
new file mode 100644
index 000000000000..a6ac0a106d9d
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBJwKBgQCYF3IejaKxzlgFtW2qEHTuciYxEwQDK9wQoJXqnoeCfc0ZzyW0p/1y
+ykjmyQibL425XHDqa8n4juHVDlR7sdkWQgCxU9Y476zHMAllJiMRLb0YWd3htG8e
+4RrZdBp2ja/axeY0Yt4Y3tpLt8a1Wm6h6E17ZDkWJOHsiyhS0/A3GQIdAPFwM2kA
+z0GDenrDrTZReA1en6dw7ks5zyWkpO0CgYEAhULB2zCf7nKNmnbMAZM1M+UyooV7
+9x0esJ0nD192zQSfp5bLMFRobHw8ZJRNwwaxNvGj7T6kN1v0JbF2kD6CQ5qR+VQ0
+B5kPnrLEe1rEnMI5GY3mUEhuXT39aaEZgSZlr6Y28UGMaVPsLK/tUHQRv7NgbSSF
+VKxcAFZi3K4b2jQ=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862_gind1.pem
new file mode 100644
index 000000000000..0a2f828a1445
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862_gind1.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBJgKBgQCS0aAy145AKj1XTv8Xn0iBHRdJCHNue94IhsSuOLfqi1Usj1uff+Ti
+mV3Rb2EPvGAMoGVnenvH7X3MjO1qWUW1hHPVfZZ6cEJwMoOEht/2X5rv9r8TZiEU
+iMIMQNSwdGeRUqsCCEWhGKVhVVkZmHSRhwmG9Y9b2YibPDWEk+8o/QIdAOaZ2Kx/
+nK8OMtoJ7nY51gt6qk8BaLk6JELdsLUCgYAUUhmgW95kcJt15TZqFsVV0CXADHqc
+LYT4WcPsXuJdiQorZqeyRXNPzGoRvk9s1nqrDwoIwTcl2rArLPq5phcIEGtATR8B
+inIIAPB3v+i6vuZ5TfqdVpA9E4NDNr/hTKR+Jn6hNLzliETHwAXiC+cuAq32sUiW
+Ec0eJs9/vgTiOg==
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862.pem
new file mode 100644
index 000000000000..075b1fb78515
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBKgKBgQD2JhtE0H2GzUgkWXHSj4aLIMdpLhbpcNeM8UR+GCr/QMv9YDmNmdyr
+imWHrgc8RhPECHAYkhMT6CbRp7X0eOJH/+Z+wYezCzbj6tWSMhXv0cNmD2qJFNNr
+g4ps0xfA2EljAzwQP+GifJuaZXcDrPvolSCaTIirOXUgWWZhRuPUhwIhAJhvIt08
+R98NOzAtFpzE1zIUCLPmCchNpPOLTbzOockVAoGALCWqChas4A2gweHVumUFYk8f
+1IEQUsiw/79hQwYk6vGETs0sxHwd+XXAAUhs0ogHmg1pV9FF0cktSgp8IPXQMf3x
+/pSfhyAexSY3DWhuFcYkYCrhDHfqMoyylrbdvjPnFONw4RqQWN0Skhwq+/Kdki5P
+hf8w4xPcc+HNB76vpd0=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862_gind1.pem
new file mode 100644
index 000000000000..6cd9a27adbac
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862_gind1.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBKgKBgQD02ixBdDQoEc5FADUTwlD7DMVb0EkZRlEuC78fH2xorsBBam/3JS84
+x5uiV5UpdyGEZaORTHOmQFC3DvtwojkCEpOzbITYft34ngXGrANdkAAYkfmtbkWH
+Oudses211ciLVNEtcvnWp9koyMwaiW8UJS8VXZPPdrF+5Sk7yUWYtwIhAK68pcA1
++/GbxzchcTcOEd1UzrhnJiQuWhCLAbrF8TjPAoGAVethgbgs116PQGJVwsRwCW+j
+dz609/2baEKKVfKnUCSbngA2nZ2EUw8fQjZvvkGeEnGc3noJkDthjxiEITvcXgQT
+59qRury4mxPPJ6bKp1U4SpJlmpNl/Uigm3olF45YOjOPrlyj5mIn/fHKvXp+9VH8
+KRjGRfDduSvStNrSQWU=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862.pem
new file mode 100644
index 000000000000..4f247195a54b
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICIAKCAQEAy4AQqY3+v5g3hulKvCH9iUzGOprsNag0knEt+xdSS7z2kpxj1ab3
+8DJDtIBfn1B92X6GjaiCKuH1FX2acIEq0DOvl4zNYQ7WSTA7Z5+MXK8Zk7slxr9y
+MhDj4xyOAnxZ3Rlkuv7H5HgNzS2lP3bZLiFFWw4YYqOLZxzjHDcaTVqU6orNmIJX
+6d9qW1MIxhVtKCjPsCqfY3qY206so3dxi+bK8EsweTBP03HO/SmcYIhFVStekE5v
+LoCSzTjDOK0DisW4SGF42m3Yh3m52Hk2fOckhc1si/JHA3Tko0VnRqUYz6gP2vWs
+7SkJzZSlwQFmxKkUXPdypyn+bA0XAyfQFwIVAMxf1UMfNLp0iajYC/liKwUgS7uT
+AoIBABA1H4tJZyvC7+J/xUf2jxIgHlGiJq3G70CXgHr3LKHhLWK/WHSJAsXGKYsl
+ZFB/pQmjocwthHYGicwB7pwYHotEv+JNMAWLiZjwb1MckGCZW6HcVsfXw52abqUP
+tqGAJu/KbuJEVtoDz3m7umI/S0IHSW8kRY4I96jL+uPXvGOTgnAHtjaxYCEZL3iK
+/vRpjuE7A52a52IZGZ+GlQxmfT3cOnHLTZpKaQhFJ6mZyrOYzaLVVnC2JJDMeUuK
+w34pH6dqmxPL41uwPyv0cCuzCfAlXbrWPs2AkFbBuKnyD8+hxpy1rz6EK1dVleLW
+mgxBLFL2D3yc59rp1hZU/bwIcSs=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862_gind1.pem
new file mode 100644
index 000000000000..e839783209aa
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICIAKCAQEAvGtt/0832RbWBAXM9y3ubL7Hj/VZuQo318k8DUbTv1/886isw4uX
+Sphv6TsLO9qb7Ma1k18L4bK04NNQheSfvq5LZbMtX/VHWaoCSuzMj73Z+XTWTr/N
+aYwVAUq1J/XrX+P5F9b2KCEJ7iLAL0BkZXnIMVMwWcqmY7JthdQYzCwOc6S93aiV
+MEHKtekj5KtxhmD5o6tPs1GrVdnCUGXAZZbi1eVHbUro114SyWGflvnaxC+4WGRz
+GN9EoqtPZhOKlsAHaEZilf8tJDVOi7rnYw9gFvQH6PUWOV6U2fuYBmUBD8fSx1YE
+xv1dd/rawmKJ40ILXxOM2zzMYXwHse/qQwIVAP/hJF3q0imEjGKYSxaJ3cVZ7agp
+AoIBABRqCTro/ynhun43xrU/FRhsUIK1ewp5NEBOsaUMjm7w5HBVHfytwyGB+WJp
+h3Og73szKv2JsNNWOc+ASw116/mTosO49AJWk3YYdcoIiOpZbO41+4BWAIxE0ZqT
+Bjq6uQ3FR6EE+yQk486uIR4KqQ3Uj+BfQ6qJ+hOQI2gpNUkIxNNXVmYYgRZM9H1U
+oYTqeJYACR2spZYTRwwzUMFQzfBVyT7if/zHYi5NSAdeK/sjGT+XXAFw52e839nK
+7P5UUjCaqsduLuRkYcWE7f6hqgi2O2Rgn4kTaRrL7c4FBLmz+vlEffJJKNnjyX1k
+m+RhuXnP8UzBtsUdz+7Z+EioRB4=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862.pem
new file mode 100644
index 000000000000..113aca5427d5
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKQKCAQEAkv8C0SmPpJc0mQ6yVzDzQr2jIO3Gj2n7MSJ4EN816CecMmO8vBRz
+8x8W1BvjYDJiyFW7KIJcgI48D7rBndKqd2A8r9ErPJrFx/7AnPD5/b77vRKcJ14S
+8DNjSm+9Qg8281TeIztUrmUjWHIPj1ZNSev1yaprK5u01BSi+YIAxNOST4RrMurZ
+wz75VW4QZ/JkAwYy/r9LSmqeli3Hqy1sS52B1Ew/c1tVj6th+dPlprOPiPCzj6KD
+BkxDU2wjJJE2rYiMZqq3wKHlkuNl54T211DrYY0tM1YWSrPO/KjQU6lNP6DQK0WM
+w414Rt2MpXipr3+eSNGIx+evNOS2qJ84YQIdAPTt4hrsGeHjF2/fhkWJm+LP9FCM
+4fiSw79D9D8CggEBAI75tDjL8/Eipou9X61x9ZobVyubG/VaLWCV5mv4Wn4j22Gn
+T9OABbmZUAJAp18CTouXXU7zjR6f5mFgC/h/fgOqVqe5M9rAyZ0h/2TZ5cwnya/n
+8NydZzJCDPihpk2BXuxWVqX8J0R8MuaOQSSh+LqTd0FgW+by6i9jJm4ZREp6h5v/
+Bam4BPtNdLVKUDk09B0ILfry5St+hFdFdU7HtTgTIBb8buNaNGbiTYgDPaz2YjLT
+Nuaq71RU37PBxmbmgCz/rwAdNzQ/eGylfIPNO68YkFTY0zhYKBZfLEtpKN5s8gPT
+wpXU8+lm3EnkoG9h7+qbCIs6G5PUu+FartqzPpQ=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862_gind1.pem
new file mode 100644
index 000000000000..c7071a2856c7
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKQKCAQEA5uZxsPfUbcP0YBjVZ8QTc8b0Vv1kphd4FnoqMZgW3aGYL4iTN/I8
+av157vC6PW1x2YeHyjktd3yVJGZidqzfnoYuQdZi3wrJDST8BrGLgh0fuRNjH/RD
+/OUdCPCJteobUpRn6myPscvAQyHsWisKpFJcOnmqBlZNfommoXD+a5weABA0KAay
+MJu1+ahTaTjWCSGQCQ/JqSHFmYVy88l09yqFaHfvG3L62tATvqvuJZ2cshl5RCYQ
+ajXZS0moA7mk3ApShLdvskD9yLZVzPLb4gaG0gT/h36d/gqgZi8pq4KdlSxuAIDa
+7QRYWQqLWB/NgHsSvbSoxPN+ibfyyDPzIwIdAJu0noHZp7BCtEhtqSZkVSvGfrL3
+HQh+JP1TMtcCggEBAJlFpiWZ+n0W9dqHZ35QG1e5goMQusyJ0Oke31hCEyKVY1gu
+1gdxUVirhQwNpdfeBJMHzMNFpD3ocC3lMKRwEN2oZMXECkjzAPbqyvNs55i38CGn
+NW/5aAqkBnJvG4/O+ANwB+r64hgUiwIxlBW3w6TQri3Wa/c5xCvThneRFTFGuDWi
+r7hPDIeIyUYzgE6bJelX09ruhQEzeyFj2snfr0uCPjf2lqqy3FnoTVjrZtkSr+Av
+/esxiZjLfuqZQhYJtQsAIbuu83rD6VUnMF5X0XqQugMMJXxJgcBgomE6cHlrpqXL
+hJD6l77XftHNokshhCQxk7w/N/pH2j4Pxidfj28=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864.pem
new file mode 100644
index 000000000000..9b65430b58bf
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKAKCAQEA126Pk1rYEEQXV5E2hdg+uS+KfbEdtOncGOoMiCUajJgIdpmPycUh
+R5VE66AuwjryRaBAezW71UVfgEKyu5521aTl0SB9N62EkVQ0KtRErSiynZ9jOC58
+4zeRsRUquzbl7OyaYqgZz0N+AuKQYeS/SZUhvFUONJ9wQgVEpLF3Gfeq1xFx1TgM
+JTCyMyh6lZwvZvYa3bXcoxfCpsyo/mHmKZB63n+AKy2YRWfMpGFTc0osygaoLFRe
+hgo928CU5rcGq3uhkBIRRkYvjq7v1wPNgkdydtPxzsJ/2slZmoD1l92TK0XJGP58
+FP+o9ThvAg8wobLP/rIW/IerL/v0jo4URwIdAPuKgUfEDIyRPWaL3ZqRGrd9xm1o
+S8t/0jlAJ0UCggEATxHNhkSCNWypeGWe6SQH7VZBdlcVO4gDu6g04Ui+XaIaMAKg
+WtYBlmeyzvArfyZxG/o3mrFL/B1/d3boNkgu850M5Ijz5qY1O4NO2Dof4uLXi+vy
+zBJ4ThHF+5p4mr7JSIjVGHpTHCOQEQTAI44LcIdFij8cqQXRUB5MVERkRqY+5lEe
+c6oqildf8Gd99xOIdp/R2hD0tRkwMH+zFKYFuDlmX35X4tagzvQRNYBx/KMgFuXl
+ZbSMoBIEbF8SvzeJp04FwxjE+OpBur2EMuyjWyxbho42Mque+mAqwJQ8xNLzC1QY
+S2CHPTT22NehGZOLK4YtSoU8GUTiQT8xDUitXw==
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864_gind1.pem
new file mode 100644
index 000000000000..e715e4836a82
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKQKCAQEA18dE+jFlsFpb68u1HSpjkDsOfBpimo24pBPUPstH5bg1vZNUFXwj
+J3BgLw0qOQ4COO9UvLxthcNr/tirW8txqBoVVB0iw+gScPeZQCkSOhwB9MZq15hd
+us3a8bBrXe1MXSJ6HMsCJFo3VUM3grLg3IIvMZT13MDlEFre/Ttds4UupSl/WEiv
+PjZnUEY6BD9JXNTWAzmHq2gIzQFLd9vLun/KpStotiBitUwXZXy3WTvz25dRpRnA
+XCa4MXBAGHsKhFOL1ccLpHgiX2ELWkyopjWEErFLyyAJcynhx2PrQTrIhfv4rgdE
+1ecqOi6I2oxntmFyjIjFJ4e8h2GKwxL8WwIdAN8WQLZ6RfMm2Zl3tGVJVldNKaMW
+2r0cQuKFL2cCggEBANBlnziHSTcuv7L2SK/nqbivto5xjnnJg8XGGL3ZqWCbbNyv
+PJ/XyromDzuMcGBIokn9n6g4YXqh2ik0in3ntOycP5D/JYzANJW7hGefHQ8zonSb
+VgncDeX5DfqhPVFvsGhRCPxWehVzvYf/6TPEI1Mhoodj5cOf1+ZQLk31Jhnj62Uj
+OC+++GU78p2Ys9vtZXKdpGkHxh5ad/PwyAsbk1a7hNFxPBqm8kZt4GPfslz1e2ZA
+QtQENIs3Xd56yzSZM34Q/H1eDREr6vqd5wpNoERMtdvD5cthgpp4cureCDEmaKRr
+iLG0Z9vWn6sUCnbHH5ieZ/q6lodfKE1aR/dUkDM=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862.pem
new file mode 100644
index 000000000000..773ef4fd934b
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEAgp20bAUCq6LO/qtRdecf1jBrQQSIN7RkiciGLqS6lZsC48EzSbmu
+XfSMybc/zsid4D5qwKBwNedEeL7IO1hHESBZ6qD8Hfk02V7QbyatxDX7i6/XkcCo
+R9a2pbRDQA149pI13lBSINUAygLk33ez8HviDg27/WeCRaB6QgSMBK3p3XmSCuzz
+yVwA59XblCgxqfXWCHyMP6i7o97s/I+CoEryGBtoY2pXpRFakaFzzvMymiU8z4eX
+TWjAx4RMkwjDgQvgFEd4na32V0C6NMvQTVVoiPNf85YC9cP2zsoMCS7Yn1OAvn6u
+rKr++eLJKJbOtagRyC9hKCFIL/XXB31FNwIhAOUwm8S5B/PqQmjLAP1NRQCjScxd
+MNhND3vLSiO2DtS/AoIBADt/4Matb9qA/hKmDj3YxsEKElUUrPkhF/fSyVU12SIp
+cT6B860JJ6dUD5PefAwQA47DxJ+T/LTyYyJGK+xw0jKlIH+e1zmhxd6fZyQ82UES
+Cb5bulzEsMIZFV2BdKlLppHw6yhUE0qr3nl9gr/4TPULNpT8rVKZhW3MdA7u08PW
+7dV2XhY0PliYByGZr1ZjKJM7bpjkWLvJAN1WrwSlHjcJV9vdD6tqIRbVzjOqrcN5
+xlP3JdkQV5iXs3RlZ8JrH1M+MWp6udt4TqkkPkn9VzG4Kkzw9BKn/643Aei14Jet
+bucs20eyianZeBHqkH/sMw/tfM1e3GwdnH+I714WTH0=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862_gind1.pem
new file mode 100644
index 000000000000..a405a4a38b08
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEAyKq4F2lBf+8YckEU6JW+pfOqViJjtpOdVlZGDq65sYeUs6hUo+Qs
+biO6mZy8m3XyEWnSR/d0suL93xkjtoo82M5jYkz49I7rAHWRJV2WLjWz37asjBzN
+F1dYg0RtEio+mEQv2mzLzr5mNeh7XcjRtTMW6iNH3GAQ/kuFjKY2nEPvJc8m4Udx
+RYGjGSyL2vdWJf6iQsxv7YmbsF9P0ZQhvLu9VhoZhtNaujqAl+fsfno2cgfDyf31
+Ppsnkl1WuBM3eD8ZWPB7mjsxS1z7Fxh3OxaqTbA1Hd8Fj0ixNG+D6kDoErSnZjg5
+Bc4bjLG10o+B3bCiRx/3ozM9IRGSrpI/ZQIhAMNuTbIp8SR1EtifRudeNiM9Tlk3
+0CmrVR2hzRUSpKPNAoIBADuHBrhuKj93By8DgllwZ/cJOXKV32frVdocX5PAOEIv
+2jDFd2ya2Gyi/nS/AE1UimvjAFP9nofyzvDJG0xOhqvwmVU2kdj7632JdSFj/Lzj
+twtqNDve2OYdcZ4GCBiH6XOoURX3HOhJqqYtEJHkW7OKFzhlAYZWreELm9RaiuFU
++QgMmVZ6wdbnNoOBpjCjzjtMf+7pX7Whh1g/siYo0fR+LVHHfqHpxBuXWGbbOL04
+cSV0/JF2xqynH74ySqvuoEA3o7K+2Xo0JRGcwE/lkJZTEYaahJmeVQ3Nf2NOrOFY
+J0NRY9hOCEz8oQOC0AmBj4OaKaoFQKkP3DQWFNjK4jQ=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864.pem
new file mode 100644
index 000000000000..36674bf95c67
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEA/nlxxQ86nKiHEsmMT5OtmxXp2tHw//Kz+9089krs/fN+KT8mxUlC
+5Czyx3Y8NPCratNfxrB9/74BVFedkt18GMVRUaQNRQw0q0aWrrzPhZpXxBskiXOA
+mQelUKdMmuK7ZbulrNjInWIAV9Pr3yO7FOWO272VhoBGL3nasp+5znGLLBUZm+kZ
+MEnk8Us1/8KEn4/5Q7bzvaN/Pge2kBF6JPkPprtsCJgy7aJO3ydDc0/GZIfB68Q7
+RbTMvCCLuMzgYdeLc20y0d5CZ570gPBU7zl/ix+a8Plyue9hX5NHt1aHFTGpLNyl
+tH2WCiHhJNLcyacbOVK9Gz7XMMeFDR5/AwIhANY0MlY3BTnv9wp4cnACCzNGskxc
+XKxwqCalKyQJtRbLAoIBAD1HVMIL/zH5PcEu7hCFkd5O6cJYR5ETRWYk3VQw/i5r
+P4jQhoQH/ztY84pr2cd7/maGSbz9O0D6o1M/im3TX2+NrjzwlTNYTRaPI2vV1Z4N
+wb/3zczBshhwpZ6heFxIfnchejw9hAXERz94AWfKPN+e4mIGII62Udna5AeOJufM
+9KW2PGd9GP0n1HlziDUYtZXlgCqgQvYlfPp3fj6Cdy49MsY7ZeEfEljXWM5+mX8u
+lVLTqN0uwkLudAuN51nphaIJI+AJ+TR7rFgYEoG2O/6uoqxBVgMoTKkkJqHM3UhE
+5pd7AMkOUpUzuw1YDCW9mdUY1dAgOJr8GZnknWAdjvQ=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864_gind1.pem
new file mode 100644
index 000000000000..398b266940fc
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLQKCAQEA2Drds0DjRV8ht73dVp44MMtcjvSxugNuElrwheVB5Bm1wsmrEVnt
+MSGdZJ5FpndQD/ndqSctTssjW+cxjJ4mHjVTXpTZURQZW0MNkn7+qVw6oFrnd+qq
+tDkh0jnaTYTNiEp6qm5QmnEC/Ccvr3YZuY9EHurzVptJuoRIMgFGCz4CHj5q2vQ/
+CPvBohUSvC9EmKGveWGFID+tmFWuHZ9d9pF/GWjA2rdW//uRiStssbN24jscsbZ6
+XnNrJpgyGYYjugsl+catrMkodstrLsk7YvEYcE6YYN0TwZc9kjJ5f3ydQnI35Y/s
+EQPtP7DdA8aLaOC1ra2Nakm2ZW+pkygPMQIhAI2NF0GuR7NjD7lXx6gnVyk3p6gR
+l7u+BNIhHFVJP2/9AoIBAQCvGDoQ9S6So58RDz15ghYjpdNSzCBtA6ixYszesSJU
+DksnEDV34AEB2C8/uvzcSIca3314dDsE2R0ubTrh4J/2JNbNE9M5UYEaJh0oK7LW
+h7YZ2XI5j08/aAApRsR84kcZdE3r+QYFHTuEnoc0ADkC3J9uIuQwl/CgTkw56OBP
+MmA1GD79/MeYc/mvJujujWG0Y+tyuQCORzcYccEpYR8q6kf1r7+IUy1L8r4XFIwM
+oW9eB4XyTrA8wKtWQfEpSAo+PX59hfafuOG8wKUPbTANSFK2ePQRJO/6T81rofOF
+Bz9oeTjZV0f0EkJIcF14V2rksGVT0kAHndBw73w27ofj
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862.pem
new file mode 100644
index 000000000000..c8d172b13d6a
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDIAKCAYEAzEjKQVdMNYbt8uE5P5znYqjWHP+G6Bp6Q93i0eE9NG15G+cBlcke
+OJoYQr2fc3ypl6zjO6g8uZQHYvbQGY1zmYnGPikL+AgYqCpbFZHvZ2pG56TJ+2I/
++d2zmsZifqkXsgQIRa6Hqp+JMW3y53PZjIEn2JYK1pTMRKfIWrfeYwoiZwi1rbeP
+l+0D1MgT5AuLXw5H0wWNdKGScbbftRVNm3K3RwukICOvbpEQXIeI04I9wh2oS7x+
+evjZ0YXfN0HsUWYQ8rfA3i2OU9gUVFcbSgdpoSqtkicGJ/6AyyCENr2AuKFAkZ1A
+BWYAJn2Nd4apsMflZckq8XdxX77juprjCsZ1DVn4X3hMRz4rnwqq6yPF31/KWyTx
+s33PK0JixJCnOzpponSljC8Bo+iTmE9GvBBsxCFZXmKK1bWQpaedUpqcX4eaQHGK
+fr7s0R9Ga+Z7LRvD2HeiZUSq+2fk9oW8nTzac/yFiQGlAq82WvQGIV3puYHtxHnZ
+Ii24PuTDgy1BAhUAjyumRyUZPh0vSI+VGAJDqiMcmBUCggGAR+j+RHswsFB+TaHv
+z8/b9zEBYOUvBfNeX3zs7teQnjRlTZJz2pwo0V2vv503Gv0s9d4Pzsw+ccDikqTr
+je3HV8h4iEwb2meh4oFNmUUFuyk5RgEJ8yDPgWgcKTV5bX62QRg0Uch8hRPYCKjn
+2hrLWCAc9qIHJY++s08uc1m799sn4chffNkb+fds2DOzzHKkKtj2WXzNyvFBnDOx
+qFArr2H+g7Xfx+ykIjMpG3jxKClT+n2a0tiqDYD3HG4gxD2keTBpE/YinEm/6CnT
+tLPi8K5wg22GxBpwB/MSBN2W7Q5fw9DnZLk6ROITMmYJE4NU7gEilkNaEmiajBXu
+FfyfZdvc+GqpdH64TuzbbvaXckKfEpYEnYSJbIi3WX/71MtSAe4wIWAkU5xB/ujl
+3gjX4qJQpm5k5aRVdJJ0IyVz7HaePpO7cdgKbcXiYPCdYIno8eDnUntDEwymmgnU
+wsxOzNKiKkXRnku8Or34DiJvgIz5yyZGpIYI2keKNF2A0ins
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862_gind1.pem
new file mode 100644
index 000000000000..e8d10f776bb8
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862_gind1.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDIAKCAYEAyu7VtPuTmkampDvDUwh9tXFDrwrTDOKf7KbokrFNoT3xRjeIce8g
+2t2q62jMrk2JnVziGBwq4vRCB6nUTxNnaKry6hF1h2sitlhONHcnNPWW1pXZ8SNZ
+W7/YlsATYd3rfsVdtQ1VLnDmoGmSWjsJ0Oh5+XNw/v+DUvl2zaTtaMDl6ST+tH2w
+K39RMEWJuUxBMFurWgcqc8jUcvVXSJcL+1Wf1DrVDEG1b6LgCTZeDnfpKaPMzHfW
+BnxFMgA9SGek7CwSSOs5L9TmKeQHO2zKZ+pdQejITim5LnzsozgU/Fu66vE9shzu
+d9ogHPlAqIpUFKyF4cJPXTNMpsBcsu2pJ0hJ6GoMINl6lTVWRNjWOtVeAn4mHLVQ
+oA5OSHHq3nTALETGWkQabC28qh7OK3EbYdjyF4M+gaPWhR5X7qqSy9tUwfLcxc9Z
+ngFsrRIDGWywofV3p+PRGSz/HAX4PB9bD3du4cDlT7F5MQsEpoQ0UaaMHp/RzeTo
+yiIJDS9fBhtZAhUA4pXEvfNK1n84nAesZsnGmSHB+M0CggGAHQhfqwV7g8UT/JPX
+5pJ9cBtLkeTdm0FhrkdoZ5mrfXJuml5mhdQwHh/gT5mQG8ilweaVh1P4GwR3CQ+o
+1xqmoKzmu6B68exIXnW9JXrSC0HvthVzjve04P98VZWVzSPMAtfuFDa/XbXMqLdj
+evZpBKTeAK1AO0R41t1By30epWazajHNZi5FmV5uwZsJPAqHe0asRhWALAWYK1gK
+kdhJhPAlaYTpYnSgrUqM1svnO7T4JLGrzR+ijrs1B8R4EnYsrldQUnqzi5mdweAw
+wugnvJTkFOmVn1iAnR0FIpFLzLh/pkp3Ajb4iK7R4hfAqHqlqhhqjHTPzjvKRdMn
+bXpAiY8CAC47dNd4t/bIymv4bLXjMxrecd9Ar1LZe3Chcr1egPuOjdOFEcK1MP6w
+wIPXJqtYulXjCfd3WR6uQSu/AsyCpOmzyR8EFZN10KoWLAEnGzdRXI5GQ9ddZl5o
+tNBAwCGTXg6tTv8FscyLLFbfJ3WOSbe+rNb1MrVHshFBzvG8
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862.pem
new file mode 100644
index 000000000000..40e8e120da94
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDKQKCAYEAxzGWJFWDGakaCqZHIekcTxRN6axWx6rTOyV1ZSljtuqNtGR4gZVW
+BAxKs5eFqykkLl0JmiBJJ8hHpNEWLxU0CG/ZDh7OhlmgUL/o1TeVHHXChyGL4dwn
+ds6VXAyBR7lSKoCfvdDpPkQb193XoXnjkt8qLwu4KVT+Xdv4F5oaulCbbMojqoP/
+VEyiYQhPVImIluiEYqjo3xQPAe1vgQ5gAqPnfmcppeHFkUWEGFn7qTTf+9EnUBtu
+LTLfwzedwMQhJ32lBqouPqv7QB74KcvzYIJJKb3WTskiLcYOO7dcYEv02q3KYLrY
+ij89nU3So5E60GLeQhFvQJA+kaAWC9bOpZT3pMsw9EDvHcbs+jNHNeZgrP9sgxya
+X8/sW4QVjsQC3GC5L/wmEC6TtdXLZjr1z8aYi2HPO1VmSR26+Q+jwXfWT7mjrvZH
+A1MIB9p8D3CcKOf0bgTSPq9J+NrUuTOQ/vL2JiQDqRiIfWACd3T8SSNANx9H08xg
+fHpaurhi3703Ah0AhS3fDX9qc3nH8NDghaBjTNG4+EiSq7q59dH5WwKCAYEAjd0c
+DFowwG/lKDDkBOP+ei7HNHizE/N5pJnrw8EFWwHbqgA6q0oihPlb+FIsEOFEJ13E
+yQOX0gdotBhUaNFenNgq0XgT6Ji4PTqkd8PE7IqkO6RXSnHRaCbgAW+KlHgQlMpc
+12KnRxPFbVErK75hfnGyDyIZ/7GZSvQ2pEdJutwyigCFmb+u69Ri+bOcV3OwtdHS
+PfYXum0SF7UzDGYBlYvk6zVlFyMRMdq3Ulyk337zSHY8cwX3sEbSBASh5PrMm1SP
+Z1kq23Uo+2sr/nRr3ZiLrJeGIbMaFVbpH59AaYbDBlpJHiUGlRfR9ogAgxDlwjqh
+M1a/UZZfcGItFYSGwrLqv/NIHdrk6T4G/LiQsfj1n2TMzUTpSBXYOGdnVy1JyqBq
+5T0bPbyRI3yyogpcMYIzbf5xwTXzTRl5IuesLKpDepjfnlG9OKNx8Tr7qcC/jtt2
++eDnp0G/JEJRvKv6uMzNALaMTGkdVgtG21JrsBEvIH6tRGKOzXq3sGwOz9fE
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862_gind1.pem
new file mode 100644
index 000000000000..19087a0735b7
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862_gind1.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDKAKCAYEApa4oiH+yG20EaPlCODyXW0tys6dCwztUH4bK0IA8Ld/nhHImQzJ2
+co0twe51KwMDJrw8OCPXOQWe1S6MRrqhv04jkVO37dIdBrlEKQggL+8XFxWrzFtk
+RsuGyAxPXcG7tprXCKIkXmJ4ZH4HziVPDr0dv9LBAtoOCqTh7P1Srr48IJsQbRPc
+Rf74f5TtGZ41OqfJGK9uHZwpteG4uHK10ferEuSPzDY3I0DOgCYYmGjc6N4MKEOU
+10TSUO2ye8IaXPdoayRincRRO/mKF+b62w27cbdn9hrq8aPyw2E7ehZyAduILevt
+qEDRJyOxJ/oM7pRAbALytKz0wkCeNL+TxEM92mkLkrqdn3Hhl4xOUHG9W1odtwKJ
+36YQMM0ubIy/ISHiwBzVAquiP1aSUudtNRf68g+WwuvRuMaic05j0nizubgtegew
+9741+fdKKYRT+aOMsouEnqrOyUht9HnAHzdBVAoNymrvnuX+Ylnu77/D9PwoVhMl
+3ttfx/omQzN5Ah0AgOSripFvRSJSWlDK22X8pfYa+QLmLgWMUxtYNwKCAYBlGgar
+o2cx8BF839UFfvn4JOY5Sptc+EMBgdJFM+g+9DMUxq1gFkVjDPM8JR/rC5XJf22L
+HlxrYAo6/0LZbyPQqm2MjjQJ6onH74nZG8Nn9qk6X2d4wmrMH41uIzd3NG3BEAK0
+9Bhq9TTYBEOduZIR8z4CNONYpom2/tcOBzNqMlQMJDJ5x/hkAlD+1bKlaZoFmwT/
+qhfkp5Z7WcLEq8TVzweSp4EzUtaftcprNVGXExF2nFiBH0NkOIXymOFht+BLgxKh
+7xZFYGjc7H4aSQEap5vtKEkQMFoRB24zkrg2e/Wc/eUOEslGw37XTUsZLIg2U8Cl
++EeAm2VxGaZsh0EFmXOwLchwqttP4Tjf02t4CZh8T3I91GNutUaPV/K2QkUcuCLM
+BLs+5et5hQiVMM9wp7psXoaexh9YMGx+nhfkIcPtxTAA6ERsg6muVsUAaEE+TxRk
+EVqBR86jbmwYUTGMTYU44owlufenclS0W0aB6Flin2wxfgxzo9enIVRHmME=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862.pem
new file mode 100644
index 000000000000..c6352818d0c3
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDLAKCAYEA9y+7nMniLiXibpJ2MiTdolb4D3SclBqXgnT00VhgqUrx3rSfkQxZ
+hljKyzZc2+Ijc7qnW5NvABRFwz/vZuEWUje8qRI6b+rydzK8X26A+RbbbC28xDLV
+beKMh1Hx9O4zGVLBL3u66onoJSXhIiG4hu8wkympc9jGAmRIfIF2Uixy15387e1E
+mFj7UH2F5frBxiSnPwZ3lFjPSB/U6nLzGgvIsl4xhZb0Txxn/TtECsyzdQnorixh
+p5oMnqGa7/Bz1dCswUwTTmkJlqKW8qlJXO52+1+H0mqWCB3JC9EIvlerVgnUa+x9
+uDDya2gvwImH8PxReslOhn8hNqxL6/1v7yxoQvATOwBblkgUrv3jdBerppQV6Yb7
+p3/JnfPGnpF3q/9A4NuTmhXd+lhmx5sT06SNIQ1VCBqYJhTobHTHkNxVJuPwL+Fc
+u2jBKXsyzFy6W+ac7yUY58Zi6WFcybx/Sp5zrLUa5EDABfWtyvsCYTgptIRq9AHe
+EQIQUvDxgsLjAiEA8KuUTAHKlPQJvd2P8LFblBCyMRTZdemRjTLiy2zO3QsCggGA
+bUzbh6SCW1qq0yacP+gPVKikYEmrtsAUphMF5nq3OivstvZ0TZ2M6bp3MIbrVznm
+I69/8QnrSDGNqCCKAaoDjoTHWABlRnFKMa3HNhY5Wa0zpzch1ZMx339JmWwRmZOj
+UeqlzDiSsD58oMG0VBW0gCssvhCaf6K9XlizJ4JkEG44WGZJX9iw6luiqWcO8QjS
+tpwAh1WLgRO2JnrJ4adCF7XoGSptGDfV7oT1+w9IRWFGY3WJWz7c2fEY9hyzvwOM
+/QUDEqk7jMxTatX6fzREiQLVflnNf4aO8Ioolt29b5xgOskdRfoX5OsFCS1WemV6
+H/XJonSweFY2fBsxj2z1k5uX2LuxeVPFkNquTIWQFgy/5DxxxzqtaykkBIqM/SIw
+I8nsqn7rnMZ+ROPafj/QHuQZrrE9qq8PN4OuuZXCn6JrG/9goATXjsX0dwkSW+/Y
+w3zHSAlZSMoaw2RW9i4cv6hSly1+nUBFNWnMRfyBMfIrchL/DpBdVrVWVEBD7Q4z
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862_gind1.pem
new file mode 100644
index 000000000000..f465704959e0
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862_gind1.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDLAKCAYEAnNFWZGSkdpISzCBfFsZ8p3ouw0fzoyU+0t/DdKdGeiy/PtUkPCfn
+KS+lmswLWdWFsQ7T9UtSVzdhDr+Jj9e4oLIDh1HfDGyLaNzvCCYOxWOnR+FdZQmC
+G5F8iD9QhTKugy9BhbNTYlpog9MqxfpVwQsAaXmitcSSvnDxJ1KweCN8P0GbfkpI
+JXma9SYWXjf6B5tH3Kb2xiPiaO0NSyjeyrossJosZfyYA3qKU/HEVYHLFkyAwMUu
+RBCM9sgwWWIzAutLMb1y4H750NP4yeIyP9EZgdXplmJRb9Yous0QT17aQOiC2q6I
+xyqXvhjScnRmMVetkbHibuKBpALwLA7dbNCpm+++WYdlMtBqlRkLfM4+BiCLPZT/
+6a9FYiKhNk12R7fdxWPFH4S9GfgUtLJpcwrFYvVbGfyD97O9gjzJiQ36zBrJEPv4
+kZ9MIv9J0qN2yUz7mT5IBKGDbIvBo60IVt7Q4+SyLT0ASZTxLInyUlravfGhog8e
+nDOvJUDt2WSnAiEAtxINd2uhphWpMhicTM/N0/aVpQ7yv2rVTRCdGK48XzkCggGA
+b1M093z0YaiSd2tM3kQMdLqtXKjDyv0joQGvKlPdPqeUzUuf0E8pvlM/Sp3hcNPi
+E1Ll5duR22yFMPE9IXxzloUSY1lmx91T3MfU3mlknl6OKYAhCM9tHwv8IFauJ1CA
+E3+mMz7quS0ZvB7hrfBnSI4Q3LcS/FQAg0d5EedLQ2Mdxp4zJFv0sfc7+hCt593h
+ohVur/U34ezrrMkA9mnUfM2Kf4cHxbFpV/lTz0Ulan/Q7Oic95zflEdJXL0Fe9mt
+1t6y+nkdfmIby9QTTeMSoUVmCmv5qvbyOgtNILtar28MADYPVU9tf289NVWexNCI
+uBCangdkBQjgq8UHAdKZafpToYPBSi+tuGs4N2391+jK5vLW8dlhxdxh7bscmlxY
+/lwjkU3SLTahErNBi7R45kohFD3iMO/Bum8Qv4s8MR1t6z4lWoICl6FvLBF9nZYV
+ZfLUNbSrZgHR5vUJbp8rFsdS1zj2rj0LPrX4gdd6nDxdp/IcJG88/5hEPlfyAcpY
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864.pem
new file mode 100644
index 000000000000..cb859d66fd8e
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDLAKCAYEAnplgg+QuPzBBKC7wqLoTVFSu1Vg9EAp2TdHFMUEAt2uLGPJn65SF
+vahxsnRJpJKdu8RRSlcTGg1wBpL7wdes+fskrB4OrjEdrf77S/wCxTtKz3xe5AcW
+N/qqlvbX+iGuxZKRvJfdbvqxJOo62hnuhNo5SeAh1f1bI7fs/MdF2dECT/LUYVgN
+kIfhZKbGEUvaVxYdzbypWFimuPdMDzkrQKKARztQC9W9gZceB7Z86oW3Tq68wxoy
+Qemq9zMlBZM9R+KKfCEOa5BI/cGj3As7/A2Y4JxWbaRq7Bq+M7xKtQqqDY9fHvlE
+eYXUf0L/6RY9ZoDEOATK8VPiaqr2swimw7lmUVyiR+hdNJ5vrAMStL9+BnzAtFNJ
+4N6gX4hdraHJfDKLSAryGqCMesJLb6YQwN0QEfp0uKV2e0z5m27bOQ/6H+i+AssY
+Fr6Gbottp3S6/KrPKxWco16FD/DA3OkERQlk0wZai7mucLRmnHz9jhZ6crcez3RN
++/SBlIN1ydN7AiEAwDyPTTslGsYdkM/YopNoEbEu00WGfX2/pP8J2Np7678CggGA
+Qu4x5iy2/FqZEbByskh/R3qQdeNvl+rA3TefDdVYK6jUZXZ5SE1ZBailE7e7LMBq
+5ao3PyRtoixezZaYB0zFdMpwy3z/YCLHnvUMHaEFQHLQkJZ17JbWSHzhnPGT7K1h
+LW36eTkSy0eXcjN5siIr9cnGlARYxccTuEOM8JP2am6fJLSP6JvvGsYgUIraRl38
+TXZ/EcF0msNgUabC+BCGpGBH2Z+2BI7e7yzBy7JSNsoZpf6mZ5dRMmiPlKD2AAvU
+j76Sj/UbTrK+O8qrqvuHMT6VwpD3fktvJ/8ENrbwSZiFK+Mk4EWE6quYnxF0JQwj
+t5TKhhoordP0li3R9Ie9A99iZszxrCNdpx1QH8OtNyf74TdsekUekNHmUwGg3set
+xMVuO5/o5gu82WDIiFdvYrWvQ9jHyilBBKDNQmfnM5xzZwDjC7opwZ1u5oNbGcKR
+jPB2Q57B7l4y2h3swGYIwnqMaYnPE32gewexx/YPK+ZhA9UfM5Q5RwUXm1RNkLfv
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864_gind1.pem
new file mode 100644
index 000000000000..b84b3eed3ad4
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864_gind1.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDLAKCAYEAt9BaAblsCrKRV15aP/BFOpUxTG/wzSWarZZQJ32hGXVV7ROFeA7H
+TvJdRWtjqvFNg0x1inAPUuSfoZi+dsXWPBc5M9vcZ9+GaB6NP/E/w8cxnnNO6a5f
+Bkx68slvWTqtrUxSiwqOLIT7oeSn1ZHDniDAtyRu7WnZhVt6OsP2xQl071phpcd+
+exIwnDsknr6kjRhOFbdgTFLbvIJYEKy/p2dkGmi6a7DTmtwct9hQ5XePggumj5LG
+05czAuvIDjfSe5hV1yIgbmchVvu+6WGnq4GUbgODROv2PHxnNEn8FgRBjJVjpcrL
+onbKWolvDyam708+tJbAWXGltnukGMiO2b+ODe6ZwzmxXOE4jn/SGkUeTAuzNSAe
+BsSsDGn5vZGKhnIkw9ISS29s6qbvhxR3zVLURdCDgFHJQ+Rg1aUsTpeBPlDHP6bw
+sRCR5mktZc3xOkUtqBIoR5hjXD+c+0TkMOJRGNzfXLhh1LIbyLpmj4WQK7+ytJO3
+dtUJDpKhEiGhAiEAzFeLXUhljzm6+rCQiiV9cmi5Eyh+wMSwgAsMaVPM6b0CggGA
+arqNlSzXpGvyu7J8xWiwYFX2Q4LXpo7AerEW4SVBna+VWSQuyZL/iMYD4eNPrle7
+aVyXRBBBc5FJmfkezG4pf3MQhLNrJoBRyRCIf/CbG8em3eBf3pBIUs7Vd9z8RAFs
+Y4cIMteTLbDVULWdfvK2eM5gTf0jl5sjyY+OPSFpNiBpfmIdoStX80j+ygo7MgcI
+N+U1Nn8i0DVzjpfm+lBFbkGNrZEy63mNi6UW6m6FnpZSQqqeC/Xy6mqrjHMDoclv
+rZuTGSY47IiHTX4cYaXYArwuN6qBQkTNeSDsCzbx21hFmKEXscelumwvXmxJcxr/
+6x6Ymvu/G0NokJk3Z8cOS0OCfXOLxk5kH4C/i3UOEhl9LH9eOd2qQoF3KoaNHkCy
+IYwipLyqtQ+o/+qRruOfv1JruRawyl1G1UteU5nire/mcaD7/lJqvfBPD1Z1eBpP
+VR4ItsVBbztmDYr9OX6hFH5CuJSW55KBtEME+R5Au2q3d1wZz4/PD7xLio8lWc48
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_ec.t b/test/recipes/15-test_ec.t
new file mode 100644
index 000000000000..0638d626e744
--- /dev/null
+++ b/test/recipes/15-test_ec.t
@@ -0,0 +1,111 @@
+#! /usr/bin/env perl
+# Copyright 2015-2022 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_ec");
+
+plan skip_all => 'EC is not supported in this build' if disabled('ec');
+
+plan tests => 15;
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+require_ok(srctop_file('test','recipes','tconversion.pl'));
+
+ok(run(test(["ectest"])), "running ectest");
+
+# TODO: remove these when the 'ec' app is removed.
+# Also consider moving this to the 20-25 test section because it is testing
+# the command line tool in addition to the algorithm.
+subtest 'EC conversions -- private key' => sub {
+ tconversion( -type => 'ec', -prefix => 'ec-priv',
+ -in => srctop_file("test","testec-p256.pem") );
+};
+subtest 'EC conversions -- private key PKCS#8' => sub {
+ tconversion( -type => 'ec', -prefix => 'ec-pkcs8',
+ -in => srctop_file("test","testec-p256.pem"),
+ -args => "pkey" );
+};
+subtest 'EC conversions -- public key' => sub {
+ tconversion( -type => 'ec', -prefix => 'ec-pub',
+ -in => srctop_file("test","testecpub-p256.pem"),
+ -args => [ "ec", "-pubin", "-pubout" ] );
+};
+
+subtest 'PKEY conversions -- private key' => sub {
+ tconversion( -type => 'pkey', -prefix => 'ec-pkey-priv',
+ -in => srctop_file("test","testec-p256.pem") );
+};
+subtest 'PKEY conversions -- private key PKCS#8' => sub {
+ tconversion( -type => 'pkey', -prefix => 'ec-pkey-pkcs8',
+ -in => srctop_file("test","testec-p256.pem"),
+ -args => "pkey" );
+};
+subtest 'PKEY conversions -- public key' => sub {
+ tconversion( -type => 'pkey', -prefix => 'ec-pkey-pub',
+ -in => srctop_file("test","testecpub-p256.pem"),
+ -args => [ "pkey", "-pubin", "-pubout" ] );
+};
+
+subtest 'Ed25519 conversions -- private key' => sub {
+ tconversion( -type => "pkey", -prefix => "ed25519-pkey-priv",
+ -in => srctop_file("test", "tested25519.pem") );
+};
+subtest 'Ed25519 conversions -- private key PKCS#8' => sub {
+ tconversion( -type => "pkey", -prefix => "ed25519-pkey-pkcs8",
+ -in => srctop_file("test", "tested25519.pem"),
+ -args => ["pkey"] );
+};
+subtest 'Ed25519 conversions -- public key' => sub {
+ tconversion( -type => "pkey", -prefix => "ed25519-pkey-pub",
+ -in => srctop_file("test", "tested25519pub.pem"),
+ -args => ["pkey", "-pubin", "-pubout"] );
+};
+subtest 'Ed448 conversions -- private key' => sub {
+ tconversion( -type => "pkey", -prefix => "ed448-pkey-priv",
+ -in => srctop_file("test", "tested448.pem") );
+};
+subtest 'Ed448 conversions -- private key PKCS#8' => sub {
+ tconversion( -type => "pkey", -prefix => "ed448-pkey-pkcs8",
+ -in => srctop_file("test", "tested448.pem"),
+ -args => ["pkey"] );
+};
+subtest 'Ed448 conversions -- public key' => sub {
+ tconversion( -type => "pkey", -prefix => "ed448-pkey-pub",
+ -in => srctop_file("test", "tested448pub.pem"),
+ -args => ["pkey", "-pubin", "-pubout"] );
+};
+
+subtest 'Check loading of fips and non-fips keys' => sub {
+ plan skip_all => "FIPS is disabled"
+ if $no_fips;
+
+ plan tests => 2;
+
+ my $fipsconf = srctop_file("test", "fips-and-base.cnf");
+ $ENV{OPENSSL_CONF} = $fipsconf;
+
+ ok(!run(app(['openssl', 'pkey',
+ '-check', '-in', srctop_file("test", "testec-p112r1.pem")])),
+ "Checking non-fips curve key fails in FIPS provider");
+
+ ok(run(app(['openssl', 'pkey',
+ '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '-check', '-in', srctop_file("test", "testec-p112r1.pem")])),
+ "Checking non-fips curve key succeeds with non-fips property query");
+
+ delete $ENV{OPENSSL_CONF};
+}
diff --git a/test/recipes/15-test_ecdsa.t b/test/recipes/15-test_ecdsa.t
new file mode 100644
index 000000000000..6215a8f0f0af
--- /dev/null
+++ b/test/recipes/15-test_ecdsa.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_ecdsa", "ecdsatest", "ec");
diff --git a/test/recipes/15-test_ecparam.t b/test/recipes/15-test_ecparam.t
new file mode 100644
index 000000000000..37bf620f35ee
--- /dev/null
+++ b/test/recipes/15-test_ecparam.t
@@ -0,0 +1,176 @@
+#! /usr/bin/env perl
+# Copyright 2017-2022 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use File::Compare qw/compare_text/;
+use OpenSSL::Glob;
+use OpenSSL::Test qw/:DEFAULT data_file srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+setup("test_ecparam");
+
+plan skip_all => "EC or EC2M isn't supported in this build"
+ if disabled("ec") || disabled("ec2m");
+
+my @valid = glob(data_file("valid", "*.pem"));
+my @noncanon = glob(data_file("noncanon", "*.pem"));
+my @invalid = glob(data_file("invalid", "*.pem"));
+
+plan tests => 12;
+
+sub checkload {
+ my $files = shift; # List of files
+ my $valid = shift; # Check should pass or fail?
+ my $app = shift; # Which application
+ my $opt = shift; # Additional option
+
+ foreach (@$files) {
+ if ($valid) {
+ ok(run(app(['openssl', $app, '-noout', $opt, '-in', $_])));
+ } else {
+ ok(!run(app(['openssl', $app, '-noout', $opt, '-in', $_])));
+ }
+ }
+}
+
+sub checkcompare {
+ my $files = shift; # List of files
+ my $app = shift; # Which application
+
+ foreach (@$files) {
+ my $testout = "$app.tst";
+
+ ok(run(app(['openssl', $app, '-out', $testout, '-in', $_])));
+ ok(!compare_text($_, $testout, sub {
+ my $in1 = $_[0];
+ my $in2 = $_[1];
+ $in1 =~ s/\r\n/\n/g;
+ $in2 =~ s/\r\n/\n/g;
+ $in1 ne $in2}), "Original file $_ is the same as new one");
+ }
+}
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+subtest "Check loading valid parameters by ecparam with -check" => sub {
+ plan tests => scalar(@valid);
+ checkload(\@valid, 1, "ecparam", "-check");
+};
+
+subtest "Check loading valid parameters by ecparam with -check_named" => sub {
+ plan tests => scalar(@valid);
+ checkload(\@valid, 1, "ecparam", "-check_named");
+};
+
+subtest "Check loading valid parameters by pkeyparam with -check" => sub {
+ plan tests => scalar(@valid);
+ checkload(\@valid, 1, "pkeyparam", "-check");
+};
+
+subtest "Check loading non-canonically encoded parameters by ecparam with -check" => sub {
+ plan tests => scalar(@noncanon);
+ checkload(\@noncanon, 1, "ecparam", "-check");
+};
+
+subtest "Check loading non-canonically encoded parameters by ecparam with -check_named" => sub {
+ plan tests => scalar(@noncanon);
+ checkload(\@noncanon, 1, "ecparam", "-check_named");
+};
+
+subtest "Check loading non-canonically encoded parameters by pkeyparam with -check" => sub {
+ plan tests => scalar(@noncanon);
+ checkload(\@noncanon, 1, "pkeyparam", "-check");
+};
+
+subtest "Check loading invalid parameters by ecparam with -check" => sub {
+ plan tests => scalar(@invalid);
+ checkload(\@invalid, 0, "ecparam", "-check");
+};
+
+subtest "Check loading invalid parameters by ecparam with -check_named" => sub {
+ plan tests => scalar(@invalid);
+ checkload(\@invalid, 0, "ecparam", "-check_named");
+};
+
+subtest "Check loading invalid parameters by pkeyparam with -check" => sub {
+ plan tests => scalar(@invalid);
+ checkload(\@invalid, 0, "pkeyparam", "-check");
+};
+
+subtest "Check ecparam does not change the parameter file on output" => sub {
+ plan tests => 2 * scalar(@valid);
+ checkcompare(\@valid, "ecparam");
+};
+
+subtest "Check pkeyparam does not change the parameter file on output" => sub {
+ plan tests => 2 * scalar(@valid);
+ checkcompare(\@valid, "pkeyparam");
+};
+
+subtest "Check loading of fips and non-fips params" => sub {
+ plan skip_all => "FIPS is disabled"
+ if $no_fips;
+ plan tests => 8;
+
+ my $fipsconf = srctop_file("test", "fips-and-base.cnf");
+ my $defaultconf = srctop_file("test", "default.cnf");
+
+ $ENV{OPENSSL_CONF} = $fipsconf;
+
+ ok(run(app(['openssl', 'ecparam',
+ '-in', data_file('valid', 'secp384r1-explicit.pem'),
+ '-check'])),
+ "Loading explicitly encoded valid curve");
+
+ ok(run(app(['openssl', 'ecparam',
+ '-in', data_file('valid', 'secp384r1-named.pem'),
+ '-check'])),
+ "Loading named valid curve");
+
+ ok(!run(app(['openssl', 'ecparam',
+ '-in', data_file('valid', 'secp112r1-named.pem'),
+ '-check'])),
+ "Fail loading named non-fips curve");
+
+ ok(!run(app(['openssl', 'pkeyparam',
+ '-in', data_file('valid', 'secp112r1-named.pem'),
+ '-check'])),
+ "Fail loading named non-fips curve using pkeyparam");
+
+ ok(run(app(['openssl', 'ecparam',
+ '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '-in', data_file('valid', 'secp112r1-named.pem'),
+ '-check'])),
+ "Loading named non-fips curve in FIPS mode with non-FIPS property".
+ " query");
+
+ ok(run(app(['openssl', 'pkeyparam',
+ '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '-in', data_file('valid', 'secp112r1-named.pem'),
+ '-check'])),
+ "Loading named non-fips curve in FIPS mode with non-FIPS property".
+ " query using pkeyparam");
+
+ ok(!run(app(['openssl', 'ecparam',
+ '-genkey', '-name', 'secp112r1'])),
+ "Fail generating key for named non-fips curve");
+
+ ok(run(app(['openssl', 'ecparam',
+ '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '-genkey', '-name', 'secp112r1'])),
+ "Generating key for named non-fips curve with non-FIPS property query");
+
+ $ENV{OPENSSL_CONF} = $defaultconf;
+};
diff --git a/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem b/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem
new file mode 100644
index 000000000000..915b58676bc7
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIGiAgEBMCUGByqGSM49AQIwGgICANAGCSqGSM49AQIDAzAJAgEBAgECAgE9MB8E
+AQAEGshhntRaYuYhLhFgNJ4r+oREOfr8Kj/RY4+eBDUHSf375Kvhk9+VWezwesDO
+eFVOJ4TrjB7RpXoPVbUaBueOmsOKA1/1INiwF4G+saa7CGF94wIZAQG6+VyXI8V7
+bCHaLv8tXtWIvdVxfiEvnQIDAP5I
+-----END EC PARAMETERS-----
+
diff --git a/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem b/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem
new file mode 100644
index 000000000000..a06cf7a0bb38
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+MIH3AgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP//////////
+/////jBbBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12Ko6
+k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsDFQDEnTYIhucEk2pmeOETnSa3gZ9+
+kARBBGsX0fLhLEJH+Lzm5WOkQPJ3A32BLeszoPShOUXYmMKWT+NC4v4af5uO5+tK
+fA+eFivOM1drMV7Oy7ZAaDe/UfUCIQD/////AAAAAP//////////vOb6racXnoTz
+ucrC/GMlUQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem b/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem
new file mode 100644
index 000000000000..d4df6ae6bf09
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+MIH3AgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP//////////
+/////zBbBCD/////AAAAAQAAAAAAAAAAAAAAAP//////////////+AQgWsY12Ko6
+k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsDFQDEnTYIhucEk2pmeOETnSa3gZ9+
+kARBBGsX0fLhLEJH+Lzm5WOkQPJ3A32BLeszoPShOUXYmMKWT+NC4v4af5uO5+tK
+fA+eFivOM1drMV7Oy7ZAaDe/UfUCIQD/////AAAAAP//////////vOb6racXnoTz
+ucrC/GMlUQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem b/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem
new file mode 100644
index 000000000000..315e68efd8f8
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+MIH3AgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP//////////
+/////zBbBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12Ko6
+k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsDFQDEnTYIhucEk2pmeOETnSa3gZ9+
+kARBBGsX0fLhLEJH+Lzm5WOkQPJ3A32BLeszoPShOUXYmMKWT+NC4v4af5uO5+tK
+fA+eFivOM1drMV7Oy7ZAaDe/UfUCIQD/////AAAAAP//////////vOb6racXnoTz
+ucrC/SMlUQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/c2pnb163v1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/c2pnb163v1-explicit.pem
new file mode 100644
index 000000000000..d7bc1c2cab27
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/c2pnb163v1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIG3AgEBMCUGByqGSM49AQIwGgICAKMGCSqGSM49AQIDAzAJAgEBAgECAgEIMEQE
+FQclRrVDUjSkIuB4lnX0MsiUNd5SQgQUyVF9BtUkDTz/OMdLILbNTW+d1NkDFQDS
+wPsVdghg3vHu9NaW5naHVhUXVAQrBAevaZiVRhA9eTKfzD10iA8zu+gDywHsIyEb
+WWat6h0/h/fqWEiu8LfKnwIVBAAAAAAAAAAAAAHmD8iCHMdNrq/BAgEC
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/c2pnb208w1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/c2pnb208w1-explicit.pem
new file mode 100644
index 000000000000..88772e620979
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/c2pnb208w1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGiAgEBMCUGByqGSM49AQIwGgICANAGCSqGSM49AQIDAzAJAgEBAgECAgFTMB8E
+AQAEGshhntRaYuYhLhFgNJ4r+oREOfr8Kj/RY4+eBDUEif375Kvhk9+VWezwesDO
+eFVOJ4TrjB7RpXoPVbUaBueOmsOKA1/1INiwF4G+saa7CGF94wIZAQG6+VyXI8V7
+bCHaLv8tXtWIvdVxfiEvnQIDAP5I
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/secp160k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/secp160k1-explicit.pem
new file mode 100644
index 000000000000..de0464ce1834
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/secp160k1-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MHICAQEwIAYHKoZIzj0BAQIVAP////////////////////7//6xzMAYEAQAEAQcE
+KQQ7TDgs43qhkqQBnnYwNvT13U1+u5OM+TUxj9zta8KChlMXM8PwPE/uAhUBAAAA
+AAAAAAAAAbj6Ft+rmsoWtrMCAQE=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/secp192k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/secp192k1-explicit.pem
new file mode 100644
index 000000000000..0b58fcf3b09d
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/secp192k1-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MIGCAgEBMCQGByqGSM49AQECGQD//////////////////////////v//7jcwBgQB
+AAQBAwQxBNtP8Q7AV+muJrB9AoC39DQdpdGx6uBsfZsvL22cViinhEFj0BW+hjRA
+gqqI2V4vnQIZAP///////////////iby/BcPaUZqdN79jQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/secp224k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/secp224k1-explicit.pem
new file mode 100644
index 000000000000..76ac8ed02f15
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/secp224k1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGSAgEBMCgGByqGSM49AQECHQD///////////////////////////////7//+Vt
+MAYEAQAEAQUEOQShRVszTfCZ3zD8KKFppGfp5HB1qQ9+ZQ62t6Rcfgif7X+6NEKC
+yvvW9+MZ98CwvVniykvbVW1hpQIdAQAAAAAAAAAAAAAAAAAB3OjS7GGEyvCpcXaf
+sfcCAQE=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/secp256k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/secp256k1-explicit.pem
new file mode 100644
index 000000000000..72f7f06ad3d2
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/secp256k1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGiAgEBMCwGByqGSM49AQECIQD////////////////////////////////////+
+///8LzAGBAEABAEHBEEEeb5mfvncu6xVoGKVzocLBwKb/NstzijZWfKBWxb4F5hI
+Otp3JqPEZV2k+/wOEQio/Re0SKaFVBmcR9CP+xDUuAIhAP//////////////////
+//66rtzmr0igO7/SXozQNkFBAgEB
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/secp521r1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/secp521r1-explicit.pem
new file mode 100644
index 000000000000..f92a1211b951
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/secp521r1-explicit.pem
@@ -0,0 +1,12 @@
+-----BEGIN EC PARAMETERS-----
+MIIBwgIBATBNBgcqhkjOPQEBAkIB////////////////////////////////////
+//////////////////////////////////////////////////8wgZ4EQgH/////
+////////////////////////////////////////////////////////////////
+/////////////////ARBUZU+uWGOHJofkpohoLaFQO6i2nJbmbMV87i0iZGO8Qnh
+Vhk5Uex+k3sWUsC9O7G/BzVz34g9LDTx70Uf1GtQPwADFQDQnogAKRy4U5bMZxc5
+MoSqoNpkugSBhQQAxoWOBrcEBOnNnj7LZiOVtEKcZIE5BT+1Ifgor2BrTT26oUte
+d+/nWSj+HcEnov+o3jNIs8GFakKb+X5+McLlvWYBGDkpaniaO8AEXIpftCx9G9mY
+9URJV5tEaBevvRcnPmYsl+5ymV70JkDFULkBP60HYTU8cIaicsJAiL6Udp/RZlAC
+QgH///////////////////////////////////////////pRhoeDvy+Wa3/MAUj3
+CaXQO7XJuImcR667b7cekThkCQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect113r1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect113r1-explicit.pem
new file mode 100644
index 000000000000..2cd45a8c4fdd
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect113r1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGPAgEBMBwGByqGSM49AQIwEQIBcQYJKoZIzj0BAgMCAgEJMDcEDjCIJQym58f+
+ZJzoWCD3BA7ovuTT4iYHRBiL4OnHIwMVABDnI6sU1pbmdodWFRdW/r+Py0mpBB8E
+AJ1zYW819KsUB9c1YsEPAKUoMCd5WO6E0TFe0xiGAg8BAAAAAAAAANnM7Io55W8C
+AQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect113r2-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect113r2-explicit.pem
new file mode 100644
index 000000000000..4fca872b4861
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect113r2-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGPAgEBMBwGByqGSM49AQIwEQIBcQYJKoZIzj0BAgMCAgEJMDcEDmiZGNvsfloN
+1t/AqlXHBA6V6ansmyl71L824FkYTwMVABDA+xV2CGDe8e701pbmdodWFRddBB8E
+AaV6ansmyl71L824FkeXALOtyU7R/mdMBuaVurodAg8BAAAAAAAAAQh4mySWr5MC
+AQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect163k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect163k1-explicit.pem
new file mode 100644
index 000000000000..3438927e61fa
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect163k1-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MHkCAQEwJQYHKoZIzj0BAjAaAgIAowYJKoZIzj0BAgMDMAkCAQMCAQYCAQcwBgQB
+AQQBAQQrBAL+E8BTe7wRrKoH15PeTm1eXJTu6AKJBw+wXTj/WDIfLoAFNtU4zNqj
+2QIVBAAAAAAAAAAAAAIBCKLgzA2Z+KXvAgEC
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect163r2-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect163r2-explicit.pem
new file mode 100644
index 000000000000..817155013b99
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect163r2-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MIGNAgEBMCUGByqGSM49AQIwGgICAKMGCSqGSM49AQIDAzAJAgEDAgEGAgEHMBoE
+AQEEFQIKYBkHuMlTyhSB6xBRL3h0SjIF/QQrBAPw66FihqLVfqCZEWjUmUY36DQ+
+NgDVH7xscaAJT6LN1UWxHFwMeXMk8QIVBAAAAAAAAAAAAAKS/nfnDBKkI0wzAgEC
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect193r1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect193r1-explicit.pem
new file mode 100644
index 000000000000..93d166dc34cf
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect193r1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHCAgEBMB0GByqGSM49AQIwEgICAMEGCSqGSM49AQIDAgIBDzBLBBgXhY/repiX
+UWnhcfd7QIfeCYrIqRHfewEEGP37Sb/mw6ifrK2qeh5bvHzBwuXYMUeIFAMVABA/
+rsdNaW5naHVhUXV3f8Wxke8wBDMEAfSBvF8P+Ep0rWzfb970v2F5YlNy2MDF4QAl
+45nykDcSzPPqnjoa0X+wsyAbavfOGwUCGQEAAAAAAAAAAAAAAADH80p3j0Q6zJIO
+ukkCAQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect193r2-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect193r2-explicit.pem
new file mode 100644
index 000000000000..3e96cc77bf82
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect193r2-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHDAgEBMB0GByqGSM49AQIwEgICAMEGCSqGSM49AQIDAgIBDzBMBBkBY/NaUTfC
+zj6m7YZnGQsLxD7NaZd3AnCbBBjJu56JJ9TWTDd+KrKFalsW4++39h1DFq4DFQAQ
+t7TWluZ2h1YVF1E3yKFv0NoiEQQzBADZtn0ZLgNnyAPznhp+gsoUplE1Cq5hfo8B
+zpQzVgfDBKwp59772coB9Zb5JyJM3s9sAhkBAAAAAAAAAAAAAAABWqtWGwBUE8zU
+7pnVAgEC
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect233k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect233k1-explicit.pem
new file mode 100644
index 000000000000..d318fcb8c083
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect233k1-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MIGMAgEBMB0GByqGSM49AQIwEgICAOkGCSqGSM49AQIDAgIBSjAGBAEABAEBBD0E
+AXIyuoU6fnMa8SnyL/QUlWOkGcJr9QpMnW7vrWEmAdtTfezoGbf3D1VaZ8QnqM2b
+8Yrrm1bgwRBW+uajAh4AgAAAAAAAAAAAAAAAAAAGnVu5FbzUbvsa1fFzq98CAQQ=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect233r1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect233r1-explicit.pem
new file mode 100644
index 000000000000..c6da58086607
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect233r1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIG/AgEBMB0GByqGSM49AQIwEgICAOkGCSqGSM49AQIDAgIBSjA5BAEBBB1mZH7e
+bDMsf4wJI7tYITszOyDpzkKB/hFffY+QrQMVAHTVn/B/a0E9DqFLNEsgotsEm1DD
+BD0EAPrJ38usgxO7ITnxu3Vf72W8OR+LNvj463Nx/VWLAQBqCKQZAzUGeOWFKL6/
+igvv+GenyjZxb34B+BBSAh4BAAAAAAAAAAAAAAAAAAAT6XTnL4ppIgMdJgPP4NcC
+AQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect239k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect239k1-explicit.pem
new file mode 100644
index 000000000000..8e23a4c87e71
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect239k1-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MIGNAgEBMB4GByqGSM49AQIwEwICAO8GCSqGSM49AQIDAgICAJ4wBgQBAAQBAQQ9
+BCmgtqiHqYPpcwmIpocnqLLRJsRMwsx7KmVVGTA13HYxCATxLlSb2wEcEDCJ5zUQ
+rLJ1/DEqXca3ZVPwygIeIAAAAAAAAAAAAAAAAAAAWnn+xny26R8cHagA5HilAgEE
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect283k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect283k1-explicit.pem
new file mode 100644
index 000000000000..5ebcb8620db4
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect283k1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGmAgEBMCUGByqGSM49AQIwGgICARsGCSqGSM49AQIDAzAJAgEFAgEHAgEMMAYE
+AQAEAQEESQQFAyE/eMpEiD8aO4Fi8YjlU80mXyPBVnoWh2kTsMKsJFhJKDYBzNo4
+DxyeMY2Q+V0H5UJv6H5FwOgYRpjkWWI2TjQRYXfdIlkCJAH/////////////////
+/////+muLtB1dyZd/3+URR4GHhY8YQIBBA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect283r1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect283r1-explicit.pem
new file mode 100644
index 000000000000..f1fffd5c12a7
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect283r1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHgAgEBMCUGByqGSM49AQIwGgICARsGCSqGSM49AQIDAzAJAgEFAgEHAgEMMEAE
+AQEEJAJ7aArIuFltpaSvihmgMD/Kl/12RTCfoqWBSFr2Jj4xO3mi9QMVAHfisHNw
+6w+DKm3Vti38iM0Gu4S+BEkEBfk5JY233ZDhk0+McLDf7C7tJbhVfqycgOLhmPjN
+vs2GsSBTA2doVP4kFBy5j+bUsg0CtFFv9wI1Dt2wgmd5yBPw30W+gRL0AiQD////
+///////////////////vkDmWYPyTipAWWwQqfO+tswcCAQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect409k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect409k1-explicit.pem
new file mode 100644
index 000000000000..e781a6e87e74
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect409k1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHNAgEBMB0GByqGSM49AQIwEgICAZkGCSqGSM49AQIDAgIBVzAGBAEABAEBBGkE
+AGDwX2WPScGtOrGJD3GEIQ79CYfjB8hMJ6zPuPn2fMLEYBietaqqYu4iLrGzVUDP
+6QI3RgHjaQULfE5CrLodrL8EKZw0YHgvkY6kJ+YyUWXp6hDj2l9sQunFUhWqnKJ6
+WGPsSNjgKGsCM3/////////////////////////////////+X4Oy1OogQA7EVX1e
+0+PnyltLXIO44B5fzwIBBA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect409r1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect409r1-explicit.pem
new file mode 100644
index 000000000000..937ce1bd4c19
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect409r1-explicit.pem
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+MIIBFwIBATAdBgcqhkjOPQECMBICAgGZBgkqhkjOPQECAwICAVcwTwQBAQQzIaXC
+yO6f61xLmnU7e0drf9ZCLvHz3WdHYfqZ1qwnyKmhl7Jygi9s1XpVqk9QrjF7E1Rf
+AxUAQJm1pFf51p95IT0JTEvNTUJiIQsEaQQBXUhg0Ijds0lrDGBkdWJgRBzeSvF3
+HU2wH/5bNOWXA9wlWoaKEYBRVgOuq2B5TlS7eZanAGGxz6tr5fMrv6eDJO0QanY2
+ucWnvRmNAViqT1SI0I84UU8f30tPQNIYGzaBw2S6AnPHBgI0AQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAB4qrWphLzMwe+X6R8PJ4FL4OBZM032aIRcwIBAg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect571k1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect571k1-explicit.pem
new file mode 100644
index 000000000000..32119057ad45
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect571k1-explicit.pem
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+MIIBEwIBATAlBgcqhkjOPQECMBoCAgI7BgkqhkjOPQECAwMwCQIBAgIBBQIBCjAG
+BAEABAEBBIGRBAJut6hZkj+8ghiWMfgQP+SsnKKXABLV1GAkgEgBhBykQ3CVhJOy
+BeZH2jBNtM6wjLvRujlJR3b7mItHF03KiMfilFKDoByJcgNJ3IB/T783T0rq3jvK
+lTFN1YzsnzB6VP/GHvwAbYosnUl5wKxErqdPvru593Ku3LYgsBp7p68bMgQwyFkZ
+hPYBzUwUPvHHowJIAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ExhQ4fGaY+SzkajbkX9BOLYw2Evl1jk4HpHetFz+d49jfBABAgEE
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/sect571r1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/sect571r1-explicit.pem
new file mode 100644
index 000000000000..b81ab3c78e7b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/sect571r1-explicit.pem
@@ -0,0 +1,10 @@
+-----BEGIN EC PARAMETERS-----
+MIIBcQIBATAlBgcqhkjOPQECMBoCAgI7BgkqhkjOPQECAwMwCQIBAgIBBQIBCjBk
+BAEBBEgC9A5+IiHyld4pcRe389YvXGqX/8uM7/HNa6jOSpoYrYT/q72O+lkzK+et
+Z1ambilK/RhaeP8SqlIOTec5usoMf/7/fylVcnoDFQAqoFj3Og4zq0hrD2EEEMU6
+fxMjEASBkQQDAwAdNLhWKWwWwNQNPNd1CpPR0pVfqAql9A/I23sqvb3lOVD0wNKT
+zdcRo1tn+xSZrmADhhTxOUq/o7TIUNkn4ed2nI7sLRkDe/JzQtpjm23M//63PWnX
+jGwnpgCcu8oZgPhTOSHopoRCPkO6sIpXYpGvj0YbsqizUx0vBIXBmxbi8VFuI908
+GkgnrxuKwVsCSAP//////////////////////////////////////////////+Zh
+zhj/VZhzCAWbGGgjhR7H3ZyhFh3pPVF01m6Dgum7L+hORwIBAg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls1-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls1-explicit.pem
new file mode 100644
index 000000000000..5da128a99cc7
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls1-explicit.pem
@@ -0,0 +1,4 @@
+-----BEGIN EC PARAMETERS-----
+MF4CAQEwHAYHKoZIzj0BAjARAgFxBgkqhkjOPQECAwICAQkwBgQBAQQBAQQfBAFm
+eXmkC6SX5dXCcHgGFwD0S0rx7MJjDgh4XOvMFQIPAP/////////9v5GvbepzAgEC
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls10-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls10-explicit.pem
new file mode 100644
index 000000000000..d318fcb8c083
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls10-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MIGMAgEBMB0GByqGSM49AQIwEgICAOkGCSqGSM49AQIDAgIBSjAGBAEABAEBBD0E
+AXIyuoU6fnMa8SnyL/QUlWOkGcJr9QpMnW7vrWEmAdtTfezoGbf3D1VaZ8QnqM2b
+8Yrrm1bgwRBW+uajAh4AgAAAAAAAAAAAAAAAAAAGnVu5FbzUbvsa1fFzq98CAQQ=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls11-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls11-explicit.pem
new file mode 100644
index 000000000000..c6da58086607
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls11-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIG/AgEBMB0GByqGSM49AQIwEgICAOkGCSqGSM49AQIDAgIBSjA5BAEBBB1mZH7e
+bDMsf4wJI7tYITszOyDpzkKB/hFffY+QrQMVAHTVn/B/a0E9DqFLNEsgotsEm1DD
+BD0EAPrJ38usgxO7ITnxu3Vf72W8OR+LNvj463Nx/VWLAQBqCKQZAzUGeOWFKL6/
+igvv+GenyjZxb34B+BBSAh4BAAAAAAAAAAAAAAAAAAAT6XTnL4ppIgMdJgPP4NcC
+AQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls3-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls3-explicit.pem
new file mode 100644
index 000000000000..3438927e61fa
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls3-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MHkCAQEwJQYHKoZIzj0BAjAaAgIAowYJKoZIzj0BAgMDMAkCAQMCAQYCAQcwBgQB
+AQQBAQQrBAL+E8BTe7wRrKoH15PeTm1eXJTu6AKJBw+wXTj/WDIfLoAFNtU4zNqj
+2QIVBAAAAAAAAAAAAAIBCKLgzA2Z+KXvAgEC
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls4-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls4-explicit.pem
new file mode 100644
index 000000000000..2cd45a8c4fdd
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls4-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGPAgEBMBwGByqGSM49AQIwEQIBcQYJKoZIzj0BAgMCAgEJMDcEDjCIJQym58f+
+ZJzoWCD3BA7ovuTT4iYHRBiL4OnHIwMVABDnI6sU1pbmdodWFRdW/r+Py0mpBB8E
+AJ1zYW819KsUB9c1YsEPAKUoMCd5WO6E0TFe0xiGAg8BAAAAAAAAANnM7Io55W8C
+AQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls5-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls5-explicit.pem
new file mode 100644
index 000000000000..d7bc1c2cab27
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls5-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIG3AgEBMCUGByqGSM49AQIwGgICAKMGCSqGSM49AQIDAzAJAgEBAgECAgEIMEQE
+FQclRrVDUjSkIuB4lnX0MsiUNd5SQgQUyVF9BtUkDTz/OMdLILbNTW+d1NkDFQDS
+wPsVdghg3vHu9NaW5naHVhUXVAQrBAevaZiVRhA9eTKfzD10iA8zu+gDywHsIyEb
+WWat6h0/h/fqWEiu8LfKnwIVBAAAAAAAAAAAAAHmD8iCHMdNrq/BAgEC
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls8-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls8-explicit.pem
new file mode 100644
index 000000000000..d8c3ef8bf42a
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls8-explicit.pem
@@ -0,0 +1,4 @@
+-----BEGIN EC PARAMETERS-----
+MFoCAQEwGgYHKoZIzj0BAQIPAP////////////////3nMAYEAQAEAQMEHQQAAAAA
+AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAACAg8BAAAAAAAAAezqVRrYN+kCAQE=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls9-explicit.pem b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls9-explicit.pem
new file mode 100644
index 000000000000..383c5dce8ffd
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/noncanon/wap-wsg-idm-ecid-wtls9-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MHICAQEwIAYHKoZIzj0BAQIVAP///////////////////////ICPMAYEAQAEAQME
+KQQAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAhUBAAAA
+AAAAAAAAAc3JiuDi3ldKvzMCAQE=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem
new file mode 100644
index 000000000000..b69cdb0624e2
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMAAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem
new file mode 100644
index 000000000000..130621998be6
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIG4AgEBMCUGByqGSM49AQIwGgICAKMGCSqGSM49AQIDAzAJAgEBAgECAgEIMEUE
+FQEIs553xLEIvtmB7Q6JDhF8URzwcgQVBmes6zivTkiMQHQz/65PHIEWON8gAxUA
+U4FMBQ1E1pbmdodWFRdYDKTin/0EKwQAJCZuTrUQbQqWTZLEhg4mcdubbMUHn2hN
+32aExc0liziQAhsjht/Rn8UCFQP////////////99k3hFRrbt48QpwIBAg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem
new file mode 100644
index 000000000000..371f08cacf93
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMAAg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem
new file mode 100644
index 000000000000..fe6a07b09c78
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIG4AgEBMCUGByqGSM49AQIwGgICAKMGCSqGSM49AQIDAzAJAgEBAgECAgEIMEUE
+FQelJsY9PiWiVqAHaZ9UR+Mq5Fa1DgQVA/cGF5jrmeI4/W8b+VtI/utIVCUrAxUA
+UMvx2VypTWluZ2h1YVF18Wo2o7gEKwQC+fh7fFdNC97PiiLmUkd1+YzevcsFuTVZ
+DBVeF+pI6z/zcYuJPfWaBdACFQP////////////+Gu4UDxEK/5YTCQIBAg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem
new file mode 100644
index 000000000000..712f73c817d6
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMAAw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem
new file mode 100644
index 000000000000..9c362b00201b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGnAgEBMCUGByqGSM49AQIwGgICALAGCSqGSM49AQIDAzAJAgEBAgECAgErMDAE
+FuTm2ymVBlxAfZ05uNCWe5ZwS6jpyQsEFl3aRwq+ZBTejsEzrijpu9f87Arg//IE
+LQSNFsKGZ5i2APnwi7So6GDzKYzgSleYb6RTnC2t3da6tRZ9YbQ24dkrsWpWLAIV
+AQCSU3OX7KT2FFeZ1isKGc4G/iatAgMA/24=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem
new file mode 100644
index 000000000000..76091177ebd9
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMABA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem
new file mode 100644
index 000000000000..1bb91a2be3f3
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMACg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem
new file mode 100644
index 000000000000..02a433c074ab
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHjAgEBMCUGByqGSM49AQIwGgICARAGCSqGSM49AQIDAzAJAgEBAgEDAgE4MEgE
+IpGgkfA7X7pKssz0nE7dIg+wKHEtQr51KyxACU26zbWG+yAEInFn78krsuPOfIqq
+/zThKpxVcAPXxzpvrwA/mfbMhILlQPcERQRhCLq7LO6894cFigVsvgz+Yi13I6KJ
+4IoHrhPvDRDRcd2NEMdpVxaFHu9rp/aHLmFC+9JBuDD/Xvys7MqwXgIAXd6dIwIh
+AQD69RNU4OOeSJLfbjGccsgWFgP6Rap7mYoWe48eYpUhAgMA/wY=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem
new file mode 100644
index 000000000000..d1117958f394
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMAEA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem
new file mode 100644
index 000000000000..f11db414b98a
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+MIH3AgEBMCUGByqGSM49AQIwGgICATAGCSqGSM49AQIDAzAJAgEBAgECAgELMFAE
+Jv0NaTFJoRj2Uebc5oAghTd+X4gtG1ELRBYAdMEogHg2WgOWyOaBBCa925flVaUK
+kI5DsBx5jqXapniPHqJ5Tvz1cWa4wUA5YB5VgnNAvgRNBBl7B4Rem+LZatsPXzx/
+LP+9ej64tv7DXH/Wfybd9ihaZE90CiYU4Z++t24NoXFRfs9AG1Aom/AUEDKIUnqb
+QWoQXoAmC1Sf3BuSwDsCJQEB1VZXKqusgAEB1VZXKqusgAECLVyR3Rc/j7Vh2miZ
+FkRDBR0CAwD+Lg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem
new file mode 100644
index 000000000000..282364e500a1
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMAEQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem
new file mode 100644
index 000000000000..19828f807286
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem
@@ -0,0 +1,9 @@
+-----BEGIN EC PARAMETERS-----
+MIIBHwIBATAlBgcqhkjOPQECMBoCAgFwBgkqhkjOPQECAwMwCQIBAQIBAgIBVTBg
+BC7g0u4lCVIG9eKk+e0inx8lbnmg4rRVlw2NDYZb2Ud4xXbWLwq3UZzNKhqQauMN
+BC78EhfUMgqQRSx2CljtzTDI3QabPDRFODejTtUMtUkX4cIRLYTRZPRE+PdHhgRq
+BF0EEIXidVOB3MzjwVV6+hDC8MDCglZGxbNKOUy8+ovBayLn54npJ74hbwLh+xNq
+X3s+sb3cumLV2LIFm1JXl/xzgixZBZxiOkX/OEPO6Ph80YVa2qgeKgdQuA/aIxAC
+LQEAkFEtqa9ysINJ2Ypd1MewUy7KUc4D4tEPO3rFeb2H6QmuQKbxMenPzlvZZwID
+AP9w
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem
new file mode 100644
index 000000000000..d97112096307
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMAEw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem
new file mode 100644
index 000000000000..8b8c147e1a5b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIG/AgEBMB0GByqGSM49AQIwEgICAL8GCSqGSM49AQIDAgIBCTBLBBgoZlN7Z2dS
+Y2po9WVU4SZAJ2tknvdSYmcEGC5F71cfAHhvZ7AIG5SVo9lUYvXeCqGF7AMVAE4T
+ylQnRNaW5naHVhUXVS8nmoyEBDEENrPa+KIyBvnE8pnXshqcNpE38shK4aoNdlvn
+NDOz+V4zKTLnDqJFyiQY6g75gBj7AhhAAAAAAAAAAAAAAAAEog6Qw5BnyJO7uaUC
+AQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem
new file mode 100644
index 000000000000..a8745e544bd0
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMABQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem
new file mode 100644
index 000000000000..68302469867b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIG/AgEBMB0GByqGSM49AQIwEgICAL8GCSqGSM49AQIDAgIBCTBLBBhAECh3TXd3
+x7dmbRNm6kMgcSdPif8B5xgEGAYgBI0ovL0DtiScmRgrfIzRlwDDYsRqAQMVAAhx
+7y/vJNaW5naHVhUXWL7g2VwVBDEEOAmyt8wbKMxah5JqrYP9KHiegeLJ478QF0ND
+hmJtFPPb8Bdg2SE6PhzzeuxDfWaKAhggAAAAAAAAAAAAAABQUIy4n2UoJOBrgXMC
+AQQ=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem
new file mode 100644
index 000000000000..85a7fe8aeb9e
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMABg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem
new file mode 100644
index 000000000000..62d43cb4fa9c
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIG/AgEBMB0GByqGSM49AQIwEgICAL8GCSqGSM49AQIDAgIBCTBLBBhsAQdHVgmR
+IiIQVpEcd9d+d6d35+fnf8sEGHH+Gvkmz4R5ie/vjbRZ9mOU2Q8yrT8V6AMVAOBT
+US3GhNaW5naHVhUXUGeueG0fBDEEN11M4k/eQ0SJ3odG5xeGAVAJ5m44qSbdVFo5
+F2GWV12YWZk2bmrTTOCnfNcSewa+AhgVVVVVVVVVVVVVVVVhDAsZaBK/tiiKPqMC
+AQY=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem
new file mode 100644
index 000000000000..5131440fc970
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMABw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem
new file mode 100644
index 000000000000..c66246bd2bf9
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHdAgEBMB0GByqGSM49AQIwEgICAO8GCSqGSM49AQIDAgIBJDBXBB4yAQhXB3xU
+MRI6RrgIkGdW9UNCPo0nh3V4Eld4rHYEHnkECPLu2vOSsBLt77M5LzD0MnwMo/Mf
+w4PEIqqMFgMVANNLmk1pbmdodWFRdcpxuSC/77BdBD0EV5JwmPqTLnwKltP9W3Bu
+9+X1wVbha358hgOFUukdYdjuUHfDP+z28aFrJo3kacPHdE6pqXFkn8epYWMFAh4g
+AAAAAAAAAAAAAAAAAAAPTUL/4UkqSZPxytZm5EcCAQQ=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem
new file mode 100644
index 000000000000..68bfd3fed915
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMACw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem
new file mode 100644
index 000000000000..862b027ce051
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHdAgEBMB0GByqGSM49AQIwEgICAO8GCSqGSM49AQIDAgIBJDBXBB5CMAF3V6dn
++uQjmFabdGMl1FMTrwdmJmR5t1ZU5l8EHlA36mVBls/wzYKywUovzy4/+HdShbVF
+ci8D6s23SwMVACqmmC/fpNaW5naHVhUXXSZnJyd9BD0EKPnQTpAAacjcR6CFNP52
+0rkAt9fvMfVwnyAMTKIFVmczTEWv87WgO62d114scamTYlZ9VFP3+m4ifsgzAh4V
+VVVVVVVVVVVVVVVVVVU8byiFJZwx4/zfFUYkUi0CAQY=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem
new file mode 100644
index 000000000000..15e84078b1d1
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMADA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem
new file mode 100644
index 000000000000..2b0ca1e4ab2b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHdAgEBMB0GByqGSM49AQIwEgICAO8GCSqGSM49AQIDAgIBJDBXBB4BI4d0Zmpn
+dm1mdvd45na2aZkXZmbmh2Zth2bGap8EHmqUGXe6n2pDUZms/FEGftWH9RnF7LVB
+uORBEd4dQAMVAJ4Hb01pbmdodWFRdeEen913+SBBBD0EcPbp0E0onE6JkTzjUwv9
+6QOXfUKxRtU5vxveTpySLloOr25eEwW5AE3OXA7X/lmjVgjzODfIFtgLefRhAh4M
+zMzMzMzMzMzMzMzMzMysSRLS2d+QPvmIi4oOTP8CAQo=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem
new file mode 100644
index 000000000000..dd33a5ff4ed8
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMADQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem
new file mode 100644
index 000000000000..0b548ee4418a
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem
@@ -0,0 +1,9 @@
+-----BEGIN EC PARAMETERS-----
+MIIBKAIBATAdBgcqhkjOPQECMBICAgFnBgkqhkjOPQECAwICAUQwdQQtVmdnamVL
+IHVPNW6pIBfZRlZ8RmdVVvGVVqBGFrVn0iOl4FZW+1SQFqlmVqVXBC0kcuLQGXxJ
+Nj8f5/W22wddUraUfRNdjKRFgF05vDRWJgiWh3QrYynnBoAjGYgDFQArNUkgtyTW
+luZ2h1YVF1hboTMtxgRbBDwljvMEd2fn7eDx/ap52u44QTZqEy4WOs7U7SQB35xr
+3N6Y6OcHwHoiObGwl1PX4IUpVHBIEh6clfN5HdgEljlI80+ue/ROqCNl3Hho/lfk
+ri3iETBaQHEEvQItAa8oa8oa8oa8oa8oa8oa8oa8oa8oa8n7j2uFxVaJLCCn65ZP
+53GedPSQdY07AgFM
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem
new file mode 100644
index 000000000000..d8a6e5e2719b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMAEg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem
new file mode 100644
index 000000000000..1b139de32e31
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem
@@ -0,0 +1,9 @@
+-----BEGIN EC PARAMETERS-----
+MIIBPgIBATAdBgcqhkjOPQECMBICAgGvBgkqhkjOPQECAwICAXgwcAQ2GoJ+8A3W
+/A4jTK8EbGpdioU5WyNsxK0s8yoMrb3J3fYgsOuZBtCVf2xv6s1hVGjfEE3ils2P
+BDYQ2bSj2QR9ixVDWav7G39UhbBM64aCN93J3tqYKmeaWpGbYm1OUKjdcxsQepli
+OB+12Ae/JhgEbQQSD8BdPGepneFh0vQJJiL+ynAb5PUPR1hxToqHu/KmWO+MIefF
+7+llNh9sKZnAwkew29cM5rcg0K+JA6lvjV+iwlV0XTxFGzAsk0bZt+SF57zkH2tZ
+Hz6Pat3LsLxML5R6feGom2JdalmLN2ACNQNANANANANANANANANANANANANANANA
+NANANAMjwxP6tQWJcDtexo01h/7GDRYcwUnBrUqRAgInYA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem b/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem
new file mode 100644
index 000000000000..078c73a90f27
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMAFA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem
new file mode 100644
index 000000000000..6c6427da5bb1
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHHAgEBMCQGByqGSM49AQECGQD////////////////////+//////////8wSwQY
+/////////////////////v/////////8BBhkIQUZ5ZyA5w+n6atyJDBJ/rje7MFG
+ubEDFQAwRa5vyEIvZO1XlSjTgSDq4SGW1QQxBBiNqA6wMJD2fL8g60OhiAD0/wr9
+gv8QEgcZK5X/yNp4YxAR7WskzdVz+XehHnlIEQIZAP///////////////5ne+DYU
+a8mxtNIoMQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem b/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem
new file mode 100644
index 000000000000..0a9dd4ed62a6
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem b/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem
new file mode 100644
index 000000000000..32a580d3b573
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHHAgEBMCQGByqGSM49AQECGQD////////////////////+//////////8wSwQY
+/////////////////////v/////////8BBjMItbfuVxrJeScDWNkpOWYDDk6ohZo
+2VMDFQAxqS7iAp/RDZAbET6ZBxDw0hrGtgQxBO6iuufhSXhC8t53ac/pyYnAcq1p
+b0gDSmV00R1ptux6Zyu4Kgg98vKwhH3pcLLeFQIZAP///////////////l+xpyTc
+gEGGSNjdMQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem b/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem
new file mode 100644
index 000000000000..6bd311f1ca95
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMBAg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem b/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem
new file mode 100644
index 000000000000..f38e9d95a6c9
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHHAgEBMCQGByqGSM49AQECGQD////////////////////+//////////8wSwQY
+/////////////////////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvV
+aRYDFQDEaWhENd6zeMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6O
+Io8YljipDyJjczczS0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHI
+P0KU9kDsEwIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem b/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem
new file mode 100644
index 000000000000..ebdea34f39e8
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMBAw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem
new file mode 100644
index 000000000000..1795f2391b2e
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHpAgEBMCkGByqGSM49AQECHn///////////////3///////4AAAAAAAH//////
+/zBXBB5///////////////9///////+AAAAAAAB///////wEHmsBbDvc8YlB0NZU
+khR1ynGp2y+yfR03eWGFwpQsCgMVAOQ7tGDwuAzAwLB1eY6UgGD4Mht9BD0ED/qW
+PNyogWzMM7hkK+35BcPTWFc9Pyf7vTs8uaqvfevo5OkKXa5uQFTKUwugRlSzaBjO
+Ims5/Mt7AvGuAh5///////////////9///+eXpqfXZBx+9FSJoiQnQsCAQE=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem b/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem
new file mode 100644
index 000000000000..32d2c92d6812
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMBBA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem b/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem
new file mode 100644
index 000000000000..d7b7c2d390eb
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHpAgEBMCkGByqGSM49AQECHn///////////////3///////4AAAAAAAH//////
+/zBXBB5///////////////9///////+AAAAAAAB///////wEHmF/q2gyV2y7/tUN
+mfAknD/uWLlLoAOMeuhMjIMvLAMVAOi0ARYECVMDyjuAmZgr4J/LmuYWBD0EOK8J
+2YcncFEgySG7Xp4mKWo83PLzV1eg6v2HuDDnWwEl5NvqDscgbaD8AdmwgTKftVXe
+bvRgI33/i+S6Ah5///////////////+AAADPp+hZQ3fUFMA4IbxYIGMCAQE=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem b/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem
new file mode 100644
index 000000000000..b673ca7d01aa
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMBBQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem b/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem
new file mode 100644
index 000000000000..bf488d9cccc5
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHpAgEBMCkGByqGSM49AQECHn///////////////3///////4AAAAAAAH//////
+/zBXBB5///////////////9///////+AAAAAAAB///////wEHiVXBfoqMGZUsfTL
+A9anUKMMJQEC1JiHF9m6FattPgMVAH1zdBaP/jRxtgqFdoahlHXTv6L/BD0EZ2iu
+jhi7ks/PAFyUmqLG2UhT0OZgu/hUsclQX+laFgfmiY85DAa8HVUrrSJvO2/P5Itu
+gYSZrxjj7WzzAh5///////////////9///+XXetBs6YFfDxDIUZSZVECAQE=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem b/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem
new file mode 100644
index 000000000000..082f731ea046
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMBBg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem
new file mode 100644
index 000000000000..4419839f4877
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+MIH3AgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP//////////
+/////zBbBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12Ko6
+k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsDFQDEnTYIhucEk2pmeOETnSa3gZ9+
+kARBBGsX0fLhLEJH+Lzm5WOkQPJ3A32BLeszoPShOUXYmMKWT+NC4v4af5uO5+tK
+fA+eFivOM1drMV7Oy7ZAaDe/UfUCIQD/////AAAAAP//////////vOb6racXnoTz
+ucrC/GMlUQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem b/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem
new file mode 100644
index 000000000000..a76e47d9590b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMBBw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem
new file mode 100644
index 000000000000..2c97cb413cfa
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MIGLAgEBMBoGByqGSM49AQECDwDbfCq/YuNeZoB2vq0gizA3BA7bfCq/YuNeZoB2
+vq0giAQOZZ74ugQ5Fu7eiRFwKyIDFQAA9QsCjk1pbmdodWFRdSkEcng/sQQdBAlI
+cjmZWl7na1X5wvCYqJzlr4ckwKI+Dg/3dQACDwDbfCq/YuNedijfrGVhxQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem
new file mode 100644
index 000000000000..5b7a770c15b4
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQABg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem b/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem
new file mode 100644
index 000000000000..927ac3a82828
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MIGKAgEBMBoGByqGSM49AQECDwDbfCq/YuNeZoB2vq0gizA3BA5hJ8JMBfOKCqr2
+XA7wLAQOUd7xgV217XT8w0yF1wkDFQAAJ1ehEU1pbmdodWFRdVMWwF4L1AQdBEuj
+CrXokrThZJ3QkoZDrc1G9YguN0fe826VbpcCDjbfCq/YuNdZfKEFINBLAgEE
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem b/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem
new file mode 100644
index 000000000000..dfaed7480b9e
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQABw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem
new file mode 100644
index 000000000000..93732d63bf86
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGXAgEBMBwGByqGSM49AQECEQD////9////////////////MDsEEP////3/////
+//////////wEEOh1ecEQefQ92CSZPCzuXtMDFQAADg1NaW5naHVhUXUMwDpEc9A2
+eQQhBBYf91KLiZstDChgfKUsW4bPWsg5W6/rE8AtopLd7XqDAhEA/////gAAAAB1
+ow0bkDihFQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem
new file mode 100644
index 000000000000..bcf16a01a43a
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAHA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem b/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem
new file mode 100644
index 000000000000..2bcbebcb9b4d
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGWAgEBMBwGByqGSM49AQECEQD////9////////////////MDsEENYDGZjRs7v+
+v1nMm7/5ruEEEF7u/KOA0CkZ3CxlWLttil0DFQAATWluZ2h1YVF1EtjwNDH85juI
+9AQhBHtqpdheVymD5vsyp83rwUAntpFqiU067nEG/oBfw0tEAhA/////f////74A
+JHIGE7WjAgEE
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem b/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem
new file mode 100644
index 000000000000..3d1a30f57d3b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAHQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem
new file mode 100644
index 000000000000..2029fed02a00
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQACQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem
new file mode 100644
index 000000000000..6ddb9c4e4683
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGvAgEBMCAGByqGSM49AQECFQD/////////////////////f////zBDBBT/////
+////////////////f////AQUHJe+/FS9eotlrPifgdTUrcVl+kUDFQAQU83kLBTW
+luZ2h1YVF1M78/gzRQQpBEqWtWiO9XMoRmRpiWjDi7kTy/yCI6YoVTFolH1Z3MkS
+BCNRN3rF+zICFQEAAAAAAAAAAAAB9Mj5J67TynUiVwIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem
new file mode 100644
index 000000000000..3546d9957489
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQACA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem b/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem
new file mode 100644
index 000000000000..120728ae7e1c
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGvAgEBMCAGByqGSM49AQECFQD////////////////////+//+sczBDBBT/////
+///////////////+//+scAQUtOE00/tZ64urVydJBGZNWvUDiLoDFQC5m5mwmbMj
+4CcJpNaW5naHVhUXUQQpBFLcsDQpOhF+H0/xGzD3GZ0xRM5t/q/+8uMx8pbgcfoN
++Zgs/qfUPy4CFQEAAAAAAAAAAAAANR7nhqgY86GhawIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem b/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem
new file mode 100644
index 000000000000..fc9f9670b654
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAHg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem
new file mode 100644
index 000000000000..4f9fc32de2eb
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAHw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem
new file mode 100644
index 000000000000..aba6bf93f03b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAIA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem
new file mode 100644
index 000000000000..17baec7a48ff
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHfAgEBMCgGByqGSM49AQECHQD/////////////////////AAAAAAAAAAAAAAAB
+MFMEHP////////////////////7///////////////4EHLQFCoUMBLOr9UEyVlBE
+sLfXv9i6Jws5QyNV/7QDFQC9cTRHmdXH/NxFtZ+juauPapSLxQQ5BLcODL1rtL9/
+MhOQuUoDwdNWwhEiNDKA1hFcHSG9N2OItfcj+0wi3+bNQ3WgWgdHZETVgZmFAH40
+Ah0A//////////////////8WouC48D4T3SlFXFwqPQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem
new file mode 100644
index 000000000000..9728ddda9976
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAIQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem
new file mode 100644
index 000000000000..32d952ea91c6
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQACg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem
new file mode 100644
index 000000000000..8f5598ed05af
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem
@@ -0,0 +1,10 @@
+-----BEGIN EC PARAMETERS-----
+MIIBVwIBATA8BgcqhkjOPQEBAjEA////////////////////////////////////
+//////7/////AAAAAAAAAAD/////MHsEMP//////////////////////////////
+///////////+/////wAAAAAAAAAA/////AQwszEvp+I+5+SYjgVr4/gtGRgdnG7+
+gUESAxQIj1ATh1rGVjmNii7RnSqFyO3T7CrvAxUAozWSaqMZonodAIlqZ3OkgnrN
+rHMEYQSqh8oivosFN46xxx7zIK10bh07Younm5hZ90HgglQqOFUC8l2/VSlsOlRe
+OHJ2Crc2F95KliYsb12emL+Sktwp+PQdvSiaFHzp2jETtfC4wApgsc4dfoGdekMd
+fJDqDl8CMQD////////////////////////////////HY02B9Dct31gaDbJIsKd6
+7OwZaszFKXMCAQE=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem
new file mode 100644
index 000000000000..ceed209a5235
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAIg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem b/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem
new file mode 100644
index 000000000000..cdca78c8e2eb
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAIw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem
new file mode 100644
index 000000000000..f39d6cad8fb6
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQABA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem b/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem
new file mode 100644
index 000000000000..c27c9c58c75d
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQABQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem
new file mode 100644
index 000000000000..cc8264cbf30c
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGkAgEBMCUGByqGSM49AQIwGgICAIMGCSqGSM49AQIDAzAJAgECAgEDAgEIMD0E
+EQehGwmna1YhREGP8/+MJXC4BBECF8BWEIhLY7nGxykWePnTQQMVAE1pbmdodWFR
+dZhb06262iG0OpfiBCMEAIG6+R/fmDPED5wYE0Njg5kHjG5+o4wAH3PIE0sbTvnh
+UAIRBAAAAAAAAAACMSOVOpRktU0CAQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem
new file mode 100644
index 000000000000..4aa4244ca817
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAFg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem b/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem
new file mode 100644
index 000000000000..2bfb918bb49d
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGkAgEBMCUGByqGSM49AQIwGgICAIMGCSqGSM49AQIDAzAJAgECAgEDAgEIMD0E
+EQPlqIkZ18r8v0FfB8IXZXOyBBEEuCZqRsVWV6xzTOOPAY8hkgMVAJhb06261NaW
+5naHVhUXWiG0OpfjBCMEA1bc2PL5UDGtZS0jlRuzZqgGSPBthnlApTZtniZd6esk
+DwIRBAAAAAAAAAABaVSiMwSbqY8CAQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem b/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem
new file mode 100644
index 000000000000..c9c2a7c30d2a
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAFw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem
new file mode 100644
index 000000000000..d9ae41c97b8b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem b/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem
new file mode 100644
index 000000000000..78320dc9fc8a
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGhAgEBMCUGByqGSM49AQIwGgICAKMGCSqGSM49AQIDAzAJAgEDAgEGAgEHMC4E
+FQe2iCyq76hPlVT/hCi9iOJG0ngq4gQVBxNhLc3ctAqrlGvaKcqR9zr5WK/ZBCsE
+A2mXlperQ4l3iVZniVZ/eHp4dqZUAENe20Lvr7KYnVH+/OPICYj0H/iDAhUD////
+/////////0iqtonCnKcQJ5sCAQI=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem
new file mode 100644
index 000000000000..45dbad0ddd2e
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAAg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem b/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem
new file mode 100644
index 000000000000..ecf7a7124e9f
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQADw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem
new file mode 100644
index 000000000000..4fe58aa0485e
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAGA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem b/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem
new file mode 100644
index 000000000000..0c2956b22a7f
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAGQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem
new file mode 100644
index 000000000000..97be94b254b3
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAGg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem
new file mode 100644
index 000000000000..ba065e7ed49b
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAGw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem
new file mode 100644
index 000000000000..9f26dd8ab74c
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAAw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem
new file mode 100644
index 000000000000..8ab88df209e1
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAEA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem
new file mode 100644
index 000000000000..527459c3f5d7
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAEQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem
new file mode 100644
index 000000000000..ef4c82e00806
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAJA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem
new file mode 100644
index 000000000000..5ef828d71df1
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAJQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem
new file mode 100644
index 000000000000..9804e9cfcf8d
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAJg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem b/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem
new file mode 100644
index 000000000000..20b18d6eba70
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAJw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem
new file mode 100644
index 000000000000..c327f6f069be
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEEAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem
new file mode 100644
index 000000000000..05ed4021019c
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEECg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem
new file mode 100644
index 000000000000..247ba8216e13
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEECw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem
new file mode 100644
index 000000000000..355fd5b09a13
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+MIHIAgEBMCgGByqGSM49AQECHQD/////////////////////AAAAAAAAAAAAAAAB
+MDwEHP////////////////////7///////////////4EHLQFCoUMBLOr9UEyVlBE
+sLfXv9i6Jws5QyNV/7QEOQS3Dgy9a7S/fzITkLlKA8HTVsIRIjQygNYRXB0hvTdj
+iLX3I/tMIt/mzUN1oFoHR2RE1YGZhQB+NAIdAP//////////////////FqLguPA+
+E90pRVxcKj0CAQE=
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem
new file mode 100644
index 000000000000..afc6bd7e17e4
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEEDA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem
new file mode 100644
index 000000000000..859329078df0
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEEAw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem
new file mode 100644
index 000000000000..9a7887b2f0f0
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEEBA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem
new file mode 100644
index 000000000000..9f834d0c2eb0
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEEBQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem
new file mode 100644
index 000000000000..2c97cb413cfa
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PARAMETERS-----
+MIGLAgEBMBoGByqGSM49AQECDwDbfCq/YuNeZoB2vq0gizA3BA7bfCq/YuNeZoB2
+vq0giAQOZZ74ugQ5Fu7eiRFwKyIDFQAA9QsCjk1pbmdodWFRdSkEcng/sQQdBAlI
+cjmZWl7na1X5wvCYqJzlr4ckwKI+Dg/3dQACDwDbfCq/YuNedijfrGVhxQIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem
new file mode 100644
index 000000000000..0678777d4de6
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEEBg==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem
new file mode 100644
index 000000000000..120728ae7e1c
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PARAMETERS-----
+MIGvAgEBMCAGByqGSM49AQECFQD////////////////////+//+sczBDBBT/////
+///////////////+//+scAQUtOE00/tZ64urVydJBGZNWvUDiLoDFQC5m5mwmbMj
+4CcJpNaW5naHVhUXUQQpBFLcsDQpOhF+H0/xGzD3GZ0xRM5t/q/+8uMx8pbgcfoN
++Zgs/qfUPy4CFQEAAAAAAAAAAAAANR7nhqgY86GhawIBAQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem
new file mode 100644
index 000000000000..690b9375a4d4
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEEBw==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem
new file mode 100644
index 000000000000..4737cbcc4abb
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEECA==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem
new file mode 100644
index 000000000000..0212b4a4d890
--- /dev/null
+++ b/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem
@@ -0,0 +1,3 @@
+-----BEGIN EC PARAMETERS-----
+BgVnKwEECQ==
+-----END EC PARAMETERS-----
diff --git a/test/recipes/15-test_gendh.t b/test/recipes/15-test_gendh.t
new file mode 100644
index 000000000000..015a974eea19
--- /dev/null
+++ b/test/recipes/15-test_gendh.t
@@ -0,0 +1,69 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_gendh");
+
+plan skip_all => "This test is unsupported in a no-dh build" if disabled("dh");
+
+plan tests => 9;
+
+ok(run(app([ 'openssl', 'genpkey', '-algorithm', 'DH',
+ '-pkeyopt', 'type:group',
+ '-text'])),
+ "genpkey DH default group");
+
+ok(run(app([ 'openssl', 'genpkey', '-algorithm', 'DH',
+ '-pkeyopt', 'type:group',
+ '-pkeyopt', 'group:ffdhe2048',
+ '-text'])),
+ "genpkey DH group ffdhe2048");
+
+ok(run(app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DHX',
+ '-pkeyopt', 'gindex:1',
+ '-pkeyopt', 'type:fips186_4',
+ '-out', 'dhgen.pem' ])),
+ "genpkey DH params fips186_4 PEM");
+
+# The seed and counter should be the ones generated from the param generation
+# Just put some dummy ones in to show it works.
+ok(run(app([ 'openssl', 'genpkey',
+ '-paramfile', 'dhgen.pem',
+ '-pkeyopt', 'gindex:1',
+ '-pkeyopt', 'hexseed:ed2927f2139eb61495d6641efda1243f93ebe482b5bfc2c755a53825',
+ '-pkeyopt', 'pcounter:25',
+ '-text' ])),
+ "genpkey DH fips186_4 with PEM params");
+
+ ok(!run(app([ 'openssl', 'genpkey',
+ '-algorithm', 'DH'])),
+ "genpkey DH with no params should fail");
+
+ ok(!run(app([ 'openssl', 'genpkey', '-algorithm', 'DH', '-pkeyopt',
+ 'group:ffdhe3072', '-pkeyopt', 'priv_len:255', '-text'])),
+ 'genpkey DH with a small private len should fail');
+
+ ok(!run(app([ 'openssl', 'genpkey', '-algorithm', 'DH', '-pkeyopt',
+ 'group:ffdhe3072', '-pkeyopt', 'priv_len:3072', '-text'])),
+ 'genpkey DH with a large private len should fail');
+
+ ok(run(app([ 'openssl', 'genpkey', '-algorithm', 'DH', '-pkeyopt',
+ 'group:ffdhe3072', '-pkeyopt', 'priv_len:256', '-text'])),
+ 'genpkey DH with a minimum strength private len');
+
+ ok(run(app([ 'openssl', 'genpkey', '-algorithm', 'DH', '-pkeyopt',
+ 'group:ffdhe2048', '-pkeyopt', 'priv_len:224', '-text'])),
+ 'genpkey 2048 DH with a minimum strength private len');
diff --git a/test/recipes/15-test_gendhparam.t b/test/recipes/15-test_gendhparam.t
new file mode 100644
index 000000000000..18ff86e63f9e
--- /dev/null
+++ b/test/recipes/15-test_gendhparam.t
@@ -0,0 +1,178 @@
+#! /usr/bin/env perl
+# Copyright 2021-2022 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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_gendhparam");
+
+my @testdata = (
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ "type:fips186_4", 'digest:SHA256', 'gindex:1' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'gindex:', 'pcounter:', 'SEED:' ],
+ message => 'DH fips186_4 param gen with verifiable g',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ "type:fips186_4", 'digest:SHA256', 'gindex:1' ],
+ expect => [ 'ERROR' ],
+ message => 'fips186_4 param gen should fail if DHX is not used',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ "type:fips186_4", 'digest:SHA512-224', 'gindex:1' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'gindex:', 'pcounter:', 'SEED:' ],
+ message => 'DH fips186_4 param gen with verifiable g and truncated digest',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'type:fips186_2', 'pbits:1024', 'qbits:160' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'h:', 'pcounter:', 'SEED:' ],
+ message => 'DHX fips186_2 param gen with a selected p and q size with unverifyable g',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'type:fips186_2', 'dh_paramgen_prime_len:1024', 'dh_paramgen_subprime_len:160' ],
+ message => 'DHX fips186_2 param gen with a selected p and q size using aliased',
+ expect => [ "BEGIN X9.42 DH PARAMETERS" ],
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'type:fips186_2', 'dh_paramgen_prime_len:1024', 'dh_paramgen_subprime_len:160' ],
+ message => 'DH fips186_2 param gen with a selected p and q size using aliases should fail',
+ expect => [ "ERROR" ],
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'group:ffdhe2048'],
+ expect => [ 'BEGIN DH PARAMETERS', 'GROUP:' ],
+ message => 'DH named group ffdhe selection',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'dh_param:ffdhe8192'],
+ expect => [ 'BEGIN DH PARAMETERS', 'GROUP:' ],
+ message => 'DH named group ffdhe selection using alias',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'group:modp_3072'],
+ expect => [ 'BEGIN DH PARAMETERS', 'GROUP:' ],
+ message => 'DH named group modp selection',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'dh_param:modp_4096'],
+ message => 'DH named group modp selection using alias',
+ expect => [ 'BEGIN DH PARAMETERS', 'GROUP:'],
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'group:dh_2048_256' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'GROUP:' ],
+ message => 'DHX RFC5114 named group selection',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'dh_param:dh_2048_224' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'GROUP:' ],
+ message => 'DHX RFC5114 named group selection using alias',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'dh_rfc5114:2'],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'GROUP:' ],
+ message => 'DHX RFC5114 named group selection using an id',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'dh_rfc5114:1', 'dh_paramgen_type:1' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'GROUP:' ],
+ message => 'DHX paramgen_type is ignored if the group is set',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'dh_rfc5114:1', 'dh_paramgen_type:1' ],
+ expect => [ 'ERROR' ],
+ message => "Setting dh_paramgen_type to fips186 should fail for DH keys",
+ },
+# These tests using the safeprime generator were removed as they are slow..
+# {
+# algorithm => 'DH',
+# pkeyopts => [ 'type:generator', 'safeprime-generator:5'],
+# expect => [ 'BEGIN DH PARAMETERS', 'G: 5' ],
+# message => 'DH safe prime generator',
+# },
+# {
+# algorithm => 'DH',
+# pkeyopts => [ 'dh_paramgen_type:0', 'dh_paramgen_generator:5'],
+# expect => [ 'BEGIN DH PARAMETERS', 'G: 5' ],
+# message => 'DH safe prime generator using an alias',
+# },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'type:generator', 'safeprime-generator:5'],
+ expect => [ 'ERROR' ],
+ message => 'safe prime generator should fail for DHX',
+ }
+);
+
+plan skip_all => "DH isn't supported in this build" if disabled("dh");
+
+plan tests => scalar @testdata;
+
+foreach my $test (@testdata) {
+ my $alg = $test->{algorithm};
+ my $msg = $test->{message};
+ my @testargs = @{ $test->{pkeyopts} };
+ my @expected = @{ $test->{expect} };
+ my @pkeyopts= ();
+ foreach (@testargs) {
+ push(@pkeyopts, '-pkeyopt');
+ push(@pkeyopts, $_);
+ }
+ my @lines;
+ if ($expected[0] eq 'ERROR') {
+ @lines = run(app(['openssl', 'genpkey', '-genparam',
+ '-algorithm', $alg, '-text', @pkeyopts],
+ stderr => undef),
+ capture => 1);
+ } else {
+ @lines = run(app(['openssl', 'genpkey', '-genparam',
+ '-algorithm', $alg, '-text', @pkeyopts]),
+ capture => 1);
+ }
+ ok(compareline(\@lines, \@expected), $msg);
+}
+
+# Check that the stdout output matches the expected value.
+sub compareline {
+ my ($ref_lines, $ref_expected) = @_;
+ my @lines = @$ref_lines;
+ my @expected = @$ref_expected;
+
+ if (@lines == 0 and $expected[0] eq 'ERROR') {
+ return 1;
+ }
+ print "-----------------\n";
+ foreach (@lines) {
+ print "# ".$_;
+ }
+ print "-----------------\n";
+ foreach my $ex (@expected) {
+ if ( !grep { index($_, $ex) >= 0 } @lines) {
+ print "ERROR: Cannot find: $ex\n";
+ return 0;
+ }
+ }
+ return 1;
+}
diff --git a/test/recipes/15-test_gendsa.t b/test/recipes/15-test_gendsa.t
new file mode 100644
index 000000000000..b495b08bda58
--- /dev/null
+++ b/test/recipes/15-test_gendsa.t
@@ -0,0 +1,136 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file srctop_dir bldtop_dir bldtop_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_gendsa");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+plan skip_all => "This test is unsupported in a no-dsa build"
+ if disabled("dsa");
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan tests =>
+ ($no_fips ? 0 : 2) # FIPS related tests
+ + 11;
+
+ok(run(app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'gindex:1',
+ '-pkeyopt', 'type:fips186_4',
+ '-text'])),
+ "genpkey DSA params fips186_4 with verifiable g");
+
+ok(run(app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'type:fips186_4',
+ '-text'])),
+ "genpkey DSA params fips186_4 with unverifiable g");
+
+ok(run(app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'pbits:2048',
+ '-pkeyopt', 'qbits:224',
+ '-pkeyopt', 'digest:SHA512-256',
+ '-pkeyopt', 'type:fips186_4'])),
+ "genpkey DSA params fips186_4 with truncated SHA");
+
+ok(run(app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'type:fips186_2',
+ '-text'])),
+ "genpkey DSA params fips186_2");
+
+ok(run(app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'type:fips186_2',
+ '-pkeyopt', 'dsa_paramgen_bits:1024',
+ '-out', 'dsagen.legacy.pem'])),
+ "genpkey DSA params fips186_2 PEM");
+
+ok(!run(app([ 'openssl', 'genpkey', '-algorithm', 'DSA',
+ '-pkeyopt', 'type:group',
+ '-text'])),
+ "genpkey DSA does not support groups");
+
+ok(run(app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'gindex:1',
+ '-pkeyopt', 'type:fips186_4',
+ '-out', 'dsagen.pem'])),
+ "genpkey DSA params fips186_4 PEM");
+
+ok(run(app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'gindex:1',
+ '-pkeyopt', 'pbits:2048',
+ '-pkeyopt', 'qbits:256',
+ '-pkeyopt', 'type:fips186_4',
+ '-outform', 'DER',
+ '-out', 'dsagen.der'])),
+ "genpkey DSA params fips186_4 DER");
+
+ok(run(app([ 'openssl', 'genpkey',
+ '-paramfile', 'dsagen.legacy.pem',
+ '-pkeyopt', 'type:fips186_2',
+ '-text'])),
+ "genpkey DSA fips186_2 with PEM params");
+
+# The seed and counter should be the ones generated from the param generation
+# Just put some dummy ones in to show it works.
+ok(run(app([ 'openssl', 'genpkey',
+ '-paramfile', 'dsagen.der',
+ '-pkeyopt', 'type:fips186_4',
+ '-pkeyopt', 'gindex:1',
+ '-pkeyopt', 'hexseed:0102030405060708090A0B0C0D0E0F1011121314',
+ '-pkeyopt', 'pcounter:25',
+ '-text'])),
+ "genpkey DSA fips186_4 with DER params");
+
+ok(!run(app([ 'openssl', 'genpkey',
+ '-algorithm', 'DSA'])),
+ "genpkey DSA with no params should fail");
+
+unless ($no_fips) {
+ my $provconf = srctop_file("test", "fips-and-base.cnf");
+ my $provpath = bldtop_dir("providers");
+ my @prov = ( "-provider-path", $provpath,
+ "-config", $provconf);
+
+ $ENV{OPENSSL_TEST_LIBCTX} = "1";
+
+ # Generate params
+ ok(run(app(['openssl', 'genpkey',
+ @prov,
+ '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'pbits:3072',
+ '-pkeyopt', 'qbits:256',
+ '-out', 'gendsatest3072params.pem'])),
+ "Generating 3072-bit DSA params");
+
+ # Generate keypair
+ ok(run(app(['openssl', 'genpkey',
+ @prov,
+ '-paramfile', 'gendsatest3072params.pem',
+ '-text',
+ '-out', 'gendsatest3072.pem'])),
+ "Generating 3072-bit DSA keypair");
+
+}
diff --git a/test/recipes/15-test_genec.t b/test/recipes/15-test_genec.t
new file mode 100644
index 000000000000..2dfed387ca06
--- /dev/null
+++ b/test/recipes/15-test_genec.t
@@ -0,0 +1,306 @@
+#! /usr/bin/env perl
+# Copyright 2017-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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+# 'supported' and 'unsupported' reflect the current state of things. In
+# Test::More terms, 'supported' works exactly like ok(run(whatever)), while
+# 'unsupported' wraps that in a TODO: { } block.
+#
+# The first argument is the test name (this becomes the last argument to
+# 'ok')
+# The remaining argument are passed unchecked to 'run'.
+
+# 1: the result of app() or similar, i.e. something you can pass to
+sub supported_pass {
+ my $str = shift;
+
+ ok(run(@_), $str);
+}
+
+sub supported_fail {
+ my $str = shift;
+
+ ok(!run(@_), $str);
+}
+
+setup("test_genec");
+
+plan skip_all => "This test is unsupported in a no-ec build"
+ if disabled("ec");
+
+my @prime_curves = qw(
+ secp112r1
+ secp112r2
+ secp128r1
+ secp128r2
+ secp160k1
+ secp160r1
+ secp160r2
+ secp192k1
+ secp224k1
+ secp224r1
+ secp256k1
+ secp384r1
+ secp521r1
+ prime192v1
+ prime192v2
+ prime192v3
+ prime239v1
+ prime239v2
+ prime239v3
+ prime256v1
+ wap-wsg-idm-ecid-wtls6
+ wap-wsg-idm-ecid-wtls7
+ wap-wsg-idm-ecid-wtls8
+ wap-wsg-idm-ecid-wtls9
+ wap-wsg-idm-ecid-wtls12
+ brainpoolP160r1
+ brainpoolP160t1
+ brainpoolP192r1
+ brainpoolP192t1
+ brainpoolP224r1
+ brainpoolP224t1
+ brainpoolP256r1
+ brainpoolP256t1
+ brainpoolP320r1
+ brainpoolP320t1
+ brainpoolP384r1
+ brainpoolP384t1
+ brainpoolP512r1
+ brainpoolP512t1
+);
+
+my @binary_curves = qw(
+ sect113r1
+ sect113r2
+ sect131r1
+ sect131r2
+ sect163k1
+ sect163r1
+ sect163r2
+ sect193r1
+ sect193r2
+ sect233k1
+ sect233r1
+ sect239k1
+ sect283k1
+ sect283r1
+ sect409k1
+ sect409r1
+ sect571k1
+ sect571r1
+ c2pnb163v1
+ c2pnb163v2
+ c2pnb163v3
+ c2pnb176v1
+ c2tnb191v1
+ c2tnb191v2
+ c2tnb191v3
+ c2pnb208w1
+ c2tnb239v1
+ c2tnb239v2
+ c2tnb239v3
+ c2pnb272w1
+ c2pnb304w1
+ c2tnb359v1
+ c2pnb368w1
+ c2tnb431r1
+ wap-wsg-idm-ecid-wtls1
+ wap-wsg-idm-ecid-wtls3
+ wap-wsg-idm-ecid-wtls4
+ wap-wsg-idm-ecid-wtls5
+ wap-wsg-idm-ecid-wtls10
+ wap-wsg-idm-ecid-wtls11
+);
+
+my @explicit_only_curves = ();
+push(@explicit_only_curves, qw(
+ Oakley-EC2N-3
+ Oakley-EC2N-4
+ )) if !disabled("ec2m");
+
+my @other_curves = ();
+push(@other_curves, 'SM2')
+ if !disabled("sm2");
+
+my @curve_aliases = qw(
+ P-192
+ P-224
+ P-256
+ P-384
+ P-521
+);
+push(@curve_aliases, qw(
+ B-163
+ B-233
+ B-283
+ B-409
+ B-571
+ K-163
+ K-233
+ K-283
+ K-409
+ K-571
+)) if !disabled("ec2m");
+
+my @curve_list = ();
+push(@curve_list, @prime_curves);
+push(@curve_list, @binary_curves)
+ if !disabled("ec2m");
+push(@curve_list, @other_curves);
+push(@curve_list, @curve_aliases);
+
+my %params_encodings =
+ (
+ 'named_curve' => \&supported_pass,
+ 'explicit' => \&supported_pass
+ );
+
+my @output_formats = ('PEM', 'DER');
+
+plan tests => scalar(@curve_list) * scalar(keys %params_encodings)
+ * (1 + scalar(@output_formats)) # Try listed @output_formats and text output
+ * 2 # Test generating parameters and keys
+ + 1 # Checking that with no curve it fails
+ + 1 # Checking that with unknown curve it fails
+ + 1 # Subtest for explicit only curves
+ + 1 # base serializer test
+ ;
+
+ok(!run(app([ 'openssl', 'genpkey',
+ '-algorithm', 'EC'])),
+ "genpkey EC with no params should fail");
+
+ok(!run(app([ 'openssl', 'genpkey',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:bogus_foobar_curve'])),
+ "genpkey EC with unknown curve name should fail");
+
+ok(run(app([ 'openssl', 'genpkey',
+ '-provider-path', 'providers',
+ '-provider', 'base',
+ '-config', srctop_file("test", "default.cnf"),
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:prime256v1',
+ '-text'])),
+ "generate a private key and serialize it using the base provider");
+
+foreach my $curvename (@curve_list) {
+ foreach my $paramenc (sort keys %params_encodings) {
+ my $fn = $params_encodings{$paramenc};
+
+ # --- Test generating parameters ---
+
+ $fn->("genpkey EC params ${curvename} with ec_param_enc:'${paramenc}' (text)",
+ app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-pkeyopt', 'ec_param_enc:'.$paramenc,
+ '-text']));
+
+ foreach my $outform (@output_formats) {
+ my $outfile = "ecgen.${curvename}.${paramenc}." . lc $outform;
+ $fn->("genpkey EC params ${curvename} with ec_param_enc:'${paramenc}' (${outform})",
+ app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-pkeyopt', 'ec_param_enc:'.$paramenc,
+ '-outform', $outform,
+ '-out', $outfile]));
+ }
+
+ # --- Test generating actual keys ---
+
+ $fn->("genpkey EC key on ${curvename} with ec_param_enc:'${paramenc}' (text)",
+ app([ 'openssl', 'genpkey',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-pkeyopt', 'ec_param_enc:'.$paramenc,
+ '-text']));
+
+ foreach my $outform (@output_formats) {
+ my $outfile = "ecgen.${curvename}.${paramenc}." . lc $outform;
+ $fn->("genpkey EC key on ${curvename} with ec_param_enc:'${paramenc}' (${outform})",
+ app([ 'openssl', 'genpkey',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-pkeyopt', 'ec_param_enc:'.$paramenc,
+ '-outform', $outform,
+ '-out', $outfile]));
+ }
+ }
+}
+
+subtest "test curves that only support explicit parameters encoding" => sub {
+ plan skip_all => "This test is unsupported under current configuration"
+ if scalar(@explicit_only_curves) <= 0;
+
+ plan tests => scalar(@explicit_only_curves) * scalar(keys %params_encodings)
+ * (1 + scalar(@output_formats)) # Try listed @output_formats and text output
+ * 2 # Test generating parameters and keys
+ ;
+
+ my %params_encodings =
+ (
+ 'named_curve' => \&supported_fail,
+ 'explicit' => \&supported_pass
+ );
+
+ foreach my $curvename (@explicit_only_curves) {
+ foreach my $paramenc (sort keys %params_encodings) {
+ my $fn = $params_encodings{$paramenc};
+
+ # --- Test generating parameters ---
+
+ $fn->("genpkey EC params ${curvename} with ec_param_enc:'${paramenc}' (text)",
+ app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-pkeyopt', 'ec_param_enc:'.$paramenc,
+ '-text']));
+
+ foreach my $outform (@output_formats) {
+ my $outfile = "ecgen.${curvename}.${paramenc}." . lc $outform;
+ $fn->("genpkey EC params ${curvename} with ec_param_enc:'${paramenc}' (${outform})",
+ app([ 'openssl', 'genpkey', '-genparam',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-pkeyopt', 'ec_param_enc:'.$paramenc,
+ '-outform', $outform,
+ '-out', $outfile]));
+ }
+
+ # --- Test generating actual keys ---
+
+ $fn->("genpkey EC key on ${curvename} with ec_param_enc:'${paramenc}' (text)",
+ app([ 'openssl', 'genpkey',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-pkeyopt', 'ec_param_enc:'.$paramenc,
+ '-text']));
+
+ foreach my $outform (@output_formats) {
+ my $outfile = "ecgen.${curvename}.${paramenc}." . lc $outform;
+ $fn->("genpkey EC key on ${curvename} with ec_param_enc:'${paramenc}' (${outform})",
+ app([ 'openssl', 'genpkey',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-pkeyopt', 'ec_param_enc:'.$paramenc,
+ '-outform', $outform,
+ '-out', $outfile]));
+ }
+ }
+ }
+};
diff --git a/test/recipes/15-test_genrsa.t b/test/recipes/15-test_genrsa.t
new file mode 100644
index 000000000000..fe99f3369490
--- /dev/null
+++ b/test/recipes/15-test_genrsa.t
@@ -0,0 +1,150 @@
+#! /usr/bin/env perl
+# Copyright 2017-2022 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file srctop_dir bldtop_dir bldtop_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_genrsa");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan tests =>
+ ($no_fips ? 0 : 5) # Extra FIPS related tests
+ + 15;
+
+# We want to know that an absurdly small number of bits isn't support
+is(run(app([ 'openssl', 'genpkey', '-out', 'genrsatest.pem',
+ '-algorithm', 'RSA', '-pkeyopt', 'rsa_keygen_bits:8',
+ '-pkeyopt', 'rsa_keygen_pubexp:3'])),
+ 0, "genpkey 8");
+is(run(app([ 'openssl', 'genrsa', '-3', '-out', 'genrsatest.pem', '8'])),
+ 0, "genrsa -3 8");
+
+# Depending on the shared library, we might have different lower limits.
+# Let's find it! This is a simple binary search
+# ------------------------------------------------------------
+# NOTE: $good may need an update in the future
+# ------------------------------------------------------------
+note "Looking for lowest amount of bits";
+my $bad = 3; # Log2 of number of bits (2 << 3 == 8)
+my $good = 11; # Log2 of number of bits (2 << 11 == 2048)
+my $fin;
+while ($good > $bad + 1) {
+ my $checked = int(($good + $bad + 1) / 2);
+ my $bits = 2 ** $checked;
+ $fin = run(app([ 'openssl', 'genpkey', '-out', 'genrsatest.pem',
+ '-algorithm', 'RSA', '-pkeyopt', 'rsa_keygen_pubexp:65537',
+ '-pkeyopt', "rsa_keygen_bits:$bits",
+ ], stderr => undef));
+ if ($fin) {
+ note 2 ** $checked, " bits is good";
+ $good = $checked;
+ } else {
+ note 2 ** $checked, " bits is bad";
+ $bad = $checked;
+ }
+}
+$good++ if $good == $bad;
+$good = 2 ** $good;
+note "Found lowest allowed amount of bits to be $good";
+
+ok(run(app([ 'openssl', 'genpkey', '-algorithm', 'RSA',
+ '-pkeyopt', 'rsa_keygen_pubexp:65537',
+ '-pkeyopt', "rsa_keygen_bits:$good",
+ '-out', 'genrsatest.pem' ])),
+ "genpkey $good");
+ok(run(app([ 'openssl', 'pkey', '-check', '-in', 'genrsatest.pem', '-noout' ])),
+ "pkey -check");
+
+ok(run(app([ 'openssl', 'genpkey', '-algorithm', 'RSA',
+ '-pkeyopt', 'rsa_keygen_bits:2048',
+ '-out', 'genrsatest2048.pem' ])),
+ "genpkey 2048 bits");
+ok(run(app([ 'openssl', 'pkey', '-check', '-in', 'genrsatest2048.pem', '-noout' ])),
+ "pkey -check");
+
+ok(!run(app([ 'openssl', 'genpkey', '-algorithm', 'RSA',
+ '-pkeyopt', 'hexe:02',
+ '-out', 'genrsatest.pem' ])),
+ "genpkey with a bad public exponent should fail");
+ok(!run(app([ 'openssl', 'genpkey', '-algorithm', 'RSA',
+ '-pkeyopt', 'e:65538',
+ '-out', 'genrsatest.pem' ])),
+ "genpkey with a even public exponent should fail");
+ok(!run(app([ 'openssl', 'genpkey', '-propquery', 'unknown',
+ '-algorithm', 'RSA' ])),
+ "genpkey requesting unknown=yes property should fail");
+
+ SKIP: {
+ skip "Skipping rsa command line test", 2 if disabled("deprecated-3.0");
+
+ ok(run(app([ 'openssl', 'genrsa', '-3', '-out', 'genrsatest.pem', $good ])),
+ "genrsa -3 $good");
+ ok(run(app([ 'openssl', 'rsa', '-check', '-in', 'genrsatest.pem', '-noout' ])),
+ "rsa -check");
+ }
+
+ok(run(app([ 'openssl', 'genrsa', '-f4', '-out', 'genrsatest.pem', $good ])),
+ "genrsa -f4 $good");
+ok(run(app([ 'openssl', 'rsa', '-check', '-in', 'genrsatest.pem', '-noout' ])),
+ "rsa -check");
+ok(run(app([ 'openssl', 'rsa', '-in', 'genrsatest.pem', '-out', 'genrsatest-enc.pem',
+ '-aes256', '-passout', 'pass:x' ])),
+ "rsa encrypt");
+ok(run(app([ 'openssl', 'rsa', '-in', 'genrsatest-enc.pem', '-passin', 'pass:x' ])),
+ "rsa decrypt");
+
+unless ($no_fips) {
+ my $provconf = srctop_file("test", "fips-and-base.cnf");
+ my $provpath = bldtop_dir("providers");
+ my @prov = ( "-provider-path", $provpath,
+ "-config", $provconf);
+
+ $ENV{OPENSSL_TEST_LIBCTX} = "1";
+ ok(run(app(['openssl', 'genpkey',
+ @prov,
+ '-algorithm', 'RSA',
+ '-pkeyopt', 'bits:2080',
+ '-out', 'genrsatest2080.pem'])),
+ "Generating RSA key with > 2048 bits and < 3072 bits");
+ ok(run(app(['openssl', 'genpkey',
+ @prov,
+ '-algorithm', 'RSA',
+ '-pkeyopt', 'bits:3072',
+ '-out', 'genrsatest3072.pem'])),
+ "Generating RSA key with 3072 bits");
+
+ ok(!run(app(['openssl', 'genrsa', @prov, '512'])),
+ "Generating RSA key with 512 bits should fail in FIPS provider");
+
+ ok(!run(app(['openssl', 'genrsa',
+ @prov,
+ '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '512'])),
+ "Generating RSA key with 512 bits should succeed with FIPS provider as".
+ " default with a non-FIPS property query");
+
+ # We want to know that an absurdly large number of bits fails the RNG check
+ is(run(app([ 'openssl', 'genpkey',
+ @prov,
+ '-algorithm', 'RSA',
+ '-pkeyopt', 'bits:1000000000',
+ '-out', 'genrsatest.pem'])),
+ 0, "genpkey 1000000000");
+}
diff --git a/test/recipes/15-test_gensm2.t b/test/recipes/15-test_gensm2.t
new file mode 100644
index 000000000000..5c655b3d1358
--- /dev/null
+++ b/test/recipes/15-test_gensm2.t
@@ -0,0 +1,61 @@
+#! /usr/bin/env perl
+# Copyright 2023-2024 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw(:DEFAULT pipe);
+use OpenSSL::Test::Utils;
+
+# These are special key generation tests for SM2 keys specifically,
+# as they could be said to be a bit special in their encoding.
+# This is an auxilliary test to 15-test_genec.t
+
+setup("test_gensm2");
+
+plan skip_all => "This test is unsupported in a no-sm2 build"
+ if disabled("sm2");
+
+plan tests => 2;
+
+# According to the example in GM/T 0015-2012, appendix D.2,
+# generating an EC key with the named SM2 curve or generating
+# an SM2 key should end up with the same encoding (apart from
+# key private key field itself). This regular expressions
+# shows us what 'openssl asn1parse' should display.
+
+my $sm2_re = qr|
+ ^
+ .*?\Qcons: SEQUENCE\E\s+?\R
+ .*?\Qprim: INTEGER :00\E\R
+ .*?\Qcons: SEQUENCE\E\s+?\R
+ .*?\Qprim: OBJECT :id-ecPublicKey\E\R
+ .*?\Qprim: OBJECT :sm2\E\R
+ .*?\Qprim: OCTET STRING [HEX DUMP]:\E
+ |mx;
+
+my $cmd_genec = app([ 'openssl', 'genpkey',
+ '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:SM2',
+ '-pkeyopt', 'ec_param_enc:named_curve' ]);
+my $cmd_gensm2 = app([ 'openssl', 'genpkey', '-algorithm', 'SM2' ]);
+my $cmd_asn1parse = app([ 'openssl', 'asn1parse', '-i' ]);
+
+my $result_ec = join("", run(pipe($cmd_genec, $cmd_asn1parse),
+ capture => 1));
+
+like($result_ec, $sm2_re,
+ "Check that 'genpkey -algorithm EC' resulted in a correctly encoded SM2 key");
+
+my $result_sm2 = join("", run(pipe($cmd_gensm2, $cmd_asn1parse),
+ capture => 1));
+
+like($result_sm2, $sm2_re,
+ "Check that 'genpkey -algorithm SM2' resulted in a correctly encoded SM2 key");
diff --git a/test/recipes/15-test_mp_rsa.t b/test/recipes/15-test_mp_rsa.t
new file mode 100644
index 000000000000..956626de00ea
--- /dev/null
+++ b/test/recipes/15-test_mp_rsa.t
@@ -0,0 +1,126 @@
+#! /usr/bin/env perl
+# Copyright 2017-2023 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright 2017 BaishanCloud. 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_mp_rsa");
+
+my @test_param = (
+ # 3 primes, 2048-bit
+ {
+ primes => '3',
+ bits => '2048',
+ },
+ # 4 primes, 4096-bit
+ {
+ primes => '4',
+ bits => '4096',
+ },
+ # 5 primes, 8192-bit
+ {
+ primes => '5',
+ bits => '8192',
+ },
+);
+
+plan tests => 2 + scalar(@test_param) * 5 * 2;
+
+ok(run(test(["rsa_mp_test"])), "running rsa multi prime test");
+
+ok(run(app(['openssl', 'pkey', '-noout', '-check', '-in',
+ data_file('rsamplcm.pem')])), "checking lcm in key check");
+
+my $cleartext = data_file("plain_text");
+
+# genrsa
+run_mp_tests(0);
+# evp
+run_mp_tests(1);
+
+sub run_mp_tests {
+ my $evp = shift;
+
+ foreach my $param (@test_param) {
+ my $primes = $param->{primes};
+ my $bits = $param->{bits};
+ my $name = ($evp ? "evp" : "") . "${bits}p${primes}";
+
+ if ($evp) {
+ ok(run(app([ 'openssl', 'genpkey', '-out', "rsamptest-$name.pem",
+ '-algorithm', 'RSA',
+ '-pkeyopt', "rsa_keygen_primes:$primes",
+ '-pkeyopt', "rsa_keygen_bits:$bits"])),
+ "genrsa $name");
+ ok(run(app([ 'openssl', 'pkey', '-check',
+ '-in', "rsamptest-$name.pem", '-noout'])),
+ "rsa -check $name");
+ ok(run(app([ 'openssl', 'pkeyutl', '-inkey', "rsamptest-$name.pem",
+ '-encrypt', '-in', $cleartext,
+ '-out', "rsamptest-$name.enc" ])),
+ "rsa $name encrypt");
+ ok(run(app([ 'openssl', 'pkeyutl', '-inkey', "rsamptest-$name.pem",
+ '-decrypt', '-in', "rsamptest-$name.enc",
+ '-out', "rsamptest-$name.dec" ])),
+ "rsa $name decrypt");
+ } else {
+ ok(run(app([ 'openssl', 'genrsa', '-out', "rsamptest-$name.pem",
+ '-primes', $primes, $bits])), "genrsa $name");
+ ok(run(app([ 'openssl', 'rsa', '-check',
+ '-in', "rsamptest-$name.pem", '-noout'])),
+ "rsa -check $name");
+ if (!disabled('deprecated-3.0')) {
+ ok(run(app([ 'openssl', 'rsautl', '-inkey', "rsamptest-$name.pem",
+ '-encrypt', '-in', $cleartext,
+ '-out', "rsamptest-$name.enc" ])),
+ "rsa $name encrypt");
+ ok(run(app([ 'openssl', 'rsautl', '-inkey', "rsamptest-$name.pem",
+ '-decrypt', '-in', "rsamptest-$name.enc",
+ '-out', "rsamptest-$name.dec" ])),
+ "rsa $name decrypt");
+ } else {
+ ok(run(app([ 'openssl', 'pkeyutl', '-inkey', "rsamptest-$name.pem",
+ '-encrypt', '-in', $cleartext,
+ '-out', "rsamptest-$name.enc" ])),
+ "rsa $name encrypt");
+ ok(run(app([ 'openssl', 'pkeyutl', '-inkey', "rsamptest-$name.pem",
+ '-decrypt', '-in', "rsamptest-$name.enc",
+ '-out', "rsamptest-$name.dec" ])),
+ "rsa $name decrypt");
+ }
+ }
+ ok(check_msg("rsamptest-$name.dec"), "rsa $name check result");
+ }
+}
+
+sub check_msg {
+ my $decrypted = shift;
+ my $msg;
+ my $dec;
+
+ open(my $fh, "<", $cleartext) or return 0;
+ binmode $fh;
+ read($fh, $msg, 10240);
+ close $fh;
+ open($fh, "<", $decrypted ) or return 0;
+ binmode $fh;
+ read($fh, $dec, 10240);
+ close $fh;
+
+ if ($msg ne $dec) {
+ print STDERR "cleartext and decrypted are not the same";
+ return 0;
+ }
+ return 1;
+}
diff --git a/test/recipes/15-test_mp_rsa_data/plain_text b/test/recipes/15-test_mp_rsa_data/plain_text
new file mode 100644
index 000000000000..60d11c0f6914
--- /dev/null
+++ b/test/recipes/15-test_mp_rsa_data/plain_text
@@ -0,0 +1,4 @@
+It was the best of times, it was the worst of times,
+it was the age of wisdom, it was the age of foolishness,
+it was the epoch of belief, it was the epoch of incredulity,
+it was the season of Light, it was the season of Darkness.
diff --git a/test/recipes/15-test_mp_rsa_data/rsamplcm.pem b/test/recipes/15-test_mp_rsa_data/rsamplcm.pem
new file mode 100644
index 000000000000..3196ea063a86
--- /dev/null
+++ b/test/recipes/15-test_mp_rsa_data/rsamplcm.pem
@@ -0,0 +1,55 @@
+-----BEGIN PRIVATE KEY-----
+MIIJ3gIBADANBgkqhkiG9w0BAQEFAASCCcgwggnEAgEBAoICAQChMJM44ZMm2OQI
+eKTnSEFib0cmahfRV8Byh5fKbcliL8aHRx9IJskg72JRiFfwnsWCYfsrrNzSAY4B
+phPE4gZzdN45HTc32rvSzxImNBiIvhA3duzMmFwWBO9RBrNNZQZI3HJ/P3S0iNfV
+ZvJz75ClJaQOtXrF9yluBaoFW7spRfMQNXqvYqZXXYMfx8KiQ62FWPEmQOAYrArn
+PgB58LJKPAP2d2TwhEKGYjfi45zWAb4GUhCVYqXev/zQyW+oyvhcxlSSrtfmyFpU
+7q7crI8ZLz7DLelG2jx5Z83+IiOahIRtENma2Ct+2e0dnH+vrq6eVRiKaHnmBwrR
+oR9Oot13kSUhHsYekWDqZDkeAUNxCnoV9Op/I/vsON6fBXKa2N/sICRDihJGLdaN
+/Ust2z+Jrn1BBAVEaJVZeePiPJSb6JtVW66erhfkxhyLx17mTNF5v1VRK+M8ZdVt
+WUxNCisSCVi3aEVQ5hpcVmOgynR3f1rEDO4WuoOoq/CrE6ESr/2qvmetkXgpOnxQ
+s5XZlE5pbB7Xtfkc0rtEmy23RGywq5MzF0N088h7b3cN1i6rXWbAKwBeCXY9POK0
+lxPydRwsQsnS9W2qkMLMjIHXJlarpxKUtY+XWr0U9BL4x6qrNAMhSZUjTkUil8Y8
+PFYwVLmQNKj6tAM7Ab0IsQax4YszcQIDAQABAoIB/28iCS5bdr6XPY7+N3CvU6hI
+EiDK5PHFQDKqb/xRT0ImyEWBPOrEUwRvE8FJFdiSnxK9fL7fTZoMVVDMKv5GeV5u
+w5qPfqsPO7S9cu/ZbYGvRgOWHtbJMhvg7i5iOilbXQPLYWvJchQ6nV3NIHl6utcu
+SwRue0FGz+dhbIxZBYMB8z87PFxgBDKvLQgY6JspArGQL0U//5QmWF7H/JqJynfu
+WvH3GSy819y7S8XFXgQGytalUue8sa9am9ROBlFRy21HuoSZskKTmT5XB43lO18g
+jTYZBO8loHG5lihn0BbDfIehckhYMCz/qFJrdln/kCe+6kx78fhzixXOhQxANKnR
+dOHP2V5xsTix/Y3RvRL/yBGaPEDBIFMmFGDV8z7cAtF9gI+iSJUjR1dDNNoBgarc
+oCj99p+A0BV5AaJKeO7pumMHqNs1Xh+uZTyx2s4E9TeI2Yhf28AJS+h7bWnIIuua
+qe9ajptul2QuVlD05dqzZq+QjHhSpP1IbRQsosFYDwZDFklsaFMJ1gzmlNWGFGp1
+yDKmZhUCuYF0q8p5g4nixnVGcWe6wzPQv2tPrijKAX78als0HhjACoJXwVbohkPo
+4vhdUtIquUmZmGzlELMhEcjiqLCzOx01jhPiy3cHCxIkgjL7+sy2P/DNziOyFZPC
+m56Uif62o8CVDGcPN1ECgYEA+GJmtHmVQaoYXwR6l7aYFtuScMJuDZwLQ3hafV8W
+Fa7/it0F9UD+H0RC1Jn8vN55oeDD45Hw/9yxGUkdWYPh0gcMsl5PkOL5BVD62aM9
+wn2WZ2FqOdrZ0iZzXks7WC6gTWf4CNqIR6f8BfMoj6Xj81fq+KqSmuD9uqLWMPkL
+vzcCgYEAxRTNf1AbZhTmMkMIRO1oJbFzu4kW3tUG+MQFT3A3+dPxHn0fDkOmFkNe
+unrMPLCrJTDfNPBBQuI1NMTz9URoIcFoiyMqUvmwWLf1NlfXVJnA/SMeLsJuw749
+G5y4Tv+o8p8XeeH4/B8WKujqZeWD3l6y632GPqKNUQ1ilcv6kosCgYEA5GhInem4
+cVvjcW0C9wR4M3zS21JQNb+rM+42+Fc6TdJRN/csBW4wwbvZ4PuByISlQVEZkemg
+vwjI6sGrdaerP6Iv8M59SHUQHe1r4DsXDgTDDGoubulrqK6nJKz1849c5hGXqzya
+WZqGTUpfoEkip6HPd8ATdM01Ri173ikGvl0CgYBTj3Vt1H45cwUDLI62At7UlH+Y
+dRCgXDw/f4Us4EyrfWRPZAel2aLy74+bi3NLDDEUbLtGy9Mv049xl0xEosNwBHwZ
++kf4tGtDwoOSjf37ndFIwvoKI2ApWGC6c2FmBVoRvMiMYfZal6eje+veVkjqIMbF
+uAwSRIOcaQtyrfDI7wKBgBNLowhr4m5L+p2D2SMx/BEmBl04L+HNBWQ0Pf3/RTc3
+/vDwgI9wF6w4lG+gpKNwp+UGT8zdASzSxjo9aV2PgfXwqNap9hKfnyvvjUdF2WDm
+ysBOmjbbU+03UvVFJrRMxltN8cu+jfX4R6HdxiiPF2n/PzW7kcE+SbdcysSUmnJX
+MIIDHjCCAYsCgYEA+7KNCLZLbS/LtgxW6XHcysuudvnS5ivdXguxio8kUpmkhEaC
+JHgDgrDXTUBDK9VHqY/uUY9obWjYthWR+MmUJ+isQIyIdujFbFsgvO9YyuPoBvWw
+9PTPMk32GE9XfYhy866pE+UpON4dLkaZfU6POYTPafCN1KEQ/xVjF5LdI7UCgYEA
+jAyTsQ9N9NktboR7L7XtduHSl9z2XqB1skirZz+ypEtdYUSiUYx915BynEdvmMo5
+771oi/VR098NBnQGHvp696HdhqUroY5vm5UxKC+9plcd2hGHfyVgzMrYbjpnoi/0
+VmcPKUTPpRbiAcfCzBiUVRrzFi2FnZRpkqXh11IevikCgYANVNtUnTAYTUM2PKTX
+NSKgUF3idCans2yotCl6xkCm0NA5+pj+Lqd54yF54JNif7VdCLQQP7cBsGst93L9
+Gwk0vNbntpdfjprmsF6xerXmkzmyHROVWbHyavpaeoJpKBZdgh/HcFaP1n6BkI70
+Kqn5H3HVhb623tXPNAGRcuRShDCCAYsCgYEA23ytxzFECsxJR+48k+1B4RRb8mS3
+dTDPm/+hwWDOAGSouv5iHtlCbzHtJJZHAXrJe9zXE6t0G5u6GUsB/SkIMo++pj0P
+48Ol/vXUJP4mPJXUrWMJGndEUQwlygmm1CkN6+CLCYvfU//gS06ePqqagipL41nk
+6NTLchQfhAh31DECgYAwOtBw4emCuessbDRRiSQd0nx14h3SGZy1OdIQjTYXLgdJ
+t9ZV0wXfK0hh7sfBknqtxhRY1ScZXfnhzvKr75VGjwGkw+w272oNgXVRf6tlSsNG
+Kmn4r9aKPLIdGEvZeP//IgNLYLn9Wk+uHKN3P8Pd8G9mkP1VEFV4RuW5/KZgMQKB
+gQCRkPn1I58UdGpQf5HzOLsZYWfsoj1RlYUULVCynM9V1FD6uiVeS3VlXNUXAZZj
+wQGJF3jx1/xnG5kIpcORq+5t3Oz+Qe6KAOmLyu0R9AUrlreTtHLBFBFLyjXJ/p+O
+BiCxZMc6HI7nc0pY8bdcKv/vw7mKRGNuuiZ7+KvWLAX9Pg==
+-----END PRIVATE KEY-----
diff --git a/test/recipes/15-test_out_option.t b/test/recipes/15-test_out_option.t
new file mode 100644
index 000000000000..4e0aa46e8ecf
--- /dev/null
+++ b/test/recipes/15-test_out_option.t
@@ -0,0 +1,73 @@
+#! /usr/bin/env perl
+# Copyright 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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_out_option");
+
+plan tests => 4;
+
+# Test 1
+SKIP: {
+ # Paths that should generate failure when trying to write to them.
+ # Directories are a safe bet for failure on most platforms.
+ # Notably, this isn't true on OpenVMS, as a default file name is
+ # appended under the hood when trying to "write" to a directory spec.
+ # From observation, that file is '.' (i.e. a file with no file name
+ # and no extension), so '[]' gets translated to '[].'
+ skip 'Directories become writable files on OpenVMS', 1 if $^O eq 'VMS';
+
+ # Note that directories must end with a slash here, because of how
+ # File::Spec massages them into directory specs on some platforms.
+ my $path = File::Spec->canonpath('./');
+ ok(!run(app([ 'openssl', 'rand', '-out', $path, '1'])),
+ "invalid output path: $path");
+}
+
+# Test 2
+{
+ my $path = File::Spec->canonpath('randomname.bin');
+ ok(run(app([ 'openssl', 'rand', '-out', $path, '1'])),
+ "valid output path: $path");
+}
+
+# Test 3
+{
+ # Test for trying to create a file in a non-exist directory
+ my $rand_path = "";
+ do {
+ my @chars = ("A".."Z", "a".."z", "0".."9");
+ $rand_path .= $chars[rand @chars] for 1..32;
+ } while (-d File::Spec->catdir('.', $rand_path));
+ $rand_path .= "/randomname.bin";
+
+ my $path = File::Spec->canonpath($rand_path);
+ ok(!run(app([ 'openssl', 'rand', '-out', $path, '1'])),
+ "invalid output path: $path");
+}
+
+# Test 4
+SKIP: {
+ skip "It's not safe to use perl's idea of the NULL device in an explicitly cross compiled build", 1
+ unless (config('CROSS_COMPILE') // '') eq '';
+
+ my $path = File::Spec->canonpath(File::Spec->devnull());
+ ok(run(app([ 'openssl', 'rand', '-out', $path, '1'])),
+ "valid output path: $path");
+}
+
+# Cleanup
+END {
+ unlink 'randomname.bin' if -f 'randomname.bin';
+}
diff --git a/test/recipes/15-test_rsa.t b/test/recipes/15-test_rsa.t
new file mode 100644
index 000000000000..420a57f8c10d
--- /dev/null
+++ b/test/recipes/15-test_rsa.t
@@ -0,0 +1,74 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_rsa");
+
+plan tests => 12;
+
+require_ok(srctop_file('test', 'recipes', 'tconversion.pl'));
+
+ok(run(test(["rsa_test"])), "running rsatest");
+
+run_rsa_tests("pkey");
+
+run_rsa_tests("rsa");
+
+sub run_rsa_tests {
+ my $cmd = shift;
+
+ ok(run(app([ 'openssl', $cmd, '-check', '-in', srctop_file('test', 'testrsa.pem'), '-noout'])),
+ "$cmd -check" );
+
+ SKIP: {
+ skip "Skipping $cmd conversion test", 3
+ if disabled("rsa");
+
+ subtest "$cmd conversions -- private key" => sub {
+ tconversion( -type => $cmd, -prefix => "$cmd-priv",
+ -in => srctop_file("test", "testrsa.pem") );
+ };
+ subtest "$cmd conversions -- private key PKCS#8" => sub {
+ tconversion( -type => $cmd, -prefix => "$cmd-pkcs8",
+ -in => srctop_file("test", "testrsa.pem"),
+ -args => ["pkey"] );
+ };
+ }
+
+ SKIP: {
+ skip "Skipping msblob conversion test", 1
+ if disabled($cmd) || $cmd eq 'pkey';
+
+ subtest "$cmd conversions -- public key" => sub {
+ tconversion( -type => 'msb', -prefix => "$cmd-msb-pub",
+ -in => srctop_file("test", "testrsapub.pem"),
+ -args => ["rsa", "-pubin", "-pubout"] );
+ };
+ }
+ SKIP: {
+ skip "Skipping PVK conversion test", 1
+ if disabled($cmd) || $cmd eq 'pkey' || disabled("rc4")
+ || disabled ("legacy");
+
+ subtest "$cmd conversions -- private key" => sub {
+ tconversion( -type => 'pvk', -prefix => "$cmd-pvk",
+ -in => srctop_file("test", "testrsa.pem"),
+ -args => ["rsa", "-passin", "pass:testpass",
+ "-passout", "pass:testpass",
+ "-provider", "default",
+ "-provider", "legacy"] );
+ };
+ }
+}
diff --git a/test/recipes/15-test_rsaoaep.t b/test/recipes/15-test_rsaoaep.t
new file mode 100644
index 000000000000..5618d5e2bc17
--- /dev/null
+++ b/test/recipes/15-test_rsaoaep.t
@@ -0,0 +1,161 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT data_file bldtop_dir srctop_file srctop_dir bldtop_file);
+use OpenSSL::Test::Utils;
+use File::Compare qw/compare_text/;
+
+BEGIN {
+ setup("test_rsaoaep");
+}
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_check = disabled('fips-securitychecks');
+
+plan tests =>
+ ($no_check ? 0 : 1) # FIPS security check
+ + 9;
+
+my @prov = ( );
+my $provconf = srctop_file("test", "fips-and-base.cnf");
+my $provpath = bldtop_dir("providers");
+my $msg_file = data_file("plain_text");
+my $enc1_file = "enc1.bin";
+my $enc2_file = "enc2.bin";
+my $enc3_file = "enc3.bin";
+my $dec1_file = "dec1.txt";
+my $dec2_file = "dec2.txt";
+my $dec3_file = "dec3.txt";
+my $key_file = srctop_file("test", "testrsa2048.pem");
+my $small_key_file = srctop_file("test", "testrsa.pem");
+
+$ENV{OPENSSL_TEST_LIBCTX} = "1";
+
+unless ($no_check) {
+ @prov = ( "-provider-path", $provpath, "-config", $provconf );
+ ok(!run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-encrypt',
+ '-in', $msg_file,
+ '-inkey', $small_key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-pkeyopt', 'digest:sha1',
+ '-pkeyopt', 'mgf1-digest:sha1',
+ '-out', $enc1_file])),
+ "RSA OAEP Encryption with a key smaller than 2048 in fips mode should fail");
+}
+
+ok(run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-encrypt',
+ '-in', $msg_file,
+ '-inkey', $key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-pkeyopt', 'digest:sha1',
+ '-pkeyopt', 'mgf1-digest:sha1',
+ '-out', $enc1_file])),
+ "RSA OAEP Encryption");
+
+ok(!run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-encrypt',
+ '-in', $key_file,
+ '-inkey', $key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-pkeyopt', 'digest:sha256',
+ '-pkeyopt', 'mgf1-digest:sha1'])),
+ "RSA OAEP Encryption should fail if the message is larger than the rsa modulus");
+
+ok(run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-decrypt',
+ '-inkey', $key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-pkeyopt', 'digest:sha1',
+ '-pkeyopt', 'mgf1-digest:sha1',
+ '-in', $enc1_file,
+ '-out', $dec1_file]))
+ && compare_text($dec1_file, $msg_file) == 0,
+ "RSA OAEP Decryption");
+
+ok(!run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-decrypt',
+ '-inkey', $key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-pkeyopt', 'digest:sha256',
+ '-pkeyopt', 'mgf1-digest:sha224',
+ '-in', $enc1_file])),
+ "Incorrect digest for RSA OAEP Decryption");
+
+ok(!run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-decrypt',
+ '-inkey', $key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-pkeyopt', 'digest:sha1',
+ '-pkeyopt', 'mgf1-digest:sha224',
+ '-in', $enc1_file])),
+ "Incorrect mgf1-digest for RSA OAEP Decryption");
+
+ok(run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-encrypt',
+ '-in', $msg_file,
+ '-inkey', $key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-pkeyopt', 'digest:sha1',
+ '-pkeyopt', 'mgf1-digest:sha1',
+ '-out', $enc2_file]))
+ && compare_text($enc2_file, $enc1_file) != 0,
+ "RSA OAEP Encryption should generate different encrypted data");
+
+ok(run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-decrypt',
+ '-inkey', $key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-in', $enc2_file,
+ '-out', $dec2_file]))
+ && compare_text($dec2_file, $msg_file) == 0,
+ "RSA OAEP Decryption with default digests");
+
+ok(run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-encrypt',
+ '-in', $msg_file,
+ '-inkey', $key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-out', $enc3_file])),
+ "RSA OAEP Encryption with default digests");
+
+ok(run(app(['openssl', 'pkeyutl',
+ @prov,
+ '-decrypt',
+ '-inkey', $key_file,
+ '-pkeyopt', 'pad-mode:oaep',
+ '-pkeyopt', 'oaep-label:123',
+ '-pkeyopt', 'digest:sha1',
+ '-pkeyopt', 'mgf1-digest:sha1',
+ '-in', $enc3_file,
+ '-out', $dec3_file]))
+ && compare_text($dec3_file, $msg_file) == 0,
+ "RSA OAEP Decryption with explicit default digests");
diff --git a/test/recipes/15-test_rsaoaep_data/plain_text b/test/recipes/15-test_rsaoaep_data/plain_text
new file mode 100644
index 000000000000..802992c4220d
--- /dev/null
+++ b/test/recipes/15-test_rsaoaep_data/plain_text
@@ -0,0 +1 @@
+Hello world
diff --git a/test/recipes/15-test_rsapss.t b/test/recipes/15-test_rsapss.t
new file mode 100644
index 000000000000..44721a32372f
--- /dev/null
+++ b/test/recipes/15-test_rsapss.t
@@ -0,0 +1,99 @@
+#! /usr/bin/env perl
+# Copyright 2017-2023 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT with srctop_file data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_rsapss");
+
+plan tests => 13;
+
+#using test/testrsa.pem which happens to be a 512 bit RSA
+ok(run(app(['openssl', 'dgst', '-sign', srctop_file('test', 'testrsa.pem'), '-sha1',
+ '-sigopt', 'rsa_padding_mode:pss',
+ '-sigopt', 'rsa_pss_saltlen:max',
+ '-sigopt', 'rsa_mgf1_md:sha512',
+ '-out', 'testrsapss-restricted.sig',
+ srctop_file('test', 'testrsa.pem')])),
+ "openssl dgst -sign [plain RSA key, PSS padding mode, PSS restrictions]");
+
+ok(run(app(['openssl', 'dgst', '-sign', srctop_file('test', 'testrsa.pem'), '-sha1',
+ '-sigopt', 'rsa_padding_mode:pss',
+ '-out', 'testrsapss-unrestricted.sig',
+ srctop_file('test', 'testrsa.pem')])),
+ "openssl dgst -sign [plain RSA key, PSS padding mode, no PSS restrictions]");
+
+ok(!run(app(['openssl', 'dgst', '-sign', srctop_file('test', 'testrsa.pem'), '-sha512',
+ '-sigopt', 'rsa_padding_mode:pss', '-sigopt', 'rsa_pss_saltlen:max',
+ '-sigopt', 'rsa_mgf1_md:sha512', srctop_file('test', 'testrsa.pem')])),
+ "openssl dgst -sign, expect to fail gracefully");
+
+ok(!run(app(['openssl', 'dgst', '-sign', srctop_file('test', 'testrsa.pem'), '-sha512',
+ '-sigopt', 'rsa_padding_mode:pss', '-sigopt', 'rsa_pss_saltlen:2147483647',
+ '-sigopt', 'rsa_mgf1_md:sha1', srctop_file('test', 'testrsa.pem')])),
+ "openssl dgst -sign, expect to fail gracefully");
+
+ok(!run(app(['openssl', 'dgst', '-prverify', srctop_file('test', 'testrsa.pem'), '-sha512',
+ '-sigopt', 'rsa_padding_mode:pss', '-sigopt', 'rsa_pss_saltlen:max',
+ '-sigopt', 'rsa_mgf1_md:sha512', '-signature', 'testrsapss.sig',
+ srctop_file('test', 'testrsa.pem')])),
+ "openssl dgst -prverify, expect to fail gracefully");
+
+ok(run(app(['openssl', 'dgst', '-prverify', srctop_file('test', 'testrsa.pem'),
+ '-sha1',
+ '-sigopt', 'rsa_padding_mode:pss',
+ '-sigopt', 'rsa_pss_saltlen:max',
+ '-sigopt', 'rsa_mgf1_md:sha512',
+ '-signature', 'testrsapss-restricted.sig',
+ srctop_file('test', 'testrsa.pem')])),
+ "openssl dgst -prverify [plain RSA key, PSS padding mode, PSS restrictions]");
+
+ok(run(app(['openssl', 'dgst', '-prverify', srctop_file('test', 'testrsa.pem'),
+ '-sha1',
+ '-sigopt', 'rsa_padding_mode:pss',
+ '-sigopt', 'rsa_pss_saltlen:42',
+ '-sigopt', 'rsa_mgf1_md:sha512',
+ '-signature', 'testrsapss-restricted.sig',
+ srctop_file('test', 'testrsa.pem')])),
+ "openssl dgst -sign rsa512bit.pem -sha1 -sigopt rsa_pss_saltlen:max produces 42 bits of PSS salt");
+
+ok(run(app(['openssl', 'dgst', '-prverify', srctop_file('test', 'testrsa.pem'),
+ '-sha1',
+ '-sigopt', 'rsa_padding_mode:pss',
+ '-signature', 'testrsapss-unrestricted.sig',
+ srctop_file('test', 'testrsa.pem')])),
+ "openssl dgst -prverify [plain RSA key, PSS padding mode, no PSS restrictions]");
+
+# Test that RSA-PSS keys are supported by genpkey and rsa commands.
+{
+ my $rsapss = "rsapss.key";
+ ok(run(app(['openssl', 'genpkey', '-algorithm', 'RSA-PSS',
+ '-pkeyopt', 'rsa_keygen_bits:1024',
+ '-pkeyopt', 'rsa_keygen_pubexp:65537',
+ '-pkeyopt', 'rsa_keygen_primes:2',
+ '--out', $rsapss])));
+ ok(run(app(['openssl', 'rsa', '-check',
+ '-in', $rsapss])));
+}
+
+ok(!run(app([ 'openssl', 'rsa',
+ '-in' => data_file('negativesaltlen.pem')],
+ '-out' => 'badout')));
+
+ok(run(app(['openssl', 'genpkey', '-algorithm', 'RSA-PSS', '-pkeyopt', 'rsa_keygen_bits:1024',
+ '-pkeyopt', 'rsa_pss_keygen_md:SHA256', '-pkeyopt', 'rsa_pss_keygen_saltlen:10',
+ '-out', 'testrsapss.pem'])),
+ "openssl genpkey RSA-PSS with pss parameters");
+ok(run(app(['openssl', 'pkey', '-in', 'testrsapss.pem', '-pubout', '-text'])),
+ "openssl pkey, execute rsa_pub_encode with pss parameters");
+unlink 'testrsapss.pem';
diff --git a/test/recipes/15-test_rsapss_data/negativesaltlen.pem b/test/recipes/15-test_rsapss_data/negativesaltlen.pem
new file mode 100644
index 000000000000..60cffe458f71
--- /dev/null
+++ b/test/recipes/15-test_rsapss_data/negativesaltlen.pem
@@ -0,0 +1,29 @@
+-----BEGIN PRIVATE KEY-----
+MIIE7gIB0DA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCA6EaMBgGCSqGSIb3
+DQEBCDALBglghkgBZQMEAgOiAwIB6ASCBKgwggSkAgEAAoIBAQDdiLMYj8fgrXKB
+dEC704hcfmeJebCyaZbYHBE/1YthJOptbhisBbNk4onKMITO6hkYOoH12rNxqwY5
+d9J1Ray6SJETVHxYCKftJ1LlrUJGqpyRCAAff1LYjjGRyqcMzVItWffy2iCgKGud
+uUqs9Og3wsVxUeXfTSGnLo1UevVc1qTKZJuDRWD2EItuwnFt7GA89IgGx8/liLsg
+cdlnm81gGdDmNKxNGi3VeOaJqFWnP9CpL8iXybG7F32U9mgEdE+EYt8GhQfNLzjL
+j17xfLl5K0SMqL8q+phas6Md0OmTl3Xg8Tupdoo/okAoYGXrv/sHDiV1YBSkXD4i
+dbV42aUfAgMBAAECggEAEyEJrfZEYR85Avqh2FYksS/tCs7qNg2uC80opCVxWbsQ
+bxCRqtD3M5/oHABih2dpcVEkBbGzyv3klLPHBX9VseQwOsYR0pw0u+KoYtK6JVX4
+HQHe2Nlqsu5cU2V3VUCpducM5Ph21r2GxWDJlPO01ZPI7scOnWCQpln7tC7F3xU0
+jNQ0SnFZ6SO4FrrBxOMjnIFiNMexxZt0fU7khy/dGck9aN4DtmQENcQkGdXj5xRv
+lInh92mQ16yMCbEU8cslWaAwqRF/k/5QxoIwTXr8PqaWshH9TIAht0rvTilWpHPg
+zpW6Pog/wGzVat3NeU3vBDYIUayHc6n3gbfJZDNxmQKBgQD41lAkxNsA89mYY7S9
+5NkDJ1N1hKNwg+iEyCZJkjxUk+SymdO7U/iD27Hgn/XyXm4RC5aHYpXJSnuiOk7R
+Z1Az1jjqLzPxsP72sWLORzGq82smYrK+iV2rhozWNlfVyazDkBcRRz2bLSESzgvO
+JWD3K3pjvj8U9ZSUhz+zXo4sUwKBgQDj6TBTKGDb8Au8sUOC916GrIrUEq5SkMDT
+A4CiD4fmvbdNs90AhD/mmqBw/dP3TbCPNmP8tGMUT0BDev6BoRKYOt+1XGYXt2de
+P38teVU/ZUcAO2RGdMNSdWT5o9BCWQZ18qSoOR/QanckOnkhKCgU/wqSdIvBBRMQ
+5e4qdI0qhQKBgB2MJTxYfADi88WaoU2jLPmo48oik926bBPISHOX/73zScbDaVbn
+I61UmwyXMfczq1Iu1BMDa9HZHFEpJ07KO8XL/DoinMJoR/43Fgp0fbtU6DZIpfzm
+Bs9lTLfrAAcMyYz3QSX2FaSleTXobZJu8dKnwQKzBn6QorH4VWIRKkStAoGBAIYL
+M1nlaLpSf4S2OT/A376Ton9CkXaMHmy9JZ2rRsHmGPZBcB0Kq06k6PIrx8wuzEYe
+tkX9jjx2tBQ8NY3mPzp7ffF766vNOaWL8O+86e+EUHMJe1uY9vv7gaz1tNog5BTg
+5gjuuBBrXbFYFr/yj0hyDDTBCSU4J9OLeD1OGWzFAoGBAMGc9h8oLyA3rQEjIuVA
+CuzgvZxOFPbtODFPcL4EQgAKLiKS+oZK0jONfCHaQB1AhIq8/nT/4suw7tWqYoKp
+KGH/+8tKNodKZfZLjVp0k8gsehyMDz1002/RLMJyFRIJWa1BqEJs7v7XgWW3RcmC
+PWznhdpNx3BYDSao5Ibl7I5E
+-----END PRIVATE KEY-----
diff --git a/test/recipes/15-test_sha.t b/test/recipes/15-test_sha.t
new file mode 100644
index 000000000000..3ef2c0fd89a1
--- /dev/null
+++ b/test/recipes/15-test_sha.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_sha", "sha_test");
diff --git a/test/recipes/20-test_app.t b/test/recipes/20-test_app.t
new file mode 100644
index 000000000000..be79b3775009
--- /dev/null
+++ b/test/recipes/20-test_app.t
@@ -0,0 +1,31 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+
+setup("test_app");
+
+plan tests => 5;
+
+ok(run(app(["openssl"])),
+ "Run openssl app with no args");
+
+ok(run(app(["openssl", "help"])),
+ "Run openssl app with help");
+
+ok(!run(app(["openssl", "-wrong"])),
+ "Run openssl app with incorrect arg");
+
+ok(run(app(["openssl", "-help"])),
+ "Run openssl app with -help");
+
+ok(run(app(["openssl", "--help"])),
+ "Run openssl app with --help");
diff --git a/test/recipes/20-test_cli_fips.t b/test/recipes/20-test_cli_fips.t
new file mode 100644
index 000000000000..d4b4d4ca51c6
--- /dev/null
+++ b/test/recipes/20-test_cli_fips.t
@@ -0,0 +1,405 @@
+#! /usr/bin/env perl
+# Copyright 2020-2023 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
+
+use strict;
+use warnings;
+
+use File::Spec;
+use File::Spec::Functions qw/curdir abs2rel/;
+use File::Copy;
+use OpenSSL::Glob;
+use OpenSSL::Test qw/:DEFAULT srctop_dir bldtop_dir bldtop_file srctop_file data_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_cli_fips");
+}
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+use platform;
+
+my $no_check = disabled("fips") || disabled('fips-securitychecks');
+plan skip_all => "Test only supported in a fips build with security checks"
+ if $no_check;
+plan tests => 11;
+
+my $fipsmodule = bldtop_file('providers', platform->dso('fips'));
+my $fipsconf = srctop_file("test", "fips-and-base.cnf");
+my $defaultconf = srctop_file("test", "default.cnf");
+my $tbs_data = $fipsmodule;
+my $bogus_data = $fipsconf;
+
+$ENV{OPENSSL_CONF} = $fipsconf;
+
+ok(run(app(['openssl', 'list', '-public-key-methods', '-verbose'])),
+ "provider listing of public key methods");
+ok(run(app(['openssl', 'list', '-public-key-algorithms', '-verbose'])),
+ "provider listing of public key algorithms");
+ok(run(app(['openssl', 'list', '-key-managers', '-verbose'])),
+ "provider listing of keymanagers");
+ok(run(app(['openssl', 'list', '-key-exchange-algorithms', '-verbose'])),
+ "provider listing of key exchange algorithms");
+ok(run(app(['openssl', 'list', '-kem-algorithms', '-verbose'])),
+ "provider listing of key encapsulation algorithms");
+ok(run(app(['openssl', 'list', '-signature-algorithms', '-verbose'])),
+ "provider listing of signature algorithms");
+ok(run(app(['openssl', 'list', '-asymcipher-algorithms', '-verbose'])),
+ "provider listing of encryption algorithms");
+ok(run(app(['openssl', 'list', '-key-managers', '-verbose', '-select', 'DSA' ])),
+ "provider listing of one item in the keymanager");
+
+sub pubfrompriv {
+ my $prefix = shift;
+ my $key = shift;
+ my $pub_key = shift;
+ my $type = shift;
+
+ ok(run(app(['openssl', 'pkey',
+ '-in', $key,
+ '-pubout',
+ '-out', $pub_key])),
+ $prefix.': '."Create the public key with $type parameters");
+
+}
+
+my $tsignverify_count = 9;
+sub tsignverify {
+ my $prefix = shift;
+ my $fips_key = shift;
+ my $fips_pub_key = shift;
+ my $nonfips_key = shift;
+ my $nonfips_pub_key = shift;
+ my $fips_sigfile = $prefix.'.fips.sig';
+ my $nonfips_sigfile = $prefix.'.nonfips.sig';
+ my $sigfile = '';
+ my $testtext = '';
+
+ $ENV{OPENSSL_CONF} = $fipsconf;
+
+ $sigfile = $fips_sigfile;
+ $testtext = $prefix.': '.
+ 'Sign something with a FIPS key';
+ ok(run(app(['openssl', 'dgst', '-sha256',
+ '-sign', $fips_key,
+ '-out', $sigfile,
+ $tbs_data])),
+ $testtext);
+
+ $testtext = $prefix.': '.
+ 'Verify something with a FIPS key';
+ ok(run(app(['openssl', 'dgst', '-sha256',
+ '-verify', $fips_pub_key,
+ '-signature', $sigfile,
+ $tbs_data])),
+ $testtext);
+
+ $testtext = $prefix.': '.
+ 'Verify a valid signature against the wrong data with a FIPS key'.
+ ' (should fail)';
+ ok(!run(app(['openssl', 'dgst', '-sha256',
+ '-verify', $fips_pub_key,
+ '-signature', $sigfile,
+ $bogus_data])),
+ $testtext);
+
+ $ENV{OPENSSL_CONF} = $defaultconf;
+
+ SKIP : {
+ skip "FIPS failure testing", 6
+ if ($nonfips_key eq '');
+
+ $sigfile = $nonfips_sigfile;
+ $testtext = $prefix.': '.
+ 'Sign something with a non-FIPS key'.
+ ' with the default provider';
+ ok(run(app(['openssl', 'dgst', '-sha256',
+ '-sign', $nonfips_key,
+ '-out', $sigfile,
+ $tbs_data])),
+ $testtext);
+
+ $testtext = $prefix.': '.
+ 'Verify something with a non-FIPS key'.
+ ' with the default provider';
+ ok(run(app(['openssl', 'dgst', '-sha256',
+ '-verify', $nonfips_pub_key,
+ '-signature', $sigfile,
+ $tbs_data])),
+ $testtext);
+
+ $ENV{OPENSSL_CONF} = $fipsconf;
+
+ $testtext = $prefix.': '.
+ 'Sign something with a non-FIPS key'.
+ ' (should fail)';
+ ok(!run(app(['openssl', 'dgst', '-sha256',
+ '-sign', $nonfips_key,
+ '-out', $prefix.'.nonfips.fail.sig',
+ $tbs_data])),
+ $testtext);
+
+ $testtext = $prefix.': '.
+ 'Verify something with a non-FIPS key'.
+ ' (should fail)';
+ ok(!run(app(['openssl', 'dgst', '-sha256',
+ '-verify', $nonfips_pub_key,
+ '-signature', $sigfile,
+ $tbs_data])),
+ $testtext);
+
+ $testtext = $prefix.': '.
+ 'Verify something with a non-FIPS key'.
+ ' in FIPS mode but with a non-FIPS property query';
+ ok(run(app(['openssl', 'dgst',
+ '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '-sha256',
+ '-verify', $nonfips_pub_key,
+ '-signature', $sigfile,
+ $tbs_data])),
+ $testtext);
+
+ $testtext = $prefix.': '.
+ 'Verify a valid signature against the wrong data with a non-FIPS key'.
+ ' (should fail)';
+ ok(!run(app(['openssl', 'dgst', '-sha256',
+ '-verify', $nonfips_pub_key,
+ '-signature', $sigfile,
+ $bogus_data])),
+ $testtext);
+ }
+}
+
+SKIP : {
+ skip "FIPS EC tests because of no ec in this build", 1
+ if disabled("ec");
+
+ subtest EC => sub {
+ my $testtext_prefix = 'EC';
+ my $a_fips_curve = 'prime256v1';
+ my $fips_key = $testtext_prefix.'.fips.priv.pem';
+ my $fips_pub_key = $testtext_prefix.'.fips.pub.pem';
+ my $a_nonfips_curve = 'brainpoolP256r1';
+ my $nonfips_key = $testtext_prefix.'.nonfips.priv.pem';
+ my $nonfips_pub_key = $testtext_prefix.'.nonfips.pub.pem';
+ my $testtext = '';
+ my $curvename = '';
+
+ plan tests => 5 + $tsignverify_count;
+
+ $ENV{OPENSSL_CONF} = $defaultconf;
+ $curvename = $a_nonfips_curve;
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with a non-FIPS algorithm with the default provider';
+ ok(run(app(['openssl', 'genpkey', '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-out', $nonfips_key])),
+ $testtext);
+
+ pubfrompriv($testtext_prefix, $nonfips_key, $nonfips_pub_key, "non-FIPS");
+
+ $ENV{OPENSSL_CONF} = $fipsconf;
+
+ $curvename = $a_fips_curve;
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with a FIPS algorithm';
+ ok(run(app(['openssl', 'genpkey', '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-out', $fips_key])),
+ $testtext);
+
+ pubfrompriv($testtext_prefix, $fips_key, $fips_pub_key, "FIPS");
+
+ $curvename = $a_nonfips_curve;
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with a non-FIPS algorithm'.
+ ' (should fail)';
+ ok(!run(app(['openssl', 'genpkey', '-algorithm', 'EC',
+ '-pkeyopt', 'ec_paramgen_curve:'.$curvename,
+ '-out', $testtext_prefix.'.'.$curvename.'.priv.pem'])),
+ $testtext);
+
+ tsignverify($testtext_prefix, $fips_key, $fips_pub_key, $nonfips_key,
+ $nonfips_pub_key);
+ };
+}
+
+SKIP: {
+ skip "FIPS RSA tests because of no rsa in this build", 1
+ if disabled("rsa");
+
+ subtest RSA => sub {
+ my $testtext_prefix = 'RSA';
+ my $fips_key = $testtext_prefix.'.fips.priv.pem';
+ my $fips_pub_key = $testtext_prefix.'.fips.pub.pem';
+ my $nonfips_key = $testtext_prefix.'.nonfips.priv.pem';
+ my $nonfips_pub_key = $testtext_prefix.'.nonfips.pub.pem';
+ my $testtext = '';
+
+ plan tests => 5 + $tsignverify_count;
+
+ $ENV{OPENSSL_CONF} = $defaultconf;
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with a non-FIPS algorithm with the default provider';
+ ok(run(app(['openssl', 'genpkey', '-algorithm', 'RSA',
+ '-pkeyopt', 'rsa_keygen_bits:512',
+ '-out', $nonfips_key])),
+ $testtext);
+
+ pubfrompriv($testtext_prefix, $nonfips_key, $nonfips_pub_key, "non-FIPS");
+
+ $ENV{OPENSSL_CONF} = $fipsconf;
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with a FIPS algorithm';
+ ok(run(app(['openssl', 'genpkey', '-algorithm', 'RSA',
+ '-pkeyopt', 'rsa_keygen_bits:2048',
+ '-out', $fips_key])),
+ $testtext);
+
+ pubfrompriv($testtext_prefix, $fips_key, $fips_pub_key, "FIPS");
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with a non-FIPS algorithm'.
+ ' (should fail)';
+ ok(!run(app(['openssl', 'genpkey', '-algorithm', 'RSA',
+ '-pkeyopt', 'rsa_keygen_bits:512',
+ '-out', $testtext_prefix.'.fail.priv.pem'])),
+ $testtext);
+
+ tsignverify($testtext_prefix, $fips_key, $fips_pub_key, $nonfips_key,
+ $nonfips_pub_key);
+ };
+}
+
+SKIP : {
+ skip "FIPS DSA tests because of no dsa in this build", 1
+ if disabled("dsa");
+
+ subtest DSA => sub {
+ my $testtext_prefix = 'DSA';
+ my $fips_key = $testtext_prefix.'.fips.priv.pem';
+ my $fips_pub_key = $testtext_prefix.'.fips.pub.pem';
+ my $nonfips_key = $testtext_prefix.'.nonfips.priv.pem';
+ my $nonfips_pub_key = $testtext_prefix.'.nonfips.pub.pem';
+ my $testtext = '';
+ my $fips_param = $testtext_prefix.'.fips.param.pem';
+ my $nonfips_param = $testtext_prefix.'.nonfips.param.pem';
+ my $shortnonfips_param = $testtext_prefix.'.shortnonfips.param.pem';
+
+ plan tests => 13 + $tsignverify_count;
+
+ $ENV{OPENSSL_CONF} = $defaultconf;
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate non-FIPS params with the default provider';
+ ok(run(app(['openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'type:fips186_2',
+ '-pkeyopt', 'dsa_paramgen_bits:512',
+ '-out', $nonfips_param])),
+ $testtext);
+
+ $ENV{OPENSSL_CONF} = $fipsconf;
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate FIPS params';
+ ok(run(app(['openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'dsa_paramgen_bits:2048',
+ '-out', $fips_param])),
+ $testtext);
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate non-FIPS params'.
+ ' (should fail)';
+ ok(!run(app(['openssl', 'genpkey', '-genparam',
+ '-algorithm', 'DSA',
+ '-pkeyopt', 'dsa_paramgen_bits:512',
+ '-out', $testtext_prefix.'.fail.param.pem'])),
+ $testtext);
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate non-FIPS params using non-FIPS property query'.
+ ' (dsaparam)';
+ ok(run(app(['openssl', 'dsaparam', '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '-out', $shortnonfips_param, '1024'])),
+ $testtext);
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate non-FIPS params using non-FIPS property query'.
+ ' (genpkey)';
+ ok(run(app(['openssl', 'genpkey', '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '-genparam', '-algorithm', 'DSA',
+ '-pkeyopt', 'dsa_paramgen_bits:512'])),
+ $testtext);
+
+ $ENV{OPENSSL_CONF} = $defaultconf;
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with non-FIPS params with the default provider';
+ ok(run(app(['openssl', 'genpkey',
+ '-paramfile', $nonfips_param,
+ '-pkeyopt', 'type:fips186_2',
+ '-out', $nonfips_key])),
+ $testtext);
+
+ pubfrompriv($testtext_prefix, $nonfips_key, $nonfips_pub_key, "non-FIPS");
+
+ $ENV{OPENSSL_CONF} = $fipsconf;
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with FIPS parameters';
+ ok(run(app(['openssl', 'genpkey',
+ '-paramfile', $fips_param,
+ '-pkeyopt', 'type:fips186_4',
+ '-out', $fips_key])),
+ $testtext);
+
+ pubfrompriv($testtext_prefix, $fips_key, $fips_pub_key, "FIPS");
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with non-FIPS parameters'.
+ ' (should fail)';
+ ok(!run(app(['openssl', 'genpkey',
+ '-paramfile', $nonfips_param,
+ '-pkeyopt', 'type:fips186_2',
+ '-out', $testtext_prefix.'.fail.priv.pem'])),
+ $testtext);
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with non-FIPS parameters using non-FIPS property'.
+ ' query (dsaparam)';
+ ok(run(app(['openssl', 'dsaparam', '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '-noout', '-genkey', '1024'])),
+ $testtext);
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with non-FIPS parameters using non-FIPS property'.
+ ' query (gendsa)';
+ ok(run(app(['openssl', 'gendsa', '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ $shortnonfips_param])),
+ $testtext);
+
+ $testtext = $testtext_prefix.': '.
+ 'Generate a key with non-FIPS parameters using non-FIPS property'.
+ ' query (genpkey)';
+ ok(run(app(['openssl', 'genpkey', '-provider', 'default',
+ '-propquery', '?fips!=yes',
+ '-paramfile', $nonfips_param,
+ '-pkeyopt', 'type:fips186_2',
+ '-out', $testtext_prefix.'.fail.priv.pem'])),
+ $testtext);
+
+ tsignverify($testtext_prefix, $fips_key, $fips_pub_key, '', '');
+ };
+}
diff --git a/test/recipes/20-test_dgst.t b/test/recipes/20-test_dgst.t
new file mode 100644
index 000000000000..96744b3741fa
--- /dev/null
+++ b/test/recipes/20-test_dgst.t
@@ -0,0 +1,249 @@
+#! /usr/bin/env perl
+# Copyright 2017-2022 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use File::Basename;
+use OpenSSL::Test qw/:DEFAULT with srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+setup("test_dgst");
+
+plan tests => 13;
+
+sub tsignverify {
+ my $testtext = shift;
+ my $privkey = shift;
+ my $pubkey = shift;
+
+ my $data_to_sign = srctop_file('test', 'data.bin');
+ my $other_data = srctop_file('test', 'data2.bin');
+
+ my $sigfile = basename($privkey, '.pem') . '.sig';
+ plan tests => 4;
+
+ ok(run(app(['openssl', 'dgst', '-sign', $privkey,
+ '-out', $sigfile,
+ $data_to_sign])),
+ $testtext.": Generating signature");
+
+ ok(run(app(['openssl', 'dgst', '-prverify', $privkey,
+ '-signature', $sigfile,
+ $data_to_sign])),
+ $testtext.": Verify signature with private key");
+
+ ok(run(app(['openssl', 'dgst', '-verify', $pubkey,
+ '-signature', $sigfile,
+ $data_to_sign])),
+ $testtext.": Verify signature with public key");
+
+ ok(!run(app(['openssl', 'dgst', '-verify', $pubkey,
+ '-signature', $sigfile,
+ $other_data])),
+ $testtext.": Expect failure verifying mismatching data");
+}
+
+sub tsignverify_sha512 {
+ my $testtext = shift;
+ my $privkey = shift;
+ my $pubkey = shift;
+
+ my $data_to_sign = srctop_file('test', 'data.bin');
+ my $other_data = srctop_file('test', 'data2.bin');
+
+ my $sigfile = basename($privkey, '.pem') . '.sig';
+ plan tests => 5;
+
+ ok(run(app(['openssl', 'sha512', '-sign', $privkey,
+ '-out', $sigfile,
+ $data_to_sign])),
+ $testtext.": Generating signature using sha512 command");
+
+ ok(run(app(['openssl', 'sha512', '-verify', $pubkey,
+ '-signature', $sigfile,
+ $data_to_sign])),
+ $testtext.": Verify signature with public key using sha512 command");
+
+ ok(run(app(['openssl', 'dgst', '-sha512', '-prverify', $privkey,
+ '-signature', $sigfile,
+ $data_to_sign])),
+ $testtext.": Verify signature with private key");
+
+ ok(run(app(['openssl', 'dgst', '-sha512', '-verify', $pubkey,
+ '-signature', $sigfile,
+ $data_to_sign])),
+ $testtext.": Verify signature with public key");
+
+ ok(!run(app(['openssl', 'dgst', '-sha512', '-verify', $pubkey,
+ '-signature', $sigfile,
+ $other_data])),
+ $testtext.": Expect failure verifying mismatching data");
+}
+
+SKIP: {
+ skip "RSA is not supported by this OpenSSL build", 1
+ if disabled("rsa");
+
+ subtest "RSA signature generation and verification with `dgst` CLI" => sub {
+ tsignverify("RSA",
+ srctop_file("test","testrsa.pem"),
+ srctop_file("test","testrsapub.pem"));
+ };
+
+ subtest "RSA signature generation and verification with `sha512` CLI" => sub {
+ tsignverify_sha512("RSA",
+ srctop_file("test","testrsa2048.pem"),
+ srctop_file("test","testrsa2048pub.pem"));
+ };
+}
+
+SKIP: {
+ skip "DSA is not supported by this OpenSSL build", 1
+ if disabled("dsa");
+
+ subtest "DSA signature generation and verification with `dgst` CLI" => sub {
+ tsignverify("DSA",
+ srctop_file("test","testdsa.pem"),
+ srctop_file("test","testdsapub.pem"));
+ };
+}
+
+SKIP: {
+ skip "ECDSA is not supported by this OpenSSL build", 1
+ if disabled("ec");
+
+ subtest "ECDSA signature generation and verification with `dgst` CLI" => sub {
+ tsignverify("ECDSA",
+ srctop_file("test","testec-p256.pem"),
+ srctop_file("test","testecpub-p256.pem"));
+ };
+}
+
+SKIP: {
+ skip "EdDSA is not supported by this OpenSSL build", 2
+ if disabled("ec");
+
+ skip "EdDSA is not supported with `dgst` CLI", 2;
+
+ subtest "Ed25519 signature generation and verification with `dgst` CLI" => sub {
+ tsignverify("Ed25519",
+ srctop_file("test","tested25519.pem"),
+ srctop_file("test","tested25519pub.pem"));
+ };
+
+ subtest "Ed448 signature generation and verification with `dgst` CLI" => sub {
+ tsignverify("Ed448",
+ srctop_file("test","tested448.pem"),
+ srctop_file("test","tested448pub.pem"));
+ };
+}
+
+SKIP: {
+ skip "dgst with engine is not supported by this OpenSSL build", 1
+ if disabled("engine") || disabled("dynamic-engine");
+
+ subtest "SHA1 generation by engine with `dgst` CLI" => sub {
+ plan tests => 1;
+
+ my $testdata = srctop_file('test', 'data.bin');
+ # intentionally using -engine twice, please do not remove the duplicate line
+ my @macdata = run(app(['openssl', 'dgst', '-sha1',
+ '-engine', "ossltest",
+ '-engine', "ossltest",
+ $testdata]), capture => 1);
+ chomp(@macdata);
+ my $expected = qr/SHA1\(\Q$testdata\E\)= 000102030405060708090a0b0c0d0e0f10111213/;
+ ok($macdata[0] =~ $expected, "SHA1: Check HASH value is as expected ($macdata[0]) vs ($expected)");
+ }
+}
+
+subtest "HMAC generation with `dgst` CLI" => sub {
+ plan tests => 2;
+
+ my $testdata = srctop_file('test', 'data.bin');
+ #HMAC the data twice to check consistency
+ my @hmacdata = run(app(['openssl', 'dgst', '-sha256', '-hmac', '123456',
+ $testdata, $testdata]), capture => 1);
+ chomp(@hmacdata);
+ my $expected = qr/HMAC-SHA2-256\(\Q$testdata\E\)= 6f12484129c4a761747f13d8234a1ff0e074adb34e9e9bf3a155c391b97b9a7c/;
+ ok($hmacdata[0] =~ $expected, "HMAC: Check HMAC value is as expected ($hmacdata[0]) vs ($expected)");
+ ok($hmacdata[1] =~ $expected,
+ "HMAC: Check second HMAC value is consistent with the first ($hmacdata[1]) vs ($expected)");
+};
+
+subtest "HMAC generation with `dgst` CLI, default digest" => sub {
+ plan tests => 2;
+
+ my $testdata = srctop_file('test', 'data.bin');
+ #HMAC the data twice to check consistency
+ my @hmacdata = run(app(['openssl', 'dgst', '-hmac', '123456',
+ $testdata, $testdata]), capture => 1);
+ chomp(@hmacdata);
+ my $expected = qr/HMAC-SHA256\(\Q$testdata\E\)= 6f12484129c4a761747f13d8234a1ff0e074adb34e9e9bf3a155c391b97b9a7c/;
+ ok($hmacdata[0] =~ $expected, "HMAC: Check HMAC value is as expected ($hmacdata[0]) vs ($expected)");
+ ok($hmacdata[1] =~ $expected,
+ "HMAC: Check second HMAC value is consistent with the first ($hmacdata[1]) vs ($expected)");
+};
+
+subtest "HMAC generation with `dgst` CLI, key via option" => sub {
+ plan tests => 2;
+
+ my $testdata = srctop_file('test', 'data.bin');
+ #HMAC the data twice to check consistency
+ my @hmacdata = run(app(['openssl', 'dgst', '-sha256', '-hmac',
+ '-macopt', 'hexkey:FFFF',
+ $testdata, $testdata]), capture => 1);
+ chomp(@hmacdata);
+ my $expected = qr/HMAC-SHA2-256\(\Q$testdata\E\)= b6727b7bb251dfa65846e0a8223bdd57d244aa6d7e312cb906d8e21f2dee3a57/;
+ ok($hmacdata[0] =~ $expected, "HMAC: Check HMAC value is as expected ($hmacdata[0]) vs ($expected)");
+ ok($hmacdata[1] =~ $expected,
+ "HMAC: Check second HMAC value is consistent with the first ($hmacdata[1]) vs ($expected)");
+};
+
+subtest "Custom length XOF digest generation with `dgst` CLI" => sub {
+ plan tests => 2;
+
+ my $testdata = srctop_file('test', 'data.bin');
+ #Digest the data twice to check consistency
+ my @xofdata = run(app(['openssl', 'dgst', '-shake128', '-xoflen', '64',
+ $testdata, $testdata]), capture => 1);
+ chomp(@xofdata);
+ my $expected = qr/SHAKE-128\(\Q$testdata\E\)= bb565dac72640109e1c926ef441d3fa64ffd0b3e2bf8cd73d5182dfba19b6a8a2eab96d2df854b647b3795ef090582abe41ba4e0717dc4df40bc4e17d88e4677/;
+ ok($xofdata[0] =~ $expected, "XOF: Check digest value is as expected ($xofdata[0]) vs ($expected)");
+ ok($xofdata[1] =~ $expected,
+ "XOF: Check second digest value is consistent with the first ($xofdata[1]) vs ($expected)");
+};
+
+subtest "SHAKE digest generation with no xoflen set `dgst` CLI" => sub {
+ plan tests => 1;
+
+ my $testdata = srctop_file('test', 'data.bin');
+ my @xofdata = run(app(['openssl', 'dgst', '-shake128', $testdata], stderr => "outerr.txt"), capture => 1);
+ chomp(@xofdata);
+ my $expected = qr/SHAKE-128\(\Q$testdata\E\)= bb565dac72640109e1c926ef441d3fa6/;
+ ok($xofdata[0] =~ $expected, "Check short digest is output");
+};
+
+SKIP: {
+ skip "ECDSA is not supported by this OpenSSL build", 1
+ if disabled("ec");
+
+ subtest "signing with xoflen is not supported `dgst` CLI" => sub {
+ plan tests => 1;
+ my $data_to_sign = srctop_file('test', 'data.bin');
+
+ ok(!run(app(['openssl', 'dgst', '-shake256', '-xoflen', '64',
+ '-sign', srctop_file("test","testec-p256.pem"),
+ '-out', 'test.sig',
+ srctop_file('test', 'data.bin')])),
+ "Generating signature with xoflen should fail");
+ }
+}
diff --git a/test/recipes/20-test_dhparam.t b/test/recipes/20-test_dhparam.t
new file mode 100644
index 000000000000..eefd897b1038
--- /dev/null
+++ b/test/recipes/20-test_dhparam.t
@@ -0,0 +1,207 @@
+#! /usr/bin/env perl
+# Copyright 2020-2022 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
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT data_file srctop_file);
+use OpenSSL::Test::Utils;
+
+#Tests for the dhparam CLI application
+
+setup("test_dhparam");
+
+plan skip_all => "DH is not supported in this build"
+ if disabled("dh");
+plan tests => 21;
+
+my $fipsconf = srctop_file("test", "fips-and-base.cnf");
+
+sub checkdhparams {
+ my $file = shift; #Filename containing params
+ my $type = shift; #PKCS3 or X9.42?
+ my $gen = shift; #2, 5 or something else (0 is "something else")?
+ my $format = shift; #DER or PEM?
+ my $bits = shift; #Number of bits in p
+ my $pemtype;
+ my $readtype;
+ my $readbits = 0;
+ my $genline;
+
+ if (-T $file) {
+ #Text file. Check it looks like PEM
+ open(PEMFILE, '<', $file) or die $!;
+ if (my $firstline = <PEMFILE>) {
+ $firstline =~ s/\R$//;
+ if ($firstline eq "-----BEGIN DH PARAMETERS-----") {
+ $pemtype = "PKCS3";
+ } elsif ($firstline eq "-----BEGIN X9.42 DH PARAMETERS-----") {
+ $pemtype = "X9.42";
+ } else {
+ $pemtype = "";
+ }
+ } else {
+ $pemtype = "";
+ }
+ close(PEMFILE);
+ ok(($format eq "PEM") && defined $pemtype, "Checking format is PEM");
+ } else {
+ ok($format eq "DER", "Checking format is DER");
+ #No PEM type in this case, so we just set the pemtype to the expected
+ #type so that we never fail that part of the test
+ $pemtype = $type;
+ }
+ my @textdata = run(app(['openssl', 'dhparam', '-in', $file, '-noout',
+ '-text', '-inform', $format]), capture => 1);
+ chomp(@textdata);
+ #Trim trailing whitespace
+ @textdata = grep { s/\s*$//g } @textdata;
+ if (grep { $_ =~ 'Q:' } @textdata) {
+ $readtype = "X9.42";
+ } else {
+ $readtype = "PKCS3";
+ }
+ ok(($type eq $pemtype) && ($type eq $readtype),
+ "Checking parameter type is ".$type." ($pemtype, $readtype)");
+
+ if (defined $textdata[0] && $textdata[0] =~ /DH Parameters: \((\d+) bit\)/) {
+ $readbits = $1;
+ }
+ ok($bits == $readbits, "Checking number of bits is $bits");
+ if ($gen == 2 || $gen == 5) {
+ #For generators 2 and 5 the value appears on the same line
+ $genline = "G: $gen (0x$gen)";
+ } else {
+ #For any other generator the value appears on the following line
+ $genline = "G:";
+ }
+
+ ok((grep { (index($_, $genline) + length ($genline)) == length ($_)} @textdata),
+ "Checking generator is correct");
+}
+
+#Test some "known good" parameter files to check that we can read them
+subtest "Read: 1024 bit PKCS3 params, generator 2, PEM file" => sub {
+ plan tests => 4;
+ checkdhparams(data_file("pkcs3-2-1024.pem"), "PKCS3", 2, "PEM", 1024);
+};
+subtest "Read: 1024 bit PKCS3 params, generator 5, PEM file" => sub {
+ plan tests => 4;
+ checkdhparams(data_file("pkcs3-5-1024.pem"), "PKCS3", 5, "PEM", 1024);
+};
+subtest "Read: 2048 bit PKCS3 params, generator 2, PEM file" => sub {
+ plan tests => 4;
+ checkdhparams(data_file("pkcs3-2-2048.pem"), "PKCS3", 2, "PEM", 2048);
+};
+subtest "Read: 1024 bit X9.42 params, PEM file" => sub {
+ plan tests => 4;
+ checkdhparams(data_file("x942-0-1024.pem"), "X9.42", 0, "PEM", 1024);
+};
+subtest "Read: 1024 bit PKCS3 params, generator 2, DER file" => sub {
+ plan tests => 4;
+ checkdhparams(data_file("pkcs3-2-1024.der"), "PKCS3", 2, "DER", 1024);
+};
+subtest "Read: 1024 bit PKCS3 params, generator 5, DER file" => sub {
+ plan tests => 4;
+ checkdhparams(data_file("pkcs3-5-1024.der"), "PKCS3", 5, "DER", 1024);
+};
+subtest "Read: 2048 bit PKCS3 params, generator 2, DER file" => sub {
+ plan tests => 4;
+ checkdhparams(data_file("pkcs3-2-2048.der"), "PKCS3", 2, "DER", 2048);
+};
+subtest "Read: 1024 bit X9.42 params, DER file" => sub {
+ checkdhparams(data_file("x942-0-1024.der"), "X9.42", 0, "DER", 1024);
+};
+
+#Test that generating parameters of different types creates what we expect. We
+#use 512 for the size for speed reasons. Don't use this in real applications!
+subtest "Generate: 512 bit PKCS3 params, generator 2, PEM file" => sub {
+ plan tests => 5;
+ ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-pkcs3-2-512.pem',
+ '512' ])));
+ checkdhparams("gen-pkcs3-2-512.pem", "PKCS3", 2, "PEM", 512);
+};
+subtest "Generate: 512 bit PKCS3 params, explicit generator 2, PEM file" => sub {
+ plan tests => 5;
+ ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-pkcs3-exp2-512.pem', '-2',
+ '512' ])));
+ checkdhparams("gen-pkcs3-exp2-512.pem", "PKCS3", 2, "PEM", 512);
+};
+subtest "Generate: 512 bit PKCS3 params, generator 5, PEM file" => sub {
+ plan tests => 5;
+ ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-pkcs3-5-512.pem', '-5',
+ '512' ])));
+ checkdhparams("gen-pkcs3-5-512.pem", "PKCS3", 5, "PEM", 512);
+};
+subtest "Generate: 512 bit PKCS3 params, generator 2, explicit PEM file" => sub {
+ plan tests => 5;
+ ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-pkcs3-2-512.exp.pem',
+ '-outform', 'PEM', '512' ])));
+ checkdhparams("gen-pkcs3-2-512.exp.pem", "PKCS3", 2, "PEM", 512);
+};
+SKIP: {
+ skip "Skipping tests that require DSA", 4 if disabled("dsa");
+
+ subtest "Generate: 512 bit X9.42 params, generator 0, PEM file" => sub {
+ plan tests => 5;
+ ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-x942-0-512.pem',
+ '-dsaparam', '512' ])));
+ checkdhparams("gen-x942-0-512.pem", "X9.42", 0, "PEM", 512);
+ };
+ subtest "Generate: 512 bit X9.42 params, explicit generator 2, PEM file" => sub {
+ plan tests => 1;
+ #Expected to fail - you cannot select a generator with '-dsaparam'
+ ok(!run(app([ 'openssl', 'dhparam', '-out', 'gen-x942-exp2-512.pem', '-2',
+ '-dsaparam', '512' ])));
+ };
+ subtest "Generate: 512 bit X9.42 params, generator 5, PEM file" => sub {
+ plan tests => 1;
+ #Expected to fail - you cannot select a generator with '-dsaparam'
+ ok(!run(app([ 'openssl', 'dhparam', '-out', 'gen-x942-5-512.pem',
+ '-5', '-dsaparam', '512' ])));
+ };
+ subtest "Generate: 512 bit X9.42 params, generator 0, DER file" => sub {
+ plan tests => 5;
+ ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-x942-0-512.der',
+ '-dsaparam', '-outform', 'DER', '512' ])));
+ checkdhparams("gen-x942-0-512.der", "X9.42", 0, "DER", 512);
+ };
+}
+SKIP: {
+ skip "Skipping tests that are only supported in a fips build with security ".
+ "checks", 4 if (disabled("fips") || disabled("fips-securitychecks"));
+
+ $ENV{OPENSSL_CONF} = $fipsconf;
+
+ ok(!run(app(['openssl', 'dhparam', '-check', '512'])),
+ "Generating 512 bit DH params should fail in FIPS mode");
+
+ ok(run(app(['openssl', 'dhparam', '-provider', 'default', '-propquery',
+ '?fips!=yes', '-check', '512'])),
+ "Generating 512 bit DH params should succeed in FIPS mode using".
+ " non-FIPS property query");
+
+ SKIP: {
+ skip "Skipping tests that require DSA", 2 if disabled("dsa");
+
+ ok(!run(app(['openssl', 'dhparam', '-dsaparam', '-check', '512'])),
+ "Generating 512 bit DSA-style DH params should fail in FIPS mode");
+
+ ok(run(app(['openssl', 'dhparam', '-provider', 'default', '-propquery',
+ '?fips!=yes', '-dsaparam', '-check', '512'])),
+ "Generating 512 bit DSA-style DH params should succeed in FIPS".
+ " mode using non-FIPS property query");
+ }
+
+ delete $ENV{OPENSSL_CONF};
+}
+
+ok(run(app(["openssl", "dhparam", "-noout", "-text"],
+ stdin => data_file("pkcs3-2-1024.pem"))),
+ "stdinbuffer input test that uses BIO_gets");
diff --git a/test/recipes/20-test_dhparam_check.t b/test/recipes/20-test_dhparam_check.t
new file mode 100644
index 000000000000..b929afb326cb
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check.t
@@ -0,0 +1,91 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Glob;
+use OpenSSL::Test qw/:DEFAULT data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_dhparam_check");
+
+plan skip_all => "DH isn't supported in this build"
+ if disabled("dh");
+
+=pod Generation script
+
+#!/bin/sh
+
+TESTDIR=test/recipes/20-test_dhparam_check_data/valid
+rm -rf $TESTDIR
+mkdir -p $TESTDIR
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DH -pkeyopt dh_rfc5114:1 -out $TESTDIR/dh_5114_1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DH -pkeyopt dh_rfc5114:2 -out $TESTDIR/dh_5114_2.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DH -pkeyopt dh_rfc5114:3 -out $TESTDIR/dh_5114_3.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt dh_rfc5114:2 -out $TESTDIR/dhx_5114_2.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -out $TESTDIR/dhx_p1024_q160_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:1024 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -out $TESTDIR/dhx_p1024_q224_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:1024 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -out $TESTDIR/dhx_p1024_q256_t1862.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_4 -out $TESTDIR/dhx_p1024_q160_t1864.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:2048 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -out $TESTDIR/dhx_p2048_q160_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -out $TESTDIR/dhx_p2048_q224_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -out $TESTDIR/dhx_p2048_q256_t1862.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_4 -out $TESTDIR/dhx_p2048_q224_t1864.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_4 -out $TESTDIR/dhx_p2048_q256_t1864.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:3072 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -out $TESTDIR/dhx_p3072_q160_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:3072 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -out $TESTDIR/dhx_p3072_q224_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt pbits:3072 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -out $TESTDIR/dhx_p3072_q256_t1862.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DH -pkeyopt group:ffdhe2048 -out $TESTDIR/dh_ffdhe2048.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DHX -pkeyopt group:ffdhe2048 -out $TESTDIR/dhx_ffdhe2048.pem
+
+
+=cut
+
+my @valid = glob(data_file("valid", "*.pem"));
+my @invalid = glob(data_file("invalid", "*.pem"));
+
+my $num_tests = scalar @valid + scalar @invalid;
+plan tests => 2 + 2 * $num_tests;
+
+foreach (@valid) {
+ ok(run(app([qw{openssl dhparam -noout -check -in}, $_])));
+ ok(run(app([qw{openssl pkeyparam -noout -check -in}, $_])));
+}
+
+foreach (@invalid) {
+ ok(!run(app([qw{openssl dhparam -noout -check -in}, $_])));
+ ok(!run(app([qw{openssl pkeyparam -noout -check -in}, $_])));
+}
+
+my $tmpfile = 'out.txt';
+
+sub contains {
+ my $expected = shift;
+ my $found = 0;
+ open(my $in, '<', $tmpfile) or die "Could not open file $tmpfile";
+ while(<$in>) {
+ $found = 1 if m/$expected/; # output must include $expected
+ }
+ close $in;
+ return $found;
+}
+
+# Check that if we load dh params with only a 'p' and 'g' that it detects
+# that this is actually a valid named group.
+ok(run(app([qw{openssl pkeyparam -text -in}, data_file("valid/dh_ffdhe2048.pem")], stdout => $tmpfile)));
+ok(contains("ffdhe2048"))
diff --git a/test/recipes/20-test_dhparam_check_data/invalid/dh_p1024_t1862_pkcs3.pem b/test/recipes/20-test_dhparam_check_data/invalid/dh_p1024_t1862_pkcs3.pem
new file mode 100644
index 000000000000..2104af26e49c
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/invalid/dh_p1024_t1862_pkcs3.pem
@@ -0,0 +1,8 @@
+-----BEGIN DH PARAMETERS-----
+MIIBBwKBgQCZn3UjXAFcQBMoIQ3eldBiGymdAHBv4IFlzPlpPln2Lh80Ut0vJ/XF
+JjMWglpQgiZBt14Tt/hCirnsjGAJ/sdCybUSfrgynCvfnangtYUiejWbkjriFrAD
+4fc1UJeZaYh0LFE2KoDbj1WYEatllkAv1YN59Va2BDqhKibRppPvwQKBgCiB+ihI
+wZhXIj77B2uKFXx0fPUgHWmG31X3IZg6qTZhZZ/IhKrwkic/ZDTQ3Sg8xh6X41iB
+oSNrh29uJOV5XQKu1p53jUcnBT4ziA/Z6Sljdjqmisd81RK0ZEj3mBV7gpFId4xX
+mHDqT0234ZAzjd4GutIrnYhr15ysfYG5lPtT
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/invalid/dh_p2048_t1862_pkcs3.pem b/test/recipes/20-test_dhparam_check_data/invalid/dh_p2048_t1862_pkcs3.pem
new file mode 100644
index 000000000000..c8a9b6bbee78
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/invalid/dh_p2048_t1862_pkcs3.pem
@@ -0,0 +1,13 @@
+-----BEGIN DH PARAMETERS-----
+MIICCgKCAQEA9UZoeQZMPSABt+d35BkXukDZ/sobtVEGpOTCh2xpP4yu+A0fWzc7
+pK25D/JcIsMbx4g1rHTjJCXw0MXZ0r7x3ws7J5UGAC9/XcfrWtFoDMt+8lYLe+uF
++jvx/1T5FOSn/DnJZPriW038lsKvZ4DmBOn1RTniikEfxNdgMRH+tMf0QAMpnep1
+S3DGADLw/NDGdqXbjj27pa0vNEgZkOxsMjlwepaB0GmkyViqY56RM46ZLveYp4BR
+124XaaS5woIF+5oou9HpvR2Zq/4D5b3rXviSfLzWscpWwLpD4qpLcy3CaqzXpMfc
+xOeh27Bke7An3qjkuCu62eB7Oq8+hdQaSQKCAQEAy/tatWepC98OD5Qz1+UExQ4Y
+fRMQma7tdaJ1eCvcuo1hmvxBMl6uYPluIiaoru6LUt+u2GaDPvSKytph7uidTRH4
+kL6NdmHnCU/rpSsEESLmeu5BmkzoCfrFVC7NGTS4rVgQn4kee4LXeBkjqEICstzh
+4+1Zuo0klEYCpKjbgQNJP153vdQpPxfdgyaJf6a8UhAl/NgOzskMb4Ae0v4FjXFu
+tGnJpClSpWwVl5xakDI/P3TFH5fbcEjlsKqLjetUD7bSP78F+toltrzWEgh7+VMS
+rmXmAKV+hC6GGYBl4JwIaQa6cL5hlD+2ZHYKkPAOlDap6uAHQK9KnnuAxeUXZg==
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/invalid/dh_p2048_t1864_pkcs3.pem b/test/recipes/20-test_dhparam_check_data/invalid/dh_p2048_t1864_pkcs3.pem
new file mode 100644
index 000000000000..98940db55f29
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/invalid/dh_p2048_t1864_pkcs3.pem
@@ -0,0 +1,13 @@
+-----BEGIN DH PARAMETERS-----
+MIICCQKCAQEAhBkJVh18GbakvREWoFdHcM1zTvUqoPWIS0EKHpipndD8ePM2ZvxC
+ikSpr/DThX15eUODyaXbxusyx+05gnEu6TeNVtA1EUKWXerX3km1aXGv61MqMG1a
+Uobe04AT4wAxH7+pQk1c1GPmMNA1PYA4jzn/oTSvyaM0p+o9g17Uv1I8cTOcPGlL
+CkjumnixrMSBPfIkiqoyeTQiNK+IxzIN34RHQlltzwJrSJhJXz0JGG132zQXVRur
+0A/Bc6YdaszGujg2POhtgueHoK3qatL0jmCwQEbwFx+8dvVVF+5UIO8m70b+WyT5
+WFiBHL3SRO77HMWg12Yj3ZX3/zhoOZ1cuQKCAQB2OF9MwGboK34QjRrptBzfGQc1
+lX82JTwYi7VTvLRKZI9ln6PkVCXaaGV68D6CN+Otz8mfXQdC9I9voMRAMoKBIvQh
+3ySkYLuRy4wcOJC5msj9wnnfXoIhS0rvbjBwmvCiuCTYCRlGBboVI9ZWv7fXj949
+oF4P7CQffyTc/4bZv9CgtODUum+HYKRYsvAsF9OKY62yg4GbSfIN08mAZ9u03YWa
+qPYclJKTRvo4IGZy65f23Jo79Yx4o9jvxnMIstBYrFJLitKqxB6dlNZEu4mv56Sk
+OuCzMwh2Vd4kmNgahBiTlID0UySQqsVHNzFpW/AmQ2D1OmqW5MffWOWLOBDj
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/invalid/dh_p3072_t1862_pkcs3.pem b/test/recipes/20-test_dhparam_check_data/invalid/dh_p3072_t1862_pkcs3.pem
new file mode 100644
index 000000000000..3aec9ff44d10
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/invalid/dh_p3072_t1862_pkcs3.pem
@@ -0,0 +1,19 @@
+-----BEGIN DH PARAMETERS-----
+MIIDCQKCAYEApg6MBQ/pnZf8LsfYoktwBPjROBuBye90r2l/nhUo1WBeatdkRB09
+6VfxvLw4W67mDOFkRuL8jSJq4qg0J96NfHsTYIl3rN+AWYcT5jz3Jeg0cNRbpdP/
+LCn9EQx1WhYVsym2klhgy58TyaE10jMu6GOfAxqBuBuT2Goq35F2xLYZOTlBNogW
+GdLpa2IT7DB6rb0Q8n0EQzxlgbJv8gUHnYaEj9TVGLxFknQMRB40cxXBOYQelMgw
+VMZvZJrZdQOH8lB6tf8KtGtSJWpILy3kKeSa+1PXQfVDxjeb+Us28YkYw1zFsFMV
+6RbUz6L53E04VZgrgoKo2bO5V6LYbHUINvNqto/ut3EuRZp/uhfGo0KpAfrd7fvU
+R7GadmWmsMJtSEK/qneSEsvd8W4SeQpuGoua6E/lFIGSdG2hjjKrFoaNDJnBcazk
+MkWn+zuDJqheQujmr1HJ+3F6tX8rqfyN1XrYkU1xVTibaVyiGMAYioTFsOiYyFhp
+IzIVfF70kjHfAoIBgA9sS8DTB52/ShiCpYkCW98iIcdYvNSqGTSWmVLMRA2zV1Gq
+clc6Zrxe62BFb8Y/2extYHvbpNdrHryIOdJYnEq6GjTiiDoU0do8y/mTLmyYkKuD
+wYzxtVhQh5Pn0l/3Eq1bfLlseDzo4NrDAJ2BwvAcHuuX0EIA5vG9Hnz0zD18UZb7
+EN1H1dKh1jmKWK/HEB317tPYNbOs9433yecdXwt6i+asEN6NAbBG5qKQrMq9s/UE
+I5R1PRvvPhujTuM4Pkn1tbUcs5psxYafeH8aGipWIHd8faJ0kcG3k/aY3jMRTR/h
+0gpT8ERwx4HnFCfxXKNMnok/YhU5Y1wq/PeFK3v8XQdFQnZHo2DZWuAxVGI7EuP2
+GeHYbzqoMHoh1dq5ePuzRbIZgs+7ah2G+GptfeeUoU8Wxbk25nGLBimPu9PA7nfa
+QzxJP7yvQD7SCm6C6ASY71dN786B8WIbsyG5XOxoEJj1MTjjhMdE1SeSFbPpn1ih
+XeCuEdNLx1dKYfi5VQ==
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dh_5114_1.pem b/test/recipes/20-test_dhparam_check_data/valid/dh_5114_1.pem
new file mode 100644
index 000000000000..abc5225db881
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dh_5114_1.pem
@@ -0,0 +1,8 @@
+-----BEGIN DH PARAMETERS-----
+MIIBDAKBgQCxC4+WoIDgHd6S3l6uXVTsUsmfvPsGo8aaap3KUtI7YWBz4oZ1oj0Y
+mDjvHi7mUsAT7LSuqQYRIySXXDzUm4O/rMvdfZDEvXCYSI6cIZpzck7/1vrlZEc4
++qMaT/VbzMChUa9fDci0vUW/N982XBpl5oz9p21NpwjfH7K8LkpDcQKBgQCk0cvV
+w/00EmdlpELvuZkF+BBN0lisUH/WQGz/FCZtMSZv6h5cQVZLd35pD1UE8hMWAhe0
+sBuIal6RVH+eJ0n01/vX07mpLuGQnQ0iY/gKdqaiTAh6CR9THb8KAWm2oorWYqTR
+jnOvoy13nVkY0IvIhY9Nzvl8KiSFXm7rIrOy5QICAKA=
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dh_5114_2.pem b/test/recipes/20-test_dhparam_check_data/valid/dh_5114_2.pem
new file mode 100644
index 000000000000..d1fadc1a9052
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dh_5114_2.pem
@@ -0,0 +1,14 @@
+-----BEGIN DH PARAMETERS-----
+MIICDgKCAQEArRB+HpEjqdDWYPqnlVnFH6INZOVoO5/RtUsVl7YdCnXm+hQd+VpW
+26+aPEB7od8V6z1oijCcGA4d5rhaEnSgpm0/gVKtasISkDfJ7e/aTfjZHo/vVbc5
+S3rVt9C2wSIHyfmNEe002/bGugssi7wnvmoA4KC5xJcIs7+KMXCRiDaBKGEwvImF
+2xYC5xRBXZMwJ4Jzx94x79xzEPcSH9WgdBWYfZrcCkhtzfk6zEQyg4cxXXXhmMZB
+pIDNhqG55YfovmDmnMkosrnFIXLkEwQumyPxCw4W55djybU9z0uoCinj+3PBa451
+uX7zY+L/ox9xz53lOE5xuBwKxN/+DBDmTwKCAQEArEAy708tmuOd8wtcj/2sUGze
+vnuJmYyvdIZqCM/k/+OmgkpOELmm8N2SHwGnDEr6q3OddwDCn1LFfbF8YgqGUr5e
+kAGo1mrXwXZpEBmZAkr00CcnWsE0i7inYtBSG8mK4kcVBCLqHtQJk51U2nRgzbX2
+xrJQcXy+8YDrNBGOmNEZUppF1vg0Vm4wJeMWozDvu3eobwwasVsFGuPUKMj4rLcK
+gTcVC47rEOGD7dGZY93Z4mPkdwWJ72qiHn9fL/OBtTnM40CdE81Wavu0jWwBkYHh
+vP6UswJp7f5y/ptqpL17Wg8ccc//TBnEGOH27AF5gbwIfypwZbOEuJDTGR8r+gIC
+AOA=
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dh_5114_3.pem b/test/recipes/20-test_dhparam_check_data/valid/dh_5114_3.pem
new file mode 100644
index 000000000000..514f7a9bcd06
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dh_5114_3.pem
@@ -0,0 +1,14 @@
+-----BEGIN DH PARAMETERS-----
+MIICDQKCAQEAh6jmHbS2Zjz/u9GcZRlZmYzu9ghmDdDyXSzu1ENeOwDgDfjx1hlX
+1Pr330VhsqowFsPZETQJb6o79Cltgw6afCCeDGSXUXq9WoqdMGvPZ+2R+eZyW0dY
+wCLgse9Cdb97bFv8EdRfkIi5QfVOseWbuLw5oL8SMH9cT9twxYGyP3a2Osrhyqa3
+kC1SUmc1SIoO8TxtmlG/pKs62DR3llJNjvahZ7WkGCXZZ+FE5RQFZCUcysuD5rSG
+9rPKP3lxUGAmwLhX9omWKFbe1AEKvQvmIcOjlgpU5xDDdfJjddcBQQOktUMwwZiv
+EmEW0iduEXFfaTh3+tfvCcrbCUrpHhoVlwKCAQA/syybcxNNCy53UGZg7b1ITKex
+jyHvIFQH9Hk6GguhJRDbwVB3vkY//0/tSqwLtVW+OmwbDGtHsbw3c79+jG9ikBIo
++MKMuxilWuMTQQAKZQGW+THHelfy3fRj5ensFEt3feYqqrioYorDdtKC1u04ZOZ5
+gkKOvIMdFDSPby+Rk7UEWvJ2cWTh38lnwfs/LlWkvRv/6DucgNBSuYXRguoK2yo7
+cxPT/hTISEseBSWIubfSu9LfAWGZ7NBuFVfNCRWzNTu7ZODsN3/QKDcN+StSx4kU
+KM3GfrYYS1I9HbJGwy9jB4SQ8A741kfRSNR5VFFeIyfP75jFgmZLTA9sxBZZAgIB
+AA==
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dh_ffdhe2048.pem b/test/recipes/20-test_dhparam_check_data/valid/dh_ffdhe2048.pem
new file mode 100644
index 000000000000..24260bf846d3
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dh_ffdhe2048.pem
@@ -0,0 +1,8 @@
+-----BEGIN DH PARAMETERS-----
+MIIBDAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
+87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
+YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
+7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
+ssbzSibBsu/6iGtCOGEoXJf//////////wIBAgICB/8=
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_5114_2.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_5114_2.pem
new file mode 100644
index 000000000000..8887cb174bef
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_5114_2.pem
@@ -0,0 +1,14 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIICKQKCAQEArRB+HpEjqdDWYPqnlVnFH6INZOVoO5/RtUsVl7YdCnXm+hQd+VpW
+26+aPEB7od8V6z1oijCcGA4d5rhaEnSgpm0/gVKtasISkDfJ7e/aTfjZHo/vVbc5
+S3rVt9C2wSIHyfmNEe002/bGugssi7wnvmoA4KC5xJcIs7+KMXCRiDaBKGEwvImF
+2xYC5xRBXZMwJ4Jzx94x79xzEPcSH9WgdBWYfZrcCkhtzfk6zEQyg4cxXXXhmMZB
+pIDNhqG55YfovmDmnMkosrnFIXLkEwQumyPxCw4W55djybU9z0uoCinj+3PBa451
+uX7zY+L/ox9xz53lOE5xuBwKxN/+DBDmTwKCAQEArEAy708tmuOd8wtcj/2sUGze
+vnuJmYyvdIZqCM/k/+OmgkpOELmm8N2SHwGnDEr6q3OddwDCn1LFfbF8YgqGUr5e
+kAGo1mrXwXZpEBmZAkr00CcnWsE0i7inYtBSG8mK4kcVBCLqHtQJk51U2nRgzbX2
+xrJQcXy+8YDrNBGOmNEZUppF1vg0Vm4wJeMWozDvu3eobwwasVsFGuPUKMj4rLcK
+gTcVC47rEOGD7dGZY93Z4mPkdwWJ72qiHn9fL/OBtTnM40CdE81Wavu0jWwBkYHh
+vP6UswJp7f5y/ptqpL17Wg8ccc//TBnEGOH27AF5gbwIfypwZbOEuJDTGR8r+gId
+AIAcDTTFjZP+mXF3EB+AU1pHOM68vziambNjces=
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_ffdhe2048.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_ffdhe2048.pem
new file mode 100644
index 000000000000..5a30fa003d7d
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_ffdhe2048.pem
@@ -0,0 +1,13 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIICDAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
+87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
+YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
+7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
+ssbzSibBsu/6iGtCOGEoXJf//////////wIBAgKCAQB//////////9b8KixRXaVN
+V+4rEBOennjsXOLB5xabStTwmyCKMhn95knO5xJNn3y+l/GxsYY67HtA2QFXYjC9
+ae+Paur+srCSGfqPr4M3aEKxsqqe9o152quJrz+r5JrMJ4Y4cHNFu/FTRO159/Q5
+DvisUJtW85qYVmUnpB08vV4FWMFZkn2w6IRUpdlkcf3ctW1bsGv6NA6noVHvHKb6
+Vyt287G5XYyFg9PkdwU2uE8BfnDm+/F2YBoCZpQaF7DIuX9OdMLB/8cniRl3eUDB
+4f8djaY31rmd2v5eF2EQAuLHeMG+i0HZY3mlE2DZd/1ENaEcMJQuS///////////
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q160_t1862.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q160_t1862.pem
new file mode 100644
index 000000000000..fbd6a818607a
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q160_t1862.pem
@@ -0,0 +1,9 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIIBOwKBgQDspvt+lBKshK2dJm1ouMYnWvlxV68lrTd8OsJe05BhqM3OCX+WPaZj
+K3YpCfeGDjF3XvCnR546Bwa/XF5/ox0psRhY5yeKn/CHtOerHcYAjFMFZy1I6K7Z
+TZCDsVNNyIzx955tJHsel2B2rWKPXX2cZ9nQf1Zpkpj6vOg7ujw6/QKBgQDPtKmW
+TssY3SmGBQmWkzP73mpZU/x5sV7BWWHR0JJeDjTiVzO40BA9zeQgsI6iJmYNit8t
+d7M25maoMk/7LRochsyFGxgu69kjX5LuTaeVvH1W3sl4kfBDyGckYhFmWWtdfQuf
+VYiWhIe7hjBcP5MMhKZr7Ic66fKrofpUzaLuVQIVANfIaraDgTJH8J3BnR0W3Sq7
+/6N3MBoDFQAmmc91MkRP1Lolw5MzKe/S8C1gyAIBEg==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q160_t1864.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q160_t1864.pem
new file mode 100644
index 000000000000..242487f46ae3
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q160_t1864.pem
@@ -0,0 +1,9 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIIBOwKBgQCDjSjO0qRsv2C6jEOrtaR5xuVptCVLb6ft5U26tPOCA1efTnAdbJ50
+88sKeMjWuXjPGuyKaPSW55NZe57ggyPLdu1Frp6OmK1Odxlit316wfTWwbIC9nZH
+G0TdsvXvyOKMUOV6nSq3wwVv4hQi/6ExRNEhSgqFnHz3zjmR+s2fFwKBgF0uZFhZ
+uqjT6efnMTbEFboZJ7/dQRvkxQzFuQJXAATK/zvJ69BB+LQ3AqT/Nic/UpGAajpl
+9iOtwbDzOVaMRS25/wM9+wNGSYbsI2x1+JAG06EWq8+Mdq3pPdn2VBuPdXK5+VGk
+cf4XMul9XE+dMU/mpeUuWgjcuVnRqIVq5JUsAhUArW8on8uZ0Tob8bb0LBXnLGBR
+zJ0wGwMVAKgAShO77Ko9HVjhcMfQRClGMckAAgICCQ==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q224_t1862.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q224_t1862.pem
new file mode 100644
index 000000000000..3f0b3d8b8e3e
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q224_t1862.pem
@@ -0,0 +1,9 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIIBSgKBgQDEd2y1+pvNNsQ1Wki/LuaTTvkCIdt2QX/UDxV6vWVuJ/rS1hyQhvtd
+sRUM04BkyUzsnzqXWK/Cg/Rw6/J++sMK7jcbs2IDLcBk9s3ukwM1tfyhfAdzappG
+2FGM2jThA91ie+F5NO+Tr+R7mE8SqR/wsIPq9c2Qbll1dDlAitwaHwKBgCk6/NWH
+zinsV7PA0BvIm0nx8JfvjjoghDiGFq4xLKzFszFYcEKyqagAbds/1RmPC8AtVl9b
+deXs7JQOwv+nbYTHyATEFptwV9VnaL+3+Q7TIHmIUgbmpetubZ+7FhfZHZCObOIo
+r/jTpaqAjmSE4yK71sjnEL7m5MthKI0dcnfnAh0A3GFAymHgoouMbaxZ/gxPIHZ6
+66JF1b7doWihyzAiAx0AaAMOgPvnS+AvlCCzdggc3Z2/eLAg5AQOgjpZygIBBA==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q256_t1862.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q256_t1862.pem
new file mode 100644
index 000000000000..9f7ab4645fc4
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p1024_q256_t1862.pem
@@ -0,0 +1,10 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIIBUwKBgQDaVuQ2SUrfZoS1h0/vzCqyih6A+fNOVAEyD6TWsHzuzwroJF6Uak/Q
+f9xit78vsr+yOlIIECyKU/ojzJMvQ2PPgOEcV/HyIofDWup3oRlKduxzMH2nfDCi
+fcgY57BF/j1zx77gb61VqUAsv3QBAgYfRI1cV+8rrvYDkOcWsNeRKwKBgGDf2te/
+h28IFmR7vRufuRjNASmw/3sc+CZo4T5/aeYQPKyxAnUgn3wwcZYwUSxrCrBDDb+Z
+vLe7gaNb3pmixFDyzicRC2zvvzvP3mcyjMhOWwFhEaZy+IOP668g28YFvCPEmsyH
+KpiMdrkMu7TUkomrN3la4m1dAHYO5ykR4XDNAiEAnbBbOFKmm5s8ocuLdw+AotyD
+jG5C84mxNrXGs6s+uh0wJwMhAPKGQPS+FuidlXISBx8acOd7v/hDawBOcwE1WRsB
+BbjpAgICGA==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q160_t1862.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q160_t1862.pem
new file mode 100644
index 000000000000..0f6bdb095641
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q160_t1862.pem
@@ -0,0 +1,15 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIICPQKCAQEA3PeBtOvlR5Kz7WCTOLcEKruVv1gdXrA7KsqEZm5hr0Ods0C3OV+g
+2J4Z5MNQuuIcfVHNxqSmEc2cEM6hMZHu350IJ4uLygmjk8zATmreP0+f/1wBaSXV
+aOZAYXAN3ppzhl2XwPwfDa1KTwBom7xLNW1BsK+ptM+D6RjBdbfBWtrnk9sPj6+X
+ajPL0bJ48S8AoqJonRIc3RMVe6//DabaADeT3udnGUcWh0QyrtfP6gRCDROR/cEU
+2qR2GSAaevUzHkTDmPTY++V3UeZf5CnEQ2x8iuTctcmLA7ZB8u1Lu7WW5X+1Wx8h
+ulBeAUvLcnvPKchhY9Qgo2BNE6DFy+8ibwKCAQBbmZxQzpVC94EnHq4CrS5ebAMZ
+suMan9H92P6mk90XR4AJAfuPRBvbVv3qki5qmjuS0Rf/R+oJ4FqS8HyR7CpoSK79
+HFfkdNQYe0WSPh5ZFQy1P+aE1BVhApsJVEW+DADSM5AWPybmcQXSbfqfTZoKR8ML
+w8ofyPF+tacUaMG5azIHP5mj1h9qdaSOcbFNiWrvp6yM0Ybzgq7IhkCajv22zhPx
+MVAhlIoTiNlMYDcA6Opg3R0LrPM3mENUjB1LuKZFWkSaEE7u0YoBdiA9kZR0d+pp
+bLtOrVjgjHzTGHo1WcK0ssqD4VkGfXYHyMexpgF3vcM4HjEmqWIj/rkS3QZAAhUA
+u4LBDAAJwMZS9lRrtF10hr1QGQEwGwMVAAihPYRyZpRQLB0qWZytlUduGlCAAgII
+xw==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q224_t1862.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q224_t1862.pem
new file mode 100644
index 000000000000..ec0b67068e9f
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q224_t1862.pem
@@ -0,0 +1,15 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIICTAKCAQEAq3N0G07RbPMxaYSamWfQHLetFXbsNie7On4NvC7uL1KmfaTHNkxr
+EZv/chhTKUlQRX4nTYryheQRvZpi9xp5cDnv14nzle3kA6hEjAA79cf9xJqCHunf
+AL9so9PI7VY7SBr8ANsY6vXB6FNxg2JPCHaQfkGgTSIwqfehroaJicUSG6DkKHu5
+RtKniaRDfQoVwxS7nvBpqG8dhZuP8Xei2c8dIqof6Hw+Z0vGANC/lskVNflaTjKl
+qV2DG9VPcJuXpmGQUzxBQ5uXCYkMYZpO7GI7w0KwCq/kBOduLcuFB2A8/qodyyID
+xr2fP/oWZtQ464HcagGEE4Hy90LenUvVXQKCAQBW/V2Yark/X+Mmq9HJeGEk5OaG
+g55qxV9HDYreH0QsOgAVMVzm126uy77ODdn8qR4fPoWZMVUoThgol54XscBrdM/D
+RRWoqrdocyOdkPOloM4bzdYiazd0bn1+C+xjD42lLxo4StaSvBmIakb7kPt1pQ73
+AgRCRZy0j6OE5gZLZb+fLYvjJOcT2n7AJuzk2/Q0/k2o9owC28dGDwdWBn/CvzBj
+oMF/2R2zbX2lc51rfDzV0qdsplu5SU57b1x8gdjw5kKJgi+kwK7K0fGB5liPb6Pb
+w0eWFpRgUskqIOxVFsQgxwkcL3mqDJnIWlF1WboJqfvN++/oKBasojTrUIBkAh0A
+3Q1tuu//NF8fksO+3IJDkBGZdzM6oCa9Vwc18TAiAx0ADOyRLiKTe0HDW8feHEXt
+HWPv+S5quqP11wlJPAIBPw==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q224_t1864.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q224_t1864.pem
new file mode 100644
index 000000000000..b30aa9a4ef63
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q224_t1864.pem
@@ -0,0 +1,15 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIICTgKCAQEAyWH5+SPDEuhevGc7dh4iVF8ZJO0fryDA1fn2LMbNK5A4N/VPMd7p
+qq9go7ydaEbbPEyOd7xApIaQdn/fmUBL6Xp2X4HW/MkYbnebI+2oZgpt2QmAxsuN
+1KTa6SqAz9ROi7SrSm0aAFAtbzP1vVDnngkjONXo/LU6yy9Smfa5IMSbrow933kk
+EDbgos5inebY7R1owiJhEENL+haib0Axz0rrEQIAg5CtGoc3B8FMvMuAXMHnGS+r
+8uinxeuI+cblyqM0nEKVcPwXYQEgDI6+wO21gXuhTjKOL7C5Qlqyb4W21+w3TZ/U
+TD9Tb2kMi8x33MQPrbqh65Gq+MuX5CStCwKCAQEAog0NkDcZyPFILLucriUqlO9J
+XkthvuaA1SiAiLT22hCSFdkyxLOq2ml7sAUQTfMD0FDjdzZ01CS5yQhEXPOUBXfz
+SyJc0PylVbfmZLqS6s8a37wE0K9QYrPdCR+DK7/hy1d9nlAPiMd41/vEfE0ISbTF
+szg+Lz5Q8eeWaaVaj52iZzy3zTkfAtzlQn1O0dSQ6StnASfeM7EIwPEihoSblX8w
+FqYIaGqg3RHXd5YBwMT72o8Dz1dYc9idL8D+Eb/i5CXW4eogSF1dPE8GjumJ2M2k
+ch5UNb6t/s8PqxjsE36aIGJ9kYVE1IJrtq5VZuiPKHZaNqDXsZRXsWfEL9l9eQId
+AOhB7sFh9bzTxnNxCWhmUWnCDfw5o/q2unO8+y0wIwMdAI+6LavN7KvTx/hjMS8m
+oqA6C+1IhgwGtFlmitACAgEC
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q256_t1862.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q256_t1862.pem
new file mode 100644
index 000000000000..1cfe9c86b873
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q256_t1862.pem
@@ -0,0 +1,15 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIICVQKCAQEAhxMwtOxNyUmeaageg/mNU2eOSXQR8EOo/i3kf7KimKu7L0rb0hDb
+8jT6r1jzkLCHjwleD7eAUxMMXbR5e6gBeKy5MbCUL84k2Gu67rgD+DF6SXn0m5or
+wpBRcDBjEaUQE9m0TdS4BGJc+EwYYnjWIKIMtjOscwrx0M9QjmAiMwQN6IdAl3zF
+9nmWFy8Cs0+uLRI4Q4WPRR/iPGQxtxTVtXKL5jMaPYiEdAR2RGkBo+kdi3gKKvIB
+JxP0DlqQTqZcwrVJ5neRw+ZL+UqurKZeSVD5LLhoFgxJNTEy8EhnG5RibhSoFkVN
+AQ2NAITvkudCMOti7WRPD9+NhkakF8GT2QKCAQAiNQFdNwtfvwqhVVdZM4kp+dDg
+driyDQssF1YFL+RJ8wxlanaMs8yPUJ6raANoVKKbJm7LwSJ2uVnXcTWzKIxIa92a
+XK2ZFkXYhLz84/gEikrDU0OHhswy5NkJEIeHJwg9aWBHZTrSTXGY3yTmBqrU81SY
+RC+yoPxS8CInuhYg2fyglpuZCRgqlZXkdlzQUocQ/LwpQS4+4RDrUAEg9xxiTRGx
+qD6CCnsKSPds3AbazBdlplOQ9gkjPbyM3or7f/4i17zuqucTFpZyvwmWGDGzwpWe
++Xw28Hp5gNCNQDQZ+PfQlENvGxfuoOSiKHd1JBN4bMG98HSUtT7v+C0qAh5OAiEA
+iRpMLXg4tQhUO3d9x3NhkzDVbDpizcuXT+iLat186pswJwMhAPo+HQsTrhHlHfND
+TPB8hXdpDowZTe2Hnn2OzTUSD4QLAgIBDQ==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q256_t1864.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q256_t1864.pem
new file mode 100644
index 000000000000..92ec657d6a0c
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p2048_q256_t1864.pem
@@ -0,0 +1,15 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIICVQKCAQEAzO57ZqbU71+lYMO5SkCWyVKTb5/+LdGauH060+pY7FmbpItnCOIj
+Af5kgruMsrRFYpP6cUyulMTmsO56yhuJpJICoEo4kgCmDtWsiSAbfya6TlemR/pE
+/sK0AjrnPEs7/shm8f3FsTzOxxRfyjG+awNNaIAd0WrjlRreUdh3iIQfL/SsyAoP
++oAJxkCe8uUfUkYze+jYE7NiDh20LtkIl1WU7M7TDaiYFu/Eu2HBQFoBhVaD+lik
+/3TWj2qR4GrVa/DyiXScGizXJBoLdQ3eN48xaXz4dLqJWaEvmmtjfqKc1HCsnLH/
++8pcCm2YlyDlTEpQEampcMV6S1c+wcbk/QKCAQAdDMAoe1++MBQH6kLZUhykild4
+IyEjegCi5WCHQI0ebmsC/YxxaXcr0U4xETJFU/cd00p8GLJ9YviT20qJ5iEktmPc
+dahijKGOVll+4dN93a6KmYQ47Lcu+tKHgr8yyje5m114XiapmgXwFLvI4PSIW8DP
+ez3iekoZihpvugR1RfuvUIFdR0N8leiW+/J0EvBZRTupUyvBLlT8la/rbhiBBxvB
+xu0Suoz+jzUO9HxKVRvnGA44yR5NMMv49Md4LZZ3EHiMMFBzyVdUh3WlOW9aBLwm
+xDuZXhCd45Iv4gOj+emLgHhmFgObYKwyomohBoKTOr7NQvra7I95v6w7tF6lAiEA
+uHUPOaAMRZBDNqplV4m3RlP1RGz+X6Vl0SPWYx8M0nkwJwMhABYon3NiVQGHX79/
+jyrQpVMxdvlA7NV+Oy8HXv6h/s9NAgIBEA==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q160_t1862.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q160_t1862.pem
new file mode 100644
index 000000000000..3ced35c67b31
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q160_t1862.pem
@@ -0,0 +1,20 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIIDPQKCAYEArnFPoASvJ9zWvwV6HUX4gATE2M2R4aAyV0dTikh8bNZb9sg6JNdd
+zlvRKIRc2aRcoVIrdDMa3GlMOhFW3+7jV3Z/y0/GGn3qxQeVPDMcsE7dqiaEnESw
+FQ+BmRo3G+s/UvjvzekHtd17MEKvGWH8n/BIHJNiP8LYov5DhyHy+TGrUZPDuXCb
+ycIwMM/0adaA5SkAr1GRviK5rPxEeqBj9pWk4iNEg5KTPfEyYVAOYE2O5KSaPYXJ
+rKGpAHuS18QlWmoEVIzOp50KyS6a7hoiFYmE8sE2QwFCoG6UCxpEVpBfmax6KA5L
+H653mR+A+VBg8pnkRb/9nUTXXMyATmQ5F10EdXh5rHhLYqF5IRdluOjEE9Lc5GeE
+P5OMMM0w/KrpnP3gDeB3jzEBUm2+vphQWFypq8mNVQKDhuxVljQjE7iHE/E8P7F3
+I+6TiFOSkrKh7RZ6AOgjaD4yiYj+clv4+J5mdnpBVI+UXwwb8X1K74sVQgw++umk
+F61XvQf9/jT1AoIBgBZT7QTh5UoexXm5rFripXwN70uNMPO5ugveHH9kR4aU95SY
+Qc6mK7sZLoF4DXwZaqtqmh8gGkUtwONTY/fbsq5U4Ezs12RuwQTojoJuDTb3z2zM
+ug1DfCuvVFzJylRjb3JYlABCxeE5Kid7anueC5mhVfj6mWWXxLheKh3OHYLVP5Az
+Xt5BpYlJqKanD414yfubI56aBVSxluzCNtHv/dwwPiTBG1JLsucqxlSo1eKfOMAN
+dr8sE01yNe+CUgmDUruMeYTZaO9LZXm1ZomQcRaEV37q92HnaK66BeY3DdNcStEQ
+DHT9HL+qzpQU/x+gbLib5nie5RbxZLVGLVmb5iQRk4fc1n86dyYP2YlaY/1e9t1x
+UL9FYH3FIQIoBR7AKc0EFOEg98cujhSqVuH1mKN1yCfHuB/bPVA/JjYS2sC+LltZ
+80xjOUchfT8vCLyuZhuQJDIvP0EcSBIdzHS04Tu1PNhj+777g+9rwLMNcArC5dqL
+h5rq7nqE7F2kf8JBVQIVAP/F0VeodM/n4piNkZkZeVz9lf2DMBsDFQAbVeBR/9Wo
+2e2/qzEzqPKni9XgIgICBpw=
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q224_t1862.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q224_t1862.pem
new file mode 100644
index 000000000000..cc68515a6d5b
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q224_t1862.pem
@@ -0,0 +1,20 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIIDTgKCAYEAyXngTh3fkOAbcHwvYZ0vfRF6KEZRXVcZtgeYjnKuu3KPa6v+Uqq1
+z9U50V4MLHFAbO1f0hbWGlFUYTFqVwMaKTcKJZH7xkNpHsmZxiElWVTXmGOigdfi
+mu4awQdE+N4E7/9DFBXnnqUzpPRkBP5V0zOUePqYQhpisTKct6OvSJojAiLJb8Jj
+6mO0Oa9t+RIC1Lz6Cum+k3Yidxu/kOGW4WBxIKMML9o6cEMRnU+HZyzXskgL2pZB
+1DXe4OgPU9qvAnUnve0tbwPDUpD66khN/Z1Kaxb2NhTc2xx4d2guucGIP7VsyCbs
+luf3KtOiYPC+LOlgcZDkqDc0N2F6LdXcO0XA/8dI5UiC8L9Pr8Qnu8JaqrxG9PA2
+VQT4GbWvjnNe/e7cZE5XQGRZkdEEVYuxcgFKeW+QAKcRn+fRaWW8RDDnIH6aX+yg
+abLXrmZW1bE3FnLFS3wDcERooaXrpnJ6RcbLPEPJszHV7Nc5LnIpT98rGg0AwYzh
+poHXYcZ1bFkTAoIBgQCgq5PGWWYX2kWvavUaBXrnUihvhvYA57P1onBTYvy3XWx+
+rbVmIFLQsDHKF2HvtpfdZlMLuszfpc0jJN0V5M8e1cZzPwD9adVab2/D07MB5h2+
+R5zzvY6hYJ8fwt5cSBKTdnFzOctmpGe8IXp4704HGGHWlkVJV60VCbkk1a2FfTro
+/CK7RHFilQc16TlHl82M3lRwFxl9nbt79SdmAnHXagWhXk+dU15oYfAD4qS6qiyv
+5gpQEdDas0pfKqBBbkVRojjRE8W7Z4Wg8ShESDkeMvaAKnyug4FDVAV8t/l5F9Ce
+jUhrdtMLsI/gTEP8PrpeikaY+0MFU/Hvjs0yE71sk3PwD1K6VaXUfpoWD1OroMiB
+6Xfpjda/SlYHBACNUkuQTVvjO05rN3ki49cBEXE0MZ1UKLL1ongXMwTBQSODitrB
+HKNEEz87yqQZps2323fw9645aWdnBjbhn2/4lVfBU80mhWj1vz/HP99Lei+cVyjT
+qlQ0OBqIK8y4Tas1tvYCHQDJ8eJhb5zmsjLBxS4l1maNV3l41n9dXMp7PMetMCMD
+HQDiXe5AjJCogFwJ+h/2wRbz953nokPQcY8/pzLCAgICZQ==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q256_t1862.pem b/test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q256_t1862.pem
new file mode 100644
index 000000000000..b8b691e54c50
--- /dev/null
+++ b/test/recipes/20-test_dhparam_check_data/valid/dhx_p3072_q256_t1862.pem
@@ -0,0 +1,20 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIIDVgKCAYEA7vFyaD61/aB6D3DnJ0zyPm+OjB8fQgP/2CXCPjoISCXzgVZ8JISE
+Sv0OwXTUIG4F9135mFkp3/V3/yx5RqZnzPdHuPM3btQSUHDKYjEjMG2dWFdg7V2d
+Fy4RwQreMfUW+rDH2b8wJPhOj+xvhd7FJ6LQ7m17TmtPW3c9POW4Tl+UwqpNoeMm
+p8kVkWrapeGfNFIJR0xXhZ7BMwlaq+Pbc2PaVX/hBClohpmgsxBtqAU5Ou4Tmmpt
+1LEUxCqJH6w96+uPmpk1Hl3zst7W1ZHkGMPS0ndnHop3FHoojdME4FZdwYhsvTIk
+g/8qY8sLfp0SFx4RutG1tRVda8iVXmDVj6wwKQh7/g3MgEegNnf+tkxUoxW08ExT
+xjgjblzsTuBlOcDOelX5kshZPSdYowGwQT5b/wlOT0iH92CHNZhjQktxqxbA02Du
+HmsdhFSEAirxZUpS4c0xcbaWeb1rSpVRl3HpF/DLSwsRlwg0/tPpo8KjwPogOBST
+kZURpnBweLRlAoIBgQDJu6LVBnp9P5HfzqO0gX4zWxYIl9I9ZFe235KJmyqIDk6g
+njmTlhMKgdF+WUKeI3u3wjZF+TOTQ1tV0CdU3fFd83pAwW5nSiFIEwhbKF8drV55
+H6D17GBVh8bYUyDZvFT6HPbaRCH1/tfoMYZ5QGlusHzGjObkPBNc77CDtfE3XVyT
+iDAXRbmkAMrR9vQ45hJO02vQs+ugtsuwc4p2aR9ctvnqwuBUrHAXbXFHJA63R76a
+Qwl/A2nxNMbH/JWrtObGwdGVLir8/cVBKiyKB83ruCbLa9Mxwlv1pRX5B2mFI4I2
+bfa/E1+w2c66aBcG5dXchxfA0klwb2kKHb6ZOVJkdnrOW04hXxbpdwda9aXn5Hzi
+xFtNogsLeOVKyNRyeknFtNKhGcFTjNYrZErTtL+LCN8et6KrAw5H7ca6b1VoYOGV
+zniFr5zjeVCLP/tur76lzwEbR5zwO3h4h8+Ng8wdvvXXEToewhfhYOwvPsl+BVxC
+iD0F++0jhHSByedZyqYCIQCeC+q7jPwO8lv400d+z03nNgPTGOPXBTPf47M6tMyt
+YTAnAyEAjBNHdTwkQRtyDm9si3a+eaQ6Su8RJx77eChqv6mU9x8CAgHv
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_data/pkcs3-2-1024.der b/test/recipes/20-test_dhparam_data/pkcs3-2-1024.der
new file mode 100644
index 000000000000..9cae01ca83ec
--- /dev/null
+++ b/test/recipes/20-test_dhparam_data/pkcs3-2-1024.der
Binary files differ
diff --git a/test/recipes/20-test_dhparam_data/pkcs3-2-1024.pem b/test/recipes/20-test_dhparam_data/pkcs3-2-1024.pem
new file mode 100644
index 000000000000..7e9b2304da15
--- /dev/null
+++ b/test/recipes/20-test_dhparam_data/pkcs3-2-1024.pem
@@ -0,0 +1,5 @@
+-----BEGIN DH PARAMETERS-----
+MIGHAoGBANbtqnwjHSC1EIivUM8e2xuSgG1k4LfetWkRNvjf0k+RBKGdtkbCH/0w
+Jcdt1v4vC1WeMTFMFEZTEwp0e4LyoD5WQbU76ndlOKXiqSCOwH1v/URH604q0eFP
+gXDfnSLoKLqSDjLRkfbBfpyJVrgxqQxMHXXkQxDH2SfBnq6pouizAgEC
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_data/pkcs3-2-2048.der b/test/recipes/20-test_dhparam_data/pkcs3-2-2048.der
new file mode 100644
index 000000000000..23dbab1ad183
--- /dev/null
+++ b/test/recipes/20-test_dhparam_data/pkcs3-2-2048.der
Binary files differ
diff --git a/test/recipes/20-test_dhparam_data/pkcs3-2-2048.pem b/test/recipes/20-test_dhparam_data/pkcs3-2-2048.pem
new file mode 100644
index 000000000000..1b18d4efadfe
--- /dev/null
+++ b/test/recipes/20-test_dhparam_data/pkcs3-2-2048.pem
@@ -0,0 +1,8 @@
+-----BEGIN DH PARAMETERS-----
+MIIBCAKCAQEAnpsK4ZwLxWUBcDH8BlIvjnUStc9etrEq/dGTqWq5d6pOldZ/JzYn
+qrfIQCicE5bRF2VSZ7ceg4tzO/dtfg86vnzB9Q0oiRM2NuLS0clPZ+RH0wvWyV9Y
+/PgnSqFOaURmIKln0vWy8yJJcjpUL4gFl+S/G0sf6aIRoe/GsJE/2wocD2/LkK1t
+6tyunTbp7oijar1/0Q3L0rVazkgXAJDtunWlS4t1DbFgx04na7mD/wGDAM7SqvnU
+P7c8uXlWmIZHH9okmykgiMI3+TU3ESFyfK0ABrbK7qHxPjpYJasiv4T0MsryH0e4
+4NI/Z2HyNAeKovaq9paBsui5drN5rSSNuwIBAg==
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_data/pkcs3-5-1024.der b/test/recipes/20-test_dhparam_data/pkcs3-5-1024.der
new file mode 100644
index 000000000000..c2fbc23287f5
--- /dev/null
+++ b/test/recipes/20-test_dhparam_data/pkcs3-5-1024.der
Binary files differ
diff --git a/test/recipes/20-test_dhparam_data/pkcs3-5-1024.pem b/test/recipes/20-test_dhparam_data/pkcs3-5-1024.pem
new file mode 100644
index 000000000000..fc93d470a249
--- /dev/null
+++ b/test/recipes/20-test_dhparam_data/pkcs3-5-1024.pem
@@ -0,0 +1,5 @@
+-----BEGIN DH PARAMETERS-----
+MIGHAoGBAINLNshx3qDIHPR4UMK7SDgzdBa1G5j4GTsw+Nquge7P6JL/4zKwjuny
+IUzbcD8bcyhayS8yRYoKg7MAd3ApStKUHhG5h8LqRQO5I9iXdch8u+Dsmpb1Gf8+
+JFTOHsoMf4wHwGLr883TODBmbP4g9AZKEAlyKWcI6Qvulhk6fk+/AgEF
+-----END DH PARAMETERS-----
diff --git a/test/recipes/20-test_dhparam_data/x942-0-1024.der b/test/recipes/20-test_dhparam_data/x942-0-1024.der
new file mode 100644
index 000000000000..41db9506cd4f
--- /dev/null
+++ b/test/recipes/20-test_dhparam_data/x942-0-1024.der
Binary files differ
diff --git a/test/recipes/20-test_dhparam_data/x942-0-1024.pem b/test/recipes/20-test_dhparam_data/x942-0-1024.pem
new file mode 100644
index 000000000000..045d36b13379
--- /dev/null
+++ b/test/recipes/20-test_dhparam_data/x942-0-1024.pem
@@ -0,0 +1,9 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIIBOwKBgQDskzkX4bMaCeRWmyrR5VhoYbigr3UPU2eHTm8uPYjxUbQPBg+8sw64
+gklilB3BCja0snLRqN2DOgg/JBJhT+39f0nynPpjOiJSLf3giOCH/+eKOz+eLB2z
+MuJkB7HAI7VL4xOJsCJ0K08/Tu6/qoS/gBVsAnaard4LixDcQ9dQbwKBgQDmgfeg
+hL8896pzlqqr7QSw/oig+EN8HutbvA6BYaPMFyz0AGRP29MrQd3vMNV+OBQdjbgA
+wFR/V5PqZM5/pUcoAQSfPKaGFj2QmBabOskDXPp1aqJzQMnlz6FGB/ttaScPey9P
+gaN98WuvA+dy7jljoQlCQT+73jRbYfM5Uj6CxgIVAL5HGyZDqkbfJsbBDm3PYeIM
+qJqvMBoDFQD8mX9cL0Pjbag03XhoqT6ygu6WFAIBXw==
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/20-test_enc.t b/test/recipes/20-test_enc.t
new file mode 100644
index 000000000000..c5391d53f252
--- /dev/null
+++ b/test/recipes/20-test_enc.t
@@ -0,0 +1,75 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Spec::Functions qw/catfile/;
+use File::Copy;
+use File::Compare qw/compare_text/;
+use File::Basename;
+use OpenSSL::Test qw/:DEFAULT srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+setup("test_enc");
+plan skip_all => "Deprecated functions are disabled in this OpenSSL build"
+ if disabled("deprecated");
+
+# We do it this way, because setup() may have moved us around,
+# so the directory portion of $0 might not be correct any more.
+# However, the name hasn't changed.
+my $testsrc = srctop_file("test","recipes",basename($0));
+
+my $test = catfile(".", "p");
+
+my $cmd = "openssl";
+my $provpath = bldtop_dir("providers");
+my @prov = ("-provider-path", $provpath, "-provider", "default");
+push @prov, ("-provider", "legacy") unless disabled("legacy");
+my $ciphersstatus = undef;
+my @ciphers =
+ map { s/^\s+//; s/\s+$//; split /\s+/ }
+ run(app([$cmd, "list", "-cipher-commands"]),
+ capture => 1, statusvar => \$ciphersstatus);
+@ciphers = grep {!/^(bf|cast|des$|des-cbc|des-cfb|des-ecb|des-ofb|desx|idea
+ |rc2|rc4|seed)/x} @ciphers
+ if disabled("legacy");
+
+plan tests => 2 + (scalar @ciphers)*2;
+
+ SKIP: {
+ skip "Problems getting ciphers...", 1 + scalar(@ciphers)
+ unless ok($ciphersstatus, "Running 'openssl list -cipher-commands'");
+ unless (ok(copy($testsrc, $test), "Copying $testsrc to $test")) {
+ diag($!);
+ skip "Not initialized, skipping...", scalar(@ciphers);
+ }
+
+ foreach my $c (@ciphers) {
+ my %variant = ("$c" => [],
+ "$c base64" => [ "-a" ]);
+
+ foreach my $t (sort keys %variant) {
+ my $cipherfile = "$test.$c.cipher";
+ my $clearfile = "$test.$c.clear";
+ my @e = ( "$c", "-bufsize", "113", @{$variant{$t}}, "-e", "-k", "test" );
+ my @d = ( "$c", "-bufsize", "157", @{$variant{$t}}, "-d", "-k", "test" );
+ if ($c eq "cat") {
+ $cipherfile = "$test.cipher";
+ $clearfile = "$test.clear";
+ @e = ( "enc", @{$variant{$t}}, "-e" );
+ @d = ( "enc", @{$variant{$t}}, "-d" );
+ }
+
+ ok(run(app([$cmd, @e, @prov, "-in", $test, "-out", $cipherfile]))
+ && run(app([$cmd, @d, @prov, "-in", $cipherfile, "-out", $clearfile]))
+ && compare_text($test,$clearfile) == 0, $t);
+ }
+ }
+}
diff --git a/test/recipes/20-test_enc_more.t b/test/recipes/20-test_enc_more.t
new file mode 100644
index 000000000000..0bddac00ebd9
--- /dev/null
+++ b/test/recipes/20-test_enc_more.t
@@ -0,0 +1,66 @@
+#! /usr/bin/env perl
+# Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2017, Oracle and/or its affiliates. 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
+
+
+use strict;
+use warnings;
+
+use File::Spec::Functions qw/catfile/;
+use File::Copy;
+use File::Compare qw/compare_text/;
+use File::Basename;
+use OpenSSL::Test qw/:DEFAULT srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+
+setup("test_evp_more");
+
+my $testsrc = srctop_file("test", "recipes", basename($0));
+
+my $cipherlist = undef;
+my $plaintext = catfile(".", "testdatafile");
+my $fail = "";
+my $cmd = "openssl";
+my $provpath = bldtop_dir("providers");
+my @prov = ("-provider-path", $provpath, "-provider", "default");
+push @prov, ("-provider", "legacy") unless disabled("legacy");
+
+my $ciphersstatus = undef;
+my @ciphers =
+ grep(! /wrap|^$|^[^-]/,
+ (map { split /\s+/ }
+ run(app([$cmd, "enc", "-list"]),
+ capture => 1, statusvar => \$ciphersstatus)));
+@ciphers = grep {!/^-(bf|blowfish|cast|des$|des-cbc|des-cfb|des-ecb|des-ofb
+ |desx|idea|rc2|rc4|seed)/x} @ciphers
+ if disabled("legacy");
+
+plan tests => 2 + scalar @ciphers;
+
+SKIP: {
+ skip "Problems getting ciphers...", 1 + scalar(@ciphers)
+ unless ok($ciphersstatus, "Running 'openssl enc -list'");
+ unless (ok(copy($testsrc, $plaintext), "Copying $testsrc to $plaintext")) {
+ diag($!);
+ skip "Not initialized, skipping...", scalar(@ciphers);
+ }
+
+ foreach my $cipher (@ciphers) {
+ my $ciphername = substr $cipher, 1;
+ my $cipherfile = "$plaintext.$ciphername.cipher";
+ my $clearfile = "$plaintext.$ciphername.clear";
+ my @common = ( $cmd, "enc", "$cipher", "-k", "test" );
+
+ ok(run(app([@common, @prov, "-e", "-in", $plaintext, "-out", $cipherfile]))
+ && compare_text($plaintext, $cipherfile) != 0
+ && run(app([@common, @prov, "-d", "-in", $cipherfile, "-out", $clearfile]))
+ && compare_text($plaintext, $clearfile) == 0
+ , $ciphername);
+ }
+}
diff --git a/test/recipes/20-test_kdf.t b/test/recipes/20-test_kdf.t
new file mode 100755
index 000000000000..44b066497c64
--- /dev/null
+++ b/test/recipes/20-test_kdf.t
@@ -0,0 +1,112 @@
+#! /usr/bin/env perl
+# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_kdf");
+
+my @kdf_tests = (
+ { cmd => [qw{openssl kdf -keylen 16 -digest SHA256 -kdfopt secret:secret -kdfopt seed:seed TLS1-PRF}],
+ expected => '8E:4D:93:25:30:D7:65:A0:AA:E9:74:C3:04:73:5E:CC',
+ desc => 'TLS1-PRF SHA256' },
+ { cmd => [qw{openssl kdf -keylen 16 -digest MD5-SHA1 -kdfopt secret:secret -kdfopt seed:seed TLS1-PRF}],
+ expected => '65:6F:31:CB:04:03:D6:51:E2:E8:71:F8:20:04:AB:BA',
+ desc => 'TLS1-PRF MD5-SHA1' },
+ { cmd => [qw{openssl kdf -keylen 10 -digest SHA256 -kdfopt key:secret -kdfopt salt:salt -kdfopt info:label HKDF}],
+ expected => '2a:c4:36:9f:52:59:96:f8:de:13',
+ desc => 'HKDF SHA256' },
+ { cmd => [qw{openssl kdf -keylen 25 -digest SHA256 -kdfopt pass:passwordPASSWORDpassword -kdfopt salt:saltSALTsaltSALTsaltSALTsaltSALTsalt -kdfopt iter:4096 PBKDF2}],
+ expected => '34:8C:89:DB:CB:D3:2B:2F:32:D8:14:B8:11:6E:84:CF:2B:17:34:7E:BC:18:00:18:1C',
+ desc => 'PBKDF2 SHA256'},
+ { cmd => [qw{openssl kdf -keylen 64 -mac KMAC128 -kdfopt maclen:20 -kdfopt hexkey:b74a149a161546f8c20b06ac4ed4 -kdfopt hexinfo:348a37a27ef1282f5f020dcc -kdfopt hexsalt:3638271ccd68a25dc24ecddd39ef3f89 SSKDF}],
+ expected => 'e9:c1:84:53:a0:62:b5:3b:db:fc:bb:5a:34:bd:b8:e5:e7:07:ee:bb:5d:d1:34:42:43:d8:cf:c2:c2:e6:33:2f:91:bd:a5:86:f3:7d:e4:8a:65:d4:c5:14:fd:ef:aa:1e:67:54:f3:73:d2:38:e1:95:ae:15:7e:1d:e8:14:98:03',
+ desc => 'SSKDF KMAC128'},
+ { cmd => [qw{openssl kdf -keylen 16 -mac HMAC -digest SHA256 -kdfopt hexkey:b74a149a161546f8c20b06ac4ed4 -kdfopt hexinfo:348a37a27ef1282f5f020dcc -kdfopt hexsalt:3638271ccd68a25dc24ecddd39ef3f89 SSKDF}],
+ expected => '44:f6:76:e8:5c:1b:1a:8b:bc:3d:31:92:18:63:1c:a3',
+ desc => 'SSKDF HMAC SHA256'},
+ { cmd => [qw{openssl kdf -keylen 14 -digest SHA224 -kdfopt hexkey:6dbdc23f045488e4062757b06b9ebae183fc5a5946d80db93fec6f62ec07e3727f0126aed12ce4b262f47d48d54287f81d474c7c3b1850e9 -kdfopt hexinfo:a1b2c3d4e54341565369643c832e9849dcdba71e9a3139e606e095de3c264a66e98a165854cd07989b1ee0ec3f8dbe SSKDF}],
+ expected => 'a4:62:de:16:a8:9d:e8:46:6e:f5:46:0b:47:b8',
+ desc => 'SSKDF HASH SHA224'},
+ { cmd => [qw{openssl kdf -keylen 16 -digest SHA256 -kdfopt hexkey:0102030405 -kdfopt hexxcghash:06090A -kdfopt hexsession_id:01020304 -kdfopt type:A SSHKDF}],
+ expected => '5C:49:94:47:3B:B1:53:3A:58:EB:19:42:04:D3:78:16',
+ desc => 'SSHKDF SHA256'},
+
+ # Using the -kdfopt digest: option instead of -digest
+ { cmd => [qw{openssl kdf -keylen 16 -kdfopt digest:SHA256 -kdfopt secret:secret -kdfopt seed:seed TLS1-PRF}],
+ expected => '8E:4D:93:25:30:D7:65:A0:AA:E9:74:C3:04:73:5E:CC',
+ desc => 'TLS1-PRF SHA256' },
+ { cmd => [qw{openssl kdf -keylen 16 -kdfopt digest:MD5-SHA1 -kdfopt secret:secret -kdfopt seed:seed TLS1-PRF}],
+ expected => '65:6F:31:CB:04:03:D6:51:E2:E8:71:F8:20:04:AB:BA',
+ desc => 'TLS1-PRF MD5-SHA1' },
+ { cmd => [qw{openssl kdf -keylen 10 -kdfopt digest:SHA256 -kdfopt key:secret -kdfopt salt:salt -kdfopt info:label HKDF}],
+ expected => '2a:c4:36:9f:52:59:96:f8:de:13',
+ desc => 'HKDF SHA256' },
+ { cmd => [qw{openssl kdf -keylen 25 -kdfopt digest:SHA256 -kdfopt pass:passwordPASSWORDpassword -kdfopt salt:saltSALTsaltSALTsaltSALTsaltSALTsalt -kdfopt iter:4096 PBKDF2}],
+ expected => '34:8C:89:DB:CB:D3:2B:2F:32:D8:14:B8:11:6E:84:CF:2B:17:34:7E:BC:18:00:18:1C',
+ desc => 'PBKDF2 SHA256'},
+ { cmd => [qw{openssl kdf -keylen 64 -mac KMAC128 -kdfopt maclen:20 -kdfopt hexkey:b74a149a161546f8c20b06ac4ed4 -kdfopt hexinfo:348a37a27ef1282f5f020dcc -kdfopt hexsalt:3638271ccd68a25dc24ecddd39ef3f89 SSKDF}],
+ expected => 'e9:c1:84:53:a0:62:b5:3b:db:fc:bb:5a:34:bd:b8:e5:e7:07:ee:bb:5d:d1:34:42:43:d8:cf:c2:c2:e6:33:2f:91:bd:a5:86:f3:7d:e4:8a:65:d4:c5:14:fd:ef:aa:1e:67:54:f3:73:d2:38:e1:95:ae:15:7e:1d:e8:14:98:03',
+ desc => 'SSKDF KMAC128'},
+ { cmd => [qw{openssl kdf -keylen 16 -mac HMAC -kdfopt digest:SHA256 -kdfopt hexkey:b74a149a161546f8c20b06ac4ed4 -kdfopt hexinfo:348a37a27ef1282f5f020dcc -kdfopt hexsalt:3638271ccd68a25dc24ecddd39ef3f89 SSKDF}],
+ expected => '44:f6:76:e8:5c:1b:1a:8b:bc:3d:31:92:18:63:1c:a3',
+ desc => 'SSKDF HMAC SHA256'},
+ { cmd => [qw{openssl kdf -keylen 14 -kdfopt digest:SHA224 -kdfopt hexkey:6dbdc23f045488e4062757b06b9ebae183fc5a5946d80db93fec6f62ec07e3727f0126aed12ce4b262f47d48d54287f81d474c7c3b1850e9 -kdfopt hexinfo:a1b2c3d4e54341565369643c832e9849dcdba71e9a3139e606e095de3c264a66e98a165854cd07989b1ee0ec3f8dbe SSKDF}],
+ expected => 'a4:62:de:16:a8:9d:e8:46:6e:f5:46:0b:47:b8',
+ desc => 'SSKDF HASH SHA224'},
+ { cmd => [qw{openssl kdf -keylen 16 -kdfopt digest:SHA256 -kdfopt hexkey:0102030405 -kdfopt hexxcghash:06090A -kdfopt hexsession_id:01020304 -kdfopt type:A SSHKDF}],
+ expected => '5C:49:94:47:3B:B1:53:3A:58:EB:19:42:04:D3:78:16',
+ desc => 'SSHKDF SHA256'},
+
+ # Additionally using -kdfopt mac: instead of -mac
+ { cmd => [qw{openssl kdf -keylen 64 -kdfopt mac:KMAC128 -kdfopt maclen:20 -kdfopt hexkey:b74a149a161546f8c20b06ac4ed4 -kdfopt hexinfo:348a37a27ef1282f5f020dcc -kdfopt hexsalt:3638271ccd68a25dc24ecddd39ef3f89 SSKDF}],
+ expected => 'e9:c1:84:53:a0:62:b5:3b:db:fc:bb:5a:34:bd:b8:e5:e7:07:ee:bb:5d:d1:34:42:43:d8:cf:c2:c2:e6:33:2f:91:bd:a5:86:f3:7d:e4:8a:65:d4:c5:14:fd:ef:aa:1e:67:54:f3:73:d2:38:e1:95:ae:15:7e:1d:e8:14:98:03',
+ desc => 'SSKDF KMAC128'},
+ { cmd => [qw{openssl kdf -keylen 16 -kdfopt mac:HMAC -kdfopt digest:SHA256 -kdfopt hexkey:b74a149a161546f8c20b06ac4ed4 -kdfopt hexinfo:348a37a27ef1282f5f020dcc -kdfopt hexsalt:3638271ccd68a25dc24ecddd39ef3f89 SSKDF}],
+ expected => '44:f6:76:e8:5c:1b:1a:8b:bc:3d:31:92:18:63:1c:a3',
+ desc => 'SSKDF HMAC SHA256'},
+);
+
+my @scrypt_tests = (
+ { cmd => [qw{openssl kdf -keylen 64 -kdfopt pass:password -kdfopt salt:NaCl -kdfopt n:1024 -kdfopt r:8 -kdfopt p:16 -kdfopt maxmem_bytes:10485760 id-scrypt}],
+ expected => 'fd:ba:be:1c:9d:34:72:00:78:56:e7:19:0d:01:e9:fe:7c:6a:d7:cb:c8:23:78:30:e7:73:76:63:4b:37:31:62:2e:af:30:d9:2e:22:a3:88:6f:f1:09:27:9d:98:30:da:c7:27:af:b9:4a:83:ee:6d:83:60:cb:df:a2:cc:06:40',
+ desc => 'SCRYPT' },
+);
+
+push @kdf_tests, @scrypt_tests unless disabled("scrypt");
+
+plan tests => scalar @kdf_tests;
+
+foreach (@kdf_tests) {
+ ok(compareline($_->{cmd}, $_->{expected}), $_->{desc});
+}
+
+# Check that the stdout output matches the expected value.
+sub compareline {
+ my ($cmdarray, $expect) = @_;
+ if (defined($expect)) {
+ $expect = uc $expect;
+ }
+
+ my @lines = run(app($cmdarray), capture => 1);
+
+ if (defined($expect)) {
+ if ($lines[0] =~ m|^\Q${expect}\E\R$|) {
+ return 1;
+ } else {
+ print "Got: $lines[0]";
+ print "Exp: $expect\n";
+ return 0;
+ }
+ }
+ return 0;
+}
diff --git a/test/recipes/20-test_legacy_okay.t b/test/recipes/20-test_legacy_okay.t
new file mode 100755
index 000000000000..183499f3fd93
--- /dev/null
+++ b/test/recipes/20-test_legacy_okay.t
@@ -0,0 +1,23 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+
+setup("test_legacy");
+
+plan tests => 3;
+
+ok(run(app(['openssl', 'rand', '-out', 'rand.txt', '256'])), "Generate random file");
+
+ok(run(app(['openssl', 'dgst', '-sha256', 'rand.txt'])), "Generate a digest");
+
+ok(!run(app(['openssl', 'dgst', '-sha256', '-propquery', 'foo=1',
+ 'rand.txt'])), "Fail to generate a digest");
diff --git a/test/recipes/20-test_mac.t b/test/recipes/20-test_mac.t
new file mode 100644
index 000000000000..cc25e774535f
--- /dev/null
+++ b/test/recipes/20-test_mac.t
@@ -0,0 +1,224 @@
+#! /usr/bin/env perl
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+use Storable qw(dclone);
+
+setup("test_mac");
+
+my @mac_tests = (
+ { cmd => [qw{openssl mac -digest SHA1 -macopt hexkey:000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F}],
+ type => 'HMAC',
+ input => unpack("H*", "Sample message for keylen=blocklen"),
+ expected => '5FD596EE78D5553C8FF4E72D266DFD192366DA29',
+ desc => 'HMAC SHA1' },
+ { cmd => [qw{openssl mac -macopt digest:SHA1 -macopt hexkey:000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F}],
+ type => 'HMAC',
+ input => unpack("H*", "Sample message for keylen=blocklen"),
+ expected => '5FD596EE78D5553C8FF4E72D266DFD192366DA29',
+ desc => 'HMAC SHA1 via -macopt' },
+ { cmd => [qw{openssl mac -cipher AES-256-GCM -macopt hexkey:4C973DBC7364621674F8B5B89E5C15511FCED9216490FB1C1A2CAA0FFE0407E5 -macopt hexiv:7AE8E2CA4EC500012E58495C}],
+ type => 'GMAC',
+ input => '68F2E77696CE7AE8E2CA4EC588E541002E58495C08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D0007',
+ expected => '00BDA1B7E87608BCBF470F12157F4C07',
+ desc => 'GMAC' },
+ { cmd => [qw{openssl mac -macopt cipher:AES-256-GCM -macopt hexkey:4C973DBC7364621674F8B5B89E5C15511FCED9216490FB1C1A2CAA0FFE0407E5 -macopt hexiv:7AE8E2CA4EC500012E58495C}],
+ type => 'GMAC',
+ input => '68F2E77696CE7AE8E2CA4EC588E541002E58495C08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D0007',
+ expected => '00BDA1B7E87608BCBF470F12157F4C07',
+ desc => 'GMAC via -macopt' },
+ { cmd => [qw{openssl mac -macopt hexkey:404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F -macopt xof:0}],
+ type => 'KMAC128',
+ input => '00010203',
+ expected => 'E5780B0D3EA6F7D3A429C5706AA43A00FADBD7D49628839E3187243F456EE14E',
+ desc => 'KMAC128' },
+ { cmd => [qw{openssl mac -macopt hexkey:404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F -macopt }, 'custom:My Tagged Application'],
+ type => 'KMAC256',
+ input => '00010203',
+ expected => '20C570C31346F703C9AC36C61C03CB64C3970D0CFC787E9B79599D273A68D2F7F69D4CC3DE9D104A351689F27CF6F5951F0103F33F4F24871024D9C27773A8DD',
+ desc => 'KMAC256' },
+ { cmd => [qw{openssl mac -macopt hexkey:404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F -macopt xof:1 -macopt}, 'custom:My Tagged Application'],
+ type => 'KMAC256',
+ input => '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7',
+ expected => 'D5BE731C954ED7732846BB59DBE3A8E30F83E77A4BFF4459F2F1C2B4ECEBB8CE67BA01C62E8AB8578D2D499BD1BB276768781190020A306A97DE281DCC30305D',
+ desc => 'KMAC256 with xof len of 64' },
+);
+
+my @siphash_tests = (
+ { cmd => [qw{openssl mac -macopt hexkey:000102030405060708090A0B0C0D0E0F}],
+ type => 'SipHash',
+ input => '00',
+ expected => 'da87c1d86b99af44347659119b22fc45',
+ desc => 'SipHash No input' }
+);
+
+my @cmac_tests = (
+ { cmd => [qw{openssl mac -cipher AES-256-CBC -macopt hexkey:0B122AC8F34ED1FE082A3625D157561454167AC145A10BBF77C6A70596D574F1}],
+ type => 'CMAC',
+ input => '498B53FDEC87EDCBF07097DCCDE93A084BAD7501A224E388DF349CE18959FE8485F8AD1537F0D896EA73BEDC7214713F',
+ expected => 'F62C46329B41085625669BAF51DEA66A',
+ desc => 'CMAC AES-256-CBC' },
+ { cmd => [qw{openssl mac -macopt cipher:AES-256-CBC -macopt hexkey:0B122AC8F34ED1FE082A3625D157561454167AC145A10BBF77C6A70596D574F1}],
+ type => 'CMAC',
+ input => '498B53FDEC87EDCBF07097DCCDE93A084BAD7501A224E388DF349CE18959FE8485F8AD1537F0D896EA73BEDC7214713F',
+ expected => 'F62C46329B41085625669BAF51DEA66A',
+ desc => 'CMAC AES-256-CBC' },
+);
+
+my @poly1305_tests = (
+ { cmd => [qw{openssl mac -macopt hexkey:02000000000000000000000000000000ffffffffffffffffffffffffffffffff}],
+ type => 'Poly1305',
+ input => '02000000000000000000000000000000',
+ expected => '03000000000000000000000000000000',
+ desc => 'Poly1305 (wrap 2^128)' },
+);
+
+push @mac_tests, @siphash_tests unless disabled("siphash");
+push @mac_tests, @cmac_tests unless disabled("cmac");
+push @mac_tests, @poly1305_tests unless disabled("poly1305");
+
+my @mac_fail_tests = (
+ { cmd => [qw{openssl mac}],
+ type => 'KMAC128',
+ input => '00',
+ err => 'EVP_MAC_Init',
+ desc => 'KMAC128 Fail no key' },
+ { cmd => [qw{openssl mac -propquery unknown -macopt hexkey:404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F}],
+ type => 'KMAC128',
+ input => '00',
+ err => 'Invalid MAC name KMAC128',
+ desc => 'KMAC128 Fail unknown property' },
+ { cmd => [qw{openssl mac -cipher AES-128-CBC -macopt hexkey:00}],
+ type => 'HMAC',
+ input => '00',
+ err => 'MAC parameter error',
+ desc => 'HMAC given a cipher' },
+);
+
+my @siphash_fail_tests = (
+ { cmd => [qw{openssl mac}],
+ type => 'SipHash',
+ input => '00',
+ err => '',
+ desc => 'SipHash Fail no key' },
+);
+
+push @mac_fail_tests, @siphash_fail_tests unless disabled("siphash");
+
+plan tests => (scalar @mac_tests * 2) + scalar @mac_fail_tests;
+
+my $test_count = 0;
+
+foreach (@mac_tests) {
+ $test_count++;
+ ok(compareline($_->{cmd}, $_->{type}, $_->{input}, $_->{expected}, $_->{err}), $_->{desc});
+}
+foreach (@mac_tests) {
+ $test_count++;
+ ok(comparefile($_->{cmd}, $_->{type}, $_->{input}, $_->{expected}), $_->{desc});
+}
+
+foreach (@mac_fail_tests) {
+ $test_count++;
+ ok(compareline($_->{cmd}, $_->{type}, $_->{input}, $_->{expected}, $_->{err}), $_->{desc});
+}
+
+# Create a temp input file and save the input data into it, and
+# then compare the stdout output matches the expected value.
+sub compareline {
+ my $tmpfile = "input-$test_count.bin";
+ my ($cmdarray_orig, $type, $input, $expect, $err) = @_;
+ my $cmdarray = dclone $cmdarray_orig;
+ if (defined($expect)) {
+ $expect = uc $expect;
+ }
+ # Open a temporary input file and write $input to it
+ open(my $in, '>', $tmpfile) or die "Could not open file";
+ binmode($in);
+ my $bin = pack("H*", $input);
+ print $in $bin;
+ close $in;
+
+ # The last cmd parameter is the temporary input file we just created.
+ my @other = ('-in', $tmpfile, $type);
+ push @$cmdarray, @other;
+
+ my @lines = run(app($cmdarray), capture => 1);
+ # Not unlinking $tmpfile
+
+ if (defined($expect)) {
+ if ($lines[0] =~ m|^\Q${expect}\E\R$|) {
+ return 1;
+ } else {
+ print "Got: $lines[0]";
+ print "Exp: $expect\n";
+ return 0;
+ }
+ }
+ if (defined($err)) {
+ if (defined($lines[0])) {
+ $lines[0] =~ s/\s+$//;
+ if ($lines[0] eq $err) {
+ return 1;
+ } else {
+ print "Got: $lines[0]";
+ print "Exp: $err\n";
+ return 0;
+ }
+ } else {
+ # expected an error
+ return 1;
+ }
+ }
+ return 0;
+}
+
+# Create a temp input file and save the input data into it, and
+# use the '-bin -out <file>' commandline options to save results out to a file.
+# Read this file back in and check its output matches the expected value.
+sub comparefile {
+ my $tmpfile = "input-$test_count.bin";
+ my $outfile = "output-$test_count.bin";
+ my ($cmdarray, $type, $input, $expect) = @_;
+ $expect = uc $expect;
+
+ # Open a temporary input file and write $input to it
+ open(my $in, '>', $tmpfile) or die "Could not open file";
+ binmode($in);
+ my $bin = pack("H*", $input);
+ print $in $bin;
+ close $in;
+
+ my @other = ("-binary", "-in", $tmpfile, "-out", $outfile, $type);
+ push @$cmdarray, @other;
+
+ run(app($cmdarray));
+ # Not unlinking $tmpfile
+
+ open(my $out, '<', $outfile) or die "Could not open file";
+ binmode($out);
+ my $buffer;
+ my $BUFSIZE = 1024;
+ read($out, $buffer, $BUFSIZE) or die "unable to read";
+ my $line = uc unpack("H*", $buffer);
+ close($out);
+ # Not unlinking $outfile
+
+ if ($line eq $expect) {
+ return 1;
+ } else {
+ print "Got: $line\n";
+ print "Exp: $expect\n";
+ return 0;
+ }
+}
diff --git a/test/recipes/20-test_passwd.t b/test/recipes/20-test_passwd.t
new file mode 100644
index 000000000000..bd2a2ae46947
--- /dev/null
+++ b/test/recipes/20-test_passwd.t
@@ -0,0 +1,135 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_passwd");
+
+# The following tests are an adaptation of those in
+# https://www.akkadia.org/drepper/SHA-crypt.txt
+my @sha_tests =
+ ({ type => '5',
+ salt => 'saltstring',
+ key => 'Hello world!',
+ expected => '$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5' },
+ { type => '5',
+ salt => 'rounds=10000$saltstringsaltstring',
+ key => 'Hello world!',
+ expected => '$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2.opqey6IcA' },
+ { type => '5',
+ salt => 'rounds=5000$toolongsaltstring',
+ key => 'This is just a test',
+ expected => '$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8mGRcvxa5' },
+ { type => '5',
+ salt => 'rounds=1400$anotherlongsaltstring',
+ key => 'a very much longer text to encrypt. This one even stretches over morethan one line.',
+ expected => '$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12oP84Bnq1' },
+ { type => '5',
+ salt => 'rounds=10$roundstoolow',
+ key => 'the minimum number is still observed',
+ expected => '$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL972bIC' },
+ { type => '6',
+ salt => 'saltstring',
+ key => 'Hello world!',
+ expected => '$6$saltstring$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJuesI68u4OTLiBFdcbYEdFCoEOfaS35inz1' },
+ { type => '6',
+ salt => 'rounds=10000$saltstringsaltstring',
+ key => 'Hello world!',
+ expected => '$6$rounds=10000$saltstringsaltst$OW1/O6BYHV6BcXZu8QVeXbDWra3Oeqh0sbHbbMCVNSnCM/UrjmM0Dp8vOuZeHBy/YTBmSK6H9qs/y3RnOaw5v.' },
+ { type => '6',
+ salt => 'rounds=5000$toolongsaltstring',
+ key => 'This is just a test',
+ expected => '$6$rounds=5000$toolongsaltstrin$lQ8jolhgVRVhY4b5pZKaysCLi0QBxGoNeKQzQ3glMhwllF7oGDZxUhx1yxdYcz/e1JSbq3y6JMxxl8audkUEm0' },
+ { type => '6',
+ salt => 'rounds=1400$anotherlongsaltstring',
+ key => 'a very much longer text to encrypt. This one even stretches over morethan one line.',
+ expected => '$6$rounds=1400$anotherlongsalts$POfYwTEok97VWcjxIiSOjiykti.o/pQs.wPvMxQ6Fm7I6IoYN3CmLs66x9t0oSwbtEW7o7UmJEiDwGqd8p4ur1' },
+ { type => '6',
+ salt => 'rounds=10$roundstoolow',
+ key => 'the minimum number is still observed',
+ expected => '$6$rounds=1000$roundstoolow$kUMsbe306n21p9R.FRkW3IGn.S9NPN0x50YhH1xhLsPuWGsUSklZt58jaTfF4ZEQpyUNGc0dqbpBYYBaHHrsX.' }
+ );
+# From the same source as above, these tests use a number of rounds > 10000. They are separated because this can
+# cause out of memory problems in the address sanitizer in the no-cache-fetch build.
+my @sha_high_rounds_tests =
+ ({ type => '5',
+ salt => 'rounds=77777$short',
+ key => 'we have a short salt string but not a short password',
+ expected => '$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/' },
+ { type => '5',
+ salt => 'rounds=123456$asaltof16chars..',
+ key => 'a short string',
+ expected => '$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/cZKmF/wJvD' },
+ { type => '6',
+ salt => 'rounds=77777$short',
+ key => 'we have a short salt string but not a short password',
+ expected => '$6$rounds=77777$short$WuQyW2YR.hBNpjjRhpYD/ifIw05xdfeEyQoMxIXbkvr0gge1a1x3yRULJ5CCaUeOxFmtlcGZelFl5CxtgfiAc0' },
+ { type => '6',
+ salt => 'rounds=123456$asaltof16chars..',
+ key => 'a short string',
+ expected => '$6$rounds=123456$asaltof16chars..$BtCwjqMJGx5hrJhZywWvt0RLE8uZ4oPwcelCjmw2kSYu.Ec6ycULevoBK25fs2xXgMNrCzIMVcgEJAstJeonj1' },
+ );
+
+plan tests => 9 + scalar @sha_tests + scalar @sha_high_rounds_tests;
+
+
+ok(compare1stline_re([qw{openssl passwd -1 password}], '^\$1\$.{8}\$.{22}\R$'),
+ 'BSD style MD5 password with random salt');
+ok(compare1stline_re([qw{openssl passwd -apr1 password}], '^\$apr1\$.{8}\$.{22}\R$'),
+ 'Apache style MD5 password with random salt');
+ok(compare1stline_re([qw{openssl passwd -5 password}], '^\$5\$.{16}\$.{43}\R$'),
+ 'SHA256 password with random salt');
+ok(compare1stline_re([qw{openssl passwd -6 password}], '^\$6\$.{16}\$.{86}\R$'),
+ 'Apache SHA512 password with random salt');
+
+ok(compare1stline([qw{openssl passwd -salt xxxxxxxx -1 password}], '$1$xxxxxxxx$UYCIxa628.9qXjpQCjM4a.'),
+ 'BSD style MD5 password with salt xxxxxxxx');
+ok(compare1stline([qw{openssl passwd -salt xxxxxxxx -apr1 password}], '$apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0'),
+ 'Apache style MD5 password with salt xxxxxxxx');
+ok(compare1stline([qw{openssl passwd -salt xxxxxxxx -aixmd5 password}], 'xxxxxxxx$8Oaipk/GPKhC64w/YVeFD/'),
+ 'AIX style MD5 password with salt xxxxxxxx');
+ok(compare1stline([qw{openssl passwd -salt xxxxxxxxxxxxxxxx -5 password}], '$5$xxxxxxxxxxxxxxxx$fHytsM.wVD..zPN/h3i40WJRggt/1f73XkAC/gkelkB'),
+ 'SHA256 password with salt xxxxxxxxxxxxxxxx');
+ok(compare1stline([qw{openssl passwd -salt xxxxxxxxxxxxxxxx -6 password}], '$6$xxxxxxxxxxxxxxxx$VjGUrXBG6/8yW0f6ikBJVOb/lK/Tm9LxHJmFfwMvT7cpk64N9BW7ZQhNeMXAYFbOJ6HDG7wb0QpxJyYQn0rh81'),
+ 'SHA512 password with salt xxxxxxxxxxxxxxxx');
+
+foreach (@sha_tests) {
+ ok(compare1stline([qw{openssl passwd}, '-'.$_->{type}, '-salt', $_->{salt},
+ $_->{key}], $_->{expected}),
+ { 5 => 'SHA256', 6 => 'SHA512' }->{$_->{type}} . ' password with salt ' . $_->{salt});
+}
+
+SKIP: {
+ skip "Skipping high rounds tests in non caching builds", scalar @sha_high_rounds_tests
+ if disabled("cached-fetch");
+
+ foreach (@sha_high_rounds_tests) {
+ ok(compare1stline([qw{openssl passwd}, '-'.$_->{type}, '-salt', $_->{salt},
+ $_->{key}], $_->{expected}),
+ { 5 => 'SHA256', 6 => 'SHA512' }->{$_->{type}} . ' password with salt ' . $_->{salt});
+ }
+}
+
+sub compare1stline_re {
+ my ($cmdarray, $regexp) = @_;
+ my @lines = run(app($cmdarray), capture => 1);
+
+ return $lines[0] =~ m|$regexp|;
+}
+
+sub compare1stline {
+ my ($cmdarray, $str) = @_;
+ my @lines = run(app($cmdarray), capture => 1);
+
+ return $lines[0] =~ m|^\Q${str}\E\R$|;
+}
diff --git a/test/recipes/20-test_pkeyutl.t b/test/recipes/20-test_pkeyutl.t
new file mode 100644
index 000000000000..2c9540b70f93
--- /dev/null
+++ b/test/recipes/20-test_pkeyutl.t
@@ -0,0 +1,202 @@
+#! /usr/bin/env perl
+# Copyright 2018-2023 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
+
+use strict;
+use warnings;
+
+use File::Spec;
+use File::Basename;
+use OpenSSL::Test qw/:DEFAULT srctop_file ok_nofips/;
+use OpenSSL::Test::Utils;
+use File::Compare qw/compare_text/;
+
+setup("test_pkeyutl");
+
+plan tests => 14;
+
+# For the tests below we use the cert itself as the TBS file
+
+SKIP: {
+ skip "Skipping tests that require EC, SM2 or SM3", 4
+ if disabled("ec") || disabled("sm2") || disabled("sm3");
+
+ # SM2
+ ok_nofips(run(app(([ 'openssl', 'pkeyutl', '-sign',
+ '-in', srctop_file('test', 'certs', 'sm2.pem'),
+ '-inkey', srctop_file('test', 'certs', 'sm2.key'),
+ '-out', 'sm2.sig', '-rawin',
+ '-digest', 'sm3', '-pkeyopt', 'distid:someid']))),
+ "Sign a piece of data using SM2");
+ ok_nofips(run(app(([ 'openssl', 'pkeyutl',
+ '-verify', '-certin',
+ '-in', srctop_file('test', 'certs', 'sm2.pem'),
+ '-inkey', srctop_file('test', 'certs', 'sm2.pem'),
+ '-sigfile', 'sm2.sig', '-rawin',
+ '-digest', 'sm3', '-pkeyopt', 'distid:someid']))),
+ "Verify an SM2 signature against a piece of data");
+ ok_nofips(run(app(([ 'openssl', 'pkeyutl', '-encrypt',
+ '-in', srctop_file('test', 'data2.bin'),
+ '-inkey', srctop_file('test', 'certs', 'sm2-pub.key'),
+ '-pubin', '-out', 'sm2.enc']))),
+ "Encrypt a piece of data using SM2");
+ ok_nofips(run(app(([ 'openssl', 'pkeyutl', '-decrypt',
+ '-in', 'sm2.enc',
+ '-inkey', srctop_file('test', 'certs', 'sm2.key'),
+ '-out', 'sm2.dat'])))
+ && compare_text('sm2.dat',
+ srctop_file('test', 'data2.bin')) == 0,
+ "Decrypt a piece of data using SM2");
+}
+
+SKIP: {
+ skip "Skipping tests that require EC", 4
+ if disabled("ec");
+
+ # Ed25519
+ ok(run(app(([ 'openssl', 'pkeyutl', '-sign', '-in',
+ srctop_file('test', 'certs', 'server-ed25519-cert.pem'),
+ '-inkey', srctop_file('test', 'certs', 'server-ed25519-key.pem'),
+ '-out', 'Ed25519.sig', '-rawin']))),
+ "Sign a piece of data using Ed25519");
+ ok(run(app(([ 'openssl', 'pkeyutl', '-verify', '-certin', '-in',
+ srctop_file('test', 'certs', 'server-ed25519-cert.pem'),
+ '-inkey', srctop_file('test', 'certs', 'server-ed25519-cert.pem'),
+ '-sigfile', 'Ed25519.sig', '-rawin']))),
+ "Verify an Ed25519 signature against a piece of data");
+
+ # Ed448
+ ok(run(app(([ 'openssl', 'pkeyutl', '-sign', '-in',
+ srctop_file('test', 'certs', 'server-ed448-cert.pem'),
+ '-inkey', srctop_file('test', 'certs', 'server-ed448-key.pem'),
+ '-out', 'Ed448.sig', '-rawin']))),
+ "Sign a piece of data using Ed448");
+ ok(run(app(([ 'openssl', 'pkeyutl', '-verify', '-certin', '-in',
+ srctop_file('test', 'certs', 'server-ed448-cert.pem'),
+ '-inkey', srctop_file('test', 'certs', 'server-ed448-cert.pem'),
+ '-sigfile', 'Ed448.sig', '-rawin']))),
+ "Verify an Ed448 signature against a piece of data");
+}
+
+sub tsignverify {
+ my $testtext = shift;
+ my $privkey = shift;
+ my $pubkey = shift;
+ my @extraopts = @_;
+
+ my $data_to_sign = srctop_file('test', 'data.bin');
+ my $other_data = srctop_file('test', 'data2.bin');
+ my $sigfile = basename($privkey, '.pem') . '.sig';
+
+ my @args = ();
+ plan tests => 5;
+
+ @args = ('openssl', 'pkeyutl', '-sign',
+ '-inkey', $privkey,
+ '-out', $sigfile,
+ '-in', $data_to_sign);
+ push(@args, @extraopts);
+ ok(run(app([@args])),
+ $testtext.": Generating signature");
+
+ @args = ('openssl', 'pkeyutl', '-sign',
+ '-inkey', $privkey,
+ '-keyform', 'DER',
+ '-out', $sigfile,
+ '-in', $data_to_sign);
+ push(@args, @extraopts);
+ ok(!run(app([@args])),
+ $testtext.": Checking that mismatching keyform fails");
+
+ @args = ('openssl', 'pkeyutl', '-verify',
+ '-inkey', $privkey,
+ '-sigfile', $sigfile,
+ '-in', $data_to_sign);
+ push(@args, @extraopts);
+ ok(run(app([@args])),
+ $testtext.": Verify signature with private key");
+
+ @args = ('openssl', 'pkeyutl', '-verify',
+ '-keyform', 'PEM',
+ '-inkey', $pubkey, '-pubin',
+ '-sigfile', $sigfile,
+ '-in', $data_to_sign);
+ push(@args, @extraopts);
+ ok(run(app([@args])),
+ $testtext.": Verify signature with public key");
+
+ @args = ('openssl', 'pkeyutl', '-verify',
+ '-inkey', $pubkey, '-pubin',
+ '-sigfile', $sigfile,
+ '-in', $other_data);
+ push(@args, @extraopts);
+ ok(!run(app([@args])),
+ $testtext.": Expect failure verifying mismatching data");
+}
+
+SKIP: {
+ skip "RSA is not supported by this OpenSSL build", 1
+ if disabled("rsa");
+
+ subtest "RSA CLI signature generation and verification" => sub {
+ tsignverify("RSA",
+ srctop_file("test","testrsa.pem"),
+ srctop_file("test","testrsapub.pem"),
+ "-rawin", "-digest", "sha256");
+ };
+
+ subtest "RSA CLI signature and verification with pkeyopt" => sub {
+ tsignverify("RSA",
+ srctop_file("test","testrsa.pem"),
+ srctop_file("test","testrsapub.pem"),
+ "-rawin", "-digest", "sha256",
+ "-pkeyopt", "rsa_padding_mode:pss");
+ };
+}
+
+SKIP: {
+ skip "DSA is not supported by this OpenSSL build", 1
+ if disabled("dsa");
+
+ subtest "DSA CLI signature generation and verification" => sub {
+ tsignverify("DSA",
+ srctop_file("test","testdsa.pem"),
+ srctop_file("test","testdsapub.pem"),
+ "-rawin", "-digest", "sha256");
+ };
+}
+
+SKIP: {
+ skip "ECDSA is not supported by this OpenSSL build", 1
+ if disabled("ec");
+
+ subtest "ECDSA CLI signature generation and verification" => sub {
+ tsignverify("ECDSA",
+ srctop_file("test","testec-p256.pem"),
+ srctop_file("test","testecpub-p256.pem"),
+ "-rawin", "-digest", "sha256");
+ };
+}
+
+SKIP: {
+ skip "EdDSA is not supported by this OpenSSL build", 2
+ if disabled("ec");
+
+ subtest "Ed2559 CLI signature generation and verification" => sub {
+ tsignverify("Ed25519",
+ srctop_file("test","tested25519.pem"),
+ srctop_file("test","tested25519pub.pem"),
+ "-rawin");
+ };
+
+ subtest "Ed448 CLI signature generation and verification" => sub {
+ tsignverify("Ed448",
+ srctop_file("test","tested448.pem"),
+ srctop_file("test","tested448pub.pem"),
+ "-rawin");
+ };
+}
diff --git a/test/recipes/20-test_rand_config.t b/test/recipes/20-test_rand_config.t
new file mode 100644
index 000000000000..5919eef56d6b
--- /dev/null
+++ b/test/recipes/20-test_rand_config.t
@@ -0,0 +1,103 @@
+#! /usr/bin/env perl
+# Copyright 2019-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
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_rand_config");
+
+my @rand_tests = (
+ { drbg => 'HASH-DRBG',
+ digest => 'SHA2-512/256',
+ properties => '',
+ expected => ["HASH-DRBG", "digest: 'SHA2-512/256'"],
+ desc => 'HASH-DRBG SHA2-512/256' },
+
+ { drbg => 'HASH-DRBG',
+ digest => 'SHA3-256',
+ properties => '',
+ expected => ["HASH-DRBG", "digest: 'SHA3-512'"],
+ desc => 'HASH-DRBG SHA3/512' },
+
+ { drbg => 'HMAC-DRBG',
+ digest => 'SHA3-256',
+ properties => '',
+ expected => ["HMAC-DRBG", "mac: HMAC", "digest: 'SHA3-256'"],
+ desc => 'HMAC-DRBG SHA3/256' },
+
+ { cipher => 'AES-128-CTR',
+ expected => ["CTR-DRBG", "cipher: 'AES-128-CTR'"],
+ desc => 'CTR-DRBG AES-128 no DRBG' },
+ { expected => ["CTR-DRBG", "cipher: 'AES-256-CTR'"],
+ desc => 'CTR-DRBG AES-256 defaults' },
+);
+
+my @aria_tests = (
+ { drbg => 'CTR-DRBG',
+ cipher => 'ARIA-128-CTR',
+ properties => '',
+ expected => ["CTR-DRBG", "cipher: 'ARIA-128-CTR'"],
+ desc => 'CTR-DRBG ARIA-128' },
+
+ { drbg => 'CTR-DRBG',
+ cipher => 'ARIA-128-CTR',
+ properties => '',
+ expected => ["CTR-DRBG", "cipher: 'ARIA-128-CTR'"],
+ desc => 'CTR-DRBG ARIA-256' },
+);
+
+push @rand_tests, @aria_tests unless disabled("aria");
+
+plan tests => scalar @rand_tests;
+
+my $contents =<<'CONFIGEND';
+openssl_conf = openssl_init
+
+[openssl_init]
+random = random_section
+
+[random_section]
+CONFIGEND
+
+foreach (@rand_tests) {
+ my $tmpfile = 'rand_config.cfg';
+ open(my $cfg, '>', $tmpfile) or die "Could not open file";
+ print $cfg $contents;
+ if ($_->{drbg}) {
+ print $cfg "random = $_->{drbg}\n";
+ }
+ if ($_->{cipher}) {
+ print $cfg "cipher = $_->{cipher}\n";
+ }
+ if ($_->{digest}) {
+ print $cfg "digest = $_->{digest}\n"
+ }
+ close $cfg;
+
+ $ENV{OPENSSL_CONF} = $tmpfile;
+
+ ok(comparelines($_->{expected}), $_->{desc});
+}
+
+# Check that the stdout output contains the expected values.
+sub comparelines {
+ my @lines = run(app(["openssl", "list", "--random-instances"]),
+ capture => 1);
+
+ foreach (@_) {
+ if ( !grep( /$_/, @lines ) ) {
+ print "Cannot find: $_\n";
+ return 0;
+ }
+ }
+ return 1;
+}
diff --git a/test/recipes/20-test_spkac.t b/test/recipes/20-test_spkac.t
new file mode 100644
index 000000000000..cc4c71f325a4
--- /dev/null
+++ b/test/recipes/20-test_spkac.t
@@ -0,0 +1,41 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use File::Spec;
+use File::Basename;
+use OpenSSL::Test qw/:DEFAULT srctop_file ok_nofips/;
+use OpenSSL::Test::Utils;
+
+setup("test_spkac");
+
+plan skip_all => "RSA is not supported by this OpenSSL build"
+ if disabled("rsa");
+
+plan tests => 4;
+
+# For the tests below we use the cert itself as the TBS file
+
+SKIP: {
+ skip "MD5 is not supported by this OpenSSL build", 2
+ if disabled("md5");
+
+ ok(run(app([ 'openssl', 'spkac', '-key', srctop_file("test", "testrsa.pem"),
+ '-out', 'spkac-md5.pem'])),
+ "SPKAC MD5");
+ ok(run(app([ 'openssl', 'spkac', '-in', 'spkac-md5.pem'])),
+ "SPKAC MD5 verify");
+}
+
+ok(run(app([ 'openssl', 'spkac', '-key', srctop_file("test", "testrsa.pem"),
+ '-out', 'spkac-sha256.pem', '-digest', 'sha256'])),
+ "SPKAC SHA256");
+ok(run(app([ 'openssl', 'spkac', '-in', 'spkac-sha256.pem'])),
+ "SPKAC SHA256 verify");
diff --git a/test/recipes/25-test_crl.t b/test/recipes/25-test_crl.t
new file mode 100644
index 000000000000..92101e8d947b
--- /dev/null
+++ b/test/recipes/25-test_crl.t
@@ -0,0 +1,72 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_crl");
+
+plan tests => 10;
+
+require_ok(srctop_file('test','recipes','tconversion.pl'));
+
+my $pem = srctop_file("test/certs", "cyrillic_crl.pem");
+my $out = "cyrillic_crl.out";
+my $utf = srctop_file("test/certs", "cyrillic_crl.utf8");
+
+subtest 'crl conversions' => sub {
+ tconversion( -type => "crl", -in => srctop_file("test","testcrl.pem") );
+};
+
+ok(run(test(['crltest'])));
+
+ok(compare1stline([qw{openssl crl -noout -fingerprint -in},
+ srctop_file('test', 'testcrl.pem')],
+ 'SHA1 Fingerprint=BA:F4:1B:AD:7A:9B:2F:09:16:BC:60:A7:0E:CE:79:2E:36:00:E7:B2'));
+ok(compare1stline([qw{openssl crl -noout -fingerprint -sha256 -in},
+ srctop_file('test', 'testcrl.pem')],
+ 'SHA2-256 Fingerprint=B3:A9:FD:A7:2E:8C:3D:DF:D0:F1:C3:1A:96:60:B5:FD:B0:99:7C:7F:0E:E4:34:F5:DB:87:62:36:BC:F1:BC:1B'));
+ok(compare1stline([qw{openssl crl -noout -hash -in},
+ srctop_file('test', 'testcrl.pem')],
+ '106cd822'));
+
+ok(compare1stline_stdin([qw{openssl crl -hash -noout}],
+ srctop_file("test","testcrl.pem"),
+ '106cd822'),
+ "crl piped input test");
+
+ok(!run(app(["openssl", "crl", "-text", "-in", $pem, "-inform", "DER",
+ "-out", $out, "-nameopt", "utf8"])));
+ok(run(app(["openssl", "crl", "-text", "-in", $pem, "-inform", "PEM",
+ "-out", $out, "-nameopt", "utf8"])));
+is(cmp_text($out, srctop_file("test/certs", "cyrillic_crl.utf8")),
+ 0, 'Comparing utf8 output');
+
+sub compare1stline {
+ my ($cmdarray, $str) = @_;
+ my @lines = run(app($cmdarray), capture => 1);
+
+ return 1 if $lines[0] =~ m|^\Q${str}\E\R$|;
+ note "Got ", $lines[0];
+ note "Expected ", $str;
+ return 0;
+}
+
+sub compare1stline_stdin {
+ my ($cmdarray, $infile, $str) = @_;
+ my @lines = run(app($cmdarray, stdin => $infile), capture => 1);
+
+ return 1 if $lines[0] =~ m|^\Q${str}\E\R$|;
+ note "Got ", $lines[0];
+ note "Expected ", $str;
+ return 0;
+}
diff --git a/test/recipes/25-test_d2i.t b/test/recipes/25-test_d2i.t
new file mode 100644
index 000000000000..70f386d1c7a1
--- /dev/null
+++ b/test/recipes/25-test_d2i.t
@@ -0,0 +1,93 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_d2i");
+
+plan tests => 14;
+
+ok(run(test(["d2i_test", "X509", "decode",
+ srctop_file('test','d2i-tests','bad_cert.der')])),
+ "Running d2i_test bad_cert.der");
+
+ok(run(test(["d2i_test", "GENERAL_NAME", "decode",
+ srctop_file('test','d2i-tests','bad_generalname.der')])),
+ "Running d2i_test bad_generalname.der");
+
+ok(run(test(["d2i_test", "ASN1_ANY", "BIO",
+ srctop_file('test','d2i-tests','bad_bio.der')])),
+ "Running d2i_test bad_bio.der");
+# This test checks CVE-2016-2108. The data consists of an tag 258 and
+# two zero content octets. This is parsed as an ASN1_ANY type. If the
+# type is incorrectly interpreted as an ASN.1 INTEGER the two zero content
+# octets will be reject as invalid padding and this test will fail.
+# If the type is correctly interpreted it will by treated as an ASN1_STRING
+# type and the content octets copied verbatim.
+ok(run(test(["d2i_test", "ASN1_ANY", "OK",
+ srctop_file('test','d2i-tests','high_tag.der')])),
+ "Running d2i_test high_tag.der");
+
+# Above test data but interpreted as ASN.1 INTEGER: this will be rejected
+# because the tag is invalid.
+ok(run(test(["d2i_test", "ASN1_INTEGER", "decode",
+ srctop_file('test','d2i-tests','high_tag.der')])),
+ "Running d2i_test high_tag.der INTEGER");
+
+# Parse valid 0, 1 and -1 ASN.1 INTEGER as INTEGER or ANY.
+
+ok(run(test(["d2i_test", "ASN1_INTEGER", "OK",
+ srctop_file('test','d2i-tests','int0.der')])),
+ "Running d2i_test int0.der INTEGER");
+
+ok(run(test(["d2i_test", "ASN1_INTEGER", "OK",
+ srctop_file('test','d2i-tests','int1.der')])),
+ "Running d2i_test int1.der INTEGER");
+
+ok(run(test(["d2i_test", "ASN1_INTEGER", "OK",
+ srctop_file('test','d2i-tests','intminus1.der')])),
+ "Running d2i_test intminus1.der INTEGER");
+
+ok(run(test(["d2i_test", "ASN1_ANY", "OK",
+ srctop_file('test','d2i-tests','int0.der')])),
+ "Running d2i_test int0.der ANY");
+
+ok(run(test(["d2i_test", "ASN1_ANY", "OK",
+ srctop_file('test','d2i-tests','int1.der')])),
+ "Running d2i_test int1.der ANY");
+
+ok(run(test(["d2i_test", "ASN1_ANY", "OK",
+ srctop_file('test','d2i-tests','intminus1.der')])),
+ "Running d2i_test intminus1.der ANY");
+
+# Integers with illegal additional padding.
+
+ok(run(test(["d2i_test", "ASN1_INTEGER", "decode",
+ srctop_file('test','d2i-tests','bad-int-pad0.der')])),
+ "Running d2i_test bad-int-pad0.der INTEGER");
+
+ok(run(test(["d2i_test", "ASN1_INTEGER", "decode",
+ srctop_file('test','d2i-tests','bad-int-padminus1.der')])),
+ "Running d2i_test bad-int-padminus1.der INTEGER");
+
+SKIP: {
+ skip "No CMS support in this configuration", 1 if disabled("cms");
+
+ # Invalid CMS structure with decode error in CHOICE value.
+ # Test for CVE-2016-7053
+
+ ok(run(test(["d2i_test", "CMS_ContentInfo", "decode",
+ srctop_file('test','d2i-tests','bad-cms.der')])),
+ "Running d2i_test bad-cms.der CMS ContentInfo");
+}
diff --git a/test/recipes/25-test_eai_data.t b/test/recipes/25-test_eai_data.t
new file mode 100644
index 000000000000..522982ddfb80
--- /dev/null
+++ b/test/recipes/25-test_eai_data.t
@@ -0,0 +1,72 @@
+#! /usr/bin/env perl
+# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file with/;
+
+setup("test_eai_data");
+
+#./util/wrap.pl apps/openssl verify -nameopt utf8 -no_check_time -CAfile test/recipes/25-test_eai_data/ascii_chain.pem test/recipes/25-test_eai_data/ascii_leaf.pem
+#./util/wrap.pl apps/openssl verify -nameopt utf8 -no_check_time -CAfile test/recipes/25-test_eai_data/utf8_chain.pem test/recipes/25-test_eai_data/utf8_leaf.pem
+#./util/wrap.pl apps/openssl verify -nameopt utf8 -no_check_time -CAfile test/recipes/25-test_eai_data/utf8_chain.pem test/recipes/25-test_eai_data/ascii_leaf.pem
+#./util/wrap.pl apps/openssl verify -nameopt utf8 -no_check_time -CAfile test/recipes/25-test_eai_data/ascii_chain.pem test/recipes/25-test_eai_data/utf8_leaf.pem
+
+plan tests => 12;
+
+require_ok(srctop_file('test','recipes','tconversion.pl'));
+my $folder = "test/recipes/25-test_eai_data";
+
+my $ascii_pem = srctop_file($folder, "ascii_leaf.pem");
+my $utf8_pem = srctop_file($folder, "utf8_leaf.pem");
+
+my $ascii_chain_pem = srctop_file($folder, "ascii_chain.pem");
+my $utf8_chain_pem = srctop_file($folder, "utf8_chain.pem");
+
+my $out;
+my $outcnt = 0;
+sub outname {
+ $outcnt++;
+ return "sanout-$outcnt.tmp";
+}
+
+$out = outname();
+ok(run(app(["openssl", "x509", "-ext", "subjectAltName", "-in", $ascii_pem, "-noout", "-out", $out])));
+is(cmp_text($out, srctop_file($folder, "san.ascii")), 0, 'Comparing othername for ASCII domain');
+
+$out = outname();
+ok(run(app(["openssl", "x509", "-ext", "subjectAltName", "-in", $utf8_pem, "-noout", "-out", $out])));
+is(cmp_text($out, srctop_file($folder, "san.utf8")), 0, 'Comparing othername for IDN domain');
+
+SKIP: {
+ skip "Unicode tests disabled on MingW", 2 if $^O =~ /^msys$/;
+
+ ok(run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-verify_email", "学生\@elementary.school.example.com", "-CAfile", $ascii_chain_pem, $ascii_pem])));
+ ok(run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-verify_email", "医生\@大学.example.com", "-CAfile", $utf8_chain_pem, $utf8_pem])));
+}
+
+ok(run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-CAfile", $ascii_chain_pem, $ascii_pem])));
+ok(run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-CAfile", $utf8_chain_pem, $utf8_pem])));
+
+ok(!run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-CAfile", $ascii_chain_pem, $utf8_pem])));
+ok(!run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-CAfile", $utf8_chain_pem, $ascii_pem])));
+
+#Check that we get the expected failure return code
+with({ exit_checker => sub { return shift == 2; } },
+ sub {
+ ok(run(app(["openssl", "verify", "-CAfile",
+ srctop_file("test", "certs", "bad-othername-namec.pem"),
+ "-partial_chain", "-no_check_time", "-verify_email",
+ 'foo@example.com',
+ srctop_file("test", "certs", "bad-othername-namec.pem")])));
+ });
+
diff --git a/test/recipes/25-test_eai_data/ascii_chain.pem b/test/recipes/25-test_eai_data/ascii_chain.pem
new file mode 100644
index 000000000000..ea258a388557
--- /dev/null
+++ b/test/recipes/25-test_eai_data/ascii_chain.pem
@@ -0,0 +1,53 @@
+-----BEGIN CERTIFICATE-----
+MIIEjDCCA3SgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwgbsxCzAJBgNVBAYTAlVT
+MQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEYMBYGA1UECgwP
+RXhhbXBsZSBDb21wYW55MS4wLAYDVQQLDCVFeGFtcGxlIENvbXBhbnkgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MRswGQYDVQQDDBJFeGFtcGxlIENvbXBhbnkgQ0ExIDAe
+BgkqhkiG9w0BCQEWEWFsaWNlQGV4YW1wbGUuY29tMB4XDTE5MDMyNzA5MzkwMloX
+DTI5MDMyNDA5MzkwMlowgb0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEYMBYG
+A1UECgwPRXhhbXBsZSBDb21wYW55MTswOQYDVQQLDDJFeGFtcGxlIENvbXBhbnkg
+SW50ZXJtZWRpYXRlIENlcnRpZmljYXRlIEF1dGhvcml0eTEoMCYGA1UEAwwfRXhh
+bXBsZSBDb21wYW55IEludGVybWVkaWF0ZSBDQTEgMB4GCSqGSIb3DQEJARYRYWxp
+Y2VAZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9
+G/Vjs763ft6Jz6F63pNY2cc0jzCBxgw6c7UY3QC9Szmi7F/YxW+mCXwUFy4kT16X
+gujoV1prCJC7ywF2zmapIqRg08oUMdyYAfqi+OH1sbelih+J9ptvoLlQ4HULkXqP
+r9EAjI90shcVhFM/+C1C+7AC+fM74Q89U5D4i6GWFvGjVT88/fsQYwRGoB7e13gQ
+DZTFDpun8ayCI2cuIDEmpnplNpYYIbCdvBNNTp1D82g5eEz1VJVEwnr6JyVUFg5U
+aHApPzaqAXoIDjjW9G0RdX61zNAdbtjqZmP98Dt1MNGyRVHNUiafY2Zr9CtR02Fe
+AzVq8HGKCQ+FXy5VQXB7AgMBAAGjgZUwgZIwHQYDVR0OBBYEFAw/3qi2nZHj2xms
+cUd3PxN+/lxzMB8GA1UdIwQYMBaAFE7KwQ4mMV6AoFSttAbzi7rsIMY2MBIGA1Ud
+EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMCwGA1UdHgQlMCOgITAfgR1l
+bGVtZW50YXJ5LnNjaG9vbC5leGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEA
+DwUJJlG487NnzXCZjhztXGwjDmPb5ZDybIsOQH7CVSoajLLFaAVAIUYy9kFSENfZ
+gBT2LfJbW4i4ziRAIgHwWpjZAItirFwZtyl8BWJF4xdUmd+m0gj0ReEgPWKJdgLc
+O9quzLsGZ2n//oFG97gWqctIEw1ugOhwdeTcaC2WZMf62sE0yqjOOf+fynfCFjUV
++enle/EyAFghVBbuF/Yk6Y7/x+7pjncTHKl9zTBLWp5yH2JvQ5dCloho9jD16TGs
+TRL/b1I154INi/XwZMtFLxNxosB1HC86sr4l4GVO8nZxzgJ+8cppp1goGzEUDY1F
+lMWa0rQbcHhk98IaP+OAWg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEXjCCA0agAwIBAgIJAMujkjMG9iZjMA0GCSqGSIb3DQEBCwUAMIG7MQswCQYD
+VQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGDAW
+BgNVBAoMD0V4YW1wbGUgQ29tcGFueTEuMCwGA1UECwwlRXhhbXBsZSBDb21wYW55
+IENlcnRpZmljYXRlIEF1dGhvcml0eTEbMBkGA1UEAwwSRXhhbXBsZSBDb21wYW55
+IENBMSAwHgYJKoZIhvcNAQkBFhFhbGljZUBleGFtcGxlLmNvbTAeFw0xOTAzMjcw
+NjIzNDBaFw0zOTAzMjIwNjIzNDBaMIG7MQswCQYDVQQGEwJVUzELMAkGA1UECAwC
+Q0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGDAWBgNVBAoMD0V4YW1wbGUgQ29t
+cGFueTEuMCwGA1UECwwlRXhhbXBsZSBDb21wYW55IENlcnRpZmljYXRlIEF1dGhv
+cml0eTEbMBkGA1UEAwwSRXhhbXBsZSBDb21wYW55IENBMSAwHgYJKoZIhvcNAQkB
+FhFhbGljZUBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKhAtiyuvE09abRB1qPBnnMkzU7mRX3xcbOPT/NzfDTkbuTVbcJ98Ei3TRv1
+fmS5Ds1t2fcc493Cx1BTPmfdZSWhvONa9PDZ84wmtkaoU0Utzzdm+62zb/0/I0wh
+MgGaC25D8IRZ5yp5eTtX/yasOVaij9UjphAoHa4eD1GGzpc/LNI9hrV15BmdfcS2
+3FbtlUjFdIjsR41bTVkEb5nwBSrixV5MAcV6Y6I7mSykSTrytY6DcJs/k9yrzOM9
+p6x3v9Npyzny1vUxHWJmsSPwlfxCigcFU7I1ixybWuJB6opPu59h46r4VOVedhcj
+chSa9UcSLIKfmEhrQnw3YIUhudkCAwEAAaNjMGEwHQYDVR0OBBYEFE7KwQ4mMV6A
+oFSttAbzi7rsIMY2MB8GA1UdIwQYMBaAFE7KwQ4mMV6AoFSttAbzi7rsIMY2MA8G
+A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB
+AQCBmOcwt/AqQjCAFRdqLFsWdGsDC2iQE4lJhsv6oypBsNNxrYV962JrrgkZThPv
+e+OkBmPrN2izT7UX5Yxbi8qmCe/eaY239GCIgRQs6wehMqlGPx5cZeruwLHDjcsv
+4/KmyDJ9u1lx83OsORxcAr4W+HEIFtLEueQkGbJTMZSKMKkbSa4Ik2bji6ctZBkO
+qWtD5s4C0P29Z8CJL1jRrYNjFg5alGSzoYi26c1o9Oz35pNiurxySE+iDHjkj1vq
+d9+F+869tkXsbuGucdv7oKGZrfdTWKp+LiRQBJzjA9nrZuUqMSMsmSXpXPHV3BdI
+4k1AgvwY9/u+RlmeGW2qRTZJ
+-----END CERTIFICATE-----
diff --git a/test/recipes/25-test_eai_data/ascii_leaf.pem b/test/recipes/25-test_eai_data/ascii_leaf.pem
new file mode 100644
index 000000000000..286d3179688d
--- /dev/null
+++ b/test/recipes/25-test_eai_data/ascii_leaf.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIE3DCCA8SgAwIBAgIUPTX8yrPZtf85fFr2BqMIknud10EwDQYJKoZIhvcNAQEL
+BQAwgb0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEYMBYGA1UECgwPRXhhbXBs
+ZSBDb21wYW55MTswOQYDVQQLDDJFeGFtcGxlIENvbXBhbnkgSW50ZXJtZWRpYXRl
+IENlcnRpZmljYXRlIEF1dGhvcml0eTEoMCYGA1UEAwwfRXhhbXBsZSBDb21wYW55
+IEludGVybWVkaWF0ZSBDQTEgMB4GCSqGSIb3DQEJARYRYWxpY2VAZXhhbXBsZS5j
+b20wHhcNMTkwNjA4MTA0NDA2WhcNMjAwNjE3MTA0NDA2WjCBiDELMAkGA1UEBhMC
+VVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMRgwFgYDVQQK
+DA9FeGFtcGxlIENvbXBhbnkxHTAbBgNVBAsMFEV4YW1wbGUgQ29tcGFueSBVbml0
+MRswGQYDVQQDDBJBbGljZSBBc2NpaSBEb21haW4wggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDfpjeb8F/YlO5NYh+5+UcdaKIG3cpORrYZddUYprsbn8ic
+Utk4OXOklvMC1PwhW/8KcwuF0pUsQ/QZUmiJWv2umopmvl05OvPbTVfE4nE9JezF
+bNagPPrAugsbAC/1K65iPuZO4ZEZV7zjHxbdQk8fPzAZUfRqJsyinSnc2r3P4OvJ
+BffRJk8ZDJvx8kT3POYScSjTrSNVOHT3mT+2S+z00vwqKWdtroVyUr7TyC0/ocbf
+AKly1TmkD9RZNJ3ASlG0ZVri/a/TuglEs0WLtZran4IuKkzNnWccDILke0lkXZ+H
+mC1eKY3fYt8tAN+nkdTE1liJJNth4SpmYHLKoqstAgMBAAGjggEFMIIBATAJBgNV
+HRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIFoDAzBglghkgBhvhCAQ0EJhYkT3BlblNT
+TCBHZW5lcmF0ZWQgQ2xpZW50IENlcnRpZmljYXRlMB0GA1UdDgQWBBTCGcnEt0A+
+oJcD1GbkcwiWGG8f9DAfBgNVHSMEGDAWgBQMP96otp2R49sZrHFHdz8Tfv5cczAO
+BgNVHQ8BAf8EBAMCBeAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMD0G
+A1UdEQQ2MDSgMgYIKwYBBQUHCAmgJgwk5a2m55SfQGVsZW1lbnRhcnkuc2Nob29s
+LmV4YW1wbGUuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQALoWleKWXxN/WXsIMvceNO
+IfAy01Yrks0+qVhD0Z9GOAliqXOcSdr9ns+8Vhh56qPAevdP6vqACE8LnQ5Uwq1d
+SV0dxEKIaJoWRI+CnbKu+TVrR9mZAyABbPqWIBP41luj32Y/tL85k8gPF02hp0Vw
+tqrJjbCyzY4Sly14v9dBdxkJPPm+uPcgICbaCthSVm2iB9Bh+FdwJA9As+texqyI
+3Yzc6GcQpRB9M5kb5Ibqw3RMEzBGkdBCBehh06hDrx6c/JmgCspLZjCgImjn7eLk
+VyPZTiTcnTFUJuL4F/z/aAUAXzE2ueQCCRQOeX/x5KC9CElpFCw7RcpcZdCAw9KN
+-----END CERTIFICATE-----
diff --git a/test/recipes/25-test_eai_data/san.ascii b/test/recipes/25-test_eai_data/san.ascii
new file mode 100644
index 000000000000..e719e2660f00
--- /dev/null
+++ b/test/recipes/25-test_eai_data/san.ascii
@@ -0,0 +1,2 @@
+X509v3 Subject Alternative Name:
+ othername: SmtpUTF8Mailbox::学生@elementary.school.example.com
diff --git a/test/recipes/25-test_eai_data/san.utf8 b/test/recipes/25-test_eai_data/san.utf8
new file mode 100644
index 000000000000..cf62d9dfbe63
--- /dev/null
+++ b/test/recipes/25-test_eai_data/san.utf8
@@ -0,0 +1,2 @@
+X509v3 Subject Alternative Name:
+ othername: SmtpUTF8Mailbox::医生@大学.example.com
diff --git a/test/recipes/25-test_eai_data/utf8_chain.pem b/test/recipes/25-test_eai_data/utf8_chain.pem
new file mode 100644
index 000000000000..793902569f00
--- /dev/null
+++ b/test/recipes/25-test_eai_data/utf8_chain.pem
@@ -0,0 +1,53 @@
+-----BEGIN CERTIFICATE-----
+MIIEhTCCA22gAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwgbsxCzAJBgNVBAYTAlVT
+MQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEYMBYGA1UECgwP
+RXhhbXBsZSBDb21wYW55MS4wLAYDVQQLDCVFeGFtcGxlIENvbXBhbnkgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MRswGQYDVQQDDBJFeGFtcGxlIENvbXBhbnkgQ0ExIDAe
+BgkqhkiG9w0BCQEWEWFsaWNlQGV4YW1wbGUuY29tMB4XDTE5MDMyNzA5NDEzOVoX
+DTI5MDMyNDA5NDEzOVowgb0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEYMBYG
+A1UECgwPRXhhbXBsZSBDb21wYW55MTswOQYDVQQLDDJFeGFtcGxlIENvbXBhbnkg
+SW50ZXJtZWRpYXRlIENlcnRpZmljYXRlIEF1dGhvcml0eTEoMCYGA1UEAwwfRXhh
+bXBsZSBDb21wYW55IEludGVybWVkaWF0ZSBDQTEgMB4GCSqGSIb3DQEJARYRYWxp
+Y2VAZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9
+G/Vjs763ft6Jz6F63pNY2cc0jzCBxgw6c7UY3QC9Szmi7F/YxW+mCXwUFy4kT16X
+gujoV1prCJC7ywF2zmapIqRg08oUMdyYAfqi+OH1sbelih+J9ptvoLlQ4HULkXqP
+r9EAjI90shcVhFM/+C1C+7AC+fM74Q89U5D4i6GWFvGjVT88/fsQYwRGoB7e13gQ
+DZTFDpun8ayCI2cuIDEmpnplNpYYIbCdvBNNTp1D82g5eEz1VJVEwnr6JyVUFg5U
+aHApPzaqAXoIDjjW9G0RdX61zNAdbtjqZmP98Dt1MNGyRVHNUiafY2Zr9CtR02Fe
+AzVq8HGKCQ+FXy5VQXB7AgMBAAGjgY4wgYswHQYDVR0OBBYEFAw/3qi2nZHj2xms
+cUd3PxN+/lxzMB8GA1UdIwQYMBaAFE7KwQ4mMV6AoFSttAbzi7rsIMY2MBIGA1Ud
+EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMCUGA1UdHgQeMBygGjAYgRZ4
+bi0tcHNzMjVjLmV4YW1wbGUuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQCEpk1PVmSQ
+LoDTVDZlhbJmRP4UNq0ODaKNJHwpqVm0Q0lpg694brvLapmgAeRHPHHdTOv8VdGj
+y4/NvaWRjdBqnI6sVobMfC0JJtHQufWpQ4i85D6ljh6RQX62Tz9/EGd6jgE/Pjrw
+siU4geDY4c4EWGskJAGHaMYSTjQdutSP8NAxFXcupyniDyF75Kjfeb7kVj3zuvhS
+UYN13IeB2498t46BNqYVP1Sh51UMg4vkddHt3rI37WdilDq2j5e3qcUvYGFmiU7O
+j7P48QXoDHsWZmUvZcXlFky+9eFYd1a3QAV7AMc2iD93+GJBbwqxdN1393Y9Kk4R
+Y/RIVt183q8X
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEXjCCA0agAwIBAgIJAMujkjMG9iZjMA0GCSqGSIb3DQEBCwUAMIG7MQswCQYD
+VQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGDAW
+BgNVBAoMD0V4YW1wbGUgQ29tcGFueTEuMCwGA1UECwwlRXhhbXBsZSBDb21wYW55
+IENlcnRpZmljYXRlIEF1dGhvcml0eTEbMBkGA1UEAwwSRXhhbXBsZSBDb21wYW55
+IENBMSAwHgYJKoZIhvcNAQkBFhFhbGljZUBleGFtcGxlLmNvbTAeFw0xOTAzMjcw
+NjIzNDBaFw0zOTAzMjIwNjIzNDBaMIG7MQswCQYDVQQGEwJVUzELMAkGA1UECAwC
+Q0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGDAWBgNVBAoMD0V4YW1wbGUgQ29t
+cGFueTEuMCwGA1UECwwlRXhhbXBsZSBDb21wYW55IENlcnRpZmljYXRlIEF1dGhv
+cml0eTEbMBkGA1UEAwwSRXhhbXBsZSBDb21wYW55IENBMSAwHgYJKoZIhvcNAQkB
+FhFhbGljZUBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKhAtiyuvE09abRB1qPBnnMkzU7mRX3xcbOPT/NzfDTkbuTVbcJ98Ei3TRv1
+fmS5Ds1t2fcc493Cx1BTPmfdZSWhvONa9PDZ84wmtkaoU0Utzzdm+62zb/0/I0wh
+MgGaC25D8IRZ5yp5eTtX/yasOVaij9UjphAoHa4eD1GGzpc/LNI9hrV15BmdfcS2
+3FbtlUjFdIjsR41bTVkEb5nwBSrixV5MAcV6Y6I7mSykSTrytY6DcJs/k9yrzOM9
+p6x3v9Npyzny1vUxHWJmsSPwlfxCigcFU7I1ixybWuJB6opPu59h46r4VOVedhcj
+chSa9UcSLIKfmEhrQnw3YIUhudkCAwEAAaNjMGEwHQYDVR0OBBYEFE7KwQ4mMV6A
+oFSttAbzi7rsIMY2MB8GA1UdIwQYMBaAFE7KwQ4mMV6AoFSttAbzi7rsIMY2MA8G
+A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB
+AQCBmOcwt/AqQjCAFRdqLFsWdGsDC2iQE4lJhsv6oypBsNNxrYV962JrrgkZThPv
+e+OkBmPrN2izT7UX5Yxbi8qmCe/eaY239GCIgRQs6wehMqlGPx5cZeruwLHDjcsv
+4/KmyDJ9u1lx83OsORxcAr4W+HEIFtLEueQkGbJTMZSKMKkbSa4Ik2bji6ctZBkO
+qWtD5s4C0P29Z8CJL1jRrYNjFg5alGSzoYi26c1o9Oz35pNiurxySE+iDHjkj1vq
+d9+F+869tkXsbuGucdv7oKGZrfdTWKp+LiRQBJzjA9nrZuUqMSMsmSXpXPHV3BdI
+4k1AgvwY9/u+RlmeGW2qRTZJ
+-----END CERTIFICATE-----
diff --git a/test/recipes/25-test_eai_data/utf8_leaf.pem b/test/recipes/25-test_eai_data/utf8_leaf.pem
new file mode 100644
index 000000000000..61d5965bc861
--- /dev/null
+++ b/test/recipes/25-test_eai_data/utf8_leaf.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzjCCA7agAwIBAgIUCf16eBeNMQe+sxEnCZnFEuEONAwwDQYJKoZIhvcNAQEL
+BQAwgb0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEYMBYGA1UECgwPRXhhbXBs
+ZSBDb21wYW55MTswOQYDVQQLDDJFeGFtcGxlIENvbXBhbnkgSW50ZXJtZWRpYXRl
+IENlcnRpZmljYXRlIEF1dGhvcml0eTEoMCYGA1UEAwwfRXhhbXBsZSBDb21wYW55
+IEludGVybWVkaWF0ZSBDQTEgMB4GCSqGSIb3DQEJARYRYWxpY2VAZXhhbXBsZS5j
+b20wHhcNMTkwNjA4MTA1MzUzWhcNMjAwNjE3MTA1MzUzWjCBhzELMAkGA1UEBhMC
+VVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMRgwFgYDVQQK
+DA9FeGFtcGxlIENvbXBhbnkxHTAbBgNVBAsMFEV4YW1wbGUgQ29tcGFueSBVbml0
+MRowGAYDVQQDDBFCb2IgLSB1dGY4IERvbWFpbjCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAN+mN5vwX9iU7k1iH7n5Rx1oogbdyk5Gthl11RimuxufyJxS
+2Tg5c6SW8wLU/CFb/wpzC4XSlSxD9BlSaIla/a6aima+XTk689tNV8TicT0l7MVs
+1qA8+sC6CxsAL/UrrmI+5k7hkRlXvOMfFt1CTx8/MBlR9GomzKKdKdzavc/g68kF
+99EmTxkMm/HyRPc85hJxKNOtI1U4dPeZP7ZL7PTS/CopZ22uhXJSvtPILT+hxt8A
+qXLVOaQP1Fk0ncBKUbRlWuL9r9O6CUSzRYu1mtqfgi4qTM2dZxwMguR7SWRdn4eY
+LV4pjd9i3y0A36eR1MTWWIkk22HhKmZgcsqiqy0CAwEAAaOB+TCB9jAJBgNVHRME
+AjAAMBEGCWCGSAGG+EIBAQQEAwIFoDAzBglghkgBhvhCAQ0EJhYkT3BlblNTTCBH
+ZW5lcmF0ZWQgQ2xpZW50IENlcnRpZmljYXRlMB0GA1UdDgQWBBTCGcnEt0A+oJcD
+1GbkcwiWGG8f9DAfBgNVHSMEGDAWgBQMP96otp2R49sZrHFHdz8Tfv5cczAOBgNV
+HQ8BAf8EBAMCBeAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMDIGA1Ud
+EQQrMCmgJwYIKwYBBQUHCAmgGwwZ5Yy755SfQOWkp+Wtpi5leGFtcGxlLmNvbTAN
+BgkqhkiG9w0BAQsFAAOCAQEAJMye89+KKYE0Dn2fSUCA3JcoRqWGi5rJkBKzGLQE
+sXmXJ/ECjWXugIz69vkJhh5L4cvRv/Orsq40aAsEhzQHVwFZvjgaDW3EHL10FeY9
+fiZgCThMcktaxWnc9xrUE2GUrEt9+QBkaVozNQgsnGDGPh499Tupzwp7YArHHdUP
+Z1y7jCR4Wlhl3RKP/VRYT0MZGuOKwyVsV4D6+4dQ/CigCqvD0eruI6owREvfH8Lc
+sIwyPtO87EhMWOKD0EkU9bH97D0UZyZlhEg0uq1VaWOHztsnb63Go7u5m1QWlII6
+jAEfnqwuMqNAkRkTT2pfNCq+2+GUlBZDRtuiTljc6QQegg==
+-----END CERTIFICATE-----
diff --git a/test/recipes/25-test_pkcs7.t b/test/recipes/25-test_pkcs7.t
new file mode 100644
index 000000000000..cbb9902bdddd
--- /dev/null
+++ b/test/recipes/25-test_pkcs7.t
@@ -0,0 +1,32 @@
+#! /usr/bin/env perl
+# Copyright 2015-2023 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file data_file/;
+
+setup("test_pkcs7");
+
+plan tests => 4;
+
+require_ok(srctop_file('test','recipes','tconversion.pl'));
+
+subtest 'pkcs7 conversions -- pkcs7' => sub {
+ tconversion( -type => 'p7', -in => srctop_file("test", "testp7.pem"),
+ -args => ["pkcs7"] );
+};
+subtest 'pkcs7 conversions -- pkcs7d' => sub {
+ tconversion( -type => 'p7d', -in => srctop_file("test", "pkcs7-1.pem"),
+ -args => ["pkcs7"] );
+};
+
+my $malformed = data_file('malformed.pkcs7');
+ok(run(app(["openssl", "pkcs7", "-in", $malformed])));
diff --git a/test/recipes/25-test_pkcs7_data/malformed.pkcs7 b/test/recipes/25-test_pkcs7_data/malformed.pkcs7
new file mode 100644
index 000000000000..e30d1b582c9f
--- /dev/null
+++ b/test/recipes/25-test_pkcs7_data/malformed.pkcs7
@@ -0,0 +1,3 @@
+-----BEGIN PKCS7-----
+MAsGCSqGSIb3DQEHAg==
+-----END PKCS7-----
diff --git a/test/recipes/25-test_req.t b/test/recipes/25-test_req.t
new file mode 100644
index 000000000000..fe02d29c634f
--- /dev/null
+++ b/test/recipes/25-test_req.t
@@ -0,0 +1,491 @@
+#! /usr/bin/env perl
+# Copyright 2015-2024 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
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_req");
+
+plan tests => 49;
+
+require_ok(srctop_file('test', 'recipes', 'tconversion.pl'));
+
+my @certs = qw(test certs);
+
+# What type of key to generate?
+my @req_new;
+if (disabled("rsa")) {
+ @req_new = ("-newkey", "dsa:".srctop_file("apps", "dsa512.pem"));
+} else {
+ @req_new = ("-new");
+ note("There should be a 2 sequences of .'s and some +'s.");
+ note("There should not be more that at most 80 per line");
+}
+
+# Prevent MSys2 filename munging for arguments that look like file paths but
+# aren't
+$ENV{MSYS2_ARG_CONV_EXCL} = "/CN=";
+
+# Check for duplicate -addext parameters, and one "working" case.
+my @addext_args = ( "openssl", "req", "-new", "-out", "testreq.pem",
+ "-key", srctop_file("test", "certs", "ee-key.pem"),
+ "-config", srctop_file("test", "test.cnf"), @req_new );
+my $val = "subjectAltName=DNS:example.com";
+my $val1 = "subjectAltName=otherName:1.2.3.4;UTF8:test,email:info\@example.com";
+my $val2 = " " . $val;
+my $val3 = $val;
+$val3 =~ s/=/ =/;
+ok( run(app([@addext_args, "-addext", $val])));
+ok( run(app([@addext_args, "-addext", $val1])));
+$val1 =~ s/UTF8/XXXX/; # execute the error handling in do_othername
+ok(!run(app([@addext_args, "-addext", $val1])));
+ok(!run(app([@addext_args, "-addext", $val, "-addext", $val])));
+ok(!run(app([@addext_args, "-addext", $val, "-addext", $val2])));
+ok(!run(app([@addext_args, "-addext", $val, "-addext", $val3])));
+ok(!run(app([@addext_args, "-addext", $val2, "-addext", $val3])));
+ok(run(app([@addext_args, "-addext", "SXNetID=1:one, 2:two, 3:three"])));
+
+# If a CSR is provided with neither of -key or -CA/-CAkey, this should fail.
+ok(!run(app(["openssl", "req", "-x509",
+ "-in", srctop_file(@certs, "x509-check.csr"),
+ "-out", "testreq.pem"])));
+
+subtest "generating alt certificate requests with RSA" => sub {
+ plan tests => 3;
+
+ SKIP: {
+ skip "RSA is not supported by this OpenSSL build", 2
+ if disabled("rsa");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-section", "altreq",
+ "-new", "-out", "testreq-rsa.pem", "-utf8",
+ "-key", srctop_file("test", "testrsa.pem")])),
+ "Generating request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-rsa.pem", "-noout"])),
+ "Verifying signature on request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-section", "altreq",
+ "-verify", "-in", "testreq-rsa.pem", "-noout"])),
+ "Verifying signature on request");
+ }
+};
+
+
+subtest "generating certificate requests with RSA" => sub {
+ plan tests => 8;
+
+ SKIP: {
+ skip "RSA is not supported by this OpenSSL build", 2
+ if disabled("rsa");
+
+ ok(!run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsa.pem", "-utf8",
+ "-key", srctop_file("test", "testrsa.pem"),
+ "-keyform", "DER"])),
+ "Checking that mismatching keyform fails");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsa.pem", "-utf8",
+ "-key", srctop_file("test", "testrsa.pem"),
+ "-keyform", "PEM"])),
+ "Generating request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-rsa.pem", "-noout"])),
+ "Verifying signature on request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-modulus", "-in", "testreq-rsa.pem", "-noout"])),
+ "Printing a modulus of the request key");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq_withattrs_pem.pem", "-utf8",
+ "-key", srctop_file("test", "testrsa_withattrs.pem")])),
+ "Generating request from a key with extra attributes - PEM");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq_withattrs_pem.pem", "-noout"])),
+ "Verifying signature on request from a key with extra attributes - PEM");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq_withattrs_der.pem", "-utf8",
+ "-key", srctop_file("test", "testrsa_withattrs.der"),
+ "-keyform", "DER"])),
+ "Generating request from a key with extra attributes - PEM");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq_withattrs_der.pem", "-noout"])),
+ "Verifying signature on request from a key with extra attributes - PEM");
+ }
+};
+
+subtest "generating certificate requests with RSA-PSS" => sub {
+ plan tests => 12;
+
+ SKIP: {
+ skip "RSA is not supported by this OpenSSL build", 2
+ if disabled("rsa");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsapss.pem", "-utf8",
+ "-key", srctop_file("test", "testrsapss.pem")])),
+ "Generating request");
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-rsapss.pem", "-noout"])),
+ "Verifying signature on request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsapss2.pem", "-utf8",
+ "-sigopt", "rsa_padding_mode:pss",
+ "-sigopt", "rsa_pss_saltlen:-1",
+ "-key", srctop_file("test", "testrsapss.pem")])),
+ "Generating request");
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-rsapss2.pem", "-noout"])),
+ "Verifying signature on request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsapssmand.pem", "-utf8",
+ "-sigopt", "rsa_padding_mode:pss",
+ "-key", srctop_file("test", "testrsapssmandatory.pem")])),
+ "Generating request");
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-rsapssmand.pem", "-noout"])),
+ "Verifying signature on request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsapssmand2.pem", "-utf8",
+ "-sigopt", "rsa_pss_saltlen:100",
+ "-key", srctop_file("test", "testrsapssmandatory.pem")])),
+ "Generating request");
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-rsapssmand2.pem", "-noout"])),
+ "Verifying signature on request");
+
+ ok(!run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsapss3.pem", "-utf8",
+ "-sigopt", "rsa_padding_mode:pkcs1",
+ "-key", srctop_file("test", "testrsapss.pem")])),
+ "Generating request with expected failure");
+
+ ok(!run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsapss3.pem", "-utf8",
+ "-sigopt", "rsa_pss_saltlen:-4",
+ "-key", srctop_file("test", "testrsapss.pem")])),
+ "Generating request with expected failure");
+
+ ok(!run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsapssmand3.pem", "-utf8",
+ "-sigopt", "rsa_pss_saltlen:10",
+ "-key", srctop_file("test", "testrsapssmandatory.pem")])),
+ "Generating request with expected failure");
+
+ ok(!run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-rsapssmand3.pem", "-utf8",
+ "-sha256",
+ "-key", srctop_file("test", "testrsapssmandatory.pem")])),
+ "Generating request with expected failure");
+ }
+};
+
+subtest "generating certificate requests with DSA" => sub {
+ plan tests => 2;
+
+ SKIP: {
+ skip "DSA is not supported by this OpenSSL build", 2
+ if disabled("dsa");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-dsa.pem", "-utf8",
+ "-key", srctop_file("test", "testdsa.pem")])),
+ "Generating request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-dsa.pem", "-noout"])),
+ "Verifying signature on request");
+ }
+};
+
+subtest "generating certificate requests with ECDSA" => sub {
+ plan tests => 2;
+
+ SKIP: {
+ skip "ECDSA is not supported by this OpenSSL build", 2
+ if disabled("ec");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-ec.pem", "-utf8",
+ "-key", srctop_file("test", "testec-p256.pem")])),
+ "Generating request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-ec.pem", "-noout"])),
+ "Verifying signature on request");
+ }
+};
+
+subtest "generating certificate requests with Ed25519" => sub {
+ plan tests => 2;
+
+ SKIP: {
+ skip "Ed25519 is not supported by this OpenSSL build", 2
+ if disabled("ec");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-ed25519.pem", "-utf8",
+ "-key", srctop_file("test", "tested25519.pem")])),
+ "Generating request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-ed25519.pem", "-noout"])),
+ "Verifying signature on request");
+ }
+};
+
+subtest "generating certificate requests with Ed448" => sub {
+ plan tests => 2;
+
+ SKIP: {
+ skip "Ed448 is not supported by this OpenSSL build", 2
+ if disabled("ec");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-out", "testreq-ed448.pem", "-utf8",
+ "-key", srctop_file("test", "tested448.pem")])),
+ "Generating request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-ed448.pem", "-noout"])),
+ "Verifying signature on request");
+ }
+};
+
+subtest "generating certificate requests" => sub {
+ plan tests => 2;
+
+ ok(run(app(["openssl", "req", "-config", srctop_file("test", "test.cnf"),
+ "-key", srctop_file("test", "certs", "ee-key.pem"),
+ @req_new, "-out", "testreq.pem"])),
+ "Generating request");
+
+ ok(run(app(["openssl", "req", "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq.pem", "-noout"])),
+ "Verifying signature on request");
+};
+
+subtest "generating SM2 certificate requests" => sub {
+ plan tests => 4;
+
+ SKIP: {
+ skip "SM2 is not supported by this OpenSSL build", 4
+ if disabled("sm2");
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-key", srctop_file(@certs, "sm2.key"),
+ "-sigopt", "distid:1234567812345678",
+ "-out", "testreq-sm2.pem", "-sm3"])),
+ "Generating SM2 certificate request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-sm2.pem", "-noout",
+ "-vfyopt", "distid:1234567812345678", "-sm3"])),
+ "Verifying signature on SM2 certificate request");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-new", "-key", srctop_file(@certs, "sm2.key"),
+ "-sigopt", "hexdistid:DEADBEEF",
+ "-out", "testreq-sm2.pem", "-sm3"])),
+ "Generating SM2 certificate request with hex id");
+
+ ok(run(app(["openssl", "req",
+ "-config", srctop_file("test", "test.cnf"),
+ "-verify", "-in", "testreq-sm2.pem", "-noout",
+ "-vfyopt", "hexdistid:DEADBEEF", "-sm3"])),
+ "Verifying signature on SM2 certificate request");
+ }
+};
+
+my @openssl_args = ("req", "-config", srctop_file("apps", "openssl.cnf"));
+
+run_conversion('req conversions',
+ "testreq.pem");
+run_conversion('req conversions -- testreq2',
+ srctop_file("test", "testreq2.pem"));
+
+sub run_conversion {
+ my $title = shift;
+ my $reqfile = shift;
+
+ subtest $title => sub {
+ run(app(["openssl", @openssl_args,
+ "-in", $reqfile, "-inform", "p",
+ "-noout", "-text"],
+ stderr => "req-check.err", stdout => undef));
+ open DATA, "req-check.err";
+ SKIP: {
+ plan skip_all => "skipping req conversion test for $reqfile"
+ if grep /Unknown Public Key/, map { s/\R//; } <DATA>;
+
+ tconversion( -type => 'req', -in => $reqfile,
+ -args => [ @openssl_args ] );
+ }
+ close DATA;
+ unlink "req-check.err";
+
+ done_testing();
+ };
+}
+
+# Test both generation and verification of certs w.r.t. RFC 5280 requirements
+
+my $ca_cert; # will be set below
+sub generate_cert {
+ my $cert = shift @_;
+ my $ss = $cert =~ m/self-signed/;
+ my $is_ca = $cert =~ m/CA/;
+ my $cn = $is_ca ? "CA" : "EE";
+ my $ca_key = srctop_file(@certs, "ca-key.pem");
+ my $key = $is_ca ? $ca_key : srctop_file(@certs, "ee-key.pem");
+ my @cmd = ("openssl", "req", "-config", "", "-x509",
+ "-subj", "/CN=$cn", @_, "-out", $cert);
+ push(@cmd, ("-key", $key)) if $ss;
+ push(@cmd, ("-CA", $ca_cert, "-CAkey", $ca_key)) unless $ss;
+ ok(run(app([@cmd])), "generate $cert");
+}
+sub has_SKID {
+ my $cert = shift @_;
+ my $expect = shift @_;
+ cert_contains($cert, "Subject Key Identifier", $expect);
+}
+sub has_AKID {
+ my $cert = shift @_;
+ my $expect = shift @_;
+ cert_contains($cert, "Authority Key Identifier", $expect);
+}
+sub has_keyUsage {
+ my $cert = shift @_;
+ my $expect = shift @_;
+ cert_contains($cert, "Key Usage", $expect);
+}
+sub strict_verify {
+ my $cert = shift @_;
+ my $expect = shift @_;
+ my $trusted = shift @_;
+ $trusted = $cert unless $trusted;
+ ok(run(app(["openssl", "verify", "-x509_strict", "-trusted", $trusted,
+ "-partial_chain", $cert])) == $expect,
+ "strict verify allow $cert");
+}
+
+my @v3_ca = ("-addext", "basicConstraints = critical,CA:true",
+ "-addext", "keyUsage = keyCertSign");
+my $SKID_AKID = "subjectKeyIdentifier,authorityKeyIdentifier";
+my $cert = "self-signed_v1_CA_no_KIDs.pem";
+generate_cert($cert);
+cert_ext_has_n_different_lines($cert, 0, $SKID_AKID); # no SKID and no AKID
+#TODO strict_verify($cert, 1); # self-signed v1 root cert should be accepted as CA
+
+$ca_cert = "self-signed_v3_CA_default_SKID.pem";
+generate_cert($ca_cert, @v3_ca);
+has_SKID($ca_cert, 1);
+has_AKID($ca_cert, 0);
+strict_verify($ca_cert, 1);
+
+$cert = "self-signed_v3_CA_no_SKID.pem";
+generate_cert($cert, @v3_ca, "-addext", "subjectKeyIdentifier = none");
+cert_ext_has_n_different_lines($cert, 0, $SKID_AKID); # no SKID and no AKID
+#TODO strict_verify($cert, 0);
+
+$cert = "self-signed_v3_CA_both_KIDs.pem";
+generate_cert($cert, @v3_ca, "-addext", "subjectKeyIdentifier = hash",
+ "-addext", "authorityKeyIdentifier = keyid:always");
+cert_ext_has_n_different_lines($cert, 3, $SKID_AKID); # SKID == AKID
+strict_verify($cert, 1);
+
+$cert = "self-signed_v3_EE_wrong_keyUsage.pem";
+generate_cert($cert, "-addext", "keyUsage = keyCertSign");
+#TODO strict_verify($cert, 1); # should be accepted because RFC 5280 does not apply
+
+$cert = "v3_EE_default_KIDs.pem";
+generate_cert($cert, "-addext", "keyUsage = dataEncipherment",
+ "-key", srctop_file(@certs, "ee-key.pem"));
+cert_ext_has_n_different_lines($cert, 4, $SKID_AKID); # SKID != AKID
+strict_verify($cert, 1, $ca_cert);
+
+$cert = "v3_EE_no_AKID.pem";
+generate_cert($cert, "-addext", "authorityKeyIdentifier = none",
+ "-key", srctop_file(@certs, "ee-key.pem"));
+has_SKID($cert, 1);
+has_AKID($cert, 0);
+strict_verify($cert, 0, $ca_cert);
+
+$cert = "self-issued_v3_EE_default_KIDs.pem";
+generate_cert($cert, "-addext", "keyUsage = dataEncipherment",
+ "-in", srctop_file(@certs, "x509-check.csr"));
+cert_ext_has_n_different_lines($cert, 4, $SKID_AKID); # SKID != AKID
+strict_verify($cert, 1);
+
+my $cert = "self-signed_CA_no_keyUsage.pem";
+generate_cert($cert, "-in", srctop_file(@certs, "ext-check.csr"));
+has_keyUsage($cert, 0);
+my $cert = "self-signed_CA_with_keyUsages.pem";
+generate_cert($cert, "-in", srctop_file(@certs, "ext-check.csr"),
+ "-copy_extensions", "copy");
+has_keyUsage($cert, 1);
+
+# Generate cert using req with '-modulus'
+ok(run(app(["openssl", "req", "-x509", "-new", "-days", "365",
+ "-key", srctop_file("test", "testrsa.pem"),
+ "-config", srctop_file('test', 'test.cnf'),
+ "-out", "testreq-cert.pem",
+ "-modulus"])), "cert req creation - with -modulus");
+
+# Verify cert
+ok(run(app(["openssl", "x509", "-in", "testreq-cert.pem",
+ "-noout", "-text"])), "cert verification");
diff --git a/test/recipes/25-test_rusext.t b/test/recipes/25-test_rusext.t
new file mode 100644
index 000000000000..05727f9d04f9
--- /dev/null
+++ b/test/recipes/25-test_rusext.t
@@ -0,0 +1,33 @@
+#! /usr/bin/env perl
+# 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_rusext");
+
+plan tests => 5;
+
+require_ok(srctop_file('test', 'recipes', 'tconversion.pl'));
+my $pem = srctop_file("test/certs", "grfc.pem");
+my $out_msb = "grfc.msb";
+my $out_utf8 = "grfc.utf8";
+
+ok(run(app(["openssl", "x509", "-text", "-in", $pem, "-out", $out_msb,
+ "-nameopt", "esc_msb", "-certopt", "no_pubkey"])));
+is(cmp_text($out_msb, srctop_file('test', 'recipes', '25-test_rusext_data', 'grfc.msb')),
+ 0, 'Comparing esc_msb output');
+ok(run(app(["openssl", "x509", "-text", "-in", $pem, "-out", $out_utf8,
+ "-nameopt", "utf8", "-certopt", "no_pubkey"])));
+is(cmp_text($out_utf8, srctop_file('test', 'recipes', '25-test_rusext_data', 'grfc.utf8')),
+ 0, 'Comparing utf8 output');
diff --git a/test/recipes/25-test_rusext_data/grfc.msb b/test/recipes/25-test_rusext_data/grfc.msb
new file mode 100644
index 000000000000..5184e4ff7a85
--- /dev/null
+++ b/test/recipes/25-test_rusext_data/grfc.msb
@@ -0,0 +1,67 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0c:8c:40:93:bb:e6:93:bd:43:0b:f5:18:26:03:1d:05
+ Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
+ Issuer: OGRN=1027739334479, INN=007706228218, street=\U0414\U0435\U0440\U0431\U0435\U043D\U0435\U0432\U0441\U043A\U0430\U044F \U043D\U0430\U0431. \U0434. 7 \U0441\U0442\U0440. 15, emailAddress=pki-grfc@grfc.ru, C=RU, ST=77 \U0433. \U041C\U043E\U0441\U043A\U0432\U0430, L=\U041C\U043E\U0441\U043A\U0432\U0430, O=\U0424\U0413\U0423\U041F "\U0413\U0420\U0427\U0426", CN=\U0423\U0426 \U0424\U0413\U0423\U041F "\U0413\U0420\U0427\U0426"
+ Validity
+ Not Before: Mar 12 07:38:26 2013 GMT
+ Not After : Mar 12 07:46:00 2028 GMT
+ Subject: OGRN=1027739334479, INN=007706228218, street=\U0414\U0435\U0440\U0431\U0435\U043D\U0435\U0432\U0441\U043A\U0430\U044F \U043D\U0430\U0431. \U0434. 7 \U0441\U0442\U0440. 15, emailAddress=pki-grfc@grfc.ru, C=RU, ST=77 \U0433. \U041C\U043E\U0441\U043A\U0432\U0430, L=\U041C\U043E\U0441\U043A\U0432\U0430, O=\U0424\U0413\U0423\U041F "\U0413\U0420\U0427\U0426", CN=\U0423\U0426 \U0424\U0413\U0423\U041F "\U0413\U0420\U0427\U0426"
+ X509v3 extensions:
+ Signing Tool of Subject:
+ "КриптоПро CSP" (верÑÐ¸Ñ 3.6)
+ Signing Tool of Issuer:
+ signTool : "КриптоПро CSP" (верÑÐ¸Ñ 3.6)
+ cATool : "УдоÑтоверÑющий центр "КриптоПро УЦ" верÑии 1.5
+ signToolCert: Сертификат ÑоответÑÑ‚Ð²Ð¸Ñ â„– СФ/121-1859 от 17.06.2012
+ cAToolCert : Сертификат ÑоответÑÑ‚Ð²Ð¸Ñ â„– СФ/128-1822 от 01.06.2012
+ X509v3 Key Usage:
+ Digital Signature, Certificate Sign, CRL Sign
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Subject Key Identifier:
+ 6B:00:86:83:89:D2:00:CF:56:B8:6B:E4:E3:36:10:1E:1F:72:AE:C3
+ 1.3.6.1.4.1.311.21.1:
+ ...
+ X509v3 Certificate Policies:
+ Policy: Class of Signing Tool KC1
+ Policy: Class of Signing Tool KC2
+ Policy: X509v3 Any Policy
+ Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
+ Signature Value:
+ bd:95:dd:5f:3a:2b:74:a5:29:62:20:c2:24:a8:8b:a0:13:1a:
+ 21:f5:4a:d6:2e:b1:3f:f5:50:e9:96:a0:a2:c9:79:09:15:a2:
+ 41:c0:60:e1:1d:3f:25:8d:88:f4:4c:60:f3:0f:4e:e3:29:6e:
+ b8:6e:01:b4:03:2c:07:8f:27:37
+-----BEGIN CERTIFICATE-----
+MIIFGDCCBMegAwIBAgIQDIxAk7vmk71DC/UYJgMdBTAIBgYqhQMCAgMwggEWMRgw
+FgYFKoUDZAESDTEwMjc3MzkzMzQ0NzkxGjAYBggqhQMDgQMBARIMMDA3NzA2MjI4
+MjE4MTowOAYDVQQJDDHQlNC10YDQsdC10L3QtdCy0YHQutCw0Y8g0L3QsNCxLiDQ
+tC4gNyDRgdGC0YAuIDE1MR8wHQYJKoZIhvcNAQkBFhBwa2ktZ3JmY0BncmZjLnJ1
+MQswCQYDVQQGEwJSVTEcMBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDEVMBMG
+A1UEBwwM0JzQvtGB0LrQstCwMRwwGgYDVQQKDBPQpNCT0KPQnyAi0JPQoNCn0KYi
+MSEwHwYDVQQDDBjQo9CmINCk0JPQo9CfICLQk9Cg0KfQpiIwHhcNMTMwMzEyMDcz
+ODI2WhcNMjgwMzEyMDc0NjAwWjCCARYxGDAWBgUqhQNkARINMTAyNzczOTMzNDQ3
+OTEaMBgGCCqFAwOBAwEBEgwwMDc3MDYyMjgyMTgxOjA4BgNVBAkMMdCU0LXRgNCx
+0LXQvdC10LLRgdC60LDRjyDQvdCw0LEuINC0LiA3INGB0YLRgC4gMTUxHzAdBgkq
+hkiG9w0BCQEWEHBraS1ncmZjQGdyZmMucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQI
+DBM3NyDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxHDAa
+BgNVBAoME9Ck0JPQo9CfICLQk9Cg0KfQpiIxITAfBgNVBAMMGNCj0KYg0KTQk9Cj
+0J8gItCT0KDQp9CmIjBjMBwGBiqFAwICEzASBgcqhQMCAiMBBgcqhQMCAh4BA0MA
+BECWU7YnkJgff0sdJ+i50FXAYZlpcSz8wO/2AnfCzGC+PMj/NGOKMMWcv8I9eN7W
+eEXwIuRc96StDM8zJigQGd/1o4IB6TCCAeUwNgYFKoUDZG8ELQwrItCa0YDQuNC/
+0YLQvtCf0YDQviBDU1AiICjQstC10YDRgdC40Y8gMy42KTCCATMGBSqFA2RwBIIB
+KDCCASQMKyLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDMu
+NikMUyLQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAgItCa
+0YDQuNC/0YLQvtCf0YDQviDQo9CmIiDQstC10YDRgdC40LggMS41DE/QodC10YDR
+gtC40YTQuNC60LDRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQv
+MTIxLTE4NTkg0L7RgiAxNy4wNi4yMDEyDE/QodC10YDRgtC40YTQuNC60LDRgiDR
+gdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQvMTI4LTE4MjIg0L7RgiAw
+MS4wNi4yMDEyMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRrAIaDidIAz1a4a+TjNhAeH3KuwzAQBgkrBgEEAYI3FQEEAwIBADAlBgNVHSAE
+HjAcMAgGBiqFA2RxATAIBgYqhQNkcQIwBgYEVR0gADAIBgYqhQMCAgMDQQC9ld1f
+Oit0pSliIMIkqIugExoh9UrWLrE/9VDplqCiyXkJFaJBwGDhHT8ljYj0TGDzD07j
+KW64bgG0AywHjyc3
+-----END CERTIFICATE-----
diff --git a/test/recipes/25-test_rusext_data/grfc.utf8 b/test/recipes/25-test_rusext_data/grfc.utf8
new file mode 100644
index 000000000000..a709dcf67cd8
--- /dev/null
+++ b/test/recipes/25-test_rusext_data/grfc.utf8
@@ -0,0 +1,67 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 0c:8c:40:93:bb:e6:93:bd:43:0b:f5:18:26:03:1d:05
+ Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
+ Issuer: OGRN=1027739334479, INN=007706228218, street=ДербеневÑÐºÐ°Ñ Ð½Ð°Ð±. д. 7 ÑÑ‚Ñ€. 15, emailAddress=pki-grfc@grfc.ru, C=RU, ST=77 г. МоÑква, L=МоÑква, O=ФГУП "ГРЧЦ", CN=УЦ ФГУП "ГРЧЦ"
+ Validity
+ Not Before: Mar 12 07:38:26 2013 GMT
+ Not After : Mar 12 07:46:00 2028 GMT
+ Subject: OGRN=1027739334479, INN=007706228218, street=ДербеневÑÐºÐ°Ñ Ð½Ð°Ð±. д. 7 ÑÑ‚Ñ€. 15, emailAddress=pki-grfc@grfc.ru, C=RU, ST=77 г. МоÑква, L=МоÑква, O=ФГУП "ГРЧЦ", CN=УЦ ФГУП "ГРЧЦ"
+ X509v3 extensions:
+ Signing Tool of Subject:
+ "КриптоПро CSP" (верÑÐ¸Ñ 3.6)
+ Signing Tool of Issuer:
+ signTool : "КриптоПро CSP" (верÑÐ¸Ñ 3.6)
+ cATool : "УдоÑтоверÑющий центр "КриптоПро УЦ" верÑии 1.5
+ signToolCert: Сертификат ÑоответÑÑ‚Ð²Ð¸Ñ â„– СФ/121-1859 от 17.06.2012
+ cAToolCert : Сертификат ÑоответÑÑ‚Ð²Ð¸Ñ â„– СФ/128-1822 от 01.06.2012
+ X509v3 Key Usage:
+ Digital Signature, Certificate Sign, CRL Sign
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Subject Key Identifier:
+ 6B:00:86:83:89:D2:00:CF:56:B8:6B:E4:E3:36:10:1E:1F:72:AE:C3
+ 1.3.6.1.4.1.311.21.1:
+ ...
+ X509v3 Certificate Policies:
+ Policy: Class of Signing Tool KC1
+ Policy: Class of Signing Tool KC2
+ Policy: X509v3 Any Policy
+ Signature Algorithm: GOST R 34.11-94 with GOST R 34.10-2001
+ Signature Value:
+ bd:95:dd:5f:3a:2b:74:a5:29:62:20:c2:24:a8:8b:a0:13:1a:
+ 21:f5:4a:d6:2e:b1:3f:f5:50:e9:96:a0:a2:c9:79:09:15:a2:
+ 41:c0:60:e1:1d:3f:25:8d:88:f4:4c:60:f3:0f:4e:e3:29:6e:
+ b8:6e:01:b4:03:2c:07:8f:27:37
+-----BEGIN CERTIFICATE-----
+MIIFGDCCBMegAwIBAgIQDIxAk7vmk71DC/UYJgMdBTAIBgYqhQMCAgMwggEWMRgw
+FgYFKoUDZAESDTEwMjc3MzkzMzQ0NzkxGjAYBggqhQMDgQMBARIMMDA3NzA2MjI4
+MjE4MTowOAYDVQQJDDHQlNC10YDQsdC10L3QtdCy0YHQutCw0Y8g0L3QsNCxLiDQ
+tC4gNyDRgdGC0YAuIDE1MR8wHQYJKoZIhvcNAQkBFhBwa2ktZ3JmY0BncmZjLnJ1
+MQswCQYDVQQGEwJSVTEcMBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDEVMBMG
+A1UEBwwM0JzQvtGB0LrQstCwMRwwGgYDVQQKDBPQpNCT0KPQnyAi0JPQoNCn0KYi
+MSEwHwYDVQQDDBjQo9CmINCk0JPQo9CfICLQk9Cg0KfQpiIwHhcNMTMwMzEyMDcz
+ODI2WhcNMjgwMzEyMDc0NjAwWjCCARYxGDAWBgUqhQNkARINMTAyNzczOTMzNDQ3
+OTEaMBgGCCqFAwOBAwEBEgwwMDc3MDYyMjgyMTgxOjA4BgNVBAkMMdCU0LXRgNCx
+0LXQvdC10LLRgdC60LDRjyDQvdCw0LEuINC0LiA3INGB0YLRgC4gMTUxHzAdBgkq
+hkiG9w0BCQEWEHBraS1ncmZjQGdyZmMucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQI
+DBM3NyDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxHDAa
+BgNVBAoME9Ck0JPQo9CfICLQk9Cg0KfQpiIxITAfBgNVBAMMGNCj0KYg0KTQk9Cj
+0J8gItCT0KDQp9CmIjBjMBwGBiqFAwICEzASBgcqhQMCAiMBBgcqhQMCAh4BA0MA
+BECWU7YnkJgff0sdJ+i50FXAYZlpcSz8wO/2AnfCzGC+PMj/NGOKMMWcv8I9eN7W
+eEXwIuRc96StDM8zJigQGd/1o4IB6TCCAeUwNgYFKoUDZG8ELQwrItCa0YDQuNC/
+0YLQvtCf0YDQviBDU1AiICjQstC10YDRgdC40Y8gMy42KTCCATMGBSqFA2RwBIIB
+KDCCASQMKyLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDMu
+NikMUyLQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAgItCa
+0YDQuNC/0YLQvtCf0YDQviDQo9CmIiDQstC10YDRgdC40LggMS41DE/QodC10YDR
+gtC40YTQuNC60LDRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQv
+MTIxLTE4NTkg0L7RgiAxNy4wNi4yMDEyDE/QodC10YDRgtC40YTQuNC60LDRgiDR
+gdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQvMTI4LTE4MjIg0L7RgiAw
+MS4wNi4yMDEyMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRrAIaDidIAz1a4a+TjNhAeH3KuwzAQBgkrBgEEAYI3FQEEAwIBADAlBgNVHSAE
+HjAcMAgGBiqFA2RxATAIBgYqhQNkcQIwBgYEVR0gADAIBgYqhQMCAgMDQQC9ld1f
+Oit0pSliIMIkqIugExoh9UrWLrE/9VDplqCiyXkJFaJBwGDhHT8ljYj0TGDzD07j
+KW64bgG0AywHjyc3
+-----END CERTIFICATE-----
diff --git a/test/recipes/25-test_sid.t b/test/recipes/25-test_sid.t
new file mode 100644
index 000000000000..ee5eef79c5e5
--- /dev/null
+++ b/test/recipes/25-test_sid.t
@@ -0,0 +1,29 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_sid");
+
+plan skip_all => 'test_sid needs EC to run'
+ if disabled('ec');
+
+plan tests => 2;
+
+require_ok(srctop_file('test','recipes','tconversion.pl'));
+
+subtest 'sid conversions' => sub {
+ tconversion( -type => 'sid', -in => srctop_file("test","testsid.pem"),
+ -args => ["sess_id"] );
+};
diff --git a/test/recipes/25-test_verify.t b/test/recipes/25-test_verify.t
new file mode 100644
index 000000000000..818c9ac50dd3
--- /dev/null
+++ b/test/recipes/25-test_verify.t
@@ -0,0 +1,529 @@
+#! /usr/bin/env perl
+# Copyright 2015-2023 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
+
+
+use strict;
+use warnings;
+
+use File::Spec::Functions qw/canonpath/;
+use File::Copy;
+use OpenSSL::Test qw/:DEFAULT srctop_file bldtop_dir ok_nofips with/;
+use OpenSSL::Test::Utils;
+
+setup("test_verify");
+
+sub verify {
+ my ($cert, $purpose, $trusted, $untrusted, @opts) = @_;
+ my @path = qw(test certs);
+ my @args = qw(openssl verify -auth_level 1);
+ push(@args, "-purpose", $purpose) if $purpose ne "";
+ push(@args, @opts);
+ for (@$trusted) { push(@args, "-trusted", srctop_file(@path, "$_.pem")) }
+ for (@$untrusted) { push(@args, "-untrusted", srctop_file(@path, "$_.pem")) }
+ push(@args, srctop_file(@path, "$cert.pem"));
+ run(app([@args]));
+}
+
+plan tests => 166;
+
+# Canonical success
+ok(verify("ee-cert", "sslserver", ["root-cert"], ["ca-cert"]),
+ "accept compat trust");
+
+# Root CA variants
+ok(!verify("ee-cert", "sslserver", [qw(root-nonca)], [qw(ca-cert)]),
+ "fail trusted non-ca root");
+ok(!verify("ee-cert", "sslserver", [qw(nroot+serverAuth)], [qw(ca-cert)]),
+ "fail server trust non-ca root");
+ok(!verify("ee-cert", "sslserver", [qw(nroot+anyEKU)], [qw(ca-cert)]),
+ "fail wildcard trust non-ca root");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert2)], [qw(ca-cert)]),
+ "fail wrong root key");
+ok(!verify("ee-cert", "sslserver", [qw(root-name2)], [qw(ca-cert)]),
+ "fail wrong root DN");
+
+# Critical extensions
+
+ok(verify("ee-cert-noncrit-unknown-ext", "", ["root-cert"], ["ca-cert"]),
+ "accept non-critical unknown extension");
+ok(!verify("ee-cert-crit-unknown-ext", "", ["root-cert"], ["ca-cert"]),
+ "reject critical unknown extension");
+ok(verify("ee-cert-ocsp-nocheck", "", ["root-cert"], ["ca-cert"]),
+ "accept critical OCSP No Check");
+
+# Explicit trust/purpose combinations
+#
+ok(verify("ee-cert", "sslserver", [qw(sroot-cert)], [qw(ca-cert)]),
+ "accept server purpose");
+ok(!verify("ee-cert", "sslserver", [qw(croot-cert)], [qw(ca-cert)]),
+ "fail client purpose");
+ok(verify("ee-cert", "sslserver", [qw(root+serverAuth)], [qw(ca-cert)]),
+ "accept server trust");
+ok(verify("ee-cert", "sslserver", [qw(sroot+serverAuth)], [qw(ca-cert)]),
+ "accept server trust with server purpose");
+ok(verify("ee-cert", "sslserver", [qw(croot+serverAuth)], [qw(ca-cert)]),
+ "accept server trust with client purpose");
+# Wildcard trust
+ok(verify("ee-cert", "sslserver", [qw(root+anyEKU)], [qw(ca-cert)]),
+ "accept wildcard trust");
+ok(verify("ee-cert", "sslserver", [qw(sroot+anyEKU)], [qw(ca-cert)]),
+ "accept wildcard trust with server purpose");
+ok(verify("ee-cert", "sslserver", [qw(croot+anyEKU)], [qw(ca-cert)]),
+ "accept wildcard trust with client purpose");
+# Inapplicable mistrust
+ok(verify("ee-cert", "sslserver", [qw(root-clientAuth)], [qw(ca-cert)]),
+ "accept client mistrust");
+ok(verify("ee-cert", "sslserver", [qw(sroot-clientAuth)], [qw(ca-cert)]),
+ "accept client mistrust with server purpose");
+ok(!verify("ee-cert", "sslserver", [qw(croot-clientAuth)], [qw(ca-cert)]),
+ "fail client mistrust with client purpose");
+# Inapplicable trust
+ok(!verify("ee-cert", "sslserver", [qw(root+clientAuth)], [qw(ca-cert)]),
+ "fail client trust");
+ok(!verify("ee-cert", "sslserver", [qw(sroot+clientAuth)], [qw(ca-cert)]),
+ "fail client trust with server purpose");
+ok(!verify("ee-cert", "sslserver", [qw(croot+clientAuth)], [qw(ca-cert)]),
+ "fail client trust with client purpose");
+# Server mistrust
+ok(!verify("ee-cert", "sslserver", [qw(root-serverAuth)], [qw(ca-cert)]),
+ "fail rejected EKU");
+ok(!verify("ee-cert", "sslserver", [qw(sroot-serverAuth)], [qw(ca-cert)]),
+ "fail server mistrust with server purpose");
+ok(!verify("ee-cert", "sslserver", [qw(croot-serverAuth)], [qw(ca-cert)]),
+ "fail server mistrust with client purpose");
+# Wildcard mistrust
+ok(!verify("ee-cert", "sslserver", [qw(root-anyEKU)], [qw(ca-cert)]),
+ "fail wildcard mistrust");
+ok(!verify("ee-cert", "sslserver", [qw(sroot-anyEKU)], [qw(ca-cert)]),
+ "fail wildcard mistrust with server purpose");
+ok(!verify("ee-cert", "sslserver", [qw(croot-anyEKU)], [qw(ca-cert)]),
+ "fail wildcard mistrust with client purpose");
+
+# Check that trusted-first is on by setting up paths to different roots
+# depending on whether the intermediate is the trusted or untrusted one.
+#
+ok(verify("ee-cert", "sslserver", [qw(root-serverAuth root-cert2 ca-root2)],
+ [qw(ca-cert)]),
+ "accept trusted-first path");
+ok(verify("ee-cert", "sslserver", [qw(root-cert root2+serverAuth ca-root2)],
+ [qw(ca-cert)]),
+ "accept trusted-first path with server trust");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert root2-serverAuth ca-root2)],
+ [qw(ca-cert)]),
+ "fail trusted-first path with server mistrust");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert root2+clientAuth ca-root2)],
+ [qw(ca-cert)]),
+ "fail trusted-first path with client trust");
+
+# CA variants
+ok(!verify("ee-cert", "sslserver", [qw(root-cert)], [qw(ca-nonca)]),
+ "fail non-CA untrusted intermediate");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert)], [qw(ca-nonbc)]),
+ "fail non-CA untrusted intermediate");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert ca-nonca)], []),
+ "fail non-CA trust-store intermediate");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert ca-nonbc)], []),
+ "fail non-CA trust-store intermediate");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert nca+serverAuth)], []),
+ "fail non-CA server trust intermediate");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert nca+anyEKU)], []),
+ "fail non-CA wildcard trust intermediate");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert)], [qw(ca-cert2)]),
+ "fail wrong intermediate CA key");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert)], [qw(ca-name2)]),
+ "fail wrong intermediate CA DN");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert)], [qw(ca-root2)]),
+ "fail wrong intermediate CA issuer");
+ok(!verify("ee-cert", "sslserver", [], [qw(ca-cert)], "-partial_chain"),
+ "fail untrusted partial chain");
+ok(verify("ee-cert", "sslserver", [qw(ca-cert)], [], "-partial_chain"),
+ "accept trusted partial chain");
+ok(!verify("ee-cert", "sslserver", [qw(ca-expired)], [], "-partial_chain"),
+ "reject expired trusted partial chain"); # this check is beyond RFC 5280
+ok(!verify("ee-cert", "sslserver", [qw(root-expired)], [qw(ca-cert)]),
+ "reject expired trusted root"); # this check is beyond RFC 5280
+ok(verify("ee-cert", "sslserver", [qw(sca-cert)], [], "-partial_chain"),
+ "accept partial chain with server purpose");
+ok(!verify("ee-cert", "sslserver", [qw(cca-cert)], [], "-partial_chain"),
+ "fail partial chain with client purpose");
+ok(verify("ee-cert", "sslserver", [qw(ca+serverAuth)], [], "-partial_chain"),
+ "accept server trust partial chain");
+ok(verify("ee-cert", "sslserver", [qw(cca+serverAuth)], [], "-partial_chain"),
+ "accept server trust client purpose partial chain");
+ok(verify("ee-cert", "sslserver", [qw(ca-clientAuth)], [], "-partial_chain"),
+ "accept client mistrust partial chain");
+ok(verify("ee-cert", "sslserver", [qw(ca+anyEKU)], [], "-partial_chain"),
+ "accept wildcard trust partial chain");
+ok(!verify("ee-cert", "sslserver", [], [qw(ca+serverAuth)], "-partial_chain"),
+ "fail untrusted partial issuer with ignored server trust");
+ok(!verify("ee-cert", "sslserver", [qw(ca-serverAuth)], [], "-partial_chain"),
+ "fail server mistrust partial chain");
+ok(!verify("ee-cert", "sslserver", [qw(ca+clientAuth)], [], "-partial_chain"),
+ "fail client trust partial chain");
+ok(!verify("ee-cert", "sslserver", [qw(ca-anyEKU)], [], "-partial_chain"),
+ "fail wildcard mistrust partial chain");
+
+# We now test auxiliary trust even for intermediate trusted certs without
+# -partial_chain. Note that "-trusted_first" is now always on and cannot
+# be disabled.
+ok(verify("ee-cert", "sslserver", [qw(root-cert ca+serverAuth)], [qw(ca-cert)]),
+ "accept server trust");
+ok(verify("ee-cert", "sslserver", [qw(root-cert ca+anyEKU)], [qw(ca-cert)]),
+ "accept wildcard trust");
+ok(verify("ee-cert", "sslserver", [qw(root-cert sca-cert)], [qw(ca-cert)]),
+ "accept server purpose");
+ok(verify("ee-cert", "sslserver", [qw(root-cert sca+serverAuth)], [qw(ca-cert)]),
+ "accept server trust and purpose");
+ok(verify("ee-cert", "sslserver", [qw(root-cert sca+anyEKU)], [qw(ca-cert)]),
+ "accept wildcard trust and server purpose");
+ok(verify("ee-cert", "sslserver", [qw(root-cert sca-clientAuth)], [qw(ca-cert)]),
+ "accept client mistrust and server purpose");
+ok(verify("ee-cert", "sslserver", [qw(root-cert cca+serverAuth)], [qw(ca-cert)]),
+ "accept server trust and client purpose");
+ok(verify("ee-cert", "sslserver", [qw(root-cert cca+anyEKU)], [qw(ca-cert)]),
+ "accept wildcard trust and client purpose");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert cca-cert)], [qw(ca-cert)]),
+ "fail client purpose");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert ca-anyEKU)], [qw(ca-cert)]),
+ "fail wildcard mistrust");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert ca-serverAuth)], [qw(ca-cert)]),
+ "fail server mistrust");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert ca+clientAuth)], [qw(ca-cert)]),
+ "fail client trust");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert sca+clientAuth)], [qw(ca-cert)]),
+ "fail client trust and server purpose");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert cca+clientAuth)], [qw(ca-cert)]),
+ "fail client trust and client purpose");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert cca-serverAuth)], [qw(ca-cert)]),
+ "fail server mistrust and client purpose");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert cca-clientAuth)], [qw(ca-cert)]),
+ "fail client mistrust and client purpose");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert sca-serverAuth)], [qw(ca-cert)]),
+ "fail server mistrust and server purpose");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert sca-anyEKU)], [qw(ca-cert)]),
+ "fail wildcard mistrust and server purpose");
+ok(!verify("ee-cert", "sslserver", [qw(root-cert cca-anyEKU)], [qw(ca-cert)]),
+ "fail wildcard mistrust and client purpose");
+
+# EE variants
+ok(verify("ee-client", "sslclient", [qw(root-cert)], [qw(ca-cert)]),
+ "accept client chain");
+ok(!verify("ee-client", "sslserver", [qw(root-cert)], [qw(ca-cert)]),
+ "fail server leaf purpose");
+ok(!verify("ee-cert", "sslclient", [qw(root-cert)], [qw(ca-cert)]),
+ "fail client leaf purpose");
+ok(!verify("ee-cert2", "sslserver", [qw(root-cert)], [qw(ca-cert)]),
+ "fail wrong intermediate CA key");
+ok(!verify("ee-name2", "sslserver", [qw(root-cert)], [qw(ca-cert)]),
+ "fail wrong intermediate CA DN");
+ok(!verify("ee-expired", "sslserver", [qw(root-cert)], [qw(ca-cert)]),
+ "fail expired leaf");
+ok(verify("ee-cert", "sslserver", [qw(ee-cert)], [], "-partial_chain"),
+ "accept last-resort direct leaf match");
+ok(verify("ee-client", "sslclient", [qw(ee-client)], [], "-partial_chain"),
+ "accept last-resort direct leaf match");
+ok(!verify("ee-cert", "sslserver", [qw(ee-client)], [], "-partial_chain"),
+ "fail last-resort direct leaf non-match");
+ok(verify("ee-cert", "sslserver", [qw(ee+serverAuth)], [], "-partial_chain"),
+ "accept direct match with server trust");
+ok(!verify("ee-cert", "sslserver", [qw(ee-serverAuth)], [], "-partial_chain"),
+ "fail direct match with server mistrust");
+ok(verify("ee-client", "sslclient", [qw(ee+clientAuth)], [], "-partial_chain"),
+ "accept direct match with client trust");
+ok(!verify("ee-client", "sslclient", [qw(ee-clientAuth)], [], "-partial_chain"),
+ "reject direct match with client mistrust");
+ok(verify("ee-pathlen", "sslserver", [qw(root-cert)], [qw(ca-cert)]),
+ "accept non-ca with pathlen:0 by default");
+ok(!verify("ee-pathlen", "sslserver", [qw(root-cert)], [qw(ca-cert)], "-x509_strict"),
+ "reject non-ca with pathlen:0 with strict flag");
+
+# Proxy certificates
+ok(!verify("pc1-cert", "sslclient", [qw(root-cert)], [qw(ee-client ca-cert)]),
+ "fail to accept proxy cert without -allow_proxy_certs");
+ok(verify("pc1-cert", "sslclient", [qw(root-cert)], [qw(ee-client ca-cert)],
+ "-allow_proxy_certs"),
+ "accept proxy cert 1");
+ok(verify("pc2-cert", "sslclient", [qw(root-cert)], [qw(pc1-cert ee-client ca-cert)],
+ "-allow_proxy_certs"),
+ "accept proxy cert 2");
+ok(!verify("bad-pc3-cert", "sslclient", [qw(root-cert)], [qw(pc1-cert ee-client ca-cert)],
+ "-allow_proxy_certs"),
+ "fail proxy cert with incorrect subject");
+ok(!verify("bad-pc4-cert", "sslclient", [qw(root-cert)], [qw(pc1-cert ee-client ca-cert)],
+ "-allow_proxy_certs"),
+ "fail proxy cert with incorrect pathlen");
+ok(verify("pc5-cert", "sslclient", [qw(root-cert)], [qw(pc1-cert ee-client ca-cert)],
+ "-allow_proxy_certs"),
+ "accept proxy cert missing proxy policy");
+ok(!verify("pc6-cert", "sslclient", [qw(root-cert)], [qw(pc1-cert ee-client ca-cert)],
+ "-allow_proxy_certs"),
+ "failed proxy cert where last CN was added as a multivalue RDN component");
+
+# Security level tests
+ok(verify("ee-cert", "", ["root-cert"], ["ca-cert"], "-auth_level", "2"),
+ "accept RSA 2048 chain at auth level 2");
+ok(!verify("ee-cert", "", ["root-cert"], ["ca-cert"], "-auth_level", "3"),
+ "reject RSA 2048 root at auth level 3");
+ok(verify("ee-cert", "", ["root-cert-768"], ["ca-cert-768i"], "-auth_level", "0"),
+ "accept RSA 768 root at auth level 0");
+ok(!verify("ee-cert", "", ["root-cert-768"], ["ca-cert-768i"]),
+ "reject RSA 768 root at auth level 1");
+ok(verify("ee-cert-768i", "", ["root-cert"], ["ca-cert-768"], "-auth_level", "0"),
+ "accept RSA 768 intermediate at auth level 0");
+ok(!verify("ee-cert-768i", "", ["root-cert"], ["ca-cert-768"]),
+ "reject RSA 768 intermediate at auth level 1");
+ok(verify("ee-cert-768", "", ["root-cert"], ["ca-cert"], "-auth_level", "0"),
+ "accept RSA 768 leaf at auth level 0");
+ok(!verify("ee-cert-768", "", ["root-cert"], ["ca-cert"]),
+ "reject RSA 768 leaf at auth level 1");
+#
+ok(verify("ee-cert", "", ["root-cert-md5"], ["ca-cert"], "-auth_level", "2"),
+ "accept md5 self-signed TA at auth level 2");
+ok(verify("ee-cert", "", ["ca-cert-md5-any"], [], "-auth_level", "2"),
+ "accept md5 intermediate TA at auth level 2");
+ok(verify("ee-cert", "", ["root-cert"], ["ca-cert-md5"], "-auth_level", "0"),
+ "accept md5 intermediate at auth level 0");
+ok(!verify("ee-cert", "", ["root-cert"], ["ca-cert-md5"]),
+ "reject md5 intermediate at auth level 1");
+ok(verify("ee-cert-md5", "", ["root-cert"], ["ca-cert"], "-auth_level", "0"),
+ "accept md5 leaf at auth level 0");
+ok(!verify("ee-cert-md5", "", ["root-cert"], ["ca-cert"]),
+ "reject md5 leaf at auth level 1");
+
+# Explicit vs named curve tests
+SKIP: {
+ skip "EC is not supported by this OpenSSL build", 3
+ if disabled("ec");
+ ok(!verify("ee-cert-ec-explicit", "", ["root-cert"],
+ ["ca-cert-ec-named"]),
+ "reject explicit curve leaf with named curve intermediate");
+ ok(!verify("ee-cert-ec-named-explicit", "", ["root-cert"],
+ ["ca-cert-ec-explicit"]),
+ "reject named curve leaf with explicit curve intermediate");
+ ok(verify("ee-cert-ec-named-named", "", ["root-cert"],
+ ["ca-cert-ec-named"]),
+ "accept named curve leaf with named curve intermediate");
+}
+# Same as above but with base provider used for decoding
+SKIP: {
+ my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+ my $provconf = srctop_file("test", "fips-and-base.cnf");
+ my $provpath = bldtop_dir("providers");
+ my @prov = ("-provider-path", $provpath);
+
+ skip "EC is not supported or FIPS is disabled", 3
+ if disabled("ec") || $no_fips;
+
+ run(test(["fips_version_test", "-config", $provconf, ">3.0.0"]),
+ capture => 1, statusvar => \my $exit);
+ skip "FIPS provider version is too old", 3
+ if !$exit;
+
+ $ENV{OPENSSL_CONF} = $provconf;
+
+ ok(!verify("ee-cert-ec-explicit", "", ["root-cert"],
+ ["ca-cert-ec-named"], @prov),
+ "reject explicit curve leaf with named curve intermediate w/fips");
+ ok(!verify("ee-cert-ec-named-explicit", "", ["root-cert"],
+ ["ca-cert-ec-explicit"], @prov),
+ "reject named curve leaf with explicit curve intermediate w/fips");
+ ok(verify("ee-cert-ec-named-named", "", ["root-cert"],
+ ["ca-cert-ec-named"], @prov),
+ "accept named curve leaf with named curve intermediate w/fips");
+
+ delete $ENV{OPENSSL_CONF};
+}
+
+# Depth tests, note the depth limit bounds the number of CA certificates
+# between the trust-anchor and the leaf, so, for example, with a root->ca->leaf
+# chain, depth = 1 is sufficient, but depth == 0 is not.
+#
+ok(verify("ee-cert", "", ["root-cert"], ["ca-cert"], "-verify_depth", "2"),
+ "accept chain with verify_depth 2");
+ok(verify("ee-cert", "", ["root-cert"], ["ca-cert"], "-verify_depth", "1"),
+ "accept chain with verify_depth 1");
+ok(!verify("ee-cert", "", ["root-cert"], ["ca-cert"], "-verify_depth", "0"),
+ "reject chain with verify_depth 0");
+ok(verify("ee-cert", "", ["ca-cert-md5-any"], [], "-verify_depth", "0"),
+ "accept md5 intermediate TA with verify_depth 0");
+
+# Name Constraints tests.
+
+ok(verify("alt1-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints everything permitted");
+
+ok(verify("alt2-cert", "", ["root-cert"], ["ncca2-cert"], ),
+ "Name Constraints nothing excluded");
+
+ok(verify("alt3-cert", "", ["root-cert"], ["ncca1-cert", "ncca3-cert"], ),
+ "Name Constraints nested test all permitted");
+
+ok(verify("goodcn1-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints CNs permitted");
+
+ok(verify("goodcn2-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints CNs permitted - no SAN extension");
+
+ok(!verify("badcn1-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints CNs not permitted");
+
+ok(!verify("badalt1-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints hostname not permitted");
+
+ok(!verify("badalt2-cert", "", ["root-cert"], ["ncca2-cert"], ),
+ "Name Constraints hostname excluded");
+
+ok(!verify("badalt3-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints email address not permitted");
+
+ok(!verify("badalt4-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints subject email address not permitted");
+
+ok(!verify("badalt5-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints IP address not permitted");
+
+ok(!verify("badalt6-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints CN hostname not permitted");
+
+ok(!verify("badalt7-cert", "", ["root-cert"], ["ncca1-cert"], ),
+ "Name Constraints CN BMPSTRING hostname not permitted");
+
+ok(!verify("badalt8-cert", "", ["root-cert"], ["ncca1-cert", "ncca3-cert"], ),
+ "Name constraints nested DNS name not permitted 1");
+
+ok(!verify("badalt9-cert", "", ["root-cert"], ["ncca1-cert", "ncca3-cert"], ),
+ "Name constraints nested DNS name not permitted 2");
+
+ok(!verify("badalt10-cert", "", ["root-cert"], ["ncca1-cert", "ncca3-cert"], ),
+ "Name constraints nested DNS name excluded");
+
+ok(!verify("bad-othername-cert", "", ["root-cert"], ["nccaothername-cert"], ),
+ "CVE-2022-4203 type confusion test");
+
+#Check that we get the expected failure return code
+with({ exit_checker => sub { return shift == 2; } },
+ sub {
+ ok(verify("bad-othername-namec", "", ["bad-othername-namec-inter"], [],
+ "-partial_chain", "-attime", "1623060000"),
+ "Name constraints bad othername name constraint");
+ });
+
+ok(verify("ee-pss-sha1-cert", "", ["root-cert"], ["ca-cert"], "-auth_level", "0"),
+ "Accept PSS signature using SHA1 at auth level 0");
+
+ok(verify("ee-pss-sha256-cert", "", ["root-cert"], ["ca-cert"], ),
+ "CA with PSS signature using SHA256");
+
+ok(!verify("ee-pss-sha1-cert", "", ["root-cert"], ["ca-cert"], "-auth_level", "1"),
+ "Reject PSS signature using SHA1 and auth level 1");
+
+ok(verify("ee-pss-sha256-cert", "", ["root-cert"], ["ca-cert"], "-auth_level", "2"),
+ "PSS signature using SHA256 and auth level 2");
+
+ok(verify("ee-pss-cert", "", ["root-cert"], ["ca-pss-cert"], ),
+ "CA PSS signature");
+ok(!verify("ee-pss-wrong1.5-cert", "", ["root-cert"], ["ca-pss-cert"], ),
+ "CA producing regular PKCS#1 v1.5 signature with PSA-PSS key");
+
+ok(!verify("many-names1", "", ["many-constraints"], ["many-constraints"], ),
+ "Too many names and constraints to check (1)");
+ok(!verify("many-names2", "", ["many-constraints"], ["many-constraints"], ),
+ "Too many names and constraints to check (2)");
+ok(!verify("many-names3", "", ["many-constraints"], ["many-constraints"], ),
+ "Too many names and constraints to check (3)");
+
+ok(verify("some-names1", "", ["many-constraints"], ["many-constraints"], ),
+ "Not too many names and constraints to check (1)");
+ok(verify("some-names2", "", ["many-constraints"], ["many-constraints"], ),
+ "Not too many names and constraints to check (2)");
+ok(verify("some-names2", "", ["many-constraints"], ["many-constraints"], ),
+ "Not too many names and constraints to check (3)");
+ok(verify("root-cert-rsa2", "", ["root-cert-rsa2"], [], "-check_ss_sig"),
+ "Public Key Algorithm rsa instead of rsaEncryption");
+
+ok(verify("ee-self-signed", "", ["ee-self-signed"], [], "-attime", "1593565200"),
+ "accept trusted self-signed EE cert excluding key usage keyCertSign");
+ok(verify("ee-ss-with-keyCertSign", "", ["ee-ss-with-keyCertSign"], []),
+ "accept trusted self-signed EE cert with key usage keyCertSign also when strict");
+
+SKIP: {
+ skip "Ed25519 is not supported by this OpenSSL build", 6
+ if disabled("ec");
+
+ # ED25519 certificate from draft-ietf-curdle-pkix-04
+ ok(verify("ee-ed25519", "", ["root-ed25519"], []),
+ "accept X25519 EE cert issued by trusted Ed25519 self-signed CA cert");
+
+ ok(!verify("ee-ed25519", "", ["root-ed25519"], [], "-x509_strict"),
+ "reject X25519 EE cert in strict mode since AKID is missing");
+
+ ok(!verify("root-ed25519", "", ["ee-ed25519"], []),
+ "fail Ed25519 CA and EE certs swapped");
+
+ ok(verify("root-ed25519", "", ["root-ed25519"], []),
+ "accept trusted Ed25519 self-signed CA cert");
+
+ ok(!verify("ee-ed25519", "", ["ee-ed25519"], []),
+ "fail trusted Ed25519-signed self-issued X25519 cert");
+
+ ok(verify("ee-ed25519", "", ["ee-ed25519"], [], "-partial_chain"),
+ "accept last-resort direct leaf match Ed25519-signed self-issued cert");
+
+}
+
+SKIP: {
+ skip "SM2 is not supported by this OpenSSL build", 2 if disabled("sm2");
+
+ ok_nofips(verify("sm2", "", ["sm2-ca-cert"], [], "-vfyopt", "distid:1234567812345678"),
+ "SM2 ID test");
+ ok_nofips(verify("sm2", "", ["sm2-ca-cert"], [], "-vfyopt", "hexdistid:31323334353637383132333435363738"),
+ "SM2 hex ID test");
+}
+
+# Mixed content tests
+my $cert_file = srctop_file('test', 'certs', 'root-cert.pem');
+my $rsa_file = srctop_file('test', 'certs', 'key-pass-12345.pem');
+
+SKIP: {
+ my $certplusrsa_file = 'certplusrsa.pem';
+ my $certplusrsa;
+
+ skip "Couldn't create certplusrsa.pem", 1
+ unless ( open $certplusrsa, '>', $certplusrsa_file
+ and copy($cert_file, $certplusrsa)
+ and copy($rsa_file, $certplusrsa)
+ and close $certplusrsa );
+
+ ok(run(app([ qw(openssl verify -trusted), $certplusrsa_file, $cert_file ])),
+ 'Mixed cert + key file test');
+}
+
+SKIP: {
+ my $rsapluscert_file = 'rsapluscert.pem';
+ my $rsapluscert;
+
+ skip "Couldn't create rsapluscert.pem", 1
+ unless ( open $rsapluscert, '>', $rsapluscert_file
+ and copy($rsa_file, $rsapluscert)
+ and copy($cert_file, $rsapluscert)
+ and close $rsapluscert );
+
+ ok(run(app([ qw(openssl verify -trusted), $rsapluscert_file, $cert_file ])),
+ 'Mixed key + cert file test');
+}
+
+# Certificate Policies
+ok(verify("ee-cert-policies", "", ["root-cert"], ["ca-pol-cert"],
+ "-policy_check", "-policy", "1.3.6.1.4.1.16604.998855.1",
+ "-explicit_policy"),
+ "Certificate policy");
+
+ok(!verify("ee-cert-policies-bad", "", ["root-cert"], ["ca-pol-cert"],
+ "-policy_check", "-policy", "1.3.6.1.4.1.16604.998855.1",
+ "-explicit_policy"),
+ "Bad certificate policy");
diff --git a/test/recipes/25-test_verify_store.t b/test/recipes/25-test_verify_store.t
new file mode 100644
index 000000000000..346396a628bb
--- /dev/null
+++ b/test/recipes/25-test_verify_store.t
@@ -0,0 +1,117 @@
+#! /usr/bin/env perl
+# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT with bldtop_file srctop_file cmdstr/;
+use OpenSSL::Test::Utils;
+
+setup("test_verify_store");
+
+plan tests => 10;
+
+my $dummycnf = srctop_file("apps", "openssl.cnf");
+my $cakey = srctop_file("test", "certs", "ca-key.pem");
+my $ukey = srctop_file("test", "certs", "ee-key.pem");
+
+my $cnf = srctop_file("test", "ca-and-certs.cnf");
+my $CAkey = "keyCA.ss";
+my $CAcert="certCA.ss";
+my $CAserial="certCA.srl";
+my $CAreq="reqCA.ss";
+my $CAreq2="req2CA.ss"; # temp
+my $Ukey="keyU.ss";
+my $Ureq="reqU.ss";
+my $Ucert="certU.ss";
+
+SKIP: {
+ req( 'make cert request',
+ qw(-new -section userreq),
+ -config => $cnf,
+ -out => $CAreq,
+ -key => $cakey,
+ -keyout => $CAkey );
+
+ skip 'failure', 8 unless
+ x509( 'convert request into self-signed cert',
+ qw(-req -CAcreateserial -days 30),
+ qw(-extensions v3_ca),
+ -in => $CAreq,
+ -out => $CAcert,
+ -signkey => $CAkey,
+ -extfile => $cnf );
+
+ skip 'failure', 7 unless
+ x509( 'convert cert into a cert request',
+ qw(-x509toreq),
+ -in => $CAcert,
+ -out => $CAreq2,
+ -signkey => $CAkey );
+
+ skip 'failure', 6 unless
+ req( 'verify request 1',
+ qw(-verify -noout -section userreq),
+ -config => $dummycnf,
+ -in => $CAreq );
+
+ skip 'failure', 5 unless
+ req( 'verify request 2',
+ qw(-verify -noout -section userreq),
+ -config => $dummycnf,
+ -in => $CAreq2 );
+
+ skip 'failure', 4 unless
+ verify( 'verify signature',
+ -CAstore => $CAcert,
+ $CAcert );
+
+ skip 'failure', 3 unless
+ req( 'make a user cert request',
+ qw(-new -section userreq),
+ -config => $cnf,
+ -out => $Ureq,
+ -key => $ukey,
+ -keyout => $Ukey );
+
+ skip 'failure', 2 unless
+ x509( 'sign user cert request',
+ qw(-req -CAcreateserial -days 30 -extensions v3_ee),
+ -in => $Ureq,
+ -out => $Ucert,
+ -CA => $CAcert,
+ -CAkey => $CAkey,
+ -CAserial => $CAserial,
+ -extfile => $cnf )
+ && verify( undef,
+ -CAstore => $CAcert,
+ $Ucert );
+
+ skip 'failure', 0 unless
+ x509( 'Certificate details',
+ qw(-subject -issuer -startdate -enddate -noout),
+ -in => $Ucert );
+}
+
+sub verify {
+ my $title = shift;
+
+ ok(run(app([qw(openssl verify), @_])), $title);
+}
+
+sub req {
+ my $title = shift;
+
+ ok(run(app([qw(openssl req), @_])), $title);
+}
+
+sub x509 {
+ my $title = shift;
+
+ ok(run(app([qw(openssl x509), @_])), $title);
+}
diff --git a/test/recipes/25-test_x509.t b/test/recipes/25-test_x509.t
new file mode 100644
index 000000000000..8092f7b71549
--- /dev/null
+++ b/test/recipes/25-test_x509.t
@@ -0,0 +1,211 @@
+#! /usr/bin/env perl
+# Copyright 2015-2024 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_x509");
+
+plan tests => 29;
+
+# Prevent MSys2 filename munging for arguments that look like file paths but
+# aren't
+$ENV{MSYS2_ARG_CONV_EXCL} = "/CN=";
+
+require_ok(srctop_file("test", "recipes", "tconversion.pl"));
+
+my @certs = qw(test certs);
+my $pem = srctop_file(@certs, "cyrillic.pem");
+my $out_msb = "out-cyrillic.msb";
+my $out_utf8 = "out-cyrillic.utf8";
+my $der = "cyrillic.der";
+my $der2 = "cyrillic.der";
+my $msb = srctop_file(@certs, "cyrillic.msb");
+my $utf = srctop_file(@certs, "cyrillic.utf8");
+
+ok(run(app(["openssl", "x509", "-text", "-in", $pem, "-out", $out_msb,
+ "-nameopt", "esc_msb"])));
+is(cmp_text($out_msb, $msb),
+ 0, 'Comparing esc_msb output with cyrillic.msb');
+ok(run(app(["openssl", "x509", "-text", "-in", $pem, "-out", $out_utf8,
+ "-nameopt", "utf8"])));
+is(cmp_text($out_utf8, $utf),
+ 0, 'Comparing utf8 output with cyrillic.utf8');
+
+SKIP: {
+ skip "DES disabled", 1 if disabled("des");
+ skip "Platform doesn't support command line UTF-8", 1 if $^O =~ /^(VMS|msys)$/;
+
+ my $p12 = srctop_file("test", "shibboleth.pfx");
+ my $p12pass = "σÏνθημα γνώÏισμα";
+ my $out_pem = "out.pem";
+ ok(run(app(["openssl", "x509", "-text", "-in", $p12, "-out", $out_pem,
+ "-passin", "pass:$p12pass"])));
+ # not unlinking $out_pem
+}
+
+ok(!run(app(["openssl", "x509", "-in", $pem, "-inform", "DER",
+ "-out", $der, "-outform", "DER"])),
+ "Checking failure of mismatching -inform DER");
+ok(run(app(["openssl", "x509", "-in", $pem, "-inform", "PEM",
+ "-out", $der, "-outform", "DER"])),
+ "Conversion to DER");
+ok(!run(app(["openssl", "x509", "-in", $der, "-inform", "PEM",
+ "-out", $der2, "-outform", "DER"])),
+ "Checking failure of mismatching -inform PEM");
+
+# producing and checking self-issued (but not self-signed) cert
+my $subj = "/CN=CA"; # using same DN as in issuer of ee-cert.pem
+my $extfile = srctop_file("test", "v3_ca_exts.cnf");
+my $pkey = srctop_file(@certs, "ca-key.pem"); # issuer private key
+my $pubkey = "ca-pubkey.pem"; # the corresponding issuer public key
+# use any (different) key for signing our self-issued cert:
+my $signkey = srctop_file(@certs, "serverkey.pem");
+my $selfout = "self-issued.out";
+my $testcert = srctop_file(@certs, "ee-cert.pem");
+ok(run(app(["openssl", "pkey", "-in", $pkey, "-pubout", "-out", $pubkey]))
+&& run(app(["openssl", "x509", "-new", "-force_pubkey", $pubkey,
+ "-subj", $subj, "-extfile", $extfile,
+ "-signkey", $signkey, "-out", $selfout]))
+&& run(app(["openssl", "verify", "-no_check_time",
+ "-trusted", $selfout, "-partial_chain", $testcert])));
+# not unlinking $pubkey
+# not unlinking $selfout
+
+subtest 'x509 -- x.509 v1 certificate' => sub {
+ tconversion( -type => 'x509', -prefix => 'x509v1',
+ -in => srctop_file("test", "testx509.pem") );
+};
+subtest 'x509 -- first x.509 v3 certificate' => sub {
+ tconversion( -type => 'x509', -prefix => 'x509v3-1',
+ -in => srctop_file("test", "v3-cert1.pem") );
+};
+subtest 'x509 -- second x.509 v3 certificate' => sub {
+ tconversion( -type => 'x509', -prefix => 'x509v3-2',
+ -in => srctop_file("test", "v3-cert2.pem") );
+};
+
+subtest 'x509 -- pathlen' => sub {
+ ok(run(test(["v3ext", srctop_file(@certs, "pathlen.pem")])));
+};
+
+cert_contains(srctop_file(@certs, "fake-gp.pem"),
+ "2.16.528.1.1003.1.3.5.5.2-1-0000006666-Z-12345678-01.015-12345678",
+ 1, 'x500 -- subjectAltName');
+
+sub test_errors { # actually tests diagnostics of OSSL_STORE
+ my ($expected, $cert, @opts) = @_;
+ my $infile = srctop_file(@certs, $cert);
+ my @args = qw(openssl x509 -in);
+ push(@args, $infile, @opts);
+ my $tmpfile = 'out.txt';
+ my $res = grep(/-text/, @opts) ? run(app([@args], stdout => $tmpfile))
+ : !run(app([@args], stderr => $tmpfile));
+ my $found = 0;
+ open(my $in, '<', $tmpfile) or die "Could not open file $tmpfile";
+ while(<$in>) {
+ print; # this may help debugging
+ $res &&= !m/asn1 encoding/; # output must not include ASN.1 parse errors
+ $found = 1 if m/$expected/; # output must include $expected
+ }
+ close $in;
+ # $tmpfile is kept to help with investigation in case of failure
+ return $res && $found;
+}
+
+# 3 tests for non-existence of spurious OSSL_STORE ASN.1 parse error output.
+# This requires provoking a failure exit of the app after reading input files.
+ok(test_errors("Bad output format", "root-cert.pem", '-outform', 'http'),
+ "load root-cert errors");
+ok(test_errors("RC2-40-CBC", "v3-certs-RC2.p12", '-passin', 'pass:v3-certs'),
+ "load v3-certs-RC2 no asn1 errors"); # error msg should mention "RC2-40-CBC"
+SKIP: {
+ skip "sm2 not disabled", 1 if !disabled("sm2");
+
+ ok(test_errors("Unable to load Public Key", "sm2.pem", '-text'),
+ "error loading unsupported sm2 cert");
+}
+
+# 3 tests for -dateopts formats
+ok(run(app(["openssl", "x509", "-noout", "-dates", "-dateopt", "rfc_822",
+ "-in", srctop_file("test/certs", "ca-cert.pem")])),
+ "Run with rfc_8222 -dateopt format");
+ok(run(app(["openssl", "x509", "-noout", "-dates", "-dateopt", "iso_8601",
+ "-in", srctop_file("test/certs", "ca-cert.pem")])),
+ "Run with iso_8601 -dateopt format");
+ok(!run(app(["openssl", "x509", "-noout", "-dates", "-dateopt", "invalid_format",
+ "-in", srctop_file("test/certs", "ca-cert.pem")])),
+ "Run with invalid -dateopt format");
+
+# extracts issuer from a -text formatted-output
+sub get_issuer {
+ my $f = shift(@_);
+ my $issuer = "";
+ open my $fh, $f or die;
+ while (my $line = <$fh>) {
+ if ($line =~ /Issuer:/) {
+ $issuer = $line;
+ }
+ }
+ close $fh;
+ return $issuer;
+}
+
+# Tests for signing certs (broken in 1.1.1o)
+my $a_key = "a-key.pem";
+my $a_cert = "a-cert.pem";
+my $a2_cert = "a2-cert.pem";
+my $ca_key = "ca-key.pem";
+my $ca_cert = "ca-cert.pem";
+my $cnf = srctop_file('apps', 'openssl.cnf');
+
+# Create cert A
+ok(run(app(["openssl", "req", "-x509", "-newkey", "rsa:2048",
+ "-config", $cnf,
+ "-keyout", $a_key, "-out", $a_cert, "-days", "365",
+ "-nodes", "-subj", "/CN=test.example.com"])));
+# Create cert CA - note key size
+ok(run(app(["openssl", "req", "-x509", "-newkey", "rsa:4096",
+ "-config", $cnf,
+ "-keyout", $ca_key, "-out", $ca_cert, "-days", "3650",
+ "-nodes", "-subj", "/CN=ca.example.com"])));
+# Sign cert A with CA (errors on 1.1.1o)
+ok(run(app(["openssl", "x509", "-in", $a_cert, "-CA", $ca_cert,
+ "-CAkey", $ca_key, "-set_serial", "1234567890",
+ "-preserve_dates", "-sha256", "-text", "-out", $a2_cert])));
+# verify issuer is CA
+ok (get_issuer($a2_cert) =~ /CN = ca.example.com/);
+
+my $in_csr = srctop_file('test', 'certs', 'x509-check.csr');
+my $in_key = srctop_file('test', 'certs', 'x509-check-key.pem');
+my $invextfile = srctop_file('test', 'invalid-x509.cnf');
+# Test that invalid extensions settings fail
+ok(!run(app(["openssl", "x509", "-req", "-in", $in_csr, "-signkey", $in_key,
+ "-out", "/dev/null", "-days", "3650" , "-extensions", "ext",
+ "-extfile", $invextfile])));
+
+# Tests for issue #16080 (fixed in 1.1.1o)
+my $b_key = "b-key.pem";
+my $b_csr = "b-cert.csr";
+my $b_cert = "b-cert.pem";
+# Create the CSR
+ok(run(app(["openssl", "req", "-new", "-newkey", "rsa:4096",
+ "-keyout", $b_key, "-out", $b_csr, "-nodes",
+ "-config", $cnf,
+ "-subj", "/CN=b.example.com"])));
+# Sign it - position of "-text" matters!
+ok(run(app(["openssl", "x509", "-req", "-text", "-CAcreateserial",
+ "-CA", $ca_cert, "-CAkey", $ca_key,
+ "-in", $b_csr, "-out", $b_cert])));
+# Verify issuer is CA
+ok(get_issuer($b_cert) =~ /CN = ca.example.com/);
diff --git a/test/recipes/30-test_acvp.t b/test/recipes/30-test_acvp.t
new file mode 100644
index 000000000000..566c59d78e51
--- /dev/null
+++ b/test/recipes/30-test_acvp.t
@@ -0,0 +1,30 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT bldtop_dir srctop_dir srctop_file bldtop_file);
+use OpenSSL::Test::Utils;
+
+BEGIN {
+setup("test_acvp");
+}
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan skip_all => "ACVP is not supported by this test"
+ if $no_fips || disabled("acvp-tests");
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+plan tests => 1;
+
+ok(run(test(["acvp_test", "-config", srctop_file("test","fips.cnf")])),
+ "running acvp_test");
diff --git a/test/recipes/30-test_aesgcm.t b/test/recipes/30-test_aesgcm.t
new file mode 100644
index 000000000000..f4862bf02b27
--- /dev/null
+++ b/test/recipes/30-test_aesgcm.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_aesgcm", "aesgcmtest", "aesgcm");
diff --git a/test/recipes/30-test_afalg.t b/test/recipes/30-test_afalg.t
new file mode 100644
index 000000000000..572a847511a8
--- /dev/null
+++ b/test/recipes/30-test_afalg.t
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT/;
+use OpenSSL::Test::Utils;
+
+my $test_name = "test_afalg";
+setup($test_name);
+
+plan skip_all => "$test_name not supported for this build"
+ if disabled("afalgeng");
+
+plan tests => 1;
+
+ok(run(test(["afalgtest"])), "running afalgtest");
diff --git a/test/recipes/30-test_defltfips.t b/test/recipes/30-test_defltfips.t
new file mode 100644
index 000000000000..c8f145405b2b
--- /dev/null
+++ b/test/recipes/30-test_defltfips.t
@@ -0,0 +1,51 @@
+#! /usr/bin/env perl
+# Copyright 2015-2023 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
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file srctop_dir bldtop_file bldtop_dir data_dir/;
+use OpenSSL::Test::Utils;
+use Cwd qw(abs_path);
+
+BEGIN {
+ setup("test_defltfips");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+plan skip_all => "Configuration loading is turned off"
+ if disabled("autoload-config");
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan tests =>
+ ($no_fips ? 1 : 5);
+
+unless ($no_fips) {
+ $ENV{OPENSSL_CONF} = abs_path(srctop_file("test", "fips.cnf"));
+ ok(run(test(["defltfips_test", "fips"])), "running defltfips_test fips");
+
+ #Test an alternative way of configuring fips
+ $ENV{OPENSSL_CONF} = abs_path(srctop_file("test", "fips-alt.cnf"));
+ ok(run(test(["defltfips_test", "fips"])), "running defltfips_test fips");
+
+ #Configured to run FIPS but the module-mac is bad
+ $ENV{OPENSSL_CONF} = abs_path(srctop_file("test", "fips.cnf"));
+ $ENV{OPENSSL_CONF_INCLUDE} = srctop_dir("test", "recipes", "30-test_defltfips");
+ ok(run(test(["defltfips_test", "badfips"])), "running defltfips_test badfips");
+
+ #Test an alternative way of configuring fips (but still with bad module-mac)
+ $ENV{OPENSSL_CONF} = abs_path(srctop_file("test", "fips-alt.cnf"));
+ ok(run(test(["defltfips_test", "badfips"])), "running defltfips_test badfips");
+}
+
+$ENV{OPENSSL_CONF} = abs_path(srctop_file("test", "default.cnf"));
+ok(run(test(["defltfips_test"])), "running defltfips_test");
diff --git a/test/recipes/30-test_defltfips/fipsmodule.cnf b/test/recipes/30-test_defltfips/fipsmodule.cnf
new file mode 100644
index 000000000000..14d26d8e56dc
--- /dev/null
+++ b/test/recipes/30-test_defltfips/fipsmodule.cnf
@@ -0,0 +1,7 @@
+#The MAC here is meant to be incorrect, do not modify it
+
+[fips_sect]
+activate = 1
+conditional-errors = 1
+security-checks = 1
+module-mac = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
diff --git a/test/recipes/30-test_engine.t b/test/recipes/30-test_engine.t
new file mode 100644
index 000000000000..d66c8b60c878
--- /dev/null
+++ b/test/recipes/30-test_engine.t
@@ -0,0 +1,25 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_engine");
+
+my @path = qw(test certs);
+
+plan skip_all => "engines are deprecated"
+ if disabled('deprecated-3.0');
+
+plan tests => 1;
+ok(run(test(["enginetest", srctop_file(@path, "root-cert.pem")])),
+ "running enginetest");
diff --git a/test/recipes/30-test_evp.t b/test/recipes/30-test_evp.t
new file mode 100644
index 000000000000..af823515f9bd
--- /dev/null
+++ b/test/recipes/30-test_evp.t
@@ -0,0 +1,194 @@
+#! /usr/bin/env perl
+# Copyright 2015-2023 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
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT data_file bldtop_dir srctop_file srctop_dir bldtop_file);
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_evp");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+my $no_legacy = disabled('legacy') || ($ENV{NO_LEGACY} // 0);
+my $no_des = disabled("des");
+my $no_dh = disabled("dh");
+my $no_dsa = disabled("dsa");
+my $no_ec = disabled("ec");
+my $no_sm2 = disabled("sm2");
+
+# Default config depends on if the legacy module is built or not
+my $defaultcnf = $no_legacy ? 'default.cnf' : 'default-and-legacy.cnf';
+
+my @configs = ( $defaultcnf );
+# Only add the FIPS config if the FIPS module has been built
+push @configs, 'fips-and-base.cnf' unless $no_fips;
+
+# A list of tests that run with both the default and fips provider.
+my @files = qw(
+ evpciph_aes_ccm_cavs.txt
+ evpciph_aes_common.txt
+ evpciph_aes_cts.txt
+ evpciph_aes_wrap.txt
+ evpciph_aes_stitched.txt
+ evpciph_des3_common.txt
+ evpkdf_hkdf.txt
+ evpkdf_pbkdf1.txt
+ evpkdf_pbkdf2.txt
+ evpkdf_ss.txt
+ evpkdf_ssh.txt
+ evpkdf_tls12_prf.txt
+ evpkdf_tls13_kdf.txt
+ evpkdf_x942.txt
+ evpkdf_x963.txt
+ evpmac_common.txt
+ evpmd_sha.txt
+ evppbe_pbkdf2.txt
+ evppkey_kdf_hkdf.txt
+ evppkey_rsa_common.txt
+ evprand.txt
+ );
+push @files, qw(
+ evppkey_ffdhe.txt
+ evppkey_dh.txt
+ ) unless $no_dh;
+push @files, qw(
+ evpkdf_x942_des.txt
+ evpmac_cmac_des.txt
+ ) unless $no_des;
+push @files, qw(evppkey_dsa.txt) unless $no_dsa;
+push @files, qw(evppkey_ecx.txt) unless $no_ec;
+push @files, qw(
+ evppkey_ecc.txt
+ evppkey_ecdh.txt
+ evppkey_ecdsa.txt
+ evppkey_kas.txt
+ evppkey_mismatch.txt
+ ) unless $no_ec;
+
+# A list of tests that only run with the default provider
+# (i.e. The algorithms are not present in the fips provider)
+my @defltfiles = qw(
+ evpciph_aes_ocb.txt
+ evpciph_aes_siv.txt
+ evpciph_aria.txt
+ evpciph_bf.txt
+ evpciph_camellia.txt
+ evpciph_camellia_cts.txt
+ evpciph_cast5.txt
+ evpciph_chacha.txt
+ evpciph_des.txt
+ evpciph_idea.txt
+ evpciph_rc2.txt
+ evpciph_rc4.txt
+ evpciph_rc4_stitched.txt
+ evpciph_rc5.txt
+ evpciph_seed.txt
+ evpciph_sm4.txt
+ evpencod.txt
+ evpkdf_krb5.txt
+ evpkdf_scrypt.txt
+ evpkdf_tls11_prf.txt
+ evpmac_blake.txt
+ evpmac_poly1305.txt
+ evpmac_siphash.txt
+ evpmac_sm3.txt
+ evpmd_blake.txt
+ evpmd_md.txt
+ evpmd_mdc2.txt
+ evpmd_ripemd.txt
+ evpmd_sm3.txt
+ evpmd_whirlpool.txt
+ evppbe_scrypt.txt
+ evppbe_pkcs12.txt
+ evppkey_kdf_scrypt.txt
+ evppkey_kdf_tls1_prf.txt
+ evppkey_rsa.txt
+ );
+push @defltfiles, qw(evppkey_brainpool.txt) unless $no_ec;
+push @defltfiles, qw(evppkey_sm2.txt) unless $no_sm2;
+
+plan tests =>
+ + (scalar(@configs) * scalar(@files))
+ + scalar(@defltfiles)
+ + 3; # error output tests
+
+foreach (@configs) {
+ my $conf = srctop_file("test", $_);
+
+ foreach my $f ( @files ) {
+ ok(run(test(["evp_test",
+ "-config", $conf,
+ data_file("$f")])),
+ "running evp_test -config $conf $f");
+ }
+}
+
+my $conf = srctop_file("test", $defaultcnf);
+foreach my $f ( @defltfiles ) {
+ ok(run(test(["evp_test",
+ "-config", $conf,
+ data_file("$f")])),
+ "running evp_test -config $conf $f");
+}
+
+# test_errors OPTIONS
+#
+# OPTIONS may include:
+#
+# key => "filename" # expected to be found in $SRCDIR/test/certs
+# out => "filename" # file to write error strings to
+# args => [ ... extra openssl pkey args ... ]
+# expected => regexps to match error lines against
+sub test_errors { # actually tests diagnostics of OSSL_STORE
+ my %opts = @_;
+ my $infile = srctop_file('test', 'certs', $opts{key});
+ my @args = ( qw(openssl pkey -in), $infile, @{$opts{args} // []} );
+ my $res = !run(app([@args], stderr => $opts{out}));
+ my $found = !exists $opts{expected};
+ open(my $in, '<', $opts{out}) or die "Could not open file $opts{out}";
+ while(my $errline = <$in>) {
+ print $errline; # this may help debugging
+
+ # output must not include ASN.1 parse errors
+ $res &&= $errline !~ m/asn1 encoding/;
+ # output must include what is expressed in $opts{$expected}
+ $found = 1
+ if exists $opts{expected} && $errline =~ m/$opts{expected}/;
+ }
+ close $in;
+ # $tmpfile is kept to help with investigation in case of failure
+ return $res && $found;
+}
+
+SKIP: {
+ skip "DSA not disabled or ERR disabled", 2
+ if !disabled("dsa") || disabled("err");
+
+ ok(test_errors(key => 'server-dsa-key.pem',
+ out => 'server-dsa-key.err'),
+ "expected error loading unsupported dsa private key");
+ ok(test_errors(key => 'server-dsa-pubkey.pem',
+ out => 'server-dsa-pubkey.err',
+ args => [ '-pubin' ],
+ expected => 'unsupported'),
+ "expected error loading unsupported dsa public key");
+}
+
+SKIP: {
+ skip "SM2 not disabled", 1 if !disabled("sm2");
+
+ ok(test_errors(key => 'sm2.key', out => 'sm2.err'),
+ "expected error loading unsupported sm2 private key");
+}
diff --git a/test/recipes/30-test_evp_data/evpciph_aes_ccm_cavs.txt b/test/recipes/30-test_evp_data/evpciph_aes_ccm_cavs.txt
new file mode 100644
index 000000000000..41b7b065cb0b
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_aes_ccm_cavs.txt
@@ -0,0 +1,23927 @@
+#
+# Copyright 2019-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 from NIST CCM Test Vectors (SP800-38C)
+
+Title = NIST CCM 128 Decryption-Verfication Process Tests
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 5a8aa485c316e9
+AAD =
+Tag = 02209f55
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 3796cf51b87266
+AAD =
+Tag = 9a04c241
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 89ca5a64050f9f
+AAD =
+Tag = f5f915df
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = ec9d8edff25645
+AAD =
+Tag = 7a3c3499
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 05e16f0f42a6f4
+AAD =
+Tag = f09c2986
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 2e504b694f8df5
+AAD =
+Tag = 4ae97e71
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 06d102a9328863
+AAD =
+Tag = ecb38c8b
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = c288b810fb5334
+AAD =
+Tag = 9c4dc530
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 08a166d9eb6610
+AAD =
+Tag = 67299ef6
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 4a5810b121c91b
+AAD =
+Tag = b0538d02
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 44077341139bf9
+AAD =
+Tag = 88200ea8
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = a9df4f37847e1f
+AAD =
+Tag = 19867aa5
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 11df57fcd131e9
+AAD =
+Tag = 3b392a52
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 890fff56d10dc0
+AAD =
+Tag = 1c5e47e0
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4ae701103c63deca5b5a3939d7d05992
+IV = 9dc18698731b27
+AAD =
+Tag = 97a56b8b
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 5a8aa485c316e9
+AAD =
+Tag = 75d582db43ce9b13ab4b6f7f14341330
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 3796cf51b87266
+AAD =
+Tag = 3a65e03af37b81d05acc7ec1bc39deb0
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 89ca5a64050f9f
+AAD =
+Tag = efc5721e0b9e4c3c90deab0e1d5c11bd
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = ec9d8edff25645
+AAD =
+Tag = 91b4b779823f4f0e3979ced93b99736c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 05e16f0f42a6f4
+AAD =
+Tag = e2e87ca82523ccfeb416b42af9d9aadc
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 2e504b694f8df5
+AAD =
+Tag = 7b85fd105cc960df86ad86846d178274
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 06d102a9328863
+AAD =
+Tag = ffa140be27b25f307a6efd9697d66c9b
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = c288b810fb5334
+AAD =
+Tag = ed356542e0a804a724bfaa422e98a970
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 08a166d9eb6610
+AAD =
+Tag = e31dd8dc920fe7900e1b1817fe845c7d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 4a5810b121c91b
+AAD =
+Tag = ae5a0777f03bbf541f305d00acff0396
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 44077341139bf9
+AAD =
+Tag = 957dca58616c1cbe99f94fd8f7c257d9
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = a9df4f37847e1f
+AAD =
+Tag = 0e150af422f6da238bb476810b2d5bc2
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 11df57fcd131e9
+AAD =
+Tag = 8e1150756ff3a733a1274470f072b74c
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 890fff56d10dc0
+AAD =
+Tag = a1f70df3fa9cfeb95f869b3fe08466e0
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 9dc18698731b27
+AAD =
+Tag = fdf3f6c177aa1d71fe3474a5a2eb6bb1
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 5a8aa485c316e9403aff859fbb
+AAD =
+Tag = 90156f3f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = a16a2e741f1cd9717285b6d882
+AAD =
+Tag = 88909016
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 368f3b8180fd4b851b7b272cb1
+AAD =
+Tag = de547d03
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 7bb2bc00c0cafce65b5299ae64
+AAD =
+Tag = ea4bad52
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 935c1ef3d4032ff090f91141f3
+AAD =
+Tag = 1bc82b3d
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 2640b14f10b116411d1b5c1ad1
+AAD =
+Tag = 92e72250
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = b229c173a13b2d83af91ec45b0
+AAD =
+Tag = e81f0647
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 37ca0dc2d6efd9efde69f14f03
+AAD =
+Tag = 7cb906ec
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 6b6238aed86d677ba2b3e2622c
+AAD =
+Tag = d60f815b
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = d6cb2ac67bb13b8f6d31fad64a
+AAD =
+Tag = d3d4f3b0
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 32a7cd361ef00e65f5778fdfd4
+AAD =
+Tag = a9df97ad
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = d0a1508fdefcf5be30a459b813
+AAD =
+Tag = 36a37a59
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = 5381a61b449dc6a42aa4c79b95
+AAD =
+Tag = dba02a36
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = c55430f2da0687ea40313884ab
+AAD =
+Tag = 25dcb3c5
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3
+IV = ec76d1850acc0979a1f11906fb
+AAD =
+Tag = 1d2832d0
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 5a8aa485c316e9403aff859fbb
+AAD =
+Tag = fb04dc5a44c6bb000f2440f5154364b4
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = a16a2e741f1cd9717285b6d882
+AAD =
+Tag = 5447075bf42a59b91f08064738b015ab
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 368f3b8180fd4b851b7b272cb1
+AAD =
+Tag = fdc992847f0815fac67aa935b35208ed
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 7bb2bc00c0cafce65b5299ae64
+AAD =
+Tag = 2cabd690a45e59854b7587b26dd77f8e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 935c1ef3d4032ff090f91141f3
+AAD =
+Tag = 3dacc71169f6da77ec91ff1d2f649ed1
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 2640b14f10b116411d1b5c1ad1
+AAD =
+Tag = 97a2eb170ef03fa12124f1315e3b694f
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = b229c173a13b2d83af91ec45b0
+AAD =
+Tag = 94d85a83169d8dc76f58baf4d63ecfee
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 37ca0dc2d6efd9efde69f14f03
+AAD =
+Tag = d3903c6289ca3684b8ce1174c23153a4
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 6b6238aed86d677ba2b3e2622c
+AAD =
+Tag = 5cbac5c418374a68bd7085454c4b0c13
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = d6cb2ac67bb13b8f6d31fad64a
+AAD =
+Tag = 26317f6b8b0130097441ed04b8009aef
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 32a7cd361ef00e65f5778fdfd4
+AAD =
+Tag = b82ab6f3bbf59b6caafc54f05570f74e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = d0a1508fdefcf5be30a459b813
+AAD =
+Tag = 1ae34207e74c8c78890ae17e320e84bd
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 5381a61b449dc6a42aa4c79b95
+AAD =
+Tag = 5c5fa254c0be503b02caffade6b85259
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = c55430f2da0687ea40313884ab
+AAD =
+Tag = 9340266730ea36207bb734819d3553e9
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = ec76d1850acc0979a1f11906fb
+AAD =
+Tag = ec17cccf33bd9a0d4ce7aa20690c1333
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 5a8aa485c316e9
+AAD =
+Tag = 03e1fa6b
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = a90e8ea44085ced791b2fdb7fd44b5cf0bd7d27718029bb7
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 31f8fa25827d48
+AAD =
+Tag = 23e5d81c
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = 50aafe0578c115c4a8e126ff7b3ccb64dce8ccaa8ceda69f
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 5340ed7752c9ff
+AAD =
+Tag = 869a97f0
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = 512ed208bf10d57406537e94d20a5b6e2e9ab0683dfdc685
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 9cbce402511b89
+AAD =
+Tag = 838e7f95
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = af72db9cd9d6f46607d6f9542ca69988dd15255c5c91171c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 123a0beace4e39
+AAD =
+Tag = 09b89801
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 47d71409a03c330be9451b3f92c9d21c584391ad1010e9d6
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 8ea1594a58fe4a
+AAD =
+Tag = eaf5f825
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = e562c7af0384ea16431ca20934a293a058d722cbfc3186c8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 5a7743e59e82da
+AAD =
+Tag = 5ec1aa6a
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 004d9d89c401aa79919c2805fcd5de69316e191df56426c0
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = f477f754d7ee76
+AAD =
+Tag = f3586c6f
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = d623673d7f6d57c208bde112ca858561f3af5cc2bf5de926
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 040a257dede70e
+AAD =
+Tag = 5fa40618
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = fd4733d158b5630f4f6c03ab26b11bff0cbe0d5d3df99a73
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = dd51b8e91683d1
+AAD =
+Tag = 5bf4f930
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = d352cb996c3075ff367a8dcacbbae46a12fbef08aa96ec83
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = ab3cb86cca6fb2
+AAD =
+Tag = 66f0496e
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 31730fac20e21eca0aef591faa9fa90b3c058e32af1ce48a
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = f67b98efd39b55
+AAD =
+Tag = b753181c
+Plaintext = f2e944e1ae47ad5873bf391f1b0cc07f6151eb4c50bb45b2
+Ciphertext = dd175905a7ea3aef9fce068e6cb78e9cc60519755a178c77
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = e60e2c002d1c99
+AAD =
+Tag = 0876f2da
+Plaintext = 70f48dc1d76e5028da07e29852801375a9edb2214a5ea4c0
+Ciphertext = 8ad6b76f54392ee0f2834f09142545bcde9bf03d04d64aa1
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 098e053fa08043
+AAD =
+Tag = d4f7fc07
+Plaintext = bd81680e3dc0b35431c92598dcaa26ef09ca0da5e77193de
+Ciphertext = 808eb3e04c39abde64674f0f7716dde11699cff8dd367c4c
+
+Cipher = aes-128-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd
+IV = 4bf48328725514
+AAD =
+Tag = 973a2712
+Plaintext = bd81680e3dc0b35431c92598dcaa26ef09ca0da5e77193de
+Ciphertext = e074d13aad43f7b2364d47db0a02326641ca3b2ad61a1c49
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 5a8aa485c316e9
+AAD =
+Tag = 2d9a3fbc210595b7b8b1b41523111a8e
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = 24ab9eeb0e5508cae80074f1070ee188a637171860881f1f
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 31f8fa25827d48
+AAD =
+Tag = 63af747cc88a001fa94e060290f209c4
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = 7ebfda6fa5da1dbffd82dc29b875798fbcef8ba0084fbd24
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 5340ed7752c9ff
+AAD =
+Tag = cf3b8e6c8aeb5eeb0a5efb3700be45a2
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = cbf133643851f91ddc7a1e19a0c21990459f2b7728da58f5
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 9cbce402511b89
+AAD =
+Tag = f7bd61a0158accbca28913e39fe80906
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = 0de7567a945c0af4a2291a651de411e8d0438508f2d4da80
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 123a0beace4e39
+AAD =
+Tag = 8feeda2e8f249dd93a8358def7639875
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = d43035cdb5a1868aa430e8b41a1dc57a639087238e38bd62
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 8ea1594a58fe4a
+AAD =
+Tag = bf19f89da977e56f308373c616299ad4
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 389547260b354a6cbc909de057d367677049e80613877f6f
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 5a7743e59e82da
+AAD =
+Tag = 21366b9da457ede2a673351475b53d41
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = a95aa33483ed3711470025394616bf98fe624fbca8aa6fbc
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = f477f754d7ee76
+AAD =
+Tag = d889a7cae55efd71b369cd6d43ef363b
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 3d53b6ab8925f429ae14a0065cd203d4f9deddd402a79ac6
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 040a257dede70e
+AAD =
+Tag = 4be7f19463dd330a4b9f3cbb30b88fa5
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = d5e6e82cb5f8034a89e58adf8298476253f18981bcb3b036
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = dd51b8e91683d1
+AAD =
+Tag = c2df063f7fdbae27f0736a37fd065fb4
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 02f69107d62ff77145c7d57684c70ba671d55f1c63bb2ad8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = ab3cb86cca6fb2
+AAD =
+Tag = 9b45d54cc24cff1b1d8aa1df32fbd81a
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 64ec2f321111da9c5389e8255bfe69876d4f548f94cacd52
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = f67b98efd39b55
+AAD =
+Tag = 0217a4f1f4fb302257b0de7c9da2e750
+Plaintext = f2e944e1ae47ad5873bf391f1b0cc07f6151eb4c50bb45b2
+Ciphertext = 37d63c2bbf44d2eb155ecc1a844841d5c33f1a6d44341933
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = e60e2c002d1c99
+AAD =
+Tag = 36a305d520a1a24930a70a311aa3695d
+Plaintext = 70f48dc1d76e5028da07e29852801375a9edb2214a5ea4c0
+Ciphertext = 33e0dce4410e51bed5323ea49490207084ac91732bae4292
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 098e053fa08043
+AAD =
+Tag = 81e3d64ed546b6b70ee088a693f55fbb
+Plaintext = bd81680e3dc0b35431c92598dcaa26ef09ca0da5e77193de
+Ciphertext = 1d732c334319bd775e7cf93dbdc4204bbdb58192be082804
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 4bf48328725514
+AAD =
+Tag = 737719dd84ccfb397a4f61b70c85262a
+Plaintext = bd81680e3dc0b35431c92598dcaa26ef09ca0da5e77193de
+Ciphertext = c92fc2f0d24593f67d9c09d326158a8138237c4096093f0d
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 5a8aa485c316e9403aff859fbb
+AAD =
+Tag = a3e138b9
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 4a550134f94455979ec4bf89ad2bd80d25a77ae94e456134
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 49004912fdd7269279b1f06a89
+AAD =
+Tag = 091a5ae9
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 118ec53dd1bfbe52d5b9fe5dfebecf2ee674ec983eada654
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = efeb82c8c68d6600b24dd6d8ee
+AAD =
+Tag = 78b6bcc4
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 6b0fea26e4dfe902b5e876c7ba92afbad8aa52d3c1d00ae5
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 7b93d368dc551640b00ba3cbb5
+AAD =
+Tag = ac542b09
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 640c740e2b8af851712a05948ecee055b25b145ccb82ca58
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 24b7a65391f88bea38fcd54a9a
+AAD =
+Tag = 6413020a
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 05f20b2ae70fcb0ea79aa1845c15b899a799ca60f51e6c29
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 6aa3f731522fce7e366ba59945
+AAD =
+Tag = 142d5636
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 9fa576a8a5c72468afa372338cbbc33fef81ad5a873eb38a
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = a11cf5bed0041ee3cb1fef4b43
+AAD =
+Tag = f3757b6a
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 8d26582c74b2b4d960ee9e417c6395daafaebb3aff45d477
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 273cc5013785baeb5abc79c8bd
+AAD =
+Tag = a7001a16
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = cb62a13e38e17cc6635e409c922956ece38f593189a51b99
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = d2d4482ea8e98c1cf309671895
+AAD =
+Tag = 050e9225
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = f3e29b792423c7fbe743a3b2f890a2bff29519f3636a6232
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = a8849b44adb48d271979656930
+AAD =
+Tag = 850ec9f0
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 136e60d6714d906d1f4c02b7bdbb5f3ccdd2165306912dec
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = a632ba0d00511122abcd6227ff
+AAD =
+Tag = 4eb95533
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 49b6d0b6eeff74af0de70072d9ccdc68a0ee36a5ddbf098b
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = c47af80cd26d047630c1fdf0d1
+AAD =
+Tag = 0f8fb949
+Plaintext = d8306c9c4ea6c69c6e2ad0fc0e49b1e0126b01078d6419ff
+Ciphertext = a2a59041c3f78f6e10c3045118e8a475945e24c85b02abc4
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 70e132023acae1f88c7a237b68
+AAD =
+Tag = 69d8ab41
+Plaintext = d0b2bef5ed1a87d9c73d4a459cb05c11799c4f51ad640b1e
+Ciphertext = 19b4ad222795326cb031cfdb07b652dbf64ca5db5ff5d6d5
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = 8010d3a2a14f72f5585defc940
+AAD =
+Tag = f00fe764
+Plaintext = 4faba05569bf7ac656780c16995e9122e565fe9984be8a68
+Ciphertext = 76b66b908657f4df8a329c34ccdde50ae7fc71c4a718b712
+
+Cipher = aes-128-ccm
+Key = 197afb02ffbd8f699dacae87094d5243
+IV = a98c2f0e0a7b68942853905191
+AAD =
+Tag = 79f9eb72
+Plaintext = 4faba05569bf7ac656780c16995e9122e565fe9984be8a68
+Ciphertext = 20df4662ce6c8c4ce49b14fa791e41ff8598ec93d8a825e8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 5a8aa485c316e9403aff859fbb
+AAD =
+Tag = 6a9a970b9beb2ac1bd4fd62168f8378a
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 4bfe4e35784f0a65b545477e5e2f4bae0e1e6fa717eaf2cb
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 49004912fdd7269279b1f06a89
+AAD =
+Tag = a65666144994bad0c8195bcb4ade1337
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 0c56a503aa2c12e87450d45a7b714db980fd348f327c0065
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = efeb82c8c68d6600b24dd6d8ee
+AAD =
+Tag = a85f868739404b64a7cbdd61b577c388
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 5f69d6c21f771eb98dc724f891f530b1c045f49a054de103
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 7b93d368dc551640b00ba3cbb5
+AAD =
+Tag = b2b164f3c255b699cbf75330d96c3c13
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = d335ba572520c336f711edf27ea738ba5e6b0d772ea443b8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 24b7a65391f88bea38fcd54a9a
+AAD =
+Tag = 2658e077687315eaf11458bdf6e3c36a
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 9fa846ef8d198c538f84f856bab8f7f9c3bed90b53acb6a3
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 6aa3f731522fce7e366ba59945
+AAD =
+Tag = 63db3756abba1feef626a956794d7e56
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = b7095030acdc5fbb8fea2c24717c1c236231f9737bcc78f4
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = a11cf5bed0041ee3cb1fef4b43
+AAD =
+Tag = 7d6fee1de626bc7c93f2caa27a3ecaa0
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = d6911d5831163c8ebad0916af1833051b885aae822f9f665
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 273cc5013785baeb5abc79c8bd
+AAD =
+Tag = 89e2d235192f33ba0f357492112d98f4
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 6b10a098c96c2bbf9aeb5c9adcf91e4812838dff319f8be9
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = d2d4482ea8e98c1cf309671895
+AAD =
+Tag = 800b81e834ea5dd2bdc2c688d9505359
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = aecd11cbac04e1f79b0fd24052c8cedf393dce9df350d24f
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = a8849b44adb48d271979656930
+AAD =
+Tag = 430889cd5c97343cc0dedfbd62e6b6eb
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = d3a7a25f71b1988482dc852ed713d55abdcc4bb1129ddcae
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = a632ba0d00511122abcd6227ff
+AAD =
+Tag = 15acded53c41010554e1c1fe937a7605
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 368e1574a433d78d0276ce4a1cacfba834a216693536c00b
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = c47af80cd26d047630c1fdf0d1
+AAD =
+Tag = c9390fbdb9ec416267096ccbf2c148e5
+Plaintext = d8306c9c4ea6c69c6e2ad0fc0e49b1e0126b01078d6419ff
+Ciphertext = 99e40b3c67aca95dd4462c20cbd6b2741e7033fc4f41a975
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 70e132023acae1f88c7a237b68
+AAD =
+Tag = 55c18ae38b7ee7f00f96cfca4fe9a2ef
+Plaintext = d0b2bef5ed1a87d9c73d4a459cb05c11799c4f51ad640b1e
+Ciphertext = de079418c25ba67e5fda009998e3fce61bfdc3b7787cf066
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 8010d3a2a14f72f5585defc940
+AAD =
+Tag = b35357a35ff9e58e18d6d80df9fc335d
+Plaintext = 4faba05569bf7ac656780c16995e9122e565fe9984be8a68
+Ciphertext = fbab64d8dd8b6e33c7cc6124cd65f004d7247277fe98d5d3
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = a98c2f0e0a7b68942853905191
+AAD =
+Tag = 9aba89639f4033be9ba9f3c101acc1bd
+Plaintext = 4faba05569bf7ac656780c16995e9122e565fe9984be8a68
+Ciphertext = 372b9af0655df2d0c830b4949a2d2faa8db251ee922a3bff
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 5a8aa485c316e9
+AAD = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c
+Tag = 782e4318
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = a265480ca88d5f
+AAD = a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe
+Tag = a04f270a
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 87ec7423f1ebfc
+AAD = 2bed1ec06c1ca149d9ffbaf048c474ea2de000eb7950f18d6c25acf6ab3f19b5
+Tag = 97dfd257
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = b8b04f90616082
+AAD = 4898731e143fcc677c7cf1a8f2b3c4039fb5e57028e33b05e097d1763cbfe4d8
+Tag = 6c202a1c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 8c687b4318813a
+AAD = fcad52a88544325bb31eb5de4a41dbff6a96f69d0993b969a01792ee23953acf
+Tag = 1be535a0
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 29b810eed8fc92
+AAD = 40d1d320eb63a25d7a2b3141563a552114275ddda56beb62cc0c0273d5795faa
+Tag = 4fb6617d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 62452462c53934
+AAD = 1eb8863ea100babc1713654afcf54f21f8bff754223ad70269ace9d034f26a96
+Tag = c056bd3e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 4cceba0e7aee97
+AAD = f33e184c967165eb62542999afaca4e3e319840e439b5bb509544fb4b6901445
+Tag = 87048576
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = b5151b0601c683
+AAD = 73d27303ec91f28c79b278882034d11eb6a5266746f37edbb77f8409a8738b8c
+Tag = ea8c0407
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = 4e5d6d7ac9e71e
+AAD = a01b6e152fe232b6c10b5d89900961c445f4c46833df242c826678b68c869811
+Tag = 41c12dc5
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = dc88e989951a3f
+AAD = fdcacfaff46585406cc45a2da364e67e132a91c98900a8f9d7bfb14ec951fca5
+Tag = de84cf5c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = a1aeda4b4cb8dd
+AAD = db3022ef4cd68ae22b501599448ffe2dda15cfd2e259315c6f6d03036edea963
+Tag = e617e006
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = f248e5225e3d9a
+AAD = fdc64ef76a3bfd0a15d0bc8e8bacaf64346796a3e35afcf2ac1ab136f63f7b6e
+Tag = b7909395
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = e68228f5c65b73
+AAD = 614efdf89ce2a9fcbd38bdc0b4cece54dfd7532880e0b4ce6eb3a4010b7cb1e7
+Tag = 8a05d2ea
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 90929a4b0ac65b350ad1591611fe4829
+IV = ea167cfd1101d9
+AAD = 28130f938c45a1a92b02dbeadbd8df816b6d934e87cca2dfdbfdc49c7cd84041
+Tag = 8643ba47
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 5a8aa485c316e9
+AAD = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c
+Tag = 41b476013f45e4a781f253a6f3b1e530
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = a265480ca88d5f
+AAD = a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe
+Tag = f9f018fcd125822616083fffebc4c8e6
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 87ec7423f1ebfc
+AAD = 2bed1ec06c1ca149d9ffbaf048c474ea2de000eb7950f18d6c25acf6ab3f19b5
+Tag = 534cc67c44c877c9c908071ee1082f4c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = b8b04f90616082
+AAD = 4898731e143fcc677c7cf1a8f2b3c4039fb5e57028e33b05e097d1763cbfe4d8
+Tag = 201c0ef2ddaa51b645911b5c37d76e95
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 8c687b4318813a
+AAD = fcad52a88544325bb31eb5de4a41dbff6a96f69d0993b969a01792ee23953acf
+Tag = ec774d9000763bba3a5ac307418827b2
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 29b810eed8fc92
+AAD = 40d1d320eb63a25d7a2b3141563a552114275ddda56beb62cc0c0273d5795faa
+Tag = 75798c3fe5202f0e33c9183c837aeaf5
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 62452462c53934
+AAD = 1eb8863ea100babc1713654afcf54f21f8bff754223ad70269ace9d034f26a96
+Tag = 32601de5960c11c925444b5c47d42289
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 4cceba0e7aee97
+AAD = f33e184c967165eb62542999afaca4e3e319840e439b5bb509544fb4b6901445
+Tag = 4c1cd6a774c8e6f4e261db1f73b0aa20
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = b5151b0601c683
+AAD = 73d27303ec91f28c79b278882034d11eb6a5266746f37edbb77f8409a8738b8c
+Tag = 8bd9c00ff23310216bbd24981c1e2cf7
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 4e5d6d7ac9e71e
+AAD = a01b6e152fe232b6c10b5d89900961c445f4c46833df242c826678b68c869811
+Tag = 174efd089409f9932b8e631965e762a6
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = dc88e989951a3f
+AAD = fdcacfaff46585406cc45a2da364e67e132a91c98900a8f9d7bfb14ec951fca5
+Tag = 8de80f620bd41eee6a58925dc8404bfa
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = a1aeda4b4cb8dd
+AAD = db3022ef4cd68ae22b501599448ffe2dda15cfd2e259315c6f6d03036edea963
+Tag = 0b9d79e8e33ec45532af5515a99f05df
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = f248e5225e3d9a
+AAD = fdc64ef76a3bfd0a15d0bc8e8bacaf64346796a3e35afcf2ac1ab136f63f7b6e
+Tag = 1583e1e5a86001bbcec62292ccfd4d48
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = e68228f5c65b73
+AAD = 614efdf89ce2a9fcbd38bdc0b4cece54dfd7532880e0b4ce6eb3a4010b7cb1e7
+Tag = b72caac6362e68e445f69f605f21e0a2
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = ea167cfd1101d9
+AAD = 28130f938c45a1a92b02dbeadbd8df816b6d934e87cca2dfdbfdc49c7cd84041
+Tag = 352769a19ac75b8a116be031b33d6449
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 5a8aa485c316e9403aff859fbb
+AAD = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982
+Tag = 9f69f24f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 8739b4bea1a099fe547499cbc6
+AAD = f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7
+Tag = e17afaa4
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 0f98fdbde2b04387f27b3401dd
+AAD = 02010329660fa716556193eb4870ee84bd934296a5c52d92bba859cc13caaddc
+Tag = 07155b7e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 4eed58f381e500902ba5c56864
+AAD = 96056d9ebd7c553c22cc2d9d816b61123750d96c1b08c4b661079424bf3c4946
+Tag = d538cf2f
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 1e7e51f0fa9a33ed618c26f5e3
+AAD = da9b8ffb0f3c2aee2e386cc9f035ec1eb3e629bd1544c11dc21be4fd8ac9074a
+Tag = c283466f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = f012f94f5988c79aa179d7fdfc
+AAD = 612b2ef2683109d99452f95099417641d0c2be3f8ab4cbb2a44e83355ba9303c
+Tag = aa8d8098
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 715acf92cfb69ad56036c49e70
+AAD = 960667b85be07304634124b9324be12a1c11451f1fa9db82c683265b4cf8e5ff
+Tag = a44b69b0
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 141be3601e38185a9fa1596d2e
+AAD = 606452c62290b43559a588bb03356f846cecb0ccaf0bdaf67a18abd811d4315a
+Tag = f395733f
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = fcdda3c5f0e80843b03d8788da
+AAD = 03f22247a55461a293d253c77483859fdac1b87c2480e208a3df767cfbfde512
+Tag = 1e9e9237
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = ca660ed3b917c0aca140dcd3fb
+AAD = 254a86f5b20d344ad86fd5523d08f1864737be57731440c29aa6b42574572f51
+Tag = e9d2a722
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 642ae3466661ce1f51783deece
+AAD = 4432a1cec5976cc13b8fb78341d426c2248f091b597123d263ffafc7f82da5a5
+Tag = a90fc438
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 7864c717ec93db38b10679be47
+AAD = 679aad1ad1e57029e3362b325572fc71cac53184b0f1546867e665a4a59466c4
+Tag = 48f3a1ec
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = c3bf9dfe9d6c26f543188fb457
+AAD = e301f69ad3a7e08a3d02462f0aa584449eb0449b0e3c50aa8dfaa4472816c8b0
+Tag = 24763def
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = 1527657d2fd98f7deca55cc649
+AAD = f4c723433b7cafe3cda9bb4940a21a89a8382d13018b622ccd1ffb9ffd3211af
+Tag = 63394bee
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b
+IV = b8432d3d5525a0dadbbaa6b6b8
+AAD = 86ee6e37b4a2d9a0b52ec95643b4e8297e237721e15ce8bf7593a98644f83eba
+Tag = d79b1686
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 5a8aa485c316e9403aff859fbb
+AAD = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982
+Tag = 1859ac36a40a6b28b34266253627797a
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 8739b4bea1a099fe547499cbc6
+AAD = f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7
+Tag = edf8b46eb69ac0044116019dec183072
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 0f98fdbde2b04387f27b3401dd
+AAD = 02010329660fa716556193eb4870ee84bd934296a5c52d92bba859cc13caaddc
+Tag = 66622ac26c7227a0329739612012737c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 4eed58f381e500902ba5c56864
+AAD = 96056d9ebd7c553c22cc2d9d816b61123750d96c1b08c4b661079424bf3c4946
+Tag = e4c9e86493ee78b1cbf6e55e94731b63
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 1e7e51f0fa9a33ed618c26f5e3
+AAD = da9b8ffb0f3c2aee2e386cc9f035ec1eb3e629bd1544c11dc21be4fd8ac9074a
+Tag = 8b5bfe6b5b5552007300bae71172612f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = f012f94f5988c79aa179d7fdfc
+AAD = 612b2ef2683109d99452f95099417641d0c2be3f8ab4cbb2a44e83355ba9303c
+Tag = 1848be3cb7665ac68874c617a75d8bd2
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 715acf92cfb69ad56036c49e70
+AAD = 960667b85be07304634124b9324be12a1c11451f1fa9db82c683265b4cf8e5ff
+Tag = 65a23b7b5ee78af9c7d0113447f78ab9
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 141be3601e38185a9fa1596d2e
+AAD = 606452c62290b43559a588bb03356f846cecb0ccaf0bdaf67a18abd811d4315a
+Tag = 90a420b6d2252392e161dcf4fb953d7e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = fcdda3c5f0e80843b03d8788da
+AAD = 03f22247a55461a293d253c77483859fdac1b87c2480e208a3df767cfbfde512
+Tag = 004cbe11292887e246de7704a4a1a05f
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = ca660ed3b917c0aca140dcd3fb
+AAD = 254a86f5b20d344ad86fd5523d08f1864737be57731440c29aa6b42574572f51
+Tag = ad7af41e39ea0c0cd072263e826f3cf0
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 642ae3466661ce1f51783deece
+AAD = 4432a1cec5976cc13b8fb78341d426c2248f091b597123d263ffafc7f82da5a5
+Tag = 16b1a4fadbadc906a949592d6ef319a3
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 7864c717ec93db38b10679be47
+AAD = 679aad1ad1e57029e3362b325572fc71cac53184b0f1546867e665a4a59466c4
+Tag = e9cfb1069380434f221db4229a083a76
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = c3bf9dfe9d6c26f543188fb457
+AAD = e301f69ad3a7e08a3d02462f0aa584449eb0449b0e3c50aa8dfaa4472816c8b0
+Tag = 380cb57fd531bb1dcf22350518bbf8af
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 1527657d2fd98f7deca55cc649
+AAD = f4c723433b7cafe3cda9bb4940a21a89a8382d13018b622ccd1ffb9ffd3211af
+Tag = fbf2becc35b5024078bfcfc1f831b669
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = b8432d3d5525a0dadbbaa6b6b8
+AAD = 86ee6e37b4a2d9a0b52ec95643b4e8297e237721e15ce8bf7593a98644f83eba
+Tag = 080203eb842b3f98a730abbbf98f493e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 5a8aa485c316e9
+AAD = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c
+Tag = 38f125fa
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 6be31860ca271ef448de8f8d8b39346daf4b81d7e92d65b3
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = fdd2d6f503c915
+AAD = 5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e
+Tag = 28a66b69
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 4cc57a9927a6bc401441870d3193bf89ebd163f5c01501c7
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 27d73d58100054
+AAD = f6468542923be79b4b06dfe70920d57d1da73a9c16f9c9a12d810d7de0d12467
+Tag = ee2de18c
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 1f16c6d370fff40c011a243356076b67e905d4672ae2f38f
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = dd16e0ce1250e3
+AAD = bc65cfd65e9863c8b7457d58afa6bdb48a84170d8aa97ba5b397b52ad17a9242
+Tag = 24537a81
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 46edb001d58a01dce1bcf064cfc9a04accc82c42b33ba165
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = ccee19d037cf4a
+AAD = c026696e6425e6c33f45b4145febf1137e7ac26383c9f5aa4cd4e5e8abb19e07
+Tag = 9405edb1
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 9b61335f96fc5b31274cc1fb275f29c1105d68c67b70654f
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 6c8ba94f09cbe6
+AAD = 774ad1a88f8bb063951486d4aec5bf82d5fc535bd0b952f86200c123c37fa496
+Tag = 548effe3
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 97b5eb2d55847f5d5d9f8c762dace481d8efb19ccfd72265
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 1f670302fcdcc8
+AAD = 1a9ff9698cfc96b581d7115c822e4363d7355ec5daed2eae5bf89ee944ac7d9c
+Tag = 03459b29
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = f5cc8198dce8e890587b62572b07413a915bfb55628c901c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 5d05f658c729a2
+AAD = dd9564c1431ed490b17ef69f6115805e54ef156ef4e10e58f7d57a7e86626352
+Tag = 963b04f3
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 50c0b1f6c5e4c86a0c938ecbc762eeaf99b9fe04c2820a43
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 22a77db9fcbc95
+AAD = 86bf1739c10f63df734ee3e60ac40ff5636c49f68ca4c16ece289609eb413e7a
+Tag = 1330f633
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 1fdbe91189da01c5098cf1538addd85b1cfef0abd0797c14
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 491e32b0bbfa4c
+AAD = 75bef075c79d6cfd7fc73aefd67b2d215be0648937477ba606b1fe1be591239e
+Tag = 10c1f6d7
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 462e7cdf9a6a553bca37d4d93bed4986b715d0349238613e
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = bc4b7d3a380be0
+AAD = 353dbb41e2d525a9f4fcd858d0f0aa1b1e86ac0f936d5c09c6b61c343f94e3fc
+Tag = d37e5543
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 7d142f26aa6c9d55850c5c9f58ab36a66670d47c515bf93c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = a840e98df72ae9
+AAD = 22c6607732ef1bdc7fcf6197e037cdadd7ee17c008552dd9f04b8564d34fb17c
+Tag = cc5e0c4a
+Plaintext = a2f53385618b41301f4e3ea4c597f411103dac2b37abf5da
+Ciphertext = f7122cbcec93d53fc7e3fc629ea15d28363cad1c83a23bb3
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 39d93c3cf31a6f
+AAD = 937dfac5cded938438f4e97aabd9beb50dba40f824198260a89729479cfe6869
+Tag = fc12a512
+Plaintext = c1bdef96dc868446be48491b160504546f2a40dd581f9582
+Ciphertext = e1cad7f946b20c373323218c8a89e56edf3030662e50d459
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = 0bbc177019321e
+AAD = f6e02678820f5ccbede6cbded02d6dd58d486166d7b18ee975a688af421fb795
+Tag = c2eaf895
+Plaintext = 72a70954d22ad722fc32756afce67b344b2f3c55fe1d9eed
+Ciphertext = d4741814466a23e26107d773f103a4c83db9d772dbd5fdc1
+
+Cipher = aes-128-ccm
+Key = f9fdca4ac64fe7f014de0f43039c7571
+IV = ad048eb2ad7526
+AAD = 0d2739cfdac782b61f484fa1a423c478c414397ec420327963d79112b2d70a7e
+Tag = f92fa2f7
+Plaintext = 72a70954d22ad722fc32756afce67b344b2f3c55fe1d9eed
+Ciphertext = ed35ff66bc7f6d8ec7acf896f994d79f5792cf6d22d6691f
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 5a8aa485c316e9
+AAD = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c
+Tag = 2cf3a20b7fd7c49e6e79bef475c2906f
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = b351ab96b2e45515254558d5212673ee6c776d42dbca3b51
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = fdd2d6f503c915
+AAD = 5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e
+Tag = 81d18ca149d6766bfaccec88f194eb5b
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = df1a5285caa41b4bb47f6e5ceceba4e82721828d68427a30
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 27d73d58100054
+AAD = f6468542923be79b4b06dfe70920d57d1da73a9c16f9c9a12d810d7de0d12467
+Tag = 5eb4f0875dda5ccd9b94026ba49fb34e
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 04a29fc109dfc626e8297e0f586d0bfaf31260017d95f62d
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = dd16e0ce1250e3
+AAD = bc65cfd65e9863c8b7457d58afa6bdb48a84170d8aa97ba5b397b52ad17a9242
+Tag = 920843994def41aed3103995d3392eed
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 77e4cd5d319353ecb6b89e2de14bcfee4fbf738b61df14f3
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = ccee19d037cf4a
+AAD = c026696e6425e6c33f45b4145febf1137e7ac26383c9f5aa4cd4e5e8abb19e07
+Tag = d57603d5c45606c68be5535c671d5432
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = e676f5dfde8ad810d9e729d142670eef77f2878369a28797
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 6c8ba94f09cbe6
+AAD = 774ad1a88f8bb063951486d4aec5bf82d5fc535bd0b952f86200c123c37fa496
+Tag = a0bfd54fb786208e1e49c6d0e645d9fb
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 60c51e5c3fe4197454d64fa14017639bcfd1423b9d74e506
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 1f670302fcdcc8
+AAD = 1a9ff9698cfc96b581d7115c822e4363d7355ec5daed2eae5bf89ee944ac7d9c
+Tag = af8a9b7a5c50b0be4596290a4d405e79
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 64d1160365062eca1027cc7036862b027bdda3a9abdf794d
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 5d05f658c729a2
+AAD = dd9564c1431ed490b17ef69f6115805e54ef156ef4e10e58f7d57a7e86626352
+Tag = 2ce9c776932ecf7fddd849be58096b88
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 968ca115583c645710d2b47fb196cf55f6ef33f2b01400e2
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 22a77db9fcbc95
+AAD = 86bf1739c10f63df734ee3e60ac40ff5636c49f68ca4c16ece289609eb413e7a
+Tag = 915d0020da92f483a5a7914cba14b1e7
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 4985821b16ff6d4d3416573e2fba4d53186d912f0b023a99
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 491e32b0bbfa4c
+AAD = 75bef075c79d6cfd7fc73aefd67b2d215be0648937477ba606b1fe1be591239e
+Tag = 71420e036ea48dddd671be622d372c5b
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = c7345b031ef85bde766226a7603adaa7dcb07a7b2a8be1b5
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = bc4b7d3a380be0
+AAD = 353dbb41e2d525a9f4fcd858d0f0aa1b1e86ac0f936d5c09c6b61c343f94e3fc
+Tag = b619a331f8d67d70c3f3a59b3fab53a5
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 11460b9acccc13001be236814da6b73f2c8e0467574f151b
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = a840e98df72ae9
+AAD = 22c6607732ef1bdc7fcf6197e037cdadd7ee17c008552dd9f04b8564d34fb17c
+Tag = b944bb46306a9b1e783f3e54c92d5f5e
+Plaintext = a2f53385618b41301f4e3ea4c597f411103dac2b37abf5da
+Ciphertext = 1bcff940a2d9d48e93bbfd13aed5947237485983e6ae04b8
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 39d93c3cf31a6f
+AAD = 937dfac5cded938438f4e97aabd9beb50dba40f824198260a89729479cfe6869
+Tag = 48608963f3037763843b70c35d7011f8
+Plaintext = c1bdef96dc868446be48491b160504546f2a40dd581f9582
+Ciphertext = 3b6c1570c85f297079be14cd66d335251c7b52e131a636f1
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 0bbc177019321e
+AAD = f6e02678820f5ccbede6cbded02d6dd58d486166d7b18ee975a688af421fb795
+Tag = 4ba2d0944c68cc36d4125b3ef9071d69
+Plaintext = 72a70954d22ad722fc32756afce67b344b2f3c55fe1d9eed
+Ciphertext = b540cd8cbe733e0ca2ba2112ea785596d2c1d707f4160851
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = ad048eb2ad7526
+AAD = 0d2739cfdac782b61f484fa1a423c478c414397ec420327963d79112b2d70a7e
+Tag = 51387922af7182b7d46a33c703e6e7a8
+Plaintext = 72a70954d22ad722fc32756afce67b344b2f3c55fe1d9eed
+Ciphertext = 3c9c1481f1428acf202b510dca67e5e6b2abc5dd71a954da
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 5a8aa485c316e9403aff859fbb
+AAD = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982
+Tag = c25e5329
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 934f893824e880f743d196b22d1f340a52608155087bd28a
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 0812757ad0cc4d17c4cfe7a642
+AAD = ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10
+Tag = 59b3b3ee
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = f43ba9d834ad85dfab3f1c0c27c3441fe4e411a38a261a65
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = eff510acc1b85f35029cf7dc00
+AAD = 0923b927b8295c5dfaf67da55e5014293bc8c708fda50af06c1e8aef31cccc86
+Tag = 0bf6688e
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = c686eac859a7bae3cce97d0b6527a0a7c8c2b24ece35f437
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 3d13d09057190366c63c8750e9
+AAD = 77e27aa9a7bf30e130c862a3296a1cd7a10195ed1d940f2c97bfff47c6f06e32
+Tag = 80ed869c
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 2b28355ecf7246ddb08d65c464dcaa90af85f434ff952672
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = e3c03ef7e1d31961ee0b97bd99
+AAD = 8a3676dd640821b58fb0f0329855fd5882c376ea166b958b7aaad223054e5784
+Tag = cd399507
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = ecde42091baa1f5c17b79746e21c3de5c78984570748021c
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 5d165ddd4e599387af5967cae6
+AAD = e374f875ce829b62c98fbd67bcf128b5647f25fff9a643300eb95559b889baed
+Tag = 3da37b66
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 5c338435ed4f148342604c9aed63e907c100453d719fda2a
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = fcec171162a27a96066181fab2
+AAD = cf431cc3671ec468ea86f6cc09842fcf3a84b3ef0fa1c7b20b232145b4469d62
+Tag = 7e75dded
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 30eac1042015eb82729673edd9939bf9995b2575da4d6c4c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 2fa8120398d1a946f391367cf6
+AAD = 92558a239c8e13230754f23aec67b153db29fdfc7daf641778185dd2931d89da
+Tag = 722b9c87
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = ebd3ce55b40e4bbd8172033948c6c78049161ee8f949eb50
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 88e0ae338bbca9d4299b294354
+AAD = 5db5c388dbadc9f175a5cd5a1472a458d25acd7fb9c951c0cd45edf64da473bb
+Tag = 48c042e5
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 20f79b36ca83baac97600fd8a6dad22c2cd0f9b7e7705760
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 4862e36296d6afc9399a95bbb4
+AAD = 36d82ebd0e0f5fe3b12946d041ae5aee16e6d17025406dd776f499bbd8e8b4c8
+Tag = 885ba975
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 77b76f249f936fb19bd47fe28ad4dbb7725dec365a1cb23a
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 2f360a4715074e942244ab7f9b
+AAD = f0087b0086a081c1071481f033a8be8e940c36763084329bb8461b9102238f4f
+Tag = aa799e79
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = cf6763a23c2eab730845d1eb79bbba9f54ee899fe3d70570
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 93e08854560edb096e5d654086
+AAD = bdc60dff08bfd5d44320b75c61e456fd4333c9c3d0294d4a48d936dfd5922ce2
+Tag = 6c0b0104
+Plaintext = 569e4aec88dd51ca519c0a00c922ee33d3559b98a32d7906
+Ciphertext = 1f8086a43c1b2dea557952db88e0dbbdb96aafdb345eddae
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = e3f37b68ff508cfe295441d9e3
+AAD = b2b6c5782e4f128467c589d2a6cf55ef12877adb771bbb6245c5bba9dcfd6208
+Tag = 47a28dd8
+Plaintext = 02b5511204bd55f7c37973e26f6df5883c0a530f07c7f8c2
+Ciphertext = c0c5f92285b114e0a0777e1bc22b810e7cc4f68c28cd5ce0
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = ea98ec44f5a86715014783172e
+AAD = e4692b9f06b666c7451b146c8aeb07a6e30c629d28065c3dde5940325b14b810
+Tag = b7543552
+Plaintext = 4da40b80579c1d9a5309f7efecb7c059a2f914511ca5fc10
+Ciphertext = 56327f4db9c18f72bbefc3f316d31f9795dd77f493385ab7
+
+Cipher = aes-128-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728c
+IV = 5a16a8902bd70fa06cfe184c57
+AAD = 399d6b0652836457ec4f701f0dc0e5aed73d16585d61cb1bb5b7ee824fc287c8
+Tag = ee39867e
+Plaintext = 4da40b80579c1d9a5309f7efecb7c059a2f914511ca5fc10
+Ciphertext = 37d5b17995fac8c94302ec9ba20a36d97678e85199b677f8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = 5a8aa485c316e9403aff859fbb
+AAD = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982
+Tag = c0a458bfcafa3b2609afe0f825cbf503
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 50038b5fdd364ee747b70d00bd36840ece4ea19998123375
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = 0812757ad0cc4d17c4cfe7a642
+AAD = ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10
+Tag = 390042ba8bb5f6798dab01c5afad7306
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 78ed8ff6b5a1255d0fbd0a719a9c27b059ff5f83d0c4962c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = eff510acc1b85f35029cf7dc00
+AAD = 0923b927b8295c5dfaf67da55e5014293bc8c708fda50af06c1e8aef31cccc86
+Tag = a3463394cf3c25bef8af8f244d0c0b00
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 4b91d8e616d3f60452fd3a576bd7c265b7f549523ed4a5d7
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = 3d13d09057190366c63c8750e9
+AAD = 77e27aa9a7bf30e130c862a3296a1cd7a10195ed1d940f2c97bfff47c6f06e32
+Tag = 88caf8ae59d9d1131626da0dddf8722d
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = ab8cf8891ab62924c0c6f49dd253cfa0c3d6260d0ee4d9ba
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = e3c03ef7e1d31961ee0b97bd99
+AAD = 8a3676dd640821b58fb0f0329855fd5882c376ea166b958b7aaad223054e5784
+Tag = d1292373a76970eda77a8194f6276262
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = c6b7680f321132a8bd00e8e92f785d0b828b100af6392a04
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = 5d165ddd4e599387af5967cae6
+AAD = e374f875ce829b62c98fbd67bcf128b5647f25fff9a643300eb95559b889baed
+Tag = a97af19d0b7bf7c7ce398cb0b44d73af
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = aea98867d3d707c43a963c1d7fdcfc953cbd707803b2b5f0
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = fcec171162a27a96066181fab2
+AAD = cf431cc3671ec468ea86f6cc09842fcf3a84b3ef0fa1c7b20b232145b4469d62
+Tag = 343065b4bdd973ee072dbf5160d310f3
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = c55e17ba7886eb58126d50bde8c5c211cc1aafd71a3d9e5b
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = 2fa8120398d1a946f391367cf6
+AAD = 92558a239c8e13230754f23aec67b153db29fdfc7daf641778185dd2931d89da
+Tag = 233ec600bca1d31f704807494fb0f18d
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 791a62d5fb39ff9735ad94507e1afe2647714d5cc56b6ff4
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = 88e0ae338bbca9d4299b294354
+AAD = 5db5c388dbadc9f175a5cd5a1472a458d25acd7fb9c951c0cd45edf64da473bb
+Tag = 7ec183db0e2a33ebb147d0e2363fbb01
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = f98a081998e29500f15ebd8978a95423aed4e8e78e0279d1
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = 4862e36296d6afc9399a95bbb4
+AAD = 36d82ebd0e0f5fe3b12946d041ae5aee16e6d17025406dd776f499bbd8e8b4c8
+Tag = 7e67ea2577ade5836c26a89760e0959b
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 7779814dc295a23b4100ca94bec0ad4ce2f6be6fb75a0c21
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = 2f360a4715074e942244ab7f9b
+AAD = f0087b0086a081c1071481f033a8be8e940c36763084329bb8461b9102238f4f
+Tag = 4978a7865df8369635269411b3aaeb32
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 55640eed12c7595a36ab423da8d8241905b6ff1e906db962
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = 93e08854560edb096e5d654086
+AAD = bdc60dff08bfd5d44320b75c61e456fd4333c9c3d0294d4a48d936dfd5922ce2
+Tag = 4f9d302e4f1d2a2aedf2768d7b29163f
+Plaintext = 569e4aec88dd51ca519c0a00c922ee33d3559b98a32d7906
+Ciphertext = 7fcdce0ba567b9a708d54fdb16125de71dce952f4741684f
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = e3f37b68ff508cfe295441d9e3
+AAD = b2b6c5782e4f128467c589d2a6cf55ef12877adb771bbb6245c5bba9dcfd6208
+Tag = a50036af67fadab163e9daa8bd8e9030
+Plaintext = 02b5511204bd55f7c37973e26f6df5883c0a530f07c7f8c2
+Ciphertext = d42111ba22987eac1ead5cc6cb8548bcda190d118dcd5461
+
+Cipher = aes-128-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0e
+IV = ea98ec44f5a86715014783172e
+AAD = e4692b9f06b666c7451b146c8aeb07a6e30c629d28065c3dde5940325b14b810
+Tag = 2f1322ac69b848b001476323aed84c47
+Plaintext = 4da40b80579c1d9a5309f7efecb7c059a2f914511ca5fc10
+Ciphertext = 1bf0ba0ebb20d8edba59f29a9371750c9c714078f73c335d
+
+
+Title = NIST CCM 192 Decryption-Verfication Process Tests
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 5a8aa485c316e9
+AAD =
+Tag = 9d4b7f3b
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 3796cf51b87266
+AAD =
+Tag = 80745de9
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 89ca5a64050f9f
+AAD =
+Tag = 2f6fa823
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = ec9d8edff25645
+AAD =
+Tag = 3cc132c6
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 05e16f0f42a6f4
+AAD =
+Tag = c79d5557
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 2e504b694f8df5
+AAD =
+Tag = 41e0eea0
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 06d102a9328863
+AAD =
+Tag = 1f129266
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = c288b810fb5334
+AAD =
+Tag = 41b0e4e2
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 08a166d9eb6610
+AAD =
+Tag = 5082e06a
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 4a5810b121c91b
+AAD =
+Tag = 70587cce
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 44077341139bf9
+AAD =
+Tag = 6aaa0acd
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = a9df4f37847e1f
+AAD =
+Tag = 22976e42
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 11df57fcd131e9
+AAD =
+Tag = f440ea1d
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 890fff56d10dc0
+AAD =
+Tag = 88903fb9
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c
+IV = 9dc18698731b27
+AAD =
+Tag = 3ff345c3
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 5a8aa485c316e9
+AAD =
+Tag = 17223038fa99d53681ca1beabe78d1b4
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 3796cf51b87266
+AAD =
+Tag = d0e1eeef4d2a264536bb1c2c1bde7c35
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 89ca5a64050f9f
+AAD =
+Tag = 81d587f8673fd514c23172af7fb7523d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = ec9d8edff25645
+AAD =
+Tag = 500142447e535207899ab1499994daea
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 05e16f0f42a6f4
+AAD =
+Tag = fdfdbb38bf161785114f9ee2018e892f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 2e504b694f8df5
+AAD =
+Tag = 38fe9622eaa2a50152cf57e393dd3063
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 06d102a9328863
+AAD =
+Tag = 73af4b87c167572e1400a0ee28209aff
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = c288b810fb5334
+AAD =
+Tag = ace2248b9f23efa813449c82217e4a4a
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 08a166d9eb6610
+AAD =
+Tag = a9bb0e469829d9cf09ad765c5b0b58bf
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 4a5810b121c91b
+AAD =
+Tag = a5977f0826926ec0d32541b2bd4e2b1e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 44077341139bf9
+AAD =
+Tag = 6938fb5afec1a84e4abb062e1a943c20
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = a9df4f37847e1f
+AAD =
+Tag = 7e3bbe0eb13988a93972f2fbcd35659e
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 11df57fcd131e9
+AAD =
+Tag = 48d7a15cf4f5808eb45d1ad817470554
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 890fff56d10dc0
+AAD =
+Tag = 97185ce68af1e6ab718c8c4b83ec04cd
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 9dc18698731b27
+AAD =
+Tag = a81bc8f5a18293ffe19505a3687ce3f3
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 5a8aa485c316e9403aff859fbb
+AAD =
+Tag = fe69ed84
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = a16a2e741f1cd9717285b6d882
+AAD =
+Tag = db7ffc82
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 368f3b8180fd4b851b7b272cb1
+AAD =
+Tag = 7a677329
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 7bb2bc00c0cafce65b5299ae64
+AAD =
+Tag = d903d8f7
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 935c1ef3d4032ff090f91141f3
+AAD =
+Tag = 215e0bf2
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 2640b14f10b116411d1b5c1ad1
+AAD =
+Tag = 0d38100f
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = b229c173a13b2d83af91ec45b0
+AAD =
+Tag = 9f8ab5f7
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 37ca0dc2d6efd9efde69f14f03
+AAD =
+Tag = 7d811d50
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 6b6238aed86d677ba2b3e2622c
+AAD =
+Tag = c2e18439
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = d6cb2ac67bb13b8f6d31fad64a
+AAD =
+Tag = d8b5817b
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 32a7cd361ef00e65f5778fdfd4
+AAD =
+Tag = 28cd70ff
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = d0a1508fdefcf5be30a459b813
+AAD =
+Tag = 790b2624
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = 5381a61b449dc6a42aa4c79b95
+AAD =
+Tag = 9e46632d
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = c55430f2da0687ea40313884ab
+AAD =
+Tag = 39b82901
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65
+IV = ec76d1850acc0979a1f11906fb
+AAD =
+Tag = 4c0cf71f
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 5a8aa485c316e9403aff859fbb
+AAD =
+Tag = 0c66a8e547ed4f8c2c9a9a1eb5d455b9
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = a16a2e741f1cd9717285b6d882
+AAD =
+Tag = 38757b3a61a4dc97ca3ab88bf1240695
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 368f3b8180fd4b851b7b272cb1
+AAD =
+Tag = 11875da4445d92391d0fab5f3625497b
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 7bb2bc00c0cafce65b5299ae64
+AAD =
+Tag = 64477bcd4316e5c5789e1a678fdef943
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 935c1ef3d4032ff090f91141f3
+AAD =
+Tag = 87da5dbc04e39fc468f43675d4e7df33
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 2640b14f10b116411d1b5c1ad1
+AAD =
+Tag = bf0d53ee529d8cafc5ad7a8f2d85e7a2
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = b229c173a13b2d83af91ec45b0
+AAD =
+Tag = 676370637ad78c705d43fce066dc909f
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 37ca0dc2d6efd9efde69f14f03
+AAD =
+Tag = 289936db0f9f148a3c9e2d28f7d7de51
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 6b6238aed86d677ba2b3e2622c
+AAD =
+Tag = 58a283641627669d5514f2af559b6c14
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = d6cb2ac67bb13b8f6d31fad64a
+AAD =
+Tag = a6b058540ed905d6e3499a13ea1f3d83
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 32a7cd361ef00e65f5778fdfd4
+AAD =
+Tag = 7a19b3377384f09915d0e1ae93a9f16c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = d0a1508fdefcf5be30a459b813
+AAD =
+Tag = a0d047a1f9940d325e474da54aa13897
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 5381a61b449dc6a42aa4c79b95
+AAD =
+Tag = 8a4768a2093694b6bcb7083c0bb6331c
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = c55430f2da0687ea40313884ab
+AAD =
+Tag = a7cafd6f68dc1f15a3603da654ce27bc
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = ec76d1850acc0979a1f11906fb
+AAD =
+Tag = c49845f2ea3c9981ad7e9b942f615b8d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 5a8aa485c316e9
+AAD =
+Tag = ddc93a54
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = 411986d04d6463100bff03f7d0bde7ea2c3488784378138c
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 31f8fa25827d48
+AAD =
+Tag = b6889036
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = 32b649ab56162e55d4148a1292d6a225a988eb1308298273
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 5340ed7752c9ff
+AAD =
+Tag = 9b4de35f
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = a963c3568ab413b174cd95cc1e3ca61ee181292bebdb2817
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 9cbce402511b89
+AAD =
+Tag = 6df9ffc5
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = 0396e6c8db43e5fac205f4c576fd577368adcb688cf3d7e7
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 123a0beace4e39
+AAD =
+Tag = b28c8e38
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = b41bfba94edcafc41b4c144269b9126a6d47b19e83b15772
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 8ea1594a58fe4a
+AAD =
+Tag = 7336a30a
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 01e3bb938e16d0284d1d0fee049d80fb97356ae4d84127cf
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 5a7743e59e82da
+AAD =
+Tag = 0c40cc72
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = abd7551c5e84e9bef5fbfad3e24d13f02864410eae9177ad
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = f477f754d7ee76
+AAD =
+Tag = fc9fd290
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 3b5ae49e0974f41826152432b46f1a85ab4995afefbbccdd
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 040a257dede70e
+AAD =
+Tag = e485910b
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 21fb4324de4ba1e2762b3041ce26e43a3d191458a046d489
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = dd51b8e91683d1
+AAD =
+Tag = 8695053f
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 99ca8f542fd06481e23719214c9892442f393d72899deea0
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = ab3cb86cca6fb2
+AAD =
+Tag = 050d2054
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 5fcc05342cdc27f66b324ae7387205bfb4ab6302bfe0af09
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = f67b98efd39b55
+AAD =
+Tag = 6def28ab
+Plaintext = f2e944e1ae47ad5873bf391f1b0cc07f6151eb4c50bb45b2
+Ciphertext = 0a7fe63046daf8a979935b897088c64acc1b47a5a9b86fdd
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = e60e2c002d1c99
+AAD =
+Tag = 68941fce
+Plaintext = 70f48dc1d76e5028da07e29852801375a9edb2214a5ea4c0
+Ciphertext = daf7d7dfa512ceb1d7d3435634d9a70b3ef6c6dc38f409e0
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 098e053fa08043
+AAD =
+Tag = 51a1ec4a
+Plaintext = bd81680e3dc0b35431c92598dcaa26ef09ca0da5e77193de
+Ciphertext = cdb417dff6502208775f21e35cdb8e3e1199308d1a942290
+
+Cipher = aes-192-ccm
+Key = 19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa
+IV = 4bf48328725514
+AAD =
+Tag = 98eaddaf
+Plaintext = bd81680e3dc0b35431c92598dcaa26ef09ca0da5e77193de
+Ciphertext = e75441093c8ccba6eac5913dc246ce96de4784a010514982
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 5a8aa485c316e9
+AAD =
+Tag = c5a5ebecf7ac8607fe412189e83d9d20
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = cba4b4aeb85f0492fd8d905c4a6d8233139833373ef188a8
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 31f8fa25827d48
+AAD =
+Tag = e699f15f14d34dcaf9ba8ed4b877c97d
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = ca62713728b5c9d652504b0ae8fd4fee5d297ee6a8d19cb6
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 5340ed7752c9ff
+AAD =
+Tag = f3b8899459788c58794f177cfd838f35
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = 93012c0a5f6f1025b8c4a5d897d3eea0b1c77be8000c9e59
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 9cbce402511b89
+AAD =
+Tag = 3ad22e8fa4d2f9725ce4f212a8844855
+Plaintext = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22
+Ciphertext = b8eb95f72f643c2c51ad74775cc203d215c86626e903eb01
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 123a0beace4e39
+AAD =
+Tag = b5eab45d7d096577643815e6d467312d
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 71f17cf21c44267c676657db9e55bee33273787474e77b17
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 8ea1594a58fe4a
+AAD =
+Tag = 8b1a5ecca7354af824fea617b9b69031
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = d6737f642260c4ee3b19cb78cc2ef1767213416b82c71e91
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 5a7743e59e82da
+AAD =
+Tag = c54c98f8007ed55a21759f5452559538
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = cbe60d633399daa6ee66418be6d16e292ea47a93c291fce2
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = f477f754d7ee76
+AAD =
+Tag = a555aa972e1c2e3f439f85663ae25889
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 2a78a7beb8df4bf5d35ff0b2853bc51ce127163d2f56e00e
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 040a257dede70e
+AAD =
+Tag = 9aeb326578fa615e86969348d9bbfb7f
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = ee78ddbea9c3aede9f88af0e82464d9d1afe81de16aa18c4
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = dd51b8e91683d1
+AAD =
+Tag = 2efbff1da769af3b72099cbda3cbf091
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = cdf7cb74d978e7ea738e288ed79edfccf10b553c09d1856e
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = ab3cb86cca6fb2
+AAD =
+Tag = 3291a566e6641a965ffdabe097050dc5
+Plaintext = 9d033e3b66efed1467868f382417c80594877a28bc97f406
+Ciphertext = 90b990a1ea254592f2c226c969b332fc7bfe5f808729c2d8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = f67b98efd39b55
+AAD =
+Tag = 84b47504dced5b70c302cc93502cc37e
+Plaintext = f2e944e1ae47ad5873bf391f1b0cc07f6151eb4c50bb45b2
+Ciphertext = 44a6aa954c3508b3c9264c20c272e80c0e95d50ddec28490
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = e60e2c002d1c99
+AAD =
+Tag = 37109739a3676f03adfd740dbaa4940d
+Plaintext = 70f48dc1d76e5028da07e29852801375a9edb2214a5ea4c0
+Ciphertext = 9d4ff7a44cdb9b14f586efc3d6be02d069b425c06bec4eed
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 098e053fa08043
+AAD =
+Tag = c4bfacbb2f246b570efd93d98e99be49
+Plaintext = bd81680e3dc0b35431c92598dcaa26ef09ca0da5e77193de
+Ciphertext = 23da95e102c7921a51b19b5733ea5776ab6c287f6057c00e
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 4bf48328725514
+AAD =
+Tag = 6496912db41761a1d2aecfda04fb2cfa
+Plaintext = bd81680e3dc0b35431c92598dcaa26ef09ca0da5e77193de
+Ciphertext = 53d00d5839d0a1e695916151f9450b7311982917edcbd7c6
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 5a8aa485c316e9403aff859fbb
+AAD =
+Tag = 34fad277
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 042653c674ef2a90f7fb11d30848e530ae59478f1051633a
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 49004912fdd7269279b1f06a89
+AAD =
+Tag = a35df775
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 1902d9769a7ba3d3268e1257395c8c2e5f98eef295dcbfa5
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = efeb82c8c68d6600b24dd6d8ee
+AAD =
+Tag = 1faaf310
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = ebacb8e78c0ad9d3ed99f1821b0b0085beac351f88a79ef7
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 7b93d368dc551640b00ba3cbb5
+AAD =
+Tag = 4d5e6103
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = efc1d5b6f0a48e4ce3e821d743d34206b28c69485c410fa9
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 24b7a65391f88bea38fcd54a9a
+AAD =
+Tag = 69ac966a
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 3c1836e5d0f0473dab7bfd7a95ba69575f7f841970ac6c67
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 6aa3f731522fce7e366ba59945
+AAD =
+Tag = c47e9a8e
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 2c583e54d75a02948c7f6dcd12cba32a65e8d605fba7ec10
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = a11cf5bed0041ee3cb1fef4b43
+AAD =
+Tag = 1f3f537f
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = a8632dee22f34315b05c40135c6dd471c63b09438da834dc
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 273cc5013785baeb5abc79c8bd
+AAD =
+Tag = 26421940
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 0f03ea1b2561951d79062e19a85d98293c8c2846936c724c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = d2d4482ea8e98c1cf309671895
+AAD =
+Tag = a3a22ac7
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = f9764405e54d827ac433fd624506b92e123463a5b01f21ff
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = a8849b44adb48d271979656930
+AAD =
+Tag = 89429246
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = a326e0cf3f97adff3249944880ddfb8d616cd18a086e0462
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = a632ba0d00511122abcd6227ff
+AAD =
+Tag = 4c9649b7
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = f188bc1a72e81b34d75b402e4f8ef3d638d2f56a409eab06
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = c47af80cd26d047630c1fdf0d1
+AAD =
+Tag = e2e93f29
+Plaintext = d8306c9c4ea6c69c6e2ad0fc0e49b1e0126b01078d6419ff
+Ciphertext = 341df3a273e85cf387ab823bdf9c34a1ae2c86940cb4bfcd
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 70e132023acae1f88c7a237b68
+AAD =
+Tag = 35c7081d
+Plaintext = d0b2bef5ed1a87d9c73d4a459cb05c11799c4f51ad640b1e
+Ciphertext = a0e7997fd67ea66b6274d719b84da92433fdf7d512b160da
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = 8010d3a2a14f72f5585defc940
+AAD =
+Tag = f83a9ad7
+Plaintext = 4faba05569bf7ac656780c16995e9122e565fe9984be8a68
+Ciphertext = dd8fd11e1c0746e7273fdd2e7dfa1ee4fc8ad835ca3141c0
+
+Cipher = aes-192-ccm
+Key = 197afb02ffbd8f699dacae87094d524324576b99844f75e1
+IV = a98c2f0e0a7b68942853905191
+AAD =
+Tag = 7ff1eb5d
+Plaintext = 4faba05569bf7ac656780c16995e9122e565fe9984be8a68
+Ciphertext = 39b0d3603f1289b5885ac244953275d28491952e7e57d93c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 5a8aa485c316e9403aff859fbb
+AAD =
+Tag = a7ade30a07d185692ab0ebdf4c78cf7a
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = a5b7d8cca2069908d1ed88e6a9fe2c9bede3131dad54671e
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 49004912fdd7269279b1f06a89
+AAD =
+Tag = f042c86363cc05afb98c66e16be8a445
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 9a98617fb97a0dfe466be692272dcdaec1c5443a3b51312e
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = efeb82c8c68d6600b24dd6d8ee
+AAD =
+Tag = 41a8f6ac697430627826bd76b19da027
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = d3068ae815c3605d7670058abb9384f4c15b75150eb79100
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 7b93d368dc551640b00ba3cbb5
+AAD =
+Tag = 980581017fefef92c2b50ae20b93c81c
+Plaintext = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697
+Ciphertext = 388a289bb85533b667b141a78d0c79acdeb9fbf72886d5ab
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 24b7a65391f88bea38fcd54a9a
+AAD =
+Tag = 327f5f91763c0a0bec43264c27cd237f
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 71f68480a8801d4966c84807c5ff6139d83ba0a5b902bee3
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 6aa3f731522fce7e366ba59945
+AAD =
+Tag = 52c4b7fd911ca77950ff2d035e47b7ec
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 8627bf1e3edafc69f1328c393dd8e7bd1c182d021e6d3a36
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = a11cf5bed0041ee3cb1fef4b43
+AAD =
+Tag = 4ffcb29bde8b9a81945d671b0f619045
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = b10ea86a384432a45f50b3c2e482595b46c81c61ca39bc0f
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 273cc5013785baeb5abc79c8bd
+AAD =
+Tag = 578cc14aa558e18d5f777ab6e16dcfee
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 3ace8b7e03a0c1fa9e97f46975ab0a4924446e791540e225
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = d2d4482ea8e98c1cf309671895
+AAD =
+Tag = 75433c4ae28757c8544c86f1f74ea6a5
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 8190abe4c21e320e10825e269190bb10a354691958e24362
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = a8849b44adb48d271979656930
+AAD =
+Tag = d7752ebe9c5dbf00ee8ad60ac34dd7d0
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 1d7e308c34cdca7b7b222f4ebc92afd8055bff542c0b76d3
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = a632ba0d00511122abcd6227ff
+AAD =
+Tag = 0a4432b35d3b884e4169c28d287499ff
+Plaintext = 43419715cef9a48dc7280bc035082a6581afd1d82bee9d1a
+Ciphertext = 9c2609f7af5b634a16e58f2e9cc7a9ef7812a12d20984700
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = c47af80cd26d047630c1fdf0d1
+AAD =
+Tag = 9256ace490c2f0afb93ba32be58fd1de
+Plaintext = d8306c9c4ea6c69c6e2ad0fc0e49b1e0126b01078d6419ff
+Ciphertext = 5b0b5e6690d648e1b92c12cfddb431d6d3dfe689d01db819
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 70e132023acae1f88c7a237b68
+AAD =
+Tag = efd8535dd6b7fa701c9ca8c8b635c30b
+Plaintext = d0b2bef5ed1a87d9c73d4a459cb05c11799c4f51ad640b1e
+Ciphertext = 8722fca71fdf750ec5d62fc6d7ba079aef19210da764067a
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 8010d3a2a14f72f5585defc940
+AAD =
+Tag = 1b5d2cd4d5b6d2ef48413245a6b27b67
+Plaintext = 4faba05569bf7ac656780c16995e9122e565fe9984be8a68
+Ciphertext = 91ac457f5e53492301e72d9d495277ed17edb30e8c7a48d2
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = a98c2f0e0a7b68942853905191
+AAD =
+Tag = fdc83ea4863c3e84a5456f7f853a1ea6
+Plaintext = 4faba05569bf7ac656780c16995e9122e565fe9984be8a68
+Ciphertext = d2fe5293b7d53ed46ddf02a5618039adbae22845ce72e434
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 5a8aa485c316e9
+AAD = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c
+Tag = 1d089a5f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = a265480ca88d5f
+AAD = a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe
+Tag = 2f46022a
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 87ec7423f1ebfc
+AAD = 2bed1ec06c1ca149d9ffbaf048c474ea2de000eb7950f18d6c25acf6ab3f19b5
+Tag = 67dc4693
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = b8b04f90616082
+AAD = 4898731e143fcc677c7cf1a8f2b3c4039fb5e57028e33b05e097d1763cbfe4d8
+Tag = 7027a849
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 8c687b4318813a
+AAD = fcad52a88544325bb31eb5de4a41dbff6a96f69d0993b969a01792ee23953acf
+Tag = 5c6a4de2
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 29b810eed8fc92
+AAD = 40d1d320eb63a25d7a2b3141563a552114275ddda56beb62cc0c0273d5795faa
+Tag = 1d855f5d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 62452462c53934
+AAD = 1eb8863ea100babc1713654afcf54f21f8bff754223ad70269ace9d034f26a96
+Tag = 1b318980
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 4cceba0e7aee97
+AAD = f33e184c967165eb62542999afaca4e3e319840e439b5bb509544fb4b6901445
+Tag = cf871f91
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = b5151b0601c683
+AAD = 73d27303ec91f28c79b278882034d11eb6a5266746f37edbb77f8409a8738b8c
+Tag = 4f0e04bc
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = 4e5d6d7ac9e71e
+AAD = a01b6e152fe232b6c10b5d89900961c445f4c46833df242c826678b68c869811
+Tag = fc9013df
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = dc88e989951a3f
+AAD = fdcacfaff46585406cc45a2da364e67e132a91c98900a8f9d7bfb14ec951fca5
+Tag = 5134def3
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = a1aeda4b4cb8dd
+AAD = db3022ef4cd68ae22b501599448ffe2dda15cfd2e259315c6f6d03036edea963
+Tag = 5814103a
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = f248e5225e3d9a
+AAD = fdc64ef76a3bfd0a15d0bc8e8bacaf64346796a3e35afcf2ac1ab136f63f7b6e
+Tag = 74c75c4a
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = e68228f5c65b73
+AAD = 614efdf89ce2a9fcbd38bdc0b4cece54dfd7532880e0b4ce6eb3a4010b7cb1e7
+Tag = 9884898b
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 90929a4b0ac65b350ad1591611fe48297e03956f6083e451
+IV = ea167cfd1101d9
+AAD = 28130f938c45a1a92b02dbeadbd8df816b6d934e87cca2dfdbfdc49c7cd84041
+Tag = 0b1cbfb1
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 5a8aa485c316e9
+AAD = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c
+Tag = 5280a2137fee3deefcfe9b63a1199fb3
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = a265480ca88d5f
+AAD = a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe
+Tag = d40a7318c5f2d82f838c0beeefe0d598
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 87ec7423f1ebfc
+AAD = 2bed1ec06c1ca149d9ffbaf048c474ea2de000eb7950f18d6c25acf6ab3f19b5
+Tag = 7551978bc9592bf9e294b4984c5862bb
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = b8b04f90616082
+AAD = 4898731e143fcc677c7cf1a8f2b3c4039fb5e57028e33b05e097d1763cbfe4d8
+Tag = 859cf444f89225b32a55a1645bd24979
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 8c687b4318813a
+AAD = fcad52a88544325bb31eb5de4a41dbff6a96f69d0993b969a01792ee23953acf
+Tag = 29e967a0245607c36cf3eaf00fdae566
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 29b810eed8fc92
+AAD = 40d1d320eb63a25d7a2b3141563a552114275ddda56beb62cc0c0273d5795faa
+Tag = 9daa0e1c4df5f2bf507b1a57a1135b86
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 62452462c53934
+AAD = 1eb8863ea100babc1713654afcf54f21f8bff754223ad70269ace9d034f26a96
+Tag = 18caec79720a5d67d7457e9b7c7a153c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 4cceba0e7aee97
+AAD = f33e184c967165eb62542999afaca4e3e319840e439b5bb509544fb4b6901445
+Tag = 5f2c455546c56f514a0f69f05345c2c4
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = b5151b0601c683
+AAD = 73d27303ec91f28c79b278882034d11eb6a5266746f37edbb77f8409a8738b8c
+Tag = b7e4846ff30b7c3673a962a2701c0387
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 4e5d6d7ac9e71e
+AAD = a01b6e152fe232b6c10b5d89900961c445f4c46833df242c826678b68c869811
+Tag = 7b5fa0d42a616ab05ac2c58c904ce92f
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = dc88e989951a3f
+AAD = fdcacfaff46585406cc45a2da364e67e132a91c98900a8f9d7bfb14ec951fca5
+Tag = c8c67f558b5844b149dd47824c8cb9d8
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = a1aeda4b4cb8dd
+AAD = db3022ef4cd68ae22b501599448ffe2dda15cfd2e259315c6f6d03036edea963
+Tag = 70a09aaf22ac316124a169f6b0a83ffe
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = f248e5225e3d9a
+AAD = fdc64ef76a3bfd0a15d0bc8e8bacaf64346796a3e35afcf2ac1ab136f63f7b6e
+Tag = 5bc85ed5521a91b9eb42b437950f0e06
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = e68228f5c65b73
+AAD = 614efdf89ce2a9fcbd38bdc0b4cece54dfd7532880e0b4ce6eb3a4010b7cb1e7
+Tag = 989ec0e7b192ea010dd61d3fb64e8de0
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = ea167cfd1101d9
+AAD = 28130f938c45a1a92b02dbeadbd8df816b6d934e87cca2dfdbfdc49c7cd84041
+Tag = 15c2dbe7fa307654d8ca7c0f8d6d2f14
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 5a8aa485c316e9403aff859fbb
+AAD = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982
+Tag = 5e0eaebd
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 8739b4bea1a099fe547499cbc6
+AAD = f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7
+Tag = 71b7fc33
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 0f98fdbde2b04387f27b3401dd
+AAD = 02010329660fa716556193eb4870ee84bd934296a5c52d92bba859cc13caaddc
+Tag = 93227bd4
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 4eed58f381e500902ba5c56864
+AAD = 96056d9ebd7c553c22cc2d9d816b61123750d96c1b08c4b661079424bf3c4946
+Tag = ced654e2
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 1e7e51f0fa9a33ed618c26f5e3
+AAD = da9b8ffb0f3c2aee2e386cc9f035ec1eb3e629bd1544c11dc21be4fd8ac9074a
+Tag = bf7a8e0c
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = f012f94f5988c79aa179d7fdfc
+AAD = 612b2ef2683109d99452f95099417641d0c2be3f8ab4cbb2a44e83355ba9303c
+Tag = 840caa3e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 715acf92cfb69ad56036c49e70
+AAD = 960667b85be07304634124b9324be12a1c11451f1fa9db82c683265b4cf8e5ff
+Tag = 1e22fc41
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 141be3601e38185a9fa1596d2e
+AAD = 606452c62290b43559a588bb03356f846cecb0ccaf0bdaf67a18abd811d4315a
+Tag = 968ccbbf
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = fcdda3c5f0e80843b03d8788da
+AAD = 03f22247a55461a293d253c77483859fdac1b87c2480e208a3df767cfbfde512
+Tag = 0a31cc96
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = ca660ed3b917c0aca140dcd3fb
+AAD = 254a86f5b20d344ad86fd5523d08f1864737be57731440c29aa6b42574572f51
+Tag = a456c3da
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 642ae3466661ce1f51783deece
+AAD = 4432a1cec5976cc13b8fb78341d426c2248f091b597123d263ffafc7f82da5a5
+Tag = 29746eea
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 7864c717ec93db38b10679be47
+AAD = 679aad1ad1e57029e3362b325572fc71cac53184b0f1546867e665a4a59466c4
+Tag = df7f63ca
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = c3bf9dfe9d6c26f543188fb457
+AAD = e301f69ad3a7e08a3d02462f0aa584449eb0449b0e3c50aa8dfaa4472816c8b0
+Tag = bf0b1445
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = 1527657d2fd98f7deca55cc649
+AAD = f4c723433b7cafe3cda9bb4940a21a89a8382d13018b622ccd1ffb9ffd3211af
+Tag = ae8533f5
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2
+IV = b8432d3d5525a0dadbbaa6b6b8
+AAD = 86ee6e37b4a2d9a0b52ec95643b4e8297e237721e15ce8bf7593a98644f83eba
+Tag = 9426cf89
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 5a8aa485c316e9403aff859fbb
+AAD = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982
+Tag = d07ccf9fdc3d33aa94cda3d230da707c
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 8739b4bea1a099fe547499cbc6
+AAD = f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7
+Tag = 65fe32b649dc328c9f531584897e85b3
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 0f98fdbde2b04387f27b3401dd
+AAD = 02010329660fa716556193eb4870ee84bd934296a5c52d92bba859cc13caaddc
+Tag = ec31fb6b41c2dae87cf395fc1fe3a080
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 4eed58f381e500902ba5c56864
+AAD = 96056d9ebd7c553c22cc2d9d816b61123750d96c1b08c4b661079424bf3c4946
+Tag = 33c2f2312dd5bfcadbb05f8d0a33fd4a
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 1e7e51f0fa9a33ed618c26f5e3
+AAD = da9b8ffb0f3c2aee2e386cc9f035ec1eb3e629bd1544c11dc21be4fd8ac9074a
+Tag = a9e81afd1030d195c679e2c837aeb736
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = f012f94f5988c79aa179d7fdfc
+AAD = 612b2ef2683109d99452f95099417641d0c2be3f8ab4cbb2a44e83355ba9303c
+Tag = 1db000f0e7d3a03718293fc118678427
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 715acf92cfb69ad56036c49e70
+AAD = 960667b85be07304634124b9324be12a1c11451f1fa9db82c683265b4cf8e5ff
+Tag = ea37900f049db8fc5cbf46edb5fcac2c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 141be3601e38185a9fa1596d2e
+AAD = 606452c62290b43559a588bb03356f846cecb0ccaf0bdaf67a18abd811d4315a
+Tag = d1097ebd7ad0a41f61ba32a44dc15305
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = fcdda3c5f0e80843b03d8788da
+AAD = 03f22247a55461a293d253c77483859fdac1b87c2480e208a3df767cfbfde512
+Tag = 0979729272d8b42f2e3dc0eb181a1217
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = ca660ed3b917c0aca140dcd3fb
+AAD = 254a86f5b20d344ad86fd5523d08f1864737be57731440c29aa6b42574572f51
+Tag = 4457200916a20116b096225606f1a9e2
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 642ae3466661ce1f51783deece
+AAD = 4432a1cec5976cc13b8fb78341d426c2248f091b597123d263ffafc7f82da5a5
+Tag = cc6b51f39a3dcfb54abbb89f4df21114
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 7864c717ec93db38b10679be47
+AAD = 679aad1ad1e57029e3362b325572fc71cac53184b0f1546867e665a4a59466c4
+Tag = aac09cef9697927331251f028d24c31f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = c3bf9dfe9d6c26f543188fb457
+AAD = e301f69ad3a7e08a3d02462f0aa584449eb0449b0e3c50aa8dfaa4472816c8b0
+Tag = 56c00070eae0db329894a045d866bbaf
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 1527657d2fd98f7deca55cc649
+AAD = f4c723433b7cafe3cda9bb4940a21a89a8382d13018b622ccd1ffb9ffd3211af
+Tag = 090016bb96aeaabbf66fd34fc97591a4
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = b8432d3d5525a0dadbbaa6b6b8
+AAD = 86ee6e37b4a2d9a0b52ec95643b4e8297e237721e15ce8bf7593a98644f83eba
+Tag = 264407dfe796bf7f6eb1f26c1f8504ef
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 5a8aa485c316e9
+AAD = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c
+Tag = 75dea8d1
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 9f6ca4af9b159148c889a6584d1183ea26e2614874b05045
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = fdd2d6f503c915
+AAD = 5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e
+Tag = d7965825
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 84d8212e9cfc2121252baa3b065b1edcf50497b9594db1eb
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 27d73d58100054
+AAD = f6468542923be79b4b06dfe70920d57d1da73a9c16f9c9a12d810d7de0d12467
+Tag = f7f796fe
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 5f60a8f867a33b2077ecc69863b295c3c6aeae7d7cade7f8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = dd16e0ce1250e3
+AAD = bc65cfd65e9863c8b7457d58afa6bdb48a84170d8aa97ba5b397b52ad17a9242
+Tag = b8f1f2ae
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 1353b3fa1bb1d57ffb139017885c02e26c90231a24b5a615
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = ccee19d037cf4a
+AAD = c026696e6425e6c33f45b4145febf1137e7ac26383c9f5aa4cd4e5e8abb19e07
+Tag = 8b4b53f6
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = c3116d9040e1ed4f7c9464d270fb302bd3f1561c25c5b95b
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 6c8ba94f09cbe6
+AAD = 774ad1a88f8bb063951486d4aec5bf82d5fc535bd0b952f86200c123c37fa496
+Tag = f6bf3800
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 0ca17e8f89bea67db48a8f132ef6c6df7a292914d401299a
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 1f670302fcdcc8
+AAD = 1a9ff9698cfc96b581d7115c822e4363d7355ec5daed2eae5bf89ee944ac7d9c
+Tag = 13244cf6
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 0ce543569e8187f3cec70399ff922e4903cb1d12f990f056
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 5d05f658c729a2
+AAD = dd9564c1431ed490b17ef69f6115805e54ef156ef4e10e58f7d57a7e86626352
+Tag = a5876de8
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 3acdbc163a350f312791b152a41e57627b1cc8bf3e41c8ae
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 22a77db9fcbc95
+AAD = 86bf1739c10f63df734ee3e60ac40ff5636c49f68ca4c16ece289609eb413e7a
+Tag = 1970ed17
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 604518e436edf7a0561d5e284f3915839a6d28cb06ef792a
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 491e32b0bbfa4c
+AAD = 75bef075c79d6cfd7fc73aefd67b2d215be0648937477ba606b1fe1be591239e
+Tag = f68d8da4
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = fc79b520d67da891e63654d7927db6c8012c96985a0059d5
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = bc4b7d3a380be0
+AAD = 353dbb41e2d525a9f4fcd858d0f0aa1b1e86ac0f936d5c09c6b61c343f94e3fc
+Tag = 90ee4c14
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = d86bb51a98770098d0feb39170bd979199a8f741041df137
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = a840e98df72ae9
+AAD = 22c6607732ef1bdc7fcf6197e037cdadd7ee17c008552dd9f04b8564d34fb17c
+Tag = 29c87855
+Plaintext = a2f53385618b41301f4e3ea4c597f411103dac2b37abf5da
+Ciphertext = 51b6b928bdd1cc0bd0a0aed2cda302472d618ffaa60e1790
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 39d93c3cf31a6f
+AAD = 937dfac5cded938438f4e97aabd9beb50dba40f824198260a89729479cfe6869
+Tag = 4de8ed8d
+Plaintext = c1bdef96dc868446be48491b160504546f2a40dd581f9582
+Ciphertext = d0abab9b8e9d6c11bb9c15bea8a486704bed32c57297055b
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = 0bbc177019321e
+AAD = f6e02678820f5ccbede6cbded02d6dd58d486166d7b18ee975a688af421fb795
+Tag = 31d69947
+Plaintext = 72a70954d22ad722fc32756afce67b344b2f3c55fe1d9eed
+Ciphertext = 92fd519a966c0fbdd7087ff5a1bd946cd663502db3783835
+
+Cipher = aes-192-ccm
+Key = f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4
+IV = ad048eb2ad7526
+AAD = 0d2739cfdac782b61f484fa1a423c478c414397ec420327963d79112b2d70a7e
+Tag = 30768d4d
+Plaintext = 72a70954d22ad722fc32756afce67b344b2f3c55fe1d9eed
+Ciphertext = 7f239b1916830161f3b52b7ab13542a5a0a97a17f30ca5fa
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 5a8aa485c316e9
+AAD = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c
+Tag = 4d1d980d6fe0fb44b421992662b97975
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 6aab64c4787599d8f213446beadb16e08dba60e97f56dbd1
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = fdd2d6f503c915
+AAD = 5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e
+Tag = 3c51d36c826f01384100886198a7f6a3
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 4980b2ee49b1aaf393175f5ab9bae95ec7904557dfa20660
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 27d73d58100054
+AAD = f6468542923be79b4b06dfe70920d57d1da73a9c16f9c9a12d810d7de0d12467
+Tag = 758a111aae4f735b7dd4d9802f2a8406
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 86a02bdd6ae733eee26f8eab898b336105978b5bbd6df781
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = dd16e0ce1250e3
+AAD = bc65cfd65e9863c8b7457d58afa6bdb48a84170d8aa97ba5b397b52ad17a9242
+Tag = 8cef14ebc2951069739d5d657d82addb
+Plaintext = a265480ca88d5f536db0dc6abc40faf0d05be7a966977768
+Ciphertext = 59cfab8956813c48e09332a2bb8a30dbcdf5afb2529532ab
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = ccee19d037cf4a
+AAD = c026696e6425e6c33f45b4145febf1137e7ac26383c9f5aa4cd4e5e8abb19e07
+Tag = 170a2b9c309de6c2326115a76efbdf98
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 67d989ea935b9ce190e3a7f3b645305e1e308a7fe617f80f
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 6c8ba94f09cbe6
+AAD = 774ad1a88f8bb063951486d4aec5bf82d5fc535bd0b952f86200c123c37fa496
+Tag = 4bcd14af0205af716f2b864f0c397f65
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 2522a5e4d157193ef2c264cfe877db8ac75b3cc5aab08a81
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 1f670302fcdcc8
+AAD = 1a9ff9698cfc96b581d7115c822e4363d7355ec5daed2eae5bf89ee944ac7d9c
+Tag = 762d5d8adafe75a191310a2618930c48
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 4536422bbad220079ee09e700e103efdaac832d016a20813
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 5d05f658c729a2
+AAD = dd9564c1431ed490b17ef69f6115805e54ef156ef4e10e58f7d57a7e86626352
+Tag = 206f80080dfa3e66e6371c0cde6cd205
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = d6711a78adf54f4effe647d531c4618cf32e3037eb700580
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 22a77db9fcbc95
+AAD = 86bf1739c10f63df734ee3e60ac40ff5636c49f68ca4c16ece289609eb413e7a
+Tag = b1b5b2b35c8a8125efccd1f4102f3e82
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = e44034a397778e1c6babab27f5a50fa4aac0e83d6b3eb25d
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 491e32b0bbfa4c
+AAD = 75bef075c79d6cfd7fc73aefd67b2d215be0648937477ba606b1fe1be591239e
+Tag = ca36f53b01943f03cb8b69b5af53e505
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = b8e31c5910623e405f2ebf65821963e5b8814043612395fe
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = bc4b7d3a380be0
+AAD = 353dbb41e2d525a9f4fcd858d0f0aa1b1e86ac0f936d5c09c6b61c343f94e3fc
+Tag = c3bfc6851049d32105fd16bd45b29f29
+Plaintext = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005
+Ciphertext = 4000faf8558f2f4e01e45e90796cd236e5211d1704270f31
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = a840e98df72ae9
+AAD = 22c6607732ef1bdc7fcf6197e037cdadd7ee17c008552dd9f04b8564d34fb17c
+Tag = 847b022733ca5a5e3c4d472332484b7f
+Plaintext = a2f53385618b41301f4e3ea4c597f411103dac2b37abf5da
+Ciphertext = 53bb608f6236798839af35888cb0fa4797b599271084cc13
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 39d93c3cf31a6f
+AAD = 937dfac5cded938438f4e97aabd9beb50dba40f824198260a89729479cfe6869
+Tag = 1c79edbf38c50e0f240a2d70f65aa79f
+Plaintext = c1bdef96dc868446be48491b160504546f2a40dd581f9582
+Ciphertext = be54551d1d2f1b3eb60ffe3b165524ff90ca09fb252bf21c
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 0bbc177019321e
+AAD = f6e02678820f5ccbede6cbded02d6dd58d486166d7b18ee975a688af421fb795
+Tag = a82cd3ebaf6c2d3e21749bdf570ad28d
+Plaintext = 72a70954d22ad722fc32756afce67b344b2f3c55fe1d9eed
+Ciphertext = f07c1072d8f8e077dfbb3ad86dd92d32b41f29e647dcd7e3
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = ad048eb2ad7526
+AAD = 0d2739cfdac782b61f484fa1a423c478c414397ec420327963d79112b2d70a7e
+Tag = ef93a8759845326683a0d9c22151f486
+Plaintext = 72a70954d22ad722fc32756afce67b344b2f3c55fe1d9eed
+Ciphertext = 7f7cf7f4d0645934cb0a5e67b4227a909aa55dba09b2c39c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 5a8aa485c316e9403aff859fbb
+AAD = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982
+Tag = c25e9fce
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 16e543d0e20615ff0df15acd9927ddfe40668a54bb854ccc
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 0812757ad0cc4d17c4cfe7a642
+AAD = ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10
+Tag = 8ecedb3e
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = df35b109caf690656ae278bbd8f8bba687a2ce11b105dae9
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = eff510acc1b85f35029cf7dc00
+AAD = 0923b927b8295c5dfaf67da55e5014293bc8c708fda50af06c1e8aef31cccc86
+Tag = 728da544
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 7075da2291e2cb527eb926ed08d8020c5f8f0f2d4a6a4745
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 3d13d09057190366c63c8750e9
+AAD = 77e27aa9a7bf30e130c862a3296a1cd7a10195ed1d940f2c97bfff47c6f06e32
+Tag = 02a9b9bc
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 18a77a66457b53286b1aea0845304cac8e66a02d5c642e4c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = e3c03ef7e1d31961ee0b97bd99
+AAD = 8a3676dd640821b58fb0f0329855fd5882c376ea166b958b7aaad223054e5784
+Tag = ccf8ecf0
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 24e1d3820101412d8f4d57118cab8f7e489d5cac78802dd5
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 5d165ddd4e599387af5967cae6
+AAD = e374f875ce829b62c98fbd67bcf128b5647f25fff9a643300eb95559b889baed
+Tag = 661181d5
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = b5929bc9648e24a553c5cd953ecb9d67ee508d2d4ac7b46e
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = fcec171162a27a96066181fab2
+AAD = cf431cc3671ec468ea86f6cc09842fcf3a84b3ef0fa1c7b20b232145b4469d62
+Tag = 7d74517d
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 54aa018dc7fdf8a54809e1393d18031bab4aa5ca35c20190
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 2fa8120398d1a946f391367cf6
+AAD = 92558a239c8e13230754f23aec67b153db29fdfc7daf641778185dd2931d89da
+Tag = 4a8edd83
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 69bcc300a459862b3cd284c15dd4af53dc7e95f3067bb825
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 88e0ae338bbca9d4299b294354
+AAD = 5db5c388dbadc9f175a5cd5a1472a458d25acd7fb9c951c0cd45edf64da473bb
+Tag = 70ad39a6
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 5c2d2df0d8aade3e5ae0f8d8b4b4d7c565817a31b2865dc2
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 4862e36296d6afc9399a95bbb4
+AAD = 36d82ebd0e0f5fe3b12946d041ae5aee16e6d17025406dd776f499bbd8e8b4c8
+Tag = ae423997
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = df1b3f98b6b0060191e7eb817f5908ddc0bc6f83860349e8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 2f360a4715074e942244ab7f9b
+AAD = f0087b0086a081c1071481f033a8be8e940c36763084329bb8461b9102238f4f
+Tag = 3309108e
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 16e59dd38395c7be7f580371edabb1e9bf21270de270aa28
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 93e08854560edb096e5d654086
+AAD = bdc60dff08bfd5d44320b75c61e456fd4333c9c3d0294d4a48d936dfd5922ce2
+Tag = bcc87096
+Plaintext = 569e4aec88dd51ca519c0a00c922ee33d3559b98a32d7906
+Ciphertext = 0ef8981dd37c055a3c3e14786fc662b2a11065964911d35e
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = e3f37b68ff508cfe295441d9e3
+AAD = b2b6c5782e4f128467c589d2a6cf55ef12877adb771bbb6245c5bba9dcfd6208
+Tag = e981e935
+Plaintext = 02b5511204bd55f7c37973e26f6df5883c0a530f07c7f8c2
+Ciphertext = fc1870cfc440f74f73f40e682cf4713d027c297b9426c3ef
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = ea98ec44f5a86715014783172e
+AAD = e4692b9f06b666c7451b146c8aeb07a6e30c629d28065c3dde5940325b14b810
+Tag = 3b98de4f
+Plaintext = 4da40b80579c1d9a5309f7efecb7c059a2f914511ca5fc10
+Ciphertext = 9fc2c462dff1ba9756772d73de5c4e822b5ea0bc88845a32
+
+Cipher = aes-192-ccm
+Key = a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d
+IV = 5a16a8902bd70fa06cfe184c57
+AAD = 399d6b0652836457ec4f701f0dc0e5aed73d16585d61cb1bb5b7ee824fc287c8
+Tag = af3b74e1
+Plaintext = 4da40b80579c1d9a5309f7efecb7c059a2f914511ca5fc10
+Ciphertext = 05fc586d5c780b8e06f618b5bb85f591665a54390eba4e14
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 5a8aa485c316e9403aff859fbb
+AAD = a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982
+Tag = 8464a6f7fa2b76744e8e8d95691cecb8
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = c5b0b2ef17498c5570eb335df4588032958ba3d69bf6f317
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 0812757ad0cc4d17c4cfe7a642
+AAD = ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10
+Tag = 06bd6dc2e6bcc3436cffb969ae900388
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = d1f0518929f4ae2f0543de2a7dfe4bb0110bb3057e524a1c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = eff510acc1b85f35029cf7dc00
+AAD = 0923b927b8295c5dfaf67da55e5014293bc8c708fda50af06c1e8aef31cccc86
+Tag = bb56d90669c726d866fe2206b8828727
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 1aa7dfa3a9818142c4971cbf4f64d4cbdbd354c6958ef474
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 3d13d09057190366c63c8750e9
+AAD = 77e27aa9a7bf30e130c862a3296a1cd7a10195ed1d940f2c97bfff47c6f06e32
+Tag = 9953fec4e091b3573214e1ecac1ac00c
+Plaintext = 8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5
+Ciphertext = 90352a5ec92d4fa52a96ae28251a57933728b2a3670e2ecd
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = e3c03ef7e1d31961ee0b97bd99
+AAD = 8a3676dd640821b58fb0f0329855fd5882c376ea166b958b7aaad223054e5784
+Tag = 783618374f6d03df28ee57a1a5aa38d8
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = eaa995946ed91d6a08ade14b260ac752cbd1081d5a7cad90
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 5d165ddd4e599387af5967cae6
+AAD = e374f875ce829b62c98fbd67bcf128b5647f25fff9a643300eb95559b889baed
+Tag = 47bb3f30d6e674d10a496806c1c8933e
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 0e320c4ece6ef0305a431a07a5a34d463ec4a37fc513c4b9
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = fcec171162a27a96066181fab2
+AAD = cf431cc3671ec468ea86f6cc09842fcf3a84b3ef0fa1c7b20b232145b4469d62
+Tag = 7dd7ee3f75cfb47fa72433644f9cf62e
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 10685888091597c50acc54b2fb65150b83a7115351d6f8bd
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 2fa8120398d1a946f391367cf6
+AAD = 92558a239c8e13230754f23aec67b153db29fdfc7daf641778185dd2931d89da
+Tag = 43314076072a0ebd253fe1ab4883ebea
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = e456abf9ee83e0a68fbdb09c4a7afaba0efb0aa6d74a17c4
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 88e0ae338bbca9d4299b294354
+AAD = 5db5c388dbadc9f175a5cd5a1472a458d25acd7fb9c951c0cd45edf64da473bb
+Tag = 16a72444f0949868f0e71907acbb29f4
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 5adadfd296edaf4bea92c8245983dc31b11335f682fb222c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 4862e36296d6afc9399a95bbb4
+AAD = 36d82ebd0e0f5fe3b12946d041ae5aee16e6d17025406dd776f499bbd8e8b4c8
+Tag = ab2025208191d73041c038cf2562bb8c
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = c2bb4d5a830646b3f8bf84044851c3b676c4ec02e43dcbf1
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 2f360a4715074e942244ab7f9b
+AAD = f0087b0086a081c1071481f033a8be8e940c36763084329bb8461b9102238f4f
+Tag = b7e6d183efa1f51b7ff31eaa52ed59ba
+Plaintext = 92973ce707733a73118c8ce6b5e3fc77a17f448310c0197f
+Ciphertext = 9589b8abcb47e54e6e8fad3e64fec7ed4f70ac435bb3e548
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 93e08854560edb096e5d654086
+AAD = bdc60dff08bfd5d44320b75c61e456fd4333c9c3d0294d4a48d936dfd5922ce2
+Tag = d990b642039f24755790332b3cc47c49
+Plaintext = 569e4aec88dd51ca519c0a00c922ee33d3559b98a32d7906
+Ciphertext = af63f27e2a9e70f106477493dc141d16a1d059dd7a8a7810
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = e3f37b68ff508cfe295441d9e3
+AAD = b2b6c5782e4f128467c589d2a6cf55ef12877adb771bbb6245c5bba9dcfd6208
+Tag = 6d3968fdceaae5138c411a29d0d333ee
+Plaintext = 02b5511204bd55f7c37973e26f6df5883c0a530f07c7f8c2
+Ciphertext = 1d2ae88c878684a0b404986252b3a7583e1a5a51163ddc60
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = ea98ec44f5a86715014783172e
+AAD = e4692b9f06b666c7451b146c8aeb07a6e30c629d28065c3dde5940325b14b810
+Tag = dbf8e9464909bdf337e48093c082a10b
+Plaintext = 4da40b80579c1d9a5309f7efecb7c059a2f914511ca5fc10
+Ciphertext = 30c154c616946eccc2e241d336ad33720953e449a0e6b0f0
+
+
+Title = NIST CCM 256 Decryption-Verfication Process Tests
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = a544218dadd3c1
+AAD =
+Tag = 469c90bb
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = d3d5424e20fbec
+AAD =
+Tag = 46a908ed
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = e776620a3bd961
+AAD =
+Tag = fdd35c4d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = 6c7a3be9f9ad55
+AAD =
+Tag = 869ce60e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = dbb3923156cfd6
+AAD =
+Tag = 1302d515
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = b390f67eaef8f5
+AAD =
+Tag = 156416ee
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = a259c114eaac89
+AAD =
+Tag = 4fe06e92
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = 7fc8804fef18ef
+AAD =
+Tag = 611091aa
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = fbaf4cbc49fa0f
+AAD =
+Tag = 696e9371
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = 2ed0c8761dbf04
+AAD =
+Tag = a0e0a2cb
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = 346bb04ea0db86
+AAD =
+Tag = 43cc0375
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = e1be89af98ffd7
+AAD =
+Tag = e5417f6b
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = a6a0d57aaaf012
+AAD =
+Tag = fff8a068
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = 1aa758eb2f9a28
+AAD =
+Tag = f8fa8e71
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6
+IV = 2911167fc98fc3
+AAD =
+Tag = 0bfa2d9d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = a544218dadd3c1
+AAD =
+Tag = 8207eb14d33855a52acceed17dbcbf6e
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = d3d5424e20fbec
+AAD =
+Tag = 60f8e127cb4d30db6df0622158cd931d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = e776620a3bd961
+AAD =
+Tag = 4239f29871651e9a26b8b06ffc5b3748
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 6c7a3be9f9ad55
+AAD =
+Tag = 5d35364c621fe8959dfe70ab44700fbe
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = dbb3923156cfd6
+AAD =
+Tag = e4dc5e03aacea691262ee69cee8ffbbe
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = b390f67eaef8f5
+AAD =
+Tag = c8eb7643b4ed3c796c3873e8c6624e0d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = a259c114eaac89
+AAD =
+Tag = f79c53fd5e69835b7e70496ea999718b
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 7fc8804fef18ef
+AAD =
+Tag = 687e00723a419fa81c0923b8b8e245ae
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = fbaf4cbc49fa0f
+AAD =
+Tag = 499ab350309ad6091ec4aaf6bf0cbd00
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 2ed0c8761dbf04
+AAD =
+Tag = c27b9f14787dc5375f59d0c561a23446
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 346bb04ea0db86
+AAD =
+Tag = 655c737722c78ac96582a883d407b2bb
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = e1be89af98ffd7
+AAD =
+Tag = 10d3f6fe08280d45e67e58fe41a7f036
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = a6a0d57aaaf012
+AAD =
+Tag = b4e425e43edb92c606f7cb2de8a06932
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 1aa758eb2f9a28
+AAD =
+Tag = 2590df2453cb94c304ba0a2bff3f3c71
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 2911167fc98fc3
+AAD =
+Tag = 1f344e30dfa95b2319e274caa5780e60
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = a544218dadd3c10583db49cf39
+AAD =
+Tag = 8a19a133
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 3c0e2815d37d844f7ac240ba9d
+AAD =
+Tag = 2e317f1b
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 75549e7e5657e5fe19872fcee0
+AAD =
+Tag = 979bdcfe
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = d071ff72735820d73485870e83
+AAD =
+Tag = 8ef89acf
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 79ac204a26b9fee1132370c20f
+AAD =
+Tag = 154024b2
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = a64bbc3d6d377dab513f7d9ce8
+AAD =
+Tag = 8dbcc439
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 0545fd9ecbc73ccdbbbd4244fd
+AAD =
+Tag = 5c349fb2
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 182fb47a12becf0bfe65df1287
+AAD =
+Tag = 79df3e02
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = f342059a6f9dc14226b40debc4
+AAD =
+Tag = fbc2c500
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 6cbfe6bb4c9b171b93d28e9f8f
+AAD =
+Tag = 2fac1bca
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 82877df921c6ade43064ad963e
+AAD =
+Tag = 99948f6e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = 0a37f2e7c66490e97285f1b09e
+AAD =
+Tag = c59bf14c
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = d7b9c346ce2f8bad9623122e10
+AAD =
+Tag = b764c393
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD =
+Tag = 5b96f41d
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8
+IV = b6ce7d00731184b24428df046b
+AAD =
+Tag = f7e12df1
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = a544218dadd3c10583db49cf39
+AAD =
+Tag = 97e1a8dd4259ccd2e431e057b0397fcf
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 3c0e2815d37d844f7ac240ba9d
+AAD =
+Tag = 5a9596c511ea6a8671adefc4f2157d8b
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 75549e7e5657e5fe19872fcee0
+AAD =
+Tag = 66f5c53efbc74fa02dedc303fd95133a
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = d071ff72735820d73485870e83
+AAD =
+Tag = 2dfd3c852f68eace45acf433a6aa9c05
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 79ac204a26b9fee1132370c20f
+AAD =
+Tag = 5c8c9a5b97be8c7bc01ca8d693b809f9
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = a64bbc3d6d377dab513f7d9ce8
+AAD =
+Tag = ec093121bdcd589285f2262be8db5c4e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 0545fd9ecbc73ccdbbbd4244fd
+AAD =
+Tag = 84201662b213c7a1ff0c1b3c25e4ec45
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 182fb47a12becf0bfe65df1287
+AAD =
+Tag = bbe746d6d31e8e9745faed4095ab8d5d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = f342059a6f9dc14226b40debc4
+AAD =
+Tag = 646c1258dc4aa6fc380818e70e5f4328
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 6cbfe6bb4c9b171b93d28e9f8f
+AAD =
+Tag = 15fa37ca7f2883a4642c1ed41b8f6293
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 82877df921c6ade43064ad963e
+AAD =
+Tag = c6acf5e5ded4efb2c314370ebb9e9cde
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 0a37f2e7c66490e97285f1b09e
+AAD =
+Tag = 586e728193ce6db9a926b03b2d77dd6e
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = d7b9c346ce2f8bad9623122e10
+AAD =
+Tag = 642a187e71feff5989e28184aded0199
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD =
+Tag = 64864d21b6ee3fca13f07fc0486e232d
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = b6ce7d00731184b24428df046b
+AAD =
+Tag = 58c63ce68f132d30d177c5834344cc5d
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = a544218dadd3c1
+AAD =
+Tag = 22aa8d59
+Plaintext = d3d5424e20fbec43ae495353ed830271515ab104f8860c98
+Ciphertext = 64a1341679972dc5869fcf69b19d5c5ea50aa0b5e985f5b7
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = bfcda8b5a2d0d2
+AAD =
+Tag = 77d00a75
+Plaintext = d3d5424e20fbec43ae495353ed830271515ab104f8860c98
+Ciphertext = c5b7f802bffc498c1626e3774f1d9f94045dfd8e1a10a202
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 6bae7f35c56b27
+AAD =
+Tag = 28588021
+Plaintext = d3d5424e20fbec43ae495353ed830271515ab104f8860c98
+Ciphertext = bf432e246b7fa4aff8b3ada738432b51f6872ed92284db9d
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = c5e4214b1bf209
+AAD =
+Tag = 37921120
+Plaintext = d3d5424e20fbec43ae495353ed830271515ab104f8860c98
+Ciphertext = 0d5760ad0e156e401120a1ebd1b139248784c88e10e34254
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 9d773a31fe2ec7
+AAD =
+Tag = dce2d25e
+Plaintext = 839d8cfa2c921c3cceb7d1f46bd2eaad706e53f64523d8c0
+Ciphertext = 5acfbe5e488976d8b9b77e69a736e8c919053f9415551209
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = f42cb0cce9efb6
+AAD =
+Tag = 1ef530d0
+Plaintext = 839d8cfa2c921c3cceb7d1f46bd2eaad706e53f64523d8c0
+Ciphertext = be8be6046ac58411a00c131dd4a72d565f98d87a2c89124b
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 24b7a65391f88b
+AAD =
+Tag = 750125f3
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = f00628e10e8e0115b4a4532a1212a23aade4090832c1972d
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = d2a7eb45780df3
+AAD =
+Tag = 08aaaf93
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = 9078151f674d5f7b56e2451b0316156f776459f17d277e01
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 046cbfd26093d8
+AAD =
+Tag = bd95e677
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = 921cbecce3b06f3d655a5a0a4d212320d4f147575079fd23
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 51b13b0b04d077
+AAD =
+Tag = 7e2ebb1d
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = 8cab1ff22d474e9863c153e84680e2a66981f03605136047
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = ce2e9967bf9eb7
+AAD =
+Tag = 662f8684
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = 15f476b5aefe072548a54f59506d9c3b9ce29025340214be
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = b672c91376f533
+AAD =
+Tag = d5642830
+Plaintext = 4f7a561e61b7861719e4445057ac9b74a9be953b772b09ec
+Ciphertext = 758aa03dc72c362c43b5f85bfaa3db4a74860887a8c29e47
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 62f6f1872462d8
+AAD =
+Tag = 01472fe1
+Plaintext = 4f7a561e61b7861719e4445057ac9b74a9be953b772b09ec
+Ciphertext = ec645769b22161567e6a7e23aa06575bc767a34aa54d3cba
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = a6d01fb88ca547
+AAD =
+Tag = 7aa999d7
+Plaintext = a36155de477364236591e453008114075b4872120ef17264
+Ciphertext = 615cbeabbe163ba8bc9c073df9ad40833fcf3f424644ccc3
+
+Cipher = aes-256-ccm
+Key = af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569
+IV = 46ad6ebbd8644a
+AAD =
+Tag = d27b7cf2
+Plaintext = a36155de477364236591e453008114075b4872120ef17264
+Ciphertext = 0ed6cc6451de57ca672d56dee45d4548a810d5c49dfe442d
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = a544218dadd3c1
+AAD =
+Tag = 374f3bb6db8377ebfc79674858c4f305
+Plaintext = d3d5424e20fbec43ae495353ed830271515ab104f8860c98
+Ciphertext = bc51c3925a960e7732533e4ef3a4f69ee6826de952bcb0fd
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = bfcda8b5a2d0d2
+AAD =
+Tag = 3275f2a4907d51b734fe7238cebbd48f
+Plaintext = d3d5424e20fbec43ae495353ed830271515ab104f8860c98
+Ciphertext = afa1fa8e8a70e26b02161150556d604101fdf423f332c336
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 6bae7f35c56b27
+AAD =
+Tag = e672f1f22cbe4a5305f19aaa6967237b
+Plaintext = d3d5424e20fbec43ae495353ed830271515ab104f8860c98
+Ciphertext = 72bc8ef21a847047091b673ccf231d35ecf6f4049741703b
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = c5e4214b1bf209
+AAD =
+Tag = 400b152113c3976be63dcd9e7a84ddac
+Plaintext = d3d5424e20fbec43ae495353ed830271515ab104f8860c98
+Ciphertext = b719f6555fc4e5424273f5903d5672af460413110278707f
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 9d773a31fe2ec7
+AAD =
+Tag = f2870ce198af11f4fb698a67af6c89ad
+Plaintext = 839d8cfa2c921c3cceb7d1f46bd2eaad706e53f64523d8c0
+Ciphertext = 4539bb13382b034ddb16a3329148f9243a4eee998fe444af
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = f42cb0cce9efb6
+AAD =
+Tag = cc98b3f5758972bf08ea9e88dc6e54ed
+Plaintext = 839d8cfa2c921c3cceb7d1f46bd2eaad706e53f64523d8c0
+Ciphertext = 47cbb909cb12fa0a4b0f1aefd54c52d1edd1533290f76b8c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 24b7a65391f88b
+AAD =
+Tag = 432704eff9b6830476db3d30d4c103e4
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = 6d0f928352a17d63aca1899cbd305e1f831f1638d27c1e24
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = d2a7eb45780df3
+AAD =
+Tag = 71256981db86f1e768170a104ebfb81d
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = e0e686d917f78b3b0058fed7b084976244789073a6305ff5
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 046cbfd26093d8
+AAD =
+Tag = 5efbbae6a346863a93d52e0321cef8b2
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = 960c573f5d6934a4cac49d06998f827b3d665cf02c998fe5
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 51b13b0b04d077
+AAD =
+Tag = ac2fdc3cc683f6120e405f446a10e0f3
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = 7cf8f4806848e34aa7d3bd7e2cb9f5d9ff21395ff6d34826
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = ce2e9967bf9eb7
+AAD =
+Tag = d254f7765b6155054a5efde28dd38750
+Plaintext = 3bed52236182c19418867d468dbf47c8aac46c02445f99bb
+Ciphertext = e4f6445ca36e7ee3323f11f6a5ca8ded0c85871e092aa687
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = b672c91376f533
+AAD =
+Tag = 9dc42d22a5436bc12eff5505edb25e19
+Plaintext = 4f7a561e61b7861719e4445057ac9b74a9be953b772b09ec
+Ciphertext = f23ac1426cb1130c9a0913b347d8efafb6ed125913aa678a
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 62f6f1872462d8
+AAD =
+Tag = 2db05feb368ab772d977fd97b35262fa
+Plaintext = 4f7a561e61b7861719e4445057ac9b74a9be953b772b09ec
+Ciphertext = ac9f131389181b1023f1ee47633aa433fc5d93a87d9ece96
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = a6d01fb88ca547
+AAD =
+Tag = 789d2043179fdd8fdcbd52313b7b15cb
+Plaintext = a36155de477364236591e453008114075b4872120ef17264
+Ciphertext = 773b8eea2e9830297ac11d3c1f6ea4008c96040e83d76d55
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 46ad6ebbd8644a
+AAD =
+Tag = 079a2bac0ab4bc249bbdb330181cdd16
+Plaintext = a36155de477364236591e453008114075b4872120ef17264
+Ciphertext = d3fae92043c419fe8ac0d7491ca8041ad089559d895103cf
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = a544218dadd3c10583db49cf39
+AAD =
+Tag = 3d14fb3f
+Plaintext = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e
+Ciphertext = 63e00d30e4b08fd2a1cc8d70fab327b2368e77a93be4f412
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 894dcaa61008eb8fb052c60d41
+AAD =
+Tag = 8d0c0099
+Plaintext = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e
+Ciphertext = bb5425b3869b76856ec58e39886fb6f6f2ac13fe44cb132d
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 8feba0d720aa4a5e35abc99e82
+AAD =
+Tag = efd4365c
+Plaintext = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e
+Ciphertext = 2ca3be419d5be5ed682f8954d2c20efd9e6d360814735dae
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = ed04c9ca8702aec8d0a58e09a0
+AAD =
+Tag = a4ccbef1
+Plaintext = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e
+Ciphertext = 3d34bda62db39d6118d6fd5cd38f1a3820ca69ce584b94a2
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 1501a243bf60b2cb40d5aa20ca
+AAD =
+Tag = f1a72afc
+Plaintext = f5730a05fec31a11662e2e14e362ccc75c7c30cdfccbf994
+Ciphertext = 377b2f1e7bd9e3d1077038e084f61950761361095f7eeebb
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = c6edaf35f0cb433500a8c3a613
+AAD =
+Tag = be4f5f9a
+Plaintext = f5730a05fec31a11662e2e14e362ccc75c7c30cdfccbf994
+Ciphertext = 9cef6c889ff51666df9dd1dd2215c15f4b2078a29373c106
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = d65e0e53f765f9d5e6795c0c5e
+AAD =
+Tag = 9d0ef4f7
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = 6cab3060bf3b33b163b933c2ed0ba51406810b54d0edcf5c
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 2b0163418a341588db0f5786d8
+AAD =
+Tag = c08a9e85
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = f9543a659e9a8b7d75dd859df923817452735f5051726422
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = f16bba081bddda83546eabc9a5
+AAD =
+Tag = 75dd819a
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = 0d20bf6a9d02da72091d94cdb38743bfea2473d3ab62dcad
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = ace99268a32b9c1b5ccd8b0d84
+AAD =
+Tag = 86e205f9
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = 8bca01e6ebd7ebcdfe52b88e314670ffeb35882fc05394b3
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 24570517bbb0df1b3fbd32f57a
+AAD =
+Tag = f73a8bf0
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = 7061c84e2e1d9d58013543ff82666055a1f055c1296c42c8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = a6b2371acf8321864c08ddb4d8
+AAD =
+Tag = 94f223f0
+Plaintext = 1a43ca628026219c5a430c54021a5a3152ae517167399635
+Ciphertext = c5aa500d1f7c09a590e9d15d6860c4433684e04dd6bc5c8f
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = f8e2d4e043f5fe7a72b6117811
+AAD =
+Tag = 17af8b14
+Plaintext = 1a43ca628026219c5a430c54021a5a3152ae517167399635
+Ciphertext = e3efa7971e27ba1245ee9491ebdbb28ad9b24b325da57604
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = c2b60f14c894ec6178fe79919f
+AAD =
+Tag = b4d35d44
+Plaintext = 3e707d98f19972a63d913e6ea7533af2f41ff98aee2b2a36
+Ciphertext = 852cca903d7fdf899807bd14642057534c8a0ccacb8c7b8f
+
+Cipher = aes-256-ccm
+Key = f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453
+IV = 4de4c909ac0cc5fc608baf45ac
+AAD =
+Tag = 0bc044b1
+Plaintext = 3e707d98f19972a63d913e6ea7533af2f41ff98aee2b2a36
+Ciphertext = e04fd4f5b60833021ed57c98de300bb68d0d892b2bf68e08
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = a544218dadd3c10583db49cf39
+AAD =
+Tag = 3a578d179902f912f9ea1afbce1120b3
+Plaintext = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e
+Ciphertext = f0050ad16392021a3f40207bed3521fb1e9f808f49830c42
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 894dcaa61008eb8fb052c60d41
+AAD =
+Tag = 9084607b83bd06e6442eac8dacf583cc
+Plaintext = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e
+Ciphertext = c408190d0fbf5034f83b24a8ed9657331a7ce141de4fae76
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 8feba0d720aa4a5e35abc99e82
+AAD =
+Tag = 9002a46cfb734290924a15e9c3d99924
+Plaintext = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e
+Ciphertext = 52b3d31d02d1b92b38cbae8c510204dde6bf9588e994296c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = ed04c9ca8702aec8d0a58e09a0
+AAD =
+Tag = b238e316c3f9adccce95e8c8b9c7e8d2
+Plaintext = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e
+Ciphertext = f80190470212ce1e64bf4c64ca0133d90469abf87a8233c2
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 1501a243bf60b2cb40d5aa20ca
+AAD =
+Tag = 8aaa3f0133234c0cd91609982adc034b
+Plaintext = f5730a05fec31a11662e2e14e362ccc75c7c30cdfccbf994
+Ciphertext = 254b847d4175bbb44a82b4e805514fa444c224710933f3ec
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = c6edaf35f0cb433500a8c3a613
+AAD =
+Tag = 33255731cd88345860da913bc696fdc1
+Plaintext = f5730a05fec31a11662e2e14e362ccc75c7c30cdfccbf994
+Ciphertext = 7a5c7bc02aa69efc5a159d653f3993399f69e20752c3b006
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = d65e0e53f765f9d5e6795c0c5e
+AAD =
+Tag = fafb76adf12f36740347e3edae62bca4
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = c3618c991b15de641d291419ff6957e8b9ae5046dd8c6f08
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 2b0163418a341588db0f5786d8
+AAD =
+Tag = 066f55f23d4e55bcbbbf2312ea2d8071
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = 240927bfd671a92aef0311395ad55ae42233ecee53873da4
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = f16bba081bddda83546eabc9a5
+AAD =
+Tag = 004753689cc84810b8414f1464c0c5b9
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = 4731a7e690c77cd47582ce54a1cec23d94c856b93a9fc767
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = ace99268a32b9c1b5ccd8b0d84
+AAD =
+Tag = 504da83478ede24026ec91fb12769e4b
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = f0ea12eaff20c3a50674aa1546aaae3bd5c9249108535b21
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 24570517bbb0df1b3fbd32f57a
+AAD =
+Tag = c9fcf9b9fd5e99767a7b1679b57ea961
+Plaintext = 20e394c7cc90bdfa6186fc1ba6fff158dfc690e24ba4c9fb
+Ciphertext = 5b164d9752ad6c497a7ab2d0bf8be68fea084ea5839b07b7
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = a6b2371acf8321864c08ddb4d8
+AAD =
+Tag = acb5a51d10a58d6584fbe73f1063c31b
+Plaintext = 1a43ca628026219c5a430c54021a5a3152ae517167399635
+Ciphertext = bd37326da18e5ac79a1a9512f724bb539530868576b79c67
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = f8e2d4e043f5fe7a72b6117811
+AAD =
+Tag = ce54cd7623a80a176f29a01b3abb642e
+Plaintext = 1a43ca628026219c5a430c54021a5a3152ae517167399635
+Ciphertext = 0455b4dd1069281e10531c0dc180ced9a5ef5d3fe0007470
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = c2b60f14c894ec6178fe79919f
+AAD =
+Tag = 95c66d3f411b478853886afd177d88c3
+Plaintext = 3e707d98f19972a63d913e6ea7533af2f41ff98aee2b2a36
+Ciphertext = ecd337640022635ce1ed273756d02b7feeb2515614c1fadc
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 4de4c909ac0cc5fc608baf45ac
+AAD =
+Tag = 830b2b6317716b3975e2b101aebdd920
+Plaintext = 3e707d98f19972a63d913e6ea7533af2f41ff98aee2b2a36
+Ciphertext = e25d7c9fb388596b13a13b885d5b24e31579a3494ad256da
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = a544218dadd3c1
+AAD = d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab
+Tag = 92d00fbe
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 78c46e3249ca28
+AAD = 232e957c65ffa11988e830d4617d500f1c4a35c1221f396c41ab214f074ca2dc
+Tag = 9143e5c4
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = c18d9e7971e2ae
+AAD = 0d40324aa758dbbb5391b5e6edb8a2310c94a4ae51d4fba8a7458d7cc8488baa
+Tag = 54337466
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 162d061351d82d
+AAD = 106d1fb32d948b0d8884f178ad2332a599445fae0f6f71f9ebe53a60b2df9b8e
+Tag = bf0bf84c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 3fcb328bc96404
+AAD = 10b2ffed4f95af0f98ed4f77c677b5786ad01b31c095bbc6e1c99cf13977abba
+Tag = 11250056
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = b3fd1eb1422277
+AAD = fa5398cf4cddbe4b45e9f5d7491cd9eefc5e494255961ba3f4b40d22b5f5fe76
+Tag = 13de5339
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = c42ac63de6f12a
+AAD = 7ff8d06c5abcc50d3820de34b03089e6c5b202bcbaabca892825553d4d30020a
+Tag = 4eed80fd
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = d4a7a672237e17
+AAD = d1cdad7fe886d07625a4334be6de4df0645d2a8b4008a8d35f04e6bcf87bfa56
+Tag = 4bc2e450
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = b23255372455c6
+AAD = d2e2c3607c40e0a807b86c6ebbc502ab42bdb7f85ab26299cd963bbba3a3a8fa
+Tag = b30e6bbd
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 92272d40475fbb
+AAD = 2f3af695ee33a9ebe6a48ed1b00e337261857110bb104191a54fd13bd960d8bc
+Tag = f7c11fe2
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = c4a756f6024a9d
+AAD = 2317b324b6420ada9ea7bf52b71c5faf2485528da5f56b42c517be6355cdb28b
+Tag = 76673751
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 3a1701b185d33a
+AAD = e5d54df8ed9f89b98c5ebb1bc5d5279c2e182784ff4cd9c869ae152e29d7a2b2
+Tag = 9a5382c3
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = e4db2e80dc3f63
+AAD = 7616bdf5737d01f936072b6576fa76556dfa072f7e2d7de16b9dc96ac8de409c
+Tag = 9e632f56
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = 4f490ce07e0150
+AAD = 3e12d09632c644c540077c6f90726d4167423a679322b2000a3f19cfcea02b33
+Tag = e1842c46
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4
+IV = b4aaf9ad1bde60
+AAD = 8c96c891456ddec29fe04299506723db2079a6667f96db5d198bf085acf2a4ef
+Tag = 9f644671
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = a544218dadd3c1
+AAD = d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab
+Tag = 93af11a08379eb37a16aa2837f09d69d
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 78c46e3249ca28
+AAD = 232e957c65ffa11988e830d4617d500f1c4a35c1221f396c41ab214f074ca2dc
+Tag = d19b0c14ec686a7961ca7c386d125a65
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = c18d9e7971e2ae
+AAD = 0d40324aa758dbbb5391b5e6edb8a2310c94a4ae51d4fba8a7458d7cc8488baa
+Tag = 02ea916d60e2ceec6d9dc9b1185569b3
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 162d061351d82d
+AAD = 106d1fb32d948b0d8884f178ad2332a599445fae0f6f71f9ebe53a60b2df9b8e
+Tag = fabd2d0c422b47d363ea9936ff4a311b
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 3fcb328bc96404
+AAD = 10b2ffed4f95af0f98ed4f77c677b5786ad01b31c095bbc6e1c99cf13977abba
+Tag = b3884b69d117146cfa5529901753ddc0
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = b3fd1eb1422277
+AAD = fa5398cf4cddbe4b45e9f5d7491cd9eefc5e494255961ba3f4b40d22b5f5fe76
+Tag = 7162026b6306e74fe32ece8433801bc2
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = c42ac63de6f12a
+AAD = 7ff8d06c5abcc50d3820de34b03089e6c5b202bcbaabca892825553d4d30020a
+Tag = b53d93cbfd3d5cf3720cef5080bc7224
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = d4a7a672237e17
+AAD = d1cdad7fe886d07625a4334be6de4df0645d2a8b4008a8d35f04e6bcf87bfa56
+Tag = c8bbecf69ecf8d10f0863bb4b7cbed51
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = b23255372455c6
+AAD = d2e2c3607c40e0a807b86c6ebbc502ab42bdb7f85ab26299cd963bbba3a3a8fa
+Tag = 6037145cc23a175760ae4b573907c80c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 92272d40475fbb
+AAD = 2f3af695ee33a9ebe6a48ed1b00e337261857110bb104191a54fd13bd960d8bc
+Tag = df7ea77425d631f652ffe096a8157f71
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = c4a756f6024a9d
+AAD = 2317b324b6420ada9ea7bf52b71c5faf2485528da5f56b42c517be6355cdb28b
+Tag = 7182b25ef5b113c13fa8f6769e74f1e2
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 3a1701b185d33a
+AAD = e5d54df8ed9f89b98c5ebb1bc5d5279c2e182784ff4cd9c869ae152e29d7a2b2
+Tag = 0a5d1bc02c5fe096a8b9d94d1267c49a
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = e4db2e80dc3f63
+AAD = 7616bdf5737d01f936072b6576fa76556dfa072f7e2d7de16b9dc96ac8de409c
+Tag = 9eb6d9757ec7c56cc8c79461e0017486
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 4f490ce07e0150
+AAD = 3e12d09632c644c540077c6f90726d4167423a679322b2000a3f19cfcea02b33
+Tag = 1eda43bf07f2bf003107f3a0ba3a4c18
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = b4aaf9ad1bde60
+AAD = 8c96c891456ddec29fe04299506723db2079a6667f96db5d198bf085acf2a4ef
+Tag = 5287cc160c5dd3a0f9c1986aac2a621c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = a544218dadd3c10583db49cf39
+AAD = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907
+Tag = 866d4227
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = e8de970f6ee8e80ede933581b5
+AAD = 89f8b068d34f56bc49d839d8e47b347e6dae737b903b278632447e6c0485d26a
+Tag = 94cb1127
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 6de75d3c05e83755083399a5f7
+AAD = 504b08cf34cbe17acf631ef219ae01437ebb6a980ab2f00121bb3073701b6511
+Tag = 82c2b67a
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 58d43b9f1581c590daab1a5c56
+AAD = 749f149ef306c70a5d006d9777adbbf7c0de453898c2978ef7c281535ea9b24c
+Tag = 8c8283f9
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = dfdcbdff329f7af70731d8e276
+AAD = 2ae56ddde2876d70b3b34eda8c2b1d096c836d5225d53ec460b724b6e16aa5a3
+Tag = c4ac0952
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 199ec321d1d24d5408076912d6
+AAD = a77526f3614cd974498a76d8b3cb7bacc623fdc9c85503289c462df888b199ed
+Tag = c59aa931
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 60f2490ba0c658848859fcbea8
+AAD = 3ad743283064929bf4fe4e0807f710f5e6a273e22614c728c3280a27b6c614a0
+Tag = 27c3953d
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 6f29ca274190400720bba27651
+AAD = c0850aaf141bd3f1b24f4d882590f58682b41f874748f29f8925b4914f444842
+Tag = cb1ac8eb
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = f1dfb6fdb31cb423226f181c09
+AAD = ac6b08900fc1c9463e7dfdb60eee444c4989d7b200e675f3220ba1e14eed0ab4
+Tag = 4dcc55cc
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 0d45226c98eaa9bb445a3aa4f9
+AAD = b9cb3e1a5bcccb0b0599414c9822275b66fa0f913d51bdb0a2228cbb5aad0e0a
+Tag = 727d8f5e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 39cdbb24bd273a3fe96f42ca9d
+AAD = ddfe6c22f4cdc3128050072005f5bd4ecdef1d836e891683f1ba921d33fafba7
+Tag = 5aa56a54
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = db113f38f0504615c5c9347c3d
+AAD = 3b71bc84e48c6dadf6ead14621d22468a3d4c9c103ac96970269730bcfce239b
+Tag = c38fbdff
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = d16a20ef5f6587f1ee3cb7850b
+AAD = b1133e1cd369617a9f937e9a1eb86a0979ee30b5b7b0b6ff838d9e11301d6b72
+Tag = 6be30c42
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = d35f531f714694b5e49303a980
+AAD = 55b791ee495299916ff3c2327b4990952bebd0a2da9acfc553c6c996e354a4b5
+Tag = d34e90bb
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088
+IV = 220624db34a022b758473994a2
+AAD = 5b3b2ae87b0d6759f38a858423227f8687f35478a8f565409b741eadcac4d8c4
+Tag = 4a5d14bc
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = a544218dadd3c10583db49cf39
+AAD = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907
+Tag = 867b0d87cf6e0f718200a97b4f6d5ad5
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = e8de970f6ee8e80ede933581b5
+AAD = 89f8b068d34f56bc49d839d8e47b347e6dae737b903b278632447e6c0485d26a
+Tag = 677a040d46ee3f2b7838273bdad14f16
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 6de75d3c05e83755083399a5f7
+AAD = 504b08cf34cbe17acf631ef219ae01437ebb6a980ab2f00121bb3073701b6511
+Tag = f650d46ade2cbabbc68ead6df1ea0c37
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 58d43b9f1581c590daab1a5c56
+AAD = 749f149ef306c70a5d006d9777adbbf7c0de453898c2978ef7c281535ea9b24c
+Tag = 11b8fe8c139ee38f77fd8fa552cbff67
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = dfdcbdff329f7af70731d8e276
+AAD = 2ae56ddde2876d70b3b34eda8c2b1d096c836d5225d53ec460b724b6e16aa5a3
+Tag = ad879c64425e6c1ec4841bbb0f99aa8b
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 199ec321d1d24d5408076912d6
+AAD = a77526f3614cd974498a76d8b3cb7bacc623fdc9c85503289c462df888b199ed
+Tag = 3c64f8731930ae000162c10654531066
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 60f2490ba0c658848859fcbea8
+AAD = 3ad743283064929bf4fe4e0807f710f5e6a273e22614c728c3280a27b6c614a0
+Tag = e2751f153fc76c0dec5e0cf2d30c1a28
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 6f29ca274190400720bba27651
+AAD = c0850aaf141bd3f1b24f4d882590f58682b41f874748f29f8925b4914f444842
+Tag = 76127bf891141e73854752ed10c02bd0
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = f1dfb6fdb31cb423226f181c09
+AAD = ac6b08900fc1c9463e7dfdb60eee444c4989d7b200e675f3220ba1e14eed0ab4
+Tag = 4bd833f9da0496e5f6a08a05d02df385
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 0d45226c98eaa9bb445a3aa4f9
+AAD = b9cb3e1a5bcccb0b0599414c9822275b66fa0f913d51bdb0a2228cbb5aad0e0a
+Tag = 05f166328a67a8c58b10a7348f3df612
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 39cdbb24bd273a3fe96f42ca9d
+AAD = ddfe6c22f4cdc3128050072005f5bd4ecdef1d836e891683f1ba921d33fafba7
+Tag = 42499bcd949a5163855a9794f11f917e
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = db113f38f0504615c5c9347c3d
+AAD = 3b71bc84e48c6dadf6ead14621d22468a3d4c9c103ac96970269730bcfce239b
+Tag = fc85464a81fe372c12c9e4f0f3bf9c37
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = d16a20ef5f6587f1ee3cb7850b
+AAD = b1133e1cd369617a9f937e9a1eb86a0979ee30b5b7b0b6ff838d9e11301d6b72
+Tag = 8c7501f423647dee77668858c5e350bb
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = d35f531f714694b5e49303a980
+AAD = 55b791ee495299916ff3c2327b4990952bebd0a2da9acfc553c6c996e354a4b5
+Tag = b1c09b093788da19e33c5a6e82ed9627
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 220624db34a022b758473994a2
+AAD = 5b3b2ae87b0d6759f38a858423227f8687f35478a8f565409b741eadcac4d8c4
+Tag = d2231ee1455b0bc337c4f8173fb8647c
+Plaintext =
+Ciphertext =
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = a544218dadd3c1
+AAD = d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab
+Tag = 3ebc7720
+Plaintext = 78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3
+Ciphertext = c2fe12658139f5d0dd22cadf2e901695b579302a72fc5608
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 6ba004fd176791
+AAD = 5a053b2a1bb87e85d56527bfcdcd3ecafb991bb10e4c862bb0751c700a29f54b
+Tag = c44db2c9
+Plaintext = 78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3
+Ciphertext = 94748ba81229e53c38583a8564b23ebbafc6f6efdf4c2a81
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 45c5c284836414
+AAD = 8f01a61eb17366d4e70942ab69b4f4bcf8ff6a97f5972ee5780a264c9dcf7d93
+Tag = 83a09067
+Plaintext = 78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3
+Ciphertext = 1d670ccf3e9ba59186c48da2e5bd0ab21973eee2ea2985bf
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = c69f7679c80546
+AAD = 5d6c04a5b422b46065a79a889e30ac8d1b53b65d230d4c88190903a24e1fe1ea
+Tag = 392ae25d
+Plaintext = 78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3
+Ciphertext = 2c8c80ff10fac1bf6c9c83533c1514ee032c0983730b0657
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 57b940550a383b
+AAD = 33c2c3a57bf8393b126982c96d87daeacd5eadad1519073ad8c84cb9b760296f
+Tag = 3b91ff03
+Plaintext = 6fb5ce32a851676753ba3523edc5ca82af1843ffc08f1ef0
+Ciphertext = e1b4ec4279bb62902c12521e6b874171695c5da46c647cc0
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 11edd12ea5873d
+AAD = e32e5384038379e2b7382ba337b6f7a72a1569e110ee89c4dd6aa6f7e69f5250
+Tag = 64b837fb
+Plaintext = 6fb5ce32a851676753ba3523edc5ca82af1843ffc08f1ef0
+Ciphertext = b5dda89fe879d6a665b99285b6d937fd5877ebef4de049fb
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = f32222e9eec4bd
+AAD = 684595e36eda1db5f586941c9f34c9f8d477970d5ccc14632d1f0cec8190ae68
+Tag = 2a4e56a7
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = 224db21beb8cd0069007660e783c3f85706b014128368aab
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = e0a0a7f262cb51
+AAD = 1d93b2856ad2bf3700440f9a281bd8947ba209e9ffd18e69921ed0678c957c6c
+Tag = e960a769
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = ba1ce3a799e1173178b6788723005566f9269d5828c85d28
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 40316e7b38bdad
+AAD = 6e49acd9c26944740c778e74b1dbaa8d640c7e18e949a1661f8a77543db69e1f
+Tag = ed14a5a5
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = 79d59e4bb251988c019c4eaaee2a2513f9cb0521334018fd
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 33008ef5baf263
+AAD = a726f31d9a22bfc0e7e4c3111b0d304e106ab04ed318f8bfe6ec9cb3a811285b
+Tag = d7d6c61d
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = af4350795f24087aa05070d6d5f55ebb12d7ad3141066866
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = b48a16fb9a065d
+AAD = be05e9c934c1dcba45223d47c6646a2d13c3b93265e354ae4970484b5101d809
+Tag = d0605b84
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = 22d2da531be1f0d1da4bc21f984d29bf56bed2e92da6bf42
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 14c9bd561c47c1
+AAD = 141ae365f8e65ab9196c4e8cd4e62189b304d67de38f2117e84ec0ec8f260ebd
+Tag = 8f9d6814
+Plaintext = c22524a1ea444be3412b0d773d4ea2ff0af4c1ad2383cba8
+Ciphertext = 61b46c9024eed3989064a52df90349c18e14e4b552779d3f
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 5fb871eac2e52a
+AAD = ff23906e9067da8999842318f2a867759ca2d171395c2ff31fa5a4e2ab349c45
+Tag = d930f5ce
+Plaintext = c22524a1ea444be3412b0d773d4ea2ff0af4c1ad2383cba8
+Ciphertext = 539799c2b22a33dd648fc4497d12f9455beaf932f1eaaff4
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 1ccec9923aa6e8
+AAD = 88a6d037009a1c1756f72bb4589d6d940bd514ed55386baefacc6ac3ca6f8795
+Tag = 0d83fa19
+Plaintext = 518a7fb11c463bf23798982118f3cfe4d7ddde9184f37d4f
+Ciphertext = 52f8205534447d722be2b9377f7395938cc88af081a11ccb
+
+Cipher = aes-256-ccm
+Key = 8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a
+IV = 68a5351e4422c8
+AAD = 303c767468f48ac9f6e331bbad535b06aa00ab593327320799e17eff63afd3fe
+Tag = f243e273
+Plaintext = 518a7fb11c463bf23798982118f3cfe4d7ddde9184f37d4f
+Ciphertext = d11c892ae155098f5e4b5fe60c7afd74fb2dbcc4db956556
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = a544218dadd3c1
+AAD = d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab
+Tag = 1ac68bd42f5ec7fa7e068cc0ecd79c2a
+Plaintext = 78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3
+Ciphertext = 3341168eb8c48468c414347fb08f71d2086f7c2d1bd581ce
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 6ba004fd176791
+AAD = 5a053b2a1bb87e85d56527bfcdcd3ecafb991bb10e4c862bb0751c700a29f54b
+Tag = 47c3338a2400809e739b63ba8227d2f9
+Plaintext = 78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3
+Ciphertext = d543acda712b898cbb27b8f598b2e4438ce587a836e27851
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 45c5c284836414
+AAD = 8f01a61eb17366d4e70942ab69b4f4bcf8ff6a97f5972ee5780a264c9dcf7d93
+Tag = 46288ce9dd1c7088c752e35947fdca98
+Plaintext = 78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3
+Ciphertext = 39a8af5c976b995ea8049e55b68bc65503592ab009156386
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = c69f7679c80546
+AAD = 5d6c04a5b422b46065a79a889e30ac8d1b53b65d230d4c88190903a24e1fe1ea
+Tag = 7fd89caef9388fbb82361b8d53d9edc6
+Plaintext = 78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3
+Ciphertext = 950fbf6445f6ffb68178f52f5079d0c6081a48ae1f267a0b
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 57b940550a383b
+AAD = 33c2c3a57bf8393b126982c96d87daeacd5eadad1519073ad8c84cb9b760296f
+Tag = 4d8b30df941f3536ffb42083ef0e1c30
+Plaintext = 6fb5ce32a851676753ba3523edc5ca82af1843ffc08f1ef0
+Ciphertext = fbfed2c94f50ca10466da9903ef85833ad48ca00556e66d1
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 11edd12ea5873d
+AAD = e32e5384038379e2b7382ba337b6f7a72a1569e110ee89c4dd6aa6f7e69f5250
+Tag = 04cf3426e8f975125a7eed00e5f33b6c
+Plaintext = 6fb5ce32a851676753ba3523edc5ca82af1843ffc08f1ef0
+Ciphertext = 2ebfeb7a843618b37025352df3538526517ed320adfb486c
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = f32222e9eec4bd
+AAD = 684595e36eda1db5f586941c9f34c9f8d477970d5ccc14632d1f0cec8190ae68
+Tag = f78e9e5e9faa058112af57f4ac78db2c
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = dae13e6967c8b1ee0dd2d5ba1dd1de69f22c95da39528f9e
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = e0a0a7f262cb51
+AAD = 1d93b2856ad2bf3700440f9a281bd8947ba209e9ffd18e69921ed0678c957c6c
+Tag = 0c63959ce534a0f87fb42a9b000dec84
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = e683040a0bcf04c1748e7746400d6ef0f7cd8e77a2951779
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 40316e7b38bdad
+AAD = 6e49acd9c26944740c778e74b1dbaa8d640c7e18e949a1661f8a77543db69e1f
+Tag = 7d1a2111dc21aec79ef73193b306d31f
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = 829e50e8c09e727a58287e6eb7d38edeb8ab39db279c0639
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 33008ef5baf263
+AAD = a726f31d9a22bfc0e7e4c3111b0d304e106ab04ed318f8bfe6ec9cb3a811285b
+Tag = 7c516d2d1a8318893923f398ca249401
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = 873c91e76dca0062ae66325aefb84ece3e98928f8dbc5fee
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = b48a16fb9a065d
+AAD = be05e9c934c1dcba45223d47c6646a2d13c3b93265e354ae4970484b5101d809
+Tag = 8055e777bb57eb49497cd2e233ee06fd
+Plaintext = 2c29d4e2bb9294e90cb04ec697e663a1f7385a39f90c8ccf
+Ciphertext = 343f6c86f2b852ac388a096faec4472107a924aba56d0cb8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 14c9bd561c47c1
+AAD = 141ae365f8e65ab9196c4e8cd4e62189b304d67de38f2117e84ec0ec8f260ebd
+Tag = a1586bf922412e73ce338e372615c3bc
+Plaintext = c22524a1ea444be3412b0d773d4ea2ff0af4c1ad2383cba8
+Ciphertext = a654238fb8b05e293dba07f9d68d75a7f0fbf40fe20edaeb
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 5fb871eac2e52a
+AAD = ff23906e9067da8999842318f2a867759ca2d171395c2ff31fa5a4e2ab349c45
+Tag = 03538d108df6ecd6f39acfe076ba5fb8
+Plaintext = c22524a1ea444be3412b0d773d4ea2ff0af4c1ad2383cba8
+Ciphertext = 4846816923ed9f0254bdd0be01028f75061d3594ad3a45bd
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 1ccec9923aa6e8
+AAD = 88a6d037009a1c1756f72bb4589d6d940bd514ed55386baefacc6ac3ca6f8795
+Tag = 3e3f51ee37fdcc5d81dd85d9e9d4f44e
+Plaintext = 518a7fb11c463bf23798982118f3cfe4d7ddde9184f37d4f
+Ciphertext = 765067ef768908d91ee4c3923943e0c7be70e2e06db99a4b
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 68a5351e4422c8
+AAD = 303c767468f48ac9f6e331bbad535b06aa00ab593327320799e17eff63afd3fe
+Tag = d8a906488f79ad5d2234d72458dcfcd4
+Plaintext = 518a7fb11c463bf23798982118f3cfe4d7ddde9184f37d4f
+Ciphertext = e58ea6c1522e5a3e93a85edd05ae80d6cf5c4dd6d604a8f8
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = a544218dadd3c10583db49cf39
+AAD = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907
+Tag = ef891339
+Plaintext = e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3
+Ciphertext = c0ea400b599561e7905b99262b4565d5c3dc49fad84d7c69
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 8fa501c5dd9ac9b868144c9fa5
+AAD = 5bb40e3bb72b4509324a7edc852f72535f1f6283156e63f6959ffaf39dcde800
+Tag = 3d488623
+Plaintext = e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3
+Ciphertext = 60871e03ea0eb968536c99f926ea24ef43d41272ad9fb7f6
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 9bc0d1502a47e46350fe8667ca
+AAD = 07203674260208d5bd4d39506836f7e76ffc58e938799f21aff7bb4dea4410d2
+Tag = 527e5ed0
+Plaintext = e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3
+Ciphertext = 81d7859dcbe51dcc94fe2591cd3b0540003d49a8c4dccbf4
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 611cb4c66e88f6acf96fea1919
+AAD = 327ee3657e49d4d988362fabae303ccea6638e5cb45993d9d56269bc3d3af32b
+Tag = 4d20d5fa
+Plaintext = e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3
+Ciphertext = bef380ad725b65fb5fceeabf09c665bc35089f434ec83149
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 0dd613c0fe28e913c0edbb8404
+AAD = 2ad306575b577c2f61da7212ab63e3db3941f1f751f2356c7443531a90b9d141
+Tag = d2898c3b
+Plaintext = 9522fb1f1aa58493cba682d788186d902cfc93e80fd6b998
+Ciphertext = fabe11c9629e598228f5209f3dbcc641fe4b1a22cadb0821
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 68806dfe720d0a9a84697de5f2
+AAD = c6b0e4dfd723d7637510f887b7852f60ecdf72e0d33396560fed6534d5b7f015
+Tag = 41e92090
+Plaintext = 9522fb1f1aa58493cba682d788186d902cfc93e80fd6b998
+Ciphertext = b7eb87f84951640de731d4093f1a4ed5f831138a27465d39
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 3e0fe3427eeda80f02dda4fed5
+AAD = ae0d1c9c834d60ff0ecfb3c0d78c72ddb789e58adfc166c81d5fc6395b31ec33
+Tag = d18fc889
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = d88f8fcd772125212ce09c2a6e5b5693dd35073f992004f0
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 7c0c76d9f9316ff6c98758b464
+AAD = 31a0338c3839931fa1dd5131cb796c4c6cfde9fb336d8a80ac35dec463be7a94
+Tag = 0f39ecea
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = d2d7d52b11304fc1d15b8c20e296ba7c63d99f4ce86cc8ae
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 07c728135bdfede0e0c8036b17
+AAD = 25a152850b4b80b19d8f0b504b2a8a241824b3a1fca8d85c8713b2c0c84b5e02
+Tag = 94b1d516
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = ae1d9f82efb464d5dc2018cffa309634c09b34d1122c4bd9
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 710c96d7a6f09de83f0507f28a
+AAD = 2d64acfdbfc582cd9a933790eb1b739fb02e53f511255e49f421bb7acc98a130
+Tag = d394d047
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = 477c985d92ad1b69d22315235a29e3d3a5991487cbdc8d11
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 977bbcdeb6a7d9dcf8664bc2d8
+AAD = 135786125258a49475338ac1961d2718433b9e84cf64f63ca52913e8dd12e505
+Tag = bd3d22eb
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = d1c085c75d808dc6db493b8a0b4d884e0700d2844a1b4b46
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 60122cbd219e5cf17415e8bc09
+AAD = 895a45ddbe0c80793eccbf820de13a233b6aa7045cfd5313388e7184c392b216
+Tag = 1c0d067c
+Plaintext = 794e734966e6d0001699aec3f8ab8f194de7653d3091b1b9
+Ciphertext = 76bdd9a7b34bf14ae121a87fdfa144f71b848744af6a2f0b
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 83a07f2e685959cb50a1bd2bce
+AAD = 02afe300ec0cf0acb59108b2f70e069300294e34f40bb032cb59907599664408
+Tag = 74192744
+Plaintext = 794e734966e6d0001699aec3f8ab8f194de7653d3091b1b9
+Ciphertext = 413e2e8df9d65b4e5d3b63a738258aaee643f364be9a01b9
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 3542fbe0f59a6d5f3abf619b7d
+AAD = dd4531f158a2fa3bc8a339f770595048f4a42bc1b03f2e824efc6ba4985119d8
+Tag = 79018ad5
+Plaintext = c5b3d71312ea14f2f8fae5bd1a453192b6604a45db75c5ed
+Ciphertext = 617d8036e2039d516709062379e0550cbd71ebb90fea967c
+
+Cipher = aes-256-ccm
+Key = 705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe
+IV = 48f2d4c0b17072e0a9c300d90b
+AAD = c56175e2cfe0d37454d989afcc36686fb34c015439601567506a4d0003182be7
+Tag = 5c916f91
+Plaintext = c5b3d71312ea14f2f8fae5bd1a453192b6604a45db75c5ed
+Ciphertext = 40e609c739e409750a6c41d9c6ea64ce36f70711b4ca3e36
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = a544218dadd3c10583db49cf39
+AAD = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907
+Tag = 367f30f2eaad8c063ca50795acd90203
+Plaintext = e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3
+Ciphertext = 8d34cdca37ce77be68f65baf3382e31efa693e63f914a781
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 8fa501c5dd9ac9b868144c9fa5
+AAD = 5bb40e3bb72b4509324a7edc852f72535f1f6283156e63f6959ffaf39dcde800
+Tag = 4b41096dfdbe9cc1ab610f8f3e038d16
+Plaintext = e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3
+Ciphertext = 516c0095cc3d85fd55e48da17c592e0c7014b9daafb82bdc
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 9bc0d1502a47e46350fe8667ca
+AAD = 07203674260208d5bd4d39506836f7e76ffc58e938799f21aff7bb4dea4410d2
+Tag = d81ec96df41b8fa8262ed2db880b5e85
+Plaintext = e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3
+Ciphertext = 0293eae9f8d8bd7ad45357f733fc7b5d990d894783e18501
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 611cb4c66e88f6acf96fea1919
+AAD = 327ee3657e49d4d988362fabae303ccea6638e5cb45993d9d56269bc3d3af32b
+Tag = 6ee80f60f72db2cbf25b2f8c6af8749c
+Plaintext = e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3
+Ciphertext = 256bad8295e67d8d450f5ecc8276920ec23b1156c57be7c9
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 0dd613c0fe28e913c0edbb8404
+AAD = 2ad306575b577c2f61da7212ab63e3db3941f1f751f2356c7443531a90b9d141
+Tag = 945ee6db24aea5f5098952f1203339ce
+Plaintext = 9522fb1f1aa58493cba682d788186d902cfc93e80fd6b998
+Ciphertext = 6df09613ea986c2d91a57a45a0942cbf20e0dfca12fbda8c
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 68806dfe720d0a9a84697de5f2
+AAD = c6b0e4dfd723d7637510f887b7852f60ecdf72e0d33396560fed6534d5b7f015
+Tag = 2cc4c90ac3f798957cb09a05868a8ad5
+Plaintext = 9522fb1f1aa58493cba682d788186d902cfc93e80fd6b998
+Ciphertext = c5b64577d3c34e50f7da5072db5bda1d1d2c6db1a4f1183e
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 3e0fe3427eeda80f02dda4fed5
+AAD = ae0d1c9c834d60ff0ecfb3c0d78c72ddb789e58adfc166c81d5fc6395b31ec33
+Tag = 6b1556631d3b52bf24154afec1448ef6
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = 2bfe51f1f43b982d47f76ea8206ddbf585d6f30cec0d4ef1
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 7c0c76d9f9316ff6c98758b464
+AAD = 31a0338c3839931fa1dd5131cb796c4c6cfde9fb336d8a80ac35dec463be7a94
+Tag = 14f42ec81e3af71c9a5de7e0ac16ca69
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = 1622ae109073f44a4596722d9943fea774dfc2a1f939fc09
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 07c728135bdfede0e0c8036b17
+AAD = 25a152850b4b80b19d8f0b504b2a8a241824b3a1fca8d85c8713b2c0c84b5e02
+Tag = 43d67d90850c4c76a43df1f95170b29b
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = 4c0b361a766d366d983c41e793d75635e17f6eab2eadcf97
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 710c96d7a6f09de83f0507f28a
+AAD = 2d64acfdbfc582cd9a933790eb1b739fb02e53f511255e49f421bb7acc98a130
+Tag = 7bd5d5c8c098299394333b34fae9a110
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = 5b02347f30213df7f1506d7dca41b838c92aea0f190c5dba
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 977bbcdeb6a7d9dcf8664bc2d8
+AAD = 135786125258a49475338ac1961d2718433b9e84cf64f63ca52913e8dd12e505
+Tag = e26149d4a9711be81b4f69aa9fabd7f6
+Plaintext = 38333ce78110bf53a2c2abc7db99e133ad218ca43ff7a7bc
+Ciphertext = c77283ca15484d82469ce7249d1fb8e5f4c3bc8245fb4d97
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 60122cbd219e5cf17415e8bc09
+AAD = 895a45ddbe0c80793eccbf820de13a233b6aa7045cfd5313388e7184c392b216
+Tag = e47d00f2eebb544e6ba7559ac2f34edb
+Plaintext = 794e734966e6d0001699aec3f8ab8f194de7653d3091b1b9
+Ciphertext = bf0d219bb50fcc1d51f654bb0fd8b44efa25aef39e2f11af
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 83a07f2e685959cb50a1bd2bce
+AAD = 02afe300ec0cf0acb59108b2f70e069300294e34f40bb032cb59907599664408
+Tag = 6fa3fddc87690a359fe55f8fa12ba749
+Plaintext = 794e734966e6d0001699aec3f8ab8f194de7653d3091b1b9
+Ciphertext = 1609f8de59da4f50ce034977d132d4f9881a9b85ffa5bb88
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+Cipher = aes-256-ccm
+Key = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+IV = 3542fbe0f59a6d5f3abf619b7d
+AAD = dd4531f158a2fa3bc8a339f770595048f4a42bc1b03f2e824efc6ba4985119d8
+Tag = 567a6b4426f1667136bed4a5e32a2bc1
+Plaintext = c5b3d71312ea14f2f8fae5bd1a453192b6604a45db75c5ed
+Ciphertext = 39c2e8f6edfe663b90963b98eb79e2d4f7f28a5053ae8881
+
+
+Title = NIST CCM 128 Variable Associated Data Tests
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = 1123301219c70599b7c373ad4b3ad67b
+Plaintext = 7c86135ed9c2a515aaae0e9a208133897269220f30870006
+Ciphertext = 1faeb0ee2ca2cd52f0aa3966578344f24e69b742c4ab37ab
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = b77a140819f39ef045103e785e1df8c2
+Plaintext = 48df73208cdc63d716752df7794807b1b2a80794a2433455
+Ciphertext = 2bf7d09079bc0b904c711a0b0e4a70ca8ea892d9566f03f8
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = 4b01098842a618390619b86e00850b2e
+Plaintext = b99de8168e8c13ea4aef66bdb93133dff5d57e9837ff6ccb
+Ciphertext = dab54ba67bec7bad10eb5141ce3344a4c9d5ebd5c3d35b66
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = 8bd518724ab84fb814fe7b5570769f7f
+Plaintext = 09fc21ac4a1f43de29621cacf3ad84e055c6b220721af7ce
+Ciphertext = 6ad4821cbf7f2b9973662b5084aff39b69c6276d8636c063
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = 7229cbcecef221570cee8345b38cd6ec
+Plaintext = cb43320d7488dfd6eed9efd88f440ea3f6f77a0df09d0727
+Ciphertext = a86b91bd81e8b791b4ddd824f84679d8caf7ef4004b1308a
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = fee47fec27d7764e5e2819c850088bac
+Plaintext = a350ed58c04473e113b9088b1fb9dad92807f6b63b0d690c
+Ciphertext = c0784ee835241ba649bd3f7768bbada2140763fbcf215ea1
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = 54d610bc1ab4bc9a8a28c7306f7c539e
+Plaintext = 0709e691faf41383fab5d1848a8eee77101d1c99e526a264
+Ciphertext = 642145210f947bc4a0b1e678fd8c990c2c1d89d4110a95c9
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = 2e31657ecc51f5ec8590482fc053230d
+Plaintext = e7b913c2f0630562eb1c16b3b1ed84090c011a15c09e5471
+Ciphertext = 8491b07205036d25b118214fc6eff37230018f5834b263dc
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = d500827f2081b00397102f90fc9ccd88
+Plaintext = 6b909697074900d41ce8c7d559b229af11fb3cec334784d4
+Ciphertext = 08b83527f229689346ecf0292eb05ed42dfba9a1c76bb379
+
+Cipher = aes-128-ccm
+Key = d24a3d3dde8c84830280cb87abad0bb3
+IV = f1100035bb24a8d26004e0e24b
+AAD =
+Tag = e2e7997803029476598c0e8d4fc63857
+Plaintext = 495ff03335bcb39a317b9ea3f8bb6306fa771f3c55adebce
+Ciphertext = 2a775383c0dcdbdd6b7fa95f8fb9147dc6778a71a181dc63
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = dd
+Tag = d16b6282283e16602331bcca9d51ce76
+Plaintext = 1b156d7e2bf7c9a25ad91cff7b0b02161cb78ff9162286b0
+Ciphertext = e8b80af4960d5417c15726406e345c5c46831192b03432ee
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = c5
+Tag = 08ebeed45f67ef8733737c9c6f82daad
+Plaintext = 032fee9dbffccc751e6a1ee6d07bb218b3a7ec6bf5740ead
+Ciphertext = f0828917020651c085e42459c544ec52e99372005362baf3
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = 68
+Tag = f9b477e3a23bfdfdb619c7bc531fbcce
+Plaintext = 9c4cd65b92070bc382fd18146611defb4204acddfdf6b276
+Ciphertext = 6fe1b1d12ffd9676197322ab732e80b1183032b65be00628
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = be
+Tag = aa82130f5a86c0cd0433585e5c208cf7
+Plaintext = 2ff93ef2fc5fe2c297ace05f3f7585aed75ef90ade3acf89
+Ciphertext = dc54597841a57f770c22dae02a4adbe48d6a6761782c7bd7
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = 7a
+Tag = 9d60012a2f25463e036ceecea57b3c97
+Plaintext = 62766e9acd41285eeed9b4007340dbb611699624274ad117
+Ciphertext = 91db091070bbb5eb75578ebf667f85fc4b5d084f815c6549
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = 13
+Tag = e337897c90eb260729a729aed1c8a244
+Plaintext = ea689c268a04912d0527b16d9d9406df38302fb11cb64a99
+Ciphertext = 19c5fbac37fe0c989ea98bd288ab58956204b1dabaa0fec7
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = e5
+Tag = 73dc2911c75b37cd995481d42b04524a
+Plaintext = f31e35953beb211efcce487ba8c0cd1a8446343d5851b9fd
+Ciphertext = 00b3521f8611bcab674072c4bdff9350de72aa56fe470da3
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = e3
+Tag = 84f76ecf3dc5f3307ce982f185321248
+Plaintext = c4ac3c645387584c2a95b1f16b8317730592924dd831a388
+Ciphertext = 37015beeee7dc5f9b11b8b4e7ebc49395fa60c267e2717d6
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = d5
+Tag = 2c38d0fe4e4eba054c1420c39a3dcc61
+Plaintext = 81af394c2ea3a85e1ea954596e3772f01635d007794c0b19
+Ciphertext = 72025ec6935935eb85276ee67b082cba4c014e6cdf5abf47
+
+Cipher = aes-128-ccm
+Key = 08b0da255d2083808a1b4d367090bacc
+IV = 777828b13679a9e2ca89568233
+AAD = ed
+Tag = 7cfa6c9945f5aee3c799eee37b0605db
+Plaintext = e013a2edd5b86bab8df5c9940d0a0c864478c1ad42668304
+Ciphertext = 13bec5676842f61e167bf32b183552cc1e4c5fc6e470375a
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = c93c
+Tag = 3ca01d874439b4e1f79a26d8c6dc433a
+Plaintext = e7b819a853ffe79baaa72097ff0d04f02640ae62bcfd3da5
+Ciphertext = 1d8f42f9730424fa27240bd6277f4882604f440324b11b00
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = 4cf9
+Tag = b40653cd23afc7cc7a31fa13ba8f4e49
+Plaintext = dc6cf325ed6d968efba9f57e48a58f4578cc3540fe121ba2
+Ciphertext = 265ba874cd9655ef762ade3f90d7c3373ec3df21665e3d07
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = b469
+Tag = c8c10aaf90b1116be216f912c82ca96a
+Plaintext = 22ab6a0daf953165dda864cceeeb782e275c0b072aedd284
+Ciphertext = d89c315c8f6ef204502b4f8d3699345c6153e166b2a1f421
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = cf6b
+Tag = 2f568ef41324189fb3644edcd76dc19c
+Plaintext = a35f62a431fee63468dc02fdf7bef78d3a5937de56151939
+Ciphertext = 596839f511052555e55f29bc2fccbbff7c56ddbfce593f9c
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = af7c
+Tag = 2548c244a875d3681d715db3da19962f
+Plaintext = 548840cb0400824af809fb68447500b77e977128200d3b81
+Ciphertext = aebf1b9a24fb412b758ad0299c074cc538989b49b8411d24
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = 61dc
+Tag = b599bc8927ad8d43067807f4b858f854
+Plaintext = 440b6095c77495e73fff54c785b7ceb5eb358731c213ffcd
+Ciphertext = be3c3bc4e78f5686b27c7f865dc582c7ad3a6d505a5fd968
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = b97e
+Tag = 7454774ee78f76e555cf743df340381e
+Plaintext = 50c59ca54eb64575b82b13c6dac96488af369e9f5f86cdf2
+Ciphertext = aaf2c7f46e4d861435a8388702bb28fae93974fec7caeb57
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = 57ab
+Tag = e0a22a5ee031978271c7dd2a0d4e7018
+Plaintext = 21b8eb1f0bda26ca36167ce7bc2e796818bf11fc8c192885
+Ciphertext = db8fb04e2b21e5abbb9557a6645c351a5eb0fb9d14550e20
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = 5f9c
+Tag = 9a242ebae5c6da57ee38e5c227c46b32
+Plaintext = b4d84fb1e81e18c89391a7a59fc05fedaf160e0d0d027a7c
+Ciphertext = 4eef14e0c8e5dba91e128ce447b2139fe919e46c954e5cd9
+
+Cipher = aes-128-ccm
+Key = 1538cc03b60880bf3e7d388e29f27739
+IV = 9e734de325026b5d7128193973
+AAD = e0c4
+Tag = a5f8a92f4201c4658289307167cee810
+Plaintext = 54dc5a0e1b67577cda4e7dbd48b769c120c1d13dd567cfad
+Ciphertext = aeeb015f3b9c941d57cd56fc90c525b366ce3b5c4d2be908
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = f5827e
+Tag = 78e2a23411147a6187da6818506232ee
+Plaintext = 9759e6f21f5a588010f57e6d6eae178d8b20ab59cda66f42
+Ciphertext = f634bf00f1f9f1f93f41049d7f3797b05e805f0b14850f4e
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = e9699b
+Tag = f10835db9897b7528e3204fe3a81424f
+Plaintext = 1555bc87d6c688fd221a2c75cd1e4dd1c1693207ac421d24
+Ciphertext = 7438e575386521840dae5685dc87cdec14c9c65575617d28
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = 972896
+Tag = 3efa05ba4a73ec2234461d459f54acd2
+Plaintext = b72b2a080d92f3f3bb7d96222982de82a28c9eebaddba247
+Ciphertext = d64673fae3315a8a94c9ecd2381b5ebf772c6ab974f8c24b
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = 3053f3
+Tag = b557537c6525e827750917a1ed49602f
+Plaintext = b5417ed6933ffe2b57ea601d77e97eb12fa1fb8fdc06c86f
+Ciphertext = d42c27247d9c5752785e1aed6670fe8cfa010fdd0525a863
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = 24db75
+Tag = dfd06b037e9094f120eb3d8649d48918
+Plaintext = 4e7f42666035a00e62783283c54b027603917685d27326bc
+Ciphertext = 2f121b948e9609774dcc4873d4d2824bd63182d70b5046b0
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = ff27a4
+Tag = bfa8cfabbd79b3e3210482e6f3822fee
+Plaintext = 7bf180699c294421ad9565cacc27227a4b3a7cf9637290c6
+Ciphertext = 1a9cd99b728aed5882211f3addbea2479e9a88abba51f0ca
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = 77ec24
+Tag = 3b9575e347051e98d0c8646ad46318e6
+Plaintext = 3d47071c13f994cb42fb2887e5c6e53a542be7ddad9779e0
+Ciphertext = 5c2a5eeefd5a3db26d4f5277f45f6507818b138f74b419ec
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = 6d7748
+Tag = 78e7af65eb0388ae7a52f58f6ba32109
+Plaintext = 317d5da0a2ec12c3b96c83dd61cc955242a9c1c640e2b92f
+Ciphertext = 501004524c4fbbba96d8f92d7055156f9709359499c1d923
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = 029674
+Tag = 8019fa97ff70d4d21c0bd83caa434b3a
+Plaintext = c9bb21306ee1b4a6c4fa5443af2e181716993cbb374e177c
+Ciphertext = a8d678c280421ddfeb4e2eb3beb7982ac339c8e9ee6d7770
+
+Cipher = aes-128-ccm
+Key = f149e41d848f59276cfddd743bafa9a9
+IV = 14b756d66fc51134e203d1c6f9
+AAD = 60dfe8
+Tag = 1814ed48a21d97ea02e86d7e6e8834cb
+Plaintext = 44eb7edd6bee501ad97873aa7ecbf7ed8b613760d7c95e15
+Ciphertext = 2586272f854df963f6cc095a6f5277d05ec1c3320eea3e19
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = a95bdff6
+Tag = 9b6443a35f329b2068916fb6ab8227eb
+Plaintext = 035c516776c706a7dd5f181fa6aa891b04dd423042ea0667
+Ciphertext = b92f7ec2ebecebdbd2977b3874e61bf496a382153b2529fc
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = d2672cbb
+Tag = 19e2aa492ce9ddfb6de0ab7a447f5351
+Plaintext = 3ba306bcec94615c347f990b62841a16df7b321f113f1714
+Ciphertext = 81d0291971bf8c203bb7fa2cb0c888f94d05f23a68f0388f
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = 737f4d00
+Tag = 2bf683b1209f104e82ba39f7c62cd666
+Plaintext = 68313a29ace3efe521c3ca1e5bac8e98d6b4434c80a7dc74
+Ciphertext = d242158c31c802992e0ba93989e01c7744ca8369f968f3ef
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = 3610b1ae
+Tag = 4fc7d5cac043f182edbe5c2658f73092
+Plaintext = 963bfe556138317bebe3936b18a2c1dd100dc73be6fde556
+Ciphertext = 2c48d1f0fc13dc07e42bf04ccaee53328273071e9f32cacd
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = f1aa7f72
+Tag = b8234f3fbaca3dc2c497418219151b05
+Plaintext = 52d5c53ee4f23cb050a95db54112b44033c34ac31de96be8
+Ciphertext = e8a6ea9b79d9d1cc5f613e92935e26afa1bd8ae664264473
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = 6b1013aa
+Tag = 8fa5f9539e0500f139016e4a4337d86b
+Plaintext = a302aebc0f8fd61badc8371991beacf5933de46effacb8ce
+Ciphertext = 1971811992a43b67a200543e43f23e1a0143244b86639755
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = 33028129
+Tag = fa2379fde155e64b5b84e336056445c3
+Plaintext = f7d653c23254875625b20e1ef60ae92847046d84bb4ce857
+Ciphertext = 4da57c67af7f6a2a2a7a6d3924467bc7d57aada1c283c7cc
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = 2cab4a09
+Tag = 58208335cb81e4fb10923fca4ddb9ff9
+Plaintext = 872a3f7230e626abff519e5aeecc93897249405daeaffc98
+Ciphertext = 3d5910d7adcdcbd7f099fd7d3c800166e0378078d760d303
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = 73142ba7
+Tag = 2d6ecfb49ac8983415503efef1e21950
+Plaintext = 766f94e7d9b1ce74bbaf2c99d215350f060122767fc1953f
+Ciphertext = cc1cbb42449a2308b4674fbe0059a7e0947fe253060ebaa4
+
+Cipher = aes-128-ccm
+Key = 9a57a22c7f26feff8ca6cceff214e4c2
+IV = 88f30fd2b04fb8ddbce8fc26e6
+AAD = bc9f967e
+Tag = 1978a62d15430fc20b87940292b49641
+Plaintext = 5f089ed9267363bc23c6c7b8f73208a36f61fa8ea8084ff7
+Ciphertext = e57bb17cbb588ec02c0ea49f257e9a4cfd1f3aabd1c7606c
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = 5f476348dd
+Tag = 4e5a32fbe7961b832b722bc07a18595b
+Plaintext = c69f7c5a50f3e72123371bbfd6bdf532b99ef78500508dfe
+Ciphertext = 20c43ad83610880249f1632dd418ec9a5ed333b50e996d1a
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = 07db8aada5
+Tag = 401a2222443696021b5faa520129b563
+Plaintext = 9cf8b638f2b295b85cf782fabab11153dc091b4afcd761a9
+Ciphertext = 7aa3f0ba9451fa9b3631fa68b81408fb3b44df7af21e814d
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = 31ef6561ff
+Tag = f842681d2e90da5718234ed893197662
+Plaintext = 62b8263dc015ef873cd16272e4da89799b910f2b04204420
+Ciphertext = 84e360bfa6f680a456171ae0e67f90d17cdccb1b0ae9a4c4
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = e97dfcbafb
+Tag = 33a08eb30ee154f71279682ab02eff27
+Plaintext = 810bed3a2bc0f9d75389155b7a39d9d014c08646814f9718
+Ciphertext = 6750abb84d2396f4394f6dc9789cc078f38d42768f8677fc
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = 4981c51fcc
+Tag = 8d3071c79f0cf86fe4148cb5e8ace0ce
+Plaintext = 063d23fc3ec344c1ba3486802e01e55617455d5cfbfb5279
+Ciphertext = e066657e58202be2d0f2fe122ca4fcfef008996cf532b29d
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = c8437dba76
+Tag = 842700619dc1599603f3f3f6cfdf5e0b
+Plaintext = 41db5b245ea0fab985b93e7fc0a00cd3cca5bdbb642b7ebf
+Ciphertext = a7801da63843959aef7f46edc205157b2be8798b6ae29e5b
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = 6f65a24344
+Tag = 39a0cd8d8bbf211b907f34411f868c79
+Plaintext = b0e36734b2ba871d59df0b029c7f32af68e003a689ac4911
+Ciphertext = 56b821b6d459e83e331973909eda2b078fadc7968765a9f5
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = cd62d6d203
+Tag = c4a90e5fc11266bab77eea1d24fbdbb9
+Plaintext = 747e53e627eabde0cd77d78d1bd720bea518f8a2f76e57a2
+Ciphertext = 922515644109d2c3a7b1af1f1972391642553c92f9a7b746
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = 9663b3c8e6
+Tag = b3c1246f7dd6462ce757db82db45f36e
+Plaintext = c70c92ec4c518802662fa4c41a6a33a22599f79f8f7264b3
+Ciphertext = 2157d46e2ab2e7210ce9dc5618cf2a0ac2d433af81bb8457
+
+Cipher = aes-128-ccm
+Key = 54caf96ef6d448734700aadab50faf7a
+IV = a3803e752ae849c910d8da36af
+AAD = 35c4720d3c
+Tag = d472c06a5f4c04f97d06ec401d3e7fd9
+Plaintext = a26835605b66fc08abdbb5dc77e39783d60b8e8f2314e95f
+Ciphertext = 443373e23d85932bc11dcd4e75468e2b31464abf2ddd09bb
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = da853a27aee2
+Tag = 2e3ca4ec3c776ab58843f617d605fd72
+Plaintext = 15b369889699b6de1fa3ee73e5fe19814e46f129074c965b
+Ciphertext = f39755d160a64611368a8eccf6fcbc45ef7f1f56240eb19a
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = d4ed4584678e
+Tag = 327804c44c8f17a4446a3d5ba85f9c7f
+Plaintext = a18c0460b56a5bcd5bf6842cec6ed44d90b2bfa968a6a7e7
+Ciphertext = 47a838394355ab0272dfe493ff6c7189318b51d64be48026
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = 590a27721a36
+Tag = bcd00e9cb726d75e4283820ee81d933a
+Plaintext = 41cee0ecaf9c65cef740440af37954ef49a585779d2abbca
+Ciphertext = a7eadcb559a39501de6924b5e07bf12be89c6b08be689c0b
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = 58830fb0b1f3
+Tag = d5d71a1f0f1b6518c35f0632a30931fd
+Plaintext = dce983e4e3734a9bd8848dba0d744d07bbeba602f4006025
+Ciphertext = 3acdbfbd154cba54f1aded051e76e8c31ad2487dd74247e4
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = eedd0d767a25
+Tag = 3ad112899e9ba442660eb5dfe33b2f96
+Plaintext = 4653b3e879ab18b65c5c3706a5139698262cb830a22d943b
+Ciphertext = a0778fb18f94e879757557b9b611335c8715564f816fb3fa
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = 618bcf2e3e79
+Tag = 54fba446028919342b2fe86ee67efcc7
+Plaintext = 8586383281925363ac15fb19c26d64c639c75920c792dc2c
+Ciphertext = 63a2046b77ada3ac853c9ba6d16fc10298feb75fe4d0fbed
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = 549c9b84c7f7
+Tag = 9fc23013142f62881ccfa3037067e1ef
+Plaintext = 95c25ae4445cd8c4d267df82687484667e309992fcf1e737
+Ciphertext = 73e666bdb263280bfb4ebf3d7b7621a2df0977eddfb3c0f6
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = 92d7fa6a8135
+Tag = 8263568d56fae8bf35b2f2cdecbffe0a
+Plaintext = e58034bbb0e6f5e724e32ee56896dadae25c2a3efb8c6f2f
+Ciphertext = 03a408e246d905280dca4e5a7b947f1e4365c441d8ce48ee
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = f43e126c0f83
+Tag = de2c2fbfdddc7dd6672714af174c5121
+Plaintext = d98f0dddfe9cb3cae1336970d5efb55316a65e2c51e316f4
+Ciphertext = 3fab318408a34305c81a09cfc6ed1097b79fb05372a13135
+
+Cipher = aes-128-ccm
+Key = cc0c084d7de011e2f031616a302e7a31
+IV = f0b4522847f6f8336fe534a4e7
+AAD = f02074812dde
+Tag = 3704560ff23ce0000fba8812c45940ad
+Plaintext = 548747b1669c6383b793054d93957f9e99d605761c6c23b5
+Ciphertext = b2a37be890a3934c9eba65f28097da5a38efeb093f2e0474
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = 922340ec94861f
+Tag = fd541b988a801cb5751c7faaf5b0c164
+Plaintext = 1edef80c57d17f969f8bde10ab38a1a8811a124de72c526e
+Ciphertext = de14558cc686e1836f1f121ea1b941a9ebd4f0fb916dc870
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = 4eb379f21b1531
+Tag = c068bd1b1c309dfbd52d9a24be07c630
+Plaintext = ddd5282a207c1dcb03c1c3bbc9eb12a7bd28534118db2735
+Ciphertext = 1d1f85aab12b83def3550fb5c36af2a6d7e6b1f76e9abd2b
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = 7fa89e9d6e3fec
+Tag = 2d114d6ab082738d05d60acca8e8ccfb
+Plaintext = c5b7c462eb166f48bb59c8102ee7b3dc67a28e5de7570c51
+Ciphertext = 057d69e27a41f15d4bcd041e246653dd0d6c6ceb9116964f
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = fda8665f87c618
+Tag = 1cc84bd77fe00e1a13433f2c10e3b799
+Plaintext = af793815e147e3180f5146aa6a582e343dc479f26b4226b2
+Ciphertext = 6fb3959570107d0dffc58aa460d9ce35570a9b441d03bcac
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = 46bde207491ebd
+Tag = 990c81f1bae32c953bf02ddbde047632
+Plaintext = 47c76a0bbd5b1616b278089d41a050c509c7a1c280574bf7
+Ciphertext = 870dc78b2c0c880342ecc4934b21b0c463094374f616d1e9
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = a799f5f895fd7a
+Tag = 1af19f1f080dd1dd2da799059755e49f
+Plaintext = d554806ffc3900a0952a3c094c745808950697a6e5d62c1d
+Ciphertext = 159e2def6d6e9eb565bef00746f5b809ffc875109397b603
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = 20225831a9ee06
+Tag = 23d3b9a0060834ac4860dae0eac570ef
+Plaintext = ba45e1859efae362a44a0116a14e488ba369da6c76c3913b
+Ciphertext = 7a8f4c050fad7d7754decd18abcfa88ac9a738da00820b25
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = 785360916464eb
+Tag = ff96e7cf841a66c50bbb6fb2bac7ef51
+Plaintext = 57bc338946ff78cf76adf5021e2e44e34e687fb68ad703f3
+Ciphertext = 97769e09d7a8e6da8639390c14afa4e224a69d00fc9699ed
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = 57b946369226db
+Tag = 86e1c33a45f9d52755c374650635bef6
+Plaintext = 9ac5be9929c4fe5a9992749a38dc69874866db3d4747da97
+Ciphertext = 5a0f1319b893604f6906b894325d898622a8398b31064089
+
+Cipher = aes-128-ccm
+Key = d7572ed0e37261efa02f8c83e695efdc
+IV = f4f96d7b4384a3930b3d830f82
+AAD = 73e4da8973c1e3
+Tag = d78592c2d89c15edc5bb7486aa93f896
+Plaintext = 5a05410aa3a71f5f1a253b8576eba269c06a4c30591144cc
+Ciphertext = 9acfec8a32f0814aeab1f78b7c6a4268aaa4ae862f50ded2
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = 2d5438b728b950d9
+Tag = eecfff971fdfaa856310b014aa59c978
+Plaintext = 9aa9c8358117564371366beeec923051ef433252197aaad5
+Ciphertext = 9ff942baa60f440c17a78e9581216b9a947a67f04d54911f
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = 6e430b497a16e7f5
+Tag = 6a4d7b4b4df6c831ee32116ee4dad98c
+Plaintext = 5758a500978c71a9b90f6e5beae9d96ef05a41486b10ea2e
+Ciphertext = 52082f8fb09463e6df9e8b20875a82a58b6314ea3f3ed1e4
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = e12f98507d6514c3
+Tag = 3243fc75cd1624e152f451678edcac87
+Plaintext = 49efe18c76a8355127d914a3a830c1c6ff2a163d728526e1
+Ciphertext = 4cbf6b0351b0271e4148f1d8c5839a0d8413439f26ab1d2b
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = eecf8d641ee0bee9
+Tag = dd6d8ca57da1880e1baff43736b3da34
+Plaintext = 49ae2309fbe6ce4e9421516b8f79ae64b1316cb849eaf638
+Ciphertext = 4cfea986dcfedc01f2b0b410e2caf5afca08391a1dc4cdf2
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = 9066367c784de0a4
+Tag = f05439a661001513a96b896de46b7081
+Plaintext = b1bda5fa4242aa6aad0f5a5b1d31d86b8d4a97588b3e315d
+Ciphertext = b4ed2f75655ab825cb9ebf20708283a0f673c2fadf100a97
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = edf848b2510f7803
+Tag = cf20709b2dc2ff9946094190b5ea09d1
+Plaintext = eaa8608f6763d968576a7e89056b9828a1686c8441b06377
+Ciphertext = eff8ea00407bcb2731fb9bf268d8c3e3da513926159e58bd
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = 0f49cae81c8628d2
+Tag = a5bb6b4f87b9b198665203e4fdf9e7f7
+Plaintext = f32029cf51609f0df9832ad1b283ea94a5356f70112c1328
+Ciphertext = f670a34076788d429f12cfaadf30b15fde0c3ad2450228e2
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = b0c47e9cce46a276
+Tag = 29f416f89f1a34bbbf2ce40d943c6d8b
+Plaintext = 7a550ef9254a8da6e4fee290a76ea838ffb61d3533d4d31f
+Ciphertext = 7f05847602529fe9826f07ebcaddf3f3848f489767fae8d5
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = a6fe7c9ce2d49f85
+Tag = 7eb95550b91b955d5c2d72d5c189b704
+Plaintext = e67c486dd7ba9a9061844b9354f55890321ae626efaa28cc
+Ciphertext = e32cc2e2f0a288df0715aee83946035b4923b384bb841306
+
+Cipher = aes-128-ccm
+Key = 98a42d7a0c5917deaf3b4de3f0cbe0a1
+IV = 03d33ab0c2df7bfce88b5ee4c4
+AAD = eb1d11cc4876f58f
+Tag = 0e8e8a5a7e0ea6860bab4a4320f03ae5
+Plaintext = 35f2c810091e930a52e4a3f28c9c8184967f1554c2675eb5
+Ciphertext = 30a2429f2e06814534754689e12fda4fed4640f69649657f
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = abe4f1d3812bfe3ccf
+Tag = fd49840440f866d1a22b0854996111d8
+Plaintext = 13b4a874888db0e5d8fd814b5e7e04f7fdfbc1601ccc02bc
+Ciphertext = 032835a3dbf688d09cf2a32a92b101959d33ff47500f92f4
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = 2e21f466814d3d6340
+Tag = de2f5c335df537fbbc6ae59cd562732f
+Plaintext = 08b5c773364cded74d7b308984313c17ff90eed496a27a2b
+Ciphertext = 18295aa46537e6e2097412e848fe39759f58d0f3da61ea63
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = dba22aabcea0e694fc
+Tag = cc5ed6e4a907ff4742ab6c835a427f92
+Plaintext = bbac1790abb7aafe272ec472c897e6363e335b3c4126c762
+Ciphertext = ab308a47f8cc92cb6321e6130458e3545efb651b0de5572a
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = 97e9d16bd757395ec1
+Tag = 1714b5a3df454f3bc35869da75adc882
+Plaintext = 7249612dc09809bbca9dd311e720f7da2cb54ce33e3eb9c3
+Ciphertext = 62d5fcfa93e3318e8e92f1702beff2b84c7d72c472fd298b
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = 866cf710470cac74d3
+Tag = aa33dffe2596832f98a9c8413bd898b9
+Plaintext = 060ae0ab9857324a3b2ac79f3b6e6f90f5de884ce9c7b930
+Ciphertext = 16967d7ccb2c0a7f7f25e5fef7a16af29516b66ba5042978
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = 2dd7a7f832b29ccce2
+Tag = dd5049f7c53d6a7fe5d7f959689ee960
+Plaintext = f77a9fd5363836deefd34e1bea0882484a7ab746b4495d59
+Ciphertext = e7e6020265430eebabdc6c7a26c7872a2ab28961f88acd11
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = 502349a60e897356b5
+Tag = ed9c3a0d0de8788471c5f6c2f9638b7c
+Plaintext = 96118dbfe53434d8aed88769a535eb0c8b5849dca1c81c34
+Ciphertext = 868d1068b64f0cedead7a50869faee6eeb9077fbed0b8c7c
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = debed45c9acf129268
+Tag = d49b4b9bead1b7de2021cff280d6f93b
+Plaintext = df5a47d3eb5c0b6cabb6711a45400602d205b82ecae9e849
+Ciphertext = cfc6da04b8273359efb9537b898f0360b2cd8609862a7801
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = 2726702dd62a6e5344
+Tag = 69df31aba209d87ee22bd6a1dcadb168
+Plaintext = 5a7649cb001fbb6f653cbca17756c5c1a078c2e240d92085
+Ciphertext = 4aead41c5364835a21339ec0bb99c0a3c0b0fcc50c1ab0cd
+
+Cipher = aes-128-ccm
+Key = 2a68e3fe746f593c1b97cb637079c3e5
+IV = cd62d0f27b7f4864dc7c343acd
+AAD = e8006cfb0536696ac7
+Tag = 7cc5b60c881fe834a789d28447d8fb54
+Plaintext = 95186d41f927cdbef42157f21d966e88061b6558b5ec932f
+Ciphertext = 8584f096aa5cf58bb02e7593d1596bea66d35b7ff92f0367
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = 8d65880eddb9fd96d276
+Tag = 27ecdcb257d0d30491e5bf1aa8f90958
+Plaintext = cc0915194218d4536e467433cd6d79ff1d9eb9ff160ab684
+Ciphertext = bd56edc015692c6ab9bec493a9893863598414a3d11a6a0f
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = 8a65cde13149d9d54a5b
+Tag = b10f9fc201e4128696dcd899dd2e24ea
+Plaintext = 28257133b1d8b0b2be4faecd6e819ac783707a5c5f50c302
+Ciphertext = 597a89eae6a9488b69b71e6d0a65db5bc76ad70098401f89
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = e999ec3e1bfb25b5877c
+Tag = c522e5ba5adbc6a639cbd06f103ebc9e
+Plaintext = 96ab0cfc204bafc4f5851d6c682d631d0c5ad03ac925a943
+Ciphertext = e7f4f425773a57fd227dadcc0cc9228148407d660e3575c8
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = a8554441e073d6065dce
+Tag = e1a4e0f7ebc3cff3915d27971cce7e91
+Plaintext = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+Ciphertext = 21cda08aff3bcbc6eed9e44483d3ae5dc9d564d38a42e922
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = 838f0be8d04d28d77549
+Tag = c215c88d80bffc881aff10ba40f11976
+Plaintext = d0700658d5f4010ff21091f3d119c99645e339198029c3a9
+Ciphertext = a12ffe818285f93625e82153b5fd880a01f9944547391f22
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = 20f014d928d5b25fbaf4
+Tag = 2cc9391bc06aa6ca9d486a4e2a218c54
+Plaintext = 4bdf28748a0c281dd49c7294ae8e55fe7a52d45ff6384db3
+Ciphertext = 3a80d0addd7dd0240364c234ca6a14623e48790331289138
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = 56c026b8a71974ff7ecd
+Tag = 778b05c6c582a0bb7d1d9dcf6a46b9f6
+Plaintext = f75db057f0276fff85014f54ecdec8f90b96a2a982db14cb
+Ciphertext = 8602488ea75697c652f9fff4883a89654f8c0ff545cbc840
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = 75c3b9e52648a4f9aca9
+Tag = f47d9ebbd3cff14623b10cecc94b53d6
+Plaintext = c15c554169dbb9b08494afaa44819a10dc9ddad54199ab54
+Ciphertext = b003ad983eaa4189536c1f0a2065db8c98877789868977df
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = 1c76c3014a14b7fa1ca8
+Tag = d2b74b84dc170c00dce85b56e346a976
+Plaintext = 19eef6f798fc68086aad1cda6d7976cdcfe6b8af74598032
+Ciphertext = 68b10e2ecf8d9031bd55ac7a099d37518bfc15f3b3495cb9
+
+Cipher = aes-128-ccm
+Key = 46b067cf9b1a28cf187002e90b14e130
+IV = bad8c03292bf01cfd8d34f860c
+AAD = a4eb60d4eb7ead1bd0e6
+Tag = d92e19fd8b5c1fcbff36adaa5e47ae84
+Plaintext = e06e5dba5ac35cfd07949e5cc12ad70507d4a86a952ecca3
+Ciphertext = 9131a5630db2a4c4d06c2efca5ce969943ce0536523e1028
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = 537038b5357e358a930bd6
+Tag = 8790c1648f461a31c84e62ea8592a074
+Plaintext = 4d64461c55eb16bf7b9120f22be349598f2f394da8460dc6
+Ciphertext = e9fc5004c2359724e1e4411ae6f834ef6bea046d549753c8
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = 7e3d7b3eada988668f3784
+Tag = acb1d1c9231d2c22ecfeed622792dfd0
+Plaintext = eab7d5dbd91d4cbbac8d79fadd70b5dcb3baadac5cb713a3
+Ciphertext = 4e2fc3c34ec3cd2036f81812106bc86a577f908ca0664dad
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = 78b107b29c4878ff18f749
+Tag = fffe60299768f048e7098033cde046b0
+Plaintext = 3c6ae2e2578875a1f5611582528e058aece2ddc33a4dde3d
+Ciphertext = 98f2f4fac056f43a6f14746a9f95783c0827e0e3c69c8033
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = d293908bb516c5f3a411b9
+Tag = 4ee6ebc0d90a0de05b428495c93e1801
+Plaintext = d7a46e726ed43f1580eb52141a93390982cc809dc833e3f0
+Ciphertext = 733c786af90abe8e1a9e33fcd78844bf6609bdbd34e2bdfe
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = 33ef208faad4d2948c9e67
+Tag = 7e7e64cc0fcd6a92c79ceb6ce2abd8ee
+Plaintext = b1fe5d9d34157193fc0608cd8ecb872e17720f5f6814a466
+Ciphertext = 15664b85a3cbf0086673692543d0fa98f3b7327f94c5fa68
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = b7f7ed9ccac3c2b4fbfee0
+Tag = b02b53bc779e0976b634b0d1b88fc0a9
+Plaintext = de6bb539fb7a9c87414f62a7cf25a4cfca176509e991af41
+Ciphertext = 7af3a3216ca41d1cdb3a034f023ed9792ed258291540f14f
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = a6e287383927f76e4927af
+Tag = 3c37fa936243b393f07fcccb0fc13e41
+Plaintext = 8719d20c20c8959068b8adcd65e6f6bc7b3693828f0735a0
+Ciphertext = 2381c414b716140bf2cdcc25a8fd8b0a9ff3aea273d66bae
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = 70828be6dd93954f4e7b6b
+Tag = 0d7534a489e6d242966ebea4455f8f79
+Plaintext = 30b39426831f61c8ba5f2ef5b71f0c4b2f916e3b5a578110
+Ciphertext = 942b823e14c1e053202a4f1d7a0471fdcb54531ba686df1e
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = 506015fc2831df293f4da0
+Tag = ccbf64f04e95b180d09e843847d22104
+Plaintext = 818d5d810f678629f078723f5c6c3657271077533bfb7c29
+Ciphertext = 25154b9998b907b26a0d13d791774be1c3d54a73c72a2227
+
+Cipher = aes-128-ccm
+Key = e94dac9c90984790a7c0c867536615ff
+IV = c19f06f91e645d4199365f18c0
+AAD = e9394b0245b379e68e3dea
+Tag = 27b546ef8cd717073832584fb25a0645
+Plaintext = f0613205a7a0822849df9e8a3cf6caf281f3adfa966c5507
+Ciphertext = 54f9241d307e03b3d3aaff62f1edb744653690da6abd0b09
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = 040b25771239cc2a39446e3c
+Tag = 54e5d050a405f755047d09cb0f49546a
+Plaintext = 011fc50329bfd63a85ebd4f7693363602f1a4147371270b7
+Ciphertext = 4432d7eb42980734d34f19c50cf8abf71ac1b19ed75a7278
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = 50a1d37fa2f3462bd304631b
+Tag = 2abee8547ee3f24cfa677468ecc1d121
+Plaintext = c90e40540d372ab1eb00ea5d5b8de5bf7c94ce4e376d6949
+Ciphertext = 8c2352bc6610fbbfbda4276f3e462d28494f3e97d7256b86
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = ac3bb872a41df35e415d2b0c
+Tag = 61cef865ce4080e7c7abfc43f62c03a3
+Plaintext = 9e7be78c0ab9e6a4c6c257e77c63681bea35d951f168b0c5
+Ciphertext = db56f564619e37aa90669ad519a8a08cdfee29881120b20a
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = e3106ae6456153dd922640a1
+Tag = e1d19c321a1e0852adba939b447220ab
+Plaintext = 00df0c5a5d3eceb2bd293066529799544f846672a9a1d31b
+Ciphertext = 45f21eb236191fbceb8dfd54375c51c37a5f96ab49e9d1d4
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = 297b4498bf5427e6341aa927
+Tag = 79ea5fb65018abdcde1a39f6859ecb56
+Plaintext = 14967a0476dbaea03b07fa8d40d344eabaf479be2443243a
+Ciphertext = 51bb68ec1dfc7fae6da337bf25188c7d8f2f8967c40b26f5
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = 5de60dc0e3b5bda0b33a9520
+Tag = c2629ff871ee15745fd8c1ddbdae4c29
+Plaintext = 2da3716d76d10b6766a1f9cbf9f420316fd5f396e7b9a2ba
+Ciphertext = 688e63851df6da69300534f99c3fe8a65a0e034f07f1a075
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = 1c9b8541943ad50b4243c179
+Tag = 04e198ad16ad1106d3ba6172f4a13a8f
+Plaintext = 8c1b3ba18d1f5cff74a457aadd6b3e7d093d06ad2622e6a0
+Ciphertext = c9362949e6388df122009a98b8a0f6ea3ce6f674c66ae46f
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = 51e926d2542ac8faef61465a
+Tag = 75981131e3934ec6d41e00d502729799
+Plaintext = 88936e97db070c0ec2aa58d1c6f5b34df3d32ddf7db34a8b
+Ciphertext = cdbe7c7fb020dd00940e95e3a33e7bdac608dd069dfb4844
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = ebefbac97b363e6f32526aac
+Tag = e2c005b5bebe07ff578b1b4bc51971cd
+Plaintext = c20742e4b410c5b661da373a905fb0ed55b20e0e879eff5c
+Ciphertext = 872a500cdf3714b8377efa08f594787a6069fed767d6fd93
+
+Cipher = aes-128-ccm
+Key = f6bb5d59b0fa9de0828b115303bf94aa
+IV = 05358f33e1fc6a53ab5a5c98ce
+AAD = 1ef059ac7d648e9e32d9b1f2
+Tag = 21a25f15b5b4229a872a9199972c85b3
+Plaintext = 65c55ca21a89a8325365bf2be861d700559de2eabb41b37f
+Ciphertext = 20e84e4a71ae793c05c172198daa1f97604612335b09b1b0
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = e3afd091d2b588465872a6300f
+Tag = 42d522cc9dc19c47a4fa0b1528069cf8
+Plaintext = 8e5fa1a6662a8378cda15697e926841594f2f394fa5a34ab
+Ciphertext = ca0d95e3ff186ad6b88d45fc4079e6b7b4a615e7e8dd5f47
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = ce3186bb737753b59ee76b748c
+Tag = 59b26510b8f25610799e011d7c850ecd
+Plaintext = 311ebc5ff2f625944562ea699b2690df3e6e64a17c62bd3a
+Ciphertext = 754c881a6bc4cc3a304ef9023279f27d1e3a82d26ee5d6d6
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = bfd636989dfbcb0edc9f014cc8
+Tag = 52942aa0d39649f3d9ed535bebc2b603
+Plaintext = c96cee5ba7b799f16254a17b1870cdb85fe0ef3f42110c13
+Ciphertext = 8d3eda1e3e85705f1778b210b12faf1a7fb4094c509667ff
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = 4812b092aa59d57451bfd812c3
+Tag = c1e61efb9c1d84ddac2d24f43531f569
+Plaintext = 13b1b4404dc5735655139414fcbd02c5327ae9fb148bd324
+Ciphertext = 57e38005d4f79af8203f877f55e26067122e0f88060cb8c8
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = f6ef9ac4f4c9ce1e4309c64fa8
+Tag = 13350de0ef34df12fb945b0ae0a0d9bd
+Plaintext = 6c5b59319e2710f5d63407f85b424d1860425ef8ce0cfe53
+Ciphertext = 28096d740715f95ba3181493f21d2fba4016b88bdc8b95bf
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = 9bf12168bb3d79ebd25262f2b4
+Tag = a0734563638598d8c4bf1fcd94009925
+Plaintext = 968e1d78008da78611e82985c4028e86770858cfe61c3723
+Ciphertext = d2dc293d99bf4e2864c43aee6d5dec24575cbebcf49b5ccf
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = 7d870d7e52d3053c65eefad477
+Tag = a1f5fc53b08aca82bccfba6fbcb27e69
+Plaintext = 6a1306d911434cc7400d2f9a95e36aedceddca2b3d583f51
+Ciphertext = 2e41329c8871a56935213cf13cbc084fee892c582fdf54bd
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = e95099f04371e445e5eaa1d80e
+Tag = 7d1a922953facbd630d7fea6b63594ec
+Plaintext = b9197eb50c8168d16b8a12bd261d553ffcc521d979b26fee
+Ciphertext = fd4b4af095b3817f1ea601d68f42379ddc91c7aa6b350402
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = 3e80eb03db6545204ef4241ad6
+Tag = 83fa000d10078256b71249d9d1f1846c
+Plaintext = 95f59e36eac8eb3b51709d635b07fa2da0976ea20e25807f
+Ciphertext = d1a7aa7373fa0295245c8e08f258988f80c388d11ca2eb93
+
+Cipher = aes-128-ccm
+Key = d1da2e961e78063af8de41865b226873
+IV = 03739f5474857006340cce554d
+AAD = 9748798c0f3cc766795c8ce0e4
+Tag = 2773c2f55b752477c489facee812c614
+Plaintext = a48db9add9ecdeb49e51d3ab7bb2075202ed2aa50c0195b1
+Ciphertext = e0df8de840de371aeb7dc0c0d2ed65f022b9ccd61e86fe5d
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = d24651ef0561282d3e20e834960c
+Tag = d9236d5c5c9319092078411b72c51ba8
+Plaintext = 798e31cce0a83702a95171fb1162a17b9ce00ec3592ce262
+Ciphertext = f3c3e52f1a1ff528a8d3783ee4e75f114e3e6416334815d2
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = c527d309ab29ee91c5fc53117e71
+Tag = d8ad2a48cb734e3f93e602c15c7c775e
+Plaintext = d79cd4c8891ec4ce2c51136712d23b32266b2b73768aeb1e
+Ciphertext = 5dd1002b73a906e42dd31aa2e757c558f4b541a61cee1cae
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = a93dfc3944514ddfc5acdd89fab7
+Tag = f34b297f3f106a9cdae255f7634fbd0f
+Plaintext = d7fa81c949f1f2af29dbd56529b307e3b348e996d0936455
+Ciphertext = 5db7552ab34630852859dca0dc36f98961968343baf793e5
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = e502abe21c7b22120693a08ef3e6
+Tag = 4f5d9c3dbfe3e2fe03a002e55039ebe6
+Plaintext = 6330caaeddf0473d564d175b9408c6f12e6d3cd4ee2c423f
+Ciphertext = e97d1e4d2747851757cf1e9e618d389bfcb356018448b58f
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = a49b34dfad43333fb2ffd701a2d6
+Tag = 6f7bb0749c99d75740f2d193fef36c60
+Plaintext = 45671482c390e65f75de15ca91b93596e9bf3d6fc9178bcb
+Ciphertext = cf2ac06139272475745c1c0f643ccbfc3b6157baa3737c7b
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = 9e4d8aa3dbdc4d4b4b8d72734f52
+Tag = ceec82fc674da9efa6926e8641729ed8
+Plaintext = c8f34bea8bdc403a48d8ed9268429141cd03c29558050ef4
+Ciphertext = 42be9f09716b8210495ae4579dc76f2b1fdda8403261f944
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = 052327ad59cc791259817fd0ed96
+Tag = 2ff19e93f60c8f3a511300fddc38ee59
+Plaintext = d8d1c57b16c23894b66023c29f8648ce4a6074647e1f5f69
+Ciphertext = 529c1198ec75fabeb7e22a076a03b6a498be1eb1147ba8d9
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = 14bc3c44c001ccb261a2a0526523
+Tag = 7fa00fb244eda0d77cf6c05c8fd590af
+Plaintext = 71c14a7031033db15bfe23b75fed9daf8886dd11392a0b78
+Ciphertext = fb8c9e93cbb4ff9b5a7c2a72aa6863c55a58b7c4534efcc8
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = 3477384c396a9e9efb3e169722cb
+Tag = bae19612657c87d3bb73cfb8cee7c8a8
+Plaintext = afa795f836763a1210bb36fef167864f73ba3b6abc593537
+Ciphertext = 25ea411bccc1f83811393f3b04e27825a16451bfd63dc287
+
+Cipher = aes-128-ccm
+Key = 1eee667267ef10b03624cf9c341e3f75
+IV = 0630a3eae27e505c61c56e6560
+AAD = 0c3b9a6924ad506038cb2d6590c9
+Tag = 3d9713d2e916c23ac3039de34c295fc4
+Plaintext = ca4a186f116a179579e3d327aec3f5be358bc7094f853bc3
+Ciphertext = 4007cc8cebddd5bf7861dae25b460bd4e755addc25e1cc73
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = 477937301c83ba02d50760b603e0ea
+Tag = df9a0e986ab2890736423bb3772cec3e
+Plaintext = 553714e17a208a2eceb847a4a2d95088388b1ac8d8ca43e0
+Ciphertext = 1c80213268bad5402c4dc9b5d836ab7499810d0d8a974716
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = c91eb5a07ff19c044023e5cf339203
+Tag = 39f907a92cb01215e3cda84ae13af48b
+Plaintext = c94d0b9e728413c58202cb3f6b82dba7aa9e3ca0a72c40c7
+Ciphertext = 80fa3e4d601e4cab60f7452e116d205b0b942b65f5714431
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = 38c71a8e9b279c605c7f0418a0afc1
+Tag = 3dbd8dbf7485106cdf9ea0e7088a5650
+Plaintext = b4e8c4fd5ad98a1be8b5a11677c57ca1c1694e3528092aa9
+Ciphertext = fd5ff12e4843d5750a402f070d2a875d606359f07a542e5f
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = f2c76ef617fa2bfc8a4d6bcbb15fe8
+Tag = 853fde6f4dca88ff11bbce20ed9e5012
+Plaintext = 578ce26cdb5ba2e8798e23588e5cd04ef782820b80e49a42
+Ciphertext = 1e3bd7bfc9c1fd869b7bad49f4b32bb2568895ced2b99eb4
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = 36004342dd74e7966692a848b2c11e
+Tag = d94e979108fcecbd32f6bdf72f0ccb4d
+Plaintext = 78733c635d4d4e8b0729732f1e174dfcec4e020a7ac3870d
+Ciphertext = 31c409b04fd711e5e5dcfd3e64f8b6004d4415cf289e83fb
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = db92bc3fe5d4141aeb39baea6f114c
+Tag = 229c8f9d4e39fc16cbdb44236ef125c7
+Plaintext = c7aafe7760945e45703c1e19f1032dfd56ddc216c3b03826
+Ciphertext = 8e1dcba4720e012b92c990088becd601f7d7d5d391ed3cd0
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = 34ec2d5b6f0d950509b47a0637d74c
+Tag = 1c9ab7cb0a779c3fa78c9ee12603802b
+Plaintext = 2345e36a63be0b78df95e60907c78da0e48e61e70685a1f3
+Ciphertext = 6af2d6b9712454163d6068187d28765c4584762254d8a505
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = 6ab658d177c2dd87c9b8787cd70182
+Tag = 648c6307ec5ea304045a7cdc93f36b9d
+Plaintext = b0725f735543eb0c0ec88ae69b140f5787d28ef4a2e36d57
+Ciphertext = f9c56aa047d9b462ec3d04f7e1fbf4ab26d89931f0be69a1
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = 483f135c61250fa610b4d14b99ecf0
+Tag = 364ff3b1ad915347b1c7f062b10d3da4
+Plaintext = 315a947bf5291278d446d332ee5ca0def7655d5c957a8fb4
+Ciphertext = 78eda1a8e7b34d1636b35d2394b35b22566f4a99c7278b42
+
+Cipher = aes-128-ccm
+Key = dbbd26f5d9e970e4e384b2273961be5a
+IV = 0b1eabe504ef4822542e397fec
+AAD = bb022aed60819ef84ae83ce27db9d0
+Tag = 7569808dab58d42181543b2e2d05992c
+Plaintext = f78d00755bcb45e6822121fe7cb03c8e627c9f548ccd7e7c
+Ciphertext = be3a35a649511a8860d4afef065fc772c3768891de907a8a
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = a209941fab710fda38d11c68b13d930f
+Tag = 2341ea8c0785569973f90ee9ee645acc
+Plaintext = e59782a9aea45f467b90e51a0fdf166baba05663def2d8b6
+Ciphertext = e357b1ccdaca6f3506dc45279c2e4c59f5307a5fd6a99cd7
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = 2e2f6f9755a492ee54df77b2ecab9808
+Tag = 703eb81224cdb1fd2e1cfb2fbfe1e402
+Plaintext = 042a072f6ebf11f79fcb4f5a64f7946dc837d9d2355785ea
+Ciphertext = 02ea344a1ad12184e287ef67f706ce5f96a7f5ee3d0cc18b
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = 99e98c9983c85d1f49ae43ebad67a652
+Tag = 64c4aea7f17f18f068897557c93ffaaa
+Plaintext = 5db6bda27910e7b8b61ac476c6532570b71b3932bd6a698c
+Ciphertext = 5b768ec70d7ed7cbcb56644b55a27f42e98b150eb5312ded
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = 37a837d73fa15793f6f823fb99c2ea74
+Tag = 6f3b2e70e6e2dc7acc74a823a7f49722
+Plaintext = 8cac261a461c3ddd2642b8e4e5c3389e491fcb2ff8356412
+Ciphertext = 8a6c157f32720dae5b0e18d9763262ac178fe713f06e2073
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = 11119a4e779cfb64c736d425e4ff554d
+Tag = 0dc3b57096f0df1d4eb5328c416921bc
+Plaintext = 3429f9b088b501d7944c462694d0799568282e7ce07d3e61
+Ciphertext = 32e9cad5fcdb31a4e900e61b072123a736b80240e8267a00
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = 962d7d4305f23d1692747b504960c0a4
+Tag = f62ed804e9f2ac0f7001d0f35ea9f3c1
+Plaintext = a46ae4c71d4c9eb72fabfa76b8074aa02e07653eca10eef5
+Ciphertext = a2aad7a26922aec452e75a4b2bf6109270974902c24baa94
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = bbb1fdfefcf3657ba6cd93ff341a04e1
+Tag = 907dcd7ac1e0bb248d46c3036c39fb02
+Plaintext = 92f5e3083f57c77ac9553a2024a66489698bd2261f05d415
+Ciphertext = 9435d06d4b39f709b4199a1db7573ebb371bfe1a175e9074
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = 74be126f7c596642dafa8fe3da904e69
+Tag = 87cbb80fd21127feca7e76fd6947d5b7
+Plaintext = 41ecc3aae5cfebfad7921a47a0684601ffe73816380f8716
+Ciphertext = 472cf0cf91a1db89aadeba7a33991c33a177142a3054c377
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = d72cc521c90a468522af8966c24799f3
+Tag = cdb5d1243b6e73b8e380d8ca041647db
+Plaintext = 8850bdda4bd0271e333db344a47b837183eb48269c3dc0b6
+Ciphertext = 8e908ebf3fbe176d4e711379378ad943dd7b641a946684d7
+
+Cipher = aes-128-ccm
+Key = 10a7720f2e18f739c26924925af6b670
+IV = 8c4e7813ab9bce9dafee01c628
+AAD = 28f427fba8d0bb0380bbe5072ccfa519
+Tag = 4a0ae8604b103f882f17db893ed5c576
+Plaintext = fdd3ca2f193f93f5a349b50357d26748b767cde6ab5cbfe7
+Ciphertext = fb13f94a6d51a386de05153ec4233d7ae9f7e1daa307fb86
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = 5cbba9ea778e01af00afb2a934f28c7211
+Tag = ab30780a2c4f12af8f35350d65284c59
+Plaintext = d91b12e8655dd92b1332fc1d71c391c96a17111562d90ba3
+Ciphertext = d302e5b2d5d90433186b804cd7717e2db2f22cdc34fb2942
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = 1583138aa307401dddc40804ac0f414d33
+Tag = 46577901b7f6feb88b8e2b8562f9cb5f
+Plaintext = eeafb08d4a4819f5682a01d44371e34cc5729079e74e73a6
+Ciphertext = e4b647d7faccc4ed63737d85e5c30ca81d97adb0b16c5147
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = 23931c258c84086500c6a3b6eda457e6b5
+Tag = 8735a59390ba7a892741694f3a89b0bf
+Plaintext = b8737d5bbfc976c2d8d9786148dea664dd83cee98df537b5
+Ciphertext = b26a8a010f4dabdad3800430ee6c49800566f320dbd71554
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = e12f98507d6514c3b551d240595346bc9e
+Tag = f4f81ed18cc1820375a7bec2318cde1e
+Plaintext = eb021b63c61c0b194bd44870608d7ef0b932b6104412d7a9
+Ciphertext = e11bec397698d601408d3421c63f911461d78bd91230f548
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = e14b87d49d231c0199eec627fd7f1b5332
+Tag = 187b430caa60d98dc3e2aeefe6249b44
+Plaintext = 93b42584c4956078359d77e80aef52281b9228a1f66aa36b
+Ciphertext = 99add2de7411bd603ec40bb9ac5dbdccc3771568a048818a
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = ca095aec96a8b093e62b10f0950ce35ce7
+Tag = 0a77372b727408e1bf5a70790b9eba3a
+Plaintext = 6a788d8238c7b313b8eba27b210a71c36819d719115b9b76
+Ciphertext = 60617ad888436e0bb3b2de2a87b89e27b0fcead04779b997
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = d1cac02b34ad33c0e77a5bda2c3baf5e5d
+Tag = dc1f5cb4d4fa2204e82eedcb3784443d
+Plaintext = 3bc1ee54d0094603dfc68eee118e547d031fb36e464e776d
+Ciphertext = 31d8190e608d9b1bd49ff2bfb73cbb99dbfa8ea7106c558c
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = 065c06b49a49898e20bb679e35edbb1f76
+Tag = 2413f9496592a75a1d6e42ee3a258607
+Plaintext = 8a12adb8b746216baa8a418725e608e4377f13816a036a10
+Ciphertext = 800b5ae207c2fc73a1d33dd68354e700ef9a2e483c2148f1
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = 98a42d7a0c5917deaf3b4de3f0cbe0a191
+Tag = b571a3150887df1ac5f813676b2eb24f
+Plaintext = 30a226c07401d0ae24c73d682e3a6e7e377ec1613bafba17
+Ciphertext = 3abbd19ac4850db62f9e41398888819aef9bfca86d8d98f6
+
+Cipher = aes-128-ccm
+Key = 6bffab1f4f4c1ff66b4a669b515b2f8d
+IV = ddb34d5e0140fb96d690e1a2b7
+AAD = e245a7528931841b52a5f59d861d98d7b7
+Tag = 31aa5e4657c92e31c69ab18d447d3578
+Plaintext = 3d17bcdf30445ebd8a9b6aa2fe11d443c1161bb1ee69ced0
+Ciphertext = 370e4b8580c083a581c216f358a33ba719f32678b84bec31
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = e04006b68c83a5dd4ceac3cde238e48895ae
+Tag = 0d6d676d11fce907b5c93fa1ed7bff2b
+Plaintext = 6a493c5ef3769ccc4101dbb2eb36e1e5bbc577a057ce0731
+Ciphertext = c7584c0203c2535c5702c6ae93b7cbfb066f4a055c627a18
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = 5da64e368f45153ea5b7ddca966b6c5b699a
+Tag = 2cd45f211b1a1364c91ad07959bf0ee5
+Plaintext = 15e0c672c6764f3699d9d3e7120f8ce5daab166f08fdd074
+Ciphertext = b8f1b62e36c280a68fdacefb6a8ea6fb67012bca0351ad5d
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = 1b315d024bb5d1e03d7510e61f37d8adb10a
+Tag = 18f021a98b2edfb0b7500363099c2a1a
+Plaintext = de907d58cd8f5a72acaa1d329b937dfbbfed65a4e45eb029
+Ciphertext = 73810d043d3b95e2baa9002ee31257e502475801eff2cd00
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = 8691ba4f9232ca86f919fe72ddb39c91d707
+Tag = 2ac9aeb018c48f3902276ac759710b6d
+Plaintext = c7fa314d27be79f9d3e2d1e188c1785b0c970f91b8ed4290
+Ciphertext = 6aeb4111d70ab669c5e1ccfdf0405245b13d3234b3413fb9
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = ff0baf1cbb5884a9290ea7b5ee49915efb4b
+Tag = 7dac49f606dadb9f7034e0a1860d519b
+Plaintext = 33b05b20f3c849fac091a5028cbfa0bc9a1c32514136fee3
+Ciphertext = 9ea12b7c037c866ad692b81ef43e8aa227b60ff44a9a83ca
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = 2d118cda20700bc2748ea1753fbca6f74933
+Tag = 623ccbab19c1442806e21c5a820945da
+Plaintext = f43832e420e2eccd5d80502bea2ba1804e17d4433318fc86
+Ciphertext = 592942b8d056235d4b834d3792aa8b9ef3bde9e638b481af
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = 0c7a5fd2010c999a8a0efa81f89ff5bfefe0
+Tag = dbcd18947ac1800856c9c92eb0388c70
+Plaintext = ceb203c842a962183f22e602644fc66e4290b3d5be445fb4
+Ciphertext = 63a37394b21dad882921fb1e1cceec70ff3a8e70b5e8229d
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = 73fdddb9e0a64f5671fd70c4ea8443507789
+Tag = 39c29ea73b0c5aa130d8b14f7b9926a9
+Plaintext = d6015b6bd5f5eabb2a649129f8f727c06a3ad59499f21caf
+Ciphertext = 7b102b372541252b3c678c3580760dded790e831925e6186
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = 82c4484e3a6e18b6bbfd78b69b00c40b30c5
+Tag = f0a0f148ae138c2ea02538c8fd7ac76c
+Plaintext = c288b810fb533441bd549d02c0b28d5b834293683eaacda2
+Ciphertext = 6f99c84c0be7fbd1ab57801eb833a7453ee8aecd3506b08b
+
+Cipher = aes-128-ccm
+Key = ae6136df9ab43631ef143515dacedbe7
+IV = c5c445792208a50c8e93d64aa3
+AAD = 267d8385b14721eded743cffd69e4d595f7e
+Tag = 85eb537e7583f04e040a0ddc41106213
+Plaintext = 667cc47d13c34923be2441300066a6c150b24d66c947ca7b
+Ciphertext = cb6db421e37786b3a8275c2c78e78cdfed1870c3c2ebb752
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = 4a3634e5028df97fbe00eb016e8ea4f1918faa
+Tag = 52570e769629dcc2e568737ba53a1195
+Plaintext = eede01b08f9a303cdf14c99d7a45732972c6eff2a1db06eb
+Ciphertext = 90c850790b0b380f5aeb2488fdf43c9d5ef1759861e86f6e
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = 041b93e3fc059fa44aa755e88df277b9b6e499
+Tag = f1d82ec19a2e3ec43bbdb34e10999d90
+Plaintext = e61ca7310172eec16745a73e34516f65844eecd0dbc5566a
+Ciphertext = 980af6f885e3e6f2e2ba4a2bb3e020d1a87976ba1bf63fef
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = d1be393376cb5d23cf8139da0fd92f3d520ae9
+Tag = f2abb0ce4de9eeb5e8af9cdf3391d3cc
+Plaintext = ea887edee68ad5fa6bae928aa480dda898037f820700ec52
+Ciphertext = 949e2f17621bddc9ee517f9f2331921cb434e5e8c73385d7
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = f3e551b34d2db1286a9f41085e4dda95ec3f75
+Tag = 239c73b01ba49a8498b5ff4833851069
+Plaintext = 71fe1ba5d299495d2a56039c64032ec6263d437f55e3f5be
+Ciphertext = 0fe84a6c5608416eafa9ee89e3b261720a0ad91595d09c3b
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = a69ddc66e63a3415f21009d53adcf26bc1a9a5
+Tag = 2248dacd3903c26a2dc5ae649566ad67
+Plaintext = bd04d854216740a6ceb9827cbddd83761d19feb2a21d78ef
+Ciphertext = c312899da5f648954b466f693a6cccc2312e64d8622e116a
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = 5735d6f5882d8f27155eb4cc285a65138ad64a
+Tag = d4156cf7d97b2e744351b6960a807cf8
+Plaintext = 33b44873a7a1e5b0fdbb7e7347623e4fa1ccd937feb26fda
+Ciphertext = 4da219ba2330ed8378449366c0d371fb8dfb435d3e81065f
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = 5d94ed976ab2063512690ae704c3b115519742
+Tag = 5a50086b6711ac72533c3c5717f6892c
+Plaintext = d3909d577a4e89642227cc6fc146b61bc18392175e342898
+Ciphertext = ad86cc9efedf8157a7d8217a46f7f9afedb4087d9e07411d
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = db20b384620ab8691aed2fed14a745188d94c0
+Tag = 54fb74ecb9a5163b01b9dbf97ff2f999
+Plaintext = ba0716355fffb8ef947d2a15eb58375a1ff1084c56699029
+Ciphertext = c41147fcdb6eb0dc1182c7006ce978ee33c69226965af9ac
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = 94897cdd04e0c8480b2ef7b5201dda37558ba9
+Tag = d2a81702f665ff5c54f586defd268c94
+Plaintext = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9cc
+Ciphertext = 215d1e5e323b409e36cc81509d1d78cbf27d452d494cb049
+
+Cipher = aes-128-ccm
+Key = f1908328edf2996ebfc9655472ca5ad0
+IV = 4c693364546930b6c5250e2699
+AAD = 95c44e1e5ad256b3ce1cc1d87137a1e09f1fd4
+Tag = fa641889723e163825ab65727e8a5343
+Plaintext = 598e91d39c414496fd5e69f2cf80826b4e7d59ba28e0a0d8
+Ciphertext = 2798c01a18d04ca578a184e74831cddf624ac3d0e8d3c95d
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = 09db3efac9473f713da630ae92c2c8604c61c51e
+Tag = d89756e5d78753ef22c012ae34b39a20
+Plaintext = 6ad541695a37c32d73ff6d5f870abd5b0f362a8968c4fce0
+Ciphertext = e65fcc975865c1499b088b58ba163283085d8ca68dc3b235
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = b6d07035aed9c141c713cc3bce60f7ba8ac2545f
+Tag = fc78ebae9c143a7283b0641e1f83f5a0
+Plaintext = 9cce4c82fe9d38ef64ac8abdf0619f201a25ce6903675627
+Ciphertext = 1044c17cfccf3a8b8c5b6cbacd7d10f81d4e6846e66018f2
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = 80a5ab693378af29cd5a33555cb3579f9ae540aa
+Tag = 5a7e44348d2b3085348f787128a4e96a
+Plaintext = 7295a7aed3e987baef19ad68c33ba5a5dcbff27875ff5236
+Ciphertext = fe1f2a50d1bb85de07ee4b6ffe272a7ddbd4545790f81ce3
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = 220817144a15a0a654fc1beaabce60270aa72df8
+Tag = 24dfc096cd8a09d2d81f6146fb54082a
+Plaintext = eb21fe20fc4f92452b261eac0d7b70016f7469afdff7a3f5
+Ciphertext = 67ab73defe1d9021c3d1f8ab3067ffd9681fcf803af0ed20
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = 5a2423c2ff2d642c80ac1ca27dd779321f3e9c01
+Tag = 5da82204f4dd8f535cb2fec2f133d882
+Plaintext = 23bf80f51dfd83f63986910e69d54a315c2bfb43f432b7de
+Ciphertext = af350d0b1faf8192d171770954c9c5e95b405d6c1135f90b
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = f2c76ef617fa2bfc8a4d6bcbb15fe88436fdc216
+Tag = 108630135498ba409f4b6c8caee8a85b
+Plaintext = fc3a50cc8a68778327923ea697f5388da4c814381e29c5e4
+Ciphertext = 70b0dd32883a75e7cf65d8a1aae9b755a3a3b217fb2e8b31
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = b40c8c1d2cee490653105ca2443356cdb63e4fd0
+Tag = f89c515837d129ba41f9c24b0229ddcf
+Plaintext = 465e41c69928d08c33e063ea119595a04d0de6bffd17bba5
+Ciphertext = cad4cc389b7ad2e8db1785ed2c891a784a6640901810f570
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = 6ebfa1e8f80b3cdb1bedf2e3c7e74f30f55c38e1
+Tag = a352fa6b9c4e40733ddcd3fcdaf9ae63
+Plaintext = 3f98ee3922f8f1086e3135ae66c5465426b13c8794954880
+Ciphertext = b31263c720aaf36c86c6d3a95bd9c98c21da9aa871920655
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = 6d0159861031c1a5f01aab35927fe2ab28154d19
+Tag = 2c1aa13f062c0f1f5008e27ff2191942
+Plaintext = 5b43067a5ab3a9f9e633fdc084c44ffa7f11edd12ea5873d
+Ciphertext = d7c98b8458e1ab9d0ec41bc7b9d8c022787a4bfecba2c9e8
+
+Cipher = aes-128-ccm
+Key = 61cb8eb792e95d099a1455fb789d8d16
+IV = 1f37b3e59137f2a60dc09d16ac
+AAD = 15e5ade017b30ab41878a2747e93aa91c61c2908
+Tag = e149dd02bc7face0c4dfe4e501c2ac2a
+Plaintext = e40b7e9e46e339e64891526e730b3bf6562fa37acefce307
+Ciphertext = 6881f36044b13b82a066b4694e17b42e514405552bfbadd2
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = 161d92c7df1ebb0924719e066e08b95eb4914a5eda
+Tag = 62d2b338a7b34ebd9d85c244c952d681
+Plaintext = a9eec383f63892521e4616fcbadc5485942ffaf4669c43a7
+Ciphertext = 949be340720c4fdc4adc05cb777dd81a2549628d33fba07e
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = 6b1d94bc0c6e45fc905c509ea667853e4b2c5a8848
+Tag = 8a4defafeb3d61dad8c007b68d8fb9b3
+Plaintext = 7b44a093162bfc8b4d65f1031d890a6b08a3705b142c0c26
+Ciphertext = 46318050921f210519ffe234d02886f4b9c5e822414befff
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = 868dd3e241f60f097a7a2fe571307ee5eb961218ca
+Tag = 57cbab553b511d68a4f41db211d0a2fc
+Plaintext = 28c4d6de3e2ce51b849b135d9cfd3084f0e3155447cad9d5
+Ciphertext = 15b1f61dba183895d001006a515cbc1b41858d2d12ad3a0c
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = 3776f37fbf8803bdfd246ffaff2e59658a6c3f0ebb
+Tag = 0290fd7dbf0afa3e597274e3c9fe170b
+Plaintext = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+Ciphertext = 2ba665a3ee05875c14f0a8fc8e6c0034582e8802f3b699ab
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = d0f2769eba9b8e618f00eed6b34c261c59322a253b
+Tag = 9c7dec3960e6aba3174d793b4e08f449
+Plaintext = fcbbcdd9599a86e7c8ccb9347065789a9728ca1220fa51ca
+Ciphertext = c1ceed1addae5b699c56aa03bdc4f405264e526b759db213
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = 2be180892faed0bb75887668d187807666d3c66c68
+Tag = 7057b9e2d844e86ee5c3ecfb3270804e
+Plaintext = 8d145b1f792cc31a2e5b86216609bb018e7aea3012ff70a5
+Ciphertext = b0617bdcfd181e947ac19516aba8379e3f1c72494798937c
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = 52859849a5b7c1d432c3bfb35271cd8141db2ec774
+Tag = 1150fa899152eef7a30ae0f20986818e
+Plaintext = 741db990b43ef34993c33d1c4953b67b128b9299dfe86d74
+Ciphertext = 49689953300a2ec7c7592e2b84f23ae4a3ed0ae08a8f8ead
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = aa192759625f4e42d1d1fa73dc0f62199142155615
+Tag = ba7ff9203608089558698ec29472dda7
+Plaintext = 51dca5c0f8e5d49596f32d3eb87437bcae866640310ce1e3
+Ciphertext = 6ca985037cd1091bc2693e0975d5bb231fe0fe39646b023a
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = 6de564226884188ec7bea3894535a875cff2a42fdb
+Tag = 85bd0a5074ef852575baf5f12c22663e
+Plaintext = dfaa7aa8b28626210d5c24e2ddfe516189be05aabe26f3b2
+Ciphertext = e2df5a6b36b2fbaf59c637d5105fddfe38d89dd3eb41106b
+
+Cipher = aes-128-ccm
+Key = be1ed49e2cb0caf6b6a0940c58453b93
+IV = b78ad129457681fa7346435b97
+AAD = f245f2ee23755df863dee55d7ef0c3c09a0b6f0b0c
+Tag = 9eb617436bae012331daf020fce24e47
+Plaintext = eedf00aab5edefdd6549d37ed44358e11c588c24f141dc57
+Ciphertext = d3aa206931d9325331d3c04919e2d47ead3e145da4263f8e
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = 1ab5cc3d7b01dc74e6cf838bb565fea3187d33d552a2
+Tag = 7ef14622a9b621d1721b944c60f7fd67
+Plaintext = 8d164f598ea141082b1069776fccd87baf6a2563cbdbc9d1
+Ciphertext = 0d30ab07153b5153637969e6bd3539448c541e42b3d432fd
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = 1f1ac4674b272bc7a4ee9f4eae33e969b16fa90a69ba
+Tag = dfa4ec2c92671c64ee07946527be67f0
+Plaintext = 14e99a2ef0de650adbd785c692342cdb765e6d20d5fca09a
+Ciphertext = 94cf7e706b44755193be855740cdcde455605601adf35bb6
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = 43ee77f12ea42e82a02275a68aa95cbd1bb440442bcf
+Tag = 173572fbf3d9495760aae4347397b110
+Plaintext = 383242c709fe5f2ce782bf8c83b645d171f2bd238abc655d
+Ciphertext = b814a69992644f77afebbf1d514fa4ee52cc8602f2b39e71
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = ae2ff288199be25bf640811541394ad7e1dd0dc0d24d
+Tag = 4d2327956e030b9df753e063b5b71201
+Plaintext = 9c16a5b638c35c97c5c981c1b8dbcba11aec30e72e45a936
+Ciphertext = 1c3041e8a3594ccc8da081506a222a9e39d20bc6564a521a
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = 4ccfb4281852b5ca7e787723d689384a68ff9437db31
+Tag = e4dac0c9130f5641afd035dd884b6271
+Plaintext = ec9d8edff25645520801b6e8d14a2fc3b193db70d5e5e878
+Ciphertext = 6cbb6a8169cc55094068b67903b3cefc92ade051adea1354
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = d3a2fffc798fd9cc2f409471faf18caa2ff3dcf4e652
+Tag = 48807dd50a9cf41651083c49c7493ceb
+Plaintext = 0db33eda4188a9165147e24e40f79fee1985eb68d5162728
+Ciphertext = 8d95da84da12b94d192ee2df920e7ed13abbd049ad19dc04
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = 7b5121aa4d1e314f209ffe3e92cd26ee4f74d91e27f2
+Tag = 8ea0da53046733f522ded40a09c6d7a6
+Plaintext = e0d3ea4308376423c4322503f56e427a64e2e6d8b4f5e668
+Ciphertext = 60f50e1d93ad74788c5b25922797a34547dcddf9ccfa1d44
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = 6e12c112720ef346bbbe7d1c19483721b1c52c438dad
+Tag = 345cb5a968f39654b994686699d532c2
+Plaintext = 491f2bca585d6b5fdf38d18890e4d1bc923fe26930b3d2f1
+Ciphertext = c939cf94c3c77b049751d119421d3083b101d94848bc29dd
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = 20433402a2d869c95ac4a070c7a3da838c928a385f89
+Tag = cce85eb55339b886b7121b306fccc0b2
+Plaintext = f45908d691ddaf89c0bc129ffada94c3ceda5f47d63ef76a
+Ciphertext = 747fec880a47bfd288d5120e282375fcede46466ae310c46
+
+Cipher = aes-128-ccm
+Key = 34ab6fd7f54a2e0276fcb7cf1e203aba
+IV = 6091afb62c1a8eed4da5624dd7
+AAD = 42f944c21cc221beaacb288115ac628346b8a1d94bd5
+Tag = a37ca5ce12aa6f0659467642deb8bfcd
+Plaintext = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b
+Ciphertext = 63261824c00c9038caaa5a64603b09dd40bc4e3a210ef667
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = 105258d2f25f62675aee975cfdb668aff833f05b61eb2a
+Tag = c7fa9ee2e7cdc1b755258f2212a8a8f4
+Plaintext = 49db80f22bc267a70e5636dfbc8a21c83d9691fe4b9c3051
+Ciphertext = d2fcc8b7809b5fc07e44083e437d8180157f1782a9ce9f65
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = 0f5938540651fa4ca03867e67518eb2b73f60dd8750fa0
+Tag = bfdb9bfcd3b969fb2e41221eb92b0147
+Plaintext = 26618e21099a79d6c517335389551323065ad89c8848ea12
+Ciphertext = bd46c664a2c341b1b5050db276a2b36b2eb35ee06a1a4526
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = d6b228960fcbcf07c7bede616139db62b3808718a5b511
+Tag = f8beea22cba93203c912209c78c03aa1
+Plaintext = 4de1d6d57144896ddea1c30f49afecd27bdf4840ed9928b5
+Ciphertext = d6c69e90da1db10aaeb3fdeeb6584c9a5336ce3c0fcb8781
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = 75f8f071e229355e286882917ce5dd4f1db591fee51b6c
+Tag = 69a2e3ea4a40f7c491912c1a0778ebde
+Plaintext = 785359b1dc754a1e1b6d8731bd2d917ce3e91507401310e8
+Ciphertext = e37411f4772c72796b7fb9d042da3134cb00937ba241bfdc
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = 4afb62aa8648ac7474dd16fcc376f8909c69e1ce36e6d1
+Tag = a75c7ba2a769c27903e99b72639b0841
+Plaintext = ab627aac1496d011ed2edcb2fc6b2afbcc394654f56124f6
+Ciphertext = 304532e9bfcfe8769d3ce253039c8ab3e4d0c02817338bc2
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = 736fdf94db820a2efe89e7fc9dcfe7c23d5754ac2bcc7c
+Tag = f84f4ca4a69fde75d7207e50494819b6
+Plaintext = 40722cffb37f1455c2618408e777ed0f4b1bd039952730cc
+Ciphertext = db5564ba18262c32b273bae918804d4763f2564577759ff8
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = 8a9a0367137c28db4c4e78d9cd9a68cde0d1b4583532ae
+Tag = a0c34a24d3ee0946034c71fba4dbb333
+Plaintext = dcaabf7a061502618541c09ea59dbbbd52b2692fd0064747
+Ciphertext = 478df73fad4c3a06f553fe7f5a6a1bf57a5bef533254e873
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = 34dbbff560ef04ea731b8979aef2ae50972f4db3efe14a
+Tag = 0f5e24a435a39a716c39f43dabdc4281
+Plaintext = dd641a893b16e0e173ea2eda20638bb01849ac11e64e8ddb
+Ciphertext = 464352cc904fd88603f8103bdf942bf830a02a6d041c22ef
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = f3d1fcd912252431db9d8ccfc3e203d5b34d537468b4c6
+Tag = f623d59f66764d859a772bb50ec91fc3
+Plaintext = 9aa3e8ad92777dfeb121a646ce2e918d1e12b30754bc0947
+Ciphertext = 0184a0e8392e4599c13398a731d931c536fb357bb6eea673
+
+Cipher = aes-128-ccm
+Key = ea96f90fbae12a857f5c97e0cba57943
+IV = 21cc46d9ced1539b0ad946e600
+AAD = 513b4cdc551c203ed5f1e659813584862023911590b672
+Tag = 3b6549eb16fba96318afb3df51f4675f
+Plaintext = c8f44ae4b02fffdbce0df773c24075f877945fc7a86be460
+Ciphertext = 53d302a11b76c7bcbe1fc9923db7d5b05f7dd9bb4a394b54
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = d3c0ed74e5f25e4c1e479e1a51182bb018698ec267269149
+Tag = eee82c19ecba34280604b58d92dacd3f
+Plaintext = 7dd7396db6613eb80909a3b8c0029b624912aabedda0659b
+Ciphertext = 5b00cf8a66baa7fe22502ed6f4861af71fa64b550d643f95
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = 62f4fe53e99a9b0c51e9561d910d7e2ffe19a5176c9dec06
+Tag = ab4999e9689d52b8afeb87923efa3b48
+Plaintext = 897f0dfd90213f64a9277a0eda4f134f303fa89f56ca54fb
+Ciphertext = afa8fb1a40faa622827ef760eecb92da668b4974860e0ef5
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = 191c4dfa653c20292657f7694c6b6a4a410c49a879abd217
+Tag = cdc71e556c34fd4e1b5ebc50d38da8b3
+Plaintext = 2b7cf9e6e2d6abcd7775f8a6eb6294e822041c4c45f09c3c
+Ciphertext = 0dab0f01320d328b5c2c75c8dfe6157d74b0fda79534c632
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = ba34741f8edb51470eb20f891869aabeab562d92571ac943
+Tag = 46223d381090661c2ee2370d29a572a9
+Plaintext = dccb9a4625512496b372a2b8b768f75741d8c2e30e57d638
+Ciphertext = fa1c6ca1f58abdd0982b2fd683ec76c2176c2308de938c36
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = 8b922aca6125722ec490b134a45864397f4e2c281d6e2089
+Tag = f78af50466646b7c7e652f787afe5357
+Plaintext = e0e452c990665465160b02cad6367ca89723613488d8efbf
+Ciphertext = c633a42e40bdcd233d528fa4e2b2fd3dc19780df581cb5b1
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = afb9fd78e3f8eaf4e8c91da62b2da534508e54f7dfa214fc
+Tag = cc9d9a1270f78648a6b66cb8c0f2471b
+Plaintext = b536fdb8839f87080ae65ec35da347e792622ffe18a61d46
+Ciphertext = 93e10b5f53441e4e21bfd3ad6927c672c4d6ce15c8624748
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = ecf942ccee7396cb3ee177eadd4d96a4af1d90afdce97376
+Tag = b17d3d6f1fc4f530841b749d9f3a0a7a
+Plaintext = c81233826e5125e1f31fe275184ccba8f1a743e58e146e4d
+Ciphertext = eec5c565be8abca7d8466f1b2cc84a3da713a20e5ed03443
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = 16fea92ffcaad563792aa924bffe7ef690edc90ea4e29cc0
+Tag = 5852ed48cf88d9ab2326aa46b6541b60
+Plaintext = 24ab253b5b06552665c3c810254c0ed15e68a783180d7eee
+Ciphertext = 027cd3dc8bddcc604e9a457e11c88f4408dc4668c8c924e0
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = 76f110eecd369d79e21fb208058359d3a2f37581d1f7f691
+Tag = c62dff6bcade5ac2edb8ec9797ce433e
+Plaintext = 7f596bc7a815d103ed9f6dc428b60e72aeadcb9382ccde4a
+Ciphertext = 598e9d2078ce4845c6c6e0aa1c328fe7f8192a7852088444
+
+Cipher = aes-128-ccm
+Key = 35b403a15212097085d6e2b77ec3d4f2
+IV = daa423bf9256c3fcc347a293aa
+AAD = 8834c776a3237f060ae0ab9857324a3b2ac79f3b6e6f90f5
+Tag = b936ac4764575f85352c24ab23209d42
+Plaintext = 11cbfb3d348c7abef99f562607e289de34a2bb379a5dfe50
+Ciphertext = 371c0ddae457e3f8d2c6db483366084b62165adc4a99a45e
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = 0c0b4a45df5c3919c1e1669c5af5d398d9545e44307d95c481
+Tag = a1138cff7b624f9908b5b4d7e90a824a
+Plaintext = 0b3d947de8632dc8ff752f619ba7c84716fac7a23e101641
+Ciphertext = 7db9f3f7dc26fc2adf58d4525d26d5601e977de5a7c33911
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = aa27a28a36b5a2cee57ffeca0233feb4bdd4eacb2cae28e98f
+Tag = e23f92b598f7a248a894e6b8f5691bee
+Plaintext = e6dedce2c278c44e5678d13e7d5b5d3501d61bb0bb6b5558
+Ciphertext = 905abb68f63d15ac76552a0dbbda401209bba1f722b87a08
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = 66220aa9b40a1772caba7749a544bff938e804dbc6e556498f
+Tag = e94043c0d80fd651469232fe9d47a81f
+Plaintext = a276b0922fbd5094bf89b9329d07341e039d6204397b81c0
+Ciphertext = d4f2d7181bf881769fa442015b8629390bf0d843a0a8ae90
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = 3d765d20e03a4cebfda50316c4b7d8b6c55078d5b3e9cbc567
+Tag = 25088b522fc0731097e729448236b317
+Plaintext = b99afbc2dbb377350cc58d4bfe8e954cef25d7b27b82fad4
+Ciphertext = cf1e9c48eff6a6d72ce87678380f886be7486df5e251d584
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = e91b6265879153e1692b00a112b4205111c8eb1a7b7f2c6898
+Tag = 2208cf07574cc4f3f83ed6301b904404
+Plaintext = 56114cc783b80ca2dd2881387b6d92a59a237dfc8e976d8b
+Ciphertext = 20952b4db7fddd40fd057a0bbdec8f82924ec7bb174442db
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = 340b16f352817babb4fb70e9e6e18784b3e67bdd449872158c
+Tag = 14b0a900068e55cd24c92bbb78c521ad
+Plaintext = eb21fe20fc4f92452b261eac0d7b70016f7469afdff7a3f5
+Ciphertext = 9da599aac80a43a70b0be59fcbfa6d266719d3e846248ca5
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = 5a2423c2ff2d642c80ac1ca27dd779321f3e9c01445be684dc
+Tag = 3f8ba66d74321c80c057f010078d2f28
+Plaintext = b15083a73607c9d7e197a8cc884ad3be98ac343f6493df67
+Ciphertext = c7d4e42d02421835c1ba53ff4ecbce9990c18e78fd40f037
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = 5fe8bb27a59a5f4e370adbba96484c2365fc0d8c6e58d7d3e6
+Tag = 0a189319e4f06d53c1405d37b06cc8eb
+Plaintext = 07542d18e8f2d3e199fca0f90cabb78b169525fdce81666a
+Ciphertext = 71d04a92dcb70203b9d15bcaca2aaaac1ef89fba5752493a
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = 23e5422e8d7560a9e65642b5e723a47536c16791f3a0cf918d
+Tag = dd72f48ae03670249d74f8460b63b1ae
+Plaintext = cd574ed56bdfd1408f7831e0b24b4345ee979ac906a7aa22
+Ciphertext = bbd3295f5f9a00a2af55cad374ca5e62e6fa208e9f748572
+
+Cipher = aes-128-ccm
+Key = 7a459aadb48f1a528edae71fcf698b84
+IV = fa4616b715ea898772b0e89dd4
+AAD = fcc9422ba5023a9997baa9c4ee6cb196ffe96e08eb9c2b8a75
+Tag = 1717c00c93d36a77141b723d573c8c65
+Plaintext = 8c9abe94beed4c9bd46adb1d04fbfe7016dd50d324525abb
+Ciphertext = fa1ed91e8aa89d79f447202ec27ae3571eb0ea94bd8175eb
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = 5fb96b045f494808c02014f06074bd45b8a8ad12b4cb448ec162
+Tag = b4a6843ec16078038c10afedc41f5362
+Plaintext = e92cd0cb97afe4fb00c4f12e9b9abe1d08db98f49a27f461
+Ciphertext = 82b666694232e86e82295beae66ae67d56aceb5d6b1484ce
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = 87db0d9d69bc0cf69cabeb92570e482bbc8ff3e1ba72f12f3225
+Tag = a7c6566d0b8ff97f946d7c7773a845f2
+Plaintext = a6dbad96ad23ff61479df39b99f0673a09f2a7eaebbd34b9
+Ciphertext = cd411b3478bef3f4c570595fe4003f5a5785d4431a8e4416
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = a061a09024f1e03b223695d4703ee202e90e07156b95859a22e3
+Tag = e1d66a4728b67b42602e23c8500b0115
+Plaintext = b1dd81cc3b2b0efe540a3194d6fe304cd2de53db7929ebe1
+Ciphertext = da47376eeeb6026bd6e79b50ab0e682c8ca92072881a9b4e
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = 0dd513c5d8d62b723ab8b0a3aaa477e843d9149dc8a2f878e585
+Tag = 03c51e8c59ed13b3e5d9b489d4ea2ccf
+Plaintext = fb30c2e98f3d7e4ed7431da285711d3d287884db13a474e7
+Ciphertext = 90aa744b5aa072db55aeb766f881455d760ff772e2970448
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = 3ff59c40bd796048e586eccc23a82e4d09fc5e779f38eb4afbed
+Tag = f1ec270b43fc5a9811b56ccf033789c6
+Plaintext = 886f9f91a6566ceb99c39462ab675a3ae3be98f68787626f
+Ciphertext = e3f5293373cb607e1b2e3ea6d697025abdc9eb5f76b412c0
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = 0df7ef91f7124da867e992bcbc6fb38232ff6d5205f38768da72
+Tag = bb4ed25940d58cba64271fe1d2e8013d
+Plaintext = ed370d1c2d6dc03e4fae4deb9343a7d4339562cffd427587
+Ciphertext = 86adbbbef8f0ccabcd43e72feeb3ffb46de211660c710528
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = 6777de159c34d005b94f67c33ae4a35ebab09d9cb9c56b4c9c81
+Tag = 392636a5e373c1354ea9b969abb4932a
+Plaintext = 2f77c2eb07db14bd713c5af10c0760ea3a6ca5ff8d046d36
+Ciphertext = 44ed7449d2461828f3d1f03571f7388a641bd6567c371d99
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = 75559898f4ba03c55afc25ea91aa61a93c2f8270a5fa51b6f6dc
+Tag = 59a7e8bc0570f19159f91fc14ac6532a
+Plaintext = 360fb89429dc9b48358097d930c8561b2bd18dc0a470d1d6
+Ciphertext = 5d950e36fc4197ddb76d3d1d4d380e7b75a6fe695543a179
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = 5e03fc430473c5de96d68907fa506f9da353ae48a965445e1f24
+Tag = 07e559568c27a30b5676f98cc66f57d6
+Plaintext = f2d8d67b9f291c3edc264893922622b2693f3e7231137eba
+Ciphertext = 994260d94ab410ab5ecbe257efd67ad237484ddbc0200e15
+
+Cipher = aes-128-ccm
+Key = ca748225057f735f712ecc64791367f0
+IV = 1341a6998eb1f50d4b710a13ac
+AAD = 7eee4869e77f6db12c91d1f647cad2340d33a3defaeb362d311d
+Tag = 4910615920f6f3c3421a9c2bec1bec7e
+Plaintext = 7fd6fb81c36e44b150af10e04683b1ec9b5dda87c71ff939
+Ciphertext = 144c4d2316f34824d242ba243b73e98cc52aa92e362c8996
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = c76846da496ed87b9c0f65c6266c9a822224acde9775efb186a4a5
+Tag = 25d05e5a2e76a90f6fe489fd74cab2a3
+Plaintext = d7aa4efa5d75195a400018bd38f7d8cd53fdffe88df1837f
+Ciphertext = 150d9a8b78d9c04239d66207a1f95021bbb1b7c70d7c3548
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = 4efbd225553b541c3f53cabe8a1ac03845b0e846c8616b3ea2cc7d
+Tag = be6af49ce97d5e0e77c7fd5d9cc6d932
+Plaintext = 5f94a2e48d348a1d56c55a659306e319c3d2ad78b9fe43a7
+Ciphertext = 9d337695a89853052f1320df0a086bf52b9ee5573973f590
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = 7631cf7822a545daefa16a5ec43c877d475a82d5aa2d51cec7fbb4
+Tag = 924b268cab915f999aea3e1cc3a88ccd
+Plaintext = a44b010fc1c659eac9241a58b11a73d7ce33156ddfc54c3c
+Ciphertext = 66ecd57ee46a80f2b0f260e22814fb3b267f5d425f48fa0b
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = e4da34663edc44370bfd8aa8315945471a893a1cc069628a071ee0
+Tag = c368f5af8e311e67209e02dfa2613377
+Plaintext = 28d157f5741f1be057d5219711414c0638b47d165a905a6a
+Ciphertext = ea76838451b3c2f82e035b2d884fc4ead0f83539da1dec5d
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = 077509eae1dc367540f87832c5780f6c5b29e180bc6c1fee38e826
+Tag = ad175fcad35d29396380b79a28784cff
+Plaintext = ba7432a8e34bfaa91b35c8dfd822d86850be39e63150257f
+Ciphertext = 78d3e6d9c6e723b162e3b265412c5084b8f271c9b1dd9348
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = a513d750ca1e8bf6cb7b8cea5204e064c15c2dc40d742b31cf5459
+Tag = 93b4b3e33d325359c9c651290ce73bed
+Plaintext = 3f5830b0ce8849a660af7d58a60c19a9824a3033bb5fed43
+Ciphertext = fdffe4c1eb2490be197907e23f0291456a06781c3bd25b74
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = e439db829c1291df49fc42c2fa1a92118c2665f11e13f28dc6f11a
+Tag = 71f88ca5857c6d801e726a01c621a0c3
+Plaintext = e69b2a243340df5dc70b2cb05be12e5992ee36f7d9f4ca84
+Ciphertext = 243cfe5516ec0645bedd560ac2efa6b57aa27ed859797cb3
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = a12c690568114fd7a677f49d74e84fc1a6b7f7d2a08693266c0a91
+Tag = 0592d360fc6a46aa18c4ce5d74fa4532
+Plaintext = 9de35b840a69a84701ffae1b1d2bf13c34b42a57d14c524d
+Ciphertext = 5f448ff52fc5715f7829d4a1842579d0dcf8627851c1e47a
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = 1813bf176a1127f4d508d7663ae750f9c4bcb84a6e26811ac60d46
+Tag = 8b772cef893495cf0a94e8ebf06e920b
+Plaintext = 9e2fa20bf76768a5a1467d90a048bb503a2c33bbbaa71653
+Ciphertext = 5c88767ad2cbb1bdd890072a394633bcd2607b943a2aa064
+
+Cipher = aes-128-ccm
+Key = fdf2b2c7fcb3789b4e90abe607dca2af
+IV = a69ddc66e63a3415f21009d53a
+AAD = cc6e9cc2699d3ba0e624e715599480d6b7dbc6eeea0d12a9236444
+Tag = b1851d571a1ef8aed565b784dcaaac4e
+Plaintext = 6681b1cbeceea57a828324831407280b00f4917ed52a10df
+Ciphertext = a42665bac9427c62fb555e398d09a0e7e8b8d95155a7a6e8
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = 9610949f6d23d5b1f3989b2f4e524fab4f297a5bec8ddad4f16cb616
+Tag = 2dd579cb0d201d22c86bbc7fbe47bd0d
+Plaintext = 109317556c21c969eda65a94176d7a11462c9ae18a865b6d
+Ciphertext = 4e6b967b1571c6d7b9e118b112b7ac949a4a175650316a24
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = 96118dbfe53434d8aed88769a535eb0c8b5849dca1c81c34626ac9b9
+Tag = f0dd7aef4a609f3587652173446ebd82
+Plaintext = 3e6c914a196e175079315b1c92b2b8a844deb472e249e3d3
+Ciphertext = 60941064603e18ee2d76193997686e2d98b839c538fed29a
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = 21fc96f73975298207f818909088295d6d6861677130ca258c2174f6
+Tag = 63e4405d45caf4836467edbf35089d87
+Plaintext = e0014147d5771b4380dc0192d45f36f7d60776d1ba47374d
+Ciphertext = bef9c069ac2714fdd49b43b7d185e0720a61fb6660f00604
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = 72a5151abcb55933ff7c9314f3235eba2a400121454144c2670e8359
+Tag = 7441c813e90fac775eddb7290df059d9
+Plaintext = 0f1c6dffeda98f7a159f9cc61820bfb29910d8eaa41b751a
+Ciphertext = 51e4ecd194f980c441d8dee31dfa69374576555d7eac4453
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = dbbf192914b1ad73666e9f5e9c22c08ca398f7524af62b1046a863bd
+Tag = 34d9316f1f1c3142c1c9b26e5c220a32
+Plaintext = c1ddd14e380cc91324cf2a381df1da1ccffd90ae436a373a
+Ciphertext = 9f255060415cc6ad7088681d182b0c99139b1d1999dd0673
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = 28e4b88fbf04e9897057ff5bfde7eb04fa480256817a50fa281030b4
+Tag = c0b188e33bfab29b237d6c6920ce3418
+Plaintext = d4dae9c4cae92afb80f9a5c99383ff16e23a2ec942eed4d2
+Ciphertext = 8a2268eab3b92545d4bee7ec965929933e5ca37e9859e59b
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = d9ebc1cbfab9034317132a72e0f11c341331146a59e7a2f26bf4f3d7
+Tag = fdde04d21b876468bd9184101b5f32d0
+Plaintext = 8a188d40a6e6fbb06a9f06304349a7a808b092cc2fc10b9e
+Ciphertext = d4e00c6edfb6f40e3ed844154693712dd4d61f7bf5763ad7
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = 34ad69f192ae4dcab771aeeacf01bbd32609bcbbea8ff9df31ded719
+Tag = 068c65e9d0e5f1b81c86393900e64c19
+Plaintext = 590c1aac30ab166b1caff748452fc146765c372e226ffc26
+Ciphertext = 07f49b8249fb19d548e8b56d40f517c3aa3aba99f8d8cd6f
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = f5e50ce1f99ed5e9f2baa54b96ae7039234b1131e734ec190695d28d
+Tag = 06ab3b72c56c8df4a12dba89a2f21276
+Plaintext = 16d0522b2e691e42bd80ce95e00c8a7a1fc738169e904bdb
+Ciphertext = 4828d305573911fce9c78cb0e5d65cffc3a1b5a144277a92
+
+Cipher = aes-128-ccm
+Key = 7d870d7e52d3053c65eefad47764cfeb
+IV = 37d888f4aa452d7bf217f5a529
+AAD = 9b1e7e52ea1a12444d884866e11dcf367b70b816460936fdaebba36d
+Tag = 0170ca7b16d23537eeb3034105334699
+Plaintext = 0bddf342121b82f906368b0d7b04df1c682ecd4c2b2b43df
+Ciphertext = 5525726c6b4b8d475271c9287ede0999b44840fbf19c7296
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = 9ce65598cd1f86afc9aaaf172809570cc306333c25523f863c6d0e0154
+Tag = cb3b5151f327e65447e52c7525562c91
+Plaintext = 78d1e96af8cebdcc7e7e2a4ddcfa34f6cf9a24fb85672ad7
+Ciphertext = 9adb9a95a9379ad795d8d3ffd4e37a045160d6d727f974a6
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = e7c78ef4c4b959ee00cb1a09d71221a43892ef8ad705edd27ed85d03a3
+Tag = 34e5b08e27d8f5eeef0f064ff620652a
+Plaintext = bc59f18c8473941abc681a92741ab5ee13679829f542b8f4
+Ciphertext = 5e538273d58ab30157cee3207c03fb1c8d9d6a0557dce685
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = f1bce6f2a4bdd3a07ebf5f8d47f931d27e7e63389d70e1059f701216be
+Tag = 44c0a96baae318f4714f0206812516b5
+Plaintext = 5575d950312c14c89ac609dfb0b2fd1af732bb6aae5e8651
+Ciphertext = b77faaaf60d533d37160f06db8abb3e869c849460cc0d820
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = 3da3bb091016e54477dae88af1c84c1a51b59c1bb49a05deb6f32064e6
+Tag = 4e7bdce2dc6aae24178aab6984f31028
+Plaintext = df5947d8c6094ccc25816639ec42214b28731bfd7b8312dc
+Ciphertext = 3d53342797f06bd7ce279f8be45b6fb9b689e9d1d91d4cad
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = c4cd183071c37a8157c6930a7d4d530cf4b7eb021682327810bd48209e
+Tag = f18ece8260bd56ecdee768022d0dd8d1
+Plaintext = 2fbb6dc235761875411ef59ae06110df8f15f66b721b0fd6
+Ciphertext = cdb11e3d648f3f6eaab80c28e8785e2d11ef0447d08551a7
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = 0e0fece7b6b659b642668e8ba3dca330523e70279155f485f3f6f8041e
+Tag = 6f0fb3b7440b84ddc3cc53819c2e93be
+Plaintext = cd149d17dba7ec50000b8c5390d114697fafb61025301f4e
+Ciphertext = 2f1eeee88a5ecb4bebad75e198c85a9be155443c87ae413f
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = a35c6f70f637a9a5e6f215c694fdf65b6fd85f794ed3eaa1bc19abe592
+Tag = 29ca778c51f9320f121dd803ece8d5da
+Plaintext = 030390adb572f2bd2a6a4454fd68236cd1d465574328aa00
+Ciphertext = e109e352e48bd5a6c1ccbde6f5716d9e4f2e977be1b6f471
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = c2992096828325820e2d7acaa17ac789b6830ec3128dd7f904398afbec
+Tag = 9c223a5ad65120bfca4a5992e5ebc6fc
+Plaintext = f2d9cf953c8d3a051d9b3eae4307a3cb4fffaa2435b49586
+Ciphertext = 10d3bc6a6d741d1ef63dc71c4b1eed39d1055808972acbf7
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = c023763a285ea934bc5bc7ddfc2aefe2b3f9eafe7b87c61383dcc07990
+Tag = 5c3bc4f618ffb3a159f4e2d0622cea6e
+Plaintext = 4b92e8d2ffaa4af8f3e0ac037a900bd18e195f490a3d71e1
+Ciphertext = a9989b2dae536de3184655b17289452310e3ad65a8a32f90
+
+Cipher = aes-128-ccm
+Key = 8fcac40527c0e7ca8eaff265ca12c053
+IV = ae9f012fd9af60a400e20b1690
+AAD = 0a39ec0163c7aeb1b4fbe7cb4fa5b0592fade70f430e23730a23ed4160
+Tag = 6f099dce6e18435fba4d26c1e93bda0c
+Plaintext = 7c0e6a0d35f8ac854c7245ebc73693731bbbc3e6fab64446
+Ciphertext = 9e0419f264018b9ea7d4bc59cf2fdd81854131ca58281a37
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = 20c5ab290e6d97f53c74121951f39ba865b3acc465fa3f0fb8a591622277
+Tag = 1816df1e0e82bb7bc8105930ad6a2232
+Plaintext = 79d8841ab83279724ce35e1a8abd4e158168dcf388ab4c3d
+Ciphertext = d00d29396ffa9e691290d746527777bf96a851f306d4da0b
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = 0e205a4dc5d5ead0d9ff7f182dc140fc49511c01b0fdbc7e6d6cb5fdf027
+Tag = df823c8ccd466807f2bd1c4032f0cfeb
+Plaintext = 88b2572fbe7cf2b46df04db476ffedb41778ae2eb3c3aae4
+Ciphertext = 2167fa0c69b415af3383c4e8ae35d41e00b8232e3dbc3cd2
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = 48043560d60381e83c11d4bc9d997d3ee2add6b0524b779c62dfaa73ce0a
+Tag = 31f5be8c9965345c760c72cc1b7908d1
+Plaintext = d44bf28b010e076b45db1b053af03db718b60748da51db1f
+Ciphertext = 7d9e5fa8d6c6e0701ba89259e23a041d0f768a48542e4d29
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = f0729a8a2fd073699ab87b521cbe0420b43529556a505f5f87874d1a053c
+Tag = 381d94a828a95872ebdfda8a4c6a196b
+Plaintext = eab8cffb512eabe267cd64353552513defe97c2d10f35503
+Ciphertext = 436d62d886e64cf939beed69ed986897f829f12d9e8cc335
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = fc2cd69bb61223f713e33a5071d09bf2783640c307c22d836dd94952dd37
+Tag = 63931808533f4f70d7a78242ced110eb
+Plaintext = 001056926546c261fbbdf92b94498e038c2bcfd0b6345497
+Ciphertext = a9c5fbb1b28e257aa5ce70774c83b7a99beb42d0384bc2a1
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = 8f653c5c003c807d16d17f833eebb97c9c2f0e5aae3780a52ce53a6c33f7
+Tag = f34553198f8e40fde6473f9cf04f1de6
+Plaintext = 29ffaef9415fd300127ffd26ef324083a9d90e0f60e2ab4f
+Ciphertext = 802a03da9697341b4c0c747a37f87929be19830fee9d3d79
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = 8d05e7d3077151c6d9378cb08e049e4d7c28a908f7f7c079c46ff92cd01b
+Tag = 0fac20e8d45d2b0771d140b5e4a47c87
+Plaintext = 9874dc5ca1b541f7b21c7b3860fa6b0c3ab1b712ab0fca98
+Ciphertext = 31a1717f767da6ecec6ff264b83052a62d713a1225705cae
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = d4feb3ea76ac2945651f557406f3f38a2d7e9232ed55ff4eaf1201dd8255
+Tag = d3cacfe4281e52d79e60eeb38319bc3a
+Plaintext = 1e01c7128c821fb9c971a27fc7c6f9bb902fa735de583b8a
+Ciphertext = b7d46a315b4af8a297022b231f0cc01187ef2a355027adbc
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = 7cbb4ae995a3367a256cafd11cd6c6cab5bf3252fa97f27a8a1434ca9a27
+Tag = 8f0d7646a799b14288bb2f354b5d8847
+Plaintext = 51cd306fac7d20e3c7043eae3a6dfec046c5c24a666a0723
+Ciphertext = f8189d4c7bb5c7f89977b7f2e2a7c76a51054f4ae8159115
+
+Cipher = aes-128-ccm
+Key = ddf9f150cc3f1c15e8e773663c5b061c
+IV = 98c5036b7d54da9a1177105600
+AAD = bd40b06a4beded2be3d176266b10772c7fa2949f0a9b20d613af90c2daf5
+Tag = fd7f95e1d331e700aa9ef83f09b689fd
+Plaintext = fc5b26befc633a3e8ace011aa7a42bd0258a9f3dc14fc1c8
+Ciphertext = 558e8b9d2babdd25d4bd88467f6e127a324a123d4f3057fe
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = f8b08aa83bed09ca342249b2cf9e2b45a89dcfb8711a120395e455921af481
+Tag = 11297930fd44c63675b7cca70671ef4d
+Plaintext = 54390715b6e7c7bd51a234db059a51ba030cf22ee00b7277
+Ciphertext = cb629994c3418a662a8cde1b5f4d99aa7df66e24c53dc6df
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = 0351c969dd38eeaa4b9b0000e346eeb1a2cd462033c59d9e6e3331822045cd
+Tag = 7e77f5566ca2fd9293835bceb461dbaa
+Plaintext = 65b5e856a8cf35dffd42c5ba105cba4c434aa1c2a0390352
+Ciphertext = faee76d7dd697804866c2f7a4a8b725c3db03dc8850fb7fa
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = 5db8b6bc16740680f78fba917733a6899cdba5e4c10a8058963d1265681eaa
+Tag = ec2cf9f5d35521c1c000685e49d2ed42
+Plaintext = 9a7685e3daac43ccf22cad0df900ba8acddc5d420846118d
+Ciphertext = 052d1b62af0a0e17890247cda3d7729ab326c1482d70a525
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = e7d6024611210da0cfb90a9955195aa0a0539280a3a7c792a1540930daae2d
+Tag = 66f33dfb44ae413283b238616c6b99fb
+Plaintext = c18d9e7971e2ae5fc128777086338fbe194443324e2d2cd1
+Ciphertext = 5ed600f80444e384ba069db0dce447ae67bedf386b1b9879
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = 77a878c9c76f3e6a4ddd330d1d8828949d08e0fedffe0d8e2e557b29e7c78c
+Tag = 31df6fc6b4cf0b6332936ed7cfe9455e
+Plaintext = fcf8982f7342f1b953658453cd5ea413700eff00f1ee7d6f
+Ciphertext = 63a306ae06e4bc62284b6e9397896c030ef4630ad4d8c9c7
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = aa540554ee80dbffa475f702d862d6b60e0a4090792420a26d02926517723e
+Tag = 7c8162a815f2809601ad02595e2e0ff4
+Plaintext = 0d5690d2a7083ad6daf22b308314b8f5363aca77ca72835e
+Ciphertext = 920d0e53d2ae770da1dcc1f0d9c370e548c0567def4437f6
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = fae86f95dd06fb7fbae63a646615555aec8153dc328bdf79da5d4cc9677ed6
+Tag = 7fcaa11bdeab86f60f9cd0a2b45cee1a
+Plaintext = f6e313cc35e8f8812b10a44f8ad00b6893f8084d942effe0
+Ciphertext = 69b88d4d404eb55a503e4e8fd007c378ed029447b1184b48
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = fd525302d2fb246a47cf4e3a27808bda89d8488cf450f1a1c7df6eedd810ee
+Tag = 0a86a810881bd969744ad80f579400f1
+Plaintext = 91e961ea2eb750577c5137c609602dbfcc4c07955ba429ec
+Ciphertext = 0eb2ff6b5b111d8c077fdd0653b7e5afb2b69b9f7e929d44
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = 767b1bdf9793a512d3a84e99ef77b43011a3bcb8de4cd375dfe47a79293e01
+Tag = 250ca00d3231819ecdf501ad39c864f3
+Plaintext = 98438c4411bead6f30c89ead762a12bf39391d3652b78b7a
+Ciphertext = 071812c56418e0b44be6746d2cfddaaf47c3813c77813fd2
+
+Cipher = aes-128-ccm
+Key = b1dc81d116d94f5eced526b37c004b95
+IV = 97c8f69fb91b17299461fd8d63
+AAD = aac7014f606df6feec415a75e29015891007f07518c955875fbf5619262ff2
+Tag = 1224d1d0294d46981d7dc39114a693d2
+Plaintext = 540cb00c0eface3d1b2d632d80a642f53c78ff672a1ff6ff
+Ciphertext = cb572e8d7b5c83e6600389edda718ae54282636d0f294257
+
+Cipher = aes-128-ccm
+Key = 5a33980e71e7d67fd6cf171454dc96e5
+IV = 33ae68ebb8010c6b3da6b9cb29
+AAD = eca622a37570df619e10ebb18bebadb2f2b49c4d2b2ff715873bb672e30fc0ff
+Tag = 7c4b4fa597666b86dd1353e400f28864
+Plaintext = a34dfa24847c365291ce1b54bcf8d9a75d861e5133cc3a74
+Ciphertext = 7a60fa7ee8859e283cce378fb6b95522ab8b70efcdb0265f
+
+Cipher = aes-128-ccm
+Key = 5a33980e71e7d67fd6cf171454dc96e5
+IV = 33ae68ebb8010c6b3da6b9cb29
+AAD = 55a62968c222a8501d1ae56a9a815667f8a9554607b7c56e6753f8fa92a4d054
+Tag = 423862a715dda2f63a4197f894515803
+Plaintext = 764dbefb42644d18d23e5e4568685d14dbacfa418d36c4ef
+Ciphertext = af60bea12e9de5627f3e729e6229d1912da194ff734ad8c4
+
+Cipher = aes-128-ccm
+Key = 5a33980e71e7d67fd6cf171454dc96e5
+IV = 33ae68ebb8010c6b3da6b9cb29
+AAD = f8436e35b7a1c810ac6aabe8e2d48a3678d19e1e96337dada514ee5fc075fce4
+Tag = c200f190bd700f6108f9959f6d12f0f0
+Plaintext = cecef24b62676a5623bedae8087b9b05d7e22b41a14dd2d5
+Ciphertext = 17e3f2110e9ec22c8ebef633023a178021ef45ff5f31cefe
+
+Cipher = aes-128-ccm
+Key = 5a33980e71e7d67fd6cf171454dc96e5
+IV = 33ae68ebb8010c6b3da6b9cb29
+AAD = 548e2152f3a15b8fb81dc01062d99f7b4fc8f074e5cbdc1030c97f8ccc02ec3f
+Tag = 3a66ebc4e0777a6fc140a51e04a10f86
+Plaintext = 53c164a4990c6e0637267ff2556c1542712fc584f6ff7458
+Ciphertext = 8aec64fef5f5c67c9a2653295f2d99c78722ab3a08836873
+
+Cipher = aes-128-ccm
+Key = 5a33980e71e7d67fd6cf171454dc96e5
+IV = 33ae68ebb8010c6b3da6b9cb29
+AAD = d100f1d08ef1e3eda4aef22cd970c2b785c4ff9b523c401b4064324aecf7f2d9
+Tag = b810cdc08db0a9966dffeb43ba26446e
+Plaintext = 15681d2121ac56a63b9d0a38b9c4eccf84fdb746d32c14b4
+Ciphertext = cc451d7b4d55fedc969d26e3b385604a72f0d9f82d50089f
+
+Cipher = aes-128-ccm
+Key = 5a33980e71e7d67fd6cf171454dc96e5
+IV = 33ae68ebb8010c6b3da6b9cb29
+AAD = eece934a807c9f21487cd810f15fd55d7bb4421882333ff2c43b0353de7fc5a6
+Tag = cfc5b397578f8d02a0b936ffac29b99a
+Plaintext = 412a8ef924ca156de860f147575e5731825f0a3759688928
+Ciphertext = 98078ea34833bd174560dd9c5d1fdbb474526489a7149503
+
+Cipher = aes-128-ccm
+Key = 5a33980e71e7d67fd6cf171454dc96e5
+IV = 33ae68ebb8010c6b3da6b9cb29
+AAD = 86311ff444d9be90459b6ee3652e1705ed0b5cdac3d27293ddea3378fb686ee5
+Tag = 2c3fcd6d618c260d51724126f257534a
+Plaintext = 54ba8a020d0876fa369dc32e8627f565ba3dda862ea0bcfe
+Ciphertext = 8d978a5861f1de809b9deff58c6679e04c30b438d0dca0d5
+
+Cipher = aes-128-ccm
+Key = 5a33980e71e7d67fd6cf171454dc96e5
+IV = 33ae68ebb8010c6b3da6b9cb29
+AAD = ab6efbc44a8906d5c067eaed71af467e130aaf170827a58beb03c55069674125
+Tag = bf8b2821920640b992b00cd1c9618025
+Plaintext = 7a15506fd1dae444d77b2a3ae7b57a8d5b4f10e25a9f78e2
+Ciphertext = a3385035bd234c3e7a7b06e1edf4f608ad427e5ca4e364c9
+
+Cipher = aes-128-ccm
+Key = 5a33980e71e7d67fd6cf171454dc96e5
+IV = 33ae68ebb8010c6b3da6b9cb29
+AAD = ddb640923d083725587aced81ae1d7409983d1f1e3ccc8dcf94376dc1bbcae8b
+Tag = 4cd52d41a968284af8907ccbb4588cc0
+Plaintext = b18a61a89cd698f32e059b7a2a9f62a46be2c248790a9915
+Ciphertext = 68a761f2f02f30898305b7a120deee219defacf68776853e
+
+
+Title = NIST CCM 192 Variable Associated Data Tests
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = b090155d34a76c8324e5550c3ef426ed
+Plaintext = 39f08a2af1d8da6212550639b91fb2573e39a8eb5d801de8
+Ciphertext = 6342b8700edec97a960eb16e7cb1eb4412fb4e263ddd2206
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = 167ee33e75d05023a7d63c770cfef2ea
+Plaintext = 296fbda0017351491c2187273fbde2c3a427170e430a703c
+Ciphertext = 73dd8ffafe754251987a3070fa13bbd088e5f1c323574fd2
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = 70647420f79c0d91cbbd69b806fe96a5
+Plaintext = eb61c284fe009921039ef6a9ce50e702823e44b35357923f
+Ciphertext = b1d3f0de01068a3987c541fe0bfebe11aefca27e330aadd1
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = 8a3ef2324754539ac774872282534386
+Plaintext = ffeccc6460d23fdcc387c697e75dbb959b78013a8282eaa4
+Ciphertext = a55efe3e9fd42cc447dc71c022f3e286b7bae7f7e2dfd54a
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = e292cd0e32535a848e327bc53cdae94c
+Plaintext = 90958d7f458d98c48cbb464c74bf495a49846dd468c514e9
+Ciphertext = ca27bf25ba8b8bdc08e0f11bb111104965468b1908982b07
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = bb21701af36936be5f62d02b84df87c3
+Plaintext = a4fad5205d38206e25097075687ca86032b95b3fe7e82a07
+Ciphertext = fe48e77aa23e3376a152c722add2f1731e7bbdf287b515e9
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = 7da7f975367be24341e4af51b8bb156a
+Plaintext = b37114c65372b052cbeecf83d05a5da44f7b5bbff7d986b5
+Ciphertext = e9c3269cac74a34a4fb578d415f404b763b9bd729784b95b
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = 360c6d50a96f316eda0b216cbb6380ef
+Plaintext = 9c0f0426f171ff18b2a4392f61fb4ee4a44c476fe03dc930
+Ciphertext = c6bd367c0e77ec0036ff8e78a45517f7888ea1a28060f6de
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = 34cd1bd98e8137b578a174e39efe09b8
+Plaintext = 7b6e0a480a40585545b0e940e8d97c9ec987bd3c0e9c16a8
+Ciphertext = 21dc3812f5464b4dc1eb5e172d77258de5455bf16ec12946
+
+Cipher = aes-192-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886
+IV = 15b369889699b6de1fa3ee73e5
+AAD =
+Tag = 909a895a3b08b63d7a2a1e75d25e7861
+Plaintext = 34dac6dbc28be62332a6935efc122e37b26ee100eb4033f8
+Ciphertext = 6e68f4813d8df53bb6fd240939bc77249eac07cd8b1d0c16
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = 67
+Tag = 7ff74e3b05b7d7c13284573bd3e7e481
+Plaintext = 100fa71462277d76ca81f2cfdb3d39d3894b0ca28074a0f0
+Ciphertext = 36e2415b4f888a6072f260d7e786d803be16f8b9cbee112d
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = 17
+Tag = 3ee7ce845f85dfc770d96dee9ca54ccd
+Plaintext = 0217eb6778691f8dfe2d0e5241f05fcbcf97b9171f4de3f0
+Ciphertext = 24fa0d2855c6e89b465e9c4a7d4bbe1bf8ca4d0c54d7522d
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = dc
+Tag = dc14ddd8ae0aa5d810040a8d1d4da1e9
+Plaintext = a78b7bc6c1a7250c5fc236f2a8343725a9a7bd3ca81b53e4
+Ciphertext = 81669d89ec08d21ae7b1a4ea948fd6f59efa4927e381e239
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = 0c
+Tag = 6b40dec7e647720f1f5e8474bf570c2f
+Plaintext = 390c808d998582793bb10ee60568eb8d975c51d68b4e4da9
+Ciphertext = 1fe166c2b42a756f83c29cfe39d30a5da001a5cdc0d4fc74
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = 3e
+Tag = c10c4aac45d90119cce490cc8681a49f
+Plaintext = bcd9747fb54184b61b2e9e049caa75e22006e250f3722c0e
+Ciphertext = 9a34923098ee73a0a35d0c1ca0119432175b164bb8e89dd3
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = 7e
+Tag = f9a95091d2cab7d3d9fa3e10d3e67ac9
+Plaintext = d0342e3cd2c1142b642da7297ee3b9978cec405e6810f12f
+Ciphertext = f6d9c873ff6ee33ddc5e353142585847bbb1b445238a40f2
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = e3
+Tag = 180f7818c373e89f7ff3003f53260060
+Plaintext = 7fab91d1aa072947d22f0dc322355a022fe7f0747f4a184b
+Ciphertext = 5946779e87a8de516a5c9fdb1e8ebbd218ba046f34d0a996
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = 3e
+Tag = 1905f581585e59e3c8c038b5bf966559
+Plaintext = e487143dc4d98dcc6a2dfe6ee0f85d565d1f46bb0fafe62a
+Ciphertext = c26af272e9767adad25e6c76dc43bc866a42b2a0443557f7
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = 3b
+Tag = ea56569c34f8d9eea23e85fec18cfc51
+Plaintext = 976b489244ed6789a34251500057d1d4a3229367a42b9066
+Ciphertext = b186aedd6942909f1b31c3483cec3004947f677cefb121bb
+
+Cipher = aes-192-ccm
+Key = 9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a
+IV = cdf4ba655acfe8e2134fa0542f
+AAD = a5
+Tag = 212da23548f2ca4e9a8a07962be6422c
+Plaintext = 71efa75961dfd60ad533082a8cfe111214eb02573adc4591
+Ciphertext = 570241164c70211c6d409a32b045f0c223b6f64c7146f44c
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = 1c8b
+Tag = 0ecdbc200be353112faf20e2be711908
+Plaintext = 262f4ac988812500cb437f52f0c182148e85a0bec67a2736
+Ciphertext = e6d43f822ad168aa9c2e29c07f4592d7bbeb0203f418f302
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = 9db5
+Tag = 015e5cd97b7dd3d981321ae0b2d99e1a
+Plaintext = d5982c462ad40458660cd7b120ce07fce9afe812caedcebd
+Ciphertext = 1563590d888449f231618123af4a173fdcc14aaff88f1a89
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = 69cf
+Tag = bf3e75863c7acd2699caba3cc301f4b2
+Plaintext = 1a95f06b821879df3fd3ac52fc99a7c1d3e9775263b7d036
+Ciphertext = da6e85202048347568befac0731db702e687d5ef51d50402
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = 6c6e
+Tag = 5d6a8f7a9f52a8038aa9dc1bdc9ed876
+Plaintext = 373c157e59b934a1afb57d4c5dd9ca7fb736b206a6210bef
+Ciphertext = f7c76035fbe9790bf8d82bded25ddabc825810bb9443dfdb
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = dafa
+Tag = 8a15603f10cbfdb041f8b2b12cc8f037
+Plaintext = 26e10a2ed8cc883a6552aee162c5542ff8bb8e758a1975f8
+Ciphertext = e61a7f657a9cc590323ff873ed4144eccdd52cc8b87ba1cc
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = c8b1
+Tag = 1278bf62ba6a4819513d49fdcdb45480
+Plaintext = dd235b05c15479dfe0326ba206ac784eca50038bbeb35d32
+Ciphertext = 1dd82e4e63043475b75f3d308928688dff3ea1368cd18906
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = af48
+Tag = 8b4d00309b50f9ea72f8105c94475b52
+Plaintext = a0818342a5cae4a90ef281d3d1289d83f273f418a545fcbf
+Ciphertext = 607af609079aa903599fd7415eac8d40c71d56a59727288b
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = b1cd
+Tag = 220ba58e97936612c4183ba86705b2f9
+Plaintext = 33c0d06b6583bb4d15b4a07364c4be70ac6e72795c3dae0f
+Ciphertext = f33ba520c7d3f6e742d9f6e1eb40aeb39900d0c46e5f7a3b
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = 649a
+Tag = 87d602dc85bb260fb3df1221e2fbd10c
+Plaintext = 3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863bde9
+Ciphertext = fb5a67c9744faec46fa7e127d646ed5f8be555566a0169dd
+
+Cipher = aes-192-ccm
+Key = 393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26
+IV = fe7329f343f6e726a90b11ae37
+AAD = 593c
+Tag = eb3835b7eecad6dac9785ad1d370ede4
+Plaintext = a97faefcae36732fcfe47736c2334ea7d411bf7638b0c019
+Ciphertext = 6984dbb70c663e85988921a44db75e64e17f1dcb0ad2142d
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = a4490e
+Tag = 91c88a3cb4fbafcb8a4a157d587d7e39
+Plaintext = 6372824bf416cd072a7ad0ae5f9f596c6127520c1b688ab4
+Ciphertext = b14a07bdc119d87611342c4c6935c5786ff1f9ae2eb49e61
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = 5cad2e
+Tag = 235c34d1390bba5b008c3fb29c2df958
+Plaintext = 295f4f3417a77fcf0bbda17b0fd629ad57a6086573c87eb1
+Ciphertext = fb67cac222a86abe30f35d99397cb5b95970a3c746146a64
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = ebdf4c
+Tag = 5a733bba0a6992d0664dc77d2b5d194c
+Plaintext = 86f354a505de941d34cd98e3af3706d56a938ab9a2797182
+Ciphertext = 54cbd15330d1816c0f836401999d9ac16445211b97a56557
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = 7c0d70
+Tag = 0902a31b15eed99c2dc4ed1bf11cad96
+Plaintext = 88c3bfb546abe2f6bfc92a7c56c627e24ab92a8a87a6b43c
+Ciphertext = 5afb3a4373a4f7878487d69e606cbbf6446f8128b27aa0e9
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = 8fa501
+Tag = 2f25595ae00103d4eb20288158132e7d
+Plaintext = 75d4216bad77943bfe82be216157843b0da0fd16eeee8471
+Ciphertext = a7eca49d9878814ac5cc42c357fd182f037656b4db3290a4
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = b7aca7
+Tag = 60e67693b509ea4795b7da32c5c5d17f
+Plaintext = bf1401e8dcf6f681ed6dd74c7e23b7e54b384608b0e5ec52
+Ciphertext = 6d2c841ee9f9e3f0d6232bae48892bf145eeedaa8539f887
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = 1f283f
+Tag = 80ef8ea380a1a0a38b2c20288e637a9f
+Plaintext = 7e623e7ef7d0a678b5d22a8402d89220f4f1bf759e3084dd
+Ciphertext = ac5abb88c2dfb3098e9cd66634720e34fa2714d7abec9008
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = e93f31
+Tag = d553aafe8536385d34c412c14d3a1563
+Plaintext = 14f80e7a6298d85d31fb80376a394a8f88b0ae47f00450c7
+Ciphertext = c6c08b8c5797cd2c0ab57cd55c93d69b866605e5c5d84412
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = 27e9a5
+Tag = f594d366c8fc826ce58309e9053c27f7
+Plaintext = 3330df12249639961f562a74b34f60b0a8bc7c783f6572fd
+Ciphertext = e1085ae411992ce72418d69685e5fca4a66ad7da0ab96628
+
+Cipher = aes-192-ccm
+Key = a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a
+IV = 6a850e94940da8781159ba97ef
+AAD = 72d566
+Tag = cdd6ac6c42cd3d11e0344a9c1001e253
+Plaintext = 1a1860ac8c11c5d262f8141738cae8ff91ca05906dc98bb4
+Ciphertext = c820e55ab91ed0a359b6e8f50e6074eb9f1cae3258159f61
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = 8ffc0e3d
+Tag = 99b2e1e803550dcdde55fd66ecb45edd
+Plaintext = e8c1a89228d8212f75c136bab7923a89f9fea18e781cb836
+Ciphertext = 66b5d782323925e1bd0a8413a9a5a881356453d5df2cbeb1
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = 2b4f9cfc
+Tag = 9e8fbc507244ba234a0581dc69962a66
+Plaintext = a12c6324e022affd61b7e0d8cccbeb23e2e6c65355c1d586
+Ciphertext = 2f581c34fac3ab33a97c5271d2fc792b2e7c3408f2f1d301
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = b4de3039
+Tag = 28a2857099af20a4ae08e687bdb02c75
+Plaintext = 7cccb26f1dd227bc77458b99fd9e00f8e801adaece7bfcd1
+Ciphertext = f2b8cd7f07332372bf8e3930e3a992f0249b5ff5694bfa56
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = bc59f18c
+Tag = e33a6416e387d9e571a1954471ec9cc7
+Plaintext = 692b53c1355475c71ceff0b0952a8b3541b2938270247d44
+Ciphertext = e75f2cd12fb57109d42442198b1d193d8d2861d9d7147bc3
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = 4fd9fd39
+Tag = 180f9735f994c8335e593f30b331a920
+Plaintext = 7e3e755e25bbe78d4a7770f9356ab9f4ff1bbfdba46383f5
+Ciphertext = f04a0a4e3f5ae34382bcc2502b5d2bfc33814d8003538572
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = 296cd04c
+Tag = 91990fa537d2657d01f66872ba9af22f
+Plaintext = 997b712cd9295dc43cc19b40679f218c27af3e8c638d2e5d
+Ciphertext = 170f0e3cc3c8590af40a29e979a8b384eb35ccd7c4bd28da
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = 88037d3e
+Tag = 4915cb93e84028c7aedce1a2dadbb6bb
+Plaintext = 577981ccb6c893dfe6405075fcb41507de7f9bfda860791f
+Ciphertext = d90dfedcac2997112e8be2dce283870f12e569a60f507f98
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = fc4bb852
+Tag = 25baa6385af8d7b807a2d2ab19aa4999
+Plaintext = 37ba9f57ec230675ce060ba3d388095adf15907aa0b0673d
+Ciphertext = b9cee047f6c202bb06cdb90acdbf9b52138f6221078061ba
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = f40ec14f
+Tag = 6adcdb44870e1105b7318d8bad0af957
+Plaintext = 401e0cdc132a9e4a9b5ceeed3c181f67e5203ea69508deff
+Ciphertext = ce6a73cc09cb9a8453975c44222f8d6f29baccfd3238d878
+
+Cipher = aes-192-ccm
+Key = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0
+IV = ba356d392c3f700f4f2706a4ca
+AAD = 90e2c63b
+Tag = 8b079fb71d45bd985bffd343c3362653
+Plaintext = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+Ciphertext = 8c40a5f5a79be2a2af34beb3212d8b12c1e13ceff68c2dfa
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = a468f08d07
+Tag = fe4d3a3bb25f89f692884be230c6035c
+Plaintext = d3bef460223c81e4579c9d1d463ac5e0881685de1420a411
+Ciphertext = abb85db49a9b1c8724ecbc734cc8373bd20083cfa4007b1c
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = 4497649a54
+Tag = d05ae56511a230627e02d066c52a919e
+Plaintext = 81ad3f386bedcbf656ff535c63580d1f87e3c72326461ee1
+Ciphertext = f9ab96ecd34a5695258f723269aaffc4ddf5c1329666c1ec
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = c30ddd994e
+Tag = 8ef92fc17dca026f1ac1eaf78a05017c
+Plaintext = 84b88264afec06b370dfcebf5e1d3e2c1f005faf248b3215
+Ciphertext = fcbe2bb0174b9bd003afefd154efccf7451659be94abed18
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = 9573270f7e
+Tag = 38eddff1e60e2d9ae74a936364b8df21
+Plaintext = 9e4c8aa9b58a8eabc5586892f5541000b43f17d9a051a040
+Ciphertext = e64a237d0d2d13c8b62849fcffa6e2dbee2911c810717f4d
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = 40336790fc
+Tag = aa3d464ad89cae59b474d019a5a7605c
+Plaintext = 260f67122dfbe03365bc9e35e9d4ac4b2eb150eddb30857d
+Ciphertext = 5e09cec6955c7d5016ccbf5be3265e9074a756fc6b105a70
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = 0b310c8529
+Tag = beab0c520e64939c6950c0fa406eafb1
+Plaintext = 1d55e7352bd895c4ef77389a7225c664f72b38c8de778d57
+Ciphertext = 65534ee1937f08a79c0719f478d734bfad3d3ed96e57525a
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = 5756b2c681
+Tag = d22d339c382343bf39c239fd64c2a64f
+Plaintext = fbd315e1f5bd0f0e60ee6684c88f3543452c62ea0701d11d
+Ciphertext = 83d5bc354d1a926d139e47eac27dc7981f3a64fbb7210e10
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = 3b919e3665
+Tag = fcd6b562a1b6aa10be92a81f99ed540c
+Plaintext = d68d6556c5a5b1f5a123389b3ce966d5837cb8fcf5accfff
+Ciphertext = ae8bcc827d022c96d25319f5361b940ed96abeed458c10f2
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = 58749b643f
+Tag = 4b853022237d94d253b375bf2150e699
+Plaintext = 062cb6962fa5b3a6239b95f3a51b478a1f32b081dc538a80
+Ciphertext = 7e2a1f4297022ec550ebb49dafe9b5514524b6906c73558d
+
+Cipher = aes-192-ccm
+Key = 16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72
+IV = d4ef3e9e04f1b7f20ffc5a022e
+AAD = a5d50c008b
+Tag = e7aee0d403b2cf6f8b993eebd6b93615
+Plaintext = 08c62ff9bd7bcf189f530d5065f8764532d2692f69858483
+Ciphertext = 70c0862d05dc527bec232c3e6f0a849e68c46f3ed9a55b8e
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = 28130f938c45
+Tag = eadc9601adf9fbdf4e3e94b395b0a332
+Plaintext = 6f3938932b5c1280311e892280d8a822a828a0be7fdb1bcd
+Ciphertext = df48662fe134e75a85abc2cece2c3b6236c88a70fa792e9b
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = f600024a7bf9
+Tag = 0692a40a6aba8d7c5addae21de90fea9
+Plaintext = 0af7345e71f4e8886503395ade0b0296a5856e086638b06a
+Ciphertext = ba866ae2bb9c1d52d1b672b690ff91d63b6544c6e39a853c
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = 4eef510d1f48
+Tag = 22f64becb581070411957e632e19bb8f
+Plaintext = 37f57772f056f45a5ce9f46d27be1858980c8935b9c839b7
+Ciphertext = 878429ce3a3e0180e85cbf81694a8b1806eca3fb3c6a0ce1
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = 4c9c76b6fad5
+Tag = 08c59f83aa97d069b6d83d9387051f43
+Plaintext = 8bb10c82bcabb7fb2b169252ab443b01df217cf908b8c241
+Ciphertext = 3bc0523e76c342219fa3d9bee5b0a84141c156378d1af717
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = 5572ecfc7e53
+Tag = f04686ee1d7b985d903f1de6cf78f8f4
+Plaintext = d1ccb4654a22b1afe32f3d3035fdccd87e9cbed83c679007
+Ciphertext = 61bdead9804a4475579a76dc7b095f98e07c9416b9c5a551
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = bffdf9d20d74
+Tag = f8118f1b9f39b51965ae9ef1bdb40111
+Plaintext = f990a8f6ba14065d48665db36eb470c49f38e2b6376a9bde
+Ciphertext = 49e1f64a707cf387fcd3165f2040e38401d8c878b2c8ae88
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = 3f27e678c580
+Tag = a3236d02f33f49759f281315e449bfef
+Plaintext = f8c7d89639ab742a8bcfffe776e868d671e1fbdd55807a8a
+Ciphertext = 48b6862af3c381f03f7ab40b381cfb96ef01d113d0224fdc
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = 1294cb9db5f5
+Tag = e74770a07c242c3854ceb242dadc1976
+Plaintext = 8601cfd7d935e8a8487b9c39d55ca27096255f2eb9e009e3
+Ciphertext = 3670916b135d1d72fcced7d59ba8313008c575e03c423cb5
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = cec271332b75
+Tag = d6c65f19175cfa49898655ccdddb864a
+Plaintext = 77c85b8022f58337b364142a2474fe5cfddb31cfca48af46
+Ciphertext = c7b9053ce89d76ed07d15fc66a806d1c633b1b014fea9a10
+
+Cipher = aes-192-ccm
+Key = 1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63
+IV = e300fc7a5b96806382c35af5b2
+AAD = da06bd140502
+Tag = 458822e49e69031431b3eea872a72eb7
+Plaintext = b0f2db802475fa70af02057373844f637a3244cda4b4f93d
+Ciphertext = 0083853cee1d0faa1bb74e9f3d70dc23e4d26e032116cc6b
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = 076887d2abe900
+Tag = 18d1531a066de60a95d2924a6910e990
+Plaintext = 83c24f3a77b83b4ef45277ba90225f3ba1722312f52b1a07
+Ciphertext = 19d880f1d959a68f162de243d4a45747ace704613359b272
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = 7535bcc6fbd1a0
+Tag = 6dbf58406020e6df7b312b6825127f9a
+Plaintext = 24f85ef683cc521387f484bc0b2ad9172f61884c09a9718c
+Ciphertext = bee2913d2d2dcfd2658b11454facd16b22f4af3fcfdbd9f9
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = f4f96d7b4384a3
+Tag = 64dd755177efc87f8b1daf1fd88e51a6
+Plaintext = 212bedfa06b5e1a2c3a2f31f6f791dd9df8ef26077821c0a
+Ciphertext = bb312231a8547c6321dd66e62bff15a5d21bd513b1f0b47f
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = 3b7e3d9c1a7fa2
+Tag = 0be31cab31f1a20805d5c07dc516d707
+Plaintext = 8b9036914bb0f440c8dbcfde9b9547be5e5ef1f56492c75e
+Ciphertext = 118af95ae55169812aa45a27df134fc253cbd686a2e06f2b
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = a8c35fae8912d6
+Tag = 399df9a45ad153c0dfb3fec3b9d6f7c5
+Plaintext = 50f3f3a91bf6fd9573d5ef54b9bb5805205b2f9865d81fd7
+Ciphertext = cae93c62b517605491aa7aadfd3d50792dce08eba3aab7a2
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = db636541f2429d
+Tag = e20b7da94eac8c7ef8478671165e0d82
+Plaintext = 6fbda8d435555e735443f1e6bc09e96065092efd89edd64a
+Ciphertext = f5a7671f9bb4c3b2b63c641ff88fe11c689c098e4f9f7e3f
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = a8de55170c6dc0
+Tag = 4979c35bdbf9538666b6fa57f0f915d8
+Plaintext = 640ef4c246a2c6e16ddc49072a5aeef70319149ffba071ef
+Ciphertext = fe143b09e8435b208fa3dcfe6edce68b0e8c33ec3dd2d99a
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = f8d64ce2aa66e6
+Tag = 752824a691da2e99374ae6c031d74ffb
+Plaintext = a14e3910766f31594a28ad2c3678c31d0c3aee88484ca6d6
+Ciphertext = 3b54f6dbd88eac98a85738d572fecb6101afc9fb8e3e0ea3
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = b3c340afdc53a8
+Tag = 04159a68706faa2e8c3376b4dbeb423a
+Plaintext = 1b8e0a09e6364020b4cac704dc19bfa79455295604cf9c9a
+Ciphertext = 8194c5c248d7dde156b552fd989fb7db99c00e25c2bd34ef
+
+Cipher = aes-192-ccm
+Key = 79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37
+IV = 8229d6d7e9e21fdc789bff5dcf
+AAD = 73824034001519
+Tag = e5adc7564721ead2af75cb98e61148b4
+Plaintext = 52c84a0735eea6c5c230644075ebfc5db0c3128056e7a8f4
+Ciphertext = c8d285cc9b0f3b04204ff1b9316df421bd5635f390950081
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = f427c47e10c45bb3
+Tag = 721961de5c768f4d19bd3034f44f08d2
+Plaintext = 54bc7e3c227df4e83252a5848fea12dfdb2d14b9e67c1629
+Ciphertext = 91e7baff2b42af63e26c87ce6991af22422c1f82906858b1
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = ca25504f3f5559aa
+Tag = 42968c638ecb8a2b358e8eaefd931efb
+Plaintext = ff4493fea916f49fbb3cae2838bc84e293531092cc0904ab
+Ciphertext = 3a1f573da029af146b028c62dec7391f0a521ba9ba1d4a33
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = 8215753d9efc5132
+Tag = f8ac11752fe51e354f3f8a68815539aa
+Plaintext = af16ab8558269a93d8e8c9e38f12a8768947d8b69be0e259
+Ciphertext = 6a4d6f465119c11808d6eba96969158b1046d38dedf4acc1
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = 9e7cdbc6202e6492
+Tag = 489de8e241dcab16bdcbf1a1ff4d8d10
+Plaintext = 744a167ae31a8ca20df82290766429de9ef0b7dfe199a78d
+Ciphertext = b111d2b9ea25d729ddc600da901f942307f1bce4978de915
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = b8d511d0ab86a07f
+Tag = 3fab212a1b6dc7b953e2bc211be194ae
+Plaintext = eeb39de1fe21b5aba654da45fe1481decb22365fa4cbe49d
+Ciphertext = 2be85922f71eee20766af80f186f3c2352233d64d2dfaa05
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = c74a5d4265f9f3d5
+Tag = 73918ab70fe048d6c5b63a01725eddfb
+Plaintext = e95c20e80153bae3fde3c3d82b6b33b35fc1959fa31a5d11
+Ciphertext = 2c07e42b086ce1682ddde192cd108e4ec6c09ea4d50e1389
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = fd849d3ada03181a
+Tag = 87089bc20867f474c1127aa1320f0000
+Plaintext = 6d00606c72cea3deaea5b51ae09e61924355e167058ef42c
+Ciphertext = a85ba4af7bf1f8557e9b975006e5dc6fda54ea5c739abab4
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = 56825a68681f498c
+Tag = 34a23b0b6ac4d297dd7832a5e2102272
+Plaintext = c47705d897a6c7e7aed710b96e2d8532c23b82090e21b114
+Ciphertext = 012cc11b9e999c6c7ee932f3885638cf5b3a89327835ff8c
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = 72e4da839913a26e
+Tag = dd665766c7af21ff890bd40178f1c660
+Plaintext = c822a1ee581cf85b0482c821473385bd3f28528e5e5760d9
+Ciphertext = 0d79652d5123a3d0d4bcea6ba1483840a62959b528432e41
+
+Cipher = aes-192-ccm
+Key = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+IV = 3820db475c7cb04a0f74d8e449
+AAD = 138457571ee8dafd
+Tag = 6a6a58bb772c79481dc26861ffbd68c6
+Plaintext = 3ffb82a83308da66e95ac63ae92931b09ffe0e42afbb4979
+Ciphertext = faa0466b3a3781ed3964e4700f528c4d06ff0579d9af07e1
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = 28d157f09a71da80dd
+Tag = 02ada34addf0aa2f4744ed2e07995491
+Plaintext = 0662e63c88e963d3e0cf2c4653515ae4474a2c78ab0394c0
+Ciphertext = 01dcd4dd3b8c1369518136ce45e8bb9df565b0ad231a887b
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = c17d311362c41d442b
+Tag = 38a27466b8741bffce44ef04b23af321
+Plaintext = d6df8b60c697093987b3d89a3667b36504b6ddddf12b0900
+Ciphertext = d161b98175f2798336fdc21220de521cb6994108793215bb
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = 006669ef1a11b65b1d
+Tag = 7d11372fb0dab1c99b159e5fe9f91118
+Plaintext = 49ad29ef5e82b08752ac5a50dd982e4bcb700005454ade6c
+Ciphertext = 4e131b0eede7c03de3e240d8cb21cf32795f9cd0cd53c2d7
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = 8eafce9ba466fd53eb
+Tag = 09e4898a4046f6ec9f40e412915007e4
+Plaintext = 385f9fb139dbf88561b7a500b0c7b835fe57e2698c6d9f76
+Ciphertext = 3fe1ad508abe883fd0f9bf88a67e594c4c787ebc047483cd
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = 796e55fbe7bed46d02
+Tag = 5d40a9902481bfac7ff33d08fb4b3d31
+Plaintext = 4ebb149b01cbacba32d11168ca61928ea149dcf2ee2c1001
+Ciphertext = 4905267ab2aedc00839f0be0dcd873f71366402766350cba
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = 8f958d796be0566512
+Tag = d972d09a17172161eb68a30b593b1bd6
+Plaintext = 0d974e5621caa1d86eaaee689ccbca57843373fcf20db407
+Ciphertext = 0a297cb792afd162dfe4f4e08a722b2e361cef297a14a8bc
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = cc879ff2d583a7288c
+Tag = 119cc26a80c152c253fbc36cb886e0fc
+Plaintext = f8e0dac6a691dfb231411b5c5f70a0daff83cc637b0c7bb3
+Ciphertext = ff5ee82715f4af08800f01d449c941a34dac50b6f3156708
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = 4765d696d19dec58bc
+Tag = 9de06cc5c3bc4ad75076c774576843fb
+Plaintext = 096a36396ccfa260f28fb0919157a5076b53506c51a2a4ef
+Ciphertext = 0ed404d8dfaad2da43c1aa1987ee447ed97cccb9d9bbb854
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = a004f283afc3309c31
+Tag = 135493b44f79a5774df6b2943b0bec67
+Plaintext = 5b943269be41e2758a4ea6a3cc621b711a8ba6002783aa72
+Ciphertext = 5c2a00880d2492cf3b00bc2bdadbfa08a8a43ad5af9ab6c9
+
+Cipher = aes-192-ccm
+Key = 39c03a0c8634047b1635348f284d3dc1e752ab40548eb337
+IV = 9e2ea8eb7f56087ee506925648
+AAD = cdd5d8aefe49a315ad
+Tag = 7a5da4a29a9012d78b6de6f1b3e8c9ed
+Plaintext = 5f27867109e74862ce0dbc9ba73c420b93067bdede17ae51
+Ciphertext = 5899b490ba8238d87f43a613b185a3722129e70b560eb2ea
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = 2352648299b0413cb2ce
+Tag = 0c96e8ab8774baa421f39c64a386c418
+Plaintext = 048c9ba4597c3bb595bfd5048e5e9a1296f30e5c0118b177
+Ciphertext = 25247a258e4ac0a988d8def60cc174a9d4578cd5346fb515
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = ce003c836a6f5f066053
+Tag = d453036cdc6bad0c5e770a6249a52e74
+Plaintext = 02ea8e7e488c863584f828df13dfeb68433294d11d9ca9d7
+Ciphertext = 23426fff9fba7d29999f232d914005d30196165828ebadb5
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = d11be73a104ccc6346d5
+Tag = 4627ad75bbfe17f3f5ddfd3dbc1045f3
+Plaintext = 6d5573c9279897d7d1602d8a95c04bb5ca3fad2dbe89a024
+Ciphertext = 4cfd9248f0ae6ccbcc072678175fa50e889b2fa48bfea446
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = 6a7b80b6738ff0a23ad5
+Tag = af8943f74706cc3394a170fd49f7011a
+Plaintext = 97a813e75d95d25c2edb1c705c4ffe4d7c08c756761fbc0b
+Ciphertext = b600f2668aa3294033bc1782ded010f63eac45df4368b869
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = a391acdb3a06dae4a671
+Tag = f22597f63074ca3533bb5e107860481f
+Plaintext = a78981ac244307451e4d3fd7f654b70cc4e6518aa47a3c18
+Ciphertext = 8621602df375fc59032a342574cb59b78642d303910d387a
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = 0b9f28f2d3215785f569
+Tag = 905b5609f593c6ea9281f66cd2e646dd
+Plaintext = 5d649d79ff0e304e164a383c74f13d7ffab145d00cb0ec2c
+Ciphertext = 7ccc7cf82838cb520b2d33cef66ed3c4b815c75939c7e84e
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = 7928b1091cbfb2eef0fe
+Tag = 428195355618ea0cf87260ad20b6d7b9
+Plaintext = 83a273687dced7b94d569f81d75508595cde668f06406183
+Ciphertext = a20a92e9aaf82ca55031947355cae6e21e7ae406333765e1
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = 3b74afb81f54a93c79d5
+Tag = 55019659f41a5f0430695b4ada9d8b8d
+Plaintext = b4dc3c059cf7b47dd0bb7f165a63fc80b5c6b5f3ca7eeb73
+Ciphertext = 9574dd844bc14f61cddc74e4d8fc123bf762377aff09ef11
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = a46ae4c71d4c9eb72fab
+Tag = 1514b252f33dc870c42260e48c4fa9fd
+Plaintext = 7e919581c5105d98717d0613e1ca869c6516506ea482d5c2
+Ciphertext = 5f3974001226a6846c1a0de16355682727b2d2e791f5d1a0
+
+Cipher = aes-192-ccm
+Key = e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10
+IV = 441ad5e1382e083a95224f395d
+AAD = a1ace61711f0a09ac17d
+Tag = c263c667d7ed58907452c092905d0b31
+Plaintext = 3a4558b55214f21cbd2ae2eda5a2321cfc2f102e059b744a
+Ciphertext = 1bedb93485220900a04de91f273ddca7be8b92a730ec7028
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = 521583c25eb4a3b2e46120
+Tag = ed2c87135861b43a99f258b6938f66e3
+Plaintext = 9f580cc6c62a05ce125c6bec109a48ca527ee26a64b14b68
+Ciphertext = ff0ff95bcb0bccd5e4aadd77ac6770f5013654eb3c6386fd
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = 31adb39e947f8883fa4b69
+Tag = 32b87476d66a1bd405f484ef9ac8ab7e
+Plaintext = f16bba081bddda83546eabc9a55c81a439720dd8562ce964
+Ciphertext = 913c4f9516fc1398a2981d5219a1b99b6a3abb590efe24f1
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = f05f39eb0a3d6460076aa8
+Tag = a120b455b366cb104fd8b6dc2c80471e
+Plaintext = 6baf784f63cf45a1836fa8f3609fff7870ce8cbd1e91268c
+Ciphertext = 0bf88dd26eee8cba75991e68dc62c74723863a3c4643eb19
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = 74c7a633ff73ff507009c5
+Tag = 0c8ca09f4bf06b1c27e75abf15112e49
+Plaintext = d8176a6de1c15a14c8b8b58725c179dc84c9308268d718d5
+Ciphertext = b8409ff0ece0930f3e4e031c993c41e3d78186033005d540
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = ab322a88cf44b9ca774415
+Tag = b3159274a7de3550baf759f7fae53dbc
+Plaintext = 3706e4d8ff748574f382e5f9b0a3b6258f1f360fd87001b0
+Ciphertext = 57511145f2554c6f057453620c5e8e1adc57808e80a2cc25
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = d6fe6e17221d4e06ed3ab9
+Tag = 16fba8d193e133e6f78daa39681cb262
+Plaintext = e02217394772deffe218c405e40f2a3a56ca01d55d6d3330
+Ciphertext = 8075e2a44a5317e414ee729e58f212050582b75405bffea5
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = 2739d2cdfcbe7d5cd7d28c
+Tag = 65f92db3b3d1c2de04c69c5d06b0e001
+Plaintext = bb713f74a884bd1a994adba87561d637853c6181290ef5e8
+Ciphertext = db26cae9a5a574016fbc6d33c99cee08d674d70071dc387d
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = 5841571299cd064a6262b7
+Tag = 6e4d20ab5ffad6f71155f6839dfdbb25
+Plaintext = 9641dedd50d80ac0abf7591436065fa2e23e4687abbb86e4
+Ciphertext = f6162b405df9c3db5d01ef8f8afb679db176f006f3694b71
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = dc5d7fd97bb3243ba585fa
+Tag = 0ebc3af2de52b8bee3d130fa973f716b
+Plaintext = aefda8501193edacb8abb94fff875529a537a462c4b9b69c
+Ciphertext = ceaa5dcd1cb224b74e5d0fd4437a6d16f67f12e39c6b7b09
+
+Cipher = aes-192-ccm
+Key = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+IV = 8e7d8a44244daa7df2b340993e
+AAD = 8789e0b3e0dc13d9725b37
+Tag = b5cd5a004a0ef28e30383bdaed8f93c7
+Plaintext = 65e53f549b62aca03f21ab2a494b93805e02cfecf4f12aa4
+Ciphertext = 05b2cac9964365bbc9d71db1f5b6abbf0d4a796dac23e731
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = f1e0af185180d2eb63e50e37
+Tag = 4484d93cb422cb564acc63d3d18e169c
+Plaintext = 6333bde218b784ccd8370492f7c8c722f8ef143af66d71d7
+Ciphertext = b9401a4927b34dc15e9193db00212f85f0c319781ec90e3b
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = ea74231e49e667ca1c21d46d
+Tag = c4c151d9927e6a9f19d47ff7d79ca6f6
+Plaintext = 3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e
+Ciphertext = e67d8fbeec794d42fc64d7f36a87d2ac22aafa440021ea72
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = 7f5871a8300471dc325f8289
+Tag = 959eee29be1415ab03444de0fa42707d
+Plaintext = c642c9722d84d708682350dc70bdaa9a1181a415a9e72b93
+Ciphertext = 1c316ed912801e05ee85c7958754423d19ada9574143547f
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = ee7e6075ba52846de5d62549
+Tag = ce97c1c8aea70de04580d7b37f8c014d
+Plaintext = 2286a1eddd80737a724ca941217e9f0232870b6c2f20d29c
+Ciphertext = f8f50646e284ba77f4ea3e08d69777a53aab062ec784ad70
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = a30f2fd445820cdf80014554
+Tag = 23b536f993381e525a14599dd5c02e80
+Plaintext = 92577d5db20391110309d490f52acecdfc18382f368bbe42
+Ciphertext = 4824daf68d07581c85af43d902c3266af434356dde2fc1ae
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = 0cfec933831644b468724e80
+Tag = d6ea722fdd82ede2c7b8832dde3cbe80
+Plaintext = 6803dc3f7c06568ca78ee5aa2e9b1b354a4f1e067ff6a25b
+Ciphertext = b2707b9443029f81212872e3d972f392426313449752ddb7
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = 6bd14e3bf91dc7fd6be07647
+Tag = 5c2994b2b469ad977564d83db1ebfe38
+Plaintext = 5580672e52aacb9d714a34c31c33fc221e13e8f90849adba
+Ciphertext = 8ff3c0856dae0290f7eca38aebda1485163fe5bbe0edd256
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = 6c6ad35e97d023217018162f
+Tag = ac31ebf9e255eecf3c69ddf198760556
+Plaintext = 1bd1bcc6766d251144376d91ff93ef83033d0e0ee546266f
+Ciphertext = c1a21b6d4969ec1cc291fad8087a07240b11034c0de25983
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = 52c35db85cc34b6efed180ee
+Tag = 3424079e3de87fa59c3d10fd62380a90
+Plaintext = 28f71a2fe498f89203a5d23e8f8fa64b124aea6459fe721d
+Ciphertext = f284bd84db9c319f8503457778664eec1a66e726b15a0df1
+
+Cipher = aes-192-ccm
+Key = 44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490
+IV = f3329154d8908f4e4a5b079992
+AAD = a96e4776270683ee7d0c9b6e
+Tag = 2258e1f3fc3eb7e976c86c8a21bd6569
+Plaintext = 5be078ead1926074afca81f9a97dc93dcb954c955e4343e4
+Ciphertext = 8193df41ee96a979296c16b05e94219ac3b941d7b6e73c08
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = ead4c45ff9db54f9902a6de181
+Tag = 9503d811701642143013f28ce384d912
+Plaintext = 3726c1aaf85ee8099a7ebd3268700e07d4b3f292c65bba34
+Ciphertext = fd80e88f07dad09eed5569a4f9bb65c42ef426dda4045011
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = e63b89e95df8338ecdcc885c3b
+Tag = c6d3f9c7b9f25e09ce164a11370b8b05
+Plaintext = 37f86aa62b1e31e9ded3e1a38a7e1a8a638d619ac109694f
+Ciphertext = fd5e4383d49a097ea9f835351bb5714999cab5d5a356836a
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = a2161536e263459e0b0a29a225
+Tag = e02b848b006c28803303fd97bdc35476
+Plaintext = 1749f5977197359a5d318d5fea38aba95b3603f1d7011e66
+Ciphertext = ddefdcb28e130d0d2a1a59c97bf3c06aa171d7beb55ef443
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = 8ac95a6ae0bce0fb07f85368ab
+Tag = 431de2bc45b2b726bfda92939a11f68b
+Plaintext = 0842bfb8b38283257c2ea58b29c8350775f1dbf15f73c905
+Ciphertext = c2e4969d4c06bbb20b05711db8035ec48fb60fbe3d2c2320
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = 44cc9b2510680c4d73f1938c77
+Tag = 786add8c2619f0782ca12312a1d64266
+Plaintext = 68d09fce5e89e4ef6d453b8ee326090cedb97b75b886c7b3
+Ciphertext = a276b6eba10ddc781a6eef1872ed62cf17feaf3adad92d96
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = d8a662ab8449bd037da0346a24
+Tag = b6bd4a09f9b4aa2864d39ff1a03e0ff7
+Plaintext = 45245de4ac6a6196a0b15b77c622a21bb50627379ddb4256
+Ciphertext = 8f8274c153ee5901d79a8fe157e9c9d84f41f378ff84a873
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = 8ed39da1d9179e77156eb909f3
+Tag = 19b6935778ffbc0953974de0a9d87a31
+Plaintext = e928e37dbe8389a53c650edc86f83cd3589a53dc8e45adfd
+Ciphertext = 238eca584107b1324b4eda4a17335710a2dd8793ec1a47d8
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = 423515f7bd592d6a7a2408661a
+Tag = 00a3da0d3ce34a272b51582a998f461e
+Plaintext = 4c3bdc6186297896097b3297ba90bcde78dc8a9efe3bd8b1
+Ciphertext = 869df54479ad40017e50e6012b5bd71d829b5ed19c643294
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = 5a6bc2cd6890a473d478a582b4
+Tag = 4ef28c338f497a40f550f2945734ad1a
+Plaintext = 1c5ebaeb7b926a39b8aaf65a4c484b113d6f2caafadc33ea
+Ciphertext = d6f893ce841652aecf8122ccdd8320d2c728f8e59883d9cf
+
+Cipher = aes-192-ccm
+Key = b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731
+IV = 13501aebda19a9bf1b5ffaa42a
+AAD = 7bdc26b5b4df58af539d91eb2e
+Tag = e07f1998e57ba9b611568632dc5cb9fe
+Plaintext = be5c9fee6babf569c66e6a0d0f3c4dc314f40c0aeca493f7
+Ciphertext = 74fab6cb942fcdfeb145be9b9ef72600eeb3d8458efb79d2
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = 5cc924222692979a8e28ab1e0018
+Tag = f58649400ac9e825b038d67f0c2a6f1c
+Plaintext = d3b36c6289ad6ae7c5d885fe83d62a76270689ce05fa3b48
+Ciphertext = bc4fcef401c2e1d1c335734ff23ea52c3474d2e6f31648a7
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = 21fb9cdd9b110bbbc6832275dfa7
+Tag = 3fa5ad4142e0b4650fa5cc8f7ef70d62
+Plaintext = a7742dd9c3e8bbad08157fbd01ebfb94e1639117c4b4eb5d
+Ciphertext = c8888f4f4b87309b0ef8890c700374cef211ca3f325898b2
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = 9919ddb6ee6c330646cd15953d39
+Tag = fec551d11b8647432cc4320173939600
+Plaintext = 297b4498bf5427e6341aa9275c1f62e3b0c9b150a195ae72
+Ciphertext = 4687e60e373bacd032f75f962df7edb9a3bbea785779dd9d
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = f94cfd1f8c7902a57784c10b9a5a
+Tag = a79a075ec2cacee1482b8328b697a3b2
+Plaintext = 2218868033e17220655f0196dab6193c58293ca105d467d9
+Ciphertext = 4de42416bb8ef91663b2f727ab5e96664b5b6789f3381436
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = 63f3fe58c348dc6bcbb44c3c370f
+Tag = 39cbe17b4edd64a3dcd2b8ae3352c04a
+Plaintext = 4a9bc26fb10000a57b9e73a8a3d30f66ef9de8782201ffa8
+Ciphertext = 256760f9396f8b937d738519d23b803cfcefb350d4ed8c47
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = dec0ce763833305aa9c9efdc2c65
+Tag = f54665c476d0741164685b0d81caca31
+Plaintext = 1b61b3ff3e4847a17f55f7565826b0e2ccc1368f4de32022
+Ciphertext = 749d1169b627cc9779b801e729ce3fb8dfb36da7bb0f53cd
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = 592ef6784ee839a049e0d96257fa
+Tag = 500d93b11fecc8b4560320878ba53550
+Plaintext = 32e5998b37987a38800f5bfe3132979ca1447314570aaef7
+Ciphertext = 5d193b1dbff7f10e86e2ad4f40da18c6b236283ca1e6dd18
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = 4a47a82b999a2a739959f153a091
+Tag = 3c2a41443578adaf31483bbb6b9f10b0
+Plaintext = 84acfb6cf10b301558e5acbf41bbbe0b145dc66dc600f4df
+Ciphertext = eb5059fa7964bb235e085a0e30533151072f9d4530ec8730
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = 4ceba98cc0ff5de1a7d580cf23d2
+Tag = 2232a856c07999e99a4701988b486ef2
+Plaintext = d7c73d77a286df38aad116843620911c92e11486be5fcb0c
+Ciphertext = b83b9fe12ae9540eac3ce03547c81e4681934fae48b3b8e3
+
+Cipher = aes-192-ccm
+Key = 13f179aa2a23bc90a85660306394940e9bb226ce3885ec01
+IV = aaa52c63ca1f74a203d08c2078
+AAD = 15e3b3c5794fececd703ac58ccb2
+Tag = b3a6d50a92f3183c0c5090edc3c7f822
+Plaintext = 140882c5d3534bb0861e7ba9423e67439a02ee6f0b0b00f3
+Ciphertext = 7bf420535b3cc08680f38d1833d6e8198970b547fde7731c
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = 39ba54a410a58a5d11615a2163cc3b
+Tag = 26a51fe5b9b598a17eb3da10f936813b
+Plaintext = 67d9728a88f1fac3af43ed6d634ba902896bd226858697d9
+Ciphertext = 360f0fc714994e3b59448b50cdd61d511b4f09e0e5fb5ac8
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = 38b0cca09d69320105d24ee3f96684
+Tag = ba673a94f4280e84724f4a2510165e9a
+Plaintext = a8365ba9fcfff060b28895f7a2d786c5991a8f7758962caa
+Ciphertext = f9e026e460974498448ff3ca0c4a32960b3e54b138ebe1bb
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = 76718dfb9c68acdd82592d96def39a
+Tag = 18865ab37be6f015316e0d177b6c2e91
+Plaintext = 497be597dd695cb159d8a64f44049c3b549ac927837b1b90
+Ciphertext = 18ad98da4101e849afdfc072ea992868c6be12e1e306d681
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = dd719ba1710916a546233c1494a7a7
+Tag = 3d903f67ad0d72fb8ffea2035216b769
+Plaintext = ca452c21383ebc3fb584f0d59a227374854983f243a3f460
+Ciphertext = 9b93516ca45608c7438396e834bfc727176d583423de3971
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = d893fa2bd7c70e21a5934dc2e99037
+Tag = 0b885e3e054f519d0355db1bd589bb35
+Plaintext = 3dd118ed65453d3d7844d8de78d7a43587ac5e9305b11464
+Ciphertext = 6c0765a0f92d89c58e43bee3d64a10661588855565ccd975
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = 97c60265a3a6993b97ac1b375a79b8
+Tag = 4a950e4bed4137e38787839e39924821
+Plaintext = a7375ba32251af0138bd9fd8fcd56a7c43ab2ca9a7fc0117
+Ciphertext = f6e126eebe391bf9cebaf9e55248de2fd18ff76fc781cc06
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = acfdf302ed116ac4755069d1704423
+Tag = ca94dd97fd2a5d50eb7dd6234b40c525
+Plaintext = d39d188f28521e4fb0a0c5e48e6d6efe4383c95b2535ea8d
+Ciphertext = 824b65c2b43aaab746a7a3d920f0daadd1a7129d4548279c
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = d449f97164aae9a3046624e98810bc
+Tag = 96f11450d5d2ba55ffb4a6cf7eab847a
+Plaintext = 758102470e221e30d87d2807b5f8b793a7a56c83eecf32a4
+Ciphertext = 24577f0a924aaac82e7a4e3a1b6503c03581b7458eb2ffb5
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = 3e6c914a196e175079315b1c92b2b8
+Tag = 64894e9218ecacd143fb62df69a13d33
+Plaintext = 1db875c4b4f9dd4926dfb5604d6c4d21aba7d905aed9d1b0
+Ciphertext = 4c6e0889289169b1d0d8d35de3f1f972398302c3cea41ca1
+
+Cipher = aes-192-ccm
+Key = c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2
+IV = 1ac53ba965cdaeeef7326a37e4
+AAD = e2b7b00d0cfbdfcc24f1819ae1869f
+Tag = 85a7c19bc9c2f8e36ed95015ebb679ae
+Plaintext = d7a75bc621addccbbe162b86d536d69c887c278384af54e7
+Ciphertext = 8671268bbdc5683348114dbb7bab62cf1a58fc45e4d299f6
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = 1c1c082eeb5b8548283d50cc2ace1c35
+Tag = 867601fe79a122a7817819655183283e
+Plaintext = 61fdd10938557080191d13dd6c3002dd445d9af988029199
+Ciphertext = 23c05927502a4ee6e61e4e10552d49b020643eab476eeacc
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = cae884fa25adedd883ef4e7c855def19
+Tag = 160bb976ab072aec8fcea8eab3dc5aff
+Plaintext = 8c7ae2c3c503e9072d6e04e44c2ea78fd24994503567a136
+Ciphertext = ce476aedad7cd761d26d59297533ece2b6703002fa0bda63
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = a350ed58c04473e113b9088b1fb9dad9
+Tag = 291b2c13a3f5e49ce35b9047ee1e8627
+Plaintext = 863f9a26182f131c594972398b52b3a01a9d314fd9390bf4
+Ciphertext = c402120870502d7aa64a2ff4b24ff8cd7ea4951d165570a1
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = cb7090f7a465782f680fd44cbc558107
+Tag = fdd9fd1d469a9042b80e6458d25292b4
+Plaintext = bd94c9ad6253c25dc417f87b6e52e03621ccf4b3bff5b402
+Ciphertext = ffa941830a2cfc3b3b14a5b6574fab5b45f550e17099cf57
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = 914cf55a3fc739b5f87ac7518cc4171b
+Tag = a8b8e82175ff30c69ea71d2cfb814ada
+Plaintext = c313bd213dc29c00691e25ce028884192e21a820003aece4
+Ciphertext = 812e350f55bda266961d78033b95cf744a180c72cf5697b1
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = adc8b69d84ef7ae62f9ca9f371d3488e
+Tag = 76fa36db27b2f84d1b8ab55e2fc89ab8
+Plaintext = 85e4e053b976e06a64dfa8523130cdd802d3e7c3d6d797c2
+Ciphertext = c7d9687dd109de0c9bdcf59f082d86b566ea439119bbec97
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = 29ed477994dd231d3a71157eb56d219d
+Tag = 0e32058ea939036805a735198934a072
+Plaintext = c77aae5fd09dc9bceee7428e0734d4b0556528396a58f909
+Ciphertext = 85472671b8e2f7da11e41f433e299fdd315c8c6ba534825c
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = 494c8f931029a4919e2dcbc16512a8bf
+Tag = 37098c81475f8a1d8f3b0e63d499d387
+Plaintext = 1f47273103f265f963e498878361c06c01a5ffcfb630a161
+Ciphertext = 5d7aaf1f6b8d5b9f9ce7c54aba7c8b01659c5b9d795cda34
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = 53200bc5d1f1fb0eeff02d2bc42f7d54
+Tag = 9d7317973878957e8fc1fa57a025a3e9
+Plaintext = a38231af405dc7b70c8dbc8cb84e6be8a0dc2e95fddc2ce8
+Ciphertext = e1bfb9812822f9d1f38ee14181532085c4e58ac732b057bd
+
+Cipher = aes-192-ccm
+Key = d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c
+IV = 166fb8d0e110124c09013e0568
+AAD = 61e0e28bf344a9a1b04b15156e06498e
+Tag = b0aa1befae96e71b9d221673844b1cb7
+Plaintext = a0d3a94ba6bb3bedf38220d1cba7e91273ad19f9a1c436c0
+Ciphertext = e2ee2165cec4058b0c817d1cf2baa27f1794bdab6ea84d95
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = 03c2d22a3bb08bbb96b2811ce4b1110a83
+Tag = 2f9340b0d48a17ae1cc71d7515e61ee9
+Plaintext = 1bd3b5db392402790be16e8d0a715453928f17f3384c13a7
+Ciphertext = ad736402626df0f9393fe4491eb812725ad39d6facf20b5b
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = f390387610741d560325b5d2010d8cd4a0
+Tag = 717bae4c040561bcfcf80fd842ae8dd8
+Plaintext = c93aaa04279e451b6880ed7b7fdb3ca9e80ab76180434937
+Ciphertext = 7f9a7bdd7cd7b79b5a5e67bf6b127a8820563dfd14fd51cb
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = 891d7988a56415a7b433f463b1e80eaa62
+Tag = bc9fb15d874feccb6b5f581fa470734f
+Plaintext = 2611612ccb5ffefaa73195509bb52c641472bca0dfd09d49
+Ciphertext = 90b1b0f590160c7a95ef1f948f7c6a45dc2e363c4b6e85b5
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = 831c0fed5e600dd82d7d55669262a9a17d
+Tag = a72589ee50d23f925f7998ab3ccac37f
+Plaintext = 08136e946e306cde0544ddc2f3f4a529c89c7b77a5e635c1
+Ciphertext = beb3bf4d35799e5e379a5706e73de30800c0f1eb31582d3d
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = 32ca9d412d4ef0e89928496e96c9de7f2e
+Tag = 55c0b608f331dca47c65f5c879f2d532
+Plaintext = 695aaac402942de7d899cc3f741c7fb2b2d8247a7676cf29
+Ciphertext = dffa7b1d59dddf67ea4746fb60d539937a84aee6e2c8d7d5
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = 0746b2e6149c7f55854e9ca3e6861bf0e9
+Tag = b039bd916e923e2fc1f7c60eb59916fd
+Plaintext = 8f958d796be0566512f0512dcebd2e12f3160b05b72ae955
+Ciphertext = 39355ca030a9a4e5202edbe9da7468333b4a81992394f1a9
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = 0e4cbd1c574d656112bf6e70a8f23347f0
+Tag = ac07f2c0847069fe5be26e623033f532
+Plaintext = 367ecd1b71dfb96a84e2369f28705dfaebf0c73ed35d5364
+Ciphertext = 80de1cc22a964beab63cbc5b3cb91bdb23ac4da247e34b98
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = 1a05ff12412bf728497536534c234901ce
+Tag = f4e66a2b210e5a03bb10ff2926ed8a48
+Plaintext = a9ccee975feb10f635d548a8502f7c8b6adbd2be74117257
+Ciphertext = 1f6c3f4e04a2e276070bc26c44e63aaaa2875822e0af6aab
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = 3bd063a51c71fab5aeb47e7f8f958d796b
+Tag = ec90169d0c5c11fff8f255fedb13a99a
+Plaintext = 7df6220599d6235eb450989b6f0cd6c96db62b0d13afc4f4
+Ciphertext = cb56f3dcc29fd1de868e125f7bc590e8a5eaa1918711dc08
+
+Cipher = aes-192-ccm
+Key = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5
+IV = 924322a3ef0c64412f460a91b2
+AAD = f0d334e0a27c3d00d56b15c2ee426e6347
+Tag = 170141cf3f207c4f0fc1b0238477cfad
+Plaintext = 6f65a24344c32debaf9f8c3fa426fe0b139e8ad1c8b1fbbb
+Ciphertext = d9c5739a1f8adf6b9d4106fbb0efb82adbc2004d5c0fe347
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = 68d199e8fced02b7aeba31aa94068a25d27a
+Tag = 7e30b2bcc3f1ea9ec2b8f28bf0af4ecf
+Plaintext = d7a954dae563b93385c02c82e0143b6c17ce3067d8b54120
+Ciphertext = c6cfaa1f54d041089bd81f89197e57a53b2880cefc3f9d87
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = fc4bbe329a86089ebe2a2f3320dad55a9bda
+Tag = 3a6e6844102d6bb86986c030765d3393
+Plaintext = a206a1eb70a9d24bb5e72f314e7d91de074f59055653bdd2
+Ciphertext = b3605f2ec11a2a70abff1c3ab717fd172ba9e9ac72d96175
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = d8741e540330692d83cc806a8ac1c4742be6
+Tag = 3f92a80b1d82f8c1dc32bfe64adca12a
+Plaintext = 56ef76dbec6b8b46f5b7b4e311c0baaa6fcf54c69c0b9c3b
+Ciphertext = 4789881e5dd8737debaf87e8e8aad6634329e46fb881409c
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = c8b1992dfba55b4ab86b480546c861655e1a
+Tag = 2fb48ad162b0c0678674d79d26a6b5ef
+Plaintext = 2729636112f2abe2c76ea5e52a3f80b0f882f0f3b6f7c806
+Ciphertext = 364f9da4a34153d9d97696eed355ec79d464405a927d14a1
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = 347e12eec56e95aafcc7d25bf10fc756b4e4
+Tag = 81c7cd81c974d985bf24b7fe9542141a
+Plaintext = dd433eb7422c7c4dccee57a1679633ced3b5f08df763d457
+Ciphertext = cc25c072f39f8476d2f664aa9efc5f07ff534024d3e908f0
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = 45b35a04d6e2645e9a5aef206ed4e36199c9
+Tag = a7f6a5c04e59896074e1594706ab27e9
+Plaintext = 70523bc397417e09d791a4976960e02636ca7144a5681cf7
+Ciphertext = 6134c50626f28632c989979c900a8cef1a2cc1ed81e2c050
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = 378b48531fe34f55125b2f14f59715dd6ef0
+Tag = a9d16c3ab79276cff345444511940a9d
+Plaintext = 514cb462dd4b117f26cac22062fcbeb353650c71649a7b3d
+Ciphertext = 402a4aa76cf8e94438d2f12b9b96d27a7f83bcd84010a79a
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = 73ed686d6fecdc031cd97653137f269d6537
+Tag = f92bf8aa6facbe6f9607ea02b54a1bf0
+Plaintext = 7f0c2b261db3f3de0ce3a733f4b8c446c374567d96d00379
+Ciphertext = 6e6ad5e3ac000be512fb94380dd2a88fef92e6d4b25adfde
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = 5b0441107e5560be94f030a41cedbdb116d9
+Tag = e4936ee93b5c7a302913292df33c1700
+Plaintext = ebb3e2ad7803508ba46e81e220b1cff33ea8381504110e9f
+Ciphertext = fad51c68c9b0a8b0ba76b2e9d9dba33a124e88bc209bd238
+
+Cipher = aes-192-ccm
+Key = e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863
+IV = a727ed373886dd872859b92ccd
+AAD = feedcc5f8524fe7d49bcd178415b9f4c450a
+Tag = 93426b6193afe765a76b3dec00266e69
+Plaintext = 3216dce3b8b1ce0e79e40fffcac728ab191aaaf319d971d3
+Ciphertext = 237022260902363567fc3cf433ad446235fc1a5a3d53ad74
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = 36e15baafa0002efbb4bb26503b7e3b79f6c68
+Tag = b60a77b9d38740356b544b1c0f259086
+Plaintext = 344dc8b6bd66a1fbbe330a95af5dd2a8783dc264d6a9267d
+Ciphertext = 43b3b96aa5a54378f3bb573ffda3e154aa7f425fc3008175
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = 712b788f0276e2b5a58be80f9114a12ab2a268
+Tag = 5f750bb4cd42db3038e2c1622b72cea8
+Plaintext = 6d0546d4e95d1cfcb37a8f88a62064f5d95791311511535b
+Ciphertext = 1afb3708f19efe7ffef2d222f4de57090b15110a00b8f453
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = 07f77f114d7264a122a7e9db4fc8d091334a03
+Tag = 61e77b59ef7eeeae35bb53bb9543b64a
+Plaintext = 05024ce13b9057dd2c509db7dbcbd5585e4e64a1e2e380ff
+Ciphertext = 72fc3d3d2353b55e61d8c01d8935e6a48c0ce49af74a27f7
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = 899b036138cee77cd28382ba27984d858a6351
+Tag = 44a60fdb473098a11b2176d37b2c4643
+Plaintext = 77b8e735b13b10e45e411ab94c6fe1a9eb89f0a7af40ff1a
+Ciphertext = 004696e9a9f8f26713c947131e91d25539cb709cbae95812
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = 4b000440a8484a5201cd54aec058919769772e
+Tag = 58d4afc30a7f672ea34e05ec1843d848
+Plaintext = 6b21800ae599a15254bb33f0bb080788fb6e9fa054bfd8b2
+Ciphertext = 1cdff1d6fd5a43d119336e5ae9f63474292c1f9b41167fba
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = 73a222e681ed1ca47d92a6dd90625d895fbf29
+Tag = 4ef270e0f3b5e3ca0b8440af65c76e85
+Plaintext = bfa9d9af6e1f32b6626a1cd89b1c32513b5b50a18ddab028
+Ciphertext = c857a87376dcd0352fe24172c9e201ade919d09a98731720
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = 7109a3a36b286059bc1a1abb2767c92f884e3f
+Tag = ffb66991b38a0345fbbff5f2362f87de
+Plaintext = c68b1bc0050e19780ab53efbea175634f70a7245d966966e
+Ciphertext = b1756a1c1dcdfbfb473d6351b8e965c82548f27ecccf3166
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = cd15973753b94b77bb4b778de8b3b0cabbde85
+Tag = d033a087c44c2e44adbeb333aa9ded10
+Plaintext = 4256f1c9b64390fe2120df9fd38e497c2903c2ca5679ab75
+Ciphertext = 35a88015ae80727d6ca8823581707a80fb4142f143d00c7d
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = 6e5e0793855f7145e13a5872f563e5ec61cfd2
+Tag = ff9c8713422fe38d5bbf2dedccbffe10
+Plaintext = bb0036b34b0c20094d335a8c74f6b3dea42eeccf4145192e
+Ciphertext = ccfe476f53cfc28a00bb072626088022766c6cf454ecbe26
+
+Cipher = aes-192-ccm
+Key = e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a
+IV = fc9fd876b1edded09f70b18824
+AAD = f844684f5404e7d8eedfa20394b40b4f5d910a
+Tag = e75de56eabcf8e02c1a27705adef2732
+Plaintext = 86afa9cdd743916563ebfd3adbdd56e015ea3a4ebc61cfe2
+Ciphertext = f151d811cf8073e62e63a0908923651cc7a8ba75a9c868ea
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = 093ed26ada5628cfb8cfc1391526b3bcc4af97d9
+Tag = 6ca0e07e04674f21a46df2659a5905fb
+Plaintext = 37ab2a0b7b69942278e21032fc83eba6cdc34f5285a8b711
+Ciphertext = a3a60b422eb070b499cf6da0a404b13a05cedda549c6b93e
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = 7df13c9d2247aa40af7bbe2da98bd366d8b47b43
+Tag = 836597806f5da1d176c745d95c4fa46a
+Plaintext = 93925579b6367ff592ecbd59495fdeccb50f31ea4fa390bc
+Ciphertext = 079f7430e3ef9b6373c1c0cb11d884507d02a31d83cd9e93
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = 7f369bbc99b6f08049eeb43566269a174829d4dd
+Tag = f826dda99111691993027628c70ff6ae
+Plaintext = 8363aef9c7c34e1f8149de46c97d5ac79d38c6ed31ab1d12
+Ciphertext = 176e8fb0921aaa896064a3d491fa005b5535541afdc5133d
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = 04aa8442179f62babad0c006e36af0c21105f27a
+Tag = d074b018143a7ea1b5369b7f80eae20d
+Plaintext = 17281acb525b13653000ab45d86e70106c10a93c99b18f76
+Ciphertext = 83253b820782f7f3d12dd6d780e92a8ca41d3bcb55df8159
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = 997e646014f19a53beab8877ca6022bef23016f1
+Tag = 5db17d3f75214c3cf39858617cfee57a
+Plaintext = 5d48a71557608736eded309027a80349a18e9ce5dee2bc6a
+Ciphertext = c945865c02b963a00cc04d027f2f59d569830e12128cb245
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = 60ffcb23d6b88e485b920af81d1083f6291d06ac
+Tag = 9550998376e61e11a5a69e9f8fe1c329
+Plaintext = 6c9d11cfb64d96bfab61c04a25d9e19294fb7330fb4847c8
+Ciphertext = f8903086e39472294a4cbdd87d5ebb0e5cf6e1c7372649e7
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = d574632658bf456dfbb11c2653602ed0f4dae777
+Tag = a1b0d05a7ebc657c3235479893bf7e5d
+Plaintext = 7d41688c86d5e3bc53966810f2299fdd732e3471fb0a88f9
+Ciphertext = e94c49c5d30c072ab2bb1582aaaec541bb23a686376486d6
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = d896ed60128f4bb0277d3af94c5138cf91697aa9
+Tag = 80c98c8959c158ce209aebcbd554f250
+Plaintext = 8c7ae2c3c503e9072d6e04e44c2ea78fd24994503567a136
+Ciphertext = 1877c38a90da0d91cc43797614a9fd131a4406a7f909af19
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = a350ed58c04473e113b9088b1fb9dad92807f6b6
+Tag = 573175f9105cd16ee384465ebb232200
+Plaintext = 49bc9d3bcf3c22daa8cf55c1b59d4bffddc2412d60518e98
+Ciphertext = ddb1bc729ae5c64c49e22853ed1a116315cfd3daac3f80b7
+
+Cipher = aes-192-ccm
+Key = 26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0
+IV = 8015c0f07a7acd4b1cbdd21b54
+AAD = 1db5887001204194e8b5dcee92c8af8fa5f7321f
+Tag = 2b67e993384f2e7229d1838efd040d99
+Plaintext = 25f3788e0d3dd8f5821faa4e45a9d6b3995fd881f927135c
+Ciphertext = b1fe59c758e43c636332d7dc1d2e8c2f51524a7635491d73
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = 796e55fbe7bed46d025599c258964a99574c523f6a
+Tag = 003c0c3b7369e79339433e1754c0937f
+Plaintext = e8610756528f75607b83926597ef515f4b32a8386437e6d4
+Ciphertext = e0a3d5f43e688ce104f4ae1a4fcd85500aa6b8fdbcd1b8d3
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = 5170836711fcb1a350b087907d8a17c7637aa1595b
+Tag = 120a7f18d021833b167bf330c4858239
+Plaintext = c61b0c1845fa9b2e0013b3fa9a8cb4f4fbbc6846f63ed180
+Ciphertext = ced9deba291d62af7f648f8542ae60fbba2878832ed88f87
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = 2a68e3fe746f593c1b97cb637079c3e5ee352c107a
+Tag = ca9698d9a88e892c364e57dd35c2f17a
+Plaintext = 10c654c78a9e3c0628f004b061e28c39a3c23e7250f53615
+Ciphertext = 18048665e679c587578738cfb9c05836e2562eb788136812
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = bf38ca0e89b8f5ccd29387f7f193ab5a967caa715b
+Tag = f3839d6f7e20a2e343f4c4da9eb9be13
+Plaintext = fa3a959fdff853c39f76da626094a1ea6dbc78bd2f091a79
+Ciphertext = f2f8473db31faa42e001e61db8b675e52c286878f7ef447e
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = bee00f2f75a4415ce993d2d14a6d8e01d1d59a48f6
+Tag = 6630bfb7a2a2441e020efdf36274b72f
+Plaintext = 76d12e3c4c5d990bf563c60aa4999e52998d887f97477f6d
+Ciphertext = 7e13fc9e20ba608a8a14fa757cbb4a5dd81998ba4fa1216a
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = d5b614e4e8f72a5d8b1ec2b375da5dac64c2cc30b1
+Tag = 866bcee343ec5aae61f9effa19b99d3b
+Plaintext = 693fae7af84aa397f0b2baaed9b3c7953f75e7424c49b634
+Ciphertext = 61fd7cd894ad5a168fc586d10191139a7ee1f78794afe833
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = 33f11aa36d8ab0fc53486839a576b31ee915dbd769
+Tag = 0331b60eb252f744a06b4a95aa9f4e7c
+Plaintext = 56ce9a09f38127b14dbbdcaa59f363c92a3b9843ad20e2b7
+Ciphertext = 5e0c48ab9f66de3032cce0d581d1b7c66baf888675c6bcb0
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = f40bce1a6817b29b9e8b56f214fcca7dfde17e7ee6
+Tag = 4153778a644cb2469cef3ad125e257bc
+Plaintext = 5cd8986e974d09ede34ba68fd81d6109a64092e7fbbaf87d
+Ciphertext = 541a4accfbaaf06c9c3c9af0003fb506e7d48222235ca67a
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = 53c457d8d4d4ab95ba116c28b82c16743cb09de9fe
+Tag = 7013e1c34dbc5efc7bcd4f8e52797644
+Plaintext = 9c3c610f204d98702dd91ea28e0cc14830b26bb5e2ee0349
+Ciphertext = 94feb3ad4caa61f152ae22dd562e154771267b703a085d4e
+
+Cipher = aes-192-ccm
+Key = aac60835c309d837aacc635931af95702a4784c214283ebb
+IV = 0e20602d4dc38baa1ebf94ded5
+AAD = c7acf1b17609dc336df1006ffac6497777cdfd497c
+Tag = 66aed667c761b7dea44822e30cff671f
+Plaintext = 90c5dd9db0316dac89db18f70491bdf0a06a6a7f72b77d9a
+Ciphertext = 98070f3fdcd6942df6ac2488dcb369ffe1fe7abaaa51239d
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = 61dafc237cb52f83ab773ba8a885462b6f77d4924611
+Tag = 1bb089af0245792c16e6320cf5ffa19e
+Plaintext = 576b069ae2713f53d2924c1fd68f786cb2eec68892f9e1be
+Ciphertext = ce06b3d09b02921f290544032a081a776661294004886728
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = 87e49b8164e7052becfa0c966991637b38df833fc5f7
+Tag = 3cec29bd5df92363d6bb75456f5cd32b
+Plaintext = d7eb0d7dd737805cd3b8dbf451aeea2fa1f6a96eb58cb428
+Ciphertext = 4e86b837ae442d10282fd3e8ad298834757946a623fd32be
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = d302a518d7c625756d3e4c8cc2b1d973a19107c945fc
+Tag = 01ca82cddb78a2fe3904d1d8bf6fe5b2
+Plaintext = 77d8c9e6321314524afd05b7ad599c29f4eedda9e9f0763f
+Ciphertext = eeb57cac4b60b91eb16a0dab51defe32206132617f81f0a9
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = 6566bb616a94bb03df5c26b722bcd38d516285c5f6c1
+Tag = d095ad121f0f76f07b715cad996def52
+Plaintext = abbf28b3ae164051648293d0b94e11f5af8468450005c7c0
+Ciphertext = 32d29df9d765ed1d9f159bcc45c973ee7b0b878d96744156
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = 141be3601e38185a9fa1596d2ee406415c9673af32f5
+Tag = 8529ec8f477462dc2409482c3479756d
+Plaintext = b67d50110f844b36a00d352123012a1123c7c3cba959dc48
+Ciphertext = 2f10e55b76f7e67a5b9a3d3ddf86480af7482c033f285ade
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = a2969243b0955402ab45a430fef2ef9e0c025006732b
+Tag = b14fe8dbb3c361ea61d7b44e689a1c48
+Plaintext = 2a63f7b09b43fee65738e8115bd8419b3ef3e8f86eca707f
+Ciphertext = b30e42fae23053aaacafe00da75f2380ea7c0730f8bbf6e9
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = 87faef55c54250c30232ccaf5efa1ff41b6243b2a5bc
+Tag = 54f0659fae291f943f2f3b33688602cb
+Plaintext = 59dad755af92c29522da4348ab9b3037fe87004f5fa1394a
+Ciphertext = c0b7621fd6e16fd9d94d4b54571c522c2a08ef87c9d0bfdc
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = 5d895fb949344e603ce5de029842b20d2bb614ecbbb8
+Tag = 3af4e3a7a20390a8da264299712a34e3
+Plaintext = 64d8bd3c646f76dc6ce89defd40777fe17316729e22ba90f
+Ciphertext = fdb508761d1cdb90977f95f3288015e5c3be88e1745a2f99
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = 74cc8da150b0bacdefa8943900b4ea047611d96be70a
+Tag = a7f79d2b5a9bde5bd453bc8a03e971d8
+Plaintext = 0c3c9a634a000f00be003846eac7482e303a5bef3a70fe75
+Ciphertext = 95512f293373a24c4597305a16402a35e4b5b427ac0178e3
+
+Cipher = aes-192-ccm
+Key = 671544bf2988056f7f9ccd526861391a27233793a23f811f
+IV = 0a259148a1d081e0df381ecd0c
+AAD = 65f6adbaaa803dbad5ba9cb6d231314d55147cc61399
+Tag = ffccebfb8c833833db40e98a1950fb70
+Plaintext = 712c788928c8a1562bc1f3f0eb1286e15c3405f6a6fa0443
+Ciphertext = e841cdc351bb0c1ad056fbec1795e4fa88bbea3e308b82d5
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = f5629ca0eea589f6cf963d875a7d2efb656983f2dd2231
+Tag = f7ec84dd992fdf98514f845dac8f656e
+Plaintext = 44dd098b1f869d670a8a841900c4bef023a1946a0c278354
+Ciphertext = 6b38ca85450e05e7b9362ed7e6e291a130ff233b5a561cde
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = d43d7753530a7280b76221906dca85d396b6cf05125018
+Tag = 3613ed15d527d9dc58ab6893e723db58
+Plaintext = cea19562328bd1fea889f575db6a28a14b7d06fb9f9c98bb
+Ciphertext = e144566c6803497e1b355fbb3d4c07f05823b1aac9ed0731
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = 75650ce366757618af20205b69af7e5d4e82c398c00101
+Tag = ef8728d1bf3a2d93db3266bafadb7c26
+Plaintext = f0641f595b791edd860977fcf699688587a354e053e9c7fe
+Ciphertext = df81dc5701f1865d35b5dd3210bf47d494fde3b105985874
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = c00f1b8066677c63e898fddfb8a1b482b536963da0628d
+Tag = a5bce94d7564d297fe87730f1a36acf4
+Plaintext = c7486a084f8475e6f5138e8d6e9f42a1de90f05aa88a362d
+Ciphertext = e8ada906150ced6646af244388b96df0cdce470bfefba9a7
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = 5a89ab6b26b2ca78f98a8f8409fe8008b97ba9ef185d41
+Tag = cd971b07fc14c512b8df6dd964b129d0
+Plaintext = 091ef698e16dc43a11d3ea005d5a5cdb7f1bdb5665a6c81e
+Ciphertext = 26fb3596bbe55cbaa26f40cebb7c738a6c456c0733d75794
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = 5d24d80f22afe713c4076c200c1bab36917907fde7b6d3
+Tag = a192b781dc94448d4a0f6a439a716339
+Plaintext = 62f204394b367c4410746001e02dfd171858396568fdd43b
+Ciphertext = 4d17c73711bee4c4a3c8cacf060bd2460b068e343e8c4bb1
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = 4a47a82b999a2a739959f153a091a65c4d7387646da66b
+Tag = cade9533b272e0a3edeba68362b057b4
+Plaintext = ac1cd5ba4997af91dbd74aee7730f9ee92cf8a360ca96a8a
+Ciphertext = 83f916b4131f3711686be0209116d6bf81913d675ad8f500
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = d9fc295082e8f48569eb073ac1b9566246728fc62ccaab
+Tag = 5d68df8ff28345be4d83541a72071059
+Plaintext = d0a249a97b5f1486721a50d4c4ab3f5d674a0e29925d5bf2
+Ciphertext = ff478aa721d78c06c1a6fa1a228d100c7414b978c42cc478
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = 720a9dc3e33ac080775a06f67f4a6591c37d0e101944a0
+Tag = caa7ec8892be6a18458c663665495035
+Plaintext = 77fb98f24172f5d5edadbf466ee910855a71d46090b789ee
+Ciphertext = 581e5bfc1bfa6d555e11158888cf3fd4492f6331c6c61664
+
+Cipher = aes-192-ccm
+Key = 90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786
+IV = dada5465eb9b7229807a39e557
+AAD = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903
+Tag = 862fda880e45e891a3a50da7e14344c8
+Plaintext = 77fb98f24172f5d5edadbf466ee910855a71d46090b789ee
+Ciphertext = 581e5bfc1bfa6d555e11158888cf3fd4492f6331c6c61664
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = ad6622279832502839a82348486d42e9b38626e8f06317c4
+Tag = 5623d15b24184481eadc63bb8c878fc4
+Plaintext = d7c837971b973f5f651102bf8d032e7dcd10e306739a0d6c
+Ciphertext = 4709600418f2839841e6d126359f6982bdb53acc7ff20963
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = ad4833aa53218949cfd724814a43889a74a2114bbef4cf37
+Tag = 614c3e546273f0aeef207bd3f4d32fca
+Plaintext = 7d672bccd0fb01ce79320ed61779146aa432038daa13cb41
+Ciphertext = eda67c5fd39ebd095dc5dd4fafe55395d497da47a67bcf4e
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = 54a723826086c7175e8fdc854b62d780de6ac1f90b57dd3a
+Tag = 13c6395ce9aee2e22ac0606beb140185
+Plaintext = 0e1b73df74982f535a5fb08bc13d22515ee10969efe033bb
+Ciphertext = 9eda244c77fd93947ea8631279a165ae2e44d0a3e38837b4
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = bec02d7df4cc3deefdd7e7d3ea82d381c870ad46bc06d64f
+Tag = 61e4f02150bedd86dfa49f52b214239d
+Plaintext = 9a55aff269b180118ff0ea99e851c7474d19d23e641f16a9
+Ciphertext = 0a94f8616ad43cd6ab07390050cd80b83dbc0bf4687712a6
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = 1b8090d712e0ec95a01bc3aeb6f5230c67c355e0ed68043a
+Tag = f0e82b9f04bfc0cc0ba432b5135450c2
+Plaintext = ff19294e8faed8353dbcab0b146e2ef928dd2680833424bd
+Ciphertext = 6fd87edd8ccb64f2194b7892acf269065878ff4a8f5c20b2
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = 5ed0b9f25d07b26717cdcb2507bef9d681ecd9389831ac15
+Tag = 2e64c82b60880c5c7506321a1060a481
+Plaintext = db1eba6ac4a79aa1d97838d263c7c4ffa7d354770e762805
+Ciphertext = 4bdfedf9c7c22666fd8feb4bdb5b8300d7768dbd021e2c0a
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = 55f16fefaf2168aebc61b5e01d9e1f7bfe215eaaef118974
+Tag = 7152f64dc993b36ad9d5d12bb52b1ad5
+Plaintext = 012d45168505ca9fde5aed123875639a207d473b993dc7b8
+Ciphertext = 91ec128586607658faad3e8b80e9246550d89ef19555c3b7
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = 9893bf14fd3a86c418a35c5667e642d5998507e396596c50
+Tag = 3e5c69256b6326ebb7ee6e677d396765
+Plaintext = b205f26d6c8a8d6085ab28d595703cae046f96d82093082b
+Ciphertext = 22c4a5fe6fef31a7a15cfb4c2dec7b5174ca4f122cfb0c24
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = 244b840085bda9576c8424bb05a925a6b09cad2d0528ab8d
+Tag = 2083dac565c7a63908f0022e2867bb68
+Plaintext = 549ba26a299391538b56ce4bd71dbbfd96995836f8915ca5
+Ciphertext = c45af5f92af62d94afa11dd26f81fc02e63c81fcf4f958aa
+
+Cipher = aes-192-ccm
+Key = 13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6
+IV = f97b532259babac5322e9d9a79
+AAD = 9e8d492c304cf6ad59102bca0e0b23620338c15fc9ecd1e9
+Tag = 68242fe32958ea32e670ae1b3543974f
+Plaintext = 9e9dbd78a1066800ae33253be6104015158a0187e4f38116
+Ciphertext = 0e5ceaeba263d4c78ac4f6a25e8c07ea652fd84de89b8519
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = 69a9dd9ac8be489c3a3f7f070bdaca10699171f66ab3da9351
+Tag = 46c7246bd3130803bf8d703ef5bdf15c
+Plaintext = ba1785a149cb8b69a4e011c11a3ff06f6d7218f525ac81b5
+Ciphertext = 89ab2efefa8406336d9e2245199fbc9454f0ef650b9ed0f4
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = 0c39a72f0f38d2713c164b0f870646fc65b9838a322ecfddd0
+Tag = 096a6a4422e582c5d02973952ac80e5f
+Plaintext = 263dc4fb5cd8798ce0f183a816e51fafba167533dde1bf96
+Ciphertext = 15816fa4ef97f4d6298fb02c15455354839482a3f3d3eed7
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = 911d9f5c4c34c2f4b69be1e253d43fe729e2ab2622130394b1
+Tag = 5965f6df4332fe7a2cdc4d1b80e28a34
+Plaintext = 7b5da2c283116713f3d80c7907114270964541e03ab80d50
+Ciphertext = 48e1099d305eea493aa63ffd04b10e8bafc7b670148a5c11
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = 8a961df9c23f6d5ecdafa94c61164a22f460a1bf7415258d39
+Tag = 18bed174081b2170ffc6ab53b54c9ddb
+Plaintext = 541a2b3ee25022c92fdc6783a6cbde90680ad3dc41868e5f
+Ciphertext = 67a68061511faf93e6a25407a56b926b5188244c6fb4df1e
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = cac7a248a4d4e96a9733627e247234995d6aa57e491498118a
+Tag = bac3d3a2b9ef6d4c8715f9a5c6fe8245
+Plaintext = ebb2e893da9f32c363f98bc76fd14eda59e7cc620070f6d3
+Ciphertext = d80e43cc69d0bf99aa87b8436c71022160653bf22e42a792
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = 41eacf70d05a6d0cdbdd38f197a52987def8fde37f332eebd9
+Tag = 7f9610c82fe9a7c78e8f1980e886b446
+Plaintext = 199cca0d0e1c70ec405d6816cbddc69f8ada624f2c168891
+Ciphertext = 2a206152bd53fdb689235b92c87d8a64b35895df0224d9d0
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = 78b6ed20ed85337c969618bd41917cd85c37e7c35c3a12e25f
+Tag = aab366637ec41d0bf557f578be424a8b
+Plaintext = ca481f557306f9ce386edd0cfde375a550cb5b574be524f7
+Ciphertext = f9f4b40ac0497494f110ee88fe43395e6949acc765d775b6
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = 87faef55c54250c30232ccaf5efa1ff41b6243b2a5bc93e7cf
+Tag = e57a5b3ae26469d229425f887ad5a2a1
+Plaintext = 6f1b4ff66d3aec7b0c0d9e202acc52722e15bca0983291e0
+Ciphertext = 5ca7e4a9de756121c573ada4296c1e8917974b30b600c0a1
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = 7f19ac3e53a629a2df1cb56d68fde0c80a46be40a996830e2a
+Tag = 6ce4fe492062f74bff4c3c0e9ea849a4
+Plaintext = 7533c88ce55c2243b64b6c5bd01aed4dd6ac8bb9fd333e06
+Ciphertext = 468f63d35613af197f355fdfd3baa1b6ef2e7c29d3016f47
+
+Cipher = aes-192-ccm
+Key = 90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc
+IV = be02df3a840322df8d448c600c
+AAD = 0516a69bfd8785ad001367b51e5410b75c11b761be08b9eea5
+Tag = ad47ffc17b871f530f62b9f9aec98509
+Plaintext = 19ea09a9bfd10db2a74e398859d8f4831fa5749767773acf
+Ciphertext = 2a56a2f60c9e80e86e300a0c5a78b8782627830749456b8e
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = 09fc21ac4a1f43de29621cacf3ad84e055c6b220721af7ce33bb
+Tag = 101a34c777e918e16186fda05a386572
+Plaintext = b4da43ebfe9396b68f4689fba8837c68d0064841c6ddd4a7
+Ciphertext = d40725397229021a18f3481e3a85f70445557bb2a85e4ae8
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = 10f0c45d06a138a964fb11b2d450620a2977bcd2952afe371cad
+Tag = c1e79234882846d916dabae40b1bd055
+Plaintext = 7b628930d44e22907277db057395601b82b65479fbd59613
+Ciphertext = 1bbfefe258f4b63ce5c21ae0e193eb7717e5678a9556085c
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = 64dbb170a037b36beed28a2637c87830e2b23f8eea6cd9a7331c
+Tag = e35499e3c09dc384eb41344ee8be3769
+Plaintext = 9db30b669fc5d25f05e0dc708d597da6ddce2dacc85ae99c
+Ciphertext = fd6e6db4137f46f392551d951f5ff6ca489d1e5fa6d977d3
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = c47de6608546a02c6eebd6628c9123f6936c0154d3df52a367e5
+Tag = d605189608ce40b237dde7bed6fde487
+Plaintext = 62036cbed3666d85624d3dc9c1f437454b9ab5c03ce0de92
+Ciphertext = 02de0a6c5fdcf929f5f8fc2c53f2bc29dec98633526340dd
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = bab7e36098d59d3a31d7784d549aebfc6938bbd0612c85c0edb7
+Tag = c31f69c847440be20bd08cfef330002f
+Plaintext = 5c9bc739f6b6fe4214f3c6aad307d1f208892d79de010e37
+Ciphertext = 3c46a1eb7a0c6aee8346074f41015a9e9dda1e8ab0829078
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = 8a9716135fa38c250e249f6712f7cb3ad9210d7278b53d599df9
+Tag = ca83622b127fa50fc9637998c0ddd44d
+Plaintext = 0df109298083d3896214b84ff6edb11e9cfdbd88f5702839
+Ciphertext = 6d2c6ffb0c394725f5a179aa64eb3a7209ae8e7b9bf3b676
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = 2d52447d1244d2ebc28650e7b05654bad35b3a68eedc7f851530
+Tag = 81e738b9e4b0dc7b7a39eb7d03adc64a
+Plaintext = 518f651f6d82f670b63767ad8476ed8fc24df12a45110611
+Ciphertext = 315203cde13862dc2182a648167066e3571ec2d92b92985e
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = 3cba0fd2bb16ae1d997cbe659a2dd101885c97f2322b0172b5d6
+Tag = d298c05b1d2e597f44f8621ecd11ed16
+Plaintext = e91a694bea2d351928b6098660d49f382c087f6777de159c
+Ciphertext = 89c70f996697a1b5bf03c863f2d21454b95b4c94195d8bd3
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = c7f93152016bba584dadc6002ec493a46305726068886d2340da
+Tag = 5fd5221fceecbf0dc7211a1aec06793a
+Plaintext = 2d14792ed349a878b2b879e7fa5f438a50e36947ce827e73
+Ciphertext = 4dc91ffc5ff33cd4250db8026859c8e6c5b05ab4a001e03c
+
+Cipher = aes-192-ccm
+Key = 5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6
+IV = 54cbf2889437673b8875a0f567
+AAD = 799cac048eaccded37ca6a70dd89595e1ee04606212da5572679
+Tag = 5c25f00b862b49fcfe8447949f39787c
+Plaintext = 315b8d95938d304015bbc94ea03c21f6dc25c90f991ba680
+Ciphertext = 5186eb471f37a4ec820e08ab323aaa9a4976fafcf79838cf
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = c37fdf7449fd7e943595d75e977089c623be0a3926e63fdbbfdf4a
+Tag = a461f44dac1112ae3f9c65671a931d3e
+Plaintext = 0f960a89a7e806f8709047cb7a2e7c4211ad724692c88a05
+Ciphertext = 3907880d25f910eab12dd14e704d1b33ea7c453634d54da2
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = 85f647d940a6d1acb6b7851912f807063515631eaabaa019dcfb99
+Tag = ed15db6e142ee07b59eb5b0ad3a59194
+Plaintext = ab40a4baa39b0e568bf2193fecbc36b84c76bb50523b2912
+Ciphertext = 9dd1263e218a18444a4f8fbae6df51c9b7a78c20f426eeb5
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = 79ae14843b2e7ccf0fd85218184f7844fbb35e934476841b056b3a
+Tag = 203f11f66b74366caeca8dbded2bf17a
+Plaintext = b74c06d9077c568762796d5be14f3563e7205a6e9bc65bcb
+Ciphertext = 81dd845d856d4095a3c4fbdeeb2c52121cf16d1e3ddb9c6c
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = 542d86fd7ff591f97e6926a090553538bc3b8a6bcd45f2e29c7d9f
+Tag = ed925fb9a4cf6b6bf17f72ab044653d1
+Plaintext = f2179beb5635a6d8a8340acea0ffcf4428e5de1306a8c12b
+Ciphertext = c486196fd424b0ca69899c4baa9ca835d334e963a0b5068c
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = 4392c3043287dd096b43b4a37ea7f5dc1d298b0623ccbf4fd650a4
+Tag = d1f677deca1bfda83c1b9223aaaedbfc
+Plaintext = d1a9e4593bc3d02c407e84a1736e587c1819c72195a07d57
+Ciphertext = e73866ddb9d2c63e81c31224790d3f0de3c8f05133bdbaf0
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = 966954582e78e99ba68d6ffaf794b55a82325834ec4f373b2bd227
+Tag = 12937871932a7ca3e1e27a90a7f73694
+Plaintext = 15b94910853a8f23dfb8b31c0262b8461f777075cc0937e9
+Ciphertext = 2328cb94072b99311e0525990801df37e4a647056a14f04e
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = b7aca715dcc402565cb711b001f21e8e95ec54c4afab2e2dcc8a2f
+Tag = a0464ff4ddeccbd523a5ed3b32337f7c
+Plaintext = fd1681cc306518bf77766f55226afac3eb21e31ed897075c
+Ciphertext = cb870348b2740eadb6cbf9d028099db210f0d46e7e8ac0fb
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = 290a36f7daeeeafca4431446b396dbec0bea0a1f6f081418811656
+Tag = 2f68ed5e44a71c5ba8bade07b7bf5495
+Plaintext = 0804fa48fc76f98bb021e3501bef8875b64a3b508adf8594
+Ciphertext = 3e9578cc7e67ef99719c75d5118cef044d9b0c202cc24233
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = f0739a855422310a21ed863376bce9d75dc7c687b9b535cb7a05cc
+Tag = 3b5dc1fbe32743e257b7c1c9d624adc8
+Plaintext = 4f5c6d80a3955f12f4d2594e02a045c42fabb11d90817fff
+Ciphertext = 79cdef0421844900356fcfcb08c322b5d47a866d369cb858
+
+Cipher = aes-192-ccm
+Key = 0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d
+IV = 16d345606a315ad2406abbcb43
+AAD = ffac0edb0b62977bb5040e4128a48deaf711f5e6a84d8f677341f3
+Tag = e53b654de1976294897cae0476ac6248
+Plaintext = 5c29c458212d010a0d9c5a547aba1138eb4ce94742fef01e
+Ciphertext = 6ab846dca33c1718cc21ccd170d97649109dde37e4e337b9
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = 511c6924fa96db716f6b053b7a48aebdc1504145a56cd02d6be2590d
+Tag = 82c560fede4741e2fd3b54b3a48f3e38
+Plaintext = 0c0663dd69ccbffbbd0c8c2e9473d0354451ae7a20fa3695
+Ciphertext = 19f2745df5007619c79c84d174e4521b942776478a0601d9
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = d9ccd93317441e9d6ccc358f31e7e2ccef8c921b23d742993eff9d53
+Tag = ee82d927a2aa678e792acdeb615409f8
+Plaintext = 34a882834172924d39d2df5d637d9d273a99a9222971701c
+Ciphertext = 215c9503ddbe5baf4342d7a283ea1f09eaef711f838d4750
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = c268d65f7a7b30d3d198b2045fc8d1db7adda56604fa567d8855d1a5
+Tag = 7a48226389d24ed3ec3da2da1a9bdf7c
+Plaintext = 5b7450b73d68de079e92bba56c7860f11126b8fdedd3334d
+Ciphertext = 4e804737a1a417e5e402b35a8cefe2dfc15060c0472f0401
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = 4c2b6815156f0643b4573825e28b9f2a668a4976e3342884f48bc310
+Tag = 16fe6bd83993ccbdd50e1ca061f4845f
+Plaintext = 140c6933248f052e05bd4a36aec185ee86730108cc2989b6
+Ciphertext = 01f87eb3b843cccc7f2d42c94e5607c05605d93566d5befa
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = f11c873354b3c0cff2c8f8010e9e364582b9c05c62efdefbdcc2e1c0
+Tag = 577c5893cb3896400012e48f5b190b73
+Plaintext = 2a083de317380d94dd991349a7b8761c7c98013b1b0227e0
+Ciphertext = 3ffc2a638bf4c476a7091bb6472ff432aceed906b1fe10ac
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = d0a056754098d7f7ef2f639d61ea3d2b9cc936c48a1b2c5a9e96d169
+Tag = 80c80101fdfe6dc4cfce080bf921582e
+Plaintext = 02769283d5a06c363c2cc66c09b1ac954134e3ec7df773f2
+Ciphertext = 17828503496ca5d446bcce93e9262ebb91423bd1d70b44be
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = 56de0e55653b9a04a3ded71c31f8807c3c8dd96bc82892e4acccef30
+Tag = 122dfc20e3088dcd33b6706a0c1fdfa8
+Plaintext = 4890404bc5b24822b4cf7a2fe28abc52fbefb919ae0629ec
+Ciphertext = 5d6457cb597e81c0ce5f72d0021d3e7c2b99612404fa1ea0
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = 794a86f5b20d344ad86fd5523d08f1864737be57731440c29aa6b425
+Tag = 28f0a78ce798448529afe26eec875aa6
+Plaintext = 161f8501f59338f72026815c77cad6d8d581859192cd5644
+Ciphertext = 03eb9281695ff1155ab689a3975d54f605f75dac38316108
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = b1eafc03ea2fa3e9e3842a09a225e83055de8a1f412badd6fc9ead12
+Tag = a48856a266c0d404474316f418f8f4e4
+Plaintext = b3f38aedbf08dd7ead9d402c5aaa1ec9279c7e4bfd4a2967
+Ciphertext = a6079d6d23c4149cd70d48d3ba3d9ce7f7eaa67657b61e2b
+
+Cipher = aes-192-ccm
+Key = 6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3
+IV = b8d517b033754058128d13d11a
+AAD = 8fec99f1be0e69267620c0b934bf984d60c1437f74c6ac19610fe188
+Tag = 6412292d8015285efaa6f1154580eb57
+Plaintext = 5c09e2a6a055fe9c21e06e5519cf56b8e2e7fb44094e79f9
+Ciphertext = 49fdf5263c99377e5b7066aaf958d49632912379a3b24eb5
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = c95a86d52088a8b0107cc5b437a8938b2c9e74e46e2e03bb9bceecdbe3
+Tag = 811020480e834f6fe55900a162a4e61a
+Plaintext = 5bbe9c1fb2563e3e82999fe097b28da4dc6ff2e020f3b4f3
+Ciphertext = 6d5401db42b5c48b79203b6ad82806d7460ac4c82ad0809b
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193dfa755a5943
+Tag = ba9827513c7f1de970d316b6f81c109d
+Plaintext = 8a85a9b32a323c6af156a3fa2f1448b6387cc3660aa8a0f4
+Ciphertext = bc6f3477dad1c6df0aef0770608ec3c5a219f54e008b949c
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = c834096e059ea73ddc90b0c982f9a3a31bfc6b1b81a03f9d41c9c741e7
+Tag = c9d79dd3255a8323f8229ac1c6d76ae4
+Plaintext = 1e02c13104937fe084b18eba1ea8951dcc5e75b692937dea
+Ciphertext = 28e85cf5f47085557f082a3051321e6e563b439e98b04982
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = 9249022bdead3d86ef5bd03acf053132d08663ba1f2426e19c126b22e9
+Tag = 425dc81f93257ae8399fc2d48b4a7685
+Plaintext = 3225570fb15ae13a13c71e364ae9a9fef03d1c9a7fa5dfa0
+Ciphertext = 04cfcacb41b91b8fe87ebabc0573228d6a582ab27586ebc8
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = 3c3a92c4ece49fb9f84243d7c1bc91f595fce118305a758c83985c34b4
+Tag = b595003c58e69600c2a3b9ec45c0e15a
+Plaintext = fa0a458174537ddba25708b8d0c22d5517d57b122517b0c9
+Ciphertext = cce0d84584b0876e59eeac329f58a6268db04d3a2f3484a1
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = b49b845ccf76acf508f9db8543c73375d530d91f3b0e4ed70decfd2c2d
+Tag = 0da009261c43c6640303696655e2981f
+Plaintext = b7fbdaeaa3ee1d0bbf5ec47898b069ec4ba6a140a3e83996
+Ciphertext = 8111472e530de7be44e760f2d72ae29fd1c39768a9cb0dfe
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = 3aabdf589eeb1709bb3d60b08bc71eaa3ffeba4e2903a5dbd8339aae85
+Tag = dfdcdbd4ad711c493d3176f032a02af0
+Plaintext = 9aea86b9fbd9bd4504ee2e25054942b33d3cdbd84215db7e
+Ciphertext = ac001b7d0b3a47f0ff578aaf4ad3c9c0a759edf04836ef16
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = 6a79879cd62bd1dbf9609897d2ebf2dc4dda43cc15fcb241aaa0deb4b3
+Tag = fd59b45c05873c670f5f8bb47732d59f
+Plaintext = 3a861638ccd6591e51e2a525be59447e4a28bab32e36a5f3
+Ciphertext = 0c6c8bfc3c35a3abaa5b01aff1c3cf0dd04d8c9b2415919b
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = c5b6ca474eb251817ae4d2f47c0632c381e222aae3b6f585a0dcae120a
+Tag = 1572a24bc00b40a6b4b172b3648142e7
+Plaintext = c7da4e9ba6e5758be726e6e227d7bddb0332228f7e3ecb6b
+Ciphertext = f130d35f56068f3e1c9f4268684d36a8995714a7741dff03
+
+Cipher = aes-192-ccm
+Key = 9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c
+IV = c0049382cdd8646756d4e6bff5
+AAD = 64a96d191f1d5f95f5fed6259e33e7206adc07b0279e16cb453a9c6438
+Tag = 828bc33396179ac39ce0027a1d62e0fe
+Plaintext = 2b9347d3e195152dce22afdb92acd179eb484872285704c3
+Ciphertext = 1d79da171176ef98359b0b51dd365a0a712d7e5a227430ab
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = a08763ca936abdeece06467bef8c3c47c3a473636a039d4db540c867d3e3
+Tag = 95aa6b99d3f894d3790c2aa2dae1ba2c
+Plaintext = 1fada8f4c7daea0d1c370184c169485b80a278708ed41451
+Ciphertext = 680dd22f16a1290bde42c9792dfa997aed24d5bd2265b6e0
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = 19508a6c83b992c660a1a28597e07c729ea2ed39401aadbf9d7586b5720d
+Tag = 2d9d77109f4597e9c4c8cf7023dc5f3b
+Plaintext = e9f1f2cf0b8d563e2d20f39f9f464a808b136dba364a6446
+Ciphertext = 9e518814daf69538ef553b6273d59ba1e695c0779afbc6f7
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = e5929c3b5d68a4c9fcf1168ea35bf8c0bf3043cb1ed54ff301578b3b7266
+Tag = b2544ecc3c7d5accd22ac075e7b44d5a
+Plaintext = 07a74c3b874849ecbf013713b80a84337c90b690cea0b837
+Ciphertext = 700736e056338aea7d74ffee5499551211161b5d62111a86
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = caa5cc5d0d87680eafc29429bac55c9e33167d485789c7c124b5c57a1ba8
+Tag = f1a8a1db25de0fab7cabb11a18497584
+Plaintext = 4255f2cf90f0d15e9bead4be799165c57f7225980713d609
+Ciphertext = 35f58814418b1258599f1c439502b4e412f48855aba274b8
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = f61cf7ae23a66777bd3fabc3d542feed2b00c6d4f46a772fda11b5214551
+Tag = 5a9718ed0257a50e38de86154054fc3a
+Plaintext = 70b1e2e4cf260b108f5a52d0d8234838ffd6ffe7b4acd78d
+Ciphertext = 0711983f1e5dc8164d2f9a2d34b099199250522a181d753c
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = 85f647d940a6d1acb6b7851912f807063515631eaabaa019dcfb993e86f4
+Tag = 550d1acca34c28ba8a3b890bb0542b23
+Plaintext = af4be10b3a59ea99dadc75fbe5651f6f7630852bb556aa39
+Ciphertext = d8eb9bd0eb22299f18a9bd0609f6ce4e1bb628e619e70888
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = 296cd04c4d9ab493def7aeb6841a45309e777028868efe45166235c56b2d
+Tag = a268dc1596a7855639c63fa76ad8479b
+Plaintext = 72d5663727592f1bfc9c65be83f4d3508126fecc4e34ae72
+Ciphertext = 05751cecf622ec1d3ee9ad436f670271eca05301e2850cc3
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = f380ca0a26a94adcf2c1ce26d226d3bf520268c72412e58a71acd9a66d00
+Tag = e3416c75fc28924a21cc123e62a7894c
+Plaintext = 3e2ccce03c10ce1527ef8e002adb265edba5779fbd4fcaf6
+Ciphertext = 498cb63bed6b0d13e59a46fdc648f77fb623da5211fe6847
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = 8825532a31680cb3b5bdb027802d2d8718755e135367e0c8c88e21288311
+Tag = ff1a47f23d08485951aab18b393584ef
+Plaintext = a18dfe7f2d7bbaf316366f67445170afcbe18e2a1de1e947
+Ciphertext = d62d84a4fc0079f5d443a79aa8c2a18ea66723e7b1504bf6
+
+Cipher = aes-192-ccm
+Key = 3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a
+IV = 63f00b2488809fdc49ca5f05d5
+AAD = f768375589b687fb17c56673af4263626da69eb991007d94d4f5a163fd05
+Tag = 7d024456bcb69a4f77008773a3f48805
+Plaintext = 17ca72a440c944fefd6c08ecc3a8ecb54d96b9cad9d2aa4c
+Ciphertext = 606a087f91b287f83f19c0112f3b3d9420101407756308fd
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = c5f1a26351e53e6509c8bbbed03c42c23ad81c65fccec7ffa1cb494c7f1fc4
+Tag = a260b5ea3b047020b73b5bafa17e5084
+Plaintext = 0b6de49b530703affc94010c2b793ddc6de0c44d48037ff2
+Ciphertext = 56b02fea595cc24e798691ae905be3d466ca68ca744005db
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = 89899be18b4c389afa769b11ecd22e9fad8f38fd614ea5f8eb7a066c0ed8d8
+Tag = 5e4bd97b9dc83134867c00c2acea0aaf
+Plaintext = 2f1821aa57e5278ffd33c17d46615b77363149dbc9847041
+Ciphertext = 72c5eadb5dbee66e782151dffd43857f3d1be55cf5c70a68
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = d43b841f174335f1347834590b0984a2cb35f7a00a0ee993157d2d4f848748
+Tag = 55202ba34bb9918fe915776de65947c0
+Plaintext = c7da4e95cb38342c6d5bf0c381d5a192adc3bfc1cda3a1d7
+Ciphertext = 9a0785e4c163f5cde84960613af77f9aa6e91346f1e0dbfe
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = c1093518efd80245e3c42371f220b21f2034e6738fe02ef43e828190f01aef
+Tag = 2fdf807b5a6880f2d4c36d558b40eb90
+Plaintext = 414a70aba5a219dbd41cdc46b84812b28cc4f7399218004d
+Ciphertext = 1c97bbdaaff9d83a510e4ce4036accba87ee5bbeae5b7a64
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = 90f627d5b939625bc76fe1bd4643b39edc11d3dc7f4bfe16e61bc26c3d49d8
+Tag = 5a9307ca4239380a45bb7f87e41c4cf7
+Plaintext = 58b260d3f645a35bad7a3842440bc03608248bd46e725e60
+Ciphertext = 056faba2fc1e62ba2868a8e0ff291e3e030e275352312449
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = 2f360a4715074e942244ab7f9b6db127b0442df9af2efa2e78db1a94312905
+Tag = f3aeadff9dd60468aef2a8e2c56dda7d
+Plaintext = 5505caa97218957e90247fde60275bdafce4b16bcb36c263
+Ciphertext = 08d801d87843549f1536ef7cdb0585d2f7ce1decf775b84a
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = 7db564811f14bc5c2098d5635655c3671fbd8288ea14944af925eaec653408
+Tag = 8335f2e31a0468b830c5009cd02dbd5f
+Plaintext = b93e40f556a786e39126b8834a6ecacd2dc9f0f528bab135
+Ciphertext = e4e38b845cfc470214342821f14c14c526e35c7214f9cb1c
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = 36be91854d3d02a5d62503bb9047ef4354280510f7576c4272fd757240b621
+Tag = 5d772a599e91504e022b9dbfb124b71a
+Plaintext = 543a070fdb3a855dd7d83fbc5f983671ad9e905f307148e4
+Ciphertext = 09e7cc7ed16144bc52caaf1ee4bae879a6b43cd80c3232cd
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = 6aa6ea668df60b0db85592d0a819c9df9e1099916272aafb8813ccc2f2dd96
+Tag = 9846cd12430f7adc910d1f0c51d80636
+Plaintext = 86ef67572cb339c6706eb5909b96848aba5246a196972a1e
+Ciphertext = db32ac2626e8f827f57c253220b45a82b178ea26aad45037
+
+Cipher = aes-192-ccm
+Key = b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7
+IV = 7a1649896f3e030c18f0205599
+AAD = 3a64414c3588d7c26871d7d054ac6c8420d4917e3baad4a343685916265321
+Tag = d9ee65ac3a8fae1b00a4f1dfe2577293
+Plaintext = cecef24b62676a5623bedae8087b9b05d7e22b41a14dd2d5
+Ciphertext = 9313393a683cabb7a6ac4a4ab359450ddcc887c69d0ea8fc
+
+Cipher = aes-192-ccm
+Key = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+IV = 809343e986f6ff47f54d4cac22
+AAD = d70aef3532bdc5293a3ebb11589ac1f801c9f93ea0d656e1d04068facf9f768b
+Tag = 966e91a19617bb748f3495aa433585bb
+Plaintext = 718f061e8b972a3adcf465d66c5b28e8661f080127f6722f
+Ciphertext = bad3b0e6772e9c4c9c631c095e259d99692292932efb72b8
+
+Cipher = aes-192-ccm
+Key = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+IV = 809343e986f6ff47f54d4cac22
+AAD = 1ee0eb409398bc252175cb460ef9a2da4c9beab2ef6d8206e4fcce74df785246
+Tag = c8f70aa565a12ca3545e68110968040f
+Plaintext = 72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca
+Ciphertext = b9ba78455331962a0ee33b5956c2b80fbb55e0b52b1ab75d
+
+Cipher = aes-192-ccm
+Key = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+IV = 809343e986f6ff47f54d4cac22
+AAD = 3820db475c7cb04a0f74d8e449f026ec951fa59667738698b0ed5c8cb09a8c96
+Tag = daf38076c810e14a7843444a02f010e0
+Plaintext = d959dd38a458039e2400d21d27b9a2faee8fe23683330cb5
+Ciphertext = 12056bc058e1b5e86497abc215c7178be1b278a48a3e0c22
+
+Cipher = aes-192-ccm
+Key = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+IV = 809343e986f6ff47f54d4cac22
+AAD = f555216840a1f40b411d44128e567617e2694caf16216ea74c604a8d6ec01e72
+Tag = 594aebf9b8318877bdec2900a22df858
+Plaintext = 337f12e8ebc0544b82fcdd3c4a0dab0e5e75c9f433a27d66
+Ciphertext = f823a4101779e23dc26ba4e378731e7f514853663aaf7df1
+
+Cipher = aes-192-ccm
+Key = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+IV = 809343e986f6ff47f54d4cac22
+AAD = 2311a6fe1feeda3a1f16310d635496c0dd662024f0b0f1de79325e030cb850e5
+Tag = 1d9872d1c10a6594b5c349b84f710d64
+Plaintext = 463c65fa7becae5605af80d1feca59075ee88c0abfc72cb4
+Ciphertext = 8d60d302875518204538f90eccb4ec7651d51698b6ca2c23
+
+Cipher = aes-192-ccm
+Key = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+IV = 809343e986f6ff47f54d4cac22
+AAD = b2c633e3181ae5fe7828707ed5b70e0460088a84465eadeecdbcfa0e9ff19bb1
+Tag = a9db7c4bcaf6087e158c1a5d4eb1c2cc
+Plaintext = 23c1732959c4bf85bc707e45cc964b6227acd3a8fc73e675
+Ciphertext = e89dc5d1a57d09f3fce7079afee8fe132891493af57ee6e2
+
+Cipher = aes-192-ccm
+Key = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+IV = 809343e986f6ff47f54d4cac22
+AAD = 791f23252094b9b99fafe7fac1d8ff3ba09305c476041e75afb245ac438b4069
+Tag = 5e1c87d9e1c1f3b7d30fdc2f0ccac783
+Plaintext = 02f60f967e7fbcf957313619882407ea8a03fc943062296c
+Ciphertext = c9aab96e82c60a8f17a64fc6ba5ab29b853e6606396f29fb
+
+Cipher = aes-192-ccm
+Key = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+IV = 809343e986f6ff47f54d4cac22
+AAD = 22197f9ad14591e7a6d5f8b18c969a553de9a85309757fa5d319cc505c24f438
+Tag = 1514b449a741e07f9287f7e9090fa54b
+Plaintext = 6c1aa088d1a6086d0e72636744a6840c80ab8223409c61b7
+Ciphertext = a74616702d1fbe1b4ee51ab876d8317d8f9618b149916120
+
+Cipher = aes-192-ccm
+Key = 50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9
+IV = 809343e986f6ff47f54d4cac22
+AAD = 0bb18f7280a30767cd769cb5ffd3edd1c18914b92d1b2192e27ac88f57135616
+Tag = 2c889b610157e16e9f31558c669298a7
+Plaintext = 57275bc3b4d63b9b01b0b0760235c9785d45761cace23f1e
+Ciphertext = 9c7bed3b486f8ded4127c9a9304b7c095278ec8ea5ef3f89
+
+
+Title = NIST CCM 256 Variable Associated Data Tests
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = 935753e601b79db4ae730b6ae3500731
+Plaintext = 30d56ff2a25b83fee791110fcaea48e41db7c7f098a81000
+Ciphertext = 55f068c0bbba8b598013dd1841fd740fda2902322148ab5e
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = 003abc6a4b020625adc8b6cd7bafbd42
+Plaintext = e44b4307234281209bd41f89dbe2cc3fbf68e14df2f7fce4
+Ciphertext = 816e44353aa38987fc56d39e50f5f0d478f6248f4b1747ba
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = e7cfa7a208a8b3e6b6377236045df17d
+Plaintext = 8db7a73856bcb4007346bb3e00096f69e75e97c0bb960f3b
+Ciphertext = e892a00a4f5dbca714c477298b1e538220c052020276b465
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = 81b39a0c55822e32042b4f8981021090
+Plaintext = 48f3ceda4fd390a7eb38f7f5bcd14310af6b5a557e676d44
+Ciphertext = 2dd6c9e8563298008cba3be237c67ffb68f59f97c787d61a
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = 091117e2ad77db510d902038743b5a98
+Plaintext = 7cdb2c9b167b3ae811289acf7dc1814bbe241f553447699f
+Ciphertext = 19fe2ba90f9a324f76aa56d8f6d6bda079bada978da7d2c1
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = ac7379b8e51592b98e4874f4592278a8
+Plaintext = 41eacf70d05a6d0cdbdd38f197a52987def8fde37f332eeb
+Ciphertext = 24cfc842c9bb65abbc5ff4e61cb2156c19663821c6d395b5
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = d08c1c902c4c2f078452dd6943b85028
+Plaintext = bde9e3eb9f0c57302c9185b1cb912ef76d88f2f9c3b51e9a
+Ciphertext = d8cce4d986ed5f974b1349a64086121caa16373b7a55a5c4
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = 32fefb87445f1ca42811899acc0cdf68
+Plaintext = 6f9ccc033c6bfbdfad4719ad033c927e2175727a9a021dc6
+Ciphertext = 0ab9cb31258af378cac5d5ba882bae95e6ebb7b823e2a698
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = 81d605a1019c8e9778b8928b4636053e
+Plaintext = cc67bc3b7afd625b2610226d3b30e111e6aa47a3254f711a
+Ciphertext = a942bb09631c6afc4192ee7ab027ddfa213482619cafca44
+
+Cipher = aes-256-ccm
+Key = 26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389
+IV = 72a60f345a1978fb40f28a2fa4
+AAD =
+Tag = 96a82e8411e5b04426dc608298c6408d
+Plaintext = a10c81725f49ab9075fbf4d96be030a2d881d8501b115d61
+Ciphertext = c429864046a8a337127938cee0f70c491f1f1d92a2f1e63f
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = 9e
+Tag = a462ff2dd8ba44a381e1f6edab12b5a9
+Plaintext = 1b5cc6b1651dec4bbbf5130343852e971c7ff1774100d9be
+Ciphertext = 789bce069a725a96c484e64a9e54dcb7a7c268c85df47815
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = 4e
+Tag = 6b0789c5866b7e3312ad992e228d6d20
+Plaintext = e7ab98901c0cb1d7d76e125d8ac8e86edf6f469fa937bc10
+Ciphertext = 846c9027e363070aa81fe71457191a4e64d2df20b5c31dbb
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = cc
+Tag = 39b1b1a480fdd268c1c75b131cde798b
+Plaintext = 53bc7e3648d0b389b887b065e9e8f79685beb2eb36e2eb95
+Ciphertext = 307b7681b7bf0554c7f6452c343905b63e032b542a164a3e
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = 45
+Tag = 32060fea35c3e9528fd18994fae9fce8
+Plaintext = 6d7262476da95db63b322c5193ea05030923c3cbf0f8e8b1
+Ciphertext = 0eb56af092c6eb6b4443d9184e3bf723b29e5a74ec0c491a
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = 2c
+Tag = b4e0a604ab30a764e8c98a9cafbca8d4
+Plaintext = 8246bf7b81b287411777df7ecb53a1795e54b150ff3dd584
+Ciphertext = e181b7cc7edd319c68062a3716825359e5e928efe3c9742f
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = a9
+Tag = 7ca72f1acf6dfd078b6f4eb82fa01e9b
+Plaintext = 2596ca8772bc69b50bcbf33088c6efbab614b691ed836f92
+Ciphertext = 4651c2308dd3df6874ba067955171d9a0da92f2ef177ce39
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = 85
+Tag = 2a85c9252ee62612dc29cffa7289b2ca
+Plaintext = 703065d701f4fcadee20d64300b3082c0c76490eb2dc4ba7
+Ciphertext = 13f76d60fe9b4a709151230add62fa0cb7cbd0b1ae28ea0c
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = dc
+Tag = 9fbdac729413152c089d3939e30b8602
+Plaintext = a1aeda4b4cb8dd2943675181561bac48ba07e8de5b327837
+Ciphertext = c269d2fcb3d76bf43c16a4c88bca5e6801ba716147c6d99c
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = ce
+Tag = f86266c273f8184e901b50c04845b8ab
+Plaintext = aa17341f4cead054d41c171dd34c459f7052da225c6c365d
+Ciphertext = c9d03ca8b3856689ab6de2540e9db7bfcbef439d409897f6
+
+Cipher = aes-256-ccm
+Key = a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b
+IV = 26ceaf6e3b28190a17c4f0c378
+AAD = a6
+Tag = ddd02d5c9ae2bbac47a7a076edb1d207
+Plaintext = 448cdd9cbbf863eb666fda36b825f3798827da3c1349611f
+Ciphertext = 274bd52b4497d536191e2f7f65f40159339a43830fbdc0b4
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = c0c3
+Tag = 06ec97f23bd6ea97834f92f7263c3195
+Plaintext = f4d7978fad36223623ccb5bb18a7373cba8a6e3b1c921259
+Ciphertext = bea778540a90033b2c0d087e3cc447711ea25f7eea968555
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = 34b9
+Tag = f3230df0b52b5cb7ac907dcadcb662ca
+Plaintext = f6c043c70136585d012ae0df6f42b25584e374649d0116c5
+Ciphertext = bcb0ac1ca69079500eeb5d1a4b21c21820cb45216b0581c9
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = d4ab
+Tag = a99c3165ce83102891ef3885088ed6eb
+Plaintext = dec0c896b04490816409da1783478ef2510231d0a28c5b39
+Ciphertext = 94b0274d17e2b18c6bc867d2a724febff52a00955488cc35
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = 2a3a
+Tag = c9d8078607994ae5dff0de6526fb53d1
+Plaintext = cbfd94fc31785d30214271dab2264134805fee6e52aa0b5c
+Ciphertext = 818d7b2796de7c3d2e83cc1f964531792477df2ba4ae9c50
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = 4eb1
+Tag = 7e84da7d2564533e7ad55390ec3a6ff9
+Plaintext = 134d2d9726400d09dd3521326f96fbef993ddc0c40887700
+Ciphertext = 593dc24c81e62c04d2f49cf74bf58ba23d15ed49b68ce00c
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = 0a79
+Tag = 520849295a56191367a696999ffef8e9
+Plaintext = 1ccdcf789d42caba80d7893feaf26d3853fbcaf7d964df0b
+Ciphertext = 56bd20a33ae4ebb78f1634face911d75f7d3fbb22f604807
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = 865f
+Tag = bc4aceed1a10309b6402b9e9420b33a3
+Plaintext = 4042dbe148db3e6dc542b25d57a5787af535d38e8c34c71b
+Ciphertext = 0a32343aef7d1f60ca830f9873c60837511de2cb7a305017
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = f4ae
+Tag = 76c180d2e299ccf0b8781ba6de8a72ce
+Plaintext = 85b6894fec36294aa934cdc3523fd95c90ad56cbd18545dd
+Ciphertext = cfc666944b900847a6f57006765ca9113485678e2781d2d1
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = 10bf
+Tag = 98d91c68d94873a5d6557611a5402a0a
+Plaintext = 0f27f4fc8538a676a763b3e5db845a1bfb20d5fab340dee3
+Ciphertext = 45571b27229e877ba8a20e20ffe72a565f08e4bf454449ef
+
+Cipher = aes-256-ccm
+Key = df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3
+IV = c1ad812bf2bbb2cdaee4636ee7
+AAD = b92e
+Tag = 5321cedf1122354636e130acbd69718b
+Plaintext = 1b5ec0cb03810a12fc6a0a1ff565afb001405d2a45a1f18a
+Ciphertext = 512e2f10a4272b1ff3abb7dad106dffda5686c6fb3a56686
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = 4dc2f4
+Tag = f59626ad5cdac2e4d4cb07b538a1fd8f
+Plaintext = edba7d6312144e90ec9eaace7576045a46e553dcb8ee5a98
+Ciphertext = 44b9ea727c847336fd739ad11f4b906b292edb810462f06e
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = 2f3bf0
+Tag = ed0d53402253453e494ad350994ca77a
+Plaintext = 52a9626f5279c11e17e96f5dc5e1c1f58c1e913020d8499b
+Ciphertext = fbaaf57e3ce9fcb806045f42afdc55c4e3d5196d9c54e36d
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = 95d2cf
+Tag = 96dbc3bff865a1d94b164df23d708e8e
+Plaintext = 87b6447d97a74d0b315031078aa06fffc7b9f246bfa5f147
+Ciphertext = 2eb5d36cf93770ad20bd0118e09dfbcea8727a1b03295bb1
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = 0caba9
+Tag = 791b4469fe50d45f8efb81217cd68580
+Plaintext = 1852848046706f2e274ba381a2bee1422df4f61d93219af7
+Ciphertext = b151139128e0528836a6939ec8837573423f7e402fad3001
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = f8d459
+Tag = 587106da25012f92f01cc2db8d11ac29
+Plaintext = 99aac82fa66a15e4f76b76cf4590150999d5cf8468df7f42
+Ciphertext = 30a95f3ec8fa2842e68646d02fad8138f61e47d9d453d5b4
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = e883dd
+Tag = 64148536847290e4fdda7966fe6d5e3b
+Plaintext = 4e2f0f91990b855a00d27fbb2e8db7184cd82909de361b52
+Ciphertext = e72c9880f79bb8fc113f4fa444b023292313a15462bab1a4
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = e45da4
+Tag = cc4cb33472825363940e2b26424b7802
+Plaintext = e558be3fd246170b294d18ffa708842242681890baf8bed9
+Ciphertext = 4c5b292ebcd62aad38a028e0cd3510132da390cd0674142f
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = 3b6fc8
+Tag = a99dd8dbe89b3ecf663eda1b0f92be7f
+Plaintext = f8b284c2d851289275973fcd807fac5d8e5e3b6a75ba2ace
+Ciphertext = 51b113d3b6c11534647a0fd2ea42386ce195b337c9368038
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = 043d68
+Tag = dc4894c8fa0a1e1aa760acf9360042f5
+Plaintext = 8edf1eb90f0ad33be8a7c6446899e06addc10b3badc4ea25
+Ciphertext = 27dc89a8619aee9df94af65b02a4745bb20a8366114840d3
+
+Cipher = aes-256-ccm
+Key = d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac
+IV = 2247dc7e2674e9e0a63fe70613
+AAD = e89257
+Tag = cdad1590fd8bf2d7ea919e60d0316566
+Plaintext = 8fe9a6bd82462c97f436d382d1ff971c95406b1a6c847d81
+Ciphertext = 26ea31acecd61131e5dbe39dbbc2032dfa8be347d008d777
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = 270981af
+Tag = c76fc350e585277e373e9119bf9595cb
+Plaintext = 0b92adbb251dc29a67f0bb97f8e7160862b6c4e843d07fd9
+Ciphertext = 274e2faea3271ea6fa0494c1951f115b5491a893056c3ee4
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = 633f3efa
+Tag = 0fa7e55dc54e80488a05ee7f1fc96e9d
+Plaintext = 1f88dfd4f5c52c22b1db47f9f4fb6e2f8bcd78d593061369
+Ciphertext = 33545dc173fff01e2c2f68af9903697cbdea14aed5ba5254
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = aad86fb5
+Tag = 18151c17d9e3f97244000a3b2d3c2f95
+Plaintext = b2b4cb5e90ebf4bd265093b7f5efd4d62dc60e29737aa496
+Ciphertext = 9e68494b16d12881bba4bce19817d3851be1625235c6e5ab
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = ed42941a
+Tag = 62d521c4b5c7a6f2c5ac65f2fd15b066
+Plaintext = f312b47d05f8eb5a29943b41347cb1983c75cb7a458a3868
+Ciphertext = dfce366883c23766b46014175984b6cb0a52a70103367955
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = e5b085d8
+Tag = e491a31218f688744098851672a09a64
+Plaintext = e9fb86938ea7f04cc230296859e7c96fcc352f968c9473e4
+Ciphertext = c5270486089d2c705fc4063e341fce3cfa1243edca2832d9
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = 3776f37f
+Tag = 0ece28347d7ebf8291d7eb66b7651b4e
+Plaintext = 8af6b7540f997954812e38dbd99ccfaedd5c69963c353a4e
+Ciphertext = a62a354189a3a5681cda178db464c8fdeb7b05ed7a897b73
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = 4eb08c9e
+Tag = cbd25fb40480d15c039878b5d2f25afb
+Plaintext = b90cfd9dd58e320d98510483b1d939bdb5f3b81666ecee59
+Ciphertext = 95d07f8853b4ee3105a52bd5dc213eee83d4d46d2050af64
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = c7f93152
+Tag = fbfd98c8567b78d4b9c3a49a4641908e
+Plaintext = 02caabc6ed0641681e7148c10cf3159fe35e44013252071e
+Ciphertext = 2e1629d36b3c9d5483856797610b12ccd579287a74ee4623
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = 57957630
+Tag = 655c1abcb3ed1a175f12721a407c5d00
+Plaintext = 2f29882fdf1418d04f0b9d44272995a56973c4369c687a99
+Ciphertext = 03f50a3a592ec4ecd2ffb2124ad192f65f54a84ddad43ba4
+
+Cipher = aes-256-ccm
+Key = 45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29
+IV = fdb1fa230ae0b172ff98fc7496
+AAD = 19da955d
+Tag = 90621a5e5683df421a0dc52341485d1b
+Plaintext = 4e427130be9e94639320529ec135715e65da1117b5ba3c76
+Ciphertext = 629ef32538a4485f0ed47dc8accd760d53fd7d6cf3067d4b
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = 3ba11282d6
+Tag = fe0667bcc5806b225224b04ade8b21c1
+Plaintext = d822f84b023f12ea9e3ce16b904278e4aaab5e11c2c23f3f
+Ciphertext = 9f91fd2f6472e33b02b1eabb9d6655729d44c44dad6b3883
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = 3f3a4718ea
+Tag = a6750fffa5a487540ce65770cd836e99
+Plaintext = af87b347b59e37a424004a00907dcbcf6a554e6782a9be12
+Ciphertext = e834b623d3d3c675b88d41d09d59e6595dbad43bed00b9ae
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = ff79ca8965
+Tag = e7cfafe32bd71ea9813607c5df446c9d
+Plaintext = 82b7cd168b6a82cb2d837f41ceda0c27adc5f5b28030454b
+Ciphertext = c504c872ed27731ab10e7491c3fe21b19a2a6feeef9942f7
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = 0021be18ed
+Tag = 76716fe674c33ad3b9d3e54cc86bfccf
+Plaintext = 1c1a0f144df76781e7c85ab178ed9b1ce8c6dc3f15c59149
+Ciphertext = 5ba90a702bba96507b45516175c9b68adf2946637a6c96f5
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = 9ae7996547
+Tag = ab55dbee34f1bab555bbb196095fb5fd
+Plaintext = d9bb71ad90152d5c1af358c8501fa89ebd4b17bf4ff43841
+Ciphertext = 9e0874c9f658dc8d867e53185d3b85088aa48de3205d3ffd
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = fa292d1958
+Tag = 76a4e9e759d5bb79c187a157099e3d12
+Plaintext = fc7d028a1aa05c74b7ffe333ba6f676913b0f9f1ffa050b8
+Ciphertext = bbce07ee7cedada52b72e8e3b74b4aff245f63ad90095704
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = 88800df7b6
+Tag = 9f0f3699c9743ad6c9f09dc00ea10487
+Plaintext = c9ea772e61742a6706da3ab3e81df14b31506ae58b063ece
+Ciphertext = 8e59724a0739dbb69a573163e539dcdd06bff0b9e4af3972
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = 715041afd4
+Tag = 560d78cba6d9f50e9c2677a710f92155
+Plaintext = 70d2b8d64121ceccf1961444e8d33b7b7f998aeb58d3d270
+Ciphertext = 3761bdb2276c3f1d6d1b1f94e5f716ed487610b7377ad5cc
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = 14682301a9
+Tag = 95ffb6e29172a283d47e4478e2e1f7c4
+Plaintext = 1013946815001a2c08acca4196e0d6668ffbb3883cf111e7
+Ciphertext = 57a0910c734debfd9421c1919bc4fbf0b81429d45358165b
+
+Cipher = aes-256-ccm
+Key = a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd
+IV = 693cbb46bc8366086ec7cd7776
+AAD = e44c3c21c1
+Tag = ccf233caf0bad9f68f71d78ee58512ec
+Plaintext = f40dc834067bd163e0004d0ec5dd4b96e2a1ea31ea431c98
+Ciphertext = b3becd50603620b27c8d46dec8f96600d54e706d85ea1b24
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = 4759557e9bab
+Tag = a88179e0d32f4928eff13b4ce2873338
+Plaintext = e758796d7db73bccb1697c42df691ac57974b40ca9186a43
+Ciphertext = 93ad58bd5f4f77ac4f92b0ae16c62489e4074c7f152e2ed8
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = 2ea07d393a0a
+Tag = b7d812c4d69f1f53ee9158382e56625b
+Plaintext = ce60ddbe40b70bd55a9147036ad079dec1558ef4c2c625b3
+Ciphertext = ba95fc6e624f47b5a46a8befa37f47925c2676877ef06128
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = aa6667faedc1
+Tag = 26fdbed62b228db008a1b14bd7942e12
+Plaintext = 89eb3056770a6157f06921bc153834447c4b6d862d10d185
+Ciphertext = fd1e118655f22d370e92ed50dc970a08e13895f59126951e
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = 9e2127d92311
+Tag = 124e1eb78de01b8af83b684baf3e43ad
+Plaintext = 132f3e19e12f462a7463226b716c41a05a59c76f0e1a2f72
+Ciphertext = 67da1fc9c3d70a4a8a98ee87b8c37fecc72a3f1cb22c6be9
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = 2f191bc9cff6
+Tag = cb0f79736d1a810d06a776094f9fb67f
+Plaintext = b8611cbb9a3667b9458ca57eb636eb1dc580e7dbb5701692
+Ciphertext = cc943d6bb8ce2bd9bb7769927f99d55158f31fa809465209
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = ad739d5f4736
+Tag = bfba2348f629471c232c9ff7e5f6f85a
+Plaintext = 112f89ccbdadc2433008d3ede2290f9ce81e5c736abf42a8
+Ciphertext = 65daa81c9f558e23cef31f012b8631d0756da400d6890633
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = 01acc909b7d3
+Tag = c0f694d03ffed043787343827ea2603f
+Plaintext = d47f2ff745de39a9055ad002de6334971fde480bef268b33
+Ciphertext = a08a0e27672675c9fba11cee17cc0adb82adb0785310cfa8
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = ce003c836a6f
+Tag = 279b553998a6fee0a86e177a448573a4
+Plaintext = 13be365884b8a91a284ca24f70011e48794b51be275153b9
+Ciphertext = 674b1788a640e57ad6b76ea3b9ae2004e438a9cd9b671722
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = 6a759a4efd00
+Tag = 4eeb434cca3ea719827417e94d6ed564
+Plaintext = d5c87c649579da3f632ba95cb0a07c924095e4bdd4e0376e
+Ciphertext = a13d5db4b781965f9dd065b0790f42dedde61cce68d673f5
+
+Cipher = aes-256-ccm
+Key = c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8
+IV = c45b165477e8bfa9ca3a1cd3ca
+AAD = 02b84a26c773
+Tag = a74b5e4e2edb91fbbe722bfaf1500db4
+Plaintext = b7bc1580c68fd5d06c1bf75c31dad7a3e26d636d7eee20b9
+Ciphertext = c3493450e47799b092e03bb0f875e9ef7f1e9b1ec2d86422
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = 0b1fabdf2a4107
+Tag = 6d5a6e4b1fbee15d35939c721004502e
+Plaintext = bc9ca92a9c9919e39095d3e53fb148694620ae61227e0069
+Ciphertext = 45811b0c8f754bf03950e520cd4afc81c2e3eb8a11f4fd38
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = 2fc7f5c0ce052f
+Tag = 24a68f98716190fb55f743a8bf62a085
+Plaintext = f25a4ca20bbf4969bed6b93c1c77e3d7415f60fe3784216b
+Ciphertext = 0b47fe8418531b7a17138ff9ee8c573fc59c2515040edc3a
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = 8a74412da3034b
+Tag = 23afef7b4955d7d1e8f1abef9933bf9f
+Plaintext = 3237bf953989d17c65a0fafd2bb1e32c237f98f55389e8f8
+Ciphertext = cb2a0db32a65836fcc65cc38d94a57c4a7bcdd1e600315a9
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = 7139f3c1d6cc36
+Tag = 8e824c62632dff5cbc103d3060fbd174
+Plaintext = 55d86dc0423cfc2616ef996a3316e776707f8d25c985884a
+Ciphertext = acc5dfe651d0ae35bf2aafafc1ed539ef4bcc8cefa0f751b
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = af7a380f079aa1
+Tag = 80202d518ca871c9544f4a8c55fd8d20
+Plaintext = ac48398adb10292314973946f261ec39397442ca09b98dd8
+Ciphertext = 55558bacc8fc7b30bd520f83009a58d1bdb707213a337089
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = e602abe8f72964
+Tag = 4b33ea6e4344033f74f513d1e41b82ae
+Plaintext = 2fb78654e4395df8c37f260d74def234a3a4e3d2b1fe8614
+Ciphertext = d6aa3472f7d50feb6aba10c8862546dc2767a63982747b45
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = 82741c5fd6e1df
+Tag = 73ccf18c7ea7dce79d0be1204c593234
+Plaintext = d488bdda400932de56a9f105f0e74ee79c2ed869faaadc31
+Ciphertext = 2d950ffc53e560cdff6cc7c0021cfa0f18ed9d82c9202160
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = 78f0cc22535402
+Tag = b81b8af57b85093778690266e20e2fbb
+Plaintext = b22aba8d3e9f4b4bf006e26062de15daf94597731a600912
+Ciphertext = 4b3708ab2d73195859c3d4a59025a1327d86d29829eaf443
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = 18e468139dd16f
+Tag = 9b94a857e7a0423ef6c9cbebde1f9c40
+Plaintext = bd864f7b8efd6ed2b068f425482d449bf53a203ea88e1ca1
+Ciphertext = 449bfd5d9d113cc119adc2e0bad6f07371f965d59b04e1f0
+
+Cipher = aes-256-ccm
+Key = ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548
+IV = 6333bde218b784ccd8370492f7
+AAD = a6dab47c0fbfe1
+Tag = 64718820065a739fbd3ba560a416895c
+Plaintext = 47d9d18b6addc5f88986f0457b666faae59aba4fa3a02abb
+Ciphertext = bec463ad793197eb2043c680899ddb426159ffa4902ad7ea
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = a6601111cd92c943
+Tag = f2a9047e37cc0be1fab0006af8db8dc4
+Plaintext = 49fd5cbe4aff89dc3b8718f9ce545d612cbbebb289ecbf42
+Ciphertext = 3cfc6211e359ae322802fc9566f377b0dfe17d1dfe0878eb
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = 96f0b7cd7439721d
+Tag = 106a430b04938e97f2e4cda81108ad3e
+Plaintext = 94a95e945f660d1571b4d7d22709b000b45ff98b2129a4ae
+Ciphertext = e1a8603bf6c02afb623133be8fae9ad147056f2456cd6307
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = 2ee135dc2ddd9501
+Tag = b2ab219c6c4952d52505cd9f904b0e04
+Plaintext = aeed3aea01755c912213c8c276a2b75dad24f888a611efa3
+Ciphertext = dbec0445a8d37b7f31962caede059d8c5e7e6e27d1f5280a
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = 10c361934fd6ff77
+Tag = fc1f7b2fe314faea28ab0dae349feb9c
+Plaintext = be1fcebea4c22a1d71e08047b028d7f4ccab0a6b8085d344
+Ciphertext = cb1ef0110d640df36265642b188ffd253ff19cc4f76114ed
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = 3f6c8a69917f7776
+Tag = 08e529d64e786a29661cccddc0366f3b
+Plaintext = 87680ac26fe1511e0f1f745aa4c2a5b9f6c0117dcf08feaa
+Ciphertext = f269346dc64776f01c9a90360c658f68059a87d2b8ec3903
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = 0f7a1426ff3b5ee1
+Tag = 97c6510b85dfd097f3eac276aff00ba2
+Plaintext = 9e004b072a27b085e59ca201c157c7d3c906a2c3b455c56e
+Ciphertext = eb0175a88381976bf619466d69f0ed023a5c346cc3b102c7
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = faa5bed84dcf168e
+Tag = 8e522b6f13f99ecb553b6de845940907
+Plaintext = a1bf47b15cd66e43daff420edf014a14b11994b97ada4030
+Ciphertext = d4be791ef57049adc97aa66277a660c5424302160d3e8799
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = 2851dae3cb3fcb1c
+Tag = 7a9ca39566189ee96c86462bfea78af5
+Plaintext = 2d15734871adc63ff32d7002ab40c4a235a4d5fad223953f
+Ciphertext = 58144de7d80be1d1e0a8946e03e7ee73c6fe4355a5c75296
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = 35a29c1bcbe2182f
+Tag = a613b5fbbe73a2df6c630a00ff4b1b92
+Plaintext = 5a84c4fdd47510fb7aebc0f79d7b625ccd0a96575740b8e6
+Ciphertext = 2f85fa527dd33715696e249b35dc488d3e5000f820a47f4f
+
+Cipher = aes-256-ccm
+Key = 548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce
+IV = 23b205bd6ff8ed0bab0c98999c
+AAD = 45820ae66c3e8e77
+Tag = d19feb067e9f6225376da21b4899d296
+Plaintext = 2052a94e1392dc1db0e89be19ea8f7379ee4cb607a914c89
+Ciphertext = 555397e1ba34fbf3a36d7f8d360fdde66dbe5dcf0d758b20
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = 82b8c736037ce2f2e8
+Tag = 0de1a3f7fc5d06cc30f06075f5504ed7
+Plaintext = 7c0889854658d3408c5d8043aad2f4ae4a89449a36f8a3b8
+Ciphertext = 1044250f58857c69f72b5d3454d43949e5c02b3822970b28
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = 8f2777ec4930f7e349
+Tag = 835840df6fa96f5c972ac09d94148cbc
+Plaintext = bd845561f099500a6ff3fd09964dc3820f7ab48ba4ed04d5
+Ciphertext = d1c8f9ebee44ff231485207e684b0e65a033db29b082ac45
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = 5cab3b846870709569
+Tag = 2f83ef84b299cfdb61d2b5039d536c3f
+Plaintext = a6e09404fe60badfc63dc228057485e6f563ba82acdabd7c
+Ciphertext = caac388ee0bd15f6bd4b1f5ffb7248015a2ad520b8b515ec
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = 0938f2e2ebb64f8af8
+Tag = db04e655cbe22b9ea508d2a03757b97c
+Plaintext = 33404d7e0e620c1030b91020e33619c5f53d8b210fa86489
+Ciphertext = 5f0ce1f410bfa3394bcfcd571d30d4225a74e4831bc7cc19
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = 82f78ca0e0da2b2d3a
+Tag = 4bd88dc6985f819004c2b634c5303ed8
+Plaintext = 617868ae91f705c6b583b5fd7e1e4086a1bb9f087a50bf50
+Ciphertext = 0d34c4248f2aaaefcef5688a80188d610ef2f0aa6e3f17c0
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = 401191aa3fd34abe87
+Tag = 4ff3572e4ebf78473760d8cb4b0366b4
+Plaintext = 949cdd7c2973d7519e7bca98b2c5947e6d8e91c90e632319
+Ciphertext = f8d071f637ae7878e50d17ef4cc35999c2c7fe6b1a0c8b89
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = 4df4377596d8987671
+Tag = de95ec3eee17753e60fb3c0661bdd098
+Plaintext = f6720a0bd8705c70e0f923338965e810b3ea939bad652327
+Ciphertext = 9a3ea681c6adf3599b8ffe44776325f71ca3fc39b90a8bb7
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = 6593194b9970545c5a
+Tag = b8590ff04f967e51fbd1be84f01b4dcb
+Plaintext = de9b0556661e726f3e6e34515ff7196420fe61b4f38419f2
+Ciphertext = b2d7a9dc78c3dd464518e926a1f1d4838fb70e16e7ebb162
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = ab2d432058b540ac72
+Tag = 71d67b75b2da855a12ffb24ddd64a048
+Plaintext = 6cad7f3b9f196839bbc5a7f755c09aa8e17c83d9cb8b3954
+Ciphertext = 00e1d3b181c4c710c0b37a80abc6574f4e35ec7bdfe491c4
+
+Cipher = aes-256-ccm
+Key = aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a
+IV = 10022cddb323e88b3c08f95a0f
+AAD = 5dc631eeeacb5a0b0b
+Tag = 1fc798dd16c1fadef607a9297cbfbfef
+Plaintext = 70a55aec1144357377612fd0bbc2c817f33465a656219957
+Ciphertext = 1ce9f6660f999a5a0c17f2a745c405f05c7d0a04424e31c7
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = 215e2a6c24325340fdec
+Tag = 3d70e6dffb31a376a1eb7f94526dca48
+Plaintext = 3216dce3b8b1ce0e79e40fffcac728ab191aaaf319d971d3
+Ciphertext = c5b3b50ed8a7b7b96b02ba9464b6a2ff80e90548605699a6
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = e0a29a2c7840cf9b41de
+Tag = cbf516608fe20e06bbff931e84683545
+Plaintext = 7e5e5710a693ebfa36335cf7965574740880acdddd13fb1a
+Ciphertext = 89fb3efdc685924d24d5e99c3824fe2091730366a49c136f
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = b8026fbada6339d84802
+Tag = d70eb14f3fa0229906b9e0360be3d3f9
+Plaintext = 08c342a50aa23362622934dfab55d9b22c22c249ad08138c
+Ciphertext = ff662b486ab44ad570cf81b4052453e6b5d16df2d487fbf9
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = 65f4b3a00c1c1ef39445
+Tag = 4184771199a427861bf17cd8401e794e
+Plaintext = e085aba85882c75d5e41559167731496cf17d3907894352a
+Ciphertext = 1720c2453894beea4ca7e0fac9029ec256e47c2b011bdd5f
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = 96118dbfe53434d8aed8
+Tag = 4e20b2db52fde68f88bfb886fdcb2c47
+Plaintext = 710f890be2b8da77c1eff429ede9cc931d50f059748cbcb6
+Ciphertext = 86aae0e682aea3c0d3094142439846c784a35fe20d0354c3
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = cdf4b485d2e04709cf8f
+Tag = 82ee3df38ddea8e269eb47e39900345e
+Plaintext = cda96efee4e188ab3048bc1904ac2c36ab018f2ab7602682
+Ciphertext = 3a0c071384f7f11c22ae0972aadda66232f22091ceefcef7
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = 50e57e57cf8e49e3a4e6
+Tag = 44aaac4ed86f687cfc031f22827725f1
+Plaintext = 3dc596d52e520779a50bcba3049388b340dbf6d0f2eb94cf
+Ciphertext = ca60ff384e447eceb7ed7ec8aae202e7d928596b8b647cba
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = 48c670f11ff7f74e7003
+Tag = d75255006ac037d6a4d048f1fc338012
+Plaintext = a33105c0dccf8e3b687212a870af9f710462756705fe09b3
+Ciphertext = 54946c2dbcd9f78c7a94a7c3dede15259d91dadc7c71e1c6
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = 465e3be6113a2fb2ee20
+Tag = 6c1da33a80bc8157cece1acf9400b2bb
+Plaintext = 573ac2436158eb7dd9be981e3cfbe75d3a188ea9cf2b1ee2
+Ciphertext = a09fabae014e92cacb582d75928a6d09a3eb2112b6a4f697
+
+Cipher = aes-256-ccm
+Key = 06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77
+IV = 6c7942c9819cf69b817bfcdb0a
+AAD = ee4e10574faeae85e9b6
+Tag = 65c1cb98da4a1a920ca1ed9a7b6ec514
+Plaintext = ca35bdb54e73eac5a5200a296b3aba5f37c87349746102d4
+Ciphertext = 3d90d4582e659372b7c6bf42c54b300bae3bdcf20deeeaa1
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = f706a3e09df95d3e21d2e0
+Tag = d6c05eaf406a5ebd578e19edd5227380
+Plaintext = 6cdbd63f6d591f59776f828533b28e2453a214d1d0dd8a39
+Ciphertext = 8c8b4ae854a5d5c265b25e3b54bded9444cc454b3e0e6a24
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = e46b25b9a41a858e87900a
+Tag = 5088446e42591c0ede68e82334d97cfa
+Plaintext = 100132c315bfc9c4fb93023f5d3500d7208a68acb4d2c630
+Ciphertext = f051ae142c43035fe94ede813a3a636737e439365a01262d
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = 28d34b29afe6586fd9bf0e
+Tag = 3eaaef2823f5ac3f313f560bd774d10e
+Plaintext = d5460c1db0d24dedc63c4c78ce6d1f0b2d46f3b01934525c
+Ciphertext = 351690ca892e8776d4e190c6a9627cbb3a28a22af7e7b241
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = 2852d4fd68a3e9e47d44a7
+Tag = 62d30d99bb7dadec34e2891c156a1f5d
+Plaintext = d2d73b62e3b1c9ab75f3544ff8616741e0adbae84b8cf9d0
+Ciphertext = 3287a7b5da4d0330672e88f19f6e04f1f7c3eb72a55f19cd
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = ec1c17b2ab13d7c8ac874f
+Tag = 41c9a05ebf9ed27792bbced83b5dc582
+Plaintext = 74796d78d6ad03634ed80800af530212baa7e5093651cedf
+Ciphertext = 9429f1afef51c9f85c05d4bec85c61a2adc9b493d8822ec2
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = 4f1ab5ddb1c199e9a5daab
+Tag = 1ffc24020e86b1314724104e6b57b3ce
+Plaintext = fb432488b5d08d576a90f085181ad883407a6ce9ea29950a
+Ciphertext = 1b13b85f8c2c47cc784d2c3b7f15bb3357143d7304fa7517
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = 864e0e728aea856fae6c6d
+Tag = 539bbb0af8ecf77b4508533247b3501a
+Plaintext = 2b82d96ed1778412378abe4e09c633acf3359b9709ae3dcb
+Ciphertext = cbd245b9e88b4e89255762f06ec9501ce45bca0de77dddd6
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = 21ee21a5ed0d75d0380a28
+Tag = f8981ec6ce7c4687b178f2103fa8c8be
+Plaintext = 85143071241bb65261fe7afcc102416e59b9e46ee0c90073
+Ciphertext = 6544aca61de77cc97323a642a60d22de4ed7b5f40e1ae06e
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = 2b63f7b676f13f45d103dd
+Tag = 65d9d899c6b71c0ab3049ea1dbfaf6a9
+Plaintext = 185577b48237acbdaa3590b8057fe374f875ce829b62c98f
+Ciphertext = f805eb63bbcb6626b8e84c06627080c4ef1b9f1875b12992
+
+Cipher = aes-256-ccm
+Key = 50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763
+IV = 85684f94c3702c5d870310166d
+AAD = a33e86d813c2c4ff3bab20
+Tag = b246474c4e79822f5fd55f2fb0067a40
+Plaintext = f051beb936e60fd4f3bca31964f1ad3e6fa16dd27b65a6db
+Ciphertext = 1001226e0f1ac54fe1617fa703fece8e78cf3c4895b646c6
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = e4296d1c8cf4ffc4b2635135
+Tag = de3ed995d1b70561c8e28a7b1a7e3dc8
+Plaintext = c825952293e434ea866db558aaf486ef09a92bf366988f71
+Ciphertext = b8b3b15fdf6a4a0b5abc313afc769e4e8413bd887552583e
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = d18bfcc1584eeb8695388ebe
+Tag = 561575f6743c5759494be59afa0c3e11
+Plaintext = a1e0248355bfd1d881fb1a4798cda2f6f6ad513c69c5f9b4
+Ciphertext = d17600fe1931af395d2a9e25ce4fba577b17c7477a0f2efb
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = 14682301a99bf680805d1ffe
+Tag = 34f689367228cbaf3cd76fb407109cf6
+Plaintext = ded135fcbf62219bfba2cba40c2d2cbe4815ddaac1342231
+Ciphertext = ae471181f3ec5f7a27734fc65aaf341fc5af4bd1d2fef57e
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = 8853aa2dfea9c4d370678bb6
+Tag = 2cacb7fc3856abcf759feb8dc0998ab1
+Plaintext = 12d3900c6c01968b8344762e0e883e5e219f42b052dc6215
+Ciphertext = 6245b471208fe86a5f95f24c580a26ffac25d4cb4116b55a
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = c5d3b9c593c3185fe4b6d1bc
+Tag = 42a740cd3262424a2c3d77849ead6149
+Plaintext = 8c3c1193fe1a1ebad7e01a1eed1a32c08a0091b1c948e184
+Ciphertext = fcaa35eeb294605b0b319e7cbb982a6107ba07cada8236cb
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = dfb9e8149b51f89b1ec00a8e
+Tag = 47d4dbe0f9415d40843070e1e93059eb
+Plaintext = 8219618b7728ac89237705ecf84012cc7c80293c4cf171d8
+Ciphertext = f28f45f63ba6d268ffa6818eaec20a6df13abf475f3ba697
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = 08a4590d262e4dbcb7e23ffc
+Tag = 1215b3dccba4ca5de64be7fab8a7a22c
+Plaintext = b344b7dc239617fa51b9ea10a349e940c3163779f5284c9c
+Ciphertext = c3d293a16f18691b8d686e72f5cbf1e14eaca102e6e29bd3
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = 74aab7b5b96238710637c6e5
+Tag = 34e09945ee44c95c7923d8b9249ade7b
+Plaintext = 740d4b25ca7221d0826057701a6bfd66c50a82f010a57be8
+Ciphertext = 049b6f5886fc5f315eb1d3124ce9e5c748b0148b036faca7
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = 420aac47a3f212fffca40549
+Tag = 0a568dd779526a0058d522af1dafde30
+Plaintext = 5d9000489186abdf4f0a2794f0222fcaa156fe6309c10f79
+Ciphertext = 2d062435dd08d53e93dba3f6a6a0376b2cec68181a0bd836
+
+Cipher = aes-256-ccm
+Key = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed
+IV = d80210b9f9776ea36dc0e0a787
+AAD = 6e80dd7f1badf3a1c9ab25c7
+Tag = 279442c88d612ed1a39ae0005f88155d
+Plaintext = ac2c44263363810bec3a309aa618b303e05099dfdbeb5c16
+Ciphertext = dcba605b7fedffea30ebb4f8f09aaba26dea0fa4c8218b59
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = 569c56b27268d3db54e728aac0
+Tag = 8aaaac20d4c9276f2851cbba2b04d185
+Plaintext = 10d4cff95ef490923c9e0906880729d4d05412e7675cce76
+Ciphertext = be3ce3e9dc72499839a98ae52abb17415e8547687e8a3c7b
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = d75635b6450e43285fba966835
+Tag = c121ff83891335dd1214ea6fc25f6a68
+Plaintext = c9db03e2efbab713b0b640421018d3971ffe2abd70fe8fa1
+Ciphertext = 67332ff26d3c6e19b581c3a1b2a4ed02912f7f3269287dac
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = 70750acea6a05f8b7b425d262b
+Tag = 549e71ec517cd65150f42b3cb53f936e
+Plaintext = add631ce5846ce71434aad4998f8e429aed430e7d38bdbb2
+Ciphertext = 033e1ddedac0177b467d2eaa3a44dabc20056568ca5d29bf
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = 2a567c7ec7edaa5a438ae3bb35
+Tag = 0e432ec394ddbb65205dc40a5a8e90a4
+Plaintext = a514d170422feb1d87bb7725a9e77cc6fc8afb45c2af6d90
+Ciphertext = 0bfcfd60c0a93217828cf4c60b5b4253725baecadb799f9d
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = 0f8795385b805246a0a2573afc
+Tag = 926b0d977107a3918717f79b63f36b0a
+Plaintext = 79d8841ab83279724ce35e1a8abd4e158168dcf388ab4c3d
+Ciphertext = d730a80a3ab4a07849d4ddf9280170800fb9897c917dbe30
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = 111d224c102b136159fbeb44a7
+Tag = c2cd61599bb93db3dd3dabc12aa90932
+Plaintext = 2edd498e54b23aab6f4fd7b3f22c4c787e3a4f1fb06c9ec7
+Ciphertext = 8035659ed634e3a16a785450509072edf0eb1a90a9ba6cca
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = df0821c9ea6ab329c626d11b4b
+Tag = bd027ecd00cc6dc5ffd5d746d92281e9
+Plaintext = 6e3e25db29da2c787bb37755ee770e2402fb8208da23389d
+Ciphertext = c0d609cbab5cf5727e84f4b64ccb30b18c2ad787c3f5ca90
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = aacaf4839c35338d6e2b47ac45
+Tag = 3c01354a450eda2588be7578530e38c0
+Plaintext = d4ed4584678e982ace8664e77d0e55be356be558cead3755
+Ciphertext = 7a056994e5084120cbb1e704dfb26b2bbbbab0d7d77bc558
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = dc6eed3f8bd1b5563c1eeb9afa
+Tag = 8d7a1d546e25ba026cd46556eb2c4b7e
+Plaintext = 4ebf00eadaf70711f630f5badf0214d8518a200afb0e5765
+Ciphertext = e0572cfa5871de1bf30776597dbe2a4ddf5b7585e2d8a568
+
+Cipher = aes-256-ccm
+Key = a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930
+IV = cdc2712e51c7f333d6bad78eee
+AAD = fbfe7e910f242a78dd6e69a2ec
+Tag = 0e951aee790239e7067ef37f497b4bf4
+Plaintext = 2729636112f2abe2c76ea5e52a3f80b0f882f0f3b6f7c806
+Ciphertext = 89c14f71907472e8c25926068883be257653a57caf213a0b
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = 511c6924fa96db716f6b053b7a48
+Tag = e949b93003dfe63c95c1d49edfb4de3f
+Plaintext = ca88dddfc876a12f45f19562bc9ca250f43267ab251a7f34
+Ciphertext = eeedcfa8f5b5b48c1d7e277526eecb7294213b9f5785167a
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = 10c26d5939618189a9503623f55f
+Tag = 85c32a90d77fed97eb0ac164ed616e1c
+Plaintext = de0c0d17c3950e7f8985b56d60623cbd010cd765da4df5ab
+Ciphertext = fa691f60fe561bdcd10a077afa10559f611f8b51a8d29ce5
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = bc09c59d20e55a9e184d70af2c7c
+Tag = 180fdf5f63045f326057cf74fd4cee6b
+Plaintext = 2f35102d78a32fcde1cfb563ea8d310ecb83c146ab8de362
+Ciphertext = 0b50025a45603a6eb940077470ff582cab909d72d9128a2c
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = b75887f13d6e8c4b35b27b965693
+Tag = 34959a180fc2cf2ba99af21cc1bc8e5c
+Plaintext = a3fcce3420effdd6edb37271735a0d30c10c65233aee173f
+Ciphertext = 8799dc431d2ce875b53cc066e9286412a11f391748717e71
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = 603401a9b8ecde4d5c86b6107363
+Tag = 2ca2e5195dbd44f0a119538c95788510
+Plaintext = 4ac918727e41b8c536484e3781c403e260c278712853508d
+Ciphertext = 6eac0a054382ad666ec7fc201bb66ac000d124455acc39c3
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = 7206b06f306124ca3a302e84c5a6
+Tag = 74a4e1198878a76291594b9826d4b563
+Plaintext = 97d770cbb2c42a552e450cc4e35e5668b2ff89cec735cc91
+Ciphertext = b3b262bc8f073ff676cabed3792c3f4ad2ecd5fab5aaa5df
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = b15efed90a5d1d62f545ac22af6e
+Tag = ff5f993dcfbd048274da7439c0f9ef5a
+Plaintext = 86bb2ae50e36c72936240a74502172625cbca210cf285077
+Ciphertext = a2de389233f5d28a6eabb863ca531b403caffe24bdb73939
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = c9eb714ed9858a8dc11a26ee3f00
+Tag = 0e87710559a375ece6ef2953b6aa2542
+Plaintext = 0dc79993047fd6e7260aac4d847fdb4d16483f28b13b5f17
+Ciphertext = 29a28be439bcc3447e851e5a1e0db26f765b631cc3a43659
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = 07ca22271e95cb48a872046822b7
+Tag = 998035c81716e2d1ed4b4d56ff18af5d
+Plaintext = f950e96d65a55efb3be3a55daffb421afad1d5625e3440a1
+Ciphertext = dd35fb1a58664b58636c174a35892b389ac289562cab29ef
+
+Cipher = aes-256-ccm
+Key = 347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c
+IV = b8d517b033754058128d13d11a
+AAD = b65f6773516124317cfb4b1fcdf5
+Tag = 1ae73a9b6896d8fc1b8c0d772d632983
+Plaintext = e160e28e601a49d16db18f25410756b330b036c42e615fd6
+Ciphertext = c505f0f95dd95c72353e3d32db753f9150a36af05cfe3698
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = 22b4f8f1aac02a9b2ef785d0ff6f93
+Tag = 8a8f8d14d2bdac84c3737cfbd75b7c0b
+Plaintext = 533fee7d2c7740db55770e48cb1b541d990ea3f8f08ed1a6
+Ciphertext = fc867b319e0e4ab45ec518a1b5dcec4f29982173f3abfd4d
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = d0a43de391d492746ecf322acd6e5b
+Tag = fce59f5e6e3cee284b4cc747ff5ee13f
+Plaintext = cced20b59a6b2c3c45ea6c87802440c9c47b1015e83d86c3
+Ciphertext = 6354b5f9281226534e587a6efee3f89b74ed929eeb18aa28
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = 3a789c06f87f05933c34a1cf9834a8
+Tag = ddaef56d8255125f7c316c6c59ce779f
+Plaintext = 90939a4530181ad6900664f66bfc2ce0289432a0afe9babe
+Ciphertext = 3f2a0f09826110b99bb4721f153b94b29802b02baccc9655
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = 785260973f112c56d9f891160c4c11
+Tag = 55810cbcdf48f05d0a7808673c82d08d
+Plaintext = 86cd926b9565b76a88fde73c31e9ac908ffd1e6ca30b59ce
+Ciphertext = 29740727271cbd05834ff1d54f2e14c23f6b9ce7a02e7525
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = bf6a144591c0ea7b10274fbd3345a1
+Tag = 49e41e5d34a698ae1d96f16bc68da944
+Plaintext = 6ecd1c1acc6290672f9cf639ed0cebcb21ed0c56f35a5ce3
+Ciphertext = c17489567e1b9a08242ee0d093cb5399917b8eddf07f7008
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = 7d9488b500d89a27f367f34a448a87
+Tag = 1bc54e546d1a6fcf6187169feb1ea533
+Plaintext = b01e3f4fb5ee7501e8c2f4ccefb542ae20d7fd61a2c41c8b
+Ciphertext = 1fa7aa0307977f6ee370e2259172fafc90417feaa1e13060
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = 060fc718e994edc7bac9962ca7f28d
+Tag = f2eb6c0ab42acf42985c721bfd576e71
+Plaintext = 22ab6a0daf953165dda864cceeeb782e275c0b072aedd284
+Ciphertext = 8d12ff411dec3b0ad61a7225902cc07c97ca898c29c8fe6f
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = cb6f96dd06015967279ade310a7401
+Tag = ac502b8e65cc1329b6895afdd354f5db
+Plaintext = f96ed20b23c784015ff58f5f040798ca75e3b98045deca8e
+Ciphertext = 56d7474791be8e6e544799b67ac02098c5753b0b46fbe665
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = 9aa6d501455019b4ef4c7fb789d22f
+Tag = 87e5f8a8148f21adf721477c36bd99ca
+Plaintext = 648a84813ca97aef4ab7e143ee29acb946388660f18eb671
+Ciphertext = cb3311cd8ed070804105f7aa90ee14ebf6ae04ebf2ab9a9a
+
+Cipher = aes-256-ccm
+Key = 520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe
+IV = ddf50502f414c1bf24888f1328
+AAD = ebd1d12bbd14176a0d4080aa1edb89
+Tag = da9ea0427522dbeaa509a11755434760
+Plaintext = 32d71e59634126ac6c6156a80a0dfa0175b29e9f40a31696
+Ciphertext = 9d6e8b15d1382cc367d3404174ca4253c5241c1443863a7d
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = 0ae8c012ff39753510df3ee80707e4e2
+Tag = 0ec2c6fb687753bca4580adc6aa2f296
+Plaintext = ddc3c1aa73fb6de92bb4db138e26f3c2e0543ab4f5924871
+Ciphertext = daa8256d4753fdf9cfef876295badaba89b45cc497f54d22
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = d5b22e7697ba70e00c7ef32709563f01
+Tag = 8f30b9c8e380c98bb939a4e8a85af758
+Plaintext = 34270576724083e9989764d08a0d5c1b4738f34927a1e436
+Ciphertext = 334ce1b146e813f97ccc38a1919175632ed8953945c6e165
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = 6b4edef415763aabcef01863e8197aec
+Tag = 53e80d8ccc687fd303f4cdef44b6e8b9
+Plaintext = 904fe88e7a8e76447a64b488ef84184d0f1ab1b67f0c5a7d
+Ciphertext = 97240c494e26e6549e3fe8f9f418313566fad7c61d6b5f2e
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = 4c099809061024c010a77e9621fc2bcf
+Tag = 0c635dac5b70338dac3f33ce16a99145
+Plaintext = 51fe7bac8f3255f17f64fb9322210fb7d8da8e762498b233
+Ciphertext = 56959f6bbb9ac5e19b3fa7e239bd26cfb13ae80646ffb760
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = 9d329439588164d5a96675a85c07a039
+Tag = f996e8163affb1494bb3c12eeadf16b6
+Plaintext = eab6dbc13bb92df36b1882df2b8f34c3cefa41f95717fbd7
+Ciphertext = eddd3f060f11bde38f43deae30131dbba71a27893570fe84
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = b768fc3daf29ff9e8bd575072d986e99
+Tag = 98b4206a9622d5631751a497dfb1f662
+Plaintext = c44c9c287d3eac7c30570d9c4adf2e4857c598f7c54cd126
+Ciphertext = c32778ef49963c6cd40c51ed514307303e25fe87a72bd475
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = 3efc7cc2d16bf82d2bcfbc559a09b2c9
+Tag = 7dd300167d267ad700dea37fb475ecdd
+Plaintext = c11b9c9d7607f387359c0038d3e8ec4d527562ce63c3384c
+Ciphertext = c670785a42af6397d1c75c49c874c5353b9504be01a43d1f
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = 0ff89eff92a530b66684cd75a39481e7
+Tag = 303e9c9bd0d8e4aac42894ca03d6ab06
+Plaintext = cc17904b166f28df82f57889f391159a4a308e752d714ee5
+Ciphertext = cb7c748c22c7b8cf66ae24f8e80d3ce223d0e8054f164bb6
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = fbd11bc75759f0461e796f6917aeb42b
+Tag = 0953f46e0e9cf1369e9eb018a4df3c09
+Plaintext = 6f97e595ea2f40612ea84a2097b974d235055fe1dae59403
+Ciphertext = 68fc0152de87d071caf316518c255daa5ce53991b8829150
+
+Cipher = aes-256-ccm
+Key = 57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562
+IV = 4b60a47b7e90f622fa0bf803e1
+AAD = b79940952f42537484aa2907c72dffa9
+Tag = 8a1702dfa0cd9c290c5ff9c35cc83705
+Plaintext = a48cbf933b88c0ec5ddcdd8fcad186391c2cbef308607de5
+Ciphertext = a3e75b540f2050fcb98781fed14daf4175ccd8836a0778b6
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = 5824689453bc406bf891b85e4576e38fe8
+Tag = 10ca926f1a430c08c12e23db3d913e93
+Plaintext = 967daf12f16f166b7b5038f83a1cf0b980f5abf4c7746f2a
+Ciphertext = 7cfe2a7a54306eb8d8a63d3d1ae86794f9a2c22198b2cb4f
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = cd15973753b94b77bb4b778de8b3b0cabb
+Tag = 5d5b674fd15410cc235dba6d8c8d82a8
+Plaintext = c4a756f6024a9dceabf6e264fffff9c719217fb418141ac5
+Ciphertext = 2e24d39ea715e51d0800e7a1df0b6eea6076166147d2bea0
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = ed8540f7ce451c522c1ff5d2d1030d7b3f
+Tag = 88750b5f36c86e7eda9015e960a7471a
+Plaintext = e0d5de7d1eace211c0e70859ff315ff485d1200c6dd13f93
+Ciphertext = 0a565b15bbf39ac263110d9cdfc5c8d9fc8649d932179bf6
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = cbbecf92551a15f5cf00a5be4a50b0eb17
+Tag = d5fa842209dbbc04c87965f78500fec1
+Plaintext = 05a4a4ba28fe8876f9bcfa5ec60651fd3fd4732f22049bd5
+Ciphertext = ef2721d28da1f0a55a4aff9be6f2c6d046831afa7dc23fb0
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = 873ba7f8b71517ec50297b21cf94cdb7a5
+Tag = 7d147edbe114bfdb3f3b9b37d5719ef5
+Plaintext = 9cdebaeee8690b68751070691f49593668a6de12d3a948b3
+Ciphertext = 765d3f864d3673bbd6e675ac3fbdce1b11f1b7c78c6fecd6
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = ac087420feb1e1e8c2546c2a8b8a5af0d0
+Tag = 57b4c2bbc377937d15b3b89543e29d0e
+Plaintext = 5672e61cf664d73918dc1ca84df1fce82db0e305a61d57b9
+Ciphertext = bcf16374533bafeabb2a196d6d056bc554e78ad0f9dbf3dc
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = a12c690568114fd7a677f49d74e84fc1a6
+Tag = 2e6ca774074b47b59adabeaf8835582d
+Plaintext = 0f5452e6b51540cf219998590995cd7f8785fa40b4f217fc
+Ciphertext = e5d7d78e104a381c826f9d9c29615a52fed29395eb34b399
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = 7a78ddfe5afb2dc90ee4a600c2fc014b0f
+Tag = bd320f48a7221537e3cbed5ac4154a56
+Plaintext = 9ad338cbfd1b52e6ae4178f05e00062274f8b0b25eae72f7
+Ciphertext = 7050bda358442a350db77d357ef4910f0dafd9670168d692
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = 6053e466ed1f647a3cd88c4d2052ec00cb
+Tag = 40574e201f9a26932a87c8d822505814
+Plaintext = d17b8d556e83190c84d4a812957c64ffa7f336298f4e2c72
+Ciphertext = 3bf8083dcbdc61df2722add7b588f3d2dea45ffcd0888817
+
+Cipher = aes-256-ccm
+Key = 9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d
+IV = 9b7298950280e8762ecdc9bbe4
+AAD = f7673e3beb526834d6507058fe62e34987
+Tag = 837dfa3fdef2f012b6609de2ac5dd9d6
+Plaintext = 2eaef86b0f602364f86510eabc58bc9ad1e6f0a6f6df0b83
+Ciphertext = c42d7d03aa3f5bb75b93152f9cac2bb7a8b19973a919afe6
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = 72674aca7eba2fc0eeafbd143c2c4d8aa6c8
+Tag = 57e9a9203da74387a9468f8af5e27547
+Plaintext = 33ae68ebb8010c6b3da6b9cb29fe9f8bd09b59ec39f4ce4b
+Ciphertext = b22afdf4f12c43ec23e01ac1215a3f5286059211207e9570
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = f7da3f100b80e2ade812f1700aab6b72f746
+Tag = a3985f12a49eac424a35c94645917e91
+Plaintext = dbb29817b86cb80e0d008742cedfbf52b236f15ee8cad50e
+Ciphertext = 5a360d08f141f78913462448c67b1f8be4a83aa3f1408e35
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = 4b05eaadf98505d0806c233b2cdcaf4254e8
+Tag = 4ab089a8724b87a1167180963d44ec65
+Plaintext = 145aa8cfd544a2f46bae1aa83cbdb3d21c3d1350078a3af4
+Ciphertext = 95de3dd09c69ed7375e8b9a23419130b4aa3d8ad1e0061cf
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = 05a3aaa08b9a6aaeb84704431425d0e45a14
+Tag = 0a7d1520141892e140448292185c41c7
+Plaintext = 6b32e8906dc89194a69410b79cd041b62eb01afb28a3e10a
+Ciphertext = eab67d8f24e5de13b8d2b3bd9474e16f782ed1063129ba31
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = 74db01edc26a2d2044cb8eaad8b907b78863
+Tag = 72d3eee219d94bd788f62df4add5ec40
+Plaintext = 545ed03588fd85a8bbfeee66d2082ae6f8e2f3c9dbd8725f
+Ciphertext = d5da452ac1d0ca2fa5b84d6cdaac8a3fae7c3834c2522964
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = 5f2c6ddf5a2403e04dac8b2813c060b67e76
+Tag = c600496f4f8b1b7da118ee36d8cd57f8
+Plaintext = 66dd5fd8611c551973a3d0c078ec2b4d39ad163d9168de3c
+Ciphertext = e759cac728311a9e6de573ca70488b946f33ddc088e28507
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = a650a2a5e3c6f7c95614570aaefd0cdd9a42
+Tag = 4710004d06ce7a7efbd19da4e3ce3cf7
+Plaintext = 6f364b3f778376cbf3f4b0b0c5350a8fa278f9d8c25faad6
+Ciphertext = eeb2de203eae394cedb213bacd91aa56f4e63225dbd5f1ed
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = 477c2484cf5c56b813313927be8387b1024f
+Tag = 304099641c4ec3dc2c54fdf4f48dbef2
+Plaintext = 3de4798d8ad84c460b92abc10b7f5e7c9fae46a1dd353687
+Ciphertext = bc60ec92c3f503c115d408cb03dbfea5c9308d5cc4bf6dbc
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = 564e1df74aa2d7ee33b66cfeda810774e16c
+Tag = 905c1b05e8945685f8688faea777eb43
+Plaintext = 7769b45fea11f530fb9a67f1b5b1964a34cfa32bbb03f4b1
+Ciphertext = f6ed2140a33cbab7e5dcc4fbbd153693625168d6a289af8a
+
+Cipher = aes-256-ccm
+Key = 7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29
+IV = 8f160a873a1166c8b32bccbba7
+AAD = d5e66502529b0045883d935e05acd242baa8
+Tag = ea5a3b6a8bafde4006b993cfb3b13557
+Plaintext = 0c0a502b42f81b51806c7080a8155280f493f2922cdc7df8
+Ciphertext = 8d8ec5340bd554d69e2ad38aa0b1f259a20d396f355626c3
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = 41e9d65632f74f449a6842d5e6c4a86ef83791
+Tag = 42be2e2ba05c54b619850db5c9d684fe
+Plaintext = c7360282c85484a5a33ab1c68dd70873ab4e74ffd4a62cd5
+Ciphertext = 2e961b3a2fa1609a4e6fd04bff6ac5e306ae2638706f997b
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = 555304659bde926cb2553b8a4605251fcddd92
+Tag = bbdee2605bc69601b1e83d1e7a0b400d
+Plaintext = 1332314d1cf783b9f64e0fa2d42d43d225da9fd5165b5f0a
+Ciphertext = fa9228f5fb0267861b1b6e2fa6908e42883acd12b292eaa4
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = 69ea953dbb910ec589372d797c7379d3f3b9e9
+Tag = 304611baf530932da7954f714514d228
+Plaintext = f264da8606ea429e0e25da3f2efafe28beaff05b42097369
+Ciphertext = 1bc4c33ee11fa6a1e370bbb25c4733b8134fa29ce6c0c6c7
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = d7186a67061319b44eedc0677ebf5d932d5bce
+Tag = 6d1d44e26404b7324767f0b3f7486f8b
+Plaintext = c9ee6482144dc61c43041324a2c18ede370011cb4882b0c5
+Ciphertext = 204e7d3af3b82223ae5172a9d07c434e9ae0430cec4b056b
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = 38f37d5e2da017f1953ff3701be0b38809ba80
+Tag = 5453724d2db19f606c85d00e49b0bb38
+Plaintext = 40524a4d32a711e7d5a59809878c318f42b6e2375b77b8a7
+Ciphertext = a9f253f5d552f5d838f0f984f531fc1fef56b0f0ffbe0d09
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = b3b2d249cd3517555fa692bbe9116f069e7405
+Tag = 6db1e4112fcd650e8c0f0f6fbf2d07e1
+Plaintext = 961c15bd7dc34cd5409c9e8869988676ec6845ecb0ee85fd
+Ciphertext = 7fbc0c059a36a8eaadc9ff051b254be64188172b14273053
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = f5b5bcc38efaff01f69bd3a106dcfca3cc6414
+Tag = 1cedb29e68322e47ff9997f859257d98
+Plaintext = 879568ab9ebdea768a5459ced1d3181d822536c3d1ba38c3
+Ciphertext = 6e35711379480e4967013843a36ed58d2fc5640475738d6d
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = a2098e3e23826e01f31107a208202f710eff00
+Tag = 1c12bf2a3571ed672592b27e986e9058
+Plaintext = 47cb57599686716c75d7ecef5541d20fb908e6d98c39925a
+Ciphertext = ae6b4ee17173955398828d6227fc1f9f14e8b41e28f027f4
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = 20a3d53e77201599540344c4e746c3ae3a5f84
+Tag = f12b2be8f5966d96602111c28f87b104
+Plaintext = 4a8667b5ee09d3d4a6dca9a95f4ad406f1da94b846dcc6b8
+Ciphertext = a3267e0d09fc37eb4b89c8242df719965c3ac67fe2157316
+
+Cipher = aes-256-ccm
+Key = 0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f
+IV = fb717a8c82114477253acc14f6
+AAD = 92c592ead4b3f193cc36687593d4f0f412a5d5
+Tag = 776df0a0cf048892e65bd8ad77cb2255
+Plaintext = 1dc9e32ac4176f64bd78a6edd651ebeea3ba85dfcd8298a8
+Ciphertext = f469fa9223e28b5b502dc760a4ec267e0e5ad718694b2d06
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = 2b411bea57b51d10a4d2fb17ef0f204aa53cf112
+Tag = e6f3ba30143acbc3a1c1c6ec74333107
+Plaintext = 4a17522da707b4b2587a0ae367a2cd2831bb593a18ef442a
+Ciphertext = 1bf122798bd8ee8e73391d589bd046a294d1615794e69cb9
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = 0248359f8071143c3cc1d61882a3547a0b3d2175
+Tag = 36cb510c13a039f4df8cc26a942f9911
+Plaintext = 4a6a7151465c2abd7e7fa1fd13019ad098b6ebcd190e96f7
+Ciphertext = 1b8c01056a837081553cb646ef73115a3ddcd3a095074e64
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = cca77bc4cf6c0abd3393dac3fbe90fbc8a1154f7
+Tag = 7fe0dedc2899dff81a251cff16bf5897
+Plaintext = a94f5ede43929d48d2c5a58c3262d9127d2ac3cb2fbd5768
+Ciphertext = f8a92e8a6f4dc774f986b237ce105298d840fba6a3b48ffb
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = 9c082a84646c070bb11b7d6b92b62f06ee5b5b71
+Tag = 86c43ac23800de60a1fd2caef0f03261
+Plaintext = 7303bd41cf47289a3111366d08e8e21548baf293052029eb
+Ciphertext = 22e5cd15e39872a61a5221d6f49a699fedd0cafe8929f178
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = 1c3ede1982a807a410ae1e21947bf430f8db7027
+Tag = 26f7907e235c09d3322c4092d2e88f88
+Plaintext = fa9743a67978c20316cb91801d7789e350079aae3aadbd43
+Ciphertext = ab7133f255a7983f3d88863be1050269f56da2c3b6a465d0
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = deb05a30a026ff66ce71e98afa62f0255aef84f5
+Tag = 6bb44a28c145d49f49f2821d4044e4b6
+Plaintext = 99599b4042dcdb685350cdecfdf24992fd5b165670025d0c
+Ciphertext = c8bfeb146e0381547813da570180c21858312e3bfc0b859f
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = 93dd9b00a3353e5331338dcfcb7ca7e0bb873a4e
+Tag = 0f7d20aa3d792d6a3ebc5ee0df2fd89c
+Plaintext = 451101250ec6f26652249d59dc974b7361d571a8101cdfd3
+Ciphertext = 14f771712219a85a79678ae220e5c0f9c4bf49c59c150740
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = 0855263860043207543c8c34648d53ec51c4f47e
+Tag = 7ca4733f0208668b0a7879305e861d71
+Plaintext = b2db87b7787531968d603098cb20ca7c438b4af72623fea9
+Ciphertext = e33df7e354aa6baaa6232723375241f6e6e1729aaa2a263a
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = ee2d3a66deb3ebca867a902bb9202226ed516ded
+Tag = d76b482ff20429da8f60f0f863e1af50
+Plaintext = ca18ce38086223e63b4f0b616d110010f9e45eac42f2ba46
+Ciphertext = 9bfebe6c24bd79da100c1cda91638b9a5c8e66c1cefb62d5
+
+Cipher = aes-256-ccm
+Key = 2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8
+IV = a235f8ee3de9896b71910ac02c
+AAD = 8e531aaea849addab6a83497cbc504f489505952
+Tag = aab66e1ac2346ef97850a4985c64b737
+Plaintext = 5717ed5da5b8aa806a18bfe979502bab6632c9428d3a7725
+Ciphertext = 06f19d098967f0bc415ba8528522a021c358f12f0133afb6
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = 2d838eb51a4bc69a001a18adf2084a680f02a3c5fc
+Tag = ef9af5679edbcbb7db20ab6af30698db
+Plaintext = d3416a81b4246eb0bf8119a72a886bbc0ac9449c69f71d2f
+Ciphertext = e001a8fae390dc5d672cdd18f86a1f728158ec83a002050d
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = d83ee7ce22fd1a2882d8d552346e4d7b3efdd67da4
+Tag = d435a5a38f84387f63b13407f65ec86c
+Plaintext = 22b6f10b482448626f6c7bebb14f1497896d071738133b4d
+Ciphertext = 11f633701f90fa8fb7c1bf5463ad605902fcaf08f1e6236f
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = 2d5537b24d0b0f7a45703c1e131656ec9edc12cdf7
+Tag = 2ede8a705f8c988f55459542bd631b1c
+Plaintext = d60edc830be8207ffd9e9f646d3b4343b10b3d56acb89d44
+Ciphertext = e54e1ef85c5c929225335bdbbfd9378d3a9a9549654d8566
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = 1a750eb326923412d94ccb35f5acd0f87415268178
+Tag = 986de774a612230ce6c71449d26732ce
+Plaintext = 716d3132f449a9def383978102ae50ed3ccae0cb346ba1df
+Ciphertext = 422df349a3fd1b332b2e533ed04c2423b75b48d4fd9eb9fd
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = b10fc523bc4562d44edfe5956f93c15c4ab38bba3c
+Tag = e710431005264fa7d3fc04bac50fc1ec
+Plaintext = 063c2ae2a15f26f979bf90657d20643e3184f1a9f75a3aad
+Ciphertext = 357ce899f6eb9414a11254daafc210f0ba1559b63eaf228f
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = fe4f60ce9634e7dbc5e56204c4bf8aa9be577027ec
+Tag = 5c13bea6ad0cad724e6cd02c89517ffc
+Plaintext = bdc513e56a5bb70c02abc041af04d6e45e735d10cc88357f
+Ciphertext = 8e85d19e3def05e1da0604fe7de6a22ad5e2f50f057d2d5d
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = 48f3ceda4fd390a7eb38f7f5bcd14310af6b5a557e
+Tag = d2a5531655aae01e249f213e0e04af0d
+Plaintext = 7dc5d8cd90ce2faf76bbd0d52e5ae11b310fc2b0051c4377
+Ciphertext = 4e851ab6c77a9d42ae16146afcb895d5ba9e6aafcce95b55
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = 199ec321d1d24d5408076912d6bb2b6f192d6b347f
+Tag = 2a127ef341345f9641b26e91265e1482
+Plaintext = 66c2696edec26ba3d07bd3f485a0d6ce8a1b0a85b20083e7
+Ciphertext = 5582ab158976d94e08d6174b5742a200018aa29a7bf59bc5
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = 8b013f5782d5d1af8dbd451a4202866095dac975fc
+Tag = a005ca13c4bf715c3b7b2782f799b23a
+Plaintext = f4da8ac3e8fe5ec6a5b6a2f27b68396e850b46a024d441f0
+Ciphertext = c79a48b8bf4aec2b7d1b664da98a4da00e9aeebfed2159d2
+
+Cipher = aes-256-ccm
+Key = 24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f
+IV = 15977424eeec0ec7f647e6c798
+AAD = e320df32b71cc530e8493b12b9afbeabc255c5eb44
+Tag = 04642aff9cb9288d49f0e567dd837e05
+Plaintext = 244891cb4af66cc8e99a3784a2e82475e51bd5c7fde67cf5
+Ciphertext = 170853b01d42de253137f33b700a50bb6e8a7dd8341364d7
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = a2f6337f86dd00d1a58448851e95d8c9bace4a5c8710
+Tag = abc1f9d0132394149c9062b74b82f04b
+Plaintext = 2f59d94d4ab8eeb84c2a6fefb7fb0a3ac059c1e1a65ae34a
+Ciphertext = 7ca0b1dbe34b0391e524b868b0af08b3e096917664d6aa2c
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = abf26b05558252c8e38c52b1ace087bbd1eb3d561239
+Tag = 6d7df57c6a792f6f6b24cb5f87e92123
+Plaintext = c25381853f73a3dc4195fdcbc45dfa1a40eb8324749adb2e
+Ciphertext = 91aae91396804ef5e89b2a4cc309f8936024d3b3b6169248
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = a13ade56b47803897666e42ef2ef88be0e779ac86c28
+Tag = 4ac19b0b74cd9d5e100598b96c9f1f2e
+Plaintext = 8dc5226a2a13088c87f4bf94262e0c0413f06b35d2fda79b
+Ciphertext = de3c4afc83e0e5a52efa6813217a0e8d333f3ba21071eefd
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = 3c5b68b65edf62755b7e064bd26c843816bf6c1cd481
+Tag = a77a27eabfc79f192c0ac491280af8d0
+Plaintext = ee4b23039cd512cfab8c7a2d0f2c78d66764520bc88759e1
+Ciphertext = bdb24b953526ffe60282adaa08787a5f47ab029c0a0b1087
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = 0213fe13c49083d7c00335e1864dc139c9e7123162d1
+Tag = 39935f91c1e29fc1e4c5c5427ca9da79
+Plaintext = 30b48d4021838090fbd5251069ff8c631452daee5ef899db
+Ciphertext = 634de5d688706db952dbf2976eab8eea349d8a799c74d0bd
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = a32291746b151be8134e183798aa82bef210343feaf6
+Tag = aeaec90ada2a1ffef64c3873af645a40
+Plaintext = 2286a1eddd80737a724ca941217e9f0232870b6c2f20d29c
+Ciphertext = 717fc97b74739e53db427ec6262a9d8b12485bfbedac9bfa
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = a30f2fd445820cdf800145540602c877da0e4c311272
+Tag = 7932952831d0ba25c77c18fe154d8ed8
+Plaintext = fe703ca0901e4a706ce1393c7d8ce18a03eb2caadbfa7b8e
+Ciphertext = ad89543639eda759c5efeebb7ad8e30323247c3d197632e8
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = ed438e393e0e37629cb25044ae89de9fd0d42d60c1a3
+Tag = 234fd0241d00f3890a23ccd0bf16dcbf
+Plaintext = 7043c67726870bb5816da925925bc2722478311c8a606cca
+Ciphertext = 23baaee18f74e69c28637ea2950fc0fb04b7618b48ec25ac
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = 1013946815001a2c08acca4196e0d6668ffbb3883cf1
+Tag = af43498b0c3f70c119f82d5812db940f
+Plaintext = 695e9712dbbf883e9bf8af9188bd01fc631968928258168d
+Ciphertext = 3aa7ff84724c651732f678168fe9037543d6380540d45feb
+
+Cipher = aes-256-ccm
+Key = 0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79
+IV = 97ebcb8575bb58260208d5c227
+AAD = 44cc9b2510680c4d73f1938c77de21242c8ee790ed7f
+Tag = db66dbb03a4c943ac089ed11eb214bbb
+Plaintext = 67ba90d22c6bb5f649bc0c505c5ed23a299882559a3bf520
+Ciphertext = 3443f844859858dfe0b2dbd75b0ad0b30957d2c258b7bc46
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = 7cc9c51b69f98a06391ab32742fb6365e15106c811fe8a
+Tag = 9163fa7a867f04cab6f52dc250070f31
+Plaintext = 065ef9eeafbe077c1c7049f43eb0d8999708e8609f214d5c
+Ciphertext = 990065322a438e136860f7b019807e9feff52a642bf3d44a
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = 7bb1bc069a783d45d51d8ecd0a53ab7a386fa1f5ef12a1
+Tag = fd33dd9155619fb040dcd6038c7b7367
+Plaintext = 69b2b056f2265e707d3e31e68bff6a060544c8a737b2a9b9
+Ciphertext = f6ec2c8a77dbd71f092e8fa2accfcc007db90aa3836030af
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = 0dd220919d0eeee3b7cec36c47e376b778583b38bf61c8
+Tag = 4fcba5a886b1f33cf1cf44618d28f01f
+Plaintext = b98d79aaa4c04171398c7f1189497acaa7546ef068bc7a3f
+Ciphertext = 26d3e576213dc81e4d9cc155ae79dcccdfa9acf4dc6ee329
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = 1c1915fab09348b9a5536495c70d1a040305708c112479
+Tag = eafe2c670eac203d5e90b9d520e7a618
+Plaintext = eeaeb773ade5fb2d27b50bb892916333e0b123c6e3ae5bdb
+Ciphertext = 71f02baf2818724253a5b5fcb5a1c535984ce1c2577cc2cd
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = 614b0ac4611b6c6d3b4ed089510dcd2215567bc3789f85
+Tag = f0388746438e83b731b5588fef53f1f3
+Plaintext = f2198e1f91fde2672a1ef60403c0d175f366b6780ee9f1c2
+Ciphertext = 6d4712c314006b085e0e484024f077738b9b747cba3b68d4
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = 866fea4483d4e903566844e31c24283571832dfae32c74
+Tag = fca81f8b36d16698a600fd701f2c6424
+Plaintext = ba37617342b4eefd4bdce8fad30c4751b206d47814973b3a
+Ciphertext = 2569fdafc74967923fcc56bef43ce157cafb167ca045a22c
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = 9d7546f7e8b949c539d21a357f81d0151e278d0bf2c5a5
+Tag = 4c15a6d292c7ed2f31cf9512435ec7d2
+Plaintext = 69adcae8a1e9a3f2fe9e62591f7b4c5b19d3b50e769521f6
+Ciphertext = f6f3563424142a9d8a8edc1d384bea5d612e770ac247b8e0
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = 42b692048c8b3cce1b5e83f4f33232a7d7d0bc20695e7e
+Tag = a2ad73179d0314b5fe52dd7217518cb8
+Plaintext = e0753d4248643642c7a96404de8d76c9d80527b659ec6d31
+Ciphertext = 7f2ba19ecd99bf2db3b9da40f9bdd0cfa0f8e5b2ed3ef427
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = f1dfb6fdb31cb423226f181c0988a52ee4015aef4536f4
+Tag = 9ccc5ba1caf933b80bfc6f281109688f
+Plaintext = 79ba959c7221b293e2115f538d9394c64284c756563c04b0
+Ciphertext = e6e40940f7dc3bfc9601e117aaa332c03a790552e2ee9da6
+
+Cipher = aes-256-ccm
+Key = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+IV = 451101250ec6f26652249d59dc
+AAD = 8eafce9ba466fd53eb87f499d7c76bd486db0e90a3d281
+Tag = 73271ec36d92fff34609169f579c8f1d
+Plaintext = e1590206717a708cad9cca7d23a3b8ee5f7fb7786aa3be47
+Ciphertext = 7e079edaf487f9e3d98c743904931ee82782757cde712751
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = cd0522ebe1fed82465277d1c10ae9316a98b4469be63b180
+Tag = b25764e40ac6a171e7e6bab4fdee4288
+Plaintext = c99c3e79125b6fd95e737326a842424eb6c6ecea4c0475c4
+Ciphertext = 76df4be4ec8373864399acda11294b220b9f7c3a7d2b3660
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = ce5bf070678cb07e963263b1562ff79311144addb6e4de4f
+Tag = fca49758d17f2073066b82667eae6ce3
+Plaintext = eede01b08f9a303cdf14c99d7a45732972c6eff2a1db06eb
+Ciphertext = 519d742d71422c63c2fe1661c32e7a45cf9f7f2290f4454f
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = 07175be2475cc735c9a3c1140895277378debf8fb1c87c24
+Tag = 7c1d64d7e9de47a6ad7878283da9d870
+Plaintext = 6d5579aaaf8737b01620424f3ddeaf538f10dfad094e5ec4
+Ciphertext = d2160c37515f2bef0bca9db384b5a63f32494f7d38611d60
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = c821a8d4bab9d993c20dd206955304a55968e6db5ab6480d
+Tag = adc2bb471862d25cfe25e66fedb8e28c
+Plaintext = d0628b2027f06c246497977d05f211b2c2e302d5b82700b5
+Ciphertext = 6f21febdd928707b797d4881bc9918de7fba920589084311
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = 68439bc9d176feeeb4119d00ed5449dfefb72b5a582bfd97
+Tag = 319a493abc947945f1312395ea98d937
+Plaintext = 6cc9749f48c61050e421afa3a10ad3dd3aa02cc3f8586915
+Ciphertext = d38a0102b61e0c0ff9cb705f1861dab187f9bc13c9772ab1
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = adb262c924942e4e1964e9d97c6a8c159fbf9bfedc5ff296
+Tag = 21d0602d29447ba6b24a67509eaee1e8
+Plaintext = 92d50736466e64e6225962e76bd90da824f716a3301a1a90
+Ciphertext = 2d9672abb8b678b93fb3bd1bd2b204c499ae867301355934
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = fc7b08707d3c3dac7689ec18088ee6502ef08d3ffbff38ed
+Tag = e52a2eeacb1f023e849161b6306b6cfa
+Plaintext = 87c7ac031fd63e4c83280dce6b68a92dfafb6ea19388fa9f
+Ciphertext = 3884d99ee10e22139ec2d232d203a04147a2fe71a2a7b93b
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = fd43dfb66041b117f2ac54c94f7b6e2677860864d9494175
+Tag = 0d8c5b1e96b21460e0b5414639abeb0b
+Plaintext = 6b53c46266b2f4284d8fe7f0549c98977344d67e178e9a8e
+Ciphertext = d410b1ff986ae8775065380cedf791fbce1d46ae26a1d92a
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4
+Tag = 1c97260d20797d374c595cbc2ff080bc
+Plaintext = 8e7d8a44244daa7df2b340993e32dac50e05d7b2e103be98
+Ciphertext = 313effd9da95b622ef599f658759d3a9b35c4762d02cfd3c
+
+Cipher = aes-256-ccm
+Key = ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91
+IV = 50b23b052922366c25dd40e348
+AAD = 9895b24d12b004b215583eac70a95f4fba7442164f35c57b
+Tag = 6cd287afcbdbc5531f11246080b22677
+Plaintext = cec07df916ffb7a453d0eb588b7462096f22874bd5abf814
+Ciphertext = 71830864e827abfb4e3a34a4321f6b65d27b179be484bbb0
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = f5b2c88f5232c37273b1e66aa31cfa7201e33c21d60054d025
+Tag = c1411af83237c0f9eb0bfe8ed914da66
+Plaintext = 617d54fc6a23601c79e3984f93bfc2d151fde420863206b3
+Ciphertext = 57b3414db48982c6567265e1e0173bf38fdfaffe4461fbeb
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = 8fabe14dcb3aa2fd28281147c326e98ad699ca7997f03a105d
+Tag = 7ed6e23720b60ffe54bbb9f7ff371008
+Plaintext = 337290d0b4ce1e87afc3cf01d6c98f8c17a4603120dcfcd1
+Ciphertext = 05bc85616a64fc5d805232afa56176aec9862befe28f0189
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = cf193eb3d755cb8e06c5be2334b5c8b7a22b6524d46d547ba3
+Tag = b6aa6b284e7720acbd027a50317f816a
+Plaintext = 01ef7ac6470aa02ccd8c1712827e52699d05751b78e4c5a6
+Ciphertext = 37216f7799a042f6e21deabcf1d6ab4b43273ec5bab738fe
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = b4cadb5f9cb66415c3a3b71421b926f147566a174160a0bcc0
+Tag = 7058e9c0164ca079668097fde19e5302
+Plaintext = 64fb9322210fb7d8da8e762498b233b0eb172c91231c50cb
+Ciphertext = 52358693ffa55502f51f8b8aeb1aca923535674fe14fad93
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = 48400d76ff882d6d5129c8674acc71f445356c9db9c91f8256
+Tag = f988611d5ce0f65b217bb4787bf59bbc
+Plaintext = 291aa463c4babc76b4a6faf2e27e9401586b1ac83e4b06a4
+Ciphertext = 1fd4b1d21a105eac9b37075c91d66d2386495116fc18fbfc
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = 749d369d837002ad33feb8aa22c3f68705eb4872e1b8f85a7f
+Tag = d6251a5fd375a48583a6d0f8eb75cbb4
+Plaintext = 141cdd7f964a78815be144a785c6a2a298c54230e73039e2
+Ciphertext = 22d2c8ce48e09a5b7470b909f66e5b8046e709ee2563c4ba
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = 80214108b16d030feff6e056c9a07a00a1d5e3ebb07abd3f4a
+Tag = af1dab0f105414293cb130bea285fd6a
+Plaintext = fa2441cb7f9d072b8a3f1a496b2be6728a38b94a4f44c9be
+Ciphertext = ccea547aa137e5f1a5aee7e718831f50541af2948d1734e6
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = 8b9fabe29718a8f297c9bf6f199c80bbc71f94eb3034a11ecb
+Tag = 1cc3f7640a42460be877fb7059a3ed61
+Plaintext = c8ce88ab40b62229223d46cc44f21bb39cfef27aa9fdccad
+Ciphertext = fe009d1a9e1cc0f30dacbb62375ae29142dcb9a46bae31f5
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = 8812f28a0cd5fdaa226fdd44ed857241007377057be3bea577
+Tag = bbe0ddd2e7f4aa2024b3fec9281b6cac
+Plaintext = cf59f75ca4d6d216cf8862b44b5192c382c140f862def117
+Ciphertext = f997e2ed7a7c30cce0199f1a38f96be15ce30b26a08d0c4f
+
+Cipher = aes-256-ccm
+Key = 8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7
+IV = b44a58724596b4d8dea827c1a0
+AAD = c8f05e96d703a4850bae1421ae9ff3aec7531baf9b899dfd75
+Tag = e5df1e5e96bb84f730fcb253d468278f
+Plaintext = 4eed58f381e500902ba5c56864f6249d191e14d1b1fad3dd
+Ciphertext = 78234d425f4fe24a043438c6175eddbfc73c5f0f73a92e85
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = ef88f4393d6c1e7b7be55a12144209ee051bb779e440432721ef
+Tag = 8a20a1abe7c842ebc08c8c81a2743c81
+Plaintext = b3b0de10b7c0996662f1b064e04e528b7d85ca1166985d33
+Ciphertext = d63e6082c95c6c5ff2bc0771321a4f883ef61cff7b99e0ea
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = a4c891c9dd1fcc982c35bc74cfe71651bae424602519672b466d
+Tag = 845e2d6de83ab729dd200a21088a1ec3
+Plaintext = 4f0b40913f07269550b7b06ab9027a4d9331f8ef98a45dca
+Ciphertext = 2a85fe03419bd3acc0fa077f6b56674ed0422e0185a5e013
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = 4db5730cb9794f3b1facc9d6738115d02ba9f27ba02330fbb856
+Tag = 10ed272c732247a696a608ef67510f9c
+Plaintext = 841e032773d58bc72a3237bc9b24c61b9efdd850fc2ea605
+Ciphertext = e190bdb50d497efeba7f80a94970db18dd8e0ebee12f1bdc
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = 471a900ee49f2cfa1d3eb37c951d810c349364d4cc3b5b64fc47
+Tag = 15f0df52e392c37ec15f7458469dae84
+Plaintext = b4db42e523e65557157b93dc0281601f7997e6731543a914
+Ciphertext = d155fc775d7aa06e853624c9d0d57d1c3ae4309d084214cd
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = 7b40b3443d00a0348a060db109e8882157612c43084ac5c3e9c5
+Tag = 421433dafea2b5484ba87b5050e1fb49
+Plaintext = 73e0ed35c0e847188e607cde46586eb9e237fbdc5d59163c
+Ciphertext = 166e53a7be74b2211e2dcbcb940c73baa1442d324058abe5
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = d563f5c048a1b45265182b99ca7b9004fdc73a9cb07806dd44fc
+Tag = df91749fe3cd52a9431d9a847a8c2a9a
+Plaintext = 4f7669caaedee961dbba6bde9d09fee1a20eee55baaf98f5
+Ciphertext = 2af8d758d0421c584bf7dccb4f5de3e2e17d38bba7ae252c
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = d301a61eb17366d4e70942ab69b4f4bcf8ff6a97f5972ee5780a
+Tag = 7563d37846f5185bb44d71be1ea6a73c
+Plaintext = 154454fb74e9565c56775a8e4654f75a38b954dd28c4e939
+Ciphertext = 70caea690a75a365c63aed9b9400ea597bca823335c554e0
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = f74b48d168f77fbd3429728c0b168ecbd854264eaef70b74fffb
+Tag = 55e93bc2d3f05d7016747690fb920e12
+Plaintext = 716b371857e68a17b20ea06651cdcfd4560a741830ca8a13
+Ciphertext = 14e5898a297a7f2e224317738399d2d71579a2f62dcb37ca
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = 3a257ce3592a8f88162f0bb4ecd5db3bb79b54ab17b0bbc61506
+Tag = 1c46822f839f09c41b7aa6dc06035c93
+Plaintext = cfdb7363985aa01af6f8e8237dbfb7871eb39303b4135269
+Ciphertext = aa55cdf1e6c6552366b55f36afebaa845dc045eda912efb0
+
+Cipher = aes-256-ccm
+Key = e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361
+IV = a8c459ce0223358826fb1ec0f0
+AAD = 21916ebeca9e66b77cf55d1cac80a4c85d8b6b014f268ffa73ca
+Tag = 4f8e77600c5bbc6d028fa25ba61a1719
+Plaintext = b4b67ac551d1966caa20d951351387f384c2e5d81a76a92c
+Ciphertext = d138c4572f4d63553a6d6e44e7479af0c7b13336077714f5
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = 70cfcb828d483216b46c3cd22e2f9ee879e9e3059b566179b6e16c
+Tag = 1f8332f4236437737438e7aa1b5100c7
+Plaintext = 0d16cc69caa9f19b88b05e151b3d26accd018ca4a5786a80
+Ciphertext = f1c4bedb8d6f91676881daa37656a7e6402f472735b04a0f
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = e7e5779282db80f424dc050b2c1e7754b2a5d3a8beae77beb74e34
+Tag = 8be2f6f356c2eb401468be15104e7763
+Plaintext = 148de640f3c11591a6f8c5c48632c5fb79d3b7e1cef9159c
+Ciphertext = e85f94f2b407756d46c94172eb5944b1f4fd7c625e313513
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = d17e8189a94a559b07be9549f73d653172740e8e978f5b0a38ad43
+Tag = 9646f2b6c2455603f1a6f20ea5a4611a
+Plaintext = 00a23b25bca7c206edd051814d81083db1cd00048ce8ead5
+Ciphertext = fc704997fb61a2fa0de1d53720ea89773ce3cb871c20ca5a
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = fda37ff136895de7ebeaf81e701e5751245201baed2e13d7e1b591
+Tag = 303fa5d8321241b1c9e18a5909d6e428
+Plaintext = a89409b0977f60a029dc4c1560ba6dbe7c65b068633acf74
+Ciphertext = 54467b02d0b9005cc9edc8a30dd1ecf4f14b7bebf3f2effb
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = 9c179fd0d6277a5e073e77dd6abb4cba00ad9c9932e6c002b951c7
+Tag = 9e8cb01db1da077502814db1610662ce
+Plaintext = e16c69861efc206e85aab1255e69d6d33c52cf058dec9d0b
+Ciphertext = 1dbe1b34593a4092659b359333025799b17c04861d24bd84
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = cf5703228e615428d3d3805e428e754961d205c5aa0297ecdea71d
+Tag = 40a02a49857d7b280330b8105efac854
+Plaintext = 62036cbed3666d85624d3dc9c1f437454b9ab5c03ce0de92
+Ciphertext = 9ed11e0c94a00d79827cb97fac9fb60fc6b47e43ac28fe1d
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = bab7e36098d59d3a31d7784d549aebfc6938bbd0612c85c0edb796
+Tag = 5ecfa9dd03e2db70aa212ee7dcb573fd
+Plaintext = 790ac86c5e9d8ce8cbec1dfb7e4fc4dca3d0b1039adfe585
+Ciphertext = 85d8bade195bec142bdd994d132445962efe7a800a17c50a
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = 96f0b7cd7439721d4c9cc4f69585f8c90a95bed8fea22150efffba
+Tag = e17a7a0cd162945a3616892e101e3e93
+Plaintext = 3cfacd61ea3398de20ca6bdb00e81af482320614bdfb8642
+Ciphertext = c028bfd3adf5f822c0fbef6d6d839bbe0f1ccd972d33a6cd
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = ee71e53d0b4eef82575c2bd38d7bd21b41fabe58c6f571954fe159
+Tag = 15fadc2d79841d230cd55c04379f22b4
+Plaintext = d75c153e34ae1c6d1fcf5b1052190d8882041e1f9c5490e2
+Ciphertext = 2b8e678c73687c91fffedfa63f728cc20f2ad59c0c9cb06d
+
+Cipher = aes-256-ccm
+Key = 9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0
+IV = e3bd4bc3a60cddd26c20aa8636
+AAD = 18a4aa894861c7720ddb43809c3d2ed2af2f1bfe8f9fd4f872c14c
+Tag = b229b9bae4634eea6b723f432e19ae55
+Plaintext = 0e728056c7c64214be8f1f1727408d8cca8c42e2ac7bf67e
+Ciphertext = f2a0f2e4800022e85ebe9ba14a2b0cc647a289613cb3d6f1
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = ecbd7091732e49c0f4bda2e63235ea43bbf8c8730f955f9c049dd1ec
+Tag = 475acd27900478f09fec1f479ab3a7c8
+Plaintext = 89198d3acc39b950f0d411119c478c60b2422ffe7e26e00b
+Ciphertext = 7717b8e4447afcea1eeebf3e39ffdab2f52828e7931ef27e
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = 9a04820205234795ecd540b6a0b2fbd0b19f18106c42f374a2b98425
+Tag = f7b7ed6e8ede6ef5a73b484bf13b3424
+Plaintext = c0f61950f98110db4226e269cf197c7e2794c5b87ad68cf9
+Ciphertext = 3ef82c8e71c25561ac1c4c466aa12aac60fec2a197ee9e8c
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = 0e4dbd167da0240298f4795102ef18ff9a8772c6fd73b3374cdfa30a
+Tag = e47d08ea0788f7ca0ecd846689c8027a
+Plaintext = 7960dbc9136880e2eea7956c3271adfe2aba7dca53da917d
+Ciphertext = 876eee179b2bc558009d3b4397c9fb2c6dd07ad3bee28308
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = 2de4291068a5d290b599a73c6a8ecff4f9fd6c9cc48f14c233e18581
+Tag = d081f66b1c7b70718dc50367c3da6792
+Plaintext = 0c5d7055bbfbd2bc213cfbbafa763b71b1fde6f4de96fa59
+Ciphertext = f253458b33b89706cf0655955fce6da3f697e1ed33aee82c
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = dedeb714f555575fcedbd9de8171484090e6466dd4fba3c6b7c42eae
+Tag = ce672883438da186741e6c542b3f805d
+Plaintext = b5654edcc8f09e4f80d0258c9376d7c53fb68f78d333b18b
+Ciphertext = 4b6b7b0240b3dbf56eea8ba336ce811778dc88613e0ba3fe
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = 03d340904ace1cd52d4b72a96d96afd77aee68ac3936415005ed0d56
+Tag = cf58d4a5552bc8ed1b1dda46703a256e
+Plaintext = d796f3409a7eeb896c3d4ebef46e9c6e553aab28b1cc4a90
+Ciphertext = 2998c69e123dae338207e09151d6cabc1250ac315cf458e5
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = c67f9aa8cf1be3b4377c30c175d33ab2af390982c6a015d99209acdd
+Tag = f95cf2b57e06de4d01bbb6c0e39f37e1
+Plaintext = e4dd279a79a381c68de777df941a4779e50a1381c8aa9122
+Ciphertext = 1ad31244f1e0c47c63ddd9f031a211aba260149825928357
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = fef1b2ccd661b9fac85ba005addebdf8317ab104920549d3a490a21a
+Tag = 7589cd12984286af98908db88920323c
+Plaintext = bbf0c267d952aeb6f810601b9cf1962a92dcaba7273e6902
+Ciphertext = 45fef7b95111eb0c162ace343949c0f8d5b6acbeca067b77
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = 693fae7af84aa397f0b2baaed9b3c7953f75e7424c49b6349c2fc20f
+Tag = ee8fc441da990dd92c0caeac9d956699
+Plaintext = e8b13a263e0c4fb5645e500e88ab8074ab7d92e5a8dac6aa
+Ciphertext = 16bf0ff8b64f0a0f8a64fe212d13d6a6ec1795fc45e2d4df
+
+Cipher = aes-256-ccm
+Key = 3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8
+IV = 54c8ff5459702aac058bb3be04
+AAD = 85e5df4ddec99f0bea14b3338b2eb190ab6584f5253c6c2ee3064637
+Tag = d502f5434bea8c3c13ad5422ff90e218
+Plaintext = 067de2869333ed22c7b63ed7eeba1301bbac69b0d430adb5
+Ciphertext = f873d7581b70a898298c90f84b0245d3fcc66ea93908bfc0
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = a516ca8405e5c8854e667921b5c5e1968bdd052915b55ac9984b7eefb3
+Tag = 12e57c576b315f48c11877178389aaa0
+Plaintext = 8b9130b0c3c15366831bbb19f377e3209a8dbf7619cd09bd
+Ciphertext = 4646b2acdeb11174171da23999cd54e297daa32bbc13d305
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = db3121ea71294983b185207a9d8de3e484a66c0431bf07c962eb82977c
+Tag = 66775e693f93af6575dccc7903538065
+Plaintext = 7f369bbc99b6f08049eeb43566269a174829d4dddb05cb9b
+Ciphertext = b2e119a084c6b292dde8ad150c9c2dd5457ec8807edb1123
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = 1651cf38fd9b2da65ebb4922b97dcb861128eeefa060d6c1c94b25eb4e
+Tag = b70d8de40c2068de96a274d3b5086b5a
+Plaintext = fd0900b5fa72e2fba43d611bad25de40a3507a5cc5d186c7
+Ciphertext = 30de82a9e702a0e9303b783bc79f6982ae076601600f5c7f
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = af87b347b59e37a424004a00907dcbcf6a554e6782a9be12cb3047625e
+Tag = e7da096d2fb28f20f64a000fe93e96e2
+Plaintext = 36318d80c02a1da41ef1652d9a752e155526b5f597fba226
+Ciphertext = fbe60f9cdd5a5fb68af77c0df0cf99d75871a9a83225789e
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = 0680d5bacefa2ab14aa12b0e517a1432862d4215dc72dc4d5ac6b96c1c
+Tag = b88748a2de31261534cdb2237565bf8a
+Plaintext = 7a29aa2994d11215ab3ef3382b3db6ed581164a235c4b1d1
+Ciphertext = b7fe283589a150073f38ea184187012f554678ff901a6b69
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = 9af701f0a9de52309267289bd170fb97c03c131c0a169d736137ff3d74
+Tag = 0c003eb65ceedc98ae4e38ef341ee47d
+Plaintext = 3542fbe0f59a6d5f3abf619b7d58b199f7caff0205093f8b
+Ciphertext = f89579fce8ea2f4daeb978bb17e2065bfa9de35fa0d7e533
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = dab7845fb7ead205569475753c7e26540c09d3a74312f2de25181511f8
+Tag = 5c2fb596d8ff6a863604cd224fa3be42
+Plaintext = 83c15520d9541c86b3dd809ede42de22bbb2b75ff18a023b
+Ciphertext = 4e16d73cc4245e9427db99beb4f869e0b6e5ab025454d883
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = a844d6dbd05545ecc736994dc9fc2260c5ab63ed6ffdc40b915f8744a1
+Tag = 2ac782e2cd8ecb06172eef2cb9b0e331
+Plaintext = 793a188fa3efa32f41d6e4c5b42353b95024117d546c79ca
+Ciphertext = b4ed9a93be9fe13dd5d0fde5de99e47b5d730d20f1b2a372
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = f9112503884615c0e8a1d8414724b0d19298988f393a27c436b2b6734c
+Tag = f814492b42571033f4dffc0282ea2f51
+Plaintext = 6b237444fb0e1f4150701546c4cb24021c5edad30d9b31dd
+Ciphertext = a6f4f658e67e5d53c4760c66ae7193c01109c68ea845eb65
+
+Cipher = aes-256-ccm
+Key = 948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17
+IV = 43b0aca2f0a9030f90559fa6d3
+AAD = d633a5a3defdde6a68f959ef39a91c6ea6e13ef1a7859d2c2c94d3a5b4
+Tag = 75999099df2de6e436bd99f0341423f4
+Plaintext = 6342312e8a72f71f2e5afe04cfcde4d60a41556111752103
+Ciphertext = ae95b3329702b50dba5ce724a57753140716493cb4abfbbb
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = ebf0b3e3199a5c3773c761c725c7600add5f9d8321c9f8e5e5fd1c7a5d2f
+Tag = f8562eadcdcbcdbad1299bea1523f5d2
+Plaintext = 094b538110495e938b08cf748a6bcf3e0c80ff9c66570237
+Ciphertext = 4d8b53016fc8bc9677184c0fa15bbd3d671b9366d82ecb67
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = a865b88d512e485ab3f2844c29e6dde0cf1151efa9ad3b3021d06fffb74b
+Tag = 59ff77cf0962455b3539dbf91f3077cc
+Plaintext = 23edddd8732cdbf03af08162f0e4a24c9222bdbb4549c663
+Ciphertext = 672ddd580cad39f5c6e00219dbd4d04ff9b9d141fb300f33
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = 16918dbc785d94a8f1720c5ad234dde860219874c9fb076a5c290903f85b
+Tag = 6dbed76d94c90595b49d50c84c3efc76
+Plaintext = 1798286c37c1504fc0d7402681f6f70711ef506dcc3e29d0
+Ciphertext = 535828ec4840b24a3cc7c35daac685047a743c977247e080
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = a2969243b0955402ab45a430fef2ef9e0c025006732bf8e592e3d3884918
+Tag = 48fbe60c146056e5cb01268403e4b9f5
+Plaintext = 0d02778f90a164a4f9ada9dc7fd24eeb941069621418ef32
+Ciphertext = 49c2770fef2086a105bd2aa754e23ce8ff8b0598aa612662
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = 2de5222a0609f058f60e9e581b6e4f0ddebed84fc8302c8e985d17b89241
+Tag = acff35df1ec942b43eef5aef980cb038
+Plaintext = b0c3858231e284af6d231f043b95772f5e7b16a34ffcd2ec
+Ciphertext = f40385024e6366aa91339c7f10a5052c35e07a59f1851bbc
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = 3fc7453df038a92829dc103d44b63ad097d7cd7f9ae7996547012090c7c4
+Tag = 91a93f5fc28e5f4f351cfb888da763dc
+Plaintext = 319f396cc02834f8e69d65f77496d0eb31ce1a7b7e324820
+Ciphertext = 755f39ecbfa9d6fd1a8de68c5fa6a2e85a557681c04b8170
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = 18f1e92bd3c4a597ed970911d03a78ff9a6790147c9bb0ca5f23b70cce7a
+Tag = 2c6a90ef2e9a969ec0576fae1d126a85
+Plaintext = 25550c03f8fa02b3781330f96e0fdc58681b0c0bc5e83fe9
+Ciphertext = 61950c83877be0b68403b382453fae5b038060f17b91f6b9
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = 09ecb2406054716418ff3600c3c5cacb0845a377a2d80542abc36ec81bb1
+Tag = 59fd6aeb047200907911621e8756b45f
+Plaintext = 210ff7975e08388b9a46eb732230e3a3856a497549b5eb49
+Ciphertext = 65cff7172189da8e66566808090091a0eef1258ff7cc2219
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = 62d515bb0525b565a6a3613ae20343c8da7424c8368e8cad6a862b7d37a5
+Tag = c4db6d5fd910c83fd77aefba3f7665d8
+Plaintext = 5d867265965bb2aafebb0691de9e157a24066d06fe3cbd7c
+Ciphertext = 194672e5e9da50af02ab85eaf5ae67794f9d01fc4045742c
+
+Cipher = aes-256-ccm
+Key = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769
+IV = f9fbd02f28ecc929d369182752
+AAD = 00617ca141e55b045a188e4934caf6db63d4577f634db92c22010e1cbf1e
+Tag = df5f21f32cbe5d272004f1c104cbcae9
+Plaintext = 396b27afd16a1081f37bbc1f742b549f5f68df799b93083f
+Ciphertext = 7dab272faeebf2840f6b3f645f1b269c34f3b38325eac16f
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = 860f4a09ad8b3d345c2aa18ffb803f0bc3b734a4d047a1437701a5e3d95288
+Tag = e678a392d228b210dc5c991905dacf3f
+Plaintext = bc8b3bc48c7a88c9fafde258b6ccaa9d4f0d018703d63871
+Ciphertext = 95f083ad6bbaee6ab540fe023858f8baf25e333fd3e89c00
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = 8a84b57915bdbe7bf5a1c1a426512b3c178d883251cc46c95a8bbc8ed9e56b
+Tag = 10fbdd3b305522dae6b652322d89d9ac
+Plaintext = 9499ea48edab9bc21b91dd614f04934ca20db8630622f481
+Ciphertext = bde252210a6bfd61542cc13bc190c16b1f5e8adbd61c50f0
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = ed8540f7ce451c522c1ff5d2d1030d7b3fbd1219a21aaa84044c4f23c08f5d
+Tag = 8b6b08548e794eaf85ad9f5de80b1c00
+Plaintext = 73843a4e9e7937fed24bb1fae15822213b1aa86c07f1b5d1
+Ciphertext = 5aff822779b9515d9df6ada06fcc700686499ad4d7cf11a0
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = 61bb196b212feab645f05a8aa1986f6210a384c15bc749245d840b3565fb36
+Tag = cc73643a7ee9291e15137d7046a92f3f
+Plaintext = a8e24266e5981b2ed14213a29f961cbbf7f02f63a33c987e
+Ciphertext = 8199fa0f02587d8d9eff0ff811024e9c4aa31ddb73023c0f
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = a49c2df94ba65107f375ce1c53b72406143f6bcd270945de5b7811682fe361
+Tag = 204438662ea82f423a69c6e4e3c0623a
+Plaintext = 3e3c402caeca41687d12897102e04312edf7b8c7d8567a22
+Ciphertext = 1747f845490a27cb32af952b8c74113550a48a7f0868de53
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = 7c48480e9bc87ba299e03899698b2259eef150ee0f2efff40a5583b80ab484
+Tag = 6ea00b9cd881e3f4b1e838dfa31f6560
+Plaintext = cfa9292b9052ac6bb863205d3c0dc2d9e20d2ba6a680d2ed
+Ciphertext = e6d291427792cac8f7de3c07b29990fe5f5e191e76be769c
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = 5cf9744090366d828b477dc890eab8ebebd44f6aeaa5b101291bf67d12867e
+Tag = c59b3b87d722a58cd1de58f3963d12b3
+Plaintext = e0fe4e139ab0deb4fdf2145b719f35c50b869e6cb20608b5
+Ciphertext = c985f67a7d70b817b24f0801ff0b67e2b6d5acd46238acc4
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = 761d74be5fae170a1bdfa16081b44c1e49972e15ce0818df1390bf7204f619
+Tag = 158759886124f1f0ce8147c94f4e7114
+Plaintext = 665fdcdf55a1231e9912562eaa5a5011d69f6948e29e3f8f
+Ciphertext = 4f2464b6b26145bdd6af4a7424ce02366bcc5bf032a09bfe
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = 9815353b69d0b4effa52cefff13703fa71a6296f9cca0f02568661be4b64cb
+Tag = 6310a79c9932456dbc00515b264f3168
+Plaintext = 7b2d52a5186d912cf6b83ace7740ceda3f5f443530c5a49f
+Ciphertext = 5256eaccffadf78fb9052694f9d49cfd820c768de0fb00ee
+
+Cipher = aes-256-ccm
+Key = e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309
+IV = d5c7824af715bb7822b6b340fe
+AAD = 69dd1a050c8d79dafbbe3403af4dc1f070b9b2b980888aa796e6cff68d9060
+Tag = da7e97f9984a7db3b93aefb4316d9acb
+Plaintext = 3cea5ff50167c5641066852fd00061df35b1f66bedb894b7
+Ciphertext = 1591e79ce6a7a3c75fdb99755e9433f888e2c4d33d8630c6
+
+Cipher = aes-256-ccm
+Key = 2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f
+IV = c49ccef869bb86d21932cb443b
+AAD = d37e35d7cdccd9824a1ae4c787819735e4af798a3beb49d4705336d6496853ad
+Tag = d6b14027324b657a56263df148665393
+Plaintext = 771a7baa9cf83aa253349f6475d5e74dba4525307b022ba7
+Ciphertext = eebac2475004970071dfa2cfb855c4e78b1add8dcbccfc0b
+
+Cipher = aes-256-ccm
+Key = 2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f
+IV = c49ccef869bb86d21932cb443b
+AAD = ab22bc22bf2628b0e0ab245c3db2fc5128d13a011c2cc9b9fea05a79a3410704
+Tag = a8c810b6944815fd2e434193520b1d5b
+Plaintext = dad95a4b4d3754613f0542caa62cfe4e375dfbdd369ec32e
+Ciphertext = 4379e3a681cbf9c31dee7f616bacdde40602036086501482
+
+Cipher = aes-256-ccm
+Key = 2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f
+IV = c49ccef869bb86d21932cb443b
+AAD = c48c5aacf701137fc40fd0d3649641aaa5be427ceee702cf7ddf6408f458a581
+Tag = 8aa447b79284c588bef50b423de97908
+Plaintext = 3f28df9263e473be648fabad163aa4142b633388b16d8392
+Ciphertext = a688667faf18de1c46649606dbba87be1a3ccb3501a3543e
+
+Cipher = aes-256-ccm
+Key = 2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f
+IV = c49ccef869bb86d21932cb443b
+AAD = 477c2484cf5c56b813313927be8387b1024f995e98fc87f1029091c01424bdc2
+Tag = d4f4a413eb3ac2c474134995d4db9a16
+Plaintext = f83107b50a1f192ed45cc43fa80e6b519bfd859173ea9ee9
+Ciphertext = 6191be58c6e3b48cf6b7f994658e48fbaaa27d2cc3244945
+
+Cipher = aes-256-ccm
+Key = 2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f
+IV = c49ccef869bb86d21932cb443b
+AAD = 143bc037f1d0bd4ec16825c58cb3796bf8989200d27bda9beabbbc49247f59f7
+Tag = 56a3fb2e06734b28fbd57942a609d914
+Plaintext = dfeb324ba459ec4a5c54d2534e98002412e67db19cfc66bb
+Ciphertext = 464b8ba668a541e87ebfeff88318238e23b9850c2c32b117
+
+Cipher = aes-256-ccm
+Key = 2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f
+IV = c49ccef869bb86d21932cb443b
+AAD = ffc416f1dae4e43c1a01339a604c44d6a0f25ab9ca3978c6aacb6d270d510ee6
+Tag = db94280d3c4a1cd8cb00705f60ae36f2
+Plaintext = 0765949e6f22c422ebd47dc1ed73f1b849d7a058a1656fc2
+Ciphertext = 9ec52d73a3de6980c93f406a20f3d212788858e511abb86e
+
+Cipher = aes-256-ccm
+Key = 2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f
+IV = c49ccef869bb86d21932cb443b
+AAD = 6090b596b4082ec6926576137f6561cf13916860ad1cfc43650d1b5142a12041
+Tag = 12caca26cc3bbb289da3be0616b3445f
+Plaintext = 6db320cbe76bc5b8cee9ef89aca11765571c6c501993195a
+Ciphertext = f41399262b97681aec02d222612134cf664394eda95dcef6
+
+Cipher = aes-256-ccm
+Key = 2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f
+IV = c49ccef869bb86d21932cb443b
+AAD = 178ba75adb7c5bea6769270bb3b4f6ce208d4a786913d3ced7bb4090b5f65544
+Tag = 6cc8c665289d907628eb0e299c2d411e
+Plaintext = 0875020959ed969cfb38636d1d5aabce9658b00171a7614e
+Ciphertext = 91d5bbe495113b3ed9d35ec6d0da8864a70748bcc169b6e2
+
+Cipher = aes-256-ccm
+Key = 2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f
+IV = c49ccef869bb86d21932cb443b
+AAD = 90f0474dca998916075b1b1428df14d90be05491bb8d5d88e32e65ec890ba9d3
+Tag = f7e481607a2a0529f9cda1d5903325b7
+Plaintext = 4f89ca6ad371f86a6e073ec12fb1b928bb10d6639233b918
+Ciphertext = d62973871f8d55c84cec036ae2319a828a4f2ede22fd6eb4
+
+
+Title = NIST CCM 128 Variable Nonce Tests
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = 37667f334dce90
+AAD = 0b3e8d9785c74c8f41ea257d4d87495ffbbb335542b12e0d62bb177ec7a164d9
+Tag = 84d71be8565c21a455db45816da8158c
+Plaintext = 4f065a23eeca6b18d118e1de4d7e5ca1a7c0e556d786d407
+Ciphertext = 768fccdf4898bca099e33c3d40565497dec22dd6e33dcf43
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = f7a5098b2a4d92
+AAD = bc498326755503ff25d02805eb3517221b54eb4fd79af0fcdf9312b2a9ad95f7
+Tag = 697b41c9a69acaf8386140ee6e36f406
+Plaintext = 3e2144e2a381b718962a77e167778bf579957a8fae29612c
+Ciphertext = 98ce91033fabaa8fe853d347be6cbe5de102fdccf042e7be
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = 732d2dd64b4a25
+AAD = 495b03df82e317e4f351c5323d17c673f4c77856983179d7c7cb75c2b0573c72
+Tag = 2d442ff663242fa269c4a742a220edc5
+Plaintext = 4bb0d170bdcc70fd18f19605cf9c6181082c4367f1e6fbce
+Ciphertext = 9bd9304259962448fa8487bc15d950303621213afd88f1e3
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = fefd3ac595428f
+AAD = 91ffb6be8e129cef9189f7e0fec8e937afcfc6083b6a79a778a724bb3e8d0794
+Tag = 564a2f1cb7d77e0223287740d5ff9003
+Plaintext = 9e8c4f1292e8d7e5179b34ae5d2ba2491d7754acc54bb91d
+Ciphertext = a5d012b3062cc93b831860d76539169c88854b85550c67fc
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = e14d81ee3b873a
+AAD = ecdc5249ceb48e8d5a4483043921c00c1acb1843fae00155a28f3a127150b1c4
+Tag = d217fb611daeb66fa2d8e1bd43cb2131
+Plaintext = f99e23288e6b5ae85c14610994d90d5fcbcab62b4ed1333e
+Ciphertext = cc4ee711d0202deb58664e00cf0cf70b737f48ddadcefd6c
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = 2cbeaba94dbbd1
+AAD = d129674c6c91c1c89f4408139afe187026b8114893d0f172f16469b183fee97e
+Tag = a45116736e95d823e579d73dc31dc487
+Plaintext = 1b42cb685bd462fbd40e0273a81c767aa81cb43f17d3c0c9
+Ciphertext = 1a1b1c7130aa63098dea17ffbb2216d1d276cb10145b0762
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = 8a961df9c23f6d
+AAD = 07185502bf6d275c84e3ac4f5f77c3d4b30d8e106603be84410c11849a3c18ea
+Tag = 837ed517dbd7e6fe34ea42b01c69d370
+Plaintext = 434e182d04ecda519a6119fbaa4c45e8c9803a9a3eb51dae
+Ciphertext = 3f603939c6226d8208b2b0e675b82557609ceaeeee4032c7
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = d3604d390faab3
+AAD = c95e7329d36145664da69d25f24b301d334e1bca2baa74b2d5c325ed7d04fae4
+Tag = ef2e0b322f51abb366a1e8e37f4fe4ee
+Plaintext = ee104be898a225eb1da99163bbf768d8ae6d5850af6f8767
+Ciphertext = 3e6a7683d9d804f791f77d2b69996102ba82477ec4557747
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = db5004a1cdae8e
+AAD = 1370fc9d5bf1ad2d071be5a28b235402a85270f536b5601c221519a3b329c71a
+Tag = 2e4ef944778281ed186b4a8099b47fff
+Plaintext = 59bee7d18fd4ba573f3e4f61076f5b9f6a3487e47d98c729
+Ciphertext = 6db54d6f5c3f3efa6da67aea1234d46e8b679a5c257c66d8
+
+Cipher = aes-128-ccm
+Key = c0425ed20cd28fda67a2bcc0ab342a49
+IV = 783477f981ef05
+AAD = 04bbf2a826bdf3d55069b1936c4f8e8e08189f54066a035c950c7347604b1b65
+Tag = bc5c098625c51ac7fdd15da2cc9ef4b6
+Plaintext = 6150f132b25727ebbaed9f16bd91ebce00c68e5b39bc0ef9
+Ciphertext = 36f78cef22cacaf9f3d4464821737f7fbacd79be517b4727
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = 21fd9011d6d9484a
+AAD = 66ff35c4f86ad7755b149e14e299034763023e7384f4af8c35277d2c7e1a7de2
+Tag = 4034d9fdb43c3f48932aa72177b23bf6
+Plaintext = 78a292662b8e05abc2d44fbefd0840795e7493028015d9f2
+Ciphertext = 5a0be834c57b59d47a4590d8d19a1206d3c06e937a9b57f7
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = 97f940d7c1230bd8
+AAD = 78337ddfe38be7897372b0f805603a9a9e55598452285764641c3bb7aeb54a3c
+Tag = a20a3995cf25c5a7b9477d8916adff73
+Plaintext = 772aeff60eb3adf5a9589ad54dda0401cc9765589609dbd3
+Ciphertext = ef5c408dc6d0b501925a47def54d8deb9880a07a3e6380bc
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = acfdf302ed116ac4
+AAD = fe9d9989bffae3c9e6161eb0aa9d54ee8f5051f0dcabb5a750c5478c11798ce1
+Tag = 7d0e2fe322f203c08f44d7f9bd7258c3
+Plaintext = 99ffe16de323a9b65fe60305a2d062cae490ccca6d9fe9da
+Ciphertext = 1bbc2c7877d845591660636cb6ccf4edcd4c156996a26a70
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = c8d36e13b7459c47
+AAD = 3f3c3a4c26dba18f385274ac5ac3df73282686488d91bc8190b7f61071b07f62
+Tag = 05fdd72307c3355b19ea66d4a16ef17d
+Plaintext = 316ee95430329f706348886b8ac7779e3056809e25da0a03
+Ciphertext = fd2db9611a26a3e90f4861467df60edcc595f442332b0899
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = 5822755a3e47c27d
+AAD = 1d72d6b371e85ca359483761704f80b3360f4d6610e6d5e490b0d509f73c3233
+Tag = 59124db19ab1373a5376f46ec7095ef4
+Plaintext = af4ae8f19cf6cbd199677fe033859f56906f1979b1b5926d
+Ciphertext = d5ed6f8d5c42f4f3ea527094173b278724a2ba787e416ad7
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = 6c1c94c2e71b865b
+AAD = 298cac1e4684182786f386ef3de79c11e30b2dab7579b8ca18d0312200860403
+Tag = eaa52d69ab9790edc384b9a5d8c91dbf
+Plaintext = 6e4d992d7541e02a4aa167e56c7e47206abc25fea6c5125d
+Ciphertext = 560cd43a502a6e8b1af478a3b640a68937d1a83057110d38
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = ce7ec65cfeda31da
+AAD = 13c1298cbf7fe6a9ab378f86d3c2207944cc2a232f9383513ceb3b202086d365
+Tag = b1f45de395e021c6fb1b2991c91bd643
+Plaintext = 196c80d02b663bdd89fdaa31e329b5a8f7c596236ee8dd80
+Ciphertext = 00174dd83a7f8edc71afbe5da095160336be9184f693db3d
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = ddb739acda6c56ec
+AAD = 7f89bbe513b9a7ebe9be3f6eb88782080593c83e8cbe47fbe15bdc3e5782090f
+Tag = 713d941b845d96a5bf65e9f80ae7f923
+Plaintext = e95e142217c838d1f998a52e342e4f2d80b1cfd35cf6b73d
+Ciphertext = 819d73dadaf095652cf39729b2e2cad7fc7783887a5acc15
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = d9bb71ad90152d5c
+AAD = 20bfcba120cdbeb07c5f4d70338ffce493822d78a03c9e80b5b934e16e39f70e
+Tag = 5e99761cb1ac77d772b9cce9345d9a75
+Plaintext = f1fe98b50ea2f9f088f6f93910757cf744d5aabf3081966d
+Ciphertext = 36decda8ade6ab104a201c6d370412b907a559738eef5966
+
+Cipher = aes-128-ccm
+Key = 0b6256bd328a4cda2510d527c0f73ed4
+IV = 2c9ec9f1f1358c50
+AAD = 96f0b1edec4ad14407dcaf30ed68942b46c48d58b2dd63af60fccd5bdd48e560
+Tag = 85ce60506ac3bd97327904ad2e072a6a
+Plaintext = d74badb8ad7f2c2bcdf67e497151d35a4fc2a3c4c871868a
+Ciphertext = 0e9066270da6e03cb4307c43adc71b4b596213a63fc80320
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = b7776aa998f4d1189b
+AAD = 9f9ac464de508b98e789243fdb32db458538f8a291ed93ddf8aeaacfbfc371aa
+Tag = 3e259aecf12ba08f2a2e966a3341d6d4
+Plaintext = 56d0942490e546798f30d3c60ad4e3e110fc04f5b1c1fa83
+Ciphertext = 96f124c74fd737819008ddef440320f4a3733d0062c83c89
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = 278cf1f09b13f467fe
+AAD = af9627922758a9f7792345716782e8837ca78e8f9db16e3fe12a7124a3d4e99d
+Tag = 11751638ed36c1fd3c7268b71633c1cf
+Plaintext = aa9b9e80cef47b6db3816b1d665f233e696337e21bb8333a
+Ciphertext = 5eba7e3b3ecab78121b0d56acb9dbfc6756c1255b42f145d
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = 4ae701103c63deca5b
+AAD = 5872a1507c833c581ac2750b2b54add4b92be14e45d72db7679f8fa2b4d1eeeb
+Tag = d3635aa1d8167087600b01643b0a5ce5
+Plaintext = e832b053854fbd40c0d8b6d6b8fd5de2da0c173f5fe594ef
+Ciphertext = 3b2b964c3a90d51c0ace186db79818b4d0f7b81236d36017
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = cfb5b12928e1c36849
+AAD = febe755bb8e4475d8d12f5e96269abd0d4e40d73cb966e2c523343e9a6d2d71a
+Tag = ee6f8c4b252e10b42fbaf8c7af1e9f3e
+Plaintext = f46d6970dcc37d32d93ff062e68034c1906ee487fd28eefa
+Ciphertext = 0d5332a42fc583f4f81744b899cdf2a64cad1e78d577112f
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = 68d5863cafc69e6ceb
+AAD = 048ba28abb191ded5449dfe9dc7d19f9b132a2a9fd779aab7da44d2887485954
+Tag = 3a8639f21f8548fae45dc76de57bcee0
+Plaintext = dd4438d7ba3edc73872e42dbbf78cf300fe4bf0eac9e16b6
+Ciphertext = 874d3ef7f916db2c2799b6892ef4bfbeb4729ecbf26ac498
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = ea09fbe5da0fa4fe91
+AAD = 63ee18eb720b21ee4c157dafcb8c7bcc6817f54d5c1b8dd7058c37228a03f8ad
+Tag = 1d3853a52971b0ab46cc0a3eded435c1
+Plaintext = c1811d613bf0789beeef693611ef733cd173da703b66ab3c
+Ciphertext = cbe5c799952b28fadf414607a6cf8194e9f41194abace454
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = 0021be18ed76b3a34c
+AAD = bb5eded483f0ae1106fd08c5e2b91cf06d3a7a73518ad4c479fb05e631ba5399
+Tag = a2a8e3cfb827c7e6edabb34f7bbafd01
+Plaintext = 2d5531d1c51c6ea100b028596bf9f24dd90be14eab58f07b
+Ciphertext = 7af0449f7359b7f3e5f6c1e7bc264c7724037f4f16077fd0
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = 449b51ee0760179e35
+AAD = e99bdf783070a3a48431704e90277ca65a9704c12eeae2e2d70b62f816115267
+Tag = 4aa8feae6a500919a336dbba1d9fb7e9
+Plaintext = c4896d58442877c986e4f862a9f3a3179f0e9b96316a90d8
+Ciphertext = af7531c073df01077fd5c8ea9a5530c2fe1688d529e5c2f2
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = 232114642e0c6b55b5
+AAD = da288d2014616f16a2abf5923dea49aded1748592adbcd97415c33ebfa57150d
+Tag = 0b25cea7ed6e4fe9069a2ce49875230d
+Plaintext = 11fd3f94b5a5ce94f2740a27a0771aeeac77f3155d2bc12c
+Ciphertext = f0c174a7927da0bb88e92917af8ae1df4ffc3527004e9e2d
+
+Cipher = aes-128-ccm
+Key = afdccc84f257cb768b7ad735edbd1990
+IV = 660cb6d654afcbdab4
+AAD = bd96c3c225099fc58cc1f97779304606b11efe9712fba13abf74fc1d7d44a900
+Tag = 6218635754d5563f2cd48bdbb267e5ca
+Plaintext = 793c0bc3deb6e0bec4c1d1fc17e455eb1aa5e9e25cada861
+Ciphertext = fa4b14a381ee41fec7b7279e58f0d06a3beec26d645f8133
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = c4fb7519a19f13d9d1fc
+AAD = 092e64fef08b5655a86cdb8de63ffaa7772e8730844e9016141af8bad2216246
+Tag = 5603ab284a73a38cc916f8b653c92ab4
+Plaintext = 5ea35c082e2b190e9d98e6b2daad8672f587b4f2968072fc
+Ciphertext = cda5fe3d15d00150b99120c7f206b88a4c2c4a39ca914342
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = 45927852550961f1ae9e
+AAD = 53ae030474795ffda4d9ac0fc3c45afb592ddd761f7b5335c13a6747e21075a7
+Tag = 35bb811491d142cf1b26350f8451bd14
+Plaintext = 6c5f468077536b4c9a94ea4a6fe3cf621083a210daee45b6
+Ciphertext = 694847b6429cbc3902d9cb7049625aef1e97b569e1e31690
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = d8c54463dfcf02d0e327
+AAD = ff95c0ed0da32d1b5f57570b815a50592ecdc9c1c4e727e0f6dfd93fc10ce88d
+Tag = 9c68e8e641b0120f7dd66e8f0cfa4205
+Plaintext = 7321a6de8d694ea05623206f5df438c5c2cdd6b1eccab4d8
+Ciphertext = 9cf8ef119aa5cf3d6305d50b2b520a0b10bcd240e2727674
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = f690f3a996928275050b
+AAD = 41c05fda535770699ed22cef253753b658437f833afe65c9c393581d835f0fea
+Tag = da44a62f97c0fead3f65b28928bfbcc3
+Plaintext = 56520a4bfd7b73a471e0446f9524a407e81c2681b7329e35
+Ciphertext = 14aa15f9f64c4c64f6e88094e012ecb24193249f044c033d
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = 26eb9ef25be62148fa61
+AAD = 8f45608a07521de86ed5a84a851e629b579b51d7bf4cc7202a773e0f9e9d8748
+Tag = f0d5444466bcc631bef8e58fe5818af7
+Plaintext = c68094c26c7f017b79f126dc26b3bbcb95f97535ca412da5
+Ciphertext = 7ba8a0c2fe2b230768d1c1874085ddff8926931961bc4558
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = fad21bc27dabafe7a4ae
+AAD = dc5d7fd97bb3243ba585fa0d71a07191667af418e30a6b76bedd05b32c673403
+Tag = 0b5419293a67eb008aef0f9f675201df
+Plaintext = c247fa8d8091cd3f299cdacba7fb7af93549e9e3160f9cf8
+Ciphertext = 3097d2ec0f8bf00b22504ab03a75e740d3e59c269c3ee3f0
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = c911348848fe67406dea
+AAD = 50d50a0b5ed4d6904ec3045263af0255a6494b7a7e2e95ea806c4bb788423dc1
+Tag = dec5a554f4bbecbf6943ffdab8d8a26a
+Plaintext = d846c170ae0111348362901503b26d58f5efc17b6d296aba
+Ciphertext = 5d72562f7dfb47bf34b90ee4ea11ff9f726c915b07f4d843
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = bb921b46a16d20ae4046
+AAD = 7d17f8f60ad1e61a168b5b0e7fbbc90cee79b612b6d6c0d7ff6ede042341e8a1
+Tag = e5b1162b7489a59a50c0f0f3618e6c2e
+Plaintext = 71bb6ae84262646c9be95e0f4289ffeab7555ec6746c6ae9
+Ciphertext = bac123320888b553666249756e6d63b3498760791cbe9e34
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = 61a8b8cbfc9bdbadb2a3
+AAD = 51cf2a8949e13eaa087a34c9ec4d7fd92b862efd6a0b1fef8b016fa2c6933426
+Tag = ed5505f1f0ff77723771338585c456b7
+Plaintext = 362f9a46aab59fb6213c83d791b2129b34367ac2de2048fb
+Ciphertext = b8a57e8714d8789f4ef2af29e0efec21b1ef67fdabc7cdf0
+
+Cipher = aes-128-ccm
+Key = 6ccb68d3838d4ddf660b9cd904cad40f
+IV = 6bc4cd23c32a913998a7
+AAD = 92fbc970b5e64198ce2a138de92767edff8d82f12f8832444b346d159657356b
+Tag = 714025f485c7f40256049f16f859b859
+Plaintext = fa442383da234cf8f0c5fb667218bc3bea0c091b3a8e6b77
+Ciphertext = cdfe3e83aba43a9804c5a1832e0e47a9a153359cc32db907
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = 74e689eb5af9441dd690a6
+AAD = 42f6518ee0fbe42f28e13b4bb2eb60517b37c9744394d9143393a879c3e107c7
+Tag = 16f322ce85d7c54e71ac560fd4da9651
+Plaintext = ba15916733550d7aa82b2f6b117cd3f54c83ddc16cd0288a
+Ciphertext = dcc151443288f35d39ed8fae6f0ce1d1eb656f4f7fd65c0b
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = eb118fb41284bfcb1bc338
+AAD = b5a6067fbac46578cfc8d3fe04108588c9de077eb009249374f205553bba9d02
+Tag = 4a0177883346dc896eb39e8a32bc1393
+Plaintext = 863da00c7accf45418d47c1eda72338734dcc49cd599f328
+Ciphertext = d64de7a56146b971e21bf5784d67bab32dd837cfb81591da
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = caba2716d07e95de83855e
+AAD = 0e0ff2c73ea5fa8f8726a3514cf906ce1610a1a6dc19b22682f9e4619f762d82
+Tag = 775ea25fb272981de8b8aa0a637498fb
+Plaintext = 2af6d5636ab65db2058b2ba16df257369fc4e8aef8b9481c
+Ciphertext = 3c9e006c7d8eff5f448b0cc9c27c964713241aa7fed3665d
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = 314c136999e41d137bd7ba
+AAD = 366c659bc45d0a88acd54ef7eeaa3e140e1cafb1b01474a065a9d460c5e83bfd
+Tag = f2aaa211dec623947a50b1252bc5aad3
+Plaintext = 217b19ea6a431a1f66bd9d02b718e8507a08ab8e6f603e3f
+Ciphertext = 33d7b672b23e8b03a39ff3fd1e7b0f2be67163e3e3bae072
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = 6fe51f5013f53d4e4fd907
+AAD = ff182f2e179d790e827cbfd0bd8b9297ecae57ffcef9e25ef114474a22e4ec5b
+Tag = 75ed171bb0fbaa6f431c5411cf9b536d
+Plaintext = c6bf582b49dd4ab6cb33f3f88e8a4d14fe32b308ee3b4682
+Ciphertext = 26cd5dc5eac2acda283ca03354260ad57af79e20c5e92f57
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = 24bc8dc1e2354667b79ba4
+AAD = d0d48d01fc79685c6bee04d45e40d06cdf1f4607542b1ece556fc2d1bb2b03f1
+Tag = f391749ea3acd624c01e4583ab1506b7
+Plaintext = 90f52ebb1bd5439386faeaa194623285f750672a7baae64b
+Ciphertext = a7f43f56c50705a1a101044b954414fdfbe32b518e934d38
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = 89ce46b3de3afaf2518d41
+AAD = 5767202c913584d653f37d926a0c5ac1c67db3efd1dc58fbff998778a6856254
+Tag = 94e43a6b1cf73cb2d6a1dd8331549520
+Plaintext = b2ab379a0dd15baf91415eee3a4e56e7eca54d4c1c3094f8
+Ciphertext = 9f530e455a54b86835eacd8801b34c884a3b2ac819ba38f8
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = d3208eb695e84c7a925037
+AAD = 91d8fa65a6885f162a795afe2898f391990a8b3a87c11f94734dcbddf5f58da8
+Tag = b27fb6425fcc3537ce471425a5b17dcf
+Plaintext = f15e39f0e4eaa5bf81359d8e30186522f1a1a415436668cf
+Ciphertext = 7f1d9fcd9e5cce3a81e3495bfecec817fd7180d8bbfe0aba
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = 067de2869333ed22c7b63e
+AAD = c31e441fd551b3fdfbe23ceec5ec1f838f31a5300f6055ad2a936a9d0c1c856e
+Tag = dfb879c21b46f3307ef22f1da579303f
+Plaintext = 1536d9c9a09302d142c85638202f5bbf0c287f68115d51d8
+Ciphertext = b1a5c7a7fd23228dc7ea26885802daa0719f6a23681e1d65
+
+Cipher = aes-128-ccm
+Key = e6ab9e70a4fb51b01c2e262233e64c0d
+IV = 15f61b4526d19bceae1093
+AAD = b97b122af73e928e617e98684f845be4cb80566345739b7a884c6a3eec5102bf
+Tag = 900504a73c8817ff2b55618b2602bf38
+Plaintext = 37c81988c07a5b01e2b40ff9f9ada5f50ca764efb717ff9e
+Ciphertext = 0d93a5c77482d573b7f1b8c5e283f2571efc9f54216a4c01
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = 0ec3ac452b547b9062aac8fa
+AAD = 2f1821aa57e5278ffd33c17d46615b77363149dbc98470413f6543a6b749f2ca
+Tag = 4829e2a7752fa3a14890972884b511d8
+Plaintext = b6f345204526439daf84998f380dcfb4b4167c959c04ff65
+Ciphertext = 9575e16f35da3c88a19c26a7b762044f4d7bbbafeff05d75
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = 472711261a9262bef077c0b7
+AAD = 17c87889a2652636bcf712d111c86b9d68d64d18d531928030a5ec97c59931a4
+Tag = 715a641834bbb75bb6572ca5a45c3183
+Plaintext = 9d63df773b3799e361c5328d44bbb12f4154747ecf7cc667
+Ciphertext = 53323b82d7a754d82cebf0d4bc930ef06d11e162c5c027c4
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = 6a7b80b6738ff0a23ad58fb2
+AAD = 26c12e5cdfe225a5be56d7a8aaf9fd4eb327d2f29c2ebc7396022f884f33ce54
+Tag = 86a0e926daf21d17b359253d0d5d5d00
+Plaintext = ba1978d58492c7f827cafef87d00f1a137f3f05a2dedb14d
+Ciphertext = aa1d9eacabdcdd0f54681653ac44042a3dd47e338d15604e
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = d8e133e7ff8e0a0ec6c4096e
+AAD = ef9e432c15d8c93a4b5c0666608e61c824cd466d7940d642acd3dc33057c0395
+Tag = 9f9cdf6ab825f6e026f5be2ad895033e
+Plaintext = 2836de99c0f641cd55e89f5af76638947b8227377ef88bfb
+Ciphertext = 5edb056d85dafeaaf74bdf4caa47339d6a75bf1ee998565e
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = 2fa8120398d1a946f391367c
+AAD = 377cd407ad28dc02bd3835a31d92f8295c9dbe597f56662ceda112c588dc73a5
+Tag = d3021f6ad620648b8196ab1693710398
+Plaintext = 7a37255b682766a0bfecf78e5162528885a339174c2a4932
+Ciphertext = 701f5f506fc7e9ea4a27a4db5cb890f7be3b4f6bcb20f97e
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = 8d638ef43f56dece910139e9
+AAD = 87ea7b095388de70ac0ed23e86f502400910028a8ab5e3bbb91d05821c0d2d61
+Tag = 2d236162688096d80b8733d2afbcd244
+Plaintext = 7370d9b453936955b9c9d336f4b283237986232de007bf41
+Ciphertext = be2f03f6ce1731418a5f53b6f6e467b73992a0c8102d8ffc
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = f479ea8812b6b2f6ac78fe9d
+AAD = 20c2b8f5d3a65a66ba8a25e2ee339a779a32d45f5db91077efae6cf308feef50
+Tag = 61bb9415b32d6a58f5f7647ed41de685
+Plaintext = 59ff9f7581a781808d36fed378080963f35c00ea5a6e3932
+Ciphertext = d127c956349c16e2186f55b72254c677f03c61f1c4ada9e6
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = 423515f7bd592d6a7a240866
+AAD = 19eef6f798fc68086aad1cda6d7976cdcfe6b8af74598032972c939db300d8c1
+Tag = 30ba95c4058501234a1b97543c998e9d
+Plaintext = 3c379f90b11c622a765756a15efc8fc3ca7b08b3281945f5
+Ciphertext = 15792e01fc17f5294c3405484291082c00a8f46dd9af8ca2
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = c3f3da69e13c5733039744b1
+AAD = eedf00aab5edefdd6549d37ed44358e11c588c24f141dc5731303fe0bd56b11e
+Tag = afca1b08b6dd589a17a32d49b6f7135b
+Plaintext = 9db6fe9adb8c0fee87cac9a7f01a7ed8a84f0512d09b1834
+Ciphertext = 9b6b829ca1dc4e90d4402188632ea3377cbec2ba60f0f072
+
+Cipher = aes-128-ccm
+Key = 005e8f4d8e0cbf4e1ceeb5d87a275848
+IV = 0a57d59f21ead5b6d80cd2ce
+AAD = de5f2d413c98c6ea2a5640a7b1c424aebe75cbc78b06710b5bff8bec6afb5a76
+Tag = f344f2f1b2218d9b4283fe640a6d315b
+Plaintext = 0b5f6389f7c20f4ba326e8f05d373ca27b7ebe59e6d729f0
+Ciphertext = 0b704e14bc7d2977d89e0b2e7ed7fe3c9e0f2ea80d2d6165
+
+Cipher = aes-128-ccm
+Key = ac87fef3b76e725d66d905625a387e82
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = 0245484bcd987787fe97fda6c8ffb6e7058d7b8f7064f27514afaac4048767fd
+Tag = 2eb66bb8213a515aa61e5f0945cd57f4
+Plaintext = 959403e0771c21a416bd03f3898390e90d0a0899f69f9552
+Ciphertext = cabf8aa613d5357aa3e70173d43f1f202b628a61d18e8b57
+
+Cipher = aes-128-ccm
+Key = ac87fef3b76e725d66d905625a387e82
+IV = 2a27257bfaadf23a87df082c57
+AAD = 0001dc666c9daf3560daeaf514270db0b5075d295068e6caf231c1de0e1a9300
+Tag = 4cd9d735f51430275387c565cf1a69bc
+Plaintext = 6cbbfa6d736fbcc4cf73ab4d7be537420e0e574ee1f2d1b5
+Ciphertext = 72d525e6bb312bf2c20b91f41108779789c25720797ebffa
+
+Cipher = aes-128-ccm
+Key = ac87fef3b76e725d66d905625a387e82
+IV = b94ac8ed14895c80a91fda8367
+AAD = e1eaf35fb266f243a3fa407cd41815ae6432ad79877bfa59d8f196cbf19bfbb2
+Tag = c89fb5f507f5aeefaa9365f0b18dcb3c
+Plaintext = e6ec561496ce18d96b26d594a47ffad02d68ef25d2d2edb9
+Ciphertext = c63500445239bbdf71a8dfe3f8c01061d659cfeb038b825d
+
+Cipher = aes-128-ccm
+Key = ac87fef3b76e725d66d905625a387e82
+IV = bbae10aa491ac9c668a3ba8d7a
+AAD = 981fc31e64fbad244ba1ef0303ba1e4beef5bacca74f60ffdb9142a25a1ad5a3
+Tag = 83d0a61d453d596fbc5c2e315d9780bf
+Plaintext = b9bec3e2adc83620772048d6cbfb6f78e4fad74d754ffbbb
+Ciphertext = 9c629c375f014e162895cfc25a972c29839f97407e7c7cca
+
+Cipher = aes-128-ccm
+Key = ac87fef3b76e725d66d905625a387e82
+IV = e0b10e78e9fb41ee970143e9e3
+AAD = 399b71ecb41f4590abda79045cdf6495f27daaa559c1b34f513b5c4ac105ec10
+Tag = 8e8f8e13b7896b244d0c9aa52ed31a95
+Plaintext = 4b81804d777a59b6a107cf3c99c9d1a35bd8e4ed36596789
+Ciphertext = 867799b30558697d6efb4afcfe458cfad8da21139a0b4312
+
+Cipher = aes-128-ccm
+Key = ac87fef3b76e725d66d905625a387e82
+IV = 17b61109f5e37754e4e92a28d7
+AAD = 0bc2fdd890c19882640f8d4188b88b9db99cc1934cc3e98a5df08589287968a6
+Tag = c40eb85585cc3b7520a940a4e993327d
+Plaintext = 347c1eb4aff917bc0012f005e74caadc93f4f18f2b614ece
+Ciphertext = ee19f3120991b67b2389e6f36543d99590f2e6d785c9c8ec
+
+Cipher = aes-128-ccm
+Key = ac87fef3b76e725d66d905625a387e82
+IV = db3ca9e80ab761804349379961
+AAD = ce01369d08d37dcda2c899c9fc0d11ccf94a0051b2816a1d6c3ad07fc8dd02d7
+Tag = 401358c7b44aea27617b429583103a1a
+Plaintext = f0e1af1276d2918be91a191814660bfe735463d3983de1ed
+Ciphertext = 0f1b1228729b181772d7cf55ad257fbcb19cd46f7b31a885
+
+Cipher = aes-128-ccm
+Key = ac87fef3b76e725d66d905625a387e82
+IV = 1f57959cecbd377374477e33b3
+AAD = de1c7c83ac61e1f99ae99b198f4af5d24f8de60ea98fe637f3a801fab38b2a4b
+Tag = e93525fe8048c3b2147a149f12eaecd3
+Plaintext = 42a42b84df098ceb43519c4cb86c14c2fafca39346159e13
+Ciphertext = 12425453de653d0fe8103013fde1ebf4a8fe18f76f0c9d60
+
+Cipher = aes-128-ccm
+Key = ac87fef3b76e725d66d905625a387e82
+IV = c9db03e2efbab713b0b6404210
+AAD = a2969243b0955402ab45a430fef2ef9e0c025006732bf8e592e3d3884918696a
+Tag = 64ddee42614aa737231207636c114575
+Plaintext = d633a5a3defdde6a68f959ef39a91c6ea6e13ef1a7859d2c
+Ciphertext = 5cdc183c32b4c1878eb83e8473a17c55c88e2ad6b944ab1f
+
+
+Title = NIST CCM 192 Variable Nonce Tests
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = 764043c49460b7
+AAD = 6e80dd7f1badf3a1c9ab25c75f10bde78c23fa0eb8f9aaa53adefbf4cbf78fe4
+Tag = 2dd6ef1c45d4ccb723dc074414db506d
+Plaintext = c8d275f919e17d7fe69c2a1f58939dfe4d403791b5df1310
+Ciphertext = 8a0f3d8229e48e7487fd95a28ad392c80b3681d4fbc7bbfd
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = 026a0b8b17be95
+AAD = 44caa8ecfaf38e5e773cb0366e1b04aa0b9fac5c34a362310f471960c4a1e1c9
+Tag = fedf191496d88cbe17c6271b65096e66
+Plaintext = 0e52a384cedcdf7f179348de6e7336aa86f8855fbd903cfa
+Ciphertext = 3417044bad5fddd9455579123dda4fd342c273a57ff6333d
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = ea09fbe5da0fa4
+AAD = 1d9799f2bb0f7ab57fe3de27949ff64066131c81bfee172b308f9bb0b3171067
+Tag = d47e30b635d10d1663477d61d7ffb55d
+Plaintext = 469ff9698cfc96b581d7115c822e4363d7355ec5daed2eae
+Ciphertext = 1dae7cc16f1b469290902cfad47b959784b4d6f48a79e690
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = 8d27bcbf9ebfd3
+AAD = a7070b85b7add9193c9dcd2e6c03f6e7ecc52ffe9e099866baf7472f20c03aab
+Tag = 2eca8766bdf0db6bb2dcc793e1749c21
+Plaintext = 225651d072dc9d93762dd79691ac2b6ddba00ec1252d69eb
+Ciphertext = 5da819adefbf794612eb458519debcd524c283763eb3d725
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = 13f560187b6077
+AAD = c4ab4244db75f8256e55c5b613a07b11c963c3cc24f66128aad4ba8b7ca99331
+Tag = feab6761c55431bb5668e1f5b7505e89
+Plaintext = a38231af405dc7b70c8dbc8cb84e6be8a0dc2e95fddc2ce8
+Ciphertext = 3aedcf8347aa23fd3325ce08b6b00462536baed69968a753
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = 61e0e28bf344a9
+AAD = 5f998952de70449ad46428f2ff8a01c5af43c0107a1bcc6930f19d4112598666
+Tag = 64b2302ace4f66216ca8b4d776197692
+Plaintext = db21b37e875d7709a02239ce6ea529cf37255d5b617c153d
+Ciphertext = b8f5fed39c723d7643d6dcf2efd3bbd1ba0da1ec901305fd
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = f6be4aad63d33a
+AAD = 18339be863fb8a887d04ae9ff3b4a7db095075cd5d113a9ec87b41fe85ea405e
+Tag = effb985b9c2dd9ec954bd25d9c464c67
+Plaintext = e53101e6eabcda32c13d7b1dd1d88e7c2ca3ddc2064f64c6
+Ciphertext = b758858ab60e1630a0883d4d330119a593729a3015c42525
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = 2c1c59aa0d8eff
+AAD = d44af86b89fda8448a9b2fcae20ea156dd8738c8251699c02b785811c830bf72
+Tag = 72adafffbacb297d67f6b5c02b982e04
+Plaintext = 1fd7188a43dee7b059420e8634d71d2c0658f6d0d308dc73
+Ciphertext = d046f845a67800a5a58f461e5a8641e8fc9b4c53b32e61d1
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = 48e4598edd191e
+AAD = 61588bdc980ea2310e87dec4c651e9a55c27e3858b6505cbf3bf85e51931badc
+Tag = 500ff4cfe66ade1832babc019778acc3
+Plaintext = c25868f390af5e59c035cb5830e018c62c5b96bd35b764f1
+Ciphertext = 0ece161bd77b7f969b3b20c818769a98c178d84524544664
+
+Cipher = aes-192-ccm
+Key = ceb009aea4454451feadf0e6b36f45555dd04723baa448e8
+IV = 6d576ce3c5fcb5
+AAD = 92c598cb5ca2926c11f67c3b3cf25493d77606fa60d7290430e0e975091644a6
+Tag = 391031b3a22b2adeb9791ee35765c8cc
+Plaintext = bcd97479db934357a163a9e5f5a85999ca987f8243d8017b
+Ciphertext = bee185e11b3d42bac846b9d92c70a078aebfa630ab763840
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = ad749d596d88a4b4
+AAD = c67219909828adef64422286008e1e306867a1c0b3da95444507a68b45c953e4
+Tag = 5a1969276aa2b0cdb37ccaf2845dbf6e
+Plaintext = bd92d6744cde446fc8621625658fc4bc00dcb97f06195ad7
+Ciphertext = 076cffd0ca978fe2bad411ced45a090abafb22a99896f6a7
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = b1dc81d116d94f5e
+AAD = aa4b71906b6642f10f66c2391ec157c7cde97eb322db10045af4c5248807f691
+Tag = a67e36d7cc8d54cfec0762514475127b
+Plaintext = 9aa6dbe1cd3eb98d330c937d31ef93bee8938b6c5cfd38de
+Ciphertext = 720f6876ac91665f20147483f0655fdbe21963a01e36f1da
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = e758738df5c89af3
+AAD = 5715fa238f432c926e62dd93708d0e3145428e0ed45e1efa8148d2c4ab6cba50
+Tag = ef50d85bc3ade6a773d956b2660ac367
+Plaintext = ce80b99039a16e69018d1e3c239dd1bf06e94a78b0b1df37
+Ciphertext = acdf7ba3edca1563727ed85cabf085c2f0c8f27556c3c064
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = d586c4c67d535476
+AAD = 1e8dc63c6c54a540b6b02067ba7c719221cf289fa3897299722c9a2bd6eed05b
+Tag = 81e024aaf0a62b353f9bed36681288d2
+Plaintext = 2f88305117f9a5d807d54b7e95ecfeb7327e52d9acac352f
+Ciphertext = e42b86e619be1a38973c934babeb4688243a9012c85d643d
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = 77e83758f68d272b
+AAD = 25c80edef3d5bd8b049fa731215b80ca2ee9ee6fb051326e8c6d0b9e11e3d7ef
+Tag = 05fe32f796f0b4a75a459fce6c7d740c
+Plaintext = 92e47b82b728d639777d5d5843de2a5c364956cb4b21cabd
+Ciphertext = 1b9177f5b76403cb8c690b39c3dd22b55da35cebccb9b64e
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = 311dc245549206cd
+AAD = 87767f13bb4904d0df0d64eb22c9ddb65e81b5739baad86ad5e2c239ffde9f6c
+Tag = b75f9e4239e43bbf93066897e60f6fbe
+Plaintext = 8691c0301a216a5f3ed9123886d100309bd85630d6b845f5
+Ciphertext = f39fe3620a03b37a4bf457909e0770447b498ad2a2f0f9d7
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = 2a17b70f10e120c0
+AAD = 981fc31e64fbad244ba1ef0303ba1e4beef5bacca74f60ffdb9142a25a1ad5a3
+Tag = a0c069a2439a2d8843302c6a9999e658
+Plaintext = b9bec3e2adc83620772048d6cbfb6f78e4fad74d754ffbbb
+Ciphertext = 92187955ee1ae702ef01a385537119b2bd4545402e8b2384
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = e0b10e78e9fb41ee
+AAD = 9d072b8a3f1a496b2be6728a38b94a4f44c9be40c8793b69afd81d01696a6b4a
+Tag = 5005b06d15f63f2f015cfe447828da09
+Plaintext = cea28e7cd0eff0c5eafeec908d4aa8ba303e72ada33db087
+Ciphertext = c605e48f2e66e8e0a92471e466981ae5e31db3e4ad80b09f
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = 02d72dde23f9772c
+AAD = 2dc44c39940e2d9c94d2dbe40bbf5cca5efb4d4b250a31aa24f208b87e9c2453
+Tag = 3ed92ebb789c314a89c83542b15ed694
+Plaintext = 809343e986f6ff47f54d4cac22ed39babd12271d4c7edb58
+Ciphertext = 0bb59581f22f6b15de76c0066645495a5c19e44381c34926
+
+Cipher = aes-192-ccm
+Key = 1dd56442fa09a42890b1b4274b950770ea8beea2e048193d
+IV = 28c4d6de3e2ce51b
+AAD = 913a8eda924589d3206ce0a951fef93668c6c0c454824b217997bff6b3026d54
+Tag = ada8e796f2ce7f9449f42de504873868
+Plaintext = a19f65ffdafd6ad5ee43570f7e168f94a8b4a7b7402ac80b
+Ciphertext = f0c91a29f1222b906550ef5c7c0944c5c4236cb6c31122cf
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = cd84acbe9abb6a990a
+AAD = 447b6f36acdad2d1cfd6e9a92f4055ad90142e61f4a19927caea9dbe634d3208
+Tag = c5e36222d17c6fb0631c3f560a3ce4a4
+Plaintext = 597b3614ff9cd567afd1aad4e5f52cc3fa4ca32b9b213c55
+Ciphertext = 2d7fb83e6621eed9073e0386d032c6941bef37b2cf36a4c6
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = 1fc7a43ed124745d04
+AAD = c892b095173076a40e24522297be27fd3a765c8d417f24c71a9f03b3fe3d8e20
+Tag = 7a2a13c22df4a156e6d6063235452c85
+Plaintext = 415cd8312dd20a1c26f4b90d98104cdfbe06739466fc0aa5
+Ciphertext = 7bebd6f55f15ae57ab73f92f7be6ff37ddd99740e988f01a
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = 19ff5e7c1f2c594abc
+AAD = effcea4e4dbc57410426b39fcf51c9daecd9d310888590d77827973a29c4ebff
+Tag = 7579b2c4a6bcf0356f48cf8959cfa54a
+Plaintext = 97fd2c259a4e672e9555a9a5b98f4c0ec8c4c49c7ade26a4
+Ciphertext = a460674c2f358762e97dfc958d90973e1e419dbc6a832e98
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = 64d9bd368ac2357cf2
+AAD = 62c5a16f946b4312517f67c80afe2614c822e3a01b87dc81538c00bbf3fc0108
+Tag = 92be2b06a0ecd2d00877abded7d9634c
+Plaintext = b6ada12f7a28211e9d2c07cbb3d39fa77aadc077b34c46f9
+Ciphertext = 8fb5e0954388b9b58519482962487e9b0768f0cee08afe9a
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = b4aaf2cd93efc0ce93
+AAD = 79d8841ab83279724ce35e1a8abd4e158168dcf388ab4c3d1ae70413e4e43d14
+Tag = f8d301ceace678f9bf91fc361dff5812
+Plaintext = dd42449da4c95e858b796085b6b5b3b5eef484dbf3c2bc8b
+Ciphertext = 893f86e29972928c1f3c3e25c73947c8d677814bca7fff2c
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = 132f3e19e12f462a74
+AAD = 176cc5a280f6171d00e247edacc81f05c1b9faa87fc831163ac9d76aae59a6c3
+Tag = 42ca4f4ccf986eb6a6b85b99db2fcd93
+Plaintext = 8ea05a5033ab8b009664fa2800c24e217488ce6888cad147
+Ciphertext = 4771d210ea678dbfab96e320e9c44b68f47cb05b01826ccf
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = de709ba64cb75704c0
+AAD = 0cf8e9ab95766b6fa85e88d86e4f349a17c0d90509939e343eede988e7462255
+Tag = 393162252ae91ca46fb8e8338cbeb75d
+Plaintext = 51dd9fda9549f25dd868245a6a54b8d59346d2f336adf9af
+Ciphertext = fccc3e44afa6bd2fbcfc5c834db63dc9d152c04c0dc0b43d
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = b11b4c1b7a26387265
+AAD = 14ed867cc909c0619f366918a7d5ae25279fb137e1dee7fd98ddbe3bd19d841d
+Tag = 1f498ea6ec8251a6d149c7ca38b25fe4
+Plaintext = e35ea4a16e274fcab457fd4dc7886c3d81fc668c19e0f374
+Ciphertext = dcca8aa2eab8ac3f5db9cd9560ae0758d7df40d7d868d1f7
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = 20d03227a7fcaef1ce
+AAD = c5c15245e641687d0ca9e913406acd2de3f21fbaf2dc5e4e8963222da61d02a6
+Tag = 8ce3ab864545ea81943ef0ea9489d223
+Plaintext = 6775e5faffd0b13e78da70a789042245d5ef31eab5245380
+Ciphertext = 4bb8ed2207f36f40f62d3a2c90f8e3bd8f589059b6903711
+
+Cipher = aes-192-ccm
+Key = 8cc622645065c72d0d2aca75802cf1bbbd81096721627c08
+IV = 267f76b9ec0f5e7c6f
+AAD = 2b421be47d07dcb12a0706f7490d05024fce8f433079e18ec78f4c8678f5f155
+Tag = 655e14c7bc8be97ea47388cb7b18bcf0
+Plaintext = 9330bb23428ab45f573923e977db74882282cbe1371da68e
+Ciphertext = c6ae24f82ac5cf9c18a2d98e610027eb2566a1ccfcf99945
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = d7a46e726ed43f1580eb
+AAD = baa86f14271b2be7dbb37ddc7c95ce4857e57aa94624d594d7bd6ceeaada8d5f
+Tag = 39365dce86859cd82395d11bfc8cf188
+Plaintext = 2a794b84fc9e4a7e6d70a82b5141fd132177a86b4e8fc13a
+Ciphertext = 2d7f76464417613bb61d3657481346b74fc9d6abc6a3babd
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = d0afcbc1b2524a4a4553
+AAD = 7c267223047af946b06f6a45ffde4a5ec49c28b81ca22da4a36bf523e89e9da8
+Tag = 8355b915ca2633fd557ca7ed41e00926
+Plaintext = bfc5ce1316ccdbcd8ac62484e7656c87947ff98cbba8e1e9
+Ciphertext = 4772c121367d0e8d3edade883342395f3ea065fe7dd7be8c
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = 6eecffd227e8d5349523
+AAD = df7736560b1a13aa8e536500ea6cdb9a6757309aadf25a6a9189055a309c3f8b
+Tag = e7d017514d498f1f3c07d650afde8293
+Plaintext = 19eef017100dc82f26ed0815c55c122e0b1587302894c391
+Ciphertext = e2864c6e12ac089daaa1e94af4b2ed04060d7ef65d2f72f0
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = a67c0675753f725a8fd4
+AAD = 7dd546397a9a0129861fb6815d419a307f90d259d55f3503961754126cd1b776
+Tag = 7499a8544bc2a8fe95f55fefc7316f8d
+Plaintext = 80f1f1ea46c92d28f2d60eab39ce056a4aefe63fa688538e
+Ciphertext = 882c687c03eaaad9d7f591649e736f0c1c78f95e40d40cd7
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = eb83928f0d5f7aa3a74f
+AAD = 060cd3e4aecdb03837dfa9f544318c0a16cdc37fa2a3135be7888ac67e7eb26b
+Tag = 623f3a13fc13db958cbac49f7421d6af
+Plaintext = 81e9174e9472777b6b184707108c01d6ea6b5d108ec3c6c8
+Ciphertext = 243cfa0a0a36a4c20333968910e6f52acc04c6f74e704180
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = 5757abe01f7a1183fdcf
+AAD = 744629263041f0eccfce4a1ebcc18c4c984010f9241d35966263a8b2f72ee26b
+Tag = 9c447a3132fbe5213133650000d50b06
+Plaintext = 991049f26b529af8b0bee0cc83989cf817d248254182f332
+Ciphertext = b20469b5f33f0996e8de869ad10ce09924a0bdd7b67a89a0
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = d9adfc5b44ad7aa94b05
+AAD = aa6a5448c6ec87be75eca35725ad2e902dbccf840d25b2bdf7e62e4a8fa4a511
+Tag = 5ae554cb440eadd875657fd5cecc214a
+Plaintext = 14682301a99bf680805d1ffe62e1506d48cee8c51ef1d255
+Ciphertext = 9b44efa185b0c10325bb4c3c0815e6a6e46eea366b9a416b
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = dc3ca30782c9c0a7fe89
+AAD = e788c98ae85b11b3ae884eed6f3b8f5bcf5ab1b7b20ad3f44f760b2287cc5793
+Tag = f8312986315522081f0989838ef0429b
+Plaintext = f9cb86f24536931a1b095b426a07e4621c000cf09b472bf8
+Ciphertext = 463f9124d1cc387a0f8b971d1e2da448f0efffc3956ebb2a
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = 9523f53f92b6e4ba86e5
+AAD = c3b123ccc916d26a2e6a8b5e30041ad69a944217e9b402b7acc0170c31e8c2e4
+Tag = 768e94f062e86129cc9210dfcd3e6128
+Plaintext = b9bdcac80f64175836ab51bb1a1bee5ffe3a6b9b71afe3ef
+Ciphertext = c356b5a78cebd123808fb740754dc47a8ec7c9448bfacf39
+
+Cipher = aes-192-ccm
+Key = ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f
+IV = 16bdf18c09d60f3a2a32
+AAD = eedd0796f23612749e9fd282c864f3118d0683409d3bef1fda352e1422273c7e
+Tag = 978757883f07802b25e9a5b15c43b451
+Plaintext = cc96133e473d197be1bafdfc1a21d58e57d0d89b2ba1c3ff
+Ciphertext = f9d78e9e3a41b3bcbfe756385a3715776eb84bb7d8d15432
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = df990c42a268950677c433
+AAD = a6ab5d78427f297a4b7e21f1091ff3a5b20caa3fe1cbcb09459d9df596a6c8e1
+Tag = fd6a7255e4801963bb30a63de3fc5b82
+Plaintext = 6db41aeb5f7c24df8929dbc30483b3c7934b3bd1cdce5bb9
+Ciphertext = 8c9328258bf71970d33e23a3ff81cc1c9cbe196a1294264b
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = b7ea72641bbe2dca6d85e7
+AAD = 4e0f2ddf183281ec131693bdcea3fc9743733c07a486a42d5737735b3f6e3fdf
+Tag = 262de30da6ef505fe640c53d765f672c
+Plaintext = 726844e41b1e4d883024b32fee0dcea38c889cb328885b7c
+Ciphertext = 9a133e4582c2ebc445862a9c6f2f4e39223c84081e322c8f
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = 446fee1e75e79c0dfc9ddc
+AAD = 42b598eaee271e06d9e98dd94152b28ef10f506d65bd660b2fb8b1be9a2d7254
+Tag = 96ecb1e46beb16000d585e1d9559ee22
+Plaintext = 0cdcf348ecc9c3588001802c2106fb64be9c301adcc66e73
+Ciphertext = 0c2657b0482b6ca92e1b1c8fdf75eae3b0cd3af205e9bca3
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = 2e6e34070caf1b8820ed39
+AAD = 8bd1ef3a1831fcc8919d736fb23111ca3ef4cccaf20264fab8eb3b071e56667f
+Tag = 5198cbe3e34c884c3f56a732974aa1d6
+Plaintext = ca0860cc1e96506c2beb25b53d2947fbab634f0372afc8ba
+Ciphertext = 19e4774030e43e6853ab5bf176ba9c4b59f29f285977e3c1
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = 428542ecfb94a745980aa6
+AAD = 8efe01716b9018084e2ea7616f85b7333d945c0c970f8cdd400130b98db67cda
+Tag = e7cec415030997e1ac5db974b617b5a7
+Plaintext = bc6b59120ba2845b0e41f65a55e2ef1c45a81485c926c14c
+Ciphertext = cb48b0af6fad251d409d14ce0fbfae9cd9c40bf4a0c1e2b7
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = eff703e6d72ddd23ff52d9
+AAD = d7fc74035e66709d2590b7bb3276245dd43824c9896fbd801ec1d07018b39b6b
+Tag = 3e59bfecf263bfdb24686627fd95e120
+Plaintext = 1a5432e8085511ddac1be91be3e2945f85f0cdcc3a1c9f8d
+Ciphertext = c0a00cbaec65b7ca525fb26e80ee0cd18c7ef47c39c70483
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = 6a652ce21334a40a259dcf
+AAD = 5d24d80f22afe713c4076c200c1bab36917907fde7b6d34e141066f543526db6
+Tag = 0652b67d559a84b4a915ca6a420fd300
+Plaintext = eb8f1988cb405041bf48d138ad41da7ef364d4ac59a9e324
+Ciphertext = d4f23166c09a15466c7e0e2b30627ee5a84f22d7e6135b4a
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = 9382e12d447c0ca23cc9c3
+AAD = 239129eb760f8a770410c160e4e13a6b9497077c3e463b65397393fcd3cb5c70
+Tag = 50f5a52f82211542b4e2661cf870c80c
+Plaintext = b40e80564263c7f450c53ef84df67247d72e8a04dbb284bc
+Ciphertext = 6de2ba26caa80874814816154784912c55e3d6da83488e72
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = 2c3a4148cbb02504a2483f
+AAD = 33c3bdbf185b580353de79e51e675b03b31e195f19ba1f063d44def0441dc528
+Tag = 7de16aaa41d06bc071657dacf14da754
+Plaintext = 60a31736d99c3dcf25b349f6110e1c152b93506e85a01e67
+Ciphertext = 4d5e705d08f3ed1ca6f1caa74b46e4b1eee18a0783686f20
+
+Cipher = aes-192-ccm
+Key = af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b
+IV = 691cdf6fe9ecc2154d0101
+AAD = dc096596644c4e09c44078b86e5e0887c45094042eb0d74a6a13aa2524463076
+Tag = f07f23e65475a20fd96e45c6c695cd83
+Plaintext = 77e6441ee017a93dd876ff2c7980540c77ee15edb0f23933
+Ciphertext = 24cecc81c8ac7ca9906372dc5263f2220b4dd162f1e08283
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = 1af29e721c98e81fb6286370
+AAD = 64f8a0eee5487a4958a489ed35f1327e2096542c1bdb2134fb942ca91804c274
+Tag = 0af2a663da51bac626c9f4128ba5ec0b
+Plaintext = 062eafb0cd09d26e65108c0f56fcc7a305f31c34e0f3a24c
+Ciphertext = 721344e2fd05d2ee50713531052d75e4071103ab0436f65f
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = ca650ed993c4010c1b0bd1f2
+AAD = 4efbd225553b541c3f53cabe8a1ac03845b0e846c8616b3ea2cc7d50d344340c
+Tag = ef7662525021c5777c2d74ea239a4c44
+Plaintext = fc375d984fa13af4a5a7516f3434365cd9473cd316e8964c
+Ciphertext = 5b300c718d5a64f537f6cbb4d212d0f903b547ab4b21af56
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = 318adeb8d8df47878ca59117
+AAD = feccf08d8c3a9be9a2c0f93f888e486b0076e2e9e2fd068c04b2db735cbeb23a
+Tag = 8925c37cc35c1c8530b0be4817814a8e
+Plaintext = 610a52216f47a544ec562117e0741e5f8b2e02bc9bc9122e
+Ciphertext = 83f14f6ba09a6e6b50f0d94d7d79376561f891f9a6162d0f
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = b4cadb5f9cb66415c3a3b714
+AAD = c4384069e09a3d4de2c94e7e6055d8a00394e268398d6ea32914097aec37a1f4
+Tag = 75ecb546efb8872a3f8b0281b3901752
+Plaintext = 22bade59214fa4b933cb5e3dc5f096e239af4c2f44f582b0
+Ciphertext = 2296e3f8a2245224d274f1b90ed1287cbeeb464c70a89ee4
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = 72e6cebdaf88205c4e744286
+AAD = feaf010f462ad40a38eefb788b648e1cc292cd4bb08ebeff3c39182862296042
+Tag = 51cffa571570618e2ada3376bd9f3e5f
+Plaintext = 30655a6b5a5965db992e7248d24141055e988d726abb8e72
+Ciphertext = 69b27f2bbaa61c4f24e1c25e0779147fef79ec1582486b46
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = d8030fb31eca2c43f3f5eb88
+AAD = 66704365ddd0145febeb33f68b228a3f09e1e5a4b68149e6e06d886301841295
+Tag = 2beeeea7a638c717e63764b3a5118a0c
+Plaintext = 9d014a02507a6f266bd1ace21b55ab8b73983ff503bb9adb
+Ciphertext = 233a883650538ab8c0da30b90527f880fcad5b16bd435e76
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = 58038cc35ad3dcd75195e125
+AAD = 3da7a757e942409a3b39ccdc0669ce6401f7e133c07c4c42e366d70a8e9bdd49
+Tag = 33a87fa29e5fbfa9bc0430b0cac00b7e
+Plaintext = eccfd817fa5e3a0146967fae13fc2471ee3944cee37969f4
+Ciphertext = 415a36872a04f5b4b5372f63394ab9fb353e0eb9b4304501
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = acd82ae31bfcabd90af5af45
+AAD = ce22126f01bde16249c47102b4da68ad3edebcd4a16c24a16ea7ccdd5d364d10
+Tag = b336cbbeb64fbebf2e7076a98ecf5bbe
+Plaintext = 9d2126d34963d3ba12cd841bd321036cb82cfb78f2a6535f
+Ciphertext = 88a5b889e6fd74fc15336e23374b430988416c7e6b6e7248
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = d24457d567fd0a65fdabf219
+AAD = 0091d39f3478d2c59bf874b96db9ce0f7e8b85a9b805e07dc96b219819d51663
+Tag = 0ea909047af4998c660afbaf346ed65b
+Plaintext = 6da3ac85505e93c4f391ea367a9e15fa9b388ef7ae2693c1
+Ciphertext = 7039a8a49cfa6402b4ba3b840e69200c13ac4a3eb1c709a3
+
+Cipher = aes-192-ccm
+Key = d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5
+IV = 50c59ca54eb64575b82b13c6
+AAD = 5e4e42cbf172853c351d597c7d6d38b1a9cbb7ac92c00863a80ac4a2d9f0e7fd
+Tag = b193dd767f17783f0b51ac0fb7323301
+Plaintext = 25b2ba0a937b71f3ee68e7172cf2c4524b662efcd08ce2b3
+Ciphertext = e95fc44287ce39c5ad6b91c88582563fa68a9e304094deb8
+
+Cipher = aes-192-ccm
+Key = 36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9
+IV = 3af625df8be9d7685a842f260e
+AAD = 308443033ecd4a814475672b814b7c6d813d0ec2a0caeecbcaba18a2840cdb6c
+Tag = f8c99ccf2d82788cf613a61d60dae458
+Plaintext = 8b9db1c8f9b4892a5654c85467bcffa2e15e28392c938952
+Ciphertext = 6bc6890fee299c712fb8d9df9c141f24ee1572b8f15112c2
+
+Cipher = aes-192-ccm
+Key = 36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9
+IV = 24eaeaa437649e61b706942b8d
+AAD = fff75462f96157d9554bddb6aac156fefd88fd4a90a8536dfc28cc577f19c83a
+Tag = d0a421bbbc002eb9ac9ad01f625f824b
+Plaintext = 49ff4ff85f7407ca383cfa4fd7177adb4dab26e642c8186d
+Ciphertext = 3647fae50c588d792442f43a20125e77ab5db3c469391d24
+
+Cipher = aes-192-ccm
+Key = 36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9
+IV = 7325932d6694aaf61a8204c172
+AAD = be20ceb8ca14e9bef7158b280a26bcac763da79cd0eba9b1833ea808c5e7a66a
+Tag = ee32a7ffd4e7bc303d3482fbac431828
+Plaintext = 2861494eb40b9d964d339797c1b6aac63c6674187768957c
+Ciphertext = 286dc74001e2a6000a23db164f4b2912de4afcf1df8c3aa5
+
+Cipher = aes-192-ccm
+Key = 36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9
+IV = 61c9949df5853e42599e5ee0c7
+AAD = 243d09ceb16755cb58d62065df84890b840ad9b7eec1132c6427cd7c3d843fcc
+Tag = 5eb30cbec49cbb51c41cd5032b7fd759
+Plaintext = 943a49073db6ae94a88844ed895f8fd99ed25c3f42a2f78c
+Ciphertext = d3c56bd265a2cb0811dd218f248800ceade4f02b5403b963
+
+Cipher = aes-192-ccm
+Key = 36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9
+IV = 07b6c18dd3b0fd9e8ff026a436
+AAD = e85f141c3d1af7727fcdb00f8e2c34e42a436d04ac5b8ca9f321a178a2056806
+Tag = acb5cf2631987d3d963349b035324aac
+Plaintext = a18b0a4618063c0519818d113b8e5435aaf153f664058f1b
+Ciphertext = 69f933a2a5e774e8d013cbf78c6ab0b73e6ca323d0c52691
+
+Cipher = aes-192-ccm
+Key = 36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9
+IV = 0c075df70630dec2fe81834945
+AAD = f3f5c5ffbfe8247bc0c33c793652f749fe91b6dd141cf0db56e71cef8a2fd266
+Tag = 4e239d33283d18415b54c2aad4bde354
+Plaintext = ddc4bac4115e8cb06d29d22e400674dbc615a667f933603d
+Ciphertext = 26bdd25c9f204fc7520d26c161464c28fb35e395b295b3db
+
+Cipher = aes-192-ccm
+Key = 36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9
+IV = 0c2d20375057fcd4241d290f6a
+AAD = 70ff1b9ff8ec08fdb18b0e7dbe01127ed0cfe0b0a449ca2ace4992b7b6248b71
+Tag = 62d7e0320dc930df3640a786d7ea9ae4
+Plaintext = dacbdf1979e000d52b573e74800761b30acc26681f372acd
+Ciphertext = 6a642c389433a3464fc64783ae6a14a9a45f0998b56a5b91
+
+Cipher = aes-192-ccm
+Key = 36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9
+IV = ea0801cb3dab853750a922dd25
+AAD = d83360d0896e022bf014bd33710ab212ddedda6d95a54996f33db304e5f12f01
+Tag = 0d06b4a545609a2128a95d4d73471559
+Plaintext = 46cc5653bbd8300dfb0df6d0af3fb7c7639a830bdc9f68c7
+Ciphertext = f1b0728920351d9edfdbe7df360b21f6cc5b628dcf43a3f1
+
+Cipher = aes-192-ccm
+Key = 36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9
+IV = 97e6de379c90fccf3fa8f27013
+AAD = 539f8eb802bfecaa4fb5b19debbf3d4847db9c4e0473a308ab3f3c859e68fecf
+Tag = f3512baf72cd79ba9301194be204bcc0
+Plaintext = 8b013f52a828905013f250fb9c006a173f6c66a64b5ba317
+Ciphertext = 556a439bc979dac1cfea8c5b64aa78547f52a62896c19893
+
+
+Title = NIST CCM 256 Variable Nonce Tests
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = aaa23f101647d8
+AAD = a355d4c611812e5f9258d7188b3df8851477094ffc2af2cf0c8670db903fbbe0
+Tag = 3bdb67062a13ef4e986f5bb3d0bb4307
+Plaintext = 644eb34b9a126e437b5e015eea141ca1a88020f2d5d6cc2c
+Ciphertext = 27ed90668174ebf8241a3c74b35e1246b6617e4123578f15
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = 195c0b84baacc8
+AAD = c7d9557b2ed415652ce6faa8cff5217ac803530ec902890b31eaaf3eeb0aa98b
+Tag = 82c00b5b463654adbf82888099a7d258
+Plaintext = fe012718481b2c4e1d7f9a7685e3daac43ccf22cad0df900
+Ciphertext = 893af0f130f1317de9f217234274b0c04fcc202cea9a0df8
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = 363e0e921c6f11
+AAD = 805678936d4e94746ab4818dc5f50c41e32cf32e7a8aafb300fb91af6406108c
+Tag = 80adf2762a1617adfd4d8356bb48aa8a
+Plaintext = 7e7e33e1a07d4e8fde2f33304f21cb564d146860ccfeb49f
+Ciphertext = 645cdd11a1c232815ce1e07ca3ea83f372eba46cedafddd9
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = e323cc866af462
+AAD = 163c747f3ba4ffd68af87f2475f48f2714659a2ec43b9ed115e02fe0e3c8be99
+Tag = fb9c02753c57fec7e1a5fa8f3860501b
+Plaintext = 2bfc76f3b108ba3118b07433c4d3d5f41564d22547c12822
+Ciphertext = 0db04c6b068e73e3c4d71059bdeee3d27622f99dfd07d868
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = 03ae777078b95d
+AAD = f1dacf9062dff9a6a3d0498f9d058782f891475684196bf2d8e7e905393acff7
+Tag = d104990e598eabd88cc8342ac16424b5
+Plaintext = 38c4275a5f605fd1d99517e13deebf0c9794ef586070fa9a
+Ciphertext = df8f524872b5f06f3f219ba76524990b466409894930d7e0
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = 1c6c351d4fe9be
+AAD = 14285e97cc3cae452e1a52e2fa0bbe24df96abf2faf6b9779acc59764612eadd
+Tag = e004894b1861db5d2d8ae98ed8926c1e
+Plaintext = 9e2220f3c17532e1ce0d6f562b049fcef35bcaf9a7e196be
+Ciphertext = c274b28228a6b13b670c325080f88d188d40d78d385481ea
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = a121dc27479397
+AAD = 359421e9f78cc4a31f4f019977d7fd29780524e20288798c50002a682a6368b9
+Tag = ed2ac2cb63e1b9d7dc598634198fe4fc
+Plaintext = d42b16b32e77637724144eaddb21ca8d7db4e7f73acbf707
+Ciphertext = 56e3e3e59e978161355e7d8573dc0657db400ca0b083dae8
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = b1f0e26b60bf1d
+AAD = 2ab4239fffd13762fb5391f5a4760d12d96ea12666a793b4d651e9f4891c22c1
+Tag = 95b8a23ee377d5c2850f4ed95a385253
+Plaintext = 9a2851083ad4e7b915bb0526bb4054e4c0b4adf8626edc90
+Ciphertext = 5b2e0215523ff37f0df46e84f996fc9fc779986c766fa515
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = 50412c6444bcf9
+AAD = 09cdcaa87ddf8bbe6db8411d14bb9064e4a121286cc8a6e97fce1844935f436b
+Tag = 514ef5cbf9991a919fb4974d55506ce1
+Plaintext = b28a5bc814e7f71ae94586b58281ff05a71191c92e45db74
+Ciphertext = 05cbc32a6ca797684636dedd16ce65a1eed69bcab1b1bdbd
+
+Cipher = aes-256-ccm
+Key = 553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf
+IV = 225557b0faca3d
+AAD = 21611da060fa90cf7fd68b721caf303307a56e56453326495b628c7dc93cd175
+Tag = e8a3f7b848054cb235e1b58d6a12c5cb
+Plaintext = e831b739e8eb9f787f63c0bb071ddcc9f44cab8d5b447d23
+Ciphertext = a97e0879407eb3b7f93118ca73f17eb34e9f4baf43b07be2
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = 790134a8db83f2da
+AAD = a7a86a4407b7ecebc89434baa65ef173e88bd2dad9899b717ca578867c2d916f
+Tag = bc00b1d8b2bc393a8d09e87af7811f55
+Plaintext = 59eb45bbbeb054b0b97334d53580ce03f699ac2a7e490143
+Ciphertext = db4961070f528ccd1a5a0681ee4d0ce3515fb890bccedc2d
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = fb2441d1594a488a
+AAD = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+Tag = ee21c5738d1f7fddf3030d004a702704
+Plaintext = 451101250ec6f26652249d59dc974b7361d571a8101cdfd3
+Ciphertext = 1bca7b0d35a68c0ffc568ffc8221cca738b67b95e3ab26ef
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = 0855263860043207
+AAD = c7fc24863c33f7e8cf97b337918495d52d864ac570c99cbb09d151758d6b504e
+Tag = b223454c57c714d96681cd4d55615afd
+Plaintext = 61fcd7ef9bf151b9d8a81dc1ba4f82c45e9c2e4784627acd
+Ciphertext = 9b939b6b188e1d0fe016f366fb01eb79a99ef7b1b57c6f7a
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = 415cd251a5e36943
+AAD = 1a393c7e85fb286709f4eb50f09640e1d65ec1135cb4443820136b3cec69772a
+Tag = 9af96d3ce4ea94213b60cb69d92050e6
+Plaintext = 66ae08d494dc9df9b7f8f53199fa37d0c88885458b168c57
+Ciphertext = 1731e260ae31b8068ad1099313b167d9e6cbe49f471da61a
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = d95bd65242bb2265
+AAD = d0e20e1358be5cc1c45c1cf02c82d0a6d0824cfcb65774cf95f047b9f2cc1d3f
+Tag = 627a352d056712e0d44404c61712e2ab
+Plaintext = 312c3791c64d79205a11eebfc14b2d7a6b00391793c9559b
+Ciphertext = c3fbe558ff9ea83ed86b7d66503ee38eee94e4a41fd53f0f
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = 3f0bf0141dd3ace0
+AAD = 9dd4ed18209dd6cdf19cc76fee443827e7331aaf020960c15d7bbed0f6a3b1f7
+Tag = 32645a322fa9bc8aace600f942a84db4
+Plaintext = 08354480047eee3beeb5ab165da17d23f2f1a4ad98720611
+Ciphertext = 2db9d2c54134d37ebefcecb9e2076034b975677fde58ef60
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = 3fd8b3a3ff563a42
+AAD = e58327efebad3276a7cd1b1ccb56db0caddd02a303cd9fc7ea5c607a2ebefaae
+Tag = 3957a2a5b6164218fc83e12c42d5c532
+Plaintext = d1abd89351384e1a3c3366f77c3175f6390801554d7cd783
+Ciphertext = be284dcb357ae99ada7cc891730320ebb32ca627eb8c8062
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = 14db1ffc1c87117f
+AAD = 6c2b091433833a0ed915354dcb70d982095b614dc51a95a22cec417184d8e786
+Tag = 2cf16ce68a93f8839245baebb2278300
+Plaintext = 0594307491f157821e63f50c94034f9284f095d5b897153c
+Ciphertext = a114c84a10071e359bba2b2ba4ea67f893e27e6ea880aa4b
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = 40b0f74ff27a3fc8
+AAD = 3b9e1f4e9b57a6dfb5e0ca7ef601fc6af30a1f8650228e51e0dc61180d0bec6b
+Tag = b8d191130e864bcfcd1dec94a1aaeaef
+Plaintext = fc8b7dbceef6b0ffcbade789e09303044042cd671607e819
+Ciphertext = d00ef56074a8213740af8b8f974f778db560ac365d6ce916
+
+Cipher = aes-256-ccm
+Key = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+IV = 96cbe9cd19351359
+AAD = cf498fd042f9a07503e490cec4873d4df91162cfde60bd2cbb2b710c6681a9fd
+Tag = 54e6ec9f6ae1e0976ecf04dbee6463c2
+Plaintext = 315e81c9ce556dcf97a5b68503fd2228a7a6a174a15cd618
+Ciphertext = 7383c2de08bce3f0b7e504dc03d062f44396bcedd2180fd9
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = caa3d928d2bf2b7f2c
+AAD = 304678b3ffd3200e33a8912bcb556b3cfec53ca17f70ecba00d359f9f51d3e3b
+Tag = 5a9140ff50dc4da375c7d2de80de097f
+Plaintext = e61bad17640ecff926d0b0238271ee4c9f8e801dd7243e9e
+Ciphertext = 7bb1137c14cb4d324a4a8f1115c619ebf74927f0bed60a8d
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = cf09ca67659a583bb1
+AAD = 5507c4c3107cb446d19975f91207dbf3e2a51d1dcfd7da2f082159dbc3f41547
+Tag = 971f02b7122d1e4f78de9c3376520f5a
+Plaintext = 1887bb0c02500093a30a44b99e137483704b06615d308c6b
+Ciphertext = 834d3b2e5f0915c2348c706b4d2ff2717983ab4490edcc63
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = 97f940d7c1230bd8d2
+AAD = 56be2c9e09b555373d58f6fe2a0ca9b4ddba899addddf12b0fda860ad791773a
+Tag = d30ece13481609809b218de04c4e5ed0
+Plaintext = 5ac67c9bec9b95c54e187a4a6812f5d701c4ac8f847c005b
+Ciphertext = 9f372ba1c87a115847cd708aaf5b8a143b6981ffc2c61cef
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = 147c7ebb6c92245054
+AAD = f95d64a513a9f3e6c95c9ed27b22fafd7dd10da52636029523142149116aff53
+Tag = 0c0986ecd7dab44e5e97db37392a485a
+Plaintext = 08f199a8d7e3ea821dd3106e8947cd2e9d485342b25a6471
+Ciphertext = c438aa6d187643d030dfe4d6b5b578f84838f4dc5c396d70
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = b9bad794d49cdac9b3
+AAD = de9ff2a43f49cdc502cd17a373989bafd13fa6ccff6660557ce05b6295186d47
+Tag = 38dd977042c4d97da84e4effa650799a
+Plaintext = 40d1cd4063750184356a1d7cae1cf1824f552c5d59a62dc1
+Ciphertext = 9952b25f4f4f375440cd958456184fe61610381ba92ca48f
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = bbe054fbef86db3ce7
+AAD = dcec76181e3b872a5a6e79f070354e38866c7f67fc428fbca29ae6d929b1dd7f
+Tag = bf22c81a5d824b4916660be6f9b513e6
+Plaintext = 5f29808ba74b672a0f82b3b7581dc32478c6e790e2b8c61c
+Ciphertext = 4d176f48b09b772dde8adbdaef720aba128a8d38a902847e
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = 6a35e1a4307f6efc6d
+AAD = af28120505a84a75b0f6b18cc9d8c75c661bf143be29c11d8ede78b9bb98c98a
+Tag = 588ace6fc303600abc8e5825cbaedc7c
+Plaintext = 5e2f601395ec406fcf96785f768162e849f867dca77667ab
+Ciphertext = 4e305e26d34711c6aa775f490939cc6560d3cb6905f5b0f5
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = f6c237fb3cfe95ec84
+AAD = 038f8ed89444784417a9c23bf11e9b436174e6c10959e00faa1704ce2f7f2c7e
+Tag = 015a1f78abc287bd2a63381ead07c558
+Plaintext = dfd9cacbf7d73d688447ebab13d2e13f3613652379b386f6
+Ciphertext = fb16c17a6b22a8658f446203ad46a48b34808083b271cabb
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = 50d024a3e7455d7249
+AAD = 8513365786b7988b208984e11022c15573f978bbdc29e8a7a4745c8a81885a1d
+Tag = 721f714120162514555b60560afa4256
+Plaintext = 400317786b7df63373ffe541efcee6318cfc95bb673aad3e
+Ciphertext = d33b3141fea3a9ebdeb80d1da32dae42680be78471fb3023
+
+Cipher = aes-256-ccm
+Key = 58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93
+IV = 02769283d5a06c363c
+AAD = 292c0be3713c6c588cb4e29a1c43b3e6353e33556194e568e800e4e44e8281e0
+Tag = 51f5e62b3b923a937e6c307af202fab3
+Plaintext = 12ba8eddff1c2a03ddd25bb924ff065a93fd712b2c4f61eb
+Ciphertext = b15b1789c323a68568f86f35483bd7e204beff8f318ae143
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = c527d309ab29ee91c5fc
+AAD = 8f9a73e7bc1c11e2919020ba3a404cbddf861e9e78477218e3be2cd4337b278d
+Tag = ffc040ef3977e0035ce6ea6d157c18d3
+Plaintext = d4291c99901345afe29f58912a414a7498f37b44362bdf3c
+Ciphertext = 392784a9e0b14bcd37639ec5409d6ead3e75f855e5a92c33
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = eebc31a5813b4fb93b63
+AAD = 9c87ad77953bf8a811e001ddb946eefafbfaa598150e85f0701853fa307d77d6
+Tag = ade65aa17e4dfb0aafe18cf71a72b180
+Plaintext = ebcfd71120b0f9a2cccb898e6dfa082998cbe10032de3e61
+Ciphertext = e38eaad1e2df77e85e7129a8ce0f82cfc32b0aef79ab651b
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = 231b33dc406c9210f59a
+AAD = 38be46d271bf868c198052391f8a2147c663700d9bb25a0caaa36974f18dacea
+Tag = b7f3b898a2356909784598f8a8916f5a
+Plaintext = 9032f910347daf661092b5c1f15b5ffed1369b194d9e12f0
+Ciphertext = 868b85288828501cf1d06610fec25e8b8a4b437e2e4f5563
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = f2a88c3ebc74e62f24c7
+AAD = 5f495c5da035cabeb77e8aef10e91a05bd5aa414d1a37fa1099af959b26e5403
+Tag = 2788860aae5534cf84979e30c3327d37
+Plaintext = cfe8ee9b475e36058471e2984ae66f6ba1b3cb477b15155e
+Ciphertext = 22c16333ac651cd9c183e78aba3e9312fb3b77dd6f919950
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = 9cbaf1c83ba60b1e90ea
+AAD = 7ef136bd9a5809676abbaa68016d6fc713e34ac4b768a8246b1198c959f43085
+Tag = 599ca6ec1c61a14c37b5902389e47aee
+Plaintext = c3bcb0aaea93893f05eeb6439c8619dec17670a6439e2921
+Ciphertext = ebd9fb86563aa8f10062624441336f982c161ce5717d990a
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = e25322845d87d8a76753
+AAD = 2a89b9f0e56a1cf87dd38ed78028b6286ef8b7141dd2b3c65c5a8e1ed79bf4aa
+Tag = a0604deb3fd9cea2d89987833ff5c2f1
+Plaintext = ae622ff9381854f831892c318bae5c003e74b15199bc12c0
+Ciphertext = 144c920f0fe278f353d0b053563d907c7589e4f1479d7a93
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = f4d7978fad36223623cc
+AAD = 8671de7e994967f2521d263925e745af9273682d9c08ced07d4a98fc985f68a0
+Tag = bc866ab47bea7a4d0070e52b492fb8f6
+Plaintext = ef9b4ff8da108cabc972192ffecd5f96594c6d0871ffa6aa
+Ciphertext = ae4948b3bc1e50beb9f5d005871fc0d3dbde295de1c9ec3c
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = 6597ffb9eaad0fd9d830
+AAD = d2967ddf69ef62a9e23c9118dfaa55df92b4116322f1c9275131e3875dc92faa
+Tag = efcb3dacac25bed0304f227fd5b77b8f
+Plaintext = 5015c894b2437ff15c46bca9236830ff4bb057cd5764f027
+Ciphertext = 0b1dcb3cb0b4c32f398f3c43eccfe8f4242f33c99a2a2283
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = 80e376b87272d99cde28
+AAD = c9cc8f967dff45c05b9345d03813b6e30dace99556f7df75b7120bb6e5f55827
+Tag = cd2f7494b1fb0a0c6a2184e5c4787fea
+Plaintext = 615f657e24129a3e0f119988959608821219ce8354c4be26
+Ciphertext = d3e8b8f7ff8faa666ffe2509187fa7befc7412fd4e3bdb06
+
+Cipher = aes-256-ccm
+Key = aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891
+IV = 344cce96455541d403f3
+AAD = 748cce18fb40126ce125dbe341fbbc59d2aacc170ed5ef0293b15713c9184a07
+Tag = d93b6f8c8a1bf72be75976e4ebe6dd1f
+Plaintext = 828b6a4cd49f499a6e8e8508f9ab35255d8e9fed33ba4d91
+Ciphertext = b67e582a74d7f022a16ada2de7ec18caafdefa6b104baf4e
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = 0bcf78103ec52d6df28887
+AAD = 049c10f0cb37ae08eae2d0766563b7c5a8454f841c2061a4f71a0a2158ae6ce5
+Tag = 7a483163dd8f228d1f20cd4f86cf38fd
+Plaintext = b99bf4dc781795fc4d3a8467b06e1665d4e543657f23129f
+Ciphertext = 0d3891fa0caac1f7ebe41b480920ffd34d4155064c24f3b1
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = ab6374c6b2faefd92fa3d3
+AAD = f19c044023e5cf339203738ee70e76527519763664c06ae00e002a5ba94c32c6
+Tag = 1f1ad61758d828b70d4881b7d6ae8cd0
+Plaintext = a2e5c51f516db01688b64c173bb25645182a005018022ee1
+Ciphertext = f70c598df3c64d3527ebb7fc8408b7de2cfaa1da7984ec36
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = cfb89e7ddcba601e875110
+AAD = 052714010da516c896ac5842a839ae845324643cddb080e6206148432d0d0407
+Tag = 316dd62075fc761e2bc80edc5c564bdf
+Plaintext = 037f206cab78a6ca0745dc8fc137e22e14f3d7183917ef83
+Ciphertext = ccd675862502a2e2520a33250150b8b7b220e84db854888c
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = 967cb6f8530bf8a43adb42
+AAD = cf391a84d03e2e22aec1965cec821f99e7bf21a7c3580dffa531464b22d83225
+Tag = fc8b5aca6d606222d6af7cfea0d1f4e1
+Plaintext = caa3d928d2bf2b7f2cd8a7f357055b6d6895a5e34f47972a
+Ciphertext = 4f4f509debe6e52eae4af8b1740dde0a5338f78711a3b4eb
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = f5b7b5dd2b5e1ec93710c9
+AAD = e7a6b228a67d37b9d29a38efc547e50b4a6d95d599b45ee189ece21101ac6b5b
+Tag = b2ff27a98029b23484e00c2a5d291887
+Plaintext = 4a74ff35418723f2cecec1012484b52114067b2b2393e7f4
+Ciphertext = 25b140922a9d4f2ce153a4ff86596a49d7de6a6184e931e8
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = 713de00faff892977d99d0
+AAD = 14ea93488d4284d21d4c7ce14414adf45c1ed9d2d99db866d0e59accb6234dac
+Tag = 3d2ae816edf857c810b6fdc7f2c71f1d
+Plaintext = 3820db475c7cb04a0f74d8e449f026ec951fa59667738698
+Ciphertext = e4d92ab8d1ffb0976670d891cc8338da12f86d5d79b33410
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = ba87934808de09b2ae829b
+AAD = 30e2ea2a505f19e8760a0a84961000c7a0b7fe3460a9d3f5a38f54149be2e9ee
+Tag = 93fc57997b977948d55bdb026db5bc48
+Plaintext = 0e52a384cedcdf7f179348de6e7336aa86f8855fbd903cfa
+Ciphertext = 6df893eed2be958e5f542f8cb4adb392b34786cb4ce821ec
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = ea09fbe5da0fa4fe911e18
+AAD = 237dc8512b29bccdeb8ee39cf83b9b6dd203823d175c44d5f605b194e7ec136e
+Tag = ff704a2bcfb8becd0226f76d68fbb08b
+Plaintext = 41cee0ecaf9c65cef740440af37954ef49a585779d2abbca
+Ciphertext = 2f204ebcf549ee2a800d870e6341b9a89a41ab4ae91b6902
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = 5b80d7affc4ab4a4b68bdd
+AAD = 3a38dd7da30f5c312fb1e978d87b7a39792fd9ea3e9ab1565874e99df587327c
+Tag = 8df9400df42baee6b9a0d75b45840104
+Plaintext = 5ff92f6d3ca791421363e10cc84b4e8e21e0ebe5d8c55d6c
+Ciphertext = 05472db7875d59f8bed45606f355a516de93740aa2baeba1
+
+Cipher = aes-256-ccm
+Key = 97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125
+IV = 514bba483fe7f2b7e555cc
+AAD = ac8beb419099cdb42a39e9b46fd900cc52eec4b43a96ed18b37b899b63fb931c
+Tag = 847729a70d7b4cff5281aece37006015
+Plaintext = b0b11dfca9b3936d1b4a423c5acd3d012b399a487c19c994
+Ciphertext = fa20629d514c4ce7bf727629bca5aa1c0c7e7851fc1bfc5c
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = 2f1d0717a822e20c7cd28f0a
+AAD = d50741d34c8564d92f396b97be782923ff3c855ea9757bde419f632c83997630
+Tag = 08aca7dec636170f481dcb9fefb85c05
+Plaintext = 98626ffc6c44f13c964e7fcb7d16e988990d6d063d012d33
+Ciphertext = 50e22db70ac2bab6d6af7059c90d00fbf0fb52eee5eb650e
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = 819ecbe71f851743871163cc
+AAD = 48e06c3b2940819e58eb24122a2988c997697347a6e34c21267d76049febdcf8
+Tag = 32d42f9954f9d35d989a09e4292949fc
+Plaintext = 8d164f598ea141082b1069776fccd87baf6a2563cbdbc9d1
+Ciphertext = 70fd9d3c7d9e8af610edb3d329f371cf3052d820e79775a9
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = 22168c66967d545823ea0b7a
+AAD = 7f596bc7a815d103ed9f6dc428b60e72aeadcb9382ccde4ac9f3b61e7e8047fd
+Tag = 7522efcd96cd4de4cf41e9b67c708f9f
+Plaintext = b28a5bc814e7f71ae94586b58281ff05a71191c92e45db74
+Ciphertext = 30254fe7c249c0125c56c90bad3983c7f852df91fa4e828b
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = 225557b0faca3d6cbaedec5c
+AAD = c7aafe7d3b419fa4ea06143897054846ac4b25e4744b62ba8a809cc19253a94b
+Tag = ac57f6ae1080efab4ed93f8b4ce1d355
+Plaintext = 0e71863c2962244c7d1a28fc755f0c73e5cbd630a8dbdeb3
+Ciphertext = 2369b56f21336aba9ac3e9ba428e0d648842a7971182d5ff
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = 78912be1a35e156a70fb72f7
+AAD = 12ba8eddff1c2a03ddd25bb924ff065a93fd712b2c4f61eb80d77fab2c4900e0
+Tag = ed3ccaeb7a814f69d3ec1fbf2ee9792d
+Plaintext = 113efd182f683596862ccd5eba2e2d4ffa709d9b85c6f1d5
+Ciphertext = 835a22eb8d718c0ee1531a2d1bb95f58215c997c612908ee
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = 91ad90b58d2044abacf957e1
+AAD = 4fc795b9126c23dd7fd514c2e5a8ca583e88a783b28cbb2a5df09f8b520ba0d1
+Tag = c257d67143722a976c9d7f44b09a767d
+Plaintext = ed55f6b9eb8fe74474c037ede94ffd84ada846ede4ecff74
+Ciphertext = ecb595276fd5d412a7cc3f5cfe960f47a0d0e2df0b08a11a
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = 4bbe4ca29122c4892ca09b5b
+AAD = 367ecd1b71dfb96a84e2369f28705dfaebf0c73ed35d5364449b2391230be846
+Tag = 6843a685bde3175695796f6e64f35901
+Plaintext = 8dd497bb777bbc3e56e3af25a43545007bb00f2b9e9f815c
+Ciphertext = 563d61fc0a5b82804a580a7d752a8e61d3342fb39372b39b
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = 218e7b8a8fd62927f90b70e5
+AAD = 01815f599d6ba0d1c09f6f673bb6cca4c2a7a74f4e985be4c0f37842c7bbc5a4
+Tag = d027e3466e8220144cb0552f9b2800e6
+Plaintext = 80f3e4245c3eab16ef8bf001429122e46bde21735f63adba
+Ciphertext = aaceb16589b9de253c99d0d32409a631db71e8df8a7644bf
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = eecc9f106a0721334cc7f5ba
+AAD = bf38d0ee11a796a517539bbc9ab00ff85a4ddbf0a612d46e2bc635180ad34c50
+Tag = 4c9027fc41bb8c848025fcf9d092a873
+Plaintext = 36cefa10af1a3446a2c8d4a1171144b9ddd8e33a7cd5a02d
+Ciphertext = 9bf3b2df93cf5b587ecc96f45fc75e6eb066cb286cb06f28
+
+Cipher = aes-256-ccm
+Key = d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc
+IV = e41af8ca408c4c12e37561a4
+AAD = e0b20892875f60b5d8763a04958487fa5b7cf8d67a456e430475b337245d671c
+Tag = 7e6e0e5dc0a03826e51bd94269d7a41d
+Plaintext = 32a4da08bdd51336ed5798c7177b853a534bc98f2e6f7d4e
+Ciphertext = 95ffdc68f721cf2294d0d88002e3814167306fd906dbebdb
+
+Cipher = aes-256-ccm
+Key = 4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11
+IV = 46eb390b175e75da6193d7edb6
+AAD = 282f05f734f249c0535ee396282218b7c4913c39b59ad2a03ffaf5b0e9b0f780
+Tag = 5460e9b7856d60a5ad9803c0762f8176
+Plaintext = 205f2a664a8512e18321a91c13ec13b9e6b633228c57cc1e
+Ciphertext = 58f1584f761983bef4d0060746b5d5ee610ecfda31101a7f
+
+Cipher = aes-256-ccm
+Key = 4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11
+IV = 8a56588fe5e125237b6cdc30f9
+AAD = b3aee5fbf409bcfe9b46ae68d570edbbed32c12d13926ffb5ddc60ff0bdb7f85
+Tag = 276664f6567f2f978bd4be4d80cd07be
+Plaintext = eca81bbd12d3fd28df85e2cc3dcc2ecbd87408002fd00fe1
+Ciphertext = 9aad62a5443550d11f9efdab2de0eba74d47ae4f7d16adf4
+
+Cipher = aes-256-ccm
+Key = 4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11
+IV = d908b04840caca2280e5293ade
+AAD = 314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e
+Tag = 6e5a9df1b1d6284ef657cde6f74734bb
+Plaintext = ad1109ea5c79bb55d22e9713eb2df42767cb29a2eba3ad2c
+Ciphertext = 61fdcebb158cd03151697ae7871c0a998802997e0672e588
+
+Cipher = aes-256-ccm
+Key = 4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = 080f82469505118842e5fa70df5323de175a37609904ee5e76288f94ca84b3c5
+Tag = 8cc80aa08572b90e9598d0a73712b720
+Plaintext = 1a95f06b821879df3fd3ac52fc99a7c1d3e9775263b7d036
+Ciphertext = 704f60f9cc3ef7bc00b4f7a271ca70a89f4d5605387b3e2f
+
+Cipher = aes-256-ccm
+Key = 4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11
+IV = 6c6ebacce80dde9fefb7e5bb47
+AAD = 93f0fca0c8c84d5cc48160b25e246226d489225c0f8275e52856da592c715aa6
+Tag = 86b2c952055899184f0d95ffe3959f89
+Plaintext = 46820aec46ebd0d61706129584058a1498514928a87fe620
+Ciphertext = 00f6cccf45f046da1e6266afe61eed61c60c28515b2e1ab3
+
+Cipher = aes-256-ccm
+Key = 4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11
+IV = b94bc20d8c9abca7645fc6bebf
+AAD = e1c083c93663f5a066ef337a61aa3fddde7c301a42463137c375cc2dcdd76954
+Tag = e37a53d77b9e38605febdd7b2b666f98
+Plaintext = f1fca581d3dbbc61060c0c02adb47bc57954d25a283f66d6
+Ciphertext = 90c65d23e0e1786cebb95f9b1306d001b2e503842cdedb75
+
+Cipher = aes-256-ccm
+Key = 4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11
+IV = a4974791d417d7e9eea0f4ae8d
+AAD = 33602f308f3a0f7e1c75fc1e4321d545ffa278234958dbadd37f59a0f85349c3
+Tag = 63ceb824708a20724c99c83f1caacd70
+Plaintext = 41712c058d2d56b43b2c79278e790858a289320746c15a60
+Ciphertext = aab5656a1ef060c9b1ef7e2f3cc0bda40ff0679004011825
+
+Cipher = aes-256-ccm
+Key = 4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11
+IV = 6003b771afe4e99e1ef1ed4a31
+AAD = f60d8362b2ebf523681bb051fd3ee13919ad86acd963c703c4178a5f01a84236
+Tag = a84e7af3116a18f7ce44ae93f420270b
+Plaintext = b766022311c5e1d74a607fec7cb8ee805b8397a6c5f374c1
+Ciphertext = f73b2a6dbf8f798d4bfb489a6578c9c79152e42aa3b81b64
+
+Cipher = aes-256-ccm
+Key = 4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11
+IV = 27861168ac731a223dc35c03e8
+AAD = b7ba1c66282cb6092ba601407ff9578afdadf7ba7a4d08edef06dbbfd87171bf
+Tag = 4009312bdae46958d844eca502bcb005
+Plaintext = 0822e3e6ba982091d532cd5271fbde25305d1f6e71880f81
+Ciphertext = 5ab3e5296cd1f08704c82f6b42939702515b7733853d723d
+
+
+Title = NIST CCM 128 Variable Plaintext Tests
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = e1de6c6119d7db471136285d10b47a450221b16978569190ef6a22b055295603
+Tag = 0ead29ef205fbb86d11abe5ed704b880
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = 98d477b7ef0e4ded679b0bc8d880f09823ad80e9732fde59c3a87da6a1fcf70b
+Tag = 5b85d144bb51d4927074d3536a2db83a
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = 28f32de10b6c9d3c3f46efec7aee24006208a54c4d1c2bba4b8cdce166cab7d9
+Tag = 01045de4a09486eea5efa33ecc6cd299
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = af397a8b8dd73ab702ce8e53aa9f0189995c6c9e920dcb75795149550b499deb
+Tag = dfd75400b59c3ad387bc86dfbbfb52ac
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = 3fa956bfaa27e249bf0a1276468d808259f3b8e2687851d780885d44cc2f04bd
+Tag = 2b11d2549b4e2f0a81c07ee90af4d081
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = babbd1b44cae3af06e0150bf0e3d898f6fe862b71ea9f6b727accfc18848fc79
+Tag = 10f76ab445f4ec158ccc1f7c6fee3ede
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = 7fba0bfda3b03c736c121cf9a257db55060b621be5168619ec4182f13ef6a408
+Tag = 59e02d6a6aa3fb2692b04e65a0e735da
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = 057354a29808f4ed77671ed3dc36f8b03f5cd952caac5cb80dc3b319f3333e29
+Tag = 367a2ade4087964dcb0ca2984d44657e
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = ec08b618602d091e9304715cb552b357c16fd1d7f7f023a28d84a98ba21ca0ab
+Tag = 47cb92cd40bc89328d4dd44fbd727032
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 2ebf60f0969013a54a3dedb19d20f6c8
+IV = 1de8c5e21f9db33123ff870add
+AAD = 45622834ea658b09b17f32777d18b34b387ef957bd344468f68e7178417a7c24
+Tag = f5185afb8359b5ef995483c0bc4192c3
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = 9c9b0f11e020c6512a63dfa1a5ec8df8bd8e2ad83cf87b80b38635621c5dc0d7
+Tag = 201784bdab19e255787fecd02000c49d
+Plaintext = 0e
+Ciphertext = 4c
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = 73616a428f1a567b2e9af86b1fc8aec6d597b1b55f2aa2219b3b662fa6bd3407
+Tag = f14519f06b63fac3d5b2d9bbfa0cb758
+Plaintext = 30
+Ciphertext = 72
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = 6d62f4e15e8bcc9ba4993bc50a046737121016f0d15020b90068250551167b1c
+Tag = 76b581a28ca0a0ba5178eba7fe028da6
+Plaintext = 34
+Ciphertext = 76
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = 8f0b8289a1834ecc2167b59ce3c9d3b58465c4cfaad50c728d04360cb7e5bc41
+Tag = d99b805c0a4785ff2913cab3e50f6205
+Plaintext = ec
+Ciphertext = ae
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = 477b2a6932f838f0d1bc420c0ca306981d8e2dab945b6f259e15fe888667220a
+Tag = b50e41cd7af84a8fdb6aee144e904616
+Plaintext = ec
+Ciphertext = ae
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = d6518d409b1f05708d0b44f18fb5721f20f3220f8d2f2718650aa9932e4579e0
+Tag = 12639c863974f077fe8236c943b464c4
+Plaintext = d1
+Ciphertext = 93
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = 865e7cde73b558e9bfd05356923f8a697970811fc484acad2d5b3528baf1f986
+Tag = d7265cde50bc7a3989458437baf06db5
+Plaintext = 24
+Ciphertext = 66
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = f0c3c67a935eace53ed32435655dd0974fafe283622e8294a15d70977398eae2
+Tag = 063144b25d2268063815d1b42ebbac34
+Plaintext = c5
+Ciphertext = 87
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = 341e71b2ef26e9db03882e06d06cde2c0617326cd157d5984d22f6f3407a9c39
+Tag = 7da45c10d0d6498716bcf3f13ca7e26c
+Plaintext = 34
+Ciphertext = 76
+
+Cipher = aes-128-ccm
+Key = 6ae7a8e907b8720f4b0d5507c1d0dc41
+IV = 7f18ad442e536a0159e7aa8c0f
+AAD = 31fce6735ba9a3385df11c153179b8e4141a3c6b8ad6eceaa211f3f17bfd0474
+Tag = cb0a6f562974cfb3fb7c8d5cafd50f2b
+Plaintext = 7d
+Ciphertext = 3f
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = 90446190e1ff5e48e8a09d692b217de3ad0ab4a670e7f1b437f9c07a902cad60
+Tag = db77c1f8bbac2903a2ec7bc0f9c5654d
+Plaintext = 4360
+Ciphertext = e38f
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = 6bc3d30925c67371573271f1a4273ad76e91e07dfab65f7bce0b241b5e4cd00e
+Tag = 55210d62e1393e4fda647c2b2e59a47d
+Plaintext = 17c6
+Ciphertext = b729
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = d1bb4cdfc3f2c16d92576068543692aa4b5a427d688387af0f1583e91a0e8b3c
+Tag = d54fd88a47b9f6e39cb4606af86d13e8
+Plaintext = 6575
+Ciphertext = c59a
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = ae6136df9ab43631ef143515dacedbe759b3459e951bfaf4712a21c86352f1c0
+Tag = 6de841af64b55bb7ebe3fd30ba493c7d
+Plaintext = b1dd
+Ciphertext = 1132
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = ffead34ac26e21158212d07c367c3a7cb6b795887ee2d3d8ae25c60556ea88d3
+Tag = 3a206339de534271f6469edfa5ed07d3
+Plaintext = cd16
+Ciphertext = 6df9
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = e768e7d867820d46c1cc62ee0e51d4dac6f5c4b5785b5ccfbf05236871bdce2a
+Tag = a8f65144f2ec5809e2ccb38c8760f7bc
+Plaintext = 12f5
+Ciphertext = b21a
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = 402e802885e4119df17fe85f141c3d1af7727fcdb00f8e2c34e42a436d04ac5b
+Tag = 9af825957abe7d89e175b6e8c0b84b5f
+Plaintext = 39c0
+Ciphertext = 992f
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = 8a3a622b3d347c0c5210d484adf77fa33205ba02224ddceea71d89c9ad8429ae
+Tag = 25d6a12e91e84e355934547f6b5dceb8
+Plaintext = 912f
+Ciphertext = 31c0
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = 636114e5e5f83cec94e1df21d6babb9f6a14a532fcbfc3bcf649fbd79ac1abbb
+Tag = 6db959a21e9e4ebf25ca4f98501b560d
+Plaintext = cb6d
+Ciphertext = 6b82
+
+Cipher = aes-128-ccm
+Key = 3d746ae6cac5cefd01f021c0bbf4bc3c
+IV = 597b3614ff9cd567afd1aad4e5
+AAD = 04e84f9156998c2eca9e96079a6001f2947dc49a081b3d75e47d75f71ed4a606
+Tag = 2006ff22ff231a6646ae561923818a21
+Plaintext = 5bd2
+Ciphertext = fb3d
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = 00d57896da2435a4271afb9c98f61a650e63a4955357c47d073c5165dd4ea318
+Tag = 57bfc5f385b179be7333eb3f57df546b
+Plaintext = 3a6734
+Ciphertext = 384be6
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = 50f6e6dd57bd3a24f6bfdc8b1c7b5a36ebdd07fd6d194e6e82da47151d9c88fb
+Tag = b8ca97bda492546d82dccdebef441f8b
+Plaintext = 4ffad3
+Ciphertext = 4dd601
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = 70e132023acae1f88c7a237b68f5bdce56bcfc92be9f403d95d3bcc93b4477a9
+Tag = fa0f3e397d9a580aa39c7028e1a508c9
+Plaintext = 8a594b
+Ciphertext = 887599
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = 08d2b011f36e05dc728c1a8bda3d92c779a3d2f27c4b041810bd6222c852b14d
+Tag = 593460d335e2f7a6d40b8fe305b0f690
+Plaintext = 1f89df
+Ciphertext = 1da50d
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = b207eb870aeeab27c6201ef04650bdc7ea30028a243420f7d198f1c9c9a43023
+Tag = a2d49e1a113767ea4219107819d88b65
+Plaintext = 72e9c1
+Ciphertext = 70c513
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = 74294088721fc9e7aabd5f1c66b5369b1e2d2cdb3e73abaa28ecd1c37d4ecea2
+Tag = dab1c819778be8453db163c882063af8
+Plaintext = 016083
+Ciphertext = 034c51
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = abbd347999a1c26368cdb17ab08bf57a8e942d1248296e952f5f42f2cabbf0e6
+Tag = 537eb435df8d0e48c3f7e0bd1877c866
+Plaintext = 25f665
+Ciphertext = 27dab7
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = 231b33dc406c9210f59a5df1cfd595c803474db34b9b1848f0bcbe7b28df33c2
+Tag = da549fc63d55b5910bbbf64435b95220
+Plaintext = 158606
+Ciphertext = 17aad4
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = 69b851e63a78baef90637978e3dfe8c47be4b21e85bb89bf67051cf251004376
+Tag = d5ee29fb2af47f8040fad585921057f5
+Plaintext = b07452
+Ciphertext = b25880
+
+Cipher = aes-128-ccm
+Key = 3e4fa1c6f8b00f1296956735ee86e310
+IV = c6a170936568651020edfe15df
+AAD = 9b1f786c887d310b8efd3e8192fe504f603024c94aaa4ec9123736a40bf1605d
+Tag = bc3ee43e10205f83143e0d3794a6734c
+Plaintext = 65187c
+Ciphertext = 6734ae
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = fba1d18a74a3bb38671ab2842ffaa434cd572a0b45320e4145930b3008d8d350
+Tag = 35c4dd96e83d5ab4c3c31c523453c317
+Plaintext = 4cabeb02
+Ciphertext = 32501f42
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = 78b3faecb2bdf6ed14ac2b86ded07aa791b60f5d54f9e24a965a8453f5131898
+Tag = 7907d6a03e66403a7d9330d30d934a8d
+Plaintext = 5ff73653
+Ciphertext = 210cc213
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = db1239528eb464dd063e2a97ee83a87d6002ebb4fbafa77036f72c14f3fe959b
+Tag = 44f4bc78fbb969935076134437df82b4
+Plaintext = 062fa9ca
+Ciphertext = 78d45d8a
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = 0071f1edb3a0ce57af3c88bb0ccf138f752697a77e55695838fb39de04c78dfb
+Tag = 59692911fea2e0034d06c3b2e89af3d1
+Plaintext = cad710b4
+Ciphertext = b42ce4f4
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = 7381471a62b1fa6f5061c4c37e9721f07099d007ffaf8639aa2ae3f82da5a559
+Tag = 68484e22381923bfcaed16e0cb85b0f8
+Plaintext = 7ac716b4
+Ciphertext = 043ce2f4
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = 19bea6d92d5892216e8e4a30dda802387800bb046a6717817fc46c7edafe17b0
+Tag = d081de39c247df309c4b56c31c03690d
+Plaintext = 362da02c
+Ciphertext = 48d6546c
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = 8503c8eb9cebc6110f259e35e03a0740267768130ce6f61b1c7d1d25be942274
+Tag = c6c6bd7b3a9d7c4dfa2738847ea3cb33
+Plaintext = de52b209
+Ciphertext = a0a94649
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = d2445db6efecaa3f426b06de8d496ceed54a1d0171384cc762e21b31e265c6d5
+Tag = 2ca874d18d0b790856837555f4d4699a
+Plaintext = 8fe8b383
+Ciphertext = f11347c3
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = 8cda7d1e135cf5fde1ec9473c4b42c1bbb445c27fd87b5f73df61ceb2d0b6f75
+Tag = 932c2f8d78e322aaffc90846025190f1
+Plaintext = d8d6b2c9
+Ciphertext = a62d4689
+
+Cipher = aes-128-ccm
+Key = 7ccbb8557f6e08f436d0957d4bbe7fdf
+IV = bb8e2ef2ed9484f9021cda7073
+AAD = b506a6ba900c1147c806775324b36eb376aa01d4c3eef6f5a4c25393ecbf2025
+Tag = c346a4084918081b4bbe53b50d896788
+Plaintext = 6a029e53
+Ciphertext = 14f96a13
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = 11bc87f1c2d2076ba47c5cb530dd6c2a224f7a0f7f554e23d7d29077c7787680
+Tag = 2066751af249d521c6eaebdff40b2642
+Plaintext = f5499a7082
+Ciphertext = e378b77624
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = d54219ef4fb851bebd1c546011ae3922b8337e19c28d4d58428efd66f80edcf0
+Tag = e7258df363e0e9af67a543c86db3c994
+Plaintext = 513c46fcce
+Ciphertext = 470d6bfa68
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = a92e88edd297da8c7089e21822b3e6cffd6837c78b975c8413fd6cca1b99bcb0
+Tag = 72b7573e5b27a1d0e15cdb7b06c8857f
+Plaintext = 9d62e557c3
+Ciphertext = 8b53c85165
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = 77d9c306aa257379053cf1f2043c388a301dac2a9e2bb89eb8bab6eb3f150fe3
+Tag = de691a412ad54bbdb6ceac45ed45902b
+Plaintext = 7a05db235f
+Ciphertext = 6c34f625f9
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = 081568ae0b948aa647b9d4dda5d42641ad5de72aa9874d8d0717d872007720a8
+Tag = 8a1bb8ba3d6763dcb1bdd3400e3459f7
+Plaintext = 30a22ca0fc
+Ciphertext = 269301a65a
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = 695ba4dea0f84baf190ec25a25fc00cb9898902d7a17e6f5ff2df323b974f7c4
+Tag = 403897d496cabcd5bd9de3282199a8ed
+Plaintext = 35e25aa51f
+Ciphertext = 23d377a3b9
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = 1f3ba0336a634efdd11f8168c0fe25039f9403bfa70b3898f4dbe577dbd52957
+Tag = 70a81f7cb0ab7ab2b495f51d66abeee5
+Plaintext = 8bde704c74
+Ciphertext = 9def5d4ad2
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = 097b9ebff3ff93a143678d59721fdf359e95cbc82585ae47727a773317925d38
+Tag = ce68e9b01a4462a2221bd2f3cadf64c0
+Plaintext = 428542ecfb
+Ciphertext = 54b46fea5d
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = 76d0341dd44c39e43a23dbcf4cb602f15d5fb9fee20c3d0d262d539c3fd1dfd5
+Tag = f2545964ef3978cad3387d61104bab84
+Plaintext = bd6866ded0
+Ciphertext = ab594bd876
+
+Cipher = aes-128-ccm
+Key = 3725c7905bfaca415908c617b78f8dee
+IV = c98ec4473e051a4d4ac56fd082
+AAD = 7e7c40ad64b511005b4546f9ec61ca24829390fbc4bd8507225bc348ae0807d7
+Tag = 002c41938a935d51905b2a708a2c5194
+Plaintext = 5822755a3e
+Ciphertext = 4e13585c98
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = bb4e706e73d21df66f64173859d47e247527cd9832e20dccff8548ed5f554108
+Tag = 8427f36b1f6c633e4542f32b50ca8edb
+Plaintext = e479990bf082
+Ciphertext = 89c924623887
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = 9db2182c8a4f5471082bfa1a8496602cbcdef2790f7e8f71f791303bd48dcb05
+Tag = d76fe54da69af5edf8309c7f013bb07e
+Plaintext = 017a7fd1aecb
+Ciphertext = 6ccac2b866ce
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = bf483f59fb73681f27b68168c998c90ea8ceea997654c6fab2bd737dcdc884f9
+Tag = 662f53d17f7cb6673415bb2324ca0666
+Plaintext = 512fc5e4973a
+Ciphertext = 3c9f788d5f3f
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = b91e641d8210e1ef705fec2beb9f58a391c7d1a38935cd1d13f2c00363388ff5
+Tag = 40c86156b1065b64af1e4d6c89b32603
+Plaintext = 06212e989616
+Ciphertext = 6b9193f15e13
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = 5cebf908e232d797fcce8453c4c3000868d4172622a4ee0d6a1bdd876a0b7c96
+Tag = c07ef5349903b928e39e99e2e32625de
+Plaintext = c45629069ebc
+Ciphertext = a9e6946f56b9
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = ab92cbc97f3aa6f9ea4dae5d8c3d9e91231f43ffff548da7b668e61c183ac2cf
+Tag = 5e40654ea16e83cc6faeaad668c416f3
+Plaintext = b949ced37725
+Ciphertext = d4f973babf20
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = 2c3d2f9c7e89c2b9e07317c4db6e9f00f5faadfad531c5bea79d164ac24d4543
+Tag = 3102a502dbba0c280e1d5fc627fe3a9e
+Plaintext = 517ff7b383b7
+Ciphertext = 3ccf4ada4bb2
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = d798e77ab0f3697768f23014fd31b9e8762ae65b6aa8a4bbc17ecb8cbe78461f
+Tag = 6745fd4c954396e696697731e1f9a262
+Plaintext = b40d863ca4ff
+Ciphertext = d9bd3b556cfa
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = 45b44e3dec57e24d960fd1767797ffdbbab81e38bab37e6974df262c3d932327
+Tag = bdf2b2dd47077c98234eae5d47c3b594
+Plaintext = 56e00289a003
+Ciphertext = 3b50bfe06806
+
+Cipher = aes-128-ccm
+Key = 80bead98a05d1bb173cd4fca463b8fa3
+IV = 8a14a6d255aa4032ebff37a3d7
+AAD = 645d27970ccce096d082fccfc1183955bad2611af0dd7c58c9d54430f28bd992
+Tag = ea66649ad7e204a344d3234125aa324b
+Plaintext = aa22bb1de579
+Ciphertext = c79206742d7c
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = 6d5573c9279897d7d1602d8a95c04bb5ca3fad2dbe89a024b3651eb227e73bb5
+Tag = a852a7c4358dfa9f5467357638acac90
+Plaintext = 2a5775986551c8
+Ciphertext = 4f259f2a718fae
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = ff0ab5021ef466e2e898b0993d691145168be558682c74914c172f2b5e863754
+Tag = 8767c76e707d48a2144e090812e0192d
+Plaintext = 8db3c1ca0580f9
+Ciphertext = e8c12b78115e9f
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = 2ee03cc28f79773af139c4ea55ec4daa48bb2885b8adcd5f066eceda5c4ec27b
+Tag = 5486df740083c959fb62ef7e2e221602
+Plaintext = 3c69e2e83236b6
+Ciphertext = 591b085a26e8d0
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = f041504d4c1b3d5be358bd6d350af42921205d29ab22b44ffe221358adef5bb4
+Tag = bdc4d2b86b2528f75db4a7f5423f4395
+Plaintext = 777828ab5ccb68
+Ciphertext = 120ac21948150e
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = 81ea116832d69542ac8d3d22c16c82eecf2ccac39264dd933c4f9c13c8d0f1d4
+Tag = a7b06d1b710baa15daef19069ecf46f0
+Plaintext = af556fef3584e3
+Ciphertext = ca27855d215a85
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = 8a0a120ed290a62456f002da1c250a0ddb1ebd57185a733d8fb562aad482679d
+Tag = 3811129add52e1406d50cbff4aa82802
+Plaintext = 98f26635351f14
+Ciphertext = fd808c8721c172
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = 12b5a76faedf6f855e328c2cb87be8aea78c5e926b32d828e167b46205c86de5
+Tag = 1563d3da8a6cabb7515f642e42fb4b2e
+Plaintext = bd22c1ec05dc26
+Ciphertext = d8502b5e110240
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = 8dc32f35ef4bcbfd040ad25dc36d0bd2486f93d0cabb7704cd1582dc99f65449
+Tag = 17609a21f703253e5e56beef4ac71759
+Plaintext = 2a87c0d64806fe
+Ciphertext = 4ff52a645cd898
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = 83ced632359a11eb0c4c99baad84df5cac15bc5453b6593d9ffb4c5e8c84037f
+Tag = 236c72f98da859b54be7c598d85c37eb
+Plaintext = f05f39eb0a3d64
+Ciphertext = 952dd3591ee302
+
+Cipher = aes-128-ccm
+Key = dc8ec91184ba18eae31ac2d3b252673f
+IV = 0da4c988f521f5648259f2bec2
+AAD = 771a818a24e7da7b98f4b4291ef34bec7e1656b0c6c6e9474a989a04ea7de385
+Tag = 64c8cd38cbcc46e7f09bf3e1c6590c71
+Plaintext = 59dad755af92c2
+Ciphertext = 3ca83de7bb4ca4
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = 85853f120981f33cf1d50fde6b8bc865fe988a9f12579acdb336f9f992b08b89
+Tag = 2563309efc19368cdee8266538ca89d3
+Plaintext = 6d972a673fbe1ca1
+Ciphertext = 2f12a7e7acecae5d
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = a4ec5aee89e2cce2115b6c1f42570bc5062887cad08192a682d0b4508fcd936a
+Tag = 28096a5fec5e5359c369833eac3b7efb
+Plaintext = 68b1b6367a15fe49
+Ciphertext = 2a343bb6e9474cb5
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = f5499a7082bf1e6e2923211271f5f7f6d7c7b26db7963071705a58ddc4dca0dd
+Tag = 754a65863efb60c98dbb536e2b5a69d8
+Plaintext = 707023615563a40e
+Ciphertext = 32f5aee1c63116f2
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = 765f267befe6fcfaaa4b46eda32e7bfab87f12ceb07fa3b37be74965bb664a21
+Tag = 0b6e9b7f3b3541ffee66a1f668f67d28
+Plaintext = b56454bc50df3e28
+Ciphertext = f7e1d93cc38d8cd4
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = 9ce65598cd1f86afc9aaaf172809570cc306333c25523f863c6d0e0154c55e40
+Tag = 7018c9db8baf6be349d93d4eef7d7c9d
+Plaintext = 962f765da3565bde
+Ciphertext = d4aafbdd3004e922
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = d0125e30c36232a8c07cee9abc53453b276849a7c04ade80ad586ed8cbcede51
+Tag = 501b28887f05fd66f050525943d101f8
+Plaintext = 4f18bcc8ee0bbb80
+Ciphertext = 0d9d31487d59097c
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = 90dfd9e7bb7bf8fb70c22a879ffa760d14cda7b79ce4968f69b8a7f2b7a59642
+Tag = da53dde2e1aef96b3658a7635ee54188
+Plaintext = ca293c9e1780b401
+Ciphertext = 88acb11e84d206fd
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = 58f518710e6b282482a7f1950fa353b13bdda10c9aaea6d5f0d7ea0a965d31e8
+Tag = b62a5ec234f1efd1b52c8fad1cf09890
+Plaintext = b9df9fb4a6b299b4
+Ciphertext = fb5a123435e02b48
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb07545e6802de7e807
+Tag = bc051ede6f37cf67543a7252d7d9b203
+Plaintext = fb2441d1594a488a
+Ciphertext = b9a1cc51ca18fa76
+
+Cipher = aes-128-ccm
+Key = 19f97ef5318b8005fc7133fa31dd1236
+IV = 01ce9814c6329dbee1d02b1321
+AAD = 0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c
+Tag = 5be4be6bc6b18104fac167b6e3fc15f7
+Plaintext = 451101250ec6f266
+Ciphertext = 07948ca59d94409a
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = edf64f98b3ab593cbcf68ab37a8c9472e49cb849d4a744deae925a5a43faf262
+Tag = f8ee4a233dfb7753f6bfe321b3e26959
+Plaintext = 7caae2640e734539d3
+Ciphertext = 0dae8b3ccf0b439f6f
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = 29ac8fd6a20a5df4ec79660c44d373da42de7d7c5fc35982b6c29b480723b484
+Tag = 63b1477d9506a51ae23abbac179d8b02
+Plaintext = e574b3a37af3bf2251
+Ciphertext = 9470dafbbb8bb984ed
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = 9ae5a04baa9d02c8854e609899c6240851cbc83f81f752bc04c71affa4eed385
+Tag = db0986198bce2e486581c041029a81d9
+Plaintext = 2e3cf0af8c96c7b227
+Ciphertext = 5f3899f74deec1149b
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = cc8e789462879e348d20be4e1161d7b7fc6f8371d8f8cb2d25d13f0e07de47b0
+Tag = 0cbb2df2079a6eb964c3469f4f326122
+Plaintext = 16f22817c5b79f9fa6
+Ciphertext = 67f6414f04cf99391a
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = c63061f2800228269015693336f78bb535ae8b88869e4ccf4ead2f3b0ea4e48a
+Tag = a40ca7622acf7266b7c24cf0c3202e4c
+Plaintext = 64fe8076d4e8538e18
+Ciphertext = 15fae92e15905528a4
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = 71c14a7031033db15bfe23b75fed9daf8886dd11392a0b787660e7b1a581af11
+Tag = 7de20e98586cd5d684bf015a7abbe82c
+Plaintext = 4814aaac48bdf43c92
+Ciphertext = 3910c3f489c5f29a2e
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = 8f4947f8588ed866ed7477d7f1a28046430c6470806a50e3c9e80958c61f1b42
+Tag = 8d503f5d87818f7c0e173b857cef4288
+Plaintext = 392a692b57a8a97f60
+Ciphertext = 482e007396d0afd9dc
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = 9d44f6df58c2b43db67e3daa95b176c81daff32e996d670e86405e15eae72e93
+Tag = c85e2283d9e80700268a6459d1451d00
+Plaintext = cba1e00e345b0cb7eb
+Ciphertext = baa58956f5230a1157
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = b6ada12f7a28211e9d2c07cbb3d39fa77aadc077b34c46f93006c1ca2ff66f87
+Tag = 1056aea3d3e4f7a5219170aaa52465e1
+Plaintext = 22f5b6752582919dc1
+Ciphertext = 53f1df2de4fa973b7d
+
+Cipher = aes-128-ccm
+Key = c17944bfaeeb808eed66ae7242ab545f
+IV = 910b3db64df3728ca98219e01b
+AAD = d6411fd5b25433f67ca75e4560ceb809d3721266beec358dde126b2f6a514137
+Tag = fbfcf8200a8a3f8d995f50284a7280c8
+Plaintext = 6e1b55d6f5288c5451
+Ciphertext = 1f1f3c8e34508af2ed
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = 4f9938d5bc3dcbe47f6b256d5e99723d0891e50c6175aba41b011e4686113c49
+Tag = 4cf0d8c24189affd35060cb7ca3dd136
+Plaintext = e10cc36bc1c5d3c646ab
+Ciphertext = 7f797367de50be6dc04e
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = e013a2edd5b86bab8df5c9940d0a0c864478c1ad42668304a643141855adac10
+Tag = 4148ef85caab151488c1a6b3df540d21
+Plaintext = 15841284c959febe63f9
+Ciphertext = 8bf1a288d6cc9315e51c
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = 147d77d509f642189594df17574a0ce62b52a838feb62310e11533995ba4c851
+Tag = daaa1e7c22b3efa8362abb3d31ee8884
+Plaintext = a8b4e5829069c335d1d8
+Ciphertext = 36c1558e8ffcae9e573d
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = 0bb09658e23fe8a08c01a6994ef36cb8dcc9a806297a09c67efe3558ca56bb5d
+Tag = 317b141383ad38dd78569d5f846f2520
+Plaintext = 1bb2da0f1ae7e044deb0
+Ciphertext = 85c76a0305728def5855
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = 34eb2e6149bad764837f6f25ddd96865e5b05d5cbf233c4f6cc2aa654dfea3b7
+Tag = 4e6432971aecf6bf7cf5244d21f7f173
+Plaintext = 63af538196add9b3fad2
+Ciphertext = fddae38d8938b4187c37
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = b69f26fda6d1cd92897e03758cae020c4e1beb019ce5ad987f872940780a9468
+Tag = e4d0ffc0f0add38a80c7ffe6b4701e54
+Plaintext = 6ef2df5a1688ae795537
+Ciphertext = f0876f56091dc3d2d3d2
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = a7375ba32251af0138bd9fd8fcd56a7c43ab2ca9a7fc0117d25f6d4ef9c2fcbc
+Tag = 47fdd0b2f29f39094ba5a7375e278349
+Plaintext = 3f46c83021069ac488a1
+Ciphertext = a133783c3e93f76f0e44
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = f9b91f7298b4e43843fc739a2f41c57c3f2cf36378fe4c34b574a43f9cedee7b
+Tag = 57500f913ee3f46801e1bba9d4db7ecf
+Plaintext = 86c10a6dfdd6a06ef638
+Ciphertext = 18b4ba61e243cdc570dd
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = 9d35876d9449a1642b5062dfbfc7a26a7ac080b7198f4aeff2c79e463565cfd2
+Tag = 56a6b87519b4807a2114ced587f72189
+Plaintext = 196c80d02b663bdd89fd
+Ciphertext = 871930dc34f356760f18
+
+Cipher = aes-128-ccm
+Key = 0fb9df6f638847f5de371f003dd938f4
+IV = c9ddf61c052f3502ad6b229819
+AAD = f2d5e927eb507f889efc6f21d783851f638f978c74960cc347f89f2703476114
+Tag = 2101012808adefe9b8166e04685bd537
+Plaintext = bd27ae3ade0781a33d5f
+Ciphertext = 23521e36c192ec08bbba
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = 7d9681cac38e778fba11f4464f69ed9ebfea31b7ffcaf2925b3381c65d975974
+Tag = a625c43233476bbb959acd9edebe2883
+Plaintext = 31be1b241cae79c54c2446
+Ciphertext = 9dd8a4244fbdb30b624578
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = 1b0012c468009bd2851653013782c7b71ef43c393afd4dc0aec4d6d0c3fa11c5
+Tag = d477ca066ec2befa854a1faef018ea8b
+Plaintext = 8802831e22092b30110cf7
+Ciphertext = 24643c1e711ae1fe3f6dc9
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = 48b216375c00ca7e9c4048834b37944d2543e24fa091fb3c7290e11c53a6b6a0
+Tag = eb6be9a78dfbd9e16181679b782969ad
+Plaintext = 3b3f782d637319d7fd161d
+Ciphertext = 9759c72d3060d319d37723
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = f3e06a45fcf1f6abeb00727bf2c9bcea00ce621d38f7b7eba17c27e51f04c793
+Tag = 3d9574d95b821a5170e9b61d8e6b2ff3
+Plaintext = e98f5e5a20d02c80372d6d
+Ciphertext = 45e9e15a73c3e64e194c53
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = b36e27729f9a139d8ec4f61215b7bf1149cbb4d93a5c14bebd7cfb7c6fe585cb
+Tag = aa193d257907be1330abaa56bc4f431a
+Plaintext = ceeed4fde3406ec40f7ac6
+Ciphertext = 62886bfdb053a40a211bf8
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = 8886ed7fa414d74aef704a9751b197cbab02c41c6aedcaf65cda019dc2d2d815
+Tag = 1d92029a6428748664b5c815f15ca1b7
+Plaintext = b38f03449883773135c0cd
+Ciphertext = 1fe9bc44cb90bdff1ba1f3
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = 816d81af167d2294497d9b06a39fdf75e37cbacf4d10c3a444068c891b361bba
+Tag = 386e4ad7c72ce0081a85d4cfd34254c7
+Plaintext = 8efb141db7b77c521003cf
+Ciphertext = 229dab1de4a4b69c3e62f1
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = f427c47e10c45bb3c7e75e9e604503b3560427691470358efdef48ddaf3794d2
+Tag = 98eeb05bc376a1042735569d5b63f8fa
+Plaintext = 6dc38e37d1379732df4dd5
+Ciphertext = c1a5313782245dfcf12ceb
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = f3df712b5e8dd8e4aa8b7c5f41e93bd11b0df66a3456a01f3d0094ad91482cdb
+Tag = 065b03ebeb68a9153cb4ed152ce0d64c
+Plaintext = e0e358aff203369dd5960c
+Ciphertext = 4c85e7afa110fc53fbf732
+
+Cipher = aes-128-ccm
+Key = 006ff7d3153caf906ec7929f5aef9276
+IV = 57db1541a185bd9cdc34d62025
+AAD = 264f2c7b095a296eb8ff6b5151ab3d9497ea8dc0002a9e5b09c2fd0ccd32b6ff
+Tag = fcd16c8360a408e2787f930ed275bf3f
+Plaintext = 57b940550a383b40f3c308
+Ciphertext = fbdfff55592bf18edda236
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = 26e011143a686a7224ddb8c5b1e5d31713fa22c386785e2c34f498ae56d07ed5
+Tag = cb56a9c1a1c3bb16fbb9fbaedacdb12b
+Plaintext = a82200ef3a08c390dec5cbf9
+Ciphertext = adf4fc6f9be113066c09248f
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = 97a720ae4720546e31263a1a538ce1d35c198c23bd4362e0023a67536328ab9a
+Tag = 002120b619a391fbd23402e5edd4949e
+Plaintext = 7fc58d1bb450b396b9161f53
+Ciphertext = 7a13719b15b963000bdaf025
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = aff6c8cefda055c67262e9c68825d1ad2a7488e5b09640a111fabf6254d96cc0
+Tag = 48b6e9a8de0099a28cebbf5c2bad42ff
+Plaintext = e9ea182d7f895f312b9738db
+Ciphertext = ec3ce4adde608fa7995bd7ad
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = 35a3963b43f47855ef3df12af5de3626e0c5c8d9cd2a534c737cd695609b05a9
+Tag = df80fd62e751757bb0a32a987980afe6
+Plaintext = cfbc8bcbb5e5bb744bb1f340
+Ciphertext = ca6a774b140c6be2f97d1c36
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = 46a2e6bd3fd5336abf02eace3cd1e1f6dde505ab976a9fa596edd6fbde7175de
+Tag = 3b211350c70adf9bab5c01081bdc6a99
+Plaintext = a334f8f41897cbcaeb5cffdf
+Ciphertext = a6e20474b97e1b5c599010a9
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = d110651c00ac5540f9d1ed9eb175e06b97163fc36d43f048565e5d0c30a069b1
+Tag = d7f65690d9a2fb6759d658c9bdfdfc37
+Plaintext = 3f781267290e8e73c6355e75
+Ciphertext = 3aaeeee788e75ee574f9b103
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = 978644dc4e36f1d98a2a63e19bbf8af11785d09fce58a95c00cc6bf6cecf6161
+Tag = 0d5df472f49e7f713cd1373293810906
+Plaintext = 3dc39dbb91efe8b16396d488
+Ciphertext = 3815613b30063827d15a3bfe
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = 5ae7528c5e965880b1533cbd78c1e81a8187379327a2fc3f76ff45829049e183
+Tag = 4bfca9ef00b0f2bbb03c1a3f7a0862e7
+Plaintext = 6caa8c0764512baa39dabac0
+Ciphertext = 697c7087c5b8fb3c8b1655b6
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = afe754828be6e3731d3eee54b021b4fa182247bd958e9074fb0094a11030f5e8
+Tag = a03be1d1d262b03c0ab425d533fe4ec1
+Plaintext = b19bc92e2305883580dd7742
+Ciphertext = b44d35ae82ec58a332119834
+
+Cipher = aes-128-ccm
+Key = 026331e98aba9e8c23a9e8a91d0b0c97
+IV = bccfe69bba168b81cbdf7d018a
+AAD = 0650859c635654ca4d815963c0a99f9d2f47456ad37f739c425e924d4360bd7e
+Tag = da61ca8461925996880e2874393232d6
+Plaintext = dab87e79544df1cc98096b91
+Ciphertext = df6e82f9f5a4215a2ac584e7
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = 0eff7d7bcceb873c3203a8df74f4e91b04bd607ec11202f96cfeb99f5bcdb7aa
+Tag = a6f73242f2f227350c0277e4e72cdaa6
+Plaintext = 4b10788c1a03bca656f04f1f98
+Ciphertext = 89f15b1cb665a8851da03b874c
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = a533b3279db530eaed425842b0d3528f5c5e4c16acfa0f49de43d6491f0060a9
+Tag = 94271cc06f81d510075728cfeb89222c
+Plaintext = de6ea86d3641d916c4394fdd31
+Ciphertext = 1c8f8bfd9a27cd358f693b45e5
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = 8e6c1cde142e18635c1b4f0cb54d3cf817f22ad7c25bf6a022501682f6a7da1c
+Tag = ab1aefed75400a41447b2bd8f0605542
+Plaintext = 6f3b32adc8c0314872947f3d31
+Ciphertext = adda113d64a6256b39c40ba5e5
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = 248a4389da2d51b87907dc11c46253515503ba80de5d06c9b505cb89906614a6
+Tag = 46b3a6463876f1a43a287748f339e913
+Plaintext = 0cc992a8c736b44fedb4ad498f
+Ciphertext = ce28b1386b50a06ca6e4d9d15b
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = 2e2c8244a2cbf53816b59e413207fb75f9c5ce1af06e67d182d3250ea3283bcb
+Tag = f625786bdc58af24b17c1ba34fa87baa
+Plaintext = 98104fd3f3413ad1f57ef4912c
+Ciphertext = 5af16c435f272ef2be2e8009f8
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = 4ada86d88d5f49dfcde13fc30ba9a1af58d5254b47fb1885a20fad915c87952e
+Tag = d4a918290cf97208232c76908514b07a
+Plaintext = 3b4fec79d52d8b2a533917b75f
+Ciphertext = f9aecfe9794b9f091869632f8b
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = 9e3b23232e5a9e69747f8bcb148cd6d282fd9b7ecd6d97e8bb5cdc261b2fc86f
+Tag = 01d6306bb91c315bb4a23fe23d496d09
+Plaintext = f10c19c76ae7ed55e1651155df
+Ciphertext = 33ed3a57c681f976aa3565cd0b
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = ccea2c815ea4efadc3007f511d633e98f9fa38b0e0fb572b282ed6a610adf7a9
+Tag = 620d9d3004587c5d510e2a857fc857ea
+Plaintext = fa34af376868d9a49aa200f59a
+Ciphertext = 38d58ca7c40ecd87d1f2746d4e
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = f7277fb296e2c0d2c9ceb7013ea8b59fe37e26b3b42a0b8cd01aaaa8d35283d4
+Tag = 82d2438a5138977bde5f514e2335c28c
+Plaintext = abe2fd996bb6804ed3286c057d
+Ciphertext = 6903de09c7d0946d9878189da9
+
+Cipher = aes-128-ccm
+Key = d32088d50df9aba14d9022c870a0cb85
+IV = e16c69861efc206e85aab1255e
+AAD = 14dd1810df3eeee78ed3836c77edf510d91ea28f119bf57111e580d70da94b74
+Tag = 78100a05448fa6e74bd3ed16c3bd364e
+Plaintext = 395ea6979b77dabd2042aee4ff
+Ciphertext = fbbf85073711ce9e6b12da7c2b
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = 2c5d114eff62c527cc2e03c33c595a80fe609bfc0fe13ce3380efe05d85cceac
+Tag = e8eeb5d5b493661259a9d91ea31a5f7e
+Plaintext = 484300aa3a506afcd313b49ead8d
+Ciphertext = 928ca58b0d373dc50c52afac787c
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = d9ebc1cbfab9034317132a72e0f11c341331146a59e7a2f26bf4f3d778da52c4
+Tag = 552193439abfedda67d765d030cef30b
+Plaintext = 8b318f75ed79a7978adc17c4d2d4
+Ciphertext = 51fe2a54da1ef0ae559d0cf60725
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = 9aea86b9fbd9bd4504ee2e25054942b33d3cdbd84215db7ea337e548cb706780
+Tag = 15013c2bc9338868fad0d2fac11df019
+Plaintext = 0256b0d154c768c85070da6ea8c7
+Ciphertext = d89915f063a03ff18f31c15c7d36
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = 08afe10bbfbd65b948a6561bbeaf3ab46a8e3d0a861f1cfc46584156197f30a3
+Tag = 6c3c4cb8c50891d6523245e4c619aa99
+Plaintext = 89ed296a3ac03fbfb71422b92117
+Ciphertext = 53228c4b0da768866855398bf4e6
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = 7d653792bb8683e07c7d2c800db6f7f08343c85af2377115df4fc86ff7d8fcaa
+Tag = 792d2cb93e45811a4c897ae9d907c9cf
+Plaintext = 414b6acb1db479028f5cc8800f2b
+Ciphertext = 9b84cfea2ad32e3b501dd3b2dada
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = 4d73c1484f9429eb15742f29ab05cbab6552abf40e127b93427d649d195ed25a
+Tag = 1983a87812eaa7b66c5a0e54a01cb882
+Plaintext = 163f67b3766c3c650ce26c5bd8b5
+Ciphertext = ccf0c292410b6b5cd3a377690d44
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = 2fba7a881f019a8745691343d79ef3656e25bb37b93fb5ab7311889f92010a5f
+Tag = b0afabd23b33765a63753cad66b0e6db
+Plaintext = 9c5b4aa703c27d16d82013853e16
+Ciphertext = 4694ef8634a52a2f076108b7ebe7
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = a640343fd4a866aec07b667d25176e11a32fb4d8bfc08fde2c46dc9b492fa010
+Tag = 39b8d0f97540373a7b9061aa3b2f7044
+Plaintext = 99eb86b3202c7ce68a2339065f47
+Ciphertext = 43242392174b2bdf556222348ab6
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = 9efd58d3ef5f74f663b2b5ca5e96c5a2fe85ca5eac1495d7f1751c7d8b412b3e
+Tag = 312c803e29f7be7c5eb236401037a320
+Plaintext = 3f5c1d038161e65c9ed955c961af
+Ciphertext = e593b822b606b16541984efbb45e
+
+Cipher = aes-128-ccm
+Key = 7301c907b9d2aaac355c5416ff25c59b
+IV = 7304b65b6dab466273862c88b9
+AAD = a7d7ba684c0903323f7efc83dc32815195df325394162fb5a18f201047be7999
+Tag = fd929c717d75388387dc25bfcf90b707
+Plaintext = be8dea2b4e602a787ecd28f2f7f0
+Ciphertext = 64424f0a79077d41a18c33c02201
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = c6de3be97f11d0e2ab85c9353b783f25b37366a78a2012cecf5b7a87138b3c86
+Tag = 5e902f296dcce870263ae50cda4fadae
+Plaintext = 61bd1385be92097e866550a55278f0
+Ciphertext = 7c9fa8d99b38f825315ece6a2613f5
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = 7c8cf9c650511f33af82e807e60336ec086bd2d9400a5f35652b8c3fcf968ead
+Tag = cae8a9e4b606f5fbeac2b829b42a150a
+Plaintext = 7e5e51301fa44a21f2734731ee3710
+Ciphertext = 637cea6c3a0ebb7a4548d9fe9a5c15
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = 5f8b1400920891e8057639618183c9c847821c1aae79f2a90d75f114db21e975
+Tag = f5419c6085e5434f056162cf80f6729d
+Plaintext = 9cea3b061e5c402d48497ea4948d75
+Ciphertext = 81c8805a3bf6b176ff72e06be0e670
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = 238d3c9d9de32f2040b1dd0dd040b921e456c3653263f4020cffdc552b948a46
+Tag = 7fedcc743389a9d48e6b871dc0dd63b2
+Plaintext = 20660408d6890aed84aa65dfe23032
+Ciphertext = 3d44bf54f323fbb63391fb10965b37
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = 3b5d61ca21953fdd22280747dd4ae908a511750127875da84dfe7d0063a318c9
+Tag = 8137e0a856d3d911af9f420b68d8110d
+Plaintext = 9ab83c81f2d2c896c6596660c3974d
+Ciphertext = 879a87ddd77839cd7162f8afb7fc48
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = 78c1751e86144a78285a30dc04f51742bd47e3d36b607bab48d91cddabfff4b7
+Tag = 5644448fa8445b6cd185bdf9b3718033
+Plaintext = c1ec469aa9c73b677af225a9f5f6f8
+Ciphertext = dccefdc68c6dca3ccdc9bb66819dfd
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = add33e9a1d7e91e2c160c1123537e3f7e3535881cb4aac1a80ecbe367379212c
+Tag = bd38e4dc44f768cef0c51344e3a7f7b8
+Plaintext = 9df1d6b6debffdd316aeb27143508e
+Ciphertext = 80d36deafb150c88a1952cbe373b8b
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = df7736560b1a13aa8e536500ea6cdb9a6757309aadf25a6a9189055a309c3f8b
+Tag = 2e7f2ec918099898b843a34c385f2a57
+Plaintext = 19eef017100dc82f26ed0815c55c12
+Ciphertext = 04cc4b4b35a7397491d696dab13717
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = b40c8d22069b8a65cddb51c1ea3571160cacb19fd371552436b19c7122b28d08
+Tag = 94c2709685b0827cc42f3a25b579db28
+Plaintext = 2af5db43f2a5fe8b494b40661510bb
+Ciphertext = 37d7601fd70f0fd0fe70dea9617bbe
+
+Cipher = aes-128-ccm
+Key = 38be46d271bf868c198052391f8a2147
+IV = 6758f67db9bfea5f0e0972e08b
+AAD = 9de5559ea8ccc70f4375a436ce0b72551a75960ad5ed6a1949ee8f6c47548558
+Tag = 63bf4b40ce7e672587816fdcda16efbe
+Plaintext = 5de41a8ca8ed8011304fa9e9f36498
+Ciphertext = 40c6a1d08d47714a87743726870f9d
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = 3fec0e5cc24d67139437cbc8112414fc8daccd1a94b49a4c76e2d39303547317
+Tag = eef08e3fb15f4227e0d989a4d587a8cf
+Plaintext = be322f58efa7f8c68a635e0b9cce77f2
+Ciphertext = 8e4425ae573974f0f0693a188b525812
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = b6fecd1edeb55a9a4148b1aefb716a1e162779a5ab2a682e4adce4479c527bd2
+Tag = df7f186e8d3d7c21c549c41ebcc7f505
+Plaintext = 0e6118d0409751d36cb642504678535e
+Ciphertext = 3e171226f809dde516bc264351e47cbe
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = 5c3933c30bf9d4841eff4000aaa1cb4d39cdf8ef1240e2aabbf9da95bdee5270
+Tag = 810a68be1814f53c09aca4066527fef8
+Plaintext = 5c8a5fb36f860d00c21ae9e3f24097c4
+Ciphertext = 6cfc5545d7188136b8108df0e5dcb824
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = 7ca7ef30d3ac08aa51a9e5d3d84e8b6bb7fdde921e72b98ad6a93ebf2efc6b04
+Tag = cc30245a6e64625c4f6531d7497fb144
+Plaintext = ebd1cb4b35257790c9806be476bd25a3
+Ciphertext = dba7c1bd8dbbfba6b38a0ff761210a43
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = 90f1416768fca7dd48d01230dabf95f2f1a0c044bf2d755448aaf72316c8448c
+Tag = 10d85725dacc274034669acf7f34fed7
+Plaintext = 842b7e5f22d921b2b8ab3131684b7eff
+Ciphertext = b45d74a99a47ad84c2a155227fd7511f
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = adc5c36849283d57acb2bcbc0e12465cb7c1830cb4e314b9ce6e25acbd8d460c
+Tag = f731b465eb59c4989e42020d86102a59
+Plaintext = f0c2cc5a1b4c4cbe839338fa0d7a3435
+Ciphertext = c0b4c6aca3d2c088f9995ce91ae61bd5
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = 80a7a483d1dbcdf00ed02a700e93d8b87fa6ac5c7368d1e81bd1b32cd1621cd7
+Tag = 84bcd2775448447ed801b3b0ff071c19
+Plaintext = 2c1a5f906f2ae0373cc25e3519df2ba4
+Ciphertext = 1c6c5566d7b46c0146c83a260e430444
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = 13c02992992d2708250184a579c43bc29a3a8cf1e02dade4496cbd8b1214f97d
+Tag = 01d1919f1451ad16f115cde863f15303
+Plaintext = 1da5190517546f1ad852f64263e1f679
+Ciphertext = 2dd313f3afcae32ca2589251747dd999
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = f6f18dfe093e4c0c3fbfa8a5b1f4a703c08addc2ab959741611a594b93d08bf7
+Tag = ccae4f6ec07bf73d6f086cf09e2e14ed
+Plaintext = 13ccb08a580efea53dfba6a59626bbe2
+Ciphertext = 23baba7ce090729347f1c2b681ba9402
+
+Cipher = aes-128-ccm
+Key = 70010ed90e6186ecad41f0d3c7c42ff8
+IV = a5f4f4986e98472965f5abcc4b
+AAD = 63708e12dfa14f192ec5ee5856dc3cf2403817d9628c31899b4613f65e1e61c2
+Tag = 2bad8bf67d32a855c3940ac908397a5f
+Plaintext = e0b5fbc6c2269d445a60273bf844892b
+Ciphertext = d0c3f1307ab81172206a4328efd8a6cb
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = 46603500af9e4e7a2f9545411a58b21a6efd21f2b5f315d02d964c09270145b3
+Tag = 70f0edb415993588b2535e2e0e4fd086
+Plaintext = 001343e6191f5f1738e7d19d4eec2b9592
+Ciphertext = 2162e27bfbf1d00f2404754a254665fd92
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = 278afebc604bb7d87bed3574a2c5053de17eb8ca7e18ddc7892f2c54b38104a8
+Tag = 778e3c4a11f3f9dc42554d45796379ef
+Plaintext = ba47d5bfb36f6150a100e36caa116405c4
+Ciphertext = 9b3674225181ee48bde347bbc1bb2a6dc4
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = 3239b2ce4efe4f6a6255dc53347400a6446ed3280c65422386fab471ef09eed6
+Tag = ab5540cc01d867f641c9b196fa159291
+Plaintext = 96eccb7f9b0e16c6883de0a381e4767f5a
+Ciphertext = b79d6ae279e099de94de4474ea4e38175a
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = e2a5488d5f7930ea4ce399f2a6c0810265f7c0dc52fe824d19a0fa0d9ffd55e6
+Tag = 6366fbe302e142dcf6aa16337d98550f
+Plaintext = d68f5990da1a2fe39ed81af145ab834fa4
+Ciphertext = f7fef80d38f4a0fb823bbe262e01cd27a4
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = 0071f1edb3a0ce57af3c88bb0ccf138f752697a77e55695838fb39de04c78dfb
+Tag = f88c07797267bf5a49b3d0f601a225ce
+Plaintext = cdd4d8b3d8f6e4742793b456cefc9e686d
+Ciphertext = eca5792e3a186b6c3b701081a556d0006d
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = f5d6989587e463969d97aadabea9538511f8d109cc2d3cecf09ba7cc346aaea0
+Tag = 5c9fbf69d81cef238ac513562d4a0dd5
+Plaintext = e7d7fc60ae852b68102e01b506f9dab986
+Ciphertext = c6a65dfd4c6ba4700ccda5626d5394d186
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = e0b5fbc6c2269d445a60273bf844892b26fed03b82869edacd6dd7a63fd69e8d
+Tag = e2c748c8c9e3190de095de8eb0650203
+Plaintext = be9f51abfbe2da5a56db0f9a31b67c9f83
+Ciphertext = 9feef036190c55424a38ab4d5a1c32f783
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = e6bd0010c98e60b9af7cf905c58e0653bc425e2ccc809bd4f9cd7b1f95c18786
+Tag = 05cf563c5b4ba4ebd5bf107f2ad3555b
+Plaintext = 81b9c73029cea1936ef8755c80ba8d4093
+Ciphertext = a0c866adcb202e8b721bd18beb10c32893
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = b1688cbc058816974694cd26c0f28ba9418e9912867fc8c5f4e7bd9c891a8d2e
+Tag = 60dbbd8f46343c8442b03a472da4e23f
+Plaintext = 618dc26853ee339689467ffbc2a77be69e
+Ciphertext = 40fc63f5b100bc8e95a5db2ca90d358e9e
+
+Cipher = aes-128-ccm
+Key = 79eae5baddc5887bdf3031fd1d65085b
+IV = 9da59614535d1fad35f2ece00f
+AAD = 469e004fee9878ed40621b41d04ec34af175f213d64d16e2f77d0bb2b6efe2e3
+Tag = 43352e46995e8c1aee43dbdb26b46c30
+Plaintext = 4f18bcc8ee0bbb80de30a9e08629323116
+Ciphertext = 6e691d550ce53498c2d30d37ed837c5916
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = 733f8e7670de3446016916510dfe722ce671570121d91331a64feb3d03f210e6
+Tag = b4cc36852fd64a423fb8e872252b248e
+Plaintext = 617868ae91f705c6b583b5fd7e1e4086a1bb
+Ciphertext = b2dc1e548b3d3f225a34082f4391980a0788
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = b6ec659856866959ef6fd4e71ba930f0e3e5fd49d7465fd65f6813ab4ca1a770
+Tag = 95a66eb5b902bb23a1a8584249409fda
+Plaintext = b8b342c49c28bffc2a1c457db0b537ad46bb
+Ciphertext = 6b17343e86e28518c5abf8af8d3aef21e088
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = 89eb3636fff80230352a3582be5698e3401c9e0579d48f2680c6e5e24d99f74b
+Tag = 7fa792fb7246218f7d56d5fa4a5476bd
+Plaintext = 37d694ba94d0af8df662134f20d142903839
+Ciphertext = e472e2408e1a956919d5ae9d1d5e9a1c9e0a
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = 03434f3709e19a1e37edfcaabc215116763b71ab1c5e053dbdb599f86959f25d
+Tag = a83dc3f0012ae6da32a15fd1684835ef
+Plaintext = 90e4c0550cb7b279ef61f9140b7d94b8003d
+Ciphertext = 4340b6af167d889d00d644c636f24c34a60e
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = 0e2ddb65fcc72094ac388d53a1055c7e902285c4c3c33c13bb6fbb4f1956414a
+Tag = f09d38d3dba01995e36bd685c8ea3371
+Plaintext = 69b851e63a78baef90637978e3dfe8c47be4
+Ciphertext = ba1c271c20b2800b7fd4c4aade503048ddd7
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = a42b2538ee2fb5f6a85d4d00524b01ad3331f61c404069243f35f28e2c2d0a82
+Tag = c89becf8d2bb935cb17f44b950df3ef5
+Plaintext = b7dbf8382115199dd2a2d87938c6ae6c4241
+Ciphertext = 647f8ec23bdf23793d1565ab054976e0e472
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = 09bc5c426dc1faa4d71f50908bd6f297ec8e754d4d20def005585b4bc1fa31da
+Tag = 96e28badf0202097e80561451796194d
+Plaintext = d53698d719c51bf9eae346269c6a1da07162
+Ciphertext = 0692ee2d030f211d0554fbf4a1e5c52cd751
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = 2ac87e59c2c86532cf165af3e8ff4871d730f5e742cccca38bbcdffff4472c93
+Tag = 710d4d7f66660891ac655d6eca4a3f3e
+Plaintext = cfdb7363985aa01af6f8e8237dbfb7871eb3
+Ciphertext = 1c7f059982909afe194f55f140306f0bb880
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = 05d2fbc3d0ec81f52f31cb0c4bf960c2076867f6d9f0174ed9176e20177b2693
+Tag = f90ab18925fea6964490f364a975a473
+Plaintext = 56fdf10dc0c1dfd10965b83938e557459c61
+Ciphertext = 855987f7da0be535e6d205eb056a8fc93a52
+
+Cipher = aes-128-ccm
+Key = c14eda0f958465246fe6ab541e5dfd75
+IV = 32b63ca7e269223f80a56baaaa
+AAD = c2c3902cfe8622254b3787cc13e79c5a3c388c2357c29f1c1ab5539a10bfae5c
+Tag = 68a00e5e7a39b371024927d3ac98fe43
+Plaintext = e7c9812eda2ed7dcfc80fc5fe0d43e1e5982
+Ciphertext = 346df7d4c0e4ed381337418ddd5be692ffb1
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = 3a069a2bfda44abbb0a82a97e5e9047258c803da2c66190d77149e0f010b3af9
+Tag = a6d7568c738e3a7fdf142d8f2d1562c0
+Plaintext = 2f3bf0b566440912a1e47a0c07f1cfd39cb440
+Ciphertext = bd6265dcba9e14c59e515e395dc60bd053345f
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = 7709132415c94960025cc39c950ead208703a9d5a71e224fd022dc0a1817d0f4
+Tag = f22337efa5cb7db7240e7518b67ffbb1
+Plaintext = 7c880d787726c4ddeb2304b5d161b4a257298e
+Ciphertext = eed19811abfcd90ad49620808b5670a198a991
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = aad77595f87a27f2c7995fc7149317f4cbebcece8336db2068380070784a4283
+Tag = 40bac6094528f02eeda093312fcf716f
+Plaintext = 08c43bbfa706512aa39e2bfa5c365aca11e22e
+Ciphertext = 9a9daed67bdc4cfd9c2b0fcf06019ec9de6231
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = bdb1b82ba864893c2ee8f7426c7b9a8460b00a50f164fc8f2ff2ae9cddab8657
+Tag = 0c041d86dd483c1d6da366e91bd826dd
+Plaintext = a531c0ed8840b2fcf08d76eca71036153b6e11
+Ciphertext = 37685584549aaf2bcf3852d9fd27f216f4ee0e
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = 38b3b9f45041ceb743fc2655b409213fa081427e41c833a2321a09fbd566c80c
+Tag = fde45ca2a83dec2f930bb652a6fcdc5f
+Plaintext = 177946b4dc3b0b825a505f097a0a203eb21c00
+Ciphertext = 8520d3dd00e1165565e57b3c203de43d7d9c1f
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = ec9d8edff25645520801b6e8d14a2fc3b193db70d5e5e878742de83154a578da
+Tag = 8b89aa22cd7d0170a975565cd3a33dc1
+Plaintext = a2634ef20a2a418b2c3be64f0b5f79d7ea9b7b
+Ciphertext = 303adb9bd6f05c5c138ec27a5168bdd4251b64
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = 8f6c1de4efdc5ac2d6e5452b5b4f58416d618da672f521332fd297ede8350134
+Tag = d960b33c3df5cd38a82980dc0950ada4
+Plaintext = 40e52edaad5acf2d4eedfb3f9ac2908112e9b1
+Ciphertext = d2bcbbb37180d2fa7158df0ac0f55482dd69ae
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = b0f1dc85fe223bcf29cdfa9319866bacd0a0a79c554e24d1f10889279e31c0af
+Tag = 38fa273c4102b5ca050b23044ac2064f
+Plaintext = bf97780f498c23adcf1c49f60873780a235969
+Ciphertext = 2dceed6695563e7af0a96dc35244bc09ecd976
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = 7d02a323aa769a8201549bf48a520d940bf6f69ed6106f1ce68856c22a594216
+Tag = c15438af1bafac3eac61e1c24ed00ab7
+Plaintext = 58bfe1eb2d38d91f80b3467db94fdcb84ff5f3
+Ciphertext = cae67482f1e2c4c8bf066248e37818bb8075ec
+
+Cipher = aes-128-ccm
+Key = c5e7147f56ba4530b8799ababeb82772
+IV = bdd38e173fb20b981659c597d6
+AAD = d4b90ef8abad08c552c8c3b080b8c37df314d514049d45e27ec4527cb06cdf85
+Tag = 4422d9e2f4f84fde49e9701296294d5a
+Plaintext = a206a1eb70a9d24bb5e72f314e7d91de074f59
+Ciphertext = 305f3482ac73cf9c8a520b04144a55ddc8cf46
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = e98a77f2a941b36232589486b05f4278275588665a06d98aec98915cc5607e06
+Tag = 9d5ca3d8ec5065630d2de0717cdeb7d5
+Plaintext = 4802422c9b3b4459ba26e7863ad87b0c172cfe4b
+Ciphertext = daea2234ea433533bf0716abe1aa3844b6d3c51e
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = 5970a836de1f1e91d94d7eef79742cbbd46a759c413715eb0224fd6a27145333
+Tag = 0ff0648ddb07f42f815b38bfc95688b1
+Plaintext = 796a69ad0e9379173ef6b66f44f5c84fa70a0e28
+Ciphertext = eb8209b57feb087d3bd747429f878b0706f5357d
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = e3f08834c4894f6fa66a55a280c0e677a79e97c1ef9488b21384e74e57b1b51f
+Tag = 3ddd9a6977ea8e7adf5c5234346e560f
+Plaintext = 98e1f8cf250183b13ad418024dc40c1a6a7ee8ac
+Ciphertext = 0a0998d75479f2db3ff5e92f96b64f52cb81d3f9
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = 18349be2894d49290339b97f4db28c92b3e112ffac77100abbf9c093935b1a46
+Tag = bdee05328a7ea8cc6c2e42bf3faeeda0
+Plaintext = 4a856d9b50a5b40d6566b38eae6a53ed0c192805
+Ciphertext = d86d0d8321ddc567604742a3751810a5ade61350
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = 7355e34ad13880de17a1d66b02672ea5c9f51774019f64ecbe36747ffcd9b671
+Tag = afb1435cf929db35ec5986aabaf4a7d1
+Plaintext = ad048eb2ad75266b43b59d9d1f073c44e4cbf25e
+Ciphertext = 3feceeaadc0d570146946cb0c4757f0c4534c90b
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = 4be21ba2eb26234ddcbb6aac6b4c3be7ef644af64edf51b7c29ffc3ddd80036b
+Tag = 736be6563cf9f5bce97486b7cc6f1c18
+Plaintext = 5b527ac6cc6d1b4c3c56f8315bc96dae91632df9
+Ciphertext = c9ba1adebd156a263977091c80bb2ee6309c16ac
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = 266e0e3365e06d3b1e864c6e5897145df7bdde90eb744013a7b36632d4cf6580
+Tag = 2e90335fcea56b969b4fce65442768dd
+Plaintext = cee059cb0fe91a39faccc2914340baeab4b644ce
+Ciphertext = 5c0839d37e916b53ffed33bc9832f9a215497f9b
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = 55a723883a340877d85ad1a5f264f2c834d824c7bbf207cdd8500c9d11ef9225
+Tag = acd6afdb3578ebc75e8a408d32758931
+Plaintext = 85321fef6a2b7d31cbd079c4bf2bfbbc979df90b
+Ciphertext = 17da7ff71b530c5bcef188e96459b8f43662c25e
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = 773864475a1a60a778468a66cbe13dfe3458094e62abb593f50c8495e3a8b81e
+Tag = a19fb73fc0488d9f29a09c1b47e3e066
+Plaintext = e227b8d44320bd3ce9d3f7d688f3de887947b1e9
+Ciphertext = 70cfd8cc3258cc56ecf206fb53819dc0d8b88abc
+
+Cipher = aes-128-ccm
+Key = 78c46e3249ca28e1ef0531d80fd37c12
+IV = 5de41a86ce3f3fb1b685b3ca4d
+AAD = f64f3b00c9117aed3c486aa4c8d574b44d679be4069e1078bb7100af38cdb190
+Tag = ce2c5ef8cdce76b358739e2a1b173fb3
+Plaintext = 206e9eb2bc3f8534d844a38debf1306df808744a
+Ciphertext = b286feaacd47f45edd6552a03083732559f74f1f
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = 545aeac737c0ca2a3d5e1fd966840c3a0d71e0301abbe99c7af18d24cc7e9633
+Tag = 2f2da4dd4d817c9fa2d44bc02163a0a9
+Plaintext = d516bbff452e7706c91c7ace3e9baa76d65ff7050f
+Ciphertext = b85242fdc06344f2bd9a97b408902ebcd22aece3d4
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = f032db01da60ca078d35c3fb5d05d6750fce1c01911a0422e827e8976946e4dc
+Tag = 180f41bccbcd47c8b7890754c032269b
+Plaintext = 590d1aa655fed50ca2e402299f2da6fe20eed56071
+Ciphertext = 3449e3a4d0b3e6f8d662ef53a9262234249bce86aa
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = 71ecb4252518997b53491cf42a3e0fe1496a2af2329a16f9fcd9c4f249900341
+Tag = 1d6ba58cc2eb474401851bf9502c3413
+Plaintext = ecd86cdb7d78d310dca5b477cd9da2612f5a05ab39
+Ciphertext = 819c95d9f835e0e4a823590dfb9626ab2b2f1e4de2
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = ec7abed9bda4a52fdf1bf278b6bdd6b0a27d4688deb9ff5ca9c8c865a4d2f730
+Tag = 9b94d4b7a2044696c72322e850537b6d
+Plaintext = 0024b14c283df032cf80c22ad8d2c96289ee229092
+Ciphertext = 6d60484ead70c3c6bb062f50eed94da88d9b397649
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = c2c77d7ad7b27d7c0f976a1e28881ea4ec7ad03b63a4e67f47280a40b8f58086
+Tag = 9d8da8e718570caf8bed7909fbff3ec6
+Plaintext = bc6965d8f62d066d118c14044c1fd2a224b9d95110
+Ciphertext = d12d9cda73603599650af97e7a14566820ccc2b7cb
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = 28929286bd1391468ac75f5c03689f74780ddd7585fc16f9a9bf7b00357a72e5
+Tag = e671012690c61fe3c9abd50a78eb4736
+Plaintext = da4a630cabaff0728a1cc3e6a79721a7176b708f1d
+Ciphertext = b70e9a0e2ee2c386fe9a2e9c919ca56d131e6b69c6
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = ed360d22081b019dc979420a3a45c21c8903c59daedd9f1b4ef2bfdedff0ec1d
+Tag = e657e2250427130acef7032454cde7b6
+Plaintext = a95058f8e1f6bc0f143a9ca7e4425a2a63eb2f7e33
+Ciphertext = c414a1fa64bb8ffb60bc71ddd249dee0679e3498e8
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = 2b4022d0b951fe48635d04fb3e2fa032c07c855fdd73f45670953bb9ddc77cb4
+Tag = aac6ff0a264b8199550d93c1f06063da
+Plaintext = fcbbc7f9d1ace60e830ca56ec84814fbd2579993d4
+Ciphertext = 91ff3efb54e1d5faf78a4814fe439031d62282750f
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = 48e553a87a7d3c1bd68af39f96aca67583da86e06701d5e4c4ed404dc66d70f3
+Tag = 7e68bf636e81c332f72063dc0d6fc2b6
+Plaintext = b95d298d391c6b893c6cad66f9780534516e71455e
+Ciphertext = d419d08fbc51587d48ea401ccf7381fe551b6aa385
+
+Cipher = aes-128-ccm
+Key = 8883002bf13b3a94b2467225970df938
+IV = 818a702d5c8ee973b34e9acda1
+AAD = e8e2835e47144365a2f218d4c95d7522e824fb43b66d4727ee570f8303dd6dd3
+Tag = df3af9e9c4e04bad261dc17cf00a00dd
+Plaintext = bc79d444dff9d9e722effab07b068cb7723ae8fae0
+Ciphertext = d13d2d465ab4ea13566917ca4d0d087d764ff31c3b
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = 50422c5e6a0fb8231b3bb6e2f89607019be6ad92a4dae8e0fe3f9e486476004b
+Tag = d828101682de32923788c70262b84814
+Plaintext = 33bfd0713f30fcac8f7f95920ac6d9b803ddd5480dd8
+Ciphertext = b168747dea3ae0fbede4402af9a3dc3185d6d162f859
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = bb0036b34b0c20094d335a8c74f6b3dea42eeccf4145192eada64ae00c726b2e
+Tag = bafc4ae4d31907def6f648b081174e2a
+Plaintext = 5576d94b577ed26820fb13c00ab0e2d1a1c3589bfdc4
+Ciphertext = d7a17d478274ce3f4260c678f9d5e75827c85cb10845
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = 5140324aa758dbbb5391b5e6edb8a2310c94a4ae51d4fba8a7458d7cc8488baa
+Tag = 314e378e9ed6e725a14c07632b02bdbd
+Plaintext = 13303e14068205cbfa992d4ccb6a265804ea64a15d7f
+Ciphertext = 91e79a18d388199c9802f8f4380f23d182e1608ba8fe
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = 74da07d324060e590356988f27d9879fa3a3ade0fe71e2a0e49054211cfa1fe1
+Tag = 5bc2f2f9331536f7f70be09c41bda0ad
+Plaintext = 567e6d14b446add630d53ea86a537c0938537c4604a8
+Ciphertext = d4a9c918614cb181524eeb1099367980be58786cf129
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = 0e403cff47adee3ec5bb6b178dabfc7d53b60a04eaad33a2fedd9db705358a4c
+Tag = 6b59cc9c3c008bc5876ef86327859cbe
+Plaintext = 9f3d165d44cf1c5770346d211d4ff34ca2ecd6b28549
+Ciphertext = 1deab25191c5000012afb899ee2af6c524e7d29870c8
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = 211e6ce3d0c3abdef069e6e4fa35015797bd8a9d64bc9b75f20b028b12cca04a
+Tag = 135e6d59a5385a78658d60d254f99962
+Plaintext = d726e599db6a6d40629bc4bda5e3fa2e5aeda229cea4
+Ciphertext = 55f141950e607117000011055686ffa7dce6a6033b25
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = 3c5c67b083322115e1b3112c2b6968efc050094e23e646dce982eac9d6e67d10
+Tag = e234e83d9a0570dbf2b2fa59ce3cdbd9
+Plaintext = 42646cfb8a99e48a35cee3f5f9b3e6175695973f6de0
+Ciphertext = c0b3c8f75f93f8dd5755364d0ad6e39ed09e93159861
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = 37a931f1dd05755b376d1a164aa36b8de802e39f8108a0453c1114754665fe46
+Tag = 2084e352b1b157267228576dd056c1a3
+Plaintext = e814c7b5c72d973a9bc7ccd463f107325ffa3321783b
+Ciphertext = 6ac363b912278b6df95c196c909402bbd9f1370b8dba
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = f1ddc2c49da7363526ba36c600c589b4c3121fbb8c5b9a8aa0de0e7453b30568
+Tag = bf88ad35ee338e489e55bb49732447cf
+Plaintext = 4f7a5618870945b89f194e31b1aa802c5350326dc691
+Ciphertext = cdadf214520359effd829b8942cf85a5d55b36473310
+
+Cipher = aes-128-ccm
+Key = 5cea00ee44cfb9cfbb598d3812e380ef
+IV = 948788a9c8188cb988430a7ebd
+AAD = d14b3d3803df432488b5d66704abef6a500d397e855bc2c2574df746a515cf70
+Tag = 7ab67f9397a81371ef6ebc775cb7007b
+Plaintext = f555216840a1f40b411d44128e567617e2694caf1621
+Ciphertext = 7782856495abe85c238691aa7d33739e64624885e3a0
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = 2bd112231f903fa0dff085db48a2e2a96ec0199249b005d5ab4c2eab753f9ad0
+Tag = af57647efda119c59862cd5dd3904efc
+Plaintext = eede01b08f9a303cdf14c99d7a45732972c6eff2a1db06
+Ciphertext = feb114b7bd3b43497b62454a675a632c3546d2802462c6
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = 864e0e728aea856fae6c6daa6357d1542cef7177f441ba21a563f6c4f6fdc1dd
+Tag = 2af4027ca5824b41c7bb238d3e8eeebf
+Plaintext = 8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0c
+Ciphertext = 9a394d88d7405656df1a50e7e45fa8ddcca85e9ed5a3cc
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = dac7f3cba0b5a47f67f85b226b66df695a8ae2501355e36aad105375bb95f732
+Tag = f7fbd7044ce1d7b266bdf545247a3c2b
+Plaintext = 66e34540d7accf377877aa2d3e6d2db0cfafc608a1eb3d
+Ciphertext = 768c5047e50dbc42dc0126fa23723db5882ffb7a2452fd
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = 07f48cdc12aa27119fbdfda4ec07ce6068c92ba7ba9c930905aadd156b1dd56e
+Tag = afabc559b552cf7c7730c7dca25bc3ed
+Plaintext = a9ebd04fba7155c39b5c29c5571b5354c9ae228f5e5b13
+Ciphertext = b984c54888d026b63f2aa5124a0443518e2e1ffddbe2d3
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = 2d24e79abd157af2c21b60932947fd9f9d6478f09ec56fffd341ea04a17b8e5f
+Tag = 488ca99e0f85ac388f981ce25560b8f9
+Plaintext = f179353aef342f0f691caf1fcb811e3f6504e14d6d9381
+Ciphertext = e116203ddd955c7acd6a23c8d69e0e3a2284dc3fe82a41
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = fea280f710379e4665b5ed3d1620729a7bc164899dc83e6aee3612d538fa20db
+Tag = 9156faae3d8860bed216e8d497a75962
+Plaintext = 6c19a18eab544acc883c5886eaa89f54d61ae5f1f1368c
+Ciphertext = 7c76b48999f539b92c4ad451f7b78f51919ad883748f4c
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = 18f2e3457127c35f2e0cff2d821af8178028fcc7803bc795c49f4a435b37abeb
+Tag = 88cd7791c544d1098b2de49d04b1e0c1
+Plaintext = d0df1bdf1df6203241722fb9c9c1cf7405017497ae1545
+Ciphertext = c0b00ed82f575347e504a36ed4dedf71428149e52bac85
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = 35221f0efcb109cb93c38a62c58b5ab8b236437e171e8507cf417a569af1767c
+Tag = c523fd8a2524717f63dac75c22268fa6
+Plaintext = 479526b33c42c240b9a4549ca70cbfb691f16ae3be8888
+Ciphertext = 57fa33b40ee3b1351dd2d84bba13afb3d67157913b3148
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = 95f2ab02af01aeacce86b02cf846f9fbd516963d06e350e8b7f6df2778765a01
+Tag = 92904f05dc2397596543df73de5aa708
+Plaintext = aa6761148b254a2ff202b620c2ec2c5e623bf61f05e483
+Ciphertext = ba087413b984395a56743af7dff33c5b25bbcb6d805d43
+
+Cipher = aes-128-ccm
+Key = cb83f77751e72711401cbbf4f61aa0ed
+IV = c0b461b2e15b8b116ef9281704
+AAD = 3746a36154e42dd600049d506f5ce4d034864263b1a65cecd24c8e25fb9c82e1
+Tag = c3cbfecfa3f75fb111ef0011222b7948
+Plaintext = 2f298f106703b8a994cbb20acf47f9442e44f6b5e82c38
+Ciphertext = 3f469a1755a2cbdc30bd3eddd258e94169c4cbc76d95f8
+
+Cipher = aes-128-ccm
+Key = 43c1142877d9f450e12d7b6db47a85ba
+IV = 76becd9d27ca8a026215f32712
+AAD = 6a59aacadd416e465264c15e1a1e9bfa084687492710f9bda832e2571e468224
+Tag = 2ec067887114bc370281de6f00836ce4
+Plaintext = b506a6ba900c1147c806775324b36eb376aa01d4c3eef6f5
+Ciphertext = 14b14fe5b317411392861638ec383ae40ba95fefe34255dc
+
+Cipher = aes-128-ccm
+Key = 43c1142877d9f450e12d7b6db47a85ba
+IV = 76becd9d27ca8a026215f32712
+AAD = e82fc3ffd276218a82aede65fe5abf4fd35c7059a26923f8dbb97a59c903a7f4
+Tag = 0d2d30268e9f1ce0e7c762993297d828
+Plaintext = eab8cef576816a82ed036f158e5036f5987b195e60582a6f
+Ciphertext = 4b0f27aa559a3ad6b7830e7e46db62a2e578476540f48946
+
+Cipher = aes-128-ccm
+Key = 43c1142877d9f450e12d7b6db47a85ba
+IV = 76becd9d27ca8a026215f32712
+AAD = 776aae7f62225556b6da522c0c9432ac70fe72ac6f3f361071ef3deb4a6715e8
+Tag = 0939e56f0b7200d1b1409f3f8e8179cc
+Plaintext = 566ef9ce1d397be2547c385639507a9e7d6f9eed9a3b1055
+Ciphertext = f7d910913e222bb60efc593df1db2ec9006cc0d6ba97b37c
+
+Cipher = aes-128-ccm
+Key = 43c1142877d9f450e12d7b6db47a85ba
+IV = 76becd9d27ca8a026215f32712
+AAD = d9aef0955922f89747ba4a8ddcdb8c1c7579aefd3c2eb8ad0589c66576a8504c
+Tag = 138e3b817023993608be06fe92efca8b
+Plaintext = 8c28b6d93b23f1ea031d5020aa92f6608c3d3df0ee24a895
+Ciphertext = 2d9f5f861838a1be599d314b6219a237f13e63cbce880bbc
+
+Cipher = aes-128-ccm
+Key = 43c1142877d9f450e12d7b6db47a85ba
+IV = 76becd9d27ca8a026215f32712
+AAD = 13c222a65ce30570ecac85a185a2a0922a8c96d633339a1ca067ce57ae426e1d
+Tag = f3ca13b4ab7fd0d4badf158972570c06
+Plaintext = f0c1cd60f5fa8d1efd5e2e1ab37c4f7e6aef76d15e8d6ac8
+Ciphertext = 5176243fd6e1dd4aa7de4f717bf71b2917ec28ea7e21c9e1
+
+Cipher = aes-128-ccm
+Key = 43c1142877d9f450e12d7b6db47a85ba
+IV = 76becd9d27ca8a026215f32712
+AAD = ce40fb0cbfdf07676ed55b040ae6be5db8f0a0f28816ae8ea71da3cbd71661d8
+Tag = 0a79fa4e8b27a31ff360a1b6c05ff844
+Plaintext = 570d5f79aa8db14b1ac99ee567cc105ae9e238e482b52628
+Ciphertext = f6bab6268996e11f4049ff8eaf47440d94e166dfa2198501
+
+Cipher = aes-128-ccm
+Key = 43c1142877d9f450e12d7b6db47a85ba
+IV = 76becd9d27ca8a026215f32712
+AAD = 446b01d09cbc41b6393ef81ca65ab7e099018187d5f9d22f5074dfc491e72077
+Tag = 5d34ef0ca0b47d6a2ec7442cbb739504
+Plaintext = 7c267223047af946b06f6a45ffde4a5ec49c28b81ca22da4
+Ciphertext = dd919b7c2761a912eaef0b2e37551e09b99f76833c0e8e8d
+
+Cipher = aes-128-ccm
+Key = 43c1142877d9f450e12d7b6db47a85ba
+IV = 76becd9d27ca8a026215f32712
+AAD = 01ec87920b42639d4ba22adb1fbe5138d2849db670a2960fd94a399c1532ed75
+Tag = 8f607d154393e35fd1efc1ae8cb244e4
+Plaintext = cbf112e4fb85276c4e09649f3de225b2398e86ac3fe48bc7
+Ciphertext = 6a46fbbbd89e7738148905f4f56971e5448dd8971f4828ee
+
+Cipher = aes-128-ccm
+Key = 43c1142877d9f450e12d7b6db47a85ba
+IV = 76becd9d27ca8a026215f32712
+AAD = 5032b818d202872f3fe2b08fc7940696df02cf393a6d6247f5c6f5f2125cb08b
+Tag = 617d9cebea38591a00c9fba4ef9c8e71
+Plaintext = 4324a89788e8ddae5d560cf937df701743cbbc3bf980558c
+Ciphertext = e29341c8abf38dfa07d66d92ff5424403ec8e200d92cf6a5
+
+
+Title = NIST CCM 192 Variable Plaintext Tests
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = 58f70bab24e0a6137e5cd3eb18656f2b5ccddc3f538a0000c65190e4a3668e71
+Tag = 3bf9d93af6ffac9ac84cd3202d4e0cc8
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = 760d065275e345900a7bbab451cc9309fb161e6cfec526538b98800e4102e14d
+Tag = b0078a769ab68db44e723993da382abc
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = ffedc67efd355ea404fcbcb3993d3bae81386ded86230270771deb747163bf44
+Tag = 31fbff2d715a2eb9af54e8320a8e42e1
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = 55153ff5e4d208d2e647794f382c788e0e36f293e63e7290ba9ff2657ae0f167
+Tag = 945839d62c9d1b899f6dcd0ca9517e68
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = f8813985f59bf284bd3882e899ca9b67fb496f3eb78d7ebe6ffbad084f639915
+Tag = 903f90d23321a6882d6c4c1955b14847
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = 7b95cd827ab93507f1819ae76627d6e2a31d29890c092e5c300f0e2f9e4ef4d2
+Tag = 652ec5ab43088eb568186d0d9887b30f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = bd144c9bb974729aaa1188ceefdf85e1d9fddc0b0c8afe8828ba204aa9293feb
+Tag = e6c1455d1117eec49338c96f51007309
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = 92b911cdc3137a6f7f32651b788eb82975660aea52b2c03b4759755a6da4a0f8
+Tag = 1cf3c32fb229dac209523eaa517bb59a
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = a8200dbbfe4086015cdbdec2fc8e4934d0d663527430c424627ed44065ade091
+Tag = ee10bfeb1cf9b3cd5a0faebd4d8f3fe1
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3
+IV = 929542cd690f1babcf1696cb03
+AAD = 3b7f37b6b8e3c1390a99d59c47f7c102cf659d361a132ef8b4e70b9585bafebb
+Tag = c51ed994253adb9bb5b9a8c34a27f225
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = 27cabc40da0e1eda0ea5f8abbb7c179e30776250a7b30d711b0e106c5ee9d84a
+Tag = 96f58c3f38c44d1a345f3e2da6679f20
+Plaintext = 1c
+Ciphertext = 1a
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = dc2e28d5ae726c1beadb1e7e92ae7d14f5546320deb81a910bf170cbe0210eaa
+Tag = 0579aee7c17482691f3f832d867ffea7
+Plaintext = e9
+Ciphertext = ef
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = c579f912ac1b45d5aa8cf20f78f0a1ace32abd3dc7fd0b3f3a7182a008795c7f
+Tag = 3452d8ece38ffa1d4107d6a053acd8c8
+Plaintext = 97
+Ciphertext = 91
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = 69ea953dbb910ec589372d797c7379d3f3b9e9fd48894c9b55e6e8eb360a6211
+Tag = 0d760b9fe29530738157db0ba2d253f0
+Plaintext = f4
+Ciphertext = f2
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = 622835dea57b2c70cca8f7548d6210714070b55b36adde7a4c547269c07aba9c
+Tag = 6fc21f24dee7b52f51d69eea30819f4a
+Plaintext = 9f
+Ciphertext = 99
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = 67ebda0a3573a9a58751d4169e10c7e8663febb3a8cf769d81bc872113f0720f
+Tag = 94c5b8db0064426a77dc536814c56147
+Plaintext = 43
+Ciphertext = 45
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = 255412e380e9a28cbcd345be172c40f72dec3e8a10adfd8a9ab147e9022524e1
+Tag = 6d36c0b0d699a22da3116dfb8f453181
+Plaintext = c1
+Ciphertext = c7
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = c7c8e7151eb6844a954d091b460f83add0f0a634aa5ac213b774f2451aa497fb
+Tag = 0c3a1690acc3f0eb09c9cfd3396c7fa9
+Plaintext = 31
+Ciphertext = 37
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = 63f00b2488809fdc49ca5f05d54e98468906308115f7e702da05ddfd970b5537
+Tag = ad45070fe4c61270c13cc52247fee411
+Plaintext = a7
+Ciphertext = a1
+
+Cipher = aes-192-ccm
+Key = 992d38768b11a236945bd4b327c3728fac24c091238b6553
+IV = b248a90b84b0122a5ad8e12760
+AAD = 8e2c5e55c0bf70014e9897b6f6940e4e738b1e84e8269b6382f0b1fe59b0e162
+Tag = b2a2a8b283ff7eeff5c2670f77b8809d
+Plaintext = 40
+Ciphertext = 46
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = 40affd355416200191ba64edec8d7d27ead235a7b2e01a12662273deb36379b8
+Tag = ef3d6ef9f981557506ecc8797bbaaaa7
+Plaintext = 0c6c
+Ciphertext = c996
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = c5e12e17e02bcc12b3a4c14cf837250e2886db3ee1c717d28bd11e8a3b764ddf
+Tag = 4405257a837c5343b59d5689d6de5269
+Plaintext = 23df
+Ciphertext = e625
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = 213b5b6015d472bd593be5acf85ebba6d6a09f3a962be302ba83c6d70c61f241
+Tag = e93e67d37d2367bb1f27f71b54b29317
+Plaintext = 0dc2
+Ciphertext = c838
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = fc1b6e152fe232b6c10b5d89900961c445f4c46833df242c826678b68c869811
+Tag = ca3744a4ab375af9060621a9dc4f4c32
+Plaintext = dc88
+Ciphertext = 1972
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = 5b2eb1a6fa585d61d1fb3da68f5b93829c8e2d5e4fe03782617553d7a130ecf1
+Tag = 172626e930d24052bc056d8609c4175f
+Plaintext = 8179
+Ciphertext = 4483
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = e2b3c3bf33cf847660929e48cce51d9d9289945169651aaecb1e939756e93105
+Tag = 852310207be8d3417de800b372700da2
+Plaintext = 01fd
+Ciphertext = c407
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = 6051f12cd8aae68b4023aaf7178fd086aa582b8d8821e36637abc97025f5e858
+Tag = 28553bc037954dbf4ce5db99792c2c7a
+Plaintext = ca18
+Ciphertext = 0fe2
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = 2d3555faf285caaddfe95c010c2a7f233e09c2fc0cd30d644035269280527ad7
+Tag = 904725668634d6345bd8f90a3831b452
+Plaintext = a855
+Ciphertext = 6daf
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = 4fca820dc545bf93bdffed33a04b67eb45384e696f092c2197e5d79cecd09913
+Tag = df6098cb3135c3045a54ffce88efaceb
+Plaintext = 5555
+Ciphertext = 90af
+
+Cipher = aes-192-ccm
+Key = 5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30
+IV = b67e500b35d60ad7264240027c
+AAD = 1789ae403e183d2225f431f001d475b53bccdec66572bb027340ae592839ba8b
+Tag = 8568e8c08ff5ee5ea0a608589c2fc029
+Plaintext = 11dd
+Ciphertext = d427
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = 31a0338c3839931fa1dd5131cb796c4c6cfde9fb336d8a80ac35dec463be7a94
+Tag = 98d9a2147776dca9c1a42382bce323b2
+Plaintext = bcb898
+Ciphertext = 68f082
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = 4863dd810ee70ef0f5da81f60c5ce550abb96454619032322e34657af25207de
+Tag = a9a77755b324f3a557217752ade14ed7
+Plaintext = d1da2e
+Ciphertext = 059234
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = 173594fc26b167f044aeaf9bfe920cab99a27eb2b01827d61f7553cb2018b5fe
+Tag = a4441a79a90e228a28069fe109d5d876
+Plaintext = 394f31
+Ciphertext = ed072b
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = 71cdd16eca9255aeedc23bd623513918ea97da21485074415fe75bcc42f454c0
+Tag = 65f272f44c5210b5bcc571e819580910
+Plaintext = 868bda
+Ciphertext = 52c3c0
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = e84418d332d16d2298e69e7ff3c37bc7b6e030cc822e73b3f4a0029bc2ea4d80
+Tag = 59c5f7f73a1b5f419c9f63ca401894a8
+Plaintext = 52d6bf
+Ciphertext = 869ea5
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = 42d962109bea1d50be0f3d83b4c2a6033d53b3d7112591866b1ae52dc84cb5d0
+Tag = 220b828cf5365137fb3f1df67cc8d2a1
+Plaintext = 6f8d58
+Ciphertext = bbc542
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = 943b4327b5c70dba63c82f27e0412b3ada012bc0f7dd39ebb13db2f864daf80e
+Tag = 422b0f41075ac79a0afa2d1047cbbfb5
+Plaintext = fda286
+Ciphertext = 29ea9c
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = 6076b94caabfa476ab7e6482e4fda9b29f2e2b2883efe44d668c7c74628505bb
+Tag = ae68cd6d6815ecbfd01293d160d4d38a
+Plaintext = 8651fb
+Ciphertext = 5219e1
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = 3e4bb5781f84b4bbd23583e3dae561c6ff4af8eff35e2a4f35b50d2f360d3469
+Tag = fbaa81cfdbcaee476860cd5102f556e4
+Plaintext = c3e179
+Ciphertext = 17a963
+
+Cipher = aes-192-ccm
+Key = fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992
+IV = e5257aed2bda0495aa44591db4
+AAD = 364008acbad330d0b8d574641a97b0682c49279cfdc80ff309b7514514d18a44
+Tag = 7ad1520564b68824a3a939371c21a336
+Plaintext = 4a97d5
+Ciphertext = 9edfcf
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = 1225b036e6044df52314016760e92750de0936120395de750a2c54a7fa0cea82
+Tag = 9344e2de064f269d065a2a6108605916
+Plaintext = b46b343e
+Ciphertext = c2c39d6f
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = aaa6257d6783936a4445833c2ac3bea8cb7334f22ade9c035d515bbc91d6a78a
+Tag = 693d90b8297b90bc41c231d08b0204fb
+Plaintext = cb216301
+Ciphertext = bd89ca50
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = 1c1915fab09348b9a5536495c70d1a040305708c1124797e564b63e008e7b8ab
+Tag = 9d0146fe373437c529fb2eeb169e4bd7
+Plaintext = 697a8696
+Ciphertext = 1fd22fc7
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = 864d0f786497c7ce283762ca0959ec9c825ed445a5dbe5b4b2e5772fe88ce7f5
+Tag = e389c549bfc4ede936d7896e544b23ad
+Plaintext = 6bee3db9
+Ciphertext = 1d4694e8
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = d5388b0b548c58886dcd335dff2b1ed23ce3eebbb708fb5bbd831c83e959d3fa
+Tag = 95177a9fe6d9329a585c8737c92a4d29
+Plaintext = 85d95855
+Ciphertext = f371f104
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = 83cddd189736f224cad6a29efba45e43c75450a14f1541713b7fb926ffc768c6
+Tag = 3914431a10b1f94a2b99b9e442f3dca4
+Plaintext = e8b23340
+Ciphertext = 9e1a9a11
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = 8fccbd1fc5240691cf24e8807bf3416c1b2d87fc86dbf3955fa2e52b9a3a8457
+Tag = 383d8dc98b22010dd93cd0cbb396d9e3
+Plaintext = 595c4d7c
+Ciphertext = 2ff4e42d
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = 513d45f6f37f3f051667dc743215059e06e4fdc8945789b16d50556a2e839368
+Tag = 40c513bfc92d1a7db5ed7cab2d8212b0
+Plaintext = 314e0c7d
+Ciphertext = 47e6a52c
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = 70828be102e554f0d4b07641fa3254bc8db06eefaf5b85a7c97e01c217fc8f3f
+Tag = ea98f4ac6b3eabd483f1e6ab92f3b83c
+Plaintext = 35753e32
+Ciphertext = 43dd9763
+
+Cipher = aes-192-ccm
+Key = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf
+IV = 2ef29d62b40d8643848797cde8
+AAD = 343d5a4ad39acf81adcf24e9807618932abcb3bc076734f179174c77c8cb89e9
+Tag = f99fb67b1e2aba2d232db2445e6aec2a
+Plaintext = a531c0ed
+Ciphertext = d39969bc
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = e04e81e860daf9696098c723085d8023c240ebe7a643131e35359ab04bd650fe
+Tag = 43ddf77b33d8cf2963ba76fd4e19f3c5
+Plaintext = 8ceaeb89fd
+Ciphertext = ec9d5ed362
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = 6217cd581d4b3b2f7bcf1b8dad9ad6430e2e3a0063cad52260e0a1cd6fc9e73a
+Tag = 6b73fe9e638e205b27f78ed1bb9b0ed0
+Plaintext = 7e51d6f870
+Ciphertext = 1e2663a2ef
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = 8aa7847e496f5e9f1f87851442de844f27a21c1b48f82fe525f0dd5a88b8ec38
+Tag = 5936115e23158aff1916edec241fad56
+Plaintext = e0023b674d
+Ciphertext = 80758e3dd2
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = 3612abc865a4d8d7b86a84109388584df6526525adb1006ec6c8d00048d725bc
+Tag = f15aae4b70dbee244be1daa74475d7e2
+Plaintext = e2b5b6f36e
+Ciphertext = 82c203a9f1
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = 849a99c6f1cae0ad4bcde4bd0811e87ca5ed7b913de1a8285a206e980b4b7043
+Tag = bbff424487848385f8501ab5a77f327c
+Plaintext = 9a17e4a22a
+Ciphertext = fa6051f8b5
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = 9066367c784de0a4d1116bbe95ce55ded85edddb6273c2049ee24e0fb3429352
+Tag = 72d8d5da6f593a8d9956731b42645aa9
+Plaintext = d4e765fc78
+Ciphertext = b490d0a6e7
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = e7aa9f767fa8920f96f91c41d9e86755faaedaeda596a444b65f99b7a9e23e85
+Tag = e3eca12b835dcfd08166ac8831585626
+Plaintext = 1074349e10
+Ciphertext = 700381c48f
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = bc0db1ebf910b6f4dcad5401401d6bc2272e23130947dc236ca664d5b5ed6d66
+Tag = 2bcce66018e9e552d2c8a229301361df
+Plaintext = a46dd7fb58
+Ciphertext = c41a62a1c7
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = fcbeba2d0d73239d05f691a52b08152c9dd871f8dc76c2c18b8a638a74460d31
+Tag = 3e41a50a28ea3be14baadf12964a37c4
+Plaintext = 2e0ca09221
+Ciphertext = 4e7b15c8be
+
+Cipher = aes-192-ccm
+Key = 30419145ae966591b408c29e5fd14d9112542909be5363f7
+IV = 27e6b2a482bbc6f13702005708
+AAD = dcdefce64ae4339f46c0759a4a10b29d59daaaf1e5dbf75cf11b4e4f73c5025f
+Tag = bee2ab25bfafa76dc3e54832b2f76864
+Plaintext = 2e108ce0fa
+Ciphertext = 4e6739ba65
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = 691dd98f61fd213b0840ec5a6f06ef9a1420be0d59bde5e43546347a2a865a94
+Tag = c15536e21d961c675070ec4cff9037bc
+Plaintext = 24d6880aed7e
+Ciphertext = 270120f9634e
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = d1fd047cdb18463766841abb1fcd25257f1458b595bfcf24066ff9385232fa97
+Tag = 9b303af0b098f902dc24e66fe56adc6e
+Plaintext = 2298028d0213
+Ciphertext = 214faa7e8c23
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = 65a480d120a0459dab69e8f23094801e10092666cc56f9fb2549662982bda6d0
+Tag = 1b657925a9740d6828bd85cd12205764
+Plaintext = f248e5225e3d
+Ciphertext = f19f4dd1d00d
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = b738a53fbc9689dd49f68f97f5a99665258cd52e74dc653b594cffec045508aa
+Tag = 395a1c49129ef6cce0ad5f6ef378aa1c
+Plaintext = 611dade00cec
+Ciphertext = 62ca051382dc
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = 7006f54184f0ff0ab215ca408d46325b86c1cbae6da7838435b1826ff81f55dd
+Tag = 5e68468d1b2b516be3d688567d84ab80
+Plaintext = 5871a8300471
+Ciphertext = 5ba600c38a41
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = 9e6e6675d4c6b1e0f3894aac071f4c99a364708edea12f319cbc27b40fabc0f1
+Tag = 0ba1af163049d16817021665d183bc9e
+Plaintext = 3ca8a7520e94
+Ciphertext = 3f7f0fa180a4
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = 10ceef716f54b74d7c8a435d6aa38a10ff23939ca29e2de7b6c3e0a8269a23c9
+Tag = 670f35869da9821b6ff1fab3e6062ad4
+Plaintext = 9c2a0070fbba
+Ciphertext = 9ffda883758a
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = 3ee0865f29be50160273b4a94ec078932b9cd10a858e31838d5b607867e1ce69
+Tag = 08f395250fd79087c858b83755411114
+Plaintext = 436179c74fd2
+Ciphertext = 40b6d134c1e2
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = ec2b8bfe1ccd491b02aa4a9178fd6f099556963e39e2ca5fe6ecb6b5d2a46085
+Tag = afcbd9af2d584a0f638d066f2496d9be
+Plaintext = ecfa41c614c5
+Ciphertext = ef2de9359af5
+
+Cipher = aes-192-ccm
+Key = 748ad503388a34041a7bdae6361d57894357c333bacf02ca
+IV = 518b79d194579b19f2d8845b70
+AAD = 5b6f6369643d83b1db33d75257d7dea761e574e6e1f1ecead64e5e354a2f4235
+Tag = 17861882b8930296fd51d969a1e9489e
+Plaintext = b48c10105dbc
+Ciphertext = b75bb8e3d38c
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = 1cf83928b6a9e525fe578c5c0f40c322be71b3092239bff954dd6883738d6d71
+Tag = f4b6cab1383adb420c4724aa7bdfefb7
+Plaintext = 2a755e362373ef
+Ciphertext = f06238b0450fd1
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = bb5450f66273f63b2f79dce177381ce846584ce4f7a0ad5a0171a56e149370bb
+Tag = a1f99175d3dff5a73f0053a95c36fd8d
+Plaintext = fab43224bf8989
+Ciphertext = 20a354a2d9f5b7
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = 3e5e1037bd2922eb20c34200c470b76e537baf7e7f1d8dd2f7a184a593c66554
+Tag = 34b4ad0e41117940abf530093dac648e
+Plaintext = e3aed6715aa429
+Ciphertext = 39b9b0f73cd817
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = 3cc88a096a1a440827f5b7da675389e50b5cce35fa2cc36674d6bfc5a3a966b2
+Tag = 663a8324014550430c7eaeffbd8568f7
+Plaintext = e78db0f83997cb
+Ciphertext = 3d9ad67e5febf5
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = 2cca33a10b9da7ba99a6b552d1405f2df3fdfd15358d8fdab5e15296b38f9135
+Tag = 34ab635c4eb5b38b86e71da8af3840ae
+Plaintext = 726557906845b1
+Ciphertext = a87231160e398f
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = 2fe5dd58b17914187e29029c53cfe5b015ca74cab750d8f95e05f818c3cdf947
+Tag = bd9961766e03eaa7e8888227c98d1f42
+Plaintext = 043a759b578be4
+Ciphertext = de2d131d31f7da
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = 8b8e3d7c88fa16d70130cee290b7e2eecf0ce711118cd9265093b11467e63554
+Tag = 637842d96d13c4aab97e296458745a9d
+Plaintext = f31f2fb4b3fd80
+Ciphertext = 29084932d581be
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = 6341370e126097f9721a13c977eb4875cf1286e15c3adfa4e7597e0e13d93b6a
+Tag = a51ac46611366c666cab6bfd3d1baaa5
+Plaintext = 7e3c8224104669
+Ciphertext = a42be4a2763a57
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = 227926b62f7cdd90e4d3b0cb5457e71fb087d329671f0fa891ec06eb8edeb58a
+Tag = 8c7d7e5aec14845f844ad38544a2f11d
+Plaintext = 26a0528ae6f9c1
+Ciphertext = fcb7340c8085ff
+
+Cipher = aes-192-ccm
+Key = b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775
+IV = 7574802fd82fe96c05431acd40
+AAD = 05b50c40b02e79b74b94d726a7ce8b2b7216ef8af6e7a42d041d2a692a58ad83
+Tag = f1605ab8a2332012b759ccd2eedbed24
+Plaintext = 61dcf53d1a184e
+Ciphertext = bbcb93bb7c6470
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = 5c7ce4819b30b975ae6ce58dcc1bfa29a8b6dda8f4b76c7e23516487745e829c
+Tag = 07482362ab3f157c42d0e9c6c5cffcf0
+Plaintext = 4d54d8b06b204445
+Ciphertext = 2baf90c490b11f96
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = 90257ed88679197b8219bc4c2434a71a4e3664d5859c4ffb9a075654898ffedf
+Tag = 5389509b5b6f2df1faf7e8c39203970f
+Plaintext = b2a35df881cd63a2
+Ciphertext = d458158c7a5c3871
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = dff8ad83525d8235eacdccc91abeb80795e6b5f463fd28af35c46199f646ceb8
+Tag = 95328747ca544e987df28883d0377b35
+Plaintext = e98f5e5a20d02c80
+Ciphertext = 8f74162edb417753
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = cde159c5343cd9d98001cd719d3e9ea25e47e1ff13fc87055d4a53b741f59285
+Tag = a4ba841883a0d7aeda398c043161966f
+Plaintext = 90c3e48313cd4fe4
+Ciphertext = f638acf7e85c1437
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = fa88cf5a08be4fb0c1a7960f45726c303eb559861fa60d17aa8dfe8bb5795382
+Tag = 09195efe66c5faf413e0f68df8cb647d
+Plaintext = 8ad6d5a28ec075e6
+Ciphertext = ec2d9dd675512e35
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = fe9e93a9370b43efa1560aeb017ff04fca7f207191e6f707c1c35b2e90c44eb2
+Tag = b51af067ad69ad96009e50ead3d03f02
+Plaintext = eb83928f0d5f7aa3
+Ciphertext = 8d78dafbf6ce2170
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = 35792c854fdf1c8cf7f3f8ed2b8ec4f31fe17bf8d4ba49caec03f954bd8bb17a
+Tag = 6b1cb03ee76587f84364825f7c1fcbe9
+Plaintext = 4cd74ed2fd083011
+Ciphertext = 2a2c06a606996bc2
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = c084108f9c0a74cbf70f614dceae592546865006930db0401828a0eecff98671
+Tag = 8fa70c5e195f1f955d64892f532b7683
+Plaintext = 52365f94579e0646
+Ciphertext = 34cd17e0ac0f5d95
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = e8045949de61c5c18a63e628330a4d1d12782379a8f9187755409d1825f453c5
+Tag = 2ddf297bdad58083645a052815d29a83
+Plaintext = 8fb85c857a3e38e7
+Ciphertext = e94314f181af6334
+
+Cipher = aes-192-ccm
+Key = 314c136999e41d137bd7ba17201a9fa406025868334e39b3
+IV = 65f7a0f4c0f5bba9d26f7e0ddb
+AAD = 53cfdfd66d63c2924bd583487b90b1dd9ec199f90d660cb9c3a763a4776abfe1
+Tag = 1ad3b2be41dbc39df4c0145dcbae3e76
+Plaintext = 43d2828e86f7856b
+Ciphertext = 2529cafa7d66deb8
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = d68d5f763db6111c5d6324d694cb0236beab877daae8115ecb75d60530777b58
+Tag = 467fd8e139eb9ee8fcdca45ed87dc1c8
+Plaintext = 13511ae5ff6c6860a1
+Ciphertext = b3859b757802ebd048
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = f6e219b29884dab9ea9bad34d9ef8a50ae389c9a908de7154a1f2e894f27141f
+Tag = 89d0ee8323ea2ee7a68aaaa9c49b98df
+Plaintext = 7e7e33e1a07d4e8fde
+Ciphertext = deaab2712713cd3f37
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = bcca002d69d9d1044c40ae741ea33ce6b8463f5a28d0514e044fdae2fe7d3c3b
+Tag = 37c9fe3d9feb0485e6d7c04423b77a53
+Plaintext = cc88980c73e6c5f0cd
+Ciphertext = 6c5c199cf488464024
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = 39cac8f0825ffdb0668455933ad1581263a23b9e5f1305340528f0320d4b1269
+Tag = b87e90a71ffe6c30bee1771078a701ab
+Plaintext = 34cb528f50d073cfdc
+Ciphertext = 941fd31fd7bef07f35
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = 510a02a44d142c8e975d1d933f828fd7e47d28b88223f1698cf009dc3b079be6
+Tag = 9e9c5be0657649448c38692e8d703d30
+Plaintext = cbce3df86438a61065
+Ciphertext = 6b1abc68e35625a08c
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = 40e0418cd52f74d78a8e18ed86210e3661a86d8574aedcee540340d8996d9852
+Tag = 13e5f2bfd33101597cfae7cf334a8528
+Plaintext = 80a2b835f8b0729a4b
+Ciphertext = 207639a57fdef12aa2
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = 1f2938b3bde19e1af91299c08638061dc3c1ea3284c259d415e996477cb37b0e
+Tag = 516a7310fbd4ceb90d8db9a86cb6311b
+Plaintext = dd04794e65ce34127a
+Ciphertext = 7dd0f8dee2a0b7a293
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = cbae5b46e35fa2a279dcaa4c724b923805d4707412a84252b64228c91cedd019
+Tag = ef6165af65f3522dfbfed0293db39ecd
+Plaintext = 00c4101052f54462d5
+Ciphertext = a0109180d59bc7d23c
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = d0f27c7f42892f3ad4c0029c5b698abb1d035ba5869a665b1de8861db6c055e8
+Tag = 0726434c1349e3e874a2d6bf598d05fc
+Plaintext = d0865445d3b26b6f49
+Ciphertext = 7052d5d554dce8dfa0
+
+Cipher = aes-192-ccm
+Key = a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab
+IV = 7f2d07f8169c5672b4df7f6cac
+AAD = ab0f5a829a9319a74d5d5179aa0a410a0fcf52f344a7a896aeb1f7a6c5d398ea
+Tag = ab491e60fc97b3cb5248291e4866dcab
+Plaintext = 7c7c8580b944ed3fd3
+Ciphertext = dca804103e2a6e8f3a
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = 9ad52c041390d0d4aaf65a4667c3239c95e7eae6178acc23fb4e70a852d483c6
+Tag = 6aba025abc01416a7ca9f096ab2529cb
+Plaintext = f777aba1fa70f94e6de9
+Ciphertext = 9d8bff6d2dcde77104ac
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = b49c7e7b47870c1cc339c7c09aaacfd6115fa8a0f04990367eea10cfacb9d23c
+Tag = 4acb200e85a0d4753a8ba226aca72f98
+Plaintext = 349feebfbe58f93ea3c3
+Ciphertext = 5e63ba7369e5e701ca86
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = e61ca7310172eec16745a73e34516f65844eecd0dbc5566ac5213626b9096ef1
+Tag = 7869784e3321183d8c044657a020e9b9
+Plaintext = 678a40b4c2c7df0e4c9d
+Ciphertext = 0d761478157ac13125d8
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = 690f5e5d8da6cdb0f492e80449e152ffe88fea9742564d8383c79cef739a7f74
+Tag = 70634d00b1facf0e9e9979ca257a71e2
+Plaintext = 2b81e0533313664bf615
+Ciphertext = 417db49fe4ae78749f50
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = 78e34b0a1d61ccd411cbfd306ea2ef3ce89c0b085deb4cfbaec2ab72ce16daa9
+Tag = 994630ed92e2973b22773f229b45bdad
+Plaintext = 1ac63aa38a206d8e7d68
+Ciphertext = 703a6e6f5d9d73b1142d
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = 51bacfcf87ea11da34b76acba8c444792ec3db3c8ee6e600d69679975a682a54
+Tag = 04571b015bb6b4651f1eb9f6fb3a7b74
+Plaintext = 027a7fd7897808ec7a56
+Ciphertext = 68862b1b5ec516d31313
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = 5159357a133e4743f903d05bd641da369a3675337760fcd2424a99221ba70b78
+Tag = bb0e11ac4608081fd0702a137da0aea3
+Plaintext = 1086953d352e94a51a6d
+Ciphertext = 7a7ac1f1e2938a9a7328
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = f567820865340314d46a17f520ff315efb6b33bdeda590ca9c4fad604c2d8e8d
+Tag = 52c9ec1317ce30dffeb4c9bf3fd0bbdd
+Plaintext = b8b148aafec4a035e9a7
+Ciphertext = d24d1c662979be0a80e2
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = 0cfec933831644b468724e808bb3d25fe8f15850ce513fc341da46089c845208
+Tag = 691e32be3cdd9721a13aabad26dba58c
+Plaintext = 884242a87779d3921f8e
+Ciphertext = e2be1664a0c4cdad76cb
+
+Cipher = aes-192-ccm
+Key = de1c8263345081d2dfa9afdf37675971135e178df554a4d8
+IV = a301bb82f91a582db01355c388
+AAD = 8edc2b85d44297ac66bdd90d05d8df38124033d6a583bb8dda18a2246ba096e8
+Tag = 333a381be77800654aac335bf9220ac9
+Plaintext = 25c32770a299020d8500
+Ciphertext = 4f3f73bc75241c32ec45
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = 9ec08c7ed6b70823d819e9ab019e9929249f966fdb2069311a0ddc680ac468f5
+Tag = 0cddce66df9b4802f737bea4bd8f5378
+Plaintext = 33709d9c7906e2f82dd9e2
+Ciphertext = 9114d36b79b1918b2720f4
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = ba13974d95f2eeb367b63850609c53dc66c2710f682f10bef0142d48f851b430
+Tag = 12c94615be2bd81bd598f3022f5775a4
+Plaintext = 84172985e7d194ba28a87c
+Ciphertext = 26736772e766e7c922516a
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = 5f16180bfac9b7483774cb0e1d57a43e9bf3cf03bf6fe758293aadcbbef25b80
+Tag = 2758e936750e335702542bc598e211c4
+Plaintext = 9a34d32070c71d7de8f512
+Ciphertext = 38509dd770706e0ee20c04
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = 4352057bdd1735a85dc0fc4dbeedc73279c27eb24a97641236f03f11cdafb8c0
+Tag = 0762bb2a7d04ba2ad251d595d0619dc4
+Plaintext = 2054a268b1f6fae4f15d91
+Ciphertext = 8230ec9fb1418997fba487
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = ddf118ae403b2509e75eb7a26d17e73e527acbacfbe49a56fa3210169030144b
+Tag = 27d85594da3fd35bd8498d7e389ee7cd
+Plaintext = f71afe9a60f08a0ef694aa
+Ciphertext = 557eb06d6047f97dfc6dbc
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = 973904409e8154132439926f0dc45c0d81bbbd5793f7f81e20eb818bfa374d58
+Tag = 055936db383a8ad10b152046d721d3f7
+Plaintext = cdf5b47ff73306aa55c496
+Ciphertext = 6f91fa88f78475d95f3d80
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = 06bca7ef6f91355d19f90bf25590a44a24e5a782f92bc693c031e6de1e948008
+Tag = d57e228369e24fe955fd8924526af6e5
+Plaintext = 9ebf93643854ea5c97a4f3
+Ciphertext = 3cdbdd9338e3992f9d5de5
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = 8321f65baf9dc856ac1c24f3fee5c74d697eb0b50470d59d8f4a14b506e86c53
+Tag = 6c23abfb3b4eb39deb8da2064390dfa8
+Plaintext = 685116faa5cc527ac8bfa1
+Ciphertext = ca35580da57b2109c246b7
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = a4e7738038a5116592bb9d92d6d4ed191ab774310f6409e4e45fe907674c006f
+Tag = b4272c0639e8e6a1d356fb4fea86762c
+Plaintext = 9e8c4f1292e8d7e5179b34
+Ciphertext = 3ce801e5925fa4961d6222
+
+Cipher = aes-192-ccm
+Key = 248d36bd15f58e47fcf1c948272355821f8492e6e69f3661
+IV = 9e8d492c304cf6ad59102bca0e
+AAD = 0df202431ee7f251a38aaf6aa8cd313782bd293af9114005adfe9faab253b572
+Tag = 0633a0f9cdc9490231ec2dd69f6e35db
+Plaintext = 3ecc2ba566c723462eb0ea
+Ciphertext = 9ca86552667050352449fc
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = 8c18486d52571f70f2ba6a747aaa3d4b3ebc2e481ee1b70907dddb94bdfa0ca6
+Tag = ff4b0f2b2a5067283210aba8630d0306
+Plaintext = 10554c062d269ff6dcd98493
+Ciphertext = 7f8b0cad79b545e5addf0b04
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = 4e0b4771c7f6c66f9577c430611fdeec5702296ee3691b6bb8c6a81217edabe4
+Tag = 5b16dbdf0b9be3c8c82ac652992d630d
+Plaintext = 1c9e7875cf02129ac52daeb0
+Ciphertext = 734038de9b91c889b42b2127
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = 4a687e1d0a95ed2efb95b4c6b040999fcd35136811cd665f934d10224b6064c2
+Tag = e629274d654ef5a4480e24f6bef3bc8c
+Plaintext = 34575694dde459d195b7357a
+Ciphertext = 5b89163f897783c2e4b1baed
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf823641a12bfce9f5
+Tag = 42ab5407a08b648ce24e9955e28fe47e
+Plaintext = ab20c8e8aab1aac1e4f64206
+Ciphertext = c4fe8843fe2270d295f0cd91
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = 4f19bbc3135d7a216465b4c1df2616e8bfc3cc64af0bf52bdc42543f4d2448d4
+Tag = 151e94d311c7cd2c1b9048575076ceac
+Plaintext = e556ca05bcd1991d2c9836a9
+Ciphertext = 8a888aaee842430e5d9eb93e
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = b6ffc7387b19786282bda7caad52eb37fbe7e557afcb80faaf57767e2a0f178a
+Tag = 61b71330d72506050368186a5619f180
+Plaintext = e5b665600a2aa413e117c538
+Ciphertext = 8a6825cb5eb97e0090114aaf
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = 6a493c5ef3769ccc4101dbb2eb36e1e5bbc577a057ce0731203ba3f25b52497b
+Tag = ea21e36f99e5aab6ffa85994d13d5bb0
+Plaintext = 870864a611aa0475d120bc40
+Ciphertext = e8d6240d4539de66a02633d7
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = 8215753d9efc51325f182199e39f9082cc3fe524400f2a7434c68df7eb2b06d4
+Tag = 7cc93a50dea11c5e0b19f14b9c8f16bd
+Plaintext = 71afe8d00c6f2ea8c8b050d4
+Ciphertext = 1e71a87b58fcf4bbb9b6df43
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = eb8f198da6ee92a03913c6575343f6c749d2377a09430eb751b13c041e6edbea
+Tag = 99cbfd1beafa2d2942f6812b8dfc88e6
+Plaintext = 7021f18b8f398a5999fcdcd1
+Ciphertext = 1fffb120dbaa504ae8fa5346
+
+Cipher = aes-192-ccm
+Key = 77a67fb504b961028633321111aac2c30eb6d71a8cf72056
+IV = acadc0330194906f8c75ac287f
+AAD = de2ee30359e390db72f682c2ca0f14b72b60ff9bccd8c6fbd19a512b12add794
+Tag = 337405235dce6161441caa25cc6007c6
+Plaintext = affca856eb412f0b3276ae6e
+Ciphertext = c022e8fdbfd2f518437021f9
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = cdd9bf1b4f865e922c678ec4947ea0cb02e78bd5c1538f33aeb818ad3f47e519
+Tag = 37f16761dd6aedbfc789ad96edf1490d
+Plaintext = 4021ff104ff1dbd91e46db249f
+Ciphertext = 7953d3cd66d093785d123f65ba
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = 342de5fe61e05c2e58ac2978a871fbdf186a7294ec5f85c4631c21b584231211
+Tag = 8f8e855ae975a1fc64bcce3e7492e9d6
+Plaintext = 95050ca1d494bdb561d4840f8a
+Ciphertext = ac77207cfdb5f5142280604eaf
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = 7871482948d8d09d0a7491d915543082cb5fc7d6c1e82ee2218279f54c15c154
+Tag = 017a6515156691b3161b747576078da4
+Plaintext = c45823203b20821a48502f9c67
+Ciphertext = fd2a0ffd1201cabb0b04cbdd42
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = 65781d018f27ca0c72a9fa9ab4648ed369646dd3ce45d7ad3a54f6b051f1b6e9
+Tag = 25cec7d2566a07cd78181ae94577befe
+Plaintext = e901661b7d47c9918244ee1077
+Ciphertext = d0734ac654668130c1100a5152
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = 05556b04dae5cde8525633d1862aa200c54af534e302d2cbd34ddc2b78532a60
+Tag = 133f51dac00f973fd42e0948fab70ea9
+Plaintext = 5556f799d6a6cffb343f28c1a9
+Ciphertext = 6c24db44ff87875a776bcc808c
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = 151304e3e4f3c2d4d3227e035d849e0d3841ba00cf6cab1cf2e3e4d6cc760623
+Tag = fe78bdeaa8d408ffe8fe64811aa87742
+Plaintext = 56bf26be81c7b55ef898e23981
+Ciphertext = 6fcd0a63a8e6fdffbbcc0678a4
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = f870cc1fe67d6169279f905b0fe5fd9a0436c36498e4b7c6f584f00f7efe8784
+Tag = 97228d155dda2bc814ff33ebeb9a7ffd
+Plaintext = 36b304a72dbf4acfffa1d7d624
+Ciphertext = 0fc1287a049e026ebcf5339701
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = 5692c9d452ea1c067e62fdc554ddd2b18c8433d59067f971316797fd9853ae6a
+Tag = e7ba03e144e34a4ab34791a372a2b8ab
+Plaintext = fb529eb5ae79a0830474ffbc98
+Ciphertext = c220b2688758e82247201bfdbd
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = dcf7fe16b7ca9e27ec3291103398eaa2e77c7b770b67f8858c215af4c523822d
+Tag = 03c2eb5ef0657306d12b753a0694efcc
+Plaintext = 6218c778955d9a56360f06c704
+Ciphertext = 5b6aeba5bc7cd2f7755be28621
+
+Cipher = aes-192-ccm
+Key = 0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e
+IV = 39abe53826d9b8e300fe747533
+AAD = b0f1e2668611dca86e8d0f58c2a4cf4a9472d81ba013e271800b75841fe5ffde
+Tag = 7cc6119151393461ecf65bfe06e0163b
+Plaintext = bf6b143fb713a81c965c5a9d8d
+Ciphertext = 861938e29e32e0bdd508bedca8
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = baa482c64eefd09118549a8968f44cfea7a436913a428e30aa4ab44802a4ba35
+Tag = 8242ac1a1979c5a9e7bc67d7698c7efa
+Plaintext = d64f9426febce6a84c954dd5ded5
+Ciphertext = f7580f17266d68237747bf57c7ed
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = 2ad8ecc5ac9437ace079419f17e6018625b10490120fbe2f12b41e64b73b653c
+Tag = 18abced491c063d8bfd0e7341febddc3
+Plaintext = fcd9b67717bcadeceddea336c671
+Ciphertext = ddce2d46cf6d2367d60c51b4df49
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = 7585ee95e74d7a869bdc0b59ca9939dd57e7b09afab179079d467bfe0668416c
+Tag = 659ecbb3dbfbcdb0f913abedf8afab05
+Plaintext = 18232d7c792fb80e6ca1c8f2c3cc
+Ciphertext = 3934b64da1fe368557733a70daf4
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = 41be6ca6188f34da1ce83fb8c27652848dc2a71e32bd3631fb9b33ae69e5d879
+Tag = a220d5ec0b5397d6b4e323b5dc7d1b63
+Plaintext = 764dbefb42644d18d23e5e456868
+Ciphertext = 575a25ca9ab5c393e9ecacc77150
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = 197cee3b15320d57996191dd13106fbd4546a5cc3d2bcf0c886af52ea3d9a855
+Tag = 3a5f713f5d0793b732c6e114805cc9b3
+Plaintext = 8003586af34bdd0acae4f5547394
+Ciphertext = a114c35b2b9a5381f13607d66aac
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = ee0b647a47656a6e9e09c2d64f734a2cc3fd45b7ee52fea51c24af59ee22a006
+Tag = ed90e8650bc16f590789dcc625b9e63d
+Plaintext = da143266516a4145cde92c93f961
+Ciphertext = fb03a95789bbcfcef63bde11e059
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = 9f5bfffa01f1425d95465723735b49fc1dffbad06cf37a00ca4b59efa21739c1
+Tag = bda183dda1aef021d92210e27cdd7c5e
+Plaintext = 3842b033f3ca31a6f8e5a638b39e
+Ciphertext = 19552b022b1bbf2dc33754baaaa6
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = 64e92ba2748d07f602808f7c5ded15cb0e43140400d37107e59a01e7d45b4c9c
+Tag = 5e4087fb314f893937e95383e66745c0
+Plaintext = cedf60b17185fc71b957cb759260
+Ciphertext = efc8fb80a95472fa828539f78b58
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = 6ebcaeb4bd44ff4c990305ac64264dfe2ada5f7cd4b294eb9f492865cd28905c
+Tag = 0a71ce5813c578532b742d704fa92276
+Plaintext = 035f449bb28f43365f4a0556096a
+Ciphertext = 2248dfaa6a5ecdbd6498f7d41052
+
+Cipher = aes-192-ccm
+Key = a60cf7ceb62bf3118532bc61daa25ce946991047f951b536
+IV = 7499494faa44a7576f9ed5580d
+AAD = db617207dccd1f6baea5f2242d5e577adb8d69af3bb1707a7a53a8b75452455c
+Tag = b7fc45d15d6939668065d2282fc589c7
+Plaintext = 9a2a45424f4965a71270e77cc403
+Ciphertext = bb3dde739798eb2c29a215fedd3b
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = 6d14bb2635c5d0ae83687f1824279cf141173527e1b32d1baf8a27f7fe34a542
+Tag = cb3993ca35acf354cb2b4254ff672e7f
+Plaintext = 25a53fd3e476dc0860eeeea25fcb0c
+Ciphertext = 4a1cfd0023557a184b929965b0a445
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = 9f8a56fecf32fa7d50f033b2524c3d798e254bc87245cce57e38edd6ee5d5f1a
+Tag = a25b5eb103bac224cad66ec0f100875c
+Plaintext = 797dca47597947c057789433309b67
+Ciphertext = 16c408949e5ae1d07c04e3f4dff42e
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = 86f15b8b677b7655f358a2c7fd5785bc84d31e079ed859b6af88e198debd36fc
+Tag = b598cc6ec2295c586e7ae270a01846d1
+Plaintext = e61f9a663d3a2b50ea2f9475971270
+Ciphertext = 89a658b5fa198d40c153e3b2787d39
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = 4de6bd43c28143ea5d40919cb5330a7e674f5bd8aeb7b178343a2851281c8668
+Tag = 97ff732093f7d0a96b30d8cdfd1bd583
+Plaintext = df990c42a268950677c433555319b3
+Ciphertext = b020ce91654b33165cb84492bc76fa
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = a5c3a480dea1b2a1e3a0ce416148b04f60104217c9d24a5b267b4aa6aa07a4dd
+Tag = ad98e32a9156e125ff021ef6951b0c40
+Plaintext = a7e72fb4bec3768594a2f6f5b4379e
+Ciphertext = c85eed6779e0d095bfde81325b58d7
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = 51b041f1666c59045d333fe63d43457107e1adad34fcbf965e0d191f3e414776
+Tag = 390f10df08a84c21031626861b201fbd
+Plaintext = d3d1550047cf90eceaea7000d8e280
+Ciphertext = bc6897d380ec36fcc19607c7378dc9
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = 22f8a3c9d85b2d53ffd92078d3c94373f855ecd01a8ac521d1abd0f2c7cba9ff
+Tag = dd5d840bb8c4348a9a548482e6b93043
+Plaintext = 756412c4ee6416f2f4e0342011cde2
+Ciphertext = 1addd0172947b0e2df9c43e7fea2ab
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = da08b14e1b770b81faaf1e59851df1cba8838cd63bef141340ee378e65fdcbd4
+Tag = 3f0d49927cd6103e3705ba201e8f73c6
+Plaintext = 666e4a4b3f6cf598aa763cdada4109
+Ciphertext = 09d78898f84f5388810a4b1d352e40
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = 2db3ded385ef9c82fd39ea5782d9befe66e8a070066269b2aa7c4bbfac3711c3
+Tag = 2d97f7c2b3b42bf570cce79bf30ccc50
+Plaintext = eb9013a74352b0677a88bd73052477
+Ciphertext = 8429d1748471167751f4cab4ea4b3e
+
+Cipher = aes-192-ccm
+Key = 82d4bc9aac298b09112073277205e1bf42176d1e6339b76c
+IV = 70325ef19e581b743095cd5eb1
+AAD = 194c9e1eaa8e376f9c41bf33823efa28ee60a9213438665b7002cf0fcad7e644
+Tag = d3c2a4fc45d014a0c54edab2930a5bdc
+Plaintext = e3126400e3c571a4d39b37bc938a22
+Ciphertext = 8caba6d324e6d7b4f8e7407b7ce56b
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = 77743b5d83a00d2c8d5f7e10781531b496e09f3bc9295d7ae9799e64668ef8c5
+Tag = 40bce58fd4cd6548df90a0337c842004
+Plaintext = 5051a0b0b6766cd6ea29a672769d40fe
+Ciphertext = 0ce5ac8d6b256fb7580bf6acc76426af
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = e883dd42e9ddf7bc64f460ba019c28597587d06e57c3b7242f84d5e7d124ab81
+Tag = 8707b1a4d9ce3def33703e19eaab6dda
+Plaintext = b31dfa833b0cda20eaa84d2ecd18f49a
+Ciphertext = efa9f6bee65fd941588a1df07ce192cb
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = 409401eb49cd96b1aad2525c5124c509766ff86f88b2011c67a1d501d3485e31
+Tag = fd9041ddce37d88e79fba28e385b2327
+Plaintext = 24bc8dc1e2354667b79ba4d7061448ff
+Ciphertext = 780881fc3f66450605b9f409b7ed2eae
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = 83bf5c063bf1febf71688a832d615e09d6f14badedeaeb6ffbfe343fc7274e78
+Tag = 91d971893543868bd8c69078fc2bdb24
+Plaintext = d41d95a1d2326e12cba636910ddfca53
+Ciphertext = 88a9999c0f616d737984664fbc26ac02
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = 8cdd70524e24318c64d681aa27752d4c86c5348c05c9e48f06ed41594785a6e6
+Tag = 866b23e4c991f4007e56a1ee9265c6cf
+Plaintext = e8a4b80e081919f1912542d3136764f2
+Ciphertext = b410b433d54a1a902307120da29e02a3
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = 615985f63571c0f94ffcd4df77326abd41e84f388f061d97573a181da7ee5695
+Tag = 2abbea637996b954027efa9464ced6b9
+Plaintext = 7fca7388058d6d1438b6eee0292131cb
+Ciphertext = 237e7fb5d8de6e758a94be3e98d8579a
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = 17aa90f2bff0419011b01dee62be31354431cbc89f22332704b096143d4743f4
+Tag = 57bc8d48d82ebefc76f17323c518ecc2
+Plaintext = aa540554ee80dbffa475f702d862d6b6
+Ciphertext = f6e0096933d3d89e1657a7dc699bb0e7
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = 85288b2be612e42335c144fb058a7dcd567c382fbcee3962bd5be4cc7a7000a8
+Tag = 65470c81e487a26cdc26830f2b51bd1c
+Plaintext = 6d745581831edba437e70ea89cad217d
+Ciphertext = 31c059bc5e4dd8c585c55e762d54472c
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = 288f9f52824b54b608dd7226a0a89d43ae8c05107dbae761e1c756911a003b74
+Tag = a3043722be9448c3ef144f2288066f75
+Plaintext = 811a61869c7a6b2aa9ac0fcc523ef784
+Ciphertext = ddae6dbb4129684b1b8e5f12e3c791d5
+
+Cipher = aes-192-ccm
+Key = 6873f1c6c30975aff6f08470264321130a6e5984ade324e9
+IV = 7c4d2f7cec04361f187f0726d5
+AAD = 51dbaba180d4746edbb3420461919b5b735797bf7dd19f84d80475f5efc2748d
+Tag = 49aba95e04e11cf18ddf73773d395c1a
+Plaintext = 378a4e39817f308ed1e639f943b694c4
+Ciphertext = 6b3e42045c2c33ef63c46927f24ff295
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = 30457e99616f0247f1339b101974ea231904d0ef7bd0d5ee9b57c6c16761a282
+Tag = dc5e53e68c51ee55b276eb3f85d2cf63
+Plaintext = f6dd2c64bf597e63263ccae1c54e0805fe
+Ciphertext = ce3031c3a70600e9340b2ddfe56aa72cff
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = 42370f115bbd4b31bb99fe82cca273b3c93072f96b2e09bdc6718d926d48db69
+Tag = c6328a7476db2c10ec7bca3f6bd3df42
+Plaintext = f45fee3e086c28a7c590ec0cc05b972664
+Ciphertext = ccb2f3991033562dd7a70b32e07f380f65
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = e2d692c5678124998a7862b8e87276b0a19e293a609103c99583b36305bcb2b0
+Tag = 8080f0d51d3b8841683eff361984f7e4
+Plaintext = 4ad69a8ab433ed8909825c71f6081f64a7
+Ciphertext = 723b872dac6c93031bb5bb4fd62cb04da6
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = b5b38791160959dd2836ec1ad25286c1ba410d7212347a95b5738a3d725bb651
+Tag = c1428ef5d40bc9e363817f219af2ed56
+Plaintext = 3d47071c13f994cb42fb2887e5c6e53a54
+Ciphertext = 05aa1abb0ba6ea4150cccfb9c5e24a1355
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = 02691171795a77d1e3bdad513b6fab5b50d1def81bcc1df15012de3433a6aa78
+Tag = fdfb37dfd1236198035c8461b304152b
+Plaintext = e8a4b80e081919f1912542d3136764f264
+Ciphertext = d049a5a91046677b8312a5ed3343cbdb65
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = 7371d8ae79e628f53ffede174eb068db2318c05e2f6d94ad2233a59369b16db0
+Tag = cefde0e84a3ce0cb702ceb73ca1dd9a5
+Plaintext = 549aa84bb182312dd016e3107f3b1f9c5b
+Ciphertext = 6c77b5eca9dd4fa7c221042e5f1fb0b55a
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = bb1e1f51082e470f7245458ec902098e1e41d0ed28efa31be71d21ce86527ff7
+Tag = f8441d46dc5456a587b765e1a820c11c
+Plaintext = 31a12ca6d69db2e6e252474d7d59ed6552
+Ciphertext = 094c3101cec2cc6cf065a0735d7d424c53
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = 7584f57b49e95bbf5a67153e18b9b8c4722644e8f611613c39cbe8c679aba5b4
+Tag = d0daddcfcc92349ef059149c54a25cd0
+Plaintext = 5bb121e70452a954f420a56aca8cd5c059
+Ciphertext = 635c3c401c0dd7dee6174254eaa87ae958
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = 505687182c06e6f4effe7fe03c1f436199a9015380ff21d0b2aa9453cfa10b1d
+Tag = 48c1242b89490c6ee69dedc1e91286ee
+Plaintext = 5b80d1cf745b14cb71cbc8dfe0bc7c7358
+Ciphertext = 636dcc686c046a4163fc2fe1c098d35a59
+
+Cipher = aes-192-ccm
+Key = 3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17
+IV = 07f77f114d7264a122a7e9db4f
+AAD = 7ebb051741145a3bad87131553375c6debcbcecee9b79ee451bd1429cbb33fc1
+Tag = a2ddd54e509bca0a45dcf2fd514e1496
+Plaintext = 79ac204a26b9fee1132370c20f8c5bcada
+Ciphertext = 41413ded3ee6806b011497fc2fa8f4e3db
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = ea9405d6a46cac9783a7b48ac2e25cc9a3a519c4658b2a8770a37240d41587fb
+Tag = 0ca478f40a6fbde01f584d938a1c91bf
+Plaintext = 56d18d3e2e496440d0a5c9e1bcb464faf5bc
+Ciphertext = 01baba2e0d5b49d600d03a7ed84ee878926c
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = 72340d595f3dbd23b46513f8f2b73b6249328c705e7968084bcb647fe734a967
+Tag = e4646492b6f4cb169383c075756073b6
+Plaintext = 7a76eac44486afdb112fc4aab939e4d1eedb
+Ciphertext = 2d1dddd46794824dc15a3735ddc36853890b
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = d5c87c649579da3f632ba95cb0a07c924095e4bdd4e0376e06bb90e07460172e
+Tag = f584289f560cbf76606942fe1a92dd63
+Plaintext = 48348c5ec996f7a97ef0ba2cd6885572fe64
+Ciphertext = 1f5fbb4eea84da3fae8549b3b272d9f099b4
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = ffa6277395d31d5db13034d362228a87610e441c98ca3038e252a9db12bdbcef
+Tag = 5964f5f5532d7cddd7207f0e9a6aace9
+Plaintext = d5c58f10e1a03d8a2501d1eaf5fcdfff3ae5
+Ciphertext = 82aeb800c2b2101cf57422759106537d5d35
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = daf83d02a9bd992ea58c23e7ad18d41796314bae20e864e729f40ccc215454fc
+Tag = 90ae047e35aecfc38ffdc07e7d8f5705
+Plaintext = da2a863ab1c58ddde320ecadeecac9c5d2d8
+Ciphertext = 8d41b12a92d7a04b33551f328a304547b508
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = 21ddad5f550044dc5cb123ade17eeef549c4e0173b216bcc602c1e736764cca8
+Tag = b2bdf539ceaa35015712dd15265ca476
+Plaintext = 4573969afa831c244817230406fe51183091
+Ciphertext = 1218a18ad99131b29862d09b6204dd9a5741
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = 9228265ae5c3daf1485ff8011738da508bf2a73731396c5d9aa56fc554e0c00b
+Tag = 241412124ae20b84c13b0c3671d305c9
+Plaintext = edf5557e15473b747a819398c9ac1459ffdb
+Ciphertext = ba9e626e365516e2aaf46007ad5698db980b
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = c0a2ff0de21b3ba961e06015ccd71374856a65a4c57cf8cde0a1643aca8ed868
+Tag = ee9803747bf9fa63412bfc4e10aea89e
+Plaintext = e139263478900df806a0f3446bd6600c1aeb
+Ciphertext = b65211245b82206ed6d500db0f2cec8e7d3b
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = b54378f031a31cf3985f573829c9ffca14616742e0a7e03b0a2d7f05eff0219e
+Tag = 5afdf430b57845dcf622d4f25cdeb2a3
+Plaintext = 660eaff0f113eaa2f5f7ad4b62bb849a3a25
+Ciphertext = 316598e0d201c73425825ed4064108185df5
+
+Cipher = aes-192-ccm
+Key = b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a
+IV = b79c33c96a0a90030694163e2a
+AAD = e67f35c18a9336469eae23040f98f52338ca8d0cab269ac32fe6bc7605d3ea56
+Tag = 7ed4c04c4b4dd585891ecfddeab8cc87
+Plaintext = 0f89897271f5d0349d57399005ea60c0cadc
+Ciphertext = 58e2be6252e7fda24d22ca0f6110ec42ad0c
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = b89166f97deb9cc7fdeb63639eeafb145895b307749ec1a293b27115f3aa8232
+Tag = 87ebe35e883cbd53b82f2a4624c03894
+Plaintext = 890d05420d57e3b3d8dbef117fe60c3fa6a095
+Ciphertext = f842ff6662684de8785af275fa2d82d587de06
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = 4392c3043287dd096b43b4a37ea7f5dc1d298b0623ccbf4fd650a49569a5b27b
+Tag = 07d4824f0a98db2d87365a42ca3b80e1
+Plaintext = 6b425cdcdf8304e7fbb70b2973d55e6940025b
+Ciphertext = 1a0da6f8b0bcaabc5b36164df61ed083617cc8
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = 9b4fc98fcdcf485205e7054bc9d1e02d0d8584420537e20d3821de2fd6824787
+Tag = 404e631735c544edeeb4c0105c55bf0b
+Plaintext = c8bf145fcffbafd6cd1a4c5b6cedfe008aacb2
+Ciphertext = b9f0ee7ba0c4018d6d9b513fe92670eaabd221
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = 45622e1472542be2f63f463d253617eafd4f2ad609f9020884905dd5c22fba53
+Tag = c16a4cf37e8e96eed1217d21133e83d1
+Plaintext = 12b5a76faedf6f855e328c2cb87be8aea78c5e
+Ciphertext = 63fa5d4bc1e0c1defeb391483db0664486f2cd
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = 958689aea3c6cd19020eff9d635ef44ee0793424df38fdf13a238b969d429777
+Tag = 9facf81a636351f6e67d6ec12636ae0b
+Plaintext = f0927c3cb0a876d7877466507da8bfa0bd9a16
+Ciphertext = 81dd8618df97d88c27f57b34f863314a9ce485
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = c22911efc36fa739048af0c951ef2449bb3605c52f65120c4d71fe5976026032
+Tag = 7ce73a7e2db69d30441f89a03fd0e84e
+Plaintext = d2c5d4e2362f19c99de66da7bd9c495c03d9a1
+Ciphertext = a38a2ec65910b7923d6770c33857c7b622a732
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = 799da61e2c10ebb4783f618b8f69da7704a1b2b925cebc228af57d7ceebb9825
+Tag = 8d787a9d06b8533ca96fb1db8aecc8e5
+Plaintext = 1c9d7f5b329ef4d384b8b7955a20f8a3fc15cd
+Ciphertext = 6dd2857f5da15a882439aaf1dfeb7649dd6b5e
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = 14a8e18afe0b9fe18ddfd754219a7e18ed36f419f8262d91678e10daffb31c81
+Tag = 8ff5f819d552c08054b5ac02063e102a
+Plaintext = 3a64414c3588d7c26871d7d054ac6c8420d491
+Ciphertext = 4b2bbb685ab77999c8f0cab4d167e26e01aa02
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = 7294a8b4ad97c81969e4a2876a3dc0ee322d554726997dc9ed98c5601985ee5b
+Tag = 1cde5af8fada67c47cbb5787a6b2d9c9
+Plaintext = 545dd71bea9967e07a89f84a2027aacd132187
+Ciphertext = 25122d3f85a6c9bbda08e52ea5ec2427325f14
+
+Cipher = aes-192-ccm
+Key = 7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0
+IV = 2b9ecfd179242c295fe6c6fa55
+AAD = 99294b22d73805805630fb416d20d4fca67419ab660ff45cd19a3729e81b9f69
+Tag = 7412640b179bd3e8a417dc38462c16e8
+Plaintext = ec1b17b885c018272652453f47fa6e9ed972b9
+Ciphertext = 9d54ed9ceaffb67c86d3585bc231e074f80c2a
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = f799818d91be7bab555a2e39f1f45810a94d07179f94fe1151d95ab963c47611
+Tag = 743f71e15490ca41d245768988719ede
+Plaintext = f383bd3e6270876b74abbb5d35e7d4f11d83412c
+Ciphertext = 377b5df263c5c74f63603692cbb61ea37b6d686c
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = 69adcae8a1e9a3f2fe9e62591f7b4c5b19d3b50e769521f67e7ea8d7b58d9fc8
+Tag = a9bc8cfaf2a1734a792076618c4b9690
+Plaintext = 615d724ae94a5daf8d27ad5132d507504898f61e
+Ciphertext = a5a59286e8ff1d8b9aec209ecc84cd022e76df5e
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = 4586f73a1f162b2cdb65f6e798a60b5f48938d40b4612d84c1f39244f14efdce
+Tag = c5122df904b052e4d5580fdeddf5297c
+Plaintext = 6e923e1f404002aa5cf8f8aaf1b9772da425e21c
+Ciphertext = aa6aded341f5428e4b3375650fe8bd7fc2cbcb5c
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = 9f7ae892e5662803408d4d062265846441a43c1fa202da59f640ae722a692671
+Tag = e0ba1bb1af18e15ade3316c21d6b41fb
+Plaintext = 68115771505daa18bb3ce90054bfb7d077e1f37c
+Ciphertext = ace9b7bd51e8ea3cacf764cfaaee7d82110fda3c
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = 1f0769a7ae82bd985661e031c4a892c15d3ef37bdcfb45243d02f40fdb51d34b
+Tag = dc71e342fbc44289ef7e53e28edf3839
+Plaintext = 681fd2a324b3fea4cfebed567ae4546ba373c8f1
+Ciphertext = ace7326f2506be80d820609984b59e39c59de1b1
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = bf957ef5ab2805e58ea752da5793f7f23d98fce1b2b67738929e5de8a15f9801
+Tag = ced1fb4a2a3e349aa590aabbfc3d13bc
+Plaintext = a7b9d2d069941e8b943706a02d2847ea713bb103
+Ciphertext = 6341321c68215eaf83fc8b6fd3798db817d59843
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = 833264c1bebb597043b4158087cb651960915d9023189c9509c0d2aed84e7fe4
+Tag = 5079f6c2739e2b789b6e3d3c60389374
+Plaintext = 9b946e8198ce69d2173e970f4e0c103a47ee4160
+Ciphertext = 5f6c8e4d997b29f600f51ac0b05dda6821006820
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = 94c8414cbbec52e2d73bb8f02ef687c91432495c0c744666317d02e6d46706d2
+Tag = 2a02f287db7217148317d897f65f6a0c
+Plaintext = 81ac4618f3db6bcf9bbf67220b7671be4bb4f8a2
+Ciphertext = 4554a6d4f26e2beb8c74eaedf527bbec2d5ad1e2
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = fced1131dab3dabdc1a16d3409fa09a90ffe02f0e2c814a63f77f771c08c3389
+Tag = 362df9f8b41b1dd4821f8f14e9e633d7
+Plaintext = 90851933d4d3257137984cdb9cba2ca737322dac
+Ciphertext = 547df9ffd56665552053c11462ebe6f551dc04ec
+
+Cipher = aes-192-ccm
+Key = dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf
+IV = da56ea046990c70fa216e5e6c4
+AAD = 495dfcf91f4735ab35c6bc4deef8468bd988e4099cd291a32b4707f93e13d82b
+Tag = f61ffb51e56497ca9f39c6665fcbdfa8
+Plaintext = c14ce6d57f0fe7367331c9fe159ae1fb8f1ccb2c
+Ciphertext = 05b406197ebaa71264fa4431ebcb2ba9e9f2e26c
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = dbe3e82e49624d968f5463ceb8af189fb3ad8b3b4122142b110d848a286dae71
+Tag = 6f68a03a11cf00d58f062a7b36465d13
+Plaintext = 81ad3f386bedcbf656ff535c63580d1f87e3c72326
+Ciphertext = 9f6028153e06d14d30b862a99a35413413c04a49dc
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = d9acfd611e5bbb08c5d05d56791b8aebabf8d69734ec89153c91a1f65b2e1adb
+Tag = ca1fb470b666523a19f83481f16481ed
+Plaintext = 35f6bb3f6a388f3a5a039b0a495b676d0b928aeb19
+Ciphertext = 2b3bac123fd395813c44aaffb0362b469fb10781e3
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = 6003b771afe4e99e1ef1ed4a31b10540d95f4ac49885f0c8e5cdcb63d213127e
+Tag = 53cb05bfcd64da2b45c2e9a89a380b49
+Plaintext = 6aa7e3802b5a29d4f9ca88eb59f94af783d1054466
+Ciphertext = 746af4ad7eb1336f9f8db91ea09406dc17f2882e9c
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = c371644275a6290821e7d308714bec2bf62d36c30f7fa77a0d60b28894f1c82a
+Tag = 48f70fbc680cf7092b3dd90b943fc6e5
+Plaintext = 13332b67ba5ba18137c306bd860dc3eb0a9a0b871a
+Ciphertext = 0dfe3c4aefb0bb3a518437487f608fc09eb986ede0
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = 8eceb15300ec4220510ed5b7deb3429de6ae5f618e1c222c28990a9ab4b4bac8
+Tag = e386f33c0b8da8d0c5934e617dd618e5
+Plaintext = 05981dc26a1db2d8e2c3d85ea9a4d1dc3432d9edc4
+Ciphertext = 1b550aef3ff6a8638484e9ab50c99df7a01154873e
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = 96d1cf3690c48c77a155ce13e67bbd62e6f03d88c893c1f7c30a6435d5ab36e0
+Tag = 3d2db1360fb1121893f4d197731bce4f
+Plaintext = 60249343a8cd4d33c6edc583ea7e5c221ef3064787
+Ciphertext = 7ee9846efd265788a0aaf476131310098ad08b2d7d
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = 379bbc9f919dc2a8687f2a86cc9c3291804240a9b566c58519956848102e6155
+Tag = 335ce1bfafc0948f2523e75f2aad86f9
+Plaintext = 79003a8d3d20d412f468f11712cec4d37cee847440
+Ciphertext = 67cd2da068cbcea9922fc0e2eba388f8e8cd091eba
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = 9bff9c9a8f94cd77e7016748da31f86d1b9c68465cbf954511c93a4776981524
+Tag = 7dc265e281307f0f4c38cddc556ac725
+Plaintext = 7d078a8b200514a00628756250d410f7a0f8a769e6
+Ciphertext = 63ca9da675ee0e1b606f4497a9b95cdc34db2a031c
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = 25125a4668c31dc2e8a68b6c4c95ad7cf9322852e371b415a357d09acb01b587
+Tag = 61c78a2f85a447c3e62b6197d65b9065
+Plaintext = d9b0eaaff786165f882f41a98dbc0c355b3a1aaf40
+Ciphertext = c77dfd82a26d0ce4ee68705c74d1401ecf1997c5ba
+
+Cipher = aes-192-ccm
+Key = f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390
+IV = 68ef8285b90f28bcd3cb1bacea
+AAD = ad34d8f0902a5b79fb145b8206bb4d3b77e0bd8ae2d0964815389eacb33b4007
+Tag = 0312d067c08a9b4400e1df8bb7ed671a
+Plaintext = 17b517ef577f588da374340d2522cc9ea642c8d8ae
+Ciphertext = 097800c202944236c53305f8dc4f80b5326145b254
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = 2870bd9a26c510e9a256920899bbc77a4eb9b53f927045a943d5ed6b13638cf3
+Tag = 2fe9afafc2fccd98ccf63b0fdec30eac
+Plaintext = 53911a67b65738f87fc7c20d6db8044bde1af95838d1
+Ciphertext = 70cf37d4b6f7e707376b1574ce17c040b5143da47abb
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = 611032a95ee87f89ad6be7c0fed8bd245c5f81076087b3bda4cde5587b8d14b6
+Tag = 102dfd8c231d6a355f079c213ce6858e
+Plaintext = 46917e38b8a542296d290d065b0aa7c8aaa38950c386
+Ciphertext = 65cf538bb8059dd62585da7ff8a563c3c1ad4dac81ec
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = 2e7ea26d1cceaca3b7862a7a8469e366b52ec27ca127e3317222ee651d8da4a0
+Tag = 6df11febe34dd568da12c374674b9ac4
+Plaintext = b527828c89f674dc6f024f8cdd80c694bb3ebd57b2d9
+Ciphertext = 9679af3f8956ab2327ae98f57e2f029fd03079abf0b3
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = 0bf4413010daec585de34142224d1cad3072f9720f91ac664ad152820e838741
+Tag = b2916540d9439b832aa44236a7e187ac
+Plaintext = 78230f73f9c0150f630eca4cd679818551d449db82e6
+Ciphertext = 5b7d22c0f960caf02ba21d3575d6458e3ada8d27c08c
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = 2e7cae3306582eb5bad148247aa6c6ec943f8748e84b8a069ca9488b11844716
+Tag = 0d0768a18dead55700901408aa3f901a
+Plaintext = 847bb12e0e56fa07a086eeda5907ae148148fa4107d2
+Ciphertext = a7259c9d0ef625f8e82a39a3faa86a1fea463ebd45b8
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = 63036dc4ad13aee5dc1832e867f7538da108188fec7b08262af440d07579c451
+Tag = 5f2073605d2a441805b6ff89d8beb68c
+Plaintext = ec59e208c4bb429a371f1b3ffdf07fce5dea8a05f0ce
+Ciphertext = cf07cfbbc41b9d657fb3cc465e5fbbc536e44ef9b2a4
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = f9ec5ce4b63156d57e451eb67ab6d7a59cc397f43f6d26dc07d1036f0fb4a8cf
+Tag = dcabef6907811c6b7df4e74c7a63d83b
+Plaintext = fb12d94bd21b5748b23132a03065c78dae65a0bd2cfb
+Ciphertext = d84cf4f8d2bb88b7fa9de5d993ca0386c56b64416e91
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = e13a204e16f42bbf4716e95f1cb7e125ffac66a87f591c8ef2c7b8485ff707fd
+Tag = 26aa8aa37e858cd990f5593d9ef35f2a
+Plaintext = 239fa31d4a65de0318bfc5b60a06d706c129dcf255ac
+Ciphertext = 00c18eae4ac501fc501312cfa9a9130daa27180e17c6
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = c4591c3ad984a1e189c526b719212f8248289eeb277827272b8205d78191eb2d
+Tag = d81e424d6b4528901ae46fb35f8b3106
+Plaintext = 57caadbb1a56cc5b8a5cf9584552e17e7af9542ba13e
+Ciphertext = 749480081af613a4c2f02e21e6fd257511f790d7e354
+
+Cipher = aes-192-ccm
+Key = 3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9
+IV = 30259ce106e9bd7a8bacbaf212
+AAD = cf4795bc7f43c30d3c3a8fd1b8a9d77d69bf59eb8b59d0f464315f40cb52335d
+Tag = f25a4bfda35e1390f3f16f638dcd4047
+Plaintext = a68c74e05f0a44d4a0372c0e5915b83d8e6729efacbb
+Ciphertext = 85d259535faa9b2be89bfb77faba7c36e569ed13eed1
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = e9699b20b0574fce8b5cbc4ef792eb96e2c1cce36b1b1f06ea2a95fe300633cc
+Tag = a39c3b429a1f922fac0b59e29a122e43
+Plaintext = 8d98c580fb366f330dbfda20f91d99a0878b47efd14c6d
+Ciphertext = 579cdf9da62a2df471e03450516adb4ce99ae0f70b1776
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = bd94c9ad6253c25dc417f87b6e52e03621ccf4b3bff5b402677aeb51e216335f
+Tag = 67bf538e40f9366adf8758968f06ce8a
+Plaintext = 7391ba60fabe2c632bbaca16af9a235b2c7dae61691c0b
+Ciphertext = a995a07da7a26ea457e5246607ed61b7426c0979b34710
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = 4f263cda4a50b0e5379ec2fb546b326a07943527c1d175c029455a917753883b
+Tag = 64a1199251b54f419720a30de83161de
+Plaintext = 7e1e93a6ca35a2c0e4f08fdb2e7ee22b9f486f0ab919e2
+Ciphertext = a41a89bb9729e00798af61ab8609a0c7f159c8126342f9
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = 4d43702be4f0530319555d7f1a3356160f6cae48051f12e22a153d7e405c1149
+Tag = b417e4cceb8dcf45ef33cc0007755bbc
+Plaintext = f94ff053c7413f34f96eae41fd1ac101151069af5a9428
+Ciphertext = 234bea4e9a5d7df385314031556d83ed7b01ceb780cf33
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = f4d7978fad36223623ccb5bb18a7373cba8a6e3b1c921259e319266042db8887
+Tag = d35aed57f49dcfecf248cf9d246ac024
+Plaintext = ba0716355fffb8ef947d2a15eb58375a1ff1084c566990
+Ciphertext = 60030c2802e3fa28e822c465432f75b671e0af548c328b
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = 12e4fe727b1f27a619dd67bb976ddc2b18b2ef8b7184290d9553494a500d933e
+Tag = 97cda0e04d2ff65c2e06a8276bdf6f97
+Plaintext = 872940780a94680a791c937994ceafd2c8b7a22b5f4927
+Ciphertext = 5d2d5a6557882acd05437d093cb9ed3ea6a6053385123c
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = 2c16724296ff85e079627be3053ea95adf35722c21886baba343bd6c79b5cb57
+Tag = 3494dd2ee0a0fe5bfc9f69234c8142ed
+Plaintext = d71864877f2578db092daba2d6a1f9f4698a9c356c7830
+Ciphertext = 0d1c7e9a22393a1c757245d27ed6bb18079b3b2db6232b
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = cefc4f2fb796c2502329ca3d8f8af3200dd9edb8f164e15acec90536a15b6fdc
+Tag = 9008ead8e923997508eebf5e776198dc
+Plaintext = cda681aa3109ebf5f21ee3a849098ea3a551e844fae4b4
+Ciphertext = 17a29bb76c15a9328e410dd8e17ecc4fcb404f5c20bfaf
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = 94fc7eb8febb832097ba6eecd2697da91b5a8a1f2248f67a7659e0ac55a09a0d
+Tag = f136cc6ea1b0fdb554e0803053875b89
+Plaintext = d4f8d262870b5000a40b8fcce88f55c65c4d12e729975e
+Ciphertext = 0efcc87fda1712c7d85461bc40f8172a325cb5fff3cc45
+
+Cipher = aes-192-ccm
+Key = 40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6
+IV = 0df3fc6396f851785fca9aa5ff
+AAD = 459085184094e302b2e921cc04270b676e75bbcf0e4b53ed387df2bd0e75e0ac
+Tag = 5da8ceccae093888daaf92c95817fc3d
+Plaintext = 732f211061c0a32c6ad124c58418d560ef5eab2602314c
+Ciphertext = a92b3b0d3cdce1eb168ecab52c6f978c814f0c3ed86a57
+
+Cipher = aes-192-ccm
+Key = 91f9d636a071c3aad1743137e0644a73de9e47bd76acd919
+IV = 1bf491ac320d660eb2dd45c6c3
+AAD = 3bdfd7f18d2b6d0804d779f0679aaa2d7d32978c2df8015ae4b758d337be81dd
+Tag = b7e17f235bd660e7e17b2c65320e9fd4
+Plaintext = 4eaf9384cad976f65f98042d561d760b5a787330dc658f6c
+Ciphertext = 635530cab14e3d0a135bb6eebb5829412676e6dd4995f99c
+
+Cipher = aes-192-ccm
+Key = 91f9d636a071c3aad1743137e0644a73de9e47bd76acd919
+IV = 1bf491ac320d660eb2dd45c6c3
+AAD = 9de45b7e30bb67e88735b8fb7729d6f3de46c78921b228bad8f17cc9c709c387
+Tag = 9f40890c7d650afccda40fb2a4cd603b
+Plaintext = 59bee7d18fd4ba573f3e4f61076f5b9f6a3487e47d98c729
+Ciphertext = 7444449ff443f1ab73fdfda2ea2a04d5163a1209e868b1d9
+
+Cipher = aes-192-ccm
+Key = 91f9d636a071c3aad1743137e0644a73de9e47bd76acd919
+IV = 1bf491ac320d660eb2dd45c6c3
+AAD = 783477f981ef0551b5e7a714b640bbb38316c53756c96e30c898cdee3b72e6f4
+Tag = 50236cf1a12a9e3542a4051788f9775a
+Plaintext = 4e7f3c86d846ff351db81dbe1d2e9ed73ec0450587ae681b
+Ciphertext = 63859fc8a3d1b4c9517baf7df06bc19d42ced0e8125e1eeb
+
+Cipher = aes-192-ccm
+Key = 91f9d636a071c3aad1743137e0644a73de9e47bd76acd919
+IV = 1bf491ac320d660eb2dd45c6c3
+AAD = 2851d40243512a43f70f9c25e9b18c122a1433f05c61e65017e197e88b129e43
+Tag = b1bbad9861192df356c6678b2f561ea3
+Plaintext = 2db7cb2739c839383b64c2c93c7d5c906d984756c3dedaa9
+Ciphertext = 004d6869425f72c477a7700ad13803da1196d2bb562eac59
+
+Cipher = aes-192-ccm
+Key = 91f9d636a071c3aad1743137e0644a73de9e47bd76acd919
+IV = 1bf491ac320d660eb2dd45c6c3
+AAD = 1cfa2d62cc1f6313fb0c6eb21803e09cdf61ee3ddb15192529560e5d8096cafb
+Tag = 1da4211d4c28d2d91568117fc99fd911
+Plaintext = 2f2b82497c78369890809460d80a16be4f3330e8a0089165
+Ciphertext = 02d1210707ef7d64dc4326a3354f49f4333da50535f8e795
+
+Cipher = aes-192-ccm
+Key = 91f9d636a071c3aad1743137e0644a73de9e47bd76acd919
+IV = 1bf491ac320d660eb2dd45c6c3
+AAD = 5a14b556156191b2704936f64df0bf1dd2bd8d587418f4f85472338fcf86aa52
+Tag = da99be0e054bb881a25a74b547d3ed5e
+Plaintext = 7cfefca725da1b6bb5d9545e3e50f5a624a8160bdb0e7d4e
+Ciphertext = 51045fe95e4d5097f91ae69dd315aaec58a683e64efe0bbe
+
+Cipher = aes-192-ccm
+Key = 91f9d636a071c3aad1743137e0644a73de9e47bd76acd919
+IV = 1bf491ac320d660eb2dd45c6c3
+AAD = 148de640f3c11591a6f8c5c48632c5fb79d3b7e1cef9159c680d71fd1f9801fa
+Tag = 4c1fedb47fa30ff2ead6bf382431b2de
+Plaintext = 5205165c4e9612974dc92f60d1e328d68aa9466e27dbd499
+Ciphertext = 7fffb5123501596b010a9da33ca6779cf6a7d383b22ba269
+
+Cipher = aes-192-ccm
+Key = 91f9d636a071c3aad1743137e0644a73de9e47bd76acd919
+IV = 1bf491ac320d660eb2dd45c6c3
+AAD = f852e38703097cc37c589b7860dbc333e091411462d5576dc9909a8cf6ac99d4
+Tag = 338762a4e4299615c67130a28b56a383
+Plaintext = f968f2833427abbc9fe1cab7e7a3f905a3b23a35802029ff
+Ciphertext = d49251cd4fb0e040d32278740ae6a64fdfbcafd815d05f0f
+
+Cipher = aes-192-ccm
+Key = 91f9d636a071c3aad1743137e0644a73de9e47bd76acd919
+IV = 1bf491ac320d660eb2dd45c6c3
+AAD = 43df03a0e23c7ad0d13485150ca224c0b3f39d4e5f2d718db6308e003d3dc683
+Tag = 9dbdf61387294812f483aad76d48d899
+Plaintext = 67da6ca42655188af0b8e389152b2a1b6e2c3ed88926afa5
+Ciphertext = 4a20cfea5dc25376bc7b514af86e75511222ab351cd6d955
+
+
+Title = NIST CCM 256 Variable Plaintext Tests
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = b4f8326944a45d95f91887c2a6ac36b60eea5edef84c1c358146a666b6878335
+Tag = ca482c674b599046cc7d7ee0d00eec1e
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = 36c17fd901169e5b144fdb2c4bea8cd65ad8acf7b4d3dd39acf2ad83da7b1971
+Tag = 67747defe5da5fecc00b9bf3b249f434
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = 9a37c654ab8e5a0c6bdfff9793457197d206ed207d768cbc8318cfb39f077b89
+Tag = c57ef5d0faf49149c311707493a4cfd4
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = 5ab80169184541393a6975f442ee583cd432d71a6d1568fa51159df7c5b8f959
+Tag = bc2fb5571a7563bb90689a229d2f63a7
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = c78a22a667aafab0c94047e03837d51b11490693d5c57ea27b901ff80b6a38f9
+Tag = 428888c6420c56806f465b415a66e65a
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = e11e30cbf63623816379f578788b0c8e6b59ee3c9c50aa6e1dcd749172d48fed
+Tag = 9f1b7520025e1075731adc946b80121d
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = 05716168829276ff7ab23b7dd373db361e6d9e1f11d0028d374a0d3fe62be19f
+Tag = bd36b053b6a90f19e3b6622cba93105d
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = 3e915389639435629fcc01e1b7022d3574e2848e9151261ad801d03387425dd7
+Tag = 458595a3413b965b189de46703760aa0
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = 2f496be73a9a5d9db5927e622e166c6ec946150687b21c51c8ca7e680f9775ac
+Tag = 8b259b84a6ee5669e175affca8ba3b1a
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476
+IV = 291e91b19de518cd7806de44f6
+AAD = 0a8725bd8c8eab9ed52ca47835837b9f00a6c8d834ab17105b01eb4eb30402e7
+Tag = c5f35fdf2b63e77a18d154f0ddcfedbf
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = 080f82469505118842e5fa70df5323de175a37609904ee5e76288f94ca84b3c5
+Tag = f24e87a11a95374d4c190945bf08ef2f
+Plaintext = 1a
+Ciphertext = a5
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = f6cfb81373f1cbb0574dda514747d0099635b48cb809c6f1fa30cbb671baa505
+Tag = d43c5f39be92778fdce3c832d2d3a019
+Plaintext = 40
+Ciphertext = ff
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = 5a88b14bada16b513d4aa349b11ce4a77d4cda6f6322ff4939ad77d8ecb63748
+Tag = 753b7b661f1aad57c24c889b1c4fe513
+Plaintext = 41
+Ciphertext = fe
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = a92b95b997cf9efded9ff5e1bff2e49d32e65f6283552ded4b05485b011f853f
+Tag = 1c5ac66e89bf2769ef5f38a3f1738b24
+Plaintext = 06
+Ciphertext = b9
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = a206a1eb70a9d24bb5e72f314e7d91de074f59055653bdd24aab5f2bbe112436
+Tag = 3fe64379cea1a8ae3627418dd3e489a2
+Plaintext = c8
+Ciphertext = 77
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = d3029f384fd7859c287e38c61a9475d5ddbfd64af93746b1dc86b8842a8c194c
+Tag = abc529442ff93005551b7689bcb748f7
+Plaintext = e2
+Ciphertext = 5d
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = 51ca3d3b70b5e354451a5177d7acfd8e7b44eae55e29d88b5e8eb8fc1e5c62fc
+Tag = ee68e416617ac974b3d1af7320cd51f6
+Plaintext = 1a
+Ciphertext = a5
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = 8c6c6791f1ac957b18bf008e260a0af4a5b7bfdb1e0008d6eaaa227f45cf4f62
+Tag = 43883d93d7066991e0fac453400b4fbf
+Plaintext = dd
+Ciphertext = 62
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = b0a1af969a95025385b251afd1e89f353426ed6e5d71019cd73366aa31d5b464
+Tag = b940d416f3435812f9d1b18f441b7721
+Plaintext = 4c
+Ciphertext = f3
+
+Cipher = aes-256-ccm
+Key = cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14
+IV = 6df8c5c28d1728975a0b766cd7
+AAD = 7e72b2ca698a18cb0bf625f5daddb0d40643009db938340a9e4fe164a052fee1
+Tag = 1d27e9a32feea28a6a7e7da2d27e1cc4
+Plaintext = 88
+Ciphertext = 37
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = b5c6e8313b9c68e6bb84bffd65fa4108d243f580eab99bb80563ed1050c8266b
+Tag = c3152e43d9efea26e16c1d1793e2a8c4
+Plaintext = be80
+Ciphertext = ecac
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = 38e5032c5949c2668191ef1af5bb17eddc28abdb4e5bb41eaffec2523b2525d6
+Tag = d06bf4b50ccce0b2acfd16ce90a8854d
+Plaintext = 82c9
+Ciphertext = d0e5
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = 0b50f5173249fb7118f80d25874d6745d88e4ce265fa0dd141ad67ae26c31122
+Tag = 8d784f486c1dc4a2bafd5b02ca1e1c05
+Plaintext = 8239
+Ciphertext = d015
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = 0296743a3125b103a2b2a78a109e825ea10834bd684215ab2e85cc4172e37348
+Tag = a3377002a48f9fe306d157358e6df37d
+Plaintext = 16c1
+Ciphertext = 44ed
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = a94e64becb803e211785ba51db7f3db042fbf44a7a821509156a6828b0f207e9
+Tag = f6c09bf1dcb1c82bd98c6e2c13a8d7a5
+Plaintext = 2801
+Ciphertext = 7a2d
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = 105358cc17b12107e023a23d57b44c66a2c58d8db05100311575e1ea152fc350
+Tag = 2ea363c0d8864363056467570959ba03
+Plaintext = 65e7
+Ciphertext = 37cb
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = 669f9a63cf638a202dca1965c4116273249813ce0b39703887d89bdf5b3b12d6
+Tag = 6519377e6d0252b5f80cdf3d0253eccf
+Plaintext = 819d
+Ciphertext = d3b1
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = e288590a3eba28ac6847a50b0294ab6bd0a548716ff5102c44a5b656b2d9ddd6
+Tag = 9a4dee6ca2cde473f08f76f779856c3c
+Plaintext = 761e
+Ciphertext = 2432
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = 5b222aae3c7786c3b9021ba672f9136190ec931cf055f84c85706127f74c6d5b
+Tag = 9e65c0f01e644e74092253b470cd5511
+Plaintext = 56de
+Ciphertext = 04f2
+
+Cipher = aes-256-ccm
+Key = 36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510
+IV = 021bd8b551947be4c18cf1a455
+AAD = 2082f96c7e36b204ad076d8b2f796cccf5cbc80b8384b53a504e07706b07f596
+Tag = 809fa107f379957b52ac29fe0bc8a1e2
+Plaintext = b275
+Ciphertext = e059
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 887486fff7922768186363ef17eb78e5cf2fab8f47a4eb327de8b16d63b02acb
+Tag = 3f65d6be431e79700378049ac06f2599
+Plaintext = db457c
+Ciphertext = 54473c
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 0683c20e82d3c66787cb047f0b1eb1c58cdde9fb99ee4e4494bbf27eb62777d1
+Tag = 3b186edc15c22ba24e470eb5a072da9f
+Plaintext = 62a6c5
+Ciphertext = eda485
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 413074619b598f8bed34cab51ddf59941861ba0169ebe7570a5ed01d790c08e5
+Tag = 52a1fb5a58bd51931230c1a7dfb1a8c1
+Plaintext = cc67bc
+Ciphertext = 4365fc
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 2d65a5175c29a095dc082dab9cfcf4b895efbfa715c57614589d4db159543ce9
+Tag = 7d3810f59176cb108c7e969da51d4d79
+Plaintext = 33800b
+Ciphertext = bc824b
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 6a831b6059456be98e6fce608d8c71cb8efb04a96b45c2dfbdaeabf5420a1482
+Tag = 46ffea832595c9c86e6517215541ddbd
+Plaintext = b2c826
+Ciphertext = 3dca66
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 3a04a01160402bf36f33337c340883597207972728c5014213980cd7744e9e41
+Tag = e89a6725f0fc35622d89d2f3e34be90a
+Plaintext = d7e620
+Ciphertext = 58e460
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 64d8bd3c646f76dc6ce89defd40777fe17316729e22ba90f6a2443ee03f6390b
+Tag = b1bd7ad5d81686aeb44caa6025d488bd
+Plaintext = 795af4
+Ciphertext = f658b4
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 7bef8d35616108922aab78936967204980b8a4945b31602f5ef2feec9b144841
+Tag = 0553c801f37c2b6f82861a3cd68a75e3
+Plaintext = 66efcd
+Ciphertext = e9ed8d
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 92f7dc22dcbbe6420aca303bd586e5a24f4c3ed923a6ebe01ec1b66eee216341
+Tag = e3eeb8ea6c08b466baf246b3667feb3f
+Plaintext = 78b00d
+Ciphertext = f7b24d
+
+Cipher = aes-256-ccm
+Key = ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944
+IV = 0bddf342121b82f906368b0d7b
+AAD = 71bf573cf63b0022d8143780fc2d9c7dbd0505ac31e9dce0ad68c2428b0878a0
+Tag = 1db811640c533794bfec6eeb977233ec
+Plaintext = 9dd5e1
+Ciphertext = 12d7a1
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = fffb40b0d18cb23018aac109bf62d849adca42629d8a9ad1299b83fe274f9a63
+Tag = ab21dfdcfe95bd83592fb6b4168d9a23
+Plaintext = 87294078
+Ciphertext = 2bc22735
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = 75c3b3059e59032067e9cd94d872e66f168e503bcf46bc78d82a4d4a15a29f6e
+Tag = b5de3331078aa13bd3742b59df4f661a
+Plaintext = 0f28ee1c
+Ciphertext = a3c38951
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = 8fb9569f18a256aff71601d8412d22863e5a6e6f639214d180b095fa3b18d60e
+Tag = e52afe7326a12a9aaf22255a38d4bd0d
+Plaintext = d41c9c87
+Ciphertext = 78f7fbca
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = 8b62d9adf6819c46c870df8a1486f0a329672f7d137bb7d8659f419c361a466c
+Tag = 7543692a72f0d599de48b5e5f5a9413f
+Plaintext = 046bc0d8
+Ciphertext = a880a795
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = fd98f8f39dfa46ea5926e0ffacbabbe8c34205aade08aa0df82e1d4eaaf95515
+Tag = 30fc357f5482b9004d466bf858586acb
+Plaintext = 39bd4db8
+Ciphertext = 95562af5
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = 09bf4f77a9883733590a3cc7ee97f3c9b70f4db255620e88cd5080badc73684c
+Tag = a9e8db046fdd548b52d40375c1e9a448
+Plaintext = b43cdd3a
+Ciphertext = 18d7ba77
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = 40326d765e0f6cf4b4deccb128bebf65a7b3c3e5bcf1d58f6158e1e9153b7e85
+Tag = 4efbdd4ad8d3e863172d9372fca07c20
+Plaintext = e0052e9b
+Ciphertext = 4cee49d6
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = aa5ae6dcdc21b5446489bdabf5c6747bdf3bbfdb3de2c03170efefe5ccb06d69
+Tag = 95bd661b32bc18025808f8b4035acad6
+Plaintext = 696825f6
+Ciphertext = c58342bb
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = d3d34f140a856e55b29471fde4c0e5f7306b76d03faab26db79c10f95ffb3122
+Tag = ac05b072264e31a4b2801a6d790512d7
+Plaintext = 7eb07739
+Ciphertext = d25b1074
+
+Cipher = aes-256-ccm
+Key = 62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0
+IV = 5bc2896d8b81999546f88232ab
+AAD = 648a84813ca97aef4ab7e143ee29acb946388660f18eb671194646e0b0136432
+Tag = c00514d260e1d211de361c254369e93a
+Plaintext = 9cad70b1
+Ciphertext = 304617fc
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = 574931ae4b24bdf7e9217eca6ce2a07287999e529f6e106e3721c42dacf00f5d
+Tag = 9c66e1a43103d9a18f5fba5fab83f994
+Plaintext = 3e8c6d1b12
+Ciphertext = 45f3795fcf
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = 99cd9d15630a55e166114f04093bd1bb6dbb94ecaad126fe5c408dee5f012d9f
+Tag = 6f3cd579294f706213ed0f0bf32f00c5
+Plaintext = 76fc98ec66
+Ciphertext = 0d838ca8bb
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = 1516fdf7a7a99f3c9acc7fff686203dec794c3e52272985449ddf5a268a47bc3
+Tag = 7d38e026f706c9273dbcb6dc982751d0
+Plaintext = 6564c247cc
+Ciphertext = 1e1bd60311
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = 0c9c35be98591bf6737fc8d5624dcdba1a3523c6029013363b9153f0de77725b
+Tag = c3e46166767c6ad2aeffb347168b1b55
+Plaintext = c11b9c9d76
+Ciphertext = ba6488d9ab
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = e74afe3ba960e6409dba78ecb9457e2a4ce2e09792b1d2e3858f4c79f7ddba62
+Tag = 33a7dca78bcbf4d75d651ee5fadff31b
+Plaintext = 45a4e0d7dd
+Ciphertext = 3edbf49300
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = 96cbe9cd193513599c81f5a520fabaff51ee8cbdb81063c8311b1a57a0b8c8fd
+Tag = 11585167c83105ee16828a574c84ac86
+Plaintext = e5861b2327
+Ciphertext = 9ef90f67fa
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = 2e7ea84da4bc4d7cfb463e3f2c8647057afff3fbececa1d20024dac29e41e2cf
+Tag = ffaba456f78e431f4baa5665f14e1845
+Plaintext = f5b5bcc38e
+Ciphertext = 8ecaa88753
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = be125386f5be9532e36786d2e4011f1149abd227b9841150d1c00f7d0efbca4a
+Tag = 34714731f9503993df357954ecb19cd3
+Plaintext = b6cc89c75d
+Ciphertext = cdb39d8380
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = 3fa8628594b2645bc35530203dca640838037daeaf9cf8acaa0fb76abf27a733
+Tag = 6c1b008b7572752f04362b2bfdc296bb
+Plaintext = 3802f2aa9e
+Ciphertext = 437de6ee43
+
+Cipher = aes-256-ccm
+Key = bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576
+IV = 4f18bcc8ee0bbb80de30a9e086
+AAD = 642ae3466661ce1f51783deece86c38e986b8c0adea9e410e976f8a2fe0fe10f
+Tag = a3f7c3c29dc312c1f51a675400500e32
+Plaintext = e082b8741c
+Ciphertext = 9bfdac30c1
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = a66c980f6621e03ff93b55d5a148615c4ad36d6cbdd0b22b173b4b1479fb8ff7
+Tag = b14e0e659a6305b4aeffae82f8a66c94
+Plaintext = 1b62ad19dcac
+Ciphertext = 4ad1fcf57c12
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = c13f65bd491cb172a0f7bbc4a056c579484b62695e90383358d605307d5be0a5
+Tag = 79fa7932d365e2da9b05c00a7318384a
+Plaintext = 3ef0faaa9b79
+Ciphertext = 6f43ab463bc7
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = 59dcca8fc50740831f8f259eb55d4db11f763a83187d93758d78d166f4d73cd5
+Tag = 813229912137b7a4945dc07cea24a974
+Plaintext = 1a98ddbf35f1
+Ciphertext = 4b2b8c53954f
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = 578509ca4f57aadb78056794bf18b0714090970db786e2e838105e672165761c
+Tag = 6e045f19f737a24c8addf832ed3f7a42
+Plaintext = f46a7b1c28ea
+Ciphertext = a5d92af08854
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = 696c0c6427273cf06be79f2206c43af9cbda0b884efaf04deba0c4bf0a25cb26
+Tag = daae8a7dcd3b0fbb59438f88743ec6e8
+Plaintext = e98f5e5a20d0
+Ciphertext = b83c0fb6806e
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = 95a66b60249ed086eecaeb9bc449afcee9de212619e87516ca947351b25120df
+Tag = d9cb636ca6543c4e35964f47341f2814
+Plaintext = 06319c0480e2
+Ciphertext = 5782cde8205c
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = 2b411bea57b51d10a4d2fb17ef0f204aa53cf112e1130c21d411cdf16a84176d
+Tag = ec82eadf4eb1f055da1a92a82052ab8b
+Plaintext = f4c723433b7c
+Ciphertext = a57472af9bc2
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = ff3bff3a26fc5a91252d795f7e1b06f352314eb676bff50dc9fbe881c446941e
+Tag = 01b10a7ae24a4ca2bfb07ea2a3b31a97
+Plaintext = 02f809b01ce3
+Ciphertext = 534b585cbc5d
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = f6be4aad63d33a96c0b5e9c4be62323c9e2308b29961fff980ba0dbda0549274
+Tag = 231323a4b88af5d7d0b07c0e73ddce1d
+Plaintext = 2b6004823a29
+Ciphertext = 7ad3556e9a97
+
+Cipher = aes-256-ccm
+Key = 5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c
+IV = 7a76eac44486afdb112fc4aab9
+AAD = c3706a28d7420b41e072dcecc06b6b13116cca110bde8faea8e51f5107352d71
+Tag = db30eb33d2ede33abbe22f37704fe68b
+Plaintext = 236c60cba4fa
+Ciphertext = 72df31270444
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = e97175c23c5b47da8ce67811c6d60a7499b3b7e1347ad860519285b67201fe38
+Tag = 2fa325bafc176a07c31e6cc0a852d288
+Plaintext = d48daa2919348d
+Ciphertext = eb32ab153a8e09
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = ba45e1859efae362a44a0116a14e488ba369da6c76c3913b6df8e69e5e1111fa
+Tag = a24840f4f40a7963becde3a85968b29c
+Plaintext = f95b716bfe3475
+Ciphertext = c6e47057dd8ef1
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = efcaa6f6cda3036b0b52ff9f36bc38ca74049c32c6b7cdfb8a46ca4144bacd64
+Tag = 8f2a4a5c276727e0a210fc2efb5aeabe
+Plaintext = 4862e3677083f0
+Ciphertext = 77dde25b533974
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = 360bcb407603fe92f856bf677625b9882521e6dae8f35fdfc3dc737f9398f609
+Tag = 051734fc31232ab2ab63474020ab4dc9
+Plaintext = 7f1ca0728f6d65
+Ciphertext = 40a3a14eacd7e1
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = f12ee9d37946cfd88516cbe4a046f08c9bbba76a3973ff1e2cb14493405bd384
+Tag = c715244f307609ffa253e4e3659b0ece
+Plaintext = 67478ef73290fa
+Ciphertext = 58f88fcb112a7e
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = 5833dde0c577b2be4eb4b3d01d7b0042fa8441ad7043ea462bbbbd56a59790ea
+Tag = f11047da612d2987fa2e50ada5ae7f9d
+Plaintext = 36bb9e511276c5
+Ciphertext = 09049f6d31cc41
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = 1e103c63d8ead36b985f921044cd32b8f9f04a2ba9fa154a09e676ffaa093970
+Tag = 382f7648718127ebae7eb7443ebd2c2c
+Plaintext = d68d6556c5a5b1
+Ciphertext = e932646ae61f35
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = a1cfb61d45a140bdea6329ba0fe80429ff9aa4624a1d31bc752f7c97f1d390a0
+Tag = cc40a5e7fffb1fb9a5dd9d6ba91bede1
+Plaintext = 0568cca4ff79dc
+Ciphertext = 3ad7cd98dcc358
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = 116b5b015e44ceef0061b2d2e73fa0b386d5c1e187782beebdfc6efb5a1c6935
+Tag = 468d2b70c311732f11ed72b57d83e500
+Plaintext = bd93d08eea4263
+Ciphertext = 822cd1b2c9f8e7
+
+Cipher = aes-256-ccm
+Key = f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2
+IV = d0d6871b9adc8623ac63faf00f
+AAD = 3d55882e6f3f89309b6940a3b408e573458eedd10fc3d0e1f3170eb313367475
+Tag = b41a70f548e359add30c0e5746fbeb2b
+Plaintext = 4fb62753024e92
+Ciphertext = 7009266f21f416
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = 579a637e37a0974cd2fc3b735d9ed088e8e488ffe210f043e0f9d2079a015ad6
+Tag = e2ba537355ae8ab25cc9ed3511ff5053
+Plaintext = e5653e512d8b0b70
+Ciphertext = 75d31f8d47bee5c4
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = 1583138aa307401dddc40804ac0f414d338fc3ffb2946f09aaaa7079426fc1ee
+Tag = 781a9e359804831f31a1efb1ae1cb71d
+Plaintext = 2c4ba9ce52e01645
+Ciphertext = bcfd881238d5f8f1
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = 78d3dda40e433bba7a330ca3e5bd5170f0895f2e3e438402344ced79fcb0c719
+Tag = 2dcc77c4e1fe2bafd477598977835f0c
+Plaintext = 5eb2d054a0e58c62
+Ciphertext = ce04f188cad062d6
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = dfc762466fa84c27326e0ee4320aa71103d1e9c8a5cf7d9fab5f27d79df94bd6
+Tag = 08946723baf0dbf613359b6e040f9bd5
+Plaintext = bbbf7830d04ab907
+Ciphertext = 2b0959ecba7f57b3
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = 7e8ea82d1137c1e233522da12626e90a5f66a988e70664cb014c12790d2ab520
+Tag = 003bd62ca51f74088bbbd33e54ac9dd4
+Plaintext = 10c654c78a9e3c06
+Ciphertext = 8070751be0abd2b2
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = 873da112557935b3929f713d80744ed08b4b276b86331dbc386fba361726d565
+Tag = 67e65e7f2cdedf6ef8cc0ee7a6dcfb02
+Plaintext = 668d32e322e1da3e
+Ciphertext = f63b133f48d4348a
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = cfba97919f703d864efc11eac5f260a5d920d780c52899e5d76f8fe66936ff82
+Tag = 0532f8c6639e5d6c7b755fcf516724e3
+Plaintext = e39f6225e8eab6cc
+Ciphertext = 732943f982df5878
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = 01abcfee196f9d74fcaa7b69ae24a275485c25af93cc2306d56e41e1eb7f5702
+Tag = 7fd7a33828413ebc252dd9d015773524
+Plaintext = 6021a00f6d0610a4
+Ciphertext = f09781d30733fe10
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = ce1c31e7121c071d89afab5a9676c9e96cac3d89dcae83136bbb6f5ca8f81e5d
+Tag = d3d51368799325ad1c8233fa071bade0
+Plaintext = bbaf0ac4e77ee78d
+Ciphertext = 2b192b188d4b0939
+
+Cipher = aes-256-ccm
+Key = 493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b
+IV = fe2d8ae8da94a6df563f89ce00
+AAD = bb210ca5bc07e3c5b06f1d0084a5a72125f177d3e56c151221115ae020177739
+Tag = 5d1ea568637f773174a7f920a51b1fe1
+Plaintext = 98a2336549a23a76
+Ciphertext = 081412b92397d4c2
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = 69adcae8a1e9a3f2fe9e62591f7b4c5b19d3b50e769521f67e7ea8d7b58d9fc8
+Tag = 896e7127f17d13f98013b420219eb877
+Plaintext = 615d724ae94a5daf8d
+Ciphertext = f019ae51063239287d
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = 162d0033c9ea8d8334d485b29eef727302135a07a934eea5fee6041e9f1f47c1
+Tag = 7cc2cd61da9358b4045fef32f8192cbf
+Plaintext = 0d9168eeab3b27ba69
+Ciphertext = 9cd5b4f54443433d99
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = 3f4ab57efa32f51a4c00790280e77c0e55b85bbda4f854e242368e9a289b5a81
+Tag = d280f0ffdd560fb8915978e3bd6205bb
+Plaintext = 6287dcffdd5fb97885
+Ciphertext = f3c300e43227ddff75
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = 945d18134c148f164b39fd7c4aef0335045553f6ea690a3b1726418d86f0de00
+Tag = 7dbf90420a1ff2e24bd6303b80cfc199
+Plaintext = 6e5e01b3fd71d16b9c
+Ciphertext = ff1adda81209b5ec6c
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = 23af12893431b07c2922ab623aed901c0eaaeb9a24efc55273e96aea4dab7038
+Tag = d741f4329ae7cc77d42bf7e5f2ec5ab6
+Plaintext = b51521e689b5247362
+Ciphertext = 2451fdfd66cd40f492
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = b15a118b3132c20c31e6c9d09acdee0e15fcc59d6f18306442682512d22eb10f
+Tag = c9ffdcc2f36edac14613b1d85baf25a9
+Plaintext = 7f973617e710fb76fe
+Ciphertext = eed3ea0c08689ff10e
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = dcfbeb6490f5fa7eaf917462473a6cec98bebf8f17493fe9b994119a6d5a5457
+Tag = 5a61a28bb10265b26043d7a8dd357713
+Plaintext = 7e909b6727ac3fd02f
+Ciphertext = efd4477cc8d45b57df
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = 77e9317294f046f315a0d79e3423f29f7d9ebcd36d6eaa2a3fb2f4500309478c
+Tag = d321c371ae1fd01bdf3b6c75a597da6e
+Plaintext = a5075638932b5632f8
+Ciphertext = 34438a237c5332b508
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = 3aa8f204eb127b547e13873ed0238018394e13686c8734e49e3e629deb352c77
+Tag = 9393d1635bc40ac62405a39155406c47
+Plaintext = c10f15a0de78db8aa3
+Ciphertext = 504bc9bb3100bf0d53
+
+Cipher = aes-256-ccm
+Key = b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a
+IV = 274846196d78f0af2df5860231
+AAD = 7f67e6f97c6c258f014d721a4edaaa0ddb3f9f09993276ab7b714ea9356c231d
+Tag = ff89641e1bd5ad6cc827441b17c45ecf
+Plaintext = 8294f830cfca42cfbe
+Ciphertext = 13d0242b20b226484e
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = 9ae5a04baa9d02c8854e609899c6240851cbc83f81f752bc04c71affa4eed385
+Tag = 76f2730d771d56099a0c8d2703d7a24e
+Plaintext = 2e3cf0af8c96c7b22719
+Ciphertext = e317df43ab46eb31be7e
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = da77c6d5627a2aa34911bd1f7cc5f8aa68a2c6546adc96a186b9af8e5baac4cf
+Tag = bcc7a8260ef361dc39fdb776d041f0d4
+Plaintext = e081c43a07450ce0dfa2
+Ciphertext = 2daaebd62095206346c5
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = 134d2d9726400d09dd3521326f96fbef993ddc0c4088770057b0f8d70356456f
+Tag = 19f0cbb0899f221aac9762f2650f8058
+Plaintext = c381d2ae5e72fc82324a
+Ciphertext = 0eaafd4279a2d001ab2d
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = 0d065dfde1de1f21784c7869eb566c977f807cfbd53578f4616995b51d7dc045
+Tag = 3dc92a9bd26b9653e5917359c331fcff
+Plaintext = 737f4d00c54ddca80eec
+Ciphertext = be5462ece29df02b978b
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = 95c54d187f2415535451cbb9cb35869749b171f7043216ce6886dd77baeecf60
+Tag = 91dda72c27d272561e00f7041845d998
+Plaintext = 4e9e251ebbbbe5dbc8ff
+Ciphertext = 83b50af29c6bc9585198
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = 0f98039e6a9fe360373b48c7850ce113a0ff7b2ae5ce773dd4c67ca967cd691b
+Tag = 928ac628758ad58fc1b5a768d4722848
+Plaintext = 0db72b281ab4046d15a6
+Ciphertext = c09c04c43d6428ee8cc1
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = ad840bc55654762e5eba0e4a9e7998992d990a06d70da1b1ca922ef193dab19a
+Tag = d11dad4dc8b265a53cf0bdd85c5f15f4
+Plaintext = 4f7b4f38ff1ba4df5a59
+Ciphertext = 825060d4d8cb885cc33e
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = 911e9876ea98e1bcf710d8fd05b5bf000ea317d926b41b6015998ee1462ab615
+Tag = 8eb659a5a7084be48d099467da4395df
+Plaintext = 58ce55379ef24b72d6d6
+Ciphertext = 95e57adbb92267f14fb1
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = 3f68a4fb4043bcf9b6d277c97e11365d949c705bd6679c6f0aaf52e62330ad79
+Tag = 3b2b2583fd117cec47b1c84d3863159e
+Plaintext = a219028a953ce1544835
+Ciphertext = 6f322d66b2eccdd7d152
+
+Cipher = aes-256-ccm
+Key = dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9
+IV = b3503ed4e277ed9769b20c10c0
+AAD = 02f32242cba6204319075ea8ce806a57845355ae73e6b875955df510096ebff9
+Tag = 5456eb2b6a2d35c649a84051f843153c
+Plaintext = 83b0ee9a52252c456105
+Ciphertext = 4e9bc17675f500c6f862
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = 9bcc5848e928ba0068f7a867e79e83a6f93593354a8bfcfc306aeeb9821c1da1
+Tag = 6512a0481255b729a10f9edb5f07c60c
+Plaintext = 8015c0f07a7acd4b1cbdd2
+Ciphertext = 8e9f80c726980b3d42e43a
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = c2e75952ab49216f305e3776865791ce877cef8c0229ca97561787093fddf1d8
+Tag = 8c514444f00ffdb80a4bb7e9eb651946
+Plaintext = c97b62a719720b44b7779c
+Ciphertext = c7f122904590cd32e92e74
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = c76a3ff4e6d1f742dd845be2d74c1a9b08e418909b15077deb20373ef55caf91
+Tag = db609dfc1929ac1ba5753fc83bf945b7
+Plaintext = cb7c17ef62464ecc8008f6
+Ciphertext = c5f657d83ea488bade511e
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = bdb69f99f9a144b9ad88c6cfd8ffb8304c201de9b2818552ce6379e6042c1951
+Tag = 53b74283296d0fca83b262915289163c
+Plaintext = 893a690cc5221de597d0e8
+Ciphertext = 87b0293b99c0db93c98900
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = 01815f599d6ba0d1c09f6f673bb6cca4c2a7a74f4e985be4c0f37842c7bbc5a4
+Tag = 88a34955893059d66549795b3ac2105c
+Plaintext = 80f3e4245c3eab16ef8bf0
+Ciphertext = 8e79a41300dc6d60b1d218
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = a9db62e9ab53c4a805c43838ce36b587d29b75b43fb34c17a22d3981120f3bc5
+Tag = 377c4e2f20aaa872a9a0b1d1d7f56df0
+Plaintext = 641c6914920a79943dca39
+Ciphertext = 6a962923cee8bfe26393d1
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = f0c2cc5a1b4c4cbe839338fa0d7a343514801302aef2403530605cf4f44d2811
+Tag = 5545aa0c1dd11551891ae553d3a91908
+Plaintext = 2286a1eddd80737a724ca9
+Ciphertext = 2c0ce1da8162b50c2c1541
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = 9842922499ad4d487488b3731f48765efe0b4eb59e7b491ba5f6636f09ed564d
+Tag = d9e07ec5806360843676ef27d811b246
+Plaintext = d8c63e7d7d332198249c0c
+Ciphertext = d64c7e4a21d1e7ee7ac5e4
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = 399b71ecb41f4590abda79045cdf6495f27daaa559c1b34f513b5c4ac105ec10
+Tag = 483b8727c5753ede25e1fab0d86963be
+Plaintext = 4b81804d777a59b6a107cf
+Ciphertext = 450bc07a2b989fc0ff5e27
+
+Cipher = aes-256-ccm
+Key = 4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207
+IV = bdb1b82ba864893c2ee8f7426c
+AAD = 2c186c5c3463a4a8bad771feb71e2973c4f6dede2529827707bf4fa40672660f
+Tag = 4b5c3c1dc577ee8fcf6ef3ebc0783430
+Plaintext = dfc762466fa84c27326e0e
+Ciphertext = d14d2271334a8a516c37e6
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = ea26ea68facdac3c75ba0cdf7b1ad703c9474af83b3fbfc58e548d776b2529b9
+Tag = 56bc555899345e0404b2938edf33168e
+Plaintext = a203aeb635e195bc33fd42fa
+Ciphertext = 62666297a809c982b50722bd
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = 0b32069fc7e676f229f1037d3026c93eef199913e426efd786b524ce1dbde543
+Tag = 9b15447c904b671824c2ca24c4fc7ad4
+Plaintext = aac414fbad945a49ae178103
+Ciphertext = 6aa1d8da307c067728ede144
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = 7a8658302e5181552292aa56e8209de63b5d86934167549b0d936202681757e1
+Tag = ea13850e99ef9300c65f5abc9419d13a
+Plaintext = 7ee0ce371329192618e3cda0
+Ciphertext = be8502168ec145189e19ade7
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = 4f05600950664d5190a2ebc29c9edb89c20079a4d3e6bc3b27d75e34e2fa3d02
+Tag = 486c93c31bbedc9e5ffa2f4154bceea9
+Plaintext = b0a1af969a95025385b251af
+Ciphertext = 70c463b7077d5e6d034831e8
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = 4530e4dc6a4c3733b8ab7e77e384223cc1a8c179fb66818c08aca47e5c705d89
+Tag = f18b556e7da59fd2549dc57a17bf64f8
+Plaintext = 9f6c6d60110fd3782bdf49b0
+Ciphertext = 5f09a1418ce78f46ad2529f7
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = f179353aef342f0f691caf1fcb811e3f6504e14d6d9381c5439b098ff978b01b
+Tag = 30aad3a838680cbd313004685a5510c5
+Plaintext = 90958d7f458d98c48cbb464c
+Ciphertext = 50f0415ed865c4fa0a41260b
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = f6df267e5cbc9d2a67b1c0fd762f891ee3b7c435884cb87d8228091b34aeddae
+Tag = 1d57b89ed0c91251aed37a6ca68a50c7
+Plaintext = 9f7ae892e5662803408d4d06
+Ciphertext = 5f1f24b3788e743dc6772d41
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = 4372e152b1afd99c7f87c8a51dbc3a5c14c49d04ea1c482a45dfbcda54972912
+Tag = d79a3b0feea16ff5fbca16211ea6fdd9
+Plaintext = 817074e351455f23cb67883d
+Ciphertext = 4115b8c2ccad031d4d9de87a
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = 82b6cd1c6618c42ba74e746075dc28700333578131ca6fde6971d2f0c6e31e6a
+Tag = 49f22737c4b2f9fa0a7e3dd4b067fbaa
+Plaintext = 1b7da3835e074fdf62f1eb3c
+Ciphertext = db186fa2c3ef13e1e40b8b7b
+
+Cipher = aes-256-ccm
+Key = d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906
+IV = 0b5f69697eb1af24e8e6fcb605
+AAD = a5422e53975e43168726677930f6d3e13281bdbd13c67c168340ed67e45d15b0
+Tag = ef43a48dbea8c1547455ad0197af88a2
+Plaintext = 57473e7a105c806867379194
+Ciphertext = 9722f25b8db4dc56e1cdf1d3
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = 9b1d85384cb6f47c0b13514a303d4e1d95af4c6442691f314a401135f07829ec
+Tag = 4c6520dac0f073856d9b9010b7857736
+Plaintext = 8714eb9ecf8bdb13e919de40f9
+Ciphertext = ba6063824d314aa3cbab14b8c5
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = fa17c693d0997140fbc521d39e042d8e08388106874207ca81c85f45c035d6e6
+Tag = 20a423dd30796b6016baff106aaef206
+Plaintext = a0837676e091213890dc6e0a34
+Ciphertext = 9df7fe6a622bb088b26ea4f208
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = 27663597b389b78e96c785ca2f5510c8963a5561d2b0b24c4dcdf8e58562c12c
+Tag = 6032bc79c4aef1f74da25e92b0aa7f8a
+Plaintext = b8a2ce7e051b8d094ec43f2a7f
+Ciphertext = 85d6466287a11cb96c76f5d243
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = d8f1a83371487d611ce704e0a6731f97a933c43569690022fce33cb5aecdc0a7
+Tag = 658123d2e5bb324c7ead8897f8e32b0a
+Plaintext = 9e4103ab1dfb77ae3494507332
+Ciphertext = a3358bb79f41e61e16269a8b0e
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = 05c57aab99f94b315cf8bdd2d6b54440c097fe33c62a96b98b1568cdee4ce62c
+Tag = 270758ab09f93fa3ba7d7a2aa8eac789
+Plaintext = fb3e3d1b6394d2daebf121f8ac
+Ciphertext = c64ab507e12e436ac943eb0090
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = 1c1b0933c508c6a8a20846ebd0d0377e24f4abc0c900d3a92bc409ba14ef1434
+Tag = 2293813f1bcb96564f772e9308e42b2d
+Plaintext = 549ba26a299391538b56ce4bd7
+Ciphertext = 69ef2a76ab2900e3a9e404b3eb
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = 9f5cf9149f556124d6bb4e3e243cca1502c02682709392cc2ec7eb262fd4d479
+Tag = 81877380d5cf097c2fb5177750f8b53a
+Plaintext = 287f31e69880823df7798c7970
+Ciphertext = 150bb9fa1a3a138dd5cb46814c
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = 1a49aaea6fc6fae01a57d2fc207ef9f623dfd0bc2cf736c4a70aaaa0af5dafd3
+Tag = cf42c75787edc62a180568c6ef56545d
+Plaintext = 040d18b128ae4a1935f9509266
+Ciphertext = 397990adaa14dba9174b9a6a5a
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = f29a0b2c602ff2cacb587292db301182e6c76c5110b97ca8b706198f0e1dbc26
+Tag = 56d47a0631f2038103e3904b556ba7a5
+Plaintext = 92441cbe8d70820870bb01ad63
+Ciphertext = af3094a20fca13b85209cb555f
+
+Cipher = aes-256-ccm
+Key = e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df
+IV = 55b59eb434dd1ba3723ee0dc72
+AAD = 01fcf5fef50e36175b0510874ea50a4d2005ad5e40e5889b61417700d827251e
+Tag = 5be15b7ae24edccd0b0934e3af513ed3
+Plaintext = f11d814df217de96333dee1cbf
+Ciphertext = cc69095170ad4f26118f24e483
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = 0245484bcd987787fe97fda6c8ffb6e7058d7b8f7064f27514afaac4048767fd
+Tag = 6385a52c68914e9d1f63fd297ee6e7ed
+Plaintext = 959403e0771c21a416bd03f38983
+Ciphertext = 37a346bc4909965c549783825182
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = 52f6a10a022e5ee57eda3fcf53dcf0d922e9a3785b39fad9498327744f2852e4
+Tag = 364b603de6afbc2d96d00510894ccbe7
+Plaintext = 23fe445efa5bcb318cc85e2ad1ac
+Ciphertext = 81c90102c44e7cc9cee2de5b09ad
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = d236e3841b9556b32dbd02886724d053a9b8488c5ad1b466b06482a62b79ebb6
+Tag = 1a4321c2ddbc35ce4864457d611219e9
+Plaintext = 762fdc3e0c30c7ecf2ec8808bb79
+Ciphertext = d418996232257014b0c608796378
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = 0d2739cfdac782b61f484fa1a423c478c414397ec420327963d79112b2d70a7e
+Tag = 296e55efebb17fe145cdca9b31ea7bcc
+Plaintext = b6813d5fe8afa68d646c197337a2
+Ciphertext = 14b67803d6ba117526469902efa3
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = 7f291aa463c4babc76b4a6faf2e27e9401586b1ac83e4b06a4090e94b3ef5fd4
+Tag = 59270a0510e7cc1b599705853af2144d
+Plaintext = 4ce8b6578537215224eb9398c011
+Ciphertext = eedff30bbb2296aa66c113e91810
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = 06bca7ef6f91355d19f90bf25590a44a24e5a782f92bc693c031e6de1e948008
+Tag = b55847573bf21e946ce9bdc5f569e3ff
+Plaintext = 9ebf93643854ea5c97a4f38f50bd
+Ciphertext = 3c88d63806415da4d58e73fe88bc
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = 5a44ff94f817c7c028a8f3db35a4d01364d2598432469f09ded86e5127d42d35
+Tag = b8a61c5687ea02f0276824b8316b76f1
+Plaintext = da989cc7d375ed5fac4d7f938d74
+Ciphertext = 78afd99bed605aa7ee67ffe25575
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = 2a755e362373ef27a911c4d93ca07bc97135645442ad7ad6a8ef98146c71e9d7
+Tag = a07ee02791011129fcacffcfb1bf4145
+Plaintext = 6fbab5a0f98e21e4d15904af5948
+Ciphertext = cd8df0fcc79b961c937384de8149
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = f7988873f45a5de314e5381d3f14d8f8c48c9b649bf3e745ed5dc882d507da58
+Tag = d34204b1ce23f5f58a8eb7cf1fa8cfa7
+Plaintext = b610349e8b370a7c195598573637
+Ciphertext = 142771c2b522bd845b7f1826ee36
+
+Cipher = aes-256-ccm
+Key = 3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0
+IV = 61bf06b9fa5a450d094f3ddcb5
+AAD = 95d2c8502e28ab3ee2cac52e975c3e7bccb1a93acc33d9c32786f66d6268d198
+Tag = 9c618bb88bbcefb008a5ea6bed4ff949
+Plaintext = 1d969fd81dab5ced3e6ee70be3bf
+Ciphertext = bfa1da8423beeb157c44677a3bbe
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = 5e60b02b26e2d5f752eb55ea5f50bb354a6f01b800cea5c815ff0030b8c7d475
+Tag = d6852dc829469368491149d6bb140071
+Plaintext = 54be71705e453177b53c92bbf2ab13
+Ciphertext = 788db949697b8cd9abbc74ed9aa40c
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = 210c04632341fbfc185bfe3cbf6fe272bbe971104173bcb11419b35ab3aaf200
+Tag = 56940dc5a7e44bf10234806d00a012b5
+Plaintext = 22197f9ad14591e7a6d5f8b18c969a
+Ciphertext = 0e2ab7a3e67b2c49b8551ee7e49985
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = d3a205dd017e79a67400a937a20ef049f4c40d73311731f03ab857a3f93bd458
+Tag = 0898f7dbde25b0b70d335df71a06987b
+Plaintext = 096b2f530933c1273304a6ad423726
+Ciphertext = 2558e76a3e0d7c892d8440fb2a3839
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = 0c9b3ba4faf5fc2f310ad1bab06c4ca13474b714feeffb6ad615c1b850bbd6a3
+Tag = 2fd10d1f21b6b963c05aeda8eb09e272
+Plaintext = d44fdfd9da3a63c1083afe574e91bf
+Ciphertext = f87c17e0ed04de6f16ba1801269ea0
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = d9bb71ad90152d5c1af358c8501fa89ebd4b17bf4ff43841528cccb79fd791b3
+Tag = 4491d23d90ff55abca17e9d943b98c7f
+Plaintext = 8d836acc13ed83c2b2c706415c9679
+Ciphertext = a1b0a2f524d33e6cac47e017349966
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = 69dc21eb6f295b12ba493ee8fe6c40d78af946067ce772db316a3cbf00d3c521
+Tag = 9616886c6b2adc97db5a673846b6662c
+Plaintext = 2a68e3fe746f593c1b97cb637079c3
+Ciphertext = 065b2bc74351e49205172d351876dc
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = 095eb52135dc6d9c1f56a2571c1389852482e7aa3edc245a3904a0449db24a70
+Tag = 2441dcae1760db90379bd354fa99164e
+Plaintext = 39799b001ed2c334c269acb0f2328c
+Ciphertext = 154a533929ec7e9adce94ae69a3d93
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = efd7270e0396392fde8b0ddaab00544cbbd504f4d97d4e90d749d1946de90dcb
+Tag = c7c7deb28bdcf84886ef843216b94449
+Plaintext = 42143a2b9e1d0b354df3264d08f7b6
+Ciphertext = 6e27f212a923b69b5373c01b60f8a9
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = 8bc181ce2e66294e803a8dc3834958b5f173bc2123c0726e31f3fca25b622ed6
+Tag = 35061ae3cd892ba63c44b809d6d29421
+Plaintext = a3dcf26327059a4245b79a38bb8db6
+Ciphertext = 8fef3a5a103b27ec5b377c6ed382a9
+
+Cipher = aes-256-ccm
+Key = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+IV = a5c1b146c82c34b2e6ebeceb58
+AAD = c39ec70c2c71633ae0dccc41477ac32e47638c885cf59f34ebd4a096d32f91f9
+Tag = 3c9ae69a4c59ff8e251c2fe022d065a9
+Plaintext = 3d54883449ecca8f153436c25a0a01
+Ciphertext = 1167400d7ed277210bb4d09432051e
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = 718d13e47522ac4cdf3f828063980b6d452fcdcd6e1a1904bf87f548a5fd5a05
+Tag = 6f9d28fcb64234e1cd793c4144f1da50
+Plaintext = d15f98f2c6d670f55c78a06648332bc9
+Ciphertext = cc17bf8794c843457d899391898ed22a
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = a371ca29b92ed676bab5dfc4d78631bb6d9bb23a29f822907084a1f0fe17721f
+Tag = 8b55bbe42d8c97504b97c34a5f16e6a6
+Plaintext = 60d55a8d5ab591a51e87fdf6aaa2ad25
+Ciphertext = 7d9d7df808aba2153f76ce016b1f54c6
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = 01ec87920b42639d4ba22adb1fbe5138d2849db670a2960fd94a399c1532ed75
+Tag = 017d8706acd676ae99e93d5312a4113c
+Plaintext = cbf112e4fb85276c4e09649f3de225b2
+Ciphertext = d6b93591a99b14dc6ff85768fc5fdc51
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = eebd2bbf1e9f6d817cd8062a6a9680e7f10464eefeb50b07cb46b14b9b3fcb2c
+Tag = 5982f0fe5d951a8c62c87894657301e4
+Plaintext = 865b89aa38ee1b5a3ce56620307e8937
+Ciphertext = 9b13aedf6af028ea1d1455d7f1c370d4
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = 72863362612f146699f6b2f6ec3688f2ca6cb1505af7a309c91c1933e34d516a
+Tag = 5addfddbb59f4985947fb3a9ab56333e
+Plaintext = a8efc37d1b8b51f2a47b21dd14da383d
+Ciphertext = b5a7e40849956242858a122ad567c1de
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = 9c9efc6593f96207678db813608f2b8bc33ed1bef974ed77ed7b6e74b621b819
+Tag = b651053516673402a57538db1a9ce7e9
+Plaintext = d9b0eaaff786165f882f41a98dbc0c35
+Ciphertext = c4f8cddaa59825efa9de725e4c01f5d6
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = dc482a051b58d8a3904d3af37c37b51983f634a504451bbba6f77d71337f8e78
+Tag = 86d772b1a1991b7be6589bbccad36171
+Plaintext = df49d972b6ebbbb18ee975ac635d847e
+Ciphertext = c201fe07e4f58801af18465ba2e07d9d
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = 51ef065a43caa23faf750b02a41ad6ba701aeb8058f6d8738d6f6b005bec7f60
+Tag = 569387a1a6bcc826e94012670820576e
+Plaintext = 78318aa5cd16699b77bdcea2fc9d1d20
+Ciphertext = 6579add09f085a2b564cfd553d20e4c3
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = 88e2a74d2920c89c6a101f5f06d0624a6d5eabd9bdb51395ee3983934c55c73d
+Tag = e9c788b4aae9b2c6caf0c44aa9bd2ed0
+Plaintext = 8e20d65d02dd9a64379f75b6d8328f2d
+Ciphertext = 9368f12850c3a9d4166e4641198f76ce
+
+Cipher = aes-256-ccm
+Key = ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62
+IV = 121642c4218b391c98e6269c8a
+AAD = ada3ed7db2dabbfbc441ef68a5656e628d6d5bd6c1574369688497179a77601a
+Tag = f1df0f01944641a1b04d753e6ab8d3cc
+Plaintext = 97e8d8513af41b97801de98cc4269096
+Ciphertext = 8aa0ff2468ea2827a1ecda7b059b6975
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = 217d130408a738e6a833931e69f8696960c817407301560bbe5fbd92361488b4
+Tag = f628ee49a8c2005c7d07d354bf80994d
+Plaintext = b0053d1f490809794250d856062d0aaa92
+Ciphertext = a6341ee3d60eb34a8a8bc2806d50dd57a3
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = 4ae414bc888a42141d3060c71c2dbbffd425b6a952806982271a8e756b3c9e24
+Tag = 3c1c5755a5a240c33b2b890a486aac8b
+Plaintext = 51eb190c6a9f46e8ec1628b090795470c0
+Ciphertext = 47da3af0f599fcdb24cd3266fb04838df1
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = 7b7f78ae1a5ee96fdc49dacd71be1a6ac09a6a162d44dea0172886eca5674e46
+Tag = 4cfca1c19abf447d7bc0898d61885144
+Plaintext = 25144e807e389bb0e45b6dc25558caf61a
+Ciphertext = 33256d7ce13e21832c8077143e251d0b2b
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = 03f31c6143b77f6ad44749e2256306b8bf82242f2821fad4075b09b388ba81ca
+Tag = 229cc7a390867a245dcb7c434f1db347
+Plaintext = dbe1ee14abfe2ecf4edf6db206cf9886ce
+Ciphertext = cdd0cde834f894fc860477646db24f7bff
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = 030390adb572f2bd2a6a4454fd68236cd1d465574328aa001d553375cc63f8a2
+Tag = 5361b539f9fe0fb7842907c2326aef63
+Plaintext = db6df31f12bf552f81deff5fa2a373fc22
+Ciphertext = cd5cd0e38db9ef1c4905e589c9dea40113
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = 7294ae94358669f2ada4b64c125b248df7fe86c6715e3b6a7b9bb2bd99392c8a
+Tag = 8ed10943929e7d7bf798b2ae8371aae5
+Plaintext = ff2a97b49fcc6a50d4549c979d53ccc51f
+Ciphertext = e91bb44800cad0631c8f8641f62e1b382e
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = 4d1513478fc1fb0a18eb6d2a9324fefbd975ecd1b409025de826bc397462acc1
+Tag = f92b9e49ab83f113f8949dc9e4a36e0d
+Plaintext = 73ddfa0185200a890b7690a7e3986d8818
+Ciphertext = 65ecd9fd1a26b0bac3ad8a7188e5ba7529
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = b26a7ff61bfe94864249af7cc9b4a723627dd4463f5a22f0ca6063769522eab7
+Tag = d0e53223adff22a08e3dddf66fff23e3
+Plaintext = 5c7604f9ac8fdf30ee5820e5aeb75b65d7
+Ciphertext = 4a4727053389650326833a33c5ca8c98e6
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = 960f9a85cfbfb6eab223a4139c72ce926a680ea8e8ecc3088cf123de659ad310
+Tag = 33f49a42521a7a2367f91bfcc2180b7c
+Plaintext = d44fdfd9da3a63c1083afe574e91bf01c9
+Ciphertext = c27efc25453cd9f2c0e1e48125ec68fcf8
+
+Cipher = aes-256-ccm
+Key = 7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d
+IV = 98a32d7fe606583e2906420297
+AAD = 3718467effb5d5dc009aaefce84d8cb4fe8f80eb608f4c678f5d0de02ea11e59
+Tag = c08bd395c6807223311070659f550934
+Plaintext = bb515dc227abb9acad8fefaa14771bb77b
+Ciphertext = ad607e3eb8ad039f6554f57c7f0acc4a4a
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = 67874c808600a27fcab34d6f69cc5c730831ad4589075dd82479823cb9b41dc3
+Tag = 52f2210b7a798ad5c778ee7cfd7fe6e0
+Plaintext = 6a26677836d65bd0d35a027d278b2534e7df
+Ciphertext = d1c1f3c60603359c7d6a707f05ecb2296f8e
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = e0c27cddf919d3092d9a34766c89a5ae6dcf39fe954d1e6f1a70ddf96805def4
+Tag = 0923bb5a347af13df12f234fca5f03ef
+Plaintext = 4021ff104ff1dbd91e46db249fd82198b0a1
+Ciphertext = fbc66bae7f24b595b076a926bdbfb68538f0
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = 7ae9eca03f616ab39ebb3be26b848842b4aa584e5c8e5695065ad5af34951175
+Tag = d03ed7bffac83e890caceb6903d9cab5
+Plaintext = 6a681f164efce199a787bccff223b8ae1a98
+Ciphertext = d18f8ba87e298fd509b7cecdd0442fb392c9
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = b47c9bc4eb01c74f5db2e6a293bef80db18c58cf06feef7ee0f8a7a9a51c22bb
+Tag = 4dd8f30870025b2bd1e2a2511574d3e7
+Plaintext = 7861dac338ba3f8274dca04c8c6f92b6d44c
+Ciphertext = c3864e7d086f51cedaecd24eae0805ab5c1d
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = f6afd661f218c7426b92ee53e65d14898cd0c78a7e594fcc6ac0e3fb5cab1c9c
+Tag = 6046d17f337f3cb49884d94995edbdc9
+Plaintext = a3f0473c620d2739d5ba4f7156f88d0fb669
+Ciphertext = 1817d38252d849757b8a3d73749f1a123e38
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = d3802911e341577046cfc61d9043b4af059fb4bef3c6a2ff46ccdcb05670af37
+Tag = 5fdc77b43bca254d6459263cdfed8fbb
+Plaintext = 07c535d9456a6ff1e41321150d16dae3f7a3
+Ciphertext = bc22a16775bf01bd4a2353172f714dfe7ff2
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = db60720db67a60ca286fe744d46173c231fbcc7deb4c9b0d87d52a2247e06b74
+Tag = dd1a1d36c8164c55d55dbf0ff1e9517a
+Plaintext = 5ee220720a896249efdab2ce418318bb5ebf
+Ciphertext = e505b4cc3a5c0c0541eac0cc63e48fa6d6ee
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = 57f70ba5493265b30491decc726354e2065e7971a2efd56db9cf0f79b1d76859
+Tag = b476e2ca48fd52bec0539b00744a8a07
+Plaintext = 98e4eb0361c8bf40bcbe0539b0850e4c35ff
+Ciphertext = 23037fbd511dd10c128e773b92e29951bdae
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = 4a29b9ad548964942f87f28ba267ec0d0e8f72c73b3823ee57693dd63c2605c1
+Tag = fad68c62b81d62f2d490ae74f5bb1465
+Plaintext = 7f0745bea62479c0080ecec52e37c1e32d72
+Ciphertext = c4e0d10096f1178ca63ebcc70c5056fea523
+
+Cipher = aes-256-ccm
+Key = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c
+IV = f61ef1c8c10a863efeb4a1de86
+AAD = acbd2e9911b3218a230d9db5086d91dccac3fc93fc64b0f4a15d56954906b2b7
+Tag = 13b15d8000266c61ba5aec898eb35b52
+Plaintext = e99ed2ac6c38e033061b5d85f3e77dd72518
+Ciphertext = 527946125ced8e7fa82b2f87d180eacaad49
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = 89ad6ae1e550975eaa916a62615e6b6a66366a17a7e06380a95ea5cdcc1d3302
+Tag = e3243faec177de4a2e4a293952073e43
+Plaintext = c1a994dc198f5676ea85801cd27cc8f47267ec
+Ciphertext = 7c9b138177590edaafec4728c4663e77458ffb
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = dfddb719d00398bf48a6cefd27736389e654a93b8595cd5ac446af1996e0f161
+Tag = 8422f736fc435687634d42254b22fd99
+Plaintext = 791e232bfb42fb18197adc1967da1a83f70168
+Ciphertext = c42ca4769594a3b45c131b2d71c0ec00c0e97f
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = 58ef310997dcaf067dd217274921504da6dbf0428a2b48a65fe8a02c616ac306
+Tag = 38a96e68ef7dbaef1b460cc0980eacd4
+Plaintext = 3d4127942459bb8682e662dfc862467582fa68
+Ciphertext = 8073a0c94a8fe32ac78fa5ebde78b0f6b5127f
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = 511e5d5e100b595f6b20e791830bca37e23f7b785e482a58405bffe7a632a5b8
+Tag = 5c5c702a82d468929227502e4e35796f
+Plaintext = 0e71863c2962244c7d1a28fc755f0c73e5cbd6
+Ciphertext = b343016147b47ce03873efc86345faf0d223c1
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = e48dfaa53b6807ea6f01d8dca67960b9f321f7851f324459a9bf61fe0be73abb
+Tag = 89188c0940182dd99a902d158c5b0810
+Plaintext = e0f1cd013e6aea4fa484fc3fa35d348b1a2399
+Ciphertext = 5dc34a5c50bcb2e3e1ed3b0bb547c2082dcb8e
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = c12c0423fe36e4c88775dd00b4af267b85b7dd2a37a742a3156923c8917c97a3
+Tag = 15849acbb7af1892790300bb84fb0558
+Plaintext = b1cc1946b4fc1dbd033254cdf536f61e9f9cd7
+Ciphertext = 0cfe9e1bda2a4511465b93f9e32c009da874c0
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = 4255f8af18df7237e0abe98421aec9634443561752d893aaffe76380e829ef32
+Tag = e75aaf3077ac6dfb5454851ec3910de6
+Plaintext = 87284658928208e3bddca83e3ceb13708d88d4
+Ciphertext = 3a1ac105fc54504ff8b56f0a2af1e5f3ba60c3
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = ab83567833d2f3461b5fbecc0e366694bb5ea00933b2b3e792ec3aefe20325df
+Tag = e70f42e3e1f2b5bb58433bd11f5dea1f
+Plaintext = bdb79f931ef3035a33bdd1b032fd9de8f6b2ba
+Ciphertext = 008518ce70255bf676d4168424e76b6bc15aad
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = bd1446ba3185d1c16551730947c22142142caa8cc1c540e89ab734ec297401bc
+Tag = 564f6248cefe5fc7cfb547c90a558925
+Plaintext = 1f9c3a8eb8bc59f3869e10f73883aa8f8990cb
+Ciphertext = a2aebdd3d66a015fc3f7d7c32e995c0cbe78dc
+
+Cipher = aes-256-ccm
+Key = bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f
+IV = 05b50c458adbba16c55fcc454d
+AAD = b87577755d2d9489194f6f7cfabf267dc3433a9c91954e81beb72c5e06870922
+Tag = b52249d812f7f235afa0732e984e91b2
+Plaintext = 5f28809181f9a889894da8d6fe1fde6cce354a
+Ciphertext = e21a07ccef2ff025cc246fe2e80528eff9dd5d
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = 7aebdfd955d6e8a19a701d387447a4bdd59a9382156ab0c0dcd37b89419d6eff
+Tag = 04e2dfeeeac9c3255f6227704848d5b2
+Plaintext = 7b125c3b9612a8b554913d0384f4795c90cd387c
+Ciphertext = 6cc611d816b18c6847b348e46a4119465104254a
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = d119f300fbd74e754a200ea2c3f9fabc1466d02078c84245db693eef3f5672a6
+Tag = 38d48329997c5981d678b5e24a6f01b0
+Plaintext = 8b013f5782d5d1af8dbd451a4202866095dac975
+Ciphertext = 9cd572b40276f5729e9f30fdacb7e67a5413d443
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = d6204303b86acf62d5ab860ca70161288ede56e3cf017c08dca56fd2d6f8f6fe
+Tag = a77e3ab68e0a73519591a33ed098b758
+Plaintext = b2b1d82a5523b72ea366a680922ed3a4624536c4
+Ciphertext = a56595c9d58093f3b044d3677c9bb3bea38c2bf2
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = 8557e22eb4529b43f16b1f8ae47c714ac8a2c827c1408a47704778b4c5b52601
+Tag = cff6c24251c2fb7b8604dfa10c60ef4a
+Plaintext = f8c4eb4285d3d7744da52775bb44ca436a3154f7
+Ciphertext = ef10a6a10570f3a95e87529255f1aa59abf849c1
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = 8c1a4187efbb3d38332f608f2c8bbe64247d9afa2281ced56c586ecb4ab7a85e
+Tag = 6c3c39f915d081d34559179869b32d81
+Plaintext = 6e7fe35fa39c937a0e6b3a8c072e218650f42b8d
+Ciphertext = 79abaebc233fb7a71d494f6be99b419c913d36bb
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = a41bb1f256228302cd0548ae2148ff42774d18c2d6d3e38b36bc4938da13bac3
+Tag = 9389a6a6a74c6eb0e1f87562469f2082
+Plaintext = 917b467d841850fc6e648f1bc298a7f9f1ee38ca
+Ciphertext = 86af0b9e04bb74217d46fafc2c2dc7e3302725fc
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = b0b024e20c4f75a6dad54c21a9edbce846792e957878b1c8ed2d916c757e2b3c
+Tag = 3bed3a2f5dfdbfcc0d7ac26c88d1962c
+Plaintext = 2b4314fe1a6bfa786b7cfc13fbee861b348efbf6
+Ciphertext = 3c97591d9ac8dea5785e89f4155be601f547e6c0
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = 42153925c46fc9d5d328312d62f59bb99fdc4ac479a3386d5f88fefd4b32f577
+Tag = 35ea1d99be344fa1467ee91c73bbca67
+Plaintext = e19fa7f83c79920cbff45c41a9dee8fc99e97396
+Ciphertext = f64bea1bbcdab6d1acd629a6476b88e658206ea0
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = 37ab2a0b7b69942278e21032fc83eba6cdc34f5285a8b711a08da6acd42299fe
+Tag = 7936ec10a81b36768b606e9a38b2f4c5
+Plaintext = 53e0475cf492b3d39dad600f5c58eb0bd0021554
+Ciphertext = 44340abf7431970e8e8f15e8b2ed8b1111cb0862
+
+Cipher = aes-256-ccm
+Key = 8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876
+IV = 8479bdfad28ebe781e9c01a3f6
+AAD = 4a17522da707b4b2587a0ae367a2cd2831bb593a18ef442a7977eda6de045878
+Tag = 11575ae03ea8a57bbe4a67c060367b74
+Plaintext = c119a383d9a3d4bff4270a1d22076b346db5f61c
+Ciphertext = d6cdee605900f062e7057ffaccb20b2eac7ceb2a
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = 2a243246bfe5b5ab05f51bf5f401af52d5bbaa2549cf57a18e197597fe15dd8c
+Tag = 2abeeaef1187f815ca481ed8ddd3dd37
+Plaintext = 73b09d18554471309141aa33b687f9248b50fe3154
+Ciphertext = b7e8264ca70fd2a4fb76f20a8ad5da3c37f5893fb1
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = 0595306eb7441622a49800edee0134492d82320707fceba902af2e0c95fe634a
+Tag = ccc2b55011dbe92ce7619e0ad48b4ccf
+Plaintext = b64d00f3a4df754fa4ee6376922fb67ccce0c6209f
+Ciphertext = 7215bba75694d6dbced93b4fae7d95647045b12e7a
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = bd439dbefec589e120fb4f9825b315bf86523b85c61791cd4da4c8d474ba2714
+Tag = 1e8b1f4d70d8f4c7df4f22847d36b394
+Plaintext = 2b11d1ac74ffe701ec733d32085b1054132726e622
+Ciphertext = ef496af886b444958644650b3409334caf8251e8c7
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = cfebe1cf82267394065bcecfada6709c6c35a3ac835644f560d4c9a8c1848364
+Tag = a85e76a9d07b7b361ca56d53c34cda50
+Plaintext = a88f22424643a523aa3d7d88f4364f1290f49dd0a2
+Ciphertext = 6cd79916b40806b7c00a25b1c8646c0a2c51eade47
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = 7a37255b682766a0bfecf78e5162528885a339174c2a49325739d2bd8877e64f
+Tag = fddb010e7508ad03ad287068ecee6020
+Plaintext = c81427bc84c6a3cfefd4c4cb210fe82212977e1947
+Ciphertext = 0c4c9ce8768d005b85e39cf21d5dcb3aae320917a2
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = 619f2ae80070e278615466a3fd6c9acb7b510c5679bed7038889c77e78d8bd32
+Tag = ddea785e6c470c52c4fdf432fd78b66e
+Plaintext = 28c4d6de3e2ce51b849b135d9cfd3084f0e3155447
+Ciphertext = ec9c6d8acc67468feeac4b64a0af139c4c46625aa2
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = b2571e56f66a857daffbdc99370ceddd4a7bed3867d600cc797000a3b7b57a9d
+Tag = 91232cfbd7ffff252498b35274fb2995
+Plaintext = 4c88151cafef75832bacef43a06e862349d56b67ee
+Ciphertext = 88d0ae485da4d617419bb77a9c3ca53bf5701c690b
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = db409636e3e3bcd606a91aeb7592009896f9ad2c4cc6b7f578e6ad59c0f8fa22
+Tag = 72b2c50e5e391ad104f9ee33b94f2872
+Plaintext = 572855e22ce89bc2bcf09cb15a1765d99973449d61
+Ciphertext = 9370eeb6dea33856d6c7c488664546c125d6339384
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = 62c89a835721207a182968c516dc8be45774ec846e8dcab9ab8611888f2a76a8
+Tag = 2d69c5d6db1b130102af3dae0690673b
+Plaintext = 89ce46b3de3afaf2518d419b1a2ac24cabca269a96
+Ciphertext = 4d96fde72c7159663bba19a22678e154176f519473
+
+Cipher = aes-256-ccm
+Key = c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2
+IV = 94ab51ce75db8b046d6ab92830
+AAD = 33f30ddd83002eea50fd4a8fae39d0980a04160a22ac88b755ac050f1d1f8639
+Tag = 489903365970c2673c9fd457e1077aad
+Plaintext = edf1682a626e9fbf3d57bb260e0876c6f92ba5b114
+Ciphertext = 29a9d37e90253c2b5760e31f325a55de458ed2bff1
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = f5353fb6bfc8f09d556158132d6cbb97d9045eacdc71f782bcef62d258b1950a
+Tag = 6eef83da9f6384b1a2bda10790dadb3f
+Plaintext = 3cbb08f133270e4454bcaaa0f20f6d63c38b6572e766
+Ciphertext = 3966930a2ae8fdd8f40e7007f3fde0bd6eb48a46e6d2
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = e3a1555ffe5f34bb43c4a2dae9019b19f1e44a45fb577d495d2a57097612448d
+Tag = 587bdd120a7d08cd3841cb117af444fb
+Plaintext = 946e86795c332031e2d1ee09d3d4a101fb6800d00911
+Ciphertext = 91b31d8245fcd3ad426334aed2262cdf5657efe408a5
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = 9c5d43c1a1269cde199509a1eff67cc83a1759b71c9e7a6ee99f76b98c6e23a6
+Tag = 45b32f81dcf03e2bcc2aaf62ad366e97
+Plaintext = b76ce2ab0065ba1c0a754494991c8c452cb416f18ab1
+Ciphertext = b2b1795019aa4980aac79e3398ee019b818bf9c58b05
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = b07452a7900a289b91b2771dfdd5108852536659aa259def7b41e38f80bd03ab
+Tag = fea17d78533bc9e022dbfb460afdf499
+Plaintext = a3e0d8d0784155bfc45769c52711d4fa68e8bc390c20
+Ciphertext = a63d432b618ea62364e5b36226e35924c5d7530d0d94
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = 6b30f55c3101540523a92380390f3f84632f42962061b2724cde78ac39809397
+Tag = 56defc6dcaeec80b1c639350ab6f1fde
+Plaintext = 6e6a88abbb52a709b47365ad6aa8016fa9a03a9bd834
+Ciphertext = 6bb71350a29d549514c1bf0a6b5a8cb1049fd5afd980
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = 9fc62d14f8b7a6026509275cff80312ff1ade2b5d9c274cb72a506a571439fc1
+Tag = 9d37b7251fb8c0ef2b37c36d51219d0f
+Plaintext = eba1810d537041821121aeff8e0914ac26a550072c8c
+Ciphertext = ee7c1af64abfb21eb19374588ffb99728b9abf332d38
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = 6b9389cc42113d639fd2b40cbc732ae0dc7c14513b88b36b45a6ea5a06fe4d2b
+Tag = d279d9da4437c8a2a252436508134c56
+Plaintext = dfc6692cd2442e5ff1f918c8812a27f81d107d16a12f
+Ciphertext = da1bf2d7cb8bddc3514bc26f80d8aa26b02f9222a09b
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = db72d98d63fc10acff7dceec0e2691a80ecee50a0e957ad166c77952a50318bd
+Tag = 63943543bc1c5f5991ecc5964a288f79
+Plaintext = 9ad338cbfd1b52e6ae4178f05e00062274f8b0b25eae
+Ciphertext = 9f0ea330e4d4a17a0ef3a2575ff28bfcd9c75f865f1a
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = e98b710c47a4d12a73cd8aa2613fc2910c16f4195ea7f15650132493521d19be
+Tag = 0a49ee2b7ceddcbd28abb24b77d5edee
+Plaintext = 9f5a05db89e0e336da066ce81b79ad9be1d0ec4fb7b8
+Ciphertext = 9a879e20902f10aa7ab4b64f1a8b20454cef037bb60c
+
+Cipher = aes-256-ccm
+Key = 9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4
+IV = af1a97d43151f5ea9c48ad36a3
+AAD = 527817316fc48b105f8ab178dd2db1fefa09c50461aa9d8bdf3c03482343bbf9
+Tag = b099a68cfa3572d974e03232e09f37fb
+Plaintext = 58f31e5770070a5d4031fb795dc2d298561d3559960d
+Ciphertext = 5d2e85ac69c8f9c1e08321de5c305f46fb22da6d97b9
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = 0cda000ed754456a844c9ed61843deea9dadf5e723ea1448057712996d660f8c
+Tag = 6950608d7bcb39dcf03a2cab01587f61
+Plaintext = 79ac1a6a9eca5e07ce635bfd666ef72b16f3f2e140d56c
+Ciphertext = 1abcc9b1649deaa0bfa7dcd23508282d9c50ca7fee7248
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = 3fb6ddb76809b8e6d703347664ef00a365955124c603900d5c8d4ff476138252
+Tag = 1c4fb40e5c8bc37152a173d4bbb18c3e
+Plaintext = 76d12e3c4c5d990bf563c60aa4999e52998d887f97477f
+Ciphertext = 15c1fde7b60a2dac84a74125f7ff4154132eb0e139e05b
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = d9fc295082e8f48569eb073ac1b9566246728fc62ccaab4a5667c472c98b2626
+Tag = 019c359008adae3070b5a543ead0effb
+Plaintext = a027c28fbe22111fd4c8a226cfe8531c16d7790d561eca
+Ciphertext = c33711544475a5b8a50c25099c8e8c1a9c744193f8b9ee
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = 7a459aadb48f1a528edae71fcf698b84ed64dc0e18cc23f27ab47eeabeaf833f
+Tag = bd099ab134756b90746762a92a4a9f7f
+Plaintext = fa597e37c26c38694abdcf450f9edc529160fa0d651979
+Ciphertext = 9949adec383b8cce3b79486a5cf803541bc3c293cbbe5d
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = 484207909dec4c35929ebe82fcacf20d2af6d850bd69364ebac9557adeadfbd4
+Tag = fa4f6adfec85d055310107ba89198afa
+Plaintext = 9e4c8aa9b58a8eabc5586892f5541000b43f17d9a051a0
+Ciphertext = fd5c59724fdd3a0cb49cefbda632cf063e9c2f470ef684
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = 88b5448372548e6aab1b262630a28a471d285514703f1bdb10c695850e18fe6d
+Tag = 915d23eb2e952afcc89fbddb567d9d75
+Plaintext = 7d9582cf9e3bb9ee34dce965f56b08e716589486b0641c
+Ciphertext = 1e855114646c0d4945186e4aa60dd7e19cfbac181ec338
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = 0e71863c2962244c7d1a28fc755f0c73e5cbd630a8dbdeb38842d7795d830d2e
+Tag = aad6c31828314e24198f005955ca8f5e
+Plaintext = 5a387e7cc22491fc556fe6a0c060b4911d01f0c11f801e
+Ciphertext = 3928ada73873255b24ab618f93066b9797a2c85fb1273a
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = 2aa7a28da38c42fda2e578d9d6340cd8e80b9b32047c3db296d0640d517b0872
+Tag = e531ebbadccfe47182b41904bbfebcfe
+Plaintext = 87946e910059cbaf48df63b220f397049c65ca10cd1920
+Ciphertext = e484bd4afa0e7f08391be49d7395480216c6f28e63be04
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = 3382051c268891da04e6ca73adcead4029f6a1593be4acfe3968e7351a6a2fb5
+Tag = 7c582414154236c09ee704cf4a5de411
+Plaintext = c62f67d208f1c8ffd5d57df9de15ef54f97fbc07d1630a
+Ciphertext = a53fb409f2a67c58a411fad68d73305273dc84997fc42e
+
+Cipher = aes-256-ccm
+Key = d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135
+IV = 3891e308b9f44c5b5a8b59004a
+AAD = c352828b1920e53bbb60f2ea6a5f15639659e6f3243405c26f6e48628d5519a9
+Tag = 57c9990029c89d1b37988745fa5737a3
+Plaintext = 697e73eaaf562d31bdbf7ce9e78c7426fe1c87e421def9
+Ciphertext = 0a6ea03155019996cc7bfbc6b4eaab2074bfbf7a8f79dd
+
+Cipher = aes-256-ccm
+Key = 4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976
+IV = 00d772b07788536b688ff2b84a
+AAD = 5f8b1400920891e8057639618183c9c847821c1aae79f2a90d75f114db21e975
+Tag = 0f73bfb28ad42aa8f75f549a93594dd4
+Plaintext = 9cea3b061e5c402d48497ea4948d75b8af7746d4e570c848
+Ciphertext = f28ec535c2d834963c85814ec4173c0b8983dff8dc4a2d4e
+
+Cipher = aes-256-ccm
+Key = 4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976
+IV = 00d772b07788536b688ff2b84a
+AAD = 1ae8108f216defea65d9426da8f8746a3ae408e563d62203063d49bf7e0d6bdf
+Tag = 4de907a59c5e4d3f21e1348d7cdf92b6
+Plaintext = 2b223932fb2fd8433e4b1af9e8234a824569a141f6c96a69
+Ciphertext = 4546c70127abacf84a87e513b8b90331639d386dcff38f6f
+
+Cipher = aes-256-ccm
+Key = 4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976
+IV = 00d772b07788536b688ff2b84a
+AAD = 460f08114b1015fe8b7a9b5dd1b9e6a3d28367c4bd15f29b13c02a8cb9a53968
+Tag = ff4239544e2f354d6c6837cd9c23b884
+Plaintext = 4d57cbe4a7e780d4ed17267d5ebc91750c2f0209e0444bd2
+Ciphertext = 233335d77b63f46f99dbd9970e26d8c62adb9b25d97eaed4
+
+Cipher = aes-256-ccm
+Key = 4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976
+IV = 00d772b07788536b688ff2b84a
+AAD = 860f4428259d9c5b17698cc95363db6cfee603258582e3a3e8feb886599d4ac4
+Tag = 3f6c6f7cc494201069344e2d6d41bd9b
+Plaintext = fda8665f87c618646a89c7abdca275fd10c31453ad4b9c99
+Ciphertext = 93cc986c5b426cdf1e4538418c383c4e36378d7f9471799f
+
+Cipher = aes-256-ccm
+Key = 4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976
+IV = 00d772b07788536b688ff2b84a
+AAD = 1b43c482f83780c21583f88e5afcf6938edd20f21b74d895161b60c27a6a42f0
+Tag = 3787a15352cfceb028202c8730beaa7a
+Plaintext = 98104fd3f3413ad1f57ef4912cb50097dca379a58c47b0d2
+Ciphertext = f674b1e02fc54e6a81b20b7b7c2f4924fa57e089b57d55d4
+
+Cipher = aes-256-ccm
+Key = 4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976
+IV = 00d772b07788536b688ff2b84a
+AAD = b082ccd964617c27a5607b7324faad237ee53acfc18c35502dbf7c1937a9dfcb
+Tag = f3a0ca3da647eb31893e867956097983
+Plaintext = b46b343e64d2d70e0bd909dbb3f6bedf7e4adc74321be526
+Ciphertext = da0fca0db856a3b57f15f631e36cf76c58be45580b210020
+
+Cipher = aes-256-ccm
+Key = 4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976
+IV = 00d772b07788536b688ff2b84a
+AAD = b8539ba93ef17254ec1d8d62e8f4eae4d41ee1e75345bf90c9cbb26c63bce501
+Tag = e663fbbebbc251b9f1760afa49e89e71
+Plaintext = 8e12620bb575e6b167b085255b2b5631ff28e04cbef8826d
+Ciphertext = e0769c3869f1920a137c7acf0bb11f82d9dc796087c2676b
+
+Cipher = aes-256-ccm
+Key = 4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976
+IV = 00d772b07788536b688ff2b84a
+AAD = b6b09463b5ef5ead1f17f4021693a0d8452e98dcbb8e7590f9fde6394970a6f8
+Tag = da90cd87e9d9ca5d85430a150e682752
+Plaintext = 792aaa23b923d1b53173fe19853b9aa402a301d48529873e
+Ciphertext = 174e541065a7a50e45bf01f3d5a1d317245798f8bc136238
+
+Cipher = aes-256-ccm
+Key = 4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976
+IV = 00d772b07788536b688ff2b84a
+AAD = 390f6de14d5e1f2f78dbe757c00b89209d0cf8bc48cbbea035779f93de357905
+Tag = fc0cc4601afb61efa7059cfe49ec9dde
+Plaintext = ddc5b4e48970ebd72869be6998e9103c014475e8ae6ea29c
+Ciphertext = b3a14ad755f49f6c5ca54183c873598f27b0ecc49754479a
+
+
+Title = NIST CCM 128 Variable Tag Tests
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = 2084f3861c9ad0ccee7c63a7e05aece5db8b34bd8724cc06b4ca99a7f9c4914f
+Tag = a8c74677
+Plaintext = a2b381c7d1545c408fe29817a21dc435a154c87256346b05
+Ciphertext = cc69ed76985e0ed4c8365a72775e5a19bfccc71aeb116c85
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = 79db716e6b0b1627890d378c4560eba7871883d94527be3454dc3c257ea93556
+Tag = 676e2df1
+Plaintext = 47f4cdd574264f48716d02d616cf27c759fdf787cdcd43b1
+Ciphertext = 292ea1643d2c1ddc36b9c0b3c38cb9eb4765f8ef70e84431
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = 0d02778f90a164a4f9ada9dc7fd24eeb941069621418ef32c3f9ca6bf6fb2c4a
+Tag = eb1321a1
+Plaintext = 5eadeaec29561244ede706b6eb30a1c371d74450a105c3f9
+Ciphertext = 3077865d605c40d0aa33c4d33e733fef6f4f4b381c20c479
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = 02e5a1306f612bdec098458cff3e691d93f050ba11ba627355dc7029d2cea5ab
+Tag = dd8cb4ca
+Plaintext = aac9fb69fed114c62db65090947096a2f5c85c271c6a6d53
+Ciphertext = c41397d8b7db46526a6292f54133088eeb50534fa14f6ad3
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = 25144e807e389bb0e45b6dc25558caf61a2263869c4d0e4079d07674d7091110
+Tag = b659a844
+Plaintext = fb6e8d38ce38a8c1e710f3a33c682e6dabf055fb33fe75f8
+Ciphertext = 95b4e1898732fa55a0c431c6e92bb041b5685a938edb7278
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = be303c1ed9327ad88dae7cb5930b5a786d4f5477ef9370a9fdb56501964cb8fa
+Tag = e9e5e005
+Plaintext = 87d81389a6062e8ed501ea964c2fe35b2d3de9fd676c04f7
+Ciphertext = e9027f38ef0c7c1a92d528f3996c7d7733a5e695da490377
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = 46dfb8f3e06c3f168e5ac9b341e7710d7b9c6a19b32389eafb58036de0a27756
+Tag = c9fc48e0
+Plaintext = e1bd9095fa9bb811e4054643feea3eac13fb57b43a0502a0
+Ciphertext = 8f67fc24b391ea85a3d184262ba9a0800d6358dc87200520
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = 19eb03c35c352b79e8c32fa40bb9759b0565e04a6c18519ace346e2e9987a250
+Tag = ac73022c
+Plaintext = 92f7dc22dcbbe6420aca303bd586e5a24f4c3ed923a6ebe0
+Ciphertext = fc2db09395b1b4d64d1ef25e00c57b8e51d431b19e83ec60
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = efa6ddd6fb8e4480a0f64414694e5f9e7f2e9b97cbe9cd145b65173d072ab001
+Tag = 5dc8d581
+Plaintext = cecdf831c4044c8fe149e4cd579a1aecf222bf8e9dadba09
+Ciphertext = a01794808d0e1e1ba69d26a882d984c0ecbab0e62088bd89
+
+Cipher = aes-128-ccm
+Key = 43b1a6bc8d0d22d6d1ca95c18593cca5
+IV = 9882578e750b9682c6ca7f8f86
+AAD = 1b156d7e2bf7c9a25ad91cff7b0b02161cb78ff9162286b0622fccda2e251c97
+Tag = b941b65b
+Plaintext = 7cfb0973ea13dedc33ef6728db90f47559273ea6d3cd4db6
+Ciphertext = 122165c2a3198c48743ba54d0ed36a5947bf31ce6ee84a36
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = cd149d17dba7ec50000b8c5390d114697fafb61025301f4e3eaa9f4535718a08
+Tag = 32bc2ffa8600
+Plaintext = 8db6ae1eb959963931d1c5224f29ef50019d2b0db7f5f76f
+Ciphertext = df952dce0f843374d33da94c969eff07b7bc2418ca9ee01e
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = 463c65fa7becae5605af80d1feca59075ee88c0abfc72cb463312b3c772ec308
+Tag = 8b847d3a0c98
+Plaintext = bde3fc83287ddd1227bdab4305102c94d885412eb332bf6b
+Ciphertext = efc07f539ea0785fc551c72ddca73cc36ea44e3bce59a81a
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = ab153b0a8933f2eb0d721621c86de0cfe100d13e09654824b09d54277912c79d
+Tag = fb4f9d559a8e
+Plaintext = 82176e573c6070faa08d18b5957f119bb1ff51d744b04240
+Ciphertext = d034ed878abdd5b7426174db4cc801cc07de5ec239db5531
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = b22aba8d3e9f4b4bf006e26062de15daf94597731a6009129bfd12957877b1ce
+Tag = 1e09ff3d6a6c
+Plaintext = bcfc4485eaf225d945146374b737cdf5301c7738ea9f142a
+Ciphertext = eedfc7555c2f8094a7f80f1a6e80dda2863d782d97f4035b
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = eb80a43c5986deee6925d7c6d53cbdcbe11194843ea133f72d3590d8e8363efa
+Tag = b60ba1175f1b
+Plaintext = aa182e3ec4fb2f7a905c03582b2ee100ab81a9a311a778bc
+Ciphertext = f83badee72268a3772b06f36f299f1571da0a6b66ccc6fcd
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = 3ee186594f110fb788a8bf8aa8be5d4ad52d6e3bd5f406f080d9df0d7553a851
+Tag = 4a75860f3dd6
+Plaintext = 8ad6db8216af16bfda3261a220d078cc98c8ad134e4a80ca
+Ciphertext = d8f55852a072b3f238de0dccf967689b2ee9a206332197bb
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = d36fc18b5b12662ff5f6ea55af7c7a82d25d386220e399a85a590b1505c0dcd5
+Tag = 00cf106d70a4
+Plaintext = a65d24bd1ab92d8d294d654423412860e113c976f12ed76b
+Ciphertext = f47ea76dac6488c0cba1092afaf638375732c6638c45c01a
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = f0028503e7cd54474c56dc8b2416fe41f416eed73c63ddd141bdd51a0f8fe49c
+Tag = c0193a87ddfb
+Plaintext = 6e9dc61dd9cf19a6eebc10c9b51c13970636de2c9ea33592
+Ciphertext = 3cbe45cd6f12bceb0c507ca76cab03c0b017d139e3c822e3
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = 9a58a226a578bda012dbd7d04b11c879179aaaa36c6145418586cb103360c6c2
+Tag = 444d9b63ffab
+Plaintext = b526896c11e514b5b4c26351859e2a33800fefd6fd9e6d1a
+Ciphertext = e7050abca738b1f8562e0f3f5c293a64362ee0c380f57a6b
+
+Cipher = aes-128-ccm
+Key = 44e89189b815b4649c4e9b38c4275a5a
+IV = 374c83e94384061ac01963f88d
+AAD = c015fb08540755a8a8adc387d60553478667158964202eb2d25e28efd94c8c76
+Tag = c339ba21fcf7
+Plaintext = 88907b639f3fd07f40bf6b9b6334b11b2852557975721bf3
+Ciphertext = dab3f8b329e27532a25307f5ba83a14c9e735a6c08190c82
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = 34396dfcfa6f742aea7040976bd596497a7a6fa4fb85ee8e4ca394d02095b7bf
+Tag = f6d1d897d6051618
+Plaintext = 1cccd55825316a94c5979e049310d1d717cdfb7624289dac
+Ciphertext = 1a58094f0e8c6035a5584bfa8d1009c5f78fd2ca487ff222
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = 25865c1b89f1973bfa680d8458df35a56993a7e81e407e061794004068e481ab
+Tag = ceca422687f41550
+Plaintext = 36004342dd74e7966692a848b2c11e1fc311eac9d9cef616
+Ciphertext = 30949f55f6c9ed37065d7db6acc1c60d2353c375b5999998
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = e6209480da9e49172ba58a9048f2f1b0349030e8e7a79dcdf295eecd613f401a
+Tag = d2b981fc741f2591
+Plaintext = e81f4fb360bcae372d8be3f32655a29bc10a2f31876173cc
+Ciphertext = ee8b93a44b01a4964d44360d38557a892148068deb361c42
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = 112c969882e685b4ae1ee6b67f680e6a1d9d840e627d12118f991c1a3d71314c
+Tag = a1fd47cd41fcf013
+Plaintext = 27d6443e729d35d7a0690fcb7fe0b20892875f60b5d8763a
+Ciphertext = 2142982959203f76c0a6da3561e06a1a72c576dcd98f19b4
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = 73ef62870c50faca5d4e6c6ec45fa7b54bf79ed229fcf1fc8c79c9c09596039b
+Tag = 43eb86ffa6958d71
+Plaintext = 6c17ad5496dfccde8b877630e1e582dab52aaabe385a321f
+Ciphertext = 6a837143bd62c67feb48a3ceffe55ac855688302540d5d91
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = b537f0f2981405f6069b401966656461b3516a32d181777121a60cea537e7cef
+Tag = 1dfc38975c948d29
+Plaintext = dc4a1e39561f14321238272adff8b74a4e770c0a0c864a52
+Ciphertext = dadec22e7da21e9372f7f2d4c1f86f58ae3525b660d125dc
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = 96bd747ccdcd5fa6cd920514a2f38203e82ee9c7ec6e88080e9f6e2a6a812b0d
+Tag = 20a48ee3845d9e7a
+Plaintext = c51958d7d7d39906b14d4ebb574db881355ec3e6b41838dd
+Ciphertext = c38d84c0fc6e93a7d1829b45494d6093d51cea5ad84f5753
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = 690d6a2377314fc2f7dd06ae401e3585c79faf648a7af358ae4ef615669222eb
+Tag = 884188f946c9a317
+Plaintext = 9eaf24f84e8818e286410de321d65ffbf25d1a14073c60da
+Ciphertext = 983bf8ef65351243e68ed81d3fd687e9121f33a86b6b0f54
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = 748dc83299a43033239ad2fef2dc3d72b76a38ca127607cef72de94a56d5e5c0
+Tag = 0ae2dd33327f8459
+Plaintext = 71c8eb0079559a306e236c49b7ce1b6cfe26c7888733eb7e
+Ciphertext = 775c371752e890910eecb9b7a9cec37e1e64ee34eb6484f0
+
+Cipher = aes-128-ccm
+Key = 368f35a1f80eaaacd6bb136609389727
+IV = 842a8445847502ea77363a16b6
+AAD = 35a49535684637f67573fb0b4fdc1bdd8a57650a1d8f29b866fa552a6e0cdf91
+Tag = c50821a48b93d0ca
+Plaintext = f09569906381138cc49e3fc2384c5d33c34abd3d617c487b
+Ciphertext = f601b587483c192da451ea3c264c8521230894810d2b27f5
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = c71620d0477c8137b77ec5c72ced4df3a1e987fd9af6b5b10853f0526d876cd5
+Tag = 6d86e69c07f053d1a607
+Plaintext = 84cdd7380f47524b86168ed95386faa402831f22045183d0
+Ciphertext = a7fbf9dd1b099ed3acf6bcbd0b6f7cae57bee99f9d084f82
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = 7b40b3443d00a0348a060db109e8882157612c43084ac5c3e9c5350c88bc165d
+Tag = 94af9359a96acfb31a4a
+Plaintext = 7ebb051741145a3bad87131553375c6debcbcecee9b79ee4
+Ciphertext = 5d8d2bf2555a96a3876721710bdeda67bef6387370ee52b6
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = 5cab3b84687070956916c11cab0ceea61adb6ea1f909be63d73df96fbfa3a9f4
+Tag = 36d3920d1012bf093a5c
+Plaintext = 35a29c1bcbe2182f34fe05f09dfb9ac4a496f95819ef11ec
+Ciphertext = 1694b2fedfacd4b71e1e3794c5121ccef1ab0fe580b6ddbe
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = 6d440b44a069a6967f8750c3b4f8118798fe32d2eaa696ccc7f24e16d6366753
+Tag = c23025c1776811647f99
+Plaintext = a0e21d971876ae4048a61b43a3ac07c685005a20bccbe6ec
+Ciphertext = 83d433720c3862d862462927fb4581ccd03dac9d25922abe
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = 06904325b8c6fc2b5a0412ba8062cd48d3af51beacb5ced9e2bdf8d0e056b738
+Tag = 6efeeaed29e65f1a8908
+Plaintext = 8d333ed7d4b208e794e1673f6df692caee4e3a00fc49115e
+Ciphertext = ae051032c0fcc47fbe01555b351f14c0bb73ccbd6510dd0c
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = e5049e1c32f0a000024882e4fca9b77adb6c87fdbad96d0c8e97bdb8f46789dc
+Tag = 70d42f84a5411dfa43f9
+Plaintext = 4189351b5caea375a0299e81c621bf434b6b97da68ad44be
+Ciphertext = 62bf1bfe48e06fed8ac9ace59ec839491e566167f1f488ec
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = 6f0be1905d1b5b607574ad93a1e7b4a536020fc6798acae862253916a0562707
+Tag = add2256112d1f7d04934
+Plaintext = 5a063a24410b3d265c9a32a027cb2382a52bb8e35db15b98
+Ciphertext = 793014c15545f1be767a00c47f22a588f0164e5ec4e897ca
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = a90f9f55ef22f5e6c542ed3573a9ab67d9c3b6775587fc2be70817479347ce00
+Tag = e187f5f37e8a5029ca4e
+Plaintext = 0b72cb09a444be2d7b34cf9997fc5b885851d7e6092008b4
+Ciphertext = 2844e5ecb00a72b551d4fdfdcf15dd820d6c215b9079c4e6
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = 4dd64fd7d8b571704cddabef854c51691ace4c30de74bfecad42eaed65284ebf
+Tag = fbbb92009435f9ab6691
+Plaintext = ce2d996c9a4cf85edb888822773e03179feeb9e4b0928d6a
+Ciphertext = ed1bb7898e0234c6f168ba462fd7851dcad34f5929cb4138
+
+Cipher = aes-128-ccm
+Key = 996a09a652fa6c82eae8be7886d7e75e
+IV = a8b3eb68f205a46d8f632c3367
+AAD = 75f4031d2e5098a9ea3eaa20c2423fbc1705ea18289efb96e311f3fefc153b67
+Tag = 3cae38db7cc9d577b0ed
+Plaintext = aa182e3ec4fb2f7a905c03582b2ee100ab81a9a311a778bc
+Ciphertext = 892e00dbd0b5e3e2babc313c73c7670afebc5f1e88feb4ee
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = 2c16724296ff85e079627be3053ea95adf35722c21886baba343bd6c79b5cb57
+Tag = d6965f5aa6e31302a9cc2b36
+Plaintext = d71864877f2578db092daba2d6a1f9f4698a9c356c7830a1
+Ciphertext = b4dd74e7a0cc51aea45dfb401a41d5822c96901a83247ea0
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = 78230f73f9c0150f630eca4cd679818551d449db82e665d8dc25fc53ebc11293
+Tag = 6356e2548a22e7cbee3b89d4
+Plaintext = 048ba28abb191ded5449dfe9dc7d19f9b132a2a9fd779aab
+Ciphertext = 674eb2ea64f03498f9398f0b109d358ff42eae86122bd4aa
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = c09191a7d2fca98fca486f8843f275a78d57b8c9a6d330d5652ba641f928c6d8
+Tag = 35516f170a2aada38d1d94eb
+Plaintext = adf51386b3cc133ea9d18e679fe4bbf10ea780b7bed57d6a
+Ciphertext = ce3003e66c253a4b04a1de85530497874bbb8c985189336b
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = ea46cc1a7ba5afaa6176f8dedc049283d2ac38fa74ef37ea1fc575328033b222
+Tag = ea2d3237788a02ff15258351
+Plaintext = f660a28551416b2f8e21466ba99daee280a91740d98219cf
+Ciphertext = 95a5b2e58ea8425a23511689657d8294c5b51b6f36de57ce
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = 3093b74eb088bdd59999629d59509920938f4feabbd29df8e0b44364c8b55244
+Tag = 65fb6719509987930d350890
+Plaintext = b9a96f0e4c6dea8861e888bdd693b300017718da958aaa00
+Ciphertext = da6c7f6e9384c3fdcc98d85f1a739f76446b14f57ad6e401
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = 5580672e52aacb9d714a34c31c33fc221e13e8f90849adbad3f6b3bec8571838
+Tag = 8ecdf173444c334cfda5b22b
+Plaintext = cc4acdbd34ec9b7cbc3e23a53e0627c2a7c63206f3e0298d
+Ciphertext = af8fddddeb05b209114e7347f2e60bb4e2da3e291cbc678c
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = c7acf1b17609dc336df1006ffac6497777cdfd497c8c91525377c130accce0bc
+Tag = 2221c860022d92b0f961c3e6
+Plaintext = ed75d28be4794ad81bbc0f26a11c5466f23c0270d2d7b8f8
+Ciphertext = 8eb0c2eb3b9063adb6cc5fc46dfc7810b7200e5f3d8bf6f9
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = ac1adca686e1d129142c49f26b52941d037d8052b8a27d5215b7ffcfd2202481
+Tag = 1c73d6a695afc704228ed7a1
+Plaintext = b8234b8bd34d9c6ceffebbb85722764e7d37e43c495256e0
+Ciphertext = dbe65beb0ca4b519428eeb5a9bc25a38382be813a60e18e1
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = 472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177
+Tag = bf1e81950e44c63183a679d7
+Plaintext = 790134a8db83f2da35dde832c3ae45ec62aff0274495d6e7
+Ciphertext = 1ac424c8046adbaf98adb8d00f4e699a27b3fc08abc998e6
+
+Cipher = aes-128-ccm
+Key = 3ee186594f110fb788a8bf8aa8be5d4a
+IV = 44f705d52acf27b7f17196aa9b
+AAD = 1340ac7ff04dd7450afc13f8fa52df6d526c744a2dc2f76b0aadf284da270508
+Tag = c2c3a1876e49a47a9b44b737
+Plaintext = 21ea2f778cf37aa02fea30e855c20a77909548da4ee7eb61
+Ciphertext = 422f3f17531a53d5829a600a99222601d58944f5a1bba560
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = 76cf3522aff97a44b4edd0eef3b81e3ab3cd1ccc93a767a133afd508315f05ed
+Tag = ddb36e37da1ee8a88a77d7f12cc6
+Plaintext = ea384b081f60bb450808e0c20dc2914ae14a320612c3e1e8
+Ciphertext = 79070f33114a980dfd48215051e224dfd01471ac293242af
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = 41aa11ec55980609482575b97eee172590ff545d5798fd4246313da3fdbbcda6
+Tag = a850b0116f3269b5e44e57de7166
+Plaintext = 811d54bad842a8b92b96fc03b4fff8b5f1939fd3a49876dc
+Ciphertext = 12221081d6688bf1ded63d91e8df4d20c0cddc799f69d59b
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = dedfb02e93b975270f50cffa3351c85975a7b21fd89bbb921c40c1e5310e6702
+Tag = 0f053627bd0c90714820c4fbe5ec
+Plaintext = 8bbf87b490020b863fc596a8d169d79c0cb3506e1f1f5aa2
+Ciphertext = 1880c38f9e2828ceca85573a8d4962093ded13c424eef9e5
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = a727ed3d13331ee6a224ae4b73f0ccb04b997fcf88533a1f57e9b055275de92b
+Tag = f865a77d66f1232cd7e36af3d1be
+Plaintext = 7294ae94358669f2ada4b64c125b248df7fe86c6715e3b6a
+Ciphertext = e1abeaaf3bac4aba58e477de4e7b9118c6a0c56c4aaf982d
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = 6704dc39a259152d2dc3f08b8799ffecf4e1bc38ce5b77c71cc293c6664ef2dd
+Tag = e1fba154f6b166549d0d6bb9b573
+Plaintext = 48033c46389f6221fb9cdda1ecb8fc25fdec6afe4eaa5fd0
+Ciphertext = db3c787d36b541690edc1c33b09849b0ccb22954755bfc97
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = 6cba004dfb5e5d9e1433bf1223039ae1d2df89cd2db68f550327a22c8f946ae9
+Tag = c485e9e28ae33959f8acbb640fbf
+Plaintext = 01acc909b7d3bb3b3e1f72845f05238d2e1d9162976d3bd2
+Ciphertext = 92938d32b9f99873cb5fb316032596181f43d2c8ac9c9895
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = dd5799710523aa1da0b1209fab1e6f2ed177444ed3880d462deebbd5f774c621
+Tag = 8ef976fa9bda9544ed94ef266ed2
+Plaintext = 3706def87786e49baec2d13407865286cb4e05908cac430f
+Ciphertext = a4399ac379acc7d35b8210a65ba6e713fa10463ab75de048
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = 5d7505ff863d218f6822150455b977ad2df3c02be094f6832ee68872b1ae7a01
+Tag = 0caadf1dbd07515e3bfb6992e2cd
+Plaintext = f38d4b225d9b80a0c5fadc61476aef419ad3d18937d8661f
+Ciphertext = 60b20f1953b1a3e830ba1df31b4a5ad4ab8d92230c29c558
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = 796b62c7abf797de7f6bad8bf5d549688ccb7ada62fff9469c14b08208b07a8a
+Tag = 733ad369e4a067b7976c9d6d0456
+Plaintext = 993bb3a85f67f6c1a809d8094ee80e2ad9b694063af2fdb3
+Ciphertext = 0a04f793514dd5895d49199b12c8bbbfe8e8d7ac01035ef4
+
+Cipher = aes-128-ccm
+Key = 7b2d52a5186d912cf6b83ace7740ceda
+IV = f47be3a2b019d1beededf5b80c
+AAD = 84fd27557aeb283282366083e3586f3a59691ccd0d43ec81c4e5f4e85715eba8
+Tag = 39860d66891f32ce0a09788f5899
+Plaintext = 1286506be19fb865a288b09dda8af4323567cd9a66e08643
+Ciphertext = 81b91450efb59b2d57c8710f86aa41a704398e305d112504
+
+Cipher = aes-128-ccm
+Key = 4189351b5caea375a0299e81c621bf43
+IV = 48c0906930561e0ab0ef4cd972
+AAD = 40a27c1d1e23ea3dbe8056b2774861a4a201cce49f19997d19206d8c8a343951
+Tag = d80e8bf80f4a46cab06d4313f0db9be9
+Plaintext = 4535d12b4377928a7c0a61c9f825a48671ea05910748c8ef
+Ciphertext = 26c56961c035a7e452cce61bc6ee220d77b3f94d18fd10b6
+
+Cipher = aes-128-ccm
+Key = 4189351b5caea375a0299e81c621bf43
+IV = 48c0906930561e0ab0ef4cd972
+AAD = ac8dde7ba60e4ba226eecb0a789b1c4673ddffe8f371464389f52f767004f0a6
+Tag = 96363d27b9e11fee55111b273399f5ff
+Plaintext = 7c0889854658d3408c5d8043aad2f4ae4a89449a36f8a3b8
+Ciphertext = 1ff831cfc51ae62ea29b0791941972254cd0b846294d7be1
+
+Cipher = aes-128-ccm
+Key = 4189351b5caea375a0299e81c621bf43
+IV = 48c0906930561e0ab0ef4cd972
+AAD = 8f2777ec4930f7e349c3bd4830120cebdd896db9d8a33d34f101672024bd737f
+Tag = f741e15ad9b2f5ab864ad94d3f9de562
+Plaintext = c641cf589020b94026ae5ac0bfdc29822cc13862a54614c7
+Ciphertext = a5b1771213628c2e0868dd128117af092a98c4bebaf3cc9e
+
+Cipher = aes-128-ccm
+Key = 4189351b5caea375a0299e81c621bf43
+IV = 48c0906930561e0ab0ef4cd972
+AAD = a87426f83bf91bd3c3556bf859cd97f51c92609879f02dbca9c7ae637a3fbf05
+Tag = 652a083ea1b43b7da026692c7aa796d7
+Plaintext = d204994c128d6204ef2939c22572daa56c12df2e4d3e33e9
+Ciphertext = b1f4210691cf576ac1efbe101bb95c2e6a4b23f2528bebb0
+
+Cipher = aes-128-ccm
+Key = 4189351b5caea375a0299e81c621bf43
+IV = 48c0906930561e0ab0ef4cd972
+AAD = 7ff9ca86f820e4d57995d450611009ffaa726e6fbe4ce1558ca1e775daed9ec2
+Tag = 057e0faa2711cfa1e3da5499f9a1ee0b
+Plaintext = aff9bb0238689255f54cd5fdebe6d3dff5f5604ab8d77038
+Ciphertext = cc090348bb2aa73bdb8a522fd52d5554f3ac9c96a762a861
+
+Cipher = aes-128-ccm
+Key = 4189351b5caea375a0299e81c621bf43
+IV = 48c0906930561e0ab0ef4cd972
+AAD = faa6b7f8c6e076b5e5b981119b7ec2e0b9c73da4064f9704e303d5792f59674b
+Tag = 90b39704d8913391ebd3424117b93b68
+Plaintext = 95d2cf30b6174b17278ad9f44079a2199082dab917f89763
+Ciphertext = f622777a35557e79094c5e267eb2249296db2665084d4f3a
+
+Cipher = aes-128-ccm
+Key = 4189351b5caea375a0299e81c621bf43
+IV = 48c0906930561e0ab0ef4cd972
+AAD = b553e65640c1ad0d2ff748c5b2af9d970c74131cff4fa73384a33dfec056332e
+Tag = d0a6cb58733be0a3b608afdf78eaa70c
+Plaintext = aaa53244520e157c4890a0e62100a12daa84f9be710242d7
+Ciphertext = c9558a0ed14c2012665627341fcb27a6acdd05626eb79a8e
+
+Cipher = aes-128-ccm
+Key = 4189351b5caea375a0299e81c621bf43
+IV = 48c0906930561e0ab0ef4cd972
+AAD = a9be73668b94bc6a212744522a0adff03d49fd495daadaf6cd32f4ca25ebc2b5
+Tag = af20ce64e6a821e39ca96aded43f0875
+Plaintext = 1066b96c3c44301073717520ea5c07adbac7759b88d52154
+Ciphertext = 73960126bf06057e5db7f2f2d4978126bc9e89479760f90d
+
+Cipher = aes-128-ccm
+Key = 4189351b5caea375a0299e81c621bf43
+IV = 48c0906930561e0ab0ef4cd972
+AAD = 8b516c47e6630b2c31d8eefd8ba152d7315582a3f4d3f0e0eb2984a365b434db
+Tag = cf4699d23f5fc6742bffebbd16858f6e
+Plaintext = b5969813d0f892febe64ed52d429cc737b5df8d5e0c63207
+Ciphertext = d666205953baa79090a26a80eae24af87d040409ff73ea5e
+
+
+Title = NIST CCM 192 Variable Tag Tests
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = 7dc8c52144a7cb65b3e5a846e8fd7eae37bf6996c299b56e49144ebf43a1770f
+Tag = 1f2c5bad
+Plaintext = ee7e6075ba52846de5d6254959a18affc4faf59c8ef63489
+Ciphertext = 137d9da59baf5cbfd46620c5f298fc766de10ac68e774edf
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = edb8834974b02fc9ab29b4b3c49683426124e729b44e43cde4ab9bb1b30b5531
+Tag = 24285996
+Plaintext = d05410f42d4759f8cab3884785cf8f60ecbf902e525b92e8
+Ciphertext = 2d57ed240cba812afb038dcb2ef6f9e945a46f7452dae8be
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = 8baf194e81e47a6ca82ca51b488339d014a0a494007793aa5201ac72fc3f808d
+Tag = 6c510570
+Plaintext = db3022ef4cd68ae22b501599448ffe2dda15cfd2e259315c
+Ciphertext = 2633df3f6d2b52301ae01015efb688a4730e3088e2d84b0a
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = c0b55acc7fbfa9d9af6e1f32b6626a1cd89b1c32513b5b50a18ddab028470953
+Tag = b418cfd2
+Plaintext = 7f0745bea62479c0080ecec52e37c1e32d72a6b3864da44a
+Ciphertext = 8204b86e87d9a11239becb49850eb76a846959e986ccde1c
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = 9dc672e64c468242ddeec318c71f9b8cbaa14639eba3c861acfc26463fb7d5d7
+Tag = 3e5b5794
+Plaintext = 263dbe1bd5e9d9b29b316fe36ec8bb10f64543b4921c01f6
+Ciphertext = db3e43cbf4140160aa816a6fc5f1cd995f5ebcee929d7ba0
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = 1798286c37c1504fc0d7402681f6f70711ef506dcc3e29d0183dc578ed976f92
+Tag = f63b4847
+Plaintext = 22dbba2b1a39074ddac736767ebdedc37e4208b233e03b34
+Ciphertext = dfd847fb3bc4df9feb7733fad5849b4ad759f7e833614162
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = ed2898d0bcb34eebf98b5279bc3e8a20214321a7e23bc55b2b7613b1a9b94f2c
+Tag = 7ab29a40
+Plaintext = f0f1235ee88d04de3f3d1489ec6b28b285a6a4fbb344911a
+Ciphertext = 0df2de8ec970dc0c0e8d110547525e3b2cbd5ba1b3c5eb4c
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = 50c4a285d6a4e64efceb288b82e7c8277307cf1eaa4b8b9294f97a1c38926a60
+Tag = 68f40ff6
+Plaintext = 0e50aa6a3079c0b8d61e51c3bd93b592a03719acb9f0252e
+Ciphertext = f35357ba1184186ae7ae544f16aac31b092ce6f6b9715f78
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = b48a16fb9a065d3aeb2bdf1860e4b0f1348c8f13cd00b1729ff8c19e4e9724f3
+Tag = ceeff92c
+Plaintext = 82f39f5207afcfd677a7544579f2b888a1eabdee4e835924
+Ciphertext = 7ff0628226521704461751c9d2cbce0108f142b44e022372
+
+Cipher = aes-192-ccm
+Key = 11fd45743d946e6d37341fec49947e8c70482494a8f07fcc
+IV = c6aeebcb146cfafaae66f78aab
+AAD = d92b80544f29aba52496e2c9a0aa4adeb89820be321cfd2f0a53585a15d04c7f
+Tag = 619c1124
+Plaintext = bc3b08eec6506d1497572f901f0e5f3e9854b40b0f992d08
+Ciphertext = 4138f53ee7adb5c6a6e72a1cb43729b7314f4b510f18575e
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = 599b12ebd3347a5ad098772c44c49eed954ec27c3ba6206d899ddaabca23a762
+Tag = 8ba1360406f9
+Plaintext = 473b6600559aefb67f7976f0a5cc744fb456efd86f615648
+Ciphertext = 26d2be30e171439d54a0fec291c6024d1de09d61b44f5325
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = 3a8423feb661db30542dc3cfb596280429397f80755a4bc8d4d941d03b61aacc
+Tag = b5e5938e8c75
+Plaintext = 7edfce3dedd65a8592aec2bfc7a751e2360f3137941fc960
+Ciphertext = 1f36160d593df6aeb9774a8df3ad27e09fb9438e4f31cc0d
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = 0dc79993047fd6e7260aac4d847fdb4d16483f28b13b5f17330744d401d2875b
+Tag = 94f534b76f0b
+Plaintext = a9fb3ebba43c273cacbf0f7187030c69172f31382e9e059b
+Ciphertext = c812e68b10d78b1787668743b3097a6bbe994381f5b000f6
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = 6546d9a90e0e763679d5469a1bcffcc4f18f35f50c7714d14c7329b76ce7984e
+Tag = 3c6c025faa1b
+Plaintext = a7573e5b7dd7f4ce9e4480f603c14145a27f7c7a9246a3cf
+Ciphertext = c6bee66bc93c58e5b59d08c437cb37470bc90ec34968a6a2
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = 7f398ff0d47e2c0fccd8a16cc9e79b4813abac42e346fa33ba033956f798d6ac
+Tag = ae0f88d836be
+Plaintext = 84370557e0bbf74fd0a4533185adfe202d9fa9d622bba72f
+Ciphertext = e5dedd6754505b64fb7ddb03b1a788228429db6ff995a242
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = d0f46fb37d516cc957aaefd3be2a8bede885330a8edb96f3e5e0ab8cd03a8c59
+Tag = 66d09f64b4c2
+Plaintext = 029575400bd3f2621c7d9ca9b6a09ea6f776968b19dc3f3e
+Ciphertext = 637cad70bf385e4937a4149b82aae8a45ec0e432c2f23a53
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = 4abaa4260c864572e12553c5aabfe62e4e7038490d4ba160119fc5d646780cc6
+Tag = 677fd479c852
+Plaintext = 448be3821d94452425fae41a06457260a2666e890fa94954
+Ciphertext = 25623bb2a97fe90f0e236c28324f04620bd01c30d4874c39
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = 686e0578eadd19583291a01e11a29fc95a2c156da100dd85429ad58ba65440c6
+Tag = bbc332573774
+Plaintext = aebfe3e15a876412ec9df714f1afa898e69004c1ef25732b
+Ciphertext = cf563bd1ee6cc839c7447f26c5a5de9a4f267678340b7646
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = e3d29f970667286a81586aa02bb490c72d8bb3a308eafec5da0d105fddd1a157
+Tag = 33171a8ccec1
+Plaintext = 08b2ce5f7296016e86d02f8c7952d746703ee4f0429b8df3
+Ciphertext = 695b166fc67dad45ad09a7be4d58a144d988964999b5889e
+
+Cipher = aes-192-ccm
+Key = 146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80
+IV = f5827e51707d8d64bb522985bb
+AAD = 9e2ea8eb7f56087ee506925648661eeefffd643a056cd4f4fc5cc23172b5c637
+Tag = bc8299cc9f95
+Plaintext = e73d7d23736db17cca816ab2440062a8051177d47feb514e
+Ciphertext = 86d4a513c7861d57e158e280700a14aaaca7056da4c55423
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = 4d6546167b3ed55f01c62bd384e02e1039c0d67ef7abe33291fecb136272f73b
+Tag = 778a299f1224f10c
+Plaintext = 0ff89eff92a530b66684cd75a39481e7e069a7d05e89b692
+Ciphertext = 6ef66a52c866bd5df20ec5096de92167ad83cab0e095ad0c
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = 95722ef5e0cf9f482e4c359f1fd6b9efe2b6e0630413c40285b8958c31188ca4
+Tag = a5c2c6b097a04d50
+Plaintext = b1ea02e3721e44c327443fcf4b424cce19afbb9e8cf06b76
+Ciphertext = d0e4f64e28ddc928b3ce37b3853fec4e5445d6fe32ec70e8
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = f7b76a2a4fe0a1b07a6b193b4600aec02360eb35853d88fe8a4f31a8dda48ad9
+Tag = f62e74c2312f9243
+Plaintext = c1f9c7b2e0ba712b4d2b32e4693b145228213999703767fc
+Ciphertext = a0f7331fba79fcc0d9a13a98a746b4d265cb54f9ce2b7c62
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = 406f39cb77b8d8c63f7797d184b6ebde819af7d48de5003538c022fe96b841ce
+Tag = f1cb228ffd2ff8e6
+Plaintext = ebf3a717546199c6f6b14efe8888613ca7e075e8290b277c
+Ciphertext = 8afd53ba0ea2142d623b468246f5c1bcea0a188897173ce2
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = 3dd3110703a95b05b9b9cff92ab7244e6c6dcb4509522c305d5d33e03f1b0b60
+Tag = 1f38e2d280a8f3ff
+Plaintext = a0e317b790870e6703e6077dfb8ea327c12e29a17107284c
+Ciphertext = c1ede31aca44838c976c0f0135f303a78cc444c1cf1b33d2
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = 044ae4064156b6ebc0921cb2c3c607976339f824d4dc6902eac66910dce086b2
+Tag = afbcf46b4e75bb11
+Plaintext = 8a16990690717dc16eea24da39878a2ee7c1579976e5b173
+Ciphertext = eb186dabcab2f02afa602ca6f7fa2aaeaa2b3af9c8f9aaed
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = 5479cc7f92460ff7a3e500f76d70e3036c44300005058b5517e3f64ad41b46b3
+Tag = fac11c84d08e918e
+Plaintext = 1e7e51f0fa9a33ed618c26f5e37754df0f7de7778882c26c
+Ciphertext = 7f70a55da059be06f5062e892d0af45f42978a17369ed9f2
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = f950e96d65a55efb3be3a55daffb421afad1d5625e3440a16414085469effe1c
+Tag = b50cb871173d9bb8
+Plaintext = 3ef1f4c438dce131990ba536d7a6166022ae7de4a436f87c
+Ciphertext = 5fff0069621f6cda0d81ad4a19dbb6e06f4410841a2ae3e2
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = 52742be3969830ba9c2bce26c98c2fb44ac881ec55c85627b2c94ba17b0de8cf
+Tag = 4ce29627efbc3523
+Plaintext = 3c7b4a68dfb766e24739f14932563fb81f24591f0e31e895
+Ciphertext = 5d75bec58574eb09d3b3f935fc2b9f3852ce347fb02df30b
+
+Cipher = aes-192-ccm
+Key = bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38
+IV = cc3c596be884e7caed503315c0
+AAD = e16e5dc034719e5d815f937b672cf34d5d420a3945c8f73645241779d2bec150
+Tag = 095168ed90827db2
+Plaintext = 03038acd2d8351e4e5aa308e554abfcd0d0334d8f864ec60
+Ciphertext = 620d7e607740dc0f712038f29b371f4d40e959b84678f7fe
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = 1bc05440ee3e34d0f25e90ca1ecbb555d0fb92b311621d171be6f2b719923d23
+Tag = 2ff0bb90a8879812683f
+Plaintext = f5522e3405d9b77cbf3257db2b9675e618e8744a0ee03f0f
+Ciphertext = b9103942dbbb93e15086751c9bb0a3d33112b55f95b7d4f3
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = 25c32770a299020d8500d8a4b5d7621e4379dbd6ef34a9aceefd4055ea6144f5
+Tag = 6982d0796e1bd1cc9879
+Plaintext = c8bf145fcffbafd6cd1a4c5b6cedfe008aacb2528ef51c80
+Ciphertext = 84fd032911998b4b22ae6e9cdccb2835a356734715a2f77c
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = cba0e0140f094e17652ea6f64c26f69dd9429bfefb41aaf104c38f3f6501f4f9
+Tag = fe08edf50e05d4d85faf
+Plaintext = f8813985f59bf284bd3882e899ca9b67fb496f3eb78d7ebe
+Ciphertext = b4c32ef32bf9d619528ca02f29ec4d52d2b3ae2b2cda9542
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = a846d0f56eb963b308ab8f697adca378ab6ccf9f739edcd7f5db197b2ffa99ac
+Tag = 800ae2523c5f161ed96f
+Plaintext = 72862d82d940748d54369e3143192453069b80d10f32e569
+Ciphertext = 3ec43af407225010bb82bcf6f33ff2662f6141c494650e95
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = 1dc5f6d6103ed2ae7f4ecd7b1bae4d5b9c0adef9100527b1737e1cf57f1175ef
+Tag = 34a29547607846bc9834
+Plaintext = 46f2199305ff4e1f21a89d96d3902c54939f52278ba7aa0e
+Ciphertext = 0ab00ee5db9d6a82ce1cbf5163b6fa61ba65933210f041f2
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = 8c28bcb9c31191c347dd64e552af5aff500e6e6f39e866351dd7065501a2837d
+Tag = 95f73957e86152df56bd
+Plaintext = 18c38c41a4e70c3f7362249ea329059b0e026bce7ae976b0
+Ciphertext = 54819b377a8528a29cd60659130fd3ae27f8aadbe1be9d4c
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = 1081afd5bf9f1a87169973ebdca85c2b69598154673d7ca9d6e2f63d52030fc1
+Tag = b2b028cd785f4f964069
+Plaintext = c89e388dd6124c41251e7422b420a71e4618f5cf9f0a63fc
+Ciphertext = 84dc2ffb087068dccaaa56e50406712b6fe234da045d8800
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = 079bc543c966734fa70814139ba8051271ee1c4f701579013c427f8efb141db7
+Tag = fd3ef357e5e69f504c95
+Plaintext = 68449bc3f6c8bd8f3a46a8e147522d979948c88ca791d204
+Ciphertext = 24068cb528aa9912d5f28a26f774fba2b0b209993cc639f8
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = e7094697b78d20174ec3c97a48abcf67c2ba6790b4db5fda82b454becd2a25ef
+Tag = e092ed15d1a074306a9e
+Plaintext = 330088153204c3d5de7744047b60887c8c044e4eeaae4bab
+Ciphertext = 7f429f63ec66e74831c366c3cb465e49a5fe8f5b71f9a057
+
+Cipher = aes-192-ccm
+Key = 62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a
+IV = 15769753f503aa324f4b0e8ee0
+AAD = f8d64ce2aa66e67de0f2fa584dec858983333b0570882ab628419bcee541395a
+Tag = afaad39e9183b2970027
+Plaintext = 893c5c45db989bd39485caa05ed700bb17c526b426edf4ba
+Ciphertext = c57e4b3305fabf4e7b31e867eef1d68e3e3fe7a1bdba1f46
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = 29bdf65b29394d363d5243d4249bad087520f8d733a763daa1356be458d487e5
+Tag = 733013b8ebe5e92b1917640c
+Plaintext = d0e4024d6e33daafc011fe463545ed20f172872f6f33cefa
+Ciphertext = 479f3d408bfa00d1cd1c8bf11a167ce7ae4bcdb011f04e38
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = 314f069dd4ac5aa3fdc2a74e83daa1d5d18330cd3b90684a9260bb48f5626d49
+Tag = 425a1bad4381dc84fee903e3
+Plaintext = 9ebd994a9af0cb94552ffd749fdd97f75a1ebd0ad3de3a9a
+Ciphertext = 09c6a6477f3911ea582288c3b08e06300527f795ad1dba58
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = 3aa7f30ac5bfbcb3f8de7c5e76269c608fbc76361d215e78abc0e308ddc3528f
+Tag = efcb43c6aaec88b51d0a378b
+Plaintext = 590a27721a36987d1ffa15f23c6ca5cc556dfcfa6993a2fb
+Ciphertext = ce71187fffff420312f76045133f340b0a54b66517502239
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = 5630345f662df248886f771b2b77cc0cbdc8fe4cc4a6cde52b1ea4e5d946cebe
+Tag = b9a60374d9304316e2fc50d9
+Plaintext = 65f4b3a00c1c1ef39445a69b2150b034705410140ff9dad0
+Ciphertext = f28f8cade9d5c48d9948d32c0e0321f32f6d5a8b713a5a12
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = 38ee97f0dc635c7416a024e3af5c95dd1d496db8a5a5c3bcc20b9093ca906dfb
+Tag = 07611163d6b0f1734292ed8c
+Plaintext = 0edea2afaeaf650704d2c6c6622aad82169807c983c17309
+Ciphertext = 99a59da24b66bf7909dfb3714d793c4549a14d56fd02f3cb
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = ea3b3f3c5b28f7d48af2ccf97083937baccb0a6b1a041080a73b15b9640ccf44
+Tag = edefbcbb51d9d607b7b2e8f8
+Plaintext = b80175a03dff1b10078ded64ed759e5453e3bc0657c68590
+Ciphertext = 2f7a4aadd836c16e0a8098d3c2260f930cdaf69929050552
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = 287f31e69880823df7798c7970c0e42e600bf567ad78f5d559d0182d570c03cb
+Tag = f2b6d4dc8afae25ff400d73d
+Plaintext = 531c1e721e185f58b2c654b9098ce0c1338bab4149c7bef7
+Ciphertext = c467217ffbd18526bfcb210e26df71066cb2e1de37043e35
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = 1d4579c9410cc34ade1352ed433e0d4faaaa28200e359bcb4140d35939b3a792
+Tag = 19cd80c1ce0f9ed40f1e9dec
+Plaintext = cead1c5af16ca89bc0821775f8cba8c25620a03dfd27d6f1
+Ciphertext = 59d6235714a572e5cd8f62c2d79839050919eaa283e45633
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = 3fec0e5cc24d67139437cbc8112414fc8daccd1a94b49a4c76e2d39303547317
+Tag = e53d5aeccfb4a6837b79a625
+Plaintext = be322f58efa7f8c68a635e0b9cce77f28e3f8faaa76fcad4
+Ciphertext = 294910550a6e22b8876e2bbcb39de635d106c535d9ac4a16
+
+Cipher = aes-192-ccm
+Key = 5a5667197f46b8027980d0a3166c0a419713d4df0629a860
+IV = 6236b01079d180fce156fbaab4
+AAD = ec6857533675b5ed8d4315b0d5f59c826f3ccb2d0bd6f604bd54f7c9542123ce
+Tag = 385e080bf29ae097c328789a
+Plaintext = c222374d366baf2d0301340582aa056c04441ac766065ab1
+Ciphertext = 55590840d3a275530e0c41b2adf994ab5b7d505818c5da73
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = 9ef2d0d556d05cf9d1ee9dab9b322a389c75cd4e9dee2c0d08eea961efce8690
+Tag = 3abcdb0563978785bf7fd71c6c1f
+Plaintext = 78168e5cc3cddf4b90d5bc11613465030903e0196f1fe443
+Ciphertext = e2324a6d5643dfc8aea8c08cbbc245494a3dcbcb800c797c
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = 6f99d9ce00a4be502a5d2c76a07b914d56f49a1592c1ee2e46e11b3c9da0d083
+Tag = cb0e8ec0879db8ffa59125eac239
+Plaintext = 3c3992cac792e019720d38f768beac3deb6a43e7e1f59f20
+Ciphertext = a61d56fb521ce09a4c70446ab2488c77a85468350ee6021f
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = deae66f68bb18178d1bc0734f19fd3ab390049c2ca083a159f5c078fcb4f0a38
+Tag = 664a2d992f7cf821e19bb7d4dff8
+Plaintext = 8eaae72e532943d66ce8250c6b434d299b6afbf8e2b4f8b1
+Ciphertext = 148e231fc6a7435552955991b1b56d63d854d02a0da7658e
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = e2d592cb412e65f9044257d78e7491f9f80c8b08102c2d5da20535cef74ad8c8
+Tag = 46a4a816b709a55db450ac249c5c
+Plaintext = 1b8096b79ace8c6ee5dbd8735f1287aa2c94865f382dc2da
+Ciphertext = 81a452860f408ceddba6a4ee85e4a7e06faaad8dd73e5fe5
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = 78a292662b8e05abc2d44fbefd0840795e7493028015d9f2aae7b3b7a4634437
+Tag = fbebbdb2e35ebf682f7fe30996bc
+Plaintext = 014f15219463ac22820ba6a1fa04d7f686003ef24004da67
+Ciphertext = 9b6bd11001edaca1bc76da3c20f2f7bcc53e1520af174758
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = de6ea86d3641d916c4394fdd31e6a50194993d6ef1d3dfd9fffca20b2f58107d
+Tag = eee137bb5b1e7385aa1bd5d69831
+Plaintext = cc8c855a4c122046916bdcf8089eba3ddb80483e201c7102
+Ciphertext = 56a8416bd99c20c5af16a065d2689a7798be63eccf0fec3d
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = 87b937b1d36e8a9ab33a1d3eed617030923acaabc7e620dfcb3c388936030fc6
+Tag = 9b13b729c70e1fa89c43a05a544b
+Plaintext = 3fb7d1f17e7e36d5d4b816cc6db11d1d85848c577fdfe938
+Ciphertext = a59315c0ebf03656eac56a51b7473d57c6baa78590cc7407
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = 116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5f7f1a60cf4e16278
+Tag = 2d900340d90dc4f09a7171d331d6
+Plaintext = 268fe424d6db30f680c10fe2684707a0778069958e9a3bf7
+Ciphertext = bcab201543553075bebc737fb2b127ea34be42476189a6c8
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = e13e0c9cef1f86160a75ccb131586370b0edabbf8b3b63f21f3a6fee072dd926
+Tag = e4ad0d90322ed2813a3343029e93
+Plaintext = 9d64de7161895884e7fa3d6e9eb996e7ebe511b01fe19cd4
+Ciphertext = 07401a40f4075807d98741f3444fb6ada8db3a62f0f201eb
+
+Cipher = aes-192-ccm
+Key = d2d4482ea8e98c1cf309671895a16610152ce283434bca38
+IV = 6ee177d48f59bd37045ec03731
+AAD = d4cd69b26ea43596278b8caec441fedcf0d729d4e0c27ed1332f48871c96e958
+Tag = 0065601bb59972c35b580852e684
+Plaintext = e4abe343f98a2df09413c3defb85b56a6d34dba305dcce46
+Ciphertext = 7e8f27726c042d73aa6ebf43217395202e0af071eacf5379
+
+Cipher = aes-192-ccm
+Key = a7177fd129674c6c91c1c89f4408139afe187026b8114893
+IV = 31bb28f0e1e63c36ca3959dd18
+AAD = 2529a834668187213f5342a1f3deea0dc2765478c7d71c9c21b9eb1351a5f6cb
+Tag = 380ea23dcffc9574f672bca92e306411
+Plaintext = 2cea0f7304860a4f40a28c8b890db60f3891b9982478495e
+Ciphertext = 5bb7aa6ab9c02a5712d62343fbe61f774e598d6b87545612
+
+Cipher = aes-192-ccm
+Key = a7177fd129674c6c91c1c89f4408139afe187026b8114893
+IV = 31bb28f0e1e63c36ca3959dd18
+AAD = a4dbf26802b2dba1bf828f57618fd197d3e60b6efc9d884f965ce3b43e1dc008
+Tag = b93605b46a8a6a9c7e02cb8feac67af4
+Plaintext = 2baf3d378942bd44f67fb787def50aaf446bf15c56243484
+Ciphertext = 5cf2982e34049d5ca40b184fac1ea3d732a3c5aff5082bc8
+
+Cipher = aes-192-ccm
+Key = a7177fd129674c6c91c1c89f4408139afe187026b8114893
+IV = 31bb28f0e1e63c36ca3959dd18
+AAD = cbd1302c9fffe29fe882838236f64fe9d9ba35db5499e90f0faa35f34c7490f2
+Tag = 82e411c052c0a025ab15767b0242ebf7
+Plaintext = a0639aa4e7a8bda4e9e096d17c1c47d3786010fabe9c72d2
+Ciphertext = d73e3fbd5aee9dbcbb9439190ef7eeab0ea824091db06d9e
+
+Cipher = aes-192-ccm
+Key = a7177fd129674c6c91c1c89f4408139afe187026b8114893
+IV = 31bb28f0e1e63c36ca3959dd18
+AAD = b6112eb8299b28445aca8f72e7170a1cd8bbfee4d2145fbe8d49c6af8831c4d4
+Tag = ab58a892f7142414d3f7cf10925a403a
+Plaintext = e2d78ce5df9284c045b84df33f551211ddccf7bb14cd4529
+Ciphertext = 958a29fc62d4a4d817cce23b4dbebb69ab04c348b7e15a65
+
+Cipher = aes-192-ccm
+Key = a7177fd129674c6c91c1c89f4408139afe187026b8114893
+IV = 31bb28f0e1e63c36ca3959dd18
+AAD = c70a9fb811894b73e445b78db7a931705a181f3a8730341cbb50eaff43572c6e
+Tag = b5b3ce6bae6ecb060289508d6e9212fe
+Plaintext = c3f1e735a6741aa481ad577a98dbac1f03cc80ea0dae1b94
+Ciphertext = b4ac422c1b323abcd3d9f8b2ea3005677504b419ae8204d8
+
+Cipher = aes-192-ccm
+Key = a7177fd129674c6c91c1c89f4408139afe187026b8114893
+IV = 31bb28f0e1e63c36ca3959dd18
+AAD = c7cbda495a7dc1d91837f652a9d084df9b717e99b29bf1ab7f6c17b3341ecd6c
+Tag = a16229a91a2298ffe104f9c032720abb
+Plaintext = db8cd5d76e459afce765e07da98f4ac58231224238c293c7
+Ciphertext = acd170ced303bae4b5114fb5db64e3bdf4f916b19bee8c8b
+
+Cipher = aes-192-ccm
+Key = a7177fd129674c6c91c1c89f4408139afe187026b8114893
+IV = 31bb28f0e1e63c36ca3959dd18
+AAD = 4bd3a656796cb1fa87976f3a93471e33dd1209ce33d7a28aaca4d17c99d78c94
+Tag = b9cacc4fdb44402971a0eee7f1ad90d7
+Plaintext = fd66aebc94f2513b1b9218396b08c63a869b9c4dd0752a91
+Ciphertext = 8a3b0ba529b4712349e6b7f119e36f42f053a8be735935dd
+
+Cipher = aes-192-ccm
+Key = a7177fd129674c6c91c1c89f4408139afe187026b8114893
+IV = 31bb28f0e1e63c36ca3959dd18
+AAD = 448cdd9cbbf863eb666fda36b825f3798827da3c1349611f45605ab734b24498
+Tag = 13306e7f0a61d4b3da372db669321143
+Plaintext = 5831e9a6af0234d051ffd17a14b8e3c8da95067ab767901b
+Ciphertext = 2f6c4cbf124414c8038b7eb266534ab0ac5d3289144b8f57
+
+Cipher = aes-192-ccm
+Key = a7177fd129674c6c91c1c89f4408139afe187026b8114893
+IV = 31bb28f0e1e63c36ca3959dd18
+AAD = f8f04f12174b5205866515ce3775bd8e11d50d8b96142be0c347a773379fb928
+Tag = 09726d3a3d04005dc13629658624d05b
+Plaintext = 248a4969621cf291bec7f0d76d80b7f019d4eb002a22c46a
+Ciphertext = 53d7ec70df5ad289ecb35f1f1f6b1e886f1cdff3890edb26
+
+
+Title = NIST CCM 256 Variable Tag Tests
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = 3c5f5404370abdcb1edde99de60d0682c600b034e063b7d3237723da70ab7552
+Tag = 3cb9afed
+Plaintext = 239029f150bccbd67edbb67f8ae456b4ea066a4beee065f9
+Ciphertext = 9c8d5dd227fd9f81237601830afee4f0115636c8e5d5fd74
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = ab91d1aa072947d22f0dc322355a022fe7f0747f4a184b48446bd27999ef01fe
+Tag = 169d7775
+Plaintext = 25a43fd8bf241d67dab9e3c106cd27b71fd45a87b9254a53
+Ciphertext = 9ab94bfbc86549308714543d86d795f3e4840604b210d2de
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = 4c3bdc6186297896097b3297ba90bcde78dc8a9efe3bd8b10a85eed1bf63a30c
+Tag = b9c2e299
+Plaintext = e63d8303fa5c51550e417e77ec1ec647c9e2a853cab00fee
+Ciphertext = 5920f7208d1d050253ecc98b6c04740332b2f4d0c1859763
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = 8587324c1ff6712aed8af134744de5df1f88c5d2cb33f4f888af9fd39eb8e813
+Tag = 02f73205
+Plaintext = f27548ec1608d3b8a5bdcbccb7e09cf4b5c29d3661b13a61
+Ciphertext = 4d683ccf614987eff8107c3037fa2eb04e92c1b56a84a2ec
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = 58820fb68ba1cd73b05a6698b4394ba1b13e8e296480f5afe1154d9b8536007c
+Tag = 4e1dd81b
+Plaintext = ecbd7091732e49c0f4bda2e63235ea43bbf8c8730f955f9c
+Ciphertext = 53a004b2046f1d97a910151ab22f580740a894f004a0c711
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = f3034031933e7807d47140cf5c7794e42a228a522a83883b0765b57a411bad85
+Tag = 46525bc4
+Plaintext = 3002c6fb49497c7d1d06e1bd4edd57a9e54bbbb74e948c79
+Ciphertext = 8f1fb2d83e08282a40ab5641cec7e5ed1e1be73445a114f4
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = 05981dc26a1db2d8e2c3d85ea9a4d1dc3432d9edc4795ca03ca4661d2fc35b8c
+Tag = 651844a3
+Plaintext = 214acfb2613b266f2929d43c7666f3a23e61423061cdbec3
+Ciphertext = 9e57bb91167a7238748463c0f67c41e6c5311eb36af8264e
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = 968a302a27624c304e894633af600c3cc7c614b7da3af0bf2d3f239c7605338a
+Tag = 49fd550d
+Plaintext = 9c575d592a9622c014c1303329757a65a414a9ed0c1b1b3f
+Ciphertext = 234a297a5dd77697496c87cfa96fc8215f44f56e072e83b2
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = 9011231ec382ecaaae57f34de1ac6bbb50741014a978160ce59c60491e64f30d
+Tag = 4137defa
+Plaintext = 426a4c83793abdcff5e2a99e161785dc27c6168a329ee465
+Ciphertext = fd7738a00e7be998a84f1e62960d3798dc964a0939ab7ce8
+
+Cipher = aes-256-ccm
+Key = 9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71
+IV = 2e1e0132468500d4bd47862563
+AAD = 96f0b1edec4ad14407dcaf30ed68942b46c48d58b2dd63af60fccd5bdd48e560
+Tag = 56a4953f
+Plaintext = e04006b68c83a5dd4ceac3cde238e48895ae17728fdc7bbe
+Ciphertext = 5f5d7295fbc2f18a11477431622256cc6efe4bf184e9e333
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = 4e0d3aa502bd03fe1761b167c4e0df1d228301d3ebaa4a0281becd813266e255
+Tag = 265867a29eb3
+Plaintext = f0b065da6ecb9ddcab855152d3b4155037adfa758ba96070
+Ciphertext = d6a0f377f7c1b14dcdba729cae5271b027e71cc7850173ec
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = aeef2d1e3d3c9920a4fdb5f9d963b88e78a5d0edae531e3b55e702ed609d9a3c
+Tag = 66e89a72dc0e
+Plaintext = f2a8855e34854656df0776e80255ad1d125841c727201509
+Ciphertext = d4b813f3ad8f6ac7b93855267fb3c9fd0212a77529880695
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = 3051ffb19862370bc46ca94a8eb906a660d539b18e965583e95acc149190e3e9
+Tag = dff4f6257e06
+Plaintext = 20955a0ca3c9c10d4055406ec12226130ecdaf195b08d65e
+Ciphertext = 0685cca13ac3ed9c266a63a0bcc442f31e8749ab55a0c5c2
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = aafa45a107d909756b4a1956d5228b50316fc5852afdeecf401fa2a71aabea46
+Tag = ef0017c9acc1
+Plaintext = 246b60d17ea70deb1380fbf4bd767d88f53069b0f4136511
+Ciphertext = 027bf67ce7ad217a75bfd83ac0901968e57a8f02fabb768d
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = ccdeab6a28b1b9e9f0c67116a91f2215b229d0edcd35d696db2bcf54e77db743
+Tag = c73969437912
+Plaintext = 5b735697c5577ee0e352cf6a1495c490d6f7e97c3898f0ee
+Ciphertext = 7d63c03a5c5d5271856deca46973a070c6bd0fce3630e372
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = 33a1e7d4820ed6a76a6dab90b4ba830888caf12a262e4eb6d75a505b2207de36
+Tag = d7cb3721fcdd
+Plaintext = 1170416faf81896c7f00815f53c2be5f7246d4794895b4b1
+Ciphertext = 3760d7c2368ba5fd193fa2912e24dabf620c32cb463da72d
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = 3df3edd9fc93be9960b5a632e2847b30b10187c8f83de5b45fcb2e3ed475569a
+Tag = 82183448e643
+Plaintext = 556765ffe5c46015cbd8194e32abc41e8f711773e2bcac90
+Ciphertext = 7377f3527cce4c84ade73a804f4da0fe9f3bf1c1ec14bf0c
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = 4cb8663a1a934b6b27cbc1ed3040fbb99fbb6812f8ca35ff73cc13feeb483af7
+Tag = 6069901b5e3a
+Plaintext = 3070e269f3e87cd82af3896895a5dd6fbfa9898279e0f73b
+Ciphertext = 166074c46ae250494cccaaa6e843b98fafe36f307748e4a7
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = 876df130c01d0b9b8ebe43e71046c365e13124169026876d50d7e155f0299676
+Tag = 6d65c2b005d4
+Plaintext = dd18d40728c561e24e6e54834348dde5683f067baf8df469
+Ciphertext = fb0842aab1cf4d732851774d3eaeb9057875e0c9a125e7f5
+
+Cipher = aes-256-ccm
+Key = 8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb
+IV = 20442e1c3f3c88919c39978b78
+AAD = da08b14e1b770b81faaf1e59851df1cba8838cd63bef141340ee378e65fdcbd4
+Tag = 75b37e9fb9e9
+Plaintext = 7064a2491f716f4a2969815e4a281a54690ced9f794b264e
+Ciphertext = 567434e4867b43db4f56a29037ce7eb479460b2d77e335d2
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = 7022eaa52c9da821da72d2edd98f6b91dfe474999b75b34699aeb38465f70c1c
+Tag = 8cf050f48c505151
+Plaintext = 28ef408d57930086011b167ac04b866e5b58fe6690a0b9c3
+Ciphertext = 356367c6cee4453658418d9517f7c6faddcd7c65aef46013
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = a61b6c1f0293a7c35520abf158a995e5ae59b43ec5f38ff6fd6529970c9f83ac
+Tag = 6bca352f92f383e1
+Plaintext = 1c5ad37d2a55afbc390b27cde0c42d6651fe191239bfaa27
+Ciphertext = 01d6f436b322ea0c6051bc2237786df2d76b9b1107eb73f7
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = 0f1c6dffeda98f7a159f9cc61820bfb29910d8eaa41b751a41f9fe5648f02fba
+Tag = 14fd7c84052208d9
+Plaintext = 6efe6652d46a84166d30befe2fbee0795e9475b401eedd60
+Ciphertext = 737241194d1dc1a6346a2511f802a0edd801f7b73fba04b0
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = 151110a9ce7e44e5d76d9cad53c1819317527fcd169051f01c6a3efcc06ea999
+Tag = c3ebc7214b9eef31
+Plaintext = 55b791ee495299916ff3c2327b4990952bebd0a2da9acfc5
+Ciphertext = 483bb6a5d025dc2136a959ddacf5d001ad7e52a1e4ce1615
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = 0ba1210696d735eebc13b609d0ec33bc740805105dd82f065b82892b931f1e6d
+Tag = eff08182f8a00f13
+Plaintext = 794a86f5b20d344ad86fd5523d08f1864737be57731440c2
+Ciphertext = 64c6a1be2b7a71fa81354ebdeab4b112c1a23c544d409912
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = 5a3b71b0fdecce8bd759d3d72321b5c3e882c82627c14e0b59cc8c6d191f243f
+Tag = 6894be1f8fa14538
+Plaintext = efa6ddd6fb8e4480a0f64414694e5f9e7f2e9b97cbe9cd14
+Ciphertext = f22afa9d62f90130f9acdffbbef21f0af9bb1994f5bd14c4
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = 5d344c5b94695a66192b6692e420c8eaa3cb482502be837b2a0a91b787fbe48e
+Tag = f4393bca514c3336
+Plaintext = 561dd3bf419ae33ff521a43898cf12c6a5c6163eec22abc1
+Ciphertext = 4b91f4f4d8eda68fac7b3fd74f7352522353943dd2767211
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = 08344486df2b2f9a6880a03503a3986c485f067c480c31a51607553b875f91fa
+Tag = b708ffd04c8c2da0
+Plaintext = 6d3596f25401f2e3b099613236f1d88a2f3d8edc1f04bc0c
+Ciphertext = 70b9b1b9cd76b753e9c3fadde14d981ea9a80cdf215065dc
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = 9d0824a4dc7e67326c5b68a6ea99cb68298a2af2cc1952351454b038f6270603
+Tag = 1511d7d684d58762
+Plaintext = c563a43e4cc0f93d955432f68287e63400a7fdcae738ba84
+Ciphertext = d8ef8375d5b7bc8dcc0ea919553ba6a086327fc9d96c6354
+
+Cipher = aes-256-ccm
+Key = bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61
+IV = daf54faef6e4fc7867624b76f2
+AAD = c4384069e09a3d4de2c94e7e6055d8a00394e268398d6ea32914097aec37a1f4
+Tag = ef0919c5f5daf093
+Plaintext = 18c5865b414b2a06b4d71ab9550985b4f3c3d7817e8a8d7c
+Ciphertext = 0549a110d83c6fb6ed8d815682b5c5207556558240de54ac
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = ba762bbda601d711e2dfc9dbe3003d39df1043ca845612b8e9dc9ff5c5d06ec4
+Tag = 01a4d765bc1c95c90a95
+Plaintext = 6aa6ea668df60b0db85592d0a819c9df9e1099916272aafb
+Ciphertext = 97027de5effd82c58f8dbfb909d7696fbe2d549162629120
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = 77a685958ca801dbcbf346d6bac72662d3870899d7bcdef6665d57bacd4e558f
+Tag = 288aecb4c38c2391c21d
+Plaintext = c2992096828325820e2d7acaa17ac789b6830ec3128dd7f9
+Ciphertext = 3f3db715e088ac4a39f557a300b4673996bec3c3129dec22
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = 3a54d3e14bbd0549570ef12425c4b36fd25382d56b68e217bc711ab1625fe9bb
+Tag = db4bd2cb1f1222e0d64f
+Plaintext = e5151262cafdd2f4dea187372dacb9e5975065572446f2a5
+Ciphertext = 18b185e1a8f65b3ce979aa5e8c621955b76da8572456c97e
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = 5c7604f9ac8fdf30ee5820e5aeb75b65d7855e5d2ff9ccf021640707bf1f53e8
+Tag = 9283c1a61e9113462325
+Plaintext = 1fe786f52daab92a6aa5f43263bed74153d90579a34bceff
+Ciphertext = e24311764fa130e25d7dd95bc27077f173e4c879a35bf524
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = 42b8863ea100babc1713654afcf54f21f8bff754223ad70269ace9d034f26a96
+Tag = bd3ffe1b1051ec3206db
+Plaintext = 56c3130c5af210b5bcf7c58b968fc75fc92b9c339efb7aee
+Ciphertext = ab67848f38f9997d8b2fe8e2374167efe91651339eeb4135
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = c5a369a8291f4278e797ff11ea5e777d69df3b9c0c32d46150ed4b3e2c3defdd
+Tag = 10d5d255f193b29eb961
+Plaintext = daa716f3cd1e008b46318ec90d976c3fbf88c3ff73cf0052
+Ciphertext = 27038170af15894371e9a3a0ac59cc8f9fb50eff73df3b89
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = 63bdceb36a032d3e0e81b4e98ad9861e2c708cef4e870c5b88a87ecc24449be3
+Tag = 4e524729fb06212508e6
+Plaintext = 42477d7d44881dabccfce52efb8a2cc917b182a23b71fb49
+Ciphertext = bfe3eafe26839463fb24c8475a448c79378c4fa23b61c092
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = b7f8e7b66726e07c3c73d74135f068bb8025c9da9ba70affb9ed9a69675f0eef
+Tag = 222af86d91fb6a2b09d3
+Plaintext = 07f48cdc12aa27119fbdfda4ec07ce6068c92ba7ba9c9309
+Ciphertext = fa501b5f70a1aed9a865d0cd4dc96ed048f4e6a7ba8ca8d2
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = 09891ed14f4488069cd6a5744061e06f8ff8d1bc87b10448b3fbfc1a4e327787
+Tag = 4cddcb65a76c40698017
+Plaintext = e2e7002b769fb5b4201053457158147d99b0d5147f3acac2
+Ciphertext = 1f4397a814943c7c17c87e2cd096b4cdb98d18147f2af119
+
+Cipher = aes-256-ccm
+Key = d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374
+IV = b35fb2262edfa14938a0fba03e
+AAD = 8f9786940943752c536548497f9dae2bd8d677b8bbcb0121a9c9f3c399b62e4b
+Tag = ddb42d504b6fc47d6575
+Plaintext = 86be1d1949fe03b8b80ef7abb3e27394273d7b76d7697f0e
+Ciphertext = 7b1a8a9a2bf58a708fd6dac2122cd3240700b676d77944d5
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = 404f5df97ece7431987bc098cce994fc3c063b519ffa47b0365226a0015ef695
+Tag = 2927a053c9244d3217a7ad05
+Plaintext = 7ebef26bf4ecf6f0ebb2eb860edbf900f27b75b4a6340fdb
+Ciphertext = 353022db9c568bd7183a13c40b1ba30fcc768c54264aa2cd
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = e9ed05813262fbe769c1104d8ba5c836dbd229a22a681de3565d17ac1129f96b
+Tag = 1c000c9d88f047ca198c4e65
+Plaintext = fdf5a5fb377bb52ad07a971c6a9da3e1a68d279be9ac4ed7
+Ciphertext = b67b754b5fc1c80d23f26f5e6f5df9ee9880de7b69d2e3c1
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = f246f1e948c81c98ea13f03dd8eea878449d0c3d5b5fe87c633bbe0106fcb899
+Tag = 5c09878f1a963b795b29f4dd
+Plaintext = e5e6b57e74ce7afbde3697e2a69d61ca615aa3dfd32fe31f
+Ciphertext = ae6865ce1c7407dc2dbe6fa0a35d3bc55f575a3f53514e09
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = e4683285695348ff04a61d51d90b868dfe4cf6ea246544727adeaeface571d57
+Tag = 807d196d2628df1c384816f7
+Plaintext = ef2c3a6bb8602d290045854a5f223e6f43bfd0bb9278fa88
+Ciphertext = a4a2eadbd0da500ef3cd7d085ae264607db2295b1206579e
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = 42695369dbd69f07b46db282653704c34106aad82efdcc99b452598b5353f904
+Tag = 961c666279394e1e28cf1b02
+Plaintext = beda29c7fe15c73ee5bef96485eb8c9e3cd3ea7ee633ef45
+Ciphertext = f554f97796afba1916360126802bd69102de139e664d4253
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = 58c3ce3906633475441229cfcdf05e02ff3738ae8d1b255974f431b3309ed41e
+Tag = 64efe624dd6c6f8b8cdc76e3
+Plaintext = 419c96ba8142b27e3377716358c97a8a636d7fe8403165e1
+Ciphertext = 0a12460ae9f8cf59c0ff89215d0920855d608608c04fc8f7
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = a9c06d8029f8da31629c3a6ddceb6009220a69fc614af1c231ae8702b3a85d6e
+Tag = 0ef4b71970b9f80087533cf7
+Plaintext = 69bb441a7640f77e124d66af45a0e9f646658a838dfcb957
+Ciphertext = 223594aa1efa8a59e1c59eed4060b3f9786873630d821441
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = a92e88edd297da8c7089e21822b3e6cffd6837c78b975c8413fd6cca1b99bcb0
+Tag = 6e27dfbf1ff7f08d1b213848
+Plaintext = a45b755658d38bdea57d1faae21d75428a17f2c74a33d2d5
+Ciphertext = efd5a5e63069f6f956f5e7e8e7dd2f4db41a0b27ca4d7fc3
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = 421533453c8129fc8e681c68b9d7371adb0a19442ede7accd185129fcb7db648
+Tag = a48d1a0b815139fa28652d94
+Plaintext = 2c3e28b61cede08121e80ee08c4f1f19dabb19add9d2dc8a
+Ciphertext = 67b0f80674579da6d260f6a2898f4516e4b6e04d59ac719c
+
+Cipher = aes-256-ccm
+Key = 7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d
+IV = dde2a362ce81b2b6913abc3095
+AAD = 55351bc7ddbc6b668d435088f1f9cf6f53caae16d4292b14bc0deec20f393ba0
+Tag = 1301c87a2a94df147c8cce4c
+Plaintext = 81fa7fd41ba267bcbdf024cef1543b041cadd96b62a7cf1f
+Ciphertext = ca74af6473181a9b4e78dc8cf494610b22a0208be2d96209
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = f1e0af185180d2eb63e50e37ba692647cac2c6a149d70c81dbd34685ed78feaa
+Tag = 5f82c828413643b8794494cb5236
+Plaintext = 138ee53b1914d3322c2dd0a4e02faab2236555131d5eea08
+Ciphertext = 5b2f3026f30fdd50accc40ddd093b7997f23d7c6d3c8bc42
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = 45c5c284836414407268d7c8a89a0146759cfc92242004027d58d0828fad74e7
+Tag = 6db5c92de5fb3aafba9537795e17
+Plaintext = fe3df84ee9b237f9edd77a5b8af96bc3e184579ac9c6e246
+Ciphertext = b69c2d5303a9399b6d36ea22ba4576e8bdc2d54f0750b40c
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = a41ea42692eac0914fef35e58409007342cef027de141223ffb46da7f58df034
+Tag = 1af6cf931ac943fd3affa6ad6fd1
+Plaintext = e0f5c02f9f84e57fada3f3575f1b1a748f360e0ea781b7b8
+Ciphertext = a8541532759feb1d2d42632e6fa7075fd3708cdb6917e1f2
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = 17dae00f2a9417780ecfef98f290a5ca9b17c873a9149cd81c18bd33164a0405
+Tag = 38a3f09c56ae653be49b355fb938
+Plaintext = 3a77a2ec5a1be6cbfbbfaab3e65427cb38d6798b132ff5c7
+Ciphertext = 72d677f1b000e8a97b5e3acad6e83ae06490fb5eddb9a38d
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = 33b44873a7a1e5b0fdbb7e7347623e4fa1ccd937feb26fda2749b42f00744e50
+Tag = 974deec7ce2e1f296890bee795cb
+Plaintext = d0628b26019dad84de628d9dabf42cfb195165a369c22b49
+Ciphertext = 98c35e3beb86a3e65e831de49b4831d04517e776a7547d03
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = f4fc5acff75d404849675b813cf7adcaeb8f3d56cb9a54a083f8ec07feb666bb
+Tag = 98a3bc56f900bee7e8271c6dab22
+Plaintext = 10b5ec41036e4bc5d61728e8811b520b7080c2177c122cbd
+Ciphertext = 5814395ce97545a756f6b891b1a74f202cc640c2b2847af7
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = ba051d1bc19b9a27520834fa3977b6413a319c9a52c8785e3e9594bd4265d911
+Tag = e6623d80c677633a9e4f999bb885
+Plaintext = 648a84813ca97aef4ab7e143ee29acb946388660f18eb671
+Ciphertext = 2c2b519cd6b2748dca56713ade95b1921a7e04b53f18e03b
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = f5c629299d18901c8c34c42e8fc29a70c377c160fdea4a6068a36867707575f7
+Tag = c65b88ff4fdd9b8187f7d71ba04b
+Plaintext = 3ead49ed0b41de79c829098d034b666bce052d79bf1f56db
+Ciphertext = 760c9cf0e15ad01b48c899f433f77b409243afac71890091
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = da486fd2953a72838e67e1909ed4042df67c355b648a45bcd2cc1ba610659e76
+Tag = 727c3404564ed41528973d389c7c
+Plaintext = 4543457c8fdf463c4bf8515a762cdc83d9aaa887d3eaa2af
+Ciphertext = 0de2906165c4485ecb19c1234690c1a885ec2a521d7cf4e5
+
+Cipher = aes-256-ccm
+Key = 5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c
+IV = 21ff892b743d661189e205c7f3
+AAD = a0b1d3600f6eba910a11537d61fa12184959f1c3ae386570cbbc9106f7a7ba07
+Tag = 46ecb536703a7a97928f80fcc7cf
+Plaintext = 22071ef5d204417f99bc2faf53ecc4c6cf795e77805633ee
+Ciphertext = 6aa6cbe8381f4f1d195dbfd66350d9ed933fdca24ec065a4
+
+Cipher = aes-256-ccm
+Key = 60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522
+IV = 48526f1bffc97dd65e42906983
+AAD = fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a
+Tag = 63ddd56464aed6d0613159d1aa181dcb
+Plaintext = a8be794613835c4366e75817d228438f011a2ec8a86f9797
+Ciphertext = cc3efe04d84a4ec5cb6a6c28dc2c2d386a359d9550dbdec9
+
+Cipher = aes-256-ccm
+Key = 60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522
+IV = 48526f1bffc97dd65e42906983
+AAD = b3ff11e57eeab41bc597622c770c9eea333e178d5bd5689c6a30011187a965b8
+Tag = 7c1273765bc5bfdeca429cc8ebd8aca2
+Plaintext = 7590769380dc91832da023798dfdd447b9f7adaa09d7e2d0
+Ciphertext = 1110f1d14b158305802d174683f9baf0d2d81ef7f163ab8e
+
+Cipher = aes-256-ccm
+Key = 60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522
+IV = 48526f1bffc97dd65e42906983
+AAD = 2a953a081c5d52bc500c9c12f56cd2aab5c920d73098335baa5d947100cb3411
+Tag = 886229c09b986bee3a8a3025c150d3a3
+Plaintext = 30e4de5e8c275677f8f4f7bbf9d101f96b38d79968ea028c
+Ciphertext = 5464591c47ee44f15579c384f7d56f4e001764c4905e4bd2
+
+Cipher = aes-256-ccm
+Key = 60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522
+IV = 48526f1bffc97dd65e42906983
+AAD = 99cc9d1b3db79640dfdc4423af3ded03c329f7ba5b6b509269c10e59519053b8
+Tag = 80cd04041918c4071ea5ac263f36c544
+Plaintext = 852698f6ab4aa794b3d657c4a2ca7b9c8bfb5fc9b4ad0aca
+Ciphertext = e1a61fb46083b5121e5b63fbacce152be0d4ec944c194394
+
+Cipher = aes-256-ccm
+Key = 60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522
+IV = 48526f1bffc97dd65e42906983
+AAD = b76aef71eaf03c2d0dc0623e90596fcb0bc4dbbed1d5bb24c8af37d778863e5b
+Tag = f001d6002eafaec49c472acdfaedf1de
+Plaintext = cd337fcf362d301d66916c7097bdeb31df8206e00f7ac106
+Ciphertext = a9b3f88dfde4229bcb1c584f99b98586b4adb5bdf7ce8858
+
+Cipher = aes-256-ccm
+Key = 60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522
+IV = 48526f1bffc97dd65e42906983
+AAD = 42a718d892e229a1807b74bd730fb15500ac4a790392100aef362cd7628d5806
+Tag = 75d86cde91b6610496c3bb5276238741
+Plaintext = 0041a0cf48fcf870b21db6107cfd9ef91e409afc7562ffa7
+Ciphertext = 64c1278d8335eaf61f90822f72f9f04e756f29a18dd6b6f9
+
+Cipher = aes-256-ccm
+Key = 60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522
+IV = 48526f1bffc97dd65e42906983
+AAD = e788c98ae85b11b3ae884eed6f3b8f5bcf5ab1b7b20ad3f44f760b2287cc5793
+Tag = db7d9f10e75d1b213beae0e0230dd82b
+Plaintext = fcc74ef1908dbcab9b05c76ee5a9941cdef933d433c0d25f
+Ciphertext = 9847c9b35b44ae2d3688f351ebadfaabb5d68089cb749b01
+
+Cipher = aes-256-ccm
+Key = 60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522
+IV = 48526f1bffc97dd65e42906983
+AAD = d330fc1ca406dd9528e9281aa1a3cdf013b698c14a4e55371e7539c9f6867dd4
+Tag = c63ba64291e73e6349ed089a53564291
+Plaintext = 611dade00cec14743be4e035cafe7507df5fb94b278875b1
+Ciphertext = 059d2aa2c72506f29669d40ac4fa1bb0b4700a16df3c3cef
+
+Cipher = aes-256-ccm
+Key = 60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522
+IV = 48526f1bffc97dd65e42906983
+AAD = 06bbadd5d22d1796d88415d7a4b024313f243bd0f58aafc75bb554a691d7e54f
+Tag = ac4d7bd964a2f9e2303df688dd0513da
+Plaintext = b67b5dd7f90ecd48a45853cb193e0d9702d78898f07e831d
+Ciphertext = d2fbda9532c7dfce09d567f4173a632069f83bc508caca43
diff --git a/test/recipes/30-test_evp_data/evpciph_aes_common.txt b/test/recipes/30-test_evp_data/evpciph_aes_common.txt
new file mode 100644
index 000000000000..484147b26a96
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_aes_common.txt
@@ -0,0 +1,1305 @@
+#
+# Copyright 2001-2023 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 are ignored.
+# The keyword Availablein must appear before the test name if needed.
+
+
+Title = AES (from FIPS-197 test vectors)
+
+Cipher = AES-128-ECB
+Key = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 00112233445566778899AABBCCDDEEFF
+Ciphertext = 69C4E0D86A7B0430D8CDB78070B4C55A
+
+# AES 192 ECB tests (from FIPS-197 test vectors, encrypt)
+
+Cipher = AES-192-ECB
+Key = 000102030405060708090A0B0C0D0E0F1011121314151617
+Operation = ENCRYPT
+Plaintext = 00112233445566778899AABBCCDDEEFF
+Ciphertext = DDA97CA4864CDFE06EAF70A0EC0D7191
+
+
+# AES 256 ECB tests (from FIPS-197 test vectors, encrypt)
+
+Cipher = AES-256-ECB
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Operation = ENCRYPT
+Plaintext = 00112233445566778899AABBCCDDEEFF
+Ciphertext = 8EA2B7CA516745BFEAFC49904B496089
+
+
+# AES 128 ECB tests (from NIST test vectors, encrypt)
+
+#AES-128-ECB:00000000000000000000000000000000::00000000000000000000000000000000:C34C052CC0DA8D73451AFE5F03BE297F:1
+
+# AES 128 ECB tests (from NIST test vectors, decrypt)
+
+#AES-128-ECB:00000000000000000000000000000000::44416AC2D1F53C583303917E6BE9EBE0:00000000000000000000000000000000:0
+
+# AES 192 ECB tests (from NIST test vectors, decrypt)
+
+#AES-192-ECB:000000000000000000000000000000000000000000000000::48E31E9E256718F29229319C19F15BA4:00000000000000000000000000000000:0
+
+# AES 256 ECB tests (from NIST test vectors, decrypt)
+
+#AES-256-ECB:0000000000000000000000000000000000000000000000000000000000000000::058CCFFDBBCB382D1F6F56585D8A4ADE:00000000000000000000000000000000:0
+
+# AES 128 CBC tests (from NIST test vectors, encrypt)
+
+#AES-128-CBC:00000000000000000000000000000000:00000000000000000000000000000000:00000000000000000000000000000000:8A05FC5E095AF4848A08D328D3688E3D:1
+
+# AES 192 CBC tests (from NIST test vectors, encrypt)
+
+#AES-192-CBC:000000000000000000000000000000000000000000000000:00000000000000000000000000000000:00000000000000000000000000000000:7BD966D53AD8C1BB85D2ADFAE87BB104:1
+
+# AES 256 CBC tests (from NIST test vectors, encrypt)
+
+#AES-256-CBC:0000000000000000000000000000000000000000000000000000000000000000:00000000000000000000000000000000:00000000000000000000000000000000:FE3C53653E2F45B56FCD88B2CC898FF0:1
+
+# AES 128 CBC tests (from NIST test vectors, decrypt)
+
+#AES-128-CBC:00000000000000000000000000000000:00000000000000000000000000000000:FACA37E0B0C85373DF706E73F7C9AF86:00000000000000000000000000000000:0
+
+# AES tests from NIST document SP800-38A
+# For all ECB encrypts and decrypts, the transformed sequence is
+# AES-bits-ECB:key::plaintext:ciphertext:encdec
+# ECB-AES128.Encrypt and ECB-AES128.Decrypt
+
+Title = AES tests from NIST document SP800-38A
+
+Cipher = AES-128-ECB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 3AD77BB40D7A3660A89ECAF32466EF97
+
+Cipher = AES-128-ECB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = F5D3D58503B9699DE785895A96FDBAAF
+
+Cipher = AES-128-ECB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 43B1CD7F598ECE23881B00E3ED030688
+
+Cipher = AES-128-ECB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 7B0C785E27E8AD3F8223207104725DD4
+
+# ECB-AES192.Encrypt and ECB-AES192.Decrypt
+Cipher = AES-192-ECB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = BD334F1D6E45F25FF712A214571FA5CC
+
+Cipher = AES-192-ECB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 974104846D0AD3AD7734ECB3ECEE4EEF
+
+Cipher = AES-192-ECB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = EF7AFD2270E2E60ADCE0BA2FACE6444E
+
+Cipher = AES-192-ECB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 9A4B41BA738D6C72FB16691603C18E0E
+
+# ECB-AES256.Encrypt and ECB-AES256.Decrypt
+Cipher = AES-256-ECB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = F3EED1BDB5D2A03C064B5A7E3DB181F8
+
+Cipher = AES-256-ECB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 591CCB10D410ED26DC5BA74A31362870
+
+Cipher = AES-256-ECB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = B6ED21B99CA6F4F9F153E7B1BEAFED1D
+
+Cipher = AES-256-ECB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 23304B7A39F9F3FF067D8D8F9E24ECC7
+
+# For all CBC encrypts and decrypts, the transformed sequence is
+# AES-bits-CBC:key:IV/ciphertext':plaintext:ciphertext:encdec
+# CBC-AES128.Encrypt and CBC-AES128.Decrypt
+Cipher = AES-128-CBC
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 7649ABAC8119B246CEE98E9B12E9197D
+NextIV = 7649abac8119b246cee98e9b12e9197d
+
+Cipher = AES-128-CBC
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 7649ABAC8119B246CEE98E9B12E9197D
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 5086CB9B507219EE95DB113A917678B2
+NextIV = 5086cb9b507219ee95db113a917678b2
+
+Cipher = AES-128-CBC
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 5086CB9B507219EE95DB113A917678B2
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 73BED6B8E3C1743B7116E69E22229516
+NextIV = 73bed6b8e3c1743b7116e69e22229516
+
+Cipher = AES-128-CBC
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 73BED6B8E3C1743B7116E69E22229516
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 3FF1CAA1681FAC09120ECA307586E1A7
+NextIV = 3ff1caa1681fac09120eca307586e1a7
+
+# CBC-AES192.Encrypt and CBC-AES192.Decrypt
+Cipher = AES-192-CBC
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 4F021DB243BC633D7178183A9FA071E8
+NextIV = 4f021db243bc633d7178183a9fa071e8
+
+Cipher = AES-192-CBC
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 4F021DB243BC633D7178183A9FA071E8
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = B4D9ADA9AD7DEDF4E5E738763F69145A
+NextIV = b4d9ada9ad7dedf4e5e738763f69145a
+
+Cipher = AES-192-CBC
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = B4D9ADA9AD7DEDF4E5E738763F69145A
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 571B242012FB7AE07FA9BAAC3DF102E0
+NextIV = 571b242012fb7ae07fa9baac3df102e0
+
+Cipher = AES-192-CBC
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 571B242012FB7AE07FA9BAAC3DF102E0
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 08B0E27988598881D920A9E64F5615CD
+NextIV = 08b0e27988598881d920a9e64f5615cd
+
+# CBC-AES256.Encrypt and CBC-AES256.Decrypt
+Cipher = AES-256-CBC
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = F58C4C04D6E5F1BA779EABFB5F7BFBD6
+NextIV = f58c4c04d6e5f1ba779eabfb5f7bfbd6
+
+Cipher = AES-256-CBC
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = F58C4C04D6E5F1BA779EABFB5F7BFBD6
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 9CFC4E967EDB808D679F777BC6702C7D
+NextIV = 9cfc4e967edb808d679f777bc6702c7d
+
+Cipher = AES-256-CBC
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 9CFC4E967EDB808D679F777BC6702C7D
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 39F23369A9D9BACFA530E26304231461
+NextIV = 39f23369a9d9bacfa530e26304231461
+
+Cipher = AES-256-CBC
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 39F23369A9D9BACFA530E26304231461
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = B2EB05E2C39BE9FCDA6C19078C6A9D1B
+NextIV = b2eb05e2c39be9fcda6c19078c6a9d1b
+
+# We don't support CFB{1,8}-AESxxx.{En,De}crypt
+# For all CFB128 encrypts and decrypts, the transformed sequence is
+# AES-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec
+# CFB128-AES128.Encrypt
+Cipher = AES-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 3B3FD92EB72DAD20333449F8E83CFB4A
+NextIV = 3b3fd92eb72dad20333449f8e83cfb4a
+
+Cipher = AES-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 3B3FD92EB72DAD20333449F8E83CFB4A
+Operation = ENCRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = C8A64537A0B3A93FCDE3CDAD9F1CE58B
+NextIV = c8a64537a0b3a93fcde3cdad9f1ce58b
+
+Cipher = AES-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = C8A64537A0B3A93FCDE3CDAD9F1CE58B
+Operation = ENCRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 26751F67A3CBB140B1808CF187A4F4DF
+NextIV = 26751f67a3cbb140b1808cf187a4f4df
+
+Cipher = AES-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 26751F67A3CBB140B1808CF187A4F4DF
+Operation = ENCRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = C04B05357C5D1C0EEAC4C66F9FF7F2E6
+NextIV = c04b05357c5d1c0eeac4c66f9ff7f2e6
+
+# CFB128-AES128.Decrypt
+Cipher = AES-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 3B3FD92EB72DAD20333449F8E83CFB4A
+NextIV = 3b3fd92eb72dad20333449f8e83cfb4a
+
+Cipher = AES-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 3B3FD92EB72DAD20333449F8E83CFB4A
+Operation = DECRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = C8A64537A0B3A93FCDE3CDAD9F1CE58B
+NextIV = c8a64537a0b3a93fcde3cdad9f1ce58b
+
+Cipher = AES-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = C8A64537A0B3A93FCDE3CDAD9F1CE58B
+Operation = DECRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 26751F67A3CBB140B1808CF187A4F4DF
+NextIV = 26751f67a3cbb140b1808cf187a4f4df
+
+Cipher = AES-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 26751F67A3CBB140B1808CF187A4F4DF
+Operation = DECRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = C04B05357C5D1C0EEAC4C66F9FF7F2E6
+NextIV = c04b05357c5d1c0eeac4c66f9ff7f2e6
+
+# CFB128-AES192.Encrypt
+Cipher = AES-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = CDC80D6FDDF18CAB34C25909C99A4174
+NextIV = cdc80d6fddf18cab34c25909c99a4174
+
+Cipher = AES-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = CDC80D6FDDF18CAB34C25909C99A4174
+Operation = ENCRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 67CE7F7F81173621961A2B70171D3D7A
+NextIV = 67ce7f7f81173621961a2b70171d3d7a
+
+Cipher = AES-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 67CE7F7F81173621961A2B70171D3D7A
+Operation = ENCRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 2E1E8A1DD59B88B1C8E60FED1EFAC4C9
+NextIV = 2e1e8a1dd59b88b1c8e60fed1efac4c9
+
+Cipher = AES-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 2E1E8A1DD59B88B1C8E60FED1EFAC4C9
+Operation = ENCRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = C05F9F9CA9834FA042AE8FBA584B09FF
+NextIV = c05f9f9ca9834fa042ae8fba584b09ff
+
+# CFB128-AES192.Decrypt
+Cipher = AES-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = CDC80D6FDDF18CAB34C25909C99A4174
+NextIV = cdc80d6fddf18cab34c25909c99a4174
+
+Cipher = AES-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = CDC80D6FDDF18CAB34C25909C99A4174
+Operation = DECRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 67CE7F7F81173621961A2B70171D3D7A
+NextIV = 67ce7f7f81173621961a2b70171d3d7a
+
+Cipher = AES-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 67CE7F7F81173621961A2B70171D3D7A
+Operation = DECRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 2E1E8A1DD59B88B1C8E60FED1EFAC4C9
+NextIV = 2e1e8a1dd59b88b1c8e60fed1efac4c9
+
+Cipher = AES-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 2E1E8A1DD59B88B1C8E60FED1EFAC4C9
+Operation = DECRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = C05F9F9CA9834FA042AE8FBA584B09FF
+NextIV = c05f9f9ca9834fa042ae8fba584b09ff
+
+# CFB128-AES256.Encrypt
+Cipher = AES-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = DC7E84BFDA79164B7ECD8486985D3860
+NextIV = dc7e84bfda79164b7ecd8486985d3860
+
+Cipher = AES-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = DC7E84BFDA79164B7ECD8486985D3860
+Operation = ENCRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 39FFED143B28B1C832113C6331E5407B
+NextIV = 39ffed143b28b1c832113c6331e5407b
+
+Cipher = AES-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 39FFED143B28B1C832113C6331E5407B
+Operation = ENCRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = DF10132415E54B92A13ED0A8267AE2F9
+NextIV = df10132415e54b92a13ed0a8267ae2f9
+
+Cipher = AES-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = DF10132415E54B92A13ED0A8267AE2F9
+Operation = ENCRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 75A385741AB9CEF82031623D55B1E471
+NextIV = 75a385741ab9cef82031623d55b1e471
+
+# CFB128-AES256.Decrypt
+Cipher = AES-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = DC7E84BFDA79164B7ECD8486985D3860
+NextIV = dc7e84bfda79164b7ecd8486985d3860
+
+Cipher = AES-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = DC7E84BFDA79164B7ECD8486985D3860
+Operation = DECRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 39FFED143B28B1C832113C6331E5407B
+NextIV = 39ffed143b28b1c832113c6331e5407b
+
+Cipher = AES-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 39FFED143B28B1C832113C6331E5407B
+Operation = DECRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = DF10132415E54B92A13ED0A8267AE2F9
+NextIV = df10132415e54b92a13ed0a8267ae2f9
+
+Cipher = AES-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = DF10132415E54B92A13ED0A8267AE2F9
+Operation = DECRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 75A385741AB9CEF82031623D55B1E471
+NextIV = 75a385741ab9cef82031623d55b1e471
+
+# For all OFB encrypts and decrypts, the transformed sequence is
+# AES-bits-CFB:key:IV/output':plaintext:ciphertext:encdec
+# OFB-AES128
+Cipher = AES-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 3B3FD92EB72DAD20333449F8E83CFB4A
+NextIV = 50fe67cc996d32b6da0937e99bafec60
+
+Cipher = AES-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 50FE67CC996D32B6DA0937E99BAFEC60
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 7789508D16918F03F53C52DAC54ED825
+NextIV = d9a4dada0892239f6b8b3d7680e15674
+
+Cipher = AES-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = D9A4DADA0892239F6B8B3D7680E15674
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 9740051E9C5FECF64344F7A82260EDCC
+NextIV = a78819583f0308e7a6bf36b1386abf23
+
+Cipher = AES-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = A78819583F0308E7A6BF36B1386ABF23
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 304C6528F659C77866A510D9C1D6AE5E
+NextIV = c6d3416d29165c6fcb8e51a227ba994e
+
+# OFB-AES192
+Cipher = AES-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = CDC80D6FDDF18CAB34C25909C99A4174
+NextIV = a609b38df3b1133dddff2718ba09565e
+
+Cipher = AES-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = A609B38DF3B1133DDDFF2718BA09565E
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = FCC28B8D4C63837C09E81700C1100401
+NextIV = 52ef01da52602fe0975f78ac84bf8a50
+
+Cipher = AES-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 52EF01DA52602FE0975F78AC84BF8A50
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 8D9A9AEAC0F6596F559C6D4DAF59A5F2
+NextIV = bd5286ac63aabd7eb067ac54b553f71d
+
+Cipher = AES-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = BD5286AC63AABD7EB067AC54B553F71D
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 6D9F200857CA6C3E9CAC524BD9ACC92A
+NextIV = 9b00044d8885f729318713303fc0fe3a
+
+# OFB-AES256
+Cipher = AES-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = DC7E84BFDA79164B7ECD8486985D3860
+NextIV = b7bf3a5df43989dd97f0fa97ebce2f4a
+
+Cipher = AES-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = B7BF3A5DF43989DD97F0FA97EBCE2F4A
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 4FEBDC6740D20B3AC88F6AD82A4FB08D
+NextIV = e1c656305ed1a7a6563805746fe03edc
+
+Cipher = AES-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = E1C656305ED1A7A6563805746FE03EDC
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 71AB47A086E86EEDF39D1C5BBA97C408
+NextIV = 41635be625b48afc1666dd42a09d96e7
+
+Cipher = AES-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 41635BE625B48AFC1666DD42A09D96E7
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 0126141D67F37BE8538F5A8BE740E484
+NextIV = f7b93058b8bce0fffea41bf0012cd394
+
+Title = AES Counter test vectors from RFC3686
+
+Cipher = aes-128-ctr
+Key = AE6852F8121067CC4BF7A5765577F39E
+IV = 00000030000000000000000000000001
+Operation = ENCRYPT
+Plaintext = 53696E676C6520626C6F636B206D7367
+Ciphertext = E4095D4FB7A7B3792D6175A3261311B8
+NextIV = 00000030000000000000000000000002
+
+Cipher = aes-128-ctr
+Key = 7E24067817FAE0D743D6CE1F32539163
+IV = 006CB6DBC0543B59DA48D90B00000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Ciphertext = 5104A106168A72D9790D41EE8EDAD388EB2E1EFC46DA57C8FCE630DF9141BE28
+NextIV = 006cb6dbc0543b59da48d90b00000003
+
+Cipher = aes-128-ctr
+Key = 7691BE035E5020A8AC6E618529F9A0DC
+IV = 00E0017B27777F3F4A1786F000000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223
+Ciphertext = C1CF48A89F2FFDD9CF4652E9EFDB72D74540A42BDE6D7836D59A5CEAAEF3105325B2072F
+NextIV = 00e0017b27777f3f4a1786f000000004
+
+Cipher = aes-192-ctr
+Key = 16AF5B145FC9F579C175F93E3BFB0EED863D06CCFDB78515
+IV = 0000004836733C147D6D93CB00000001
+Operation = ENCRYPT
+Plaintext = 53696E676C6520626C6F636B206D7367
+Ciphertext = 4B55384FE259C9C84E7935A003CBE928
+NextIV = 0000004836733c147d6d93cb00000002
+
+Cipher = aes-192-ctr
+Key = 7C5CB2401B3DC33C19E7340819E0F69C678C3DB8E6F6A91A
+IV = 0096B03B020C6EADC2CB500D00000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Ciphertext = 453243FC609B23327EDFAAFA7131CD9F8490701C5AD4A79CFC1FE0FF42F4FB00
+NextIV = 0096b03b020c6eadc2cb500d00000003
+
+Cipher = aes-192-ctr
+Key = 02BF391EE8ECB159B959617B0965279BF59B60A786D3E0FE
+IV = 0007BDFD5CBD60278DCC091200000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223
+Ciphertext = 96893FC55E5C722F540B7DD1DDF7E758D288BC95C69165884536C811662F2188ABEE0935
+NextIV = 0007bdfd5cbd60278dcc091200000004
+
+Cipher = aes-256-ctr
+Key = 776BEFF2851DB06F4C8A0542C8696F6C6A81AF1EEC96B4D37FC1D689E6C1C104
+IV = 00000060DB5672C97AA8F0B200000001
+Operation = ENCRYPT
+Plaintext = 53696E676C6520626C6F636B206D7367
+Ciphertext = 145AD01DBF824EC7560863DC71E3E0C0
+NextIV = 00000060db5672c97aa8f0b200000002
+
+Cipher = aes-256-ctr
+Key = F6D66D6BD52D59BB0796365879EFF886C66DD51A5B6A99744B50590C87A23884
+IV = 00FAAC24C1585EF15A43D87500000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Ciphertext = F05E231B3894612C49EE000B804EB2A9B8306B508F839D6A5530831D9344AF1C
+NextIV = 00faac24c1585ef15a43d87500000003
+
+Cipher = aes-256-ctr
+Key = FF7A617CE69148E4F1726E2F43581DE2AA62D9F805532EDFF1EED687FB54153D
+IV = 001CC5B751A51D70A1C1114800000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223
+Ciphertext = EB6C52821D0BBBF7CE7594462ACA4FAAB407DF866569FD07F48CC0B583D6071F1EC0E6B8
+NextIV = 001cc5b751a51d70a1c1114800000004
+
+# Self-generated vector to trigger false carry on big-endian platforms
+Cipher = aes-128-ctr
+Key = 7E24067817FAE0D743D6CE1F32539163
+IV = 00000000000000007FFFFFFFFFFFFFFF
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Ciphertext = A2D459477E6432BD74184B1B5370D2243CDC202BC43583B2A55D288CDBBD1E03
+NextIV = 00000000000000008000000000000001
+
+# AES CCM 256 bit key
+Cipher = aes-256-ccm
+Key = 1bde3251d41a8b5ea013c195ae128b218b3e0306376357077ef1c1c78548b92e
+IV = 5b8e40746f6b98e00f1d13ff41
+AAD = c17a32514eb6103f3249e076d4c871dc97e04b286699e54491dc18f6d734d4c0
+Tag = 2024931d73bca480c24a24ece6b6c2bf
+Plaintext = 53bd72a97089e312422bf72e242377b3c6ee3e2075389b999c4ef7f28bd2b80a
+Ciphertext = 9a5fcccdb4cf04e7293d2775cc76a488f042382d949b43b7d6bb2b9864786726
+
+Cipher = aes-256-ccm
+Key = 1bde3251d41a8b5ea013c195ae128b218b3e0306376357077ef1c1c78548b92e
+IV = 5b8e40746f6b98e00f1d13ff41
+AAD = c17a32514eb6103f3249e076d4c871dc97e04b286699e54491dc18f6d734d4c0
+Tag = 2024931d73bca480c24a24ece6b6c2be
+Plaintext = 53bd72a97089e312422bf72e242377b3c6ee3e2075389b999c4ef7f28bd2b80a
+Ciphertext = 9a5fcccdb4cf04e7293d2775cc76a488f042382d949b43b7d6bb2b9864786726
+Operation = DECRYPT
+Result = CIPHERUPDATE_ERROR
+
+# Test that the tag can be set after specifying AAD.
+Cipher = aes-256-ccm
+Key = 1bde3251d41a8b5ea013c195ae128b218b3e0306376357077ef1c1c78548b92e
+IV = 5b8e40746f6b98e00f1d13ff41
+AAD = c17a32514eb6103f3249e076d4c871dc97e04b286699e54491dc18f6d734d4c0
+Tag = 2024931d73bca480c24a24ece6b6c2bf
+SetTagLate = TRUE
+Operation = DECRYPT
+Plaintext = 53bd72a97089e312422bf72e242377b3c6ee3e2075389b999c4ef7f28bd2b80a
+Ciphertext = 9a5fcccdb4cf04e7293d2775cc76a488f042382d949b43b7d6bb2b9864786726
+
+# AES GCM test vectors from http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf
+Cipher = aes-128-gcm
+Key = 00000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = 58e2fccefa7e3061367f1d57a4e7455a
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-gcm
+Key = 00000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = ab6e47d42cec13bdf53a67b21257bddf
+Plaintext = 00000000000000000000000000000000
+Ciphertext = 0388dace60b6a392f328c2b971b2fe78
+NextIV = 000000000000000000000000
+
+Cipher = aes-128-gcm
+Key = feffe9928665731c6d6a8f9467308308
+IV = cafebabefacedbaddecaf888
+AAD =
+Tag = 4d5c2af327cd64a62cf35abd2ba6fab4
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255
+Ciphertext = 42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985
+NextIV = cafebabefacedbaddecaf888
+
+Cipher = aes-128-gcm
+Key = feffe9928665731c6d6a8f9467308308
+IV = cafebabefacedbaddecaf888
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = 5bc94fbc3221a5db94fae95ae7121a47
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = 42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091
+NextIV = cafebabefacedbaddecaf888
+
+Cipher = aes-128-gcm
+Key = feffe9928665731c6d6a8f9467308308
+IV = cafebabefacedbad
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = 3612d2e79e3b0785561be14aaca2fccb
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = 61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598
+
+Cipher = aes-128-gcm
+Key = feffe9928665731c6d6a8f9467308308
+IV = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = 619cc5aefffe0bfa462af43c1699d050
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = 8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5
+
+Cipher = aes-128-gcm
+Key = feffe9928665731c6d6a8f9467308308
+IV = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = 619cc5aefffe0bfa462af43c1699d051
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = 8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5
+Operation = DECRYPT
+Result = CIPHERFINAL_ERROR
+
+Cipher = aes-192-gcm
+Key = 000000000000000000000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = cd33b28ac773f74ba00ed1f312572435
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-gcm
+Key = 000000000000000000000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = 2ff58d80033927ab8ef4d4587514f0fb
+Plaintext = 00000000000000000000000000000000
+Ciphertext = 98e7247c07f0fe411c267e4384b0f600
+NextIV = 000000000000000000000000
+
+Cipher = aes-192-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c
+IV = cafebabefacedbaddecaf888
+AAD =
+Tag = 9924a7c8587336bfb118024db8674a14
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255
+Ciphertext = 3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256
+NextIV = cafebabefacedbaddecaf888
+
+Cipher = aes-192-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c
+IV = cafebabefacedbaddecaf888
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = 2519498e80f1478f37ba55bd6d27618c
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = 3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710
+NextIV = cafebabefacedbaddecaf888
+
+Cipher = aes-192-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c
+IV = cafebabefacedbad
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = 65dcc57fcf623a24094fcca40d3533f8
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = 0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7
+
+Cipher = aes-192-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c
+IV = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = dcf566ff291c25bbb8568fc3d376a6d9
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = d27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373b
+
+Cipher = aes-192-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c
+IV = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = dcf566ff291c25bbb8568fc3d376a6d8
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = d27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373b
+Operation = DECRYPT
+Result = CIPHERFINAL_ERROR
+
+Cipher = aes-256-gcm
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = 530f8afbc74536b9a963b4f1c4cb738b
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-gcm
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = d0d1c8a799996bf0265b98b5d48ab919
+Plaintext = 00000000000000000000000000000000
+Ciphertext = cea7403d4d606b6e074ec5d3baf39d18
+NextIV = 000000000000000000000000
+
+Cipher = aes-256-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+IV = cafebabefacedbaddecaf888
+AAD =
+Tag = b094dac5d93471bdec1a502270e3cc6c
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255
+Ciphertext = 522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad
+NextIV = cafebabefacedbaddecaf888
+
+Cipher = aes-256-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+IV = cafebabefacedbaddecaf888
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = 76fc6ece0f4e1768cddf8853bb2d551b
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = 522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662
+NextIV = cafebabefacedbaddecaf888
+
+Cipher = aes-256-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+IV = cafebabefacedbad
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = 3a337dbf46a792c45e454913fe2ea8f2
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = c3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1f
+
+Cipher = aes-256-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+IV = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = a44a8266ee1c8eb0c8b5d4cf5ae9f19a
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = 5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f
+
+Cipher = aes-256-gcm
+Key = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+IV = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b
+AAD = feedfacedeadbeeffeedfacedeadbeefabaddad2
+Tag = a44a8266ee1c8eb0c8b5d4cf5ae9f19b
+Plaintext = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+Ciphertext = 5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f
+Operation = DECRYPT
+Result = CIPHERFINAL_ERROR
+
+# local add-ons, primarily streaming ghash tests
+# 128 bytes aad
+Cipher = aes-128-gcm
+Key = 00000000000000000000000000000000
+IV = 000000000000000000000000
+AAD = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad
+Tag = 5fea793a2d6f974d37e68e0cb8ff9492
+Plaintext =
+Ciphertext =
+
+# 48 bytes plaintext
+Cipher = aes-128-gcm
+Key = 00000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = 9dd0a376b08e40eb00c35f29f9ea61a4
+Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 0388dace60b6a392f328c2b971b2fe78f795aaab494b5923f7fd89ff948bc1e0200211214e7394da2089b6acd093abe0
+NextIV = 000000000000000000000000
+
+# 80 bytes plaintext
+Cipher = aes-128-gcm
+Key = 00000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = 98885a3a22bd4742fe7b72172193b163
+Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 0388dace60b6a392f328c2b971b2fe78f795aaab494b5923f7fd89ff948bc1e0200211214e7394da2089b6acd093abe0c94da219118e297d7b7ebcbcc9c388f28ade7d85a8ee35616f7124a9d5270291
+NextIV = 000000000000000000000000
+
+# 128 bytes plaintext
+Cipher = aes-128-gcm
+Key = 00000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = cac45f60e31efd3b5a43b98a22ce1aa1
+Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 0388dace60b6a392f328c2b971b2fe78f795aaab494b5923f7fd89ff948bc1e0200211214e7394da2089b6acd093abe0c94da219118e297d7b7ebcbcc9c388f28ade7d85a8ee35616f7124a9d527029195b84d1b96c690ff2f2de30bf2ec89e00253786e126504f0dab90c48a30321de3345e6b0461e7c9e6c6b7afedde83f40
+NextIV = 000000000000000000000000
+
+# 192 bytes plaintext, iv is chosen so that initial counter LSB is 0xFF
+Cipher = aes-128-gcm
+Key = 00000000000000000000000000000000
+IV = ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+AAD =
+Tag = 566f8ef683078bfdeeffa869d751a017
+Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 56b3373ca9ef6e4a2b64fe1e9a17b61425f10d47a75a5fce13efc6bc784af24f4141bdd48cf7c770887afd573cca5418a9aeffcd7c5ceddfc6a78397b9a85b499da558257267caab2ad0b23ca476a53cb17fb41c4b8b475cb4f3f7165094c229c9e8c4dc0a2a5ff1903e501511221376a1cdb8364c5061a20cae74bc4acd76ceb0abc9fd3217ef9f8c90be402ddf6d8697f4f880dff15bfb7a6b28241ec8fe183c2d59e3f9dfff653c7126f0acb9e64211f42bae12af462b1070bef1ab5e3606
+
+# 240 bytes plaintext, iv is chosen so that initial counter LSB is 0xFF
+Cipher = aes-128-gcm
+Key = 00000000000000000000000000000000
+IV = ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+AAD =
+Tag = fd0c7011ff07f0071324bdfb2d0f3a29
+Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 56b3373ca9ef6e4a2b64fe1e9a17b61425f10d47a75a5fce13efc6bc784af24f4141bdd48cf7c770887afd573cca5418a9aeffcd7c5ceddfc6a78397b9a85b499da558257267caab2ad0b23ca476a53cb17fb41c4b8b475cb4f3f7165094c229c9e8c4dc0a2a5ff1903e501511221376a1cdb8364c5061a20cae74bc4acd76ceb0abc9fd3217ef9f8c90be402ddf6d8697f4f880dff15bfb7a6b28241ec8fe183c2d59e3f9dfff653c7126f0acb9e64211f42bae12af462b1070bef1ab5e3606872ca10dee15b3249b1a1b958f23134c4bccb7d03200bce420a2f8eb66dcf3644d1423c1b5699003c13ecef4bf38a3b6
+
+# 288 bytes plaintext, iv is chosen so that initial counter LSB is 0xFF
+Cipher = aes-128-gcm
+Key = 00000000000000000000000000000000
+IV = ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+AAD =
+Tag = 8b307f6b33286d0ab026a9ed3fe1e85f
+Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 56b3373ca9ef6e4a2b64fe1e9a17b61425f10d47a75a5fce13efc6bc784af24f4141bdd48cf7c770887afd573cca5418a9aeffcd7c5ceddfc6a78397b9a85b499da558257267caab2ad0b23ca476a53cb17fb41c4b8b475cb4f3f7165094c229c9e8c4dc0a2a5ff1903e501511221376a1cdb8364c5061a20cae74bc4acd76ceb0abc9fd3217ef9f8c90be402ddf6d8697f4f880dff15bfb7a6b28241ec8fe183c2d59e3f9dfff653c7126f0acb9e64211f42bae12af462b1070bef1ab5e3606872ca10dee15b3249b1a1b958f23134c4bccb7d03200bce420a2f8eb66dcf3644d1423c1b5699003c13ecef4bf38a3b60eedc34033bac1902783dc6d89e2e774188a439c7ebcc0672dbda4ddcfb2794613b0be41315ef778708a70ee7d75165c
+
+# 80 bytes plaintext, submitted by Intel
+Cipher = aes-128-gcm
+Key = 843ffcf5d2b72694d19ed01d01249412
+IV = dbcca32ebf9b804617c3aa9e
+AAD = 00000000000000000000000000000000101112131415161718191a1b1c1d1e1f
+Tag = 3b629ccfbc1119b7319e1dce2cd6fd6d
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ciphertext = 6268c6fa2a80b2d137467f092f657ac04d89be2beaa623d61b5a868c8f03ff95d3dcee23ad2f1ab3a6c80eaf4b140eb05de3457f0fbc111a6b43d0763aa422a3013cf1dc37fe417d1fbfc449b75d4cc5
+NextIV = dbcca32ebf9b804617c3aa9e
+
+# Single byte IV test cases from
+# https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program/CAVP-TESTING-BLOCK-CIPHER-MODES#GCMVS
+
+Title = AES GCM single byte IV tests
+
+Cipher = aes-128-gcm
+Key = 1672c3537afa82004c6b8a46f6f0d026
+IV = 05
+Tag = 8e2ad721f9455f74d8b53d3141f27e8e
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-gcm
+Key = 6471e11b5a559f84d196160c64ced95a
+IV = 1a
+AAD = 147c70bd944ae51289717bdbdac86511fa3a43a2
+Tag = b7b80d314024261bafd7d218
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-gcm
+Key = f0d44d3c8c8ff4d2aab5c315e77a5cff
+IV = 3e
+Tag = fe0c50de4c5443e4c9380a7df0
+Plaintext = ecb7e9263c3080cb8861ffc5afdf3fe8
+Ciphertext = b5cfd9141ea43d5c16e28666c3840805
+
+Cipher = aes-128-gcm
+Key = c422ac0266dc9b5ddc391d9cdb72257e
+IV = c7
+Tag = 95c1e410d4ea59dda50d84162b49
+Plaintext = 6149277175c02a462dab219b80d15641a4c033dfa4c9a81de1765f0276008fa2
+AAD = aa56b160c5d51a4aa400e798c825aaa27d6693de
+Ciphertext = 39d9f9b2348214270f1ca18b521f7485c5390c8e993eb7ff79a5be99c7d523f1
+
+Cipher = aes-128-gcm
+Key = 72c5683d1e0173afcd92002c26ae3ea5
+IV = 4c
+Plaintext = f69623243c6bb924a5502dd270f730baf3fd4a0c10b889fb42a12b086d427786
+AAD = f6cecdc9118777b875ef256cf92a3dc0cf208149
+Ciphertext = 188e68729648fa9b4a202ed2313be860c593600ac8419c75c55859faa585bc0e
+Tag = bb4e889b58b9716f6556c676bd59
+
+Cipher = aes-192-gcm
+Key = d49dfb35287db0b4bce518412c4e84229a9bf8461e11e8a9
+IV = 0b
+Tag = b1ecd3e6f27346c47e7fff898a418a0f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-gcm
+Key = 842c899c5d7c3598676081e9e25fdd030d3e4490a3268fd0
+IV = 9e
+AAD = ed1162a2d95e0c248ebf9197cb03ad2d
+Tag = c81a9ff65112b75911b22523926bf39f
+Plaintext =
+Ciphertext =
+
+Cipher = aes-192-gcm
+Key = d273319d24f356bf77cb6a56450bd0d464f476a18863840a
+IV = 13
+Tag = 729b5b765d008e982d9e5fae7c998e
+Plaintext = c07e127ceb93a3d8d166d1e3fa2565e4
+Ciphertext = 0c44c7b5fb1520bdb493bec38e7846e6
+
+Cipher = aes-192-gcm
+Key = 1120b14c39f4240e2cc63285d8b7d59d44c993fddc77d456
+IV = 66
+AAD = c25f9b36d06547a64442e534b1fe3bb120a55292060a3c8611b75313fb5475333eeedac642ee2eed1dd110643ce8aff8
+Tag = ebf90469dae01e4be5b0ce86
+Plaintext = 8eb78ac034ce4f182fb9ee68d71ed3f7
+Ciphertext = ec13d51a2c37ea48beb32f766e1e42a1
+
+Cipher = aes-256-gcm
+Key = a70f2f3c96b952b2d177fce5d5edac7c939259ebd3ff7354df3d86100f0be5ac
+IV = 69
+Tag = 2d484f834a313bf3f9a25f0a7604a869
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-gcm
+Key = c639f716597a86afd12319199e21a62b1fc0277a70e3ca120bd3ff745be88604
+IV = 29
+AAD = 20fda1db6911d160121dc3c48e5f19b2
+Tag = 221a3398f20d0d9fe913f33a6cd413d3
+Plaintext =
+Ciphertext =
+
+Cipher = aes-256-gcm
+Key = 9473c28f6e978eb15e1967b888282aa6b078d320034fe5f40f8bb68674f1ecda
+IV = 0a
+Tag = 03337df7e1e68d77706abef9edaf5e07
+Plaintext = 2d2e2798c10bcfcce742e92d3c390fef
+Ciphertext = c4e5ab2c6a4316e57c6c37d2c2acb42c
+
+Cipher = aes-256-gcm
+Key = bb4635d766dd0e4a7019d1724c736e1f2c016af9e29e7d3aa2c0de23e780af26
+IV = ab
+AAD = 0f85c7dbeb674b7a70c35125d3619350
+Tag = 6bd54e5184eb300934b392c32b7c1a6e
+Plaintext = d05ce878d94662d1520b184b4bef3c45
+Ciphertext = 51baa26a6a719c1600645ff3bfdfa53b
+
+Title = AES XTS test vectors from IEEE Std 1619-2007
+
+# Using the same key twice for encryption is always banned.
+Cipher = aes-128-xts
+Operation = ENCRYPT
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+IV = 00000000000000000000000000000000
+Plaintext = 0000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e
+Result = KEY_SET_ERROR
+
+# Using the same key twice for decryption is banned in FIPS mode.
+Availablein = fips
+Cipher = aes-128-xts
+Operation = DECRYPT
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+IV = 00000000000000000000000000000000
+Plaintext = 0000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e
+Result = KEY_SET_ERROR
+
+# Using the same key twice for decryption is allowed outside of FIPS mode.
+Availablein = default
+Cipher = aes-128-xts
+Operation = DECRYPT
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+IV = 00000000000000000000000000000000
+Plaintext = 0000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e
+
+Cipher = aes-128-xts
+Key = 1111111111111111111111111111111122222222222222222222222222222222
+IV = 33333333330000000000000000000000
+Plaintext = 4444444444444444444444444444444444444444444444444444444444444444
+Ciphertext = c454185e6a16936e39334038acef838bfb186fff7480adc4289382ecd6d394f0
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f022222222222222222222222222222222
+IV = 33333333330000000000000000000000
+Plaintext = 4444444444444444444444444444444444444444444444444444444444444444
+Ciphertext = af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Ciphertext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 01000000000000000000000000000000
+Plaintext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568
+Ciphertext = 264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 02000000000000000000000000000000
+Plaintext = 264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd
+Ciphertext = fa762a3680b76007928ed4a4f49a9456031b704782e65e16cecb54ed7d017b5e18abd67b338e81078f21edb7868d901ebe9c731a7c18b5e6dec1d6a72e078ac9a4262f860beefa14f4e821018272e411a951502b6e79066e84252c3346f3aa62344351a291d4bedc7a07618bdea2af63145cc7a4b8d4070691ae890cd65733e7946e9021a1dffc4c59f159425ee6d50ca9b135fa6162cea18a939838dc000fb386fad086acce5ac07cb2ece7fd580b00cfa5e98589631dc25e8e2a3daf2ffdec26531659912c9d8f7a15e5865ea8fb5816d6207052bd7128cd743c12c8118791a4736811935eb982a532349e31dd401e0b660a568cb1a4711f552f55ded59f1f15bf7196b3ca12a91e488ef59d64f3a02bf45239499ac6176ae321c4a211ec545365971c5d3f4f09d4eb139bfdf2073d33180b21002b65cc9865e76cb24cd92c874c24c18350399a936ab3637079295d76c417776b94efce3a0ef7206b15110519655c956cbd8b2489405ee2b09a6b6eebe0c53790a12a8998378b33a5b71159625f4ba49d2a2fdba59fbf0897bc7aabd8d707dc140a80f0f309f835d3da54ab584e501dfa0ee977fec543f74186a802b9a37adb3e8291eca04d66520d229e60401e7282bef486ae059aa70696e0e305d777140a7a883ecdcb69b9ff938e8a4231864c69ca2c2043bed007ff3e605e014bcf518138dc3a25c5e236171a2d01d6
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = fd000000000000000000000000000000
+Plaintext = 8e41b78c390b5af9d758bb214a67e9f6bf7727b09ac6124084c37611398fa45daad94868600ed391fb1acd4857a95b466e62ef9f4b377244d1c152e7b30d731aad30c716d214b707aed99eb5b5e580b3e887cf7497465651d4b60e6042051da3693c3b78c14489543be8b6ad0ba629565bba202313ba7b0d0c94a3252b676f46cc02ce0f8a7d34c0ed229129673c1f61aed579d08a9203a25aac3a77e9db60267996db38df637356d9dcd1632e369939f2a29d89345c66e05066f1a3677aef18dea4113faeb629e46721a66d0a7e785d3e29af2594eb67dfa982affe0aac058f6e15864269b135418261fc3afb089472cf68c45dd7f231c6249ba0255e1e033833fc4d00a3fe02132d7bc3873614b8aee34273581ea0325c81f0270affa13641d052d36f0757d484014354d02d6883ca15c24d8c3956b1bd027bcf41f151fd8023c5340e5606f37e90fdb87c86fb4fa634b3718a30bace06a66eaf8f63c4aa3b637826a87fe8cfa44282e92cb1615af3a28e53bc74c7cba1a0977be9065d0c1a5dec6c54ae38d37f37aa35283e048e5530a85c4e7a29d7b92ec0c3169cdf2a805c7604bce60049b9fb7b8eaac10f51ae23794ceba68bb58112e293b9b692ca721b37c662f8574ed4dba6f88e170881c82cddc1034a0ca7e284bf0962b6b26292d836fa9f73c1ac770eef0f2d3a1eaf61d3e03555fd424eedd67e18a18094f888
+Ciphertext = d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = fe000000000000000000000000000000
+Plaintext = d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637
+Ciphertext = 72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = ff000000000000000000000000000000
+Plaintext = 72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a
+Ciphertext = 3260ae8dad1f4a32c5cafe3ab0eb95549d461a67ceb9e5aa2d3afb62dece0553193ba50c75be251e08d1d08f1088576c7efdfaaf3f459559571e12511753b07af073f35da06af0ce0bbf6b8f5ccc5cea500ec1b211bd51f63b606bf6528796ca12173ba39b8935ee44ccce646f90a45bf9ccc567f0ace13dc2d53ebeedc81f58b2e41179dddf0d5a5c42f5d8506c1a5d2f8f59f3ea873cbcd0eec19acbf325423bd3dcb8c2b1bf1d1eaed0eba7f0698e4314fbeb2f1566d1b9253008cbccf45a2b0d9c5c9c21474f4076e02be26050b99dee4fd68a4cf890e496e4fcae7b70f94ea5a9062da0daeba1993d2ccd1dd3c244b8428801495a58b216547e7e847c46d1d756377b6242d2e5fb83bf752b54e0df71e889f3a2bb0f4c10805bf3c590376e3c24e22ff57f7fa965577375325cea5d920db94b9c336b455f6e894c01866fe9fbb8c8d3f70a2957285f6dfb5dcd8cbf54782f8fe7766d4723819913ac773421e3a31095866bad22c86a6036b2518b2059b4229d18c8c2ccbdf906c6cc6e82464ee57bddb0bebcb1dc645325bfb3e665ef7251082c88ebb1cf203bd779fdd38675713c8daadd17e1cabee432b09787b6ddf3304e38b731b45df5df51b78fcfb3d32466028d0ba36555e7e11ab0ee0666061d1645d962444bc47a38188930a84b4d561395c73c087021927ca638b7afc8a8679ccb84c26555440ec7f10445cd
+
+
+Cipher = aes-256-xts
+Key = 27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592
+IV = ff000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Ciphertext = 1c3b3a102f770386e4836c99e370cf9bea00803f5e482357a4ae12d414a3e63b5d31e276f8fe4a8d66b317f9ac683f44680a86ac35adfc3345befecb4bb188fd5776926c49a3095eb108fd1098baec70aaa66999a72a82f27d848b21d4a741b0c5cd4d5fff9dac89aeba122961d03a757123e9870f8acf1000020887891429ca2a3e7a7d7df7b10355165c8b9a6d0a7de8b062c4500dc4cd120c0f7418dae3d0b5781c34803fa75421c790dfe1de1834f280d7667b327f6c8cd7557e12ac3a0f93ec05c52e0493ef31a12d3d9260f79a289d6a379bc70c50841473d1a8cc81ec583e9645e07b8d9670655ba5bbcfecc6dc3966380ad8fecb17b6ba02469a020a84e18e8f84252070c13e9f1f289be54fbc481457778f616015e1327a02b140f1505eb309326d68378f8374595c849d84f4c333ec4423885143cb47bd71c5edae9be69a2ffeceb1bec9de244fbe15992b11b77c040f12bd8f6a975a44a0f90c29a9abc3d4d893927284c58754cce294529f8614dcd2aba991925fedc4ae74ffac6e333b93eb4aff0479da9a410e4450e0dd7ae4c6e2910900575da401fc07059f645e8b7e9bfdef33943054ff84011493c27b3429eaedb4ed5376441a77ed43851ad77f16f541dfd269d50d6a5f14fb0aab1cbb4c1550be97f7ab4066193c4caa773dad38014bd2092fa755c824bb5e54c4f36ffda9fcea70b9c6e693e148c151
+
+Cipher = aes-256-xts
+Key = 27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592
+IV = ffff0000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Ciphertext = 77a31251618a15e6b92d1d66dffe7b50b50bad552305ba0217a610688eff7e11e1d0225438e093242d6db274fde801d4cae06f2092c728b2478559df58e837c2469ee4a4fa794e4bbc7f39bc026e3cb72c33b0888f25b4acf56a2a9804f1ce6d3d6e1dc6ca181d4b546179d55544aa7760c40d06741539c7e3cd9d2f6650b2013fd0eeb8c2b8e3d8d240ccae2d4c98320a7442e1c8d75a42d6e6cfa4c2eca1798d158c7aecdf82490f24bb9b38e108bcda12c3faf9a21141c3613b58367f922aaa26cd22f23d708dae699ad7cb40a8ad0b6e2784973dcb605684c08b8d6998c69aac049921871ebb65301a4619ca80ecb485a31d744223ce8ddc2394828d6a80470c092f5ba413c3378fa6054255c6f9df4495862bbb3287681f931b687c888abf844dfc8fc28331e579928cd12bd2390ae123cf03818d14dedde5c0c24c8ab018bfca75ca096f2d531f3d1619e785f1ada437cab92e980558b3dce1474afb75bfedbf8ff54cb2618e0244c9ac0d3c66fb51598cd2db11f9be39791abe447c63094f7c453b7ff87cb5bb36b7c79efb0872d17058b83b15ab0866ad8a58656c5a7e20dbdf308b2461d97c0ec0024a2715055249cf3b478ddd4740de654f75ca686e0d7345c69ed50cdc2a8b332b1f8824108ac937eb050585608ee734097fc09054fbff89eeaeea791f4a7ab1f9868294a4f9e27b42af8100cb9d59cef9645803
+
+Cipher = aes-256-xts
+Key = 27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592
+IV = ffffff00000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Ciphertext = e387aaa58ba483afa7e8eb469778317ecf4cf573aa9d4eac23f2cdf914e4e200a8b490e42ee646802dc6ee2b471b278195d60918ececb44bf79966f83faba0499298ebc699c0c8634715a320bb4f075d622e74c8c932004f25b41e361025b5a87815391f6108fc4afa6a05d9303c6ba68a128a55705d415985832fdeaae6c8e19110e84d1b1f199a2692119edc96132658f09da7c623efcec712537a3d94c0bf5d7e352ec94ae5797fdb377dc1551150721adf15bd26a8efc2fcaad56881fa9e62462c28f30ae1ceaca93c345cf243b73f542e2074a705bd2643bb9f7cc79bb6e7091ea6e232df0f9ad0d6cf502327876d82207abf2115cdacf6d5a48f6c1879a65b115f0f8b3cb3c59d15dd8c769bc014795a1837f3901b5845eb491adfefe097b1fa30a12fc1f65ba22905031539971a10f2f36c321bb51331cdefb39e3964c7ef079994f5b69b2edd83a71ef549971ee93f44eac3938fcdd61d01fa71799da3a8091c4c48aa9ed263ff0749df95d44fef6a0bb578ec69456aa5408ae32c7af08ad7ba8921287e3bbee31b767be06a0e705c864a769137df28292283ea81a2480241b44d9921cdbec1bc28dc1fda114bd8e5217ac9d8ebafa720e9da4f9ace231cc949e5b96fe76ffc21063fddc83a6b8679c00d35e09576a875305bed5f36ed242c8900dd1fa965bc950dfce09b132263a1eef52dd6888c309f5a7d712826
+
+Cipher = aes-256-xts
+Key = 27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592
+IV = ffffffff000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Ciphertext = bf53d2dade78e822a4d949a9bc6766b01b06a8ef70d26748c6a7fc36d80ae4c5520f7c4ab0ac8544424fa405162fef5a6b7f229498063618d39f0003cb5fb8d1c86b643497da1ff945c8d3bedeca4f479702a7a735f043ddb1d6aaade3c4a0ac7ca7f3fa5279bef56f82cd7a2f38672e824814e10700300a055e1630b8f1cb0e919f5e942010a416e2bf48cb46993d3cb6a51c19bacf864785a00bc2ecff15d350875b246ed53e68be6f55bd7e05cfc2b2ed6432198a6444b6d8c247fab941f569768b5c429366f1d3f00f0345b96123d56204c01c63b22ce78baf116e525ed90fdea39fa469494d3866c31e05f295ff21fea8d4e6e13d67e47ce722e9698a1c1048d68ebcde76b86fcf976eab8aa9790268b7068e017a8b9b749409514f1053027fd16c3786ea1bac5f15cb79711ee2abe82f5cf8b13ae73030ef5b9e4457e75d1304f988d62dd6fc4b94ed38ba831da4b7634971b6cd8ec325d9c61c00f1df73627ed3745a5e8489f3a95c69639c32cd6e1d537a85f75cc844726e8a72fc0077ad22000f1d5078f6b866318c668f1ad03d5a5fced5219f2eabbd0aa5c0f460d183f04404a0d6f469558e81fab24a167905ab4c7878502ad3e38fdbe62a41556cec37325759533ce8f25f367c87bb5578d667ae93f9e2fd99bcbc5f2fbba88cf6516139420fcff3b7361d86322c4bd84c82f335abb152c4a93411373aaa8220
+
+Cipher = aes-256-xts
+Key = 27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592
+IV = ffffffffff0000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Ciphertext = 64497e5a831e4a932c09be3e5393376daa599548b816031d224bbf50a818ed2350eae7e96087c8a0db51ad290bd00c1ac1620857635bf246c176ab463be30b808da548081ac847b158e1264be25bb0910bbc92647108089415d45fab1b3d2604e8a8eff1ae4020cfa39936b66827b23f371b92200be90251e6d73c5f86de5fd4a950781933d79a28272b782a2ec313efdfcc0628f43d744c2dc2ff3dcb66999b50c7ca895b0c64791eeaa5f29499fb1c026f84ce5b5c72ba1083cddb5ce45434631665c333b60b11593fb253c5179a2c8db813782a004856a1653011e93fb6d876c18366dd8683f53412c0c180f9c848592d593f8609ca736317d356e13e2bff3a9f59cd9aeb19cd482593d8c46128bb32423b37a9adfb482b99453fbe25a41bf6feb4aa0bef5ed24bf73c762978025482c13115e4015aac992e5613a3b5c2f685b84795cb6e9b2656d8c88157e52c42f978d8634c43d06fea928f2822e465aa6576e9bf419384506cc3ce3c54ac1a6f67dc66f3b30191e698380bc999b05abce19dc0c6dcc2dd001ec535ba18deb2df1a101023108318c75dc98611a09dc48a0acdec676fabdf222f07e026f059b672b56e5cbc8e1d21bbd867dd927212054681d70ea737134cdfce93b6f82ae22423274e58a0821cc5502e2d0ab4585e94de6975be5e0b4efce51cd3e70c25a1fbbbd609d273ad5b0d59631c531f6a0a57b9
+
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0
+IV = 9a785634120000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f10
+Ciphertext = 6c1625db4671522d3d7599601de7ca09ed
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0
+IV = 9a785634120000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f1011
+Ciphertext = d069444b7a7e0cab09e24447d24deb1fedbf
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0
+IV = 9a785634120000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112
+Ciphertext = e5df1351c0544ba1350b3363cd8ef4beedbf9d
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0
+IV = 9a785634120000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f10111213
+Ciphertext = 9d84c813f719aa2c7be3f66171c7c5c2edbf9dac
+
+Cipher = aes-128-xts
+Key = e0e1e2e3e4e5e6e7e8e9eaebecedeeefc0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+IV = 21436587a90000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Ciphertext = 38b45812ef43a05bd957e545907e223b954ab4aaf088303ad910eadf14b42be68b2461149d8c8ba85f992be970bc621f1b06573f63e867bf5875acafa04e42ccbd7bd3c2a0fb1fff791ec5ec36c66ae4ac1e806d81fbf709dbe29e471fad38549c8e66f5345d7c1eb94f405d1ec785cc6f6a68f6254dd8339f9d84057e01a17741990482999516b5611a38f41bb6478e6f173f320805dd71b1932fc333cb9ee39936beea9ad96fa10fb4112b901734ddad40bc1878995f8e11aee7d141a2f5d48b7a4e1e7f0b2c04830e69a4fd1378411c2f287edf48c6c4e5c247a19680f7fe41cefbd49b582106e3616cbbe4dfb2344b2ae9519391f3e0fb4922254b1d6d2d19c6d4d537b3a26f3bcc51588b32f3eca0829b6a5ac72578fb814fb43cf80d64a233e3f997a3f02683342f2b33d25b492536b93becb2f5e1a8b82f5b883342729e8ae09d16938841a21a97fb543eea3bbff59f13c1a18449e398701c1ad51648346cbc04c27bb2da3b93a1372ccae548fb53bee476f9e9c91773b1bb19828394d55d3e1a20ed69113a860b6829ffa847224604435070221b257e8dff783615d2cae4803a93aa4334ab482a0afac9c0aeda70b45a481df5dec5df8cc0f423c77a5fd46cd312021d4b438862419a791be03bb4d97c0e59578542531ba466a83baf92cefc151b5cc1611a167893819b63fb8a6b18e86de60290fa72b797b0ce59f3
+
+# Exercise different lengths covering even ciphertext stealing cases
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
+Ciphertext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061
+Ciphertext = 27A7479BEFA1D476489F308CD4CFA6E2A96E4BBE3208FF25287DD3819616E89CC78CF7F5E543445F8333D8FA7F56000005279FA5D8B5E4AD40E736DDB4D35412328063FD2AAB53E5EA1E0A9F332500A5B079C6307EA0914559C6D2FB6384F8AADF94
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f
+Ciphertext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce84
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071
+Ciphertext = 27A7479BEFA1D476489F308CD4CFA6E2A96E4BBE3208FF25287DD3819616E89CC78CF7F5E543445F8333D8FA7F56000005279FA5D8B5E4AD40E736DDB4D35412328063FD2AAB53E5EA1E0A9F332500A5DF9487D07A5C92CC512C8866C7E860CEF4F253466EF4953ADC8FE2F5BC1FF57593FD
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f
+Ciphertext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad0265
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081
+Ciphertext = 27A7479BEFA1D476489F308CD4CFA6E2A96E4BBE3208FF25287DD3819616E89CC78CF7F5E543445F8333D8FA7F56000005279FA5D8B5E4AD40E736DDB4D35412328063FD2AAB53E5EA1E0A9F332500A5DF9487D07A5C92CC512C8866C7E860CE93FDF166A24912B422976146AE20CE842973C68248EDDFE26FB9B096659C8A5D6BB7
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f
+Ciphertext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091
+Ciphertext = 27A7479BEFA1D476489F308CD4CFA6E2A96E4BBE3208FF25287DD3819616E89CC78CF7F5E543445F8333D8FA7F56000005279FA5D8B5E4AD40E736DDB4D35412328063FD2AAB53E5EA1E0A9F332500A5DF9487D07A5C92CC512C8866C7E860CE93FDF166A24912B422976146AE20CE846BB7DC9BA94A767AAEF20C0D61AD0265C4DD16E65A24575A709F174593F19FF85EA9
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+Ciphertext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1
+Ciphertext = 27A7479BEFA1D476489F308CD4CFA6E2A96E4BBE3208FF25287DD3819616E89CC78CF7F5E543445F8333D8FA7F56000005279FA5D8B5E4AD40E736DDB4D35412328063FD2AAB53E5EA1E0A9F332500A5DF9487D07A5C92CC512C8866C7E860CE93FDF166A24912B422976146AE20CE846BB7DC9BA94A767AAEF20C0D61AD02655EA92DC4C4E41A8952C651D33174BE519215FA160C664D4B07D757A034AB3B35A10C
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+Ciphertext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f91
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1
+Ciphertext = 27A7479BEFA1D476489F308CD4CFA6E2A96E4BBE3208FF25287DD3819616E89CC78CF7F5E543445F8333D8FA7F56000005279FA5D8B5E4AD40E736DDB4D35412328063FD2AAB53E5EA1E0A9F332500A5DF9487D07A5C92CC512C8866C7E860CE93FDF166A24912B422976146AE20CE846BB7DC9BA94A767AAEF20C0D61AD02655EA92DC4C4E41A8952C651D33174BE51A10C421110E6D81588EDE82103A252D82C6CBC24F9357BD1FB882AA4B2CC2E7FA750
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf
+Ciphertext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f434
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1
+Ciphertext = 27A7479BEFA1D476489F308CD4CFA6E2A96E4BBE3208FF25287DD3819616E89CC78CF7F5E543445F8333D8FA7F56000005279FA5D8B5E4AD40E736DDB4D35412328063FD2AAB53E5EA1E0A9F332500A5DF9487D07A5C92CC512C8866C7E860CE93FDF166A24912B422976146AE20CE846BB7DC9BA94A767AAEF20C0D61AD02655EA92DC4C4E41A8952C651D33174BE51A10C421110E6D81588EDE82103A252D8A750E8768DEFFFED9122810AAEB99F910409B03D164E727C31290FD4E039500872AF
+
+Title = AES XTS Non standard test vectors - generated from reference implementation
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0
+IV = 9a785634120000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021
+Ciphertext = edbf9dace45d6f6a7306e64be5dd824b9dc31efeb418c373ce073b66755529982538
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0
+IV = 9a785634120000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031
+Ciphertext = edbf9dace45d6f6a7306e64be5dd824b2538f5724fcf24249ac111ab45ad39237a709959673bd8747d58690f8c762a353ad6
+
+Cipher = aes-128-xts
+Key = 2718281828459045235360287471352631415926535897932384626433832795
+IV = 00000000000000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Ciphertext = 27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0
+IV = 9a785634120000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40
+Ciphertext = edbf9dace45d6f6a7306e64be5dd824b2538f5724fcf24249ac111ab45ad39233ad6183c66fa548a3cdf3e36d2b21ccde9ffb48286ec211619e02decc7ca0883c6
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0
+IV = 9a785634120000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ciphertext = edbf9dace45d6f6a7306e64be5dd824b2538f5724fcf24249ac111ab45ad39233ad6183c66fa548a3cdf3e36d2b21ccdc6bc657cb3aeb87ba2c5f58ffafacd76d0a098b687c0b6536d560ca007051b0b
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0
+IV = 9a785634120000000000000000000000
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051
+Ciphertext = edbf9dace45d6f6a7306e64be5dd824b2538f5724fcf24249ac111ab45ad39233ad6183c66fa548a3cdf3e36d2b21ccdc6bc657cb3aeb87ba2c5f58ffafacd765ecc4c85c0a01bf317b823fbd6111956d0a0
+
+# To cover the branches of assembly code of aes_v8_xts_encrypt(decrypt)
+Cipher = aes-128-xts
+Key = 1111111111111111111111111111111122222222222222222222222222222222
+IV = 33333333330000000000000000000000
+Plaintext = 44444444444444444444444444444444
+Ciphertext = c454185e6a16936e39334038acef838b
+
+Cipher = aes-128-xts
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f022222222222222222222222222222222
+IV = 33333333330000000000000000000000
+Plaintext = 44444444444444444444444444444444
+Ciphertext = af85336b597afc1a900b2eb21ec949d2
+
+Title = Case insensitive AES tests
+
+Cipher = Aes-128-eCb
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 3AD77BB40D7A3660A89ECAF32466EF97
+
+Cipher = AeS-128-cbC
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 73BED6B8E3C1743B7116E69E22229516
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 3FF1CAA1681FAC09120ECA307586E1A7
+NextIV = 3ff1caa1681fac09120eca307586e1a7
+
+Cipher = aES-128-CTR
+Key = AE6852F8121067CC4BF7A5765577F39E
+IV = 00000030000000000000000000000001
+Operation = ENCRYPT
+Plaintext = 53696E676C6520626C6F636B206D7367
+Ciphertext = E4095D4FB7A7B3792D6175A3261311B8
+NextIV = 00000030000000000000000000000002
+
+Cipher = AES-128-GcM
+Key = 00000000000000000000000000000000
+IV = 000000000000000000000000
+AAD =
+Tag = ab6e47d42cec13bdf53a67b21257bddf
+Plaintext = 00000000000000000000000000000000
+Ciphertext = 0388dace60b6a392f328c2b971b2fe78
+NextIV = 000000000000000000000000
+
diff --git a/test/recipes/30-test_evp_data/evpciph_aes_cts.txt b/test/recipes/30-test_evp_data/evpciph_aes_cts.txt
new file mode 100644
index 000000000000..c7503eaed86f
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_aes_cts.txt
@@ -0,0 +1,390 @@
+#
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+# Original test vectors were taken from https://www.ietf.org/rfc/rfc3962.txt for CS3
+# These have an IV of all zeros, for a 128 bit AES key.
+
+Title = AES CBC Test vectors
+
+#------------------------------------------------------
+# AES_CBC results for aligned block lengths. (Result should be the same as 32 byte CTS1 & CTS2)
+
+# 32 bytes input
+Cipher = AES-128-CBC
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c2047617527732043
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe58439312523a78662d5be7fcbcc98ebf5a8
+
+# 48 bytes input
+Cipher = AES-128-CBC
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe58439312523a78662d5be7fcbcc98ebf5a89dad8bbb96c4cdc03bc103e1a194bbd8
+
+# 64 bytes input
+Cipher = AES-128-CBC
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20616e6420776f6e746f6e20736f75702e
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe58439312523a78662d5be7fcbcc98ebf5a89dad8bbb96c4cdc03bc103e1a194bbd84807efe836ee89a526730dbc2f7bc840
+
+Title = AES CBC CTS1 Test vectors
+
+#------------------------------------------------------
+# Manually edited using the same inputs to also produce CS1 ciphertext
+# where aligned blocks are the same as CBC mode, and partial lengths
+# have the last 2 blocks swapped compared to CS3.
+
+# 17 bytes Input((Default is CS1 if CTSMode is not specified)
+Cipher = AES-128-CBC-CTS
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b652074686520
+Ciphertext = 97c6353568f2bf8cb4d8a580362da7ff7f
+NextIV = c6353568f2bf8cb4d8a580362da7ff7f
+
+# 31 bytes input
+Cipher = AES-128-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe5fc00783e0efdb2c1d445d4c8eff7ed22
+NextIV = fc00783e0efdb2c1d445d4c8eff7ed22
+
+# 32 bytes input
+Cipher = AES-128-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c2047617527732043
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe58439312523a78662d5be7fcbcc98ebf5a8
+NextIV = 39312523a78662d5be7fcbcc98ebf5a8
+
+# 47 bytes input
+Cipher = AES-128-CBC-CTS
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe58439312523a78662d5be7fcbcc98ebf5b3fffd940c16a18c1b5549d2f838029e
+NextIV = b3fffd940c16a18c1b5549d2f838029e
+
+# 64 bytes input (CS1 is equivalent to CBC when the last block in full)
+Cipher = AES-128-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20616e6420776f6e746f6e20736f75702e
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe58439312523a78662d5be7fcbcc98ebf5a89dad8bbb96c4cdc03bc103e1a194bbd84807efe836ee89a526730dbc2f7bc840
+NextIV = 4807efe836ee89a526730dbc2f7bc840
+
+#-------------------------------------------------------------------------------
+# Generated test values using an IV.
+
+# 47 bytes input
+Cipher = AES-128-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69
+IV =000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c
+Ciphertext = 5432a630742dee7beb70f9f1400ee6a0b557cfb581949a4bdf3bb67dedd472426da5c54a9990f5ae0b7825f51f0060
+
+# 127 bytes
+Cipher = AES-128-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20616e6420776f6e746f6e20736f75702e4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20616e6420776f6e746f6e20736f7570
+Ciphertext = 5432a630742dee7beb70f9f1400ee6a0b557cfb581949a4bdf3bb67dedd472b9fc50e4e7dacf9e3d94b6cc031f9997a22d2fea7e6ef4aba2b717b0fa3f150e5e86e46b9e51c6ea5091a92aa791ce826b2e4fbaaf0e0314939625434b9530ce56f299891a48d26bdc287f54b230340d652a4721bf0f082ede80b6399800a92f
+
+# 129 bytes
+Cipher = AES-128-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20616e6420776f6e746f6e20736f75702e4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20616e6420776f6e746f6e20736f75702e49
+Ciphertext = 5432a630742dee7beb70f9f1400ee6a0b557cfb581949a4bdf3bb67dedd472b9fc50e4e7dacf9e3d94b6cc031f9997a22d2fea7e6ef4aba2b717b0fa3f150e5e86e46b9e51c6ea5091a92aa791ce826b2e4fbaaf0e0314939625434b9530ce56f299891a48d26bdc287f54b230340d14fde9fd1098b9b1db788b5868a8d009eeef
+
+# 17 Bytes
+Cipher = AES-192-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69636869636b656e20
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b652074686520
+Ciphertext = e9de1b402de8f79f947cc6b5880588d9b6
+
+# 31 Bytes
+Cipher = AES-192-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69636869636b656e20
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320
+Ciphertext = e9de17d6248fb492bdea1fb2e09c8edea2b610546f3b1e1d231821e283e153
+
+# 32 Bytes
+Cipher = AES-192-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69636869636b656e20
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c2047617527732043
+Ciphertext = e9de17d6248fb492bdea1fb2e09c8e8e31d005cc9fea948fed1ba6308dad9dd1
+
+#------------------------------------------------------------------------------
+# Failure test
+
+# 15 bytes should fail for CS1
+Cipher = AES-128-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 0102030405060708090A0B0C0D0E0F
+Result = CIPHERUPDATE_ERROR
+
+# Original test vectors were taken from https://www.ietf.org/rfc/rfc3962.txt for CS3
+# These have an IV of all zeros, for a 128 bit AES key.
+
+Title = AES CBC CTS2 Test vectors
+
+#------------------------------------------------------
+# Manually edited using the same inputs to also produce CS2 ciphertext
+# where aligned blocks are the same as CBC mode, and partial lengths
+# are the same as CS3.
+
+# 17 bytes Input (For partial blocks the output should match CS3)
+Cipher = AES-128-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b652074686520
+Ciphertext = c6353568f2bf8cb4d8a580362da7ff7f97
+NextIV = c6353568f2bf8cb4d8a580362da7ff7f
+
+# 31 bytes input (For partial blocks the output should match CS3)
+Cipher = AES-128-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320
+Ciphertext = fc00783e0efdb2c1d445d4c8eff7ed2297687268d6ecccc0c07b25e25ecfe5
+NextIV = fc00783e0efdb2c1d445d4c8eff7ed22
+
+# 32 bytes input (Aligned blocks should match normal CBC mode)
+Cipher = AES-128-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c2047617527732043
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe58439312523a78662d5be7fcbcc98ebf5a8
+NextIV = 39312523a78662d5be7fcbcc98ebf5a8
+
+# 47 bytes input
+Cipher = AES-128-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe584b3fffd940c16a18c1b5549d2f838029e39312523a78662d5be7fcbcc98ebf5
+NextIV = b3fffd940c16a18c1b5549d2f838029e
+
+# 64 bytes input (CS2 is equivalent to CBC when the last block in full)
+Cipher = AES-128-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20616e6420776f6e746f6e20736f75702e
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe58439312523a78662d5be7fcbcc98ebf5a89dad8bbb96c4cdc03bc103e1a194bbd84807efe836ee89a526730dbc2f7bc840
+NextIV = 4807efe836ee89a526730dbc2f7bc840
+
+# Generated test values using an IV.
+
+# 17 Bytes
+Cipher = AES-192-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69636869636b656e20
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b652074686520
+Ciphertext = de1b402de8f79f947cc6b5880588d9b6e9
+
+# 31 Bytes
+Cipher = AES-192-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69636869636b656e20
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320
+Ciphertext = dea2b610546f3b1e1d231821e283e153e9de17d6248fb492bdea1fb2e09c8e
+
+# 32 Bytes
+Cipher = AES-192-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69636869636b656e20
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c2047617527732043
+Ciphertext = e9de17d6248fb492bdea1fb2e09c8e8e31d005cc9fea948fed1ba6308dad9dd1
+
+# Failure test - 15 bytes should fail for CS2
+Cipher = AES-128-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 0102030405060708090A0B0C0D0E0F
+Result = CIPHERUPDATE_ERROR
+
+
+Title = AES CBC CTS3 Test vectors
+
+# 17 bytes Input
+Cipher = AES-128-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b652074686520
+Ciphertext = c6353568f2bf8cb4d8a580362da7ff7f97
+NextIV = c6353568f2bf8cb4d8a580362da7ff7f
+
+# 31 bytes input
+Cipher = AES-128-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320
+Ciphertext = fc00783e0efdb2c1d445d4c8eff7ed2297687268d6ecccc0c07b25e25ecfe5
+NextIV = fc00783e0efdb2c1d445d4c8eff7ed22
+
+# 32 bytes input (CS3 always swaps the last 2 byte blocks - so it is not equivalent to CBC for a full block)
+Cipher = AES-128-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c2047617527732043
+Ciphertext = 39312523a78662d5be7fcbcc98ebf5a897687268d6ecccc0c07b25e25ecfe584
+NextIV = 39312523a78662d5be7fcbcc98ebf5a8
+
+# 47 bytes input
+Cipher = AES-128-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe584b3fffd940c16a18c1b5549d2f838029e39312523a78662d5be7fcbcc98ebf5
+NextIV = b3fffd940c16a18c1b5549d2f838029e
+
+# 48 bytes input
+Cipher = AES-128-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe5849dad8bbb96c4cdc03bc103e1a194bbd839312523a78662d5be7fcbcc98ebf5a8
+NextIV = 9dad8bbb96c4cdc03bc103e1a194bbd8
+
+# 64 bytes input (CS3 always swaps the last 2 byte blocks - so it is not equivalent to CBC for a full block)
+Cipher = AES-128-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c20616e6420776f6e746f6e20736f75702e
+Ciphertext = 97687268d6ecccc0c07b25e25ecfe58439312523a78662d5be7fcbcc98ebf5a84807efe836ee89a526730dbc2f7bc8409dad8bbb96c4cdc03bc103e1a194bbd8
+
+
+# Generated test values using an IV.
+# 47 bytes input
+Cipher = AES-128-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320436869636b656e2c20706c656173652c
+Ciphertext = 5432a630742dee7beb70f9f1400ee6a0426da5c54a9990f5ae0b7825f51f0060b557cfb581949a4bdf3bb67dedd472
+
+# 17 Bytes
+Cipher = AES-192-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69636869636b656e20
+IV =000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b652074686520
+Ciphertext = de1b402de8f79f947cc6b5880588d9b6e9
+
+# 31 Bytes
+Cipher = AES-192-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69636869636b656e20
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320
+Ciphertext = dea2b610546f3b1e1d231821e283e153e9de17d6248fb492bdea1fb2e09c8e
+
+# 32 Bytes
+Cipher = AES-192-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69636869636b656e20
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c2047617527732043
+Ciphertext = 31d005cc9fea948fed1ba6308dad9dd1e9de17d6248fb492bdea1fb2e09c8e8e
+
+# 17 Bytes
+Cipher = AES-256-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69636869636b656e207465726979616b69
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b652074686520
+Ciphertext = 6b5f5abc21c4d04156c73850da3bba29e9
+
+# 31 Bytes
+Cipher = AES-256-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69636869636b656e207465726979616b69
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c20476175277320
+Ciphertext = f22553af78ee4f468f02fbe6f0f2168ee954e79fae9310dc75b6070e1d6253
+
+# 32 Bytes
+Cipher = AES-256-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69636869636b656e207465726979616b69
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 4920776f756c64206c696b65207468652047656e6572616c2047617527732043
+Ciphertext = 2c0463982174df10baa9d8f782c5a5b3e954e79fae9310dc75b6070e1d625346
+
+# Failure tests
+# 15 bytes should fail for CS3
+Cipher = AES-128-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 0102030405060708090A0B0C0D0E0F
+Result = CIPHERUPDATE_ERROR
+
+# 16 bytes input
+Cipher = AES-128-CBC
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 0102030405060708090A0B0C0D0E0F00
+Ciphertext = 011ca8de3bd20ebc2f8701d56dcf768e
+
+# 16 bytes with CS3 should return the same as plain CBC mode.
+Cipher = AES-128-CBC-CTS
+CTSMode = CS1
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 0102030405060708090A0B0C0D0E0F00
+Ciphertext = 011ca8de3bd20ebc2f8701d56dcf768e
+
+Cipher = AES-128-CBC-CTS
+CTSMode = CS2
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 0102030405060708090A0B0C0D0E0F00
+Ciphertext = 011ca8de3bd20ebc2f8701d56dcf768e
+
+Cipher = AES-128-CBC-CTS
+CTSMode = CS3
+Key = 636869636b656e207465726979616b69
+IV = 00000000000000000000000000000000
+Plaintext = 0102030405060708090A0B0C0D0E0F00
+Ciphertext = 011ca8de3bd20ebc2f8701d56dcf768e
+
diff --git a/test/recipes/30-test_evp_data/evpciph_aes_ocb.txt b/test/recipes/30-test_evp_data/evpciph_aes_ocb.txt
new file mode 100644
index 000000000000..3dda513eb677
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_aes_ocb.txt
@@ -0,0 +1,259 @@
+#
+# Copyright 2001-2022 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 are ignored.
+
+Title = AES OCB Test vectors
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD =
+Tag = 197B9C3C441D3C83EAFB2BEF633B9182
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 0001020304050607
+Tag = 16DC76A46D47E1EAD537209E8A96D14E
+Plaintext = 0001020304050607
+Ciphertext = 92B657130A74B85A
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 0001020304050607
+Tag = 98B91552C8C009185044E30A6EB2FE21
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD =
+Tag = 971EFFCAE19AD4716F88E87B871FBEED
+Plaintext = 0001020304050607
+Ciphertext = 92B657130A74B85A
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F
+Tag = 776C9924D6723A1FC4524532AC3E5BEB
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = BEA5E8798DBE7110031C144DA0B26122
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F
+Tag = 7DDB8E6CEA6814866212509619B19CC6
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD =
+Tag = 13CC8B747807121A4CBB3E4BD6B456AF
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = BEA5E8798DBE7110031C144DA0B26122
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F1011121314151617
+Tag = 5FA94FC3F38820F1DC3F3D1FD4E55E1C
+Plaintext = 000102030405060708090A0B0C0D0E0F1011121314151617
+Ciphertext = BEA5E8798DBE7110031C144DA0B26122FCFCEE7A2A8D4D48
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F1011121314151617
+Tag = 282026DA3068BC9FA118681D559F10F6
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD =
+Tag = 6EF2F52587FDA0ED97DC7EEDE241DF68
+Plaintext = 000102030405060708090A0B0C0D0E0F1011121314151617
+Ciphertext = BEA5E8798DBE7110031C144DA0B26122FCFCEE7A2A8D4D48
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Tag = B2A040DD3BD5164372D76D7BB6824240
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Ciphertext = BEA5E8798DBE7110031C144DA0B26122CEAAB9B05DF771A657149D53773463CB
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Tag = E1E072633BADE51A60E85951D9C42A1B
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD =
+Tag = 4A3BAE824465CFDAF8C41FC50C7DF9D9
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Ciphertext = BEA5E8798DBE7110031C144DA0B26122CEAAB9B05DF771A657149D53773463CB
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = 659C623211DEEA0DE30D2C381879F4C8
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Ciphertext = BEA5E8798DBE7110031C144DA0B26122CEAAB9B05DF771A657149D53773463CB68C65778B058A635
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = 7AEB7A69A1687DD082CA27B0D9A37096
+Plaintext =
+Ciphertext =
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD =
+Tag = 060C8467F4ABAB5E8B3C2067A2E115DC
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Ciphertext = BEA5E8798DBE7110031C144DA0B26122CEAAB9B05DF771A657149D53773463CB68C65778B058A635
+
+#AES OCB Non standard test vectors - generated from reference implementation
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = 1b6c44f34e3abb3cbf8976e7
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Ciphertext = 09a4fd29de949d9a9aa9924248422097ad4883b4713e6c214ff6567ada08a96766fc4e2ee3e3a5a1
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B0C0D0E
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = 1ad62009901f40cba7cd7156f94a7324
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Ciphertext = 5e2fa7367ffbdb3938845cfd415fcc71ec79634eb31451609d27505f5e2978f43c44213d8fa441ee
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = C203F98CE28F7DAD3F31C021
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031
+Ciphertext = 09A4FD29DE949D9A9AA9924248422097AD4883B4713E6C214FF6567ADA08A967B2176C12F110DD441B7CAA3A509B13C822D6
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = 8346D7D47C5D893ED472F5AB
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F4041
+Ciphertext = 09A4FD29DE949D9A9AA9924248422097AD4883B4713E6C214FF6567ADA08A967B2176C12F110DD441B7CAA3A509B13C86A023AFCEE998BEE42028D44507B15F714FF
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = 5822A9A70FDF55D29D2984A6
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051
+Ciphertext = 09A4FD29DE949D9A9AA9924248422097AD4883B4713E6C214FF6567ADA08A967B2176C12F110DD441B7CAA3A509B13C86A023AFCEE998BEE42028D44507B15F77C528A1DE6406B519BCEE8FCB8294170634D
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = 81772B6741ABB4ECA9D2DEB2
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F6061
+Ciphertext = 09A4FD29DE949D9A9AA9924248422097AD4883B4713E6C214FF6567ADA08A967B2176C12F110DD441B7CAA3A509B13C86A023AFCEE998BEE42028D44507B15F77C528A1DE6406B519BCEE8FCB829417001E54E15A7576C4DF32366E0F439C7050FAA
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = 3E52A01D068DE85456DB03B7
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071
+Ciphertext = 09A4FD29DE949D9A9AA9924248422097AD4883B4713E6C214FF6567ADA08A967B2176C12F110DD441B7CAA3A509B13C86A023AFCEE998BEE42028D44507B15F77C528A1DE6406B519BCEE8FCB829417001E54E15A7576C4DF32366E0F439C7051CB4824B8114E9A720CBC1CE0185B156B486
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000102030405060708090A0B
+AAD = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+Tag = 3E52A01D068DE85456DB03B6
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071
+Ciphertext = 09A4FD29DE949D9A9AA9924248422097AD4883B4713E6C214FF6567ADA08A967B2176C12F110DD441B7CAA3A509B13C86A023AFCEE998BEE42028D44507B15F77C528A1DE6406B519BCEE8FCB829417001E54E15A7576C4DF32366E0F439C7051CB4824B8114E9A720CBC1CE0185B156B486
+Operation = DECRYPT
+Result = CIPHERFINAL_ERROR
+
+#Test vectors generated to validate aesni_ocb_encrypt on x86
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000000000001020304050607
+Tag = C14DFF7D62A13C4A3422456207453190
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B819333
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000000000001020304050607
+Tag = D47D84F6FF912C79B6A4223AB9BE2DB8
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F
+Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC204
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000000000001020304050607
+Tag = 41970D13737B7BD1B5FBF49ED4412CA5
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D
+Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000000000001020304050607
+Tag = BE0228651ED4E48A11BDED68D953F3A0
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D
+Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91EDB8681700FF30366F07AEDE8CEACC1F
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000000000001020304050607
+Tag = 17BC6E10B16E5FDC52836E7D589518C7
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D
+Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91EDB8681700FF30366F07AEDE8CEACC1F39BE69B91BC808FA7A193F7EEA43137B
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000000000001020304050607
+Tag = E84AAC18666116990A3A37B3A5FC55BD
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D
+Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91EDB8681700FF30366F07AEDE8CEACC1F39BE69B91BC808FA7A193F7EEA43137B11CF99263D693AEBDF8ADE1A1D838DED
+
+Cipher = aes-128-ocb
+Key = 000102030405060708090A0B0C0D0E0F
+IV = 000000000001020304050607
+Tag = 3E5EA7EE064FE83B313E28D411E91EAD
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D
+Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91EDB8681700FF30366F07AEDE8CEACC1F39BE69B91BC808FA7A193F7EEA43137B11CF99263D693AEBDF8ADE1A1D838DED48D9E09F452F8E6FBEB76A3DED47611C
diff --git a/test/recipes/30-test_evp_data/evpciph_aes_siv.txt b/test/recipes/30-test_evp_data/evpciph_aes_siv.txt
new file mode 100644
index 000000000000..ab7f2b6f6aa2
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_aes_siv.txt
@@ -0,0 +1,75 @@
+#
+# Copyright 2018-2023 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 are ignored.
+
+Title = RFC5297 AES-SIV
+
+Cipher = aes-128-siv
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+AAD = 101112131415161718191a1b1c1d1e1f2021222324252627
+Tag = 85632d07c6e8f37f950acd320a2ecc93
+Plaintext = 112233445566778899aabbccddee
+Ciphertext = 40c02b9690c4dc04daef7f6afe5c
+
+Cipher = aes-128-siv
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Tag = f1c5fdeac1f15a26779c1501f9fb7588
+Plaintext = 112233445566778899aabbccddee
+Ciphertext = 27e946c669088ab06da58c5c831c
+
+Cipher = aes-128-siv
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+AAD =
+Tag = d1022f5b3664e5a4dfaf90f85be6f28a
+Plaintext = 112233445566778899aabbccddee
+Ciphertext = b66cff6b8eca0b79f083b39a0901
+
+Cipher = aes-128-siv
+Key = 7f7e7d7c7b7a79787776757473727170404142434445464748494a4b4c4d4e4f
+AAD = 00112233445566778899aabbccddeeffdeaddadadeaddadaffeeddccbbaa99887766554433221100
+AAD = 102030405060708090a0
+AAD = 09f911029d74e35bd84156c5635688c0
+Tag = 7bdb6e3b432667eb06f4d14bff2fbd0f
+Plaintext = 7468697320697320736f6d6520706c61696e7465787420746f20656e6372797074207573696e67205349562d414553
+Ciphertext = cb900f2fddbe404326601965c889bf17dba77ceb094fa663b7a3f748ba8af829ea64ad544a272e9c485b62a3fd5c0d
+
+Cipher = aes-128-siv
+Key = 7f7e7d7c7b7a79787776757473727170404142434445464748494a4b4c4d4e4f
+AAD = 00112233445566778899aabbccddeeffdeaddadadeaddadaffeeddccbbaa99887766554433221100
+AAD =
+AAD = 09f911029d74e35bd84156c5635688c0
+Tag = 83ce6593a8fa67eb6fcd2819cedfc011
+Plaintext = 7468697320697320736f6d6520706c61696e7465787420746f20656e6372797074207573696e67205349562d414553
+Ciphertext = 30d937b42f71f71f93fc2d8d702d3eac8dc7651eefcd81120081ff29d626f97f3de17f2969b691c91b69b652bf3a6d
+
+Cipher = aes-128-siv
+Key = 7f7e7d7c7b7a79787776757473727170404142434445464748494a4b4c4d4e4f
+AAD =
+AAD = 00112233445566778899aabbccddeeffdeaddadadeaddadaffeeddccbbaa99887766554433221100
+AAD = 09f911029d74e35bd84156c5635688c0
+Tag = 77dd4a44f5a6b41302121ee7f378de25
+Plaintext = 7468697320697320736f6d6520706c61696e7465787420746f20656e6372797074207573696e67205349562d414553
+Ciphertext = 0fcd664c922464c88939d71fad7aefb864e501b0848a07d39201c1067a7288f3dadf0131a823a0bc3d588e8564a5fe
+
+Cipher = aes-192-siv
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0f0f1f2f3f4f5f6f7f8f9fafbfcfdfefffffefdfcfbfaf9f8f7f6f5f4f3f2f1f0
+AAD = 101112131415161718191a1b1c1d1e1f2021222324252627
+Tag = 89e869b93256785154f0963962fe0740
+Plaintext = 112233445566778899aabbccddee
+Ciphertext = eff356e42dec1f4febded36642f2
+
+Cipher = aes-256-siv
+Key = fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0f0f1f2f3f4f5f6f7f8f9fafbfcfdfefff0f1f2f3f4f5f6f7f8f9fafbfcfdfefffffefdfcfbfaf9f8f7f6f5f4f3f2f1f0
+AAD = 101112131415161718191a1b1c1d1e1f2021222324252627
+Tag = 724dfb2eaf94dbb19b0ba3a299a0801e
+Plaintext = 112233445566778899aabbccddee
+Ciphertext = f3b05a55498ec2552690b89810e4
diff --git a/test/recipes/30-test_evp_data/evpciph_aes_stitched.txt b/test/recipes/30-test_evp_data/evpciph_aes_stitched.txt
new file mode 100644
index 000000000000..ef2d1a27f98e
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_aes_stitched.txt
@@ -0,0 +1,126 @@
+Title = AES-128-CBC-HMAC-SHA1 test vectors
+
+Cipher = AES-128-CBC-HMAC-SHA1
+Key = feffe9928665731c6d6a8f9467308308
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803010050
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f
+Ciphertext = 18bd54842828fdc0ac5a3b459f32f0be305a77944b17f62fedd4442ae60a0b0a3e1c2c23c584c86877fbd9997b415959254ea06ef046dc2e1fdafe7950a77ba94494683e01a0c495dc223a2de73be147d3f2b4f8d4d1e35487059ddc688544a04dbacd1405a7b3871c3a2ab7c71c663d
+NextIV = 4dbacd1405a7b3871c3a2ab7c71c663d
+
+Cipher = AES-128-CBC-HMAC-SHA1
+Key = feffe9928665731c6d6a8f9467308308
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803010100
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Ciphertext = 18bd54842828fdc0ac5a3b459f32f0be305a77944b17f62fedd4442ae60a0b0a3e1c2c23c584c86877fbd9997b415959254ea06ef046dc2e1fdafe7950a77ba94494683e01a0c495dc223a2de73be1474bcdf0b104a89ca6d419254e8f602334158d188f748c5cf4b7473c7475b4cf6c099ac13859eb2c154cd9e82e18fa12ca302ce04e466ff983cde5e06235ec89ff3bd1ac175379dee12297331e242d4272d1f177a9430e4f440bedf011552ad8a9b056c21399116a0a588f4ee1f9ed6276c413062aa140f338546f6c095de3d0b76d4711d30e3938d2d55e6e15f8d2ad6cc451f6f0f7378591d1003e664d9a2eb424039091eb69a1430de10dacd919a054214f355d9e3c25e5fc77be1a10bdbf936a8396e50f3584396d2651e8080247ac
+NextIV = 6a8396e50f3584396d2651e8080247ac
+
+Cipher = AES-128-CBC-HMAC-SHA1
+Key = feffe9928665731c6d6a8f9467308308
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 000102030405060708090a0b0c0d0e0f
+TLSAAD = 90a1b2c3e4f50617280302010a
+TLSVersion = 0x0302
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Ciphertext = b83b533708bf535d0aa6e52980d53b78c3fbd8571251316bd3f79d6f08ffd302a264a758bcb00d1ee17b879a4db9ba04893e639a12df518fe1e6cad76fd368fc915e8d6c440a9b19d6296fa209152eab87943a51c2d3b3ce10df2731a0d0979c69795325841bfc1d1e0ae3f2eb736d35fa349a86bc14edfd82e3c2911440b1e9f8ebfc586cf1bfc9102b8964d1a3cc96b7845f087773e0792eae277cb4a779270a02568461e96c84aba8d836dc576ac06bc5a33f9b5d9b4df9abdd038b08a3c2ec09a36b6ea56a85fb40def07cacd154380517f479bb1c3fda3579fd30d8f64ab585edc9127b79c815c69c1fc4707a8d48bf8a1a4ed190596d9991692eb1b2e00d438c309fc883a89c71b10658b29c7bf23292fbd3f1c4e655b9dd81cf58d5ee
+NextIV = f23292fbd3f1c4e655b9dd81cf58d5ee
+
+Title = AES-256-CBC-HMAC-SHA1 test vectors
+
+Cipher = AES-256-CBC-HMAC-SHA1
+Key = 6cc028952fa7c1ee09fc78b7549ae04d79b54d40ec172333e3a4a2297b62afe5
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803010050
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f
+Ciphertext = 261cd0c88a4d4e6db7fc263257a9f6d0ce83c1ff5f2680dc57ffd8eefdbb9c00d3d507672d105a990b2b78509978625b9d93c2bd41e3fb721abd1496553c583c67dad9b662b3d58c8540e10ed9c5ed1a127c4b68b8b6f66251e17b22362aeb2b8f10d5fa36b8728c1ba5cf83b80a42ec
+NextIV = 8f10d5fa36b8728c1ba5cf83b80a42ec
+
+Cipher = AES-256-CBC-HMAC-SHA1
+Key = 6cc028952fa7c1ee09fc78b7549ae04d79b54d40ec172333e3a4a2297b62afe5
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803010100
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Ciphertext = 261cd0c88a4d4e6db7fc263257a9f6d0ce83c1ff5f2680dc57ffd8eefdbb9c00d3d507672d105a990b2b78509978625b9d93c2bd41e3fb721abd1496553c583c67dad9b662b3d58c8540e10ed9c5ed1a7f33ce9e9a41c30836651d73ee2c003af03a919eb41a6d70ef814e184e740f8a96221b924d9d025ef5e7150d4ca76921a025dd146fef87da738877313f11ec8f4c558b878c28ce6a9a5011d70f58c5dbd3412cf0a32154f5a4286958a5a50a86f15119835ceccf432601e4cc688cdd682ac9620500b60c0760bb93209859823778a7f2b5bab1af259bda13d84f952af9d2f07f500dadedc41a2b6a737a1296e0b2fb96ac4da4bf71fe2f0c4a1b6fc4ddcc015035678b9bc16bd2ac368e2aa93c192991cf31f8d41ff6e9dbcb2617958a
+NextIV = 192991cf31f8d41ff6e9dbcb2617958a
+
+Cipher = AES-256-CBC-HMAC-SHA1
+Key = 6cc028952fa7c1ee09fc78b7549ae04d79b54d40ec172333e3a4a2297b62afe5
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803020100
+TLSVersion = 0x0302
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Ciphertext = 261cd0c88a4d4e6db7fc263257a9f6d0ce83c1ff5f2680dc57ffd8eefdbb9c00d3d507672d105a990b2b78509978625b9d93c2bd41e3fb721abd1496553c583c67dad9b662b3d58c8540e10ed9c5ed1a7f33ce9e9a41c30836651d73ee2c003af03a919eb41a6d70ef814e184e740f8a96221b924d9d025ef5e7150d4ca76921a025dd146fef87da738877313f11ec8f4c558b878c28ce6a9a5011d70f58c5dbd3412cf0a32154f5a4286958a5a50a86f15119835ceccf432601e4cc688cdd682ac9620500b60c0760bb93209859823778a7f2b5bab1af259bda13d84f952af9d2f07f500dadedc41a2b6a737a1296e0b2fb96ac4da4bf71fe2f0c4a1b6fc4ddefa990f60fa2643df18624c374ab1123c6eb20cfb4fd466af6dc8b7158bfbffa
+NextIV = c6eb20cfb4fd466af6dc8b7158bfbffa
+Title = AES-128-CBC-HMAC-SHA256 test vectors
+
+Cipher = AES-128-CBC-HMAC-SHA256
+Key = feffe9928665731c6d6a8f9467308308
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803010050
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Ciphertext = 18bd54842828fdc0ac5a3b459f32f0be305a77944b17f62fedd4442ae60a0b0a3e1c2c23c584c86877fbd9997b415959254ea06ef046dc2e1fdafe7950a77ba94494683e01a0c495dc223a2de73be1475fa532f91d366b01aab2cd80bcdb36c3b9221886fb45c6b4a5d10c5f85b9ccabc8a394b1a360e99e37602fea04bef8a7
+NextIV = c8a394b1a360e99e37602fea04bef8a7
+
+Cipher = AES-128-CBC-HMAC-SHA256
+Key = feffe9928665731c6d6a8f9467308308
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803010100
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f
+Ciphertext = 18bd54842828fdc0ac5a3b459f32f0be305a77944b17f62fedd4442ae60a0b0a3e1c2c23c584c86877fbd9997b415959254ea06ef046dc2e1fdafe7950a77ba94494683e01a0c495dc223a2de73be1474bcdf0b104a89ca6d419254e8f602334158d188f748c5cf4b7473c7475b4cf6c099ac13859eb2c154cd9e82e18fa12ca302ce04e466ff983cde5e06235ec89ff3bd1ac175379dee12297331e242d4272d1f177a9430e4f440bedf011552ad8a9b056c21399116a0a588f4ee1f9ed6276c413062aa140f338546f6c095de3d0b76d4711d30e3938d2d55e6e15f8d2ad6cc451f6f0f7378591d1003e664d9a2eb424039091eb69a1430de10dacd919a0543c1aad8f7044cce703801c6f5a0e05e59b19527484eb48c80fac1ebdf242e0ad0a5d8c46731f434ff05d289367b03294
+NextIV = 0a5d8c46731f434ff05d289367b03294
+
+Cipher = AES-128-CBC-HMAC-SHA256
+Key = feffe9928665731c6d6a8f9467308308
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803020100
+TLSVersion = 0x0302
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f
+Ciphertext = 18bd54842828fdc0ac5a3b459f32f0be305a77944b17f62fedd4442ae60a0b0a3e1c2c23c584c86877fbd9997b415959254ea06ef046dc2e1fdafe7950a77ba94494683e01a0c495dc223a2de73be1474bcdf0b104a89ca6d419254e8f602334158d188f748c5cf4b7473c7475b4cf6c099ac13859eb2c154cd9e82e18fa12ca302ce04e466ff983cde5e06235ec89ff3bd1ac175379dee12297331e242d4272d1f177a9430e4f440bedf011552ad8a9b056c21399116a0a588f4ee1f9ed6276c413062aa140f338546f6c095de3d0b76d4711d30e3938d2d55e6e15f8d2ad6cc451f6f0f7378591d1003e664d9a2eb424039091eb69a1430de10dacd919a054c64e1c36b6c8a44e6464f6ee1eb074b04f5e0ddc25a4233734a46aa23fbbc282b3be457445a9f860b9a81ec1e183bf9d
+NextIV = b3be457445a9f860b9a81ec1e183bf9d
+
+Title = AES-256-CBC-HMAC-SHA256 test vectors
+
+Cipher = AES-256-CBC-HMAC-SHA256
+Key = 6cc028952fa7c1ee09fc78b7549ae04d79b54d40ec172333e3a4a2297b62afe5
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803010050
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Ciphertext = 261cd0c88a4d4e6db7fc263257a9f6d0ce83c1ff5f2680dc57ffd8eefdbb9c00d3d507672d105a990b2b78509978625b9d93c2bd41e3fb721abd1496553c583c67dad9b662b3d58c8540e10ed9c5ed1ab3870c36b5d6df802b6d1c233493b7ed073099db882aeba1f0e89c5b99760569e5e6a5da9de89a419611fbdf0fe66c73
+NextIV = e5e6a5da9de89a419611fbdf0fe66c73
+
+Cipher = AES-256-CBC-HMAC-SHA256
+Key = 6cc028952fa7c1ee09fc78b7549ae04d79b54d40ec172333e3a4a2297b62afe5
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803010100
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f
+Ciphertext = 261cd0c88a4d4e6db7fc263257a9f6d0ce83c1ff5f2680dc57ffd8eefdbb9c00d3d507672d105a990b2b78509978625b9d93c2bd41e3fb721abd1496553c583c67dad9b662b3d58c8540e10ed9c5ed1a7f33ce9e9a41c30836651d73ee2c003af03a919eb41a6d70ef814e184e740f8a96221b924d9d025ef5e7150d4ca76921a025dd146fef87da738877313f11ec8f4c558b878c28ce6a9a5011d70f58c5dbd3412cf0a32154f5a4286958a5a50a86f15119835ceccf432601e4cc688cdd682ac9620500b60c0760bb93209859823778a7f2b5bab1af259bda13d84f952af9d2f07f500dadedc41a2b6a737a1296e0b2fb96ac4da4bf71fe2f0c4a1b6fc4ddce4fd18473b999ffa2a8ad5e5856d2969d4f21fa16899b7af7d449a202651df30f56fd035ef961d046cd211ecf78e873
+NextIV = 0f56fd035ef961d046cd211ecf78e873
+
+Cipher = AES-256-CBC-HMAC-SHA256
+Key = 6cc028952fa7c1ee09fc78b7549ae04d79b54d40ec172333e3a4a2297b62afe5
+MACKey = cafebabefacedbaddecaf88801020304
+IV = 101112131415161718191a1b1c1d1e1f
+TLSAAD = 90a1b2c3e4f506172803020100
+TLSVersion = 0x0302
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f
+Ciphertext = 261cd0c88a4d4e6db7fc263257a9f6d0ce83c1ff5f2680dc57ffd8eefdbb9c00d3d507672d105a990b2b78509978625b9d93c2bd41e3fb721abd1496553c583c67dad9b662b3d58c8540e10ed9c5ed1a7f33ce9e9a41c30836651d73ee2c003af03a919eb41a6d70ef814e184e740f8a96221b924d9d025ef5e7150d4ca76921a025dd146fef87da738877313f11ec8f4c558b878c28ce6a9a5011d70f58c5dbd3412cf0a32154f5a4286958a5a50a86f15119835ceccf432601e4cc688cdd682ac9620500b60c0760bb93209859823778a7f2b5bab1af259bda13d84f952af9d2f07f500dadedc41a2b6a737a1296e0b2fb96ac4da4bf71fe2f0c4a1b6fc4dd251087e4c03d2e28c85a9b4a835ef166b48e5b7690f332a1d8db7bd9380221891f31ee82f4b8dd9ebf540cab583a0f33
+NextIV = 1f31ee82f4b8dd9ebf540cab583a0f33
diff --git a/test/recipes/30-test_evp_data/evpciph_aes_wrap.txt b/test/recipes/30-test_evp_data/evpciph_aes_wrap.txt
new file mode 100644
index 000000000000..4eb1ed1a3801
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_aes_wrap.txt
@@ -0,0 +1,174 @@
+#
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+# Cipher names id-aesXXX-wrap are to test aliases.
+
+# AES wrap tests from RFC3394
+Cipher = id-aes128-wrap
+Key = 000102030405060708090A0B0C0D0E0F
+Plaintext = 00112233445566778899AABBCCDDEEFF
+Ciphertext = 1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5
+
+Cipher = id-aes192-wrap
+Key = 000102030405060708090A0B0C0D0E0F1011121314151617
+Plaintext = 00112233445566778899AABBCCDDEEFF
+Ciphertext = 96778B25AE6CA435F92B5B97C050AED2468AB8A17AD84E5D
+
+Cipher = id-aes256-wrap
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Plaintext = 00112233445566778899AABBCCDDEEFF
+Ciphertext = 64E8C3F9CE0F5BA263E9777905818A2A93C8191E7D6E8AE7
+
+Cipher = id-aes192-wrap
+Key = 000102030405060708090A0B0C0D0E0F1011121314151617
+Plaintext = 00112233445566778899AABBCCDDEEFF0001020304050607
+Ciphertext = 031D33264E15D33268F24EC260743EDCE1C6C7DDEE725A936BA814915C6762D2
+
+Cipher = id-aes256-wrap
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Plaintext = 00112233445566778899AABBCCDDEEFF0001020304050607
+Ciphertext = A8F9BC1612C68B3FF6E6F4FBE30E71E4769C8B80A32CB8958CD5D17D6B254DA1
+
+# Testing strncasecmp
+Cipher = aes256-WRAP
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Plaintext = 00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F
+Ciphertext = 28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21
+
+Cipher = ID-aes256-WRAP
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Plaintext = 00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F
+Ciphertext = 28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21
+
+
+# Same as previous example but with invalid unwrap key: should be rejected
+# without returning any plaintext
+Cipher = id-aes256-wrap
+Operation = DECRYPT
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E00
+Plaintext = 00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F
+Ciphertext = 28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21
+Result = CIPHERUPDATE_ERROR
+
+# AES wrap tests from RFC5649
+Cipher = id-aes192-wrap-pad
+Key = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8
+Plaintext = c37b7e6492584340bed12207808941155068f738
+Ciphertext = 138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a
+
+Cipher = id-aes192-wrap-pad
+Key = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8
+Plaintext = 466f7250617369
+Ciphertext = afbeb0f07dfbf5419200f2ccb50bb24f
+
+# AES wrap tests from
+# https://csrc.nist.gov/CSRC/media/Projects/
+# Cryptographic-Algorithm-Validation-Program/documents/mac/kwtestvectors.zip
+# A small subset has been used.
+
+# KW_AD_128_inv
+Cipher = AES-128-WRAP-INV
+Operation = DECRYPT
+Key = 7aa9e9e3c6b2916b4b62ac06074d14e8
+Ciphertext = 110f6ba8d4aa2a24f0abfd2cd351ebb6cdfafb35941bbe33
+Plaintext = 77a44e843e1f85707cc7e149e5f873be
+
+Cipher = AES-128-WRAP-INV
+Operation = DECRYPT
+Key = accc4b014123f9e95d3c6f92d07da9fd
+Ciphertext = 020cc7c82b6b7cd2ff4d28186930305edce13d65cc36d8d1
+Result = CIPHERUPDATE_ERROR
+
+Cipher = AES-128-WRAP-INV
+Operation = DECRYPT
+Key = 68eceb881f8f34ccb6bebd4e149741ff
+Ciphertext = 67292ab62037d076734513943ac907994b6a45b74ed2349f009e2267dc95f13a01b0e2fa109b9b6a
+Plaintext = 2910c499dc41de663e7f349b26f00291537943fcc8845166cdd210368d5adf44
+
+Cipher = AES-128-WRAP-INV
+Operation = DECRYPT
+Key = f8f94a07506f4d1728f6bed6c89a9c5d
+Ciphertext = 85fe9d64465db07ec63062aeb4c9161558fabb01d6b9e787850831f9b3414a5cbd35023c63fd59626c64cb3c470d9b7d
+Plaintext = c248842911a3dbc5562b1fe0f3955c4da3fd74471062d074d9b972ce3a840f0cb63a768ed1c432b7
+
+# KW_AD_192_inv
+Cipher = AES-192-WRAP-INV
+Operation = DECRYPT
+Key = fd9f4c93416fe7cb53002a5b011a2d4695ec64460af59826
+Ciphertext = 5e25074c8d7e82f0224c151db4af874578d55dfa5cc98952
+Plaintext = 1097eb6e48232f5c5f15fb5d1c8b5f44
+
+# KW_AD_256_inv
+Cipher = AES-256-WRAP-INV
+Operation = DECRYPT
+Key = d660410f4c4eeb7b0f9dfb7b5dcd4eabac1cfcbb072b1825c96026f6a64dd7dd
+Ciphertext = 157629ebd041bf5b9f354bbda3a4906e7ec84cac6d7d7702
+Plaintext = 4142bea750ab0f332e9ea5185157af13
+
+# KW_AE_128_inv
+Cipher = AES-128-WRAP-INV
+Key = e88ba734ea243480a6129366753b58eb
+Plaintext = d140ac16a44c1c2b3f47037ea8898a3e
+Ciphertext = 600861ee14320006f0ae55c46d5e1ebf3303751df7f038df
+
+# KW_AE_192_inv
+Cipher = AES-192-WRAP-INV
+Key = 370c715135b44eb3773b1aff833bcd28b59aee866d4a36b3
+Plaintext = eae0f60f1cf33d5b75869e84c764a04e
+Ciphertext = ea4ba4add8add19950ca491d109ffa08f90312693055677a
+
+# KW_AE_256_inv
+Cipher = AES-256-WRAP-INV
+Key = de982f7c871f78e37462e2f48a62eecb2da81a10799c6ebf2bee8c786b624b0e
+Plaintext = ecafc437d9f1643c7645c2416c14c003
+Ciphertext = aec02ddb3f6de1f99103c6042dfc9001eb3cf56d9c2a11f7
+
+# KWP_AD_128_inv
+Cipher = AES-128-WRAP-PAD-INV
+Operation = DECRYPT
+Key = 7877f11e1a2d530a0b27274d4e6d7f2c
+Ciphertext = ea53d73d75f5f0642c64d4715d1c131a
+Plaintext = 52
+
+Cipher = AES-128-WRAP-PAD-INV
+Operation = DECRYPT
+Key = 983dc3acf84ca6522b26f818cd0cf64f
+Ciphertext = 441da28c430266c29e8413a5938089013c0e8251280ecddc
+Plaintext = f469d3232eed4d096f
+
+# KWP_AD_192_inv
+Cipher = AES-192-WRAP-PAD-INV
+Operation = DECRYPT
+Key = 427c6c0a2cc30bbe0cd9fc6b11c29f8cfe64df6ab0379433
+Ciphertext = f5dcb63193a377a526db98a852db6099
+Plaintext = 98
+
+# KWP_AD_256_inv
+Cipher = AES-256-WRAP-PAD-INV
+Operation = DECRYPT
+Key = 48658f36aa5e24621f86fa6db06487bd635b18ff87704431a1c42cd145115c51
+Ciphertext = 6990b3b115563ef6a0884a110a393ee4
+Plaintext = 16700199665ff161
+
+# KWP_AE_128_inv
+Cipher = AES-128-WRAP-PAD-INV
+Key = 1c321a356b0ee25e30de2d618c1facbe
+Plaintext = 42
+Ciphertext = 3ddf22da3080a1a5252574c76f833790
+
+# KWP_AE_192_inv
+Cipher = AES-192-WRAP-PAD-INV
+Key = fe3fe235bb36dcf03f01cbf32cc98a3abf10ab3d608d3b30
+Plaintext = 1d2b7fc29991bafaf7
+Ciphertext = c11afb3c0de263dfb9b672a5f81fe0b9acfe9c407691f332
+
+# KWP_AE_256_inv
+Cipher = AES-256-WRAP-PAD-INV
+Key = 148a3fa618a6998c30b9f0f67922354a3747f2fa2e4d2e0b7af9582d6f548fee
+Plaintext = 441125592acf9e5208dcd558a7ac0034d15530dbad7a2913963da0cbf60aa3
+Ciphertext = 23f26a9476829885055694062c89b86399e8d6125509c9e88bb0a5b5113f4bfc8d34a62cba3c9eee
diff --git a/test/recipes/30-test_evp_data/evpciph_aria.txt b/test/recipes/30-test_evp_data/evpciph_aria.txt
new file mode 100644
index 000000000000..e6c23804de07
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_aria.txt
@@ -0,0 +1,261 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = ARIA test vectors from RFC5794 (and others)
+
+Cipher = ARIA-128-ECB
+Key = 000102030405060708090a0b0c0d0e0f
+Plaintext = 00112233445566778899aabbccddeeff
+Ciphertext = d718fbd6ab644c739da95f3be6451778
+
+Cipher = ARIA-192-ECB
+Key = 000102030405060708090a0b0c0d0e0f1011121314151617
+Plaintext = 00112233445566778899aabbccddeeff
+Ciphertext = 26449c1805dbe7aa25a468ce263a9e79
+
+Cipher = ARIA-256-ECB
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Plaintext = 00112233445566778899aabbccddeeff
+Ciphertext = f92bd7c79fb72e2f2b8f80c1972d24fc
+
+# Additional ARIA mode vectors from http://210.104.33.10/ARIA/doc/ARIA-testvector-e.pdf
+Cipher = ARIA-128-ECB
+Key = 00112233445566778899aabbccddeeff
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = c6ecd08e22c30abdb215cf74e2075e6e29ccaac63448708d331b2f816c51b17d9e133d1528dbf0af5787c7f3a3f5c2bf6b6f345907a3055612ce072ff54de7d788424da6e8ccfe8172b391be499354165665ba7864917000a6eeb2ecb4a698edfc7887e7f556377614ab0a282293e6d884dbb84206cdb16ed1754e77a1f243fd086953f752cc1e46c7c794ae85537dcaec8dd721f55c93b6edfe2adea43873e8
+
+Cipher = ARIA-128-CBC
+Key = 00112233445566778899aabbccddeeff
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 49d61860b14909109cef0d22a9268134fadf9fb23151e9645fba75018bdb1538b53334634bbf7d4cd4b5377033060c155fe3948ca75de1031e1d85619e0ad61eb419a866b3c2dbfd10a4ed18b22149f75897f0b8668b0c1c542c687778835fb7cd46e45f85eaa7072437dd9fa6793d6f8d4ccefc4eb1ac641ac1bd30b18c6d64c49bca137eb21c2e04da62712ca2b4f540c57112c38791852cfac7a5d19ed83a
+NextIV = 40c57112c38791852cfac7a5d19ed83a
+
+Cipher = ARIA-128-CFB
+Key = 00112233445566778899aabbccddeeff
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 3720e53ba7d615383406b09f0a05a200c07c21e6370f413a5d132500a68285017c61b434c7b7ca9685a51071861e4d4bb873b599b479e2d573dddeafba89f812ac6a9e44d554078eb3be94839db4b33da3f59c063123a7ef6f20e10579fa4fd239100ca73b52d4fcafeadee73f139f78f9b7614c2b3b9dbe010f87db06a89a9435f79ce8121431371f4e87b984e0230c22a6dacb32fc42dcc6accef33285bf11
+NextIV = 22a6dacb32fc42dcc6accef33285bf11
+
+Cipher = ARIA-128-CFB8
+Key = 00112233445566778899aabbccddeeff
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 373c8f6a965599ec785cc8f8149f6c81b632ccb8e0c6eb6a9707ae52c59257a41f94701c1096933127a90195ed0c8e98690547572423bb45c3d70e4a18ee56b967c10e000ba4df5fba7c404134a343d8375d04b151d161ef83417fe1748447d30a6723c406733df7d18aa39a20752d2381942e244811bb97f72eae446b1815aa690cd1b1adcbd007c0088ecdc91cb2e2caf0e11e72459878137eea64ac62a9a1
+
+Cipher = ARIA-128-OFB
+Key = 00112233445566778899aabbccddeeff
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 3720e53ba7d615383406b09f0a05a2000063063f0560083483faeb041c8adecef30cf80cefb002a0d280759168ec01db3d49f61aced260bd43eec0a2731730eec6fa4f2304319cf8ccac2d7be7833e4f8ae6ce967012c1c6badc5d28e7e4144f6bf5cebe01253ee202afce4bc61f28dec069a6f16f6c8a7dd2afae44148f6ff4d0029d5c607b5fa6b8c8a6301cde5c7033565cd0b8f0974ab490b236197ba04a
+NextIV = 66030985743c5b86e1c5e763c4a67d97
+
+Cipher = ARIA-128-CTR
+Key = 00112233445566778899aabbccddeeff
+IV = 00000000000000000000000000000000
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = ac5d7de805a0bf1c57c854501af60fa11497e2a34519dea1569e91e5b5ccae2ff3bfa1bf975f4571f48be191613546c3911163c085f871f0e7ae5f2a085b81851c2a3ddf20ecb8fa51901aec8ee4ba32a35dab67bb72cd9140ad188a967ac0fbbdfa94ea6cce47dcf8525ab5a814cfeb2bb60ee2b126e2d9d847c1a9e96f9019e3e6a7fe40d3829afb73db1cc245646addb62d9b907baaafbe46a73dbc131d3d
+NextIV = 0000000000000000000000000000000a
+
+Cipher = ARIA-192-ECB
+Key = 00112233445566778899aabbccddeeff0011223344556677
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 8d1470625f59ebacb0e55b534b3e462b5f23d33bff78f46c3c15911f4a21809aaccad80b4bda915aa9dae6bcebe06a6c83f77fd5391acfe61de2f646b5d447edbfd5bb49b12fbb9145b227895a757b2af1f7188734863d7b8b6ede5a5b2f06a0a233c8523d2db778fb31b0e311f32700152f33861e9d040c83b5eb40cd88ea49975709dc629365a189f78a3ec40345fc6a5a307a8f9a4413091e007eca5645a0
+
+Cipher = ARIA-192-CBC
+Key = 00112233445566778899aabbccddeeff0011223344556677
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = afe6cf23974b533c672a826264ea785f4e4f7f780dc7f3f1e0962b80902386d514e9c3e77259de92dd1102ffab086c1ea52a71260db5920a83295c25320e421147ca45d532f327b856ea947cd2196ae2e040826548b4c891b0ed0ca6e714dbc4631998d548110d666b3d54c2a091955c6f05beb4f62309368696c9791fc4c551564a2637f194346ec45fbca6c72a5b4612e208d531d6c34cc5c64eac6bd0cf8c
+NextIV = 12e208d531d6c34cc5c64eac6bd0cf8c
+
+Cipher = ARIA-192-CFB
+Key = 00112233445566778899aabbccddeeff0011223344556677
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 4171f7192bf4495494d2736129640f5c4d87a9a213664c9448477c6ecc2013598d9766952dd8c3868f17e36ef66fd84bfa45d1593d2d6ee3ea2115047d710d4fb66187caa3a315b3c8ea2d313962edcfe5a3e2028d5ba9a09fd5c65c19d3440e477f0cab0628ec6902c73ee02f1afee9f80115be7b9df82d1e28228e28581a20560e195cbb9e2b327bf56fd2d0ae5502e42c13e9b4015d4da42dc859252e7da4
+NextIV = e42c13e9b4015d4da42dc859252e7da4
+
+Cipher = ARIA-192-CFB8
+Key = 00112233445566778899aabbccddeeff0011223344556677
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 411d3b4f57f705aa4d13c46e2cf426af7c8c916ed7923d889f0047bbf11471b6d54f8757ef519339105be3cb69babb976a57d5631fc23cc3051fe9d36e8b8e27a2b2c0c4d31928ccbf30ea8239b46ba1b77f6198e7ecd2ce27b35958148e826f06aaf385bd30362ff141583e7c1d8924d44d36a1133094074631e18adafa9d2e55de98f6895c89d4266ebd33f3d4be5153a96fa12132ece2e81e66e55baa7ade
+
+Cipher = ARIA-192-OFB
+Key = 00112233445566778899aabbccddeeff0011223344556677
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 4171f7192bf4495494d2736129640f5cc224d26d364b5a06ddde13d0f1e74faa846de354c63cda77469d1a2d425c47ff41734c71b3fa1fcdc11e0b2de22bfeed54898e233df652c75ae136e61de6524e62b3f806fb2e8e616eb410a1b9500537e327ffb04f19f7f82fde2b122100261f81b82723bf936be7beaaf3067d1c036001f1ade71422268d274d7dc6c6ae1970b27a5f2c2f39c1d241fe8cac5ccd74e9
+NextIV = e72f0a79e3f50d1e14abd9f98110a934
+
+Cipher = ARIA-192-CTR
+Key = 00112233445566778899aabbccddeeff0011223344556677
+IV = 00000000000000000000000000000000
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 08625ca8fe569c19ba7af3760a6ed1cef4d199263e999dde14082dbba7560b79a4c6b456b8707dce751f9854f18893dfdb3f4e5afa539733e6f1e70b98ba37891f8f81e95df8efc26c7ce043504cb18958b865e4e316cd2aa1c97f31bf23dc046ef326b95a692a191ba0f2a41c5fe9ae070f236ff7078e703b42666caafbdd20bad74ac4c20c0f46c7ca24c151716575c947da16c90cfe1bf217a41cfebe7531
+NextIV = 0000000000000000000000000000000a
+
+Cipher = ARIA-256-ECB
+Key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 58a875e6044ad7fffa4f58420f7f442d8e191016f28e79aefc01e204773280d7018e5f7a938ec30711719953bae86542cd7ebc752474c1a5f6eaaace2a7e29462ee7dfa5afdb84177ead95ccd4b4bb6e1ed17b9534cff0a5fc2941429cfee2ee49c7adbeb7e9d1b0d2a8531d942079596a27ed79f5b1dd13ecd604b07a48885a3afa0627a0e4e60a3c703af292f1baa77b702f16c54aa74bc727ea95c7468b00
+
+Cipher = ARIA-256-CBC
+Key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 523a8a806ae621f155fdd28dbc34e1ab7b9b42432ad8b2efb96e23b13f0a6e52f36185d50ad002c5f601bee5493f118b243ee2e313642bffc3902e7b2efd9a12fa682edd2d23c8b9c5f043c18b17c1ec4b5867918270fbec1027c19ed6af833da5d620994668ca22f599791d292dd6273b2959082aafb7a996167cce1eec5f0cfd15f610d87e2dda9ba68ce1260ca54b222491418374294e7909b1e8551cd8de
+NextIV = 222491418374294e7909b1e8551cd8de
+
+Cipher = ARIA-256-CFB
+Key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 26834705b0f2c0e2588d4a7f09009635f28bb93d8c31f870ec1e0bdb082b66fa402dd9c202be300c4517d196b14d4ce11dce97f7aaba54341b0d872cc9b63753a3e8556a14be6f7b3e27e3cfc39caf80f2a355aa50dc83c09c7b11828694f8e4aa726c528976b53f2c877f4991a3a8d28adb63bd751846ffb2350265e179d4990753ae8485ff9b4133ddad5875b84a90cbcfa62a045d726df71b6bda0eeca0be
+NextIV = cbcfa62a045d726df71b6bda0eeca0be
+
+Cipher = ARIA-256-CFB8
+Key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 26baa33651e1f66434fec88ef27fd2b9a79e246dd89a3ffa00e8bdb37155433e6c24bd0b87d9a85baa9f485ccb984f5ec24d6a3ef5e3c81396177f039cf580dfdb55d6e1c47a28921dfe369e12fd357b289ad3a5544e1c1bd616d454db9c5f91f603373f29d5b2ed1b4b51de80f28537bbd43d5e3b5dd071dc91153cbbe732dfc325821b06ed8acaae656dcf2da9f13e4f29db671476f1e644ff06d9b67d6bd4
+
+Cipher = ARIA-256-OFB
+Key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+IV = 0f1e2d3c4b5a69788796a5b4c3d2e1f0
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 26834705b0f2c0e2588d4a7f0900963584c256815c4292b59f8d3f966a75b52345b4f5f98c785d3f368a8d5ff89b7f950ceab3cd63773c2621d652b8ef98b4196afb2c2b30496bc5b7d9e7f9084f9d855f63a511751c8909e7a6deadbe0a67a4fb89383ca5d209c6f66f793fc471195c476fb9c1eab2ac91e680e454b4f3ed9a67fb52f09c29b965b23cfa6f3f6bbb2a86c6cdbaa2857bf2486f543231892a52
+NextIV = d39398ef6e49b73e1d3a0167ec54f78f
+
+Cipher = ARIA-256-CTR
+Key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+IV = 00000000000000000000000000000000
+Plaintext = 11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd
+Ciphertext = 30026c329666141721178b99c0a1f1b2f06940253f7b3089e2a30ea86aa3c88f5940f05ad7ee41d71347bb7261e348f18360473fdf7d4e7723bffb4411cc13f6cdd89f3bc7b9c768145022c7a74f14d7c305cd012a10f16050c23f1ae5c23f45998d13fbaa041e51619577e0772764896a5d4516d8ffceb3bf7e05f613edd9a60cdcedaff9cfcaf4e00d445a54334f73ab2cad944e51d266548e61c6eb0aa1cd
+NextIV = 0000000000000000000000000000000a
+
+Title = ARIA GCM test vectors from RFC8269
+
+Cipher = ARIA-128-GCM
+Key = e91e5e75da65554a48181f3846349562
+IV = 000020e8f5eb00000000315e
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = 5abace3f37f5a736f4be984bbffbedc1
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = 4d8a9a0675550c704b17d8c9ddc81a5cd6f7da34f2fe1b3db7cb3dfb9697102ea0f3c1fc2dbc873d44bceeae8e4442974ba21ff6789d3272613fb9631a7cf3f14bacbeb421633a90ffbe58c2fa6bdca534f10d0de0502ce1d531b6336e58878278531e5c22bc6c85bbd784d78d9e680aa19031aaf89101d669d7a3965c1f7e16229d7463e0535f4e253f5d18187d40b8ae0f564bd970b5e7e2adfb211e89a953
+
+Cipher = ARIA-256-GCM
+Key = 0c5ffd37a11edc42c325287fc0604f2e3e8cd5671a00fe3216aa5eb105783b54
+IV = 000020e8f5eb00000000315e
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = e210d6ced2cf430ff841472915e7ef48
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = 6f9e4bcbc8c85fc0128fb1e4a0a20cb9932ff74581f54fc013dd054b19f99371425b352d97d3f337b90b63d1b082adeeea9d2d7391897d591b985e55fb50cb5350cf7d38dc27dda127c078a149c8eb98083d66363a46e3726af217d3a00275ad5bf772c7610ea4c23006878f0ee69a8397703169a419303f40b72e4573714d19e2697df61e7c7252e5abc6bade876ac4961bfac4d5e867afca351a48aed52822
+
+Title = ARIA GCM self-generated test vectors
+
+Cipher = ARIA-128-GCM
+Key = e91e5e75da65554a48181f3846349562
+# Shorter than default IV
+IV = 0001020304
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = ebaa2645bb154542117ee46031aa176e
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = 1723ccfc0ed44a12520473cfeb63bc933cd450a943f5f1cba78e19d72f80cc102acc51f2459a06cf6435182b8ddd451f83e13479efe5ec7dfbf16229f4017920fb41457a9b6fe1a401b30b2f332d827ae2f86e962326927c1ed8bfedac1f7a00ddde63bd392a8f28a488ba5974689f8d15b9b1739fb50aae0ff244026ec72064003c621b33ffc8086b0a97eefb70604a2826f6499f6eb12d67a0da03fc8e1482
+
+Cipher = ARIA-128-GCM
+Key = e91e5e75da65554a48181f3846349562
+# Longer than default IV
+IV = 000102030405060708090a0b0c0d0e0f
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = 61f7f44c7da3c60195b29ae0b46051a4
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = 0d3e98fcaf7a2c4fe9198d66add90d113e5e0ff47598c40a4bf501960d935a4156c9a4d46c9358a608e10a16479a4247c9ab9bb4a02809e3eac3571b832590fe2ca3e2d545741e36282d96c041fc7d39a46ed60214c2c0ec70f27768dfea4f9563b5d5c2ac33b1368a78f2908f5daf942433fec6ab588f09e908e95cc8dfa85d1a0dfd5835dc14e148323230c63eedc99a9ce942214cb3768b97b821d613629f
+
+Cipher = ARIA-128-GCM
+Key = e91e5e75da65554a48181f3846349562
+# Extra long IV
+IV = 000102030405060708090a0b0c0d0e0f1011
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = c8b31ab6c2ddccab06b76af4e56e664e
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = 616a7bce24206501082cef7267c09a4affa54f8f82eb7fb2cdebdcaab4b6ab05c37e891c2d0fc90d15c5fb684247625c8bc0befad86896ae1c8f5a8506954caba4e13df0a0eb23853d4474e7f3b2c57bb398456a24d198e14566bce8a5f8d3bcdb12994d2fdc0f5cf19aeff990c1fe119e01f9fcc86757b1d43a9accf7b2f913c2208a46c1967f403867f89b46ffe96864c63f042265806ea5270e0dddd0e8dd
+
+
+Title = ARIA CCM test vectors from IETF draft-ietf-avtcore-aria-srtp-02
+
+# 16-byte Tag
+
+Cipher = ARIA-128-CCM
+Key = 974bee725d44fc3992267b284c3c6750
+IV = 000020e8f5eb00000000315e
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = 40f04b6467e300f6b336aedf9df4185b
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = 621e408a2e455505b39f704dcbac4307daabbd6d670abc4e42f2fd2fca263f094f4683e6fb0b10c5093d42b69dce0ba546520e7c4400975713f3bde93ef131160b9cbcd6df78a1502be7c6ea8d395b9ed0078819c3105c0ab92cb67b16ba51bb1f53508738bf7a37c9a905439b88b7af9d51a407916fdfea8d43bf253721846dc1671391225fc58d9d0693c8ade6a4ffb034ee6543dd4e651b7a084eae60f855
+
+Cipher = ARIA-256-CCM
+Key = 0c5ffd37a11edc42c325287fc0604f2e3e8cd5671a00fe3216aa5eb105783b54
+IV = 000020e8f5eb00000000315e
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = 87b6bd222c55365a9c7d0b215b77ea41
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = ff78128ee18ee3cb9fb0d20726a017ff67fbd09d3a4c38aa32f6d306d3fdda378e459b83ed005507449d6cd981a4c1e3ff4193870c276ef09b6317a01a2283206ae4b4be0d0b235422c8abb00122410656b75e1ffc7fb49c0d0c5d6169aa7623610579968037aee8e83fc26264ea866590fd620aa3c0a5f323d953aa7f8defb0d0d60ab5a9de44dbaf8eae74ea3ab5f30594154f405fd630aa4c4d5603efdfa1
+
+# 8-byte Tag
+
+Cipher = ARIA-128-CCM
+Key = 974bee725d44fc3992267b284c3c6750
+IV = 000020e8f5eb00000000315e
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = dd2282c93a67fe4b
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = 621e408a2e455505b39f704dcbac4307daabbd6d670abc4e42f2fd2fca263f094f4683e6fb0b10c5093d42b69dce0ba546520e7c4400975713f3bde93ef131160b9cbcd6df78a1502be7c6ea8d395b9ed0078819c3105c0ab92cb67b16ba51bb1f53508738bf7a37c9a905439b88b7af9d51a407916fdfea8d43bf253721846dc1671391225fc58d9d0693c8ade6a4ffb034ee6543dd4e651b7a084eae60f855
+
+Cipher = ARIA-256-CCM
+Key = 0c5ffd37a11edc42c325287fc0604f2e3e8cd5671a00fe3216aa5eb105783b54
+IV = 000020e8f5eb00000000315e
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = 828dc0088f99a7ef
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = ff78128ee18ee3cb9fb0d20726a017ff67fbd09d3a4c38aa32f6d306d3fdda378e459b83ed005507449d6cd981a4c1e3ff4193870c276ef09b6317a01a2283206ae4b4be0d0b235422c8abb00122410656b75e1ffc7fb49c0d0c5d6169aa7623610579968037aee8e83fc26264ea866590fd620aa3c0a5f323d953aa7f8defb0d0d60ab5a9de44dbaf8eae74ea3ab5f30594154f405fd630aa4c4d5603efdfa1
+
+# 12-byte Tag
+
+Cipher = ARIA-128-CCM
+Key = 974bee725d44fc3992267b284c3c6750
+IV = 000020e8f5eb00000000315e
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = 01f3dedd15238da5ebfb1590
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = 621e408a2e455505b39f704dcbac4307daabbd6d670abc4e42f2fd2fca263f094f4683e6fb0b10c5093d42b69dce0ba546520e7c4400975713f3bde93ef131160b9cbcd6df78a1502be7c6ea8d395b9ed0078819c3105c0ab92cb67b16ba51bb1f53508738bf7a37c9a905439b88b7af9d51a407916fdfea8d43bf253721846dc1671391225fc58d9d0693c8ade6a4ffb034ee6543dd4e651b7a084eae60f855
+
+Cipher = ARIA-256-CCM
+Key = 0c5ffd37a11edc42c325287fc0604f2e3e8cd5671a00fe3216aa5eb105783b54
+IV = 000020e8f5eb00000000315e
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = 3615b7f90a651de15da20fb6
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = ff78128ee18ee3cb9fb0d20726a017ff67fbd09d3a4c38aa32f6d306d3fdda378e459b83ed005507449d6cd981a4c1e3ff4193870c276ef09b6317a01a2283206ae4b4be0d0b235422c8abb00122410656b75e1ffc7fb49c0d0c5d6169aa7623610579968037aee8e83fc26264ea866590fd620aa3c0a5f323d953aa7f8defb0d0d60ab5a9de44dbaf8eae74ea3ab5f30594154f405fd630aa4c4d5603efdfa1
+
+# Test that the tag can be set after specifying AAD.
+Cipher = ARIA-256-CCM
+Key = 0c5ffd37a11edc42c325287fc0604f2e3e8cd5671a00fe3216aa5eb105783b54
+IV = 000020e8f5eb00000000315e
+AAD = 8008315ebf2e6fe020e8f5eb
+Tag = 3615b7f90a651de15da20fb6
+SetTagLate = TRUE
+Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
+Ciphertext = ff78128ee18ee3cb9fb0d20726a017ff67fbd09d3a4c38aa32f6d306d3fdda378e459b83ed005507449d6cd981a4c1e3ff4193870c276ef09b6317a01a2283206ae4b4be0d0b235422c8abb00122410656b75e1ffc7fb49c0d0c5d6169aa7623610579968037aee8e83fc26264ea866590fd620aa3c0a5f323d953aa7f8defb0d0d60ab5a9de44dbaf8eae74ea3ab5f30594154f405fd630aa4c4d5603efdfa1
diff --git a/test/recipes/30-test_evp_data/evpciph_bf.txt b/test/recipes/30-test_evp_data/evpciph_bf.txt
new file mode 100644
index 000000000000..5ff1e4e53b8e
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_bf.txt
@@ -0,0 +1,68 @@
+#
+# Copyright 2019-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
+
+
+Title = Self generated BF test vectors
+
+Availablein = legacy
+Cipher = BF-ECB
+Key = 000102030405060708090a0b0c0d0e0f
+Plaintext = 0f0e0c0d0b0a09080706050403020100
+Ciphertext = 079590e0010626685653b9b6c2a406e0
+
+#Bigger key
+Availablein = legacy
+Cipher = BF-ECB
+Key = 000102030405060708090a0b0c0d0e0f00000000
+Plaintext = 0f0e0c0d0b0a09080706050403020100
+Ciphertext = 7a0fe3734ad4785b49e59296b7861789
+
+Availablein = legacy
+Cipher = BF-CBC
+Key = 000102030405060708090a0b0c0d0e0f
+IV = 0101010101010101
+Plaintext = 0f0e0c0d0b0a09080706050403020100
+Ciphertext = 39c65006742b62a49f7a40ff69749c0a
+
+#Bigger key
+Availablein = legacy
+Cipher = BF-CBC
+Key = 000102030405060708090a0b0c0d0e0f00000000
+IV = 0101010101010101
+Plaintext = 0f0e0c0d0b0a09080706050403020100
+Ciphertext = 3a5cefdb91e56e7aab45e7ea562bd465
+
+Availablein = legacy
+Cipher = BF-OFB
+Key = 0001020304050607
+IV = 0101010101010101
+Plaintext = 0f0e0c0d0b0a09080706050403020100
+Ciphertext = 27be8331cdc52dc61724029d302b9358
+
+#Bigger key
+Availablein = legacy
+Cipher = BF-OFB
+Key = 000102030405060700000000
+IV = 0101010101010101
+Plaintext = 0f0e0c0d0b0a09080706050403020100
+Ciphertext = f108f229cc1cbe228aa3b2407979289a
+
+Availablein = legacy
+Cipher = BF-CFB
+Key = 0001020304050607
+IV = 0101010101010101
+Plaintext = 0f0e0c0d0b0a09080706050403020100
+Ciphertext = 27be8331cdc52dc675a93625f90f5db4
+
+#Bigger key
+Availablein = legacy
+Cipher = BF-CFB
+Key = 000102030405060700000000
+IV = 0101010101010101
+Plaintext = 0f0e0c0d0b0a09080706050403020100
+Ciphertext = f108f229cc1cbe2214f00c3a8611cb46
diff --git a/test/recipes/30-test_evp_data/evpciph_camellia.txt b/test/recipes/30-test_evp_data/evpciph_camellia.txt
new file mode 100644
index 000000000000..2f2771040764
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_camellia.txt
@@ -0,0 +1,686 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = Camellia tests from RFC3713
+
+# For all ECB encrypts and decrypts, the transformed sequence is
+# CAMELLIA-bits-ECB:key::plaintext:ciphertext:encdec
+Cipher = CAMELLIA-128-ECB
+Key = 0123456789abcdeffedcba9876543210
+Plaintext = 0123456789abcdeffedcba9876543210
+Ciphertext = 67673138549669730857065648eabe43
+
+Cipher = CAMELLIA-192-ECB
+Key = 0123456789abcdeffedcba98765432100011223344556677
+Plaintext = 0123456789abcdeffedcba9876543210
+Ciphertext = b4993401b3e996f84ee5cee7d79b09b9
+
+Cipher = CAMELLIA-256-ECB
+Key = 0123456789abcdeffedcba987654321000112233445566778899aabbccddeeff
+Plaintext = 0123456789abcdeffedcba9876543210
+Ciphertext = 9acc237dff16d76c20ef7c919e3a7509
+
+# ECB-CAMELLIA128.Encrypt
+Cipher = CAMELLIA-128-ECB
+Key = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 00112233445566778899AABBCCDDEEFF
+Ciphertext = 77CF412067AF8270613529149919546F
+
+Cipher = CAMELLIA-192-ECB
+Key = 000102030405060708090A0B0C0D0E0F1011121314151617
+Operation = ENCRYPT
+Plaintext = 00112233445566778899AABBCCDDEEFF
+Ciphertext = B22F3C36B72D31329EEE8ADDC2906C68
+
+Cipher = CAMELLIA-256-ECB
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Operation = ENCRYPT
+Plaintext = 00112233445566778899AABBCCDDEEFF
+Ciphertext = 2EDF1F3418D53B88841FC8985FB1ECF2
+
+
+# ECB-CAMELLIA128.Encrypt and ECB-CAMELLIA128.Decrypt
+Cipher = CAMELLIA-128-ECB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 432FC5DCD628115B7C388D770B270C96
+
+Cipher = CAMELLIA-128-ECB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 0BE1F14023782A22E8384C5ABB7FAB2B
+
+Cipher = CAMELLIA-128-ECB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = A0A1ABCD1893AB6FE0FE5B65DF5F8636
+
+Cipher = CAMELLIA-128-ECB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = E61925E0D5DFAA9BB29F815B3076E51A
+
+
+# ECB-CAMELLIA192.Encrypt and ECB-CAMELLIA192.Decrypt
+Cipher = CAMELLIA-192-ECB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = CCCC6C4E138B45848514D48D0D3439D3
+
+Cipher = CAMELLIA-192-ECB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 5713C62C14B2EC0F8393B6AFD6F5785A
+
+Cipher = CAMELLIA-192-ECB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = B40ED2B60EB54D09D030CF511FEEF366
+
+Cipher = CAMELLIA-192-ECB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 909DBD95799096748CB27357E73E1D26
+
+
+# ECB-CAMELLIA256.Encrypt and ECB-CAMELLIA256.Decrypt
+Cipher = CAMELLIA-256-ECB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = BEFD219B112FA00098919CD101C9CCFA
+
+Cipher = CAMELLIA-256-ECB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = C91D3A8F1AEA08A9386CF4B66C0169EA
+
+Cipher = CAMELLIA-256-ECB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = A623D711DC5F25A51BB8A80D56397D28
+
+Cipher = CAMELLIA-256-ECB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 7960109FB6DC42947FCFE59EA3C5EB6B
+
+
+# For all CBC encrypts and decrypts, the transformed sequence is
+# CAMELLIA-bits-CBC:key:IV/ciphertext':plaintext:ciphertext:encdec
+# CBC-CAMELLIA128.Encrypt and CBC-CAMELLIA128.Decrypt
+Cipher = CAMELLIA-128-CBC
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 1607CF494B36BBF00DAEB0B503C831AB
+NextIV = 1607cf494b36bbf00daeb0b503c831ab
+
+Cipher = CAMELLIA-128-CBC
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 1607CF494B36BBF00DAEB0B503C831AB
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = A2F2CF671629EF7840C5A5DFB5074887
+NextIV = a2f2cf671629ef7840c5a5dfb5074887
+
+Cipher = CAMELLIA-128-CBC
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = A2F2CF671629EF7840C5A5DFB5074887
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 0F06165008CF8B8B5A63586362543E54
+NextIV = 0f06165008cf8b8b5a63586362543e54
+
+Cipher = CAMELLIA-128-CBC
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 36A84CDAFD5F9A85ADA0F0A993D6D577
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 74C64268CDB8B8FAF5B34E8AF3732980
+NextIV = 74c64268cdb8b8faf5b34e8af3732980
+
+
+# CBC-CAMELLIA192.Encrypt and CBC-CAMELLIA192.Decrypt
+Cipher = CAMELLIA-192-CBC
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 2A4830AB5AC4A1A2405955FD2195CF93
+NextIV = 2a4830ab5ac4a1a2405955fd2195cf93
+
+Cipher = CAMELLIA-192-CBC
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 2A4830AB5AC4A1A2405955FD2195CF93
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 5D5A869BD14CE54264F892A6DD2EC3D5
+NextIV = 5d5a869bd14ce54264f892a6dd2ec3d5
+
+Cipher = CAMELLIA-192-CBC
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 5D5A869BD14CE54264F892A6DD2EC3D5
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 37D359C3349836D884E310ADDF68C449
+NextIV = 37d359c3349836d884e310addf68c449
+
+Cipher = CAMELLIA-192-CBC
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 37D359C3349836D884E310ADDF68C449
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 01FAAA930B4AB9916E9668E1428C6B08
+NextIV = 01faaa930b4ab9916e9668e1428c6b08
+
+
+# CBC-CAMELLIA256.Encrypt and CBC-CAMELLIA256.Decrypt
+Cipher = CAMELLIA-256-CBC
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 000102030405060708090A0B0C0D0E0F
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = E6CFA35FC02B134A4D2C0B6737AC3EDA
+NextIV = e6cfa35fc02b134a4d2c0b6737ac3eda
+
+Cipher = CAMELLIA-256-CBC
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = E6CFA35FC02B134A4D2C0B6737AC3EDA
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 36CBEB73BD504B4070B1B7DE2B21EB50
+NextIV = 36cbeb73bd504b4070b1b7de2b21eb50
+
+Cipher = CAMELLIA-256-CBC
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 36CBEB73BD504B4070B1B7DE2B21EB50
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = E31A6055297D96CA3330CDF1B1860A83
+NextIV = e31a6055297d96ca3330cdf1b1860a83
+
+Cipher = CAMELLIA-256-CBC
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = E31A6055297D96CA3330CDF1B1860A83
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 5D563F6D1CCCF236051C0C5C1C58F28F
+NextIV = 5d563f6d1cccf236051c0c5c1c58f28f
+
+
+# We don't support CFB{1,8}-CAMELLIAxxx.{En,De}crypt
+# For all CFB128 encrypts and decrypts, the transformed sequence is
+# CAMELLIA-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec
+# CFB128-CAMELLIA128.Encrypt
+Cipher = CAMELLIA-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 14F7646187817EB586599146B82BD719
+NextIV = 14f7646187817eb586599146b82bd719
+
+Cipher = CAMELLIA-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 14F7646187817EB586599146B82BD719
+Operation = ENCRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = A53D28BB82DF741103EA4F921A44880B
+NextIV = a53d28bb82df741103ea4f921a44880b
+
+Cipher = CAMELLIA-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = A53D28BB82DF741103EA4F921A44880B
+Operation = ENCRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 9C2157A664626D1DEF9EA420FDE69B96
+NextIV = 9c2157a664626d1def9ea420fde69b96
+
+Cipher = CAMELLIA-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 9C2157A664626D1DEF9EA420FDE69B96
+Operation = ENCRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 742A25F0542340C7BAEF24CA8482BB09
+NextIV = 742a25f0542340c7baef24ca8482bb09
+
+
+# CFB128-CAMELLIA128.Decrypt
+Cipher = CAMELLIA-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 14F7646187817EB586599146B82BD719
+NextIV = 14f7646187817eb586599146b82bd719
+
+Cipher = CAMELLIA-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 14F7646187817EB586599146B82BD719
+Operation = DECRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = A53D28BB82DF741103EA4F921A44880B
+NextIV = a53d28bb82df741103ea4f921a44880b
+
+Cipher = CAMELLIA-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = A53D28BB82DF741103EA4F921A44880B
+Operation = DECRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 9C2157A664626D1DEF9EA420FDE69B96
+NextIV = 9c2157a664626d1def9ea420fde69b96
+
+Cipher = CAMELLIA-128-CFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 9C2157A664626D1DEF9EA420FDE69B96
+Operation = DECRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 742A25F0542340C7BAEF24CA8482BB09
+NextIV = 742a25f0542340c7baef24ca8482bb09
+
+
+# CFB128-CAMELLIA192.Encrypt
+Cipher = CAMELLIA-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = C832BB9780677DAA82D9B6860DCD565E
+NextIV = c832bb9780677daa82d9b6860dcd565e
+
+Cipher = CAMELLIA-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = C832BB9780677DAA82D9B6860DCD565E
+Operation = ENCRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 86F8491627906D780C7A6D46EA331F98
+NextIV = 86f8491627906d780c7a6d46ea331f98
+
+Cipher = CAMELLIA-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 86F8491627906D780C7A6D46EA331F98
+Operation = ENCRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 69511CCE594CF710CB98BB63D7221F01
+NextIV = 69511cce594cf710cb98bb63d7221f01
+
+Cipher = CAMELLIA-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 69511CCE594CF710CB98BB63D7221F01
+Operation = ENCRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = D5B5378A3ABED55803F25565D8907B84
+NextIV = d5b5378a3abed55803f25565d8907b84
+
+
+# CFB128-CAMELLIA192.Decrypt
+Cipher = CAMELLIA-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = C832BB9780677DAA82D9B6860DCD565E
+NextIV = c832bb9780677daa82d9b6860dcd565e
+
+Cipher = CAMELLIA-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = C832BB9780677DAA82D9B6860DCD565E
+Operation = DECRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 86F8491627906D780C7A6D46EA331F98
+NextIV = 86f8491627906d780c7a6d46ea331f98
+
+Cipher = CAMELLIA-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 86F8491627906D780C7A6D46EA331F98
+Operation = DECRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 69511CCE594CF710CB98BB63D7221F01
+NextIV = 69511cce594cf710cb98bb63d7221f01
+
+Cipher = CAMELLIA-192-CFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 69511CCE594CF710CB98BB63D7221F01
+Operation = DECRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = D5B5378A3ABED55803F25565D8907B84
+NextIV = d5b5378a3abed55803f25565d8907b84
+
+
+# CFB128-CAMELLIA256.Encrypt
+Cipher = CAMELLIA-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = CF6107BB0CEA7D7FB1BD31F5E7B06C93
+NextIV = cf6107bb0cea7d7fb1bd31f5e7b06c93
+
+Cipher = CAMELLIA-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = CF6107BB0CEA7D7FB1BD31F5E7B06C93
+Operation = ENCRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 89BEDB4CCDD864EA11BA4CBE849B5E2B
+NextIV = 89bedb4ccdd864ea11ba4cbe849b5e2b
+
+Cipher = CAMELLIA-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 89BEDB4CCDD864EA11BA4CBE849B5E2B
+Operation = ENCRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 555FC3F34BDD2D54C62D9E3BF338C1C4
+NextIV = 555fc3f34bdd2d54c62d9e3bf338c1c4
+
+Cipher = CAMELLIA-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 555FC3F34BDD2D54C62D9E3BF338C1C4
+Operation = ENCRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 5953ADCE14DB8C7F39F1BD39F359BFFA
+NextIV = 5953adce14db8c7f39f1bd39f359bffa
+
+
+# CFB128-CAMELLIA256.Decrypt
+Cipher = CAMELLIA-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = CF6107BB0CEA7D7FB1BD31F5E7B06C93
+NextIV = cf6107bb0cea7d7fb1bd31f5e7b06c93
+
+Cipher = CAMELLIA-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = CF6107BB0CEA7D7FB1BD31F5E7B06C93
+Operation = DECRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 89BEDB4CCDD864EA11BA4CBE849B5E2B
+NextIV = 89bedb4ccdd864ea11ba4cbe849b5e2b
+
+Cipher = CAMELLIA-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 89BEDB4CCDD864EA11BA4CBE849B5E2B
+Operation = DECRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 555FC3F34BDD2D54C62D9E3BF338C1C4
+NextIV = 555fc3f34bdd2d54c62d9e3bf338c1c4
+
+Cipher = CAMELLIA-256-CFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 555FC3F34BDD2D54C62D9E3BF338C1C4
+Operation = DECRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 5953ADCE14DB8C7F39F1BD39F359BFFA
+NextIV = 5953adce14db8c7f39f1bd39f359bffa
+
+
+# For all OFB encrypts and decrypts, the transformed sequence is
+# CAMELLIA-bits-OFB:key:IV/output':plaintext:ciphertext:encdec
+# OFB-CAMELLIA128.Encrypt
+Cipher = CAMELLIA-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 14F7646187817EB586599146B82BD719
+NextIV = 7f36da83a9c1e1236f64ef57cbb8c033
+
+Cipher = CAMELLIA-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 50FE67CC996D32B6DA0937E99BAFEC60
+Operation = ENCRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 25623DB569CA51E01482649977E28D84
+NextIV = 8b4fb7e277c9fd7c8a350b35324d03d5
+
+Cipher = CAMELLIA-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = D9A4DADA0892239F6B8B3D7680E15674
+Operation = ENCRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = C776634A60729DC657D12B9FCA801E98
+NextIV = f7be7f0cc32e79d7b22aea86d08a4c77
+
+Cipher = CAMELLIA-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = A78819583F0308E7A6BF36B1386ABF23
+Operation = ENCRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = D776379BE0E50825E681DA1A4C980E8E
+NextIV = 21e913de3faa93324baa9b61aaf4399e
+
+
+# OFB-CAMELLIA128.Decrypt
+Cipher = CAMELLIA-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = 14F7646187817EB586599146B82BD719
+NextIV = 7f36da83a9c1e1236f64ef57cbb8c033
+
+Cipher = CAMELLIA-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = 50FE67CC996D32B6DA0937E99BAFEC60
+Operation = DECRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 25623DB569CA51E01482649977E28D84
+NextIV = 8b4fb7e277c9fd7c8a350b35324d03d5
+
+Cipher = CAMELLIA-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = D9A4DADA0892239F6B8B3D7680E15674
+Operation = DECRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = C776634A60729DC657D12B9FCA801E98
+NextIV = f7be7f0cc32e79d7b22aea86d08a4c77
+
+Cipher = CAMELLIA-128-OFB
+Key = 2B7E151628AED2A6ABF7158809CF4F3C
+IV = A78819583F0308E7A6BF36B1386ABF23
+Operation = DECRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = D776379BE0E50825E681DA1A4C980E8E
+NextIV = 21e913de3faa93324baa9b61aaf4399e
+
+
+# OFB-CAMELLIA192.Encrypt
+Cipher = CAMELLIA-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = C832BB9780677DAA82D9B6860DCD565E
+NextIV = a3f30575ae27e23c6be4c8977e5e4174
+
+Cipher = CAMELLIA-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = A609B38DF3B1133DDDFF2718BA09565E
+Operation = ENCRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 8ECEB7D0350D72C7F78562AEBDF99339
+NextIV = 20e33d872b0ede5b69320d02f8561d68
+
+Cipher = CAMELLIA-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 52EF01DA52602FE0975F78AC84BF8A50
+Operation = ENCRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = BDD62DBBB9700846C53B507F544696F0
+NextIV = 8d1e31fd1a2cec5720c091664e4cc41f
+
+Cipher = CAMELLIA-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = BD5286AC63AABD7EB067AC54B553F71D
+Operation = ENCRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = E28014E046B802F385C4C2E13EAD4A72
+NextIV = 141f30a599f799e428ef839ad8c17d62
+
+
+# OFB-CAMELLIA192.Decrypt
+Cipher = CAMELLIA-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = C832BB9780677DAA82D9B6860DCD565E
+NextIV = a3f30575ae27e23c6be4c8977e5e4174
+
+Cipher = CAMELLIA-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = A609B38DF3B1133DDDFF2718BA09565E
+Operation = DECRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 8ECEB7D0350D72C7F78562AEBDF99339
+NextIV = 20e33d872b0ede5b69320d02f8561d68
+
+Cipher = CAMELLIA-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = 52EF01DA52602FE0975F78AC84BF8A50
+Operation = DECRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = BDD62DBBB9700846C53B507F544696F0
+NextIV = 8d1e31fd1a2cec5720c091664e4cc41f
+
+Cipher = CAMELLIA-192-OFB
+Key = 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B
+IV = BD5286AC63AABD7EB067AC54B553F71D
+Operation = DECRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = E28014E046B802F385C4C2E13EAD4A72
+NextIV = 141f30a599f799e428ef839ad8c17d62
+
+
+# OFB-CAMELLIA256.Encrypt
+Cipher = CAMELLIA-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = CF6107BB0CEA7D7FB1BD31F5E7B06C93
+NextIV = a4a0b95922aae2e958804fe494237bb9
+
+Cipher = CAMELLIA-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = B7BF3A5DF43989DD97F0FA97EBCE2F4A
+Operation = ENCRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 127AD97E8E3994E4820027D7BA109368
+NextIV = bc575329903a38781cb7487bffbf1d39
+
+Cipher = CAMELLIA-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = E1C656305ED1A7A6563805746FE03EDC
+Operation = ENCRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 6BFF6265A6A6B7A535BC65A80B17214E
+NextIV = 5b377e2305fa53b4d047a4b1111d73a1
+
+Cipher = CAMELLIA-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 41635BE625B48AFC1666DD42A09D96E7
+Operation = ENCRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 0A4A0404E26AA78A27CB271E8BF3CF20
+NextIV = fcd520413d253c9d8ae066656d9ff830
+
+
+# OFB-CAMELLIA256.Decrypt
+Cipher = CAMELLIA-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 6BC1BEE22E409F96E93D7E117393172A
+Ciphertext = CF6107BB0CEA7D7FB1BD31F5E7B06C93
+NextIV = a4a0b95922aae2e958804fe494237bb9
+
+Cipher = CAMELLIA-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = B7BF3A5DF43989DD97F0FA97EBCE2F4A
+Operation = DECRYPT
+Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
+Ciphertext = 127AD97E8E3994E4820027D7BA109368
+NextIV = bc575329903a38781cb7487bffbf1d39
+
+Cipher = CAMELLIA-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = E1C656305ED1A7A6563805746FE03EDC
+Operation = DECRYPT
+Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
+Ciphertext = 6BFF6265A6A6B7A535BC65A80B17214E
+NextIV = 5b377e2305fa53b4d047a4b1111d73a1
+
+Cipher = CAMELLIA-256-OFB
+Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
+IV = 41635BE625B48AFC1666DD42A09D96E7
+Operation = DECRYPT
+Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
+Ciphertext = 0A4A0404E26AA78A27CB271E8BF3CF20
+NextIV = fcd520413d253c9d8ae066656d9ff830
+
+
+# Camellia test vectors from RFC5528
+Cipher = CAMELLIA-128-CTR
+Key = AE6852F8121067CC4BF7A5765577F39E
+IV = 00000030000000000000000000000001
+Operation = ENCRYPT
+Plaintext = 53696E676C6520626C6F636B206D7367
+Ciphertext = D09DC29A8214619A20877C76DB1F0B3F
+
+Cipher = CAMELLIA-128-CTR
+Key = 7E24067817FAE0D743D6CE1F32539163
+IV = 006CB6DBC0543B59DA48D90B00000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Ciphertext = DBF3C78DC08396D4DA7C907765BBCB442B8E8E0F31F0DCA72C7417E35360E048
+
+Cipher = CAMELLIA-128-CTR
+Key = 7691BE035E5020A8AC6E618529F9A0DC
+IV = 00E0017B27777F3F4A1786F000000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223
+Ciphertext = B19D1FCDCB75EB882F849CE24D85CF739CE64B2B5C9D73F14F2D5D9DCE9889CDDF508696
+
+Cipher = CAMELLIA-192-CTR
+Key = 16AF5B145FC9F579C175F93E3BFB0EED863D06CCFDB78515
+IV = 0000004836733C147D6D93CB00000001
+Operation = ENCRYPT
+Plaintext = 53696E676C6520626C6F636B206D7367
+Ciphertext = 2379399E8A8D2B2B16702FC78B9E9696
+
+Cipher = CAMELLIA-192-CTR
+Key = 7C5CB2401B3DC33C19E7340819E0F69C678C3DB8E6F6A91A
+IV = 0096B03B020C6EADC2CB500D00000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Ciphertext = 7DEF34F7A5D0E415674B7FFCAE67C75DD018B86FF23051E056392A99F35A4CED
+
+Cipher = CAMELLIA-192-CTR
+Key = 02BF391EE8ECB159B959617B0965279BF59B60A786D3E0FE
+IV = 0007BDFD5CBD60278DCC091200000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223
+Ciphertext = 5710E556E1487A20B5AC0E73F19E4E7876F37FDC91B1EF4D4DADE8E666A64D0ED557AB57
+
+Cipher = CAMELLIA-256-CTR
+Key = 776BEFF2851DB06F4C8A0542C8696F6C6A81AF1EEC96B4D37FC1D689E6C1C104
+IV = 00000060DB5672C97AA8F0B200000001
+Operation = ENCRYPT
+Plaintext = 53696E676C6520626C6F636B206D7367
+Ciphertext = 3401F9C8247EFFCEBD6994714C1BBB11
+
+Cipher = CAMELLIA-256-CTR
+Key = F6D66D6BD52D59BB0796365879EFF886C66DD51A5B6A99744B50590C87A23884
+IV = 00FAAC24C1585EF15A43D87500000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Ciphertext = D6C30392246F7808A83C2B22A8839E45E51CD48A1CDF406EBC9CC2D3AB834108
+
+Cipher = CAMELLIA-256-CTR
+Key = FF7A617CE69148E4F1726E2F43581DE2AA62D9F805532EDFF1EED687FB54153D
+IV = 001CC5B751A51D70A1C1114800000001
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223
+Ciphertext = A4DA23FCE6A5FFAA6D64AE9A0652A42CD161A34B65F9679F75C01F101F71276F15EF0D8D
diff --git a/test/recipes/30-test_evp_data/evpciph_camellia_cts.txt b/test/recipes/30-test_evp_data/evpciph_camellia_cts.txt
new file mode 100644
index 000000000000..4bc698e3ca4a
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_camellia_cts.txt
@@ -0,0 +1,141 @@
+#
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+Title = Camellia CTS tests from RFC6803
+
+# The encryption test vectors in RFC6803 specify the base_key,
+# not the derived encryption key.
+# The encryption key was manually derived using:
+# ke = KBKDF(mac = CMAC, mode = FEEDBACK, base_key,
+# salt = 0000000 || usage || AA,
+# seed = 00000000000000000000000000000000)
+# NOTE: that the usage was not specified in the test vectors,
+# but is listed here in https://www.rfc-editor.org/errata_search.php?rfc=6803
+#
+# e.g: openssl kdf -cipher CAMELLIA-128-CBC
+# -keylen 16
+# -kdfopt hexkey:1DC46A8D763F4F93742BCBA3387576C3
+# -kdfopt hexsalt:00000000AA
+# -kdfopt mode:FEEDBACK
+# -kdfopt hexseed:00000000000000000000000000000000
+# -mac CMAC
+# KBKDF
+#
+# The ciphertext result also contains a MAC result so this was also manually stripped from the test data.
+# The random confounder is also prepended to the plaintext.
+#
+
+# 128-bit Camellia key: 1DC46A8D763F4F93742BCBA3387576C3
+# Key usage: 0
+# Random confounder: B69822A19A6B09C0EBC8557D1F1B6C0A
+# Plaintext: (empty)
+Cipher = CAMELLIA-128-CBC-CTS
+CTSMode = CS3
+Key = E99B82B36C4AE8EA19E95DFA9EDE882C
+IV = 00000000000000000000000000000000
+Plaintext = B69822A19A6B09C0EBC8557D1F1B6C0A
+Ciphertext = C466F1871069921EDB7C6FDE244A52DB
+
+# 128-bit Camellia key: 5027BC231D0F3A9D23333F1CA6FDBE7C
+# Key usage: 1
+# Random confounder: 6F2FC3C2A166FD8898967A83DE9596D9
+# Plaintext: 1 (31)
+Cipher = CAMELLIA-128-CBC-CTS
+CTSMode = CS3
+Key = A7EDCD5397EA6D12B0AFF4CB8DAA57AD
+IV = 00000000000000000000000000000000
+Plaintext = 6F2FC3C2A166FD8898967A83DE9596D931
+Ciphertext = 842D21FD950311C0DD464A3F4BE8D6DA88
+
+# 128-bit Camellia key: A1BB61E805F9BA6DDE8FDBDDC05CDEA0
+# Key usage: 2
+# Random confounder: A5B4A71E077AEEF93C8763C18FDB1F10
+# Plaintext: 9 bytesss (392062797465737373)
+Cipher = CAMELLIA-128-CBC-CTS
+CTSMode = CS3
+Key = DDE42ECA7CD9863FC3CE89CBC94362D7
+IV = 00000000000000000000000000000000
+Plaintext = A5B4A71E077AEEF93C8763C18FDB1F10392062797465737373
+Ciphertext = 619FF072E36286FF0A28DEB3A352EC0D0EDF5C5160D663C901
+
+# 128-bit Camellia key: 2CA27A5FAF5532244506434E1CEF6676
+# Key usage: 3
+# Random confounder: 19FEE40D810C524B5B22F01874C693DA
+# Plaintext: 13 bytes byte (31332062797465732062797465)
+Cipher = CAMELLIA-128-CBC-CTS
+CTSMode = CS3
+Key = C3113A258590B9AEBF721B1AF6B0CBF8
+IV = 00000000000000000000000000000000
+Plaintext = 19FEE40D810C524B5B22F01874C693DA31332062797465732062797465
+Ciphertext = B8ECA3167AE6315512E59F98A7C500205E5F63FF3BB389AF1C41A21D64
+
+# 128-bit Camellia key: 7824F8C16F83FF354C6BF7515B973F43
+# Key usage: 4
+# Random confounder: CA7A7AB4BE192DABD603506DB19C39E2
+# Plaintext: 30 bytes bytes bytes bytes byt (333020627974657320627974657320627974657320627974657320627974)
+Cipher = CAMELLIA-128-CBC-CTS
+CTSMode = CS3
+Key = 8B07EED30149916AA20DB3F5CED8AFAD
+IV = 00000000000000000000000000000000
+Plaintext = CA7A7AB4BE192DABD603506DB19C39E2333020627974657320627974657320627974657320627974657320627974
+Ciphertext = A26A3905A4FFD5816B7B1E27380D08090C8EC1F304496E1ABDCD2BDCD1DFFC660989E117A713DDBB57A4146C1587
+
+# 256-bit Camellia key: B61C86CC4E5D2757545AD423399FB7031ECAB913CBB900BD7A3C6DD8BF92015B
+# Key usage: 0
+# Random confounder: 3CBBD2B45917941067F96599BB98926C
+# Plaintext: (empty)
+Cipher = CAMELLIA-256-CBC-CTS
+CTSMode = CS3
+Key = 6CCB3F25D8AE57F4E8F6CA474BDDEFF116CE131B3F71012E756D6B1E3F70A7F1
+IV = 00000000000000000000000000000000
+Plaintext = 3CBBD2B45917941067F96599BB98926C
+Ciphertext = 03886D03310B47A6D8F06D7B94D1DD83
+
+# 256-bit Camellia key: 1B97FE0A190E2021EB30753E1B6E1E77B0754B1D684610355864104963463833
+# Key usage: 1
+# Random confounder: DEF487FCEBE6DE6346D4DA4521BBA2D2
+# Plaintext: 1 (31)
+Cipher = CAMELLIA-256-CBC-CTS
+CTSMode = CS3
+Key = E93173AA01EB3C246231DAFC7802EE32AF24851D8C7387D18CB9B2C5B7F570B8
+IV = 00000000000000000000000000000000
+Plaintext = DEF487FCEBE6DE6346D4DA4521BBA2D231
+Ciphertext = 2C9C1570133C99BF6A34BC1B0212002FD1
+
+# 256-bit Camellia key: 32164C5B434D1D1538E4CFD9BE8040FE8C4AC7ACC4B93D3314D2133668147A05
+# Key usage: 2
+# Random confounder: AD4FF904D34E555384B14100FC465F88
+# Plaintext: 9 bytesss (392062797465737373)
+Cipher = CAMELLIA-256-CBC-CTS
+CTSMode = CS3
+Key = CDA2D39A9B243FFEB56E8D5F4BD528741ECB520C62123FB040B8418B15C7D70C
+IV = 00000000000000000000000000000000
+Plaintext = AD4FF904D34E555384B14100FC465F88392062797465737373
+Ciphertext = 9C6DE75F812DE7ED0D28B2963557A115640998275B0AF51527
+
+# 256-bit Camellia key: B038B132CD8E06612267FAB7170066D88AECCBA0B744BFC60DC89BCA182D0715
+# Key usage: 3
+# Random confounder: CF9BCA6DF1144E0C0AF9B8F34C90D514
+# Plaintext: 13 bytes byte (31332062797465732062797465)
+Cipher = CAMELLIA-256-CBC-CTS
+CTSMode = CS3
+Key = CD8A10E279DADDB6901EC30BDF9873250F6EFC6A77367D74DC3EE7F74BC7774E
+IV = 00000000000000000000000000000000
+Plaintext = CF9BCA6DF1144E0C0AF9B8F34C90D51431332062797465732062797465
+Ciphertext = EEEC85A9813CDC536772AB9B42DEFC5706F726E975DDE05A87EB5406EA
+
+# 256-bit Camellia key: CCFCD349BF4C6677E86E4B02B8EAB924A546AC731CF9BF6989B996E7D6BFBBA7
+# Key usage: 4
+# Random confounder: 644DEF38DA35007275878D216855E228
+# Plaintext: 30 bytes bytes bytes bytes byt (333020627974657320627974657320627974657320627974657320627974)
+Cipher = CAMELLIA-256-CBC-CTS
+CTSMode = CS3
+Key = 1D5147F34BB001A04A68A71346E7654E0223A60D90BC2B79B4D87956D47CD42A
+IV = 00000000000000000000000000000000
+Plaintext = 644DEF38DA35007275878D216855E228333020627974657320627974657320627974657320627974657320627974
+Ciphertext = 0E44680985855F2D1F1812529CA83BFD8E349DE6FD9ADA0BAAA048D68E265FEBF34AD1255A344999AD37146887A6
diff --git a/test/recipes/30-test_evp_data/evpciph_cast5.txt b/test/recipes/30-test_evp_data/evpciph_cast5.txt
new file mode 100644
index 000000000000..431982f706f7
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_cast5.txt
@@ -0,0 +1,448 @@
+#
+# Copyright 2019 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
+
+Title = CAST5 Test vectors (from https://github.com/pyca/cryptography)
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 1f8e4973953f3fb0bd6b16662e9a3c17
+IV = 2fe2b333ceda8f98
+Plaintext = 45cf12964fc824ab76616ae2f4bf0822
+Ciphertext = 327c198b9d0a59456a2194bd21fc3ff0
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 0700d603a1c514e46b6191ba430a3a0c
+IV = aad1583cd91365e3
+Plaintext = 068b25c7bfb1f8bdd4cfc908f69dffc5ddc726a197f0e5f720f730393279be91
+Ciphertext = f5ce00a3ba73e5a289789783c34787e11d27859beac26bb53dc732f03c80c548
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 3348aa51e9a45c2dbe33ccc47f96e8de
+IV = 19153c673160df2b
+Plaintext = 9b7cee827a26575afdbb7c7a329f887238052e3601a7917456ba61251c214763d5e1847a6ad5d54127a399ab07ee3599
+Ciphertext = 3c033e10fad0c4ce1e62e2a91488090947c5e0ac0dd5f55c1b15b0b02fa7cfd20f61b02d67ea9f326c5475447dee69bf
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = b7f3c9576e12dd0db63e8f8fac2b9a39
+IV = c80f095d8bb1a060
+Plaintext = 9ac19954ce1319b354d3220460f71c1e373f1cd336240881160cfde46ebfed2e791e8d5a1a136ebd1dc469dec00c4187722b841cdabcb22c1be8a14657da200e
+Ciphertext = 219e4a20d3fcffa9c5d3b74038f2147ff3baf9c828bff134dfc1655ddec01120dc59069682e1fea35ce4dc2d1ee7e15929bdcaeddb0e2894fd21e1a95cff853f
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = b6f9afbfe5a1562bba1368fc72ac9d9c
+IV = 3f9d5ebe250ee7ce
+Plaintext = db397ec22718dbffb9c9d13de0efcd4611bf792be4fce0dc5f25d4f577ed8cdbd4eb9208d593dda3d4653954ab64f05676caa3ce9bfa795b08b67ceebc923fdc89a8c431188e9e482d8553982cf304d1
+Ciphertext = 9a489a104fece86017fa9e8bfa66322a07c940dc2709f4ed7aa85343449a774880b977eb3a95c797593f38a52009095f4792ce957ec95866739ab7ee520938d11f6601036691aea9a83948c00c1a2fb3
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = bbe7b7ba07124ff1ae7c3416fe8b465e
+IV = 7f65b5ee3630bed6
+Plaintext = 2aad0c2c4306568bad7447460fd3dac054346d26feddbc9abd9110914011b4794be2a9a00a519a51a5b5124014f4ed2735480db21b434e99a911bb0b60fe0253763725b628d5739a5117b7ee3aefafc5b4c1bf446467e7bf5f78f31ff7caf187
+Ciphertext = 3cc5a34d2592daa6d8bda161a349b52a1dcb8899654bb15ff295ab05ff666c1b31184801033e374e1f0f4f08f745a9af688f3d869ca8362d7e3b34c6dca259a3c14033f1c4f15c106552ac2cd3e953234bafefac74df0cb8757ab1d46e4b8914
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 89a553730433f7e6d67d16d373bd5360
+IV = f724558db3433a52
+Plaintext = 807bc4ea684eedcfdcca30180680b0f1ae2814f35f36d053c5aea6595a386c1442770f4d7297d8b91825ee7237241da8925dd594ccf676aecd46ca2068e8d37a3a0ec8a7d5185a201e663b5ff36ae197110188a23503763b8218826d23ced74b31e9f6e2d7fbfa6cb43420c7807a8625
+Ciphertext = ab1d2225e541a27a00e8e7a698f12d5044eac004b5c1362dd9df4c484ec1e7f22be8946f5a1c8450c5a7e3fd319af94c17dd3472ec8c0a52a5cbcb112bb5fb467511afb58e9f4b5fdbbb0c64f39b31c968582d06b980f05dac45ee0f6b30144bf41aa1582db3d669c0061eba42f591f1
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = c491ca31f91708458e29a925ec558d78
+IV = 9ef934946e5cd0ae
+Plaintext = cb6a787e0dec56f9a165957f81af336ca6b40785d9e94093c6190e5152649f882e874d79ac5e167bd2a74ce5ae088d2ee854f6539e0a94796b1e1bd4c9fcdbc79acbef4d01eeb89776d18af71ae2a4fc47dd66df6c4dbe1d1850e466549a47b636bcc7c2b3a62495b56bb67b6d455f1eebd9bfefecbca6c7f335cfce9b45cb9d
+Ciphertext = 37fbb13aedae35151641acb2db6df6044e7c860320a1e9ee4977ba9ebbecbcaa995ea76cdbb9d3ea017ff3d9d650befdb4b35c98ae444b762432b5fd2a172b30ed879044bd870f9bd9f1e90aa89fe08b8c39b06890e816f5d21069f591cc2f656694d1acb0de7273f5c16a6dd69d3c77789b11b7450eb524d9f98640ac855f8a
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = f6e87d71b0104d6eb06a68dc6a71f498
+IV = 1c245f26195b76eb
+Plaintext = f82bef3c73a6f7f80db285726d691db6bf55eec25a859d3ba0e0445f26b9bb3b16a3161ed1866e4dd8f2e5f8ecb4e46d74a7a78c20cdfc7bcc9e479ba7a0caba9438238ad0c01651d5d98de37f03ddce6e6b4bd4ab03cf9e8ed818aedfa1cf963b932067b97d776dce1087196e7e913f7448e38244509f0caf36bd8217e15336d35c149fd4e41707893fdb84014f8729
+Ciphertext = 2edff012cd4cb447f58c00391c86e187d0d9a70b800f12bcb0436e423c21adb7eafcae0833b74228e01784b02de552e10a89fbd272b89aadf4316b9fe10917e8fb9c959fb00b920c1bce4517cd37458ef3f51a6c27366339051adc47147f375b5ec63d84c1e5cc386babc24fc4ee4dec507c5e9f5d6631adad59b7464b4950abf2c7af2f9599b2a371616469a55e0ffb
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 2c14413751c31e2730570ba3361c786b
+IV = 1dbbeb2f19abb448
+Plaintext = 40d930f9a05334d9816fe204999c3f82a03f6a0457a8c475c94553d1d116693adc618049f0a769a2eed6a6cb14c0143ec5cccdbc8dec4ce560cfd206225709326d4de7948e54d603d01b12d7fed752fb23f1aa4494fbb00130e9ded4e77e37c079042d828040c325b1a5efd15fc842e44014ca4374bf38f3c3fc3ee327733b0c8aee1abcd055772f18dc04603f7b2c1ea69ff662361f2be0a171bbdcea1e5d3f
+Ciphertext = cc16f1685b309c380fa0a6556a604040a3e6eb326f1884b7c5d85d5bfdf925c96d0621e69b1f601463d23efdee60d531211c638ffca1134ddd70fa21d65b30fb462af045d32547acafbfb9c9c40e5e66bbcd23abf7adb3239da666a220a6b79dc335c2adb11559de7077348af3dd551374d95a800bed393cc3d12b220eca16564100373f6d4c422e1f94d6f82b38431a7bb8e13750e7f09afdf6677fb9cb2077
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 6a7082cf8cda13eff48c8158dda206ae
+IV = bd4172934078c201
+Plaintext = 940bc76d61e2c49dddd5df7f37fcf105
+Ciphertext = 431c2991b6388feb25ac695408c0b5ab
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 625eefa18a4756454e218d8bfed56e36
+IV = 73d9d0e27c2ec568
+Plaintext = 360dc1896ce601dfb2a949250067aad96737847a4580ede2654a329b842fe81e
+Ciphertext = 6da475bb7ca9345d9d321c2e523a4c42f281df4529264da2e95d3616037a8b7a
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = fd6e0b954ae2e3b723d6c9fcae6ab09b
+IV = f08b65c9f4dd9500
+Plaintext = a206385945b21f812a9475f47fddbb7fbdda958a8d14c0dbcdaec36e8b28f1f6ececa1ceae4ce17721d162c1d42a66c1
+Ciphertext = ca71fa129c94f5f67ad8928b70b788b4d621fef07aead8ae5aecbfc9027651bf1888cc4459627ff8c7a5383f56f95b87
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 7b1ab9144b0239315cd5eec6c75663bd
+IV = 0b1e74f45c17ff30
+Plaintext = b968aeb199ad6b3c8e01f26c2edad444538c78bfa36ed68ca76123b8cdce615a01f6112bb80bfc3f17490578fb1f909a52e162637b062db04efee291a1f1af60
+Ciphertext = 5570f2e5fc0390d718adbed7e3ef74bf390317936846438190e9cc8424ba6c6f026ba29a6980a15fd090a8b6ee4a182e3de0817862b05b9cf2202ed6421fe0b6
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 36466b6bd25ea3857ea42f0cac1919b1
+IV = 7186fb6bdfa98a16
+Plaintext = 999983467c47bb1d66d7327ab5c58f61ddb09b93bd2460cb78cbc12b5fa1ea0c5f759ccc5e478697687012ff4673f6e61eecaeda0ccad2d674d3098c7d17f887b62b56f56b03b4d055bf3a4460e83efa
+Ciphertext = 551db27bab09919fbb3f257080c1972e4297a37cb5c77b14c2622a476914b95e726b0814172e3189bf3b93adef6ef8eedddd2917793e04f4ba0d57503f426503d624f65d0b1e8b9f62d2bf08c752c90c
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 89373ee6e28397640d5082eed4123239
+IV = 1a74d7c859672c80
+Plaintext = 45efd00daa4cdc8273ef785cae9e944a7664a2391e1e2c449f475acec0124bbc22944331678617408a1702917971f4654310ffb9229bec6173715ae512d37f93aaa6abf009f7e30d65669d1db0366b5bce4c7b00f871014f5753744a1878dc57
+Ciphertext = cb373a6d2f2463b81b4bfece800c6a0d1afebbf5dff76c67cab44844b6c2569c59770f569efa6dd26d74aa1f24999edcfb979db7a34a4155367dab091d9306c4a89acf932d442bb4ca70bef3b6c0866fc79f29d24af40e1e5f9626d13f752fa8
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = bab0cceddc0abd63e3f82e9fbff7b8aa
+IV = 68b9140f300490c5
+Plaintext = c5585ff215bbb73ba5393440852fb199436de0d15e55c631f877670aa3eda9f672eb1f876f09544e63558436b8928000db2f02a5ad90f95b05ac4cf49e198e617e7678480fdf0efacc6aae691271e6cdd3541ebf719a1ccaedb24e2f80f92455dd5910cb5086b0960a3942ec182dcbd7
+Ciphertext = 3580a9b62d3ac4798ad351a53efdc98b5f4e2eb04e19d0328ee0931a0647172cb9596ff7441c78625fcccfa1c0e579c811142441253a169914b3435f2e4d47ccca4151d6d0c9399071e23879cb5f355659bdca594c9c59039c9ec90f87bfed3c830d624298681e5523d537ab58a0f340
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 9c702898efa44557b29ed283f5bc0293
+IV = cec6e1b82e8b2a59
+Plaintext = 1d1f8d81bdc3e2c7cb057f408e6450000c5aaed3260ff1e87fbb6f324df6887ffd8f78d7e2a04c9ed9deda9d64482d2b002f4a2b78d8b4f691875c8295d4a64b22257ceaf713ed2f4b92530d7ad7151d629acda882b4829577a43990b0948c1149c22fe4273656d1b08833930e8b06709a94579a78fc220f7057bbc1fa9f6563
+Ciphertext = be790efc9fb2fd205402cb355ecf881ee7dc7d4cf19441374c37c3cb4fedd6a1996a703bc42b88c2c93adb0628b39483cc8f6e26a1f1fbcef685f6c4640b85922540ae5c263428e531847f7fc5cd8c8ed069b4dc3c0f23f89edebaee567c4268cb78710803b263832ef74259885470bbee6fe6f1997f84fb88dbe17860b52dce
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 5674636dbdb38f705f0b08c372ef4785
+IV = 3f20ce0509b57420
+Plaintext = 6d40fd2f908f48ce19241b6b278b1b1676dffd4a97ce9f8a1574c33bc59237deb536bee376fd6c381e6987700e39283aa111cf1a59f26fae6fb6700bf012646a2ab80239bf5e1632329043aa87d7911978b36523a2bc0bed9a9737ccf7a00baa2f3822b4e9e742e168e7069290705fed2eb63aa044b78f97dd33a8d6b24741ec1fd8c8db79d93b884e762dba0f406961
+Ciphertext = b1793ca5c3b6ad612d5616841d9c281ed4ba2a8355caffb122184cb01f18102c5b0837d316e76dbcd93b70fa3dc6b741aa1262f976afa5807832f87e77156a6c9eadf2b986d3cd29a6452948ad818d2c864faf352d0002e2b824de9a00dc230cb530fb6b19195aeae9d2f6b032bff28f5cf483f7835310f880afa6d9210666b6c2c121a51abc86cbe9468ba423944409
+
+Availablein = legacy
+Cipher = CAST5-CBC
+Key = 97a1025529b9925e25bbe78770ca2f99
+IV = d4b4eab92aa9637e
+Plaintext = e8b89150d8438bf5b17449d6ed26bd72127e10e4aa57cad85283e8359e089208e84921649f5b60ea21f7867cbc9620560c4c6238db021216db453c9943f1f1a60546173daef2557c3cdd855031b353d4bf176f28439e48785c37d38f270aa4a6faad2baabcb0c0b2d1dd5322937498ce803ba1148440a52e227ddba4872fe4d81d2d76a939d24755adb8a7b8452ceed2d179e1a5848f316f5c016300a390bfa7
+Ciphertext = 78b56a69ffcb77d3a848ad2ccb9b67263d9d9668936b040d5a0fb514013fa4dc012f7ccb54c0d30b764d96ff5edf70d4c90d95015c2555656581bfbf7c13a86b8254ffd177246938cb706abdb9ff6e752a763e36c6102a124683695dba4bab2bd8fc2100b99734f2bf4de56c0a3f3b701593b9efdbcb1cc4bc220d2ecbbf5d8a5a13aab7fd35d923cefc87e5a97587e5903a5af0b00e3d747435ad495c55155b
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = 085b8af6788fa6bc1a0b47dcf50fbd35
+IV = 58cb2b12bb52c6f1
+Plaintext = 4b5a872260293312eea1a570fd39c788
+Ciphertext = 453d00cb11e1cf4e52ee11c1c22cd6b6
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = 701ccc4c0e36e512ce077f5af6ccb957
+IV = 5337ddeaf89a00dd
+Plaintext = cc1172f2f80866d0768b25f70fcf6361aab7c627c8488f97525d7d88949beeea
+Ciphertext = 0cb41e41b55c3aa4f7a002e7ffbe438897769b9cb77e7a8ff9237d8e066fc64f
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = 0a8e8876c96cddf3223069002002c99f
+IV = b125a20ecd79e8b5
+Plaintext = 4fd0ecac65bfd321c88ebca0daea35d2b061205d696aab08bea68320db65451a6d6c3679fdf633f37cf8ebcf1fa94b91
+Ciphertext = 8feace1e2d6aedf53e779ee3d62e3635a2d1234802665bc34c8be46f397e04aecaea6045f3d0194ea9002dfa358ed390
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = b9ba9fa32cc491d8ac2beb5f99193d57
+IV = 95511452b71e53e9
+Plaintext = b40382705aaeea41097c309da6cd06010f15e09c0130fa4b3af69cc8da109d1f0f0a2661f1a8b89bab7e7009dcbb8a883d46254a830c45cd87981e0ea4e490fa
+Ciphertext = 6774ade6984392eaf670dc2f8c2397e87af5c850325376d9230cf622d7f0a0fd0a4a0c68565c9efdaf58c2aec18e352a315a0f9ca6beeb8e1bf4dfb673768f0e
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = 5947bbd78b06bb5ea2fc67ed7b24216e
+IV = 8e4722ad2230b15f
+Plaintext = 9e69423653c20c982794ed35d63c1a78e8ac14f37e1888ae4bf273bfe119891b2e4ed8ac46e7a9a463c7a710298d43b02f0c5606bcfc08adceeef2ec61867f8bede498e53163803f2f86fc58782fb841
+Ciphertext = f15a5b0a9f323931149fa5549f98a2cd14995a177910644dbb10fc1f6cfb281d4cf09958a5bcb23931640ca932ec50fd67e85532fe5a89a736b1027cc0423a4b5d609d6ee91fddd8b0921fc8cb6f2044
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = abce650e78f969b3b210151c74117fd2
+IV = bc4659fbb7073c1f
+Plaintext = 322eae07df5ad2ddd64bba34e42d30c1b884f842e71efa123345a3fb0c39884c57dd4c2c6fb0c42e69ff5a269d59af3a6144853c182edb376ca65947d7ccefae6806ba25c4f527706ba85a353c0fd10e3cb244dd93a2d060d7b055058dde1dff
+Ciphertext = a03ddffb19dbfae5dc4190382c88b57ece48a562adb1d2a97554475430c30c174cd58cb05f04d4ca6ca07b1413735e4c192157af2738de438fd4e8544e32e5476645a9eae06b097ae624100f1294c1870bb48910929166d200bd12f4b0b34a6e
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = 9f56e19b09dd3fee0e110f71e9967b7a
+IV = 1155cf4231bf7ac5
+Plaintext = ad1e4d3162a5084f581117639a13fc35df5449625ffe0f01e57d9a8726875be8515926ffe7449e30cd69ed4ca0c1b8b4486051c2d0fa2f6474a69c0afce2aec349d778a22edf81678145765b714c1b7c197287da56f59141d6978618729e1d89be20ace3de7d9b3c9b2d195ab6bc0fd4
+Ciphertext = ae27a1f299072d0bf7ea533d6ef2b490b78fa926bc5e7195300a2676b8e8a54bacac00d91c1f734ec959c2260dcb123e22b4d10cb810625dff0810f570755cdc520c3eaaa86412b1b382f4ca6c25953144d8a959ee9db4771aad2a1dfc812e3f0016d75d95168629be284adf3734c0b6
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = 31c485c996d6ceb2d17e0aa05b2490e4
+IV = 8c37f33405051b4c
+Plaintext = ac68de6a2c2144c6b4fd975a8dec93447391e7c9a4fde63d36be7f23ad186f96cd92b5e8adb546880d100329e97fe8204fad860e6dd8b3c0eed4805387536b9ccc63d6c74938b83dce2c93cc0a04a6025b7563d9e5e7239ae27819fb3844848a51e4294f273401ad9e592f8a170334b042f0667233b29f92b9b13262eb73232a
+Ciphertext = 0fa7effeec07717c49fc5bfa2e0dcd96b3bb5ed3080171621c67bbaf795a06bc4aa8fcb82217ff3f164a8abe0a92f9f9baf05809962b2a684eb6acdaa3a0935e298c8e23e1f1a19cd3cf174c92ff07df0541bc2fedbedcf721f11e398dabbcd3cd1b5842e8a8a117b7f97ee7d17b4a7c7a9126eefb45ca7d3e76d8240f64fa92
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = 556ccfa360ecb5025032dddb124cad4d
+IV = d54c6fdcc85dc0a2
+Plaintext = 71fbf180effac3dca0d69d40e4017dbe50455396f9fb6507ef7df26507de156cded8edd41a05fb25f352cbcdf3b2d770f90fa87f84863e0c2ed3b2dd770a1abfc489ad1ca82a28d061bd7039a6b5788da021657136def0c78d0b0cc7cfbec9512cf579811fd01185f3fdd2ab857328be4b63d293956b43df130e484b9861eccb1d06992b095e7febb0fb394c1954aeab
+Ciphertext = eea7b5280a023d240e01e428eb566ef6ce709de1e961fb45256f453b4c63a8adcb3cd22fb58c6d091bcc91bf57e2d09f3290658a4a72af2427d338e4b559a0598a0983edbcf5c441540ca8d43a91c3623f2cfa604ac002c7e95e9ca4e3d685ba62b862a6de78724074261fe6e5094dc18db65b64b914f5125ba52b92a55719ab66e9fb4d1032419ede1d51123277dd43
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = 7cb81fc4b203b0fa9bec49759bd515c2
+IV = 4d5e2fa3bf73f488
+Plaintext = 362789b376d85eb8181d4eeea52d42e873ce7741c11a2f820383a7457b15489b09fb21ac4445959dc9e851b7d40682c50d7044bda46a5da39fae2bab73b3db9ed22edc7ec5da936dfa7451cb5f0a829ff0762738cc2686148f1e1f00dc3fe38139c9a173201fc1f052ca34736fc1ab3dc4e707f864d6119b7adb6c8ddd41c80de5d357d17e9c85ed7af1e4f72cb2656932ccce469202680109eef89a9f42f10a
+Ciphertext = f24802e7d3d3fc2f487a48caa63d3b1c97856aff1f25ebe2a5579422fb75c0eff313ad93e21f667048479646b547716ec00de0686c7fcaa7352175034e4347f4552872f38c0339a70538226a0155ea26cb46bc98d0341122bfaeff3ed23eb003824e239717de4088441b5abd780bc9f10570d36e5123a6adfad601845005a7b0ee80e7de92991f931e2a52379da40ba40e6c79ff6817de63191e31570722d7d7
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = beb622d0228cde29b342bbcf4c1c83b4
+IV = 75c282fa581d9c67
+Plaintext = 860476c81685b58e71e2599efe083ce5
+Ciphertext = 3f08c279175f0eb1b66c991c650735c7
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = c4666081e0b0eddb10a9a607c807378f
+IV = 5f23623288e4a41b
+Plaintext = 2fd02dab9054248073ebc0b07aed383756ccfa4fa6298722775be6a9b4ed27a5
+Ciphertext = cba9c6b7a6672071031aa237a602996896e31a110bae1870d000768a79f661aa
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = df010376a6b03279338773a70e012382
+IV = 67455decec549365
+Plaintext = 9b9c3dea553ec235db0011b27191544171845b7bdda0dc04a089583959bba5ab7048f8ca87eab073a8b824fdd4e82e40
+Ciphertext = c0401a8557096e02ff58f62634eb39b8894735f6e1d735eee0cbd97804987a6d1f123100e2be26089fb40708b48854ce
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = ff01aa4f7106c6bd24399076f901a530
+IV = 089b4f6054eeeef7
+Plaintext = ae9cb9dfa305af83e95a3b2099f70907edcd49fbc6efc5ebe744184c76b4f56bf35774f3fe215e1c8ee42172a2dd3e6f9ccd3d9bb044325e61a6bb97e48e9986
+Ciphertext = 18c2127028579828ce13a8636ba7d666ace80c0b392bf3be4f5f97ff94d081e4174afd85de006c0affbb244149f9d2efd5f50ae7791f4ca061979f0e80a1790f
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = d33d4062ab32298eafcca86b5088d5fd
+IV = fcfffce8b020240f
+Plaintext = 1fe1318adb99e6d4fced292902fe8c831ba488a43f85964d6ff54b322663b380bc99fed15568278cfe1d0af795c71355bf65e876855763655eec3abf3d4b27a0341d607f4bfbd82c8900fd436f7c4186
+Ciphertext = ea2913d6d9f3906403ae86fa34fb185e333cf4991ab5f27d58abbc4d4bbf14165fbbf7da164401b4ff856807141fbc4d5ad550beb5d8c708eda610a5af801e27d68945ded441f2ff85206e5c3e52e786
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = 47e13544a7bbf74dd68ab5ce66e5bdaa
+IV = 69480b4dd38cf3b4
+Plaintext = 3e2e583a3a0389ca324f2aaa52b7823904ab288dae562995cf1d70c796d785fd361261434eea480ceb3d369d969652c7ff194931c0a9bd978f5ae4094d6ef32d986a092c580ccbf865e5095a7b80559be13f842f9bea9e42a3a01ef8a24a6526
+Ciphertext = c4fd34b698c5908a37eab83859317b9961e7e741bfef9060595fcee55c73f6c93bdbc5b80c73798c15efb29207e958e975cb77b4cbe5e5b329d50e86fb43dd3a234aa23fb5c9d38dae78c5de99b5e3f8a00d0bb00208ceaf2ede8f8b99f19223
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = ae86823695b48e8c612ae5a01b597f97
+IV = b26eef7b1d14894c
+Plaintext = 569a910bc6aa97b8939ca703fc10ce0d171625bc735a1fea7148650541109d955b1b686c6cc404b2d3d92ad9faaff217dc7b31b038b770959aeccd1ca55d650364fde51df8d4f0aeb05fa364f5028f709c179ca6df0bdfc1cb850f238d755ac44a733fce558402be0c70bc0871b8e62f
+Ciphertext = 63c415bd42ee6097485e023ff9c4a29e04fb4ab3254bbe1dba5b85c844184d64550dd2ed4f3dc30aa75e987363343b4db154bb0a5a250fc7049ccd8a507083f5ebd76e34f87f8b23a4540ef1e77c094ab1e0afeacfe04116aa33e2df1e505d0d788065288d57570977feb304ab432bbf
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = b85df29c9244229835d73441dc37555e
+IV = c1375430efedb2d3
+Plaintext = c232a0bbf967ef28b74e7b809c62bc8c1cf2d52a273a84162900da834448fd567870471498f29770619dec504922e379eaba0d3a712602583d00279d8fc6a6d568cb94a330039a189ed5802abb7a2898c13ef89c00d73fca9a2f2ffc2107ab498212c56835c0fc26f835a69c00bb3eaa695ac20e8bdb0f5b5b6684d02bee8fb2
+Ciphertext = 12c322b65b8296f7f88030ddbe64f2fbcb39beea0165f7633e1cc5e1cbe939bd52b0ddae37603a14bb85faf130ccf34492ed3e41d0092878d96eb09c3a5c6e09e0ba38a60ae0fdd855e1b236e69bf2e6ec6e80e4bd620826419788409524debead5430142da648144ab11746f6a4b40f357e570d8f645767bcf10fd1e1cc3286
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = e96771f5f20a89ee871261d2d18e1e46
+IV = 8c664a37d245d26c
+Plaintext = 8aaafd56c5d5d54fbe16f115c3216bd1f4376666931a2ef1ffc5468ad12150c39250dca2d63c6ea166bb0ef4aaa3d5849c1f9c621c55826a1ca362f03bcba4dcbd654b300d16519710130e5360bd949aaded6a648f96dd8937a77287d4a4ac2941729475b635b9797476b4dca4171787ff15882d3b4872ed0999a7546dbb61698e8348f70e4a14981a78156150484532
+Ciphertext = c4b350d70801419909077a2218b855d2e4cd3ad47063618009d216fb5bed38f2c161ab1d02fa62fa87371e3975b4e4786617636351e56c294d1a56c43644f54a3566173e18a5ba48964cfb314817219efa9d22b61364b7f1d2c4f38e0a6ad04bc1aee05f5f6061c3f93697125ad29c9a9b39b3640a61f3873f1327fe104fc3d2009052fb9cb356853a6f1e81feebc88f
+
+Availablein = legacy
+Cipher = CAST5-CFB
+Key = aef49da33f538ee66e178d4b6121055d
+IV = 842566e68b61ff7b
+Plaintext = 415991f65e1a95040cef9960556f61e617827c30c74bf353cdd86173dbe4cc983a2ee6bc8ca6cfb71121e7b0d0178f2e13445c710dcc176b781201971171f7489f18faf110f39accd1cf08c85a958d7698b116f1c0d75812ac9b0b39aee7f7159ccad8fdae9b99f2d695eacf12c6469d5b51a34de26eac73613dcb2f77122cb1f8dd5162786a12052dc7b6dea6acc4989dcc7eafd9374f6c29697c74749ef16d
+Ciphertext = cda6dcfc1e0103192673cf18f67939eabe1011b94764ddc809f7d4fac4521ed72ee66629220ef29aec006c82e31432030480589f9fe35600939609a0c6f9252ec8ad7f96540236d3dcb4a53433b6759b218da8a37cde43aadcbc517c12811e27db1870d78c874e5f81492b47245cc48c6761998f1fb8cbc6848ff40f0d27adf519bb3645b4d3ca6e35a1979aa5685976375298822dbbb072856312eb30232b97
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = d7d57bd847154af9722a8df096e61a42
+IV = fdde201c91e401d9
+Plaintext = 81883f22165282ba6a442a8dd2a768d4
+Ciphertext = afd1a6abb87a4a12ccfb63b91868b734
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = c9f4ce21b4c7daaa4f93e292dc605bc5
+IV = 5e5a8cf2808c720e
+Plaintext = 8e19c5cacd015a662e7f40cdecadbf79a68081c06d9544b41c2dd248e77633b4
+Ciphertext = 834fc0990736575be34b56f7af26a1cc4d801cfd36eb0d0830c5264a7050db77
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 7a70cc6b261eeccb05c57117d5763197
+IV = bb7b9667fbd76d5e
+Plaintext = 823cbaae3760c85512a3c83fd60bb54b7cfc739b295b63e05ef435d86e19fd15368c89ff08a0f21ce89a728ffb5d75df
+Ciphertext = 3552cb60d8b3a9d8a6458d20e70250ef67ff90a1767cd61597a18a28dfc354d810f30b8949a8a13a111393ba08bc9e6f
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 85dbd5a6e73681a51a4a7d4e93ca7d0c
+IV = 89d897c5aa9e0a5d
+Plaintext = e3dbfc6ae1a879870fd22644c8135fe063355dfc0a8dad45c9c6e052e6e085cf717754dc1b49acb04cf340826ffb0da991138f022a9c34923a6a116c98c7d3d5
+Ciphertext = 20310bbe52bdde7725da64a30e428654a2ab9c2506ea89499b04782038a29c3712915328380e785a660e378dba714a3598ab4a6612cd8350d608a8cf598bea7a
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 18b9887a34438fb2e759027e54e334b6
+IV = a5be8621e58dae32
+Plaintext = 8cd659df925950b516f737fc92d2fafa008c008c9dfe0e75ed2d68f6ff79399ff2183464b8c37cf31aafc145fcbfac73e3f87eccb435f424bf1c6d6efb504e8e93e8a668a2210e3d3b4fd437ad1a5842
+Ciphertext = 0cefd22109f262103018037c3821c3bb1d43b5ff45dba0de243a915bdd2e7e9a4b847dcfb23baf1b7c42cc62bf33ffb0e9e8edf31b2ad9545074b5c6c57721f1b3b6d85f343aeddc72591de1f7d4fc7c
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = da52c0e4609e82ee926174a9eaf90b08
+IV = f2d0c5e86b4ddb40
+Plaintext = 91d6c95a614cf85de16eeabe5976c2a2a9d307042f79a7aaeb7c3c57e1dd8d43bfa458c8c02e4f5ed0c960c9f17e3991dd2e0cb3ede18f96395a484001ef07ca4c97b411ce454aaf0f74242aca03786a93442171bd50a1467b9d663245d24c2f
+Ciphertext = 2e7514b53c534a7d443757a1f071cd9b6e3b79764134c202717bef1f633807b42a3e34b1c6e8b233d2436ec61fa642cc48ef653de35ae84298c380652f2633e5180d35a28f0e8876693a0e92e47a4076ddd9f56d3145564c880dd98adb77e6c2
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 56d6f7e2a870b92d55ff8d6e9c554d2a
+IV = b512f0e11e27fd1a
+Plaintext = e62cdeac43667749701314c546f778a4c758e4f55760e7d729c3783cf7a242edf6ae3fcf0990886434896c945455bfae0e5674aa06ee6fb1512d94df2cac2447eeb849373bb3efbe7bb8d66c8a7ee559b17fc268d6599fcdef7457cdbde5b9c5b692236e4397545f2be97bd44f3993ad
+Ciphertext = 71497485f2deb55dfb1f6f77230e98c34faa185a9de4fbd5a2d065c50de8978f9aacec1e4e55c69b72ec581a7acdb9795233d7c40506d9599346a71f2ba14c2f6b7e678efa3cc4e0a30453be14794fd121db985a5b2639a2719e2b771195ad742e60ae9d17ab8c6466676e77f61032b3
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 09f216ff78dfe419dfcef1a855473414
+IV = 722174c892d26529
+Plaintext = 11f435e7e3656fcfa8e0df230311ca21054e84e13c8590e7ec7309f59c174022d467a7302641ee1b6ba46bee4f20bfda108bb78982f670b057dfbfe49da9cfae88490ce17241402b20d2fceb476d3a424e6c406d56ffc85278695d584d6c087cb4012ca2cf4daf284fd15ac1f2e183814957e934bf88dff4d777adfbb54933b5
+Ciphertext = 5e37c2fac52455a124fdbb84a7627e3480f672907ee82b2830c2d26f12da8a5edfcc6ef0305de040c2a998b968b2e1e66a586887d1ba77076b661a09b01108c0f6bfcae40ae5441e16cc2b2b32f391e2e88f245325003226802093d33dd676d4591e60a17a958939ef898b20482a99cf79187f6f56f9d1e53f77a6c895730a89
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = cde9b69eea2b6a5588457e35e0a08803
+IV = 52323b54d69a62fe
+Plaintext = 967798995af6f435b3a6f92bff77a11fa44d1426ae0f6e7dbafac27b123c5fc419be52c0ea412c4b3cac05ae89a4c0ce6f5e91a456b1bded5370a1234cf6f6ab5d0253507bc6f3f0573ab97585b67107dec059812323e021e341ad839ea9e3d02aeca43356add48ccef81f693ed53d32ba1c74a35e8a5f7f3115ef834f7daf9948244c4fc31f5487678d3e70fb27abb5
+Ciphertext = 5cc3f00892f8ac87d5794965f43540ac36965e8122c2cbe8bbc68621739ddb0d28c9086a58c157e7bbdab4bf3e70988a9d2913445776771557bc3e6c6f7f803bfef5085441763b24e266a995b7db60239990202c946aa89750adbf35ebd089b6897a3ca6efa0b4f505dac03c5c2e93cddc3fd7b8ceb419a72d2512330e2cbc99d7b3f3e4eee8b315d3e761c93a08c67a
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 939aac71e337709855715a57e3a4648f
+IV = 493509b56a92f140
+Plaintext = 9c22efddc7de496a916d15d710de374d57478126ed64c9ad7e823e24d19bfc0cfac3dda0d1c292a3a203f35b26ad94deb20f998caf41cbdd4a08eb5d6cfb46f4ede4896b0569d72c03ec194941af95c0573cc3fe8f045ba19946b382803248f3dd4f9a454b1a3e8e1af02ea8482d637dac96a68275f4a382d3023f9df4892b9032cab9378b1cef5051d6db81226f259d1be4eb23495ac807600536b5b0481754
+Ciphertext = e04d62785f1d6a05df1ad002c5c81f1e511d4317d674278b0fd35ba16fc4de739d0fc6429df9de7b12fc4f2f9903efe47b5974f7b727d58f919bd198249eac42fdd0d09d741ad6a37b34203c4a7b2f7b22df0edcc263ca3d245387a6fca88937d762820e5c6a820fa26f7dcb6b1346deb7bd60cd61db8a272667bbc03fe2e88d9d69492eab0c6bdd5184bbe82121232e9340fd1d7a5a4b8b304a88137842954c
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 8368189d41eaa20d06a3a2d2a91e43f7
+IV = cf04ac0e4733952b
+Plaintext = 696ca57339840fb3c150e0c111d9e13e
+Ciphertext = 3f530c7c373723d7d06695e6782f14e0
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 5124c6fdb0856ded76afb6febdaa981e
+IV = 937ebdeec379685a
+Plaintext = 5a5928dd09e78a21256eadb062630a3f0b47ca2376ccae314948143fff2512d4
+Ciphertext = 8ce4e3661b442f508f7016fdbb69f7dcf4609cf6be2a9854533aa450e0638dc9
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 6a8f6487e76058bc5a126276e48fdd77
+IV = 6e75d8b8ac097614
+Plaintext = 424ddc343067612fdb426920f40ab4d82e3d4f9485b07fef91617556d3093874840e8110ff375b7a68f98c471ca10acc
+Ciphertext = 7994f1beec7126aa62694e2b6e0874ba8d2da96f5bfc52059d27af0f93ee47798a894a2d6cb793667ca4b308c46b4dd7
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 01963d44aea026b2205238454d5bb73f
+IV = 9442a6e0f3a53f10
+Plaintext = c54cfacd953736a2d8db0b8b63b555253a0ca6f6e05f2e918d18be95669fa85609f827d6da014add2964626670c202b195248fc986372c92adbb10c0e7c36e04
+Ciphertext = 8f3f08ab74d80edad7b7008e122050ec8b0af8d0b0b4d107a9d74d701bc367296ea0feefbb7106c7d752757be37f4e19c2178c12ea6d68dfdd8e96a301937223
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 4ea87b0b346054c097edc5601b782870
+IV = 9a3e23333b2b2de7
+Plaintext = 0c7734310c5ca82b520bf1e0a1614c7ddd0c002711ef0b239de8fa256e15b32056b992747ff3a3a310d52e9df36275d9192dad61caa16715744552c865c5ae9477a70a2c3a02a01ba176b927445094d2
+Ciphertext = 182462c882bb5a0251542567a92b58e28dc0895891da88befaa0c2d3aae0870ed76b62ba146e4a97a28dc34f83f83bbc29000298028ac646399fdb35c5428b86759c181a8f663d099e33aca6918c3d2c
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 1956f40b2334a6546b3071f2d17f4a59
+IV = 765cfb560c46777a
+Plaintext = 045ad66c515d407ab73ea0c6f6ae869872342fc72956a659945454005e37c76ed07df996ffe1322840cf23843b34346a1e730ab721ddceaf362ed256054c105ed581a80c04ef22ae1b5eb8742c6e3c9c0e0e29fad211b4f40adc1520f7c6821e
+Ciphertext = d441ffecd27fdb3172cb38e462e2b6420cb85db892a6073fe1741bc119815079134582238bf47bff2cf2287f7e9fe6617041177da1675e74a15e2e6b183b6148bbf88bb7aecc0161d497f838a85071425a945fdaf0ac8fc3a1d9a405915dd115
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 4e47e1b5c1b489295d3a2bf049f4be2d
+IV = 83fdf064d213df41
+Plaintext = 94a7bed3b5a158e85f9e4778a7de105ff4f3b2a61c2fead82cbe949d7a4ee961a6c62949ba2c69d513d836a455b612c2fbb6ca243a0a18a853cadb6b73b600192de1d51ddf80030718b079fbb581073a06b66ba4ad524d3d09efaa59e6919bca15b2b92bd9f8c17d6e463f4ea5fd5f5e
+Ciphertext = faa5133fcad1830f7ea3ab6c6266e0ec7ef25643dd5680a433952ed87a433bbab85392f37edbdab44878b337121bf8b37e8b4cd1980ae59bcd8b34191ffffc5f08850f910f3c2c26a4d32fc460d845ed09995cf172b6338728b3aa17b041122e52c4cd9bc036ff5e7a0c3fb1ca82cca5
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 613485e5bb84b91cdd0ca02f8d83e0bb
+IV = ad8a7564f6ce8abb
+Plaintext = ed5068003163c424ae9a8e51e3d77684c69073a824dc4721568f7528657c3dd28d66219f398ed57105aa35cfef3ac078eab30ae0f3ed752b0e320b099ea42b156f818904c4b6c534cabde53dfa62e7b74518a8bca3f36ee85b130e8520d38c006e6adef34bbc8df56b757b500d703e5777aa545c4170404754f03dbf22c9f0d7
+Ciphertext = a03127978305f8e500061bf108157a5e2e4db5e405f130efab2ef5c9d190d15e2bc87c235b6c123de066b447ed506d03d433c12642e8b86ebcfd9077a1e76adf1f79614a28fe92f49c482b6bc3119ab364426236a4aee7920194d0a77ce7d0061c5d254b11f72c6fed02c07a187f945f18818ce31d82fe867153a725525dc11b
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = 8198b36e880cf50dbf6724feaaac8688
+IV = fbaa2882a2a4acdb
+Plaintext = b2516a356e437513f0df83938afefbe9f9ef1ec879797997f31da96a1ea7a15d395ecdb94b7fda14cdc0b75c171784fa8832d574b64f9450c6be25dc83b93d3bbf0145a661bf4db775282b98649b64613aeedb8bb770f67cc3421ac6761e5d763c21ac2d1e729e4597ad7fca9fdc70878b26634df78cd0f36fb3b138a1357915abba4ff5f8dfaef268307022f2e23528
+Ciphertext = 685e4aa88c350e10125a108a6cdbb38baf3c0fc5c5fdc8b36f0f788ed80ce3dd4e21dd3c0c56f7f2ba399270c80e9f106c7cef715d78c1bdcb3841363afc1c27a65f68bfa2e58b9bf8ccced2e99349fb208116ae2ec176351fdeca19060edec12348590496abb943160075a8408a9d4d51e25e147d1e4045cd76e77ee192bbe411241a3013070ee071c08450ed61bd0f
+
+Availablein = legacy
+Cipher = CAST5-OFB
+Key = e30b4c874c4c4f6e0cf1f8ef58e5d375
+IV = 7e26f07f8024343c
+Plaintext = 8ceca4dc346cfd6b15774e082db1a89497b7d85d6b5b7102e77417f7a243fafe17118b7a3bb49d1657cf61b866da395a5b3f349183a53dfa11fc0ac053bddff49dd472ee55f5e43a2f8bc785e2bc420300694919ff7bb43feb75a9cac44ece96f679e618db5d7433af12dcc7e0963ff10b45d835f9a8f42627e7f3fd5038932685965ad0e183f5955e671fc2b878dd51051eedaf85310d1e4e8f75f2decf36c7
+Ciphertext = e1d258d7b885417ba27c3d00ee9fc9247ee7aec53b1647f1d5250db8f358b7f0da34d3ba595c0f9480815ad7dc5a46aaee41f1478ee302f5a068ca7bf2a123e5a6359f1d85a07ce1415b17f1fa03d1b233f4922ae981120ad919b70822cf68b3597ea080d7688eaab85c17b31dfa2fed465a3f272ad9d97362c3ff4c06bad8db4b548ef263c810094d927fc85ef2f90fb6258245024ad9acc2175aeb73015381
+
+Title = CAST5 ECB Test vectors (from RFC 2144)
+Availablein = legacy
+Cipher = CAST5-ECB
+Key = 0123456712345678234567893456789A
+Plaintext = 0123456789ABCDEF
+Ciphertext = 238B4FE5847E44B2
+
+Availablein = legacy
+Cipher = CAST5-ECB
+Key = 01234567123456782345
+Plaintext = 0123456789ABCDEF
+Ciphertext = EB6A711A2C02271B
+
+Availablein = legacy
+Cipher = CAST5-ECB
+Key = 0123456712
+Plaintext = 0123456789ABCDEF
+Ciphertext = 7AC816D16E9B302E
diff --git a/test/recipes/30-test_evp_data/evpciph_chacha.txt b/test/recipes/30-test_evp_data/evpciph_chacha.txt
new file mode 100644
index 000000000000..52a39c03f8f2
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_chacha.txt
@@ -0,0 +1,208 @@
+#
+# Copyright 2001-2023 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 are ignored.
+
+Title = Chacha20 test vectors from RFC7539
+
+# A.1 Test Vector 1
+Cipher = chacha20
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+IV = 00000000000000000000000000000000
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586
+
+# A.1 Test Vector 2
+Cipher = chacha20
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+IV = 01000000000000000000000000000000
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 9f07e7be5551387a98ba977c732d080dcb0f29a048e3656912c6533e32ee7aed29b721769ce64e43d57133b074d839d531ed1f28510afb45ace10a1f4b794d6f
+
+# A.2 Test Vector 1 is the same as A.1 Test Vector 1
+# A.2 Test Vector 2
+Cipher = chacha20
+Key = 0000000000000000000000000000000000000000000000000000000000000001
+#Counter (first 4 bytes) expressed in little-endian order
+IV = 01000000000000000000000000000002
+Plaintext = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f
+Ciphertext = a3fbf07df3fa2fde4f376ca23e82737041605d9f4f4f57bd8cff2c1d4b7955ec2a97948bd3722915c8f3d337f7d370050e9e96d647b7c39f56e031ca5eb6250d4042e02785ececfa4b4bb5e8ead0440e20b6e8db09d881a7c6132f420e52795042bdfa7773d8a9051447b3291ce1411c680465552aa6c405b7764d5e87bea85ad00f8449ed8f72d0d662ab052691ca66424bc86d2df80ea41f43abf937d3259dc4b2d0dfb48a6c9139ddd7f76966e928e635553ba76c5c879d7b35d49eb2e62b0871cdac638939e25e8a1e0ef9d5280fa8ca328b351c3c765989cbcf3daa8b6ccc3aaf9f3979c92b3720fc88dc95ed84a1be059c6499b9fda236e7e818b04b0bc39c1e876b193bfe5569753f88128cc08aaa9b63d1a16f80ef2554d7189c411f5869ca52c5b83fa36ff216b9c1d30062bebcfd2dc5bce0911934fda79a86f6e698ced759c3ff9b6477338f3da4f9cd8514ea9982ccafb341b2384dd902f3d1ab7ac61dd29c6f21ba5b862f3730e37cfdc4fd806c22f221
+
+# A.2 Test Vector 3
+Cipher = chacha20
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+#Counter (first 4 bytes) expressed in little-endian order
+IV = 2a000000000000000000000000000002
+Plaintext = 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e
+Ciphertext = 62e6347f95ed87a45ffae7426f27a1df5fb69110044c0d73118effa95b01e5cf166d3df2d721caf9b21e5fb14c616871fd84c54f9d65b283196c7fe4f60553ebf39c6402c42234e32a356b3e764312a61a5532055716ead6962568f87d3f3f7704c6a8d1bcd1bf4d50d6154b6da731b187b58dfd728afa36757a797ac188d1
+
+Title = Chacha20
+
+Cipher = chacha20
+Key = 0000000000000000000000000000000000000000000000000000000000000001
+IV = 00000000000000000000000000000000
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = 4540f05a9f1fb296d7736e7b208e3c96eb4fe1834688d2604f450952ed432d41bbe2a0b6ea7566d2a5d1e7e20d42af2c53d792b1c43fea817e9ad275ae546963
+
+Cipher = chacha20
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+IV = 00000000000000000000000000000001
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = de9cba7bf3d69ef5e786dc63973f653a0b49e015adbff7134fcb7df137821031e85a050278a7084527214f73efc7fa5b5277062eb7a0433e445f41e31afab757
+
+Cipher = chacha20
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+IV = 00000000000000000100000000000000
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = ef3fdfd6c61578fbf5cf35bd3dd33b8009631634d21e42ac33960bd138e50d32111e4caf237ee53ca8ad6426194a88545ddc497a0b466e7d6bbdb0041b2f586b
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c9
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c730
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444a
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF1798
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1D
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1DBDBAC354A4162151E9D92C79FB08BB4DDC56F19448C0175A46E2E6C491FEC71419AA43A349BEA768A92C75DE68FD9591E68067F3197094D3FB87ED81785EA075
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1DBDBAC354A4162151E9D92C79FB08BB4DDC56F19448C0175A46E2E6C491FEC71419AA43A349BEA768A92C75DE68FD9591E68067F3197094D3FB87ED81785EA075E4B65E3E4C78F81DA9B751C5EFE024152301C48E63245B556C4C67AFF857E5EA15A908D83A1D9704F8E55E7352B20B694BF9970298E6B5AAD33EA2155D105D4E
+
+Cipher = chacha20
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+IV = 00000000000000000001020304050607
+Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1DBDBAC354A4162151E9D92C79FB08BB4DDC56F19448C0175A46E2E6C491FEC71419AA43A349BEA768A92C75DE68FD9591E68067F3197094D3FB87ED81785EA075E4B65E3E4C78F81DA9B751C5EFE024152301C48E63245B556C4C67AFF857E5EA15A908D83A1D9704F8E55E7352B20B694BF9970298E6B5AAD33EA2155D105D4E637D1E87C40A8E5F4E8C5A16A4B8F3DC27B31721D77A65FD1ED6F86BE25FB95DB29B1988493770A7C60E451FF97DD241A236851FC425691979FE30226559AD95
+
+# RFC7539
+Cipher = chacha20-poly1305
+Key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+IV = 070000004041424344454647
+AAD = 50515253c0c1c2c3c4c5c6c7
+Tag = 1ae10b594f09e26a7e902ecbd0600691
+Plaintext = 4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e
+Ciphertext = d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116
+
+Cipher = chacha20-poly1305
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+IV = 000000000102030405060708
+AAD = f33388860000000000004e91
+Tag = eead9d67890cbb22392336fea1851f38
+Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d
+Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b
+
+# Test that a truncated IV is no longer allowed (since 3.0)
+# This is the same test as above with the leading zeros stripped from the IV
+Cipher = chacha20-poly1305
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+IV = 0102030405060708
+AAD = f33388860000000000004e91
+Tag = eead9d67890cbb22392336fea1851f38
+Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d
+Result = INVALID_IV_LENGTH
+
+Cipher = chacha20-poly1305
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+IV = 000000000102030405060708
+AAD = f33388860000000000004e91
+Tag = eead9d67890cbb22392336fea1851f39
+Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d
+Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b
+Operation = DECRYPT
+Result = CIPHERFINAL_ERROR
+
+# self-generated vectors
+Cipher = chacha20-poly1305
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+IV = 000000000102030405060708
+AAD = f33388860000000000004e91
+Tag = d96119a40cd17f2527306866a3ef0413
+Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d4472616674732061732072
+Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a
+
+Cipher = chacha20-poly1305
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+IV = 000000000102030405060708
+AAD = f33388860000000000004e91
+Tag = 53aee3189d2b747032378a6186feb43f
+Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67
+Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c299da65ba25e6a85842bf0440fd98a9a2266b061c4b3a13327c090f9a0789f58aad805275e4378a525f19232bfbfb749ede38480f405cf43ec2f1f8619ebcbc80a89e92a859c7911e674977ab17d4a7126a6b8a477358ff14a344d276ef6e504e10268ac3619fcf90c2d6c03fc2e3d1f290d9bf26c1fa1495dd8f97eec6229a55c2354e4524143551a5cc370a1c622c9390530cff21c3e1ed50c5e3daf97518ccce34156bdbd7eafab8bd417aef25c6c927301731bd319d247a1d5c3186ed10bfd9a7a24bac30e3e4503ed9204154d338b79ea276e7058e7f20f4d4fd1ac93d63f611af7b6d006c2a72add0eedc497b19cb30a198816664f0da00155f2e2d6ac61
+
+Cipher = chacha20-poly1305
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+IV = 000000000102030405060708
+AAD = f33388860000000000004e91
+Tag = e0723bce23528ce6ccb10ff9627038bf
+Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d
+Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c299da65ba25e6a85842bf0440fd98a9a2266b061c4b3a13327c090f9a0789f58aad805275e4378a525f19232bfbfb749ede38480f405cf43ec2f1f8619ebcbc80a89e92a859c7911e674977ab17d4a7126a6b8a477358ff14a344d276ef6e504e10268ac3619fcf90c2d6c03fc2e3d1f290d9bf26c1fa1495dd8f97eec6229a55c2354e4524143551a5cc370a1c622c9390530cff21c3e1ed50c5e3daf97518ccce34156bdbd7eafab8bd417aef25c6c927301731bd319d247a1d5c3186ed10bfd9a7a24bac30e3e4503ed9204154d338b79ea276e7058e7f20f4d4fd1ac93d63f611af7b6d006c2a72add0eedc497b19cb30a198816664f0da00155f2e2d6ac61045b296d614301e0ad4983308028850dd4feffe3a8163970306e4047f5a165cb4befbc129729cd2e286e837e9b606486d402acc3dec5bf8b92387f6e486f2140
+
+Cipher = chacha20-poly1305
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+IV = ff000000000102030405060708
+AAD = f33388860000000000004e91
+Tag = e0723bce23528ce6ccb10ff9627038bf
+Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d
+Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c299da65ba25e6a85842bf0440fd98a9a2266b061c4b3a13327c090f9a0789f58aad805275e4378a525f19232bfbfb749ede38480f405cf43ec2f1f8619ebcbc80a89e92a859c7911e674977ab17d4a7126a6b8a477358ff14a344d276ef6e504e10268ac3619fcf90c2d6c03fc2e3d1f290d9bf26c1fa1495dd8f97eec6229a55c2354e4524143551a5cc370a1c622c9390530cff21c3e1ed50c5e3daf97518ccce34156bdbd7eafab8bd417aef25c6c927301731bd319d247a1d5c3186ed10bfd9a7a24bac30e3e4503ed9204154d338b79ea276e7058e7f20f4d4fd1ac93d63f611af7b6d006c2a72add0eedc497b19cb30a198816664f0da00155f2e2d6ac61045b296d614301e0ad4983308028850dd4feffe3a8163970306e4047f5a165cb4befbc129729cd2e286e837e9b606486d402acc3dec5bf8b92387f6e486f2140
+Result = INVALID_IV_LENGTH
diff --git a/test/recipes/30-test_evp_data/evpciph_des.txt b/test/recipes/30-test_evp_data/evpciph_des.txt
new file mode 100644
index 000000000000..9d62cbb4dbc4
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_des.txt
@@ -0,0 +1,100 @@
+#
+# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+Title = DES ECB Tests (from destest)
+
+Availablein = legacy
+Cipher = DES-ECB
+Key = 0000000000000000
+Plaintext = 0000000000000000
+Ciphertext = 8CA64DE9C1B123A7
+
+Availablein = legacy
+Cipher = DES-ECB
+Key = FFFFFFFFFFFFFFFF
+Plaintext = FFFFFFFFFFFFFFFF
+Ciphertext = 7359B2163E4EDC58
+
+Availablein = legacy
+Cipher = DES-ECB
+Key = 3000000000000000
+Plaintext = 1000000000000001
+Ciphertext = 958E6E627A05557B
+
+Availablein = legacy
+Cipher = DES-ECB
+Key = 1111111111111111
+Plaintext = 1111111111111111
+Ciphertext = F40379AB9E0EC533
+
+Availablein = legacy
+Cipher = DES-ECB
+Key = 0123456789ABCDEF
+Plaintext = 1111111111111111
+Ciphertext = 17668DFC7292532D
+
+Availablein = legacy
+Cipher = DES-ECB
+Key = 1111111111111111
+Plaintext = 0123456789ABCDEF
+Ciphertext = 8A5AE1F81AB8F2DD
+
+Availablein = legacy
+Cipher = DES-ECB
+Key = FEDCBA9876543210
+Plaintext = 0123456789ABCDEF
+Ciphertext = ED39D950FA74BCC4
+
+Title = DES Tests (from FIPS PUB 81)
+
+Availablein = legacy
+Cipher = DES-CBC
+Key = 0123456789abcdef
+IV = 1234567890abcdef
+Plaintext = 4e6f772069732074
+Ciphertext = e5c7cdde872bf27c
+NextIV = e5c7cdde872bf27c
+
+Availablein = legacy
+Cipher = DES-CFB8
+Key = 0123456789abcdef
+IV = 1234567890abcdef
+Plaintext = 4e6f7720697320746865
+Ciphertext = f31fda07011462ee187f
+
+Availablein = legacy
+Cipher = DES-CFB
+Key = 0123456789abcdef
+IV = 1234567890abcdef
+Plaintext = 4e6f77206973207468652074696d6520666f7220616c6c20
+Ciphertext = f3096249c7f46e51a69e839b1a92f78403467133898ea622
+NextIV = 03467133898ea622
+
+Title = DES Tests (various sources)
+
+Availablein = legacy
+Cipher = DES-EDE3-CFB1
+Key = 000102030405060708090A0B0C0D0E0F1011121314151617
+IV = 0001020304050607
+Plaintext = "Hello World"
+Ciphertext = 3CF55D656E9C0664513358
+
+Availablein = legacy
+Cipher = DES-EDE3-CFB1
+Key = 000102030405060708090A0B0C0D0E0F1011121314151617
+IV = 0001020304050607
+Operation = DECRYPT
+Plaintext = "Hello World"
+Ciphertext = 3CF55D656E9C0664513358
+
+Availablein = legacy
+Cipher = DESX-CBC
+Key = 0123456789abcdeff1e0d3c2b5a49786fedcba9876543210
+IV = fedcba9876543210
+Plaintext = 37363534333231204E6F77206973207468652074696D6520666F722000000000
+Ciphertext = 846B2914851E9A2954732F8AA0A611C115CDC2D7951B1053A63C5E03B21AA3C4
diff --git a/test/recipes/30-test_evp_data/evpciph_des3_common.txt b/test/recipes/30-test_evp_data/evpciph_des3_common.txt
new file mode 100644
index 000000000000..aa238df2d90a
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_des3_common.txt
@@ -0,0 +1,37 @@
+#
+# Copyright 2001-2022 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 are ignored.
+
+Title = DES3 Tests
+
+# DES EDE3 CBC tests (from destest)
+Cipher = DES-EDE3-CBC
+Key = 0123456789abcdeff1e0d3c2b5a49786fedcba9876543210
+IV = fedcba9876543210
+Plaintext = 37363534333231204E6F77206973207468652074696D6520666F722000000000
+Ciphertext = 3FE301C962AC01D02213763C1CBD4CDC799657C064ECF5D41C673812CFDE9675
+NextIV = 1c673812cfde9675
+
+# DES EDE3 ECB test
+# FIPS(3.0.0): has a bug in the IV length #17591
+FIPSversion = >3.0.0
+Cipher = DES-EDE3-ECB
+Key = 0123456789abcdeff1e0d3c2b5a49786fedcba9876543210
+Plaintext = 37363534333231204E6F77206973207468652074696D6520666F722000000000
+Ciphertext = 62c10cc9efbf15aaa5ae2e487b690e56d8b1dfb8f5c5b293855e77dd9024b1b1
+
+# DES EDE ECB test
+Availablein = default
+Cipher = DES-EDE-ECB
+Key = 0123456789abcdeffedcba9876543210
+Plaintext = 37363534333231204E6F77206973207468652074696D6520666F722000000000
+Ciphertext = 4d1332e49f380e23d80a0d8b2bae5e4e6a0094171abcfc27df2bfd40da9f4e4d
diff --git a/test/recipes/30-test_evp_data/evpciph_idea.txt b/test/recipes/30-test_evp_data/evpciph_idea.txt
new file mode 100644
index 000000000000..1b4f5c9fd32f
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_idea.txt
@@ -0,0 +1,652 @@
+#
+# Copyright 2019 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
+
+
+Title = IDEA Tests (from https://github.com/pyca/cryptography)
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 1f8e4973953f3fb0bd6b16662e9a3c17
+IV = 2fe2b333ceda8f98
+Plaintext = 45cf12964fc824ab76616ae2f4bf0822
+Ciphertext = 2cb10d22ac22a375c0021ab6732936c1
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 0700d603a1c514e46b6191ba430a3a0c
+IV = aad1583cd91365e3
+Plaintext = 068b25c7bfb1f8bdd4cfc908f69dffc5ddc726a197f0e5f720f730393279be91
+Ciphertext = 4af8370c69ae4e45cc5a395e790272d5a5a0895dee1f336f0067963bd9ed55c7
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 3348aa51e9a45c2dbe33ccc47f96e8de
+IV = 19153c673160df2b
+Plaintext = 9b7cee827a26575afdbb7c7a329f887238052e3601a7917456ba61251c214763d5e1847a6ad5d54127a399ab07ee3599
+Ciphertext = 09738cbc8c7764dd63206892eca29fbc3a67f7fe44ded6b128a0350426776ea71d0c9a1b6d627e1e3d014837dd82f11a
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = b7f3c9576e12dd0db63e8f8fac2b9a39
+IV = c80f095d8bb1a060
+Plaintext = 9ac19954ce1319b354d3220460f71c1e373f1cd336240881160cfde46ebfed2e791e8d5a1a136ebd1dc469dec00c4187722b841cdabcb22c1be8a14657da200e
+Ciphertext = 956c2993f77485da8f50b09ea7aa532f7c0aa1f63af0ac998680514a16c99d143261f7434f9a9c0fcb26a02175fde4b4093e1efe672cfe12509cf3d455c3ab01
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = b6f9afbfe5a1562bba1368fc72ac9d9c
+IV = 3f9d5ebe250ee7ce
+Plaintext = db397ec22718dbffb9c9d13de0efcd4611bf792be4fce0dc5f25d4f577ed8cdbd4eb9208d593dda3d4653954ab64f05676caa3ce9bfa795b08b67ceebc923fdc89a8c431188e9e482d8553982cf304d1
+Ciphertext = 3831f1265df609c006a15c2b963465e8a0d77bbec6e6d332f0b384479f0f34d2a7ed722607e077170a97ca9cdf526602972823c562c87187b8dc5f5d7de27a80c58bcaa95f5f7cae9c5b70938bb7de9f
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = bbe7b7ba07124ff1ae7c3416fe8b465e
+IV = 7f65b5ee3630bed6
+Plaintext = 2aad0c2c4306568bad7447460fd3dac054346d26feddbc9abd9110914011b4794be2a9a00a519a51a5b5124014f4ed2735480db21b434e99a911bb0b60fe0253763725b628d5739a5117b7ee3aefafc5b4c1bf446467e7bf5f78f31ff7caf187
+Ciphertext = 5ee0a43a2dd9d14eee83d99e51598870a3b4221f28a2eb77b3612fec3c92037ff9eccab303d225d89f313a8894d1de97f3e87a93684290a17622766eda764308e1abe6153f638a3e8e1e6e0f36cca66ee06fa21457266c4291d8456fa84aaa09
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 89a553730433f7e6d67d16d373bd5360
+IV = f724558db3433a52
+Plaintext = 807bc4ea684eedcfdcca30180680b0f1ae2814f35f36d053c5aea6595a386c1442770f4d7297d8b91825ee7237241da8925dd594ccf676aecd46ca2068e8d37a3a0ec8a7d5185a201e663b5ff36ae197110188a23503763b8218826d23ced74b31e9f6e2d7fbfa6cb43420c7807a8625
+Ciphertext = 1c1fa2b32f704963913dd890dc5504d9a4562587f60e15dcf5351bc89ebf4467679ba38d6febb3063745c88e53c4e2866b7fdfe0916cb6196da3f96d0d69dd605d603a80e8da4782f6458f65a0ab55541a0cdac68095b4835ffa0d119cf5d4e40dbf19731cddcfd57cb5cf6250abfa0d
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = c491ca31f91708458e29a925ec558d78
+IV = 9ef934946e5cd0ae
+Plaintext = cb6a787e0dec56f9a165957f81af336ca6b40785d9e94093c6190e5152649f882e874d79ac5e167bd2a74ce5ae088d2ee854f6539e0a94796b1e1bd4c9fcdbc79acbef4d01eeb89776d18af71ae2a4fc47dd66df6c4dbe1d1850e466549a47b636bcc7c2b3a62495b56bb67b6d455f1eebd9bfefecbca6c7f335cfce9b45cb9d
+Ciphertext = 5b15322d02a4de6ee0847b029fa88eb39db00697113260bb5834128ed2201ec2c5e22f50bd274b5ae8dc24e4b721c3e5cb905d96595c869ca1db7cbe6389c8553b36f635a1fbbece6b1aba3ba9d0c6cb361aeb5708b61b99a2812b23f16ca0bc602f5dcb77a1eec677399a47b6ce5f9ebb90c32b2ff3c181a0ebcde94c46ff41
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = f6e87d71b0104d6eb06a68dc6a71f498
+IV = 1c245f26195b76eb
+Plaintext = f82bef3c73a6f7f80db285726d691db6bf55eec25a859d3ba0e0445f26b9bb3b16a3161ed1866e4dd8f2e5f8ecb4e46d74a7a78c20cdfc7bcc9e479ba7a0caba9438238ad0c01651d5d98de37f03ddce6e6b4bd4ab03cf9e8ed818aedfa1cf963b932067b97d776dce1087196e7e913f7448e38244509f0caf36bd8217e15336d35c149fd4e41707893fdb84014f8729
+Ciphertext = c2725ddb784b9cffe46543af4ac9f0e64edcd1678f26b3ee652af6d00ae164f7c07afd0fb773277401c2137070a6a59e39de429c032711756ce6b0c9b9dc69a0a1caaabff9da5855f7410656f8e09e00cee6f44c0fc93f9419d13ccfe63517a1c74afc3dabfd1b43171bfe097cf28ca5674fbd0fa58b0698289a92eb57cf1ff74b1d756ff113252a379f2bae8dd9cd3d
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 2c14413751c31e2730570ba3361c786b
+IV = 1dbbeb2f19abb448
+Plaintext = 40d930f9a05334d9816fe204999c3f82a03f6a0457a8c475c94553d1d116693adc618049f0a769a2eed6a6cb14c0143ec5cccdbc8dec4ce560cfd206225709326d4de7948e54d603d01b12d7fed752fb23f1aa4494fbb00130e9ded4e77e37c079042d828040c325b1a5efd15fc842e44014ca4374bf38f3c3fc3ee327733b0c8aee1abcd055772f18dc04603f7b2c1ea69ff662361f2be0a171bbdcea1e5d3f
+Ciphertext = d9ab48c7195d8dd8860860688b8b66a74b3798a97647d8106352d1e3d8bb6c353e2e561478d396fb432ab07392f5fdd39d610c8e046ffc5fe5eb8736ce87f43a05ec4f4bfb0142a1d32fde8bea7af6b9e22a3fe3823a979f73cd4f4eacc145e5e043dd1a3e2183d0ae3a1aa5d8fe78d9dd867c4bd54ab149bfaefc66647f8948881f712ed7b1eabdab62b71caea6f0face592ab5fcb668752bfa7cbc39a00d05
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 6a7082cf8cda13eff48c8158dda206ae
+IV = bd4172934078c201
+Plaintext = 940bc76d61e2c49dddd5df7f37fcf105
+Ciphertext = 05a31cd129886c6458ec0739472556de
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 625eefa18a4756454e218d8bfed56e36
+IV = 73d9d0e27c2ec568
+Plaintext = 360dc1896ce601dfb2a949250067aad96737847a4580ede2654a329b842fe81e
+Ciphertext = b046b49207973f946668d49d3cd93a13bc9cf50bab20f40cca024e2fc3dd17ea
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = fd6e0b954ae2e3b723d6c9fcae6ab09b
+IV = f08b65c9f4dd9500
+Plaintext = a206385945b21f812a9475f47fddbb7fbdda958a8d14c0dbcdaec36e8b28f1f6ececa1ceae4ce17721d162c1d42a66c1
+Ciphertext = c25cbe4acc9e6909ed195e257a5f28beb77ceb614c538ef531b18778bbbfe1d25d70e4c9b37c4d1d9cde4361206f6173
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 7b1ab9144b0239315cd5eec6c75663bd
+IV = 0b1e74f45c17ff30
+Plaintext = b968aeb199ad6b3c8e01f26c2edad444538c78bfa36ed68ca76123b8cdce615a01f6112bb80bfc3f17490578fb1f909a52e162637b062db04efee291a1f1af60
+Ciphertext = 08186d727f2bf0eee50e52f98775ae222b67b037f40f8a803aa6196fb200ee45a5183ccd4942677d4abe617a6c41c9c565dd79d44de12d9291f434939639e59c
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 36466b6bd25ea3857ea42f0cac1919b1
+IV = 7186fb6bdfa98a16
+Plaintext = 999983467c47bb1d66d7327ab5c58f61ddb09b93bd2460cb78cbc12b5fa1ea0c5f759ccc5e478697687012ff4673f6e61eecaeda0ccad2d674d3098c7d17f887b62b56f56b03b4d055bf3a4460e83efa
+Ciphertext = 0b13ebbec3b66a240dc11cecb1b3a6d5cf2770d529f852a405da596170fa6067a28f07f41c9d520b6d7c3163395dbe875995809f24a4243e0e80e735d3d92307e07775300e10ee57ab916a043c29d3cc
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 89373ee6e28397640d5082eed4123239
+IV = 1a74d7c859672c80
+Plaintext = 45efd00daa4cdc8273ef785cae9e944a7664a2391e1e2c449f475acec0124bbc22944331678617408a1702917971f4654310ffb9229bec6173715ae512d37f93aaa6abf009f7e30d65669d1db0366b5bce4c7b00f871014f5753744a1878dc57
+Ciphertext = d3ed4e4fc32dc0342ec301817899967f3a47737e2691fecf6799fa9c8d41362107be6fa674320befc87ccf9fecbf03dec5be160433f450bfd89d8fc3312232efae95661ee55f10eb2a52f9590c4d7e2c656f6779f6f677190c7349273daebab4
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = bab0cceddc0abd63e3f82e9fbff7b8aa
+IV = 68b9140f300490c5
+Plaintext = c5585ff215bbb73ba5393440852fb199436de0d15e55c631f877670aa3eda9f672eb1f876f09544e63558436b8928000db2f02a5ad90f95b05ac4cf49e198e617e7678480fdf0efacc6aae691271e6cdd3541ebf719a1ccaedb24e2f80f92455dd5910cb5086b0960a3942ec182dcbd7
+Ciphertext = 7ca59cefd0c1f0190af2c8b85d00b7e5838aee42274f26cf08fd0b4ae539c1966367960b0600425e50c802dc94427f0ccf713de467a61319ce05d23c5a5db4d43ac0b0762b2f6ad9e7076df190c50f41788a02317ecfb2e59c42b31c151f9c93f4b1cac3c37e2aafa00ba2d27dbf6b63
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 9c702898efa44557b29ed283f5bc0293
+IV = cec6e1b82e8b2a59
+Plaintext = 1d1f8d81bdc3e2c7cb057f408e6450000c5aaed3260ff1e87fbb6f324df6887ffd8f78d7e2a04c9ed9deda9d64482d2b002f4a2b78d8b4f691875c8295d4a64b22257ceaf713ed2f4b92530d7ad7151d629acda882b4829577a43990b0948c1149c22fe4273656d1b08833930e8b06709a94579a78fc220f7057bbc1fa9f6563
+Ciphertext = 41bc04fb50553959c10d20550d54280f56b33e988b674dee1112631d18d6f79efe3067d8133bdc8ce334929537d9d19a9f5e05f626e56b45daab02fa58a027a759573f363d995e2a5fc779476bf009accc44435c044d481acf9c8c3228b9a69052ef228d64640ca4dd19352ce6257bc5658084f96fdc99790b676a0556f92c51
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 5674636dbdb38f705f0b08c372ef4785
+IV = 3f20ce0509b57420
+Plaintext = 6d40fd2f908f48ce19241b6b278b1b1676dffd4a97ce9f8a1574c33bc59237deb536bee376fd6c381e6987700e39283aa111cf1a59f26fae6fb6700bf012646a2ab80239bf5e1632329043aa87d7911978b36523a2bc0bed9a9737ccf7a00baa2f3822b4e9e742e168e7069290705fed2eb63aa044b78f97dd33a8d6b24741ec1fd8c8db79d93b884e762dba0f406961
+Ciphertext = 52392c00281497aea7e057bd31ee71ad818674c2dd10782e395f9a59ca7b191331cb8576f0f38db240fef904d52ca9181f309e43525e5f2f2a9dc2083360cdef4bd92f61d0b54c1955429df1f3dea48edce637f33c94ce8bd1bd2dbcaa929f3a1d184753238794c585e81cfe5ade7fe86ece0d6a196d8db0282cbadc40913c3973e0c1437ab94cd59370504e9fbc5511
+
+Availablein = legacy
+Cipher = IDEA-CBC
+Key = 97a1025529b9925e25bbe78770ca2f99
+IV = d4b4eab92aa9637e
+Plaintext = e8b89150d8438bf5b17449d6ed26bd72127e10e4aa57cad85283e8359e089208e84921649f5b60ea21f7867cbc9620560c4c6238db021216db453c9943f1f1a60546173daef2557c3cdd855031b353d4bf176f28439e48785c37d38f270aa4a6faad2baabcb0c0b2d1dd5322937498ce803ba1148440a52e227ddba4872fe4d81d2d76a939d24755adb8a7b8452ceed2d179e1a5848f316f5c016300a390bfa7
+Ciphertext = 0100f7adc870bedd878236fa1d6c23b5a0343546a18567b80ce4d8413854aa1e1633e8ef3c4ed53e90de2a4f11940ea6b6d59321235a6b08aba07339c9b645796729d8c18e23f0ce9e8010f0b3da765a47cbbf9635a40b0f3e56e76748290f83fdf8d1452f91d6ca2cc6d1ab2b967d51f3a9a47e0f0a51d00be2eec0f3da2aa7c06793fda880a93284e7ab3009a52f7d34b76592b3d5bdbe6332505af816a1a4
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = 80000000000000000000000000000000
+Plaintext = 0000000000000000
+Ciphertext = B1F5F7F87901370F
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE
+Ciphertext = DEDEDEDEDEDEDEDE
+Plaintext = D2058501E91225A5
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF
+Ciphertext = DFDFDFDFDFDFDFDF
+Plaintext = E35E6B186283F441
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
+Ciphertext = E0E0E0E0E0E0E0E0
+Plaintext = 242588C5F782A93F
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1
+Ciphertext = E1E1E1E1E1E1E1E1
+Plaintext = 7095A50C1E99E008
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2
+Ciphertext = E2E2E2E2E2E2E2E2
+Plaintext = 9933DF5A78A355A8
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3
+Ciphertext = E3E3E3E3E3E3E3E3
+Plaintext = D1D945E51221B893
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4
+Ciphertext = E4E4E4E4E4E4E4E4
+Plaintext = 915D915B79B927ED
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5
+Ciphertext = E5E5E5E5E5E5E5E5
+Plaintext = E0C9897A94D0F2C4
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
+Ciphertext = E6E6E6E6E6E6E6E6
+Plaintext = 911E376BF4497437
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7
+Ciphertext = E7E7E7E7E7E7E7E7
+Plaintext = B82FAE4092690A95
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8
+Ciphertext = E8E8E8E8E8E8E8E8
+Plaintext = E6ACA65966B4AC3F
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9
+Ciphertext = E9E9E9E9E9E9E9E9
+Plaintext = DFA504DD9CCF1E78
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
+Ciphertext = EAEAEAEAEAEAEAEA
+Plaintext = DF00C0F695286D74
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB
+Ciphertext = EBEBEBEBEBEBEBEB
+Plaintext = A3BA29F79071549E
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = ECECECECECECECECECECECECECECECEC
+Ciphertext = ECECECECECECECEC
+Plaintext = BB46376E1CF4EC6A
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
+Ciphertext = EDEDEDEDEDEDEDED
+Plaintext = 1195A6DE7052280E
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
+Ciphertext = EEEEEEEEEEEEEEEE
+Plaintext = 415E756EFDCB7A4A
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
+Ciphertext = EFEFEFEFEFEFEFEF
+Plaintext = 56A88197AE5924BD
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+Ciphertext = F0F0F0F0F0F0F0F0
+Plaintext = 89951D70270C9B17
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
+Ciphertext = F1F1F1F1F1F1F1F1
+Plaintext = 2A775028D170B29C
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2
+Ciphertext = F2F2F2F2F2F2F2F2
+Plaintext = 9A4CF8B7C599EF4A
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3
+Ciphertext = F3F3F3F3F3F3F3F3
+Plaintext = F9966866D43965CD
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4
+Ciphertext = F4F4F4F4F4F4F4F4
+Plaintext = 80E41CCC7641E959
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5
+Ciphertext = F5F5F5F5F5F5F5F5
+Plaintext = 0B7C702996413B45
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
+Ciphertext = F6F6F6F6F6F6F6F6
+Plaintext = EB69BC3BF5B3FEA5
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7
+Ciphertext = F7F7F7F7F7F7F7F7
+Plaintext = 36BF2856E58435EA
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8
+Ciphertext = F8F8F8F8F8F8F8F8
+Plaintext = 1CD03F0A40A7B20C
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+Ciphertext = F9F9F9F9F9F9F9F9
+Plaintext = F56AF83339036916
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA
+Ciphertext = FAFAFAFAFAFAFAFA
+Plaintext = 3114B9E8F15EA604
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB
+Ciphertext = FBFBFBFBFBFBFBFB
+Plaintext = 55BC49104267BD78
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
+Ciphertext = FCFCFCFCFCFCFCFC
+Plaintext = 1A578AB6029071AE
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
+Ciphertext = FDFDFDFDFDFDFDFD
+Plaintext = 1C2292FA2BDF8F40
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+Ciphertext = FEFEFEFEFEFEFEFE
+Plaintext = C7E3F87FFE503CC3
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+Ciphertext = FFFFFFFFFFFFFFFF
+Plaintext = 28886D814399E782
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 0011223344556677
+Plaintext = DB2D4A92AA68273F
+
+Availablein = legacy
+Cipher = IDEA-ECB
+Key = 2BD6459F82C5B300952C49104881FF48
+Ciphertext = EA024714AD5C4D84
+Plaintext = F129A6601EF62A47
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = d7d57bd847154af9722a8df096e61a42
+IV = fdde201c91e401d9
+Plaintext = 81883f22165282ba6a442a8dd2a768d4
+Ciphertext = 770e7b0eacc089b7eef410d98d886e9e
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = c9f4ce21b4c7daaa4f93e292dc605bc5
+IV = 5e5a8cf2808c720e
+Plaintext = 8e19c5cacd015a662e7f40cdecadbf79a68081c06d9544b41c2dd248e77633b4
+Ciphertext = 7debe39a58066a7994150d910060b127582de612ff58f9564a92ab45591bec49
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 7a70cc6b261eeccb05c57117d5763197
+IV = bb7b9667fbd76d5e
+Plaintext = 823cbaae3760c85512a3c83fd60bb54b7cfc739b295b63e05ef435d86e19fd15368c89ff08a0f21ce89a728ffb5d75df
+Ciphertext = ab6e0f15cedf272c78fbc7fadcc4ba1ded256668b9bc8302dc3312c0149e656e8fea632b8e20f5ae8675106d7761a366
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 85dbd5a6e73681a51a4a7d4e93ca7d0c
+IV = 89d897c5aa9e0a5d
+Plaintext = e3dbfc6ae1a879870fd22644c8135fe063355dfc0a8dad45c9c6e052e6e085cf717754dc1b49acb04cf340826ffb0da991138f022a9c34923a6a116c98c7d3d5
+Ciphertext = f2175634137d76347f4cd8f44a00282f6144dfc0cde4929457f8f180f62aabd180249d4568405d9d596be34802ded7d2e390d77384677c45575eb6865cca7cb2
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 18b9887a34438fb2e759027e54e334b6
+IV = a5be8621e58dae32
+Plaintext = 8cd659df925950b516f737fc92d2fafa008c008c9dfe0e75ed2d68f6ff79399ff2183464b8c37cf31aafc145fcbfac73e3f87eccb435f424bf1c6d6efb504e8e93e8a668a2210e3d3b4fd437ad1a5842
+Ciphertext = b5241fefa40b2f9f015387b0e648843e35549d891702d66c1bf440aeb07432e3299badcc1d56b9ca8c45abcd677cfda10de93e2f3b05b2da1086e4070301989eac95cd7ed311b7de208bf66a59f64d1f
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = da52c0e4609e82ee926174a9eaf90b08
+IV = f2d0c5e86b4ddb40
+Plaintext = 91d6c95a614cf85de16eeabe5976c2a2a9d307042f79a7aaeb7c3c57e1dd8d43bfa458c8c02e4f5ed0c960c9f17e3991dd2e0cb3ede18f96395a484001ef07ca4c97b411ce454aaf0f74242aca03786a93442171bd50a1467b9d663245d24c2f
+Ciphertext = f0decc26c48676592200ae619f0b5111d629733f23a34ce888c862e9ae0886b5e8f93e2c2832d3cde6cccc5499801e7b8790b61e8a13add9da593981e8ba4ec08e46226eb77f8fb40105e040c7a5d84e4df6ee05f3e29832f80db65bc03fd4b6
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 56d6f7e2a870b92d55ff8d6e9c554d2a
+IV = b512f0e11e27fd1a
+Plaintext = e62cdeac43667749701314c546f778a4c758e4f55760e7d729c3783cf7a242edf6ae3fcf0990886434896c945455bfae0e5674aa06ee6fb1512d94df2cac2447eeb849373bb3efbe7bb8d66c8a7ee559b17fc268d6599fcdef7457cdbde5b9c5b692236e4397545f2be97bd44f3993ad
+Ciphertext = b0464ff22110d71452ab1b6c8064b706268a2d849607c734ae20c1d4f55c2b98a4abb7db1759205cd0f870f6dfbc7d4fdd72e60c4e9a4143dc76408340dd6d2c6ce86381511930997a304cf890eec337176c95b834186a9191fbb17b8548e3dc7b10c8b7cb8d0b6bbb26ceac0111477c
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 09f216ff78dfe419dfcef1a855473414
+IV = 722174c892d26529
+Plaintext = 11f435e7e3656fcfa8e0df230311ca21054e84e13c8590e7ec7309f59c174022d467a7302641ee1b6ba46bee4f20bfda108bb78982f670b057dfbfe49da9cfae88490ce17241402b20d2fceb476d3a424e6c406d56ffc85278695d584d6c087cb4012ca2cf4daf284fd15ac1f2e183814957e934bf88dff4d777adfbb54933b5
+Ciphertext = 59cb49f6193b7a8c728049be0a804b3a2ea9c0dfbe84f82b5b0439e33e073168f90053094c37ab3ce34b7abfb6386b23003e73e275ea2fa8da8c2acc18314ffdcd8c0512bed2472e5d82e7e27a0af1d01aecf4a14ad8bb031ad968ec0aacc9d759aa76c58c74400fed536c7482474ce23cb798cc8885713d1a32c174ef6827da
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = cde9b69eea2b6a5588457e35e0a08803
+IV = 52323b54d69a62fe
+Plaintext = 967798995af6f435b3a6f92bff77a11fa44d1426ae0f6e7dbafac27b123c5fc419be52c0ea412c4b3cac05ae89a4c0ce6f5e91a456b1bded5370a1234cf6f6ab5d0253507bc6f3f0573ab97585b67107dec059812323e021e341ad839ea9e3d02aeca43356add48ccef81f693ed53d32ba1c74a35e8a5f7f3115ef834f7daf9948244c4fc31f5487678d3e70fb27abb5
+Ciphertext = dd12abdb3d5ec0e56565f9c9d281095cd97b8dc05f230d23ef0ed671abfe5eb9cfa9b5b7acaad4f2e00f0319de2fa90baa757b3f9f96df735233e433c0b8451dbf84465cf6d26e30198cbb1c6e100822aed49690db1638efb1a3e94039b83de7e1ab9339fa31e93440da61c4a814914c16742470428858336dd2944eaf81e2b93bb279454a4a1e02de7f82657ef32904
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 939aac71e337709855715a57e3a4648f
+IV = 493509b56a92f140
+Plaintext = 9c22efddc7de496a916d15d710de374d57478126ed64c9ad7e823e24d19bfc0cfac3dda0d1c292a3a203f35b26ad94deb20f998caf41cbdd4a08eb5d6cfb46f4ede4896b0569d72c03ec194941af95c0573cc3fe8f045ba19946b382803248f3dd4f9a454b1a3e8e1af02ea8482d637dac96a68275f4a382d3023f9df4892b9032cab9378b1cef5051d6db81226f259d1be4eb23495ac807600536b5b0481754
+Ciphertext = 3ce172ca82e0a649e182b3c4bd235f55936d343810bcbb6e53f6f6934c6cae8cd54212e9acb4379c99d83c6ecb72d915400b86f984d67f394b72fcdad6eafb56298da8ede4ceea5c1cc3e54d6d6505fddb2857470184adf50b287bd3db64b73da05584f78689b6d1215a26ebf18ef83fe38970bb23346a0a6380f77afd206333821646463a9e72124bdaf8c9b3046cfb5a48db37686859f79098cb806135bea0
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 8368189d41eaa20d06a3a2d2a91e43f7
+IV = cf04ac0e4733952b
+Plaintext = 696ca57339840fb3c150e0c111d9e13e
+Ciphertext = 93e074da165bb361804f9183fccf09a7
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 5124c6fdb0856ded76afb6febdaa981e
+IV = 937ebdeec379685a
+Plaintext = 5a5928dd09e78a21256eadb062630a3f0b47ca2376ccae314948143fff2512d4
+Ciphertext = 4876980c4401aad16b3e1eabff960769a1bc8405a985dadc08282d0ff674e4f2
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 6a8f6487e76058bc5a126276e48fdd77
+IV = 6e75d8b8ac097614
+Plaintext = 424ddc343067612fdb426920f40ab4d82e3d4f9485b07fef91617556d3093874840e8110ff375b7a68f98c471ca10acc
+Ciphertext = 948a59cd4ac292743708e7309b9893fbeba832a9996ecccc13a8cc17a7711f00858e5e3d04c0635371191356eb58f78d
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 01963d44aea026b2205238454d5bb73f
+IV = 9442a6e0f3a53f10
+Plaintext = c54cfacd953736a2d8db0b8b63b555253a0ca6f6e05f2e918d18be95669fa85609f827d6da014add2964626670c202b195248fc986372c92adbb10c0e7c36e04
+Ciphertext = 26c746d831f5f7ea08686075d0f180f52b0fcc105494943bc0179fdb01fc437ae60fe3dee725902f11fb3dbbc42184f52b1d5207c71d1e6fe0e83b3dc2767227
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 4ea87b0b346054c097edc5601b782870
+IV = 9a3e23333b2b2de7
+Plaintext = 0c7734310c5ca82b520bf1e0a1614c7ddd0c002711ef0b239de8fa256e15b32056b992747ff3a3a310d52e9df36275d9192dad61caa16715744552c865c5ae9477a70a2c3a02a01ba176b927445094d2
+Ciphertext = d5f99a34f86f6de38e10712f306add36cfef67ed3bd8dbf0cb32f5ffc1832037cba7168e2249e1c635de1577797898d2573aa6fd61e766cbd0e4e5bc87c5d85fc95dbdc78c26d51a7228515b342f94cf
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 1956f40b2334a6546b3071f2d17f4a59
+IV = 765cfb560c46777a
+Plaintext = 045ad66c515d407ab73ea0c6f6ae869872342fc72956a659945454005e37c76ed07df996ffe1322840cf23843b34346a1e730ab721ddceaf362ed256054c105ed581a80c04ef22ae1b5eb8742c6e3c9c0e0e29fad211b4f40adc1520f7c6821e
+Ciphertext = 7b853c47f4e39a069415f5fe34f857b9b7e846b45999c12a496ce5550834cc26376a90235ae20983c31129b108ffc3cf4431bf379a5907b16c7248df9d40fa5b8e9888bd1c2a45a0812e4bcf71d40bb8a064279d5f3f214eca8bf193b6144bec
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 4e47e1b5c1b489295d3a2bf049f4be2d
+IV = 83fdf064d213df41
+Plaintext = 94a7bed3b5a158e85f9e4778a7de105ff4f3b2a61c2fead82cbe949d7a4ee961a6c62949ba2c69d513d836a455b612c2fbb6ca243a0a18a853cadb6b73b600192de1d51ddf80030718b079fbb581073a06b66ba4ad524d3d09efaa59e6919bca15b2b92bd9f8c17d6e463f4ea5fd5f5e
+Ciphertext = 6130cd5cc68d4bd6055cca1c51281de12652e6df9ac9a24b39d5d2bb3876cc76e7e85f72efbdd9b7d55d8e1a84e17ad3292ba5bd071f39f7b373c807153a4fe553fb44872cb2a7b80d6c97f78eaea3824d501792456667f335e8f33e29f6ffe7736a5b46786c78b3cd9e8bd3498e7c4c
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 613485e5bb84b91cdd0ca02f8d83e0bb
+IV = ad8a7564f6ce8abb
+Plaintext = ed5068003163c424ae9a8e51e3d77684c69073a824dc4721568f7528657c3dd28d66219f398ed57105aa35cfef3ac078eab30ae0f3ed752b0e320b099ea42b156f818904c4b6c534cabde53dfa62e7b74518a8bca3f36ee85b130e8520d38c006e6adef34bbc8df56b757b500d703e5777aa545c4170404754f03dbf22c9f0d7
+Ciphertext = cada42aeaf73266caa8537f853fbc710df59f6e7809ca07e6131ba41c3cd413433c3f26faf5fbceb50238e150f6d613cf4bcf79416abada400a827dcfd2320a5d19ac7ff6fd725a30ae3c739ed9f6d9495f36ce414abc338cf52e7a351de4dfa54b52660370678529dbd7c36770399ab90a44f95dd5a837dde12b28da8a06ee7
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = 8198b36e880cf50dbf6724feaaac8688
+IV = fbaa2882a2a4acdb
+Plaintext = b2516a356e437513f0df83938afefbe9f9ef1ec879797997f31da96a1ea7a15d395ecdb94b7fda14cdc0b75c171784fa8832d574b64f9450c6be25dc83b93d3bbf0145a661bf4db775282b98649b64613aeedb8bb770f67cc3421ac6761e5d763c21ac2d1e729e4597ad7fca9fdc70878b26634df78cd0f36fb3b138a1357915abba4ff5f8dfaef268307022f2e23528
+Ciphertext = 14ba2c1e1fc015568184c1346b09469366db7d1dc151d08a8f99ffa22115a30a5a6dd5c2d6fbd09e03134710f1902ceab86069551630d3f614e67d195a7422b2c70225c5ebbecf7fbabf8db05c21025102225cdf2093fba3bd4ba1f1674c305a99cde36e1d112467466489c4f04a55fa495b610ee616749dc5c9f7ca3eb4ee35989402a91ff0085128077eb03e5d6ac1
+
+Availablein = legacy
+Cipher = IDEA-OFB
+Key = e30b4c874c4c4f6e0cf1f8ef58e5d375
+IV = 7e26f07f8024343c
+Plaintext = 8ceca4dc346cfd6b15774e082db1a89497b7d85d6b5b7102e77417f7a243fafe17118b7a3bb49d1657cf61b866da395a5b3f349183a53dfa11fc0ac053bddff49dd472ee55f5e43a2f8bc785e2bc420300694919ff7bb43feb75a9cac44ece96f679e618db5d7433af12dcc7e0963ff10b45d835f9a8f42627e7f3fd5038932685965ad0e183f5955e671fc2b878dd51051eedaf85310d1e4e8f75f2decf36c7
+Ciphertext = fc1991515ffef84ce1074d0f7e7ce9a2dd0b56facbaf4b5f2c617963c6df3ea9c6d1242abbab76160cc159a81e51fef33835546429b6bc026e4f091c89a8a9e0707747fc85083c776e5603ef2383c3e5e5ae493013b4940df54c9a050bc2b696f03a234fad58506b10aacbb48de0c91ef39ebe76a9e5540ec6284eed13cc17c72dad54555aed4ae60359dfa8b1c4e8bdcea6abc458dc1452a623d8f3fe13e2ae
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = 085b8af6788fa6bc1a0b47dcf50fbd35
+IV = 58cb2b12bb52c6f1
+Plaintext = 4b5a872260293312eea1a570fd39c788
+Ciphertext = 5d9c48bf7dc115f28e153dc93dfcff96
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = 701ccc4c0e36e512ce077f5af6ccb957
+IV = 5337ddeaf89a00dd
+Plaintext = cc1172f2f80866d0768b25f70fcf6361aab7c627c8488f97525d7d88949beeea
+Ciphertext = 4ec6f34be3335024cbfbbf80f3e7501b8c9f7a6cbd630cf8debba4a4c3f1daa4
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = 0a8e8876c96cddf3223069002002c99f
+IV = b125a20ecd79e8b5
+Plaintext = 4fd0ecac65bfd321c88ebca0daea35d2b061205d696aab08bea68320db65451a6d6c3679fdf633f37cf8ebcf1fa94b91
+Ciphertext = a562b606f716af7fd9641b5ebc66e4cad7e9422200a83b07e5341814b33590d26dba38db01c19bac669dc469f4c2eb9b
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = b9ba9fa32cc491d8ac2beb5f99193d57
+IV = 95511452b71e53e9
+Plaintext = b40382705aaeea41097c309da6cd06010f15e09c0130fa4b3af69cc8da109d1f0f0a2661f1a8b89bab7e7009dcbb8a883d46254a830c45cd87981e0ea4e490fa
+Ciphertext = 5294eb7f0f7872e20a2012675a1fbcb059a9c2bec5231dfe72e6dd7826b86af365b6beb33a23ebfec6184e790d3002b8ff81eedd84b73edc3ac539230e23c65b
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = 5947bbd78b06bb5ea2fc67ed7b24216e
+IV = 8e4722ad2230b15f
+Plaintext = 9e69423653c20c982794ed35d63c1a78e8ac14f37e1888ae4bf273bfe119891b2e4ed8ac46e7a9a463c7a710298d43b02f0c5606bcfc08adceeef2ec61867f8bede498e53163803f2f86fc58782fb841
+Ciphertext = 4fb93afc260b40f575f1fe95609737f158c61c40f23b13845cda507f5baf20c31c3d3c85726fbb0b89751498ef29f123fe0767fc550e71e38e0db5d52b507f7e2321a37bc0959410ffb785bcdaede128
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = abce650e78f969b3b210151c74117fd2
+IV = bc4659fbb7073c1f
+Plaintext = 322eae07df5ad2ddd64bba34e42d30c1b884f842e71efa123345a3fb0c39884c57dd4c2c6fb0c42e69ff5a269d59af3a6144853c182edb376ca65947d7ccefae6806ba25c4f527706ba85a353c0fd10e3cb244dd93a2d060d7b055058dde1dff
+Ciphertext = 800a13afd1ccd50aaada08a18ed61674aa9b9cc84d6fe1220bc0acc19f973ad5414da099359ef259b2d63e8b1e5cc0ba6258ab48f1603252199f7631a513330fcbf383d8de82a6b2a2c2870f8c06a635076c40c8f98dbc35f09f372db8fd3834
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = 9f56e19b09dd3fee0e110f71e9967b7a
+IV = 1155cf4231bf7ac5
+Plaintext = ad1e4d3162a5084f581117639a13fc35df5449625ffe0f01e57d9a8726875be8515926ffe7449e30cd69ed4ca0c1b8b4486051c2d0fa2f6474a69c0afce2aec349d778a22edf81678145765b714c1b7c197287da56f59141d6978618729e1d89be20ace3de7d9b3c9b2d195ab6bc0fd4
+Ciphertext = 4dc8bbf26235b8858157cf03165ce61bdb25f3a2773b27db0c5e23dd14f7c4971f8b8ca65f61ef6ed7f348da0201d1e6ac2c45d431a31116ca89beb0e503f0c078848e5f982981406d0d72a46cc9e48da09cd5fca0aa8b97b8120f798a1f6f8316e677023028b219d844619e269608ff
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = 31c485c996d6ceb2d17e0aa05b2490e4
+IV = 8c37f33405051b4c
+Plaintext = ac68de6a2c2144c6b4fd975a8dec93447391e7c9a4fde63d36be7f23ad186f96cd92b5e8adb546880d100329e97fe8204fad860e6dd8b3c0eed4805387536b9ccc63d6c74938b83dce2c93cc0a04a6025b7563d9e5e7239ae27819fb3844848a51e4294f273401ad9e592f8a170334b042f0667233b29f92b9b13262eb73232a
+Ciphertext = 1777835b641860aae245fe67750d514ba3f0ebd1c9a1179f258999cf5e1a6f850db6dc5cb3088cb262fe5086ca4b75be1cf4ad8d795c99a6d392da940c41a190d0eb38c3ea6b54c771a382d0969b2f1975c9e6d22f4c651eab379302e656d3d316424fda315128462c49364cdac824673883b06ac67781f1ca7c80b5cad92e97
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = 556ccfa360ecb5025032dddb124cad4d
+IV = d54c6fdcc85dc0a2
+Plaintext = 71fbf180effac3dca0d69d40e4017dbe50455396f9fb6507ef7df26507de156cded8edd41a05fb25f352cbcdf3b2d770f90fa87f84863e0c2ed3b2dd770a1abfc489ad1ca82a28d061bd7039a6b5788da021657136def0c78d0b0cc7cfbec9512cf579811fd01185f3fdd2ab857328be4b63d293956b43df130e484b9861eccb1d06992b095e7febb0fb394c1954aeab
+Ciphertext = 9ceb25ce05eeee39452995468321c2b73c39f60082d7c91d129304f5802d3e559c099ccb00aeab4e274d47397268ab7367d055a336a52dd314402e2accb0925372028157a3ef60bd97427855117379bd70e05a3cbafe9acfc19e5ce78262011d1f2dfa1e67ec214469fab9a9e1a92e2591acfcfbb2376559433de491217260996637856930b57cec36f3f091940370a3
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = 7cb81fc4b203b0fa9bec49759bd515c2
+IV = 4d5e2fa3bf73f488
+Plaintext = 362789b376d85eb8181d4eeea52d42e873ce7741c11a2f820383a7457b15489b09fb21ac4445959dc9e851b7d40682c50d7044bda46a5da39fae2bab73b3db9ed22edc7ec5da936dfa7451cb5f0a829ff0762738cc2686148f1e1f00dc3fe38139c9a173201fc1f052ca34736fc1ab3dc4e707f864d6119b7adb6c8ddd41c80de5d357d17e9c85ed7af1e4f72cb2656932ccce469202680109eef89a9f42f10a
+Ciphertext = e0456318fb7a2318181f4b847e3952cdc5f09e6f12631a89d7d86c108a9d14e49368bdc65366cf4c42c98e31641bb63439314010bafb88f83a300f8ca107e95d689738f29ce399348a8418baa2cc57b935640d574ea7b2f0205b62a68b0c7aca3c58f3181c5892c21036acdb241d933e1bd05e764fe8297131b9c7c7a99d2aa202f07312b4d48df43b973cf51b9fbc895284a304dc7eabde4eafa58325b984e4
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = beb622d0228cde29b342bbcf4c1c83b4
+IV = 75c282fa581d9c67
+Plaintext = 860476c81685b58e71e2599efe083ce5
+Ciphertext = 1a68dff188262ef7525fe051199fb940
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = c4666081e0b0eddb10a9a607c807378f
+IV = 5f23623288e4a41b
+Plaintext = 2fd02dab9054248073ebc0b07aed383756ccfa4fa6298722775be6a9b4ed27a5
+Ciphertext = eb5d94d1d12b97ae3814ddf3b9c8c9aab689ce912334b3054f14e8082334cd1c
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = df010376a6b03279338773a70e012382
+IV = 67455decec549365
+Plaintext = 9b9c3dea553ec235db0011b27191544171845b7bdda0dc04a089583959bba5ab7048f8ca87eab073a8b824fdd4e82e40
+Ciphertext = bbe775751f4b704f3cb0dbb43441111675f63c54668d34c1fc50d3a6c428217a009a167d9162f4d93dca391979002164
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = ff01aa4f7106c6bd24399076f901a530
+IV = 089b4f6054eeeef7
+Plaintext = ae9cb9dfa305af83e95a3b2099f70907edcd49fbc6efc5ebe744184c76b4f56bf35774f3fe215e1c8ee42172a2dd3e6f9ccd3d9bb044325e61a6bb97e48e9986
+Ciphertext = e1ad6de3d5ed15b7fd560482478f5e5e7673657eab175e03d71cb1f80d8e476e7b976c4b0a6c2a6a2d5fd2b20f4f6cc8b56b46adb9a97db56deba7e9d2b8d817
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = d33d4062ab32298eafcca86b5088d5fd
+IV = fcfffce8b020240f
+Plaintext = 1fe1318adb99e6d4fced292902fe8c831ba488a43f85964d6ff54b322663b380bc99fed15568278cfe1d0af795c71355bf65e876855763655eec3abf3d4b27a0341d607f4bfbd82c8900fd436f7c4186
+Ciphertext = 5424e2c3d2e00cf2ccefd1ee8ae552ef8122c2bda3624b3e4cbfb23abc309e103e485a8ff677a5ad908ffc72b9e70b4ccf0794a3be537aadd59a30bf5905fa6702d0ba12238f705c20884443ba921c91
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = 47e13544a7bbf74dd68ab5ce66e5bdaa
+IV = 69480b4dd38cf3b4
+Plaintext = 3e2e583a3a0389ca324f2aaa52b7823904ab288dae562995cf1d70c796d785fd361261434eea480ceb3d369d969652c7ff194931c0a9bd978f5ae4094d6ef32d986a092c580ccbf865e5095a7b80559be13f842f9bea9e42a3a01ef8a24a6526
+Ciphertext = 50d3ec47a14c6ac19dc5c8820520c8265e4e0265816e753792ef759ff523aceb904a02e8b10259c9e1d019bb684417f05e431e02541adaec98d725fd1bf11365fca4b97d7c0bfd8294bcc9d72f235899ee7c110dc4ca53fd4974d0cd20055834
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = ae86823695b48e8c612ae5a01b597f97
+IV = b26eef7b1d14894c
+Plaintext = 569a910bc6aa97b8939ca703fc10ce0d171625bc735a1fea7148650541109d955b1b686c6cc404b2d3d92ad9faaff217dc7b31b038b770959aeccd1ca55d650364fde51df8d4f0aeb05fa364f5028f709c179ca6df0bdfc1cb850f238d755ac44a733fce558402be0c70bc0871b8e62f
+Ciphertext = d0dc50553bbc0248e6f8b1d5f7c31aa93fda2addb2cd184a13d0adeb7f2ef8f611d92479bd8b61cf029b406f09921a972f2f0e14a3d790256cff4e812c40b822821c71ba6cb21a3a2c1b463f598d1d5a626d5c9fb85f0aafa1f6bf18aef0db18c9872c0e8588e9646f237be9f32a7550
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = b85df29c9244229835d73441dc37555e
+IV = c1375430efedb2d3
+Plaintext = c232a0bbf967ef28b74e7b809c62bc8c1cf2d52a273a84162900da834448fd567870471498f29770619dec504922e379eaba0d3a712602583d00279d8fc6a6d568cb94a330039a189ed5802abb7a2898c13ef89c00d73fca9a2f2ffc2107ab498212c56835c0fc26f835a69c00bb3eaa695ac20e8bdb0f5b5b6684d02bee8fb2
+Ciphertext = 935458de3bc1a090a7a85eb79a12a3e48defcae8581c59233ce0b2a8b7ad999a99d1858e5e513680a9cb7558b0706ec0be122a33964c4c6d4c880b4e953810ae111f6d3f8e89e8b3a708b199ce6a7476f177fea627eca43439df5c98a414dd8dde088cc380bc10e43a9341114787fa80c7dae515d6a21af4f2d3619a200b9ca0
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = e96771f5f20a89ee871261d2d18e1e46
+IV = 8c664a37d245d26c
+Plaintext = 8aaafd56c5d5d54fbe16f115c3216bd1f4376666931a2ef1ffc5468ad12150c39250dca2d63c6ea166bb0ef4aaa3d5849c1f9c621c55826a1ca362f03bcba4dcbd654b300d16519710130e5360bd949aaded6a648f96dd8937a77287d4a4ac2941729475b635b9797476b4dca4171787ff15882d3b4872ed0999a7546dbb61698e8348f70e4a14981a78156150484532
+Ciphertext = d357c276cc6961fa627b0edf66ec8e5baf035cf19980e53d6be5f3e5fa67de668bc1e27ef04cd2efc216783c4b955f8072af265aa96cc99dcf53ab3ab0fa024efca1087f0851a6b392f4aef1ac946fdd0fc1320a395df4d3ce596332aa5a0628b5f8e2aac4cf677a4b3d804a1503bfc879040f90b3a0530f49eb3d8c67d1cb00dad36f6f3a98328984258eae6fab1e6b
+
+Availablein = legacy
+Cipher = IDEA-CFB
+Key = aef49da33f538ee66e178d4b6121055d
+IV = 842566e68b61ff7b
+Plaintext = 415991f65e1a95040cef9960556f61e617827c30c74bf353cdd86173dbe4cc983a2ee6bc8ca6cfb71121e7b0d0178f2e13445c710dcc176b781201971171f7489f18faf110f39accd1cf08c85a958d7698b116f1c0d75812ac9b0b39aee7f7159ccad8fdae9b99f2d695eacf12c6469d5b51a34de26eac73613dcb2f77122cb1f8dd5162786a12052dc7b6dea6acc4989dcc7eafd9374f6c29697c74749ef16d
+Ciphertext = 11690969c6b2bf0f1c42a42d44049062c885499eadcb350e81d22c6caf7d499502e706ca3137e3a5d8cfb56354003aa8a1fb3c30767d6f8e5255b4e31c3325924b95494144fb02c257995e2e59f9017d5a32e1d2bf285bf404554dd6bf7077ba1d48d0c08ebe10ad110e66148b17d43f341d72da027033cd0b75bb3ca3a046557b39bed024e9ff5b08725d357ed22aede4a33dfcc4b61b34ba0d32230e572f6f
diff --git a/test/recipes/30-test_evp_data/evpciph_rc2.txt b/test/recipes/30-test_evp_data/evpciph_rc2.txt
new file mode 100644
index 000000000000..e2dc9efd050e
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_rc2.txt
@@ -0,0 +1,126 @@
+#
+# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+# A valid set of RC2 test vectors could not be found for all RC2 modes - the
+# following values were generated using the deprecated cipher code, in order to
+# confirm that the new provider code is equivalent.
+Title = RC2 Test vectors
+
+Availablein = legacy
+Cipher = RC2-ECB
+Key = 0000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = a4085a9f3e710563ae3b1e8c4339122b
+
+Availablein = legacy
+Cipher = RC2-ECB
+Key = 0000000000000000
+KeyBits = 63
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = b406b9037baf2d86982af542e6d70b13
+
+Availablein = legacy
+Cipher = RC2-CBC
+Key = 0000000000000000
+IV = 0000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = a4085a9f3e710563d1091a1552ba8962
+
+Availablein = legacy
+Cipher = RC2-CBC
+Key = 0000000000000000
+KeyBits = 63
+IV = 0000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = b406b9037baf2d866614ef5e55e95b8d
+NextIV = 6614ef5e55e95b8d
+
+Availablein = legacy
+Cipher = RC2-40-CBC
+Key = 0000000000
+IV = 0000000000000000
+Plaintext = 0102030405060708
+Ciphertext = 61ae28bcf59d1f6f
+NextIV = 61ae28bcf59d1f6f
+
+Availablein = legacy
+Cipher = RC2-40-CBC
+Key = 0000000000
+KeyBits = 63
+IV = 0000000000000000
+Plaintext = 0102030405060708
+Ciphertext = c1d8e65290b2f06d
+
+Availablein = legacy
+Cipher = RC2-40-CBC
+Key = 000000000001
+IV = 0000000000000000
+Plaintext = 0102030405060708
+Ciphertext = b3ddf36b5c81b0db
+
+Availablein = legacy
+Cipher = RC2-64-CBC
+Key = 0000000000000000
+IV = 0000000000000000
+Plaintext = 0102030405060708
+Ciphertext = 191d1abf767bfbe7
+
+Availablein = legacy
+Cipher = RC2-64-CBC
+Key = 0000000000000000
+KeyBits = 63
+IV = 0000000000000000
+Plaintext = 0102030405060708
+Ciphertext = 191d1abf767bfbe7
+
+Availablein = legacy
+Cipher = RC2-CFB
+Key = 0000000000000000
+IV = 0000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 81b5cc4d43119e987a2b526ea152f3fe
+
+Availablein = legacy
+Cipher = RC2-CFB
+Key = 0000000000000000
+KeyBits = 63
+IV = 0000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = ebb671fa972288f87cb1810b91f2ae39
+NextIV = 7cb1810b91f2ae39
+
+Availablein = legacy
+Cipher = RC2-OFB
+Key = 0000000000000000
+IV = 0000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 81b5cc4d43119e9849bdb7ef7fb35eb7
+
+Availablein = legacy
+Cipher = RC2-OFB
+Key = 0000000000000000
+IV = 0000000000000000
+KeyBits = 63
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = ebb671fa972288f8f8587d8069d61d58
+NextIV = f051778b65db1357
+
+Availablein = legacy
+Cipher = RC2-OFB
+Key = 0000000000000000
+IV = 000000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Result = INVALID_IV_LENGTH
+
+#Variable key length is allowed for RC2
+Availablein = legacy
+Cipher = RC2-OFB
+Key = 0000000000000000000000000000000000
+IV = 0000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 1df8d70bb9c66ffc37869d8ed80d796b
diff --git a/test/recipes/30-test_evp_data/evpciph_rc4.txt b/test/recipes/30-test_evp_data/evpciph_rc4.txt
new file mode 100644
index 000000000000..61511e0f3f11
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_rc4.txt
@@ -0,0 +1,78 @@
+#
+# Copyright 2019 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
+
+Title = RC4 tests
+
+Availablein = legacy
+Cipher = RC4
+Key = 0123456789abcdef0123456789abcdef
+Plaintext = 0123456789abcdef
+Ciphertext = 75b7878099e0c596
+
+Availablein = legacy
+Cipher = RC4
+Key = 0123456789abcdef0123456789abcdef
+Plaintext = 0000000000000000
+Ciphertext = 7494c2e7104b0879
+
+Availablein = legacy
+Cipher = RC4
+Key = 00000000000000000000000000000000
+Plaintext = 0000000000000000
+Ciphertext = de188941a3375d3a
+
+Availablein = legacy
+Cipher = RC4
+Key = ef012345ef012345ef012345ef012345
+Plaintext = 0000000000000000000000000000000000000000
+Ciphertext = d6a141a7ec3c38dfbd615a1162e1c7ba36b67858
+
+Availablein = legacy
+Cipher = RC4
+Key = 0123456789abcdef0123456789abcdef
+Plaintext = 123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345678
+Ciphertext = 66a0949f8af7d6891f7f832ba833c00c892ebe30143ce28740011ecf
+
+Availablein = legacy
+Cipher = RC4
+Key = ef012345ef012345ef012345ef012345
+Plaintext = 00000000000000000000
+Ciphertext = d6a141a7ec3c38dfbd61
+
+Title = RC4 tests (From RFC6229)
+
+Availablein = legacy
+Cipher = RC4-40
+Key = 0102030405
+Plaintext = 00000000000000000000000000000000
+Ciphertext = b2396305f03dc027ccc3524a0a1118a8
+
+Availablein = legacy
+Cipher = RC4-40
+Key = 833222772a
+Plaintext = 00000000000000000000000000000000
+Ciphertext = 80ad97bdc973df8a2e879e92a497efda
+
+Availablein = legacy
+Cipher = RC4
+Key = 0102030405060708090a0b0c0d0e0f10
+Plaintext = 00000000000000000000000000000000
+Ciphertext = 9ac7cc9a609d1ef7b2932899cde41b97
+
+Availablein = legacy
+Cipher = RC4
+Key = ebb46227c6cc8b37641910833222772a
+Plaintext = 00000000000000000000000000000000
+Ciphertext = 720c94b63edf44e131d950ca211a5a30
+
+#Self generated. Long key
+Availablein = legacy
+Cipher = RC4
+Key = ebb46227c6cc8b37641910833222772a00000000
+Plaintext = 00000000000000000000000000000000
+Ciphertext = 358b23dba47770e72c7ea8ce5bd68da3
diff --git a/test/recipes/30-test_evp_data/evpciph_rc4_stitched.txt b/test/recipes/30-test_evp_data/evpciph_rc4_stitched.txt
new file mode 100644
index 000000000000..e421c5e97d7f
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_rc4_stitched.txt
@@ -0,0 +1,22 @@
+Title = RC4-HMAC-MD5 test vectors
+
+Availablein = legacy
+Cipher = RC4-HMAC-MD5
+Key = d48ecc0a163a06626bd1b7e172dfb5b3
+MACKey = 5973581f63768353af37d3f51ec9f6ef
+TLSAAD = 90a1b2c3e4f506172803010050
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Ciphertext = eea8eba927d9b16c640958f922b3ca43b197eea520674aa1d059156dfd4c12249e2890e8f3c72676e20fe4a30848c1cc6c12f4596d6e290b5f84745ac36959645ea4acabc84e748b2fd5e4228a2fe4f8c5792501fca9d8455160d626dc1a9716
+# DECRYPT must be a separate entry due to change in TLSAAD value
+Operation = ENCRYPT
+
+Availablein = legacy
+Cipher = RC4-HMAC-MD5
+Key = d48ecc0a163a06626bd1b7e172dfb5b3
+MACKey = 5973581f63768353af37d3f51ec9f6ef
+TLSAAD = 90a1b2c3e4f506172803010060
+TLSVersion = 0x0301
+Plaintext = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Ciphertext = eea8eba927d9b16c640958f922b3ca43b197eea520674aa1d059156dfd4c12249e2890e8f3c72676e20fe4a30848c1cc6c12f4596d6e290b5f84745ac36959645ea4acabc84e748b2fd5e4228a2fe4f8c5792501fca9d8455160d626dc1a9716
+Operation = DECRYPT
diff --git a/test/recipes/30-test_evp_data/evpciph_rc5.txt b/test/recipes/30-test_evp_data/evpciph_rc5.txt
new file mode 100644
index 000000000000..8c84a99831e7
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_rc5.txt
@@ -0,0 +1,129 @@
+#
+# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+#The following tests were generated using legacy code, to ensure that the
+#provider ciphers have identical results.
+Title = RC5 Tests
+
+Availablein = legacy
+Cipher = RC5-ECB
+Key = 00000000000000000000000000000000
+Plaintext = 0000000000000000
+Ciphertext = 21a5dbee154b8f6d
+
+Availablein = legacy
+Cipher = RC5-ECB
+Key = 00000000000000000000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = d9d37019aec1161b27d7ad56b21f0f42
+
+#Self generated. Bigger key.
+Availablein = legacy
+Cipher = RC5-ECB
+Key = 0000000000000000000000000000000000000000
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 610084f3e141cbc5455b82e2d56da565
+
+Availablein = legacy
+Cipher = RC5-CBC
+Key = 00000000000000000000000000000000
+IV = 0000000000000000
+Plaintext = 0000000000000000
+Ciphertext = 21a5dbee154b8f6d
+NextIV = 21a5dbee154b8f6d
+
+Availablein = legacy
+Cipher = RC5-CBC
+Key = 0102030405060708090A0B0C0D0E0F10
+IV = 0102030405060708
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = eeebae12d768ac9e5b3d6072a9c76c65
+NextIV = 5b3d6072a9c76c65
+
+#Self generated. Bigger key.
+Availablein = legacy
+Cipher = RC5-CBC
+Key = 0102030405060708090A0B0C0D0E0F1000000000
+IV = 0102030405060708
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = af64972111a80ec28871c51dd4bfe8de
+NextIV = 8871c51dd4bfe8de
+
+Availablein = legacy
+Cipher = RC5-OFB
+Key = 00000000000000000000000000000000
+IV = 0000000000000000
+Plaintext = 0000000000000000
+Ciphertext = 21a5dbee154b8f6d
+NextIV = 21a5dbee154b8f6d
+
+Availablein = legacy
+Cipher = RC5-OFB
+Key = 0102030405060708090A0B0C0D0E0F10
+IV = 0102030405060708
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = c0ad101b40fc7ffdfc386ea5ecf458b7
+NextIV = f43164aee0f956b8
+
+#Self generated. Bigger key.
+Availablein = legacy
+Cipher = RC5-OFB
+Key = 0102030405060708090A0B0C0D0E0F1000000000
+IV = 0102030405060708
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 66ff8fee03d45533dde93632e8f81f6f
+NextIV = d5e03c39e4f51160
+
+Availablein = legacy
+Cipher = RC5-CFB
+Key = 00000000000000000000000000000000
+IV = 0000000000000000
+Plaintext = 0000000000000000
+Ciphertext = 21a5dbee154b8f6d
+NextIV = 21a5dbee154b8f6d
+
+Availablein = legacy
+Cipher = RC5-CFB
+Key = 0102030405060708090A0B0C0D0E0F10
+IV = 0102030405060708
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = c0ad101b40fc7ffdeb97c6173bf2987e
+NextIV = eb97c6173bf2987e
+
+Availablein = legacy
+Cipher = RC5-CFB
+Key = 0102030405060708090A0B0C0D0E0F10
+IV = 0102030405060708
+Rounds = 8
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 439945301dfa830885ac2f3cf5e61d0e
+
+Availablein = legacy
+Cipher = RC5-CFB
+Key = 0102030405060708090A0B0C0D0E0F10
+IV = 0102030405060708
+Rounds = 16
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 5ad80530f4a19e622d03cd4f2b165730
+
+#Bad rounds
+Availablein = legacy
+Cipher = RC5-CFB
+Key = 0102030405060708090A0B0C0D0E0F10
+IV = 0102030405060708
+Rounds = 9
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Result = INVALID_ROUNDS
+
+#bigger key
+Availablein = legacy
+Cipher = RC5-CFB
+Key = 0102030405060708090A0B0C0D0E0F101213141516
+IV = 0102030405060708
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = b3724d2d9d1b9285e1338fd266c2277d
diff --git a/test/recipes/30-test_evp_data/evpciph_seed.txt b/test/recipes/30-test_evp_data/evpciph_seed.txt
new file mode 100644
index 000000000000..c93b20b8e00f
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_seed.txt
@@ -0,0 +1,405 @@
+#
+# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+Title = SEED CBC Test vectors (from RFC 4196)
+
+Availablein = legacy
+Cipher = SEED-CBC
+Key = ed2401ad22fa255991bafdb01fefd697
+IV = 93eb149f92c9905bae5cd34da06c3c8e
+Plaintext = b40d7003d9b6904b35622750c91a24575bb9a632364aa26e3ac0cf3a9c9d0dcb
+Ciphertext = f072c5b1a0588c105af8301adcd91dd067f6822155304bf3aad75ceb44341c25
+NextIV = 67f6822155304bf3aad75ceb44341c25
+
+Availablein = legacy
+Cipher = SEED-CBC
+Key = 88e34f8f081779f1e9f394370ad40589
+IV = 268d66a735a81a816fbad9fa36162501
+Plaintext = d76d0d18327ec562b15e6bc365ac0c0f8d41e0bb938568aeebfd92ed1affa096394d20fc5277ddfc4de8b0fce1eb2b93d4ae40ef4768c613b50b8942f7d4b9b3
+Ciphertext = a293eae9d9aebfac37ba714bd774e427e8b706d7e7d9a097228639e0b62b3b34ced11609cef2abaaec2edf979308f379c31527a8267783e5cba3538982b48d06
+NextIV = c31527a8267783e5cba3538982b48d06
+
+Title = SEED ECB Test vectors (from RFC4269)
+
+Availablein = legacy
+Cipher = SEED-ECB
+Key = 00000000000000000000000000000000
+Operation = DECRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 5EBAC6E0054E166819AFF1CC6D346CDB
+
+Availablein = legacy
+Cipher = SEED-ECB
+Key = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 00000000000000000000000000000000
+Ciphertext = C11F22F20140505084483597E4370F43
+
+Availablein = legacy
+Cipher = SEED-ECB
+Key = 4706480851E61BE85D74BFB3FD956185
+Operation = DECRYPT
+Plaintext = 83A2F8A288641FB9A4E9A5CC2F131C7D
+Ciphertext = EE54D13EBCAE706D226BC3142CD40D4A
+
+Availablein = legacy
+Cipher = SEED-ECB
+Key = 28DBC3BC49FFD87DCFA509B11D422BE7
+Operation = DECRYPT
+Plaintext = B41E6BE2EBA84A148E2EED84593C5EC7
+Ciphertext = 9B9B7BFCD1813CB95D0B3618F40F5122
+
+Availablein = legacy
+Cipher = SEED-ECB
+Key = 00000000000000000000000000000000
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 5EBAC6E0054E166819AFF1CC6D346CDB
+
+Availablein = legacy
+Cipher = SEED-ECB
+Key = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 00000000000000000000000000000000
+Ciphertext = C11F22F20140505084483597E4370F43
+
+Availablein = legacy
+Cipher = SEED-ECB
+Key = 4706480851E61BE85D74BFB3FD956185
+Operation = ENCRYPT
+Plaintext = 83A2F8A288641FB9A4E9A5CC2F131C7D
+Ciphertext = EE54D13EBCAE706D226BC3142CD40D4A
+
+Availablein = legacy
+Cipher = SEED-ECB
+Key = 28DBC3BC49FFD87DCFA509B11D422BE7
+Operation = ENCRYPT
+Plaintext = B41E6BE2EBA84A148E2EED84593C5EC7
+Ciphertext = 9B9B7BFCD1813CB95D0B3618F40F5122
+
+Title = SEED Test vectors (from https://github.com/pyca/cryptography)
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = 085b8af6788fa6bc1a0b47dcf50fbd35
+IV = 58cb2b12bb52c6f14b56da9210524864
+Plaintext = 4b5a872260293312eea1a570fd39c788
+Ciphertext = 5c460dc6a83060ee36ec55c5ce6448c1
+NextIV = 5c460dc6a83060ee36ec55c5ce6448c1
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = 701ccc4c0e36e512ce077f5af6ccb957
+IV = 5337ddeaf89a00dd4d58d860de968469
+Plaintext = cc1172f2f80866d0768b25f70fcf6361aab7c627c8488f97525d7d88949beeea
+Ciphertext = a6841e5e4dea28f28d7a83031442c86e5b68d1048cda42452964df577d3c0abc
+NextIV = 5b68d1048cda42452964df577d3c0abc
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = 0a8e8876c96cddf3223069002002c99f
+IV = b125a20ecd79e8b5ae91af738037acf7
+Plaintext = 4fd0ecac65bfd321c88ebca0daea35d2b061205d696aab08bea68320db65451a6d6c3679fdf633f37cf8ebcf1fa94b91
+Ciphertext = 4081ec9257303ae208eea0411d7977eb82e3b8d4f2d03d299f98fbddd519812c2bbe7af6d5c13b8fa5b15f233911eaaf
+NextIV = 2bbe7af6d5c13b8fa5b15f233911eaaf
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = b9ba9fa32cc491d8ac2beb5f99193d57
+IV = 95511452b71e53e93afad07ba1aa4d98
+Plaintext = b40382705aaeea41097c309da6cd06010f15e09c0130fa4b3af69cc8da109d1f0f0a2661f1a8b89bab7e7009dcbb8a883d46254a830c45cd87981e0ea4e490fa
+Ciphertext = d9add2885d52163ff04060b8ee46a6e02374af2f895e28ac6d2a964ca8e78bcc9e4e2d4a7a4a11cce7a605a5c0b79c7b8f546ce9159014cb4b462454de902646
+NextIV = 8f546ce9159014cb4b462454de902646
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = 5947bbd78b06bb5ea2fc67ed7b24216e
+IV = 8e4722ad2230b15f2eea302173bc1795
+Plaintext = 9e69423653c20c982794ed35d63c1a78e8ac14f37e1888ae4bf273bfe119891b2e4ed8ac46e7a9a463c7a710298d43b02f0c5606bcfc08adceeef2ec61867f8bede498e53163803f2f86fc58782fb841
+Ciphertext = 48af72fe5b7449786965500fe685b9ebbebd15b0afcc9ecc8ce424a931d55462c52dc2cfb41eb17f3cedce1ad1546c348a190846510a427216230575245462b61161c1ef7515e209bc809b66309521d1
+NextIV = 1161c1ef7515e209bc809b66309521d1
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = abce650e78f969b3b210151c74117fd2
+IV = bc4659fbb7073c1f2185cd8ac5314bd1
+Plaintext = 322eae07df5ad2ddd64bba34e42d30c1b884f842e71efa123345a3fb0c39884c57dd4c2c6fb0c42e69ff5a269d59af3a6144853c182edb376ca65947d7ccefae6806ba25c4f527706ba85a353c0fd10e3cb244dd93a2d060d7b055058dde1dff
+Ciphertext = b343343a7f0fd1c0874c8c43cb4078c6da6b6691d1747a6c583f0b93e77d0b1b58e605f80d2f9e0f06d61f75cb03b81f543f5f309aa5cfe3c1d39359be074383d9159bb0b3e51e7b7742cd439b355926589fabfc7b45bbcbb81d84828dc81947
+NextIV = 589fabfc7b45bbcbb81d84828dc81947
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = 9f56e19b09dd3fee0e110f71e9967b7a
+IV = 1155cf4231bf7ac55d5e6eb27a974fad
+Plaintext = ad1e4d3162a5084f581117639a13fc35df5449625ffe0f01e57d9a8726875be8515926ffe7449e30cd69ed4ca0c1b8b4486051c2d0fa2f6474a69c0afce2aec349d778a22edf81678145765b714c1b7c197287da56f59141d6978618729e1d89be20ace3de7d9b3c9b2d195ab6bc0fd4
+Ciphertext = e5f75f794db9d60f1a8f64dcb241c4463b0bd8ecc57b4aea8f87db1478debdb02b9fb9a9f159b24a2b292681683394bd067fe07026043557391aa59f77421497205a44896bde4e74af04ac231f7918f66d65bf5211e3ff9d7628feee17331a9260b7412b561b1f8eaece42532bff6de7
+NextIV = 60b7412b561b1f8eaece42532bff6de7
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = 31c485c996d6ceb2d17e0aa05b2490e4
+IV = 8c37f33405051b4c50abd16c6456643e
+Plaintext = ac68de6a2c2144c6b4fd975a8dec93447391e7c9a4fde63d36be7f23ad186f96cd92b5e8adb546880d100329e97fe8204fad860e6dd8b3c0eed4805387536b9ccc63d6c74938b83dce2c93cc0a04a6025b7563d9e5e7239ae27819fb3844848a51e4294f273401ad9e592f8a170334b042f0667233b29f92b9b13262eb73232a
+Ciphertext = 9775a5c6dab170473a48e938e4bb036533476535c545ba27e149a2efc4f37dd4d8d45f769e74b080122077bf6d049cc146040bd56da957d644cc37abd2a20d795ad0b4a31f44f94e8b2bdeef0b7507c05a4b12dc84986d8e6c2beb1e5f6b16a057df782da903fd4bcc913e3ffc5fc75145a329e57528be7c34a92542cb80eab8
+NextIV = 45a329e57528be7c34a92542cb80eab8
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = 556ccfa360ecb5025032dddb124cad4d
+IV = d54c6fdcc85dc0a28c0b06205fee8854
+Plaintext = 71fbf180effac3dca0d69d40e4017dbe50455396f9fb6507ef7df26507de156cded8edd41a05fb25f352cbcdf3b2d770f90fa87f84863e0c2ed3b2dd770a1abfc489ad1ca82a28d061bd7039a6b5788da021657136def0c78d0b0cc7cfbec9512cf579811fd01185f3fdd2ab857328be4b63d293956b43df130e484b9861eccb1d06992b095e7febb0fb394c1954aeab
+Ciphertext = d43fe04c874d091a7953ed15589f7b4b6b509c21746a366b0c32f135a9e84c6c2a1bb8d2f6a3a389f95b903db62030b1ab54ff45b1a837ada720977944707fe8ea159714f8e7cfd5299227249aec14920ab5a877a57e4b23a951bda95b8f98b908a55f73792f86944de919b0a18cc50e13c549b6d7da8806062afb125c388f02d914548f5747b1bd227520018d97066e
+NextIV = d914548f5747b1bd227520018d97066e
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = 7cb81fc4b203b0fa9bec49759bd515c2
+IV = 4d5e2fa3bf73f488b3e7e125f03dfbbe
+Plaintext = 362789b376d85eb8181d4eeea52d42e873ce7741c11a2f820383a7457b15489b09fb21ac4445959dc9e851b7d40682c50d7044bda46a5da39fae2bab73b3db9ed22edc7ec5da936dfa7451cb5f0a829ff0762738cc2686148f1e1f00dc3fe38139c9a173201fc1f052ca34736fc1ab3dc4e707f864d6119b7adb6c8ddd41c80de5d357d17e9c85ed7af1e4f72cb2656932ccce469202680109eef89a9f42f10a
+Ciphertext = 87fbc595b52e0c299420338f422fabd264665e5457f1df907c5a2c95fc2ed4d04c29296467123223414b0e0223dcab3d93d5740f2e498acf20f50a59d267a734733c946597c2e1e54d5d76a6cb552b264f86b1b2e135cb601f73c5ec3237d2d341f09064e3e68cf08e9e770ced087c94e54b9aba36f01cd10596615cd02f1008b3701084cddfa659fc2b7293a605c1c273f54662894d6d6ca86256d915d4fb3f
+NextIV = 73f54662894d6d6ca86256d915d4fb3f
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = beb622d0228cde29b342bbcf4c1c83b4
+IV = 75c282fa581d9c671edf5d540951b680
+Plaintext = 860476c81685b58e71e2599efe083ce5
+Ciphertext = b8d5730f28bb21d79345e2668f9b4a91
+NextIV = b8d5730f28bb21d79345e2668f9b4a91
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = c4666081e0b0eddb10a9a607c807378f
+IV = 5f23623288e4a41b03186024755a10ea
+Plaintext = 2fd02dab9054248073ebc0b07aed383756ccfa4fa6298722775be6a9b4ed27a5
+Ciphertext = 6bacb9856757883e22e04085deb6dd3ed3694dc6a6ea4445dd2f2684e465e6d5
+NextIV = d3694dc6a6ea4445dd2f2684e465e6d5
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = df010376a6b03279338773a70e012382
+IV = 67455decec549365742525d8dbf1fed9
+Plaintext = 9b9c3dea553ec235db0011b27191544171845b7bdda0dc04a089583959bba5ab7048f8ca87eab073a8b824fdd4e82e40
+Ciphertext = 8871858efc277d3033d1c95c53a3fda31ba8d17b9f641922ef69de0277c80e914f25a8f3366106b22efef2a5c5355504
+NextIV = 4f25a8f3366106b22efef2a5c5355504
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = ff01aa4f7106c6bd24399076f901a530
+IV = 089b4f6054eeeef76d4e13f75de64f7e
+Plaintext = ae9cb9dfa305af83e95a3b2099f70907edcd49fbc6efc5ebe744184c76b4f56bf35774f3fe215e1c8ee42172a2dd3e6f9ccd3d9bb044325e61a6bb97e48e9986
+Ciphertext = 676537bc02ad0fc270ba547f5640bcdb125bc95d9db54029b4ef32b83da838773c0750300b4384fec116732b76f654228f6c942f54839a5a2101c1fed1eb62b3
+NextIV = 8f6c942f54839a5a2101c1fed1eb62b3
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = d33d4062ab32298eafcca86b5088d5fd
+IV = fcfffce8b020240f9f694adcb8ddf213
+Plaintext = 1fe1318adb99e6d4fced292902fe8c831ba488a43f85964d6ff54b322663b380bc99fed15568278cfe1d0af795c71355bf65e876855763655eec3abf3d4b27a0341d607f4bfbd82c8900fd436f7c4186
+Ciphertext = 1898807204f12402a0ca6f11c2ff2a929123c3c18e02149740d6bc91f6a626e79b827d3fb877e1821c861b3e7a361c0fae457340692425b0b8f21447e3fadf95e60819789f2964fda844bd3c508d06c9
+NextIV = e60819789f2964fda844bd3c508d06c9
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = 47e13544a7bbf74dd68ab5ce66e5bdaa
+IV = 69480b4dd38cf3b47e2b7652751395ae
+Plaintext = 3e2e583a3a0389ca324f2aaa52b7823904ab288dae562995cf1d70c796d785fd361261434eea480ceb3d369d969652c7ff194931c0a9bd978f5ae4094d6ef32d986a092c580ccbf865e5095a7b80559be13f842f9bea9e42a3a01ef8a24a6526
+Ciphertext = d5d73ef41aea9daa98d04b309299809408eeebc8de56b2258ba97155dc0bf54150b5338be0aac01ec9a93f49c3aa193d9c74ea5fd0dd4efb9030eca445dd52784cf5f18bd4e0f5facd56620df9d66ead9de1b6fc86f8c3d87f69866a490f5ed4
+NextIV = 9de1b6fc86f8c3d87f69866a490f5ed4
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = ae86823695b48e8c612ae5a01b597f97
+IV = b26eef7b1d14894c0c6388ce5273f4f2
+Plaintext = 569a910bc6aa97b8939ca703fc10ce0d171625bc735a1fea7148650541109d955b1b686c6cc404b2d3d92ad9faaff217dc7b31b038b770959aeccd1ca55d650364fde51df8d4f0aeb05fa364f5028f709c179ca6df0bdfc1cb850f238d755ac44a733fce558402be0c70bc0871b8e62f
+Ciphertext = 0be12d90fd8536ef7fa415f0322dc833891e97d4e6c5427e743bae14fb2776177ad9bb8198d344e74b2c9fe720b67c35965acac1436c5f8e328fe86b4b65d389d8e060295a1c48c6de9a06835e677adea60d3ccc589754593bae6ac9f847b8f0c39253db2e863d5ce1df024f504cecf0
+NextIV = c39253db2e863d5ce1df024f504cecf0
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = b85df29c9244229835d73441dc37555e
+IV = c1375430efedb2d311a37bfa5ad2110e
+Plaintext = c232a0bbf967ef28b74e7b809c62bc8c1cf2d52a273a84162900da834448fd567870471498f29770619dec504922e379eaba0d3a712602583d00279d8fc6a6d568cb94a330039a189ed5802abb7a2898c13ef89c00d73fca9a2f2ffc2107ab498212c56835c0fc26f835a69c00bb3eaa695ac20e8bdb0f5b5b6684d02bee8fb2
+Ciphertext = 7b8b2a3a38328276e2739ecac4c876633e5cc8835a46053fdbbe0bc828450bc6b2e9cb31515edbbccf74a1128213d64577eec37eff3377528dafdd14bcfe2d8cc988f7705622893d3691126ed1de20a1ae7397e3dfe78464c2d310a452608799b024e7725394b309b9def5b2840e8ffa9fb2b9da92fe2df24769c5250167f4f2
+NextIV = 9fb2b9da92fe2df24769c5250167f4f2
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = e96771f5f20a89ee871261d2d18e1e46
+IV = 8c664a37d245d26c0c55adfb424758ba
+Plaintext = 8aaafd56c5d5d54fbe16f115c3216bd1f4376666931a2ef1ffc5468ad12150c39250dca2d63c6ea166bb0ef4aaa3d5849c1f9c621c55826a1ca362f03bcba4dcbd654b300d16519710130e5360bd949aaded6a648f96dd8937a77287d4a4ac2941729475b635b9797476b4dca4171787ff15882d3b4872ed0999a7546dbb61698e8348f70e4a14981a78156150484532
+Ciphertext = 18d65e3fd66b6aef76354325c323f0cd45f6c280335b890ba6822437125b86baf0f8576039e074aeb557f73dcacedd94fe134219fda1b5fac5e4d02f5b582496e97350926902a43dec11b09d12d294b7cc815eb98c4b5f693dd341a7d47a71f6c1a9af3981c97bb13ef4abc8a54aaa0fd601e2cd981d3f49bd8e958b3fe5769a76264784116038c8086af3d49d9429bf
+NextIV = 76264784116038c8086af3d49d9429bf
+
+Availablein = legacy
+Cipher = SEED-CFB
+Key = aef49da33f538ee66e178d4b6121055d
+IV = 842566e68b61ff7bf001f2642da62f64
+Plaintext = 415991f65e1a95040cef9960556f61e617827c30c74bf353cdd86173dbe4cc983a2ee6bc8ca6cfb71121e7b0d0178f2e13445c710dcc176b781201971171f7489f18faf110f39accd1cf08c85a958d7698b116f1c0d75812ac9b0b39aee7f7159ccad8fdae9b99f2d695eacf12c6469d5b51a34de26eac73613dcb2f77122cb1f8dd5162786a12052dc7b6dea6acc4989dcc7eafd9374f6c29697c74749ef16d
+Ciphertext = da97a99e4734c2dfe541642e30b9cea9263f5ee2055d468fc519585c4072f3163eda6cfa5014ed6b2293bf6d296cc7406530657b960072fa8aeafb6a7192c782e73dc4bcb02e621ca6a375d318ec98e7998339060650940d7d9d5e89f95a15e1d673b4c7132be9875bb339a30a61b57050b2c91e57a4b11f7f00c0df906edc508a5a54d218e62de114e89b6e1c137c3a40b55130343a3527dd85d8f9c87a1fc6
+NextIV = 40b55130343a3527dd85d8f9c87a1fc6
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = d7d57bd847154af9722a8df096e61a42
+IV = fdde201c91e401d9723868c2a612b77a
+Plaintext = 81883f22165282ba6a442a8dd2a768d4
+Ciphertext = 78aa827fca58956065e1dc0ce17bfb80
+NextIV = f922bd5ddc0a17da0fa5f68133dc9354
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = c9f4ce21b4c7daaa4f93e292dc605bc5
+IV = 5e5a8cf2808c720e01c1ed92d470a45d
+Plaintext = 8e19c5cacd015a662e7f40cdecadbf79a68081c06d9544b41c2dd248e77633b4
+Ciphertext = 814d987a07282f950fa9a6559e5443f0826243a630458327e5c20440d2a50a0d
+NextIV = 24e2c2665dd0c793f9efd60835d339b9
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 7a70cc6b261eeccb05c57117d5763197
+IV = bb7b9667fbd76d5ee204828769a341b1
+Plaintext = 823cbaae3760c85512a3c83fd60bb54b7cfc739b295b63e05ef435d86e19fd15368c89ff08a0f21ce89a728ffb5d75df
+Ciphertext = edeae6665592ab617f52e495e9177108399a2d073e0e7d9e4ede0545bdf9294f32a1ac2f4c915b1432024b5ca05cf91d
+NextIV = 042d25d04431a908da9839d35b018cc2
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 85dbd5a6e73681a51a4a7d4e93ca7d0c
+IV = 89d897c5aa9e0a5d5586d4b4664fc927
+Plaintext = e3dbfc6ae1a879870fd22644c8135fe063355dfc0a8dad45c9c6e052e6e085cf717754dc1b49acb04cf340826ffb0da991138f022a9c34923a6a116c98c7d3d5
+Ciphertext = eb97edb484801398304d27fa5512417cf63fa76c3860c738cf4866dd9a024bdd2e4029fe1bc83587b452686edf971dae2390ef0af2a00deef79216b1104e43f6
+NextIV = b2836008d83c397ccdf807dd88899023
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 18b9887a34438fb2e759027e54e334b6
+IV = a5be8621e58dae325c6b868fd783e2cd
+Plaintext = 8cd659df925950b516f737fc92d2fafa008c008c9dfe0e75ed2d68f6ff79399ff2183464b8c37cf31aafc145fcbfac73e3f87eccb435f424bf1c6d6efb504e8e93e8a668a2210e3d3b4fd437ad1a5842
+Ciphertext = ecee4794867f81ee0ab465481f160521a918121e02308744e65cbacc4c369ef0b98ff6feaca41a8979045c4bd49487b4f3437376c4b6f43536973ba54bdd2b7170c7136f92e87cba79b892616b80fe10
+NextIV = e32fb50730c9728742f74656c69aa652
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = da52c0e4609e82ee926174a9eaf90b08
+IV = f2d0c5e86b4ddb40d30713aaa5a153fe
+Plaintext = 91d6c95a614cf85de16eeabe5976c2a2a9d307042f79a7aaeb7c3c57e1dd8d43bfa458c8c02e4f5ed0c960c9f17e3991dd2e0cb3ede18f96395a484001ef07ca4c97b411ce454aaf0f74242aca03786a93442171bd50a1467b9d663245d24c2f
+Ciphertext = 6207d66ce45fa32922bc75c14bd1a2d44a8daf4e655f9b9934f7f41de98337d3f6aa6175f43d056b6be3decb791a324c80a84983b026dcdabdcd1cf93059a238e14ff5c952b740802cd11171f5275c12adb6564532de13194c66532c0cc17663
+NextIV = 3ef277348f8eb25f37fb351e49133a4c
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 56d6f7e2a870b92d55ff8d6e9c554d2a
+IV = b512f0e11e27fd1a94aa0c697bb6da5e
+Plaintext = e62cdeac43667749701314c546f778a4c758e4f55760e7d729c3783cf7a242edf6ae3fcf0990886434896c945455bfae0e5674aa06ee6fb1512d94df2cac2447eeb849373bb3efbe7bb8d66c8a7ee559b17fc268d6599fcdef7457cdbde5b9c5b692236e4397545f2be97bd44f3993ad
+Ciphertext = 22632b7abf711ad0e66f1834e5984609df0fdf0903a7180c713e1c084812913c31d1fb3469c777a94e5115fc1c4a081283fa2d28a9aec1b6f46738d8bf04ab6b82505b2063153a12dace49000aa9ac41ff3cdf9510a20183f934d364f52cd72cc6b5deb192ca5bacbff471565ae2d563
+NextIV = 7027fddfd15d0ff3941d0a8215db46ce
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 09f216ff78dfe419dfcef1a855473414
+IV = 722174c892d265291982c6f042ced145
+Plaintext = 11f435e7e3656fcfa8e0df230311ca21054e84e13c8590e7ec7309f59c174022d467a7302641ee1b6ba46bee4f20bfda108bb78982f670b057dfbfe49da9cfae88490ce17241402b20d2fceb476d3a424e6c406d56ffc85278695d584d6c087cb4012ca2cf4daf284fd15ac1f2e183814957e934bf88dff4d777adfbb54933b5
+Ciphertext = d9a5d3bc0a558b86046877a9030a09c537c2830b93dd9f56df91233f3b403fa39dc820d5eadf46ca016ad130018310a4e31e0974bb233085236340e057cac0d6968f0fcceea780b9da7bfb297e8593abd242e382e7482e9c4679b7cb720798c17522c5cf4db9004368f609b5280b5421f30a39a6659d51ef8feafed739959441
+NextIV = ba5dd092da158e1b589d532c8cdca7f4
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = cde9b69eea2b6a5588457e35e0a08803
+IV = 52323b54d69a62fec0689baee1b3ec63
+Plaintext = 967798995af6f435b3a6f92bff77a11fa44d1426ae0f6e7dbafac27b123c5fc419be52c0ea412c4b3cac05ae89a4c0ce6f5e91a456b1bded5370a1234cf6f6ab5d0253507bc6f3f0573ab97585b67107dec059812323e021e341ad839ea9e3d02aeca43356add48ccef81f693ed53d32ba1c74a35e8a5f7f3115ef834f7daf9948244c4fc31f5487678d3e70fb27abb5
+Ciphertext = 1dc92191514c65141edb04acc655cf3c664ff5727d569b636787332ef1e34b1afd4b8e9acf4b745530fa7b3094f45a32d82b0e2be7cc035a1dded75f4033bcc4727dd14303761a9061b8365a8893e2569d045f08d2b447c35d2f927ac6103730e3aa4e81aef54c426320d657e2aa169bf8884ef0541074e9c08793364646a9a99df0e5022ea3740361096c3790707b3d
+NextIV = d5d4a94dedbc2084068452476b57d088
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 939aac71e337709855715a57e3a4648f
+IV = 493509b56a92f14040eb9b66a188bc57
+Plaintext = 9c22efddc7de496a916d15d710de374d57478126ed64c9ad7e823e24d19bfc0cfac3dda0d1c292a3a203f35b26ad94deb20f998caf41cbdd4a08eb5d6cfb46f4ede4896b0569d72c03ec194941af95c0573cc3fe8f045ba19946b382803248f3dd4f9a454b1a3e8e1af02ea8482d637dac96a68275f4a382d3023f9df4892b9032cab9378b1cef5051d6db81226f259d1be4eb23495ac807600536b5b0481754
+Ciphertext = 5bf691be73fa80ebdfcf9ab0657729c9017505cb7163afb35c120915e111d2a2978e373164579c9ffc66bfe189ffe1fbe641d45c8d91a2bab418d8b549eb027721d241a9d80e298c79c75d7db8dec3a8d56cf27d33431c07ac4128b1068684e1d99b1ff23f83e8badb704600de7ae95cbef8029f101bfa852ef5f69cc7a7427d0fa3abd7de68db07de0ba4c17fd579ffcf1be3ad9e5f724c8e9c87c079f2afec
+NextIV = d4ff088ed705ba4bee99b175c9bab8b8
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 8368189d41eaa20d06a3a2d2a91e43f7
+IV = cf04ac0e4733952ba538711f79eef8ca
+Plaintext = 696ca57339840fb3c150e0c111d9e13e
+Ciphertext = 03f102dbfb29bcde9e7d16825de64228
+NextIV = 6a9da7a8c2adb36d5f2df6434c3fa316
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 5124c6fdb0856ded76afb6febdaa981e
+IV = 937ebdeec379685a71d466703f788ff7
+Plaintext = 5a5928dd09e78a21256eadb062630a3f0b47ca2376ccae314948143fff2512d4
+Ciphertext = 841cca2b58abd8d0b68fa2d3949bc943a105427f2deb117572de28cd0581c54a
+NextIV = aa42885c5b27bf443b963cf2faa4d79e
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 6a8f6487e76058bc5a126276e48fdd77
+IV = 6e75d8b8ac0976143ea103a710caec02
+Plaintext = 424ddc343067612fdb426920f40ab4d82e3d4f9485b07fef91617556d3093874840e8110ff375b7a68f98c471ca10acc
+Ciphertext = c9123902ac5cfd3f0151b4e95185815ddf4ea92baadd91215007c98ab3dcbae14ca5cfcb5aafeea9939b998e3f4ec276
+NextIV = c8ab4edba598b5d3fb6215c923efc8ba
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 01963d44aea026b2205238454d5bb73f
+IV = 9442a6e0f3a53f10b0ccf5b0ccc1793a
+Plaintext = c54cfacd953736a2d8db0b8b63b555253a0ca6f6e05f2e918d18be95669fa85609f827d6da014add2964626670c202b195248fc986372c92adbb10c0e7c36e04
+Ciphertext = d6592ec2f649ea123bce88818ebbbb74d3b6b55a987ab01db21b5ef91cf8a9fff6851a6ce523d2607da048d9e0897ff672d787433cd54b6c9c25a7a5aeea1538
+NextIV = e7f3088abae267fe319eb76549297b3c
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 4ea87b0b346054c097edc5601b782870
+IV = 9a3e23333b2b2de7eceea67a7ca97641
+Plaintext = 0c7734310c5ca82b520bf1e0a1614c7ddd0c002711ef0b239de8fa256e15b32056b992747ff3a3a310d52e9df36275d9192dad61caa16715744552c865c5ae9477a70a2c3a02a01ba176b927445094d2
+Ciphertext = a91c4fb4f9e05adab087db1fd125b1f42dd26953bb3b3d722adb443c0a4b927ef83c62ae3ef8e1f83ef8e6b50a3b8caf7a623fa9d23685cda5851139a69c449d8b94877c3547c37e8c246738c6183b50
+NextIV = fc338d500f4563652d52de1f8248af82
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 1956f40b2334a6546b3071f2d17f4a59
+IV = 765cfb560c46777a20cce091232ccaf2
+Plaintext = 045ad66c515d407ab73ea0c6f6ae869872342fc72956a659945454005e37c76ed07df996ffe1322840cf23843b34346a1e730ab721ddceaf362ed256054c105ed581a80c04ef22ae1b5eb8742c6e3c9c0e0e29fad211b4f40adc1520f7c6821e
+Ciphertext = e77614bed3d8fc7a22355efc2d1401cd1386fcd6585b472a500278c56108123af13bbfffdd87bc963634f28ab8355061f23c6d943fd226360685b5fda3eee847d64154af7f48732f37c3a4f740ed73dd276dafc9a2e3a22f381a61501dd89b73
+NextIV = 2963863370f216db32c67470ea1e196d
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 4e47e1b5c1b489295d3a2bf049f4be2d
+IV = 83fdf064d213df417ba0e75ec517bf63
+Plaintext = 94a7bed3b5a158e85f9e4778a7de105ff4f3b2a61c2fead82cbe949d7a4ee961a6c62949ba2c69d513d836a455b612c2fbb6ca243a0a18a853cadb6b73b600192de1d51ddf80030718b079fbb581073a06b66ba4ad524d3d09efaa59e6919bca15b2b92bd9f8c17d6e463f4ea5fd5f5e
+Ciphertext = 6a64fccc9e7f00bc696e09761c1a059557e02d16b6d407931b1abde227b6c42e512eeabcf5d01d7a662da46c1c87ffb7575607e1b88a755c7d469c55f7cc98d4ccf9f3fc3a29e22b7e16052cfe90c61132311853547885d7a78cbcdc1a26c05953d3f45735901d44dad6710d67712c20
+NextIV = 46614d7cec68dc39b4904e43c28c737e
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 613485e5bb84b91cdd0ca02f8d83e0bb
+IV = ad8a7564f6ce8abb6949ddb7d7186580
+Plaintext = ed5068003163c424ae9a8e51e3d77684c69073a824dc4721568f7528657c3dd28d66219f398ed57105aa35cfef3ac078eab30ae0f3ed752b0e320b099ea42b156f818904c4b6c534cabde53dfa62e7b74518a8bca3f36ee85b130e8520d38c006e6adef34bbc8df56b757b500d703e5777aa545c4170404754f03dbf22c9f0d7
+Ciphertext = 63e2f4b237b0635709ed42bf7ce29a0a828fd52f157dbed5a7b78d5afb8cc780f009c7982a31eb4db2a2d30d80622fa84c430fd69c68652a2876f984a3a795d952a8ed540d6ef936ba85ce7932523e47ec6e9865ffc4f8805232039b79c5fbfbfa8c18d7b4aa655c247357b5b3b2e960e0eac46a13f52c5646c396887500b6ad
+NextIV = 9740903652856c111233ab3757c9467a
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = 8198b36e880cf50dbf6724feaaac8688
+IV = fbaa2882a2a4acdb299e4f82c93f2af7
+Plaintext = b2516a356e437513f0df83938afefbe9f9ef1ec879797997f31da96a1ea7a15d395ecdb94b7fda14cdc0b75c171784fa8832d574b64f9450c6be25dc83b93d3bbf0145a661bf4db775282b98649b64613aeedb8bb770f67cc3421ac6761e5d763c21ac2d1e729e4597ad7fca9fdc70878b26634df78cd0f36fb3b138a1357915abba4ff5f8dfaef268307022f2e23528
+Ciphertext = 40396cb65cc8eda8c591e671cbf92889588fe593fbe6e8e884a9d58f90df8505025cd0e268c368fc4aed1e8a5be2359a72d087775f85f6944b0cf731e8051cf80f0b9aac8073f82c01e0306077bfbf547d9074b8cf2a844d778371b0db8c7d8358596404a4047bafc3e4c9bd424860dbe3b1a54bb68f0461e8612940695b795a1e5aad72befb79ea8c5336d01758d077
+NextIV = b5e0e2874624d718e46346f2e5bae55f
+
+Availablein = legacy
+Cipher = SEED-OFB
+Key = e30b4c874c4c4f6e0cf1f8ef58e5d375
+IV = 7e26f07f8024343cec35409e71e0cd8c
+Plaintext = 8ceca4dc346cfd6b15774e082db1a89497b7d85d6b5b7102e77417f7a243fafe17118b7a3bb49d1657cf61b866da395a5b3f349183a53dfa11fc0ac053bddff49dd472ee55f5e43a2f8bc785e2bc420300694919ff7bb43feb75a9cac44ece96f679e618db5d7433af12dcc7e0963ff10b45d835f9a8f42627e7f3fd5038932685965ad0e183f5955e671fc2b878dd51051eedaf85310d1e4e8f75f2decf36c7
+Ciphertext = 6328ab2e9039edcd034499d13561b8866ff4f528a375365e84e1a2de9d2e58cd6b6e9cad7215d105e0653a480dbc3e69d8ba496d4333515e879b20df1bc9f77382b81db4d846fbb9e93b60b80558322c6b7e1936076295c842e262f84dff7b47e406a62c44900e6d1383199deee77215ed4c27397d4f01acdbd4d54328e538770e87d9e4900602a129f405cc1f8800ea723cdb109afffc9d04da2b1403a8d3e7
+NextIV = 772236bf1fcef1834a555ee6dd67e520
diff --git a/test/recipes/30-test_evp_data/evpciph_sm4.txt b/test/recipes/30-test_evp_data/evpciph_sm4.txt
new file mode 100644
index 000000000000..ec8a45bd3f84
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpciph_sm4.txt
@@ -0,0 +1,38 @@
+#
+# Copyright 2001-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
+
+Title = SM4 test vectors from IETF draft-ribose-cfrg-sm4
+
+Cipher = SM4-ECB
+Key = 0123456789ABCDEFFEDCBA9876543210
+Plaintext = 0123456789ABCDEFFEDCBA9876543210
+Ciphertext = 681EDF34D206965E86B3E94F536E4246
+
+Cipher = SM4-CBC
+Key = 0123456789ABCDEFFEDCBA9876543210
+IV = 0123456789ABCDEFFEDCBA9876543210
+Plaintext = 0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543210
+Ciphertext = 2677F46B09C122CC975533105BD4A22AF6125F7275CE552C3A2BBCF533DE8A3B
+
+Cipher = SM4-OFB
+Key = 0123456789ABCDEFFEDCBA9876543210
+IV = 0123456789ABCDEFFEDCBA9876543210
+Plaintext = 0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543210
+Ciphertext = 693D9A535BAD5BB1786F53D7253A7056F2075D28B5235F58D50027E4177D2BCE
+
+Cipher = SM4-CFB
+Key = 0123456789ABCDEFFEDCBA9876543210
+IV = 0123456789ABCDEFFEDCBA9876543210
+Plaintext = 0123456789ABCDEFFEDCBA98765432100123456789ABCDEFFEDCBA9876543210
+Ciphertext = 693D9A535BAD5BB1786F53D7253A70569ED258A85A0467CC92AAB393DD978995
+
+Cipher = SM4-CTR
+Key = 0123456789ABCDEFFEDCBA9876543210
+IV = 0123456789ABCDEFFEDCBA9876543210
+Plaintext = AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAA
+Ciphertext = C2B4759E78AC3CF43D0852F4E8D5F9FD7256E8A5FCB65A350EE00630912E44492A0B17E1B85B060D0FBA612D8A95831638B361FD5FFACD942F081485A83CA35D
diff --git a/test/recipes/30-test_evp_data/evpencod.txt b/test/recipes/30-test_evp_data/evpencod.txt
new file mode 100644
index 000000000000..16bcb9aa234d
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpencod.txt
@@ -0,0 +1,192 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = Base64 tests
+
+Encoding = canonical
+Input = ""
+Output = ""
+
+Encoding = canonical
+Input = "h"
+Output = "aA==\n"
+
+Encoding = canonical
+Input = "hello"
+Output = "aGVsbG8=\n"
+
+Encoding = canonical
+Input = "hello world!"
+Output = "aGVsbG8gd29ybGQh\n"
+
+Encoding = canonical
+Input = 00010203040506070809a0b0c0d0e0f000
+Output = "AAECAwQFBgcICaCwwNDg8AA=\n"
+
+# Missing padding
+Encoding = invalid
+Output = "aGVsbG8"
+
+Encoding = invalid
+Output = "aGVsbG8\n"
+
+# Tolerate missing newline
+Encoding = valid
+Input = "hello"
+Output = "aGVsbG8="
+
+# Don't tolerate extra trailing '='
+Encoding = invalid
+Input = "hello"
+Output = "aGVsbG8==\n"
+
+Encoding = invalid
+Output = "aGVsbG8===\n"
+
+# Don't tolerate data after '='
+Encoding = invalid
+Output = "aGV=sbG8=\n"
+
+# Newlines are ignored
+Encoding = valid
+Input = "hello"
+Output = "aGV\nsbG8=\n"
+
+Encoding = canonical
+Input = "hello"
+Output = 614756736247383d0a
+
+# Invalid characters
+Encoding = invalid
+Output = 614756736247383d0a00
+
+Encoding = invalid
+Output = 61475600736247383d0a
+
+Encoding = invalid
+Output = 61475601736247383d0a
+
+Encoding = invalid
+Output = 61475680736247383d0a
+
+Encoding = invalid
+Output = e14756736247383d0a
+
+Encoding = canonical
+Input = "OpenSSLOpenSSL\n"
+Output = "T3BlblNTTE9wZW5TU0wK\n"
+
+Encoding = valid
+Input = "OpenSSLOpenSSL\n"
+Output = "T3BlblNTTE9wZW5TU0wK"
+
+# Truncate 1-3 chars
+Encoding = invalid
+Output = "T3BlblNTTE9wZW5TU0w"
+
+Encoding = invalid
+Output = "T3BlblNTTE9wZW5TU0"
+
+Encoding = invalid
+Output = "T3BlblNTTE9wZW5TU"
+
+Encoding = invalid
+Output = "T3BlblNTTE9wZW5TU0wK===="
+
+Encoding = invalid
+Output = "T3BlblNTTE9wZW5TU0wK============================================\n"
+
+Encoding = invalid
+Output = "YQ==YQ==YQ==\n"
+
+Encoding = invalid
+Output = "A"
+
+Encoding = invalid
+Output = "A\n"
+
+Encoding = invalid
+Output = "A="
+
+Encoding = invalid
+Output = "A==\n"
+
+Encoding = invalid
+Output = "A===\n"
+
+Encoding = invalid
+Output = "A====\n"
+
+Encoding = valid
+Input = "OpenSSLOpenSSL\n"
+Output = "T3BlblNTTE9wZW5TU0wK\n\n"
+
+Encoding = valid
+Input = "OpenSSLOpenSSL\n"
+Output = "T3BlblNTTE\n9wZW5TU0wK"
+
+# CVE 2015-0292
+Encoding = invalid
+Output = "ZW5jb2RlIG1lCg==================================================================\n"
+
+Encoding = canonical
+Input = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==\n"
+
+Encoding = valid
+Input = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA\n==\n"
+
+Encoding = valid
+Input = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA=\n=\n"
+
+Encoding = invalid
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA====\n"
+
+# Multiline output without padding
+Encoding = canonical
+Input = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neHh4eHh4eHh4eHh4\n"
+
+# Multiline output with padding
+Encoding = canonical
+Input = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neHh4eHh4eHh4eHh4eHh4eA==\n"
+
+# Multiline output with line break in the middle of a b64 block is accepted
+Encoding = valid
+Input = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh\n4eHh4eHh4eHh4eHh4eHh4eA==\n"
+
+# Long lines are accepted
+Encoding = valid
+Input = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==\n"
+
+# Multiline input with data after '='.
+Encoding = invalid
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==\neHh4eHh4eHh4eHh4eHh4eHh4\n"
+
+Encoding = invalid
+Output = "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neA==eHh4eHh4eHh4eHh4eHh4\n"
+
+# B64_EOF ('-') terminates input and trailing bytes are ignored
+Encoding = valid
+Input = "OpenSSLOpenSSL\n"
+Output = "T3BlblNTTE9wZW5TU0wK\n-abcd"
+
+Encoding = valid
+Input = "OpenSSLOpenSSL\n"
+Output = "T3BlblNTTE9wZW5TU0wK-abcd"
+
diff --git a/test/recipes/30-test_evp_data/evpkdf_hkdf.txt b/test/recipes/30-test_evp_data/evpkdf_hkdf.txt
new file mode 100644
index 000000000000..60f92c4db4fb
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_hkdf.txt
@@ -0,0 +1,215 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = HKDF tests (from RFC5869 test vectors)
+
+KDF = HKDF
+Ctrl.digest = digest:SHA256
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = hexsalt:000102030405060708090a0b0c
+Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9
+Output = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865
+
+KDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA256
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = hexsalt:000102030405060708090a0b0c
+Output = 077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5
+
+KDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA256
+Ctrl.IKM = hexkey:077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5
+Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9
+Output = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865
+
+KDF = HKDF
+Ctrl.digest = digest:SHA256
+Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Output = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87
+
+KDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA256
+Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+Output = 06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244
+
+KDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA256
+Ctrl.IKM = hexkey:06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244
+Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Output = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87
+
+KDF = HKDF
+Ctrl.digest = digest:SHA256
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8
+
+KDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA256
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04
+
+KDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA256
+Ctrl.IKM = hexkey:19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04
+Ctrl.info = info:
+Output = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8
+
+KDF = HKDF
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = hexsalt:000102030405060708090a0b0c
+Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9
+Output = 085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896
+
+KDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = hexsalt:000102030405060708090a0b0c
+Output = 9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243
+
+KDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243
+Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9
+Output = 085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896
+
+KDF = HKDF
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Output = 0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4
+
+KDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+Output = 8adae09a2a307059478d309b26c4115a224cfaf6
+
+KDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:8adae09a2a307059478d309b26c4115a224cfaf6
+Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Output = 0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4
+
+KDF = HKDF
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918
+
+KDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = salt:
+Output = da8c8a73c7fa77288ec6f5e7c297786aa0d32d01
+
+KDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:da8c8a73c7fa77288ec6f5e7c297786aa0d32d01
+Ctrl.info = info:
+Output = 0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918
+
+KDF = HKDF
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
+
+KDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Output = 2adccada18779e7c2077ad2eb19d3f3e731385dd
+
+KDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:2adccada18779e7c2077ad2eb19d3f3e731385dd
+Ctrl.info = info:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
+
+KDF = HKDF
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 00
+Result = KDF_DERIVE_ERROR
+
+KDF = HKDF
+Ctrl.digest = digest:SHA1
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 00
+Result = KDF_DERIVE_ERROR
+
+KDF = HKDF
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.info = info:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
+
+KDF = HKDF
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
+
+KDF = HKDF
+Ctrl.mode = mode:EXTRACT_AND_EXPAND
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
+
+# The output key size should match the digest size for EXTRACT_ONLY mode
+KDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = salt:
+Output = da8c8a73
+Result = KDF_DERIVE_ERROR
+
+# Test concat of multiple info (Uses existing test data, and just splits the info into separate fields)
+KDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA1
+Ctrl.IKM = hexkey:8adae09a2a307059478d309b26c4115a224cfaf6
+Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0
+Ctrl.info = hexinfo:c1c2c3
+Ctrl.info = hexinfo:c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9
+Ctrl.info = hexinfo:dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Output = 0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4
diff --git a/test/recipes/30-test_evp_data/evpkdf_krb5.txt b/test/recipes/30-test_evp_data/evpkdf_krb5.txt
new file mode 100644
index 000000000000..d8f6aa72a175
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_krb5.txt
@@ -0,0 +1,131 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = KRB5KDF tests (from RFC 3961 test vectors and krb5 sources)
+
+#RFC3961
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:dce06b1f64c857a11c3db57c51899b2cc1791008ce973b92
+Ctrl.hexconstant = hexconstant:0000000155
+Output = 925179d04591a79b5d3192c4a7e9c289b049c71f6ee604cd
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:5e13d31c70ef765746578531cb51c15bf11ca82c97cee9f2
+Ctrl.hexconstant = hexconstant:00000001aa
+Output = 9e58e5a146d9942a101c469845d67a20e3c4259ed913f207
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:98e6fd8a04a4b6859b75a176540b9752bad3ecd610a252bc
+Ctrl.hexconstant = hexconstant:0000000155
+Output = 13fef80d763e94ec6d13fd2ca1d085070249dad39808eabf
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:622aec25a2fe2cad7094680b7c64940280084c1a7cec92b5
+Ctrl.hexconstant = hexconstant:00000001aa
+Output = f8dfbf04b097e6d9dc0702686bcb3489d91fd9a4516b703e
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:d3f8298ccb166438dcb9b93ee5a7629286a491f838f802fb
+Ctrl.hexconstant = hexconstant:6b65726265726f73
+Output = 2370da575d2a3da864cebfdc5204d56df779a7df43d9da43
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:c1081649ada74362e6a1459d01dfd30d67c2234c940704da
+Ctrl.hexconstant = hexconstant:0000000155
+Output = 348057ec98fdc48016161c2a4c7a943e92ae492c989175f7
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:5d154af238f46713155719d55e2f1f790dd661f279a7917c
+Ctrl.hexconstant = hexconstant:00000001aa
+Output = a8808ac267dada3dcbe9a7c84626fbc761c294b01315e5c1
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:798562e049852f57dc8c343ba17f2ca1d97394efc8adc443
+Ctrl.hexconstant = hexconstant:0000000155
+Output = c813f88a3be3b334f75425ce9175fbe3c8493b89c8703b49
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:26dce334b545292f2feab9a8701a89a4b99eb9942cecd016
+Ctrl.hexconstant = hexconstant:00000001aa
+Output = f48ffd6e83f83e7354e694fd252cf83bfe58f7d5ba37ec5d
+
+#Krb5 sources
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:850BB51358548CD05E86768C313E3BFEF7511937DCF72C3E
+Ctrl.hexconstant = hexconstant:0000000299
+Output = F78C496D16E6C2DAE0E0B6C24057A84C0426AEEF26FD6DCE
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:850BB51358548CD05E86768C313E3BFEF7511937DCF72C3E
+Ctrl.hexconstant = hexconstant:00000002AA
+Output = 5B5723D0B634CB684C3EBA5264E9A70D52E683231AD3C4CE
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:850BB51358548CD05E86768C313E3BFEF7511937DCF72C3E
+Ctrl.hexconstant = hexconstant:0000000255
+Output = A77C94980E9B7345A81525C423A737CE67F4CD91B6B3DA45
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:AES-128-CBC
+Ctrl.hexkey = hexkey:42263C6E89F4FC28B8DF68EE09799F15
+Ctrl.hexconstant = hexconstant:0000000299
+Output = 34280A382BC92769B2DA2F9EF066854B
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:AES-128-CBC
+Ctrl.hexkey = hexkey:42263C6E89F4FC28B8DF68EE09799F15
+Ctrl.hexconstant = hexconstant:00000002AA
+Output = 5B14FC4E250E14DDF9DCCF1AF6674F53
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:AES-128-CBC
+Ctrl.hexkey = hexkey:42263C6E89F4FC28B8DF68EE09799F15
+Ctrl.hexconstant = hexconstant:0000000255
+Output = 4ED31063621684F09AE8D89991AF3E8F
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:AES-256-CBC
+Ctrl.hexkey = hexkey:FE697B52BC0D3CE14432BA036A92E65BBB52280990A2FA27883998D72AF30161
+Ctrl.hexconstant = hexconstant:0000000299
+Output = BFAB388BDCB238E9F9C98D6A878304F04D30C82556375AC507A7A852790F4674
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:AES-256-CBC
+Ctrl.hexkey = hexkey:FE697B52BC0D3CE14432BA036A92E65BBB52280990A2FA27883998D72AF30161
+Ctrl.hexconstant = hexconstant:00000002AA
+Output = C7CFD9CD75FE793A586A542D87E0D1396F1134A104BB1A9190B8C90ADA3DDF37
+
+KDF = KRB5KDF
+Ctrl.cipher = cipher:AES-256-CBC
+Ctrl.hexkey = hexkey:FE697B52BC0D3CE14432BA036A92E65BBB52280990A2FA27883998D72AF30161
+Ctrl.hexconstant = hexconstant:0000000255
+Output = 97151B4C76945063E2EB0529DC067D97D7BBA90776D8126D91F34F3101AEA8BA
+
+#Same as the first but with no "fixup"
+KDF = KRB5KDF
+Ctrl.cipher = cipher:DES-EDE3-CBC
+Ctrl.hexkey = hexkey:dce06b1f64c857a11c3db57c51899b2cc1791008ce973b92
+Ctrl.hexconstant = hexconstant:0000000155
+Output = 935079d14490a75c3093c4a6e8c3b049c71e6ee705
diff --git a/test/recipes/30-test_evp_data/evpkdf_pbkdf1.txt b/test/recipes/30-test_evp_data/evpkdf_pbkdf1.txt
new file mode 100644
index 000000000000..1e362fdeb9d7
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_pbkdf1.txt
@@ -0,0 +1,136 @@
+#
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = PBKDF1 tests
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:md2
+Output = 2C5DAEBD49984F34642ACC09BAD696D7
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:md5
+Output = FDBDF3419FFF98BDB0241390F62A9DB3
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:sha1
+Output = CAB86DD6261710891E8CB56EE3625691
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:2
+Ctrl.digest = digest:md2
+Output = FD7999A1AB54B01B4FC39389A5FE820D
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:2
+Ctrl.digest = digest:md5
+Output = 3D4A8D4FB4C6E8686B21D36142902966
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:2
+Ctrl.digest = digest:sha1
+Output = E3A8DFCF2EEA6DC81D2AD154274FAAE9
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:md2
+Output = 94E4671F438BD6C441C5B120C6CC79CA
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:md5
+Output = 3283ED8F8D037045157DA055BFF84A02
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha1
+Output = 3CB0C21E81127F5BFF2EEA2B5DC3F31D
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:passwordPASSWORDpassword
+Ctrl.salt = salt:saltSALT
+Ctrl.iter = iter:65537
+Ctrl.digest = digest:md2
+Output = 36DAA8DEB8B471B26AA8CE064A81E54F
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:passwordPASSWORDpassword
+Ctrl.salt = salt:saltSALT
+Ctrl.iter = iter:65537
+Ctrl.digest = digest:md5
+Output = 763F3BA457E3F9ED088B04B5361D7CCA
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:passwordPASSWORDpassword
+Ctrl.salt = salt:saltSALT
+Ctrl.iter = iter:65537
+Ctrl.digest = digest:sha1
+Output = B2B4635718AAAD9FEF23FE328EB83ECF
+
+Title = PBKDF1 tests for empty inputs
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:md2
+Output = 8ECD1C4C1D57C415295784CCD4686905
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:md5
+Output = F3D07DE5EFB5E2C3EAFC16B0CF7E07FA
+
+Availablein = legacy
+KDF = PBKDF1
+Ctrl.pass = pass:
+Ctrl.salt = salt:saltsalt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:sha1
+Output = 2C2ABACE4BD8BB19F67113DA146DBB8C
diff --git a/test/recipes/30-test_evp_data/evpkdf_pbkdf2.txt b/test/recipes/30-test_evp_data/evpkdf_pbkdf2.txt
new file mode 100644
index 000000000000..3f5972407217
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_pbkdf2.txt
@@ -0,0 +1,157 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = PBKDF2 tests
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:sha1
+Output = 0c60c80f961f0e71f3a9b524af6012062fe037a6
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:sha256
+Output = 120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:sha512
+Output = 867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:2
+Ctrl.digest = digest:sha1
+Output = ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:2
+Ctrl.digest = digest:sha256
+Output = ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:2
+Ctrl.digest = digest:sha512
+Output = e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4e
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha1
+Output = 4b007901b765489abead49d926f721d065a429c1
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha256
+Output = c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:password
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha512
+Output = d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5
+
+KDF = PBKDF2
+Ctrl.pass = pass:passwordPASSWORDpassword
+Ctrl.salt = salt:saltSALTsaltSALTsaltSALTsaltSALTsalt
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha1
+Output = 3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038
+
+KDF = PBKDF2
+Ctrl.pass = pass:passwordPASSWORDpassword
+Ctrl.salt = salt:saltSALTsaltSALTsaltSALTsaltSALTsalt
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha256
+Output = 348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9
+
+KDF = PBKDF2
+Ctrl.pass = pass:passwordPASSWORDpassword
+Ctrl.salt = salt:saltSALTsaltSALTsaltSALTsaltSALTsalt
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha512
+Output = 8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.hexpass = hexpass:7061737300776f7264
+Ctrl.hexsalt = hexsalt:7361006c74
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha1
+Output = 56fa6aa75548099dcc37d7f03425e0c3
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.hexpass = hexpass:7061737300776f7264
+Ctrl.hexsalt = hexsalt:7361006c74
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha256
+Output = 89b69d0516f829893c696226650a8687
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.hexpass = hexpass:7061737300776f7264
+Ctrl.hexsalt = hexsalt:7361006c74
+Ctrl.iter = iter:4096
+Ctrl.digest = digest:sha512
+Output = 9d9e9c4cd21fe4be24d5b8244c759665
+
+Title = PBKDF2 tests for empty inputs
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:sha1
+Output = a33dddc30478185515311f8752895d36ea4363a2
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:sha256
+Output = f135c27993baf98773c5cdb40a5706ce6a345cde
+
+KDF = PBKDF2
+Ctrl.pkcs5 = pkcs5:1
+Ctrl.pass = pass:
+Ctrl.salt = salt:salt
+Ctrl.iter = iter:1
+Ctrl.digest = digest:sha512
+Output = 00ef42cdbfc98d29db20976608e455567fdddf14
diff --git a/test/recipes/30-test_evp_data/evpkdf_scrypt.txt b/test/recipes/30-test_evp_data/evpkdf_scrypt.txt
new file mode 100644
index 000000000000..469755c54218
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_scrypt.txt
@@ -0,0 +1,63 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = Scrypt tests (from draft-josefsson-id-scrypt-kdf-03 and others)
+
+KDF = id-scrypt
+Ctrl.pass = pass:
+Ctrl.salt = salt:
+Ctrl.N = n:16
+Ctrl.r = r:1
+Ctrl.p = p:1
+Output = 77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906
+
+KDF = id-scrypt
+Ctrl.pass = pass:password
+Ctrl.salt = salt:NaCl
+Ctrl.N = n:1024
+Ctrl.r = r:8
+Ctrl.p = p:16
+Output = fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640
+
+KDF = id-scrypt
+Ctrl.hexpass = hexpass:70617373776f7264
+Ctrl.salt = salt:NaCl
+Ctrl.N = n:1024
+Ctrl.r = r:8
+Ctrl.p = p:16
+Output = fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640
+
+KDF = id-scrypt
+Ctrl.pass = pass:password
+Ctrl.hexsalt = hexsalt:4e61436c
+Ctrl.N = n:1024
+Ctrl.r = r:8
+Ctrl.p = p:16
+Output = fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640
+
+KDF = id-scrypt
+Ctrl.pass = pass:pleaseletmein
+Ctrl.salt = salt:SodiumChloride
+Ctrl.N = n:16384
+Ctrl.r = r:8
+Ctrl.p = p:1
+Output = 7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887
+
+# Out of memory
+KDF = id-scrypt
+Ctrl.pass = pass:pleaseletmein
+Ctrl.salt = salt:SodiumChloride
+Ctrl.N = n:2097152
+Ctrl.r = r:8
+Ctrl.p = p:1
+Result = KDF_DERIVE_ERROR
diff --git a/test/recipes/30-test_evp_data/evpkdf_ss.txt b/test/recipes/30-test_evp_data/evpkdf_ss.txt
new file mode 100644
index 000000000000..6de5c2d99969
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_ss.txt
@@ -0,0 +1,1121 @@
+#
+# Copyright 2001-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 are ignored.
+
+# There are currently no official test vectors for Single Step KDF
+# https://github.com/patrickfav/singlestep-kdf/wiki/NIST-SP-800-56C-Rev1:-Non-Official-Test-Vectors
+
+Title = Single Step KDF tests
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:d09a6b1a472f930db4f5e6b967900744
+Ctrl.hexinfo = hexinfo:b117255ab5f1b6b96fc434b0
+Output = b5a3c52e97ae6e8c5069954354eab3c7
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:343666c0dd34b756e70f759f14c304f5
+Ctrl.hexinfo = hexinfo:722b28448d7eab85491bce09
+Output = 1003b650ddd3f0891a15166db5ec881d
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:b84acf03ab08652dd7f82fa956933261
+Ctrl.hexinfo = hexinfo:3d8773ec068c86053a918565
+Output = 1635dcd1ce698f736831b4badb68ab2b
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:8cc24ca3f1d1a8b34783780b79890430
+Ctrl.hexinfo = hexinfo:f08d4f2d9a8e6d7105c0bc16
+Output = b8e716fb84a420aed4812cd76d9700ee
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:b616905a6f7562cd2689142ce21e42a3
+Ctrl.hexinfo = hexinfo:ead310159a909da87e7b4b40
+Output = 1b9201358c50fe5d5d42907c4a9fce78
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:3f57fd3fd56199b3eb33890f7ee28180
+Ctrl.hexinfo = hexinfo:7a5056ba4fdb034c7cb6c4fe
+Output = e51ebd30a8c4b8449b0fb29d9adc11af
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:fb9fb108d104e9f662d6593fc84cde69
+Ctrl.hexinfo = hexinfo:5faf29211c1bdbf1b2696a7c
+Output = 7a3a7e670656e48c390cdd7c51e167e0
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:237a39981794f4516dccffc3dda28396
+Ctrl.hexinfo = hexinfo:62ed9528d104c241e0f66275
+Output = 0c26fc9e90e1c5c5f943428301682045
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:b9b6c45f7279218fa09894e06366a3a1
+Ctrl.hexinfo = hexinfo:0f384339670aaed4b89ecb7e
+Output = ee5fad414e32fad5d52a2bf61a7f6c72
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:08b7140e2cd0a4abd79171e4d5a71cad
+Ctrl.hexinfo = hexinfo:099211f0d8a2e02dbb5958c0
+Output = 6162f5142e057efafd2c4f2bad5985a1
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a2
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f4853
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493d
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759a
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac704
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbe
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf1050
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f3
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8b
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8bf4ba
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8bf4ba3f22
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8bf4ba3f227688
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8bf4ba3f2276885abf
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8bf4ba3f2276885abfbc3e
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8bf4ba3f2276885abfbc3e811a
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8bf4ba3f2276885abfbc3e811a568d
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8bf4ba3f2276885abfbc3e811a568d480d
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:ebe28edbae5a410b87a479243db3f690
+Ctrl.hexinfo = hexinfo:e60dd8b28228ce5b9be74d3b
+Output = b4a23963e07f485382cb358a493daec1759ac7043dbeac37152c6ddf105031f0f239f270b7f30616166f10e5d2b4cb11ba8bf4ba3f2276885abfbc3e811a568d480d9192
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:d7e6
+Ctrl.hexinfo = hexinfo:0bbe1fa8722023d7c3da4fff
+Output = 31e798e9931b612a3ad1b9b1008faa8c
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:4646779d
+Ctrl.hexinfo = hexinfo:0bbe1fa8722023d7c3da4fff
+Output = 139f68bcca879b490e268e569087d04d
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:d9811c81d4c6
+Ctrl.hexinfo = hexinfo:0bbe1fa8722023d7c3da4fff
+Output = 914dc4f09cb633a76e6c389e04c64485
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:8838f9d99ec46f09
+Ctrl.hexinfo = hexinfo:0bbe1fa8722023d7c3da4fff
+Output = 4f07dfb6f7a5bf348689e08b2e29c948
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:3e0939b33f34e779f30e
+Ctrl.hexinfo = hexinfo:0bbe1fa8722023d7c3da4fff
+Output = b42c7a98c23be19d1187ff960e87557f
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:f36230cacca4d245d303058c
+Ctrl.hexinfo = hexinfo:0bbe1fa8722023d7c3da4fff
+Output = 50f2068d8010d355d56c5e34aaffbc67
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:7005d32c3d4284c73c3aefc70438
+Ctrl.hexinfo = hexinfo:0bbe1fa8722023d7c3da4fff
+Output = 66fd712ccf5462bbd41e89041ea7ea26
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:c01c83150b7734f8dbd6efd6f54d7365
+Ctrl.hexinfo = hexinfo:0bbe1fa8722023d7c3da4fff
+Output = 5c5edb0ceda9cd0c7f1f3d9e239c67d5
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:da69f1dbbebc837480af692e7e9ee6b9
+Ctrl.hexinfo = hexinfo:9949
+Output = 33c83f54ed00fb1bccd2113e88550941
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:da69f1dbbebc837480af692e7e9ee6b9
+Ctrl.hexinfo = hexinfo:17144da6
+Output = a999c28961424cab35ec06015e8c376a
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:da69f1dbbebc837480af692e7e9ee6b9
+Ctrl.hexinfo = hexinfo:dffdee1062eb
+Output = 4101ad50e626ed6f957bff926dfbb7db
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:da69f1dbbebc837480af692e7e9ee6b9
+Ctrl.hexinfo = hexinfo:9f365043e23b4648
+Output = 4d3e4b971b88771f229df9f564984832
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:da69f1dbbebc837480af692e7e9ee6b9
+Ctrl.hexinfo = hexinfo:a885a0c4567ddc4f96da
+Output = bebbc30f5a83df5e9c9b57db33c0c879
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:da69f1dbbebc837480af692e7e9ee6b9
+Ctrl.hexinfo = hexinfo:c9d86183295bfe4c3d85f0fd
+Output = 87c947e45407db63eb94cbaa02d14e94
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:da69f1dbbebc837480af692e7e9ee6b9
+Ctrl.hexinfo = hexinfo:825fadce46964236a486732c5dad
+Output = 192370a85ff78e3c0245129d9b398558
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:da69f1dbbebc837480af692e7e9ee6b9
+Ctrl.hexinfo = hexinfo:5c0b5eb3ac9f342347d73d7a521723aa
+Output = c7b7634fd809383e87c4b1b3e728be56
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:8d7a4e7d5cf34b3f74873b862aeb33b7
+Output = 6a5594f402f74f69
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:9b208e7ee1e641fac1dff48fc1beb2d2
+Output = 556ed67e24ac0c7c46cc432da8bdb23c
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:4d2572539fed433211da28c8a0eebac3
+Output = 5a4054c59c5b92814025578f43c1b79fe84968fc284e240b
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:4e1e70c9886819a31bc29a537911add9
+Output = ddbfc440449aab4131c6d8aec08ce1496f2702241d0e27cc155c5c7c3cda75b5
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:68f144c952528e540c686dc353b766f2
+Output = 59ed66bb6f54a9688a0b891d0b2ea6743621d9e1b5cc098cf3a55e6f864f9af8a95e4d945d2f987f
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:b66c9d507c9f837fbe60b6675fdbf38b
+Output = c282787ddf421a72fc88811be81b08d0d6ab66c92d1011974aa58335a6bbbd62e9e982bfae5929865ea1d517247089d2
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:34e730b49e46c7ed2fb25975a4cccd2d
+Output = 39e76e6571cb00740260b9070accbdcc4a492c295cbef33d9e37dac21e5e9d07e0f12dc7063d2172641475d4e08b8e3712fb26a10c8376b8
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:e340d87e2d7adbc1b95ec2dbdc3b82be
+Output = a660c0037a53f76f1e7667043f5869348ad07ac0e272e615ce31f16d4ab90d4b35fe5c370c0010ce79aff45682c6fb8b97f9a05b7d40b5af3c62999a10df9c6d
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:afc4e154498d4770aa8365f6903dc83b
+Ctrl.hexinfo = hexinfo:662af20379b29d5ef813e655
+Output = f0b80d6ae4c1e19e2105a37024e35dc6
+
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:108cf63318555c787fa578731dd4f037
+Ctrl.hexinfo = hexinfo:53191b1dd3f94d83084d61d6
+Output = 0ad475c1826da3007637970c8b92b993
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:6ee6c00d70a6cd14bd5a4e8fcfec8386
+Ctrl.hexsalt = hexsalt:532f5131e0a2fecc722f87e5aa2062cb
+Ctrl.hexinfo = hexinfo:861aa2886798231259bd0314
+Output = 13479e9a91dd20fdd757d68ffe8869fb
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:cb09b565de1ac27a50289b3704b93afd
+Ctrl.hexsalt = hexsalt:d504c1c41a499481ce88695d18ae2e8f
+Ctrl.hexinfo = hexinfo:5ed3768c2c7835943a789324
+Output = f081c0255b0cae16edc6ce1d6c9d12bc
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:98f50345fd970639a1b7935f501e1d7c
+Ctrl.hexsalt = hexsalt:3691939461247e9f74382ae4ef629b17
+Ctrl.hexinfo = hexinfo:6ddbdb1314663152c3ccc192
+Output = 56f42183ed3e287298dbbecf143f51ac
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a72b0076221727eca4d3ef8f4d88ac96
+Ctrl.hexsalt = hexsalt:397dc6807de2c1d5ba52e03c4e6c7a19
+Ctrl.hexinfo = hexinfo:12379bd7873a7dbabe894ac8
+Output = 26c0f937e8ca337a859b6c092fe22b9a
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0b09bf8ebe1e85a049174c521e35be64
+Ctrl.hexsalt = hexsalt:313d29bbeaa5ac9e52278f7619d29d93
+Ctrl.hexinfo = hexinfo:e2ac98de1486959bfc6363c0
+Output = 4bfdf78782a45e2a5858edb851c5783c
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:e907ad4fe811ee047af77e0c4418226a
+Ctrl.hexsalt = hexsalt:5000ef57104ca2e86a5fec5883ea4ea8
+Ctrl.hexinfo = hexinfo:c4ee443920f2b7542eee2a24
+Output = 06bfbd9571462c920a5a1b589c765383
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:608dae15fe8b906d2dc649815bdee148
+Ctrl.hexsalt = hexsalt:742cc5a02a24d09c66fd9da0d0c571f6
+Ctrl.hexinfo = hexinfo:ba60ff781e2756cba07f6524
+Output = 7f7f9e5d8f89a8edd10289f1d690f629
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:eb39e8dc7c40b906216108e2592bb6cd
+Ctrl.hexsalt = hexsalt:af9f612da575c1afc8c4afff4ced34e1
+Ctrl.hexinfo = hexinfo:84b7f0628df0cb22baaa279a
+Output = 5202576c69c6276daedf4916de250d19
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:4bac0c1a963b8cf6933beb2ad191a31e
+Ctrl.hexsalt = hexsalt:debd24d71a1a7ae77f7e3aa24d939635
+Ctrl.hexinfo = hexinfo:9e51c8593cec92c89e82439a
+Output = ecb9889f9004f80716b56c44910f160c
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:8aa41e3c8076ea01ca6789dd18709a68
+Ctrl.hexsalt = hexsalt:7c9dacc409cde7b05efdae07bd9973db
+Ctrl.hexinfo = hexinfo:52651f0f2e858bbfbacb2533
+Output = b8683c9a982e0826d659a1ab77a603d7
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d3
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d8
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d89102
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be0
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f2
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c504
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a1
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca6
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd99
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995de
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c710
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca9091
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab6
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355b904
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355b904f9eb
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355b904f9eb0388
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355b904f9eb0388b5b7
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355b904f9eb0388b5b7fe19
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355b904f9eb0388b5b7fe193c95
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355b904f9eb0388b5b7fe193c9546d4
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355b904f9eb0388b5b7fe193c9546d45849
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:02b40d33e3f685aeae677ac344eeaf77
+Ctrl.hexsalt = hexsalt:0ad52c9357c85e4781296a36ca72039c
+Ctrl.hexinfo = hexinfo:c67c389580128f18f6cf8592
+Output = be32e7d306d891028be088f213f9f947c50420d9b5a12ca69818dd9995dedd8e6137c7104d67f2ca90915dda0ab68af2f355b904f9eb0388b5b7fe193c9546d45849133d
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:f4e1
+Ctrl.hexsalt = hexsalt:3638271ccd68a25dc24ecddd39ef3f89
+Ctrl.hexinfo = hexinfo:348a37a27ef1282f5f020dcc
+Output = 3f661ec46fcc1e110b88f33ee7dbc308
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:253554e5
+Ctrl.hexsalt = hexsalt:3638271ccd68a25dc24ecddd39ef3f89
+Ctrl.hexinfo = hexinfo:348a37a27ef1282f5f020dcc
+Output = 73ccb357554ca44967d507518262e38d
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:e10d0e0bc95b
+Ctrl.hexsalt = hexsalt:3638271ccd68a25dc24ecddd39ef3f89
+Ctrl.hexinfo = hexinfo:348a37a27ef1282f5f020dcc
+Output = c4f1cf190980b6777bb35107654b25f9
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:451f7f2c23c51326
+Ctrl.hexsalt = hexsalt:3638271ccd68a25dc24ecddd39ef3f89
+Ctrl.hexinfo = hexinfo:348a37a27ef1282f5f020dcc
+Output = ddb2d7475d00cc65bff6904b4f0b54ba
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0f27277ee800d6cc5425
+Ctrl.hexsalt = hexsalt:3638271ccd68a25dc24ecddd39ef3f89
+Ctrl.hexinfo = hexinfo:348a37a27ef1282f5f020dcc
+Output = 1100a6049ae9d8be01ab3829754cecc2
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:20438ff1f26390dbc3a1a6d0
+Ctrl.hexsalt = hexsalt:3638271ccd68a25dc24ecddd39ef3f89
+Ctrl.hexinfo = hexinfo:348a37a27ef1282f5f020dcc
+Output = 5180382f740444ada597197f98e73e1e
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:b74a149a161546f8c20b06ac4ed4
+Ctrl.hexsalt = hexsalt:3638271ccd68a25dc24ecddd39ef3f89
+Ctrl.hexinfo = hexinfo:348a37a27ef1282f5f020dcc
+Output = 44f676e85c1b1a8bbc3d319218631ca3
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:8aa7df46b8cb3fe47228494f4e116b2c
+Ctrl.hexsalt = hexsalt:3638271ccd68a25dc24ecddd39ef3f89
+Ctrl.hexinfo = hexinfo:348a37a27ef1282f5f020dcc
+Output = ebb24413855a0a3249960d0de0f4750d
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a678236b6ac82077b23f73a510c1d0e2
+Ctrl.hexsalt = hexsalt:46ee4f36a4167a09cde5a33b130c6e1c
+Ctrl.hexinfo = hexinfo:d851
+Output = 5dbe10ead8f81a81a29072eca4501658
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a678236b6ac82077b23f73a510c1d0e2
+Ctrl.hexsalt = hexsalt:46ee4f36a4167a09cde5a33b130c6e1c
+Ctrl.hexinfo = hexinfo:b04da03c
+Output = 0a08d7616dcbec25a36f1936b82992ca
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a678236b6ac82077b23f73a510c1d0e2
+Ctrl.hexsalt = hexsalt:46ee4f36a4167a09cde5a33b130c6e1c
+Ctrl.hexinfo = hexinfo:f9e8b47eade3
+Output = 84a29697445179b662d85dbc59bf8042
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a678236b6ac82077b23f73a510c1d0e2
+Ctrl.hexsalt = hexsalt:46ee4f36a4167a09cde5a33b130c6e1c
+Ctrl.hexinfo = hexinfo:5b141bfa54fcf824
+Output = be7660c840644cec84d67d95ba7ebf2d
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a678236b6ac82077b23f73a510c1d0e2
+Ctrl.hexsalt = hexsalt:46ee4f36a4167a09cde5a33b130c6e1c
+Ctrl.hexinfo = hexinfo:736e7ddb856f0ba14744
+Output = e3010b1fbcb02fd8baa8449ac71d0c62
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a678236b6ac82077b23f73a510c1d0e2
+Ctrl.hexsalt = hexsalt:46ee4f36a4167a09cde5a33b130c6e1c
+Ctrl.hexinfo = hexinfo:c54320ff6e7d1a3b0b3aea00
+Output = df0ac84982999cda676e4cbf707c42f0
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a678236b6ac82077b23f73a510c1d0e2
+Ctrl.hexsalt = hexsalt:46ee4f36a4167a09cde5a33b130c6e1c
+Ctrl.hexinfo = hexinfo:37ab143e1b4ab61d0294ea8afbc7
+Output = 93eec7f4dda18b7e710dbbd7570ebd13
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a678236b6ac82077b23f73a510c1d0e2
+Ctrl.hexsalt = hexsalt:46ee4f36a4167a09cde5a33b130c6e1c
+Ctrl.hexinfo = hexinfo:c3146575d2c60981511e700902fc2ac1
+Output = e9125f77d699faa53d5bc48f3fc2f7d0
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0031558fddb96e3db2e0496026302055
+Ctrl.hexsalt = hexsalt:1ae1
+Ctrl.hexinfo = hexinfo:97ed3540c7466ab27395fe79
+Output = ddf7eedcd997eca3943d4519aaf414f4
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0031558fddb96e3db2e0496026302055
+Ctrl.hexsalt = hexsalt:3bda13b6
+Ctrl.hexinfo = hexinfo:97ed3540c7466ab27395fe79
+Output = ec783ca20501df3cacac5ab4adbc6427
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0031558fddb96e3db2e0496026302055
+Ctrl.hexsalt = hexsalt:c792f52e5876
+Ctrl.hexinfo = hexinfo:97ed3540c7466ab27395fe79
+Output = 9303a2562e6f8c418e3fcc081b94bdcf
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0031558fddb96e3db2e0496026302055
+Ctrl.hexsalt = hexsalt:a9b7a64840d52633
+Ctrl.hexinfo = hexinfo:97ed3540c7466ab27395fe79
+Output = aab6b0dc19bae0dd7fa02391ac3d6ef1
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0031558fddb96e3db2e0496026302055
+Ctrl.hexsalt = hexsalt:8f62a3ec15cdf9b3522f
+Ctrl.hexinfo = hexinfo:97ed3540c7466ab27395fe79
+Output = 1516d5ed7f46474d250408b0864647cf
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0031558fddb96e3db2e0496026302055
+Ctrl.hexsalt = hexsalt:55ed67cbdc98ed8e45214704
+Ctrl.hexinfo = hexinfo:97ed3540c7466ab27395fe79
+Output = 38bf96a3d737a84dc10a835d340b6866
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0031558fddb96e3db2e0496026302055
+Ctrl.hexsalt = hexsalt:e4946aff3b2ab891b311234c77bc
+Ctrl.hexinfo = hexinfo:97ed3540c7466ab27395fe79
+Output = 3ddd870471ff028a63c5f1bacc7e5b5c
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0031558fddb96e3db2e0496026302055
+Ctrl.hexsalt = hexsalt:91e8378de5348cea41f84c41e8546e34
+Ctrl.hexinfo = hexinfo:97ed3540c7466ab27395fe79
+Output = bf1eb0eab488b2393ad6a1c2eb804381
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:4ce16564db9615f75d46c6a9837af7ca
+Ctrl.hexsalt = hexsalt:6199187690823def2037e0632577c6b1
+Output = 0a102289b16cbf4b
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:2578fe1116e27e3a5e8e935e892e12eb
+Ctrl.hexsalt = hexsalt:6199187690823def2037e0632577c6b1
+Output = dd5773998893ad5a93f9819c8e798aab
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:e9dd8bd75f29661e61703346bbf2df47
+Ctrl.hexsalt = hexsalt:6199187690823def2037e0632577c6b1
+Output = 32136643daa64aaac0e2886364f157ba923d7b36ada761eb
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:e4640d3752cf48186a8ad2d7d4a81210
+Ctrl.hexsalt = hexsalt:6199187690823def2037e0632577c6b1
+Output = 6379d59efbe02576663af5efaccb9d063f596a22c8e1fed12cde7cdd7f327e88
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:3bd9a074a219d62273c3f639659a3ecd
+Ctrl.hexsalt = hexsalt:6199187690823def2037e0632577c6b1
+Output = cc45eb2ab80272c1e082b4f167ee4e086f12af3fbd0c812dda5568fea702928999cde3899cffc8a8
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:2147c0fb1c7587b22fa44ce3bf3d8f5b
+Ctrl.hexsalt = hexsalt:6199187690823def2037e0632577c6b1
+Output = 4e3a8827fcdb214686b35bfcc497ca69dccb78d3464aa4af0704ec0fba03c7bb10b9a4e31e27b1b2379a32e46935309c
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:2c2438b6321fed7a9eac200b91b3ac30
+Ctrl.hexsalt = hexsalt:6199187690823def2037e0632577c6b1
+Output = b402fda16e1c2719263be82158972c9080a7bafcbe0a3a6ede3504a3d5c8c0c0e00fe7e5f6bb3afdfa4d661b8fbe4bd7b950cfe0b2443bbd
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:0ffa4c40a822f6e3d86053aefe738eac
+Ctrl.hexsalt = hexsalt:6199187690823def2037e0632577c6b1
+Output = 0486d589aa71a603c09120fb76eeab3293eee2dc36a91b23eb954d6703ade8a7b660d920c5a6f7bf3898d0e81fbad3a680b74b33680e0cc6a16aa616d078b256
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a801d997ed539ae9aa05d17871eb7fab
+Ctrl.hexinfo = hexinfo:03697296e42a6fdbdb24b3ec
+Output = 1a5efa3aca87c1f4
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:e9624e112f9e90e7bf8a749cf37d920c
+Ctrl.hexinfo = hexinfo:03697296e42a6fdbdb24b3ec
+Output = ee93ca3986cc43516ae4e29fd7a90ef1
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:a92acdee54a84a4564d4782d47801ec0
+Ctrl.hexinfo = hexinfo:03697296e42a6fdbdb24b3ec
+Output = 3116b87eaffaa0cc48a72e6c1574df335d706f7c860b44e9
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:e60d902e63b1a2bf5dab733cadb47b10
+Ctrl.hexinfo = hexinfo:03697296e42a6fdbdb24b3ec
+Output = 3fde6c078dd6dc65aacf62beafa39398d2b3d7cfb4b0ee4807bfc98a15330eef
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:d3b747a1d1584a0fc5aefcd4dd8ef9c3
+Ctrl.hexinfo = hexinfo:03697296e42a6fdbdb24b3ec
+Output = 2c4363597d42f9f8736e8050b4a6dd033d7ddac6f7211c4810ef74aff01f101d885767d7ae6f1d7f
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:119559a2c0a8888e9c95b9989a460d97
+Ctrl.hexinfo = hexinfo:03697296e42a6fdbdb24b3ec
+Output = 97922585f69adf484930cf22b8378c797694438502fa47e2f19f0fee97ca11451f3bc81a20c1d74964c63ab2d5df1985
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:807f375266988df5d0ae878efac424fa
+Ctrl.hexinfo = hexinfo:03697296e42a6fdbdb24b3ec
+Output = ba78ef8ab720fc583bb64581917634fca230876cc344e46b44fe61f3bdab556ee753743b78db4b16c0fcd8f987aebad15d0b7b13a10f6819
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:f7906f870b256753b5bc3ef408e47e9b
+Ctrl.hexinfo = hexinfo:03697296e42a6fdbdb24b3ec
+Output = 96bee2ae234f98c285aa970bd54c2e2891febf734bad58a91dc7a97490b6b05fe539f2156ae3acd2e661eced0d59084fda340cd1ba3daa7ca2a550d7b1c19462
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:73b6e2ede34aae5680e2289e611ffc3a
+Ctrl.hexsalt = hexsalt:28df8439747d5a9b502e0838ca6999b2
+Ctrl.hexinfo = hexinfo:232941631fc04dd82f727a51
+Output = b0d36cd7d6b23b48ca6f89901bb784ec
+
+KDF = SSKDF
+Ctrl.mac = mac:HMAC
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:abb7d7554c0de41cada5826a1f79d76f
+Ctrl.hexinfo = hexinfo:a80b9061879365b1669c87a8
+Output = 71e29fff69198eca92f5180bcb281fbdaf409ec7c99ca704b1f56e782d3c4db10cb4158e6634d793a46c13bffb6bdb71a01101936ea9b20f7dbe302558b1356c
+
+Title = SSKDF Test vectors from RFC 8636 Section 8 (With precoumputed ASN.1 info)
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ctrl.hexinfo = hexinfo:307e300a06082b06010502030601a01f041d301ba0071b0553552e5345a110300ea003020101a10730051b036c6861a12904273025a0071b0553552e5345a11a3018a003020101a111300f1b066b72627467741b0553552e5345a22404223020a003020112a10c040aaaaaaaaaaaaaaaaaaaaaa20b0409bbbbbbbbbbbbbbbbbb
+Output = e6ab38c9413e035bb079201ed0b6b73d8d49a814a737c04ee6649614206f73ad
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ctrl.hexinfo = hexinfo:307e300a06082b06010502030602a01f041d301ba0071b0553552e5345a110300ea003020101a10730051b036c6861a12904273025a0071b0553552e5345a11a3018a003020101a111300f1b066b72627467741b0553552e5345a22404223020a003020112a10c040aaaaaaaaaaaaaaaaaaaaaa20b0409bbbbbbbbbbbbbbbbbb
+Output = 77ef4e48c420ae3fec75109d7981697eed5d295c90c62564f7bfd101fa9bc1d5
+
+KDF = SSKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Ctrl.hexinfo = hexinfo:307e300a06082b06010502030603a01f041d301ba0071b0553552e5345a110300ea003020101a10730051b036c6861a12904273025a0071b0553552e5345a11a3018a003020101a111300f1b066b72627467741b0553552e5345a22404223020a003020110a10c040aaaaaaaaaaaaaaaaaaaaaa20b0409bbbbbbbbbbbbbbbbbb
+Output = d3c78b78d75313e9a926f75dfb012363fa17fa01db
diff --git a/test/recipes/30-test_evp_data/evpkdf_ssh.txt b/test/recipes/30-test_evp_data/evpkdf_ssh.txt
new file mode 100644
index 000000000000..d870df7037aa
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_ssh.txt
@@ -0,0 +1,4867 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = SSHKDF tests (from NIST CAVS 14.1 test vectors)
+# The first one uses md instead of digest to test alias works
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:A
+Output = e2f627c0b43f1ac1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:B
+Output = 58471445f342b181
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:C
+Output = 1ca9d310f86d51f6cb8e7007cb2b220d55c5281ce680b533
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:D
+Output = 2c60df8603d34cc1dbb03c11f725a44b44008851c73d6844
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:E
+Output = 472eb8a26166ae6aa8e06868e45c3b26e6eeed06
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:F
+Output = e3e2fdb9d7bc21165a3dbe47e1eceb7764390bab
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100ec6f2c5f0517fd92f730567bd783138302917c277552b1b3fdf2b67d6edb6fa81bd17f7ebbe339b54b171341e6522b91611f8274cc88652a458f8041261040818a268497e949e12f57271318b2b3194c29760cbb767c0fc8833b272994e18682da807e6c9f235d88ef89c203c6f756d25cc2bea199b02c955b8b40cbc04f9208
+Ctrl.hexxcghash = hexxcghash:ee40eef61bea3da8c2b1cec40fc4cdac892a2626
+Ctrl.hexsession_id = hexsession_id:ca9aad244e24797fd348d1250387c8aa45a0110a
+Ctrl.type = type:A
+Output = 55a1015757de84cb
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100ec6f2c5f0517fd92f730567bd783138302917c277552b1b3fdf2b67d6edb6fa81bd17f7ebbe339b54b171341e6522b91611f8274cc88652a458f8041261040818a268497e949e12f57271318b2b3194c29760cbb767c0fc8833b272994e18682da807e6c9f235d88ef89c203c6f756d25cc2bea199b02c955b8b40cbc04f9208
+Ctrl.hexxcghash = hexxcghash:ee40eef61bea3da8c2b1cec40fc4cdac892a2626
+Ctrl.hexsession_id = hexsession_id:ca9aad244e24797fd348d1250387c8aa45a0110a
+Ctrl.type = type:B
+Output = 7e57f61d5735f4fb
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100ec6f2c5f0517fd92f730567bd783138302917c277552b1b3fdf2b67d6edb6fa81bd17f7ebbe339b54b171341e6522b91611f8274cc88652a458f8041261040818a268497e949e12f57271318b2b3194c29760cbb767c0fc8833b272994e18682da807e6c9f235d88ef89c203c6f756d25cc2bea199b02c955b8b40cbc04f9208
+Ctrl.hexxcghash = hexxcghash:ee40eef61bea3da8c2b1cec40fc4cdac892a2626
+Ctrl.hexsession_id = hexsession_id:ca9aad244e24797fd348d1250387c8aa45a0110a
+Ctrl.type = type:C
+Output = dd1c24bde1af845e82207541e3e173aec822fb904a94ae3c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100ec6f2c5f0517fd92f730567bd783138302917c277552b1b3fdf2b67d6edb6fa81bd17f7ebbe339b54b171341e6522b91611f8274cc88652a458f8041261040818a268497e949e12f57271318b2b3194c29760cbb767c0fc8833b272994e18682da807e6c9f235d88ef89c203c6f756d25cc2bea199b02c955b8b40cbc04f9208
+Ctrl.hexxcghash = hexxcghash:ee40eef61bea3da8c2b1cec40fc4cdac892a2626
+Ctrl.hexsession_id = hexsession_id:ca9aad244e24797fd348d1250387c8aa45a0110a
+Ctrl.type = type:D
+Output = cbbfdc9442af6db7f8c4dcaa4b0b5d0163e0e204476aa2a0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100ec6f2c5f0517fd92f730567bd783138302917c277552b1b3fdf2b67d6edb6fa81bd17f7ebbe339b54b171341e6522b91611f8274cc88652a458f8041261040818a268497e949e12f57271318b2b3194c29760cbb767c0fc8833b272994e18682da807e6c9f235d88ef89c203c6f756d25cc2bea199b02c955b8b40cbc04f9208
+Ctrl.hexxcghash = hexxcghash:ee40eef61bea3da8c2b1cec40fc4cdac892a2626
+Ctrl.hexsession_id = hexsession_id:ca9aad244e24797fd348d1250387c8aa45a0110a
+Ctrl.type = type:E
+Output = e153e04886c0dc446dde9a9b3b13efb77151764d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100ec6f2c5f0517fd92f730567bd783138302917c277552b1b3fdf2b67d6edb6fa81bd17f7ebbe339b54b171341e6522b91611f8274cc88652a458f8041261040818a268497e949e12f57271318b2b3194c29760cbb767c0fc8833b272994e18682da807e6c9f235d88ef89c203c6f756d25cc2bea199b02c955b8b40cbc04f9208
+Ctrl.hexxcghash = hexxcghash:ee40eef61bea3da8c2b1cec40fc4cdac892a2626
+Ctrl.hexsession_id = hexsession_id:ca9aad244e24797fd348d1250387c8aa45a0110a
+Ctrl.type = type:F
+Output = c8e4f61bd6b5abb2c6e06eca7b302349435e4842
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100a3beebff410a7cdc0ac56dad0152a7f6da6b1d4195285ce96f8b59930d8c3ccbc518bc043eb60362388ea87c20db3b490b490ba9b90f086004ba3e389cb3a715d477c2b1e480e3419c36cd83e237e241462ee79758f4ff5bf7a5e1eae58a6834778a658c60b2e157d36b16371f97660ad4abfd4a2703dba7cab055be4c778b62
+Ctrl.hexxcghash = hexxcghash:b81915a9656128d2add5e5741914d765226f93e2
+Ctrl.hexsession_id = hexsession_id:2872e0c92fc3074d4f40e408a2ebd83e2fc7bccd
+Ctrl.type = type:A
+Output = 054eaf5d7dea31e7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100a3beebff410a7cdc0ac56dad0152a7f6da6b1d4195285ce96f8b59930d8c3ccbc518bc043eb60362388ea87c20db3b490b490ba9b90f086004ba3e389cb3a715d477c2b1e480e3419c36cd83e237e241462ee79758f4ff5bf7a5e1eae58a6834778a658c60b2e157d36b16371f97660ad4abfd4a2703dba7cab055be4c778b62
+Ctrl.hexxcghash = hexxcghash:b81915a9656128d2add5e5741914d765226f93e2
+Ctrl.hexsession_id = hexsession_id:2872e0c92fc3074d4f40e408a2ebd83e2fc7bccd
+Ctrl.type = type:B
+Output = 6ce586c127da010f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100a3beebff410a7cdc0ac56dad0152a7f6da6b1d4195285ce96f8b59930d8c3ccbc518bc043eb60362388ea87c20db3b490b490ba9b90f086004ba3e389cb3a715d477c2b1e480e3419c36cd83e237e241462ee79758f4ff5bf7a5e1eae58a6834778a658c60b2e157d36b16371f97660ad4abfd4a2703dba7cab055be4c778b62
+Ctrl.hexxcghash = hexxcghash:b81915a9656128d2add5e5741914d765226f93e2
+Ctrl.hexsession_id = hexsession_id:2872e0c92fc3074d4f40e408a2ebd83e2fc7bccd
+Ctrl.type = type:C
+Output = 7907bf3d7c58ce72714b2adb1a14f156194b14378a4a7c49
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100a3beebff410a7cdc0ac56dad0152a7f6da6b1d4195285ce96f8b59930d8c3ccbc518bc043eb60362388ea87c20db3b490b490ba9b90f086004ba3e389cb3a715d477c2b1e480e3419c36cd83e237e241462ee79758f4ff5bf7a5e1eae58a6834778a658c60b2e157d36b16371f97660ad4abfd4a2703dba7cab055be4c778b62
+Ctrl.hexxcghash = hexxcghash:b81915a9656128d2add5e5741914d765226f93e2
+Ctrl.hexsession_id = hexsession_id:2872e0c92fc3074d4f40e408a2ebd83e2fc7bccd
+Ctrl.type = type:D
+Output = c34757dc104e7b811f6550bbc3888e1d4297578fd88b2ca5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100a3beebff410a7cdc0ac56dad0152a7f6da6b1d4195285ce96f8b59930d8c3ccbc518bc043eb60362388ea87c20db3b490b490ba9b90f086004ba3e389cb3a715d477c2b1e480e3419c36cd83e237e241462ee79758f4ff5bf7a5e1eae58a6834778a658c60b2e157d36b16371f97660ad4abfd4a2703dba7cab055be4c778b62
+Ctrl.hexxcghash = hexxcghash:b81915a9656128d2add5e5741914d765226f93e2
+Ctrl.hexsession_id = hexsession_id:2872e0c92fc3074d4f40e408a2ebd83e2fc7bccd
+Ctrl.type = type:E
+Output = e463e05ef70e61f994ee3cd20d504cb6eddb9b1a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100a3beebff410a7cdc0ac56dad0152a7f6da6b1d4195285ce96f8b59930d8c3ccbc518bc043eb60362388ea87c20db3b490b490ba9b90f086004ba3e389cb3a715d477c2b1e480e3419c36cd83e237e241462ee79758f4ff5bf7a5e1eae58a6834778a658c60b2e157d36b16371f97660ad4abfd4a2703dba7cab055be4c778b62
+Ctrl.hexxcghash = hexxcghash:b81915a9656128d2add5e5741914d765226f93e2
+Ctrl.hexsession_id = hexsession_id:2872e0c92fc3074d4f40e408a2ebd83e2fc7bccd
+Ctrl.type = type:F
+Output = 676cf1dfc887e122353eead2b1e644f9d9def944
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008017357de60344a125ca41d9ea51eb304a571d7f0aa37a5e36d4b7a5473546f7226583cefe7c06f6f94b97da0da2517190fa02a0337a3bc9ddfeeb68b953613d4d5e473783f137a82246b8260fb3451363adda1813acdf6b10861e022e23a00db9b5a893fcefd6b647f6a73904aa9c3b53e5d879d7e84f052dfabe15a27c1f3aa9
+Ctrl.hexxcghash = hexxcghash:28fcf3bc600f6bb0b9594b01283d085e149b2586
+Ctrl.hexsession_id = hexsession_id:4d6b90988de45dfd08e8167504a6253a8552c200
+Ctrl.type = type:A
+Output = bc4b5164911bc87b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008017357de60344a125ca41d9ea51eb304a571d7f0aa37a5e36d4b7a5473546f7226583cefe7c06f6f94b97da0da2517190fa02a0337a3bc9ddfeeb68b953613d4d5e473783f137a82246b8260fb3451363adda1813acdf6b10861e022e23a00db9b5a893fcefd6b647f6a73904aa9c3b53e5d879d7e84f052dfabe15a27c1f3aa9
+Ctrl.hexxcghash = hexxcghash:28fcf3bc600f6bb0b9594b01283d085e149b2586
+Ctrl.hexsession_id = hexsession_id:4d6b90988de45dfd08e8167504a6253a8552c200
+Ctrl.type = type:B
+Output = d791c5986b27257e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008017357de60344a125ca41d9ea51eb304a571d7f0aa37a5e36d4b7a5473546f7226583cefe7c06f6f94b97da0da2517190fa02a0337a3bc9ddfeeb68b953613d4d5e473783f137a82246b8260fb3451363adda1813acdf6b10861e022e23a00db9b5a893fcefd6b647f6a73904aa9c3b53e5d879d7e84f052dfabe15a27c1f3aa9
+Ctrl.hexxcghash = hexxcghash:28fcf3bc600f6bb0b9594b01283d085e149b2586
+Ctrl.hexsession_id = hexsession_id:4d6b90988de45dfd08e8167504a6253a8552c200
+Ctrl.type = type:C
+Output = de8e99bb3f60ccf0583712528aa3dd0418fdb90d0a588012
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008017357de60344a125ca41d9ea51eb304a571d7f0aa37a5e36d4b7a5473546f7226583cefe7c06f6f94b97da0da2517190fa02a0337a3bc9ddfeeb68b953613d4d5e473783f137a82246b8260fb3451363adda1813acdf6b10861e022e23a00db9b5a893fcefd6b647f6a73904aa9c3b53e5d879d7e84f052dfabe15a27c1f3aa9
+Ctrl.hexxcghash = hexxcghash:28fcf3bc600f6bb0b9594b01283d085e149b2586
+Ctrl.hexsession_id = hexsession_id:4d6b90988de45dfd08e8167504a6253a8552c200
+Ctrl.type = type:D
+Output = f37f75a685f1eaf4fd270b946d84734e96aa3b4ed130afc6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008017357de60344a125ca41d9ea51eb304a571d7f0aa37a5e36d4b7a5473546f7226583cefe7c06f6f94b97da0da2517190fa02a0337a3bc9ddfeeb68b953613d4d5e473783f137a82246b8260fb3451363adda1813acdf6b10861e022e23a00db9b5a893fcefd6b647f6a73904aa9c3b53e5d879d7e84f052dfabe15a27c1f3aa9
+Ctrl.hexxcghash = hexxcghash:28fcf3bc600f6bb0b9594b01283d085e149b2586
+Ctrl.hexsession_id = hexsession_id:4d6b90988de45dfd08e8167504a6253a8552c200
+Ctrl.type = type:E
+Output = 658f04b0f59aab071b9e11ec9ff187ee10e80254
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008017357de60344a125ca41d9ea51eb304a571d7f0aa37a5e36d4b7a5473546f7226583cefe7c06f6f94b97da0da2517190fa02a0337a3bc9ddfeeb68b953613d4d5e473783f137a82246b8260fb3451363adda1813acdf6b10861e022e23a00db9b5a893fcefd6b647f6a73904aa9c3b53e5d879d7e84f052dfabe15a27c1f3aa9
+Ctrl.hexxcghash = hexxcghash:28fcf3bc600f6bb0b9594b01283d085e149b2586
+Ctrl.hexsession_id = hexsession_id:4d6b90988de45dfd08e8167504a6253a8552c200
+Ctrl.type = type:F
+Output = b030809222ff7a12b0df35072d67f314ab1d5eda
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000000803c3ce2b19e0cadf8ad02438c695efcd3018c833657318bfaef7b9c278cd7e8d7b3a2249f9d586832c3dee727ada167056ff1febc9210186ba47cc1dfaaf08101fb89742ebf4f3e291a20c94a7a6f7877799151d177e163ce3e57ef863c0cda0311265fbac157879150a715e309392b3e521dcf03224717ff5e0030e480f20dff
+Ctrl.hexxcghash = hexxcghash:46a674c532460a80cdc5c6da9a8c3bdf4f3ff614
+Ctrl.hexsession_id = hexsession_id:aedeb64df7119db53202e959dc84be3e5285512d
+Ctrl.type = type:A
+Output = 7a74ec799ef16865
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000000803c3ce2b19e0cadf8ad02438c695efcd3018c833657318bfaef7b9c278cd7e8d7b3a2249f9d586832c3dee727ada167056ff1febc9210186ba47cc1dfaaf08101fb89742ebf4f3e291a20c94a7a6f7877799151d177e163ce3e57ef863c0cda0311265fbac157879150a715e309392b3e521dcf03224717ff5e0030e480f20dff
+Ctrl.hexxcghash = hexxcghash:46a674c532460a80cdc5c6da9a8c3bdf4f3ff614
+Ctrl.hexsession_id = hexsession_id:aedeb64df7119db53202e959dc84be3e5285512d
+Ctrl.type = type:B
+Output = 6e544fc6db0ca1ba
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000000803c3ce2b19e0cadf8ad02438c695efcd3018c833657318bfaef7b9c278cd7e8d7b3a2249f9d586832c3dee727ada167056ff1febc9210186ba47cc1dfaaf08101fb89742ebf4f3e291a20c94a7a6f7877799151d177e163ce3e57ef863c0cda0311265fbac157879150a715e309392b3e521dcf03224717ff5e0030e480f20dff
+Ctrl.hexxcghash = hexxcghash:46a674c532460a80cdc5c6da9a8c3bdf4f3ff614
+Ctrl.hexsession_id = hexsession_id:aedeb64df7119db53202e959dc84be3e5285512d
+Ctrl.type = type:C
+Output = 658226b1b10b2033fa88838b619572b18e81e80c76507918
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000000803c3ce2b19e0cadf8ad02438c695efcd3018c833657318bfaef7b9c278cd7e8d7b3a2249f9d586832c3dee727ada167056ff1febc9210186ba47cc1dfaaf08101fb89742ebf4f3e291a20c94a7a6f7877799151d177e163ce3e57ef863c0cda0311265fbac157879150a715e309392b3e521dcf03224717ff5e0030e480f20dff
+Ctrl.hexxcghash = hexxcghash:46a674c532460a80cdc5c6da9a8c3bdf4f3ff614
+Ctrl.hexsession_id = hexsession_id:aedeb64df7119db53202e959dc84be3e5285512d
+Ctrl.type = type:D
+Output = 327298c8660685efcb01c5c0df49faebb15c0e93b0f6c65d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000000803c3ce2b19e0cadf8ad02438c695efcd3018c833657318bfaef7b9c278cd7e8d7b3a2249f9d586832c3dee727ada167056ff1febc9210186ba47cc1dfaaf08101fb89742ebf4f3e291a20c94a7a6f7877799151d177e163ce3e57ef863c0cda0311265fbac157879150a715e309392b3e521dcf03224717ff5e0030e480f20dff
+Ctrl.hexxcghash = hexxcghash:46a674c532460a80cdc5c6da9a8c3bdf4f3ff614
+Ctrl.hexsession_id = hexsession_id:aedeb64df7119db53202e959dc84be3e5285512d
+Ctrl.type = type:E
+Output = 6b618a10aeaa12c9a8d2bcb10e975605582c00e5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000000803c3ce2b19e0cadf8ad02438c695efcd3018c833657318bfaef7b9c278cd7e8d7b3a2249f9d586832c3dee727ada167056ff1febc9210186ba47cc1dfaaf08101fb89742ebf4f3e291a20c94a7a6f7877799151d177e163ce3e57ef863c0cda0311265fbac157879150a715e309392b3e521dcf03224717ff5e0030e480f20dff
+Ctrl.hexxcghash = hexxcghash:46a674c532460a80cdc5c6da9a8c3bdf4f3ff614
+Ctrl.hexsession_id = hexsession_id:aedeb64df7119db53202e959dc84be3e5285512d
+Ctrl.type = type:F
+Output = 6d4ce50da9de90d6f746e812a2e74bcd921f5612
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008075957f464f5a7985e1a3ffb7d5814ff9ceb8fb1584a3f5cc454c37139e9b880940442cce2aef94d9d0462c4dc313ed7a8cc3f9a58c38a98ef0236e3cc78fb63b6f82e9c503097b7a08ef2261dda68c7bfe9f83ac790d1f9ff57605d24f4bdfedde23cc5aabba248bc91d3fe1d4394485bc4421730a297694c09bdf024ac2eac3
+Ctrl.hexxcghash = hexxcghash:0a70b4f26b1985d48ece540f1de6304fdb38212f
+Ctrl.hexsession_id = hexsession_id:2f0ce0e2da2e2bf11eae2ab98e9734412d47a19a
+Ctrl.type = type:A
+Output = b655839abcb1a7b8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008075957f464f5a7985e1a3ffb7d5814ff9ceb8fb1584a3f5cc454c37139e9b880940442cce2aef94d9d0462c4dc313ed7a8cc3f9a58c38a98ef0236e3cc78fb63b6f82e9c503097b7a08ef2261dda68c7bfe9f83ac790d1f9ff57605d24f4bdfedde23cc5aabba248bc91d3fe1d4394485bc4421730a297694c09bdf024ac2eac3
+Ctrl.hexxcghash = hexxcghash:0a70b4f26b1985d48ece540f1de6304fdb38212f
+Ctrl.hexsession_id = hexsession_id:2f0ce0e2da2e2bf11eae2ab98e9734412d47a19a
+Ctrl.type = type:B
+Output = 98f9ec980831a8bc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008075957f464f5a7985e1a3ffb7d5814ff9ceb8fb1584a3f5cc454c37139e9b880940442cce2aef94d9d0462c4dc313ed7a8cc3f9a58c38a98ef0236e3cc78fb63b6f82e9c503097b7a08ef2261dda68c7bfe9f83ac790d1f9ff57605d24f4bdfedde23cc5aabba248bc91d3fe1d4394485bc4421730a297694c09bdf024ac2eac3
+Ctrl.hexxcghash = hexxcghash:0a70b4f26b1985d48ece540f1de6304fdb38212f
+Ctrl.hexsession_id = hexsession_id:2f0ce0e2da2e2bf11eae2ab98e9734412d47a19a
+Ctrl.type = type:C
+Output = 31a63b64cfa8b6a12ba165096dad8d127cd3f3b67698b670
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008075957f464f5a7985e1a3ffb7d5814ff9ceb8fb1584a3f5cc454c37139e9b880940442cce2aef94d9d0462c4dc313ed7a8cc3f9a58c38a98ef0236e3cc78fb63b6f82e9c503097b7a08ef2261dda68c7bfe9f83ac790d1f9ff57605d24f4bdfedde23cc5aabba248bc91d3fe1d4394485bc4421730a297694c09bdf024ac2eac3
+Ctrl.hexxcghash = hexxcghash:0a70b4f26b1985d48ece540f1de6304fdb38212f
+Ctrl.hexsession_id = hexsession_id:2f0ce0e2da2e2bf11eae2ab98e9734412d47a19a
+Ctrl.type = type:D
+Output = 8bd79633967b92f0039a38a2d421e12840ea5c31b43c4e90
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008075957f464f5a7985e1a3ffb7d5814ff9ceb8fb1584a3f5cc454c37139e9b880940442cce2aef94d9d0462c4dc313ed7a8cc3f9a58c38a98ef0236e3cc78fb63b6f82e9c503097b7a08ef2261dda68c7bfe9f83ac790d1f9ff57605d24f4bdfedde23cc5aabba248bc91d3fe1d4394485bc4421730a297694c09bdf024ac2eac3
+Ctrl.hexxcghash = hexxcghash:0a70b4f26b1985d48ece540f1de6304fdb38212f
+Ctrl.hexsession_id = hexsession_id:2f0ce0e2da2e2bf11eae2ab98e9734412d47a19a
+Ctrl.type = type:E
+Output = 37eccade73b422d1108e390eaa28c646b554a721
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008075957f464f5a7985e1a3ffb7d5814ff9ceb8fb1584a3f5cc454c37139e9b880940442cce2aef94d9d0462c4dc313ed7a8cc3f9a58c38a98ef0236e3cc78fb63b6f82e9c503097b7a08ef2261dda68c7bfe9f83ac790d1f9ff57605d24f4bdfedde23cc5aabba248bc91d3fe1d4394485bc4421730a297694c09bdf024ac2eac3
+Ctrl.hexxcghash = hexxcghash:0a70b4f26b1985d48ece540f1de6304fdb38212f
+Ctrl.hexsession_id = hexsession_id:2f0ce0e2da2e2bf11eae2ab98e9734412d47a19a
+Ctrl.type = type:F
+Output = 013a20fc8f53ef08aae0a836b9410153a877983a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100c050aa3d848750af69d1c04d6cb0a1ef8a4f25be4b16c927ff7313e83680b1b7a92b6100fa773cea9958fc7efb1a475fc71eda8be8efc92ad198a34d6ae017f12b76f39c82b741994b0d42ada1807fa7803876d21d93b129d75dc9aba4811ef51925e49e4bf4f5313e8fee0625d8727da8bcb15eb15da2d237082fc5499621ef
+Ctrl.hexxcghash = hexxcghash:5ea2568ee7ddcdb3260dfdf54e15e4d494ca9023
+Ctrl.hexsession_id = hexsession_id:bc8988ac5f9058ee76536472b1706c5c338bd114
+Ctrl.type = type:A
+Output = 12f6c3ac60d6ee3b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100c050aa3d848750af69d1c04d6cb0a1ef8a4f25be4b16c927ff7313e83680b1b7a92b6100fa773cea9958fc7efb1a475fc71eda8be8efc92ad198a34d6ae017f12b76f39c82b741994b0d42ada1807fa7803876d21d93b129d75dc9aba4811ef51925e49e4bf4f5313e8fee0625d8727da8bcb15eb15da2d237082fc5499621ef
+Ctrl.hexxcghash = hexxcghash:5ea2568ee7ddcdb3260dfdf54e15e4d494ca9023
+Ctrl.hexsession_id = hexsession_id:bc8988ac5f9058ee76536472b1706c5c338bd114
+Ctrl.type = type:B
+Output = 536d106e00aec6fd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100c050aa3d848750af69d1c04d6cb0a1ef8a4f25be4b16c927ff7313e83680b1b7a92b6100fa773cea9958fc7efb1a475fc71eda8be8efc92ad198a34d6ae017f12b76f39c82b741994b0d42ada1807fa7803876d21d93b129d75dc9aba4811ef51925e49e4bf4f5313e8fee0625d8727da8bcb15eb15da2d237082fc5499621ef
+Ctrl.hexxcghash = hexxcghash:5ea2568ee7ddcdb3260dfdf54e15e4d494ca9023
+Ctrl.hexsession_id = hexsession_id:bc8988ac5f9058ee76536472b1706c5c338bd114
+Ctrl.type = type:C
+Output = 26b8ec66854d0f0aa98f6888be628ebc75900c3738d47894
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100c050aa3d848750af69d1c04d6cb0a1ef8a4f25be4b16c927ff7313e83680b1b7a92b6100fa773cea9958fc7efb1a475fc71eda8be8efc92ad198a34d6ae017f12b76f39c82b741994b0d42ada1807fa7803876d21d93b129d75dc9aba4811ef51925e49e4bf4f5313e8fee0625d8727da8bcb15eb15da2d237082fc5499621ef
+Ctrl.hexxcghash = hexxcghash:5ea2568ee7ddcdb3260dfdf54e15e4d494ca9023
+Ctrl.hexsession_id = hexsession_id:bc8988ac5f9058ee76536472b1706c5c338bd114
+Ctrl.type = type:D
+Output = d5d3b3817214eeb3bf292dffc77daeab062ac7fcd2e3a2bd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100c050aa3d848750af69d1c04d6cb0a1ef8a4f25be4b16c927ff7313e83680b1b7a92b6100fa773cea9958fc7efb1a475fc71eda8be8efc92ad198a34d6ae017f12b76f39c82b741994b0d42ada1807fa7803876d21d93b129d75dc9aba4811ef51925e49e4bf4f5313e8fee0625d8727da8bcb15eb15da2d237082fc5499621ef
+Ctrl.hexxcghash = hexxcghash:5ea2568ee7ddcdb3260dfdf54e15e4d494ca9023
+Ctrl.hexsession_id = hexsession_id:bc8988ac5f9058ee76536472b1706c5c338bd114
+Ctrl.type = type:E
+Output = 014613aef22194307bc0678f6edd1ccff240adfa
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100c050aa3d848750af69d1c04d6cb0a1ef8a4f25be4b16c927ff7313e83680b1b7a92b6100fa773cea9958fc7efb1a475fc71eda8be8efc92ad198a34d6ae017f12b76f39c82b741994b0d42ada1807fa7803876d21d93b129d75dc9aba4811ef51925e49e4bf4f5313e8fee0625d8727da8bcb15eb15da2d237082fc5499621ef
+Ctrl.hexxcghash = hexxcghash:5ea2568ee7ddcdb3260dfdf54e15e4d494ca9023
+Ctrl.hexsession_id = hexsession_id:bc8988ac5f9058ee76536472b1706c5c338bd114
+Ctrl.type = type:F
+Output = 5057b4cc2c300f7546d358a75daf58233b71da1a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100f00388418be28ae3235c5b640d000df44f6e65782cad783726a507e2c645a056307f1ab7b4cd24d38640118105d7415c2ecea77e33e7b8a9dc9d205e3fdfb718769754213c0782ee18c7db1408e780369bccfb8233581cda4fbb133b3c41d0a7afa6996f31f8dd36fa3dd82efb23dcaa1ec5e37caae3af639123190fe7795983
+Ctrl.hexxcghash = hexxcghash:fc48c85ac48ee97be3ce45c10807a666e8e9b639
+Ctrl.hexsession_id = hexsession_id:d36e8c070b97795dfb10a3c2e41e4d0d70382606
+Ctrl.type = type:A
+Output = d160f91f36027ff9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100f00388418be28ae3235c5b640d000df44f6e65782cad783726a507e2c645a056307f1ab7b4cd24d38640118105d7415c2ecea77e33e7b8a9dc9d205e3fdfb718769754213c0782ee18c7db1408e780369bccfb8233581cda4fbb133b3c41d0a7afa6996f31f8dd36fa3dd82efb23dcaa1ec5e37caae3af639123190fe7795983
+Ctrl.hexxcghash = hexxcghash:fc48c85ac48ee97be3ce45c10807a666e8e9b639
+Ctrl.hexsession_id = hexsession_id:d36e8c070b97795dfb10a3c2e41e4d0d70382606
+Ctrl.type = type:B
+Output = 0d02ec310663bbcc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100f00388418be28ae3235c5b640d000df44f6e65782cad783726a507e2c645a056307f1ab7b4cd24d38640118105d7415c2ecea77e33e7b8a9dc9d205e3fdfb718769754213c0782ee18c7db1408e780369bccfb8233581cda4fbb133b3c41d0a7afa6996f31f8dd36fa3dd82efb23dcaa1ec5e37caae3af639123190fe7795983
+Ctrl.hexxcghash = hexxcghash:fc48c85ac48ee97be3ce45c10807a666e8e9b639
+Ctrl.hexsession_id = hexsession_id:d36e8c070b97795dfb10a3c2e41e4d0d70382606
+Ctrl.type = type:C
+Output = 03b66f451ad93a01914dd3372d980bea3de94993e176ea01
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100f00388418be28ae3235c5b640d000df44f6e65782cad783726a507e2c645a056307f1ab7b4cd24d38640118105d7415c2ecea77e33e7b8a9dc9d205e3fdfb718769754213c0782ee18c7db1408e780369bccfb8233581cda4fbb133b3c41d0a7afa6996f31f8dd36fa3dd82efb23dcaa1ec5e37caae3af639123190fe7795983
+Ctrl.hexxcghash = hexxcghash:fc48c85ac48ee97be3ce45c10807a666e8e9b639
+Ctrl.hexsession_id = hexsession_id:d36e8c070b97795dfb10a3c2e41e4d0d70382606
+Ctrl.type = type:D
+Output = c2db767cbbdf2f839eb2f37ada87a041d220b9f58842d0db
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100f00388418be28ae3235c5b640d000df44f6e65782cad783726a507e2c645a056307f1ab7b4cd24d38640118105d7415c2ecea77e33e7b8a9dc9d205e3fdfb718769754213c0782ee18c7db1408e780369bccfb8233581cda4fbb133b3c41d0a7afa6996f31f8dd36fa3dd82efb23dcaa1ec5e37caae3af639123190fe7795983
+Ctrl.hexxcghash = hexxcghash:fc48c85ac48ee97be3ce45c10807a666e8e9b639
+Ctrl.hexsession_id = hexsession_id:d36e8c070b97795dfb10a3c2e41e4d0d70382606
+Ctrl.type = type:E
+Output = 0b2944c26dcf4cc877cdc55c4e9b1b8155e3874b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100f00388418be28ae3235c5b640d000df44f6e65782cad783726a507e2c645a056307f1ab7b4cd24d38640118105d7415c2ecea77e33e7b8a9dc9d205e3fdfb718769754213c0782ee18c7db1408e780369bccfb8233581cda4fbb133b3c41d0a7afa6996f31f8dd36fa3dd82efb23dcaa1ec5e37caae3af639123190fe7795983
+Ctrl.hexxcghash = hexxcghash:fc48c85ac48ee97be3ce45c10807a666e8e9b639
+Ctrl.hexsession_id = hexsession_id:d36e8c070b97795dfb10a3c2e41e4d0d70382606
+Ctrl.type = type:F
+Output = f7977d574c7d9e4f34ecd6b405c765963f0dfe57
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:00000081009dc61278a79fdb00ee937c0418668ac0176fdfd0297ebc86ee391e3e8db147f01d782650f1e30391d3c1fe62425842119fe41b76243ed47f6c30370dd1cc1b10e3bdac2730287b0e5901e487563d700d56078ed88d20c300250a3da5f2128db56230d90bb99e90aca80da446d8dddac49e2f2db1b37f9e1b65834adf8fdbcd31
+Ctrl.hexxcghash = hexxcghash:3c63a552ac5313d219ec30f1e926e2c52e992929
+Ctrl.hexsession_id = hexsession_id:a17e0e9cc2741d861f4c7195c29c75e4c38e9ba0
+Ctrl.type = type:A
+Output = e4387818ab7f4fa6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:00000081009dc61278a79fdb00ee937c0418668ac0176fdfd0297ebc86ee391e3e8db147f01d782650f1e30391d3c1fe62425842119fe41b76243ed47f6c30370dd1cc1b10e3bdac2730287b0e5901e487563d700d56078ed88d20c300250a3da5f2128db56230d90bb99e90aca80da446d8dddac49e2f2db1b37f9e1b65834adf8fdbcd31
+Ctrl.hexxcghash = hexxcghash:3c63a552ac5313d219ec30f1e926e2c52e992929
+Ctrl.hexsession_id = hexsession_id:a17e0e9cc2741d861f4c7195c29c75e4c38e9ba0
+Ctrl.type = type:B
+Output = 1daabebcc8a064df
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:00000081009dc61278a79fdb00ee937c0418668ac0176fdfd0297ebc86ee391e3e8db147f01d782650f1e30391d3c1fe62425842119fe41b76243ed47f6c30370dd1cc1b10e3bdac2730287b0e5901e487563d700d56078ed88d20c300250a3da5f2128db56230d90bb99e90aca80da446d8dddac49e2f2db1b37f9e1b65834adf8fdbcd31
+Ctrl.hexxcghash = hexxcghash:3c63a552ac5313d219ec30f1e926e2c52e992929
+Ctrl.hexsession_id = hexsession_id:a17e0e9cc2741d861f4c7195c29c75e4c38e9ba0
+Ctrl.type = type:C
+Output = 9fffad3aec53cd719c1d500850c2f38d8eea04606f78b402
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:00000081009dc61278a79fdb00ee937c0418668ac0176fdfd0297ebc86ee391e3e8db147f01d782650f1e30391d3c1fe62425842119fe41b76243ed47f6c30370dd1cc1b10e3bdac2730287b0e5901e487563d700d56078ed88d20c300250a3da5f2128db56230d90bb99e90aca80da446d8dddac49e2f2db1b37f9e1b65834adf8fdbcd31
+Ctrl.hexxcghash = hexxcghash:3c63a552ac5313d219ec30f1e926e2c52e992929
+Ctrl.hexsession_id = hexsession_id:a17e0e9cc2741d861f4c7195c29c75e4c38e9ba0
+Ctrl.type = type:D
+Output = 6b196bce2aa2bd912ffd67a94fc42dec1051376f73ec3ce2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:00000081009dc61278a79fdb00ee937c0418668ac0176fdfd0297ebc86ee391e3e8db147f01d782650f1e30391d3c1fe62425842119fe41b76243ed47f6c30370dd1cc1b10e3bdac2730287b0e5901e487563d700d56078ed88d20c300250a3da5f2128db56230d90bb99e90aca80da446d8dddac49e2f2db1b37f9e1b65834adf8fdbcd31
+Ctrl.hexxcghash = hexxcghash:3c63a552ac5313d219ec30f1e926e2c52e992929
+Ctrl.hexsession_id = hexsession_id:a17e0e9cc2741d861f4c7195c29c75e4c38e9ba0
+Ctrl.type = type:E
+Output = beab583906e6bed005558c102a5b5fd6ee71485f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:00000081009dc61278a79fdb00ee937c0418668ac0176fdfd0297ebc86ee391e3e8db147f01d782650f1e30391d3c1fe62425842119fe41b76243ed47f6c30370dd1cc1b10e3bdac2730287b0e5901e487563d700d56078ed88d20c300250a3da5f2128db56230d90bb99e90aca80da446d8dddac49e2f2db1b37f9e1b65834adf8fdbcd31
+Ctrl.hexxcghash = hexxcghash:3c63a552ac5313d219ec30f1e926e2c52e992929
+Ctrl.hexsession_id = hexsession_id:a17e0e9cc2741d861f4c7195c29c75e4c38e9ba0
+Ctrl.type = type:F
+Output = 105140594b5b9061de7ff2afac09bce81b75d6c6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100df75bb7ce0b66431ca073a5768dbc6930b024b8d6804a5ef9f3f3c9341b8c8b7216eaf26536ac671ab360eff568502e596adbf41b795d329d136ebe44c60ff4ffd58ed99b40a228cab6c8ed9733702e75f7750e58f04cbb78402eec2877205a0ba3f48318543489dc4885dcdc51c4658acbc28f9a82c563ac20b582cff8c432d
+Ctrl.hexxcghash = hexxcghash:c08ddd40832cc96fe373b67a4850b86848e48f70
+Ctrl.hexsession_id = hexsession_id:477c8d32e73a475707e0085cf235d605ed564a1c
+Ctrl.type = type:A
+Output = ef982c8fd0fd464f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100df75bb7ce0b66431ca073a5768dbc6930b024b8d6804a5ef9f3f3c9341b8c8b7216eaf26536ac671ab360eff568502e596adbf41b795d329d136ebe44c60ff4ffd58ed99b40a228cab6c8ed9733702e75f7750e58f04cbb78402eec2877205a0ba3f48318543489dc4885dcdc51c4658acbc28f9a82c563ac20b582cff8c432d
+Ctrl.hexxcghash = hexxcghash:c08ddd40832cc96fe373b67a4850b86848e48f70
+Ctrl.hexsession_id = hexsession_id:477c8d32e73a475707e0085cf235d605ed564a1c
+Ctrl.type = type:B
+Output = 845ad3ba4d359326
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100df75bb7ce0b66431ca073a5768dbc6930b024b8d6804a5ef9f3f3c9341b8c8b7216eaf26536ac671ab360eff568502e596adbf41b795d329d136ebe44c60ff4ffd58ed99b40a228cab6c8ed9733702e75f7750e58f04cbb78402eec2877205a0ba3f48318543489dc4885dcdc51c4658acbc28f9a82c563ac20b582cff8c432d
+Ctrl.hexxcghash = hexxcghash:c08ddd40832cc96fe373b67a4850b86848e48f70
+Ctrl.hexsession_id = hexsession_id:477c8d32e73a475707e0085cf235d605ed564a1c
+Ctrl.type = type:C
+Output = d9e516001b6b1a17268e507fa6e13f6bc9c3ded0020ef841
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100df75bb7ce0b66431ca073a5768dbc6930b024b8d6804a5ef9f3f3c9341b8c8b7216eaf26536ac671ab360eff568502e596adbf41b795d329d136ebe44c60ff4ffd58ed99b40a228cab6c8ed9733702e75f7750e58f04cbb78402eec2877205a0ba3f48318543489dc4885dcdc51c4658acbc28f9a82c563ac20b582cff8c432d
+Ctrl.hexxcghash = hexxcghash:c08ddd40832cc96fe373b67a4850b86848e48f70
+Ctrl.hexsession_id = hexsession_id:477c8d32e73a475707e0085cf235d605ed564a1c
+Ctrl.type = type:D
+Output = d57d2f3c25b536442d8c7f36d62778d06fb6e7d4b5c7ab76
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100df75bb7ce0b66431ca073a5768dbc6930b024b8d6804a5ef9f3f3c9341b8c8b7216eaf26536ac671ab360eff568502e596adbf41b795d329d136ebe44c60ff4ffd58ed99b40a228cab6c8ed9733702e75f7750e58f04cbb78402eec2877205a0ba3f48318543489dc4885dcdc51c4658acbc28f9a82c563ac20b582cff8c432d
+Ctrl.hexxcghash = hexxcghash:c08ddd40832cc96fe373b67a4850b86848e48f70
+Ctrl.hexsession_id = hexsession_id:477c8d32e73a475707e0085cf235d605ed564a1c
+Ctrl.type = type:E
+Output = f0b75425b271eb82645b1f1424b2a838dbcf6f98
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008100df75bb7ce0b66431ca073a5768dbc6930b024b8d6804a5ef9f3f3c9341b8c8b7216eaf26536ac671ab360eff568502e596adbf41b795d329d136ebe44c60ff4ffd58ed99b40a228cab6c8ed9733702e75f7750e58f04cbb78402eec2877205a0ba3f48318543489dc4885dcdc51c4658acbc28f9a82c563ac20b582cff8c432d
+Ctrl.hexxcghash = hexxcghash:c08ddd40832cc96fe373b67a4850b86848e48f70
+Ctrl.hexsession_id = hexsession_id:477c8d32e73a475707e0085cf235d605ed564a1c
+Ctrl.type = type:F
+Output = cdf59b2327588ffd18becfc0e5bb526014101401
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001010085a60bcca88b096c418e825f3de4fd8920ecce617afadda2ca8001e8eba07e58e60e70a9a05b8ddc29d5636d33c407d5f23952b65326e113f28d89bc6ba3a4c3b71ae239d6d1bd295466682d1c675bdb88a3259f474fe54a0f4004ddc46b442451654e1e66d0c93d7b310f28a8db7b95eee7abc61e71dee322b4e732baf9ec7ce189b889d536da1a55a2cc29e1666aa9c0e702f4412206bd207302fe84043c664394bde0e0a47d0a7a947c95997e1dbaeecd2efae12cacef8eab2f6b2478dedcebb3264827cf226e13f8082931db410fbc03352e7dde82fd1f58caab3115aa065ac6e2a1c7b1c1b2d5fa3447bf9839d76cfa5822b097bff9106f37eba1250145
+Ctrl.hexxcghash = hexxcghash:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.hexsession_id = hexsession_id:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.type = type:A
+Output = 79c9195e683ae10750960cb55c4d4c0b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001010085a60bcca88b096c418e825f3de4fd8920ecce617afadda2ca8001e8eba07e58e60e70a9a05b8ddc29d5636d33c407d5f23952b65326e113f28d89bc6ba3a4c3b71ae239d6d1bd295466682d1c675bdb88a3259f474fe54a0f4004ddc46b442451654e1e66d0c93d7b310f28a8db7b95eee7abc61e71dee322b4e732baf9ec7ce189b889d536da1a55a2cc29e1666aa9c0e702f4412206bd207302fe84043c664394bde0e0a47d0a7a947c95997e1dbaeecd2efae12cacef8eab2f6b2478dedcebb3264827cf226e13f8082931db410fbc03352e7dde82fd1f58caab3115aa065ac6e2a1c7b1c1b2d5fa3447bf9839d76cfa5822b097bff9106f37eba1250145
+Ctrl.hexxcghash = hexxcghash:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.hexsession_id = hexsession_id:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.type = type:B
+Output = ef00b448ab9fd6523bb5143a0a818750
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001010085a60bcca88b096c418e825f3de4fd8920ecce617afadda2ca8001e8eba07e58e60e70a9a05b8ddc29d5636d33c407d5f23952b65326e113f28d89bc6ba3a4c3b71ae239d6d1bd295466682d1c675bdb88a3259f474fe54a0f4004ddc46b442451654e1e66d0c93d7b310f28a8db7b95eee7abc61e71dee322b4e732baf9ec7ce189b889d536da1a55a2cc29e1666aa9c0e702f4412206bd207302fe84043c664394bde0e0a47d0a7a947c95997e1dbaeecd2efae12cacef8eab2f6b2478dedcebb3264827cf226e13f8082931db410fbc03352e7dde82fd1f58caab3115aa065ac6e2a1c7b1c1b2d5fa3447bf9839d76cfa5822b097bff9106f37eba1250145
+Ctrl.hexxcghash = hexxcghash:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.hexsession_id = hexsession_id:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.type = type:C
+Output = 51c8b4aaf5e42443be0aa3c50aa7e1dd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001010085a60bcca88b096c418e825f3de4fd8920ecce617afadda2ca8001e8eba07e58e60e70a9a05b8ddc29d5636d33c407d5f23952b65326e113f28d89bc6ba3a4c3b71ae239d6d1bd295466682d1c675bdb88a3259f474fe54a0f4004ddc46b442451654e1e66d0c93d7b310f28a8db7b95eee7abc61e71dee322b4e732baf9ec7ce189b889d536da1a55a2cc29e1666aa9c0e702f4412206bd207302fe84043c664394bde0e0a47d0a7a947c95997e1dbaeecd2efae12cacef8eab2f6b2478dedcebb3264827cf226e13f8082931db410fbc03352e7dde82fd1f58caab3115aa065ac6e2a1c7b1c1b2d5fa3447bf9839d76cfa5822b097bff9106f37eba1250145
+Ctrl.hexxcghash = hexxcghash:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.hexsession_id = hexsession_id:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.type = type:D
+Output = 4153a587397fb14dc3faad028fdb7ecc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001010085a60bcca88b096c418e825f3de4fd8920ecce617afadda2ca8001e8eba07e58e60e70a9a05b8ddc29d5636d33c407d5f23952b65326e113f28d89bc6ba3a4c3b71ae239d6d1bd295466682d1c675bdb88a3259f474fe54a0f4004ddc46b442451654e1e66d0c93d7b310f28a8db7b95eee7abc61e71dee322b4e732baf9ec7ce189b889d536da1a55a2cc29e1666aa9c0e702f4412206bd207302fe84043c664394bde0e0a47d0a7a947c95997e1dbaeecd2efae12cacef8eab2f6b2478dedcebb3264827cf226e13f8082931db410fbc03352e7dde82fd1f58caab3115aa065ac6e2a1c7b1c1b2d5fa3447bf9839d76cfa5822b097bff9106f37eba1250145
+Ctrl.hexxcghash = hexxcghash:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.hexsession_id = hexsession_id:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.type = type:E
+Output = d23e36347052a1cfb4a7789df48627e8a31345c7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001010085a60bcca88b096c418e825f3de4fd8920ecce617afadda2ca8001e8eba07e58e60e70a9a05b8ddc29d5636d33c407d5f23952b65326e113f28d89bc6ba3a4c3b71ae239d6d1bd295466682d1c675bdb88a3259f474fe54a0f4004ddc46b442451654e1e66d0c93d7b310f28a8db7b95eee7abc61e71dee322b4e732baf9ec7ce189b889d536da1a55a2cc29e1666aa9c0e702f4412206bd207302fe84043c664394bde0e0a47d0a7a947c95997e1dbaeecd2efae12cacef8eab2f6b2478dedcebb3264827cf226e13f8082931db410fbc03352e7dde82fd1f58caab3115aa065ac6e2a1c7b1c1b2d5fa3447bf9839d76cfa5822b097bff9106f37eba1250145
+Ctrl.hexxcghash = hexxcghash:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.hexsession_id = hexsession_id:dde6f8e070ef32a27ff04ad1045c65b2dfa33e03
+Ctrl.type = type:F
+Output = c1286e92655912d923154c460702a31424bd6b01
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100c0724e077d7237441eb79039debaa851c0bf411e69cd5314f3c72aa45760c9969985b34291fb64bf964b719d2b989e40a0e9fbccdb23536a78f1b55ebbda809f862e8ec3561c15c4288595546e09789cbc2491050073222397957c9090b7f8f96e3fefbc5f438c72ca8bb48f6337e208ee9b3f630a8c5b40b9fafca8e55be0a0cf4046884a0a049b4557da4ddb7a344226f4707c706e96467b1568ad4d10363aa9eb04b91efbada0c1c292475ce9893a27d4a1deb4a262d980141e63756adf3d5fbcf6ebde919cfd44052984704af6ba360e190fecfc730a5e470785d3061ee5f495cd697af97f90bbc11f2e4e41e57ce25f34b9c4ec9f3c051d964ad0c036b4
+Ctrl.hexxcghash = hexxcghash:5ae93beda675546c8a783974925aca9b365a6d8e
+Ctrl.hexsession_id = hexsession_id:bb0bfeb33b78474b2d53232b3122506992c0cae4
+Ctrl.type = type:A
+Output = 739ad52e454ba3457735b7c5304c6578
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100c0724e077d7237441eb79039debaa851c0bf411e69cd5314f3c72aa45760c9969985b34291fb64bf964b719d2b989e40a0e9fbccdb23536a78f1b55ebbda809f862e8ec3561c15c4288595546e09789cbc2491050073222397957c9090b7f8f96e3fefbc5f438c72ca8bb48f6337e208ee9b3f630a8c5b40b9fafca8e55be0a0cf4046884a0a049b4557da4ddb7a344226f4707c706e96467b1568ad4d10363aa9eb04b91efbada0c1c292475ce9893a27d4a1deb4a262d980141e63756adf3d5fbcf6ebde919cfd44052984704af6ba360e190fecfc730a5e470785d3061ee5f495cd697af97f90bbc11f2e4e41e57ce25f34b9c4ec9f3c051d964ad0c036b4
+Ctrl.hexxcghash = hexxcghash:5ae93beda675546c8a783974925aca9b365a6d8e
+Ctrl.hexsession_id = hexsession_id:bb0bfeb33b78474b2d53232b3122506992c0cae4
+Ctrl.type = type:B
+Output = 3bd9f9d9f06aa521d2f53e40fc5d9f90
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100c0724e077d7237441eb79039debaa851c0bf411e69cd5314f3c72aa45760c9969985b34291fb64bf964b719d2b989e40a0e9fbccdb23536a78f1b55ebbda809f862e8ec3561c15c4288595546e09789cbc2491050073222397957c9090b7f8f96e3fefbc5f438c72ca8bb48f6337e208ee9b3f630a8c5b40b9fafca8e55be0a0cf4046884a0a049b4557da4ddb7a344226f4707c706e96467b1568ad4d10363aa9eb04b91efbada0c1c292475ce9893a27d4a1deb4a262d980141e63756adf3d5fbcf6ebde919cfd44052984704af6ba360e190fecfc730a5e470785d3061ee5f495cd697af97f90bbc11f2e4e41e57ce25f34b9c4ec9f3c051d964ad0c036b4
+Ctrl.hexxcghash = hexxcghash:5ae93beda675546c8a783974925aca9b365a6d8e
+Ctrl.hexsession_id = hexsession_id:bb0bfeb33b78474b2d53232b3122506992c0cae4
+Ctrl.type = type:C
+Output = 335cd2813bebd3d5e1dda4c1e14c23de
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100c0724e077d7237441eb79039debaa851c0bf411e69cd5314f3c72aa45760c9969985b34291fb64bf964b719d2b989e40a0e9fbccdb23536a78f1b55ebbda809f862e8ec3561c15c4288595546e09789cbc2491050073222397957c9090b7f8f96e3fefbc5f438c72ca8bb48f6337e208ee9b3f630a8c5b40b9fafca8e55be0a0cf4046884a0a049b4557da4ddb7a344226f4707c706e96467b1568ad4d10363aa9eb04b91efbada0c1c292475ce9893a27d4a1deb4a262d980141e63756adf3d5fbcf6ebde919cfd44052984704af6ba360e190fecfc730a5e470785d3061ee5f495cd697af97f90bbc11f2e4e41e57ce25f34b9c4ec9f3c051d964ad0c036b4
+Ctrl.hexxcghash = hexxcghash:5ae93beda675546c8a783974925aca9b365a6d8e
+Ctrl.hexsession_id = hexsession_id:bb0bfeb33b78474b2d53232b3122506992c0cae4
+Ctrl.type = type:D
+Output = fd25c5ae649645d8c0cfff0d4d8e7a47
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100c0724e077d7237441eb79039debaa851c0bf411e69cd5314f3c72aa45760c9969985b34291fb64bf964b719d2b989e40a0e9fbccdb23536a78f1b55ebbda809f862e8ec3561c15c4288595546e09789cbc2491050073222397957c9090b7f8f96e3fefbc5f438c72ca8bb48f6337e208ee9b3f630a8c5b40b9fafca8e55be0a0cf4046884a0a049b4557da4ddb7a344226f4707c706e96467b1568ad4d10363aa9eb04b91efbada0c1c292475ce9893a27d4a1deb4a262d980141e63756adf3d5fbcf6ebde919cfd44052984704af6ba360e190fecfc730a5e470785d3061ee5f495cd697af97f90bbc11f2e4e41e57ce25f34b9c4ec9f3c051d964ad0c036b4
+Ctrl.hexxcghash = hexxcghash:5ae93beda675546c8a783974925aca9b365a6d8e
+Ctrl.hexsession_id = hexsession_id:bb0bfeb33b78474b2d53232b3122506992c0cae4
+Ctrl.type = type:E
+Output = 90e89773d04623553d4d298e6aa75781d8a6544b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100c0724e077d7237441eb79039debaa851c0bf411e69cd5314f3c72aa45760c9969985b34291fb64bf964b719d2b989e40a0e9fbccdb23536a78f1b55ebbda809f862e8ec3561c15c4288595546e09789cbc2491050073222397957c9090b7f8f96e3fefbc5f438c72ca8bb48f6337e208ee9b3f630a8c5b40b9fafca8e55be0a0cf4046884a0a049b4557da4ddb7a344226f4707c706e96467b1568ad4d10363aa9eb04b91efbada0c1c292475ce9893a27d4a1deb4a262d980141e63756adf3d5fbcf6ebde919cfd44052984704af6ba360e190fecfc730a5e470785d3061ee5f495cd697af97f90bbc11f2e4e41e57ce25f34b9c4ec9f3c051d964ad0c036b4
+Ctrl.hexxcghash = hexxcghash:5ae93beda675546c8a783974925aca9b365a6d8e
+Ctrl.hexsession_id = hexsession_id:bb0bfeb33b78474b2d53232b3122506992c0cae4
+Ctrl.type = type:F
+Output = 86a3f05a5f844b23d787cccbda37a3d773a4d049
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001004c48728c828a34a5ff90188cd749d5ccf849d8f96d78072bc8c3a766e4be2c4bfdb8d0310225f05b0373fa582b5a9e78b6a05d958a7b82d944d00697a1ef2119e7545bdf2c6dc2e8cb2215ff58a0163c116b0b326caa50e6384e4e4ab424bfada5d15af1d22f34dc5f8bfd5c823c4b9253fe858a9d7f17bf0be17951bce751b8c2f0b3be25bad6054b39fb2d687d4e69c07d79f4952e65315b1f712cee11707a4984f29df9aac7a7274772f60a2f207ec6a35e1478aa9ae8045dc53417b220bf60124d988e376bf18414400bbe2ac4654716fd26b3a90ae53215ff906364ef82a08686a1977126c64d6d3f381e8477d55f8e79a0e0719089e073fffdbf828cde
+Ctrl.hexxcghash = hexxcghash:edeac369fd19f7dd1e8e48d0c69f9df5fe5475b4
+Ctrl.hexsession_id = hexsession_id:30d9cd8d63a203aeff4a99d8c299676f21a2c74e
+Ctrl.type = type:A
+Output = d2d06d589e6e696556e3d44d7d05decb
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001004c48728c828a34a5ff90188cd749d5ccf849d8f96d78072bc8c3a766e4be2c4bfdb8d0310225f05b0373fa582b5a9e78b6a05d958a7b82d944d00697a1ef2119e7545bdf2c6dc2e8cb2215ff58a0163c116b0b326caa50e6384e4e4ab424bfada5d15af1d22f34dc5f8bfd5c823c4b9253fe858a9d7f17bf0be17951bce751b8c2f0b3be25bad6054b39fb2d687d4e69c07d79f4952e65315b1f712cee11707a4984f29df9aac7a7274772f60a2f207ec6a35e1478aa9ae8045dc53417b220bf60124d988e376bf18414400bbe2ac4654716fd26b3a90ae53215ff906364ef82a08686a1977126c64d6d3f381e8477d55f8e79a0e0719089e073fffdbf828cde
+Ctrl.hexxcghash = hexxcghash:edeac369fd19f7dd1e8e48d0c69f9df5fe5475b4
+Ctrl.hexsession_id = hexsession_id:30d9cd8d63a203aeff4a99d8c299676f21a2c74e
+Ctrl.type = type:B
+Output = 14e3a886b715206e837b70fe7c02b941
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001004c48728c828a34a5ff90188cd749d5ccf849d8f96d78072bc8c3a766e4be2c4bfdb8d0310225f05b0373fa582b5a9e78b6a05d958a7b82d944d00697a1ef2119e7545bdf2c6dc2e8cb2215ff58a0163c116b0b326caa50e6384e4e4ab424bfada5d15af1d22f34dc5f8bfd5c823c4b9253fe858a9d7f17bf0be17951bce751b8c2f0b3be25bad6054b39fb2d687d4e69c07d79f4952e65315b1f712cee11707a4984f29df9aac7a7274772f60a2f207ec6a35e1478aa9ae8045dc53417b220bf60124d988e376bf18414400bbe2ac4654716fd26b3a90ae53215ff906364ef82a08686a1977126c64d6d3f381e8477d55f8e79a0e0719089e073fffdbf828cde
+Ctrl.hexxcghash = hexxcghash:edeac369fd19f7dd1e8e48d0c69f9df5fe5475b4
+Ctrl.hexsession_id = hexsession_id:30d9cd8d63a203aeff4a99d8c299676f21a2c74e
+Ctrl.type = type:C
+Output = 98625cf9741819273a0d6852ca7ab592
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001004c48728c828a34a5ff90188cd749d5ccf849d8f96d78072bc8c3a766e4be2c4bfdb8d0310225f05b0373fa582b5a9e78b6a05d958a7b82d944d00697a1ef2119e7545bdf2c6dc2e8cb2215ff58a0163c116b0b326caa50e6384e4e4ab424bfada5d15af1d22f34dc5f8bfd5c823c4b9253fe858a9d7f17bf0be17951bce751b8c2f0b3be25bad6054b39fb2d687d4e69c07d79f4952e65315b1f712cee11707a4984f29df9aac7a7274772f60a2f207ec6a35e1478aa9ae8045dc53417b220bf60124d988e376bf18414400bbe2ac4654716fd26b3a90ae53215ff906364ef82a08686a1977126c64d6d3f381e8477d55f8e79a0e0719089e073fffdbf828cde
+Ctrl.hexxcghash = hexxcghash:edeac369fd19f7dd1e8e48d0c69f9df5fe5475b4
+Ctrl.hexsession_id = hexsession_id:30d9cd8d63a203aeff4a99d8c299676f21a2c74e
+Ctrl.type = type:D
+Output = a7b273f04d537856015e06075c94c398
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001004c48728c828a34a5ff90188cd749d5ccf849d8f96d78072bc8c3a766e4be2c4bfdb8d0310225f05b0373fa582b5a9e78b6a05d958a7b82d944d00697a1ef2119e7545bdf2c6dc2e8cb2215ff58a0163c116b0b326caa50e6384e4e4ab424bfada5d15af1d22f34dc5f8bfd5c823c4b9253fe858a9d7f17bf0be17951bce751b8c2f0b3be25bad6054b39fb2d687d4e69c07d79f4952e65315b1f712cee11707a4984f29df9aac7a7274772f60a2f207ec6a35e1478aa9ae8045dc53417b220bf60124d988e376bf18414400bbe2ac4654716fd26b3a90ae53215ff906364ef82a08686a1977126c64d6d3f381e8477d55f8e79a0e0719089e073fffdbf828cde
+Ctrl.hexxcghash = hexxcghash:edeac369fd19f7dd1e8e48d0c69f9df5fe5475b4
+Ctrl.hexsession_id = hexsession_id:30d9cd8d63a203aeff4a99d8c299676f21a2c74e
+Ctrl.type = type:E
+Output = 3e1afa980d05ec30e9a55331ac301c10305999e2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001004c48728c828a34a5ff90188cd749d5ccf849d8f96d78072bc8c3a766e4be2c4bfdb8d0310225f05b0373fa582b5a9e78b6a05d958a7b82d944d00697a1ef2119e7545bdf2c6dc2e8cb2215ff58a0163c116b0b326caa50e6384e4e4ab424bfada5d15af1d22f34dc5f8bfd5c823c4b9253fe858a9d7f17bf0be17951bce751b8c2f0b3be25bad6054b39fb2d687d4e69c07d79f4952e65315b1f712cee11707a4984f29df9aac7a7274772f60a2f207ec6a35e1478aa9ae8045dc53417b220bf60124d988e376bf18414400bbe2ac4654716fd26b3a90ae53215ff906364ef82a08686a1977126c64d6d3f381e8477d55f8e79a0e0719089e073fffdbf828cde
+Ctrl.hexxcghash = hexxcghash:edeac369fd19f7dd1e8e48d0c69f9df5fe5475b4
+Ctrl.hexsession_id = hexsession_id:30d9cd8d63a203aeff4a99d8c299676f21a2c74e
+Ctrl.type = type:F
+Output = b993c4254669c7a51ed713ddaf7174fd5296fe57
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100f6fa934f303a9db720352fca5a6bae671857d44053d61132a6d36d76cee686fd31ea796407306ad3cb500f99b8881641ce304217910179ca03d3638c89419127542d2f6eea999c637070a3a2e2d17419fd2d53a23dc0bbad1333089a64c232c4328ca5d6db233777a93932407741a9fe4c8efd13e9f2f411368fd2035d05175f8710b79a77bd4749df3027eef44f1d050fd01458cd1c6d1fe67d774f4e056533305ad39ecf5a6e4898186b8b66e95c9546081c7df6df7a433887bb0333d0fb16418bb2d399b2be0b02978e5bbc97b57e67e88aa073ba3280a386209029bdc3d8f448eb18e29c87811142629827c54aa19d150b6eb6fb7a33d746b11d27d9d474
+Ctrl.hexxcghash = hexxcghash:6dffed964fd4044cb99b5f8770abef82d02c1cd1
+Ctrl.hexsession_id = hexsession_id:d98f1e884633c4632568e1dd0a54e4c8508c279d
+Ctrl.type = type:A
+Output = d9c0ed6b7fbf066d4f3cff7d2585ef5b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100f6fa934f303a9db720352fca5a6bae671857d44053d61132a6d36d76cee686fd31ea796407306ad3cb500f99b8881641ce304217910179ca03d3638c89419127542d2f6eea999c637070a3a2e2d17419fd2d53a23dc0bbad1333089a64c232c4328ca5d6db233777a93932407741a9fe4c8efd13e9f2f411368fd2035d05175f8710b79a77bd4749df3027eef44f1d050fd01458cd1c6d1fe67d774f4e056533305ad39ecf5a6e4898186b8b66e95c9546081c7df6df7a433887bb0333d0fb16418bb2d399b2be0b02978e5bbc97b57e67e88aa073ba3280a386209029bdc3d8f448eb18e29c87811142629827c54aa19d150b6eb6fb7a33d746b11d27d9d474
+Ctrl.hexxcghash = hexxcghash:6dffed964fd4044cb99b5f8770abef82d02c1cd1
+Ctrl.hexsession_id = hexsession_id:d98f1e884633c4632568e1dd0a54e4c8508c279d
+Ctrl.type = type:B
+Output = da13833aa2c086e5d76595132f4e5fc6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100f6fa934f303a9db720352fca5a6bae671857d44053d61132a6d36d76cee686fd31ea796407306ad3cb500f99b8881641ce304217910179ca03d3638c89419127542d2f6eea999c637070a3a2e2d17419fd2d53a23dc0bbad1333089a64c232c4328ca5d6db233777a93932407741a9fe4c8efd13e9f2f411368fd2035d05175f8710b79a77bd4749df3027eef44f1d050fd01458cd1c6d1fe67d774f4e056533305ad39ecf5a6e4898186b8b66e95c9546081c7df6df7a433887bb0333d0fb16418bb2d399b2be0b02978e5bbc97b57e67e88aa073ba3280a386209029bdc3d8f448eb18e29c87811142629827c54aa19d150b6eb6fb7a33d746b11d27d9d474
+Ctrl.hexxcghash = hexxcghash:6dffed964fd4044cb99b5f8770abef82d02c1cd1
+Ctrl.hexsession_id = hexsession_id:d98f1e884633c4632568e1dd0a54e4c8508c279d
+Ctrl.type = type:C
+Output = 9e27400587b646397a7655be0e5763ec
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100f6fa934f303a9db720352fca5a6bae671857d44053d61132a6d36d76cee686fd31ea796407306ad3cb500f99b8881641ce304217910179ca03d3638c89419127542d2f6eea999c637070a3a2e2d17419fd2d53a23dc0bbad1333089a64c232c4328ca5d6db233777a93932407741a9fe4c8efd13e9f2f411368fd2035d05175f8710b79a77bd4749df3027eef44f1d050fd01458cd1c6d1fe67d774f4e056533305ad39ecf5a6e4898186b8b66e95c9546081c7df6df7a433887bb0333d0fb16418bb2d399b2be0b02978e5bbc97b57e67e88aa073ba3280a386209029bdc3d8f448eb18e29c87811142629827c54aa19d150b6eb6fb7a33d746b11d27d9d474
+Ctrl.hexxcghash = hexxcghash:6dffed964fd4044cb99b5f8770abef82d02c1cd1
+Ctrl.hexsession_id = hexsession_id:d98f1e884633c4632568e1dd0a54e4c8508c279d
+Ctrl.type = type:D
+Output = 91b95d5cce7f2aec14776f49f652a305
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100f6fa934f303a9db720352fca5a6bae671857d44053d61132a6d36d76cee686fd31ea796407306ad3cb500f99b8881641ce304217910179ca03d3638c89419127542d2f6eea999c637070a3a2e2d17419fd2d53a23dc0bbad1333089a64c232c4328ca5d6db233777a93932407741a9fe4c8efd13e9f2f411368fd2035d05175f8710b79a77bd4749df3027eef44f1d050fd01458cd1c6d1fe67d774f4e056533305ad39ecf5a6e4898186b8b66e95c9546081c7df6df7a433887bb0333d0fb16418bb2d399b2be0b02978e5bbc97b57e67e88aa073ba3280a386209029bdc3d8f448eb18e29c87811142629827c54aa19d150b6eb6fb7a33d746b11d27d9d474
+Ctrl.hexxcghash = hexxcghash:6dffed964fd4044cb99b5f8770abef82d02c1cd1
+Ctrl.hexsession_id = hexsession_id:d98f1e884633c4632568e1dd0a54e4c8508c279d
+Ctrl.type = type:E
+Output = a97dc9a99e37c983a4922cd2ecdfa394b71141ce
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010100f6fa934f303a9db720352fca5a6bae671857d44053d61132a6d36d76cee686fd31ea796407306ad3cb500f99b8881641ce304217910179ca03d3638c89419127542d2f6eea999c637070a3a2e2d17419fd2d53a23dc0bbad1333089a64c232c4328ca5d6db233777a93932407741a9fe4c8efd13e9f2f411368fd2035d05175f8710b79a77bd4749df3027eef44f1d050fd01458cd1c6d1fe67d774f4e056533305ad39ecf5a6e4898186b8b66e95c9546081c7df6df7a433887bb0333d0fb16418bb2d399b2be0b02978e5bbc97b57e67e88aa073ba3280a386209029bdc3d8f448eb18e29c87811142629827c54aa19d150b6eb6fb7a33d746b11d27d9d474
+Ctrl.hexxcghash = hexxcghash:6dffed964fd4044cb99b5f8770abef82d02c1cd1
+Ctrl.hexsession_id = hexsession_id:d98f1e884633c4632568e1dd0a54e4c8508c279d
+Ctrl.type = type:F
+Output = 173d846f9790c742ca86af4bff5f965c6088a05b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001000a341cb148554046ac79686473c7e924486ae79c9dd1878a647687d3562cc81e5379c20df44edd6bfa8b9a26cdc06c6eb5f02272f90992ef58c65fe3e98725e9434a8512aef4c2093d27c57a1aee5f5b6861025001d20b5bc8666c4930107f563035bca6ddc91ff9d15ebb56d2628146d3baa3c6f81dc73602518c2aef4906e08b2ffa67e4528d92b1b3bcbd3a9e421d86413bb355574bb68f94bf75221918ca4f6624445b0afa0c26e270788490cbab1abd41a42200ab9e76a2f8b8ffbe0c5ef7a230b5bf7018cfd170ccd009058092d2446ebe73c5f0bf2d9ceca311502af621880eb18e46edc7832765c00e2599fbb82402b039eb5c5ae376690a717c0344
+Ctrl.hexxcghash = hexxcghash:4cee9b1867e94911e8f9fbd9ec3375d25c955f97
+Ctrl.hexsession_id = hexsession_id:2aefdaa6f14ac3ec200a951fd74433cddc01193a
+Ctrl.type = type:A
+Output = 6fa496847cda7367cb32b8be9aae3f85
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001000a341cb148554046ac79686473c7e924486ae79c9dd1878a647687d3562cc81e5379c20df44edd6bfa8b9a26cdc06c6eb5f02272f90992ef58c65fe3e98725e9434a8512aef4c2093d27c57a1aee5f5b6861025001d20b5bc8666c4930107f563035bca6ddc91ff9d15ebb56d2628146d3baa3c6f81dc73602518c2aef4906e08b2ffa67e4528d92b1b3bcbd3a9e421d86413bb355574bb68f94bf75221918ca4f6624445b0afa0c26e270788490cbab1abd41a42200ab9e76a2f8b8ffbe0c5ef7a230b5bf7018cfd170ccd009058092d2446ebe73c5f0bf2d9ceca311502af621880eb18e46edc7832765c00e2599fbb82402b039eb5c5ae376690a717c0344
+Ctrl.hexxcghash = hexxcghash:4cee9b1867e94911e8f9fbd9ec3375d25c955f97
+Ctrl.hexsession_id = hexsession_id:2aefdaa6f14ac3ec200a951fd74433cddc01193a
+Ctrl.type = type:B
+Output = 702ac8636520b7c6169ddc660781de9f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001000a341cb148554046ac79686473c7e924486ae79c9dd1878a647687d3562cc81e5379c20df44edd6bfa8b9a26cdc06c6eb5f02272f90992ef58c65fe3e98725e9434a8512aef4c2093d27c57a1aee5f5b6861025001d20b5bc8666c4930107f563035bca6ddc91ff9d15ebb56d2628146d3baa3c6f81dc73602518c2aef4906e08b2ffa67e4528d92b1b3bcbd3a9e421d86413bb355574bb68f94bf75221918ca4f6624445b0afa0c26e270788490cbab1abd41a42200ab9e76a2f8b8ffbe0c5ef7a230b5bf7018cfd170ccd009058092d2446ebe73c5f0bf2d9ceca311502af621880eb18e46edc7832765c00e2599fbb82402b039eb5c5ae376690a717c0344
+Ctrl.hexxcghash = hexxcghash:4cee9b1867e94911e8f9fbd9ec3375d25c955f97
+Ctrl.hexsession_id = hexsession_id:2aefdaa6f14ac3ec200a951fd74433cddc01193a
+Ctrl.type = type:C
+Output = 6ffd703180af7c2207d5fa9e467272e3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001000a341cb148554046ac79686473c7e924486ae79c9dd1878a647687d3562cc81e5379c20df44edd6bfa8b9a26cdc06c6eb5f02272f90992ef58c65fe3e98725e9434a8512aef4c2093d27c57a1aee5f5b6861025001d20b5bc8666c4930107f563035bca6ddc91ff9d15ebb56d2628146d3baa3c6f81dc73602518c2aef4906e08b2ffa67e4528d92b1b3bcbd3a9e421d86413bb355574bb68f94bf75221918ca4f6624445b0afa0c26e270788490cbab1abd41a42200ab9e76a2f8b8ffbe0c5ef7a230b5bf7018cfd170ccd009058092d2446ebe73c5f0bf2d9ceca311502af621880eb18e46edc7832765c00e2599fbb82402b039eb5c5ae376690a717c0344
+Ctrl.hexxcghash = hexxcghash:4cee9b1867e94911e8f9fbd9ec3375d25c955f97
+Ctrl.hexsession_id = hexsession_id:2aefdaa6f14ac3ec200a951fd74433cddc01193a
+Ctrl.type = type:D
+Output = 7ae5281e377f230dcc9854cf995f663d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001000a341cb148554046ac79686473c7e924486ae79c9dd1878a647687d3562cc81e5379c20df44edd6bfa8b9a26cdc06c6eb5f02272f90992ef58c65fe3e98725e9434a8512aef4c2093d27c57a1aee5f5b6861025001d20b5bc8666c4930107f563035bca6ddc91ff9d15ebb56d2628146d3baa3c6f81dc73602518c2aef4906e08b2ffa67e4528d92b1b3bcbd3a9e421d86413bb355574bb68f94bf75221918ca4f6624445b0afa0c26e270788490cbab1abd41a42200ab9e76a2f8b8ffbe0c5ef7a230b5bf7018cfd170ccd009058092d2446ebe73c5f0bf2d9ceca311502af621880eb18e46edc7832765c00e2599fbb82402b039eb5c5ae376690a717c0344
+Ctrl.hexxcghash = hexxcghash:4cee9b1867e94911e8f9fbd9ec3375d25c955f97
+Ctrl.hexsession_id = hexsession_id:2aefdaa6f14ac3ec200a951fd74433cddc01193a
+Ctrl.type = type:E
+Output = fbcb152df7a3f12a8f174f9ca31bb31b124ae3c2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001000a341cb148554046ac79686473c7e924486ae79c9dd1878a647687d3562cc81e5379c20df44edd6bfa8b9a26cdc06c6eb5f02272f90992ef58c65fe3e98725e9434a8512aef4c2093d27c57a1aee5f5b6861025001d20b5bc8666c4930107f563035bca6ddc91ff9d15ebb56d2628146d3baa3c6f81dc73602518c2aef4906e08b2ffa67e4528d92b1b3bcbd3a9e421d86413bb355574bb68f94bf75221918ca4f6624445b0afa0c26e270788490cbab1abd41a42200ab9e76a2f8b8ffbe0c5ef7a230b5bf7018cfd170ccd009058092d2446ebe73c5f0bf2d9ceca311502af621880eb18e46edc7832765c00e2599fbb82402b039eb5c5ae376690a717c0344
+Ctrl.hexxcghash = hexxcghash:4cee9b1867e94911e8f9fbd9ec3375d25c955f97
+Ctrl.hexsession_id = hexsession_id:2aefdaa6f14ac3ec200a951fd74433cddc01193a
+Ctrl.type = type:F
+Output = 3f0c57fbccfb7306cff23bdaf69d70a8a394b34b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010011afb59055b4e8e0840d76a2d28a3ec1cf3fe7e436b585eab29cc3149e1fa610d979fcc1483a0ea2b426f8e25bc87bae94bdcbeaa80501a3c554d996f1656ac9be75ecefa46273b3ab8a66468cb4a16b3630cbc41df49ebe3917b5afba24d669264e11689f1a401abc557a0c4cf22ad9323056642c2bf7fea0907ba2274b7666dd144e66e1f39371a14ccafa030bad4c6e04f7b22f1e14f9a37ad6aaa3642f66068863a74ed4a07e87494f0ace772b682845fb27efd7f1a99f09b419f43d8443302534e4c59c0d3c59736e47375ff6e96c167247c5196a7c8849adb527e9ccbfae797ea311181978197f924dcf0db7367f84baa27db6e554ba6b764550d2834f
+Ctrl.hexxcghash = hexxcghash:7ced7b72644be681615e503ecafe0c8f7124c85b
+Ctrl.hexsession_id = hexsession_id:95d4ca5b0107d3d9f94ef857d7a64f685d3fecdc
+Ctrl.type = type:A
+Output = 7e37ea52156fad1903709e1d3229721f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010011afb59055b4e8e0840d76a2d28a3ec1cf3fe7e436b585eab29cc3149e1fa610d979fcc1483a0ea2b426f8e25bc87bae94bdcbeaa80501a3c554d996f1656ac9be75ecefa46273b3ab8a66468cb4a16b3630cbc41df49ebe3917b5afba24d669264e11689f1a401abc557a0c4cf22ad9323056642c2bf7fea0907ba2274b7666dd144e66e1f39371a14ccafa030bad4c6e04f7b22f1e14f9a37ad6aaa3642f66068863a74ed4a07e87494f0ace772b682845fb27efd7f1a99f09b419f43d8443302534e4c59c0d3c59736e47375ff6e96c167247c5196a7c8849adb527e9ccbfae797ea311181978197f924dcf0db7367f84baa27db6e554ba6b764550d2834f
+Ctrl.hexxcghash = hexxcghash:7ced7b72644be681615e503ecafe0c8f7124c85b
+Ctrl.hexsession_id = hexsession_id:95d4ca5b0107d3d9f94ef857d7a64f685d3fecdc
+Ctrl.type = type:B
+Output = c15569583de413e08293bf1689a9afe8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010011afb59055b4e8e0840d76a2d28a3ec1cf3fe7e436b585eab29cc3149e1fa610d979fcc1483a0ea2b426f8e25bc87bae94bdcbeaa80501a3c554d996f1656ac9be75ecefa46273b3ab8a66468cb4a16b3630cbc41df49ebe3917b5afba24d669264e11689f1a401abc557a0c4cf22ad9323056642c2bf7fea0907ba2274b7666dd144e66e1f39371a14ccafa030bad4c6e04f7b22f1e14f9a37ad6aaa3642f66068863a74ed4a07e87494f0ace772b682845fb27efd7f1a99f09b419f43d8443302534e4c59c0d3c59736e47375ff6e96c167247c5196a7c8849adb527e9ccbfae797ea311181978197f924dcf0db7367f84baa27db6e554ba6b764550d2834f
+Ctrl.hexxcghash = hexxcghash:7ced7b72644be681615e503ecafe0c8f7124c85b
+Ctrl.hexsession_id = hexsession_id:95d4ca5b0107d3d9f94ef857d7a64f685d3fecdc
+Ctrl.type = type:C
+Output = 0c85227539f5e328c64172280759d9bf
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010011afb59055b4e8e0840d76a2d28a3ec1cf3fe7e436b585eab29cc3149e1fa610d979fcc1483a0ea2b426f8e25bc87bae94bdcbeaa80501a3c554d996f1656ac9be75ecefa46273b3ab8a66468cb4a16b3630cbc41df49ebe3917b5afba24d669264e11689f1a401abc557a0c4cf22ad9323056642c2bf7fea0907ba2274b7666dd144e66e1f39371a14ccafa030bad4c6e04f7b22f1e14f9a37ad6aaa3642f66068863a74ed4a07e87494f0ace772b682845fb27efd7f1a99f09b419f43d8443302534e4c59c0d3c59736e47375ff6e96c167247c5196a7c8849adb527e9ccbfae797ea311181978197f924dcf0db7367f84baa27db6e554ba6b764550d2834f
+Ctrl.hexxcghash = hexxcghash:7ced7b72644be681615e503ecafe0c8f7124c85b
+Ctrl.hexsession_id = hexsession_id:95d4ca5b0107d3d9f94ef857d7a64f685d3fecdc
+Ctrl.type = type:D
+Output = 3dbc42d9e7128e861b87781546cedc8e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010011afb59055b4e8e0840d76a2d28a3ec1cf3fe7e436b585eab29cc3149e1fa610d979fcc1483a0ea2b426f8e25bc87bae94bdcbeaa80501a3c554d996f1656ac9be75ecefa46273b3ab8a66468cb4a16b3630cbc41df49ebe3917b5afba24d669264e11689f1a401abc557a0c4cf22ad9323056642c2bf7fea0907ba2274b7666dd144e66e1f39371a14ccafa030bad4c6e04f7b22f1e14f9a37ad6aaa3642f66068863a74ed4a07e87494f0ace772b682845fb27efd7f1a99f09b419f43d8443302534e4c59c0d3c59736e47375ff6e96c167247c5196a7c8849adb527e9ccbfae797ea311181978197f924dcf0db7367f84baa27db6e554ba6b764550d2834f
+Ctrl.hexxcghash = hexxcghash:7ced7b72644be681615e503ecafe0c8f7124c85b
+Ctrl.hexsession_id = hexsession_id:95d4ca5b0107d3d9f94ef857d7a64f685d3fecdc
+Ctrl.type = type:E
+Output = 1ec0d15e38ea1b48da963837dbf30cef855a92c7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010011afb59055b4e8e0840d76a2d28a3ec1cf3fe7e436b585eab29cc3149e1fa610d979fcc1483a0ea2b426f8e25bc87bae94bdcbeaa80501a3c554d996f1656ac9be75ecefa46273b3ab8a66468cb4a16b3630cbc41df49ebe3917b5afba24d669264e11689f1a401abc557a0c4cf22ad9323056642c2bf7fea0907ba2274b7666dd144e66e1f39371a14ccafa030bad4c6e04f7b22f1e14f9a37ad6aaa3642f66068863a74ed4a07e87494f0ace772b682845fb27efd7f1a99f09b419f43d8443302534e4c59c0d3c59736e47375ff6e96c167247c5196a7c8849adb527e9ccbfae797ea311181978197f924dcf0db7367f84baa27db6e554ba6b764550d2834f
+Ctrl.hexxcghash = hexxcghash:7ced7b72644be681615e503ecafe0c8f7124c85b
+Ctrl.hexsession_id = hexsession_id:95d4ca5b0107d3d9f94ef857d7a64f685d3fecdc
+Ctrl.type = type:F
+Output = eea8ea042a079fcf8416a8b244fafab35adeca8a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001002f14b1acdf871bec4ea5720a3e921cf16a796559b2a094a0d1e45021dcabff152a0e3dca4115239454dc407a6474c8fcd395273a6487c6736710610aeb607707b7ef87203a081646af53ba037f29316a3dec4ce80ec04775b8697db46f7e4f4b38d69de832a25cf0a5484c9b36a48950d50dfe77ac5da63a1c2314ffa8cb68f0c201bbfb7a1a89837b9f57465d14635bda2abf601a06bbd8f70af0169c39209dcda9fb1416a9eadb5ea4deb358566190a62a44d6765d9a25b5157ed5e0f5317f0ed3f6eacebe07ba214e2ef9f654dbc2fa3dc2f227124a3f56a40905c9c86cd64b0ed80c4299d86f59d5f06b9c026a28feea5c5fafbe7ba90283de867dd55858
+Ctrl.hexxcghash = hexxcghash:5fb6dff3272cb949856a57f2645a56d957dc4606
+Ctrl.hexsession_id = hexsession_id:5160cab836d899193077dc67485ef41669ec5d8a
+Ctrl.type = type:A
+Output = f2faef6e274814ed7ca544484ac21a3a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001002f14b1acdf871bec4ea5720a3e921cf16a796559b2a094a0d1e45021dcabff152a0e3dca4115239454dc407a6474c8fcd395273a6487c6736710610aeb607707b7ef87203a081646af53ba037f29316a3dec4ce80ec04775b8697db46f7e4f4b38d69de832a25cf0a5484c9b36a48950d50dfe77ac5da63a1c2314ffa8cb68f0c201bbfb7a1a89837b9f57465d14635bda2abf601a06bbd8f70af0169c39209dcda9fb1416a9eadb5ea4deb358566190a62a44d6765d9a25b5157ed5e0f5317f0ed3f6eacebe07ba214e2ef9f654dbc2fa3dc2f227124a3f56a40905c9c86cd64b0ed80c4299d86f59d5f06b9c026a28feea5c5fafbe7ba90283de867dd55858
+Ctrl.hexxcghash = hexxcghash:5fb6dff3272cb949856a57f2645a56d957dc4606
+Ctrl.hexsession_id = hexsession_id:5160cab836d899193077dc67485ef41669ec5d8a
+Ctrl.type = type:B
+Output = 3ca9bc0f3c65c257fa160a4d1c5e3520
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001002f14b1acdf871bec4ea5720a3e921cf16a796559b2a094a0d1e45021dcabff152a0e3dca4115239454dc407a6474c8fcd395273a6487c6736710610aeb607707b7ef87203a081646af53ba037f29316a3dec4ce80ec04775b8697db46f7e4f4b38d69de832a25cf0a5484c9b36a48950d50dfe77ac5da63a1c2314ffa8cb68f0c201bbfb7a1a89837b9f57465d14635bda2abf601a06bbd8f70af0169c39209dcda9fb1416a9eadb5ea4deb358566190a62a44d6765d9a25b5157ed5e0f5317f0ed3f6eacebe07ba214e2ef9f654dbc2fa3dc2f227124a3f56a40905c9c86cd64b0ed80c4299d86f59d5f06b9c026a28feea5c5fafbe7ba90283de867dd55858
+Ctrl.hexxcghash = hexxcghash:5fb6dff3272cb949856a57f2645a56d957dc4606
+Ctrl.hexsession_id = hexsession_id:5160cab836d899193077dc67485ef41669ec5d8a
+Ctrl.type = type:C
+Output = fcdf0545b51aca6515bccf6ed0ecb582
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001002f14b1acdf871bec4ea5720a3e921cf16a796559b2a094a0d1e45021dcabff152a0e3dca4115239454dc407a6474c8fcd395273a6487c6736710610aeb607707b7ef87203a081646af53ba037f29316a3dec4ce80ec04775b8697db46f7e4f4b38d69de832a25cf0a5484c9b36a48950d50dfe77ac5da63a1c2314ffa8cb68f0c201bbfb7a1a89837b9f57465d14635bda2abf601a06bbd8f70af0169c39209dcda9fb1416a9eadb5ea4deb358566190a62a44d6765d9a25b5157ed5e0f5317f0ed3f6eacebe07ba214e2ef9f654dbc2fa3dc2f227124a3f56a40905c9c86cd64b0ed80c4299d86f59d5f06b9c026a28feea5c5fafbe7ba90283de867dd55858
+Ctrl.hexxcghash = hexxcghash:5fb6dff3272cb949856a57f2645a56d957dc4606
+Ctrl.hexsession_id = hexsession_id:5160cab836d899193077dc67485ef41669ec5d8a
+Ctrl.type = type:D
+Output = 86ea895a310c3bbd1aac209b2362d58a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001002f14b1acdf871bec4ea5720a3e921cf16a796559b2a094a0d1e45021dcabff152a0e3dca4115239454dc407a6474c8fcd395273a6487c6736710610aeb607707b7ef87203a081646af53ba037f29316a3dec4ce80ec04775b8697db46f7e4f4b38d69de832a25cf0a5484c9b36a48950d50dfe77ac5da63a1c2314ffa8cb68f0c201bbfb7a1a89837b9f57465d14635bda2abf601a06bbd8f70af0169c39209dcda9fb1416a9eadb5ea4deb358566190a62a44d6765d9a25b5157ed5e0f5317f0ed3f6eacebe07ba214e2ef9f654dbc2fa3dc2f227124a3f56a40905c9c86cd64b0ed80c4299d86f59d5f06b9c026a28feea5c5fafbe7ba90283de867dd55858
+Ctrl.hexxcghash = hexxcghash:5fb6dff3272cb949856a57f2645a56d957dc4606
+Ctrl.hexsession_id = hexsession_id:5160cab836d899193077dc67485ef41669ec5d8a
+Ctrl.type = type:E
+Output = 12a4f2b749e2bf88c1f8437e5ff61de761fd48b3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001002f14b1acdf871bec4ea5720a3e921cf16a796559b2a094a0d1e45021dcabff152a0e3dca4115239454dc407a6474c8fcd395273a6487c6736710610aeb607707b7ef87203a081646af53ba037f29316a3dec4ce80ec04775b8697db46f7e4f4b38d69de832a25cf0a5484c9b36a48950d50dfe77ac5da63a1c2314ffa8cb68f0c201bbfb7a1a89837b9f57465d14635bda2abf601a06bbd8f70af0169c39209dcda9fb1416a9eadb5ea4deb358566190a62a44d6765d9a25b5157ed5e0f5317f0ed3f6eacebe07ba214e2ef9f654dbc2fa3dc2f227124a3f56a40905c9c86cd64b0ed80c4299d86f59d5f06b9c026a28feea5c5fafbe7ba90283de867dd55858
+Ctrl.hexxcghash = hexxcghash:5fb6dff3272cb949856a57f2645a56d957dc4606
+Ctrl.hexsession_id = hexsession_id:5160cab836d899193077dc67485ef41669ec5d8a
+Ctrl.type = type:F
+Output = a3a9276a120db379ec780e434879a54935db954d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010060cc18ebbeb9b25cb16a58bfa47644110ceab67f274daf67157e923b70f775a4168bb7911d0e53075044366e503fbffcf3fcf9249e551d69211715b681ba3a28dd133dbada24dcf80d2bf67a1d6c0477f108f8763b30fe28c6d0b54e59e7e580692453d05a30d38e134d6117ca999ace80a57d088228b2a9f001e57d3a8b1cdffe55fda194f01189ec2bb0d99fc8570a9d822a94dddb22f4ba3c88f2ee1045dafa2d106e5c2c09519e47ad9eaf2301569c9258a2deda9d3ea5b0c73f00d8d12579e5931d5253220d60eeb12fcefc98bc8f390e52b3b407280a31283628963c1131b6fd584be948c3fb4d316fa4a1b135513a174cafb0d394bb4afbee6cbe796e
+Ctrl.hexxcghash = hexxcghash:501c76e6b5791e343fb6e7597e890c7dea7f04e5
+Ctrl.hexsession_id = hexsession_id:68e1f225f2e63df7bedbab15112b3670f03eed56
+Ctrl.type = type:A
+Output = e53f2f61d8919e097cb99627fe668385
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010060cc18ebbeb9b25cb16a58bfa47644110ceab67f274daf67157e923b70f775a4168bb7911d0e53075044366e503fbffcf3fcf9249e551d69211715b681ba3a28dd133dbada24dcf80d2bf67a1d6c0477f108f8763b30fe28c6d0b54e59e7e580692453d05a30d38e134d6117ca999ace80a57d088228b2a9f001e57d3a8b1cdffe55fda194f01189ec2bb0d99fc8570a9d822a94dddb22f4ba3c88f2ee1045dafa2d106e5c2c09519e47ad9eaf2301569c9258a2deda9d3ea5b0c73f00d8d12579e5931d5253220d60eeb12fcefc98bc8f390e52b3b407280a31283628963c1131b6fd584be948c3fb4d316fa4a1b135513a174cafb0d394bb4afbee6cbe796e
+Ctrl.hexxcghash = hexxcghash:501c76e6b5791e343fb6e7597e890c7dea7f04e5
+Ctrl.hexsession_id = hexsession_id:68e1f225f2e63df7bedbab15112b3670f03eed56
+Ctrl.type = type:B
+Output = cea80fd8dc06654ed80b0ec150835537
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010060cc18ebbeb9b25cb16a58bfa47644110ceab67f274daf67157e923b70f775a4168bb7911d0e53075044366e503fbffcf3fcf9249e551d69211715b681ba3a28dd133dbada24dcf80d2bf67a1d6c0477f108f8763b30fe28c6d0b54e59e7e580692453d05a30d38e134d6117ca999ace80a57d088228b2a9f001e57d3a8b1cdffe55fda194f01189ec2bb0d99fc8570a9d822a94dddb22f4ba3c88f2ee1045dafa2d106e5c2c09519e47ad9eaf2301569c9258a2deda9d3ea5b0c73f00d8d12579e5931d5253220d60eeb12fcefc98bc8f390e52b3b407280a31283628963c1131b6fd584be948c3fb4d316fa4a1b135513a174cafb0d394bb4afbee6cbe796e
+Ctrl.hexxcghash = hexxcghash:501c76e6b5791e343fb6e7597e890c7dea7f04e5
+Ctrl.hexsession_id = hexsession_id:68e1f225f2e63df7bedbab15112b3670f03eed56
+Ctrl.type = type:C
+Output = d5ba475e737bed349b8931ba38d426e9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010060cc18ebbeb9b25cb16a58bfa47644110ceab67f274daf67157e923b70f775a4168bb7911d0e53075044366e503fbffcf3fcf9249e551d69211715b681ba3a28dd133dbada24dcf80d2bf67a1d6c0477f108f8763b30fe28c6d0b54e59e7e580692453d05a30d38e134d6117ca999ace80a57d088228b2a9f001e57d3a8b1cdffe55fda194f01189ec2bb0d99fc8570a9d822a94dddb22f4ba3c88f2ee1045dafa2d106e5c2c09519e47ad9eaf2301569c9258a2deda9d3ea5b0c73f00d8d12579e5931d5253220d60eeb12fcefc98bc8f390e52b3b407280a31283628963c1131b6fd584be948c3fb4d316fa4a1b135513a174cafb0d394bb4afbee6cbe796e
+Ctrl.hexxcghash = hexxcghash:501c76e6b5791e343fb6e7597e890c7dea7f04e5
+Ctrl.hexsession_id = hexsession_id:68e1f225f2e63df7bedbab15112b3670f03eed56
+Ctrl.type = type:D
+Output = f3ea92b4f365ab2fb8403ad8ecd2d17c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010060cc18ebbeb9b25cb16a58bfa47644110ceab67f274daf67157e923b70f775a4168bb7911d0e53075044366e503fbffcf3fcf9249e551d69211715b681ba3a28dd133dbada24dcf80d2bf67a1d6c0477f108f8763b30fe28c6d0b54e59e7e580692453d05a30d38e134d6117ca999ace80a57d088228b2a9f001e57d3a8b1cdffe55fda194f01189ec2bb0d99fc8570a9d822a94dddb22f4ba3c88f2ee1045dafa2d106e5c2c09519e47ad9eaf2301569c9258a2deda9d3ea5b0c73f00d8d12579e5931d5253220d60eeb12fcefc98bc8f390e52b3b407280a31283628963c1131b6fd584be948c3fb4d316fa4a1b135513a174cafb0d394bb4afbee6cbe796e
+Ctrl.hexxcghash = hexxcghash:501c76e6b5791e343fb6e7597e890c7dea7f04e5
+Ctrl.hexsession_id = hexsession_id:68e1f225f2e63df7bedbab15112b3670f03eed56
+Ctrl.type = type:E
+Output = 41fa718884738fd6fd9ee9fd5af05f0de9400952
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010060cc18ebbeb9b25cb16a58bfa47644110ceab67f274daf67157e923b70f775a4168bb7911d0e53075044366e503fbffcf3fcf9249e551d69211715b681ba3a28dd133dbada24dcf80d2bf67a1d6c0477f108f8763b30fe28c6d0b54e59e7e580692453d05a30d38e134d6117ca999ace80a57d088228b2a9f001e57d3a8b1cdffe55fda194f01189ec2bb0d99fc8570a9d822a94dddb22f4ba3c88f2ee1045dafa2d106e5c2c09519e47ad9eaf2301569c9258a2deda9d3ea5b0c73f00d8d12579e5931d5253220d60eeb12fcefc98bc8f390e52b3b407280a31283628963c1131b6fd584be948c3fb4d316fa4a1b135513a174cafb0d394bb4afbee6cbe796e
+Ctrl.hexxcghash = hexxcghash:501c76e6b5791e343fb6e7597e890c7dea7f04e5
+Ctrl.hexsession_id = hexsession_id:68e1f225f2e63df7bedbab15112b3670f03eed56
+Ctrl.type = type:F
+Output = 91395bbd90abb140d0984ed5e77836590bf44695
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010072a106d13e5148877457b7a8c853cfabd151d1b1acde6d776b7affc23c653a3b1c893398c7d83e039fbea9dc739dc14f3a9348af154f840d2f88e3c1982758adeaeb78cff050046d26a9a13391099eea03e9fb853e95c117edaac5b36736e63cb5ad72b346cf1fb342169f5e538591988daec82e0e9a2f4a57db22df8af92424f63111d87991345fd4458abab42cdbfcb84abb222701575a50274a7c6cc38355740cc04bfaff33467c816a70242142fd5467b1713eeec1e0d0f2fcfaf66602dcc31c4105d928a7185ebf53a6e792f419f57573e6dc6d1221e6907f6ad958d2a0c8fe096ce43e403316ae92f93acd1cac7878c9011bc71eff81d4353d7b0c13b1
+Ctrl.hexxcghash = hexxcghash:9acf1f808aeac5b11460192c8f191491b62fc66a
+Ctrl.hexsession_id = hexsession_id:4c662e4dc764cbcb1b3eed4de4375f85c8b2f56c
+Ctrl.type = type:A
+Output = 04d3c0a3f5e33ae373c637ef45897779
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010072a106d13e5148877457b7a8c853cfabd151d1b1acde6d776b7affc23c653a3b1c893398c7d83e039fbea9dc739dc14f3a9348af154f840d2f88e3c1982758adeaeb78cff050046d26a9a13391099eea03e9fb853e95c117edaac5b36736e63cb5ad72b346cf1fb342169f5e538591988daec82e0e9a2f4a57db22df8af92424f63111d87991345fd4458abab42cdbfcb84abb222701575a50274a7c6cc38355740cc04bfaff33467c816a70242142fd5467b1713eeec1e0d0f2fcfaf66602dcc31c4105d928a7185ebf53a6e792f419f57573e6dc6d1221e6907f6ad958d2a0c8fe096ce43e403316ae92f93acd1cac7878c9011bc71eff81d4353d7b0c13b1
+Ctrl.hexxcghash = hexxcghash:9acf1f808aeac5b11460192c8f191491b62fc66a
+Ctrl.hexsession_id = hexsession_id:4c662e4dc764cbcb1b3eed4de4375f85c8b2f56c
+Ctrl.type = type:B
+Output = c5a45bfbf6d7c14c5d3a953b4848e433
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010072a106d13e5148877457b7a8c853cfabd151d1b1acde6d776b7affc23c653a3b1c893398c7d83e039fbea9dc739dc14f3a9348af154f840d2f88e3c1982758adeaeb78cff050046d26a9a13391099eea03e9fb853e95c117edaac5b36736e63cb5ad72b346cf1fb342169f5e538591988daec82e0e9a2f4a57db22df8af92424f63111d87991345fd4458abab42cdbfcb84abb222701575a50274a7c6cc38355740cc04bfaff33467c816a70242142fd5467b1713eeec1e0d0f2fcfaf66602dcc31c4105d928a7185ebf53a6e792f419f57573e6dc6d1221e6907f6ad958d2a0c8fe096ce43e403316ae92f93acd1cac7878c9011bc71eff81d4353d7b0c13b1
+Ctrl.hexxcghash = hexxcghash:9acf1f808aeac5b11460192c8f191491b62fc66a
+Ctrl.hexsession_id = hexsession_id:4c662e4dc764cbcb1b3eed4de4375f85c8b2f56c
+Ctrl.type = type:C
+Output = 3a16d0da2f785e2c325b45109778910a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010072a106d13e5148877457b7a8c853cfabd151d1b1acde6d776b7affc23c653a3b1c893398c7d83e039fbea9dc739dc14f3a9348af154f840d2f88e3c1982758adeaeb78cff050046d26a9a13391099eea03e9fb853e95c117edaac5b36736e63cb5ad72b346cf1fb342169f5e538591988daec82e0e9a2f4a57db22df8af92424f63111d87991345fd4458abab42cdbfcb84abb222701575a50274a7c6cc38355740cc04bfaff33467c816a70242142fd5467b1713eeec1e0d0f2fcfaf66602dcc31c4105d928a7185ebf53a6e792f419f57573e6dc6d1221e6907f6ad958d2a0c8fe096ce43e403316ae92f93acd1cac7878c9011bc71eff81d4353d7b0c13b1
+Ctrl.hexxcghash = hexxcghash:9acf1f808aeac5b11460192c8f191491b62fc66a
+Ctrl.hexsession_id = hexsession_id:4c662e4dc764cbcb1b3eed4de4375f85c8b2f56c
+Ctrl.type = type:D
+Output = 902b38dd6c759945e671c1de7d99e918
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010072a106d13e5148877457b7a8c853cfabd151d1b1acde6d776b7affc23c653a3b1c893398c7d83e039fbea9dc739dc14f3a9348af154f840d2f88e3c1982758adeaeb78cff050046d26a9a13391099eea03e9fb853e95c117edaac5b36736e63cb5ad72b346cf1fb342169f5e538591988daec82e0e9a2f4a57db22df8af92424f63111d87991345fd4458abab42cdbfcb84abb222701575a50274a7c6cc38355740cc04bfaff33467c816a70242142fd5467b1713eeec1e0d0f2fcfaf66602dcc31c4105d928a7185ebf53a6e792f419f57573e6dc6d1221e6907f6ad958d2a0c8fe096ce43e403316ae92f93acd1cac7878c9011bc71eff81d4353d7b0c13b1
+Ctrl.hexxcghash = hexxcghash:9acf1f808aeac5b11460192c8f191491b62fc66a
+Ctrl.hexsession_id = hexsession_id:4c662e4dc764cbcb1b3eed4de4375f85c8b2f56c
+Ctrl.type = type:E
+Output = b573244de3127f6aa5457e792219dc89defaaecd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000010072a106d13e5148877457b7a8c853cfabd151d1b1acde6d776b7affc23c653a3b1c893398c7d83e039fbea9dc739dc14f3a9348af154f840d2f88e3c1982758adeaeb78cff050046d26a9a13391099eea03e9fb853e95c117edaac5b36736e63cb5ad72b346cf1fb342169f5e538591988daec82e0e9a2f4a57db22df8af92424f63111d87991345fd4458abab42cdbfcb84abb222701575a50274a7c6cc38355740cc04bfaff33467c816a70242142fd5467b1713eeec1e0d0f2fcfaf66602dcc31c4105d928a7185ebf53a6e792f419f57573e6dc6d1221e6907f6ad958d2a0c8fe096ce43e403316ae92f93acd1cac7878c9011bc71eff81d4353d7b0c13b1
+Ctrl.hexxcghash = hexxcghash:9acf1f808aeac5b11460192c8f191491b62fc66a
+Ctrl.hexsession_id = hexsession_id:4c662e4dc764cbcb1b3eed4de4375f85c8b2f56c
+Ctrl.type = type:F
+Output = 6cd221005dd1f0de4f472f48d15e61dcc2e91e99
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001003644f9ee24c3ec2e2fe16cdece326cdf5c1309e931bc41f245d3b76f2bdbef0bae58e850e10dcbd0d18356b4f98957a3b95f64c85d1af12ab01fe967e52a632761074f27406a29618192f1cbebae2c25e42f6e9fc00a737e4c92398403ab946a6c33e675e529b5c7364f36d64f07ff65889866dee99293bd5bb5f6454a77bbe0cbfd746d54e5bc948c617c5a1d5d3d2b65fa6a86c5f42c5e01f92a8e97a96f848e50ecb1b495a0e87323b44f5b9dd25ab34a94c077b7490657d1d8f9a9acef2785de82b02ef9fb670faf841ae9b479d2d538ae8e38eaf6e74b884c18c9dafc19b6c9728ff3411537555b3b3b69f6f039958ffb0790e58b09bd8c63819ee50ea5
+Ctrl.hexxcghash = hexxcghash:4d31fdb68c8f42f38cae260bf6402e47de93aac7
+Ctrl.hexsession_id = hexsession_id:47caa2c09bb4dc9d6aeb697a76046bdf1fcd879b
+Ctrl.type = type:A
+Output = 5f9deaf2ee4f05af0a8a813ef6bb9549
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001003644f9ee24c3ec2e2fe16cdece326cdf5c1309e931bc41f245d3b76f2bdbef0bae58e850e10dcbd0d18356b4f98957a3b95f64c85d1af12ab01fe967e52a632761074f27406a29618192f1cbebae2c25e42f6e9fc00a737e4c92398403ab946a6c33e675e529b5c7364f36d64f07ff65889866dee99293bd5bb5f6454a77bbe0cbfd746d54e5bc948c617c5a1d5d3d2b65fa6a86c5f42c5e01f92a8e97a96f848e50ecb1b495a0e87323b44f5b9dd25ab34a94c077b7490657d1d8f9a9acef2785de82b02ef9fb670faf841ae9b479d2d538ae8e38eaf6e74b884c18c9dafc19b6c9728ff3411537555b3b3b69f6f039958ffb0790e58b09bd8c63819ee50ea5
+Ctrl.hexxcghash = hexxcghash:4d31fdb68c8f42f38cae260bf6402e47de93aac7
+Ctrl.hexsession_id = hexsession_id:47caa2c09bb4dc9d6aeb697a76046bdf1fcd879b
+Ctrl.type = type:B
+Output = a2ea4b795f9c9de1d786d0c771df2b84
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001003644f9ee24c3ec2e2fe16cdece326cdf5c1309e931bc41f245d3b76f2bdbef0bae58e850e10dcbd0d18356b4f98957a3b95f64c85d1af12ab01fe967e52a632761074f27406a29618192f1cbebae2c25e42f6e9fc00a737e4c92398403ab946a6c33e675e529b5c7364f36d64f07ff65889866dee99293bd5bb5f6454a77bbe0cbfd746d54e5bc948c617c5a1d5d3d2b65fa6a86c5f42c5e01f92a8e97a96f848e50ecb1b495a0e87323b44f5b9dd25ab34a94c077b7490657d1d8f9a9acef2785de82b02ef9fb670faf841ae9b479d2d538ae8e38eaf6e74b884c18c9dafc19b6c9728ff3411537555b3b3b69f6f039958ffb0790e58b09bd8c63819ee50ea5
+Ctrl.hexxcghash = hexxcghash:4d31fdb68c8f42f38cae260bf6402e47de93aac7
+Ctrl.hexsession_id = hexsession_id:47caa2c09bb4dc9d6aeb697a76046bdf1fcd879b
+Ctrl.type = type:C
+Output = 13f828f8f1e5532a04f138681bc8259d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001003644f9ee24c3ec2e2fe16cdece326cdf5c1309e931bc41f245d3b76f2bdbef0bae58e850e10dcbd0d18356b4f98957a3b95f64c85d1af12ab01fe967e52a632761074f27406a29618192f1cbebae2c25e42f6e9fc00a737e4c92398403ab946a6c33e675e529b5c7364f36d64f07ff65889866dee99293bd5bb5f6454a77bbe0cbfd746d54e5bc948c617c5a1d5d3d2b65fa6a86c5f42c5e01f92a8e97a96f848e50ecb1b495a0e87323b44f5b9dd25ab34a94c077b7490657d1d8f9a9acef2785de82b02ef9fb670faf841ae9b479d2d538ae8e38eaf6e74b884c18c9dafc19b6c9728ff3411537555b3b3b69f6f039958ffb0790e58b09bd8c63819ee50ea5
+Ctrl.hexxcghash = hexxcghash:4d31fdb68c8f42f38cae260bf6402e47de93aac7
+Ctrl.hexsession_id = hexsession_id:47caa2c09bb4dc9d6aeb697a76046bdf1fcd879b
+Ctrl.type = type:D
+Output = 7231ce5fd725391e058cd78815f44625
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001003644f9ee24c3ec2e2fe16cdece326cdf5c1309e931bc41f245d3b76f2bdbef0bae58e850e10dcbd0d18356b4f98957a3b95f64c85d1af12ab01fe967e52a632761074f27406a29618192f1cbebae2c25e42f6e9fc00a737e4c92398403ab946a6c33e675e529b5c7364f36d64f07ff65889866dee99293bd5bb5f6454a77bbe0cbfd746d54e5bc948c617c5a1d5d3d2b65fa6a86c5f42c5e01f92a8e97a96f848e50ecb1b495a0e87323b44f5b9dd25ab34a94c077b7490657d1d8f9a9acef2785de82b02ef9fb670faf841ae9b479d2d538ae8e38eaf6e74b884c18c9dafc19b6c9728ff3411537555b3b3b69f6f039958ffb0790e58b09bd8c63819ee50ea5
+Ctrl.hexxcghash = hexxcghash:4d31fdb68c8f42f38cae260bf6402e47de93aac7
+Ctrl.hexsession_id = hexsession_id:47caa2c09bb4dc9d6aeb697a76046bdf1fcd879b
+Ctrl.type = type:E
+Output = 937b7e16ed0b2324203cdae904fc55cbe25067a1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000001003644f9ee24c3ec2e2fe16cdece326cdf5c1309e931bc41f245d3b76f2bdbef0bae58e850e10dcbd0d18356b4f98957a3b95f64c85d1af12ab01fe967e52a632761074f27406a29618192f1cbebae2c25e42f6e9fc00a737e4c92398403ab946a6c33e675e529b5c7364f36d64f07ff65889866dee99293bd5bb5f6454a77bbe0cbfd746d54e5bc948c617c5a1d5d3d2b65fa6a86c5f42c5e01f92a8e97a96f848e50ecb1b495a0e87323b44f5b9dd25ab34a94c077b7490657d1d8f9a9acef2785de82b02ef9fb670faf841ae9b479d2d538ae8e38eaf6e74b884c18c9dafc19b6c9728ff3411537555b3b3b69f6f039958ffb0790e58b09bd8c63819ee50ea5
+Ctrl.hexxcghash = hexxcghash:4d31fdb68c8f42f38cae260bf6402e47de93aac7
+Ctrl.hexsession_id = hexsession_id:47caa2c09bb4dc9d6aeb697a76046bdf1fcd879b
+Ctrl.type = type:F
+Output = d7536b911dc79d5953455ba6e15cb5fec7c14025
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008de60df019c23966d215d9b8490ac493dfae59b99dbefdad81d2c9e761205c93a696dbd9e538cc57cd3e24c2798d2c56561d6803e8ee24e112babef84ad5a2c571c572339f2b38f1345164314f8f4714047f0c66650f10051044f8dcd256bfe8171302a81ce13f47f7375db80a6bbf8ce7d8f96e03fc6275fd5dacfbdd166792
+Ctrl.hexxcghash = hexxcghash:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.hexsession_id = hexsession_id:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.type = type:A
+Output = 9fff6c6a6d1f5c31
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008de60df019c23966d215d9b8490ac493dfae59b99dbefdad81d2c9e761205c93a696dbd9e538cc57cd3e24c2798d2c56561d6803e8ee24e112babef84ad5a2c571c572339f2b38f1345164314f8f4714047f0c66650f10051044f8dcd256bfe8171302a81ce13f47f7375db80a6bbf8ce7d8f96e03fc6275fd5dacfbdd166792
+Ctrl.hexxcghash = hexxcghash:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.hexsession_id = hexsession_id:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.type = type:B
+Output = 8e0ae78c64d2fe2a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008de60df019c23966d215d9b8490ac493dfae59b99dbefdad81d2c9e761205c93a696dbd9e538cc57cd3e24c2798d2c56561d6803e8ee24e112babef84ad5a2c571c572339f2b38f1345164314f8f4714047f0c66650f10051044f8dcd256bfe8171302a81ce13f47f7375db80a6bbf8ce7d8f96e03fc6275fd5dacfbdd166792
+Ctrl.hexxcghash = hexxcghash:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.hexsession_id = hexsession_id:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.type = type:C
+Output = 9044f963ffb56b94556a38aac5398a7072ffba60258500be
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008de60df019c23966d215d9b8490ac493dfae59b99dbefdad81d2c9e761205c93a696dbd9e538cc57cd3e24c2798d2c56561d6803e8ee24e112babef84ad5a2c571c572339f2b38f1345164314f8f4714047f0c66650f10051044f8dcd256bfe8171302a81ce13f47f7375db80a6bbf8ce7d8f96e03fc6275fd5dacfbdd166792
+Ctrl.hexxcghash = hexxcghash:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.hexsession_id = hexsession_id:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.type = type:D
+Output = a861a317ea42b050901aff367b5a1d0abd5c497c77311ba2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008de60df019c23966d215d9b8490ac493dfae59b99dbefdad81d2c9e761205c93a696dbd9e538cc57cd3e24c2798d2c56561d6803e8ee24e112babef84ad5a2c571c572339f2b38f1345164314f8f4714047f0c66650f10051044f8dcd256bfe8171302a81ce13f47f7375db80a6bbf8ce7d8f96e03fc6275fd5dacfbdd166792
+Ctrl.hexxcghash = hexxcghash:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.hexsession_id = hexsession_id:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.type = type:E
+Output = 43225d64b6da6f070925ad1c8b7ac88893f9a7cba0dfc55ddea42eec
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008de60df019c23966d215d9b8490ac493dfae59b99dbefdad81d2c9e761205c93a696dbd9e538cc57cd3e24c2798d2c56561d6803e8ee24e112babef84ad5a2c571c572339f2b38f1345164314f8f4714047f0c66650f10051044f8dcd256bfe8171302a81ce13f47f7375db80a6bbf8ce7d8f96e03fc6275fd5dacfbdd166792
+Ctrl.hexxcghash = hexxcghash:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.hexsession_id = hexsession_id:e69fbbee90f0cb7c57996c6f3f9ec4c7de9f0c43b7c993ec3ec1d4ca
+Ctrl.type = type:F
+Output = eb31db29bbafca2773f815fa478d927943288588e371ae9ba0414d98
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100a03d807fef48a50d8a04d9b6721979c5904412c3bcfe69ebd4c2554debe82a695a66fb9d844c6ef3aa4b745c2a4c8dbc4ba26742e0d1159ded83edca0bec61c7303e81f9d7f3169b7c97573b9184ec3c5286d9646e96595f064d61013431628f5c57bcb1bf79bcd1b0177ab4520c1a1a9b34b5067d9f465c9b03154d57f1b42f
+Ctrl.hexxcghash = hexxcghash:03af4bd15a37aa7816d826332dcd9daa1537770fd0bcafbafe30033d
+Ctrl.hexsession_id = hexsession_id:36084ca3dc535b37d533d034d891fabc20e3b0270bb8c008066bfac8
+Ctrl.type = type:A
+Output = bf2d6e03ba930c71
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100a03d807fef48a50d8a04d9b6721979c5904412c3bcfe69ebd4c2554debe82a695a66fb9d844c6ef3aa4b745c2a4c8dbc4ba26742e0d1159ded83edca0bec61c7303e81f9d7f3169b7c97573b9184ec3c5286d9646e96595f064d61013431628f5c57bcb1bf79bcd1b0177ab4520c1a1a9b34b5067d9f465c9b03154d57f1b42f
+Ctrl.hexxcghash = hexxcghash:03af4bd15a37aa7816d826332dcd9daa1537770fd0bcafbafe30033d
+Ctrl.hexsession_id = hexsession_id:36084ca3dc535b37d533d034d891fabc20e3b0270bb8c008066bfac8
+Ctrl.type = type:B
+Output = ff14fadc19a0bd8a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100a03d807fef48a50d8a04d9b6721979c5904412c3bcfe69ebd4c2554debe82a695a66fb9d844c6ef3aa4b745c2a4c8dbc4ba26742e0d1159ded83edca0bec61c7303e81f9d7f3169b7c97573b9184ec3c5286d9646e96595f064d61013431628f5c57bcb1bf79bcd1b0177ab4520c1a1a9b34b5067d9f465c9b03154d57f1b42f
+Ctrl.hexxcghash = hexxcghash:03af4bd15a37aa7816d826332dcd9daa1537770fd0bcafbafe30033d
+Ctrl.hexsession_id = hexsession_id:36084ca3dc535b37d533d034d891fabc20e3b0270bb8c008066bfac8
+Ctrl.type = type:C
+Output = 34a70734eaebeb8608cbb91098fa13326f37ccc5d408584d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100a03d807fef48a50d8a04d9b6721979c5904412c3bcfe69ebd4c2554debe82a695a66fb9d844c6ef3aa4b745c2a4c8dbc4ba26742e0d1159ded83edca0bec61c7303e81f9d7f3169b7c97573b9184ec3c5286d9646e96595f064d61013431628f5c57bcb1bf79bcd1b0177ab4520c1a1a9b34b5067d9f465c9b03154d57f1b42f
+Ctrl.hexxcghash = hexxcghash:03af4bd15a37aa7816d826332dcd9daa1537770fd0bcafbafe30033d
+Ctrl.hexsession_id = hexsession_id:36084ca3dc535b37d533d034d891fabc20e3b0270bb8c008066bfac8
+Ctrl.type = type:D
+Output = f993da8f2e840b836c8980fa2d780a1b4eeef77046988eed
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100a03d807fef48a50d8a04d9b6721979c5904412c3bcfe69ebd4c2554debe82a695a66fb9d844c6ef3aa4b745c2a4c8dbc4ba26742e0d1159ded83edca0bec61c7303e81f9d7f3169b7c97573b9184ec3c5286d9646e96595f064d61013431628f5c57bcb1bf79bcd1b0177ab4520c1a1a9b34b5067d9f465c9b03154d57f1b42f
+Ctrl.hexxcghash = hexxcghash:03af4bd15a37aa7816d826332dcd9daa1537770fd0bcafbafe30033d
+Ctrl.hexsession_id = hexsession_id:36084ca3dc535b37d533d034d891fabc20e3b0270bb8c008066bfac8
+Ctrl.type = type:E
+Output = a274441c86dd146cfab25d87344bd5a880d374d300aa8e1fe4919378
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100a03d807fef48a50d8a04d9b6721979c5904412c3bcfe69ebd4c2554debe82a695a66fb9d844c6ef3aa4b745c2a4c8dbc4ba26742e0d1159ded83edca0bec61c7303e81f9d7f3169b7c97573b9184ec3c5286d9646e96595f064d61013431628f5c57bcb1bf79bcd1b0177ab4520c1a1a9b34b5067d9f465c9b03154d57f1b42f
+Ctrl.hexxcghash = hexxcghash:03af4bd15a37aa7816d826332dcd9daa1537770fd0bcafbafe30033d
+Ctrl.hexsession_id = hexsession_id:36084ca3dc535b37d533d034d891fabc20e3b0270bb8c008066bfac8
+Ctrl.type = type:F
+Output = 7774dc48324cca24901bedc37224cb291d6202fb6b5e1d9315a9bd10
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d09e300c8b93b8c759f96910b319b8fd9c9c8c1b704b65649f525b6c16732ee37f499ac729bdce9ea493811954849e8eeb449cb2f4485fe78b0f538038178ad3e1b95ef13fcf0134f1199ad742b31d5f222ed7927283a008c970143af46965acde32139c2448db5cc11fd55e534779f1b5d7757b27e3a3881a3596b0b002ff7e
+Ctrl.hexxcghash = hexxcghash:be8559339a1b231a59a8feae904c00decaf970ff8e83018662c65fa8
+Ctrl.hexsession_id = hexsession_id:a8378fd158677fac292c5cce8a9efdbd5c5c98ee6f056a5e6e771b6b
+Ctrl.type = type:A
+Output = 75bc82b271311f53
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d09e300c8b93b8c759f96910b319b8fd9c9c8c1b704b65649f525b6c16732ee37f499ac729bdce9ea493811954849e8eeb449cb2f4485fe78b0f538038178ad3e1b95ef13fcf0134f1199ad742b31d5f222ed7927283a008c970143af46965acde32139c2448db5cc11fd55e534779f1b5d7757b27e3a3881a3596b0b002ff7e
+Ctrl.hexxcghash = hexxcghash:be8559339a1b231a59a8feae904c00decaf970ff8e83018662c65fa8
+Ctrl.hexsession_id = hexsession_id:a8378fd158677fac292c5cce8a9efdbd5c5c98ee6f056a5e6e771b6b
+Ctrl.type = type:B
+Output = 602d69e77b8c30b3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d09e300c8b93b8c759f96910b319b8fd9c9c8c1b704b65649f525b6c16732ee37f499ac729bdce9ea493811954849e8eeb449cb2f4485fe78b0f538038178ad3e1b95ef13fcf0134f1199ad742b31d5f222ed7927283a008c970143af46965acde32139c2448db5cc11fd55e534779f1b5d7757b27e3a3881a3596b0b002ff7e
+Ctrl.hexxcghash = hexxcghash:be8559339a1b231a59a8feae904c00decaf970ff8e83018662c65fa8
+Ctrl.hexsession_id = hexsession_id:a8378fd158677fac292c5cce8a9efdbd5c5c98ee6f056a5e6e771b6b
+Ctrl.type = type:C
+Output = e0c8856a26b2f4804e98809d5b81cdb360b43884a33d4fef
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d09e300c8b93b8c759f96910b319b8fd9c9c8c1b704b65649f525b6c16732ee37f499ac729bdce9ea493811954849e8eeb449cb2f4485fe78b0f538038178ad3e1b95ef13fcf0134f1199ad742b31d5f222ed7927283a008c970143af46965acde32139c2448db5cc11fd55e534779f1b5d7757b27e3a3881a3596b0b002ff7e
+Ctrl.hexxcghash = hexxcghash:be8559339a1b231a59a8feae904c00decaf970ff8e83018662c65fa8
+Ctrl.hexsession_id = hexsession_id:a8378fd158677fac292c5cce8a9efdbd5c5c98ee6f056a5e6e771b6b
+Ctrl.type = type:D
+Output = e661555415bcab0b1f2d4b4387cda213cdd93f8458a2ace4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d09e300c8b93b8c759f96910b319b8fd9c9c8c1b704b65649f525b6c16732ee37f499ac729bdce9ea493811954849e8eeb449cb2f4485fe78b0f538038178ad3e1b95ef13fcf0134f1199ad742b31d5f222ed7927283a008c970143af46965acde32139c2448db5cc11fd55e534779f1b5d7757b27e3a3881a3596b0b002ff7e
+Ctrl.hexxcghash = hexxcghash:be8559339a1b231a59a8feae904c00decaf970ff8e83018662c65fa8
+Ctrl.hexsession_id = hexsession_id:a8378fd158677fac292c5cce8a9efdbd5c5c98ee6f056a5e6e771b6b
+Ctrl.type = type:E
+Output = a368f66127573c79e2d936032f75c3d11c0131455eb9b6c5384582de
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d09e300c8b93b8c759f96910b319b8fd9c9c8c1b704b65649f525b6c16732ee37f499ac729bdce9ea493811954849e8eeb449cb2f4485fe78b0f538038178ad3e1b95ef13fcf0134f1199ad742b31d5f222ed7927283a008c970143af46965acde32139c2448db5cc11fd55e534779f1b5d7757b27e3a3881a3596b0b002ff7e
+Ctrl.hexxcghash = hexxcghash:be8559339a1b231a59a8feae904c00decaf970ff8e83018662c65fa8
+Ctrl.hexsession_id = hexsession_id:a8378fd158677fac292c5cce8a9efdbd5c5c98ee6f056a5e6e771b6b
+Ctrl.type = type:F
+Output = 779f09f514bdf7ed4a01788f10146367ce2ddf2aacebb961524c002a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008057352c4a26aa011e9b9e101736ab6b1369c73f553848d159b01bf2c7671074cdcdc73b8c697649dc7465197c2f17560d0045246410063f20d8d29518e7b25d871886346acccd9ec1b2d74b19b4aff16953714266d1440247859958f010f3fe616859c07315169c5bb5547c6dfdaf4a219daa3a78f546958f56e14fdf64c3b26e
+Ctrl.hexxcghash = hexxcghash:dca302cd4ee29d88b3f909f73e19d920099b8c18062e875cb762257b
+Ctrl.hexsession_id = hexsession_id:2f6368dd5f1a6a8db98f74331850c110aa0e58f06a10ca8178171d95
+Ctrl.type = type:A
+Output = 386bc0b99215c8fa
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008057352c4a26aa011e9b9e101736ab6b1369c73f553848d159b01bf2c7671074cdcdc73b8c697649dc7465197c2f17560d0045246410063f20d8d29518e7b25d871886346acccd9ec1b2d74b19b4aff16953714266d1440247859958f010f3fe616859c07315169c5bb5547c6dfdaf4a219daa3a78f546958f56e14fdf64c3b26e
+Ctrl.hexxcghash = hexxcghash:dca302cd4ee29d88b3f909f73e19d920099b8c18062e875cb762257b
+Ctrl.hexsession_id = hexsession_id:2f6368dd5f1a6a8db98f74331850c110aa0e58f06a10ca8178171d95
+Ctrl.type = type:B
+Output = c793dba9a68f70a4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008057352c4a26aa011e9b9e101736ab6b1369c73f553848d159b01bf2c7671074cdcdc73b8c697649dc7465197c2f17560d0045246410063f20d8d29518e7b25d871886346acccd9ec1b2d74b19b4aff16953714266d1440247859958f010f3fe616859c07315169c5bb5547c6dfdaf4a219daa3a78f546958f56e14fdf64c3b26e
+Ctrl.hexxcghash = hexxcghash:dca302cd4ee29d88b3f909f73e19d920099b8c18062e875cb762257b
+Ctrl.hexsession_id = hexsession_id:2f6368dd5f1a6a8db98f74331850c110aa0e58f06a10ca8178171d95
+Ctrl.type = type:C
+Output = 3dcaea7c946c2de76811482556299aa9bf96c8eef11fb2d6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008057352c4a26aa011e9b9e101736ab6b1369c73f553848d159b01bf2c7671074cdcdc73b8c697649dc7465197c2f17560d0045246410063f20d8d29518e7b25d871886346acccd9ec1b2d74b19b4aff16953714266d1440247859958f010f3fe616859c07315169c5bb5547c6dfdaf4a219daa3a78f546958f56e14fdf64c3b26e
+Ctrl.hexxcghash = hexxcghash:dca302cd4ee29d88b3f909f73e19d920099b8c18062e875cb762257b
+Ctrl.hexsession_id = hexsession_id:2f6368dd5f1a6a8db98f74331850c110aa0e58f06a10ca8178171d95
+Ctrl.type = type:D
+Output = fd078ef65922006809729f9533c8742e9f973f7ff37ba987
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008057352c4a26aa011e9b9e101736ab6b1369c73f553848d159b01bf2c7671074cdcdc73b8c697649dc7465197c2f17560d0045246410063f20d8d29518e7b25d871886346acccd9ec1b2d74b19b4aff16953714266d1440247859958f010f3fe616859c07315169c5bb5547c6dfdaf4a219daa3a78f546958f56e14fdf64c3b26e
+Ctrl.hexxcghash = hexxcghash:dca302cd4ee29d88b3f909f73e19d920099b8c18062e875cb762257b
+Ctrl.hexsession_id = hexsession_id:2f6368dd5f1a6a8db98f74331850c110aa0e58f06a10ca8178171d95
+Ctrl.type = type:E
+Output = 83a1924fa5f7ceffeba7f519ac51a86a2746a93eb194db51a4596ca1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008057352c4a26aa011e9b9e101736ab6b1369c73f553848d159b01bf2c7671074cdcdc73b8c697649dc7465197c2f17560d0045246410063f20d8d29518e7b25d871886346acccd9ec1b2d74b19b4aff16953714266d1440247859958f010f3fe616859c07315169c5bb5547c6dfdaf4a219daa3a78f546958f56e14fdf64c3b26e
+Ctrl.hexxcghash = hexxcghash:dca302cd4ee29d88b3f909f73e19d920099b8c18062e875cb762257b
+Ctrl.hexsession_id = hexsession_id:2f6368dd5f1a6a8db98f74331850c110aa0e58f06a10ca8178171d95
+Ctrl.type = type:F
+Output = e16507d1bbd53b41f9bb2f0f21b5112eb6cd1eb0489fb5e754212390
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008d372970f67a75a1748e6967c67a1f5665a3d6f71d6d24ab113bedb42ad544de34e67df7f644f78e5dcfd12e25b7cb8655aa9f07fef59058e42450aee5d4a733887535313e06c7e6426598284fdaa33ff88e1b6174c33199f2630ec42c8d7d9b92ea3d83a1bf8514b153fd9cf9c520636a0de9c6ba8b9318465ddcaa293367e5
+Ctrl.hexxcghash = hexxcghash:683a0b23e8bf98e03178a032a65e743e429c805b8de04407f73ab21b
+Ctrl.hexsession_id = hexsession_id:0e9de6ef124b670db44ade438920db01b5e6fb69a482816a303fcef7
+Ctrl.type = type:A
+Output = 0e764ebe0d523aae
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008d372970f67a75a1748e6967c67a1f5665a3d6f71d6d24ab113bedb42ad544de34e67df7f644f78e5dcfd12e25b7cb8655aa9f07fef59058e42450aee5d4a733887535313e06c7e6426598284fdaa33ff88e1b6174c33199f2630ec42c8d7d9b92ea3d83a1bf8514b153fd9cf9c520636a0de9c6ba8b9318465ddcaa293367e5
+Ctrl.hexxcghash = hexxcghash:683a0b23e8bf98e03178a032a65e743e429c805b8de04407f73ab21b
+Ctrl.hexsession_id = hexsession_id:0e9de6ef124b670db44ade438920db01b5e6fb69a482816a303fcef7
+Ctrl.type = type:B
+Output = 24bd2eff86c2a8dc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008d372970f67a75a1748e6967c67a1f5665a3d6f71d6d24ab113bedb42ad544de34e67df7f644f78e5dcfd12e25b7cb8655aa9f07fef59058e42450aee5d4a733887535313e06c7e6426598284fdaa33ff88e1b6174c33199f2630ec42c8d7d9b92ea3d83a1bf8514b153fd9cf9c520636a0de9c6ba8b9318465ddcaa293367e5
+Ctrl.hexxcghash = hexxcghash:683a0b23e8bf98e03178a032a65e743e429c805b8de04407f73ab21b
+Ctrl.hexsession_id = hexsession_id:0e9de6ef124b670db44ade438920db01b5e6fb69a482816a303fcef7
+Ctrl.type = type:C
+Output = 26c01e3d56c1b928f65aaa1b6a15f5b8d41de187b4bb5fdc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008d372970f67a75a1748e6967c67a1f5665a3d6f71d6d24ab113bedb42ad544de34e67df7f644f78e5dcfd12e25b7cb8655aa9f07fef59058e42450aee5d4a733887535313e06c7e6426598284fdaa33ff88e1b6174c33199f2630ec42c8d7d9b92ea3d83a1bf8514b153fd9cf9c520636a0de9c6ba8b9318465ddcaa293367e5
+Ctrl.hexxcghash = hexxcghash:683a0b23e8bf98e03178a032a65e743e429c805b8de04407f73ab21b
+Ctrl.hexsession_id = hexsession_id:0e9de6ef124b670db44ade438920db01b5e6fb69a482816a303fcef7
+Ctrl.type = type:D
+Output = e0cc3bdb6d69d10893eeb73b892d746acea151f24247fd9c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008d372970f67a75a1748e6967c67a1f5665a3d6f71d6d24ab113bedb42ad544de34e67df7f644f78e5dcfd12e25b7cb8655aa9f07fef59058e42450aee5d4a733887535313e06c7e6426598284fdaa33ff88e1b6174c33199f2630ec42c8d7d9b92ea3d83a1bf8514b153fd9cf9c520636a0de9c6ba8b9318465ddcaa293367e5
+Ctrl.hexxcghash = hexxcghash:683a0b23e8bf98e03178a032a65e743e429c805b8de04407f73ab21b
+Ctrl.hexsession_id = hexsession_id:0e9de6ef124b670db44ade438920db01b5e6fb69a482816a303fcef7
+Ctrl.type = type:E
+Output = bf442ba6ec794f20584528686cedbaa568c13b895f642fe5cb3542bb
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:00000081008d372970f67a75a1748e6967c67a1f5665a3d6f71d6d24ab113bedb42ad544de34e67df7f644f78e5dcfd12e25b7cb8655aa9f07fef59058e42450aee5d4a733887535313e06c7e6426598284fdaa33ff88e1b6174c33199f2630ec42c8d7d9b92ea3d83a1bf8514b153fd9cf9c520636a0de9c6ba8b9318465ddcaa293367e5
+Ctrl.hexxcghash = hexxcghash:683a0b23e8bf98e03178a032a65e743e429c805b8de04407f73ab21b
+Ctrl.hexsession_id = hexsession_id:0e9de6ef124b670db44ade438920db01b5e6fb69a482816a303fcef7
+Ctrl.type = type:F
+Output = 65ab453e5ffd1b5e1540aa547766d7c177204c319642f93059bdf257
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008004a70cf5e546c0920433bf16dcda3076d9195b5c35ad6b83b6a51e880f22fddaae0d358e35037bbe1e66f2422c29ff30a39822e067930b9faf59f844441dee6f233635a00c7cb71596f8589194016132ebbe204d98fc7f9bb0b7f4e6b6a68f488a59138d9859729d938de6ace9d08be86301bbd4e80d4650391ef3599a6f0bc0
+Ctrl.hexxcghash = hexxcghash:a05a5c2d8beb394b7befaecfe3f4227cd81a28d90ac64ec78ce170b6
+Ctrl.hexsession_id = hexsession_id:1380b38f6b6997a47ce234b7d3d6afb5960e721a348a725704c19cff
+Ctrl.type = type:A
+Output = 45799bbb09fd8804
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008004a70cf5e546c0920433bf16dcda3076d9195b5c35ad6b83b6a51e880f22fddaae0d358e35037bbe1e66f2422c29ff30a39822e067930b9faf59f844441dee6f233635a00c7cb71596f8589194016132ebbe204d98fc7f9bb0b7f4e6b6a68f488a59138d9859729d938de6ace9d08be86301bbd4e80d4650391ef3599a6f0bc0
+Ctrl.hexxcghash = hexxcghash:a05a5c2d8beb394b7befaecfe3f4227cd81a28d90ac64ec78ce170b6
+Ctrl.hexsession_id = hexsession_id:1380b38f6b6997a47ce234b7d3d6afb5960e721a348a725704c19cff
+Ctrl.type = type:B
+Output = b787b009f3313be0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008004a70cf5e546c0920433bf16dcda3076d9195b5c35ad6b83b6a51e880f22fddaae0d358e35037bbe1e66f2422c29ff30a39822e067930b9faf59f844441dee6f233635a00c7cb71596f8589194016132ebbe204d98fc7f9bb0b7f4e6b6a68f488a59138d9859729d938de6ace9d08be86301bbd4e80d4650391ef3599a6f0bc0
+Ctrl.hexxcghash = hexxcghash:a05a5c2d8beb394b7befaecfe3f4227cd81a28d90ac64ec78ce170b6
+Ctrl.hexsession_id = hexsession_id:1380b38f6b6997a47ce234b7d3d6afb5960e721a348a725704c19cff
+Ctrl.type = type:C
+Output = c4cbb547c997e8fddb9e56ef5df91327766668a43a958a8e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008004a70cf5e546c0920433bf16dcda3076d9195b5c35ad6b83b6a51e880f22fddaae0d358e35037bbe1e66f2422c29ff30a39822e067930b9faf59f844441dee6f233635a00c7cb71596f8589194016132ebbe204d98fc7f9bb0b7f4e6b6a68f488a59138d9859729d938de6ace9d08be86301bbd4e80d4650391ef3599a6f0bc0
+Ctrl.hexxcghash = hexxcghash:a05a5c2d8beb394b7befaecfe3f4227cd81a28d90ac64ec78ce170b6
+Ctrl.hexsession_id = hexsession_id:1380b38f6b6997a47ce234b7d3d6afb5960e721a348a725704c19cff
+Ctrl.type = type:D
+Output = b55b7cca0a0363b84b40b79366b87db7c440dec5bf89e952
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008004a70cf5e546c0920433bf16dcda3076d9195b5c35ad6b83b6a51e880f22fddaae0d358e35037bbe1e66f2422c29ff30a39822e067930b9faf59f844441dee6f233635a00c7cb71596f8589194016132ebbe204d98fc7f9bb0b7f4e6b6a68f488a59138d9859729d938de6ace9d08be86301bbd4e80d4650391ef3599a6f0bc0
+Ctrl.hexxcghash = hexxcghash:a05a5c2d8beb394b7befaecfe3f4227cd81a28d90ac64ec78ce170b6
+Ctrl.hexsession_id = hexsession_id:1380b38f6b6997a47ce234b7d3d6afb5960e721a348a725704c19cff
+Ctrl.type = type:E
+Output = 9c6399e5f4db0fc7652268d7423230ee5ffc0a210c26568dc5c0ab7d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008004a70cf5e546c0920433bf16dcda3076d9195b5c35ad6b83b6a51e880f22fddaae0d358e35037bbe1e66f2422c29ff30a39822e067930b9faf59f844441dee6f233635a00c7cb71596f8589194016132ebbe204d98fc7f9bb0b7f4e6b6a68f488a59138d9859729d938de6ace9d08be86301bbd4e80d4650391ef3599a6f0bc0
+Ctrl.hexxcghash = hexxcghash:a05a5c2d8beb394b7befaecfe3f4227cd81a28d90ac64ec78ce170b6
+Ctrl.hexsession_id = hexsession_id:1380b38f6b6997a47ce234b7d3d6afb5960e721a348a725704c19cff
+Ctrl.type = type:F
+Output = 9824301c33daae0f1b75eb472d6f0b4ef2cea0b2f61e204b6aefb0bd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d07c8a0c16c5f000ff00db6161555ea6b6b400803fe250288a9b88b48ced381de3f46982210216dff4defdbb007e98ea47f891ae3f38e09f56c96913406c13ed35cade3f2f80c6c6402e7ab097decc9e7ecc377b9965991422b54b8fcf34b9635cdc6b1cb698c61cd8377f3fadf1ba9e289d83767ca24370661085461a0b348e
+Ctrl.hexxcghash = hexxcghash:45dfee14ec8160cb1ccd769d2db4785b9773aeedde0c6ca0f75324df
+Ctrl.hexsession_id = hexsession_id:0f15315853288a987cec1e0668f34fa54537304f7082673d74d4f970
+Ctrl.type = type:A
+Output = 2958928e5fd3c6e4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d07c8a0c16c5f000ff00db6161555ea6b6b400803fe250288a9b88b48ced381de3f46982210216dff4defdbb007e98ea47f891ae3f38e09f56c96913406c13ed35cade3f2f80c6c6402e7ab097decc9e7ecc377b9965991422b54b8fcf34b9635cdc6b1cb698c61cd8377f3fadf1ba9e289d83767ca24370661085461a0b348e
+Ctrl.hexxcghash = hexxcghash:45dfee14ec8160cb1ccd769d2db4785b9773aeedde0c6ca0f75324df
+Ctrl.hexsession_id = hexsession_id:0f15315853288a987cec1e0668f34fa54537304f7082673d74d4f970
+Ctrl.type = type:B
+Output = aa91bee1a3b3374c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d07c8a0c16c5f000ff00db6161555ea6b6b400803fe250288a9b88b48ced381de3f46982210216dff4defdbb007e98ea47f891ae3f38e09f56c96913406c13ed35cade3f2f80c6c6402e7ab097decc9e7ecc377b9965991422b54b8fcf34b9635cdc6b1cb698c61cd8377f3fadf1ba9e289d83767ca24370661085461a0b348e
+Ctrl.hexxcghash = hexxcghash:45dfee14ec8160cb1ccd769d2db4785b9773aeedde0c6ca0f75324df
+Ctrl.hexsession_id = hexsession_id:0f15315853288a987cec1e0668f34fa54537304f7082673d74d4f970
+Ctrl.type = type:C
+Output = 6fdac559eb1d6af7fc7fbaa4f9a15fd4145b97b9418518d9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d07c8a0c16c5f000ff00db6161555ea6b6b400803fe250288a9b88b48ced381de3f46982210216dff4defdbb007e98ea47f891ae3f38e09f56c96913406c13ed35cade3f2f80c6c6402e7ab097decc9e7ecc377b9965991422b54b8fcf34b9635cdc6b1cb698c61cd8377f3fadf1ba9e289d83767ca24370661085461a0b348e
+Ctrl.hexxcghash = hexxcghash:45dfee14ec8160cb1ccd769d2db4785b9773aeedde0c6ca0f75324df
+Ctrl.hexsession_id = hexsession_id:0f15315853288a987cec1e0668f34fa54537304f7082673d74d4f970
+Ctrl.type = type:D
+Output = 5a8271402756f7eac59f09b5020f7b05f6475fc3a2e2b482
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d07c8a0c16c5f000ff00db6161555ea6b6b400803fe250288a9b88b48ced381de3f46982210216dff4defdbb007e98ea47f891ae3f38e09f56c96913406c13ed35cade3f2f80c6c6402e7ab097decc9e7ecc377b9965991422b54b8fcf34b9635cdc6b1cb698c61cd8377f3fadf1ba9e289d83767ca24370661085461a0b348e
+Ctrl.hexxcghash = hexxcghash:45dfee14ec8160cb1ccd769d2db4785b9773aeedde0c6ca0f75324df
+Ctrl.hexsession_id = hexsession_id:0f15315853288a987cec1e0668f34fa54537304f7082673d74d4f970
+Ctrl.type = type:E
+Output = 910de4a4a437cab056f7c38037f0196c524464237c5e332e79564a90
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100d07c8a0c16c5f000ff00db6161555ea6b6b400803fe250288a9b88b48ced381de3f46982210216dff4defdbb007e98ea47f891ae3f38e09f56c96913406c13ed35cade3f2f80c6c6402e7ab097decc9e7ecc377b9965991422b54b8fcf34b9635cdc6b1cb698c61cd8377f3fadf1ba9e289d83767ca24370661085461a0b348e
+Ctrl.hexxcghash = hexxcghash:45dfee14ec8160cb1ccd769d2db4785b9773aeedde0c6ca0f75324df
+Ctrl.hexsession_id = hexsession_id:0f15315853288a987cec1e0668f34fa54537304f7082673d74d4f970
+Ctrl.type = type:F
+Output = 0bfa6ed5dc8ab0fc1bb9feb966d7107137ebf3f754ac71c2a16a9c22
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000807f046e0e1a0050fe544cd0bf194fdb0a07efe7708498a1b25aad90641e8befdef8f4aacb538ccc446d02d3896e1cc34d9a8becdcc48d10e73460f7c0c58eb51707d37f1eaa0008cb21c89e8b226a3e60c76f9f9f5af2a16abca346a81c66ec0199167b17e0d8cb3baea9a9c700632f585e0cd467e779eba02bc24eff22b6425c
+Ctrl.hexxcghash = hexxcghash:b63c992199e370cde19b640077bbbac92c6a8a0f206b4d560935cee5
+Ctrl.hexsession_id = hexsession_id:ee00f86c7ecc4ce74a3ece1699802b7420ca4d49cc74b23399c23545
+Ctrl.type = type:A
+Output = 82204d79e13252f1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000807f046e0e1a0050fe544cd0bf194fdb0a07efe7708498a1b25aad90641e8befdef8f4aacb538ccc446d02d3896e1cc34d9a8becdcc48d10e73460f7c0c58eb51707d37f1eaa0008cb21c89e8b226a3e60c76f9f9f5af2a16abca346a81c66ec0199167b17e0d8cb3baea9a9c700632f585e0cd467e779eba02bc24eff22b6425c
+Ctrl.hexxcghash = hexxcghash:b63c992199e370cde19b640077bbbac92c6a8a0f206b4d560935cee5
+Ctrl.hexsession_id = hexsession_id:ee00f86c7ecc4ce74a3ece1699802b7420ca4d49cc74b23399c23545
+Ctrl.type = type:B
+Output = a76ff923488c7bd3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000807f046e0e1a0050fe544cd0bf194fdb0a07efe7708498a1b25aad90641e8befdef8f4aacb538ccc446d02d3896e1cc34d9a8becdcc48d10e73460f7c0c58eb51707d37f1eaa0008cb21c89e8b226a3e60c76f9f9f5af2a16abca346a81c66ec0199167b17e0d8cb3baea9a9c700632f585e0cd467e779eba02bc24eff22b6425c
+Ctrl.hexxcghash = hexxcghash:b63c992199e370cde19b640077bbbac92c6a8a0f206b4d560935cee5
+Ctrl.hexsession_id = hexsession_id:ee00f86c7ecc4ce74a3ece1699802b7420ca4d49cc74b23399c23545
+Ctrl.type = type:C
+Output = 8ba3bd224890bdd4dd07d2a5a98e5efcd95d82c66583d098
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000807f046e0e1a0050fe544cd0bf194fdb0a07efe7708498a1b25aad90641e8befdef8f4aacb538ccc446d02d3896e1cc34d9a8becdcc48d10e73460f7c0c58eb51707d37f1eaa0008cb21c89e8b226a3e60c76f9f9f5af2a16abca346a81c66ec0199167b17e0d8cb3baea9a9c700632f585e0cd467e779eba02bc24eff22b6425c
+Ctrl.hexxcghash = hexxcghash:b63c992199e370cde19b640077bbbac92c6a8a0f206b4d560935cee5
+Ctrl.hexsession_id = hexsession_id:ee00f86c7ecc4ce74a3ece1699802b7420ca4d49cc74b23399c23545
+Ctrl.type = type:D
+Output = a04a3844933ca1bb45848bc1a7626e4c50dc46aa5376d027
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000807f046e0e1a0050fe544cd0bf194fdb0a07efe7708498a1b25aad90641e8befdef8f4aacb538ccc446d02d3896e1cc34d9a8becdcc48d10e73460f7c0c58eb51707d37f1eaa0008cb21c89e8b226a3e60c76f9f9f5af2a16abca346a81c66ec0199167b17e0d8cb3baea9a9c700632f585e0cd467e779eba02bc24eff22b6425c
+Ctrl.hexxcghash = hexxcghash:b63c992199e370cde19b640077bbbac92c6a8a0f206b4d560935cee5
+Ctrl.hexsession_id = hexsession_id:ee00f86c7ecc4ce74a3ece1699802b7420ca4d49cc74b23399c23545
+Ctrl.type = type:E
+Output = 393f2f152d6c6d063f284cadd1fd9d700928188b7fea31f74b44fbc6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000807f046e0e1a0050fe544cd0bf194fdb0a07efe7708498a1b25aad90641e8befdef8f4aacb538ccc446d02d3896e1cc34d9a8becdcc48d10e73460f7c0c58eb51707d37f1eaa0008cb21c89e8b226a3e60c76f9f9f5af2a16abca346a81c66ec0199167b17e0d8cb3baea9a9c700632f585e0cd467e779eba02bc24eff22b6425c
+Ctrl.hexxcghash = hexxcghash:b63c992199e370cde19b640077bbbac92c6a8a0f206b4d560935cee5
+Ctrl.hexsession_id = hexsession_id:ee00f86c7ecc4ce74a3ece1699802b7420ca4d49cc74b23399c23545
+Ctrl.type = type:F
+Output = f27f2cd72b22e1719f91b912d6c9d180985121d32bd217e348cd2003
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100b51d0e3d21612b3bde548bf3da6d474166972f602beb1b876b7045a595483ec0bfb707eaf7c0d416d028a3ed7cff460cad66e2284e3190a746d3304678c91b2654b3ab147aece57e3bb5f4d30d4d7c01e065f70b12b9270ebec306a178870d1fd814806c3dbdc16d4bd7e843de8e5414ff336e735bc5c8241ab0ae08197159d6
+Ctrl.hexxcghash = hexxcghash:1eacc2c8e8ec2c3a5af31c6d498301e82664f60899223ef4348f4467
+Ctrl.hexsession_id = hexsession_id:ddc879c0f221147bd70a1cedf5578fd8f196290357945fe75e551262
+Ctrl.type = type:A
+Output = f843e3c6a1621998
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100b51d0e3d21612b3bde548bf3da6d474166972f602beb1b876b7045a595483ec0bfb707eaf7c0d416d028a3ed7cff460cad66e2284e3190a746d3304678c91b2654b3ab147aece57e3bb5f4d30d4d7c01e065f70b12b9270ebec306a178870d1fd814806c3dbdc16d4bd7e843de8e5414ff336e735bc5c8241ab0ae08197159d6
+Ctrl.hexxcghash = hexxcghash:1eacc2c8e8ec2c3a5af31c6d498301e82664f60899223ef4348f4467
+Ctrl.hexsession_id = hexsession_id:ddc879c0f221147bd70a1cedf5578fd8f196290357945fe75e551262
+Ctrl.type = type:B
+Output = 128b2d8968cfaad5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100b51d0e3d21612b3bde548bf3da6d474166972f602beb1b876b7045a595483ec0bfb707eaf7c0d416d028a3ed7cff460cad66e2284e3190a746d3304678c91b2654b3ab147aece57e3bb5f4d30d4d7c01e065f70b12b9270ebec306a178870d1fd814806c3dbdc16d4bd7e843de8e5414ff336e735bc5c8241ab0ae08197159d6
+Ctrl.hexxcghash = hexxcghash:1eacc2c8e8ec2c3a5af31c6d498301e82664f60899223ef4348f4467
+Ctrl.hexsession_id = hexsession_id:ddc879c0f221147bd70a1cedf5578fd8f196290357945fe75e551262
+Ctrl.type = type:C
+Output = d6c4d2685753580dea2c6a6eb6add592011356eb9e868d44
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100b51d0e3d21612b3bde548bf3da6d474166972f602beb1b876b7045a595483ec0bfb707eaf7c0d416d028a3ed7cff460cad66e2284e3190a746d3304678c91b2654b3ab147aece57e3bb5f4d30d4d7c01e065f70b12b9270ebec306a178870d1fd814806c3dbdc16d4bd7e843de8e5414ff336e735bc5c8241ab0ae08197159d6
+Ctrl.hexxcghash = hexxcghash:1eacc2c8e8ec2c3a5af31c6d498301e82664f60899223ef4348f4467
+Ctrl.hexsession_id = hexsession_id:ddc879c0f221147bd70a1cedf5578fd8f196290357945fe75e551262
+Ctrl.type = type:D
+Output = 92af60f4858f3d14efaac039130389ab9ae1237f0da09a29
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100b51d0e3d21612b3bde548bf3da6d474166972f602beb1b876b7045a595483ec0bfb707eaf7c0d416d028a3ed7cff460cad66e2284e3190a746d3304678c91b2654b3ab147aece57e3bb5f4d30d4d7c01e065f70b12b9270ebec306a178870d1fd814806c3dbdc16d4bd7e843de8e5414ff336e735bc5c8241ab0ae08197159d6
+Ctrl.hexxcghash = hexxcghash:1eacc2c8e8ec2c3a5af31c6d498301e82664f60899223ef4348f4467
+Ctrl.hexsession_id = hexsession_id:ddc879c0f221147bd70a1cedf5578fd8f196290357945fe75e551262
+Ctrl.type = type:E
+Output = a37af93c8f25e145def1c5397bec2ee2119cc0e0bd4854fe23b2e3d1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000008100b51d0e3d21612b3bde548bf3da6d474166972f602beb1b876b7045a595483ec0bfb707eaf7c0d416d028a3ed7cff460cad66e2284e3190a746d3304678c91b2654b3ab147aece57e3bb5f4d30d4d7c01e065f70b12b9270ebec306a178870d1fd814806c3dbdc16d4bd7e843de8e5414ff336e735bc5c8241ab0ae08197159d6
+Ctrl.hexxcghash = hexxcghash:1eacc2c8e8ec2c3a5af31c6d498301e82664f60899223ef4348f4467
+Ctrl.hexsession_id = hexsession_id:ddc879c0f221147bd70a1cedf5578fd8f196290357945fe75e551262
+Ctrl.type = type:F
+Output = d44def5fcec300da5913ca109c0fd7a2c2cbcedd2c3e3216c5cb0d95
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000810088a2add0cc5918c649c6bbc82930ae99326188faa20e2cfc8f819cc44bdd99d1638fbbd380197beda58c039c239fdcced533db7ea31635b835f5f92725490e7638d40a017b89f48406faab653aa03721af5d7c5c61d4519e7c07f99974c1f715b1ce3fcffc50b2a6cc9b4e45a76791b862ac87524d2b52fe6c706f5a73e5dc0a
+Ctrl.hexxcghash = hexxcghash:321ef6b92cae9df351c1b7d2253325536e659df52acd4a8787b45217
+Ctrl.hexsession_id = hexsession_id:340edbc8aeec53501158ad2ea7650abcbb906348d57b14b61524469e
+Ctrl.type = type:A
+Output = 4276fab65090b420
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000810088a2add0cc5918c649c6bbc82930ae99326188faa20e2cfc8f819cc44bdd99d1638fbbd380197beda58c039c239fdcced533db7ea31635b835f5f92725490e7638d40a017b89f48406faab653aa03721af5d7c5c61d4519e7c07f99974c1f715b1ce3fcffc50b2a6cc9b4e45a76791b862ac87524d2b52fe6c706f5a73e5dc0a
+Ctrl.hexxcghash = hexxcghash:321ef6b92cae9df351c1b7d2253325536e659df52acd4a8787b45217
+Ctrl.hexsession_id = hexsession_id:340edbc8aeec53501158ad2ea7650abcbb906348d57b14b61524469e
+Ctrl.type = type:B
+Output = 00303ca4f9a5a6f8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000810088a2add0cc5918c649c6bbc82930ae99326188faa20e2cfc8f819cc44bdd99d1638fbbd380197beda58c039c239fdcced533db7ea31635b835f5f92725490e7638d40a017b89f48406faab653aa03721af5d7c5c61d4519e7c07f99974c1f715b1ce3fcffc50b2a6cc9b4e45a76791b862ac87524d2b52fe6c706f5a73e5dc0a
+Ctrl.hexxcghash = hexxcghash:321ef6b92cae9df351c1b7d2253325536e659df52acd4a8787b45217
+Ctrl.hexsession_id = hexsession_id:340edbc8aeec53501158ad2ea7650abcbb906348d57b14b61524469e
+Ctrl.type = type:C
+Output = 3d67892281e9c6ed6535d7ae69e832f6723afd545763bd3d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000810088a2add0cc5918c649c6bbc82930ae99326188faa20e2cfc8f819cc44bdd99d1638fbbd380197beda58c039c239fdcced533db7ea31635b835f5f92725490e7638d40a017b89f48406faab653aa03721af5d7c5c61d4519e7c07f99974c1f715b1ce3fcffc50b2a6cc9b4e45a76791b862ac87524d2b52fe6c706f5a73e5dc0a
+Ctrl.hexxcghash = hexxcghash:321ef6b92cae9df351c1b7d2253325536e659df52acd4a8787b45217
+Ctrl.hexsession_id = hexsession_id:340edbc8aeec53501158ad2ea7650abcbb906348d57b14b61524469e
+Ctrl.type = type:D
+Output = 5a5844e6c47eacc172e0012044037668a653758b96310350
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000810088a2add0cc5918c649c6bbc82930ae99326188faa20e2cfc8f819cc44bdd99d1638fbbd380197beda58c039c239fdcced533db7ea31635b835f5f92725490e7638d40a017b89f48406faab653aa03721af5d7c5c61d4519e7c07f99974c1f715b1ce3fcffc50b2a6cc9b4e45a76791b862ac87524d2b52fe6c706f5a73e5dc0a
+Ctrl.hexxcghash = hexxcghash:321ef6b92cae9df351c1b7d2253325536e659df52acd4a8787b45217
+Ctrl.hexsession_id = hexsession_id:340edbc8aeec53501158ad2ea7650abcbb906348d57b14b61524469e
+Ctrl.type = type:E
+Output = 4783fb6e98db788f6594c2b82e751528590c41780adce2ffba234290
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000000810088a2add0cc5918c649c6bbc82930ae99326188faa20e2cfc8f819cc44bdd99d1638fbbd380197beda58c039c239fdcced533db7ea31635b835f5f92725490e7638d40a017b89f48406faab653aa03721af5d7c5c61d4519e7c07f99974c1f715b1ce3fcffc50b2a6cc9b4e45a76791b862ac87524d2b52fe6c706f5a73e5dc0a
+Ctrl.hexxcghash = hexxcghash:321ef6b92cae9df351c1b7d2253325536e659df52acd4a8787b45217
+Ctrl.hexsession_id = hexsession_id:340edbc8aeec53501158ad2ea7650abcbb906348d57b14b61524469e
+Ctrl.type = type:F
+Output = 7c60752b0b5a0f0027507ecd88e6af2b78e462a98459bf0511152663
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d62744a1ee5a4d03d761f48fb63ece42d9204e00016dad042ae7cbe600cb9e93535bc36d2f94d715cf8c2cd948caf876b4948429cb85ac73765949495af8380a56b68d1d3eeb4d9b310e2c53db5f51a7b8382759273c0be30862df81ca420f414c3ea8e6a1fb4875257ccc536e971c8dc07e600e265e642489266604f94ee995f96ef02eac771bb88bc66c57d229edfba1e484fd1c8b49e11e594aefa681f26ea28c348615d3e0a2dc76845d2d19543751ce444c7b65fa449a74639fa13c123d025200efa7012b209400746e03bd6a7bc938b926107da0491407bd952602d14a7fa743cbd51d5090a22c76a336f06b5e6dc5ecf70c803da8dcbff149c5013c36
+Ctrl.hexxcghash = hexxcghash:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.hexsession_id = hexsession_id:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.type = type:A
+Output = 2512664639690af9f64afd16d9ccf3d3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d62744a1ee5a4d03d761f48fb63ece42d9204e00016dad042ae7cbe600cb9e93535bc36d2f94d715cf8c2cd948caf876b4948429cb85ac73765949495af8380a56b68d1d3eeb4d9b310e2c53db5f51a7b8382759273c0be30862df81ca420f414c3ea8e6a1fb4875257ccc536e971c8dc07e600e265e642489266604f94ee995f96ef02eac771bb88bc66c57d229edfba1e484fd1c8b49e11e594aefa681f26ea28c348615d3e0a2dc76845d2d19543751ce444c7b65fa449a74639fa13c123d025200efa7012b209400746e03bd6a7bc938b926107da0491407bd952602d14a7fa743cbd51d5090a22c76a336f06b5e6dc5ecf70c803da8dcbff149c5013c36
+Ctrl.hexxcghash = hexxcghash:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.hexsession_id = hexsession_id:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.type = type:B
+Output = c13223796f394c6d1ffd18c22c09f27a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d62744a1ee5a4d03d761f48fb63ece42d9204e00016dad042ae7cbe600cb9e93535bc36d2f94d715cf8c2cd948caf876b4948429cb85ac73765949495af8380a56b68d1d3eeb4d9b310e2c53db5f51a7b8382759273c0be30862df81ca420f414c3ea8e6a1fb4875257ccc536e971c8dc07e600e265e642489266604f94ee995f96ef02eac771bb88bc66c57d229edfba1e484fd1c8b49e11e594aefa681f26ea28c348615d3e0a2dc76845d2d19543751ce444c7b65fa449a74639fa13c123d025200efa7012b209400746e03bd6a7bc938b926107da0491407bd952602d14a7fa743cbd51d5090a22c76a336f06b5e6dc5ecf70c803da8dcbff149c5013c36
+Ctrl.hexxcghash = hexxcghash:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.hexsession_id = hexsession_id:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.type = type:C
+Output = 7be659a7cbeda28722315d96444a5c98
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d62744a1ee5a4d03d761f48fb63ece42d9204e00016dad042ae7cbe600cb9e93535bc36d2f94d715cf8c2cd948caf876b4948429cb85ac73765949495af8380a56b68d1d3eeb4d9b310e2c53db5f51a7b8382759273c0be30862df81ca420f414c3ea8e6a1fb4875257ccc536e971c8dc07e600e265e642489266604f94ee995f96ef02eac771bb88bc66c57d229edfba1e484fd1c8b49e11e594aefa681f26ea28c348615d3e0a2dc76845d2d19543751ce444c7b65fa449a74639fa13c123d025200efa7012b209400746e03bd6a7bc938b926107da0491407bd952602d14a7fa743cbd51d5090a22c76a336f06b5e6dc5ecf70c803da8dcbff149c5013c36
+Ctrl.hexxcghash = hexxcghash:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.hexsession_id = hexsession_id:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.type = type:D
+Output = bdfbd698c518aa45c35d7afd7bd91150
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d62744a1ee5a4d03d761f48fb63ece42d9204e00016dad042ae7cbe600cb9e93535bc36d2f94d715cf8c2cd948caf876b4948429cb85ac73765949495af8380a56b68d1d3eeb4d9b310e2c53db5f51a7b8382759273c0be30862df81ca420f414c3ea8e6a1fb4875257ccc536e971c8dc07e600e265e642489266604f94ee995f96ef02eac771bb88bc66c57d229edfba1e484fd1c8b49e11e594aefa681f26ea28c348615d3e0a2dc76845d2d19543751ce444c7b65fa449a74639fa13c123d025200efa7012b209400746e03bd6a7bc938b926107da0491407bd952602d14a7fa743cbd51d5090a22c76a336f06b5e6dc5ecf70c803da8dcbff149c5013c36
+Ctrl.hexxcghash = hexxcghash:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.hexsession_id = hexsession_id:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.type = type:E
+Output = dd38b79b081713ac3007ffd88d5cd67f43fbb36c983e0fc1cd273d84
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d62744a1ee5a4d03d761f48fb63ece42d9204e00016dad042ae7cbe600cb9e93535bc36d2f94d715cf8c2cd948caf876b4948429cb85ac73765949495af8380a56b68d1d3eeb4d9b310e2c53db5f51a7b8382759273c0be30862df81ca420f414c3ea8e6a1fb4875257ccc536e971c8dc07e600e265e642489266604f94ee995f96ef02eac771bb88bc66c57d229edfba1e484fd1c8b49e11e594aefa681f26ea28c348615d3e0a2dc76845d2d19543751ce444c7b65fa449a74639fa13c123d025200efa7012b209400746e03bd6a7bc938b926107da0491407bd952602d14a7fa743cbd51d5090a22c76a336f06b5e6dc5ecf70c803da8dcbff149c5013c36
+Ctrl.hexxcghash = hexxcghash:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.hexsession_id = hexsession_id:273ab849318045321f672fdf9b4bc250c4b46717374bfb3322bc7701
+Ctrl.type = type:F
+Output = edf713ecfb21b9e9c2d9d04c882d5ded433dcf459ff5b0fe7cd45bb1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d9b92844753a5eadc2ef7e84372a56bd096cc1d57a5c282811658d7df87564f202e800c774e75bbb53f47e835f207300ccd4661fd8a73b6ff87770c2c036346e99fadc5193171e1e732f3b6a017808a150ee02c4b6e70d87462e51825a94bda27fa9cbe18c7ef20d0b0201cb7526e0e9bac21b877e5064000290424387a9aa98da563ee2a5ef36af4b442a69eb631b88b8e3a0f073aa5dda589c4aa0e4e007e0d0036a231d52137d724fd60d41f42512214853e7acf8bde77e377842468f4216a15d0c8fe033c2b133bf651c82fda6d227e3c3f0cb7d0a9eba7c35eeefcf683ddde696fdeba5ec124e701f01bf5b0d59a667c75633dea07670b07baa20f313c3
+Ctrl.hexxcghash = hexxcghash:a510774a9b07b05e4e0eaf9409d77028a511a9565784b69ab3c03ffc
+Ctrl.hexsession_id = hexsession_id:49c4ad412d13870d0e9c6855e2881fc032aab36fa3ab3598a7f1153e
+Ctrl.type = type:A
+Output = f3064d3f3ed09eefd34731a2c60c1a80
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d9b92844753a5eadc2ef7e84372a56bd096cc1d57a5c282811658d7df87564f202e800c774e75bbb53f47e835f207300ccd4661fd8a73b6ff87770c2c036346e99fadc5193171e1e732f3b6a017808a150ee02c4b6e70d87462e51825a94bda27fa9cbe18c7ef20d0b0201cb7526e0e9bac21b877e5064000290424387a9aa98da563ee2a5ef36af4b442a69eb631b88b8e3a0f073aa5dda589c4aa0e4e007e0d0036a231d52137d724fd60d41f42512214853e7acf8bde77e377842468f4216a15d0c8fe033c2b133bf651c82fda6d227e3c3f0cb7d0a9eba7c35eeefcf683ddde696fdeba5ec124e701f01bf5b0d59a667c75633dea07670b07baa20f313c3
+Ctrl.hexxcghash = hexxcghash:a510774a9b07b05e4e0eaf9409d77028a511a9565784b69ab3c03ffc
+Ctrl.hexsession_id = hexsession_id:49c4ad412d13870d0e9c6855e2881fc032aab36fa3ab3598a7f1153e
+Ctrl.type = type:B
+Output = 1f7f508d9c4cf1004a220f26e0e6c184
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d9b92844753a5eadc2ef7e84372a56bd096cc1d57a5c282811658d7df87564f202e800c774e75bbb53f47e835f207300ccd4661fd8a73b6ff87770c2c036346e99fadc5193171e1e732f3b6a017808a150ee02c4b6e70d87462e51825a94bda27fa9cbe18c7ef20d0b0201cb7526e0e9bac21b877e5064000290424387a9aa98da563ee2a5ef36af4b442a69eb631b88b8e3a0f073aa5dda589c4aa0e4e007e0d0036a231d52137d724fd60d41f42512214853e7acf8bde77e377842468f4216a15d0c8fe033c2b133bf651c82fda6d227e3c3f0cb7d0a9eba7c35eeefcf683ddde696fdeba5ec124e701f01bf5b0d59a667c75633dea07670b07baa20f313c3
+Ctrl.hexxcghash = hexxcghash:a510774a9b07b05e4e0eaf9409d77028a511a9565784b69ab3c03ffc
+Ctrl.hexsession_id = hexsession_id:49c4ad412d13870d0e9c6855e2881fc032aab36fa3ab3598a7f1153e
+Ctrl.type = type:C
+Output = 2ad48a77fa12fcb5d3d3e98d5bb87d76
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d9b92844753a5eadc2ef7e84372a56bd096cc1d57a5c282811658d7df87564f202e800c774e75bbb53f47e835f207300ccd4661fd8a73b6ff87770c2c036346e99fadc5193171e1e732f3b6a017808a150ee02c4b6e70d87462e51825a94bda27fa9cbe18c7ef20d0b0201cb7526e0e9bac21b877e5064000290424387a9aa98da563ee2a5ef36af4b442a69eb631b88b8e3a0f073aa5dda589c4aa0e4e007e0d0036a231d52137d724fd60d41f42512214853e7acf8bde77e377842468f4216a15d0c8fe033c2b133bf651c82fda6d227e3c3f0cb7d0a9eba7c35eeefcf683ddde696fdeba5ec124e701f01bf5b0d59a667c75633dea07670b07baa20f313c3
+Ctrl.hexxcghash = hexxcghash:a510774a9b07b05e4e0eaf9409d77028a511a9565784b69ab3c03ffc
+Ctrl.hexsession_id = hexsession_id:49c4ad412d13870d0e9c6855e2881fc032aab36fa3ab3598a7f1153e
+Ctrl.type = type:D
+Output = 0433db7fd40d9d0dc9df6e9eed8059e4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d9b92844753a5eadc2ef7e84372a56bd096cc1d57a5c282811658d7df87564f202e800c774e75bbb53f47e835f207300ccd4661fd8a73b6ff87770c2c036346e99fadc5193171e1e732f3b6a017808a150ee02c4b6e70d87462e51825a94bda27fa9cbe18c7ef20d0b0201cb7526e0e9bac21b877e5064000290424387a9aa98da563ee2a5ef36af4b442a69eb631b88b8e3a0f073aa5dda589c4aa0e4e007e0d0036a231d52137d724fd60d41f42512214853e7acf8bde77e377842468f4216a15d0c8fe033c2b133bf651c82fda6d227e3c3f0cb7d0a9eba7c35eeefcf683ddde696fdeba5ec124e701f01bf5b0d59a667c75633dea07670b07baa20f313c3
+Ctrl.hexxcghash = hexxcghash:a510774a9b07b05e4e0eaf9409d77028a511a9565784b69ab3c03ffc
+Ctrl.hexsession_id = hexsession_id:49c4ad412d13870d0e9c6855e2881fc032aab36fa3ab3598a7f1153e
+Ctrl.type = type:E
+Output = b07884f15910c6a083143ef9bda115d05c9e4c4057c1987c4f78a1b6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100d9b92844753a5eadc2ef7e84372a56bd096cc1d57a5c282811658d7df87564f202e800c774e75bbb53f47e835f207300ccd4661fd8a73b6ff87770c2c036346e99fadc5193171e1e732f3b6a017808a150ee02c4b6e70d87462e51825a94bda27fa9cbe18c7ef20d0b0201cb7526e0e9bac21b877e5064000290424387a9aa98da563ee2a5ef36af4b442a69eb631b88b8e3a0f073aa5dda589c4aa0e4e007e0d0036a231d52137d724fd60d41f42512214853e7acf8bde77e377842468f4216a15d0c8fe033c2b133bf651c82fda6d227e3c3f0cb7d0a9eba7c35eeefcf683ddde696fdeba5ec124e701f01bf5b0d59a667c75633dea07670b07baa20f313c3
+Ctrl.hexxcghash = hexxcghash:a510774a9b07b05e4e0eaf9409d77028a511a9565784b69ab3c03ffc
+Ctrl.hexsession_id = hexsession_id:49c4ad412d13870d0e9c6855e2881fc032aab36fa3ab3598a7f1153e
+Ctrl.type = type:F
+Output = f838da7b26311dbd529f742d901709229482cea9d7ac9f0c2cd14200
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010012641156f363edf89c1824532fcf379a846dd042ac173d6b9b75651d7aa911ebe75f5dd3b502a7d6ec331f095ed08505e86f51008242357b3d29d75db82619066c2ecb3ba78e8de8fceeb206bfa39ef3e6617d1f20e4a092ac6bd589904fe0ce4fac2d73c7396a54084bf71e929ae0c5c7e67e1795e73f9fab8c6ee90254f27dae6750e1f8769af5b235f9f7aef302f1fc4015f60af34656a1a8187159a4d6c4b3be40abe9ad5cb56a52f5407186b42fdce7a691b917550719fc7eef858030dcb2829a07a39ca279d9deb0487b893d4c7bbc41cde4eb366188f38bdb4289b8a95ae757864e963cbe4f5eced9aebf3b33ebb3c75b7e405816366e609e16f8bc56
+Ctrl.hexxcghash = hexxcghash:d041364fa73e42f0c9c49d2ad25a758c3f4691761d9caf6dfd2ad690
+Ctrl.hexsession_id = hexsession_id:1fea0e79508d3b2caf0e275c463626ad7d57c6cfc1da79a5bce2fa53
+Ctrl.type = type:A
+Output = d8c60bf582892d2cd03956774614b9f1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010012641156f363edf89c1824532fcf379a846dd042ac173d6b9b75651d7aa911ebe75f5dd3b502a7d6ec331f095ed08505e86f51008242357b3d29d75db82619066c2ecb3ba78e8de8fceeb206bfa39ef3e6617d1f20e4a092ac6bd589904fe0ce4fac2d73c7396a54084bf71e929ae0c5c7e67e1795e73f9fab8c6ee90254f27dae6750e1f8769af5b235f9f7aef302f1fc4015f60af34656a1a8187159a4d6c4b3be40abe9ad5cb56a52f5407186b42fdce7a691b917550719fc7eef858030dcb2829a07a39ca279d9deb0487b893d4c7bbc41cde4eb366188f38bdb4289b8a95ae757864e963cbe4f5eced9aebf3b33ebb3c75b7e405816366e609e16f8bc56
+Ctrl.hexxcghash = hexxcghash:d041364fa73e42f0c9c49d2ad25a758c3f4691761d9caf6dfd2ad690
+Ctrl.hexsession_id = hexsession_id:1fea0e79508d3b2caf0e275c463626ad7d57c6cfc1da79a5bce2fa53
+Ctrl.type = type:B
+Output = bac1bef6d6dd92de55bc174c9db77a54
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010012641156f363edf89c1824532fcf379a846dd042ac173d6b9b75651d7aa911ebe75f5dd3b502a7d6ec331f095ed08505e86f51008242357b3d29d75db82619066c2ecb3ba78e8de8fceeb206bfa39ef3e6617d1f20e4a092ac6bd589904fe0ce4fac2d73c7396a54084bf71e929ae0c5c7e67e1795e73f9fab8c6ee90254f27dae6750e1f8769af5b235f9f7aef302f1fc4015f60af34656a1a8187159a4d6c4b3be40abe9ad5cb56a52f5407186b42fdce7a691b917550719fc7eef858030dcb2829a07a39ca279d9deb0487b893d4c7bbc41cde4eb366188f38bdb4289b8a95ae757864e963cbe4f5eced9aebf3b33ebb3c75b7e405816366e609e16f8bc56
+Ctrl.hexxcghash = hexxcghash:d041364fa73e42f0c9c49d2ad25a758c3f4691761d9caf6dfd2ad690
+Ctrl.hexsession_id = hexsession_id:1fea0e79508d3b2caf0e275c463626ad7d57c6cfc1da79a5bce2fa53
+Ctrl.type = type:C
+Output = bdf96d88d7ac4f0daa62d29948a5c891
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010012641156f363edf89c1824532fcf379a846dd042ac173d6b9b75651d7aa911ebe75f5dd3b502a7d6ec331f095ed08505e86f51008242357b3d29d75db82619066c2ecb3ba78e8de8fceeb206bfa39ef3e6617d1f20e4a092ac6bd589904fe0ce4fac2d73c7396a54084bf71e929ae0c5c7e67e1795e73f9fab8c6ee90254f27dae6750e1f8769af5b235f9f7aef302f1fc4015f60af34656a1a8187159a4d6c4b3be40abe9ad5cb56a52f5407186b42fdce7a691b917550719fc7eef858030dcb2829a07a39ca279d9deb0487b893d4c7bbc41cde4eb366188f38bdb4289b8a95ae757864e963cbe4f5eced9aebf3b33ebb3c75b7e405816366e609e16f8bc56
+Ctrl.hexxcghash = hexxcghash:d041364fa73e42f0c9c49d2ad25a758c3f4691761d9caf6dfd2ad690
+Ctrl.hexsession_id = hexsession_id:1fea0e79508d3b2caf0e275c463626ad7d57c6cfc1da79a5bce2fa53
+Ctrl.type = type:D
+Output = ef0dbe568b4f3fbcb8b2665ed7ed0f8d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010012641156f363edf89c1824532fcf379a846dd042ac173d6b9b75651d7aa911ebe75f5dd3b502a7d6ec331f095ed08505e86f51008242357b3d29d75db82619066c2ecb3ba78e8de8fceeb206bfa39ef3e6617d1f20e4a092ac6bd589904fe0ce4fac2d73c7396a54084bf71e929ae0c5c7e67e1795e73f9fab8c6ee90254f27dae6750e1f8769af5b235f9f7aef302f1fc4015f60af34656a1a8187159a4d6c4b3be40abe9ad5cb56a52f5407186b42fdce7a691b917550719fc7eef858030dcb2829a07a39ca279d9deb0487b893d4c7bbc41cde4eb366188f38bdb4289b8a95ae757864e963cbe4f5eced9aebf3b33ebb3c75b7e405816366e609e16f8bc56
+Ctrl.hexxcghash = hexxcghash:d041364fa73e42f0c9c49d2ad25a758c3f4691761d9caf6dfd2ad690
+Ctrl.hexsession_id = hexsession_id:1fea0e79508d3b2caf0e275c463626ad7d57c6cfc1da79a5bce2fa53
+Ctrl.type = type:E
+Output = 315d50a1b29f9d556c983432b98bf437893c1a892cf69880353d9797
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010012641156f363edf89c1824532fcf379a846dd042ac173d6b9b75651d7aa911ebe75f5dd3b502a7d6ec331f095ed08505e86f51008242357b3d29d75db82619066c2ecb3ba78e8de8fceeb206bfa39ef3e6617d1f20e4a092ac6bd589904fe0ce4fac2d73c7396a54084bf71e929ae0c5c7e67e1795e73f9fab8c6ee90254f27dae6750e1f8769af5b235f9f7aef302f1fc4015f60af34656a1a8187159a4d6c4b3be40abe9ad5cb56a52f5407186b42fdce7a691b917550719fc7eef858030dcb2829a07a39ca279d9deb0487b893d4c7bbc41cde4eb366188f38bdb4289b8a95ae757864e963cbe4f5eced9aebf3b33ebb3c75b7e405816366e609e16f8bc56
+Ctrl.hexxcghash = hexxcghash:d041364fa73e42f0c9c49d2ad25a758c3f4691761d9caf6dfd2ad690
+Ctrl.hexsession_id = hexsession_id:1fea0e79508d3b2caf0e275c463626ad7d57c6cfc1da79a5bce2fa53
+Ctrl.type = type:F
+Output = 612e3ac6651f9c7d99c532da0820f079292d9b33d36b684198665f5e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100ecfd38c0707d59db0b361a449a22ddc63f055678e253ffbc8324a306ff06e31590fcdf6fc271665335f01af804619f4367489d7829ca756cd14d2147f2c6b2c0355847955ebe89ed2133dc74283732c4f821a7cadcaa9abf661fa9fcf81b0596c454fdac23d79267c5a832979217df61f9bb04c0fa69f5fdae2407da763210f0b7c1097463505b0da86ad71c20c1c57accaae353919cb2708aa378a5ff598d0a4b21b7527b2dbd271957fbbf04f5787076fb7f8afdfb75ddb5fa142ab427e026c87033fe2c6f22454ebace3f77646d0ee447cd1d339c9a21ce86c0b233c7fcbd6d1d165e14d57908777cde654b7fc3c3db7e62951b359ec71fe475356dc6a58b
+Ctrl.hexxcghash = hexxcghash:7af5885d52c4173000c45dd2b0fbeb21fa5722aa65eecb1bf977248a
+Ctrl.hexsession_id = hexsession_id:122e2d181cca7dcec6f30a8b027b4d29275d342af5fd82794b24560f
+Ctrl.type = type:A
+Output = e0d36ac1de6cc8514d25ff824bfaaa37
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100ecfd38c0707d59db0b361a449a22ddc63f055678e253ffbc8324a306ff06e31590fcdf6fc271665335f01af804619f4367489d7829ca756cd14d2147f2c6b2c0355847955ebe89ed2133dc74283732c4f821a7cadcaa9abf661fa9fcf81b0596c454fdac23d79267c5a832979217df61f9bb04c0fa69f5fdae2407da763210f0b7c1097463505b0da86ad71c20c1c57accaae353919cb2708aa378a5ff598d0a4b21b7527b2dbd271957fbbf04f5787076fb7f8afdfb75ddb5fa142ab427e026c87033fe2c6f22454ebace3f77646d0ee447cd1d339c9a21ce86c0b233c7fcbd6d1d165e14d57908777cde654b7fc3c3db7e62951b359ec71fe475356dc6a58b
+Ctrl.hexxcghash = hexxcghash:7af5885d52c4173000c45dd2b0fbeb21fa5722aa65eecb1bf977248a
+Ctrl.hexsession_id = hexsession_id:122e2d181cca7dcec6f30a8b027b4d29275d342af5fd82794b24560f
+Ctrl.type = type:B
+Output = 58c896b4d1a9507e7da2234a1a538d78
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100ecfd38c0707d59db0b361a449a22ddc63f055678e253ffbc8324a306ff06e31590fcdf6fc271665335f01af804619f4367489d7829ca756cd14d2147f2c6b2c0355847955ebe89ed2133dc74283732c4f821a7cadcaa9abf661fa9fcf81b0596c454fdac23d79267c5a832979217df61f9bb04c0fa69f5fdae2407da763210f0b7c1097463505b0da86ad71c20c1c57accaae353919cb2708aa378a5ff598d0a4b21b7527b2dbd271957fbbf04f5787076fb7f8afdfb75ddb5fa142ab427e026c87033fe2c6f22454ebace3f77646d0ee447cd1d339c9a21ce86c0b233c7fcbd6d1d165e14d57908777cde654b7fc3c3db7e62951b359ec71fe475356dc6a58b
+Ctrl.hexxcghash = hexxcghash:7af5885d52c4173000c45dd2b0fbeb21fa5722aa65eecb1bf977248a
+Ctrl.hexsession_id = hexsession_id:122e2d181cca7dcec6f30a8b027b4d29275d342af5fd82794b24560f
+Ctrl.type = type:C
+Output = 5966df5cb582234585b4c4312318f829
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100ecfd38c0707d59db0b361a449a22ddc63f055678e253ffbc8324a306ff06e31590fcdf6fc271665335f01af804619f4367489d7829ca756cd14d2147f2c6b2c0355847955ebe89ed2133dc74283732c4f821a7cadcaa9abf661fa9fcf81b0596c454fdac23d79267c5a832979217df61f9bb04c0fa69f5fdae2407da763210f0b7c1097463505b0da86ad71c20c1c57accaae353919cb2708aa378a5ff598d0a4b21b7527b2dbd271957fbbf04f5787076fb7f8afdfb75ddb5fa142ab427e026c87033fe2c6f22454ebace3f77646d0ee447cd1d339c9a21ce86c0b233c7fcbd6d1d165e14d57908777cde654b7fc3c3db7e62951b359ec71fe475356dc6a58b
+Ctrl.hexxcghash = hexxcghash:7af5885d52c4173000c45dd2b0fbeb21fa5722aa65eecb1bf977248a
+Ctrl.hexsession_id = hexsession_id:122e2d181cca7dcec6f30a8b027b4d29275d342af5fd82794b24560f
+Ctrl.type = type:D
+Output = 40d8bdab78c9dac2b2d14d1c8bd41405
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100ecfd38c0707d59db0b361a449a22ddc63f055678e253ffbc8324a306ff06e31590fcdf6fc271665335f01af804619f4367489d7829ca756cd14d2147f2c6b2c0355847955ebe89ed2133dc74283732c4f821a7cadcaa9abf661fa9fcf81b0596c454fdac23d79267c5a832979217df61f9bb04c0fa69f5fdae2407da763210f0b7c1097463505b0da86ad71c20c1c57accaae353919cb2708aa378a5ff598d0a4b21b7527b2dbd271957fbbf04f5787076fb7f8afdfb75ddb5fa142ab427e026c87033fe2c6f22454ebace3f77646d0ee447cd1d339c9a21ce86c0b233c7fcbd6d1d165e14d57908777cde654b7fc3c3db7e62951b359ec71fe475356dc6a58b
+Ctrl.hexxcghash = hexxcghash:7af5885d52c4173000c45dd2b0fbeb21fa5722aa65eecb1bf977248a
+Ctrl.hexsession_id = hexsession_id:122e2d181cca7dcec6f30a8b027b4d29275d342af5fd82794b24560f
+Ctrl.type = type:E
+Output = 1af4707570794ff6c718c817ccb9fca5edf22a3a8d493a861633fb7a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100ecfd38c0707d59db0b361a449a22ddc63f055678e253ffbc8324a306ff06e31590fcdf6fc271665335f01af804619f4367489d7829ca756cd14d2147f2c6b2c0355847955ebe89ed2133dc74283732c4f821a7cadcaa9abf661fa9fcf81b0596c454fdac23d79267c5a832979217df61f9bb04c0fa69f5fdae2407da763210f0b7c1097463505b0da86ad71c20c1c57accaae353919cb2708aa378a5ff598d0a4b21b7527b2dbd271957fbbf04f5787076fb7f8afdfb75ddb5fa142ab427e026c87033fe2c6f22454ebace3f77646d0ee447cd1d339c9a21ce86c0b233c7fcbd6d1d165e14d57908777cde654b7fc3c3db7e62951b359ec71fe475356dc6a58b
+Ctrl.hexxcghash = hexxcghash:7af5885d52c4173000c45dd2b0fbeb21fa5722aa65eecb1bf977248a
+Ctrl.hexsession_id = hexsession_id:122e2d181cca7dcec6f30a8b027b4d29275d342af5fd82794b24560f
+Ctrl.type = type:F
+Output = 4e6edd5d86f0a3b92595fb2d4f0f9b0f0ed1e850c84014224270bcbc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001002dde91723fa969756f5a597683fa0ef938423ffcf3b3d0262f9ba0d69d72ffc3afbf2ccb9bbc42332f97d3857b44575e30849fe19e77688e9102d9909585d9e53835eee4127aee038deaf8501c70cfd209ef755f84613365d9b2150009f9055300b74c593f8204b84c7faaac87c781e7bdda8c54bf0ec170e4dbf71cd15825c949ebaa934797333124e63db50efe0f33f5224687c097b22d52de36045659622dd214effab378b6bff298c84436831f85540a5eac0b68d51fa1abd18d19ce5452aefe729b7d384e038927ee8f0c2ddffd1cb6ea537a90d9b06bce3bd01fdf4370d62d985ab80417d1256d38ab3874297163a020052b42e73e8ef64950851e7da2
+Ctrl.hexxcghash = hexxcghash:590c8e3800ddfd382f0b3023c7a8753bd013e756855ffbca1dee0f01
+Ctrl.hexsession_id = hexsession_id:5e4528c7ff85f2ed7d632c4355e2524438ee83ef0e1695524921408d
+Ctrl.type = type:A
+Output = d30b7efda77a1008d78487fb1c9df511
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001002dde91723fa969756f5a597683fa0ef938423ffcf3b3d0262f9ba0d69d72ffc3afbf2ccb9bbc42332f97d3857b44575e30849fe19e77688e9102d9909585d9e53835eee4127aee038deaf8501c70cfd209ef755f84613365d9b2150009f9055300b74c593f8204b84c7faaac87c781e7bdda8c54bf0ec170e4dbf71cd15825c949ebaa934797333124e63db50efe0f33f5224687c097b22d52de36045659622dd214effab378b6bff298c84436831f85540a5eac0b68d51fa1abd18d19ce5452aefe729b7d384e038927ee8f0c2ddffd1cb6ea537a90d9b06bce3bd01fdf4370d62d985ab80417d1256d38ab3874297163a020052b42e73e8ef64950851e7da2
+Ctrl.hexxcghash = hexxcghash:590c8e3800ddfd382f0b3023c7a8753bd013e756855ffbca1dee0f01
+Ctrl.hexsession_id = hexsession_id:5e4528c7ff85f2ed7d632c4355e2524438ee83ef0e1695524921408d
+Ctrl.type = type:B
+Output = 498b3d9f14446a028d1aed8bc4748e34
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001002dde91723fa969756f5a597683fa0ef938423ffcf3b3d0262f9ba0d69d72ffc3afbf2ccb9bbc42332f97d3857b44575e30849fe19e77688e9102d9909585d9e53835eee4127aee038deaf8501c70cfd209ef755f84613365d9b2150009f9055300b74c593f8204b84c7faaac87c781e7bdda8c54bf0ec170e4dbf71cd15825c949ebaa934797333124e63db50efe0f33f5224687c097b22d52de36045659622dd214effab378b6bff298c84436831f85540a5eac0b68d51fa1abd18d19ce5452aefe729b7d384e038927ee8f0c2ddffd1cb6ea537a90d9b06bce3bd01fdf4370d62d985ab80417d1256d38ab3874297163a020052b42e73e8ef64950851e7da2
+Ctrl.hexxcghash = hexxcghash:590c8e3800ddfd382f0b3023c7a8753bd013e756855ffbca1dee0f01
+Ctrl.hexsession_id = hexsession_id:5e4528c7ff85f2ed7d632c4355e2524438ee83ef0e1695524921408d
+Ctrl.type = type:C
+Output = f4909273c39ef8819b353cde80f57cc9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001002dde91723fa969756f5a597683fa0ef938423ffcf3b3d0262f9ba0d69d72ffc3afbf2ccb9bbc42332f97d3857b44575e30849fe19e77688e9102d9909585d9e53835eee4127aee038deaf8501c70cfd209ef755f84613365d9b2150009f9055300b74c593f8204b84c7faaac87c781e7bdda8c54bf0ec170e4dbf71cd15825c949ebaa934797333124e63db50efe0f33f5224687c097b22d52de36045659622dd214effab378b6bff298c84436831f85540a5eac0b68d51fa1abd18d19ce5452aefe729b7d384e038927ee8f0c2ddffd1cb6ea537a90d9b06bce3bd01fdf4370d62d985ab80417d1256d38ab3874297163a020052b42e73e8ef64950851e7da2
+Ctrl.hexxcghash = hexxcghash:590c8e3800ddfd382f0b3023c7a8753bd013e756855ffbca1dee0f01
+Ctrl.hexsession_id = hexsession_id:5e4528c7ff85f2ed7d632c4355e2524438ee83ef0e1695524921408d
+Ctrl.type = type:D
+Output = b31337a6ecd02f4beb9bf4af12ea4e11
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001002dde91723fa969756f5a597683fa0ef938423ffcf3b3d0262f9ba0d69d72ffc3afbf2ccb9bbc42332f97d3857b44575e30849fe19e77688e9102d9909585d9e53835eee4127aee038deaf8501c70cfd209ef755f84613365d9b2150009f9055300b74c593f8204b84c7faaac87c781e7bdda8c54bf0ec170e4dbf71cd15825c949ebaa934797333124e63db50efe0f33f5224687c097b22d52de36045659622dd214effab378b6bff298c84436831f85540a5eac0b68d51fa1abd18d19ce5452aefe729b7d384e038927ee8f0c2ddffd1cb6ea537a90d9b06bce3bd01fdf4370d62d985ab80417d1256d38ab3874297163a020052b42e73e8ef64950851e7da2
+Ctrl.hexxcghash = hexxcghash:590c8e3800ddfd382f0b3023c7a8753bd013e756855ffbca1dee0f01
+Ctrl.hexsession_id = hexsession_id:5e4528c7ff85f2ed7d632c4355e2524438ee83ef0e1695524921408d
+Ctrl.type = type:E
+Output = 6f3da7bb4b64ad3e1171083a62eca5e755563e639594b848243760d8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001002dde91723fa969756f5a597683fa0ef938423ffcf3b3d0262f9ba0d69d72ffc3afbf2ccb9bbc42332f97d3857b44575e30849fe19e77688e9102d9909585d9e53835eee4127aee038deaf8501c70cfd209ef755f84613365d9b2150009f9055300b74c593f8204b84c7faaac87c781e7bdda8c54bf0ec170e4dbf71cd15825c949ebaa934797333124e63db50efe0f33f5224687c097b22d52de36045659622dd214effab378b6bff298c84436831f85540a5eac0b68d51fa1abd18d19ce5452aefe729b7d384e038927ee8f0c2ddffd1cb6ea537a90d9b06bce3bd01fdf4370d62d985ab80417d1256d38ab3874297163a020052b42e73e8ef64950851e7da2
+Ctrl.hexxcghash = hexxcghash:590c8e3800ddfd382f0b3023c7a8753bd013e756855ffbca1dee0f01
+Ctrl.hexsession_id = hexsession_id:5e4528c7ff85f2ed7d632c4355e2524438ee83ef0e1695524921408d
+Ctrl.type = type:F
+Output = e88506aa4a4ffa33675c4a296abf91e24450a496e56f8465e9a7525c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100be7e6428be4ff862e2b9fe69f055bbbeaa51b7666d51e1ad2e5fe12e2f7a171121147311780840e5d1345c6a24eb3e2d7bace8c88cddae9a062c7aacc7ae87d31ef7d4c52dc2e35f364266c9c34e1ff703a61a8fb39397344ac94e75a42fc956dcc887e50e67018d5a74c89c1a8555ebff4a4baf5b4916aea1dd95c126df390882143908821ecf68511e986bd379cf0871fe1a2679241b339f3317f76c65dc2b121e15a0b8891d9c0120b8a8a383a1dd5eb6fbd65d22a03b7987f843d454e4e1f09b9e2d37ef2be72b7f8accade301c772f74a582afab960dfa43a167275771f6a9be5a9f275cea55e9661a54b1c3210042f824fe783969fa60ad23b748a6b56
+Ctrl.hexxcghash = hexxcghash:97e793420ceda1730dac88f0d7dc52d8713a79a0b48ddb2af45dd143
+Ctrl.hexsession_id = hexsession_id:16dd0d6aca3757eec6e9dc3c4a5f590cb7911cd3cabc80815527b73c
+Ctrl.type = type:A
+Output = c5cbb653102d99457c33c88921b5dbe4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100be7e6428be4ff862e2b9fe69f055bbbeaa51b7666d51e1ad2e5fe12e2f7a171121147311780840e5d1345c6a24eb3e2d7bace8c88cddae9a062c7aacc7ae87d31ef7d4c52dc2e35f364266c9c34e1ff703a61a8fb39397344ac94e75a42fc956dcc887e50e67018d5a74c89c1a8555ebff4a4baf5b4916aea1dd95c126df390882143908821ecf68511e986bd379cf0871fe1a2679241b339f3317f76c65dc2b121e15a0b8891d9c0120b8a8a383a1dd5eb6fbd65d22a03b7987f843d454e4e1f09b9e2d37ef2be72b7f8accade301c772f74a582afab960dfa43a167275771f6a9be5a9f275cea55e9661a54b1c3210042f824fe783969fa60ad23b748a6b56
+Ctrl.hexxcghash = hexxcghash:97e793420ceda1730dac88f0d7dc52d8713a79a0b48ddb2af45dd143
+Ctrl.hexsession_id = hexsession_id:16dd0d6aca3757eec6e9dc3c4a5f590cb7911cd3cabc80815527b73c
+Ctrl.type = type:B
+Output = dd9b1c786c7f739832629f7666e4e21e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100be7e6428be4ff862e2b9fe69f055bbbeaa51b7666d51e1ad2e5fe12e2f7a171121147311780840e5d1345c6a24eb3e2d7bace8c88cddae9a062c7aacc7ae87d31ef7d4c52dc2e35f364266c9c34e1ff703a61a8fb39397344ac94e75a42fc956dcc887e50e67018d5a74c89c1a8555ebff4a4baf5b4916aea1dd95c126df390882143908821ecf68511e986bd379cf0871fe1a2679241b339f3317f76c65dc2b121e15a0b8891d9c0120b8a8a383a1dd5eb6fbd65d22a03b7987f843d454e4e1f09b9e2d37ef2be72b7f8accade301c772f74a582afab960dfa43a167275771f6a9be5a9f275cea55e9661a54b1c3210042f824fe783969fa60ad23b748a6b56
+Ctrl.hexxcghash = hexxcghash:97e793420ceda1730dac88f0d7dc52d8713a79a0b48ddb2af45dd143
+Ctrl.hexsession_id = hexsession_id:16dd0d6aca3757eec6e9dc3c4a5f590cb7911cd3cabc80815527b73c
+Ctrl.type = type:C
+Output = c33d08d706ffac1811f157526b08086f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100be7e6428be4ff862e2b9fe69f055bbbeaa51b7666d51e1ad2e5fe12e2f7a171121147311780840e5d1345c6a24eb3e2d7bace8c88cddae9a062c7aacc7ae87d31ef7d4c52dc2e35f364266c9c34e1ff703a61a8fb39397344ac94e75a42fc956dcc887e50e67018d5a74c89c1a8555ebff4a4baf5b4916aea1dd95c126df390882143908821ecf68511e986bd379cf0871fe1a2679241b339f3317f76c65dc2b121e15a0b8891d9c0120b8a8a383a1dd5eb6fbd65d22a03b7987f843d454e4e1f09b9e2d37ef2be72b7f8accade301c772f74a582afab960dfa43a167275771f6a9be5a9f275cea55e9661a54b1c3210042f824fe783969fa60ad23b748a6b56
+Ctrl.hexxcghash = hexxcghash:97e793420ceda1730dac88f0d7dc52d8713a79a0b48ddb2af45dd143
+Ctrl.hexsession_id = hexsession_id:16dd0d6aca3757eec6e9dc3c4a5f590cb7911cd3cabc80815527b73c
+Ctrl.type = type:D
+Output = 5750b617b71a239d99fc412796f6d986
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100be7e6428be4ff862e2b9fe69f055bbbeaa51b7666d51e1ad2e5fe12e2f7a171121147311780840e5d1345c6a24eb3e2d7bace8c88cddae9a062c7aacc7ae87d31ef7d4c52dc2e35f364266c9c34e1ff703a61a8fb39397344ac94e75a42fc956dcc887e50e67018d5a74c89c1a8555ebff4a4baf5b4916aea1dd95c126df390882143908821ecf68511e986bd379cf0871fe1a2679241b339f3317f76c65dc2b121e15a0b8891d9c0120b8a8a383a1dd5eb6fbd65d22a03b7987f843d454e4e1f09b9e2d37ef2be72b7f8accade301c772f74a582afab960dfa43a167275771f6a9be5a9f275cea55e9661a54b1c3210042f824fe783969fa60ad23b748a6b56
+Ctrl.hexxcghash = hexxcghash:97e793420ceda1730dac88f0d7dc52d8713a79a0b48ddb2af45dd143
+Ctrl.hexsession_id = hexsession_id:16dd0d6aca3757eec6e9dc3c4a5f590cb7911cd3cabc80815527b73c
+Ctrl.type = type:E
+Output = 4c2edee4688119e17723fede94d81c141cb2dd632dde5e223fcd12c2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100be7e6428be4ff862e2b9fe69f055bbbeaa51b7666d51e1ad2e5fe12e2f7a171121147311780840e5d1345c6a24eb3e2d7bace8c88cddae9a062c7aacc7ae87d31ef7d4c52dc2e35f364266c9c34e1ff703a61a8fb39397344ac94e75a42fc956dcc887e50e67018d5a74c89c1a8555ebff4a4baf5b4916aea1dd95c126df390882143908821ecf68511e986bd379cf0871fe1a2679241b339f3317f76c65dc2b121e15a0b8891d9c0120b8a8a383a1dd5eb6fbd65d22a03b7987f843d454e4e1f09b9e2d37ef2be72b7f8accade301c772f74a582afab960dfa43a167275771f6a9be5a9f275cea55e9661a54b1c3210042f824fe783969fa60ad23b748a6b56
+Ctrl.hexxcghash = hexxcghash:97e793420ceda1730dac88f0d7dc52d8713a79a0b48ddb2af45dd143
+Ctrl.hexsession_id = hexsession_id:16dd0d6aca3757eec6e9dc3c4a5f590cb7911cd3cabc80815527b73c
+Ctrl.type = type:F
+Output = b48103cd81397bed3bf618b2ef30a44ea806b0ad07aa098a8a33273e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100c810e36b6ae23b2dac234f36b4ddfe820762b53478eaea205cdab848c384f2c5fe262bc471971ff42a1ff8fdfff81cdc66371a75e9fda5d7d0bd656523603255c3e0970435f995948ec98d87942cefe2194e475a507e2928e0cfbba63962c75794aa53e8a385a5d1599d88dd1684a827914da576f9e06caaecc586bb98425621a5afaf86003cabe86fcd3964a390f47302bbbee8536f24024c5c31f031e80e6bcf2a3e24d4f0b6bd42250996f12a8a5c99b09a42a737e3cbf481e002c334fe3b7626419266e0036339b1592d3bf43245c449a65e43946e60112c1f8aff8963ff56e365c6f56c36b2208eadf591360554d2b116d3374341bd5779ebcdf7ba93de
+Ctrl.hexxcghash = hexxcghash:f8a7854ec21f252f679b924f0f3d34639fe976de146ddb8e93c4e4d9
+Ctrl.hexsession_id = hexsession_id:6bebea19564c0f65dd96446496f7d7c7198a5b08bcdacf29449808ba
+Ctrl.type = type:A
+Output = c8bc1d232edd620e0282af630d596a6c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100c810e36b6ae23b2dac234f36b4ddfe820762b53478eaea205cdab848c384f2c5fe262bc471971ff42a1ff8fdfff81cdc66371a75e9fda5d7d0bd656523603255c3e0970435f995948ec98d87942cefe2194e475a507e2928e0cfbba63962c75794aa53e8a385a5d1599d88dd1684a827914da576f9e06caaecc586bb98425621a5afaf86003cabe86fcd3964a390f47302bbbee8536f24024c5c31f031e80e6bcf2a3e24d4f0b6bd42250996f12a8a5c99b09a42a737e3cbf481e002c334fe3b7626419266e0036339b1592d3bf43245c449a65e43946e60112c1f8aff8963ff56e365c6f56c36b2208eadf591360554d2b116d3374341bd5779ebcdf7ba93de
+Ctrl.hexxcghash = hexxcghash:f8a7854ec21f252f679b924f0f3d34639fe976de146ddb8e93c4e4d9
+Ctrl.hexsession_id = hexsession_id:6bebea19564c0f65dd96446496f7d7c7198a5b08bcdacf29449808ba
+Ctrl.type = type:B
+Output = 6a90269aab1a3e3612eec97a45db11e1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100c810e36b6ae23b2dac234f36b4ddfe820762b53478eaea205cdab848c384f2c5fe262bc471971ff42a1ff8fdfff81cdc66371a75e9fda5d7d0bd656523603255c3e0970435f995948ec98d87942cefe2194e475a507e2928e0cfbba63962c75794aa53e8a385a5d1599d88dd1684a827914da576f9e06caaecc586bb98425621a5afaf86003cabe86fcd3964a390f47302bbbee8536f24024c5c31f031e80e6bcf2a3e24d4f0b6bd42250996f12a8a5c99b09a42a737e3cbf481e002c334fe3b7626419266e0036339b1592d3bf43245c449a65e43946e60112c1f8aff8963ff56e365c6f56c36b2208eadf591360554d2b116d3374341bd5779ebcdf7ba93de
+Ctrl.hexxcghash = hexxcghash:f8a7854ec21f252f679b924f0f3d34639fe976de146ddb8e93c4e4d9
+Ctrl.hexsession_id = hexsession_id:6bebea19564c0f65dd96446496f7d7c7198a5b08bcdacf29449808ba
+Ctrl.type = type:C
+Output = ebb8a6227e789d33fa072355cb2851ac
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100c810e36b6ae23b2dac234f36b4ddfe820762b53478eaea205cdab848c384f2c5fe262bc471971ff42a1ff8fdfff81cdc66371a75e9fda5d7d0bd656523603255c3e0970435f995948ec98d87942cefe2194e475a507e2928e0cfbba63962c75794aa53e8a385a5d1599d88dd1684a827914da576f9e06caaecc586bb98425621a5afaf86003cabe86fcd3964a390f47302bbbee8536f24024c5c31f031e80e6bcf2a3e24d4f0b6bd42250996f12a8a5c99b09a42a737e3cbf481e002c334fe3b7626419266e0036339b1592d3bf43245c449a65e43946e60112c1f8aff8963ff56e365c6f56c36b2208eadf591360554d2b116d3374341bd5779ebcdf7ba93de
+Ctrl.hexxcghash = hexxcghash:f8a7854ec21f252f679b924f0f3d34639fe976de146ddb8e93c4e4d9
+Ctrl.hexsession_id = hexsession_id:6bebea19564c0f65dd96446496f7d7c7198a5b08bcdacf29449808ba
+Ctrl.type = type:D
+Output = 9662ff73b11bd2978ffceb7545f6054e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100c810e36b6ae23b2dac234f36b4ddfe820762b53478eaea205cdab848c384f2c5fe262bc471971ff42a1ff8fdfff81cdc66371a75e9fda5d7d0bd656523603255c3e0970435f995948ec98d87942cefe2194e475a507e2928e0cfbba63962c75794aa53e8a385a5d1599d88dd1684a827914da576f9e06caaecc586bb98425621a5afaf86003cabe86fcd3964a390f47302bbbee8536f24024c5c31f031e80e6bcf2a3e24d4f0b6bd42250996f12a8a5c99b09a42a737e3cbf481e002c334fe3b7626419266e0036339b1592d3bf43245c449a65e43946e60112c1f8aff8963ff56e365c6f56c36b2208eadf591360554d2b116d3374341bd5779ebcdf7ba93de
+Ctrl.hexxcghash = hexxcghash:f8a7854ec21f252f679b924f0f3d34639fe976de146ddb8e93c4e4d9
+Ctrl.hexsession_id = hexsession_id:6bebea19564c0f65dd96446496f7d7c7198a5b08bcdacf29449808ba
+Ctrl.type = type:E
+Output = 9eb35f9a8a6155b81b8dda117f5d631cc4eddea4b4912147513bc4ec
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100c810e36b6ae23b2dac234f36b4ddfe820762b53478eaea205cdab848c384f2c5fe262bc471971ff42a1ff8fdfff81cdc66371a75e9fda5d7d0bd656523603255c3e0970435f995948ec98d87942cefe2194e475a507e2928e0cfbba63962c75794aa53e8a385a5d1599d88dd1684a827914da576f9e06caaecc586bb98425621a5afaf86003cabe86fcd3964a390f47302bbbee8536f24024c5c31f031e80e6bcf2a3e24d4f0b6bd42250996f12a8a5c99b09a42a737e3cbf481e002c334fe3b7626419266e0036339b1592d3bf43245c449a65e43946e60112c1f8aff8963ff56e365c6f56c36b2208eadf591360554d2b116d3374341bd5779ebcdf7ba93de
+Ctrl.hexxcghash = hexxcghash:f8a7854ec21f252f679b924f0f3d34639fe976de146ddb8e93c4e4d9
+Ctrl.hexsession_id = hexsession_id:6bebea19564c0f65dd96446496f7d7c7198a5b08bcdacf29449808ba
+Ctrl.type = type:F
+Output = 3e137e015973e21c37a8de81cc812683d506fc35699114b31c06797e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100940a3535b876a90210236f8571e20cb04d287ae7217b95d75c4170e8afea4d290bc41e736cdd1b470b02ce8b74ca4cdaa121bbb3b31df3f2c847455ef21b61e0c966bdb8cf58fb94819108c7feb9551c5dcacc37fec5fe4e9a59818e93ed08f3477632c62304fb2ba05f7fa8611970adb39379ab7159baa3731fb1fceba201a1858635b92d938b195a44612ffddac3f2b5db59b47c9f90b66e76b3e901887b27312e1043b000b5ff21d4fff4b5fc06203403387fe28837c4d367dbe2c73e1ec5c4e867cc99dca2bf8171aad1498b37bf0d17e5fd64e411386df72667d824e4514530cf6021ca8880154212884f5fdb44a0c8745a4049971de370eb31c959dac4
+Ctrl.hexxcghash = hexxcghash:4688aa9bceb36ddab933675e6963357b2bd0daa5e1984a06fc7f3ff3
+Ctrl.hexsession_id = hexsession_id:fb72bca26e61577066d7c5093ac9281fcf06ae3250b43228b067b86e
+Ctrl.type = type:A
+Output = cc22a730c15abf9628f749fac9d3f935
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100940a3535b876a90210236f8571e20cb04d287ae7217b95d75c4170e8afea4d290bc41e736cdd1b470b02ce8b74ca4cdaa121bbb3b31df3f2c847455ef21b61e0c966bdb8cf58fb94819108c7feb9551c5dcacc37fec5fe4e9a59818e93ed08f3477632c62304fb2ba05f7fa8611970adb39379ab7159baa3731fb1fceba201a1858635b92d938b195a44612ffddac3f2b5db59b47c9f90b66e76b3e901887b27312e1043b000b5ff21d4fff4b5fc06203403387fe28837c4d367dbe2c73e1ec5c4e867cc99dca2bf8171aad1498b37bf0d17e5fd64e411386df72667d824e4514530cf6021ca8880154212884f5fdb44a0c8745a4049971de370eb31c959dac4
+Ctrl.hexxcghash = hexxcghash:4688aa9bceb36ddab933675e6963357b2bd0daa5e1984a06fc7f3ff3
+Ctrl.hexsession_id = hexsession_id:fb72bca26e61577066d7c5093ac9281fcf06ae3250b43228b067b86e
+Ctrl.type = type:B
+Output = 188c477061a597384b1d1e417dc04f7d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100940a3535b876a90210236f8571e20cb04d287ae7217b95d75c4170e8afea4d290bc41e736cdd1b470b02ce8b74ca4cdaa121bbb3b31df3f2c847455ef21b61e0c966bdb8cf58fb94819108c7feb9551c5dcacc37fec5fe4e9a59818e93ed08f3477632c62304fb2ba05f7fa8611970adb39379ab7159baa3731fb1fceba201a1858635b92d938b195a44612ffddac3f2b5db59b47c9f90b66e76b3e901887b27312e1043b000b5ff21d4fff4b5fc06203403387fe28837c4d367dbe2c73e1ec5c4e867cc99dca2bf8171aad1498b37bf0d17e5fd64e411386df72667d824e4514530cf6021ca8880154212884f5fdb44a0c8745a4049971de370eb31c959dac4
+Ctrl.hexxcghash = hexxcghash:4688aa9bceb36ddab933675e6963357b2bd0daa5e1984a06fc7f3ff3
+Ctrl.hexsession_id = hexsession_id:fb72bca26e61577066d7c5093ac9281fcf06ae3250b43228b067b86e
+Ctrl.type = type:C
+Output = b309760dd9f0d65c6edcdee3a3457c33
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100940a3535b876a90210236f8571e20cb04d287ae7217b95d75c4170e8afea4d290bc41e736cdd1b470b02ce8b74ca4cdaa121bbb3b31df3f2c847455ef21b61e0c966bdb8cf58fb94819108c7feb9551c5dcacc37fec5fe4e9a59818e93ed08f3477632c62304fb2ba05f7fa8611970adb39379ab7159baa3731fb1fceba201a1858635b92d938b195a44612ffddac3f2b5db59b47c9f90b66e76b3e901887b27312e1043b000b5ff21d4fff4b5fc06203403387fe28837c4d367dbe2c73e1ec5c4e867cc99dca2bf8171aad1498b37bf0d17e5fd64e411386df72667d824e4514530cf6021ca8880154212884f5fdb44a0c8745a4049971de370eb31c959dac4
+Ctrl.hexxcghash = hexxcghash:4688aa9bceb36ddab933675e6963357b2bd0daa5e1984a06fc7f3ff3
+Ctrl.hexsession_id = hexsession_id:fb72bca26e61577066d7c5093ac9281fcf06ae3250b43228b067b86e
+Ctrl.type = type:D
+Output = 1b8674f603a78f16fb979d6db70f6795
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100940a3535b876a90210236f8571e20cb04d287ae7217b95d75c4170e8afea4d290bc41e736cdd1b470b02ce8b74ca4cdaa121bbb3b31df3f2c847455ef21b61e0c966bdb8cf58fb94819108c7feb9551c5dcacc37fec5fe4e9a59818e93ed08f3477632c62304fb2ba05f7fa8611970adb39379ab7159baa3731fb1fceba201a1858635b92d938b195a44612ffddac3f2b5db59b47c9f90b66e76b3e901887b27312e1043b000b5ff21d4fff4b5fc06203403387fe28837c4d367dbe2c73e1ec5c4e867cc99dca2bf8171aad1498b37bf0d17e5fd64e411386df72667d824e4514530cf6021ca8880154212884f5fdb44a0c8745a4049971de370eb31c959dac4
+Ctrl.hexxcghash = hexxcghash:4688aa9bceb36ddab933675e6963357b2bd0daa5e1984a06fc7f3ff3
+Ctrl.hexsession_id = hexsession_id:fb72bca26e61577066d7c5093ac9281fcf06ae3250b43228b067b86e
+Ctrl.type = type:E
+Output = d881ac0cf62ecff2eb7d3c8284cfd4b95e003c435f6a3121ab0c65b0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100940a3535b876a90210236f8571e20cb04d287ae7217b95d75c4170e8afea4d290bc41e736cdd1b470b02ce8b74ca4cdaa121bbb3b31df3f2c847455ef21b61e0c966bdb8cf58fb94819108c7feb9551c5dcacc37fec5fe4e9a59818e93ed08f3477632c62304fb2ba05f7fa8611970adb39379ab7159baa3731fb1fceba201a1858635b92d938b195a44612ffddac3f2b5db59b47c9f90b66e76b3e901887b27312e1043b000b5ff21d4fff4b5fc06203403387fe28837c4d367dbe2c73e1ec5c4e867cc99dca2bf8171aad1498b37bf0d17e5fd64e411386df72667d824e4514530cf6021ca8880154212884f5fdb44a0c8745a4049971de370eb31c959dac4
+Ctrl.hexxcghash = hexxcghash:4688aa9bceb36ddab933675e6963357b2bd0daa5e1984a06fc7f3ff3
+Ctrl.hexsession_id = hexsession_id:fb72bca26e61577066d7c5093ac9281fcf06ae3250b43228b067b86e
+Ctrl.type = type:F
+Output = 9a7560e7976c7fb0153fc94e51a7dead3b7f8954d1efa7ed6be77858
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001004b9f55f17de634edb39218b30f224ae8ec64edd6e0c49dd00a52ac11e0a4089ccff931838ce5c02f449ffe33c14fd0a9f11da7d783787a03defc7931ce638a31aa11ddc4351e54480bea637857cae6cf30e03d392737fe2b3f234115903ab43f97d4fdb49fb987650610d9a0ca51b70839d0fc9980de371acc78ac6eaf5f5ac5008eec0f5aedd0f95496f27d2858477fc54d3113fe7884047596d5705d1dd974875872fc7c9111bdc5da73b317331c543f60687fc1ecb3f3853787a64fd94335b570a99fe2544acde49f99b96ef473dbcb16315b9e7ee8c3a20feb36636c1fa39567c2efd2b7827e38ab31607f6a3cff1fc7edf8612380e4af93c620bcd6ac36
+Ctrl.hexxcghash = hexxcghash:0d18d069225d0db81b8bb979635dc9e89999a74ad6b02022189150fd
+Ctrl.hexsession_id = hexsession_id:1f42aa7a240d8b412fc26bd18f85ebefe59641d19a1e5e3681560a2c
+Ctrl.type = type:A
+Output = b842e2900a8c1f7d7c3fa465d46142fa
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001004b9f55f17de634edb39218b30f224ae8ec64edd6e0c49dd00a52ac11e0a4089ccff931838ce5c02f449ffe33c14fd0a9f11da7d783787a03defc7931ce638a31aa11ddc4351e54480bea637857cae6cf30e03d392737fe2b3f234115903ab43f97d4fdb49fb987650610d9a0ca51b70839d0fc9980de371acc78ac6eaf5f5ac5008eec0f5aedd0f95496f27d2858477fc54d3113fe7884047596d5705d1dd974875872fc7c9111bdc5da73b317331c543f60687fc1ecb3f3853787a64fd94335b570a99fe2544acde49f99b96ef473dbcb16315b9e7ee8c3a20feb36636c1fa39567c2efd2b7827e38ab31607f6a3cff1fc7edf8612380e4af93c620bcd6ac36
+Ctrl.hexxcghash = hexxcghash:0d18d069225d0db81b8bb979635dc9e89999a74ad6b02022189150fd
+Ctrl.hexsession_id = hexsession_id:1f42aa7a240d8b412fc26bd18f85ebefe59641d19a1e5e3681560a2c
+Ctrl.type = type:B
+Output = 5e96f771c176fafd18d4aa0bc07dc5d5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001004b9f55f17de634edb39218b30f224ae8ec64edd6e0c49dd00a52ac11e0a4089ccff931838ce5c02f449ffe33c14fd0a9f11da7d783787a03defc7931ce638a31aa11ddc4351e54480bea637857cae6cf30e03d392737fe2b3f234115903ab43f97d4fdb49fb987650610d9a0ca51b70839d0fc9980de371acc78ac6eaf5f5ac5008eec0f5aedd0f95496f27d2858477fc54d3113fe7884047596d5705d1dd974875872fc7c9111bdc5da73b317331c543f60687fc1ecb3f3853787a64fd94335b570a99fe2544acde49f99b96ef473dbcb16315b9e7ee8c3a20feb36636c1fa39567c2efd2b7827e38ab31607f6a3cff1fc7edf8612380e4af93c620bcd6ac36
+Ctrl.hexxcghash = hexxcghash:0d18d069225d0db81b8bb979635dc9e89999a74ad6b02022189150fd
+Ctrl.hexsession_id = hexsession_id:1f42aa7a240d8b412fc26bd18f85ebefe59641d19a1e5e3681560a2c
+Ctrl.type = type:C
+Output = fe5fca0a03e6f8ac95ba4e882c64fb8c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001004b9f55f17de634edb39218b30f224ae8ec64edd6e0c49dd00a52ac11e0a4089ccff931838ce5c02f449ffe33c14fd0a9f11da7d783787a03defc7931ce638a31aa11ddc4351e54480bea637857cae6cf30e03d392737fe2b3f234115903ab43f97d4fdb49fb987650610d9a0ca51b70839d0fc9980de371acc78ac6eaf5f5ac5008eec0f5aedd0f95496f27d2858477fc54d3113fe7884047596d5705d1dd974875872fc7c9111bdc5da73b317331c543f60687fc1ecb3f3853787a64fd94335b570a99fe2544acde49f99b96ef473dbcb16315b9e7ee8c3a20feb36636c1fa39567c2efd2b7827e38ab31607f6a3cff1fc7edf8612380e4af93c620bcd6ac36
+Ctrl.hexxcghash = hexxcghash:0d18d069225d0db81b8bb979635dc9e89999a74ad6b02022189150fd
+Ctrl.hexsession_id = hexsession_id:1f42aa7a240d8b412fc26bd18f85ebefe59641d19a1e5e3681560a2c
+Ctrl.type = type:D
+Output = b952b4e6f2010ebdac7ee10adb90f9ef
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001004b9f55f17de634edb39218b30f224ae8ec64edd6e0c49dd00a52ac11e0a4089ccff931838ce5c02f449ffe33c14fd0a9f11da7d783787a03defc7931ce638a31aa11ddc4351e54480bea637857cae6cf30e03d392737fe2b3f234115903ab43f97d4fdb49fb987650610d9a0ca51b70839d0fc9980de371acc78ac6eaf5f5ac5008eec0f5aedd0f95496f27d2858477fc54d3113fe7884047596d5705d1dd974875872fc7c9111bdc5da73b317331c543f60687fc1ecb3f3853787a64fd94335b570a99fe2544acde49f99b96ef473dbcb16315b9e7ee8c3a20feb36636c1fa39567c2efd2b7827e38ab31607f6a3cff1fc7edf8612380e4af93c620bcd6ac36
+Ctrl.hexxcghash = hexxcghash:0d18d069225d0db81b8bb979635dc9e89999a74ad6b02022189150fd
+Ctrl.hexsession_id = hexsession_id:1f42aa7a240d8b412fc26bd18f85ebefe59641d19a1e5e3681560a2c
+Ctrl.type = type:E
+Output = 819db930507c1f8e1617dc74e78de9f4abb02b7089d764cb20d14c56
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:000001004b9f55f17de634edb39218b30f224ae8ec64edd6e0c49dd00a52ac11e0a4089ccff931838ce5c02f449ffe33c14fd0a9f11da7d783787a03defc7931ce638a31aa11ddc4351e54480bea637857cae6cf30e03d392737fe2b3f234115903ab43f97d4fdb49fb987650610d9a0ca51b70839d0fc9980de371acc78ac6eaf5f5ac5008eec0f5aedd0f95496f27d2858477fc54d3113fe7884047596d5705d1dd974875872fc7c9111bdc5da73b317331c543f60687fc1ecb3f3853787a64fd94335b570a99fe2544acde49f99b96ef473dbcb16315b9e7ee8c3a20feb36636c1fa39567c2efd2b7827e38ab31607f6a3cff1fc7edf8612380e4af93c620bcd6ac36
+Ctrl.hexxcghash = hexxcghash:0d18d069225d0db81b8bb979635dc9e89999a74ad6b02022189150fd
+Ctrl.hexsession_id = hexsession_id:1f42aa7a240d8b412fc26bd18f85ebefe59641d19a1e5e3681560a2c
+Ctrl.type = type:F
+Output = 79be1ec6ce722e98bca50a25bbca581318b6227c9fd346d67602958f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100a0216e73007c1b53dba18acb5592ea68ab7719d9fd2f24af3e2968024933a5e68fcb1aa8b187f42972815f12d5f995c15d2d3eab84cfb869db413dcb328d045df23646e65179a53e3cbe1babcd6e6a5e300e33be1f5ed5d7eb1661a0ae6d8e6dd8f156eed726b30df6b9eee7e9457189b140de7671a1c7790938617e1bc95b8ee8bb9229f98be158a569bcb799869c445484d30d6019db44d97dcfd9b47f5a36418e3d5ec88037c172104d44ac6e770cbec415fbfce8ac9257074ca5fe003a4836001c8331f1845c1069d0610a62378e1c32ae512ffa22032f28245ee7ae957348a484bef3d295463b293975d787d45c480903f3eb35dcfd140161606f270177
+Ctrl.hexxcghash = hexxcghash:0f85b7ee92fe1a95c0aa0103f10092f04ba613a37e118f8fbb43e308
+Ctrl.hexsession_id = hexsession_id:25d9a92c96b98ecc31e6aca945899e93607848caf2c332efc03f9a0c
+Ctrl.type = type:A
+Output = 4d40be7041ac4c74d56d53855fead94f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100a0216e73007c1b53dba18acb5592ea68ab7719d9fd2f24af3e2968024933a5e68fcb1aa8b187f42972815f12d5f995c15d2d3eab84cfb869db413dcb328d045df23646e65179a53e3cbe1babcd6e6a5e300e33be1f5ed5d7eb1661a0ae6d8e6dd8f156eed726b30df6b9eee7e9457189b140de7671a1c7790938617e1bc95b8ee8bb9229f98be158a569bcb799869c445484d30d6019db44d97dcfd9b47f5a36418e3d5ec88037c172104d44ac6e770cbec415fbfce8ac9257074ca5fe003a4836001c8331f1845c1069d0610a62378e1c32ae512ffa22032f28245ee7ae957348a484bef3d295463b293975d787d45c480903f3eb35dcfd140161606f270177
+Ctrl.hexxcghash = hexxcghash:0f85b7ee92fe1a95c0aa0103f10092f04ba613a37e118f8fbb43e308
+Ctrl.hexsession_id = hexsession_id:25d9a92c96b98ecc31e6aca945899e93607848caf2c332efc03f9a0c
+Ctrl.type = type:B
+Output = 501781a04c919226a9e2dd6d7a880568
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100a0216e73007c1b53dba18acb5592ea68ab7719d9fd2f24af3e2968024933a5e68fcb1aa8b187f42972815f12d5f995c15d2d3eab84cfb869db413dcb328d045df23646e65179a53e3cbe1babcd6e6a5e300e33be1f5ed5d7eb1661a0ae6d8e6dd8f156eed726b30df6b9eee7e9457189b140de7671a1c7790938617e1bc95b8ee8bb9229f98be158a569bcb799869c445484d30d6019db44d97dcfd9b47f5a36418e3d5ec88037c172104d44ac6e770cbec415fbfce8ac9257074ca5fe003a4836001c8331f1845c1069d0610a62378e1c32ae512ffa22032f28245ee7ae957348a484bef3d295463b293975d787d45c480903f3eb35dcfd140161606f270177
+Ctrl.hexxcghash = hexxcghash:0f85b7ee92fe1a95c0aa0103f10092f04ba613a37e118f8fbb43e308
+Ctrl.hexsession_id = hexsession_id:25d9a92c96b98ecc31e6aca945899e93607848caf2c332efc03f9a0c
+Ctrl.type = type:C
+Output = fe183f0e31d4bf9ebc9364e19e422385
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100a0216e73007c1b53dba18acb5592ea68ab7719d9fd2f24af3e2968024933a5e68fcb1aa8b187f42972815f12d5f995c15d2d3eab84cfb869db413dcb328d045df23646e65179a53e3cbe1babcd6e6a5e300e33be1f5ed5d7eb1661a0ae6d8e6dd8f156eed726b30df6b9eee7e9457189b140de7671a1c7790938617e1bc95b8ee8bb9229f98be158a569bcb799869c445484d30d6019db44d97dcfd9b47f5a36418e3d5ec88037c172104d44ac6e770cbec415fbfce8ac9257074ca5fe003a4836001c8331f1845c1069d0610a62378e1c32ae512ffa22032f28245ee7ae957348a484bef3d295463b293975d787d45c480903f3eb35dcfd140161606f270177
+Ctrl.hexxcghash = hexxcghash:0f85b7ee92fe1a95c0aa0103f10092f04ba613a37e118f8fbb43e308
+Ctrl.hexsession_id = hexsession_id:25d9a92c96b98ecc31e6aca945899e93607848caf2c332efc03f9a0c
+Ctrl.type = type:D
+Output = f12c0da703e5bedb2921a0e1795eb62f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100a0216e73007c1b53dba18acb5592ea68ab7719d9fd2f24af3e2968024933a5e68fcb1aa8b187f42972815f12d5f995c15d2d3eab84cfb869db413dcb328d045df23646e65179a53e3cbe1babcd6e6a5e300e33be1f5ed5d7eb1661a0ae6d8e6dd8f156eed726b30df6b9eee7e9457189b140de7671a1c7790938617e1bc95b8ee8bb9229f98be158a569bcb799869c445484d30d6019db44d97dcfd9b47f5a36418e3d5ec88037c172104d44ac6e770cbec415fbfce8ac9257074ca5fe003a4836001c8331f1845c1069d0610a62378e1c32ae512ffa22032f28245ee7ae957348a484bef3d295463b293975d787d45c480903f3eb35dcfd140161606f270177
+Ctrl.hexxcghash = hexxcghash:0f85b7ee92fe1a95c0aa0103f10092f04ba613a37e118f8fbb43e308
+Ctrl.hexsession_id = hexsession_id:25d9a92c96b98ecc31e6aca945899e93607848caf2c332efc03f9a0c
+Ctrl.type = type:E
+Output = 1d34b1ae23af48c25db971fe0f95c2fdb4e269ca435b90e0e22ee720
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexkey = hexkey:0000010100a0216e73007c1b53dba18acb5592ea68ab7719d9fd2f24af3e2968024933a5e68fcb1aa8b187f42972815f12d5f995c15d2d3eab84cfb869db413dcb328d045df23646e65179a53e3cbe1babcd6e6a5e300e33be1f5ed5d7eb1661a0ae6d8e6dd8f156eed726b30df6b9eee7e9457189b140de7671a1c7790938617e1bc95b8ee8bb9229f98be158a569bcb799869c445484d30d6019db44d97dcfd9b47f5a36418e3d5ec88037c172104d44ac6e770cbec415fbfce8ac9257074ca5fe003a4836001c8331f1845c1069d0610a62378e1c32ae512ffa22032f28245ee7ae957348a484bef3d295463b293975d787d45c480903f3eb35dcfd140161606f270177
+Ctrl.hexxcghash = hexxcghash:0f85b7ee92fe1a95c0aa0103f10092f04ba613a37e118f8fbb43e308
+Ctrl.hexsession_id = hexsession_id:25d9a92c96b98ecc31e6aca945899e93607848caf2c332efc03f9a0c
+Ctrl.type = type:F
+Output = b77dce4e2211c8e2b4fba841ba45d7f136323999ed9a4d306fa411a8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100875c551cef526a4a8be1a7df27e9ed354bac9afb71f53dbae905679d14f9faf2469c53457cf80a366be278965ba6255276ca2d9f4a97d271f71e50d8a9ec46253a6a906ac2c5e4f48b27a63ce08d80390a492aa43bad9d882ccac23dac88bcada4b4d426a362083dab6569c54c224dd2d87643aa227693e141ad1630ce13144e
+Ctrl.hexxcghash = hexxcghash:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.hexsession_id = hexsession_id:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.type = type:A
+Output = 41ff2ead1683f1e6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100875c551cef526a4a8be1a7df27e9ed354bac9afb71f53dbae905679d14f9faf2469c53457cf80a366be278965ba6255276ca2d9f4a97d271f71e50d8a9ec46253a6a906ac2c5e4f48b27a63ce08d80390a492aa43bad9d882ccac23dac88bcada4b4d426a362083dab6569c54c224dd2d87643aa227693e141ad1630ce13144e
+Ctrl.hexxcghash = hexxcghash:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.hexsession_id = hexsession_id:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.type = type:B
+Output = e619ecfd9edb50cd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100875c551cef526a4a8be1a7df27e9ed354bac9afb71f53dbae905679d14f9faf2469c53457cf80a366be278965ba6255276ca2d9f4a97d271f71e50d8a9ec46253a6a906ac2c5e4f48b27a63ce08d80390a492aa43bad9d882ccac23dac88bcada4b4d426a362083dab6569c54c224dd2d87643aa227693e141ad1630ce13144e
+Ctrl.hexxcghash = hexxcghash:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.hexsession_id = hexsession_id:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.type = type:C
+Output = 4a6314d2f7511bf88fad39fb6892f3f218cafd530e72fe43
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100875c551cef526a4a8be1a7df27e9ed354bac9afb71f53dbae905679d14f9faf2469c53457cf80a366be278965ba6255276ca2d9f4a97d271f71e50d8a9ec46253a6a906ac2c5e4f48b27a63ce08d80390a492aa43bad9d882ccac23dac88bcada4b4d426a362083dab6569c54c224dd2d87643aa227693e141ad1630ce13144e
+Ctrl.hexxcghash = hexxcghash:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.hexsession_id = hexsession_id:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.type = type:D
+Output = 084c15fb7f99c65ff134eeb407cee5d540c341dea45a42a5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100875c551cef526a4a8be1a7df27e9ed354bac9afb71f53dbae905679d14f9faf2469c53457cf80a366be278965ba6255276ca2d9f4a97d271f71e50d8a9ec46253a6a906ac2c5e4f48b27a63ce08d80390a492aa43bad9d882ccac23dac88bcada4b4d426a362083dab6569c54c224dd2d87643aa227693e141ad1630ce13144e
+Ctrl.hexxcghash = hexxcghash:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.hexsession_id = hexsession_id:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.type = type:E
+Output = 41ec5a94fecce7707ea156a6ad29239a891621adacbedb8be70675008d6f9274
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100875c551cef526a4a8be1a7df27e9ed354bac9afb71f53dbae905679d14f9faf2469c53457cf80a366be278965ba6255276ca2d9f4a97d271f71e50d8a9ec46253a6a906ac2c5e4f48b27a63ce08d80390a492aa43bad9d882ccac23dac88bcada4b4d426a362083dab6569c54c224dd2d87643aa227693e141ad1630ce13144e
+Ctrl.hexxcghash = hexxcghash:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.hexsession_id = hexsession_id:0e683fc8a9ed7c2ff02def23b2745ebc99b267daa86a4aa7697239088253f642
+Ctrl.type = type:F
+Output = 47d3c20aba60981e47b30533623613ff1cacbcf1642fb4ad86ee712f2aed9af8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000800faa172b8c287e372bb236ad34c733695c13d77f882adc0f47e5a7f6a3de07efb101207aa5d665b619826f756591f65310bbd2c92c9384e6c6a67b42dec382fdb24c591d79ff5e47737b0f5b8479694c3adc19401704912bbfec2704d4d5bebbfc1a7fc796e277634e40851851a187ec2d37ed3f351c4596a5a0892916b4c55f
+Ctrl.hexxcghash = hexxcghash:a347f5f1e191c35f212c9324d5867efdf83026be62c2b16ae006edb3378d4006
+Ctrl.hexsession_id = hexsession_id:90befcef3ff8f920674a9fab94198cf3fd9dca24a21d3c9dba394daafbc621ed
+Ctrl.type = type:A
+Output = 99bae6531508705f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000800faa172b8c287e372bb236ad34c733695c13d77f882adc0f47e5a7f6a3de07efb101207aa5d665b619826f756591f65310bbd2c92c9384e6c6a67b42dec382fdb24c591d79ff5e47737b0f5b8479694c3adc19401704912bbfec2704d4d5bebbfc1a7fc796e277634e40851851a187ec2d37ed3f351c4596a5a0892916b4c55f
+Ctrl.hexxcghash = hexxcghash:a347f5f1e191c35f212c9324d5867efdf83026be62c2b16ae006edb3378d4006
+Ctrl.hexsession_id = hexsession_id:90befcef3ff8f920674a9fab94198cf3fd9dca24a21d3c9dba394daafbc621ed
+Ctrl.type = type:B
+Output = f25786f02f199737
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000800faa172b8c287e372bb236ad34c733695c13d77f882adc0f47e5a7f6a3de07efb101207aa5d665b619826f756591f65310bbd2c92c9384e6c6a67b42dec382fdb24c591d79ff5e47737b0f5b8479694c3adc19401704912bbfec2704d4d5bebbfc1a7fc796e277634e40851851a187ec2d37ed3f351c4596a5a0892916b4c55f
+Ctrl.hexxcghash = hexxcghash:a347f5f1e191c35f212c9324d5867efdf83026be62c2b16ae006edb3378d4006
+Ctrl.hexsession_id = hexsession_id:90befcef3ff8f920674a9fab94198cf3fd9dca24a21d3c9dba394daafbc621ed
+Ctrl.type = type:C
+Output = 97621bf882266f905da78cf193fc31f642acbb60957c41b7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000800faa172b8c287e372bb236ad34c733695c13d77f882adc0f47e5a7f6a3de07efb101207aa5d665b619826f756591f65310bbd2c92c9384e6c6a67b42dec382fdb24c591d79ff5e47737b0f5b8479694c3adc19401704912bbfec2704d4d5bebbfc1a7fc796e277634e40851851a187ec2d37ed3f351c4596a5a0892916b4c55f
+Ctrl.hexxcghash = hexxcghash:a347f5f1e191c35f212c9324d5867efdf83026be62c2b16ae006edb3378d4006
+Ctrl.hexsession_id = hexsession_id:90befcef3ff8f920674a9fab94198cf3fd9dca24a21d3c9dba394daafbc621ed
+Ctrl.type = type:D
+Output = ad98a86a2386280912efea50f790e800a7758f7dade5d77e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000800faa172b8c287e372bb236ad34c733695c13d77f882adc0f47e5a7f6a3de07efb101207aa5d665b619826f756591f65310bbd2c92c9384e6c6a67b42dec382fdb24c591d79ff5e47737b0f5b8479694c3adc19401704912bbfec2704d4d5bebbfc1a7fc796e277634e40851851a187ec2d37ed3f351c4596a5a0892916b4c55f
+Ctrl.hexxcghash = hexxcghash:a347f5f1e191c35f212c9324d5867efdf83026be62c2b16ae006edb3378d4006
+Ctrl.hexsession_id = hexsession_id:90befcef3ff8f920674a9fab94198cf3fd9dca24a21d3c9dba394daafbc621ed
+Ctrl.type = type:E
+Output = f92d052d3cdf34dfc69bc60a489c3a3553f4356596c191931d08fa20551273b3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000800faa172b8c287e372bb236ad34c733695c13d77f882adc0f47e5a7f6a3de07efb101207aa5d665b619826f756591f65310bbd2c92c9384e6c6a67b42dec382fdb24c591d79ff5e47737b0f5b8479694c3adc19401704912bbfec2704d4d5bebbfc1a7fc796e277634e40851851a187ec2d37ed3f351c4596a5a0892916b4c55f
+Ctrl.hexxcghash = hexxcghash:a347f5f1e191c35f212c9324d5867efdf83026be62c2b16ae006edb3378d4006
+Ctrl.hexsession_id = hexsession_id:90befcef3ff8f920674a9fab94198cf3fd9dca24a21d3c9dba394daafbc621ed
+Ctrl.type = type:F
+Output = 147a771445123f846d8ae514d7ff9b3c93b2bceb7c7c9500942161b8e2d0110f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100db8205ad53a96bd4c111ad8dc8dab8196f04557d87a5ac90b1013eec71456ca80f0a59af26f9ac6eb91ee51cd601602fe9467550d1f09f417f94e4df2aa5fb941a33ff7764b4d57bcba77f549959ca4fe5d568ff5d20702fcfef904d07f9182bd9936da1fc63d0b11cd573bc0ed9c4e7bb07b5c77c4214d457ca5b0a4410d7b0
+Ctrl.hexxcghash = hexxcghash:a85aa36aeae3f8a948ffa077509f183f2894b52930a79a06bf8783e501d9cae3
+Ctrl.hexsession_id = hexsession_id:6629bb9f32e259935f946e73543bf65830e78ddab691a8b885f3444f976fd655
+Ctrl.type = type:A
+Output = 93da642974d71e52
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100db8205ad53a96bd4c111ad8dc8dab8196f04557d87a5ac90b1013eec71456ca80f0a59af26f9ac6eb91ee51cd601602fe9467550d1f09f417f94e4df2aa5fb941a33ff7764b4d57bcba77f549959ca4fe5d568ff5d20702fcfef904d07f9182bd9936da1fc63d0b11cd573bc0ed9c4e7bb07b5c77c4214d457ca5b0a4410d7b0
+Ctrl.hexxcghash = hexxcghash:a85aa36aeae3f8a948ffa077509f183f2894b52930a79a06bf8783e501d9cae3
+Ctrl.hexsession_id = hexsession_id:6629bb9f32e259935f946e73543bf65830e78ddab691a8b885f3444f976fd655
+Ctrl.type = type:B
+Output = df2035ad67457151
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100db8205ad53a96bd4c111ad8dc8dab8196f04557d87a5ac90b1013eec71456ca80f0a59af26f9ac6eb91ee51cd601602fe9467550d1f09f417f94e4df2aa5fb941a33ff7764b4d57bcba77f549959ca4fe5d568ff5d20702fcfef904d07f9182bd9936da1fc63d0b11cd573bc0ed9c4e7bb07b5c77c4214d457ca5b0a4410d7b0
+Ctrl.hexxcghash = hexxcghash:a85aa36aeae3f8a948ffa077509f183f2894b52930a79a06bf8783e501d9cae3
+Ctrl.hexsession_id = hexsession_id:6629bb9f32e259935f946e73543bf65830e78ddab691a8b885f3444f976fd655
+Ctrl.type = type:C
+Output = 42067bb0535da6701232a0f39ac7f436535af346c4786af5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100db8205ad53a96bd4c111ad8dc8dab8196f04557d87a5ac90b1013eec71456ca80f0a59af26f9ac6eb91ee51cd601602fe9467550d1f09f417f94e4df2aa5fb941a33ff7764b4d57bcba77f549959ca4fe5d568ff5d20702fcfef904d07f9182bd9936da1fc63d0b11cd573bc0ed9c4e7bb07b5c77c4214d457ca5b0a4410d7b0
+Ctrl.hexxcghash = hexxcghash:a85aa36aeae3f8a948ffa077509f183f2894b52930a79a06bf8783e501d9cae3
+Ctrl.hexsession_id = hexsession_id:6629bb9f32e259935f946e73543bf65830e78ddab691a8b885f3444f976fd655
+Ctrl.type = type:D
+Output = 08a0181a6c373d39540409dafb1b4e2359bc249af33bcfe0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100db8205ad53a96bd4c111ad8dc8dab8196f04557d87a5ac90b1013eec71456ca80f0a59af26f9ac6eb91ee51cd601602fe9467550d1f09f417f94e4df2aa5fb941a33ff7764b4d57bcba77f549959ca4fe5d568ff5d20702fcfef904d07f9182bd9936da1fc63d0b11cd573bc0ed9c4e7bb07b5c77c4214d457ca5b0a4410d7b0
+Ctrl.hexxcghash = hexxcghash:a85aa36aeae3f8a948ffa077509f183f2894b52930a79a06bf8783e501d9cae3
+Ctrl.hexsession_id = hexsession_id:6629bb9f32e259935f946e73543bf65830e78ddab691a8b885f3444f976fd655
+Ctrl.type = type:E
+Output = c043b5aece7cd2685c6dfb3788d7a562d6622d20f6d7e07b38aeb47c649dd99c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100db8205ad53a96bd4c111ad8dc8dab8196f04557d87a5ac90b1013eec71456ca80f0a59af26f9ac6eb91ee51cd601602fe9467550d1f09f417f94e4df2aa5fb941a33ff7764b4d57bcba77f549959ca4fe5d568ff5d20702fcfef904d07f9182bd9936da1fc63d0b11cd573bc0ed9c4e7bb07b5c77c4214d457ca5b0a4410d7b0
+Ctrl.hexxcghash = hexxcghash:a85aa36aeae3f8a948ffa077509f183f2894b52930a79a06bf8783e501d9cae3
+Ctrl.hexsession_id = hexsession_id:6629bb9f32e259935f946e73543bf65830e78ddab691a8b885f3444f976fd655
+Ctrl.type = type:F
+Output = cbe67a93ac758d9f2a6ff580bad5a44bb1a1062c9e20d5c974decb7aa2b0faa0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100d97164957831bbc57c91e0a5c9ece230b4625d14b9d07decdc971cee28d28c2938d2f8b682bc33bd67458fb90120dd6a2ca5255fbe3daeb0325029e15b5e3135aae5081894da98fb4e4d578890c5a4b6a359097bf5e2c403f77b0398d12795d6c895ed979e792d13f5aeb3cd62799d9a509cb4bd8e2bf5d8b08498abccc0790c
+Ctrl.hexxcghash = hexxcghash:81c3e6d1a6aeb3f3fc111a9e1467a7e569b9debbfef48fd31acd0d8b9b50a647
+Ctrl.hexsession_id = hexsession_id:068d4a2ebf66a0a6f75d3e76659c72a7f70630f98872e6f48c45ad862fd9b2a4
+Ctrl.type = type:A
+Output = 320e807fab2b10f0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100d97164957831bbc57c91e0a5c9ece230b4625d14b9d07decdc971cee28d28c2938d2f8b682bc33bd67458fb90120dd6a2ca5255fbe3daeb0325029e15b5e3135aae5081894da98fb4e4d578890c5a4b6a359097bf5e2c403f77b0398d12795d6c895ed979e792d13f5aeb3cd62799d9a509cb4bd8e2bf5d8b08498abccc0790c
+Ctrl.hexxcghash = hexxcghash:81c3e6d1a6aeb3f3fc111a9e1467a7e569b9debbfef48fd31acd0d8b9b50a647
+Ctrl.hexsession_id = hexsession_id:068d4a2ebf66a0a6f75d3e76659c72a7f70630f98872e6f48c45ad862fd9b2a4
+Ctrl.type = type:B
+Output = 7b8f91be4dcd59b1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100d97164957831bbc57c91e0a5c9ece230b4625d14b9d07decdc971cee28d28c2938d2f8b682bc33bd67458fb90120dd6a2ca5255fbe3daeb0325029e15b5e3135aae5081894da98fb4e4d578890c5a4b6a359097bf5e2c403f77b0398d12795d6c895ed979e792d13f5aeb3cd62799d9a509cb4bd8e2bf5d8b08498abccc0790c
+Ctrl.hexxcghash = hexxcghash:81c3e6d1a6aeb3f3fc111a9e1467a7e569b9debbfef48fd31acd0d8b9b50a647
+Ctrl.hexsession_id = hexsession_id:068d4a2ebf66a0a6f75d3e76659c72a7f70630f98872e6f48c45ad862fd9b2a4
+Ctrl.type = type:C
+Output = dec6e67a94b3ddfcd32a24d6026c6951d00b6f4402d32c1a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100d97164957831bbc57c91e0a5c9ece230b4625d14b9d07decdc971cee28d28c2938d2f8b682bc33bd67458fb90120dd6a2ca5255fbe3daeb0325029e15b5e3135aae5081894da98fb4e4d578890c5a4b6a359097bf5e2c403f77b0398d12795d6c895ed979e792d13f5aeb3cd62799d9a509cb4bd8e2bf5d8b08498abccc0790c
+Ctrl.hexxcghash = hexxcghash:81c3e6d1a6aeb3f3fc111a9e1467a7e569b9debbfef48fd31acd0d8b9b50a647
+Ctrl.hexsession_id = hexsession_id:068d4a2ebf66a0a6f75d3e76659c72a7f70630f98872e6f48c45ad862fd9b2a4
+Ctrl.type = type:D
+Output = 2ef3cea4588ad928ac3e8874f3e1f613f2d50787495acc32
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100d97164957831bbc57c91e0a5c9ece230b4625d14b9d07decdc971cee28d28c2938d2f8b682bc33bd67458fb90120dd6a2ca5255fbe3daeb0325029e15b5e3135aae5081894da98fb4e4d578890c5a4b6a359097bf5e2c403f77b0398d12795d6c895ed979e792d13f5aeb3cd62799d9a509cb4bd8e2bf5d8b08498abccc0790c
+Ctrl.hexxcghash = hexxcghash:81c3e6d1a6aeb3f3fc111a9e1467a7e569b9debbfef48fd31acd0d8b9b50a647
+Ctrl.hexsession_id = hexsession_id:068d4a2ebf66a0a6f75d3e76659c72a7f70630f98872e6f48c45ad862fd9b2a4
+Ctrl.type = type:E
+Output = 72f93537328eebeec1b5ca88fedb41bf4d9c6279e4fe8d13c38da72a39739ed8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100d97164957831bbc57c91e0a5c9ece230b4625d14b9d07decdc971cee28d28c2938d2f8b682bc33bd67458fb90120dd6a2ca5255fbe3daeb0325029e15b5e3135aae5081894da98fb4e4d578890c5a4b6a359097bf5e2c403f77b0398d12795d6c895ed979e792d13f5aeb3cd62799d9a509cb4bd8e2bf5d8b08498abccc0790c
+Ctrl.hexxcghash = hexxcghash:81c3e6d1a6aeb3f3fc111a9e1467a7e569b9debbfef48fd31acd0d8b9b50a647
+Ctrl.hexsession_id = hexsession_id:068d4a2ebf66a0a6f75d3e76659c72a7f70630f98872e6f48c45ad862fd9b2a4
+Ctrl.type = type:F
+Output = 55dcf2c322b9c94686edbf9314d7c93bd9651e2ebc64f1a299d7176577d65b32
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008001223839219fa4dbaf2b88deaa058bed95793bd6079e670e88eecf0a391ae7ce2d3bf129e11273aad0d0047b84960e6f73fa3de394042b4254c7850fddc7525dcf27fb9bdcafc604626aa25e08c938a27c80ca97a4c1a2662f4e8485e016c75e4f4e6861f5bbd694bbd6492cbffa95128dab52d8a3d0316bcabd5da2c789dd62
+Ctrl.hexxcghash = hexxcghash:7817d37fe11f3499feda39bf21ce7755040a0091e61e8eb585e6299c6673db81
+Ctrl.hexsession_id = hexsession_id:2b7ef879949594c35dbccdba0ba4959e3a2fad446c5ce35666e400b7214fe69e
+Ctrl.type = type:A
+Output = f4dbc41aa23e1621
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008001223839219fa4dbaf2b88deaa058bed95793bd6079e670e88eecf0a391ae7ce2d3bf129e11273aad0d0047b84960e6f73fa3de394042b4254c7850fddc7525dcf27fb9bdcafc604626aa25e08c938a27c80ca97a4c1a2662f4e8485e016c75e4f4e6861f5bbd694bbd6492cbffa95128dab52d8a3d0316bcabd5da2c789dd62
+Ctrl.hexxcghash = hexxcghash:7817d37fe11f3499feda39bf21ce7755040a0091e61e8eb585e6299c6673db81
+Ctrl.hexsession_id = hexsession_id:2b7ef879949594c35dbccdba0ba4959e3a2fad446c5ce35666e400b7214fe69e
+Ctrl.type = type:B
+Output = e53b40c511180817
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008001223839219fa4dbaf2b88deaa058bed95793bd6079e670e88eecf0a391ae7ce2d3bf129e11273aad0d0047b84960e6f73fa3de394042b4254c7850fddc7525dcf27fb9bdcafc604626aa25e08c938a27c80ca97a4c1a2662f4e8485e016c75e4f4e6861f5bbd694bbd6492cbffa95128dab52d8a3d0316bcabd5da2c789dd62
+Ctrl.hexxcghash = hexxcghash:7817d37fe11f3499feda39bf21ce7755040a0091e61e8eb585e6299c6673db81
+Ctrl.hexsession_id = hexsession_id:2b7ef879949594c35dbccdba0ba4959e3a2fad446c5ce35666e400b7214fe69e
+Ctrl.type = type:C
+Output = 70fed9412989cf5de908ad429cb92065fd5ccc081477abba
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008001223839219fa4dbaf2b88deaa058bed95793bd6079e670e88eecf0a391ae7ce2d3bf129e11273aad0d0047b84960e6f73fa3de394042b4254c7850fddc7525dcf27fb9bdcafc604626aa25e08c938a27c80ca97a4c1a2662f4e8485e016c75e4f4e6861f5bbd694bbd6492cbffa95128dab52d8a3d0316bcabd5da2c789dd62
+Ctrl.hexxcghash = hexxcghash:7817d37fe11f3499feda39bf21ce7755040a0091e61e8eb585e6299c6673db81
+Ctrl.hexsession_id = hexsession_id:2b7ef879949594c35dbccdba0ba4959e3a2fad446c5ce35666e400b7214fe69e
+Ctrl.type = type:D
+Output = 3afdb0b4b4bc13e8731bb92e541b7d82a0b20d8878ce184b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008001223839219fa4dbaf2b88deaa058bed95793bd6079e670e88eecf0a391ae7ce2d3bf129e11273aad0d0047b84960e6f73fa3de394042b4254c7850fddc7525dcf27fb9bdcafc604626aa25e08c938a27c80ca97a4c1a2662f4e8485e016c75e4f4e6861f5bbd694bbd6492cbffa95128dab52d8a3d0316bcabd5da2c789dd62
+Ctrl.hexxcghash = hexxcghash:7817d37fe11f3499feda39bf21ce7755040a0091e61e8eb585e6299c6673db81
+Ctrl.hexsession_id = hexsession_id:2b7ef879949594c35dbccdba0ba4959e3a2fad446c5ce35666e400b7214fe69e
+Ctrl.type = type:E
+Output = 59937f257aeef0806038543ced541990e5c2243881818edf2c522a54b64e9e93
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008001223839219fa4dbaf2b88deaa058bed95793bd6079e670e88eecf0a391ae7ce2d3bf129e11273aad0d0047b84960e6f73fa3de394042b4254c7850fddc7525dcf27fb9bdcafc604626aa25e08c938a27c80ca97a4c1a2662f4e8485e016c75e4f4e6861f5bbd694bbd6492cbffa95128dab52d8a3d0316bcabd5da2c789dd62
+Ctrl.hexxcghash = hexxcghash:7817d37fe11f3499feda39bf21ce7755040a0091e61e8eb585e6299c6673db81
+Ctrl.hexsession_id = hexsession_id:2b7ef879949594c35dbccdba0ba4959e3a2fad446c5ce35666e400b7214fe69e
+Ctrl.type = type:F
+Output = 187532105293274b841918e3ab51f5dd0453d4331e85f4e06b775dbce4979cdd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000807d3783ce1f598c3279e8a33f3e8bfe9c255979034f43d107bb3dd6cb21ff67d945594929f2fd7bef74679be81d3ad6c1b472293d1060242d720ed2fb250fde838064eec64d75cb9d5d2ec09c9e67e3bf48c0d0a92577f8bf6e05cfcbaafcd243369f30f14d24a4ad2c1aaff528e03198227135d26839fd45cd60678ae41307c2
+Ctrl.hexxcghash = hexxcghash:2efc2c1be24e1259105757bbd2c518d62ae52400451347aa90e2aab00bc58864
+Ctrl.hexsession_id = hexsession_id:2df7d0dbcb1beb17ef1a8b9884c9d6d8833b5039797a5fce61e7a2490405b323
+Ctrl.type = type:A
+Output = 3cc220d5bb9b5346
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000807d3783ce1f598c3279e8a33f3e8bfe9c255979034f43d107bb3dd6cb21ff67d945594929f2fd7bef74679be81d3ad6c1b472293d1060242d720ed2fb250fde838064eec64d75cb9d5d2ec09c9e67e3bf48c0d0a92577f8bf6e05cfcbaafcd243369f30f14d24a4ad2c1aaff528e03198227135d26839fd45cd60678ae41307c2
+Ctrl.hexxcghash = hexxcghash:2efc2c1be24e1259105757bbd2c518d62ae52400451347aa90e2aab00bc58864
+Ctrl.hexsession_id = hexsession_id:2df7d0dbcb1beb17ef1a8b9884c9d6d8833b5039797a5fce61e7a2490405b323
+Ctrl.type = type:B
+Output = 051e3c79aede7e41
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000807d3783ce1f598c3279e8a33f3e8bfe9c255979034f43d107bb3dd6cb21ff67d945594929f2fd7bef74679be81d3ad6c1b472293d1060242d720ed2fb250fde838064eec64d75cb9d5d2ec09c9e67e3bf48c0d0a92577f8bf6e05cfcbaafcd243369f30f14d24a4ad2c1aaff528e03198227135d26839fd45cd60678ae41307c2
+Ctrl.hexxcghash = hexxcghash:2efc2c1be24e1259105757bbd2c518d62ae52400451347aa90e2aab00bc58864
+Ctrl.hexsession_id = hexsession_id:2df7d0dbcb1beb17ef1a8b9884c9d6d8833b5039797a5fce61e7a2490405b323
+Ctrl.type = type:C
+Output = 44c2b4725965ee9a2bce58d38e2e9a778263c415b21a25be
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000807d3783ce1f598c3279e8a33f3e8bfe9c255979034f43d107bb3dd6cb21ff67d945594929f2fd7bef74679be81d3ad6c1b472293d1060242d720ed2fb250fde838064eec64d75cb9d5d2ec09c9e67e3bf48c0d0a92577f8bf6e05cfcbaafcd243369f30f14d24a4ad2c1aaff528e03198227135d26839fd45cd60678ae41307c2
+Ctrl.hexxcghash = hexxcghash:2efc2c1be24e1259105757bbd2c518d62ae52400451347aa90e2aab00bc58864
+Ctrl.hexsession_id = hexsession_id:2df7d0dbcb1beb17ef1a8b9884c9d6d8833b5039797a5fce61e7a2490405b323
+Ctrl.type = type:D
+Output = d5de7a801956b934d820f9aa51bf1dae2a7aec7ce5ce4e50
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000807d3783ce1f598c3279e8a33f3e8bfe9c255979034f43d107bb3dd6cb21ff67d945594929f2fd7bef74679be81d3ad6c1b472293d1060242d720ed2fb250fde838064eec64d75cb9d5d2ec09c9e67e3bf48c0d0a92577f8bf6e05cfcbaafcd243369f30f14d24a4ad2c1aaff528e03198227135d26839fd45cd60678ae41307c2
+Ctrl.hexxcghash = hexxcghash:2efc2c1be24e1259105757bbd2c518d62ae52400451347aa90e2aab00bc58864
+Ctrl.hexsession_id = hexsession_id:2df7d0dbcb1beb17ef1a8b9884c9d6d8833b5039797a5fce61e7a2490405b323
+Ctrl.type = type:E
+Output = 7d2039a6505e3220535fde0ff71464f3971580f50711356760b225fc3053fc19
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000000807d3783ce1f598c3279e8a33f3e8bfe9c255979034f43d107bb3dd6cb21ff67d945594929f2fd7bef74679be81d3ad6c1b472293d1060242d720ed2fb250fde838064eec64d75cb9d5d2ec09c9e67e3bf48c0d0a92577f8bf6e05cfcbaafcd243369f30f14d24a4ad2c1aaff528e03198227135d26839fd45cd60678ae41307c2
+Ctrl.hexxcghash = hexxcghash:2efc2c1be24e1259105757bbd2c518d62ae52400451347aa90e2aab00bc58864
+Ctrl.hexsession_id = hexsession_id:2df7d0dbcb1beb17ef1a8b9884c9d6d8833b5039797a5fce61e7a2490405b323
+Ctrl.type = type:F
+Output = b0972348a031ef2e87d42611e53cf0c4782d759ecdcc1390318eb11e1925ac35
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b44b386751753bf1fbfe100b11761766aaef16b2786462ba9561d3b493581254a1c1556ef611fec70146a864f8860c6317f294d06aec94129740c78035411992492825554362d25bf2c43a2e8a4d22e5d4777c593c8686966684b95e8e4535fc0b4a0e53264f22cf568469e829a303cdd06c09d8f74ccef6b6028fde782a7285
+Ctrl.hexxcghash = hexxcghash:8c691585cffd38a6ad0fd751da66c1a0f2b46ad6c12348b5a89cd24f39e76517
+Ctrl.hexsession_id = hexsession_id:2d93238fe20a860db2fb8fb4c5a0525a2f8817abbb53773e4af9fb366a213506
+Ctrl.type = type:A
+Output = cdb047beecd92d84
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b44b386751753bf1fbfe100b11761766aaef16b2786462ba9561d3b493581254a1c1556ef611fec70146a864f8860c6317f294d06aec94129740c78035411992492825554362d25bf2c43a2e8a4d22e5d4777c593c8686966684b95e8e4535fc0b4a0e53264f22cf568469e829a303cdd06c09d8f74ccef6b6028fde782a7285
+Ctrl.hexxcghash = hexxcghash:8c691585cffd38a6ad0fd751da66c1a0f2b46ad6c12348b5a89cd24f39e76517
+Ctrl.hexsession_id = hexsession_id:2d93238fe20a860db2fb8fb4c5a0525a2f8817abbb53773e4af9fb366a213506
+Ctrl.type = type:B
+Output = ef378e894d8f675e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b44b386751753bf1fbfe100b11761766aaef16b2786462ba9561d3b493581254a1c1556ef611fec70146a864f8860c6317f294d06aec94129740c78035411992492825554362d25bf2c43a2e8a4d22e5d4777c593c8686966684b95e8e4535fc0b4a0e53264f22cf568469e829a303cdd06c09d8f74ccef6b6028fde782a7285
+Ctrl.hexxcghash = hexxcghash:8c691585cffd38a6ad0fd751da66c1a0f2b46ad6c12348b5a89cd24f39e76517
+Ctrl.hexsession_id = hexsession_id:2d93238fe20a860db2fb8fb4c5a0525a2f8817abbb53773e4af9fb366a213506
+Ctrl.type = type:C
+Output = 23ee42a437801e87348b3999bde76147a8731e318db57752
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b44b386751753bf1fbfe100b11761766aaef16b2786462ba9561d3b493581254a1c1556ef611fec70146a864f8860c6317f294d06aec94129740c78035411992492825554362d25bf2c43a2e8a4d22e5d4777c593c8686966684b95e8e4535fc0b4a0e53264f22cf568469e829a303cdd06c09d8f74ccef6b6028fde782a7285
+Ctrl.hexxcghash = hexxcghash:8c691585cffd38a6ad0fd751da66c1a0f2b46ad6c12348b5a89cd24f39e76517
+Ctrl.hexsession_id = hexsession_id:2d93238fe20a860db2fb8fb4c5a0525a2f8817abbb53773e4af9fb366a213506
+Ctrl.type = type:D
+Output = a3f50e3d14498f15e1f111cc929648011d6abfb58e90df1c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b44b386751753bf1fbfe100b11761766aaef16b2786462ba9561d3b493581254a1c1556ef611fec70146a864f8860c6317f294d06aec94129740c78035411992492825554362d25bf2c43a2e8a4d22e5d4777c593c8686966684b95e8e4535fc0b4a0e53264f22cf568469e829a303cdd06c09d8f74ccef6b6028fde782a7285
+Ctrl.hexxcghash = hexxcghash:8c691585cffd38a6ad0fd751da66c1a0f2b46ad6c12348b5a89cd24f39e76517
+Ctrl.hexsession_id = hexsession_id:2d93238fe20a860db2fb8fb4c5a0525a2f8817abbb53773e4af9fb366a213506
+Ctrl.type = type:E
+Output = fb6a020561e46e521344cb671a50175afd63ded91eedaa1b2879c3a63761674d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b44b386751753bf1fbfe100b11761766aaef16b2786462ba9561d3b493581254a1c1556ef611fec70146a864f8860c6317f294d06aec94129740c78035411992492825554362d25bf2c43a2e8a4d22e5d4777c593c8686966684b95e8e4535fc0b4a0e53264f22cf568469e829a303cdd06c09d8f74ccef6b6028fde782a7285
+Ctrl.hexxcghash = hexxcghash:8c691585cffd38a6ad0fd751da66c1a0f2b46ad6c12348b5a89cd24f39e76517
+Ctrl.hexsession_id = hexsession_id:2d93238fe20a860db2fb8fb4c5a0525a2f8817abbb53773e4af9fb366a213506
+Ctrl.type = type:F
+Output = 567a79e7c4b10d62a420ce2ea740661c08d9459ed636ecb4edebcedb17b0baba
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b3462ee942f026de0922ab88b6ebf5ee2c968a4e12cbf374593f3542c6eb619ea1ec29b958c65a83305c37008de3b691ec020cc989e6c5393dae36bbb3bf0d1a29ed0bab6d23f60e63e277119b7a4c0a5fa96d9c043a5ace58034052ffb71b8bf0eaea8a6bc9a9834c512d7470122c71908a44ef7f3227b512f6971c82436e96
+Ctrl.hexxcghash = hexxcghash:3d5d7f742b08976755e2eb8457f1d9401d918bbf7e201fe0742f00ae799082df
+Ctrl.hexsession_id = hexsession_id:50bcad2970e07c3ad3f14db05d451d77304fe70927ba26815fcaf1f3a723af91
+Ctrl.type = type:A
+Output = 1f9e7ad5592ac73d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b3462ee942f026de0922ab88b6ebf5ee2c968a4e12cbf374593f3542c6eb619ea1ec29b958c65a83305c37008de3b691ec020cc989e6c5393dae36bbb3bf0d1a29ed0bab6d23f60e63e277119b7a4c0a5fa96d9c043a5ace58034052ffb71b8bf0eaea8a6bc9a9834c512d7470122c71908a44ef7f3227b512f6971c82436e96
+Ctrl.hexxcghash = hexxcghash:3d5d7f742b08976755e2eb8457f1d9401d918bbf7e201fe0742f00ae799082df
+Ctrl.hexsession_id = hexsession_id:50bcad2970e07c3ad3f14db05d451d77304fe70927ba26815fcaf1f3a723af91
+Ctrl.type = type:B
+Output = 15b254fe3510dd77
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b3462ee942f026de0922ab88b6ebf5ee2c968a4e12cbf374593f3542c6eb619ea1ec29b958c65a83305c37008de3b691ec020cc989e6c5393dae36bbb3bf0d1a29ed0bab6d23f60e63e277119b7a4c0a5fa96d9c043a5ace58034052ffb71b8bf0eaea8a6bc9a9834c512d7470122c71908a44ef7f3227b512f6971c82436e96
+Ctrl.hexxcghash = hexxcghash:3d5d7f742b08976755e2eb8457f1d9401d918bbf7e201fe0742f00ae799082df
+Ctrl.hexsession_id = hexsession_id:50bcad2970e07c3ad3f14db05d451d77304fe70927ba26815fcaf1f3a723af91
+Ctrl.type = type:C
+Output = 88eadd5802e1a748284684438eb1b1bdc9b20ea30c59950d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b3462ee942f026de0922ab88b6ebf5ee2c968a4e12cbf374593f3542c6eb619ea1ec29b958c65a83305c37008de3b691ec020cc989e6c5393dae36bbb3bf0d1a29ed0bab6d23f60e63e277119b7a4c0a5fa96d9c043a5ace58034052ffb71b8bf0eaea8a6bc9a9834c512d7470122c71908a44ef7f3227b512f6971c82436e96
+Ctrl.hexxcghash = hexxcghash:3d5d7f742b08976755e2eb8457f1d9401d918bbf7e201fe0742f00ae799082df
+Ctrl.hexsession_id = hexsession_id:50bcad2970e07c3ad3f14db05d451d77304fe70927ba26815fcaf1f3a723af91
+Ctrl.type = type:D
+Output = 277c2c4ad3d4a3bec4bdc5329bb5f9d4e39aa06b1e115e77
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b3462ee942f026de0922ab88b6ebf5ee2c968a4e12cbf374593f3542c6eb619ea1ec29b958c65a83305c37008de3b691ec020cc989e6c5393dae36bbb3bf0d1a29ed0bab6d23f60e63e277119b7a4c0a5fa96d9c043a5ace58034052ffb71b8bf0eaea8a6bc9a9834c512d7470122c71908a44ef7f3227b512f6971c82436e96
+Ctrl.hexxcghash = hexxcghash:3d5d7f742b08976755e2eb8457f1d9401d918bbf7e201fe0742f00ae799082df
+Ctrl.hexsession_id = hexsession_id:50bcad2970e07c3ad3f14db05d451d77304fe70927ba26815fcaf1f3a723af91
+Ctrl.type = type:E
+Output = 090d2f273a690ed1d67dd9919c34385b18a661f8657b84bef6832f2396771979
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100b3462ee942f026de0922ab88b6ebf5ee2c968a4e12cbf374593f3542c6eb619ea1ec29b958c65a83305c37008de3b691ec020cc989e6c5393dae36bbb3bf0d1a29ed0bab6d23f60e63e277119b7a4c0a5fa96d9c043a5ace58034052ffb71b8bf0eaea8a6bc9a9834c512d7470122c71908a44ef7f3227b512f6971c82436e96
+Ctrl.hexxcghash = hexxcghash:3d5d7f742b08976755e2eb8457f1d9401d918bbf7e201fe0742f00ae799082df
+Ctrl.hexsession_id = hexsession_id:50bcad2970e07c3ad3f14db05d451d77304fe70927ba26815fcaf1f3a723af91
+Ctrl.type = type:F
+Output = 1f3082fa5ac8ec565595c4c5b8a7ddbba88ed4936fca913bba6a8715dc856f30
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100831889c603d4dc01d0d9f19f07ccadb6a9fa7662305277d59efbc872f38325de2ec2151f58649f5fd15ff3a099f0191dca69be0b9c88ef729fe74af849cc8e7479f8a5406842af88e12167607103cda449a1394c86b2c21d4083cdee216f74078d4e878b352df901727870815528ae99f74f25c21a8a39772940d871badb39a6
+Ctrl.hexxcghash = hexxcghash:f77992d066bc305419a6c1b0879008856287b95ec20c2b1be5a5c8189cadbbb1
+Ctrl.hexsession_id = hexsession_id:15bd2e8c86d23eace4a581377ef8a3f5266dbd081cfcd01ab2b68506438228a2
+Ctrl.type = type:A
+Output = 3aa08d67c81310b7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100831889c603d4dc01d0d9f19f07ccadb6a9fa7662305277d59efbc872f38325de2ec2151f58649f5fd15ff3a099f0191dca69be0b9c88ef729fe74af849cc8e7479f8a5406842af88e12167607103cda449a1394c86b2c21d4083cdee216f74078d4e878b352df901727870815528ae99f74f25c21a8a39772940d871badb39a6
+Ctrl.hexxcghash = hexxcghash:f77992d066bc305419a6c1b0879008856287b95ec20c2b1be5a5c8189cadbbb1
+Ctrl.hexsession_id = hexsession_id:15bd2e8c86d23eace4a581377ef8a3f5266dbd081cfcd01ab2b68506438228a2
+Ctrl.type = type:B
+Output = cf46596878a17a87
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100831889c603d4dc01d0d9f19f07ccadb6a9fa7662305277d59efbc872f38325de2ec2151f58649f5fd15ff3a099f0191dca69be0b9c88ef729fe74af849cc8e7479f8a5406842af88e12167607103cda449a1394c86b2c21d4083cdee216f74078d4e878b352df901727870815528ae99f74f25c21a8a39772940d871badb39a6
+Ctrl.hexxcghash = hexxcghash:f77992d066bc305419a6c1b0879008856287b95ec20c2b1be5a5c8189cadbbb1
+Ctrl.hexsession_id = hexsession_id:15bd2e8c86d23eace4a581377ef8a3f5266dbd081cfcd01ab2b68506438228a2
+Ctrl.type = type:C
+Output = 871db438b8b33c2102ddab0c1f7be51ee4c2cbdf52a01a58
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100831889c603d4dc01d0d9f19f07ccadb6a9fa7662305277d59efbc872f38325de2ec2151f58649f5fd15ff3a099f0191dca69be0b9c88ef729fe74af849cc8e7479f8a5406842af88e12167607103cda449a1394c86b2c21d4083cdee216f74078d4e878b352df901727870815528ae99f74f25c21a8a39772940d871badb39a6
+Ctrl.hexxcghash = hexxcghash:f77992d066bc305419a6c1b0879008856287b95ec20c2b1be5a5c8189cadbbb1
+Ctrl.hexsession_id = hexsession_id:15bd2e8c86d23eace4a581377ef8a3f5266dbd081cfcd01ab2b68506438228a2
+Ctrl.type = type:D
+Output = 04ac13599b84c22be0f1e5f7b96def31598e6ad36be412e8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100831889c603d4dc01d0d9f19f07ccadb6a9fa7662305277d59efbc872f38325de2ec2151f58649f5fd15ff3a099f0191dca69be0b9c88ef729fe74af849cc8e7479f8a5406842af88e12167607103cda449a1394c86b2c21d4083cdee216f74078d4e878b352df901727870815528ae99f74f25c21a8a39772940d871badb39a6
+Ctrl.hexxcghash = hexxcghash:f77992d066bc305419a6c1b0879008856287b95ec20c2b1be5a5c8189cadbbb1
+Ctrl.hexsession_id = hexsession_id:15bd2e8c86d23eace4a581377ef8a3f5266dbd081cfcd01ab2b68506438228a2
+Ctrl.type = type:E
+Output = f00c83a8afb5d1793749d4aae825b80e67ccd7f67e08f572222ccf42126ea2f0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000008100831889c603d4dc01d0d9f19f07ccadb6a9fa7662305277d59efbc872f38325de2ec2151f58649f5fd15ff3a099f0191dca69be0b9c88ef729fe74af849cc8e7479f8a5406842af88e12167607103cda449a1394c86b2c21d4083cdee216f74078d4e878b352df901727870815528ae99f74f25c21a8a39772940d871badb39a6
+Ctrl.hexxcghash = hexxcghash:f77992d066bc305419a6c1b0879008856287b95ec20c2b1be5a5c8189cadbbb1
+Ctrl.hexsession_id = hexsession_id:15bd2e8c86d23eace4a581377ef8a3f5266dbd081cfcd01ab2b68506438228a2
+Ctrl.type = type:F
+Output = df0570749d67136095b0dda6d461676b7eeb9a386f126306d436cab16dfd1b3c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000081008fa89f9f89a2a2417a9461451a4b97343afd46552a8700e588638b0ef0ae568ffbaee2727ae3ae96271aa33b8439c1a4bad313ea42605ae0902817d91577b6a3c72fc576ee29544c1d6323bad205317d2265c533d82ed27a2dea64a8545c64e9772e81ce1cbfe265a51acfae74b72d5365366263541e50a567c3ffa594eac071
+Ctrl.hexxcghash = hexxcghash:4d071ee398757c548fa72f77ed94d5b158a311d3655bb7a6e324c4e2a26be84f
+Ctrl.hexsession_id = hexsession_id:d1d34becf667002ace16be10726cab3c7d18ce7414759f62a83cb4cfaaed77f4
+Ctrl.type = type:A
+Output = fad800cbf8975a01
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000081008fa89f9f89a2a2417a9461451a4b97343afd46552a8700e588638b0ef0ae568ffbaee2727ae3ae96271aa33b8439c1a4bad313ea42605ae0902817d91577b6a3c72fc576ee29544c1d6323bad205317d2265c533d82ed27a2dea64a8545c64e9772e81ce1cbfe265a51acfae74b72d5365366263541e50a567c3ffa594eac071
+Ctrl.hexxcghash = hexxcghash:4d071ee398757c548fa72f77ed94d5b158a311d3655bb7a6e324c4e2a26be84f
+Ctrl.hexsession_id = hexsession_id:d1d34becf667002ace16be10726cab3c7d18ce7414759f62a83cb4cfaaed77f4
+Ctrl.type = type:B
+Output = 679a118bda1f15a9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000081008fa89f9f89a2a2417a9461451a4b97343afd46552a8700e588638b0ef0ae568ffbaee2727ae3ae96271aa33b8439c1a4bad313ea42605ae0902817d91577b6a3c72fc576ee29544c1d6323bad205317d2265c533d82ed27a2dea64a8545c64e9772e81ce1cbfe265a51acfae74b72d5365366263541e50a567c3ffa594eac071
+Ctrl.hexxcghash = hexxcghash:4d071ee398757c548fa72f77ed94d5b158a311d3655bb7a6e324c4e2a26be84f
+Ctrl.hexsession_id = hexsession_id:d1d34becf667002ace16be10726cab3c7d18ce7414759f62a83cb4cfaaed77f4
+Ctrl.type = type:C
+Output = 5193e9b3b10b7939b79b967b98e6cf3396758eaf8263edf2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000081008fa89f9f89a2a2417a9461451a4b97343afd46552a8700e588638b0ef0ae568ffbaee2727ae3ae96271aa33b8439c1a4bad313ea42605ae0902817d91577b6a3c72fc576ee29544c1d6323bad205317d2265c533d82ed27a2dea64a8545c64e9772e81ce1cbfe265a51acfae74b72d5365366263541e50a567c3ffa594eac071
+Ctrl.hexxcghash = hexxcghash:4d071ee398757c548fa72f77ed94d5b158a311d3655bb7a6e324c4e2a26be84f
+Ctrl.hexsession_id = hexsession_id:d1d34becf667002ace16be10726cab3c7d18ce7414759f62a83cb4cfaaed77f4
+Ctrl.type = type:D
+Output = 3f5de8bec6d737836d3a91480ac76c19d0a90bc146f02d5c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000081008fa89f9f89a2a2417a9461451a4b97343afd46552a8700e588638b0ef0ae568ffbaee2727ae3ae96271aa33b8439c1a4bad313ea42605ae0902817d91577b6a3c72fc576ee29544c1d6323bad205317d2265c533d82ed27a2dea64a8545c64e9772e81ce1cbfe265a51acfae74b72d5365366263541e50a567c3ffa594eac071
+Ctrl.hexxcghash = hexxcghash:4d071ee398757c548fa72f77ed94d5b158a311d3655bb7a6e324c4e2a26be84f
+Ctrl.hexsession_id = hexsession_id:d1d34becf667002ace16be10726cab3c7d18ce7414759f62a83cb4cfaaed77f4
+Ctrl.type = type:E
+Output = ce7be4fffd0ffd09ff45889d10c7be0edf922422d01cb71b737c6149bb1a2d05
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000081008fa89f9f89a2a2417a9461451a4b97343afd46552a8700e588638b0ef0ae568ffbaee2727ae3ae96271aa33b8439c1a4bad313ea42605ae0902817d91577b6a3c72fc576ee29544c1d6323bad205317d2265c533d82ed27a2dea64a8545c64e9772e81ce1cbfe265a51acfae74b72d5365366263541e50a567c3ffa594eac071
+Ctrl.hexxcghash = hexxcghash:4d071ee398757c548fa72f77ed94d5b158a311d3655bb7a6e324c4e2a26be84f
+Ctrl.hexsession_id = hexsession_id:d1d34becf667002ace16be10726cab3c7d18ce7414759f62a83cb4cfaaed77f4
+Ctrl.type = type:F
+Output = 60f413c9bcc42dcf0acc53d513dd8bc703f7e5d668f4e043f13028dcf40880b2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001006ac382eaaca093e125e25c24bebc84640c11987507344b5c739ceb84a9e0b222b9a8b51c839e5ebe49cfadbfb39599764ed522099dc912751950dc7dc97fbdc06328b68f22781fd315af568009a5509e5b87a11bf527c056daffd82ab6cbc25cca37143459e7bc63bcde52757adeb7df01cf12173f1fef8102ec5ab142c213dd9d30696278a8d8bc32dde9592d28c078c6d92b947d825acaab6494846a49de24b9623f4889e8adc38e8c669effef176040ad945e90a7d3eec15efeee78ae71043c96511103a16ba7caf0acd0642efdbe809934faa1a5f1bd11043649b25ccd1fee2e38815d4d5f5fc6b4102969f21c22ae1b0e7d3603a556a13262ff628de222
+Ctrl.hexxcghash = hexxcghash:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.hexsession_id = hexsession_id:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.type = type:A
+Output = 81f0330ef6f05361b3823bfded6e1de9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001006ac382eaaca093e125e25c24bebc84640c11987507344b5c739ceb84a9e0b222b9a8b51c839e5ebe49cfadbfb39599764ed522099dc912751950dc7dc97fbdc06328b68f22781fd315af568009a5509e5b87a11bf527c056daffd82ab6cbc25cca37143459e7bc63bcde52757adeb7df01cf12173f1fef8102ec5ab142c213dd9d30696278a8d8bc32dde9592d28c078c6d92b947d825acaab6494846a49de24b9623f4889e8adc38e8c669effef176040ad945e90a7d3eec15efeee78ae71043c96511103a16ba7caf0acd0642efdbe809934faa1a5f1bd11043649b25ccd1fee2e38815d4d5f5fc6b4102969f21c22ae1b0e7d3603a556a13262ff628de222
+Ctrl.hexxcghash = hexxcghash:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.hexsession_id = hexsession_id:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.type = type:B
+Output = 3f6fd2065eeb2b0b1d93195a1fed48a5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001006ac382eaaca093e125e25c24bebc84640c11987507344b5c739ceb84a9e0b222b9a8b51c839e5ebe49cfadbfb39599764ed522099dc912751950dc7dc97fbdc06328b68f22781fd315af568009a5509e5b87a11bf527c056daffd82ab6cbc25cca37143459e7bc63bcde52757adeb7df01cf12173f1fef8102ec5ab142c213dd9d30696278a8d8bc32dde9592d28c078c6d92b947d825acaab6494846a49de24b9623f4889e8adc38e8c669effef176040ad945e90a7d3eec15efeee78ae71043c96511103a16ba7caf0acd0642efdbe809934faa1a5f1bd11043649b25ccd1fee2e38815d4d5f5fc6b4102969f21c22ae1b0e7d3603a556a13262ff628de222
+Ctrl.hexxcghash = hexxcghash:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.hexsession_id = hexsession_id:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.type = type:C
+Output = c35471034e6fd6547613178e23435f21
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001006ac382eaaca093e125e25c24bebc84640c11987507344b5c739ceb84a9e0b222b9a8b51c839e5ebe49cfadbfb39599764ed522099dc912751950dc7dc97fbdc06328b68f22781fd315af568009a5509e5b87a11bf527c056daffd82ab6cbc25cca37143459e7bc63bcde52757adeb7df01cf12173f1fef8102ec5ab142c213dd9d30696278a8d8bc32dde9592d28c078c6d92b947d825acaab6494846a49de24b9623f4889e8adc38e8c669effef176040ad945e90a7d3eec15efeee78ae71043c96511103a16ba7caf0acd0642efdbe809934faa1a5f1bd11043649b25ccd1fee2e38815d4d5f5fc6b4102969f21c22ae1b0e7d3603a556a13262ff628de222
+Ctrl.hexxcghash = hexxcghash:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.hexsession_id = hexsession_id:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.type = type:D
+Output = 7e9d79032090d99f98b015634dd9f462
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001006ac382eaaca093e125e25c24bebc84640c11987507344b5c739ceb84a9e0b222b9a8b51c839e5ebe49cfadbfb39599764ed522099dc912751950dc7dc97fbdc06328b68f22781fd315af568009a5509e5b87a11bf527c056daffd82ab6cbc25cca37143459e7bc63bcde52757adeb7df01cf12173f1fef8102ec5ab142c213dd9d30696278a8d8bc32dde9592d28c078c6d92b947d825acaab6494846a49de24b9623f4889e8adc38e8c669effef176040ad945e90a7d3eec15efeee78ae71043c96511103a16ba7caf0acd0642efdbe809934faa1a5f1bd11043649b25ccd1fee2e38815d4d5f5fc6b4102969f21c22ae1b0e7d3603a556a13262ff628de222
+Ctrl.hexxcghash = hexxcghash:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.hexsession_id = hexsession_id:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.type = type:E
+Output = 24ee559ad7ce712b685d0b2271e443c17ab1d1dceb5a360569d25d5dc243002f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001006ac382eaaca093e125e25c24bebc84640c11987507344b5c739ceb84a9e0b222b9a8b51c839e5ebe49cfadbfb39599764ed522099dc912751950dc7dc97fbdc06328b68f22781fd315af568009a5509e5b87a11bf527c056daffd82ab6cbc25cca37143459e7bc63bcde52757adeb7df01cf12173f1fef8102ec5ab142c213dd9d30696278a8d8bc32dde9592d28c078c6d92b947d825acaab6494846a49de24b9623f4889e8adc38e8c669effef176040ad945e90a7d3eec15efeee78ae71043c96511103a16ba7caf0acd0642efdbe809934faa1a5f1bd11043649b25ccd1fee2e38815d4d5f5fc6b4102969f21c22ae1b0e7d3603a556a13262ff628de222
+Ctrl.hexxcghash = hexxcghash:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.hexsession_id = hexsession_id:7b7001185e256d4493445f39a55fb905e6321f4b5dd8bbf3100d51ba0bda3d2d
+Ctrl.type = type:F
+Output = c3419c2b966235869d714ba5ac48ddb7d9e35c8c19aac73422337a373453607e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010044708c76616f700bd31b0c155ef74e36390eeb39bc5c32cdc90e21922b0ed930b5b519c8afebef0f4e4fb5b41b81d649d2127506620b594e9899f7f0d442ecddd68308307b82f00065e9d75220a5a6f5641795772132215a236064ea965c6493c21f89879730ebbc3c20a22d8f5bfd07b525b194323b22d8a49944d1aa58502e756101ef1e8a91c9310e71f6db65a3ad0a542cfa751f83721a99e89f1dbe54971a3620ecffc967aa55eed1a42d6e7a138b853557ac84689889f6d0c8553575fb89b4e13eab5537da72ef16f0d72f5e8505d97f110745193d550fa315fe88f672db90d73843e97ba1f3d087ba8eb39025bbffad37589a6199227303d9d8e7f1e3
+Ctrl.hexxcghash = hexxcghash:fe3727fd99a5ac7987c2cfbe062129e3027bf5e10310c6bccde9c916c8329dc2
+Ctrl.hexsession_id = hexsession_id:fffa598bc0ad2ae84dc8dc05b1f72c5b0134025ae7edf8a2e8db11472e18e1fc
+Ctrl.type = type:A
+Output = 36730bae8de5cb98898d6b4a00b37058
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010044708c76616f700bd31b0c155ef74e36390eeb39bc5c32cdc90e21922b0ed930b5b519c8afebef0f4e4fb5b41b81d649d2127506620b594e9899f7f0d442ecddd68308307b82f00065e9d75220a5a6f5641795772132215a236064ea965c6493c21f89879730ebbc3c20a22d8f5bfd07b525b194323b22d8a49944d1aa58502e756101ef1e8a91c9310e71f6db65a3ad0a542cfa751f83721a99e89f1dbe54971a3620ecffc967aa55eed1a42d6e7a138b853557ac84689889f6d0c8553575fb89b4e13eab5537da72ef16f0d72f5e8505d97f110745193d550fa315fe88f672db90d73843e97ba1f3d087ba8eb39025bbffad37589a6199227303d9d8e7f1e3
+Ctrl.hexxcghash = hexxcghash:fe3727fd99a5ac7987c2cfbe062129e3027bf5e10310c6bccde9c916c8329dc2
+Ctrl.hexsession_id = hexsession_id:fffa598bc0ad2ae84dc8dc05b1f72c5b0134025ae7edf8a2e8db11472e18e1fc
+Ctrl.type = type:B
+Output = 5dfe446a83f40e8358d28cb97df8f340
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010044708c76616f700bd31b0c155ef74e36390eeb39bc5c32cdc90e21922b0ed930b5b519c8afebef0f4e4fb5b41b81d649d2127506620b594e9899f7f0d442ecddd68308307b82f00065e9d75220a5a6f5641795772132215a236064ea965c6493c21f89879730ebbc3c20a22d8f5bfd07b525b194323b22d8a49944d1aa58502e756101ef1e8a91c9310e71f6db65a3ad0a542cfa751f83721a99e89f1dbe54971a3620ecffc967aa55eed1a42d6e7a138b853557ac84689889f6d0c8553575fb89b4e13eab5537da72ef16f0d72f5e8505d97f110745193d550fa315fe88f672db90d73843e97ba1f3d087ba8eb39025bbffad37589a6199227303d9d8e7f1e3
+Ctrl.hexxcghash = hexxcghash:fe3727fd99a5ac7987c2cfbe062129e3027bf5e10310c6bccde9c916c8329dc2
+Ctrl.hexsession_id = hexsession_id:fffa598bc0ad2ae84dc8dc05b1f72c5b0134025ae7edf8a2e8db11472e18e1fc
+Ctrl.type = type:C
+Output = 495b7afed0872b761437728e9e94e2b8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010044708c76616f700bd31b0c155ef74e36390eeb39bc5c32cdc90e21922b0ed930b5b519c8afebef0f4e4fb5b41b81d649d2127506620b594e9899f7f0d442ecddd68308307b82f00065e9d75220a5a6f5641795772132215a236064ea965c6493c21f89879730ebbc3c20a22d8f5bfd07b525b194323b22d8a49944d1aa58502e756101ef1e8a91c9310e71f6db65a3ad0a542cfa751f83721a99e89f1dbe54971a3620ecffc967aa55eed1a42d6e7a138b853557ac84689889f6d0c8553575fb89b4e13eab5537da72ef16f0d72f5e8505d97f110745193d550fa315fe88f672db90d73843e97ba1f3d087ba8eb39025bbffad37589a6199227303d9d8e7f1e3
+Ctrl.hexxcghash = hexxcghash:fe3727fd99a5ac7987c2cfbe062129e3027bf5e10310c6bccde9c916c8329dc2
+Ctrl.hexsession_id = hexsession_id:fffa598bc0ad2ae84dc8dc05b1f72c5b0134025ae7edf8a2e8db11472e18e1fc
+Ctrl.type = type:D
+Output = c1474b3925bec36f0b7f6cc698e949c8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010044708c76616f700bd31b0c155ef74e36390eeb39bc5c32cdc90e21922b0ed930b5b519c8afebef0f4e4fb5b41b81d649d2127506620b594e9899f7f0d442ecddd68308307b82f00065e9d75220a5a6f5641795772132215a236064ea965c6493c21f89879730ebbc3c20a22d8f5bfd07b525b194323b22d8a49944d1aa58502e756101ef1e8a91c9310e71f6db65a3ad0a542cfa751f83721a99e89f1dbe54971a3620ecffc967aa55eed1a42d6e7a138b853557ac84689889f6d0c8553575fb89b4e13eab5537da72ef16f0d72f5e8505d97f110745193d550fa315fe88f672db90d73843e97ba1f3d087ba8eb39025bbffad37589a6199227303d9d8e7f1e3
+Ctrl.hexxcghash = hexxcghash:fe3727fd99a5ac7987c2cfbe062129e3027bf5e10310c6bccde9c916c8329dc2
+Ctrl.hexsession_id = hexsession_id:fffa598bc0ad2ae84dc8dc05b1f72c5b0134025ae7edf8a2e8db11472e18e1fc
+Ctrl.type = type:E
+Output = b730f8df6a0697645be261169486c32a11612229276cbac5d8b3669afb2e4262
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010044708c76616f700bd31b0c155ef74e36390eeb39bc5c32cdc90e21922b0ed930b5b519c8afebef0f4e4fb5b41b81d649d2127506620b594e9899f7f0d442ecddd68308307b82f00065e9d75220a5a6f5641795772132215a236064ea965c6493c21f89879730ebbc3c20a22d8f5bfd07b525b194323b22d8a49944d1aa58502e756101ef1e8a91c9310e71f6db65a3ad0a542cfa751f83721a99e89f1dbe54971a3620ecffc967aa55eed1a42d6e7a138b853557ac84689889f6d0c8553575fb89b4e13eab5537da72ef16f0d72f5e8505d97f110745193d550fa315fe88f672db90d73843e97ba1f3d087ba8eb39025bbffad37589a6199227303d9d8e7f1e3
+Ctrl.hexxcghash = hexxcghash:fe3727fd99a5ac7987c2cfbe062129e3027bf5e10310c6bccde9c916c8329dc2
+Ctrl.hexsession_id = hexsession_id:fffa598bc0ad2ae84dc8dc05b1f72c5b0134025ae7edf8a2e8db11472e18e1fc
+Ctrl.type = type:F
+Output = 14a5ea98245fb058978b82a3cb092b1cca7ce0109a4f98c16e1529579d58b819
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b1c637286720d11a9030260e35726621f54115560c443ded98d5622f4007cb65427ba8ae0831f34452349993c74933466f3307e11452150f4640010ed7d1ab87656232d9659d9982e8227c25d648189d2bdda3283aa5dec8a2105af0fa840592a21d96eebb932f8ff36f94a2e4fc3819d7c9f0d26a472fb5ae5a43a2d4906247d59c42512dda252205f60042e1900e1581127f25ace253b62a83f62d4703281a294f240df2aa34ddf437c9f278278120bc10e2cb99f7804ecd6741b1be5520c553cb89747f79b4e4efd3cf09b484eb1eb034d220da457546a2ebb28d7f2faf67de0630757b8ae05e27a761956d2e190fe3fb93b1c7c142f62baeb089721cedc
+Ctrl.hexxcghash = hexxcghash:cad407a823551726f9bdcb78e8f351536e4406e8ee64947ecc0074662c7c0462
+Ctrl.hexsession_id = hexsession_id:a9c8207642627e6ee872999123b29e36abfdd071dba36ea6f0c11dd59ea46410
+Ctrl.type = type:A
+Output = 32d20a3f5e92b20fe100f4f41a1ad53c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b1c637286720d11a9030260e35726621f54115560c443ded98d5622f4007cb65427ba8ae0831f34452349993c74933466f3307e11452150f4640010ed7d1ab87656232d9659d9982e8227c25d648189d2bdda3283aa5dec8a2105af0fa840592a21d96eebb932f8ff36f94a2e4fc3819d7c9f0d26a472fb5ae5a43a2d4906247d59c42512dda252205f60042e1900e1581127f25ace253b62a83f62d4703281a294f240df2aa34ddf437c9f278278120bc10e2cb99f7804ecd6741b1be5520c553cb89747f79b4e4efd3cf09b484eb1eb034d220da457546a2ebb28d7f2faf67de0630757b8ae05e27a761956d2e190fe3fb93b1c7c142f62baeb089721cedc
+Ctrl.hexxcghash = hexxcghash:cad407a823551726f9bdcb78e8f351536e4406e8ee64947ecc0074662c7c0462
+Ctrl.hexsession_id = hexsession_id:a9c8207642627e6ee872999123b29e36abfdd071dba36ea6f0c11dd59ea46410
+Ctrl.type = type:B
+Output = c3a3ff57f99187ba011fd422100af577
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b1c637286720d11a9030260e35726621f54115560c443ded98d5622f4007cb65427ba8ae0831f34452349993c74933466f3307e11452150f4640010ed7d1ab87656232d9659d9982e8227c25d648189d2bdda3283aa5dec8a2105af0fa840592a21d96eebb932f8ff36f94a2e4fc3819d7c9f0d26a472fb5ae5a43a2d4906247d59c42512dda252205f60042e1900e1581127f25ace253b62a83f62d4703281a294f240df2aa34ddf437c9f278278120bc10e2cb99f7804ecd6741b1be5520c553cb89747f79b4e4efd3cf09b484eb1eb034d220da457546a2ebb28d7f2faf67de0630757b8ae05e27a761956d2e190fe3fb93b1c7c142f62baeb089721cedc
+Ctrl.hexxcghash = hexxcghash:cad407a823551726f9bdcb78e8f351536e4406e8ee64947ecc0074662c7c0462
+Ctrl.hexsession_id = hexsession_id:a9c8207642627e6ee872999123b29e36abfdd071dba36ea6f0c11dd59ea46410
+Ctrl.type = type:C
+Output = 8517903c49d5a59ad8ef7cd8591c6b5e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b1c637286720d11a9030260e35726621f54115560c443ded98d5622f4007cb65427ba8ae0831f34452349993c74933466f3307e11452150f4640010ed7d1ab87656232d9659d9982e8227c25d648189d2bdda3283aa5dec8a2105af0fa840592a21d96eebb932f8ff36f94a2e4fc3819d7c9f0d26a472fb5ae5a43a2d4906247d59c42512dda252205f60042e1900e1581127f25ace253b62a83f62d4703281a294f240df2aa34ddf437c9f278278120bc10e2cb99f7804ecd6741b1be5520c553cb89747f79b4e4efd3cf09b484eb1eb034d220da457546a2ebb28d7f2faf67de0630757b8ae05e27a761956d2e190fe3fb93b1c7c142f62baeb089721cedc
+Ctrl.hexxcghash = hexxcghash:cad407a823551726f9bdcb78e8f351536e4406e8ee64947ecc0074662c7c0462
+Ctrl.hexsession_id = hexsession_id:a9c8207642627e6ee872999123b29e36abfdd071dba36ea6f0c11dd59ea46410
+Ctrl.type = type:D
+Output = a5ad201101a617f1cd5b3a2baa3b27f7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b1c637286720d11a9030260e35726621f54115560c443ded98d5622f4007cb65427ba8ae0831f34452349993c74933466f3307e11452150f4640010ed7d1ab87656232d9659d9982e8227c25d648189d2bdda3283aa5dec8a2105af0fa840592a21d96eebb932f8ff36f94a2e4fc3819d7c9f0d26a472fb5ae5a43a2d4906247d59c42512dda252205f60042e1900e1581127f25ace253b62a83f62d4703281a294f240df2aa34ddf437c9f278278120bc10e2cb99f7804ecd6741b1be5520c553cb89747f79b4e4efd3cf09b484eb1eb034d220da457546a2ebb28d7f2faf67de0630757b8ae05e27a761956d2e190fe3fb93b1c7c142f62baeb089721cedc
+Ctrl.hexxcghash = hexxcghash:cad407a823551726f9bdcb78e8f351536e4406e8ee64947ecc0074662c7c0462
+Ctrl.hexsession_id = hexsession_id:a9c8207642627e6ee872999123b29e36abfdd071dba36ea6f0c11dd59ea46410
+Ctrl.type = type:E
+Output = 16747a23fddd72f785c5d61dfb81a5a38555f5d8ff1dc5ae4fb423b82adfe05b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b1c637286720d11a9030260e35726621f54115560c443ded98d5622f4007cb65427ba8ae0831f34452349993c74933466f3307e11452150f4640010ed7d1ab87656232d9659d9982e8227c25d648189d2bdda3283aa5dec8a2105af0fa840592a21d96eebb932f8ff36f94a2e4fc3819d7c9f0d26a472fb5ae5a43a2d4906247d59c42512dda252205f60042e1900e1581127f25ace253b62a83f62d4703281a294f240df2aa34ddf437c9f278278120bc10e2cb99f7804ecd6741b1be5520c553cb89747f79b4e4efd3cf09b484eb1eb034d220da457546a2ebb28d7f2faf67de0630757b8ae05e27a761956d2e190fe3fb93b1c7c142f62baeb089721cedc
+Ctrl.hexxcghash = hexxcghash:cad407a823551726f9bdcb78e8f351536e4406e8ee64947ecc0074662c7c0462
+Ctrl.hexsession_id = hexsession_id:a9c8207642627e6ee872999123b29e36abfdd071dba36ea6f0c11dd59ea46410
+Ctrl.type = type:F
+Output = b1b1bba896b0fd75a90187eae6cdf744d23884caa5f4ca979ced327ca1239771
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101008cd7061a3591b477989a4deb1bfc6debe874f753a4686eef11d1fa0e6796800db97c38497992b220d6e40d8f9154743b533666c8689db8cdffd38ac4009f85cfc6e48dc2fe94f78870138994ab4189e8d461a00b03425d8d838061b44e7ccd41e3a0332ab68afbf2919763c9f03747637db87a50d766504199fba6c34d216580fcd77756a6004ff485a79cdb646f0adde47a727e028261c808e0cb31928071701a0f2d2d237c293b93e80854f4e43243eaeb96cc25e00f74e2cd414c72774c7995757e93c0a9aac5ef5b0d23bef9ce475bfe697d14b815eeb0535d6e7e438bdb54aa2d8f50d05564d17c3ff2bc3451ca5b932f320c20f1c256c61ed503be2528
+Ctrl.hexxcghash = hexxcghash:53fc521edf6dea9daf619676276766508d32c1964943e9bd40b4ed2cdefa7c20
+Ctrl.hexsession_id = hexsession_id:14c6727d8e211c7632f930e716ab360e0916b1da3409367ef52d9e21512c700d
+Ctrl.type = type:A
+Output = b5c636c93e002f1fac0b78eb423d92cf
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101008cd7061a3591b477989a4deb1bfc6debe874f753a4686eef11d1fa0e6796800db97c38497992b220d6e40d8f9154743b533666c8689db8cdffd38ac4009f85cfc6e48dc2fe94f78870138994ab4189e8d461a00b03425d8d838061b44e7ccd41e3a0332ab68afbf2919763c9f03747637db87a50d766504199fba6c34d216580fcd77756a6004ff485a79cdb646f0adde47a727e028261c808e0cb31928071701a0f2d2d237c293b93e80854f4e43243eaeb96cc25e00f74e2cd414c72774c7995757e93c0a9aac5ef5b0d23bef9ce475bfe697d14b815eeb0535d6e7e438bdb54aa2d8f50d05564d17c3ff2bc3451ca5b932f320c20f1c256c61ed503be2528
+Ctrl.hexxcghash = hexxcghash:53fc521edf6dea9daf619676276766508d32c1964943e9bd40b4ed2cdefa7c20
+Ctrl.hexsession_id = hexsession_id:14c6727d8e211c7632f930e716ab360e0916b1da3409367ef52d9e21512c700d
+Ctrl.type = type:B
+Output = 64d82bef35e924abf030fe42cda10e81
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101008cd7061a3591b477989a4deb1bfc6debe874f753a4686eef11d1fa0e6796800db97c38497992b220d6e40d8f9154743b533666c8689db8cdffd38ac4009f85cfc6e48dc2fe94f78870138994ab4189e8d461a00b03425d8d838061b44e7ccd41e3a0332ab68afbf2919763c9f03747637db87a50d766504199fba6c34d216580fcd77756a6004ff485a79cdb646f0adde47a727e028261c808e0cb31928071701a0f2d2d237c293b93e80854f4e43243eaeb96cc25e00f74e2cd414c72774c7995757e93c0a9aac5ef5b0d23bef9ce475bfe697d14b815eeb0535d6e7e438bdb54aa2d8f50d05564d17c3ff2bc3451ca5b932f320c20f1c256c61ed503be2528
+Ctrl.hexxcghash = hexxcghash:53fc521edf6dea9daf619676276766508d32c1964943e9bd40b4ed2cdefa7c20
+Ctrl.hexsession_id = hexsession_id:14c6727d8e211c7632f930e716ab360e0916b1da3409367ef52d9e21512c700d
+Ctrl.type = type:C
+Output = 76a1b8b85d0ea49c68f30d7448155901
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101008cd7061a3591b477989a4deb1bfc6debe874f753a4686eef11d1fa0e6796800db97c38497992b220d6e40d8f9154743b533666c8689db8cdffd38ac4009f85cfc6e48dc2fe94f78870138994ab4189e8d461a00b03425d8d838061b44e7ccd41e3a0332ab68afbf2919763c9f03747637db87a50d766504199fba6c34d216580fcd77756a6004ff485a79cdb646f0adde47a727e028261c808e0cb31928071701a0f2d2d237c293b93e80854f4e43243eaeb96cc25e00f74e2cd414c72774c7995757e93c0a9aac5ef5b0d23bef9ce475bfe697d14b815eeb0535d6e7e438bdb54aa2d8f50d05564d17c3ff2bc3451ca5b932f320c20f1c256c61ed503be2528
+Ctrl.hexxcghash = hexxcghash:53fc521edf6dea9daf619676276766508d32c1964943e9bd40b4ed2cdefa7c20
+Ctrl.hexsession_id = hexsession_id:14c6727d8e211c7632f930e716ab360e0916b1da3409367ef52d9e21512c700d
+Ctrl.type = type:D
+Output = f136e09324b1ef12b92bf35d5b3dd8e2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101008cd7061a3591b477989a4deb1bfc6debe874f753a4686eef11d1fa0e6796800db97c38497992b220d6e40d8f9154743b533666c8689db8cdffd38ac4009f85cfc6e48dc2fe94f78870138994ab4189e8d461a00b03425d8d838061b44e7ccd41e3a0332ab68afbf2919763c9f03747637db87a50d766504199fba6c34d216580fcd77756a6004ff485a79cdb646f0adde47a727e028261c808e0cb31928071701a0f2d2d237c293b93e80854f4e43243eaeb96cc25e00f74e2cd414c72774c7995757e93c0a9aac5ef5b0d23bef9ce475bfe697d14b815eeb0535d6e7e438bdb54aa2d8f50d05564d17c3ff2bc3451ca5b932f320c20f1c256c61ed503be2528
+Ctrl.hexxcghash = hexxcghash:53fc521edf6dea9daf619676276766508d32c1964943e9bd40b4ed2cdefa7c20
+Ctrl.hexsession_id = hexsession_id:14c6727d8e211c7632f930e716ab360e0916b1da3409367ef52d9e21512c700d
+Ctrl.type = type:E
+Output = 77abc45165b126f9127d59fbe655140cd3f768cd0498c29aa69cb5d65f7b0d50
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101008cd7061a3591b477989a4deb1bfc6debe874f753a4686eef11d1fa0e6796800db97c38497992b220d6e40d8f9154743b533666c8689db8cdffd38ac4009f85cfc6e48dc2fe94f78870138994ab4189e8d461a00b03425d8d838061b44e7ccd41e3a0332ab68afbf2919763c9f03747637db87a50d766504199fba6c34d216580fcd77756a6004ff485a79cdb646f0adde47a727e028261c808e0cb31928071701a0f2d2d237c293b93e80854f4e43243eaeb96cc25e00f74e2cd414c72774c7995757e93c0a9aac5ef5b0d23bef9ce475bfe697d14b815eeb0535d6e7e438bdb54aa2d8f50d05564d17c3ff2bc3451ca5b932f320c20f1c256c61ed503be2528
+Ctrl.hexxcghash = hexxcghash:53fc521edf6dea9daf619676276766508d32c1964943e9bd40b4ed2cdefa7c20
+Ctrl.hexsession_id = hexsession_id:14c6727d8e211c7632f930e716ab360e0916b1da3409367ef52d9e21512c700d
+Ctrl.type = type:F
+Output = d43f93faf692f59bc96fd480fb336033c94ee237ceece69691ffaa64bdd7fcc1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b0b6fe41d565564f87ae984aadc75902d95828bdee0bba0ecc176afd5cc9c3ec79a34a9f7cf44ee6cbdcb5d8f027bb64c4c3b73e2f891ee06b781f3d7f02b59f95cbbfb2725b208856f3ebb8195fef1596248d56a371ed7acf3b973c627976e0cf156f340aa01acfbe9b574d4dedd4cbb66cb6ca5d9e76f16385be532fed8dd65735a3ecddeeb295133bb8a59499b4777242a4a7e463481d26baece4c7ef224aaf40af4d5108d024f5dd174cfdb91213939e355b0a1ca51ed6f7f584a4e47a0f1482d6a5768b1236e25d837cc8a2b49b2176bb54b2f77f4212ba394336e6a6046def9205fe482d98fcdd8d0a2643a39d753d2d481fe6689b0dc0d1c078335b7
+Ctrl.hexxcghash = hexxcghash:27faf1b9a15e505a0b46c47e2bf6ab5fff37a6dadb09e96ea9562091f1d88ce0
+Ctrl.hexsession_id = hexsession_id:6b52ddb87a66f0f1bb0dad39b462e7bd42bdeb99049d5a3581ca6f056c398228
+Ctrl.type = type:A
+Output = 3b3c4416d3121a6838dd3f94a84b6ec6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b0b6fe41d565564f87ae984aadc75902d95828bdee0bba0ecc176afd5cc9c3ec79a34a9f7cf44ee6cbdcb5d8f027bb64c4c3b73e2f891ee06b781f3d7f02b59f95cbbfb2725b208856f3ebb8195fef1596248d56a371ed7acf3b973c627976e0cf156f340aa01acfbe9b574d4dedd4cbb66cb6ca5d9e76f16385be532fed8dd65735a3ecddeeb295133bb8a59499b4777242a4a7e463481d26baece4c7ef224aaf40af4d5108d024f5dd174cfdb91213939e355b0a1ca51ed6f7f584a4e47a0f1482d6a5768b1236e25d837cc8a2b49b2176bb54b2f77f4212ba394336e6a6046def9205fe482d98fcdd8d0a2643a39d753d2d481fe6689b0dc0d1c078335b7
+Ctrl.hexxcghash = hexxcghash:27faf1b9a15e505a0b46c47e2bf6ab5fff37a6dadb09e96ea9562091f1d88ce0
+Ctrl.hexsession_id = hexsession_id:6b52ddb87a66f0f1bb0dad39b462e7bd42bdeb99049d5a3581ca6f056c398228
+Ctrl.type = type:B
+Output = e0af22a9184e5cea74f3e90faf5212ba
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b0b6fe41d565564f87ae984aadc75902d95828bdee0bba0ecc176afd5cc9c3ec79a34a9f7cf44ee6cbdcb5d8f027bb64c4c3b73e2f891ee06b781f3d7f02b59f95cbbfb2725b208856f3ebb8195fef1596248d56a371ed7acf3b973c627976e0cf156f340aa01acfbe9b574d4dedd4cbb66cb6ca5d9e76f16385be532fed8dd65735a3ecddeeb295133bb8a59499b4777242a4a7e463481d26baece4c7ef224aaf40af4d5108d024f5dd174cfdb91213939e355b0a1ca51ed6f7f584a4e47a0f1482d6a5768b1236e25d837cc8a2b49b2176bb54b2f77f4212ba394336e6a6046def9205fe482d98fcdd8d0a2643a39d753d2d481fe6689b0dc0d1c078335b7
+Ctrl.hexxcghash = hexxcghash:27faf1b9a15e505a0b46c47e2bf6ab5fff37a6dadb09e96ea9562091f1d88ce0
+Ctrl.hexsession_id = hexsession_id:6b52ddb87a66f0f1bb0dad39b462e7bd42bdeb99049d5a3581ca6f056c398228
+Ctrl.type = type:C
+Output = a3a7a9e48cc09a927e2d6eddd7647368
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b0b6fe41d565564f87ae984aadc75902d95828bdee0bba0ecc176afd5cc9c3ec79a34a9f7cf44ee6cbdcb5d8f027bb64c4c3b73e2f891ee06b781f3d7f02b59f95cbbfb2725b208856f3ebb8195fef1596248d56a371ed7acf3b973c627976e0cf156f340aa01acfbe9b574d4dedd4cbb66cb6ca5d9e76f16385be532fed8dd65735a3ecddeeb295133bb8a59499b4777242a4a7e463481d26baece4c7ef224aaf40af4d5108d024f5dd174cfdb91213939e355b0a1ca51ed6f7f584a4e47a0f1482d6a5768b1236e25d837cc8a2b49b2176bb54b2f77f4212ba394336e6a6046def9205fe482d98fcdd8d0a2643a39d753d2d481fe6689b0dc0d1c078335b7
+Ctrl.hexxcghash = hexxcghash:27faf1b9a15e505a0b46c47e2bf6ab5fff37a6dadb09e96ea9562091f1d88ce0
+Ctrl.hexsession_id = hexsession_id:6b52ddb87a66f0f1bb0dad39b462e7bd42bdeb99049d5a3581ca6f056c398228
+Ctrl.type = type:D
+Output = b9411d2870e885e223a6b414ae6ac813
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b0b6fe41d565564f87ae984aadc75902d95828bdee0bba0ecc176afd5cc9c3ec79a34a9f7cf44ee6cbdcb5d8f027bb64c4c3b73e2f891ee06b781f3d7f02b59f95cbbfb2725b208856f3ebb8195fef1596248d56a371ed7acf3b973c627976e0cf156f340aa01acfbe9b574d4dedd4cbb66cb6ca5d9e76f16385be532fed8dd65735a3ecddeeb295133bb8a59499b4777242a4a7e463481d26baece4c7ef224aaf40af4d5108d024f5dd174cfdb91213939e355b0a1ca51ed6f7f584a4e47a0f1482d6a5768b1236e25d837cc8a2b49b2176bb54b2f77f4212ba394336e6a6046def9205fe482d98fcdd8d0a2643a39d753d2d481fe6689b0dc0d1c078335b7
+Ctrl.hexxcghash = hexxcghash:27faf1b9a15e505a0b46c47e2bf6ab5fff37a6dadb09e96ea9562091f1d88ce0
+Ctrl.hexsession_id = hexsession_id:6b52ddb87a66f0f1bb0dad39b462e7bd42bdeb99049d5a3581ca6f056c398228
+Ctrl.type = type:E
+Output = 7f11812c28229fd8e39367b8885045313fea6322f22a69b6436caa4fb6c2d915
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000101009b0b6fe41d565564f87ae984aadc75902d95828bdee0bba0ecc176afd5cc9c3ec79a34a9f7cf44ee6cbdcb5d8f027bb64c4c3b73e2f891ee06b781f3d7f02b59f95cbbfb2725b208856f3ebb8195fef1596248d56a371ed7acf3b973c627976e0cf156f340aa01acfbe9b574d4dedd4cbb66cb6ca5d9e76f16385be532fed8dd65735a3ecddeeb295133bb8a59499b4777242a4a7e463481d26baece4c7ef224aaf40af4d5108d024f5dd174cfdb91213939e355b0a1ca51ed6f7f584a4e47a0f1482d6a5768b1236e25d837cc8a2b49b2176bb54b2f77f4212ba394336e6a6046def9205fe482d98fcdd8d0a2643a39d753d2d481fe6689b0dc0d1c078335b7
+Ctrl.hexxcghash = hexxcghash:27faf1b9a15e505a0b46c47e2bf6ab5fff37a6dadb09e96ea9562091f1d88ce0
+Ctrl.hexsession_id = hexsession_id:6b52ddb87a66f0f1bb0dad39b462e7bd42bdeb99049d5a3581ca6f056c398228
+Ctrl.type = type:F
+Output = 4fc39e2a1e7038f2664a48986e8227c213e577eafea082f46cb08d087e642fe4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100435266668e94e5f35d31f10f7b486bed8a88465cf30711e54f8c6550a917916fb7160c41880d364df5084446d7834e32917882c10eef49f8192fa6ff4c9498a12d87bbf710d4bba3e76a6681c7ac3470e6f5e80c55851dcca38a9ce48b015ab73b24e28e0553f3a1bbe1dfa9b67bb9cb9372ad0fb0aaf443c3a8927d00b9b2705f4d1b219c80f7caa637c986de79410c5924943128e64cf869491f19c1646cb403d8543d5aaaea7fbaaaa1a846b9851f4f708b14266e55839e1d61b67a60359c2c111841839225c0f940252506be02ba43fcc7c4be7cb01c64094fbd9a78cc331c6e7809e0be3a4b693adfeedd1b20ad36d321498b396fce7cf169b2fb10e54b
+Ctrl.hexxcghash = hexxcghash:d7303e57a2bf969f815c1b2fd08a879226c0e95c9897fb5586200c0f5e0a8a23
+Ctrl.hexsession_id = hexsession_id:20ace711e8190f5bbd2168bc93061c903899acd41697b76d0f6667d2bf345725
+Ctrl.type = type:A
+Output = b71bd280b230b6fb9b326a3544ab9c90
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100435266668e94e5f35d31f10f7b486bed8a88465cf30711e54f8c6550a917916fb7160c41880d364df5084446d7834e32917882c10eef49f8192fa6ff4c9498a12d87bbf710d4bba3e76a6681c7ac3470e6f5e80c55851dcca38a9ce48b015ab73b24e28e0553f3a1bbe1dfa9b67bb9cb9372ad0fb0aaf443c3a8927d00b9b2705f4d1b219c80f7caa637c986de79410c5924943128e64cf869491f19c1646cb403d8543d5aaaea7fbaaaa1a846b9851f4f708b14266e55839e1d61b67a60359c2c111841839225c0f940252506be02ba43fcc7c4be7cb01c64094fbd9a78cc331c6e7809e0be3a4b693adfeedd1b20ad36d321498b396fce7cf169b2fb10e54b
+Ctrl.hexxcghash = hexxcghash:d7303e57a2bf969f815c1b2fd08a879226c0e95c9897fb5586200c0f5e0a8a23
+Ctrl.hexsession_id = hexsession_id:20ace711e8190f5bbd2168bc93061c903899acd41697b76d0f6667d2bf345725
+Ctrl.type = type:B
+Output = ca38c1b5940e1417fb8caa6ab6deaf18
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100435266668e94e5f35d31f10f7b486bed8a88465cf30711e54f8c6550a917916fb7160c41880d364df5084446d7834e32917882c10eef49f8192fa6ff4c9498a12d87bbf710d4bba3e76a6681c7ac3470e6f5e80c55851dcca38a9ce48b015ab73b24e28e0553f3a1bbe1dfa9b67bb9cb9372ad0fb0aaf443c3a8927d00b9b2705f4d1b219c80f7caa637c986de79410c5924943128e64cf869491f19c1646cb403d8543d5aaaea7fbaaaa1a846b9851f4f708b14266e55839e1d61b67a60359c2c111841839225c0f940252506be02ba43fcc7c4be7cb01c64094fbd9a78cc331c6e7809e0be3a4b693adfeedd1b20ad36d321498b396fce7cf169b2fb10e54b
+Ctrl.hexxcghash = hexxcghash:d7303e57a2bf969f815c1b2fd08a879226c0e95c9897fb5586200c0f5e0a8a23
+Ctrl.hexsession_id = hexsession_id:20ace711e8190f5bbd2168bc93061c903899acd41697b76d0f6667d2bf345725
+Ctrl.type = type:C
+Output = 5d02347e16760101a3689bf0087ed947
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100435266668e94e5f35d31f10f7b486bed8a88465cf30711e54f8c6550a917916fb7160c41880d364df5084446d7834e32917882c10eef49f8192fa6ff4c9498a12d87bbf710d4bba3e76a6681c7ac3470e6f5e80c55851dcca38a9ce48b015ab73b24e28e0553f3a1bbe1dfa9b67bb9cb9372ad0fb0aaf443c3a8927d00b9b2705f4d1b219c80f7caa637c986de79410c5924943128e64cf869491f19c1646cb403d8543d5aaaea7fbaaaa1a846b9851f4f708b14266e55839e1d61b67a60359c2c111841839225c0f940252506be02ba43fcc7c4be7cb01c64094fbd9a78cc331c6e7809e0be3a4b693adfeedd1b20ad36d321498b396fce7cf169b2fb10e54b
+Ctrl.hexxcghash = hexxcghash:d7303e57a2bf969f815c1b2fd08a879226c0e95c9897fb5586200c0f5e0a8a23
+Ctrl.hexsession_id = hexsession_id:20ace711e8190f5bbd2168bc93061c903899acd41697b76d0f6667d2bf345725
+Ctrl.type = type:D
+Output = 2fb5e0eb5552f7e26ad9651bd22f1666
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100435266668e94e5f35d31f10f7b486bed8a88465cf30711e54f8c6550a917916fb7160c41880d364df5084446d7834e32917882c10eef49f8192fa6ff4c9498a12d87bbf710d4bba3e76a6681c7ac3470e6f5e80c55851dcca38a9ce48b015ab73b24e28e0553f3a1bbe1dfa9b67bb9cb9372ad0fb0aaf443c3a8927d00b9b2705f4d1b219c80f7caa637c986de79410c5924943128e64cf869491f19c1646cb403d8543d5aaaea7fbaaaa1a846b9851f4f708b14266e55839e1d61b67a60359c2c111841839225c0f940252506be02ba43fcc7c4be7cb01c64094fbd9a78cc331c6e7809e0be3a4b693adfeedd1b20ad36d321498b396fce7cf169b2fb10e54b
+Ctrl.hexxcghash = hexxcghash:d7303e57a2bf969f815c1b2fd08a879226c0e95c9897fb5586200c0f5e0a8a23
+Ctrl.hexsession_id = hexsession_id:20ace711e8190f5bbd2168bc93061c903899acd41697b76d0f6667d2bf345725
+Ctrl.type = type:E
+Output = b7b7c4292a73e7d378284b12b318e0cd3ad714904b4ef9c83d44ee06ff49b1e1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100435266668e94e5f35d31f10f7b486bed8a88465cf30711e54f8c6550a917916fb7160c41880d364df5084446d7834e32917882c10eef49f8192fa6ff4c9498a12d87bbf710d4bba3e76a6681c7ac3470e6f5e80c55851dcca38a9ce48b015ab73b24e28e0553f3a1bbe1dfa9b67bb9cb9372ad0fb0aaf443c3a8927d00b9b2705f4d1b219c80f7caa637c986de79410c5924943128e64cf869491f19c1646cb403d8543d5aaaea7fbaaaa1a846b9851f4f708b14266e55839e1d61b67a60359c2c111841839225c0f940252506be02ba43fcc7c4be7cb01c64094fbd9a78cc331c6e7809e0be3a4b693adfeedd1b20ad36d321498b396fce7cf169b2fb10e54b
+Ctrl.hexxcghash = hexxcghash:d7303e57a2bf969f815c1b2fd08a879226c0e95c9897fb5586200c0f5e0a8a23
+Ctrl.hexsession_id = hexsession_id:20ace711e8190f5bbd2168bc93061c903899acd41697b76d0f6667d2bf345725
+Ctrl.type = type:F
+Output = c9884e71b158f2255fb204733e888bc5b2ee38a5493de9d0ef6700949159ac6a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100745f5abd8fb685eaae10854a96900806cd7d17d2d255990328594a4fdbb9fa28088ccb8fbf92ef23492a595f92c49d5fa32ea5ef6d76000635fb58496c9db824aaa41b67c3c2e8bdd525f6c6a224562c670076f6efd21fe49222c2627596b775c56dff5d477cd4cc008ef566086a495cf4ba634af20a42fb13fa52597dc252edebdfa57592494fd9cd44d0f7e27d6a6ff370876c42733977db656d7372d553c2ffc824fb02375e55069d5cccb493ec77001fb4cd73cbec6976bd45ae2cc0812c078784d917c0a0a54d8df6c745a2710828939be0685d7fc1657eee9c4dbc71615fab0174e62fb7971fa20f6d6b2da1c22c0a35c781c9dbdf009cec3d89891afc
+Ctrl.hexxcghash = hexxcghash:35f601a7877ef637d6c40b4f2e1d85b888eceac9f37e686254f9d707b22bd764
+Ctrl.hexsession_id = hexsession_id:d04bce75141ed2a44942d98354ded46e861da28fc1175e5a22e8dddad4942f9a
+Ctrl.type = type:A
+Output = 88af3bdb49bd8e9d24489efc95dea1c1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100745f5abd8fb685eaae10854a96900806cd7d17d2d255990328594a4fdbb9fa28088ccb8fbf92ef23492a595f92c49d5fa32ea5ef6d76000635fb58496c9db824aaa41b67c3c2e8bdd525f6c6a224562c670076f6efd21fe49222c2627596b775c56dff5d477cd4cc008ef566086a495cf4ba634af20a42fb13fa52597dc252edebdfa57592494fd9cd44d0f7e27d6a6ff370876c42733977db656d7372d553c2ffc824fb02375e55069d5cccb493ec77001fb4cd73cbec6976bd45ae2cc0812c078784d917c0a0a54d8df6c745a2710828939be0685d7fc1657eee9c4dbc71615fab0174e62fb7971fa20f6d6b2da1c22c0a35c781c9dbdf009cec3d89891afc
+Ctrl.hexxcghash = hexxcghash:35f601a7877ef637d6c40b4f2e1d85b888eceac9f37e686254f9d707b22bd764
+Ctrl.hexsession_id = hexsession_id:d04bce75141ed2a44942d98354ded46e861da28fc1175e5a22e8dddad4942f9a
+Ctrl.type = type:B
+Output = 5cf41e1d43f797c16a30e070f2f37dd4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100745f5abd8fb685eaae10854a96900806cd7d17d2d255990328594a4fdbb9fa28088ccb8fbf92ef23492a595f92c49d5fa32ea5ef6d76000635fb58496c9db824aaa41b67c3c2e8bdd525f6c6a224562c670076f6efd21fe49222c2627596b775c56dff5d477cd4cc008ef566086a495cf4ba634af20a42fb13fa52597dc252edebdfa57592494fd9cd44d0f7e27d6a6ff370876c42733977db656d7372d553c2ffc824fb02375e55069d5cccb493ec77001fb4cd73cbec6976bd45ae2cc0812c078784d917c0a0a54d8df6c745a2710828939be0685d7fc1657eee9c4dbc71615fab0174e62fb7971fa20f6d6b2da1c22c0a35c781c9dbdf009cec3d89891afc
+Ctrl.hexxcghash = hexxcghash:35f601a7877ef637d6c40b4f2e1d85b888eceac9f37e686254f9d707b22bd764
+Ctrl.hexsession_id = hexsession_id:d04bce75141ed2a44942d98354ded46e861da28fc1175e5a22e8dddad4942f9a
+Ctrl.type = type:C
+Output = 7cc48e0f8b4bdd63f76e41ba411d7f37
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100745f5abd8fb685eaae10854a96900806cd7d17d2d255990328594a4fdbb9fa28088ccb8fbf92ef23492a595f92c49d5fa32ea5ef6d76000635fb58496c9db824aaa41b67c3c2e8bdd525f6c6a224562c670076f6efd21fe49222c2627596b775c56dff5d477cd4cc008ef566086a495cf4ba634af20a42fb13fa52597dc252edebdfa57592494fd9cd44d0f7e27d6a6ff370876c42733977db656d7372d553c2ffc824fb02375e55069d5cccb493ec77001fb4cd73cbec6976bd45ae2cc0812c078784d917c0a0a54d8df6c745a2710828939be0685d7fc1657eee9c4dbc71615fab0174e62fb7971fa20f6d6b2da1c22c0a35c781c9dbdf009cec3d89891afc
+Ctrl.hexxcghash = hexxcghash:35f601a7877ef637d6c40b4f2e1d85b888eceac9f37e686254f9d707b22bd764
+Ctrl.hexsession_id = hexsession_id:d04bce75141ed2a44942d98354ded46e861da28fc1175e5a22e8dddad4942f9a
+Ctrl.type = type:D
+Output = 37d942416267be06cd1ff9498dcf1e6e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100745f5abd8fb685eaae10854a96900806cd7d17d2d255990328594a4fdbb9fa28088ccb8fbf92ef23492a595f92c49d5fa32ea5ef6d76000635fb58496c9db824aaa41b67c3c2e8bdd525f6c6a224562c670076f6efd21fe49222c2627596b775c56dff5d477cd4cc008ef566086a495cf4ba634af20a42fb13fa52597dc252edebdfa57592494fd9cd44d0f7e27d6a6ff370876c42733977db656d7372d553c2ffc824fb02375e55069d5cccb493ec77001fb4cd73cbec6976bd45ae2cc0812c078784d917c0a0a54d8df6c745a2710828939be0685d7fc1657eee9c4dbc71615fab0174e62fb7971fa20f6d6b2da1c22c0a35c781c9dbdf009cec3d89891afc
+Ctrl.hexxcghash = hexxcghash:35f601a7877ef637d6c40b4f2e1d85b888eceac9f37e686254f9d707b22bd764
+Ctrl.hexsession_id = hexsession_id:d04bce75141ed2a44942d98354ded46e861da28fc1175e5a22e8dddad4942f9a
+Ctrl.type = type:E
+Output = c3c8b48e228a3a671ae8c48aa4e4f1fe32c1ad4d5ae48c904836d13e7350f72e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:00000100745f5abd8fb685eaae10854a96900806cd7d17d2d255990328594a4fdbb9fa28088ccb8fbf92ef23492a595f92c49d5fa32ea5ef6d76000635fb58496c9db824aaa41b67c3c2e8bdd525f6c6a224562c670076f6efd21fe49222c2627596b775c56dff5d477cd4cc008ef566086a495cf4ba634af20a42fb13fa52597dc252edebdfa57592494fd9cd44d0f7e27d6a6ff370876c42733977db656d7372d553c2ffc824fb02375e55069d5cccb493ec77001fb4cd73cbec6976bd45ae2cc0812c078784d917c0a0a54d8df6c745a2710828939be0685d7fc1657eee9c4dbc71615fab0174e62fb7971fa20f6d6b2da1c22c0a35c781c9dbdf009cec3d89891afc
+Ctrl.hexxcghash = hexxcghash:35f601a7877ef637d6c40b4f2e1d85b888eceac9f37e686254f9d707b22bd764
+Ctrl.hexsession_id = hexsession_id:d04bce75141ed2a44942d98354ded46e861da28fc1175e5a22e8dddad4942f9a
+Ctrl.type = type:F
+Output = 605f7d3b3f28a8967402ba67ff916a61b0a4e9b736665c5e911fb33f60dc16fe
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001010089b741b0b9a6704f56df9aafe5f4294828fdc67f4243e9aa9b1d83166ad892f2d970fdff65eba7fa5eddb954dd86bda5262e084752c69c6b93c729ad34e9728f7c838c49f0e87349ae35feef1610b83a345c64c5b190fb5857bf0aa8419efba35789c258f19e8713e2729c184eab9d9c33a32ab3731d77e207a91849625bb855e581ca0be5d9f961aab9d65b463e416ee3d636ece573ead0d088a2fe05d87dd5ed21031f4dbea831112d3bd0e1cc1087a8395430cde3cb54d22a5965dd825329bee8c62d4599fb67ff90260204c6e608e6246f768e29a60cb85f580d4751f9c017cbf4e6062a160c6ff1d0c9d303a2c862a4986e22f72da79b17b868cee189a2
+Ctrl.hexxcghash = hexxcghash:61e49599eb3b01e3d7bc65415ce7004e20bf77805a4ff09681f3856adc129943
+Ctrl.hexsession_id = hexsession_id:832400eb1c4031502f7249d0a4279a7cbe4d4d6979289d02837d98b9ca16ff46
+Ctrl.type = type:A
+Output = 7b91adc6eb48a6f82a8990efd2537903
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001010089b741b0b9a6704f56df9aafe5f4294828fdc67f4243e9aa9b1d83166ad892f2d970fdff65eba7fa5eddb954dd86bda5262e084752c69c6b93c729ad34e9728f7c838c49f0e87349ae35feef1610b83a345c64c5b190fb5857bf0aa8419efba35789c258f19e8713e2729c184eab9d9c33a32ab3731d77e207a91849625bb855e581ca0be5d9f961aab9d65b463e416ee3d636ece573ead0d088a2fe05d87dd5ed21031f4dbea831112d3bd0e1cc1087a8395430cde3cb54d22a5965dd825329bee8c62d4599fb67ff90260204c6e608e6246f768e29a60cb85f580d4751f9c017cbf4e6062a160c6ff1d0c9d303a2c862a4986e22f72da79b17b868cee189a2
+Ctrl.hexxcghash = hexxcghash:61e49599eb3b01e3d7bc65415ce7004e20bf77805a4ff09681f3856adc129943
+Ctrl.hexsession_id = hexsession_id:832400eb1c4031502f7249d0a4279a7cbe4d4d6979289d02837d98b9ca16ff46
+Ctrl.type = type:B
+Output = 814c8fb54a535b38d4c2301aa49ad702
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001010089b741b0b9a6704f56df9aafe5f4294828fdc67f4243e9aa9b1d83166ad892f2d970fdff65eba7fa5eddb954dd86bda5262e084752c69c6b93c729ad34e9728f7c838c49f0e87349ae35feef1610b83a345c64c5b190fb5857bf0aa8419efba35789c258f19e8713e2729c184eab9d9c33a32ab3731d77e207a91849625bb855e581ca0be5d9f961aab9d65b463e416ee3d636ece573ead0d088a2fe05d87dd5ed21031f4dbea831112d3bd0e1cc1087a8395430cde3cb54d22a5965dd825329bee8c62d4599fb67ff90260204c6e608e6246f768e29a60cb85f580d4751f9c017cbf4e6062a160c6ff1d0c9d303a2c862a4986e22f72da79b17b868cee189a2
+Ctrl.hexxcghash = hexxcghash:61e49599eb3b01e3d7bc65415ce7004e20bf77805a4ff09681f3856adc129943
+Ctrl.hexsession_id = hexsession_id:832400eb1c4031502f7249d0a4279a7cbe4d4d6979289d02837d98b9ca16ff46
+Ctrl.type = type:C
+Output = 3ec64c8571c7c7f39a9f37c0e1053324
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001010089b741b0b9a6704f56df9aafe5f4294828fdc67f4243e9aa9b1d83166ad892f2d970fdff65eba7fa5eddb954dd86bda5262e084752c69c6b93c729ad34e9728f7c838c49f0e87349ae35feef1610b83a345c64c5b190fb5857bf0aa8419efba35789c258f19e8713e2729c184eab9d9c33a32ab3731d77e207a91849625bb855e581ca0be5d9f961aab9d65b463e416ee3d636ece573ead0d088a2fe05d87dd5ed21031f4dbea831112d3bd0e1cc1087a8395430cde3cb54d22a5965dd825329bee8c62d4599fb67ff90260204c6e608e6246f768e29a60cb85f580d4751f9c017cbf4e6062a160c6ff1d0c9d303a2c862a4986e22f72da79b17b868cee189a2
+Ctrl.hexxcghash = hexxcghash:61e49599eb3b01e3d7bc65415ce7004e20bf77805a4ff09681f3856adc129943
+Ctrl.hexsession_id = hexsession_id:832400eb1c4031502f7249d0a4279a7cbe4d4d6979289d02837d98b9ca16ff46
+Ctrl.type = type:D
+Output = 846d40dc45123f2710e27bd3140070c8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001010089b741b0b9a6704f56df9aafe5f4294828fdc67f4243e9aa9b1d83166ad892f2d970fdff65eba7fa5eddb954dd86bda5262e084752c69c6b93c729ad34e9728f7c838c49f0e87349ae35feef1610b83a345c64c5b190fb5857bf0aa8419efba35789c258f19e8713e2729c184eab9d9c33a32ab3731d77e207a91849625bb855e581ca0be5d9f961aab9d65b463e416ee3d636ece573ead0d088a2fe05d87dd5ed21031f4dbea831112d3bd0e1cc1087a8395430cde3cb54d22a5965dd825329bee8c62d4599fb67ff90260204c6e608e6246f768e29a60cb85f580d4751f9c017cbf4e6062a160c6ff1d0c9d303a2c862a4986e22f72da79b17b868cee189a2
+Ctrl.hexxcghash = hexxcghash:61e49599eb3b01e3d7bc65415ce7004e20bf77805a4ff09681f3856adc129943
+Ctrl.hexsession_id = hexsession_id:832400eb1c4031502f7249d0a4279a7cbe4d4d6979289d02837d98b9ca16ff46
+Ctrl.type = type:E
+Output = c2199b9bd701c2f4ee82a145adc28f3e8fac0af8dd43cb7f3da173681bcad2e0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001010089b741b0b9a6704f56df9aafe5f4294828fdc67f4243e9aa9b1d83166ad892f2d970fdff65eba7fa5eddb954dd86bda5262e084752c69c6b93c729ad34e9728f7c838c49f0e87349ae35feef1610b83a345c64c5b190fb5857bf0aa8419efba35789c258f19e8713e2729c184eab9d9c33a32ab3731d77e207a91849625bb855e581ca0be5d9f961aab9d65b463e416ee3d636ece573ead0d088a2fe05d87dd5ed21031f4dbea831112d3bd0e1cc1087a8395430cde3cb54d22a5965dd825329bee8c62d4599fb67ff90260204c6e608e6246f768e29a60cb85f580d4751f9c017cbf4e6062a160c6ff1d0c9d303a2c862a4986e22f72da79b17b868cee189a2
+Ctrl.hexxcghash = hexxcghash:61e49599eb3b01e3d7bc65415ce7004e20bf77805a4ff09681f3856adc129943
+Ctrl.hexsession_id = hexsession_id:832400eb1c4031502f7249d0a4279a7cbe4d4d6979289d02837d98b9ca16ff46
+Ctrl.type = type:F
+Output = 49f5fb8862a4f01900f9f76d6146f181483428beadb000d4f5097adf59c5eb99
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010100f7217049f9cc4f3d59ea109a06ac3cfb79fc05dc349e1c54482072c467e503494d845004c278dabd9338d3bdb3c2f3c58cb264d65575d9946961345dcda5b9ce59cc8fdfc994acb74fe8f3b1fc143abceedc541ae74d69cd543fa7438ac5b5c84168d6e6f7fba2722c279b7cd0c1e07cdd59bb231f17174d33b7c1a6eb199cfa093476cdd31292f3bff20ae224459caaec461c76d741f0e9269ba96676a3ccebe986a3843a36747a0998bb3feaba41671db20368867a13875f76136b2418b6c807335a7133b4e4fbc0e908516ce97458abec2a32355fb061237bada4e07b950a2b1c8d41201f1c0a41c771d990e4741fef6e2eb5cd106c3b4b6000ad07b482ad
+Ctrl.hexxcghash = hexxcghash:be79b302374817c2fd052704dfba5e98b05a8346db9269e6401265a1c7970d98
+Ctrl.hexsession_id = hexsession_id:def8533bf220d0c632aa4f1b16168e51c0be904c6f299225b30bd7df7bbdc6f2
+Ctrl.type = type:A
+Output = 50afb2f3b8a3bc466b3a68f04da0d56c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010100f7217049f9cc4f3d59ea109a06ac3cfb79fc05dc349e1c54482072c467e503494d845004c278dabd9338d3bdb3c2f3c58cb264d65575d9946961345dcda5b9ce59cc8fdfc994acb74fe8f3b1fc143abceedc541ae74d69cd543fa7438ac5b5c84168d6e6f7fba2722c279b7cd0c1e07cdd59bb231f17174d33b7c1a6eb199cfa093476cdd31292f3bff20ae224459caaec461c76d741f0e9269ba96676a3ccebe986a3843a36747a0998bb3feaba41671db20368867a13875f76136b2418b6c807335a7133b4e4fbc0e908516ce97458abec2a32355fb061237bada4e07b950a2b1c8d41201f1c0a41c771d990e4741fef6e2eb5cd106c3b4b6000ad07b482ad
+Ctrl.hexxcghash = hexxcghash:be79b302374817c2fd052704dfba5e98b05a8346db9269e6401265a1c7970d98
+Ctrl.hexsession_id = hexsession_id:def8533bf220d0c632aa4f1b16168e51c0be904c6f299225b30bd7df7bbdc6f2
+Ctrl.type = type:B
+Output = b8672a8cc59ee1316fb9a2c0a82ffd73
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010100f7217049f9cc4f3d59ea109a06ac3cfb79fc05dc349e1c54482072c467e503494d845004c278dabd9338d3bdb3c2f3c58cb264d65575d9946961345dcda5b9ce59cc8fdfc994acb74fe8f3b1fc143abceedc541ae74d69cd543fa7438ac5b5c84168d6e6f7fba2722c279b7cd0c1e07cdd59bb231f17174d33b7c1a6eb199cfa093476cdd31292f3bff20ae224459caaec461c76d741f0e9269ba96676a3ccebe986a3843a36747a0998bb3feaba41671db20368867a13875f76136b2418b6c807335a7133b4e4fbc0e908516ce97458abec2a32355fb061237bada4e07b950a2b1c8d41201f1c0a41c771d990e4741fef6e2eb5cd106c3b4b6000ad07b482ad
+Ctrl.hexxcghash = hexxcghash:be79b302374817c2fd052704dfba5e98b05a8346db9269e6401265a1c7970d98
+Ctrl.hexsession_id = hexsession_id:def8533bf220d0c632aa4f1b16168e51c0be904c6f299225b30bd7df7bbdc6f2
+Ctrl.type = type:C
+Output = d854cbdb8f7544b796f982e4973d4de9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010100f7217049f9cc4f3d59ea109a06ac3cfb79fc05dc349e1c54482072c467e503494d845004c278dabd9338d3bdb3c2f3c58cb264d65575d9946961345dcda5b9ce59cc8fdfc994acb74fe8f3b1fc143abceedc541ae74d69cd543fa7438ac5b5c84168d6e6f7fba2722c279b7cd0c1e07cdd59bb231f17174d33b7c1a6eb199cfa093476cdd31292f3bff20ae224459caaec461c76d741f0e9269ba96676a3ccebe986a3843a36747a0998bb3feaba41671db20368867a13875f76136b2418b6c807335a7133b4e4fbc0e908516ce97458abec2a32355fb061237bada4e07b950a2b1c8d41201f1c0a41c771d990e4741fef6e2eb5cd106c3b4b6000ad07b482ad
+Ctrl.hexxcghash = hexxcghash:be79b302374817c2fd052704dfba5e98b05a8346db9269e6401265a1c7970d98
+Ctrl.hexsession_id = hexsession_id:def8533bf220d0c632aa4f1b16168e51c0be904c6f299225b30bd7df7bbdc6f2
+Ctrl.type = type:D
+Output = bd6bde82c451ee39069d0794f7000f38
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010100f7217049f9cc4f3d59ea109a06ac3cfb79fc05dc349e1c54482072c467e503494d845004c278dabd9338d3bdb3c2f3c58cb264d65575d9946961345dcda5b9ce59cc8fdfc994acb74fe8f3b1fc143abceedc541ae74d69cd543fa7438ac5b5c84168d6e6f7fba2722c279b7cd0c1e07cdd59bb231f17174d33b7c1a6eb199cfa093476cdd31292f3bff20ae224459caaec461c76d741f0e9269ba96676a3ccebe986a3843a36747a0998bb3feaba41671db20368867a13875f76136b2418b6c807335a7133b4e4fbc0e908516ce97458abec2a32355fb061237bada4e07b950a2b1c8d41201f1c0a41c771d990e4741fef6e2eb5cd106c3b4b6000ad07b482ad
+Ctrl.hexxcghash = hexxcghash:be79b302374817c2fd052704dfba5e98b05a8346db9269e6401265a1c7970d98
+Ctrl.hexsession_id = hexsession_id:def8533bf220d0c632aa4f1b16168e51c0be904c6f299225b30bd7df7bbdc6f2
+Ctrl.type = type:E
+Output = 270794ec70fcd9d742aad66c54001b4c218ae8cca813453560a9aeaacc6909ec
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:0000010100f7217049f9cc4f3d59ea109a06ac3cfb79fc05dc349e1c54482072c467e503494d845004c278dabd9338d3bdb3c2f3c58cb264d65575d9946961345dcda5b9ce59cc8fdfc994acb74fe8f3b1fc143abceedc541ae74d69cd543fa7438ac5b5c84168d6e6f7fba2722c279b7cd0c1e07cdd59bb231f17174d33b7c1a6eb199cfa093476cdd31292f3bff20ae224459caaec461c76d741f0e9269ba96676a3ccebe986a3843a36747a0998bb3feaba41671db20368867a13875f76136b2418b6c807335a7133b4e4fbc0e908516ce97458abec2a32355fb061237bada4e07b950a2b1c8d41201f1c0a41c771d990e4741fef6e2eb5cd106c3b4b6000ad07b482ad
+Ctrl.hexxcghash = hexxcghash:be79b302374817c2fd052704dfba5e98b05a8346db9269e6401265a1c7970d98
+Ctrl.hexsession_id = hexsession_id:def8533bf220d0c632aa4f1b16168e51c0be904c6f299225b30bd7df7bbdc6f2
+Ctrl.type = type:F
+Output = e967df7571a0eb82f59ddfead22c617beeefa25ce4afd80ac8320bc2635c70d0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001001b3a1cab1e87a29e229efcae0f569d855a61d6da6ea0ae5bed3491c7bdb5f70f6caf8dc305100160bbf6ecd726b11799da685ce4528ee689fe292043e318ad9f797bd5746399e007cf1f40d7918b85e4607f6e674da84709543dd0d50ad1d5c993770b4d0c045fdef89d5534c3d77edd8dc4536a10cc2b5d0bd14caa7e029ba8a81d5f5fb16524b56ddb9f35d96593955514b80d89b711ff717e11ad3d691424f6cefc5c613b04e5532d89f91383e4a6f45058604bb63876b1308dc7eb8f86cb5c032e6f1f061646e0bbf27b0c7eaa8216ba9381cb7734df24fe6691183c4823d3b645f3139a45b2b8ee3909bb431477f332ea3616b919724782fda8546a3235
+Ctrl.hexxcghash = hexxcghash:fe491f41cdbcaec6b8821eda916eb03bc1a0e934c14850696f79bd30c73a18e2
+Ctrl.hexsession_id = hexsession_id:df1c0910cf8b81ca157916b8ac0411b7363f62ce10ee23cbb69ddfe8c3f16be9
+Ctrl.type = type:A
+Output = ebb3d10f461d8697a064461822f34507
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001001b3a1cab1e87a29e229efcae0f569d855a61d6da6ea0ae5bed3491c7bdb5f70f6caf8dc305100160bbf6ecd726b11799da685ce4528ee689fe292043e318ad9f797bd5746399e007cf1f40d7918b85e4607f6e674da84709543dd0d50ad1d5c993770b4d0c045fdef89d5534c3d77edd8dc4536a10cc2b5d0bd14caa7e029ba8a81d5f5fb16524b56ddb9f35d96593955514b80d89b711ff717e11ad3d691424f6cefc5c613b04e5532d89f91383e4a6f45058604bb63876b1308dc7eb8f86cb5c032e6f1f061646e0bbf27b0c7eaa8216ba9381cb7734df24fe6691183c4823d3b645f3139a45b2b8ee3909bb431477f332ea3616b919724782fda8546a3235
+Ctrl.hexxcghash = hexxcghash:fe491f41cdbcaec6b8821eda916eb03bc1a0e934c14850696f79bd30c73a18e2
+Ctrl.hexsession_id = hexsession_id:df1c0910cf8b81ca157916b8ac0411b7363f62ce10ee23cbb69ddfe8c3f16be9
+Ctrl.type = type:B
+Output = bb95f9cbed695529fd7977281332100b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001001b3a1cab1e87a29e229efcae0f569d855a61d6da6ea0ae5bed3491c7bdb5f70f6caf8dc305100160bbf6ecd726b11799da685ce4528ee689fe292043e318ad9f797bd5746399e007cf1f40d7918b85e4607f6e674da84709543dd0d50ad1d5c993770b4d0c045fdef89d5534c3d77edd8dc4536a10cc2b5d0bd14caa7e029ba8a81d5f5fb16524b56ddb9f35d96593955514b80d89b711ff717e11ad3d691424f6cefc5c613b04e5532d89f91383e4a6f45058604bb63876b1308dc7eb8f86cb5c032e6f1f061646e0bbf27b0c7eaa8216ba9381cb7734df24fe6691183c4823d3b645f3139a45b2b8ee3909bb431477f332ea3616b919724782fda8546a3235
+Ctrl.hexxcghash = hexxcghash:fe491f41cdbcaec6b8821eda916eb03bc1a0e934c14850696f79bd30c73a18e2
+Ctrl.hexsession_id = hexsession_id:df1c0910cf8b81ca157916b8ac0411b7363f62ce10ee23cbb69ddfe8c3f16be9
+Ctrl.type = type:C
+Output = da1318a6a34224cc86c9afa41991db4b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001001b3a1cab1e87a29e229efcae0f569d855a61d6da6ea0ae5bed3491c7bdb5f70f6caf8dc305100160bbf6ecd726b11799da685ce4528ee689fe292043e318ad9f797bd5746399e007cf1f40d7918b85e4607f6e674da84709543dd0d50ad1d5c993770b4d0c045fdef89d5534c3d77edd8dc4536a10cc2b5d0bd14caa7e029ba8a81d5f5fb16524b56ddb9f35d96593955514b80d89b711ff717e11ad3d691424f6cefc5c613b04e5532d89f91383e4a6f45058604bb63876b1308dc7eb8f86cb5c032e6f1f061646e0bbf27b0c7eaa8216ba9381cb7734df24fe6691183c4823d3b645f3139a45b2b8ee3909bb431477f332ea3616b919724782fda8546a3235
+Ctrl.hexxcghash = hexxcghash:fe491f41cdbcaec6b8821eda916eb03bc1a0e934c14850696f79bd30c73a18e2
+Ctrl.hexsession_id = hexsession_id:df1c0910cf8b81ca157916b8ac0411b7363f62ce10ee23cbb69ddfe8c3f16be9
+Ctrl.type = type:D
+Output = 091f8fa87a01c5768de8d663ba8bf9d7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001001b3a1cab1e87a29e229efcae0f569d855a61d6da6ea0ae5bed3491c7bdb5f70f6caf8dc305100160bbf6ecd726b11799da685ce4528ee689fe292043e318ad9f797bd5746399e007cf1f40d7918b85e4607f6e674da84709543dd0d50ad1d5c993770b4d0c045fdef89d5534c3d77edd8dc4536a10cc2b5d0bd14caa7e029ba8a81d5f5fb16524b56ddb9f35d96593955514b80d89b711ff717e11ad3d691424f6cefc5c613b04e5532d89f91383e4a6f45058604bb63876b1308dc7eb8f86cb5c032e6f1f061646e0bbf27b0c7eaa8216ba9381cb7734df24fe6691183c4823d3b645f3139a45b2b8ee3909bb431477f332ea3616b919724782fda8546a3235
+Ctrl.hexxcghash = hexxcghash:fe491f41cdbcaec6b8821eda916eb03bc1a0e934c14850696f79bd30c73a18e2
+Ctrl.hexsession_id = hexsession_id:df1c0910cf8b81ca157916b8ac0411b7363f62ce10ee23cbb69ddfe8c3f16be9
+Ctrl.type = type:E
+Output = cc09127a759000f3bd9724fbf5285cd680ee323ffc19cf2f495403f896587317
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexkey = hexkey:000001001b3a1cab1e87a29e229efcae0f569d855a61d6da6ea0ae5bed3491c7bdb5f70f6caf8dc305100160bbf6ecd726b11799da685ce4528ee689fe292043e318ad9f797bd5746399e007cf1f40d7918b85e4607f6e674da84709543dd0d50ad1d5c993770b4d0c045fdef89d5534c3d77edd8dc4536a10cc2b5d0bd14caa7e029ba8a81d5f5fb16524b56ddb9f35d96593955514b80d89b711ff717e11ad3d691424f6cefc5c613b04e5532d89f91383e4a6f45058604bb63876b1308dc7eb8f86cb5c032e6f1f061646e0bbf27b0c7eaa8216ba9381cb7734df24fe6691183c4823d3b645f3139a45b2b8ee3909bb431477f332ea3616b919724782fda8546a3235
+Ctrl.hexxcghash = hexxcghash:fe491f41cdbcaec6b8821eda916eb03bc1a0e934c14850696f79bd30c73a18e2
+Ctrl.hexsession_id = hexsession_id:df1c0910cf8b81ca157916b8ac0411b7363f62ce10ee23cbb69ddfe8c3f16be9
+Ctrl.type = type:F
+Output = a3ceddafc49f7c0131ce2965945c3892be6605b465877bc0637685612ede242b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100941456bd72267a90690ffc873528f4b76394431aceee1e24a7bed414568d9b97c84ce13d34a2b4a63ef735bac23af0b7fa634a9e56c2d775c741a61d63981332f9027d3f52c4a9a3adb83e96d39f7e6bb72514797da32f2f0edb59accfc58a49fc34b198e0285b31032ac9f06907def196f5748bd32ce22a5383a1bbdbd31f24
+Ctrl.hexxcghash = hexxcghash:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.hexsession_id = hexsession_id:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.type = type:A
+Output = d31c16f67b17bc69
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100941456bd72267a90690ffc873528f4b76394431aceee1e24a7bed414568d9b97c84ce13d34a2b4a63ef735bac23af0b7fa634a9e56c2d775c741a61d63981332f9027d3f52c4a9a3adb83e96d39f7e6bb72514797da32f2f0edb59accfc58a49fc34b198e0285b31032ac9f06907def196f5748bd32ce22a5383a1bbdbd31f24
+Ctrl.hexxcghash = hexxcghash:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.hexsession_id = hexsession_id:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.type = type:B
+Output = 675340f27269e7ae
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100941456bd72267a90690ffc873528f4b76394431aceee1e24a7bed414568d9b97c84ce13d34a2b4a63ef735bac23af0b7fa634a9e56c2d775c741a61d63981332f9027d3f52c4a9a3adb83e96d39f7e6bb72514797da32f2f0edb59accfc58a49fc34b198e0285b31032ac9f06907def196f5748bd32ce22a5383a1bbdbd31f24
+Ctrl.hexxcghash = hexxcghash:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.hexsession_id = hexsession_id:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.type = type:C
+Output = 2ffed577a90d29872ea59f3782c3b406908d7394ff63c9d7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100941456bd72267a90690ffc873528f4b76394431aceee1e24a7bed414568d9b97c84ce13d34a2b4a63ef735bac23af0b7fa634a9e56c2d775c741a61d63981332f9027d3f52c4a9a3adb83e96d39f7e6bb72514797da32f2f0edb59accfc58a49fc34b198e0285b31032ac9f06907def196f5748bd32ce22a5383a1bbdbd31f24
+Ctrl.hexxcghash = hexxcghash:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.hexsession_id = hexsession_id:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.type = type:D
+Output = fae751987c1fa8665e4387e410297db58ff69b260a8fe85f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100941456bd72267a90690ffc873528f4b76394431aceee1e24a7bed414568d9b97c84ce13d34a2b4a63ef735bac23af0b7fa634a9e56c2d775c741a61d63981332f9027d3f52c4a9a3adb83e96d39f7e6bb72514797da32f2f0edb59accfc58a49fc34b198e0285b31032ac9f06907def196f5748bd32ce22a5383a1bbdbd31f24
+Ctrl.hexxcghash = hexxcghash:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.hexsession_id = hexsession_id:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.type = type:E
+Output = ff2db5975edf3824325b257455791869434c6af47fb0c8145253c2695abfd2b8c980565ad20e6b9313ba44ee488bafb0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100941456bd72267a90690ffc873528f4b76394431aceee1e24a7bed414568d9b97c84ce13d34a2b4a63ef735bac23af0b7fa634a9e56c2d775c741a61d63981332f9027d3f52c4a9a3adb83e96d39f7e6bb72514797da32f2f0edb59accfc58a49fc34b198e0285b31032ac9f06907def196f5748bd32ce22a5383a1bbdbd31f24
+Ctrl.hexxcghash = hexxcghash:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.hexsession_id = hexsession_id:e0dee80ccc162884393930ad2073d92120c804254162446b7d048f85a1a4dd7b636a09b69252b80952a0581e9490ee5a
+Ctrl.type = type:F
+Output = 85a9463cd653c7619d4dc85006406d6ed3364220419ca13810301be0f0389d932ddeaebb0e504a0849e2e73a7d087db2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000080319534aabf1100b1ef3ec089ba6e5b25946bdf67cbc92493c29d0e63765ee38dc27e15720393d6aa5741b2129b24ee6a71c079190588232f4facadd034dd6e456bf45aedf72a059eca591ceb2d7c50f8ae918528872f40eaf62faa511d6bfbed4b8613163c42b99eb30c20ecce1c36a78b93fb0046467a0bcb41dfa1e609b61b
+Ctrl.hexxcghash = hexxcghash:0f831ff3e907b3f0922722bd8073b2c263c77c7f552c0b0b12be68f19520b1ae2bbf62a9dba0f582d5f0197c0d534f6e
+Ctrl.hexsession_id = hexsession_id:dede417f4b45d58d54cbe59e7d80bab3150ccd99583aa87f7ecde731462d074edf49907278819043341d1fe20e136563
+Ctrl.type = type:A
+Output = 93323451441b761f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000080319534aabf1100b1ef3ec089ba6e5b25946bdf67cbc92493c29d0e63765ee38dc27e15720393d6aa5741b2129b24ee6a71c079190588232f4facadd034dd6e456bf45aedf72a059eca591ceb2d7c50f8ae918528872f40eaf62faa511d6bfbed4b8613163c42b99eb30c20ecce1c36a78b93fb0046467a0bcb41dfa1e609b61b
+Ctrl.hexxcghash = hexxcghash:0f831ff3e907b3f0922722bd8073b2c263c77c7f552c0b0b12be68f19520b1ae2bbf62a9dba0f582d5f0197c0d534f6e
+Ctrl.hexsession_id = hexsession_id:dede417f4b45d58d54cbe59e7d80bab3150ccd99583aa87f7ecde731462d074edf49907278819043341d1fe20e136563
+Ctrl.type = type:B
+Output = 3dbfdc2364807ecc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000080319534aabf1100b1ef3ec089ba6e5b25946bdf67cbc92493c29d0e63765ee38dc27e15720393d6aa5741b2129b24ee6a71c079190588232f4facadd034dd6e456bf45aedf72a059eca591ceb2d7c50f8ae918528872f40eaf62faa511d6bfbed4b8613163c42b99eb30c20ecce1c36a78b93fb0046467a0bcb41dfa1e609b61b
+Ctrl.hexxcghash = hexxcghash:0f831ff3e907b3f0922722bd8073b2c263c77c7f552c0b0b12be68f19520b1ae2bbf62a9dba0f582d5f0197c0d534f6e
+Ctrl.hexsession_id = hexsession_id:dede417f4b45d58d54cbe59e7d80bab3150ccd99583aa87f7ecde731462d074edf49907278819043341d1fe20e136563
+Ctrl.type = type:C
+Output = c699e3488f825fb24c5e2adc699ec83a5d8fce339fa0e9b0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000080319534aabf1100b1ef3ec089ba6e5b25946bdf67cbc92493c29d0e63765ee38dc27e15720393d6aa5741b2129b24ee6a71c079190588232f4facadd034dd6e456bf45aedf72a059eca591ceb2d7c50f8ae918528872f40eaf62faa511d6bfbed4b8613163c42b99eb30c20ecce1c36a78b93fb0046467a0bcb41dfa1e609b61b
+Ctrl.hexxcghash = hexxcghash:0f831ff3e907b3f0922722bd8073b2c263c77c7f552c0b0b12be68f19520b1ae2bbf62a9dba0f582d5f0197c0d534f6e
+Ctrl.hexsession_id = hexsession_id:dede417f4b45d58d54cbe59e7d80bab3150ccd99583aa87f7ecde731462d074edf49907278819043341d1fe20e136563
+Ctrl.type = type:D
+Output = a250b13da0716f2d4440cc4cac01a2d591002ebfaada9758
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000080319534aabf1100b1ef3ec089ba6e5b25946bdf67cbc92493c29d0e63765ee38dc27e15720393d6aa5741b2129b24ee6a71c079190588232f4facadd034dd6e456bf45aedf72a059eca591ceb2d7c50f8ae918528872f40eaf62faa511d6bfbed4b8613163c42b99eb30c20ecce1c36a78b93fb0046467a0bcb41dfa1e609b61b
+Ctrl.hexxcghash = hexxcghash:0f831ff3e907b3f0922722bd8073b2c263c77c7f552c0b0b12be68f19520b1ae2bbf62a9dba0f582d5f0197c0d534f6e
+Ctrl.hexsession_id = hexsession_id:dede417f4b45d58d54cbe59e7d80bab3150ccd99583aa87f7ecde731462d074edf49907278819043341d1fe20e136563
+Ctrl.type = type:E
+Output = 76966a1b7d5f250eea3696077a373b9421e8294dd7cb0aedd172cf9c6879ef34c9deb9c208f11c5d4b6fd713b576894d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000080319534aabf1100b1ef3ec089ba6e5b25946bdf67cbc92493c29d0e63765ee38dc27e15720393d6aa5741b2129b24ee6a71c079190588232f4facadd034dd6e456bf45aedf72a059eca591ceb2d7c50f8ae918528872f40eaf62faa511d6bfbed4b8613163c42b99eb30c20ecce1c36a78b93fb0046467a0bcb41dfa1e609b61b
+Ctrl.hexxcghash = hexxcghash:0f831ff3e907b3f0922722bd8073b2c263c77c7f552c0b0b12be68f19520b1ae2bbf62a9dba0f582d5f0197c0d534f6e
+Ctrl.hexsession_id = hexsession_id:dede417f4b45d58d54cbe59e7d80bab3150ccd99583aa87f7ecde731462d074edf49907278819043341d1fe20e136563
+Ctrl.type = type:F
+Output = 28a66e21fe7f8a070fe40ecf68a64f2a35a46b84ac38810902639906611053832179d5c07a8422993496059af67f585f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000803b4fd086d25a4bf0b5347a2e323d45525b12a3df508b9129ae7d51637b6fc76aba743d7ee254888ee6d49314ebd8b82e25d187e80770ff6365fbfe96029e23b92ccbb2bfb4cf27e175cd09154b0e68d75a84c490f936ee0366180f781049ddcfefcb4bf25409ba8a8a9a3296cf0619bc51363abfd58cea3d0480673d8ac8370a
+Ctrl.hexxcghash = hexxcghash:8fbe46474bf6ccdad0f706492c4b534cf5698b38afc4b21a6af4a00c3ccda689cf5382e5de34a48bd798f083570ad411
+Ctrl.hexsession_id = hexsession_id:a397aa78a58fcf619f1e8368018d6e40934d4befc96671a63aea4558d5e54c9f42bdca50f618ec84b2d19b539a1f10f1
+Ctrl.type = type:A
+Output = b0db344b1e2e98d3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000803b4fd086d25a4bf0b5347a2e323d45525b12a3df508b9129ae7d51637b6fc76aba743d7ee254888ee6d49314ebd8b82e25d187e80770ff6365fbfe96029e23b92ccbb2bfb4cf27e175cd09154b0e68d75a84c490f936ee0366180f781049ddcfefcb4bf25409ba8a8a9a3296cf0619bc51363abfd58cea3d0480673d8ac8370a
+Ctrl.hexxcghash = hexxcghash:8fbe46474bf6ccdad0f706492c4b534cf5698b38afc4b21a6af4a00c3ccda689cf5382e5de34a48bd798f083570ad411
+Ctrl.hexsession_id = hexsession_id:a397aa78a58fcf619f1e8368018d6e40934d4befc96671a63aea4558d5e54c9f42bdca50f618ec84b2d19b539a1f10f1
+Ctrl.type = type:B
+Output = 29fcd6a7d317f527
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000803b4fd086d25a4bf0b5347a2e323d45525b12a3df508b9129ae7d51637b6fc76aba743d7ee254888ee6d49314ebd8b82e25d187e80770ff6365fbfe96029e23b92ccbb2bfb4cf27e175cd09154b0e68d75a84c490f936ee0366180f781049ddcfefcb4bf25409ba8a8a9a3296cf0619bc51363abfd58cea3d0480673d8ac8370a
+Ctrl.hexxcghash = hexxcghash:8fbe46474bf6ccdad0f706492c4b534cf5698b38afc4b21a6af4a00c3ccda689cf5382e5de34a48bd798f083570ad411
+Ctrl.hexsession_id = hexsession_id:a397aa78a58fcf619f1e8368018d6e40934d4befc96671a63aea4558d5e54c9f42bdca50f618ec84b2d19b539a1f10f1
+Ctrl.type = type:C
+Output = 156f9d4c58d7783959e785af3fefb133662009b93891bff7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000803b4fd086d25a4bf0b5347a2e323d45525b12a3df508b9129ae7d51637b6fc76aba743d7ee254888ee6d49314ebd8b82e25d187e80770ff6365fbfe96029e23b92ccbb2bfb4cf27e175cd09154b0e68d75a84c490f936ee0366180f781049ddcfefcb4bf25409ba8a8a9a3296cf0619bc51363abfd58cea3d0480673d8ac8370a
+Ctrl.hexxcghash = hexxcghash:8fbe46474bf6ccdad0f706492c4b534cf5698b38afc4b21a6af4a00c3ccda689cf5382e5de34a48bd798f083570ad411
+Ctrl.hexsession_id = hexsession_id:a397aa78a58fcf619f1e8368018d6e40934d4befc96671a63aea4558d5e54c9f42bdca50f618ec84b2d19b539a1f10f1
+Ctrl.type = type:D
+Output = c4bc4471e2c7f04dbef9100977e222f4156a7118a122f6cd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000803b4fd086d25a4bf0b5347a2e323d45525b12a3df508b9129ae7d51637b6fc76aba743d7ee254888ee6d49314ebd8b82e25d187e80770ff6365fbfe96029e23b92ccbb2bfb4cf27e175cd09154b0e68d75a84c490f936ee0366180f781049ddcfefcb4bf25409ba8a8a9a3296cf0619bc51363abfd58cea3d0480673d8ac8370a
+Ctrl.hexxcghash = hexxcghash:8fbe46474bf6ccdad0f706492c4b534cf5698b38afc4b21a6af4a00c3ccda689cf5382e5de34a48bd798f083570ad411
+Ctrl.hexsession_id = hexsession_id:a397aa78a58fcf619f1e8368018d6e40934d4befc96671a63aea4558d5e54c9f42bdca50f618ec84b2d19b539a1f10f1
+Ctrl.type = type:E
+Output = 5878fdbf693638430e31b287ad8cfab560d952d7a828167bd0454e0c8aa14274c7c0c1921a31575f77fd80144e6d2999
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000803b4fd086d25a4bf0b5347a2e323d45525b12a3df508b9129ae7d51637b6fc76aba743d7ee254888ee6d49314ebd8b82e25d187e80770ff6365fbfe96029e23b92ccbb2bfb4cf27e175cd09154b0e68d75a84c490f936ee0366180f781049ddcfefcb4bf25409ba8a8a9a3296cf0619bc51363abfd58cea3d0480673d8ac8370a
+Ctrl.hexxcghash = hexxcghash:8fbe46474bf6ccdad0f706492c4b534cf5698b38afc4b21a6af4a00c3ccda689cf5382e5de34a48bd798f083570ad411
+Ctrl.hexsession_id = hexsession_id:a397aa78a58fcf619f1e8368018d6e40934d4befc96671a63aea4558d5e54c9f42bdca50f618ec84b2d19b539a1f10f1
+Ctrl.type = type:F
+Output = 1fdb34ae9d2f12363350dd5aeefe728066500a083668ac2d48af671d7651a67acdf9b7a0581b922e67278d53f0b2fb17
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801a3eab3e516f776ab0a282861a42fec52223859d5af2da778727bd0363ba5983b5d883cd75132c94351a7b5b23fba10aec35a78ab03ba183682b4d3e72c67bd1e6b83afc5178c97624f718243d9377694f085e15cef33040fca144e856c74ab0e70dbf4a7766aa916e5edf184ae7dbd3f19d2491e45828fe5969d61075695e39
+Ctrl.hexxcghash = hexxcghash:5e9be9089c8b952d8ffdb0cbdbe5bb6c1f336e6620292da1ab5eb92eef379655579e24cd6273bd4f552d46dfa87df917
+Ctrl.hexsession_id = hexsession_id:c54542e32ba1ae8c266781c6d14c8356d6f548cfdb8a303c4f1c947318610eed8ae3d6d4350ab4dddc7f9202a510d32e
+Ctrl.type = type:A
+Output = c828150149eb433a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801a3eab3e516f776ab0a282861a42fec52223859d5af2da778727bd0363ba5983b5d883cd75132c94351a7b5b23fba10aec35a78ab03ba183682b4d3e72c67bd1e6b83afc5178c97624f718243d9377694f085e15cef33040fca144e856c74ab0e70dbf4a7766aa916e5edf184ae7dbd3f19d2491e45828fe5969d61075695e39
+Ctrl.hexxcghash = hexxcghash:5e9be9089c8b952d8ffdb0cbdbe5bb6c1f336e6620292da1ab5eb92eef379655579e24cd6273bd4f552d46dfa87df917
+Ctrl.hexsession_id = hexsession_id:c54542e32ba1ae8c266781c6d14c8356d6f548cfdb8a303c4f1c947318610eed8ae3d6d4350ab4dddc7f9202a510d32e
+Ctrl.type = type:B
+Output = 45636e088875de58
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801a3eab3e516f776ab0a282861a42fec52223859d5af2da778727bd0363ba5983b5d883cd75132c94351a7b5b23fba10aec35a78ab03ba183682b4d3e72c67bd1e6b83afc5178c97624f718243d9377694f085e15cef33040fca144e856c74ab0e70dbf4a7766aa916e5edf184ae7dbd3f19d2491e45828fe5969d61075695e39
+Ctrl.hexxcghash = hexxcghash:5e9be9089c8b952d8ffdb0cbdbe5bb6c1f336e6620292da1ab5eb92eef379655579e24cd6273bd4f552d46dfa87df917
+Ctrl.hexsession_id = hexsession_id:c54542e32ba1ae8c266781c6d14c8356d6f548cfdb8a303c4f1c947318610eed8ae3d6d4350ab4dddc7f9202a510d32e
+Ctrl.type = type:C
+Output = 75da9408e65f61dac9dafa496675214b0d84b0e66feb68fe
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801a3eab3e516f776ab0a282861a42fec52223859d5af2da778727bd0363ba5983b5d883cd75132c94351a7b5b23fba10aec35a78ab03ba183682b4d3e72c67bd1e6b83afc5178c97624f718243d9377694f085e15cef33040fca144e856c74ab0e70dbf4a7766aa916e5edf184ae7dbd3f19d2491e45828fe5969d61075695e39
+Ctrl.hexxcghash = hexxcghash:5e9be9089c8b952d8ffdb0cbdbe5bb6c1f336e6620292da1ab5eb92eef379655579e24cd6273bd4f552d46dfa87df917
+Ctrl.hexsession_id = hexsession_id:c54542e32ba1ae8c266781c6d14c8356d6f548cfdb8a303c4f1c947318610eed8ae3d6d4350ab4dddc7f9202a510d32e
+Ctrl.type = type:D
+Output = cb7897fdeb2c235be5812d1959cb55907ff02a9cf6c76c17
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801a3eab3e516f776ab0a282861a42fec52223859d5af2da778727bd0363ba5983b5d883cd75132c94351a7b5b23fba10aec35a78ab03ba183682b4d3e72c67bd1e6b83afc5178c97624f718243d9377694f085e15cef33040fca144e856c74ab0e70dbf4a7766aa916e5edf184ae7dbd3f19d2491e45828fe5969d61075695e39
+Ctrl.hexxcghash = hexxcghash:5e9be9089c8b952d8ffdb0cbdbe5bb6c1f336e6620292da1ab5eb92eef379655579e24cd6273bd4f552d46dfa87df917
+Ctrl.hexsession_id = hexsession_id:c54542e32ba1ae8c266781c6d14c8356d6f548cfdb8a303c4f1c947318610eed8ae3d6d4350ab4dddc7f9202a510d32e
+Ctrl.type = type:E
+Output = 13a8062561c28c1bc678a019b22da95aa462f82cfff6268876ffe2fddc86536fa4d19bdc15d90c1cff4d37e69f1fc021
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801a3eab3e516f776ab0a282861a42fec52223859d5af2da778727bd0363ba5983b5d883cd75132c94351a7b5b23fba10aec35a78ab03ba183682b4d3e72c67bd1e6b83afc5178c97624f718243d9377694f085e15cef33040fca144e856c74ab0e70dbf4a7766aa916e5edf184ae7dbd3f19d2491e45828fe5969d61075695e39
+Ctrl.hexxcghash = hexxcghash:5e9be9089c8b952d8ffdb0cbdbe5bb6c1f336e6620292da1ab5eb92eef379655579e24cd6273bd4f552d46dfa87df917
+Ctrl.hexsession_id = hexsession_id:c54542e32ba1ae8c266781c6d14c8356d6f548cfdb8a303c4f1c947318610eed8ae3d6d4350ab4dddc7f9202a510d32e
+Ctrl.type = type:F
+Output = 69437ec44d764caeb89faebf7b8577b433677abcb0c58f166a5e5724a4eb293d335004d412c983d4c7aca4df1b8328fd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000810091473fb24a9fca3fd1639c029c0e6ae6390c83b3278336017068771569d0957bf7ff80a8f188b936f7e238502efc86e518ebafcc4ecdf1b44f01bb070b3cc88c1b23937dcd04c456987a3b75df3874ca54a10e7f4a3123a7fb47365a7552c9e3f7070ec19d1ebb9922dd10aa0280222db770a71ce9541b60b53d9e7783350100
+Ctrl.hexxcghash = hexxcghash:d0bbb1a81edca6ae7ac5c9e60bf447d198bf875b945fcba06b0074e640331b2205c2c055864c011913f6dad3e34ed44b
+Ctrl.hexsession_id = hexsession_id:58d7b77f0cc5480254c68e4e9cb06a1ea5389b39a3f9cba5c9ca03a091fb123aeb5934c519b60181d097b8cc9455b96a
+Ctrl.type = type:A
+Output = b669e05aa9706468
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000810091473fb24a9fca3fd1639c029c0e6ae6390c83b3278336017068771569d0957bf7ff80a8f188b936f7e238502efc86e518ebafcc4ecdf1b44f01bb070b3cc88c1b23937dcd04c456987a3b75df3874ca54a10e7f4a3123a7fb47365a7552c9e3f7070ec19d1ebb9922dd10aa0280222db770a71ce9541b60b53d9e7783350100
+Ctrl.hexxcghash = hexxcghash:d0bbb1a81edca6ae7ac5c9e60bf447d198bf875b945fcba06b0074e640331b2205c2c055864c011913f6dad3e34ed44b
+Ctrl.hexsession_id = hexsession_id:58d7b77f0cc5480254c68e4e9cb06a1ea5389b39a3f9cba5c9ca03a091fb123aeb5934c519b60181d097b8cc9455b96a
+Ctrl.type = type:B
+Output = 57f943111ca01b15
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000810091473fb24a9fca3fd1639c029c0e6ae6390c83b3278336017068771569d0957bf7ff80a8f188b936f7e238502efc86e518ebafcc4ecdf1b44f01bb070b3cc88c1b23937dcd04c456987a3b75df3874ca54a10e7f4a3123a7fb47365a7552c9e3f7070ec19d1ebb9922dd10aa0280222db770a71ce9541b60b53d9e7783350100
+Ctrl.hexxcghash = hexxcghash:d0bbb1a81edca6ae7ac5c9e60bf447d198bf875b945fcba06b0074e640331b2205c2c055864c011913f6dad3e34ed44b
+Ctrl.hexsession_id = hexsession_id:58d7b77f0cc5480254c68e4e9cb06a1ea5389b39a3f9cba5c9ca03a091fb123aeb5934c519b60181d097b8cc9455b96a
+Ctrl.type = type:C
+Output = e9aa354b6b85f357d6f982fcc18a6ca797bd7a125e786f8a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000810091473fb24a9fca3fd1639c029c0e6ae6390c83b3278336017068771569d0957bf7ff80a8f188b936f7e238502efc86e518ebafcc4ecdf1b44f01bb070b3cc88c1b23937dcd04c456987a3b75df3874ca54a10e7f4a3123a7fb47365a7552c9e3f7070ec19d1ebb9922dd10aa0280222db770a71ce9541b60b53d9e7783350100
+Ctrl.hexxcghash = hexxcghash:d0bbb1a81edca6ae7ac5c9e60bf447d198bf875b945fcba06b0074e640331b2205c2c055864c011913f6dad3e34ed44b
+Ctrl.hexsession_id = hexsession_id:58d7b77f0cc5480254c68e4e9cb06a1ea5389b39a3f9cba5c9ca03a091fb123aeb5934c519b60181d097b8cc9455b96a
+Ctrl.type = type:D
+Output = 199d2b244689bfc4f807f225a7130a069c8a181f5b20d32a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000810091473fb24a9fca3fd1639c029c0e6ae6390c83b3278336017068771569d0957bf7ff80a8f188b936f7e238502efc86e518ebafcc4ecdf1b44f01bb070b3cc88c1b23937dcd04c456987a3b75df3874ca54a10e7f4a3123a7fb47365a7552c9e3f7070ec19d1ebb9922dd10aa0280222db770a71ce9541b60b53d9e7783350100
+Ctrl.hexxcghash = hexxcghash:d0bbb1a81edca6ae7ac5c9e60bf447d198bf875b945fcba06b0074e640331b2205c2c055864c011913f6dad3e34ed44b
+Ctrl.hexsession_id = hexsession_id:58d7b77f0cc5480254c68e4e9cb06a1ea5389b39a3f9cba5c9ca03a091fb123aeb5934c519b60181d097b8cc9455b96a
+Ctrl.type = type:E
+Output = 69b55cc82d0429979a3832a3be35483596ff1d26a0c1a62944695764f0eb85c3467528be225db2f516e79f23c0c7c23c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000810091473fb24a9fca3fd1639c029c0e6ae6390c83b3278336017068771569d0957bf7ff80a8f188b936f7e238502efc86e518ebafcc4ecdf1b44f01bb070b3cc88c1b23937dcd04c456987a3b75df3874ca54a10e7f4a3123a7fb47365a7552c9e3f7070ec19d1ebb9922dd10aa0280222db770a71ce9541b60b53d9e7783350100
+Ctrl.hexxcghash = hexxcghash:d0bbb1a81edca6ae7ac5c9e60bf447d198bf875b945fcba06b0074e640331b2205c2c055864c011913f6dad3e34ed44b
+Ctrl.hexsession_id = hexsession_id:58d7b77f0cc5480254c68e4e9cb06a1ea5389b39a3f9cba5c9ca03a091fb123aeb5934c519b60181d097b8cc9455b96a
+Ctrl.type = type:F
+Output = 6e06df643269751dfc9c8decefe466e1ab2ab99466661aa6f0dfab223c3b9bebcaed4c19cbc4109dfacda81cc8f902eb
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801b8e7d2292f95d97c99e9c93fcc681f2a446437d7595137f761eb9351f50cfb71988aad2d9611a5e3d32c58b1efef596b2b495c12355b6caa5c647237670c7cbeb7b7ef5d39b600b44ab1cecc7ff454981f70366f5dc95f790c9744e55b0b5cee770df10dc3f081b8774b4735c86917384ed7da0b597bd932e676b7ef6fe2cd3
+Ctrl.hexxcghash = hexxcghash:d1ecf201e213b656e7e002d26b263ead5ef6f265a2cfd05eb83985dbc1dd0620f729800a92f676e6c8219aadbea0a037
+Ctrl.hexsession_id = hexsession_id:fc6bb80f9116c6746603327d5338e853f37b06593402e31bf5a43abd5e6de8f26166bb572ce0c88360a7bbbe83d0377b
+Ctrl.type = type:A
+Output = b2ada53484907db5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801b8e7d2292f95d97c99e9c93fcc681f2a446437d7595137f761eb9351f50cfb71988aad2d9611a5e3d32c58b1efef596b2b495c12355b6caa5c647237670c7cbeb7b7ef5d39b600b44ab1cecc7ff454981f70366f5dc95f790c9744e55b0b5cee770df10dc3f081b8774b4735c86917384ed7da0b597bd932e676b7ef6fe2cd3
+Ctrl.hexxcghash = hexxcghash:d1ecf201e213b656e7e002d26b263ead5ef6f265a2cfd05eb83985dbc1dd0620f729800a92f676e6c8219aadbea0a037
+Ctrl.hexsession_id = hexsession_id:fc6bb80f9116c6746603327d5338e853f37b06593402e31bf5a43abd5e6de8f26166bb572ce0c88360a7bbbe83d0377b
+Ctrl.type = type:B
+Output = 89224486fcb33030
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801b8e7d2292f95d97c99e9c93fcc681f2a446437d7595137f761eb9351f50cfb71988aad2d9611a5e3d32c58b1efef596b2b495c12355b6caa5c647237670c7cbeb7b7ef5d39b600b44ab1cecc7ff454981f70366f5dc95f790c9744e55b0b5cee770df10dc3f081b8774b4735c86917384ed7da0b597bd932e676b7ef6fe2cd3
+Ctrl.hexxcghash = hexxcghash:d1ecf201e213b656e7e002d26b263ead5ef6f265a2cfd05eb83985dbc1dd0620f729800a92f676e6c8219aadbea0a037
+Ctrl.hexsession_id = hexsession_id:fc6bb80f9116c6746603327d5338e853f37b06593402e31bf5a43abd5e6de8f26166bb572ce0c88360a7bbbe83d0377b
+Ctrl.type = type:C
+Output = 38ccc00303d5aaf748f3c11d986b99f9bf36049a6f7ea92f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801b8e7d2292f95d97c99e9c93fcc681f2a446437d7595137f761eb9351f50cfb71988aad2d9611a5e3d32c58b1efef596b2b495c12355b6caa5c647237670c7cbeb7b7ef5d39b600b44ab1cecc7ff454981f70366f5dc95f790c9744e55b0b5cee770df10dc3f081b8774b4735c86917384ed7da0b597bd932e676b7ef6fe2cd3
+Ctrl.hexxcghash = hexxcghash:d1ecf201e213b656e7e002d26b263ead5ef6f265a2cfd05eb83985dbc1dd0620f729800a92f676e6c8219aadbea0a037
+Ctrl.hexsession_id = hexsession_id:fc6bb80f9116c6746603327d5338e853f37b06593402e31bf5a43abd5e6de8f26166bb572ce0c88360a7bbbe83d0377b
+Ctrl.type = type:D
+Output = f8a7a4b2e1d28c6a38e120a2cb876ed49f454ea2aabc3a99
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801b8e7d2292f95d97c99e9c93fcc681f2a446437d7595137f761eb9351f50cfb71988aad2d9611a5e3d32c58b1efef596b2b495c12355b6caa5c647237670c7cbeb7b7ef5d39b600b44ab1cecc7ff454981f70366f5dc95f790c9744e55b0b5cee770df10dc3f081b8774b4735c86917384ed7da0b597bd932e676b7ef6fe2cd3
+Ctrl.hexxcghash = hexxcghash:d1ecf201e213b656e7e002d26b263ead5ef6f265a2cfd05eb83985dbc1dd0620f729800a92f676e6c8219aadbea0a037
+Ctrl.hexsession_id = hexsession_id:fc6bb80f9116c6746603327d5338e853f37b06593402e31bf5a43abd5e6de8f26166bb572ce0c88360a7bbbe83d0377b
+Ctrl.type = type:E
+Output = 9f42ab15d0b041019960ff6a5a12e209c427dc334434126399fb8850ec8feda957b74f1976b4c8a97906d7d64c5c2a83
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000000801b8e7d2292f95d97c99e9c93fcc681f2a446437d7595137f761eb9351f50cfb71988aad2d9611a5e3d32c58b1efef596b2b495c12355b6caa5c647237670c7cbeb7b7ef5d39b600b44ab1cecc7ff454981f70366f5dc95f790c9744e55b0b5cee770df10dc3f081b8774b4735c86917384ed7da0b597bd932e676b7ef6fe2cd3
+Ctrl.hexxcghash = hexxcghash:d1ecf201e213b656e7e002d26b263ead5ef6f265a2cfd05eb83985dbc1dd0620f729800a92f676e6c8219aadbea0a037
+Ctrl.hexsession_id = hexsession_id:fc6bb80f9116c6746603327d5338e853f37b06593402e31bf5a43abd5e6de8f26166bb572ce0c88360a7bbbe83d0377b
+Ctrl.type = type:F
+Output = d383bedd3b80ddc470db9b819893e85dfab9e359e40bc77576e23ed8c5e73beecefb511ccdf1eb66416c271be5f90199
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000081008efe3279e8fc51acceea0ad5958364c2a36315d92ce4d68f6f8486b3160293e4eff79998474b954431a6981864a34445b4bd68e5b598dbaba4de5661ef0b09d5dae9b1633da886f1540d1df601c1acaa139de540d3d8d0b01602559a833aab87730de5c6875b78f5ec6d19145db46e2a77cbb9ec39b1bdbd5ca3be193dcfd622
+Ctrl.hexxcghash = hexxcghash:5f6f8bd8d664b1f31c615cf457a5c7eaa8733bba6557f15f300cfb364b0ea927bcfe406ea5fb7e03ac648fd18cd93372
+Ctrl.hexsession_id = hexsession_id:a89ecfd6636423e8d5ba8da3aa8367092b1a662df5693c55cbc5bfabb97320d90692e6c9305af47c25e6617200648752
+Ctrl.type = type:A
+Output = bac9e6c9553bba95
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000081008efe3279e8fc51acceea0ad5958364c2a36315d92ce4d68f6f8486b3160293e4eff79998474b954431a6981864a34445b4bd68e5b598dbaba4de5661ef0b09d5dae9b1633da886f1540d1df601c1acaa139de540d3d8d0b01602559a833aab87730de5c6875b78f5ec6d19145db46e2a77cbb9ec39b1bdbd5ca3be193dcfd622
+Ctrl.hexxcghash = hexxcghash:5f6f8bd8d664b1f31c615cf457a5c7eaa8733bba6557f15f300cfb364b0ea927bcfe406ea5fb7e03ac648fd18cd93372
+Ctrl.hexsession_id = hexsession_id:a89ecfd6636423e8d5ba8da3aa8367092b1a662df5693c55cbc5bfabb97320d90692e6c9305af47c25e6617200648752
+Ctrl.type = type:B
+Output = f29bdc017028a9ca
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000081008efe3279e8fc51acceea0ad5958364c2a36315d92ce4d68f6f8486b3160293e4eff79998474b954431a6981864a34445b4bd68e5b598dbaba4de5661ef0b09d5dae9b1633da886f1540d1df601c1acaa139de540d3d8d0b01602559a833aab87730de5c6875b78f5ec6d19145db46e2a77cbb9ec39b1bdbd5ca3be193dcfd622
+Ctrl.hexxcghash = hexxcghash:5f6f8bd8d664b1f31c615cf457a5c7eaa8733bba6557f15f300cfb364b0ea927bcfe406ea5fb7e03ac648fd18cd93372
+Ctrl.hexsession_id = hexsession_id:a89ecfd6636423e8d5ba8da3aa8367092b1a662df5693c55cbc5bfabb97320d90692e6c9305af47c25e6617200648752
+Ctrl.type = type:C
+Output = 840f7e966d633f57bf6cfb3e6aa6bb1435bbea5822c9db0c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000081008efe3279e8fc51acceea0ad5958364c2a36315d92ce4d68f6f8486b3160293e4eff79998474b954431a6981864a34445b4bd68e5b598dbaba4de5661ef0b09d5dae9b1633da886f1540d1df601c1acaa139de540d3d8d0b01602559a833aab87730de5c6875b78f5ec6d19145db46e2a77cbb9ec39b1bdbd5ca3be193dcfd622
+Ctrl.hexxcghash = hexxcghash:5f6f8bd8d664b1f31c615cf457a5c7eaa8733bba6557f15f300cfb364b0ea927bcfe406ea5fb7e03ac648fd18cd93372
+Ctrl.hexsession_id = hexsession_id:a89ecfd6636423e8d5ba8da3aa8367092b1a662df5693c55cbc5bfabb97320d90692e6c9305af47c25e6617200648752
+Ctrl.type = type:D
+Output = f78b485e49bf72584e45de78fbd75392e3e0b1ce2a57e7a3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000081008efe3279e8fc51acceea0ad5958364c2a36315d92ce4d68f6f8486b3160293e4eff79998474b954431a6981864a34445b4bd68e5b598dbaba4de5661ef0b09d5dae9b1633da886f1540d1df601c1acaa139de540d3d8d0b01602559a833aab87730de5c6875b78f5ec6d19145db46e2a77cbb9ec39b1bdbd5ca3be193dcfd622
+Ctrl.hexxcghash = hexxcghash:5f6f8bd8d664b1f31c615cf457a5c7eaa8733bba6557f15f300cfb364b0ea927bcfe406ea5fb7e03ac648fd18cd93372
+Ctrl.hexsession_id = hexsession_id:a89ecfd6636423e8d5ba8da3aa8367092b1a662df5693c55cbc5bfabb97320d90692e6c9305af47c25e6617200648752
+Ctrl.type = type:E
+Output = 9dcadff513667aee5e2fda86c4a198db4252a9311635d3659db957570e448f3689444dd3e10d6097a07dba923db349ba
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000081008efe3279e8fc51acceea0ad5958364c2a36315d92ce4d68f6f8486b3160293e4eff79998474b954431a6981864a34445b4bd68e5b598dbaba4de5661ef0b09d5dae9b1633da886f1540d1df601c1acaa139de540d3d8d0b01602559a833aab87730de5c6875b78f5ec6d19145db46e2a77cbb9ec39b1bdbd5ca3be193dcfd622
+Ctrl.hexxcghash = hexxcghash:5f6f8bd8d664b1f31c615cf457a5c7eaa8733bba6557f15f300cfb364b0ea927bcfe406ea5fb7e03ac648fd18cd93372
+Ctrl.hexsession_id = hexsession_id:a89ecfd6636423e8d5ba8da3aa8367092b1a662df5693c55cbc5bfabb97320d90692e6c9305af47c25e6617200648752
+Ctrl.type = type:F
+Output = 5e7915ea90a0d81e3c2ada00c85890b6defbb64f45ac4f0e75b22cf6187978e630f356207c97362862389a1ef99fb51a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100a89b3f9628a4f984336377edc37d3bed4aa748fa0b0a6bc80c366e8ffdf0ccbbe07229c5f02394b230759d5255e3a7d7f63a2395e2f07e2d31bf885abaea150e1f97808f26f8fe8c5113c12e4d137844160a433f8451faaf432bd7c0469dbe713304c8bed29c03cb7629cdffebc253d0a01362052f55576fdaf89702fa33cedd
+Ctrl.hexxcghash = hexxcghash:8467d0335e6e254eb02253f97cd14c0221f1b21431a4ffe1c20675039d0ac26fa70a0c4bad639834d88d01f6c1ea878e
+Ctrl.hexsession_id = hexsession_id:9a100a5b0ad81f1c603e05c5d24415f2aa7031c0d92f16de15cab350bb1a2cf3639c6906f4e220e057deb966813bbb35
+Ctrl.type = type:A
+Output = 11811427eaa92d61
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100a89b3f9628a4f984336377edc37d3bed4aa748fa0b0a6bc80c366e8ffdf0ccbbe07229c5f02394b230759d5255e3a7d7f63a2395e2f07e2d31bf885abaea150e1f97808f26f8fe8c5113c12e4d137844160a433f8451faaf432bd7c0469dbe713304c8bed29c03cb7629cdffebc253d0a01362052f55576fdaf89702fa33cedd
+Ctrl.hexxcghash = hexxcghash:8467d0335e6e254eb02253f97cd14c0221f1b21431a4ffe1c20675039d0ac26fa70a0c4bad639834d88d01f6c1ea878e
+Ctrl.hexsession_id = hexsession_id:9a100a5b0ad81f1c603e05c5d24415f2aa7031c0d92f16de15cab350bb1a2cf3639c6906f4e220e057deb966813bbb35
+Ctrl.type = type:B
+Output = c13f22e0bd66a551
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100a89b3f9628a4f984336377edc37d3bed4aa748fa0b0a6bc80c366e8ffdf0ccbbe07229c5f02394b230759d5255e3a7d7f63a2395e2f07e2d31bf885abaea150e1f97808f26f8fe8c5113c12e4d137844160a433f8451faaf432bd7c0469dbe713304c8bed29c03cb7629cdffebc253d0a01362052f55576fdaf89702fa33cedd
+Ctrl.hexxcghash = hexxcghash:8467d0335e6e254eb02253f97cd14c0221f1b21431a4ffe1c20675039d0ac26fa70a0c4bad639834d88d01f6c1ea878e
+Ctrl.hexsession_id = hexsession_id:9a100a5b0ad81f1c603e05c5d24415f2aa7031c0d92f16de15cab350bb1a2cf3639c6906f4e220e057deb966813bbb35
+Ctrl.type = type:C
+Output = 2b9c9c8ecae95d75472495363ca2d46dc79babdb2e0fda40
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100a89b3f9628a4f984336377edc37d3bed4aa748fa0b0a6bc80c366e8ffdf0ccbbe07229c5f02394b230759d5255e3a7d7f63a2395e2f07e2d31bf885abaea150e1f97808f26f8fe8c5113c12e4d137844160a433f8451faaf432bd7c0469dbe713304c8bed29c03cb7629cdffebc253d0a01362052f55576fdaf89702fa33cedd
+Ctrl.hexxcghash = hexxcghash:8467d0335e6e254eb02253f97cd14c0221f1b21431a4ffe1c20675039d0ac26fa70a0c4bad639834d88d01f6c1ea878e
+Ctrl.hexsession_id = hexsession_id:9a100a5b0ad81f1c603e05c5d24415f2aa7031c0d92f16de15cab350bb1a2cf3639c6906f4e220e057deb966813bbb35
+Ctrl.type = type:D
+Output = f466d9b9871c1482c699a5d9f8636a041adb60920c6af855
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100a89b3f9628a4f984336377edc37d3bed4aa748fa0b0a6bc80c366e8ffdf0ccbbe07229c5f02394b230759d5255e3a7d7f63a2395e2f07e2d31bf885abaea150e1f97808f26f8fe8c5113c12e4d137844160a433f8451faaf432bd7c0469dbe713304c8bed29c03cb7629cdffebc253d0a01362052f55576fdaf89702fa33cedd
+Ctrl.hexxcghash = hexxcghash:8467d0335e6e254eb02253f97cd14c0221f1b21431a4ffe1c20675039d0ac26fa70a0c4bad639834d88d01f6c1ea878e
+Ctrl.hexsession_id = hexsession_id:9a100a5b0ad81f1c603e05c5d24415f2aa7031c0d92f16de15cab350bb1a2cf3639c6906f4e220e057deb966813bbb35
+Ctrl.type = type:E
+Output = 1ecda0252461bd08960c54ba7c570e80715780e5e99ca0f754a3d451409ed2df928daab91ed6b4044fcc68bd5f907c96
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100a89b3f9628a4f984336377edc37d3bed4aa748fa0b0a6bc80c366e8ffdf0ccbbe07229c5f02394b230759d5255e3a7d7f63a2395e2f07e2d31bf885abaea150e1f97808f26f8fe8c5113c12e4d137844160a433f8451faaf432bd7c0469dbe713304c8bed29c03cb7629cdffebc253d0a01362052f55576fdaf89702fa33cedd
+Ctrl.hexxcghash = hexxcghash:8467d0335e6e254eb02253f97cd14c0221f1b21431a4ffe1c20675039d0ac26fa70a0c4bad639834d88d01f6c1ea878e
+Ctrl.hexsession_id = hexsession_id:9a100a5b0ad81f1c603e05c5d24415f2aa7031c0d92f16de15cab350bb1a2cf3639c6906f4e220e057deb966813bbb35
+Ctrl.type = type:F
+Output = 202e4e3dda18306c7fa518ea849cf3a4788dbc5305f71267ba69fe8920d3b18d9fc59853a4d03b18480269698e24c190
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100f6e899f2b7542fd95e88e06ff0a68e43df6f3d913f1295922bd01b98f7078b67311e002cafcb41a65262585a78b22ec97c81278f3f329d726f08fff23f4ce5b90abc694c92195fe7bc140579f54c6b89d81b836a8d3998446aab9055904ef1e0bb7553739d2351c8cfae0fbf50d8ced4bbd3975450569d0f9e441a3ed3aac776
+Ctrl.hexxcghash = hexxcghash:1853bb0d312eb00d1c700d25ddaed9680ecf28eeefe9323566dc91ef42a85b2e3049286621f43b928e2b821e5605bf60
+Ctrl.hexsession_id = hexsession_id:da7d22e3c7815b6a6089f381ddd957df3ed78e97902133d62d3ff6119d8c174b69cd26e627d6ccd98f847521aa0e3896
+Ctrl.type = type:A
+Output = 86183fd862bf42af
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100f6e899f2b7542fd95e88e06ff0a68e43df6f3d913f1295922bd01b98f7078b67311e002cafcb41a65262585a78b22ec97c81278f3f329d726f08fff23f4ce5b90abc694c92195fe7bc140579f54c6b89d81b836a8d3998446aab9055904ef1e0bb7553739d2351c8cfae0fbf50d8ced4bbd3975450569d0f9e441a3ed3aac776
+Ctrl.hexxcghash = hexxcghash:1853bb0d312eb00d1c700d25ddaed9680ecf28eeefe9323566dc91ef42a85b2e3049286621f43b928e2b821e5605bf60
+Ctrl.hexsession_id = hexsession_id:da7d22e3c7815b6a6089f381ddd957df3ed78e97902133d62d3ff6119d8c174b69cd26e627d6ccd98f847521aa0e3896
+Ctrl.type = type:B
+Output = 04e146b085c71253
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100f6e899f2b7542fd95e88e06ff0a68e43df6f3d913f1295922bd01b98f7078b67311e002cafcb41a65262585a78b22ec97c81278f3f329d726f08fff23f4ce5b90abc694c92195fe7bc140579f54c6b89d81b836a8d3998446aab9055904ef1e0bb7553739d2351c8cfae0fbf50d8ced4bbd3975450569d0f9e441a3ed3aac776
+Ctrl.hexxcghash = hexxcghash:1853bb0d312eb00d1c700d25ddaed9680ecf28eeefe9323566dc91ef42a85b2e3049286621f43b928e2b821e5605bf60
+Ctrl.hexsession_id = hexsession_id:da7d22e3c7815b6a6089f381ddd957df3ed78e97902133d62d3ff6119d8c174b69cd26e627d6ccd98f847521aa0e3896
+Ctrl.type = type:C
+Output = c4364d4e0e38fe4c5fc2b2a3ad42e49a57106ffa962f4c5e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100f6e899f2b7542fd95e88e06ff0a68e43df6f3d913f1295922bd01b98f7078b67311e002cafcb41a65262585a78b22ec97c81278f3f329d726f08fff23f4ce5b90abc694c92195fe7bc140579f54c6b89d81b836a8d3998446aab9055904ef1e0bb7553739d2351c8cfae0fbf50d8ced4bbd3975450569d0f9e441a3ed3aac776
+Ctrl.hexxcghash = hexxcghash:1853bb0d312eb00d1c700d25ddaed9680ecf28eeefe9323566dc91ef42a85b2e3049286621f43b928e2b821e5605bf60
+Ctrl.hexsession_id = hexsession_id:da7d22e3c7815b6a6089f381ddd957df3ed78e97902133d62d3ff6119d8c174b69cd26e627d6ccd98f847521aa0e3896
+Ctrl.type = type:D
+Output = b9d1549032bf336c8708f13d8f5d281d696b8bddc296e709
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100f6e899f2b7542fd95e88e06ff0a68e43df6f3d913f1295922bd01b98f7078b67311e002cafcb41a65262585a78b22ec97c81278f3f329d726f08fff23f4ce5b90abc694c92195fe7bc140579f54c6b89d81b836a8d3998446aab9055904ef1e0bb7553739d2351c8cfae0fbf50d8ced4bbd3975450569d0f9e441a3ed3aac776
+Ctrl.hexxcghash = hexxcghash:1853bb0d312eb00d1c700d25ddaed9680ecf28eeefe9323566dc91ef42a85b2e3049286621f43b928e2b821e5605bf60
+Ctrl.hexsession_id = hexsession_id:da7d22e3c7815b6a6089f381ddd957df3ed78e97902133d62d3ff6119d8c174b69cd26e627d6ccd98f847521aa0e3896
+Ctrl.type = type:E
+Output = c7ee72c40b26fce673ff23edea3265dfeb7b7f6fd66362bbc91548fac1819a08682c65c7d69d5e54e1c48b05e7233adc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008100f6e899f2b7542fd95e88e06ff0a68e43df6f3d913f1295922bd01b98f7078b67311e002cafcb41a65262585a78b22ec97c81278f3f329d726f08fff23f4ce5b90abc694c92195fe7bc140579f54c6b89d81b836a8d3998446aab9055904ef1e0bb7553739d2351c8cfae0fbf50d8ced4bbd3975450569d0f9e441a3ed3aac776
+Ctrl.hexxcghash = hexxcghash:1853bb0d312eb00d1c700d25ddaed9680ecf28eeefe9323566dc91ef42a85b2e3049286621f43b928e2b821e5605bf60
+Ctrl.hexsession_id = hexsession_id:da7d22e3c7815b6a6089f381ddd957df3ed78e97902133d62d3ff6119d8c174b69cd26e627d6ccd98f847521aa0e3896
+Ctrl.type = type:F
+Output = 8b52078a6d45dfaa051193da8f9c8a18bfd0c058e7be145d0c4b5b677eec54a01f9e2a20c997e9c0a1ede9576800cfe5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008008483322bb2efee6320ba1fe14f296e0b170f9a0c6f76a49d0b23abb74251da468b53fb86ddbbc55a5c4881686d1aaa9b309b65907d92352c83597126cf7e3d367f543c8887105403d9b2ba86cf2bbafd4a984dfe8ebb7b8155c51d6416c89b4efb91ef5953b0e54dbcdbe76443a80e5cd011d7d6c9bc69ec81a19749b95f6c0
+Ctrl.hexxcghash = hexxcghash:ed7b1464334bb8a04d128b791cd860c1546faaf860aff394872373f5ccac0835b47cfeb8c3d049b211cb7b570bcc1f83
+Ctrl.hexsession_id = hexsession_id:cac7b46b66372be67b4ce198311faed9ddc8f8b95f6c61d8c71a1788724ab6b8d159e2ba61f937e6d87bbb9cb24a9fe7
+Ctrl.type = type:A
+Output = 54f4be4a33dfa102
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008008483322bb2efee6320ba1fe14f296e0b170f9a0c6f76a49d0b23abb74251da468b53fb86ddbbc55a5c4881686d1aaa9b309b65907d92352c83597126cf7e3d367f543c8887105403d9b2ba86cf2bbafd4a984dfe8ebb7b8155c51d6416c89b4efb91ef5953b0e54dbcdbe76443a80e5cd011d7d6c9bc69ec81a19749b95f6c0
+Ctrl.hexxcghash = hexxcghash:ed7b1464334bb8a04d128b791cd860c1546faaf860aff394872373f5ccac0835b47cfeb8c3d049b211cb7b570bcc1f83
+Ctrl.hexsession_id = hexsession_id:cac7b46b66372be67b4ce198311faed9ddc8f8b95f6c61d8c71a1788724ab6b8d159e2ba61f937e6d87bbb9cb24a9fe7
+Ctrl.type = type:B
+Output = bbb084483803aab4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008008483322bb2efee6320ba1fe14f296e0b170f9a0c6f76a49d0b23abb74251da468b53fb86ddbbc55a5c4881686d1aaa9b309b65907d92352c83597126cf7e3d367f543c8887105403d9b2ba86cf2bbafd4a984dfe8ebb7b8155c51d6416c89b4efb91ef5953b0e54dbcdbe76443a80e5cd011d7d6c9bc69ec81a19749b95f6c0
+Ctrl.hexxcghash = hexxcghash:ed7b1464334bb8a04d128b791cd860c1546faaf860aff394872373f5ccac0835b47cfeb8c3d049b211cb7b570bcc1f83
+Ctrl.hexsession_id = hexsession_id:cac7b46b66372be67b4ce198311faed9ddc8f8b95f6c61d8c71a1788724ab6b8d159e2ba61f937e6d87bbb9cb24a9fe7
+Ctrl.type = type:C
+Output = 466a038b3a5c0d72cf19cf33e5a551437933dad54bfed655
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008008483322bb2efee6320ba1fe14f296e0b170f9a0c6f76a49d0b23abb74251da468b53fb86ddbbc55a5c4881686d1aaa9b309b65907d92352c83597126cf7e3d367f543c8887105403d9b2ba86cf2bbafd4a984dfe8ebb7b8155c51d6416c89b4efb91ef5953b0e54dbcdbe76443a80e5cd011d7d6c9bc69ec81a19749b95f6c0
+Ctrl.hexxcghash = hexxcghash:ed7b1464334bb8a04d128b791cd860c1546faaf860aff394872373f5ccac0835b47cfeb8c3d049b211cb7b570bcc1f83
+Ctrl.hexsession_id = hexsession_id:cac7b46b66372be67b4ce198311faed9ddc8f8b95f6c61d8c71a1788724ab6b8d159e2ba61f937e6d87bbb9cb24a9fe7
+Ctrl.type = type:D
+Output = 44e09698e473edc642256e99bfbfbeab1db3e254d64a3ab7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008008483322bb2efee6320ba1fe14f296e0b170f9a0c6f76a49d0b23abb74251da468b53fb86ddbbc55a5c4881686d1aaa9b309b65907d92352c83597126cf7e3d367f543c8887105403d9b2ba86cf2bbafd4a984dfe8ebb7b8155c51d6416c89b4efb91ef5953b0e54dbcdbe76443a80e5cd011d7d6c9bc69ec81a19749b95f6c0
+Ctrl.hexxcghash = hexxcghash:ed7b1464334bb8a04d128b791cd860c1546faaf860aff394872373f5ccac0835b47cfeb8c3d049b211cb7b570bcc1f83
+Ctrl.hexsession_id = hexsession_id:cac7b46b66372be67b4ce198311faed9ddc8f8b95f6c61d8c71a1788724ab6b8d159e2ba61f937e6d87bbb9cb24a9fe7
+Ctrl.type = type:E
+Output = 8e35d767e738c4282ec1925ba5d59dad723b7220c10ae8b69c9eb3da124ac1bea8195f5ecc1c3b03953938cd1e0e190b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000008008483322bb2efee6320ba1fe14f296e0b170f9a0c6f76a49d0b23abb74251da468b53fb86ddbbc55a5c4881686d1aaa9b309b65907d92352c83597126cf7e3d367f543c8887105403d9b2ba86cf2bbafd4a984dfe8ebb7b8155c51d6416c89b4efb91ef5953b0e54dbcdbe76443a80e5cd011d7d6c9bc69ec81a19749b95f6c0
+Ctrl.hexxcghash = hexxcghash:ed7b1464334bb8a04d128b791cd860c1546faaf860aff394872373f5ccac0835b47cfeb8c3d049b211cb7b570bcc1f83
+Ctrl.hexsession_id = hexsession_id:cac7b46b66372be67b4ce198311faed9ddc8f8b95f6c61d8c71a1788724ab6b8d159e2ba61f937e6d87bbb9cb24a9fe7
+Ctrl.type = type:F
+Output = 63e5c62c4e6f2700bfa5927ca2e730101c12a684808ddd6cf5f9da2bad3b49ba3d05d4f88a3a91f341ad2b63952e7db0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000101008174aa2fab9372c253f3b993d723b55a2484430fb338095852b7a5099f9d609ca6afa6bff9d64a55f7ef0963c684f0d17ec6045ce57ce3382870d55fcac0e1341fb47a7f76f0d5d53b67fd5e0658ecb88ae2e2e42aa4b83b8cfcce9faae941450ace059a7f223623d1c8a9924638de7eebad35be9c9f1bf38aea041114351d585a1988ba53cccc6949150f367fd790fc427916afa2cccd1d2f1aa8583b948dfe56cf488b38ec2d2570a0e0441c07ccec8b5b4db5f60250741b1aeb0bf49a85cc779ad7465f0c197735698842be2a39af8591ab91c84b704e67e50cbcdb75c2799aaeba0184341dd520f6db8477f13d5815d37f191ccb20545e4a1eaca316370a
+Ctrl.hexxcghash = hexxcghash:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.hexsession_id = hexsession_id:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.type = type:A
+Output = e46fdb8c912658c34b7d509f6acc1111
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000101008174aa2fab9372c253f3b993d723b55a2484430fb338095852b7a5099f9d609ca6afa6bff9d64a55f7ef0963c684f0d17ec6045ce57ce3382870d55fcac0e1341fb47a7f76f0d5d53b67fd5e0658ecb88ae2e2e42aa4b83b8cfcce9faae941450ace059a7f223623d1c8a9924638de7eebad35be9c9f1bf38aea041114351d585a1988ba53cccc6949150f367fd790fc427916afa2cccd1d2f1aa8583b948dfe56cf488b38ec2d2570a0e0441c07ccec8b5b4db5f60250741b1aeb0bf49a85cc779ad7465f0c197735698842be2a39af8591ab91c84b704e67e50cbcdb75c2799aaeba0184341dd520f6db8477f13d5815d37f191ccb20545e4a1eaca316370a
+Ctrl.hexxcghash = hexxcghash:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.hexsession_id = hexsession_id:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.type = type:B
+Output = 959c339aaff2e2ed46da46c5286ddf3b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000101008174aa2fab9372c253f3b993d723b55a2484430fb338095852b7a5099f9d609ca6afa6bff9d64a55f7ef0963c684f0d17ec6045ce57ce3382870d55fcac0e1341fb47a7f76f0d5d53b67fd5e0658ecb88ae2e2e42aa4b83b8cfcce9faae941450ace059a7f223623d1c8a9924638de7eebad35be9c9f1bf38aea041114351d585a1988ba53cccc6949150f367fd790fc427916afa2cccd1d2f1aa8583b948dfe56cf488b38ec2d2570a0e0441c07ccec8b5b4db5f60250741b1aeb0bf49a85cc779ad7465f0c197735698842be2a39af8591ab91c84b704e67e50cbcdb75c2799aaeba0184341dd520f6db8477f13d5815d37f191ccb20545e4a1eaca316370a
+Ctrl.hexxcghash = hexxcghash:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.hexsession_id = hexsession_id:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.type = type:C
+Output = a1cb0f9c7349d6443494df14b4bd9aad
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000101008174aa2fab9372c253f3b993d723b55a2484430fb338095852b7a5099f9d609ca6afa6bff9d64a55f7ef0963c684f0d17ec6045ce57ce3382870d55fcac0e1341fb47a7f76f0d5d53b67fd5e0658ecb88ae2e2e42aa4b83b8cfcce9faae941450ace059a7f223623d1c8a9924638de7eebad35be9c9f1bf38aea041114351d585a1988ba53cccc6949150f367fd790fc427916afa2cccd1d2f1aa8583b948dfe56cf488b38ec2d2570a0e0441c07ccec8b5b4db5f60250741b1aeb0bf49a85cc779ad7465f0c197735698842be2a39af8591ab91c84b704e67e50cbcdb75c2799aaeba0184341dd520f6db8477f13d5815d37f191ccb20545e4a1eaca316370a
+Ctrl.hexxcghash = hexxcghash:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.hexsession_id = hexsession_id:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.type = type:D
+Output = cdcd2c2ccbda238e184058b76757ed5d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000101008174aa2fab9372c253f3b993d723b55a2484430fb338095852b7a5099f9d609ca6afa6bff9d64a55f7ef0963c684f0d17ec6045ce57ce3382870d55fcac0e1341fb47a7f76f0d5d53b67fd5e0658ecb88ae2e2e42aa4b83b8cfcce9faae941450ace059a7f223623d1c8a9924638de7eebad35be9c9f1bf38aea041114351d585a1988ba53cccc6949150f367fd790fc427916afa2cccd1d2f1aa8583b948dfe56cf488b38ec2d2570a0e0441c07ccec8b5b4db5f60250741b1aeb0bf49a85cc779ad7465f0c197735698842be2a39af8591ab91c84b704e67e50cbcdb75c2799aaeba0184341dd520f6db8477f13d5815d37f191ccb20545e4a1eaca316370a
+Ctrl.hexxcghash = hexxcghash:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.hexsession_id = hexsession_id:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.type = type:E
+Output = 026ae927b4a5b63a513c02faac55534dae5c219779f08e239f67df78c52be743aab628607e5a103127450ea51833eb84
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:00000101008174aa2fab9372c253f3b993d723b55a2484430fb338095852b7a5099f9d609ca6afa6bff9d64a55f7ef0963c684f0d17ec6045ce57ce3382870d55fcac0e1341fb47a7f76f0d5d53b67fd5e0658ecb88ae2e2e42aa4b83b8cfcce9faae941450ace059a7f223623d1c8a9924638de7eebad35be9c9f1bf38aea041114351d585a1988ba53cccc6949150f367fd790fc427916afa2cccd1d2f1aa8583b948dfe56cf488b38ec2d2570a0e0441c07ccec8b5b4db5f60250741b1aeb0bf49a85cc779ad7465f0c197735698842be2a39af8591ab91c84b704e67e50cbcdb75c2799aaeba0184341dd520f6db8477f13d5815d37f191ccb20545e4a1eaca316370a
+Ctrl.hexxcghash = hexxcghash:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.hexsession_id = hexsession_id:09d74bd79b47ceb3ada0d8df640595ba861ccfa3cc0d6c640eaac21d2d5f3f9fe61fb2e585fb6cc90bde11967a563c4e
+Ctrl.type = type:F
+Output = 759fd6bd386f4825e644521edfce4187a7104ea7380f2c6c5e283f205c7c025be46c5ee73bc54a956f268c2031026bf6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c10fff0a20858c36e41082abaa65b96c5424ab67563882a42237258e736b5cfbdb2867df55f8c40f81b34e8c4c55d39c4629dc2d833257dc68070a61d10417487ef0840b76169145402327ae81f35cbddae6c2a45d52f52f48a0c94acdb20db076393b5b1e3d1a7acee3f371bdaccfee696262eecd20238cc54322e6ca72e58708aeb19bf761054d9f7426e4ea0059bd252beee03dcad1a7d6d034b4d9d307218bb3d7bee3a57572ded304df1dd8f97ed9550ebb0f5c25ee3f8c6df3dfc2aac92f364ec91040d001c5cb1eee33c1d43112e5a289b46706c7f12a327620cd98fbce2e7fe7b7bd0e05ee0005182c35ded65ee1d86aefe816e5894e07536697a7db
+Ctrl.hexxcghash = hexxcghash:62b3155ba0c160f838a6949d0a99b144868a7b247c583a53f431129e39aebd40e2feb4dbac7527f993ccf1646d559134
+Ctrl.hexsession_id = hexsession_id:7e4674330fb6987b64ef7f30335d171676c705a6b9ed958adc6b6fd16949830d3f586eec44812d0518cc3ebd4292b422
+Ctrl.type = type:A
+Output = a433ac21ceda36a9d98abec722b2a5e7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c10fff0a20858c36e41082abaa65b96c5424ab67563882a42237258e736b5cfbdb2867df55f8c40f81b34e8c4c55d39c4629dc2d833257dc68070a61d10417487ef0840b76169145402327ae81f35cbddae6c2a45d52f52f48a0c94acdb20db076393b5b1e3d1a7acee3f371bdaccfee696262eecd20238cc54322e6ca72e58708aeb19bf761054d9f7426e4ea0059bd252beee03dcad1a7d6d034b4d9d307218bb3d7bee3a57572ded304df1dd8f97ed9550ebb0f5c25ee3f8c6df3dfc2aac92f364ec91040d001c5cb1eee33c1d43112e5a289b46706c7f12a327620cd98fbce2e7fe7b7bd0e05ee0005182c35ded65ee1d86aefe816e5894e07536697a7db
+Ctrl.hexxcghash = hexxcghash:62b3155ba0c160f838a6949d0a99b144868a7b247c583a53f431129e39aebd40e2feb4dbac7527f993ccf1646d559134
+Ctrl.hexsession_id = hexsession_id:7e4674330fb6987b64ef7f30335d171676c705a6b9ed958adc6b6fd16949830d3f586eec44812d0518cc3ebd4292b422
+Ctrl.type = type:B
+Output = ed580c2c7890d5f3da87870d71d96300
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c10fff0a20858c36e41082abaa65b96c5424ab67563882a42237258e736b5cfbdb2867df55f8c40f81b34e8c4c55d39c4629dc2d833257dc68070a61d10417487ef0840b76169145402327ae81f35cbddae6c2a45d52f52f48a0c94acdb20db076393b5b1e3d1a7acee3f371bdaccfee696262eecd20238cc54322e6ca72e58708aeb19bf761054d9f7426e4ea0059bd252beee03dcad1a7d6d034b4d9d307218bb3d7bee3a57572ded304df1dd8f97ed9550ebb0f5c25ee3f8c6df3dfc2aac92f364ec91040d001c5cb1eee33c1d43112e5a289b46706c7f12a327620cd98fbce2e7fe7b7bd0e05ee0005182c35ded65ee1d86aefe816e5894e07536697a7db
+Ctrl.hexxcghash = hexxcghash:62b3155ba0c160f838a6949d0a99b144868a7b247c583a53f431129e39aebd40e2feb4dbac7527f993ccf1646d559134
+Ctrl.hexsession_id = hexsession_id:7e4674330fb6987b64ef7f30335d171676c705a6b9ed958adc6b6fd16949830d3f586eec44812d0518cc3ebd4292b422
+Ctrl.type = type:C
+Output = b310304108476a31154febce2bfcf44e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c10fff0a20858c36e41082abaa65b96c5424ab67563882a42237258e736b5cfbdb2867df55f8c40f81b34e8c4c55d39c4629dc2d833257dc68070a61d10417487ef0840b76169145402327ae81f35cbddae6c2a45d52f52f48a0c94acdb20db076393b5b1e3d1a7acee3f371bdaccfee696262eecd20238cc54322e6ca72e58708aeb19bf761054d9f7426e4ea0059bd252beee03dcad1a7d6d034b4d9d307218bb3d7bee3a57572ded304df1dd8f97ed9550ebb0f5c25ee3f8c6df3dfc2aac92f364ec91040d001c5cb1eee33c1d43112e5a289b46706c7f12a327620cd98fbce2e7fe7b7bd0e05ee0005182c35ded65ee1d86aefe816e5894e07536697a7db
+Ctrl.hexxcghash = hexxcghash:62b3155ba0c160f838a6949d0a99b144868a7b247c583a53f431129e39aebd40e2feb4dbac7527f993ccf1646d559134
+Ctrl.hexsession_id = hexsession_id:7e4674330fb6987b64ef7f30335d171676c705a6b9ed958adc6b6fd16949830d3f586eec44812d0518cc3ebd4292b422
+Ctrl.type = type:D
+Output = 63d729b0e32d9d7efe7efdc6111489b7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c10fff0a20858c36e41082abaa65b96c5424ab67563882a42237258e736b5cfbdb2867df55f8c40f81b34e8c4c55d39c4629dc2d833257dc68070a61d10417487ef0840b76169145402327ae81f35cbddae6c2a45d52f52f48a0c94acdb20db076393b5b1e3d1a7acee3f371bdaccfee696262eecd20238cc54322e6ca72e58708aeb19bf761054d9f7426e4ea0059bd252beee03dcad1a7d6d034b4d9d307218bb3d7bee3a57572ded304df1dd8f97ed9550ebb0f5c25ee3f8c6df3dfc2aac92f364ec91040d001c5cb1eee33c1d43112e5a289b46706c7f12a327620cd98fbce2e7fe7b7bd0e05ee0005182c35ded65ee1d86aefe816e5894e07536697a7db
+Ctrl.hexxcghash = hexxcghash:62b3155ba0c160f838a6949d0a99b144868a7b247c583a53f431129e39aebd40e2feb4dbac7527f993ccf1646d559134
+Ctrl.hexsession_id = hexsession_id:7e4674330fb6987b64ef7f30335d171676c705a6b9ed958adc6b6fd16949830d3f586eec44812d0518cc3ebd4292b422
+Ctrl.type = type:E
+Output = 7443a278e0c47e4004ba1c534dfa5c460670d2dd4459a6dc7251664da187f633208f6c06470f6aed6148820187f35a25
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c10fff0a20858c36e41082abaa65b96c5424ab67563882a42237258e736b5cfbdb2867df55f8c40f81b34e8c4c55d39c4629dc2d833257dc68070a61d10417487ef0840b76169145402327ae81f35cbddae6c2a45d52f52f48a0c94acdb20db076393b5b1e3d1a7acee3f371bdaccfee696262eecd20238cc54322e6ca72e58708aeb19bf761054d9f7426e4ea0059bd252beee03dcad1a7d6d034b4d9d307218bb3d7bee3a57572ded304df1dd8f97ed9550ebb0f5c25ee3f8c6df3dfc2aac92f364ec91040d001c5cb1eee33c1d43112e5a289b46706c7f12a327620cd98fbce2e7fe7b7bd0e05ee0005182c35ded65ee1d86aefe816e5894e07536697a7db
+Ctrl.hexxcghash = hexxcghash:62b3155ba0c160f838a6949d0a99b144868a7b247c583a53f431129e39aebd40e2feb4dbac7527f993ccf1646d559134
+Ctrl.hexsession_id = hexsession_id:7e4674330fb6987b64ef7f30335d171676c705a6b9ed958adc6b6fd16949830d3f586eec44812d0518cc3ebd4292b422
+Ctrl.type = type:F
+Output = 37500b699935ab38b9185018d3676f221dcd6643ba4cf3dccf8ede7ba2f0513c27ad2324158ae98df4e7fb52ffb96526
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c9d019aa8ab57cdbd1600def08b92f4a90b8ddb1c3fd329475e28ad9388525d5a813756472458bed674332a649c56eecb6cbba726b9afcfd9ce1f490bf327de49978b34fb106ae1ab4ece2f241e0b67ddf03bf835aa2dcc5cde5aca913d2a5ed74d1ad0e945169f10772d830fa5c33c7f7d543e2d2ac09fa03ff1509b94977cc0dcb8a464104a3e8d9f99cbefac4361b92517f14eda2558d572ae7410a78962e596c542a20d3aeb49cf41b48b54b387dea7c24c72edfd656bcb64c605b741c7b03892020ca2ff34e0b13534228bd83c9c3ffbfa219602041ac4238904bd782da7e3c653f518891f7ac1e7b05b7e37baab18eb54e8de76dfa8c803a0df843a28e
+Ctrl.hexxcghash = hexxcghash:a970acc5597f7965dcc540dac7cefde594c0232180187a32364b42dbb8d0307f8c3f52678e303e2f315b2ba1cf62863a
+Ctrl.hexsession_id = hexsession_id:bad9943e089550d17b90f2a34409660c07a39be5d48a77d8e1ad25726c93096081831c24e876060cb96def95df9a7fcd
+Ctrl.type = type:A
+Output = 8ad38b03467ef0cac638f93b156e1c05
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c9d019aa8ab57cdbd1600def08b92f4a90b8ddb1c3fd329475e28ad9388525d5a813756472458bed674332a649c56eecb6cbba726b9afcfd9ce1f490bf327de49978b34fb106ae1ab4ece2f241e0b67ddf03bf835aa2dcc5cde5aca913d2a5ed74d1ad0e945169f10772d830fa5c33c7f7d543e2d2ac09fa03ff1509b94977cc0dcb8a464104a3e8d9f99cbefac4361b92517f14eda2558d572ae7410a78962e596c542a20d3aeb49cf41b48b54b387dea7c24c72edfd656bcb64c605b741c7b03892020ca2ff34e0b13534228bd83c9c3ffbfa219602041ac4238904bd782da7e3c653f518891f7ac1e7b05b7e37baab18eb54e8de76dfa8c803a0df843a28e
+Ctrl.hexxcghash = hexxcghash:a970acc5597f7965dcc540dac7cefde594c0232180187a32364b42dbb8d0307f8c3f52678e303e2f315b2ba1cf62863a
+Ctrl.hexsession_id = hexsession_id:bad9943e089550d17b90f2a34409660c07a39be5d48a77d8e1ad25726c93096081831c24e876060cb96def95df9a7fcd
+Ctrl.type = type:B
+Output = c9a867164cad7619621c2390039db88f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c9d019aa8ab57cdbd1600def08b92f4a90b8ddb1c3fd329475e28ad9388525d5a813756472458bed674332a649c56eecb6cbba726b9afcfd9ce1f490bf327de49978b34fb106ae1ab4ece2f241e0b67ddf03bf835aa2dcc5cde5aca913d2a5ed74d1ad0e945169f10772d830fa5c33c7f7d543e2d2ac09fa03ff1509b94977cc0dcb8a464104a3e8d9f99cbefac4361b92517f14eda2558d572ae7410a78962e596c542a20d3aeb49cf41b48b54b387dea7c24c72edfd656bcb64c605b741c7b03892020ca2ff34e0b13534228bd83c9c3ffbfa219602041ac4238904bd782da7e3c653f518891f7ac1e7b05b7e37baab18eb54e8de76dfa8c803a0df843a28e
+Ctrl.hexxcghash = hexxcghash:a970acc5597f7965dcc540dac7cefde594c0232180187a32364b42dbb8d0307f8c3f52678e303e2f315b2ba1cf62863a
+Ctrl.hexsession_id = hexsession_id:bad9943e089550d17b90f2a34409660c07a39be5d48a77d8e1ad25726c93096081831c24e876060cb96def95df9a7fcd
+Ctrl.type = type:C
+Output = 28d6e6a69e686b3b2ca02c7595b6a565
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c9d019aa8ab57cdbd1600def08b92f4a90b8ddb1c3fd329475e28ad9388525d5a813756472458bed674332a649c56eecb6cbba726b9afcfd9ce1f490bf327de49978b34fb106ae1ab4ece2f241e0b67ddf03bf835aa2dcc5cde5aca913d2a5ed74d1ad0e945169f10772d830fa5c33c7f7d543e2d2ac09fa03ff1509b94977cc0dcb8a464104a3e8d9f99cbefac4361b92517f14eda2558d572ae7410a78962e596c542a20d3aeb49cf41b48b54b387dea7c24c72edfd656bcb64c605b741c7b03892020ca2ff34e0b13534228bd83c9c3ffbfa219602041ac4238904bd782da7e3c653f518891f7ac1e7b05b7e37baab18eb54e8de76dfa8c803a0df843a28e
+Ctrl.hexxcghash = hexxcghash:a970acc5597f7965dcc540dac7cefde594c0232180187a32364b42dbb8d0307f8c3f52678e303e2f315b2ba1cf62863a
+Ctrl.hexsession_id = hexsession_id:bad9943e089550d17b90f2a34409660c07a39be5d48a77d8e1ad25726c93096081831c24e876060cb96def95df9a7fcd
+Ctrl.type = type:D
+Output = a3486f9014731b15530dba7498d4b2ff
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c9d019aa8ab57cdbd1600def08b92f4a90b8ddb1c3fd329475e28ad9388525d5a813756472458bed674332a649c56eecb6cbba726b9afcfd9ce1f490bf327de49978b34fb106ae1ab4ece2f241e0b67ddf03bf835aa2dcc5cde5aca913d2a5ed74d1ad0e945169f10772d830fa5c33c7f7d543e2d2ac09fa03ff1509b94977cc0dcb8a464104a3e8d9f99cbefac4361b92517f14eda2558d572ae7410a78962e596c542a20d3aeb49cf41b48b54b387dea7c24c72edfd656bcb64c605b741c7b03892020ca2ff34e0b13534228bd83c9c3ffbfa219602041ac4238904bd782da7e3c653f518891f7ac1e7b05b7e37baab18eb54e8de76dfa8c803a0df843a28e
+Ctrl.hexxcghash = hexxcghash:a970acc5597f7965dcc540dac7cefde594c0232180187a32364b42dbb8d0307f8c3f52678e303e2f315b2ba1cf62863a
+Ctrl.hexsession_id = hexsession_id:bad9943e089550d17b90f2a34409660c07a39be5d48a77d8e1ad25726c93096081831c24e876060cb96def95df9a7fcd
+Ctrl.type = type:E
+Output = 9640b7d6c1351a44dcd430f9728083949adbd8f3c47f1c7358b41d99730f0eeef9f8634cc99207b8d998c8aeb0085e4c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c9d019aa8ab57cdbd1600def08b92f4a90b8ddb1c3fd329475e28ad9388525d5a813756472458bed674332a649c56eecb6cbba726b9afcfd9ce1f490bf327de49978b34fb106ae1ab4ece2f241e0b67ddf03bf835aa2dcc5cde5aca913d2a5ed74d1ad0e945169f10772d830fa5c33c7f7d543e2d2ac09fa03ff1509b94977cc0dcb8a464104a3e8d9f99cbefac4361b92517f14eda2558d572ae7410a78962e596c542a20d3aeb49cf41b48b54b387dea7c24c72edfd656bcb64c605b741c7b03892020ca2ff34e0b13534228bd83c9c3ffbfa219602041ac4238904bd782da7e3c653f518891f7ac1e7b05b7e37baab18eb54e8de76dfa8c803a0df843a28e
+Ctrl.hexxcghash = hexxcghash:a970acc5597f7965dcc540dac7cefde594c0232180187a32364b42dbb8d0307f8c3f52678e303e2f315b2ba1cf62863a
+Ctrl.hexsession_id = hexsession_id:bad9943e089550d17b90f2a34409660c07a39be5d48a77d8e1ad25726c93096081831c24e876060cb96def95df9a7fcd
+Ctrl.type = type:F
+Output = cef923f7cbc47534d9a6da613eea02117b19800995f66df9e49291203ad15e5d29cc08df86200bf09ca091b37cc45432
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100ba6b819aa094b3b9a2e93d37eda5df776720cce40858790532b8ab0de613b8e20efcef330eaa9e4ab290fd670b8f8ab1e2fc217d575655a7c39740ce223675a4376bd039f24165d83268a3e3a5b6e05f1b077dc752c90781d0cd6877c91c1fc865586bf661f28cbded4266f1b9364ae7233e6003b47088cb50f81a631d4b1d200f8c38455ad2217eaf03b6e0a0861aeebe28ef0fcbac5526bd06ebcc44f67de9b908f0359076527f6ff7bb959b3adfc9ac82728d7627bf506ffb2f8742ae28ce3ca7402c25b1cd3dac6781776a35549480ff537c33f63796dd5de4c64e1ff5546689d8f398be911707e0b5d347b8456e89eb2262270ee1de85902b7deb60b02b
+Ctrl.hexxcghash = hexxcghash:e94db0c0969c8f09c1c0d63fcca9f316ae85a0c034f118958c714fa165ac71a86bbcc7a4c017c11b9558bda897455f99
+Ctrl.hexsession_id = hexsession_id:a01426386ce69a9a9f101394e831dc9d17a6dc901349f3c3f4269788f5c5e20316c233d7632005b1771e5bc2f5ddf4c2
+Ctrl.type = type:A
+Output = 1e2fd838058e4569de0699e57eb9bb30
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100ba6b819aa094b3b9a2e93d37eda5df776720cce40858790532b8ab0de613b8e20efcef330eaa9e4ab290fd670b8f8ab1e2fc217d575655a7c39740ce223675a4376bd039f24165d83268a3e3a5b6e05f1b077dc752c90781d0cd6877c91c1fc865586bf661f28cbded4266f1b9364ae7233e6003b47088cb50f81a631d4b1d200f8c38455ad2217eaf03b6e0a0861aeebe28ef0fcbac5526bd06ebcc44f67de9b908f0359076527f6ff7bb959b3adfc9ac82728d7627bf506ffb2f8742ae28ce3ca7402c25b1cd3dac6781776a35549480ff537c33f63796dd5de4c64e1ff5546689d8f398be911707e0b5d347b8456e89eb2262270ee1de85902b7deb60b02b
+Ctrl.hexxcghash = hexxcghash:e94db0c0969c8f09c1c0d63fcca9f316ae85a0c034f118958c714fa165ac71a86bbcc7a4c017c11b9558bda897455f99
+Ctrl.hexsession_id = hexsession_id:a01426386ce69a9a9f101394e831dc9d17a6dc901349f3c3f4269788f5c5e20316c233d7632005b1771e5bc2f5ddf4c2
+Ctrl.type = type:B
+Output = d338052b2288e99bfdd16b5df26e3d3c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100ba6b819aa094b3b9a2e93d37eda5df776720cce40858790532b8ab0de613b8e20efcef330eaa9e4ab290fd670b8f8ab1e2fc217d575655a7c39740ce223675a4376bd039f24165d83268a3e3a5b6e05f1b077dc752c90781d0cd6877c91c1fc865586bf661f28cbded4266f1b9364ae7233e6003b47088cb50f81a631d4b1d200f8c38455ad2217eaf03b6e0a0861aeebe28ef0fcbac5526bd06ebcc44f67de9b908f0359076527f6ff7bb959b3adfc9ac82728d7627bf506ffb2f8742ae28ce3ca7402c25b1cd3dac6781776a35549480ff537c33f63796dd5de4c64e1ff5546689d8f398be911707e0b5d347b8456e89eb2262270ee1de85902b7deb60b02b
+Ctrl.hexxcghash = hexxcghash:e94db0c0969c8f09c1c0d63fcca9f316ae85a0c034f118958c714fa165ac71a86bbcc7a4c017c11b9558bda897455f99
+Ctrl.hexsession_id = hexsession_id:a01426386ce69a9a9f101394e831dc9d17a6dc901349f3c3f4269788f5c5e20316c233d7632005b1771e5bc2f5ddf4c2
+Ctrl.type = type:C
+Output = 020c58037db045fc2a20a9b12e34205d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100ba6b819aa094b3b9a2e93d37eda5df776720cce40858790532b8ab0de613b8e20efcef330eaa9e4ab290fd670b8f8ab1e2fc217d575655a7c39740ce223675a4376bd039f24165d83268a3e3a5b6e05f1b077dc752c90781d0cd6877c91c1fc865586bf661f28cbded4266f1b9364ae7233e6003b47088cb50f81a631d4b1d200f8c38455ad2217eaf03b6e0a0861aeebe28ef0fcbac5526bd06ebcc44f67de9b908f0359076527f6ff7bb959b3adfc9ac82728d7627bf506ffb2f8742ae28ce3ca7402c25b1cd3dac6781776a35549480ff537c33f63796dd5de4c64e1ff5546689d8f398be911707e0b5d347b8456e89eb2262270ee1de85902b7deb60b02b
+Ctrl.hexxcghash = hexxcghash:e94db0c0969c8f09c1c0d63fcca9f316ae85a0c034f118958c714fa165ac71a86bbcc7a4c017c11b9558bda897455f99
+Ctrl.hexsession_id = hexsession_id:a01426386ce69a9a9f101394e831dc9d17a6dc901349f3c3f4269788f5c5e20316c233d7632005b1771e5bc2f5ddf4c2
+Ctrl.type = type:D
+Output = b1e7b4361aaea7f9656151723c21b9a2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100ba6b819aa094b3b9a2e93d37eda5df776720cce40858790532b8ab0de613b8e20efcef330eaa9e4ab290fd670b8f8ab1e2fc217d575655a7c39740ce223675a4376bd039f24165d83268a3e3a5b6e05f1b077dc752c90781d0cd6877c91c1fc865586bf661f28cbded4266f1b9364ae7233e6003b47088cb50f81a631d4b1d200f8c38455ad2217eaf03b6e0a0861aeebe28ef0fcbac5526bd06ebcc44f67de9b908f0359076527f6ff7bb959b3adfc9ac82728d7627bf506ffb2f8742ae28ce3ca7402c25b1cd3dac6781776a35549480ff537c33f63796dd5de4c64e1ff5546689d8f398be911707e0b5d347b8456e89eb2262270ee1de85902b7deb60b02b
+Ctrl.hexxcghash = hexxcghash:e94db0c0969c8f09c1c0d63fcca9f316ae85a0c034f118958c714fa165ac71a86bbcc7a4c017c11b9558bda897455f99
+Ctrl.hexsession_id = hexsession_id:a01426386ce69a9a9f101394e831dc9d17a6dc901349f3c3f4269788f5c5e20316c233d7632005b1771e5bc2f5ddf4c2
+Ctrl.type = type:E
+Output = 67d80666ba420d07153530859fed5a3a2f4b6decd37575714d4826f41a96a1638b89399cdd752af7f6ffd3db0214f0c1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100ba6b819aa094b3b9a2e93d37eda5df776720cce40858790532b8ab0de613b8e20efcef330eaa9e4ab290fd670b8f8ab1e2fc217d575655a7c39740ce223675a4376bd039f24165d83268a3e3a5b6e05f1b077dc752c90781d0cd6877c91c1fc865586bf661f28cbded4266f1b9364ae7233e6003b47088cb50f81a631d4b1d200f8c38455ad2217eaf03b6e0a0861aeebe28ef0fcbac5526bd06ebcc44f67de9b908f0359076527f6ff7bb959b3adfc9ac82728d7627bf506ffb2f8742ae28ce3ca7402c25b1cd3dac6781776a35549480ff537c33f63796dd5de4c64e1ff5546689d8f398be911707e0b5d347b8456e89eb2262270ee1de85902b7deb60b02b
+Ctrl.hexxcghash = hexxcghash:e94db0c0969c8f09c1c0d63fcca9f316ae85a0c034f118958c714fa165ac71a86bbcc7a4c017c11b9558bda897455f99
+Ctrl.hexsession_id = hexsession_id:a01426386ce69a9a9f101394e831dc9d17a6dc901349f3c3f4269788f5c5e20316c233d7632005b1771e5bc2f5ddf4c2
+Ctrl.type = type:F
+Output = c3fb2ab670e39885cbb98a4609d69a90afd37d383512ad222d63c9c6f1009e2a42065a232ab5b39f55247f8bf9e6ab2c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001b9f110b05461796db3a0b751638b552e62a062d7b891591ac75e237d47f5f12d97a5d19be0718c8a2fbdd9100249c2d9ca59bf491b10afef75f61c53ae92455e8cb016e230408c869ea1c5f5d62e853ae84727e3d1f1bb0a0faa9ff575eede461f502b90ca38e8effae09478efedd16090202bf03530d03d0a2aa70825fb28c606b7545bdde26d606c059215a9f947e60c4b5de9b35a3704f73a5c8bc8811387431b7e90f1ddc71cf0696497fd640cb9b1b8866bff5d85e879e0a7848722d34cc62844afcc6318fe73ea80e484c3e62feb0cde9269c07edc0679683bc5427a163a4b4ac463802293f7c968e4188e7966b559c2581582c67ecda0c9b3b8eac94
+Ctrl.hexxcghash = hexxcghash:8886115c2324dede13be6895605a439c6ec48ca46f3d82170b863dcf1acc26176769626df893ebb7ce8c9432058633d8
+Ctrl.hexsession_id = hexsession_id:331f7e0103de46d90dbd885dadaf67c589bc6b3caf25e45e329d864c85b7c9ae17b27cb92a81c9b4421f431014cb0e03
+Ctrl.type = type:A
+Output = 6e9bb7681d56457fd93aea6d40860dd9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001b9f110b05461796db3a0b751638b552e62a062d7b891591ac75e237d47f5f12d97a5d19be0718c8a2fbdd9100249c2d9ca59bf491b10afef75f61c53ae92455e8cb016e230408c869ea1c5f5d62e853ae84727e3d1f1bb0a0faa9ff575eede461f502b90ca38e8effae09478efedd16090202bf03530d03d0a2aa70825fb28c606b7545bdde26d606c059215a9f947e60c4b5de9b35a3704f73a5c8bc8811387431b7e90f1ddc71cf0696497fd640cb9b1b8866bff5d85e879e0a7848722d34cc62844afcc6318fe73ea80e484c3e62feb0cde9269c07edc0679683bc5427a163a4b4ac463802293f7c968e4188e7966b559c2581582c67ecda0c9b3b8eac94
+Ctrl.hexxcghash = hexxcghash:8886115c2324dede13be6895605a439c6ec48ca46f3d82170b863dcf1acc26176769626df893ebb7ce8c9432058633d8
+Ctrl.hexsession_id = hexsession_id:331f7e0103de46d90dbd885dadaf67c589bc6b3caf25e45e329d864c85b7c9ae17b27cb92a81c9b4421f431014cb0e03
+Ctrl.type = type:B
+Output = 5d19ce6c6b16c5f2179753a7abdff3e4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001b9f110b05461796db3a0b751638b552e62a062d7b891591ac75e237d47f5f12d97a5d19be0718c8a2fbdd9100249c2d9ca59bf491b10afef75f61c53ae92455e8cb016e230408c869ea1c5f5d62e853ae84727e3d1f1bb0a0faa9ff575eede461f502b90ca38e8effae09478efedd16090202bf03530d03d0a2aa70825fb28c606b7545bdde26d606c059215a9f947e60c4b5de9b35a3704f73a5c8bc8811387431b7e90f1ddc71cf0696497fd640cb9b1b8866bff5d85e879e0a7848722d34cc62844afcc6318fe73ea80e484c3e62feb0cde9269c07edc0679683bc5427a163a4b4ac463802293f7c968e4188e7966b559c2581582c67ecda0c9b3b8eac94
+Ctrl.hexxcghash = hexxcghash:8886115c2324dede13be6895605a439c6ec48ca46f3d82170b863dcf1acc26176769626df893ebb7ce8c9432058633d8
+Ctrl.hexsession_id = hexsession_id:331f7e0103de46d90dbd885dadaf67c589bc6b3caf25e45e329d864c85b7c9ae17b27cb92a81c9b4421f431014cb0e03
+Ctrl.type = type:C
+Output = c550416e8ea0608a09051cfffe0494e7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001b9f110b05461796db3a0b751638b552e62a062d7b891591ac75e237d47f5f12d97a5d19be0718c8a2fbdd9100249c2d9ca59bf491b10afef75f61c53ae92455e8cb016e230408c869ea1c5f5d62e853ae84727e3d1f1bb0a0faa9ff575eede461f502b90ca38e8effae09478efedd16090202bf03530d03d0a2aa70825fb28c606b7545bdde26d606c059215a9f947e60c4b5de9b35a3704f73a5c8bc8811387431b7e90f1ddc71cf0696497fd640cb9b1b8866bff5d85e879e0a7848722d34cc62844afcc6318fe73ea80e484c3e62feb0cde9269c07edc0679683bc5427a163a4b4ac463802293f7c968e4188e7966b559c2581582c67ecda0c9b3b8eac94
+Ctrl.hexxcghash = hexxcghash:8886115c2324dede13be6895605a439c6ec48ca46f3d82170b863dcf1acc26176769626df893ebb7ce8c9432058633d8
+Ctrl.hexsession_id = hexsession_id:331f7e0103de46d90dbd885dadaf67c589bc6b3caf25e45e329d864c85b7c9ae17b27cb92a81c9b4421f431014cb0e03
+Ctrl.type = type:D
+Output = 33c9f3f03de395cef067684cb5b95200
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001b9f110b05461796db3a0b751638b552e62a062d7b891591ac75e237d47f5f12d97a5d19be0718c8a2fbdd9100249c2d9ca59bf491b10afef75f61c53ae92455e8cb016e230408c869ea1c5f5d62e853ae84727e3d1f1bb0a0faa9ff575eede461f502b90ca38e8effae09478efedd16090202bf03530d03d0a2aa70825fb28c606b7545bdde26d606c059215a9f947e60c4b5de9b35a3704f73a5c8bc8811387431b7e90f1ddc71cf0696497fd640cb9b1b8866bff5d85e879e0a7848722d34cc62844afcc6318fe73ea80e484c3e62feb0cde9269c07edc0679683bc5427a163a4b4ac463802293f7c968e4188e7966b559c2581582c67ecda0c9b3b8eac94
+Ctrl.hexxcghash = hexxcghash:8886115c2324dede13be6895605a439c6ec48ca46f3d82170b863dcf1acc26176769626df893ebb7ce8c9432058633d8
+Ctrl.hexsession_id = hexsession_id:331f7e0103de46d90dbd885dadaf67c589bc6b3caf25e45e329d864c85b7c9ae17b27cb92a81c9b4421f431014cb0e03
+Ctrl.type = type:E
+Output = 99071b0615bdec08d040e731828028fac9a16d367b86d2d1302b607cd39ac9678ae7f9f87eb619fe2ba75d54da3b07d1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001b9f110b05461796db3a0b751638b552e62a062d7b891591ac75e237d47f5f12d97a5d19be0718c8a2fbdd9100249c2d9ca59bf491b10afef75f61c53ae92455e8cb016e230408c869ea1c5f5d62e853ae84727e3d1f1bb0a0faa9ff575eede461f502b90ca38e8effae09478efedd16090202bf03530d03d0a2aa70825fb28c606b7545bdde26d606c059215a9f947e60c4b5de9b35a3704f73a5c8bc8811387431b7e90f1ddc71cf0696497fd640cb9b1b8866bff5d85e879e0a7848722d34cc62844afcc6318fe73ea80e484c3e62feb0cde9269c07edc0679683bc5427a163a4b4ac463802293f7c968e4188e7966b559c2581582c67ecda0c9b3b8eac94
+Ctrl.hexxcghash = hexxcghash:8886115c2324dede13be6895605a439c6ec48ca46f3d82170b863dcf1acc26176769626df893ebb7ce8c9432058633d8
+Ctrl.hexsession_id = hexsession_id:331f7e0103de46d90dbd885dadaf67c589bc6b3caf25e45e329d864c85b7c9ae17b27cb92a81c9b4421f431014cb0e03
+Ctrl.type = type:F
+Output = a11fc539c46d9314645e1f7517e19794a6ba4bf7d7d5a6f71bcb4621bfdedeae3bbcaa62fb638d994d1f21d14f5777d7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004db530516876fb9937bc2da16117f9675c721da6b80cd49e6b6eb0df6fe4af90ae755378e77e28dbc376e000903b1365a7b3cddfaf19410b31ae44e3e6641c5d47002ac5b261b1c4f7f301c8d16a917135c23bf7f84f15a6143e7e3466c52e1e3c30026f15d5254da11ced1b817739768de9913aca2d808acaa31e933763eb438238b347a6bd07834d4f661690cdb2372b4205aa9ad80df40340c1d0b1db320df1d1b13fa2ff4b9ee4500c9d03f45e75fb15a97b833ab9827708e4bca8fea562d69fea573ca7b5905c71e51dc9f24a74bd0c596051066acdeb66eb39c76fab66b10bdc88e1b72bba8aafa342088cd4a739a18e61c75be6b5df0904dc5094f0df
+Ctrl.hexxcghash = hexxcghash:12ce3e6a5407943831d65608c9fd59c972689136289af06071c015f8a41c9d1536d0afdad084322f832415fbf199d044
+Ctrl.hexsession_id = hexsession_id:939c41734aa3db9d9dfac7a7db54c889da38d8bbe00326f559a3b0f92a96b5ac3a454d8355ccd0f31099021d0ee43063
+Ctrl.type = type:A
+Output = 876692595fbf1239e03b1eb28890cedf
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004db530516876fb9937bc2da16117f9675c721da6b80cd49e6b6eb0df6fe4af90ae755378e77e28dbc376e000903b1365a7b3cddfaf19410b31ae44e3e6641c5d47002ac5b261b1c4f7f301c8d16a917135c23bf7f84f15a6143e7e3466c52e1e3c30026f15d5254da11ced1b817739768de9913aca2d808acaa31e933763eb438238b347a6bd07834d4f661690cdb2372b4205aa9ad80df40340c1d0b1db320df1d1b13fa2ff4b9ee4500c9d03f45e75fb15a97b833ab9827708e4bca8fea562d69fea573ca7b5905c71e51dc9f24a74bd0c596051066acdeb66eb39c76fab66b10bdc88e1b72bba8aafa342088cd4a739a18e61c75be6b5df0904dc5094f0df
+Ctrl.hexxcghash = hexxcghash:12ce3e6a5407943831d65608c9fd59c972689136289af06071c015f8a41c9d1536d0afdad084322f832415fbf199d044
+Ctrl.hexsession_id = hexsession_id:939c41734aa3db9d9dfac7a7db54c889da38d8bbe00326f559a3b0f92a96b5ac3a454d8355ccd0f31099021d0ee43063
+Ctrl.type = type:B
+Output = 438afd7eae8454675ed5964122fcbb9e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004db530516876fb9937bc2da16117f9675c721da6b80cd49e6b6eb0df6fe4af90ae755378e77e28dbc376e000903b1365a7b3cddfaf19410b31ae44e3e6641c5d47002ac5b261b1c4f7f301c8d16a917135c23bf7f84f15a6143e7e3466c52e1e3c30026f15d5254da11ced1b817739768de9913aca2d808acaa31e933763eb438238b347a6bd07834d4f661690cdb2372b4205aa9ad80df40340c1d0b1db320df1d1b13fa2ff4b9ee4500c9d03f45e75fb15a97b833ab9827708e4bca8fea562d69fea573ca7b5905c71e51dc9f24a74bd0c596051066acdeb66eb39c76fab66b10bdc88e1b72bba8aafa342088cd4a739a18e61c75be6b5df0904dc5094f0df
+Ctrl.hexxcghash = hexxcghash:12ce3e6a5407943831d65608c9fd59c972689136289af06071c015f8a41c9d1536d0afdad084322f832415fbf199d044
+Ctrl.hexsession_id = hexsession_id:939c41734aa3db9d9dfac7a7db54c889da38d8bbe00326f559a3b0f92a96b5ac3a454d8355ccd0f31099021d0ee43063
+Ctrl.type = type:C
+Output = b9cc0e2718c5853e0aebb43409fcaaef
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004db530516876fb9937bc2da16117f9675c721da6b80cd49e6b6eb0df6fe4af90ae755378e77e28dbc376e000903b1365a7b3cddfaf19410b31ae44e3e6641c5d47002ac5b261b1c4f7f301c8d16a917135c23bf7f84f15a6143e7e3466c52e1e3c30026f15d5254da11ced1b817739768de9913aca2d808acaa31e933763eb438238b347a6bd07834d4f661690cdb2372b4205aa9ad80df40340c1d0b1db320df1d1b13fa2ff4b9ee4500c9d03f45e75fb15a97b833ab9827708e4bca8fea562d69fea573ca7b5905c71e51dc9f24a74bd0c596051066acdeb66eb39c76fab66b10bdc88e1b72bba8aafa342088cd4a739a18e61c75be6b5df0904dc5094f0df
+Ctrl.hexxcghash = hexxcghash:12ce3e6a5407943831d65608c9fd59c972689136289af06071c015f8a41c9d1536d0afdad084322f832415fbf199d044
+Ctrl.hexsession_id = hexsession_id:939c41734aa3db9d9dfac7a7db54c889da38d8bbe00326f559a3b0f92a96b5ac3a454d8355ccd0f31099021d0ee43063
+Ctrl.type = type:D
+Output = 8def9f93e633ac2d28a7c5b76567a4cb
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004db530516876fb9937bc2da16117f9675c721da6b80cd49e6b6eb0df6fe4af90ae755378e77e28dbc376e000903b1365a7b3cddfaf19410b31ae44e3e6641c5d47002ac5b261b1c4f7f301c8d16a917135c23bf7f84f15a6143e7e3466c52e1e3c30026f15d5254da11ced1b817739768de9913aca2d808acaa31e933763eb438238b347a6bd07834d4f661690cdb2372b4205aa9ad80df40340c1d0b1db320df1d1b13fa2ff4b9ee4500c9d03f45e75fb15a97b833ab9827708e4bca8fea562d69fea573ca7b5905c71e51dc9f24a74bd0c596051066acdeb66eb39c76fab66b10bdc88e1b72bba8aafa342088cd4a739a18e61c75be6b5df0904dc5094f0df
+Ctrl.hexxcghash = hexxcghash:12ce3e6a5407943831d65608c9fd59c972689136289af06071c015f8a41c9d1536d0afdad084322f832415fbf199d044
+Ctrl.hexsession_id = hexsession_id:939c41734aa3db9d9dfac7a7db54c889da38d8bbe00326f559a3b0f92a96b5ac3a454d8355ccd0f31099021d0ee43063
+Ctrl.type = type:E
+Output = 3d80ed20f0703857154bda8531b12b96cf73aedfc662df6faf277321be6e38c904bfbd5f9206607684ac331dfc92bbbb
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004db530516876fb9937bc2da16117f9675c721da6b80cd49e6b6eb0df6fe4af90ae755378e77e28dbc376e000903b1365a7b3cddfaf19410b31ae44e3e6641c5d47002ac5b261b1c4f7f301c8d16a917135c23bf7f84f15a6143e7e3466c52e1e3c30026f15d5254da11ced1b817739768de9913aca2d808acaa31e933763eb438238b347a6bd07834d4f661690cdb2372b4205aa9ad80df40340c1d0b1db320df1d1b13fa2ff4b9ee4500c9d03f45e75fb15a97b833ab9827708e4bca8fea562d69fea573ca7b5905c71e51dc9f24a74bd0c596051066acdeb66eb39c76fab66b10bdc88e1b72bba8aafa342088cd4a739a18e61c75be6b5df0904dc5094f0df
+Ctrl.hexxcghash = hexxcghash:12ce3e6a5407943831d65608c9fd59c972689136289af06071c015f8a41c9d1536d0afdad084322f832415fbf199d044
+Ctrl.hexsession_id = hexsession_id:939c41734aa3db9d9dfac7a7db54c889da38d8bbe00326f559a3b0f92a96b5ac3a454d8355ccd0f31099021d0ee43063
+Ctrl.type = type:F
+Output = 736e77ad5a8fac835795ab08522d834e34a4cbc48439db2845cb1d8636a4dcfd49a7ac5413713a8177c277eead96a0ff
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004d7ba3e909e1e2886e00db333430d7cebe5107e9701672a2a1bc0bb5461c620c56fc8a8aa95a577cf48ac2e5b35d948e468bbc6232527f6a4e3bf5ea0b2f68b161ee3aadeef596c683e511bec1ff70df312d988eddd557952720f82f69882107f67880e38efcca68429374d85831eea3ac133a6a89b68a9ec27c71a67c87addfddb7040a7416ead43e29612dcdc5b7e6a82ad5cd243e8a6dd2997c44ad76a2a20145f89d7e6b2a26c2c0f2ce7d60b1f45410f9ebb79b52dde560f8c7c99b7a11d645f6ad6f94727cd2ea9d48ceb27467ee60371e6919a3ae044c8941a65182c94e8efd7b5c7eb45935baea722628d89d89de995d82b620059fe1054927864a91
+Ctrl.hexxcghash = hexxcghash:f3cc38427adf01b9483d1f9e4e9acef554a8c7d0d8dc088d3865f05bc06a4ff11efbbdbca7ab0e0c0e2df55a93f0b4b9
+Ctrl.hexsession_id = hexsession_id:aae879d8c0c6762d28c30fdc707b169a2155f8b8a943ced399a56419be89cc9f66ba9282d85ac4e53e0d5ae27adcf393
+Ctrl.type = type:A
+Output = c84a4fcd4ade28805b032174428a6f27
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004d7ba3e909e1e2886e00db333430d7cebe5107e9701672a2a1bc0bb5461c620c56fc8a8aa95a577cf48ac2e5b35d948e468bbc6232527f6a4e3bf5ea0b2f68b161ee3aadeef596c683e511bec1ff70df312d988eddd557952720f82f69882107f67880e38efcca68429374d85831eea3ac133a6a89b68a9ec27c71a67c87addfddb7040a7416ead43e29612dcdc5b7e6a82ad5cd243e8a6dd2997c44ad76a2a20145f89d7e6b2a26c2c0f2ce7d60b1f45410f9ebb79b52dde560f8c7c99b7a11d645f6ad6f94727cd2ea9d48ceb27467ee60371e6919a3ae044c8941a65182c94e8efd7b5c7eb45935baea722628d89d89de995d82b620059fe1054927864a91
+Ctrl.hexxcghash = hexxcghash:f3cc38427adf01b9483d1f9e4e9acef554a8c7d0d8dc088d3865f05bc06a4ff11efbbdbca7ab0e0c0e2df55a93f0b4b9
+Ctrl.hexsession_id = hexsession_id:aae879d8c0c6762d28c30fdc707b169a2155f8b8a943ced399a56419be89cc9f66ba9282d85ac4e53e0d5ae27adcf393
+Ctrl.type = type:B
+Output = 27b0de69f3bc7d79d2f6b54101f3e10f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004d7ba3e909e1e2886e00db333430d7cebe5107e9701672a2a1bc0bb5461c620c56fc8a8aa95a577cf48ac2e5b35d948e468bbc6232527f6a4e3bf5ea0b2f68b161ee3aadeef596c683e511bec1ff70df312d988eddd557952720f82f69882107f67880e38efcca68429374d85831eea3ac133a6a89b68a9ec27c71a67c87addfddb7040a7416ead43e29612dcdc5b7e6a82ad5cd243e8a6dd2997c44ad76a2a20145f89d7e6b2a26c2c0f2ce7d60b1f45410f9ebb79b52dde560f8c7c99b7a11d645f6ad6f94727cd2ea9d48ceb27467ee60371e6919a3ae044c8941a65182c94e8efd7b5c7eb45935baea722628d89d89de995d82b620059fe1054927864a91
+Ctrl.hexxcghash = hexxcghash:f3cc38427adf01b9483d1f9e4e9acef554a8c7d0d8dc088d3865f05bc06a4ff11efbbdbca7ab0e0c0e2df55a93f0b4b9
+Ctrl.hexsession_id = hexsession_id:aae879d8c0c6762d28c30fdc707b169a2155f8b8a943ced399a56419be89cc9f66ba9282d85ac4e53e0d5ae27adcf393
+Ctrl.type = type:C
+Output = 3200c39e6ed260f4f345cbd0c88cac1a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004d7ba3e909e1e2886e00db333430d7cebe5107e9701672a2a1bc0bb5461c620c56fc8a8aa95a577cf48ac2e5b35d948e468bbc6232527f6a4e3bf5ea0b2f68b161ee3aadeef596c683e511bec1ff70df312d988eddd557952720f82f69882107f67880e38efcca68429374d85831eea3ac133a6a89b68a9ec27c71a67c87addfddb7040a7416ead43e29612dcdc5b7e6a82ad5cd243e8a6dd2997c44ad76a2a20145f89d7e6b2a26c2c0f2ce7d60b1f45410f9ebb79b52dde560f8c7c99b7a11d645f6ad6f94727cd2ea9d48ceb27467ee60371e6919a3ae044c8941a65182c94e8efd7b5c7eb45935baea722628d89d89de995d82b620059fe1054927864a91
+Ctrl.hexxcghash = hexxcghash:f3cc38427adf01b9483d1f9e4e9acef554a8c7d0d8dc088d3865f05bc06a4ff11efbbdbca7ab0e0c0e2df55a93f0b4b9
+Ctrl.hexsession_id = hexsession_id:aae879d8c0c6762d28c30fdc707b169a2155f8b8a943ced399a56419be89cc9f66ba9282d85ac4e53e0d5ae27adcf393
+Ctrl.type = type:D
+Output = 7b9e506a1baede9b80dff09253a9ab88
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004d7ba3e909e1e2886e00db333430d7cebe5107e9701672a2a1bc0bb5461c620c56fc8a8aa95a577cf48ac2e5b35d948e468bbc6232527f6a4e3bf5ea0b2f68b161ee3aadeef596c683e511bec1ff70df312d988eddd557952720f82f69882107f67880e38efcca68429374d85831eea3ac133a6a89b68a9ec27c71a67c87addfddb7040a7416ead43e29612dcdc5b7e6a82ad5cd243e8a6dd2997c44ad76a2a20145f89d7e6b2a26c2c0f2ce7d60b1f45410f9ebb79b52dde560f8c7c99b7a11d645f6ad6f94727cd2ea9d48ceb27467ee60371e6919a3ae044c8941a65182c94e8efd7b5c7eb45935baea722628d89d89de995d82b620059fe1054927864a91
+Ctrl.hexxcghash = hexxcghash:f3cc38427adf01b9483d1f9e4e9acef554a8c7d0d8dc088d3865f05bc06a4ff11efbbdbca7ab0e0c0e2df55a93f0b4b9
+Ctrl.hexsession_id = hexsession_id:aae879d8c0c6762d28c30fdc707b169a2155f8b8a943ced399a56419be89cc9f66ba9282d85ac4e53e0d5ae27adcf393
+Ctrl.type = type:E
+Output = 3c860ae21a5dab865eb560ed9ddf51775d3b6603e4e06285cf5e9273115a77d8d5ddfb977fd21c0a70c35798a5ef596e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001004d7ba3e909e1e2886e00db333430d7cebe5107e9701672a2a1bc0bb5461c620c56fc8a8aa95a577cf48ac2e5b35d948e468bbc6232527f6a4e3bf5ea0b2f68b161ee3aadeef596c683e511bec1ff70df312d988eddd557952720f82f69882107f67880e38efcca68429374d85831eea3ac133a6a89b68a9ec27c71a67c87addfddb7040a7416ead43e29612dcdc5b7e6a82ad5cd243e8a6dd2997c44ad76a2a20145f89d7e6b2a26c2c0f2ce7d60b1f45410f9ebb79b52dde560f8c7c99b7a11d645f6ad6f94727cd2ea9d48ceb27467ee60371e6919a3ae044c8941a65182c94e8efd7b5c7eb45935baea722628d89d89de995d82b620059fe1054927864a91
+Ctrl.hexxcghash = hexxcghash:f3cc38427adf01b9483d1f9e4e9acef554a8c7d0d8dc088d3865f05bc06a4ff11efbbdbca7ab0e0c0e2df55a93f0b4b9
+Ctrl.hexsession_id = hexsession_id:aae879d8c0c6762d28c30fdc707b169a2155f8b8a943ced399a56419be89cc9f66ba9282d85ac4e53e0d5ae27adcf393
+Ctrl.type = type:F
+Output = c53cfa0836ac21bb13c58ed15ddf593e8e01c7437587112ba013058d411d262d87a5e56c098b69146d9019803206ef91
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001cbe25a738580c94ae733a5d4e9e61860bf1a68dfac365edc5818814166cfaecf269d07293d656c8e99973934b5f14eb4bcd1ac3c388596221f65f66e1193463bd41fcff389e458ef7f1ef858439b600bca422cd29c84d2cbc684c7a85d8b44f6a43a5fc53bbaa4ad1a6b0f2b841278efb1fbdd2513e6603984027efb81c72d8c4cbadc8dec51089dcd43ed3109ddbc6db29534186a237c5d8c3a66dedbb51b09937b1c7d4cf6cac682ba2dd1c9cf901d66f1a995f945d5ad12bd7bfdd3fcc5b0852376b9834f0bee3f7a666f587bd2a3b562ccf129b6132c902738fd0dfea3ff9538961bf5f59ac1779dd4ed68986059881f5e08be5ecd1a59380392e81f0a6
+Ctrl.hexxcghash = hexxcghash:b32d4e6b47772e651b867558a03f488fc00c715c196c7abb1abf3ebc24a638edd058e77aeadd9aade5ce34f43e19f1fc
+Ctrl.hexsession_id = hexsession_id:5d2a819b135d8d985643ceab3461ede24ed192c60471676031b4b1f8ae71dec657547fdb3a43f75112855ffce72b60f4
+Ctrl.type = type:A
+Output = e34b595f755ff42a33126d8efabe1ec0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001cbe25a738580c94ae733a5d4e9e61860bf1a68dfac365edc5818814166cfaecf269d07293d656c8e99973934b5f14eb4bcd1ac3c388596221f65f66e1193463bd41fcff389e458ef7f1ef858439b600bca422cd29c84d2cbc684c7a85d8b44f6a43a5fc53bbaa4ad1a6b0f2b841278efb1fbdd2513e6603984027efb81c72d8c4cbadc8dec51089dcd43ed3109ddbc6db29534186a237c5d8c3a66dedbb51b09937b1c7d4cf6cac682ba2dd1c9cf901d66f1a995f945d5ad12bd7bfdd3fcc5b0852376b9834f0bee3f7a666f587bd2a3b562ccf129b6132c902738fd0dfea3ff9538961bf5f59ac1779dd4ed68986059881f5e08be5ecd1a59380392e81f0a6
+Ctrl.hexxcghash = hexxcghash:b32d4e6b47772e651b867558a03f488fc00c715c196c7abb1abf3ebc24a638edd058e77aeadd9aade5ce34f43e19f1fc
+Ctrl.hexsession_id = hexsession_id:5d2a819b135d8d985643ceab3461ede24ed192c60471676031b4b1f8ae71dec657547fdb3a43f75112855ffce72b60f4
+Ctrl.type = type:B
+Output = a873f52aa3b91a8dd019be8358c04de6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001cbe25a738580c94ae733a5d4e9e61860bf1a68dfac365edc5818814166cfaecf269d07293d656c8e99973934b5f14eb4bcd1ac3c388596221f65f66e1193463bd41fcff389e458ef7f1ef858439b600bca422cd29c84d2cbc684c7a85d8b44f6a43a5fc53bbaa4ad1a6b0f2b841278efb1fbdd2513e6603984027efb81c72d8c4cbadc8dec51089dcd43ed3109ddbc6db29534186a237c5d8c3a66dedbb51b09937b1c7d4cf6cac682ba2dd1c9cf901d66f1a995f945d5ad12bd7bfdd3fcc5b0852376b9834f0bee3f7a666f587bd2a3b562ccf129b6132c902738fd0dfea3ff9538961bf5f59ac1779dd4ed68986059881f5e08be5ecd1a59380392e81f0a6
+Ctrl.hexxcghash = hexxcghash:b32d4e6b47772e651b867558a03f488fc00c715c196c7abb1abf3ebc24a638edd058e77aeadd9aade5ce34f43e19f1fc
+Ctrl.hexsession_id = hexsession_id:5d2a819b135d8d985643ceab3461ede24ed192c60471676031b4b1f8ae71dec657547fdb3a43f75112855ffce72b60f4
+Ctrl.type = type:C
+Output = fce5c490a769fbd4aa31b0f5c7aad86b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001cbe25a738580c94ae733a5d4e9e61860bf1a68dfac365edc5818814166cfaecf269d07293d656c8e99973934b5f14eb4bcd1ac3c388596221f65f66e1193463bd41fcff389e458ef7f1ef858439b600bca422cd29c84d2cbc684c7a85d8b44f6a43a5fc53bbaa4ad1a6b0f2b841278efb1fbdd2513e6603984027efb81c72d8c4cbadc8dec51089dcd43ed3109ddbc6db29534186a237c5d8c3a66dedbb51b09937b1c7d4cf6cac682ba2dd1c9cf901d66f1a995f945d5ad12bd7bfdd3fcc5b0852376b9834f0bee3f7a666f587bd2a3b562ccf129b6132c902738fd0dfea3ff9538961bf5f59ac1779dd4ed68986059881f5e08be5ecd1a59380392e81f0a6
+Ctrl.hexxcghash = hexxcghash:b32d4e6b47772e651b867558a03f488fc00c715c196c7abb1abf3ebc24a638edd058e77aeadd9aade5ce34f43e19f1fc
+Ctrl.hexsession_id = hexsession_id:5d2a819b135d8d985643ceab3461ede24ed192c60471676031b4b1f8ae71dec657547fdb3a43f75112855ffce72b60f4
+Ctrl.type = type:D
+Output = d36a9b7d2c63675d2b250d5a97b0e628
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001cbe25a738580c94ae733a5d4e9e61860bf1a68dfac365edc5818814166cfaecf269d07293d656c8e99973934b5f14eb4bcd1ac3c388596221f65f66e1193463bd41fcff389e458ef7f1ef858439b600bca422cd29c84d2cbc684c7a85d8b44f6a43a5fc53bbaa4ad1a6b0f2b841278efb1fbdd2513e6603984027efb81c72d8c4cbadc8dec51089dcd43ed3109ddbc6db29534186a237c5d8c3a66dedbb51b09937b1c7d4cf6cac682ba2dd1c9cf901d66f1a995f945d5ad12bd7bfdd3fcc5b0852376b9834f0bee3f7a666f587bd2a3b562ccf129b6132c902738fd0dfea3ff9538961bf5f59ac1779dd4ed68986059881f5e08be5ecd1a59380392e81f0a6
+Ctrl.hexxcghash = hexxcghash:b32d4e6b47772e651b867558a03f488fc00c715c196c7abb1abf3ebc24a638edd058e77aeadd9aade5ce34f43e19f1fc
+Ctrl.hexsession_id = hexsession_id:5d2a819b135d8d985643ceab3461ede24ed192c60471676031b4b1f8ae71dec657547fdb3a43f75112855ffce72b60f4
+Ctrl.type = type:E
+Output = 92c8f89f84575cebb9c37be3a488d0b0312a12d9253dbada7db1318f5a193d4f8f75a212a75c1123bca89d5de43cbf08
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:000001001cbe25a738580c94ae733a5d4e9e61860bf1a68dfac365edc5818814166cfaecf269d07293d656c8e99973934b5f14eb4bcd1ac3c388596221f65f66e1193463bd41fcff389e458ef7f1ef858439b600bca422cd29c84d2cbc684c7a85d8b44f6a43a5fc53bbaa4ad1a6b0f2b841278efb1fbdd2513e6603984027efb81c72d8c4cbadc8dec51089dcd43ed3109ddbc6db29534186a237c5d8c3a66dedbb51b09937b1c7d4cf6cac682ba2dd1c9cf901d66f1a995f945d5ad12bd7bfdd3fcc5b0852376b9834f0bee3f7a666f587bd2a3b562ccf129b6132c902738fd0dfea3ff9538961bf5f59ac1779dd4ed68986059881f5e08be5ecd1a59380392e81f0a6
+Ctrl.hexxcghash = hexxcghash:b32d4e6b47772e651b867558a03f488fc00c715c196c7abb1abf3ebc24a638edd058e77aeadd9aade5ce34f43e19f1fc
+Ctrl.hexsession_id = hexsession_id:5d2a819b135d8d985643ceab3461ede24ed192c60471676031b4b1f8ae71dec657547fdb3a43f75112855ffce72b60f4
+Ctrl.type = type:F
+Output = 16dcf1bd1aa4d5d6edc2d2b23792872f53767d6b2589e4700469a9bbbbb659c1c8716393fe1ed717833f491cd32d874b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c7f8bcaf17cb17db3d5c2c9e8db37fa77685463d604e6b577ace9ada1b5a7fb54a299684a5405973352262ed66a7e47e4cf9ba7981f76a0aa6bf407be5fc48f70869b6913f7d9b2395f73eda2f08ad5469df982bd82242c19bba0dbcc28fa5869bab99b84015a313cebcc3e86ec3fd15513e329a236487e909a6b37134bc75b03dbda7f9196738ae5f04ac3cae6a3c93150271eeed62f8c019f433df888acec09e947dee6537c4fee5e0dc37d3b4ae4ff77309382148f0127cd01b882f128ee844046c9f3052ff7fff81876c261ad6cdad0a9ebfc769a4308f124d2422f03c1b171ac3404d4d690e9c1d94fc3de479bda663c207120a18f1947a68179d19ecaa
+Ctrl.hexxcghash = hexxcghash:ce996d2b1198f069c24193526be1dd0d08a95d0b0a144da5a1303e84de4eb864d49ca71fa5a59f51c10b9d4257787626
+Ctrl.hexsession_id = hexsession_id:ed906230bdcff56bd239a8c52f3cb1e4e16d1249284162ca85b320e543f62a82d7270131231cf49e1b0c0b1e87643719
+Ctrl.type = type:A
+Output = bbdc47242c877cc70585a5d9f0b8067d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c7f8bcaf17cb17db3d5c2c9e8db37fa77685463d604e6b577ace9ada1b5a7fb54a299684a5405973352262ed66a7e47e4cf9ba7981f76a0aa6bf407be5fc48f70869b6913f7d9b2395f73eda2f08ad5469df982bd82242c19bba0dbcc28fa5869bab99b84015a313cebcc3e86ec3fd15513e329a236487e909a6b37134bc75b03dbda7f9196738ae5f04ac3cae6a3c93150271eeed62f8c019f433df888acec09e947dee6537c4fee5e0dc37d3b4ae4ff77309382148f0127cd01b882f128ee844046c9f3052ff7fff81876c261ad6cdad0a9ebfc769a4308f124d2422f03c1b171ac3404d4d690e9c1d94fc3de479bda663c207120a18f1947a68179d19ecaa
+Ctrl.hexxcghash = hexxcghash:ce996d2b1198f069c24193526be1dd0d08a95d0b0a144da5a1303e84de4eb864d49ca71fa5a59f51c10b9d4257787626
+Ctrl.hexsession_id = hexsession_id:ed906230bdcff56bd239a8c52f3cb1e4e16d1249284162ca85b320e543f62a82d7270131231cf49e1b0c0b1e87643719
+Ctrl.type = type:B
+Output = 6dcc6458af049a81a6d3139c2725f67d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c7f8bcaf17cb17db3d5c2c9e8db37fa77685463d604e6b577ace9ada1b5a7fb54a299684a5405973352262ed66a7e47e4cf9ba7981f76a0aa6bf407be5fc48f70869b6913f7d9b2395f73eda2f08ad5469df982bd82242c19bba0dbcc28fa5869bab99b84015a313cebcc3e86ec3fd15513e329a236487e909a6b37134bc75b03dbda7f9196738ae5f04ac3cae6a3c93150271eeed62f8c019f433df888acec09e947dee6537c4fee5e0dc37d3b4ae4ff77309382148f0127cd01b882f128ee844046c9f3052ff7fff81876c261ad6cdad0a9ebfc769a4308f124d2422f03c1b171ac3404d4d690e9c1d94fc3de479bda663c207120a18f1947a68179d19ecaa
+Ctrl.hexxcghash = hexxcghash:ce996d2b1198f069c24193526be1dd0d08a95d0b0a144da5a1303e84de4eb864d49ca71fa5a59f51c10b9d4257787626
+Ctrl.hexsession_id = hexsession_id:ed906230bdcff56bd239a8c52f3cb1e4e16d1249284162ca85b320e543f62a82d7270131231cf49e1b0c0b1e87643719
+Ctrl.type = type:C
+Output = f788d0b9ea5373031d44972fad39d8e6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c7f8bcaf17cb17db3d5c2c9e8db37fa77685463d604e6b577ace9ada1b5a7fb54a299684a5405973352262ed66a7e47e4cf9ba7981f76a0aa6bf407be5fc48f70869b6913f7d9b2395f73eda2f08ad5469df982bd82242c19bba0dbcc28fa5869bab99b84015a313cebcc3e86ec3fd15513e329a236487e909a6b37134bc75b03dbda7f9196738ae5f04ac3cae6a3c93150271eeed62f8c019f433df888acec09e947dee6537c4fee5e0dc37d3b4ae4ff77309382148f0127cd01b882f128ee844046c9f3052ff7fff81876c261ad6cdad0a9ebfc769a4308f124d2422f03c1b171ac3404d4d690e9c1d94fc3de479bda663c207120a18f1947a68179d19ecaa
+Ctrl.hexxcghash = hexxcghash:ce996d2b1198f069c24193526be1dd0d08a95d0b0a144da5a1303e84de4eb864d49ca71fa5a59f51c10b9d4257787626
+Ctrl.hexsession_id = hexsession_id:ed906230bdcff56bd239a8c52f3cb1e4e16d1249284162ca85b320e543f62a82d7270131231cf49e1b0c0b1e87643719
+Ctrl.type = type:D
+Output = e939b1367ea35c67ea990988c3c0c474
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c7f8bcaf17cb17db3d5c2c9e8db37fa77685463d604e6b577ace9ada1b5a7fb54a299684a5405973352262ed66a7e47e4cf9ba7981f76a0aa6bf407be5fc48f70869b6913f7d9b2395f73eda2f08ad5469df982bd82242c19bba0dbcc28fa5869bab99b84015a313cebcc3e86ec3fd15513e329a236487e909a6b37134bc75b03dbda7f9196738ae5f04ac3cae6a3c93150271eeed62f8c019f433df888acec09e947dee6537c4fee5e0dc37d3b4ae4ff77309382148f0127cd01b882f128ee844046c9f3052ff7fff81876c261ad6cdad0a9ebfc769a4308f124d2422f03c1b171ac3404d4d690e9c1d94fc3de479bda663c207120a18f1947a68179d19ecaa
+Ctrl.hexxcghash = hexxcghash:ce996d2b1198f069c24193526be1dd0d08a95d0b0a144da5a1303e84de4eb864d49ca71fa5a59f51c10b9d4257787626
+Ctrl.hexsession_id = hexsession_id:ed906230bdcff56bd239a8c52f3cb1e4e16d1249284162ca85b320e543f62a82d7270131231cf49e1b0c0b1e87643719
+Ctrl.type = type:E
+Output = 069629f693b4d291ea6f16355eb4c57eef7824217d22651af095aadac27a789314fee4e86efa9bc63085a8ebfc606548
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100c7f8bcaf17cb17db3d5c2c9e8db37fa77685463d604e6b577ace9ada1b5a7fb54a299684a5405973352262ed66a7e47e4cf9ba7981f76a0aa6bf407be5fc48f70869b6913f7d9b2395f73eda2f08ad5469df982bd82242c19bba0dbcc28fa5869bab99b84015a313cebcc3e86ec3fd15513e329a236487e909a6b37134bc75b03dbda7f9196738ae5f04ac3cae6a3c93150271eeed62f8c019f433df888acec09e947dee6537c4fee5e0dc37d3b4ae4ff77309382148f0127cd01b882f128ee844046c9f3052ff7fff81876c261ad6cdad0a9ebfc769a4308f124d2422f03c1b171ac3404d4d690e9c1d94fc3de479bda663c207120a18f1947a68179d19ecaa
+Ctrl.hexxcghash = hexxcghash:ce996d2b1198f069c24193526be1dd0d08a95d0b0a144da5a1303e84de4eb864d49ca71fa5a59f51c10b9d4257787626
+Ctrl.hexsession_id = hexsession_id:ed906230bdcff56bd239a8c52f3cb1e4e16d1249284162ca85b320e543f62a82d7270131231cf49e1b0c0b1e87643719
+Ctrl.type = type:F
+Output = 731107905e3b9b36ba3dca504b35f1a51e75e2a3ee2595ade882c21410d439ec1ec31fbc62e64362a5fddc0f39e76da0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100b41b41585296e85cce723619b40609b21799fb244d72fd87afa3088073819b232de7d9ab45ceaab3014099475e9314cff74149b5e4558962f31d3d2a84f24500558af928ff785dc32627f5062ea2d5bf6ff085edf6d200daca91037abda71b5c9c1660cbf60cfc3ec1fe590c3d6300aa279e42383f98f4000031bf57a2bb612c7a212bc0ec5057817b0843e01c14a9b353c26699670873db05de7049ac44951094c8b231713dab09ca641d3cea65c5e3b01d41d93351635b08a767afadfd7865388ebbe29e8f47033d1fe530d7d45fa1c266705b26d67282872da9551256d88708e1ec69ce9b94db6c7f3e6b7ae06418b36537b7839454c539b2bdd758af9c19
+Ctrl.hexxcghash = hexxcghash:5b168cac1113de12bac95aac34501866abd610c6ce0d51520f83c865db8d0c688b27af11e08deb4a2673c160edd1da93
+Ctrl.hexsession_id = hexsession_id:32dc32821483ed98f696813e712d229b6ff5a9e0f7f8e582a26f0a5204fa7655040ddbc791e00e7a979dded9354ea2dc
+Ctrl.type = type:A
+Output = 8e1af4ce3b9aa9f1e7493775f8846ac0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100b41b41585296e85cce723619b40609b21799fb244d72fd87afa3088073819b232de7d9ab45ceaab3014099475e9314cff74149b5e4558962f31d3d2a84f24500558af928ff785dc32627f5062ea2d5bf6ff085edf6d200daca91037abda71b5c9c1660cbf60cfc3ec1fe590c3d6300aa279e42383f98f4000031bf57a2bb612c7a212bc0ec5057817b0843e01c14a9b353c26699670873db05de7049ac44951094c8b231713dab09ca641d3cea65c5e3b01d41d93351635b08a767afadfd7865388ebbe29e8f47033d1fe530d7d45fa1c266705b26d67282872da9551256d88708e1ec69ce9b94db6c7f3e6b7ae06418b36537b7839454c539b2bdd758af9c19
+Ctrl.hexxcghash = hexxcghash:5b168cac1113de12bac95aac34501866abd610c6ce0d51520f83c865db8d0c688b27af11e08deb4a2673c160edd1da93
+Ctrl.hexsession_id = hexsession_id:32dc32821483ed98f696813e712d229b6ff5a9e0f7f8e582a26f0a5204fa7655040ddbc791e00e7a979dded9354ea2dc
+Ctrl.type = type:B
+Output = 1796cee0aeb39eb1fbbaeaf15d600832
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100b41b41585296e85cce723619b40609b21799fb244d72fd87afa3088073819b232de7d9ab45ceaab3014099475e9314cff74149b5e4558962f31d3d2a84f24500558af928ff785dc32627f5062ea2d5bf6ff085edf6d200daca91037abda71b5c9c1660cbf60cfc3ec1fe590c3d6300aa279e42383f98f4000031bf57a2bb612c7a212bc0ec5057817b0843e01c14a9b353c26699670873db05de7049ac44951094c8b231713dab09ca641d3cea65c5e3b01d41d93351635b08a767afadfd7865388ebbe29e8f47033d1fe530d7d45fa1c266705b26d67282872da9551256d88708e1ec69ce9b94db6c7f3e6b7ae06418b36537b7839454c539b2bdd758af9c19
+Ctrl.hexxcghash = hexxcghash:5b168cac1113de12bac95aac34501866abd610c6ce0d51520f83c865db8d0c688b27af11e08deb4a2673c160edd1da93
+Ctrl.hexsession_id = hexsession_id:32dc32821483ed98f696813e712d229b6ff5a9e0f7f8e582a26f0a5204fa7655040ddbc791e00e7a979dded9354ea2dc
+Ctrl.type = type:C
+Output = 7a7485045a2f8cc86f82c8486f8e9f59
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100b41b41585296e85cce723619b40609b21799fb244d72fd87afa3088073819b232de7d9ab45ceaab3014099475e9314cff74149b5e4558962f31d3d2a84f24500558af928ff785dc32627f5062ea2d5bf6ff085edf6d200daca91037abda71b5c9c1660cbf60cfc3ec1fe590c3d6300aa279e42383f98f4000031bf57a2bb612c7a212bc0ec5057817b0843e01c14a9b353c26699670873db05de7049ac44951094c8b231713dab09ca641d3cea65c5e3b01d41d93351635b08a767afadfd7865388ebbe29e8f47033d1fe530d7d45fa1c266705b26d67282872da9551256d88708e1ec69ce9b94db6c7f3e6b7ae06418b36537b7839454c539b2bdd758af9c19
+Ctrl.hexxcghash = hexxcghash:5b168cac1113de12bac95aac34501866abd610c6ce0d51520f83c865db8d0c688b27af11e08deb4a2673c160edd1da93
+Ctrl.hexsession_id = hexsession_id:32dc32821483ed98f696813e712d229b6ff5a9e0f7f8e582a26f0a5204fa7655040ddbc791e00e7a979dded9354ea2dc
+Ctrl.type = type:D
+Output = 00a9d893e8c14aa3a316163d50d83378
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100b41b41585296e85cce723619b40609b21799fb244d72fd87afa3088073819b232de7d9ab45ceaab3014099475e9314cff74149b5e4558962f31d3d2a84f24500558af928ff785dc32627f5062ea2d5bf6ff085edf6d200daca91037abda71b5c9c1660cbf60cfc3ec1fe590c3d6300aa279e42383f98f4000031bf57a2bb612c7a212bc0ec5057817b0843e01c14a9b353c26699670873db05de7049ac44951094c8b231713dab09ca641d3cea65c5e3b01d41d93351635b08a767afadfd7865388ebbe29e8f47033d1fe530d7d45fa1c266705b26d67282872da9551256d88708e1ec69ce9b94db6c7f3e6b7ae06418b36537b7839454c539b2bdd758af9c19
+Ctrl.hexxcghash = hexxcghash:5b168cac1113de12bac95aac34501866abd610c6ce0d51520f83c865db8d0c688b27af11e08deb4a2673c160edd1da93
+Ctrl.hexsession_id = hexsession_id:32dc32821483ed98f696813e712d229b6ff5a9e0f7f8e582a26f0a5204fa7655040ddbc791e00e7a979dded9354ea2dc
+Ctrl.type = type:E
+Output = 46133b1cbab3e04043a1b336db99575183d5be76f9d56556493a8d4a8da37a020ae379ff2d470a99ca7e9d2b1cf85cb4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexkey = hexkey:0000010100b41b41585296e85cce723619b40609b21799fb244d72fd87afa3088073819b232de7d9ab45ceaab3014099475e9314cff74149b5e4558962f31d3d2a84f24500558af928ff785dc32627f5062ea2d5bf6ff085edf6d200daca91037abda71b5c9c1660cbf60cfc3ec1fe590c3d6300aa279e42383f98f4000031bf57a2bb612c7a212bc0ec5057817b0843e01c14a9b353c26699670873db05de7049ac44951094c8b231713dab09ca641d3cea65c5e3b01d41d93351635b08a767afadfd7865388ebbe29e8f47033d1fe530d7d45fa1c266705b26d67282872da9551256d88708e1ec69ce9b94db6c7f3e6b7ae06418b36537b7839454c539b2bdd758af9c19
+Ctrl.hexxcghash = hexxcghash:5b168cac1113de12bac95aac34501866abd610c6ce0d51520f83c865db8d0c688b27af11e08deb4a2673c160edd1da93
+Ctrl.hexsession_id = hexsession_id:32dc32821483ed98f696813e712d229b6ff5a9e0f7f8e582a26f0a5204fa7655040ddbc791e00e7a979dded9354ea2dc
+Ctrl.type = type:F
+Output = 9221abcc3db5a557cca60408e65528e937cc3673b548c350924cd9e6387de526f5cb35a0bbe4020c47318b59d1a0527d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000080575308ca395798bb21ec5438c46a88ffa3f7f7671c06f924abf7c3cfb46c78c025596e4aba50c3271089184a447a571abb7f4a1b1c41f5d5ca8062940d4369778589fde81a71b2228f018c4c836cf389f854f86de71a68b1693fe8ffa1c59ce7e9f9223debada2566d2b0e5678a48bfb530e7bee42bd2ac7304a0a5ae339a2cd
+Ctrl.hexxcghash = hexxcghash:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.hexsession_id = hexsession_id:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.type = type:A
+Output = 0e2693ade0524af8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000080575308ca395798bb21ec5438c46a88ffa3f7f7671c06f924abf7c3cfb46c78c025596e4aba50c3271089184a447a571abb7f4a1b1c41f5d5ca8062940d4369778589fde81a71b2228f018c4c836cf389f854f86de71a68b1693fe8ffa1c59ce7e9f9223debada2566d2b0e5678a48bfb530e7bee42bd2ac7304a0a5ae339a2cd
+Ctrl.hexxcghash = hexxcghash:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.hexsession_id = hexsession_id:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.type = type:B
+Output = b13144de02295bb8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000080575308ca395798bb21ec5438c46a88ffa3f7f7671c06f924abf7c3cfb46c78c025596e4aba50c3271089184a447a571abb7f4a1b1c41f5d5ca8062940d4369778589fde81a71b2228f018c4c836cf389f854f86de71a68b1693fe8ffa1c59ce7e9f9223debada2566d2b0e5678a48bfb530e7bee42bd2ac7304a0a5ae339a2cd
+Ctrl.hexxcghash = hexxcghash:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.hexsession_id = hexsession_id:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.type = type:C
+Output = 7e4a721fb7379ebb423306464d57db46afa3cca10a1d7feb
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000080575308ca395798bb21ec5438c46a88ffa3f7f7671c06f924abf7c3cfb46c78c025596e4aba50c3271089184a447a571abb7f4a1b1c41f5d5ca8062940d4369778589fde81a71b2228f018c4c836cf389f854f86de71a68b1693fe8ffa1c59ce7e9f9223debada2566d2b0e5678a48bfb530e7bee42bd2ac7304a0a5ae339a2cd
+Ctrl.hexxcghash = hexxcghash:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.hexsession_id = hexsession_id:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.type = type:D
+Output = bb84123b1fac400e0df4767d78d011427e1edd4d4c934b95
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000080575308ca395798bb21ec5438c46a88ffa3f7f7671c06f924abf7c3cfb46c78c025596e4aba50c3271089184a447a571abb7f4a1b1c41f5d5ca8062940d4369778589fde81a71b2228f018c4c836cf389f854f86de71a68b1693fe8ffa1c59ce7e9f9223debada2566d2b0e5678a48bfb530e7bee42bd2ac7304a0a5ae339a2cd
+Ctrl.hexxcghash = hexxcghash:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.hexsession_id = hexsession_id:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.type = type:E
+Output = 00fb0a45c650dd9c95666b0c7fcea8c98f0562f61b862054ee400aec875dbbc2bdef4806c09217709a5050569312efe3af513e7aa733c72457abe1607ac01c13
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000080575308ca395798bb21ec5438c46a88ffa3f7f7671c06f924abf7c3cfb46c78c025596e4aba50c3271089184a447a571abb7f4a1b1c41f5d5ca8062940d4369778589fde81a71b2228f018c4c836cf389f854f86de71a68b1693fe8ffa1c59ce7e9f9223debada2566d2b0e5678a48bfb530e7bee42bd2ac7304a0a5ae339a2cd
+Ctrl.hexxcghash = hexxcghash:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.hexsession_id = hexsession_id:a4125aa9898092ca50c3c1631c03dcbc9df95cebb409881e580108b6cc4704b76cc77b8795fd5940561e3224cc75848518992bd8d9b70fe0fc977a476063c8bf
+Ctrl.type = type:F
+Output = 70a8005e711fb96dea5991cb68831b9e86005821b45ceaf958c13d5c87cbd2953d0877c267796edf8c7fb3d768bb26b74e542f40bf9ac9f6a9d217077e85f511
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000802b2e6f7545fa66e1078c67c5457dbf5ee03801edef4421d4f0e797b947b79e293ef724253ec4adb53977f027a2d577d7779e96be4e093b0c36be62778c5bd48dbb0bff1335470e10cdec4df88e8feb00d322426baf3035e9fda1aaf819be48dacc640d52eb8750cc6fd8031d0cba0ef0a11973d43138dd2d11d2eef1fc926327
+Ctrl.hexxcghash = hexxcghash:4dc005dc6ad5075cf6abbedb53a0407104659cd168b58d014fb2465d6f1d1140d5fef634f345c6c38ac2a8db3771e4b0c71c51faf85a297bbdf7ddf8228c3159
+Ctrl.hexsession_id = hexsession_id:a674aaced8345324221bbd8356ab8355fd3d3e410ae974c0da196f4cd58cc0236a85900626da696dab8be23aaa529458ac6ccf64058fd2fd140ca1a1a0c57988
+Ctrl.type = type:A
+Output = c75c77791f7b67c2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000802b2e6f7545fa66e1078c67c5457dbf5ee03801edef4421d4f0e797b947b79e293ef724253ec4adb53977f027a2d577d7779e96be4e093b0c36be62778c5bd48dbb0bff1335470e10cdec4df88e8feb00d322426baf3035e9fda1aaf819be48dacc640d52eb8750cc6fd8031d0cba0ef0a11973d43138dd2d11d2eef1fc926327
+Ctrl.hexxcghash = hexxcghash:4dc005dc6ad5075cf6abbedb53a0407104659cd168b58d014fb2465d6f1d1140d5fef634f345c6c38ac2a8db3771e4b0c71c51faf85a297bbdf7ddf8228c3159
+Ctrl.hexsession_id = hexsession_id:a674aaced8345324221bbd8356ab8355fd3d3e410ae974c0da196f4cd58cc0236a85900626da696dab8be23aaa529458ac6ccf64058fd2fd140ca1a1a0c57988
+Ctrl.type = type:B
+Output = dae1e8bfab1b4b7e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000802b2e6f7545fa66e1078c67c5457dbf5ee03801edef4421d4f0e797b947b79e293ef724253ec4adb53977f027a2d577d7779e96be4e093b0c36be62778c5bd48dbb0bff1335470e10cdec4df88e8feb00d322426baf3035e9fda1aaf819be48dacc640d52eb8750cc6fd8031d0cba0ef0a11973d43138dd2d11d2eef1fc926327
+Ctrl.hexxcghash = hexxcghash:4dc005dc6ad5075cf6abbedb53a0407104659cd168b58d014fb2465d6f1d1140d5fef634f345c6c38ac2a8db3771e4b0c71c51faf85a297bbdf7ddf8228c3159
+Ctrl.hexsession_id = hexsession_id:a674aaced8345324221bbd8356ab8355fd3d3e410ae974c0da196f4cd58cc0236a85900626da696dab8be23aaa529458ac6ccf64058fd2fd140ca1a1a0c57988
+Ctrl.type = type:C
+Output = 0e79f5b685ebe77ae6d62c344a5dd0f53502523a28e2b408
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000802b2e6f7545fa66e1078c67c5457dbf5ee03801edef4421d4f0e797b947b79e293ef724253ec4adb53977f027a2d577d7779e96be4e093b0c36be62778c5bd48dbb0bff1335470e10cdec4df88e8feb00d322426baf3035e9fda1aaf819be48dacc640d52eb8750cc6fd8031d0cba0ef0a11973d43138dd2d11d2eef1fc926327
+Ctrl.hexxcghash = hexxcghash:4dc005dc6ad5075cf6abbedb53a0407104659cd168b58d014fb2465d6f1d1140d5fef634f345c6c38ac2a8db3771e4b0c71c51faf85a297bbdf7ddf8228c3159
+Ctrl.hexsession_id = hexsession_id:a674aaced8345324221bbd8356ab8355fd3d3e410ae974c0da196f4cd58cc0236a85900626da696dab8be23aaa529458ac6ccf64058fd2fd140ca1a1a0c57988
+Ctrl.type = type:D
+Output = c5ec1aae5d26c2c5fe769576eb1b75c53d3dc67d452dca1c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000802b2e6f7545fa66e1078c67c5457dbf5ee03801edef4421d4f0e797b947b79e293ef724253ec4adb53977f027a2d577d7779e96be4e093b0c36be62778c5bd48dbb0bff1335470e10cdec4df88e8feb00d322426baf3035e9fda1aaf819be48dacc640d52eb8750cc6fd8031d0cba0ef0a11973d43138dd2d11d2eef1fc926327
+Ctrl.hexxcghash = hexxcghash:4dc005dc6ad5075cf6abbedb53a0407104659cd168b58d014fb2465d6f1d1140d5fef634f345c6c38ac2a8db3771e4b0c71c51faf85a297bbdf7ddf8228c3159
+Ctrl.hexsession_id = hexsession_id:a674aaced8345324221bbd8356ab8355fd3d3e410ae974c0da196f4cd58cc0236a85900626da696dab8be23aaa529458ac6ccf64058fd2fd140ca1a1a0c57988
+Ctrl.type = type:E
+Output = 6bc4e5d6049c69a8ffbf93c7617b6a168bd0f14d71471d199b81729250117272ad102772761a8c0b5d5240e589e48a4f85ab8c3e1bd030327e7c87428ee44d13
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000802b2e6f7545fa66e1078c67c5457dbf5ee03801edef4421d4f0e797b947b79e293ef724253ec4adb53977f027a2d577d7779e96be4e093b0c36be62778c5bd48dbb0bff1335470e10cdec4df88e8feb00d322426baf3035e9fda1aaf819be48dacc640d52eb8750cc6fd8031d0cba0ef0a11973d43138dd2d11d2eef1fc926327
+Ctrl.hexxcghash = hexxcghash:4dc005dc6ad5075cf6abbedb53a0407104659cd168b58d014fb2465d6f1d1140d5fef634f345c6c38ac2a8db3771e4b0c71c51faf85a297bbdf7ddf8228c3159
+Ctrl.hexsession_id = hexsession_id:a674aaced8345324221bbd8356ab8355fd3d3e410ae974c0da196f4cd58cc0236a85900626da696dab8be23aaa529458ac6ccf64058fd2fd140ca1a1a0c57988
+Ctrl.type = type:F
+Output = ce109babe86778542856e3934be12decd239120a4dcb948a0154c4cb7b8ac0a4a3cbd682698086123e6c0481ee351bd9fedfba58d37f7814ba9c2b584f6cfedf
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810085874b95394d5ca3096b0a7e6444e129544e4acd8dd7078c46dc74633df1737986e7dc6f58ac09c7d734fd68378f1ee6df60c48bde343e55ab2a5796ca3ec295f15a75500f476a8a6f1725fdade3339cd7da0a2528449652d7ea21a834e42961ede8477f63bac84ccdba933c276512d3670477d2696402175208526276712541
+Ctrl.hexxcghash = hexxcghash:8540955867f6580e9c1e7e3dfaef9c4f810dbf3364e54f66c471b51d11686598fabff6c3f78a7ac1c90710ab991aa00980f9d5948d462662f6c439fa7b80483f
+Ctrl.hexsession_id = hexsession_id:f2ebb7479c714402275075725c4712994f04485c048fad37d1505f1ce2cd6e32051782848afbea4399231fea5b8d39ec596e118dcc95ea35ffddd8c5611f5298
+Ctrl.type = type:A
+Output = 6a71fc98f044591d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810085874b95394d5ca3096b0a7e6444e129544e4acd8dd7078c46dc74633df1737986e7dc6f58ac09c7d734fd68378f1ee6df60c48bde343e55ab2a5796ca3ec295f15a75500f476a8a6f1725fdade3339cd7da0a2528449652d7ea21a834e42961ede8477f63bac84ccdba933c276512d3670477d2696402175208526276712541
+Ctrl.hexxcghash = hexxcghash:8540955867f6580e9c1e7e3dfaef9c4f810dbf3364e54f66c471b51d11686598fabff6c3f78a7ac1c90710ab991aa00980f9d5948d462662f6c439fa7b80483f
+Ctrl.hexsession_id = hexsession_id:f2ebb7479c714402275075725c4712994f04485c048fad37d1505f1ce2cd6e32051782848afbea4399231fea5b8d39ec596e118dcc95ea35ffddd8c5611f5298
+Ctrl.type = type:B
+Output = 9f1a35a5c79014c0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810085874b95394d5ca3096b0a7e6444e129544e4acd8dd7078c46dc74633df1737986e7dc6f58ac09c7d734fd68378f1ee6df60c48bde343e55ab2a5796ca3ec295f15a75500f476a8a6f1725fdade3339cd7da0a2528449652d7ea21a834e42961ede8477f63bac84ccdba933c276512d3670477d2696402175208526276712541
+Ctrl.hexxcghash = hexxcghash:8540955867f6580e9c1e7e3dfaef9c4f810dbf3364e54f66c471b51d11686598fabff6c3f78a7ac1c90710ab991aa00980f9d5948d462662f6c439fa7b80483f
+Ctrl.hexsession_id = hexsession_id:f2ebb7479c714402275075725c4712994f04485c048fad37d1505f1ce2cd6e32051782848afbea4399231fea5b8d39ec596e118dcc95ea35ffddd8c5611f5298
+Ctrl.type = type:C
+Output = 377901cc72e4c06e30e27b03902f65c4a58b9d3f5cf43431
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810085874b95394d5ca3096b0a7e6444e129544e4acd8dd7078c46dc74633df1737986e7dc6f58ac09c7d734fd68378f1ee6df60c48bde343e55ab2a5796ca3ec295f15a75500f476a8a6f1725fdade3339cd7da0a2528449652d7ea21a834e42961ede8477f63bac84ccdba933c276512d3670477d2696402175208526276712541
+Ctrl.hexxcghash = hexxcghash:8540955867f6580e9c1e7e3dfaef9c4f810dbf3364e54f66c471b51d11686598fabff6c3f78a7ac1c90710ab991aa00980f9d5948d462662f6c439fa7b80483f
+Ctrl.hexsession_id = hexsession_id:f2ebb7479c714402275075725c4712994f04485c048fad37d1505f1ce2cd6e32051782848afbea4399231fea5b8d39ec596e118dcc95ea35ffddd8c5611f5298
+Ctrl.type = type:D
+Output = 82a9db94ea5c15dff736c3074a34951e828c8dfa3fef8596
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810085874b95394d5ca3096b0a7e6444e129544e4acd8dd7078c46dc74633df1737986e7dc6f58ac09c7d734fd68378f1ee6df60c48bde343e55ab2a5796ca3ec295f15a75500f476a8a6f1725fdade3339cd7da0a2528449652d7ea21a834e42961ede8477f63bac84ccdba933c276512d3670477d2696402175208526276712541
+Ctrl.hexxcghash = hexxcghash:8540955867f6580e9c1e7e3dfaef9c4f810dbf3364e54f66c471b51d11686598fabff6c3f78a7ac1c90710ab991aa00980f9d5948d462662f6c439fa7b80483f
+Ctrl.hexsession_id = hexsession_id:f2ebb7479c714402275075725c4712994f04485c048fad37d1505f1ce2cd6e32051782848afbea4399231fea5b8d39ec596e118dcc95ea35ffddd8c5611f5298
+Ctrl.type = type:E
+Output = b3ce0202c966df307a0729a4bb3fcd0ee55d4c521a144ecd285a470830f60685b2d751883d85ccd29fcc2481f3f442fdedd58d17528e8c4fb28473ee5e539706
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810085874b95394d5ca3096b0a7e6444e129544e4acd8dd7078c46dc74633df1737986e7dc6f58ac09c7d734fd68378f1ee6df60c48bde343e55ab2a5796ca3ec295f15a75500f476a8a6f1725fdade3339cd7da0a2528449652d7ea21a834e42961ede8477f63bac84ccdba933c276512d3670477d2696402175208526276712541
+Ctrl.hexxcghash = hexxcghash:8540955867f6580e9c1e7e3dfaef9c4f810dbf3364e54f66c471b51d11686598fabff6c3f78a7ac1c90710ab991aa00980f9d5948d462662f6c439fa7b80483f
+Ctrl.hexsession_id = hexsession_id:f2ebb7479c714402275075725c4712994f04485c048fad37d1505f1ce2cd6e32051782848afbea4399231fea5b8d39ec596e118dcc95ea35ffddd8c5611f5298
+Ctrl.type = type:F
+Output = c1ab7227f919cbda46cd6ac2bd4bb2ee5bd586cc55c7c1cb067df4c9a23209f716ff5e97ed76ebbc0354d683c5369937ca8db4cecf9e6c40886a186d9c4e2366
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100e1436b5ef714092a6a0c8cc1593682a7ca4c05de423fb5f57c1d225943d8e4a5b526288a46a9a0fdb10b59c0beb8c1dc5b4d2bdf34eec2525df84bca2f8b769897183a45c7e61171ecea6e2be80d3becec8355ac3853bd8d077697af6e774133143265bdd538b4fb64786aaaa33e45138fd8697ff1c77b50f63dd8e9476a74c0
+Ctrl.hexxcghash = hexxcghash:367c80484d7e01e0915959e9fcb5124fa674489cf0ec4b0fee6a62dd77f677db901d9fb417cecf2a98f0b24bc24edbb1f34ab19f8d4d2976958f7d99ae2c78b3
+Ctrl.hexsession_id = hexsession_id:0a1bbfb890087ef260a88fafb92f16765444adc4dcb00efd4750d59f1d8f4b6662edd379d812ddc822cea79675731a5e5791f29ebd17f3f83e675e9e9f6af3e3
+Ctrl.type = type:A
+Output = 3832bf21b907daa3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100e1436b5ef714092a6a0c8cc1593682a7ca4c05de423fb5f57c1d225943d8e4a5b526288a46a9a0fdb10b59c0beb8c1dc5b4d2bdf34eec2525df84bca2f8b769897183a45c7e61171ecea6e2be80d3becec8355ac3853bd8d077697af6e774133143265bdd538b4fb64786aaaa33e45138fd8697ff1c77b50f63dd8e9476a74c0
+Ctrl.hexxcghash = hexxcghash:367c80484d7e01e0915959e9fcb5124fa674489cf0ec4b0fee6a62dd77f677db901d9fb417cecf2a98f0b24bc24edbb1f34ab19f8d4d2976958f7d99ae2c78b3
+Ctrl.hexsession_id = hexsession_id:0a1bbfb890087ef260a88fafb92f16765444adc4dcb00efd4750d59f1d8f4b6662edd379d812ddc822cea79675731a5e5791f29ebd17f3f83e675e9e9f6af3e3
+Ctrl.type = type:B
+Output = 4e04d7787ba7fa68
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100e1436b5ef714092a6a0c8cc1593682a7ca4c05de423fb5f57c1d225943d8e4a5b526288a46a9a0fdb10b59c0beb8c1dc5b4d2bdf34eec2525df84bca2f8b769897183a45c7e61171ecea6e2be80d3becec8355ac3853bd8d077697af6e774133143265bdd538b4fb64786aaaa33e45138fd8697ff1c77b50f63dd8e9476a74c0
+Ctrl.hexxcghash = hexxcghash:367c80484d7e01e0915959e9fcb5124fa674489cf0ec4b0fee6a62dd77f677db901d9fb417cecf2a98f0b24bc24edbb1f34ab19f8d4d2976958f7d99ae2c78b3
+Ctrl.hexsession_id = hexsession_id:0a1bbfb890087ef260a88fafb92f16765444adc4dcb00efd4750d59f1d8f4b6662edd379d812ddc822cea79675731a5e5791f29ebd17f3f83e675e9e9f6af3e3
+Ctrl.type = type:C
+Output = d7be949edcfe4e4b877de1cc6a861fa721e137bf3dd1bb27
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100e1436b5ef714092a6a0c8cc1593682a7ca4c05de423fb5f57c1d225943d8e4a5b526288a46a9a0fdb10b59c0beb8c1dc5b4d2bdf34eec2525df84bca2f8b769897183a45c7e61171ecea6e2be80d3becec8355ac3853bd8d077697af6e774133143265bdd538b4fb64786aaaa33e45138fd8697ff1c77b50f63dd8e9476a74c0
+Ctrl.hexxcghash = hexxcghash:367c80484d7e01e0915959e9fcb5124fa674489cf0ec4b0fee6a62dd77f677db901d9fb417cecf2a98f0b24bc24edbb1f34ab19f8d4d2976958f7d99ae2c78b3
+Ctrl.hexsession_id = hexsession_id:0a1bbfb890087ef260a88fafb92f16765444adc4dcb00efd4750d59f1d8f4b6662edd379d812ddc822cea79675731a5e5791f29ebd17f3f83e675e9e9f6af3e3
+Ctrl.type = type:D
+Output = 5361fc87e24ec3031d97f0099766ac9ff7b8f91ea87666de
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100e1436b5ef714092a6a0c8cc1593682a7ca4c05de423fb5f57c1d225943d8e4a5b526288a46a9a0fdb10b59c0beb8c1dc5b4d2bdf34eec2525df84bca2f8b769897183a45c7e61171ecea6e2be80d3becec8355ac3853bd8d077697af6e774133143265bdd538b4fb64786aaaa33e45138fd8697ff1c77b50f63dd8e9476a74c0
+Ctrl.hexxcghash = hexxcghash:367c80484d7e01e0915959e9fcb5124fa674489cf0ec4b0fee6a62dd77f677db901d9fb417cecf2a98f0b24bc24edbb1f34ab19f8d4d2976958f7d99ae2c78b3
+Ctrl.hexsession_id = hexsession_id:0a1bbfb890087ef260a88fafb92f16765444adc4dcb00efd4750d59f1d8f4b6662edd379d812ddc822cea79675731a5e5791f29ebd17f3f83e675e9e9f6af3e3
+Ctrl.type = type:E
+Output = 40a6897606035ebb04907fa15e1545a8973b9b09423f3786be4bcb8db9e4561e0385bcf1e3c0cece5a788e9852ed1da56963f36bad78fede21405ce3ea92a3b8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100e1436b5ef714092a6a0c8cc1593682a7ca4c05de423fb5f57c1d225943d8e4a5b526288a46a9a0fdb10b59c0beb8c1dc5b4d2bdf34eec2525df84bca2f8b769897183a45c7e61171ecea6e2be80d3becec8355ac3853bd8d077697af6e774133143265bdd538b4fb64786aaaa33e45138fd8697ff1c77b50f63dd8e9476a74c0
+Ctrl.hexxcghash = hexxcghash:367c80484d7e01e0915959e9fcb5124fa674489cf0ec4b0fee6a62dd77f677db901d9fb417cecf2a98f0b24bc24edbb1f34ab19f8d4d2976958f7d99ae2c78b3
+Ctrl.hexsession_id = hexsession_id:0a1bbfb890087ef260a88fafb92f16765444adc4dcb00efd4750d59f1d8f4b6662edd379d812ddc822cea79675731a5e5791f29ebd17f3f83e675e9e9f6af3e3
+Ctrl.type = type:F
+Output = 727f9bade9334f97486f479c88614ce96b8cbc803a544fbfaf5fcaf0499a1b8edeb59daa1a824ca9b165879c63d9f0b6464bcd3121fb1ad29b38864fbaac7741
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100f8cf4795508e2aba0d9c007ee0afb38a7d570e26d4ebe97d3b9cb46dfc05b9b18396054fa91f856758b036195a9b360ee48b65dcec1f2fcb901d5faa308125b30b804e53ac15b2f43c2a12fdbc987707af58c36ecdcd89376117f9655e14da7f1808baeaab020a47ac35166a4868dab970ce79de592c69164045fce4eb55872f
+Ctrl.hexxcghash = hexxcghash:40d59c8836500e523e6404ac03d9895b105c7feceaac52dc3c5e4113e256c0057fbc770b805f7a2f18bf0be13357eb99db906efc5fb772f96e5fe76088e2e6f2
+Ctrl.hexsession_id = hexsession_id:a619290ad553a2b0924f3ea6152883685e3f2cf6063487616f083fadae950451df5f6e8a144cd951b2d853c7ec2d1aece9c438a89850788edc6bd5e2a7a98a47
+Ctrl.type = type:A
+Output = 3f077a02dc957eb1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100f8cf4795508e2aba0d9c007ee0afb38a7d570e26d4ebe97d3b9cb46dfc05b9b18396054fa91f856758b036195a9b360ee48b65dcec1f2fcb901d5faa308125b30b804e53ac15b2f43c2a12fdbc987707af58c36ecdcd89376117f9655e14da7f1808baeaab020a47ac35166a4868dab970ce79de592c69164045fce4eb55872f
+Ctrl.hexxcghash = hexxcghash:40d59c8836500e523e6404ac03d9895b105c7feceaac52dc3c5e4113e256c0057fbc770b805f7a2f18bf0be13357eb99db906efc5fb772f96e5fe76088e2e6f2
+Ctrl.hexsession_id = hexsession_id:a619290ad553a2b0924f3ea6152883685e3f2cf6063487616f083fadae950451df5f6e8a144cd951b2d853c7ec2d1aece9c438a89850788edc6bd5e2a7a98a47
+Ctrl.type = type:B
+Output = 3cc158e348e64a0a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100f8cf4795508e2aba0d9c007ee0afb38a7d570e26d4ebe97d3b9cb46dfc05b9b18396054fa91f856758b036195a9b360ee48b65dcec1f2fcb901d5faa308125b30b804e53ac15b2f43c2a12fdbc987707af58c36ecdcd89376117f9655e14da7f1808baeaab020a47ac35166a4868dab970ce79de592c69164045fce4eb55872f
+Ctrl.hexxcghash = hexxcghash:40d59c8836500e523e6404ac03d9895b105c7feceaac52dc3c5e4113e256c0057fbc770b805f7a2f18bf0be13357eb99db906efc5fb772f96e5fe76088e2e6f2
+Ctrl.hexsession_id = hexsession_id:a619290ad553a2b0924f3ea6152883685e3f2cf6063487616f083fadae950451df5f6e8a144cd951b2d853c7ec2d1aece9c438a89850788edc6bd5e2a7a98a47
+Ctrl.type = type:C
+Output = 8770fb6792c2fc16a60c9f45c8d40db684fe52de7c60b482
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100f8cf4795508e2aba0d9c007ee0afb38a7d570e26d4ebe97d3b9cb46dfc05b9b18396054fa91f856758b036195a9b360ee48b65dcec1f2fcb901d5faa308125b30b804e53ac15b2f43c2a12fdbc987707af58c36ecdcd89376117f9655e14da7f1808baeaab020a47ac35166a4868dab970ce79de592c69164045fce4eb55872f
+Ctrl.hexxcghash = hexxcghash:40d59c8836500e523e6404ac03d9895b105c7feceaac52dc3c5e4113e256c0057fbc770b805f7a2f18bf0be13357eb99db906efc5fb772f96e5fe76088e2e6f2
+Ctrl.hexsession_id = hexsession_id:a619290ad553a2b0924f3ea6152883685e3f2cf6063487616f083fadae950451df5f6e8a144cd951b2d853c7ec2d1aece9c438a89850788edc6bd5e2a7a98a47
+Ctrl.type = type:D
+Output = d417a07f1070a2e628424fa990ef436f137725a7cde43f1b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100f8cf4795508e2aba0d9c007ee0afb38a7d570e26d4ebe97d3b9cb46dfc05b9b18396054fa91f856758b036195a9b360ee48b65dcec1f2fcb901d5faa308125b30b804e53ac15b2f43c2a12fdbc987707af58c36ecdcd89376117f9655e14da7f1808baeaab020a47ac35166a4868dab970ce79de592c69164045fce4eb55872f
+Ctrl.hexxcghash = hexxcghash:40d59c8836500e523e6404ac03d9895b105c7feceaac52dc3c5e4113e256c0057fbc770b805f7a2f18bf0be13357eb99db906efc5fb772f96e5fe76088e2e6f2
+Ctrl.hexsession_id = hexsession_id:a619290ad553a2b0924f3ea6152883685e3f2cf6063487616f083fadae950451df5f6e8a144cd951b2d853c7ec2d1aece9c438a89850788edc6bd5e2a7a98a47
+Ctrl.type = type:E
+Output = 20b810e4f6a540724f269194e37969a10e340d45c557eabe72c41f08a9fad85ab44a9c362e7fc5eea9ed5dd9b84cc837d2aaa46ee71b355cb1dfefa8dc544d1e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100f8cf4795508e2aba0d9c007ee0afb38a7d570e26d4ebe97d3b9cb46dfc05b9b18396054fa91f856758b036195a9b360ee48b65dcec1f2fcb901d5faa308125b30b804e53ac15b2f43c2a12fdbc987707af58c36ecdcd89376117f9655e14da7f1808baeaab020a47ac35166a4868dab970ce79de592c69164045fce4eb55872f
+Ctrl.hexxcghash = hexxcghash:40d59c8836500e523e6404ac03d9895b105c7feceaac52dc3c5e4113e256c0057fbc770b805f7a2f18bf0be13357eb99db906efc5fb772f96e5fe76088e2e6f2
+Ctrl.hexsession_id = hexsession_id:a619290ad553a2b0924f3ea6152883685e3f2cf6063487616f083fadae950451df5f6e8a144cd951b2d853c7ec2d1aece9c438a89850788edc6bd5e2a7a98a47
+Ctrl.type = type:F
+Output = acd292ab652b49c7c2a5a35b93c31a71eeef8a629cbc6b1c782994ebc7566f7b0ae536cc0ccfe881bfd8cbfaff391fe23568fa5692198f188deff0c6d0808160
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000803105020875f56db2960579efb7509964f256c2b81009e5be554bcc8ebe84c492f0cd0990e78ef4e8582a45457712be71d6f6c0b33315668984f0a41cf45fb9a459193c710919b752be3b80b2c8c7de3be570f76df6fe1cbb9dc81085fff2ad1bbfb307c6fb21f434cf7c0b96ee9eb6bc0f9677136a6db91f5d953f8b104b3497
+Ctrl.hexxcghash = hexxcghash:5f45d483ef27aeb00ec7baef96f4b4d1b254260bf60671dbd00e35a32fdcb7ae06215d59e742158782e0626bd5e2e8bada1fd7ec5056679f4a1412eaa2ef10e5
+Ctrl.hexsession_id = hexsession_id:8ddcd28d02f2cb50661cf2111953c697c0e578e43a77dfeb593b2bf05189bb429f306bcb0bcb41219d5428c1795c84665bb1f0db33e55f52edbff2b781c7eb79
+Ctrl.type = type:A
+Output = 7cf213cec41701ff
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000803105020875f56db2960579efb7509964f256c2b81009e5be554bcc8ebe84c492f0cd0990e78ef4e8582a45457712be71d6f6c0b33315668984f0a41cf45fb9a459193c710919b752be3b80b2c8c7de3be570f76df6fe1cbb9dc81085fff2ad1bbfb307c6fb21f434cf7c0b96ee9eb6bc0f9677136a6db91f5d953f8b104b3497
+Ctrl.hexxcghash = hexxcghash:5f45d483ef27aeb00ec7baef96f4b4d1b254260bf60671dbd00e35a32fdcb7ae06215d59e742158782e0626bd5e2e8bada1fd7ec5056679f4a1412eaa2ef10e5
+Ctrl.hexsession_id = hexsession_id:8ddcd28d02f2cb50661cf2111953c697c0e578e43a77dfeb593b2bf05189bb429f306bcb0bcb41219d5428c1795c84665bb1f0db33e55f52edbff2b781c7eb79
+Ctrl.type = type:B
+Output = 81a44f6f95fff954
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000803105020875f56db2960579efb7509964f256c2b81009e5be554bcc8ebe84c492f0cd0990e78ef4e8582a45457712be71d6f6c0b33315668984f0a41cf45fb9a459193c710919b752be3b80b2c8c7de3be570f76df6fe1cbb9dc81085fff2ad1bbfb307c6fb21f434cf7c0b96ee9eb6bc0f9677136a6db91f5d953f8b104b3497
+Ctrl.hexxcghash = hexxcghash:5f45d483ef27aeb00ec7baef96f4b4d1b254260bf60671dbd00e35a32fdcb7ae06215d59e742158782e0626bd5e2e8bada1fd7ec5056679f4a1412eaa2ef10e5
+Ctrl.hexsession_id = hexsession_id:8ddcd28d02f2cb50661cf2111953c697c0e578e43a77dfeb593b2bf05189bb429f306bcb0bcb41219d5428c1795c84665bb1f0db33e55f52edbff2b781c7eb79
+Ctrl.type = type:C
+Output = e1610d85ea2c24b4af18076c2d7dc0c3f3b3bf1c8df232a4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000803105020875f56db2960579efb7509964f256c2b81009e5be554bcc8ebe84c492f0cd0990e78ef4e8582a45457712be71d6f6c0b33315668984f0a41cf45fb9a459193c710919b752be3b80b2c8c7de3be570f76df6fe1cbb9dc81085fff2ad1bbfb307c6fb21f434cf7c0b96ee9eb6bc0f9677136a6db91f5d953f8b104b3497
+Ctrl.hexxcghash = hexxcghash:5f45d483ef27aeb00ec7baef96f4b4d1b254260bf60671dbd00e35a32fdcb7ae06215d59e742158782e0626bd5e2e8bada1fd7ec5056679f4a1412eaa2ef10e5
+Ctrl.hexsession_id = hexsession_id:8ddcd28d02f2cb50661cf2111953c697c0e578e43a77dfeb593b2bf05189bb429f306bcb0bcb41219d5428c1795c84665bb1f0db33e55f52edbff2b781c7eb79
+Ctrl.type = type:D
+Output = db146cbf4923693449b857fa927d112f3c8bd1bac73f618a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000803105020875f56db2960579efb7509964f256c2b81009e5be554bcc8ebe84c492f0cd0990e78ef4e8582a45457712be71d6f6c0b33315668984f0a41cf45fb9a459193c710919b752be3b80b2c8c7de3be570f76df6fe1cbb9dc81085fff2ad1bbfb307c6fb21f434cf7c0b96ee9eb6bc0f9677136a6db91f5d953f8b104b3497
+Ctrl.hexxcghash = hexxcghash:5f45d483ef27aeb00ec7baef96f4b4d1b254260bf60671dbd00e35a32fdcb7ae06215d59e742158782e0626bd5e2e8bada1fd7ec5056679f4a1412eaa2ef10e5
+Ctrl.hexsession_id = hexsession_id:8ddcd28d02f2cb50661cf2111953c697c0e578e43a77dfeb593b2bf05189bb429f306bcb0bcb41219d5428c1795c84665bb1f0db33e55f52edbff2b781c7eb79
+Ctrl.type = type:E
+Output = fac257f4544a0aa77659642c33a421cf27b2216a57399ff8ff48baab37519ce9c27f93bf447a02b3c10d9f9c6201745ed6ae28a13ff85e949e0e8048bf31e0c8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000803105020875f56db2960579efb7509964f256c2b81009e5be554bcc8ebe84c492f0cd0990e78ef4e8582a45457712be71d6f6c0b33315668984f0a41cf45fb9a459193c710919b752be3b80b2c8c7de3be570f76df6fe1cbb9dc81085fff2ad1bbfb307c6fb21f434cf7c0b96ee9eb6bc0f9677136a6db91f5d953f8b104b3497
+Ctrl.hexxcghash = hexxcghash:5f45d483ef27aeb00ec7baef96f4b4d1b254260bf60671dbd00e35a32fdcb7ae06215d59e742158782e0626bd5e2e8bada1fd7ec5056679f4a1412eaa2ef10e5
+Ctrl.hexsession_id = hexsession_id:8ddcd28d02f2cb50661cf2111953c697c0e578e43a77dfeb593b2bf05189bb429f306bcb0bcb41219d5428c1795c84665bb1f0db33e55f52edbff2b781c7eb79
+Ctrl.type = type:F
+Output = 8532a1014a5a2feba5730823b0fb1781a7782a73f95a97697aedf60997e6cdf5107387be820b74c0e43e8caf42e83bbc703c6cd9d37b0e720aeacc115ce4633e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008045cafef6acb29ea351ad025a32cb0fb88fe52f138ac3cd7718140c883cffbc10778c2e6c573bdbfaf32eceaa2fc1e106170dadcdf1cb0e1653f2361c76f5153262295b16371daf9ae2015dfb407f4920240eb10293c48971d2086723507d2eb7e1481f2b737df223628ee602a49bb7f1ac52068f5c1a24b445786e35042fc6c0
+Ctrl.hexxcghash = hexxcghash:b1ce6e766a7340f40cec52585087c60e456cc390d0ee294bbc460d50b93c2170344cca3dd2e3067ebefe3efbd002ec4ed7f0fc1a8771eaffbc1fd4d5800aec21
+Ctrl.hexsession_id = hexsession_id:85ae5c53a8286dfddf295dd0b31237bc8c54e9858647e222db29a4f60ffb74a175e5de22c132a1a06826c6e0122e63aa657fc670ca44943159560ce1c48b6906
+Ctrl.type = type:A
+Output = c5dffc4eb99a1c36
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008045cafef6acb29ea351ad025a32cb0fb88fe52f138ac3cd7718140c883cffbc10778c2e6c573bdbfaf32eceaa2fc1e106170dadcdf1cb0e1653f2361c76f5153262295b16371daf9ae2015dfb407f4920240eb10293c48971d2086723507d2eb7e1481f2b737df223628ee602a49bb7f1ac52068f5c1a24b445786e35042fc6c0
+Ctrl.hexxcghash = hexxcghash:b1ce6e766a7340f40cec52585087c60e456cc390d0ee294bbc460d50b93c2170344cca3dd2e3067ebefe3efbd002ec4ed7f0fc1a8771eaffbc1fd4d5800aec21
+Ctrl.hexsession_id = hexsession_id:85ae5c53a8286dfddf295dd0b31237bc8c54e9858647e222db29a4f60ffb74a175e5de22c132a1a06826c6e0122e63aa657fc670ca44943159560ce1c48b6906
+Ctrl.type = type:B
+Output = 13cb7467ddf8ea7d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008045cafef6acb29ea351ad025a32cb0fb88fe52f138ac3cd7718140c883cffbc10778c2e6c573bdbfaf32eceaa2fc1e106170dadcdf1cb0e1653f2361c76f5153262295b16371daf9ae2015dfb407f4920240eb10293c48971d2086723507d2eb7e1481f2b737df223628ee602a49bb7f1ac52068f5c1a24b445786e35042fc6c0
+Ctrl.hexxcghash = hexxcghash:b1ce6e766a7340f40cec52585087c60e456cc390d0ee294bbc460d50b93c2170344cca3dd2e3067ebefe3efbd002ec4ed7f0fc1a8771eaffbc1fd4d5800aec21
+Ctrl.hexsession_id = hexsession_id:85ae5c53a8286dfddf295dd0b31237bc8c54e9858647e222db29a4f60ffb74a175e5de22c132a1a06826c6e0122e63aa657fc670ca44943159560ce1c48b6906
+Ctrl.type = type:C
+Output = 4d77a9a1a36500d9ea0389e3813a201fb9b30751d1fcf0b3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008045cafef6acb29ea351ad025a32cb0fb88fe52f138ac3cd7718140c883cffbc10778c2e6c573bdbfaf32eceaa2fc1e106170dadcdf1cb0e1653f2361c76f5153262295b16371daf9ae2015dfb407f4920240eb10293c48971d2086723507d2eb7e1481f2b737df223628ee602a49bb7f1ac52068f5c1a24b445786e35042fc6c0
+Ctrl.hexxcghash = hexxcghash:b1ce6e766a7340f40cec52585087c60e456cc390d0ee294bbc460d50b93c2170344cca3dd2e3067ebefe3efbd002ec4ed7f0fc1a8771eaffbc1fd4d5800aec21
+Ctrl.hexsession_id = hexsession_id:85ae5c53a8286dfddf295dd0b31237bc8c54e9858647e222db29a4f60ffb74a175e5de22c132a1a06826c6e0122e63aa657fc670ca44943159560ce1c48b6906
+Ctrl.type = type:D
+Output = a0e4ec099492c752b98013d2176af6e601eeef3cdc2029a9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008045cafef6acb29ea351ad025a32cb0fb88fe52f138ac3cd7718140c883cffbc10778c2e6c573bdbfaf32eceaa2fc1e106170dadcdf1cb0e1653f2361c76f5153262295b16371daf9ae2015dfb407f4920240eb10293c48971d2086723507d2eb7e1481f2b737df223628ee602a49bb7f1ac52068f5c1a24b445786e35042fc6c0
+Ctrl.hexxcghash = hexxcghash:b1ce6e766a7340f40cec52585087c60e456cc390d0ee294bbc460d50b93c2170344cca3dd2e3067ebefe3efbd002ec4ed7f0fc1a8771eaffbc1fd4d5800aec21
+Ctrl.hexsession_id = hexsession_id:85ae5c53a8286dfddf295dd0b31237bc8c54e9858647e222db29a4f60ffb74a175e5de22c132a1a06826c6e0122e63aa657fc670ca44943159560ce1c48b6906
+Ctrl.type = type:E
+Output = b4035effa78e6da307f4c096226150e5cab92794192bba492ff8576da3fdbbfdc87fbf79721de0e8f38647261dcad096fd536c4f724f09782a4b684902a4b979
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008045cafef6acb29ea351ad025a32cb0fb88fe52f138ac3cd7718140c883cffbc10778c2e6c573bdbfaf32eceaa2fc1e106170dadcdf1cb0e1653f2361c76f5153262295b16371daf9ae2015dfb407f4920240eb10293c48971d2086723507d2eb7e1481f2b737df223628ee602a49bb7f1ac52068f5c1a24b445786e35042fc6c0
+Ctrl.hexxcghash = hexxcghash:b1ce6e766a7340f40cec52585087c60e456cc390d0ee294bbc460d50b93c2170344cca3dd2e3067ebefe3efbd002ec4ed7f0fc1a8771eaffbc1fd4d5800aec21
+Ctrl.hexsession_id = hexsession_id:85ae5c53a8286dfddf295dd0b31237bc8c54e9858647e222db29a4f60ffb74a175e5de22c132a1a06826c6e0122e63aa657fc670ca44943159560ce1c48b6906
+Ctrl.type = type:F
+Output = eae8776eddb75cd4d14d2db129172bab92f0c8d2c8a439d4b63824c23e7481af502a45d2ebee77f3a801d658b59f6cbbdb797f479787ae4d5839b7ddf49ff908
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000081008b735b1cc9a88529c0d0faea307f79142abc920248b3495e56b7987605b5a7a93354c638752ae7ce47b2869600dc2ab8f240c0ce4e35147e00f8e69fbe940d6236daf01b38f3e74d7bff07d01111569e213cd8475e77de026c81dac6e40242cfc2df5af9d37e520c2d7aee165de9cc314750e856d7514b0b80c568e2292c733f
+Ctrl.hexxcghash = hexxcghash:c226bd264f49cba006b4806afa4edaf42c2c48992ec66c78ce3a982cb5b1d923344107eb77884b0d996af71997611fdffba499da38d5206db0d0a17c438d4d8a
+Ctrl.hexsession_id = hexsession_id:ae0f9a407aae7a964a900b1f5b7060a2e7d4c9de4e422fec063829a9ea1fcb74a6ae83b9eb08f8663e171bdf036bf0c263b23f8eff3053d617484cc3efd99990
+Ctrl.type = type:A
+Output = 31ef8e737ec154c0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000081008b735b1cc9a88529c0d0faea307f79142abc920248b3495e56b7987605b5a7a93354c638752ae7ce47b2869600dc2ab8f240c0ce4e35147e00f8e69fbe940d6236daf01b38f3e74d7bff07d01111569e213cd8475e77de026c81dac6e40242cfc2df5af9d37e520c2d7aee165de9cc314750e856d7514b0b80c568e2292c733f
+Ctrl.hexxcghash = hexxcghash:c226bd264f49cba006b4806afa4edaf42c2c48992ec66c78ce3a982cb5b1d923344107eb77884b0d996af71997611fdffba499da38d5206db0d0a17c438d4d8a
+Ctrl.hexsession_id = hexsession_id:ae0f9a407aae7a964a900b1f5b7060a2e7d4c9de4e422fec063829a9ea1fcb74a6ae83b9eb08f8663e171bdf036bf0c263b23f8eff3053d617484cc3efd99990
+Ctrl.type = type:B
+Output = c0bb41f2c51a0503
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000081008b735b1cc9a88529c0d0faea307f79142abc920248b3495e56b7987605b5a7a93354c638752ae7ce47b2869600dc2ab8f240c0ce4e35147e00f8e69fbe940d6236daf01b38f3e74d7bff07d01111569e213cd8475e77de026c81dac6e40242cfc2df5af9d37e520c2d7aee165de9cc314750e856d7514b0b80c568e2292c733f
+Ctrl.hexxcghash = hexxcghash:c226bd264f49cba006b4806afa4edaf42c2c48992ec66c78ce3a982cb5b1d923344107eb77884b0d996af71997611fdffba499da38d5206db0d0a17c438d4d8a
+Ctrl.hexsession_id = hexsession_id:ae0f9a407aae7a964a900b1f5b7060a2e7d4c9de4e422fec063829a9ea1fcb74a6ae83b9eb08f8663e171bdf036bf0c263b23f8eff3053d617484cc3efd99990
+Ctrl.type = type:C
+Output = 3f9058812f36f302dc5ada7de8f4271c435dfe4589f22a00
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000081008b735b1cc9a88529c0d0faea307f79142abc920248b3495e56b7987605b5a7a93354c638752ae7ce47b2869600dc2ab8f240c0ce4e35147e00f8e69fbe940d6236daf01b38f3e74d7bff07d01111569e213cd8475e77de026c81dac6e40242cfc2df5af9d37e520c2d7aee165de9cc314750e856d7514b0b80c568e2292c733f
+Ctrl.hexxcghash = hexxcghash:c226bd264f49cba006b4806afa4edaf42c2c48992ec66c78ce3a982cb5b1d923344107eb77884b0d996af71997611fdffba499da38d5206db0d0a17c438d4d8a
+Ctrl.hexsession_id = hexsession_id:ae0f9a407aae7a964a900b1f5b7060a2e7d4c9de4e422fec063829a9ea1fcb74a6ae83b9eb08f8663e171bdf036bf0c263b23f8eff3053d617484cc3efd99990
+Ctrl.type = type:D
+Output = b342a447abcb67f6819a19b8b300946c89739fabd049a6e0
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000081008b735b1cc9a88529c0d0faea307f79142abc920248b3495e56b7987605b5a7a93354c638752ae7ce47b2869600dc2ab8f240c0ce4e35147e00f8e69fbe940d6236daf01b38f3e74d7bff07d01111569e213cd8475e77de026c81dac6e40242cfc2df5af9d37e520c2d7aee165de9cc314750e856d7514b0b80c568e2292c733f
+Ctrl.hexxcghash = hexxcghash:c226bd264f49cba006b4806afa4edaf42c2c48992ec66c78ce3a982cb5b1d923344107eb77884b0d996af71997611fdffba499da38d5206db0d0a17c438d4d8a
+Ctrl.hexsession_id = hexsession_id:ae0f9a407aae7a964a900b1f5b7060a2e7d4c9de4e422fec063829a9ea1fcb74a6ae83b9eb08f8663e171bdf036bf0c263b23f8eff3053d617484cc3efd99990
+Ctrl.type = type:E
+Output = a5d70cb0a3e351be09b9600c9b97f2781236bf549209a1fbf3304af145af0941c6cd9923f1f30cec946e8dea96332d284e01a4d8bcc90721fe2e515504073cb8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000081008b735b1cc9a88529c0d0faea307f79142abc920248b3495e56b7987605b5a7a93354c638752ae7ce47b2869600dc2ab8f240c0ce4e35147e00f8e69fbe940d6236daf01b38f3e74d7bff07d01111569e213cd8475e77de026c81dac6e40242cfc2df5af9d37e520c2d7aee165de9cc314750e856d7514b0b80c568e2292c733f
+Ctrl.hexxcghash = hexxcghash:c226bd264f49cba006b4806afa4edaf42c2c48992ec66c78ce3a982cb5b1d923344107eb77884b0d996af71997611fdffba499da38d5206db0d0a17c438d4d8a
+Ctrl.hexsession_id = hexsession_id:ae0f9a407aae7a964a900b1f5b7060a2e7d4c9de4e422fec063829a9ea1fcb74a6ae83b9eb08f8663e171bdf036bf0c263b23f8eff3053d617484cc3efd99990
+Ctrl.type = type:F
+Output = dbc3ea086a49e220306cbe57b942d9409cbd205dec20c7b79fd6998906d173bcb2bc2eb5b7eea4c1d84f3926836bd15e0565a17af735596050d6161d9682f2e7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100c41430e9dfce9301082a4d034e0e1ffe73133e4c97afbd325d6bbe1f3a4f5a9103f57a05f66b1ac63a5f1724b3315daf7171f334e77eff356366daf4e23e55751422734d4d22e6dcac783bba0edc1be8fcc4c7c0d5a69d047291e33167057c774e46362dfb6f8432b427cf21c01304b23e2b49b664fd50dc463c17efffa146a0
+Ctrl.hexxcghash = hexxcghash:04aeff766f08c065092fdd7be43531f83d73682601069477ee10407821a0f0e8bf614e775dfab6f889a8d5120c2e39d96e38de4cda6f673fb7cb343de1e17b9c
+Ctrl.hexsession_id = hexsession_id:15f5653a107aee694bd1680d423c8da2dab8c1ec8e23c5208100ce3d8d4821b52bbb1d14791476253db4b07ebb715ae095b8b49e1545be3c92a3adcf39970be5
+Ctrl.type = type:A
+Output = 19d6bc79713a4622
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100c41430e9dfce9301082a4d034e0e1ffe73133e4c97afbd325d6bbe1f3a4f5a9103f57a05f66b1ac63a5f1724b3315daf7171f334e77eff356366daf4e23e55751422734d4d22e6dcac783bba0edc1be8fcc4c7c0d5a69d047291e33167057c774e46362dfb6f8432b427cf21c01304b23e2b49b664fd50dc463c17efffa146a0
+Ctrl.hexxcghash = hexxcghash:04aeff766f08c065092fdd7be43531f83d73682601069477ee10407821a0f0e8bf614e775dfab6f889a8d5120c2e39d96e38de4cda6f673fb7cb343de1e17b9c
+Ctrl.hexsession_id = hexsession_id:15f5653a107aee694bd1680d423c8da2dab8c1ec8e23c5208100ce3d8d4821b52bbb1d14791476253db4b07ebb715ae095b8b49e1545be3c92a3adcf39970be5
+Ctrl.type = type:B
+Output = 7de9caf89d325dcd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100c41430e9dfce9301082a4d034e0e1ffe73133e4c97afbd325d6bbe1f3a4f5a9103f57a05f66b1ac63a5f1724b3315daf7171f334e77eff356366daf4e23e55751422734d4d22e6dcac783bba0edc1be8fcc4c7c0d5a69d047291e33167057c774e46362dfb6f8432b427cf21c01304b23e2b49b664fd50dc463c17efffa146a0
+Ctrl.hexxcghash = hexxcghash:04aeff766f08c065092fdd7be43531f83d73682601069477ee10407821a0f0e8bf614e775dfab6f889a8d5120c2e39d96e38de4cda6f673fb7cb343de1e17b9c
+Ctrl.hexsession_id = hexsession_id:15f5653a107aee694bd1680d423c8da2dab8c1ec8e23c5208100ce3d8d4821b52bbb1d14791476253db4b07ebb715ae095b8b49e1545be3c92a3adcf39970be5
+Ctrl.type = type:C
+Output = 1d5391d658abb9ec1b8df32cbf1db9a302a1301984ab06d4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100c41430e9dfce9301082a4d034e0e1ffe73133e4c97afbd325d6bbe1f3a4f5a9103f57a05f66b1ac63a5f1724b3315daf7171f334e77eff356366daf4e23e55751422734d4d22e6dcac783bba0edc1be8fcc4c7c0d5a69d047291e33167057c774e46362dfb6f8432b427cf21c01304b23e2b49b664fd50dc463c17efffa146a0
+Ctrl.hexxcghash = hexxcghash:04aeff766f08c065092fdd7be43531f83d73682601069477ee10407821a0f0e8bf614e775dfab6f889a8d5120c2e39d96e38de4cda6f673fb7cb343de1e17b9c
+Ctrl.hexsession_id = hexsession_id:15f5653a107aee694bd1680d423c8da2dab8c1ec8e23c5208100ce3d8d4821b52bbb1d14791476253db4b07ebb715ae095b8b49e1545be3c92a3adcf39970be5
+Ctrl.type = type:D
+Output = 5d37dab50814543d8d8674f4f491d73d21973f20844c96a7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100c41430e9dfce9301082a4d034e0e1ffe73133e4c97afbd325d6bbe1f3a4f5a9103f57a05f66b1ac63a5f1724b3315daf7171f334e77eff356366daf4e23e55751422734d4d22e6dcac783bba0edc1be8fcc4c7c0d5a69d047291e33167057c774e46362dfb6f8432b427cf21c01304b23e2b49b664fd50dc463c17efffa146a0
+Ctrl.hexxcghash = hexxcghash:04aeff766f08c065092fdd7be43531f83d73682601069477ee10407821a0f0e8bf614e775dfab6f889a8d5120c2e39d96e38de4cda6f673fb7cb343de1e17b9c
+Ctrl.hexsession_id = hexsession_id:15f5653a107aee694bd1680d423c8da2dab8c1ec8e23c5208100ce3d8d4821b52bbb1d14791476253db4b07ebb715ae095b8b49e1545be3c92a3adcf39970be5
+Ctrl.type = type:E
+Output = 3e882ae390a64c34f509bc9845df581987ae2524b2ff92d9243580168f32fa68750f3f732c8c5544c98fc585582fe743efbf55dd6c487fb5f9ffac1a156fa31c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000008100c41430e9dfce9301082a4d034e0e1ffe73133e4c97afbd325d6bbe1f3a4f5a9103f57a05f66b1ac63a5f1724b3315daf7171f334e77eff356366daf4e23e55751422734d4d22e6dcac783bba0edc1be8fcc4c7c0d5a69d047291e33167057c774e46362dfb6f8432b427cf21c01304b23e2b49b664fd50dc463c17efffa146a0
+Ctrl.hexxcghash = hexxcghash:04aeff766f08c065092fdd7be43531f83d73682601069477ee10407821a0f0e8bf614e775dfab6f889a8d5120c2e39d96e38de4cda6f673fb7cb343de1e17b9c
+Ctrl.hexsession_id = hexsession_id:15f5653a107aee694bd1680d423c8da2dab8c1ec8e23c5208100ce3d8d4821b52bbb1d14791476253db4b07ebb715ae095b8b49e1545be3c92a3adcf39970be5
+Ctrl.type = type:F
+Output = ce4bcf9cabe7ee7c0e216e64e5427ebd38cb41ba9e9a6d9ae441ca47d9278347a59afdf758ae7f7fd667ed3830bf9a33d7badfd40e2112580af514da9464a6d1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810088181aaaa6b17924ced0033b1e4a3d007a464d4d53871f4da4689d477437b42f873d4b7d5f5c52909b6cca8be7a01d1a7a806f745500bb00b4fd6e6f8d0e1c9ad08d934c7d680a57ac5a4ed77f73182065f9295d745e1d50b8da0626f3e9ccb6651aad3b0c5c2cecd90c521318778f570333c011f02d5e2a406eb8b3d6036537
+Ctrl.hexxcghash = hexxcghash:3c4ecb173c39cedecbcd19ba0fc38454176b81b6451911b4422907b1b670dcedaabebaaa261fbac23b3b5738264c5eee3dccfd9e050a1cef17ac997527dd7095
+Ctrl.hexsession_id = hexsession_id:3b05253d9e5ab2f7f4ba2998bea5ed7d05afdf02b7499ac2dd554833b886b73d92e929316a366147e9af50201dbb4e54c123418d1a623bc2dc52766211dbe614
+Ctrl.type = type:A
+Output = 93fbb01815b63533
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810088181aaaa6b17924ced0033b1e4a3d007a464d4d53871f4da4689d477437b42f873d4b7d5f5c52909b6cca8be7a01d1a7a806f745500bb00b4fd6e6f8d0e1c9ad08d934c7d680a57ac5a4ed77f73182065f9295d745e1d50b8da0626f3e9ccb6651aad3b0c5c2cecd90c521318778f570333c011f02d5e2a406eb8b3d6036537
+Ctrl.hexxcghash = hexxcghash:3c4ecb173c39cedecbcd19ba0fc38454176b81b6451911b4422907b1b670dcedaabebaaa261fbac23b3b5738264c5eee3dccfd9e050a1cef17ac997527dd7095
+Ctrl.hexsession_id = hexsession_id:3b05253d9e5ab2f7f4ba2998bea5ed7d05afdf02b7499ac2dd554833b886b73d92e929316a366147e9af50201dbb4e54c123418d1a623bc2dc52766211dbe614
+Ctrl.type = type:B
+Output = aea76dfe77a87471
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810088181aaaa6b17924ced0033b1e4a3d007a464d4d53871f4da4689d477437b42f873d4b7d5f5c52909b6cca8be7a01d1a7a806f745500bb00b4fd6e6f8d0e1c9ad08d934c7d680a57ac5a4ed77f73182065f9295d745e1d50b8da0626f3e9ccb6651aad3b0c5c2cecd90c521318778f570333c011f02d5e2a406eb8b3d6036537
+Ctrl.hexxcghash = hexxcghash:3c4ecb173c39cedecbcd19ba0fc38454176b81b6451911b4422907b1b670dcedaabebaaa261fbac23b3b5738264c5eee3dccfd9e050a1cef17ac997527dd7095
+Ctrl.hexsession_id = hexsession_id:3b05253d9e5ab2f7f4ba2998bea5ed7d05afdf02b7499ac2dd554833b886b73d92e929316a366147e9af50201dbb4e54c123418d1a623bc2dc52766211dbe614
+Ctrl.type = type:C
+Output = 73a55e25a0a8ec0899c1074bf0845fefd84e42f741897a3f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810088181aaaa6b17924ced0033b1e4a3d007a464d4d53871f4da4689d477437b42f873d4b7d5f5c52909b6cca8be7a01d1a7a806f745500bb00b4fd6e6f8d0e1c9ad08d934c7d680a57ac5a4ed77f73182065f9295d745e1d50b8da0626f3e9ccb6651aad3b0c5c2cecd90c521318778f570333c011f02d5e2a406eb8b3d6036537
+Ctrl.hexxcghash = hexxcghash:3c4ecb173c39cedecbcd19ba0fc38454176b81b6451911b4422907b1b670dcedaabebaaa261fbac23b3b5738264c5eee3dccfd9e050a1cef17ac997527dd7095
+Ctrl.hexsession_id = hexsession_id:3b05253d9e5ab2f7f4ba2998bea5ed7d05afdf02b7499ac2dd554833b886b73d92e929316a366147e9af50201dbb4e54c123418d1a623bc2dc52766211dbe614
+Ctrl.type = type:D
+Output = fead3a851502aa3c58734065eeaf3e63ed4c59c8f450bb1a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810088181aaaa6b17924ced0033b1e4a3d007a464d4d53871f4da4689d477437b42f873d4b7d5f5c52909b6cca8be7a01d1a7a806f745500bb00b4fd6e6f8d0e1c9ad08d934c7d680a57ac5a4ed77f73182065f9295d745e1d50b8da0626f3e9ccb6651aad3b0c5c2cecd90c521318778f570333c011f02d5e2a406eb8b3d6036537
+Ctrl.hexxcghash = hexxcghash:3c4ecb173c39cedecbcd19ba0fc38454176b81b6451911b4422907b1b670dcedaabebaaa261fbac23b3b5738264c5eee3dccfd9e050a1cef17ac997527dd7095
+Ctrl.hexsession_id = hexsession_id:3b05253d9e5ab2f7f4ba2998bea5ed7d05afdf02b7499ac2dd554833b886b73d92e929316a366147e9af50201dbb4e54c123418d1a623bc2dc52766211dbe614
+Ctrl.type = type:E
+Output = 55bde99a692820ad809eb0a62311f8f3e9469ba2ee4d782d5432628ca52d829b9c5bffc41b58232363f97c5dab603268b1997fbe9b9b34ab2aca3da27467b0c8
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000000810088181aaaa6b17924ced0033b1e4a3d007a464d4d53871f4da4689d477437b42f873d4b7d5f5c52909b6cca8be7a01d1a7a806f745500bb00b4fd6e6f8d0e1c9ad08d934c7d680a57ac5a4ed77f73182065f9295d745e1d50b8da0626f3e9ccb6651aad3b0c5c2cecd90c521318778f570333c011f02d5e2a406eb8b3d6036537
+Ctrl.hexxcghash = hexxcghash:3c4ecb173c39cedecbcd19ba0fc38454176b81b6451911b4422907b1b670dcedaabebaaa261fbac23b3b5738264c5eee3dccfd9e050a1cef17ac997527dd7095
+Ctrl.hexsession_id = hexsession_id:3b05253d9e5ab2f7f4ba2998bea5ed7d05afdf02b7499ac2dd554833b886b73d92e929316a366147e9af50201dbb4e54c123418d1a623bc2dc52766211dbe614
+Ctrl.type = type:F
+Output = 756f65746c861f0985f3dd7d2f08004897ccb22be2f1d3b4791ca0c51d5ee0da776dd03d7dfb7f4db6c6cd37899871e63d75f7f60dff8348c313e99409ad2db5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100e8d52da494d198252b87189223bffb0bc1b68335ae987df15bf7cf95bd74a951b5eaa87b1739f91efc97f28f5a7f0a206fdbcf33e39003e154b334009563abd62a4169462865ba931ca3f8f4d70611e8bcb46228ee74983d2ec79c690d86329c2daac8dbdafe4573f114313f29c7507bd4aa50d87bb83b1cebb628e37b2501ffc9b1200d8d360e1b46bf6fdecd486fae790352eb79aa3f37e4964963a84dbd80fb3b80491210565d9449599bc9306ee76a932a764070702cd09c87e1f26095b1b78042bcc37d5f097e3f7b2db6cb6f7b3e2a332021f756fe1784edd2a82802c1274b9944dff99fb1c181f41d6d2f4eac5aa33c619c48167dce1eb47ddafbe5eb
+Ctrl.hexxcghash = hexxcghash:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.hexsession_id = hexsession_id:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.type = type:A
+Output = a626c34c0a74b56262110185a34cd810
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100e8d52da494d198252b87189223bffb0bc1b68335ae987df15bf7cf95bd74a951b5eaa87b1739f91efc97f28f5a7f0a206fdbcf33e39003e154b334009563abd62a4169462865ba931ca3f8f4d70611e8bcb46228ee74983d2ec79c690d86329c2daac8dbdafe4573f114313f29c7507bd4aa50d87bb83b1cebb628e37b2501ffc9b1200d8d360e1b46bf6fdecd486fae790352eb79aa3f37e4964963a84dbd80fb3b80491210565d9449599bc9306ee76a932a764070702cd09c87e1f26095b1b78042bcc37d5f097e3f7b2db6cb6f7b3e2a332021f756fe1784edd2a82802c1274b9944dff99fb1c181f41d6d2f4eac5aa33c619c48167dce1eb47ddafbe5eb
+Ctrl.hexxcghash = hexxcghash:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.hexsession_id = hexsession_id:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.type = type:B
+Output = 223d6fc57263da9ad61dad9759454e0f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100e8d52da494d198252b87189223bffb0bc1b68335ae987df15bf7cf95bd74a951b5eaa87b1739f91efc97f28f5a7f0a206fdbcf33e39003e154b334009563abd62a4169462865ba931ca3f8f4d70611e8bcb46228ee74983d2ec79c690d86329c2daac8dbdafe4573f114313f29c7507bd4aa50d87bb83b1cebb628e37b2501ffc9b1200d8d360e1b46bf6fdecd486fae790352eb79aa3f37e4964963a84dbd80fb3b80491210565d9449599bc9306ee76a932a764070702cd09c87e1f26095b1b78042bcc37d5f097e3f7b2db6cb6f7b3e2a332021f756fe1784edd2a82802c1274b9944dff99fb1c181f41d6d2f4eac5aa33c619c48167dce1eb47ddafbe5eb
+Ctrl.hexxcghash = hexxcghash:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.hexsession_id = hexsession_id:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.type = type:C
+Output = 7c803e07506969666f446400b2372eee
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100e8d52da494d198252b87189223bffb0bc1b68335ae987df15bf7cf95bd74a951b5eaa87b1739f91efc97f28f5a7f0a206fdbcf33e39003e154b334009563abd62a4169462865ba931ca3f8f4d70611e8bcb46228ee74983d2ec79c690d86329c2daac8dbdafe4573f114313f29c7507bd4aa50d87bb83b1cebb628e37b2501ffc9b1200d8d360e1b46bf6fdecd486fae790352eb79aa3f37e4964963a84dbd80fb3b80491210565d9449599bc9306ee76a932a764070702cd09c87e1f26095b1b78042bcc37d5f097e3f7b2db6cb6f7b3e2a332021f756fe1784edd2a82802c1274b9944dff99fb1c181f41d6d2f4eac5aa33c619c48167dce1eb47ddafbe5eb
+Ctrl.hexxcghash = hexxcghash:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.hexsession_id = hexsession_id:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.type = type:D
+Output = 4ad705fbc9e89c03c15f9dbbf34981df
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100e8d52da494d198252b87189223bffb0bc1b68335ae987df15bf7cf95bd74a951b5eaa87b1739f91efc97f28f5a7f0a206fdbcf33e39003e154b334009563abd62a4169462865ba931ca3f8f4d70611e8bcb46228ee74983d2ec79c690d86329c2daac8dbdafe4573f114313f29c7507bd4aa50d87bb83b1cebb628e37b2501ffc9b1200d8d360e1b46bf6fdecd486fae790352eb79aa3f37e4964963a84dbd80fb3b80491210565d9449599bc9306ee76a932a764070702cd09c87e1f26095b1b78042bcc37d5f097e3f7b2db6cb6f7b3e2a332021f756fe1784edd2a82802c1274b9944dff99fb1c181f41d6d2f4eac5aa33c619c48167dce1eb47ddafbe5eb
+Ctrl.hexxcghash = hexxcghash:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.hexsession_id = hexsession_id:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.type = type:E
+Output = 36cac32cab8b943cd9d2142559c467593bfaf30d0be71560245c8b38a5671901a858ccc637b0ef6966a2bbfb1a7f51f2cf6d52c4165ca000d52bd908405c305f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100e8d52da494d198252b87189223bffb0bc1b68335ae987df15bf7cf95bd74a951b5eaa87b1739f91efc97f28f5a7f0a206fdbcf33e39003e154b334009563abd62a4169462865ba931ca3f8f4d70611e8bcb46228ee74983d2ec79c690d86329c2daac8dbdafe4573f114313f29c7507bd4aa50d87bb83b1cebb628e37b2501ffc9b1200d8d360e1b46bf6fdecd486fae790352eb79aa3f37e4964963a84dbd80fb3b80491210565d9449599bc9306ee76a932a764070702cd09c87e1f26095b1b78042bcc37d5f097e3f7b2db6cb6f7b3e2a332021f756fe1784edd2a82802c1274b9944dff99fb1c181f41d6d2f4eac5aa33c619c48167dce1eb47ddafbe5eb
+Ctrl.hexxcghash = hexxcghash:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.hexsession_id = hexsession_id:3e81bd3b4b609955df0deaab293876592122e2d7fdc719ecd503b572c5e98cfaaac1f7e085d4097c76515f5b70413944a464ce346ada6d85d7c39a8009d4b121
+Ctrl.type = type:F
+Output = 67d42301ce629c0f2a34b9dfb24ec60c138b4edc71f7123bb0db9447b3c915ebd8c54d3b20af04e30b484be3a2d4136f5d5c46f9c56de189b91fec78ecd53e1c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010034a5d2784c99976fb3b615c5b1bfacc9a749330d22bcf5a7c404c10f886e2a3115660a399d7c721d5dd141f458b0d27e0e6709a8290f9ef6f61681a11d876eb7bd52b930f79fb9516f5d2137c5bfa95a893890d26d7712fc9ecc4dc82a5171341b41a9f2c4a8f0c14efe82ef2a4db60a8a0b8e43d3f92992f8dcc2d6bae3759aea86a4f14f809fe648021fc4aa79936bd687450e801916d7d267dfab66bd86f9424b3460fa75b16af37151918cb2f8ba8ac33df5b0ccf7fb21c3ea9fb0ed2917a4eb9d6ed345c42a5a67a66fca7b7e69c1ad5c45c51866692f058ad537c0f59c83a2788ef9b9610cc06aa155aa1115f23fa36d7734152a0da209244c32d37e3a
+Ctrl.hexxcghash = hexxcghash:ab6f9c04514ae3f6591039c9cc6a9919279282d7c95971b4c27957e31cced5ef5b1c59a4418402203ab50a46df7dc03bd67d42a62592708b0581617a42ea6d71
+Ctrl.hexsession_id = hexsession_id:4e226639facaccf9894367cb1008663e989eb31757b912bd1cb3bd51058c7adf56e9a54eef87b63299a5cc092c047991dc9a380e749c7c5657bb99424bcce6d6
+Ctrl.type = type:A
+Output = 8ebbf0e9afd9f108498f1543104ba8e2
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010034a5d2784c99976fb3b615c5b1bfacc9a749330d22bcf5a7c404c10f886e2a3115660a399d7c721d5dd141f458b0d27e0e6709a8290f9ef6f61681a11d876eb7bd52b930f79fb9516f5d2137c5bfa95a893890d26d7712fc9ecc4dc82a5171341b41a9f2c4a8f0c14efe82ef2a4db60a8a0b8e43d3f92992f8dcc2d6bae3759aea86a4f14f809fe648021fc4aa79936bd687450e801916d7d267dfab66bd86f9424b3460fa75b16af37151918cb2f8ba8ac33df5b0ccf7fb21c3ea9fb0ed2917a4eb9d6ed345c42a5a67a66fca7b7e69c1ad5c45c51866692f058ad537c0f59c83a2788ef9b9610cc06aa155aa1115f23fa36d7734152a0da209244c32d37e3a
+Ctrl.hexxcghash = hexxcghash:ab6f9c04514ae3f6591039c9cc6a9919279282d7c95971b4c27957e31cced5ef5b1c59a4418402203ab50a46df7dc03bd67d42a62592708b0581617a42ea6d71
+Ctrl.hexsession_id = hexsession_id:4e226639facaccf9894367cb1008663e989eb31757b912bd1cb3bd51058c7adf56e9a54eef87b63299a5cc092c047991dc9a380e749c7c5657bb99424bcce6d6
+Ctrl.type = type:B
+Output = 38bfe6bed75f77675fa36d76b63816a4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010034a5d2784c99976fb3b615c5b1bfacc9a749330d22bcf5a7c404c10f886e2a3115660a399d7c721d5dd141f458b0d27e0e6709a8290f9ef6f61681a11d876eb7bd52b930f79fb9516f5d2137c5bfa95a893890d26d7712fc9ecc4dc82a5171341b41a9f2c4a8f0c14efe82ef2a4db60a8a0b8e43d3f92992f8dcc2d6bae3759aea86a4f14f809fe648021fc4aa79936bd687450e801916d7d267dfab66bd86f9424b3460fa75b16af37151918cb2f8ba8ac33df5b0ccf7fb21c3ea9fb0ed2917a4eb9d6ed345c42a5a67a66fca7b7e69c1ad5c45c51866692f058ad537c0f59c83a2788ef9b9610cc06aa155aa1115f23fa36d7734152a0da209244c32d37e3a
+Ctrl.hexxcghash = hexxcghash:ab6f9c04514ae3f6591039c9cc6a9919279282d7c95971b4c27957e31cced5ef5b1c59a4418402203ab50a46df7dc03bd67d42a62592708b0581617a42ea6d71
+Ctrl.hexsession_id = hexsession_id:4e226639facaccf9894367cb1008663e989eb31757b912bd1cb3bd51058c7adf56e9a54eef87b63299a5cc092c047991dc9a380e749c7c5657bb99424bcce6d6
+Ctrl.type = type:C
+Output = f759f0ad2d72980f6b12f0fb317222f3
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010034a5d2784c99976fb3b615c5b1bfacc9a749330d22bcf5a7c404c10f886e2a3115660a399d7c721d5dd141f458b0d27e0e6709a8290f9ef6f61681a11d876eb7bd52b930f79fb9516f5d2137c5bfa95a893890d26d7712fc9ecc4dc82a5171341b41a9f2c4a8f0c14efe82ef2a4db60a8a0b8e43d3f92992f8dcc2d6bae3759aea86a4f14f809fe648021fc4aa79936bd687450e801916d7d267dfab66bd86f9424b3460fa75b16af37151918cb2f8ba8ac33df5b0ccf7fb21c3ea9fb0ed2917a4eb9d6ed345c42a5a67a66fca7b7e69c1ad5c45c51866692f058ad537c0f59c83a2788ef9b9610cc06aa155aa1115f23fa36d7734152a0da209244c32d37e3a
+Ctrl.hexxcghash = hexxcghash:ab6f9c04514ae3f6591039c9cc6a9919279282d7c95971b4c27957e31cced5ef5b1c59a4418402203ab50a46df7dc03bd67d42a62592708b0581617a42ea6d71
+Ctrl.hexsession_id = hexsession_id:4e226639facaccf9894367cb1008663e989eb31757b912bd1cb3bd51058c7adf56e9a54eef87b63299a5cc092c047991dc9a380e749c7c5657bb99424bcce6d6
+Ctrl.type = type:D
+Output = 39f294ec25afb520f5d7f1064b7078c9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010034a5d2784c99976fb3b615c5b1bfacc9a749330d22bcf5a7c404c10f886e2a3115660a399d7c721d5dd141f458b0d27e0e6709a8290f9ef6f61681a11d876eb7bd52b930f79fb9516f5d2137c5bfa95a893890d26d7712fc9ecc4dc82a5171341b41a9f2c4a8f0c14efe82ef2a4db60a8a0b8e43d3f92992f8dcc2d6bae3759aea86a4f14f809fe648021fc4aa79936bd687450e801916d7d267dfab66bd86f9424b3460fa75b16af37151918cb2f8ba8ac33df5b0ccf7fb21c3ea9fb0ed2917a4eb9d6ed345c42a5a67a66fca7b7e69c1ad5c45c51866692f058ad537c0f59c83a2788ef9b9610cc06aa155aa1115f23fa36d7734152a0da209244c32d37e3a
+Ctrl.hexxcghash = hexxcghash:ab6f9c04514ae3f6591039c9cc6a9919279282d7c95971b4c27957e31cced5ef5b1c59a4418402203ab50a46df7dc03bd67d42a62592708b0581617a42ea6d71
+Ctrl.hexsession_id = hexsession_id:4e226639facaccf9894367cb1008663e989eb31757b912bd1cb3bd51058c7adf56e9a54eef87b63299a5cc092c047991dc9a380e749c7c5657bb99424bcce6d6
+Ctrl.type = type:E
+Output = ff2ad139997ff26e7f4393e49d57d5fc973ddb6225d8f4b5fe990e46b9943772f0d33aa98d01089ff0aeb5740bd388ada35dc44240180c99e522c817dedfc2cd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010034a5d2784c99976fb3b615c5b1bfacc9a749330d22bcf5a7c404c10f886e2a3115660a399d7c721d5dd141f458b0d27e0e6709a8290f9ef6f61681a11d876eb7bd52b930f79fb9516f5d2137c5bfa95a893890d26d7712fc9ecc4dc82a5171341b41a9f2c4a8f0c14efe82ef2a4db60a8a0b8e43d3f92992f8dcc2d6bae3759aea86a4f14f809fe648021fc4aa79936bd687450e801916d7d267dfab66bd86f9424b3460fa75b16af37151918cb2f8ba8ac33df5b0ccf7fb21c3ea9fb0ed2917a4eb9d6ed345c42a5a67a66fca7b7e69c1ad5c45c51866692f058ad537c0f59c83a2788ef9b9610cc06aa155aa1115f23fa36d7734152a0da209244c32d37e3a
+Ctrl.hexxcghash = hexxcghash:ab6f9c04514ae3f6591039c9cc6a9919279282d7c95971b4c27957e31cced5ef5b1c59a4418402203ab50a46df7dc03bd67d42a62592708b0581617a42ea6d71
+Ctrl.hexsession_id = hexsession_id:4e226639facaccf9894367cb1008663e989eb31757b912bd1cb3bd51058c7adf56e9a54eef87b63299a5cc092c047991dc9a380e749c7c5657bb99424bcce6d6
+Ctrl.type = type:F
+Output = a670c9583c71f403207a192700d5e4fd7a007b60a4617b7f93708399a0cb771af08b9e5f4237e6975f055d6f0a4d91523fa0805013df6ae4a19f077646f1cd4b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000100192471d29d9fbc8b61570e4efa053a5f17b2efc0aa5415b3309f7dc3971c64d9f1093f6114941d4912f7bfb771db41d1f166d4bdaec8dde214aeb058e2227277393e3c0b12adc1b6a445870bc26e753e05e27b90b97d781e3e8493eb5e717c243213de4dcdd5a11d467b8d26759118692b10357c28b0efb0228cbe257b9ee0cb77bb7bc8b072edf418768c977e485635b4ab61078587128e9a8b3c6deca2a4e64cf9fd6eca880aebd1043deaf94447ea50b0c11b574259cdcafd208d9657c7177cf394de26dd8364b615786198c38e63c568e22b5263be41d6dd8843ad5254f61cf01b7162948652568c2b42833a95619fa5072adb0bfbf38e3eace7e1596066
+Ctrl.hexxcghash = hexxcghash:a0a53cb8bcc48ffe44fd9e50e0f7532d3e326f93d7ecb10135d4385dab550cd7be03a7374dfc2a92794be13e40c794811a9916c3d1c4e7ea31ed5269537c1c22
+Ctrl.hexsession_id = hexsession_id:9bcf3f3397ff464126cb2a99c04908721871354b842ffd3d873d49407db0382f98cc54d66665d950ec8277c374f19e9f0dd2e727f8759017c49b5b80baa87c63
+Ctrl.type = type:A
+Output = f68353f802d39a43c728641e44087cc5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000100192471d29d9fbc8b61570e4efa053a5f17b2efc0aa5415b3309f7dc3971c64d9f1093f6114941d4912f7bfb771db41d1f166d4bdaec8dde214aeb058e2227277393e3c0b12adc1b6a445870bc26e753e05e27b90b97d781e3e8493eb5e717c243213de4dcdd5a11d467b8d26759118692b10357c28b0efb0228cbe257b9ee0cb77bb7bc8b072edf418768c977e485635b4ab61078587128e9a8b3c6deca2a4e64cf9fd6eca880aebd1043deaf94447ea50b0c11b574259cdcafd208d9657c7177cf394de26dd8364b615786198c38e63c568e22b5263be41d6dd8843ad5254f61cf01b7162948652568c2b42833a95619fa5072adb0bfbf38e3eace7e1596066
+Ctrl.hexxcghash = hexxcghash:a0a53cb8bcc48ffe44fd9e50e0f7532d3e326f93d7ecb10135d4385dab550cd7be03a7374dfc2a92794be13e40c794811a9916c3d1c4e7ea31ed5269537c1c22
+Ctrl.hexsession_id = hexsession_id:9bcf3f3397ff464126cb2a99c04908721871354b842ffd3d873d49407db0382f98cc54d66665d950ec8277c374f19e9f0dd2e727f8759017c49b5b80baa87c63
+Ctrl.type = type:B
+Output = 23c2377f826f77519871941b62cb9fdd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000100192471d29d9fbc8b61570e4efa053a5f17b2efc0aa5415b3309f7dc3971c64d9f1093f6114941d4912f7bfb771db41d1f166d4bdaec8dde214aeb058e2227277393e3c0b12adc1b6a445870bc26e753e05e27b90b97d781e3e8493eb5e717c243213de4dcdd5a11d467b8d26759118692b10357c28b0efb0228cbe257b9ee0cb77bb7bc8b072edf418768c977e485635b4ab61078587128e9a8b3c6deca2a4e64cf9fd6eca880aebd1043deaf94447ea50b0c11b574259cdcafd208d9657c7177cf394de26dd8364b615786198c38e63c568e22b5263be41d6dd8843ad5254f61cf01b7162948652568c2b42833a95619fa5072adb0bfbf38e3eace7e1596066
+Ctrl.hexxcghash = hexxcghash:a0a53cb8bcc48ffe44fd9e50e0f7532d3e326f93d7ecb10135d4385dab550cd7be03a7374dfc2a92794be13e40c794811a9916c3d1c4e7ea31ed5269537c1c22
+Ctrl.hexsession_id = hexsession_id:9bcf3f3397ff464126cb2a99c04908721871354b842ffd3d873d49407db0382f98cc54d66665d950ec8277c374f19e9f0dd2e727f8759017c49b5b80baa87c63
+Ctrl.type = type:C
+Output = c92b86a099e2605037d531746a6af7cb
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000100192471d29d9fbc8b61570e4efa053a5f17b2efc0aa5415b3309f7dc3971c64d9f1093f6114941d4912f7bfb771db41d1f166d4bdaec8dde214aeb058e2227277393e3c0b12adc1b6a445870bc26e753e05e27b90b97d781e3e8493eb5e717c243213de4dcdd5a11d467b8d26759118692b10357c28b0efb0228cbe257b9ee0cb77bb7bc8b072edf418768c977e485635b4ab61078587128e9a8b3c6deca2a4e64cf9fd6eca880aebd1043deaf94447ea50b0c11b574259cdcafd208d9657c7177cf394de26dd8364b615786198c38e63c568e22b5263be41d6dd8843ad5254f61cf01b7162948652568c2b42833a95619fa5072adb0bfbf38e3eace7e1596066
+Ctrl.hexxcghash = hexxcghash:a0a53cb8bcc48ffe44fd9e50e0f7532d3e326f93d7ecb10135d4385dab550cd7be03a7374dfc2a92794be13e40c794811a9916c3d1c4e7ea31ed5269537c1c22
+Ctrl.hexsession_id = hexsession_id:9bcf3f3397ff464126cb2a99c04908721871354b842ffd3d873d49407db0382f98cc54d66665d950ec8277c374f19e9f0dd2e727f8759017c49b5b80baa87c63
+Ctrl.type = type:D
+Output = 1517de253a5b9f7d9c4c3f234b27392e
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000100192471d29d9fbc8b61570e4efa053a5f17b2efc0aa5415b3309f7dc3971c64d9f1093f6114941d4912f7bfb771db41d1f166d4bdaec8dde214aeb058e2227277393e3c0b12adc1b6a445870bc26e753e05e27b90b97d781e3e8493eb5e717c243213de4dcdd5a11d467b8d26759118692b10357c28b0efb0228cbe257b9ee0cb77bb7bc8b072edf418768c977e485635b4ab61078587128e9a8b3c6deca2a4e64cf9fd6eca880aebd1043deaf94447ea50b0c11b574259cdcafd208d9657c7177cf394de26dd8364b615786198c38e63c568e22b5263be41d6dd8843ad5254f61cf01b7162948652568c2b42833a95619fa5072adb0bfbf38e3eace7e1596066
+Ctrl.hexxcghash = hexxcghash:a0a53cb8bcc48ffe44fd9e50e0f7532d3e326f93d7ecb10135d4385dab550cd7be03a7374dfc2a92794be13e40c794811a9916c3d1c4e7ea31ed5269537c1c22
+Ctrl.hexsession_id = hexsession_id:9bcf3f3397ff464126cb2a99c04908721871354b842ffd3d873d49407db0382f98cc54d66665d950ec8277c374f19e9f0dd2e727f8759017c49b5b80baa87c63
+Ctrl.type = type:E
+Output = be48a82cd246cf4d6ddb397a39f1ed62d98b5265e75190624a523033796d05046d63e0810b4b7a6efe9b834cb043871203638557063968910ad1cfa0abe62bb1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:00000100192471d29d9fbc8b61570e4efa053a5f17b2efc0aa5415b3309f7dc3971c64d9f1093f6114941d4912f7bfb771db41d1f166d4bdaec8dde214aeb058e2227277393e3c0b12adc1b6a445870bc26e753e05e27b90b97d781e3e8493eb5e717c243213de4dcdd5a11d467b8d26759118692b10357c28b0efb0228cbe257b9ee0cb77bb7bc8b072edf418768c977e485635b4ab61078587128e9a8b3c6deca2a4e64cf9fd6eca880aebd1043deaf94447ea50b0c11b574259cdcafd208d9657c7177cf394de26dd8364b615786198c38e63c568e22b5263be41d6dd8843ad5254f61cf01b7162948652568c2b42833a95619fa5072adb0bfbf38e3eace7e1596066
+Ctrl.hexxcghash = hexxcghash:a0a53cb8bcc48ffe44fd9e50e0f7532d3e326f93d7ecb10135d4385dab550cd7be03a7374dfc2a92794be13e40c794811a9916c3d1c4e7ea31ed5269537c1c22
+Ctrl.hexsession_id = hexsession_id:9bcf3f3397ff464126cb2a99c04908721871354b842ffd3d873d49407db0382f98cc54d66665d950ec8277c374f19e9f0dd2e727f8759017c49b5b80baa87c63
+Ctrl.type = type:F
+Output = 0c9af3775d5dc49a1b9b85fa18420ce1ca10d5159f83f9e078c217289688639dbce5f85665f866d8f93b2c6823bc7b2655830d8bb51fba945ce6eac2b0e6ce8a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010015b3157b538e31a14797d981a6ef62814cd55fbea25ea88a16a5839484c7624d7befccc82d91e2ff2b6f402daba861b77c1016bab9e3d58bab985563f32d663407f9f3582856ee0aa3a56680c221ecddc48af6de71fd34626b716d9efe530df470c0b7b1e4131861bc4f12e44de7f1d1910047465c0eb95f7232d6e71d639d75ac58e6848e560210a5dc2e6996c1d96f9f688fb86558ba96422d1a69cf795ea67e66d534bef2160f4e9d4351c9c2faaad7c2ad2476ace5556c9b3c4c2d3bdac82bfb54d2e54eb6ed398b813c5928aa560b442c585a038571c4db98a44d8c8cdb02fa731b400adb859b591c1846900791d791927363d745042a38597ef883cbda
+Ctrl.hexxcghash = hexxcghash:651bdee255eef5fb47c7733df03d4346bc335cf1de2bfbd453f4ff18c775de475719a6ec4c5c55badadda4822e3fbf5ae3c0e6e9608a893fea68bfcc0af86d73
+Ctrl.hexsession_id = hexsession_id:ee603130d0bdec24952cd3392272dbd7a536c2e76c794cc2f678ca9dd789670453e6bcd330dbf4e93930ec0b3e506e4c629b3d156ab1171d247d0ba44217d292
+Ctrl.type = type:A
+Output = 7b802a74d216a41f7708c597b9053223
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010015b3157b538e31a14797d981a6ef62814cd55fbea25ea88a16a5839484c7624d7befccc82d91e2ff2b6f402daba861b77c1016bab9e3d58bab985563f32d663407f9f3582856ee0aa3a56680c221ecddc48af6de71fd34626b716d9efe530df470c0b7b1e4131861bc4f12e44de7f1d1910047465c0eb95f7232d6e71d639d75ac58e6848e560210a5dc2e6996c1d96f9f688fb86558ba96422d1a69cf795ea67e66d534bef2160f4e9d4351c9c2faaad7c2ad2476ace5556c9b3c4c2d3bdac82bfb54d2e54eb6ed398b813c5928aa560b442c585a038571c4db98a44d8c8cdb02fa731b400adb859b591c1846900791d791927363d745042a38597ef883cbda
+Ctrl.hexxcghash = hexxcghash:651bdee255eef5fb47c7733df03d4346bc335cf1de2bfbd453f4ff18c775de475719a6ec4c5c55badadda4822e3fbf5ae3c0e6e9608a893fea68bfcc0af86d73
+Ctrl.hexsession_id = hexsession_id:ee603130d0bdec24952cd3392272dbd7a536c2e76c794cc2f678ca9dd789670453e6bcd330dbf4e93930ec0b3e506e4c629b3d156ab1171d247d0ba44217d292
+Ctrl.type = type:B
+Output = 355223971bed70b804d191b64cde39e6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010015b3157b538e31a14797d981a6ef62814cd55fbea25ea88a16a5839484c7624d7befccc82d91e2ff2b6f402daba861b77c1016bab9e3d58bab985563f32d663407f9f3582856ee0aa3a56680c221ecddc48af6de71fd34626b716d9efe530df470c0b7b1e4131861bc4f12e44de7f1d1910047465c0eb95f7232d6e71d639d75ac58e6848e560210a5dc2e6996c1d96f9f688fb86558ba96422d1a69cf795ea67e66d534bef2160f4e9d4351c9c2faaad7c2ad2476ace5556c9b3c4c2d3bdac82bfb54d2e54eb6ed398b813c5928aa560b442c585a038571c4db98a44d8c8cdb02fa731b400adb859b591c1846900791d791927363d745042a38597ef883cbda
+Ctrl.hexxcghash = hexxcghash:651bdee255eef5fb47c7733df03d4346bc335cf1de2bfbd453f4ff18c775de475719a6ec4c5c55badadda4822e3fbf5ae3c0e6e9608a893fea68bfcc0af86d73
+Ctrl.hexsession_id = hexsession_id:ee603130d0bdec24952cd3392272dbd7a536c2e76c794cc2f678ca9dd789670453e6bcd330dbf4e93930ec0b3e506e4c629b3d156ab1171d247d0ba44217d292
+Ctrl.type = type:C
+Output = 925f2b036ac2682e20f022377499c3e1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010015b3157b538e31a14797d981a6ef62814cd55fbea25ea88a16a5839484c7624d7befccc82d91e2ff2b6f402daba861b77c1016bab9e3d58bab985563f32d663407f9f3582856ee0aa3a56680c221ecddc48af6de71fd34626b716d9efe530df470c0b7b1e4131861bc4f12e44de7f1d1910047465c0eb95f7232d6e71d639d75ac58e6848e560210a5dc2e6996c1d96f9f688fb86558ba96422d1a69cf795ea67e66d534bef2160f4e9d4351c9c2faaad7c2ad2476ace5556c9b3c4c2d3bdac82bfb54d2e54eb6ed398b813c5928aa560b442c585a038571c4db98a44d8c8cdb02fa731b400adb859b591c1846900791d791927363d745042a38597ef883cbda
+Ctrl.hexxcghash = hexxcghash:651bdee255eef5fb47c7733df03d4346bc335cf1de2bfbd453f4ff18c775de475719a6ec4c5c55badadda4822e3fbf5ae3c0e6e9608a893fea68bfcc0af86d73
+Ctrl.hexsession_id = hexsession_id:ee603130d0bdec24952cd3392272dbd7a536c2e76c794cc2f678ca9dd789670453e6bcd330dbf4e93930ec0b3e506e4c629b3d156ab1171d247d0ba44217d292
+Ctrl.type = type:D
+Output = 37ae2bbbb1603c07d5274fc8f57126dc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010015b3157b538e31a14797d981a6ef62814cd55fbea25ea88a16a5839484c7624d7befccc82d91e2ff2b6f402daba861b77c1016bab9e3d58bab985563f32d663407f9f3582856ee0aa3a56680c221ecddc48af6de71fd34626b716d9efe530df470c0b7b1e4131861bc4f12e44de7f1d1910047465c0eb95f7232d6e71d639d75ac58e6848e560210a5dc2e6996c1d96f9f688fb86558ba96422d1a69cf795ea67e66d534bef2160f4e9d4351c9c2faaad7c2ad2476ace5556c9b3c4c2d3bdac82bfb54d2e54eb6ed398b813c5928aa560b442c585a038571c4db98a44d8c8cdb02fa731b400adb859b591c1846900791d791927363d745042a38597ef883cbda
+Ctrl.hexxcghash = hexxcghash:651bdee255eef5fb47c7733df03d4346bc335cf1de2bfbd453f4ff18c775de475719a6ec4c5c55badadda4822e3fbf5ae3c0e6e9608a893fea68bfcc0af86d73
+Ctrl.hexsession_id = hexsession_id:ee603130d0bdec24952cd3392272dbd7a536c2e76c794cc2f678ca9dd789670453e6bcd330dbf4e93930ec0b3e506e4c629b3d156ab1171d247d0ba44217d292
+Ctrl.type = type:E
+Output = 8b36c7e175797bf7bbb079ac5d06e6f7f62fc5a957e0fefab7df565eb72ae0586dbebad978975aaa35846de667b44b7174315b2b932f0be538fba76b92531019
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010015b3157b538e31a14797d981a6ef62814cd55fbea25ea88a16a5839484c7624d7befccc82d91e2ff2b6f402daba861b77c1016bab9e3d58bab985563f32d663407f9f3582856ee0aa3a56680c221ecddc48af6de71fd34626b716d9efe530df470c0b7b1e4131861bc4f12e44de7f1d1910047465c0eb95f7232d6e71d639d75ac58e6848e560210a5dc2e6996c1d96f9f688fb86558ba96422d1a69cf795ea67e66d534bef2160f4e9d4351c9c2faaad7c2ad2476ace5556c9b3c4c2d3bdac82bfb54d2e54eb6ed398b813c5928aa560b442c585a038571c4db98a44d8c8cdb02fa731b400adb859b591c1846900791d791927363d745042a38597ef883cbda
+Ctrl.hexxcghash = hexxcghash:651bdee255eef5fb47c7733df03d4346bc335cf1de2bfbd453f4ff18c775de475719a6ec4c5c55badadda4822e3fbf5ae3c0e6e9608a893fea68bfcc0af86d73
+Ctrl.hexsession_id = hexsession_id:ee603130d0bdec24952cd3392272dbd7a536c2e76c794cc2f678ca9dd789670453e6bcd330dbf4e93930ec0b3e506e4c629b3d156ab1171d247d0ba44217d292
+Ctrl.type = type:F
+Output = 388ef310bce13188df3fd6285576041754a281548fcc6a212e0de564db661640320130e4df4a6ff31162edaa7ced5b7f05f3456f674ee8be0b03424142058795
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100b41c0bdf180d02ff459079925b32e54299128298da864be28b4c02532244b057219e3fa5fea09841351604ab713021622e6a6d0748f354fc3f29a9ac8bb64fdd984b725f00f56df3cf16d3bac786524a29105096f96f387422361bcc24774fd4d5b71bd6f757a8193fd691411b8e0aa14307e6ed1e97907925d93cee9ed266f387af66cd3da3e99d543e4baaf8a7fdb36c10869267767d80509717b5666e3fcdf8cca6486a1c18e3d3c15ba0c6773dcbe374d83de1c108a400998b25afa4d3b60917594a1120e449a57db1f3b2e048c3c64a408ed41bb32145364932f105788cd0b198522f0c59b1d774b1ac80cd76d18e06b53c3d599f625c72f38b15745478
+Ctrl.hexxcghash = hexxcghash:94ce7876dd7d98475ff8dd634b9b48e0e3416d1afd633637b49a49c525ee905ad8a17c12194746e210207c54628c453287a77515575a79ad40b270b5115030b8
+Ctrl.hexsession_id = hexsession_id:d2e7ea215f35381164a1382533f752eb21e6fa9f25d399b7914c0317998f2b7820f893557459f0773eca3dbafd8375021b955a8dfe7ad659dfe480e3107724f8
+Ctrl.type = type:A
+Output = efeb5305eda69b0bd6999b4a27479667
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100b41c0bdf180d02ff459079925b32e54299128298da864be28b4c02532244b057219e3fa5fea09841351604ab713021622e6a6d0748f354fc3f29a9ac8bb64fdd984b725f00f56df3cf16d3bac786524a29105096f96f387422361bcc24774fd4d5b71bd6f757a8193fd691411b8e0aa14307e6ed1e97907925d93cee9ed266f387af66cd3da3e99d543e4baaf8a7fdb36c10869267767d80509717b5666e3fcdf8cca6486a1c18e3d3c15ba0c6773dcbe374d83de1c108a400998b25afa4d3b60917594a1120e449a57db1f3b2e048c3c64a408ed41bb32145364932f105788cd0b198522f0c59b1d774b1ac80cd76d18e06b53c3d599f625c72f38b15745478
+Ctrl.hexxcghash = hexxcghash:94ce7876dd7d98475ff8dd634b9b48e0e3416d1afd633637b49a49c525ee905ad8a17c12194746e210207c54628c453287a77515575a79ad40b270b5115030b8
+Ctrl.hexsession_id = hexsession_id:d2e7ea215f35381164a1382533f752eb21e6fa9f25d399b7914c0317998f2b7820f893557459f0773eca3dbafd8375021b955a8dfe7ad659dfe480e3107724f8
+Ctrl.type = type:B
+Output = 806fca9189c02e7ec2a6459387b03506
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100b41c0bdf180d02ff459079925b32e54299128298da864be28b4c02532244b057219e3fa5fea09841351604ab713021622e6a6d0748f354fc3f29a9ac8bb64fdd984b725f00f56df3cf16d3bac786524a29105096f96f387422361bcc24774fd4d5b71bd6f757a8193fd691411b8e0aa14307e6ed1e97907925d93cee9ed266f387af66cd3da3e99d543e4baaf8a7fdb36c10869267767d80509717b5666e3fcdf8cca6486a1c18e3d3c15ba0c6773dcbe374d83de1c108a400998b25afa4d3b60917594a1120e449a57db1f3b2e048c3c64a408ed41bb32145364932f105788cd0b198522f0c59b1d774b1ac80cd76d18e06b53c3d599f625c72f38b15745478
+Ctrl.hexxcghash = hexxcghash:94ce7876dd7d98475ff8dd634b9b48e0e3416d1afd633637b49a49c525ee905ad8a17c12194746e210207c54628c453287a77515575a79ad40b270b5115030b8
+Ctrl.hexsession_id = hexsession_id:d2e7ea215f35381164a1382533f752eb21e6fa9f25d399b7914c0317998f2b7820f893557459f0773eca3dbafd8375021b955a8dfe7ad659dfe480e3107724f8
+Ctrl.type = type:C
+Output = 9e542282d0db345a6ba20eba7c5de531
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100b41c0bdf180d02ff459079925b32e54299128298da864be28b4c02532244b057219e3fa5fea09841351604ab713021622e6a6d0748f354fc3f29a9ac8bb64fdd984b725f00f56df3cf16d3bac786524a29105096f96f387422361bcc24774fd4d5b71bd6f757a8193fd691411b8e0aa14307e6ed1e97907925d93cee9ed266f387af66cd3da3e99d543e4baaf8a7fdb36c10869267767d80509717b5666e3fcdf8cca6486a1c18e3d3c15ba0c6773dcbe374d83de1c108a400998b25afa4d3b60917594a1120e449a57db1f3b2e048c3c64a408ed41bb32145364932f105788cd0b198522f0c59b1d774b1ac80cd76d18e06b53c3d599f625c72f38b15745478
+Ctrl.hexxcghash = hexxcghash:94ce7876dd7d98475ff8dd634b9b48e0e3416d1afd633637b49a49c525ee905ad8a17c12194746e210207c54628c453287a77515575a79ad40b270b5115030b8
+Ctrl.hexsession_id = hexsession_id:d2e7ea215f35381164a1382533f752eb21e6fa9f25d399b7914c0317998f2b7820f893557459f0773eca3dbafd8375021b955a8dfe7ad659dfe480e3107724f8
+Ctrl.type = type:D
+Output = 41e7962b57a67f75072f15a5ba405d15
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100b41c0bdf180d02ff459079925b32e54299128298da864be28b4c02532244b057219e3fa5fea09841351604ab713021622e6a6d0748f354fc3f29a9ac8bb64fdd984b725f00f56df3cf16d3bac786524a29105096f96f387422361bcc24774fd4d5b71bd6f757a8193fd691411b8e0aa14307e6ed1e97907925d93cee9ed266f387af66cd3da3e99d543e4baaf8a7fdb36c10869267767d80509717b5666e3fcdf8cca6486a1c18e3d3c15ba0c6773dcbe374d83de1c108a400998b25afa4d3b60917594a1120e449a57db1f3b2e048c3c64a408ed41bb32145364932f105788cd0b198522f0c59b1d774b1ac80cd76d18e06b53c3d599f625c72f38b15745478
+Ctrl.hexxcghash = hexxcghash:94ce7876dd7d98475ff8dd634b9b48e0e3416d1afd633637b49a49c525ee905ad8a17c12194746e210207c54628c453287a77515575a79ad40b270b5115030b8
+Ctrl.hexsession_id = hexsession_id:d2e7ea215f35381164a1382533f752eb21e6fa9f25d399b7914c0317998f2b7820f893557459f0773eca3dbafd8375021b955a8dfe7ad659dfe480e3107724f8
+Ctrl.type = type:E
+Output = 7bf8f25fd155e41d1dc85cc814704dd8732275b3a53dc1b8c6b330c08f307b5c0da31606cb7eaa1b37b2721f4a1bf70a6885c30d17d7acd32fcc894768fe4106
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100b41c0bdf180d02ff459079925b32e54299128298da864be28b4c02532244b057219e3fa5fea09841351604ab713021622e6a6d0748f354fc3f29a9ac8bb64fdd984b725f00f56df3cf16d3bac786524a29105096f96f387422361bcc24774fd4d5b71bd6f757a8193fd691411b8e0aa14307e6ed1e97907925d93cee9ed266f387af66cd3da3e99d543e4baaf8a7fdb36c10869267767d80509717b5666e3fcdf8cca6486a1c18e3d3c15ba0c6773dcbe374d83de1c108a400998b25afa4d3b60917594a1120e449a57db1f3b2e048c3c64a408ed41bb32145364932f105788cd0b198522f0c59b1d774b1ac80cd76d18e06b53c3d599f625c72f38b15745478
+Ctrl.hexxcghash = hexxcghash:94ce7876dd7d98475ff8dd634b9b48e0e3416d1afd633637b49a49c525ee905ad8a17c12194746e210207c54628c453287a77515575a79ad40b270b5115030b8
+Ctrl.hexsession_id = hexsession_id:d2e7ea215f35381164a1382533f752eb21e6fa9f25d399b7914c0317998f2b7820f893557459f0773eca3dbafd8375021b955a8dfe7ad659dfe480e3107724f8
+Ctrl.type = type:F
+Output = 66b8f8c1a38120c73cc55950455a69c426fda44b9c66c3becaf259dd57a620e5ed3a749a486d05eab52c289f489581cb655865d4388a81e79b06bd105e3ae858
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000001003ba71746e4622911dbcd76359dbd01a3958175cac500fac87146f4a2616782ac0328ea32046762f62080df8fe76ff112acbf4e4c7a36fa648ec60c50d4a0f7b27b67cdcd725ed2d51c3b5c438c45c8f46d953845a899e89378e981aa270bd6cc190a5ab53e9516f5c194f9b61ef782573b417702337b32776765e75d6efb371a3af98c1b0eaa90ee43a99e58d803bc645a65100371cda8316d51618e4ada4d9a46cd049673cbfcf6ce3ec66c964902eb9bd28514d1fce32ebf8ee2ae3c8e46f4bf18f153a6f1031cefc7e736d82105dbeb60db422b79f4c4f3f4838fee891341cc982e79917aefb82529d134648847de15cf3ba1d7b5000e74b78198d6a3efce
+Ctrl.hexxcghash = hexxcghash:327a1cfc89837c90fb7141ad3a7df293af5c9e2fd482fb77f6769db8e91417377fe0a0a30c072f8276e824975afdc0f73e1a1cbeda86d5c70c2799912602ee78
+Ctrl.hexsession_id = hexsession_id:46282b8a6dea1654de89199972c414ee512f33ab832e7284547cfc345af6eea9fbafb75f4646789755078a174c98c5aa1d740af1cf40844ae680cdd80466086b
+Ctrl.type = type:A
+Output = 8f6ac18ff5300849be34602630bb4102
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000001003ba71746e4622911dbcd76359dbd01a3958175cac500fac87146f4a2616782ac0328ea32046762f62080df8fe76ff112acbf4e4c7a36fa648ec60c50d4a0f7b27b67cdcd725ed2d51c3b5c438c45c8f46d953845a899e89378e981aa270bd6cc190a5ab53e9516f5c194f9b61ef782573b417702337b32776765e75d6efb371a3af98c1b0eaa90ee43a99e58d803bc645a65100371cda8316d51618e4ada4d9a46cd049673cbfcf6ce3ec66c964902eb9bd28514d1fce32ebf8ee2ae3c8e46f4bf18f153a6f1031cefc7e736d82105dbeb60db422b79f4c4f3f4838fee891341cc982e79917aefb82529d134648847de15cf3ba1d7b5000e74b78198d6a3efce
+Ctrl.hexxcghash = hexxcghash:327a1cfc89837c90fb7141ad3a7df293af5c9e2fd482fb77f6769db8e91417377fe0a0a30c072f8276e824975afdc0f73e1a1cbeda86d5c70c2799912602ee78
+Ctrl.hexsession_id = hexsession_id:46282b8a6dea1654de89199972c414ee512f33ab832e7284547cfc345af6eea9fbafb75f4646789755078a174c98c5aa1d740af1cf40844ae680cdd80466086b
+Ctrl.type = type:B
+Output = f2b45df2508656758529a1f4679839fd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000001003ba71746e4622911dbcd76359dbd01a3958175cac500fac87146f4a2616782ac0328ea32046762f62080df8fe76ff112acbf4e4c7a36fa648ec60c50d4a0f7b27b67cdcd725ed2d51c3b5c438c45c8f46d953845a899e89378e981aa270bd6cc190a5ab53e9516f5c194f9b61ef782573b417702337b32776765e75d6efb371a3af98c1b0eaa90ee43a99e58d803bc645a65100371cda8316d51618e4ada4d9a46cd049673cbfcf6ce3ec66c964902eb9bd28514d1fce32ebf8ee2ae3c8e46f4bf18f153a6f1031cefc7e736d82105dbeb60db422b79f4c4f3f4838fee891341cc982e79917aefb82529d134648847de15cf3ba1d7b5000e74b78198d6a3efce
+Ctrl.hexxcghash = hexxcghash:327a1cfc89837c90fb7141ad3a7df293af5c9e2fd482fb77f6769db8e91417377fe0a0a30c072f8276e824975afdc0f73e1a1cbeda86d5c70c2799912602ee78
+Ctrl.hexsession_id = hexsession_id:46282b8a6dea1654de89199972c414ee512f33ab832e7284547cfc345af6eea9fbafb75f4646789755078a174c98c5aa1d740af1cf40844ae680cdd80466086b
+Ctrl.type = type:C
+Output = 3356d58f61bcca506058e0990c9821f5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000001003ba71746e4622911dbcd76359dbd01a3958175cac500fac87146f4a2616782ac0328ea32046762f62080df8fe76ff112acbf4e4c7a36fa648ec60c50d4a0f7b27b67cdcd725ed2d51c3b5c438c45c8f46d953845a899e89378e981aa270bd6cc190a5ab53e9516f5c194f9b61ef782573b417702337b32776765e75d6efb371a3af98c1b0eaa90ee43a99e58d803bc645a65100371cda8316d51618e4ada4d9a46cd049673cbfcf6ce3ec66c964902eb9bd28514d1fce32ebf8ee2ae3c8e46f4bf18f153a6f1031cefc7e736d82105dbeb60db422b79f4c4f3f4838fee891341cc982e79917aefb82529d134648847de15cf3ba1d7b5000e74b78198d6a3efce
+Ctrl.hexxcghash = hexxcghash:327a1cfc89837c90fb7141ad3a7df293af5c9e2fd482fb77f6769db8e91417377fe0a0a30c072f8276e824975afdc0f73e1a1cbeda86d5c70c2799912602ee78
+Ctrl.hexsession_id = hexsession_id:46282b8a6dea1654de89199972c414ee512f33ab832e7284547cfc345af6eea9fbafb75f4646789755078a174c98c5aa1d740af1cf40844ae680cdd80466086b
+Ctrl.type = type:D
+Output = 78495438a5326cca5351a239545941c1
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000001003ba71746e4622911dbcd76359dbd01a3958175cac500fac87146f4a2616782ac0328ea32046762f62080df8fe76ff112acbf4e4c7a36fa648ec60c50d4a0f7b27b67cdcd725ed2d51c3b5c438c45c8f46d953845a899e89378e981aa270bd6cc190a5ab53e9516f5c194f9b61ef782573b417702337b32776765e75d6efb371a3af98c1b0eaa90ee43a99e58d803bc645a65100371cda8316d51618e4ada4d9a46cd049673cbfcf6ce3ec66c964902eb9bd28514d1fce32ebf8ee2ae3c8e46f4bf18f153a6f1031cefc7e736d82105dbeb60db422b79f4c4f3f4838fee891341cc982e79917aefb82529d134648847de15cf3ba1d7b5000e74b78198d6a3efce
+Ctrl.hexxcghash = hexxcghash:327a1cfc89837c90fb7141ad3a7df293af5c9e2fd482fb77f6769db8e91417377fe0a0a30c072f8276e824975afdc0f73e1a1cbeda86d5c70c2799912602ee78
+Ctrl.hexsession_id = hexsession_id:46282b8a6dea1654de89199972c414ee512f33ab832e7284547cfc345af6eea9fbafb75f4646789755078a174c98c5aa1d740af1cf40844ae680cdd80466086b
+Ctrl.type = type:E
+Output = dcfc5d099f5040513f76b012ab62ee45d5d8271aec9cbbdd1e1f7e0806f363d21c2eca730f9489ee70fbc7490a1901587b1d418c0e4f429c8098cd793c6d285c
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:000001003ba71746e4622911dbcd76359dbd01a3958175cac500fac87146f4a2616782ac0328ea32046762f62080df8fe76ff112acbf4e4c7a36fa648ec60c50d4a0f7b27b67cdcd725ed2d51c3b5c438c45c8f46d953845a899e89378e981aa270bd6cc190a5ab53e9516f5c194f9b61ef782573b417702337b32776765e75d6efb371a3af98c1b0eaa90ee43a99e58d803bc645a65100371cda8316d51618e4ada4d9a46cd049673cbfcf6ce3ec66c964902eb9bd28514d1fce32ebf8ee2ae3c8e46f4bf18f153a6f1031cefc7e736d82105dbeb60db422b79f4c4f3f4838fee891341cc982e79917aefb82529d134648847de15cf3ba1d7b5000e74b78198d6a3efce
+Ctrl.hexxcghash = hexxcghash:327a1cfc89837c90fb7141ad3a7df293af5c9e2fd482fb77f6769db8e91417377fe0a0a30c072f8276e824975afdc0f73e1a1cbeda86d5c70c2799912602ee78
+Ctrl.hexsession_id = hexsession_id:46282b8a6dea1654de89199972c414ee512f33ab832e7284547cfc345af6eea9fbafb75f4646789755078a174c98c5aa1d740af1cf40844ae680cdd80466086b
+Ctrl.type = type:F
+Output = a75817465c73517bd7884dcd230464583ae491ae5e39330873cd7a967188022cad63e712c7ec261abdb34c01bddd8989dfce8f5d8a8cdbdcc305429b3fd93c76
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100f3a28f9574691777f2a9e05a882295e5ae272a6af486e53a8574e0ce7633a5c6871a39e6ba3176a41ce3fe6c80aa8469df71401583987e34374586ec56268b37d42bc047cc898750379aa7ddc5549cc069fa10d29fca303e6063a2cb800322a84a63480d91606db0244d2dd456005bb4a4b33f91ddf33335ec4d4d519e430542e087d5b1e952b183a32b3f7b118c410c46dc44b7ad669e7d98b934e48830e61ddd2e6094e0d1fa39b9041b9ca9dc768af4da702f912b2e82738cf506479c68fa9a5f2a9153189cf83bd11a05a92428d7c7124094f684f7c848114dc272d8a308d7b65e47b1d3c2c70d5a63efbc191ff5f0359356f706ac703445778b2b43a8d6
+Ctrl.hexxcghash = hexxcghash:4f3aaea9ade34a07f46c11a4480461e2c523a740492b23b0bfa2a9e2e2c2ce542a09644154a4b3ab0e8b71ea950444a9954a156c0530a1436aa98951af7e1972
+Ctrl.hexsession_id = hexsession_id:c778cdc03ecc941ff7d37c41fe67dc84df375117abd62d099129f38d37375f3cde4e75a0160fb05edf392d1eac509d5a6796f635623794d81df9b4cf81021738
+Ctrl.type = type:A
+Output = 4fa1b8c53d25f7c1adb4810c46b48ae7
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100f3a28f9574691777f2a9e05a882295e5ae272a6af486e53a8574e0ce7633a5c6871a39e6ba3176a41ce3fe6c80aa8469df71401583987e34374586ec56268b37d42bc047cc898750379aa7ddc5549cc069fa10d29fca303e6063a2cb800322a84a63480d91606db0244d2dd456005bb4a4b33f91ddf33335ec4d4d519e430542e087d5b1e952b183a32b3f7b118c410c46dc44b7ad669e7d98b934e48830e61ddd2e6094e0d1fa39b9041b9ca9dc768af4da702f912b2e82738cf506479c68fa9a5f2a9153189cf83bd11a05a92428d7c7124094f684f7c848114dc272d8a308d7b65e47b1d3c2c70d5a63efbc191ff5f0359356f706ac703445778b2b43a8d6
+Ctrl.hexxcghash = hexxcghash:4f3aaea9ade34a07f46c11a4480461e2c523a740492b23b0bfa2a9e2e2c2ce542a09644154a4b3ab0e8b71ea950444a9954a156c0530a1436aa98951af7e1972
+Ctrl.hexsession_id = hexsession_id:c778cdc03ecc941ff7d37c41fe67dc84df375117abd62d099129f38d37375f3cde4e75a0160fb05edf392d1eac509d5a6796f635623794d81df9b4cf81021738
+Ctrl.type = type:B
+Output = 3c453d0f50b7f41826e74e5cce5b5996
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100f3a28f9574691777f2a9e05a882295e5ae272a6af486e53a8574e0ce7633a5c6871a39e6ba3176a41ce3fe6c80aa8469df71401583987e34374586ec56268b37d42bc047cc898750379aa7ddc5549cc069fa10d29fca303e6063a2cb800322a84a63480d91606db0244d2dd456005bb4a4b33f91ddf33335ec4d4d519e430542e087d5b1e952b183a32b3f7b118c410c46dc44b7ad669e7d98b934e48830e61ddd2e6094e0d1fa39b9041b9ca9dc768af4da702f912b2e82738cf506479c68fa9a5f2a9153189cf83bd11a05a92428d7c7124094f684f7c848114dc272d8a308d7b65e47b1d3c2c70d5a63efbc191ff5f0359356f706ac703445778b2b43a8d6
+Ctrl.hexxcghash = hexxcghash:4f3aaea9ade34a07f46c11a4480461e2c523a740492b23b0bfa2a9e2e2c2ce542a09644154a4b3ab0e8b71ea950444a9954a156c0530a1436aa98951af7e1972
+Ctrl.hexsession_id = hexsession_id:c778cdc03ecc941ff7d37c41fe67dc84df375117abd62d099129f38d37375f3cde4e75a0160fb05edf392d1eac509d5a6796f635623794d81df9b4cf81021738
+Ctrl.type = type:C
+Output = 22f47a00a5de0f56b3e586357eeebe57
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100f3a28f9574691777f2a9e05a882295e5ae272a6af486e53a8574e0ce7633a5c6871a39e6ba3176a41ce3fe6c80aa8469df71401583987e34374586ec56268b37d42bc047cc898750379aa7ddc5549cc069fa10d29fca303e6063a2cb800322a84a63480d91606db0244d2dd456005bb4a4b33f91ddf33335ec4d4d519e430542e087d5b1e952b183a32b3f7b118c410c46dc44b7ad669e7d98b934e48830e61ddd2e6094e0d1fa39b9041b9ca9dc768af4da702f912b2e82738cf506479c68fa9a5f2a9153189cf83bd11a05a92428d7c7124094f684f7c848114dc272d8a308d7b65e47b1d3c2c70d5a63efbc191ff5f0359356f706ac703445778b2b43a8d6
+Ctrl.hexxcghash = hexxcghash:4f3aaea9ade34a07f46c11a4480461e2c523a740492b23b0bfa2a9e2e2c2ce542a09644154a4b3ab0e8b71ea950444a9954a156c0530a1436aa98951af7e1972
+Ctrl.hexsession_id = hexsession_id:c778cdc03ecc941ff7d37c41fe67dc84df375117abd62d099129f38d37375f3cde4e75a0160fb05edf392d1eac509d5a6796f635623794d81df9b4cf81021738
+Ctrl.type = type:D
+Output = 8d32d1945e93c4982bd106567f8e481f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100f3a28f9574691777f2a9e05a882295e5ae272a6af486e53a8574e0ce7633a5c6871a39e6ba3176a41ce3fe6c80aa8469df71401583987e34374586ec56268b37d42bc047cc898750379aa7ddc5549cc069fa10d29fca303e6063a2cb800322a84a63480d91606db0244d2dd456005bb4a4b33f91ddf33335ec4d4d519e430542e087d5b1e952b183a32b3f7b118c410c46dc44b7ad669e7d98b934e48830e61ddd2e6094e0d1fa39b9041b9ca9dc768af4da702f912b2e82738cf506479c68fa9a5f2a9153189cf83bd11a05a92428d7c7124094f684f7c848114dc272d8a308d7b65e47b1d3c2c70d5a63efbc191ff5f0359356f706ac703445778b2b43a8d6
+Ctrl.hexxcghash = hexxcghash:4f3aaea9ade34a07f46c11a4480461e2c523a740492b23b0bfa2a9e2e2c2ce542a09644154a4b3ab0e8b71ea950444a9954a156c0530a1436aa98951af7e1972
+Ctrl.hexsession_id = hexsession_id:c778cdc03ecc941ff7d37c41fe67dc84df375117abd62d099129f38d37375f3cde4e75a0160fb05edf392d1eac509d5a6796f635623794d81df9b4cf81021738
+Ctrl.type = type:E
+Output = 9eefe581b1514160f81c94193d374d8f85879136e9ae494c487119b1974aac3e143948f656c1c1e837ff1368ef0d997cd3ca9f46c71056269eb8a1da8daf5678
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100f3a28f9574691777f2a9e05a882295e5ae272a6af486e53a8574e0ce7633a5c6871a39e6ba3176a41ce3fe6c80aa8469df71401583987e34374586ec56268b37d42bc047cc898750379aa7ddc5549cc069fa10d29fca303e6063a2cb800322a84a63480d91606db0244d2dd456005bb4a4b33f91ddf33335ec4d4d519e430542e087d5b1e952b183a32b3f7b118c410c46dc44b7ad669e7d98b934e48830e61ddd2e6094e0d1fa39b9041b9ca9dc768af4da702f912b2e82738cf506479c68fa9a5f2a9153189cf83bd11a05a92428d7c7124094f684f7c848114dc272d8a308d7b65e47b1d3c2c70d5a63efbc191ff5f0359356f706ac703445778b2b43a8d6
+Ctrl.hexxcghash = hexxcghash:4f3aaea9ade34a07f46c11a4480461e2c523a740492b23b0bfa2a9e2e2c2ce542a09644154a4b3ab0e8b71ea950444a9954a156c0530a1436aa98951af7e1972
+Ctrl.hexsession_id = hexsession_id:c778cdc03ecc941ff7d37c41fe67dc84df375117abd62d099129f38d37375f3cde4e75a0160fb05edf392d1eac509d5a6796f635623794d81df9b4cf81021738
+Ctrl.type = type:F
+Output = 8dd76f59e6692ff642894ee1bb147f3e1490cac944af29de6b2b5abcc4ab9eb41d236e9cd2f40cf83935097f307a246d7b35005dd302bacfe7e4fed37d2f46e9
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010012c99d1e0542b3b71e287b1ea15e54a3197f95cfbf7f6a209ada41fce3a6faad9bc4d569b690223e5d668019c11204716bb96a858c36c853bd41b28c1505ddce9df22b31dbdaa014b07ec53a79cfeb5b540902669c7a283f3647c1a9f685b5027bfb18e827818a76c23fa6ad20760f228a4239a4d558240130b5cc389d2be41b806cafd24d1d425c26a61508c974d62aae6f6830459c79e7a9ff5610291661bf03528fbafe47cf4c2e51f4856749ef543eb7cd8f72e84a4075fa7df9ad12565e5b3810c6d6292ff878ee8499611688989f0a04f4dc7275e01c0444a0321f0a0327fbe8a55689307b1bfd66d5d27ade78df5c1dfcef8868ebbe339d7efdae1973
+Ctrl.hexxcghash = hexxcghash:7317f576ce95d5bed93d08c65eb814d037ecd42f09b2d514fad58335e8e8bec807b9cf74b9044f449581c792ebb08843f2b80da87d91625e20f25de91b4d5d23
+Ctrl.hexsession_id = hexsession_id:7d153fda85bd3488962bdf03b8d0f26cf61f737173587ac6ee3d6f601a00f6474f5401370ef04720c620ea2b9668ab72cb6c40dc96057fc4537e7a6b0e79e9c5
+Ctrl.type = type:A
+Output = f335b3ab270d7e686c5e023b3a2da75b
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010012c99d1e0542b3b71e287b1ea15e54a3197f95cfbf7f6a209ada41fce3a6faad9bc4d569b690223e5d668019c11204716bb96a858c36c853bd41b28c1505ddce9df22b31dbdaa014b07ec53a79cfeb5b540902669c7a283f3647c1a9f685b5027bfb18e827818a76c23fa6ad20760f228a4239a4d558240130b5cc389d2be41b806cafd24d1d425c26a61508c974d62aae6f6830459c79e7a9ff5610291661bf03528fbafe47cf4c2e51f4856749ef543eb7cd8f72e84a4075fa7df9ad12565e5b3810c6d6292ff878ee8499611688989f0a04f4dc7275e01c0444a0321f0a0327fbe8a55689307b1bfd66d5d27ade78df5c1dfcef8868ebbe339d7efdae1973
+Ctrl.hexxcghash = hexxcghash:7317f576ce95d5bed93d08c65eb814d037ecd42f09b2d514fad58335e8e8bec807b9cf74b9044f449581c792ebb08843f2b80da87d91625e20f25de91b4d5d23
+Ctrl.hexsession_id = hexsession_id:7d153fda85bd3488962bdf03b8d0f26cf61f737173587ac6ee3d6f601a00f6474f5401370ef04720c620ea2b9668ab72cb6c40dc96057fc4537e7a6b0e79e9c5
+Ctrl.type = type:B
+Output = 857c9245c67bad84b7377c424c5e7e7a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010012c99d1e0542b3b71e287b1ea15e54a3197f95cfbf7f6a209ada41fce3a6faad9bc4d569b690223e5d668019c11204716bb96a858c36c853bd41b28c1505ddce9df22b31dbdaa014b07ec53a79cfeb5b540902669c7a283f3647c1a9f685b5027bfb18e827818a76c23fa6ad20760f228a4239a4d558240130b5cc389d2be41b806cafd24d1d425c26a61508c974d62aae6f6830459c79e7a9ff5610291661bf03528fbafe47cf4c2e51f4856749ef543eb7cd8f72e84a4075fa7df9ad12565e5b3810c6d6292ff878ee8499611688989f0a04f4dc7275e01c0444a0321f0a0327fbe8a55689307b1bfd66d5d27ade78df5c1dfcef8868ebbe339d7efdae1973
+Ctrl.hexxcghash = hexxcghash:7317f576ce95d5bed93d08c65eb814d037ecd42f09b2d514fad58335e8e8bec807b9cf74b9044f449581c792ebb08843f2b80da87d91625e20f25de91b4d5d23
+Ctrl.hexsession_id = hexsession_id:7d153fda85bd3488962bdf03b8d0f26cf61f737173587ac6ee3d6f601a00f6474f5401370ef04720c620ea2b9668ab72cb6c40dc96057fc4537e7a6b0e79e9c5
+Ctrl.type = type:C
+Output = 1c44ef56440f5856bdfd951305fd81e4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010012c99d1e0542b3b71e287b1ea15e54a3197f95cfbf7f6a209ada41fce3a6faad9bc4d569b690223e5d668019c11204716bb96a858c36c853bd41b28c1505ddce9df22b31dbdaa014b07ec53a79cfeb5b540902669c7a283f3647c1a9f685b5027bfb18e827818a76c23fa6ad20760f228a4239a4d558240130b5cc389d2be41b806cafd24d1d425c26a61508c974d62aae6f6830459c79e7a9ff5610291661bf03528fbafe47cf4c2e51f4856749ef543eb7cd8f72e84a4075fa7df9ad12565e5b3810c6d6292ff878ee8499611688989f0a04f4dc7275e01c0444a0321f0a0327fbe8a55689307b1bfd66d5d27ade78df5c1dfcef8868ebbe339d7efdae1973
+Ctrl.hexxcghash = hexxcghash:7317f576ce95d5bed93d08c65eb814d037ecd42f09b2d514fad58335e8e8bec807b9cf74b9044f449581c792ebb08843f2b80da87d91625e20f25de91b4d5d23
+Ctrl.hexsession_id = hexsession_id:7d153fda85bd3488962bdf03b8d0f26cf61f737173587ac6ee3d6f601a00f6474f5401370ef04720c620ea2b9668ab72cb6c40dc96057fc4537e7a6b0e79e9c5
+Ctrl.type = type:D
+Output = 8d3496ac631bb3588abbb13d4ae2dc2d
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010012c99d1e0542b3b71e287b1ea15e54a3197f95cfbf7f6a209ada41fce3a6faad9bc4d569b690223e5d668019c11204716bb96a858c36c853bd41b28c1505ddce9df22b31dbdaa014b07ec53a79cfeb5b540902669c7a283f3647c1a9f685b5027bfb18e827818a76c23fa6ad20760f228a4239a4d558240130b5cc389d2be41b806cafd24d1d425c26a61508c974d62aae6f6830459c79e7a9ff5610291661bf03528fbafe47cf4c2e51f4856749ef543eb7cd8f72e84a4075fa7df9ad12565e5b3810c6d6292ff878ee8499611688989f0a04f4dc7275e01c0444a0321f0a0327fbe8a55689307b1bfd66d5d27ade78df5c1dfcef8868ebbe339d7efdae1973
+Ctrl.hexxcghash = hexxcghash:7317f576ce95d5bed93d08c65eb814d037ecd42f09b2d514fad58335e8e8bec807b9cf74b9044f449581c792ebb08843f2b80da87d91625e20f25de91b4d5d23
+Ctrl.hexsession_id = hexsession_id:7d153fda85bd3488962bdf03b8d0f26cf61f737173587ac6ee3d6f601a00f6474f5401370ef04720c620ea2b9668ab72cb6c40dc96057fc4537e7a6b0e79e9c5
+Ctrl.type = type:E
+Output = ac7899494cfcebbdaa8ee7c343a0a458228a0a5e59730c928e9c8775487e57c3a5f34fdb72c1b3b57cc35e0356e4b7c6a56368e74c68a017538a5b484886ec81
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010012c99d1e0542b3b71e287b1ea15e54a3197f95cfbf7f6a209ada41fce3a6faad9bc4d569b690223e5d668019c11204716bb96a858c36c853bd41b28c1505ddce9df22b31dbdaa014b07ec53a79cfeb5b540902669c7a283f3647c1a9f685b5027bfb18e827818a76c23fa6ad20760f228a4239a4d558240130b5cc389d2be41b806cafd24d1d425c26a61508c974d62aae6f6830459c79e7a9ff5610291661bf03528fbafe47cf4c2e51f4856749ef543eb7cd8f72e84a4075fa7df9ad12565e5b3810c6d6292ff878ee8499611688989f0a04f4dc7275e01c0444a0321f0a0327fbe8a55689307b1bfd66d5d27ade78df5c1dfcef8868ebbe339d7efdae1973
+Ctrl.hexxcghash = hexxcghash:7317f576ce95d5bed93d08c65eb814d037ecd42f09b2d514fad58335e8e8bec807b9cf74b9044f449581c792ebb08843f2b80da87d91625e20f25de91b4d5d23
+Ctrl.hexsession_id = hexsession_id:7d153fda85bd3488962bdf03b8d0f26cf61f737173587ac6ee3d6f601a00f6474f5401370ef04720c620ea2b9668ab72cb6c40dc96057fc4537e7a6b0e79e9c5
+Ctrl.type = type:F
+Output = d32d849b488594d0b8efce91604296393b2240121f2ed51fb7c0bb5b371c33775d184ffaf3028306bc8040b21887f6885e5916ae158ef74a3ba09a1f30654f1a
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100c6c401e7a417025fce8ca5d5e654de6cac8eb1bf24fffa1eefaba828f425b5df93323ad62565d9e74c0b45619c3e97a8e006a9b28a42e96e13ea2f3807319ac587850731f64c86a3a9acd4aaa04e8a586833faeb902f95177d27e89ce25307365b22b7bf444c8e72ef2bb0fce86fe326a90b787948085fd101f04a7311ed6cf65d5073a6a29c7d99fe9fa0b915fac1d9bb6b95143ca8936e10e6e319201112ba52823dbaad935972842361394999e5a67356076e9f0b528d62325181f80d66e9b3288ba7482458c737806f474867036a234201253a91a6246c8c2876d210d2579951dd12cbc153dcec403156739be9c7d291e4904f079a5a71c01b9a84481800
+Ctrl.hexxcghash = hexxcghash:b060195095692352bde81e90c1b648ec46d57476892e79489d42cb8e0da2027ec41fd2e62da8e8e2a9e1ebcb8eecfaadef75e6714008ed6a2cbdef6c321bbaaa
+Ctrl.hexsession_id = hexsession_id:5c910a53cafca6f8c0d97c4748f67aecd9a54c8ba96bf33327565f6f68ae0a2e7a62733a9051364ff9f68bdb416176522a0e5a2f28fe27a3f5ec402b3d99da13
+Ctrl.type = type:A
+Output = 5aa8ed531557a1dc934ed667029e062f
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100c6c401e7a417025fce8ca5d5e654de6cac8eb1bf24fffa1eefaba828f425b5df93323ad62565d9e74c0b45619c3e97a8e006a9b28a42e96e13ea2f3807319ac587850731f64c86a3a9acd4aaa04e8a586833faeb902f95177d27e89ce25307365b22b7bf444c8e72ef2bb0fce86fe326a90b787948085fd101f04a7311ed6cf65d5073a6a29c7d99fe9fa0b915fac1d9bb6b95143ca8936e10e6e319201112ba52823dbaad935972842361394999e5a67356076e9f0b528d62325181f80d66e9b3288ba7482458c737806f474867036a234201253a91a6246c8c2876d210d2579951dd12cbc153dcec403156739be9c7d291e4904f079a5a71c01b9a84481800
+Ctrl.hexxcghash = hexxcghash:b060195095692352bde81e90c1b648ec46d57476892e79489d42cb8e0da2027ec41fd2e62da8e8e2a9e1ebcb8eecfaadef75e6714008ed6a2cbdef6c321bbaaa
+Ctrl.hexsession_id = hexsession_id:5c910a53cafca6f8c0d97c4748f67aecd9a54c8ba96bf33327565f6f68ae0a2e7a62733a9051364ff9f68bdb416176522a0e5a2f28fe27a3f5ec402b3d99da13
+Ctrl.type = type:B
+Output = 11a810c69785949d5a0ef6eeff960fb4
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100c6c401e7a417025fce8ca5d5e654de6cac8eb1bf24fffa1eefaba828f425b5df93323ad62565d9e74c0b45619c3e97a8e006a9b28a42e96e13ea2f3807319ac587850731f64c86a3a9acd4aaa04e8a586833faeb902f95177d27e89ce25307365b22b7bf444c8e72ef2bb0fce86fe326a90b787948085fd101f04a7311ed6cf65d5073a6a29c7d99fe9fa0b915fac1d9bb6b95143ca8936e10e6e319201112ba52823dbaad935972842361394999e5a67356076e9f0b528d62325181f80d66e9b3288ba7482458c737806f474867036a234201253a91a6246c8c2876d210d2579951dd12cbc153dcec403156739be9c7d291e4904f079a5a71c01b9a84481800
+Ctrl.hexxcghash = hexxcghash:b060195095692352bde81e90c1b648ec46d57476892e79489d42cb8e0da2027ec41fd2e62da8e8e2a9e1ebcb8eecfaadef75e6714008ed6a2cbdef6c321bbaaa
+Ctrl.hexsession_id = hexsession_id:5c910a53cafca6f8c0d97c4748f67aecd9a54c8ba96bf33327565f6f68ae0a2e7a62733a9051364ff9f68bdb416176522a0e5a2f28fe27a3f5ec402b3d99da13
+Ctrl.type = type:C
+Output = 54e9402e4f85b08c271b2a9f15d56c75
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100c6c401e7a417025fce8ca5d5e654de6cac8eb1bf24fffa1eefaba828f425b5df93323ad62565d9e74c0b45619c3e97a8e006a9b28a42e96e13ea2f3807319ac587850731f64c86a3a9acd4aaa04e8a586833faeb902f95177d27e89ce25307365b22b7bf444c8e72ef2bb0fce86fe326a90b787948085fd101f04a7311ed6cf65d5073a6a29c7d99fe9fa0b915fac1d9bb6b95143ca8936e10e6e319201112ba52823dbaad935972842361394999e5a67356076e9f0b528d62325181f80d66e9b3288ba7482458c737806f474867036a234201253a91a6246c8c2876d210d2579951dd12cbc153dcec403156739be9c7d291e4904f079a5a71c01b9a84481800
+Ctrl.hexxcghash = hexxcghash:b060195095692352bde81e90c1b648ec46d57476892e79489d42cb8e0da2027ec41fd2e62da8e8e2a9e1ebcb8eecfaadef75e6714008ed6a2cbdef6c321bbaaa
+Ctrl.hexsession_id = hexsession_id:5c910a53cafca6f8c0d97c4748f67aecd9a54c8ba96bf33327565f6f68ae0a2e7a62733a9051364ff9f68bdb416176522a0e5a2f28fe27a3f5ec402b3d99da13
+Ctrl.type = type:D
+Output = 838209e0ebe7626cf6482f25c7774bfd
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100c6c401e7a417025fce8ca5d5e654de6cac8eb1bf24fffa1eefaba828f425b5df93323ad62565d9e74c0b45619c3e97a8e006a9b28a42e96e13ea2f3807319ac587850731f64c86a3a9acd4aaa04e8a586833faeb902f95177d27e89ce25307365b22b7bf444c8e72ef2bb0fce86fe326a90b787948085fd101f04a7311ed6cf65d5073a6a29c7d99fe9fa0b915fac1d9bb6b95143ca8936e10e6e319201112ba52823dbaad935972842361394999e5a67356076e9f0b528d62325181f80d66e9b3288ba7482458c737806f474867036a234201253a91a6246c8c2876d210d2579951dd12cbc153dcec403156739be9c7d291e4904f079a5a71c01b9a84481800
+Ctrl.hexxcghash = hexxcghash:b060195095692352bde81e90c1b648ec46d57476892e79489d42cb8e0da2027ec41fd2e62da8e8e2a9e1ebcb8eecfaadef75e6714008ed6a2cbdef6c321bbaaa
+Ctrl.hexsession_id = hexsession_id:5c910a53cafca6f8c0d97c4748f67aecd9a54c8ba96bf33327565f6f68ae0a2e7a62733a9051364ff9f68bdb416176522a0e5a2f28fe27a3f5ec402b3d99da13
+Ctrl.type = type:E
+Output = bc62048ddb762ac50336ae0e91a402cc78e73472fe180756a4686299967d2904318b8ad1b8dc622edd75e9ff0e74f7fcb8a1f8acb86e2567a5167084c648c7ef
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100c6c401e7a417025fce8ca5d5e654de6cac8eb1bf24fffa1eefaba828f425b5df93323ad62565d9e74c0b45619c3e97a8e006a9b28a42e96e13ea2f3807319ac587850731f64c86a3a9acd4aaa04e8a586833faeb902f95177d27e89ce25307365b22b7bf444c8e72ef2bb0fce86fe326a90b787948085fd101f04a7311ed6cf65d5073a6a29c7d99fe9fa0b915fac1d9bb6b95143ca8936e10e6e319201112ba52823dbaad935972842361394999e5a67356076e9f0b528d62325181f80d66e9b3288ba7482458c737806f474867036a234201253a91a6246c8c2876d210d2579951dd12cbc153dcec403156739be9c7d291e4904f079a5a71c01b9a84481800
+Ctrl.hexxcghash = hexxcghash:b060195095692352bde81e90c1b648ec46d57476892e79489d42cb8e0da2027ec41fd2e62da8e8e2a9e1ebcb8eecfaadef75e6714008ed6a2cbdef6c321bbaaa
+Ctrl.hexsession_id = hexsession_id:5c910a53cafca6f8c0d97c4748f67aecd9a54c8ba96bf33327565f6f68ae0a2e7a62733a9051364ff9f68bdb416176522a0e5a2f28fe27a3f5ec402b3d99da13
+Ctrl.type = type:F
+Output = 4e9644a01a3fe6c3f4f5aceddb00e2584e277354aee6392a1a5aef05024d37fcf25ff46fdd8fe52e7d1dd9a96e77328aadf44b8fc92ac22a14f63d64ad0db621
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100a82ae4062baef678d20dd9cf1704cdc69e9e78eea5faa435e4dffec06976ff73bd1e2ebd206658a26fb85a0911e2034eede31e7df2d7b87aa9700cf301b6b38502ba4db2b9723505455a7da0c6e0cf374b063921179d1bc69508f660bbb26d05ab16a2325716dbd0a733809cac36660d9a73ff0f61e09f55d1ff0652474130be7fcd2d37ebd1203960d788a1307fae48ec4e1042ab85f037a01bfd17f15725ee929d6e6246bbda00fe7105461ee873b0190c2f44692845e464949f909df46309a8eb72037278f792c87249897a0564d290bec1e09b2c9d3ad3011710fc4dcfabfa435611794dc7d1507b657229a2aab65ce2e789305d5d24ed955e89d8eb4f7e
+Ctrl.hexxcghash = hexxcghash:a6ef8e3102b16ce51b2a2fe17e8dc711a964c195ca4d597aabecce595187344ccb2ea37dc4cac0a77a47e7ea1b9055b1c9948e6e09793a9121f120b3bd07c5f2
+Ctrl.hexsession_id = hexsession_id:cc85cf95e29a5991306b21c1738de9a6612b8cb09f12b1738a4873c29f971e8d204aeb98bb7a7502cdab952eaaa6ec1e3a9655db3e5217afbff63ad588fbbf85
+Ctrl.type = type:A
+Output = 77cb432c67bf0ae658aa4e34376d01b5
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100a82ae4062baef678d20dd9cf1704cdc69e9e78eea5faa435e4dffec06976ff73bd1e2ebd206658a26fb85a0911e2034eede31e7df2d7b87aa9700cf301b6b38502ba4db2b9723505455a7da0c6e0cf374b063921179d1bc69508f660bbb26d05ab16a2325716dbd0a733809cac36660d9a73ff0f61e09f55d1ff0652474130be7fcd2d37ebd1203960d788a1307fae48ec4e1042ab85f037a01bfd17f15725ee929d6e6246bbda00fe7105461ee873b0190c2f44692845e464949f909df46309a8eb72037278f792c87249897a0564d290bec1e09b2c9d3ad3011710fc4dcfabfa435611794dc7d1507b657229a2aab65ce2e789305d5d24ed955e89d8eb4f7e
+Ctrl.hexxcghash = hexxcghash:a6ef8e3102b16ce51b2a2fe17e8dc711a964c195ca4d597aabecce595187344ccb2ea37dc4cac0a77a47e7ea1b9055b1c9948e6e09793a9121f120b3bd07c5f2
+Ctrl.hexsession_id = hexsession_id:cc85cf95e29a5991306b21c1738de9a6612b8cb09f12b1738a4873c29f971e8d204aeb98bb7a7502cdab952eaaa6ec1e3a9655db3e5217afbff63ad588fbbf85
+Ctrl.type = type:B
+Output = f55c74d112746001d8908edd347d7e69
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100a82ae4062baef678d20dd9cf1704cdc69e9e78eea5faa435e4dffec06976ff73bd1e2ebd206658a26fb85a0911e2034eede31e7df2d7b87aa9700cf301b6b38502ba4db2b9723505455a7da0c6e0cf374b063921179d1bc69508f660bbb26d05ab16a2325716dbd0a733809cac36660d9a73ff0f61e09f55d1ff0652474130be7fcd2d37ebd1203960d788a1307fae48ec4e1042ab85f037a01bfd17f15725ee929d6e6246bbda00fe7105461ee873b0190c2f44692845e464949f909df46309a8eb72037278f792c87249897a0564d290bec1e09b2c9d3ad3011710fc4dcfabfa435611794dc7d1507b657229a2aab65ce2e789305d5d24ed955e89d8eb4f7e
+Ctrl.hexxcghash = hexxcghash:a6ef8e3102b16ce51b2a2fe17e8dc711a964c195ca4d597aabecce595187344ccb2ea37dc4cac0a77a47e7ea1b9055b1c9948e6e09793a9121f120b3bd07c5f2
+Ctrl.hexsession_id = hexsession_id:cc85cf95e29a5991306b21c1738de9a6612b8cb09f12b1738a4873c29f971e8d204aeb98bb7a7502cdab952eaaa6ec1e3a9655db3e5217afbff63ad588fbbf85
+Ctrl.type = type:C
+Output = 34a48ab90890b385198ea6bf8c50c3f6
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100a82ae4062baef678d20dd9cf1704cdc69e9e78eea5faa435e4dffec06976ff73bd1e2ebd206658a26fb85a0911e2034eede31e7df2d7b87aa9700cf301b6b38502ba4db2b9723505455a7da0c6e0cf374b063921179d1bc69508f660bbb26d05ab16a2325716dbd0a733809cac36660d9a73ff0f61e09f55d1ff0652474130be7fcd2d37ebd1203960d788a1307fae48ec4e1042ab85f037a01bfd17f15725ee929d6e6246bbda00fe7105461ee873b0190c2f44692845e464949f909df46309a8eb72037278f792c87249897a0564d290bec1e09b2c9d3ad3011710fc4dcfabfa435611794dc7d1507b657229a2aab65ce2e789305d5d24ed955e89d8eb4f7e
+Ctrl.hexxcghash = hexxcghash:a6ef8e3102b16ce51b2a2fe17e8dc711a964c195ca4d597aabecce595187344ccb2ea37dc4cac0a77a47e7ea1b9055b1c9948e6e09793a9121f120b3bd07c5f2
+Ctrl.hexsession_id = hexsession_id:cc85cf95e29a5991306b21c1738de9a6612b8cb09f12b1738a4873c29f971e8d204aeb98bb7a7502cdab952eaaa6ec1e3a9655db3e5217afbff63ad588fbbf85
+Ctrl.type = type:D
+Output = f2b6046d3439c50a9000a63909146abc
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100a82ae4062baef678d20dd9cf1704cdc69e9e78eea5faa435e4dffec06976ff73bd1e2ebd206658a26fb85a0911e2034eede31e7df2d7b87aa9700cf301b6b38502ba4db2b9723505455a7da0c6e0cf374b063921179d1bc69508f660bbb26d05ab16a2325716dbd0a733809cac36660d9a73ff0f61e09f55d1ff0652474130be7fcd2d37ebd1203960d788a1307fae48ec4e1042ab85f037a01bfd17f15725ee929d6e6246bbda00fe7105461ee873b0190c2f44692845e464949f909df46309a8eb72037278f792c87249897a0564d290bec1e09b2c9d3ad3011710fc4dcfabfa435611794dc7d1507b657229a2aab65ce2e789305d5d24ed955e89d8eb4f7e
+Ctrl.hexxcghash = hexxcghash:a6ef8e3102b16ce51b2a2fe17e8dc711a964c195ca4d597aabecce595187344ccb2ea37dc4cac0a77a47e7ea1b9055b1c9948e6e09793a9121f120b3bd07c5f2
+Ctrl.hexsession_id = hexsession_id:cc85cf95e29a5991306b21c1738de9a6612b8cb09f12b1738a4873c29f971e8d204aeb98bb7a7502cdab952eaaa6ec1e3a9655db3e5217afbff63ad588fbbf85
+Ctrl.type = type:E
+Output = 70357486ca57c93418c6705b731b054bc41be03289c25a5ed29a937732807ae10a3604486c53d1f2431411808d87bfbaa6b25971fa2e4ec3719b5d2622aed2ff
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexkey = hexkey:0000010100a82ae4062baef678d20dd9cf1704cdc69e9e78eea5faa435e4dffec06976ff73bd1e2ebd206658a26fb85a0911e2034eede31e7df2d7b87aa9700cf301b6b38502ba4db2b9723505455a7da0c6e0cf374b063921179d1bc69508f660bbb26d05ab16a2325716dbd0a733809cac36660d9a73ff0f61e09f55d1ff0652474130be7fcd2d37ebd1203960d788a1307fae48ec4e1042ab85f037a01bfd17f15725ee929d6e6246bbda00fe7105461ee873b0190c2f44692845e464949f909df46309a8eb72037278f792c87249897a0564d290bec1e09b2c9d3ad3011710fc4dcfabfa435611794dc7d1507b657229a2aab65ce2e789305d5d24ed955e89d8eb4f7e
+Ctrl.hexxcghash = hexxcghash:a6ef8e3102b16ce51b2a2fe17e8dc711a964c195ca4d597aabecce595187344ccb2ea37dc4cac0a77a47e7ea1b9055b1c9948e6e09793a9121f120b3bd07c5f2
+Ctrl.hexsession_id = hexsession_id:cc85cf95e29a5991306b21c1738de9a6612b8cb09f12b1738a4873c29f971e8d204aeb98bb7a7502cdab952eaaa6ec1e3a9655db3e5217afbff63ad588fbbf85
+Ctrl.type = type:F
+Output = 4e6428f7a87455bdef6026cdf68a2f6d93d6cda5145d6bca60ee4eb2d6248b399f6568c65ec92cee8d9b0c7fd83053c91c5be72bf96b5904080624a348243899
+
+Title = SSHKDF test error conditions
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:A
+Output = FF
+Result = KDF_DERIVE_ERROR
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:A
+Output = FF
+Result = KDF_DERIVE_ERROR
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:A
+Output = FF
+Result = KDF_DERIVE_ERROR
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Output = FF
+Result = KDF_DERIVE_ERROR
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:X
+Output = FF
+Result = KDF_CTRL_ERROR
+
+KDF = SSHKDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:0000008055bae931c07fd824bf10add1902b6fbc7c665347383498a686929ff5a25f8e40cb6645ea814fb1a5e0a11f852f86255641e5ed986e83a78bc8269480eac0b0dfd770cab92e7a28dd87ff452466d6ae867cead63b366b1c286e6c4811a9f14c27aea14c5171d49b78c06e3735d36e6a3be321dd5fc82308f34ee1cb17fba94a59
+Ctrl.hexxcghash = hexxcghash:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.hexsession_id = hexsession_id:a4ebd45934f56792b5112dcd75a1075fdc889245
+Ctrl.type = type:A
+Output = FF
+Result = KDF_MISMATCH
diff --git a/test/recipes/30-test_evp_data/evpkdf_tls11_prf.txt b/test/recipes/30-test_evp_data/evpkdf_tls11_prf.txt
new file mode 100644
index 000000000000..6431f53b7ad7
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_tls11_prf.txt
@@ -0,0 +1,37 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = TLS1 PRF tests (from NIST test vectors)
+
+KDF = TLS1-PRF
+Ctrl.digest = digest:MD5-SHA1
+Ctrl.Secret = hexsecret:bded7fa5c1699c010be23dd06ada3a48349f21e5f86263d512c0c5cc379f0e780ec55d9844b2f1db02a96453513568d0
+Ctrl.label = seed:master secret
+Ctrl.client_random = hexseed:e5acaf549cd25c22d964c0d930fa4b5261d2507fad84c33715b7b9a864020693
+Ctrl.server_random = hexseed:135e4d557fdf3aa6406d82975d5c606a9734c9334b42136e96990fbd5358cdb2
+Output = 2f6962dfbc744c4b2138bb6b3d33054c5ecc14f24851d9896395a44ab3964efc2090c5bf51a0891209f46c1e1e998f62
+
+KDF = TLS1-PRF
+Ctrl.digest = digest:MD5-SHA1
+Ctrl.Secret = hexsecret:2f6962dfbc744c4b2138bb6b3d33054c5ecc14f24851d9896395a44ab3964efc2090c5bf51a0891209f46c1e1e998f62
+Ctrl.label = seed:key expansion
+Ctrl.server_random = hexseed:67267e650eb32444119d222a368c191af3082888dc35afe8368e638c828874be
+Ctrl.client_random = hexseed:d58a7b1cd4fedaa232159df652ce188f9d997e061b9bf48e83b62990440931f6
+Output = 3088825988e77fce68d19f756e18e43eb7fe672433504feaf99b3c503d9091b164f166db301d70c9fc0870b4a94563907bee1a61fb786cb717576890bcc51cb9ead97e01d0a2fea99c953377b195205ff07b369589178796edc963fd80fdbe518a2fc1c35c18ae8d
+
+# Missing secret.
+KDF = TLS1-PRF
+Ctrl.digest = digest:MD5-SHA1
+Ctrl.Seed = hexseed:02
+Output = 03
+Result = KDF_DERIVE_ERROR
diff --git a/test/recipes/30-test_evp_data/evpkdf_tls12_prf.txt b/test/recipes/30-test_evp_data/evpkdf_tls12_prf.txt
new file mode 100644
index 000000000000..3ff4b536e44a
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_tls12_prf.txt
@@ -0,0 +1,46 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = TLS12 PRF tests (from NIST test vectors)
+
+KDF = TLS1-PRF
+Ctrl.digest = digest:SHA256
+Ctrl.Secret = hexsecret:f8938ecc9edebc5030c0c6a441e213cd24e6f770a50dda07876f8d55da062bcadb386b411fd4fe4313a604fce6c17fbc
+Ctrl.label = seed:master secret
+Ctrl.client_random = hexseed:36c129d01a3200894b9179faac589d9835d58775f9b5ea3587cb8fd0364cae8c
+Ctrl.server_random = hexseed:f6c9575ed7ddd73e1f7d16eca115415812a43c2b747daaaae043abfb50053fce
+Output = 202c88c00f84a17a20027079604787461176455539e705be730890602c289a5001e34eeb3a043e5d52a65e66125188bf
+
+KDF = TLS1-PRF
+Ctrl.digest = digest:SHA256
+Ctrl.Secret = hexsecret:202c88c00f84a17a20027079604787461176455539e705be730890602c289a5001e34eeb3a043e5d52a65e66125188bf
+Ctrl.label = seed:key expansion
+Ctrl.server_random = hexseed:ae6c806f8ad4d80784549dff28a4b58fd837681a51d928c3e30ee5ff14f39868
+Ctrl.client_random = hexseed:62e1fd91f23f558a605f28478c58cf72637b89784d959df7e946d3f07bd1b616
+Output = d06139889fffac1e3a71865f504aa5d0d2a2e89506c6f2279b670c3e1b74f531016a2530c51a3a0f7e1d6590d0f0566b2f387f8d11fd4f731cdd572d2eae927f6f2f81410b25e6960be68985add6c38445ad9f8c64bf8068bf9a6679485d966f1ad6f68b43495b10a683755ea2b858d70ccac7ec8b053c6bd41ca299d4e51928
+
+# As above but use long name for KDF
+KDF = tls1-prf
+Ctrl.digest = digest:SHA256
+Ctrl.Secret = hexsecret:202c88c00f84a17a20027079604787461176455539e705be730890602c289a5001e34eeb3a043e5d52a65e66125188bf
+Ctrl.label = seed:key expansion
+Ctrl.server_random = hexseed:ae6c806f8ad4d80784549dff28a4b58fd837681a51d928c3e30ee5ff14f39868
+Ctrl.client_random = hexseed:62e1fd91f23f558a605f28478c58cf72637b89784d959df7e946d3f07bd1b616
+Output = d06139889fffac1e3a71865f504aa5d0d2a2e89506c6f2279b670c3e1b74f531016a2530c51a3a0f7e1d6590d0f0566b2f387f8d11fd4f731cdd572d2eae927f6f2f81410b25e6960be68985add6c38445ad9f8c64bf8068bf9a6679485d966f1ad6f68b43495b10a683755ea2b858d70ccac7ec8b053c6bd41ca299d4e51928
+
+# Missing digest.
+KDF = TLS1-PRF
+Ctrl.Secret = hexsecret:01
+Ctrl.Seed = hexseed:02
+Output = 03
+Result = KDF_DERIVE_ERROR
diff --git a/test/recipes/30-test_evp_data/evpkdf_tls13_kdf.txt b/test/recipes/30-test_evp_data/evpkdf_tls13_kdf.txt
new file mode 100644
index 000000000000..9ad8b9fbd2df
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_tls13_kdf.txt
@@ -0,0 +1,4937 @@
+#
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = TLS 1.3 KDF tests (from ACVP test vectors)
+
+# Each test suite simulates the steps in a TLS 1.3 session
+# The output of each step is used as an input for the next. These were not
+# generally included in the ACVP data and have been generated. The end to end
+# correctness indicates that the intermediate values are okay.
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:f8af6aea2d397baf2948a25b2834200692cff17eee9165e4e27babee9edefd05
+Output = 153b6394a9c03cf3f5accc6e455a7693281138a1bcfa3803c26735dd1194d216
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:153b6394a9c03cf3f5accc6e455a7693281138a1bcfa3803c26735dd1194d216
+Ctrl.data = hexdata:7c92f68bd5bf3638ea338a6494722e1b44127e1b7e8aad535f2322a644ff22b3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = c80583a90e995c489600492a5da642e6b1f679ba674828792df087b939636171
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:153b6394a9c03cf3f5accc6e455a7693281138a1bcfa3803c26735dd1194d216
+Ctrl.data = hexdata:7c92f68bd5bf3638ea338a6494722e1b44127e1b7e8aad535f2322a644ff22b3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 1fe336ab43b4a69b11ebc64c8343ed21a9c7f6724702d9d63970e8ff72a4bde7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8e27fad32236cb11bb497eb878d636c3f1599f5ffdfae784cbf73e74746769d4
+Ctrl.salt = hexsalt:153b6394a9c03cf3f5accc6e455a7693281138a1bcfa3803c26735dd1194d216
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = cbb0740fd37e5eff32b76cf88511eb83fc9694da4130ca48de754c7f80f561bd
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:cbb0740fd37e5eff32b76cf88511eb83fc9694da4130ca48de754c7f80f561bd
+Ctrl.data = hexdata:78d80b86fb9b089fb73375e51ae5bcfd742df4cadbd84dea0aaa0ac9d07ba6dc
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = c2451ee08fd221331f3dabada534393ed1fc8f5983afa251c1d004ec94e823a2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:cbb0740fd37e5eff32b76cf88511eb83fc9694da4130ca48de754c7f80f561bd
+Ctrl.data = hexdata:78d80b86fb9b089fb73375e51ae5bcfd742df4cadbd84dea0aaa0ac9d07ba6dc
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 40eefbf66cb79c41c9ee1bf0be7f41696da165e7e69628ca8e342fee51827abd
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:cbb0740fd37e5eff32b76cf88511eb83fc9694da4130ca48de754c7f80f561bd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 9bdaae0c714cdbd47dd27dd7e37a1b4e5cf82fcaead2389cd71e6de12470ee17
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9bdaae0c714cdbd47dd27dd7e37a1b4e5cf82fcaead2389cd71e6de12470ee17
+Ctrl.data = hexdata:fb3e78c3924a01fe4bf912bff8ddb120848ddf3e4b3cdd2cd661abbeff16a96e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = b162c65cdc0f9425aa7cd8fb30a821c8c8f0e8f8f9eb42209d10d784dafadcb5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9bdaae0c714cdbd47dd27dd7e37a1b4e5cf82fcaead2389cd71e6de12470ee17
+Ctrl.data = hexdata:fb3e78c3924a01fe4bf912bff8ddb120848ddf3e4b3cdd2cd661abbeff16a96e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 6fe71fd9a81dffb3fecedd80c7a4801804116c79bc37b3605f54bc01a9cbed99
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9bdaae0c714cdbd47dd27dd7e37a1b4e5cf82fcaead2389cd71e6de12470ee17
+Ctrl.data = hexdata:fb3e78c3924a01fe4bf912bff8ddb120848ddf3e4b3cdd2cd661abbeff16a96e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = eb1069417c771402a32b4797099adc449fd2be22ac47fb771ccd319e1a11ce55
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9bdaae0c714cdbd47dd27dd7e37a1b4e5cf82fcaead2389cd71e6de12470ee17
+Ctrl.data = hexdata:db603b863e82a12147bd81a8e715d3273efe641d467436309e19ae0254461a35
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = b4face4931df0e3380830805af22055bf29b030988a9e278f7d04f2b00f323e8
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Output = 33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:ad5c61780c37f5dbe1666e846ffcbfe0694e6d7ee87fc855850cd961420a0da2
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 265aa1591dd7b8046d95580c5dec47f4f175cd3121afc066ab65b14c2ff2eeec
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:ad5c61780c37f5dbe1666e846ffcbfe0694e6d7ee87fc855850cd961420a0da2
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = dfeadee3e4cd8d260ae389043e5f806ea55ee332270487289abaf3933ec219ed
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8ba75a8cee15fe15599cec2d6590313ca4cf2efd7aed87a85ed4cbcbdc5edf9bb1
+Ctrl.salt = hexsalt:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 7a6d31fe71da649e8e8168a42c5ab12c668f39499df77bc94405853530b85702
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7a6d31fe71da649e8e8168a42c5ab12c668f39499df77bc94405853530b85702
+Ctrl.data = hexdata:fc732c631dec5b82edae0288d698f0ab1823128d73ee370864cc0edc69b1dd15
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = f1f7241a9c150b2a9e1e20f00ba42c038688468167201cae15a51f83ddd8520b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7a6d31fe71da649e8e8168a42c5ab12c668f39499df77bc94405853530b85702
+Ctrl.data = hexdata:fc732c631dec5b82edae0288d698f0ab1823128d73ee370864cc0edc69b1dd15
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 38f88680f83f4cbc7afc2e58c7161076da181185009074b5f576c61643bc2e55
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:7a6d31fe71da649e8e8168a42c5ab12c668f39499df77bc94405853530b85702
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 160f1552154d4be73bcdbcea0dca9594c86b319cf3b052e1e8b080f0b0f128ce
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:160f1552154d4be73bcdbcea0dca9594c86b319cf3b052e1e8b080f0b0f128ce
+Ctrl.data = hexdata:127da44d7325927afc7f81b2108b006dd843f05011f4ddb6408c82a0a11da070
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = e8634a48b7162c0c0d55afea28af35f06fcbbd268328bd6a9034b6fcddc48bb2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:160f1552154d4be73bcdbcea0dca9594c86b319cf3b052e1e8b080f0b0f128ce
+Ctrl.data = hexdata:127da44d7325927afc7f81b2108b006dd843f05011f4ddb6408c82a0a11da070
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 1f5f7e35b4495e94f2b847129e246d98cc67d511729ed9ce60fa3c8176a7c41d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:160f1552154d4be73bcdbcea0dca9594c86b319cf3b052e1e8b080f0b0f128ce
+Ctrl.data = hexdata:127da44d7325927afc7f81b2108b006dd843f05011f4ddb6408c82a0a11da070
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = ff76b85accc260ce264686e011c9ab08e955cd01943d8c03989ac060ea4ad12e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:160f1552154d4be73bcdbcea0dca9594c86b319cf3b052e1e8b080f0b0f128ce
+Ctrl.data = hexdata:26872f541995715cbf7fcdd26544cfeff9fdff638578d166851127fb8a91ade7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 9d0a1aa3ed67e5bd066e61f15fdfd7a552bea57aed956af3f8b49abc2a9480b7
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Output = 33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:ab9a6fa58d1efd4d862d33e5fa1b610ef8af8b1c66d12f7871598e39b5540dcd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 22c60538c233cbabc8d14ca55fa7b264f4bf1eaa68ca7460be6f965edc2706bd
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:ab9a6fa58d1efd4d862d33e5fa1b610ef8af8b1c66d12f7871598e39b5540dcd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 04c9e7d5e5709d0d5e98cce5b8d995973427a2adb1e3d092c5418e520959d24c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:079d4c92c73f842771e76173ffc79976499728b81e75ba77255d3f97a9b075b515
+Ctrl.salt = hexsalt:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 18420b91716670f5330e9281ff0816663cb16de070ce6d0378fddbbf2e3d2284
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:18420b91716670f5330e9281ff0816663cb16de070ce6d0378fddbbf2e3d2284
+Ctrl.data = hexdata:eb62d1f34a8aeb2a391e3f6d1e2f9f66e3053530551a41e94ba8f38068f273af
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 2f0e7afb326b06b482c82e5a775d65656ae653cd4f9c5527f9fea54c4872331d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:18420b91716670f5330e9281ff0816663cb16de070ce6d0378fddbbf2e3d2284
+Ctrl.data = hexdata:eb62d1f34a8aeb2a391e3f6d1e2f9f66e3053530551a41e94ba8f38068f273af
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 4c0d8dff2bb81366bde630eb466479765acd151bd14da1ce5a313292ad2e7f3f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:18420b91716670f5330e9281ff0816663cb16de070ce6d0378fddbbf2e3d2284
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 8ead73c6e289e2f8a0615a95301d80a11801b6e7ae25d59dd13e6fe1b9b3d058
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8ead73c6e289e2f8a0615a95301d80a11801b6e7ae25d59dd13e6fe1b9b3d058
+Ctrl.data = hexdata:ad53aca17f9e3c0fdd64cea888d106584b24e673a834b81f84acadcb5e93addb
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 21ecbb49c1013e3fb86e21600b2643bb22db2a5747d1d580b088ec545985750c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8ead73c6e289e2f8a0615a95301d80a11801b6e7ae25d59dd13e6fe1b9b3d058
+Ctrl.data = hexdata:ad53aca17f9e3c0fdd64cea888d106584b24e673a834b81f84acadcb5e93addb
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 692ce960da75200ba64c0898172c383eba3e910f943e2dc6fb0ca5ea860dd128
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8ead73c6e289e2f8a0615a95301d80a11801b6e7ae25d59dd13e6fe1b9b3d058
+Ctrl.data = hexdata:ad53aca17f9e3c0fdd64cea888d106584b24e673a834b81f84acadcb5e93addb
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 414267573db54653b960060e78f24efbbe0e6eb3bba77f8a1330c52ce748cea9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8ead73c6e289e2f8a0615a95301d80a11801b6e7ae25d59dd13e6fe1b9b3d058
+Ctrl.data = hexdata:2cf39c1d072fe6ca2e9385b5deb93f6706ca97c4cecd7141968ae9f92d1b331d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 71afefcc45ef6cf641320fd33c0711fce1b177f2de278a3009a423c013eb156e
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Output = 33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:0ba5fc85501734dc78cea66aacc3b2fa36be938b34b10037e842dc6ff493560d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = bcb5dab7001fb36b9877b3cc53c92157de4a4a304be8ce1ae8a49b71b5cf5384
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:0ba5fc85501734dc78cea66aacc3b2fa36be938b34b10037e842dc6ff493560d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = efc512b05a887d11ed829bdf90162ace73456c83a6543d74ef95f98022b6162c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:51b7a0a74de27eed1bc77a0691850387f4bfbaafef1033780d027fb0a00d1ba957
+Ctrl.salt = hexsalt:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = bb6ebdf3a3790704ba46b29277e0f699cc8d4eb0320c922c4537e3d2897dda7b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bb6ebdf3a3790704ba46b29277e0f699cc8d4eb0320c922c4537e3d2897dda7b
+Ctrl.data = hexdata:9d3b6a05267ca141c132ae2685bba0b8eb27d8b4349af822607bf4c215070d2e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 7c318f397dd56ec69c7ab5eafde196c06aefccaf24fb2487e045b55f8d5865dc
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bb6ebdf3a3790704ba46b29277e0f699cc8d4eb0320c922c4537e3d2897dda7b
+Ctrl.data = hexdata:9d3b6a05267ca141c132ae2685bba0b8eb27d8b4349af822607bf4c215070d2e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = f9b5e2e18869a920128dad1c836d57deacaa85cfec21012823a52182cb5484fc
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:bb6ebdf3a3790704ba46b29277e0f699cc8d4eb0320c922c4537e3d2897dda7b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 71e002695a3a5e8899ef4a705462505eb0ec33f9e3214a668d739eeca833e1ba
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:71e002695a3a5e8899ef4a705462505eb0ec33f9e3214a668d739eeca833e1ba
+Ctrl.data = hexdata:cdb5539c16d3b95ca0c30abd03d11f78175f63768a79c7dd2a5f4ee72d93f7a8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 7b48562a81323355b3c090d59b8adbb6aaf17b8489448d3d20bee397523ef0ac
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:71e002695a3a5e8899ef4a705462505eb0ec33f9e3214a668d739eeca833e1ba
+Ctrl.data = hexdata:cdb5539c16d3b95ca0c30abd03d11f78175f63768a79c7dd2a5f4ee72d93f7a8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 19c59876c3f79fad0f66e3038ef2126ff1f0167a15d8fe10901671fbdb7aca9e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:71e002695a3a5e8899ef4a705462505eb0ec33f9e3214a668d739eeca833e1ba
+Ctrl.data = hexdata:cdb5539c16d3b95ca0c30abd03d11f78175f63768a79c7dd2a5f4ee72d93f7a8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = a41b62871f071de5536da378f4b88071dd9839b367065e84da932e45a6b155e6
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:71e002695a3a5e8899ef4a705462505eb0ec33f9e3214a668d739eeca833e1ba
+Ctrl.data = hexdata:40248b70ecbe954e7b825281e052f5d1f784678f02c1574f91034c09fa5b4f91
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = c27da667ff071ee5907d272d0f26cb204af7df95895670a96c8441bcc9433c6c
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Output = 33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:1db79ad32111ded07970f5a4958d60deaaea16c9364d72fd97f1b9d2eb4389f0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 9988ba03ffa2aa8f8332efc47051278dd4831bb2b2231010b49354f23a14fcc2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:1db79ad32111ded07970f5a4958d60deaaea16c9364d72fd97f1b9d2eb4389f0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 332e88ff7e3b1b3e592a89b3151bb79a418f5db6dff522a73ff53bc7e237777e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:6d42939374a8adf6d3d96bf450eece38f2d0268814262f9780acf5b6769582b0aa
+Ctrl.salt = hexsalt:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = ab43c87709e09c9acbdaad583da6fe1e8e6756a43fddf59382113981a33621b1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:ab43c87709e09c9acbdaad583da6fe1e8e6756a43fddf59382113981a33621b1
+Ctrl.data = hexdata:782580319c405ffabb7c272f730a4d0c06da94923f49fc8194e86c91b339cd0f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 60822aa502f3065ec3972e5dba90f14b254544f99d3274cd67fa3565e5e78f11
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:ab43c87709e09c9acbdaad583da6fe1e8e6756a43fddf59382113981a33621b1
+Ctrl.data = hexdata:782580319c405ffabb7c272f730a4d0c06da94923f49fc8194e86c91b339cd0f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 4534439181f03ed7c34471c0b2cd59a064402a6cb8092f5e30dfe3db4ce29c65
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:ab43c87709e09c9acbdaad583da6fe1e8e6756a43fddf59382113981a33621b1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = bdc1b213a768dc7302f236094affb53ee401f6420f6f9730f9e5638600119c96
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bdc1b213a768dc7302f236094affb53ee401f6420f6f9730f9e5638600119c96
+Ctrl.data = hexdata:87815c0c6533c20ce2a749d15be7f5e5efcb01a9d66ff0c1eaf9317a35f78c0a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 1fa11fda9fc1840f2082a9a81b9212bca08915c8402f5d9d3e6403df529a6872
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bdc1b213a768dc7302f236094affb53ee401f6420f6f9730f9e5638600119c96
+Ctrl.data = hexdata:87815c0c6533c20ce2a749d15be7f5e5efcb01a9d66ff0c1eaf9317a35f78c0a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 5d3b814a5ea0b320dc2d6b0d50f766013073e92203184ea6f990f3a23ba1b936
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bdc1b213a768dc7302f236094affb53ee401f6420f6f9730f9e5638600119c96
+Ctrl.data = hexdata:87815c0c6533c20ce2a749d15be7f5e5efcb01a9d66ff0c1eaf9317a35f78c0a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 12c9b8c8b42467ccfb6161cafda1027212c59782891fc9f4b43e68f66a6ff0be
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bdc1b213a768dc7302f236094affb53ee401f6420f6f9730f9e5638600119c96
+Ctrl.data = hexdata:7d3160a347ba24ed246af7287f60a64cebe1678aa3055958693c1189f9ae45b8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = b39060999fb0e2319294654c6ddf17c6375e25d5e44da3d00474aba66384f961
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Output = 33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:491d9ca9cd0d5c8ddef62cd87b9ee6e934ec66191b22667447544355ae5903d5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 659f7cc8a36d4efcea9bb1dbe7d0723b968a7a78eb80d18966afb24fabdb86a2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.data = hexdata:491d9ca9cd0d5c8ddef62cd87b9ee6e934ec66191b22667447544355ae5903d5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 292bcf6dd3c94e79d2ac4bd4de158f0bedb7416591e87a911ea4034ba6da7a7c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8bed9e790b96b98846068b237082f9c0c0e53af3bea98bdda5f1a079448775ab6d
+Ctrl.salt = hexsalt:33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 9aed3d26bbdc6406c1262928224052a9e9e68f64dbc3a159f41b6644dccf81d0
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9aed3d26bbdc6406c1262928224052a9e9e68f64dbc3a159f41b6644dccf81d0
+Ctrl.data = hexdata:b969708ab3a1b1b1b87f228a49d37df58a367064a6bccec689a475dc5edda812
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 7b4d547ba11886f439c6d53b1e65b09aff3f1fea4fb8628962a546013fd53bbc
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9aed3d26bbdc6406c1262928224052a9e9e68f64dbc3a159f41b6644dccf81d0
+Ctrl.data = hexdata:b969708ab3a1b1b1b87f228a49d37df58a367064a6bccec689a475dc5edda812
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = cdb6b0be56d99c2a9a9c201a4b62b27df40877b228ba085fd0d06a5489545595
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:9aed3d26bbdc6406c1262928224052a9e9e68f64dbc3a159f41b6644dccf81d0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = c54b82100787f03b666cbb04d34bd894911346cc6c39266971a5de5f99fdb7bb
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c54b82100787f03b666cbb04d34bd894911346cc6c39266971a5de5f99fdb7bb
+Ctrl.data = hexdata:129524eaf21476767f2f14c3ec038f7fadb38f0c35645391b41b218729a1a9da
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = f2a8f833af1dc5db36b842769955d97db05d3bd5014ca9c9fa301e8ac6214ebe
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c54b82100787f03b666cbb04d34bd894911346cc6c39266971a5de5f99fdb7bb
+Ctrl.data = hexdata:129524eaf21476767f2f14c3ec038f7fadb38f0c35645391b41b218729a1a9da
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 1ac34b3063a496f7be40f83e01055a97a0899c9a0484121df5f11ce25d9ca426
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c54b82100787f03b666cbb04d34bd894911346cc6c39266971a5de5f99fdb7bb
+Ctrl.data = hexdata:129524eaf21476767f2f14c3ec038f7fadb38f0c35645391b41b218729a1a9da
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 58374f792176371d434f9866ba8958fab9eced9edc0a4d7a787798ded90fa9b7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c54b82100787f03b666cbb04d34bd894911346cc6c39266971a5de5f99fdb7bb
+Ctrl.data = hexdata:3279a4e27fc27a69208764df2fc0de77e3d9c73dd971b368b8d0a32536a6f8bb
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 1aff1cdf216ba86913a3d191159de6869490ca94e79da7fbc6173643c87d407a
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:b6d0a81fd3c91c1970a2d85ed695fba34143ae0fea07bc7c8653ad4830c905db
+Output = 94374db506b58237defb8b1d7fd10c17440ea9c46380d00e22fdb879fbfe2cbc
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:94374db506b58237defb8b1d7fd10c17440ea9c46380d00e22fdb879fbfe2cbc
+Ctrl.data = hexdata:47afa605ef0002b533bedbc155030e2b96c1d8d20d410dc44ce37dd94c8cb1e3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 122a73631c397d888895544f34925464a3d6983cdf647d6e23b050d140af1273
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:94374db506b58237defb8b1d7fd10c17440ea9c46380d00e22fdb879fbfe2cbc
+Ctrl.data = hexdata:47afa605ef0002b533bedbc155030e2b96c1d8d20d410dc44ce37dd94c8cb1e3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 0bb4c7419f9a02f9eb52ab21886b20b7be6ae8223db2e67c50d5d3461ec9b936
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:d36680e32c17596202cbf2765472708cb5bc41399b2c9d7cf1c88ca219e7a1ee
+Ctrl.salt = hexsalt:94374db506b58237defb8b1d7fd10c17440ea9c46380d00e22fdb879fbfe2cbc
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = e6d83b5c15773dd227c4f4506bf6584ae196d28153dec17aec2142077b4d1ae3
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:e6d83b5c15773dd227c4f4506bf6584ae196d28153dec17aec2142077b4d1ae3
+Ctrl.data = hexdata:c724c6137e799c69850f94ccbe089b07896d44cc7845fcf07cfea716176cc0f0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 0de142b91cfda627b365dab23e69ad00edb0085b33076052cf5f7f0ec735abc8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:e6d83b5c15773dd227c4f4506bf6584ae196d28153dec17aec2142077b4d1ae3
+Ctrl.data = hexdata:c724c6137e799c69850f94ccbe089b07896d44cc7845fcf07cfea716176cc0f0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = abdeed5d5f41fb963e1a136ac914aa35617c3cd19a56b1c975f27656b967db89
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:e6d83b5c15773dd227c4f4506bf6584ae196d28153dec17aec2142077b4d1ae3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 7eace69e348057e83a83a877a4920daa9fb4c7fbfe897600f29d9496424d5129
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7eace69e348057e83a83a877a4920daa9fb4c7fbfe897600f29d9496424d5129
+Ctrl.data = hexdata:6550c34750ff90a4e62391d53b2cb45650380f018845cb63a399516a66681fc3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = d4e9ecf730820bf96846489a1b717af11cf498f7b0a2a779a4064996597cb97b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7eace69e348057e83a83a877a4920daa9fb4c7fbfe897600f29d9496424d5129
+Ctrl.data = hexdata:6550c34750ff90a4e62391d53b2cb45650380f018845cb63a399516a66681fc3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 6d9189f42b5cc41f50c26ada399521e2e3a79f9d8764f00e76e6bce962169cc8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7eace69e348057e83a83a877a4920daa9fb4c7fbfe897600f29d9496424d5129
+Ctrl.data = hexdata:6550c34750ff90a4e62391d53b2cb45650380f018845cb63a399516a66681fc3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 3998b7178fef3a48ce434d8ead4b09f136dc2f900218dcfcbe7321bc9ce4ec4b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7eace69e348057e83a83a877a4920daa9fb4c7fbfe897600f29d9496424d5129
+Ctrl.data = hexdata:e8a32347070a957786be61942a657b1e51ef0a37591e4d69e4c1362033ced9f0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = c3112140c8aed04d114af73b6f245fafdc0c7ff4661ad6252cc754b9afb5b59a
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:89f7a556f3c19a2833b3313868dc11f5728880fb3ac74eb142042bd5e951a1a6
+Output = 7f9c0864adf9769f2f362f239121b620f2a0bfc4e2898e8cc1f05e11517ceac5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7f9c0864adf9769f2f362f239121b620f2a0bfc4e2898e8cc1f05e11517ceac5
+Ctrl.data = hexdata:fb6e2fffef563561a53b0cbd6b93da78597fd7127f03069b1e724312e0f1a49f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 97cddc9e02e8a54646e1d3cd1018185d93bd76743a64cef03fef3bc1305db4cc
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7f9c0864adf9769f2f362f239121b620f2a0bfc4e2898e8cc1f05e11517ceac5
+Ctrl.data = hexdata:fb6e2fffef563561a53b0cbd6b93da78597fd7127f03069b1e724312e0f1a49f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = b78c86ab545bd86e890359a2c0bf695c95dec4e3207ad7c110372153328641ae
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:0cec10693bc11dee75ca5e1d06cb42abba7d1d76762f7400f323b1c191e7e745
+Ctrl.salt = hexsalt:7f9c0864adf9769f2f362f239121b620f2a0bfc4e2898e8cc1f05e11517ceac5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 1e88503eafb7a8e5d37d4d05c2d11a7b2a41b139c321eaf72aa33e155c815aee
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:1e88503eafb7a8e5d37d4d05c2d11a7b2a41b139c321eaf72aa33e155c815aee
+Ctrl.data = hexdata:6f71510b9e2d8ef93dbdb4523bee6649f2066dbe9f8b0c1d3b8295b0c70f75e1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 8f4432e28701a3491742a5588ab506ef378d2ee46dcb9df3c2b8f1161638226a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:1e88503eafb7a8e5d37d4d05c2d11a7b2a41b139c321eaf72aa33e155c815aee
+Ctrl.data = hexdata:6f71510b9e2d8ef93dbdb4523bee6649f2066dbe9f8b0c1d3b8295b0c70f75e1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 62ddaed76a7bc9aa623a10176e180333bf50e2d436ab9d6df2e6327c3934b0aa
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:1e88503eafb7a8e5d37d4d05c2d11a7b2a41b139c321eaf72aa33e155c815aee
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = f167151ca3b7e09230e2b19b35d5eb94ac185bcd11718bf3fa7b4ad9b13c50d8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:f167151ca3b7e09230e2b19b35d5eb94ac185bcd11718bf3fa7b4ad9b13c50d8
+Ctrl.data = hexdata:daf66774a6c5575457a3c4d8fd127fbcaeae1a95b518be04955dced1f14861de
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 5a25fbebbb09a70ee782337a601f6e86e7a77cdfe980c90d2e2acf48a2426c8b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:f167151ca3b7e09230e2b19b35d5eb94ac185bcd11718bf3fa7b4ad9b13c50d8
+Ctrl.data = hexdata:daf66774a6c5575457a3c4d8fd127fbcaeae1a95b518be04955dced1f14861de
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 495df78c999d00de7c410c8e964df0dbf9192231bbe1b06880b13a0dafee1003
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:f167151ca3b7e09230e2b19b35d5eb94ac185bcd11718bf3fa7b4ad9b13c50d8
+Ctrl.data = hexdata:daf66774a6c5575457a3c4d8fd127fbcaeae1a95b518be04955dced1f14861de
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = d39992ac1cfbe2715b1b95affff6e23934121d3b0b54685f668f5c4473f36f1d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:f167151ca3b7e09230e2b19b35d5eb94ac185bcd11718bf3fa7b4ad9b13c50d8
+Ctrl.data = hexdata:77100f9b44422180a922b28ef83701c5ac19fdc3aea8e4f966840f9fa3c893eb
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 928104946f6338386e8ac29c6a9b16453fa8c96ee18e7dd9e2f4091cd5399f91
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:90f8ba43a34bffd93495f3d854c84594e0daf85d9468b35c4dcf44a80eb31718
+Output = c7222ce686f8f5ae6580fe79f05591187b9238eb9884828074c2d2af274a07d5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c7222ce686f8f5ae6580fe79f05591187b9238eb9884828074c2d2af274a07d5
+Ctrl.data = hexdata:218aa61bd49bc0f7ad65332ad4bb18015d3e646cacfdc72f710c9efbe01979a9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = fd0edb84e6742a9f33892c91e7fc9fe59d932c7677ab3627ede5b15991a607ec
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c7222ce686f8f5ae6580fe79f05591187b9238eb9884828074c2d2af274a07d5
+Ctrl.data = hexdata:218aa61bd49bc0f7ad65332ad4bb18015d3e646cacfdc72f710c9efbe01979a9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 25a8973e89c3f3eb3f1394df0f62ee66a7003c794876473c2cc800f7cf4c11fb
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a2092cf8a9357e82253844c9f563385e8d44b89d960a7b2fffbc8d697fdcb057
+Ctrl.salt = hexsalt:c7222ce686f8f5ae6580fe79f05591187b9238eb9884828074c2d2af274a07d5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 917c83ffd6a51b4ec8682d215b683a4c1025180779b2d4af6321ea63a9c7abaf
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:917c83ffd6a51b4ec8682d215b683a4c1025180779b2d4af6321ea63a9c7abaf
+Ctrl.data = hexdata:bfe3f121ae6e973c2b58a7ab40295212387146eeec3d3c5764a320de2c37051f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = a2861ceecd2842fac7245facc65f6b13145635eaaabd2c3a02db6b20b91f9d38
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:917c83ffd6a51b4ec8682d215b683a4c1025180779b2d4af6321ea63a9c7abaf
+Ctrl.data = hexdata:bfe3f121ae6e973c2b58a7ab40295212387146eeec3d3c5764a320de2c37051f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 3b74970ceec49ff0aa043603487194c7c42f4e31ac4aab661f9056c8000afa25
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:917c83ffd6a51b4ec8682d215b683a4c1025180779b2d4af6321ea63a9c7abaf
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 67acff590a7ff60cf452d56a9824f8e8831f0b401b4e9968f7f715c73374d1af
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:67acff590a7ff60cf452d56a9824f8e8831f0b401b4e9968f7f715c73374d1af
+Ctrl.data = hexdata:35f9b9be0850baa1016762d63005ea679c47971932f7141038ae009a904cf7f9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = c10c35faa34fc917cf0acb280fdb0c3ac513d5c86f418a99e5590d40ccb8fcb9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:67acff590a7ff60cf452d56a9824f8e8831f0b401b4e9968f7f715c73374d1af
+Ctrl.data = hexdata:35f9b9be0850baa1016762d63005ea679c47971932f7141038ae009a904cf7f9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = f0ac9ca472ab7587b074d59824a5daec75d613da9b168a2589bbbdcd76c51976
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:67acff590a7ff60cf452d56a9824f8e8831f0b401b4e9968f7f715c73374d1af
+Ctrl.data = hexdata:35f9b9be0850baa1016762d63005ea679c47971932f7141038ae009a904cf7f9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 5e8deab072f10d9c8ffdcda58b93ea5a61f11cf72ca0647118164a2a7fa03a08
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:67acff590a7ff60cf452d56a9824f8e8831f0b401b4e9968f7f715c73374d1af
+Ctrl.data = hexdata:b8d1e9993b45dfda130aa77c5319074806042cb4aad1b505bedb951a40cf2003
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 6cf8a005b4b453cc982f4707dc64bc3dc8d00602aebd5f85413f4d405e656851
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bd1eead608338b0308e4243325a02b350ef6eb5e5fae728fd73f3f9a02c3d515
+Output = c67ac5e381b0bdc51b8dc7891f581882a2b83408e6f7cdc36a6245cc2797270c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c67ac5e381b0bdc51b8dc7891f581882a2b83408e6f7cdc36a6245cc2797270c
+Ctrl.data = hexdata:eaa65a5ab61073c13c86d5d4dc97dba62c746b6d63f4e09014d157223daf2a0e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 308ecfa294dec305f736df30570315d28b63b6c72507c1ce14c4f51441982e63
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c67ac5e381b0bdc51b8dc7891f581882a2b83408e6f7cdc36a6245cc2797270c
+Ctrl.data = hexdata:eaa65a5ab61073c13c86d5d4dc97dba62c746b6d63f4e09014d157223daf2a0e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = a41017b7a9ef987dc543e52539688cfc74bb95094693ecf6d9a1724f78ba6403
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a501370b0ffebbf0f115b367ed21f6d8816b10282a2724cb480993583f64f787
+Ctrl.salt = hexsalt:c67ac5e381b0bdc51b8dc7891f581882a2b83408e6f7cdc36a6245cc2797270c
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 6698bc4d53decbb95a8912dea1332c67f83a1f1fb077701bee15ead22054bc53
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:6698bc4d53decbb95a8912dea1332c67f83a1f1fb077701bee15ead22054bc53
+Ctrl.data = hexdata:ebbe1a77c63580e02ff7b51438c736a955326403640edfbdb1812097b57c2fb4
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = f2bed07ad9d2efd2718fb4da4a9dc90fa1dc40440b98c5291377beca16dc6599
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:6698bc4d53decbb95a8912dea1332c67f83a1f1fb077701bee15ead22054bc53
+Ctrl.data = hexdata:ebbe1a77c63580e02ff7b51438c736a955326403640edfbdb1812097b57c2fb4
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = f47f4524fd86c43d2c4c1618b03492f8bbcc3bdc1b8c8b97b4ec18581dc13f8e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:6698bc4d53decbb95a8912dea1332c67f83a1f1fb077701bee15ead22054bc53
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 55042c631e7e5e78a6afca32f09741a93d987e55de8213bf8418546c5b40be8a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:55042c631e7e5e78a6afca32f09741a93d987e55de8213bf8418546c5b40be8a
+Ctrl.data = hexdata:af6d979bb4e54e8a1cec24983efd7d72deccbf8d6bd137a9a95b94c70cceb335
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 64e2482febc65460e45d3b9dad2fa847ba2ec91737225920fa4d0afb83ac4558
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:55042c631e7e5e78a6afca32f09741a93d987e55de8213bf8418546c5b40be8a
+Ctrl.data = hexdata:af6d979bb4e54e8a1cec24983efd7d72deccbf8d6bd137a9a95b94c70cceb335
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 902dcd1e49c7facf55ce6dbedab06f7265a092418a235df019102b4265d648d2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:55042c631e7e5e78a6afca32f09741a93d987e55de8213bf8418546c5b40be8a
+Ctrl.data = hexdata:af6d979bb4e54e8a1cec24983efd7d72deccbf8d6bd137a9a95b94c70cceb335
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = e168010de64b519d0cf575dbf267590c03b45782d875e10e193be95366d450cd
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:55042c631e7e5e78a6afca32f09741a93d987e55de8213bf8418546c5b40be8a
+Ctrl.data = hexdata:0fe329b7ebec20e21a6322f657702873afb4a52dab88f7484c9cfbfd3b1c1105
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 815929e43c3624dccc01db4adfd97f0fea124ff83bfe79cfd0aa76f91e36d9ea
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:47a2f1ed109d1ed2e7a31288312da8930e8f3445c98b6a8862da85ae07507bc6
+Output = 1d08642939bbb7369d15c7a1d022ed05ec030321bd953593fabd43a8703b096b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:1d08642939bbb7369d15c7a1d022ed05ec030321bd953593fabd43a8703b096b
+Ctrl.data = hexdata:31748082bf14950d21b4a0759143bb70474cb1c231cd91764d5bd241de984842
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 7b57c9475d089b4798340fec63fe876f9fd1214cf0947c8779d0f4952f6aa9c7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:1d08642939bbb7369d15c7a1d022ed05ec030321bd953593fabd43a8703b096b
+Ctrl.data = hexdata:31748082bf14950d21b4a0759143bb70474cb1c231cd91764d5bd241de984842
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 0f0790d9d50286db6cb769f3b6c1ca72a8a9597176ff8c79d8969aa38be74215
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9674cae88f3468d7b34df9bd2c348b99f1a964d7ed2bd5340edae2c9c96399db
+Ctrl.salt = hexsalt:1d08642939bbb7369d15c7a1d022ed05ec030321bd953593fabd43a8703b096b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = cd332e44da2306e3d3812f7f55171c50f7d8ad1bc57f7e758b452e51163bdf0c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:cd332e44da2306e3d3812f7f55171c50f7d8ad1bc57f7e758b452e51163bdf0c
+Ctrl.data = hexdata:6db5315252802b3132297f0c49983ad9b406bacbb256bac50189a44055bd1819
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = b0beb402fbbd33be12a60927c160210f0343c31143945d0320d0337ed1466aa7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:cd332e44da2306e3d3812f7f55171c50f7d8ad1bc57f7e758b452e51163bdf0c
+Ctrl.data = hexdata:6db5315252802b3132297f0c49983ad9b406bacbb256bac50189a44055bd1819
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 09bf60f0d825d1fa6696e0d52b93dd40cc1087bdeade1eb0970f55bd4cbe85fc
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:cd332e44da2306e3d3812f7f55171c50f7d8ad1bc57f7e758b452e51163bdf0c
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 8a1bf9169726cc39cd9f1496ae22a68d5407924d53d6003b41d6fd551566295c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8a1bf9169726cc39cd9f1496ae22a68d5407924d53d6003b41d6fd551566295c
+Ctrl.data = hexdata:7ebc29c29c002f5ea3f80283a1919ee7689424c35be6637c86666d0a843bac2e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = a5150664aec6f4600ee21c9285943f26427e399a7d348fcd291ac804527be921
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8a1bf9169726cc39cd9f1496ae22a68d5407924d53d6003b41d6fd551566295c
+Ctrl.data = hexdata:7ebc29c29c002f5ea3f80283a1919ee7689424c35be6637c86666d0a843bac2e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 695dedb2a8762a90ec40ea1c6c1cbd592b0106a7833df9a4d07cd108e62039bd
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8a1bf9169726cc39cd9f1496ae22a68d5407924d53d6003b41d6fd551566295c
+Ctrl.data = hexdata:7ebc29c29c002f5ea3f80283a1919ee7689424c35be6637c86666d0a843bac2e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 389d8adce83b1b0aa6574155e62c22d999b43babb388d9223c0ed9f1fe458084
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:8a1bf9169726cc39cd9f1496ae22a68d5407924d53d6003b41d6fd551566295c
+Ctrl.data = hexdata:9a38f4bc144df26d362f0249ed9a47ed0d29c2c40e566d0a688584303dcc79eb
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 4ba917b3adcbc372aa431bef94a44a4afa1b528ce9278aeb79a9bd35885ad745
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c4c9a0266ed3b657058cb9674c530247a09b660954cc26b888a2d56e579fcbd82ef6
+Output = 3780287d1e1d2c16b1971dafc255c414e7523694a94c45f2faa3dc0f6519e222
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3780287d1e1d2c16b1971dafc255c414e7523694a94c45f2faa3dc0f6519e222
+Ctrl.data = hexdata:b10c0c2d6a38f88c89be8f5e7a37da9d7fda20b021ccab52a1eccaa722f64691
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 08a4b77232d0c46ff57fd77306a2ed3edf0f10272525532fb69ad88c7d01a785
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3780287d1e1d2c16b1971dafc255c414e7523694a94c45f2faa3dc0f6519e222
+Ctrl.data = hexdata:b10c0c2d6a38f88c89be8f5e7a37da9d7fda20b021ccab52a1eccaa722f64691
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 2b7574a39cdcebe3f0fc50a42422cd227d72164203661ad3ab0146220c51d638
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:3780287d1e1d2c16b1971dafc255c414e7523694a94c45f2faa3dc0f6519e222
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = bc7ce3027cd67bbf366c78e07023f2efedab1e021366a3bdf7e8f0331de1113c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bc7ce3027cd67bbf366c78e07023f2efedab1e021366a3bdf7e8f0331de1113c
+Ctrl.data = hexdata:6a593ba39e4ea72392a7fc4198d56c01dd25094c808f9dc8f7ed39e808dd1e58
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 3c808386d173aa3edad8e0eb9e9bbec629d5a00d3503f1a524aa75c7e8ff4002
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bc7ce3027cd67bbf366c78e07023f2efedab1e021366a3bdf7e8f0331de1113c
+Ctrl.data = hexdata:6a593ba39e4ea72392a7fc4198d56c01dd25094c808f9dc8f7ed39e808dd1e58
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = db33c5ae5c8b525ebfa000d5446c62a4b2469da9faa913c0694f154371e2c16b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:bc7ce3027cd67bbf366c78e07023f2efedab1e021366a3bdf7e8f0331de1113c
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 5d151d7f20547939c3fa2c3c1a25a7b5f43c2d9e077e387816a23789589f4d8e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d151d7f20547939c3fa2c3c1a25a7b5f43c2d9e077e387816a23789589f4d8e
+Ctrl.data = hexdata:375373bbfd7dc61d49f8b987b537808c79e673202f0825518d9c2f3e9973360a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 8885938e3e4be164c56aa53c52695ba4739c6fabdb51a9ab2b35423ebeec2416
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d151d7f20547939c3fa2c3c1a25a7b5f43c2d9e077e387816a23789589f4d8e
+Ctrl.data = hexdata:375373bbfd7dc61d49f8b987b537808c79e673202f0825518d9c2f3e9973360a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 3e7d7c5f9ac3a184715ed7a45d68da393cf07a297456849ec671e1a3b29e1dce
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d151d7f20547939c3fa2c3c1a25a7b5f43c2d9e077e387816a23789589f4d8e
+Ctrl.data = hexdata:375373bbfd7dc61d49f8b987b537808c79e673202f0825518d9c2f3e9973360a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 86e5c6fd2304433f8532a1f863716fc09022346a2f76e2d52fe03f8294fff882
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d151d7f20547939c3fa2c3c1a25a7b5f43c2d9e077e387816a23789589f4d8e
+Ctrl.data = hexdata:1a06ef15e61cb724a2f84f51c9ba466877261e5597858adda4f461d8cb5352ef
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 426b2739c854867d4ea7b560092786a4601648d35505ad8040cf67b5978a5f25
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:925f595de96572a2e8c35346d9beeca43329f3a66c96168d50588f4e262ed01c66f2
+Output = 3a03d61dec9a96667ac5aeae6d904eb87bf7f60362ca7c19eefc9c9d4466189d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3a03d61dec9a96667ac5aeae6d904eb87bf7f60362ca7c19eefc9c9d4466189d
+Ctrl.data = hexdata:4abf7521447134215ad896ca371e0cee966c0d7fb152b98ca4bc872dcaba37b9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 7450f33c7ba624e4151bc8230df0a7163c164f863801949102d4e9715e4813f9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3a03d61dec9a96667ac5aeae6d904eb87bf7f60362ca7c19eefc9c9d4466189d
+Ctrl.data = hexdata:4abf7521447134215ad896ca371e0cee966c0d7fb152b98ca4bc872dcaba37b9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = c6047f5c4eed302b627d1f10bac575db43a29e20a4fdfec20975c8e63a410205
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:3a03d61dec9a96667ac5aeae6d904eb87bf7f60362ca7c19eefc9c9d4466189d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 7a8ac221aa898261e625b7a88a964136e8522d100fca2d57d385a1a324670f73
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7a8ac221aa898261e625b7a88a964136e8522d100fca2d57d385a1a324670f73
+Ctrl.data = hexdata:574d667be4aa6d090fb0bfd15eca6188004a2216969fb69768b786e1dae03978
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = cce2f4cf5dc234c4c2366488a8ea141a5be0ec1ef1418aafec947c08d37325b6
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7a8ac221aa898261e625b7a88a964136e8522d100fca2d57d385a1a324670f73
+Ctrl.data = hexdata:574d667be4aa6d090fb0bfd15eca6188004a2216969fb69768b786e1dae03978
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 2a3c42a2125c21a7bdfb1902dbc5ab3df1cee0d496472c841751128b4f6ba7ea
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:7a8ac221aa898261e625b7a88a964136e8522d100fca2d57d385a1a324670f73
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = a5c4c6c92cae6d1f1bf65382b8aa396097587b6053ebfb30392e8a9e2095a3b4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a5c4c6c92cae6d1f1bf65382b8aa396097587b6053ebfb30392e8a9e2095a3b4
+Ctrl.data = hexdata:fc47a64ea7d238286e710775efb6fd4e6cc52238f956723f997c0c1a5d97c982
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = efd8f8e08644e81b8a2068d59bf4957da16f376dcce547d485f35158ed934463
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a5c4c6c92cae6d1f1bf65382b8aa396097587b6053ebfb30392e8a9e2095a3b4
+Ctrl.data = hexdata:fc47a64ea7d238286e710775efb6fd4e6cc52238f956723f997c0c1a5d97c982
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 1ec28e0fdb42e283058c3cb093b64b2a51f25f309f6903736de591cb730b0d59
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a5c4c6c92cae6d1f1bf65382b8aa396097587b6053ebfb30392e8a9e2095a3b4
+Ctrl.data = hexdata:fc47a64ea7d238286e710775efb6fd4e6cc52238f956723f997c0c1a5d97c982
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 1cd2d315b8720a771f7b8d84ee19704193a3ad7f903d62561d51318fda4ef8e2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a5c4c6c92cae6d1f1bf65382b8aa396097587b6053ebfb30392e8a9e2095a3b4
+Ctrl.data = hexdata:6094455245209c442e19e5f313534da9f9c7e5d634d443d8cd14b9e9b6d778ab
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 7df15d385663c45a359e5d1f4b648d6e77156b48e3d382db08cb26d3218dabee
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3a985db779275ed7c23af0f123220d862db237fc9ac9834e76eec0692b1e98055c12
+Output = 75a6012f1571fb5a7ab0712ef6d520a70246e8df9073445c28239fdb03c5c8dd
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:75a6012f1571fb5a7ab0712ef6d520a70246e8df9073445c28239fdb03c5c8dd
+Ctrl.data = hexdata:1c80ac5d876634b04d7dbebfe687fbdf2df7f82df4e6549defa8e691b26dd3ad
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = adaacbad9407c0c69632800eb3c7e5f901af2bfae618fa0cbcf63fb0064df997
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:75a6012f1571fb5a7ab0712ef6d520a70246e8df9073445c28239fdb03c5c8dd
+Ctrl.data = hexdata:1c80ac5d876634b04d7dbebfe687fbdf2df7f82df4e6549defa8e691b26dd3ad
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 70a6fd6201cddc6ac218cacf4487be2c23382e9a898a8e959d443602e66bc9ff
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:75a6012f1571fb5a7ab0712ef6d520a70246e8df9073445c28239fdb03c5c8dd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = b7be663035d51cb5f1a73c9618ebcb1836510ab2c8e29aaa8c0512dca901adea
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:b7be663035d51cb5f1a73c9618ebcb1836510ab2c8e29aaa8c0512dca901adea
+Ctrl.data = hexdata:64dc967779196d895cf649ad603cd1abb1a9ac2f6e52df74c02c9fc38e0aca5b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = cedc4ca3f6acfc0495e9c4aacf236309e80688394296baab08b2821d8adeb3b2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:b7be663035d51cb5f1a73c9618ebcb1836510ab2c8e29aaa8c0512dca901adea
+Ctrl.data = hexdata:64dc967779196d895cf649ad603cd1abb1a9ac2f6e52df74c02c9fc38e0aca5b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 22d95b8d42edc48c71e82ef68f3d0adea616742d829ef8dc40ee5a4a127e0c2f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:b7be663035d51cb5f1a73c9618ebcb1836510ab2c8e29aaa8c0512dca901adea
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 7c0c1e280449811974dcb2b95b2505c5dd267bb6e367dfad8403149f61980ba8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7c0c1e280449811974dcb2b95b2505c5dd267bb6e367dfad8403149f61980ba8
+Ctrl.data = hexdata:771a6f78341f621fc9a0ada0e428b129a072515e6aa0eb29501e5b4f67357a3f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 36079cac5cd69338b13cdf43902c52353c0ad3bee52d9d4b80bdcbafb896c1f2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7c0c1e280449811974dcb2b95b2505c5dd267bb6e367dfad8403149f61980ba8
+Ctrl.data = hexdata:771a6f78341f621fc9a0ada0e428b129a072515e6aa0eb29501e5b4f67357a3f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 5ccccbec1e524afdbfeb3f79eee231445ea4b970775ca44780b836278459e800
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7c0c1e280449811974dcb2b95b2505c5dd267bb6e367dfad8403149f61980ba8
+Ctrl.data = hexdata:771a6f78341f621fc9a0ada0e428b129a072515e6aa0eb29501e5b4f67357a3f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 1f99d16935378ad2b629602be4902ef36803a0456f4b412dc60069b02907c157
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:7c0c1e280449811974dcb2b95b2505c5dd267bb6e367dfad8403149f61980ba8
+Ctrl.data = hexdata:53fa7ef57bd948347ee221a58e0357e5d64fc68337a40e1a2a955c362305b7d0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 3f314a8cdade0c8fb7a8ada062c076cdc66f48ae85b06e9866823071b24569f6
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:147e5b2a8c852a29cd2dbe0889eae5e127c08c7dc4ef2fcd10c7f074132b9316f82c
+Output = a4414022e17e270db589511aeed7c54f64383760bf6867b3ea2c87c6ab350c4a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a4414022e17e270db589511aeed7c54f64383760bf6867b3ea2c87c6ab350c4a
+Ctrl.data = hexdata:c029b25f3eeaa245d3b16415a9dfbd738f49972abd20cedf77e712e34151d768
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = cf72dbf54ef12ad90c826cc5f745332a051bd22f3d4a4980e38ed5c91acdbe00
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a4414022e17e270db589511aeed7c54f64383760bf6867b3ea2c87c6ab350c4a
+Ctrl.data = hexdata:c029b25f3eeaa245d3b16415a9dfbd738f49972abd20cedf77e712e34151d768
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 04e7fa07f592562b442f41403f89ce197a777b890dd6ad4a37330d7b97f9297f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:a4414022e17e270db589511aeed7c54f64383760bf6867b3ea2c87c6ab350c4a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = facf154981665599f9071f24fbe03da350726c0580865bec44eb81cca53624a2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:facf154981665599f9071f24fbe03da350726c0580865bec44eb81cca53624a2
+Ctrl.data = hexdata:22ef82f8cfc550dfed76234ee158ffa49e142788d40bb8f11503df76eaa414ee
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = e86ea8bf6c00c4e1415f55ffe5c6fc639cfde1aedb549eea54e536920794b677
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:facf154981665599f9071f24fbe03da350726c0580865bec44eb81cca53624a2
+Ctrl.data = hexdata:22ef82f8cfc550dfed76234ee158ffa49e142788d40bb8f11503df76eaa414ee
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 4470d8eaf03e31af06885a327decd84b44b073ed040d81e223cd40e018ae3ebb
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:facf154981665599f9071f24fbe03da350726c0580865bec44eb81cca53624a2
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 77c02b58bcf97af0ffded733e0a297b212f6d72e55af55609fdd85c99b52cb4c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:77c02b58bcf97af0ffded733e0a297b212f6d72e55af55609fdd85c99b52cb4c
+Ctrl.data = hexdata:5cc964a080f748ff23e5b303b291002a4dbf13e657efd4fe880aec0f7ef42b29
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = e7a16831383b4617205c40de58a169f567f4c612b2c07667f10b61a4b137a088
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:77c02b58bcf97af0ffded733e0a297b212f6d72e55af55609fdd85c99b52cb4c
+Ctrl.data = hexdata:5cc964a080f748ff23e5b303b291002a4dbf13e657efd4fe880aec0f7ef42b29
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 912010401679c0279d6e45cc968232ed8cea41b66dc80fa5ad1d4ac666a38873
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:77c02b58bcf97af0ffded733e0a297b212f6d72e55af55609fdd85c99b52cb4c
+Ctrl.data = hexdata:5cc964a080f748ff23e5b303b291002a4dbf13e657efd4fe880aec0f7ef42b29
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = d3ad734749b9c723c3a4186ac4af12e70a6c8f209c96277af7caaf0a8a30a284
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:77c02b58bcf97af0ffded733e0a297b212f6d72e55af55609fdd85c99b52cb4c
+Ctrl.data = hexdata:19c68fab2d15ea5cefe7de3478c9207f8321be8045ff3a3463cdc0c11dbe7cd1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 6acd62983abf673fc0884510ca8c92f617089ad5dad4b16b4a9c43c45af97020
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:d3b971aced61ea7ec4fbe922509a9f7184ee8fec3758728d199a78207ebb14078e68
+Output = 5d60ce4dbf5ab602baef6141d47216c6f9c24c080525fe81f9f2c53e39cefe3b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d60ce4dbf5ab602baef6141d47216c6f9c24c080525fe81f9f2c53e39cefe3b
+Ctrl.data = hexdata:62b7f550fdb7e6af518714ff659c8539fd5fe2cbefa7338dd4f01cee8734a744
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 747dd5593aa133934f8be2e7c92e7431dcb5c369222a2d5c6a8142435d1d6df5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d60ce4dbf5ab602baef6141d47216c6f9c24c080525fe81f9f2c53e39cefe3b
+Ctrl.data = hexdata:62b7f550fdb7e6af518714ff659c8539fd5fe2cbefa7338dd4f01cee8734a744
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 20a8ddd7a7d1ba973465bf35610018bdc54baf59dc4984a6dad05d11308e4952
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:5d60ce4dbf5ab602baef6141d47216c6f9c24c080525fe81f9f2c53e39cefe3b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 58fc08f57ae7462775a3fb23cecaa4b3e7f5f9274c55aaf4d5aca9f57f3b1dfc
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:58fc08f57ae7462775a3fb23cecaa4b3e7f5f9274c55aaf4d5aca9f57f3b1dfc
+Ctrl.data = hexdata:88cedc1856dd0d81e3af6a9b320f05d3d005bbb3664f0fc912e41007fb8645dc
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 8c8ea28aad5411f3963ad2827f2bdc84041cc6da53c7400c998c6434c5c15ba1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:58fc08f57ae7462775a3fb23cecaa4b3e7f5f9274c55aaf4d5aca9f57f3b1dfc
+Ctrl.data = hexdata:88cedc1856dd0d81e3af6a9b320f05d3d005bbb3664f0fc912e41007fb8645dc
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 123b12381753a82aeb705cb2c3f2a2ae729511f1b1c92e6be3e587b07fe4c60f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:58fc08f57ae7462775a3fb23cecaa4b3e7f5f9274c55aaf4d5aca9f57f3b1dfc
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 3e415c1fa74e9f96d1c1af252fe3c8e1fb9e991f0e45a4a471e13d03bb2a2037
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3e415c1fa74e9f96d1c1af252fe3c8e1fb9e991f0e45a4a471e13d03bb2a2037
+Ctrl.data = hexdata:84e00926de1231de5d058c9d907aeec6a6b94b9e2c8edecd7672b4013d4bd4a7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 5a8fde0ac38739f0eb2e739b440530c3943b37ad26ffaff73f2904e17bde058d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3e415c1fa74e9f96d1c1af252fe3c8e1fb9e991f0e45a4a471e13d03bb2a2037
+Ctrl.data = hexdata:84e00926de1231de5d058c9d907aeec6a6b94b9e2c8edecd7672b4013d4bd4a7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 97e9a4d00eff6997d6e60d5a060851d7c1f5c6878ef198063fa5a3a9cc77e5e9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3e415c1fa74e9f96d1c1af252fe3c8e1fb9e991f0e45a4a471e13d03bb2a2037
+Ctrl.data = hexdata:84e00926de1231de5d058c9d907aeec6a6b94b9e2c8edecd7672b4013d4bd4a7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 5b596ab4521a354c141898211ac96fdf6965931fb142ca601ec5dcaccd900f39
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3e415c1fa74e9f96d1c1af252fe3c8e1fb9e991f0e45a4a471e13d03bb2a2037
+Ctrl.data = hexdata:622bf37da14b1110ffd9fde15a8b34b5a9192b7c003279df2d779a8441eb832a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 86fc27400916d558eb24e277ada87cfb217bb41993b5947049eaab30ee1967de
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:6e9a209d728b63a2649820ecba2439c3ced3facc56973fc63359e73f1fe8a5f0
+Output = 5774c653d8f3ca4b852189369e8fcb03001837900c0c9b47037565139b2a8974
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5774c653d8f3ca4b852189369e8fcb03001837900c0c9b47037565139b2a8974
+Ctrl.data = hexdata:d222fdad7a1eaf29aa5c1699fb2c6452337e6a3f4eed5112706edc32d2aa5942
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 4b3538bdc30df6f4052310a5f66ea6de2ca506a22a0e3631b2d3eff387dd2425
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5774c653d8f3ca4b852189369e8fcb03001837900c0c9b47037565139b2a8974
+Ctrl.data = hexdata:d222fdad7a1eaf29aa5c1699fb2c6452337e6a3f4eed5112706edc32d2aa5942
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 377e1abcc286c58d438f146ceb39050d453a1b9c842ed8d9275842cfac27484b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:5774c653d8f3ca4b852189369e8fcb03001837900c0c9b47037565139b2a8974
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 5feaf88808714444916bb5759151d2fa09d8dd884dbc76ed72f33023e45c1006
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5feaf88808714444916bb5759151d2fa09d8dd884dbc76ed72f33023e45c1006
+Ctrl.data = hexdata:6f19f45a25846f2a30639c6a150a42c060007d3a4a637f9a1949ff980e151270
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 992ef872ba2d217c7e2256e42a2e4391a3482105db09fb0330813f4ae093d8ec
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5feaf88808714444916bb5759151d2fa09d8dd884dbc76ed72f33023e45c1006
+Ctrl.data = hexdata:6f19f45a25846f2a30639c6a150a42c060007d3a4a637f9a1949ff980e151270
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = e439ad92cd58b349cf2d44ceada80f0dc62cd03a216c0a6e98b9c4faa762e178
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:5feaf88808714444916bb5759151d2fa09d8dd884dbc76ed72f33023e45c1006
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 02dc2e8f1f3827dd4eab288c3e2f02437a0a619e18db9092bf2a09fb01f14d7d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:02dc2e8f1f3827dd4eab288c3e2f02437a0a619e18db9092bf2a09fb01f14d7d
+Ctrl.data = hexdata:110d218cd286649a49fa86565f02e89c1e155e9d724392f98398cab4a2c6536a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 5915a67e1934c6a65cc0ff2a8101d2ab42c1d2fb448374cc4a4a1aa5b79304d2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:02dc2e8f1f3827dd4eab288c3e2f02437a0a619e18db9092bf2a09fb01f14d7d
+Ctrl.data = hexdata:110d218cd286649a49fa86565f02e89c1e155e9d724392f98398cab4a2c6536a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 1526a83cee865495333b13328e5b6cf6a6f42f1cb354d5e0fac6ab75e32a059f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:02dc2e8f1f3827dd4eab288c3e2f02437a0a619e18db9092bf2a09fb01f14d7d
+Ctrl.data = hexdata:110d218cd286649a49fa86565f02e89c1e155e9d724392f98398cab4a2c6536a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 4f7a8ecd191d6b18ede079553a6472159aed46da19f891349e94d14517614fe4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:02dc2e8f1f3827dd4eab288c3e2f02437a0a619e18db9092bf2a09fb01f14d7d
+Ctrl.data = hexdata:27c96e77f7f7e4dbdd958348ce3d95683f3b78652605fd41bc02280c091d199e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = c2d6e4992b13331da0843572e55dd0624a04067c9415a2f231f08e86d496fd15
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:d339bc83462b544456e27a735516d50bd330bce6f39d0c388a89ef33ac209001
+Output = 4d1c1c060c37258aaeff7aa73976f61e09779ffb2c296558b32a951c9bef5f67
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:4d1c1c060c37258aaeff7aa73976f61e09779ffb2c296558b32a951c9bef5f67
+Ctrl.data = hexdata:7b21856d85c0ed268cd2bd0fc5065edfe078c97e03ede2cb7912ce7615763b94
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 977fc35f7a57f30e6509cb0a2ad9ad5cd1bc18d9d945ef3d6efede51ca727be6
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:4d1c1c060c37258aaeff7aa73976f61e09779ffb2c296558b32a951c9bef5f67
+Ctrl.data = hexdata:7b21856d85c0ed268cd2bd0fc5065edfe078c97e03ede2cb7912ce7615763b94
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = a0a444d95f34b3abd80fa9c61f00e522ebaaba9b0b392bce0d5bdd64c66faea8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:4d1c1c060c37258aaeff7aa73976f61e09779ffb2c296558b32a951c9bef5f67
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 6d6c5cc5e179e9b883aef10af16e9f7fdfe185514c5a17ba42de5ea4ce4636a9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:6d6c5cc5e179e9b883aef10af16e9f7fdfe185514c5a17ba42de5ea4ce4636a9
+Ctrl.data = hexdata:5212d18ab2b3f4749a2fdc8f7c5bfe86582c3ef4b82fd15e4fbcf679845a898f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = ae767de352cd5de70f06fa89c97c384f3114459d2d34358254536d6dc2a51a43
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:6d6c5cc5e179e9b883aef10af16e9f7fdfe185514c5a17ba42de5ea4ce4636a9
+Ctrl.data = hexdata:5212d18ab2b3f4749a2fdc8f7c5bfe86582c3ef4b82fd15e4fbcf679845a898f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = eadd1815582776d2af4c5b2459884f636c668ddb4f9de2a3c9d748f3d30c6c55
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:6d6c5cc5e179e9b883aef10af16e9f7fdfe185514c5a17ba42de5ea4ce4636a9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 87d23fc7cb12e158371709a0c492ac6b454ed1bd5d6f9034d8faf568d8388ea1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:87d23fc7cb12e158371709a0c492ac6b454ed1bd5d6f9034d8faf568d8388ea1
+Ctrl.data = hexdata:c326103e763f740bcfcf619cf5f6ed5516d73c58f73bb1a288ebe4c90f8a0376
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 05df2e13f0bbc39095a751653198fbd71316d60f0b0ff34a571be0f24a0110e4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:87d23fc7cb12e158371709a0c492ac6b454ed1bd5d6f9034d8faf568d8388ea1
+Ctrl.data = hexdata:c326103e763f740bcfcf619cf5f6ed5516d73c58f73bb1a288ebe4c90f8a0376
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 7548a168eadc002e00a9f6992464d89053a09fafe5455424043e88625f6aa1f5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:87d23fc7cb12e158371709a0c492ac6b454ed1bd5d6f9034d8faf568d8388ea1
+Ctrl.data = hexdata:c326103e763f740bcfcf619cf5f6ed5516d73c58f73bb1a288ebe4c90f8a0376
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 55d8638f0b4e4a8c0c86a3b499c1f5a22c4b763f74f34415852fe66f5b14fc64
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:87d23fc7cb12e158371709a0c492ac6b454ed1bd5d6f9034d8faf568d8388ea1
+Ctrl.data = hexdata:ef6958939a40f5a6da5514b25c61e65c785529da24b7abe4c2ff24de90e22865
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 91621081e013738d0565d87d48299f9663e9cb00ea10de8b4e524faed12b2549
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:10cd69a2ff07b9fc1b97f048ff04f76bde83ffa1b7c55a7c90f4a335c678e603
+Output = 1b658957e8bfcaa895101e83f6aed7ee70e09c1f9a712b98da9ec8f82072d62a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:1b658957e8bfcaa895101e83f6aed7ee70e09c1f9a712b98da9ec8f82072d62a
+Ctrl.data = hexdata:77c319274f0bee551e4ff02d35c109527430249982634b83620d555df1fc1b19
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 4a274d1c3ffb31ccfd02b822c58e22540a08e8805467949049c790523f22a521
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:1b658957e8bfcaa895101e83f6aed7ee70e09c1f9a712b98da9ec8f82072d62a
+Ctrl.data = hexdata:77c319274f0bee551e4ff02d35c109527430249982634b83620d555df1fc1b19
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = fd0c1024664dce62f20828f6523804b6c3cf8cac1d0c226ca82c216617749278
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:1b658957e8bfcaa895101e83f6aed7ee70e09c1f9a712b98da9ec8f82072d62a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = f99b6c3c1a03d0ec64964a6a49e9ce4d9580e923c0afbbf9c46928e990e4cf2d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:f99b6c3c1a03d0ec64964a6a49e9ce4d9580e923c0afbbf9c46928e990e4cf2d
+Ctrl.data = hexdata:09579596d89a7bc16f6208f1b65d0af814a2e7dc2b5752153b01ebd403835b24
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 649f88a321910f7e079515517de528f096ad00b460f700ca3a42249ffb0f198c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:f99b6c3c1a03d0ec64964a6a49e9ce4d9580e923c0afbbf9c46928e990e4cf2d
+Ctrl.data = hexdata:09579596d89a7bc16f6208f1b65d0af814a2e7dc2b5752153b01ebd403835b24
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 591cccb532575b11f3f7644305fc98b39b4ab5e857884b83f112eded0748d86c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:f99b6c3c1a03d0ec64964a6a49e9ce4d9580e923c0afbbf9c46928e990e4cf2d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 9e3829ca4efe839ce6518ecacbfb70699230a580c47d1593e7755663f42ab710
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9e3829ca4efe839ce6518ecacbfb70699230a580c47d1593e7755663f42ab710
+Ctrl.data = hexdata:4a78c3e4fdf496868bb144f02d5c8d751172fe3b31a2708a34a84b0035359216
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 3b5e42c71b7f84c0c533c5b33fb677e5dbd00fa19461643a9f9a28ac68d33a34
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9e3829ca4efe839ce6518ecacbfb70699230a580c47d1593e7755663f42ab710
+Ctrl.data = hexdata:4a78c3e4fdf496868bb144f02d5c8d751172fe3b31a2708a34a84b0035359216
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 0755417db746dbca652cac12fc9e272f2ee1d65b7ddb95be3a1458cc0feb7ceb
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9e3829ca4efe839ce6518ecacbfb70699230a580c47d1593e7755663f42ab710
+Ctrl.data = hexdata:4a78c3e4fdf496868bb144f02d5c8d751172fe3b31a2708a34a84b0035359216
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 7e518bab7a36df94f3e43c022300afcc5219c4a0b0353d7ec8d7b81a957fe8b3
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:9e3829ca4efe839ce6518ecacbfb70699230a580c47d1593e7755663f42ab710
+Ctrl.data = hexdata:05e757c9c7a0a88a5242f101a8b9813ff7c28cbb60f82fe8d64efb3b29e2a35f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 9df1f3a9a73ccf046ae832e6567f0381df1c279051d5e8d3d438533a8e3c286e
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:1d6a3ca45771b6de38bfa21ef1b18c7f392dc245a40a678638ff703bc429cdfa
+Output = e283b4a0c6dee0763a2a7c1b3e5079f94c2e442c4876bdb37f9b2410687819bd
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:e283b4a0c6dee0763a2a7c1b3e5079f94c2e442c4876bdb37f9b2410687819bd
+Ctrl.data = hexdata:b596924c279606af433ef8939cb7e2e8f22b1a4c58f868f5e9b8b66f89f95ec4
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 35379b66e3989f860493b7f1a19d35a6b1786ead286f058b291a9e45f154984d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:e283b4a0c6dee0763a2a7c1b3e5079f94c2e442c4876bdb37f9b2410687819bd
+Ctrl.data = hexdata:b596924c279606af433ef8939cb7e2e8f22b1a4c58f868f5e9b8b66f89f95ec4
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 3c06224ebfe816c633c1ca1785d1b9c234b41a050608cd24d3873f3e8caf3c6d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:e283b4a0c6dee0763a2a7c1b3e5079f94c2e442c4876bdb37f9b2410687819bd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 43081024ba4bc52ddbdaf075d2c0965e38521d0e2b43ad95235307ae567c4237
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:43081024ba4bc52ddbdaf075d2c0965e38521d0e2b43ad95235307ae567c4237
+Ctrl.data = hexdata:39f99c22b551a77eadb49cc2df00c0651bb847f678394c04a9663ff592122daf
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 9d2d1d2d3aef26d116c4e8ae64c9cfc785c34b4e48ebed03291c05d97fbed48c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:43081024ba4bc52ddbdaf075d2c0965e38521d0e2b43ad95235307ae567c4237
+Ctrl.data = hexdata:39f99c22b551a77eadb49cc2df00c0651bb847f678394c04a9663ff592122daf
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 8def30bd06498ab5d3687e1d5b7b255a4d8f0a350fff033e09fdedac103b33af
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:43081024ba4bc52ddbdaf075d2c0965e38521d0e2b43ad95235307ae567c4237
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = bdc1635b5a2efb9d40f948e1885ef7dafabb342924cb93d8b5a41ef6b1291749
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bdc1635b5a2efb9d40f948e1885ef7dafabb342924cb93d8b5a41ef6b1291749
+Ctrl.data = hexdata:bfd5d60816d0d8aaa054a0c9ebe667f08b885bde11a0d2440ea48ae3d539ffd8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = e45932f62656d9b4a4424d25b0dee0edc4dd7e5cd97ed559826ac2dc8753e234
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bdc1635b5a2efb9d40f948e1885ef7dafabb342924cb93d8b5a41ef6b1291749
+Ctrl.data = hexdata:bfd5d60816d0d8aaa054a0c9ebe667f08b885bde11a0d2440ea48ae3d539ffd8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 79e88b3776b65e1cf86e1652c1fa503b0fa9f425fb2d7f12ed980c82aea480d8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bdc1635b5a2efb9d40f948e1885ef7dafabb342924cb93d8b5a41ef6b1291749
+Ctrl.data = hexdata:bfd5d60816d0d8aaa054a0c9ebe667f08b885bde11a0d2440ea48ae3d539ffd8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = a99de25f23b4c3b53e0f94c20e4cacbf69449eb6662ede20ecaf80f4b3588549
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:bdc1635b5a2efb9d40f948e1885ef7dafabb342924cb93d8b5a41ef6b1291749
+Ctrl.data = hexdata:093be188157ab8ebdbc0862581178d451a89a496eec1d75a735c63745346d07e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 5d068f2083afa672d025b89c6883a7d47899352d1f534f757cf9d046f42f2158
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:b5c0634df696089d878e37b775c4c2f03f42748cec9dfc12661a8b888ed40685
+Output = c2fcc802a14192c660e7728d983b6f85a21a9e9e0bfb1cc5154db457e5153795
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c2fcc802a14192c660e7728d983b6f85a21a9e9e0bfb1cc5154db457e5153795
+Ctrl.data = hexdata:d4d8e30ea5e596830f165ab809b9c541383d621bf5502b83a27ed3ea2e570d2a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = cb5f4de81d60d9d8537b365b4311014a1380808c3b9c3a98a25dace58c0961c4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c2fcc802a14192c660e7728d983b6f85a21a9e9e0bfb1cc5154db457e5153795
+Ctrl.data = hexdata:d4d8e30ea5e596830f165ab809b9c541383d621bf5502b83a27ed3ea2e570d2a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 7aa5d4b291c159958c1781f0833e8dabf48ccd0d93553fbda644fea6ab1d730f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:c2fcc802a14192c660e7728d983b6f85a21a9e9e0bfb1cc5154db457e5153795
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = cde47edec9e5f1fb69819b0fc195360469a11af491b2b85bffa5fe3d3794f306
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:cde47edec9e5f1fb69819b0fc195360469a11af491b2b85bffa5fe3d3794f306
+Ctrl.data = hexdata:f0ef84594377b8878aec3361beccd2c701cd1fff0bb1d091bdc960dbcc03ed2d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = bd18fde839dd5b186595135f6cce58f544c35168753489956d3bfc1691fdc9ea
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:cde47edec9e5f1fb69819b0fc195360469a11af491b2b85bffa5fe3d3794f306
+Ctrl.data = hexdata:f0ef84594377b8878aec3361beccd2c701cd1fff0bb1d091bdc960dbcc03ed2d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = bd404aafe66f33b525da924eab5a01330eed5e6792c18a2733594efa5fbe1770
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:cde47edec9e5f1fb69819b0fc195360469a11af491b2b85bffa5fe3d3794f306
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 17dc622c65dd8b948cbd8dba752fbf1132fc689717ad9e7d57258e85cff6b4e5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:17dc622c65dd8b948cbd8dba752fbf1132fc689717ad9e7d57258e85cff6b4e5
+Ctrl.data = hexdata:47a04fbfcb7af70cd735ccd29f978db89ad2884a208f5e0a0efed6c78e21f93e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 4a28e31a44a9084c31045bab3cd9ca4bb7cc6c0a7a3339265919b6dbbf9bd439
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:17dc622c65dd8b948cbd8dba752fbf1132fc689717ad9e7d57258e85cff6b4e5
+Ctrl.data = hexdata:47a04fbfcb7af70cd735ccd29f978db89ad2884a208f5e0a0efed6c78e21f93e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 8f7bcfb0a364acb09af591dbfbd1f5d76a1b5da68eb86e22633e3d4ffd4ffb3b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:17dc622c65dd8b948cbd8dba752fbf1132fc689717ad9e7d57258e85cff6b4e5
+Ctrl.data = hexdata:47a04fbfcb7af70cd735ccd29f978db89ad2884a208f5e0a0efed6c78e21f93e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 3d5d45e78c540d05a19ee723ef075ff5c30e4e637af9075a519224751bf73cbb
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:17dc622c65dd8b948cbd8dba752fbf1132fc689717ad9e7d57258e85cff6b4e5
+Ctrl.data = hexdata:0f147eef330ea13e24db0e4f0f99ef57e226fcd893bcad0aa775736043a5678c
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 865f8cf4b1065211f6c79e2a269fc5d292c496389458ee1defdbdecdae3c178e
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c83e2d0710fea2c69df3ddb8e44ab8eff77b331b5bab68693150cb57024bb513
+Output = 670bf2a12c3b914a0251276f624e2b7b38056b989c4e4e48a6bd9d6e649329a7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:670bf2a12c3b914a0251276f624e2b7b38056b989c4e4e48a6bd9d6e649329a7
+Ctrl.data = hexdata:b91f2426c7a814aa728b0d066803bb5f5ba89053a107093525bd37b8a228bbe6
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = da288713ae469437c7d49934f87461dec0884cc1c075d0c2b80467c9b497493e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:670bf2a12c3b914a0251276f624e2b7b38056b989c4e4e48a6bd9d6e649329a7
+Ctrl.data = hexdata:b91f2426c7a814aa728b0d066803bb5f5ba89053a107093525bd37b8a228bbe6
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 9c4d05cc523e7486fa518512c15697e8da785182c9a07553d185634653ad57e1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3b2a40cdb43badc2354bbcab3232f150a29cdb6d701a4d954e53f93122ddb384
+Ctrl.salt = hexsalt:670bf2a12c3b914a0251276f624e2b7b38056b989c4e4e48a6bd9d6e649329a7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 0cb3b141bf3fc28050388dd84a2504e7cbebb715c0963f8291793ecf6d8bdff3
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:0cb3b141bf3fc28050388dd84a2504e7cbebb715c0963f8291793ecf6d8bdff3
+Ctrl.data = hexdata:106c8ade410c1a7972f9dcd60fde846a0652ad92dc3737120bceca0c3e316bac
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 11ca6d097742c16dd5b42af8508d46771fac61ad30120f1eeffd90b8c0ecb0d9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:0cb3b141bf3fc28050388dd84a2504e7cbebb715c0963f8291793ecf6d8bdff3
+Ctrl.data = hexdata:106c8ade410c1a7972f9dcd60fde846a0652ad92dc3737120bceca0c3e316bac
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 4305a71a34bdb5e0821501b4bdd271593ab82dd4532cc273fed3db050ac2c1b6
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:0cb3b141bf3fc28050388dd84a2504e7cbebb715c0963f8291793ecf6d8bdff3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 59714d40ada923b4bd6fcc27a4ace84d75003431b1b0ec496b786c15fd74345c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:59714d40ada923b4bd6fcc27a4ace84d75003431b1b0ec496b786c15fd74345c
+Ctrl.data = hexdata:8c22d8b59e26690f0279c8b079f3b1712544600a0e5e5aef21609a1544f0fd7e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 403399b9a3b3d8c729e488aedf59572057288184d845f65762965638d9044f02
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:59714d40ada923b4bd6fcc27a4ace84d75003431b1b0ec496b786c15fd74345c
+Ctrl.data = hexdata:8c22d8b59e26690f0279c8b079f3b1712544600a0e5e5aef21609a1544f0fd7e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 84c047db046fe61aff8a08b1baf4d2d19cc64e5d8520e0a7b0d53cf1c4a0d931
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:59714d40ada923b4bd6fcc27a4ace84d75003431b1b0ec496b786c15fd74345c
+Ctrl.data = hexdata:8c22d8b59e26690f0279c8b079f3b1712544600a0e5e5aef21609a1544f0fd7e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 4ff1809a55380799faac1c9e7795f61d2f2e8d94e05076a863cf0624b2f7910e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:59714d40ada923b4bd6fcc27a4ace84d75003431b1b0ec496b786c15fd74345c
+Ctrl.data = hexdata:b3a2661fca9d2bd11f011da167daa18d7d705dffae6987ef1410fa932543bbc0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = c5fced915b2f444eba12a1dbda3487a2054201378640682a3a668a1513f6a232
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:76d2def296a73bbbe2c0c58061fda9a8486a65fe0d25a312061a33de39665229
+Output = aad44b2999d3974a3a75f63b36380d3a4c1051b43054ff3681df46c52f3f7cab
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:aad44b2999d3974a3a75f63b36380d3a4c1051b43054ff3681df46c52f3f7cab
+Ctrl.data = hexdata:f2c3f79a329d8a0a0c71fdff27d21b4f5396cef54eee48e8d95823730af5c7cd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = d2a135057bcf8843aed48c7c37a8d891ca459ac6def66950c57cf849a60cad9b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:aad44b2999d3974a3a75f63b36380d3a4c1051b43054ff3681df46c52f3f7cab
+Ctrl.data = hexdata:f2c3f79a329d8a0a0c71fdff27d21b4f5396cef54eee48e8d95823730af5c7cd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 5c920375f607f4b1a179d31aff80074b3357108960051a22de8e001aa6979c0f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3313848ca37d8491646fd92c252257742d983c65090bc542c9a03fd4b26e9b1c
+Ctrl.salt = hexsalt:aad44b2999d3974a3a75f63b36380d3a4c1051b43054ff3681df46c52f3f7cab
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 3b7f06aab24b86a7e17d898b8f43c9460a3fa5b949db5e64de401efa2826daa9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3b7f06aab24b86a7e17d898b8f43c9460a3fa5b949db5e64de401efa2826daa9
+Ctrl.data = hexdata:68952fb6f6fab9968e16044c7d3d6e29f9b4cb969ea37d3b89317581242a51c3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 929e776e48697a19220f40bcdb91d17aa81c72609dad9e44ce504a9b1b1a3666
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:3b7f06aab24b86a7e17d898b8f43c9460a3fa5b949db5e64de401efa2826daa9
+Ctrl.data = hexdata:68952fb6f6fab9968e16044c7d3d6e29f9b4cb969ea37d3b89317581242a51c3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = ca770b94d778f80d7bf5e9c57385d311944074fc971d4509666d9fd2da082f6f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:3b7f06aab24b86a7e17d898b8f43c9460a3fa5b949db5e64de401efa2826daa9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = c1cbedf5f8e8b561dd21c9ae1ee2e82ded1fa8ca3dbd58b8dbe153a78f87c316
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c1cbedf5f8e8b561dd21c9ae1ee2e82ded1fa8ca3dbd58b8dbe153a78f87c316
+Ctrl.data = hexdata:94cc1ab5421bc914655d3c9b29c62257e3921357c251714f0603d97ecb6af5b4
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 9cbdcf2aab74218e206b09990759afacf0b0fc6e9663df2ef3b1be8baa04137f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c1cbedf5f8e8b561dd21c9ae1ee2e82ded1fa8ca3dbd58b8dbe153a78f87c316
+Ctrl.data = hexdata:94cc1ab5421bc914655d3c9b29c62257e3921357c251714f0603d97ecb6af5b4
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 68b56ade508cb9a80659247476e9bc51e11a2bf8996abcf31ef7ca40db8ce038
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c1cbedf5f8e8b561dd21c9ae1ee2e82ded1fa8ca3dbd58b8dbe153a78f87c316
+Ctrl.data = hexdata:94cc1ab5421bc914655d3c9b29c62257e3921357c251714f0603d97ecb6af5b4
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 99b1731836e008fce195b2656a978653fab931ca7568538ea445e07758eaec3e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:c1cbedf5f8e8b561dd21c9ae1ee2e82ded1fa8ca3dbd58b8dbe153a78f87c316
+Ctrl.data = hexdata:9d6de017899f4866cf158fbcdff17f9be461b515424fcc68983ea14199b4f93e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = cfa68b4390998107c071a7a7f05aeaa67c399fbc74ae078d239953d97a9b192c
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:84e4720169f84d06305f31d48bc80c38533262092dad037431595504652ad812
+Output = e8634fc371ec5aeb3e610dfaaa37f5d5964a3518a7c50dc02daeb409b5813a67
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:e8634fc371ec5aeb3e610dfaaa37f5d5964a3518a7c50dc02daeb409b5813a67
+Ctrl.data = hexdata:629f374f2fbca62af9a940e8dbfa469605239b9af3d1a9ad870a5d09aa828d4b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 4de207e64746e30b0422f9f61bb0d62f3e1559685a5b6231491dbedd7e7d3c70
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:e8634fc371ec5aeb3e610dfaaa37f5d5964a3518a7c50dc02daeb409b5813a67
+Ctrl.data = hexdata:629f374f2fbca62af9a940e8dbfa469605239b9af3d1a9ad870a5d09aa828d4b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = f98601cd853b472676a12f4d2b0ed496ded451aa7255f2261d9bc6b0e1831e26
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:0130ef5db75ffa78e0dd43c3c61d887a9153044d2ac8fe4046bb2b0c38034715
+Ctrl.salt = hexsalt:e8634fc371ec5aeb3e610dfaaa37f5d5964a3518a7c50dc02daeb409b5813a67
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 45d0bc957523624818445ac480848850e07fb050d8d58a62614526c7b6f6a3cf
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:45d0bc957523624818445ac480848850e07fb050d8d58a62614526c7b6f6a3cf
+Ctrl.data = hexdata:cb3e464901236370574fdb6e62e3578d6d055b13352bb009c7524be5046fe3f0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 5e827d8f0a5198f40ce9a179220c64a5be7ffbb7238a7ce3924af12435517829
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:45d0bc957523624818445ac480848850e07fb050d8d58a62614526c7b6f6a3cf
+Ctrl.data = hexdata:cb3e464901236370574fdb6e62e3578d6d055b13352bb009c7524be5046fe3f0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = cd3650173b74032cd5923eedd2ca939f4986071612025a3931fcbdae424c3fe0
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:45d0bc957523624818445ac480848850e07fb050d8d58a62614526c7b6f6a3cf
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 305e840032f79d5fc438a556f9c2a0aed6e63ba96dee4dbbcc46e3cd5254e52d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:305e840032f79d5fc438a556f9c2a0aed6e63ba96dee4dbbcc46e3cd5254e52d
+Ctrl.data = hexdata:05bb66eae94bafe82cbc264ce33f66a4259d1003910333ecd9d70a0dc6676280
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 87c29eb07ed9d69f4f17d19dbe7d792c96243bcbab5a6ad674d476ab2723f3e9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:305e840032f79d5fc438a556f9c2a0aed6e63ba96dee4dbbcc46e3cd5254e52d
+Ctrl.data = hexdata:05bb66eae94bafe82cbc264ce33f66a4259d1003910333ecd9d70a0dc6676280
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 1bea4e5a0cce346fcf3784bbea219060a733bb9b3d9fbcd51b230df79e7bbaf7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:305e840032f79d5fc438a556f9c2a0aed6e63ba96dee4dbbcc46e3cd5254e52d
+Ctrl.data = hexdata:05bb66eae94bafe82cbc264ce33f66a4259d1003910333ecd9d70a0dc6676280
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 56ad7e5af0a0c80dedf12d1206d731527e4a19d821ca666b887532da4dafddc2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:305e840032f79d5fc438a556f9c2a0aed6e63ba96dee4dbbcc46e3cd5254e52d
+Ctrl.data = hexdata:2f35a4e79e594f9552231c0a20b1c044f335970e1672fcd232ee080e0b1003d5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 439199cbd6c133c77a01fd46314381dac23f9f75bc25a5b6bd3a0c3ae65c213a
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:846579bee2d8787197afac0ad73a05ace42fdc88973863867f7034edaaa67bab
+Output = f2f46cf85e6dc82602eb1169a27aaa17185af5fc26ac8b4cc466f9be2f1b3882
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:f2f46cf85e6dc82602eb1169a27aaa17185af5fc26ac8b4cc466f9be2f1b3882
+Ctrl.data = hexdata:09183dfa8773dbcbcf4e956f909e91f9dc01134b4f3e478c2e9157c74610d4a9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 539cbdca2eea93fb99498a1828d74e538110602331ca05e2e0a33904dbacc7e0
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:f2f46cf85e6dc82602eb1169a27aaa17185af5fc26ac8b4cc466f9be2f1b3882
+Ctrl.data = hexdata:09183dfa8773dbcbcf4e956f909e91f9dc01134b4f3e478c2e9157c74610d4a9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = c5eed5ccc461fc4eed16ba2d4e73e61ee5e1e65fd37e4c683f754f69300b9d0f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:0dc18e5c75390fcbff95fd629727fb8561efc9dbf88875aa37e59b204876d016
+Ctrl.salt = hexsalt:f2f46cf85e6dc82602eb1169a27aaa17185af5fc26ac8b4cc466f9be2f1b3882
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = a308d6301c37989245c04c359fbc2cf2b07f8c4344bf37604cdb27c0e631a3ee
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a308d6301c37989245c04c359fbc2cf2b07f8c4344bf37604cdb27c0e631a3ee
+Ctrl.data = hexdata:439b9eb6fc068e5c2709a044c98073d498d3151eab2237fc285093c6486fae8d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = d2ac822767a490a8087be7adcbcb2e213a98c5bed4a54c827ad2fc19ac0084e1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:a308d6301c37989245c04c359fbc2cf2b07f8c4344bf37604cdb27c0e631a3ee
+Ctrl.data = hexdata:439b9eb6fc068e5c2709a044c98073d498d3151eab2237fc285093c6486fae8d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 06613eeefdc210ff2624820604ae88d7160de324b8bfbb279b40bb0caea4b251
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:a308d6301c37989245c04c359fbc2cf2b07f8c4344bf37604cdb27c0e631a3ee
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 36c02d8a722e424007309cf655c90d735ce618e7d3586a4c430253f3467e7ece
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:36c02d8a722e424007309cf655c90d735ce618e7d3586a4c430253f3467e7ece
+Ctrl.data = hexdata:a0fe2ba2eee7dfc1431e4a0098f17146ccf75d424d4df5a325b10b130ca8a140
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 382e756a88f3dde4b775bc30064877563716e48e05c70382c4b4717b804f7900
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:36c02d8a722e424007309cf655c90d735ce618e7d3586a4c430253f3467e7ece
+Ctrl.data = hexdata:a0fe2ba2eee7dfc1431e4a0098f17146ccf75d424d4df5a325b10b130ca8a140
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 08fbcf658bf0ccd792bf9486c8304d5cec3e066fb310e14c642b5e838a80cec2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:36c02d8a722e424007309cf655c90d735ce618e7d3586a4c430253f3467e7ece
+Ctrl.data = hexdata:a0fe2ba2eee7dfc1431e4a0098f17146ccf75d424d4df5a325b10b130ca8a140
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = af263cbe584c6257872182e4259e90dacce4e857c0971e63e90ef68313241f09
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:36c02d8a722e424007309cf655c90d735ce618e7d3586a4c430253f3467e7ece
+Ctrl.data = hexdata:db71bdb1435bf594988f4288e9c8aa9d1ffc400d3b74a8f166dfff72ac2d251e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = f79d066e915aa9fdc491b522536fd389309d93b9e386adbeabf276bc18826a4d
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:1c48bc355454d145972bf3e2fea127c34443a214ca2df0873d78db5610fd5598
+Output = 4c0857f54a8332d09dfdd41043a87d758b2ffb86bff9ab972ba9c0afba25b017
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:4c0857f54a8332d09dfdd41043a87d758b2ffb86bff9ab972ba9c0afba25b017
+Ctrl.data = hexdata:a65f378bd6b9e498256afc30f268d87f2b93e95925e361f5a5f35198457bd3f0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 6e9db9369095c899626c20463ddd98d1885e41dac533981bb0d0352ef9874697
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:4c0857f54a8332d09dfdd41043a87d758b2ffb86bff9ab972ba9c0afba25b017
+Ctrl.data = hexdata:a65f378bd6b9e498256afc30f268d87f2b93e95925e361f5a5f35198457bd3f0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 93877fd5a8a4b5323b8561cfbb0e7cff34d63db1f6c0783de9edaee832a93026
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:ca08248684cb6529a53900f08a28734f5722193c21e8b01b99b968a4711f67e6
+Ctrl.salt = hexsalt:4c0857f54a8332d09dfdd41043a87d758b2ffb86bff9ab972ba9c0afba25b017
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = e60e0c3fc3dc3c54964089b1211fda1e217e9ef7df4b37611fefca1309550da9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:e60e0c3fc3dc3c54964089b1211fda1e217e9ef7df4b37611fefca1309550da9
+Ctrl.data = hexdata:4b485da6cf1df86af0757b10a0f99d422a667444c42ea732c1ad9eb91b8a1200
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 18764172b9bf192527e7640b553c49785f49b17c139aec41d9ca711ad5c5aaa5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:e60e0c3fc3dc3c54964089b1211fda1e217e9ef7df4b37611fefca1309550da9
+Ctrl.data = hexdata:4b485da6cf1df86af0757b10a0f99d422a667444c42ea732c1ad9eb91b8a1200
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 07f5837669456a7a5cbadb1f88e8faa50a620e1a0577ef3c4304f4679596ba4d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.salt = hexsalt:e60e0c3fc3dc3c54964089b1211fda1e217e9ef7df4b37611fefca1309550da9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 5d0803e36d1597791f4cbbe23b21571776ac0319e8e4f7023254a8d412dd6c0b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d0803e36d1597791f4cbbe23b21571776ac0319e8e4f7023254a8d412dd6c0b
+Ctrl.data = hexdata:5cef22380661440bbbe9d74f573a9329345481843b2512ef1a9a4f5d0d263f78
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 1f145b433d726ad8aed2b3d7a91dbf7dfee700a3a82650c496785c898b7be0f8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d0803e36d1597791f4cbbe23b21571776ac0319e8e4f7023254a8d412dd6c0b
+Ctrl.data = hexdata:5cef22380661440bbbe9d74f573a9329345481843b2512ef1a9a4f5d0d263f78
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = ba32a25990ad0d52861f0e24e283b1bf2f229c14649867415b8d0ac3c1d55b8e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d0803e36d1597791f4cbbe23b21571776ac0319e8e4f7023254a8d412dd6c0b
+Ctrl.data = hexdata:5cef22380661440bbbe9d74f573a9329345481843b2512ef1a9a4f5d0d263f78
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 8d95c36d97d0d724a4a925d30db54fa9a00a7f40491617149f354f6a22abde69
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-256
+Ctrl.key = hexkey:5d0803e36d1597791f4cbbe23b21571776ac0319e8e4f7023254a8d412dd6c0b
+Ctrl.data = hexdata:9581b3ed9dff21ace07228323489626f403dda4bf997885e80e23edaaa988d52
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 62750f7ddf116735e656c7014c9243b6c57a84f0ba6088f28deea97a91c6f2d3
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:910113657bdc298e97ebedd20511eb096f973f55fee0fcbb2d9cb5a686e7ed200ed417839066bbea4c05209434590daf
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = b7af828d2d478d384d2a3c49e4068156de9ecefce3deebf281e2cb0947cd83dd28d1472bcf4b0484a9e2fd3b33d3cb81
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:910113657bdc298e97ebedd20511eb096f973f55fee0fcbb2d9cb5a686e7ed200ed417839066bbea4c05209434590daf
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 98aaaed14b4ea329d9e1c2c4ae4e1c9fc74b58ca5748acb35be214cc106e23675ba8e7e95bea77aabdcaff37b7180953
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:69ebe2a6f0cbc6bda4f1fca02786df58a9abde209e15ca02ed167ecdaabaf78c26
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 19ff34d4b42a1a7066b34d60e3bfde4458eba1efd3fcd6ef1971824ca56468c1fb2cd35acc7e3ffbe95b3e59855c0b15
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:19ff34d4b42a1a7066b34d60e3bfde4458eba1efd3fcd6ef1971824ca56468c1fb2cd35acc7e3ffbe95b3e59855c0b15
+Ctrl.data = hexdata:53d60b426068e463f9d09308a007d0ef27bc8d2001f045afa2d7a3888d47b1d774ab3e7102ab901065b8e242dac6722d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = c087814576d3a18ec8cf9d7e0fd4e720f0e32cada8bbfc59d048376d57334ac6847dc2f2e642fcd5f100e187d728c626
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:19ff34d4b42a1a7066b34d60e3bfde4458eba1efd3fcd6ef1971824ca56468c1fb2cd35acc7e3ffbe95b3e59855c0b15
+Ctrl.data = hexdata:53d60b426068e463f9d09308a007d0ef27bc8d2001f045afa2d7a3888d47b1d774ab3e7102ab901065b8e242dac6722d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 0d6a7b15387fb7d8a748a07ddd4b6dc3ed9854410cb6c18515d013a8b0496cb3df1bbad7fa4ca64bec04e42362315269
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:19ff34d4b42a1a7066b34d60e3bfde4458eba1efd3fcd6ef1971824ca56468c1fb2cd35acc7e3ffbe95b3e59855c0b15
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 5fc2bcd2dc4427578c82386ec0a44b5837da7a7560ec9890609b0ce626d79263364adddeedb046b494da9daed06c2de8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:5fc2bcd2dc4427578c82386ec0a44b5837da7a7560ec9890609b0ce626d79263364adddeedb046b494da9daed06c2de8
+Ctrl.data = hexdata:fbb73fd2d7c15c8ce25627f3ca7d61d1facebcfb6f9386c692479521a96973499ec24db280a12fc7bb83bfe32dc0a9ca
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = eb4e606e2198835b8733a026ef1c97bd7a8df3da598f32494ebc5809cf697c7999e0154c56399a60ec20b705d50ed9e0
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:5fc2bcd2dc4427578c82386ec0a44b5837da7a7560ec9890609b0ce626d79263364adddeedb046b494da9daed06c2de8
+Ctrl.data = hexdata:fbb73fd2d7c15c8ce25627f3ca7d61d1facebcfb6f9386c692479521a96973499ec24db280a12fc7bb83bfe32dc0a9ca
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 580bb4a16e81ba7b21b1ae7688037bd76684dd8e5e1e9254732685acdcd44dd1a1ce8126815fcdb42f47ac6d8ac7d4b0
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:5fc2bcd2dc4427578c82386ec0a44b5837da7a7560ec9890609b0ce626d79263364adddeedb046b494da9daed06c2de8
+Ctrl.data = hexdata:fbb73fd2d7c15c8ce25627f3ca7d61d1facebcfb6f9386c692479521a96973499ec24db280a12fc7bb83bfe32dc0a9ca
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = caa396d3f1b8bfce67752855df1b5150b34613f74d6f02d6f1c3d07cf1f64b1c69d8e4cb129de293de5addca635467c9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:5fc2bcd2dc4427578c82386ec0a44b5837da7a7560ec9890609b0ce626d79263364adddeedb046b494da9daed06c2de8
+Ctrl.data = hexdata:37543f85f9c51e29d5bf1efeb8e82d35633fc1e53a6947453f579cbf3424e036b2d287b068079f9852cb2ed0b1577f65
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 0cd8131737f5411766ae31c739a8cf9c6156623c7e8a61960b368469db3df24be159f0dc3ea33489db810edfa38798bc
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:a807a39d8f59bcad113f00464839a49f2ea7bb3bf10ae124e706cbaef8438a69529d0423049659f41ca3bc879f135714
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 9ea652bed125a4f5eb038bb92b45bb2206a885536280cdd33dc04837b9f243ce60ac08f6a1b60e410e1cbe6da2d1bfa5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:a807a39d8f59bcad113f00464839a49f2ea7bb3bf10ae124e706cbaef8438a69529d0423049659f41ca3bc879f135714
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 379bac9dbc4c02bd651db88b2109402259526992a6be8051052046baafabfcba43ecc95b85b212eefeb82abb9bf6342c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:afd957f59d3891c7dc0274a3f017f1002e81694fdc48890f9b1f174eea8335ab20
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 040af5bc880d44dad19c2960264c1f495f6e3a06096aec1787032169797f66f4167cbbba2c2a78748ce7117baf8e7bac
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:040af5bc880d44dad19c2960264c1f495f6e3a06096aec1787032169797f66f4167cbbba2c2a78748ce7117baf8e7bac
+Ctrl.data = hexdata:fee3918af93355c76f410e931147484daebf34d71a32e819f92f294e083880113542ae4f2046bd047abee01919723690
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 8cf001ed150ee074eef37bc5ed369b46e5f47b022cdafc1feb8b506037983e2d7344ee7836348d66ad945507adea2852
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:040af5bc880d44dad19c2960264c1f495f6e3a06096aec1787032169797f66f4167cbbba2c2a78748ce7117baf8e7bac
+Ctrl.data = hexdata:fee3918af93355c76f410e931147484daebf34d71a32e819f92f294e083880113542ae4f2046bd047abee01919723690
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = f920e99ce8b8765d9a4656ee00da97d5c26f9c9194202de256a27be7414ef6292bd0694ec07b6a7ceb50d31cec440645
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:040af5bc880d44dad19c2960264c1f495f6e3a06096aec1787032169797f66f4167cbbba2c2a78748ce7117baf8e7bac
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = e131d6c67661e34de72558ea5176e3bc791cac2225fe62978aa0717c8e9b36c5e1341caaa118dd02e774b2138c460694
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e131d6c67661e34de72558ea5176e3bc791cac2225fe62978aa0717c8e9b36c5e1341caaa118dd02e774b2138c460694
+Ctrl.data = hexdata:963e5b5cdf40ed5f735727034dfa1440f34866d5dc7cdd573ce4e93e75bc9570dcff0ce7ab6ad393c8d6984d5bf7868b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 7053327731504219b522361396d6aba6d401bb4b5eabb9d05065c97b30b1cf704418740437b5afe6f4c3e1663d4fb602
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e131d6c67661e34de72558ea5176e3bc791cac2225fe62978aa0717c8e9b36c5e1341caaa118dd02e774b2138c460694
+Ctrl.data = hexdata:963e5b5cdf40ed5f735727034dfa1440f34866d5dc7cdd573ce4e93e75bc9570dcff0ce7ab6ad393c8d6984d5bf7868b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 9b8e8196e2aaf0e1d8840fff8d17f7b2911a4f8cfd06a30d05a28792b4c6800bd0f0bac01552945733e7995ec67573f3
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e131d6c67661e34de72558ea5176e3bc791cac2225fe62978aa0717c8e9b36c5e1341caaa118dd02e774b2138c460694
+Ctrl.data = hexdata:963e5b5cdf40ed5f735727034dfa1440f34866d5dc7cdd573ce4e93e75bc9570dcff0ce7ab6ad393c8d6984d5bf7868b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 48f982ca8046c850fe5431eee4c043e78c0a96c7ba87dcc97b9afc69ae2d0dd18f9fd2054f811976774098a91f7917b2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e131d6c67661e34de72558ea5176e3bc791cac2225fe62978aa0717c8e9b36c5e1341caaa118dd02e774b2138c460694
+Ctrl.data = hexdata:5f458dd3261694b6a3f57918a94dfeb7c77851441bfee4dd2d118051abdb945d37c74bee575fe52d71d6ff696991893a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = f3a292849c0daa0abf9257cdd5b5c2f92092a904a80f017d1020fbe33637e2733d583332aa212d942d70f7fe30f15677
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:02b9fd278f70225406d715dd78eb54405fd19f9556e4a8a77882c6a63f9dc220944f27030c78ac1262e382fa95feb5c8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 3cec2e60c6386fa9edad0635132eab0ece3eee9bd71e8884813cca61d3da3a7dfbfd9a4775a9e69510fb9455cd9bdcd9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:02b9fd278f70225406d715dd78eb54405fd19f9556e4a8a77882c6a63f9dc220944f27030c78ac1262e382fa95feb5c8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 80c3e31156ad5bfd762b27d3f30bfa8a12f26eb0eb41ffe5cb155187b9a50178856f54e97076bb57518caad873cbd9d3
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:0ccc950ef8aa96c6b282e24741769bfb271d08a8b59324f6b08c6ef700d9a57049
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = af0b91b6da3e203922eeb31f60926c0706c8a1faa6428599c9d2f6456b91aec153ef978c93a949e4d40e45afc98fd3ef
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:af0b91b6da3e203922eeb31f60926c0706c8a1faa6428599c9d2f6456b91aec153ef978c93a949e4d40e45afc98fd3ef
+Ctrl.data = hexdata:44aee84be26ed9e08590afc301ef29fe2c6ce1aeba54004b4840f2d42433edc310a4401545cc80c0db2adbc7764dc5a1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = cf114347819d9818f848be8662e1d88125558b48c5aa85b9fc51cb21934eaf6821c281beef7e8daece6ab7e48bdde433
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:af0b91b6da3e203922eeb31f60926c0706c8a1faa6428599c9d2f6456b91aec153ef978c93a949e4d40e45afc98fd3ef
+Ctrl.data = hexdata:44aee84be26ed9e08590afc301ef29fe2c6ce1aeba54004b4840f2d42433edc310a4401545cc80c0db2adbc7764dc5a1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 531d87cc6e5319d60dd7b3b068249930572459219ec6d7dac14ebe6e79619f21a2cc370086f2090ac52e4e361d715ca5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:af0b91b6da3e203922eeb31f60926c0706c8a1faa6428599c9d2f6456b91aec153ef978c93a949e4d40e45afc98fd3ef
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 93fcd922322a65134cbb01574797abfde8d5d0dab98d362646fa625d3a970ff5030d8f92b6fc0d2920bb600fd10ef3f2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:93fcd922322a65134cbb01574797abfde8d5d0dab98d362646fa625d3a970ff5030d8f92b6fc0d2920bb600fd10ef3f2
+Ctrl.data = hexdata:93aee4415cb45f8548045fbc1b0391edbb837d6e8fe73958c951e30347490957b71642f43249ae13c4d0f36955fa2c29
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 92f638eaff114606821a19f881474502b3e761f70dc6b942280fbf2bc2b37976b4dc9c92bedb3c62e0a57d0d51259f75
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:93fcd922322a65134cbb01574797abfde8d5d0dab98d362646fa625d3a970ff5030d8f92b6fc0d2920bb600fd10ef3f2
+Ctrl.data = hexdata:93aee4415cb45f8548045fbc1b0391edbb837d6e8fe73958c951e30347490957b71642f43249ae13c4d0f36955fa2c29
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 4d46be5133166d6b700177efc6ae82d6f35532d2bb5e25b7e8dc4cccbe8f3a2c232002e3ed88dea06bdfe637e7f87f65
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:93fcd922322a65134cbb01574797abfde8d5d0dab98d362646fa625d3a970ff5030d8f92b6fc0d2920bb600fd10ef3f2
+Ctrl.data = hexdata:93aee4415cb45f8548045fbc1b0391edbb837d6e8fe73958c951e30347490957b71642f43249ae13c4d0f36955fa2c29
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = bc93830f69c49b15adec691b878ad08eba5bef6e721464dca985473456864231bde995571e9a3762d5db89c9e76f792b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:93fcd922322a65134cbb01574797abfde8d5d0dab98d362646fa625d3a970ff5030d8f92b6fc0d2920bb600fd10ef3f2
+Ctrl.data = hexdata:6847a6b4f5923482be779c96ab86e9f0e05d8b50d3deaa160f9806e53021d0eaac196371f01b0e523def730935ff5d60
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 35dae76a13277d942955c4a0ee6f03d540493184bb609be848d5ce0e0b3bdabfb62028e60eb006c1ef4dbcd5b5706e79
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:0bb979afa49117daa4a48360472aef44c6ba3d8fb56ff276e6c54aafd5d975c79880dece805db219641fc36bd2e0163e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 8523607e3e5c9af1847211985f78397ead777b35d4b105c5176593131f3530709c60c8585b44250d770a4635db1a9980
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:0bb979afa49117daa4a48360472aef44c6ba3d8fb56ff276e6c54aafd5d975c79880dece805db219641fc36bd2e0163e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 638a7cab97994346d8a0cbab1a2d62ab83c924d91a8e4cd0df1dfa5e2803ff0770d41dd5000a2e0794e06aedfa52e43c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:cd6f89d27bd11c9256080283dbce48f51375f74ae31658cb811c0bf8f991f11311
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = a0fe7ee6173a30d2db09b9a3e6edf578bd78be4490e6f67ceb4f0325de123065ab1ef4aa8c4885fc410be0d537f4f113
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a0fe7ee6173a30d2db09b9a3e6edf578bd78be4490e6f67ceb4f0325de123065ab1ef4aa8c4885fc410be0d537f4f113
+Ctrl.data = hexdata:f76083df586b29987add3fdef9656d763e2cedb1acfa6a8a2fc9bf0a3f8d89b9f4945bf31614239f224656f24f101a31
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = dfc278a206e08140fcfab6dbd56687bbf8279e5669c5272dc737654db955168de3e796c1b96dbd5f54ef31e578e228b1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a0fe7ee6173a30d2db09b9a3e6edf578bd78be4490e6f67ceb4f0325de123065ab1ef4aa8c4885fc410be0d537f4f113
+Ctrl.data = hexdata:f76083df586b29987add3fdef9656d763e2cedb1acfa6a8a2fc9bf0a3f8d89b9f4945bf31614239f224656f24f101a31
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = cf79486a3d6be7736df39ea7127b32b6968f7cfed044f6f1fea84cd63361e11582689aa5b9c082c93c466e9265094da5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:a0fe7ee6173a30d2db09b9a3e6edf578bd78be4490e6f67ceb4f0325de123065ab1ef4aa8c4885fc410be0d537f4f113
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = e69381a54a5236afa62a0fa2c97e39b52adb6cfe6811528af49c2888b196dece1df819a59e4b71f249455a585183d43b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e69381a54a5236afa62a0fa2c97e39b52adb6cfe6811528af49c2888b196dece1df819a59e4b71f249455a585183d43b
+Ctrl.data = hexdata:383c7df1b7d34be920a4d9f9ac4ff9d9a8d0f3cf482983c1992270629ba70fcdb6d9fe80a24cee997a233596ad78a306
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 5f3cdcf3ba4ace0797f4057bddc682a08fc87f8dc1fc22ea081881bfdb4d12e304339ee2afd4de9d5f532656fab410a5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e69381a54a5236afa62a0fa2c97e39b52adb6cfe6811528af49c2888b196dece1df819a59e4b71f249455a585183d43b
+Ctrl.data = hexdata:383c7df1b7d34be920a4d9f9ac4ff9d9a8d0f3cf482983c1992270629ba70fcdb6d9fe80a24cee997a233596ad78a306
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = ff655c4b338b8db54474a5f810cef029c9fcd96f7b264818692695373f74585f20584fbf434d200f2b47862a797ed052
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e69381a54a5236afa62a0fa2c97e39b52adb6cfe6811528af49c2888b196dece1df819a59e4b71f249455a585183d43b
+Ctrl.data = hexdata:383c7df1b7d34be920a4d9f9ac4ff9d9a8d0f3cf482983c1992270629ba70fcdb6d9fe80a24cee997a233596ad78a306
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 78a1e7c8f28704c2dc74ad35cfa88d79858449099daa274ff6fbc8c7ab60a00949e7c91f50bcc2f351af349fa1f4d912
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e69381a54a5236afa62a0fa2c97e39b52adb6cfe6811528af49c2888b196dece1df819a59e4b71f249455a585183d43b
+Ctrl.data = hexdata:5d469943c925e80019b2e5e7c0556cfef6e6184125a1e9f1455fe7df95f8efbb5298f033c7a34a0433af8c804d4d08c8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 17fccc64a56ff0967de7552a4dbe131eba2fea98dab6ea1d8b53fa86ae73b6ba837d989080c2f3cb7199b533fcddca0f
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:a6189f3e10d03aded1fc28843f6a903ecc311595a9b65dd9099dd7fe00a495be739865040a612f8050cff809f20e1b20
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 7b4fbea544f26b5a16a26b9b9b45a76531871daca970f56fe121de31a718abfca41c041d0c7a5da3c65e6635e40a53a5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:a6189f3e10d03aded1fc28843f6a903ecc311595a9b65dd9099dd7fe00a495be739865040a612f8050cff809f20e1b20
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = bd94d381832c448f4ba15c98343152382b61903d0f4644ef19ce53a75507a3eae68cc24114aa67c6a6e42a20f9358e1a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:6829094ea40dfe78cb9936cf95eff5888ebbdb087bb287b890ad2ab124f64d222e
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = f4559befac6c1502888c6f9c643a394d2e14431b87c7610308dacf7b51d391f3dcea4589e0f29a513b7cd545cbe90a43
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f4559befac6c1502888c6f9c643a394d2e14431b87c7610308dacf7b51d391f3dcea4589e0f29a513b7cd545cbe90a43
+Ctrl.data = hexdata:b0c437bab8cc1d0cd8e0bf85f0b8d26f9e7585646b331a0c45065239dd1e7565b9988f7e8f8ea2912a015b2163481f3b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 11edee9dd7f7f70a1106b9db5096cb55acc0ddedbac1c042c9bbcc9ec95f60c7428af61fcb30f83e9f324a1d0833f743
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f4559befac6c1502888c6f9c643a394d2e14431b87c7610308dacf7b51d391f3dcea4589e0f29a513b7cd545cbe90a43
+Ctrl.data = hexdata:b0c437bab8cc1d0cd8e0bf85f0b8d26f9e7585646b331a0c45065239dd1e7565b9988f7e8f8ea2912a015b2163481f3b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 7836f550debcc3933937f7d04fc6a5d5150f220a5bd6ea6c743aa843027ea8c97220b79f746d08f8504a61f7b5815e11
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:f4559befac6c1502888c6f9c643a394d2e14431b87c7610308dacf7b51d391f3dcea4589e0f29a513b7cd545cbe90a43
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = aeac9809af9a91381fd637dcd94738985b2183e20f799ff8f8493feab9710f941ebc100c37e44938dad9cfa3b5952b02
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:aeac9809af9a91381fd637dcd94738985b2183e20f799ff8f8493feab9710f941ebc100c37e44938dad9cfa3b5952b02
+Ctrl.data = hexdata:b006f4dfe30e7375c58ae7ab7309b10774466d1ce0f785b71ecf8d653e6a02767f29739b34f2f624b8cb8d074cc0808d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = b13cde3c6dce710537f6eaa538feef006710081d4f600e2fe3e54c82c217db99cb0d616b79b43f0a3b4c6d477f379432
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:aeac9809af9a91381fd637dcd94738985b2183e20f799ff8f8493feab9710f941ebc100c37e44938dad9cfa3b5952b02
+Ctrl.data = hexdata:b006f4dfe30e7375c58ae7ab7309b10774466d1ce0f785b71ecf8d653e6a02767f29739b34f2f624b8cb8d074cc0808d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = f31d0fc7abc50b7b4e671eb15441b559d635f928b3fb406362107d6312aa2aee8e6edc5904f275e145bf699b43e91dc9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:aeac9809af9a91381fd637dcd94738985b2183e20f799ff8f8493feab9710f941ebc100c37e44938dad9cfa3b5952b02
+Ctrl.data = hexdata:b006f4dfe30e7375c58ae7ab7309b10774466d1ce0f785b71ecf8d653e6a02767f29739b34f2f624b8cb8d074cc0808d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 18dd5faaa96109c04f4f1ebb454b259aeedf288938c75bcb53213789d5efb450cb068e7fc82f8ddf934108390d1b8824
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:aeac9809af9a91381fd637dcd94738985b2183e20f799ff8f8493feab9710f941ebc100c37e44938dad9cfa3b5952b02
+Ctrl.data = hexdata:097d40e52726a966258ad8860a005bfc09d00502ad4a8bd741188d95a1501bc2468bb4ace05aa6cccb3ce0664de814a6
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 3b5fc3f285bb93f59aa710cd294443a8e2835ebe170ef653222ca38bbacbff38251a836f8fd0705c9e734f547d89b5b0
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:8d552361c11a65c87f2118e14bd4fb35b3a3191bb3ae6b4877e4d6a8ee7a221956f4
+Output = 4820ed67366026f4c3deb5709470ba3fd1101224f484195c6008c3e4a92282c60f008e5fa22a88e8d4cf238c0f634a30
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4820ed67366026f4c3deb5709470ba3fd1101224f484195c6008c3e4a92282c60f008e5fa22a88e8d4cf238c0f634a30
+Ctrl.data = hexdata:144f8d45a013c35156c2337c3ed5e888d19f9d52372e95e1d25b908cee682b6637ee17d627badaed40c8782e41790c52
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = b6aeb75145d044afb9091680cc3e1c94e0ad92994f5986e5cfb0441d12bad5be3727b6d41e16a395704fd30e4a04f28a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4820ed67366026f4c3deb5709470ba3fd1101224f484195c6008c3e4a92282c60f008e5fa22a88e8d4cf238c0f634a30
+Ctrl.data = hexdata:144f8d45a013c35156c2337c3ed5e888d19f9d52372e95e1d25b908cee682b6637ee17d627badaed40c8782e41790c52
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 9eaa4fb09fb6cd5c94c0ead11d065c0fe846bad38098b9afaa258682e3f9ab0a6f2c14fedec5a9733d08814ce2c9484f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:4820ed67366026f4c3deb5709470ba3fd1101224f484195c6008c3e4a92282c60f008e5fa22a88e8d4cf238c0f634a30
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = fa9580b220e7aebc4bd623b9c2d402d060f47bfb32b8e86c4f69b6184282af4b513d58d7759397316e0e570c475d34b0
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:fa9580b220e7aebc4bd623b9c2d402d060f47bfb32b8e86c4f69b6184282af4b513d58d7759397316e0e570c475d34b0
+Ctrl.data = hexdata:40912a3cdc9623d86e6db201b56afe6a354335d9635b1c2478db75bb4a83554b3aef392205d0f226485db014ac22ad3b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 3edeed16646bfd7c54b088155f2fb9ecab99cc7db84f8c1a3db0cf0f6164d77e451dfaaab26f0b65c9cf88726aa84c90
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:fa9580b220e7aebc4bd623b9c2d402d060f47bfb32b8e86c4f69b6184282af4b513d58d7759397316e0e570c475d34b0
+Ctrl.data = hexdata:40912a3cdc9623d86e6db201b56afe6a354335d9635b1c2478db75bb4a83554b3aef392205d0f226485db014ac22ad3b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 3a74c1f904c563bdab90b0f5b5de4a444f0da7395df6fed82352af9233060904640d98dbad43dae0a99483d588d68ef0
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:fa9580b220e7aebc4bd623b9c2d402d060f47bfb32b8e86c4f69b6184282af4b513d58d7759397316e0e570c475d34b0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 4a8758b949bd64907c664f24ef82deccd40ffe460279091ca07574f811f84fb80437755321f062764de435f14406b6c7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4a8758b949bd64907c664f24ef82deccd40ffe460279091ca07574f811f84fb80437755321f062764de435f14406b6c7
+Ctrl.data = hexdata:61ff39f242bd6fee91ff507ba8bd39eba3616560202284a11c72a8c8cd5d80ce53c7a77135503c4a24544a62b47b933d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = b4b6d860927ac8b40e25fe6b813c7ea70ef4568528cad8ab1ebdd4854bcc0fe3b28786592dfd964e67eba564b1c554ea
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4a8758b949bd64907c664f24ef82deccd40ffe460279091ca07574f811f84fb80437755321f062764de435f14406b6c7
+Ctrl.data = hexdata:61ff39f242bd6fee91ff507ba8bd39eba3616560202284a11c72a8c8cd5d80ce53c7a77135503c4a24544a62b47b933d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 8cf769bed70425785e28d1e78129cd9eabef64327ebbd96ebaca547b0d28580f1db20ac110eef29d82ac40813f9a044b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4a8758b949bd64907c664f24ef82deccd40ffe460279091ca07574f811f84fb80437755321f062764de435f14406b6c7
+Ctrl.data = hexdata:61ff39f242bd6fee91ff507ba8bd39eba3616560202284a11c72a8c8cd5d80ce53c7a77135503c4a24544a62b47b933d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 0aff8ca80517eb3391f25ad81a5eb9307637d352d07b5047190fc384ed1b536b52b0b25a8349d7c8bab3923cbe10f63c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4a8758b949bd64907c664f24ef82deccd40ffe460279091ca07574f811f84fb80437755321f062764de435f14406b6c7
+Ctrl.data = hexdata:5ac100d7b27ab146f0eb4766005ce1b1b49ffc087991ccc06552c23076b009be34ec0523ed3c33836c6e4007de3e592d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = c68a76b70f6664359aed4a054ea30ce1f2e4a91b0fd99b1effc6969fd1d9be98a09f685e2aae7558a136185ab36e5e4f
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:2ebcb08306728f71249a9c9ca9d53115ba0fd2cc0b63bf690f9236b2516a47d0696d
+Output = 38368374565fbc9298eff41132e8e4a6468b9ce87b3138ac6007e078018960958494f7b56ac71a0c1dc39c7b62fa3465
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:38368374565fbc9298eff41132e8e4a6468b9ce87b3138ac6007e078018960958494f7b56ac71a0c1dc39c7b62fa3465
+Ctrl.data = hexdata:2a15af6fe2e7031563a612f2c99a05bacaff3c624238ef80d82e5af8579c169a40166d954f7784087bce56f39c26f55d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = f440521d6595c7177d167bb3516f896bf47d362ab140f55306b7da7a9df1fd936e0f619d0eb6806fc6d04437f1e86747
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:38368374565fbc9298eff41132e8e4a6468b9ce87b3138ac6007e078018960958494f7b56ac71a0c1dc39c7b62fa3465
+Ctrl.data = hexdata:2a15af6fe2e7031563a612f2c99a05bacaff3c624238ef80d82e5af8579c169a40166d954f7784087bce56f39c26f55d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = cc9a09d1f6e7479fc48ac997d83f1a9af0d5301d10d8fab41bf0b29c1e464118e58dd7100f7633c0a59eeff50a5773ab
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:38368374565fbc9298eff41132e8e4a6468b9ce87b3138ac6007e078018960958494f7b56ac71a0c1dc39c7b62fa3465
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 383461863a7cb4e697e2c49e991de737172fd2a66225e49e49fd640555e5bda70c0d4058a8b32af5ec3de74eb5fb98c7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:383461863a7cb4e697e2c49e991de737172fd2a66225e49e49fd640555e5bda70c0d4058a8b32af5ec3de74eb5fb98c7
+Ctrl.data = hexdata:3fe1067b88b96241527495f4ac60cf866692da7dda56bd39e4cccb6d615dc64dff6f519d3d3112ff2cf6b6b728835da1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 86c7556537dad08499e20f9a424e0e1683af4a53617acb763881482b3f3cc78336246f81a1e5cc62cd699920eff0a9cb
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:383461863a7cb4e697e2c49e991de737172fd2a66225e49e49fd640555e5bda70c0d4058a8b32af5ec3de74eb5fb98c7
+Ctrl.data = hexdata:3fe1067b88b96241527495f4ac60cf866692da7dda56bd39e4cccb6d615dc64dff6f519d3d3112ff2cf6b6b728835da1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 67391f7c78f569458c5216784af513f5ea049e3d2b3a120fda04ec5d79b659067fc1f8bac821bfa65b8585c1d974919e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:383461863a7cb4e697e2c49e991de737172fd2a66225e49e49fd640555e5bda70c0d4058a8b32af5ec3de74eb5fb98c7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 841757ceebb2cd7ea33c7a6b54efa0f14ca4f5fd1a65da887dcd96feb35b1284737b6234202ad25aaecf6fb67d702af5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:841757ceebb2cd7ea33c7a6b54efa0f14ca4f5fd1a65da887dcd96feb35b1284737b6234202ad25aaecf6fb67d702af5
+Ctrl.data = hexdata:504aa70ba600d023e5e809c4be7e6d9c102c15417b5d0f810c41d16bd692ece5e840236cd5b9c10055e67a7968f7f544
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 96a17b111ac35dbb36ef4e581c96b4c6cae7e881adaf234c2455c1d8ad16089df1ad2e52141ef755b0476ccd618770fb
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:841757ceebb2cd7ea33c7a6b54efa0f14ca4f5fd1a65da887dcd96feb35b1284737b6234202ad25aaecf6fb67d702af5
+Ctrl.data = hexdata:504aa70ba600d023e5e809c4be7e6d9c102c15417b5d0f810c41d16bd692ece5e840236cd5b9c10055e67a7968f7f544
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 98b00bc80a58a985dd722ee096df34e1be84f0bda2d57abe2b9f9c6852439805d0400e0f1b1647f38fdbe65f148ab708
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:841757ceebb2cd7ea33c7a6b54efa0f14ca4f5fd1a65da887dcd96feb35b1284737b6234202ad25aaecf6fb67d702af5
+Ctrl.data = hexdata:504aa70ba600d023e5e809c4be7e6d9c102c15417b5d0f810c41d16bd692ece5e840236cd5b9c10055e67a7968f7f544
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 8b1a1cbae365cbb11dc43033954694ed7d380c6ebb2e7be69a6919f89e0508769f8ef8428a86b0448e5e89f07a7f2337
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:841757ceebb2cd7ea33c7a6b54efa0f14ca4f5fd1a65da887dcd96feb35b1284737b6234202ad25aaecf6fb67d702af5
+Ctrl.data = hexdata:7e9a0c28e3f74322aba45bd272aaa50dc6b980ac6df6264673123bbacd366cf4c34b4f21d9c4175f88ca66e00b51ed4e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 656905d7ea03b8b0d4b3205f8d6f8a0a94a38fb502f6cbd656856ea39ac1e56f6092a8cd4146bfccc34694cf933ccf5a
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f83d4d1b185c8048bf809417aff978f5a11e273f85f32b5d300023862311fb3d065c
+Output = 34d31b6d6e5fd67911f3acef72e9431ee39299a248ce7ce86a7b0f535a76b0a6a3fcf77b32427c2e9c60afca2505b358
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:34d31b6d6e5fd67911f3acef72e9431ee39299a248ce7ce86a7b0f535a76b0a6a3fcf77b32427c2e9c60afca2505b358
+Ctrl.data = hexdata:51ff1b75137890323881e92e02f181b4bebc57a83d99962716e288ebe9407c052d13ca2f05e480b8188ff159713f7e60
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = b1f6485f84452614abbc9747e660e6b55ecf118fce063aad511840adeb91c5f5fedc08098f5a74e41b6e5cf0ce23652a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:34d31b6d6e5fd67911f3acef72e9431ee39299a248ce7ce86a7b0f535a76b0a6a3fcf77b32427c2e9c60afca2505b358
+Ctrl.data = hexdata:51ff1b75137890323881e92e02f181b4bebc57a83d99962716e288ebe9407c052d13ca2f05e480b8188ff159713f7e60
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 12025b376c8629f261864e978feeff98ab1a1212e84c88248159bea4187210c012059fad3758651b37861bc550f3c0be
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:34d31b6d6e5fd67911f3acef72e9431ee39299a248ce7ce86a7b0f535a76b0a6a3fcf77b32427c2e9c60afca2505b358
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = b5d00844fc22b643dde3edc0454559eb01d33e57477ac980542aade6f8a3ccbf4502f0381489ed1fe8e74c966f1c3564
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:b5d00844fc22b643dde3edc0454559eb01d33e57477ac980542aade6f8a3ccbf4502f0381489ed1fe8e74c966f1c3564
+Ctrl.data = hexdata:f0b08322d42922a77fbf3e4830aacfb34a7bf85ac255ae7d1f39ee39f9b07c2a88bc5e41912c6a97d0f54996df663e04
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 6aabce40a3acc0e953db1cb8b21e47d4644e108324aa4058f9ca2703da1c4500f78ad47287a441d13dbe1f5a98a97887
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:b5d00844fc22b643dde3edc0454559eb01d33e57477ac980542aade6f8a3ccbf4502f0381489ed1fe8e74c966f1c3564
+Ctrl.data = hexdata:f0b08322d42922a77fbf3e4830aacfb34a7bf85ac255ae7d1f39ee39f9b07c2a88bc5e41912c6a97d0f54996df663e04
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 4d0f32ce9a86530a1f9cad218be9f38ecbd50f1deb30bf42b450e93bce059a98d25c1be9d918f6b1ca9ddcacdd9b4db8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:b5d00844fc22b643dde3edc0454559eb01d33e57477ac980542aade6f8a3ccbf4502f0381489ed1fe8e74c966f1c3564
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 979a7a7cbaf194be9765a1a090454d7fcd1eee2908ffaa93b865504817177d29c6e10b1d59e559a73034c6f1f3021e68
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:979a7a7cbaf194be9765a1a090454d7fcd1eee2908ffaa93b865504817177d29c6e10b1d59e559a73034c6f1f3021e68
+Ctrl.data = hexdata:48f7b41404c75cc97a6f78ba395606e8efbf1d25a6d174835a45fdfc7debf3ebf5e8e5f264834804562ceaa748566714
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = cf3a30ab60be054d04ff82fd94bb296403a1f51b630ba13df261acea3a648f19f32777b2ad568c084c317401af7e6201
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:979a7a7cbaf194be9765a1a090454d7fcd1eee2908ffaa93b865504817177d29c6e10b1d59e559a73034c6f1f3021e68
+Ctrl.data = hexdata:48f7b41404c75cc97a6f78ba395606e8efbf1d25a6d174835a45fdfc7debf3ebf5e8e5f264834804562ceaa748566714
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 86b6f7a7a937a30a1ef165da03141270f40f9b8bdb84bed8ca200984b7415e2f5ab2eb663a8ea4f70d4c5613318c4d7c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:979a7a7cbaf194be9765a1a090454d7fcd1eee2908ffaa93b865504817177d29c6e10b1d59e559a73034c6f1f3021e68
+Ctrl.data = hexdata:48f7b41404c75cc97a6f78ba395606e8efbf1d25a6d174835a45fdfc7debf3ebf5e8e5f264834804562ceaa748566714
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = cf6b0c13f121942acd855da7f2658dfdc59c816290664f7e8c8750d38d961a87e663e6c59f5b89b8477738eeaa76dc40
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:979a7a7cbaf194be9765a1a090454d7fcd1eee2908ffaa93b865504817177d29c6e10b1d59e559a73034c6f1f3021e68
+Ctrl.data = hexdata:8b958cce832b7cb2381a90cf82ebd72ee8a89cd804ffde338e707603ce544db3a11cd9afa317751b48d959c750047d88
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = c947b9b68f77e4aef96ab3fe06f9214fecc7f6344b3558bfdd40dd3e6bbfcfe69cf0420f7a24998d8d387b6f85683038
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:042e669b52a5e563597e050b84755a685dfc62dba6a393af0aa1cb4047c2ae7442ee
+Output = 4b43ba7c9138e1fedc23f76a3ded5621c6e4d45cda9edfb7e950a2e494624a976def2ec03d53d8829801dddf17989bfa
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4b43ba7c9138e1fedc23f76a3ded5621c6e4d45cda9edfb7e950a2e494624a976def2ec03d53d8829801dddf17989bfa
+Ctrl.data = hexdata:fe13fda946943a323e2c160b7cda76454ce96bf0e51456311d0ce4ca484145bf1b00b8f7d692fa3bd1dacce0bee4e020
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 1779cfae5a472401c6df4971092f9e915b97d6dcf29e142dfbacff9c1781a8b8626d38296d7599a0de57593f3a7f7572
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4b43ba7c9138e1fedc23f76a3ded5621c6e4d45cda9edfb7e950a2e494624a976def2ec03d53d8829801dddf17989bfa
+Ctrl.data = hexdata:fe13fda946943a323e2c160b7cda76454ce96bf0e51456311d0ce4ca484145bf1b00b8f7d692fa3bd1dacce0bee4e020
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 337022f95da2b5ced71d41e35fd4d63c44270af18c51df8abd54943ec5a583a95b218fcce741384b826e3c0f3b34cb45
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:4b43ba7c9138e1fedc23f76a3ded5621c6e4d45cda9edfb7e950a2e494624a976def2ec03d53d8829801dddf17989bfa
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 3b763cfd81c1c7cbfe55cd3de78334a2eea6e3a70e539ab048b3fef93cd6ff0fe6ba8c351cafff3057fe39e00652a510
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:3b763cfd81c1c7cbfe55cd3de78334a2eea6e3a70e539ab048b3fef93cd6ff0fe6ba8c351cafff3057fe39e00652a510
+Ctrl.data = hexdata:a0bf8b6062a2de56aaab2b97e77f15bafc340bdb2b32e868959858d9e4b8b2da264aca4e7d16f6a58b14f6c4b42f97d4
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 83272868aa2517b5163422b3b93b0f97a34541b27ce5a771f702b9ae088fd73eab282db646f23d5ce499de0f0503b95d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:3b763cfd81c1c7cbfe55cd3de78334a2eea6e3a70e539ab048b3fef93cd6ff0fe6ba8c351cafff3057fe39e00652a510
+Ctrl.data = hexdata:a0bf8b6062a2de56aaab2b97e77f15bafc340bdb2b32e868959858d9e4b8b2da264aca4e7d16f6a58b14f6c4b42f97d4
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = d4a42d79131a720358da9f9a8a4b56684f127f8e2cd0bb03b4fd23e519924696062d1288fb416ec0fa90530fef576dc4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:3b763cfd81c1c7cbfe55cd3de78334a2eea6e3a70e539ab048b3fef93cd6ff0fe6ba8c351cafff3057fe39e00652a510
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = fbd732c04b2e4c6a510cc909e676cce55615f951ca35b1d16692a1a4f597c65b48e5ebdbf342295c90c19ef966242570
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:fbd732c04b2e4c6a510cc909e676cce55615f951ca35b1d16692a1a4f597c65b48e5ebdbf342295c90c19ef966242570
+Ctrl.data = hexdata:fe4cd2c6305e333fe3e1be7d554ccd18777112af181444ee9dbf08b27789d56442b9062ee9e4bc9d32d75a90df01aa97
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = b85370eea397bbff07af997282e64d95d16bab298a884b0e076174f2c1731371100e219c9ebe0395786c7571bdb1250f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:fbd732c04b2e4c6a510cc909e676cce55615f951ca35b1d16692a1a4f597c65b48e5ebdbf342295c90c19ef966242570
+Ctrl.data = hexdata:fe4cd2c6305e333fe3e1be7d554ccd18777112af181444ee9dbf08b27789d56442b9062ee9e4bc9d32d75a90df01aa97
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 058fcbc86aee05c1611daa116d823e4cbc90806048bc7c06818dc93f5a7cb88ffc556107da7cfdfd36322bdb46bac809
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:fbd732c04b2e4c6a510cc909e676cce55615f951ca35b1d16692a1a4f597c65b48e5ebdbf342295c90c19ef966242570
+Ctrl.data = hexdata:fe4cd2c6305e333fe3e1be7d554ccd18777112af181444ee9dbf08b27789d56442b9062ee9e4bc9d32d75a90df01aa97
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 8ed866879bdaa4df92512530bc5ae51fee9fa014a128296cc4fc160650ac76977f2a8c2f9531e0ad492fec186c980ef9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:fbd732c04b2e4c6a510cc909e676cce55615f951ca35b1d16692a1a4f597c65b48e5ebdbf342295c90c19ef966242570
+Ctrl.data = hexdata:57551aa889d3bd4633864a9975afbd649baffaa5608d3d3cdd7cb594f72de6af9b08f9b8fe0eb961275b07701a5dfef7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 6d74d0e7f3add328e3197f3e3b0fb77db4557347aaf8cc0eb826ad3cf31aa2144f52d15008c6d40dc077ab8a50557757
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:902e0cb930aa412f9ed919bb03ce94ffca2c0f59f0ab5e66695f65497162c41dfc2f
+Output = a0b05f92044e706d497a4fa2e739220a091407e52c4c58bda817a11ee67842f6bce21bf1fc96421d9917b9d1f0783b8a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a0b05f92044e706d497a4fa2e739220a091407e52c4c58bda817a11ee67842f6bce21bf1fc96421d9917b9d1f0783b8a
+Ctrl.data = hexdata:a67f985ae3cb2f7ea12ecf1c3f7175226d34899ea48003633321697301a2fa788e92673fa9a9538c8f992f0ef0885728
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = bd808dca2c7c0412abd5a747fb5fe5a1c644b43d8a8826fe11d48703448b38b9b6fe43f11241aef154fbd5e5e83e302d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a0b05f92044e706d497a4fa2e739220a091407e52c4c58bda817a11ee67842f6bce21bf1fc96421d9917b9d1f0783b8a
+Ctrl.data = hexdata:a67f985ae3cb2f7ea12ecf1c3f7175226d34899ea48003633321697301a2fa788e92673fa9a9538c8f992f0ef0885728
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 19d1b4c9130572d7d4c5a8a81bfdde492455b63b2124f01c16d3b92a41467b2a58a63e1df7eeb85642dcb1591ae6c697
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:a0b05f92044e706d497a4fa2e739220a091407e52c4c58bda817a11ee67842f6bce21bf1fc96421d9917b9d1f0783b8a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = b2284374a83691c9f0f3d699faf8847ea9bad0bf3fd2467e6eb1537d9535e6db03b3b5efc828ad72b1a34bba1627eca2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:b2284374a83691c9f0f3d699faf8847ea9bad0bf3fd2467e6eb1537d9535e6db03b3b5efc828ad72b1a34bba1627eca2
+Ctrl.data = hexdata:19bc6495e6322bf29e75002f1b519a95ca18790d13ed9473ee3805ea634047540a1c16eaa1713e60e38841431f7070fc
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 0a64d745563e72ffe3e5f7d1ad095cff283c0febc529ae317ae67ef0b5ed763f2749a1ccf932966eb13c7ea8916441f4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:b2284374a83691c9f0f3d699faf8847ea9bad0bf3fd2467e6eb1537d9535e6db03b3b5efc828ad72b1a34bba1627eca2
+Ctrl.data = hexdata:19bc6495e6322bf29e75002f1b519a95ca18790d13ed9473ee3805ea634047540a1c16eaa1713e60e38841431f7070fc
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 83136fc401f35789959110b7263dd754353aa97c8b9a0072f415220d86b92e9ab2d1020c18f605a9b367ac4940bebc9c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:b2284374a83691c9f0f3d699faf8847ea9bad0bf3fd2467e6eb1537d9535e6db03b3b5efc828ad72b1a34bba1627eca2
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 4c6a0ac8b5cd96e6b694bbdbdf64eb516305e92f150270bc80fea736e12fab48bb96d0307a90c7a906a679f5f55d7860
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4c6a0ac8b5cd96e6b694bbdbdf64eb516305e92f150270bc80fea736e12fab48bb96d0307a90c7a906a679f5f55d7860
+Ctrl.data = hexdata:3b4922e38c531328520150f640ad82720a6eef4ea94e06ec4ab32276b2d901710cb585bd86f47e92c1c6cf39961daf36
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = bf77e676173422a783ffde07e076541385aee04b82a6e3f26ea7249587b3596f68262e4c3ed4e6d56dfd75ed39512989
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4c6a0ac8b5cd96e6b694bbdbdf64eb516305e92f150270bc80fea736e12fab48bb96d0307a90c7a906a679f5f55d7860
+Ctrl.data = hexdata:3b4922e38c531328520150f640ad82720a6eef4ea94e06ec4ab32276b2d901710cb585bd86f47e92c1c6cf39961daf36
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 31f8accd9f0f923c8b9f413840bd5f4a60b5693773022b78a25802e0e68f7ae33314dfc25ff2b1a1f32490df80c9e185
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4c6a0ac8b5cd96e6b694bbdbdf64eb516305e92f150270bc80fea736e12fab48bb96d0307a90c7a906a679f5f55d7860
+Ctrl.data = hexdata:3b4922e38c531328520150f640ad82720a6eef4ea94e06ec4ab32276b2d901710cb585bd86f47e92c1c6cf39961daf36
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 488b7e09c0565137f22008362e7a4505f23ff1b24b0565322a11b6f4d3e1af7f06b8efdae18d74a7adee4e1e9753185c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4c6a0ac8b5cd96e6b694bbdbdf64eb516305e92f150270bc80fea736e12fab48bb96d0307a90c7a906a679f5f55d7860
+Ctrl.data = hexdata:b8e14051b4e84bc66bd65601ed6b2e57e469e167e277e8c30c93bc52a6e836abad9b7ac6a81ecbd47ee9917a14154a2b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = e1f85e642615ceef410c6112339627607d3d1920ba168f5b10fed1a13a468401253df07323b826f156f0997bc584a937
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:ce2820a53357bc83ebd26b54d8ad48f4137f914034368dc705bfe852c2d87553
+Output = 1aa52a5650ec46ab58a0e424ba92771077702ee242b752ee04036ca4ea43f16a092bbe2b5b09a4e34b98203e3b3ac0ec
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:1aa52a5650ec46ab58a0e424ba92771077702ee242b752ee04036ca4ea43f16a092bbe2b5b09a4e34b98203e3b3ac0ec
+Ctrl.data = hexdata:ee61912f8d2cb51a3458a799af5c31a8ea4b2f9585fa63e71447289b3b6c6d979663580e6b115a652fed485c30cc535d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 53e8283806255b6eb3d1958fcf2b50d68e3226aab14b0fbd88529d6bfc6dcc88f90767aed25ba81baffa94e199ce8124
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:1aa52a5650ec46ab58a0e424ba92771077702ee242b752ee04036ca4ea43f16a092bbe2b5b09a4e34b98203e3b3ac0ec
+Ctrl.data = hexdata:ee61912f8d2cb51a3458a799af5c31a8ea4b2f9585fa63e71447289b3b6c6d979663580e6b115a652fed485c30cc535d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = dcc274d12f153c7c23e02e5dfbafe90a65021a8100e09c891b790ea36092d6f694569fa5522ca823a7a6a026d25dd9b2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a65f8b90963feda2e77ac0d6c33dc068a9f7eb4ec9878de9a002fbb90ca7d23c
+Ctrl.salt = hexsalt:1aa52a5650ec46ab58a0e424ba92771077702ee242b752ee04036ca4ea43f16a092bbe2b5b09a4e34b98203e3b3ac0ec
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = c57b7353740853e2f4534218383741dbff9b5006aeaefa590f4b771a65d24dc4ee25bf3bbb13ad6a3ed4eefb68d0ae6a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:c57b7353740853e2f4534218383741dbff9b5006aeaefa590f4b771a65d24dc4ee25bf3bbb13ad6a3ed4eefb68d0ae6a
+Ctrl.data = hexdata:0558822667fc051cb1864843b24c06eeb65c70754f56752808e33cf87ec64f9bffce395784df9940157b50bf01c11a1b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 5e9bf5910954eabc3a4c659be466cd4b66252685a8f4daf2afc414568420613f0bc4d0269e0edf266aa9faa70761840b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:c57b7353740853e2f4534218383741dbff9b5006aeaefa590f4b771a65d24dc4ee25bf3bbb13ad6a3ed4eefb68d0ae6a
+Ctrl.data = hexdata:0558822667fc051cb1864843b24c06eeb65c70754f56752808e33cf87ec64f9bffce395784df9940157b50bf01c11a1b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = d296e0b7ba4f6eb7257cdfe9ed87618cc116a192f24cc8a5226edb2cd9cde893f7478c94e8d0dba9d9326dd674955bf4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:c57b7353740853e2f4534218383741dbff9b5006aeaefa590f4b771a65d24dc4ee25bf3bbb13ad6a3ed4eefb68d0ae6a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = cdafc4fc6f6a718db9e77867f647c517bd4d43ebd794f1c2b5253c0b4ebb71f56848f4335aae0772065ae67d02baddae
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:cdafc4fc6f6a718db9e77867f647c517bd4d43ebd794f1c2b5253c0b4ebb71f56848f4335aae0772065ae67d02baddae
+Ctrl.data = hexdata:619091dadb4c82f4524ad838625aeeca25264b7e645eeafa95ac10d3c32cf76dbd965269bffab4d9fc2a8d30bf63e397
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 0e3cfd61b1e5ce95dc37b01c872d90855ccebb98bd56702b1ec337163e63e3b133a9a6c7847a1d421776ccbdcae6a01f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:cdafc4fc6f6a718db9e77867f647c517bd4d43ebd794f1c2b5253c0b4ebb71f56848f4335aae0772065ae67d02baddae
+Ctrl.data = hexdata:619091dadb4c82f4524ad838625aeeca25264b7e645eeafa95ac10d3c32cf76dbd965269bffab4d9fc2a8d30bf63e397
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = d113ea4f795fd94788b782922c31c3dd1195287564a073590e17a61599da729c7f3a01aa777b1071f6cff7b69cadcf32
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:cdafc4fc6f6a718db9e77867f647c517bd4d43ebd794f1c2b5253c0b4ebb71f56848f4335aae0772065ae67d02baddae
+Ctrl.data = hexdata:619091dadb4c82f4524ad838625aeeca25264b7e645eeafa95ac10d3c32cf76dbd965269bffab4d9fc2a8d30bf63e397
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 43943f7395babfbe3b327d5e9784e2082936189226af39b21b030e3e8c8244ee6aa4cc1e047df7a329793421c3006bc1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:cdafc4fc6f6a718db9e77867f647c517bd4d43ebd794f1c2b5253c0b4ebb71f56848f4335aae0772065ae67d02baddae
+Ctrl.data = hexdata:755c319f41259c93dd83f3a3003f8d5c6e56e3cc486bfff5f636b5f97fadc8470271ef3e209501ec48a872f3ca16f84e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 6ad0e35cbf134d62e1ae57ba07288d0ce4774c0d2ca6faf06d8f18b3f2c290c6225be4f4a8df2016de2c0ccf63525ed3
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:8bb4a1a37dcb14ff5b57c922a13dc730a745392240ce43df80b23e67aae5bc86
+Output = d2fe919797167c4b36f093d59244ff4ab455ccb59ea6ab2991789c049c2a110902c3f0c1dddb2b28b41013a13b223ab8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:d2fe919797167c4b36f093d59244ff4ab455ccb59ea6ab2991789c049c2a110902c3f0c1dddb2b28b41013a13b223ab8
+Ctrl.data = hexdata:7bd8dc442c15b7cccc4a88aa2346f7e1434c0043ccd7075ec8b049bfa40c2b9b8882dfed654d762ef01cdf4bf55002e3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 7115918823a35c8ee8985966dfddc5be483db4029047296b3ddeb5c884712b5ddf27152a7f71e82a91e1420c7e4c25e8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:d2fe919797167c4b36f093d59244ff4ab455ccb59ea6ab2991789c049c2a110902c3f0c1dddb2b28b41013a13b223ab8
+Ctrl.data = hexdata:7bd8dc442c15b7cccc4a88aa2346f7e1434c0043ccd7075ec8b049bfa40c2b9b8882dfed654d762ef01cdf4bf55002e3
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 3122eaea9244f61a733e2370e0689a47491e28ce3a2062224f0a8021f05eb5da22a5558dd7edcaf04821e483f84b5ba1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:3edd347353ab8965bdb38e823004df6824a653329946620417a1857d56900efc
+Ctrl.salt = hexsalt:d2fe919797167c4b36f093d59244ff4ab455ccb59ea6ab2991789c049c2a110902c3f0c1dddb2b28b41013a13b223ab8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 1edc8c10871598074baf38600a4a5927da7aa6256ea691fb1d026872ad751a1542726307c415af6c44121e37b86c81ff
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:1edc8c10871598074baf38600a4a5927da7aa6256ea691fb1d026872ad751a1542726307c415af6c44121e37b86c81ff
+Ctrl.data = hexdata:29cfd57bd578514558e2e168e4c665759eded30d761e14d3cbc2123c2f38c63380e5f4a0d8c5895ab58f7af7bb16fbaa
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 2a795383e320e478b78f195b5f5b7477dfea13bb23da34eebae22dd12857ed33757486a9fc237d8a37ac1c09feb07bd9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:1edc8c10871598074baf38600a4a5927da7aa6256ea691fb1d026872ad751a1542726307c415af6c44121e37b86c81ff
+Ctrl.data = hexdata:29cfd57bd578514558e2e168e4c665759eded30d761e14d3cbc2123c2f38c63380e5f4a0d8c5895ab58f7af7bb16fbaa
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = a51643b6c42b43f517e002decaf41823a10b717d525d55ed6996ef1ccff055c75218dec36815473fa5289c85bb301019
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:1edc8c10871598074baf38600a4a5927da7aa6256ea691fb1d026872ad751a1542726307c415af6c44121e37b86c81ff
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 3934b26badf5af9470de9dee4dfcb1addc69ea237c902291817e08c1032748a9315f579e42066cb86d16cb2cffbba24e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:3934b26badf5af9470de9dee4dfcb1addc69ea237c902291817e08c1032748a9315f579e42066cb86d16cb2cffbba24e
+Ctrl.data = hexdata:605880f06229184763495b328496ba313882a8edccf956602713cf86fead2894e4339a0c6d8062073e781fc729336568
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 3ac8206a7f9e819c76ddd72bcd07397f64d9f698c4d75ec1d8ef610e9027c462d2cadf55d227a8c7b4eb63ab2012e827
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:3934b26badf5af9470de9dee4dfcb1addc69ea237c902291817e08c1032748a9315f579e42066cb86d16cb2cffbba24e
+Ctrl.data = hexdata:605880f06229184763495b328496ba313882a8edccf956602713cf86fead2894e4339a0c6d8062073e781fc729336568
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 691e1db0137f5a54d4f51a8d6c2a89ebbbb0000cf81ddd5d08682416db9f48309d6b19819ba07e1860e34edecee4e23d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:3934b26badf5af9470de9dee4dfcb1addc69ea237c902291817e08c1032748a9315f579e42066cb86d16cb2cffbba24e
+Ctrl.data = hexdata:605880f06229184763495b328496ba313882a8edccf956602713cf86fead2894e4339a0c6d8062073e781fc729336568
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 5c32c8fcb2e90cdfd5d86cef427b828fc162371236b3e39c4812deda4038cdbbb4bde6859a502f54acfb482666fd4295
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:3934b26badf5af9470de9dee4dfcb1addc69ea237c902291817e08c1032748a9315f579e42066cb86d16cb2cffbba24e
+Ctrl.data = hexdata:b21112193c9c5604a544f95c0325d94041ec595f46a9a4cbba0a8c72501ac72ad8ed1d8fb17f82e0b288144d6f0f1d53
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 77538d76ba22a23215ee93ef07f542f7a7bc43f77af5da3395688f8b8d81afa2c47952db8a0f2da2435d3e340411b0f7
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:def2b619233e04b1dfe39ef92ae061791a84974c71921819697f86a255342b38
+Output = de59d25fddb6ebeab4dbcfb55c5f7c24f2d15910da8c3463dd69241139e88c09d51f59a7aaeeeb4f08459f3360be3fa0
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:de59d25fddb6ebeab4dbcfb55c5f7c24f2d15910da8c3463dd69241139e88c09d51f59a7aaeeeb4f08459f3360be3fa0
+Ctrl.data = hexdata:705c00dd0ad91ec54a86e311ef7931ad61d6b14c2c75411e95d7f3a80a21cc2b5a19b396e1147bf56dd3ee10dcf18d37
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = e539e7e8b3a065a4a40ffc7e8c8c70eedaccf7fa14a28b18503865805f7590ae7e9c550fae2d493d932a85e9fbe18f22
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:de59d25fddb6ebeab4dbcfb55c5f7c24f2d15910da8c3463dd69241139e88c09d51f59a7aaeeeb4f08459f3360be3fa0
+Ctrl.data = hexdata:705c00dd0ad91ec54a86e311ef7931ad61d6b14c2c75411e95d7f3a80a21cc2b5a19b396e1147bf56dd3ee10dcf18d37
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 418e41f54f7fead42d623e9f40be68812fefa50c19b4cf4268b2dd4bd206414597d0af720242f1667cf4cdce325bb3f6
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:63505c479ea4544899a17a09ac19abc706d3ac60126d3239d19710926184a6d9
+Ctrl.salt = hexsalt:de59d25fddb6ebeab4dbcfb55c5f7c24f2d15910da8c3463dd69241139e88c09d51f59a7aaeeeb4f08459f3360be3fa0
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = f7d0595a4a3b71cd6714376580e90e54f3be9f78c04e5708093931f01759b6283a9157ab9b32f322abf9795ebf18fe06
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f7d0595a4a3b71cd6714376580e90e54f3be9f78c04e5708093931f01759b6283a9157ab9b32f322abf9795ebf18fe06
+Ctrl.data = hexdata:0000487cdfa6107c6b08d4d64e353585b30bc45414b7f5066e4c8dd6c9a80d3c9d5c204d664f4e43fa0842a462f4faab
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = f0f2c238ef72dff22e63bc018c41a1061fb8ca7755ac416ba3df5e8280faa21c84c07a8f0ac9f1ee6e50a6e56fa39377
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f7d0595a4a3b71cd6714376580e90e54f3be9f78c04e5708093931f01759b6283a9157ab9b32f322abf9795ebf18fe06
+Ctrl.data = hexdata:0000487cdfa6107c6b08d4d64e353585b30bc45414b7f5066e4c8dd6c9a80d3c9d5c204d664f4e43fa0842a462f4faab
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 718cf52c40760e4ec4455b42ba829b7decbe1d6e89e36e74b86e09df090ad2a2f9ad7cf896317cb4803e332a828c9aa9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:f7d0595a4a3b71cd6714376580e90e54f3be9f78c04e5708093931f01759b6283a9157ab9b32f322abf9795ebf18fe06
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 613b33b466defd69c2fb8ae637aa2034be4807a6676599f768db22a69669f2befc0a9732c286c880fcd6a04bd0da4059
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:613b33b466defd69c2fb8ae637aa2034be4807a6676599f768db22a69669f2befc0a9732c286c880fcd6a04bd0da4059
+Ctrl.data = hexdata:2e3407a8e3f146036fbd35c1633f83daaf4f8e9bdc9e067f75d5b56d8201175b7b05f267db7940e0db534b57e037d575
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 333d43099efea0bb1c294fe4a34660bf4534f0af983c31723044363b6bbecccdba09d9702234db04534dee31a4ed0ab1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:613b33b466defd69c2fb8ae637aa2034be4807a6676599f768db22a69669f2befc0a9732c286c880fcd6a04bd0da4059
+Ctrl.data = hexdata:2e3407a8e3f146036fbd35c1633f83daaf4f8e9bdc9e067f75d5b56d8201175b7b05f267db7940e0db534b57e037d575
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 68f85f1e025f9d3924be5327ce57b9abc4b7a078c20fa0ea513e7996af69723cece7ffa748f6034a66be7eae5e18068d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:613b33b466defd69c2fb8ae637aa2034be4807a6676599f768db22a69669f2befc0a9732c286c880fcd6a04bd0da4059
+Ctrl.data = hexdata:2e3407a8e3f146036fbd35c1633f83daaf4f8e9bdc9e067f75d5b56d8201175b7b05f267db7940e0db534b57e037d575
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 2f71d6f423bd523b8a94e2ccc9f653a63594dfa030fdaa3796540075035f73bbe2d89f85af2de61462c22104c03ffa87
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:613b33b466defd69c2fb8ae637aa2034be4807a6676599f768db22a69669f2befc0a9732c286c880fcd6a04bd0da4059
+Ctrl.data = hexdata:ba106fffdb82b75330da7132de828b1b032fad4878c7ab70acdffa4a76163ecdec8d25202715b78901e87a910f7e3b34
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 202803c8237412f20263b428932afcb5d8a7dcdd7fa147ea2af95a7dd091bf0d79686a6710f572bc868d2f533a488a6f
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a357ab62ad6eaf90426fe7a2cee0659583acbe423a17771690895b26aefd62a8
+Output = c5cae95fcebb3eec27fc88654a2679cf600071d2a25a34fe7f34732415e922eb9a1de0f6db357026d3dfdadc5cb36b8d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:c5cae95fcebb3eec27fc88654a2679cf600071d2a25a34fe7f34732415e922eb9a1de0f6db357026d3dfdadc5cb36b8d
+Ctrl.data = hexdata:ab0bb35f9586beaf843e44af363e8e0c49cc9820f063cefb1f8e20191bec2b3558fd51760dec17bbc299bf205292e549
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 40093dc6b48667da9b412bf718217bf25b4405a4d1c759af797c78ae25443def12be155d1954edd4216cf62a422fa4cf
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:c5cae95fcebb3eec27fc88654a2679cf600071d2a25a34fe7f34732415e922eb9a1de0f6db357026d3dfdadc5cb36b8d
+Ctrl.data = hexdata:ab0bb35f9586beaf843e44af363e8e0c49cc9820f063cefb1f8e20191bec2b3558fd51760dec17bbc299bf205292e549
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 0b4f7ee9c8801b7cdbfbe064322d4879272b730e395b9c7e2bf8a07f99b101dc37687b993e4519d0d0ec607823c2a118
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:6b2ddbec771dbaf2c1de74c1de6f4ca391de63011ef8a5bd05c7fa716ee02cd1
+Ctrl.salt = hexsalt:c5cae95fcebb3eec27fc88654a2679cf600071d2a25a34fe7f34732415e922eb9a1de0f6db357026d3dfdadc5cb36b8d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 58fb050686d06d7199031657d3332f0b9a5e64059a48a88d07c6c2775df17ebbe71a2c8e0d81abc7e87fd0fd96aae4f8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:58fb050686d06d7199031657d3332f0b9a5e64059a48a88d07c6c2775df17ebbe71a2c8e0d81abc7e87fd0fd96aae4f8
+Ctrl.data = hexdata:671f55d398118eab16f4a2a87970615a7b37aa47b9fd935945a9a6da724c1f27dc4eefb2b123cbdee091c26985f81b7d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = dd489530beb209f2562b86413baabdbc052b2024ab7fb70a31e5e0e65f9c959034a6889f8b042c005ac132c879c40dc7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:58fb050686d06d7199031657d3332f0b9a5e64059a48a88d07c6c2775df17ebbe71a2c8e0d81abc7e87fd0fd96aae4f8
+Ctrl.data = hexdata:671f55d398118eab16f4a2a87970615a7b37aa47b9fd935945a9a6da724c1f27dc4eefb2b123cbdee091c26985f81b7d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 973c20837584cb79bd35bcfbe34d3eafd36e5280f7547d92b794c446bf578be38688f734eed942ae8c1de6864af496e4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:58fb050686d06d7199031657d3332f0b9a5e64059a48a88d07c6c2775df17ebbe71a2c8e0d81abc7e87fd0fd96aae4f8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = b7a8660e5b5dd7d85695d6b00655a25af851d956d93be87d970172651a808f115fccb155535121a56fba6a6a9c197971
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:b7a8660e5b5dd7d85695d6b00655a25af851d956d93be87d970172651a808f115fccb155535121a56fba6a6a9c197971
+Ctrl.data = hexdata:1788d205772075ae39032c56c28abe25262c5cc2642304fe3ed25958b9ca0905144f6e9a140c043e7e2822087d9e81f5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 763af37257c1d8fc3620127669c779ec2cb8433e4108ff797f71fec1e90364a0ee0ad9c272308ea8951866c44cb7ac0a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:b7a8660e5b5dd7d85695d6b00655a25af851d956d93be87d970172651a808f115fccb155535121a56fba6a6a9c197971
+Ctrl.data = hexdata:1788d205772075ae39032c56c28abe25262c5cc2642304fe3ed25958b9ca0905144f6e9a140c043e7e2822087d9e81f5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 3f1f4aaf11b3b30b5d76fcd077900a5dabdad92980bed0f3f0de6495c9ccf2c58aea08f7745b7b6c0cc3829b048c89de
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:b7a8660e5b5dd7d85695d6b00655a25af851d956d93be87d970172651a808f115fccb155535121a56fba6a6a9c197971
+Ctrl.data = hexdata:1788d205772075ae39032c56c28abe25262c5cc2642304fe3ed25958b9ca0905144f6e9a140c043e7e2822087d9e81f5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = f5fb64671edfb74aa85a061cd845945a93281d09badfcdca81a3f29bce743fa784536c8a259b9c7af667f783554a9700
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:b7a8660e5b5dd7d85695d6b00655a25af851d956d93be87d970172651a808f115fccb155535121a56fba6a6a9c197971
+Ctrl.data = hexdata:629e6112e7d0812e590a7b0dabc0a72b5a8539df1ca809a5f6ea8fe3ff35caf5a2bf0761232d97f0331e65f8ef2f28f5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 984e97a983945c49ac2f6482855771f514688d8dafe4e8a4d4438f90aa3a76dae0fa027ffb189d736ce13a9bd64c9d7f
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:02a241afe7072dc28fddc66987e22a710a5f2c3460766d55d5af58d549bd8f21
+Output = ef81b12b65b731fa750705c7799ec296cf4f3218bc34a3ef5819a6857aece0fd608e27f1589ce09a9fa72f941d304894
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:ef81b12b65b731fa750705c7799ec296cf4f3218bc34a3ef5819a6857aece0fd608e27f1589ce09a9fa72f941d304894
+Ctrl.data = hexdata:a911360d1d4f3bbd671908701106913fd281436de65cc2b9645e2cdccd31452cde589ccbbe41d926d3b82d468c2e812d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 93c085d9eb42edcb69274adc8c04fd4ee074672c99c1e44ff7ce4f0b3c3c0d56875845d2b148ebd1558547141cd35200
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:ef81b12b65b731fa750705c7799ec296cf4f3218bc34a3ef5819a6857aece0fd608e27f1589ce09a9fa72f941d304894
+Ctrl.data = hexdata:a911360d1d4f3bbd671908701106913fd281436de65cc2b9645e2cdccd31452cde589ccbbe41d926d3b82d468c2e812d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 0a5265d6097424d190572a4c7110f43097ea10056af875f74be4f02b82adf1de4dc7b90423e550bb0f0100ca2f0fcda5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:1426c851a7872eb25a197b7e58410871f0760e81345e67a1ffb6459f7b621f05
+Ctrl.salt = hexsalt:ef81b12b65b731fa750705c7799ec296cf4f3218bc34a3ef5819a6857aece0fd608e27f1589ce09a9fa72f941d304894
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 8751149d301adca9db725b867e22ceb4be056cd16aa43ac55307d1ffae4f656cf43678bff88057e65a90871b8a2a9910
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:8751149d301adca9db725b867e22ceb4be056cd16aa43ac55307d1ffae4f656cf43678bff88057e65a90871b8a2a9910
+Ctrl.data = hexdata:5492f38f35ca8254b8b50e45dba0f9eca6e5b4fd1275d80984e67cbc4c3377f1ed734c46a1a53fd774f9d10de7cb8186
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 13d2a5aa1e375e769e4062d829c0df66a8138357e460adbfe859fcd09252dec37e93076a225b9aa51569f0a60960f425
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:8751149d301adca9db725b867e22ceb4be056cd16aa43ac55307d1ffae4f656cf43678bff88057e65a90871b8a2a9910
+Ctrl.data = hexdata:5492f38f35ca8254b8b50e45dba0f9eca6e5b4fd1275d80984e67cbc4c3377f1ed734c46a1a53fd774f9d10de7cb8186
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 3c05d6e0733946fbb7fbbec7cfc6a1a647d8313c14ee7f3d0de15c29ad56cda0cdfa171a5b312cc7318c12a8fac80206
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:8751149d301adca9db725b867e22ceb4be056cd16aa43ac55307d1ffae4f656cf43678bff88057e65a90871b8a2a9910
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = dbcbe0371453d2d7794e18fb951d16e587046b1c8672b8975985067b8826e3174b18ec1a622d104d2349fbe7cf516acc
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:dbcbe0371453d2d7794e18fb951d16e587046b1c8672b8975985067b8826e3174b18ec1a622d104d2349fbe7cf516acc
+Ctrl.data = hexdata:c8456dec887407791bff92fc9a929b94139e90837c778d61735f85d057d2b59b45a57535368c78fbac10e6440a46af6f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = bfa7282e1e5e7396743994a1b7708bed617b20a2d1f8514e28e9322187e7afce7ea133881ecf305e0aeacbe972835ce1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:dbcbe0371453d2d7794e18fb951d16e587046b1c8672b8975985067b8826e3174b18ec1a622d104d2349fbe7cf516acc
+Ctrl.data = hexdata:c8456dec887407791bff92fc9a929b94139e90837c778d61735f85d057d2b59b45a57535368c78fbac10e6440a46af6f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 91eca687ecf6db1613aab6b8bc60b118a4e6e98b94afb48638efa00717451310cefa5a533867281b7624ecbdd7614deb
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:dbcbe0371453d2d7794e18fb951d16e587046b1c8672b8975985067b8826e3174b18ec1a622d104d2349fbe7cf516acc
+Ctrl.data = hexdata:c8456dec887407791bff92fc9a929b94139e90837c778d61735f85d057d2b59b45a57535368c78fbac10e6440a46af6f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 1b1e6b3a2e33d3616a5a41368993d80a7ff4ebfbd3973fa6bb6582a13bceb21f3085dd7b0a731bc03ea931dd668549f8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:dbcbe0371453d2d7794e18fb951d16e587046b1c8672b8975985067b8826e3174b18ec1a622d104d2349fbe7cf516acc
+Ctrl.data = hexdata:4e14e5e218a29c7d70a83bb39b782d2c9ba5a2ba856e8963bacb4fc1aaa7d376e16175cbeb17634f90225a2f8483b2ed
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 50ceeded13db2c364b44c976d708b7fee57eec0998c85eacc05c2b0a3b4cafeda1642751f78530c433f689ee4a23d4e3
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:bb156178fd7d06e40789668fe93b4432d7e52c0294f11eb2f64c5bd24836115c7034b403a453976f51d699a348e64104
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 9bd2371a1c4e8850f6d52eadfd088cc380c8f76612fcde4ac4a6605a6ae5117820ebe108273f6533cdeea942bcb3ab6a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:bb156178fd7d06e40789668fe93b4432d7e52c0294f11eb2f64c5bd24836115c7034b403a453976f51d699a348e64104
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 71b365f40805bd7a810d704512c6f17110589d9585580324d9cfceff6f81f4eceb2128fa295f9b236fe5fee4629e1859
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:83945a53ffb26b51f21f69d75c414309e5155fa030723c1c38cffe89cb04edb6
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 12c2bb4946770fc0378134cb2cb3504b44724a2fc10d80bd691b42ea5a77370888af2cc8832564214dabc967fab153b1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:12c2bb4946770fc0378134cb2cb3504b44724a2fc10d80bd691b42ea5a77370888af2cc8832564214dabc967fab153b1
+Ctrl.data = hexdata:00589f3587b9fd9e27cd4e411568bf56df30a6a0d969e88eec4944b5b442d2cd7188c1b11e78912824bf6f48db8dd30e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 20832548d9ca0fa619833e866639df7412ac7c3906e8076c6e4553a2e56fa8703b1727d64015cb6aad020e8b5d889a6b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:12c2bb4946770fc0378134cb2cb3504b44724a2fc10d80bd691b42ea5a77370888af2cc8832564214dabc967fab153b1
+Ctrl.data = hexdata:00589f3587b9fd9e27cd4e411568bf56df30a6a0d969e88eec4944b5b442d2cd7188c1b11e78912824bf6f48db8dd30e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = ab2f7ea9aaf2573370c6b46e929910cab6da6a0aebb236b337e5241e9c5226be3b423bfde3f06b34a7560d98885c8c54
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:12c2bb4946770fc0378134cb2cb3504b44724a2fc10d80bd691b42ea5a77370888af2cc8832564214dabc967fab153b1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 2a3381ce1639af02a64ac0735edfc729dc4019696fe7d4f9464ab7cd7a9978436cbca4461d19e93a3aaad1f7dad6c36d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:2a3381ce1639af02a64ac0735edfc729dc4019696fe7d4f9464ab7cd7a9978436cbca4461d19e93a3aaad1f7dad6c36d
+Ctrl.data = hexdata:a6a0c99dc81a74aedf37284ef07701cea224293ea00dc688ef3ed30368c811a4a5c3cd4e7a2a969539bf7bfeb79253e9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 2217a5a433ed108d3fda94ed78632222806baa2c3f16b0b95534760ae0bd7403d8f9d95f47888b2f2b0b080b3b046d5c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:2a3381ce1639af02a64ac0735edfc729dc4019696fe7d4f9464ab7cd7a9978436cbca4461d19e93a3aaad1f7dad6c36d
+Ctrl.data = hexdata:a6a0c99dc81a74aedf37284ef07701cea224293ea00dc688ef3ed30368c811a4a5c3cd4e7a2a969539bf7bfeb79253e9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 3c32294e5dafebf41e4b45f2ff7f70b925c2ea78d1ab0d31f8cf813d7ac47b766809519cac70c5b3bba389e33a04e6f4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:2a3381ce1639af02a64ac0735edfc729dc4019696fe7d4f9464ab7cd7a9978436cbca4461d19e93a3aaad1f7dad6c36d
+Ctrl.data = hexdata:a6a0c99dc81a74aedf37284ef07701cea224293ea00dc688ef3ed30368c811a4a5c3cd4e7a2a969539bf7bfeb79253e9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = f92f95ee85dadda7467b4a402c877c746d170a986a18ffe13a7263f11a74e4322d567ecca89d0e5dda4f624aac0101ba
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:2a3381ce1639af02a64ac0735edfc729dc4019696fe7d4f9464ab7cd7a9978436cbca4461d19e93a3aaad1f7dad6c36d
+Ctrl.data = hexdata:4ad8bec778fc2c32c98470e27d4151126e2a215a32cdd2a688e47717e5fa7490b586d2c4fb54e0996417ccdf189fbe73
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 517a3f7ef3d51098512ba68b0066deed4a6f3f016d78949e79dadb1ab730beb84d556b31c8c1eb7d741cccfd12313049
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:ce8a273136c4c91b175a57e7b27eb2929a31e3410e9c5b8b7dfa442f5459e59222d6dbea6f1d0e5b7b8d8bcae28b58c9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = d3fc95dacd1c4ed05b0d0f11ea7128f309c7dc81ab7d732b7333d4e6347189923e44ee2a0b4047fcd502f7e74edef55d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:ce8a273136c4c91b175a57e7b27eb2929a31e3410e9c5b8b7dfa442f5459e59222d6dbea6f1d0e5b7b8d8bcae28b58c9
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = fa6c3df3027a0711fe712c3e43886eb56b0f26894a8203c5a1a3a7813977ccf6668ff1e2d94bca987e6fb169e6f47b85
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:d57947df07774b69399f726359860d5f20ab3b23c64446386c2370defcdc915e
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = e87f946ab1726ab5e911df8b14f6393db1c72caa512e3d235847a271ae1b4d8643ff19b393710b67961eca39cebcf138
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e87f946ab1726ab5e911df8b14f6393db1c72caa512e3d235847a271ae1b4d8643ff19b393710b67961eca39cebcf138
+Ctrl.data = hexdata:9e7c01ccd11887a65a50be6bd9ca2263fe02a5fa483579d0e139faea00e920b12ef044fa1c3a29480217ccbba6fff0b8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = bfc1f429408ebc49b9ae80a36e1f354e695351c24c002fd96059763b06ac6db3c2169b4af955ac03dd431cd4aa5269f9
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:e87f946ab1726ab5e911df8b14f6393db1c72caa512e3d235847a271ae1b4d8643ff19b393710b67961eca39cebcf138
+Ctrl.data = hexdata:9e7c01ccd11887a65a50be6bd9ca2263fe02a5fa483579d0e139faea00e920b12ef044fa1c3a29480217ccbba6fff0b8
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 3ae6b72885417b225a3c4f92ebf8e3f7d33f968f44ec51edbdd628d867432adbdc672579d857bcc5a575a646e3622904
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:e87f946ab1726ab5e911df8b14f6393db1c72caa512e3d235847a271ae1b4d8643ff19b393710b67961eca39cebcf138
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = a92245795eac1334ddd246d3857de343813f59bb2eaf78dc8e92dcc61926b89d5252e357289485573c693da5b7a0b3ab
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a92245795eac1334ddd246d3857de343813f59bb2eaf78dc8e92dcc61926b89d5252e357289485573c693da5b7a0b3ab
+Ctrl.data = hexdata:6b301e7a7b3f3d960a620ca6c0a8855c7806cdee61e8c3344330c15c023f76fc31996ced8b35beee2c492c910f2dc2db
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = b48a4caac858a953f1b5f9019484fb4fea955b533865db740fbaf945392d3bac0d0f4038d2283e00838dcdbdbdf2d9b0
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a92245795eac1334ddd246d3857de343813f59bb2eaf78dc8e92dcc61926b89d5252e357289485573c693da5b7a0b3ab
+Ctrl.data = hexdata:6b301e7a7b3f3d960a620ca6c0a8855c7806cdee61e8c3344330c15c023f76fc31996ced8b35beee2c492c910f2dc2db
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = f54b230bd2fb82bdb0eefde4368177383e5d104ec4e6ab71ff129e356807737ed9d522d6014ac56bad4ae23cad76e8b7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a92245795eac1334ddd246d3857de343813f59bb2eaf78dc8e92dcc61926b89d5252e357289485573c693da5b7a0b3ab
+Ctrl.data = hexdata:6b301e7a7b3f3d960a620ca6c0a8855c7806cdee61e8c3344330c15c023f76fc31996ced8b35beee2c492c910f2dc2db
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = e9c305cafa53d3bb189013492fc6e40f01fd194304aea30fe73b8322161edf4a39e6530c3904cb5bd8fa8644ece55a2a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:a92245795eac1334ddd246d3857de343813f59bb2eaf78dc8e92dcc61926b89d5252e357289485573c693da5b7a0b3ab
+Ctrl.data = hexdata:5e28ee7474db3de8996894fb8285af4469349a0cc7cca47544b0b7c7663dd3ea7399ad26f054a75f4f0a9260447f4030
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = be0b885a296f266b0f50dc53f78b27ebac7292f627b3658bc4a95607529f5864d47e25c848363c0ab5dcd83193fd62cc
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:53c45ce0fa2644a0a532fc5e73272a655bca78e483d86e872c521cf5a0a75a34b9f546f4b9a56e8a2c3a52525b0ddcce
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 3e67e81d98d6a17439294130cb14383aeca788251a609bb97e7c2b81f53c195fb5f95a6133d014083b5e2c3a9d04c1e2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:53c45ce0fa2644a0a532fc5e73272a655bca78e483d86e872c521cf5a0a75a34b9f546f4b9a56e8a2c3a52525b0ddcce
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = d02ae01d3bb7e72d99f32ff7561e1243576bd37ea06b3c8a31e991c92b169f647541fa5eba74086891b6436489dae045
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:eaef8daa591f860e4e4693a39a01a246790c3e26c6545a9831a69550bbb87b91
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 6f06af2ecb2262d77a9a6a8e94cbacca3645cefa3dd9f23e4bbcc59042a1ac46029950f894f1b96fbdb8c926375d107a
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:6f06af2ecb2262d77a9a6a8e94cbacca3645cefa3dd9f23e4bbcc59042a1ac46029950f894f1b96fbdb8c926375d107a
+Ctrl.data = hexdata:16fd0b738388236a90949eb344161ae277b5851169ba636cc83614c0b88f800d69eca40d3a93a9b284ee9dacb1cc197c
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = e1f668956b8f85ffc5516b300c29f26d0af9a3403982dc75e3994a6a5cf105e891567737dcee9cfd48457c948059e411
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:6f06af2ecb2262d77a9a6a8e94cbacca3645cefa3dd9f23e4bbcc59042a1ac46029950f894f1b96fbdb8c926375d107a
+Ctrl.data = hexdata:16fd0b738388236a90949eb344161ae277b5851169ba636cc83614c0b88f800d69eca40d3a93a9b284ee9dacb1cc197c
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 852e3d5b12fadfbbf3defe048a14ac51401299d39c92e0c359b8ff9a3c34335d1d0bb6881b2c30435248c4fa341033e3
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:6f06af2ecb2262d77a9a6a8e94cbacca3645cefa3dd9f23e4bbcc59042a1ac46029950f894f1b96fbdb8c926375d107a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 566e81b068476abf14a8495f49b34441ffd488d1252c0d0140a437ed8a42ca0532311ac7117510481bd5b1b4427bdf8f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:566e81b068476abf14a8495f49b34441ffd488d1252c0d0140a437ed8a42ca0532311ac7117510481bd5b1b4427bdf8f
+Ctrl.data = hexdata:852395eb84730bac2c1a09f3843a6e0705fb66924953f48ecabe9a0d3c73c1933c8f99efb0ca9cbb8b2dbbc966fb5bd1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 307f12a3c070fb00f706a4bf6d7492d5b3c1e4eea713d14ab5d52324237eeb75f585b6b278df896614f64a9119e750fe
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:566e81b068476abf14a8495f49b34441ffd488d1252c0d0140a437ed8a42ca0532311ac7117510481bd5b1b4427bdf8f
+Ctrl.data = hexdata:852395eb84730bac2c1a09f3843a6e0705fb66924953f48ecabe9a0d3c73c1933c8f99efb0ca9cbb8b2dbbc966fb5bd1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = cf098b49f302e84c11aec463638b22ada6083de98e319903a934d114613084d6c162e4c8d26522ef8cdd45c515a7c74b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:566e81b068476abf14a8495f49b34441ffd488d1252c0d0140a437ed8a42ca0532311ac7117510481bd5b1b4427bdf8f
+Ctrl.data = hexdata:852395eb84730bac2c1a09f3843a6e0705fb66924953f48ecabe9a0d3c73c1933c8f99efb0ca9cbb8b2dbbc966fb5bd1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 9def86f445a25c8458ab71af0030fa4b1aa44858adb4875702ea521bd6cb2272fb6938b52bb3842963755bb0658ccad7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:566e81b068476abf14a8495f49b34441ffd488d1252c0d0140a437ed8a42ca0532311ac7117510481bd5b1b4427bdf8f
+Ctrl.data = hexdata:80c10c6944df45bb77135b12af17738a5625802faf9c3fc22600f18969f147a141e94e131eca654ad86c491d1d98a9ec
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 7931cc9028395f8b1392e398358dffa95f2cea2804ddd3d1c0c477d6373fbd48be6c5e4d971d5707e0674a97c512cdba
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:4d4855b455ea510c22bd621486b43c6cd12d28af2c17cb0bfe7c5df2e94d56c9d1c43d591d39572018322cc8210ae12b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 2571b9bc3d01f14a1e509764092de227e2ab28b5faf70661bfcd79de6374367d4bf90ad6f3bc0f01e12b61ed4943f042
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:4d4855b455ea510c22bd621486b43c6cd12d28af2c17cb0bfe7c5df2e94d56c9d1c43d591d39572018322cc8210ae12b
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 09cd4219de326e48bdf79d2d88689877cff7941715bd37aa992e638eb8998a9b79dc689e11215c7681809205ed1eabff
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:aadfb50d4a29c09e7058dbaba4a90ea3a0aa37de17275c9b89176f442d6e4b06
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 45ffc3730b02754071604360ff8689c372e0e63abb5665e1a1799f91dc79f04ad87ab4cb589205224ca810a8cf872448
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:45ffc3730b02754071604360ff8689c372e0e63abb5665e1a1799f91dc79f04ad87ab4cb589205224ca810a8cf872448
+Ctrl.data = hexdata:81f8bb49b27cc25f4062ddee4794fc7e3c583dfbdf160eb9b4a39de5f7fdca2c83c8842ed18dc93db6b4556504a72291
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 21456e5662e2067c7beb09079a7e12e4b27a3721e3047571a87d2da45267dafd1c6af9d62d212d802ed69cd69ed63067
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:45ffc3730b02754071604360ff8689c372e0e63abb5665e1a1799f91dc79f04ad87ab4cb589205224ca810a8cf872448
+Ctrl.data = hexdata:81f8bb49b27cc25f4062ddee4794fc7e3c583dfbdf160eb9b4a39de5f7fdca2c83c8842ed18dc93db6b4556504a72291
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = b2e69b45e4a926ce6895f59af91efd9b2edd0e5338452bd772247f432ca294380b6e494fd4e5321f013787036225b9ac
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:45ffc3730b02754071604360ff8689c372e0e63abb5665e1a1799f91dc79f04ad87ab4cb589205224ca810a8cf872448
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 06deb1755458ed01f6e53ca640eb2d4c6f42641221fb50e64de8e3a2466691222cc6a21bfcc3a2e1a6fd631174b0bb00
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:06deb1755458ed01f6e53ca640eb2d4c6f42641221fb50e64de8e3a2466691222cc6a21bfcc3a2e1a6fd631174b0bb00
+Ctrl.data = hexdata:f359cee8145326f8588220d19274068b16166021b07a371b66955a5504695254ad30b2c0daa5a6ee97a59d338af19ebd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 3b6af39d0f782e9e14102c259584a84e22b8f01cb8bcc474b7682d03f896905bb5080db4818fb2f5e036d48f8ff9f829
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:06deb1755458ed01f6e53ca640eb2d4c6f42641221fb50e64de8e3a2466691222cc6a21bfcc3a2e1a6fd631174b0bb00
+Ctrl.data = hexdata:f359cee8145326f8588220d19274068b16166021b07a371b66955a5504695254ad30b2c0daa5a6ee97a59d338af19ebd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = cf0d58f7bfc58fc46eb87dd8201b1ec59da4fe4fde9e864e295d5c1ca11a1c80cbda554637c8b244df0dde1f171408b1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:06deb1755458ed01f6e53ca640eb2d4c6f42641221fb50e64de8e3a2466691222cc6a21bfcc3a2e1a6fd631174b0bb00
+Ctrl.data = hexdata:f359cee8145326f8588220d19274068b16166021b07a371b66955a5504695254ad30b2c0daa5a6ee97a59d338af19ebd
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 0585f4818b8203525986415b4a253901f80040cbd62bd081009b14788a01f71aa05ef9b38b2cc15eb09cdbba82e4381b
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:06deb1755458ed01f6e53ca640eb2d4c6f42641221fb50e64de8e3a2466691222cc6a21bfcc3a2e1a6fd631174b0bb00
+Ctrl.data = hexdata:8fbf37769af8301a6d6067348b7b4d30b2da212dba16cd83f4bfd9da83964053c37eec6954ad77259ba77d69a074e13e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 74075af4eef3b6d0bd14ebcc1a30aa4800c426b197945dac99d359bf655e3f60facf22dc20bd7b835d9fce8054d5dbad
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:d43bb2adb7ad63a04e40fd5390e7cc7ba0ed8953c2cda92f4383ed8e3d2632a48dda67b9a54eee831ed7f2e2a9f99c5e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 0f76f5af5ab1ce245943313fdc5f78aca0277e27fae95fb12b57469d485bb6612b35b9795cfb8bbda734c8b5291dc35e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:d43bb2adb7ad63a04e40fd5390e7cc7ba0ed8953c2cda92f4383ed8e3d2632a48dda67b9a54eee831ed7f2e2a9f99c5e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 7d40656445a89b8a03a7ccaca413d9438d8a7b434812b6d141b2089464953accbc4cace5c124c3038a558d0b59e7915d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:ad2cfa585abc0d2ca5db71c0d1a765e78b59cda0cf3b5eab80731a99a951072b
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = c859ebeb69d7621864780cd992f00c87f7902c5f23d16c780ffb3baa9d7e6b33aff77ab0811886bb9aa43f4229bcfe31
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:c859ebeb69d7621864780cd992f00c87f7902c5f23d16c780ffb3baa9d7e6b33aff77ab0811886bb9aa43f4229bcfe31
+Ctrl.data = hexdata:73f2b0896bc0c24dde3b4f01b3285eed02f78633f1bd910ff5f9a331b6495d70d1fb06610a312f3a60d9f6a7a5f39690
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = ac3b6e92e1f973f82b29e283bfaccce9c5f4c16e2d885b49fbde0e537cdee5718377ea7117e0add2ab997a7c12357858
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:c859ebeb69d7621864780cd992f00c87f7902c5f23d16c780ffb3baa9d7e6b33aff77ab0811886bb9aa43f4229bcfe31
+Ctrl.data = hexdata:73f2b0896bc0c24dde3b4f01b3285eed02f78633f1bd910ff5f9a331b6495d70d1fb06610a312f3a60d9f6a7a5f39690
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 35127fae2fdfcfc744578ac51994e1d6140cb215cecc1172f052c2626a03edfc9c0b270326313272b1a7a82a45495cbf
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:c859ebeb69d7621864780cd992f00c87f7902c5f23d16c780ffb3baa9d7e6b33aff77ab0811886bb9aa43f4229bcfe31
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = f14ec4e75c444e149c8528c1d86424b0d0ec6de8af14a0045443a5aa462d09e24c346060a26721d7f337297fcdb73e65
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f14ec4e75c444e149c8528c1d86424b0d0ec6de8af14a0045443a5aa462d09e24c346060a26721d7f337297fcdb73e65
+Ctrl.data = hexdata:79f1027369f4af0a5d5b84b5083ab2dbd1244139aaf648bea9d3e03abcff938aa78670aa9f12e0e160c3eda36f65ab75
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 006523da7c759a9664b0a29c6d4d6c3f24a5f1f0642874f6f260b3617514dc933703f8e21be3d79246511d6eb0602fa8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f14ec4e75c444e149c8528c1d86424b0d0ec6de8af14a0045443a5aa462d09e24c346060a26721d7f337297fcdb73e65
+Ctrl.data = hexdata:79f1027369f4af0a5d5b84b5083ab2dbd1244139aaf648bea9d3e03abcff938aa78670aa9f12e0e160c3eda36f65ab75
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 56c42d1105ac8073316e6be3efd459539bf8c9fe8b55f24895d643f2d5a6e882a9334e7a3e8e7092072e62d6c67ba038
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f14ec4e75c444e149c8528c1d86424b0d0ec6de8af14a0045443a5aa462d09e24c346060a26721d7f337297fcdb73e65
+Ctrl.data = hexdata:79f1027369f4af0a5d5b84b5083ab2dbd1244139aaf648bea9d3e03abcff938aa78670aa9f12e0e160c3eda36f65ab75
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 40c01edda9d1bb545623f56ddd05fd9c788b7eacd667bbb3916ae0d71c1235f3b8943fbedae9447b1c9492e2d5806f07
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f14ec4e75c444e149c8528c1d86424b0d0ec6de8af14a0045443a5aa462d09e24c346060a26721d7f337297fcdb73e65
+Ctrl.data = hexdata:f782fce708c7fb5bf48303d42e38c4c3598b4c82e186b424cd2e6a4514a58da02a6e472e04981d9235a996fa82de748e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 6d2a9e1c4f7a07f51af877f2e301ddf37c2c7deae30947c53c076e7b20dd20dd137724f62706b35ba3dd02fe1bbc6771
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:07db069260fd2ea0cc174c1bbbb2b685d090ff14eb1a1e750a55e633ec6eae8d8eb30c38864b4c8cff92f8e14fba6deb
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 0930f5fe2f1a7651534350db7cbf81a30d90d6acf11ee7054fb1fe03ba6f1657a5452f1e0c8aec106e682bf3ce319d9d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:07db069260fd2ea0cc174c1bbbb2b685d090ff14eb1a1e750a55e633ec6eae8d8eb30c38864b4c8cff92f8e14fba6deb
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 9a64292070a6ea9704cd7117bfcbe7c6378c9c63ed0c0f997cfb518db5f87ca1006e1eb374a3b9515138e9b39774218f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:371954308edaeefb9e4abddcfc514a9c812bb34dfbcfcb6cea1d2246a62427d5
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 0b4028bb1c50c64620b0595cb2c77a43d4d729245d0502a00c76740cc195e320b13086af43cd21ecbcbe7d926fca496c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:0b4028bb1c50c64620b0595cb2c77a43d4d729245d0502a00c76740cc195e320b13086af43cd21ecbcbe7d926fca496c
+Ctrl.data = hexdata:50543ddbf93cb27df7d958cc31bc88a74e459bc19ad3a2454436618b5145ca1dbe921c164e8453194e94b79cf0b5a0d2
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 43d49b8255b120ed5e58ec8a6e8af25a9744bcf09f49385df6fc1568165241349fc546d4f0fb5c8024453b96df6dd2e1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:0b4028bb1c50c64620b0595cb2c77a43d4d729245d0502a00c76740cc195e320b13086af43cd21ecbcbe7d926fca496c
+Ctrl.data = hexdata:50543ddbf93cb27df7d958cc31bc88a74e459bc19ad3a2454436618b5145ca1dbe921c164e8453194e94b79cf0b5a0d2
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 3d9858bf41c9e22fc524227a645f3782fbee662c900b2fb1888427a72117ac0fb1e013162bff6bbaa3f5f1547eec7be2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:0b4028bb1c50c64620b0595cb2c77a43d4d729245d0502a00c76740cc195e320b13086af43cd21ecbcbe7d926fca496c
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 9a758229844cc9b3de5cf554bc5984b959269773f937deefd0ee58ed0d719a978b7d16a7770d23510b27978a70281474
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:9a758229844cc9b3de5cf554bc5984b959269773f937deefd0ee58ed0d719a978b7d16a7770d23510b27978a70281474
+Ctrl.data = hexdata:4b857ace793fce3accfb9444de7aee6803e0decdd3f457bef0b1d4dd6447359eeaf3c9a284622aa0731b7cd888897bd1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 64477d25734889a7062ccd36d73e3ae3ce4a416efc4ca6e625b79052a1db24c285e34c8cdf31656c8323ab9ce44ad4df
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:9a758229844cc9b3de5cf554bc5984b959269773f937deefd0ee58ed0d719a978b7d16a7770d23510b27978a70281474
+Ctrl.data = hexdata:4b857ace793fce3accfb9444de7aee6803e0decdd3f457bef0b1d4dd6447359eeaf3c9a284622aa0731b7cd888897bd1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = e0036e688f3a556a15ffe19fe2795913d9f499ffd3919d9107ae062066b53f5395486bee26e8f9892616e2c99cced28d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:9a758229844cc9b3de5cf554bc5984b959269773f937deefd0ee58ed0d719a978b7d16a7770d23510b27978a70281474
+Ctrl.data = hexdata:4b857ace793fce3accfb9444de7aee6803e0decdd3f457bef0b1d4dd6447359eeaf3c9a284622aa0731b7cd888897bd1
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 2c1f8cd1719ce51ff646c6fc92a5763ec5ff6902400dd012bf880087370033b00650ba4ae3b3681881d6cc591ed5641c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:9a758229844cc9b3de5cf554bc5984b959269773f937deefd0ee58ed0d719a978b7d16a7770d23510b27978a70281474
+Ctrl.data = hexdata:43fbbfe6d001f7ac624624c609ba92441e04aa4c0fef40654b82e01b72a791e80618e175d22fe6b5ab5c178f7667e867
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = a2495c69d4cc3b35dbfee989ae9455415705935a77651a37385b67908eaed40c071208755018bec80a6c34bd64406710
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:e7b076d704091b4080952316270481f229c5e7bcffcecbe6eaa9c418230419dbd442fbfa6c89d12c8ba0090f89d90de5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = ad0645846c685bc37094123403a2a7f7caec78e687b185e1496f655d254f3bcffd04bc29e2b2dc04d8ec8e9f11ddfcf4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:e7b076d704091b4080952316270481f229c5e7bcffcecbe6eaa9c418230419dbd442fbfa6c89d12c8ba0090f89d90de5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = ba83f794ed25e29fe7aeff5b542457fc3e90e4c3acc980110ba95a2e4652afedb25787b265972892002369b894516231
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:0b8a848caaab3159494881a4dd372009485dafc170fc11648bfe829f9001dc63
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = f5b03496a24c3331f58bf6a3435abc614b796bcaef11b65f104ce3855261b20b7a07b1592f025bc8ec2d9b5f35644e18
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f5b03496a24c3331f58bf6a3435abc614b796bcaef11b65f104ce3855261b20b7a07b1592f025bc8ec2d9b5f35644e18
+Ctrl.data = hexdata:7f892b8cb527cf479711cd127c69152c6ef32aae37a48b6e4160c04190adbc6b8bbaff775ab8edb59284d1c86d277755
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 3a3c7ba28192268cb293a348092bcda2d8b60428b3c3a0bb4317d0ed5a1111a3054f4aa514beb79e31121e91965e9e80
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f5b03496a24c3331f58bf6a3435abc614b796bcaef11b65f104ce3855261b20b7a07b1592f025bc8ec2d9b5f35644e18
+Ctrl.data = hexdata:7f892b8cb527cf479711cd127c69152c6ef32aae37a48b6e4160c04190adbc6b8bbaff775ab8edb59284d1c86d277755
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 731e40db136f53384be606574f940d789c5be823c28727d46817b628ee9b836696d50d064298f89ee80d2adfc092ce72
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:f5b03496a24c3331f58bf6a3435abc614b796bcaef11b65f104ce3855261b20b7a07b1592f025bc8ec2d9b5f35644e18
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 509df878e86b4eb004ea2ac7228d26612ff3f284ca112a039390e12ffef7270c84adaf41451e75699ae08dc2efa02071
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:509df878e86b4eb004ea2ac7228d26612ff3f284ca112a039390e12ffef7270c84adaf41451e75699ae08dc2efa02071
+Ctrl.data = hexdata:d71bf2f002c654eccad8225a97d877ea38f40b67dd30040658419e9caf579d8ae349883f5299bf54aba0f61d971b7f90
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = cd593873f98049f9729edb4562ca7cc434142f633a098c0119be0931cdb78d084d3daa01d7a46526d1d2fc1b04b918b2
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:509df878e86b4eb004ea2ac7228d26612ff3f284ca112a039390e12ffef7270c84adaf41451e75699ae08dc2efa02071
+Ctrl.data = hexdata:d71bf2f002c654eccad8225a97d877ea38f40b67dd30040658419e9caf579d8ae349883f5299bf54aba0f61d971b7f90
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = 38b5ff48b24cfd296919ecb290f774f02a56d247430c8cdb4615d1a4d9c80ae08fef8a4f5c06d1d566ce34dcbbd8f9c4
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:509df878e86b4eb004ea2ac7228d26612ff3f284ca112a039390e12ffef7270c84adaf41451e75699ae08dc2efa02071
+Ctrl.data = hexdata:d71bf2f002c654eccad8225a97d877ea38f40b67dd30040658419e9caf579d8ae349883f5299bf54aba0f61d971b7f90
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 6a25ad33e7a00d1fd2336d16c00068e0ac0bdb155b2035248cd9c10c4d8f7806adc26a34fcefe4cf958351d8af04454e
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:509df878e86b4eb004ea2ac7228d26612ff3f284ca112a039390e12ffef7270c84adaf41451e75699ae08dc2efa02071
+Ctrl.data = hexdata:377bd75f1a7f42975c10046c29884917dc101db1b42d0b56ae55f3fe64b19ad9b4538fb70d99cf4e48d23787538f1542
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 73b00fb31a4c8f1e2db8ae1dcab522b0db44b1cbee4c2bb79cf59df1818c516dbbc5f060c3235a2baab8b285c5947cfe
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:d12079d043237f25e320c42aa4f189e013b2301cd2cae46709b3fc236b1b55052948e90cd57dd3346974dabe61a0e28a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = bb79c15599851619e575397c9e10951c49c840f30ec15e3320f600be6eac5d899bc1236f170254ce292765e853cc0459
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:d12079d043237f25e320c42aa4f189e013b2301cd2cae46709b3fc236b1b55052948e90cd57dd3346974dabe61a0e28a
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 9acbe9f41e06ae8f628277e9bf5f3cc8bb35586ccc1be1e0ab73199c674e156a3d72940e77f6df3c8e07728bc9c75ff6
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ed65de5e19dae7c8ecbcfe1c85cedda4c0e0320bbfa863cf8f7123a45b7454b
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 2beb905b5a41a4b60b903ec139a6dbd1c45ce4d31ff3af34b73ad31dec77838777b0ed0c62c816863982939bce20ff2f
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:2beb905b5a41a4b60b903ec139a6dbd1c45ce4d31ff3af34b73ad31dec77838777b0ed0c62c816863982939bce20ff2f
+Ctrl.data = hexdata:99ffe011dc3a2f66aa5db47f4cbef2e2bf4619b4d25a830f859b13dbb1f8c1ae6007bf27616e9c45d8adae4d98c8e174
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 8097220d31a4dd82ceefcf40e805b314f9b7f25b246da9397a1417379e8ee08ee9f41dda7081945a7c1a6eb4a6a09296
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:2beb905b5a41a4b60b903ec139a6dbd1c45ce4d31ff3af34b73ad31dec77838777b0ed0c62c816863982939bce20ff2f
+Ctrl.data = hexdata:99ffe011dc3a2f66aa5db47f4cbef2e2bf4619b4d25a830f859b13dbb1f8c1ae6007bf27616e9c45d8adae4d98c8e174
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 1fc2a842d11076c62432ddbc065a73c7a022d65cc382aefc74ebc07b95cff1dba2422cbd5ddf7e47ce9f9738c8deb5d1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:2beb905b5a41a4b60b903ec139a6dbd1c45ce4d31ff3af34b73ad31dec77838777b0ed0c62c816863982939bce20ff2f
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 60651bc199972f8e1b97a2286d744bc9f5832cf28191ac6ce09135ca3ce3f2bd09e8b98052da27a1c5b1a425b5785de1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:60651bc199972f8e1b97a2286d744bc9f5832cf28191ac6ce09135ca3ce3f2bd09e8b98052da27a1c5b1a425b5785de1
+Ctrl.data = hexdata:b207273145e7c5e17f9f088f23e271166d822b7d1850efe3641015560379312cef900012ae06bd1b97c423a6f4cacfe6
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 0eaef4e848bbd1927ff4263a9a6cf67ea1dd0c00af88cc00e31714387fe5706a2415fdc939a6167cbdc89fd9133ccca1
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:60651bc199972f8e1b97a2286d744bc9f5832cf28191ac6ce09135ca3ce3f2bd09e8b98052da27a1c5b1a425b5785de1
+Ctrl.data = hexdata:b207273145e7c5e17f9f088f23e271166d822b7d1850efe3641015560379312cef900012ae06bd1b97c423a6f4cacfe6
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = ed0cce2c375b1690d5940de879205a6c859cc81904c1f9da882ba559bfb8fbcd7b24b3a6f58947d21a8023aced8ae156
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:60651bc199972f8e1b97a2286d744bc9f5832cf28191ac6ce09135ca3ce3f2bd09e8b98052da27a1c5b1a425b5785de1
+Ctrl.data = hexdata:b207273145e7c5e17f9f088f23e271166d822b7d1850efe3641015560379312cef900012ae06bd1b97c423a6f4cacfe6
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 03f29110d0c506ff9306ef46b3ef76366fa5fc9e28f6aff85272bba972ba93590326b11677a4b9e5c320db84888a2b5d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:60651bc199972f8e1b97a2286d744bc9f5832cf28191ac6ce09135ca3ce3f2bd09e8b98052da27a1c5b1a425b5785de1
+Ctrl.data = hexdata:6c6c915c1256ed57209751aa4850daa7454819858a0fedb12c373a7037abc50c7b547cdfd32c33cb8f6138c088165e61
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 52abe73f22784e9e5af068f7f3ded581bc5950c1a0923a0ea47a3357f8bfcf7f071b3178ec320a91f82286a81bfa3c43
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:3cf57a8d291350ce24d8633b603e2f0c515bc01c62540ad48a0abee30a49492cc3aa0e5a46fb514ea7af86f0ad0079f7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 40bff2dcbdee9a8b61f55017319943a546398712bb8a966ce898169d5802f49db9e5358a41ad2f2aef4897853267e92d
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:3cf57a8d291350ce24d8633b603e2f0c515bc01c62540ad48a0abee30a49492cc3aa0e5a46fb514ea7af86f0ad0079f7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = 954fb227097f71dcbd9acea908bcefab365bafeb4f0fbe1185511c75fa9d5cf935e2d9e3f0ac3a4327931a6cf0e142b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:1bfc5d5773f74aa53facc022cd186a00cabb76e156d2ea1abfb0f4889f4c129d
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = f2821923edba8641e31acd28f2c3617dc88aa10831fc605387ccbdfa1c5ede00e6df4a13c75d9ede1d8296ea24a92ed7
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f2821923edba8641e31acd28f2c3617dc88aa10831fc605387ccbdfa1c5ede00e6df4a13c75d9ede1d8296ea24a92ed7
+Ctrl.data = hexdata:10bd98a2468a46f79b5e797a93e153d64cbaacc2b7b52fb62c492d695bd230c758fc290a504161f0f2372ead3f4eda2e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 31d469f1dc7fe92aa00eae4bc9ce3f625b00add7194bd40ed1e2ea8fc1ea653b458002ad4f7644e80c2dd9ad2c4930e3
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:f2821923edba8641e31acd28f2c3617dc88aa10831fc605387ccbdfa1c5ede00e6df4a13c75d9ede1d8296ea24a92ed7
+Ctrl.data = hexdata:10bd98a2468a46f79b5e797a93e153d64cbaacc2b7b52fb62c492d695bd230c758fc290a504161f0f2372ead3f4eda2e
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 50a9866eff7c6875dff61dba25eab5d6fa4f73b4be5dd257fa6697f987c5fd2cd7e45c539939611f9255e99708a8763c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:f2821923edba8641e31acd28f2c3617dc88aa10831fc605387ccbdfa1c5ede00e6df4a13c75d9ede1d8296ea24a92ed7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 4dbdcccdd2385d8b13dc59db55873d94524331a127e73e88cbcfec756a5b535ae7d7dd8ff73d48cd85fba01b66022b93
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4dbdcccdd2385d8b13dc59db55873d94524331a127e73e88cbcfec756a5b535ae7d7dd8ff73d48cd85fba01b66022b93
+Ctrl.data = hexdata:c0c2d49e4fe8e5b14d557020548dec84b474bab505ef5e9e46c9ba774653286da331debce0b20d45bf216ae2e14879c5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = 4e48ccc5baf9fef7faca6b6488554afecdfe95aafe1735ad7132dfca679a398cb292072a20b3d654e77d4f4088c3c442
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4dbdcccdd2385d8b13dc59db55873d94524331a127e73e88cbcfec756a5b535ae7d7dd8ff73d48cd85fba01b66022b93
+Ctrl.data = hexdata:c0c2d49e4fe8e5b14d557020548dec84b474bab505ef5e9e46c9ba774653286da331debce0b20d45bf216ae2e14879c5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = b6216139c37365152a9212fd9c1c196722aed27e18f9e3d7b1e85b4a4c1138a1b1067b232047bb64b87b3f929678e920
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4dbdcccdd2385d8b13dc59db55873d94524331a127e73e88cbcfec756a5b535ae7d7dd8ff73d48cd85fba01b66022b93
+Ctrl.data = hexdata:c0c2d49e4fe8e5b14d557020548dec84b474bab505ef5e9e46c9ba774653286da331debce0b20d45bf216ae2e14879c5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = e6613af88be1d9293810ab50aad497da17e5225f7b8a164101220eb6550a244400b4da5b452e9b9e1a23d97c0af675bd
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:4dbdcccdd2385d8b13dc59db55873d94524331a127e73e88cbcfec756a5b535ae7d7dd8ff73d48cd85fba01b66022b93
+Ctrl.data = hexdata:f3344607473544b81c603c2e454a746a8a4be1c160de9e179d3a18d7992e8e81b26e614915194a49559a5af162266469
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = f736aaa47bf602b96fa971f98110c76919b88e460cb9e0dc6ed39135e204638b3c00ed9bc5e7e4f66c90339a515cc76e
+
+# New TLS 1.3 session starts here
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Output = 7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:1b49e91af94aa5b311518149a28aba1a0f22dfefb7e9cb1e38cae86451cbcebda3f94193398ae2b109831fc4ce3b6dfe
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6320652074726166666963
+Output = 9c5f3f76bd2ec1e2cce62de12f6502c3588e52585d1cb2d35d4b4ca80cb98acd77b545275fd1021118c41b13ec14faca
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.data = hexdata:1b49e91af94aa5b311518149a28aba1a0f22dfefb7e9cb1e38cae86451cbcebda3f94193398ae2b109831fc4ce3b6dfe
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:6520657870206d6173746572
+Output = a4a4fe8b35f44a35be31b532937514de2f79a7fa0db63241463ec04be6eb2e56288d579af1160c12d5218e42c921cfb3
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:219eb41da6bbbe2f14de92589983c15c6b84119ce6c515f32d1850835d73e8d6
+Ctrl.salt = hexsalt:7ee8206f5570023e6dc7519eb1073bc4e791ad37b5c382aa10ba18e2357e716971f9362f2c2fe2a76bfd78dfec4ea9b5
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 431b7156622cc17132aa45139f01c9516abd140a5b15f7bac80be758f3447e7a31213aa83c6fc6e84436447b3c4dc717
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:431b7156622cc17132aa45139f01c9516abd140a5b15f7bac80be758f3447e7a31213aa83c6fc6e84436447b3c4dc717
+Ctrl.data = hexdata:5b83ca74e83eacdda37b6a858e8bc05af8723e926ede3af9306a5d5057242b4cec28cfc092b31096ef52856ddec7d96d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632068732074726166666963
+Output = 9cd9027a2964c3b088f7f7b870b1fe8a490f08951228e28dbddd6fcece8871d4f76d087caf4eea780707d4094f7c6d3c
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:431b7156622cc17132aa45139f01c9516abd140a5b15f7bac80be758f3447e7a31213aa83c6fc6e84436447b3c4dc717
+Ctrl.data = hexdata:5b83ca74e83eacdda37b6a858e8bc05af8723e926ede3af9306a5d5057242b4cec28cfc092b31096ef52856ddec7d96d
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732068732074726166666963
+Output = 77e5a6b8b7f8ecd805953b2fe7a0e71ede9216d09a6d7f82aecc9bf30c60039c7571164d192f5a1df0a4960afe8cc0d8
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.salt = hexsalt:431b7156622cc17132aa45139f01c9516abd140a5b15f7bac80be758f3447e7a31213aa83c6fc6e84436447b3c4dc717
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:64657269766564
+Output = 6547c5bdc85b07b114ba5146f6eba34092ac27625897146b922d56da379a41bf8011fa8d2e88fa02065677fc7c930907
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:6547c5bdc85b07b114ba5146f6eba34092ac27625897146b922d56da379a41bf8011fa8d2e88fa02065677fc7c930907
+Ctrl.data = hexdata:95033d93b572219981af9a974d9cc2d78cde24fb39e13766c304c53597843ff54ab0c91fa6174611b16da5271dce79c7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:632061702074726166666963
+Output = be7f1f64963b74fff1aaecb5c9983692d1f2bb3dd71feeddd9f890eeda29d311793ded08b7bd9c4399e5bc20c5ec7d81
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:6547c5bdc85b07b114ba5146f6eba34092ac27625897146b922d56da379a41bf8011fa8d2e88fa02065677fc7c930907
+Ctrl.data = hexdata:95033d93b572219981af9a974d9cc2d78cde24fb39e13766c304c53597843ff54ab0c91fa6174611b16da5271dce79c7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:732061702074726166666963
+Output = eec520009350bd7c53c88bc30bb65e94bdb5a883dd386a454a557c457db49eb3d2725daaa7152fd893fd6367bff5c533
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:6547c5bdc85b07b114ba5146f6eba34092ac27625897146b922d56da379a41bf8011fa8d2e88fa02065677fc7c930907
+Ctrl.data = hexdata:95033d93b572219981af9a974d9cc2d78cde24fb39e13766c304c53597843ff54ab0c91fa6174611b16da5271dce79c7
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:657870206d6173746572
+Output = 0c529fb71c21986c91c4f2d47b5502065ba9ac2ac65559f1db6e1a09b9b36b6f4cbed7bb347a690b5b23c76f77afc6b5
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.digest = digest:SHA2-384
+Ctrl.key = hexkey:6547c5bdc85b07b114ba5146f6eba34092ac27625897146b922d56da379a41bf8011fa8d2e88fa02065677fc7c930907
+Ctrl.data = hexdata:5371106674e76ed37b98539d231b84a663abe1818125034e91b2debc4280ba942381c0426e338d43951e5206a09f30d2
+Ctrl.prefix = hexprefix:746c73313320
+Ctrl.label = hexlabel:726573206d6173746572
+Output = 7eacca12e407d32a062bc0aabbcbc9d32953cd50b131fcc63d34e5a4b200347098001b6e43c28a68705edac3c967285b
+
+Title = TLS13-KDF bad mode test
+
+KDF = TLS13-KDF
+Ctrl.mode = mode:EXTRACT_AND_EXPAND
+Ctrl.digest = digest:SHA256
+Result = KDF_CTRL_ERROR
+
diff --git a/test/recipes/30-test_evp_data/evpkdf_x942.txt b/test/recipes/30-test_evp_data/evpkdf_x942.txt
new file mode 100644
index 000000000000..dd53d120f6bd
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_x942.txt
@@ -0,0 +1,99 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = X9.42 KDF tests (RFC3565 2.3.2 Examples)
+
+KDF = X942KDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:000102030405060708090a0b0c0d0e0f10111213
+Ctrl.cekalg = cekalg:id-aes128-wrap
+Output = d6d6b094c1027a7de6e3117294a35364
+
+KDF = X942KDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexkey = hexkey:000102030405060708090a0b0c0d0e0f10111213
+Ctrl.cekalg = cekalg:id-aes256-wrap
+Ctrl.hexukm = hexukm:0123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba9876543201
+Output = 8890585C4E281A5C1167CAA530BED59B3230D893CBA8F922BD1B56A0
+
+Title = X9.42 KDF tests (generated tests to test different options)
+
+KDF = X942KDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:000102030405060708090a0b0c0d0e0f10111213
+Ctrl.cekalg = cekalg:id-aes256-wrap
+Ctrl.hexpartyu-info = hexpartyu-info:0123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba9876543201
+Output = 8890585C4E281A5C1167CAA530BED59B3230D893CBA8F922BD1B56A0
+
+KDF = X942KDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:000102030405060708090a0b0c0d0e0f10111213
+Ctrl.cekalg = cekalg:id-aes256-wrap
+Ctrl.hexpartyu-info = hexpartyu-info:0123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba9876543201
+Ctrl.use-keybits = use-keybits:0
+Output = 54bd5dbc1fa4c42c951f6fa51ec59e202b8c622bdb179fb2dd691ffb
+
+KDF = X942KDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:000102030405060708090a0b0c0d0e0f10111213
+Ctrl.cekalg = cekalg:id-aes256-wrap
+Ctrl.hexpartyv-info = hexpartyv-info:0123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba9876543201
+Ctrl.use-keybits = use-keybits:0
+Output = 76d566e948ca9ae61bcd4ce076f0bd5fe6789b5b0f288977235ecb12
+
+KDF = X942KDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:000102030405060708090a0b0c0d0e0f10111213
+Ctrl.cekalg = cekalg:id-aes256-wrap
+Ctrl.hexsupp-pubinfo = hexsupp-pubinfo:0123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba9876543201
+Output = ff368c7addb27d7599f8d49bc8d7fbf804540f119491ea419792c82c
+
+KDF = X942KDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:000102030405060708090a0b0c0d0e0f10111213
+Ctrl.cekalg = cekalg:id-aes256-wrap
+Ctrl.hexsupp-privinfo = hexsupp-privinfo:0123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba98765432010123456789abcdeffedcba9876543201
+Output = 6b68b7affe5efc15e77df56e3dd639b22aa39f12eb0685b33fb39c57
+
+KDF = X942KDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:000102030405060708090a0b0c0d0e0f10111213
+Ctrl.cekalg = cekalg:id-aes256-wrap
+Ctrl.hexpartyu-info = hexpartyu-info:0123456789abcdef
+Ctrl.hexpartyv-info = hexpartyv-info:fedcba9876543210
+Ctrl.hexsupp-pubinfo = hexsupp-pubinfo:12345678
+Ctrl.hexsupp-privinfo = hexsupp-privinfo:87654321
+Output = 2c5c1f028c6d1fc9ba752e41fdb9edb2ea936f1b2449f214acd56d31
+
+Title = X9.42 KDF tests (ACVP test vectors)
+
+KDF = X942KDF-ASN1
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:6B
+Ctrl.use-keybits = use-keybits:0
+Ctrl.cekalg = cekalg:id-aes128-wrap
+Ctrl.hexacvp-info = hexacvp-info:a020299D468D60BC6A257E0B6523D691A3FC1602453B35F308C762FBBAC6069A88BCa12080D49BFE5BE01C7D56489AB017663C22B8CBB34C3174D1D71F00CB7505AC759Aa2203C21A5EA5988562C007986E0503D039E7231D9F152FE72A231A1FD98C59BCA6Aa320FD47477542989B51E4A0845DFABD6EEAA465F69B3D75349B2520051782C7F3FC
+Output = C2E6A0978C24AF3932F478583ADBFB5F57D491822592EAD3C538875F46EB057A
+
+# Negative tests
+
+# Fail if both acvp and ukm values are specified.
+KDF = X942KDF-ASN1
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:6B
+Ctrl.use-keybits = use-keybits:0
+Ctrl.cekalg = cekalg:id-aes128-wrap
+Ctrl.hexacvp-info = hexacvp-info:a020299D468D60BC6A257E0B6523D691A3FC1602453B35F308C762FBBAC6069A88BCa12080D49BFE5BE01C7D56489AB017663C22B8CBB34C3174D1D71F00CB7505AC759Aa2203C21A5EA5988562C007986E0503D039E7231D9F152FE72A231A1FD98C59BCA6Aa320FD47477542989B51E4A0845DFABD6EEAA465F69B3D75349B2520051782C7F3FC
+Ctrl.hexukm = hexukm:012345
+Output = C2E6A0978C24AF3932F478583ADBFB5F57D491822592EAD3C538875F46EB057A
+Result = KDF_DERIVE_ERROR
diff --git a/test/recipes/30-test_evp_data/evpkdf_x942_des.txt b/test/recipes/30-test_evp_data/evpkdf_x942_des.txt
new file mode 100644
index 000000000000..89caaa2e5be1
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_x942_des.txt
@@ -0,0 +1,26 @@
+# 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 are ignored.
+
+Title = X9.42 KDF tests (from RFC2631 test vectors)
+
+Availablein = default
+KDF = X942KDF-ASN1
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:000102030405060708090a0b0c0d0e0f10111213
+Ctrl.cekalg = cekalg:id-smime-alg-CMS3DESwrap
+Output = a09661392376f7044d9052a397883246b67f5f1ef63eb5fb
+
+Title = X9.42 KDF tests (ACVP test vectors)
+
+Availablein = default
+KDF = X942KDF-ASN1
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:6B
+Ctrl.use-keybits = use-keybits:0
+Ctrl.cekalg = cekalg:id-smime-alg-CMS3DESwrap
+Ctrl.hexacvp-info = hexacvp-info:a020299D468D60BC6A257E0B6523D691A3FC1602453B35F308C762FBBAC6069A88BCa12080D49BFE5BE01C7D56489AB017663C22B8CBB34C3174D1D71F00CB7505AC759Aa2203C21A5EA5988562C007986E0503D039E7231D9F152FE72A231A1FD98C59BCA6Aa320FD47477542989B51E4A0845DFABD6EEAA465F69B3D75349B2520051782C7F3FC
+Output = A7758EC5DA5373C736F1E4CF18A4B6349B23ED86227234185B44638C69EBB222
diff --git a/test/recipes/30-test_evp_data/evpkdf_x963.txt b/test/recipes/30-test_evp_data/evpkdf_x963.txt
new file mode 100644
index 000000000000..3791deb35479
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpkdf_x963.txt
@@ -0,0 +1,112 @@
+#
+# Copyright 2001-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 are ignored.
+
+
+# Test vectors extracted from
+# https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/components/800-135testvectors/ansx963_2001.zip
+
+Title = X963 KDF tests (from NIST test vectors)
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA1
+Ctrl.hexsecret = hexsecret:fd17198b89ab39c4ab5d7cca363b82f9fd7e23c3984dc8a2
+Ctrl.hexinfo = hexinfo:856a53f3e36a26bbc5792879f307cce2
+Output = 6e5fad865cb4a51c95209b16df0cc490bc2c9064405c5bccd4ee4832a531fbe7f10cb79e2eab6ab1149fbd5a23cfdabc41242269c9df22f628c4424333855b64e95e2d4fb8469c669f17176c07d103376b10b384ec5763d8b8c610409f19aca8eb31f9d85cc61a8d6d4a03d03e5a506b78d6847e93d295ee548c65afedd2efec
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA224
+Ctrl.hexsecret = hexsecret:da67a73072d521a8272c69023573012ddf9b46bff65b3900
+Ctrl.hexinfo = hexinfo:727997aed53e78f74b1d66743a4ea4d2
+Output = dfc3126c5eebf9a58d89730e8d8ff7cc772592f28c10b349b437d9d068698a22e532eae975dfaf9c5c6a9f2935eafb05353013c253444e61f07bc9ddd15948e614bdc7e445ba3b1893f42f87f18fb352d49956009a642c362d45410b43a9ab376e9261210739174759511d1f9e52f6ec73dfed446dbafaf7fd1a57113abc2e8d
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA256
+Ctrl.hexsecret = hexsecret:22518b10e70f2a3f243810ae3254139efbee04aa57c7af7d
+Ctrl.hexinfo = hexinfo:75eef81aa3041e33b80971203d2c0c52
+Output = c498af77161cc59f2962b9a713e2b215152d139766ce34a776df11866a69bf2e52a13d9c7c6fc878c50c5ea0bc7b00e0da2447cfd874f6cf92f30d0097111485500c90c3af8b487872d04685d14c8d1dc8d7fa08beb0ce0ababc11f0bd496269142d43525a78e5bc79a17f59676a5706dc54d54d4d1f0bd7e386128ec26afc21
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexsecret = hexsecret:d8554db1b392cd55c3fe957bed76af09c13ac2a9392f88f6
+Output = 671a46aada145162f8ddf1ca586a1cda
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA384
+Ctrl.hexsecret = hexsecret:c051fd22539c9de791d6c43a854b8f80a6bf70190050854a
+Ctrl.hexinfo = hexinfo:1317504aa34759bb4c931e3b78201945
+Output = cf6a84434734ac6949e1d7976743277be789906908ad3ca3a8923da7f476abbeb574306d7243031a85566914bfd247d2519c479953d9d55b6b831e56260806c39af21b74e3ecf470e3bd8332791c8a23c13352514fdef00c2d1a408ba31b2d3f9fdcb373895484649a645d1845eec91b5bfdc5ad28c7824984482002dd4a8677
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:87fc0d8c4477485bb574f5fcea264b30885dc8d90ad82782
+Output = 947665fbb9152153ef460238506a0245
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:00aa5bb79b33e389fa58ceadc047197f14e73712f452caa9fc4c9adb369348b81507392f1a86ddfdb7c4ff8231c4bd0f44e44a1b55b1404747a9e2e753f55ef05a2d
+Ctrl.hexinfo = hexinfo:e3b5b4c1b0d5cf1d2b3a2f9937895d31
+Output = 4463f869f3cc18769b52264b0112b5858f7ad32a5a2d96d8cffabf7fa733633d6e4dd2a599acceb3ea54a6217ce0b50eef4f6b40a5c30250a5a8eeee208002267089dbf351f3f5022aa9638bf1ee419dea9c4ff745a25ac27bda33ca08bd56dd1a59b4106cf2dbbc0ab2aa8e2efa7b17902d34276951ceccab87f9661c3e8816
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:009dcd6ba5c8c803ca21f9996ca5dd86047d4ddc150fddace1b1ebe996c2007e3ee907c8ff03b9ef766e8ceb4dedf7489e5162e2278c0185e4be381bec17dd992cf8
+Ctrl.hexinfo = hexinfo:1e60e51c11a538b0ea8990d69a4c6358
+Output = 4e55036a32f32fc965046fdfbf686c108e43a69f8fc1a64ff1bd77763f2eedc8bf277d78b4ce31243e1adbe2c2d5dd59b47503b5b90b54f9d7a9a5aea49c7f0283cb64c3849a1d157000fd41ef6c1d1a5b62734e7c9a20dcfb57f2da974933f57ee619d72898d0e93d9a4254aaddf73941d6269298b4d49c0ac64a33802fe8f2
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:01bbc44314f24db4d67a2a7fb5ca3f7a5022790f5875895d448050eda5611a2f39de48e394c5a3df26208eb01f804d0a1d68eece6b6fa96d6db895e133e129094f78
+Ctrl.hexinfo = hexinfo:433e3ee77d00e4a9634efd677e2ff21b
+Output = f1255002293d5fbcf35ad0e532ae872171d11014616a2c52d7e5cb861b0251b9e505a77161c777bafc052b6525a6ecf34590605de72f13a1aff0a61a8a4a3364ebbe2f99224c13e043e497af8a26de749cd257e475b2f0e60e3b594901320a692a4af422f9636e4814b33f67d181a086265013b0d4efd9e1a94ea8a576afde66
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:01a33032a2bf6f8e9d6972dd339536c9e248ae9881844ff1bd04af48085be4ca1834f2a94ce1019dd9620d1e3a68203a5b291f40b5f8e3238a2a036312b89061cc60
+Ctrl.hexinfo = hexinfo:d3297ad6b9757d1f5a9d5b0e72176d74
+Output = 63565d1d3443620fba4218c97887ff40d6d68bf56b429c22018be5d91c318187ebe8a9399c5cc6c4a849288ab784d4340714ae3fdb426c4a83db9ce2ba8aea80d448e50ad543749b47bcaae519f7f00badd8d48296e81069104dcd293c605b08159ef2ef14c7833739d0414274136ae4db05ba4fa31b29c59de46d9be539525f
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:004b20a501776ea54cbdabffec2a664b7a93f8d67b17405a82bd9cbf3685a4659beb2deff1b6ecaa7ab187b6d4fd407f10db6992c65308410deb133be31a0de0c1c9
+Ctrl.hexinfo = hexinfo:fd5462cb37aa298e95f8e34bb49d85ca
+Output = cafcbc117317661bf15277c2881e05e345c1720b0c1c4040c33fe4a3ecf8032802642d29828a077ca91b6fac216b7a06517740c7d633c279dd2115eb7a34fd337376247219f53da32df57070f47c2e0816710080d6492e1c3e8cac818c3cfca2a3ce5cf1515f066b1815d2d2f69fa3111a9e81570963b90a536da0376c12265b
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:01fb44335b437771777f14d44e5b634c18c7f570b935228fd3073e3cbde299dfb9f4d64ad720d30e875e8c6bbe181027459c9d3f92a276a38e22faf25f208576a63f
+Ctrl.hexinfo = hexinfo:2359d18657243d61963ceca3fa93587d
+Output = 1544e54cd293e533959bdd893337f01ef0c7685a4d8d403d438b0223a7e18330c312a0f16bd819f4359fdd74ae85cc603d35e3d9cba896177452c8dee5214066fca420c3ab522a245af215beb7de52ebb0bdd15d0596b8b763cf7e25610a53efa726b899a1d9727b25ec673ee91ff2111f03cf761a7880d69625e784becfd4e0
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:0109afa3904193690d3f2c49e42d08c8c5cd2ea907a0d699c876e418e303b485374c8d6cf5a32af1491b3ea8a3503692b4a0fd78f9b4082e2a6e72345db4532d749f
+Ctrl.hexinfo = hexinfo:7c19631d3cd65915fa4789cf7b1c0979
+Output = fb60175568a66ef4202e110396663085fe2a9d6d2071e55d03c30ea499fee850c99c4e42a7227cca2eaf4d75e37dde205ae07260e84aeee6ef0819d98bd00d0ff5ba55994e7bf2a578baf2ee9aa862d94bf431fa14429010ebc30d7e602de726cdffacaeabc8541237fbc0c975abbf203c018c688ee354d07978654b90de9569
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:00632e165775f3c5b6e81d4042f809e904b8167687747638874b39ffce1993f46e8fc44e2a1c3df59563003bad3e25c85b61819e9addc0fdbe173dd4115c38f62ef6
+Ctrl.hexinfo = hexinfo:2bf0f18b7f21c4ec9c20b84c75f66b7c
+Output = c324fed01b75c37fc96703031403d5cc6857dc7ffa48192d9a10d5c69dd6274ecd0eb9a278f9e6b616c27bbf2e3e016635b311940390c52c61a4f4b3383ca6046961dbd2455ff6a982e8269864edd3cc1b1053da7daf9699c61b05f1acca7b79e68db655fd526fdc392bd36dcaf1c5b2fafb8975e318070d4bb948829ac41bb6
+
+KDF = X963KDF
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:0096172bf47d06d544ae98471490cf9e52ee59ea7a2208b33b26c52d4952bb8f41b2211d3f9ff32e77ca8cc906ba8d246ff266ddf1df8f53824ccb15b8fb39724703
+Ctrl.hexinfo = hexinfo:cf3a74ba86af42f1ae85477ead645583
+Output = 995d1ab8557dfeafcb347f8182583fa0ac5e6cb3912393592590989f38a0214f6cf7d6fbe23917b0966c6a870876de2a2c13a45fa7aa1715be137ed332e1ffc204ce4dcce33ece6dec7f3da61fa049780040e44142cc8a1e5121cf56b386f65b7c261a192f05e5fefae4221a602bc51c41ef175dc45fb7eab8642421b4f7e3e7
+
+KDF = X942KDF-CONCAT
+Ctrl.digest = digest:SHA512
+Ctrl.hexsecret = hexsecret:0037cd001a0ad87f35ddf58ab355d6144ba2ed0749a7435dab548ba0bfbe723c047e2396b4eef99653412a92c8db74bb5c03063f2eb0525ae87356750ae3676faa86
+Ctrl.hexinfo = hexinfo:eb17da8851c41c7ac6710b1c49f324f8
+Output = 829a28b81f9e95b5f306604067499c07d5944ca034ed130d513951f7143e4e162bad8adb2833e53b8235c293cd2a809659ac7f7e392cba6a543660e5d95070c0c9e6a9cdc38123e22da61bb4cbb6ad6d1a58a069e934fc231bd9fe39a24afcbf322ccea385f0418f3b01c1edd6e7124593a1cefe3e48fcd95daaf72cfd973c59
diff --git a/test/recipes/30-test_evp_data/evpmac_blake.txt b/test/recipes/30-test_evp_data/evpmac_blake.txt
new file mode 100644
index 000000000000..13cb22fff324
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmac_blake.txt
@@ -0,0 +1,250 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = Keyed BLAKE2 tests (Test vectors from reference implementation)
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input =
+Output = 10ebb67700b1868efb4417987acf4690ae9d972fb7a590c2f02871799aaa4786b5e996e8f0f4eb981fc214b005f42d2ff4233499391653df7aefcbc13fc51568
+OutputSize = 64
+BlockSize = 128
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 00
+Output = 961f6dd1e4dd30f63901690c512e78e4b45e4742ed197c3c5e45c549fd25f2e4187b0bc9fe30492b16b0d0bc4ef9b0f34c7003fac09a5ef1532e69430234cebd
+BlockSize = 128
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 0001
+Output = da2cfbe2d8409a0f38026113884f84b50156371ae304c4430173d08a99d9fb1b983164a3770706d537f49e0c916d9f32b95cc37a95b99d857436f0232c88a965
+OutputSize = 64
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 000102
+Output = 33d0825dddf7ada99b0e7e307104ad07ca9cfd9692214f1561356315e784f3e5a17e364ae9dbb14cb2036df932b77f4b292761365fb328de7afdc6d8998f5fc1
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 00010203
+Output = beaa5a3d08f3807143cf621d95cd690514d0b49efff9c91d24b59241ec0eefa5f60196d407048bba8d2146828ebcb0488d8842fd56bb4f6df8e19c4b4daab8ac
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 0001020304
+Output = 098084b51fd13deae5f4320de94a688ee07baea2800486689a8636117b46c1f4c1f6af7f74ae7c857600456a58a3af251dc4723a64cc7c0a5ab6d9cac91c20bb
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9
+Output = 1085d78307b1c4b008c57a2e7e5b234658a0a82e4ff1e4aaac72b312fda0fe27d233bc5b10e9cc17fdc7697b540c7d95eb215a19a1a0e20e1abfa126efd568c7
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa
+Output = 4e5c734c7dde011d83eac2b7347b373594f92d7091b9ca34cb9c6f39bdf5a8d2f134379e16d822f6522170ccf2ddd55c84b9e6c64fc927ac4cf8dfb2a17701f2
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb
+Output = 695d83bd990a1117b3d0ce06cc888027d12a054c2677fd82f0d4fbfc93575523e7991a5e35a3752e9b70ce62992e268a877744cdd435f5f130869c9a2074b338
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc
+Output = a6213743568e3b3158b9184301f3690847554c68457cb40fc9a4b8cfd8d4a118c301a07737aeda0f929c68913c5f51c80394f53bff1c3e83b2e40ca97eba9e15
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd
+Output = d444bfa2362a96df213d070e33fa841f51334e4e76866b8139e8af3bb3398be2dfaddcbc56b9146de9f68118dc5829e74b0c28d7711907b121f9161cb92b69a9
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe
+Output = 142709d62e28fcccd0af97fad0f8465b971e82201dc51070faa0372aa43e92484be1c1e73ba10906d5d1853db6a4106e0a7bf9800d373d6dee2d46d62ef2a461
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input =
+Output = 48a8997da407876b3d79c0d92325ad3b89cbb754d86ab71aee047ad345fd2c49
+OutputSize = 32
+BlockSize = 64
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 00
+Output = 40d15fee7c328830166ac3f918650f807e7e01e177258cdc0a39b11f598066f1
+BlockSize = 64
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 0001
+Output = 6bb71300644cd3991b26ccd4d274acd1adeab8b1d7914546c1198bbe9fc9d803
+OutputSize = 32
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 000102
+Output = 1d220dbe2ee134661fdf6d9e74b41704710556f2f6e5a091b227697445dbea6b
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 00010203
+Output = f6c3fbadb4cc687a0064a5be6e791bec63b868ad62fba61b3757ef9ca52e05b2
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 0001020304
+Output = 49c1f21188dfd769aea0e911dd6b41f14dab109d2b85977aa3088b5c707e8598
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9
+Output = 9fc5450109e1b779f6c7ae79d56c27635c8dd426c5a9d54e2578db989b8c3b4e
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa
+Output = d12bf3732ef4af5c22fa90356af8fc50fcb40f8f2ea5c8594737a3b3d5abdbd7
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb
+Output = 11030b9289bba5af65260672ab6fee88b87420acef4a1789a2073b7ec2f2a09e
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc
+Output = 69cb192b8444005c8c0ceb12c846860768188cda0aec27a9c8a55cdee2123632
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd
+Output = db444c15597b5f1a03d1f9edd16e4a9f43a667cc275175dfa2b704e3bb1a9b83
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe
+Output = 3fb735061abc519dfe979e54c1ee5bfad0a9d858b3315bad34bde999efd724dd
+
+Title = Custom keyed BLAKE2 tests
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Custom = "email"
+Input = "Sample input for keylen<blocklen and custom"
+Output = fb7abee8f585b0d844a3c7db211b8f50a3a5de9bb20a560eb095d05430a60e83f3d44a84c84e8a8ef79eef694551418a05c7495d10aae051e9c63822dfa59e7c
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Custom = "blockchain"
+Input = "Sample input for keylen<blocklen and custom"
+Output = b971503ceebaa26c98cb7722abaf019d74138d92ff5d82f91a7473ec641ae6811148bc1edbe9db9030fd9a8a965d7f35492d79f602be81f6e2d9b84abc819c62
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Salt = a3a5de9b8fcccd0a560eb095a3638bb1
+Input = "Sample input for keylen<blocklen and salt"
+Output = a57e6f23123be251f4e8cd04d4313e50bfa2ed5a28a3685dc86398da78503d54a169faabcc186037418636af20718f20797fb883b83ab98f5b2d17ce185b615e
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Salt = b4a5b8cd0a009561
+Input = "Sample input for keylen<blocklen and salt"
+Output = 709ee3733b179658d326fda6692e6761068d0044895252615bd2a19a14ad4da1ee6ddf613bdf1ae805f97809a140837640c4ce2fece1831b3ccd07544b0d36ab
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Custom = "application"
+Salt = 000102030405060708090a0b0c0d0e0f
+Input = "Sample input for keylen<blocklen, salt and custom"
+Output = 233a6c732212f4813ec4c9f357e35297e59a652fd24155205f00363f7c54734ee1e8c7329d92116cbec62db35ebb5d51f9e5c2ba41789b84ac9ebc266918e524
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Ctrl = size:128
+Result = MAC_INIT_ERROR
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = "Sample input for outlen<digest_length"
+Ctrl = size:1
+Output = 2a
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = "Sample input for outlen<digest_length"
+Ctrl = size:32
+Output = 7fa43c7735fcacad9fce2b44bef37dba6501ab48c9397bedb5562a682e519793
+
+MAC = BLAKE2BMAC
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Input = "Combo input with outlen, custom and salt"
+Custom = "application"
+Salt = 000102030405060708090a0b0c0d0e0f
+Ctrl = size:32
+Output = 51742fc491171eaf6b9459c8b93a44bbf8f44a0b4869a17fa178c8209918ad96
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f
+Custom = "email"
+Input = "Sample input for keylen<blocklen and custom"
+Output = 099619607617f8767b278d6d76216b91794ea372c9fd3733a4a36e995a767987
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f
+Custom = "database"
+Input = "Sample input for keylen<blocklen and custom"
+Output = afa468ff12d922c1bfdfe26b7d74f1041e7708e83ee7e128ce878f93e2852ad0
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f
+Salt = a205819e78d6d762
+Input = "Sample input for keylen<blocklen and salt"
+Output = 29f7d780009ef8f001ec44088622f0752f6c360cda40e3c2181c4f7eacdd9dc6
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f
+Salt = d6e437b2
+Input = "Sample input for keylen<blocklen and salt"
+Output = aa9dbb8bbad89ea35467f1ff995521121989eb6439f1263e04e87d63a9c2ef28
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f
+Custom = "app"
+Salt = a205819e78d6d762
+Input = "Sample input for keylen<blocklen, salt and custom"
+Output = e9f7704dfe5080a4aafe62a806f53ea7f98ffc24175164158f18ec5497b961f5
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f
+Ctrl = size:64
+Result = MAC_INIT_ERROR
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f
+Ctrl = size:16
+Input = "Sample input for outlen<digest_length"
+Output = a09fb3d513efc3ed58dd1264de3c59f5
+
+MAC = BLAKE2SMAC
+Key = 000102030405060708090a0b0c0d0e0f
+Ctrl = size:16
+Custom = "app"
+Salt = 0001020304050607
+Input = "Combo input with outlen, custom and salt"
+Output = 6808d8daae537a16bf00e837010969a4
diff --git a/test/recipes/30-test_evp_data/evpmac_cmac_des.txt b/test/recipes/30-test_evp_data/evpmac_cmac_des.txt
new file mode 100644
index 000000000000..cf42927e11d8
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmac_cmac_des.txt
@@ -0,0 +1,28 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+# The keyword Availablein must appear before the test name if needed.
+
+Title = CMAC tests (from FIPS module)
+
+MAC = CMAC
+Algorithm = DES-EDE3-CBC
+Key = 89BCD952A8C8AB371AF48AC7D07085D5EFF702E6D62CDC23
+Input = FA620C1BBE97319E9A0CF0492121F7A20EB08A6A709DCBD00AAF38E4F99E754E
+Output = 8F49A1B7D6AA2258
+
+MAC = CMAC by EVP_PKEY
+Algorithm = DES-EDE3-CBC
+Key = 89BCD952A8C8AB371AF48AC7D07085D5EFF702E6D62CDC23
+Input = FA620C1BBE97319E9A0CF0492121F7A20EB08A6A709DCBD00AAF38E4F99E754E
+Output = 8F49A1B7D6AA2258
+
diff --git a/test/recipes/30-test_evp_data/evpmac_common.txt b/test/recipes/30-test_evp_data/evpmac_common.txt
new file mode 100644
index 000000000000..a7300fd01767
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmac_common.txt
@@ -0,0 +1,499 @@
+#
+# Copyright 2001-2022 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 are ignored.
+# The keyword Availablein must appear before the test name if needed.
+
+Title = HMAC tests (from RFC2104 and others)
+
+Availablein = default
+MAC = HMAC
+Algorithm = MD5
+Key = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Input = "Hi There"
+Output = 9294727a3638bb1c13f48ef8158bfc9d
+OutputSize = 16
+BlockSize = 64
+
+Availablein = default
+MAC = HMAC
+Algorithm = MD5
+Key = "Jefe"
+Input = "what do ya want for nothing?"
+Output = 750c783e6ab0b503eaa86e310a5db738
+OutputSize = 16
+
+Availablein = default
+MAC = HMAC
+Algorithm = MD5
+Key = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Input = DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
+Output = 56be34521d144c88dbb8c733f0e8b3f6
+BlockSize = 64
+
+Title = SHA1
+
+# HMAC tests from NIST test data
+
+MAC = HMAC
+Algorithm = SHA1
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F
+Output = 5FD596EE78D5553C8FF4E72D266DFD192366DA29
+OutputSize = 20
+BlockSize = 64
+
+MAC = HMAC
+Algorithm = SHA1
+Input = "Sample message for keylen<blocklen"
+Key = 000102030405060708090A0B0C0D0E0F10111213
+Output = 4C99FF0CB1B31BD33F8431DBAF4D17FCD356A807
+OutputSize = 20
+
+MAC = HMAC
+Algorithm = SHA1
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60616263
+Output = 2D51B2F7750E410584662E38F133435F4C4FD42A
+BlockSize = 64
+
+Title = SHA2
+
+MAC = HMAC
+Algorithm = SHA224
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F
+Output = C7405E3AE058E8CD30B08B4140248581ED174CB34E1224BCC1EFC81B
+OutputSize = 28
+BlockSize = 64
+
+MAC = HMAC
+Algorithm = SHA224
+Input = "Sample message for keylen<blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B
+Output = E3D249A8CFB67EF8B7A169E9A0A599714A2CECBA65999A51BEB8FBBE
+
+MAC = HMAC
+Algorithm = SHA224
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60616263
+Output = 91C52509E5AF8531601AE6230099D90BEF88AAEFB961F4080ABC014D
+
+MAC = HMAC
+Algorithm = SHA256
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F
+Output = 8BB9A1DB9806F20DF7F77B82138C7914D174D59E13DC4D0169C9057B133E1D62
+OutputSize = 32
+BlockSize = 64
+
+MAC = HMAC
+Algorithm = SHA256
+Input = "Sample message for keylen<blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
+Output = A28CF43130EE696A98F14A37678B56BCFCBDD9E5CF69717FECF5480F0EBDF790
+
+MAC = HMAC
+Algorithm = SHA256
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60616263
+Output = BDCCB6C72DDEADB500AE768386CB38CC41C63DBB0878DDB9C7A38A431B78378D
+
+MAC = HMAC
+Algorithm = SHA384
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F
+Output = 63C5DAA5E651847CA897C95814AB830BEDEDC7D25E83EEF9195CD45857A37F448947858F5AF50CC2B1B730DDF29671A9
+OutputSize = 48
+BlockSize = 128
+
+MAC = HMAC
+Algorithm = SHA384
+Input = "Sample message for keylen<blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F
+Output = 6EB242BDBB582CA17BEBFA481B1E23211464D2B7F8C20B9FF2201637B93646AF5AE9AC316E98DB45D9CAE773675EEED0
+
+MAC = HMAC
+Algorithm = SHA384
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Output = 5B664436DF69B0CA22551231A3F0A3D5B4F97991713CFA84BFF4D0792EFF96C27DCCBBB6F79B65D548B40E8564CEF594
+
+MAC = HMAC
+Algorithm = SHA512
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F
+Output = FC25E240658CA785B7A811A8D3F7B4CA48CFA26A8A366BF2CD1F836B05FCB024BD36853081811D6CEA4216EBAD79DA1CFCB95EA4586B8A0CE356596A55FB1347
+OutputSize = 64
+BlockSize = 128
+
+MAC = HMAC
+Algorithm = SHA512
+Input = "Sample message for keylen<blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F
+Output = FD44C18BDA0BB0A6CE0E82B031BF2818F6539BD56EC00BDC10A8A2D730B3634DE2545D639B0F2CF710D0692C72A1896F1F211C2B922D1A96C392E07E7EA9FEDC
+
+MAC = HMAC
+Algorithm = SHA512
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Output = D93EC8D2DE1AD2A9957CB9B83F14E76AD6B5E0CCE285079A127D3B14BCCB7AA7286D4AC0D4CE64215F2BC9E6870B33D97438BE4AAA20CDA5C5A912B48B8E27F3
+
+Title = SHA3
+
+# NIST's test vectors
+
+MAC = HMAC
+Algorithm = SHA3-224
+Input = "Sample message for keylen<blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b
+Output = 332cfd59347fdb8e576e77260be4aba2d6dc53117b3bfb52c6d18c04
+OutputSize = 28
+BlockSize = 144
+
+MAC = HMAC
+Algorithm = SHA3-224
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f
+Output = d8b733bcf66c644a12323d564e24dcf3fc75f231f3b67968359100c7
+
+MAC = HMAC
+Algorithm = SHA3-224
+Input = "Sample message for keylen>blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab
+Output = 078695eecc227c636ad31d063a15dd05a7e819a66ec6d8de1e193e59
+
+MAC = HMAC
+Algorithm = SHA3-256
+Input = "Sample message for keylen<blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Output = 4fe8e202c4f058e8dddc23d8c34e467343e23555e24fc2f025d598f558f67205
+OutputSize = 32
+BlockSize = 136
+
+MAC = HMAC
+Algorithm = SHA3-256
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687
+Output = 68b94e2e538a9be4103bebb5aa016d47961d4d1aa906061313b557f8af2c3faa
+
+MAC = HMAC
+Algorithm = SHA3-256
+Input = "Sample message for keylen>blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7
+Output = 9bcf2c238e235c3ce88404e813bd2f3a97185ac6f238c63d6229a00b07974258
+
+MAC = HMAC
+Algorithm = SHA3-384
+Input = "Sample message for keylen<blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f
+Output = d588a3c51f3f2d906e8298c1199aa8ff6296218127f6b38a90b6afe2c5617725bc99987f79b22a557b6520db710b7f42
+OutputSize = 48
+BlockSize = 104
+
+MAC = HMAC
+Algorithm = SHA3-384
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667
+Output = a27d24b592e8c8cbf6d4ce6fc5bf62d8fc98bf2d486640d9eb8099e24047837f5f3bffbe92dcce90b4ed5b1e7e44fa90
+
+MAC = HMAC
+Algorithm = SHA3-384
+Input = "Sample message for keylen>blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697
+Output = e5ae4c739f455279368ebf36d4f5354c95aa184c899d3870e460ebc288ef1f9470053f73f7c6da2a71bcaec38ce7d6ac
+
+MAC = HMAC
+Algorithm = SHA3-512
+Input = "Sample message for keylen<blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+Output = 4efd629d6c71bf86162658f29943b1c308ce27cdfa6db0d9c3ce81763f9cbce5f7ebe9868031db1a8f8eb7b6b95e5c5e3f657a8996c86a2f6527e307f0213196
+OutputSize = 64
+BlockSize = 72
+
+MAC = HMAC
+Algorithm = SHA3-512
+Input = "Sample message for keylen=blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647
+Output = 544e257ea2a3e5ea19a590e6a24b724ce6327757723fe2751b75bf007d80f6b360744bf1b7a88ea585f9765b47911976d3191cf83c039f5ffab0d29cc9d9b6da
+
+MAC = HMAC by EVP_PKEY
+Algorithm = SHA3-512
+Input = "Sample message for keylen>blocklen"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687
+Output = 5f464f5e5b7848e3885e49b2c385f0694985d0e38966242dc4a5fe3fea4b37d46b65ceced5dcf59438dd840bab22269f0ba7febdb9fcf74602a35666b2a32915
+
+Title = HMAC self generated tests
+
+MAC = HMAC
+Algorithm = SHAKE128
+Input = "Test that SHAKE128 fails"
+Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+Result = MAC_INIT_ERROR
+
+Title = CMAC tests (from FIPS module)
+
+MAC = CMAC
+Algorithm = AES-128-CBC
+Key = 77A77FAF290C1FA30C683DF16BA7A77B
+Input = 020683E1F0392F4CAC54318B6029259E9C553DBC4B6AD998E64D58E4E7DC2E13
+Output = FBFEA41BF9740CB501F1292C21CEBB40
+
+MAC = CMAC by EVP_PKEY
+Algorithm = AES-192-CBC
+Key = 7B32391369AA4CA97558095BE3C3EC862BD057CEF1E32D62
+Input =
+Output = E4D9340B03E67DEFD4969CC1ED3735E6
+
+MAC = CMAC
+Algorithm = AES-256-CBC
+Key = 0B122AC8F34ED1FE082A3625D157561454167AC145A10BBF77C6A70596D574F1
+Input = 498B53FDEC87EDCBF07097DCCDE93A084BAD7501A224E388DF349CE18959FE8485F8AD1537F0D896EA73BEDC7214713F
+Output = F62C46329B41085625669BAF51DEA66A
+
+Title = GMAC Tests (from NIST)
+
+MAC = GMAC
+Algorithm = AES-128-GCM
+Key = 77BE63708971C4E240D1CB79E8D77FEB
+IV = E0E00F19FED7BA0136A797F3
+Input = 7A43EC1D9C0A5A78A0B16533A6213CAB
+Output = 209FCC8D3675ED938E9C7166709DD946
+
+Title = GMAC Tests (from http://www.ieee802.org/1/files/public/docs2011/bn-randall-test-vectors-0511-v1.pdf)
+
+MAC = GMAC
+Algorithm = AES-128-GCM
+Key = AD7A2BD03EAC835A6F620FDCB506B345
+IV = 12153524C0895E81B2C28465
+Input = D609B1F056637A0D46DF998D88E5222AB2C2846512153524C0895E8108000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233340001
+Output = F09478A9B09007D06F46E9B6A1DA25DD
+
+MAC = GMAC
+Algorithm = AES-256-GCM
+Key = E3C08A8F06C6E3AD95A70557B23F75483CE33021A9C72B7025666204C69C0B72
+IV = 12153524C0895E81B2C28465
+Input = D609B1F056637A0D46DF998D88E5222AB2C2846512153524C0895E8108000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233340001
+Output = 2F0BC5AF409E06D609EA8B7D0FA5EA50
+
+MAC = GMAC
+Algorithm = AES-128-GCM
+Key = 071B113B0CA743FECCCF3D051F737382
+IV = F0761E8DCD3D000176D457ED
+Input = E20106D7CD0DF0761E8DCD3D88E5400076D457ED08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A0003
+Output = 0C017BC73B227DFCC9BAFA1C41ACC353
+
+MAC = GMAC
+Algorithm = AES-256-GCM
+Key = 691D3EE909D7F54167FD1CA0B5D769081F2BDE1AEE655FDBAB80BD5295AE6BE7
+IV = F0761E8DCD3D000176D457ED
+Input = E20106D7CD0DF0761E8DCD3D88E5400076D457ED08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A0003
+Output = 35217C774BBC31B63166BCF9D4ABED07
+
+MAC = GMAC
+Algorithm = AES-128-GCM
+Key = 013FE00B5F11BE7F866D0CBBC55A7A90
+IV = 7CFDE9F9E33724C68932D612
+Input = 84C5D513D2AAF6E5BBD2727788E523008932D6127CFDE9F9E33724C608000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F0005
+Output = 217867E50C2DAD74C28C3B50ABDF695A
+
+MAC = GMAC
+Algorithm = AES-256-GCM
+Key = 83C093B58DE7FFE1C0DA926AC43FB3609AC1C80FEE1B624497EF942E2F79A823
+IV = 7CFDE9F9E33724C68932D612
+Input = 84C5D513D2AAF6E5BBD2727788E523008932D6127CFDE9F9E33724C608000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F0005
+Output = 6EE160E8FAECA4B36C86B234920CA975
+
+MAC = GMAC
+Algorithm = AES-128-GCM
+Key = 88EE087FD95DA9FBF6725AA9D757B0CD
+IV = 7AE8E2CA4EC500012E58495C
+Input = 68F2E77696CE7AE8E2CA4EC588E541002E58495C08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D0007
+Output = 07922B8EBCF10BB2297588CA4C614523
+
+MAC = GMAC
+Algorithm = AES-256-GCM
+Key = 4C973DBC7364621674F8B5B89E5C15511FCED9216490FB1C1A2CAA0FFE0407E5
+IV = 7AE8E2CA4EC500012E58495C
+Input = 68F2E77696CE7AE8E2CA4EC588E541002E58495C08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D0007
+Output = 00BDA1B7E87608BCBF470F12157F4C07
+
+
+Title = KMAC Tests (From NIST)
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 00010203
+Custom = ""
+Output = E5780B0D3EA6F7D3A429C5706AA43A00FADBD7D49628839E3187243F456EE14E
+Ctrl = xof:0
+OutputSize = 32
+BlockSize = 168
+
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 00010203
+Custom = "My Tagged Application"
+Output = 3B1FBA963CD8B0B59E8C1A6D71888B7143651AF8BA0A7070C0979E2811324AA5
+
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = "My Tagged Application"
+Output = 1F5B4E6CCA02209E0DCB5CA635B89A15E271ECC760071DFD805FAA38F9729230
+Ctrl = size:32
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 00010203
+Custom = "My Tagged Application"
+Output = 20C570C31346F703C9AC36C61C03CB64C3970D0CFC787E9B79599D273A68D2F7F69D4CC3DE9D104A351689F27CF6F5951F0103F33F4F24871024D9C27773A8DD
+OutputSize = 64
+BlockSize = 136
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = ""
+Output = 75358CF39E41494E949707927CEE0AF20A3FF553904C86B08F21CC414BCFD691589D27CF5E15369CBBFF8B9A4C2EB17800855D0235FF635DA82533EC6B759B69
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = "My Tagged Application"
+Output = B58618F71F92E1D56C1B8C55DDD7CD188B97B4CA4D99831EB2699A837DA2E4D970FBACFDE50033AEA585F1A2708510C32D07880801BD182898FE476876FC8965
+Ctrl = size:64
+
+Title = KMAC XOF Tests (From NIST)
+
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 00010203
+Output = CD83740BBD92CCC8CF032B1481A0F4460E7CA9DD12B08A0C4031178BACD6EC35
+XOF = 1
+
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 00010203
+Custom = "My Tagged Application"
+Output = 31A44527B4ED9F5C6101D11DE6D26F0620AA5C341DEF41299657FE9DF1A3B16C
+XOF = 1
+
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = "My Tagged Application"
+Output = 47026C7CD793084AA0283C253EF658490C0DB61438B8326FE9BDDF281B83AE0F
+XOF = 1
+Ctrl = size:32
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 00010203
+Custom = "My Tagged Application"
+Output = 1755133F1534752AAD0748F2C706FB5C784512CAB835CD15676B16C0C6647FA96FAA7AF634A0BF8FF6DF39374FA00FAD9A39E322A7C92065A64EB1FB0801EB2B
+XOF = 1
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = ""
+Output = FF7B171F1E8A2B24683EED37830EE797538BA8DC563F6DA1E667391A75EDC02CA633079F81CE12A25F45615EC89972031D18337331D24CEB8F8CA8E6A19FD98B
+XOF = 1
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = "My Tagged Application"
+Output = D5BE731C954ED7732846BB59DBE3A8E30F83E77A4BFF4459F2F1C2B4ECEBB8CE67BA01C62E8AB8578D2D499BD1BB276768781190020A306A97DE281DCC30305D
+Ctrl = size:64
+XOF = 1
+
+Title = KMAC long customisation string (from NIST ACVP)
+
+MAC = KMAC256
+Key = 9743DBF93102FAF11227B154B8ACD16CF142671F7AA16C559A393A38B4CEF461ED29A6A328D7379C99718790E38B54CA25E9E831CBEA463EE704D1689F94629AB795DF0C77F756DA743309C0E054596BA2D9CC1768ACF7CD351D9A7EB1ABD0A3
+Input = BA63AC9C711F143CCE7FF92D0322649D1BE437D805FD225C0A2879A008373EC3BCCDB09971FAD2BCE5F4347AF7E5238EF01A90ED34193D6AFC1D
+Custom = "]J&/.?L/c&}p(b!X|?>i7!]CAH6P@1<R'6|uOu2Vu^kCM!$ Een^pn&Zlale){mQhKjqe,)'-fsX6:u@D6+ZA^b70A)n)LMxo:Y!62;:[hP*yLERjL@rq30+iRaD#9|"
+Output = 4057EFD76A63049418AFC54559589821322B6029808A3BCAE4D49E961F909F5F667ACAD56BBCFB8033DCB4CC10AF1B53F014B8
+Ctrl = size:51
+XOF = 1
+
+Title = KMAC XOF Tests via ctrl (From NIST)
+
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 00010203
+Output = CD83740BBD92CCC8CF032B1481A0F4460E7CA9DD12B08A0C4031178BACD6EC35
+Ctrl = xof:1
+
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 00010203
+Custom = "My Tagged Application"
+Output = 31A44527B4ED9F5C6101D11DE6D26F0620AA5C341DEF41299657FE9DF1A3B16C
+Ctrl = xof:1
+
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = "My Tagged Application"
+Output = 47026C7CD793084AA0283C253EF658490C0DB61438B8326FE9BDDF281B83AE0F
+Ctrl = xof:1
+Ctrl = size:32
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 00010203
+Custom = "My Tagged Application"
+Output = 1755133F1534752AAD0748F2C706FB5C784512CAB835CD15676B16C0C6647FA96FAA7AF634A0BF8FF6DF39374FA00FAD9A39E322A7C92065A64EB1FB0801EB2B
+Ctrl = xof:1
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = ""
+Output = FF7B171F1E8A2B24683EED37830EE797538BA8DC563F6DA1E667391A75EDC02CA633079F81CE12A25F45615EC89972031D18337331D24CEB8F8CA8E6A19FD98B
+Ctrl = xof:1
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = "My Tagged Application"
+Output = D5BE731C954ED7732846BB59DBE3A8E30F83E77A4BFF4459F2F1C2B4ECEBB8CE67BA01C62E8AB8578D2D499BD1BB276768781190020A306A97DE281DCC30305D
+Ctrl = size:64
+Ctrl = xof:1
+
+Title = KMAC long customisation string via ctrl (from NIST ACVP)
+
+MAC = KMAC256
+Key = 9743DBF93102FAF11227B154B8ACD16CF142671F7AA16C559A393A38B4CEF461ED29A6A328D7379C99718790E38B54CA25E9E831CBEA463EE704D1689F94629AB795DF0C77F756DA743309C0E054596BA2D9CC1768ACF7CD351D9A7EB1ABD0A3
+Input = BA63AC9C711F143CCE7FF92D0322649D1BE437D805FD225C0A2879A008373EC3BCCDB09971FAD2BCE5F4347AF7E5238EF01A90ED34193D6AFC1D
+Custom = "]J&/.?L/c&}p(b!X|?>i7!]CAH6P@1<R'6|uOu2Vu^kCM!$ Een^pn&Zlale){mQhKjqe,)'-fsX6:u@D6+ZA^b70A)n)LMxo:Y!62;:[hP*yLERjL@rq30+iRaD#9|"
+Output = 4057EFD76A63049418AFC54559589821322B6029808A3BCAE4D49E961F909F5F667ACAD56BBCFB8033DCB4CC10AF1B53F014B8
+Ctrl = size:51
+Ctrl = xof:1
+
+Title = KMAC long customisation string negative test
+
+MAC = KMAC128
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = ":abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789::abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789::abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789::abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:::abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789::abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789::abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789::abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789::"
+Result = MAC_INIT_ERROR
+
+Title = KMAC output is too large
+
+MAC = KMAC256
+Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+Custom = "My Tagged Application"
+Ctrl = size:2097152
+Result = MAC_INIT_ERROR
diff --git a/test/recipes/30-test_evp_data/evpmac_poly1305.txt b/test/recipes/30-test_evp_data/evpmac_poly1305.txt
new file mode 100644
index 000000000000..fed44dbd26d9
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmac_poly1305.txt
@@ -0,0 +1,332 @@
+#
+# Copyright 2001-2022 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 are ignored.
+
+Title = Poly1305 Tests (from RFC 7539 and others)
+
+MAC = Poly1305
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+Input = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Output = 00000000000000000000000000000000
+NoReinit = 1
+
+MAC = Poly1305
+Key = 0000000000000000000000000000000036e5f6b5c5e06070f0efca96227a863e
+Input = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f
+Output = 36e5f6b5c5e06070f0efca96227a863e
+NoReinit = 1
+
+MAC = Poly1305
+Key = 36e5f6b5c5e06070f0efca96227a863e00000000000000000000000000000000
+Input = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f
+Output = f3477e7cd95417af89a6b8794c310cf0
+NoReinit = 1
+
+MAC = Poly1305
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+Input = 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e
+Output = 4541669a7eaaee61e708dc7cbcc5eb62
+NoReinit = 1
+
+# If one uses 130-bit partial reduction, does the code handle the case where partially reduced final result is not fully reduced?
+MAC = Poly1305
+Key = 0200000000000000000000000000000000000000000000000000000000000000
+Input = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+Output = 03000000000000000000000000000000
+NoReinit = 1
+
+# What happens if addition of s overflows modulo 2^128?
+MAC = Poly1305
+Key = 02000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+Input = 02000000000000000000000000000000
+Output = 03000000000000000000000000000000
+NoReinit = 1
+
+# What happens if data limb is all ones and there is carry from lower limb?
+MAC = Poly1305
+Key = 0100000000000000000000000000000000000000000000000000000000000000
+Input = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11000000000000000000000000000000
+Output = 05000000000000000000000000000000
+NoReinit = 1
+
+# What happens if final result from polynomial part is exactly 2^130-5?
+MAC = Poly1305
+Key = 0100000000000000000000000000000000000000000000000000000000000000
+Input = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE01010101010101010101010101010101
+Output = 00000000000000000000000000000000
+NoReinit = 1
+
+# What happens if final result from polynomial part is exactly 2^130-6?
+MAC = Poly1305
+Key = 0200000000000000000000000000000000000000000000000000000000000000
+Input = FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+Output = FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+NoReinit = 1
+
+# Taken from poly1305_internal_test.c
+# More RFC7539
+
+MAC = Poly1305
+Input = 43727970746f6772617068696320466f72756d2052657365617263682047726f7570
+Key = 85d6be7857556d337f4452fe42d506a80103808afb0db2fd4abff6af4149f51b
+Output = a8061dc1305136c6c22b8baf0c0127a9
+NoReinit = 1
+
+# test vectors from "The Poly1305-AES message-authentication code"
+
+MAC = Poly1305
+Input = f3f6
+Key = 851fc40c3467ac0be05cc20404f3f700580b3b0f9447bb1e69d095b5928b6dbc
+Output = f4c633c3044fc145f84f335cb81953de
+NoReinit = 1
+
+# No input?
+# # MAC = Poly1305
+# Input =
+# Key = a0f3080000f46400d0c7e9076c834403dd3fab2251f11ac759f0887129cc2ee7
+# Output = dd3fab2251f11ac759f0887129cc2ee7
+# NoReinit = 1
+
+MAC = Poly1305
+Input = 663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136
+Key = 48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef
+Output = 0ee1c16bb73f0f4fd19881753c01cdbe
+NoReinit = 1
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = 5154ad0d2cb26e01274fc51148491f1b
+NoReinit = 1
+
+# self-generated vectors exercise "significant" length such that* are handled by different code paths
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = 812059a5da198637cac7c4a631bee466
+NoReinit = 1
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = 5b88d7f6228b11e2e28579a5c0c1f761
+NoReinit = 1
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = bbb613b2b6d753ba07395b916aaece15
+NoReinit = 1
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef663cea190ffb83d89593f3f476b6bc24
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = c794d7057d1778c4bbee0a39b3d97342
+NoReinit = 1
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = ffbcb9b371423152d7fca5ad042fbaa9
+NoReinit = 1
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136812059a5da198637cac7c4a631bee466
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = 069ed6b8ef0f207b3e243bb1019fe632
+NoReinit = 1
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136812059a5da198637cac7c4a631bee4665b88d7f6228b11e2e28579a5c0c1f761
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = cca339d9a45fa2368c2c68b3a4179133
+NoReinit = 1
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136812059a5da198637cac7c4a631bee4665b88d7f6228b11e2e28579a5c0c1f761ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = 53f6e828a2f0fe0ee815bf0bd5841a34
+NoReinit = 1
+
+MAC = Poly1305
+Input = ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136812059a5da198637cac7c4a631bee4665b88d7f6228b11e2e28579a5c0c1f761ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136812059a5da198637cac7c4a631bee4665b88d7f6228b11e2e28579a5c0c1f761
+Key = 12976a08c4426d0ce8a82407c4f4820780f8c20aa71202d1e29179cbcb555a57
+Output = b846d44e9bbd53cedffbfbb6b7fa4933
+NoReinit = 1
+
+# 4th power of the key spills to 131th bit in SIMD key setup
+
+MAC = Poly1305
+Input = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+Key = ad628107e8351d0f2c231a05dc4a410600000000000000000000000000000000
+Output = 07145a4c02fe5fa32036de68fabe9066
+NoReinit = 1
+
+# poly1305_ieee754.c failed this in final stage
+
+MAC = Poly1305
+Input = 842364e156336c0998b933a6237726180d9e3fdcbde4cd5d17080fc3beb49614d7122c037463ff104d73f19c12704628d417c4c54a3fe30d3c3d7714382d43b0382a50a5dee54be844b076e8df88201a1cd43b90eb21643fa96f39b518aa8340c942ff3c31baf7c9bdbf0f31ae3fa096bf8c63030609829fe72e179824890bc8e08c315c1cce2a83144dbbff09f74e3efc770b54d0984a8f19b14719e63635641d6b1eedf63efbf080e1783d32445412114c20de0b837a0dfa33d6b82825fff44c9a70ea54ce47f07df698e6b03323b53079364a5fc3e9dd034392bdde86dccdda94321c5e44060489336cb65bf3989c36f7282c2f5d2b882c171e74
+Key = 95d5c005503e510d8cd0aa072c4a4d066eabc52d11653df47fbf63ab198bcc26
+Output = f248312e578d9d58f8b7bb4d19105431
+NoReinit = 1
+
+# AVX2 in poly1305-x86.pl failed this with 176+32 split
+
+MAC = Poly1305
+Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb
+Key = 000102030405060708090a0b0c0d0e0f00000000000000000000000000000000
+Output = bc939bc5281480fa99c6d68c258ec42f
+NoReinit = 1
+
+# test vectors from Google
+
+# No input?
+# # MAC = Poly1305
+# Input =
+# Key = c8afaac331ee372cd6082de134943b174710130e9f6fea8d72293850a667d86c
+# Output = 4710130e9f6fea8d72293850a667d86c
+# NoReinit = 1
+
+MAC = Poly1305
+Input = 48656c6c6f20776f726c6421
+Key = 746869732069732033322d62797465206b657920666f7220506f6c7931333035
+Output = a6f745008f81c916a20dcc74eef2b2f0
+NoReinit = 1
+
+MAC = Poly1305
+Input = 0000000000000000000000000000000000000000000000000000000000000000
+Key = 746869732069732033322d62797465206b657920666f7220506f6c7931333035
+Output = 49ec78090e481ec6c26b33b91ccc0307
+NoReinit = 1
+
+MAC = Poly1305
+Input = 89dab80b7717c1db5db437860a3f70218e93e1b8f461fb677f16f35f6f87e2a91c99bc3a47ace47640cc95c345be5ecca5a3523c35cc01893af0b64a620334270372ec12482d1b1e363561698a578b359803495bb4e2ef1930b17a5190b580f141300df30adbeca28f6427a8bc1a999fd51c554a017d095d8c3e3127daf9f595
+Key = 2d773be37adb1e4d683bf0075e79c4ee037918535a7f99ccb7040fb5f5f43aea
+Output = c85d15ed44c378d6b00e23064c7bcd51
+NoReinit = 1
+
+MAC = Poly1305
+Input = 000000000000000b170303020000000006db1f1f368d696a810a349c0c714c9a5e7850c2407d721acded95e018d7a85266a6e1289cdb4aeb18da5ac8a2b0026d24a59ad485227f3eaedbb2e7e35e1c66cd60f9abf716dcc9ac42682dd7dab287a7024c4eefc321cc0574e16793e37cec03c5bda42b54c114a80b57af26416c7be742005e20855c73e21dc8e2edc9d435cb6f6059280011c270b71570051c1c9b3052126620bc1e2730fa066c7a509d53c60e5ae1b40aa6e39e49669228c90eecb4a50db32a50bc49e90b4f4b359a1dfd11749cd3867fcf2fb7bb6cd4738f6a4ad6f7ca5058f7618845af9f020f6c3b967b8f4cd4a91e2813b507ae66f2d35c18284f7292186062e10fd5510d18775351ef334e7634ab4743f5b68f49adcab384d3fd75f7390f4006ef2a295c8c7a076ad54546cd25d2107fbe1436c840924aaebe5b370893cd63d1325b8616fc4810886bc152c53221b6df373119393255ee72bcaa880174f1717f9184fa91646f17a24ac55d16bfddca9581a92eda479201f0edbf633600d6066d1ab36d5d2415d71351bbcd608a25108d25641992c1f26c531cf9f90203bc4cc19f5927d834b0a47116d3884bbb164b8ec883d1ac832e56b3918a98601a08d171881541d594db399c6ae6151221745aec814c45b0b05b565436fd6f137aa10a0c0b643761dbd6f9a9dcb99b1a6e690854ce0769cde39761d82fcdec15f0d92d7d8e94ade8eb83fbe0
+Key = 99e5822dd4173c995e3dae0ddefb97743fde3b080134b39f76e9bf8d0e88d546
+Output = 2637408fe13086ea73f971e3425e2820
+NoReinit = 1
+
+# test vectors from Hanno Bock
+
+MAC = Poly1305
+Input = cccccccccccccccccccccccccccccccccccccccccccccccccc80ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceccccccccccccccccccccccccccccccccccccc5cccccccccccccccccccccccccccccccccccccccccce3ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaccccccccccccccccccccce6cccccccccc000000afccccccccccccccccccfffffff5000000000000000000000000000000000000000000000000000000ffffffe70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000719205a8521dfc
+Key = 7f1b02640000000000000000000000000000000000000000cccccccccccccccc
+Output = 8559b876eceed66eb37798c0457baff9
+NoReinit = 1
+
+MAC = Poly1305
+Input = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa000000000000000000800264
+Key = e00016000000000000000000000000000000aaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Output = 00bd1258978e205444c9aaaa82006fed
+NoReinit = 1
+
+MAC = Poly1305
+Input = 02fc
+Key = 0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Output = 06120c0c0c0c0c0c0c0c0c0c0c0c0c0c
+NoReinit = 1
+
+MAC = Poly1305
+Input = 7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e7b007b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e7b001300000000b300000000000000000000000000000000000000000000f20000000000000000000000000000000000002000efff0009000000000000000000000000100000000009000000640000000000000000000000001300000000b300000000000000000000000000000000000000000000f20000000000000000000000000000000000002000efff00090000000000000000007a000010000000000900000064000000000000000000000000000000000000000000000000fc
+Key = 00ff000000000000000000000000000000000000001e00000000000000007b7b
+Output = 33205bbf9e9f8f7212ab9e2ab9b7e4a5
+NoReinit = 1
+
+MAC = Poly1305
+Input = 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777ffffffe9e9acacacacacacacacacacac0000acacec0100acacac2caca2acacacacacacacacacacac64f2
+Key = 0000007f0000007f01000020000000000000cf77777777777777777777777777
+Output = 02ee7c8c546ddeb1a467e4c3981158b9
+NoReinit = 1
+
+# test vectors from Andrew Moon - nacl
+
+MAC = Poly1305
+Input = 8e993b9f48681273c29650ba32fc76ce48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c97271d2c20f9b928fe2270d6fb863d51738b48eeee314a7cc8ab932164548e526ae90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b37973f622a43d14a6599b1f654cb45a74e355a5
+Key = eea6a7251c1e72916d11c2cb214d3c252539121d8e234e652d651fa4c8cff880
+Output = f3ffc7703f9400e52a7dfb4b3d3305d9
+NoReinit = 1
+
+# wrap 2^130-5
+MAC = Poly1305
+Input = ffffffffffffffffffffffffffffffff
+Key = 0200000000000000000000000000000000000000000000000000000000000000
+Output = 03000000000000000000000000000000
+NoReinit = 1
+
+# wrap 2^128
+MAC = Poly1305
+Input = 02000000000000000000000000000000
+Key = 02000000000000000000000000000000ffffffffffffffffffffffffffffffff
+Output = 03000000000000000000000000000000
+NoReinit = 1
+
+# limb carry
+MAC = Poly1305
+Input = fffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffff11000000000000000000000000000000
+Key = 0100000000000000000000000000000000000000000000000000000000000000
+Output = 05000000000000000000000000000000
+NoReinit = 1
+
+# 2^130-5
+MAC = Poly1305
+Input = fffffffffffffffffffffffffffffffffbfefefefefefefefefefefefefefefe01010101010101010101010101010101
+Key = 0100000000000000000000000000000000000000000000000000000000000000
+Output = 00000000000000000000000000000000
+NoReinit = 1
+
+# 2^130-6
+MAC = Poly1305
+Input = fdffffffffffffffffffffffffffffff
+Key = 0200000000000000000000000000000000000000000000000000000000000000
+Output = faffffffffffffffffffffffffffffff
+NoReinit = 1
+
+# 5*H+L reduction intermediate
+MAC = Poly1305
+Input = e33594d7505e43b900000000000000003394d7505e4379cd01000000000000000000000000000000000000000000000001000000000000000000000000000000
+Key = 0100000000000000040000000000000000000000000000000000000000000000
+Output = 14000000000000005500000000000000
+NoReinit = 1
+
+# 5*H+L reduction final
+MAC = Poly1305
+Input = e33594d7505e43b900000000000000003394d7505e4379cd010000000000000000000000000000000000000000000000
+Key = 0100000000000000040000000000000000000000000000000000000000000000
+Output = 13000000000000000000000000000000
+NoReinit = 1
+
+# Here are 4 duplicated cases for Poly1305 by EVP_PKEY
+MAC = Poly1305 by EVP_PKEY
+Key = 0000000000000000000000000000000000000000000000000000000000000000
+Input = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+Output = 00000000000000000000000000000000
+
+MAC = Poly1305 by EVP_PKEY
+Key = 0000000000000000000000000000000036e5f6b5c5e06070f0efca96227a863e
+Input = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f
+Output = 36e5f6b5c5e06070f0efca96227a863e
+
+MAC = Poly1305 by EVP_PKEY
+Key = 36e5f6b5c5e06070f0efca96227a863e00000000000000000000000000000000
+Input = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f
+Output = f3477e7cd95417af89a6b8794c310cf0
+
+MAC = Poly1305 by EVP_PKEY
+Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
+Input = 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e
+Output = 4541669a7eaaee61e708dc7cbcc5eb62
diff --git a/test/recipes/30-test_evp_data/evpmac_siphash.txt b/test/recipes/30-test_evp_data/evpmac_siphash.txt
new file mode 100644
index 000000000000..8fb6e1cb29b1
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmac_siphash.txt
@@ -0,0 +1,193 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+# SIPHASH tests - default values: 2,4 rounds, 16-byte mac
+# There are no official test vectors, they are simple vectors 1, 2, 3, etc
+
+Title = SIPHASH tests
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input =
+Output = a3817f04ba25a8e66df67214c7550293
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 00
+Output = da87c1d86b99af44347659119b22fc45
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 0001
+Output = 8177228da4a45dc7fca38bdef60affe4
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102
+Output = 9c70b60c5267a94e5f33b6b02985ed51
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 00010203
+Output = f88164c12d9c8faf7d0f6e7c7bcd5579
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 0001020304
+Output = 1368875980776f8854527a07690e9627
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405
+Output = 14eeca338b208613485ea0308fd7a15e
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 00010203040506
+Output = a1f1ebbed8dbc153c0b84aa61ff08239
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 0001020304050607
+Output = 3b62a9ba6258f5610f83e264f31497b4
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708
+Output = 264499060ad9baabc47f8b02bb6d71ed
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E
+Output = 5150d1772f50834a503e069a973fbd7c
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input =
+Output = a3817f04ba25a8e66df67214c7550293
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 00
+Output = da87c1d86b99af44347659119b22fc45
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 0001
+Output = 8177228da4a45dc7fca38bdef60affe4
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102
+Output = 9c70b60c5267a94e5f33b6b02985ed51
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 00010203
+Output = f88164c12d9c8faf7d0f6e7c7bcd5579
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 0001020304
+Output = 1368875980776f8854527a07690e9627
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405
+Output = 14eeca338b208613485ea0308fd7a15e
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 00010203040506
+Output = a1f1ebbed8dbc153c0b84aa61ff08239
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 0001020304050607
+Output = 3b62a9ba6258f5610f83e264f31497b4
+
+MAC = SipHash by EVP_PKEY
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708
+Output = 264499060ad9baabc47f8b02bb6d71ed
+
+MAC = SipHash
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E
+Output = 5150d1772f50834a503e069a973fbd7c
+
+# SIPHASH - default values: 2,4 rounds, explicit 8-byte mac
+
+MAC = SipHash
+Ctrl = size:8
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E
+Output = 724506EB4C328A95
+
+MAC = SipHash by EVP_PKEY
+Ctrl = digestsize:8
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E
+Output = 724506EB4C328A95
+
+# SIPHASH - default values: 2,4 rounds, explicit 16-byte mac
+
+MAC = SipHash
+Ctrl = size:16
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E
+Output = 5150d1772f50834a503e069a973fbd7c
+
+# SIPHASH - default values: 2,4 rounds, explicit 16-byte mac (set as 0)
+
+MAC = SipHash
+Ctrl = size:0
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E
+Output = 5150d1772f50834a503e069a973fbd7c
+
+# SIPHASH - default values: 2,4 rounds, explicit 13-byte mac (invalid size)
+
+MAC = SipHash
+Ctrl = size:13
+Key = 000102030405060708090A0B0C0D0E0F
+Result = MAC_INIT_ERROR
+
+# SIPHASH - default values: 2,4 rounds, explicit 13-byte mac (invalid size)
+# by EVP_PKEY this time
+
+MAC = SipHash by EVP_PKEY
+Ctrl = digestsize:13
+Key = 000102030405060708090A0B0C0D0E0F
+Result = EVPPKEYCTXCTRL_ERROR
+
+Title = SIPHASH - explicit rounds
+
+MAC = SipHash
+Ctrl = size:0
+Ctrl = c-rounds:2
+Ctrl = d-rounds:4
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E
+Output = 5150d1772f50834a503e069a973fbd7c
+
+# Generated by the reference implementation
+Title = SIPHASH - non-default values: 4,8 rounds
+
+MAC = SipHash
+Ctrl = size:8
+Ctrl = c-rounds:4
+Ctrl = d-rounds:8
+Key = 000102030405060708090A0B0C0D0E0F
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E
+Output = E67784BC5503DE23
diff --git a/test/recipes/30-test_evp_data/evpmac_sm3.txt b/test/recipes/30-test_evp_data/evpmac_sm3.txt
new file mode 100644
index 000000000000..fc4c41c09704
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmac_sm3.txt
@@ -0,0 +1,38 @@
+#
+# Copyright 2022 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 MAC
+# and continue until a blank line. Lines starting with a pound sign are ignored.
+# The keyword Availablein must appear before the test name if needed.
+
+Title = HMAC-SM3 from GM/T 0042-2015 Appendix D.3
+
+MAC = HMAC
+Algorithm = SM3
+Input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqabcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+Key = 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20
+Output = ca05e144ed05d1857840d1f318a4a8669e559fc8391f414485bfdf7bb408963a
+
+MAC = HMAC
+Algorithm = SM3
+Input = cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd
+Key = 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425
+Output = 220bf579ded555393f0159f66c99877822a3ecf610d1552154b41d44b94db3ae
+
+MAC = HMAC
+Algorithm = SM3
+Input = "Hi There"
+Key = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Output = c0ba18c68b90c88bc07de794bfc7d2c8d19ec31ed8773bc2b390c9604e0be11e
+
+MAC = HMAC
+Algorithm = SM3
+Input = "what do ya want for nothing?"
+Key = "Jefe"
+Output = 2e87f1d16862e6d964b50a5200bf2b10b764faa9680a296a2405f24bec39f882
diff --git a/test/recipes/30-test_evp_data/evpmd_blake.txt b/test/recipes/30-test_evp_data/evpmd_blake.txt
new file mode 100644
index 000000000000..add7d4e3feae
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmd_blake.txt
@@ -0,0 +1,91 @@
+#
+# Copyright 2001-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 are ignored.
+
+# BLAKE2 tests, using same inputs as MD5
+# There are no official BLAKE2 test vectors we can use since they all use a key
+# Which is currently unsupported by OpenSSL. They were generated using the
+# reference implementation. RFC7693 also mentions the 616263 / "abc" values.
+
+Title = BLAKE tests
+
+Digest = BLAKE2s256
+Input =
+Output = 69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9
+
+Digest = BLAKE2s256
+Input = 61
+Output = 4a0d129873403037c2cd9b9048203687f6233fb6738956e0349bd4320fec3e90
+
+Digest = BLAKE2s256
+Input = 616263
+Output = 508c5e8c327c14e2e1a72ba34eeb452f37458b209ed63a294d999b4c86675982
+
+Digest = BLAKE2s256
+Input = 6d65737361676520646967657374
+Output = fa10ab775acf89b7d3c8a6e823d586f6b67bdbac4ce207fe145b7d3ac25cd28c
+
+Digest = BLAKE2s256
+Input = 6162636465666768696a6b6c6d6e6f707172737475767778797a
+Output = bdf88eb1f86a0cdf0e840ba88fa118508369df186c7355b4b16cf79fa2710a12
+
+Digest = BLAKE2s256
+Input = 4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839
+Output = c75439ea17e1de6fa4510c335dc3d3f343e6f9e1ce2773e25b4174f1df8b119b
+
+Digest = BLAKE2s256
+Input = 3132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930
+Output = fdaedb290a0d5af9870864fec2e090200989dc9cd53a3c092129e8535e8b4f66
+
+Digest = BLAKE2s256
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F
+Output = 1FA877DE67259D19863A2A34BCC6962A2B25FCBF5CBECD7EDE8F1FA36688A796
+
+Digest = BLAKE2s256
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F8081
+Output = C80ABEEBB669AD5DEEB5F5EC8EA6B7A05DDF7D31EC4C0A2EE20B0B98CAEC6746
+
+Digest = BLAKE2b512
+Input =
+Output = 786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce
+
+Digest = BLAKE2b512
+Input = 61
+Output = 333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c
+
+Digest = BLAKE2b512
+Input = 616263
+Output = ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923
+
+Digest = BLAKE2b512
+Input = 6d65737361676520646967657374
+Output = 3c26ce487b1c0f062363afa3c675ebdbf5f4ef9bdc022cfbef91e3111cdc283840d8331fc30a8a0906cff4bcdbcd230c61aaec60fdfad457ed96b709a382359a
+
+Digest = BLAKE2b512
+Input = 6162636465666768696a6b6c6d6e6f707172737475767778797a
+Output = c68ede143e416eb7b4aaae0d8e48e55dd529eafed10b1df1a61416953a2b0a5666c761e7d412e6709e31ffe221b7a7a73908cb95a4d120b8b090a87d1fbedb4c
+
+Digest = BLAKE2b512
+Input = 4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839
+Output = 99964802e5c25e703722905d3fb80046b6bca698ca9e2cc7e49b4fe1fa087c2edf0312dfbb275cf250a1e542fd5dc2edd313f9c491127c2e8c0c9b24168e2d50
+
+Digest = BLAKE2b512
+Input = 3132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930
+Output = 686f41ec5afff6e87e1f076f542aa466466ff5fbde162c48481ba48a748d842799f5b30f5b67fc684771b33b994206d05cc310f31914edd7b97e41860d77d282
+
+Digest = BLAKE2b512
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F
+Output = 2319E3789C47E2DAA5FE807F61BEC2A1A6537FA03F19FF32E87EECBFD64B7E0E8CCFF439AC333B040F19B0C4DDD11A61E24AC1FE0F10A039806C5DCC0DA3D115
+
+Digest = BLAKE2b512
+Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F8081
+Output = DF0A9D0C212843A6A934E3902B2DD30D17FBA5F969D2030B12A546D8A6A45E80CF5635F071F0452E9C919275DA99BED51EB1173C1AF0518726B75B0EC3BAE2B5
diff --git a/test/recipes/30-test_evp_data/evpmd_md.txt b/test/recipes/30-test_evp_data/evpmd_md.txt
new file mode 100644
index 000000000000..6ca08e3f9509
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmd_md.txt
@@ -0,0 +1,125 @@
+#
+# 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
+
+Title = MD2 tests
+
+Availablein = legacy
+Digest = MD2
+Input =
+Output = 8350e5a3e24c153df2275c9f80692773
+
+Availablein = legacy
+Digest = MD2
+Input = "a"
+Output = 32ec01ec4a6dac72c0ab96fb34c0b5d1
+
+Availablein = legacy
+Digest = MD2
+Input = "abc"
+Output = da853b0d3f88d99b30283a69e6ded6bb
+
+Availablein = legacy
+Digest = MD2
+Input = "message digest"
+Output = ab4f496bfb2a530b219ff33031fe06b0
+
+Availablein = legacy
+Digest = MD2
+Input = "abcdefghijklmnopqrstuvwxyz"
+Output = 4e8ddff3650292ab5a4108c3aa47940b
+
+Availablein = legacy
+Digest = MD2
+Input = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+Output = da33def2a42df13975352846c30338cd
+
+Availablein = legacy
+Digest = MD2
+Input = "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+Output = d5976f79d83d3a0dc9806c3c66f3efd8
+
+Title = MD4 tests
+
+Availablein = legacy
+Digest = MD4
+Input = ""
+Output = 31d6cfe0d16ae931b73c59d7e0c089c0
+
+Availablein = legacy
+Digest = MD4
+Input = "a"
+Output = bde52cb31de33e46245e05fbdbd6fb24
+
+Availablein = legacy
+Digest = MD4
+Input = "abc"
+Output = a448017aaf21d8525fc10ae87aa6729d
+
+Availablein = legacy
+Digest = MD4
+Input = "message digest"
+Output = d9130a8164549fe818874806e1c7014b
+
+Availablein = legacy
+Digest = MD4
+Input = "abcdefghijklmnopqrstuvwxyz"
+Output = d79e1c308aa5bbcdeea8ed63df412da9
+
+Availablein = legacy
+Digest = MD4
+Input = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+Output = 043f8582f241db351ce627e153e7f0e4
+
+Availablein = legacy
+Digest = MD4
+Input = "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+Output = e33b4ddc9c38f2199c3e7b164fcc0536
+
+Title = MD5 tests
+
+Digest = MD5
+Input =
+Output = d41d8cd98f00b204e9800998ecf8427e
+
+Digest = MD5
+Input = 61
+Output = 0cc175b9c0f1b6a831c399e269772661
+
+Digest = MD5
+Input = 616263
+Output = 900150983cd24fb0d6963f7d28e17f72
+
+Digest = MD5
+Input = 6d65737361676520646967657374
+Output = f96b697d7cb7938d525a2f31aaf161d0
+
+Digest = MD5
+Input = 6162636465666768696a6b6c6d6e6f707172737475767778797a
+Output = c3fcd3d76192e4007dfb496cca67e13b
+
+Digest = MD5
+Input = 4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839
+Output = d174ab98d277d9f5a5611c2c9f419d9f
+
+Digest = MD5
+Input = 3132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930
+Output = 57edf4a22be3c955ac49da2e2107b67a
+
+Title = MD5-SHA1
+
+Digest = MD5-SHA1
+Input =
+Output = d41d8cd98f00b204e9800998ecf8427eda39a3ee5e6b4b0d3255bfef95601890afd80709
+
+Digest = MD5-SHA1
+Input = "abc"
+Output = 900150983cd24fb0d6963f7d28e17f72a9993e364706816aba3e25717850c26c9cd0d89d
+
+Digest = MD5-SHA1
+Input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+Output = 8215ef0796a20bcaaae116d3876c664a84983e441c3bd26ebaae4aa1f95129e5e54670f1
diff --git a/test/recipes/30-test_evp_data/evpmd_mdc2.txt b/test/recipes/30-test_evp_data/evpmd_mdc2.txt
new file mode 100644
index 000000000000..a2511626ed4b
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmd_mdc2.txt
@@ -0,0 +1,26 @@
+#
+# 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
+
+Title = MDC2 test vectors
+
+Availablein = legacy
+Digest = MDC2
+Input = "Now is the time for all "
+Output = 42e50cd224baceba760bdd2bd409281a
+
+Availablein = legacy
+Digest = MDC2
+Padding = 1
+Input = "Now is the time for all "
+Output = 42e50cd224baceba760bdd2bd409281a
+
+Availablein = legacy
+Digest = MDC2
+Padding = 2
+Input = "Now is the time for all "
+Output = 2e4679b5add9ca7535d87afeab33bee2
diff --git a/test/recipes/30-test_evp_data/evpmd_ripemd.txt b/test/recipes/30-test_evp_data/evpmd_ripemd.txt
new file mode 100644
index 000000000000..19ed4bb8a0f2
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmd_ripemd.txt
@@ -0,0 +1,54 @@
+#
+# Copyright 2001-2022 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 are ignored.
+
+Title = RIPEMD160 tests
+
+Availablein = legacy default
+Digest = RIPEMD160
+Input = ""
+Output = 9c1185a5c5e9fc54612808977ee8f548b2258d31
+
+Availablein = legacy default
+Digest = RIPEMD160
+Input = "a"
+Output = 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
+
+Availablein = legacy default
+Digest = RIPEMD160
+Input = "abc"
+Output = 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
+
+Availablein = legacy default
+Digest = RIPEMD160
+Input = "message digest"
+Output = 5d0689ef49d2fae572b881b123a85ffa21595f36
+
+Availablein = legacy default
+Digest = RIPEMD160
+Input = "abcdefghijklmnopqrstuvwxyz"
+Output = f71c27109c692c1b56bbdceb5b9d2865b3708dbc
+
+Availablein = legacy default
+Digest = RIPEMD160
+Input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+Output = 12a053384a9c0c88e405a06c27dcf49ada62eb2b
+
+Availablein = legacy default
+Digest = RIPEMD160
+Input = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+Output = b0e20b6e3116640286ed3a87a5713079b21f5189
+
+Availablein = legacy default
+Digest = RIPEMD160
+Input = "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+Output = 9b752e45573d4b39f4dbd3323cab82bf63326bfb
diff --git a/test/recipes/30-test_evp_data/evpmd_sha.txt b/test/recipes/30-test_evp_data/evpmd_sha.txt
new file mode 100644
index 000000000000..66ddf4590a19
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmd_sha.txt
@@ -0,0 +1,293 @@
+#
+# Copyright 2001-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 are ignored.
+
+
+Title = SHA tests from (RFC6234 section 8.5 and others)
+
+Digest = SHA1
+Input = "abc"
+Output = a9993e364706816aba3e25717850c26c9cd0d89d
+
+Digest = SHA1
+Input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+Output = 84983e441c3bd26ebaae4aa1f95129e5e54670f1
+
+Digest = SHA1
+Input = "a"
+Ncopy = 1000
+Count = 1000
+Output = 34aa973cd4c4daa4f61eeb2bdbad27316534016f
+
+Digest = SHA224
+Input = "abc"
+Output = 23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7
+
+Digest = SHA224
+Input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+Output = 75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525
+
+Digest = SHA224
+Input = "a"
+Ncopy = 64
+Count = 15625
+Output = 20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67
+
+Digest = SHA256
+Input = "abc"
+Output = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
+
+Digest = SHA256
+Input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+Output = 248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1
+
+Digest = SHA256
+Input = "a"
+Ncopy = 288
+Count = 3472
+Input = "a"
+Ncopy = 64
+Output = cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0
+
+Digest = SHA384
+Input = "abc"
+Output = cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7
+
+Digest = SHA384
+Input = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
+Output = 09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039
+
+Digest = SHA384
+Input = "a"
+Ncopy = 64
+Count = 15625
+Output = 9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985
+
+Digest = SHA512
+Input = "abc"
+Output = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
+
+Digest = SHA512
+Input = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
+Output = 8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909
+
+Digest = SHA512
+Input = "a"
+Ncopy = 288
+Count = 3472
+Input = "a"
+Ncopy = 64
+Output = e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b
+
+# Some of the test vectors from the SHS CAVP for FIPS 180-4
+Digest = SHA512-224
+Input =
+Output = 6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4
+
+Digest = SHA512-224
+Input = cf
+Output = 4199239e87d47b6feda016802bf367fb6e8b5655eff6225cb2668f4a
+
+Digest = SHA512-224
+Input = ca2d
+Output = 392b99b593b85e147f031986c2a9edfdb4ffd9f24c77c452d339c9fc
+
+Digest = SHA512-224
+Input = 6963446913771410
+Output = 21f6c373637e6a5e89d6e88811110c5c3fa12e497144912914c546e1
+
+Digest = SHA512-224
+Input = 44c6c75e377f21fc9cd7c164ca5c4cb82c5538a58dfb323992e6bcf588c61b246053706bf88725a09d0a8adfcdeec0db419cd7732b0e3386bc3f3407e9e016546f4d15c314bfd57e30c302926deb3342cbc315a1e706c5607c127de42a9a739b
+Output = b9b62986eebdb35c88b12e0257537a05394ef5a16fad01c2fec57d6f
+
+# The two examples from: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA512_224.pdf
+Digest = SHA512-224
+Input = "abc"
+Output = 4634270f707b6a54daae7530460842e20e37ed265ceee9a43e8924aa
+
+Digest = SHA512-224
+Input = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
+Output = 23fec5bb94d60b23308192640b0c453335d664734fe40e7268674af9
+
+# Some of the test vectors from the SHS CAVP for FIPS 180-4
+Digest = SHA512-256
+Input =
+Output = c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a
+
+Digest = SHA512-256
+Input = fa
+Output = c4ef36923c64e51e875720e550298a5ab8a3f2f875b1e1a4c9b95babf7344fef
+
+Digest = SHA512-256
+Input = 74e4
+Output = 0c994228b8d3bd5ea5b5259157a9bba7a193118ad22817e6fbed2df1a32a4148
+
+Digest = SHA512-256
+Input = b4e2e8501f54be91
+Output = d25265bf9cbc0dd2f108a2f5e8f69db7d15e5b8fe9100fe887dae20b6e054fe8
+
+Digest = SHA512-256
+Input = 63188781f4e9cbd1e89a54a65da053b93722e1106f00f024ad1582421ab919326f8a6e17536d6596e3cf413a9231141733e37aae540f8711cefafe489a87c4f2e6fd942f6809f3bef3076763487de48c2ee88733c5bc870617a668c6f01471ed
+Output = 91a8e285029085e224987078066486b6c605cbac27e49e84f4639710ddd05d33
+
+# The two examples from https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA512_256.pdf
+Digest = SHA512-256
+Input = "abc"
+Output = 53048e2681941ef99b2e29b76b4c7dabe4c2d0c634fc6d46e0e2f13107e7af23
+
+Digest = SHA512-256
+Input = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
+Output = 3928e184fb8690f840da3988121d31be65cb9d3ef83ee6146feac861e19b563a
+
+
+
+Title = SHA3
+
+# Empty input and \xA3x200 vectors are taken from
+# http://csrc.nist.gov/groups/ST/toolkit/examples.html#aHashing
+# Others are pairs of "LongMsg" vectors available at
+# http://csrc.nist.gov/groups/STM/cavp/secure-hashing.html#test-vectors
+
+Digest = SHA3-224
+Input = ""
+Output = 6B4E03423667DBB73B6E15454F0EB1ABD4597F9A1B078E3F5B5A6BC7
+
+Digest = SHA3-224
+Input = A3
+Count = 200
+Output = 9376816ABA503F72F96CE7EB65AC095DEEE3BE4BF9BBC2A1CB7E11E0
+
+Digest = SHA3-224
+Input = 31c82d71785b7ca6b651cb6c8c9ad5e2aceb0b0633c088d33aa247ada7a594ff4936c023251319820a9b19fc6c48de8a6f7ada214176ccdaadaeef51ed43714ac0c8269bbd497e46e78bb5e58196494b2471b1680e2d4c6dbd249831bd83a4d3be06c8a2e903933974aa05ee748bfe6ef359f7a143edf0d4918da916bd6f15e26a790cff514b40a5da7f72e1ed2fe63a05b8149587bea05653718cc8980eadbfeca85b7c9c286dd040936585938be7f98219700c83a9443c2856a80ff46852b26d1b1edf72a30203cf6c44a10fa6eaf1920173cedfb5c4cf3ac665b37a86ed02155bbbf17dc2e786af9478fe0889d86c5bfa85a242eb0854b1482b7bd16f67f80bef9c7a628f05a107936a64273a97b0088b0e515451f916b5656230a12ba6dc78
+Output = aab23c9e7fb9d7dacefdfd0b1ae85ab1374abff7c4e3f7556ecae412
+
+Digest = SHA3-224
+Input = ab4f9d765085ccb474be6e2369568292532f6fa4dd9c50d02a7d8fab0fabb56a7f9680a2462c3753fafd3a252f9dddf1eb4a76835acfb59fc2a83441b8674f2995573697245e40549d2883f1d781a153b903e470f2f28e53e9646a66f7a5a7f0d5d9e6dd50e392be44867010c7ca77c1a5a2e1f00dcb82f589f759a1332b65c62766b9fa3483d399d7602a0969400642976e948d13243a8b89aa287ad5c230b47344d7783606aced3dfed86424abf7de77b026ce6cc35d20d1c500794332b0c1a1bc67dfc033c4c360a8a3aa5fd2f19d2db1bf3b807094b949900827e6438ef5991692b539d3c42227a6b362847e9d88a1b6855db7f58760d953690b26bd7258439a7f8409ae53137a3f2f14fa77a2a6bc0aa3bb7a19dd1c69554aae6c6703f3879057d3978c1a9d41bd3f492985aa0064f43fde2fa33ff6e1dfd4961e0aeacd4e3f412b4d35c0c864660d8779705a9c82bb824c405c54f429392e4da66ecfee7ef066139270ee9ccc83be5952ff5c84ffa8938f130cc52129ab825b6a5b585f01ebed13ce074c225f5b7d441cfc58c0c1039a2f127b3982ca7df546d4993027bd78ffb36ac08161063870d23f2df556b214
+Output = d61f04985026eee29d0f9700f8c5aea32ec2c23b1a9357edeb2be20c
+
+
+Digest = SHA3-256
+Input = ""
+Output = A7FFC6F8BF1ED76651C14756A061D662F580FF4DE43B49FA82D80A4B80F8434A
+
+Digest = SHA3-256
+Input = A3
+Count = 200
+Output = 79F38ADEC5C20307A98EF76E8324AFBFD46CFD81B22E3973C65FA1BD9DE31787
+
+Digest = SHA3-256
+Input = b1caa396771a09a1db9bc20543e988e359d47c2a616417bbca1b62cb02796a888fc6eeff5c0b5c3d5062fcb4256f6ae1782f492c1cf03610b4a1fb7b814c057878e1190b9835425c7a4a0e182ad1f91535ed2a35033a5d8c670e21c575ff43c194a58a82d4a1a44881dd61f9f8161fc6b998860cbe4975780be93b6f87980bad0a99aa2cb7556b478ca35d1f3746c33e2bb7c47af426641cc7bbb3425e2144820345e1d0ea5b7da2c3236a52906acdc3b4d34e474dd714c0c40bf006a3a1d889a632983814bbc4a14fe5f159aa89249e7c738b3b73666bac2a615a83fd21ae0a1ce7352ade7b278b587158fd2fabb217aa1fe31d0bda53272045598015a8ae4d8cec226fefa58daa05500906c4d85e7567
+Output = cb5648a1d61c6c5bdacd96f81c9591debc3950dcf658145b8d996570ba881a05
+
+Digest = SHA3-256
+Input = 712b03d9ebe78d3a032a612939c518a6166ca9a161183a7596aa35b294d19d1f962da3ff64b57494cb5656e24adcf3b50e16f4e52135d2d9de76e94aa801cf49db10e384035329c54c9455bb3a9725fd9a44f44cb9078d18d3783d46ce372c31281aecef2f8b53d5702b863d71bc5786a33dd15d9256103b5ff7572f703d5cde6695e6c84f239acd1d6512ef581330590f4ab2a114ea064a693d5f8df5d908587bc7f998cde4a8b43d8821595566597dc8b3bf9ea78b154bd8907ee6c5d4d8a851f94be510962292b7ddda04d17b79fab4c022deb400e5489639dbc448f573d5cf72073a8001b36f73ac6677351b39d9bdb900e9a1121f488a7fa0aee60682e7dc7c531c85ec0154593ded3ae70e4121cae58445d8896b549cacf22d07cdace7625d57158721b44851d796d6511c38dac28dd37cbf2d7073b407fbc813149adc485e3dacee66755443c389d2d90dc70d8ff91816c0c5d7adbad7e30772a1f3ce76c72a6a2284ec7f174aefb6e9a895c118717999421b470a9665d2728c3c60c6d3e048d58b43c0d1b5b2f00be8b64bfe453d1e8fadf5699331f9
+Output = 095dcd0bc55206d2e1e715fb7173fc16a81979f278495dfc69a6d8f3174eba5a
+
+
+Digest = SHA3-384
+Input = ""
+Output = 0C63A75B845E4F7D01107D852E4C2485C51A50AAAA94FC61995E71BBEE983A2AC3713831264ADB47FB6BD1E058D5F004
+
+Digest = SHA3-384
+Input = A3
+Count = 200
+Output = 1881DE2CA7E41EF95DC4732B8F5F002B189CC1E42B74168ED1732649CE1DBCDD76197A31FD55EE989F2D7050DD473E8F
+
+Digest = SHA3-384
+Input = 5fe35923b4e0af7dd24971812a58425519850a506dfa9b0d254795be785786c319a2567cbaa5e35bcf8fe83d943e23fa5169b73adc1fcf8b607084b15e6a013df147e46256e4e803ab75c110f77848136be7d806e8b2f868c16c3a90c14463407038cb7d9285079ef162c6a45cedf9c9f066375c969b5fcbcda37f02aacff4f31cded3767570885426bebd9eca877e44674e9ae2f0c24cdd0e7e1aaf1ff2fe7f80a1c4f5078eb34cd4f06fa94a2d1eab5806ca43fd0f06c60b63d5402b95c70c21ea65a151c5cfaf8262a46be3c722264b
+Output = 3054d249f916a6039b2a9c3ebec1418791a0608a170e6d36486035e5f92635eaba98072a85373cb54e2ae3f982ce132b
+
+Digest = SHA3-384
+Input = 035adcb639e5f28bb5c88658f45c1ce0be16e7dafe083b98d0ab45e8dcdbfa38e3234dfd973ba555b0cf8eea3c82ae1a3633fc565b7f2cc839876d3989f35731be371f60de140e3c916231ec780e5165bf5f25d3f67dc73a1c33655dfdf439dfbf1cbba8b779158a810ad7244f06ec078120cd18760af436a238941ce1e687880b5c879dc971a285a74ee85c6a746749a30159ee842e9b03f31d613dddd22975cd7fed06bd049d772cb6cc5a705faa734e87321dc8f2a4ea366a368a98bf06ee2b0b54ac3a3aeea637caebe70ad09ccda93cc06de95df73394a87ac9bbb5083a4d8a2458e91c7d5bf113aecae0ce279fdda76ba690787d26345e94c3edbc16a35c83c4d071b132dd81187bcd9961323011509c8f644a1c0a3f14ee40d7dd186f807f9edc7c02f6761061bbb6dd91a6c96ec0b9f10edbbd29dc52
+Output = 02535d86cc7518484a2a238c921b739b1704a50370a2924abf39958c5976e658dc5e87440063112459bddb40308b1c70
+
+
+Digest = SHA3-512
+Input = ""
+Output = A69F73CCA23A9AC5C8B567DC185A756E97C982164FE25859E0D1DCC1475C80A615B2123AF1F5F94C11E3E9402C3AC558F500199D95B6D3E301758586281DCD26
+
+Digest = SHA3-512
+Input = A3
+Count = 200
+Output = E76DFAD22084A8B1467FCF2FFA58361BEC7628EDF5F3FDC0E4805DC48CAEECA81B7C13C30ADF52A3659584739A2DF46BE589C51CA1A4A8416DF6545A1CE8BA00
+
+Digest = SHA3-512
+Input = 664ef2e3a7059daf1c58caf52008c5227e85cdcb83b4c59457f02c508d4f4f69f826bd82c0cffc5cb6a97af6e561c6f96970005285e58f21ef6511d26e709889a7e513c434c90a3cf7448f0caeec7114c747b2a0758a3b4503a7cf0c69873ed31d94dbef2b7b2f168830ef7da3322c3d3e10cafb7c2c33c83bbf4c46a31da90cff3bfd4ccc6ed4b310758491eeba603a76
+Output = e5825ff1a3c070d5a52fbbe711854a440554295ffb7a7969a17908d10163bfbe8f1d52a676e8a0137b56a11cdf0ffbb456bc899fc727d14bd8882232549d914e
+
+Digest = SHA3-512
+Input = 991c4e7402c7da689dd5525af76fcc58fe9cc1451308c0c4600363586ccc83c9ec10a8c9ddaec3d7cfbd206484d09634b9780108440bf27a5fa4a428446b3214fa17084b6eb197c5c59a4e8df1cfc521826c3b1cbf6f4212f6bfb9bc106dfb5568395643de58bffa2774c31e67f5c1e7017f57caadbb1a56cc5b8a5cf9584552e17e7af9542ba13e9c54695e0dc8f24eddb93d5a3678e10c8a80ff4f27b677d40bef5cb5f9b3a659cc4127970cd2c11ebf22d514812dfefdd73600dfc10efba38e93e5bff47736126043e50f8b9b941e4ec3083fb762dbf15c86
+Output = cd0f2a48e9aa8cc700d3f64efb013f3600ebdbb524930c682d21025eab990eb6d7c52e611f884031fafd9360e5225ab7e4ec24cbe97f3af6dbe4a86a4f068ba7
+
+Digest = SHAKE128
+Input = ""
+Output = 7F9C2BA4E88F827D616045507605853ED73B8093F6EFBC88EB1A6EACFA66EF263CB1EEA988004B93103CFB0AEEFD2A686E01FA4A58E8A3639CA8A1E3F9AE57E235B8CC873C23DC62B8D260169AFA2F75AB916A58D974918835D25E6A435085B2BADFD6DFAAC359A5EFBB7BCC4B59D538DF9A04302E10C8BC1CBF1A0B3A5120EA17CDA7CFAD765F5623474D368CCCA8AF0007CD9F5E4C849F167A580B14AABDEFAEE7EEF47CB0FCA9767BE1FDA69419DFB927E9DF07348B196691ABAEB580B32DEF58538B8D23F87732EA63B02B4FA0F4873360E2841928CD60DD4CEE8CC0D4C922A96188D032675C8AC850933C7AFF1533B94C834ADBB69C6115BAD4692D8619F90B0CDF8A7B9C264029AC185B70B83F2801F2F4B3F70C593EA3AEEB613A7F1B1DE33FD75081F592305F2E4526EDC09631B10958F464D889F31BA010250FDA7F1368EC2967FC84EF2AE9AFF268E0B1700AFFC6820B523A3D917135F2DFF2EE06BFE72B3124721D4A26C04E53A75E30E73A7A9C4A95D91C55D495E9F51DD0B5E9D83C6D5E8CE803AA62B8D654DB53D09B8DCFF273CDFEB573FAD8BCD45578BEC2E770D01EFDE86E721A3F7C6CCE275DABE6E2143F1AF18DA7EFDDC4C7B70B5E345DB93CC936BEA323491CCB38A388F546A9FF00DD4E1300B9B2153D2041D205B443E41B45A653F2A5C4492C1ADD544512DDA2529833462B71A41A45BE97290B6F
+
+Digest = SHAKE128
+Input = A3
+Count = 200
+Output = 131AB8D2B594946B9C81333F9BB6E0CE75C3B93104FA3469D3917457385DA037CF232EF7164A6D1EB448C8908186AD852D3F85A5CF28DA1AB6FE3438171978467F1C05D58C7EF38C284C41F6C2221A76F12AB1C04082660250802294FB87180213FDEF5B0ECB7DF50CA1F8555BE14D32E10F6EDCDE892C09424B29F597AFC270C904556BFCB47A7D40778D390923642B3CBD0579E60908D5A000C1D08B98EF933F806445BF87F8B009BA9E94F7266122ED7AC24E5E266C42A82FA1BBEFB7B8DB0066E16A85E0493F07DF4809AEC084A593748AC3DDE5A6D7AAE1E8B6E5352B2D71EFBB47D4CAEED5E6D633805D2D323E6FD81B4684B93A2677D45E7421C2C6AEA259B855A698FD7D13477A1FE53E5A4A6197DBEC5CE95F505B520BCD9570C4A8265A7E01F89C0C002C59BFEC6CD4A5C109258953EE5EE70CD577EE217AF21FA70178F0946C9BF6CA8751793479F6B537737E40B6ED28511D8A2D7E73EB75F8DAAC912FF906E0AB955B083BAC45A8E5E9B744C8506F37E9B4E749A184B30F43EB188D855F1B70D71FF3E50C537AC1B0F8974F0FE1A6AD295BA42F6AEC74D123A7ABEDDE6E2C0711CAB36BE5ACB1A5A11A4B1DB08BA6982EFCCD716929A7741CFC63AA4435E0B69A9063E880795C3DC5EF3272E11C497A91ACF699FEFEE206227A44C9FB359FD56AC0A9A75A743CFF6862F17D7259AB075216C0699511643B6439
+
+Digest = SHAKE128
+Input = a6fe00064257aa318b621c5eb311d32bb8004c2fa1a969d205d71762cc5d2e633907992629d1b69d9557ff6d5e8deb454ab00f6e497c89a4fea09e257a6fa2074bd818ceb5981b3e3faefd6e720f2d1edd9c5e4a5c51e5009abf636ed5bca53fe159c8287014a1bd904f5c8a7501625f79ac81eb618f478ce21cae6664acffb30572f059e1ad0fc2912264e8f1ca52af26c8bf78e09d75f3dd9fc734afa8770abe0bd78c90cc2ff448105fb16dd2c5b7edd8611a62e537db9331f5023e16d6ec150cc6e706d7c7fcbfff930c7281831fd5c4aff86ece57ed0db882f59a5fe403105d0592ca38a081fed84922873f538ee774f13b8cc09bd0521db4374aec69f4bae6dcb66455822c0b84c91a3474ffac2ad06f0a4423cd2c6a49d4f0d6242d6a1890937b5d9835a5f0ea5b1d01884d22a6c1718e1f60b3ab5e232947c76ef70b344171083c688093b5f1475377e3069863
+Output = 3109d9472ca436e805c6b3db2251a9bc
+
+Digest = SHAKE128
+Input = 49d81708d86cd59dea0ac2c1017a9712d6dffb754dde0b57a9023a39fc5f5b6be276fc176f59f6826610428fac3a0e85fcf71011db061b8fcf2bf085ccd45670effb6dc46f4e3f2ed08e981c5935187fc95b86cf46da675096b1cf9591a67842d6301116be93d8288e4d6b70f1b1db8aa5d203b774a21825665b8170351ee86801da91154570eaf80a1564945af7822df8232fd04ea65593a7f2ab1e9e84cf6ad6c494c9ec2d9d27aaad2b8f7e4f33f12a17b422bc2d4724c13ff8a8b62054d1bfb5c33b9c11183cd8df67694300165ca37637b5a781155f1c070d156339a0242374c6723b6584bffb71c02b935455f8cb086392f5e8e8cc2015956d8f19daeb6aca4476b27108387a2ce0dc5591154d0b94ddc090abe8f4363036b821062baffb7fe550ea7dcd30bfd86c84710081e1c9e450475e123c5ec41f98ff0149bbf6405b5207cad1fb2f313d0f2bcee9be3f6ebe623049640d9234ab644a172ab14ba02633a339b5b9bb38226fda5694f7ec63ebbb8238eb8219ec9c429f4bf0353383a72f2d21702f5e3c513499f04852710f33044512edc47a56bad90885e5713851a7efac694b869fa590076e844ff757d95de581c1b3fa3dd8ccd28cad4f8ae173ee1b28f98ee606dca89063fbef0f262b33053f2c854debdc9cd433ab77abb64f445aa9b981761c4761767f3b71c2646c7b0d873baae50bc9f0
+Output = c609be05458f7ab33e7b6b54bc6e8999
+
+Digest = SHAKE256
+Input = ""
+Output = 46B9DD2B0BA88D13233B3FEB743EEB243FCD52EA62B81B82B50C27646ED5762FD75DC4DDD8C0F200CB05019D67B592F6FC821C49479AB48640292EACB3B7C4BE141E96616FB13957692CC7EDD0B45AE3DC07223C8E92937BEF84BC0EAB862853349EC75546F58FB7C2775C38462C5010D846C185C15111E595522A6BCD16CF86F3D122109E3B1FDD943B6AEC468A2D621A7C06C6A957C62B54DAFC3BE87567D677231395F6147293B68CEAB7A9E0C58D864E8EFDE4E1B9A46CBE854713672F5CAAAE314ED9083DAB4B099F8E300F01B8650F1F4B1D8FCF3F3CB53FB8E9EB2EA203BDC970F50AE55428A91F7F53AC266B28419C3778A15FD248D339EDE785FB7F5A1AAA96D313EACC890936C173CDCD0FAB882C45755FEB3AED96D477FF96390BF9A66D1368B208E21F7C10D04A3DBD4E360633E5DB4B602601C14CEA737DB3DCF722632CC77851CBDDE2AAF0A33A07B373445DF490CC8FC1E4160FF118378F11F0477DE055A81A9EDA57A4A2CFB0C83929D310912F729EC6CFA36C6AC6A75837143045D791CC85EFF5B21932F23861BCF23A52B5DA67EAF7BAAE0F5FB1369DB78F3AC45F8C4AC5671D85735CDDDB09D2B1E34A1FC066FF4A162CB263D6541274AE2FCC865F618ABE27C124CD8B074CCD516301B91875824D09958F341EF274BDAB0BAE316339894304E35877B0C28A9B1FD166C796B9CC258A064A8F57E27F2A
+
+Digest = SHAKE256
+Input = A3
+Count = 200
+Output = CD8A920ED141AA0407A22D59288652E9D9F1A7EE0C1E7C1CA699424DA84A904D2D700CAAE7396ECE96604440577DA4F3AA22AEB8857F961C4CD8E06F0AE6610B1048A7F64E1074CD629E85AD7566048EFC4FB500B486A3309A8F26724C0ED628001A1099422468DE726F1061D99EB9E93604D5AA7467D4B1BD6484582A384317D7F47D750B8F5499512BB85A226C4243556E696F6BD072C5AA2D9B69730244B56853D16970AD817E213E470618178001C9FB56C54FEFA5FEE67D2DA524BB3B0B61EF0E9114A92CDBB6CCCB98615CFE76E3510DD88D1CC28FF99287512F24BFAFA1A76877B6F37198E3A641C68A7C42D45FA7ACC10DAE5F3CEFB7B735F12D4E589F7A456E78C0F5E4C4471FFFA5E4FA0514AE974D8C2648513B5DB494CEA847156D277AD0E141C24C7839064CD08851BC2E7CA109FD4E251C35BB0A04FB05B364FF8C4D8B59BC303E25328C09A882E952518E1A8AE0FF265D61C465896973D7490499DC639FB8502B39456791B1B6EC5BCC5D9AC36A6DF622A070D43FED781F5F149F7B62675E7D1A4D6DEC48C1C7164586EAE06A51208C0B791244D307726505C3AD4B26B6822377257AA152037560A739714A3CA79BD605547C9B78DD1F596F2D4F1791BC689A0E9B799A37339C04275733740143EF5D2B58B96A363D4E08076A1A9D7846436E4DCA5728B6F760EEF0CA92BF0BE5615E96959D767197A0BEEB
+
+Digest = SHAKE256
+Input = dc5a100fa16df1583c79722a0d72833d3bf22c109b8889dbd35213c6bfce205813edae3242695cfd9f59b9a1c203c1b72ef1a5423147cb990b5316a85266675894e2644c3f9578cebe451a09e58c53788fe77a9e850943f8a275f830354b0593a762bac55e984db3e0661eca3cb83f67a6fb348e6177f7dee2df40c4322602f094953905681be3954fe44c4c902c8f6bba565a788b38f13411ba76ce0f9f6756a2a2687424c5435a51e62df7a8934b6e141f74c6ccf539e3782d22b5955d3baf1ab2cf7b5c3f74ec2f9447344e937957fd7f0bdfec56d5d25f61cde18c0986e244ecf780d6307e313117256948d4230ebb9ea62bb302cfe80d7dfebabc4a51d7687967ed5b416a139e974c005fff507a96
+Output = 2bac5716803a9cda8f9e84365ab0a681327b5ba34fdedfb1c12e6e807f45284b
+
+Digest = SHAKE256
+Input = 16caf60da14b4fa9174a6d40c23cff93ed8fc9279990f749718db1500036ef2222498ffab86fa568a0611299e54e58d83281ac558d3f4d2541ee158b1c7d4d76dbffc64ae39925e3329f7fd894fa26fc1acdc22bc858a3438e1c55707a3f75ad2b33c48789937a24b34ddd85390611088cba3231b2a3a0a93e5d9a8780470fcff92cb03811234a330db353283b3bc3036f9125efb3eaed613bfa0c59975cc2e52c33b3e6e5123e1626190a4a0261e1f5ad9bc2ee34f331736b3bd26d274536f5ae90f5186c27fdd7e8c72972f64016e72d1d32b59b8715e5b867154b99cb140a668b9d560e2c307e3904d9297f9f07dfd7629ccc526e41c109c8fc7c53b604293c6cd42933e77e11031a42f605485fe893b129bcbf705c0f45a4b087bfcead5c187ac1174322909a2d4f8b61f001c4074951000c4c550ed5564458f444dab8aae2fe8daaa6a30d209fecddf2a893df46e18b4b4460e4011d23f01d4c49a4cc1c82405f6ac5339eac41385f3295c657ac43a72fed62e6daee94ef271638f292b8e18860de0699eb45fb7d3aa81f61d44158edd68ebc244451918b
+Output = 21a48efd949c3f785179a0e340756a23f77d29a7625229a71a05731c7fbd5aa9
+
+# Following tests are pairs of *last* "VariableOut" vectors from
+# http://csrc.nist.gov/groups/STM/cavp/secure-hashing.html#test-vectors
+
+Digest = SHAKE128
+Input = c60a221c975e14bf835827c1103a2906
+Output = 0db7f7196eee8dd6994a16ded19cb09f05f89ccd2464333df2c017c6ca041fa0d54a4832a74ce86ce9b41d8e523e66ce6ef9df7c20aa70e0ac00f54eb072a472ef46cf2a933df0d5f9fafab6388a206f6bd1df50b0836500c758c557c8ac965733fdaaa59f5ed661a1bda61e2952886a60f9568157e3d72e49b6e061fc08f3f1caf159e8eff77ea5221565d2
+
+Digest = SHAKE128
+Input = 0a13ad2c7a239b4ba73ea6592ae84ea9
+Output = 5feaf99c15f48851943ff9baa6e5055d8377f0dd347aa4dbece51ad3a6d9ce0c01aee9fe2260b80a4673a909b532adcdd1e421c32d6460535b5fe392a58d2634979a5a104d6c470aa3306c400b061db91c463b2848297bca2bc26d1864ba49d7ff949ebca50fbf79a5e63716dc82b600bd52ca7437ed774d169f6bf02e46487956fba2230f34cd2a0485484d
+
+Digest = SHAKE256
+Input = 6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b
+Output = b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e8226620c9a1d22761f1d35bdff79a
+
+Digest = SHAKE256
+Input = 8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4
+Output = 2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e6111346235e1dc38325666c
+
+Title = Case insensitive digest tests
+
+Digest = Sha3-256
+Input = ""
+Output = A7FFC6F8BF1ED76651C14756A061D662F580FF4DE43B49FA82D80A4B80F8434A
+
+Digest = shA512
+Input = "abc"
+Output = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
+
diff --git a/test/recipes/30-test_evp_data/evpmd_sm3.txt b/test/recipes/30-test_evp_data/evpmd_sm3.txt
new file mode 100644
index 000000000000..b69958486994
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmd_sm3.txt
@@ -0,0 +1,61 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = SM3 Tests
+
+# From https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02
+
+Digest = SM3
+Input = 0090414C494345313233405941484F4F2E434F4D787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E49863E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A20AE4C7798AA0F119471BEE11825BE46202BB79E2A5844495E97C04FF4DF2548A7C0240F88F1CD4E16352A73C17B7F16F07353E53A176D684A9FE0C6BB798E857
+Output = F4A38489E32B45B6F876E3AC2168CA392362DC8F23459C1D1146FC3DBFB7BC9A
+
+# From https://tools.ietf.org/html/draft-shen-sm3-hash-01
+Digest = SM3
+Input = 616263
+Output = 66C7F0F462EEEDD9D1F2D46BDC10E4E24167C4875CF2F7A2297DA02B8F4BA8E0
+
+Digest = SM3
+Input = 61626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364
+Output = DEBE9FF92275B8A138604889C18E5A4D6FDB70E5387E5765293dCbA39C0C5732
+
+# From GmSSL test suite
+
+Digest = SM3
+Input = 0090414C494345313233405941484F4F2E434F4D787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E49863E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A20AE4C7798AA0F119471BEE11825BE46202BB79E2A5844495E97C04FF4DF2548A7C0240F88F1CD4E16352A73C17B7F16F07353E53A176D684A9FE0C6BB798E857
+Output = F4A38489E32B45B6F876E3AC2168CA392362DC8F23459C1D1146FC3DBFB7BC9A
+
+Digest = SM3
+Input = 0090414C494345313233405941484F4F2E434F4D00000000000000000000000000000000000000000000000000000000000000000000E78BCD09746C202378A7E72B12BCE00266B9627ECB0B5A25367AD1AD4CC6242B00CDB9CA7F1E6B0441F658343F4B10297C0EF9B6491082400A62E7A7485735FADD013DE74DA65951C4D76DC89220D5F7777A611B1C38BAE260B175951DC8060C2B3E0165961645281A8626607B917F657D7E9382F1EA5CD931F40F6627F357542653B201686522130D590FB8DE635D8FCA715CC6BF3D05BEF3F75DA5D543454448166612
+Output = 26352AF82EC19F207BBC6F9474E11E90CE0F7DDACE03B27F801817E897A81FD5
+
+Digest = SM3
+Input = 0090414C494345313233405941484F4F2E434F4D787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E49863E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A23099093BF3C137D8FCBBCDF4A2AE50F3B0F216C3122D79425FE03A45DBFE16553DF79E8DAC1CF0ECBAA2F2B49D51A4B387F2EFAF482339086A27A8E05BAED98B
+Output = E4D1D0C3CA4C7F11BC8FF8CB3F4C02A78F108FA098E51A668487240F75E20F31
+
+Digest = SM3
+Input = 008842494C4C343536405941484F4F2E434F4D787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E49863E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A2245493D446C38D8CC0F118374690E7DF633A8A4BFB3329B5ECE604B2B4F37F4353C0869F4B9E17773DE68FEC45E14904E0DEA45BF6CECF9918C85EA047C60A4C
+Output = 6B4B6D0E276691BD4A11BF72F4FB501AE309FDACB72FA6CC336E6656119ABD67
+
+Digest = SM3
+Input = 4D38D2958CA7FD2CFAE3AF04486959CF92C8EF48E8B83A05C112E739D5F181D03082020CA003020102020900AF28725D98D33143300C06082A811CCF550183750500307D310B300906035504060C02636E310B300906035504080C02626A310B300906035504070C02626A310F300D060355040A0C06746F70736563310F300D060355040B0C06746F707365633111300F06035504030C08546F707365634341311F301D06092A864886F70D0109010C10626A40746F707365632E636F6D2E636E301E170D3132303632343037353433395A170D3332303632303037353433395A307D310B300906035504060C02636E310B300906035504080C02626A310B300906035504070C02626A310F300D060355040A0C06746F70736563310F300D060355040B0C06746F707365633111300F06035504030C08546F707365634341311F301D06092A864886F70D0109010C10626A40746F707365632E636F6D2E636E3059301306072A8648CE3D020106082A811CCF5501822D03420004D69C2F1EEC3BFB6B95B30C28085C77B125D77A9C39525D8190768F37D6B205B589DCD316BBE7D89A9DC21917F17799E698531F5E6E3E10BD31370B259C3F81C3A3733071300F0603551D130101FF040530030101FF301D0603551D0E041604148E5D90347858BAAAD870D8BDFBA6A85E7B563B64301F0603551D230418301680148E5D90347858BAAAD870D8BDFBA6A85E7B563B64300B0603551D0F040403020106301106096086480186F8420101040403020057
+Output = C3B02E500A8B60B77DEDCF6F4C11BEF8D56E5CDE708C72065654FD7B2167915A
+
+Title = Case insensitive digest tests
+
+Digest = Sha3-256
+Input = ""
+Output = A7FFC6F8BF1ED76651C14756A061D662F580FF4DE43B49FA82D80A4B80F8434A
+
+Digest = shA512
+Input = "abc"
+Output = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
diff --git a/test/recipes/30-test_evp_data/evpmd_whirlpool.txt b/test/recipes/30-test_evp_data/evpmd_whirlpool.txt
new file mode 100644
index 000000000000..c29b91d76b7f
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evpmd_whirlpool.txt
@@ -0,0 +1,60 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = Whirlpool (from ISO/IEC 10118-3 test vector set)
+
+Availablein = legacy
+Digest = whirlpool
+Input = ""
+Output = 19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A73E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3
+
+Availablein = legacy
+Digest = whirlpool
+Input = "a"
+Output = 8ACA2602792AEC6F11A67206531FB7D7F0DFF59413145E6973C45001D0087B42D11BC645413AEFF63A42391A39145A591A92200D560195E53B478584FDAE231A
+
+Availablein = legacy
+Digest = whirlpool
+Input = "abc"
+Output = 4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5
+
+Availablein = legacy
+Digest = whirlpool
+Input = "message digest"
+Output = 378C84A4126E2DC6E56DCC7458377AAC838D00032230F53CE1F5700C0FFB4D3B8421557659EF55C106B4B52AC5A4AAA692ED920052838F3362E86DBD37A8903E
+
+Availablein = legacy
+Digest = whirlpool
+Input = "abcdefghijklmnopqrstuvwxyz"
+Output = F1D754662636FFE92C82EBB9212A484A8D38631EAD4238F5442EE13B8054E41B08BF2A9251C30B6A0B8AAE86177AB4A6F68F673E7207865D5D9819A3DBA4EB3B
+
+Availablein = legacy
+Digest = whirlpool
+Input = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+Output = DC37E008CF9EE69BF11F00ED9ABA26901DD7C28CDEC066CC6AF42E40F82F3A1E08EBA26629129D8FB7CB57211B9281A65517CC879D7B962142C65F5A7AF01467
+
+Availablein = legacy
+Digest = whirlpool
+Input = "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+Output = 466EF18BABB0154D25B9D38A6414F5C08784372BCCB204D6549C4AFADB6014294D5BD8DF2A6C44E538CD047B2681A51A2C60481E88C5A20B2C2A80CF3A9A083B
+
+Availablein = legacy
+Digest = whirlpool
+Input = "abcdbcdecdefdefgefghfghighijhijk"
+Output = 2A987EA40F917061F5D6F0A0E4644F488A7A5A52DEEE656207C562F988E95C6916BDC8031BC5BE1B7B947639FE050B56939BAAA0ADFF9AE6745B7B181C3BE3FD
+
+Availablein = legacy
+Digest = whirlpool
+Input = "aaaaaaaaaa"
+Count = 100000
+Output = 0C99005BEB57EFF50A7CF005560DDF5D29057FD86B20BFD62DECA0F1CCEA4AF51FC15490EDDC47AF32BB2B66C34FF9AD8C6008AD677F77126953B226E4ED8B01
diff --git a/test/recipes/30-test_evp_data/evppbe_pbkdf2.txt b/test/recipes/30-test_evp_data/evppbe_pbkdf2.txt
new file mode 100644
index 000000000000..3304179ecded
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppbe_pbkdf2.txt
@@ -0,0 +1,163 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = PBKDF2 tests (using PBE)
+
+PBE = pbkdf2
+Password = "password"
+Salt = "salt"
+iter = 1
+MD = sha1
+Key = 0c60c80f961f0e71f3a9b524af6012062fe037a6
+
+PBE = pbkdf2
+Password = "password"
+Salt = "salt"
+iter = 1
+MD = sha256
+Key = 120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b
+
+PBE = pbkdf2
+Password = "password"
+Salt = "salt"
+iter = 1
+MD = sha512
+Key = 867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce
+
+PBE = pbkdf2
+Password = "password"
+Salt = "salt"
+iter = 2
+MD = sha1
+Key = ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957
+
+PBE = pbkdf2
+Password = "password"
+Salt = "salt"
+iter = 2
+MD = sha256
+Key = ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43
+
+PBE = pbkdf2
+Password = "password"
+Salt = "salt"
+iter = 2
+MD = sha512
+Key = e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4e
+
+PBE = pbkdf2
+Password = "password"
+Salt = "salt"
+iter = 4096
+MD = sha1
+Key = 4b007901b765489abead49d926f721d065a429c1
+
+PBE = pbkdf2
+Password = "password"
+Salt = "salt"
+iter = 4096
+MD = sha256
+Key = c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a
+
+PBE = pbkdf2
+Password = "password"
+Salt = "salt"
+iter = 4096
+MD = sha512
+Key = d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5
+
+PBE = pbkdf2
+Password = "passwordPASSWORDpassword"
+Salt = "saltSALTsaltSALTsaltSALTsaltSALTsalt"
+iter = 4096
+MD = sha1
+Key = 3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038
+
+PBE = pbkdf2
+Password = "passwordPASSWORDpassword"
+Salt = "saltSALTsaltSALTsaltSALTsaltSALTsalt"
+iter = 4096
+MD = sha256
+Key = 348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9
+
+PBE = pbkdf2
+Password = "passwordPASSWORDpassword"
+Salt = "saltSALTsaltSALTsaltSALTsaltSALTsalt"
+iter = 4096
+MD = sha512
+Key = 8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8
+
+PBE = pbkdf2
+Password = 7061737300776f7264
+Salt = 7361006c74
+iter = 4096
+MD = sha1
+Key = 56fa6aa75548099dcc37d7f03425e0c3
+
+PBE = pbkdf2
+Password = 7061737300776f7264
+Salt = 7361006c74
+iter = 4096
+MD = sha256
+Key = 89b69d0516f829893c696226650a8687
+
+PBE = pbkdf2
+Password = 7061737300776f7264
+Salt = 7361006c74
+iter = 4096
+MD = sha512
+Key = 9d9e9c4cd21fe4be24d5b8244c759665
+
+Title = PBKDF2 tests for empty and NULL inputs
+
+PBE = pbkdf2
+Password = ""
+Salt = "salt"
+iter = 1
+MD = sha1
+Key = a33dddc30478185515311f8752895d36ea4363a2
+
+PBE = pbkdf2
+Password = ""
+Salt = "salt"
+iter = 1
+MD = sha256
+Key = f135c27993baf98773c5cdb40a5706ce6a345cde
+
+PBE = pbkdf2
+Password = ""
+Salt = "salt"
+iter = 1
+MD = sha512
+Key = 00ef42cdbfc98d29db20976608e455567fdddf14
+
+PBE = pbkdf2
+Password = NULL
+Salt = "salt"
+iter = 1
+MD = sha1
+Key = a33dddc30478185515311f8752895d36ea4363a2
+
+PBE = pbkdf2
+Password = NULL
+Salt = "salt"
+iter = 1
+MD = sha256
+Key = f135c27993baf98773c5cdb40a5706ce6a345cde
+
+PBE = pbkdf2
+Password = NULL
+Salt = "salt"
+iter = 1
+MD = sha512
+Key = 00ef42cdbfc98d29db20976608e455567fdddf14
diff --git a/test/recipes/30-test_evp_data/evppbe_pkcs12.txt b/test/recipes/30-test_evp_data/evppbe_pkcs12.txt
new file mode 100644
index 000000000000..701b2cbe92e7
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppbe_pkcs12.txt
@@ -0,0 +1,62 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = PKCS12 tests
+
+PBE = pkcs12
+id = 1
+iter = 1
+MD = SHA1
+Password = 0073006D006500670000
+Salt = 0A58CF64530D823F
+Key = 8AAAE6297B6CB04642AB5B077851284EB7128F1A2A7FBCA3
+
+PBE = pkcs12
+id = 2
+iter = 1
+MD = SHA1
+Password = 0073006D006500670000
+Salt = 0A58CF64530D823F
+Key = 79993DFE048D3B76
+
+PBE = pkcs12
+id = 3
+iter = 1
+MD = SHA1
+Password = 0073006D006500670000
+Salt = 3D83C0E4546AC140
+Key = 8D967D88F6CAA9D714800AB3D48051D63F73A312
+
+PBE = pkcs12
+id = 1
+iter = 1000
+MD = SHA1
+Password = 007100750065006500670000
+Salt = 1682C0FC5B3F7EC5
+Key = 483DD6E919D7DE2E8E648BA8F862F3FBFBDC2BCB2C02957F
+
+PBE = pkcs12
+id = 2
+iter = 1000
+MD = SHA1
+Password = 007100750065006500670000
+Salt = 1682C0FC5B3F7EC5
+Key = 9D461D1B00355C50
+
+PBE = pkcs12
+id = 3
+iter = 1000
+MD = SHA1
+Password = 007100750065006500670000
+Salt = 263216FCC2FAB31C
+Key = 5EC4C7A80DF652294C3925B6489A7AB857C83476
diff --git a/test/recipes/30-test_evp_data/evppbe_scrypt.txt b/test/recipes/30-test_evp_data/evppbe_scrypt.txt
new file mode 100644
index 000000000000..35fd5f6a6557
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppbe_scrypt.txt
@@ -0,0 +1,52 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = scrypt tests (from draft-josefsson-scrypt-kdf-03 and others) Using PBE
+
+PBE = scrypt
+Password = ""
+Salt = ""
+N = 16
+r = 1
+p = 1
+Key = 77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906
+
+PBE = scrypt
+Password = "password"
+Salt = "NaCl"
+N = 1024
+r = 8
+p = 16
+Key = fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640
+
+PBE = scrypt
+Password = "pleaseletmein"
+Salt = "SodiumChloride"
+N = 16384
+r = 8
+p = 1
+Key = 7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887
+
+# NB: this test requires more than 1GB of memory to run so it will hit the
+# scrypt memory limit and return an error. To run this test without error
+# uncomment out the "maxmem" line and comment out the "Result"
+# line
+PBE = scrypt
+Password = "pleaseletmein"
+Salt = "SodiumChloride"
+N = 1048576
+r = 8
+p = 1
+Key = 2101cb9b6a511aaeaddbbe09cf70f881ec568d574a2ffd4dabe5ee9820adaa478e56fd8f4ba5d09ffa1c6d927c40f4c337304049e8a952fbcbf45c6fa77a41a4
+Result = SCRYPT_ERROR
+#maxmem = 10000000000
diff --git a/test/recipes/30-test_evp_data/evppkey_brainpool.txt b/test/recipes/30-test_evp_data/evppkey_brainpool.txt
new file mode 100644
index 000000000000..22af700da835
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_brainpool.txt
@@ -0,0 +1,1360 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title=brainpoolP160r1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP160r1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEBBBswGQIBAQQUo0UiM85512uHsr2DkIOYgyxSQxk=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP160r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEIwFAYHKoZIzj0CAQYJKyQDAwIIAQEBAyoABI7OZhLqr+8c3D9Tn6++CqQtc9jG5a1COb1okeZb
+wKJUkmWn6NvNCQQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP160r1:ALICE_cf_brainpoolP160r1_PUB
+
+PrivateKey=BOB_cf_brainpoolP160r1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEBBBswGQIBAQQUmr0Vq3Z/feXq9tg9s8dxJXne1dU=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP160r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEIwFAYHKoZIzj0CAQYJKyQDAwIIAQEBAyoABAu+ovBXBFQuw3Rt9qeImT6mLh9rerLFnTRL0+LH
+sptS1Mbd0R4+5HM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP160r1:BOB_cf_brainpoolP160r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP160r1
+PeerKey=BOB_cf_brainpoolP160r1_PUB
+SharedSecret=2e75cb6a8f13951b437e04a0ed1d714a610036cc
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP160r1
+PeerKey=ALICE_cf_brainpoolP160r1_PUB
+SharedSecret=2e75cb6a8f13951b437e04a0ed1d714a610036cc
+
+Title=brainpoolP160t1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP160t1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQECBBswGQIBAQQU1P/o5GQx5PA0kQoiwUtaXBUASUY=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP160t1_PUB
+-----BEGIN PUBLIC KEY-----
+MEIwFAYHKoZIzj0CAQYJKyQDAwIIAQECAyoABANetsUNsxVmDo7X4LQ9yPYTcjN1HvLTo9GEEQtV
+lG71NyzLPQwPDwM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP160t1:ALICE_cf_brainpoolP160t1_PUB
+
+PrivateKey=BOB_cf_brainpoolP160t1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQECBBswGQIBAQQUck4Sh9X3JjSUIRoxxKv8qLM6Ijc=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP160t1_PUB
+-----BEGIN PUBLIC KEY-----
+MEIwFAYHKoZIzj0CAQYJKyQDAwIIAQECAyoABEtd7DRUMYXeoxhxpWgPz/esQkXtoTAAune8CAAo
+HqNNlR11VDctfkw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP160t1:BOB_cf_brainpoolP160t1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP160t1
+PeerKey=BOB_cf_brainpoolP160t1_PUB
+SharedSecret=6ea603a6a1a83812b967c83ef1867bd807be761e
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP160t1
+PeerKey=ALICE_cf_brainpoolP160t1_PUB
+SharedSecret=6ea603a6a1a83812b967c83ef1867bd807be761e
+
+Title=brainpoolP192r1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP192r1
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEDBB8wHQIBAQQYlF5JxzV9Doezn3hLoiidvy5TnIA7
+aR+j
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP192r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEowFAYHKoZIzj0CAQYJKyQDAwIIAQEDAzIABELUMqBZrH66DIJ1a3a42k86THdH1DevigK0dc57
+8XEZ3HcuSQ+ycrMmit1PUQItbg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP192r1:ALICE_cf_brainpoolP192r1_PUB
+
+PrivateKey=BOB_cf_brainpoolP192r1
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEDBB8wHQIBAQQYjdu95CL1DQMGpsOmsfYOAjF5cW99
+bQie
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP192r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEowFAYHKoZIzj0CAQYJKyQDAwIIAQEDAzIABInqyC1mAfyF7LU5tX/dRF5S/S9uPlQjNAhTRP6/
+/kAbKsXmABQXFeM0+P3hMw4UxQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP192r1:BOB_cf_brainpoolP192r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP192r1
+PeerKey=BOB_cf_brainpoolP192r1_PUB
+SharedSecret=2b34396d02a40df0b9f8f9c0b8623be05b41249fbd69e02a
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP192r1
+PeerKey=ALICE_cf_brainpoolP192r1_PUB
+SharedSecret=2b34396d02a40df0b9f8f9c0b8623be05b41249fbd69e02a
+
+Title=brainpoolP192t1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP192t1
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEEBB8wHQIBAQQYKkFNgJ5sJKNIyYPK1h+gdPw04bxa
+zIV7
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP192t1_PUB
+-----BEGIN PUBLIC KEY-----
+MEowFAYHKoZIzj0CAQYJKyQDAwIIAQEEAzIABAzDb+niXBQFn9f0zXf8z+kfdBIYTws8FSfdWFdU
+NGo4haY9+fL8D40kNNShgBnlKw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP192t1:ALICE_cf_brainpoolP192t1_PUB
+
+PrivateKey=BOB_cf_brainpoolP192t1
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEEBB8wHQIBAQQYFpxTrRJBEpyCePM20Fmw0uYPoxTm
+T/sq
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP192t1_PUB
+-----BEGIN PUBLIC KEY-----
+MEowFAYHKoZIzj0CAQYJKyQDAwIIAQEEAzIABC6CPE1t5PwHpXSS1u4R0JTs1IeDW8hiqarIn3pM
+I9wh+oCRjVcqvB4WDaql1bHCYg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP192t1:BOB_cf_brainpoolP192t1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP192t1
+PeerKey=BOB_cf_brainpoolP192t1_PUB
+SharedSecret=84049068441a342d7c2951ff159cdc9d05c4bddf2a6e6309
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP192t1
+PeerKey=ALICE_cf_brainpoolP192t1_PUB
+SharedSecret=84049068441a342d7c2951ff159cdc9d05c4bddf2a6e6309
+
+Title=brainpoolP224r1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP224r1
+-----BEGIN PRIVATE KEY-----
+MD4CAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEFBCMwIQIBAQQcHhlSkNTFJbZSy79CADDwo855nH2+
+cWxwSl6BpQ==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP224r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABBF4+KObaB0yJTPHPrCN6EOnr5M8zKb5CHa7SSyL
+4L9nRjgA8TfoU03LQsrtE9beREkxK3EHc25Z
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP224r1:ALICE_cf_brainpoolP224r1_PUB
+
+PrivateKey=BOB_cf_brainpoolP224r1
+-----BEGIN PRIVATE KEY-----
+MD4CAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEFBCMwIQIBAQQczslMgGENRTriMWvDfGrM/ilLpzy0
+Js79UiVzLA==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP224r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABIGGu4+PPMwOihplm2tLO7dLcDqXZB1MQHloOU8a
+taeDvYHIck4z08+1DATvPqpIDzyn9WtXRqmG
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP224r1:BOB_cf_brainpoolP224r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP224r1
+PeerKey=BOB_cf_brainpoolP224r1_PUB
+SharedSecret=477240c0587dea6aecfcac5a154d7ba3a5d4eb1ab30a69012d4401de
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP224r1
+PeerKey=ALICE_cf_brainpoolP224r1_PUB
+SharedSecret=477240c0587dea6aecfcac5a154d7ba3a5d4eb1ab30a69012d4401de
+
+Title=brainpoolP224t1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP224t1
+-----BEGIN PRIVATE KEY-----
+MD4CAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEGBCMwIQIBAQQca9rhmcgHV6etILVB9ccK2jIFXw4N
+YrvlljcGFw==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP224t1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEGAzoABHA9XoULjM967710RPgT1ICW0b+y9pFpm2yCUq2m
+kSiy/JZvuWXhTJ+KmXGnAOTIlyiOUG8tZm39
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP224t1:ALICE_cf_brainpoolP224t1_PUB
+
+PrivateKey=BOB_cf_brainpoolP224t1
+-----BEGIN PRIVATE KEY-----
+MD4CAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEGBCMwIQIBAQQcFaiqaheY0xBo5lUY8hOXMUICdOAu
+NWP/Uw3l+Q==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP224t1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEGAzoABLvPkrvyCeS/QdTX5D/AFfF0lTuPpXhSRPKocViS
+nUIZAEziCuOsgx+BqAOxNg+CN/tNzHsG1srf
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP224t1:BOB_cf_brainpoolP224t1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP224t1
+PeerKey=BOB_cf_brainpoolP224t1_PUB
+SharedSecret=2c8dd0dbf3a62a202150e12443461d348be57bc58db0f2f7d8938933
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP224t1
+PeerKey=ALICE_cf_brainpoolP224t1_PUB
+SharedSecret=2c8dd0dbf3a62a202150e12443461d348be57bc58db0f2f7d8938933
+
+Title=brainpoolP256r1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP256r1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEHBCcwJQIBAQQgcH7I5THTXm+bu+vwtyNt+XBxk/uJ
+R5V/zzRyMoXjuek=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP256r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABDFYVAzLX03nHXeFY7aJspsp525bbgzfnT68kJXB
+HhChZmPaa5BAV5Cn4DXJ5HQ5N/V8Z8Dz0aux0SWtl6ctENM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP256r1:ALICE_cf_brainpoolP256r1_PUB
+
+PrivateKey=BOB_cf_brainpoolP256r1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEHBCcwJQIBAQQgDEj/wLk/4z4Wcv8rOc9lNnRQ6hpr
+XfiuUSRqgedZkRU=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP256r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABHJdRWXtaxwI0AdvDXEk+a6XuQp72Zi+wxCrxFFW
+NgJbmH0yr4jDklp4oiC2UHkapvT6XanGMKFo2ZSziltas0A=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP256r1:BOB_cf_brainpoolP256r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP256r1
+PeerKey=BOB_cf_brainpoolP256r1_PUB
+SharedSecret=2fdd9d97efdcba3f5b181df53331db0ee42a3b1072147325ce8521dbaeafc3e4
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP256r1
+PeerKey=ALICE_cf_brainpoolP256r1_PUB
+SharedSecret=2fdd9d97efdcba3f5b181df53331db0ee42a3b1072147325ce8521dbaeafc3e4
+
+Title=brainpoolP256t1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP256t1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEIBCcwJQIBAQQgBDlYKiUEsm+tEN/DDQBhlWKJhF4J
+We+4fqVSaPNT3VY=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP256t1_PUB
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABE6XKfvmlGKrXKN/FHhW9cMThPFUIq6Au3cCujPI
+rHejQQJnsz9mSRBtzRkMM1abUc4Mf9xhkWbrT+QuJ3FcLWI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP256t1:ALICE_cf_brainpoolP256t1_PUB
+
+PrivateKey=BOB_cf_brainpoolP256t1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEIBCcwJQIBAQQgDUCTqTrVwouIU3hFoO3hwiME17PF
+X7ntzOWKS2ebqGs=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP256t1_PUB
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABBwxGpomQmgqgsUYHmpYt3qGKRVT/pJfyU+lpLXi
+/XAibEp/IvX3oFMEolSoy39poO6Zkq6npAniBqer+bS9Jpw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP256t1:BOB_cf_brainpoolP256t1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP256t1
+PeerKey=BOB_cf_brainpoolP256t1_PUB
+SharedSecret=7f177af329a4b377aea6e80bddf14f09c17c4fe81598703898fb62c929cbff04
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP256t1
+PeerKey=ALICE_cf_brainpoolP256t1_PUB
+SharedSecret=7f177af329a4b377aea6e80bddf14f09c17c4fe81598703898fb62c929cbff04
+
+Title=brainpoolP320r1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP320r1
+-----BEGIN PRIVATE KEY-----
+MEoCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEJBC8wLQIBAQQophG1zB+U2lRdetiZlk9C4+q7APJ9
+xqGQ0+GPq68+WmyZon1lDRQ5/g==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP320r1_PUB
+-----BEGIN PUBLIC KEY-----
+MGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABM9TaT9Q2j+VTlQ1pfcXx9SjlU1fEk0RvEbaY1O8
+pq8OgkQeulcgSXiI1rJI0wjV/qJoi0coZUHhsJ7bXmdO8vSTdgCMbavZScCkN6iFsALm
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP320r1:ALICE_cf_brainpoolP320r1_PUB
+
+PrivateKey=BOB_cf_brainpoolP320r1
+-----BEGIN PRIVATE KEY-----
+MEoCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEJBC8wLQIBAQQoO6MtFhs8dwul0iRbyfssxtFF6Ubt
+q2oHlzvkFL5q4uLSY7pRcDz4vw==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP320r1_PUB
+-----BEGIN PUBLIC KEY-----
+MGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABM50yDpoBMhirlHQqjMmVj/KZR0dfvmudoDt02qY
+3lKei94evfTHmPG/9BjMYQGQcRM4CDGHR0iUIUJa99e/rxj9IguPkkNiAmDZQaKsqmKB
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP320r1:BOB_cf_brainpoolP320r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP320r1
+PeerKey=BOB_cf_brainpoolP320r1_PUB
+SharedSecret=4ee386c231d0a7c9bb6dc05362f56ca70bf7ba5dcb66d8c4574c0497fdab6a5b79818a64ff5dc87e
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP320r1
+PeerKey=ALICE_cf_brainpoolP320r1_PUB
+SharedSecret=4ee386c231d0a7c9bb6dc05362f56ca70bf7ba5dcb66d8c4574c0497fdab6a5b79818a64ff5dc87e
+
+Title=brainpoolP320t1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP320t1
+-----BEGIN PRIVATE KEY-----
+MEoCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEKBC8wLQIBAQQoMsI2lsl5Sj0I4A3J0I5XStMSLT4P
+hMxwrbFdtKQh+At6RN2s12W4Kg==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP320t1_PUB
+-----BEGIN PUBLIC KEY-----
+MGowFAYHKoZIzj0CAQYJKyQDAwIIAQEKA1IABAvtZgehjOIdjsYKMcK08LaS8zVb6znYb6Qa9Fzf
+LhLUSH5S728KJHWXMh7RqZMI3yTC5I0ESqB0CvG5N0hR+3y8L3eQJisCNdnzAgMyy0ab
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP320t1:ALICE_cf_brainpoolP320t1_PUB
+
+PrivateKey=BOB_cf_brainpoolP320t1
+-----BEGIN PRIVATE KEY-----
+MEoCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEKBC8wLQIBAQQoNtZiGbwSl0NNHBmTaJKf7/VMqZjo
+yWavjg6CPa6ZgpKRR7vIQt5d9Q==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP320t1_PUB
+-----BEGIN PUBLIC KEY-----
+MGowFAYHKoZIzj0CAQYJKyQDAwIIAQEKA1IABHlS/OtqhHctabDCsDexScvQ2DGXhBuypaEeKOUq
+vbLUovatBoreEj1j5YrOl9mKpd9Hj6YqYGWH+7KKjua+5DBn9rlxlmmkst+gb+vm3UE/
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP320t1:BOB_cf_brainpoolP320t1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP320t1
+PeerKey=BOB_cf_brainpoolP320t1_PUB
+SharedSecret=079d62bad81ceeab9f213818faf249f7b29b87a81b56a33b774b2631860f90a25f5377da504cb619
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP320t1
+PeerKey=ALICE_cf_brainpoolP320t1_PUB
+SharedSecret=079d62bad81ceeab9f213818faf249f7b29b87a81b56a33b774b2631860f90a25f5377da504cb619
+
+Title=brainpoolP384r1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP384r1
+-----BEGIN PRIVATE KEY-----
+MFICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQELBDcwNQIBAQQwUW3EKrK8Rr80Jn5wwvTLC+HDTApA
+ndycbRYiQkew7SgijhNO+cV0pE0sNpMZY+Wo
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP384r1_PUB
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABBvE/fg0tIrsrIiAL07MlREd5zYk52mW7oQ+jPky
+PmGeUoZq1LtpEzQCE1uuruOuyQH1M2c7flVA8Gh3IbSCupwVBCR2QObolwk1w5qK/l/KR26tMeXI
+qL2Sy85NCUpMDw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP384r1:ALICE_cf_brainpoolP384r1_PUB
+
+PrivateKey=BOB_cf_brainpoolP384r1
+-----BEGIN PRIVATE KEY-----
+MFICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQELBDcwNQIBAQQwdG7bSygpM2GpxDPAb4hOTtFZrP2n
+qbyf7v3jFe8/ERpzREPcSntkNDyu/iAsmQKj
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP384r1_PUB
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIIxQfeqZ+uWNKAwZtxAt4ieZW7lCg7Bezpn1dG/
+VDvy/Dd5YpAuDtVxFCLfCUVH+gXfC2wUpWj8j8lgPhP1wBat/hu/PN/AQPg9C/J2EcQRVQXwyZvQ
+PzgiZeo1aWw2+w==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP384r1:BOB_cf_brainpoolP384r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP384r1
+PeerKey=BOB_cf_brainpoolP384r1_PUB
+SharedSecret=35e9a3f86a38888d183cc343801dcdaecb664d5b37f7fbc0459fd4612da6b29831bd2d8e5b599376ca510fcc3ac78be6
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP384r1
+PeerKey=ALICE_cf_brainpoolP384r1_PUB
+SharedSecret=35e9a3f86a38888d183cc343801dcdaecb664d5b37f7fbc0459fd4612da6b29831bd2d8e5b599376ca510fcc3ac78be6
+
+Title=brainpoolP384t1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP384t1
+-----BEGIN PRIVATE KEY-----
+MFICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEMBDcwNQIBAQQwGyCfuKlQDK4EflGVc01hBKW+OB/L
+ojNz6kgnAWMuWoCyOM8SOkSTbOCimaVqZrlq
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP384t1_PUB
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABE1O0qNzgozAxaQC7qX2wS+HNfKIAMc7eX4G4Z0w
+M30kgGyCn4CtWCBFgG15laf6OnYcdJgC8284B2smZiqHuvssw12SZwOlaXoLGyIsqygTitCO3Ebd
+k2dmuYdWzxj5/g==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP384t1:ALICE_cf_brainpoolP384t1_PUB
+
+PrivateKey=BOB_cf_brainpoolP384t1
+-----BEGIN PRIVATE KEY-----
+MFICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEMBDcwNQIBAQQwbpabbL6g9HZUZ4VusnNGHsHujUsA
+cDuviAZTBaHWJsCd5jA64hVFZXlZ9Jj/nSLs
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP384t1_PUB
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABAyawWqAcNlcwOauu2b93XXqpZQeRM26AYcDcHIf
+tZahQrwFpLgt6Tn7tzA2CgRGvSvBGZTxkzuHasxJn+dBDGLraias3U/sLD3P4TQuP9v8cO6i7g4x
+T+DZbNUQQ3ePDQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP384t1:BOB_cf_brainpoolP384t1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP384t1
+PeerKey=BOB_cf_brainpoolP384t1_PUB
+SharedSecret=030113dd1662230f1e47418c3044a0852dcd74fa508dbabb02d1fe5d788aa49d8047d02a802f796af21473ab17f6f85f
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP384t1
+PeerKey=ALICE_cf_brainpoolP384t1_PUB
+SharedSecret=030113dd1662230f1e47418c3044a0852dcd74fa508dbabb02d1fe5d788aa49d8047d02a802f796af21473ab17f6f85f
+
+Title=brainpoolP512r1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP512r1
+-----BEGIN PRIVATE KEY-----
+MGICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQENBEcwRQIBAQRAagAsEAU5t/T4yI0MvyTWuPcrQfaa
+1xZr99hRfeY7+pDV4yooxTIXUESqk/dBQlFSrVUkdvMQHq/8vm5V/w97LQ==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP512r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEJLmN88iMClNBtyLHzmSgIE9d+v/GRtBr1+r+
+Wvz5XOwsiHWWFTRO5Um+3HUVZH+S3nky6n/3Yjn4DFA4lhxV+y40g8p+kkXYKwpXTByQhERcPPPS
+wKh/S7Y3k3KSLkphjiBExzlBcj9r3gLww9+0nVer/fnUgRz7YwWldv4PR2E=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP512r1:ALICE_cf_brainpoolP512r1_PUB
+
+PrivateKey=BOB_cf_brainpoolP512r1
+-----BEGIN PRIVATE KEY-----
+MGICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQENBEcwRQIBAQRAgHKjBCUMVJTF41vKv+Lp2xVz6bsF
+P1Aqc+2ehlxlEoYL4H8CbUBh89F1QPjGjIOLEebJcN/KnnpyRGVdx4UV2g==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP512r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAElWuk6uPxVgBSLSK9Zfqbid/ipXbIFKVaetCI
+YsYOdzkbjGIWLd2MFZIjZ9r7ePEcHXqQiwGvW+8itGM/xwLpA4qZ2QYazqtAbT187d5cdyZf4PQT
+/kv/ZTvXTl7xHDtaujQ1re00Z3liEKgKstI80BkA6eA4Jfy4G2F7CX/WuSQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP512r1:BOB_cf_brainpoolP512r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP512r1
+PeerKey=BOB_cf_brainpoolP512r1_PUB
+SharedSecret=84269a8f2932b7e09b23deabaeab26eda6bbdee8846153b0c62b7d2663506a9e71d32cf0cc127ec130f6880612f4e054bc79adb57ddbee97949508ce1eda0bb1
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP512r1
+PeerKey=ALICE_cf_brainpoolP512r1_PUB
+SharedSecret=84269a8f2932b7e09b23deabaeab26eda6bbdee8846153b0c62b7d2663506a9e71d32cf0cc127ec130f6880612f4e054bc79adb57ddbee97949508ce1eda0bb1
+
+Title=brainpoolP512t1 curve tests
+
+PrivateKey=ALICE_cf_brainpoolP512t1
+-----BEGIN PRIVATE KEY-----
+MGICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEOBEcwRQIBAQRAd92o2JLX5lk2v6fGr1pH5TT8KUKR
+6FaCm6CRk0dC/xK6h0rpONjx+37VuH3uS+HoRlru83maSoeHQneWCc32XA==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_brainpoolP512t1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDgOBggAEob+TJkhNP6D+HoQtlWcLITI3MM25Axi++awv
+HnMoclRLLur7CjQsKd0v6aEzmG2+4WZSZFGLA9L8Z5sh9L916p5CD5nk1pNfy5QKNi2H5R3QC/oc
+RfNNxhXdVVekfTaAiqhe8UF3aMngmDAc7sq794DVZvCf1sqq8v5cHrnqRcQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_brainpoolP512t1:ALICE_cf_brainpoolP512t1_PUB
+
+PrivateKey=BOB_cf_brainpoolP512t1
+-----BEGIN PRIVATE KEY-----
+MGICAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEOBEcwRQIBAQRAVW4ZQKgDeHAkubwYYlp2JKklrbpp
+gvez/prOdyHJXJbVriU4lCH/MpH2I+nXjaZ9zLcl9JbnrUOJ6xGPHfZJrw==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_brainpoolP512t1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDgOBggAEJbQFKxq27CuY7/mgNwEnH3GSYGXy9s6n48qq
+gbMrp5uREi8JXZ+BuLQmzZuF15ZPOOmh+EJFjbD8i9NDiUkYLnm1oy/EuE1f5VUNoXFeFFIa21vZ
+2kzPYYKYyUNOdG8p/s4rPBFyCMf6Tizt0D4XA4oLptKUUIX2SC1Sd+qakKA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_brainpoolP512t1:BOB_cf_brainpoolP512t1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_brainpoolP512t1
+PeerKey=BOB_cf_brainpoolP512t1_PUB
+SharedSecret=48bc4ebdb9a88ca38bed58f5e547eb11d803fd01b6eadff1761ecb48c54525cba43bdb0ee4a4d7aa6701985e0bc12fd32382c035d80acc7ec26adfcb108a07cb
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_brainpoolP512t1
+PeerKey=ALICE_cf_brainpoolP512t1_PUB
+SharedSecret=48bc4ebdb9a88ca38bed58f5e547eb11d803fd01b6eadff1761ecb48c54525cba43bdb0ee4a4d7aa6701985e0bc12fd32382c035d80acc7ec26adfcb108a07cb
+
+
+
+
+# TEST CURVE brainpoolP160r1
+
+PrivateKey=ALICE_brainpoolP160r1
+-----BEGIN PRIVATE KEY-----
+MGQCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEBBEkwRwIBAQQUZTQYt6IOsZUUgr36
+WYGKTj10erShLAMqAAQkMf73t3Cov2cdezPSUt9Wn0ydhpk9+2HwZ13YufUyfcvP
+ijdJ/zFO
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP160r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEIwFAYHKoZIzj0CAQYJKyQDAwIIAQEBAyoABCQx/ve3cKi/Zx17M9JS31afTJ2G
+mT37YfBnXdi59TJ9y8+KN0n/MU4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP160r1:ALICE_brainpoolP160r1_PUB
+
+
+PrivateKey=BOB_brainpoolP160r1
+-----BEGIN PRIVATE KEY-----
+MGQCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEBBEkwRwIBAQQUb/ulIRG4yoOOihWD
+AV4l78I2GLWhLAMqAARPjEMetPWS4FlgFCHvVfK1nTK/TLsYScHregeZAZqn8gaF
+vgq4bE8v
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP160r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEIwFAYHKoZIzj0CAQYJKyQDAwIIAQEBAyoABE+MQx609ZLgWWAUIe9V8rWdMr9M
+uxhJwet6B5kBmqfyBoW+CrhsTy8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP160r1:BOB_brainpoolP160r1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP160r1
+PeerKey=BOB_brainpoolP160r1_PUB
+SharedSecret=e4fe5ae99a60d17b597f5705a719cea6709c63b9
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP160r1
+PeerKey=ALICE_brainpoolP160r1_PUB
+SharedSecret=e4fe5ae99a60d17b597f5705a719cea6709c63b9
+
+# TEST CURVE brainpoolP160t1
+
+PrivateKey=ALICE_brainpoolP160t1
+-----BEGIN PRIVATE KEY-----
+MGQCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQECBEkwRwIBAQQUWWAyUnMvmQyeKeHE
+bIjyrW0JzVqhLAMqAAQ/h1VSPKvn2cTPmfMq0FZ3mxypjCIWtCMav7GH9Fby+kCr
+WKA0lFVw
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP160t1_PUB
+-----BEGIN PUBLIC KEY-----
+MEIwFAYHKoZIzj0CAQYJKyQDAwIIAQECAyoABD+HVVI8q+fZxM+Z8yrQVnebHKmM
+Iha0Ixq/sYf0VvL6QKtYoDSUVXA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP160t1:ALICE_brainpoolP160t1_PUB
+
+
+PrivateKey=BOB_brainpoolP160t1
+-----BEGIN PRIVATE KEY-----
+MGQCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQECBEkwRwIBAQQUDFpUx8SZ718X0cwv
++oQaTXSK0zyhLAMqAAQIgDYhuy9cj04IFE0LforgJPt9rgcjuO81V6WR+E3LNETJ
+rYsy1X9k
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP160t1_PUB
+-----BEGIN PUBLIC KEY-----
+MEIwFAYHKoZIzj0CAQYJKyQDAwIIAQECAyoABAiANiG7L1yPTggUTQt+iuAk+32u
+ByO47zVXpZH4Tcs0RMmtizLVf2Q=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP160t1:BOB_brainpoolP160t1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP160t1
+PeerKey=BOB_brainpoolP160t1_PUB
+SharedSecret=199a218458b71a4e13f05a599fc17bc76f30ea2f
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP160t1
+PeerKey=ALICE_brainpoolP160t1_PUB
+SharedSecret=199a218458b71a4e13f05a599fc17bc76f30ea2f
+
+# TEST CURVE brainpoolP192r1
+
+PrivateKey=ALICE_brainpoolP192r1
+-----BEGIN PRIVATE KEY-----
+MHACAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEDBFUwUwIBAQQYGiIpZVR71C31b9AE
+lLiEiEyzdhRsvTbkoTQDMgAEHAovVZJfm52KWqJr9IKz7w7Ta+7HUN5Bjy+qR87k
+Oo3nP+439TLOs4iDhIvzP8j1
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP192r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEowFAYHKoZIzj0CAQYJKyQDAwIIAQEDAzIABBwKL1WSX5udilqia/SCs+8O02vu
+x1DeQY8vqkfO5DqN5z/uN/UyzrOIg4SL8z/I9Q==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP192r1:ALICE_brainpoolP192r1_PUB
+
+
+PrivateKey=BOB_brainpoolP192r1
+-----BEGIN PRIVATE KEY-----
+MHACAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEDBFUwUwIBAQQYkut8HljwyzxOArKA
+azilboA8yY6oy4svoTQDMgAEv/3NhrdVEA+PMFCm+muXhrC0wxX5UHvCUd/OAyda
+c2Jl7XVw2gS4hfXkTeT7MQMu
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP192r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEowFAYHKoZIzj0CAQYJKyQDAwIIAQEDAzIABL/9zYa3VRAPjzBQpvprl4awtMMV
++VB7wlHfzgMnWnNiZe11cNoEuIX15E3k+zEDLg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP192r1:BOB_brainpoolP192r1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP192r1
+PeerKey=BOB_brainpoolP192r1_PUB
+SharedSecret=7ce122b49afdfd1adde6cdfaa13dc7180d6d4e70322c8773
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP192r1
+PeerKey=ALICE_brainpoolP192r1_PUB
+SharedSecret=7ce122b49afdfd1adde6cdfaa13dc7180d6d4e70322c8773
+
+# TEST CURVE brainpoolP192t1
+
+PrivateKey=ALICE_brainpoolP192t1
+-----BEGIN PRIVATE KEY-----
+MHACAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEEBFUwUwIBAQQYCV1NuYw7DwOawqgY
+kALfFpEzFE2rjXqYoTQDMgAEmBmJ220/ZJVdxfSgHFTz3FOC2PHql2ItbG0LXs/v
+7n/qkWGWz9B7R2FBqFaLBk0L
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP192t1_PUB
+-----BEGIN PUBLIC KEY-----
+MEowFAYHKoZIzj0CAQYJKyQDAwIIAQEEAzIABJgZidttP2SVXcX0oBxU89xTgtjx
+6pdiLWxtC17P7+5/6pFhls/Qe0dhQahWiwZNCw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP192t1:ALICE_brainpoolP192t1_PUB
+
+
+PrivateKey=BOB_brainpoolP192t1
+-----BEGIN PRIVATE KEY-----
+MHACAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEEBFUwUwIBAQQYmZP2vmYpfJvSnqEl
+4K0Yj0iMCr4ds9bboTQDMgAEcSuLSED2s4SIuEdomZbdDMSmNrpnezJRv/W+bCQp
+4bcnQAb20tp47ISw/yXoQSA0
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP192t1_PUB
+-----BEGIN PUBLIC KEY-----
+MEowFAYHKoZIzj0CAQYJKyQDAwIIAQEEAzIABHEri0hA9rOEiLhHaJmW3QzEpja6
+Z3syUb/1vmwkKeG3J0AG9tLaeOyEsP8l6EEgNA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP192t1:BOB_brainpoolP192t1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP192t1
+PeerKey=BOB_brainpoolP192t1_PUB
+SharedSecret=1a5444c2600d9d21d6a450d158fd25272ade262ab519790b
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP192t1
+PeerKey=ALICE_brainpoolP192t1_PUB
+SharedSecret=1a5444c2600d9d21d6a450d158fd25272ade262ab519790b
+
+# TEST CURVE brainpoolP224r1
+
+PrivateKey=ALICE_brainpoolP224r1
+-----BEGIN PRIVATE KEY-----
+MHwCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEFBGEwXwIBAQQch91FmOz9tJ9Wfdyw
+krOM6UXinTuYBxjUWtU0HKE8AzoABIq0T5AJJzdDl9wbYqyxExMfTbNDt6W/ound
+ZTS6qXYvMegJ+nBcXeCi+FBI0pu6lHv8tF1ZjWLS
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP224r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABIq0T5AJJzdDl9wbYqyxExMfTbND
+t6W/oundZTS6qXYvMegJ+nBcXeCi+FBI0pu6lHv8tF1ZjWLS
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP224r1:ALICE_brainpoolP224r1_PUB
+
+
+PrivateKey=BOB_brainpoolP224r1
+-----BEGIN PRIVATE KEY-----
+MHwCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEFBGEwXwIBAQQcvabkJWnrR4LuGUxf
+LO8DqDBcL4eix/a0qRWxm6E8AzoABM6qgBI9bmZwyYE0QFBJf5NpXe2phgcObKrG
+4URjdsORl4UJwlq7eLwINJLP9dPl0Qlb0Fv/gNVo
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP224r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEFAzoABM6qgBI9bmZwyYE0QFBJf5NpXe2p
+hgcObKrG4URjdsORl4UJwlq7eLwINJLP9dPl0Qlb0Fv/gNVo
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP224r1:BOB_brainpoolP224r1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP224r1
+PeerKey=BOB_brainpoolP224r1_PUB
+SharedSecret=419e446a66968fcc372126cff4d637505c848c3a9b82503f2d441215
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP224r1
+PeerKey=ALICE_brainpoolP224r1_PUB
+SharedSecret=419e446a66968fcc372126cff4d637505c848c3a9b82503f2d441215
+
+# TEST CURVE brainpoolP224t1
+
+PrivateKey=ALICE_brainpoolP224t1
+-----BEGIN PRIVATE KEY-----
+MHwCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEGBGEwXwIBAQQcSwWCcqYuiNyxR0gY
+VCMBQ17ykfaxEgMMyByZoqE8AzoABJiVhwIZAqy+OKj8RewjsdXPPCODfm+4RGV8
+2bYLW8SqiDeEDB+RvJirYwz/a5Ri+EL5Xk9QVkQF
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP224t1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEGAzoABJiVhwIZAqy+OKj8RewjsdXPPCOD
+fm+4RGV82bYLW8SqiDeEDB+RvJirYwz/a5Ri+EL5Xk9QVkQF
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP224t1:ALICE_brainpoolP224t1_PUB
+
+
+PrivateKey=BOB_brainpoolP224t1
+-----BEGIN PRIVATE KEY-----
+MHwCAQAwFAYHKoZIzj0CAQYJKyQDAwIIAQEGBGEwXwIBAQQcLK5R+idvzqC1a28G
+e9m6Eh5up82atVSTRWeXwKE8AzoABBg6ar3lkYSv0AcOM542SbPhAqxny/anS+Do
+ELViM0rofxlcvkywZiBY0T40xUvXBILDsY/0he22
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP224t1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwFAYHKoZIzj0CAQYJKyQDAwIIAQEGAzoABBg6ar3lkYSv0AcOM542SbPhAqxn
+y/anS+DoELViM0rofxlcvkywZiBY0T40xUvXBILDsY/0he22
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP224t1:BOB_brainpoolP224t1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP224t1
+PeerKey=BOB_brainpoolP224t1_PUB
+SharedSecret=8f83465fb6353912a51c2809ea30b19b73b3e391c0422650e0f20b58
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP224t1
+PeerKey=ALICE_brainpoolP224t1_PUB
+SharedSecret=8f83465fb6353912a51c2809ea30b19b73b3e391c0422650e0f20b58
+
+# TEST CURVE brainpoolP256r1
+
+PrivateKey=ALICE_brainpoolP256r1
+-----BEGIN PRIVATE KEY-----
+MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBBwRtMGsCAQEEIBMmEFKb8UQb4oCu
+k226EiMpk/omRsx/rrRNuh9WGB/zoUQDQgAEeIYdJpIpkxneKbL9qP/vSJ2/d7cH
+Cs2ZXggcRif7KKN55Ioit7Q1sVEeGzEDFbxpRWK6A+Kgu8sFkE+LHr5BGQ==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP256r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABHiGHSaSKZMZ3imy/aj/70idv3e3
+BwrNmV4IHEYn+yijeeSKIre0NbFRHhsxAxW8aUViugPioLvLBZBPix6+QRk=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP256r1:ALICE_brainpoolP256r1_PUB
+
+
+PrivateKey=BOB_brainpoolP256r1
+-----BEGIN PRIVATE KEY-----
+MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBBwRtMGsCAQEEIKXsf2pxFfTQiwbW
+2SKwZq50UOGhJYJZYO/xY33RHuQaoUQDQgAEC/FCNhyxZ4VcHY8zBehFbg3M54AU
+w6ixJ69gI2+xoyAXBn5d+pf8tAG0D0TUqtxRtwBgPWkt6pY4YYBQMY+NOA==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP256r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABAvxQjYcsWeFXB2PMwXoRW4NzOeA
+FMOosSevYCNvsaMgFwZ+XfqX/LQBtA9E1KrcUbcAYD1pLeqWOGGAUDGPjTg=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP256r1:BOB_brainpoolP256r1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP256r1
+PeerKey=BOB_brainpoolP256r1_PUB
+SharedSecret=78ed4b7bb4ed808813f8c27132fe04f5d805365549b754994d83b002416b6ba0
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP256r1
+PeerKey=ALICE_brainpoolP256r1_PUB
+SharedSecret=78ed4b7bb4ed808813f8c27132fe04f5d805365549b754994d83b002416b6ba0
+
+# TEST CURVE brainpoolP256t1
+
+PrivateKey=ALICE_brainpoolP256t1
+-----BEGIN PRIVATE KEY-----
+MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCARtMGsCAQEEIC4yFvVLhvRyF9wu
+yYJbncxLagsMCD+Sxt2vAJiKFpKdoUQDQgAEiGxl8E0yj3gE4iOyFDVe0tUYS9fN
+cNzkxEx2CiZwm09jbSNQF2pKAoCmLZQa8VBz+UZqdeXZy9Sc8UpJU3Fghg==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP256t1_PUB
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABIhsZfBNMo94BOIjshQ1XtLVGEvX
+zXDc5MRMdgomcJtPY20jUBdqSgKApi2UGvFQc/lGanXl2cvUnPFKSVNxYIY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP256t1:ALICE_brainpoolP256t1_PUB
+
+
+PrivateKey=BOB_brainpoolP256t1
+-----BEGIN PRIVATE KEY-----
+MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCARtMGsCAQEEIIfXus/y+3RdwUZ0
+0db3boxPCzzRcI3CgIC8ggdGDPqPoUQDQgAEdlZ2yOiBsmREPaw8TsrGNmTLL6q1
+lVz8+OQ780Xxfo9VIFeR0Qbk8CgqX0lWt5hbEbbzEbF6I2nZCJndQ9VIoA==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP256t1_PUB
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEIA0IABHZWdsjogbJkRD2sPE7KxjZkyy+q
+tZVc/PjkO/NF8X6PVSBXkdEG5PAoKl9JVreYWxG28xGxeiNp2QiZ3UPVSKA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP256t1:BOB_brainpoolP256t1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP256t1
+PeerKey=BOB_brainpoolP256t1_PUB
+SharedSecret=287a8f19e6f06476b222805eb11907c536fa6ea02b8877ea6d5323f9fabccdd8
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP256t1
+PeerKey=ALICE_brainpoolP256t1_PUB
+SharedSecret=287a8f19e6f06476b222805eb11907c536fa6ea02b8877ea6d5323f9fabccdd8
+
+# TEST CURVE brainpoolP320r1
+
+PrivateKey=ALICE_brainpoolP320r1
+-----BEGIN PRIVATE KEY-----
+MIGiAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCQSBhjCBgwIBAQQoRBvhspL4HZA6
+YcfouziNWFuE1e1RcN69xlsJ8OGZEMobV29pntQlSaFUA1IABFDmVKAu6UDU1doe
+67Fzp3WeLAKNcaLjX13W0X704bqNvSU7q747RCCbd46miRYsiqYejnsX0A/A5bOi
+I1LJixCGcAgm1pnGajKeok/ecsl+
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP320r1_PUB
+-----BEGIN PUBLIC KEY-----
+MGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABFDmVKAu6UDU1doe67Fzp3WeLAKN
+caLjX13W0X704bqNvSU7q747RCCbd46miRYsiqYejnsX0A/A5bOiI1LJixCGcAgm
+1pnGajKeok/ecsl+
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP320r1:ALICE_brainpoolP320r1_PUB
+
+
+PrivateKey=BOB_brainpoolP320r1
+-----BEGIN PRIVATE KEY-----
+MIGiAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCQSBhjCBgwIBAQQoi9ghqMQp8Zdx
+xVXuOMC66tVIvTQ9EX6taWLDy82eBRAt7MItb5LaMqFUA1IABHFexsmyGSMPdLCm
+a5vzaFlbk/gAkq6yfpE+BMokI+7GXx4dJz9+sKOi8h++T4SnocW03M7I5zOQVfK+
+82Kkq/vXCzEdkVRUPU4HVls7nil0
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP320r1_PUB
+-----BEGIN PUBLIC KEY-----
+MGowFAYHKoZIzj0CAQYJKyQDAwIIAQEJA1IABHFexsmyGSMPdLCma5vzaFlbk/gA
+kq6yfpE+BMokI+7GXx4dJz9+sKOi8h++T4SnocW03M7I5zOQVfK+82Kkq/vXCzEd
+kVRUPU4HVls7nil0
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP320r1:BOB_brainpoolP320r1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP320r1
+PeerKey=BOB_brainpoolP320r1_PUB
+SharedSecret=13a56c63c2dafe3e053534d5bf32c7eb4a0733bf356510725d378c5cbcf6974240719e3e53b352bb
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP320r1
+PeerKey=ALICE_brainpoolP320r1_PUB
+SharedSecret=13a56c63c2dafe3e053534d5bf32c7eb4a0733bf356510725d378c5cbcf6974240719e3e53b352bb
+
+# TEST CURVE brainpoolP320t1
+
+PrivateKey=ALICE_brainpoolP320t1
+-----BEGIN PRIVATE KEY-----
+MIGiAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCgSBhjCBgwIBAQQoxl+OeILawo65
+M4YbtLSARXYJsFJi4F8cUF6vfo1swRoCL6sAnV0QSaFUA1IABFN48RBqcd0PyU7N
+TRjaJsUaYXBlectX7JwhB/X/bbuNUK1YW9tZJZSZ/bBUfVfEgUhC+0qrvomc3xhy
+YBJIQeGWODwC1rHjO2H7GGvx1HmF
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP320t1_PUB
+-----BEGIN PUBLIC KEY-----
+MGowFAYHKoZIzj0CAQYJKyQDAwIIAQEKA1IABFN48RBqcd0PyU7NTRjaJsUaYXBl
+ectX7JwhB/X/bbuNUK1YW9tZJZSZ/bBUfVfEgUhC+0qrvomc3xhyYBJIQeGWODwC
+1rHjO2H7GGvx1HmF
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP320t1:ALICE_brainpoolP320t1_PUB
+
+
+PrivateKey=BOB_brainpoolP320t1
+-----BEGIN PRIVATE KEY-----
+MIGiAgEAMBQGByqGSM49AgEGCSskAwMCCAEBCgSBhjCBgwIBAQQoMlTiH2CM3XGa
+VXPOQ5tdm+GJmnP03gbNK4POt5yQpnW8HoaHc+SS56FUA1IABLXO5ngGf17dU+ae
+QetDyXqlTTxtTrav1/NGb+i9BQUAsbIMQkdY0zWWbhksoMn56F2DBTSFwBlb1hBt
+p9fNIGUbgKqOlvtBpQHIoKXYEq3l
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP320t1_PUB
+-----BEGIN PUBLIC KEY-----
+MGowFAYHKoZIzj0CAQYJKyQDAwIIAQEKA1IABLXO5ngGf17dU+aeQetDyXqlTTxt
+Trav1/NGb+i9BQUAsbIMQkdY0zWWbhksoMn56F2DBTSFwBlb1hBtp9fNIGUbgKqO
+lvtBpQHIoKXYEq3l
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP320t1:BOB_brainpoolP320t1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP320t1
+PeerKey=BOB_brainpoolP320t1_PUB
+SharedSecret=170d1f5fc4248700be75499eac813fac642df1311ab005e10796cc2ef43b82f8d788eb232d580243
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP320t1
+PeerKey=ALICE_brainpoolP320t1_PUB
+SharedSecret=170d1f5fc4248700be75499eac813fac642df1311ab005e10796cc2ef43b82f8d788eb232d580243
+
+# TEST CURVE brainpoolP384r1
+
+PrivateKey=ALICE_brainpoolP384r1
+-----BEGIN PRIVATE KEY-----
+MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBCwSBnjCBmwIBAQQweTbLDp3fPbIL
+8w7I+aQzU8edVXXiFtt8Ulx7HSuAvHu/uaeedCKA+sXKXe33/aoDoWQDYgAEgQEp
+8Mrclp7hd1kkTnaXCEzAyhlMUtBIXQGI8ALS3FaMoL4mjIlhAU+vNdIcI9NGBx7Q
+FRUzFIy3IAyF+VPq8fM7Yyjk0x4P8UB1N+d2odKvKFqFBQBQmd6S5h+0ijis
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP384r1_PUB
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABIEBKfDK3Jae4XdZJE52lwhMwMoZ
+TFLQSF0BiPAC0txWjKC+JoyJYQFPrzXSHCPTRgce0BUVMxSMtyAMhflT6vHzO2Mo
+5NMeD/FAdTfndqHSryhahQUAUJnekuYftIo4rA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP384r1:ALICE_brainpoolP384r1_PUB
+
+
+PrivateKey=BOB_brainpoolP384r1
+-----BEGIN PRIVATE KEY-----
+MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBCwSBnjCBmwIBAQQwF6ERsBKPIs2v
+YHNnkyb15eHfTIQ58qsFlF90qztOdGzhytiWZXPvOh4khzujFfdZoWQDYgAEDxy4
+ddTAt+nTw0F16nhHhmmNbns3bX3rKEcY+686v58dAvx4VWOC7vHsiwek9ZYbZSkm
+Ky6H78ndkBrmU3BBR7hFGyU7CWSDFoH5Oybk0+JzkNa0qAm8+MpAIcFqb+IY
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP384r1_PUB
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABA8cuHXUwLfp08NBdep4R4ZpjW57
+N2196yhHGPuvOr+fHQL8eFVjgu7x7IsHpPWWG2UpJisuh+/J3ZAa5lNwQUe4RRsl
+OwlkgxaB+Tsm5NPic5DWtKgJvPjKQCHBam/iGA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP384r1:BOB_brainpoolP384r1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP384r1
+PeerKey=BOB_brainpoolP384r1_PUB
+SharedSecret=0b3ad57e83759760d94904d9ea266b538120c6db2b5046217aa1ecd924828b949d335c8ce8a5b36bac7556bf6058c40a
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP384r1
+PeerKey=ALICE_brainpoolP384r1_PUB
+SharedSecret=0b3ad57e83759760d94904d9ea266b538120c6db2b5046217aa1ecd924828b949d335c8ce8a5b36bac7556bf6058c40a
+
+# TEST CURVE brainpoolP384t1
+
+PrivateKey=ALICE_brainpoolP384t1
+-----BEGIN PRIVATE KEY-----
+MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBDASBnjCBmwIBAQQwYb/xX9O8mxEu
+tbOQwQ/pB862keq/eWxj8GW41m2OroEtOJZL1SsK/8ZwAL3BdNoyoWQDYgAENpcX
+DPQYBhU8zi4G6mQtjdgVmpdn4Iuwb0/VVmopmFAL0ISDB0qk9Hn2Lt9rmE8Nathq
+kKKlVHd/Y5FRqf06PZj8jaYHAxvz5E1J8ykrbT7rUpbj9Df2t+eop9YBbSxc
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP384t1_PUB
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABDaXFwz0GAYVPM4uBupkLY3YFZqX
+Z+CLsG9P1VZqKZhQC9CEgwdKpPR59i7fa5hPDWrYapCipVR3f2ORUan9Oj2Y/I2m
+BwMb8+RNSfMpK20+61KW4/Q39rfnqKfWAW0sXA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP384t1:ALICE_brainpoolP384t1_PUB
+
+
+PrivateKey=BOB_brainpoolP384t1
+-----BEGIN PRIVATE KEY-----
+MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBDASBnjCBmwIBAQQwbFHOFMHlMXRY
+d29dF6HzKMh09dw7OAyxEeROTqOjFsI+whaqtL4GWH5P0UgFPDAHoWQDYgAER24u
+XKoWWnFFusbCPtDzz7n9zDIWzFqMeP6YE3MOseyfRFcKIVz/omWBVwpUbd3ca6Or
+d/Mh8hThIV4tZbPUwlyzzEW2NMJtd2t5JKdja0aT7fbp7NS9IJzNIRDl7r8z
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP384t1_PUB
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQEMA2IABEduLlyqFlpxRbrGwj7Q88+5/cwy
+FsxajHj+mBNzDrHsn0RXCiFc/6JlgVcKVG3d3Gujq3fzIfIU4SFeLWWz1MJcs8xF
+tjTCbXdreSSnY2tGk+326ezUvSCczSEQ5e6/Mw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP384t1:BOB_brainpoolP384t1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP384t1
+PeerKey=BOB_brainpoolP384t1_PUB
+SharedSecret=0fde85a61157cdd898196f291802ebd57bb2e39d98c4e6ad9bb3e2e0375e1df9bf7dadb8df7db1fea32818ef2c88babc
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP384t1
+PeerKey=ALICE_brainpoolP384t1_PUB
+SharedSecret=0fde85a61157cdd898196f291802ebd57bb2e39d98c4e6ad9bb3e2e0375e1df9bf7dadb8df7db1fea32818ef2c88babc
+
+# TEST CURVE brainpoolP512r1
+
+PrivateKey=ALICE_brainpoolP512r1
+-----BEGIN PRIVATE KEY-----
+MIHsAgEAMBQGByqGSM49AgEGCSskAwMCCAEBDQSB0DCBzQIBAQRAjMVK5PA5xYk8
+5gNs28Yo0erQSkgmildL7WwMVeT66algoISleFKT+fQkDRlfSKPXCZjK0NnKX5K9
+rkMm8w9ywKGBhQOBggAEHlj4gsnR2wN53k/hSIcAtbgHwbld5uS1/gR8RtoyaEDi
+t4Ti59/I9kRkZFEHJemhpTP2xY03j3M5rHP7vzk1NVKgYHJQ9MvMtPd6G+Fj5D0Y
+N1nnyqP3IJ8PyXmOdXBMoMHu+H50QbYZpcUFOqJhKp1T0+58xTXJdP8axl1IjtI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP512r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEHlj4gsnR2wN53k/hSIcAtbgH
+wbld5uS1/gR8RtoyaEDit4Ti59/I9kRkZFEHJemhpTP2xY03j3M5rHP7vzk1NVKg
+YHJQ9MvMtPd6G+Fj5D0YN1nnyqP3IJ8PyXmOdXBMoMHu+H50QbYZpcUFOqJhKp1T
+0+58xTXJdP8axl1IjtI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP512r1:ALICE_brainpoolP512r1_PUB
+
+
+PrivateKey=BOB_brainpoolP512r1
+-----BEGIN PRIVATE KEY-----
+MIHsAgEAMBQGByqGSM49AgEGCSskAwMCCAEBDQSB0DCBzQIBAQRAZA10+k4+Esme
+vjkT9LdSX07amRwXrT7CBnEskZpHkZEoYVQa6FuE7Fai0kjL86lUCC4xoTjFbH3t
+LLrD0v7vwqGBhQOBggAEo3NAMIGp0rJxReih4nbEiTegA4pSEk84CUHHBLGuLsek
+Vo1vmj1LTnu4dVuILLf+MSZh9jjNmsWuEGSHIaZx6hniFHGdaRQ3GFODGvkE6z2d
+2kwv3Fmsq9+gu4By2OhSCfP+hpFhobXAYwWXzgaBFH+TqlF31Dyr2fuPnkL7tK4=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP512r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEo3NAMIGp0rJxReih4nbEiTeg
+A4pSEk84CUHHBLGuLsekVo1vmj1LTnu4dVuILLf+MSZh9jjNmsWuEGSHIaZx6hni
+FHGdaRQ3GFODGvkE6z2d2kwv3Fmsq9+gu4By2OhSCfP+hpFhobXAYwWXzgaBFH+T
+qlF31Dyr2fuPnkL7tK4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP512r1:BOB_brainpoolP512r1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP512r1
+PeerKey=BOB_brainpoolP512r1_PUB
+SharedSecret=80751feb09215a9da32f9f8c97133f53f0286a89969bd00d7f365da7f7736f45e634a35012d71b22f09bd89760ab0d2b0d426133cd9a379da9739d0f5f2e0360
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP512r1
+PeerKey=ALICE_brainpoolP512r1_PUB
+SharedSecret=80751feb09215a9da32f9f8c97133f53f0286a89969bd00d7f365da7f7736f45e634a35012d71b22f09bd89760ab0d2b0d426133cd9a379da9739d0f5f2e0360
+
+# TEST CURVE brainpoolP512t1
+
+PrivateKey=ALICE_brainpoolP512t1
+-----BEGIN PRIVATE KEY-----
+MIHsAgEAMBQGByqGSM49AgEGCSskAwMCCAEBDgSB0DCBzQIBAQRAm8Dt1nWguxK5
+iqhf6mig/Y7ctmMgbRCWSJMMd3lw5/iM4mtP9achhaEWGImIWV6Fbryi6Jv3nitC
+BUxpqREpcqGBhQOBggAEH/z+dOHhLfxI0GLpmUjYaSlC2H380nBhe6P4GSrnpya/
+Yew0IRyDfo0p99vwgOaLh8wJIH3Joy4NMtHthg8IAFmoctAoWkQ21E0HjPjwqZbx
+mvBD0S9opVycFR8XUSaK0EHyHO7hfuVsdyYzIIjpKViP7uOOtrggsTepWzBQt9I=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_brainpoolP512t1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDgOBggAEH/z+dOHhLfxI0GLpmUjYaSlC
+2H380nBhe6P4GSrnpya/Yew0IRyDfo0p99vwgOaLh8wJIH3Joy4NMtHthg8IAFmo
+ctAoWkQ21E0HjPjwqZbxmvBD0S9opVycFR8XUSaK0EHyHO7hfuVsdyYzIIjpKViP
+7uOOtrggsTepWzBQt9I=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_brainpoolP512t1:ALICE_brainpoolP512t1_PUB
+
+
+PrivateKey=BOB_brainpoolP512t1
+-----BEGIN PRIVATE KEY-----
+MIHsAgEAMBQGByqGSM49AgEGCSskAwMCCAEBDgSB0DCBzQIBAQRAFStrWBwOtTlY
+/pBeT2ncjTHcNzKm+ocTiIvr0RUEuX8ITd+L5x9H+ZLk44T85/8yqTPlk6cZSHby
+TG5UkPGVvaGBhQOBggAEE6EYYwpBA3NBflj/HYwxzbaxuALefTsTr5O0bLqh4J6S
+xkAwsQnlkU8PCnzEuvdBNxSwW7276VGfwDO7kFKEdZq3cnT+P41yi/XBVK7xgaL1
+R2U+vCxWsje6JLixWEdJkJ+6TqPKICdriNge1zbjvfhb01zP58E/Xsgh5/deJco=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_brainpoolP512t1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDgOBggAEE6EYYwpBA3NBflj/HYwxzbax
+uALefTsTr5O0bLqh4J6SxkAwsQnlkU8PCnzEuvdBNxSwW7276VGfwDO7kFKEdZq3
+cnT+P41yi/XBVK7xgaL1R2U+vCxWsje6JLixWEdJkJ+6TqPKICdriNge1zbjvfhb
+01zP58E/Xsgh5/deJco=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_brainpoolP512t1:BOB_brainpoolP512t1_PUB
+
+
+# ECDH Alice with Bob peer
+Derive=ALICE_brainpoolP512t1
+PeerKey=BOB_brainpoolP512t1_PUB
+SharedSecret=0afecb44d108c9bf2bc159fcc613a1429e3906d5d201d579adc2167058e972ef85fc13d837f3566a2ff3a881e47bfe36b722baf4a9f865097fe11e171189a944
+
+# ECDH Bob with Alice peer
+Derive=BOB_brainpoolP512t1
+PeerKey=ALICE_brainpoolP512t1_PUB
+SharedSecret=0afecb44d108c9bf2bc159fcc613a1429e3906d5d201d579adc2167058e972ef85fc13d837f3566a2ff3a881e47bfe36b722baf4a9f865097fe11e171189a944
+
+
+Title = ECDH KATs (RFC 7027)
+
+# Keys and shared secrets from RFC 7027
+PrivateKey=BRAINPOOLP256R1_RFC7027
+-----BEGIN PRIVATE KEY-----
+MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBBwRtMGsCAQEEIIHbHuEAFQ/y6jON
+cIJxvjgwDLVCQdeZUPd7BjA5gE8doUQDQgAERBBukT+SvAKhcF2ZU6hBTbleGqpJ
+6B2ehfkpqOMQC+WKtIRvEcrMtzzknL3RIPWpAKaf0ywnIiP3ie8Q6wib3A==
+-----END PRIVATE KEY-----
+
+PublicKey=BRAINPOOLP256R1_RFC7027-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABEQQbpE/krwCoXBdmVOoQU25Xhqq
+SegdnoX5KajjEAvlirSEbxHKzLc85Jy90SD1qQCmn9MsJyIj94nvEOsIm9w=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BRAINPOOLP256R1_RFC7027:BRAINPOOLP256R1_RFC7027-PUBLIC
+
+
+PrivateKey=BRAINPOOLP256R1_RFC7027-Peer
+-----BEGIN PRIVATE KEY-----
+MIGIAgEAMBQGByqGSM49AgEGCSskAwMCCAEBBwRtMGsCAQEEIFXkC8QeN+PirSXD
+xmVFEf+oR0qRoAMgh1k4UtPn12vToUQDQgAEjS1ojGz5PhFgrQTMRCkRfcLEGCXh
+6fygrd005vGzn3uZDFdSCBK+USZB5HA0gyEGvH0+jdDkx/ETbXAGVHzsag==
+-----END PRIVATE KEY-----
+
+PublicKey=BRAINPOOLP256R1_RFC7027-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABI0taIxs+T4RYK0EzEQpEX3CxBgl
+4en8oK3dNObxs597mQxXUggSvlEmQeRwNIMhBrx9Po3Q5MfxE21wBlR87Go=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BRAINPOOLP256R1_RFC7027-Peer:BRAINPOOLP256R1_RFC7027-Peer-PUBLIC
+
+Derive=BRAINPOOLP256R1_RFC7027
+PeerKey=BRAINPOOLP256R1_RFC7027-Peer-PUBLIC
+SharedSecret=89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B
+
+Derive=BRAINPOOLP256R1_RFC7027-Peer
+PeerKey=BRAINPOOLP256R1_RFC7027-PUBLIC
+SharedSecret=89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B
+
+PrivateKey=BRAINPOOLP384R1_RFC7027
+-----BEGIN PRIVATE KEY-----
+MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBCwSBnjCBmwIBAQQwHiD14EiliG8f
+FXx06RveK5jItS1Y5QA9VwU/xLC9ZdbxXrXR7hYQ34cHlRQ2J9BCoWQDYgAEaLZl
+3ZHBlYAGUM3TY8Yl9OdC6BNGZ7dnsbR2eTWI+IWraYyFLUpud6JS1jgPyvBoVbyR
+o5yewB3uNgF7fWc6kxI20vH1yDlC0Enj+iBgdJPg0Dj/L9MMKrZ9Fchff6pZ
+-----END PRIVATE KEY-----
+
+PublicKey=BRAINPOOLP384R1_RFC7027-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABGi2Zd2RwZWABlDN02PGJfTnQugT
+Rme3Z7G0dnk1iPiFq2mMhS1KbneiUtY4D8rwaFW8kaOcnsAd7jYBe31nOpMSNtLx
+9cg5QtBJ4/ogYHST4NA4/y/TDCq2fRXIX3+qWQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BRAINPOOLP384R1_RFC7027:BRAINPOOLP384R1_RFC7027-PUBLIC
+
+
+PrivateKey=BRAINPOOLP384R1_RFC7027-Peer
+-----BEGIN PRIVATE KEY-----
+MIG6AgEAMBQGByqGSM49AgEGCSskAwMCCAEBCwSBnjCBmwIBAQQwAyZAvGADxZJg
+9yUMPbWM5kf5jhJgrM5KzaPdhp904B+LpeAyQwnbapgxSXq6yWZwoWQDYgAETUQy
+byaaWXpbWLulZdpVVu1/2aip63bCX0bbadGdyM5q0Y5ASxVziyCG3zfnHR60YtaS
+E23lbL6Tv1+jGI71i8ijoOxsHhUaIQOKQukYUym1snWQPRkvjU4fMv6cx4xI
+-----END PRIVATE KEY-----
+
+PublicKey=BRAINPOOLP384R1_RFC7027-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABE1EMm8mmll6W1i7pWXaVVbtf9mo
+qet2wl9G22nRncjOatGOQEsVc4sght835x0etGLWkhNt5Wy+k79foxiO9YvIo6Ds
+bB4VGiEDikLpGFMptbJ1kD0ZL41OHzL+nMeMSA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BRAINPOOLP384R1_RFC7027-Peer:BRAINPOOLP384R1_RFC7027-Peer-PUBLIC
+
+Derive=BRAINPOOLP384R1_RFC7027
+PeerKey=BRAINPOOLP384R1_RFC7027-Peer-PUBLIC
+SharedSecret=0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42
+
+Derive=BRAINPOOLP384R1_RFC7027-Peer
+PeerKey=BRAINPOOLP384R1_RFC7027-PUBLIC
+SharedSecret=0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42
+
+PrivateKey=BRAINPOOLP512R1_RFC7027
+-----BEGIN PRIVATE KEY-----
+MIHsAgEAMBQGByqGSM49AgEGCSskAwMCCAEBDQSB0DCBzQIBAQRAFjAv8Nu7Wo1z
+PatxQcG0WsvIcVk5Z39qVoUKOL2HvVmwnoAnlgn/Mz651MBhIx+yb5LusEmCpfHR
+dkytV2ZUIqGBhQOBggAECkIFF+QGqsCs3OkPzXFIdxjTuVPv1/vsX38n4oxhSZmT
+l+keAp4GRX2y0+ZAZos5LCp+c3p/C/BENtEWQP0J/XLmiC6NsoqtNiN80l1YDbI3
+g5YcjcUt+i7BOK1HKg/O84h89itiOyqH3lxYgwHqPl/CabNztgck9egqatFH/ec=
+-----END PRIVATE KEY-----
+
+PublicKey=BRAINPOOLP512R1_RFC7027-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAECkIFF+QGqsCs3OkPzXFIdxjT
+uVPv1/vsX38n4oxhSZmTl+keAp4GRX2y0+ZAZos5LCp+c3p/C/BENtEWQP0J/XLm
+iC6NsoqtNiN80l1YDbI3g5YcjcUt+i7BOK1HKg/O84h89itiOyqH3lxYgwHqPl/C
+abNztgck9egqatFH/ec=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BRAINPOOLP512R1_RFC7027:BRAINPOOLP512R1_RFC7027-PUBLIC
+
+
+PrivateKey=BRAINPOOLP512R1_RFC7027-Peer
+-----BEGIN PRIVATE KEY-----
+MIHsAgEAMBQGByqGSM49AgEGCSskAwMCCAEBDQSB0DCBzQIBAQRAIw4Y4bzIijYv
+pU5Oo5AgCSkvf4AzYk/UcbXYrOSdEs+rvBmWPauOLx66AL/7KeTXLRPyIkVi9AXL
+gFA2ZrJUKaGBhQOBggAEnUX2beXWfi5ttuk6Wc4LtIEGCX/3iggd54HNsx/OjMuq
+6o3UMgxBGfHpzUN6Lqs3MfqWaKsmjYcd7aVaVHMZny/cMTCVvN1fs6kWNvB6lZyO
+hrVjah6TDoOWBJy0gZYdNlzBFFOgbHGYNUdbEstS/Dw4O8414n7xlFErcYdihfo=
+-----END PRIVATE KEY-----
+
+PublicKey=BRAINPOOLP512R1_RFC7027-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEnUX2beXWfi5ttuk6Wc4LtIEG
+CX/3iggd54HNsx/OjMuq6o3UMgxBGfHpzUN6Lqs3MfqWaKsmjYcd7aVaVHMZny/c
+MTCVvN1fs6kWNvB6lZyOhrVjah6TDoOWBJy0gZYdNlzBFFOgbHGYNUdbEstS/Dw4
+O8414n7xlFErcYdihfo=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BRAINPOOLP512R1_RFC7027-Peer:BRAINPOOLP512R1_RFC7027-Peer-PUBLIC
+
+Derive=BRAINPOOLP512R1_RFC7027
+PeerKey=BRAINPOOLP512R1_RFC7027-Peer-PUBLIC
+SharedSecret=A7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1F
+
+Derive=BRAINPOOLP512R1_RFC7027-Peer
+PeerKey=BRAINPOOLP512R1_RFC7027-PUBLIC
+SharedSecret=A7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1F
diff --git a/test/recipes/30-test_evp_data/evppkey_dh.txt b/test/recipes/30-test_evp_data/evppkey_dh.txt
new file mode 100644
index 000000000000..d6d9f39afcf6
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_dh.txt
@@ -0,0 +1,167 @@
+#
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = DH tests (with random keys)
+
+PrivateKey=ALICE_dh2048
+-----BEGIN PRIVATE KEY-----
+MIICJgIBADCCARcGCSqGSIb3DQEDATCCAQgCggEBAIkq4hnfaUGeltLDB1eo3SWH
+Mm9pJsCYb2E/gCXNgTWQBKebkg4ZXzEYUng889PfzNpxmDinl/H4WoBmoM/hJasJ
+2PElcKejIAnYUi0SHHDkYKOJMo0W5H8fHcRk893vR0kllO+hP0e1Gur02TsdEF7w
+bIPc+VV/7bMg9VxhQh9+ESeYgQXn/n3NSniUkO5aCjyzGy6Ex2/9dc+Xg6C08YJD
+cerI660enEe0NaI50N1W65bbxdl3d6vHT9CGteXYiIuj0I5CG7CwnU2WV42we/Uw
+YSq/6DfU93y5LSBZuOif8iLpGXfgE7TCAeY3H+WBAu43+gWz6xNKtbF0RMmT2VcC
+AQIEggEEAoIBAH+HysSpzn94mlyNeevhb29SFyu3/maES+JRlVuHvpVOcHCrGR5J
+fbXWiWnn03geb1hC9HIta6l9YKwWGQYLmVu/0bRedYeqC1JfgEvwYrZME9FO+AqQ
+4CpXcG/mSGtHoMPtcsUakpprNxoh3xwI+GAfSDK1lW/aA0R/A7jNCV9+lmYJAJL6
+5FJvhBAODSf7JUetlWvhwDBnvram7jRGJtlvpiwmmfk+Kb4AA1ZQMIHTnPNNPLJh
+NTtqELKjk3i3xxlLLlWJEbF+ZAuseDPZITtwMr4fhoeKegez+lucu6uoMm7Wek7F
+G0Ne0unywftCLUrmQ/Lboqaqvlv3PAFRaLs=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_dh2048_pub
+-----BEGIN PUBLIC KEY-----
+MIICJDCCARcGCSqGSIb3DQEDATCCAQgCggEBAIkq4hnfaUGeltLDB1eo3SWHMm9p
+JsCYb2E/gCXNgTWQBKebkg4ZXzEYUng889PfzNpxmDinl/H4WoBmoM/hJasJ2PEl
+cKejIAnYUi0SHHDkYKOJMo0W5H8fHcRk893vR0kllO+hP0e1Gur02TsdEF7wbIPc
++VV/7bMg9VxhQh9+ESeYgQXn/n3NSniUkO5aCjyzGy6Ex2/9dc+Xg6C08YJDcerI
+660enEe0NaI50N1W65bbxdl3d6vHT9CGteXYiIuj0I5CG7CwnU2WV42we/UwYSq/
+6DfU93y5LSBZuOif8iLpGXfgE7TCAeY3H+WBAu43+gWz6xNKtbF0RMmT2VcCAQID
+ggEFAAKCAQBT3K38hHa4aWKerb3st8S8Jy/abEwn3kRnLtWins75l9K4YDnIKHV9
+/zTO0a75SxhvDDQqRiekw99Gel1zkxdo1/OJOTJs2KJ6Itedn3bU4p7k2599xstL
+02OHWzvu4J9LQXZ0NVnhX3RzhJH/ZMZAchIVx4joRmaY7fGCXwYGsfrq7lrhYOwp
+SSALvTdiNJLGm8nSOPXRWnAarTJfBhH/A38OsBY8a3bMHAlxigZWKtzY8GFIPh6O
+Xu/+5iasto/aUiK6Oshcf7t4la3TY6GAbPz9SyPETV2jRn2+ujrkFON8I1wuz9ud
+9d5iI/cRcKKrtLdIPGc7uqGy2V2qIp3v
+-----END PUBLIC KEY-----
+
+PrivateKey=BOB_dh2048
+-----BEGIN PRIVATE KEY-----
+MIICJgIBADCCARcGCSqGSIb3DQEDATCCAQgCggEBAIkq4hnfaUGeltLDB1eo3SWH
+Mm9pJsCYb2E/gCXNgTWQBKebkg4ZXzEYUng889PfzNpxmDinl/H4WoBmoM/hJasJ
+2PElcKejIAnYUi0SHHDkYKOJMo0W5H8fHcRk893vR0kllO+hP0e1Gur02TsdEF7w
+bIPc+VV/7bMg9VxhQh9+ESeYgQXn/n3NSniUkO5aCjyzGy6Ex2/9dc+Xg6C08YJD
+cerI660enEe0NaI50N1W65bbxdl3d6vHT9CGteXYiIuj0I5CG7CwnU2WV42we/Uw
+YSq/6DfU93y5LSBZuOif8iLpGXfgE7TCAeY3H+WBAu43+gWz6xNKtbF0RMmT2VcC
+AQIEggEEAoIBAE3A6u2we1mxSxDLkiakPs2zZqfhb2ejP2TvuA4DX/+knqrJRK7s
+TqKBz80CvR7QA5CL4r/5BWJrmFet7cmF6Eh4PXE+sNswevV2C16btzAbGSGzSR5u
+bu6vv06Ah1rPrHrv+UjvRe2bxR/Z/PavbI71aQ+lqDkGKC/Uyr3u+PFLRwos2HfK
+nEX/qfnqo3N3YsPFvLidkbSJOkq6CayLT4ycTRdPxTVKELfanSEeenKJ9rKTiPdz
+3y0ycyyh0kAKs2bBViq3UlVRE3kdNAQ3nCpRl9O52hCsA+BMmnAHEW8z81lEZugN
+9X4uLV3XuflMrKxBGxfiCEVGcvnjpBTZXas=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_dh2048_pub
+-----BEGIN PUBLIC KEY-----
+MIICJDCCARcGCSqGSIb3DQEDATCCAQgCggEBAIkq4hnfaUGeltLDB1eo3SWHMm9p
+JsCYb2E/gCXNgTWQBKebkg4ZXzEYUng889PfzNpxmDinl/H4WoBmoM/hJasJ2PEl
+cKejIAnYUi0SHHDkYKOJMo0W5H8fHcRk893vR0kllO+hP0e1Gur02TsdEF7wbIPc
++VV/7bMg9VxhQh9+ESeYgQXn/n3NSniUkO5aCjyzGy6Ex2/9dc+Xg6C08YJDcerI
+660enEe0NaI50N1W65bbxdl3d6vHT9CGteXYiIuj0I5CG7CwnU2WV42we/UwYSq/
+6DfU93y5LSBZuOif8iLpGXfgE7TCAeY3H+WBAu43+gWz6xNKtbF0RMmT2VcCAQID
+ggEFAAKCAQAJ1Ko5/dRMpowe/7k1T+11ZNszNMEbKtXGq9KsZAqSFp6h8on/kCFe
+3/SK520B/cDIjLV0W4q33iimSmG/TjwLG0jpsIKwxbzIfxjs4e1Y4pPaKfbKuCcK
+BBu8Thz2brhTxooU4CPVBJerX3mJX6hbAPAl0XcIScZPcyYYHkvthjZvO0djEn1z
+inhUQ37JKc74+56w/nUDjDiDFZMnwkPCtkdzLsbWW+Mu1Ysd1qQyb1XcNfkO0d/t
+rX00AaHwYqM7uM4slSqZhCi2w4zVvwP0BPD/TrPAjEFYEk0l2eNxBBmW5Mlss2Od
+wtMjfaolhtG/beqmAneP14mCEM4lwH4a
+-----END PUBLIC KEY-----
+
+PrivateKey=BOB_dh2048_different_pg
+-----BEGIN PRIVATE KEY-----
+MIICJgIBADCCARcGCSqGSIb3DQEDATCCAQgCggEBAM/ZBdjCzvFon8sEMWEXQ4vw
+bFV3VCq3nhCuHSLb/ZsHIuKFy/ma173ttMdN1qSOL2XJazi8l+4whU0Wga8FticR
+z9U0t8ExC+0f90QRXsjXGSuDFJY6i5m6YL/xZf09g7522RqNwt4WWACgKrG7g31b
++43eXosvv5okgw5gmMrlGNZYaqnn094Ifu0UhUro6vXmlcfhnv1JpASNmxNmzrQJ
+TE8W5miG5c1+6MQJdmSVKEitdUX202mRukj2Nzq16e6iOGmGMTWYGV+sK/Hnh+BD
+hPVIqLWW5Wfz3y5ysCsGmSKuS9bssZXWmlwRiNp/NqliyzBznG168VoKMlDQxG8C
+AQIEggEEAoIBAHLPQHe9mySBSeNAqUMzKAXgxhPYPl9zC7QiyxwGiZcu/4IQ8Elr
+cyRhMuJBbu0T6NNruG2zUzDFWp/0dPGWq7YiOauau5iYCpKt4KZgiELDEwZqlxF+
+wXKXxSw3rJVemZyYuLmRzmUMcvBr5ZspdxsDRipN9mHSGTtQNGAiSPXB4P/bkaSW
+YELavS+cHZfH4nE7DAP8b8dEID81xBLGEKAyUilDE2Nv4PamhCU5GmVSv2HXVSdI
+bGlj1BpvrfJyuK5EyyOqMKvwXiEQweqrVICGNtQQs+bmNpaVBCu/xRomWn5YZkqc
+YjQBeOQwrhEFzbFwWi8vai9HB85tBLKEMiE=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_dh2048_different_pg_pub
+-----BEGIN PUBLIC KEY-----
+MIICJTCCARcGCSqGSIb3DQEDATCCAQgCggEBAM/ZBdjCzvFon8sEMWEXQ4vwbFV3
+VCq3nhCuHSLb/ZsHIuKFy/ma173ttMdN1qSOL2XJazi8l+4whU0Wga8FticRz9U0
+t8ExC+0f90QRXsjXGSuDFJY6i5m6YL/xZf09g7522RqNwt4WWACgKrG7g31b+43e
+Xosvv5okgw5gmMrlGNZYaqnn094Ifu0UhUro6vXmlcfhnv1JpASNmxNmzrQJTE8W
+5miG5c1+6MQJdmSVKEitdUX202mRukj2Nzq16e6iOGmGMTWYGV+sK/Hnh+BDhPVI
+qLWW5Wfz3y5ysCsGmSKuS9bssZXWmlwRiNp/NqliyzBznG168VoKMlDQxG8CAQID
+ggEGAAKCAQEAr5J9x7z9FWCQ27LF3pzTR+4ZdOKJJpg1qD8Vp78sg6VkoZLl+j57
+uTQVgWlCEQr5tOVCBA+F0i3DCVGpE0ExkO/lVYjf6+mwTsyZWZj6IKkxpxwm9CIR
+NshubotT9vagLxdRM9jepmt6A8Q2MfI1xm4yrYLZ0xQpNPT6076a+3gl6UysaDv8
+wpryAiQdIexC1jz4Z7yIAND3PHWFAiAIOdipIMmuvJz2exgP1KsYTZFjJUTMBZxN
+fSO65JSqf6LoQ91cB5RtgwD2pjehoAl2wumjdMcdNJyYIPvcTd1BFMjUmR3vJe/n
+di2IvD9wSm5tY542PWcf/7GV0bMbnykaPQ==
+-----END PUBLIC KEY-----
+
+PublicKey=BOB_dh2048_badpub_toolarge
+-----BEGIN PUBLIC KEY-----
+MIICJTCCARcGCSqGSIb3DQEDATCCAQgCggEBAIkq4hnfaUGeltLDB1eo3SWHMm9p
+JsCYb2E/gCXNgTWQBKebkg4ZXzEYUng889PfzNpxmDinl/H4WoBmoM/hJasJ2PEl
+cKejIAnYUi0SHHDkYKOJMo0W5H8fHcRk893vR0kllO+hP0e1Gur02TsdEF7wbIPc
++VV/7bMg9VxhQh9+ESeYgQXn/n3NSniUkO5aCjyzGy6Ex2/9dc+Xg6C08YJDcerI
+660enEe0NaI50N1W65bbxdl3d6vHT9CGteXYiIuj0I5CG7CwnU2WV42we/UwYSq/
+6DfU93y5LSBZuOif8iLpGXfgE7TCAeY3H+WBAu43+gWz6xNKtbF0RMmT2VcCAQID
+ggEGAAKCAQEAiSriGd9pQZ6W0sMHV6jdJYcyb2kmwJhvYT+AJc2BNZAEp5uSDhlf
+MRhSeDzz09/M2nGYOKeX8fhagGagz+ElqwnY8SVwp6MgCdhSLRIccORgo4kyjRbk
+fx8dxGTz3e9HSSWU76E/R7Ua6vTZOx0QXvBsg9z5VX/tsyD1XGFCH34RJ5iBBef+
+fc1KeJSQ7loKPLMbLoTHb/11z5eDoLTxgkNx6sjrrR6cR7Q1ojnQ3VbrltvF2Xd3
+q8dP0Ia15diIi6PQjkIbsLCdTZZXjbB79TBhKr/oN9T3fLktIFm46J/yIukZd+AT
+tMIB5jcf5YEC7jf6BbPrE0q1sXREyZPZVg==
+-----END PUBLIC KEY-----
+
+PublicKey=BOB_dh2048_badpub_toosmall
+-----BEGIN PUBLIC KEY-----
+MIIBITCCARcGCSqGSIb3DQEDATCCAQgCggEBAIkq4hnfaUGeltLDB1eo3SWHMm9p
+JsCYb2E/gCXNgTWQBKebkg4ZXzEYUng889PfzNpxmDinl/H4WoBmoM/hJasJ2PEl
+cKejIAnYUi0SHHDkYKOJMo0W5H8fHcRk893vR0kllO+hP0e1Gur02TsdEF7wbIPc
++VV/7bMg9VxhQh9+ESeYgQXn/n3NSniUkO5aCjyzGy6Ex2/9dc+Xg6C08YJDcerI
+660enEe0NaI50N1W65bbxdl3d6vHT9CGteXYiIuj0I5CG7CwnU2WV42we/UwYSq/
+6DfU93y5LSBZuOif8iLpGXfgE7TCAeY3H+WBAu43+gWz6xNKtbF0RMmT2VcCAQID
+BAACAQE=
+-----END PUBLIC KEY-----
+
+# DH Alice with Bob peer
+Availablein = default
+Derive=ALICE_dh2048
+PeerKeyValidate=BOB_dh2048_pub
+SharedSecret=28f1f890a14899b5fb600dc43ef28cdc065535bc5ee2b3e08ebb53f7ee93618f3471c0696bce289c3839ae6ced374a799c61d76cb9c60ecdc3bd75ac4ed9f060fcfa972a5ce899ff17120ce70e35d720797a62d2b3d724b9d21b9dc0f4f4ec1cbf4730d57955dc1be53210e3d10ed3e78a96914e0a201e0cc0d75744e2d8f6ed8a301bca465d4d1a518a5cda8219bdf562796842bd6a839369b5cacc77e44a9ac8475d50df6d7bddfb661241c566acd025642bc6b1bbcecb1c1e5a1429c9df552ad6a39194074b21f4e890bd79e934150850561932fee3c44ccf0e8bcd22df2f9cafad2e2f19364344fe588523a9da8545081c2118fd6b8c0e12ede6b9f5f258
+
+# DH Bob with Alice peer
+Availablein = default
+Derive=BOB_dh2048
+PeerKeyValidate=ALICE_dh2048_pub
+SharedSecret=28f1f890a14899b5fb600dc43ef28cdc065535bc5ee2b3e08ebb53f7ee93618f3471c0696bce289c3839ae6ced374a799c61d76cb9c60ecdc3bd75ac4ed9f060fcfa972a5ce899ff17120ce70e35d720797a62d2b3d724b9d21b9dc0f4f4ec1cbf4730d57955dc1be53210e3d10ed3e78a96914e0a201e0cc0d75744e2d8f6ed8a301bca465d4d1a518a5cda8219bdf562796842bd6a839369b5cacc77e44a9ac8475d50df6d7bddfb661241c566acd025642bc6b1bbcecb1c1e5a1429c9df552ad6a39194074b21f4e890bd79e934150850561932fee3c44ccf0e8bcd22df2f9cafad2e2f19364344fe588523a9da8545081c2118fd6b8c0e12ede6b9f5f258
+
+# DH Alice with Bob peer - mismatching domain parameters
+Availablein = default
+Derive=BOB_dh2048
+PeerKeyValidate=BOB_dh2048_different_pg_pub
+Result = DERIVE_SET_PEER_ERROR
+
+# DH Alice with Bob peer - pub > p - 2
+Availablein = default
+Derive=ALICE_dh2048
+PeerKeyValidate=BOB_dh2048_badpub_toolarge
+Result = DERIVE_SET_PEER_ERROR
+
+# DH Alice with Bob peer - pub < 2 should fail
+Availablein = default
+Derive=ALICE_dh2048
+PeerKeyValidate=BOB_dh2048_badpub_toosmall
+Result = DERIVE_SET_PEER_ERROR
diff --git a/test/recipes/30-test_evp_data/evppkey_dsa.txt b/test/recipes/30-test_evp_data/evppkey_dsa.txt
new file mode 100644
index 000000000000..debd62bca84c
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_dsa.txt
@@ -0,0 +1,355 @@
+#
+# Copyright 2001-2023 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 are ignored.
+
+
+# Private keys used for PKEY operations.
+
+# DSA key
+PrivateKey=DSA-1024
+-----BEGIN PRIVATE KEY-----
+MIIBSwIBADCCASwGByqGSM44BAEwggEfAoGBAO0SwRpkAeM21qSM5ch4CLEHpFk4
+19R5ve1UUr421y3HEUURsrVpxYKvyx8aOBQC/akz95cYxNN3y1JnJJMxPklhdJrJ
+f/WDYPxjMk8BqNJmeZtLuCVLKGwQomuo7ZkG955WRyLHYEdQ6uC7K2QTPKpW6psF
+YFaDYjAjSEKk2MFxAhUAykDkKLZdhPWzwM8/qYaE31VmWz0CgYEApNVF8oFK41ez
+Qci9XbSZJHyPB+3jML1YQkHxiiInaIz6GEFtjUbIUEYA/ovY+6ECNI1aIDHTd7CH
+woS0mp33oQYs43nt29B6UwbtMmbzCOQ9vGGwWVho+JtHyyPWrDuLmkvLtoQPaxYt
+6PVa3gncr2v3njcVuH+EQ6DuFR93zksEFgIUbyv6pqH+UQurernJn/7sUm2U2i0=
+-----END PRIVATE KEY-----
+
+PublicKey=DSA-1024-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIIBtzCCASwGByqGSM44BAEwggEfAoGBAO0SwRpkAeM21qSM5ch4CLEHpFk419R5
+ve1UUr421y3HEUURsrVpxYKvyx8aOBQC/akz95cYxNN3y1JnJJMxPklhdJrJf/WD
+YPxjMk8BqNJmeZtLuCVLKGwQomuo7ZkG955WRyLHYEdQ6uC7K2QTPKpW6psFYFaD
+YjAjSEKk2MFxAhUAykDkKLZdhPWzwM8/qYaE31VmWz0CgYEApNVF8oFK41ezQci9
+XbSZJHyPB+3jML1YQkHxiiInaIz6GEFtjUbIUEYA/ovY+6ECNI1aIDHTd7CHwoS0
+mp33oQYs43nt29B6UwbtMmbzCOQ9vGGwWVho+JtHyyPWrDuLmkvLtoQPaxYt6PVa
+3gncr2v3njcVuH+EQ6DuFR93zksDgYQAAoGAVXFwJ5wTuF0rQ6AWfTitm3/zUeRW
+SeKFo+Rg0GrBI+Wg2Tj+Yn6V8Xs+Xyjim1wsd2P6/BlJzCEr4nHjP9JcBICqM3vI
+9zCaT/vYsLD7/T7rF9AF/jV+LnkGJCzLbDYF04IkhtLNHOQob+Uc8PWB78e/1Lc4
+SzJw2oHciIOt+UU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = DSA-1024:DSA-1024-PUBLIC
+
+Title = DSA tests
+
+Verify = DSA-1024
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 302d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d87
+
+Verify = DSA-1024-PUBLIC
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 302d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d87
+
+# Modified signature
+Verify = DSA-1024-PUBLIC
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 302d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d88
+Result = VERIFY_ERROR
+
+# Digest too short
+Verify = DSA-1024-PUBLIC
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF123"
+Output = 302d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d87
+Result = VERIFY_ERROR
+
+# Digest too long
+Verify = DSA-1024-PUBLIC
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF12345"
+Output = 302d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d87
+Result = VERIFY_ERROR
+
+# Garbage after signature
+Verify = DSA-1024-PUBLIC
+Input = "0123456789ABCDEF1234"
+Output = 302d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d8700
+Result = VERIFY_ERROR
+
+# Invalid tag
+Verify = DSA-1024-PUBLIC
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 312d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d87
+Result = VERIFY_ERROR
+
+# BER signature
+Verify = DSA-1024-PUBLIC
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 3080021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d870000
+Result = VERIFY_ERROR
+
+Title = Test keypair mismatches
+
+PrivateKey = DSA-1024-BIS
+-----BEGIN PRIVATE KEY-----
+MIIBSwIBADCCASwGByqGSM44BAEwggEfAoGBAO0SwRpkAeM21qSM5ch4CLEHpFk419R5ve1UUr42
+1y3HEUURsrVpxYKvyx8aOBQC/akz95cYxNN3y1JnJJMxPklhdJrJf/WDYPxjMk8BqNJmeZtLuCVL
+KGwQomuo7ZkG955WRyLHYEdQ6uC7K2QTPKpW6psFYFaDYjAjSEKk2MFxAhUAykDkKLZdhPWzwM8/
+qYaE31VmWz0CgYEApNVF8oFK41ezQci9XbSZJHyPB+3jML1YQkHxiiInaIz6GEFtjUbIUEYA/ovY
++6ECNI1aIDHTd7CHwoS0mp33oQYs43nt29B6UwbtMmbzCOQ9vGGwWVho+JtHyyPWrDuLmkvLtoQP
+axYt6PVa3gncr2v3njcVuH+EQ6DuFR93zksEFgIUFQFshP0hj7i6ClXkSPYoFW6KrIY=
+-----END PRIVATE KEY-----
+
+PublicKey = DSA-1024-BIS-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIIBtzCCASwGByqGSM44BAEwggEfAoGBAO0SwRpkAeM21qSM5ch4CLEHpFk419R5
+ve1UUr421y3HEUURsrVpxYKvyx8aOBQC/akz95cYxNN3y1JnJJMxPklhdJrJf/WD
+YPxjMk8BqNJmeZtLuCVLKGwQomuo7ZkG955WRyLHYEdQ6uC7K2QTPKpW6psFYFaD
+YjAjSEKk2MFxAhUAykDkKLZdhPWzwM8/qYaE31VmWz0CgYEApNVF8oFK41ezQci9
+XbSZJHyPB+3jML1YQkHxiiInaIz6GEFtjUbIUEYA/ovY+6ECNI1aIDHTd7CHwoS0
+mp33oQYs43nt29B6UwbtMmbzCOQ9vGGwWVho+JtHyyPWrDuLmkvLtoQPaxYt6PVa
+3gncr2v3njcVuH+EQ6DuFR93zksDgYQAAoGAdZCPYZ9WvtKW7dFvbEjl0HHBxLNX
+8kV1/FAxsDrQd+c8mWdruNzcmwsZJklJuTK9czKnXgLmkRHR20I4oNrJ/bptV8lV
+iDvJBJlmZ1aGh6yLIHzYBbgbgia3lBrFlO5qUxNmbNeiC+HIqUvlVBmQOLN6+Xjn
+Q4A0wDK8dmF2dFI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = DSA-1024-BIS:DSA-1024-BIS-PUBLIC
+
+PrivPubKeyPair = DSA-1024:DSA-1024-BIS-PUBLIC
+Result = KEYPAIR_MISMATCH
+
+PrivPubKeyPair = DSA-1024-BIS:DSA-1024-PUBLIC
+Result = KEYPAIR_MISMATCH
+
+
+PrivateKey = DSA-1024-FIPS186-2
+-----BEGIN PRIVATE KEY-----
+MIIBWgIBADCCATMGByqGSM44BAEwggEmAoGBALRSnNcjMPIl4tekT5D3AgqsK042
+Ar1dGKeJCmWrSngAELtSH0yZCwsbl7wLEgG2lfusbn5sdtbpFioKInohZruRhzwC
+59GRXjAFD0QPhVE/qy6Oto+8WIHAa/RiEIkxRfTiAe9Ach56k9lZYONDUHDqH38u
+UIfjoUN+jlzoJcWbAh0A6TfgjmB+CxvxG/2pz8OAXXfNP8/JLfYvolE/fwKBgH7l
+jLeoOofKc+rwO2Fha8nuFddXRSePZKzC7mRQsPXwfvX5V6msU2xizjdPIsqVu7qA
+Bcc1YMd7/5C3vaKuS21DxBOs7nAHbO9ZZtGlpUAnJwM/P09nMb3yG6tR9LF3AQmu
+Kr2KShQB0FlSgvcCDTX7g8eJ/UuIWo6wX4hSdHDhBB4CHAdVVg1m5ikOICUBo37Y
+/TqkTaCFsMDwcDc20Jg=
+-----END PRIVATE KEY-----
+
+PrivateKey = DSA-2048-160
+-----BEGIN PRIVATE KEY-----
+MIICTAIBADCCAi0GByqGSM44BAEwggIgAoIBAQCOypCJyAO7uNZSPSNGalSkyjQC
+xdFVIGfMJKjEXzJnH4g3ts0UqUyO8126REDJEXDeMi22841xsSvzz0ZJeT5YvMLW
+t1BtSTiYg2QOar1qEGJunHgjsWKJbVzIqWNw60ZP7pNKmlR7PKa3WDaPhdeVP8zJ
+PEMeUHOSprO5Jk/Hjr8jxV0znIIixb9L9PgJAwxiM7rkRHS2Oz1FCYDmNmuFhQDh
+Cb3wY9t1AcAHZ05uZ4PtNjdRPwFLPeVdckPj0ntApvOrH18xPWBmwcVeHAH1SV2k
+7LPK7wILHVzcKm74ubX/s1wKysyyXyKM+oCgG9jvfh09VQJcHTHaVS643ohZAhUA
+uQMLDZqMQbh9TYlm9xYCEBaeVs0CggEAcum3PgEQIRfukytMQ7gKMyfxHqhMmJ6t
+RolRhgMrSfl99dmMoqJV+sdSjYvZSkwl71N1Y4Al8GcJB1SzTSb8qGRzM+43pa4k
+SyQZ62WA8w5gaIQJ85JUrWiT8C6SgwAbruS5BVHRbQD6FxZwro9+s8uPnLesMTQX
+p4maNSQaqYX7tqGl6Z7Wo0PsEwuDRvBlI6sl97gl4q3FQPByCq/64UW/eF6Illo1
+dpfbiWCszsp8oczXCEuP+2Y67WUIj3LjFA7WM/R8K4SfdMQ/VXY/cyRhlUqQl8Qe
+ndBVKe0IeSdqvMcLNoUip7DGcOXW2ogZl+wgeP4xL3pdo8uS025kjwQWAhRfutAE
+r/MlbdGMvcA7l0XmzzY85w==
+-----END PRIVATE KEY-----
+
+PrivateKey = DSA-2048-224
+-----BEGIN PRIVATE KEY-----
+MIICXAIBADCCAjUGByqGSM44BAEwggIoAoIBAQDVjuiHR3XA9yAjToNQOmdg2rN9
+0A4mIEV3XGy1nqaKZXdavdXcsAGLmttZ/gfiHi0JNh3rxj4dbvcaN+K0IWXq6hAY
+6ZOvDZ0FH5DRH63Ecd8fWY/BMDr178sOINkPG8hLRmYcrAp/4woMBPxkEtQBfl4R
+POus+OYS4sJpl8wEgfy0HhLXkkN4YQhBf57NvQ7+LcwaErDcNLRguI3TRzflhNEh
+ieBfYtIIgISIi0yMsxOINopuHeAmcANLjyUqkQ44xcJ0kM+OoAKFq/XukkTj++iP
+9Okh+bmNEo23RtM4qqScZyUIX4bPyynbkMdu01ZG+q8PEhyoxGpHkMT6kYHBAh0A
+/rbeX9L8STLoLIsLUMbdPVLWvnLyLooSygawvwKCAQAhscCNIY/bPZ6DRULS8i4G
+0f+9chMR+C5tNykaTzCUxRjObOWKu0z1JyViiafcAoV8j1e64xRxA4a8g9RrKilK
+KztCJfwIJCeHIjHi/dvIR0z1SDeNNVpFacAT+DF5G+sMqS8Mael0MnEcR2sNkw+1
+MVIO5tinKWAFM087hsSmKs/uIvdVexH2ptKKehxTFjs8ySfAMiMfqhaC2JgPCFL1
+jUpAIvs4oCx2yZKvq+TzJOq8LRHG3qSHa0BcNVPKfVkmVJRg4ETzza1/e14Re1BR
+si7RL7EtHuFiFjYiWTGueT+e0jdBS8CoafD1V/I7NPqVmGc5NeaRv4n+ESpDSX+z
+BB4CHBN2hfQxLXg+t/MNcza5M0WoAWna5JzQBAtDzIM=
+-----END PRIVATE KEY-----
+
+PrivateKey = DSA-2048-256
+-----BEGIN PRIVATE KEY-----
+MIICZQIBADCCAjoGByqGSM44BAEwggItAoIBAQDAuDj/d/t7n4013h18atbOYg4Q
+oWZPLmA7MvFABqrlv9lfa0dRGhOHyXClHh2bsNMwk3txKjTaTwjM9v80xe47y2lv
+34DPEKaWf+6HGcsu313kjIoAITO61HK0TJXjm0BV2uzZQFmvVHwEZmt7uGFcTc4t
+Vl71Z+MjhlMqpOmXIL/OBJkMOE1CXF/b6oKyXJvyZRpE4oxS+8B1l7d/N0B1XhQl
+EMToFwmvsKfeeK24wDfxasfbNbQ7Zih/5HylWtNXbvldnOf6cfPPPM6FO7HVI9R5
+llQKxFWujVrX0IOXu89xT8t+/ICKJtLKD5HzmeH1Y6LO+Qnsu5tW8IhnDHKLAiEA
+prlohsCeURHqsKcqtMElD7vg+Ati8OKgdo79/ktz9bMCggEBALC9Awm0lClgvefU
+inwV6gQppvAQttX7fUGjnrmuAXjw/pm4MBuzkR1P7vm2IY51+SopK+ZvgXXXnWGQ
+m8y3DCuoSnfE6Y+NpAfL9iJxy5W+ByvW75GW7/Lj5hR/igKKuYhfGYT/2eIGtdQ2
+C2tcWTcV7Gfk60WSw9eLUtKCUjBHaoFHFMo3MWH64Fc0xVEQ1DLgEC5Y3TLmiLBx
+VOGpp5ZFeAc52n/W4afbBcQ5ifGFPwgcS7+WdnUUs7awuCCldh74kz58kdTJAztZ
+ZjjK728BYEE4P6itUNtr3jgNzhqwTBFvOwWCQA//a7vpyqtHMzDmpcVuDx6f4iP3
+aghyxFAEIgIgK1Ct6iRtcq01mdt4EGRrkiAHBr5zTcAgbv5ZaU99pmQ=
+-----END PRIVATE KEY-----
+
+PrivateKey = DSA-3072-256
+-----BEGIN PRIVATE KEY-----
+MIIDZgIBADCCAzoGByqGSM44BAEwggMtAoIBgQCvf6pPUvu2J7j4aaGcpEkfjX7e
+DvM5qlpuf2GDwbWFQpkxeRFtmd5EFbgNvRMsLyfTA3KWd4k2nFug2Uf5kFJ0rOcI
+nToVcrPjg8onD43Rcknvmu5grsjDvCFMmWFu361LbWxZCgGCwSUv4P647kS5ccaD
+k0o4f+a8YWLahop/HowqoN8/TvC/izdN0WvRYKeegJcBzaaBKWsBS8ucu0jEh5S3
+PCAQRFoKNRPjUzjIhycIlpdmI5BG72SkvSSMef9wvGl72FN2t3v5dbWjl7QgghU5
+0BB/RlueApJgrFhadE/0ZJKSukPMbL9a0L1xZl01iJYraa76rn5weVkU8sW7BN7C
+oHTovusrls/AtEBKXKC47rNnfSc9VwfwdNBuvs33Ga872575bjOunQiXQRxuuqjq
+u3MyixPygIy+MmjhjPhnpYnb+1sytpoN1UOTi9QMHWLp2ExYvurda6n4nCjbJBcB
+DvWPyapslDP+yT/3aEH0ctqu/QMk3rPxBAzVytUCIQD/CwBYEWtyd6IoiqcWVMT5
+4k1cKfg5ZbNu7mG3iS+iSwKCAYEAm1QNpGrOS2orCVUP80KQFTQwg37tlynJjXev
+ORdBgDXpIjFcdEgsEx9cHzlOywBDQWxHLXRukvgQbx7dCq2RgEM6Fo6ngbhj87zw
+dLFdXxj/TU0fJPhj3VIF2qu5vG1SZRu4zKNZ6uoJP7R4/7o/shHOoTyCOigRew4X
+A2P9eIxpEv/KXRznxjG1IcAQJcPYBDwjE555WNHL0jzzKEyxyxmkm9ThEpleW7HU
+ij78B5O45V/AHVF7oB/L+Aqmbc2dZy8EtShsMKqSMdFWjV0BnuzsPt9KmKT+rbj6
+MpqgdaKPEsYVD4Nk6EWEyYbWmELtS9jKH5E4Z/pqFGeamsiD5Sn0ap7SGa81BtA+
+s7FMG851b2jtRw0RB4+boGx0Lt43WbytfmW445i4h/NMB0nE/pzjIIjD3URdNoaS
+2G2eZcW/aC9bKkOoAr2USSlgylPCkz2a/CAx7i925HOZ2dw9HJ940vkAoxP+nMQv
+kMzKKeM5QVgAeRwjDqRk9uCWD7VyBCMCIQDxycQrIIL4PxAoPIM7//v8mL7A3YSW
+o3mO5AXuBuEe2g==
+-----END PRIVATE KEY-----
+
+PrivateKey = DSA-3072-224
+-----BEGIN PRIVATE KEY-----
+MIIDXAIBADCCAzUGByqGSM44BAEwggMoAoIBgQDEY9anVQ8qwdz77IQx1bSmu5MI
+mP7pf9IUXbH5fZFrCjlDu34w2WvsdDRrM2/isvKb/wj+sgg5dx5bWRn/+xolwu8l
+upmD6KMJ07t9SSla155tkvS/8hU5AD8elH9vV+HlTPKRHNF1X3jFJRVay64O+vFX
+WRe7t3yBFv/VqkhnYwm5aymMK6/TXR1znJzrMNgU1Ao3unhjaFnRsldHVHjXrA4y
+rJRMsa4r5BCPQNK8iXKabAw19oiRbRvqs3YfzoR1HqZ3LGO1/p9ECoc/QW0uI1Za
+LYQli1aNtNmtYhwKvy7O8IzjrbjkDRgl/TtDmtfpDnM6FkQebgU0OxQXTOwZgtEV
+a7VY+EwG1q+Qab7uvuO2YJ7Mk2JKmu4u0Gz7tq5N+hEN4P5UMC/MUw6ftLCGN6l6
+ycEJHMgGzDsAKEJW6NcXneY3vXpdaRGnuxyUKI86wQd3Qg1Mm3H1gqtkd48owIJm
+RtE/u91T4OJOcwVm2FxDgmMsb0LwqAELL+I9RH8CHQDNAddLZ4ovSccoD+s06I+X
+d+GzJ8cNcbn4H1TVAoIBgAmwgz0CjHaacOiXcQ4GLw0kN2IpXKAXYma1vDlDcesT
+lY8dcGsX2UjuLnfegMRkb5FMGZ8TDjgDG4vLo2p1ybt7S7s0hn56bju5HZLSOmAp
+nu5M15iZxDzgVvhRkB0EG/aw5i6iq22JUA5SUAGYLemcZIuukIDu6vhTeK2125qa
+q+Uc0/kyPMOf0zABo+I2wWNmZgdq26F147Yrf06VY3ekxcER1vAUfVBHxeYPfdZR
+N8ztdzYTPtCSxyIWATUxYvWxsaxqNckjXLZp5t9L72Zc8k5swsBDIAabhJTiQrRS
+hkhD0UOCf2pUNFcHIxLqYskOycEjtmKrAYbrHZDRw5CzP5ABaDYwqgxi2ZSt/tv4
+iYUhX4tRicGeAWLM7D3LxG+P/6q7dJ/Gjjx8gmbcBJKcjVDGp/b8xn1WY83gbNEJ
+HOAqdXyxgnQL+E581jk13LixzoOboyrhryFqVoMarZOXEAQKToG24tj5DO7LmviW
+8hzXTwJmVlKblGJxVmqDuQQeAhx6PjOtN4DxhxZdoX8+lU7C6CWYvyQbJOER0XVn
+-----END PRIVATE KEY-----
+
+PrivateKey = DSA-4096-256
+-----BEGIN PRIVATE KEY-----
+MIIEZQIBADCCBDoGByqGSM44BAEwggQtAoICAQD9m23nz0MOXi3GFvuv+Qpva9Ms
+oZ/oPS1sYy/JtxvBtEjWv0b0wxtLAiASkBBhaqC1Qy+9O7dC7s5wze/0v/mAxFtF
+X18KhMWSRtgiGOWzg6Nyog+Dus224Qa6wfYC1+lcGG/TmDLSmukBrVzd/71pSOkT
+6O3v5hx1JOdJzzNPt1kjq31B1/2h9OXnARg1JDCLHP6fxRkWj2ThwU+FwlKTpo+d
+MsC0Xl93t1lBOiS5VsHLSZIeqsInEj3bWBTT6C5q0huZKBQ9iT3SwAq/gG8KL9DV
+MGSWQwAQdUpQWcv6JDwLb6h6QhHmzclDCF8JAGRzLA9kDWbmYPXQuVxj1//LuJba
+fMe6tLWBuAMeQNFuB/pro2dszbo8GDOYEaOfogG86x9hfgBoPufU0oHlfhj3nhO8
+cLYwvhRkN/ZZyTM5/1aHQNvp6S+sIGD1WFKPxMZuTH2k01I0s8ESGrlWpnPgwNQx
+iwx+dlXLFZNdDOiS+Mb9JPSuJ/xDagHmQzG0gxYiLfWQKjAMol4niB6mGIm0gEYq
+Rw9OEHE/ghzBMbr6M+BLDm7PDac5y1a3L6l9e0Yq9h+4bwqTqZIpNIsRS4A0lmXd
+IXs54dQmTwF75cMWjOAOYwxua97I4Ci3nkJWiozBugoGrKTSkeNX21uMfVJKidjd
+j79Vlz79qnMSB42sqwIhAPwv8XkIkZvnDKTTowvUy8L6V/SxF7KZFtvX5Mx4KJt7
+AoICAQDdWpUSEpBLdFiu6MzqdWnRv9pt8BEu0sC9Z+xE3VrpDKqqnK2Rhtye0yIk
+4fofLl9VF2J4P6hzDcCu8QEDj0K3dWQR+BU1WMBHMCTHrTM51XAqbjR1H3ZYWVxC
+WgWrVGQkcD55TrM2RYBKH6Wa7K9HeFVJcdHrh0AZb4lXIBZHf0+71cOfZH8w1ufl
+yKzYNMGY9+eoU3Pm0D5gBO/69uWDrK21SJMW3Fpqm4rgeHtNhR4oI6cagyo2+XfD
+e+ivCk5XKCXgImKpKDMuKhJy0K4vZFjVHeIWl2mf1zyhmCxuAcGEf9dRVKtnQQGS
+8uJGddKuda67J9vecN78H2nhsZcU9DRPzgjW+tUTwSX3ycW/hEA65kN5PUSpj8Ax
+7gZN5Jn8bGNlCgLItHQMscGDo0L47+bN8G8JguZr+hpNFKmYMpbQ15yHaRU7DR36
+Zx91SEQ1o8Kn8mNT37RBYk/vZij9P8QRnn3pen9Ha5CBNs6/8RERaUJ84kSCV0iL
+4/ed3syr8bek8a2rN6qhLZSKfYwLdiu0VaBsmJrOoE7xNgJ+f0g7aTptO1NOiwtY
+ftiDvljQGG1QhAv9i1uSmz6EPYn3VCJPadxX8mlPmpGCewk8ycOV1IFgCK86cdTl
+bDfJavyQoCWW6EF260m2+rWtl6ILGhhWIbDN5KfXBhrOPvxvHQQiAiBZM1KxUjGw
+h2C/91Z0b0Xg4QYNOtVUbfqQTJQAqEpaRg==
+-----END PRIVATE KEY-----
+
+Title = FIPS Tests (using different key sizes and digests)
+
+# Test sign with a 2048 bit key with N == 160 is not allowed in fips mode
+Availablein = fips
+DigestSign = SHA256
+Key = DSA-2048-160
+Input = "Hello"
+Output = 00
+Result = DIGESTSIGNINIT_ERROR
+
+# Test sign with a 2048 bit key with N == 224 is allowed in fips mode
+DigestSign = SHA256
+Key = DSA-2048-224
+Input = "Hello"
+Output = 00
+Result = SIGNATURE_MISMATCH
+
+# Test sign with a 2048 bit key with N == 256 is allowed in fips mode
+DigestSign = SHA256
+Key = DSA-2048-256
+Input = "Hello"
+Result = SIGNATURE_MISMATCH
+
+# Test sign with a 3072 bit key with N == 256 is allowed in fips mode
+DigestSign = SHA256
+Key = DSA-3072-256
+Input = "Hello"
+Result = SIGNATURE_MISMATCH
+
+# Test sign with a 2048 bit SHA3 is allowed in fips mode
+DigestSign = SHA3-224
+Key = DSA-2048-256
+Input = "Hello"
+Result = SIGNATURE_MISMATCH
+
+# Test verify with a 1024 bit key is allowed in fips mode
+DigestVerify = SHA256
+Key = DSA-1024
+Input = "Hello "
+Output = 302c02142e32c8a5b0bd19b2ba33fd9c78aad3729dcb1b9e02142c006f7726a9d6833d414865b95167ea5f4f7713
+
+# Test verify with SHA1 is allowed in fips mode
+DigestVerify = SHA1
+Key = DSA-1024
+Input = "Hello "
+Output = 302c0214602d21ed37e46051bb3d06cc002adddeb4cdb3bd02144f39f75587b286588862d06366b2f29bddaf8cf6
+
+# Test verify with a 2048/160 bit key is allowed in fips mode
+FIPSversion = >3.1.1
+DigestVerify = SHA256
+Key = DSA-2048-160
+Input = "Hello"
+Output = 302e021500a51ca7f70ae206f221dc9b805bb04bfc07d6e448021500b16e45f9dac8aff04e115f96c00f4237d0fced41
+
+Title = Fips Negative Tests (using different key sizes and digests)
+
+# Test sign with a 1024 bit key is not allowed in fips mode
+Availablein = fips
+DigestSign = SHA256
+Securitycheck = 1
+Key = DSA-1024-FIPS186-2
+Input = "Hello"
+Result = DIGESTSIGNINIT_ERROR
+
+# Test sign with SHA1 is not allowed in fips mode
+Availablein = fips
+DigestSign = SHA1
+Securitycheck = 1
+Key = DSA-2048
+Input = "Hello"
+Result = DIGESTSIGNINIT_ERROR
+
+# Test sign with a 3072 bit key with N == 224 is not allowed in fips mode
+Availablein = fips
+DigestSign = SHA256
+Securitycheck = 1
+Key = DSA-3072-224
+Input = "Hello"
+Result = DIGESTSIGNINIT_ERROR
+
+# Test sign with a 4096 bit key is not allowed in fips mode
+Availablein = fips
+DigestSign = SHA256
+Securitycheck = 1
+Key = DSA-4096-256
+Input = "Hello"
+Result = DIGESTSIGNINIT_ERROR
diff --git a/test/recipes/30-test_evp_data/evppkey_ecc.txt b/test/recipes/30-test_evp_data/evppkey_ecc.txt
new file mode 100644
index 000000000000..9ac1a4eb9eb0
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_ecc.txt
@@ -0,0 +1,4501 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title=c2pnb163v1 curve tests
+
+PrivateKey=ALICE_cf_c2pnb163v1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAEEHDAaAgEBBBUD1JfG8cLNP9418YW+hVhriqH6O5Y=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2pnb163v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAEDLAAEBXgoOgVlWTLQnrQZXgQuSBcIS3bQAlXQ+yJhS03B
+4G8rKQXbrc0mvWsF
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2pnb163v1:ALICE_cf_c2pnb163v1_PUB
+
+PrivateKey=BOB_cf_c2pnb163v1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAEEHDAaAgEBBBUAc3EaoMmMORTzQhMkhPIXY+/jUSI=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2pnb163v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAEDLAAEBn9J0jo39aFVZqhBsAKZ6bViAu6zBC8WaFGExnpZ
+KuBh8tP8VSTHPCHF
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2pnb163v1:BOB_cf_c2pnb163v1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb163v1
+PeerKey=BOB_cf_c2pnb163v1_PUB
+SharedSecret=065dd38fb6de7f394778e1bf65d840a2c0e7219acd
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb163v1
+PeerKey=ALICE_cf_c2pnb163v1_PUB
+SharedSecret=065dd38fb6de7f394778e1bf65d840a2c0e7219acd
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb163v1
+PeerKey=BOB_cf_c2pnb163v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=066fc46e8cc4327634dd127748020f2de6aab67585
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb163v1
+PeerKey=ALICE_cf_c2pnb163v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=066fc46e8cc4327634dd127748020f2de6aab67585
+
+PublicKey=MALICE_cf_c2pnb163v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAEDLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8JxepS05nN
+/piKdhDD3dDKXUih
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2pnb163v1
+PeerKey=MALICE_cf_c2pnb163v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2pnb163v1
+PeerKey=MALICE_cf_c2pnb163v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2pnb163v2 curve tests
+
+PrivateKey=ALICE_cf_c2pnb163v2
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAIEHDAaAgEBBBUA4KFv7c1dygtVbdp/g2z2TqLAHkI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2pnb163v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAIDLAAEAVnlL7lMBaASwCIJaf9x2LgNPVmEAb43huHQlo3Q
+4PzawHXQoYm/qgDd
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2pnb163v2:ALICE_cf_c2pnb163v2_PUB
+
+PrivateKey=BOB_cf_c2pnb163v2
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAIEHDAaAgEBBBUCEdYqClRWIl2m+X34e+DB2iZSxmQ=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2pnb163v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAIDLAAEAVWNIKn7/WMfzuNnd5ws9J0DI2CfBkEJizZHAFqy
+kBF3juAQuARgxuT6
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2pnb163v2:BOB_cf_c2pnb163v2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb163v2
+PeerKey=BOB_cf_c2pnb163v2_PUB
+SharedSecret=0078ebb986d4f9b0aa0bc4af99e82c2bd24130f3f4
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb163v2
+PeerKey=ALICE_cf_c2pnb163v2_PUB
+SharedSecret=0078ebb986d4f9b0aa0bc4af99e82c2bd24130f3f4
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb163v2
+PeerKey=BOB_cf_c2pnb163v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=069a80bcd45987fd1c874cd9dc5453207a09b61d41
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb163v2
+PeerKey=ALICE_cf_c2pnb163v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=069a80bcd45987fd1c874cd9dc5453207a09b61d41
+
+PublicKey=MALICE_cf_c2pnb163v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAIDLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAABuVBl1V5uysY
+n6HANPEoMoK+7Sv0
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2pnb163v2
+PeerKey=MALICE_cf_c2pnb163v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2pnb163v2
+PeerKey=MALICE_cf_c2pnb163v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2pnb163v3 curve tests
+
+PrivateKey=ALICE_cf_c2pnb163v3
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAMEHDAaAgEBBBUBItB0y/QeJ+cCh9yoHf0zqLVyMZc=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2pnb163v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAMDLAAEBx1HRyjuBMjt+vlbWaQbKOpNvWKFAslzEbPv6MpK
+YnObLnq34LRuWznb
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2pnb163v3:ALICE_cf_c2pnb163v3_PUB
+
+PrivateKey=BOB_cf_c2pnb163v3
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAMEHDAaAgEBBBUAXVHUHeP8Ioz7IqXOWbjaUXEHE5M=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2pnb163v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAMDLAAEAqXF7rsAZ40Z1PT4TeeC45RKTxP4AJBAdfuknJ/J
+DZnBLhxBwtqnfUpA
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2pnb163v3:BOB_cf_c2pnb163v3_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb163v3
+PeerKey=BOB_cf_c2pnb163v3_PUB
+SharedSecret=07fd2ffe9b18973c51caeadbc2154b97a9a0390be9
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb163v3
+PeerKey=ALICE_cf_c2pnb163v3_PUB
+SharedSecret=07fd2ffe9b18973c51caeadbc2154b97a9a0390be9
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb163v3
+PeerKey=BOB_cf_c2pnb163v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=06f7daf1c963594e1a13f9f17b62aaab2934872c16
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb163v3
+PeerKey=ALICE_cf_c2pnb163v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=06f7daf1c963594e1a13f9f17b62aaab2934872c16
+
+PublicKey=MALICE_cf_c2pnb163v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAMDLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7jRlUg9oaLK
+LwAuHF8g5Y0JjJnI
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2pnb163v3
+PeerKey=MALICE_cf_c2pnb163v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2pnb163v3
+PeerKey=MALICE_cf_c2pnb163v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2pnb176v1 curve tests
+
+PrivateKey=ALICE_cf_c2pnb176v1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAQEHDAaAgEBBBUAaZ1jV1jM9meV5iiNGPU/WMSfWOM=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2pnb176v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEUwEwYHKoZIzj0CAQYIKoZIzj0DAAQDLgAEPjME7IV6Tuz2P++wIT60hRxTkk0M0PNgvqYcUoCI
+iw3girDLhNzOu3IQ8Ac=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2pnb176v1:ALICE_cf_c2pnb176v1_PUB
+
+PrivateKey=BOB_cf_c2pnb176v1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAQEHDAaAgEBBBUAreyYbcF+ONIf64KmeSzV82OI/50=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2pnb176v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEUwEwYHKoZIzj0CAQYIKoZIzj0DAAQDLgAEpJn1IDmFj5LceLGfY2wlhI1VHq5vJ+qNIAOXVZhX
+uMtp6pzy63rCEK53bgs=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2pnb176v1:BOB_cf_c2pnb176v1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb176v1
+PeerKey=BOB_cf_c2pnb176v1_PUB
+SharedSecret=3a8021848ee0b2c1c377404267a515225781c181e6ab
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb176v1
+PeerKey=ALICE_cf_c2pnb176v1_PUB
+SharedSecret=3a8021848ee0b2c1c377404267a515225781c181e6ab
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb176v1
+PeerKey=BOB_cf_c2pnb176v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=b06cdc633b56e813d63326c69d2cfa335352279540ac
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb176v1
+PeerKey=ALICE_cf_c2pnb176v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=b06cdc633b56e813d63326c69d2cfa335352279540ac
+
+PublicKey=MALICE_cf_c2pnb176v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEUwEwYHKoZIzj0CAQYIKoZIzj0DAAQDLgAE4ePri2opCoAUJIUQnaQlvDaxZd9bsdKnjWSvh+FL
+zXV3l5j8K3pow+GJBE4=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2pnb176v1
+PeerKey=MALICE_cf_c2pnb176v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2pnb176v1
+PeerKey=MALICE_cf_c2pnb176v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2pnb208w1 curve tests
+
+PrivateKey=ALICE_cf_c2pnb208w1
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAoEIDAeAgEBBBkAiENroXMYNbK/7DQQwCpbXk00gnVd
+XF2k
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2pnb208w1_PUB
+-----BEGIN PUBLIC KEY-----
+ME0wEwYHKoZIzj0CAQYIKoZIzj0DAAoDNgAEL+IHOL2IfeLRiE6Wqsc0Frqjq7t/JnBmhN1lMB9Y
+Yj3+Btcne4CPWf8KvfGjAdMs6JKP4A==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2pnb208w1:ALICE_cf_c2pnb208w1_PUB
+
+PrivateKey=BOB_cf_c2pnb208w1
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAoEIDAeAgEBBBkAY1GZLynO/IDWwOOjEWUE7k+I/MkP
+cJot
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2pnb208w1_PUB
+-----BEGIN PUBLIC KEY-----
+ME0wEwYHKoZIzj0CAQYIKoZIzj0DAAoDNgAENBvdzCDOIvu9zo7reJq1ummhR+0jaDc+EoSlW984
+cl9FTi/JJznwC+RNgwVfJ1WKJun1YA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2pnb208w1:BOB_cf_c2pnb208w1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb208w1
+PeerKey=BOB_cf_c2pnb208w1_PUB
+SharedSecret=ba32bf80c0f7ab53cb083f267a902a1ad6396eb283237fad91cd
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb208w1
+PeerKey=ALICE_cf_c2pnb208w1_PUB
+SharedSecret=ba32bf80c0f7ab53cb083f267a902a1ad6396eb283237fad91cd
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb208w1
+PeerKey=BOB_cf_c2pnb208w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=f09f5fc8bf20677558bc65939bf1b7fbbbe2579702729304258b
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb208w1
+PeerKey=ALICE_cf_c2pnb208w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=f09f5fc8bf20677558bc65939bf1b7fbbbe2579702729304258b
+
+PublicKey=MALICE_cf_c2pnb208w1_PUB
+-----BEGIN PUBLIC KEY-----
+ME0wEwYHKoZIzj0CAQYIKoZIzj0DAAoDNgAEfuWB9pBZQin+VnmqgYVpbUpKxSQsnXxNqiDtVwqJ
+oPkHxRWnu5e7qI2idMcqaKDeeniUaA==
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2pnb208w1
+PeerKey=MALICE_cf_c2pnb208w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2pnb208w1
+PeerKey=MALICE_cf_c2pnb208w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2pnb272w1 curve tests
+
+PrivateKey=ALICE_cf_c2pnb272w1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwEwYHKoZIzj0CAQYIKoZIzj0DABAEKDAmAgEBBCEA0SoHwKAgKb7WQ+s0w1iNBemDZ3+f
+StHU67fpP7YoF8U=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2pnb272w1_PUB
+-----BEGIN PUBLIC KEY-----
+MF0wEwYHKoZIzj0CAQYIKoZIzj0DABADRgAE0IH60bGi46FDzEprGZ8EBK5uMMcVke/txeBRNGHQ
+DzG68r3EMLZkOfE1+g04MN7HgY7zt3jMYb8ImyLRmvqR2abjs6c=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2pnb272w1:ALICE_cf_c2pnb272w1_PUB
+
+PrivateKey=BOB_cf_c2pnb272w1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwEwYHKoZIzj0CAQYIKoZIzj0DABAEKDAmAgEBBCEAFqB5GbPJ4d+X7ye7m05l/OirDqfn
+MOsOJ6xObBph3zQ=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2pnb272w1_PUB
+-----BEGIN PUBLIC KEY-----
+MF0wEwYHKoZIzj0CAQYIKoZIzj0DABADRgAEIeIkcMHAuOgvHt2Wp52vVe0DYPNnUX79t/mLSx03
+cUlDmcxL7vIXdx9hB4OmQBYbm+YLDNfTFGAIlDfr2tELpVVPWPo=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2pnb272w1:BOB_cf_c2pnb272w1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb272w1
+PeerKey=BOB_cf_c2pnb272w1_PUB
+SharedSecret=cfebd65006520a40f081d8940edf0ebb8e54491ba1499d9f3c63deecee84ddc07142
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb272w1
+PeerKey=ALICE_cf_c2pnb272w1_PUB
+SharedSecret=cfebd65006520a40f081d8940edf0ebb8e54491ba1499d9f3c63deecee84ddc07142
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb272w1
+PeerKey=BOB_cf_c2pnb272w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=756fc20b27352ac74e5135359c63d375d2732c6d02f25cd526155bac0882a9211dd4
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb272w1
+PeerKey=ALICE_cf_c2pnb272w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=756fc20b27352ac74e5135359c63d375d2732c6d02f25cd526155bac0882a9211dd4
+
+PublicKey=MALICE_cf_c2pnb272w1_PUB
+-----BEGIN PUBLIC KEY-----
+MF0wEwYHKoZIzj0CAQYIKoZIzj0DABADRgAEvID3AM7qzpKDnOLFY00+E7EKZz/vS/pXgsUA3bWN
+oJF8ElXFXv59s/SykQBCTHPqzmUbVmrXmtD44Kt1wUBRJfuwxy4=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2pnb272w1
+PeerKey=MALICE_cf_c2pnb272w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2pnb272w1
+PeerKey=MALICE_cf_c2pnb272w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2pnb304w1 curve tests
+
+PrivateKey=ALICE_cf_c2pnb304w1
+-----BEGIN PRIVATE KEY-----
+MEYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DABEELDAqAgEBBCUAqJxh50ZIUXOJ1HE3cVkech9OTTPJ
+8jy/v5cFcO0X6dykHgnZ
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2pnb304w1_PUB
+-----BEGIN PUBLIC KEY-----
+MGUwEwYHKoZIzj0CAQYIKoZIzj0DABEDTgAEvoaqRX6qiNQiFH1BhgLCPTpYszoRhmlLirkvlw/Q
+iXBlfQ7U4g+iRR/kmu2RlwwOHgNNL+mWcvLkFfS8Kr4jzv1EY1Ecx96n21l0YQ==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2pnb304w1:ALICE_cf_c2pnb304w1_PUB
+
+PrivateKey=BOB_cf_c2pnb304w1
+-----BEGIN PRIVATE KEY-----
+MEYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DABEELDAqAgEBBCUAOScHepX+IwqC8TjyAJI1bkR3cYYt
+X9BbqYM9GQfVNSLHntTg
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2pnb304w1_PUB
+-----BEGIN PUBLIC KEY-----
+MGUwEwYHKoZIzj0CAQYIKoZIzj0DABEDTgAEYuAq/6Yw5HxMeMohlWmwl+ZK4ZQucfr1tWDKwhDb
+kAOUO2P/Q/H+uelM3VVwxeu6A1kaX7K0UZpNa96NRBwI4aevc+vOxCgYkGt9BA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2pnb304w1:BOB_cf_c2pnb304w1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb304w1
+PeerKey=BOB_cf_c2pnb304w1_PUB
+SharedSecret=bfddf9f923210e8231a702e3a1c987cf27661de1bc243c1890e437d67d9f49c6ccfadc035d9d
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb304w1
+PeerKey=ALICE_cf_c2pnb304w1_PUB
+SharedSecret=bfddf9f923210e8231a702e3a1c987cf27661de1bc243c1890e437d67d9f49c6ccfadc035d9d
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb304w1
+PeerKey=BOB_cf_c2pnb304w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0c7afb3143f93ef2166c05437a1757a62c916ff1751c6d456dd7f2356dcbc75df48015eb5ce8
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb304w1
+PeerKey=ALICE_cf_c2pnb304w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0c7afb3143f93ef2166c05437a1757a62c916ff1751c6d456dd7f2356dcbc75df48015eb5ce8
+
+PublicKey=MALICE_cf_c2pnb304w1_PUB
+-----BEGIN PUBLIC KEY-----
+MGUwEwYHKoZIzj0CAQYIKoZIzj0DABEDTgAEBZ5FuthQt0mxTJ8NQWN2J37kYT8ySD893IXEmXYP
+fMTr+CSNkf/sfF/13GEdVGnHmBgCH61sPWG69RgzdjRPprZFZxXjubIWYkp0DQ==
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2pnb304w1
+PeerKey=MALICE_cf_c2pnb304w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2pnb304w1
+PeerKey=MALICE_cf_c2pnb304w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2pnb368w1 curve tests
+
+PrivateKey=ALICE_cf_c2pnb368w1
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEwYHKoZIzj0CAQYIKoZIzj0DABMENDAyAgEBBC0AXeSTXsHb2PEH12tZL8w2q6evA2mi
+KfLLIa1c29BTmM//oWdKpqeuvwMIBto=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2pnb368w1_PUB
+-----BEGIN PUBLIC KEY-----
+MHUwEwYHKoZIzj0CAQYIKoZIzj0DABMDXgAEmEBXcvMgnHwJW7wAKM4cqboco6zF01J9ntUwoACI
+euvf3cpPXBvxUawJXfO9FwFRQabDRagGP99Walidd2JW8nWDWZgZMKj15Wh+4bp2dZHc2tPIIHHd
+3makbwQ=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2pnb368w1:ALICE_cf_c2pnb368w1_PUB
+
+PrivateKey=BOB_cf_c2pnb368w1
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEwYHKoZIzj0CAQYIKoZIzj0DABMENDAyAgEBBC0Aq1R9M/mCMbJMj6VBUpBkS4HXywEz
+Qun6d6uXgyU4LZRszA7Dz9+eKbXEMsk=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2pnb368w1_PUB
+-----BEGIN PUBLIC KEY-----
+MHUwEwYHKoZIzj0CAQYIKoZIzj0DABMDXgAEJOSnsaXA9wb5p8CGLPvYI47Yf3IdZSbWQ3Sn6G2v
+At+zYlpzGax1oJ1CW8fGA0Gu0RnvAfDeW9vgrtzshH1Vy/Ni6a7LPho99PtUP2nzUBnv+hfhFSra
+gqfRaOs=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2pnb368w1:BOB_cf_c2pnb368w1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb368w1
+PeerKey=BOB_cf_c2pnb368w1_PUB
+SharedSecret=008d20ede3961be3b01051d6fdae63db43865664804d432293a2edb13dcc8be0fe5b0c655297a84b9067a29c2a6f
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb368w1
+PeerKey=ALICE_cf_c2pnb368w1_PUB
+SharedSecret=008d20ede3961be3b01051d6fdae63db43865664804d432293a2edb13dcc8be0fe5b0c655297a84b9067a29c2a6f
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2pnb368w1
+PeerKey=BOB_cf_c2pnb368w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=df32ddeeffa029aeadabad000a79c3154a0ddd0aeacf4e3de426f5c10096eff8912038c64d4c899131dcd4df2561
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2pnb368w1
+PeerKey=ALICE_cf_c2pnb368w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=df32ddeeffa029aeadabad000a79c3154a0ddd0aeacf4e3de426f5c10096eff8912038c64d4c899131dcd4df2561
+
+PublicKey=MALICE_cf_c2pnb368w1_PUB
+-----BEGIN PUBLIC KEY-----
+MHUwEwYHKoZIzj0CAQYIKoZIzj0DABMDXgAEWDn/U9rymClM/a0Q1mawHjQjvpxSehRWstSE+2Sd
+ubcZowJ+rw5LsEZteQyeVrCpKYUiIBmIVuFb2LDjtNLIJD1lr8C+vdco24ciLS9RzF/Dc9X+tcIj
+726e1BE=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2pnb368w1
+PeerKey=MALICE_cf_c2pnb368w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2pnb368w1
+PeerKey=MALICE_cf_c2pnb368w1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2tnb191v1 curve tests
+
+PrivateKey=ALICE_cf_c2tnb191v1
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAUEHzAdAgEBBBgXyG7A4BvSmjKEl3aU+FQUt02p9U7x
+Jk4=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2tnb191v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAUDMgAEG9iuZmnhz2H/YQKmVUaO//fm7hvV+CP5c2iszpR3
+7lRimqLWHPyvKgcP+PRCIUom
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2tnb191v1:ALICE_cf_c2tnb191v1_PUB
+
+PrivateKey=BOB_cf_c2tnb191v1
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAUEHzAdAgEBBBg4+2hv9x9HxFy0c2c1XESDdgOamHu0
+MTU=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2tnb191v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAUDMgAEdO/4ii8gi8eQfBrv3XmsOETwIfT8OIpBW/kUoHD+
+adqalcB6SIWOfoJReDLcpxAD
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2tnb191v1:BOB_cf_c2tnb191v1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb191v1
+PeerKey=BOB_cf_c2tnb191v1_PUB
+SharedSecret=2ee8a85151c397600984285307c14f0ea0e4c2071d753a99
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb191v1
+PeerKey=ALICE_cf_c2tnb191v1_PUB
+SharedSecret=2ee8a85151c397600984285307c14f0ea0e4c2071d753a99
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb191v1
+PeerKey=BOB_cf_c2tnb191v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=334051dfd62237e69e280ce2fab979bd77260f8dfe4df989
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb191v1
+PeerKey=ALICE_cf_c2tnb191v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=334051dfd62237e69e280ce2fab979bd77260f8dfe4df989
+
+PublicKey=MALICE_cf_c2tnb191v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAUDMgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcPEwZ1wj
+iNoFyzyANZl8IDB0fF1RmZD6
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2tnb191v1
+PeerKey=MALICE_cf_c2tnb191v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2tnb191v1
+PeerKey=MALICE_cf_c2tnb191v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2tnb191v2 curve tests
+
+PrivateKey=ALICE_cf_c2tnb191v2
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAYEHzAdAgEBBBgQZHIQIPrAsbJqq4ZX3JdMrZAkaIGP
+jbo=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2tnb191v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAYDMgAEAyQdwZYRIiv7O4/WRLDKJ249TM8dr2Y+Oz8rSxCI
+UVvJT/Jv9m462J6Iz1XOohhP
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2tnb191v2:ALICE_cf_c2tnb191v2_PUB
+
+PrivateKey=BOB_cf_c2tnb191v2
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAYEHzAdAgEBBBgThhW6d5QDaqM8yhm16q6Pu/VFBpf7
+wcs=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2tnb191v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAYDMgAEBVkB4O6fFvGzMHv4BF51muFA0npOGKoOdKbIIMQY
+JBIoz1RNNXTcgdpguLcrvcPJ
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2tnb191v2:BOB_cf_c2tnb191v2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb191v2
+PeerKey=BOB_cf_c2tnb191v2_PUB
+SharedSecret=711f90cb2aaea65e939065cbd1896affe1d490ba14571400
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb191v2
+PeerKey=ALICE_cf_c2tnb191v2_PUB
+SharedSecret=711f90cb2aaea65e939065cbd1896affe1d490ba14571400
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb191v2
+PeerKey=BOB_cf_c2tnb191v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1740db5b771fa2889d3ec7c1ba8eeffa7741f0ee62433dce
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb191v2
+PeerKey=ALICE_cf_c2tnb191v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1740db5b771fa2889d3ec7c1ba8eeffa7741f0ee62433dce
+
+PublicKey=MALICE_cf_c2tnb191v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAYDMgAEA3yPV6Ilx7PU7dWIDzgKzFV07LNsn1EhMyLQaa5U
+2vqunpWef+/CaO2pFBcwwW+x
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2tnb191v2
+PeerKey=MALICE_cf_c2tnb191v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2tnb191v2
+PeerKey=MALICE_cf_c2tnb191v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2tnb191v3 curve tests
+
+PrivateKey=ALICE_cf_c2tnb191v3
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAcEHzAdAgEBBBgTPjf06B01Jq59qU1iczNuA29WfW+b
+erU=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2tnb191v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAcDMgAEL4NGEUX2CXY18MyoH1inKq5kde9RGr25ODm/0BEX
+HWsGvDE2HC+6pL2BMl3MRCty
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2tnb191v3:ALICE_cf_c2tnb191v3_PUB
+
+PrivateKey=BOB_cf_c2tnb191v3
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAcEHzAdAgEBBBgUC2bC465JTXYLUaaET/r5n7X85gRH
+iSQ=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2tnb191v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAcDMgAEPKekNkT9mQ8KRCTR2RwCFkhNvsjL+/mLHYzbMrYe
+QFIb5QwXAdbg2tEOl7yj9qkk
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2tnb191v3:BOB_cf_c2tnb191v3_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb191v3
+PeerKey=BOB_cf_c2tnb191v3_PUB
+SharedSecret=196200f7ea06c43c35516b995cf4a4dd4151dbd0ed998561
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb191v3
+PeerKey=ALICE_cf_c2tnb191v3_PUB
+SharedSecret=196200f7ea06c43c35516b995cf4a4dd4151dbd0ed998561
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb191v3
+PeerKey=BOB_cf_c2tnb191v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=311939377670a8a1ed1ee17f9dd182167da00c5a19e2e109
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb191v3
+PeerKey=ALICE_cf_c2tnb191v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=311939377670a8a1ed1ee17f9dd182167da00c5a19e2e109
+
+PublicKey=MALICE_cf_c2tnb191v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAcDMgAESvPjWlLnANK2j38hHZ0uqueaniovkhwwdJZjrmUk
+n5vQBTxUzkIkMjL33v6Lr3z7
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2tnb191v3
+PeerKey=MALICE_cf_c2tnb191v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2tnb191v3
+PeerKey=MALICE_cf_c2tnb191v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2tnb239v1 curve tests
+
+PrivateKey=ALICE_cf_c2tnb239v1
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAsEJTAjAgEBBB4fMJDhCEiuEf/RF6oGjHVcNwN+wCYG
+rJMnJLIXiCI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2tnb239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAsDPgAEUgG/uMWy4k0R/kbVJEapF6r5ik4Q9WPsDXAd0856
+dVL8PvBXgixk2tKfyY1xUVebcEVlgdZP1pN1Xyvi
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2tnb239v1:ALICE_cf_c2tnb239v1_PUB
+
+PrivateKey=BOB_cf_c2tnb239v1
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAsEJTAjAgEBBB4JLDwVJQw3+00FiZBDWFErd7PXnchH
+sfpZeV3i5FM=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2tnb239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAsDPgAEcwKt31cWaoFUd7QxYSdwgMDOqEhjPbD3Z9AfR3tc
+G77/MY5z1oQegqImBog645vtPWI8lZd1zcl6QYRS
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2tnb239v1:BOB_cf_c2tnb239v1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb239v1
+PeerKey=BOB_cf_c2tnb239v1_PUB
+SharedSecret=413ea943cdf40c45795c77aeea7099b81cc42566067924d1fdbae42ddf99
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb239v1
+PeerKey=ALICE_cf_c2tnb239v1_PUB
+SharedSecret=413ea943cdf40c45795c77aeea7099b81cc42566067924d1fdbae42ddf99
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb239v1
+PeerKey=BOB_cf_c2tnb239v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1f1e5a6084492e895c35d76a5d2b4a3fafbd96c4b2230ea71cc1c711fa38
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb239v1
+PeerKey=ALICE_cf_c2tnb239v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1f1e5a6084492e895c35d76a5d2b4a3fafbd96c4b2230ea71cc1c711fa38
+
+PublicKey=MALICE_cf_c2tnb239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAsDPgAEJFn89FF7xaa5m+XGxWKFwCH+Mu4rbxwi6lvhuEuT
+Itl/OAosALFh8xpt+N5gmKtUdhpjyok2udC4B/mY
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2tnb239v1
+PeerKey=MALICE_cf_c2tnb239v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2tnb239v1
+PeerKey=MALICE_cf_c2tnb239v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2tnb239v2 curve tests
+
+PrivateKey=ALICE_cf_c2tnb239v2
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAwEJTAjAgEBBB4KU4YKdzFOkl6M1biHkxtVGD2uNXr6
+GbEcp4PbJKU=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2tnb239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAwDPgAEKzpycflUrsyqVV/+fzvC2+AuX3r0b0Syn8acvn78
+VnKA9mZKwPLWhnMJcLyzarIzc/6/UcfYGNmTyUlG
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2tnb239v2:ALICE_cf_c2tnb239v2_PUB
+
+PrivateKey=BOB_cf_c2tnb239v2
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAwEJTAjAgEBBB4HZQLKGKBpIKiyTq6XYZWQNph1oGP+
+JLwCwn7lYx0=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2tnb239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAwDPgAETPSkhMs3JW3BG66FSfCov76JKdcRiBhMCW453Wku
+N7yBxBmWjeclHhnXIzfc4qM4qf9n3KzMSXejPVYg
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2tnb239v2:BOB_cf_c2tnb239v2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb239v2
+PeerKey=BOB_cf_c2tnb239v2_PUB
+SharedSecret=2e738f14795b2e19ee791c1bf30c5e462ca6c6ed0ec5c6c6402d0730cf4c
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb239v2
+PeerKey=ALICE_cf_c2tnb239v2_PUB
+SharedSecret=2e738f14795b2e19ee791c1bf30c5e462ca6c6ed0ec5c6c6402d0730cf4c
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb239v2
+PeerKey=BOB_cf_c2tnb239v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=7662d8b94d3f0d20eb8e112ca8b7d5699d81f35902df5b77561977df3946
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb239v2
+PeerKey=ALICE_cf_c2tnb239v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=7662d8b94d3f0d20eb8e112ca8b7d5699d81f35902df5b77561977df3946
+
+PublicKey=MALICE_cf_c2tnb239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAwDPgAES8fLc5mtVI0HqgKRJ7mN8MU1B0FBkiim6jCHYJf3
+JYUX3Gn3Ai11cHie+nVb3z51jSkpDQENHESTv5K2
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2tnb239v2
+PeerKey=MALICE_cf_c2tnb239v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2tnb239v2
+PeerKey=MALICE_cf_c2tnb239v2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2tnb239v3 curve tests
+
+PrivateKey=ALICE_cf_c2tnb239v3
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAA0EJTAjAgEBBB4BZZXtcMw5GrpgHJLx4D8z7M6ocWdv
+rDl2fV9ObC8=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2tnb239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAA0DPgAEOu2HIAUX+r6IbRlrPUJUBDL814dR++maVAAkUIjD
+H33ewqcI9ZLtpvuR8P8hgRNUTXlh1GWgrB6F21Eo
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2tnb239v3:ALICE_cf_c2tnb239v3_PUB
+
+PrivateKey=BOB_cf_c2tnb239v3
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAA0EJTAjAgEBBB4BDxw3SA54y6uYOW1n4yZaUK22J9ef
+XG3HcQX+4i0=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2tnb239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAA0DPgAEVaEi76wyzlpzkkSElf4SmGZ7kf1ghHMP82HkGk7K
+BC10zUyppoSOAr0eX4pHAkDUF1m/KGoJa7QcJJww
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2tnb239v3:BOB_cf_c2tnb239v3_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb239v3
+PeerKey=BOB_cf_c2tnb239v3_PUB
+SharedSecret=6a756022ec2ea89b0fa757824909707102acf3b7da39dc625c6252eb4c48
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb239v3
+PeerKey=ALICE_cf_c2tnb239v3_PUB
+SharedSecret=6a756022ec2ea89b0fa757824909707102acf3b7da39dc625c6252eb4c48
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb239v3
+PeerKey=BOB_cf_c2tnb239v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=3240e19dd8c290e5e1749df60ad0166dd9dbfad645e518b4948e14f774ce
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb239v3
+PeerKey=ALICE_cf_c2tnb239v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=3240e19dd8c290e5e1749df60ad0166dd9dbfad645e518b4948e14f774ce
+
+PublicKey=MALICE_cf_c2tnb239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAA0DPgAELe/znC87/2ucKX7mXUUyiUvg67slWRdH+WHDct9d
+LcXDyB342ZN1nm0NCAmBMcLjohX0Zza0ji3YNjT1
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2tnb239v3
+PeerKey=MALICE_cf_c2tnb239v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2tnb239v3
+PeerKey=MALICE_cf_c2tnb239v3_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2tnb359v1 curve tests
+
+PrivateKey=ALICE_cf_c2tnb359v1
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEwYHKoZIzj0CAQYIKoZIzj0DABIENDAyAgEBBC0Afea/a1NrRf6rRRr/UDsI559ADTFP
+Bd5HaS33laTZkCdNLITw1UUrESUIOiU=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2tnb359v1_PUB
+-----BEGIN PUBLIC KEY-----
+MHMwEwYHKoZIzj0CAQYIKoZIzj0DABIDXAAEZMJU3QF9UJJp2m6qyCnhPuVlPKPHtav3DCgH27SY
+RLMN7C4rRmqiJakD11QtOforOgbPW5r/v7t4TUWIlq8jV7kapJNtxQtg/S87L0NQGgHBq/lnJL8x
+fN3Y
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2tnb359v1:ALICE_cf_c2tnb359v1_PUB
+
+PrivateKey=BOB_cf_c2tnb359v1
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEwYHKoZIzj0CAQYIKoZIzj0DABIENDAyAgEBBC0Aaw+yr7Atz8CXjLsbI5msXLqxFoMr
+esHVfU53i6ucCsnPTWSDWSb5CePtI9g=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2tnb359v1_PUB
+-----BEGIN PUBLIC KEY-----
+MHMwEwYHKoZIzj0CAQYIKoZIzj0DABIDXAAEUQde0iyDHbsFJZ459d4zUhsrJYAkqndmEBRwSlg5
+ZNX8SSS79Zf2HsQl+LWIZyzeYzoHobKXufChw9/H4ThS58VwV5/0hoE929PIgJ1MSEqr5LvJXi+b
+R8fe
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2tnb359v1:BOB_cf_c2tnb359v1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb359v1
+PeerKey=BOB_cf_c2tnb359v1_PUB
+SharedSecret=623a71122b5acad467d40d97ef8d8fd46541d8c41d7de6ba181c24e2714c1bc35bcefcf089af69c406eedecc12
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb359v1
+PeerKey=ALICE_cf_c2tnb359v1_PUB
+SharedSecret=623a71122b5acad467d40d97ef8d8fd46541d8c41d7de6ba181c24e2714c1bc35bcefcf089af69c406eedecc12
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb359v1
+PeerKey=BOB_cf_c2tnb359v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1c9c4cea3251dace2cb763eabf60f106cc1b03f2491e6f20d7bea78e062f8f14c4e82e4d43786eefa44d33f7e9
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb359v1
+PeerKey=ALICE_cf_c2tnb359v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1c9c4cea3251dace2cb763eabf60f106cc1b03f2491e6f20d7bea78e062f8f14c4e82e4d43786eefa44d33f7e9
+
+PublicKey=MALICE_cf_c2tnb359v1_PUB
+-----BEGIN PUBLIC KEY-----
+MHMwEwYHKoZIzj0CAQYIKoZIzj0DABIDXAAEDW1DxeJfyPPnxX4WiLM5ZnX9AypqqeKj7FTHxanl
+++A6FgVFjUCatt8Sr4xnSc3zDE0kh6f/wS9SbtCAi74i8HAX5SJiccCMPRkw6kBuHZgiG8EmFJ53
+OEQw
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2tnb359v1
+PeerKey=MALICE_cf_c2tnb359v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2tnb359v1
+PeerKey=MALICE_cf_c2tnb359v1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=c2tnb431r1 curve tests
+
+PrivateKey=ALICE_cf_c2tnb431r1
+-----BEGIN PRIVATE KEY-----
+MFYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DABQEPDA6AgEBBDUAG1rgUnH3+PSxqlzt9+QTWv7PrYxz
+Qgqj5A2Mqi0LbdixVDciVSSgrU6keVu72oCmHVP+OQ==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_c2tnb431r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGFMBMGByqGSM49AgEGCCqGSM49AwAUA24ABFcQEDic9pYxtxStk/oBxafqyUux1kvEOOwR4FxJ
+pGEMTh8B+YfkWuq+IDY5zSqNKtg7cRlAFX2dlHhRSvNxrN3DJCrhe/TQq8SIYawcqEQnM39F8hHM
+7VQJLEsBpJ/WUonwMJXknjgfONP7GA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_c2tnb431r1:ALICE_cf_c2tnb431r1_PUB
+
+PrivateKey=BOB_cf_c2tnb431r1
+-----BEGIN PRIVATE KEY-----
+MFYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DABQEPDA6AgEBBDUBOsZrpI6hTgImR8DBhKOOrh2SvcT/
+VwmzYnbuCRrtr/zwIQcqKKI1ztlrl+kxFxJfk5L7UQ==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_c2tnb431r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGFMBMGByqGSM49AgEGCCqGSM49AwAUA24ABHeTG6xjbsKKxn4oYQt9qUM9LrSPZfY11XsBmROc
+fb9kEbBLU+QixSbYZOrqPasesDV9dApDXF+w6EfIeNyJEK5Lk+aXamrn7fRMUAQ2m7+Odp87GgA+
+8Cg6YpgbK314SK5STziqoZwzEISJ9w==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_c2tnb431r1:BOB_cf_c2tnb431r1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb431r1
+PeerKey=BOB_cf_c2tnb431r1_PUB
+SharedSecret=1c9a64de0b706f0e562d5144ceeb4806ce8782865dc0e3fab694967955bd40afc79bf9241ef4a173fbf9baeac0d416392fb13bdc6978
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb431r1
+PeerKey=ALICE_cf_c2tnb431r1_PUB
+SharedSecret=1c9a64de0b706f0e562d5144ceeb4806ce8782865dc0e3fab694967955bd40afc79bf9241ef4a173fbf9baeac0d416392fb13bdc6978
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_c2tnb431r1
+PeerKey=BOB_cf_c2tnb431r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=059e2ea2d0d8bad5005a9401196ebb1633377c7ded8ec58a0398cf1d0f42ea82614f68cb836ecfc33612b8a705b4c3b7b4ed12eb6e22
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_c2tnb431r1
+PeerKey=ALICE_cf_c2tnb431r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=059e2ea2d0d8bad5005a9401196ebb1633377c7ded8ec58a0398cf1d0f42ea82614f68cb836ecfc33612b8a705b4c3b7b4ed12eb6e22
+
+PublicKey=MALICE_cf_c2tnb431r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGFMBMGByqGSM49AgEGCCqGSM49AwAUA24ABA/cHJ1bNJ2l3GcrT67WEoU0w/Ajy28T9X4XLv8a
+5EpnkembeFlRG8ILplDcZimE8kjNQWynAk+NbJRsIU/XLzcm7VXkkqEkx/yCQ/TOcbeB3qrpzWYr
+F3Cls9x60wuFYNc9d6eIe4B+puz9IQ==
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_c2tnb431r1
+PeerKey=MALICE_cf_c2tnb431r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_c2tnb431r1
+PeerKey=MALICE_cf_c2tnb431r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=prime192v2 curve tests
+
+PrivateKey=ALICE_cf_prime192v2
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQIEHzAdAgEBBBh6rcgPFDmA2P4CGSrC7ii9DAjepljX
+sMM=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_prime192v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQIDMgAET6wOPoDU3BeU7VKozsGEvDeJs//9Z/aNEcbbLQ0d
+g5IzsS/XMJzifjCJZgNsb7mi
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_prime192v2:ALICE_cf_prime192v2_PUB
+
+PrivateKey=BOB_cf_prime192v2
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQIEHzAdAgEBBBja4R9iZuiu95XEuM1558ArTwNnAl7M
+xqI=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_prime192v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQIDMgAEcgWNAOL4pZCmouZl+be+rC0yLAJkm2YuPWs+FX2u
+Y6OU1aHkkspZTC1uUVWjchy5
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_prime192v2:BOB_cf_prime192v2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_prime192v2
+PeerKey=BOB_cf_prime192v2_PUB
+SharedSecret=ae2ff9f1f9f24e6d281dc78993d9f71913e1e105965000a1
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_prime192v2
+PeerKey=ALICE_cf_prime192v2_PUB
+SharedSecret=ae2ff9f1f9f24e6d281dc78993d9f71913e1e105965000a1
+
+Title=prime192v3 curve tests
+
+PrivateKey=ALICE_cf_prime192v3
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQMEHzAdAgEBBBij5blPQRKM1/9c57YDZXIIue80MDqx
+Igw=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_prime192v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE1+mLeiT/jjHO71IL/C/ZcnF6+yj9FV6eqfuPdHAi
+MsDRFCB6/h8TcCUFuospu5l0
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_prime192v3:ALICE_cf_prime192v3_PUB
+
+PrivateKey=BOB_cf_prime192v3
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQMEHzAdAgEBBBhgFP4fFLtm/yk5tsosBUBKTg370FOu
+92g=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_prime192v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAEv35bOz0xqLeJqpZdZ8LyiUgsJMBEtN2UMJm8blX2
+vMWAgEeLhzar86BUlS7dZwS7
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_prime192v3:BOB_cf_prime192v3_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_prime192v3
+PeerKey=BOB_cf_prime192v3_PUB
+SharedSecret=9e562ecbe29c510a13b0daea822ec864c2a9684d2a382812
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_prime192v3
+PeerKey=ALICE_cf_prime192v3_PUB
+SharedSecret=9e562ecbe29c510a13b0daea822ec864c2a9684d2a382812
+
+Title=prime239v1 curve tests
+
+PrivateKey=ALICE_cf_prime239v1
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQQEJTAjAgEBBB5nH2mt/GUx+I/60NlcuQlrdupDXwMY
+SF/w+SUTNqY=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_prime239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQQDPgAEMqQLCgDR9njkq9QELuOu+J/9YGcxJHULdvxHImLW
+RXqBUM5Xea+Qk2SKIpWcogxr2zFeQyeLj2bQysuo
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_prime239v1:ALICE_cf_prime239v1_PUB
+
+PrivateKey=BOB_cf_prime239v1
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQQEJTAjAgEBBB5RZgYV+j+zhwI12zCzB+mdPofMx0kB
+jZ9gplgXxzk=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_prime239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQQDPgAEBR5m/kllh025oO4GvqALkjRliVv7q4x8ro/tkYnT
+L2U4hkT6xUeRu9QC4KOz7KUVH+nBbQASL4XQg/3C
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_prime239v1:BOB_cf_prime239v1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_prime239v1
+PeerKey=BOB_cf_prime239v1_PUB
+SharedSecret=196b1d0206d4f87c313c266bfb12c90dd1f1f64b89bfc16518086b9801b8
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_prime239v1
+PeerKey=ALICE_cf_prime239v1_PUB
+SharedSecret=196b1d0206d4f87c313c266bfb12c90dd1f1f64b89bfc16518086b9801b8
+
+Title=prime239v2 curve tests
+
+PrivateKey=ALICE_cf_prime239v2
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQUEJTAjAgEBBB5uLCwofbD2Suc/iIRhXJsPqZ4me87h
++tFevsg1pPE=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_prime239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQUDPgAETH77jXHBItV673gTNK/HTFldo4VxPiscbideUgKd
+CWjdVsXebgAZbqQwf0h9QWcIgM7K7ODdW5kCuZ1G
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_prime239v2:ALICE_cf_prime239v2_PUB
+
+PrivateKey=BOB_cf_prime239v2
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQUEJTAjAgEBBB5nlF+ouuw3Ljkgy3pHkCN+/JoHAMyT
+KY0wlvJdo/w=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_prime239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQUDPgAELUQYo0UH8HbK/RMD2jVphBU+iB4OTOfvaaTlHq06
+dcJ8a9a+mAQKhb1OZVEq1n4nQsgRiI1rPxugVERM
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_prime239v2:BOB_cf_prime239v2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_prime239v2
+PeerKey=BOB_cf_prime239v2_PUB
+SharedSecret=1d18ca6366bceba3c1477daa0e08202088abcf14fc2b8fbf98ba95858fcf
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_prime239v2
+PeerKey=ALICE_cf_prime239v2_PUB
+SharedSecret=1d18ca6366bceba3c1477daa0e08202088abcf14fc2b8fbf98ba95858fcf
+
+Title=prime239v3 curve tests
+
+PrivateKey=ALICE_cf_prime239v3
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQYEJTAjAgEBBB5J95JRhBDTzlyAPAfu6T2Pb9vK0NKu
+Y9AfhA2G+mI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_prime239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQYDPgAEZEN48pqgLF08Yjj/8BLM2Nr5ZhpYxyBurbzKRuBb
+GLpzZLteJN9vZjN7ouNpMxLVUFQxTOwpsvUw86Lk
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_prime239v3:ALICE_cf_prime239v3_PUB
+
+PrivateKey=BOB_cf_prime239v3
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQYEJTAjAgEBBB5Z7rMZML1xeryBaYYr+QuMiQxHT44I
+d9bmIVvG3dM=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_prime239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQYDPgAEQUWKqohAPAoIYEZOvc1QwSlcB+gW0febaNxGOy47
+LaIWdsNM7GJVP9xpdSwm/L+Dip/oH4E59f3SiOAd
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_prime239v3:BOB_cf_prime239v3_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_prime239v3
+PeerKey=BOB_cf_prime239v3_PUB
+SharedSecret=4dcc2c67c5993162ed71ebb33077bbb85395b0d3eec2311aa404e45901a0
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_prime239v3
+PeerKey=ALICE_cf_prime239v3_PUB
+SharedSecret=4dcc2c67c5993162ed71ebb33077bbb85395b0d3eec2311aa404e45901a0
+
+Title=secp112r1 curve tests
+
+PrivateKey=ALICE_cf_secp112r1
+-----BEGIN PRIVATE KEY-----
+MCwCAQAwEAYHKoZIzj0CAQYFK4EEAAYEFTATAgEBBA6zC5ZzEIIdvY4Q7DS0uw==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp112r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAYDHgAEYIawfjH3qRrJJWwuG3Ys5ZhDJsmdWi34aHgKAA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp112r1:ALICE_cf_secp112r1_PUB
+
+PrivateKey=BOB_cf_secp112r1
+-----BEGIN PRIVATE KEY-----
+MCwCAQAwEAYHKoZIzj0CAQYFK4EEAAYEFTATAgEBBA6WPx4YxBODium8BKDw0A==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp112r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAYDHgAEchh3iQdPN1rrzrpdZRQ95G6tvdwEBQ+gfu1tvA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp112r1:BOB_cf_secp112r1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp112r1
+PeerKey=BOB_cf_secp112r1_PUB
+SharedSecret=4ddd1d504b444d4be67ba2e4610a
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp112r1
+PeerKey=ALICE_cf_secp112r1_PUB
+SharedSecret=4ddd1d504b444d4be67ba2e4610a
+
+Title=secp112r2 curve tests
+
+PrivateKey=ALICE_cf_secp112r2
+-----BEGIN PRIVATE KEY-----
+MCwCAQAwEAYHKoZIzj0CAQYFK4EEAAcEFTATAgEBBA4GcvIx97ePHdAiH0Z9EA==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp112r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAcDHgAEHK9uNAILHBmPZdKKh79/nzYE0HbvC//rA7i0Xw==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp112r2:ALICE_cf_secp112r2_PUB
+
+PrivateKey=BOB_cf_secp112r2
+-----BEGIN PRIVATE KEY-----
+MCwCAQAwEAYHKoZIzj0CAQYFK4EEAAcEFTATAgEBBA4WzpVFZnZv9mvtpnYNyw==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp112r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAcDHgAEUzBLNQupqUpGgmZl9JVjKBpwusl52rFg5OVFJA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp112r2:BOB_cf_secp112r2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp112r2
+PeerKey=BOB_cf_secp112r2_PUB
+SharedSecret=a6d05c7ba5128a9685c705b5030b
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp112r2
+PeerKey=ALICE_cf_secp112r2_PUB
+SharedSecret=a6d05c7ba5128a9685c705b5030b
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp112r2
+PeerKey=BOB_cf_secp112r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04f3280e92c269d794aa779efcef
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp112r2
+PeerKey=ALICE_cf_secp112r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04f3280e92c269d794aa779efcef
+
+PublicKey=MALICE_cf_secp112r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAcDHgAEsf2N4SfUZWtXPrUTmEyr71I/JSn8VtzQsFHuqQ==
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_secp112r2
+PeerKey=MALICE_cf_secp112r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_secp112r2
+PeerKey=MALICE_cf_secp112r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=secp128r1 curve tests
+
+PrivateKey=ALICE_cf_secp128r1
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwEAYHKoZIzj0CAQYFK4EEABwEFzAVAgEBBBB+RX18d0+gKpdcKbJJTrEZ
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp128r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEABwDIgAEG0XMAdrAZOPUW6L9ADU8XK8sZr7dtIcDinSWU1zSV9s=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp128r1:ALICE_cf_secp128r1_PUB
+
+PrivateKey=BOB_cf_secp128r1
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwEAYHKoZIzj0CAQYFK4EEABwEFzAVAgEBBBB/J9/eClt9mimGwOcOsjJF
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp128r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEABwDIgAE82nknsOS+u8mybP0KJqQhvm83gbPNTZOcvm0ZDVR5sU=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp128r1:BOB_cf_secp128r1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp128r1
+PeerKey=BOB_cf_secp128r1_PUB
+SharedSecret=5020f1b759da1f737a61a29a268d7669
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp128r1
+PeerKey=ALICE_cf_secp128r1_PUB
+SharedSecret=5020f1b759da1f737a61a29a268d7669
+
+Title=secp128r2 curve tests
+
+PrivateKey=ALICE_cf_secp128r2
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwEAYHKoZIzj0CAQYFK4EEAB0EFzAVAgEBBBALPaUYCnPgNiLhez93Z1Gi
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp128r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEAB0DIgAEOKiPRGtZXwxmvTr35NmUkNsAGGk9RKNA4D5BE9ZrjZQ=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp128r2:ALICE_cf_secp128r2_PUB
+
+PrivateKey=BOB_cf_secp128r2
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwEAYHKoZIzj0CAQYFK4EEAB0EFzAVAgEBBBARg3vb436QgyHdyt6l/b6G
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp128r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEAB0DIgAELph7h27BYjIINC2EddcpIOxKbdz8Xe7h3Az1ZuR9bAI=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp128r2:BOB_cf_secp128r2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp128r2
+PeerKey=BOB_cf_secp128r2_PUB
+SharedSecret=8f4d8c75141e9b084328222440eb5dfa
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp128r2
+PeerKey=ALICE_cf_secp128r2_PUB
+SharedSecret=8f4d8c75141e9b084328222440eb5dfa
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp128r2
+PeerKey=BOB_cf_secp128r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=baaa0c16e16eef291001475d638e4830
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp128r2
+PeerKey=ALICE_cf_secp128r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=baaa0c16e16eef291001475d638e4830
+
+PublicKey=MALICE_cf_secp128r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEAB0DIgAE6h6RzJIp6HLR6RDOPtyzGDurkuE9aAaZqHosPTnkLxQ=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_secp128r2
+PeerKey=MALICE_cf_secp128r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_secp128r2
+PeerKey=MALICE_cf_secp128r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=secp160k1 curve tests
+
+PrivateKey=ALICE_cf_secp160k1
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAAkEHDAaAgEBBBUAlxTBO50KwFwWKPtk1rutu68m+zI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp160k1_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAAkDKgAEcVWIjtPZn1cHckclpn5jKDCphQUVHxFN5tSeFG9wsJZT
+EvqPyLS64w==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp160k1:ALICE_cf_secp160k1_PUB
+
+PrivateKey=BOB_cf_secp160k1
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAAkEHDAaAgEBBBUAdrPkoNkRVUloiuwzruQszSUuwpY=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp160k1_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAAkDKgAESGN41cAj8Fg4pAJM7FUKHiawbCR0b9unMpZWxqOKeW1/
+bxT/CqEkyw==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp160k1:BOB_cf_secp160k1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp160k1
+PeerKey=BOB_cf_secp160k1_PUB
+SharedSecret=b738a0bf17f3271a9a155bfdfe2f0f1d51494d42
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp160k1
+PeerKey=ALICE_cf_secp160k1_PUB
+SharedSecret=b738a0bf17f3271a9a155bfdfe2f0f1d51494d42
+
+Title=secp160r1 curve tests
+
+PrivateKey=ALICE_cf_secp160r1
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAAgEHDAaAgEBBBUAR6m1+jIBuJnSKx9fHmyAYhsnYe8=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp160r1_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAAgDKgAEO78GZuBaCfJjHK97c9N21z+4mm37b5x7/Hr3Xc4pUbtb
+OoNj/A+W9w==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp160r1:ALICE_cf_secp160r1_PUB
+
+PrivateKey=BOB_cf_secp160r1
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAAgEHDAaAgEBBBUATqvd54Jj7TbnrLAd2dMYCpExLws=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp160r1_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAAgDKgAEBKDbBSPTwmb00MFvMtJMxQ2YDmcPOZHE8YbVr5hp8s5J
+Jwy17FaNNg==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp160r1:BOB_cf_secp160r1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp160r1
+PeerKey=BOB_cf_secp160r1_PUB
+SharedSecret=1912ea7b9bb1de5b8d3cef83e7a6e7a917816541
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp160r1
+PeerKey=ALICE_cf_secp160r1_PUB
+SharedSecret=1912ea7b9bb1de5b8d3cef83e7a6e7a917816541
+
+Title=secp160r2 curve tests
+
+PrivateKey=ALICE_cf_secp160r2
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAB4EHDAaAgEBBBUA3IsVg4R4paXaPATDHvzfnvM+vjQ=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp160r2_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAB4DKgAE4V+25YCpVkKF6NF/UPc1SYxohYWcf3qT3JDoPRhnm/rj
+mSqCCA6gUw==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp160r2:ALICE_cf_secp160r2_PUB
+
+PrivateKey=BOB_cf_secp160r2
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAB4EHDAaAgEBBBUAYT/5C7UpD17DnZm4ObswmGFMI1Q=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp160r2_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAB4DKgAEB7YVzBmzhnIdouvN/nb8VMXCqO8dkhmebyVzoD0oAzuH
+nN+SfWr6aQ==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp160r2:BOB_cf_secp160r2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp160r2
+PeerKey=BOB_cf_secp160r2_PUB
+SharedSecret=ccb9cae5c9487ff60c487bd1b39a62eb4680e9b6
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp160r2
+PeerKey=ALICE_cf_secp160r2_PUB
+SharedSecret=ccb9cae5c9487ff60c487bd1b39a62eb4680e9b6
+
+Title=secp192k1 curve tests
+
+PrivateKey=ALICE_cf_secp192k1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEAYHKoZIzj0CAQYFK4EEAB8EHzAdAgEBBBikVZrCZQB7ZtkhNfQYpjKHZ9KxXgooJ90=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp192k1_PUB
+-----BEGIN PUBLIC KEY-----
+MEYwEAYHKoZIzj0CAQYFK4EEAB8DMgAEyV4EzMZglBXtYdn38hNTrCGflAsJprMkxkOlw58chZ25
+6EAu7gVvYDTpnRkymKyH
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp192k1:ALICE_cf_secp192k1_PUB
+
+PrivateKey=BOB_cf_secp192k1
+-----BEGIN PRIVATE KEY-----
+MDYCAQAwEAYHKoZIzj0CAQYFK4EEAB8EHzAdAgEBBBiJQ/PunKGk9QPUyqIBGMgHKKg+yxJr5io=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp192k1_PUB
+-----BEGIN PUBLIC KEY-----
+MEYwEAYHKoZIzj0CAQYFK4EEAB8DMgAE990Tnmh9QQQHVHuLpfrAsgjvB9R2MJXzhBZN1WvtxLqF
+OZ2oFMP0Kfcr7HbI7a5j
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp192k1:BOB_cf_secp192k1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp192k1
+PeerKey=BOB_cf_secp192k1_PUB
+SharedSecret=a46a6bfb279d4dc30cffac585d1fbec905dbe46aca5e3c9d
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp192k1
+PeerKey=ALICE_cf_secp192k1_PUB
+SharedSecret=a46a6bfb279d4dc30cffac585d1fbec905dbe46aca5e3c9d
+
+Title=secp224k1 curve tests
+
+PrivateKey=ALICE_cf_secp224k1
+-----BEGIN PRIVATE KEY-----
+MDsCAQAwEAYHKoZIzj0CAQYFK4EEACAEJDAiAgEBBB0AZPk3TzxGhX7TljBBhJDLBfulAMp6Bh3W
+w40Qyg==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp224k1_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACADOgAE4o7LGdJDixqJZ5imnqaX4IeE55NG4W0HEe72LVC7pmn2
+e3m7uC92ZQhduF9lJli4dXD5en/1wkE=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp224k1:ALICE_cf_secp224k1_PUB
+
+PrivateKey=BOB_cf_secp224k1
+-----BEGIN PRIVATE KEY-----
+MDsCAQAwEAYHKoZIzj0CAQYFK4EEACAEJDAiAgEBBB0AdQ02GguRy3yHOjLkpoWb27QA/L1abfWe
+q2xUfA==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp224k1_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACADOgAEzp00m0DaADn1mGiDCT7K1LZnoj/vCxHPowUDC9yQd17K
+KpJM5sGILrTkkgxqtt5pBeYE1NC1QUQ=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp224k1:BOB_cf_secp224k1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp224k1
+PeerKey=BOB_cf_secp224k1_PUB
+SharedSecret=6f7b9d16c9c1d3a5c84b6028f2a4fed9ae8e02455e678a27243bcc48
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp224k1
+PeerKey=ALICE_cf_secp224k1_PUB
+SharedSecret=6f7b9d16c9c1d3a5c84b6028f2a4fed9ae8e02455e678a27243bcc48
+
+Title=secp256k1 curve tests
+
+PrivateKey=ALICE_cf_secp256k1
+-----BEGIN PRIVATE KEY-----
+MD4CAQAwEAYHKoZIzj0CAQYFK4EEAAoEJzAlAgEBBCDV8jMZ/aJfiMEkW7HsYqbT57Y7vmvm5KN/
+QEXqsNCSpw==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp256k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAElytZZZHc9CelGzZkNGpzY2CHQ+3z6tUnfsQxUmtiZnUg
+7oKfQC5BV8pZ5WYNPWnbT0RRg5kyBtzry9oQIhO5Lw==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_secp256k1:ALICE_cf_secp256k1_PUB
+
+PrivateKey=BOB_cf_secp256k1
+-----BEGIN PRIVATE KEY-----
+MD4CAQAwEAYHKoZIzj0CAQYFK4EEAAoEJzAlAgEBBCBh7awFyPey/w4pKBycpAlhvT4DlLQsi1TT
+BxJPHrAjrA==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp256k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE2BQeSJOa7kJAQsAPUbLseHjHhMe3tUOAl3bqoDqtrfO+
+2m2MP/IC/R9Kof2nmaiQ6DostdbS8kB+CnnprK375w==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_secp256k1:BOB_cf_secp256k1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_secp256k1
+PeerKey=BOB_cf_secp256k1_PUB
+SharedSecret=a4745cc4d19cabb9e5cb0abdd5c604cab2846a4638ad844ed9175f3cadda2da1
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_secp256k1
+PeerKey=ALICE_cf_secp256k1_PUB
+SharedSecret=a4745cc4d19cabb9e5cb0abdd5c604cab2846a4638ad844ed9175f3cadda2da1
+
+Title=sect113r1 curve tests
+
+PrivateKey=ALICE_cf_sect113r1
+-----BEGIN PRIVATE KEY-----
+MC0CAQAwEAYHKoZIzj0CAQYFK4EEAAQEFjAUAgEBBA8ALw9CgsuNBkkhhUHE8bQ=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect113r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAQDIAAEASO9jcamlg1pRE7JffrTAe9kyRZO2xrymHXoGdnA
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_sect113r1:ALICE_cf_sect113r1_PUB
+
+PrivateKey=BOB_cf_sect113r1
+-----BEGIN PRIVATE KEY-----
+MC0CAQAwEAYHKoZIzj0CAQYFK4EEAAQEFjAUAgEBBA8A/9qbs8sTFNkjS9/4CuM=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect113r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAQDIAAEATykaf/cvJzLOUto1EbbAEz/3++nut6q0dcJOQeV
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_sect113r1:BOB_cf_sect113r1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect113r1
+PeerKey=BOB_cf_sect113r1_PUB
+SharedSecret=01ed16f1948dcb368a54004237842d
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect113r1
+PeerKey=ALICE_cf_sect113r1_PUB
+SharedSecret=01ed16f1948dcb368a54004237842d
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect113r1
+PeerKey=BOB_cf_sect113r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=012e5f3e348c2a8a88d9590a639219
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect113r1
+PeerKey=ALICE_cf_sect113r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=012e5f3e348c2a8a88d9590a639219
+
+PublicKey=MALICE_cf_sect113r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAQDIAAEAAAAAAAAAAAAAAAAAAAAAd+TqiBXnTd/lyA/OFsR
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect113r1
+PeerKey=MALICE_cf_sect113r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect113r1
+PeerKey=MALICE_cf_sect113r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect113r2 curve tests
+
+PrivateKey=ALICE_cf_sect113r2
+-----BEGIN PRIVATE KEY-----
+MC0CAQAwEAYHKoZIzj0CAQYFK4EEAAUEFjAUAgEBBA8AvovirHrqTxoKJ3l+7y0=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect113r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAUDIAAEAFvQ4JgQTS8kjGeVfuITAS81qNcOQvt3PYa1HuCk
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_sect113r2:ALICE_cf_sect113r2_PUB
+
+PrivateKey=BOB_cf_sect113r2
+-----BEGIN PRIVATE KEY-----
+MC0CAQAwEAYHKoZIzj0CAQYFK4EEAAUEFjAUAgEBBA8ArUjgvp/goxRYb4WuQ80=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect113r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAUDIAAEAUoS3of8y28meYu/NoI5AVdhJZCuDjMqFHTriWY4
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_sect113r2:BOB_cf_sect113r2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect113r2
+PeerKey=BOB_cf_sect113r2_PUB
+SharedSecret=0057a287ba1ea05cb4735e673647e1
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect113r2
+PeerKey=ALICE_cf_sect113r2_PUB
+SharedSecret=0057a287ba1ea05cb4735e673647e1
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect113r2
+PeerKey=BOB_cf_sect113r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00fec2454e46732aca42b22b6d4f13
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect113r2
+PeerKey=ALICE_cf_sect113r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00fec2454e46732aca42b22b6d4f13
+
+PublicKey=MALICE_cf_sect113r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAUDIAAEAAAAAAAAAAAAAAAAAAAAAR3dbPHrhFekzJ7Azskr
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect113r2
+PeerKey=MALICE_cf_sect113r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect113r2
+PeerKey=MALICE_cf_sect113r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect131r1 curve tests
+
+PrivateKey=ALICE_cf_sect131r1
+-----BEGIN PRIVATE KEY-----
+MC8CAQAwEAYHKoZIzj0CAQYFK4EEABYEGDAWAgEBBBEA5C6zHMQM7pXPZ6cJz72Niw==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect131r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABYDJAAEBXCuXD6wOOif91GUlJNKXf8FBNw8crgqi5aEJEZbCdBJ
+Ag==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_sect131r1:ALICE_cf_sect131r1_PUB
+
+PrivateKey=BOB_cf_sect131r1
+-----BEGIN PRIVATE KEY-----
+MC8CAQAwEAYHKoZIzj0CAQYFK4EEABYEGDAWAgEBBBEDYZmjiokBJ/SnTv8sskBR3A==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect131r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABYDJAAEB8vGy3OQXwWKcJUSSJbCtpMBjFgJeZxzAaI420+B1B+1
+5A==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_sect131r1:BOB_cf_sect131r1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect131r1
+PeerKey=BOB_cf_sect131r1_PUB
+SharedSecret=05346248f77f81fff50cc656e119976871
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect131r1
+PeerKey=ALICE_cf_sect131r1_PUB
+SharedSecret=05346248f77f81fff50cc656e119976871
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect131r1
+PeerKey=BOB_cf_sect131r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01f151ae26efa507acc2597356baf7e8ab
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect131r1
+PeerKey=ALICE_cf_sect131r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01f151ae26efa507acc2597356baf7e8ab
+
+PublicKey=MALICE_cf_sect131r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABYDJAAEAAAAAAAAAAAAAAAAAAAAAAABfiJEFG0vRzEGxk2BxjmK
+zw==
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect131r1
+PeerKey=MALICE_cf_sect131r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect131r1
+PeerKey=MALICE_cf_sect131r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect131r2 curve tests
+
+PrivateKey=ALICE_cf_sect131r2
+-----BEGIN PRIVATE KEY-----
+MC8CAQAwEAYHKoZIzj0CAQYFK4EEABcEGDAWAgEBBBEBnZRUKAQetk5kyUwhIaAyxg==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect131r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABcDJAAEA5+Y20L8q989I4jnKknZ7hcGlQ6RUIGni9RahT88kB/d
+dw==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_sect131r2:ALICE_cf_sect131r2_PUB
+
+PrivateKey=BOB_cf_sect131r2
+-----BEGIN PRIVATE KEY-----
+MC8CAQAwEAYHKoZIzj0CAQYFK4EEABcEGDAWAgEBBBEBnafx9vcMeoCqj/1YNuflzw==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect131r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABcDJAAEB2G2uNkhQNjjl0/Ov6UYpxoFaWNXO+qy7poV6cdrFN7z
+pA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_sect131r2:BOB_cf_sect131r2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect131r2
+PeerKey=BOB_cf_sect131r2_PUB
+SharedSecret=058d8a8be33068ed8c1dc9f551ef2c3f3c
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect131r2
+PeerKey=ALICE_cf_sect131r2_PUB
+SharedSecret=058d8a8be33068ed8c1dc9f551ef2c3f3c
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect131r2
+PeerKey=BOB_cf_sect131r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=037b16d85f27c2c878ef96c79a536f89a5
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect131r2
+PeerKey=ALICE_cf_sect131r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=037b16d85f27c2c878ef96c79a536f89a5
+
+PublicKey=MALICE_cf_sect131r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABcDJAAEAAAAAAAAAAAAAAAAAAAAAAAGG5fiIbgziwBZHVzTYqCY
+1w==
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect131r2
+PeerKey=MALICE_cf_sect131r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect131r2
+PeerKey=MALICE_cf_sect131r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect163r1 curve tests
+
+PrivateKey=ALICE_cf_sect163r1
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAAIEHDAaAgEBBBUAlbn4x1UGJnAimsXufB/UvUaxU5U=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect163r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAIDLAAEA0f195HCcD4D+7wWyl3QuPkRovG/ATy5l7fpMl4BNIg/
+sbtEXluCzANF
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_sect163r1:ALICE_cf_sect163r1_PUB
+
+PrivateKey=BOB_cf_sect163r1
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAAIEHDAaAgEBBBUAoStq6Fjb7nB2PNL6WrzKKqhCGdE=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect163r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAIDLAAEAul/oBKr9B5MsPHWGF+q07j0JC+WAxj1JzfcIXR98n+r
+9FHWU5LC5pDM
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_sect163r1:BOB_cf_sect163r1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect163r1
+PeerKey=BOB_cf_sect163r1_PUB
+SharedSecret=06135eef489fe613c0d8bd522a2a640ff7ae6fb73d
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect163r1
+PeerKey=ALICE_cf_sect163r1_PUB
+SharedSecret=06135eef489fe613c0d8bd522a2a640ff7ae6fb73d
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect163r1
+PeerKey=BOB_cf_sect163r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0580f5e8efb242a19ae1023acbcab8702c799751e7
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect163r1
+PeerKey=ALICE_cf_sect163r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0580f5e8efb242a19ae1023acbcab8702c799751e7
+
+PublicKey=MALICE_cf_sect163r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAIDLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJkXolVuGFa8fqmk
+cs0Bv7iJuVg1
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect163r1
+PeerKey=MALICE_cf_sect163r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect163r1
+PeerKey=MALICE_cf_sect163r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect193r1 curve tests
+
+PrivateKey=ALICE_cf_sect193r1
+-----BEGIN PRIVATE KEY-----
+MDcCAQAwEAYHKoZIzj0CAQYFK4EEABgEIDAeAgEBBBkACmcvidKWLtPFB2xqg76F8VhM1Njzrkgo
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect193r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABgDNAAEAeqP0VQobenduwtf4MPmlYQVDjUmxKq50QFHnaBfzwXY
+1TYShZZgBr0R6a5dUGCbiF0=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_sect193r1:ALICE_cf_sect193r1_PUB
+
+PrivateKey=BOB_cf_sect193r1
+-----BEGIN PRIVATE KEY-----
+MDcCAQAwEAYHKoZIzj0CAQYFK4EEABgEIDAeAgEBBBkAKlSknQ66vpuLjC1mbQyfHOTdJ5Kw5jMh
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect193r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABgDNAAEAaFZVIeqfV9wbPydaBSJKSWJjVyFVSB/QQB5rHonYQmK
+f40zok8PJS6ratIcZwk/n20=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_sect193r1:BOB_cf_sect193r1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect193r1
+PeerKey=BOB_cf_sect193r1_PUB
+SharedSecret=012b8849991814f8c7ed9d40cf9dc204c3a83e0b10675543a5
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect193r1
+PeerKey=ALICE_cf_sect193r1_PUB
+SharedSecret=012b8849991814f8c7ed9d40cf9dc204c3a83e0b10675543a5
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect193r1
+PeerKey=BOB_cf_sect193r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0110180a18844859c52f6f012909522a2d87b5ab143bc80a55
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect193r1
+PeerKey=ALICE_cf_sect193r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0110180a18844859c52f6f012909522a2d87b5ab143bc80a55
+
+PublicKey=MALICE_cf_sect193r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABgDNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeX7PX3e5n
+zROUg6/STkLp1D+L51L9+wY=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect193r1
+PeerKey=MALICE_cf_sect193r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect193r1
+PeerKey=MALICE_cf_sect193r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect193r2 curve tests
+
+PrivateKey=ALICE_cf_sect193r2
+-----BEGIN PRIVATE KEY-----
+MDcCAQAwEAYHKoZIzj0CAQYFK4EEABkEIDAeAgEBBBkAhjkv8lXK/nPp3Qc4IwL/29JUKWi2VBMp
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect193r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABkDNAAEAIn7oSu3adu4ChNXniHKkMIv9gT24rpzzwAeCTDPIkUT
+kJ+Tit6e4RpgkB/dph4V+uI=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_sect193r2:ALICE_cf_sect193r2_PUB
+
+PrivateKey=BOB_cf_sect193r2
+-----BEGIN PRIVATE KEY-----
+MDcCAQAwEAYHKoZIzj0CAQYFK4EEABkEIDAeAgEBBBkAwGkR3qSQdfh7Q6KbJ4lH5FShGsX8o/jD
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect193r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABkDNAAEAFdSLKI0tlwZDpkndutOLsnHii1aJO8snwEJ0m/AZgMp
+xiDevOQ/xE9SpMX25W7YqkU=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_sect193r2:BOB_cf_sect193r2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect193r2
+PeerKey=BOB_cf_sect193r2_PUB
+SharedSecret=01e2f66a63c24c1de8a399c484228a5ad5b6d911c6e5e83ae3
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect193r2
+PeerKey=ALICE_cf_sect193r2_PUB
+SharedSecret=01e2f66a63c24c1de8a399c484228a5ad5b6d911c6e5e83ae3
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect193r2
+PeerKey=BOB_cf_sect193r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00bc82d393bd74406683aea003977a86a109f444a833652e43
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect193r2
+PeerKey=ALICE_cf_sect193r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00bc82d393bd74406683aea003977a86a109f444a833652e43
+
+PublicKey=MALICE_cf_sect193r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABkDNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFfdLEkrvsO
+Y7+6QpEvOay9A4MJCUZfZmI=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect193r2
+PeerKey=MALICE_cf_sect193r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect193r2
+PeerKey=MALICE_cf_sect193r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect239k1 curve tests
+
+PrivateKey=ALICE_cf_sect239k1
+-----BEGIN PRIVATE KEY-----
+MDwCAQAwEAYHKoZIzj0CAQYFK4EEAAMEJTAjAgEBBB4G4nbQDUtTnkrPOvDGIlhH9XdjirUSbTI5
+5z6lf7o=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect239k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEAAMDPgAEf5paOMjzcnpVAPMQnIkikE4K2jne3ubX2TD1P3aedknF
+lUr6tOU4BsiUQJACF90rQ9/KdeR5mYvYHzvI
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_sect239k1:ALICE_cf_sect239k1_PUB
+
+PrivateKey=BOB_cf_sect239k1
+-----BEGIN PRIVATE KEY-----
+MDwCAQAwEAYHKoZIzj0CAQYFK4EEAAMEJTAjAgEBBB4e0F0NpepAF+iNrEtoZeo4TrQFspkUNLcx
+Ly4Klfg=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect239k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEAAMDPgAEKnjJ4RHe+EiElXMrF4ou7VGy1pn0ZiO17FouF31Zbvjc
+TcbhfE6ziXM8sekQJBwcwRKQ9+G/Qzq/2A9x
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_sect239k1:BOB_cf_sect239k1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect239k1
+PeerKey=BOB_cf_sect239k1_PUB
+SharedSecret=0ef54c7b7dbf55d4278e7a6924dc4833c63ec708e820d501cacdfb4935d5
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect239k1
+PeerKey=ALICE_cf_sect239k1_PUB
+SharedSecret=0ef54c7b7dbf55d4278e7a6924dc4833c63ec708e820d501cacdfb4935d5
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect239k1
+PeerKey=BOB_cf_sect239k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=592e4b33ac99624fe7f2f879cf52f12a70f189c5d90785db26a12e0a46c0
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect239k1
+PeerKey=ALICE_cf_sect239k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=592e4b33ac99624fe7f2f879cf52f12a70f189c5d90785db26a12e0a46c0
+
+PublicKey=MALICE_cf_sect239k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEAAMDPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect239k1
+PeerKey=MALICE_cf_sect239k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect239k1
+PeerKey=MALICE_cf_sect239k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=wap-wsg-idm-ecid-wtls10 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls10
+-----BEGIN PRIVATE KEY-----
+MDsCAQAwEAYHKoZIzj0CAQYFZysBBAoEJDAiAgEBBB1zvDMHGgcytka5KvlvQvJzTA4l2ts2NzBp
+SJiGyw==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls10_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAoDPgAEAZkrhWBz/Q4GB8DY4Ia114ew6H7Eg7ri2uxwxd3rAZs5
+/ShvunNyndjCt3Qaq8sulBM0nUyERSDakyD+
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls10:ALICE_cf_wap-wsg-idm-ecid-wtls10_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls10
+-----BEGIN PRIVATE KEY-----
+MDsCAQAwEAYHKoZIzj0CAQYFZysBBAoEJDAiAgEBBB1SowkHU79PqokOfgllN53rNS8a3h1wFBY0
+dKPkQg==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls10_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAoDPgAEAGavw4ChHCoWplAumMEBwJgJ2aYtw+utu4vhWnscAPIT
+IJ4IiIGj18rCFBap1sgVbpXjhEBLYg6Itwv2
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls10:BOB_cf_wap-wsg-idm-ecid-wtls10_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls10
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls10_PUB
+SharedSecret=0194ef5d80fdfe9df366b2273b983c3dbd440faf76964fcfc06c509f289d
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls10
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls10_PUB
+SharedSecret=0194ef5d80fdfe9df366b2273b983c3dbd440faf76964fcfc06c509f289d
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls10
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls10_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01bedc5cdf63fbf18c3e2bc9765e12f7990c0c0c64f0267ae7c37b9f49f0
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls10
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls10_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01bedc5cdf63fbf18c3e2bc9765e12f7990c0c0c64f0267ae7c37b9f49f0
+
+PublicKey=MALICE_cf_wap-wsg-idm-ecid-wtls10_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAoDPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls10
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls10_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls10
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls10_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=wap-wsg-idm-ecid-wtls11 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls11
+-----BEGIN PRIVATE KEY-----
+MDwCAQAwEAYHKoZIzj0CAQYFZysBBAsEJTAjAgEBBB4AkzS3zoqHNCLug/nwoYMQW3UigmZ9t56k
+5jp+FiY=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls11_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAsDPgAEABttgKKYeGZRmcH/5UZR56lOSgbU4TH2AuIhvj88AL6H
+zTCX9elzXpck+u22bnmkuvL2A8XKB5+fabMR
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls11:ALICE_cf_wap-wsg-idm-ecid-wtls11_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls11
+-----BEGIN PRIVATE KEY-----
+MDwCAQAwEAYHKoZIzj0CAQYFZysBBAsEJTAjAgEBBB4AWU05mbqPxsB749llNON1//l0w8RJJ3z5
+h/kzfNM=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls11_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAsDPgAEAL6Xj/KCmXAQAAo847t0bl0wqBrteWRg93OvIJsPAAOE
+ehdIgJyruc3KsH0RFlipu5QD8pnGSIXvif19
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls11:BOB_cf_wap-wsg-idm-ecid-wtls11_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls11
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls11_PUB
+SharedSecret=01ac8a23ddeeafb4d3bb243fe409f2f9c8b1a3fc11d4690da583f2e21637
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls11
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls11_PUB
+SharedSecret=01ac8a23ddeeafb4d3bb243fe409f2f9c8b1a3fc11d4690da583f2e21637
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls11
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls11_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01b9992992572d3a59d424f8c9cc195576461ed6c1dadf6fb523717fab19
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls11
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls11_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01b9992992572d3a59d424f8c9cc195576461ed6c1dadf6fb523717fab19
+
+PublicKey=MALICE_cf_wap-wsg-idm-ecid-wtls11_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAsDPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYf4
+Vie5eHTnR+4x4G1xyq7qUvISU+X5RtBh2pE4
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls11
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls11_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls11
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls11_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=wap-wsg-idm-ecid-wtls12 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls12
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwEAYHKoZIzj0CAQYFZysBBAwEIzAhAgEBBBxwvll9Eb9mm2Xadq1evIi1zIK+6u0Nv8bP
+LI9a
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls12_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFZysBBAwDOgAE0t0WqG/pFsiCt6agmebw3FCEWAzf9BpNLuzoCkPEe0Li
+bqn5udrckL6s3stwCTVFaZUfY2qS9QE=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls12:ALICE_cf_wap-wsg-idm-ecid-wtls12_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls12
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwEAYHKoZIzj0CAQYFZysBBAwEIzAhAgEBBBz+5P6gpqXxbeXvvaD5W9Ft69BTxcn7zc6q
+K3Ax
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls12_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFZysBBAwDOgAEvyxedqaWkoAOMjaV5W3/tJpheiHAR0zV6BlIeUuGP2mx
++xsOK9/QB7hzipq9cXx1K/dXu58EoSY=
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls12:BOB_cf_wap-wsg-idm-ecid-wtls12_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls12
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls12_PUB
+SharedSecret=a3b3f20af8c33a0f5c246b4b9d9dda1cd40c294d1f53365d18a8b54b
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls12
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls12_PUB
+SharedSecret=a3b3f20af8c33a0f5c246b4b9d9dda1cd40c294d1f53365d18a8b54b
+
+Title=wap-wsg-idm-ecid-wtls1 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls1
+-----BEGIN PRIVATE KEY-----
+MCwCAQAwEAYHKoZIzj0CAQYFZysBBAEEFTATAgEBBA5ZNASTt4/g6XPQwRiQ0Q==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAEDIAAEACBNPI48xxsPVQBy07jRAAcWzbIkMo8BQotxpfGJ
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls1:ALICE_cf_wap-wsg-idm-ecid-wtls1_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls1
+-----BEGIN PRIVATE KEY-----
+MCwCAQAwEAYHKoZIzj0CAQYFZysBBAEEFTATAgEBBA6+0x9qk0NIKHSRvlTemQ==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAEDIAAEAEeHMSBTx/EtOu+bjBinALHSkQuJyiP3mg1tu+I2
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls1:BOB_cf_wap-wsg-idm-ecid-wtls1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls1
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls1_PUB
+SharedSecret=0040ba2fadc1da97c973e5e59ade31
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls1
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls1_PUB
+SharedSecret=0040ba2fadc1da97c973e5e59ade31
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls1
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=008919696215a89e03d6c4c9265d6b
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls1
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=008919696215a89e03d6c4c9265d6b
+
+PublicKey=MALICE_cf_wap-wsg-idm-ecid-wtls1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAEDIAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls1
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls1
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=wap-wsg-idm-ecid-wtls3 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls3
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFZysBBAMEHDAaAgEBBBUDO2cHbqQBUxuJBl6UT9UrasuRVrI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls3_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAMDLAAEBRIzvK9o7eO2NGmtPFV/zo9/1mlvBwjG7+e6hbPG1KdI
+01f8oGBuXMQH
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls3:ALICE_cf_wap-wsg-idm-ecid-wtls3_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls3
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFZysBBAMEHDAaAgEBBBUAhZv9WZ00bDnU9MOaqEegP771nes=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls3_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAMDLAAEAYOspjEbzyZw61jCtUrxARr+w66nBH+73QIvlaRVSG/4
+hlBUf5kmG4Yn
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls3:BOB_cf_wap-wsg-idm-ecid-wtls3_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls3
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls3_PUB
+SharedSecret=0311924428a839b7dcada662722945e62bf1131f4f
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls3
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls3_PUB
+SharedSecret=0311924428a839b7dcada662722945e62bf1131f4f
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls3
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls3_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=047f1aee6a1a1d7c9c1f0e8dce4349429f737aa658
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls3
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls3_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=047f1aee6a1a1d7c9c1f0e8dce4349429f737aa658
+
+PublicKey=MALICE_cf_wap-wsg-idm-ecid-wtls3_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAMDLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAB
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls3
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls3_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls3
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls3_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=wap-wsg-idm-ecid-wtls4 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls4
+-----BEGIN PRIVATE KEY-----
+MC0CAQAwEAYHKoZIzj0CAQYFZysBBAQEFjAUAgEBBA8ACFOrBbOh5LjNtJQCuEE=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls4_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAQDIAAEAW3K4Mus5+KAJVGLzEYrAYuCJSEYXFTo17aW0TwN
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls4:ALICE_cf_wap-wsg-idm-ecid-wtls4_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls4
+-----BEGIN PRIVATE KEY-----
+MC0CAQAwEAYHKoZIzj0CAQYFZysBBAQEFjAUAgEBBA8Auz4XRc3Rg0bNcbrray8=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls4_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAQDIAAEAI0F7ixGqOhnYpsuR80nAdTdSXM+YbcUbLe/U/xG
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls4:BOB_cf_wap-wsg-idm-ecid-wtls4_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls4
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls4_PUB
+SharedSecret=0077378ddfdadff704a0b6646949e7
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls4
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls4_PUB
+SharedSecret=0077378ddfdadff704a0b6646949e7
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls4
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls4_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=008f3713fe1ff1fa5d5041899817d1
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls4
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls4_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=008f3713fe1ff1fa5d5041899817d1
+
+PublicKey=MALICE_cf_wap-wsg-idm-ecid-wtls4_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAQDIAAEAAAAAAAAAAAAAAAAAAAAAd+TqiBXnTd/lyA/OFsR
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls4
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls4_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls4
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls4_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=wap-wsg-idm-ecid-wtls5 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls5
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFZysBBAUEHDAaAgEBBBUD9gVh3zbLTA7BuRVVi9T8QKZ1uco=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls5_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAUDLAAEAH5xyUrvbuN+tWmRhwqrQfFHPHNUBKtAGvJuvSFVwTKk
+uFzn9fPvIDe6
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls5:ALICE_cf_wap-wsg-idm-ecid-wtls5_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls5
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFZysBBAUEHDAaAgEBBBUAr9ZlmuO7bNfqB42xUivJXyVHKNI=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls5_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAUDLAAEBdXxEk0L2XAVzRNLPcnMxGXXyDfZAoA1Qw2XpOfVWIVR
+jdoMGRgUuJmO
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls5:BOB_cf_wap-wsg-idm-ecid-wtls5_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls5
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls5_PUB
+SharedSecret=0190c68d80e94fbe9f193ae7d9a156bf0b8d097c23
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls5
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls5_PUB
+SharedSecret=0190c68d80e94fbe9f193ae7d9a156bf0b8d097c23
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls5
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls5_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00aabc9b45c200e41294aa922ab06da6655731e0ea
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls5
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls5_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00aabc9b45c200e41294aa922ab06da6655731e0ea
+
+PublicKey=MALICE_cf_wap-wsg-idm-ecid-wtls5_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAUDLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8JxepS05nN/piK
+dhDD3dDKXUih
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls5
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls5_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls5
+PeerKey=MALICE_cf_wap-wsg-idm-ecid-wtls5_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=wap-wsg-idm-ecid-wtls6 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls6
+-----BEGIN PRIVATE KEY-----
+MCwCAQAwEAYHKoZIzj0CAQYFZysBBAYEFTATAgEBBA4ayMbswPbvYMwpwo80jA==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls6_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFZysBBAYDHgAERPw/8Ip/RrXr0gMgLGRQeiQ4Qd6W+Li0ylGKzg==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls6:ALICE_cf_wap-wsg-idm-ecid-wtls6_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls6
+-----BEGIN PRIVATE KEY-----
+MCwCAQAwEAYHKoZIzj0CAQYFZysBBAYEFTATAgEBBA6kbCpFt3tX2hYBQHMXbg==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls6_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFZysBBAYDHgAEhJXqpYGxE/l1X/LiBeyRbIcyzqPxUP5Tkv3U3w==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls6:BOB_cf_wap-wsg-idm-ecid-wtls6_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls6
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls6_PUB
+SharedSecret=b4cae255268f11a1e46fecad04c2
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls6
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls6_PUB
+SharedSecret=b4cae255268f11a1e46fecad04c2
+
+Title=wap-wsg-idm-ecid-wtls7 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls7
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFZysBBAcEHDAaAgEBBBUABcyzh4ot9ck/j4/3ehK0aYngYoM=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls7_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFZysBBAcDKgAEwQLnZ70n45RLqRtAGNzEa3Rl/9nwyjqYUtw2eeHhnNLT
+feGY4CNH0w==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls7:ALICE_cf_wap-wsg-idm-ecid-wtls7_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls7
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFZysBBAcEHDAaAgEBBBUAPyrGRY1SR13hKQswS6yXs8w8PUQ=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls7_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFZysBBAcDKgAEZGN44YbN5r3zcNtOHrvbQLt8/lE7BHp4D/9eKLmwFDn1
+QneRu3xwPA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls7:BOB_cf_wap-wsg-idm-ecid-wtls7_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls7
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls7_PUB
+SharedSecret=ae9f5bcc6457c0422866bf855921eabc42b7121a
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls7
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls7_PUB
+SharedSecret=ae9f5bcc6457c0422866bf855921eabc42b7121a
+
+Title=wap-wsg-idm-ecid-wtls8 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls8
+-----BEGIN PRIVATE KEY-----
+MC0CAQAwEAYHKoZIzj0CAQYFZysBBAgEFjAUAgEBBA8AnkC18b3pH2O5TIYIqAQ=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls8_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFZysBBAgDHgAEJD0h4HEfchwxqhp9eMHh9gczQKHX4MtWVoAxKQ==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls8:ALICE_cf_wap-wsg-idm-ecid-wtls8_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls8
+-----BEGIN PRIVATE KEY-----
+MC0CAQAwEAYHKoZIzj0CAQYFZysBBAgEFjAUAgEBBA8AXxPMnqbl3rOuIM5nsvc=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls8_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFZysBBAgDHgAEZawmRmzr9P+jihImUi6ykOzaSH484JhMKNdrgw==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls8:BOB_cf_wap-wsg-idm-ecid-wtls8_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls8
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls8_PUB
+SharedSecret=48baf4f1f5e8a0eb5dae28ef6290
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls8
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls8_PUB
+SharedSecret=48baf4f1f5e8a0eb5dae28ef6290
+
+Title=wap-wsg-idm-ecid-wtls9 curve tests
+
+PrivateKey=ALICE_cf_wap-wsg-idm-ecid-wtls9
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFZysBBAkEHDAaAgEBBBUALwvuKs3RLthMAsChbqKjXw6vTYo=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_wap-wsg-idm-ecid-wtls9_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFZysBBAkDKgAET0ppOvd9DU4v+tkKDQ5wRBrN1FwD9+F9t5l3Im+mz3rw
+DB/RYdZuUg==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=ALICE_cf_wap-wsg-idm-ecid-wtls9:ALICE_cf_wap-wsg-idm-ecid-wtls9_PUB
+
+PrivateKey=BOB_cf_wap-wsg-idm-ecid-wtls9
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFZysBBAkEHDAaAgEBBBUAgeb/vqEM7X5AAAxyBu3M+C8pWLM=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_wap-wsg-idm-ecid-wtls9_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFZysBBAkDKgAEWc37LGt6lt90iF4lhtDYNFdjAqoczebuNgzGff/Uq8ov
+a3EVJ9yK1A==
+-----END PUBLIC KEY-----
+
+Availablein = default
+PrivPubKeyPair=BOB_cf_wap-wsg-idm-ecid-wtls9:BOB_cf_wap-wsg-idm-ecid-wtls9_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_wap-wsg-idm-ecid-wtls9
+PeerKey=BOB_cf_wap-wsg-idm-ecid-wtls9_PUB
+SharedSecret=948d3030e95cead39a1bb3d8a01c2be178517ba7
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_wap-wsg-idm-ecid-wtls9
+PeerKey=ALICE_cf_wap-wsg-idm-ecid-wtls9_PUB
+SharedSecret=948d3030e95cead39a1bb3d8a01c2be178517ba7
+
+# tests: 484
+
+Title=zero x-coord regression tests
+
+PrivateKey=ALICE_zero_prime192v1
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEHzAdAgEBBBhaPNk8jG5hSG6y8tUqUoOaNNsZ3APU
+pps=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_prime192v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe2hWBe5g
+DLNj216pEvK7XjoKLg5gNg8S
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_prime192v1
+PeerKey=BOB_zero_prime192v1_PUB
+SharedSecret=baaffd49a8399d2ad52cbbe24d47b67afb4b3cf436f1cd65
+
+PrivateKey=ALICE_zero_prime192v2
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQIEHzAdAgEBBBj1AIQMJ7jqYIKCvxYAS+qKMmKmH0to
+41k=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_prime192v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQIDMgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4Gj7Qqt
+2wx/jwFlKgvE4rnd50LspdMk
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_prime192v2
+PeerKey=BOB_zero_prime192v2_PUB
+SharedSecret=b8f200a4b87064f2e8600685ca3e69b8e661a117aabc770b
+
+PrivateKey=ALICE_zero_prime192v3
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQMEHzAdAgEBBBh/maLQMSlea9BfLqGy5NPuK0YAH/cz
+GqI=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_prime192v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZEzb63e2
+3MKatRLR9Y1M5JEdI9jwMocI
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_prime192v3
+PeerKey=BOB_zero_prime192v3_PUB
+SharedSecret=b5de857d355bc5b9e270a4c290ea9728d764d8b243ff5d8d
+
+PrivateKey=ALICE_zero_prime239v1
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQQEJTAjAgEBBB5pYWzRYI+c6O7NXCt0H2kw8XRL3rhe
+4MrJT8j++CI=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_prime239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQQDPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+Ox02uwNNLFuvDRn5ip8TxvW0W22R7UzJa9Av6/nh
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_prime239v1
+PeerKey=BOB_zero_prime239v1_PUB
+SharedSecret=6b6206408bd05d42daa2cd224c401a1230b44e184f17b82f385f22dac215
+
+PrivateKey=ALICE_zero_prime239v2
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQUEJTAjAgEBBB5l8bB7Cpmr7vyx9FiOT2wEF3YOFbDG
+bmRr3Vi/xr4=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_prime239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQUDPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+IOg3VJGQ89d1GWg4Igxcj5xpDmJiP8tv+e4mxt5U
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_prime239v2
+PeerKey=BOB_zero_prime239v2_PUB
+SharedSecret=772c2819c960c78f28f21f6542b7409294fad1f84567c44c4b7678dc0e42
+
+PrivateKey=ALICE_zero_prime239v3
+-----BEGIN PRIVATE KEY-----
+MD8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQYEJTAjAgEBBB5HF5FABzUOTYMZg9UdZTx/oRERm/fU
+M/+otKzpLjA=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_prime239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQYDPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AsZ4u6r3qQI78EYBpiSgWjqNpoeShjr5piecMBWj
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_prime239v3
+PeerKey=BOB_zero_prime239v3_PUB
+SharedSecret=56a71f5dd1611e8032c3e2d8224d86e5e8c2fc6480d74c0e282282decd43
+
+PrivateKey=ALICE_zero_prime256v1
+-----BEGIN PRIVATE KEY-----
+MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCDXhMb6aR4JR2+l2tmgYqP0r8S4jtym
+yH++awvF2nGhhg==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_prime256v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AABmSFx4Di+D1yQzvV2EoGu2VBwq8x2uhxcov4VqF0+T9A==
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_prime256v1
+PeerKey=BOB_zero_prime256v1_PUB
+SharedSecret=c4f5607deb8501f1a4ba23fce4122a4343a17ada2c86a9c8e0d03d92d4a4c84c
+
+PrivateKey=ALICE_zero_secp112r2
+-----BEGIN PRIVATE KEY-----
+MCwCAQAwEAYHKoZIzj0CAQYFK4EEAAcEFTATAgEBBA4hh3tRkG3tnA0496ffMw==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_secp112r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAcDHgAEAAAAAAAAAAAAAAAAAAAS5eEOWDV/Wk7w4djyDQ==
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_secp112r2
+PeerKey=BOB_zero_secp112r2_PUB
+SharedSecret=958cc1cb425713678830a4d7d95e
+
+PrivateKey=ALICE_zero_secp128r1
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwEAYHKoZIzj0CAQYFK4EEABwEFzAVAgEBBBCykSzic/h3T2K6SkSP1SGt
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_secp128r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEABwDIgAEAAAAAAAAAAAAAAAAAAAAAABya8M5aeOpNG3z799IdHc=
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_secp128r1
+PeerKey=BOB_zero_secp128r1_PUB
+SharedSecret=5235d452066f126cd7e99eea00fd3068
+
+PrivateKey=ALICE_zero_secp160r1
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAAgEHDAaAgEBBBUACoRnbig69XLlh5VcRexpbbn5zwA=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_secp160r1_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAAgDKgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAG/w1po29wYlxlygXs
+MGfbiGg5ng==
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_secp160r1
+PeerKey=BOB_zero_secp160r1_PUB
+SharedSecret=9ccd0ab8d093b6acdb3fe14c3736a0dfe61a4666
+
+PrivateKey=ALICE_zero_secp160r2
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAB4EHDAaAgEBBBUAQFGxInSw1eAvd45E9TUdbXtJGnA=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_secp160r2_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAB4DKgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAZtSBSZqfmXp47v5z2
+ZZZl2JFxDg==
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_secp160r2
+PeerKey=BOB_zero_secp160r2_PUB
+SharedSecret=303e0a282ac86f463fe834cb51b0057be42ed5ab
+
+PrivateKey=ALICE_zero_secp384r1
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEAYHKoZIzj0CAQYFK4EEACIENzA1AgEBBDD6kgzKbg28zbQyVTdC0IdHbm0UCQt2Rdbi
+VVHJeYRSnNpFOiFLaOsGOmwoeZzj6jc=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_secp384r1_PUB
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAPPme8E9RpepjC6P5+WDdWToUyb45/SvSFdO0sIqq+Gu/kn8sRuUqsG+3
+QriFDlIe
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_secp384r1
+PeerKey=BOB_zero_secp384r1_PUB
+SharedSecret=b1cfeaeef51dfd487d3a8b2849f1592e04d63f2d2c88b310a6290ebfe5399f5ffe954eabd0619231393e56c35b242986
+
+PrivateKey=ALICE_zero_secp521r1
+-----BEGIN PRIVATE KEY-----
+MGACAQAwEAYHKoZIzj0CAQYFK4EEACMESTBHAgEBBEIAbddDLMUWbAsY7l3vbNDmntXuAUcDYPg5
+w/cgUwSCIvrV9MBeSG8AWqT16riHmHlsn+XI5PAJM6eij3JDahnu9Mo=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_secp521r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0g7J/qa1d8ENJsobtEb0CymeZIsa
+1Qiq0GiJb+4/jmFLxjBU1Xcr8Bpl1BLgvKqOll0vXTMtfzn4RtRArgAfT4c=
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_secp521r1
+PeerKey=BOB_zero_secp521r1_PUB
+SharedSecret=003fc3028f61db94b20c7cd177923b6e73f12f0ab067c9ce8866755e3c82abb39c9863cde74fa80b32520bd7dd0eb156c30c08911503b67b2661f1264d09bb231423
+
+PrivateKey=ALICE_zero_wap-wsg-idm-ecid-wtls7
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFZysBBAcEHDAaAgEBBBUAoGng7WzYr4P9vtdc3BS/UiNWmc0=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_zero_wap-wsg-idm-ecid-wtls7_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFZysBBAcDKgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAZtSBSZqfmXp47v5z2
+ZZZl2JFxDg==
+-----END PUBLIC KEY-----
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_zero_wap-wsg-idm-ecid-wtls7
+PeerKey=BOB_zero_wap-wsg-idm-ecid-wtls7_PUB
+SharedSecret=6582fc03bbb340fcf24a5fe8fcdf722655efa8b9
+
+# tests: 14
+
+Title=prime192v1 curve tests
+
+PrivateKey=ALICE_cf_prime192v1
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEHzAdAgEBBBhQFYLaobJ47BVWWZv/ByY8Ti69m/U9
+TeI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_prime192v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEHYbt14KzucSpmKMrlDx1IGz/a28nDs21OjKgx3BK
+PZ78UrllIr69kgrYUKsRg4sd
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_prime192v1:ALICE_cf_prime192v1_PUB
+
+PrivateKey=BOB_cf_prime192v1
+-----BEGIN PRIVATE KEY-----
+MDkCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEHzAdAgEBBBhsbmKHAtygIqirkmUXSbniDJOx0/fI
+CWM=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_prime192v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEJA+FQcXq5Axzv8pLDslxq1QVt1hjN2i0TgoO6Yxp
+bAekMot69VorE8ibSzgJixXJ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_prime192v1:BOB_cf_prime192v1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_prime192v1
+PeerKey=BOB_cf_prime192v1_PUB
+SharedSecret=e36cad3b0f8d00f60f090440a76df47896713ae61421c354
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_prime192v1
+PeerKey=ALICE_cf_prime192v1_PUB
+SharedSecret=e36cad3b0f8d00f60f090440a76df47896713ae61421c354
+
+# ECDH Bob with Alice peer : curves with less than 112 bits of strength cannot
+# be used for Key agreement in fips mode
+Availablein = fips
+Derive=BOB_cf_prime192v1
+Securitycheck = 1
+PeerKey=ALICE_cf_prime192v1_PUB
+SharedSecret=e36cad3b0f8d00f60f090440a76df47896713ae61421c354
+Result = DERIVE_SET_PEER_ERROR
+
+Title=prime256v1 curve tests
+
+PrivateKey=ALICE_cf_prime256v1
+-----BEGIN PRIVATE KEY-----
+MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCDZE0NZiGAFJX6JQxumKTFRT+XFCQqJ
+gHCUxmU2fRcn9Q==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_prime256v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5kDOrX6kmk1/jHfEdMBluFos6dyCbzKVOX3v2aa2
+y5IhlhTKtCJdydX+XWLDXWW9sbtIRNP94R3iOOpRPBqpGg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_prime256v1:ALICE_cf_prime256v1_PUB
+
+PrivateKey=BOB_cf_prime256v1
+-----BEGIN PRIVATE KEY-----
+MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCAxJgV1dLJw/o2Dmh1fIY1KpBd88WCP
+23wZzR8DzhyCrA==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_prime256v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5J6yA+j0zrGi6RilUhjrcL7OUMzYTwpnw5DdRXr0
+creHgE03EFV//7xqadB4BDwFIGM9MV2sE6qREEomWhZFeg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_prime256v1:BOB_cf_prime256v1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_prime256v1
+PeerKey=BOB_cf_prime256v1_PUB
+SharedSecret=ee63690b553dcd9bccb066137725f0489395a83f4d280f309339d606c969734a
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_prime256v1
+PeerKey=ALICE_cf_prime256v1_PUB
+SharedSecret=ee63690b553dcd9bccb066137725f0489395a83f4d280f309339d606c969734a
+
+Title=secp224r1 curve tests
+
+PrivateKey=ALICE_cf_secp224r1
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwEAYHKoZIzj0CAQYFK4EEACEEIzAhAgEBBBzeo7Y0HMfrIqKNm3r997jcfVAa4osa0AR2
+JA28
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp224r1_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExZc6o84XjBGLOosGj2t0QctgiyzF3NcVgy+DeW7stkVs
+yS2tRzMPBpwnApRzoRsdJR99sb3eM2s=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_secp224r1:ALICE_cf_secp224r1_PUB
+
+PrivateKey=BOB_cf_secp224r1
+-----BEGIN PRIVATE KEY-----
+MDoCAQAwEAYHKoZIzj0CAQYFK4EEACEEIzAhAgEBBBy2LsqxHhdlSiAmMYKQAEmjJWT22T42GYKo
+ZvXM
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp224r1_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE71Eh6hwTKUrmyl2PdkY787GwxiohIcaqB4eK2Mwg6tU4
+LeJHWcgY18CgPKCaeldUgnkMcJzKj20=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_secp224r1:BOB_cf_secp224r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_secp224r1
+PeerKey=BOB_cf_secp224r1_PUB
+SharedSecret=29d8b75934d74d5153bbb94e0370437c63ecc30bf3d2800ed1cb7eb5
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_secp224r1
+PeerKey=ALICE_cf_secp224r1_PUB
+SharedSecret=29d8b75934d74d5153bbb94e0370437c63ecc30bf3d2800ed1cb7eb5
+
+Title=secp384r1 curve tests
+
+PrivateKey=ALICE_cf_secp384r1
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEAYHKoZIzj0CAQYFK4EEACIENzA1AgEBBDAp1ErG6wVjuJs90qVbUBxNpQK1wtV4ieX1
+bIU/4HssZK6WjOOTyYguyEBCOf/rUnw=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp384r1_PUB
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEx5rt+yujIuPoIXpHGmExKSi/P+58sGYoqgdpdOJUXzn2
+Rc4alCpSxVJeC55xvwaFHc3pzNyRGwnhPmN6oU/KMP6XjBvR4wq35mr/Sym5s0B2blAzkJU37idq
+nTi3xGHx
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_secp384r1:ALICE_cf_secp384r1_PUB
+
+PrivateKey=BOB_cf_secp384r1
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEAYHKoZIzj0CAQYFK4EEACIENzA1AgEBBDAUjVgPpiI+xXye0nfRhc8+12hLdWY4fpsO
+Jq2MCp+W85xJwtXsEPrHj1XFnKVpM4c=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp384r1_PUB
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+JUBXRSHixH0TrcvYvIzep7+/WNpEhWdCPsLMygigW5j
+pzP30MF41GnQYgfJu5wI/gu1C/jFTv1X6Dgmla3JxBYlPeD+1L0lEMT3evmHKMM/BFe3WKBuXyhP
+ilrNtfee
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_secp384r1:BOB_cf_secp384r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_secp384r1
+PeerKey=BOB_cf_secp384r1_PUB
+SharedSecret=b3cfe488126e2731fb7c19f82e94fcc05e1dd303649a9257e858030b795c2d344a054b0c44a24fd7f5821f531a9b8cfb
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_secp384r1
+PeerKey=ALICE_cf_secp384r1_PUB
+SharedSecret=b3cfe488126e2731fb7c19f82e94fcc05e1dd303649a9257e858030b795c2d344a054b0c44a24fd7f5821f531a9b8cfb
+
+Title=secp521r1 curve tests
+
+PrivateKey=ALICE_cf_secp521r1
+-----BEGIN PRIVATE KEY-----
+MGACAQAwEAYHKoZIzj0CAQYFK4EEACMESTBHAgEBBEIBsYIcUKeN2evB626LCdYWH/xzUiEDCdRP
+rEENsC8//dowKnOCtlLtawh0DXTIZ/HhpUREuaoffdsmYb6+Oq1TRjc=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_secp521r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBufYxJf/4Ds6g7LlFRVS62ljm3xApV2T79hfWH8Lv
+iroIaCFjLBIfOVDF8jvj2PO1ar3yCLiSA2RiLZz1Y+tv/tcATHE0nS7l3SfGiGmEnVycEnhgqlKM
+UM3kpdd7eNkQn5/GO8KAPQqA/sOnvTavg5S01t0ub+PY/w0Y6oBgthaUAW0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_secp521r1:ALICE_cf_secp521r1_PUB
+
+PrivateKey=BOB_cf_secp521r1
+-----BEGIN PRIVATE KEY-----
+MGACAQAwEAYHKoZIzj0CAQYFK4EEACMESTBHAgEBBEIB+3/adZnNwr6GFUzZpi8So7pC/5FYQ0+0
+lMmoUjGvy8DNADcHaPpW68hX/M+z7LrK0Jpnonb9JSEXlgjOPVe4Ea8=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_secp521r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBLq2fjyCalnvr24tjaz87ijIWlLMoCH7Hmyq1t2l8
+PFbyBIZbngDC0gwFM5ZI582QSWlW79G3clJP9VxlJOsms50BYBYgd6o2JF4w8AnShVXxFSJU1py4
+klCDNhTFybRHFXpujfuUeNnFxAGIUb4edJ0fAqqc7kkERhYe8EPEZYMKp3Q=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_secp521r1:BOB_cf_secp521r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_secp521r1
+PeerKey=BOB_cf_secp521r1_PUB
+SharedSecret=01dd4aa9037bb4ad298b420998dcd32b3a9af1cda8b7919e372aeb4e54ccfb4d2409a340ed896bfbc5dd462f8d96b8784bc17b29db3ca04700e6ec752f9bec777695
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_secp521r1
+PeerKey=ALICE_cf_secp521r1_PUB
+SharedSecret=01dd4aa9037bb4ad298b420998dcd32b3a9af1cda8b7919e372aeb4e54ccfb4d2409a340ed896bfbc5dd462f8d96b8784bc17b29db3ca04700e6ec752f9bec777695
+
+Title=sect163k1 curve tests
+
+PrivateKey=ALICE_cf_sect163k1
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAAEEHDAaAgEBBBUB905PYfmej8LzbzX6Bg51GJzXQjQ=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect163k1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBfvs5A1hD8YySP9O2ub8GEUfotVuBpfRx4GIHdAfx8wV
+1UVeTRnyAlWU
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect163k1:ALICE_cf_sect163k1_PUB
+
+PrivateKey=BOB_cf_sect163k1
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAAEEHDAaAgEBBBUCHPtCjJ4/K8ylQBcLlb5VE0bkaUE=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect163k1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBvgfX1mTRlt6Z4TE1D1MNWo4loH4AoeYa6oowK104LKk
+nsdg7isQ8XBD
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect163k1:BOB_cf_sect163k1_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect163k1
+PeerKey=BOB_cf_sect163k1_PUB
+SharedSecret=04d0e40788c5ce5220818055277cae53eac55c1e6b
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect163k1
+PeerKey=ALICE_cf_sect163k1_PUB
+SharedSecret=04d0e40788c5ce5220818055277cae53eac55c1e6b
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect163k1
+PeerKey=BOB_cf_sect163k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04c902a91110244d89110034dd2b099c49cbab6c77
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect163k1
+PeerKey=ALICE_cf_sect163k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04c902a91110244d89110034dd2b099c49cbab6c77
+
+PublicKey=MALICE_cf_sect163k1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAB
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect163k1
+PeerKey=MALICE_cf_sect163k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect163k1
+PeerKey=MALICE_cf_sect163k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect163r2 curve tests
+
+PrivateKey=ALICE_cf_sect163r2
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAA8EHDAaAgEBBBUBjCs/M3N31jsAueYrOq21vdETwAI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect163r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBd8Z1/HpA+89hF4I98EST3svWns3BAEbhWmL/fgxk2uu
+YwVrmqhgqH/C
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect163r2:ALICE_cf_sect163r2_PUB
+
+PrivateKey=BOB_cf_sect163r2
+-----BEGIN PRIVATE KEY-----
+MDMCAQAwEAYHKoZIzj0CAQYFK4EEAA8EHDAaAgEBBBUBsiouT9Df+mwHWrpPg1JSrY9nqlI=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect163r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBULqBZ+nhLhDEMYY8NEEzZ126MdxAcFXWv8zmPEH9505
+8vT5zU3aq6HV
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect163r2:BOB_cf_sect163r2_PUB
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect163r2
+PeerKey=BOB_cf_sect163r2_PUB
+SharedSecret=019f829a53c4e6544bdec1395a23082169efaf369d
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect163r2
+PeerKey=ALICE_cf_sect163r2_PUB
+SharedSecret=019f829a53c4e6544bdec1395a23082169efaf369d
+
+# ECC CDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_cf_sect163r2
+PeerKey=BOB_cf_sect163r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=048870d39235ecbc16a000ee478833509b9318a53f
+
+# ECC CDH Bob with Alice peer
+Availablein = default
+Derive=BOB_cf_sect163r2
+PeerKey=ALICE_cf_sect163r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=048870d39235ecbc16a000ee478833509b9318a53f
+
+PublicKey=MALICE_cf_sect163r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsJbhbrfiSdZPSHD
+ZtqJwDlp802l
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Availablein = default
+Derive=BOB_cf_sect163r2
+PeerKey=MALICE_cf_sect163r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Availablein = default
+Derive=ALICE_cf_sect163r2
+PeerKey=MALICE_cf_sect163r2_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect233k1 curve tests
+
+PrivateKey=ALICE_cf_sect233k1
+-----BEGIN PRIVATE KEY-----
+MDsCAQAwEAYHKoZIzj0CAQYFK4EEABoEJDAiAgEBBB0z/3heNFjJL+2sAT/38yRsN3kt2iXz7u+y
+Gua8Kw==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect233k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEALQyn0zJmOrHm4S2EIjxRe899PadBnfpYjLKWGvpAIzf
+MEG861Nv1IYJkmkO1xlfNHeeRtqFgsQVFKZh
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect233k1:ALICE_cf_sect233k1_PUB
+
+PrivateKey=BOB_cf_sect233k1
+-----BEGIN PRIVATE KEY-----
+MDsCAQAwEAYHKoZIzj0CAQYFK4EEABoEJDAiAgEBBB1I0ucrC4d9i6Z+0cbar5r7uKpF5iiQkSJA
+DFMTUA==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect233k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAatdqazxSghJ568CBFyMXhEvVeAiLewOY/jk9H5DAOB4
+ufNGbdd131KLaKPivB38a6n5Y+2BVSJangow
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect233k1:BOB_cf_sect233k1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_sect233k1
+PeerKey=BOB_cf_sect233k1_PUB
+SharedSecret=012145026e8de65973c154e085456fc5539ba9e25663e7f5816abfcab310
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_sect233k1
+PeerKey=ALICE_cf_sect233k1_PUB
+SharedSecret=012145026e8de65973c154e085456fc5539ba9e25663e7f5816abfcab310
+
+# ECC CDH Alice with Bob peer
+Derive=ALICE_cf_sect233k1
+PeerKey=BOB_cf_sect233k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00ff7d6c6b80f39d2ae68fbd00adbcd75fa599ed0bc1aac0e3f49c1c164d
+
+# ECC CDH Bob with Alice peer
+Derive=BOB_cf_sect233k1
+PeerKey=ALICE_cf_sect233k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00ff7d6c6b80f39d2ae68fbd00adbcd75fa599ed0bc1aac0e3f49c1c164d
+
+PublicKey=MALICE_cf_sect233k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Derive=BOB_cf_sect233k1
+PeerKey=MALICE_cf_sect233k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Derive=ALICE_cf_sect233k1
+PeerKey=MALICE_cf_sect233k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect233r1 curve tests
+
+PrivateKey=ALICE_cf_sect233r1
+-----BEGIN PRIVATE KEY-----
+MDwCAQAwEAYHKoZIzj0CAQYFK4EEABsEJTAjAgEBBB4ATcy7zVpIsJ9rl5EIDmzRz5wxjrDIQyDm
+HP3Pt8Y=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect233r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAQMQHiJ44LiCnZkEg1zyww1h+idTbsw8E07P33WUAUfD
+NeQ4hWEhTXPnytIbEhFKpnd3j/FbyZnJqxh8
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect233r1:ALICE_cf_sect233r1_PUB
+
+PrivateKey=BOB_cf_sect233r1
+-----BEGIN PRIVATE KEY-----
+MDwCAQAwEAYHKoZIzj0CAQYFK4EEABsEJTAjAgEBBB4ALpOlFn4OfiIAkRAZGOsn7L6W3XoQBSV8
+mQVC2pw=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect233r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAJQw+NWqFJXYw4dVMovzvw76OYnYOTaDaEPNW8ECAQbl
+TzzbBSTp5iqM13mP0/Bo4OO66NS3lA9e/GTO
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect233r1:BOB_cf_sect233r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_sect233r1
+PeerKey=BOB_cf_sect233r1_PUB
+SharedSecret=00209d2995a63f1e8b7a5c33dee5abb602e32e1835ae8bb57eb264d8d795
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_sect233r1
+PeerKey=ALICE_cf_sect233r1_PUB
+SharedSecret=00209d2995a63f1e8b7a5c33dee5abb602e32e1835ae8bb57eb264d8d795
+
+# ECC CDH Alice with Bob peer
+Derive=ALICE_cf_sect233r1
+PeerKey=BOB_cf_sect233r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00c3cd1d38a65f5e421399409a76cec1136bc84149f054a7f55e7980c612
+
+# ECC CDH Bob with Alice peer
+Derive=BOB_cf_sect233r1
+PeerKey=ALICE_cf_sect233r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00c3cd1d38a65f5e421399409a76cec1136bc84149f054a7f55e7980c612
+
+PublicKey=MALICE_cf_sect233r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYf4
+Vie5eHTnR+4x4G1xyq7qUvISU+X5RtBh2pE4
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Derive=BOB_cf_sect233r1
+PeerKey=MALICE_cf_sect233r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Derive=ALICE_cf_sect233r1
+PeerKey=MALICE_cf_sect233r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect283k1 curve tests
+
+PrivateKey=ALICE_cf_sect283k1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwEAYHKoZIzj0CAQYFK4EEABAEKzApAgEBBCQAY1Mi9rST7PiP1t03qYRczV/kSZ+VjQu8
+5EFCgxyvkaLManw=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect283k1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBMjBO8WoxHS/vz8po52WZGxS+RK5yolrUe6tfbAMA3Sd
+5/JjBDVjOz95vM4gUnqzUWHN5nKBQtj6HiU9Q/R+zqg98OiQKTyA
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect283k1:ALICE_cf_sect283k1_PUB
+
+PrivateKey=BOB_cf_sect283k1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwEAYHKoZIzj0CAQYFK4EEABAEKzApAgEBBCQBCZC8Is+YSjgXJBBDioEl6gu14QpGHllD
+1J6957vBTPSQdH0=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect283k1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAGEQKZVHYAlvtjHrFyZVm12qUb5j+T5/WNoC962+kwUM
+QkBYA5BpuG8Knlugq1iB31whPAgRCZfdLKHpHRPJSfXvKyUIdeUm
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect283k1:BOB_cf_sect283k1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_sect283k1
+PeerKey=BOB_cf_sect283k1_PUB
+SharedSecret=03f67c88bdc230b43773d17fdb4d0a980556d074ceccee726932160e4ed965e3be72803c
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_sect283k1
+PeerKey=ALICE_cf_sect283k1_PUB
+SharedSecret=03f67c88bdc230b43773d17fdb4d0a980556d074ceccee726932160e4ed965e3be72803c
+
+# ECC CDH Alice with Bob peer
+Derive=ALICE_cf_sect283k1
+PeerKey=BOB_cf_sect283k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0677ba01c84d139609ca145cb5b6079fc9ca67f59c9c913e47cad1073f1d1dfaddde0169
+
+# ECC CDH Bob with Alice peer
+Derive=BOB_cf_sect283k1
+PeerKey=ALICE_cf_sect283k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0677ba01c84d139609ca145cb5b6079fc9ca67f59c9c913e47cad1073f1d1dfaddde0169
+
+PublicKey=MALICE_cf_sect283k1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Derive=BOB_cf_sect283k1
+PeerKey=MALICE_cf_sect283k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Derive=ALICE_cf_sect283k1
+PeerKey=MALICE_cf_sect283k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect283r1 curve tests
+
+PrivateKey=ALICE_cf_sect283r1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwEAYHKoZIzj0CAQYFK4EEABEEKzApAgEBBCQCQ5pqKvPxDysd1pi2Bv8Z11cFhsRZfuaf
+4Pi0hpGr4ubZcHE=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect283r1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBcsrGDgO7pbGybQX/00gRHtQq3+X9XrGb7Uzv9Nabwc/
+kntnBMF0I2KU+aaTjQx1GVtmNf7CvFwPLEBnfKjJAjekjsGyIqoq
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect283r1:ALICE_cf_sect283r1_PUB
+
+PrivateKey=BOB_cf_sect283r1
+-----BEGIN PRIVATE KEY-----
+MEICAQAwEAYHKoZIzj0CAQYFK4EEABEEKzApAgEBBCQDxItnY3cDCrX/jGnVuAKDPaySZCr3E83Q
+UdFnP6YIykt7+Pg=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect283r1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBJ2C9BCkX0YRfs2ufgUKvreUXFWp2AGK+iHlZB4N3LqO
+PKpmAkrAeCMty6mw2mEnOR5HA1d4Ee+z7/NJgJJ80Ra9bFnreOW3
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect283r1:BOB_cf_sect283r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_sect283r1
+PeerKey=BOB_cf_sect283r1_PUB
+SharedSecret=0424259cf09727574fb863cab7c27d8fe3835e96433110a45a951f94347fc81939ec4773
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_sect283r1
+PeerKey=ALICE_cf_sect283r1_PUB
+SharedSecret=0424259cf09727574fb863cab7c27d8fe3835e96433110a45a951f94347fc81939ec4773
+
+# ECC CDH Alice with Bob peer
+Derive=ALICE_cf_sect283r1
+PeerKey=BOB_cf_sect283r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01c2a542654ce85b17456ed75b6bca6b6eb761580913670debc426a3525f236df0e875c8
+
+# ECC CDH Bob with Alice peer
+Derive=BOB_cf_sect283r1
+PeerKey=ALICE_cf_sect283r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01c2a542654ce85b17456ed75b6bca6b6eb761580913670debc426a3525f236df0e875c8
+
+PublicKey=MALICE_cf_sect283r1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAByvMnFeSsevoGYMIn7b4NaL9IgowRCTKF8CCrhdEKu3pubP2
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Derive=BOB_cf_sect283r1
+PeerKey=MALICE_cf_sect283r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Derive=ALICE_cf_sect283r1
+PeerKey=MALICE_cf_sect283r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect409k1 curve tests
+
+PrivateKey=ALICE_cf_sect409k1
+-----BEGIN PRIVATE KEY-----
+MFECAQAwEAYHKoZIzj0CAQYFK4EEACQEOjA4AgEBBDMOthcLahkXFgM0wjOzm767D1A72sFRGlhb
+bVH+EB7z2WpIcPX4OD+M4Y1pf/a7wSaoSAo=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect409k1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAbiYYpeFgCMsZFMzQaiwMJDrC+mCMT7KmhYtD5EMMgLW
+5OvhaqYdpRf49A8LOtVcRT7J5gGcMrXQgmQeS3FenA5owWnB2NIgrTNf5d8AAEtrOupsJ4c3kL6e
+aAzayZ1+UCEj8skbC9U=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect409k1:ALICE_cf_sect409k1_PUB
+
+PrivateKey=BOB_cf_sect409k1
+-----BEGIN PRIVATE KEY-----
+MFECAQAwEAYHKoZIzj0CAQYFK4EEACQEOjA4AgEBBDMO43ldQllTewdZwffH4OEXdzBrLwabKsn4
+6/hjgIAaYda/pt4yCEQLMp18QgtfMey5ENI=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect409k1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAVTQj6hRizVmOx4Z6vroN/zMkmAY+QhkQ0CnFeJ0AydY
+Fv+f+/420vMC1Mhqsc9VzPMmIAH6ZrgGKDsd4Ce9JUtYE0rVhGeiG2RaN1U5RlhVK4avkWhFlyQ5
+vuu4aApQiWE3yQd9v/I=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect409k1:BOB_cf_sect409k1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_sect409k1
+PeerKey=BOB_cf_sect409k1_PUB
+SharedSecret=01fbe13188588c9d1ac3a8a2680ea9a009b28e4b7d7fa4efcb1a22553876fb7973616819fd87c75e5b8ce6e3628595e4ce12edb0
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_sect409k1
+PeerKey=ALICE_cf_sect409k1_PUB
+SharedSecret=01fbe13188588c9d1ac3a8a2680ea9a009b28e4b7d7fa4efcb1a22553876fb7973616819fd87c75e5b8ce6e3628595e4ce12edb0
+
+# ECC CDH Alice with Bob peer
+Derive=ALICE_cf_sect409k1
+PeerKey=BOB_cf_sect409k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=007e9485f7234bb2255bb40e51f4be867cb0ef31f8e489a697b31b51c4d5346daaee51e96ae6f9636e6e3af56095fe28755325ee
+
+# ECC CDH Bob with Alice peer
+Derive=BOB_cf_sect409k1
+PeerKey=ALICE_cf_sect409k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=007e9485f7234bb2255bb40e51f4be867cb0ef31f8e489a697b31b51c4d5346daaee51e96ae6f9636e6e3af56095fe28755325ee
+
+PublicKey=MALICE_cf_sect409k1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAA=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Derive=BOB_cf_sect409k1
+PeerKey=MALICE_cf_sect409k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Derive=ALICE_cf_sect409k1
+PeerKey=MALICE_cf_sect409k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect409r1 curve tests
+
+PrivateKey=ALICE_cf_sect409r1
+-----BEGIN PRIVATE KEY-----
+MFICAQAwEAYHKoZIzj0CAQYFK4EEACUEOzA5AgEBBDQAxSC9lST5dtfXQI1Ug9VMMoue3GGni5ON
++gieyXK2KKbd29KAPs4/AOd8kX2wQDsZPO7E
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect409r1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEASAvXAM15DJerAu1JttpBuMJK1/fEfFohu2iEpt3r7Ui
+iQoER6HUsWiw1hhcJyTv7WzpJQHFWrOlJMe/KjmQa/CygSc65YHDzG27oUL+KGdQUGc79ZRSwl/q
+fGZqa3D+bDVMwrhmZto=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect409r1:ALICE_cf_sect409r1_PUB
+
+PrivateKey=BOB_cf_sect409r1
+-----BEGIN PRIVATE KEY-----
+MFICAQAwEAYHKoZIzj0CAQYFK4EEACUEOzA5AgEBBDQARen+1P3JQzBgOv0pUYwsZTPRVLpqqDAU
+7mKL2lk9eH7zSGmtNoMvP2m1S2dBnXxFY/bV
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect409r1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAbDUw066TtdfOpDvrlKosEyqUNEG7rY+AKvDqKw+HOzf
+sUTYee6cEf71oqJ1sCKPQiYzlwCu/HLQeWPxISE6Uo+53kkeJml2xpMBwoE25Gq/DSS61dR7SRTZ
++sUmumbIuGzbrjtMRmw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect409r1:BOB_cf_sect409r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_sect409r1
+PeerKey=BOB_cf_sect409r1_PUB
+SharedSecret=00a751259cdb3b445ce71a40a01a2189dfce70226111190505fc6eabe4e5a05bff7af55f2015e1ffcab6aea7ea9a6e74905da2a1
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_sect409r1
+PeerKey=ALICE_cf_sect409r1_PUB
+SharedSecret=00a751259cdb3b445ce71a40a01a2189dfce70226111190505fc6eabe4e5a05bff7af55f2015e1ffcab6aea7ea9a6e74905da2a1
+
+# ECC CDH Alice with Bob peer
+Derive=ALICE_cf_sect409r1
+PeerKey=BOB_cf_sect409r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0115a31aed416c5089d74a263ec300aff13a5329c6ad27de950ae0b0917b40a3464fccf5691ac9633a51e5177a82b15cfc434aad
+
+# ECC CDH Bob with Alice peer
+Derive=BOB_cf_sect409r1
+PeerKey=ALICE_cf_sect409r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0115a31aed416c5089d74a263ec300aff13a5329c6ad27de950ae0b0917b40a3464fccf5691ac9633a51e5177a82b15cfc434aad
+
+PublicKey=MALICE_cf_sect409r1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAACZNffkdo7i7yL5tKKfU8tdk6su0K185XwbJkn96JWVDPZXZ3My
+bFKKSOJ7hyrM8Lwl1e8=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Derive=BOB_cf_sect409r1
+PeerKey=MALICE_cf_sect409r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Derive=ALICE_cf_sect409r1
+PeerKey=MALICE_cf_sect409r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect571k1 curve tests
+
+PrivateKey=ALICE_cf_sect571k1
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEAYHKoZIzj0CAQYFK4EEACYETzBNAgEBBEgB4agvk7Qdf9bVb9aMVdtXL0MuVw6dTleB
+zrpPMYty/piI5GWkQEGVp4OJSjF1BGgWmtYSYlV0oI8jJ7hfWTjVGfVWix4ipb8=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect571k1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQDUZq0ZrgYpTXNpOptjExaur0K9FAYHv1j9cvAptwX
+dcmQf3VqekMkGZCfNdqNeqCajG3QHRkBHe4FZhWr3FXi8whvvr463lUDf+t46un1kE6FTYfhILGa
+sBZm7OdfkarYd9TXBbmnkFA+XkyPlkM1+6daM3/WmnegK+TYghFDXLgwiyF8s0ElllF7z38Gmc4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect571k1:ALICE_cf_sect571k1_PUB
+
+PrivateKey=BOB_cf_sect571k1
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEAYHKoZIzj0CAQYFK4EEACYETzBNAgEBBEgA3pINxGOI7L9M+Mil+bm/udPwI4xu7ubJ
+p3aoOepTXW94laf8wjFLcQnRUwH87Vbq9VLQEfCAFvr2vZoBc+5asnNuDhRNNeQ=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect571k1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQDZRr5GCSq2uzGxmWNB+bED7zye18Rr/KehwXrbn1r
+rKtR8fe+dg2V15FieC3qZe/wCpMtyp79VmEabGi6iGLlAN/rUE81URsA/K7GVpmklslV5gmwryR0
+3E7jGKPFesun9iNtmpgM18P9y3aJd4Qr4hMlwW2Nyw187l6QB/W2e/i+8vKXFTLHlz5WLAyAcpA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect571k1:BOB_cf_sect571k1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_sect571k1
+PeerKey=BOB_cf_sect571k1_PUB
+SharedSecret=02b79c92cee50dc5b9fdddce36d4fa2e28d7d178cd74e575961f39429496305b38815c840c2e66327435c044ed885ec964068531251a2112717602532e8b6d5411db2fe05c1ac18c
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_sect571k1
+PeerKey=ALICE_cf_sect571k1_PUB
+SharedSecret=02b79c92cee50dc5b9fdddce36d4fa2e28d7d178cd74e575961f39429496305b38815c840c2e66327435c044ed885ec964068531251a2112717602532e8b6d5411db2fe05c1ac18c
+
+# ECC CDH Alice with Bob peer
+Derive=ALICE_cf_sect571k1
+PeerKey=BOB_cf_sect571k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=063aea789492c9727a5a6b7f24e8d3d377c70ee8e86b13664e191a53b1905e90e78b85960b1881db5160c7c5cacca0d686d9e104140d565eeeec17426f93d3a7ba639ecd716b43d2
+
+# ECC CDH Bob with Alice peer
+Derive=BOB_cf_sect571k1
+PeerKey=ALICE_cf_sect571k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=063aea789492c9727a5a6b7f24e8d3d377c70ee8e86b13664e191a53b1905e90e78b85960b1881db5160c7c5cacca0d686d9e104140d565eeeec17426f93d3a7ba639ecd716b43d2
+
+PublicKey=MALICE_cf_sect571k1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Derive=BOB_cf_sect571k1
+PeerKey=MALICE_cf_sect571k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Derive=ALICE_cf_sect571k1
+PeerKey=MALICE_cf_sect571k1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+Title=sect571r1 curve tests
+
+PrivateKey=ALICE_cf_sect571r1
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEAYHKoZIzj0CAQYFK4EEACcETzBNAgEBBEgAxfL2/gUsmJonvDMR95Azq1ySgXMlKSRk
++PL+WaS92ZyOo45HaC7RpH5sdkf4b948u6y1BXOxGZuORXy6lgbgZ1Zx2UgL3cI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_cf_sect571r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQBK5L9ccIWacU2A1srZ35opPu6kcbEOsBPmvj/rlMS
+fFrdMOcagOYfcD0/ouYHPhvkHbr9k87IlQJfnV6ZNRA4PmWSp/FjkNwETm/fqTCUQHti/qqnKH7R
+Ed4fYROLFGvz+PX6E20SryOt1vrmoRyC7Z5FVmgMVOQQ1AaBNAHi3+IPtKx41YdXdbqHJxuI5jE=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ALICE_cf_sect571r1:ALICE_cf_sect571r1_PUB
+
+PrivateKey=BOB_cf_sect571r1
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEAYHKoZIzj0CAQYFK4EEACcETzBNAgEBBEgAzcRvASPpWi0ybpOGlj0Lozz01C2a5oDA
+G5alib1EmZKcpVULxJXn75FQlTKpkUEuWUgA4yk5X5DTiScUuh4LDhaF3AFhsEY=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_cf_sect571r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQH3dnL22NajtqDWTX6qD14w1BOlpHFBUPTr24VySlh
+kiiBlOF95u7hFr/hSb7gm/3f+IVKyE18Sh2kR4KaxWcPWKY5xKTiqiICT7hCistuzNRt8gR+kNOT
+c1rETMV6ZruZinwzEWWWjwJf6612oy2HG3CX3B8Rm+a3sS0q6IzowEwqmDv6v9bMTFk8bsCv0Fk=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=BOB_cf_sect571r1:BOB_cf_sect571r1_PUB
+
+# ECDH Alice with Bob peer
+Derive=ALICE_cf_sect571r1
+PeerKey=BOB_cf_sect571r1_PUB
+SharedSecret=0031f9879fa75b8c67ba81ee861be634e2b53aa79f834e9a8ca4df7f4461bcb02f083d9fa5b4767f881a710caa6524b58eb626623ba394961d46535204c26d165089e7d4f7be1827
+
+# ECDH Bob with Alice peer
+Derive=BOB_cf_sect571r1
+PeerKey=ALICE_cf_sect571r1_PUB
+SharedSecret=0031f9879fa75b8c67ba81ee861be634e2b53aa79f834e9a8ca4df7f4461bcb02f083d9fa5b4767f881a710caa6524b58eb626623ba394961d46535204c26d165089e7d4f7be1827
+
+# ECC CDH Alice with Bob peer
+Derive=ALICE_cf_sect571r1
+PeerKey=BOB_cf_sect571r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=012e8c2c1554988fe20c5ae7d11cdcfe15c7c6e8d2b6f46a43a45d724bfc7b415ea7594d5c16f770a95d6e65bbcb1f34619db95e89f4fecbcb0bc6a3f92d52df6a49b0e7773e0ac0
+
+# ECC CDH Bob with Alice peer
+Derive=BOB_cf_sect571r1
+PeerKey=ALICE_cf_sect571r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=012e8c2c1554988fe20c5ae7d11cdcfe15c7c6e8d2b6f46a43a45d724bfc7b415ea7594d5c16f770a95d6e65bbcb1f34619db95e89f4fecbcb0bc6a3f92d52df6a49b0e7773e0ac0
+
+PublicKey=MALICE_cf_sect571r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHMtVWZAwgtd1zmgWN/9WC
+aNQcWRNUKesEHXqhJVkC5jYsSACodKsLYFNrWEYM0gwG8DQONZSn93G+38EM45tkaZsIRDt2HEM=
+-----END PUBLIC KEY-----
+
+# ECC CDH Bob with Malice peer
+Derive=BOB_cf_sect571r1
+PeerKey=MALICE_cf_sect571r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
+
+# ECC CDH Alice with Malice peer
+Derive=ALICE_cf_sect571r1
+PeerKey=MALICE_cf_sect571r1_PUB
+Ctrl=ecdh_cofactor_mode:1
+Result=DERIVE_ERROR
+Reason=point at infinity
diff --git a/test/recipes/30-test_evp_data/evppkey_ecdh.txt b/test/recipes/30-test_evp_data/evppkey_ecdh.txt
new file mode 100644
index 000000000000..d50b2d166eb7
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_ecdh.txt
@@ -0,0 +1,3626 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+
+# Public key algorithm tests
+
+# Private keys used for PKEY operations.
+
+Title = ECDH tests (with random keys)
+
+# TEST CURVE secp112r1
+
+PrivateKey=ALICE_secp112r1
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEAYHKoZIzj0CAQYFK4EEAAYENzA1AgEBBA6sqKp39AWLClus2ha5rqEg
+Ax4ABJ4NTgOR1xQAr3M6eM46WqXW2zA6FnsUMKFFwcw=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp112r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAYDHgAEng1OA5HXFACvczp4zjpapdbbMDoWexQw
+oUXBzA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp112r1:ALICE_secp112r1_PUB
+
+
+PrivateKey=BOB_secp112r1
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEAYHKoZIzj0CAQYFK4EEAAYENzA1AgEBBA5pIbX+hEq49mFPjUl4/6Eg
+Ax4ABBsPNZHm1pcdw104ibwIycCe+r5voeRfQUZRZ3c=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp112r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAYDHgAEGw81kebWlx3DXTiJvAjJwJ76vm+h5F9B
+RlFndw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp112r1:BOB_secp112r1_PUB
+
+
+# ECDH Alice with Bob peer
+Availablein = default
+Derive=ALICE_secp112r1
+PeerKey=BOB_secp112r1_PUB
+SharedSecret=a6cefb5aa7a352afe818749eb401
+
+# ECDH Bob with Alice peer
+Availablein = default
+Derive=BOB_secp112r1
+PeerKey=ALICE_secp112r1_PUB
+SharedSecret=a6cefb5aa7a352afe818749eb401
+
+# TEST CURVE secp112r2
+
+PrivateKey=ALICE_secp112r2
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEAYHKoZIzj0CAQYFK4EEAAcENzA1AgEBBA4gzzblKfE6ZwoUW0FQmaEg
+Ax4ABJJ4L7Vo50NZ5VGZ4nNkxFNcjJQwDIQb1/9IkLE=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp112r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAcDHgAEkngvtWjnQ1nlUZnic2TEU1yMlDAMhBvX
+/0iQsQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp112r2:ALICE_secp112r2_PUB
+
+
+PrivateKey=BOB_secp112r2
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEAYHKoZIzj0CAQYFK4EEAAcENzA1AgEBBA4D9oGGj+O8vjZz3OZNaqEg
+Ax4ABNZOv5gUzvVbgAHpTgu3hUhTQtB8LamTEIfaRWE=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp112r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFK4EEAAcDHgAE1k6/mBTO9VuAAelOC7eFSFNC0HwtqZMQ
+h9pFYQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp112r2:BOB_secp112r2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_secp112r2
+PeerKey=BOB_secp112r2_PUB
+SharedSecret=6bed2c55e233e9214d5898c4c12a
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_secp112r2
+PeerKey=ALICE_secp112r2_PUB
+SharedSecret=6bed2c55e233e9214d5898c4c12a
+
+# TEST CURVE secp128r1
+
+PrivateKey=ALICE_secp128r1
+-----BEGIN PRIVATE KEY-----
+MFQCAQAwEAYHKoZIzj0CAQYFK4EEABwEPTA7AgEBBBCP1c+lxfRT+MZWZ8uGCYYl
+oSQDIgAEH2n0icp87inv7kUYrEFjpZuHJ4DqArhHS+Zfp2XXO1A=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp128r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEABwDIgAEH2n0icp87inv7kUYrEFjpZuHJ4DqArhH
+S+Zfp2XXO1A=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp128r1:ALICE_secp128r1_PUB
+
+
+PrivateKey=BOB_secp128r1
+-----BEGIN PRIVATE KEY-----
+MFQCAQAwEAYHKoZIzj0CAQYFK4EEABwEPTA7AgEBBBCGbEd3Hhwr76XbQekhIrDT
+oSQDIgAENKjS0HNx/gEKYQNNab9v8zlW/D4zSjv3Ny3Ep0GVYms=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp128r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEABwDIgAENKjS0HNx/gEKYQNNab9v8zlW/D4zSjv3
+Ny3Ep0GVYms=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp128r1:BOB_secp128r1_PUB
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_secp128r1
+PeerKey=BOB_secp128r1_PUB
+SharedSecret=91ded46ac404afdbd708fdcc1cac6842
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_secp128r1
+PeerKey=ALICE_secp128r1_PUB
+SharedSecret=91ded46ac404afdbd708fdcc1cac6842
+
+# TEST CURVE secp128r2
+
+PrivateKey=ALICE_secp128r2
+-----BEGIN PRIVATE KEY-----
+MFQCAQAwEAYHKoZIzj0CAQYFK4EEAB0EPTA7AgEBBBAgRKSjPsZ76LDGIA2it5SC
+oSQDIgAEBVdjcUpR+b6LRPm6R8fAD/6kBxV0Kl3939Wn0+nUpf8=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp128r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEAB0DIgAEBVdjcUpR+b6LRPm6R8fAD/6kBxV0Kl39
+39Wn0+nUpf8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp128r2:ALICE_secp128r2_PUB
+
+
+PrivateKey=BOB_secp128r2
+-----BEGIN PRIVATE KEY-----
+MFQCAQAwEAYHKoZIzj0CAQYFK4EEAB0EPTA7AgEBBBACp00jw5D7obvDmJp7wDuA
+oSQDIgAEBO3BbVrc5SvhvN+fmWShu2tWIFQap5ys5RHMCLLl098=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp128r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDYwEAYHKoZIzj0CAQYFK4EEAB0DIgAEBO3BbVrc5SvhvN+fmWShu2tWIFQap5ys
+5RHMCLLl098=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp128r2:BOB_secp128r2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_secp128r2
+PeerKey=BOB_secp128r2_PUB
+SharedSecret=dc32faa978008a694672076b756a1e4b
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_secp128r2
+PeerKey=ALICE_secp128r2_PUB
+SharedSecret=dc32faa978008a694672076b756a1e4b
+
+# TEST CURVE secp160k1
+
+PrivateKey=ALICE_secp160k1
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFK4EEAAkESjBIAgEBBBUAudN3YOXN0uu0CL2TGZdP
+YeNU/72hLAMqAAR3Du0dK28tSyWxYSz/Es2Wqr4C+bNfJ1uiK4J3BFS5Udc48nsx
+xfjj
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp160k1_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAAkDKgAEdw7tHStvLUslsWEs/xLNlqq+AvmzXydb
+oiuCdwRUuVHXOPJ7McX44w==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp160k1:ALICE_secp160k1_PUB
+
+
+PrivateKey=BOB_secp160k1
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFK4EEAAkESjBIAgEBBBUA5fNiCFVGPM1aHuwXUvuh
+xoY2yU+hLAMqAAQHlM6otmapt0/0sc+5bcPoYT6cfyARv4VUOOo6I2eBGXLIm812
+1ric
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp160k1_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAAkDKgAEB5TOqLZmqbdP9LHPuW3D6GE+nH8gEb+F
+VDjqOiNngRlyyJvNdta4nA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp160k1:BOB_secp160k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_secp160k1
+PeerKey=BOB_secp160k1_PUB
+SharedSecret=5457d367346cc3e82031784f95ebcd856de0c735
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_secp160k1
+PeerKey=ALICE_secp160k1_PUB
+SharedSecret=5457d367346cc3e82031784f95ebcd856de0c735
+
+# TEST CURVE secp160r1
+
+PrivateKey=ALICE_secp160r1
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFK4EEAAgESjBIAgEBBBUA0KDtaiFUWd8NG0lO9TLu
+zjLWXJehLAMqAASHQN1DGBXtdyF3+BjfIfbWg403dUqXbIXzZoctDyOPTQaGVblm
+SwXC
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp160r1_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAAgDKgAEh0DdQxgV7Xchd/gY3yH21oONN3VKl2yF
+82aHLQ8jj00GhlW5ZksFwg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp160r1:ALICE_secp160r1_PUB
+
+
+PrivateKey=BOB_secp160r1
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFK4EEAAgESjBIAgEBBBUAsBIwvx6ZABinhsi+bGai
+CvetiuWhLAMqAAQJ2+RhpGedkUYXUiPZ/plHXFBy6R3XzMUGIKiXFGSBpwF8hGRN
+qUDy
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp160r1_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAAgDKgAECdvkYaRnnZFGF1Ij2f6ZR1xQcukd18zF
+BiColxRkgacBfIRkTalA8g==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp160r1:BOB_secp160r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_secp160r1
+PeerKey=BOB_secp160r1_PUB
+SharedSecret=87856536b6a295ea94d3e483d69c6212d5c7afcf
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_secp160r1
+PeerKey=ALICE_secp160r1_PUB
+SharedSecret=87856536b6a295ea94d3e483d69c6212d5c7afcf
+
+# TEST CURVE secp160r2
+
+PrivateKey=ALICE_secp160r2
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFK4EEAB4ESjBIAgEBBBUAhmLOAJGNuSoZUCN4f0On
+LZ6rRSShLAMqAAQPSNvhJQohMEfijXq+Jlq7a9lzosQfPvuIyOg6shyzUVS43R+7
+Lgr5
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp160r2_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAB4DKgAED0jb4SUKITBH4o16viZau2vZc6LEHz77
+iMjoOrIcs1FUuN0fuy4K+Q==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp160r2:ALICE_secp160r2_PUB
+
+
+PrivateKey=BOB_secp160r2
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFK4EEAB4ESjBIAgEBBBUA10mjzR2Dy0CLmm/MTAHT
+b5CBenOhLAMqAARqzYAcSijzAo2vzmMuK8ta8sl/bguuCpRwFD93ACP64TzgI3re
+FhsX
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp160r2_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFK4EEAB4DKgAEas2AHEoo8wKNr85jLivLWvLJf24LrgqU
+cBQ/dwAj+uE84CN63hYbFw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp160r2:BOB_secp160r2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_secp160r2
+PeerKey=BOB_secp160r2_PUB
+SharedSecret=5481e282c47cbd37c84873847c4fc2f31fc15a1a
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_secp160r2
+PeerKey=ALICE_secp160r2_PUB
+SharedSecret=5481e282c47cbd37c84873847c4fc2f31fc15a1a
+
+# TEST CURVE secp192k1
+
+PrivateKey=ALICE_secp192k1
+-----BEGIN PRIVATE KEY-----
+MGwCAQAwEAYHKoZIzj0CAQYFK4EEAB8EVTBTAgEBBBizF3KeHMsaV/KOR/otCmdL
+QT2qGNq3HhWhNAMyAATP+L9SGl3K6wmevkLwJnkMNHp0I5RfXulSfHuHZPp4CGrh
+i6eKNQLkpZ2OQaPIExA=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp192k1_PUB
+-----BEGIN PUBLIC KEY-----
+MEYwEAYHKoZIzj0CAQYFK4EEAB8DMgAEz/i/UhpdyusJnr5C8CZ5DDR6dCOUX17p
+Unx7h2T6eAhq4YunijUC5KWdjkGjyBMQ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp192k1:ALICE_secp192k1_PUB
+
+
+PrivateKey=BOB_secp192k1
+-----BEGIN PRIVATE KEY-----
+MGwCAQAwEAYHKoZIzj0CAQYFK4EEAB8EVTBTAgEBBBh8BXPVGQKYCw0v7DY3wZVa
+cyhyUjIbUymhNAMyAATgI7hw2LSj6uN3yL5nvHOOkMiPtalKr+BGsFac39RYmp64
+mr+w66bDIWN3VllO6LY=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp192k1_PUB
+-----BEGIN PUBLIC KEY-----
+MEYwEAYHKoZIzj0CAQYFK4EEAB8DMgAE4CO4cNi0o+rjd8i+Z7xzjpDIj7WpSq/g
+RrBWnN/UWJqeuJq/sOumwyFjd1ZZTui2
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp192k1:BOB_secp192k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_secp192k1
+PeerKey=BOB_secp192k1_PUB
+SharedSecret=6a4daca0412284172e8fcaafa0d9df76257d899752bf0f23
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_secp192k1
+PeerKey=ALICE_secp192k1_PUB
+SharedSecret=6a4daca0412284172e8fcaafa0d9df76257d899752bf0f23
+
+# TEST CURVE secp224k1
+
+PrivateKey=ALICE_secp224k1
+-----BEGIN PRIVATE KEY-----
+MHkCAQAwEAYHKoZIzj0CAQYFK4EEACAEYjBgAgEBBB0AhXKGJFqOI4P1PLFR3M6M
+kepT/2Dtd27I1Awzx6E8AzoABPVN/1b6VHbq7U6pWaOrUeqJ5vSgWL49u/uuD48D
+4FRf7oFdixN9VWIrxr0PRByeEYmlHw4MOEQK
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp224k1_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACADOgAE9U3/VvpUdurtTqlZo6tR6onm9KBYvj27
++64PjwPgVF/ugV2LE31VYivGvQ9EHJ4RiaUfDgw4RAo=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp224k1:ALICE_secp224k1_PUB
+
+
+PrivateKey=BOB_secp224k1
+-----BEGIN PRIVATE KEY-----
+MHkCAQAwEAYHKoZIzj0CAQYFK4EEACAEYjBgAgEBBB0AOjEXYoz8YcWokSf4U5gX
+HbjDfILPdPejlE0T/KE8AzoABGXAQ+AntX7On4cKwP+f4KzZGaJZwjBq3jCjymsr
+9A3c8VCoRXXBg+VPoKg7fDkMIgI8qPmrC95Q
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp224k1_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACADOgAEZcBD4Ce1fs6fhwrA/5/grNkZolnCMGre
+MKPKayv0DdzxUKhFdcGD5U+gqDt8OQwiAjyo+asL3lA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp224k1:BOB_secp224k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_secp224k1
+PeerKey=BOB_secp224k1_PUB
+SharedSecret=80b65e65fe29c779213dd31189d371ff57b0b2bf08c6458ed142399a
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_secp224k1
+PeerKey=ALICE_secp224k1_PUB
+SharedSecret=80b65e65fe29c779213dd31189d371ff57b0b2bf08c6458ed142399a
+
+# TEST CURVE secp256k1
+
+PrivateKey=ALICE_secp256k1
+-----BEGIN PRIVATE KEY-----
+MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgHCRzy0IcEx6CeA6ogNNK
+SOfuTlHy4fE/LNxkANUS4k+hRANCAASDBmwKklX4OcbZSJJX9mxm1Wr7TPTLpbyp
+xKcKRm0XKNxVlrZU8WQCl66GtX2DDyX+0+XiC3hbaRWcYtg7P6WO
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp256k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEgwZsCpJV+DnG2UiSV/ZsZtVq+0z0y6W8
+qcSnCkZtFyjcVZa2VPFkApeuhrV9gw8l/tPl4gt4W2kVnGLYOz+ljg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp256k1:ALICE_secp256k1_PUB
+
+
+PrivateKey=BOB_secp256k1
+-----BEGIN PRIVATE KEY-----
+MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgChCkFvWtOcrXLmXVGqkR
+0gdntyytjGzEKue5t+IL2lihRANCAAQFQoIckey+Vyh3QwJWUUfKXNbbjWe94yZE
+AWGvI2BfqtWqigZF5VSb5aIXtTPRmwiN0cp30cd77YE5Z+e5bJHU
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp256k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEBUKCHJHsvlcod0MCVlFHylzW241nveMm
+RAFhryNgX6rVqooGReVUm+WiF7Uz0ZsIjdHKd9HHe+2BOWfnuWyR1A==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp256k1:BOB_secp256k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_secp256k1
+PeerKey=BOB_secp256k1_PUB
+SharedSecret=af43b52790082fd87afb1d14b883c12d12bb9e554080d1f8e527920676e31f3e
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_secp256k1
+PeerKey=ALICE_secp256k1_PUB
+SharedSecret=af43b52790082fd87afb1d14b883c12d12bb9e554080d1f8e527920676e31f3e
+
+# TEST CURVE prime192v2
+
+PrivateKey=ALICE_prime192v2
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQIEVTBTAgEBBBgtIuKqpRc7rEYuGx1a
+dDxcvso0NAZw+fWhNAMyAATMSHwJPq761VawpRbKLB3uuDSng4WeFPjhvubL6g8V
+8UqFaKRED5PUIQ0lYStVCao=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_prime192v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQIDMgAEzEh8CT6u+tVWsKUWyiwd7rg0p4OF
+nhT44b7my+oPFfFKhWikRA+T1CENJWErVQmq
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_prime192v2:ALICE_prime192v2_PUB
+
+
+PrivateKey=BOB_prime192v2
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQIEVTBTAgEBBBggTjqWC1/iHrvKR9/u
+1gxpL2tWJkkAMYuhNAMyAASa4nG+wLPTHxfkqiTII5PBLAKXmXUf5dMtpmApcjrj
+XjnwJIJEQr80MK9+g1raqN8=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_prime192v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQIDMgAEmuJxvsCz0x8X5KokyCOTwSwCl5l1
+H+XTLaZgKXI641458CSCREK/NDCvfoNa2qjf
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_prime192v2:BOB_prime192v2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_prime192v2
+PeerKey=BOB_prime192v2_PUB
+SharedSecret=9b37033a48af7fe1825c062625f8b57d4b3ac48c12bec69c
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_prime192v2
+PeerKey=ALICE_prime192v2_PUB
+SharedSecret=9b37033a48af7fe1825c062625f8b57d4b3ac48c12bec69c
+
+# TEST CURVE prime192v3
+
+PrivateKey=ALICE_prime192v3
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQMEVTBTAgEBBBg0iDdcgise1/v2k6js
+UkgKwXPqx/uJJTehNAMyAAQ6/i0pSNHk824XO6Mv0irQfSv2yzGQy+DwWo/klZco
+kPDcXKEdU8ZmnAABH7j6UV8=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_prime192v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAEOv4tKUjR5PNuFzujL9Iq0H0r9ssx
+kMvg8FqP5JWXKJDw3FyhHVPGZpwAAR+4+lFf
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_prime192v3:ALICE_prime192v3_PUB
+
+
+PrivateKey=BOB_prime192v3
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQMEVTBTAgEBBBieW1huqwVU3ev7qgpT
+LFjYEMRPONOAcaKhNAMyAASXaTjBIQX686BZJAidX+hFuvDyxbN1vBQvp40OVl0L
+CG4hoZ+5McLtPATL+osKvX8=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_prime192v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAEl2k4wSEF+vOgWSQInV/oRbrw8sWz
+dbwUL6eNDlZdCwhuIaGfuTHC7TwEy/qLCr1/
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_prime192v3:BOB_prime192v3_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_prime192v3
+PeerKey=BOB_prime192v3_PUB
+SharedSecret=7133f1d99b0e03ed9c4d78d3be40598cf419cd588283ac29
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_prime192v3
+PeerKey=ALICE_prime192v3_PUB
+SharedSecret=7133f1d99b0e03ed9c4d78d3be40598cf419cd588283ac29
+
+# TEST CURVE prime239v1
+
+PrivateKey=ALICE_prime239v1
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwEEBGcwZQIBAQQeRmiZXaqr3u11hiGK
+1cH75U/rKc1+8YMqxcXhACRkoUADPgAEfIJpVggCXUROHgX4h5h66/0Pgr/aMtMq
+ExHQP7zxWYzf3cYAP4V/t9OCT582WjMLnCmdlFnYUPD50dyU
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_prime239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQQDPgAEfIJpVggCXUROHgX4h5h66/0Pgr/a
+MtMqExHQP7zxWYzf3cYAP4V/t9OCT582WjMLnCmdlFnYUPD50dyU
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_prime239v1:ALICE_prime239v1_PUB
+
+
+PrivateKey=BOB_prime239v1
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwEEBGcwZQIBAQQeAbGRRoBgqHVUBFot
+5m9Ytm8RU+ISkA33VgQrHGM/oUADPgAEdRgPsL/Mi3ucJcYibvFJQxDDyLqgUH3i
+Mk266RAHFqoioiGT72TOidBhi+VrUn6NOIyna8foww2M45vR
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_prime239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQQDPgAEdRgPsL/Mi3ucJcYibvFJQxDDyLqg
+UH3iMk266RAHFqoioiGT72TOidBhi+VrUn6NOIyna8foww2M45vR
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_prime239v1:BOB_prime239v1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_prime239v1
+PeerKey=BOB_prime239v1_PUB
+SharedSecret=2ef92070f7a5fa14c8a67a8aa3080b4c4a597eafaa81d3f698599ac0be1e
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_prime239v1
+PeerKey=ALICE_prime239v1_PUB
+SharedSecret=2ef92070f7a5fa14c8a67a8aa3080b4c4a597eafaa81d3f698599ac0be1e
+
+# TEST CURVE prime239v2
+
+PrivateKey=ALICE_prime239v2
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwEFBGcwZQIBAQQeemq6S5puHF94ZW/W
+6BMRim+HFFM0zxVZQpWG+bf2oUADPgAELukUodCQsmwzGVR3lLEGKQ6quGd6kDXN
+DjjcMrDabBtWKDuuUrgjBGsI7NRbCQ0a5NWTo+EnWe0LXbYN
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_prime239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQUDPgAELukUodCQsmwzGVR3lLEGKQ6quGd6
+kDXNDjjcMrDabBtWKDuuUrgjBGsI7NRbCQ0a5NWTo+EnWe0LXbYN
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_prime239v2:ALICE_prime239v2_PUB
+
+
+PrivateKey=BOB_prime239v2
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwEFBGcwZQIBAQQeAEaCw7ulF8GZcmbj
+aDmcrw8Gex+hX0rNvwzoC7+6oUADPgAEKh0EmYUpj6XbuEGxMBaPmECT8L++ihUW
+ms4xau0RUYij4HgS1gjSMDfyvvCBUy10RIkw+goxVdUhfW2u
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_prime239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQUDPgAEKh0EmYUpj6XbuEGxMBaPmECT8L++
+ihUWms4xau0RUYij4HgS1gjSMDfyvvCBUy10RIkw+goxVdUhfW2u
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_prime239v2:BOB_prime239v2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_prime239v2
+PeerKey=BOB_prime239v2_PUB
+SharedSecret=5bdab282dc371ee88ade318a6aad2b329ec3ea957e0df18b7a691c1bf703
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_prime239v2
+PeerKey=ALICE_prime239v2_PUB
+SharedSecret=5bdab282dc371ee88ade318a6aad2b329ec3ea957e0df18b7a691c1bf703
+
+# TEST CURVE prime239v3
+
+PrivateKey=ALICE_prime239v3
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwEGBGcwZQIBAQQeGlwSPAYfmiP9r2nA
+SD52VqKyZpEnU+Jmynlf2DI7oUADPgAEFlIB4Yl+5J2u4JLYv8z+itwf+XnOL/BD
+qNK3uRoYPKHYdYWJkgXxkQ1QDZwNppAQRcxSgTKnJ6V8crbp
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_prime239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQYDPgAEFlIB4Yl+5J2u4JLYv8z+itwf+XnO
+L/BDqNK3uRoYPKHYdYWJkgXxkQ1QDZwNppAQRcxSgTKnJ6V8crbp
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_prime239v3:ALICE_prime239v3_PUB
+
+
+PrivateKey=BOB_prime239v3
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwEGBGcwZQIBAQQeU1KIfJBGvItr8//g
+kW1zoPkveo9lvXBlnUV5/5rDoUADPgAEepc03AEEgOnI+ivpjGV4ypvn8sRQaVAb
+3QAeIEYDQLUBFOdb3kF2MvlnLKV3OCdB3GQgNfZtEHbdn0bq
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_prime239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAQYDPgAEepc03AEEgOnI+ivpjGV4ypvn8sRQ
+aVAb3QAeIEYDQLUBFOdb3kF2MvlnLKV3OCdB3GQgNfZtEHbdn0bq
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_prime239v3:BOB_prime239v3_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_prime239v3
+PeerKey=BOB_prime239v3_PUB
+SharedSecret=78e80ae760061178bd005e9e3634333971468bc6d3f82baee238c5ed32f9
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_prime239v3
+PeerKey=ALICE_prime239v3_PUB
+SharedSecret=78e80ae760061178bd005e9e3634333971468bc6d3f82baee238c5ed32f9
+
+# TEST CURVE sect113r1
+
+PrivateKey=ALICE_sect113r1
+-----BEGIN PRIVATE KEY-----
+MFECAQAwEAYHKoZIzj0CAQYFK4EEAAQEOjA4AgEBBA8AcrP9u8BlWb4knkGVZmSh
+IgMgAAQBviTf62+1V4etJb2D9LkBadAFmdmRS+rVI3spTYs=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect113r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAQDIAAEAb4k3+tvtVeHrSW9g/S5AWnQBZnZkUvq
+1SN7KU2L
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect113r1:ALICE_sect113r1_PUB
+
+
+PrivateKey=BOB_sect113r1
+-----BEGIN PRIVATE KEY-----
+MFECAQAwEAYHKoZIzj0CAQYFK4EEAAQEOjA4AgEBBA8AmhEq3A9KdbKQUz1F/Myh
+IgMgAAQAuSRBNxXjIjezwrGF8VkBxWR69g0UJaBIIArpdNo=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect113r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAQDIAAEALkkQTcV4yI3s8KxhfFZAcVkevYNFCWg
+SCAK6XTa
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect113r1:BOB_sect113r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect113r1
+PeerKey=BOB_sect113r1_PUB
+SharedSecret=015405437add26b8841c62a9016c85
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect113r1
+PeerKey=ALICE_sect113r1_PUB
+SharedSecret=015405437add26b8841c62a9016c85
+
+# TEST CURVE sect113r2
+
+PrivateKey=ALICE_sect113r2
+-----BEGIN PRIVATE KEY-----
+MFECAQAwEAYHKoZIzj0CAQYFK4EEAAUEOjA4AgEBBA8ABqFZ6Z7BKKjvrzXh99Wh
+IgMgAAQBTQTHA9uSxcZ8kvsSVUUBcLQ4m45U10VwVCQ+oGQ=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect113r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAUDIAAEAU0ExwPbksXGfJL7ElVFAXC0OJuOVNdF
+cFQkPqBk
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect113r2:ALICE_sect113r2_PUB
+
+
+PrivateKey=BOB_sect113r2
+-----BEGIN PRIVATE KEY-----
+MFECAQAwEAYHKoZIzj0CAQYFK4EEAAUEOjA4AgEBBA8ABPHhZ0kCp0TocQJIuiuh
+IgMgAAQBSi7u+Ur776iGyg0Ij6UAN70IzPVZxGK5zPxp6wo=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect113r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFK4EEAAUDIAAEAUou7vlK+++ohsoNCI+lADe9CMz1WcRi
+ucz8aesK
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect113r2:BOB_sect113r2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect113r2
+PeerKey=BOB_sect113r2_PUB
+SharedSecret=014231c5e9e28d451aa44a755407e1
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect113r2
+PeerKey=ALICE_sect113r2_PUB
+SharedSecret=014231c5e9e28d451aa44a755407e1
+
+# TEST CURVE sect131r1
+
+PrivateKey=ALICE_sect131r1
+-----BEGIN PRIVATE KEY-----
+MFcCAQAwEAYHKoZIzj0CAQYFK4EEABYEQDA+AgEBBBEAUCFDwJLLThLHiDlw/Qcn
+8aEmAyQABAAU+ywF9iPv6LDldKOLhLgXBRI7EpZnbXPXhUmkQWPhHAQ=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect131r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABYDJAAEABT7LAX2I+/osOV0o4uEuBcFEjsSlmdt
+c9eFSaRBY+EcBA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect131r1:ALICE_sect131r1_PUB
+
+
+PrivateKey=BOB_sect131r1
+-----BEGIN PRIVATE KEY-----
+MFcCAQAwEAYHKoZIzj0CAQYFK4EEABYEQDA+AgEBBBEDxxMzxjxJmYfSZvWJKq+V
+vKEmAyQABAFHQ2a+h+Yn5N4Lt0IoJcVVBrf9xkZNS0xxblh+0wndq9s=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect131r1_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABYDJAAEAUdDZr6H5ifk3gu3QiglxVUGt/3GRk1L
+THFuWH7TCd2r2w==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect131r1:BOB_sect131r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect131r1
+PeerKey=BOB_sect131r1_PUB
+SharedSecret=009e4acc8c1ba3a129a9ad83a733d7d702
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect131r1
+PeerKey=ALICE_sect131r1_PUB
+SharedSecret=009e4acc8c1ba3a129a9ad83a733d7d702
+
+# TEST CURVE sect131r2
+
+PrivateKey=ALICE_sect131r2
+-----BEGIN PRIVATE KEY-----
+MFcCAQAwEAYHKoZIzj0CAQYFK4EEABcEQDA+AgEBBBEDHPPtQCKJB8g01rMkT8Sk
+9aEmAyQABAcWl2Z/1kIc4mWCbRH4+c/2B47RC31JyifKvkxkHt05x3g=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect131r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABcDJAAEBxaXZn/WQhziZYJtEfj5z/YHjtELfUnK
+J8q+TGQe3TnHeA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect131r2:ALICE_sect131r2_PUB
+
+
+PrivateKey=BOB_sect131r2
+-----BEGIN PRIVATE KEY-----
+MFcCAQAwEAYHKoZIzj0CAQYFK4EEABcEQDA+AgEBBBEDR9ez/YtS29S7/R5+rUiX
+VKEmAyQABALZHNBITDoigpOwTzczlaN9AsRk5JzMUJXYkvBEqj+YILQ=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect131r2_PUB
+-----BEGIN PUBLIC KEY-----
+MDgwEAYHKoZIzj0CAQYFK4EEABcDJAAEAtkc0EhMOiKCk7BPNzOVo30CxGTknMxQ
+ldiS8ESqP5ggtA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect131r2:BOB_sect131r2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect131r2
+PeerKey=BOB_sect131r2_PUB
+SharedSecret=03cbec3a3050c7f13d4801ad692d61c417
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect131r2
+PeerKey=ALICE_sect131r2_PUB
+SharedSecret=03cbec3a3050c7f13d4801ad692d61c417
+
+# TEST CURVE sect163r1
+
+PrivateKey=ALICE_sect163r1
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAIETDBKAgEBBBUBl9zmlPmFF5v9h1IIENAx
+1b8tj0+hLgMsAAQE3j8Jn58CCtEDwvOZ5DwgYGBYvIECz1zN8UwPfTFSdXjTWQcr
+9gWxNMA=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect163r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAIDLAAEBN4/CZ+fAgrRA8LzmeQ8IGBgWLyBAs9c
+zfFMD30xUnV401kHK/YFsTTA
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect163r1:ALICE_sect163r1_PUB
+
+
+PrivateKey=BOB_sect163r1
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAIETDBKAgEBBBUA/nzN5yCavvZlXyDGEihW
+rwG360+hLgMsAAQDt6XZHfzXABSTnGhzfoPtfdLZgaoGhBdeWz+318vNmC6AMJP+
+PntHzsA=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect163r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAIDLAAEA7el2R381wAUk5xoc36D7X3S2YGqBoQX
+Xls/t9fLzZgugDCT/j57R87A
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect163r1:BOB_sect163r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein=default
+Derive=ALICE_sect163r1
+PeerKey=BOB_sect163r1_PUB
+SharedSecret=02355c765bbc07fcc44bb1496e490912f6df56e6d4
+
+# ECDH Bob with Alice peer
+
+Availablein=default
+Derive=BOB_sect163r1
+PeerKey=ALICE_sect163r1_PUB
+SharedSecret=02355c765bbc07fcc44bb1496e490912f6df56e6d4
+
+# TEST CURVE sect193r1
+
+PrivateKey=ALICE_sect193r1
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEAYHKoZIzj0CAQYFK4EEABgEWDBWAgEBBBkAEQlofBlvj8zDK5o4CCfA
+aOQOmlAyTimBoTYDNAAEAKBcyRBxQDZTvpPM39ZVXYQS5aJwZfUnNwBn5T26m15R
+M4MLnYGdklcAM8oMOML999w=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect193r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABgDNAAEAKBcyRBxQDZTvpPM39ZVXYQS5aJwZfUn
+NwBn5T26m15RM4MLnYGdklcAM8oMOML999w=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect193r1:ALICE_sect193r1_PUB
+
+
+PrivateKey=BOB_sect193r1
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEAYHKoZIzj0CAQYFK4EEABgEWDBWAgEBBBkAnxvYLKZaw4Rj24WTRBfg
+iar5vp3R3pCJoTYDNAAEAXw0PWt3PtZT5v9aH0o6WnFtFGOBNEUpYQE/jBjzUHIC
+qMNZTHy9gT2R9yc0GBZ/Dic=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect193r1_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABgDNAAEAXw0PWt3PtZT5v9aH0o6WnFtFGOBNEUp
+YQE/jBjzUHICqMNZTHy9gT2R9yc0GBZ/Dic=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect193r1:BOB_sect193r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein=default
+Derive=ALICE_sect193r1
+PeerKey=BOB_sect193r1_PUB
+SharedSecret=00458b4c5ad122de5a377bea0adf1ab87bcb961b24ed764f47
+
+# ECDH Bob with Alice peer
+
+Availablein=default
+Derive=BOB_sect193r1
+PeerKey=ALICE_sect193r1_PUB
+SharedSecret=00458b4c5ad122de5a377bea0adf1ab87bcb961b24ed764f47
+
+# TEST CURVE sect193r2
+
+PrivateKey=ALICE_sect193r2
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEAYHKoZIzj0CAQYFK4EEABkEWDBWAgEBBBkAj54XQW+b3bnX9duvqaa+
+lPTNcvOlxRAvoTYDNAAEAHhW6xjH4TNPs/e12tsZcsGD+a92kAWkwQFc4m1ISx4o
+mtNyCVI7FXV5zNnaGWVACT4=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect193r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABkDNAAEAHhW6xjH4TNPs/e12tsZcsGD+a92kAWk
+wQFc4m1ISx4omtNyCVI7FXV5zNnaGWVACT4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect193r2:ALICE_sect193r2_PUB
+
+
+PrivateKey=BOB_sect193r2
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEAYHKoZIzj0CAQYFK4EEABkEWDBWAgEBBBkAvMiVR0abk6pHoeOIBESL
+fB9B4gsZJjLsoTYDNAAEADtKDcwL660+Mm11Vl254GI3TnD+fragdwF+wY5qlMu5
+VtrUDMHuAP0q3eGQUsrzNo0=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect193r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEgwEAYHKoZIzj0CAQYFK4EEABkDNAAEADtKDcwL660+Mm11Vl254GI3TnD+frag
+dwF+wY5qlMu5VtrUDMHuAP0q3eGQUsrzNo0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect193r2:BOB_sect193r2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein=default
+Derive=ALICE_sect193r2
+PeerKey=BOB_sect193r2_PUB
+SharedSecret=019d1f316d204a9cd1b9632cebb4accddb204158be3e435891
+
+# ECDH Bob with Alice peer
+
+Availablein=default
+Derive=BOB_sect193r2
+PeerKey=ALICE_sect193r2_PUB
+SharedSecret=019d1f316d204a9cd1b9632cebb4accddb204158be3e435891
+
+# TEST CURVE sect239k1
+
+PrivateKey=ALICE_sect239k1
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEAAMEZzBlAgEBBB4MhpuQTtDeLBboZgiW11d/
+KBlgUL4YvTjZ8zg4HR2hQAM+AAQafRD6X3L/7c/FN69KuA04a4bhxHZezmz1G15m
+tltwl8zlWsR5+GNToxV0OBLbStAQbXxqBa2Gg83B0oc=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect239k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEAAMDPgAEGn0Q+l9y/+3PxTevSrgNOGuG4cR2Xs5s
+9RteZrZbcJfM5VrEefhjU6MVdDgS20rQEG18agWthoPNwdKH
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect239k1:ALICE_sect239k1_PUB
+
+
+PrivateKey=BOB_sect239k1
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEAAMEZzBlAgEBBB4FBG477KvylisppUFwbDl/
+SRGnX5FFmfw/xWIiEMehQAM+AAQFii094UX6F5m8Dk0eI/DhF3+IDUu7h81hTdyZ
+xxET0IokxFkTUf/re9WPA7LxPOCuiIPZUNVCRxRWSuU=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect239k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEAAMDPgAEBYotPeFF+heZvA5NHiPw4Rd/iA1Lu4fN
+YU3cmccRE9CKJMRZE1H/63vVjwOy8TzgroiD2VDVQkcUVkrl
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect239k1:BOB_sect239k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein=default
+Derive=ALICE_sect239k1
+PeerKey=BOB_sect239k1_PUB
+SharedSecret=4d1c9a8ae73f754d0a593d6e426114f4f67d7c8082ccc4e04a72b0d2aff8
+
+# ECDH Bob with Alice peer
+
+Availablein=default
+Derive=BOB_sect239k1
+PeerKey=ALICE_sect239k1_PUB
+SharedSecret=4d1c9a8ae73f754d0a593d6e426114f4f67d7c8082ccc4e04a72b0d2aff8
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect163r1
+PeerKey=BOB_sect163r1_PUB
+SharedSecret=02355c765bbc07fcc44bb1496e490912f6df56e6d4
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect163r1
+PeerKey=ALICE_sect163r1_PUB
+SharedSecret=02355c765bbc07fcc44bb1496e490912f6df56e6d4
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect193r1
+PeerKey=BOB_sect193r1_PUB
+SharedSecret=00458b4c5ad122de5a377bea0adf1ab87bcb961b24ed764f47
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect193r1
+PeerKey=ALICE_sect193r1_PUB
+SharedSecret=00458b4c5ad122de5a377bea0adf1ab87bcb961b24ed764f47
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect193r2
+PeerKey=BOB_sect193r2_PUB
+SharedSecret=019d1f316d204a9cd1b9632cebb4accddb204158be3e435891
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect193r2
+PeerKey=ALICE_sect193r2_PUB
+SharedSecret=019d1f316d204a9cd1b9632cebb4accddb204158be3e435891
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect239k1
+PeerKey=BOB_sect239k1_PUB
+SharedSecret=4d1c9a8ae73f754d0a593d6e426114f4f67d7c8082ccc4e04a72b0d2aff8
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect239k1
+PeerKey=ALICE_sect239k1_PUB
+SharedSecret=4d1c9a8ae73f754d0a593d6e426114f4f67d7c8082ccc4e04a72b0d2aff8
+
+# TEST CURVE c2pnb163v1
+
+PrivateKey=ALICE_c2pnb163v1
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAEETDBKAgEBBBUDTVBXDIdMMg5JIb6y
+ZHLpkONauzuhLgMsAAQC/TaMi2YGY4SmYVCrIVVommDnOyMHJZ1VZ4+fT+hE/qRp
+WHMMW5gOZO4=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2pnb163v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAEDLAAEAv02jItmBmOEpmFQqyFVaJpg5zsj
+ByWdVWePn0/oRP6kaVhzDFuYDmTu
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2pnb163v1:ALICE_c2pnb163v1_PUB
+
+
+PrivateKey=BOB_c2pnb163v1
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAEETDBKAgEBBBUC3uEAfGc3+a0FOrFh
+ftdUBtZ5BPOhLgMsAAQGojKkhnOduUQY6XT0GwQbDe1YM1wFkj3vZGkhO5OzsqG1
+QqQLkFeMwKo=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2pnb163v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAEDLAAEBqIypIZznblEGOl09BsEGw3tWDNc
+BZI972RpITuTs7KhtUKkC5BXjMCq
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2pnb163v1:BOB_c2pnb163v1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2pnb163v1
+PeerKey=BOB_c2pnb163v1_PUB
+SharedSecret=05939a47cb503656e684f433001e45776c7620e13b
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2pnb163v1
+PeerKey=ALICE_c2pnb163v1_PUB
+SharedSecret=05939a47cb503656e684f433001e45776c7620e13b
+
+# TEST CURVE c2pnb163v2
+
+PrivateKey=ALICE_c2pnb163v2
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAIETDBKAgEBBBUC3m3meJNbhDwwFH3C
+//L2EyOQNruhLgMsAAQBaATOiPV6c8icBYWczLXM6k+t8U4FIN57iiC8RsmIS3+V
+yM/rN3UBZaw=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2pnb163v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAIDLAAEAWgEzoj1enPInAWFnMy1zOpPrfFO
+BSDee4ogvEbJiEt/lcjP6zd1AWWs
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2pnb163v2:ALICE_c2pnb163v2_PUB
+
+
+PrivateKey=BOB_c2pnb163v2
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAIETDBKAgEBBBUBvd/DvKharywckSaW
+aAniKByXBwihLgMsAAQH0+FWe4mb13QrEZCPwfIS+gChEXoGhyBVubt6+SSgS5nS
+eDGgjW/36Qw=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2pnb163v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAIDLAAEB9PhVnuJm9d0KxGQj8HyEvoAoRF6
+BocgVbm7evkkoEuZ0ngxoI1v9+kM
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2pnb163v2:BOB_c2pnb163v2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2pnb163v2
+PeerKey=BOB_c2pnb163v2_PUB
+SharedSecret=0779fb5f6ac7892f2f342b785d71244e0b03ca562d
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2pnb163v2
+PeerKey=ALICE_c2pnb163v2_PUB
+SharedSecret=0779fb5f6ac7892f2f342b785d71244e0b03ca562d
+
+# TEST CURVE c2pnb163v3
+
+PrivateKey=ALICE_c2pnb163v3
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAMETDBKAgEBBBUCtJ0ZQMD5T6Ym/jZx
+Fzb9tQkLOhuhLgMsAAQE26YD7hG+CY02+nBDFKIBnMvHWUQGfkiIfG9yxV+LptOM
+CdU4y9RhM+w=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2pnb163v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAMDLAAEBNumA+4RvgmNNvpwQxSiAZzLx1lE
+Bn5IiHxvcsVfi6bTjAnVOMvUYTPs
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2pnb163v3:ALICE_c2pnb163v3_PUB
+
+
+PrivateKey=BOB_c2pnb163v3
+-----BEGIN PRIVATE KEY-----
+MGYCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAMETDBKAgEBBBUB9MnYR9NXM8OoCraO
+orQz1LXIZJChLgMsAAQH15R/xAGyrtmg+hrdAaGn9rVEfWQA7yUCn4vKR2eIy/qN
+YfbeHTIaTBY=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2pnb163v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEMwEwYHKoZIzj0CAQYIKoZIzj0DAAMDLAAEB9eUf8QBsq7ZoPoa3QGhp/a1RH1k
+AO8lAp+LykdniMv6jWH23h0yGkwW
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2pnb163v3:BOB_c2pnb163v3_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2pnb163v3
+PeerKey=BOB_c2pnb163v3_PUB
+SharedSecret=02bf68863a8798e72cdc9cd3b9ce731f12654bfa81
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2pnb163v3
+PeerKey=ALICE_c2pnb163v3_PUB
+SharedSecret=02bf68863a8798e72cdc9cd3b9ce731f12654bfa81
+
+# TEST CURVE c2pnb176v1
+
+PrivateKey=ALICE_c2pnb176v1
+-----BEGIN PRIVATE KEY-----
+MGgCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAQETjBMAgEBBBUAxXEz1PjthqsI664l
+N5LRLN8C2uyhMAMuAARD1qVJHbL5A7BhEKeHSuDeT6XeZ3ODFn9ef67qdF+tS7p3
+zgXGKt4pKMoYcg==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2pnb176v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEUwEwYHKoZIzj0CAQYIKoZIzj0DAAQDLgAEQ9alSR2y+QOwYRCnh0rg3k+l3mdz
+gxZ/Xn+u6nRfrUu6d84FxireKSjKGHI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2pnb176v1:ALICE_c2pnb176v1_PUB
+
+
+PrivateKey=BOB_c2pnb176v1
+-----BEGIN PRIVATE KEY-----
+MGgCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAQETjBMAgEBBBUAJvHHFW0v+/cjaLd7
+Xgt6FtSga5+hMAMuAASUs7rUAlv1qhppI82ikLvZ8Y0DApC356nhs7SyQYdLtHRM
++qUHBB3IzrLKdQ==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2pnb176v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEUwEwYHKoZIzj0CAQYIKoZIzj0DAAQDLgAElLO61AJb9aoaaSPNopC72fGNAwKQ
+t+ep4bO0skGHS7R0TPqlBwQdyM6yynU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2pnb176v1:BOB_c2pnb176v1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2pnb176v1
+PeerKey=BOB_c2pnb176v1_PUB
+SharedSecret=b204734417542df762e09013d6ba958940837a2aa25a
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2pnb176v1
+PeerKey=ALICE_c2pnb176v1_PUB
+SharedSecret=b204734417542df762e09013d6ba958940837a2aa25a
+
+# TEST CURVE c2tnb191v1
+
+PrivateKey=ALICE_c2tnb191v1
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAUEVTBTAgEBBBgYgpO+wgirUtuqHF00
+2o02Vc7xQjKgSzChNAMyAAQ2ae+5tDQ2CDaV5XPdC+RtLgcHS5lTOclTClr/WSpP
+TlMt2TGh/KRrD859oXg6KYY=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2tnb191v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAUDMgAENmnvubQ0Ngg2leVz3QvkbS4HB0uZ
+UznJUwpa/1kqT05TLdkxofykaw/OfaF4OimG
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2tnb191v1:ALICE_c2tnb191v1_PUB
+
+
+PrivateKey=BOB_c2tnb191v1
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAUEVTBTAgEBBBguzm5uFNRy/lX3OKuJ
+j8i/vH/+viMd48yhNAMyAARka5rhdTmtbqQVRMWZQjUqsHUMX43siRt5f2WQSZfg
++IQ2l/8veayyX9erUSt3gK4=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2tnb191v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAUDMgAEZGua4XU5rW6kFUTFmUI1KrB1DF+N
+7IkbeX9lkEmX4PiENpf/L3mssl/Xq1Erd4Cu
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2tnb191v1:BOB_c2tnb191v1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2tnb191v1
+PeerKey=BOB_c2tnb191v1_PUB
+SharedSecret=7a30d30acd3b067f38bb3be9e8cdef739483df26455e36e1
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2tnb191v1
+PeerKey=ALICE_c2tnb191v1_PUB
+SharedSecret=7a30d30acd3b067f38bb3be9e8cdef739483df26455e36e1
+
+# TEST CURVE c2tnb191v2
+
+PrivateKey=ALICE_c2tnb191v2
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAYEVTBTAgEBBBgOlslgJ0XSK3vKC5Ls
+QmYxZfr8OEKXRQ2hNAMyAAQAHivLhSwW2SJZtUPhuV1p9fQSfz7w9SJY8dJOpVf8
+9DevPUlJMPcaSGyjX+3nJZc=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2tnb191v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAYDMgAEAB4ry4UsFtkiWbVD4bldafX0En8+
+8PUiWPHSTqVX/PQ3rz1JSTD3Gkhso1/t5yWX
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2tnb191v2:ALICE_c2tnb191v2_PUB
+
+
+PrivateKey=BOB_c2tnb191v2
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAYEVTBTAgEBBBgK9QaS2SDU6yz7uXqO
++/+C+baTTVMAGVGhNAMyAAQiR0t9plm77ezfXvJzDNdlyYC0pWX+QmJ8EavgEElk
+ky/M+YXb5ufkFzFXIEfU9pM=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2tnb191v2_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAYDMgAEIkdLfaZZu+3s317ycwzXZcmAtKVl
+/kJifBGr4BBJZJMvzPmF2+bn5BcxVyBH1PaT
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2tnb191v2:BOB_c2tnb191v2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2tnb191v2
+PeerKey=BOB_c2tnb191v2_PUB
+SharedSecret=5ec2b6ccd193620dbad302c4ad8f8909a40698bf454d7534
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2tnb191v2
+PeerKey=ALICE_c2tnb191v2_PUB
+SharedSecret=5ec2b6ccd193620dbad302c4ad8f8909a40698bf454d7534
+
+# TEST CURVE c2tnb191v3
+
+PrivateKey=ALICE_c2tnb191v3
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAcEVTBTAgEBBBgSaBOQyq6XX3hZVVgV
+FlRrxTuvgtv33C6hNAMyAARL+Fup8jOnixQYPx8pU/b066PHrhTXfiNerFEYA/5O
+XCKCEkdRCpuDJnyqpmaC2vw=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2tnb191v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAcDMgAES/hbqfIzp4sUGD8fKVP29Oujx64U
+134jXqxRGAP+TlwighJHUQqbgyZ8qqZmgtr8
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2tnb191v3:ALICE_c2tnb191v3_PUB
+
+
+PrivateKey=BOB_c2tnb191v3
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAcEVTBTAgEBBBgEE8Ls7pc1/q3/0ruR
+gMrWGhGIr4VLt4uhNAMyAAQHAZsjkAXanwGbXR3SKkoKli6rSfSiu0lU2XHDiZdt
+LaPN+Eihz4KeG2YM/p3m1do=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2tnb191v3_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAAcDMgAEBwGbI5AF2p8Bm10d0ipKCpYuq0n0
+ortJVNlxw4mXbS2jzfhIoc+CnhtmDP6d5tXa
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2tnb191v3:BOB_c2tnb191v3_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2tnb191v3
+PeerKey=BOB_c2tnb191v3_PUB
+SharedSecret=39093dc8a2e6724a6206ed41bb99490d527d80c902c41891
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2tnb191v3
+PeerKey=ALICE_c2tnb191v3_PUB
+SharedSecret=39093dc8a2e6724a6206ed41bb99490d527d80c902c41891
+
+# TEST CURVE c2pnb208w1
+
+PrivateKey=ALICE_c2pnb208w1
+-----BEGIN PRIVATE KEY-----
+MHQCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAoEWjBYAgEBBBkAbfnNboX6Dk+NLoBO
+6qBB2aE1srmTgS96oTgDNgAEFLHciAu4excYB0mty8rF442ULXZfqL90IkgP5G2z
+wzY1mAlEBFMg83izeRaCJ/vRihZDJw==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2pnb208w1_PUB
+-----BEGIN PUBLIC KEY-----
+ME0wEwYHKoZIzj0CAQYIKoZIzj0DAAoDNgAEFLHciAu4excYB0mty8rF442ULXZf
+qL90IkgP5G2zwzY1mAlEBFMg83izeRaCJ/vRihZDJw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2pnb208w1:ALICE_c2pnb208w1_PUB
+
+
+PrivateKey=BOB_c2pnb208w1
+-----BEGIN PRIVATE KEY-----
+MHQCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAAoEWjBYAgEBBBkAwjGFJOPkZqQPZ+mI
+Ae3G12zpUia40tRjoTgDNgAEDxaP6u0phDLfM4RsZhgIfZy8CurR4/IPtqMGxbfz
+pPKPMZXV12F6MrWrorSFDZ8KFd58Ww==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2pnb208w1_PUB
+-----BEGIN PUBLIC KEY-----
+ME0wEwYHKoZIzj0CAQYIKoZIzj0DAAoDNgAEDxaP6u0phDLfM4RsZhgIfZy8CurR
+4/IPtqMGxbfzpPKPMZXV12F6MrWrorSFDZ8KFd58Ww==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2pnb208w1:BOB_c2pnb208w1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2pnb208w1
+PeerKey=BOB_c2pnb208w1_PUB
+SharedSecret=59bf3c91bd168d4d4d900d9ce155933045e0fd16dcf0511bb5af
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2pnb208w1
+PeerKey=ALICE_c2pnb208w1_PUB
+SharedSecret=59bf3c91bd168d4d4d900d9ce155933045e0fd16dcf0511bb5af
+
+# TEST CURVE c2tnb239v1
+
+PrivateKey=ALICE_c2tnb239v1
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwALBGcwZQIBAQQeE4CCwXEKsP3CfLC/
+DLSSF9lfyOaNSuQXmq9rzLqwoUADPgAEM6oQIsXJs+ANKQpF3DzBdG4FdS5DS+qp
+c5fVTsZiI4FAWCXUvzzPTRAex3wwvF/4JrYK6cKVh8i1EOrN
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2tnb239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAsDPgAEM6oQIsXJs+ANKQpF3DzBdG4FdS5D
+S+qpc5fVTsZiI4FAWCXUvzzPTRAex3wwvF/4JrYK6cKVh8i1EOrN
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2tnb239v1:ALICE_c2tnb239v1_PUB
+
+
+PrivateKey=BOB_c2tnb239v1
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwALBGcwZQIBAQQeAGDYCGAXqD03x510
+h35JSzlgReW6W/T8lYPEA42doUADPgAECk6Uyh8ULkOVOxZSNZYGwtko/oy7ZLDP
+F8dbsEZTeYIBpQ6hWqZ/4Nz3RyzfoukyfCb3b8OMtpq+Qgio
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2tnb239v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAsDPgAECk6Uyh8ULkOVOxZSNZYGwtko/oy7
+ZLDPF8dbsEZTeYIBpQ6hWqZ/4Nz3RyzfoukyfCb3b8OMtpq+Qgio
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2tnb239v1:BOB_c2tnb239v1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2tnb239v1
+PeerKey=BOB_c2tnb239v1_PUB
+SharedSecret=78c42256900725df9a47bb042cef7dad9f639b32e3010738a144e7472d1a
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2tnb239v1
+PeerKey=ALICE_c2tnb239v1_PUB
+SharedSecret=78c42256900725df9a47bb042cef7dad9f639b32e3010738a144e7472d1a
+
+# TEST CURVE c2tnb239v2
+
+PrivateKey=ALICE_c2tnb239v2
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwAMBGcwZQIBAQQeE8kBjHLjFeC+Z2gZ
+q0snwR3UgEgWMW0xilhJNjW2oUADPgAEQ+ubIYhh82VohwKSVz70PkHsjmYWDvDU
+/SBRk8AiP71CM9D7XEKK5tnU94MtK2Kscx5nWZFc+oIh1+sY
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2tnb239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAwDPgAEQ+ubIYhh82VohwKSVz70PkHsjmYW
+DvDU/SBRk8AiP71CM9D7XEKK5tnU94MtK2Kscx5nWZFc+oIh1+sY
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2tnb239v2:ALICE_c2tnb239v2_PUB
+
+
+PrivateKey=BOB_c2tnb239v2
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwAMBGcwZQIBAQQeE7bhzKZZUm780c0e
+3EBWY1GxD90Mzu7zrQMi7bAzoUADPgAEYgV7bokY6iLMzZTG10c6NDaW11plAm0T
+NKVVwzPqe3ylhsQmmm02LHKX0gN4E1dUS0uClBbMGNq2mhln
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2tnb239v2_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAAwDPgAEYgV7bokY6iLMzZTG10c6NDaW11pl
+Am0TNKVVwzPqe3ylhsQmmm02LHKX0gN4E1dUS0uClBbMGNq2mhln
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2tnb239v2:BOB_c2tnb239v2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2tnb239v2
+PeerKey=BOB_c2tnb239v2_PUB
+SharedSecret=4ba2ecfa8ec7a375594d1673886cccf96d7763c55611b3c9008a35160192
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2tnb239v2
+PeerKey=ALICE_c2tnb239v2_PUB
+SharedSecret=4ba2ecfa8ec7a375594d1673886cccf96d7763c55611b3c9008a35160192
+
+# TEST CURVE c2tnb239v3
+
+PrivateKey=ALICE_c2tnb239v3
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwANBGcwZQIBAQQeCxiC5lbHYL1QYbb2
+izZiSoLPnWCZIds811J1N7KtoUADPgAEdHMz+tsuO7VcO9IFgsSWTweLoB1ah5WI
+g6cWrtcUfmO7EGfPwNni4Bf8No7rGGMwbisW0v6Jv2pkTSM8
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2tnb239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAA0DPgAEdHMz+tsuO7VcO9IFgsSWTweLoB1a
+h5WIg6cWrtcUfmO7EGfPwNni4Bf8No7rGGMwbisW0v6Jv2pkTSM8
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2tnb239v3:ALICE_c2tnb239v3_PUB
+
+
+PrivateKey=BOB_c2tnb239v3
+-----BEGIN PRIVATE KEY-----
+MIGBAgEAMBMGByqGSM49AgEGCCqGSM49AwANBGcwZQIBAQQeBBPxdeU3MohZc5Jx
+7WadLuPSeXeOg75rXC1ElexsoUADPgAEaHwiwQmoqbPij8+l6hLHVQz0AZLBT5uX
+hAh8fhTABKqI7qYShICAAX0tvu3EvQ8BQLP14grxUsSoEqAF
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2tnb239v3_PUB
+-----BEGIN PUBLIC KEY-----
+MFUwEwYHKoZIzj0CAQYIKoZIzj0DAA0DPgAEaHwiwQmoqbPij8+l6hLHVQz0AZLB
+T5uXhAh8fhTABKqI7qYShICAAX0tvu3EvQ8BQLP14grxUsSoEqAF
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2tnb239v3:BOB_c2tnb239v3_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2tnb239v3
+PeerKey=BOB_c2tnb239v3_PUB
+SharedSecret=47ad60e5480375fccd9246c93ab04da8e5da83e1dbf5f177f10a47cb54a0
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2tnb239v3
+PeerKey=ALICE_c2tnb239v3_PUB
+SharedSecret=47ad60e5480375fccd9246c93ab04da8e5da83e1dbf5f177f10a47cb54a0
+
+# TEST CURVE c2pnb272w1
+
+PrivateKey=ALICE_c2pnb272w1
+-----BEGIN PRIVATE KEY-----
+MIGMAgEAMBMGByqGSM49AgEGCCqGSM49AwAQBHIwcAIBAQQhAKMtKddENVGjzTU4
+w+hW0SgDOtIElcs52wb40S08j6gMoUgDRgAEfGvSzQo+00VXIDXV7iiGXpI16kzs
+6C8rkchA5sVBBY56nSCp0n4FpIXRzafiFQklJD9OrJzA6PXc7tp2n2XhIwvuOmI=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2pnb272w1_PUB
+-----BEGIN PUBLIC KEY-----
+MF0wEwYHKoZIzj0CAQYIKoZIzj0DABADRgAEfGvSzQo+00VXIDXV7iiGXpI16kzs
+6C8rkchA5sVBBY56nSCp0n4FpIXRzafiFQklJD9OrJzA6PXc7tp2n2XhIwvuOmI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2pnb272w1:ALICE_c2pnb272w1_PUB
+
+
+PrivateKey=BOB_c2pnb272w1
+-----BEGIN PRIVATE KEY-----
+MIGMAgEAMBMGByqGSM49AgEGCCqGSM49AwAQBHIwcAIBAQQhAFAKPByX1wlYUpU4
+mECDAxg+VM5aFo4JPlqEzR0b9hI6oUgDRgAEL8+863IU4uxbEY8jVBjhsrG4W6AF
+MF6t+aGvoiKHtEMLQa6U158TRapDWp4eRurm6Idvv7hepCPqOMEGySDUwMECiQM=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2pnb272w1_PUB
+-----BEGIN PUBLIC KEY-----
+MF0wEwYHKoZIzj0CAQYIKoZIzj0DABADRgAEL8+863IU4uxbEY8jVBjhsrG4W6AF
+MF6t+aGvoiKHtEMLQa6U158TRapDWp4eRurm6Idvv7hepCPqOMEGySDUwMECiQM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2pnb272w1:BOB_c2pnb272w1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2pnb272w1
+PeerKey=BOB_c2pnb272w1_PUB
+SharedSecret=3ae063b2bed6ba8aa28ff35e9bd2673f22ee8087860c86b89429a5b52538216632a3
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2pnb272w1
+PeerKey=ALICE_c2pnb272w1_PUB
+SharedSecret=3ae063b2bed6ba8aa28ff35e9bd2673f22ee8087860c86b89429a5b52538216632a3
+
+# TEST CURVE c2pnb304w1
+
+PrivateKey=ALICE_c2pnb304w1
+-----BEGIN PRIVATE KEY-----
+MIGYAgEAMBMGByqGSM49AgEGCCqGSM49AwARBH4wfAIBAQQlAOKzfcV2XOvVsSUh
+oVz3SHGzSCf0q9i+ilz5ZfBxc+5ssjK7jKFQA04ABDc4zQNFaZukj9iz3iXTYdza
+tCOYZvrfOjrbgzl/8PoFxt5q6yJTu35Vu9XVp5pTCtjpDEpywBj0xb07RRuVDEk8
+TthFP5vGeTIWLD4=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2pnb304w1_PUB
+-----BEGIN PUBLIC KEY-----
+MGUwEwYHKoZIzj0CAQYIKoZIzj0DABEDTgAENzjNA0Vpm6SP2LPeJdNh3Nq0I5hm
++t86OtuDOX/w+gXG3mrrIlO7flW71dWnmlMK2OkMSnLAGPTFvTtFG5UMSTxO2EU/
+m8Z5MhYsPg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2pnb304w1:ALICE_c2pnb304w1_PUB
+
+
+PrivateKey=BOB_c2pnb304w1
+-----BEGIN PRIVATE KEY-----
+MIGYAgEAMBMGByqGSM49AgEGCCqGSM49AwARBH4wfAIBAQQlAPP4hz6sa+KdTJ4h
+fBeCUiJBfshcZoapkZMFrhI1vdcRY7MeAaFQA04ABMHRUzLiUY7O4nEBdmex31U4
+l6TO/dD+5MV/tVNizVsWjkTvi2fs772lZ9MeNp6QnGMZ5n5subHsa0QOJL1LpmXX
+K0UIWGbW0nQb52g=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2pnb304w1_PUB
+-----BEGIN PUBLIC KEY-----
+MGUwEwYHKoZIzj0CAQYIKoZIzj0DABEDTgAEwdFTMuJRjs7icQF2Z7HfVTiXpM79
+0P7kxX+1U2LNWxaORO+LZ+zvvaVn0x42npCcYxnmfmy5sexrRA4kvUumZdcrRQhY
+ZtbSdBvnaA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2pnb304w1:BOB_c2pnb304w1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2pnb304w1
+PeerKey=BOB_c2pnb304w1_PUB
+SharedSecret=6df88b20de9f095c7632234291ea4658a9265cd2293424e11ed56705b09a069f09dc4e055eb7
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2pnb304w1
+PeerKey=ALICE_c2pnb304w1_PUB
+SharedSecret=6df88b20de9f095c7632234291ea4658a9265cd2293424e11ed56705b09a069f09dc4e055eb7
+
+# TEST CURVE c2tnb359v1
+
+PrivateKey=ALICE_c2tnb359v1
+-----BEGIN PRIVATE KEY-----
+MIGwAgEAMBMGByqGSM49AgEGCCqGSM49AwASBIGVMIGSAgEBBC0BeMU97SvjsIvQ
+1v+Ztf56OCL8JXHxRJDQZ5gWEa4c2b3FZXFVC4CwEPd7cB+hXgNcAAQOBgLp0TzS
+4Hf/VYbJCFuj3OlRC5JMzFV7ox41ubhl5Ij+gHIodu1bQ6cqd0YAb2/30PxwX++N
+NpFvq8u8435zhPYXsut6txOPNU5ZzCeagy2xsKacXSZc7D0=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2tnb359v1_PUB
+-----BEGIN PUBLIC KEY-----
+MHMwEwYHKoZIzj0CAQYIKoZIzj0DABIDXAAEDgYC6dE80uB3/1WGyQhbo9zpUQuS
+TMxVe6MeNbm4ZeSI/oByKHbtW0OnKndGAG9v99D8cF/vjTaRb6vLvON+c4T2F7Lr
+ercTjzVOWcwnmoMtsbCmnF0mXOw9
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2tnb359v1:ALICE_c2tnb359v1_PUB
+
+
+PrivateKey=BOB_c2tnb359v1
+-----BEGIN PRIVATE KEY-----
+MIGwAgEAMBMGByqGSM49AgEGCCqGSM49AwASBIGVMIGSAgEBBC0BRZ3IIh3mrLIX
+KBbh6Vj7TXNY5bzRuD5/ayHPlHQkJcd8K66dOqu7hgaN91GhXgNcAAQ7njbTQ2xY
+YZtkKswYr8E6P/R3Dg/XEZgQQ72B4qXnqbK/SgYsZAntFg7CRztcTkHjKAgdSz6f
+TRIc4///gwXN3Oi6D8PeswhzPJi/uLmCAHMm3GT6SUO3aTY=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2tnb359v1_PUB
+-----BEGIN PUBLIC KEY-----
+MHMwEwYHKoZIzj0CAQYIKoZIzj0DABIDXAAEO54200NsWGGbZCrMGK/BOj/0dw4P
+1xGYEEO9geKl56myv0oGLGQJ7RYOwkc7XE5B4ygIHUs+n00SHOP//4MFzdzoug/D
+3rMIczyYv7i5ggBzJtxk+klDt2k2
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2tnb359v1:BOB_c2tnb359v1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2tnb359v1
+PeerKey=BOB_c2tnb359v1_PUB
+SharedSecret=1d3f3396492d130caea54233c79833e90a072fe883071bb08cec671ce0319f0bc39c68dda0199952152a5c3563
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2tnb359v1
+PeerKey=ALICE_c2tnb359v1_PUB
+SharedSecret=1d3f3396492d130caea54233c79833e90a072fe883071bb08cec671ce0319f0bc39c68dda0199952152a5c3563
+
+# TEST CURVE c2pnb368w1
+
+PrivateKey=ALICE_c2pnb368w1
+-----BEGIN PRIVATE KEY-----
+MIGyAgEAMBMGByqGSM49AgEGCCqGSM49AwATBIGXMIGUAgEBBC0AFagbth/4/M2s
+b1G4FpxbFEVLIulioS34v0hrClpZ38/Z+PHmIhOfEFminyehYANeAAQAU42w7mII
+jkyAdnCC4qoEPdH42fh3oVyCtnaRtKUmdhUdXm0IgSM4T4SYEOsx+aQZLGIjnhHJ
+CabcaKPQ0sai3dirUr2YsNXNDJiU93T7buUr+DnRPGsfBy/nEg==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2pnb368w1_PUB
+-----BEGIN PUBLIC KEY-----
+MHUwEwYHKoZIzj0CAQYIKoZIzj0DABMDXgAEAFONsO5iCI5MgHZwguKqBD3R+Nn4
+d6FcgrZ2kbSlJnYVHV5tCIEjOE+EmBDrMfmkGSxiI54RyQmm3Gij0NLGot3Yq1K9
+mLDVzQyYlPd0+27lK/g50TxrHwcv5xI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2pnb368w1:ALICE_c2pnb368w1_PUB
+
+
+PrivateKey=BOB_c2pnb368w1
+-----BEGIN PRIVATE KEY-----
+MIGyAgEAMBMGByqGSM49AgEGCCqGSM49AwATBIGXMIGUAgEBBC0AA/woMzOFy8k2
+zBqBkubhkOIwc7sx0u+JadM9f7V45L4P8nK7bjJasOqrHRahYANeAATKE6jcstac
+H8yWzg/qBgvGoGan2PVwTN/U+68K4WxHO7+oPHviUh1OVF7ZxYjsVSdyno83iHE3
+3sq2Ej6j26f+uVs/fuWk19t8NpAQ6+sVETZszuMDm5adqtVZRQ==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2pnb368w1_PUB
+-----BEGIN PUBLIC KEY-----
+MHUwEwYHKoZIzj0CAQYIKoZIzj0DABMDXgAEyhOo3LLWnB/Mls4P6gYLxqBmp9j1
+cEzf1PuvCuFsRzu/qDx74lIdTlRe2cWI7FUncp6PN4hxN97KthI+o9un/rlbP37l
+pNfbfDaQEOvrFRE2bM7jA5uWnarVWUU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2pnb368w1:BOB_c2pnb368w1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2pnb368w1
+PeerKey=BOB_c2pnb368w1_PUB
+SharedSecret=d191710b156d1b1d14242843a7f0abf28060bbb9e655655b53852a8b0f250ef1eee37d59364d9791c8e1bc526cbb
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2pnb368w1
+PeerKey=ALICE_c2pnb368w1_PUB
+SharedSecret=d191710b156d1b1d14242843a7f0abf28060bbb9e655655b53852a8b0f250ef1eee37d59364d9791c8e1bc526cbb
+
+# TEST CURVE c2tnb431r1
+
+PrivateKey=ALICE_c2tnb431r1
+-----BEGIN PRIVATE KEY-----
+MIHKAgEAMBMGByqGSM49AgEGCCqGSM49AwAUBIGvMIGsAgEBBDUC18JhUt+NCIZ/
+q6kdjNZ7zX72UqpW4K6Uc2bAWu2PXK1aL573LNzu4oUlHfbvuE1BUrxNpaFwA24A
+BDrG8SG4lckR1rrvLRpXYf7Wspmh/fbql+Zpulyl896XtwQK2BkLVRkZ5ixTG4PU
+yb64OiffdSnvIaM++cb7LgJLBBgT3d5le8V1gtxWFFm0NggUyF6glmUqHQL0LuhX
+WS468O6w05KS0AL6vQ==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_c2tnb431r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGFMBMGByqGSM49AgEGCCqGSM49AwAUA24ABDrG8SG4lckR1rrvLRpXYf7Wspmh
+/fbql+Zpulyl896XtwQK2BkLVRkZ5ixTG4PUyb64OiffdSnvIaM++cb7LgJLBBgT
+3d5le8V1gtxWFFm0NggUyF6glmUqHQL0LuhXWS468O6w05KS0AL6vQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_c2tnb431r1:ALICE_c2tnb431r1_PUB
+
+
+PrivateKey=BOB_c2tnb431r1
+-----BEGIN PRIVATE KEY-----
+MIHKAgEAMBMGByqGSM49AgEGCCqGSM49AwAUBIGvMIGsAgEBBDUApanyPgvpfrAu
+1jNAKGpctH71v0+P/kFF9JxdFYarpWEwBBd4tz6CxoYKmvDZ9ukOOqBbX6FwA24A
+BGh3JXuYmh6dGGEmbRhoR2T5pVD/5Mq2ZKKzfzY2NOoKiIs6rVzv2SW7S6BScYlR
+qRWiXCeZVFvT0crDY/5uodkHbcRw6B/Yo/iMN8wLI257Tjm9/C5G+JPCLopCcLIL
+gTwAJM2ZhtPnc08LyQ==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_c2tnb431r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGFMBMGByqGSM49AgEGCCqGSM49AwAUA24ABGh3JXuYmh6dGGEmbRhoR2T5pVD/
+5Mq2ZKKzfzY2NOoKiIs6rVzv2SW7S6BScYlRqRWiXCeZVFvT0crDY/5uodkHbcRw
+6B/Yo/iMN8wLI257Tjm9/C5G+JPCLopCcLILgTwAJM2ZhtPnc08LyQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_c2tnb431r1:BOB_c2tnb431r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_c2tnb431r1
+PeerKey=BOB_c2tnb431r1_PUB
+SharedSecret=4c4d7d387843ff5152f22f101b0609238819357fae2ccc9097b818e383ef6809cb46671fb514009d4d1d3d0119fba265107302e95748
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_c2tnb431r1
+PeerKey=ALICE_c2tnb431r1_PUB
+SharedSecret=4c4d7d387843ff5152f22f101b0609238819357fae2ccc9097b818e383ef6809cb46671fb514009d4d1d3d0119fba265107302e95748
+
+# TEST CURVE wap-wsg-idm-ecid-wtls1
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls1
+-----BEGIN PRIVATE KEY-----
+MFACAQAwEAYHKoZIzj0CAQYFZysBBAEEOTA3AgEBBA5Xu91qBwxTDmhD/30Kf6Ei
+AyAABAFQSZ0G+afa1x4KwUzBjQEWFNdZoF6UNYGkCRINyg==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAEDIAAEAVBJnQb5p9rXHgrBTMGNARYU11mgXpQ1
+gaQJEg3K
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls1:ALICE_wap-wsg-idm-ecid-wtls1_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls1
+-----BEGIN PRIVATE KEY-----
+MFACAQAwEAYHKoZIzj0CAQYFZysBBAEEOTA3AgEBBA5aU6CQ474Z1fH3xAtn/6Ei
+AyAABAFpb4GTc+5vf5nkt4zLxwGZQ6qSbYlH8pUbpvwcqA==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls1_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAEDIAAEAWlvgZNz7m9/meS3jMvHAZlDqpJtiUfy
+lRum/Byo
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls1:BOB_wap-wsg-idm-ecid-wtls1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls1
+PeerKey=BOB_wap-wsg-idm-ecid-wtls1_PUB
+SharedSecret=0000fc6e280987e8b9bf6e3c7fa003
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls1
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls1_PUB
+SharedSecret=0000fc6e280987e8b9bf6e3c7fa003
+
+# TEST CURVE wap-wsg-idm-ecid-wtls3
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls3
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFZysBBAMETDBKAgEBBBUBN2FFgQiz4KPJ9GEsrj5B
+m908ifuhLgMsAAQBV21Tx3v8+1wFKq7PiloR1CxzmlUDvnyXrs4mNmc5Ns38mzPe
+NueQNo0=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls3_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAMDLAAEAVdtU8d7/PtcBSquz4paEdQsc5pVA758
+l67OJjZnOTbN/Jsz3jbnkDaN
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls3:ALICE_wap-wsg-idm-ecid-wtls3_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls3
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFZysBBAMETDBKAgEBBBUA/0Ust7IoJ526zn2wiWBu
+rR5NeSWhLgMsAAQB7d+/zMMti4djhlVnaGqaqonbmo4Cv+iKT1cF3nzXV/KXHSJI
+p9iZeas=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls3_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAMDLAAEAe3fv8zDLYuHY4ZVZ2hqmqqJ25qOAr/o
+ik9XBd5811fylx0iSKfYmXmr
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls3:BOB_wap-wsg-idm-ecid-wtls3_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls3
+PeerKey=BOB_wap-wsg-idm-ecid-wtls3_PUB
+SharedSecret=00cf1d850f396436be68f1e5502935853ed054511f
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls3
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls3_PUB
+SharedSecret=00cf1d850f396436be68f1e5502935853ed054511f
+
+# TEST CURVE wap-wsg-idm-ecid-wtls4
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls4
+-----BEGIN PRIVATE KEY-----
+MFECAQAwEAYHKoZIzj0CAQYFZysBBAQEOjA4AgEBBA8AsuEGufSNSrDPu3Y1Namh
+IgMgAAQAcvPRbArskeBs6W2oOesAHMQo8Lk/FHcYKUfMOKY=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls4_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAQDIAAEAHLz0WwK7JHgbOltqDnrABzEKPC5PxR3
+GClHzDim
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls4:ALICE_wap-wsg-idm-ecid-wtls4_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls4
+-----BEGIN PRIVATE KEY-----
+MFECAQAwEAYHKoZIzj0CAQYFZysBBAQEOjA4AgEBBA8AFJwmUkKbWdmzvqv+AbWh
+IgMgAAQBriOJSyRL4ro55CbCwekBluEKwIfP64OfJCEfWTU=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls4_PUB
+-----BEGIN PUBLIC KEY-----
+MDQwEAYHKoZIzj0CAQYFZysBBAQDIAAEAa4jiUskS+K6OeQmwsHpAZbhCsCHz+uD
+nyQhH1k1
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls4:BOB_wap-wsg-idm-ecid-wtls4_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls4
+PeerKey=BOB_wap-wsg-idm-ecid-wtls4_PUB
+SharedSecret=01076232302ca32b5f3daf075e5213
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls4
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls4_PUB
+SharedSecret=01076232302ca32b5f3daf075e5213
+
+# TEST CURVE wap-wsg-idm-ecid-wtls5
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls5
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFZysBBAUETDBKAgEBBBUCmngbaO2S//Ta0ZUhn/nb
+ZydTKD+hLgMsAAQA1792id3hLIu2z0KECkBCUbTSP9UFLu2FTJkLa8qP4ZIrBt5F
+XKJo2Dw=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls5_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAUDLAAEANe/dond4SyLts9ChApAQlG00j/VBS7t
+hUyZC2vKj+GSKwbeRVyiaNg8
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls5:ALICE_wap-wsg-idm-ecid-wtls5_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls5
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFZysBBAUETDBKAgEBBBUBraa4aeYxHd9HJ0vLIoCw
+auGKd9yhLgMsAAQHzc2FgfJGasNlMcJNDDrNQElhA1cHD4izqEedmC3ueMu72/Sp
+VF2Ppig=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls5_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFZysBBAUDLAAEB83NhYHyRmrDZTHCTQw6zUBJYQNXBw+I
+s6hHnZgt7njLu9v0qVRdj6Yo
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls5:BOB_wap-wsg-idm-ecid-wtls5_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls5
+PeerKey=BOB_wap-wsg-idm-ecid-wtls5_PUB
+SharedSecret=066091c591278f5b949106052b2546aacc20917c20
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls5
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls5_PUB
+SharedSecret=066091c591278f5b949106052b2546aacc20917c20
+
+# TEST CURVE wap-wsg-idm-ecid-wtls6
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls6
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEAYHKoZIzj0CAQYFZysBBAYENzA1AgEBBA5LJwRNrPNMwGyoBP95a6Eg
+Ax4ABMZxFi711Wl5r7tb1XJ9fJ3H1W1MKvVrYvfmNFo=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls6_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFZysBBAYDHgAExnEWLvXVaXmvu1vVcn18ncfVbUwq9Wti
+9+Y0Wg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls6:ALICE_wap-wsg-idm-ecid-wtls6_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls6
+-----BEGIN PRIVATE KEY-----
+ME4CAQAwEAYHKoZIzj0CAQYFZysBBAYENzA1AgEBBA63i1z4Kl8BEE1I3CYU9KEg
+Ax4ABG3Ft5F8wvnGimUAmGQrfqAlVJKdzhNSa3v47Kc=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls6_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFZysBBAYDHgAEbcW3kXzC+caKZQCYZCt+oCVUkp3OE1Jr
+e/jspw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls6:BOB_wap-wsg-idm-ecid-wtls6_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls6
+PeerKey=BOB_wap-wsg-idm-ecid-wtls6_PUB
+SharedSecret=8d184455748c56115ba2183070b0
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls6
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls6_PUB
+SharedSecret=8d184455748c56115ba2183070b0
+
+# TEST CURVE wap-wsg-idm-ecid-wtls7
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls7
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFZysBBAcESjBIAgEBBBUAueoisiN+luJEy0wdiI7j
+cALlTqChLAMqAAQ/FWsGxD8vuvEFWXfWReOqvBzqWrF9mdMeTeOE1y9r9POOIUVJ
+PNtL
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls7_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFZysBBAcDKgAEPxVrBsQ/L7rxBVl31kXjqrwc6lqxfZnT
+Hk3jhNcva/TzjiFFSTzbSw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls7:ALICE_wap-wsg-idm-ecid-wtls7_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls7
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFZysBBAcESjBIAgEBBBUAr42vKjbUXFak2mVzFYpu
+yhN/cDyhLAMqAASJZpuFg+n8vscuq+pqfFFPYemnfLdhdAB4JodfR3J5Bzu67hEm
+bIKQ
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls7_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFZysBBAcDKgAEiWabhYPp/L7HLqvqanxRT2Hpp3y3YXQA
+eCaHX0dyeQc7uu4RJmyCkA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls7:BOB_wap-wsg-idm-ecid-wtls7_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls7
+PeerKey=BOB_wap-wsg-idm-ecid-wtls7_PUB
+SharedSecret=990eda6a0406caef965018b97c94d0faa200f6e4
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls7
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls7_PUB
+SharedSecret=990eda6a0406caef965018b97c94d0faa200f6e4
+
+# TEST CURVE wap-wsg-idm-ecid-wtls8
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls8
+-----BEGIN PRIVATE KEY-----
+ME8CAQAwEAYHKoZIzj0CAQYFZysBBAgEODA2AgEBBA8A1m62ffl6niuM46XOUyih
+IAMeAAT4mqYAoe7NEtKfEMQs2ofInhZRZCFrFU5cjEWi
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls8_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFZysBBAgDHgAE+JqmAKHuzRLSnxDELNqHyJ4WUWQhaxVO
+XIxFog==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls8:ALICE_wap-wsg-idm-ecid-wtls8_PUB
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls8
+-----BEGIN PRIVATE KEY-----
+ME8CAQAwEAYHKoZIzj0CAQYFZysBBAgEODA2AgEBBA8AegTrLoMRyPl4U4xOdg6h
+IAMeAATQKkyQ3jL2Eku6C+vSQazbjjSkzNe67Occqj2P
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls8_PUB
+-----BEGIN PUBLIC KEY-----
+MDIwEAYHKoZIzj0CAQYFZysBBAgDHgAE0CpMkN4y9hJLugvr0kGs2440pMzXuuzn
+HKo9jw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls8:BOB_wap-wsg-idm-ecid-wtls8_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls8
+PeerKey=BOB_wap-wsg-idm-ecid-wtls8_PUB
+SharedSecret=7524c547bd6b26644ce70571cb06
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls8
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls8_PUB
+SharedSecret=7524c547bd6b26644ce70571cb06
+
+# TEST CURVE wap-wsg-idm-ecid-wtls9
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls9
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFZysBBAkESjBIAgEBBBUAE0376NvzsIXi6XadrVn4
+06obTRChLAMqAARbC1yw9f1uBOVlMf5ZFQewTgyc81Aqh2TFMSRfujCIhdvGTYgR
+tu6F
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls9_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFZysBBAkDKgAEWwtcsPX9bgTlZTH+WRUHsE4MnPNQKodk
+xTEkX7owiIXbxk2IEbbuhQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls9:ALICE_wap-wsg-idm-ecid-wtls9_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls9
+-----BEGIN PRIVATE KEY-----
+MGECAQAwEAYHKoZIzj0CAQYFZysBBAkESjBIAgEBBBUAd2kfMclaJU2bg8ayTrjZ
+oolI82yhLAMqAAQ0NeW9TKhQeFrrTyMR9Gb55+BneCQSByAShM8Dn3V1FFYz7n0y
+bvBX
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls9_PUB
+-----BEGIN PUBLIC KEY-----
+MD4wEAYHKoZIzj0CAQYFZysBBAkDKgAENDXlvUyoUHha608jEfRm+efgZ3gkEgcg
+EoTPA591dRRWM+59Mm7wVw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls9:BOB_wap-wsg-idm-ecid-wtls9_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls9
+PeerKey=BOB_wap-wsg-idm-ecid-wtls9_PUB
+SharedSecret=5ca1d9eed44def2c390fd5bbb16ca2c3a09eb7b1
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls9
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls9_PUB
+SharedSecret=5ca1d9eed44def2c390fd5bbb16ca2c3a09eb7b1
+
+# TEST CURVE wap-wsg-idm-ecid-wtls10
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls10
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFZysBBAoEZjBkAgEBBB01TDgjIGd+gXPZ4esQnWzz
+/y1vzJniUBM5XNyPq6FAAz4ABAHVs5gYpbJzqyO8Lk3nkTwhu4BuXb4wtrgGcY2L
+TwGxkC4Zq4aqLowsexGjVa0IjGKdWz5/TfwLwGpN4A==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls10_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAoDPgAEAdWzmBilsnOrI7wuTeeRPCG7gG5dvjC2
+uAZxjYtPAbGQLhmrhqoujCx7EaNVrQiMYp1bPn9N/AvAak3g
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls10:ALICE_wap-wsg-idm-ecid-wtls10_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls10
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFZysBBAoEZjBkAgEBBB0mTqwYwByRuu4zcU1QLKcG
+m8wewuaoKqVSpp8xQaFAAz4ABAEF4xTrWAIF1EacNMqTG3kwxwartAKFFqyOle+w
+BwDi6gra7cFVedD1p5RwD4gZU4QzgCLSwa7xZbBzgg==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls10_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAoDPgAEAQXjFOtYAgXURpw0ypMbeTDHBqu0AoUW
+rI6V77AHAOLqCtrtwVV50PWnlHAPiBlThDOAItLBrvFlsHOC
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls10:BOB_wap-wsg-idm-ecid-wtls10_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls10
+PeerKey=BOB_wap-wsg-idm-ecid-wtls10_PUB
+SharedSecret=0199de137bc263e25b543994d6315b5a3f1e38e7e1f60662cb5cbaab5f98
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls10
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls10_PUB
+SharedSecret=0199de137bc263e25b543994d6315b5a3f1e38e7e1f60662cb5cbaab5f98
+
+# TEST CURVE wap-wsg-idm-ecid-wtls11
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls11
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFZysBBAsEZzBlAgEBBB4Au6lrzC3RIk3jXmtbeOAp
+LZPR0NUrr6dTf1lSCGqhQAM+AAQBl73V2TEZ8BO4QC+YiBlJ0GmW8WLc3RtS3iIr
+/oUAaDQQAGVJFD3GghjBPfI9KVBcZ2P8tUXUv5ifrWc=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls11_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAsDPgAEAZe91dkxGfATuEAvmIgZSdBplvFi3N0b
+Ut4iK/6FAGg0EABlSRQ9xoIYwT3yPSlQXGdj/LVF1L+Yn61n
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls11:ALICE_wap-wsg-idm-ecid-wtls11_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls11
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFZysBBAsEZzBlAgEBBB4AGJuGtQI1FvHfp2AsdKb3
+NVWawjpZQuyM1aelws2hQAM+AAQAdTW3xU6Ijf/Y835Z2hS4fOn6Xmp3O6iblXHr
+nKoBORuxHVRfXkfdL5TqfFpuDghzCyAS6ZMSWhjGV5o=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls11_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFZysBBAsDPgAEAHU1t8VOiI3/2PN+WdoUuHzp+l5qdzuo
+m5Vx65yqATkbsR1UX15H3S+U6nxabg4IcwsgEumTEloYxlea
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls11:BOB_wap-wsg-idm-ecid-wtls11_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls11
+PeerKey=BOB_wap-wsg-idm-ecid-wtls11_PUB
+SharedSecret=01ee4b517d8a64be5ee32e10152c7bbcb8cde73a3da8e9643bce173011f7
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls11
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls11_PUB
+SharedSecret=01ee4b517d8a64be5ee32e10152c7bbcb8cde73a3da8e9643bce173011f7
+
+# TEST CURVE wap-wsg-idm-ecid-wtls12
+
+PrivateKey=ALICE_wap-wsg-idm-ecid-wtls12
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFZysBBAwEYTBfAgEBBByAnUvQZhZr1lgTRixSMIx0
+KHuV4t8cbXCW415soTwDOgAE3G8wIl9SJ0mAmuIMWbJpFjf9wO8gKNu6nApye39Y
+hpXeYRL/nm7G6HmiiA5O1iudWC3hDbBH0cc=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_wap-wsg-idm-ecid-wtls12_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFZysBBAwDOgAE3G8wIl9SJ0mAmuIMWbJpFjf9wO8gKNu6
+nApye39YhpXeYRL/nm7G6HmiiA5O1iudWC3hDbBH0cc=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_wap-wsg-idm-ecid-wtls12:ALICE_wap-wsg-idm-ecid-wtls12_PUB
+
+
+PrivateKey=BOB_wap-wsg-idm-ecid-wtls12
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFZysBBAwEYTBfAgEBBBzZ7nt4CrPrk2m5iR64vpkj
+95JHOmzWf4VhRZqdoTwDOgAEukz40I4gWpUmXCM+PLmWGd0IO0XIPQa9KXzXvhbL
+dJH0yFkJ+ClSboOC26gtMTICiPhEgYjeKEQ=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_wap-wsg-idm-ecid-wtls12_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFZysBBAwDOgAEukz40I4gWpUmXCM+PLmWGd0IO0XIPQa9
+KXzXvhbLdJH0yFkJ+ClSboOC26gtMTICiPhEgYjeKEQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls12:BOB_wap-wsg-idm-ecid-wtls12_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_wap-wsg-idm-ecid-wtls12
+PeerKey=BOB_wap-wsg-idm-ecid-wtls12_PUB
+SharedSecret=c75a8283a73312de82c8f99d41a9173a43b8f921e8161dd140131b36
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_wap-wsg-idm-ecid-wtls12
+PeerKey=ALICE_wap-wsg-idm-ecid-wtls12_PUB
+SharedSecret=c75a8283a73312de82c8f99d41a9173a43b8f921e8161dd140131b36
+
+# EC P-256 key
+
+PrivateKey=P-256
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgiocvtiiTxNH/xbnw
++RdYBp+DUuCPoFpJ+NuSbLVyhyWhRANCAAQsFQ9CnOcPIWwlLPXgYs4fY5zV0WXH
++JQkBywnGX14szuSDpXNtmTpkNzwz+oNlOKo5q+dDlgFbmUxBJJbn+bJ
+-----END PRIVATE KEY-----
+
+# EC public key for above
+
+PublicKey=P-256-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELBUPQpznDyFsJSz14GLOH2Oc1dFl
+x/iUJAcsJxl9eLM7kg6VzbZk6ZDc8M/qDZTiqOavnQ5YBW5lMQSSW5/myQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = P-256:P-256-PUBLIC
+
+# Additional EC key for ECDH
+PrivateKey=P-256-Peer
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/URzu1TDNwUFWZ3i
+dLISAZpEY0vfJ2pLB7f+Xnjyl2OhRANCAAQgBuXhSgeKpz+4piXlYSVLvy0NT+wK
+uZWUI3LqUUCV07wg+RLLMY8yNK9kjqcgZDs/cB+bet64nQq+dNnvtpxG
+-----END PRIVATE KEY-----
+
+PublicKey=P-256-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIAbl4UoHiqc/uKYl5WElS78tDU/s
+CrmVlCNy6lFAldO8IPkSyzGPMjSvZI6nIGQ7P3Afm3reuJ0KvnTZ77acRg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = P-256-Peer:P-256-Peer-PUBLIC
+
+Title = ECDH tests
+
+
+Derive=P-256
+PeerKey=P-256-Peer-PUBLIC
+SharedSecret=E3CC07DFBDDE76A1139811DB9FF5FAF9D17EF39944F1E77D1F6A208524BF7B1B
+
+
+Derive=P-256-Peer
+PeerKey=P-256-PUBLIC
+SharedSecret=E3CC07DFBDDE76A1139811DB9FF5FAF9D17EF39944F1E77D1F6A208524BF7B1B
+
+# TEST CURVE secp224r1
+
+PrivateKey=ALICE_secp224r1
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBxLKkXFJXYqGUlTsmgjlesi
+kwqejrekrkSTbehyoTwDOgAEUcEh0Ggy/rD+Nj9JQozzI+qzPtiU7b2D2HtdCa4h
+fbVPXngcRH2B2xN8W+dcHoIxrxO2UFXy4xo=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp224r1_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEUcEh0Ggy/rD+Nj9JQozzI+qzPtiU7b2D
+2HtdCa4hfbVPXngcRH2B2xN8W+dcHoIxrxO2UFXy4xo=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp224r1:ALICE_secp224r1_PUB
+
+
+PrivateKey=BOB_secp224r1
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBzOHGGUR3fZYg3GSaUN6pxo
+NQtAlOzM3UclEhMzoTwDOgAEdwFklK/YoDRU6bM7X2ulNLwqx9TUETMFUM6VV9DB
+4YcvAzv6pQgVwYEU7IahmSKpX19chbPt2I0=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp224r1_PUB
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEdwFklK/YoDRU6bM7X2ulNLwqx9TUETMF
+UM6VV9DB4YcvAzv6pQgVwYEU7IahmSKpX19chbPt2I0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp224r1:BOB_secp224r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_secp224r1
+PeerKey=BOB_secp224r1_PUB
+SharedSecret=34ea06d16d82f0d1725de47f3639ac0c23db7d7ed68f01488539a2a5
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_secp224r1
+PeerKey=ALICE_secp224r1_PUB
+SharedSecret=34ea06d16d82f0d1725de47f3639ac0c23db7d7ed68f01488539a2a5
+
+# TEST CURVE secp384r1
+
+PrivateKey=ALICE_secp384r1
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCxE7Q4m1dsK7M3Otxo
+cgY/ejX9JOKKdAtSnRiU4bnK3eFmALkMN7XIveQnWLB1PEKhZANiAAQaUsvUFr/u
+ISpAmYqYZIme4VassCtb0tNGU97s3qt4ozcogZ4z+fIzXZ4YXqfGoEa57+uQDgqr
++jNOTji7Gxopt6AqZ9EvwuVaCuunUi0pcx6cc8IuUfrwMwSFovV/7sM=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp384r1_PUB
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEGlLL1Ba/7iEqQJmKmGSJnuFWrLArW9LT
+RlPe7N6reKM3KIGeM/nyM12eGF6nxqBGue/rkA4Kq/ozTk44uxsaKbegKmfRL8Ll
+Wgrrp1ItKXMenHPCLlH68DMEhaL1f+7D
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp384r1:ALICE_secp384r1_PUB
+
+
+PrivateKey=BOB_secp384r1
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBRiGXRsb5sUq0b3/dg
+Z+pA9kbrSivBMCUCXVwxno1d/30hI/Yy0Z5PWwbBgwTFprWhZANiAASp1FeUOBJF
+mzQCNbGiOz8He0kF+KIf24UGYVO5MC7u5rV9hpoYsbcgmwxALskPN18os2ygK1Pn
+f/h+WALIsG2RknSTbiyvBYkoIhJV9cflvEDpMeaWSLF7qJ5YjEIf9PM=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp384r1_PUB
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqdRXlDgSRZs0AjWxojs/B3tJBfiiH9uF
+BmFTuTAu7ua1fYaaGLG3IJsMQC7JDzdfKLNsoCtT53/4flgCyLBtkZJ0k24srwWJ
+KCISVfXH5bxA6THmlkixe6ieWIxCH/Tz
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp384r1:BOB_secp384r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_secp384r1
+PeerKey=BOB_secp384r1_PUB
+SharedSecret=2006ed49acbb991b8fbf8a15c3f263542496eaefe1e2952591b72fb929463eac7a403a5419cebbfb73734918eaed59fd
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_secp384r1
+PeerKey=ALICE_secp384r1_PUB
+SharedSecret=2006ed49acbb991b8fbf8a15c3f263542496eaefe1e2952591b72fb929463eac7a403a5419cebbfb73734918eaed59fd
+
+# TEST CURVE secp521r1
+
+PrivateKey=ALICE_secp521r1
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAFBIz3FLAuX8VCWzM
+wu1f/tm8pf1QqnsdLqaIWCQAJa2W5ldpJTYfkj1gGxM44AD3qHnkXISvNLwwuxI1
+hr2+pOGhgYkDgYYABACWlOOFYk/p3AS2LxEQWBuMm6uIjo3XArjh1QrsLcUc5hhi
+82CIz6kKwKjCnYRDHq4iv1x63rVEzGGhQOM1g+cRVwHSpfbBpaxK7bMLkVFOOavv
+OdcdyRHaHsvxw2pREmdS/GwtfgT8odQrG06KMIwVeL+H08fGJSbPX0Zock0DOPCp
+aw==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_secp521r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAlpTjhWJP6dwEti8REFgbjJuriI6N
+1wK44dUK7C3FHOYYYvNgiM+pCsCowp2EQx6uIr9cet61RMxhoUDjNYPnEVcB0qX2
+waWsSu2zC5FRTjmr7znXHckR2h7L8cNqURJnUvxsLX4E/KHUKxtOijCMFXi/h9PH
+xiUmz19GaHJNAzjwqWs=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_secp521r1:ALICE_secp521r1_PUB
+
+
+PrivateKey=BOB_secp521r1
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIA9C/sMWveRlHPr9P5
+cc3U+1L2/zB0VtHewKSQRWZ67SmS4+m7uXTqUVSLRHiQEgQid0cg77gSxXPlmV+z
+y0f3zd+hgYkDgYYABAE18N3SwDGtea3IOqUdh3j0JtnMeP41i/agEBlxK8/iEBXc
+Q61mkIrQIKcabRhoylEugXHiyNnqNQOD4DUa0bTKzAHtJ4UqqbEVno6byRmcUQwb
+mvG89eS8GLEmk5X/O2atHU4yIGTuTRQWn/BTJUCS+OgJz4FZdadscc5Z640EZqSD
+iw==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_secp521r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBNfDd0sAxrXmtyDqlHYd49CbZzHj+
+NYv2oBAZcSvP4hAV3EOtZpCK0CCnGm0YaMpRLoFx4sjZ6jUDg+A1GtG0yswB7SeF
+KqmxFZ6Om8kZnFEMG5rxvPXkvBixJpOV/ztmrR1OMiBk7k0UFp/wUyVAkvjoCc+B
+WXWnbHHOWeuNBGakg4s=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_secp521r1:BOB_secp521r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_secp521r1
+PeerKey=BOB_secp521r1_PUB
+SharedSecret=018c8f33e544a0fa8854dcd96bdba75b7687d1c42b2ff1bf0a06d49c424fee96d8a7f3af3119dcbfabc1c147477c50f7c72971956f9bb17ddec6d02b2187f06cf4be
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_secp521r1
+PeerKey=ALICE_secp521r1_PUB
+SharedSecret=018c8f33e544a0fa8854dcd96bdba75b7687d1c42b2ff1bf0a06d49c424fee96d8a7f3af3119dcbfabc1c147477c50f7c72971956f9bb17ddec6d02b2187f06cf4be
+
+# TEST CURVE prime192v1
+
+PrivateKey=ALICE_prime192v1
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBjxfXvSFNqD2UzFVN1L
+bQrPlzop7dxQq/ehNAMyAATibpGuYzCjkT1tWLYEogpKz74WqhvbQtZPkCYQCin1
+cmZuNW+BZ0jyVEpGlpnZPMg=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_prime192v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE4m6RrmMwo5E9bVi2BKIKSs++Fqob
+20LWT5AmEAop9XJmbjVvgWdI8lRKRpaZ2TzI
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_prime192v1:ALICE_prime192v1_PUB
+
+
+PrivateKey=BOB_prime192v1
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBhewaqXNZlYyqnmuEEE
+Y/oUXe3/jpzhmyGhNAMyAASkpwNJEP/1FuuWKCDDUm26iyqrs+zKwayZnaF77YC6
+qCtgia7yNcSl9tlWHh3gQgw=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_prime192v1_PUB
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEpKcDSRD/9Rbrliggw1Jtuosqq7Ps
+ysGsmZ2he+2AuqgrYImu8jXEpfbZVh4d4EIM
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_prime192v1:BOB_prime192v1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_prime192v1
+PeerKey=BOB_prime192v1_PUB
+SharedSecret=be2a779b587f8f5d7c9d8f006e0a6d0e996c9c63c255f861
+
+# Negative test: A weak curve with a strength < 112 fails in FIPS mode.
+Availablein = fips
+Derive=ALICE_prime192v1
+Securitycheck = 1
+PeerKey=BOB_prime192v1_PUB
+Result = DERIVE_SET_PEER_ERROR
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_prime192v1
+PeerKey=ALICE_prime192v1_PUB
+SharedSecret=be2a779b587f8f5d7c9d8f006e0a6d0e996c9c63c255f861
+
+# TEST CURVE prime256v1
+
+PrivateKey=ALICE_prime256v1
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQglUPDk8gQ8lMj38V7
+0jPBZDfQUx5pNOVSKOMTqlh04POhRANCAARq87w+K0q9b1mzJGh309kjNvYTS02m
+YkHKxAewiZwmt/5w+5uywz/+0130SdAWbXtECjaHUK94YEHzp0G/PCl5
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_prime256v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEavO8PitKvW9ZsyRod9PZIzb2E0tN
+pmJBysQHsImcJrf+cPubssM//tNd9EnQFm17RAo2h1CveGBB86dBvzwpeQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_prime256v1:ALICE_prime256v1_PUB
+
+
+PrivateKey=BOB_prime256v1
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNsLfn/sRZfm9ZcM7
+xURiUHT7+w8Jgk9SbwTVDjpLYYmhRANCAASRmyKNgUbADGxkIOAVh9T7IXv2ZDT6
+I5YMW6wOs27VMOAD0AiNLrv7sW1TdqxkUtF17/GFpLvFOuZcbdX4p3i/
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_prime256v1_PUB
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkZsijYFGwAxsZCDgFYfU+yF79mQ0
++iOWDFusDrNu1TDgA9AIjS67+7FtU3asZFLRde/xhaS7xTrmXG3V+Kd4vw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_prime256v1:BOB_prime256v1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_prime256v1
+PeerKey=BOB_prime256v1_PUB
+SharedSecret=390021fbca00d959c1adaf7e9cedef0e65a582489eab9adbe739ef66bf82adb4
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_prime256v1
+PeerKey=ALICE_prime256v1_PUB
+SharedSecret=390021fbca00d959c1adaf7e9cedef0e65a582489eab9adbe739ef66bf82adb4
+
+# TEST CURVE sect163k1
+
+PrivateKey=ALICE_sect163k1
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUBxkeGOXE86PAijpk8trN/
+f3kl4UmhLgMsAAQD1hrDCJ2MSFKZ6Q11cTllX/l5HY0Hg5XZCxMFC84AaczwPtNJ
+YNCxfCk=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect163k1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEA9YawwidjEhSmekNdXE5ZV/5eR2NB4OV
+2QsTBQvOAGnM8D7TSWDQsXwp
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect163k1:ALICE_sect163k1_PUB
+
+PrivateKey=BOB_sect163k1
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUCUJ5kItSfXidHXsgokcS7
+nzPFbOShLgMsAAQGrYNJ1qgdb3A9ISOmTujfS+WYFKwBXXrJEluAkeNh3jXnDq8X
++XBB0k8=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect163k1_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBq2DSdaoHW9wPSEjpk7o30vlmBSsAV16
+yRJbgJHjYd415w6vF/lwQdJP
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect163k1:BOB_sect163k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect163k1
+PeerKey=BOB_sect163k1_PUB
+SharedSecret=07bfdf00759b383aa7741ae4634400f8ddf2047092
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect163k1
+PeerKey=ALICE_sect163k1_PUB
+SharedSecret=07bfdf00759b383aa7741ae4634400f8ddf2047092
+
+# TEST CURVE sect163r2
+
+PrivateKey=ALICE_sect163r2
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUDjH2G7BkPTBM4VtljaQr8
+sXVLNOqhLgMsAAQHHqWxJWR2KrHCPp/PSjZIdK88ET0A323/UOTxhYHwsLpR7rp3
+ahq1lQ8=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect163r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBx6lsSVkdiqxwj6fz0o2SHSvPBE9AN9t
+/1Dk8YWB8LC6Ue66d2oatZUP
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect163r2:ALICE_sect163r2_PUB
+
+
+PrivateKey=BOB_sect163r2
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUBXOM9Tm6sKXUlRLlW0HgC
+NTDxW2ihLgMsAAQGxa8xRcC+TIcDgGtehDVEV1PoBokBwtILj16NPYC0aBZI8/nF
+F4jhgmc=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect163r2_PUB
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBsWvMUXAvkyHA4BrXoQ1RFdT6AaJAcLS
+C49ejT2AtGgWSPP5xReI4YJn
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect163r2:BOB_sect163r2_PUB
+
+
+# ECDH Alice with Bob peer
+
+Availablein = default
+Derive=ALICE_sect163r2
+PeerKey=BOB_sect163r2_PUB
+SharedSecret=040df54e6df412790ef5c0fafbbfcba5136b872951
+
+# ECDH Bob with Alice peer
+
+Availablein = default
+Derive=BOB_sect163r2
+PeerKey=ALICE_sect163r2_PUB
+SharedSecret=040df54e6df412790ef5c0fafbbfcba5136b872951
+
+# TEST CURVE sect233k1
+
+PrivateKey=ALICE_sect233k1
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1aR7qaKm1vmZWK2bGsJ1rX
+mH6BpTkW4t1L4zSf/KFAAz4ABADcDiv+bTvPVViqYLNz06VO5wodry+sGi6fnJIr
+QQCTfZ9d5whiIsbY5Thlcm7I0A/cIGoShA/6LumOVA==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect233k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEANwOK/5tO89VWKpgs3PTpU7nCh2vL6wa
+Lp+ckitBAJN9n13nCGIixtjlOGVybsjQD9wgahKED/ou6Y5U
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect233k1:ALICE_sect233k1_PUB
+
+
+PrivateKey=BOB_sect233k1
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0oa5BrzYxm6mn51Xyphn6X
+OUjKc9oMDHCowAyHTaFAAz4ABAGKiFuFJVQeymHYRVnt2LNF2MSaTMcL9JGSPn2z
+OwBis5MS4kgEFakWQl7KpGiy3vS89wmpblvHLJ/+IQ==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect233k1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAYqIW4UlVB7KYdhFWe3Ys0XYxJpMxwv0
+kZI+fbM7AGKzkxLiSAQVqRZCXsqkaLLe9Lz3CaluW8csn/4h
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect233k1:BOB_sect233k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_sect233k1
+PeerKey=BOB_sect233k1_PUB
+SharedSecret=00a5e5f2e992f4360d530dd365d14f5c6013212e14f4ea258c91c71f1512
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_sect233k1
+PeerKey=ALICE_sect233k1_PUB
+SharedSecret=00a5e5f2e992f4360d530dd365d14f5c6013212e14f4ea258c91c71f1512
+
+# TEST CURVE sect233r1
+
+PrivateKey=ALICE_sect233r1
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AEN6fePR2gizyXzU6kIgU
+Gijp5+IQAXoNBfKnVeChQAM+AAQB0kEwu2fwQWo1v1j7XQ8uJT3iMwRC8w+cxgxx
+GQ4B/FyjrhIUpEDWaMqfV23McZ6WdbIUe3MZ7K5pG38=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect233r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAdJBMLtn8EFqNb9Y+10PLiU94jMEQvMP
+nMYMcRkOAfxco64SFKRA1mjKn1dtzHGelnWyFHtzGeyuaRt/
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect233r1:ALICE_sect233r1_PUB
+
+
+PrivateKey=BOB_sect233r1
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AXHWOeS6fG0XCH3FnHDuS
+IcELUeDG+AYNNeLVZd6hQAM+AAQAYRRYH017uxcaMPF3GOsL4bvodW1yZLEtL3pm
+CkcAfqJI/4niCr8uHKh0gBa2JBjBWMV1u8Mpf60uvok=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect233r1_PUB
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAGEUWB9Ne7sXGjDxdxjrC+G76HVtcmSx
+LS96ZgpHAH6iSP+J4gq/LhyodIAWtiQYwVjFdbvDKX+tLr6J
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect233r1:BOB_sect233r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_sect233r1
+PeerKey=BOB_sect233r1_PUB
+SharedSecret=01625f3fcd367ee7cd74c67cca02dccfce6c3b19ef07e358ed943d17a8e2
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_sect233r1
+PeerKey=ALICE_sect233r1_PUB
+SharedSecret=01625f3fcd367ee7cd74c67cca02dccfce6c3b19ef07e358ed943d17a8e2
+
+# TEST CURVE sect283k1
+
+PrivateKey=ALICE_sect283k1
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAGhnsmZ2UDKV3QKmq3k+
+33LQ6n5aCYvKXcMgiZlBS/RrVgIRoUwDSgAEBSgpOw5TMTc4O8HHhw5atJl5mrnW
+uC6oWVYRYpD1IMvPNTRsAYo4SYRmPIfgzVv/ESVcHVaD1lPNo+eq0HN1qhvRX+4r
+mGO7
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect283k1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBSgpOw5TMTc4O8HHhw5atJl5mrnWuC6o
+WVYRYpD1IMvPNTRsAYo4SYRmPIfgzVv/ESVcHVaD1lPNo+eq0HN1qhvRX+4rmGO7
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect283k1:ALICE_sect283k1_PUB
+
+
+PrivateKey=BOB_sect283k1
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAAJXIwfWjYbiM5jEcNw8
+8/1kbEnhVjWGivO7zDPts7AuKSMkoUwDSgAEA5Ause5pdH6ks7PdyPeoPbYAkz6V
+D5v8KTV1b97PiYmZNDeoBY78FQyHRSvdSo+oRew2RacpaCAntRoiWHyN1nAdDSzj
+CN/m
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect283k1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEA5Ause5pdH6ks7PdyPeoPbYAkz6VD5v8
+KTV1b97PiYmZNDeoBY78FQyHRSvdSo+oRew2RacpaCAntRoiWHyN1nAdDSzjCN/m
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect283k1:BOB_sect283k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_sect283k1
+PeerKey=BOB_sect283k1_PUB
+SharedSecret=02f2e682c2f60d7261624f3661a5e85fca920443b72aa4dd5a540082e65e552302d8f825
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_sect283k1
+PeerKey=ALICE_sect283k1_PUB
+SharedSecret=02f2e682c2f60d7261624f3661a5e85fca920443b72aa4dd5a540082e65e552302d8f825
+
+# TEST CURVE sect283r1
+
+PrivateKey=ALICE_sect283r1
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAi4Jrhu19kt7H8jw1FO7
+VzCxh6p0pI0ogl3q9ev5NFkufZkZoUwDSgAEAHx6cwnWw+9l3oZHpx+R8nu7SLqU
+S40TU2uL0W6VTNANIvcJB1b++3okH0FJgFAahbaotafYTyfqCoY11VaxnVqU5/aE
+7jsD
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect283r1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAHx6cwnWw+9l3oZHpx+R8nu7SLqUS40T
+U2uL0W6VTNANIvcJB1b++3okH0FJgFAahbaotafYTyfqCoY11VaxnVqU5/aE7jsD
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect283r1:ALICE_sect283r1_PUB
+
+
+PrivateKey=BOB_sect283r1
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkACD04gJaVfVxK/Dpbxjq
+rzZWc6B76a23MK/IQD1jMlGPQzzxoUwDSgAEA13mIYMvik12DBp8JkdETMB1ewOw
+22C/xhnzLEHmgrG0ewxeANVAoIZy2uv5t0VUJIp4PYdLNaqIguN+9v6U78O4lass
+Iq5I
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect283r1_PUB
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEA13mIYMvik12DBp8JkdETMB1ewOw22C/
+xhnzLEHmgrG0ewxeANVAoIZy2uv5t0VUJIp4PYdLNaqIguN+9v6U78O4lassIq5I
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect283r1:BOB_sect283r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_sect283r1
+PeerKey=BOB_sect283r1_PUB
+SharedSecret=05778bc1afcf38d7dddb2150cacbfe4d38dc588968fd8b2e859c28ae2629d3435f89f6cc
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_sect283r1
+PeerKey=ALICE_sect283r1_PUB
+SharedSecret=05778bc1afcf38d7dddb2150cacbfe4d38dc588968fd8b2e859c28ae2629d3435f89f6cc
+
+# TEST CURVE sect409k1
+
+PrivateKey=ALICE_sect409k1
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMg1vV7wiPe1ovX+ukz
+VfwPZoqvyj/vdif04Opi9PcjV5mPBEZgSFBg8hbutNxZJdVLrxShbANqAAQACe1I
+J5ilSk1pPLvbcjEZIE6abC9LZ9WmHuNJxM9LAW1OuLvJGi72AsGYUOGpX0WGmK6C
+AYaqZb2Qeedq/yUIljDHYi66J+26owYl7lOMpRzZ9U2QDJrZ7TYuxeMUui6re0B+
+JuZdYw==
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect409k1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAAntSCeYpUpNaTy723IxGSBOmmwvS2fV
+ph7jScTPSwFtTri7yRou9gLBmFDhqV9FhpiuggGGqmW9kHnnav8lCJYwx2Iuuift
+uqMGJe5TjKUc2fVNkAya2e02LsXjFLouq3tAfibmXWM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect409k1:ALICE_sect409k1_PUB
+
+
+PrivateKey=BOB_sect409k1
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMIYBGZZcZz4qCdhAV9
+vqpfe8vV+vJEhjawR52JUV1rumWEBPAx0o6E+gaxHBr5hzVGkIKhbANqAAQAAQKK
+s60CTUUkltsT+lIBukjz850pkGGLltJ4eaZn4k9AtN/lFTCq6Vgqe2sDrjA3b45q
+AdWjf1vRaP0wawJ13SjApJmyXg5hQks6d0Zqz2OHYhGEGiM159VtTlStK067dVe1
+fGVDeg==
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect409k1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAAECirOtAk1FJJbbE/pSAbpI8/OdKZBh
+i5bSeHmmZ+JPQLTf5RUwqulYKntrA64wN2+OagHVo39b0Wj9MGsCdd0owKSZsl4O
+YUJLOndGas9jh2IRhBojNefVbU5UrStOu3VXtXxlQ3o=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect409k1:BOB_sect409k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_sect409k1
+PeerKey=BOB_sect409k1_PUB
+SharedSecret=01523ec40ad40226a57281a4c423801ae9495dcf736eddd667023b1390977d018ce79313fb99c503f39cbee80f5c1968f3bd02e0
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_sect409k1
+PeerKey=ALICE_sect409k1_PUB
+SharedSecret=01523ec40ad40226a57281a4c423801ae9495dcf736eddd667023b1390977d018ce79313fb99c503f39cbee80f5c1968f3bd02e0
+
+# TEST CURVE sect409r1
+
+PrivateKey=ALICE_sect409r1
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAYTMsTpey51D2ULnd
+pN+AAWnJLy9pTerziakhjii8OyWKpUVfpDFNneCCd2oQTDcPX5vdoWwDagAEAYfk
+3ZejxpVYCG7dYHTVhhcqILEyTYoQa4YehGPxKcbmgpqW4Wev1tEDVI3JIowICYGU
+owHXXzgDXoJeR79wgb7ySAlXJXgQ8Ficr7i0CaqyAuIpFw9FWJT3jheFwnbpDTvI
+eIozlf4=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect409r1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAYfk3ZejxpVYCG7dYHTVhhcqILEyTYoQ
+a4YehGPxKcbmgpqW4Wev1tEDVI3JIowICYGUowHXXzgDXoJeR79wgb7ySAlXJXgQ
+8Ficr7i0CaqyAuIpFw9FWJT3jheFwnbpDTvIeIozlf4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect409r1:ALICE_sect409r1_PUB
+
+
+PrivateKey=BOB_sect409r1
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAsCs1nRgwW97TdKIH
+PRcsqmK1e8TIZ00e6rqLb3nD4sIe+Gw/fGhSUER9akQ7lAluEUnfoWwDagAEAfM2
+fvBEic+7jV4oC+v8GfsunD9Zp9rzNgMp3dJ+ZU7r6Bp+ZH3dL9Uvv8kUiB89UlDl
+LwBm/W6TlzGuh1FnzXYKVnhnXpzSlRZQsPCceKukbV46Asl8O23b2+DPJgQBGbMf
+WsgK+KA=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect409r1_PUB
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAfM2fvBEic+7jV4oC+v8GfsunD9Zp9rz
+NgMp3dJ+ZU7r6Bp+ZH3dL9Uvv8kUiB89UlDlLwBm/W6TlzGuh1FnzXYKVnhnXpzS
+lRZQsPCceKukbV46Asl8O23b2+DPJgQBGbMfWsgK+KA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect409r1:BOB_sect409r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_sect409r1
+PeerKey=BOB_sect409r1_PUB
+SharedSecret=019dc849870dc6f79978aca8e1fc6aa6836c8fcb25bbfe3d5ab41ea53eae2c7329952280efb30f9097a31a774191e476dbd842d5
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_sect409r1
+PeerKey=ALICE_sect409r1_PUB
+SharedSecret=019dc849870dc6f79978aca8e1fc6aa6836c8fcb25bbfe3d5ab41ea53eae2c7329952280efb30f9097a31a774191e476dbd842d5
+
+# TEST CURVE sect571k1
+
+PrivateKey=ALICE_sect571k1
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIARO8hI8j6TZ556/d
+RcdGYvdblnALD2XZCKu2c3C5yQIeA8Tidi+f8n6cCnb5FtJNTYKqP8tRfHlwAZtW
+/giXi/4yF5K2twS3oYGVA4GSAAQAtiuUbz7v6njhujnDhanD4iV84K0LQd9wP1+k
+v0Bn833nKtFrZComgrip2SwUaEYOE6IcPyCJ48vWOKvIR6fU11tWwsFRPU0Cct0S
+qVbANAJzwL1umwuKNPblJ6ZEwcBdgw7hWFL6sh+0ayAQ3a8zOizhViJPCnaKR/Oo
+AtaUpCWLSTHDF1gK4/kmlwEx+8o=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect571k1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQAtiuUbz7v6njhujnDhanD4iV84K0L
+Qd9wP1+kv0Bn833nKtFrZComgrip2SwUaEYOE6IcPyCJ48vWOKvIR6fU11tWwsFR
+PU0Cct0SqVbANAJzwL1umwuKNPblJ6ZEwcBdgw7hWFL6sh+0ayAQ3a8zOizhViJP
+CnaKR/OoAtaUpCWLSTHDF1gK4/kmlwEx+8o=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect571k1:ALICE_sect571k1_PUB
+
+
+PrivateKey=BOB_sect571k1
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAVZT4tnX9dMWS6Vd
+YCoYRl9o/j/Hz7KGqF4Ujk9n9b4+mXbJ37tobpjnpNqKlJfI04w80JPp+NxpoBR3
+8p1bcc9iL4Smh48YoYGVA4GSAAQARzAx9yVkHL8pbe1myosILIhhLLURYRDHmopO
+IijLQmTATV9pYO7CrFBPBjaKNRjPpw/cVOs89X9Jdzx/bolkGqVAsjLN1tsCrqET
+31F4mpnfsPwcM6zbp6lE4N2gL5cakKMmyPNM4d3m8xl1f6e56LBYfaxOaqcYzbXC
+Q/Aiij13H06qKhuFM4iiB/0D164=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect571k1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQARzAx9yVkHL8pbe1myosILIhhLLUR
+YRDHmopOIijLQmTATV9pYO7CrFBPBjaKNRjPpw/cVOs89X9Jdzx/bolkGqVAsjLN
+1tsCrqET31F4mpnfsPwcM6zbp6lE4N2gL5cakKMmyPNM4d3m8xl1f6e56LBYfaxO
+aqcYzbXCQ/Aiij13H06qKhuFM4iiB/0D164=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect571k1:BOB_sect571k1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_sect571k1
+PeerKey=BOB_sect571k1_PUB
+SharedSecret=05a423515fcc91b3171c83edd5c4085ff729a8ff0a3fa1578ebf769523ded0f5c1e387cf63109f2fbd95e117345b788b4577fdc6b6e727230bfc73eae0d4e851cb6f6e616eddb13e
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_sect571k1
+PeerKey=ALICE_sect571k1_PUB
+SharedSecret=05a423515fcc91b3171c83edd5c4085ff729a8ff0a3fa1578ebf769523ded0f5c1e387cf63109f2fbd95e117345b788b4577fdc6b6e727230bfc73eae0d4e851cb6f6e616eddb13e
+
+# TEST CURVE sect571r1
+
+PrivateKey=ALICE_sect571r1
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIArsi//Zp9veeURYV
+zGYHn4MlNIxNt6U6vtmTPS/NaoiaavxbOimpHgxYPCjpoPYhM33Z2VBh7pl2aoRW
+3GBepLFLoF8oiQaLoYGVA4GSAAQDRG2b7KCUKbGDTWVgW0qqNC3oYcz4f/AwTHmo
+US1mzdRZj/Sf6IU+7mITGnQ6lg1EkTas/X6TK1hNMV7tAjSeowdN75wzd8YF32SF
+HMIcWew5g56oF961qv3IvICZnRAOmWyGHeHdYwHxMBSBPNgua42QGoJz6J6dYAUe
+vE+F3N29p/tRBGNzMFIqoDdW+NA=
+-----END PRIVATE KEY-----
+
+PublicKey=ALICE_sect571r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQDRG2b7KCUKbGDTWVgW0qqNC3oYcz4
+f/AwTHmoUS1mzdRZj/Sf6IU+7mITGnQ6lg1EkTas/X6TK1hNMV7tAjSeowdN75wz
+d8YF32SFHMIcWew5g56oF961qv3IvICZnRAOmWyGHeHdYwHxMBSBPNgua42QGoJz
+6J6dYAUevE+F3N29p/tRBGNzMFIqoDdW+NA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = ALICE_sect571r1:ALICE_sect571r1_PUB
+
+
+PrivateKey=BOB_sect571r1
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAYj65N5XJTQusn+h
+Z9xj/dgZ4qR1GDC1Ij7jYuow+TvGrG2wz/WT76/lLNtlCLfDW2kODDUmDAJeK/e+
+VMO7suJTXGnrGFHioYGVA4GSAAQGxykYFxqz7jZxcBbiPLYfJEhXlf2SYmMKve74
+trOT+qjIm35+uUAcg2krOzH7X/8wH6bVSn/UKG/k27wZrAnWzZ5XKd8QI70H8aHv
+LgrCoMoqOno+h6J4TgvlDq7FIGZ8fvDaM7YJ8dHPX5FC8Vyphu82TcNdnNATBqom
+6WDWc7RTFZ4sijL5ywVhovwJ1gA=
+-----END PRIVATE KEY-----
+
+PublicKey=BOB_sect571r1_PUB
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGxykYFxqz7jZxcBbiPLYfJEhXlf2S
+YmMKve74trOT+qjIm35+uUAcg2krOzH7X/8wH6bVSn/UKG/k27wZrAnWzZ5XKd8Q
+I70H8aHvLgrCoMoqOno+h6J4TgvlDq7FIGZ8fvDaM7YJ8dHPX5FC8Vyphu82TcNd
+nNATBqom6WDWc7RTFZ4sijL5ywVhovwJ1gA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = BOB_sect571r1:BOB_sect571r1_PUB
+
+
+# ECDH Alice with Bob peer
+
+Derive=ALICE_sect571r1
+PeerKey=BOB_sect571r1_PUB
+SharedSecret=004b397e564055e2c7d87648183c948655ccb0ebb20bd441f9b11635cf461cb5815ff060eab33091b9f7aed67bec8ba1bb7b22437ece3c92c7cf76124408fb951595dfb4a512b2ae
+
+# ECDH Bob with Alice peer
+
+Derive=BOB_sect571r1
+PeerKey=ALICE_sect571r1_PUB
+SharedSecret=004b397e564055e2c7d87648183c948655ccb0ebb20bd441f9b11635cf461cb5815ff060eab33091b9f7aed67bec8ba1bb7b22437ece3c92c7cf76124408fb951595dfb4a512b2ae
+
+Title = ECDH KATs (from RFC 5114, 5903, 7027)
+
+# Keys and shared secrets from RFC 5114
+PrivateKey=PRIME192V1_RFC5114
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBgyP6MWnY6cZZP1lHa8
+FCAAq1vg4knENCahNAMyAATNRkiez9bBBeez0yVm4rEi4kmrqt2HBhJoiHtId99R
+3U3D1v0R8KJvj9OEQxeRbpo=
+-----END PRIVATE KEY-----
+
+PublicKey=PRIME192V1_RFC5114-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEzUZIns/WwQXns9MlZuKxIuJJq6rd
+hwYSaIh7SHffUd1Nw9b9EfCib4/ThEMXkW6a
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = PRIME192V1_RFC5114:PRIME192V1_RFC5114-PUBLIC
+
+
+PrivateKey=PRIME192V1_RFC5114-Peer
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBhjH5W7SmdjLJxHbu6a
+tpWrJAoEmTB/z2KhNAMyAARRmhIWgOAEVGa6Id8u7kf1lztQBXfvE9X/YTq01kzu
+OiCHW9sQ+VP2swygcsYKpX8=
+-----END PRIVATE KEY-----
+
+PublicKey=PRIME192V1_RFC5114-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEUZoSFoDgBFRmuiHfLu5H9Zc7UAV3
+7xPV/2E6tNZM7jogh1vbEPlT9rMMoHLGCqV/
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = PRIME192V1_RFC5114-Peer:PRIME192V1_RFC5114-Peer-PUBLIC
+
+Availablein = default
+Derive=PRIME192V1_RFC5114
+PeerKey=PRIME192V1_RFC5114-Peer-PUBLIC
+SharedSecret=AD420182633F8526BFE954ACDA376F05E5FF4F837F54FEBE
+
+Availablein = default
+Derive=PRIME192V1_RFC5114-Peer
+PeerKey=PRIME192V1_RFC5114-PUBLIC
+SharedSecret=AD420182633F8526BFE954ACDA376F05E5FF4F837F54FEBE
+
+PrivateKey=SECP224R1_RFC5114
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBy1WOtsKI2nB7u0+PuuKrnp
+y2LjvFx1c+IuJtN/oTwDOgAESd/vMJ+BSIwwTP9as+5aIVQ2fceDMVDgpR8+608r
+XuRXYsT2VMGgxn9Uz4iwFrUbzj18Io1XrbQ=
+-----END PRIVATE KEY-----
+
+PublicKey=SECP224R1_RFC5114-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAESd/vMJ+BSIwwTP9as+5aIVQ2fceDMVDg
+pR8+608rXuRXYsT2VMGgxn9Uz4iwFrUbzj18Io1XrbQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP224R1_RFC5114:SECP224R1_RFC5114-PUBLIC
+
+
+PrivateKey=SECP224R1_RFC5114-Peer
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBysOxrdPZdw5vanCO6fO44K
+s7SA6fJ/hciLXm0YoTwDOgAEazrJao0M3mpVmb6AMu3xDBYtCorSGVBtzUKiB9SR
+vpnCE6fRyjcG3r/jBfNhr8uzPiYJyLFhitU=
+-----END PRIVATE KEY-----
+
+PublicKey=SECP224R1_RFC5114-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEazrJao0M3mpVmb6AMu3xDBYtCorSGVBt
+zUKiB9SRvpnCE6fRyjcG3r/jBfNhr8uzPiYJyLFhitU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP224R1_RFC5114-Peer:SECP224R1_RFC5114-Peer-PUBLIC
+
+Derive=SECP224R1_RFC5114
+PeerKey=SECP224R1_RFC5114-Peer-PUBLIC
+SharedSecret=52272F50F46F4EDC9151569092F46DF2D96ECC3B6DC1714A4EA949FA
+
+
+Derive=SECP224R1_RFC5114-Peer
+PeerKey=SECP224R1_RFC5114-PUBLIC
+SharedSecret=52272F50F46F4EDC9151569092F46DF2D96ECC3B6DC1714A4EA949FA
+
+PrivateKey=PRIME256V1_RFC5114
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQggUJkFF8vVvLpao4z
+ehKEmT+vQypavOWehntykdUHo6+hRANCAAQq9QLzvolS8sm1qNQWDQnpcWW+ULxC
+rkpejTtLqDrrFesPr0yphsTThoGg+YctedVnlb1L/25t48D1AV7OXv2F
+-----END PRIVATE KEY-----
+
+PublicKey=PRIME256V1_RFC5114-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKvUC876JUvLJtajUFg0J6XFlvlC8
+Qq5KXo07S6g66xXrD69MqYbE04aBoPmHLXnVZ5W9S/9ubePA9QFezl79hQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = PRIME256V1_RFC5114:PRIME256V1_RFC5114-PUBLIC
+
+
+PrivateKey=PRIME256V1_RFC5114-Peer
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgLOF4jsGX4JbblaIA
+zAqyahnOa8ytViuO7htZN2HPf0GhRANCAASxIN5Ko2SSeVNG6N5sLIZGrgaq6ief
+p3WzqwcV9s5RsJ8bfuziDXte2OxoX6Pwcdg3JwJwkqhBE4XDTd5XCLK2
+-----END PRIVATE KEY-----
+
+PublicKey=PRIME256V1_RFC5114-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsSDeSqNkknlTRujebCyGRq4Gquon
+n6d1s6sHFfbOUbCfG37s4g17XtjsaF+j8HHYNycCcJKoQROFw03eVwiytg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = PRIME256V1_RFC5114-Peer:PRIME256V1_RFC5114-Peer-PUBLIC
+
+Derive=PRIME256V1_RFC5114
+PeerKey=PRIME256V1_RFC5114-Peer-PUBLIC
+SharedSecret=DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788
+
+
+Derive=PRIME256V1_RFC5114-Peer
+PeerKey=PRIME256V1_RFC5114-PUBLIC
+SharedSecret=DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788
+
+PrivateKey=SECP384R1_RFC5114
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDSczXqcWZK8kTdFOn9
+EmBxXf2KeWVXHEjXCe56eWKhVtcGqQy8td8phvBf6tuTdvGhZANiAAR5MUjxeHY0
+1dpMbZB0QX0F4FerYvggVNEO5rBAPWJ5VH5qjqnR/XdCfQFv4nqLjGbGxBKUMx0j
+5vSA9PtM1AUEyUc5LpT0w/BrjzmLsp5CNo96aFkj3jtnus7SFKGh0Sg=
+-----END PRIVATE KEY-----
+
+PublicKey=SECP384R1_RFC5114-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEeTFI8Xh2NNXaTG2QdEF9BeBXq2L4IFTR
+DuawQD1ieVR+ao6p0f13Qn0Bb+J6i4xmxsQSlDMdI+b0gPT7TNQFBMlHOS6U9MPw
+a485i7KeQjaPemhZI947Z7rO0hShodEo
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP384R1_RFC5114:SECP384R1_RFC5114-PUBLIC
+
+
+PrivateKey=SECP384R1_RFC5114-Peer
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBS0Xkf20tw+JwPANRW
+wvcCO2ElJiw2p98fgCMRIczj05vlLgDBlKQTLEpsdovNlNKhZANiAARc1Cq5xBtT
+R/dLjU77cIs9WzbbZZFTWbRKvBdke2uZmXidcqhIZa4vIj8StaGrwSDhcUWP6qk5
+qqOov6xGtAS9j21bNIwPpNgM7KFjVsqTMkC96HI0Fajs4DWw7fNnVd4=
+-----END PRIVATE KEY-----
+
+PublicKey=SECP384R1_RFC5114-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEXNQqucQbU0f3S41O+3CLPVs222WRU1m0
+SrwXZHtrmZl4nXKoSGWuLyI/ErWhq8Eg4XFFj+qpOaqjqL+sRrQEvY9tWzSMD6TY
+DOyhY1bKkzJAvehyNBWo7OA1sO3zZ1Xe
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP384R1_RFC5114-Peer:SECP384R1_RFC5114-Peer-PUBLIC
+
+Derive=SECP384R1_RFC5114
+PeerKey=SECP384R1_RFC5114-Peer-PUBLIC
+SharedSecret=5EA1FC4AF7256D2055981B110575E0A8CAE53160137D904C59D926EB1B8456E427AA8A4540884C37DE159A58028ABC0E
+
+
+Derive=SECP384R1_RFC5114-Peer
+PeerKey=SECP384R1_RFC5114-PUBLIC
+SharedSecret=5EA1FC4AF7256D2055981B110575E0A8CAE53160137D904C59D926EB1B8456E427AA8A4540884C37DE159A58028ABC0E
+
+PrivateKey=SECP521R1_RFC5114
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBE/gtqCVzXj2XJ2aD
+srdCd7rSczXqcWZK8kMMxPM0WblmnueLP/ubhoMBXTRNy/72+5r0xsRwviVFFs08
+Gh+0c2KhgYkDgYYABAHrs03XVyGr+K3J2+0XiJy7l2XZCnxg8s7wB7sPKybhSIH9
+RELmidYcst0EbuMOP/0g+aRbvfZBPVg6Lb9Zkk/TXAD2tjLRlMA4jiLYQ35VjFUq
+4ZWt/RU/ktdJCDUbL4xO2pTtsJFtG1PAILXuyu0aX8OKIz5IMFh7su40ibO0KlqG
+pA==
+-----END PRIVATE KEY-----
+
+PublicKey=SECP521R1_RFC5114-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB67NN11chq/itydvtF4icu5dl2Qp8
+YPLO8Ae7Dysm4UiB/URC5onWHLLdBG7jDj/9IPmkW732QT1YOi2/WZJP01wA9rYy
+0ZTAOI4i2EN+VYxVKuGVrf0VP5LXSQg1Gy+MTtqU7bCRbRtTwCC17srtGl/DiiM+
+SDBYe7LuNImztCpahqQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP521R1_RFC5114:SECP521R1_RFC5114-PUBLIC
+
+
+PrivateKey=SECP521R1_RFC5114-Peer
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAzuNIDYZFoX0knyd2
+0ouuYWlS0Xkf20tw98M3hzKqGyKShEi80dwkltQ1sBBIBm6+T3KQPDYbGp3BGT3C
+ydCJG5ahgYkDgYYABAEOv6/G6F4I0kv//MGkUR2w5jS+6xtt7IxZOa5EdmIBr2IA
+QwupfIrGoOnwizPOfp/utbpO5eDYFRDCQpW4oI0CNQCkpuwwDfniV7A3K156v+8J
+NDZxmneIfrsLGM+Ambn0IStuMKFBnBjgKdNoY8ydRI9Nuk0qDmBxG+VykV+9T+8m
+lQ==
+-----END PRIVATE KEY-----
+
+PublicKey=SECP521R1_RFC5114-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBDr+vxuheCNJL//zBpFEdsOY0vusb
+beyMWTmuRHZiAa9iAEMLqXyKxqDp8Iszzn6f7rW6TuXg2BUQwkKVuKCNAjUApKbs
+MA354lewNyteer/vCTQ2cZp3iH67CxjPgJm59CErbjChQZwY4CnTaGPMnUSPTbpN
+Kg5gcRvlcpFfvU/vJpU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP521R1_RFC5114-Peer:SECP521R1_RFC5114-Peer-PUBLIC
+
+Derive=SECP521R1_RFC5114
+PeerKey=SECP521R1_RFC5114-Peer-PUBLIC
+SharedSecret=00CDEA89621CFA46B132F9E4CFE2261CDE2D4368EB5656634C7CC98C7A00CDE54ED1866A0DD3E6126C9D2F845DAFF82CEB1DA08F5D87521BB0EBECA77911169C20CC
+
+
+Derive=SECP521R1_RFC5114-Peer
+PeerKey=SECP521R1_RFC5114-PUBLIC
+SharedSecret=00CDEA89621CFA46B132F9E4CFE2261CDE2D4368EB5656634C7CC98C7A00CDE54ED1866A0DD3E6126C9D2F845DAFF82CEB1DA08F5D87521BB0EBECA77911169C20CC
+
+# Keys and shared secrets from RFC 5903
+PrivateKey=PRIME256V1_RFC5903
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgyI8B9RDZrD9wopLa
+ojFt5UTpqriv6EBJxiqcV4YtFDOhRANCAATa0LZTlCIc+bBR4f7KV4fQmN/mN/yQ
+ue+UXQw3clgRgFJxoEYc24JS1h8cRW+j5Zqx9FszrM9fWDieBXe4mQuz
+-----END PRIVATE KEY-----
+
+PublicKey=PRIME256V1_RFC5903-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2tC2U5QiHPmwUeH+yleH0Jjf5jf8
+kLnvlF0MN3JYEYBScaBGHNuCUtYfHEVvo+WasfRbM6zPX1g4ngV3uJkLsw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = PRIME256V1_RFC5903:PRIME256V1_RFC5903-PUBLIC
+
+
+PrivateKey=PRIME256V1_RFC5903-Peer
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgxu+cXXiuASoBEWSs
+s5fOIIhoXY8Gv5vgsoOrRkdr7lOhRANCAATRLftSicjU+BIItwJwOYw0IpaXCgvM
+t0xzb8dVRJS/Y1b788o2bMI+gVeFTBPFjWqsI/BGraMPg1PnTzMDmHKr
+-----END PRIVATE KEY-----
+
+PublicKey=PRIME256V1_RFC5903-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0S37UonI1PgSCLcCcDmMNCKWlwoL
+zLdMc2/HVUSUv2NW+/PKNmzCPoFXhUwTxY1qrCPwRq2jD4NT508zA5hyqw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = PRIME256V1_RFC5903-Peer:PRIME256V1_RFC5903-Peer-PUBLIC
+
+Derive=PRIME256V1_RFC5903
+PeerKey=PRIME256V1_RFC5903-Peer-PUBLIC
+SharedSecret=D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE
+
+
+Derive=PRIME256V1_RFC5903-Peer
+PeerKey=PRIME256V1_RFC5903-PUBLIC
+SharedSecret=D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE
+
+PrivateKey=SECP384R1_RFC5903
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAJnzxwNNSixpmITXOj
+daZ/diTvfGs8DxYGR7Z0FNzmVeNbU4BB5knuP674lng6sZShZANiAARmeELX0YCs
+LN5vdPN1UfVXVcdkXCDvc+MWNP5ytMVe5t46yAistL20yIcyrulfQaqUgu0fwO65
+yvxJhGJcz8I/ZQMhSeDhRK2gJBgVNaDzjuufz/PCyUfa5ptMY0VzqBw=
+-----END PRIVATE KEY-----
+
+PublicKey=SECP384R1_RFC5903-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEZnhC19GArCzeb3TzdVH1V1XHZFwg73Pj
+FjT+crTFXubeOsgIrLS9tMiHMq7pX0GqlILtH8Duucr8SYRiXM/CP2UDIUng4USt
+oCQYFTWg847rn8/zwslH2uabTGNFc6gc
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP384R1_RFC5903:SECP384R1_RFC5903-PUBLIC
+
+
+PrivateKey=SECP384R1_RFC5903-Peer
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBBywd5tL24XUeEZyX7
+7DyUMPq0bMjcUGCFXMm9oKopQuAwgxKRa47Slg5L1Vp0SPyhZANiAATlWNvvU+7N
+49P8z8GuoIqJqYdHXRL9lQ2Dz6QXMrxQnQ0axDoDNt75b9pB0HdKNXHc++x6rPMZ
+ZHIWnoOEMDZ/Zu6+PG5wxBbdXwxodZ3R//g/pAFCIJ3/XqrZbbnmOGw=
+-----END PRIVATE KEY-----
+
+PublicKey=SECP384R1_RFC5903-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE5Vjb71PuzePT/M/BrqCKiamHR10S/ZUN
+g8+kFzK8UJ0NGsQ6Azbe+W/aQdB3SjVx3PvseqzzGWRyFp6DhDA2f2buvjxucMQW
+3V8MaHWd0f/4P6QBQiCd/16q2W255jhs
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP384R1_RFC5903-Peer:SECP384R1_RFC5903-Peer-PUBLIC
+
+Derive=SECP384R1_RFC5903
+PeerKey=SECP384R1_RFC5903-Peer-PUBLIC
+SharedSecret=11187331C279962D93D604243FD592CB9D0A926F422E47187521287E7156C5C4D603135569B9E9D09CF5D4A270F59746
+
+
+Derive=SECP384R1_RFC5903-Peer
+PeerKey=SECP384R1_RFC5903-PUBLIC
+SharedSecret=11187331C279962D93D604243FD592CB9D0A926F422E47187521287E7156C5C4D603135569B9E9D09CF5D4A270F59746
+
+PrivateKey=SECP521R1_RFC5903
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAN63pMZqJ9Nq9s+9B
+GqzMpRI8YayrV7U5Pc5HYIFyoJWqhaMP4cKVLGdx2Te6l3f1lXsmObqwckYvaMJ6
+VzgtSlKhgYkDgYYABAAVQX6E2/KMCtPCeHEzSdx98VPIl6GJG9mLq0NXyey+4eO/
+QuALjjgK6uV8LRB1ZJQYhZQq9af0YBcjxBldF2ztPgF8riC2ZB0u62lXhtjJRhRi
+OdCZ4Y4dWlFMc518tKEK2KeIAVrEBdd5ncdee31bbPImGmp/FQdDi/Ab62yjkm+V
+gg==
+-----END PRIVATE KEY-----
+
+PublicKey=SECP521R1_RFC5903-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAFUF+hNvyjArTwnhxM0ncffFTyJeh
+iRvZi6tDV8nsvuHjv0LgC444CurlfC0QdWSUGIWUKvWn9GAXI8QZXRds7T4BfK4g
+tmQdLutpV4bYyUYUYjnQmeGOHVpRTHOdfLShCtiniAFaxAXXeZ3HXnt9W2zyJhpq
+fxUHQ4vwG+tso5JvlYI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP521R1_RFC5903:SECP521R1_RFC5903-PUBLIC
+
+
+PrivateKey=SECP521R1_RFC5903-Peer
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBRbqZqEevQ3k/3Q6H
+LnzfoWvjD9x4D5e8zD8Hg4AgHpxnfWALNDdXo72/KjFj5ML4acynRYqkpO/8MR9c
+sVFoXrmhgYkDgYYABADQs5daxLeZ9b6hbV4T6a+XHV6bmEyfOXKLXlc5c1ohm5fD
+VkNq3G6VuwNS9r5kpsKRLU7y0EM87SthcWQAEtlGDwFcaCJjg5VuO9Bm55e2I8J8
+4OrC9VGhDCxyTZhSB3uHIgtlNsXECKHSrruOhtZ4rknLVwkfRzIpZXmrRPzRfw/F
+ag==
+-----END PRIVATE KEY-----
+
+PublicKey=SECP521R1_RFC5903-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA0LOXWsS3mfW+oW1eE+mvlx1em5hM
+nzlyi15XOXNaIZuXw1ZDatxulbsDUva+ZKbCkS1O8tBDPO0rYXFkABLZRg8BXGgi
+Y4OVbjvQZueXtiPCfODqwvVRoQwsck2YUgd7hyILZTbFxAih0q67jobWeK5Jy1cJ
+H0cyKWV5q0T80X8PxWo=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = SECP521R1_RFC5903-Peer:SECP521R1_RFC5903-Peer-PUBLIC
+
+
+Derive=SECP521R1_RFC5903
+PeerKey=SECP521R1_RFC5903-Peer-PUBLIC
+SharedSecret=01144C7D79AE6956BC8EDB8E7C787C4521CB086FA64407F97894E5E6B2D79B04D1427E73CA4BAA240A34786859810C06B3C715A3A8CC3151F2BEE417996D19F3DDEA
+
+Derive=SECP521R1_RFC5903-Peer
+PeerKey=SECP521R1_RFC5903-PUBLIC
+SharedSecret=01144C7D79AE6956BC8EDB8E7C787C4521CB086FA64407F97894E5E6B2D79B04D1427E73CA4BAA240A34786859810C06B3C715A3A8CC3151F2BEE417996D19F3DDEA
+
+Title = ECDH negative tests (with random keys)
+
+# ECDH Alice with BOB peer - mismatching curves.
+Availablein = default
+Derive=ALICE_secp112r1
+PeerKeyValidate=BOB_secp128r1_PUB
+Result = DERIVE_SET_PEER_ERROR
diff --git a/test/recipes/30-test_evp_data/evppkey_ecdsa.txt b/test/recipes/30-test_evp_data/evppkey_ecdsa.txt
new file mode 100644
index 000000000000..ec3c032aba8d
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_ecdsa.txt
@@ -0,0 +1,230 @@
+#
+# Copyright 2001-2022 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 are ignored.
+# The keyword Availablein must appear before the test name if needed.
+
+# Public key algorithm tests
+
+# Private keys used for PKEY operations.
+
+# EC P-256 key
+
+PrivateKey=P-256
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgiocvtiiTxNH/xbnw
++RdYBp+DUuCPoFpJ+NuSbLVyhyWhRANCAAQsFQ9CnOcPIWwlLPXgYs4fY5zV0WXH
++JQkBywnGX14szuSDpXNtmTpkNzwz+oNlOKo5q+dDlgFbmUxBJJbn+bJ
+-----END PRIVATE KEY-----
+
+# EC public key for above
+
+PublicKey=P-256-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELBUPQpznDyFsJSz14GLOH2Oc1dFl
+x/iUJAcsJxl9eLM7kg6VzbZk6ZDc8M/qDZTiqOavnQ5YBW5lMQSSW5/myQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = P-256:P-256-PUBLIC
+
+Title = ECDSA tests
+
+Verify = P-256
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8
+
+# Digest too long
+Verify = P-256
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF12345"
+Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8
+Result = VERIFY_ERROR
+
+# Digest too short
+Verify = P-256
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF123"
+Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8
+Result = VERIFY_ERROR
+
+# Digest invalid
+Verify = P-256
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1235"
+Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8
+Result = VERIFY_ERROR
+
+# Invalid signature
+Verify = P-256
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec7
+Result = VERIFY_ERROR
+
+# Garbage after signature
+Availablein = default
+Verify = P-256
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec800
+Result = VERIFY_ERROR
+
+# BER signature
+Verify = P-256
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 3080022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec80000
+Result = VERIFY_ERROR
+
+Verify = P-256-PUBLIC
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8
+
+Title = DigestSign and DigestVerify
+
+DigestVerify = SHA256
+Key = P-256-PUBLIC
+Input = "Hello World"
+Output = 3046022100e7515177ec3817b77a4a94066ab3070817b7aa9d44a8a09f040da250116e8972022100ba59b0f631258e59a9026be5d84f60685f4cf22b9165a0c2736d5c21c8ec1862
+
+PublicKey=P-384-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAES/TlL5WEJ+u1kV+4yVlVUbTTo/2rZ7rd
+nWwwk/QlukNjDfcfQvDrfOqpTZ9kSKhd0wMxWIJJ/S/cCzCex+2EgbwW8ngAwT19
+twD8guGxyFRaoMDTtW47/nifwYqRaIfC
+-----END PUBLIC KEY-----
+
+DigestVerify = SHA384
+Key = P-384-PUBLIC
+Input = "123400"
+Output = 304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970
+
+# Oneshot tests
+OneShotDigestVerify = SHA256
+Key = P-256-PUBLIC
+Input = "Hello World"
+Output = 3046022100e7515177ec3817b77a4a94066ab3070817b7aa9d44a8a09f040da250116e8972022100ba59b0f631258e59a9026be5d84f60685f4cf22b9165a0c2736d5c21c8ec1862
+
+# Test that mdsize != tbssize fails
+Sign = P-256
+Ctrl = digest:SHA256
+Input = "0123456789ABCDEF1234"
+Result = KEYOP_ERROR
+
+PrivateKey = P-256_NAMED_CURVE_EXPLICIT
+-----BEGIN PRIVATE KEY-----
+MIIBeQIBADCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAAB
+AAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA
+///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMV
+AMSdNgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg
+9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8A
+AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBBG0wawIBAQQgiUTxtr5vLVjj
+0BOXUa/4r82DJ30QoupYS/wlilW4gWehRANCAATM0n3q2UaDyaQ7OxzJM3B6prhW
+3ev1gTwRBduzqqlwd54AUSgI+pjttW8zrWNitO8H1sf59MPWOESKxNtZ1+Nl
+-----END PRIVATE KEY-----
+
+PrivateKey = EC_EXPLICIT
+-----BEGIN PRIVATE KEY-----
+MIIBeQIBADCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAAB
+AAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA
+///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMV
+AMSdNgiG5wSTamZ44ROdJreBn36QBEEE5JcIvn36opqjEm/k59Al40rBAxWM2TPG
+l0L13Je51zHpfXQ9Z2o7IQicMXP4wSfJ0qCgg2bgydqoxlYrlLGuVQIhAP////8A
+AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBBG0wawIBAQQgec92jwduadCk
+OjoNRI+YT5Be5TkzZXzYCyTLkMOikDmhRANCAATtECEhQbLEaiUj/Wu0qjcr81lL
+46dx5zYgArz/iaSNJ3W80oO+F7v04jlQ7wxQzg96R0bwKiMeq5CcW9ZFt6xg
+-----END PRIVATE KEY-----
+
+PrivateKey = B-163
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUDnQW0mLiHVha/jqFznX/K
+DnVlDgChLgMsAAQB1qZ00fPIct+QN8skv1XIHtBNp3EGLytJV0tsAUTYtGhtrzRj
+e3GzYyg=
+-----END PRIVATE KEY-----
+
+PrivateKey = secp256k1
+-----BEGIN PRIVATE KEY-----
+MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgsLpFV9joHc0bisyV53XL
+mrG6/Gu6ZaHoXtKP/VFX44ehRANCAARLYWGgp5nP4N8guypLSbYGCVN6ZPCnWW4x
+srYkcpdbxr4neRT3zC62keCKgPbJf5SIHkJ2Tcaw6hVSrBOUFtix
+-----END PRIVATE KEY-----
+
+Title = FIPS tests
+
+# Test that a nist curve with < 112 bits is allowed in fips mode for verifying
+DigestVerify = SHA256
+Key = B-163
+Input = "Hello World"
+Output = 302e0215027bb891747468b4b59ca2a2bf8f42d29d08866cf5021502cc311b25e9a2168e42240b07a6071070f687eb3b
+
+# Test that a nist curve with SHA3 is allowed in fips mode
+# The sign will get a mismatch error since the output signature changes on each run
+DigestSign = SHA3-512
+Key = P-256
+Input = "Hello World"
+Result = SIGNATURE_MISMATCH
+
+# Test that a explicit curve that is a named curve is allowed in fips mode
+DigestVerify = SHA256
+Key = P-256_NAMED_CURVE_EXPLICIT
+Input = "Hello World"
+Output = 30450220796fcf472882ed5779226dcd0217b9d2b9acfe4fa2fb0109c8ee63c63adc1033022100e306c69f7e31b9a5d54eb12ba813cddf4de4af933e4f6cea38a0817d9d831d91
+
+Title = FIPS Negative tests (using different curves and digests)
+
+# Test that a explicit curve is not allowed in fips mode
+Availablein = fips
+DigestVerify = SHA256
+Securitycheck = 1
+Key = EC_EXPLICIT
+Input = "Hello World"
+Result = DIGESTVERIFYINIT_ERROR
+
+# Test that a curve with < 112 bits is not allowed in fips mode for signing
+Availablein = fips
+DigestSign = SHA3-512
+Securitycheck = 1
+Key = B-163
+Input = "Hello World"
+Result = DIGESTSIGNINIT_ERROR
+
+# Test that a non nist curve is not allowed in fips mode
+Availablein = fips
+DigestSign = SHA3-512
+Securitycheck = 1
+Key = secp256k1
+Input = "Hello World"
+Result = DIGESTSIGNINIT_ERROR
+
+# Test that SHA1 is not allowed in fips mode for signing
+Availablein = fips
+DigestSign = SHA1
+Securitycheck = 1
+Key = B-163
+Input = "Hello World"
+Result = DIGESTSIGNINIT_ERROR
+
+# Test that SHA1 is not allowed in fips mode for signing
+Availablein = fips
+Sign = P-256
+Securitycheck = 1
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Result = PKEY_CTRL_ERROR
+
+# Invalid non-approved digest
+Availablein = fips
+DigestVerify = MD5
+Securitycheck = 1
+Key = P-256-PUBLIC
+Result = DIGESTVERIFYINIT_ERROR
diff --git a/test/recipes/30-test_evp_data/evppkey_ecx.txt b/test/recipes/30-test_evp_data/evppkey_ecx.txt
new file mode 100644
index 000000000000..e7f6c1a16f11
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_ecx.txt
@@ -0,0 +1,582 @@
+#
+# Copyright 2001-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 are ignored.
+
+
+# Public key algorithm tests
+
+# Private keys used for PKEY operations.
+
+Title = X25519 test vectors (from RFC7748 6.1)
+
+PrivateKey=Alice-25519
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VuBCIEIHcHbQpzGKV9PBbBclGyZkXfTC+H68CZKrF3+6UduSwq
+-----END PRIVATE KEY-----
+
+PublicKey=Alice-25519-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VuAyEAhSDwCYkwp1R0i33ctD73Wg2/Og0mOBr066SpjqqbTmo=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = Alice-25519:Alice-25519-PUBLIC
+
+PrivateKey=Bob-25519
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VuBCIEIF2rCH5iSopLeeF/i4OADuZvO7EpJhi2/Rwviyf/iODr
+-----END PRIVATE KEY-----
+
+PublicKey=Bob-25519-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VuAyEA3p7bfXt9wbTTW2HC7OQ1Nz+DQ8hbeGdNrfx+FG+IK08=
+-----END PUBLIC KEY-----
+
+#Raw versions of the same keys as above
+
+PrivateKeyRaw=Alice-25519-Raw:X25519:77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a
+
+PublicKeyRaw=Alice-25519-PUBLIC-Raw:X25519:8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a
+
+PrivPubKeyPair = Alice-25519-Raw:Alice-25519-PUBLIC-Raw
+
+PrivateKeyRaw=Bob-25519-Raw:X25519:5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb
+
+PublicKeyRaw=Bob-25519-PUBLIC-Raw:X25519:de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f
+
+PrivPubKeyPair = Bob-25519:Bob-25519-PUBLIC
+
+PrivPubKeyPair = Bob-25519-Raw:Bob-25519-PUBLIC-Raw
+
+Derive=Alice-25519
+PeerKey=Bob-25519-PUBLIC
+SharedSecret=4A5D9D5BA4CE2DE1728E3BF480350F25E07E21C947D19E3376F09B3C1E161742
+
+Derive=Bob-25519
+PeerKey=Alice-25519-PUBLIC
+SharedSecret=4A5D9D5BA4CE2DE1728E3BF480350F25E07E21C947D19E3376F09B3C1E161742
+
+Derive=Alice-25519-Raw
+PeerKey=Bob-25519-PUBLIC-Raw
+SharedSecret=4A5D9D5BA4CE2DE1728E3BF480350F25E07E21C947D19E3376F09B3C1E161742
+
+Derive=Bob-25519-Raw
+PeerKey=Alice-25519-PUBLIC-Raw
+SharedSecret=4A5D9D5BA4CE2DE1728E3BF480350F25E07E21C947D19E3376F09B3C1E161742
+
+# Illegal sign/verify operations with X25519 key
+
+Sign=Alice-25519
+Result = KEYOP_INIT_ERROR
+Reason = operation not supported for this keytype
+
+Verify=Alice-25519
+Result = KEYOP_INIT_ERROR
+Reason = operation not supported for this keytype
+
+Title = X448 test vectors (from RFC7748 6.2)
+
+PrivateKey=Alice-448
+-----BEGIN PRIVATE KEY-----
+MEYCAQAwBQYDK2VvBDoEOJqPSSXRUZ9Xdc9GsEtYANTunui66LxVZdSYwo3Zybr1
+dKlBl0SJc5EAY4Km8SerHZrC2MClmHJr
+-----END PRIVATE KEY-----
+
+PublicKey=Alice-448-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEIwBQYDK2VvAzkAmwj3zDG34+Z9ItWuoSEHSic70rg94Jxj+qc9LCLF2bvINmRy
+QdlT1AxbEtqIEg1TF3+A5TLEH6A=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = Alice-448:Alice-448-PUBLIC
+
+PrivateKey=Bob-448
+-----BEGIN PRIVATE KEY-----
+MEYCAQAwBQYDK2VvBDoEOBwwanrCoOLgmQspRHDLoznmRTdysHWBHY+tDR1pJ8Eg
+u17olysNPiE3TJySGwnRsDZvELZRc5kt
+-----END PRIVATE KEY-----
+
+PublicKey=Bob-448-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEIwBQYDK2VvAzkAPreoKbDNIPW8/AtZm2/sz22kYnEHvbDU80W0MCfYuXL8PjT7
+QjKhPKcG3LV67D2uB73BxnvzNgk=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = Bob-448:Bob-448-PUBLIC
+
+#Raw versions of the same keys as above
+
+PrivateKeyRaw=Alice-448-Raw:X448:9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726b
+
+PublicKeyRaw=Alice-448-PUBLIC-Raw:X448:9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0
+
+PrivPubKeyPair = Alice-448-Raw:Alice-448-PUBLIC-Raw
+
+PrivateKeyRaw=Bob-448-Raw:X448:1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992d
+
+PublicKeyRaw=Bob-448-PUBLIC-Raw:X448:3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609
+
+PrivPubKeyPair = Bob-448-Raw:Bob-448-PUBLIC-Raw
+
+PublicKeyRaw=Bob-448-PUBLIC-Raw-NonCanonical:X448:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+Derive=Alice-448
+PeerKey=Bob-448-PUBLIC
+SharedSecret=07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d
+
+Derive=Bob-448
+PeerKey=Alice-448-PUBLIC
+SharedSecret=07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d
+
+Derive=Alice-448-Raw
+PeerKey=Bob-448-PUBLIC-Raw
+SharedSecret=07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d
+
+Derive=Bob-448-Raw
+PeerKey=Alice-448-PUBLIC-Raw
+SharedSecret=07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d
+
+# Self-generated non-canonical
+Derive=Alice-448-Raw
+PeerKey=Bob-448-PUBLIC-Raw-NonCanonical
+SharedSecret=66e2e682b1f8e68c809f1bb3e406bd826921d9c1a5bfbfcbab7ae72feecee63660eabd54934f3382061d17607f581a90bdac917a064959fb
+
+# Illegal sign/verify operations with X448 key
+
+Sign=Alice-448
+Result = KEYOP_INIT_ERROR
+Reason = operation not supported for this keytype
+
+Verify=Alice-448
+Result = KEYOP_INIT_ERROR
+Reason = operation not supported for this keytype
+
+Title = ED25519 tests from RFC8032
+
+PrivateKey=ED25519-1
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEIJ1hsZ3v/VpguoRK9JLsLMREScVpezJpGXA7rAMcrn9g
+-----END PRIVATE KEY-----
+
+PrivateKey=ED25519-2
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEIEzNCJso/5banbbDRuwRTg9bijGfNaumJNqM9u1PuKb7
+-----END PRIVATE KEY-----
+
+PrivateKey=ED25519-3
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEIMWqjfQ/n4N77bdELzHct7Fm04U1B28JS4XOOi4LRFj3
+-----END PRIVATE KEY-----
+
+PrivateKey=ED25519-4
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEIPXldnzxUzGVF2MPImh2uGyBYMxYO8ATdExr8lX1zA7l
+-----END PRIVATE KEY-----
+
+PrivateKey=ED25519-5
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEIIM/5iQJI3udYux3WHUgkR6adZzsHRl1W32pAbltyj1C
+-----END PRIVATE KEY-----
+
+PublicKey=ED25519-1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEA11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo=
+-----END PUBLIC KEY-----
+
+PublicKey=ED25519-2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEAPUAXw+hDiVqStwqnTRt+vJyYLM8uxJaMwM1V8Sr0Zgw=
+-----END PUBLIC KEY-----
+
+PublicKey=ED25519-3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEA/FHNjmIYoaONpH7QAjDwWAgW7RO6MwOsXeuRFUiQgCU=
+-----END PUBLIC KEY-----
+
+PublicKey=ED25519-4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEAJ4EX/BRMcjQPZ9DyMW6Dhs7/vyskKMnFH+98WX8dQm4=
+-----END PUBLIC KEY-----
+
+PublicKey=ED25519-5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEA7Bcrk61eVjv0kyxw4SRQNMNUZ+8u/U1k6/gZaDRn4r8=
+-----END PUBLIC KEY-----
+
+#Raw versions of the ED25519-1 keys
+PrivateKeyRaw=ED25519-1-Raw:ED25519:9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60
+
+PublicKeyRaw=ED25519-1-PUBLIC-Raw:ED25519:d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a
+
+PrivPubKeyPair = ED25519-1:ED25519-1-PUBLIC
+
+PrivPubKeyPair = ED25519-1-Raw:ED25519-1-PUBLIC-Raw
+
+OneShotDigestSign = NULL
+Key = ED25519-1
+Input = ""
+Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b
+
+PrivPubKeyPair = ED25519-2:ED25519-2-PUBLIC
+
+OneShotDigestSign = NULL
+Key = ED25519-2
+Input = 72
+Output = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00
+
+PrivPubKeyPair = ED25519-3:ED25519-3-PUBLIC
+
+OneShotDigestSign = NULL
+Key = ED25519-3
+Input = af82
+Output = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a
+
+PrivPubKeyPair = ED25519-4:ED25519-4-PUBLIC
+
+OneShotDigestSign = NULL
+Key = ED25519-4
+Input = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0
+Output = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03
+
+PrivPubKeyPair = ED25519-5:ED25519-5-PUBLIC
+
+OneShotDigestSign = NULL
+Key = ED25519-5
+Input = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
+Output = dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704
+
+# Verify test
+OneShotDigestVerify = NULL
+Key = ED25519-1-PUBLIC
+Input = ""
+Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b
+
+# Corrupted input
+OneShotDigestVerify = NULL
+Key = ED25519-1-PUBLIC
+Input = "bad"
+Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b
+Result = VERIFY_ERROR
+
+# Corrupted signature
+OneShotDigestVerify = NULL
+Key = ED25519-1-PUBLIC
+Input = ""
+Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100c
+Result = VERIFY_ERROR
+
+PrivPubKeyPair = ED25519-1:ED25519-2-PUBLIC
+Result = KEYPAIR_MISMATCH
+
+# Make sure update calls return an error
+DigestSign = NULL
+Key = ED25519-1
+Input = "Test"
+Result = DIGESTUPDATE_ERROR
+
+DigestVerify = NULL
+Key = ED25519-1-PUBLIC
+Input = "Test"
+Result = DIGESTUPDATE_ERROR
+
+# Attempt to set invalid digest
+DigestSign = SHA256
+Key = ED25519-1
+Result = DIGESTSIGNINIT_ERROR
+
+# Raw tests
+
+OneShotDigestSign = NULL
+Key = ED25519-1-Raw
+Input = ""
+Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b
+
+OneShotDigestVerify = NULL
+Key = ED25519-1-PUBLIC-Raw
+Input = ""
+Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b
+
+#Signature maleability test.
+#Same as the verify operation above but with the order added to s
+OneShotDigestVerify = NULL
+Key = ED25519-1-PUBLIC-Raw
+Input = ""
+Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901554c8c7872aa064e049dbb3013fbf29380d25bf5f0595bbe24655141438e7a101b
+Result = VERIFY_ERROR
+
+Title = ED448 tests from RFC8032
+
+PrivateKey=ED448-1
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOWyCpWLLgI0Q1jK+ichRPr9skp803fqMn2PJlg7240ij
+UoyKP8wvBE45o/xblEkvjwMudUmiAJj5Ww==
+-----END PRIVATE KEY-----
+
+PrivateKey=ED448-2
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOcTqsF01cAfGMvPbtISJkk1VKwj+DDU6DUofAKzaLEY6
+++pnxejSh3xeO8OXplmUnvgCHpVOChInTg==
+-----END PRIVATE KEY-----
+
+PrivateKey=ED448-3
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOc0j0k9xQnTnRDQyN7kykPUR9kJfmOZEWf8gPomFCD/9
+9gUAVTq8DgXNAhhL24nEzNZ+GHlRJn6zKA==
+-----END PRIVATE KEY-----
+
+PrivateKey=ED448-4
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOSWM3UraMu2cn/VOY3Vq5YL7j6sqxyHyyOZ2pydoUT2T
+n2Pd21VgkTPymt+G7Jkp3MtSwcX9L/fiGw==
+-----END PRIVATE KEY-----
+
+PrivateKey=ED448-5
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOX706EVEI2dS+7VrjzGiOhDkKBT19VygN83MEcZMmjsp
+ScG7YHADFGEXMqbC/qmO68AmahGpOXAQDg==
+-----END PRIVATE KEY-----
+
+PrivateKey=ED448-6
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOdZd80GtE+AIVnaIuu3ajp3NwX3AJJdOpbQie2Uw4zm/
+8h+Z5oymlo88ym3+D7n0+rT6E11VQuo/AQ==
+-----END PRIVATE KEY-----
+
+PrivateKey=ED448-7
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOS7F/jwXBFq9sTal5qkT4yq3WuaLU9L8FJt35QQTLTdW
+m352a6dKGb1hYjQ6IchZCqnOvKkBTGNt9Q==
+-----END PRIVATE KEY-----
+
+PrivateKey=ED448-8
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOYctCTeA9dNzDffCEmZLN7ig8k9WgQ2qg4LNT6P3djTs
+RNxU8cLtm+qG+vt2Mti+GZ6hZfWtVd2c6A==
+-----END PRIVATE KEY-----
+
+PublicKey=ED448-1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoAX9dEm1m0Yf0s54fsYWrUah2hNCSFpw4fig6nXYDpZ3jt8SR2
+m0bHBhvWeD3x5Q9s0foavq/oJWGA
+-----END PUBLIC KEY-----
+
+PublicKey=ED448-2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoAQ7oo9DDN/0Vq5TFUX37NCsg0pV2TWMA3K/oMbGeYwIZq6gHr
+AHQoArhDjqTLghacI1FgYntMOpSA
+-----END PUBLIC KEY-----
+
+PublicKey=ED448-3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoA3OqeePNaG/NJmoMbELhskKrAHNhLZ6AQm1WjbpMoseNl/OFh
+1xznExpUPqTLX36fHYsAaWRHABQA
+-----END PUBLIC KEY-----
+
+PublicKey=ED448-4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoAO6FtoMbyzB8wGHdAdW9eeY1rxfwBXXxjzJUQ7j/UStwk2Olo
+tuRub5TRm5RTYXJr114UnvCYF/WA
+-----END PUBLIC KEY-----
+
+PublicKey=ED448-5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoAs9oHmwqkk6V3ICnwRnuuvuWoES2dOiJTI2HaKU97s4FcXcWe
+F2tNnzgcoJOOE8bAexdL5l36V46A
+-----END PUBLIC KEY-----
+
+PublicKey=ED448-6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoA35cF9Y7bq4Asf4Njz+VWCrHGEywgqfHdFjSDom+KxTo51oCL
+9KHfvSYbCZuwOz+1CQbLKL2KCB8A
+-----END PUBLIC KEY-----
+
+PublicKey=ED448-7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoAeXVvAU3P4gefXdnnGL5BceLvJIagjyUYb2v/Q6mTa5v+EkAr
+CK5leYo9geIunsgOdpCGLvPU7ToA
+-----END PUBLIC KEY-----
+
+PublicKey=ED448-8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoAqBsuinClrJT/28ybrfw/6wgB8lhXi7EUrUTs4ewOeZ2gjv+4
+HF1oXAxW9k7srvjN8RzDhzeDjPQA
+-----END PUBLIC KEY-----
+
+#Raw versions of the ED448-1 keys
+PrivateKeyRaw=ED448-1-Raw:ED448:6c82a562cb808d10d632be89c8513ebf6c929f34ddfa8c9f63c9960ef6e348a3528c8a3fcc2f044e39a3fc5b94492f8f032e7549a20098f95b
+
+PublicKeyRaw=ED448-1-PUBLIC-Raw:ED448:5fd7449b59b461fd2ce787ec616ad46a1da1342485a70e1f8a0ea75d80e96778edf124769b46c7061bd6783df1e50f6cd1fa1abeafe8256180
+
+PrivPubKeyPair = ED448-1:ED448-1-PUBLIC
+
+PrivPubKeyPair = ED448-2:ED448-2-PUBLIC
+
+PrivPubKeyPair = ED448-3:ED448-3-PUBLIC
+
+PrivPubKeyPair = ED448-4:ED448-4-PUBLIC
+
+PrivPubKeyPair = ED448-5:ED448-5-PUBLIC
+
+PrivPubKeyPair = ED448-6:ED448-6-PUBLIC
+
+PrivPubKeyPair = ED448-7:ED448-7-PUBLIC
+
+PrivPubKeyPair = ED448-8:ED448-8-PUBLIC
+
+PrivPubKeyPair = ED448-1-Raw:ED448-1-PUBLIC-Raw
+
+OneShotDigestSign = NULL
+Key = ED448-1
+Input = ""
+Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600
+
+OneShotDigestSign = NULL
+Key = ED448-2
+Input = 03
+Output = 26b8f91727bd62897af15e41eb43c377efb9c610d48f2335cb0bd0087810f4352541b143c4b981b7e18f62de8ccdf633fc1bf037ab7cd779805e0dbcc0aae1cbcee1afb2e027df36bc04dcecbf154336c19f0af7e0a6472905e799f1953d2a0ff3348ab21aa4adafd1d234441cf807c03a00
+
+OneShotDigestSign = NULL
+Key = ED448-3
+Input = 0c3e544074ec63b0265e0c
+Output = 1f0a8888ce25e8d458a21130879b840a9089d999aaba039eaf3e3afa090a09d389dba82c4ff2ae8ac5cdfb7c55e94d5d961a29fe0109941e00b8dbdeea6d3b051068df7254c0cdc129cbe62db2dc957dbb47b51fd3f213fb8698f064774250a5028961c9bf8ffd973fe5d5c206492b140e00
+
+OneShotDigestSign = NULL
+Key = ED448-4
+Input = 64a65f3cdedcdd66811e2915
+Output = 7eeeab7c4e50fb799b418ee5e3197ff6bf15d43a14c34389b59dd1a7b1b85b4ae90438aca634bea45e3a2695f1270f07fdcdf7c62b8efeaf00b45c2c96ba457eb1a8bf075a3db28e5c24f6b923ed4ad747c3c9e03c7079efb87cb110d3a99861e72003cbae6d6b8b827e4e6c143064ff3c00
+
+OneShotDigestSign = NULL
+Key = ED448-5
+Input = 64a65f3cdedcdd66811e2915e7
+Output = 6a12066f55331b6c22acd5d5bfc5d71228fbda80ae8dec26bdd306743c5027cb4890810c162c027468675ecf645a83176c0d7323a2ccde2d80efe5a1268e8aca1d6fbc194d3f77c44986eb4ab4177919ad8bec33eb47bbb5fc6e28196fd1caf56b4e7e0ba5519234d047155ac727a1053100
+
+OneShotDigestSign = NULL
+Key = ED448-6
+Input = bd0f6a3747cd561bdddf4640a332461a4a30a12a434cd0bf40d766d9c6d458e5512204a30c17d1f50b5079631f64eb3112182da3005835461113718d1a5ef944
+Output = 554bc2480860b49eab8532d2a533b7d578ef473eeb58c98bb2d0e1ce488a98b18dfde9b9b90775e67f47d4a1c3482058efc9f40d2ca033a0801b63d45b3b722ef552bad3b4ccb667da350192b61c508cf7b6b5adadc2c8d9a446ef003fb05cba5f30e88e36ec2703b349ca229c2670833900
+
+OneShotDigestSign = NULL
+Key = ED448-7
+Input = 15777532b0bdd0d1389f636c5f6b9ba734c90af572877e2d272dd078aa1e567cfa80e12928bb542330e8409f3174504107ecd5efac61ae7504dabe2a602ede89e5cca6257a7c77e27a702b3ae39fc769fc54f2395ae6a1178cab4738e543072fc1c177fe71e92e25bf03e4ecb72f47b64d0465aaea4c7fad372536c8ba516a6039c3c2a39f0e4d832be432dfa9a706a6e5c7e19f397964ca4258002f7c0541b590316dbc5622b6b2a6fe7a4abffd96105eca76ea7b98816af0748c10df048ce012d901015a51f189f3888145c03650aa23ce894c3bd889e030d565071c59f409a9981b51878fd6fc110624dcbcde0bf7a69ccce38fabdf86f3bef6044819de11
+Output = c650ddbb0601c19ca11439e1640dd931f43c518ea5bea70d3dcde5f4191fe53f00cf966546b72bcc7d58be2b9badef28743954e3a44a23f880e8d4f1cfce2d7a61452d26da05896f0a50da66a239a8a188b6d825b3305ad77b73fbac0836ecc60987fd08527c1a8e80d5823e65cafe2a3d00
+
+OneShotDigestSign = NULL
+Key = ED448-8
+Input = 6ddf802e1aae4986935f7f981ba3f0351d6273c0a0c22c9c0e8339168e675412a3debfaf435ed651558007db4384b650fcc07e3b586a27a4f7a00ac8a6fec2cd86ae4bf1570c41e6a40c931db27b2faa15a8cedd52cff7362c4e6e23daec0fbc3a79b6806e316efcc7b68119bf46bc76a26067a53f296dafdbdc11c77f7777e972660cf4b6a9b369a6665f02e0cc9b6edfad136b4fabe723d2813db3136cfde9b6d044322fee2947952e031b73ab5c603349b307bdc27bc6cb8b8bbd7bd323219b8033a581b59eadebb09b3c4f3d2277d4f0343624acc817804728b25ab797172b4c5c21a22f9c7839d64300232eb66e53f31c723fa37fe387c7d3e50bdf9813a30e5bb12cf4cd930c40cfb4e1fc622592a49588794494d56d24ea4b40c89fc0596cc9ebb961c8cb10adde976a5d602b1c3f85b9b9a001ed3c6a4d3b1437f52096cd1956d042a597d561a596ecd3d1735a8d570ea0ec27225a2c4aaff26306d1526c1af3ca6d9cf5a2c98f47e1c46db9a33234cfd4d81f2c98538a09ebe76998d0d8fd25997c7d255c6d66ece6fa56f11144950f027795e653008f4bd7ca2dee85d8e90f3dc315130ce2a00375a318c7c3d97be2c8ce5b6db41a6254ff264fa6155baee3b0773c0f497c573f19bb4f4240281f0b1f4f7be857a4e59d416c06b4c50fa09e1810ddc6b1467baeac5a3668d11b6ecaa901440016f389f80acc4db977025e7f5924388c7e340a732e554440e76570f8dd71b7d640b3450d1fd5f0410a18f9a3494f707c717b79b4bf75c98400b096b21653b5d217cf3565c9597456f70703497a078763829bc01bb1cbc8fa04eadc9a6e3f6699587a9e75c94e5bab0036e0b2e711392cff0047d0d6b05bd2a588bc109718954259f1d86678a579a3120f19cfb2963f177aeb70f2d4844826262e51b80271272068ef5b3856fa8535aa2a88b2d41f2a0e2fda7624c2850272ac4a2f561f8f2f7a318bfd5caf9696149e4ac824ad3460538fdc25421beec2cc6818162d06bbed0c40a387192349db67a118bada6cd5ab0140ee273204f628aad1c135f770279a651e24d8c14d75a6059d76b96a6fd857def5e0b354b27ab937a5815d16b5fae407ff18222c6d1ed263be68c95f32d908bd895cd76207ae726487567f9a67dad79abec316f683b17f2d02bf07e0ac8b5bc6162cf94697b3c27cd1fea49b27f23ba2901871962506520c392da8b6ad0d99f7013fbc06c2c17a569500c8a7696481c1cd33e9b14e40b82e79a5f5db82571ba97bae3ad3e0479515bb0e2b0f3bfcd1fd33034efc6245eddd7ee2086ddae2600d8ca73e214e8c2b0bdb2b047c6a464a562ed77b73d2d841c4b34973551257713b753632efba348169abc90a68f42611a40126d7cb21b58695568186f7e569d2ff0f9e745d0487dd2eb997cafc5abf9dd102e62ff66cba87
+Output = e301345a41a39a4d72fff8df69c98075a0cc082b802fc9b2b6bc503f926b65bddf7f4c8f1cb49f6396afc8a70abe6d8aef0db478d4c6b2970076c6a0484fe76d76b3a97625d79f1ce240e7c576750d295528286f719b413de9ada3e8eb78ed573603ce30d8bb761785dc30dbc320869e1a00
+
+# Verify test
+OneShotDigestVerify = NULL
+Key = ED448-1-PUBLIC
+Input = ""
+Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600
+
+# Corrupted input
+OneShotDigestVerify = NULL
+Key = ED448-1-PUBLIC
+Input = "bad"
+Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600
+Result = VERIFY_ERROR
+
+# Corrupted signature
+OneShotDigestVerify = NULL
+Key = ED448-1-PUBLIC
+Input = ""
+Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652601
+Result = VERIFY_ERROR
+
+# Make sure update calls return an error
+DigestSign = NULL
+Key = ED448-1
+Input = "Test"
+Result = DIGESTUPDATE_ERROR
+
+DigestVerify = NULL
+Key = ED448-1-PUBLIC
+Input = "Test"
+Result = DIGESTUPDATE_ERROR
+
+# Attempt to set invalid digest
+DigestSign = SHA256
+Key = ED448-1
+Result = DIGESTSIGNINIT_ERROR
+
+# Raw keys
+OneShotDigestSign = NULL
+Key = ED448-1-Raw
+Input = ""
+Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600
+
+OneShotDigestVerify = NULL
+Key = ED448-1-PUBLIC-Raw
+Input = ""
+Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600
+
+#Signature malelability test.
+#Same as the verify operation above but with the order added to s
+OneShotDigestVerify = NULL
+Key = ED448-1-PUBLIC-Raw
+Input = ""
+Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980f25278d3667403c14bcec5f9cfde9955ebc8333c0ae78fc86e518317c5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e656600
+Result = VERIFY_ERROR
+
+
+Title = Chosen Wycheproof vectors
+
+PrivateKeyRaw = WychePRIVATE0:X25519:288796bc5aff4b81a37501757bc0753a3c21964790d38699308debc17a6eaf8d
+
+PublicKeyRaw = WychePUBLIC0:X25519:f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f
+
+Derive=WychePRIVATE0
+PeerKey=WychePUBLIC0
+SharedSecret=b4e0dd76da7b071728b61f856771aa356e57eda78a5b1655cc3820fb5f854c5c
+
+PrivateKeyRaw = WychePRIVATE1:X25519:60887b3dc72443026ebedbbbb70665f42b87add1440e7768fbd7e8e2ce5f639d
+
+PublicKeyRaw = WychePUBLIC1:X25519:f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+Derive=WychePRIVATE1
+PeerKey=WychePUBLIC1
+SharedSecret=38d6304c4a7e6d9f7959334fb5245bd2c754525d4c91db950206926234c1f633
+
+PrivateKeyRaw = WychePRIVATE2:X25519:a0a4f130b98a5be4b1cedb7cb85584a3520e142d474dc9ccb909a073a976bf63
+
+PublicKeyRaw = WychePUBLIC2:X25519:0ab4e76380d84dde4f6833c58f2a9fb8f83bb0169b172be4b6e0592887741a36
+
+Derive=WychePRIVATE2
+PeerKey=WychePUBLIC2
+SharedSecret=0200000000000000000000000000000000000000000000000000000000000000
+
+PublicKeyRaw = WychePUBLIC3:X25519:89e10d5701b4337d2d032181538b1064bd4084401ceca1fd12663a1959388000
+
+Derive=WychePRIVATE2
+PeerKey=WychePUBLIC3
+SharedSecret=0900000000000000000000000000000000000000000000000000000000000000
+
+PublicKeyRaw = WychePUBLIC4:X25519:2b55d3aa4a8f80c8c0b2ae5f933e85af49beac36c2fa7394bab76c8933f8f81d
+
+Derive=WychePRIVATE2
+PeerKey=WychePUBLIC4
+SharedSecret=1000000000000000000000000000000000000000000000000000000000000000
+
+Title = Test keypair mismatches
+
+PrivPubKeyPair = Alice-25519:Bob-25519-PUBLIC
+Result = KEYPAIR_MISMATCH
+
+PrivPubKeyPair = Bob-25519:Alice-25519-PUBLIC
+Result = KEYPAIR_MISMATCH
+
+PrivPubKeyPair = Alice-448:Bob-448-PUBLIC
+Result = KEYPAIR_MISMATCH
+
+PrivPubKeyPair = Bob-448:Alice-448-PUBLIC
+Result = KEYPAIR_MISMATCH
diff --git a/test/recipes/30-test_evp_data/evppkey_ffdhe.txt b/test/recipes/30-test_evp_data/evppkey_ffdhe.txt
new file mode 100644
index 000000000000..b6b1a8e8a090
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_ffdhe.txt
@@ -0,0 +1,593 @@
+#
+# Copyright 2001-2022 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 are ignored.
+
+
+Title = RFC7919 DH tests
+
+# Key generation test
+KeyGen = dhKeyAgreement
+Ctrl = dh_param:ffdhe2048
+KeyName = tmpdh
+
+# ffdhe2048-1 and ffdhe2048-2 were randomly generated and have a shared secret
+# less than 256 bytes in length (to test padding) other keys have no special
+# properties
+PrivateKey=ffdhe2048-1
+-----BEGIN PRIVATE KEY-----
+MIIBQwIBADCCARsGCSqGSIb3DQEDATCCAQwCggEBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhKFyX//////////8C
+AQICAgDhBB8CHQGUa5iGUF9rGvDjv9PDFGIvtS9OIqbbi8rqm4b6
+-----END PRIVATE KEY-----
+
+PrivateKey=ffdhe2048-2
+-----BEGIN PRIVATE KEY-----
+MIIBQwIBADCCARsGCSqGSIb3DQEDATCCAQwCggEBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhKFyX//////////8C
+AQICAgDhBB8CHQEYNZIth+/EaIgKK2gcxFutVjUTWYCaReyTKMvP
+-----END PRIVATE KEY-----
+
+PublicKey=ffdhe2048-1-pub
+-----BEGIN PUBLIC KEY-----
+MIICKTCCARsGCSqGSIb3DQEDATCCAQwCggEBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhKFyX//////////8CAQIC
+AgDhA4IBBgACggEBAOYRygvHGUKaIXLfUatc2YkYcm9Ew65H0hwpiDXG6XHAYAjJ
+bjKNJxdFRjjeCwtJEAGlyUtjSHrka6dHDfzkQfDK6u13Z+3Xmh+nCMZwPOHDNR3I
+Ep5vy3quU7suD3ADDrjwX3sVfsXensgh+JpexbrR+leHATf8aX1g8jQofFdi1Wn7
+CbE6VciU4b32L8HPwO1ePpJGib70Em45VurmUfCwNXgEUnu1N6LYRAjH9vnjB529
+C3BSp58rJnA2aslacC0CFY6YVCQfLTdN7y+F5QlGrdGd6wQmf3FXPLf9iYSiuLrm
+jW/WDFmPnwAn5A7TEgiNeNu8pwsSKPgZqdW+lyw=
+-----END PUBLIC KEY-----
+
+PublicKey=ffdhe2048-2-pub
+-----BEGIN PUBLIC KEY-----
+MIICKTCCARsGCSqGSIb3DQEDATCCAQwCggEBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhKFyX//////////8CAQIC
+AgDhA4IBBgACggEBAN5LAdrzTwa7nT7855NJQLNum5Yr1O8XZupjvwtVIrJgORvh
+L8VMKJoerEwOZ38snTsh9tuKnAWrmdIyFhnOjaHm40GlvInQGff5Lwb1itf7ib3U
+ELPOO29PajwY1RocWKX7Wfdj8n6Kd9gHhdoO5v8MyZMCkUU6Rz6y1VzaVwykdsqA
+kbMdZfK8Dkpd5PBZ8SJpJF02IEzvh5OYfjcbMN2K0lDO5ZvoMYQku7yXr6PfJebC
+CpoVOaoqH19n3g8Xni8IFi7znI83UqxKuYhyYCuMwtE+HS+9WkmkQ1coo512Gw2f
+TcY3pf9gGZ41xLFxCOdrUbR3QlieI+zl+TttLzM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ffdhe2048-1:ffdhe2048-1-pub
+
+PrivPubKeyPair=ffdhe2048-2:ffdhe2048-2-pub
+
+Derive=ffdhe2048-1
+PeerKey=ffdhe2048-2-pub
+SharedSecret=6620DD85B56EE8540C8040CAC46B7385344A164E4DBDF521F7D99F88FA68EDD295A45E36E0BBD5FF5DE84598824E2CA52ED82ACA918CAECC6B22846D0FC6F0203E8B6963964D11E9E704F83AF1D60E9B1931139E9E9967C4665A831A75D99359A8BA80DD5921E74379AF4CA8DB453EDBC5E669AB17A5254CA6C96794CD5196BE90AF37742C8F6812515FFCC45B08F4158EFF9559F1AEF3665B3D91519DCBC6DF22CD6DA521B86613558602E73D2CA4666972F7D2CB6B46299B1DF2DA29A2A2D99D105E10CB553D6738A9B1DB2A0314C3CF30642D5C44695623D8B95C4426BEA830FB51816B4F086945E9B12A445F42DD68610E3F378A6E69A383D13D85BF
+
+Derive=ffdhe2048-2
+PeerKey=ffdhe2048-1-pub
+SharedSecret=6620DD85B56EE8540C8040CAC46B7385344A164E4DBDF521F7D99F88FA68EDD295A45E36E0BBD5FF5DE84598824E2CA52ED82ACA918CAECC6B22846D0FC6F0203E8B6963964D11E9E704F83AF1D60E9B1931139E9E9967C4665A831A75D99359A8BA80DD5921E74379AF4CA8DB453EDBC5E669AB17A5254CA6C96794CD5196BE90AF37742C8F6812515FFCC45B08F4158EFF9559F1AEF3665B3D91519DCBC6DF22CD6DA521B86613558602E73D2CA4666972F7D2CB6B46299B1DF2DA29A2A2D99D105E10CB553D6738A9B1DB2A0314C3CF30642D5C44695623D8B95C4426BEA830FB51816B4F086945E9B12A445F42DD68610E3F378A6E69A383D13D85BF
+
+Derive=ffdhe2048-1
+PeerKey=ffdhe2048-2-pub
+Ctrl = dh_pad:1
+SharedSecret=00006620DD85B56EE8540C8040CAC46B7385344A164E4DBDF521F7D99F88FA68EDD295A45E36E0BBD5FF5DE84598824E2CA52ED82ACA918CAECC6B22846D0FC6F0203E8B6963964D11E9E704F83AF1D60E9B1931139E9E9967C4665A831A75D99359A8BA80DD5921E74379AF4CA8DB453EDBC5E669AB17A5254CA6C96794CD5196BE90AF37742C8F6812515FFCC45B08F4158EFF9559F1AEF3665B3D91519DCBC6DF22CD6DA521B86613558602E73D2CA4666972F7D2CB6B46299B1DF2DA29A2A2D99D105E10CB553D6738A9B1DB2A0314C3CF30642D5C44695623D8B95C4426BEA830FB51816B4F086945E9B12A445F42DD68610E3F378A6E69A383D13D85BF
+
+# The following two testcases check that the padding is implicitly enabled
+# with X942KDF-ASN1 KDF.
+# The plain shared secret for these keys needs padding as seen above.
+Derive=ffdhe2048-1
+PeerKey=ffdhe2048-2-pub
+KDFType=X942KDF-ASN1
+KDFOutlen=32
+KDFDigest=SHA-256
+CEKAlg=id-aes128-wrap
+Ctrl = dh_pad:1
+SharedSecret=89A249DF4EE9033B89C2B4E52072A736D94F51143A1ED5C8F1E91FCBEBE09654
+
+# FIPS(3.0.0): allows the padding to be set, later versions do not #17859
+FIPSversion = >3.0.0
+Derive=ffdhe2048-2
+PeerKey=ffdhe2048-1-pub
+KDFType=X942KDF-ASN1
+KDFOutlen=32
+KDFDigest=SHA-256
+CEKAlg=id-aes128-wrap
+Ctrl = dh_pad:0
+SharedSecret=89A249DF4EE9033B89C2B4E52072A736D94F51143A1ED5C8F1E91FCBEBE09654
+
+PrivateKey=ffdhe3072-1
+-----BEGIN PRIVATE KEY-----
+MIIByQIBADCCAZsGCSqGSIb3DQEDATCCAYwCggGBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8
+NPTe+ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0
+/URS4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4K
+vNBr+lPd7zwbIO4/1Z18JeQdK2bGLjf//////////wIBAgICARMEJQIjB8TRLx6q
+XYQJ0RAM+5ztVLhy9EXNdjY0EYODS7TFi5RZLE4=
+-----END PRIVATE KEY-----
+
+PrivateKey=ffdhe3072-2
+-----BEGIN PRIVATE KEY-----
+MIIByQIBADCCAZsGCSqGSIb3DQEDATCCAYwCggGBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8
+NPTe+ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0
+/URS4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4K
+vNBr+lPd7zwbIO4/1Z18JeQdK2bGLjf//////////wIBAgICARMEJQIjBG9DysbR
+qsyURRygCXP6Z6CsUGaQR9/JD+RxbZ8P13po5PM=
+-----END PRIVATE KEY-----
+
+PublicKey=ffdhe3072-1-pub
+-----BEGIN PUBLIC KEY-----
+MIIDKTCCAZsGCSqGSIb3DQEDATCCAYwCggGBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8NPTe
++ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0/URS
+4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4KvNBr
++lPd7zwbIO4/1Z18JeQdK2bGLjf//////////wIBAgICARMDggGGAAKCAYEAmPK9
+gPzxh69NyUdmvd76E2VjitXRFhA6mZvTD9zh9Isbl66yezKJcYROUv4HK81LNonz
+RaP5je7LXA/Vj4KkQEfjP/W00gZ/uMmi2hSQ0KbBuwRd/ECYwoigs+p9bjN4ZGra
+rYmQLiX2uJz2KSkx3YpM9cMH9Q41qdskGnK0QnMntwTysZ7Sdk7yeNaKUdZ3G4sA
+lUCEUAOr7lD8tV1fPjgMLL4EVsiZEF1v3TY5mY7ydcYPIrvrKXUKqrr7UsAdxt+r
+BATWe3V+JUGpsVjDLYUgaB95PkdSQtdNa094nanx+evI3vYZE9Vm/A/DNBTJuTlV
+rogeIx+Lq3foVUsW6nuJiGKYhbwI5xqFw+WEPMqa5QiIdoUqDExXkCi1mqxyivZ0
+VW5yVac/67e9od3oMlWGU2tXvJwxIzhCBpjK8oBFxd2jFZ0BdTwBlI+Jpx5AW7oE
+la7P7Rxy1rkGTFs8ZSWM2cUdzBxsbwdWrmSZ6JjQstr8ST++TXC5F7ZBKaOu
+-----END PUBLIC KEY-----
+
+PublicKey=ffdhe3072-2-pub
+-----BEGIN PUBLIC KEY-----
+MIIDKDCCAZsGCSqGSIb3DQEDATCCAYwCggGBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8NPTe
++ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0/URS
+4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4KvNBr
++lPd7zwbIO4/1Z18JeQdK2bGLjf//////////wIBAgICARMDggGFAAKCAYAWP0Ft
+61TNzHfeUEGhr1gjw9cs3GfCGvx9Rbhql6oUA3tQdSOODxQCnLBv7KFnhRwhhh/Z
+6BRRC3rX4HYeRsLxlFeOmOzv0Ty6vhnpJnhf8648ujLXdT1r/0G53OR5v5QFTzLq
+eAIYDV86EYL1/ffONV3P+OKQqpPx/kgmtKPsmr+U01KbfJk44uFkyR3bUnHq3cXj
+wrNCxdazibp3Iqt2jZblWdsUvBzj8VGNOQmTvxySjbJHJVtLAEZsboZQzvdV9n9f
+xC4/PxxI45s9/NT6JjN2+At3CPMSup1Dr9P98NYFh01bvWcIzUVUznUkNj732M3V
+IsPpUEq6WJR8bISdnc+HTWhjULxjbAN/ptz1K1aU3JwI2aG2sHt6r0m8ug9V1y2X
+Yr2hU7ohBoHhJxxmSbcqjzoQ9wdEvenfFjY+IydQ6j09AAPvBkNYwOVFOKp8TIr4
+VZwIwf1eFAzs8mbbl+sFZENEM2aTpQL56AUv9FnGcg3AnVKs5/UJ8W0FYZw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ffdhe3072-1:ffdhe3072-1-pub
+
+PrivPubKeyPair=ffdhe3072-2:ffdhe3072-2-pub
+
+Derive=ffdhe3072-1
+PeerKey=ffdhe3072-2-pub
+SharedSecret=59C4B72684E68BC02148DF19FE6BECE40885AD037EE83F28C6E353C87026DAD66BB469C3F252BDC7ADA9271B6AD900620ECA15696B4E85561794A26259D61CAC7B56DDAED27BE2759A4C4BED5F8940784A255635D24E0D7B2BC796142CAF256D7A979240E9C8DD7230562B5D687971C4582A488E7BCA827FA32C4068C3C8B27ACA83E43EE9D7EAB3192F0DD877BA9C25D6334D233FC5752BEFE625B3D5DAE8589122B6C7E76538619E90AF1BD8D078496214C8F740F7BB5BFA284C811BEF5F9C6C1326E396DE17FDD47BE9D979643F2141FABB8950C3CECEEECFD0BB763F4D143A5AE284535F5E29B05E7DAC609D7080B5D1325F8D9242C67AC44482F5AA51131A763C370842D757EC16DE1988DF5BB4E4B6191A03F9E200DB491906871442FA98985DC976D5007C22FD491F49B8F0AB2AFDE0BDEFA18E56A686C712F4EDE53D924AA39CFED6C827CE0AD553132A474009203421F0A9373646200D8BA75725964079CF82D8C0C50AF6EEA4ECB607C02E7DD55C7998B4F849D79BE8867C69C62A
+
+Derive=ffdhe3072-2
+PeerKey=ffdhe3072-1-pub
+SharedSecret=59C4B72684E68BC02148DF19FE6BECE40885AD037EE83F28C6E353C87026DAD66BB469C3F252BDC7ADA9271B6AD900620ECA15696B4E85561794A26259D61CAC7B56DDAED27BE2759A4C4BED5F8940784A255635D24E0D7B2BC796142CAF256D7A979240E9C8DD7230562B5D687971C4582A488E7BCA827FA32C4068C3C8B27ACA83E43EE9D7EAB3192F0DD877BA9C25D6334D233FC5752BEFE625B3D5DAE8589122B6C7E76538619E90AF1BD8D078496214C8F740F7BB5BFA284C811BEF5F9C6C1326E396DE17FDD47BE9D979643F2141FABB8950C3CECEEECFD0BB763F4D143A5AE284535F5E29B05E7DAC609D7080B5D1325F8D9242C67AC44482F5AA51131A763C370842D757EC16DE1988DF5BB4E4B6191A03F9E200DB491906871442FA98985DC976D5007C22FD491F49B8F0AB2AFDE0BDEFA18E56A686C712F4EDE53D924AA39CFED6C827CE0AD553132A474009203421F0A9373646200D8BA75725964079CF82D8C0C50AF6EEA4ECB607C02E7DD55C7998B4F849D79BE8867C69C62A
+
+PrivateKey=ffdhe4096-1
+-----BEGIN PRIVATE KEY-----
+MIICTwIBADCCAhsGCSqGSIb3DQEDATCCAgwCggIBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8
+NPTe+ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0
+/URS4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4K
+vNBr+lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3
+Y88dVQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJ
+KZmjM8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHG
+igB+XmVfav//////////AgECAgIBRQQrAikf6HJGrPpToTmXJq6x8ZlcUpBK/RDk
+5e93wdj9M96Bp6CK5KDTX91DPg==
+-----END PRIVATE KEY-----
+
+PrivateKey=ffdhe4096-2
+-----BEGIN PRIVATE KEY-----
+MIICTwIBADCCAhsGCSqGSIb3DQEDATCCAgwCggIBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8
+NPTe+ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0
+/URS4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4K
+vNBr+lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3
+Y88dVQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJ
+KZmjM8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHG
+igB+XmVfav//////////AgECAgIBRQQrAikaMtvYLrkftmq+ryrWoSoyH8fA0OXp
+jwrNxAPiOZFBxvPImUEi3lOoxA==
+-----END PRIVATE KEY-----
+
+PublicKey=ffdhe4096-1-pub
+-----BEGIN PUBLIC KEY-----
+MIIEKDCCAhsGCSqGSIb3DQEDATCCAgwCggIBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8NPTe
++ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0/URS
+4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4KvNBr
++lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3Y88d
+VQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJKZmj
+M8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHGigB+
+XmVfav//////////AgECAgIBRQOCAgUAAoICAFmvIlVGC+VP3rxxLYMoEM3h0yvn
+pO086y+sRkf97FRppQxCbHaDwz64f0Bopzq8YbJE/OM7nhwAVH/L+6iFKsdENj5l
+LLaYIy1q/GR5SGC9yWjfkHKQaeVR2gCqn8IpKj/1JK1Km+rZE5UNF1v4zxurjNYw
+FKaPDF1dTtvfEzABQmf8ZX9vNSYJmbvCAzjNArcFwypuHZCFaoTAJHxwD4grWt2m
+EJ7FCigRt3sE+o5L6ZfgdOwj2V23JANMuDPIb7F/n1TOjSChMJA+Dg0e2WMO00Et
+19ce7MWMMwpPx7/vYukIaIQXcxFVJluwJf+qXu3oplAGe+8WuIzI1OBN9SEFO2PH
+s9TG33rUeSTU0jVtJS6qSsaLWKT0QRHv7hQCtCtH0l0vDuH/WhzSJmf68adZSiRI
+RSeJgYLocyOOXleP9/+iZOJ0n5617AbR1nBLOsh82tN4H0CsMi+TeNIlLA8RbFGu
+A442i70xx5YJaccV9YwEQJzIOpBd8DuGIvzXCuyf8756cn5KKTTtKTM4Cy50DH7z
+8URTx3+0uOodKOtIYyFSMYzTQCQFluPXfelR3t1aP2uRXqfC0bziw1OYb794xYx6
+cIlLbC0e0hiBpzTXWUJHb6rjtDfh+HnHlSUGWCGFoV0H5Cx6my9t/WBEnMlbjSMW
+DMW1av+3Na95903x
+-----END PUBLIC KEY-----
+
+PublicKey=ffdhe4096-2-pub
+-----BEGIN PUBLIC KEY-----
+MIIEKTCCAhsGCSqGSIb3DQEDATCCAgwCggIBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8NPTe
++ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0/URS
+4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4KvNBr
++lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3Y88d
+VQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJKZmj
+M8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHGigB+
+XmVfav//////////AgECAgIBRQOCAgYAAoICAQCdwSzypLeaeUauw2sV4oo1aTj3
+211HYCdPsP7qdyv7u08MD6HA2LIfbsi98J9B53v+LpIITbW5axwinYahc09lbf2Q
+Dwy5AiETXKQZqhJkbypMLax1N5TDwzXzM1JxBzmATGcX6CXfrWQ7XzKHDLvjI7W4
+WEOz+OMeV8F85B8dxf/p+hbOiIrv98iG1S15PGUDsx3r1ischqfJpQ3mNEP0qF+L
+904D5S1Y7KI/jHCZlo95HgrjHOSg73cnj4VKGhnStKatscWiMgh5rWC81vYpQDZx
+mqDyJEaz2XgrU4vlJT0zd/gWdDIqPpnhcE7vjO1e5hvdOhn75hIUNZejxw7/oT81
+59jLolbd+xpX4aIwqC+Gn4jgm8c8Z+QO7vQzlgbtSBFV9srDHvagmIWqr3lDDXgQ
+Tf3G0UV3EsxGKj3OGTIw4DAe22W2d2LDUlBp3N+lFrt6OEFtcLbnXoi1b7ig0gPn
+30p6bW9AZ/qL5SCfAYbtKDcRIyaqZ6MeG9qTzUIt/V4RQfaOuD3KrAj0jjCDKS7u
+pPxWYrb9jR0O9hDLnKfZr0zAI3X+X1JdXJpW8JFU6Av2LufYpoq3V5tXHdduwJwM
+ycc1F1F0Eu3KNknFa0SsQRhNWtMVDpPe2/gfd0DmastSkCieE0QtAVd0xb360mO+
+g9yTcM3iUEcuz/oz4w==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ffdhe4096-1:ffdhe4096-1-pub
+
+PrivPubKeyPair=ffdhe4096-2:ffdhe4096-2-pub
+
+Derive=ffdhe4096-1
+PeerKey=ffdhe4096-2-pub
+SharedSecret=B92DCFD06BA13D2E740CE295BA5748F0A8BC7F2AA23E6E9CC8D5FE01A783DA5F12C2B190B77D6A3CD69FE2B340C98AA2F612CE5A3FA34C168C2B1A3067B143043F46D354C5FFD79DDAC0097A5A1375B1F41A95918D49499116CA6D39377548FF23AC2248CFDE2064106F426FB45D9A626B614C5DF54872DB3216857472406C83449BED15385839D01B6F67CC8EC7F7DA35389B01333E6E8AD2F366BA56B6DB1F3FD726AB4C7F99E2D0AB9BABC6D4B8F6244B9706D4942984E2DD046831E05C51571E3EA9B1E665D5419E89378F7315BB2DEFD258A8FF44242D6908EC2E15A48D2F61820616935A72BF18309903A492F2646DA91AE5ABD3A4B3D934FF3811415B5385A276E082B4DE960CFE82FE3EE4909C2C8847EE2D839F419365B7B2EF38646EE182EF3531CCBEEE4115E57D71BFF808C0379057805D82317176CC913F058635F2B30705F456CCB3C518905F18A0902F6A74DECC48BCCDAF0C3004FE233D2FAFB60EB79204DDA7B791F911D763A3A0FBDD0926644F7004D5AD57EFF787DD54C81C4E9828B8501B44468ABCA6189A8DC00E666F813D7EF21A472F36E5F3338405C3FF4433FFBEF867677791C848E0B62D0099EE59E3A8ACDCCA4ABDB2CD6C58A8C7E76BE37FD922BB29DCA0F5B70714BDAF3183C09982EE4716BC656A3A8D63F7B26201C5D803923D1CE7BCE2843376F02E580D91B63B2B7480BBF32E9551ED
+
+Derive=ffdhe4096-2
+PeerKey=ffdhe4096-1-pub
+SharedSecret=B92DCFD06BA13D2E740CE295BA5748F0A8BC7F2AA23E6E9CC8D5FE01A783DA5F12C2B190B77D6A3CD69FE2B340C98AA2F612CE5A3FA34C168C2B1A3067B143043F46D354C5FFD79DDAC0097A5A1375B1F41A95918D49499116CA6D39377548FF23AC2248CFDE2064106F426FB45D9A626B614C5DF54872DB3216857472406C83449BED15385839D01B6F67CC8EC7F7DA35389B01333E6E8AD2F366BA56B6DB1F3FD726AB4C7F99E2D0AB9BABC6D4B8F6244B9706D4942984E2DD046831E05C51571E3EA9B1E665D5419E89378F7315BB2DEFD258A8FF44242D6908EC2E15A48D2F61820616935A72BF18309903A492F2646DA91AE5ABD3A4B3D934FF3811415B5385A276E082B4DE960CFE82FE3EE4909C2C8847EE2D839F419365B7B2EF38646EE182EF3531CCBEEE4115E57D71BFF808C0379057805D82317176CC913F058635F2B30705F456CCB3C518905F18A0902F6A74DECC48BCCDAF0C3004FE233D2FAFB60EB79204DDA7B791F911D763A3A0FBDD0926644F7004D5AD57EFF787DD54C81C4E9828B8501B44468ABCA6189A8DC00E666F813D7EF21A472F36E5F3338405C3FF4433FFBEF867677791C848E0B62D0099EE59E3A8ACDCCA4ABDB2CD6C58A8C7E76BE37FD922BB29DCA0F5B70714BDAF3183C09982EE4716BC656A3A8D63F7B26201C5D803923D1CE7BCE2843376F02E580D91B63B2B7480BBF32E9551ED
+
+PrivateKey=ffdhe6144-1
+-----BEGIN PRIVATE KEY-----
+MIIDVQIBADCCAxsGCSqGSIb3DQEDATCCAwwCggMBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8
+NPTe+ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0
+/URS4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4K
+vNBr+lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3
+Y88dVQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJ
+KZmjM8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHG
+igB+Xg3ZAgv9ZLZFA2x6Tmd9LDhTKjojukRCyvU+pju0VDKbdiTIkXvdZLHA/Uyz
+jowzTHAcOs2tBlf8z+xxmx9cPk5GBB84gUf7TP20d6UkcfepqWkQuFUyLttjQNig
+DvCSNQUR4wq+wf/546Juf7KfjBgwI8NYfjjaAHfZtHY+TkuUsrvBlMZlHnfK+ZLu
+qsAjKigb9rOnOcEiYRaCCujbWEemfL75yQkbRi1TjNcrA3Rq539eYiksMRViqEZQ
+XcgtuFQziuSfUjXJW5EXjM8t1crO9APsnRgQxicrBFs7cfnca4DWP91KjprbHmli
+ppUm1DFhwaQdVw15ONrUpA4ynNDkDmX//////////wIBAgICAXcEMQIvSAtU6kL4
+Q04G+z7VkF75A9mRrvM+4UWu9+nOPeAWZfTLU5OqNFUuupM+ZXHNGs8=
+-----END PRIVATE KEY-----
+
+PrivateKey=ffdhe6144-2
+-----BEGIN PRIVATE KEY-----
+MIIDVQIBADCCAxsGCSqGSIb3DQEDATCCAwwCggMBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8
+NPTe+ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0
+/URS4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4K
+vNBr+lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3
+Y88dVQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJ
+KZmjM8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHG
+igB+Xg3ZAgv9ZLZFA2x6Tmd9LDhTKjojukRCyvU+pju0VDKbdiTIkXvdZLHA/Uyz
+jowzTHAcOs2tBlf8z+xxmx9cPk5GBB84gUf7TP20d6UkcfepqWkQuFUyLttjQNig
+DvCSNQUR4wq+wf/546Juf7KfjBgwI8NYfjjaAHfZtHY+TkuUsrvBlMZlHnfK+ZLu
+qsAjKigb9rOnOcEiYRaCCujbWEemfL75yQkbRi1TjNcrA3Rq539eYiksMRViqEZQ
+XcgtuFQziuSfUjXJW5EXjM8t1crO9APsnRgQxicrBFs7cfnca4DWP91KjprbHmli
+ppUm1DFhwaQdVw15ONrUpA4ynNDkDmX//////////wIBAgICAXcEMQIvQJ+3F7o/
+XE6oeVRpsU2/uXFpNvtD8s2NMEZqecJQLHVJetCYm1TgrIW1T9WH8Mg=
+-----END PRIVATE KEY-----
+
+PublicKey=ffdhe6144-1-pub
+-----BEGIN PUBLIC KEY-----
+MIIGKDCCAxsGCSqGSIb3DQEDATCCAwwCggMBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8NPTe
++ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0/URS
+4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4KvNBr
++lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3Y88d
+VQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJKZmj
+M8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHGigB+
+Xg3ZAgv9ZLZFA2x6Tmd9LDhTKjojukRCyvU+pju0VDKbdiTIkXvdZLHA/Uyzjowz
+THAcOs2tBlf8z+xxmx9cPk5GBB84gUf7TP20d6UkcfepqWkQuFUyLttjQNigDvCS
+NQUR4wq+wf/546Juf7KfjBgwI8NYfjjaAHfZtHY+TkuUsrvBlMZlHnfK+ZLuqsAj
+Kigb9rOnOcEiYRaCCujbWEemfL75yQkbRi1TjNcrA3Rq539eYiksMRViqEZQXcgt
+uFQziuSfUjXJW5EXjM8t1crO9APsnRgQxicrBFs7cfnca4DWP91KjprbHmlippUm
+1DFhwaQdVw15ONrUpA4ynNDkDmX//////////wIBAgICAXcDggMFAAKCAwBzyuwl
+M1Ob9DJTGZFXugtmiHnnrC1Fuct0huyPoASXtbCo95FNnOqUe6VNfcMwagTmiD/t
+h3NRki3CvzchadgeJgQAJlyFzbRQr/NhwPNFkSKT08fMNe+InrVqvpz13tN6vJ7Y
+nSPJZXIwX1dHp7TgNatEFKc6sIYO2yy7WUNPVRokRtRH0F4ceXO/eMdQtjJ3coR5
+HPflfNJxPOlonygJ9Blk4tO7ngqAyifqVUVgVXqvUx1Wkpzo1t91HrG6YExrok9V
+92D8LXXS2qMfKvI66sF6avpBowyOoTj9pTvRW/z3umEmPLKzpVURzrzEa7MwDsmc
+sdNz9QWWHFCW5Jd2pPzuJnH55amZsKoEl2Bel62SrbzzjGKZBn1sxT6LyPrnJdZX
+fjiThE9E2fObPRA5A4dgxlmHsjbmMn3ERSQJdnQqaMme0PBzcZgZqLzULR3wWCh8
+r2dMoce4972VA6KvVSkxv0RfltrGhfCT+ERoaFg5Rcn/Sa2rXQEPT2wmhc1McjyU
+KMdYjstamKNurZPdfMU8pL9t/DUmWlr4ruDmgK1T9ODxyyGQHAf6/2JlCXv6cbks
+r+ZtEF3nBJ8cwLyiqaCEgMtXfoP64a/AcXeCvEnQgssq3Zot6pGRaUF162d1d+7R
+ekQ5ZIvEIVqhg/4OWhjK45jJw+MoA+tXRmXCpTyDq2sq3GMLQntWzDSns5WGBHY3
+oC7hQUSEQF3GjBiAkOgFGgSR/N4V8iL/DeRRodB/Sbo7lbJlFL8wdiZhZN0bAVyB
+bdsCUNBtCCK8gMqv4+wJBlQnZFX8XWVGahqQ3ph5WZce0IDvhOoCilLGP9PQLLHD
+sLLOfYgMB/h/UnEF+5Nmsn17EF6R48+JcBkAlfnCK5zFXlK6T9wJE2MuaBatbDLf
+TeSmUtWtEBNADNoVZHzEt0sxQimu+U8LAbuvkBmCqkZZLhlKNtEgNQYsZeOa1PSF
+Xf4grDcL+jWdbCohl06eB8gADPMFzkTxGNxf7PDNUD0qR76Y657h58CeRSw=
+-----END PUBLIC KEY-----
+
+PublicKey=ffdhe6144-2-pub
+-----BEGIN PUBLIC KEY-----
+MIIGKTCCAxsGCSqGSIb3DQEDATCCAwwCggMBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8NPTe
++ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0/URS
+4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4KvNBr
++lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3Y88d
+VQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJKZmj
+M8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHGigB+
+Xg3ZAgv9ZLZFA2x6Tmd9LDhTKjojukRCyvU+pju0VDKbdiTIkXvdZLHA/Uyzjowz
+THAcOs2tBlf8z+xxmx9cPk5GBB84gUf7TP20d6UkcfepqWkQuFUyLttjQNigDvCS
+NQUR4wq+wf/546Juf7KfjBgwI8NYfjjaAHfZtHY+TkuUsrvBlMZlHnfK+ZLuqsAj
+Kigb9rOnOcEiYRaCCujbWEemfL75yQkbRi1TjNcrA3Rq539eYiksMRViqEZQXcgt
+uFQziuSfUjXJW5EXjM8t1crO9APsnRgQxicrBFs7cfnca4DWP91KjprbHmlippUm
+1DFhwaQdVw15ONrUpA4ynNDkDmX//////////wIBAgICAXcDggMGAAKCAwEApE+s
+hUrveNP2zEv2CVJjLd4J58258c5kZDsMZmWE8k2LEJ04atl0Xa0G4ftlf8A3rDEu
+r22KJNZB+F6WBqpk/rzB6RDKC276ulE9+Aa3v2KXjQZAyLimro41T+mAVh15Anb4
+1ivcwCuL70BGT4wg6+bsgwfm1x7Q63DkqARk0FrNMO9dMibI6Y7Pg1gpU0cz975G
+VsxWvFeA8EfS/eC8KaBGHiSSWwKofDz2Y5pYZOnmjgh+8b2zEuVHdyOQ8fnoreDg
+nTnvkjjYH/4Gw5Y/XtmN7slbHywGCs51ujGiIqZf0U3/1IBnA/ir2FKSfbFZYySX
+Y/i8bSx9orvz9xEmOfUmoxil0TjWpaOx+T9e1IqWijmLqnt2zleBu6FSB9/F+2RG
+f6sPqLAs7lGBsby/uIpXNwuUkYHNc1tVdGyX+9dcQWTTMD88WyC33MIPOuiU5Svu
+nGx2VSX8wtsxDp4MxkVMxBleJHzDmdBkpJZDlWb6u1Fxrok5KktLCxN1wtLpJPEB
++ZNLnI98QXYpII2sXJWebB/EpD9OCj6J0gXJ6E+jXEkzZVGPvt+7betdP8Dzpg2i
+URC/uYcwpK9cWuCnwo9jnXAlLwDLpOhSCYxileW6kDLCWDh4b/LduZnDNX/ycdcH
+zTarTiYELHBzGAhhMt/SWB8bfVIhoEY2MOHl50ipMsmw2h27LqSNSW7RTreWziTR
+uxhvz7Z+aQODz/DfnWbh3tuaNBpxr7Z93K1jdaMUcbe2pjqDhd6vK9Ez4xPxeM2V
+ELjEQ2iTT1EDr4fjhzdbIBL58rbaTK7/Q513Iq4gXDSgrf7YlXzvxlHKA/M4vYLX
+Ymd+ih12vdfj4ZF09eZJgkY9WmdrHeLEJWqAj2G9UONZFsDgXrwU9gIcmiwGaEDk
+58C/g5aQb2XPJE08E2pmeXJJTqROWHXNrkTOnJfWoHsxTHwpmjzDUkZ2jUowDhEA
+MUudIw1y4BTPvz7EIlEY+Lz9loyuGQwgMYGg8tsxvyFuOA9IsdF4DHHcjQ6W
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ffdhe6144-1:ffdhe6144-1-pub
+
+PrivPubKeyPair=ffdhe6144-2:ffdhe6144-2-pub
+
+Derive=ffdhe6144-1
+PeerKey=ffdhe6144-2-pub
+SharedSecret=02B4252E4F0F659E78A58223DE9044AD90A0CC22DB5DE4F4815BF7226B7E663AE1B548A1ADB4ED81E9AF0B62FF985BF1E9893E39BA56FD843B6A134923156DD7D51DE9811B14ABA4494EAA95DA2AF8ACAD6AB2480A96A5DB99B46456FDEBDF1083220566F5DD3EC52DD06E72558B4701B528C989C06CE245EEF6215F487CFD1580615E6FE7D036985782E9BCC7ED62D2AA5A869FBF668391A0E601C2EC7A9A2E0DB57736C54ACA751E1085ABD4A55D506EFAB6FFC51AEEA33DD5EA651AA613E5F77BC81D2489FABABC8AEEF1DE5B65C3584F4080E4324EF3722AB4BF67A8FCABAE430996E454CA985B886D1B6BB5FF2C5246A8C001D953751EB59C47DAC678EE890DE817D9A06877E86516291A170ABE2273C4ADCF638713D98283F90DA17478759537C58A5D7D6AAC54C0485CAC2407A76079625ED285444ECA18127FF42419FADBDA2EDD5300CCB5F69543BCB74005BECE1FED763B06766B05EF2E20B685B92910C16B70165D111B2F8C59C6C79E5BCAC96FD2A6A969061C6D8626E605DA70E247630CF8A1D419C0E4910A72C164117B92B651CA8C8842E79C06E0E12BF8B67C218FB7FEB0F787EBBD2562E5C88A38013133753AECA5B03ECB54328765F61A6D3B901C38EC8F6582D717C688049893129DCAE597F3888E8E8BBCD9AAC9BDBD087926EAA63592DA66C085CBC408A5EC787CF0E3CE3070918B65B089A23457D0408B626B449221B460D1FD8DCCB280744B322760A53945DCD8FAA03DB4844F27496DA00B30ACC8619679D0AD28CE4464094C6DB2F68332BAD17348637E4D72B0C1EBCBBDDE514691C744F709083A76044AC85AF1B18ACD0B1716773DDB82ED94E02B0DB26205BD683A1F4E390881D556AAC305FCEB7E00AF0E3EC80AF2CD46769ED4F471DC71B60BEF36F6361B4A82C7A7F473F61C566D5206C9EFDC112A48BDDC58691830F64C91F4FB150DC61A334B7D5C3770BDBDC91A5E14C6FB02A369A0A7D2D7B008070289EFBDBB2AFD4D62BCC095E9FF81CB8E0B4F139EFD3CF5EDF243FCC08A8FA7577AEF0548436B589C4A221BE1FCE223024619F99DC66557598F
+
+Derive=ffdhe6144-2
+PeerKey=ffdhe6144-1-pub
+SharedSecret=02B4252E4F0F659E78A58223DE9044AD90A0CC22DB5DE4F4815BF7226B7E663AE1B548A1ADB4ED81E9AF0B62FF985BF1E9893E39BA56FD843B6A134923156DD7D51DE9811B14ABA4494EAA95DA2AF8ACAD6AB2480A96A5DB99B46456FDEBDF1083220566F5DD3EC52DD06E72558B4701B528C989C06CE245EEF6215F487CFD1580615E6FE7D036985782E9BCC7ED62D2AA5A869FBF668391A0E601C2EC7A9A2E0DB57736C54ACA751E1085ABD4A55D506EFAB6FFC51AEEA33DD5EA651AA613E5F77BC81D2489FABABC8AEEF1DE5B65C3584F4080E4324EF3722AB4BF67A8FCABAE430996E454CA985B886D1B6BB5FF2C5246A8C001D953751EB59C47DAC678EE890DE817D9A06877E86516291A170ABE2273C4ADCF638713D98283F90DA17478759537C58A5D7D6AAC54C0485CAC2407A76079625ED285444ECA18127FF42419FADBDA2EDD5300CCB5F69543BCB74005BECE1FED763B06766B05EF2E20B685B92910C16B70165D111B2F8C59C6C79E5BCAC96FD2A6A969061C6D8626E605DA70E247630CF8A1D419C0E4910A72C164117B92B651CA8C8842E79C06E0E12BF8B67C218FB7FEB0F787EBBD2562E5C88A38013133753AECA5B03ECB54328765F61A6D3B901C38EC8F6582D717C688049893129DCAE597F3888E8E8BBCD9AAC9BDBD087926EAA63592DA66C085CBC408A5EC787CF0E3CE3070918B65B089A23457D0408B626B449221B460D1FD8DCCB280744B322760A53945DCD8FAA03DB4844F27496DA00B30ACC8619679D0AD28CE4464094C6DB2F68332BAD17348637E4D72B0C1EBCBBDDE514691C744F709083A76044AC85AF1B18ACD0B1716773DDB82ED94E02B0DB26205BD683A1F4E390881D556AAC305FCEB7E00AF0E3EC80AF2CD46769ED4F471DC71B60BEF36F6361B4A82C7A7F473F61C566D5206C9EFDC112A48BDDC58691830F64C91F4FB150DC61A334B7D5C3770BDBDC91A5E14C6FB02A369A0A7D2D7B008070289EFBDBB2AFD4D62BCC095E9FF81CB8E0B4F139EFD3CF5EDF243FCC08A8FA7577AEF0548436B589C4A221BE1FCE223024619F99DC66557598F
+
+PrivateKey=ffdhe8192-1
+-----BEGIN PRIVATE KEY-----
+MIIEWQIBADCCBBsGCSqGSIb3DQEDATCCBAwCggQBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8
+NPTe+ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0
+/URS4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4K
+vNBr+lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3
+Y88dVQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJ
+KZmjM8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHG
+igB+Xg3ZAgv9ZLZFA2x6Tmd9LDhTKjojukRCyvU+pju0VDKbdiTIkXvdZLHA/Uyz
+jowzTHAcOs2tBlf8z+xxmx9cPk5GBB84gUf7TP20d6UkcfepqWkQuFUyLttjQNig
+DvCSNQUR4wq+wf/546Juf7KfjBgwI8NYfjjaAHfZtHY+TkuUsrvBlMZlHnfK+ZLu
+qsAjKigb9rOnOcEiYRaCCujbWEemfL75yQkbRi1TjNcrA3Rq539eYiksMRViqEZQ
+XcgtuFQziuSfUjXJW5EXjM8t1crO9APsnRgQxicrBFs7cfnca4DWP91KjprbHmli
+ppUm1DFhwaQdVw15ONrUpA4ynM/0aqo2rQBM9gDIOB5CWjHZUa5k/bI/zslQnUNo
+f+tp7dHMXguMw732SxDvhrYxQqOriClVWy90fJMmZcssDxzAG9cCKTiIOdKvBeRU
+UErHi3WCgihGwLo1w19cWRYMwEb9glFUH8aMnIawIrtwmYdqRg50UaipMQlwP+4c
+IX5sOCblLFGqaR4OQjz8menjFlDBIXtiSBbNrZqV+dW4AZSI2cCgof4wdaV34jGD
++B1KPy+kVx78jOC6ik/otoVd/nKwpm7e0vur++WKMPr6vhxdcah+L3Qe+MH+hv6m
+u/3lMGd/DZfRHUn3qEQ9CCLlBqn0YU4BHiqUg4/4jNaMi7fFxkJM//////////8C
+AQICAgGQBDUCMwCmIsCXuloAz6Y+lwiHSiQDK3YRde+rRZ2K2pj6HFytJCsjVp88
+9fLrPJUuRBScbgYaCQ==
+-----END PRIVATE KEY-----
+
+PrivateKey=ffdhe8192-2
+-----BEGIN PRIVATE KEY-----
+MIIEWQIBADCCBBsGCSqGSIb3DQEDATCCBAwCggQBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8
+NPTe+ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0
+/URS4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4K
+vNBr+lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3
+Y88dVQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJ
+KZmjM8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHG
+igB+Xg3ZAgv9ZLZFA2x6Tmd9LDhTKjojukRCyvU+pju0VDKbdiTIkXvdZLHA/Uyz
+jowzTHAcOs2tBlf8z+xxmx9cPk5GBB84gUf7TP20d6UkcfepqWkQuFUyLttjQNig
+DvCSNQUR4wq+wf/546Juf7KfjBgwI8NYfjjaAHfZtHY+TkuUsrvBlMZlHnfK+ZLu
+qsAjKigb9rOnOcEiYRaCCujbWEemfL75yQkbRi1TjNcrA3Rq539eYiksMRViqEZQ
+XcgtuFQziuSfUjXJW5EXjM8t1crO9APsnRgQxicrBFs7cfnca4DWP91KjprbHmli
+ppUm1DFhwaQdVw15ONrUpA4ynM/0aqo2rQBM9gDIOB5CWjHZUa5k/bI/zslQnUNo
+f+tp7dHMXguMw732SxDvhrYxQqOriClVWy90fJMmZcssDxzAG9cCKTiIOdKvBeRU
+UErHi3WCgihGwLo1w19cWRYMwEb9glFUH8aMnIawIrtwmYdqRg50UaipMQlwP+4c
+IX5sOCblLFGqaR4OQjz8menjFlDBIXtiSBbNrZqV+dW4AZSI2cCgof4wdaV34jGD
++B1KPy+kVx78jOC6ik/otoVd/nKwpm7e0vur++WKMPr6vhxdcah+L3Qe+MH+hv6m
+u/3lMGd/DZfRHUn3qEQ9CCLlBqn0YU4BHiqUg4/4jNaMi7fFxkJM//////////8C
+AQICAgGQBDUCMwCJ64IxAZbrPx6XmQG5Jliud12CCXsepFzxQaLdGqV4VtiHzZBl
+O47nScNTRN7Ol2e1Og==
+-----END PRIVATE KEY-----
+
+PublicKey=ffdhe8192-1-pub
+-----BEGIN PUBLIC KEY-----
+MIIIKDCCBBsGCSqGSIb3DQEDATCCBAwCggQBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8NPTe
++ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0/URS
+4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4KvNBr
++lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3Y88d
+VQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJKZmj
+M8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHGigB+
+Xg3ZAgv9ZLZFA2x6Tmd9LDhTKjojukRCyvU+pju0VDKbdiTIkXvdZLHA/Uyzjowz
+THAcOs2tBlf8z+xxmx9cPk5GBB84gUf7TP20d6UkcfepqWkQuFUyLttjQNigDvCS
+NQUR4wq+wf/546Juf7KfjBgwI8NYfjjaAHfZtHY+TkuUsrvBlMZlHnfK+ZLuqsAj
+Kigb9rOnOcEiYRaCCujbWEemfL75yQkbRi1TjNcrA3Rq539eYiksMRViqEZQXcgt
+uFQziuSfUjXJW5EXjM8t1crO9APsnRgQxicrBFs7cfnca4DWP91KjprbHmlippUm
+1DFhwaQdVw15ONrUpA4ynM/0aqo2rQBM9gDIOB5CWjHZUa5k/bI/zslQnUNof+tp
+7dHMXguMw732SxDvhrYxQqOriClVWy90fJMmZcssDxzAG9cCKTiIOdKvBeRUUErH
+i3WCgihGwLo1w19cWRYMwEb9glFUH8aMnIawIrtwmYdqRg50UaipMQlwP+4cIX5s
+OCblLFGqaR4OQjz8menjFlDBIXtiSBbNrZqV+dW4AZSI2cCgof4wdaV34jGD+B1K
+Py+kVx78jOC6ik/otoVd/nKwpm7e0vur++WKMPr6vhxdcah+L3Qe+MH+hv6mu/3l
+MGd/DZfRHUn3qEQ9CCLlBqn0YU4BHiqUg4/4jNaMi7fFxkJM//////////8CAQIC
+AgGQA4IEBQACggQAYZTSEWGhvKQeJkBdr/GN4zoD8oGuXpS8nxQctcjzIQfg25dA
+vl/bDaCM+PMEe47H3q6qyWN4VuAlXmnE52hqebVlUiQ/H5dfmaRE1UMxQNLfmTYW
+qpJaN1YFqbCQpng8nmVtqZBtgC6L8nRc9MkOWKgZC95e/sMyPOt0w3LvTZ6Uz9Tw
+w5PuVX6sUC8jOLiJCHFypVeTmZQtfB9+OHxUe7fYN+XYEGeZBfFt4f1b05AjH2/C
+vXO0i6tw0RG96H/nMt1OXGPEEoC6BiWZsXYFghG+n34wRGJ/0R3GVbhmLSlBxPum
+r8urHjf3lopKXVXE761YPX/pYBCWIpGiEmYdg1SQ3vd+a7qkFOR5qUfQkS0zsGAD
+ghn+9vuniOXbKBBlU6zN7qJ3+TKaGXgJWKI1d9b6DZsYmU+3x5flW78kHr+tQz3d
+/wU9qHQ/Ow5EO/CZrxntxryPrXvLOjeAMlBbxaloHKwcnWav3soqLtASZ0r1px6A
+JAjxPLEdhpWKeVhCHNum++YD2uW9IeO/IBRLyKakFzoSc5I6yLNX4pywrQi/DPa5
+1Qr5Jg1wJODCAFChLdX0+BwMz5HTSx2gseGzcsNSuTBE5VwJ9zKYxe0mpl0MPXt2
+eXf1DxmH16LvVGm4m9KJ/xPf6x2fN/+MJyGHN7DUSVt5Ke8X70KsWJj4SD5c5aN9
+JEQiPswgCiOO/L9cA3RyXV3wdn++92m0LUp8nTvQ7XP0F1DZp75JlX9B6JAVkQ4s
+1lgNPzKU3OspkRsUtihK7MD4e3Cqz11SjVQqtJLc1Lw8L7QtWFflh6rMk8U2iHgx
+eEOyVkJMa9YACuo6OFcZheobhmYvsm1R/9D766foehL4P2Q2FqijHYMg6cD9fPkB
+8ie2O+DIvo0oms/69q888J71GncJ6eE88P9ipSQKpBd1PALIDMgUKZQsmBYHyLXC
+XgGtrdspQ1sHEk/2XOaGcx11okLGv98+LkdElZtqM/48eDm5Lw58BF3R9t6druEF
+/dbsBTgNfeoWkBJaakxOUxMKXg1rxpxi1xo9+yohN0htYZeSj5NDEFn4DixuCagj
+/WP9bkB5f5LY44Z9JPF1LnI69ndlT2lc4henwZLY7kBMb3CvvjUDkE5v9gEBJA8u
+ZTpZ/VhX65+L5PLNca45BeUzq4kA72IwvP4+z0gY77/mRwtxuDSKXu5381ULKNIQ
+TY7siPrDaDCNNz5WqjaLOrQPqfopeVr4fjoXsCiGWWdIV1Q0RX5Y2uNbX4SjVvEb
+Risp2sTjgPCg1ox61zX+lD3JHvopO46qCvYHsCEgK80R3KY6MOBkdDn6XE5pN+Br
+uBBxf1k6qpOXmJ34OL4QpZBO0FHldrpRFjShtg==
+-----END PUBLIC KEY-----
+
+PublicKey=ffdhe8192-2-pub
+-----BEGIN PUBLIC KEY-----
+MIIIKDCCBBsGCSqGSIb3DQEDATCCBAwCggQBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhH8/c3jVbO2UZA1u8NPTe
++ZwCOGG0b8nW5skHetkdJpH39+5ZjLD6wYbZHK7+EwmFE5JwtBMMk7xDeUT0/URS
+4tdN02Ty4h5x9Uv/XK6Cq5yd9p7obSvFIjY6DavFIZebDeraHb+aQtXESE4KvNBr
++lPd7zwbIO4/1Z18JeQdK2aeHvFub1LDFk30+3kw6eTliFe2rH1fQtafbRh3Y88d
+VQNABIf1W6V+Mcx6cTXIhu+0MYrtah4BLZ5oMqkHYAqRgTDEbcd4+XGtADgJKZmj
+M8uLehoduT1xQAA8Kk7OqfmNCswKgpHNzsl9z47JtVp/iKRrTbWoUfRBguHGigB+
+Xg3ZAgv9ZLZFA2x6Tmd9LDhTKjojukRCyvU+pju0VDKbdiTIkXvdZLHA/Uyzjowz
+THAcOs2tBlf8z+xxmx9cPk5GBB84gUf7TP20d6UkcfepqWkQuFUyLttjQNigDvCS
+NQUR4wq+wf/546Juf7KfjBgwI8NYfjjaAHfZtHY+TkuUsrvBlMZlHnfK+ZLuqsAj
+Kigb9rOnOcEiYRaCCujbWEemfL75yQkbRi1TjNcrA3Rq539eYiksMRViqEZQXcgt
+uFQziuSfUjXJW5EXjM8t1crO9APsnRgQxicrBFs7cfnca4DWP91KjprbHmlippUm
+1DFhwaQdVw15ONrUpA4ynM/0aqo2rQBM9gDIOB5CWjHZUa5k/bI/zslQnUNof+tp
+7dHMXguMw732SxDvhrYxQqOriClVWy90fJMmZcssDxzAG9cCKTiIOdKvBeRUUErH
+i3WCgihGwLo1w19cWRYMwEb9glFUH8aMnIawIrtwmYdqRg50UaipMQlwP+4cIX5s
+OCblLFGqaR4OQjz8menjFlDBIXtiSBbNrZqV+dW4AZSI2cCgof4wdaV34jGD+B1K
+Py+kVx78jOC6ik/otoVd/nKwpm7e0vur++WKMPr6vhxdcah+L3Qe+MH+hv6mu/3l
+MGd/DZfRHUn3qEQ9CCLlBqn0YU4BHiqUg4/4jNaMi7fFxkJM//////////8CAQIC
+AgGQA4IEBQACggQADNgThA6Ha+5i9Zm9ZCNDLMbsyzoLdM0uK3sJ+jsTn2tw+kBG
+FJo5EEk6ojw0VGasoC8e9ThX78YHiCG18vPbLteE/CD4g+jGo/KcOUfrZV3uHBwv
+Y9F9fIcZi9XTBa9Np6yntpYh/fXxClWybWscdRXVXTv9AJ0GMCGa6ebV7++AwVee
+1C3U47omYwVET7adSmqzbcjNF42dConPlB7tTMCtJR92xYHCFK07kRT17OAdVJyf
+KDdzLeW1VJBzbkdrGCAJSx3iwRp6d6ldeFdDhcUEzgQZnB/JnVmEoZDXK4i2KYc4
+b78VivuOAuZFdokC1g+RsGgWkGhDxnsGPWvPWACTzm+zTjMyENygkEyzp3moBjMm
+doXE4z11V6zm7ZoNxJ7ouzTEpLMvu7XcavKv/uVbsW7uAJqbosIsqWLdcxaDEFzG
+W54Se2EaybZj/gr2tQHGAfE01+ulSJ57fuhSPLVgtpDcS98meWgKS4ddHr9dLFe6
+886fZvAvswW1ZlND7UZihtKIl3Nx0Myn+B+YG2oJQp0vsmMh1sCGD0g007TGUe82
+3/xgRXlUjwmCDikpXCSTagm3ZKF6GqJNwJN2sxCqy6wp2LX/KM3oSErXxCBTSCZt
+/wAzGd3tDcH4D79kbzIRtCCcfLI/TqC95OW3ANR6obd3ongV2rW1HyN3mLOgzuDv
+phVP0XX4fIGGGGmz76AJdpcIhXzlzQcY1fDjH59WOuOFZylxAmfNziM6ORL/FyMZ
+YxZLSx7TrHEiiRAT431hpx4f9qE5SePhg1HXqzBPA8YJtV1WiJWjO/u4LP9H7iIl
+4eubdVZqV6k2Kaw3WB7ZgST4Jc9ybiVT/kz0nTA7AF0TXSNL/BsBrEwZz8wrKlHu
+rj5MOUpAPwRlLUln11w7gTz98lvEBSyInMSjOr+0NmW77D+IWoAwWBdrcuRE2Dod
+rjhZeWrHWdgNqPOaYKkUS+CexH01aEdX3YHFmGPyXrwOkmX0zjBns3RjRzA9Dyjk
+qgG/mKQ243smQPIUDHvbfgmdLNHOg0iOyDq1nKWk5K6X3tEgUnmxkcONQ66QXyEB
+BpXtyD1NFg0op0p0/7jNpQUsNeKx9gRsTfUC7TDS4bYnJT+vNOFYiKClVC6lgrYT
+4dBvQQx44OY4VIwrXOl5H3Z5DR3D4Gg/yMtqizXmiCffVG3I8NJSrAm3QVS/xxxv
+fj2ITAUI3nmvKJD1IGXo4T/+N5GGexEWMu1IuDO4vkcKhYWIHlyAEC1paJjOslbU
+vbRjLQvAYe0P1TBk+2mal5Agh0UQHyYsDlxMDmortsKhLDXOVjAx2AS9VV2tBbpZ
+pEt4opfkapIwZaJV+5MgtHyWMFQ6w2QF/CdUAg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair=ffdhe8192-1:ffdhe8192-1-pub
+
+PrivPubKeyPair=ffdhe8192-2:ffdhe8192-2-pub
+
+Derive=ffdhe8192-1
+PeerKey=ffdhe8192-2-pub
+SharedSecret=4E48335CB2A508C3481729F42C49CFC0A9DA673F9FA4FBD968B3C5B78DBFA8695295642D1337C54229370B33068481F6A6E1B021F8B09B7C6B3E4DB581AD4C7ACF5C230A1FD4107EAE55530A8376856A65E079DE1BDA41B050E9B53A088ACADB879CCBC683A13BB925D48497BF7021FEB9DA214DD77FCBB6D0D46EC2BB9C7A9AFB93FC236E4EB61CB0F0C8E025D8CF4AF8B3B0F28B3E2CFAE6E760DC7877C71046179154FBE1A50A315C4DBA6D9E06406D389B614B1FC422C72FBB958C0A2EE21694CD32136F9CF0A1205E0D3A4B10CC9C98B3B4524A0CDC9455D3021AC44057CEF4A97E85166068769E9E644CC447095243BB90368A1CE6F0E3C69CA180F5B9D51F590A812B1375460CF10A7E718A83A2F6B00D8E28BAB45CEAB8AF0EB02988ED9221416EC061C1C4081552D3D0849D243DB473EC7B90180C3891E768DD2D7002CF505D369700CAF02A4B9DD1F2828C4ACC1F2EB47100DC2DB5620ADA971D1B0B0FAC9F9E3492B591FC85AC3DCB3826A8DA5842F4AE145FE33BFCDD0B6CD15C9836A5862EDB3D87A0CDBD724AE19A79A55D4F0BFF7870019926181933C840EACFB70FBC0EF182057DC09E06798EB4C9AAC2285F22F5D907A432C6D00CC44D07D77E77D1ACC183A174146ECFBDA26FF922CEBD2FA288EF2D23F65C0AAAD0F05DBFB6CA12446082D1F5774877483C3858442E305CF2A9637CE0EBB702DB70FF336E5B0413F3E8791960F1F0A9877C9076213D40657283D546AE52B73FF4449E60F8B6FE30D4CC0BA1ACA7A7DC155EC73C48B21477983D004261267D710D8A5E8CBD0656F1A963F248E887E8C2BF87BCAE7A0D4891BF21FCF35893584B29E18E842A23EA329ADD3D6AD994B5CBFBBFAB5A26932E8F799B2B0FA7789DE7A4A5C4B7FA81971819EA7F33B5BF6577F917BDE9C3680BCC5B15F1EAB4524A1B6DEE96B9F108A77344269A1757685D0404C832E4E0C5A29F808CFA6290316C0EBB2EF0A7431F62A5FBCDC66527AD8A04C0F10AF88C7CE1F1F22C41B71CE278BB704E88145608C28AD78402487031F6B13604CC6687161EBB78E7AF7AA0BC3CCB9AD8B00D7C01980599904B71F5DBC06A691E5638566BE36522B7FED69E24C28F8EA798BA3E9CCEB8AB8CF5651379A21A38315B05C66205616BBC6A3DD5573C9C6FBA2E3488E055E5F36857016D9300BFCE9F38D7C7CCD07FCF1EF41F8347CADCB12C400536374CF269613B05069B6D94CADA3B1F4ACBB68FA1ED175B01D840D871B3B0CDB918CDF15C79169A398C189AEA78860081DB423C89D350587E26D6D77B4C762B4F2A030345679F724CFBB08DB03E8CEB4FF0B91422BD2EB5C1C356D209049CFA2D6447F69B1E1DF0850FFBB6BB9F8D5B147765C023F76524A808456DEBF6A9134E3364DF462D4807FE6D4D036A4E59A4D56F8A30D8A27F4DFA174940B713A7E4
+
+Derive=ffdhe8192-2
+PeerKey=ffdhe8192-1-pub
+SharedSecret=4E48335CB2A508C3481729F42C49CFC0A9DA673F9FA4FBD968B3C5B78DBFA8695295642D1337C54229370B33068481F6A6E1B021F8B09B7C6B3E4DB581AD4C7ACF5C230A1FD4107EAE55530A8376856A65E079DE1BDA41B050E9B53A088ACADB879CCBC683A13BB925D48497BF7021FEB9DA214DD77FCBB6D0D46EC2BB9C7A9AFB93FC236E4EB61CB0F0C8E025D8CF4AF8B3B0F28B3E2CFAE6E760DC7877C71046179154FBE1A50A315C4DBA6D9E06406D389B614B1FC422C72FBB958C0A2EE21694CD32136F9CF0A1205E0D3A4B10CC9C98B3B4524A0CDC9455D3021AC44057CEF4A97E85166068769E9E644CC447095243BB90368A1CE6F0E3C69CA180F5B9D51F590A812B1375460CF10A7E718A83A2F6B00D8E28BAB45CEAB8AF0EB02988ED9221416EC061C1C4081552D3D0849D243DB473EC7B90180C3891E768DD2D7002CF505D369700CAF02A4B9DD1F2828C4ACC1F2EB47100DC2DB5620ADA971D1B0B0FAC9F9E3492B591FC85AC3DCB3826A8DA5842F4AE145FE33BFCDD0B6CD15C9836A5862EDB3D87A0CDBD724AE19A79A55D4F0BFF7870019926181933C840EACFB70FBC0EF182057DC09E06798EB4C9AAC2285F22F5D907A432C6D00CC44D07D77E77D1ACC183A174146ECFBDA26FF922CEBD2FA288EF2D23F65C0AAAD0F05DBFB6CA12446082D1F5774877483C3858442E305CF2A9637CE0EBB702DB70FF336E5B0413F3E8791960F1F0A9877C9076213D40657283D546AE52B73FF4449E60F8B6FE30D4CC0BA1ACA7A7DC155EC73C48B21477983D004261267D710D8A5E8CBD0656F1A963F248E887E8C2BF87BCAE7A0D4891BF21FCF35893584B29E18E842A23EA329ADD3D6AD994B5CBFBBFAB5A26932E8F799B2B0FA7789DE7A4A5C4B7FA81971819EA7F33B5BF6577F917BDE9C3680BCC5B15F1EAB4524A1B6DEE96B9F108A77344269A1757685D0404C832E4E0C5A29F808CFA6290316C0EBB2EF0A7431F62A5FBCDC66527AD8A04C0F10AF88C7CE1F1F22C41B71CE278BB704E88145608C28AD78402487031F6B13604CC6687161EBB78E7AF7AA0BC3CCB9AD8B00D7C01980599904B71F5DBC06A691E5638566BE36522B7FED69E24C28F8EA798BA3E9CCEB8AB8CF5651379A21A38315B05C66205616BBC6A3DD5573C9C6FBA2E3488E055E5F36857016D9300BFCE9F38D7C7CCD07FCF1EF41F8347CADCB12C400536374CF269613B05069B6D94CADA3B1F4ACBB68FA1ED175B01D840D871B3B0CDB918CDF15C79169A398C189AEA78860081DB423C89D350587E26D6D77B4C762B4F2A030345679F724CFBB08DB03E8CEB4FF0B91422BD2EB5C1C356D209049CFA2D6447F69B1E1DF0850FFBB6BB9F8D5B147765C023F76524A808456DEBF6A9134E3364DF462D4807FE6D4D036A4E59A4D56F8A30D8A27F4DFA174940B713A7E4
diff --git a/test/recipes/30-test_evp_data/evppkey_kas.txt b/test/recipes/30-test_evp_data/evppkey_kas.txt
new file mode 100644
index 000000000000..ba1049628f94
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_kas.txt
@@ -0,0 +1,11667 @@
+#
+# Copyright 2001-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 are ignored.
+# The keyword Availablein must appear before the test name if needed.
+
+
+# Public key algorithm tests
+# Private keys used for PKEY operations.
+
+
+# http://csrc.nist.gov/groups/STM/cavp/component-testing.html#ECCCDH #
+# sha256sum(KAS_ECC_CDH_PrimitiveTest.txt) = #
+# 456068d3f8aad8ac62a03d19ed3173f00ad51f42b51aeab4753c20f30c01cf23 #
+Title = ECDH KATs (from NIST SP800-56A co-factor ECDH KATs
+
+PrivateKey=KAS-ECC-CDH_P-192_C0
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBjxfT/qNnt000CFHKQn
+DcskwnH0Rb7Z1SehNAMyAASxUFNAH1coVjfsMkwc0hOeOmfeNzkjSzfyacFYY3SC
+qtZEzWkt0dPvLIp8SeOJ9/Y=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEsVBTQB9XKFY37DJMHNITnjpn3jc5
+I0s38mnBWGN0gqrWRM1pLdHT7yyKfEnjiff2
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C0:KAS-ECC-CDH_P-192_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEQupt2Zad0qYf6hqsf46Y7cyJbG5V
+hXzA375dfGH6yIsRgRveMo6KDRK/AanSBLUj
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C0
+PeerKey=KAS-ECC-CDH_P-192_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=803d8ab2e5b6e6fca715737c3a82f7ce3c783124f6d51cd0
+
+Availablein = fips
+Derive=KAS-ECC-CDH_P-192_C0
+Securitycheck = 1
+PeerKey=KAS-ECC-CDH_P-192_C0-Peer-PUBLIC
+Result = DERIVE_SET_PEER_ERROR
+
+PrivateKey=KAS-ECC-CDH_P-192_C1
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBhW6FM0nZb+TEQkSNrL
+fPkrt6ldz1dKm9WhNAMyAATADUNXFv/qU/2MFieSQUw3ZlGH5YJxZTmrcRxiqnGl
+oY6KPEj4ncb6UvrAEI5SqKA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEwA1DVxb/6lP9jBYnkkFMN2ZRh+WC
+cWU5q3EcYqpxpaGOijxI+J3G+lL6wBCOUqig
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C1:KAS-ECC-CDH_P-192_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE3rVxL6AnrI0vIsRVzLc6keF7ZRK1
+4DDnfiaQoCzJsocIQxop+1S4ex8MFOARrCEl
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C1
+PeerKey=KAS-ECC-CDH_P-192_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=c208847568b98835d7312cef1f97f7aa298283152313c29d
+
+PrivateKey=KAS-ECC-CDH_P-192_C2
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBjG72H+EugL9W8tP30L
+t1c5RRmQbVVQCUmhNAMyAAThhLwYJILzQDyHh7g4Qkd0Z/zQEdsPbGT50cFBQvQN
+6GOduX1Rpj0szhAHzPdzzcs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE4YS8GCSC80A8h4e4OEJHdGf80BHb
+D2xk+dHBQUL0Dehjnbl9UaY9LM4QB8z3c83L
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C2:KAS-ECC-CDH_P-192_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAETtqo78Wg9A+ENmPsWBXndi3dwAjm
+Y8IPCp+Nxno+YO9tZLUiGF0D3x/Arf1CR4J5
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C2
+PeerKey=KAS-ECC-CDH_P-192_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=87229107047a3b611920d6e3b2c0c89bea4f49412260b8dd
+
+PrivateKey=KAS-ECC-CDH_P-192_C3
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBjmdHucI7pwRPOP9+Ys
+NeQDiSD1oBY9PNqhNAMyAAQrg42+c3NfN6OaeNMZV4PSaZHob/TZLRpg00SUInRI
+n5iQOy5/k/jRl/ya5goO1To=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEK4ONvnNzXzejmnjTGVeD0mmR6G/0
+2S0aYNNElCJ0SJ+YkDsuf5P40Zf8muYKDtU6
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C3:KAS-ECC-CDH_P-192_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEiIfCdu3u0+noZrRtWNiVxz+9gLY+
+OC6IBMUJe6ZkXhYgbPtw9wUmVZR91EoX8fnV
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C3
+PeerKey=KAS-ECC-CDH_P-192_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=eec0bed8fc55e1feddc82158fd6dc0d48a4d796aaf47d46c
+
+PrivateKey=KAS-ECC-CDH_P-192_C4
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBi+q+3QFUoa/PyF1SGB
+wQ9etHrcUfZVBH2hNAMyAAQfZc9uiXjhwbwQu2Gn2zEd4xAIjIz5dov31DgWjn9C
+qxSxavU6ei9kb/QLU9dMvMc=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEH2XPbol44cG8ELthp9sxHeMQCIyM
++XaL99Q4Fo5/QqsUsWr1OnovZG/0C1PXTLzH
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C4:KAS-ECC-CDH_P-192_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEDQRfMCVK3B/O+opbHzG/TnOd0yfN
+GNWUVCwxTkFCfAgnigjOjXMF87W4Scctiv9z
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C4
+PeerKey=KAS-ECC-CDH_P-192_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=716e743b1b37a2cd8479f0a3d5a74c10ba2599be18d7e2f4
+
+PrivateKey=KAS-ECC-CDH_P-192_C5
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBjPcDVCJmZzIdbiuvQJ
+meL9dMeg95P6hpmhNAMyAARfSET/zOYQBdJPc325hnXpL3tlQ662EGxUJPWYE5IV
+04m2sSuG1YAUhX8t2ttUD1E=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEX0hE/8zmEAXST3N9uYZ16S97ZUOu
+thBsVCT1mBOSFdOJtrErhtWAFIV/LdrbVA9R
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C5:KAS-ECC-CDH_P-192_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE+zXKINLpZmXFG5jo9us9eRE1CNi8
+zUUWNo7sDVv7hHch32qv8OXUjERPdL+c2KWn
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C5
+PeerKey=KAS-ECC-CDH_P-192_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=f67053b934459985a315cb017bf0302891798d45d0e19508
+
+PrivateKey=KAS-ECC-CDH_P-192_C6
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBj+lCUVI3//3XtOtcZJ
+Ce7khWoHbN8SuuKhNAMyAATmNp33myB7i4Z598hpz8JkhZ0atVqkAegfmccfgBow
+tS902m5ebbti7kxdoQkMwCA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE5jad95sge4uGeffIac/CZIWdGrVa
+pAHoH5nHH4AaMLUvdNpuXm27Yu5MXaEJDMAg
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C6:KAS-ECC-CDH_P-192_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEgkdSlgwTB+XxOoPaIceZjKi1sAuV
+SfbQvFLZHiNDY7wy7gtnePJc2MGEdRD0NIuU
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C6
+PeerKey=KAS-ECC-CDH_P-192_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=75822971193edd472bf30151a782619c55ad0b279c9303dd
+
+PrivateKey=KAS-ECC-CDH_P-192_C7
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBgz/tEEkq+lvqAzPArx
+LKyUDE0iJFW80P6hNAMyAATvCyivxBY31zf0LkyKrOrchLouC4ScoYxXeXlC5VIX
+O7oX9zJ44Cn0IzUGi9dw3fI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE7wsor8QWN9c39C5Miqzq3IS6LguE
+nKGMV3l5QuVSFzu6F/cyeOAp9CM1BovXcN3y
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C7:KAS-ECC-CDH_P-192_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEELtXAgKRFBmB+DO0dJ5WEQNLMI6E
+AR0h4crNa3vRftjdtQtq7gZUw18tDt3Bz/z2
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C7
+PeerKey=KAS-ECC-CDH_P-192_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=67cba2cbb69ee78bf1abafb0e6fbe33fa2094c128d59652d
+
+PrivateKey=KAS-ECC-CDH_P-192_C8
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBjzVXxdcLTHlUlgwzVo
+d2rb6OQ2GaviaxOhNAMyAATXARLF8PCEQ4ZJSsGtmdziIUE0F26/ua/TwYegOFEK
+sx1Fnit68aOA3XV2rwYmdUg=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE1wESxfDwhEOGSUrBrZnc4iFBNBdu
+v7mv08GHoDhRCrMdRZ4revGjgN11dq8GJnVI
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C8:KAS-ECC-CDH_P-192_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEUZL85Bhad1jqG8VuDk9Oiy3OMjSN
+Dc7RIJiZgb6q8ABtiKlueXGi+jozukYEf8e6
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C8
+PeerKey=KAS-ECC-CDH_P-192_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=cf99a2770a386ca0137d1eca0a226e484297ac3c513f3631
+
+PrivateKey=KAS-ECC-CDH_P-192_C9
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBhYbPuhxugXZu1Sgo8X
+exvhTrvFuDNIwxGhNAMyAARYs8Y+Vr7J1pa/mojfKHNzg5H3Y2iqK0lXdnc7Jh+v
+e6L9xP5DuSwLHHov0FSkNlA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEWLPGPla+ydaWv5qI3yhzc4OR92No
+qitJV3Z3OyYfr3ui/cT+Q7ksCxx6L9BUpDZQ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C9:KAS-ECC-CDH_P-192_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEJtAZ2+J56tAe7RQ6kWAa2ibi9CIl
+scYrbKZT8IJy4DhvyUIfvVgAk9euYwG8qUR2
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C9
+PeerKey=KAS-ECC-CDH_P-192_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=576331e2b4fb38a112810e1529834de8307fb0a0d2756877
+
+PrivateKey=KAS-ECC-CDH_P-192_C10
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBjK2BAGA6T2W+CNj8ih
+t+iExf9l3rPJbZmhNAMyAAS3/MD1LHpBHtvtOeEL8Ctq4PJmFMazJaJHSDsm62d3
+beK5OrcRnVRHVzc549Vecvs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEt/zA9Sx6QR7b7TnhC/ArauDyZhTG
+syWiR0g7Jutnd23iuTq3EZ1UR1c3OePVXnL7
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C10:KAS-ECC-CDH_P-192_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEU5vED+IKD7JniItkewPqr27CDAKh
+4fjIaQleW7e01EwyeKfua+yjl8RSRtqaNMi+
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C10
+PeerKey=KAS-ECC-CDH_P-192_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=902f4501916a0dd945554c3a37b3d780d375a6da713197c4
+
+PrivateKey=KAS-ECC-CDH_P-192_C11
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBge3YecxceWGcrmxzpp
+G9WgOVwO87NW/NKhNAMyAARs5q2ywwgI9ZAEjDPf+tRSTr96X9ObdHtJZr0vPQBW
+m01MBAn716LbdS9tCbyowl8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEbOatssMICPWQBIwz3/rUUk6/el/T
+m3R7SWa9Lz0AVptNTAQJ+9ei23UvbQm8qMJf
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C11:KAS-ECC-CDH_P-192_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEXTQ925Yxj7R5TRD2xXP5n+5dDVe5
+liUPmfvfnZfdiK1BAjXaw25bks4oJLjlh6gs
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C11
+PeerKey=KAS-ECC-CDH_P-192_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=46e4de335054d429863218ae33636fc9b89c628b64b506c7
+
+PrivateKey=KAS-ECC-CDH_P-192_C12
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBhGDkUic/4YJ2Ahh607
+6+5ly4RCO7T0dTehNAMyAATRvTo++r9HZ/5jgL3w2/SdUtTPDLuJQEzBUMK0yLOq
+Nfdl+Efk9/j9hwTSQaGB7pk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE0b06Pvq/R2f+Y4C98Nv0nVLUzwy7
+iUBMwVDCtMizqjX3ZfhH5Pf4/YcE0kGhge6Z
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C12:KAS-ECC-CDH_P-192_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEjT25vc4Tf/v7iROIw332wMvJCqXl
+N2IgE10wtctmDu+HZP/HRPFcG11twGukQW03
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C12
+PeerKey=KAS-ECC-CDH_P-192_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1bfe9e5a20ac7a38d8f605b425bb9030be31ef97c101c76c
+
+PrivateKey=KAS-ECC-CDH_P-192_C13
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBi5cDZQCEVvh1jsxaOz
+PPOuao1WgQelIWehNAMyAATBuGEMjGP41KvaCTuaEaVmBEv2XG+qiZmlvEs8oJU4
+Lpc4rulf6UebF4ebOtUpVVk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEwbhhDIxj+NSr2gk7mhGlZgRL9lxv
+qomZpbxLPKCVOC6XOK7pX+lHmxeHmzrVKVVZ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C13:KAS-ECC-CDH_P-192_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEngppSVGcf1vmjAQzxf3xMGSqE/sp
+SD3D4ci6Y+H0cdsjGF9Q2chx7eohJVs6Y7S3
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C13
+PeerKey=KAS-ECC-CDH_P-192_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0e8c493a4adc445dc9288a3b9b272599224054592d7265b3
+
+PrivateKey=KAS-ECC-CDH_P-192_C14
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBhZwVuKJGTkHf5Dccf3
+2t9HCuQlVE+BE72hNAMyAAQf53b3NWe2rAsNZ2QWTebFvnUbqNH/RV5MFgvzivsr
+cfaEJhZkEVzodFU+iwWUMtI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEH+d29zVntqwLDWdkFk3mxb51G6jR
+/0VeTBYL84r7K3H2hCYWZBFc6HRVPosFlDLS
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C14:KAS-ECC-CDH_P-192_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEvgiCOJAumTmz0FTu64SS2vS9zwmi
+q3fxWNZ0mjqSPcgEQPJmH9NbZRYX5lKUtGN1
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C14
+PeerKey=KAS-ECC-CDH_P-192_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0f1991086b455ded6a1c4146f7bf59fe9b495de566ebc6bf
+
+PrivateKey=KAS-ECC-CDH_P-192_C15
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBim6biFxmuVnR/CcI1Z
+G20yKOSeuY9ybWGhNAMyAARjK7dlHb9J3endEl0T+yNOBmF3I77tPRv0rVIJY4SI
+OXxfRPmU3XR5gH559Ih9LnE=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEYyu3ZR2/Sd3p3RJdE/sjTgZhdyO+
+7T0b9K1SCWOEiDl8X0T5lN10eYB+efSIfS5x
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C15:KAS-ECC-CDH_P-192_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEv1rgUCXhvmF+Zm2HpBaDY4c9V2Gz
+drUD4ebjizcra+4P9bNQLYNzXjssJoJeTw/M
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C15
+PeerKey=KAS-ECC-CDH_P-192_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=b30f2127c34df35aaa91dbf0bbe15798e799a03ed11698c1
+
+PrivateKey=KAS-ECC-CDH_P-192_C16
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBi9t1QJb/v72LDzywRs
+y3yhScTnGSBno+6hNAMyAATZwJjUIddB9vqrEW8+RzHSjFVY4Z/hEqE41NxIzNsd
+PtjTH9BnhKT4emiuwcvVsI8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE2cCY1CHXQfb6qxFvPkcx0oxVWOGf
+4RKhONTcSMzbHT7Y0x/QZ4Sk+HporsHL1bCP
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C16:KAS-ECC-CDH_P-192_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEbMT+7YTHqw0JAF1mDtNN5pValGHE
+E40RMSJfM4ZO1I2gb6RakTtGz0JVd0LjUIXm
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C16
+PeerKey=KAS-ECC-CDH_P-192_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=64a5c246599d3e8177a2402a1110eb81e6c456ab4edb5127
+
+PrivateKey=KAS-ECC-CDH_P-192_C17
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBjVvPJTTa/D2Zlkx71j
+q3vRWZn+Vt2WnEKhNAMyAAT9odXSjW/g55Cdaouvp4JNtVcquS/+feYTSil8HZyL
+urJJq6zZUe0R5amfkueZFXI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE/aHV0o1v4OeQnWqLr6eCTbVXKrkv
+/n3mE0opfB2ci7qySaus2VHtEeWpn5LnmRVy
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C17:KAS-ECC-CDH_P-192_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAENhVzFb7nr+3e1YxOi6FNNCHEAeUR
+NbzJN8KXynA/d8UrsGLYzpcduECXugx1OkGP
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C17
+PeerKey=KAS-ECC-CDH_P-192_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=017b8ca53c82fab163da2ab783966a39e061b32c8cfa334d
+
+PrivateKey=KAS-ECC-CDH_P-192_C18
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBhD1LnfEFO+W0JoEEwC
+JE07+VlLAQtGqLKhNAMyAATDAgtwkUY9eI8fHXb3z+7ILs2zt9mcNFyadxDVF5WR
+2PPfCqEiMBdorn237uLX9YM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEwwILcJFGPXiPHx1298/uyC7Ns7fZ
+nDRcmncQ1ReVkdjz3wqhIjAXaK59t+7i1/WD
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C18:KAS-ECC-CDH_P-192_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEmEZNR/Alb4KS4CfoySWC6nfPkFH1
+zo5dRJVS73V4vpYjb+XtnQZDwLtsWpE0sBCN
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C18
+PeerKey=KAS-ECC-CDH_P-192_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=340ef3db3dbebdd91c62c3d4e1a3da2c7c52a3338b865259
+
+PrivateKey=KAS-ECC-CDH_P-192_C19
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBiUysLCynFHRkAWcNlO
+2/P2d4Z7WgO+562hNAMyAASxhVSi50PvCqLwQJh8TEUQBOCW3z2A3a5uPixhj4lu
+NrpiAHdoS3CgX/t5v15sdkA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEsYVUoudD7wqi8ECYfExFEATglt89
+gN2ubj4sYY+Jbja6YgB3aEtwoF/7eb9ebHZA
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C19:KAS-ECC-CDH_P-192_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEVj62bDNM9vEjvwTHgDtIoxECFCN+
+mDv1DzURBIGRme8HyaYFHSB1jzr3kCfqZqU/
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C19
+PeerKey=KAS-ECC-CDH_P-192_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=2162144921df5103d0e6a650fb13fd246f4738d0896ce92f
+
+PrivateKey=KAS-ECC-CDH_P-192_C20
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBgqOp4zyMwxB6n5Jlw7
+3qEgZXDob5KscBShNAMyAASnuji+G8Zp3SPM/O4GRbHw24z5Qt6vrra4LbedgM0O
+N/KNQWOtw4ne6Px3l7XJgxs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEp7o4vhvGad0jzPzuBkWx8NuM+ULe
+r662uC23nYDNDjfyjUFjrcOJ3uj8d5e1yYMb
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C20:KAS-ECC-CDH_P-192_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEhoKMSskrVQdhiux4c6HU/GVDxb4z
+zzB4siynJDdUXhDW1PBSQi64mLc3pLhUPuVQ
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C20
+PeerKey=KAS-ECC-CDH_P-192_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=4c69e7feed4b11159adfc16a6047a92572ea44e0740b23af
+
+PrivateKey=KAS-ECC-CDH_P-192_C21
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBhKa3ipismPqOmajs4I
+7AJREl+Fxv0OKJuhNAMyAATnadu81c4tg1FLdo09LVqgvNj2avFfVQAvxtCwOeDy
+j3T77/6eiD1N1yKW5OlcrnE=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE52nbvNXOLYNRS3aNPS1aoLzY9mrx
+X1UAL8bQsDng8o90++/+nog9TdciluTpXK5x
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C21:KAS-ECC-CDH_P-192_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEZwChAkN3galYHaK8Jc7Vq/QZ2pHT
+yAPfcTlsnPCLzZGFTj5uQtjGV84PJ6t3qdxL
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C21
+PeerKey=KAS-ECC-CDH_P-192_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=46072acefd67bff50de355ca7a31fa6be59f26e467587259
+
+PrivateKey=KAS-ECC-CDH_P-192_C22
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBjFpkkdeIRNZhfvM75r
+i9VNoiFFCIXVlQ+hNAMyAATbGyT3RmvBVOnX0sPKUtz+C/yVY8X9tvMcdPu/W9mZ
+IfGpp0T44c93C9anancrMAM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE2xsk90ZrwVTp19LDylLc/gv8lWPF
+/bbzHHT7v1vZmSHxqadE+OHPdwvWp2p3KzAD
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C22:KAS-ECC-CDH_P-192_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEqC81TPl77l0i3GwHnykC6tRNlqj2
+FPF4plSpqooaCALyzg7ooPTr6W3uGzdGSx/y
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C22
+PeerKey=KAS-ECC-CDH_P-192_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=ec5580eabca9f3389d2b427ddf6e49e26d629afd03fa766e
+
+PrivateKey=KAS-ECC-CDH_P-192_C23
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBgronA8XiP2RjxbiNw3
+KS+r0zmbXh+2fAWhNAMyAAR1QxSJBs75s3pxp8CDY83Tu6UBQtZSQaqLOmlz3o3C
+ceJ8Hq0eli/arjcQxyTarDg=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEdUMUiQbO+bN6cafAg2PN07ulAULW
+UkGqizppc96NwnHifB6tHpYv2q43EMck2qw4
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C23:KAS-ECC-CDH_P-192_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEPOwhsoZooSos944ajlXQ7+BlFS//
+w0cYEClVe+uk/xmSvSHCPLSCX22ucOMxj9HK
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C23
+PeerKey=KAS-ECC-CDH_P-192_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=7f3929dd3cbf7673bc30d859d90b880307475f800660ea32
+
+PrivateKey=KAS-ECC-CDH_P-192_C24
+-----BEGIN PRIVATE KEY-----
+MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBiDYRjGJI+ILpFHl292
+SCbBoodVphApd9WhNAMyAAT800WpdscgyqqX3maXImglYV4Sh6nv9n5Y6kLtvur8
+qf9Ez9fymr0svedibXnkIsk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-192_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE/NNFqXbHIMqql95mlyJoJWFeEoep
+7/Z+WOpC7b7q/Kn/RM/X8pq9LL3nYm155CLJ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-192_C24:KAS-ECC-CDH_P-192_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-192_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEcIJkRxW4tzH4IotRGOcnDTTRgfNh
+oiH8RkZJ1siMqJYUSIocx7hEK7Qvn7MCCj12
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-192_C24
+PeerKey=KAS-ECC-CDH_P-192_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=72e88f3ea67d46d46dbf83926e7e2a6b85b54536741e6d2c
+
+PrivateKey=KAS-ECC-CDH_P-224_C0
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBByDRqYPxvKTyloNKvaLpx0d
+04nl5Ag3lC3z5Dy9oTwDOgAEjeLiat9yxYLWVo72OMT9WbGNoXG99QHx2SngSEpo
+ocKw+yKTDRIFVcHs5Q6pjeqEB/cb4276wN4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjeLiat9yxYLWVo72OMT9WbGNoXG99QHx
+2SngSEpoocKw+yKTDRIFVcHs5Q6pjeqEB/cb4276wN4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C0:KAS-ECC-CDH_P-224_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErzPNBim8fpljIKP0A2j3TehwT6N7j6tp
+q6rigIggksy7p5MPQZqKT5uxaXi7w4OHKZklWaby4tc=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C0
+PeerKey=KAS-ECC-CDH_P-224_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=7d96f9a3bd3c05cf5cc37feb8b9d5209d5c2597464dec3e9983743e8
+
+PrivateKey=KAS-ECC-CDH_P-224_C1
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBwEPLIW9Lcs33Yp1jcgpUru
+DJnrMtdEd9rAwvc9oTwDOgAEL5D1yOrJx97Nu5e2wvcVq3JeT+QP5tdG779OG2aJ
+c1FFT5J6MJsmnFptMTOL5MGaWs/DLPZW9Fw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEL5D1yOrJx97Nu5e2wvcVq3JeT+QP5tdG
+779OG2aJc1FFT5J6MJsmnFptMTOL5MGaWs/DLPZW9Fw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C1:KAS-ECC-CDH_P-224_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEE7/NT46UQjk8q4+0a58FZsImsis3B2l2
+8GF6Ru6yQnUpsojGPC+JY8Hkc98vymyqkNUuL421bdQ=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C1
+PeerKey=KAS-ECC-CDH_P-224_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=ee93ce06b89ff72009e858c68eb708e7bc79ee0300f73bed69bbca09
+
+PrivateKey=KAS-ECC-CDH_P-224_C2
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBxa0N1turtPPC6l/jLlYbLK
+VQgUht8sfBXJYisIoTwDOgAEAFvKRdeT5/6ZqENwTtg4MVqxSl9id1B+m8N1MUPp
+1CHhSGrliTv9I8IQ5cFA18axraWdhCyamN4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAFvKRdeT5/6ZqENwTtg4MVqxSl9id1B+
+m8N1MUPp1CHhSGrliTv9I8IQ5cFA18axraWdhCyamN4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C2:KAS-ECC-CDH_P-224_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEdW3YBrnZw02JlpHstFt3GvRo7ABEhqD9
+0oNBHk0Cwsphe7LF2WE/Jd1yQT0in9KQFROqKVBO7vs=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C2
+PeerKey=KAS-ECC-CDH_P-224_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=3fcc01e34d4449da2a974b23fc36f9566754259d39149790cfa1ebd3
+
+PrivateKey=KAS-ECC-CDH_P-224_C3
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBwKpv9Vpdgg78tOfRC4Reo8
+n5vF3/hhBtuFMY4ioTwDOgAEL5Z1QTHgloGYqnj76MIB3F81gceS3khzQNMkSGHo
+pc15YVIDttielJb54jb+O2vocx50PWFVGcY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEL5Z1QTHgloGYqnj76MIB3F81gceS3khz
+QNMkSGHopc15YVIDttielJb54jb+O2vocx50PWFVGcY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C3:KAS-ECC-CDH_P-224_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAED1N78cESLFVlbSXoqoQX4LRLFSauBSMU
+T5khxPebJtMOSRp3NpbMLHm08FlrxbnuuvOU0WL7hoQ=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C3
+PeerKey=KAS-ECC-CDH_P-224_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=49129628b23afcef48139a3f6f59ff5e9811aa746aa4ff33c24bb940
+
+PrivateKey=KAS-ECC-CDH_P-224_C4
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBzv5ubiWv+vVMmNACq7xjKN
+oVlAWht1LjLcI5UKoTwDOgAENV6WKSC94ENpX2v/tLNVxj2m9d5mXtRvLsgX4nSO
+CVNo9i4dNk7dRhcZeTtAStvarLyt2Iki/zc=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAENV6WKSC94ENpX2v/tLNVxj2m9d5mXtRv
+LsgX4nSOCVNo9i4dNk7dRhcZeTtAStvarLyt2Iki/zc=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C4:KAS-ECC-CDH_P-224_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEKzYx0rBhebMXShAPf1cTHu6olHvgeGw9
+xksiOYPeKa49rTGtwCNsbefxRWHKLqCDxScMeKLmy8A=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C4
+PeerKey=KAS-ECC-CDH_P-224_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=fcdc69a40501d308a6839653a8f04309ec00233949522902ffa5eac6
+
+PrivateKey=KAS-ECC-CDH_P-224_C5
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBxhyykyUkAB5enu7W332ciT
+XuMyICnt16qKy/1RoTwDOgAE1Q5K2r/Zidfbx89AUlRsx8RHqXYwQ2mXrUuVNlvq
+UDRzxervlVLULECx8vfKKSczslW5u+GxIzc=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE1Q5K2r/Zidfbx89AUlRsx8RHqXYwQ2mX
+rUuVNlvqUDRzxervlVLULECx8vfKKSczslW5u+GxIzc=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C5:KAS-ECC-CDH_P-224_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAERRFAPeKQWfaaR1xaal9sq+1dnwFENqjL
+cKAjOH0tG2KqBG35NA+cN6CHoGsyz38IoiP5koEqgos=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C5
+PeerKey=KAS-ECC-CDH_P-224_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=827e9025cb62e0e837c596063f3b9b5a0f7afd8d8783200086d61ec1
+
+PrivateKey=KAS-ECC-CDH_P-224_C6
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBByMes40cXH5Le+Y2EVHX8gu
+HRSW2oHuWPUFuYX6oTwDOgAEsajcrImsonmTILRR3xx/9Nl1Z6u2gUHA2V/CqjUk
+lQkCsVEL3Jh9hgr8J62HHOrqZpNavTwKmag=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsajcrImsonmTILRR3xx/9Nl1Z6u2gUHA
+2V/CqjUklQkCsVEL3Jh9hgr8J62HHOrqZpNavTwKmag=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C6:KAS-ECC-CDH_P-224_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMUoLJt0xwkiEXXzBe2HK1GCCWb7YWljR
+8f/TeGbks1A1LhGe7K2jgpB/Nhn9dI6nOuSJnf1JYwI=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C6
+PeerKey=KAS-ECC-CDH_P-224_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=335ba51228d94acbed851ca7821c801d5cb1c7975d7aa90a7159f8fa
+
+PrivateKey=KAS-ECC-CDH_P-224_C7
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBw4L+ubm6EPGJ2Z5xqJzf5E
+y1VM7BOiEoQJd/tooTwDOgAEq7bx43c/+PxzrqKgsQeAnOcK3O/tbkH8XLQwRalj
+iXrpBsEKBV7q25f/3W90jT5WIeX/8wTki6c=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEq7bx43c/+PxzrqKgsQeAnOcK3O/tbkH8
+XLQwRaljiXrpBsEKBV7q25f/3W90jT5WIeX/8wTki6c=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C7:KAS-ECC-CDH_P-224_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEq+aEO+7C/Z5ftkcw0L5NFlQ4zpIu113Y
+C0YD5Wr+hnOpbEupkArYWZXmMeQ2xsyIosK0e3xIhrg=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C7
+PeerKey=KAS-ECC-CDH_P-224_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=8c2e627594206b34f7356d3426eb3d79f518ef843fbe94014cceace3
+
+PrivateKey=KAS-ECC-CDH_P-224_C8
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBzg1iA1EB70h8SFxg+0UA7r
+5qMuxk2+l9vgIyxGoTwDOgAEiFN3NemyPj4OB28TWoLTP5v/tGXzq86DIqYqYrTI
+wSNnMZeHXAvRTtCXYG0zD7orkgDvZaRHZNM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEiFN3NemyPj4OB28TWoLTP5v/tGXzq86D
+IqYqYrTIwSNnMZeHXAvRTtCXYG0zD7orkgDvZaRHZNM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C8:KAS-ECC-CDH_P-224_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEE8+dbSyaroJ0wn1Eav0MiI/91SrimaNZ
+hNT1J9y+51tRV1H47irjVeiv1d4hxiqTmmUHtTjLxK8=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C8
+PeerKey=KAS-ECC-CDH_P-224_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=632abb662728dbc994508873d5c527ca5ef923c0d31fa6c47ef4c825
+
+PrivateKey=KAS-ECC-CDH_P-224_C9
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBy5at5bc7pyqotuTXTXv5xY
+6WL/eOtUIofHtEuioTwDOgAEN2gpJqVPcKTBdI9U1Q1bABOKBV+STyxl5bC75Flq
+/vzdZA0pY1AVuJvd3R+MJyNobTMuegbKh5k=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEN2gpJqVPcKTBdI9U1Q1bABOKBV+STyxl
+5bC75Flq/vzdZA0pY1AVuJvd3R+MJyNobTMuegbKh5k=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C9:KAS-ECC-CDH_P-224_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAElltjfA37wM+VQDVobXD37DCSnmZOUh26
+oigGWYKlj/YbyQAZu8u1h104Y9sLwqH6NLCtTeGoP5k=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C9
+PeerKey=KAS-ECC-CDH_P-224_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=34641141aab05ef58bd376d609345901fb8f63477c6be9097f037f1f
+
+PrivateKey=KAS-ECC-CDH_P-224_C10
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBykDX4SBJxx5lIsf/I4QiQG
+HDpFcFizEFV2VbhUoTwDOgAEOZgBJDv+DC2psKU8jKV/Lu6HqqlKjk1eAp9CyqpJ
+5tS0fO56XEq3HVpn2oTgubQlzj5w2mjIiec=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEOZgBJDv+DC2psKU8jKV/Lu6HqqlKjk1e
+Ap9CyqpJ5tS0fO56XEq3HVpn2oTgubQlzj5w2mjIiec=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C10:KAS-ECC-CDH_P-224_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEc8xkU3LKLnFjfNqUPYFI8zgqtt0PLhpJ
+2pThNN9cNVwj5uIy68O+4qsYc+4Ng+M4L45v5hP2NDw=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C10
+PeerKey=KAS-ECC-CDH_P-224_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=4f74ac8507501a32bfc5a78d8271c200e835966e187e8d00011a8c75
+
+PrivateKey=KAS-ECC-CDH_P-224_C11
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBytJRm8ck1ITgKmnwUUm7BH
+cUvw9ZhvrC4iLNlGoTwDOgAE35weDvFeU7n2JuK+HL6JNjnAbz4EOe6V19Sx43pS
+pzhq3aJD79+JQQhchOMSOcq5K4AXM2dIll4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE35weDvFeU7n2JuK+HL6JNjnAbz4EOe6V
+19Sx43pSpzhq3aJD79+JQQhchOMSOcq5K4AXM2dIll4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C11:KAS-ECC-CDH_P-224_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEVGV4IWJQNU5EniFUbdEc0cUXQjZzmsrZ
+zg9FEtKiL81m0avtx2dmgyfFy5xZkEMnYjnPPIUWryQ=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C11
+PeerKey=KAS-ECC-CDH_P-224_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=ad09c9ae4d2324ea81bb555b200d3c003e22a6870ee03b52df49e4de
+
+PrivateKey=KAS-ECC-CDH_P-224_C12
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBw9MSqbnY7QkUCQC7rB4JVS
+fryePGSTvPNmbjopoTwDOgAEtKAZjciBDohEJbdQkosMlgwx96mWY0ALAaF534Er
+YBv8BzgkLG+G+DDyes1jLKYYoLUoDJ1Xafc=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtKAZjciBDohEJbdQkosMlgwx96mWY0AL
+AaF534ErYBv8BzgkLG+G+DDyes1jLKYYoLUoDJ1Xafc=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C12:KAS-ECC-CDH_P-224_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEHUax3DooEjy1E0bme67FZASGhnj699Do
+sq+iKg7J5l7JfiGDc+f8EVwidNW4KaYNk/ceAdWBNsM=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C12
+PeerKey=KAS-ECC-CDH_P-224_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=ef029c28c68064b8abd2965a38c404fb5e944ace57e8638daba9d3cd
+
+PrivateKey=KAS-ECC-CDH_P-224_C13
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBByM4IItwkwVOZV1WsNQc371
+BmQcfXUrT5MAxhLtoTwDOgAEAN/H7BN2kM1tEv2y/QuMUxRYIQh2nCtyL/s5WF7v
+PaS6RYEnNGu2QCOGi923VYouz8gTZF9M6f4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAN/H7BN2kM1tEv2y/QuMUxRYIQh2nCty
+L/s5WF7vPaS6RYEnNGu2QCOGi923VYouz8gTZF9M6f4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C13:KAS-ECC-CDH_P-224_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJm0DjMek/iH2yXYxjoJ7grtbj3RDpVKY
+E2UG4N8SPZinogu985Q98uNWNCL4wM901TqqvdfJc7o=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C13
+PeerKey=KAS-ECC-CDH_P-224_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=f83c16661dfcbad021cc3b5a5af51d9a18db4653866b3ff90787ce3e
+
+PrivateKey=KAS-ECC-CDH_P-224_C14
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBwP+bSFMlq3fynnvDef7XS/
+rIWUgtoN7nUowZ2yoTwDOgAEfmA+aXbbg8NgEVCPppXRtRUkni5UtI/Lz7kCRwF5
+pgDOhq38qbG5MfpRc9YY2gnoQYA9GbAmQoY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEfmA+aXbbg8NgEVCPppXRtRUkni5UtI/L
+z7kCRwF5pgDOhq38qbG5MfpRc9YY2gnoQYA9GbAmQoY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C14:KAS-ECC-CDH_P-224_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6woJ96HCNqYfWVgJ7FZw79kuRZjV5hPg
+ks39ylB4euLy8VuIvBD3tfCu4UGDc/FhU669H7pUKI0=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C14
+PeerKey=KAS-ECC-CDH_P-224_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=f51258c63f232e55a66aa25ebd597b2018d1052c02eeb63866758005
+
+PrivateKey=KAS-ECC-CDH_P-224_C15
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBwZz1/2MGRn8ouf4GdaQ8BY
+JVLIwS5Zznw48pKxoTwDOgAE/CDpBuYJwRLPwuD+pjA4gsXblOh+AiNzqywIKq7N
+8dqnF4K8Wia7vY1+inZJDiarwX3/x3S9c0E=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE/CDpBuYJwRLPwuD+pjA4gsXblOh+AiNz
+qywIKq7N8dqnF4K8Wia7vY1+inZJDiarwX3/x3S9c0E=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C15:KAS-ECC-CDH_P-224_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEay9rGKWH9WL/xhvZsARzIihphqePH9E5
+uE98JHCWkI5GFSZr5ZpTzWVVFQVv+SNwpicaXTgj1wQ=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C15
+PeerKey=KAS-ECC-CDH_P-224_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=7fdc969a186ff18429f2a276dac43beea21182d82ce2e5a0876552b1
+
+PrivateKey=KAS-ECC-CDH_P-224_C16
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBByQoVNo41MsCx5R5V0TlEfC
+yJvBYHGdaXKR6nwUoTwDOgAExoN9UG6XbafbOtEmfDWd/y6m+wt/f453AkxZ6Wfr
+SR0vyKUwxGUl0qiy18HfX7oa50CkZJxoPuY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExoN9UG6XbafbOtEmfDWd/y6m+wt/f453
+AkxZ6WfrSR0vyKUwxGUl0qiy18HfX7oa50CkZJxoPuY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C16:KAS-ECC-CDH_P-224_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMoEBuoJqzXX/nzTVV0zg28kvcJutjXoz
+xHlAwd858eqISIxV1VOBYIeLnO0YqIfqJh3XEtFAJP8=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C16
+PeerKey=KAS-ECC-CDH_P-224_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=3d60ab6db2b3ffe2d29ccff46d056e54230cf34982e241556ed2920c
+
+PrivateKey=KAS-ECC-CDH_P-224_C17
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBByOCDjgXhchSRBn4cq8LoBR
+spDiYW7sQntxIYl9oTwDOgAE6RUPdwB1YmAZ4Y+VRztx5oKAQXkdPwjT+u6qK0df
+cHNequUjCKO3Y9yI7+GKtZDrr6A19uCLABw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6RUPdwB1YmAZ4Y+VRztx5oKAQXkdPwjT
++u6qK0dfcHNequUjCKO3Y9yI7+GKtZDrr6A19uCLABw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C17:KAS-ECC-CDH_P-224_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAIHjQnCHHi672UGD9he0rhXwQW3WNP5u
+k0zzwDoenzinuQtzF9Jrn2MRBjq1iyaM9Imy5QOG1dY=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C17
+PeerKey=KAS-ECC-CDH_P-224_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=9116d72786f4db5df7a8b43078c6ab9160d423513d35ea5e2559306d
+
+PrivateKey=KAS-ECC-CDH_P-224_C18
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBw4EG6T8Wo4Gtsdcs7j2mau
+RirUu/6p7N810IFOoTwDOgAEe+bEyReCmrZX3XnoY31679L4Hw3nZU2VfpdljUMN
+ItnoQ4MQ9h4NQ/Jfo+NFhfQyuq0n2zAhvw0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEe+bEyReCmrZX3XnoY31679L4Hw3nZU2V
+fpdljUMNItnoQ4MQ9h4NQ/Jfo+NFhfQyuq0n2zAhvw0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C18:KAS-ECC-CDH_P-224_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJiNjL98L2FaAWmmqGG1BM+9ZBOH2Valy
+1mzOByzvlyjdBvuLUBUPUptpUHbUUHmDkSWFyJvQaC4=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C18
+PeerKey=KAS-ECC-CDH_P-224_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=207c53dcefac789aaa0276d9200b3a940ce5f2296f4cb2e81a185d3d
+
+PrivateKey=KAS-ECC-CDH_P-224_C19
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBzl0XGEMc9Q9svRvIAZ+hZ2
+LfoSyYnlmZl3+06ioTwDOgAELqSWbn+S7X9cxh/eeSBF9jtzHW59DeJXfy2OzhxK
+ex7eb4ORYikt9CS+eOgXb7b5QqPAI5FwDzE=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAELqSWbn+S7X9cxh/eeSBF9jtzHW59DeJX
+fy2OzhxKex7eb4ORYikt9CS+eOgXb7b5QqPAI5FwDzE=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C19:KAS-ECC-CDH_P-224_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjuTR3MMd7kv2/iHKilh3IdkQrPsSLBbC
+p3qBUk6/Mj//BOtHcGmgrGizRfaxrhNO/DGUDlE8uZ8=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C19
+PeerKey=KAS-ECC-CDH_P-224_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=10e467da34f48ad7072005bccd6da1b2ba3f71eafa1c393842f91d74
+
+PrivateKey=KAS-ECC-CDH_P-224_C20
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBw9Y1aRtiqaknxjOVHJNpyI
+Yr0hGdMJcMJkRyfWoTwDOgAEQ4u7mAUXr7IL4dZ046wrMc7wepsj+49uOODWwAvl
+8cR9WNIbbtKEI7MvWpR1DaR+3O8z6nmUKv0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEQ4u7mAUXr7IL4dZ046wrMc7wepsj+49u
+OODWwAvl8cR9WNIbbtKEI7MvWpR1DaR+3O8z6nmUKv0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C20:KAS-ECC-CDH_P-224_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEl9y+bSgzWIKm0ZPMVKEGPdB3XcMoVlMA
+u5nmkdrRHdXs6M/Z+XyaUm5KFQbmNVlp7oeCb8OLzSQ=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C20
+PeerKey=KAS-ECC-CDH_P-224_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=82fd2f9c60c4f999ac00bbe64bfc11da8ff8cda2e499fced65230bb1
+
+PrivateKey=KAS-ECC-CDH_P-224_C21
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBys88hbvcN58C9eo25/D1MJ
+Wp5wRqKGhahlm/eYoTwDOgAE/3URIVxx15a9ZG6EdL5EFrkWhM4NJp729CIBO7e/
+Xnm1qTk7uepCwL2y08LcgG4acwaqWOT9vqU=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE/3URIVxx15a9ZG6EdL5EFrkWhM4NJp72
+9CIBO7e/Xnm1qTk7uepCwL2y08LcgG4acwaqWOT9vqU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C21:KAS-ECC-CDH_P-224_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEzpEm3VOXLeod4dEe/vkA3jS2YYWcRkjF
+wOU09+ETtvLBZZ0H8nFuZKg8GLvONE3SEh/oUWjq4IU=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C21
+PeerKey=KAS-ECC-CDH_P-224_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=530f7e7fc932613b29c981f261cb036cba3f1df3864e0e1cba2685a2
+
+PrivateKey=KAS-ECC-CDH_P-224_C22
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBzP/WLLAKDjFj+/LDl/rclh
+ghD4a09UpnUocwXwoTwDOgAEBL9NlI9EMNGLTtbJbbr5gfoRpAPtFoh/BnVJgXwT
+JqnO9R951OeDA9YGS0WfYSWErC/fWT19XYQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEBL9NlI9EMNGLTtbJbbr5gfoRpAPtFoh/
+BnVJgXwTJqnO9R951OeDA9YGS0WfYSWErC/fWT19XYQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C22:KAS-ECC-CDH_P-224_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEhEGZZ9bPrUHnWgK22mBal5SaGDqXwwbE
+tG5mpVzJsllxixvIsUT95jOolGFv/VmjptXY6ULHy7c=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C22
+PeerKey=KAS-ECC-CDH_P-224_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=49f6fd0139248ef4df2db05d1319bd5b1489e249827a45a8a5f12427
+
+PrivateKey=KAS-ECC-CDH_P-224_C23
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBByF+QPkOUPRPGiTLnEOgN5S
+y8C48aFBjqTaB5KZoTwDOgAElwpKfgHUGISXzrRpVesbhC2QhYGam5JchFKdPd+i
+UmSA+DPqDtvSBOTjZf7zRyiI/n2WkcPrwJ8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAElwpKfgHUGISXzrRpVesbhC2QhYGam5Jc
+hFKdPd+iUmSA+DPqDtvSBOTjZf7zRyiI/n2WkcPrwJ8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C23:KAS-ECC-CDH_P-224_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEfJysNXaAY8KCf2Cn9ROI8qj0t/jNc2vW
+vDN0dynua4ScYCXVd9vMVfvRcBj07bwu8QWwBNYle80=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C23
+PeerKey=KAS-ECC-CDH_P-224_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=8f7e34e597ae8093b98270a74a8dfcdbed457f42f43df487c5487161
+
+PrivateKey=KAS-ECC-CDH_P-224_C24
+-----BEGIN PRIVATE KEY-----
+MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBzM5kiRo9ASn+4NSpbPvnrE
+cLhelnUpBXz6MaHZoTwDOgAEprKWMtuU2iEl3Bz4DgNwJoeyrMESICL6IXR2WmFy
+Pt1z4Q2u1zd1J48ZWLpW8fydCF68K2TIT+U=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-224_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEprKWMtuU2iEl3Bz4DgNwJoeyrMESICL6
+IXR2WmFyPt1z4Q2u1zd1J48ZWLpW8fydCF68K2TIT+U=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-224_C24:KAS-ECC-CDH_P-224_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-224_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAECFp2Qq2OWbGj6HJqdUevvs/9rB2rflcj
+DGqd9PkcNtiB/puAR6NTBxNVShr0wlxajmVNzc9ony4=
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-224_C24
+PeerKey=KAS-ECC-CDH_P-224_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=71954e2261e8510be1a060733671d2e9d0a2d012eb4e09556d697d2a
+
+PrivateKey=KAS-ECC-CDH_P-256_C0
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgfX3F9x6yndr4DWIU
+Yy7q4D2QWK8fttIu2AuttivBpTShRANCAATq0hhZARnoh2spFG/4nKYXcMTtu/l9
+OM44XtKB2KayMCivYSgf014vpwAlI6zIWkKcsG7mZIMlOJ9Z7fzhQFFB
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6tIYWQEZ6IdrKRRv+JymF3DE7bv5
+fTjOOF7SgdimsjAor2EoH9NeL6cAJSOsyFpCnLBu5mSDJTifWe384UBRQQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C0:KAS-ECC-CDH_P-256_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEcAxI939WWExcxjLKZWQNuRtrrM46
+Tfa0LOfMg4gz0ofbceUJ4/2bBg3bILpcUdzFlI1G+/ZA3+BEF4LKuF+krA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C0
+PeerKey=KAS-ECC-CDH_P-256_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7b
+
+PrivateKey=KAS-ECC-CDH_P-256_C1
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOPZdbc5HZ2BE1Yzl
+E5WC1Wj2S7FgmNF526sHdB3VyvWhRANCAAQRny8EeQJ4KrDJ4npUr/Xrm5ZIKcqZ
+wGsC3bqVsKP20I9StyZmTKw2b8mKx6ASsmgsvZYuWstURnHUG5RFcE0d
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEZ8vBHkCeCqwyeJ6VK/165uWSCnK
+mcBrAt26lbCj9tCPUrcmZkysNm/JisegErJoLL2WLlrLVEZx1BuURXBNHQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C1:KAS-ECC-CDH_P-256_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgJ8EKJxkNIwBUV6wPVznrBqMuUmP
+XKpQGX5Y1DqGp66ynYToERl/Jeuo9RlAkstv9EDibUQhARNyRh9XknHNow==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C1
+PeerKey=KAS-ECC-CDH_P-256_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=057d636096cb80b67a8c038c890e887d1adfa4195e9b3ce241c8a778c59cda67
+
+PrivateKey=KAS-ECC-CDH_P-256_C2
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGsz68bl3Erhab1Sx
+SJhaG9xMm+wL0ljK1LPWA/SfMsihRANCAATZ8recFyhFv9tWC7sBRHyl7MBHCglR
+O2EmkCxrT40QUfgV717DISjTSHg0dkZ4cC5k4WT/cxUYXiOv9frNlte8
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2fK3nBcoRb/bVgu7AUR8pezARwoJ
+UTthJpAsa0+NEFH4Fe9ewyEo00h4NHZGeHAuZOFk/3MVGF4jr/X6zZbXvA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C2:KAS-ECC-CDH_P-256_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEojOcEtSgPDNUbeUzJotK1mfev0WL
+Rk13RDY2RA7n/sPvSKOrJuICILzaLBhRB2g52uiOrpYoaaSXv3PLZvr1Ng==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C2
+PeerKey=KAS-ECC-CDH_P-256_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=2d457b78b4614132477618a5b077965ec90730a8c81a1c75d6d4ec68005d67ec
+
+PrivateKey=KAS-ECC-CDH_P-256_C3
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgIHxDp5v+4D229LlE
+9T0vt2zEnvHJxNNNUbbGXE22ky2hRANCAAQkJ3wz9FBGLcs9SAHVe5ztBRiPFsKO
+2ocyWASM0WB+DcR4l1PisfY7Mv8BTsQs1qafrIHf5tDW/Urzcq4nxG+I
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJCd8M/RQRi3LPUgB1Xuc7QUYjxbC
+jtqHMlgEjNFgfg3EeJdT4rH2OzL/AU7ELNamn6yB3+bQ1v1K83KuJ8RviA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C3:KAS-ECC-CDH_P-256_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3zmJufpVSVcZs89G3M0otRU/eAgZ
+HdUY7/DDz/K3Be1CIpT/RgA0Kdc5ozIGyHUlUsi6VKJw3vwG4iHg/q9qxA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C3
+PeerKey=KAS-ECC-CDH_P-256_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=96441259534b80f6aee3d287a6bb17b5094dd4277d9e294f8fe73e48bf2a0024
+
+PrivateKey=KAS-ECC-CDH_P-256_C4
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgWRN+OBUjULGVyXGN
+OWc9UZg4BVrZCN1HVxUv2CVcCb+hRANCAASoxf3Oi2LFraWY8UGts7Js8lTCgLKF
+emPSrXg6cxFfa4BuGq/sSvgKDXhrPeRTdbUXp+W1H/ssNWU3yebvIn1K
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqMX9zotixa2lmPFBrbOybPJUwoCy
+hXpj0q14OnMRX2uAbhqv7Er4Cg14az3kU3W1F6fltR/7LDVlN8nm7yJ9Sg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C4:KAS-ECC-CDH_P-256_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQRktKBPnlWHmodb1PIvBpDOhmcg1
+4UGwWnSpew+uuSIa+YzEXpin4EGwHPNfRit1YigTUcjr8/+gLjOgcioTKA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C4
+PeerKey=KAS-ECC-CDH_P-256_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=19d44c8d63e8e8dd12c22a87b8cd4ece27acdde04dbf47f7f27537a6999a8e62
+
+PrivateKey=KAS-ECC-CDH_P-256_C5
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9fjgF0YQpmEneXm1
+jOXJD+5smzuzRqkKcZYlXkCxMu+hRANCAAR7hh3NKESlqDY/a4741JNkD1WHkhcY
+nYAyaq2UgN/BScRnW0XuswZAX2wzw4vGnrK97Jt1rVr0cGqrhFQ7nMY6
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEe4YdzShEpag2P2uO+NSTZA9Vh5IX
+GJ2AMmqtlIDfwUnEZ1tF7rMGQF9sM8OLxp6yveybda1a9HBqq4RUO5zGOg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C5:KAS-ECC-CDH_P-256_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEM+ggkqDx+zj1ZJ1YZ/uii1AxcrcD
+VXS/jltxAKMFJ5Lyz2tgHgoFlF4zVVC/ZI14L0YYbHcsDyDTzQ1rjKFLLw==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C5
+PeerKey=KAS-ECC-CDH_P-256_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=664e45d5bba4ac931cd65d52017e4be9b19a515f669bea4703542a2c525cd3d3
+
+PrivateKey=KAS-ECC-CDH_P-256_C6
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgO1ia99sDRZwjBotk
+9j8o08PGvCW1v3asBfNUgoiLUZChRANCAASfs44tWOobr3Yi6WcgEByuPN5LpsHp
++ibZsd4ImRAoY9VWG5AEBu31CALdfXPok5X4rtcvug4dG2H+HSIwImDw
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEn7OOLVjqG692IulnIBAcrjzeS6bB
+6fom2bHeCJkQKGPVVhuQBAbt9QgC3X1z6JOV+K7XL7oOHRth/h0iMCJg8A==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C6:KAS-ECC-CDH_P-256_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEap4MP5FuTjFckRR75XFobZBGTov5
+gdNKkLY1O8pu66dA+b6tOcLyvMJgL3W4pz7Hvf/Lzq0VnQF0xsTTxTV/BQ==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C6
+PeerKey=KAS-ECC-CDH_P-256_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=ca342daa50dc09d61be7c196c85e60a80c5cb04931746820be548cdde055679d
+
+PrivateKey=KAS-ECC-CDH_P-256_C7
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg2L+SmiDqdDayRhtU
+GhHIDmHYJsCkydMisx3VTn9YucihRANCAAQg8HYx5KZRKomtSHxOnWMDnlecsNel
+VsueZhzVnB5/pG3pGEaz7uil7AnCqx9B4hvYNiDM3Rvc46t+puAt0nT1
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIPB2MeSmUSqJrUh8Tp1jA55XnLDX
+pVbLnmYc1Zwef6Rt6RhGs+7opewJwqsfQeIb2DYgzN0b3OOrfqbgLdJ09Q==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C7:KAS-ECC-CDH_P-256_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqcCsreVcKnPq0ahvsKlxMiPIJHV5
+HNDiELBGQSziJLv23gr6IOk+B4RnwFPSQZA+2tc0xrQDunWMK1/wTJ1CKQ==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C7
+PeerKey=KAS-ECC-CDH_P-256_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=35aa9b52536a461bfde4e85fc756be928c7de97923f0416c7a3ac8f88b3d4489
+
+PrivateKey=KAS-ECC-CDH_P-256_C8
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgD5iDug7zLudd7Q2L
+2jmlFGop8fJQezvUWNvqCyuwW02hRANCAASrthtCO+XWwm4hxgWDLJFC3B3+Wl//
+KHJnN5Nub79RbXM9JRPvWL6rICCQWG+skb8P7jHoCrM0c6sjotieWPrW
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEq7YbQjvl1sJuIcYFgyyRQtwd/lpf
+/yhyZzeTbm+/UW1zPSUT71i+qyAgkFhvrJG/D+4x6AqzNHOrI6LYnlj61g==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C8:KAS-ECC-CDH_P-256_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElOlPFqmCVf/yuawMlZiqw1SHsyMt
+MjG9k7fbffNvnrnYBJpDV5z6kLgJOpRBbL77+TOG8Vs/bhkLbjRV/t/mmg==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C8
+PeerKey=KAS-ECC-CDH_P-256_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=605c16178a9bc875dcbff54d63fe00df699c03e8a888e9e94dfbab90b25f39b4
+
+PrivateKey=KAS-ECC-CDH_P-256_C9
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgK+7bBLBcaYj2pnUA
+u4E/ryyuDVgMklO2M55KMze7bAihRANCAAQ9Y+Qpy1+olakkcSm/TkjonzXXsR3o
+FY7+s+EGoqhzlQyunkd+9B58jBBkN5u3tVTdy8rnn5gUKB8eUPBAPGHz
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPWPkKctfqJWpJHEpv05I6J8117Ed
+6BWO/rPhBqKoc5UMrp5HfvQefIwQZDebt7VU3cvK55+YFCgfHlDwQDxh8w==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C9:KAS-ECC-CDH_P-256_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4Jm/Kk1VdGC1VEQwu/baEQBNEny1
+1n9kqwfJT831J0/ZxQ2+cNcU7bXiIfTgIGEO62JwUX5ojKZPsOmMfvjBxQ==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C9
+PeerKey=KAS-ECC-CDH_P-256_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=f96e40a1b72840854bb62bc13c40cc2795e373d4e715980b261476835a092e0b
+
+PrivateKey=KAS-ECC-CDH_P-256_C10
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgd8Fdz0RhDkFpa6t1
+iUPv8UCTM+TVoRu+csj2w5Xp+EihRANCAAStXRPD21CN3NOEV+WZFDSiUb7UnPXd
+y1nN7nOGXxOMn2LOwecFiKpP38e5oJ2qZ4CBwE4SCLnWYriiIUv46Boh
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAErV0Tw9tQjdzThFflmRQ0olG+1Jz1
+3ctZze5zhl8TjJ9izsHnBYiqT9/HuaCdqmeAgcBOEgi51mK4oiFL+OgaIQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C10:KAS-ECC-CDH_P-256_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE91pf5WvaNPPBOWKWYm7wEtwH5IJY
+OHeKZFyCSM/wFlgzu98bF3LYBZ31aLBh8/ESLyio2BkWfJe+RI49w/sMPA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C10
+PeerKey=KAS-ECC-CDH_P-256_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=8388fa79c4babdca02a8e8a34f9e43554976e420a4ad273c81b26e4228e9d3a3
+
+PrivateKey=KAS-ECC-CDH_P-256_C11
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgQqg7mFAR0SMD2xqA
+DyYQ90qnHN8Zxn1Uzmye2VHpCT6hRANCAASrSMqmHqNfE/jtB/+moT6NsiTf7Prh
+p9+LG7brrwy5fRJ0Uwyiw4WjIYvd+8vwtAJMm63VJDv/g06/8kqGGNzL
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEq0jKph6jXxP47Qf/pqE+jbIk3+z6
+4affixu2668MuX0SdFMMosOFoyGL3fvL8LQCTJut1SQ7/4NOv/JKhhjcyw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C11:KAS-ECC-CDH_P-256_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELbRUDVAjB1YVir9h2YNXErZIbHQx
+IYPM78rvJ5e3Z01i9X8xTj80ldxOCZAS9eC6cXcPlmCh6tpUEEzf3nckPg==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C11
+PeerKey=KAS-ECC-CDH_P-256_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=72877cea33ccc4715038d4bcbdfe0e43f42a9e2c0c3b017fc2370f4b9acbda4a
+
+PrivateKey=KAS-ECC-CDH_P-256_C12
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgzu01UHtck+rVmJEZ
+ubo0LP445uY4um7qNDpVR13igAuhRANCAASajNm9cucXUt+RRA93xUdQmoTfmBFO
+feTybNs5I0piXdB8/ITI4UT6soOfUYm7HXyIYx1Xm7xYAS7ZojJ9pS9i
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmozZvXLnF1LfkUQPd8VHUJqE35gR
+Tn3k8mzbOSNKYl3QfPyEyOFE+rKDn1GJux18iGMdV5u8WAEu2aIyfaUvYg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C12:KAS-ECC-CDH_P-256_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzZT8lJfomQdQMJ6ahTT9EUsKblTa
+icR5YQGJcEHRTsvD3vS1/gT67goRkyIp//VjY3v97g55xt7q9En4VAHFxA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C12
+PeerKey=KAS-ECC-CDH_P-256_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=e4e7408d85ff0e0e9c838003f28cdbd5247cdce31f32f62494b70e5f1bc36307
+
+PrivateKey=KAS-ECC-CDH_P-256_C13
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgQ+Dp2Vr03DZIPN0Z
+aNK37rhhH8znfzpOfQWa5D5QlgShRANCAAT5ic+O6VaoLn69mIHNv7L9lGGJsI21
+NVm8jP3UgHHrFF7/KPGhimFrBLfTN4aGefbdhPmns9e2+K8nbBlhGlQd
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+YnPjulWqC5+vZiBzb+y/ZRhibCN
+tTVZvIz91IBx6xRe/yjxoYphawS30zeGhnn23YT5p7PXtvivJ2wZYRpUHQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C13:KAS-ECC-CDH_P-256_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFbnkZ69NKQxBdALgQEJv5M8ja65y
+uqOS7Yl4DfzNtHHN9OkXD7kEMCuP2TqCC6jMftTv06by1rBbgLL/Ku5Odw==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C13
+PeerKey=KAS-ECC-CDH_P-256_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=ed56bcf695b734142c24ecb1fc1bb64d08f175eb243a31f37b3d9bb4407f3b96
+
+PrivateKey=KAS-ECC-CDH_P-256_C14
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgsvNgDfM2jvigu4Wr
+IvQfwOX0/dVL6BZ6XDzUsI2wSQOhRANCAARpxidiWzakKcOYtFw4Z3yzXYvrHPeK
+Vx5A6Z/k6sHNToFpARKwqI8g9xNrKNfUfl+8Kto8jt2HWJvBnslZBje9
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEacYnYls2pCnDmLRcOGd8s12L6xz3
+ilceQOmf5OrBzU6BaQESsKiPIPcTayjX1H5fvCraPI7dh1ibwZ7JWQY3vQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C14:KAS-ECC-CDH_P-256_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEScUDumxPpgUYLhhrXoERPwdbwR3P
+1RyTL7IelR7uL6GK9wb/CSLYez8MXk4x2LJZrrJgqSaWQ+1SChO7JdpZJA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C14
+PeerKey=KAS-ECC-CDH_P-256_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=bc5c7055089fc9d6c89f83c1ea1ada879d9934b2ea28fcf4e4a7e984b28ad2cf
+
+PrivateKey=KAS-ECC-CDH_P-256_C15
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgQAJTQwf4tiqb9n/2
+Qd3GD+9ZOxfDNBI56VvbPleb/cihRANCAARf6WRnExWhiqaKKm490f3n4juM5xgU
+cc+sQ8meGugCYtWCe+KC5iyE3lMbljiEuoMttdayw6JW8OYE/n5rin9y
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEX+lkZxMVoYqmiipuPdH95+I7jOcY
+FHHPrEPJnhroAmLVgnviguYshN5TG5Y4hLqDLbXWssOiVvDmBP5+a4p/cg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C15:KAS-ECC-CDH_P-256_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEGbON45/dL3D3CRYxpPddGZN0C6lC
+kWLCpFMSQBY2spwJrtcjKyjgYJQXQbaCi836K8ScyETzdzYRUE+Co5Clrg==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C15
+PeerKey=KAS-ECC-CDH_P-256_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=9a4e8e657f6b0e097f47954a63c75d74fcba71a30d83651e3e5a91aa7ccd8343
+
+PrivateKey=KAS-ECC-CDH_P-256_C16
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTfoS3vxgMZAhtoGz
+/4ShClEZWMhQk57UVjWTS6SXkUehRANCAATJsrhJbxRAvUotHlJ1L9Nyg1s2SIXh
+VKfaxJKV8oHsfPvmuSaopN4mzMg7gCsSEkAHVL4l2fPurwCLCYcK52Mh
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEybK4SW8UQL1KLR5SdS/TcoNbNkiF
+4VSn2sSSlfKB7Hz75rkmqKTeJszIO4ArEhJAB1S+Jdnz7q8AiwmHCudjIQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C16:KAS-ECC-CDH_P-256_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELJHGHzOt/pMRyUL9v/a6RwIP7/QW
+t7tjzsE/r5sJmVRsqzGwZBnlIh/KAU+4TshwYiobErq1rkNoKqfqc+oI0A==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C16
+PeerKey=KAS-ECC-CDH_P-256_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=3ca1fc7ad858fb1a6aba232542f3e2a749ffc7203a2374a3f3d3267f1fc97b78
+
+PrivateKey=KAS-ECC-CDH_P-256_C17
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgEzH22HSk7TvEosbp
+x0Mx0wOXljFL7uO3FS/NulVWME6hRANCAARZ4eEBUhBGrZzx0ILp0ux90iUwzOBk
+mR8eVcW89fy1kUgvT2cxdsj9qgu25ZsVo+R0VOOgQpfThjyTONmK3R83
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWeHhAVIQRq2c8dCC6dLsfdIlMMzg
+ZJkfHlXFvPX8tZFIL09nMXbI/aoLtuWbFaPkdFTjoEKX04Y8kzjZit0fNw==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C17:KAS-ECC-CDH_P-256_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEooou31gCVmj3JKr4OlCVa3rBz7v/
+ebCMO/h9/Sgo12ffp7//1MdmuGq+r1yZtuUMuczJ2dALf/x4BLBJG2e8Aw==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C17
+PeerKey=KAS-ECC-CDH_P-256_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1aaabe7ee6e4a6fa732291202433a237df1b49bc53866bfbe00db96a0f58224f
+
+PrivateKey=KAS-ECC-CDH_P-256_C18
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3V6fcK50AHPKAgTf
+YHY/tgNsRXCb9Ke7TmcUEvrWXaOhRANCAAQwudsuLpd7zcmMuH3XNsvY54VSEhkl
+zxbhkzZXwvsjFGpFAogAuBKRvOXC4f7X3tZQYg675gUMbzp/DftGc6tc
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMLnbLi6Xe83JjLh91zbL2OeFUhIZ
+Jc8W4ZM2V8L7IxRqRQKIALgSkbzlwuH+197WUGIOu+YFDG86fw37RnOrXA==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C18:KAS-ECC-CDH_P-256_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEou+FeggfnW6yBqgcTPeKgCvfWYrj
+gMiIbs2F/cHtdkRWPEwgQZ8HvBfQU5+t4YVeNIOVFbiSwPXSZWH5f6BNGg==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C18
+PeerKey=KAS-ECC-CDH_P-256_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=430e6a4fba4449d700d2733e557f66a3bf3d50517c1271b1ddae1161b7ac798c
+
+PrivateKey=KAS-ECC-CDH_P-256_C19
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgWuAmz8Bg1VYAcX5V
+uKEuEW0dDfNK+DGXkFdgfC2cL3ahRANCAARGyevRpKPIwLbVcrXc+6EkZ2AyCKnL
+XSrPu3M8QM9jkUbJE6J9BEGF04tGes4BHgTU2bu7jLmuJfqSqvFaWV6G
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERsnr0aSjyMC21XK13PuhJGdgMgip
+y10qz7tzPEDPY5FGyROifQRBhdOLRnrOAR4E1Nm7u4y5riX6kqrxWllehg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C19:KAS-ECC-CDH_P-256_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzNii2GvJLy4BvOTWkiz3/hYmrtBE
+aF6V4u69RkUF8B/p3dWDqWNaZnd31bio8xsPeeuhLHUCNBC1S4Vn3dwPOA==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C19
+PeerKey=KAS-ECC-CDH_P-256_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1ce9e6740529499f98d1f1d71329147a33df1d05e4765b539b11cf615d6974d3
+
+PrivateKey=KAS-ECC-CDH_P-256_C20
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgtgGsQl1dv54XNcXi
+1b23nKmLPVvkos/W8ic/FQ4GTZ2hRANCAAR8npUIQdJsjd6JlDmLj11HWgIrxj3n
+dz/PjVUuAfG6CsxCuYhcmzvuD42MV9Oo9jVQFsAZxAYvoiz/LyCbXMLh
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfJ6VCEHSbI3eiZQ5i49dR1oCK8Y9
+53c/z41VLgHxugrMQrmIXJs77g+NjFfTqPY1UBbAGcQGL6Is/y8gm1zC4Q==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C20:KAS-ECC-CDH_P-256_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwYj/yJR/cwH7e1PjZ0YJfCE0v5zJ
+gbp0tOnENh9ZXk6/fS8gVuckIe85PwwPKw4AEw48rEq7zAAoYWjoXsVQUQ==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C20
+PeerKey=KAS-ECC-CDH_P-256_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=4690e3743c07d643f1bc183636ab2a9cb936a60a802113c49bb1b3f2d0661660
+
+PrivateKey=KAS-ECC-CDH_P-256_C21
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/vsd2hhFMStfzmuB
+sr4gWvLzonT1ohL2bA2fwz165TWhRANCAAQ4tU24VQDLIMYQVu3T2ItqncJngKBH
+8hOm4bkA92WW62OH5OV4FXHk64rmKZGjO13DMwHFvH4SXVN5SjkWDY/Q
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOLVNuFUAyyDGEFbt09iLap3CZ4Cg
+R/ITpuG5APdllutjh+TleBVx5OuK5imRoztdwzMBxbx+El1TeUo5Fg2P0A==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C21:KAS-ECC-CDH_P-256_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMX4QIP9T/M7xi/R7t/Lddwf7e3p1
+eOBPNbO+7SIqDrYJQgzloZ13xv4e5YfmpJ+6+PKA6N8DPXVAMwLlon2yrg==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C21
+PeerKey=KAS-ECC-CDH_P-256_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=30c2261bd0004e61feda2c16aa5e21ffa8d7e7f7dbf6ec379a43b48e4b36aeb0
+
+PrivateKey=KAS-ECC-CDH_P-256_C22
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgM0rgxGk9I5Nafo4E
+PrveIeFop8uj+lB8m+QddoHgSc6hRANCAAQ/K/FYmr8wR78+VKyalTeb/5X49VQF
+9k7KNqfuvo/8p1ISqU5mxa6aiZGHL2anJyPYDsWy6SV0XEVvU3GUOzoG
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPyvxWJq/MEe/PlSsmpU3m/+V+PVU
+BfZOyjan7r6P/KdSEqlOZsWumomRhy9mpycj2A7FsukldFxFb1NxlDs6Bg==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C22:KAS-ECC-CDH_P-256_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERfsCss6518ednC+pPpx5Z8L6TfV4
+n5ZAskJkseUk/LFcbo7PH30wI4k7exyh5NF4ly7iojB1fdxWT/439cWjIQ==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C22
+PeerKey=KAS-ECC-CDH_P-256_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=2adae4a138a239dcd93c243a3803c3e4cf96e37fe14e6a9b717be9599959b11c
+
+PrivateKey=KAS-ECC-CDH_P-256_C23
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgLEveQCFPzDv8R9TP
+Q0timsvpFX+P0CglQDMd55Qs8J2hRANCAAQpwIB/EMvEL7RcmYnaUGge6tcW2qe5
+6R/TLgYvXrksoP8dbRlV1zdrLaJP4RY6JxZZE2NBvC6xGV/HBtxi5/NN
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKcCAfxDLxC+0XJmJ2lBoHurXFtqn
+uekf0y4GL165LKD/HW0ZVdc3ay2iT+EWOicWWRNjQbwusRlfxwbcYufzTQ==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C23:KAS-ECC-CDH_P-256_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoZ73v/mK2ngYQvv8UaR6/zm1k1oc
+fZYlyNMj1RHJLebpwYTfdclV4C4C5AD/5F948znhr+bQVvsyRfRwDOYG7w==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C23
+PeerKey=KAS-ECC-CDH_P-256_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=2e277ec30f5ea07d6ce513149b9479b96e07f4b6913b1b5c11305c1444a1bc0b
+
+PrivateKey=KAS-ECC-CDH_P-256_C24
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQghaJo+dd3L5kMNrQr
+CjMa3JK1lB3guGLV2Jo0fL+PqrChRANCAASc9LmFgcoXeUU8yBb/KLQQCvVs8b8u
+W8MS2DtrGyHTM3pVBPysUjGg0S1lghgoSGginIRKBKNFDWxzgavggL87
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-256_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnPS5hYHKF3lFPMgW/yi0EAr1bPG/
+LlvDEtg7axsh0zN6VQT8rFIxoNEtZYIYKEhoIpyESgSjRQ1sc4Gr4IC/Ow==
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-256_C24:KAS-ECC-CDH_P-256_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-256_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENWxaREwEmlL+4K3rfl2CrlqoMDC/
+/zG7+M4gls8WHEtX0SjeiypXoJTRoAHlchc/luiGauNSvynN2vkvyFsvkg==
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-256_C24
+PeerKey=KAS-ECC-CDH_P-256_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1e51373bd2c6044c129c436e742a55be2a668a85ae08441b6756445df5493857
+
+PrivateKey=KAS-ECC-CDH_P-384_C0
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDA8wxIqaPDZUCetOMBn
+kWug64w4iU0i4bFWGLaBimYXdK1GOyBdqIz2matNQ8nPmKGhZANiAASYA4B/L20v
+2WbN0CkL1BDAGQNS++x/9iR94TAt+G8l00/kqXvvYM/1SDVcAV27Pl+6Jspp7C9b
+XZ2tIMydpxE4Op2+NOo/paKvdbRlAmKa1U3Yt9c6irsGo6O+R9ZQzJk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmAOAfy9tL9lmzdApC9QQwBkDUvvsf/Yk
+feEwLfhvJdNP5Kl772DP9Ug1XAFduz5fuibKaewvW12drSDMnacRODqdvjTqP6Wi
+r3W0ZQJimtVN2LfXOoq7BqOjvkfWUMyZ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C0:KAS-ECC-CDH_P-384_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEp8drlww7X+iwXSg4rgSrR2l7nq9S52RZ
+Lv2if+dRMnJzRGa0AAka2/LWjFjgxQBmrGjxny4cuHmu1DqZabkaCDnEw4pJdJtm
+Hv7fJDRRkV7QkFoysGCZK0aMZHZvyEN6
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C0
+PeerKey=KAS-ECC-CDH_P-384_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=5f9d29dc5e31a163060356213669c8ce132e22f57c9a04f40ba7fcead493b457e5621e766c40a2e3d4d6a04b25e533f1
+
+PrivateKey=KAS-ECC-CDH_P-384_C1
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCShgwhveBhZfjpAMaH
++O8KBdFPKQs/B9izqMxkBDZuXVEZzW0D+xLcWOifE9+c14OhZANiAATqQBj1owfD
+eRgL9qYv0s7O6+631N8GOmb7g4qjUkNBl5H34snUgDyTGaoOsDxBa2Zog1qRSE8F
+7wKChN9kNvuI/+urzdaasBM+ZzWhvPs3ID0Q00CoMop7aHcMp1h4oaY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE6kAY9aMHw3kYC/amL9LOzuvut9TfBjpm
++4OKo1JDQZeR9+LJ1IA8kxmqDrA8QWtmaINakUhPBe8CgoTfZDb7iP/rq83WmrAT
+Pmc1obz7NyA9ENNAqDKKe2h3DKdYeKGm
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C1:KAS-ECC-CDH_P-384_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMPQ/zytrAN5T9iTxVDCQaBg5cX1Tx8lV
+0dae+vA0m3NjrLRHJAEBy7OvZkHOS4jgJeRsDFTwFip378wntup5IAKuK6gnFCmc
+hghXpoFTq2LlJewFMNgbWqFYl5gehYdX
+-----END PUBLIC KEY-----
+
+Derive=KAS-ECC-CDH_P-384_C1
+PeerKey=KAS-ECC-CDH_P-384_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=a23742a2c267d7425fda94b93f93bbcc24791ac51cd8fd501a238d40812f4cbfc59aac9520d758cf789c76300c69d2ff
+
+PrivateKey=KAS-ECC-CDH_P-384_C2
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDASz2oiOnI1JUODDz8Y
+Uw1cs38miAoLKUSCyKjvivrQmqeLfcLyeJp4xmr10cxVOFOhZANiAAT8/OoIXoz3
+TQ3O0WILqEI2lPkDohm7+QGwtZ1qyBuq0xaiQroyvehcskgRm4Uvq2aXLjxox6tA
+LFg28qFu1FGjMSCndQpgOfP/FTiO5iK3Bl9xIr9tUa77wps3sDQEWBs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/PzqCF6M900NztFiC6hCNpT5A6IZu/kB
+sLWdasgbqtMWokK6Mr3oXLJIEZuFL6tmly48aMerQCxYNvKhbtRRozEgp3UKYDnz
+/xU4juYitwZfcSK/bVGu+8KbN7A0BFgb
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C2:KAS-ECC-CDH_P-384_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEGu+/osbIyFWhohZ3RVC3miTNo3YHux98
+yQZlDuSzgW1o9qnHXabkJCzr+2ZS9lGAQZ0otyPrrbdlj867mtm3repnTx2j3Gtj
+l7VdoPYaPt2stKzbFEQcshSwSghEwC+j
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C2
+PeerKey=KAS-ECC-CDH_P-384_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=3d2e640f350805eed1ff43b40a72b2abed0a518bcebe8f2d15b111b6773223da3c3489121db173d414b5bd5ad7153435
+
+PrivateKey=KAS-ECC-CDH_P-384_C3
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCN1IBjo6BYwzS1zHpM
+4H0C5e5tjx88UaFgCWLLq0YmkK482XT7OeQLDoQ9qg/TLeGhZANiAATjjJhGJIEj
+w0IYYepNMmaae1w8CDdq0oEEOZSUyE/176OJStssbL6MPJE+8u7FvTyfqEAkoQKH
+lt+EAh97bJ0C8PS9GmEqA8v3WgvupD/viuhLSMYBcqrfCcGtAW0L884=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE44yYRiSBI8NCGGHqTTJmmntcPAg3atKB
+BDmUlMhP9e+jiUrbLGy+jDyRPvLuxb08n6hAJKECh5bfhAIfe2ydAvD0vRphKgPL
+91oL7qQ/74roS0jGAXKq3wnBrQFtC/PO
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C3:KAS-ECC-CDH_P-384_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEi8CJMm7FW5z1mzTw63VNk1lsopD8s0RM
+g9TeOlYHA37Dl2g/jO8H6rL+NX6uNsRJ2dFs6KyFs/HpRWhSGq5TTmcTnjEOxyaT
+Umqi6Se1syLJWhoDPCKctncMlXzTFI3X
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C3
+PeerKey=KAS-ECC-CDH_P-384_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=6a42cfc392aba0bfd3d17b7ccf062b91fc09bbf3417612d02a90bdde62ae40c54bb2e56e167d6b70db670097eb8db854
+
+PrivateKey=KAS-ECC-CDH_P-384_C4
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCE7ObMNCkwm9WyPpWX
+k+0rER7Fy0O2wYCF/K6p76BoXZimJi7g0zDuJQvIpn0Ocz+hZANiAAQyIgY6KZez
+Au5g7hlhEI/0x6zxwO8dX7DRZLhLznHEMXBcua6ppF9dc4BmVaBYvuPmH6nn++fN
+Q6v5lZaj06A56Z+p3JOwvdnK2Blm0X7q9VcGivp8eEZrtbIgMtEQD6Y=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMiIGOimXswLuYO4ZYRCP9Mes8cDvHV+w
+0WS4S85xxDFwXLmuqaRfXXOAZlWgWL7j5h+p5/vnzUOr+ZWWo9OgOemfqdyTsL3Z
+ytgZZtF+6vVXBor6fHhGa7WyIDLREA+m
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C4:KAS-ECC-CDH_P-384_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE65UuLZrAwgxsxI+yJcKtFU9TyHULAD/T
+tO2O0dwN76xhvN3gKivP7nBn1100LtKw8YKCBbrs6C0bJn0Nf/L5yeFbaact9HBY
+qX84kQBdH7OIWPVgPehA5ZHfpPbn1Inh
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C4
+PeerKey=KAS-ECC-CDH_P-384_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=ce7ba454d4412729a32bb833a2d1fd2ae612d4667c3a900e069214818613447df8c611de66da200db7c375cf913e4405
+
+PrivateKey=KAS-ECC-CDH_P-384_C5
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBo/OISHcOh43sQ8d3j
+Cfni4Y+sR80XcJUUUcNITNt3yxNtAOcxJgWXzChZYBwBoluhZANiAASGi+DmlIQY
+MOQk2RPY59hrhO4QIdgrDs9SPwn+iadsDJXEny37z4KcHjlwnVXvuzuRlesYNnW0
+D9kvUfN3EzF+SptPcVyKsi4Hc7G8cdOiGfBbgRYHRljuhrUuNvOJcRY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhovg5pSEGDDkJNkT2OfYa4TuECHYKw7P
+Uj8J/omnbAyVxJ8t+8+CnB45cJ1V77s7kZXrGDZ1tA/ZL1HzdxMxfkqbT3FcirIu
+B3OxvHHTohnwW4EWB0ZY7oa1LjbziXEW
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C5:KAS-ECC-CDH_P-384_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAERB0CniROtxaNZH1N9Q219OSXSrP9rwIq
+/wWLNpXQuMgUzIjaYoXcbfGsVcVTiFAD6AJawjpB1LHqKqRsUMbkeZRrWbbXZJfN
+kkmXfgv+SmJiYi8T1Co8Q9Zr27MEA8NF
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C5
+PeerKey=KAS-ECC-CDH_P-384_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=ba69f0acdf3e1ca95caaac4ecaf475bbe51b54777efce01ca381f45370e486fe87f9f419b150c61e329a286d1aa265ec
+
+PrivateKey=KAS-ECC-CDH_P-384_C6
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCxdkxUiX56rm3p53Uf
+LzfehJKR+I8PkQkxVbhY0cwyo6h5gPcGuGzIP5J739vq4L2hZANiAATDcSIv6qZ3
+DG8+o+DayXQN70/PghN4t/kf+TfCHgRw9w86MdXGspEhlfEJJpQrSK4EfWtNdlEj
+Vj+BEWvGZbe4zGIHgw2AX9hNp8uAWmW6p8Ev1ZLRtbXj5l2WcqnvdmI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEw3EiL+qmdwxvPqPg2sl0De9Pz4ITeLf5
+H/k3wh4EcPcPOjHVxrKRIZXxCSaUK0iuBH1rTXZRI1Y/gRFrxmW3uMxiB4MNgF/Y
+TafLgFpluqfBL9WS0bW14+ZdlnKp73Zi
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C6:KAS-ECC-CDH_P-384_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPU5r8IpzQErMwWKYc0aOQmnoLZDYMuWK
+1yFCY5taBWrY01xmxg6BSfrAx5e863wvmwMI3H8ObSn4wnesvGWiHlrbg9EeaHO8
+Cgf9oJl/SCUEYC9Z4QvFy0drg9Ck915x
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C6
+PeerKey=KAS-ECC-CDH_P-384_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1a6688ee1d6e59865d8e3ada37781d36bb0c2717eef92e61964d3927cb765c2965ea80f7f63e58c322ba0397faeaf62b
+
+PrivateKey=KAS-ECC-CDH_P-384_C7
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDw96lucNmP1aMK1kBs
+9W61typRDp8ZL1Dh+EUk2/PSQ59yh7s29aqRKnneqrSt6oKhZANiAASZyMQcsate
+CFSjRuSwilN8FwamFVM4fI2UlDqxUZbUDbqlW4IQp3pdAJFfLE6mnqtVMQZb3PF7
++zy1WgLkGlfH9pTDg60on5APvWVsIjOpPJLpM+eib1TLtW8K2HXFG7A=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmcjEHLGrXghUo0bksIpTfBcGphVTOHyN
+lJQ6sVGW1A26pVuCEKd6XQCRXyxOpp6rVTEGW9zxe/s8tVoC5BpXx/aUw4OtKJ+Q
+D71lbCIzqTyS6TPnom9Uy7VvCth1xRuw
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C7:KAS-ECC-CDH_P-384_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE9fa+8dEQ2gO+ABfqx2DMNLJNCS9zbyN7
+xwVLOGUxKoE7y2LSl/sQpPer9UcI/i09Bv3419wDL04QAQvxnL9hWTISUv9BX7kZ
+INQ48k5n5gwusEYyBGefo1avRM6pyev1
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C7
+PeerKey=KAS-ECC-CDH_P-384_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=d06a568bf2336b90cbac325161be7695eacb2295f599500d787f072612aca313ee5d874f807ddef6c1f023fe2b6e7cd0
+
+PrivateKey=KAS-ECC-CDH_P-384_C8
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCe+4fdxh1DxIK6ZuGx
+Q672ePvQ0b68IACUH6vmd/5bcGv3j8420QCxfMeH6tdLvKKhZANiAARMNO/ujwyV
+Vl0gZdG7rCot0lrpZDIOtrzO3F86m0KogaGvyhu2uIBYT6J7AcGTzZLY+wHb980K
+OGjCa5UfOTw8VsKFjO6QH3eT/10nGSXROkH45SQJ9OuhmQ8zrLC6xmk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETDTv7o8MlVZdIGXRu6wqLdJa6WQyDra8
+ztxfOptCqIGhr8obtriAWE+iewHBk82S2PsB2/fNCjhowmuVHzk8PFbChYzukB93
+k/9dJxkl0TpB+OUkCfTroZkPM6ywusZp
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C8:KAS-ECC-CDH_P-384_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEfN7Hfgc36jfGe4m3E3/jiBgBD0RkQ47k
+0dNaDEiMrT/eLzfQCIXTbTt5W5+T0jpnKMQu6NYCfFbPl5ukwin9sB0jSUT4rEM2
+UBEsPPDwKEToiKNWnf73goqKiEWJqgVe
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C8
+PeerKey=KAS-ECC-CDH_P-384_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=bb3b1eda9c6560d82ff5bee403339f1e80342338a991344853b56b24f109a4d94b92f654f0425edd4c205903d7586104
+
+PrivateKey=KAS-ECC-CDH_P-384_C9
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDXh6V/3iLsZWoKUlzz
+xzizDXOvYedD6pCJPsste2Iq3S+U7iXCFxRnr7CT8/hNABihZANiAAQXFUaSO4ey
+y7rWZPAc6TK/CdamEYFoZ4RGv6nwk4YIy0ZnqY9OyKwUYihcJQj3SGL6QctNtorn
+Hx+KPok53FLC3sYag8mDvrKgK68p7EkngIiILtDPVsdLXBc7VSzPY88=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFxVGkjuHssu61mTwHOkyvwnWphGBaGeE
+Rr+p8JOGCMtGZ6mPTsisFGIoXCUI90hi+kHLTbaK5x8fij6JOdxSwt7GGoPJg76y
+oCuvKexJJ4CIiC7Qz1bHS1wXO1Usz2PP
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C9:KAS-ECC-CDH_P-384_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEju6joxnI35n7wpy1XyQ6cg2VUJUV7lzF
+h6XFriL7vQCeYm2z6RHe8LmaT3rjBLG6c4d9yU25rd3A2aSyTol2wi1zyEQ3Dh7o
+V/jRsSmjvV9j9AyvO9BTPjil9XdwdP+e
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C9
+PeerKey=KAS-ECC-CDH_P-384_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1e97b60add7cb35c7403dd884c0a75795b7683fff8b49f9d8672a8206bfdcf0a106b8768f983258c74167422e44e4d14
+
+PrivateKey=KAS-ECC-CDH_P-384_C10
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCD1w97Fk2fTCJ8dnBG
+sg6zTfx3j1OH4y6DSx5trsIO24ylu0GSCT9UO2jmrrfOeIuhZANiAARXzXcPO7y+
+DHjHcOqwsWm8ReE5+GN4/64cKxaWZyfC8utyRXK48+sijRMNtP+GLGN+xciBO2hV
+WNg+kk8UvHGfbreuDLssR0Inxb2ohjek8mxkgXkpr5mVktpveHSQMy8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEV813Dzu8vgx4x3DqsLFpvEXhOfhjeP+u
+HCsWlmcnwvLrckVyuPPrIo0TDbT/hixjfsXIgTtoVVjYPpJPFLxxn263rgy7LEdC
+J8W9qIY3pPJsZIF5Ka+ZlZLab3h0kDMv
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C10:KAS-ECC-CDH_P-384_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEpyH2otRSdBGDSxPU06M8Kb64OrdoJGXG
+y69mJKym6ljDDrDyndhCiGaVQA1yVPIPFLpuJjVRCa01EpNm1eOmQK55hQWn+lWp
+aja12tM94AR09mcPUiIU3XlSFAqwp+to
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C10
+PeerKey=KAS-ECC-CDH_P-384_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1023478840e54775bfc69293a3cf97f5bc914726455c66538eb5623e218feef7df4befa23e09d77145ad577db32b41f9
+
+PrivateKey=KAS-ECC-CDH_P-384_C11
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCPVY4FgYuI7Tg9X8qW
+LlNBPbGg5GN+2hlPdhlEy+oRSrnV2hdafVeIJVCw5DLzlamhZANiAASaL1f0hnzn
+U9crDZUZXfb5bB+uk09gLv17alRYL1Vs+lOdiQBcou2sCK2bct0fYLrZuU7oLanM
+YB80YESZi6OHruVkBNxuzIqytZBEMxnQsrYXb50OrC1EZ47VYWB9Cak=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmi9X9IZ851PXKw2VGV32+WwfrpNPYC79
+e2pUWC9VbPpTnYkAXKLtrAitm3LdH2C62blO6C2pzGAfNGBEmYujh67lZATcbsyK
+srWQRDMZ0LK2F2+dDqwtRGeO1WFgfQmp
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C11:KAS-ECC-CDH_P-384_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2IKoUFwtXLm4hR/Gdmd7sAh2ga1T+s66
+Fzgoa0WCdWHn2je4gCdsZWz8OLMq3oR+NLMUvcE0V1ZUVzz/r0BEXaLmqvmH9+kT
+zUwwkVIwWJhKJdjyHagyYZJFbGoPpfYM
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C11
+PeerKey=KAS-ECC-CDH_P-384_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=6ad6b9dc8a6cf0d3691c501cbb967867f6e4bbb764b60dbff8fcff3ed42dbba39d63cf325b4b4078858495ddee75f954
+
+PrivateKey=KAS-ECC-CDH_P-384_C12
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAPXe4K/6e78jnV3/Mp
+h+u3z4T8zu1kPh08YtCzNSrsI7blrH+kEFyMsmEmrS0YksuhZANiAAQjNGvfvJ18
+fHNuAr32B2cf9ggv3SczSovHXzsjaB6+YU0Fl91hT65YZ3yDWp8LJzuCujYpDS+U
+20FHnrRatOr2eSiiMVE41Z7sybUoXf3dZxT3dVchbqRMxvwRnYJD768=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEIzRr37ydfHxzbgK99gdnH/YIL90nM0qL
+x187I2gevmFNBZfdYU+uWGd8g1qfCyc7gro2KQ0vlNtBR560WrTq9nkoojFRONWe
+7Mm1KF393WcU93VXIW6kTMb8EZ2CQ++v
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C12:KAS-ECC-CDH_P-384_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgVyddz2/X7ahuGeZlmJH9ABqI8kuaMVe
+nqqZixfYgy3U2E2SfYMdT2jaxnxkiCGf55JplIsmEUhFYP1JD+7Ih8tV75mktSSI
+D6dJnWoHKDquKvoz/quX3spAvGBsTYdk
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C12
+PeerKey=KAS-ECC-CDH_P-384_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=cc9e063566d46b357b3fcae21827377331e5e290a36e60cd7c39102b828ae0b918dc5a02216b07fe6f1958d834e42437
+
+PrivateKey=KAS-ECC-CDH_P-384_C13
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDADe2M7W4uoV8D8hWVo
+aCMuL+v1lXhxg5G4HahUGgC/5TwwrgQVGEfydJn416utjPShZANiAASIeKyKlH99
+XLK0eq0k+7ghDYYSZYU5mihx+Eqpxf3jB0rlQMa/gidcqCLQ/rhivHRjL1zS+QDC
+cRwy+JMHKOtkfTHt2NZQ+WVOfTPl7RtHVInQjaow2MvLpr/Dtg2bWjc=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEiHisipR/fVyytHqtJPu4IQ2GEmWFOZoo
+cfhKqcX94wdK5UDGv4InXKgi0P64Yrx0Yy9c0vkAwnEcMviTByjrZH0x7djWUPll
+Tn0z5e0bR1SJ0I2qMNjLy6a/w7YNm1o3
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C13:KAS-ECC-CDH_P-384_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEHA7tp6K+AAxb3NoEeK7U23M9Kp40EiQ3
+kSOthHAw8p47Fo+hjomjwPuips4cKPw77Iwcg8EYxNvqlCcYafLYaOtl6LROIebx
+Sw9NmzjAaNrvonEUJVuaQdCEzEoa2FRW
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C13
+PeerKey=KAS-ECC-CDH_P-384_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=deff7f03bd09865baf945e73edff6d5122c03fb561db87dec8662e09bed4340b28a9efe118337bb7d3d4f7f568635ff9
+
+PrivateKey=KAS-ECC-CDH_P-384_C14
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDj0HEGvtzAlufZFjD/
+0wlN8seFnbjX7bsuN7SsR/QppjfQamfS+6M4OHZO8gNGSZGhZANiAATnShorhfHL
++Nu98FDPGv+KywL9ovtlkfnTz+TnnQrpOKnBSD57dfjbJFBdZQZc2xgXc+5ZGCL3
+q6qFahpgvApSA1SNvRy1AlRm7/hIG9B2FOqgShbD23aQWRPpcqW2tZ0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE50oaK4Xxy/jbvfBQzxr/issC/aL7ZZH5
+08/k550K6TipwUg+e3X42yRQXWUGXNsYF3PuWRgi96uqhWoaYLwKUgNUjb0ctQJU
+Zu/4SBvQdhTqoEoWw9t2kFkT6XKltrWd
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C14:KAS-ECC-CDH_P-384_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEyVwYXiVr+ZfzCzEVSK5/doo43uQ+7u9D
+CD8wd75w4r85rB1NrzYMUUyMa+YjRD0aPmOmY+r3XYp2WrK5o1UT15M/peJkIKUk
+RVDsbDtvAzuW2yrKPWrGqrBSzpKVla6l
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C14
+PeerKey=KAS-ECC-CDH_P-384_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=c8b1038f735ad3bb3e4637c3e47eab487637911a6b7950a4e461948329d3923b969e5db663675623611a457fcda35a71
+
+PrivateKey=KAS-ECC-CDH_P-384_C15
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDz+bDGWkmlBmMsikWx
+D2a1MW+e6wb64hjy2mIzP5mQURexQcdg6JdO/ErxBXBjV5GhZANiAASkrXeqfYbl
+NhEYprkhcQyCByEhBxL0w0eYX97liqTv+h4ovoChexILE5+WMA+JtJsd3yLgfgPx
+Vg2PRaSACUVg26n65/lTETDBtX67lZgkllJPMdN5d5M5b6gj8ivbQyg=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEpK13qn2G5TYRGKa5IXEMggchIQcS9MNH
+mF/e5Yqk7/oeKL6AoXsSCxOfljAPibSbHd8i4H4D8VYNj0WkgAlFYNup+uf5UxEw
+wbV+u5WYJJZSTzHTeXeTOW+oI/Ir20Mo
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C15:KAS-ECC-CDH_P-384_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENJcjin5q0WbfLawDmqTayNF6qSXnx2Me
+s7VuOqocVF/NVNLlmFgHkQ+yArH8GR0qpJ5cSH3MeqQKjyNMl5RGBA2RdOOtNX1A
+TXdlGDGVrtP5E2QbkMgaMG6/DYkThhMW
+-----END PUBLIC KEY-----
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C15
+PeerKey=KAS-ECC-CDH_P-384_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=d337eaa32b9f716b8747b005b97a553c59dab0c51df41a2d49039cdae705aa75c7b9e7bc0b6a0e8c578c902bc4fff23e
+
+PrivateKey=KAS-ECC-CDH_P-384_C16
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBZ/Of6194ousAjBpDJ
+VxDHIOUo+aTlTTpqjNX8XF8hY3AxzhxbTj05ZH2Ny5t5RmShZANiAAScQ7+XHt8J
+QCh27nQglTgfeLG9OqObUTKvddv+fpi9eL3hD+LpA8K2N54d7uF1obCmxY7OpaR3
+uwG9VDsznxzEnxNxos2k1G605T4lBZeUI1GplmWhIv/qm94GNsN12vI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEnEO/lx7fCUAodu50IJU4H3ixvTqjm1Ey
+r3Xb/n6YvXi94Q/i6QPCtjeeHe7hdaGwpsWOzqWkd7sBvVQ7M58cxJ8TcaLNpNRu
+tOU+JQWXlCNRqZZloSL/6pveBjbDddry
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C16:KAS-ECC-CDH_P-384_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEkKNHN9RbGqZfdOC9Blm8EY+OS3dLdhlE
+/6ZXPG309B3sDRG2l6vZNNOQhx1LRTJAm1kHGbszB8FJp4F741XWhIk6MHdktRLu
+/+B8tpnttab/v41gMubHnV6T6UISwqpO
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C16
+PeerKey=KAS-ECC-CDH_P-384_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=32d292b695a4488e42a7b7922e1ae537d76a3d21a0b2e36875f60e9f6d3e8779c2afb3a413b9dd79ae18e70b47d337c1
+
+PrivateKey=KAS-ECC-CDH_P-384_C17
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDA+Sfv5UKQkxdgCKNxL
+w16fbGwMHQRECZjaCmCah3V12+Q31qXO2qLd0qGhf9ESre2hZANiAARalJWUIosa
+PW9ZnrPbDQYHD7xVHGV7WCNLoWTOP+QV+l8+uCPAjcKbjDQSGcd7az0rqtRHyMKQ
+z+0l7dkDHEHQt2khRXMn9C2zESK4HzN7vwsQOeyDDOkGGjdhlTx15Kg=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWpSVlCKLGj1vWZ6z2w0GBw+8VRxle1gj
+S6Fkzj/kFfpfPrgjwI3Cm4w0EhnHe2s9K6rUR8jCkM/tJe3ZAxxB0LdpIUVzJ/Qt
+sxEiuB8ze78LEDnsgwzpBho3YZU8deSo
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C17:KAS-ECC-CDH_P-384_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3aVGrPyPkD0R4uOSBmljbUSyBorrZv8H
+qiZvADDhU1sO0CA8uKRgrJkPE5T68i8dFbuyWXkTA1+q30E0dvTHD3J5dppAyYb0
+cMQntO5JYqvfgXO7rYGHR3KSX9MvCxWf
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C17
+PeerKey=KAS-ECC-CDH_P-384_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=1220e7e6cad7b25df98e5bbdcc6c0b65ca6c2a50c5ff6c41dca71e475646fd489615979ca92fb4389aeadefde79a24f1
+
+PrivateKey=KAS-ECC-CDH_P-384_C18
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBQzMH3B26S9GOOhfLb
+mOC0g+biIEySvdRApt7qBON6B8bnJ5HBkK1OTobgHvuoQmmhZANiAAR1bAffDOMs
+g52sn7RzPJwotwETpnanBXw40iPyKjqQlajVZGU69SjgTH4YJL5KZRIXws5pYsvS
+ouBmKXs51X3Zu0aA8BkdOQ9wtORhQZspcs5orUYSf92mw5GVd06obfM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdWwH3wzjLIOdrJ+0czycKLcBE6Z2pwV8
+ONIj8io6kJWo1WRlOvUo4Ex+GCS+SmUSF8LOaWLL0qLgZil7OdV92btGgPAZHTkP
+cLTkYUGbKXLOaK1GEn/dpsORlXdOqG3z
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C18:KAS-ECC-CDH_P-384_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEeIviM2xS9EVNY+6USx5Jv7YZoINxBI5t
+qS5YTq5wveHxccTfN4vR88CrAwSKI3gCRnPr2NtgTq9BcRdIurKWiiPKRHbOFE5y
+gkfwivdSkpFXtYMPHiYGdGa9+otlFFoz
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C18
+PeerKey=KAS-ECC-CDH_P-384_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=793bb9cd22a93cf468faf804a38d12b78cb12189ec679ddd2e9aa21fa9a5a0b049ab16a23574fe04c1c3c02343b91beb
+
+PrivateKey=KAS-ECC-CDH_P-384_C19
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAG8TK3H3TYe/mYV+Hk
+NQpZTl/jVTO4iFUs7MvA2JI8kC42FB12keKGMbi8m6/l4GShZANiAAQqPMa4/1ze
+km5+OhiaG9ApybWGNRr4g49PIBy49LcO87DaBtNSyA/Ca6+PQreERZ6/mYWWAXba
+bSPHRSopVP/LvLJCSbQwGaKgI+Cz2r1GHxmtPndcNk8/Ea1J8wmUANM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKjzGuP9c3pJufjoYmhvQKcm1hjUa+IOP
+TyAcuPS3DvOw2gbTUsgPwmuvj0K3hEWev5mFlgF22m0jx0UqKVT/y7yyQkm0MBmi
+oCPgs9q9Rh8ZrT53XDZPPxGtSfMJlADT
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C19:KAS-ECC-CDH_P-384_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0Ju4IuuZ44BglUdHyCuzJ4z5a782/s40
+APTIc4OKQME16zuruSk70QAb8+ze578m1BbbbhuHu7dCd4ijtsenqywWWx42b5YI
+31EgN1hPITpkjUfxasMm4Zquly9j/XbJ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C19
+PeerKey=KAS-ECC-CDH_P-384_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=012d191cf7404a523678c6fc075de8285b243720a903047708bb33e501e0dbee5bcc40d7c3ef6c6da39ea24d830da1e8
+
+PrivateKey=KAS-ECC-CDH_P-384_C20
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDASBI67QzHsGaHiPxos
+dztmTM/pCii/uEb8Evgd/0S3RDx3ZHFkvx6eZ/0sB6Z2YkGhZANiAAS8GINrx6n9
+9UtTUvN9dSirj6jsVEqMYYBRHL/dSczjd8OeNMAxtSQNyZgFA+0vJiyAhsvjOBkQ
+gPC3oWx6/Ex7Ayb5rGb1hVLvS7nSTeNCntXTJ37Vj89I8rX2Eya+xsY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEvBiDa8ep/fVLU1LzfXUoq4+o7FRKjGGA
+URy/3UnM43fDnjTAMbUkDcmYBQPtLyYsgIbL4zgZEIDwt6FsevxMewMm+axm9YVS
+70u50k3jQp7V0yd+1Y/PSPK19hMmvsbG
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C20:KAS-ECC-CDH_P-384_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEE3QSYu3lhh2tcQY9/SBLkeodO3xjHfaO
+uUmWlSfXmh3FkpXvfSvKZ0PozXewTRtYC6rq3H4Z10qKBEUaE18b4bAv4pn53AC/
+3yAeg9mVxpULzBy4nW97ML9UZWuaTaWG
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C20
+PeerKey=KAS-ECC-CDH_P-384_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=ad0fd3ddffe8884b9263f3c15fe1f07f2a5a22ffdc7e967085eea45f0cd959f20f18f522763e28bcc925e496a52dda98
+
+PrivateKey=KAS-ECC-CDH_P-384_C21
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDA01hppnKV2Fp/NwMx+
+ROThIh2w/mPRaFDIEEAp99SESXFLmIQyjK4YmXh1SrRgtIahZANiAASGf4EQTM1r
+Fjp5ArZw70BgQssMzn3Nxj0d/JGyxA4833WVg0v57Ot5hJ8WNvyEYvydS96Oh17E
+lpfSWNHVlGX4QxxvVTHhxZ6fnr488WSo2c4QoS8ZeSg6lZutJE3YOGM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhn+BEEzNaxY6eQK2cO9AYELLDM59zcY9
+HfyRssQOPN91lYNL+ezreYSfFjb8hGL8nUvejodexJaX0ljR1ZRl+EMcb1Ux4cWe
+n56+PPFkqNnOEKEvGXkoOpWbrSRN2Dhj
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C21:KAS-ECC-CDH_P-384_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEniLLwYZX9RaoZLN7eDNItm8aqWJs1jH0
++hvTKtiM8R21IFfGYIYNOdEfvwJPq9REaw1Tx5aBwoEW33HpzudP1WyLfwSznxGY
+zHIoTpi+lWLjWSb7T0ip++yv5ykwnotv
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C21
+PeerKey=KAS-ECC-CDH_P-384_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=dc4ca392dc15e20185f2c6a8ea5ec31dfc96f56153a47394b3072b13d0015f5d4ae13beb3bed54d65848f9b8383e6c95
+
+PrivateKey=KAS-ECC-CDH_P-384_C22
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDcYPqHNtcCE1/xaquZ
+K7iOrDl/WXJFbHLsRHN00NjOYRU4Mb/IatWm61tgv7lqhiyhZANiAAS2m+7ehdD4
+Kf7BuJPMucPgUv9pLhO5dFN7xbD5/q97IuhPAyMWKbJIZr20uM+QiRRm+F4r/Kui
+hDKFsOFOvAfvfa//i0JEFv7mR7WYl7YZ8g7tlaYy5qQga/faQpwExWA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEtpvu3oXQ+Cn+wbiTzLnD4FL/aS4TuXRT
+e8Ww+f6veyLoTwMjFimySGa9tLjPkIkUZvheK/yrooQyhbDhTrwH732v/4tCRBb+
+5ke1mJe2GfIO7ZWmMuakIGv32kKcBMVg
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C22:KAS-ECC-CDH_P-384_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAELbXaX5QOqohPTbXsITmwRp845Ob7vMUt
+8VwPfPf8sYCMdJdktr6F0v3FsW9YrV3AIuiwLc8z4bWgg4SVRfhK1eQ/d8txVG27
+rA0RvbLuIC6dOHLo0CjAiZB0bF4d3pmJ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C22
+PeerKey=KAS-ECC-CDH_P-384_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=d765b208112d2b9ed5ad10c4046e2e3b0dbf57c469329519e239ac28b25c7d852bf757d5de0ee271cadd021d86cfd347
+
+PrivateKey=KAS-ECC-CDH_P-384_C23
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBvpqHHBHMJh6pjSwUW
+qCarqMbWQR06TIl3LXpiYQJWouLyifXDRAsOwecPozniUc6hZANiAART3h/BMo6N
+4UrsqymtikDWsTdo+G99KYQz0g/seR+G+Lxz81gJiyVqKYu0iN4le/SsKJRP0n8X
+uClGwExmxB8AU9NpLyddpVzYc5qVvYzTry+W5N6Vnqg0TYlFN1kFhYs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEU94fwTKOjeFK7KsprYpA1rE3aPhvfSmE
+M9IP7Hkfhvi8c/NYCYslaimLtIjeJXv0rCiUT9J/F7gpRsBMZsQfAFPTaS8nXaVc
+2HOalb2M068vluTelZ6oNE2JRTdZBYWL
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C23:KAS-ECC-CDH_P-384_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMpZHuqNUIk60QUgpxTaMgteJOzmATgjL
+shgPRZvvxLNHo4mnDJGiO9nTDIO+UpXTzI9hkj+tKqjlBdbPoSa5+r1a+dzikLdW
+YO8G0cqnNoHQYInDO8QkazqjDbzSQ1sS
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C23
+PeerKey=KAS-ECC-CDH_P-384_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=d3778850aeb58804fbe9dfe6f38b9fa8e20c2ca4e0dec335aafceca0333e3f2490b53c0c1a14a831ba37c4b9d74be0f2
+
+PrivateKey=KAS-ECC-CDH_P-384_C24
+-----BEGIN PRIVATE KEY-----
+MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDB0rYOGwcssoPzesx4I
+abs/SMA2r+LvEQyjAryLkQ9iHJ/MVM7DK7iex8qoTHuOVKihZANiAAQno+g8+51R
+IucxKdgBYVhX2nzAiczMnFSrMDKhngoKn2dzRuN/CKCz7Y2m5d1pEGONYORKpeD9
+MMkYRWeWrzfw5BlXkBZF5cWWxtmJ9YWbA6C9fR9Od5Nv/zx00gTlOI4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-384_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJ6PoPPudUSLnMSnYAWFYV9p8wInMzJxU
+qzAyoZ4KCp9nc0bjfwigs+2NpuXdaRBjjWDkSqXg/TDJGEVnlq838OQZV5AWReXF
+lsbZifWFmwOgvX0fTneTb/88dNIE5TiO
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-384_C24:KAS-ECC-CDH_P-384_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-384_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKdijbSIgCnW3rqG7R838sbf9Zt6WcEFD
+RyirXVM6Bg33MhMGAP5vdYUqhx+yk4454ZtT21KDld6JekUQiWdxXrjLVcP8vyM3
+k3LAhzoFjVdUSxAuzOcissyrsaYDd0/V
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-384_C24
+PeerKey=KAS-ECC-CDH_P-384_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=81e1e71575bb4505498de097350186430a6242fa6c57b85a5f984a23371123d2d1424eefbf804258392bc723e4ef1e35
+
+PrivateKey=KAS-ECC-CDH_P-521_C0
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBfuzAerSzKQaPumXl
+ah+IkKqTXlcTSuD/zOgCc1FR9OrGVk9u6ZdMXmiHof7+5XQ64iQb/rldXOMd3Lb5
+7bTW/EehgYkDgYYABABgL50M+eUmsp4iOBwgPEiohsKwZzAzNmMU8f+8uiQLpC9O
+84p2F0Y1+R5rTtNCdesByEZ9BcqAMVvxp7vZRfVQpQG3yF8m9dSy1zVc9rAhF2WZ
+Q3YrbR21q08dvETOeylG62x940KWKJP9OH0bc9eoZy0fI2lhFwt+s1eZU+5c3IjN
+LQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAYC+dDPnlJrKeIjgcIDxIqIbCsGcw
+MzZjFPH/vLokC6QvTvOKdhdGNfkea07TQnXrAchGfQXKgDFb8ae72UX1UKUBt8hf
+JvXUstc1XPawIRdlmUN2K20dtatPHbxEznspRutsfeNCliiT/Th9G3PXqGctHyNp
+YRcLfrNXmVPuXNyIzS0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C0:KAS-ECC-CDH_P-521_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAaFpI6Gx58PCHX3vBjSXrX8jAsH5d
+pPQ3DzqUkDQIVDNLHhuH+jlUZMYGJhJKTnDQ94VgHTfAmHDr8XZmaHeiBG0BulLF
+b8h3bZ6PXbTwzCdjbQt0G74FQAaXlC6AtzmISoO96Z4PZxaTnmMryJhvoY3M1EOj
+SLbD5SJJeVWk88MC9nY=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C0
+PeerKey=KAS-ECC-CDH_P-521_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=005fc70477c3e63bc3954bd0df3ea0d1f41ee21746ed95fc5e1fdf90930d5e136672d72cc770742d1711c3c3a4c334a0ad9759436a4d3c5bf6e74b9578fac148c831
+
+PrivateKey=KAS-ECC-CDH_P-521_C1
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAgW8ZwfsQ75TUodgc
+FW7D0d4Itmdh8D8G7ku53Ou7/h6qHtSaapkIONjtMYwU10zIcvldBdB61Q9iHOti
+DNkFz7ihgYkDgYYABADUVhXtXTf95plhCmLNQ7p2vt2Phe0xAF/gDWRQ+70QEpGr
+2W1JRai1e8c7P+n0ZxEFMJ7JtoedBVHZMNrIukXSVQFCUzKETlkrRAwAJ5cq0VJk
+McBnMt8ZzUaiQhctTdZ8LIyZ38IuSZSaVs+Qxkc2Nc6C8lszaC+xm8M72RDtjOOn
++g==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA1FYV7V03/eaZYQpizUO6dr7dj4Xt
+MQBf4A1kUPu9EBKRq9ltSUWotXvHOz/p9GcRBTCeybaHnQVR2TDayLpF0lUBQlMy
+hE5ZK0QMACeXKtFSZDHAZzLfGc1GokIXLU3WfCyMmd/CLkmUmlbPkMZHNjXOgvJb
+M2gvsZvDO9kQ7Yzjp/o=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C1:KAS-ECC-CDH_P-521_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB3yd8FSEINJvDTVOe4M8Gsk9dNQBn
+e0RFRTzMIUCUU6r7inKgvp6+VNEicKpRs6t/MWql50qVHF5T90zZX8Ka7noBPVLz
+Op88FDhNFYf6ir567XS8M3Sa2cVwtHF3ZCLH1FBdmwqWs7+sBB5MammQrn9wDltK
+ZkAikRLer6DNi7DQibA=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C1
+PeerKey=KAS-ECC-CDH_P-521_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=000b3920ac830ade812c8f96805da2236e002acbbf13596a9ab254d44d0e91b6255ebf1229f366fb5a05c5884ef46032c26d42189273ca4efa4c3db6bd12a6853759
+
+PrivateKey=KAS-ECC-CDH_P-521_C2
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBLy4MbZ6dEXzrlyO8
+7QLrPU7r9f7q+O4BE8zYBXsT3dQW4LdCgMLQuo7SkcRDvBsUHK+K+zpx+X9XwiXA
+Ph5NQrChgYkDgYYABABxf8s9SkDRA4ce3gRNyAPbUIqqSudLcLn7jY39hL/s+tF4
+cYeWmMKS0v1eF7T5NDY2xTGk+saKNak2ZVRrmoeGeQDz2WqGNwNpk6tdJEUA//nS
+dyESgm9kNmA9PrI0pE1cTlxXcjRnnE+d9yXuW5EY8j2KWNDMAQltr3Do3+wBKL3C
+6A==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAcX/LPUpA0QOHHt4ETcgD21CKqkrn
+S3C5+42N/YS/7PrReHGHlpjCktL9Xhe0+TQ2NsUxpPrGijWpNmVUa5qHhnkA89lq
+hjcDaZOrXSRFAP/50nchEoJvZDZgPT6yNKRNXE5cV3I0Z5xPnfcl7luRGPI9iljQ
+zAEJba9w6N/sASi9wug=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C2:KAS-ECC-CDH_P-521_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAktsxQlZNJ6XwAG+BmQj7obhQOKW8
+JQmQakl9qsZ/167g/C2rpOQzTurvDgAZIEtHHNiAJPghFdgUnMDPT3zhpNUBa60G
+I/UXsVjZiBhB0lce+61j+Fy+LlgZYMXWcGAaZ2AnJnWlSJliF+SrK4684x1x/KY/
+zDwI6Rwdjt2Rz2/oRfg=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C2
+PeerKey=KAS-ECC-CDH_P-521_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=006b380a6e95679277cfee4e8353bf96ef2a1ebdd060749f2f046fe571053740bbcc9a0b55790bc9ab56c3208aa05ddf746a10a3ad694daae00d980d944aabc6a08f
+
+PrivateKey=KAS-ECC-CDH_P-521_C3
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIA5UinnYsF+SO5gl0R
+tlbyIujLmLD4neHTFxhNxaaY98cRYe59wRzTH09PiuOpgeGj54veu5fXwgS5JhtO
++S4JGOChgYkDgYYABAAM6AAhftJD3RCnmtc99Xiqij+RlK9SjNEJS7/uJ6O1SBrV
+hiyIdsDD+RKUwKs6qAbZAgy6ou1yt/7NxaCaba1vMgFUPJq0WxJGkjKRjiHVo1H5
+pLnL+e+yr8xAL6mzFlC+wtZBoFxEDTUzHAiT0R+xMVEzWYizAzQTAac9xfYdV05n
+2Q==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQADOgAIX7SQ90Qp5rXPfV4qoo/kZSv
+UozRCUu/7iejtUga1YYsiHbAw/kSlMCrOqgG2QIMuqLtcrf+zcWgmm2tbzIBVDya
+tFsSRpIykY4h1aNR+aS5y/nvsq/MQC+psxZQvsLWQaBcRA01MxwIk9EfsTFRM1mI
+swM0EwGnPcX2HVdOZ9k=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C3:KAS-ECC-CDH_P-521_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA/dQNnp2XQCfLO65oIWLqwTKK1hvE
+NTxFv1r+dr9gfSiUyMziNpXZIPJGT9pHc9RpO+SzdzWEaRvbAym39MhswpkANM6s
+aj/vHD4cSUv+jYcrGDgyIZp+FNpBTU40dFc2cewZsDO+gxuRVDWQWSW0SUfFkpWZ
+RbTrfJUcO5yM9SUwuiM=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C3
+PeerKey=KAS-ECC-CDH_P-521_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00fbbcd0b8d05331fef6086f22a6cce4d35724ab7a2f49dd8458d0bfd57a0b8b70f246c17c4468c076874b0dff7a0336823b19e98bf1cec05e4beffb0591f97713c6
+
+PrivateKey=KAS-ECC-CDH_P-521_C4
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIByKrpS7ELjKT3vld7
+T7MrsjgQMsSULCT8LXU+fMXke0gzidnzuVbSDukAGx7vnyNUX3LFYCFABGg56WMx
+PD3syGShgYkDgYYABAEGoU4u6P+XCqirDHm5ejO7opWOBwt1uUc2t3u+P3dzJPpS
+hydxqoimOp6EkMM3jfTcdgzRTWK+cAd53RpDd5Q2VgAjZs45QeCyhLGqgSFdDTuX
+ePziPIzR5O1voKv2IVbJHUs+tVmZw0cb7SdenmDlqp1pDTEL+xXJxbvW9enrOWgr
+dA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBBqFOLuj/lwqoqwx5uXozu6KVjgcL
+dblHNrd7vj93cyT6UocncaqIpjqehJDDN4303HYM0U1ivnAHed0aQ3eUNlYAI2bO
+OUHgsoSxqoEhXQ07l3j84jyM0eTtb6Cr9iFWyR1LPrVZmcNHG+0nXp5g5aqdaQ0x
+C/sVycW71vXp6zloK3Q=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C4:KAS-ECC-CDH_P-521_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAmNmd7ggWVQ6E2/ztfogTf93PWBpy
+WkVQIRFf5J+Nw88jPNnqDm8DnceRnalzzc6sogXaOeC9mMgGJTbEfyWPRLUAzSJc
+h5c3G+DEKX0rRXdAEAx3QUHY8hTCO2GqK2zUgGubcHIqpJZftiL0K3OR4n5ewhxW
+ecWwa1kSc3KZfUIa3B4=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C4
+PeerKey=KAS-ECC-CDH_P-521_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0145cfa38f25943516c96a5fd4bfebb2f645d10520117aa51971eff442808a23b4e23c187e639ff928c3725fbd1c0c2ad0d4aeb207bc1a6fb6cb6d467888dc044b3c
+
+PrivateKey=KAS-ECC-CDH_P-521_C5
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAmwrxN8lpbHW35t97
+cxVrstRfSC5aQhcyT0eLEM63avCXJM+Gr6MW5/iZGNMdVIJKXDMQekg8FcFblu3G
+YTQLHA6hgYkDgYYABAB0jNu4ddNfS8y2Kr4g6C0y5MFNwv61uH2i0MyxHJttS3c3
+tsRvDftNiW4tuS/PU827ripATAur1WStet6sYnPvowGYSsq42PFzMj3gu2AnSyKI
+cWCTc7sioXKH6d7HSVhzq8CaiRW1TIRVyOAvZU9gLiOiu9ep67dPMAm9ZezGUIFM
+wA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAdIzbuHXTX0vMtiq+IOgtMuTBTcL+
+tbh9otDMsRybbUt3N7bEbw37TYluLbkvz1PNu64qQEwLq9VkrXrerGJz76MBmErK
+uNjxczI94LtgJ0siiHFgk3O7IqFyh+nex0lYc6vAmokVtUyEVcjgL2VPYC4jorvX
+qeu3TzAJvWXsxlCBTMA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C5:KAS-ECC-CDH_P-521_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAeuEVrarwQWkatrf7jJIfmdjtMtKD
+1nCE6Aua2cQMVs2YOJ+wqEnZ7PcmjCl7b5NAYRn0DjK1dz7SWiipqFxKdYgBoo4A
+Tjfurv4fTbtx8YeGlhQa86EKlpHE7ZNIchRkO3YfpLD77rJHz20/unpgaXU2rQP0
+m4Cp0csHlnNlSXfF+pQ=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C5
+PeerKey=KAS-ECC-CDH_P-521_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=005c5721e96c273319fd60ecc46b5962f698e974b429f28fe6962f4ac656be2eb8674c4aafc037eab48ece612953b1e8d861016b6ad0c79805784c67f73ada96f351
+
+PrivateKey=KAS-ECC-CDH_P-521_C6
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIB5I+qzubeyD/83pRM
+9r30zkuucnR4iOuv7kVbHpFYSXHvtJEnl2pS9BQpUvfCB+wCZfK3GM8+rZbqT2LH
+UuT3rNOhgYkDgYYABAEOsbTZFyvMI/TyDMlWD8VJKMPzTqYcADkdx2bHbtn6YIRJ
+N30eT63RI2AlQXMwtLkQhnBKzj5OZITGBuKpQ0eMhgFJQThkBpgl7h0IKNqfSpdx
+MAXpvRrbw7OMW5RpAHIalg/patLBs6RP496RVhNtRMsXy8JBVym7eC4Wv+Leswae
+Qw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBDrG02RcrzCP08gzJVg/FSSjD806m
+HAA5Hcdmx27Z+mCESTd9Hk+t0SNgJUFzMLS5EIZwSs4+TmSExgbiqUNHjIYBSUE4
+ZAaYJe4dCCjan0qXcTAF6b0a28OzjFuUaQByGpYP6WrSwbOkT+PekVYTbUTLF8vC
+QVcpu3guFr/i3rMGnkM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C6:KAS-ECC-CDH_P-521_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBJYgRXm9/e9z99X8DsWm0eXWLqv2v
+Vp0EE1mHss5hZMAqV2hetSdrXa5ildP+kGIPOLVTXG0iYMFz5h64iMqSAgMBVCwW
+nPl8JZb+Ld2EiiIuNnxffmJn68G82atdz0kVjxpI5K8pqJe35qggkcLbh02Oer8P
+WAZGkTRBVPOW267RiLY=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C6
+PeerKey=KAS-ECC-CDH_P-521_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01736d9717429b4f412e903febe2f9e0fffd81355d6ce2c06ff3f66a3be15ceec6e65e308347593f00d7f33591da4043c30763d72749f72cdceebe825e4b34ecd570
+
+PrivateKey=KAS-ECC-CDH_P-521_C7
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAwpqiI+qNZLSh7aJ/
+OdO8mOoBSN2Ywcvllfj9K/veEZyeAXpQ9dH8EhwIwc7zG3WIWVVus+DgQtjdaqrF
+egXKYeOhgYkDgYYABAAVEchI72DVQZqY0QIE2w/lgiQSQ3AGG8+k6SSdUGGMVr83
+IkcbJZ84Jju3soDSPK8qHuhzf5NxzbJzLNyVg2mTDAHUYWga5tjEm0xfTWAWFD+x
+vXSRVz4+0ObEi4LoIWRPh/gvDl8I/Rbx+Y+hdYYgCrAu2MYns1w/J2F+xf2S9FYg
+Pw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAFRHISO9g1UGamNECBNsP5YIkEkNw
+BhvPpOkknVBhjFa/NyJHGyWfOCY7t7KA0jyvKh7oc3+Tcc2ycyzclYNpkwwB1GFo
+GubYxJtMX01gFhQ/sb10kVc+PtDmxIuC6CFkT4f4Lw5fCP0W8fmPoXWGIAqwLtjG
+J7NcPydhfsX9kvRWID8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C7:KAS-ECC-CDH_P-521_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBaUkdVb0JBJ/fTCpTpmBID+5MA6BT
+hnXRzQm1u6eNrEhUPvEYoRc7P7+LIOOc4Oa4kKFjxQ+WRbPSHRy7O2Cm//QAg0lL
+Lrp2kQ/tM8dhgEUVAR+rUOOzd6vYqKBF2IbSI40sJorBtuyIvXG3unjiwzwVLkv3
+2l1WXkrL7PXpLHrWYrs=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C7
+PeerKey=KAS-ECC-CDH_P-521_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=018f2ae9476c771726a77780208dedfefa205488996b18fecc50bfd4c132753f5766b2cd744afa9918606de2e016effc63622e9029e76dc6e3f0c69f7aeced565c2c
+
+PrivateKey=KAS-ECC-CDH_P-521_C8
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAKGkr4r9cS0iTmEb7
+PVvOdGVLsmRuFfg4niNwihr631YVEeoNmVfQtTRTgZ1g+6j2Whj3sp3wIbG7Ac0W
+MpOsw8yhgYkDgYYABAHP3BDHmfXHnLaTCmX7o1F0jgdWeZPl5BDvTKzEzYoleEmR
+60Z05BBQ+TDHGQrIErkkX0inlztlja9AiCL+W4X2aAGA2d38mvd7nEpvAqg02xXl
+NeCzhFsszjA4gwG1HOy+MnYwfvQ5tcnmpy3C2U2Hm8OVBS27SleH0G77KAIQ+4vg
+Nw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBz9wQx5n1x5y2kwpl+6NRdI4HVnmT
+5eQQ70ysxM2KJXhJketGdOQQUPkwxxkKyBK5JF9Ip5c7ZY2vQIgi/luF9mgBgNnd
+/Jr3e5xKbwKoNNsV5TXgs4RbLM4wOIMBtRzsvjJ2MH70ObXJ5qctwtlNh5vDlQUt
+u0pXh9Bu+ygCEPuL4Dc=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C8:KAS-ECC-CDH_P-521_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAhBX1u9Du44fWwJ0O+KyvKcZttF1r
+oQGGCuRdPGDh4OP3JHpGJqYP3UBJZcNWbHn2RJ6FbOC/lGGfl9qNokvSz7YA/dfF
+nFjDYbxQp6XQ029yOxfE8q0rA8JNQtxQ90qMRloK/EaD8Q+rhGUt/p6SjCYmtUVk
+U+FXP/YL4VB0Z9Qx+7I=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C8
+PeerKey=KAS-ECC-CDH_P-521_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0105a346988b92ed8c7a25ce4d79d21bc86cfcc7f99c6cd19dbb4a39f48ab943b79e4f0647348da0b80bd864b85c6b8d92536d6aa544dc7537a00c858f8b66319e25
+
+PrivateKey=KAS-ECC-CDH_P-521_C9
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBGU0e5hP1Nmy8RLUE
+0hoM9nFeIJzTWPLdXz5xzA1n0OlkFoxCoITr2nRvmGOoa6z/yBnx7fG4xyfM+zBH
+JApXxDWhgYkDgYYABAFr0VyKWNNm9/Ky8pjMh7dIXp7nDRHRJEi4N3wKgsdib2ev
+9/l756NUa/QX7u3fdak8EwGRyEEIBC6i/KF/0/gNFAFWBQLQS3T84XQ6q0d6nR6s
+k+UiaYH9uXp0eM5M5Wb/ckOTEoT62FCwwryuDd0tl3kBYMGi53w+1slezES4niY3
+/A==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBa9FciljTZvfysvKYzIe3SF6e5w0R
+0SRIuDd8CoLHYm9nr/f5e+ejVGv0F+7t33WpPBMBkchBCAQuovyhf9P4DRQBVgUC
+0Et0/OF0OqtHep0erJPlImmB/bl6dHjOTOVm/3JDkxKE+thQsMK8rg3dLZd5AWDB
+oud8PtbJXsxEuJ4mN/w=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C9:KAS-ECC-CDH_P-521_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBxyHuqAWly6KfNLpXWHdb4M9hYObA
+hyP1qxe/lqH/K9lCeWGk80sH/AsUyksr9oRd69WoafEk6/p6py/lZQULfxgAtuie
+sOHc8YEjb3xUj9GowWsli1LBqb/T/o8ihBsmdjJl8HTEzPLWNK6XtwGVb2ehEAbF
+LZcZfZL1hfV0i8JnLus=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C9
+PeerKey=KAS-ECC-CDH_P-521_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=004531b3d2c6cd12f21604c8610e6723dbf4daf80b5a459d6ba5814397d1c1f7a21d7c114be964e27376aaebe3a7bc3d6af7a7f8c7befb611afe487ff032921f750f
+
+PrivateKey=KAS-ECC-CDH_P-521_C10
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIB/ZDj5BbpiqPytq+n
+8782jkUa2cpb1UtbFK7i7Wcj3eUYH1CFtoFpsJ++xyE3LM9rKEcT+aY1a41WCo/3
+jKNzfIihgYkDgYYABAHr6hsQ0+O5cbfvtp/IeN4Rx/Ry5OTThMMbjWKI2AcVF6yt
+6bOXlsevUWO89xrtp3dTPzgsbPCk2bu5OMhfRLeANwFrDj4ZwplrLL0f9kcw58qQ
+7coZhPmylRMzU15XSLqjSpn2H/TV+BIHng8B6HeJ8079rYCYAV7nSk+EbdGQ0W3G
+4Q==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB6+obENPjuXG377afyHjeEcf0cuTk
+04TDG41iiNgHFResremzl5bHr1FjvPca7ad3Uz84LGzwpNm7uTjIX0S3gDcBaw4+
+GcKZayy9H/ZHMOfKkO3KGYT5spUTM1NeV0i6o0qZ9h/01fgSB54PAeh3ifNO/a2A
+mAFe50pPhG3RkNFtxuE=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C10:KAS-ECC-CDH_P-521_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBw1gj5ECpNjq5jZ/Hp7wMBTLceXen
+kWVZm/GpzGTAD7OHtCzKNlKG6EMDYL+tNkO8MTVO2lDck2wyns22CQXED8sA2ef0
+M1MeRN9PbVFCAcuquwa63WeD4BERcm2BVTHSM8XNtyKJP/uyAnJZ1ZTed0OICXOB
+IMb3g5NPkmw/tptAxAk=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C10
+PeerKey=KAS-ECC-CDH_P-521_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0100c8935969077bae0ba89ef0df8161d975ec5870ac811ae7e65ca5394efba4f0633d41bf79ea5e5b9496bbd7aae000b0594baa82ef8f244e6984ae87ae1ed124b7
+
+PrivateKey=KAS-ECC-CDH_P-521_C11
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAkBLs/a3IXO1jCv6l
+NM3I6dGri+XzdT3PXysJtA7aZvxoWFSbw25vjfVZmM+poHA67PbEJ5nCRQEQZPUw
+wJ25g2mhgYkDgYYABAAjTjK+CpBxMdLRKKZHfgys64bwJHl0Xg/iRcszLeYxwHiH
+EWBILu71hOJ033+kEs6j4ekfcey6h4HZIF1IOGNBrQHPhkVbCbHABc/7qNdiiaN1
+lijIdL7qRi9R8wvVgeOAMTQwfe27dxszNO4Vvi4kLNecNAfS9Yk1RWxpQd2bbRVa
+Rg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAI04yvgqQcTHS0SimR34MrOuG8CR5
+dF4P4kXLMy3mMcB4hxFgSC7u9YTidN9/pBLOo+HpH3HsuoeB2SBdSDhjQa0Bz4ZF
+WwmxwAXP+6jXYomjdZYoyHS+6kYvUfML1YHjgDE0MH3tu3cbMzTuFb4uJCzXnDQH
+0vWJNUVsaUHdm20VWkY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C11:KAS-ECC-CDH_P-521_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQACTBX+4YvKtLoLlgbrrMyTnsylG8r
+qEWpvu7YfWmV9UkY7GYZuZMZVdWonU10rfEEa7NiGS8u9r0+PS0E3R+HBUoAqj+y
+RIM19pTjzaSuDMcbGy8qIG+oAtcmLxmYPERnT+FTJ6yqwfpAQkw5WmVWy4FnMSUn
++uWGXs/8FLvcF9p4zc8=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C11
+PeerKey=KAS-ECC-CDH_P-521_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=017f36af19303841d13a389d95ec0b801c7f9a679a823146c75c17bc44256e9ad422a4f8b31f14647b2c7d317b933f7c2946c4b8abd1d56d620fab1b5ff1a3adc71f
+
+PrivateKey=KAS-ECC-CDH_P-521_C12
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBtf+Ef47/ILiM+tQs
+BuWMN0Ly+PH9/WS1ObpIwlkmkmvV4zK0VknAsYT3clXp1Y/or6Gm2Wjiyx1GN3dx
+IMdlwSihgYkDgYYABAHePckmO8jElp3GhL4O7FS+/ZqfPboZTYZYp4k0G/DXjYTa
+ZzUifK+vCTUZUWkRl1c8jDYKEeUoVxK4u99ayRuXfACBLeWM0JXsLlqbJH6z7UHY
+vvaurOGUp6BbZapdKJ+8mxdw7IS7a+DCxkzDfB1Up/XXE3eprb4g8m9vK1RKgh6o
+MQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB3j3JJjvIxJadxoS+DuxUvv2anz26
+GU2GWKeJNBvw142E2mc1Inyvrwk1GVFpEZdXPIw2ChHlKFcSuLvfWskbl3wAgS3l
+jNCV7C5amyR+s+1B2L72rqzhlKegW2WqXSifvJsXcOyEu2vgwsZMw3wdVKf11xN3
+qa2+IPJvbytUSoIeqDE=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C12:KAS-ECC-CDH_P-521_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAgxku0LHLMfdYF3lJN/Zq2Rz3RVLN
+UQztuf1kExBCKvXQnyIcrSSe6BTRbdeshN7Z6s3Cg0D8/JwMBqvjCi/CjNgAIhLt
+hoyboPsskeLDm6k5lqPk6/RfKFLQkoxIkw6HXMe0KNDn8/TVA+XWDGjLSbE8JIDN
+SGvtkgDK3a3f5P+ONWI=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C12
+PeerKey=KAS-ECC-CDH_P-521_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00062f9fc29ae1a68b2ee0dcf956cbd38c88ae5f645eaa546b00ebe87a7260bf724be20d34b9d02076655c933d056b21e304c24ddb1dedf1dd76de611fc4a2340336
+
+PrivateKey=KAS-ECC-CDH_P-521_C13
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBGmNH1OgByRkjSINU
+zFM+fjX934H/D7f1a7Bybgwp7l3NxfOUulTPVyaQSKq24FWJXI2iS4sGOadCMUOQ
+zAQZDtahgYkDgYYABAD+MCZ/M7pc3vwly7PJMg2tnMsdfTdmRGIMpPre5WJqPO3i
+WtJUYk3vcnpwSPcUX3YWKqmAQvmxI7IHb46M9Zs/3wARRdxmMZU7bilF6UMB1suw
+mP5LBPfumwlBHfEE3ILX157EagHtDy0+fbbraAaUvesQfBB4rsbKvZ6+49NC/n5U
+3w==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA/jAmfzO6XN78JcuzyTINrZzLHX03
+ZkRiDKT63uViajzt4lrSVGJN73J6cEj3FF92FiqpgEL5sSOyB2+OjPWbP98AEUXc
+ZjGVO24pRelDAdbLsJj+SwT37psJQR3xBNyC19eexGoB7Q8tPn2262gGlL3rEHwQ
+eK7Gyr2evuPTQv5+VN8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C13:KAS-ECC-CDH_P-521_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBqJtjapPl0rpsIpK/IwM6hPBqOsEi
+DqcegGr74JeoBMxn6bqlFM+2wSyRlL4wISv3quf99tN2whLwVU5lZGP/q34Bgu/K
+9w/EEtM2YC4BTaRyVqC2BvKt3M6AU7+Beshla7TkLxTIy/Kmj0iKs13N9kBWJx3u
+H2BqRAukvU5aEbi45U8=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C13
+PeerKey=KAS-ECC-CDH_P-521_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0128ab09bfec5406799e610f772ba17e892249fa8e0e7b18a04b9197034b250b48294f1867fb9641518f92766066a07a8b917b0e76879e1011e51ccbd9f540c54d4f
+
+PrivateKey=KAS-ECC-CDH_P-521_C14
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAIrbSoi1x36qBHS2f
+nzH77Sfy4fPSOVON3z5MyMOaMwJm2yW3vAqXBPF73n81kr9fHy1LVgE6rMPY0bwC
+8A0xRsyhgYkDgYYABAC6OM+/n9JRij9h1DVJ56am0osr5X/9Pg+s62NrNO0X4ESp
+8kna6PwTLpN+LZNJzS7Xe7EEnOtpKi7FsXrWFQKmTAAeyR0wWFc/psBWSgKhoBAW
+DDE7x8c1ENyYPlRhaCtb4A285+LGgq1z8pyoIs3BEfaPq+M6ezhKZINCw8258FC8
+2w==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAujjPv5/SUYo/YdQ1SeemptKLK+V/
+/T4PrOtjazTtF+BEqfJJ2uj8Ey6Tfi2TSc0u13uxBJzraSouxbF61hUCpkwAHskd
+MFhXP6bAVkoCoaAQFgwxO8fHNRDcmD5UYWgrW+ANvOfixoKtc/KcqCLNwRH2j6vj
+Ons4SmSDQsPNufBQvNs=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C14:KAS-ECC-CDH_P-521_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBcgCz8Wpoy67Sv3i6jN37bP+sJiu6
+APvCX53HKgfOWTcpBImfNkxEyyZMCXtkfUQSvuPlGYktU02RKfiij3UA/ucAurqN
+ZypPSjtj3ki5b1bhjfXWj31w1RCYM/Q3cNZzLgazmtYNk+W0Pbh4nx7Aq6RyhqOe
+pYQjWs6nV9vxPVO1g2Q=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C14
+PeerKey=KAS-ECC-CDH_P-521_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0101e462e9d9159968f6440e956f11dcf2227ae4aea81667122b6af9239a291eb5d6cf5a4087f358525fcacfa46bb2db01a75af1ba519b2d31da33eda87a9d565748
+
+PrivateKey=KAS-ECC-CDH_P-521_C15
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAW6z/8mis9lU8PFg7
+Rk6jah014rJXpdSes0GdWglQh8L7TRXPW/WvgW0PP/dYZJDM093BqYs5zmN0nGKI
+zg29rH2hgYkDgYYABAA25IjadYFHKp2OYoxY1q1ycxG35qP2rjOoVE80sJKAJJAg
+vnGWkW+v2Q4uxUtmtUaNI2G5m1b6ANesN6u4xvFmUwEe25+4rbakP09fX9wUIcn+
+BPyLpGybZjNOOvknyL77QwcQTymazsTjD4Etk0XJcg0Zhp2//9TKPn0nE+tfw/Qm
+FQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQANuSI2nWBRyqdjmKMWNatcnMRt+aj
+9q4zqFRPNLCSgCSQIL5xlpFvr9kOLsVLZrVGjSNhuZtW+gDXrDeruMbxZlMBHtuf
+uK22pD9PX1/cFCHJ/gT8i6Rsm2YzTjr5J8i++0MHEE8pms7E4w+BLZNFyXINGYad
+v//Uyj59JxPrX8P0JhU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C15:KAS-ECC-CDH_P-521_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQATv1dvS+Xnjgxzpj4I1XWyhSldXhC
+h1iCmQq4Wrm3NS3WubL06poelcOIDWXR82AvnKZT3DRvrIWGWNdWJvTU+wgAYc8V
+29qn8xWJyYQANz2ihFBtcMifB07SYqnigUB5a3I2wu75kBYIXnFVL/SIxytzOf77
+eRXDhFnLIKuFrsTkUFI=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C15
+PeerKey=KAS-ECC-CDH_P-521_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0141d6a4b719ab67eaf04a92c0a41e2dda78f4354fb90bdc35202cc7699b9b04d49616f82255debf7bbec045ae58f982a66905fcfae69d689785e38c868eb4a27e7b
+
+PrivateKey=KAS-ECC-CDH_P-521_C16
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAjiyTxUI4diI6Y3yt
+NnyFidppotD8aGEvMZI65QIZ3yRS58ySYVtn8XtX/9L1KxkVS7QNdxUzZCD94uif
+7iRPWdyhgYkDgYYABAD6OzURjWxCJXD3JKJvkLKDOxkjkXTOoIHFMTP2TbYNaUDq
+EmEpnATB9Fh82wxMOWFkecG7DBRnmaEYAy3PmPiZwABp8EAikAYVH6MrUfZ5yIFv
+fBdQa0A4Cdx3zViirsQw2U0TtskW3pnzVapF/PvGhT1obHG+SWoGfSS/rqSBj8Uf
+dQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA+js1EY1sQiVw9ySib5CygzsZI5F0
+zqCBxTEz9k22DWlA6hJhKZwEwfRYfNsMTDlhZHnBuwwUZ5mhGAMtz5j4mcAAafBA
+IpAGFR+jK1H2eciBb3wXUGtAOAncd81Yoq7EMNlNE7bJFt6Z81WqRfz7xoU9aGxx
+vklqBn0kv66kgY/FH3U=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C16:KAS-ECC-CDH_P-521_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBKYkd4M88+C6MLPG/kLspb+AKsIyk
+W7eJLg4ielBP3QXSOBpESLaK3/nEFTyH6st4Mw2L1SUV+fmgtY6F9Ea7ThAAnt1n
+lpbT0dDvMn8gA4MlP2QTaD2eT8yHuzXxEsLxEAmNFeVwHXzu5BYpH/X+2F5of3Jz
+iLmv4mpPb+7VYLIY5rs=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C16
+PeerKey=KAS-ECC-CDH_P-521_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00345e26e0abb1aac12b75f3a9cf41efe1c336396dffa4a067a4c2cfeb878c68b2b045faa4e5b4e6fa4678f5b603c351903b14bf9a6a70c439257199a640890b61d1
+
+PrivateKey=KAS-ECC-CDH_P-521_C17
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIABNSdOdQNgRG/FtKM
+WTZVQyaxlzU+67z0dUU5O8jTqvmPFPW+cHS/s45syXuYl1QHTa3bMEX05M50Vmn9
+s+wNX6ihgYkDgYYABAEuwibQUM4Hx5s99NDwiR+fet9GLoyY28GioU9eU6P1rYlE
+M1h8xCmovp6h2E+jOxgDaQ2uBNpyGNMAJhV/yZXPUgBIN9+/NCb1e1x5MmkTCrua
+OPYYUyIRkxFU207rmu3ojlcpD4QuoPLqml90xiA6OSD+TjBfYRj2drFU4ddbnLXr
+iA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBLsIm0FDOB8ebPfTQ8Ikfn3rfRi6M
+mNvBoqFPXlOj9a2JRDNYfMQpqL6eodhPozsYA2kNrgTachjTACYVf8mVz1IASDff
+vzQm9XtceTJpEwq7mjj2GFMiEZMRVNtO65rt6I5XKQ+ELqDy6ppfdMYgOjkg/k4w
+X2EY9naxVOHXW5y164g=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C17:KAS-ECC-CDH_P-521_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBo8ICQOWfW3o+F8J10jFLoXQSEK1Y
+txA2+Mg8wfaw9Anf3ZET6Utn7DnDKRQmwj/8xEcFRnDSkI/4/mfcIwYDTFwB0oJb
+/Tr4seEyBXgME3/pOPhP3kAYjmHqAs6tgbrf20JcKffX+wMk3rrcELu5PeaPYsNQ
+aSaCg/UmWGXbV6efe/c=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C17
+PeerKey=KAS-ECC-CDH_P-521_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=006fe9de6fb8e672e7fd150fdc5e617fabb0d43906354ccfd224757c7276f7a1010091b17ed072074f8d10a5ec971eb35a5cb7076603b7bc38d432cbc059f80f9488
+
+PrivateKey=KAS-ECC-CDH_P-521_C18
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBGl0cx5zSv3PqEG8O
+YKWs4iCBO1Pie3OYZDNKB8AzZ+/aekYZ+m7vOpdGSSKDs8RFYQoCOpzEm/RZEUA4
+T8pci7WhgYkDgYYABADrB8czLu230wNgWdNffSKI1Dd9X0IzetOWQHn7EgzNTIvT
+hLWFYhBVIXAjrNmpT8s7llv7OUZ154it5Bod5z5iDABJGoNd4ubn3rfgkPShHyxG
+DAsfPV6U7o11EBTccgeE/TtUUAyG667xhCnwno6HbV0VOJaKAw13Fd3pnw2PBuKd
+WQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA6wfHMy7tt9MDYFnTX30iiNQ3fV9C
+M3rTlkB5+xIMzUyL04S1hWIQVSFwI6zZqU/LO5Zb+zlGdeeIreQaHec+YgwASRqD
+XeLm59634JD0oR8sRgwLHz1elO6NdRAU3HIHhP07VFAMhuuu8YQp8J6Oh21dFTiW
+igMNdxXd6Z8NjwbinVk=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C18:KAS-ECC-CDH_P-521_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAfi0Tjygy40Wuj/ZZV+QOXscWPwFr
+320koiQ9qmMdh4pKFng5kMciOCEw+eUfDBvW/1rJZ4Dki2j13slfQuYUS7UAsN5c
+iWeR9SiGsPCZE+JueN0LaXmPxN9tlePKcI7Ly8zhwYlfVWG7q6rjcunmfm4aO+YO
+GbRwzfZz7B/Dk9NCbiA=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C18
+PeerKey=KAS-ECC-CDH_P-521_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01e4e759ecedce1013baf73e6fcc0b92451d03bdd50489b78871c333114990c9ba6a9b2fc7b1a2d9a1794c1b60d9279af6f146f0bbfb0683140403bfa4ccdb524a29
+
+PrivateKey=KAS-ECC-CDH_P-521_C19
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBDJCMrxvnTGFrYl/I
+wfUURGpq7IO1k3FB1q+7Cox2Zqd0b6H3pmZKISPozfbNi/g2xW08Dr3MmA5DoYb5
+OPOniuehgYkDgYYABAAxiQ9Mer7D9yM2IoXXfSY2+HaBfbO7yIsB53NZe5af9vAT
+6kcMhUq0p3OQBOuMvqabgt3zasrdQGhxeY7LKsOqfwDYtCmuMlAma5ZDwMdlpg3B
+AVW8JTHPhicpb0l4tmQKnmAOGdADfVhQP6gHmVRqgU10eKVQqpDl6+sFJSf6rq5d
+CA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMYkPTHq+w/cjNiKF130mNvh2gX2z
+u8iLAedzWXuWn/bwE+pHDIVKtKdzkATrjL6mm4Ld82rK3UBocXmOyyrDqn8A2LQp
+rjJQJmuWQ8DHZaYNwQFVvCUxz4YnKW9JeLZkCp5gDhnQA31YUD+oB5lUaoFNdHil
+UKqQ5evrBSUn+q6uXQg=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C19:KAS-ECC-CDH_P-521_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAEYw2AiIJsa+OutGhK1ZvxIdEV24R
+mf6A3hzfhRzfA+W5CRqPfgeeg7f4JyWbaR0MIu4p1r33Pse7/XRvLNl6NX0A2l/0
+kEVIo0Li57pqH07l+EBBGpbPY+b+Yi8iwT5hTgqEfBGhqz8dEsyFDDLglWFMqPfi
+chR3tIbp/0A3KXfD9lw=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C19
+PeerKey=KAS-ECC-CDH_P-521_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0163c9191d651039a5fe985a0eea1eba018a40ab1937fcd2b61220820ee8f2302e9799f6edfc3f5174f369d672d377ea8954a8d0c8b851e81a56fda95212a6578f0e
+
+PrivateKey=KAS-ECC-CDH_P-521_C20
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBs31rcojeZxNgQl0+
+WsHMshgVB52Nc0Mem3Sm8OeuAEo1dXWxGtZmQs6Ld1WT66nZi/Jcde8LTTogmLvG
+QfWaK3ehgYkDgYYABAAYml7jTefjWu/q7vkiDBgHG0wppMO9nZVEWL0+gqejTaNM
+/1V5uBAcBlsfL1J89FgVAeKO9WcYc+ZSZ3M9ADUgrwHrS8UKe01Fmdfj+nc9256y
+UsmzQihy5US991x79g9RZt3BHrCPp8MIItq67jc6tGjrLZIuSE4qUn//LruAS32a
+Nw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAGJpe403n41rv6u75IgwYBxtMKaTD
+vZ2VRFi9PoKno02jTP9VebgQHAZbHy9SfPRYFQHijvVnGHPmUmdzPQA1IK8B60vF
+CntNRZnX4/p3PdueslLJs0IocuVEvfdce/YPUWbdwR6wj6fDCCLauu43OrRo6y2S
+LkhOKlJ//y67gEt9mjc=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C20:KAS-ECC-CDH_P-521_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBeA7f8cocA8++WT7cbASbyyhgKUqS
+w1VInZr7LnAgda3hyVOJWkViMKDN6QXeSj84Vz2/zM1nrW5+k/C1WB6Sal0ApUgZ
+YskWKWLn8OveyTaTXQ6qgT6CJtQNf2EZv9lAYCOAyGch5h2xgw9R4TnyEAALzsDY
+7dOeVNc6mhKflc1fqXk=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C20
+PeerKey=KAS-ECC-CDH_P-521_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=015d613e267a36342e0d125cdad643d80d97ed0600afb9e6b9545c9e64a98cc6da7c5aaa3a8da0bdd9dd3b97e9788218a80abafc106ef065c8f1c4e1119ef58d298b
+
+PrivateKey=KAS-ECC-CDH_P-521_C21
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIA8mYax2L2DF//I75d
+lpzNTsb5jk5yYY0Svc25tBAhYjM3iMC65Z+RzfwXLHoWge5E2WqyE1puXzQV67zV
+UWWxr7ChgYkDgYYABACo4lppAtaHtHh83JTDZKx87MXElUg+02PcCqle4r1znExN
+RrFwBscosHY1DX1+VMaCL1L0cWKiUQmqq6aQyraW7AFo0vCP4Z5Nye56GVsDyff+
+Znb59SC2JwVXUE5yykOUosaRhiXhWsDFG4+VzVYBI2U/uOjubblh4sTGLMVOkuKi
+qQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAqOJaaQLWh7R4fNyUw2SsfOzFxJVI
+PtNj3AqpXuK9c5xMTUaxcAbHKLB2NQ19flTGgi9S9HFiolEJqqumkMq2luwBaNLw
+j+GeTcnuehlbA8n3/mZ2+fUgticFV1BOcspDlKLGkYYl4VrAxRuPlc1WASNlP7jo
+7m25YeLExizFTpLioqk=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C21:KAS-ECC-CDH_P-521_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBbaz/oYPlMDCDozT3Zd5yTsXslAIC
+bUeXiEqYKKDTIajPrHSrc3/iCn1r78/HO2o1wcewHTc+MavBktSKQkGjWAMBHlMn
+ysItMF5xVuVZF24Zvufk8vWehvGp0LZgO2p98Qab3mOH/rcVh7j/zlsmbhuuht4p
+N4o05cdLZyTE1ApxmSM=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C21
+PeerKey=KAS-ECC-CDH_P-521_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=014d6082a3b5ced1ab8ca265a8106f302146c4acb8c30bb14a4c991e3c82a9731288bdb91e0e85bda313912d06384fc44f2153fb13506fa9cf43c9aab5750988c943
+
+PrivateKey=KAS-ECC-CDH_P-521_C22
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIA9DDKEmHwloGpKC6e
+lwqSNCJ7HV5Y1VjDzG7/RNG99T3hatXuKxi5LWL8eVhhFrDvwV95NA+36vXObEQ0
+Hc+N3iehgYkDgYYABABsHZteyofeH7hxoKMvgHxyWtzN6bOWdFOnE0fWCPDAMM0J
+4zjN7L9KAgFbyKbo0+JZX+dz/8L8TkpV0LGizAAyOwEUGyEJ5/SYHJUqqBiiufb1
+xB/szbenpFubS2cpN3cbAIyuX5NN/j/tENODqx84dpySzojZvlQUgX7LBzoxqzaM
+yw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAbB2bXsqH3h+4caCjL4B8clrczemz
+lnRTpxNH1gjwwDDNCeM4zey/SgIBW8im6NPiWV/nc//C/E5KVdCxoswAMjsBFBsh
+Cef0mByVKqgYorn29cQf7M23p6Rbm0tnKTd3GwCMrl+TTf4/7RDTg6sfOHacks6I
+2b5UFIF+ywc6Mas2jMs=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C22:KAS-ECC-CDH_P-521_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAoJFCHTcD47NB6fHn1Y+M9729F5jQ
+AZZ7gB0c7CfmBcWAsjh8HLRk9VznrIAzQQKrA8+4bYivdsn0EpwBvt07v8QAjJxX
+eo5vxEaBXp1AuqZgJfFdrihfGetmjuYK6cmOfs2/Kypo4ikoBZ9n2xiABxYdPs85
+fgiD8MTrfq94J6YiBcw=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C22
+PeerKey=KAS-ECC-CDH_P-521_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0020c00747cb8d492fd497e0fec54644bf027d418ab686381f109712a99cabe328b9743d2225836f9ad66e5d7fed1de247e0da92f60d5b31f9e47672e57f710598f4
+
+PrivateKey=KAS-ECC-CDH_P-521_C23
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAXcM67aA8LrIzAU7k
+aN/3U7cvc7AJkQQ+o1OCiuadTND63tp7sni1NdfFdAb/Lm5HOlpP+Y6Q+Q1trdJR
+AOjYVmahgYkDgYYABADIJbowc3POyN0kmO74LiH9mGIWjb/rg1k5gMqfgodTM4mf
+6U8Tfa8cQYnrUCk3w6Nn6nlR7YsPM3f83ykiAh1GpQFriiVA1eZUk4iLwzcknmfA
+pod08+jYHjtFdKASUWXwvVi4r53nSzWDJTn5XDzZ8bdZQIVgqmhRrjrHVVNHsNOx
+Ow==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAyCW6MHNzzsjdJJju+C4h/ZhiFo2/
+64NZOYDKn4KHUzOJn+lPE32vHEGJ61ApN8OjZ+p5Ue2LDzN3/N8pIgIdRqUBa4ol
+QNXmVJOIi8M3JJ5nwKaHdPPo2B47RXSgElFl8L1YuK+d50s1gyU5+Vw82fG3WUCF
+YKpoUa46x1VTR7DTsTs=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C23:KAS-ECC-CDH_P-521_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQATziBZoF3EonODLg6Ximhqwb8kfeG
+mUsjcI/wigig9nW4Ca6Z6fmWfrGknxlgV9aeUNbe203S2agcAr3Mj39RhGAAnvsk
+TIuRCH3h7tdmUA8OgVMHUtRpJW73n2uWXYoiMqDC28To4dCSFLqzhIW+bjV8QgDQ
+c7UvBOShb8b1JHGHrss=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C23
+PeerKey=KAS-ECC-CDH_P-521_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00c2bfafcd7fbd3e2fd1c750fdea61e70bd4787a7e68468c574ee99ebc47eedef064e8944a73bcb7913dbab5d93dca660d216c553622362794f7a2acc71022bdb16f
+
+PrivateKey=KAS-ECC-CDH_P-521_C24
+-----BEGIN PRIVATE KEY-----
+MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIA3xSx8UMqew+wU5Zf
+2GQ6/uJrJFHstqilOmVdX74W5MZM6GRyJesR5/3LI2J0cd/8XCUjvSromVfLo6V6
+I5M+WnihgYkDgYYABABOhYO7uy7Nk/BxTDMt/1qzvGOW5i88VgIpZkMpuqUTjDux
+w2Qoq9TiPRf8t6LPzCJLLnNMiUH28SFyLXtrlBVFdgHPCHTyBLA2PwIIZGcvrb+H
+yIEesUd1iyVLdLFPrnQhWfD2caAYISu/JbhRnhJtTK13jP/1DSiP05zrDKxjWxde
+wA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_P-521_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAToWDu7suzZPwcUwzLf9as7xjluYv
+PFYCKWZDKbqlE4w7scNkKKvU4j0X/Leiz8wiSy5zTIlB9vEhci17a5QVRXYBzwh0
+8gSwNj8CCGRnL62/h8iBHrFHdYslS3SxT650IVnw9nGgGCErvyW4UZ4SbUytd4z/
+9Q0oj9Oc6wysY1sXXsA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_P-521_C24:KAS-ECC-CDH_P-521_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_P-521_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBoyCZsCwL2FNx9gsN0giQ5sevBIyB
+eYkP2jCLNZ27wreoMruMZSbEr5mn6j8LPLlq4et2hBMnlcR4rW+WLkpvRG0Bdic1
+eznp12MqE3Cz6Twa+1yFG5EOtOrQydOH32fN6FAD4OQnVS8c0JBZqtAmLiNczl+6
+jO3E/cFGPadtzUttGkY=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_P-521_C24
+PeerKey=KAS-ECC-CDH_P-521_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01aaf24e5d47e4080c18c55ea35581cd8da30f1a079565045d2008d51b12d0abb4411cda7a0785b15d149ed301a3697062f42da237aa7f07e0af3fd00eb1800d9c41
+
+PrivateKey=KAS-ECC-CDH_K-163_C0
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUAZlO2B3OY+tx79eYBWBcB
+SMPcRSehLgMsAAQHH4sod9YCfZwa3kJE8t6hJpLvI9UFwV7ndiIccrhLNHzjg/OA
+Z7icPpo=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBx+LKHfWAn2cGt5CRPLeoSaS7yPVBcFe
+53YiHHK4SzR844PzgGe4nD6a
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C0:KAS-ECC-CDH_K-163_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBXQjbxQoxDITCUZ4Ols6q7bCfqXWB5CM
+JRuNoCHLrCgfEj969PrFs9u4
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C0
+PeerKey=KAS-ECC-CDH_K-163_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04325bff38f1b0c83c27f554a6c972a80f14bc23bc
+
+PrivateKey=KAS-ECC-CDH_K-163_C1
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUDrvRHVNDKl9QrTpeqkhVi
+Y8DgePahLgMsAAQBsBCMeGv000DwUFvfx9RbUUYRrZQCLJw51fuUVriiIhzqTwWP
+ao0s2Eo=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAbAQjHhr9NNA8FBb38fUW1FGEa2UAiyc
+OdX7lFa4oiIc6k8Fj2qNLNhK
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C1:KAS-ECC-CDH_K-163_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAWmXRAkv4rX+fsv2mHt66goG/SywA13k
+Qd+UCNkfDgId+PBSa4BjAxSV
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C1
+PeerKey=KAS-ECC-CDH_K-163_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=05f9ac3a3dd88429600958386c55bef4b1aa5f0c24
+
+PrivateKey=KAS-ECC-CDH_K-163_C2
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUDEXI0Lm03zB4GKkSUw5y6
+SPmtmoyhLgMsAAQDon7K7Ctm/qwgQPaJASi9AFjTGSQBQAfjIJttcSew85Pl5YsV
+kLn0C+I=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEA6J+yuwrZv6sIED2iQEovQBY0xkkAUAH
+4yCbbXEnsPOT5eWLFZC59Avi
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C2:KAS-ECC-CDH_K-163_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEApZdsVkXH1y356G8xhYRrqyoxSybBocd
+Hpwf6EUmgHaplYA6bUnNB1VU
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C2
+PeerKey=KAS-ECC-CDH_K-163_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=022e0290eda5d348894129f7455d1c766d32d5c2c2
+
+PrivateKey=KAS-ECC-CDH_K-163_C3
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUDKlEc3NS/xWfOrIwk7QTo
+iU33jd+hLgMsAAQGl42sqkfY87yQtB7H9Piseaht3QcH+LDvQnB2A3a8LV+u2D2n
+hyYx0J8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBpeNrKpH2PO8kLQex/T4rHmobd0HB/iw
+70JwdgN2vC1frtg9p4cmMdCf
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C3:KAS-ECC-CDH_K-163_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBVtowMLCRv4PLNVIS1iBTGUhPqVBBTnB
+HSWSovY5O26GxU35Cblf4NWo
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C3
+PeerKey=KAS-ECC-CDH_K-163_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=037f659f430009fcdae4e9f6e6316b0f5dbb268212
+
+PrivateKey=KAS-ECC-CDH_K-163_C4
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUCxvZP5gnrjutbU/q2MIiY
+5j/y4/ahLgMsAAQFSeGoLsKEv3fVKGJ+Utgy4jbJKtMBmIOqm0WLNb1UTWiCgSFQ
+wUl9MdQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBUnhqC7ChL931ShiflLYMuI2ySrTAZiD
+qptFizW9VE1ogoEhUMFJfTHU
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C4:KAS-ECC-CDH_K-163_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBrjvWmLTtjalp2v+se+P9Niz2eL8BnWn
+VyZnGDmNivZtKXF5hHji830o
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C4
+PeerKey=KAS-ECC-CDH_K-163_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00503bbb9b62f50ae7a8dfd74a1741826f09290651
+
+PrivateKey=KAS-ECC-CDH_K-163_C5
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUCalaGdRPd2MqU15I7qh9/
+sA2qOPqhLgMsAAQGwopA3E5VA9LEuKsLa3BG6OJawJ8BIZEWVKWDYAXYA22XZYX/
+HYMeWHs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBsKKQNxOVQPSxLirC2twRujiWsCfASGR
+FlSlg2AF2ANtl2WF/x2DHlh7
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C5:KAS-ECC-CDH_K-163_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBWxKNYassDCZ1Sss1KxZJpz1G4cwAkJl
+YcvZ2hsjpgA94OX3xKBlpcK4
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C5
+PeerKey=KAS-ECC-CDH_K-163_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=012cf17799fdefa2940b18d56e80d44414c5b13884
+
+PrivateKey=KAS-ECC-CDH_K-163_C6
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUDhoEQecgCHC159N6VLLLl
+mcQuGe2hLgMsAAQGCqQqYuIe6jfjYrTT3oN/DEnTrBMGmyDW/RbROxiD3wVimsfR
+uCOGs0Q=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBgqkKmLiHuo342K0096DfwxJ06wTBpsg
+1v0W0TsYg98FYprH0bgjhrNE
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C6:KAS-ECC-CDH_K-163_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEB0HGmk7bOGyU+BnRtd3QKB5P8pdlANMv
+lyq6yRvoWnCeugf10WIVrmAt
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C6
+PeerKey=KAS-ECC-CDH_K-163_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=062a2f926ab435ac14e05d44c27b46b6820b713aee
+
+PrivateKey=KAS-ECC-CDH_K-163_C7
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUA5G6cllJoZH8gSEdMexpU
+3/5yjx+hLgMsAAQHqYTq1EAxDO8uEziXL/Ld22XKw9IDM8GpNCf+asUCdgt3eImK
+i7akCtk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEB6mE6tRAMQzvLhM4ly/y3dtlysPSAzPB
+qTQn/mrFAnYLd3iJiou2pArZ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C7:KAS-ECC-CDH_K-163_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAe9HeV+w44BAWrXoje/DztmpJRSmAL5h
+gdf8A8qL/fEYac6ijPoOX19k
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C7
+PeerKey=KAS-ECC-CDH_K-163_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0399b9294e895486bdefbaad7a729353ce09586357
+
+PrivateKey=KAS-ECC-CDH_K-163_C8
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUCczSXFAWwRhw+3mfyujNn
+NEUag3ihLgMsAAQHZ8Me6TA7GyzTBZ+BUH7zBOvTECwCUeDUMNw/Y/Oje6seepV2
+Us9n4iw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEB2fDHukwOxss0wWfgVB+8wTr0xAsAlHg
+1DDcP2Pzo3urHnqVdlLPZ+Is
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C8:KAS-ECC-CDH_K-163_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEA3TX+bqM2opo3nJ50/+GdAMv1HwCA+3p
+lcOk6Kb+Ic0eTNTKOBLA1pKl
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C8
+PeerKey=KAS-ECC-CDH_K-163_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=022325a9a769a902c2e64c80a1d35429ced42ae0a4
+
+PrivateKey=KAS-ECC-CDH_K-163_C9
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUBm7SAc5ARI1xtXG501qe7
+TyD2G3qhLgMsAAQAk1SQdXBNedrncjF91lJE+nclaesCqKKCHdOdfnZTynHPwant
+hXgBo5s=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAJNUkHVwTXna53IxfdZSRPp3JWnrAqii
+gh3TnX52U8pxz8Gp7YV4AaOb
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C9:KAS-ECC-CDH_K-163_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBld99U4Rx+diAvlPVk5hN7I85uRBBok2
+YAqtyyX9QCTtPoRbK7+AcoDm
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C9
+PeerKey=KAS-ECC-CDH_K-163_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=051392d5377016358405030b48744003db66440a2d
+
+PrivateKey=KAS-ECC-CDH_K-163_C10
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUA9O21i8w9bp0xcilCCnMy
+gezP8c+hLgMsAAQCcYNgm3WTsYRTZcCB1F/2bJq143AGm5gSNv6TCUe2t383QoKh
+jkvpk8s=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAnGDYJt1k7GEU2XAgdRf9myateNwBpuY
+Ejb+kwlHtrd/N0KCoY5L6ZPL
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C10:KAS-ECC-CDH_K-163_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAmHRU0XOtJIimo10WX59/RmutoSKARSh
+Is4oyhViD3tAofJrQjTJVr3B
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C10
+PeerKey=KAS-ECC-CDH_K-163_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=045dac076e79de2fc631315465d3ef6245f26647e5
+
+PrivateKey=KAS-ECC-CDH_K-163_C11
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUBuZBJGhL97iMaoqEW4ePB
+yR0P1HihLgMsAAQD2oadCcTkVFrBaJ/HIxYBJjLQq9kCyCD0AxDl/9L4v0Ofuoeb
+su9iGyo=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEA9qGnQnE5FRawWifxyMWASYy0KvZAsgg
+9AMQ5f/S+L9Dn7qHm7LvYhsq
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C11:KAS-ECC-CDH_K-163_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBw44D0k3CgAnlUpOqIC8GSmyjFMpBG/j
+tFSvlCCoEfHhX3dNpa4aQLRZ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C11
+PeerKey=KAS-ECC-CDH_K-163_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=014f7a46847ed6a7ff605b0e52c616e4ad3f0d5029
+
+PrivateKey=KAS-ECC-CDH_K-163_C12
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUA6Cm5lC/ZZIf2ASkI/gT2
+2OqvGWahLgMsAAQFqyB0wE31cWAWdzX3/C2PYp00/xgBLp2m0Fuz4qy+W6SvtKDd
+ctsH1qw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBasgdMBN9XFgFnc19/wtj2KdNP8YAS6d
+ptBbs+Ksvlukr7Sg3XLbB9as
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C12:KAS-ECC-CDH_K-163_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBuYK93QZuf4PxcecoaIqEBFAJAW2BpvK
+NABbV4zXp6aSm9P2zimUO17Z
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C12
+PeerKey=KAS-ECC-CDH_K-163_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00eacabc34555956995623e60482e5c118e34e2094
+
+PrivateKey=KAS-ECC-CDH_K-163_C13
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUBV86PC2zpLkJuyZ8iOtgn
+Y+S9P/OhLgMsAAQF05icykrnMt6TZyslySYIYbTA3OMENqMx6tJPKAe1UmD53D3m
+aM+/67c=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBdOYnMpK5zLek2crJckmCGG0wNzjBDaj
+MerSTygHtVJg+dw95mjPv+u3
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C13:KAS-ECC-CDH_K-163_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBPdQ4nUA4Q8KF2uD8UvCbWvXHr10A55Q
+CQZ8DuLI9Vt+hNp6OR8Ir3UE
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C13
+PeerKey=KAS-ECC-CDH_K-163_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0414a622645107f115576f51cdf39d1393a2d7851f
+
+PrivateKey=KAS-ECC-CDH_K-163_C14
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUDeYhfRfLXB74cEdhsQbra
+STsqVgOhLgMsAAQFrjHLKbMdJPX5TDDpwC8H84v/CsgE2Njjm/h/BYVD3ImQqRIU
+2kFsxVg=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBa4xyymzHST1+Uww6cAvB/OL/wrIBNjY
+45v4fwWFQ9yJkKkSFNpBbMVY
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C14:KAS-ECC-CDH_K-163_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAqufW6lBAtIacGdh6sAJIZDxza0EBK3d
+d+GZwTLRisVBsRd0jSMZ23/l
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C14
+PeerKey=KAS-ECC-CDH_K-163_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=056be002daff11c4066e10acd046a85e170fa4c122
+
+PrivateKey=KAS-ECC-CDH_K-163_C15
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUAuoxYZNs+/XaLk3b8K2wf
+hfRvavKhLgMsAAQGL2IhSYI/JVtPhpBmZvOjVWrwgOoCdMoywQ+a3WGgJtIK061W
+sX+wakY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBi9iIUmCPyVbT4aQZmbzo1Vq8IDqAnTK
+MsEPmt1hoCbSCtOtVrF/sGpG
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C15:KAS-ECC-CDH_K-163_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBD0l0t6Sk7hNNRozyxpS9ZMKTIt2A9JZ
+2CNunI1kN/QebVRhHFIjj+LV
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C15
+PeerKey=KAS-ECC-CDH_K-163_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=021fef8e473daeda8ef6bf07814d7b9b613e3076a3
+
+PrivateKey=KAS-ECC-CDH_K-163_C16
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUD5QgEhNNzCyJIzMSCYNS9
+GFdgWtGhLgMsAAQFiupuQLjLJeZiKnvk/wG3nJLecqUEP2d2tt7/PSm0xwOJnXBc
+f+z1JcQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBYrqbkC4yyXmYip75P8Bt5yS3nKlBD9n
+drbe/z0ptMcDiZ1wXH/s9SXE
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C16:KAS-ECC-CDH_K-163_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAFYOGkIYZRGL6hbNrWtnq6OE7zh7BYsh
+PsKrOUL49q1gqVaVW1iQZrhW
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C16
+PeerKey=KAS-ECC-CDH_K-163_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03a287fd1cca68db47a3c74c12627fc3728568dd66
+
+PrivateKey=KAS-ECC-CDH_K-163_C17
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUAXQUroavqckl4yu8YeSRW
+ctWu+JGhLgMsAAQDa4Snczep3lwd1648iZOBOC8P/6QFbUrDn+iB/bjmDUVZZYqq
+3kVmPuU=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEA2uEp3M3qd5cHdeuPImTgTgvD/+kBW1K
+w5/ogf245g1FWWWKqt5FZj7l
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C17:KAS-ECC-CDH_K-163_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEA45IXekuQfHKymwOudgRpayom/NFAzGh
+Z3xGpo6WSBGpzF5OU+px4jEp
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C17
+PeerKey=KAS-ECC-CDH_K-163_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=029558b41b8b92387bc22c868f51bb7acb6e4ee2e3
+
+PrivateKey=KAS-ECC-CDH_K-163_C18
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUDkYAYep7dzzjcJk8FWwfS
+C5+ai8ShLgMsAAQEspLR+gnfxeajrZn9Av63TUgONPIG4YiACaCgSRwL5qv6yUPT
+d/C0hjs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBLKS0foJ38Xmo62Z/QL+t01IDjTyBuGI
+gAmgoEkcC+ar+slD03fwtIY7
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C18:KAS-ECC-CDH_K-163_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBkJZ5QBHbdo+l+JeSR1GbCt5WL1JA8Ll
+MoE5NkGlGNHc7/q+6LKb3hQC
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C18
+PeerKey=KAS-ECC-CDH_K-163_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0530020c8f6362312bfbe5c1c605b40dc2e032e81c
+
+PrivateKey=KAS-ECC-CDH_K-163_C19
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUBbTeGKxlXY8agHV45uUWa
+MlB8KyGhLgMsAAQDNEDkYMR18gWKdn7EZsoYvOQfgw4Dcq7jI9Bj+omsv/v1UCSu
+JOSSnxk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAzRA5GDEdfIFinZ+xGbKGLzkH4MOA3Ku
+4yPQY/qJrL/79VAkriTkkp8Z
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C19:KAS-ECC-CDH_K-163_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEA3FCdpl7RHji2LWa9fLmPiK8TDHkBnPy
+jZYqv+3uYuq0fDtFeaHlFoM2
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C19
+PeerKey=KAS-ECC-CDH_K-163_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0521673006a1d9608911d54536e122d809e919d804
+
+PrivateKey=KAS-ECC-CDH_K-163_C20
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUAbGWHlLA5yCCosDMAj6is
+dVa8rsOhLgMsAAQEy/soZpHkFQgaF4Xsawqs2x0jHR0F3WrP6R1oqOwjaGR4wO6M
+iSd67xQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBMv7KGaR5BUIGheF7GsKrNsdIx0dBd1q
+z+kdaKjsI2hkeMDujIkneu8U
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C20:KAS-ECC-CDH_K-163_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAnXsFfJ90tpuRN/mI1Ry1b06JQL4BY/Q
+ImKyfBhd3iayx31aT01Q3Jko
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C20
+PeerKey=KAS-ECC-CDH_K-163_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0460579beca16cccce314ff3040de4785336fc358c
+
+PrivateKey=KAS-ECC-CDH_K-163_C21
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUBacjaIsNahVSVBHoQS+AL
+FXW2UquhLgMsAAQEXv7ZyL0qTkKViPNE9J0eY+ZovQECXRr4WsIdWYItffjw5L66
+3ztdRAE=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBF7+2ci9Kk5ClYjzRPSdHmPmaL0BAl0a
++FrCHVmCLX348OS+ut87XUQB
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C21:KAS-ECC-CDH_K-163_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAjOvNhAwOSJvQW3SLhomtz+Qk9OKBzQl
+ihdcl3aKn3K4JLmakfXPjj2W
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C21
+PeerKey=KAS-ECC-CDH_K-163_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=05ba66964483fe473ccbd00c37ad3ba40cc5969f62
+
+PrivateKey=KAS-ECC-CDH_K-163_C22
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUAAy/HkIZGMmMMSaKemtD7
+bRDytYyhLgMsAAQHec+z4XyQKiWE7TOCqL7YJi25hCQASvJzh1+KKrmpSsDR5KIz
+kLK7UFw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEB3nPs+F8kColhO0zgqi+2CYtuYQkAEry
+c4dfiiq5qUrA0eSiM5Cyu1Bc
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C22:KAS-ECC-CDH_K-163_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBtAyFSJA8ovn90349tKkUMEimlqVB6ra
+x3zERImF0XlGNrwdWC89EBoz
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C22
+PeerKey=KAS-ECC-CDH_K-163_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0277c4a76e1613b2ede699a675c1645a786075009e
+
+PrivateKey=KAS-ECC-CDH_K-163_C23
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUDwd5btA5wkz7X24TOLLRo
+y7opmzqhLgMsAAQF/+DxYBi9S97l9zv9rQTXE/Ihb1AEI2HIgfAIHLBUTvqww7NP
+Weqt7sQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBf/g8WAYvUve5fc7/a0E1xPyIW9QBCNh
+yIHwCBywVE76sMOzT1nqre7E
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C23:KAS-ECC-CDH_K-163_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAfhYHsYd8UCSJ6q3oBXyxx0p43FsAcH1
+HMQYW2iiYOMbSwDAOkQD9lwl
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C23
+PeerKey=KAS-ECC-CDH_K-163_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03c6481dac387af39e8c09a553068ac496eea03691
+
+PrivateKey=KAS-ECC-CDH_K-163_C24
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAAEETDBKAgEBBBUDiBJ1uki+oL7MAhGQNGf1
+0KrjIaqhLgMsAAQHduQP5xSZhTN+8bbJuDDLNgh1KqYFjm7LsnsLLTzQ46e6U43j
+V2/VufY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEB3bkD+cUmYUzfvG2ybgwyzYIdSqmBY5u
+y7J7Cy080OOnulON41dv1bn2
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-163_C24:KAS-ECC-CDH_K-163_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-163_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEAroi+9qqqAbIVw8UrUyIKmEMy42EBtRD
+jlKMqIewW9JWTfk775v2YNp4
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-163_C24
+PeerKey=KAS-ECC-CDH_K-163_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=07b5d096d06d41c3ad6458cc93417e6facc99bc7b8
+
+PrivateKey=KAS-ECC-CDH_K-233_C0
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0TWluMPOBH+8XfJid9O/g6
+wz3a21z0oFDKgr5I8KFAAz4ABAGlPlwTiz2DkF1WOqHbASdGM8mGtS94IlqS4z55
+UgDsq9Pi4mcpqWVgTlYO1EmKIrMcOWQuHPmbHd4+xw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAaU+XBOLPYOQXVY6odsBJ0YzyYa1L3gi
+WpLjPnlSAOyr0+LiZympZWBOVg7USYoisxw5ZC4c+Zsd3j7H
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C0:KAS-ECC-CDH_K-233_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAfQONLPtShstQMBW+3XyrVQ8iXz9gvVC
+z3RqDyAvAMEwoavpK8TJd8gAd3mWzMULkN+ZGi6B3VFcGIWZ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C0
+PeerKey=KAS-ECC-CDH_K-233_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00a822b141ca1f5ad32899e68c54d1fec3df8100df485ebf1c5868a9ac89
+
+PrivateKey=KAS-ECC-CDH_K-233_C1
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1Rvm+81IeMVUObC8u+Xqjo
+S8nbiecKjo6/NHgtqKFAAz4ABAHFoeXT7lFuPt5yP6LVzTRWsRYyYwPF7kknOlYE
+xABWjQ/nEwKVVBv6JlB0FHVG6XM3NroAdVnXFtjglA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAcWh5dPuUW4+3nI/otXNNFaxFjJjA8Xu
+SSc6VgTEAFaND+cTApVUG/omUHQUdUbpczc2ugB1WdcW2OCU
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C1:KAS-ECC-CDH_K-233_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAMhkwqRiqTY6SsPYGCEbygNpRy0YYoii
+dWdDO9pFAGidTQAG66BU3Gn8wHhngPtfdNOYkhNQTi9uZmmA
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C1
+PeerKey=KAS-ECC-CDH_K-233_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01662682bec2dfae05e38587c8e6a4d18aef4cb3416989c47c11bbe2810f
+
+PrivateKey=KAS-ECC-CDH_K-233_C2
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0uzKWV5V5shcWveMWVQP23
+SQA/9Ow2HDi0jn2mvKFAAz4ABABaSPrEdsMcrQxo5k5l5oeuRBj7XTtLsqu5kN0N
+5AAtmt1wZibyhZ7OEQ3y3eifrz6KrEM+JZXiPCdAgg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAFpI+sR2wxytDGjmTmXmh65EGPtdO0uy
+q7mQ3Q3kAC2a3XBmJvKFns4RDfLd6J+vPoqsQz4lleI8J0CC
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C2:KAS-ECC-CDH_K-233_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAXgtgvzSEcAkfIfmV+/MXS/2sF65NTMK
+U5A/s7+jAMzoMKUV1pCrmBSVea00gThIWeVl0H+mH1Dr1mmi
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C2
+PeerKey=KAS-ECC-CDH_K-233_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00215d511cb95e0e073ee999908a7a844afd75c9acb7a9d724f7fd322b01
+
+PrivateKey=KAS-ECC-CDH_K-233_C3
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1qfAOJLfGE1Wzcy51emhZI
+OmyTiK4hKqkmyP37XqFAAz4ABAFKr4gOgdtpq6K0A7vafzYeMzm0g84mmfML9Sge
+rQG3FVm9fZOE5Re4fxE4ppb7zrNRDYxBwhWNSqPlsg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAUqviA6B22mrorQDu9p/Nh4zObSDziaZ
+8wv1KB6tAbcVWb19k4TlF7h/ETimlvvOs1ENjEHCFY1Ko+Wy
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C3:KAS-ECC-CDH_K-233_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAI2ADTdnq/VzFpV1TuiCm4WP9OtgSkSK
+1mSQtJwZAbwPAzlkmtTXt8/z/KnpZaOGJej0W8lgKjPAeYoz
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C3
+PeerKey=KAS-ECC-CDH_K-233_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01394e02c70104f2a5308b2d101b02c70ef2d13540602b8e8f82dc6d569f
+
+PrivateKey=KAS-ECC-CDH_K-233_C4
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0uL/h5G8ZMAPOw8dXVz7nd
+s7GTgUWZ99vd7e/Po6FAAz4ABAGARcyeZfbideMipiwY7+LQDPk5lf61NWEnOj8T
+BgFk4Ac8DUs+EuIvg3vT/sQh47sJ4MDdmXQigw9kAw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAYBFzJ5l9uJ14yKmLBjv4tAM+TmV/rU1
+YSc6PxMGAWTgBzwNSz4S4i+De9P+xCHjuwngwN2ZdCKDD2QD
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C4:KAS-ECC-CDH_K-233_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAUo+EhrdelJn9crSBLP0khUIR4ayP42U
+2f2gLg8ZADlP6hddrZs01SVDRlTQyGY3kmysOjKSouSlFLX1
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C4
+PeerKey=KAS-ECC-CDH_K-233_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=008556a4c3a8906ddbcb946099ca5dbe7bdb6cd8f37fbb50c96fcefed32d
+
+PrivateKey=KAS-ECC-CDH_K-233_C5
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1mly5xVmdG8vdsh3k3dAVO
+onXip+J6t8LQXF8kEqFAAz4ABAAgIm3XPjGOT8jUndQ+WeJgGT0bskjL5MBrTWuD
+iQDtEqTziWlqsxyT6j7E2Orxi+CX/JFS4sQrc/9FKA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEACAibdc+MY5PyNSd1D5Z4mAZPRuySMvk
+wGtNa4OJAO0SpPOJaWqzHJPqPsTY6vGL4Jf8kVLixCtz/0Uo
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C5:KAS-ECC-CDH_K-233_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAIlmeIj4QlxaYjE0Yi8eqdmvNt+XcsQQ
+1uMfK024AIRDD6RxZNHA65cEKkTL70ALu1RfrqTvSbpeO+9C
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C5
+PeerKey=KAS-ECC-CDH_K-233_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=004ea6e0e34ec7c9bbad47f0f6f8ec0608e736d91e0e56cf3e5cffe8c370
+
+PrivateKey=KAS-ECC-CDH_K-233_C6
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0eU7qha8AmK1MppxGw6xiK
+G8p+9LXIUGEiXUHUqaFAAz4ABAB9bXhfoyMXTrnN5bcFQo5AGSRINbyUcC8oDCX/
+5QGaoO9DMHTEhNFOYRNy8D74kS8agkbOsekMgX2z2w==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAH1teF+jIxdOuc3ltwVCjkAZJEg1vJRw
+LygMJf/lAZqg70MwdMSE0U5hE3LwPviRLxqCRs6x6QyBfbPb
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C6:KAS-ECC-CDH_K-233_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAWTaCZIl6zxkH8g8dyBKOW6rlJWxKiL2
+jnpLg5nVAM2Y8nBMdJTm0gN150UoyPVvhn6d12MpgULqAXJL
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C6
+PeerKey=KAS-ECC-CDH_K-233_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0160d0b9b92a4acd089738fd489ae39734551e888fd05a020ce26498270a
+
+PrivateKey=KAS-ECC-CDH_K-233_C7
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1CqAMqEdFld1XEnkdwM7DT
+Qdov6ZOkV3tBpAzuGqFAAz4ABAH2YpaX2mINWX/B9RyDN0IT836VL8EX7mWp52au
++wArNt7ceHrJUdKHnXJBTaLnV1ps18QuD6ILMtRh9w==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAfZilpfaYg1Zf8H1HIM3QhPzfpUvwRfu
+ZannZq77ACs23tx4eslR0oedckFNoudXWmzXxC4Pogsy1GH3
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C7:KAS-ECC-CDH_K-233_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEADOosIo8M8NDAyztHA9egm+TLe6HnsFg
+eir11GKYAGxPJ6SbUaifbQlgFguluP7AjdLNS8kJpJCuvk97
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C7
+PeerKey=KAS-ECC-CDH_K-233_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0038381b342efaa70bb79adb76ceb775de5f45f863559ecaee1ddbbd0313
+
+PrivateKey=KAS-ECC-CDH_K-233_C8
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1D5XcJeBlfkXFS8Fe6H7AV
+bYlNMui7VMf2L3NApqFAAz4ABAFIfR/avM19idolaFsEKYCrFwruPBHzEYDjt8UK
+SgF+OD3WWh7IpAkAf3UDXlsWEzXZx3Vu2XBJD70XGg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAUh9H9q8zX2J2iVoWwQpgKsXCu48EfMR
+gOO3xQpKAX44PdZaHsikCQB/dQNeWxYTNdnHdW7ZcEkPvRca
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C8:KAS-ECC-CDH_K-233_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAM/hX4YaoBU0hfOKwDPfnI2BKv3hZ7iR
+i7lKCNljAb6/Bn+FEm0RSTIWIWQgGxN0vxhAqhHV4lBjnQYI
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C8
+PeerKey=KAS-ECC-CDH_K-233_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0122169f1dff445ec663270375dfe914016c38ce6c2d40d0b8098abc60ac
+
+PrivateKey=KAS-ECC-CDH_K-233_C9
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1MZ8YQPmISRgCg2ekj3CF6
+Ai9Xxv6yGccDM0/zOaFAAz4ABAAjUv6TQeYsYJ/BU44CcEBecAHXR7h1AOZEoRLF
+2QBB87FbcUpvfvZH4jZl6lMO/L4ZsHQENs2oEug5OQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEACNS/pNB5ixgn8FTjgJwQF5wAddHuHUA
+5kShEsXZAEHzsVtxSm9+9kfiNmXqUw78vhmwdAQ2zagS6Dk5
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C9:KAS-ECC-CDH_K-233_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAHY+KGvlB0C3+L14+nC8rIgN89c3HrM/
+2iRTs+0jAFe+bF99mQt1Q5hoM5rjJ68EoEmzi5IzK5y4yyfZ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C9
+PeerKey=KAS-ECC-CDH_K-233_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0054d47c9d0a9fee258122326be25daf35f0ba0b8449e16b4623a8c0fd7e
+
+PrivateKey=KAS-ECC-CDH_K-233_C10
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0Z5U2ocples9zczFBBjsNR
+QAiJ+udaC6Tc/yXx+aFAAz4ABAFeZ+rr5Sujf1tzoZnZUIEs7BAS/UEFgURLvyPg
+yAAiBV74Id8zBC+4MW3a12SF29JZDi9UmKkU5PCtOQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAV5n6uvlK6N/W3OhmdlQgSzsEBL9QQWB
+REu/I+DIACIFXvgh3zMEL7gxbdrXZIXb0lkOL1SYqRTk8K05
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C10:KAS-ECC-CDH_K-233_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEALyKca1METTe8Cbkcj4xAiP7LFhZvHWU
+BUyJTaVSAMNlBWNQVTUDPHpsRI1zv6CPuDcCNMf9usGzTaoi
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C10
+PeerKey=KAS-ECC-CDH_K-233_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0071aed39f5c44a7ff72db3e0f8284da39dfb2d894f278d2006f9d2686e3
+
+PrivateKey=KAS-ECC-CDH_K-233_C11
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0Tpf/JoPcGnBxmFIaZYS5c
++rfiv3syVfGBoCJxkqFAAz4ABAGN5NxPak3lw2OOu6JNxwZJg7FZ9VsTnHaAocuQ
+0QE1Uy2BSK8+In1KiWDnaMVl9ywawKHJp70YXPmU0A==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAY3k3E9qTeXDY467ok3HBkmDsVn1WxOc
+doChy5DRATVTLYFIrz4ifUqJYOdoxWX3LBrAocmnvRhc+ZTQ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C11:KAS-ECC-CDH_K-233_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAWzBrhP7NIJSSTAhzWFG1THwtyKEKkTH
+l5aJ8f84AYwJY/8Oo3BIyfb0dkTyp8jFA4Y8J88h7m4KMiTq
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C11
+PeerKey=KAS-ECC-CDH_K-233_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01ca68ead4eddc8847a3a661cc6628e076bdd4b45047ece72245d094dd3b
+
+PrivateKey=KAS-ECC-CDH_K-233_C12
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0vXSp+CHekyZBzcyOG6NWX
+NKI91/Dff81U2UHnYKFAAz4ABAFHmAlGgMvTL7HuncqmuHOaVWMFI1kz+ycVfTGe
+VwHIVfDUU8H/tfZosyqLPjCeDoEBvDm22+feIUAV4w==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAUeYCUaAy9Mvse6dyqa4c5pVYwUjWTP7
+JxV9MZ5XAchV8NRTwf+19mizKos+MJ4OgQG8Obbb594hQBXj
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C12:KAS-ECC-CDH_K-233_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAOSeGCrF2TK+iwX+NA6Mty3zVkfezWea
+jFm12Pv6AYG5WpZavRbsJDDCbdBxmE6FSpZ/8RTueDG9MUsq
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C12
+PeerKey=KAS-ECC-CDH_K-233_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=017a893b2e090780ff8daaf3588f9dfc0ac4dfe1f1e263697a9d1f398ab3
+
+PrivateKey=KAS-ECC-CDH_K-233_C13
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1lKhH2wxF/Eyb6aHdAXOxz
+McTxRql/dKsMRN4Bt6FAAz4ABAAs1tTB0sxeNCBerblPTP01u1adpyLE2bGbjVzC
+3gDqMATlsJMN9/i9oxTIvBFFRj62ACLNLc9sDIJOUA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEACzW1MHSzF40IF6tuU9M/TW7Vp2nIsTZ
+sZuNXMLeAOowBOWwkw33+L2jFMi8EUVGPrYAIs0tz2wMgk5Q
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C13:KAS-ECC-CDH_K-233_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAVmLL9tb8aOVH7nsAW7LTSj2bC6dE1ln
+hlk1hdcZAe9lyvFXldFKC+icrHxoAyO8WYA7qHTLKWhnLLip
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C13
+PeerKey=KAS-ECC-CDH_K-233_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0041fa5fdf495b885699249b7746334b76c59e1c917bfc1ae371b96941f4
+
+PrivateKey=KAS-ECC-CDH_K-233_C14
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0q1fccY4SvYmibNcJMTd+z
+Ws+BBssMGVAsLKGEr6FAAz4ABAD+G1JAinEoQb1i8O5RMH8mMx1AK8w6WrBAXRxe
+gAEKcxp9ampPW0Cy6qgQwZAtsnso0pe8BfNxTKyvwA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAP4bUkCKcShBvWLw7lEwfyYzHUArzDpa
+sEBdHF6AAQpzGn1qak9bQLLqqBDBkC2yeyjSl7wF83FMrK/A
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C14:KAS-ECC-CDH_K-233_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAbbP87f6IV43hgXJP4b1zThF9F+96L4H
+newpvIhiAWYiLvpdup6FjCRdu12maCOatbpyhhj7hakN3HYK
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C14
+PeerKey=KAS-ECC-CDH_K-233_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=015f5adba59d1ee01696cecce4b63e78e68508303ee496ff5abcea25ad3b
+
+PrivateKey=KAS-ECC-CDH_K-233_C15
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1vActUeBy9ptiN61mEOuCD
+axr2g+/HVlC+hPIIp6FAAz4ABABNAKjwgg2pCX/lDo5979rClgfdTLHdiB1OYfHn
+iwCKSo6cgRtEQ2eVJ1KrjCpRmO+yj77b8/vXAahXqQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAE0AqPCCDakJf+UOjn3v2sKWB91Msd2I
+HU5h8eeLAIpKjpyBG0RDZ5UnUquMKlGY77KPvtvz+9cBqFep
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C15:KAS-ECC-CDH_K-233_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAM9AKuvD5CR6mrQ9qXVRdqgQ4BH5/Zd9
+4b4v1TT7AbrEX6QtYFrTR5x8Q+ckkQcWc3lTzIUErxTzMdNP
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C15
+PeerKey=KAS-ECC-CDH_K-233_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=003d5c29b3753e89ce5064575393392b377ca657a0b73872c82165fc43ae
+
+PrivateKey=KAS-ECC-CDH_K-233_C16
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1dwboYOfXR/qhas2FMVanF
+/mAIU8caYZg8fcgt4qFAAz4ABAC2y2/6Ti6rz3uYfrtSAWWo7Joipvn/sQDzgXKg
++wDTmBThhSR25W6JzozdZDcoQMAVcKhpQKziS7nPag==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEALbLb/pOLqvPe5h+u1IBZajsmiKm+f+x
+APOBcqD7ANOYFOGFJHblbonOjN1kNyhAwBVwqGlArOJLuc9q
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C16:KAS-ECC-CDH_K-233_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAPOMzM8I5b3/O7NffnW9ztaNN5Hc94Q8
+qI/wkhNtAV7XaXpLjJnQFHgo9shh/8nPsPM9zp0UsHMeHaJi
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C16
+PeerKey=KAS-ECC-CDH_K-233_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=007c01f906caa590898a09f46b6f5383658e7fee656aca0f111f22939960
+
+PrivateKey=KAS-ECC-CDH_K-233_C17
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0kHh31WHAx3drhlokcKIIc
+x4ea01gyrnGPbnkuZqFAAz4ABAHBcs7it2UD602Qs53azoJbI8Mjdcto6uzXNISQ
+owDCRu+cbi+trHfHPundWt7oKLeRhBc5W1mXvhoCeA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAcFyzuK3ZQPrTZCzndrOglsjwyN1y2jq
+7Nc0hJCjAMJG75xuL62sd8c+6d1a3ugot5GEFzlbWZe+GgJ4
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C17:KAS-ECC-CDH_K-233_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAeMoVx35M6z9TJbzxL3nHpF1y81iruzX
+Y4R0Sg8/AZ/0iq4MJS7ajTQLJcTdoBovIaqjXTm68DZpahEB
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C17
+PeerKey=KAS-ECC-CDH_K-233_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=019eece7d3fafc9274d361c6fafd9efd9ee485cbacb3baaf6834feb4df6a
+
+PrivateKey=KAS-ECC-CDH_K-233_C18
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0ESsVakTqMf37X/FZ59S9H
+y7lzAyW+IbeZN3nRh6FAAz4ABACXlIYQF7Pevv8wLkJTJ/4mnXh1O3O8G/s6d/cW
+3AACWBpJwSafXsho3G1/XC2OdJYy1Hq22eaNutmF8A==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAJeUhhAXs96+/zAuQlMn/iadeHU7c7wb
++zp39xbcAAJYGknBJp9eyGjcbX9cLY50ljLUerbZ5o262YXw
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C18:KAS-ECC-CDH_K-233_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAPSqf5NAqdpGxPBnKHU6Stxa9TpNy0Z/
+cLSHPaeFAH8yHivE4pporCPHfO3Tu83gv3uSon/6dklpiJgd
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C18
+PeerKey=KAS-ECC-CDH_K-233_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01e4b7e89fb1b51179b8792f5cd581c3917e11246d3846f6344ee82eed66
+
+PrivateKey=KAS-ECC-CDH_K-233_C19
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0rwTZ3hTEInaXC+rPK7sJW
+xUsLNfwsZfe47mFhw6FAAz4ABAH7JYox0Wa++c1mTNe2bNjBhucCXHfwuucxWH6e
+9gBg39TkdekoBdGTXQOC3BdnBnkVzADtOyT2U4LSGg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAfslijHRZr75zWZM17Zs2MGG5wJcd/C6
+5zFYfp72AGDf1OR16SgF0ZNdA4LcF2cGeRXMAO07JPZTgtIa
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C19:KAS-ECC-CDH_K-233_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAGjZ5V56EFt7tEsh1mm7DvZXqRQ3rYS/
+bVhTJwyYABQ8i+21TbB9+PZwg8WaCqfNig76QvQv1i5ELgti
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C19
+PeerKey=KAS-ECC-CDH_K-233_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0145710c3ab0780ec233424d4e28b38d29f886965bbcac49fa300e1ed886
+
+PrivateKey=KAS-ECC-CDH_K-233_C20
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0NVllUcUNdlf7DffYi8Y7n
+2rskN5yCu/cUxavF46FAAz4ABAGlKUCkUqr0ILN7XzLCwzcwaJSogv7qet2twBkn
+7gB3G59ioqb6iSUDIlJ1SQOIuL/C33ffPoBr7bp9iA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAaUpQKRSqvQgs3tfMsLDNzBolKiC/up6
+3a3AGSfuAHcbn2KipvqJJQMiUnVJA4i4v8Lfd98+gGvtun2I
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C20:KAS-ECC-CDH_K-233_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAJnrkc2phiAQPDIF1kieaK1+V9ClHcUC
+1uMFiPQYAD+/gpkp7dKOkG9Y+Hq+1tbRd/Q28N2UDdol6vGI
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C20
+PeerKey=KAS-ECC-CDH_K-233_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=006941a2a531083563dd886b06c0860770a4724bb04a4ebb2afb1ba2636b
+
+PrivateKey=KAS-ECC-CDH_K-233_C21
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB0ZyKsrMvLuk78v9rxEN4tg
+hyva62ula1FMjziLp6FAAz4ABACDUw+j3zFah0CsUvTTlLgMSl8hC6ugttwiBeEk
+kwA3udAu1D6dQdDbuEA7kCG00sG9Ng7lPDHCe0kgBQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAINTD6PfMVqHQKxS9NOUuAxKXyELq6C2
+3CIF4SSTADe50C7UPp1B0Nu4QDuQIbTSwb02DuU8McJ7SSAF
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C21:KAS-ECC-CDH_K-233_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEANzKoitDOR3AUll6470HxuXwIfOemHdW
+9lSBce6UASjv1JrzprMtwWeXqXjwrUqw22arq9atVnL0+BLJ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C21
+PeerKey=KAS-ECC-CDH_K-233_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=001d754ee5351d4582974734072abac23376e24348370934e7b864db0f52
+
+PrivateKey=KAS-ECC-CDH_K-233_C22
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1QMWAQTYigwPY5VufDu6cC
+lj+fG1P8EZpZLu6k9aFAAz4ABAFGPHjkmKvzQDPsPh2XPcElCeLSNPuRQDcV5C9h
+9wCt56u5igMIiGaWNTqtM8Bbq1zzwNTpacv0xM7skw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAUY8eOSYq/NAM+w+HZc9wSUJ4tI0+5FA
+NxXkL2H3AK3nq7mKAwiIZpY1Oq0zwFurXPPA1Olpy/TEzuyT
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C22:KAS-ECC-CDH_K-233_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAXCRezOze46v8kYeX5648Hl7E6q9kVpg
+cGzU8yy2AHZR4HQsDYPUtoVS6ber7DZEupdVz/5tTlaUOmub
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C22
+PeerKey=KAS-ECC-CDH_K-233_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=011346b83791e4bea7f6ba6b1265e5050895d84027c106f77353418f75d7
+
+PrivateKey=KAS-ECC-CDH_K-233_C23
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1FR+r5vhzlrxOG4xEEbsgy
+YLhKLKkQVfYGaLlG4KFAAz4ABAFQSTjBZ2gK+4ttWFjPqhkcQBlvxOUAxmLFNG7M
+kAE30bqUIija5oxFCxoDOiyBCplZcfAcJAieSm/cxQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAVBJOMFnaAr7i21YWM+qGRxAGW/E5QDG
+YsU0bsyQATfRupQiKNrmjEULGgM6LIEKmVlx8BwkCJ5Kb9zF
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C23:KAS-ECC-CDH_K-233_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEANjtMYOCuFwlJaAsIsZ/W/NmM12Udn61
+y0VzlmTFAX2P3nu8Vo/cgCo+NFXzzzVgLfcGhMis3aFloCZW
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C23
+PeerKey=KAS-ECC-CDH_K-233_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00b4938ed1ed012a9a53892ed9949397cdc4e4a612d54dcf80cdb039f47b
+
+PrivateKey=KAS-ECC-CDH_K-233_C24
+-----BEGIN PRIVATE KEY-----
+MH0CAQAwEAYHKoZIzj0CAQYFK4EEABoEZjBkAgEBBB1C++VUhi81lRhKRVEMpT35
+fEUXVYS10t4EJyM1jqFAAz4ABAExuNYbnPsFNsWIIU5FiI6+SDke7stNf7W+jv9K
+zwFl2klVegqp1F3TeNX4mScsxpdoInaukdLAtnXEaQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-233_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEATG41huc+wU2xYghTkWIjr5IOR7uy01/
+tb6O/0rPAWXaSVV6CqnUXdN41fiZJyzGl2gidq6R0sC2dcRp
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-233_C24:KAS-ECC-CDH_K-233_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-233_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAX+H8T9t/uYIG7XMpTL+JownHSdWsxvf
+ZDKXz2lbAPOnRpVeEt0LcZGe2/I7IyLKsyjdCb34e8r9zSiE
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-233_C24
+PeerKey=KAS-ECC-CDH_K-233_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01b3d2578bde3066a253db5322c85cf9487ce77b67ece955e281b0d7d0e7
+
+PrivateKey=KAS-ECC-CDH_K-283_C0
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAV/eSbgCVCpSxwsjoLF4
+Tl+HgLVoU/ml+MOlJm6HJ9zpfUoXoUwDSgAEBhHtwEXb5D7MTvazJM1R9w/j1934
+d+xot5iQnDxFYXVqow5fAIM7JVEXBK8Jti2ffLrFmBTnW7ucc19VU4SR2/pgweAR
+Xv5C
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBhHtwEXb5D7MTvazJM1R9w/j1934d+xo
+t5iQnDxFYXVqow5fAIM7JVEXBK8Jti2ffLrFmBTnW7ucc19VU4SR2/pgweARXv5C
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C0:KAS-ECC-CDH_K-283_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEA/B1wkw1qdyZUr5v0yt2Hc5j9HIKIkCO
+OhS70JfgErVpTCKgBnWCW0AgLpW+fatagmFH4EuMUaCbADRXfB8x+MFqcMjhyFuJ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C0
+PeerKey=KAS-ECC-CDH_K-283_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0745552817b5d729310b7dbebae687648714a9ae695dad20ca1ab6111c3d054670f21132
+
+PrivateKey=KAS-ECC-CDH_K-283_C1
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkATuRH2LzqohDVGNFR+5i
+KAfV0QYCAzCuK5eYwMTNDq2xC6lIoUwDSgAEB40uzU2QIzK2s8e9S6fSAPw0xF7a
+MJmLYCXtR7H0+OaPMoYkBNXlNkfd3y/MyIFtrIvHDCmAdiLMlVOacqo6myMModJe
+57UW
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEB40uzU2QIzK2s8e9S6fSAPw0xF7aMJmL
+YCXtR7H0+OaPMoYkBNXlNkfd3y/MyIFtrIvHDCmAdiLMlVOacqo6myMModJe57UW
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C1:KAS-ECC-CDH_K-283_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEB5m0MOkjIP/qvy1syHOZ4wwKqEQg/466
+Iwm5lIe3Qtci6LelAhc2KAH9bS0oblzfN1zQrlabcAAFMS436ONbFZLvubXq9Hs6
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C1
+PeerKey=KAS-ECC-CDH_K-283_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=02eb0c1ceb6179232e91cff91fc8a30553c6ed7e0a71deb1bda0a10735a84593dd903636
+
+PrivateKey=KAS-ECC-CDH_K-283_C2
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAXdjK2nn7do88AcwdQQ0
+PMIWIyb2IBfL3fNgqHbck7gfBMWOoUwDSgAEA4FatkgOStJKZignXvLuDOfVhpkj
+nbziMziEK8WMQsypTSQSAt6DPMZkyskNMPvqxgPvu86SdtTxarHEbn4RyBqaqeJc
+gpaa
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEA4FatkgOStJKZignXvLuDOfVhpkjnbzi
+MziEK8WMQsypTSQSAt6DPMZkyskNMPvqxgPvu86SdtTxarHEbn4RyBqaqeJcgpaa
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C2:KAS-ECC-CDH_K-283_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAM5Hp0PUi4b+/WtcAvKpeydiov5X4L34
+XB1qKd6IYsTJntU6AyLllgafkWVoyiSM7Vfv6QU0r0qfkKT0D3l+RSlnAxcmv0HX
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C2
+PeerKey=KAS-ECC-CDH_K-283_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04a9dd2cf5076814e5329c518c4f27b429dbe01d46682d476e7e78880de368b064236ba9
+
+PrivateKey=KAS-ECC-CDH_K-283_C3
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkADv+mhyYU4bluisxVTpV
+FR543cOPB0MrXEKhzS2ieP0LaOBHoUwDSgAEAdnDM32pXsblpL/xzJJ4OYm2bJIw
+EHhw1KV4aZM4446y2S7/AM2q19DrD0Rap2Ol37jzj1U1V3fOJPdTta09PLqxJfSR
+aY1W
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAdnDM32pXsblpL/xzJJ4OYm2bJIwEHhw
+1KV4aZM4446y2S7/AM2q19DrD0Rap2Ol37jzj1U1V3fOJPdTta09PLqxJfSRaY1W
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C3:KAS-ECC-CDH_K-283_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEByiXWDm0LGIDanr/+t3vwwJLclhAe+1W
+XK6pOb4z0WrJREXHB3EmMHkLBa4E2NfZ8jZdrprSTExhs+sgwKeYfmpMSw9ZjDcf
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C3
+PeerKey=KAS-ECC-CDH_K-283_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=044e2cd2bc164d21cf4b9833c0aa62ed059282e62b82f4500aeb422d17e1f6e7e8bbd500
+
+PrivateKey=KAS-ECC-CDH_K-283_C4
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkANla9SpwjmktAmd7IQMv
+eurWAD8STnIBPzfAbgu8IONTKzzqoUwDSgAEBuSH+R5zvdNE+4vI9MH0ducn+yZx
+6dbI+9d18aqiTK8umjb1BmPhz/gJl1e7n/G4eJAoOqSc/w97Ev4YTtKkKDddJ5bN
+gd6R
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBuSH+R5zvdNE+4vI9MH0ducn+yZx6dbI
++9d18aqiTK8umjb1BmPhz/gJl1e7n/G4eJAoOqSc/w97Ev4YTtKkKDddJ5bNgd6R
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C4:KAS-ECC-CDH_K-283_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBVZy1zmYRRCJ4rfHEEtCJH3d0TLUCtCH
+tYjWo4XaZPWi9Gg4ArTLFYH54rN463pPZPWn1DILLKPTR0cm9nDDiDu42kfz10W+
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C4
+PeerKey=KAS-ECC-CDH_K-283_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04d4f04d2fcf1bcd8150eaded90e467d3d38f753b6fb54eed8f9d29cd3dcc7be2c83de11
+
+PrivateKey=KAS-ECC-CDH_K-283_C5
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAMcz2QlAMsx67WxUqM7X
+U+rypIiCKFo7TH5gIfJr7OByKECtoUwDSgAEAmiWsDnXBo2YoyZxDrt6l4vUdmEV
+RkWuMM2D1gU1Bn4FFRzLANg6Jjvb2Mir8DEL+/yDkXqGsNjEvgsVWre54scFYFYo
+u83Z
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAmiWsDnXBo2YoyZxDrt6l4vUdmEVRkWu
+MM2D1gU1Bn4FFRzLANg6Jjvb2Mir8DEL+/yDkXqGsNjEvgsVWre54scFYFYou83Z
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C5:KAS-ECC-CDH_K-283_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAswopMt20UfZjfpnfcoU4XcTR7loHGXN
+tUDyLJB2E/3MsMjaB9QGX5kMj8N9EA7OOPv1dM5ETcNzVeBwK4DR6xvdZwmX6PJx
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C5
+PeerKey=KAS-ECC-CDH_K-283_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01c343540541604f68ddbd63c483760d824ded5c18be7e56e6d36a9ac6d25772afb0a90a
+
+PrivateKey=KAS-ECC-CDH_K-283_C6
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkANs511Ngctw0SM19IWDl
+DIEfZINY6w2x1UKOgap6aGt4Za39oUwDSgAEA6chkGrRPcFcMR/U5VLzvIe32Szu
+7bsMMWqVJ4W6Ron8C6JwApUU84c7vDueIXBh96YmH9xiaGhfllbx1e6kcswttajB
+Yubp
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEA6chkGrRPcFcMR/U5VLzvIe32Szu7bsM
+MWqVJ4W6Ron8C6JwApUU84c7vDueIXBh96YmH9xiaGhfllbx1e6kcswttajBYubp
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C6:KAS-ECC-CDH_K-283_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBjiA61OMcnXsuk21PZtowof7N3i+9RSX
+TR5+MamuNlohgUFfBK+fLPklQuH/j/KPjnyOgJWE4kOkkClJp2WihJhsdQsbBsia
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C6
+PeerKey=KAS-ECC-CDH_K-283_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=05e38079815477b8a79096ce339c4a255f8b213be74715ea61ef7dd0c0b5f161d9de7521
+
+PrivateKey=KAS-ECC-CDH_K-283_C7
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAGZJv9ZB2r8bnUmdT7BL
+6wmUddCqFdXvaEi3NNLUEwCLYEMIoUwDSgAEAI9ldtYq/8cYNtGa27w9UEIQ8S77
+YcQgV4JFFSkMUC8uCbbYACFkO+h65uVJsNX7tVjBMD0UsczXdwPsdPlgLzXKjXpR
+Obzn
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAI9ldtYq/8cYNtGa27w9UEIQ8S77YcQg
+V4JFFSkMUC8uCbbYACFkO+h65uVJsNX7tVjBMD0UsczXdwPsdPlgLzXKjXpRObzn
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C7:KAS-ECC-CDH_K-283_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBb/SiVouZjZtt6g3iMcrzkj3m1yVJKCK
+4nPHjOs5rpdVnVrDBKKwpV+AFVoaMw/ebLbZft2wqdy2bEmzkpBKvos4H5EJDbsh
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C7
+PeerKey=KAS-ECC-CDH_K-283_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0531ccf51d1096982f7c2ec513a92bf51c7ac5069cb15c5e2a053ceae7e5550908a19101
+
+PrivateKey=KAS-ECC-CDH_K-283_C8
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAIGGCmU9bZREbXdmFk/5
+LGxcFUXHNTBLOtTVF4yLFNAYHpRxoUwDSgAEBraIFbuDaR0WdJxL4WEl4qbW2ulC
+UnObp78NsNUBmOov5D3fA54NkwGKRhJWIPb/rKWgZoNDxXAlpgwxqdblEZHKsziZ
+O0a1
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBraIFbuDaR0WdJxL4WEl4qbW2ulCUnOb
+p78NsNUBmOov5D3fA54NkwGKRhJWIPb/rKWgZoNDxXAlpgwxqdblEZHKsziZO0a1
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C8:KAS-ECC-CDH_K-283_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBjVH91cL1pWXM8A9LmxMiJcfMUrc8ovI
+UdxS7U6MGk6gb4cCASLTdzsJNOkA+6fr/hrV7VvsD7Gp3c9O62HL7QQAdDE8CzFw
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C8
+PeerKey=KAS-ECC-CDH_K-283_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=06ffe79d2b7664ee2d8303ffe0ceca8c49a581fcdb49c4af6a060ff204eea74f4cf39cef
+
+PrivateKey=KAS-ECC-CDH_K-283_C9
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkACJD6JGb16l87w6c3mPH
+bU4QcVApT8+N12dkUco7+lxe25ZMoUwDSgAEA+Q54+vfp6I6nesJ3hQZBcZTxPIC
+7fLPXwn674i6MRNwHknwBx0HG4btD0aPxgGd4j/kuiyztQAyvjXpLS5a9A3nBqtS
+ToKr
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEA+Q54+vfp6I6nesJ3hQZBcZTxPIC7fLP
+Xwn674i6MRNwHknwBx0HG4btD0aPxgGd4j/kuiyztQAyvjXpLS5a9A3nBqtSToKr
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C9:KAS-ECC-CDH_K-283_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAJBH99dzl9tw45/p5Lqdl6mVp+4Gbs9T
+gXnpN6yGys2sUQlQAHzYdRZ/BqL7moGeLL2s78Fsrg7vLLsLLUm+rhCdt1PJUGFw
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C9
+PeerKey=KAS-ECC-CDH_K-283_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0311c430db78b6203e27b52988e1e9dae890c655dac4acefa7ee9612bec32e3e5f52be55
+
+PrivateKey=KAS-ECC-CDH_K-283_C10
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAFEqQoQeEif8n+1RwiaH
+MWhBNvIlz79FZImH4kU6cYb2p+3voUwDSgAEAi925atxT994Vx6EwrbqOhfxKZm+
+SDvGfhuEPSCb3+wDR6Q+Au7B/A6F8zDFPa17/0hi2K//iqFPlHVulbjwH9fuuPxU
+UneH
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAi925atxT994Vx6EwrbqOhfxKZm+SDvG
+fhuEPSCb3+wDR6Q+Au7B/A6F8zDFPa17/0hi2K//iqFPlHVulbjwH9fuuPxUUneH
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C10:KAS-ECC-CDH_K-283_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBL3sGTAMiv3u2GSZ0nA5It9Xsv/sN+Rc
+A6XikJ3jwzO9BqXhAapPQIRPJBPx/L3tADsdFcnx33VI3iorv3G1FmV62NjHfPct
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C10
+PeerKey=KAS-ECC-CDH_K-283_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0701d92ed8687138014b4379f1c34677e1744f6ae8c89958a5962f14408d587b95472db3
+
+PrivateKey=KAS-ECC-CDH_K-283_C11
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkACqK9JfRo9rAcyo5Pe33
+U5Sj9RnOB/rtP3fcDmafOhscbdrboUwDSgAEBXHwyH+IiI7Ac4lhg0AhdlzE9cjb
+Kx+eqbj+mEf4lkNJ/cRPBO98gESmCWlHRsyq/of8f58aeNAPg1T12n7i9dpyNawa
+1LV8
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBXHwyH+IiI7Ac4lhg0AhdlzE9cjbKx+e
+qbj+mEf4lkNJ/cRPBO98gESmCWlHRsyq/of8f58aeNAPg1T12n7i9dpyNawa1LV8
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C11:KAS-ECC-CDH_K-283_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBhH1OvS0iJkOelLlxzhWoedCebsPNtOr
+GYmyzNmTkbbGs6E9BU6pWiNPZYlxlbyXsD+m0kbqWrX0HaIsCO2BeqfASt83KYKz
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C11
+PeerKey=KAS-ECC-CDH_K-283_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04f2301ed85a5c91c31a7fd125854904340a55e34976a20743bd33d95e476450f301ee62
+
+PrivateKey=KAS-ECC-CDH_K-283_C12
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAd6fukqyTQbnSuWtNq4Z
+XCNgxyjrOMUO9TMynnDFrhn0ibbVoUwDSgAEBI1h4Lm4BkvMqM5A1PnmiyNoQTdy
+akTqdcjy+IUPAzP76YXmBfyro41R4hEra5805necEMDFWcPs0VYCKWbPkqjH9lAg
+p569
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBI1h4Lm4BkvMqM5A1PnmiyNoQTdyakTq
+dcjy+IUPAzP76YXmBfyro41R4hEra5805necEMDFWcPs0VYCKWbPkqjH9lAgp569
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C12:KAS-ECC-CDH_K-283_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAScG7AoOdkJdirTg1VkwpEFuTdChr22X
+mHJSmI2grJYnV3y+BCFehxUSnMdjAXkXAdxf4avNZytqoZukx+Uy7nqRPupg28nQ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C12
+PeerKey=KAS-ECC-CDH_K-283_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0643900f337ed362815f181e0628ed5184dad3e66a1f030e947f116696312d835f7f6e7b
+
+PrivateKey=KAS-ECC-CDH_K-283_C13
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAV06Ii1XCcsznZPNKWUG
+ZPOb8yAcXR6G067495W5/d9H2MSooUwDSgAEAeK4jeN3KwnGPQNuDbukNSRph0l7
+YoPauMzxACSG3gcwJ3tDA84YK38M6iGgah1N6HIsv8WbnZ15vHYLnRfYVnFWGuqt
+1UlB
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAeK4jeN3KwnGPQNuDbukNSRph0l7YoPa
+uMzxACSG3gcwJ3tDA84YK38M6iGgah1N6HIsv8WbnZ15vHYLnRfYVnFWGuqt1UlB
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C13:KAS-ECC-CDH_K-283_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBbsgvqT9hdAWJonFUAVAAUCbbHEtNWpS
+95PXiqLYJhpDxbbeAxvlyvyKrvGbhhUDQTp7c7YLN7AYBJPYLpQm9Htlhzk9CN4I
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C13
+PeerKey=KAS-ECC-CDH_K-283_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=063b1a3db331f91abd0af837db9d5f040620d1ddd7fccf8b58e0df43698351ea1942548e
+
+PrivateKey=KAS-ECC-CDH_K-283_C14
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAJjFcGZnku/aZfyeeQmT
+EVjf1Ed76TMy5JPWmGa2YCxJUd5voUwDSgAEBNxndP5Gqw7Sdo03nnVko3xrsd0b
+/FVXJ62Uwg9HMsq/KiyCBsbPD0IfkfyiK0hxIWqfH+OHjweRTpaulKx3C2di+dzg
+j/ot
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBNxndP5Gqw7Sdo03nnVko3xrsd0b/FVX
+J62Uwg9HMsq/KiyCBsbPD0IfkfyiK0hxIWqfH+OHjweRTpaulKx3C2di+dzgj/ot
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C14:KAS-ECC-CDH_K-283_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAQo8okNbE1/+oIeSt/GbTuGBIHwpvhzh
+/erNtppmn5zd6RgaAkkIJ0semMbRl+0ng8PJU8Gzs0+kOosvV0JYTjf+pAcmm0O/
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C14
+PeerKey=KAS-ECC-CDH_K-283_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0516da1d64bc4b25ce4763e6438257d62fb1ffdeae16d68701d63b603ad53e8587927669
+
+PrivateKey=KAS-ECC-CDH_K-283_C15
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAPS220qHzdMAKcw76J5A
+ubywFNAQqRolLFbLKGcfNUqATLTYoUwDSgAEBm3fBIMf0ccrxItwkGHBrqqtGcna
+PYwVBvp3XU9aVBLu4ChtA6odExRv8ZJ5K3SlxkrTFQ+uNE+oMOD0RzPYZ/TgrgU1
+JsYr
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBm3fBIMf0ccrxItwkGHBrqqtGcnaPYwV
+Bvp3XU9aVBLu4ChtA6odExRv8ZJ5K3SlxkrTFQ+uNE+oMOD0RzPYZ/TgrgU1JsYr
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C15:KAS-ECC-CDH_K-283_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBToN1hNeQ6EU5QAK7EC6JwmzphNzDxzC
+AGtEaTXiN7/Mw5TYA7Zs5s8BUH1GLu7/9iEb1MVgcBFsaQdGj3x2/gEUC/DV+3t5
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C15
+PeerKey=KAS-ECC-CDH_K-283_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=049c68c333b96705eee4a3def0d568b0d4faf24df2fc2f1bf40da0af0946240c38e97f74
+
+PrivateKey=KAS-ECC-CDH_K-283_C16
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAauCxaYq5H7LzPZmzDMj
+s1EoxS0XvhG68721YAbl1Wi6rYu8oUwDSgAEAKBK16WDZmpAQ3+WiwLKx5RnRbTK
+lJAhxUQ963AYP4jhd4/gArtZHDLw2zQwNC8ON8RUScKTxU9rffb3l8CZLCgphYto
+Dyvc
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAKBK16WDZmpAQ3+WiwLKx5RnRbTKlJAh
+xUQ963AYP4jhd4/gArtZHDLw2zQwNC8ON8RUScKTxU9rffb3l8CZLCgphYtoDyvc
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C16:KAS-ECC-CDH_K-283_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBtSm8+h7bYxJy+UXqXXSq4xjORNVltaz
+DMZcyAwShFCPSXibApY7NW8kNOwkm8tlie3k3jbOzTRQ5vXkd7/NwpraSu8PRaxT
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C16
+PeerKey=KAS-ECC-CDH_K-283_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04dd44c1a30edac2e39a5bc9902625880a18516385c90a9cc6b94c4f111e0260863ccab2
+
+PrivateKey=KAS-ECC-CDH_K-283_C17
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkABJUrxeRzHVpTOWQu1GK
+dwp1BEYXGjDt1sA4KhfmiAoa6luBoUwDSgAEArdmyZOzmNJCanoKSenQAQedD8Mh
+lxgcVurBgF5Ph8nfBV3qA257vTvpE51NQ6hlXvfVGgYtmUfRpIAQ7x6hDu3rJ/DR
+/+dl
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEArdmyZOzmNJCanoKSenQAQedD8Mhlxgc
+VurBgF5Ph8nfBV3qA257vTvpE51NQ6hlXvfVGgYtmUfRpIAQ7x6hDu3rJ/DR/+dl
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C17:KAS-ECC-CDH_K-283_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEB2RS4Z16ELiFEj1QP10EM+Fj3xNP/7hV
+j4rCbPswYp+M+wk+BrOiSypLB3dw05a78VSvQe7jUDVzpt6a/g9tGLAvyXYcoWQ9
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C17
+PeerKey=KAS-ECC-CDH_K-283_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0049c165339e9aeb2b516684b442921f1fef3091cf781e03fb3f56e93af1f3d6e500c81f
+
+PrivateKey=KAS-ECC-CDH_K-283_C18
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkASAXuaBZn78TzuEIUKj4
+vQbMwAvSmsZ3nxvZM0ayLJgyfg+noUwDSgAEBCHGLcq1S6gA6vrCMvxzDOcPbVzF
+P/U9NxJpzwRtrq9FGzPnA9Y19VIz2jxJCpWcbmOpT82+Rx+/yhnSxaP9ErBNs4DD
+yJXM
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBCHGLcq1S6gA6vrCMvxzDOcPbVzFP/U9
+NxJpzwRtrq9FGzPnA9Y19VIz2jxJCpWcbmOpT82+Rx+/yhnSxaP9ErBNs4DDyJXM
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C18:KAS-ECC-CDH_K-283_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAY4Lt1FtLELp3ZbKr/XyC/3fPoYj/JR9
+TXBJFTZ5C4dBzdNyAywP/72i+oY8udFcNlRQINW7JNkw2vL+pFVffCTWrvuywB2S
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C18
+PeerKey=KAS-ECC-CDH_K-283_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0645d7f4c5479baff5bc0cba654a3dcfda56c0e9d19f50f9d8d8c6357c09a140effbf223
+
+PrivateKey=KAS-ECC-CDH_K-283_C19
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAE8ZfIVDLLQqF3ckmuQR
+70uyZXukutNa5ThjWhUcjWpWT5zKoUwDSgAEBAyIkk1aJKhT+uQIrqWzvIJ9cxX7
+tY5uofamVnfdTE0wS9dfBUuChpraRDP3II+FcPJPBstkBG6KwIasV9Nwf8iCxjUn
+M9/2
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBAyIkk1aJKhT+uQIrqWzvIJ9cxX7tY5u
+ofamVnfdTE0wS9dfBUuChpraRDP3II+FcPJPBstkBG6KwIasV9Nwf8iCxjUnM9/2
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C19:KAS-ECC-CDH_K-283_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAkq7FV5JEkKC6jLltURiGum1E6oEdto7
+3bdSYNX1+i57iYmHAb37CgeaVbz84cqLzjAZy8rmFkADOEFm67sLtzNTlWWtxEbz
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C19
+PeerKey=KAS-ECC-CDH_K-283_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=028017c2a0240fd746ee72a0bcae1e53e05b7af254298094c381e735523854ea5fdd4f5c
+
+PrivateKey=KAS-ECC-CDH_K-283_C20
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAU6JNIPR2LdiHPSL0kvI
+oblbtAoIwWwyh0plK1miJSE5Qo2soUwDSgAEAVdOF84mMRxAq/MkP0iJournSoNB
+qng4VRBW9DlbjwK9wye+AIbln5hTSPP415U4ALHXXhQVISScQ/4GFpE9tdHUvVQA
+q85V
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAVdOF84mMRxAq/MkP0iJournSoNBqng4
+VRBW9DlbjwK9wye+AIbln5hTSPP415U4ALHXXhQVISScQ/4GFpE9tdHUvVQAq85V
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C20:KAS-ECC-CDH_K-283_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEB1J1EryTSTjMUkDOcO9lIi24XBPJYcHz
+H5FCBQZ9ZLGkyFMUAqq9uB/+0sABrLtNC3vlOTBOMuQx4C34sZKtdO0bSwYGv8kL
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C20
+PeerKey=KAS-ECC-CDH_K-283_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=02603c00998deba52db12814b1f77b2120cbc1dca59009c0d6ea40dcbcabca32c50380d8
+
+PrivateKey=KAS-ECC-CDH_K-283_C21
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAetvbJGogKVGIYXGpwDo
+Y3uPRH0J0bJRRg/lfxv0Yu/d3a7AoUwDSgAEAxswJhBDiDdM+3x7TvZCEaR+ILlW
+Gju8pTUWBAt72ig3MJRUAk+K6yOjXhwiIllnx5EYaMhO/dhz27zLx2Pq1n5yojJK
+pMby
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAxswJhBDiDdM+3x7TvZCEaR+ILlWGju8
+pTUWBAt72ig3MJRUAk+K6yOjXhwiIllnx5EYaMhO/dhz27zLx2Pq1n5yojJKpMby
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C21:KAS-ECC-CDH_K-283_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEB+wp2i8wTOuo1eJJ62BUpOT1lTTuWdJc
+HcDhLMOPdouD2v/uARLH1KN/7IQicaCoItN2N+btVRkHEwAa7+EbBvfh004A/N7L
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C21
+PeerKey=KAS-ECC-CDH_K-283_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=026a719bff31da4b4ebaed7bd043064f9c3930b5774c4a99809332c808aacba4b9e3733a
+
+PrivateKey=KAS-ECC-CDH_K-283_C22
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAUe+TjhmfjKmphq5gM7Z
+LkJpWSWxE8aUp5YK7eouHVcaQtPeoUwDSgAEBvWZ8MFJRXoy8aL/q9Tf+RYlk4KR
+K2QCtQzfXCNf3Rt5Dl6vBMzx2KS/63f/MpDmWsYB7luX/BsYaaLrnwt2J36AZsCG
+d2xA
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBvWZ8MFJRXoy8aL/q9Tf+RYlk4KRK2QC
+tQzfXCNf3Rt5Dl6vBMzx2KS/63f/MpDmWsYB7luX/BsYaaLrnwt2J36AZsCGd2xA
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C22:KAS-ECC-CDH_K-283_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBh71k4nt+PgnOmYqQZVBHpRIuxt3+wgA
+vlJetaagOxlmVxmpApaG+Ed/tcdp77CCyz8aDHnbVcsmTiESwOd557VY9wBFgWoQ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C22
+PeerKey=KAS-ECC-CDH_K-283_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=048c48c993040619536f45482c494a39b32e75fe69e478ba06e376228b79eb83d3ff9168
+
+PrivateKey=KAS-ECC-CDH_K-283_C23
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAeGQC+Ya235VVZ2ZoLfZ
+NURW9RUeL9e4PABbELFgBOvodsBooUwDSgAEBC7Mmf9ItT9mGbSEr4+lmyNKmByc
+PpEHu9HNqszoGIXQbgKpAYPaDX/ufz5w4Rfw6KSnQsrRCu/NxKq5uzFFgjdoavtP
+rPOp
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBC7Mmf9ItT9mGbSEr4+lmyNKmBycPpEH
+u9HNqszoGIXQbgKpAYPaDX/ufz5w4Rfw6KSnQsrRCu/NxKq5uzFFgjdoavtPrPOp
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C23:KAS-ECC-CDH_K-283_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEB51XYO5u+XhRi7zlNrAxxlWorPVgRJe6
+Q94L62h3pUfD7dRYBCGzBR3TY5bSD/zXzzT8oCJRbdS/+sc/yZWunqgUzg5AJ/fG
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C23
+PeerKey=KAS-ECC-CDH_K-283_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=05d85b16bb2a0d32c73d1402838bdfa512d744fa88c74d3d90cf714c2480e03363d5c6ec
+
+PrivateKey=KAS-ECC-CDH_K-283_C24
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAHfkGrLQnDTFiKvHbUMS
+YC5x9gAZAnuYbg3tNyU1wrapM6UzoUwDSgAEApIzI/FwB0Ii06aih62v09H+EnFd
+V7kbH/R2orT8w4XeJh7MBMxJjWfGJnzHxMLUClbNwqbnFe3YsqlhTusz0Lb9Fiy7
+hacU
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-283_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEApIzI/FwB0Ii06aih62v09H+EnFdV7kb
+H/R2orT8w4XeJh7MBMxJjWfGJnzHxMLUClbNwqbnFe3YsqlhTusz0Lb9Fiy7hacU
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-283_C24:KAS-ECC-CDH_K-283_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-283_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAkeE09PV6AIf/tiicJqfVNU5XZj6RCpl
+WgXdlCYrYDWW+L/xA+jjngjM5V4b7S3+DS+MFBsGQB26A37LOEdEkwyBeNFGQWMk
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-283_C24
+PeerKey=KAS-ECC-CDH_K-283_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=066abb838b5f12b6fc15ceb745600686bc2d5773e53469c2ee920cfba5459a1cab20d153
+
+PrivateKey=KAS-ECC-CDH_K-409_C0
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMIS3EePGCCLnD6aCi1
+q/sORIiIs1sMi7CfgGYW3B7PIt2GI32TfBv95it1rmVZU/xrL36hbANqAAQAaKP4
+sS4C0Q4vUglVJrxASLj2rDqEUxdyhweJk48a7/gT4F5QnqlYfSt+SqFDRLrD7Ebw
+ANHOtAx9XzKX4pVfDz6xQis+a7v79+tRi5wXro1A/rhKrzb15b2WB1srTb5TisAR
+lirHBQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAGij+LEuAtEOL1IJVSa8QEi49qw6hFMX
+cocHiZOPGu/4E+BeUJ6pWH0rfkqhQ0S6w+xG8ADRzrQMfV8yl+KVXw8+sUIrPmu7
++/frUYucF66NQP64Sq829eW9lgdbK02+U4rAEZYqxwU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C0:KAS-ECC-CDH_K-409_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAXf3NvYRYyDK+7W03sIC1AUIGC/gERib
+geHzmY9UCGB6RrsVCsR7yqr95HuKe3L0eLwi0gHfTvSzfgEk5Vtn81ht4kqIpsXZ
+iFQAfUsMS0zNaNUfr6dji75VXWC3Te8hfGpjxbQGj7c=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C0
+PeerKey=KAS-ECC-CDH_K-409_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0176bc5c4036ce5125493a58dd265f04d190f028366f7799f70aedf29ac67b5b37c37238593377a47944f5b639f43856dbd560ec
+
+PrivateKey=KAS-ECC-CDH_K-409_C1
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNlGIu3eW5FH0RyehoG
+dEQN0z0litL9x7mPr2SxHn6M5ejCHnmfH/L9KdTJSqFYliBopZ+hbANqAAQAMsV2
+hFLzwfO8VIeTea1CCJEmd0Kzf7CW7nuMIc7tAEHpRwzsO+3LeZ6QvbsxGSCD/wNE
+APnGEikn+4JCRtHcHOD95xpoSagtQQZdodhSVqmxl5v38oY2b8izJIk+vjTlnARg
+BzmUFA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEADLFdoRS88HzvFSHk3mtQgiRJndCs3+w
+lu57jCHO7QBB6UcM7Dvty3mekL27MRkgg/8DRAD5xhIpJ/uCQkbR3Bzg/ecaaEmo
+LUEGXaHYUlapsZeb9/KGNm/IsySJPr405ZwEYAc5lBQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C1:KAS-ECC-CDH_K-409_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAQxMaKnxpioyZVa22XennNnER2wFsa3U
+os/TBoJJo8OSOCJCjTUsXXTl1krM7tvapu++TACGaulA3TG15uPyCztNh6agLHgX
+PICqUQpu3/hSxinmBk3118YA/Zjljo6MZiu0uWyLqQU=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C1
+PeerKey=KAS-ECC-CDH_K-409_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00575d9e7f70a4a1c5c807b6b5d6b7330bdd764db2aa60f3bfe497e6bfe90f038fb4f6acf7ac06efc3d157c3dc907b2ae093c6a2
+
+PrivateKey=KAS-ECC-CDH_K-409_C2
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNssXw/whq0jlw3F8eR
+EY1HYeLFGYa/FHlCVU3FoYv5u2xnvbupCKHouo53kPWaOXE09oOhbANqAAQAK4kE
+GK/FeXyXRqRMoFk2euBmO88FgVaGDGE+4F4R2j8veZxwpo/nL9XawkadqhgQcCne
+ATVpBLGXv54GV/Q0nSUruzdcZiBvwNgxJZm9vv7oYI7JSNzkhoB7qlNe0GrayceX
+Y0cRqw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEACuJBBivxXl8l0akTKBZNnrgZjvPBYFW
+hgxhPuBeEdo/L3mccKaP5y/V2sJGnaoYEHAp3gE1aQSxl7+eBlf0NJ0lK7s3XGYg
+b8DYMSWZvb7+6GCOyUjc5IaAe6pTXtBq2snHl2NHEas=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C2:KAS-ECC-CDH_K-409_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAeTVgNXprYFnHGzWYtVWm6/k11qk9Emu
+1WvYAGGVIMnzLE4jDE2RscQR+QhtUpG6E3AUogAMj/tCOS/zl7vUZ5cvPtJR1aB5
+ll2gsdKjzBbDHSVdzpiGk3styUHqsNi+i7zRWqbtltY=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C2
+PeerKey=KAS-ECC-CDH_K-409_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00ce87aa5e7700384df59d3f1075d282c1aa511391c42ef609b8de1264eca8f7737df91565c73ee884ea882d47c56d979141f0f2
+
+PrivateKey=KAS-ECC-CDH_K-409_C3
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMR1DvAjanOXe/JS075
+DZMk3ggDR/9N+GZF0yVgOi3/0o7K8HdexTyvWlVOr4toSH34hlShbANqAAQBJXtq
+vUcNKUtZ3a7azVRdz0OAiviQ9XYoiAM0L8Yes5b1YK90NC4Qu5TSJMJNjlkA5bly
+AdzK2X7O9Dh6HPUSsW3VvHq2FfvFCHrBnV/Cdi9hW0kE6jk0O7sYXbZKGff3Ds8N
+VXsV6A==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEASV7ar1HDSlLWd2u2s1UXc9DgIr4kPV2
+KIgDNC/GHrOW9WCvdDQuELuU0iTCTY5ZAOW5cgHcytl+zvQ4ehz1ErFt1bx6thX7
+xQh6wZ1fwnYvYVtJBOo5NDu7GF22Shn39w7PDVV7Feg=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C3:KAS-ECC-CDH_K-409_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEALfRk1TK3MlHCCZ67Ysj5ITjKgOBSwJq
+gA9boB6SBMQwUuTUfG/NkjKWVODpAVsBL3k0SgF5lcFXlsWuk+CiB6JwcAT7saSa
+DUf9QE8S1XhJ2Dl81NLG0rS5D4ZEA9Ss0Woyt/9Id7Q=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C3
+PeerKey=KAS-ECC-CDH_K-409_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00691dd6b5177702d6a0b1f8b07f3b018478680de7ee079272ff75659335c96afcea7650caa01f996aa37946b78e14a83e579fb4
+
+PrivateKey=KAS-ECC-CDH_K-409_C4
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMNayWWVtUmd33ttSRq
+GS8MBccnCjtOZKnWyHfNBtKWKhrITsLYl2X5Z/YETy36VpAxB/OhbANqAAQBk6+h
+O9Hggc7l3xKG/kSik7fRsQwpCl8q574tAnNgCaJtg6qqkBeoyL9g76Ffzq0Hdn1I
+AdAv1mp4BsTIRF+mFSVP8yu5wdhaOQT5OcEGHiUNPrZBMTCipVcJlHlTEOltw6/z
+uCGK0w==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAZOvoTvR4IHO5d8Shv5EopO30bEMKQpf
+Kue+LQJzYAmibYOqqpAXqMi/YO+hX86tB3Z9SAHQL9ZqeAbEyERfphUlT/MrucHY
+WjkE+TnBBh4lDT62QTEwoqVXCZR5UxDpbcOv87ghitM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C4:KAS-ECC-CDH_K-409_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAPKhHM06U8leqY8xRPt31KaE+aH0I+uB
+46i/viK2gPIYcPWMrraUbGs7hzaZz/0xQGP0CAD98m7t5sunJIJAcgkGzgdsxDIt
+GLx2g9IkC6aEds55AieAsvpU4PfHZSi3f6Yx/lq7W5U=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C4
+PeerKey=KAS-ECC-CDH_K-409_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0136f5c04cf9a56db24ad99bd286feb800aea38d44f819be1c2a9dba15c635c4e122893570233a4c5754a41499eafa39a35aa57e
+
+PrivateKey=KAS-ECC-CDH_K-409_C5
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNL9zUbGVh10B9jBsoS
+fbihpfWXcZwNEOHWj11IVb8HYFeQaR/NDYtdsTfT/CZ53nWgZ4GhbANqAAQB04Zk
+WqpI4v0JUOaprOnf9iyPXpTNukW9c8a+a/e3Y6LJqAeEYxLaOrghwEmsCGH4Izfw
+ACpkNu+KEmGuzDjIIdp3Sjkf3Md1DJQ32d/mTIIzUIE5mfD9Twfx1tmAdAmGErxS
+BEJJ1A==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAdOGZFqqSOL9CVDmqazp3/Ysj16UzbpF
+vXPGvmv3t2OiyagHhGMS2jq4IcBJrAhh+CM38AAqZDbvihJhrsw4yCHad0o5H9zH
+dQyUN9nf5kyCM1CBOZnw/U8H8dbZgHQJhhK8UgRCSdQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C5:KAS-ECC-CDH_K-409_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEARdEn76mstX06OTTmnIoQkzwb0Vr8645
+vB+yqZ5Bg7cW4ZT8UHRlZk0AnVvO46QmupMsEAEUbTK3DwnmX89p65rmYWLRC9BD
+ad6OgYf6nD0bXdom8QtGnNSSXKN+CZRBV1fmiV5YgUU=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C5
+PeerKey=KAS-ECC-CDH_K-409_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=004f684f9d559d16485f0023bf012006265ed81f06fbc1441334a559e5500a3f77603565013694023e0d8f44fd12dcf69eb8d654
+
+PrivateKey=KAS-ECC-CDH_K-409_C6
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNp2mWQEDRcaQD97LMd
++bq+2+QlM5gpCzQBL7E0vFkUdXLmKmD1yszth7D40f98BJ3+lpKhbANqAAQAOGhw
+GffCGd3ZVnsg9eoeilBFHdQL9bZfey4TPebzbko/j6L5d+/pIPhF0XbIpXAjzFXC
+AUk5f7xCus+FxZ4EU13x1ScVdh7qmX1P+HIEhmzcPUpUwkJa0hSnoN1ZL0qZGrdo
+yPQEvg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEADhocBn3whnd2VZ7IPXqHopQRR3UC/W2
+X3suEz3m825KP4+i+Xfv6SD4RdF2yKVwI8xVwgFJOX+8QrrPhcWeBFNd8dUnFXYe
+6pl9T/hyBIZs3D1KVMJCWtIUp6DdWS9KmRq3aMj0BL4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C6:KAS-ECC-CDH_K-409_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEARmYDxEUne5eLC0AVh08JqQqWkTodHZd
+3aTYGOpwTtu6I6vtXgi+ktZV155VxbxUeHtN1AE2az3aPph5xEgd3DZ+UcHAVBlF
+lkY21QIWh8KFxH1A55/38LtWqTrFYL6Ny5cPWLI7EKc=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C6
+PeerKey=KAS-ECC-CDH_K-409_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00137894f637460a63576824536944cddb42dfe63169c84040a0345ad7516ec4f1ad00bb4de20ea6ea43824b9b0f74dfa6881cfc
+
+PrivateKey=KAS-ECC-CDH_K-409_C7
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMG39qzyhsqKCHO/bWH
+K7lfAjFhrk4tVJ0PsfOCVjQTWESRZX2xAcMjUUgyw2P2NqnmnoOhbANqAAQAPpqb
+XyggZuIzhw3LAMSu0tc6Mx951JyNXC2TkIsO9ecrdIgU0biEBkLXW3qaVTAbHnyC
+AQhfV2keBK+sbohOL9vY34AvTUNbzmESMasydHYerV4uajRKU/M8D6FW4xMgYvcr
+zaP8DA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAD6am18oIGbiM4cNywDErtLXOjMfedSc
+jVwtk5CLDvXnK3SIFNG4hAZC11t6mlUwGx58ggEIX1dpHgSvrG6ITi/b2N+AL01D
+W85hEjGrMnR2Hq1eLmo0SlPzPA+hVuMTIGL3K82j/Aw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C7:KAS-ECC-CDH_K-409_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAfo5tdM3XUMkeslQAGHr/3oMFbjF3+nH
+UXhDhsmBhg3m4blYTaD0IRlBfzIzgpCRCpolngAr3s1QK6ZKbyHQj6QlA4nUJwMk
+RW6UQWV0lccq12D7NIMl+Jt6VASiwhwqoHcRvPXzBBI=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C7
+PeerKey=KAS-ECC-CDH_K-409_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00f03b0b43a351311689eb1d3fc457013f294a7d02ad850c72e4ff9b64ce68a47beb49bc5bcbdc828534f8c8a5e13de5fe522eb0
+
+PrivateKey=KAS-ECC-CDH_K-409_C8
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMpsvyzCFlql1xbTNHn
+UmfFQk4Ad0EU7CBRpXGymXZhifrSTpL5bj1SdzbqSANnvb3QUw6hbANqAAQBTHVz
+mb4gHgiv2LSmcefTttf4hESYq1kuG/aTFTR86C29eF1FkiZg1NDSf6KwrGLnB/zs
+AJjwdz0+/pwpCpkuygWHXTRj8HNrLf70r/2f8A+WreUzmZF96gdMeY/FNXOPDFaJ
+okR/hg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAUx1c5m+IB4Ir9i0pnHn07bX+IREmKtZ
+Lhv2kxU0fOgtvXhdRZImYNTQ0n+isKxi5wf87ACY8Hc9Pv6cKQqZLsoFh100Y/Bz
+ay3+9K/9n/APlq3lM5mRfeoHTHmPxTVzjwxWiaJEf4Y=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C8:KAS-ECC-CDH_K-409_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAbJV1bt10llwMB3p4OOVmhIgXVEfjmTw
+QqAclQ20cbHW1YR/dWae6wvxh/FVnbOyKu7AlgF+WQz6hVNJE2GYwt3YpSEIgkc8
+ndWRwC4gLKBAS7yfY5HXOuAR2smWUVXSZQE5/i5U7Gc=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C8
+PeerKey=KAS-ECC-CDH_K-409_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=018f55b81f15f862aed042f37433050ac61718c9939d432b2a20e12d647f99753b8dd5127cf8963247fe7e1d5ade1442229bc646
+
+PrivateKey=KAS-ECC-CDH_K-409_C9
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMbmAFcAgLqFkF5caNz
+BCUIOb1qbl2DSX9/k/D3Ryoh/OS+W+d26QlZ28QaDoXtIlg36NWhbANqAAQB/sCf
+lFcWFOfNjpWOvNei/NjCSNQIzbo1ljBUXDE4OSJ3TTsk4gWR2LQelU4WZU/oXLrK
+ADHg6x3RzkZ6i3jRDSW53pLP3Cdzgx5uKKFS0CripaUQmUzAEEYiVEQepBEhwGd/
+tBeL2g==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAf7An5RXFhTnzY6VjrzXovzYwkjUCM26
+NZYwVFwxODkid007JOIFkdi0HpVOFmVP6Fy6ygAx4Osd0c5Geot40Q0lud6Sz9wn
+c4MebiihUtAq4qWlEJlMwBBGIlREHqQRIcBnf7QXi9o=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C9:KAS-ECC-CDH_K-409_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAOz3Bk9Sj62uOAyzgphIEQR6DX3ZqN6O
+dvgXiqYAaed6lIrPp00sd6doUWWamBlwVNqNRAC5jhNJf3dgcnEcQsGNv8jrjIUj
+/2M6+Yih8kLtPDxWXRjPIk+HUfKULjYLoW4PWDCVKRk=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C9
+PeerKey=KAS-ECC-CDH_K-409_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=002b560d1949297dc7e1bbe8ce49a595762924afcf0271e9c493c18ad5cbfcea5f3900c7b793ae5dd44f48884b0bc3b52c66e05a
+
+PrivateKey=KAS-ECC-CDH_K-409_C10
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNHO87LE3cR5eiXY6QP
+d9vi6owlCdIJBk45z5Ba+qkBCF+OeVybgBfJpdChuWgSwSSj/7+hbANqAAQByOmt
+xIFuZgb//14afUinhUw1qvBV0xgz8Mq96LvE0kWOPNPIKkr4B0X1lbO6Evi1wM6Q
+APxD8ZO1WJruYphXNeNig3TdRahqYbqveMIfpueHhW6muLiDFlQFcYJYZc5rhXit
+1fqmnw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAcjprcSBbmYG//9eGn1Ip4VMNarwVdMY
+M/DKvei7xNJFjjzTyCpK+AdF9ZWzuhL4tcDOkAD8Q/GTtVia7mKYVzXjYoN03UWo
+amG6r3jCH6bnh4Vupri4gxZUBXGCWGXOa4V4rdX6pp8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C10:KAS-ECC-CDH_K-409_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAE4Fw02sRObhsIzfrmNXwg23pUTcJT3/
+HCPU26hxuWeBtqYWONc4Zdr+CpRDw+wyiFfSPgEibEJ3eLsiRiTNIVST16TzKk8U
+GXkjZAlQXYz1jYHf08eT5ZVDp4AxTzzY7hdmTcLkY54=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C10
+PeerKey=KAS-ECC-CDH_K-409_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=000b43cb539bb4bb42f195ffdbcdeb482b69301c0155a840cd381f55c465a8e57ec51d6555871537b56bf84a1544cae2b2b8eb38
+
+PrivateKey=KAS-ECC-CDH_K-409_C11
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMg3d1nE0pBg3i6oN38
+kRHAou1JKyiVad0AYb8SJtI1vapSA9Pvor0BQdKs4nw66Oba8R+hbANqAAQBZ9V3
+sqQ8wafYimvog8KNv0jD4fvyGtg+en49dT+wttP4DNE3b9mL4mD0lHV83AYyVtWy
+AV7XADt9K9XgNZMDZgrdCQBJA5z33zlpieoYxwL3BMRc9v3nrQctMSU9HVKV6cXR
+1cYsOw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAWfVd7KkPMGn2Ipr6IPCjb9Iw+H78hrY
+Pnp+PXU/sLbT+AzRN2/Zi+Jg9JR1fNwGMlbVsgFe1wA7fSvV4DWTA2YK3QkASQOc
+9985aYnqGMcC9wTEXPb9560HLTElPR1SlenF0dXGLDs=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C11:KAS-ECC-CDH_K-409_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAW9pYP0jV9L3C193i+XgqnFVa50vTM6x
+T3gS2oWKuHKBi0YQ1BqPZiALQ0NCIifZ/d9xLgCq9ZKnJedzg4iJa5vp94wcPWly
+ufmQNNAswPl3ap9sL5t9UB91vhhZmwiMTFiBxmFG5bk=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C11
+PeerKey=KAS-ECC-CDH_K-409_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0113dd2cf8732ceb8a893e149f13d52026e5d829322d0f1233a624fd6b74d56e7e6374d70942a25152ce5073831660333fb3e070
+
+PrivateKey=KAS-ECC-CDH_K-409_C12
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNgelplMhd7UvI0knF9
+0Keyr5jgSIT3cHXkYEQQxQRKCEYezzfE76PtwstmfIS4ZBWTa3ChbANqAAQAClZ3
+rGwA0mRgVNvr/FNtsKmzUaJAinPgg61i0YL7h8uAMixTlVPs28ITzoTGbd+NwdI0
+ATJ6CjdpJA/aRflLsHNhx0qoyNEZQUp7VmbiWjq2iBl1OWMlp39UGhuiaAEqgsUR
+DSpJ4g==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAApWd6xsANJkYFTb6/xTbbCps1GiQIpz
+4IOtYtGC+4fLgDIsU5VT7NvCE86Exm3fjcHSNAEyego3aSQP2kX5S7BzYcdKqMjR
+GUFKe1Zm4lo6togZdTljJad/VBobomgBKoLFEQ0qSeI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C12:KAS-ECC-CDH_K-409_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAPVJxH3I6S/s04tXUIlYgORJ8eMavgux
+6syEKY+DYQjlowjMuVeNy9S+YXd1LrIx548BHACTZj7D/LVNZ2iXv8ldteVK1u6h
+7HtGykvz0lNYOfEByz5tXxG2o2v0A2PDHJ+IE3hiZ08=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C12
+PeerKey=KAS-ECC-CDH_K-409_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00c8e62ac25c11e86b98642e4ec7adde9d9436f9337369fb065abc9ea784f90b8b8bebae35da92185486191dd9f49370b1148ce6
+
+PrivateKey=KAS-ECC-CDH_K-409_C13
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDM02ppFNxHwSgseobmv
+cB4Nw6Vc3VheQ+Ps9B6TTsr4gP8WFNzlzJkqaa3fxAja4bCbjQWhbANqAAQB97/0
+NVR6iVFtAX0b2sTNo2BBoNPf0DJYVisuKPQM1k9q4rcEV3c/lnXP/EDAIeRwKwjW
+ABPFmnLwyD9buQoL/ueYlS+5HuMpyYxLWRT0Ra58hIN2cFK19SmXRiFUXdzWN39e
+OH1XPA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAfe/9DVUeolRbQF9G9rEzaNgQaDT39Ay
+WFYrLij0DNZPauK3BFd3P5Z1z/xAwCHkcCsI1gATxZpy8Mg/W7kKC/7nmJUvuR7j
+KcmMS1kU9EWufISDdnBStfUpl0YhVF3c1jd/Xjh9Vzw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C13:KAS-ECC-CDH_K-409_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAEEeXUyW413ptUHaX6xpEzZGLIgtjozk
+1utxIUF+cJUMTZUC9kVl1abPpzXJDu+Dx7hh4gCWuQTjfKHC21mlRhVifhwzVhYP
+4XUoSq3DsvoGugswqqB8hOZOSGUuX+swNZUGbg+EaPc=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C13
+PeerKey=KAS-ECC-CDH_K-409_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=012505746f1a40ef75f950595211ce04f87f1daffffdf8c12600a9e2994c8c1d8b19c0e0559adf9a94762cb983569de6d0d8baca
+
+PrivateKey=KAS-ECC-CDH_K-409_C14
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMxQa+7qLTZ8MvoKX82
+WHMZZzlGXj4gqJr5/fiwHRlaoQUuYXa1+thWE2trMg7r/AjBzQGhbANqAAQBgF/8
+V26KRfBil7IzXQOryK39Fa03522A07QYDV9y78kPPysDas2Bf0D9SQZKol6jg8gu
+AfItprUKxWKJQ/BbFBSTyswPArzfO//bQ1gjQ7aGFXYaGAvX0asd3BX1N0qPZl0T
+tLkScg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAYBf/FduikXwYpeyM10Dq8it/RWtN+dt
+gNO0GA1fcu/JDz8rA2rNgX9A/UkGSqJeo4PILgHyLaa1CsViiUPwWxQUk8rMDwK8
+3zv/20NYI0O2hhV2GhgL19GrHdwV9TdKj2ZdE7S5EnI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C14:KAS-ECC-CDH_K-409_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAA+oJD8ACjOYgIofiP/Fo0KWj+5ceyap
+4f+ibvqIXnThxWICfZXbCMwVvSWj/BGrTcE8ogD+1ofHGX/xrrmA5yo6fDGBQgUs
+I4mwhm2zuH5cgCXnm7T0+Zb6Y1KrnLIBcu941v/KkG8=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C14
+PeerKey=KAS-ECC-CDH_K-409_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=019a71ab576546e2351aa92b6075e8229813e6a2cb3647147b192b4597f1217223e7197d846c0d65ea0d4aa4c503bd000ba312ba
+
+PrivateKey=KAS-ECC-CDH_K-409_C15
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNOUXeWysnXx1MW615o
+lj/mMkeB+rmG6UAgDnEd2/mILZmmIKl2NS4klnSM+2Hcy/bWWcyhbANqAAQAVqRS
++x1VgHnD6RvyL4aITKiXiIBv59bWykC1SFB5133EPkZqcSWXksZf9qtyBAZsDmeo
+AfKbcj2ffU3mzML5cIB5xdMK5dlg5ip8T23Ji/yVtPUx8ZfDlIZwVDJZQgPCUUcV
+bf1bXA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAFakUvsdVYB5w+kb8i+GiEyol4iAb+fW
+1spAtUhQedd9xD5GanEll5LGX/arcgQGbA5nqAHym3I9n31N5szC+XCAecXTCuXZ
+YOYqfE9tyYv8lbT1MfGXw5SGcFQyWUIDwlFHFW39W1w=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C15:KAS-ECC-CDH_K-409_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAL59WAQyY6svQiUtQbWC2GLCskPOGFdg
+gb1u3S9j8BZPNlyuZyaNIn85RGd+HBRq+GS4rgGkvLxkFthll6FIyk1hDuZWoAAm
+zmBHvZ+9QNiVMBlqRpOuWV1plWUDudKrSqvnyVihTGk=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C15
+PeerKey=KAS-ECC-CDH_K-409_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=014f4b7ea93c9dd846d2228c2b6a8dfe616057232b7af845a570cb6cacf9feef2d8ef4fafb285b38e63cce0a09b4d82dbe43a390
+
+PrivateKey=KAS-ECC-CDH_K-409_C16
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMcgLZNUegCVpnnvixL
+mDz6S36RsRLi7KX50Mt+PU+Fr/ezOpIeqhJMtwAuq2KXPWXha8mhbANqAAQB/Q5O
+r7JsCMn450fUmR9GjHa0hkFm43ZCtYPbKFpLxMM5eZF9kSmpHLCnXBrufNT7q3PO
+AEaO+rz0SPzOgh896B6ZTXmn2Z6piayB+hNfesiLFUx2eQnGgffkjACy5mu664+G
+iPRGcg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAf0OTq+ybAjJ+OdH1JkfRox2tIZBZuN2
+QrWD2yhaS8TDOXmRfZEpqRywp1wa7nzU+6tzzgBGjvq89Ej8zoIfPegemU15p9me
+qYmsgfoTX3rIixVMdnkJxoH35IwAsuZruuuPhoj0RnI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C16:KAS-ECC-CDH_K-409_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAR/qWNnjbPjtTvO0L3fM6pO/VCrJIUHc
+LAlAYZhfPfeG0ZKle+4HJVCzAlg/D5QoMBsbdgGz3MG4o1RSZEJzhjKeuB/pkmVA
+QGlHgcDYsnweSUQrmbq5Pvlmb+oU1IQ+5LxbBFrFDBE=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C16
+PeerKey=KAS-ECC-CDH_K-409_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=001fe2ed30ad4143c5eeb0b7622e6aa49e4e4d51c1ddc467b3fc54215dae931be0b6b6443e716895acb6570cdc21fcbdae46e5d6
+
+PrivateKey=KAS-ECC-CDH_K-409_C17
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNDyWwyz2SLA2ESQhrb
+qpJc1UF1q6055Wgb/J60sbZJrsHIduwexGEPGzsGUUpI5up6SiWhbANqAAQA3hge
+gbnnd21HRpSi0STQuHbZVI8g7jOGMElF2RMfkEV9m5ON8JiwNb7ar4DtbZeUBPxw
+AYGjUW2+qdqX1uzs2xD5bVRGnSc6s2bomkD9ztzxvag31cFL0QwLaiqcikeBASXH
+ZN017w==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAN4YHoG553dtR0aUotEk0Lh22VSPIO4z
+hjBJRdkTH5BFfZuTjfCYsDW+2q+A7W2XlAT8cAGBo1Ftvqnal9bs7NsQ+W1URp0n
+OrNm6JpA/c7c8b2oN9XBS9EMC2oqnIpHgQElx2TdNe8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C17:KAS-ECC-CDH_K-409_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAMqAk0C9EzVLYHHQc+Zbmw0rrILiKr/K
+x+cK/Z0iSFLw4hKXbl7II+uJUOArx1ns9W95qAAxKB6JdkAaq1j6jq+GNv6wExcL
+yrV4G+CijScznpRw4WbH9oXy6pFDMQ3KGzq44cjmBZI=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C17
+PeerKey=KAS-ECC-CDH_K-409_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01610efb48fd22261921f7484ed6382fceb6bdf28f3bc2340a175b7971b93ed5ff357ed55e5307bbf42e40a5b3fabdaed0ce19a2
+
+PrivateKey=KAS-ECC-CDH_K-409_C18
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDM2NoVLjuAlS7LQ6+3H
+ILZrIBKaIfGk/jkRjP3U0Tfb5eVw6+LEin+awhz/PlrfR0NGl9uhbANqAAQB78DN
+GobOdUTyX0TmOgkTwR/WsIvAmtjNgvOvfjKnp+ys1W4lUmWJMTh51Kf9Q4LUEU5K
+AFo073QDWZwvg/PoMplSSJPyQY/5XWwv3Ao9uXDmL93PTNoYKqeLVP2MLoGPse4t
+0ndnYw==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAe/AzRqGznVE8l9E5joJE8Ef1rCLwJrY
+zYLzr34yp6fsrNVuJVJliTE4edSn/UOC1BFOSgBaNO90A1mcL4Pz6DKZUkiT8kGP
++V1sL9wKPblw5i/dz0zaGCqni1T9jC6Bj7HuLdJ3Z2M=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C18:KAS-ECC-CDH_K-409_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAHR5WwqcoHBJH7VKO8JJmB3vvsA35AQP
+dmVkKLFTi5eFA/gfgK2e+XxeEnulHsBAWEuaIAA+zifz2u/nvf/fpyeyr5WvhZGv
+lGzd/jfoVkO40XnKi5UpEG+cXzqVqIGSJfnX1Kcw/SI=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C18
+PeerKey=KAS-ECC-CDH_K-409_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=008d990982aac8d5371b867de21e09064fef30e73321337dc24f19ad5ddb6c4ad217136b7c61e360a73fa7571d526c8f514a06d4
+
+PrivateKey=KAS-ECC-CDH_K-409_C19
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNJmKBioyFwuzWJVNLC
+SW2ohiAIJ/oTVmg2ribjjVGSbKPSAlife/on6iLTmZc9tvn96fShbANqAAQA9xWQ
+sEKQtfPNm6DjlKO+WhUU9F5TSX9s3tv4OXKOAogTXXaeSyiTLIdYI/4lbokZl8R2
+AJ0WunJqWp4JEDvJSgnYB5rI7fI0EMhGn3n1XzNVz7OtcDYk7G117OrjiB2iCQPH
+HeH1rA==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAPcVkLBCkLXzzZug45SjvloVFPReU0l/
+bN7b+DlyjgKIE112nksokyyHWCP+JW6JGZfEdgCdFrpyalqeCRA7yUoJ2AeayO3y
+NBDIRp959V8zVc+zrXA2JOxtdezq44gdogkDxx3h9aw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C19:KAS-ECC-CDH_K-409_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAR62TtQknhGVstEwejWlFNZtKbpvkET5
+wCtLLTyz49TAzcVInN37liJsnOPjb7j/Lu8gjACZiAsNDUPFxXmtd92uaPLJF/Sw
+YuqNd3uc30Zcu1kQfnCZJxToy/rHYpbV7emcSNOKiXM=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C19
+PeerKey=KAS-ECC-CDH_K-409_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0155dc98729c8c1bc65eb8a3ec09135f46bfa313bf56aa3169e312db8991abda338f8ac7a75bce42884068efb7e6e625939d2b88
+
+PrivateKey=KAS-ECC-CDH_K-409_C20
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNaP4Bf48Mmb+s+C7fa
+Z2G7EXYYvFevNXtT8Znm5MvBKBl1MhQD6m3mGOwy6GuMoeENfEOhbANqAAQBrkYO
+EkhQTTPWftdQ8dYY5Tco1V45DfwY2UtW27PTwL3JbJLKHsqfRPuKWM823PzAWIy+
+APcBH8Mh72JY3Pwf3CwKTlTIbsk5vJzspsKRdQwf9UCzSkGHk4QqLFyrYGHbvptb
+4/phFQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAa5GDhJIUE0z1n7XUPHWGOU3KNVeOQ38
+GNlLVtuz08C9yWySyh7Kn0T7iljPNtz8wFiMvgD3AR/DIe9iWNz8H9wsCk5UyG7J
+Obyc7KbCkXUMH/VAs0pBh5OEKixcq2Bh276bW+P6YRU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C20:KAS-ECC-CDH_K-409_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAKFelqd26tuPigthNgM1y1AX19lxFkiT
+QemVFX8a3xeOVii60+gwvuVEMxGRZIhttcNGVABVHKVgXkrgU0U0oKs0PQOaO6eh
+zOgyxNZeJrrnq45fnHSz1CGlKOVZd4qye1mq4akW1Os=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C20
+PeerKey=KAS-ECC-CDH_K-409_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0109e85c684d027a625ec5e6df952e2f20a14ed5b092d1b1b38435251303844d230fffc53d84b923555e1e1cbebe20b5d68c3bc6
+
+PrivateKey=KAS-ECC-CDH_K-409_C21
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNVkB6bZYa38zcmYOvP
+6QJJkAyQLXxjKo0X+uIdP94wNzJbV3XqxaF0oe4rP/K8XOadjMGhbANqAAQAupUi
+M1Mbamx63m8zjST8ZXd7XTBSl+ZtMssbxQbFvKIofTrNM/4ZZT1siKBuyjcSzpyq
+AHFr6xTwIjNjDzRgPjCb9uJXLwt5HfpMWCr2o3q83WTo14WpXd/1m7xvvht/xzVy
+Xvzwug==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEALqVIjNTG2pset5vM40k/GV3e10wUpfm
+bTLLG8UGxbyiKH06zTP+GWU9bIigbso3Es6cqgBxa+sU8CIzYw80YD4wm/biVy8L
+eR36TFgq9qN6vN1k6NeFqV3f9Zu8b74bf8c1cl788Lo=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C21:KAS-ECC-CDH_K-409_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAWQn5yvFfSapEKZyLqwsePuoq//MvBGp
++Dd7/iE+2a1kveKuhof4/x39sptdzs0CJpgowgCtT5q8IdoNMfGWWc07DBhVgUNq
+wIsVwLSKesOe7QPg7pfhZM+qWrx3RBLL//lKnqKpY2o=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C21
+PeerKey=KAS-ECC-CDH_K-409_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01ae814e02c4684c21dd7e58a65ec51ec68c37e59e299ce65608186c0acce08e41c8320b1941a611fe66b1921b558d7f402d0eb0
+
+PrivateKey=KAS-ECC-CDH_K-409_C22
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDMESuQ70kfnWvp72Nwo
+51vbnd2Z31ZmjIMUVNwo8+mkTs/Ue6hCCihvHvNy/SmzZd+bgvGhbANqAAQAICaU
+83jXCWXUKCitXzcTe/i2POwsDRWOW6lMqx+OYeWjAJhro0mzrfPvwF5lZwr4jNPW
+ALrw2krtuXL4iiFd+/9k5CkPrcJdo/DYPzXmW8QXfTAl1x2O65xBRw88cZ4A7x+3
+VS5qiQ==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEACAmlPN41wll1CgorV83E3v4tjzsLA0V
+jlupTKsfjmHlowCYa6NJs63z78BeZWcK+IzT1gC68NpK7bly+IohXfv/ZOQpD63C
+XaPw2D815lvEF30wJdcdjuucQUcPPHGeAO8ft1Uuaok=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C22:KAS-ECC-CDH_K-409_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAS6J3M35dYUazPApTPS94SWckHptOs72
+nxk5tVjE0hFSLk6qxhPjrISRyT3rbTRKn4esvgGlJgjq0J0tsSOg3Hgqsg3beT1b
+twrJXFjmIUa+tiu2aP1X+SA45Fhc3h+R7oxSUmr+sbU=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C22
+PeerKey=KAS-ECC-CDH_K-409_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0140e7db3f6415d884822ccc7316a329dfed177b76c0117abd722feca889bee4e14e65d26c6cc935c0e94205f05fc1a7abfb0348
+
+PrivateKey=KAS-ECC-CDH_K-409_C23
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNW1zcwdTracP2AHHSc
+Lx8aYe9b1uy3lqnhXv6bvmFY9mlUJ4c1D01kO9pvPoxkI7gXtTChbANqAAQAJaBr
+caCuJS8vkFIhmD6/ziGtlhIaXA3MXvDQ/sMB7HfvS5FYGP7c2n8/1zPH+eUpB5y2
+AAJokNUwO2Gcf4H2D7grJrC5jY8kxFyrQaRO6zo6MSlE6Im0A14ENgswUEPjDQy5
+BBqJ3g==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEACWga3GgriUvL5BSIZg+v84hrZYSGlwN
+zF7w0P7DAex370uRWBj+3Np/P9czx/nlKQectgACaJDVMDthnH+B9g+4KyawuY2P
+JMRcq0GkTus6OjEpROiJtANeBDYLMFBD4w0MuQQaid4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C23:KAS-ECC-CDH_K-409_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAKupOuHRVSiAsx9QP8S+n5HRAkfxTIFg
+Ff+yutKauBgOe1CicUTgHCHmPD2vzSUTCLrHaADkq2blFL0Cq+rhxxI3iKaSWE3b
+SpCaIX+zXeZliCM9re9wNv+dnyTro3cuL6MDe7rmPP4=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C23
+PeerKey=KAS-ECC-CDH_K-409_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=002ec4deac3e83d60ad39969f2f93b49f31875831ecd51ea5c37ca48de081c0c8cc660edc53a222f3043447f9cb752763be7494a
+
+PrivateKey=KAS-ECC-CDH_K-409_C24
+-----BEGIN PRIVATE KEY-----
+MIHBAgEAMBAGByqGSM49AgEGBSuBBAAkBIGpMIGmAgEBBDNisCbUlyBmDPak9Wm+
+mN+hCMjroII0rpqH88iLbGWTS5loFTIqFvmqvtEzF793Jb6lgI6hbANqAAQAD1KS
+U5TLUrwzDgY5DAwKLhDtl5cUn7zIjYD7yuwXPiSgXa75hAHV5H87dlvtu4JGMShW
+AT2ZwXEIBdX8fbclmsnhNLQR0A1z+wdi49IRzcVr9/cUUS0EpjDIcyVR7nNCh0ds
+9RHoNg==
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-409_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAA9SklOUy1K8Mw4GOQwMCi4Q7ZeXFJ+8
+yI2A+8rsFz4koF2u+YQB1eR/O3Zb7buCRjEoVgE9mcFxCAXV/H23JZrJ4TS0EdAN
+c/sHYuPSEc3Fa/f3FFEtBKYwyHMlUe5zQodHbPUR6DY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-409_C24:KAS-ECC-CDH_K-409_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-409_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAKpOuJhEPM4+0sBy2Fh3WsIhwk4z7Kbz
+FXlmNUS7M6SgaKhtE/FntlMExffyX4lfZbL0KACDze0wIRtm8a3xcxi23lDXckwF
+hJleBotyRwOuCO1xoyszSYensx1sJjcVKRcyfTeszTM=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-409_C24
+PeerKey=KAS-ECC-CDH_K-409_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01c9cc05d19f96c4d233039cfbc43ab68d657bb507f46a353091fe98fc0f422a8e7593c195d326977a2be6bbd2cb44eb1fe81650
+
+PrivateKey=KAS-ECC-CDH_K-571_C0
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAXPNFjHhjs4Btzs1
+cv+qdJXEvIH0B4rlDWnLHjOKzxNGkRcRKSEWbd8tKfOp+OEMZ+iMmpkgOoNFZb52
+rFkSZDZzmmr6ApzFoYGVA4GSAAQD+/u8+6YJFX9oojEm2AX3x177Gb77WV46l14I
+/0a9NMi4e5ZFwOhuoK2RVGXVyFbGm7m3IrDRe/l62VxGAt6hfGtRIFTLItgHHBbf
+ceG3G0vT2ZOIJ9OVkJO52x/4a+1zlEpC3LZ8wzEC4owdDpgEpkUGVvS/M61y7Pe7
+g70oLN5LwV1OSAZKqK0vApefXz8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQD+/u8+6YJFX9oojEm2AX3x177Gb77
+WV46l14I/0a9NMi4e5ZFwOhuoK2RVGXVyFbGm7m3IrDRe/l62VxGAt6hfGtRIFTL
+ItgHHBbfceG3G0vT2ZOIJ9OVkJO52x/4a+1zlEpC3LZ8wzEC4owdDpgEpkUGVvS/
+M61y7Pe7g70oLN5LwV1OSAZKqK0vApefXz8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C0:KAS-ECC-CDH_K-571_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQDEGpcHZI6CZDqjGAIw2w2a1PlYiuY
+RkBEdB+8eEAoTbi79gKGbDDMv1+bflnMHZv8xblw+mJNqbFfbLM29d2n5rmSTV3O
+RUMAXFx7vVp4msTGKD3rDQ03xIUrqlfWvCsKxjN/6wlwTETRs4W3DMOU+iNdg+bn
+EReH5X0JAsDLEyoZCm5i85hRHAwsTNUNRXA=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C0
+PeerKey=KAS-ECC-CDH_K-571_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=003198a6b5d6cce847e24348a6a6ceff7a89ed3794d7acedc4e858c80ad04a74dbc02c7038e05ab26b2a299ec92ee0d2c7e66a81872a5157fbc5d4d37ad598d6ddee995ed28a2d74
+
+PrivateKey=KAS-ECC-CDH_K-571_C1
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAJN+2zqilWPSJIWR
+yftEiYUJX5E6dFgxVZPPzofmj7DxpSW3MQoQEXbjTUXBAEU4lU4gRFQ4F8qw1WPf
+bLDV6GF7u6FQ51XhoYGVA4GSAAQCNjzFYksG3xlWvvpZfUx1fMKxABo+FUTSRAgp
+D2lId0VbqS5WCIRi8P+svTk8+DW1a3BGoV1Lck3Gw1c8sVbA3ymKqLElXLgECfdz
+uY1e3Cc02DWVMoG4KsDhXZAtiHp8a6dWKaN2cbEB0Y3f3EGT2YsYVRQUxJFzAEUw
+95dtJ8Jzpz3buJj8tfrenAu3iD8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQCNjzFYksG3xlWvvpZfUx1fMKxABo+
+FUTSRAgpD2lId0VbqS5WCIRi8P+svTk8+DW1a3BGoV1Lck3Gw1c8sVbA3ymKqLEl
+XLgECfdzuY1e3Cc02DWVMoG4KsDhXZAtiHp8a6dWKaN2cbEB0Y3f3EGT2YsYVRQU
+xJFzAEUw95dtJ8Jzpz3buJj8tfrenAu3iD8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C1:KAS-ECC-CDH_K-571_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQCESI8S3KbIGvgH4CFqZfh3eXNsnwE
+iSWic2m8ymo+L7/GVjfx7OsTO+dJZ5oXsc5Ygh9GvRhEqJzwBCyAQ8sQXgGj/JSN
+JmMCsewubiwjdbRksKUCxQU7WzSL0IF4xyxgMQXQRoGWpGldwmfW4QnxsSdEU7bv
+8U3fN4OWnoglZI3rwhav/5JY9kTXfs2ZEc8=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C1
+PeerKey=KAS-ECC-CDH_K-571_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00577147459262e5ad42f222827f20ed574b2118924205bcdbd339ce20cfb085d072fd70f4ca1f5768fafaeb5710f7ccbea4fc2ae5377b0cff20a889a2201739139bf788a9bf2d7d
+
+PrivateKey=KAS-ECC-CDH_K-571_C2
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIADQJmwdz8CHuDT3R
+hccEtRWKlDKNqgl2j61YBN8dovwGcZDPECjDAje/KkjaE6uuNaJcPmOH05k/m1aD
+Bbi/CBj/Un3YIF30oYGVA4GSAAQGdNzE91XET9q9wHhIgQe7ZKRgupMsfhhUhMzS
+f6hwAxEH6ZVSBLBjC5tNNgjZqpMdfHZswuRYeOttjNlr33EbL+i0e40jPtUF2Wvm
+t+K6dMgDKvGcovKznS/U6MibFWtrJcLqT3H3SgLKfaKkY6zXYF1TUP0WqckFJTTn
+6B1kjkBgorAcRZwmDLZWfaH8UxQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQGdNzE91XET9q9wHhIgQe7ZKRgupMs
+fhhUhMzSf6hwAxEH6ZVSBLBjC5tNNgjZqpMdfHZswuRYeOttjNlr33EbL+i0e40j
+PtUF2Wvmt+K6dMgDKvGcovKznS/U6MibFWtrJcLqT3H3SgLKfaKkY6zXYF1TUP0W
+qckFJTTn6B1kjkBgorAcRZwmDLZWfaH8UxQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C2:KAS-ECC-CDH_K-571_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQATUi+WZ67HtYCRy16h/TNIID0TsKI
+Vf7MOpzd4lVReHq9J8wdp+d4F+lMnAKJwAWg4247z7DTgejMloS2990FF38W9j+H
+IcoGLPca8KL441xNf5MSvTSoRqOA9j8NxylMGIdxAzV+INHw7v8xKpk96yoez8gK
+6galtx5Pi5zvrrzTJiaRkGT4ivQW2G4+evM=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C2
+PeerKey=KAS-ECC-CDH_K-571_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=014662b261d0bc2168642bfa4f80c4b3fe8176f604ad3703f443ec7aaa3dcf3c5465b869a8fcea60b8f55ce7118806c5d28a04848bd961db0061209b59bc02979acce9324d7c0c31
+
+PrivateKey=KAS-ECC-CDH_K-571_C3
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIABVHQ433b8teKuaS
+WEW7+wO0++glVhbsf72XtI8RJpIhn08SdebSRT1bzzusQQbwFhuBGfSH2ItfjI4I
+s6oXuD/gEQLXY5LToYGVA4GSAAQEJ+LcEe5SI72cPZQYx5EUaC+R3aBufYjDOafl
+bg37Y2tuY/3oo4EUbstwXKIC0rc99AhFF2PFFmBmqX/05PMvC0zJQjRLCy0HYMij
+iOLuon72g4x9RQUuOMvuIJbL6J93R3QTQHZljfkMYsfcDj/emV16mQkJkwCatsU1
+Z329s3bxg+tQktLLaog3tr6jXc0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQEJ+LcEe5SI72cPZQYx5EUaC+R3aBu
+fYjDOaflbg37Y2tuY/3oo4EUbstwXKIC0rc99AhFF2PFFmBmqX/05PMvC0zJQjRL
+Cy0HYMijiOLuon72g4x9RQUuOMvuIJbL6J93R3QTQHZljfkMYsfcDj/emV16mQkJ
+kwCatsU1Z329s3bxg+tQktLLaog3tr6jXc0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C3:KAS-ECC-CDH_K-571_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQGvyUuYsmWkXGpcXZx2g9wMulSCkl+
+yDH03HdqyH4BlK+ZVGxB0IBI6gbakjXPE2nD6lPmuMu3p/1CljVFSNRO30Y/d600
+GwIClNX35zbc2JkBmOTg8LOYuKxqh3ZK9gFZYjSi4WLJxmfkfrPZh++66wO142ma
+OO+VPHT7KP19ik7Fo2MZzMRKGaqIIB3ay/g=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C3
+PeerKey=KAS-ECC-CDH_K-571_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=051ec4db0622b7b1c798366453c70f959376ea3942aed2e931ff62a4019eb12ba5ff119214c8bfd8bdb66e62b562400f2d3d48a84b1b3baad3667f735ad4d0f183bdb91aaedcf1f1
+
+PrivateKey=KAS-ECC-CDH_K-571_C4
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAMe0JSypsZLF/qqa
+IQ/YTi5IMgJx8Q9n6p6zCw3oCG1Z2uBCWf0SsIbYkOItRdJ9fIRV3Petp5bjXjox
+ODQsxza8PtN4HEEZoYGVA4GSAAQDJWI4OOixjYG2gGBzQlTrArjrsiZFVvyYUMNt
+MDVEmqdk81Hbr3u8qbmtsR8nzIihrG+3GqEO+NDQk5Kwyn6qelzBQHjMGLsAmPx2
+VtneOlGSPbopDsvkE++NlR8k6SSMtVIwn5cSf7lCns9t0Htt6JTharYOM7TucwJM
+y+hm3l4X8bR43HcnobtCNxggsS0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQDJWI4OOixjYG2gGBzQlTrArjrsiZF
+VvyYUMNtMDVEmqdk81Hbr3u8qbmtsR8nzIihrG+3GqEO+NDQk5Kwyn6qelzBQHjM
+GLsAmPx2VtneOlGSPbopDsvkE++NlR8k6SSMtVIwn5cSf7lCns9t0Htt6JTharYO
+M7TucwJMy+hm3l4X8bR43HcnobtCNxggsS0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C4:KAS-ECC-CDH_K-571_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQFcB5jsBwWxOsZk4JluhNMrHMWJ44v
+HrQKBHdUSL3tl+ejfQH+2KTgtD/026IaR3WczUW/lnHdIu7GW0r/i424nf4+SQwK
+ydYC3Ze2QVruKwHP6zzSoDV4q/7Zyoe+mibYmVlah7y9lydI+moL5OtVfmnG0o4r
+uhWA3HTidR18zZGMRrS+aHWk5MKQ2VnCPBI=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C4
+PeerKey=KAS-ECC-CDH_K-571_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=05b355eb5c47d8027b6c5301d2463b99c636db207792e2975ab1a53c1cbb131280288432a79a3b47271d6a2bd777298baf8a675f66be9dc72c3588d299df8b52e7840322b43c2071
+
+PrivateKey=KAS-ECC-CDH_K-571_C5
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAGbMUZgNOFG0iMLB
+gUlsg1BfuVex7EqE3x4QXjDQAry5eLbQvcO3ZE7T37wzymv+Q2LNjMVBdAsN6M8u
+3M5FkuNPoRrCbskioYGVA4GSAAQHcfop5ZMNbf0206nnFZZ1/SPQteH9muZFSsqe
+gSfx5+P1MitcFrCVVzsyZtCPDcMwQ/+z17COTgUu0/A0mjKQJepv8+FmhUcCL5lP
+mXRpLbtuWMx65fkGUu4jHgo5YVadxkbRFFIqN3dBDBs1LWaAefgAELtUDkwoQIZl
+gQ/mH9YOcNMMaI6rj94ENk3uXJs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQHcfop5ZMNbf0206nnFZZ1/SPQteH9
+muZFSsqegSfx5+P1MitcFrCVVzsyZtCPDcMwQ/+z17COTgUu0/A0mjKQJepv8+Fm
+hUcCL5lPmXRpLbtuWMx65fkGUu4jHgo5YVadxkbRFFIqN3dBDBs1LWaAefgAELtU
+DkwoQIZlgQ/mH9YOcNMMaI6rj94ENk3uXJs=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C5:KAS-ECC-CDH_K-571_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQDL6GBb9IxfBa1sZol1G+l5FqxXuny
+sdEnTCoGAjmU2zCfrVb2CzzlfzLfx9BFqEt9gFIyvjTH51lRTDCiUge6gAIVsgYP
+BMIEFGlZPVdIByuayP3gIwlSibzfZasb/AhW+D6a4GyJcwO9FvXkWCPWX+yDEP1D
+MrZc/0enma9PfIY44tf4WUjEPxBTTJgMy2I=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C5
+PeerKey=KAS-ECC-CDH_K-571_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=052bd78bf1326c6d91840a351d4874d36b147139882356c595b8607f9998773092a99adf70adeed19e122d4d2fec16285f000161145135d96355cba039a96335e7716724c249f88b
+
+PrivateKey=KAS-ECC-CDH_K-571_C6
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAZkNFfosyQ54PUMi
+AXhLq1a20p0fJmWnbNAT65b2MA7Y92K3ilWWrH6MHnYWfxB8IEQ7GscyEB6fCsoS
+VRpTbRUt8rPbDyDeoYGVA4GSAAQHbD1y8OcV8kkbydmSeKjvPDkLOpbpmXs35be9
+il8Hr2j44O44krY/8RKnOoSfDoSngtT7Qm618vFa2szp5UdqbazPOn+popEFQKdj
+gjWZ4MhgJ7rMjLsw46JGcnb8T35f1O04XfxviD/te8pp3yGgZotV69KS2o/WNWo+
+xc0cdiwBRzqgZwBMrO2tVk/gaRA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQHbD1y8OcV8kkbydmSeKjvPDkLOpbp
+mXs35be9il8Hr2j44O44krY/8RKnOoSfDoSngtT7Qm618vFa2szp5UdqbazPOn+p
+opEFQKdjgjWZ4MhgJ7rMjLsw46JGcnb8T35f1O04XfxviD/te8pp3yGgZotV69KS
+2o/WNWo+xc0cdiwBRzqgZwBMrO2tVk/gaRA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C6:KAS-ECC-CDH_K-571_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQD5j3UyYwVE2HJkCt2OuMvLW3nWVP6
+PWg4wdYT1Ej8pzvzAtMCEqltMrlUnhfFzzlcVlGR9qItrE2nweGp2brobr+3LILq
+GZoEFgmrnBLBXlEnAF6+/2/R9ztpEu0HCvh/X/wh35A93h1xVYLdL2mQQCAARc26
+ns11isTQhNTI14IZ9vrZTTQa132szau1Sis=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C6
+PeerKey=KAS-ECC-CDH_K-571_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0226c28e5a6bc735935f9df2c1b02d096d4dee41ffb95a67905aab8de1b2d8c66e2bb471293091438d3f05df7e48003e58a958b72f839f7f2e2c54287fa3cadcd41a2542ae4ec03a
+
+PrivateKey=KAS-ECC-CDH_K-571_C7
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIACsJN+cx9Z3d3w6U
++6krsabOuBnnZZvPbt1LSvScLvJcW2A5JW+Sg2PhhASxZT05mAVMLCWj+DoMVUih
+OePmoYB1Z0bNNO4poYGVA4GSAAQCcMTADeJwkBDHzwR6DOabh/QdykjTW3H7pLJY
+iG1zrkLe+4ZTlRwb0+tM4OYXWpRsZ6+md1NHXFH9UlsP2fWiba/KMZ+qXhUGaAu9
+woFQX10/vil0SpmeB/9hJXaZP2+L4xE9se5s8jeZhnu8gKFAN2qbYydFH5i/j9Hb
+RvnZzAXohwTVcS1FZ+HfQNOeme8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQCcMTADeJwkBDHzwR6DOabh/QdykjT
+W3H7pLJYiG1zrkLe+4ZTlRwb0+tM4OYXWpRsZ6+md1NHXFH9UlsP2fWiba/KMZ+q
+XhUGaAu9woFQX10/vil0SpmeB/9hJXaZP2+L4xE9se5s8jeZhnu8gKFAN2qbYydF
+H5i/j9HbRvnZzAXohwTVcS1FZ+HfQNOeme8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C7:KAS-ECC-CDH_K-571_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQG+Rp84Rupvy3h/gcPnchDu3F8MG2c
+Y7UHjSoRMj8gycDXt3Q9MR3azc9d0A9JixmWcseK4l5oZNYr3BaTXW+42tIILTZ2
+6/MEWTxbrRLD1lXGYRx8qXEfnjKij+5Us7gkOWKjxV1B8sGF5MWLeimY6XgCG5W3
+JGNdrMvX/DDSByB5e8KRNixVsCSssr3PPVk=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C7
+PeerKey=KAS-ECC-CDH_K-571_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=051a3deb052d3e99bb6ab6c6b284db2c998e9bee543e02e57f1b13fe9fafbfe53a89658c58eb947dbd178aea2f6cb28e305c9867bd65bb26f71793f90c984ca11113e1a8dbc8f7d1
+
+PrivateKey=KAS-ECC-CDH_K-571_C8
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAc1Bz/diQCqDTn4K
+uQj8VJQPaXtQAipN/tjPCxPX4O5SP78z7paTiV+RjZThWwhGVdYbIpTKUcQSP+Xg
+ho6dDRysITjwV3oXoYGVA4GSAAQGEHl7vG2RMRgK5Uq2bmeAhJJYNpdBRw4HbPBe
+B4W7TnkAuQjTjY2rO5QnuVKt0g77dYz/gK62QcTd4e7aVQnzhtVlhVlgnO8GjSUV
+9CWg4wN1RzQvG2/5MXY/UFLlNupPeDd7XJQUWcjCIBSCr8882nOQ6eXTGUUYZMoD
+aDVBqyzXep2I/XphDKhF7lzT1Jg=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQGEHl7vG2RMRgK5Uq2bmeAhJJYNpdB
+Rw4HbPBeB4W7TnkAuQjTjY2rO5QnuVKt0g77dYz/gK62QcTd4e7aVQnzhtVlhVlg
+nO8GjSUV9CWg4wN1RzQvG2/5MXY/UFLlNupPeDd7XJQUWcjCIBSCr8882nOQ6eXT
+GUUYZMoDaDVBqyzXep2I/XphDKhF7lzT1Jg=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C8:KAS-ECC-CDH_K-571_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQFqyp/EKyJ+YxAlYCrwRrZDJM2Dmqy
+gpILWdMWyp8rI661CHbLG8vo7prmtVM/3NEa1PhtiRjWY4nah8mL8dYyO9CUfYCZ
+CDsGieGUcnZ5HcuVJxg+MqCAcrfgPcrRdf48/Xvu/ISNzvSDOAxgBUEThccCfJpS
+tgpuU3qHU4DSW8R8e/I2TdaKZvIdD1eGakI=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C8
+PeerKey=KAS-ECC-CDH_K-571_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00697c751ddbca7034fb4d3fc1b2618daf78cdae464e8332d1215020c8f896f4864c7a6f2c61a363f730f58fd3bdb4f78a90b40aeb83b4fbc1d8d37cf6a27a6f722c68a82979fa16
+
+PrivateKey=KAS-ECC-CDH_K-571_C9
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAZ3/DXKosELE6S8d
+rnQHv0oQbNpWTbdQjlp2sDEwyR1eXLzy9XjC6d7kOEn5Edd3PUwmfigsJ3tzH4im
+7w7t3VIPV+dD6/lloYGVA4GSAAQFu2Cl/o47Fzz4QT6vQToyhqWnqjePIURsYQV2
+lgEnRtAtEKgx94XJyWVh/8atT57N9JN//9jmmECOZg/olvftRK9rO0LqhJ8Dfjo1
+5Iqma9hRxZ+FHUof8zTg5YnawwmGrNBtbrjOI28qlojyeKFNz+BmC1+g6X7Pzrv1
+tA09P1FQpVRay6YjnABBmsctwsw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQFu2Cl/o47Fzz4QT6vQToyhqWnqjeP
+IURsYQV2lgEnRtAtEKgx94XJyWVh/8atT57N9JN//9jmmECOZg/olvftRK9rO0Lq
+hJ8Dfjo15Iqma9hRxZ+FHUof8zTg5YnawwmGrNBtbrjOI28qlojyeKFNz+BmC1+g
+6X7Pzrv1tA09P1FQpVRay6YjnABBmsctwsw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C9:KAS-ECC-CDH_K-571_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQANAkcOsb8UpnfGPFi6veiB/wVQ6pJ
+jnJy4VqSdy9XdyIpBpRW4hnJwocr1TeDsPsTRfXoRnTENEEpoxQUa3Aw/HUZeiDF
+iKoEnjo/XuZYdeFAEImXBji4B9+XVopZlcj+L1Akc7g/WMVWxfIU7W8D747OAUAa
+ITS8BB9mki/MTjk44MbTAutCIAZ4qXE58pE=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C9
+PeerKey=KAS-ECC-CDH_K-571_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0322517da30e010aeaa2ec9bad2745d8e67f906294ecd6b1d16808be3837f79070d0e1bbbd617f4b8b031d3b51ea2acc59de408a130138c78571f8800fa907caf550d23323d1c818
+
+PrivateKey=KAS-ECC-CDH_K-571_C10
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAeFBbUKZJsq+pUe7
+J3ZxClL3EwOTCBAgMSs5Yhletu0XxtQ2vEaltHp6qs+PgRf+o8r6FmZcwYRbDslP
+r2h1ebHBFroYPoJfoYGVA4GSAAQGVmClhoihZYipwWuCcgQKMK/jFQYwZ2Aj/hZW
+ht+9pk/IWZXdwYycWwKb/71N/6j2KYnGOaaGI+yngAnLCI7hy0LEhVt50wIEksOG
+fxN78nh6erBWjTB5uNmh4LC6XSnQx7phbQuydyXaLKa8Z78IT6tSWZ7UKw70h0NC
+PLxvQTVpLDCa4mMMxKU5C+k/J0s=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQGVmClhoihZYipwWuCcgQKMK/jFQYw
+Z2Aj/hZWht+9pk/IWZXdwYycWwKb/71N/6j2KYnGOaaGI+yngAnLCI7hy0LEhVt5
+0wIEksOGfxN78nh6erBWjTB5uNmh4LC6XSnQx7phbQuydyXaLKa8Z78IT6tSWZ7U
+Kw70h0NCPLxvQTVpLDCa4mMMxKU5C+k/J0s=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C10:KAS-ECC-CDH_K-571_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQFe3xlvFHoe9rTfCtNrmf7AIznH9MH
+LkG3fFYtfEF0iHKiC++FF7pL6JY33emOK6GzsB9jlAcT4oI9jatopcx4Vh3hQIXk
+z4cAundDClVgCJ36xPaLTzSTejhN1ge8u1+rVnen+uCe0Hz63jmeh86f3ZOXxoGq
+M3jOO8grAH9t5PfLltrfVaTIc0o385pcLyU=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C10
+PeerKey=KAS-ECC-CDH_K-571_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=000911ec1cf82a22c849b401dfe56453a06f4af32644ea8b63135b68a979236d05968eeadca7f0cd339d295cc58967a7f38cfad6e947a71295733e42ca3c1ba9b4ff6195607bb530
+
+PrivateKey=KAS-ECC-CDH_K-571_C11
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAZY2Pu8aDlvpfY92
+Af5A/0AQ9JSfAWkIqQbtXNrxIh06WTs6Rna+r9H6FLwPfFM7FwhvIH+cSEz8L7w9
+sr5BI6jobztJEczjoYGVA4GSAAQBsS44kU7gB1qIjW1hzcdXDFEdkKnjoOJzjDqZ
+gauauppsYUYLrQeaKEKaUgfSyAGvL9zto2ZEChFoZ2Xpunf3prxVAS1MlRAHDt5Y
+d2Zf1jatz9ByINdF7XrAqbAgIVn0UMn2wbg3GSpp7mrZVTJ+uc0yagWItZcj206P
+0lixHbiIpT6xTyvghRJogykFmJI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQBsS44kU7gB1qIjW1hzcdXDFEdkKnj
+oOJzjDqZgauauppsYUYLrQeaKEKaUgfSyAGvL9zto2ZEChFoZ2Xpunf3prxVAS1M
+lRAHDt5Yd2Zf1jatz9ByINdF7XrAqbAgIVn0UMn2wbg3GSpp7mrZVTJ+uc0yagWI
+tZcj206P0lixHbiIpT6xTyvghRJogykFmJI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C11:KAS-ECC-CDH_K-571_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQG+nR37exfHnQogfjXsq9WN1ET6ZK3
+l/04frW1PDPGunI2QXssfm40YmfxuMbXhX1uCPmmDobeI9pLNoQk+wA/lrTIn10k
+SnQHPh/t9i6MgSg2IrU+ss2ye2TDwd142gyQ3Ww8d2rRRjAuQ6ulQTebyPO93C4Z
+/xXZZmTOLQnrb7WxOEioKzG0UtjoTaO4Uxg=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C11
+PeerKey=KAS-ECC-CDH_K-571_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0724c979affb3ab8d307529759bae5fa67319d441851e5817fef014350e3014e068428c9dac395c5e7b9e5b8877457b3e4625ef49ede4ae3626755eefc3fb3cf09c23e8a5a9f8c25
+
+PrivateKey=KAS-ECC-CDH_K-571_C12
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAKGaDt9Qg0f0QCzs
+vOEn3GQQsZZ9P4nms7oItIqtCM1speXRIozcxBocOA8q6QUtc9t1UOejwdhXBWyY
+lH9bLHHDPE7rwSEMoYGVA4GSAAQGKfcFWDCHCOaSmxrQ/jEoqK9/llkbR8uOosNF
+QSCm05PtmJ0TIxxmGWajeLln76ZNPAk46cC4sWyZ1zSb3Vni1EgE+P7h+0cGpeUP
+1QJNiVPjIkKCMlDpmMpgK1JZlAUSlzWodOgzs71z16ncU63qCSuo0kIH9epWV6KZ
+GbiKbWP9CpQ7Vt3kyEeEgbV3I+Q=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQGKfcFWDCHCOaSmxrQ/jEoqK9/llkb
+R8uOosNFQSCm05PtmJ0TIxxmGWajeLln76ZNPAk46cC4sWyZ1zSb3Vni1EgE+P7h
++0cGpeUP1QJNiVPjIkKCMlDpmMpgK1JZlAUSlzWodOgzs71z16ncU63qCSuo0kIH
+9epWV6KZGbiKbWP9CpQ7Vt3kyEeEgbV3I+Q=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C12:KAS-ECC-CDH_K-571_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQBi7bL/L+67UaFZLNo8LCrw/vKR9zB
+nyyEa/ooc3DhuRL2tw4IUZ9XfwysMlt5/Wa2sjqh4q4mK80ueossLZjZ7XelTHKV
++Y0Fvpu9kXcrtCJmq6nIk+VmcM+2bK++RAHKLLV2W0aVBISFl8f0RumYFHRnhxWK
+g+v443loVzY6jgT4dCoJ1+yhY4bWD9fIWN8=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C12
+PeerKey=KAS-ECC-CDH_K-571_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=005a526588a3a2ce08b20925e83987eb0a1e68f997102df7f9af83823ac8e06abbd29c04cb1f974ba9c9ac49b48b5af37679a39b532d359cdec3d41b3f80a1ee12c80276256b738d
+
+PrivateKey=KAS-ECC-CDH_K-571_C13
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAEysP8wAc0RCzdgO
+r4JEEsIOqe6wPUO5mdSd5hhzYCAgorPEeWX29FO5G3osHZPhOolURTPjWhIs/IYS
+yGkLabt6VXh1+WCyoYGVA4GSAAQD4hHDtJhpJ8Q4jRaAy0dw3ubHgmZyRYLGbMxQ
+xssoI5R01SH6zHIGr2uynM7XM+27wNILkmTOY9lDcYjj0xwOC8Pp+diEKeQDenxZ
+ASqC1ZzB4vD9T9dR5XN6y3fyoHmeCvOJlqteEQkKY5bMSA5vKqvY+tRGEWkeWCIR
+X9SdKgAMm0nR9JZOJNQ/u4H6h58=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQD4hHDtJhpJ8Q4jRaAy0dw3ubHgmZy
+RYLGbMxQxssoI5R01SH6zHIGr2uynM7XM+27wNILkmTOY9lDcYjj0xwOC8Pp+diE
+KeQDenxZASqC1ZzB4vD9T9dR5XN6y3fyoHmeCvOJlqteEQkKY5bMSA5vKqvY+tRG
+EWkeWCIRX9SdKgAMm0nR9JZOJNQ/u4H6h58=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C13:KAS-ECC-CDH_K-571_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQDIYS2hj4stbxxuv9ba1ehBZSDHMEa
+nl7t7EgE4gFuPdBkz/0Soe6g9pMpEd7TRazlwf8lC5ZI2TuVM4ba6bVijDxiUnuJ
+BRkH94PgNBqHHmJW2jSeu1OfiHZ9fawVEePD5NQ7D9MdXdLC8PF26sVEqHH0K5g/
+j7pN9nq2ojm335lyJjBLcxZdli9OHS0Y3p8=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C13
+PeerKey=KAS-ECC-CDH_K-571_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=049db68dc9fb4cfbad8247ca4fe7c573c0640abead8f319194d665ecaf4f04b61f84f5df0d8a6386f6df04ca1a685a7394567eba5deb9f739b1e623ed6507021593f0e22e2dfc3f6
+
+PrivateKey=KAS-ECC-CDH_K-571_C14
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIANUUFE1FSLz8vPVw
+Cffo7hBLFUVvSRgmvf2bpn6HH9vY/ISQ7LyyaQkfx1KeXlVxOoHeIMDtAeyzFZrm
+FCS9vFZTcyWH0elPoYGVA4GSAAQD7l+He3N9rkC6+R4MxYHf6NKR+MRR1b/AtpDf
+cCWHXZVp1SAhs7aJDgGiupWJnikoqQLNXcgUPAfqJnSanJQGi1w0xZawlD4Fjhul
+FqgYyumzcIYofgiAg+K0If7wtZuoFqsDE3XQnXr31XhmdEaHvju0HOInbTo4+Xu7
+n7WfJKkvAIWwTuXtGsDvpnE5T3M=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQD7l+He3N9rkC6+R4MxYHf6NKR+MRR
+1b/AtpDfcCWHXZVp1SAhs7aJDgGiupWJnikoqQLNXcgUPAfqJnSanJQGi1w0xZaw
+lD4FjhulFqgYyumzcIYofgiAg+K0If7wtZuoFqsDE3XQnXr31XhmdEaHvju0HOIn
+bTo4+Xu7n7WfJKkvAIWwTuXtGsDvpnE5T3M=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C14:KAS-ECC-CDH_K-571_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQHHhZ+WeKnCev0vj2D+53GntdJ46uK
+VOICw1+NRd6qK9qGwq+hsKBHVNGImPzdmxhfHYui4YCkesKRu0qtj5l/c7FCO81+
+m5IFcRkIW8fLICPSP4gQFCD59Qjw25T4377dXL6IzsgKnccI32zM34FddbFGKA18
+0uuXzxp91VC+Ujgk+TKnd2efLun2bUJY3aY=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C14
+PeerKey=KAS-ECC-CDH_K-571_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0343c45daab4f91e02ef9bd6e1cd157b00ab0ab0a3e0d9734918a1d896cdf7cc1212bf74d7bb9bf96bd4abf42df325756c407217f44a5950c2b66af820692742ed7ebe14e48d2d88
+
+PrivateKey=KAS-ECC-CDH_K-571_C15
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAMzG3KWphVg84AgS
+w9B4IvY0HHnXjBay565Lv1v/rBrNneq2eBk/j4mw4qrlLjAxFETdESU/ltYts6v7
+F+Qj8N3w6ZEIEVTDoYGVA4GSAAQDgmIVNDz9Stlo1XK6st7iJ5+ejv+g/4Cw313S
+6oIrUCJ05QfIfSQp3Yu9um64q0M7HuHK06l8fSRBlP2aQ/Ph/zMUTi24CGQHD0UI
+rjkc4kFUs4hzrwCC2ViVrJL9GqMhupO+70BKY/exr6H+7Jl4hVI6ZoitqU3UXrMs
+p/G7h+Y8Tel0kxlsO1PPg9IY3Dc=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQDgmIVNDz9Stlo1XK6st7iJ5+ejv+g
+/4Cw313S6oIrUCJ05QfIfSQp3Yu9um64q0M7HuHK06l8fSRBlP2aQ/Ph/zMUTi24
+CGQHD0UIrjkc4kFUs4hzrwCC2ViVrJL9GqMhupO+70BKY/exr6H+7Jl4hVI6Zoit
+qU3UXrMsp/G7h+Y8Tel0kxlsO1PPg9IY3Dc=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C15:KAS-ECC-CDH_K-571_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQHTxp7XPsO7vHhXmNRLHMYja++iOjp
+xCBzsrZSufAoIU8L7HkULYiJQWq/eoPin0eee8PKZX7woQwuo63jEXwNNp2swjOd
+HBIA6JkqVAdnUwKfLA6djBZua6hIlqR4X//1mMSCPlRh/wBUkLt/tth4rDT0J/2d
+tIy98S65gm1o/SzxcdTWHD8nXUSUfU30x1I=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C15
+PeerKey=KAS-ECC-CDH_K-571_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04a565cb3e15236a7f6c413afeb419c082427b10a6d07ff87e81740716433c06b3254414381e4ff9860340dd6201ab6621d162cd12047a5515ab1d65f20c97eb3d7132642f8ad58a
+
+PrivateKey=KAS-ECC-CDH_K-571_C16
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAYhiE2WL0X59wzTd
+gAOSakR8NKGX7l1tC7xG6F7Bz6aAKFjRw2cnbKVyuieqel0eIWkCQWtIr25Cd5Re
+Rl19hA3/FDhUPKpGoYGVA4GSAAQEf2zEIQfEDBaNxnmoZPlptT91YlcRO3UCeW76
+VM3M5wS5NE7kv5ZHUtaJECYr0mq2s0cIRASygwbKNCXymJTOb9QpPFlzUi8GDP21
+RnZ1p4mSO+lzxmRdvibQCjnU6BJVIXKRo4gs+o+R9KqCFNNSTJXvaiTkezudDvVf
+ZwdWrkpNnGXwdfQXCy0YqvvKAmU=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQEf2zEIQfEDBaNxnmoZPlptT91YlcR
+O3UCeW76VM3M5wS5NE7kv5ZHUtaJECYr0mq2s0cIRASygwbKNCXymJTOb9QpPFlz
+Ui8GDP21RnZ1p4mSO+lzxmRdvibQCjnU6BJVIXKRo4gs+o+R9KqCFNNSTJXvaiTk
+ezudDvVfZwdWrkpNnGXwdfQXCy0YqvvKAmU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C16:KAS-ECC-CDH_K-571_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQAS1Szzv1BX16qykrk5drPvOIMuhky
+ovUFSbzTFjABetIUdd8VT/N74TymGkxgM2sz0P/HYqqenp/G5v0XJQteQCK1UUHS
+P78Fb3yNZcVo3pW9FmT/9xQp7HOJh2l/IX3lrfNtFKgLb+WF5GheA8gYOKvt/cBa
+HgFAevSrmJ/B0Sc7qKGCxGGFbV7/5wXX3+U=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C16
+PeerKey=KAS-ECC-CDH_K-571_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=047265831f1f589b5f30806e2fb80aa7844cbf32b6993384beaac7d992b327b97dfd0bb89ca09e711507e846ed4ad003e7115fa8843b23d38f320e43b5eb506bde48fbd7af4983b9
+
+PrivateKey=KAS-ECC-CDH_K-571_C17
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAEwN03FeiIjcIiIG
+nn9hGAFoUUAwPha4tENDPV4YpLGAPVaAQWrr2nrn6USRVL40an3LNsHbInRGc/s7
+JF5YRAeH7T3sbT21oYGVA4GSAAQC+yQessKKGwZ1tXYP5WY++mA+sFkIQvRVlz8F
+c+FIpH5j+X6N+aVwsGVdWvxCAZ/pX+RP2wKmgnHYLfWAAQ+R3/DLPZvaiZIDP5Op
+3DnYdAO2qU3AYy3sZ1eELQqvitjEHrtjcFi/wRwZo6mr3fIEIB70+W/pYpIzpQcK
+CHlNFEcAkeMM3Ydqr2VAdicjMjQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQC+yQessKKGwZ1tXYP5WY++mA+sFkI
+QvRVlz8Fc+FIpH5j+X6N+aVwsGVdWvxCAZ/pX+RP2wKmgnHYLfWAAQ+R3/DLPZva
+iZIDP5Op3DnYdAO2qU3AYy3sZ1eELQqvitjEHrtjcFi/wRwZo6mr3fIEIB70+W/p
+YpIzpQcKCHlNFEcAkeMM3Ydqr2VAdicjMjQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C17:KAS-ECC-CDH_K-571_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQH7HG+oIEZCpxM3/gJ7Stlp3gAzRs7
+7/0eQATRJqw1LSQjXHl6WlZ9rvc5PSdmOBMup/D2HlUNwlHTQfZhAvlsKr9+43wP
+ye0A78KshwWy+cnAapEKMExCsa1TEBrrDRRjGdwkgVx8wZg7HK2R1fnG1e7xZ3of
+LSvddaH7TFeWpMVpZKo+Q/PaJsc37dnLCRA=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C17
+PeerKey=KAS-ECC-CDH_K-571_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=059b62c25c96955b8fb4deddcf90ebe6845ee71ea357739273d6d67f21a0c47d154add9d5d4d2b657fe1988ad614b0b4902faa92fe999abd754ad33cd6b92fe2f6a68a6f2c1eeb27
+
+PrivateKey=KAS-ECC-CDH_K-571_C18
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAH1UGU/CJsw59kDT
+0XublbcLUfmK1coZkVZhCNg543fiG6SMv0QVMLM0HdxhsKWBQaqmZTAkH6UpUF1w
+gEslYMW+SBMQuZYtoYGVA4GSAAQC7V86LvpKsPnbX87XsTAN5NRXqa0IJ0V+XhxL
+wV69GDd13ktzwfgg3UAzNmEA5ItBZNBOn7bPGkvbVRIqhgBfvQvSzdvJX6cDJ/5l
+TvaFY8yIiKzKhRY8KxVPtwsPSitYw2OIoMJfgKTIh5d9RgANxNhulc/Y+QZcAOso
+ZTyPtHe7tcY91HuDyl4Phx6e7T0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQC7V86LvpKsPnbX87XsTAN5NRXqa0I
+J0V+XhxLwV69GDd13ktzwfgg3UAzNmEA5ItBZNBOn7bPGkvbVRIqhgBfvQvSzdvJ
+X6cDJ/5lTvaFY8yIiKzKhRY8KxVPtwsPSitYw2OIoMJfgKTIh5d9RgANxNhulc/Y
++QZcAOsoZTyPtHe7tcY91HuDyl4Phx6e7T0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C18:KAS-ECC-CDH_K-571_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQGcIaGtPWtL+xFeq1axKPcSGekd+tU
+/A1JNRG1Vh6hUd1Mr11DEZg1ALSMgEOvCeP0BC1aB+vwUKToAdru8zF74JOVUCBF
+KykFJchoJYO1X37OxZuSCEb3XRHQIen/sgAYY59quTAiRywZLTmOFQzcYwoR/PlC
+5dI4zWwUsw9Eok0vhD7F0TXdx6vaVgR6vCE=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C18
+PeerKey=KAS-ECC-CDH_K-571_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=02777c72853b76b29f69d3aa27a1659789a025af0633d833b22b57bf328d231ebd128bf96a4c8a7ffd2ee7a51e5ebb7a8e5bca20e4ad49671a2123dfbc0d6c40594e04765186de06
+
+PrivateKey=KAS-ECC-CDH_K-571_C19
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAQdAuVgoUkIEXNU1
+jX/5Iyt9fUE69+IFwoX4hJLvJ6L7hQ4FZ+wkxIDHWtMvcDQgJchiZ9vk/4CixQnl
+uaRRMOmefHzIzG7OoYGVA4GSAAQD8/WFyv1GpmO2z4uDI++RWdUZXTEY8+3zhzLK
+D/c7LQZdnmmuHjl4ss5txhUA97i79vanC0e7ZMxP0ZW7pqyTK3C+r+F0FIoAsVZv
+5hnyzACroF4kpszLyRM4su71U9oNR31sjArExlbhNNvPMf+xXGfVib0pGPEXSQnl
+QoxxyQ44xOEbViNqv6HeaoV5600=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQD8/WFyv1GpmO2z4uDI++RWdUZXTEY
+8+3zhzLKD/c7LQZdnmmuHjl4ss5txhUA97i79vanC0e7ZMxP0ZW7pqyTK3C+r+F0
+FIoAsVZv5hnyzACroF4kpszLyRM4su71U9oNR31sjArExlbhNNvPMf+xXGfVib0p
+GPEXSQnlQoxxyQ44xOEbViNqv6HeaoV5600=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C19:KAS-ECC-CDH_K-571_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQHznZ0QD38YoldceKrWHznNfJ58S99
+8xYTNb5D/CkI6nNvb1i5MteTr/ZvMyc11NOPBcsDzydcoOANofVzgeCL/rUBeHc0
+InIH1mSfPZHnv1+N5hG9lxgYEG3y43k1u0ZM2edGlinGrn5/KyJAJ2yw7tt6JtDH
+03f0AJod1Ip5PMmT+w1KBNsdutRJMwS8XA4=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C19
+PeerKey=KAS-ECC-CDH_K-571_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=02c2ec1632e83416182a9a438f7360b88061bab84f5bded3dd8a0c87baf44507df94fdcf99353b107e61cfcfc8af071b3aa8cec7b34a542bf2ab8ea0bd9db67d66b428c9a6c14458
+
+PrivateKey=KAS-ECC-CDH_K-571_C20
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAMheXS3tW8O2tVP+
+CgIxG3K8XNyOlt8XnOV1EcJqyehz/B92zd6afY5Sp+m+XHdTYgMx6Jd6mJArSK6Y
+mc6KamY2YRJ2riODoYGVA4GSAAQCiapSCf57Gte5xeDmMLpeApKeobHxFNMKBkgB
+K/Ap4GZFPy0o4dUDZl3Qgz8Lo35Fg7Q03ZlWEAoa5uVPltk0fYBnQdOnbjEDOv6H
+sp7e9Ef/WgLmP2SQW19TrIVs/XdVrVQoEuzdVo6K4fnTL+oPAgGNz9DhbWpqJ5e3
+49yFW/22sNCyUl4UNnjVOb+MBnI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQCiapSCf57Gte5xeDmMLpeApKeobHx
+FNMKBkgBK/Ap4GZFPy0o4dUDZl3Qgz8Lo35Fg7Q03ZlWEAoa5uVPltk0fYBnQdOn
+bjEDOv6Hsp7e9Ef/WgLmP2SQW19TrIVs/XdVrVQoEuzdVo6K4fnTL+oPAgGNz9Dh
+bWpqJ5e349yFW/22sNCyUl4UNnjVOb+MBnI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C20:KAS-ECC-CDH_K-571_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQEg61zguNIr8fycdUNjTm4FLfW3AxW
+KmulVlaARb0tYgkGqxEG+RN/9yWJLoQ2qM17iIkqMvGasmnirTDX8OwA46BS+7xG
+YwcEHMSw8ZXcc8So4QYF8qOCkjq9I4HyTkq71AHgh8UNGPbasBol236J3/9oxmNJ
+T7TQh6gWuFRE2IK+wqwl5C/eeOvMp5pv3fA=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C20
+PeerKey=KAS-ECC-CDH_K-571_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=07e1d202a54d34020939f7aed56931f21b206761e4fc79b9a7b320f81077be322ae7809446b5b3ea701618ecdb0a1796ab80407a281bdbcb4d580131b61f8743bfef7a4d9c5941f1
+
+PrivateKey=KAS-ECC-CDH_K-571_C21
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAFOkjP2o7iMs6jVJ
+knsi83XWCWVgAl4hMWHUPu0C0HNl2e3nyT1FfqUeojaeh0Y+3b8loGux8ID7R2MH
+SoKD3T1p8d6GUpXjoYGVA4GSAAQEeQ+dtgC5oKV+A9J0o9I6VaoNhrLW+gf6/jyd
+TDOTdx3eiccKZHCjG60QXCHUhEzXv8O1lzj51sUoxBTVJPiODIYuThev9FQF3BLb
+BOJInbikbN7/n42dLgDQJPZWx4HrTS2xZ2JLOnCt2qoVjKAGAdTK0GWRe+vnZpEv
+q6mYf8xfyKeN0hZDqmUOakp+IGE=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQEeQ+dtgC5oKV+A9J0o9I6VaoNhrLW
++gf6/jydTDOTdx3eiccKZHCjG60QXCHUhEzXv8O1lzj51sUoxBTVJPiODIYuThev
+9FQF3BLbBOJInbikbN7/n42dLgDQJPZWx4HrTS2xZ2JLOnCt2qoVjKAGAdTK0GWR
+e+vnZpEvq6mYf8xfyKeN0hZDqmUOakp+IGE=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C21:KAS-ECC-CDH_K-571_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQHpejrSWhJehG5DGDhPV88YcaGhXOm
+ttt8IIqFbVTnT0No4oEAueC/SfwxBOFG+9p4RiOjbZ8B8j6636sE1/SP9mUGxpi+
+3REBPblo/HzTOMuOMEKhcfowb5q29shl3cW6X+mUow2PwfoScZHwjk4UuaoIalL7
+yqRtIhB/1t9TEItT/gu5a8l0wDqMZSj5eS0=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C21
+PeerKey=KAS-ECC-CDH_K-571_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=07f49ee5d822b17e3f1ec9946fad8d0a0a6b327242afe675806b3e6b7541745e21cd1b70df926af057a9f8deae4cb9a1edc782014426152e8aa4cf6a4080dad4678dc8ff0d9e1af9
+
+PrivateKey=KAS-ECC-CDH_K-571_C22
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAVpeWUb+LJyubUEs
+YYwb0HckQysvHe2xMn2Kmc6DDmsDD0AlwUtOPRkS6pp4KQoc/H0BiaMMYUAQyHMU
+ahgvY5GTopEu3NBKoYGVA4GSAAQDFAiH6HA5eXhp9dnbUNkbpp0L/cWmd8cAYQVi
+9oDZUaXgUXyy+WY2fUjkI7BG205ovBxLMYPcgL7hJuiQFJlM34PEMSo+XqcHuNcG
+liyxkvDtFMTacQ0bGwc/2MpJepQ3mnRUycPUzm5f0uY4aFKnfFQ1q7I1NtzIOYbO
+3UUSdS8pXKUA8FX0YnY8KftnjKo=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQDFAiH6HA5eXhp9dnbUNkbpp0L/cWm
+d8cAYQVi9oDZUaXgUXyy+WY2fUjkI7BG205ovBxLMYPcgL7hJuiQFJlM34PEMSo+
+XqcHuNcGliyxkvDtFMTacQ0bGwc/2MpJepQ3mnRUycPUzm5f0uY4aFKnfFQ1q7I1
+NtzIOYbO3UUSdS8pXKUA8FX0YnY8KftnjKo=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C22:KAS-ECC-CDH_K-571_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQBPKr4zi4jIc8lbytkqomt1paMKYYk
+oivTjvlN6zpw6kTOh6lI6la/DulAcTT4yXsXsfVFYf93R+P2tlb4DWB3jQW4xMu7
+zzwAR6Lco+tnVLCp/Rawgfykl7Kd0uyeanWW0GsFnCqxiQD8xYcVJHJ245DfHbqy
+a6gSNaTcZzgjf879OBK3q0NskmxQxgDm6Qc=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C22
+PeerKey=KAS-ECC-CDH_K-571_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=058cd5608dd9d64d4d822baeca123358a4d7e56d3777ecdf569a149c2f85ed35479eaeaababd0b026dc3b56aedafedfc8491040413f85b669d8512a3ef7bc8fe8706b5c7585370aa
+
+PrivateKey=KAS-ECC-CDH_K-571_C23
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIAL1Y4ZwF336ZvZYg
+cOC0x1dgQoWER+AjtBuyl0Womkh03+MloV040vuehw9BndFfSqrGXbvFrCxUD1fN
+sORbyGYhcm2SLRSqoYGVA4GSAAQB5LKid93Xjy8RnAW2rh6noqdElh4IlA9lae6I
+CMU7x6EhOAZO1cjCIu7yd05wwovOOmwF86ZU4SEAarYryUOB0Byg0bCCNNYH7tjN
+eoo1SbDZ74eGh579ycD0zpCzmRozy7sdNwTbk1ExOLGaUOysiA5XjeIQRvA6IABI
+GAiEvELPmq/ljMHq9TbW0l8VQdg=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQB5LKid93Xjy8RnAW2rh6noqdElh4I
+lA9lae6ICMU7x6EhOAZO1cjCIu7yd05wwovOOmwF86ZU4SEAarYryUOB0Byg0bCC
+NNYH7tjNeoo1SbDZ74eGh579ycD0zpCzmRozy7sdNwTbk1ExOLGaUOysiA5XjeIQ
+RvA6IABIGAiEvELPmq/ljMHq9TbW0l8VQdg=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C23:KAS-ECC-CDH_K-571_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQHQ7PJZag+6fa9uZAaHcwfeBllRKiL
+nPgRf4ntFXTlxdgE/EUREsJXh34SsKZsaTxmVcErukU12Z1iQF9Knc68BW2LfLut
+oSAD76WKo6jGok9DxVgf7AQUQq6VUnXbwdRtEBVgWdJje5qCmUsCSiR9KmZyS6kN
+Anh7FosfofS2dJZFQGxDj40xbWcPHg2LAwE=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C23
+PeerKey=KAS-ECC-CDH_K-571_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03bf7a59bbdd688682c45664d20c19cb2d24fcca6772120cbeed1cde762d449ebf22855627eb6b2be6e7f7c0f0034d02686f2a4488549f8cb198e02b46972bcb88914bea66dd6400
+
+PrivateKey=KAS-ECC-CDH_K-571_C24
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJgSB6DCB5QIBAQRIARRjBw/LSii+Tipn
+wpx/pIpMWFowdAXQahoGeOkJ3W6vuJhmLN2LzAGd6xTl2S0XK6HEOO8PZNgBB8fo
+5oAp9OCqgUoQmco4oYGVA4GSAAQAk5OY5GOIbw27SKdPVzoSFQAGaOELV5idwwCy
++ajAjNQ9bLt/Rux3wcKUsj+GKZAn0rk/1usYIQqCML9G45IfGCySYMMIR6sD1I7G
+M7naFlDqdiZWs+MfJq7Afnymqvwe18tGbqrzmT4EZwSMlnux6bSuBzojDB4vdOLm
+GGZs9WoG8rZew5Vbb/uwapCM9hY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_K-571_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQAk5OY5GOIbw27SKdPVzoSFQAGaOEL
+V5idwwCy+ajAjNQ9bLt/Rux3wcKUsj+GKZAn0rk/1usYIQqCML9G45IfGCySYMMI
+R6sD1I7GM7naFlDqdiZWs+MfJq7Afnymqvwe18tGbqrzmT4EZwSMlnux6bSuBzoj
+DB4vdOLmGGZs9WoG8rZew5Vbb/uwapCM9hY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_K-571_C24:KAS-ECC-CDH_K-571_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_K-571_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAmA4GSAAQHIvHnoGB3UNri1ixdPUcPAGwyVFWO
+qqKU7u28qNML9Ku5Vd62LkF5kl9sut87+HdvFdyuNVat33lxBad7f29xIGyg5uqR
+4YgDXRCMoNYgyrlrfL9hfRtawG43eSYpiGVk/RR8WOVeQjNE/08fukrw/jQVKzhL
+doXKrRXTvCcOQ0Iq2HTnHkCKcabIqQ0q2Xg=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_K-571_C24
+PeerKey=KAS-ECC-CDH_K-571_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=06d410e9ba6b8b87b00d0f676de8ba27f6afe7e308c2e992f318fc14cba0a447316ad86e8e6c1d3345d8e4035735232c2c597e760b8800a89a521567b09408f9c7be279c137c963f
+
+PrivateKey=KAS-ECC-CDH_B-163_C0
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUD7a4XPej6DPBBLWp73IH9
+vQYXrfihLgMsAAQDVGZwHQsAMNCYtu0jQ9NVwkyQcnEA2LwC80HSYYYN+2Xwy38L
+SI2Clsw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEA1RmcB0LADDQmLbtI0PTVcJMkHJxANi8
+AvNB0mGGDftl8Mt/C0iNgpbM
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C0:KAS-ECC-CDH_B-163_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEA6ZHujLaxx7GeAsGOKcM0k/DvUyOAuae
+lhVBhEpKozdpp7znEPZkClYM
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C0
+PeerKey=KAS-ECC-CDH_B-163_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0100fb42d177ffe6c31378e2e04e0da7376ffe8765
+
+PrivateKey=KAS-ECC-CDH_B-163_C1
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUBeNzIIWQl1L9xyPKSXdGv
+htwEomihLgMsAAQBHklDDN0G8udluPLMBnzUJOLnVIUAg68VsizX39Hf9zlr8/MD
+j1BSSZE=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAR5JQwzdBvLnZbjyzAZ81CTi51SFAIOv
+FbIs19/R3/c5a/PzA49QUkmR
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C1:KAS-ECC-CDH_B-163_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEASgomJNkhtwuPNFYXzLVVEJk4ZHkBenp
+i7dJm/iV93+PyDAdbhx6n2GR
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C1
+PeerKey=KAS-ECC-CDH_B-163_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0681c9e59eb7eba769f5b6f2b06ddf1efd12997995
+
+PrivateKey=KAS-ECC-CDH_B-163_C2
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUD6h555SoHCJjWo8TnSOla
+yHENd/ahLgMsAAQBN4YLo0WK8Twir4Il9WHgEzHNh6gHcgNW4V3HP5/uehwCH+yp
+fNQSBOM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEATeGC6NFivE8Iq+CJfVh4BMxzYeoB3ID
+VuFdxz+f7nocAh/sqXzUEgTj
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C2:KAS-ECC-CDH_B-163_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBYdPzIxITAFBcxAty3DGJO5hCNMdAElp
+P07ccUsNC6pb/F2LxqwECJ3k
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C2
+PeerKey=KAS-ECC-CDH_B-163_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01e0749a21fc508f76dade85435bbbe12c448bd8c4
+
+PrivateKey=KAS-ECC-CDH_B-163_C3
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUBrVypq8i83MSCmVrRqXfk
+cnFQuzahLgMsAAQCWueDEbD882lWajGfiYSVRq6uwwUGQOsP31IEgK++ufJnT+sd
+bfSC1/U=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAlrngxGw/PNpVmoxn4mElUaursMFBkDr
+D99SBICvvrnyZ0/rHW30gtf1
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C3:KAS-ECC-CDH_B-163_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEADdI15jxQCaPHnGLOyOqKswDM8B0AMQq
+knq1eWlhIwlVdayUmwen0dS8
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C3
+PeerKey=KAS-ECC-CDH_B-163_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0320398f7acf791e0d602d7b94742cce58e9fddbac
+
+PrivateKey=KAS-ECC-CDH_B-163_C4
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUC0oqKodifo+Xllv/RgIJU
+7heg0PqhLgMsAAQG5sUklKtjyJyXiFVvcWZ387SAQqAE6YJYucVvAtPttMpbCu6q
+naqm/g8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBubFJJSrY8icl4hVb3Fmd/O0gEKgBOmC
+WLnFbwLT7bTKWwruqp2qpv4P
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C4:KAS-ECC-CDH_B-163_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEA4DbPfKxwBVKjoyzBK7NWB018xXNBxU0
+7C6LNX2eBp1/H6mL1E7YsGgm
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C4
+PeerKey=KAS-ECC-CDH_B-163_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03e4de43de85223d818e5be6549c29cdfa1afe1782
+
+PrivateKey=KAS-ECC-CDH_B-163_C5
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUC4XD39NwVL+Rwb5nZviKe
+ExfYK72hLgMsAAQHkA2sJR3oqUTPChvy6y7+7hRnbpsAkeffZ/d2InKdWbfjS5Rx
+J+f6Ll0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEB5ANrCUd6KlEzwob8usu/u4UZ26bAJHn
+32f3diJynVm340uUcSfn+i5d
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C5:KAS-ECC-CDH_B-163_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEATbg0FtPOYuCfhmARhSLL0FXP8B8BzmT
+TOwQVyhS4fYZIi4vXsTg+lqm
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C5
+PeerKey=KAS-ECC-CDH_B-163_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=037b178aab014d5abab305e37deed7f4798cdb862c
+
+PrivateKey=KAS-ECC-CDH_B-163_C6
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUCkj0sgCzsQt7yYz3r3KdZ
+1ZdE0+ihLgMsAAQCzctPke19F3aNuAvis6yeCVax2XEDJDP0VabNJT6RWC0vb1px
+JlXaHWk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAs3LT5HtfRd2jbgL4rOsnglWsdlxAyQz
+9FWmzSU+kVgtL29acSZV2h1p
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C6:KAS-ECC-CDH_B-163_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEB2w65KeBZzYn0Om8thX2JqFgpV3aBYwO
+yPJknC3c2cJLZDQzsU2QfFkD
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C6
+PeerKey=KAS-ECC-CDH_B-163_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00958b2aaa6061222dd248a6b9700fb6839dacdc99
+
+PrivateKey=KAS-ECC-CDH_B-163_C7
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUCWxe9bkIH2fsaOvAv1dsm
+r4NIrrChLgMsAAQG9vWx87GPRdtPs3d+aED7WlthqRQHN84UrrJOBZFYWnQXuJJW
+dJ9GHeY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBvb1sfOxj0XbT7N3fmhA+1pbYakUBzfO
+FK6yTgWRWFp0F7iSVnSfRh3m
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C7:KAS-ECC-CDH_B-163_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEANZfBRbBs+7ZIg5Zs9BJ3RFTF5rFAgv+
+EHqJpzYM0uIXU01t8pjMS8RY
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C7
+PeerKey=KAS-ECC-CDH_B-163_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0393387e1dab35748f20d506a0e2b4dc0ee6c3ff39
+
+PrivateKey=KAS-ECC-CDH_B-163_C8
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUAE36BMq0oiSPmSBHpIpj1
+wNzJVwWhLgMsAAQG8s3R1jDdcx7Xf5Acew5zVRXibU4BBi8vcVxNKvl7sb6LbPou
+PuMUJT4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBvLN0dYw3XMe13+QHHsOc1UV4m1OAQYv
+L3FcTSr5e7G+i2z6Lj7jFCU+
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C8:KAS-ECC-CDH_B-163_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBA2QPOKzD3CmoDhJsOF1j++Ih70xBKvY
+vbfBMnyZszgg2+GK4RT7Q1lJ
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C8
+PeerKey=KAS-ECC-CDH_B-163_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0212358d3f8bce69b662447333b3edbbc9b2f7e805
+
+PrivateKey=KAS-ECC-CDH_B-163_C9
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUBxIxQt9Ps3zuQG60O78Pj
+gm486p+hLgMsAAQBkXVXMRfdhR5u6/2fseWohOv+/uUDrfN+Te1SVz+lfIyyv8ps
+ZcNnRGI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAZF1VzEX3YUebuv9n7HlqITr/v7lA63z
+fk3tUlc/pXyMsr/KbGXDZ0Ri
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C9:KAS-ECC-CDH_B-163_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAi7SRkPwzsaMjkrRqixDadiqA/WUBczK
+YrbdHTFt7b0PHVML7W5VazrY
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C9
+PeerKey=KAS-ECC-CDH_B-163_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=023472fa59846f7be07cf060cdd69a9fbb27d4fe44
+
+PrivateKey=KAS-ECC-CDH_B-163_C10
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUBFi2e06ZgRV6MAV0eRdFR
+V0mj3NKhLgMsAAQEKD6w5QhdGYs3j8lfb7TDGYtNPHgBB6EWjy9HuWPks6kCTgw1
+el69+Sw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBCg+sOUIXRmLN4/JX2+0wxmLTTx4AQeh
+Fo8vR7lj5LOpAk4MNXpevfks
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C10:KAS-ECC-CDH_B-163_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEB5P0sxFy7uZvJ2nrMF0DtcP3z/+LAfPs
+7Gu9qb3opNoU2z5f+TS5g1sX
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C10
+PeerKey=KAS-ECC-CDH_B-163_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0173a056c4c9ef6707cd23928999c4680f42b71f7c
+
+PrivateKey=KAS-ECC-CDH_B-163_C11
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUBmh0W9KVy88G1HqKs5pKA
+5xN7j4yhLgMsAAQFzt6Wpw9xTNaJY/LWyiNiaak48xEGza3VS29zPICTR4fijCzP
+WLEie8A=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBc7elqcPcUzWiWPy1sojYmmpOPMRBs2t
+1UtvczyAk0eH4owsz1ixInvA
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C11:KAS-ECC-CDH_B-163_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAup6UINGAvES9t0ObSXwZPnQXv8mAb8/
+adFKzIMzUzqIwuiCSGOkeuAn
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C11
+PeerKey=KAS-ECC-CDH_B-163_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03d34f411a297d7c990fa4a83b5f54759607f9d33f
+
+PrivateKey=KAS-ECC-CDH_B-163_C12
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUC79RADa08+tjRY3+pKQxL
+dYowFbahLgMsAAQFExMbS8ty72irBD7oT8jLA7bY8YcBILfVdyu7F+yxyegMNvgI
+/VSpOq4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBRMTG0vLcu9oqwQ+6E/IywO22PGHASC3
+1XcruxfsscnoDDb4CP1UqTqu
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C12:KAS-ECC-CDH_B-163_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBt0TBTSeiqCAIAc6DeWvxdwbamLTA0l+
+t79Aie8CzQpd0Phr2HmKRMVs
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C12
+PeerKey=KAS-ECC-CDH_B-163_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=06120aed8d4c1e506710e2cfb98ca2022e642ca89f
+
+PrivateKey=KAS-ECC-CDH_B-163_C13
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUBKw1kl3z8E7SDRe9wctGj
+iQ6vuVuhLgMsAAQBuTY89Ic1Z2h42AzhSBuFiGg/dEQHaPpzJ81yUsj2lu1JR4aJ
+Fa2h+10=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAbk2PPSHNWdoeNgM4UgbhYhoP3REB2j6
+cyfNclLI9pbtSUeGiRWtoftd
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C13:KAS-ECC-CDH_B-163_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBaDjQRGOaYJ9an+CgvvwuUQA8IJABCO5
+k9Q2f79PZQTZ4JpkEjo7U9Eo
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C13
+PeerKey=KAS-ECC-CDH_B-163_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=021a58087968c5df57afd7c343a4cfa2ee8e7073f1
+
+PrivateKey=KAS-ECC-CDH_B-163_C14
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUDOslTgD0ERrPNpOvQcbTr
+AnwRv9ihLgMsAAQFxEbpiWykTMpzPp9OW2Sv3cBTchEGutGyUiaS+XCzi+aTXcfR
+wJ3NIG8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBcRG6YlspEzKcz6fTltkr93AU3IRBrrR
+slImkvlws4vmk13H0cCdzSBv
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C14:KAS-ECC-CDH_B-163_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEABqSPWGRY0MGEkweJnMJsH26Mt7LBaNR
+f1Qmo0Eacn7dwpo+wilVg2jR
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C14
+PeerKey=KAS-ECC-CDH_B-163_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03da9c0879219e48c3df56174898fab9ee5b0a6bcd
+
+PrivateKey=KAS-ECC-CDH_B-163_C15
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUBvXkUWuf0LGsl0cOJZewI
+/SdTOnqhLgMsAAQA6dj8OgJpJcit1Qj5IPouX/UoJogFt79jElmsfTaTbBMP8gbY
+ILE73oE=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAOnY/DoCaSXIrdUI+SD6Ll/1KCaIBbe/
+YxJZrH02k2wTD/IG2CCxO96B
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C15:KAS-ECC-CDH_B-163_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAvqLrw1hKK3ZuQKqGByB4kKYRR4uArk9
+H2kTkU/+FVnHwRTGMbtrKWF+
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C15
+PeerKey=KAS-ECC-CDH_B-163_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=05b33fe3874d32aed99919265cc0074902e538fe54
+
+PrivateKey=KAS-ECC-CDH_B-163_C16
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUDMMofWtd9embYdCMygCDJ
+HsefN2ShLgMsAAQFujfTaZfE8qvmA9/gQiMnOOgrCzoHPIzZUARJcqAFxvGvjkMG
+4MzvuUY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBbo302mXxPKr5gPf4EIjJzjoKws6BzyM
+2VAESXKgBcbxr45DBuDM77lG
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C16:KAS-ECC-CDH_B-163_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEA1Pi2kWrfEkwKAw+20upABLVbfYvAmkx
+4wuX/173uswN5NlJBwhSLjsr
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C16
+PeerKey=KAS-ECC-CDH_B-163_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=053dbce9826af4d290036feb46875e975b7848a9c4
+
+PrivateKey=KAS-ECC-CDH_B-163_C17
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUC0jFAB01u3dW8CZsX3hKv
+ud3y7L6hLgMsAAQG4GzHww9e1+aGw6daHUQld3BgHLIDDcQUxK+zkO1GevRxqpvS
+t18y39g=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBuBsx8MPXtfmhsOnWh1EJXdwYByyAw3E
+FMSvs5DtRnr0caqb0rdfMt/Y
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C17:KAS-ECC-CDH_B-163_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEByFnCITaqM1idjjskPNEjvsPJIm6BPhK
+mDvsayiJyCEb8jEUm1vrzHXg
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C17
+PeerKey=KAS-ECC-CDH_B-163_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00d49b971cab937f40908913fe259849679ca076d9
+
+PrivateKey=KAS-ECC-CDH_B-163_C18
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUCRJwbn/CeepoDsX9f9GER
+X18/Gn+hLgMsAAQHP53d3EZQkz3szJVG05KjXbvGanYE3nVY3eZJ9yMis54xyOKc
+5vWZSF4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBz+d3dxGUJM97MyVRtOSo127xmp2BN51
+WN3mSfcjIrOeMcjinOb1mUhe
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C18:KAS-ECC-CDH_B-163_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAdYxnsLcXAjwJhrtAjFBjW3D0M2nA45k
+lT982scdBS5VhVdGtD1EGBuR
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C18
+PeerKey=KAS-ECC-CDH_B-163_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0483ad0b7f8a716273f624b8979c19126705266e4b
+
+PrivateKey=KAS-ECC-CDH_B-163_C19
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUA0IuV2aTOck7EYszhJwH9
+jD1T/c2hLgMsAAQAJqdw2G4cibp6hq72Sbp+qG/H1bIB2xAg4Pdk31SlPCPJOM7J
+jZp3rR0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEACancNhuHIm6eoau9km6fqhvx9WyAdsQ
+IOD3ZN9UpTwjyTjOyY2ad60d
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C19:KAS-ECC-CDH_B-163_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBPFnkHv0uY6Gltgdp9LBBW76DcFMBsua
+tlFDgyuc79XZzmnsTbLt0Geq
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C19
+PeerKey=KAS-ECC-CDH_B-163_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00f69dcb547119fc9b8c454335aab184c3ada5f1c6
+
+PrivateKey=KAS-ECC-CDH_B-163_C20
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUDgI7+atUNJQ2HGS4WSZzj
+JZQo87ihLgMsAAQAE6AuJfySeHWvpVe9Zz9lhwRZ5nEEA4265cXlQIRwiiS8P9By
+52nBI3c=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEABOgLiX8knh1r6VXvWc/ZYcEWeZxBAON
+uuXF5UCEcIokvD/QcudpwSN3
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C20:KAS-ECC-CDH_B-163_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEB5ttFMdDJxQC0TI2AyFf6zxosURVBOOQ
+VoalOMJaAr6pL0IYQCG16iWT
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C20
+PeerKey=KAS-ECC-CDH_B-163_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01bc5ee5261b2bba55b10cbaa6cc3c97b98d00ffea
+
+PrivateKey=KAS-ECC-CDH_B-163_C21
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUCrSMqekHmzCSVU42HsCPN
+7HtuHyOhLgMsAAQFSeMHgNk/eW/c9pGQVXXYXGZFO9sCFiqIW+oxNEVD9dBhkTad
+7G5w6Wc=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBUnjB4DZP3lv3PaRkFV12FxmRTvbAhYq
+iFvqMTRFQ/XQYZE2nexucOln
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C21:KAS-ECC-CDH_B-163_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEB3L0LScqBX3g/5Jsn5RgXGZ10hUmBgLn
+5TJV3pv1jAV+77ebzkMbXDgI
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C21
+PeerKey=KAS-ECC-CDH_B-163_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=008574d838d3de87965fc1b4343fe4f078588c4ea1
+
+PrivateKey=KAS-ECC-CDH_B-163_C22
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUA3Jmxnz2IR4dRkOlYiyu9
+gw29OpWhLgMsAAQA9l2YTXHcwYvxcqvk05k84PfPMkwAG0nmos8Rc6raw69sCelm
+8xFBq9k=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAPZdmE1x3MGL8XKr5NOZPOD3zzJMABtJ
+5qLPEXOq2sOvbAnpZvMRQavZ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C22:KAS-ECC-CDH_B-163_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBQskKUYJcXOanW1WcLxtdZ5WVnaLBJK8
+LT9jjUl45MpYylpO8ZxezOqN
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C22
+PeerKey=KAS-ECC-CDH_B-163_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04579b477a92ed961cfdb2014407e88e7716452a4b
+
+PrivateKey=KAS-ECC-CDH_B-163_C23
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUDVquFsE0IUbj2a0p5ZSbT
+8+OIKEShLgMsAAQHdqLhr5MtdFGQcL+pQeqpPp/16XoFq+ntRiRf0BRiUNKlY8Ru
+v3rNI0I=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEB3ai4a+TLXRRkHC/qUHqqT6f9el6Bavp
+7UYkX9AUYlDSpWPEbr96zSNC
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C23:KAS-ECC-CDH_B-163_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEAX1SEW8MlVh/G3sGx26Y2ZyC3PIMAk6i
+K92ZC9eeY+c1shKCrhtepmZI
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C23
+PeerKey=KAS-ECC-CDH_B-163_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=035a8c10e64403c52ef8d17c5f4dead0df81fb1f21
+
+PrivateKey=KAS-ECC-CDH_B-163_C24
+-----BEGIN PRIVATE KEY-----
+MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUAentUdVDHWKnefwbi845V
+9enkTOahLgMsAAQEWVLAtRfmhcqwlHAyf51LISdRsEkESkKabvsEvOoCQKtYBd50
+CqYfmU4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-163_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEBFlSwLUX5oXKsJRwMn+dSyEnUbBJBEpC
+mm77BLzqAkCrWAXedAqmH5lO
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-163_C24:KAS-ECC-CDH_B-163_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-163_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEA6fqELodaqVFcAtAtzeVGp5zbfoMBPk1
+L7KsJETpKHVONlX9YuOkJWTo
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-163_C24
+PeerKey=KAS-ECC-CDH_B-163_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=000142615e3607ac148c4de8f334be849235d01cdb
+
+PrivateKey=KAS-ECC-CDH_B-233_C0
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4APD7kdKwNC8HfVn48NfX3
+ZsUzKy1nMP8OTY51rtuhQAM+AAQAYeiptRf9BaAm7DdmFiKf2GOaH6dt7+U5gCL5
+2cgAcGtcsIc4qUVS/uWEsTcv6tSveQQJCfz29QCEu/o=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAGHoqbUX/QWgJuw3ZhYin9hjmh+nbe/l
+OYAi+dnIAHBrXLCHOKlFUv7lhLE3L+rUr3kECQn89vUAhLv6
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C0:KAS-ECC-CDH_B-233_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAEdWut3vw9wzerJ7VFLrEK/9njH1tVwz
+DpDw9oaiASp59lIyMIohyYwBVVzK/H3OFcj+0wJadgy9bCMn
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C0
+PeerKey=KAS-ECC-CDH_B-233_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00e9f3d8c4f1bec0f920e763ea1bb7415899f01734609e7547dc425ec946
+
+PrivateKey=KAS-ECC-CDH_B-233_C1
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AqkGloBpOZqZ5l7C+FvVr
+FgsFYa0H868pZDhkYdChQAM+AAQALZFAJEZVcGjED8B13uk5FrDxqTkuR+VrdHEl
+rh8BOrCRXkrPd5UWgm+h3BiFoGq8XQgJySJAzPnD2KQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAC2RQCRGVXBoxA/Add7pORaw8ak5Lkfl
+a3RxJa4fATqwkV5Kz3eVFoJvodwYhaBqvF0ICckiQMz5w9ik
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C1:KAS-ECC-CDH_B-233_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEARhqAo+aGNuSf2MlPCA+smqjq6DUCxo6
+vGTkeiKtAMvYuV+J5CESi8c6Q8XMJU44ZwlquJ14iy7TuQqW
+-----END PUBLIC KEY-----
+
+
+Derive=KAS-ECC-CDH_B-233_C1
+PeerKey=KAS-ECC-CDH_B-233_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00f1fbecfadb158d62eb1109c085124fad67a8795b58815eb396c95db4b9
+
+PrivateKey=KAS-ECC-CDH_B-233_C2
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4Axmd8KAaLRi40hizmydit
+jBs8fv6Ay6tB2kGSeOShQAM+AAQAQssxHc/ySCos7OaWwetkxprCqlmSCaXBh2Oj
+FQoBsDKfNsE10ALwi+Pj/6naGMXWpww2D0+HHxK/P5U=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAELLMR3P8kgqLOzmlsHrZMaawqpZkgml
+wYdjoxUKAbAynzbBNdAC8Ivj4/+p2hjF1qcMNg9Phx8Svz+V
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C2:KAS-ECC-CDH_B-233_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAJO/hWIWAiOOmNCcmIKNUaSUYDYsI8UU
+HT0bI1KWAISXFSGHqLOylYodCi7s/0SSJRgHy/0D1fJoW8o3
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C2
+PeerKey=KAS-ECC-CDH_B-233_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=019ea831c51d88a7cf754495a1c474082ed481c8eb83190a77defb09d479
+
+PrivateKey=KAS-ECC-CDH_B-233_C3
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AnGECSz3/IZs38b5nAYBK
+3yR0FESN0PDcUSk6yROhQAM+AAQAEkEg2ECYUOceM8ni2cQOoyvtEdd4BHhumwdo
+kqsAba4bpIFylv9jBzusnOBl1DMboaXImcwcB0Bdrj4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEABJBINhAmFDnHjPJ4tnEDqMr7RHXeAR4
+bpsHaJKrAG2uG6SBcpb/Ywc7rJzgZdQzG6GlyJnMHAdAXa4+
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C3:KAS-ECC-CDH_B-233_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAEVJZIaSr5XYjk4dSRTYyXaaraxaD3V4
+MmXz65ZXAbCUtIAvOXZj0OaC+r8clMTiFOSDJ7le78uSt3H9
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C3
+PeerKey=KAS-ECC-CDH_B-233_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00088425fb04c2ce408f08d81385a322703a077bf00ba0791e4e79b80419
+
+PrivateKey=KAS-ECC-CDH_B-233_C4
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AbmnQZNvZp5T2jmmaDpQb
+3aalOhzso7PbgpJbb4uhQAM+AAQAxX1h/LH+6Q1djJfL8YjI74JZsK4lh+zx/4zS
+4voAuK2GxoBaSrRFE9u6L1CYuenB4Ftnn1KTeuzisYI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAMV9Yfyx/ukNXYyXy/GIyO+CWbCuJYfs
+8f+M0uL6ALithsaAWkq0RRPbui9QmLnpweBbZ59Sk3rs4rGC
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C4:KAS-ECC-CDH_B-233_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAHPFz0oB0J47QbXnd4xrm6Utr4j8QE+O
+L9CdtAJ+AHA5Htqnbw45cDlMrAM4BhBYhYw8c9XLUS5TJjBP
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C4
+PeerKey=KAS-ECC-CDH_B-233_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=019b5efb23bc18a4f18c22fe2fd5cdbd02372cabde5e5c9f4b4f9a49438f
+
+PrivateKey=KAS-ECC-CDH_B-233_C5
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AWuXeMMfDFxgTot0+PqLF
+zqoEc8OUV+mSkHHhpCChQAM+AAQBfPn8oF1KVeS2j+56O9Q/BHMD8qJm2Bu14ex+
+JVgAOwr0PeBQAzl94dSyeCetL81nXL9hpEWh7EClabY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAXz5/KBdSlXkto/uejvUPwRzA/KiZtgb
+teHsfiVYADsK9D3gUAM5feHUsngnrS/NZ1y/YaRFoexApWm2
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C5:KAS-ECC-CDH_B-233_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEASOmsIGnYehsBC4ZFK9H8JOyZVVD5WRY
+S2BkJTmpAFGO48GuVGQE3x7M1pqmhWQx0ciIHPBXjP9OuMEb
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C5
+PeerKey=KAS-ECC-CDH_B-233_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01f36d9519c3d47f030eeac3338db583b96fefa551a4b56cc5567f2d9d7a
+
+PrivateKey=KAS-ECC-CDH_B-233_C6
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AxoeWlVtotfiCfjisB4Kx
+rCxFUsrvDGCVhGfNhcGhQAM+AAQANHifvGDxCGA0yPLOhv1KozUZTJFGiQNX3EdW
+meQB0395Yyf3HsMVEEaEY9CykFSIpKYCZ4cN/uVnwlA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEADR4n7xg8QhgNMjyzob9SqM1GUyRRokD
+V9xHVpnkAdN/eWMn9x7DFRBGhGPQspBUiKSmAmeHDf7lZ8JQ
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C6:KAS-ECC-CDH_B-233_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAUH7vys2HCyM5e2r+iKqR1VYHlsaZmAD
+YqDue8V0Aa6jysID+MeAR1omCbKXDMhvlupAEcNI2oJiszSq
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C6
+PeerKey=KAS-ECC-CDH_B-233_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00e54b1c916ff3ba1aa0b2b99f0ebde4f1a4cc6a10d959bb2f7f4c777b84
+
+PrivateKey=KAS-ECC-CDH_B-233_C7
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AdCRcyX3UUJNWieo/ynsL
+MMHWfObovhfLEZJXXK+hQAM+AAQB4cVwrMZTxwb9d0AZSlVN5/N5mhK4INapQRl/
+dh0B4iJejQ1ByAj26tevMg+yX+0pqZCYoPDhHNhp5Tw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAeHFcKzGU8cG/XdAGUpVTefzeZoSuCDW
+qUEZf3YdAeIiXo0NQcgI9urXrzIPsl/tKamQmKDw4RzYaeU8
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C7:KAS-ECC-CDH_B-233_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAJag0/Nuj3U3kQdM6ml7JHFifgyeeilK
+ApqdO5QpALdnF0opILYvHwL6eQl4RdUdk+DIEEQQgxot1Vw8
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C7
+PeerKey=KAS-ECC-CDH_B-233_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00bc0dcf7585753cc79aa412d2740b4b2d1c644fc9755cb0550286bcf68e
+
+PrivateKey=KAS-ECC-CDH_B-233_C8
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4Al77tS3OKYgXMnqBGtEi1
+IxKLkxAaAtlkQ16xeAahQAM+AAQBg1jalAeacAoQsgojJdM9gOletPxKmBAcMSY1
+k5wADE9ELQBxx70dIXzyNf0DHewwnoXqIBTmi1D8K6A=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAYNY2pQHmnAKELIKIyXTPYDpXrT8SpgQ
+HDEmNZOcAAxPRC0Acce9HSF88jX9Ax3sMJ6F6iAU5otQ/Cug
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C8:KAS-ECC-CDH_B-233_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAWa+JCazv45tBaJNfR8sDjKeQSDPyOb/
+UkhvCVWGAHNx4ogUX8JaWpy18qOGA08vMoxuqiTIsJboqx8M
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C8
+PeerKey=KAS-ECC-CDH_B-233_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01b7ef3148be331115321b1c2a68832fdfb991b26224a60dddce3e060d27
+
+PrivateKey=KAS-ECC-CDH_B-233_C9
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AdZxV2lXh/bW6f4uJOrqu
+WSW5sIGEo9VUlXrPPsChQAM+AAQAKvJfgQ4YqBtp2iVKZbimx6uA3cJ8hWIuI0it
+0TIBKLdT5LIajDrPhaq5Kpqmp7M/LLadcCS6+OiwcUI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEACryX4EOGKgbadolSmW4psergN3CfIVi
+LiNIrdEyASi3U+SyGow6z4WquSqapqezPyy2nXAkuvjosHFC
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C9:KAS-ECC-CDH_B-233_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAYHzuwsJdxMnfF87Rs7wKqnL4pq5XHbp
+tgofelHlAC4vtnLXK/ePfP7cQNNybGtPtYVBfHR2tlXjK707
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C9
+PeerKey=KAS-ECC-CDH_B-233_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0041249865c913b287a253150b207e2682efd96057cb0709e9bbb48c0fc9
+
+PrivateKey=KAS-ECC-CDH_B-233_C10
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4A7mOdifDkM8B14u9XzCQ1
+gelbJh+Kk7jvb16/gBWhQAM+AAQABmOPa82FBDOV0B12f/d+nWd/N+9ADy4W/uht
+uvIAbBJJYmbeux2DQ7loTifF9xKcFwJKjmcEZypfPWM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAAZjj2vNhQQzldAddn/3fp1nfzfvQA8u
+Fv7obbryAGwSSWJm3rsdg0O5aE4nxfcSnBcCSo5nBGcqXz1j
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C10:KAS-ECC-CDH_B-233_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAGWqQRXlnmBFqvme4b7KH6uSO73JGSBu
+CTFiC6mWASjQC3dYmaWKWbyyq3nWCeLc2pjmUju2cWhVT4Tm
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C10
+PeerKey=KAS-ECC-CDH_B-233_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01cf480fbc2be2c2c4448c88890972c7ff9cbe08a75e26c3809596b8b5c0
+
+PrivateKey=KAS-ECC-CDH_B-233_C11
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AkpsJtnspqk/xXWd5oXMw
+ZQSfrrLCJwEsSfJ37VGhQAM+AAQAygQD2V2F8MsK5NKurhjhh7ecIB7WjBStJO0A
+OSIAz2sKUCspDQru6CBmGsz26ll2h8Rcf5Onc9JfYqY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAMoEA9ldhfDLCuTSrq4Y4Ye3nCAe1owU
+rSTtADkiAM9rClArKQ0K7uggZhrM9upZdofEXH+Tp3PSX2Km
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C11:KAS-ECC-CDH_B-233_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEATV25wDzY2f7dBhC8jGInzaCKqspM8JF
+7tV7naytAXkQ6QcaPkLn8hs2Pw5ofSiYEKTsKcNuzhSFTh3R
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C11
+PeerKey=KAS-ECC-CDH_B-233_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01ce8abf3c8ccfa30e5f35ddb75f5e106aab1e67086156a1ededa1717b77
+
+PrivateKey=KAS-ECC-CDH_B-233_C12
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4A4nrwTv4thv/tbs33GPwL
+jgSe0iLnYAw84xzk6XqhQAM+AAQBRewNtf5iuSVHeSASJoryG6koqP2Y0KHe49j7
+JVkBCgMc6laxg+kwkwCKtwXMkJnltlxctEBzJLlv7pA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAUXsDbX+YrklR3kgEiaK8hupKKj9mNCh
+3uPY+yVZAQoDHOpWsYPpMJMAircFzJCZ5bZcXLRAcyS5b+6Q
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C12:KAS-ECC-CDH_B-233_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAOn7pxpkq7F3+kNsuXOcn2jAFVrciXE5
+wb89+ZpTAZrxExvkfeCIcINdoUlG/tcwNBefgJKY0BSbFt02
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C12
+PeerKey=KAS-ECC-CDH_B-233_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0025df759a20312361b9f6767efe8e8d69979e34639469a91fed9fce04f8
+
+PrivateKey=KAS-ECC-CDH_B-233_C13
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AGnJte5koaR6wFJyo8O3u
+R70Mc0ETq2ADJB7hk96hQAM+AAQAdCa/qIeP5ZsWqbjGORCh4vvGsHuplboEwxQC
+ES4AlE6WFmdssvx/oPnhuHo1h0gkPoD7YiZChGRaak0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAHQmv6iHj+WbFqm4xjkQoeL7xrB7qZW6
+BMMUAhEuAJROlhZnbLL8f6D54bh6NYdIJD6A+2ImQoRkWmpN
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C13:KAS-ECC-CDH_B-233_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAR+ZSkFswZkLjGF2ej1o++pzr3tItlXk
+dHD8zHkfAV3piINdaBLwvdcAeolZceGgb00izhMDyfVe/mR8
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C13
+PeerKey=KAS-ECC-CDH_B-233_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00437ab4a53756ff678a1f580c0fd1f33b23021d62060808453b4aabe627
+
+PrivateKey=KAS-ECC-CDH_B-233_C14
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4A9FnHZyFpwSWeThmTM5ZM
+H/+851rTDd4SZPXLhtGhQAM+AAQBtEqBiV0hBfoWpuCVJsCa5/bL284hCHD04z24
+tvQAseByxiomQpdfBsaHxkZ9opXvk/BNHFSUpiRoPIA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAbRKgYldIQX6FqbglSbAmuf2y9vOIQhw
+9OM9uLb0ALHgcsYqJkKXXwbGh8ZGfaKV75PwTRxUlKYkaDyA
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C14:KAS-ECC-CDH_B-233_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAQUTYgruDQR4hyQ46Zsj6kkAFT+TZusX
+1hvfNaoZARNt+8hAG72g1nXKBqDP9r3UZ8CsmpeCkzAHKOfc
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C14
+PeerKey=KAS-ECC-CDH_B-233_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01ebd55823c57d1fc7b36cf1ed2051ead64db6d114014d3407186f50d957
+
+PrivateKey=KAS-ECC-CDH_B-233_C15
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AZWpHuHcrCLHZB8gj+2xF
+xl+fGPi0Pzph5sdGEeGhQAM+AAQBU8262S640g2gwceq1G0IM2y8l26Nb4OUfk9N
+ZhYByXe5el4SBcpmVF3zpSa24yXgh8DgcIOf5+we54g=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAVPNutkuuNINoMHHqtRtCDNsvJdujW+D
+lH5PTWYWAcl3uXpeEgXKZlRd86UmtuMl4IfA4HCDn+fsHueI
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C15:KAS-ECC-CDH_B-233_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEADXf/skRftcWdieiSj693Umj9F2RrRhA
+HT1Emy/vAZMXVM5c9Vehwazt/l6aewuR+BZD2oWGpoZYhfBC
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C15
+PeerKey=KAS-ECC-CDH_B-233_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=006d07f6e08b11a060ccec43b07ca7d9eaf6c3ece06f4785519284bf6f0a
+
+PrivateKey=KAS-ECC-CDH_B-233_C16
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4A8U9exO+vhuQ/7OZfF/+R
+sajWG+NBbu64hPTi0U6hQAM+AAQB2fjAHpwg9hUOx2IKdeOelvkke+zhN7A2W+xU
+JUwAYAg3O54IeAUpTa2uAIlGZ/259rik0WKV5bnSGm0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAdn4wB6cIPYVDsdiCnXjnpb5JHvs4Tew
+NlvsVCVMAGAINzueCHgFKU2trgCJRmf9ufa4pNFileW50hpt
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C16:KAS-ECC-CDH_B-233_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAEhFzmYbHq40wWmfG/443IfvKLiwp3cf
+82bcIdhjAQlrGVSwbqpwc+2TmAGqKXTaHWDWbpfDHfD2h2+v
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C16
+PeerKey=KAS-ECC-CDH_B-233_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00aea594f092b4052f7564b2e5651bcf43ef7e336a064d6bfb1a89cf5e51
+
+PrivateKey=KAS-ECC-CDH_B-233_C17
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AH6XL2IoUb2zPX3nfvHCG
+j9m7TIEVl2yWJw/3vF6hQAM+AAQBTSdvQoHLUKJrKeyB/O2W0OkJmUsihUM4VSVt
+WNsArEeSr2Kg3E/U7sOE+/P7uCyDR0hrwesTOLx/OrA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAU0nb0KBy1CiaynsgfztltDpCZlLIoVD
+OFUlbVjbAKxHkq9ioNxP1O7DhPvz+7gsg0dIa8HrEzi8fzqw
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C17:KAS-ECC-CDH_B-233_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAUc0GSFlyW+9t5TKseLR7xEeGiCnIF2w
+GqgDoDKiAezfw5QLfQYYzWMVRBdR9mPfdNNWSS75NLS6KyrR
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C17
+PeerKey=KAS-ECC-CDH_B-233_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0099d6d076e14ccfee15ed7e7ef384bfee12deba8c9ae8f6cca3486a1494
+
+PrivateKey=KAS-ECC-CDH_B-233_C18
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4A9YaE6hSmj++4zCayZ6E0
+GcYtcmG60U5TaKmBmhihQAM+AAQAmmWoU5QHD+DloQgWTrKJzD137QhI/VfzhOYs
+qiAA5/VvLCe+T66yDidMJgTG3C2IWXAwrSFk+tA8uQQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAJplqFOUBw/g5aEIFk6yicw9d+0ISP1X
+84TmLKogAOf1bywnvk+usg4nTCYExtwtiFlwMK0hZPrQPLkE
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C18:KAS-ECC-CDH_B-233_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAH4fMlHioKpt4fjfhrhe2dEdpetxNq3U
+XqfSXIZ8ANligeB1benapV0u9lc7sv4t0Jtx2RGRpaBDuuDz
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C18
+PeerKey=KAS-ECC-CDH_B-233_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01b1e977c43afd203132c085b95db0e2046a4b6ac2c046ee9ad665050578
+
+PrivateKey=KAS-ECC-CDH_B-233_C19
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4A7vskeJsytDbOOWIsEUw5
+ps0eWOyUQ8iHDl7i+AGhQAM+AAQBP7HKntcJuzhvugLMeGL9bGThCHvl9h6nM5Rs
+FjQBy0CX5EpzBwDev+gUP7+byjo9bEaYWifNUEOyylo=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAT+xyp7XCbs4b7oCzHhi/Wxk4Qh75fYe
+pzOUbBY0ActAl+RKcwcA3r/oFD+/m8o6PWxGmFonzVBDsspa
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C19:KAS-ECC-CDH_B-233_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAL4e51DycSsqyyDEXpc1fFDbO+iVsz+D
+DHG8n089AV/sgQzbF5/NHOjk3BokmeQN6KSkmpQg8A5WEQz0
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C19
+PeerKey=KAS-ECC-CDH_B-233_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=000e4cb704355cba1b40cee3da102cb048519a91b4c789b3757cfdd933aa
+
+PrivateKey=KAS-ECC-CDH_B-233_C20
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AF1JNUGYWvSBcs5eLx146
+NHYjPkm23CBvlxFpdVehQAM+AAQBUKFzJ4Ree8edjs4Skw3Ct3ZUyqEIK1ewz44F
+sawAFRx2gi2N9e/9jGlDOVtqjVOEMdQuhG6f+N5+ruY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAVChcyeEXnvHnY7OEpMNwrd2VMqhCCtX
+sM+OBbGsABUcdoItjfXv/YxpQzlbao1ThDHULoRun/jefq7m
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C20:KAS-ECC-CDH_B-233_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAVwuLOC8cizqTLx8M1LL4NKLWwAuRNk3
+BYldeRr8AU9haYOtCOdFMVxHZ7CuIab9imKcJYznrvpMF6jg
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C20
+PeerKey=KAS-ECC-CDH_B-233_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00d8c13bc5e819c6101daef3f6fb5be6bccecf233c4b7fc65054e8e8d3bc
+
+PrivateKey=KAS-ECC-CDH_B-233_C21
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AprBdMKcD8ReagPioZLNM
+oVxFPoKAihCV5DXpusuhQAM+AAQAk7MlIlH9nW2cgdeM8fE0zdVU1jwqHi8a+hTi
+1OQAiusKirP/Xk+wI/fhkX8BCIkK8Rq8p9oCf62sw7Q=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAJOzJSJR/Z1tnIHXjPHxNM3VVNY8Kh4v
+GvoU4tTkAIrrCoqz/15PsCP34ZF/AQiJCvEavKfaAn+trMO0
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C21:KAS-ECC-CDH_B-233_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEALr6m7qScl7vDEoK/L1CY+VfUVVkW1xY
+qWvD6ellANGz0ONdYX4J4HjFcaX0HqIt/REtZ6lNjfu6Zump
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C21
+PeerKey=KAS-ECC-CDH_B-233_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0129af50fa085133771753f297a313bba0d2f5882e7634b7ef5adce760ff
+
+PrivateKey=KAS-ECC-CDH_B-233_C22
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AFo0JgJ659qzzETTrXrGv
+lm4hK5tr5oz9IkAUJemhQAM+AAQBcQoF8CtVBXKVFrGsc9RfPPCPHFE00vc9ElcC
+Q8kBhhGxDatQdYPyvhD9Qpb1N9SvCVdvlpefHq3+KRw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAXEKBfArVQVylRaxrHPUXzzwjxxRNNL3
+PRJXAkPJAYYRsQ2rUHWD8r4Q/UKW9TfUrwlXb5aXnx6t/ikc
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C22:KAS-ECC-CDH_B-233_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAHmL9at2G7as/tDO8c1xs+9G8lBDI8r8
+QIFZLdb2AWJ3rrPhysASGwfZN4o6DLxlZ7SEI5KeNtyFXp0a
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C22
+PeerKey=KAS-ECC-CDH_B-233_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0077c4ea1095fadc4cb4190a3fd530c7d15325e5d79b8e8a2b708e2344cf
+
+PrivateKey=KAS-ECC-CDH_B-233_C23
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AOCT3HsMlW70DZC14LMZ5
+Th5Uqo+l8qMx7hP3hFChQAM+AAQBpONajDJxfyqqPu7xd4SOWA4P7WyAloaPasxO
+HAkBNydgToHTqdk9JD/nni24pEIzSo6hhSufg8rhvD4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAaTjWowycX8qqj7u8XeEjlgOD+1sgJaG
+j2rMThwJATcnYE6B06nZPSQ/554tuKRCM0qOoYUrn4PK4bw+
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C23:KAS-ECC-CDH_B-233_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAV9yPamjjC2lBiwX0Lg3Ui98aceT95wX
++2ll1EoDATKxd2CsLiu5+BPtd5DFzTqg04q2Ti4nLd9KTCwa
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C23
+PeerKey=KAS-ECC-CDH_B-233_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00d9eb3c79cf442595dad03ed4a38daf358b97d5dfc01cb61ff200a47958
+
+PrivateKey=KAS-ECC-CDH_B-233_C24
+-----BEGIN PRIVATE KEY-----
+MH4CAQAwEAYHKoZIzj0CAQYFK4EEABsEZzBlAgEBBB4AkK3Asgfa44FiLPkuBLzn
+R5GA7G4XcWYvXDF5vZmhQAM+AAQBBq2/m7/bMINZin9tsukdLnwXT3BfwhZjG30F
+7fIBkNhMpvRpX9vKQNJqdJmKBcPXYdvwiYG2RcDqI54=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-233_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAQatv5u/2zCDWYp/bbLpHS58F09wX8IW
+Yxt9Be3yAZDYTKb0aV/bykDSanSZigXD12Hb8ImBtkXA6iOe
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-233_C24:KAS-ECC-CDH_B-233_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-233_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAFG3C7i44jQbhoIdVLl0tpa9pEOst+pl
+ll0n0qxwAMd4Tu+InEccnSaz4N4krStL+Lu6b+GPUaQSGIBY
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-233_C24
+PeerKey=KAS-ECC-CDH_B-233_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0124c19cffc0b9549bfa378a548e8ce11ee7fca28d2d898de49ae1f2ff61
+
+PrivateKey=KAS-ECC-CDH_B-283_C0
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAvQ0VYQiRqLMjsBo6dbG
+5BYPa6Tjtdgx2Twdqo/T1almDHuxoUwDSgAEBWHklVYwGBaYBNTI4kNbSv2F2jdt
+kUtp05JG+OBhE6oy5kLSB4Gn9Z3n9C9fnWw0gfM/xd6zV8bs9MdY43DSQ13j2O5z
+dwP0
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBWHklVYwGBaYBNTI4kNbSv2F2jdtkUtp
+05JG+OBhE6oy5kLSB4Gn9Z3n9C9fnWw0gfM/xd6zV8bs9MdY43DSQ13j2O5zdwP0
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C0:KAS-ECC-CDH_B-283_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAlBOGheBnTnwEKSmmgVoKZQCtY+USjhM
+fRpiyck+pNH/MA4TAmUTL3tMZLdLkXntDy4hH0Mo1iVAUCL1VBcNqTK4D998GqsS
+-----END PUBLIC KEY-----
+
+
+Derive=KAS-ECC-CDH_B-283_C0
+PeerKey=KAS-ECC-CDH_B-283_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=065194e26090e74047ee75f13f9769d20e1b52189650011e283daa090732cc53755dc366
+
+PrivateKey=KAS-ECC-CDH_B-283_C1
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkArlB5pLgqYTF/6iDyfn4
+JWpDqx/RrZeCpC5CmpTpEOSCuRwjoUwDSgAEB7kK8Ra3N9kAjkwY9q1TnSnuF5AA
+ih2vLoVvpnLspKr8lspjBqr3jQ8gZXt3uXzKMOq3m2eaOqqQsQkH+XnN6YjOcYSR
+AQwq
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEB7kK8Ra3N9kAjkwY9q1TnSnuF5AAih2v
+LoVvpnLspKr8lspjBqr3jQ8gZXt3uXzKMOq3m2eaOqqQsQkH+XnN6YjOcYSRAQwq
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C1:KAS-ECC-CDH_B-283_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAWI6lnXoxANm4mEx5Hsa8GyLM6z16S9U
+ZEgW3LhEOCyUTMIfAp0oD01MDF/XD34kCVlQEovqPK48pG9qX3C3Of4amQJogE44
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C1
+PeerKey=KAS-ECC-CDH_B-283_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=075c535cc70de19c92d7314afa2f33200903431f6990ad40ac31dadaf4e492a799b75b05
+
+PrivateKey=KAS-ECC-CDH_B-283_C2
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAofeFyulDzJ7/H1ajAFW
+0lofC59x04mFLy47WHQGy3TvO9BBoUwDSgAEAKA0kHZfyQwjVTwOK3nfojK1GnPy
+FVTl6xjaTJlNkl+O0rvvAwT/1BxbCrKnC4IYjo8VeNarfTzjzjT6RdzDIgfxY+kc
+XWgU
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAKA0kHZfyQwjVTwOK3nfojK1GnPyFVTl
+6xjaTJlNkl+O0rvvAwT/1BxbCrKnC4IYjo8VeNarfTzjzjT6RdzDIgfxY+kcXWgU
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C2:KAS-ECC-CDH_B-283_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEB7g2lyhDL3Uo0+7IpniOac0uuIFixHUS
+dC7g8CfMtBV6KKIjBZhut/EJqh+FVuuivciOSRO2Xv+5ROrmOWNsun4B3DcYvLNh
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C2
+PeerKey=KAS-ECC-CDH_B-283_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=02956f63d48a49a330e2068955cc2886dbfd5bf72a81b10ed83f2d758dd315eca172927d
+
+PrivateKey=KAS-ECC-CDH_B-283_C3
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAVO7uKPOShuZlg9WGGq1
+Agf1iPMMlL7vKECEI7pE/IdfrzjYoUwDSgAEBPLCRUiZYjrxO2WCCroUVzhAf3cY
+arr6UtJLNb/fWAj/6uB2ARH0SEYK0kMKrseI3ikVSEdaHlg22sUg2OSTyfYBJ15w
+6inS
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBPLCRUiZYjrxO2WCCroUVzhAf3cYarr6
+UtJLNb/fWAj/6uB2ARH0SEYK0kMKrseI3ikVSEdaHlg22sUg2OSTyfYBJ15w6inS
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C3:KAS-ECC-CDH_B-283_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBzsJKipNfJoXu4jnW0Cp5OQ7mYE89haC
+1JuSkFwt1gZ5Cu05BWatRSotjvCjJ86OKFYUb+yvCeRDHMwEJWoHf2BwHORHa22s
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C3
+PeerKey=KAS-ECC-CDH_B-283_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=068a3f6938c44b797524377508585842c6a7f1af5ffe9131dd3ff786ae56e1739345d3d7
+
+PrivateKey=KAS-ECC-CDH_B-283_C4
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAyrA3LmqOXJAH59YhF7X
+Zdo2t9b3c1V3m/skOYJ/81VqdXgcoUwDSgAEBxWchrnGrbIWDCjYYRj4RWSpDBSe
+3igylGNnekyHcp+JfC+YAIp4Fn4WkGJZkrDvwuDvb21h6Bg3yOzf2rUdFTQON+fY
+0FEg
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBxWchrnGrbIWDCjYYRj4RWSpDBSe3igy
+lGNnekyHcp+JfC+YAIp4Fn4WkGJZkrDvwuDvb21h6Bg3yOzf2rUdFTQON+fY0FEg
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C4:KAS-ECC-CDH_B-283_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBFXoe8Iwzn/FhjEt0gfFKeR+PHTMDOXQ
+c/v0sclX+Mu9kRO8Ah/79i+yUx2znvLQvc4NnBQckunNymJ8qjm1k/xKAhDo7kgf
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C4
+PeerKey=KAS-ECC-CDH_B-283_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=019b48d5eeaeb05b58801ae8f345ad9bacb91daac885e506949b849ebc67bcbfa308aab7
+
+PrivateKey=KAS-ECC-CDH_B-283_C5
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAmib8hR10y/nGnNV79mn
+eHyqlUXr64U+UYTOQhUkKQUfQMvEoUwDSgAEANflvPrFePzXKBgGRRdtfgiLaNMw
+ognxi5aGYv7RY0KzkhogBvdQs7XpjgCZtpWWWqHRZHXRB0+SMRJ+1wPiaW1LVq/e
+u86q
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEANflvPrFePzXKBgGRRdtfgiLaNMwognx
+i5aGYv7RY0KzkhogBvdQs7XpjgCZtpWWWqHRZHXRB0+SMRJ+1wPiaW1LVq/eu86q
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C5:KAS-ECC-CDH_B-283_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBlLMyJIfQ5r0KiMBI2tYQ6QvH9mez+G0
+E0w94BTNx2A1NHzAAzQdgHSfGl7J96xiUjhP79OLbyu83Bj+vobBYPXnjAA/Bm4G
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C5
+PeerKey=KAS-ECC-CDH_B-283_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=061b3bef1766460f6296ed47d39ebf5a710d202d2b7e7cac0f0d3b235405eece99aa30d7
+
+PrivateKey=KAS-ECC-CDH_B-283_C6
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAQUgQpiN3fRw0KLjb/9b
+k+xp9NJAqON8BkzE1ZlGe6J688nxoUwDSgAEAMfJ/3fgGLiAG934hnAlVrEmptmh
+gxofYPNYcuUkwTTVU+SkADXXZ7WLSZ2ftUViw4MEEa9Z5wiKSjMz1dx/5bD38eHF
+46wr
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAMfJ/3fgGLiAG934hnAlVrEmptmhgxof
+YPNYcuUkwTTVU+SkADXXZ7WLSZ2ftUViw4MEEa9Z5wiKSjMz1dx/5bD38eHF46wr
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C6:KAS-ECC-CDH_B-283_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBiMxuTOvtDhPo6TSJFUa6BILxV/H6nPy
+vnSeIXr8ThunnnYPAr9RxE+DYcMFTK1kD5JEb+OCCwY89LsiyhfAonT9RvUFBPvs
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C6
+PeerKey=KAS-ECC-CDH_B-283_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=055d579458860a3dd92ac6570847632f04460755c22a4c432cf4dde9611d2ce1608ca185
+
+PrivateKey=KAS-ECC-CDH_B-283_C7
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkA7ua1fpVLTjRp3y1U8Yx
+4tCUDbawTwvXAR6nNb5Q0EXampwdoUwDSgAEBocHGAXCWn0LFzn3z2gbLylcT52J
+NzUdIdHUP2NOmlcQW/EnBjO6IYcuN5xQ5Eg3KxwOZehdB+3XEtfcBvppopn2A33s
+5mDc
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBocHGAXCWn0LFzn3z2gbLylcT52JNzUd
+IdHUP2NOmlcQW/EnBjO6IYcuN5xQ5Eg3KxwOZehdB+3XEtfcBvppopn2A33s5mDc
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C7:KAS-ECC-CDH_B-283_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAh6C1q9tMhGYF2/4mGwrx4agCBMmzIXw
+JrcbMqwGwLrmtMuiAelzP6nSmWEmlCDbJO3A1a4oXXjJrhSzixAZ8TZS8ZAnfcR/
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C7
+PeerKey=KAS-ECC-CDH_B-283_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=054fa7c6c84fb89e5892d9194540860ea31ae2b6e37a86971344230ea512a3f6c0569216
+
+PrivateKey=KAS-ECC-CDH_B-283_C8
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkATOqRF3IDX1aCX0doR1R
+DmVxp4O0+yNUAnF9aLqP0UVOazGfoUwDSgAEAtJuRqbtn88dL4nGPYDgFy3ttPWu
+3f8JKDaqyFmQlIhVV+rZB9ZxOXRwHBYK7eyPlOZEa/fTx5DL/4cCzHhAp4GOW2Ji
+cfcj
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAtJuRqbtn88dL4nGPYDgFy3ttPWu3f8J
+KDaqyFmQlIhVV+rZB9ZxOXRwHBYK7eyPlOZEa/fTx5DL/4cCzHhAp4GOW2Jicfcj
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C8:KAS-ECC-CDH_B-283_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBF1i0B217xc9DP8xWpKpoQXRrXhP+bCO
+ch81gOBiZf9TihlLBrdkwf92mFSWuURRt1bE8w/fxjjYmQMSu+zL+9c+jFqFWtt1
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C8
+PeerKey=KAS-ECC-CDH_B-283_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0353ff03afda3772984aadc4000e1275656607154b06c3a59c664945fa6fde1c255ffa86
+
+PrivateKey=KAS-ECC-CDH_B-283_C9
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAEZh8QeptXAEXduwc4q2
+mxwXqazBHaXax/2GSz38NqJSgtaqoUwDSgAEBhurvv7lIRxJF1Bs5fn549HlKyUG
+84ygluG2U8qftp9GEFcCABS/0u8ii1oD4mIwweiXrQgacEATzuVRZspG3jlfxS9d
+ISA6
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBhurvv7lIRxJF1Bs5fn549HlKyUG84yg
+luG2U8qftp9GEFcCABS/0u8ii1oD4mIwweiXrQgacEATzuVRZspG3jlfxS9dISA6
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C9:KAS-ECC-CDH_B-283_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBKVhtRhK3tnHvZho8wQ7Xi3lGQj5wD1e
+awijCIvMUO4yA+JjBYFbV5/13sb6yXe6cIizM79MAjHaAhh07gDXH+JdP01QpXrD
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C9
+PeerKey=KAS-ECC-CDH_B-283_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=050795ba093d2e02398c358951f20c9e3b4f60628a96a4d0c46cb8fc0005e5331b38a09a
+
+PrivateKey=KAS-ECC-CDH_B-283_C10
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkADa9IfhKudtvS93JRjXx
+n4CssoE9pTmeB3eDLC/r3HGGKr4zoUwDSgAEBo7jJFdU1R33eABGrzmstAfEmYxi
+C/+U+zdPr0tJgAbuoM+IA2akSfCez7rsxJ2IAwf1ckbBHFvqAK9CcYZ3qN7xXlkm
+2hgi
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBo7jJFdU1R33eABGrzmstAfEmYxiC/+U
++zdPr0tJgAbuoM+IA2akSfCez7rsxJ2IAwf1ckbBHFvqAK9CcYZ3qN7xXlkm2hgi
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C10:KAS-ECC-CDH_B-283_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAdfXU2zYOD4cCxuKrgK6qf0sTmiyGAjB
+dU0LFRNhFX+BJFkwBzA02kFnl9qVo4Nu7yex+icfWaQ0hI6YC60v3VP/0eNm/2kX
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C10
+PeerKey=KAS-ECC-CDH_B-283_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=02ab08d63cdb4be2502558e67eab27570f2d029e7f981d153b973080585d01e42f7187d9
+
+PrivateKey=KAS-ECC-CDH_B-283_C11
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAWWXrm5J550GkDSXKmNS
+Wjw+LSwlO54d0/N4FoEs9UrWXFRqoUwDSgAEBQ6gc1ItvlFAj4Xwpghr1Mjv5XL4
+Cq2t1+cOu0tyi/2/1PG8B9pSABfHrSkWonGbhViVj3fHEtNSz/nArZn7yYoOBl63
+rH/r
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBQ6gc1ItvlFAj4Xwpghr1Mjv5XL4Cq2t
+1+cOu0tyi/2/1PG8B9pSABfHrSkWonGbhViVj3fHEtNSz/nArZn7yYoOBl63rH/r
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C11:KAS-ECC-CDH_B-283_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAgQvWj/l49MzW7e8253L2HFu0Y1/wv9C
+l7wf63zKMQAi4iE9B767bA4EbVr9v6h+qYyn9V6c27BV0MxUm0RY1pmL27NFF3OI
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C11
+PeerKey=KAS-ECC-CDH_B-283_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0599757e3ffeb484b32d3b47828b6823d46786d35477082ceacf3a5a11552394fe58f53b
+
+PrivateKey=KAS-ECC-CDH_B-283_C12
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAV6oVnx7grSD+jZejmgc
+CmNfVjocgUcLTf5E8ZT6ket4QhgeoUwDSgAEB6/isitU/olcJCwgwFSYn6gE5ZGX
+DdqKfOEJ1r0xttqo8vx0BgczvVpOqbXqcJCs/ukYEGt/JScvP3yzbto4us0hN1YQ
+zeko
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEB6/isitU/olcJCwgwFSYn6gE5ZGXDdqK
+fOEJ1r0xttqo8vx0BgczvVpOqbXqcJCs/ukYEGt/JScvP3yzbto4us0hN1YQzeko
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C12:KAS-ECC-CDH_B-283_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBnr994j49IMcPH12BNB6W9xZ2kLZMnMf
+r16vB1MoCWaraTeQABs50dhytl4xJRwfWE5P4+111TrZDoNv6QyNuU/nfO8LynIE
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C12
+PeerKey=KAS-ECC-CDH_B-283_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=005e331af55e96153d8a7b906a4a19016a26381977b49f80b9d70db099053c6a3b8e80d5
+
+PrivateKey=KAS-ECC-CDH_B-283_C13
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkACkR2TjZUIrsy5h34SfR
+sUYaza7QNfIOD3RMd08ccnA7XEtJoUwDSgAEA4a/3+YDc74RS0F8Tc60QyI/3mfA
+/vKe0PhntaFfXqDMtNzKAvrDjshJTPdXYjPsgoLeOEtn8MqASAhCAQOdGUyL2k9u
+Cv8+
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEA4a/3+YDc74RS0F8Tc60QyI/3mfA/vKe
+0PhntaFfXqDMtNzKAvrDjshJTPdXYjPsgoLeOEtn8MqASAhCAQOdGUyL2k9uCv8+
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C13:KAS-ECC-CDH_B-283_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAYhmpPovfCU05WOikd6HGoswUqZ09dvC
+O53qDozv2garwyyPBY3Ezxv5hdG1ZpcIR8umuKT0DH5ipYCLByC7uM3ztFMeOAvn
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C13
+PeerKey=KAS-ECC-CDH_B-283_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=07e132ea71a16c7cc261b9d6ff6fc52cc490da616b07d92f9e591fc1e630d3442572338f
+
+PrivateKey=KAS-ECC-CDH_B-283_C14
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAWYvVUhWwCCKMbGVFI+C
+jgtckqTqTAMySL6/lXtYa0Ce1ZhQoUwDSgAEBwVSZMPeOmItJv561wC96gRdSzzn
+GPTmrkTPN2w6lqJlCzIhAPRcwROGaK3IFQ03wHK7QkVmDBh4VoPHsXqh+4WRumza
+I2V6
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBwVSZMPeOmItJv561wC96gRdSzznGPTm
+rkTPN2w6lqJlCzIhAPRcwROGaK3IFQ03wHK7QkVmDBh4VoPHsXqh+4WRumzaI2V6
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C14:KAS-ECC-CDH_B-283_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAAVx177wVgiRcvE0I6WFq5efS49351LA
+QsDGUmO0dpgeXzFXBEvKaT6dOxp/pq1C2382saZXEtCe87txXiZAoYL0NmIGhsCk
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C14
+PeerKey=KAS-ECC-CDH_B-283_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=010f26817098ce1bbd6743784d6fb65e60699c14933a2c8d854027aa58b58db9e66a53a7
+
+PrivateKey=KAS-ECC-CDH_B-283_C15
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkASwBAKmWPuF9es9N344C
+2K5187mRFPU2avtKAK3po8DuOaiHoUwDSgAEB3lPoZxrENOZ4PUtNvSDx4UYSOYr
+rPlbWvUeygmtRF7hnvNNBhQNLuFs0KbLGWBQmnzMZkvpdkSpWuFvShc9moZwFfCD
+fwVg
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEB3lPoZxrENOZ4PUtNvSDx4UYSOYrrPlb
+WvUeygmtRF7hnvNNBhQNLuFs0KbLGWBQmnzMZkvpdkSpWuFvShc9moZwFfCDfwVg
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C15:KAS-ECC-CDH_B-283_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAW60u7PDhuD0L7A3vuR4xMDb++Vcxo4z
+/bApueXnJK/0/Yv2AlFDL4RWikSXHoarcV04eeYU4Qclc174+2ZS0HnHkI8RvR8B
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C15
+PeerKey=KAS-ECC-CDH_B-283_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00bdd8ccd1b40c5bc2efc1c105999350fefaf784710914ff639582f1277678699491140c
+
+PrivateKey=KAS-ECC-CDH_B-283_C16
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkA0XCdrBezp58hoEfjIr0
+iyLbQdQGYnUAlhG4gNfSzvMpxQ6CoUwDSgAEAHr//PoxwRCqs7s5RTCkHEFq9Wa/
+uo8Vn5hEN+eZ3dqvjN/SBl+zxoRGp0BourfjargOmEcH45pKFD9aRtZGNC+fEvJq
+Mikb
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAHr//PoxwRCqs7s5RTCkHEFq9Wa/uo8V
+n5hEN+eZ3dqvjN/SBl+zxoRGp0BourfjargOmEcH45pKFD9aRtZGNC+fEvJqMikb
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C16:KAS-ECC-CDH_B-283_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAkF8ZWlNhQx8hm9+EWOaX4cYypqrs5L6
+hhDi1dfdozdaYH+bBRM5ONyZFE0W6nUlw/5OMuMg7QdbllJ+E7KpnJ8nrenvnty2
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C16
+PeerKey=KAS-ECC-CDH_B-283_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=014a83e747c90aec6101c0a752d92eef7475b00051ecad3d7c2e50cf4eba1ef3c80b8c94
+
+PrivateKey=KAS-ECC-CDH_B-283_C17
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkA6/Vr/o0a1JZaX2SF5Uq
+/NA93+wEYxvZlcEKwlg7DKjSRh9doUwDSgAEBrTCw2FbJmVD3hiciWz/d7VVfHgs
+IVlhrHMkGF/JqBCY8uvqBH/vGWBzmuCu45o//bguiQ1CNvwi2tOV1JC8Ol7qWOjN
+A+27
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBrTCw2FbJmVD3hiciWz/d7VVfHgsIVlh
+rHMkGF/JqBCY8uvqBH/vGWBzmuCu45o//bguiQ1CNvwi2tOV1JC8Ol7qWOjNA+27
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C17:KAS-ECC-CDH_B-283_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAMXWFJ+HF0ujf0wcb2f2kFq7MZ9Sa3qh
+vh3SBd+TCrHJG7H4AMLiHhIGzUu1tiKr6Xyj8lLLxo0FSnf466utWT+xhjMGkov3
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C17
+PeerKey=KAS-ECC-CDH_B-283_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00afd29e352779a39021536ea50c24fa264c599f8f8fe8f2ccf0615a6547a064d7c1a150
+
+PrivateKey=KAS-ECC-CDH_B-283_C18
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkA9V3H4SFw7i+YqVvOTZR
+PjtjGlYalCYT35UUD0cyFN9hfExOoUwDSgAEBZBsxFKbIgIo77sFRb9V7APIb4fi
+9OOjy/QE4HtzpbGl9SjNAWWI5IDEhWzS7pqvHjAoEvvAsz9SfCm3fOD0h46gidAl
+pEDA
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBZBsxFKbIgIo77sFRb9V7APIb4fi9OOj
+y/QE4HtzpbGl9SjNAWWI5IDEhWzS7pqvHjAoEvvAsz9SfCm3fOD0h46gidAlpEDA
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C18:KAS-ECC-CDH_B-283_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAXMETlvmOZfXkl5DG78ATPDwuoWqKVo0
+Ho9YV6EgvonXdlPpBzfMBJaQ+XCCSnsMICJDloLJ2C9PI+SOXwf+qWJnyjvU1zCl
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C18
+PeerKey=KAS-ECC-CDH_B-283_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0477990f17d65589289c28e54a56a83bc05ef4ea6863c5ebe840925c9fbef64ccd6e69a4
+
+PrivateKey=KAS-ECC-CDH_B-283_C19
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAOLAxgL7EyOZ7p8xAINl
+6iLMEmD3n+OuYQibim+kVZyska7IoUwDSgAEBubjGMDEwLZh39PnIgkOzTL9yco9
+Fo2ccXTB1Arbss5nLZJSBAvcHbx7Fj98lVH0faqClKwtxP4NRyxOLyz+/JXVI/9Z
+4OiA
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBubjGMDEwLZh39PnIgkOzTL9yco9Fo2c
+cXTB1Arbss5nLZJSBAvcHbx7Fj98lVH0faqClKwtxP4NRyxOLyz+/JXVI/9Z4OiA
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C19:KAS-ECC-CDH_B-283_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBoWH5p3t30tVrFHyoX3Yv9b5TnIQAyFC
+Fb+ySySCgedaPGWUBE7unHArxMHiEMfMIUUkWSVorA+f1n1uoCtNw++0LPuyJj2s
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C19
+PeerKey=KAS-ECC-CDH_B-283_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=067a661346fe052ca27f3f03e75bbdfc8fe6d0d85c62c8f79525252aa241ae9de97d56c3
+
+PrivateKey=KAS-ECC-CDH_B-283_C20
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAy1XP964Wk2iKXiWYxQU
+UY1LoH3E3XL3MXKIkNC0TTbyMJwOoUwDSgAEBvb/6gqHvZ7rU5xIo/y/OIFZhiJZ
+x/eEDmSAn77bAag4EsDGB8eVuPKEf8OfpWwt4ebLv0lFCHyy47kZ3HdrTMHIPksc
+ebi6
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBvb/6gqHvZ7rU5xIo/y/OIFZhiJZx/eE
+DmSAn77bAag4EsDGB8eVuPKEf8OfpWwt4ebLv0lFCHyy47kZ3HdrTMHIPkscebi6
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C20:KAS-ECC-CDH_B-283_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEA/EibYAsV1+HGiE7gVD3gYu9YlZjtz5y
+CnN/BxiWCG2gsUzZB9HLDOGcmKY6r3sxTx9XIOMohwUzhKwPXrabbEcajj09Fudv
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C20
+PeerKey=KAS-ECC-CDH_B-283_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=06476b0620eef165941a4507e6d798d6f150ab29333c0552281b629170d3291b2f9b3f41
+
+PrivateKey=KAS-ECC-CDH_B-283_C21
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAKaqy13T6DWBT0UtggfR
+WlM2OPcOlPh8Bhlu/4g41I7tLiZ0oUwDSgAEAt0Ak6jUGYMfNLrGxgpXDFHQjmmb
+GByWS2Z9DRftcqSRGazZAakZdr5dXgN/IjUNZ6t7+rUbvE+mAm00fSj7RAe8zEDd
+EKAO
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAt0Ak6jUGYMfNLrGxgpXDFHQjmmbGByW
+S2Z9DRftcqSRGazZAakZdr5dXgN/IjUNZ6t7+rUbvE+mAm00fSj7RAe8zEDdEKAO
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C21:KAS-ECC-CDH_B-283_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAqkR5+bS/HcNHqvH33AbsRkISmhZANIt
+UtWY/h0o/IkbMbSHAbjcZxPKRT6RsuxOTR+DSwjuvH6IhsOkWOcJJSQsSyK/CyBT
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C21
+PeerKey=KAS-ECC-CDH_B-283_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0746719f2ad08f8a8d6d6fbf15723f336285ce75d3a2fcbd5a0c54c577517a22bc264161
+
+PrivateKey=KAS-ECC-CDH_B-283_C22
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkABEvsqtWRDdlZ2oeQbPL
+kesaZ5DpZO6QDPySlWNrpMb6h6rSoUwDSgAEA/UH2ZzCSY4sf1T7PJwDLzglSOLj
+Fo+hQBJaUmBIVo87s+WhBScN9378fWxV+SWbyCJzyba982duE8NgGxswIrli3hEp
+yzsU
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEA/UH2ZzCSY4sf1T7PJwDLzglSOLjFo+h
+QBJaUmBIVo87s+WhBScN9378fWxV+SWbyCJzyba982duE8NgGxswIrli3hEpyzsU
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C22:KAS-ECC-CDH_B-283_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEB1QapR1zAuK7VXwn7BXX+cOuO3bsL4bL
+lejerX+ga1eDl/HxAX6iL2tUdPD18PTq1UFyBkBRU40+IypTDfyl8qDcZ3Rsi7Ha
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C22
+PeerKey=KAS-ECC-CDH_B-283_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03cda4b5f44b5d3dc248310f994419fbcbd665115d1876046652251ad4aeeb1dcf184288
+
+PrivateKey=KAS-ECC-CDH_B-283_C23
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkA+TxxPMOKo1v1Vn3/ogg
+6IaUneh8AdjrZMe0DxVIy2F6kmAzoUwDSgAEBeP8VuwWKIXBKR5K6cGcjrK7VZ63
+7NWBdUm1ouo6ZtlRiAqmBMAE8q5NtPdItDe8EV4G6iAXqHeYKY3WAEYW/P/cx+wt
+/W25
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBeP8VuwWKIXBKR5K6cGcjrK7VZ637NWB
+dUm1ouo6ZtlRiAqmBMAE8q5NtPdItDe8EV4G6iAXqHeYKY3WAEYW/P/cx+wt/W25
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C23:KAS-ECC-CDH_B-283_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAh+xTlLNQkOlIPYwIpsd1pYcSb2W9D+p
+yuN63YTaeuctwweOAN1ji/kFP61qpP8tMwuKSiC/4wIPQLlpIwLQsKPC2HeFbsRq
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C23
+PeerKey=KAS-ECC-CDH_B-283_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=015c892f95768a96ab5a4f9523b7fd466e101f63b88ad8f1fecb3027cd70aa00735dcc90
+
+PrivateKey=KAS-ECC-CDH_B-283_C24
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAARBHkwdwIBAQQkAK5+s9QDVPn4/tGPIWLe
+44FWyuBTW1U3DaNjjwFmiuz5cIvmoUwDSgAEBh6IWONo2ckX8SnZMt3EzKUh/0Gf
+HXQjDoqlsbPpzmf0HEtMArDX+9xjajvDS73SqJKRtWew+yrzI4OGi9QNS6TKyYgM
+JUC4
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-283_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBh6IWONo2ckX8SnZMt3EzKUh/0GfHXQj
+DoqlsbPpzmf0HEtMArDX+9xjajvDS73SqJKRtWew+yrzI4OGi9QNS6TKyYgMJUC4
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-283_C24:KAS-ECC-CDH_B-283_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-283_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEANCO04VqvvfUpiJDyS1uZwzrOvMjV/25
+05wZF1oQ0curNs54BdufrX/Ir+eci5zkjmL/oNRrgFqeWCHidhwlwO26krEgsGPy
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-283_C24
+PeerKey=KAS-ECC-CDH_B-283_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01adf5a96358e18d69fd383b4dc7b20dd646b68a5c9f1417bcf426240ca22b8f32bdf1a4
+
+PrivateKey=KAS-ECC-CDH_B-409_C0
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQArOkhA//iYqwXrUKk
+bUNm9MtMWA7/OrHd5r3f27c3SBHVKx+pkyC0r11OkgjBTrjvqJFsoWwDagAEAE68
+TUrPm0BNq8OvPoy+qLiLMpmdPst/NnsS6zpigLhAA44iaBY3p9FkNuAU9pYWq/cu
+RQCeJBCVQcgCQhfpqyyWP6njc2QAlabCWibu+sWOQ0LAyFRIsnCVkqEkAv4raKeT
+xVjOjNY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAE68TUrPm0BNq8OvPoy+qLiLMpmdPst/
+NnsS6zpigLhAA44iaBY3p9FkNuAU9pYWq/cuRQCeJBCVQcgCQhfpqyyWP6njc2QA
+labCWibu+sWOQ0LAyFRIsnCVkqEkAv4raKeTxVjOjNY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C0:KAS-ECC-CDH_B-409_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAUaYmlApe+Nz3WZcRUVaKuTCIdpc1CQA
+e9l/no6Eb5Z0Dz+ljDyUEpZxzdTX6mUKKq3p1wG0K//ahDlGoUrWCA+VuPxrfhc1
+KNCO02/mQKr4WqAPte3VkFo4s8eWG3cit3uNy0S7JfU=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C0
+PeerKey=KAS-ECC-CDH_B-409_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01d48a586be9285fa38dd3e70b0330b0ffebd327ceefef88fdc1521ef2fd61cbc9124e03b0c926e70fa56acb3edb54c3c48fab2b
+
+PrivateKey=KAS-ECC-CDH_B-409_C1
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAP/IvfXwEmYmkPg6j
+9dYXmBWcF4qnktedH/6/+Ntw7h/eBApLXx7TP7P/I8ROfGshsGI7oWwDagAEAdXJ
+Jg5z6jbk3qqkuPRUH2eAZraQdxqG8NrcWA/biVmB5t0C3SZO2fnBdjvVSmBSotPb
+pwEacGgmNl7OKOOLM2ILygFtLZM4UY39aGg3BHbay0HjuUdGV2nr6BtiBzFnNXb3
+dFHQ/hQ=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAdXJJg5z6jbk3qqkuPRUH2eAZraQdxqG
+8NrcWA/biVmB5t0C3SZO2fnBdjvVSmBSotPbpwEacGgmNl7OKOOLM2ILygFtLZM4
+UY39aGg3BHbay0HjuUdGV2nr6BtiBzFnNXb3dFHQ/hQ=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C1:KAS-ECC-CDH_B-409_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAX6fAbHW5XAjKDMNIyod0/LFksxAn2yu
+8HCEQIN/NZdRDxEZVKpR5WRsz0fv8fB6T4rhywA3FPbqH9FDznUeLYW69UxVI5dh
+CO1IL9auEDdDExynFgJrFqHkliMfmRzcj220R/X5X44=
+-----END PUBLIC KEY-----
+
+
+Derive=KAS-ECC-CDH_B-409_C1
+PeerKey=KAS-ECC-CDH_B-409_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01856c92b46d671d8a7f6cc468efb60a61093d006c95bb931c1fccc336d4a8490fe17fe163c972bac39fe728f24534a0c34d2d21
+
+PrivateKey=KAS-ECC-CDH_B-409_C2
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAlt4sOSnECF+cwdN3
+jC2/Pbfw9357p7vE5AjH1l4si4iwdV8WC621JOdpfFDmDI2Z5W2koWwDagAEAZxH
+15kUyL2udU7F7B6ByP8ympOOaXHu48lFxOv0ieFLFeYTVhbImMgLewa4r2cGHHaa
+tQAAiAIrT7DnVOxPq4z0/GNiVUJnVfqZtWgFwV6sBDJRVdzL+kFF4WHEDxib26o9
+0+DD1sk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAZxH15kUyL2udU7F7B6ByP8ympOOaXHu
+48lFxOv0ieFLFeYTVhbImMgLewa4r2cGHHaatQAAiAIrT7DnVOxPq4z0/GNiVUJn
+VfqZtWgFwV6sBDJRVdzL+kFF4WHEDxib26o90+DD1sk=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C2:KAS-ECC-CDH_B-409_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAYPuNVqTzROv8XVqCOWOIZWoJimNQ/bQ
+e7HDgrTlaNAICTkmAAnGr8vtDyMlLgHW0UxtjwGyMJs4GcJFSkitJTrJe848ebUf
+UO1oA88FRkt0paHeIhE+I8AYxc7ZGG3bmBxini6ds+4=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C2
+PeerKey=KAS-ECC-CDH_B-409_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01972e225e08b47512e92c0da9a1bdddb1802be402222cac5788b322e101feeb06b66b2fe726c1cd8aec92e02f37d15f4c97e64d
+
+PrivateKey=KAS-ECC-CDH_B-409_C3
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAq9XWHN4xGAMBwmnV
+KvhWuqObifXvRTZ/VRkhDHHXezGNBT7AwvSb9G3gXKvyPH0r19I/oWwDagAEAafv
+PRfDAehmG6ZsHN7oKptE1xaQnjZjtCPcBu9r5PYWzReTIc56Vy2kvKLom3aO3IRZ
+swDfdDhJogvDAmBitCDTlC8Y4tbFMH5uGVXjOwnVlR3FmzGisdWMIz4siW4tnMqo
+7rjo8RM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAafvPRfDAehmG6ZsHN7oKptE1xaQnjZj
+tCPcBu9r5PYWzReTIc56Vy2kvKLom3aO3IRZswDfdDhJogvDAmBitCDTlC8Y4tbF
+MH5uGVXjOwnVlR3FmzGisdWMIz4siW4tnMqo7rjo8RM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C3:KAS-ECC-CDH_B-409_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAOhd6dY+NOXHu6b/mxb0yE2V8R3+khB7
+H77K6Yzm7/PblthpAL/SLNQj284eVya+jll5MwC3FBdx98gW1V7IxTgi0uehkvpU
+oX5bmbLZCWG1Spn+1Tq6S9oaQHStPSP5yREgV5W1RQs=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C3
+PeerKey=KAS-ECC-CDH_B-409_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00b6661a866abbf1843dea8f220e360fe7cd7d9e85c316138fd2532a57d7d2a6bfe6e5518019c603a2d0e338ac6a8690093c2883
+
+PrivateKey=KAS-ECC-CDH_B-409_C4
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQA8yPI7kM8m6FdNwgG
+mDSsxNk3vlAX4dGC7HZGarooLHO14+lv4QYUNkFALHLGJIS6HxLyoWwDagAEALdP
+UlIBGfwIU2zqWEIg3psGJAHmT/Y1kwXC5rDASpX3e69T4jwyau52IRSVwwssFQuS
+dQFUBYji/VaI0bNXY5CMH4I+7sqJQvYhbOBM72btaZHfaiL7dEEbE9BlE6ZbZOYo
+Fe4CBpc=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEALdPUlIBGfwIU2zqWEIg3psGJAHmT/Y1
+kwXC5rDASpX3e69T4jwyau52IRSVwwssFQuSdQFUBYji/VaI0bNXY5CMH4I+7sqJ
+QvYhbOBM72btaZHfaiL7dEEbE9BlE6ZbZOYoFe4CBpc=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C4:KAS-ECC-CDH_B-409_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAMqHCsvk6zrmXt2V1pROsJDg5VBxK+Ox
+Np5HMgP1Kxg4ZU96Q0K9gwlwT+1pM66dFizNfQF5bMKGvz1TrWNpdzdPg1bkVzC3
+qkOAX7UoAfc74+mzKAiYSq677Xvl455RM1sN/zR4KUg=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C4
+PeerKey=KAS-ECC-CDH_B-409_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=010889037c707d90b833d03256ff2e8a5ffce16fb3613486221494a4fee82e74625a93d966c2028d0930115494f9456cec4d2b6d
+
+PrivateKey=KAS-ECC-CDH_B-409_C5
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAEz2iulSzYkTIBC8O
+LaNxjlbb0oSO9Ce92yQXf2JEdbU0AK/csYh56P5rRgmk97vCFSsToWwDagAEAOOi
+9OY8+8HuhEdFqz4eW+VzIEYJrs5eKLj7iriuBomEZ6lae1nAiYpBSr/ycDzLzcCS
+CQENc8Q7YwFwOVEErK1sGlY9MpZjIzKhSB3cLDGDa9Gj7hpzZNf1uClduVo3RbS7
+vrgJW8I=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAOOi9OY8+8HuhEdFqz4eW+VzIEYJrs5e
+KLj7iriuBomEZ6lae1nAiYpBSr/ycDzLzcCSCQENc8Q7YwFwOVEErK1sGlY9MpZj
+IzKhSB3cLDGDa9Gj7hpzZNf1uClduVo3RbS7vrgJW8I=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C5:KAS-ECC-CDH_B-409_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAH62Hf3fw8DQg/4iE5Z5hjgdnjDmhK/f
+K6yPGjYujG1jWN+VkwYAQn38HrFBGP0SObZ7aQFbqH+YEUzsiyy0W7o9zwBrKH4H
+477x2ifOCNqeT0i9JB9ZofnJPIN4hHFXUPQIX5E/T3o=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C5
+PeerKey=KAS-ECC-CDH_B-409_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=010a8aafbb243fc9466bf381eae173c01be95d88a9c131b07ed54d2f117cd3af4019ffb196ebe8290b1269622f9df26763ffa211
+
+PrivateKey=KAS-ECC-CDH_B-409_C6
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQA33VUwBMv1OSiuSF4
+dfmSSlXKsxm3anwXnPAiKTdXmZbPlJILr9RT5S9dL8SAATKfvXjEoWwDagAEAWCF
+HP+UfOcqEYqrTa1M4sPOm8Mwzh0G761/Yw5Fu883CX2UBR2dMQq/+o2W7SKoR8vm
+kwB5o93eY2vGKvQebsDgc/5kYuOK1Lnjo27MgROixjlM7SGr3I7Flp5Y4AnqE9vp
+KalnCco=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAWCFHP+UfOcqEYqrTa1M4sPOm8Mwzh0G
+761/Yw5Fu883CX2UBR2dMQq/+o2W7SKoR8vmkwB5o93eY2vGKvQebsDgc/5kYuOK
+1Lnjo27MgROixjlM7SGr3I7Flp5Y4AnqE9vpKalnCco=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C6:KAS-ECC-CDH_B-409_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAILxSOw00dCLJueeN3LhLWWVmLc7b/8L
+qxhF6aW1BxRJ7ydZ/tY6qAYkuDprLp1zm4P22wEJzqBIpyC6dJ/FIsha9f54N1HD
+n+jQUVug8NPc0Z8Ywi2jkJ8C14c1qhGy/roPjTMMVwM=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C6
+PeerKey=KAS-ECC-CDH_B-409_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01e17b8844c4c757553a628d6f4c48f3a337ed2bbb6e4047dbfcfbfd02bb81c6e096f8ccbb7f2e5d10ee9cbcc960e3a99e79bd09
+
+PrivateKey=KAS-ECC-CDH_B-409_C7
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAMnNd1/EY0p+fPKs6
+By24yIbUL6Xee+plA27TyNRKEej5b04abyVIiMqyFDBRkaJt0drRoWwDagAEAC05
+4PifuHUVHuOzVPjqFZ5/um8j+Kdk1J4H70PxjTz4bhuqrgrXnUAAcJpQJS8c42Ax
+NQDORKm3dbA89CsxAklmB5TCXgQisDrZurqiNhBhMlH+DlQEbgT5IQQ23TdgA9GP
+mN/a4Yk=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAC054PifuHUVHuOzVPjqFZ5/um8j+Kdk
+1J4H70PxjTz4bhuqrgrXnUAAcJpQJS8c42AxNQDORKm3dbA89CsxAklmB5TCXgQi
+sDrZurqiNhBhMlH+DlQEbgT5IQQ23TdgA9GPmN/a4Yk=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C7:KAS-ECC-CDH_B-409_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAIPKBN+EWOXmzm4TuTfatJhSHYJvuVQS
+NFZ+mV8Gg8gPQ4UW7v8M+JGKX4tSYszco5l0FwBfizwg4/4lWe/g6FoSJ235Iu8P
+Qlf+cDviUp9u/7bymaGiUcAeONQ8pspXbvHgvrbJEh4=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C7
+PeerKey=KAS-ECC-CDH_B-409_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01167edf7a3c50e13be126eb2caf6b5f8f761cc8dba413246423b877df74a3aa3f48144b44cd133ad9f2d05ef97a08f7ca511d7f
+
+PrivateKey=KAS-ECC-CDH_B-409_C8
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAsE8ztoeZYw1i9EM3
+x3xaa24Pdga1yHJEqk59ppjMj/HTMRtI7nyaaBK6+QVDea62HAwToWwDagAEAcWU
+DC3is3NYJK4plMFQhvqVh1Dk2DEjrwR+mzwmR0bJtdkZ2iFTVdjCiygIo30MxfL2
+oQAKv+bxUQoYLv943YAum6IeZorqVzLHMt38XfkwH1iZ8CuugPgoJgHvPu/kFO8s
+cm/gAlg=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAcWUDC3is3NYJK4plMFQhvqVh1Dk2DEj
+rwR+mzwmR0bJtdkZ2iFTVdjCiygIo30MxfL2oQAKv+bxUQoYLv943YAum6IeZorq
+VzLHMt38XfkwH1iZ8CuugPgoJgHvPu/kFO8scm/gAlg=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C8:KAS-ECC-CDH_B-409_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEATEVNql0W3R15sL9ckwj2epmgDoTm0fj
+riY7D7fkLjMWJ5u/YiriYlMbLiKD7MGmEnybCQHUjMx4HwvewxMJEARLdpCamr1/
+yxhAfcQvY5EvomZyCAA6stKBAq3PuT3cBTdg5Twtqng=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C8
+PeerKey=KAS-ECC-CDH_B-409_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=015c0d202bfdee2dfbd4be91625171992e6c6b1a1d06cc1b2b66ed64c9d928bd4f062912900d3f89045c7190f513d3b019a634f5
+
+PrivateKey=KAS-ECC-CDH_B-409_C9
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQA1OvDHJpl7jsavZ1u
+ZJV4DFTmM/WiqfYchAjXZ9CRbZHLVM/Nk3U435LPxFk44zt31yTyoWwDagAEAU36
+qnBRjzZ838qJeVoNs3S7e0B6WMqsJLpGgk3OeFAQZ9fgRn0wueH9uwp+rOFfsMII
+zwGdYr4rEqF6ePbJ9+cDZpdl92PGI1/nr3jyUETpnEsbkGU2QLPwrkgaVdR9HrF7
+hsW62hs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAU36qnBRjzZ838qJeVoNs3S7e0B6WMqs
+JLpGgk3OeFAQZ9fgRn0wueH9uwp+rOFfsMIIzwGdYr4rEqF6ePbJ9+cDZpdl92PG
+I1/nr3jyUETpnEsbkGU2QLPwrkgaVdR9HrF7hsW62hs=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C9:KAS-ECC-CDH_B-409_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAQwnNTD1T+F0u71cJ3GlWkLmQFDDvyUj
+5ggq9HbrAleHaW7fbkON0Fa1mPUABjPCZP17pQBEPnLak7DHgl9CI8eWgm/RMiNF
+6iWt898aLGlYkIwP2bE+k8wAX07LFVov/3rFT6gYB4U=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C9
+PeerKey=KAS-ECC-CDH_B-409_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=007c32383aae80e1111207894c8cc5be66fe538af4a19195742a94a4c3f5c765d9776a56177c485ddb53c038b70478959d374627
+
+PrivateKey=KAS-ECC-CDH_B-409_C10
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAJhdqr5imQzVm8dzB
+kZ6URT6cvzyX4Gm0oXQmRJFn9qEImsFqECpLPkMql4v7RiVdxD0aoWwDagAEAVNf
+yUm0kDAwi8Dal5PVcIh2asjPIujWwnbY8/dlDzATXh9sADAME0Ti8DBuoOJwsJqA
+rwC4/D+mHcIsVVAfKmspRJRtmfe7/vvses9PsgDBAC4yLDkXLsCits4IB/Hj67Hq
+NAA1MUM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAVNfyUm0kDAwi8Dal5PVcIh2asjPIujW
+wnbY8/dlDzATXh9sADAME0Ti8DBuoOJwsJqArwC4/D+mHcIsVVAfKmspRJRtmfe7
+/vvses9PsgDBAC4yLDkXLsCits4IB/Hj67HqNAA1MUM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C10:KAS-ECC-CDH_B-409_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEATvrjTbR5/U9gL7qM+/D4AmN6uqheXfa
+j5qunFdueSDo9tpVogkwzmD9SQtPsBVNSSd9mQEdwdh/NS4SvbQaG3ofHlFmKe0y
+PF1bJj/wNvAj8P9fci0FbCSkEfU7NH0HhthPe+h5EFo=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C10
+PeerKey=KAS-ECC-CDH_B-409_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01166107ab98db1dbe22c5888a70c992af4faf4623ef593802aedfe433809c53ef4ab0b2dc4dc2546488b356ef3265356055d8f5
+
+PrivateKey=KAS-ECC-CDH_B-409_C11
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAvz5zlccqqEwJYOXG
+kCLOOQZ0BFNEc8THgpQk+B8dRLMfIOK5guJRz5/7Mnp9g09Z0ZSKoWwDagAEARy8
+TtkDaifv/In/1V+h4+rQ+5O6z6Cni8r+ORSrGpeGD+wTNMqroHJDWRYD5neRrqS8
+twEBB0xERidjCtClJY4kQ41x8mq5TQW7R9Grl4WMS5LG/xy5vma5hP6OFuRPOT5j
++dZCgcg=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEARy8TtkDaifv/In/1V+h4+rQ+5O6z6Cn
+i8r+ORSrGpeGD+wTNMqroHJDWRYD5neRrqS8twEBB0xERidjCtClJY4kQ41x8mq5
+TQW7R9Grl4WMS5LG/xy5vma5hP6OFuRPOT5j+dZCgcg=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C11:KAS-ECC-CDH_B-409_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAWkMdGSekuHBAE9D/W5GkL5ZWQTFbSrN
+haSa8KF9NDaMh2jQOe3pySrSayYwa1/973v9GQCBJ19+L/BopsG5LdOMA0JW7XMi
+sCdwKZTHT1uBgSTTShkJh/1liJL8meesuYd71v6UaRk=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C11
+PeerKey=KAS-ECC-CDH_B-409_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=007e7a249094eb52bee0115b8bd5545f81bf0b7d66998fe124c9a3dd3c5715d03b2f973d47c19af5108a2ae005fcca65e61f337d
+
+PrivateKey=KAS-ECC-CDH_B-409_C12
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAltQDsPpgHJp1qn3p
+/p4R1C76k9lt01EC2gXTrIB+RBlOGOeci1vhHF+znIvU4xIyWvryoWwDagAEAAmD
+OUYpTUruzbb3JUykicD/E68txuLKViaDXV3SIkFEDDemNpDNEYZ1gf9htyUtB6+4
+/wBhg/7m9NbvW3I8U8lsXB7N2EZS43nJN4eNdm+DNwUAQSNZwi1HeL34B7PITluD
+NQkQoak=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAAmDOUYpTUruzbb3JUykicD/E68txuLK
+ViaDXV3SIkFEDDemNpDNEYZ1gf9htyUtB6+4/wBhg/7m9NbvW3I8U8lsXB7N2EZS
+43nJN4eNdm+DNwUAQSNZwi1HeL34B7PITluDNQkQoak=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C12:KAS-ECC-CDH_B-409_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAFwk9K2b3LFGBoWiLaVNvd0VB+9t5Gna
+QXDOMBR1eaVJRduxvOnwLkcAM7sV/Bpw+DHnmwF8qTK5CgjKLj9VxQzA4T0nnXvJ
+EZxXPD90FBC7fBytEHbDukKu0c5p1WIosIL7beDu+2g=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C12
+PeerKey=KAS-ECC-CDH_B-409_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00b9d8b68642b2729340d8b7c5ed3b3a8913c4a3f6b947473017c0e105bc7edc60daa9b0732772220f93eca4878085f756e3adad
+
+PrivateKey=KAS-ECC-CDH_B-409_C13
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAZxJewwmrXcfqVo+I
+FaKzDPrDNmu08BYNU3OKuZXOdWgfzV5JLzqXJbTPdbpDAaeGBJNCoWwDagAEAfHR
+ruX8WUykoiuButcH2CG+8yU5ZvXXeVYVdIOWFpb0xgR2pCtFK4nB7LNhVHXsnJbc
+hwB1XF71WIm0Fc76DogaPvyb6G82xnYVQjtFLqtM1WEa70GY3bMa7LQ07u7BLt0F
+kTrxn8Q=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAfHRruX8WUykoiuButcH2CG+8yU5ZvXX
+eVYVdIOWFpb0xgR2pCtFK4nB7LNhVHXsnJbchwB1XF71WIm0Fc76DogaPvyb6G82
+xnYVQjtFLqtM1WEa70GY3bMa7LQ07u7BLt0FkTrxn8Q=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C13:KAS-ECC-CDH_B-409_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAKq/aquz6Q+VbXAE/8iTxw+OkM3DH8DH
+qI8WMgVB1YRDrzlAXYiNlnZVfN05SyfcVEn5RQEn8m26BsM/j7RdlVz9tc7dqT3Y
+pF20LuC5JkoFTBaoe+2tRcDZoPNbvGqnoSlWIug+vos=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C13
+PeerKey=KAS-ECC-CDH_B-409_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=017d60394c7ee64ba73db91484713370daa821255807349c237e5849411bf0bab3a1b353be3cd07eeddc5c2ffc74336225dae6f7
+
+PrivateKey=KAS-ECC-CDH_B-409_C14
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAayzCOH9pr9Q5eLf2
+a9F2ZiVwgbpNZu5qmoK3yHxKxfDrprwtmByh2p/yArpyy3/pwGzwoWwDagAEAIak
+TW7k6MUNHhDX0dETqWEHUCEGeeDkyrjGImeEKTitXZM8mA7vnUZEeRu/01u6xknS
+EwEdpjISYxYF/qDpP1gmsZKbK9HblQYV/LBetHvZy2nq4DscM9ep5HszWkBJgjj+
+24mZsE0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAIakTW7k6MUNHhDX0dETqWEHUCEGeeDk
+yrjGImeEKTitXZM8mA7vnUZEeRu/01u6xknSEwEdpjISYxYF/qDpP1gmsZKbK9Hb
+lQYV/LBetHvZy2nq4DscM9ep5HszWkBJgjj+24mZsE0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C14:KAS-ECC-CDH_B-409_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAB9P+/IvZ8FZGwp3DlY8Crpm/gFWHF4i
+flIrXd4jx0jKz49KAikN4mtHdn04ilyDbT7/SwAtJz8uhRblCDiPjtIBXsn+Z8Zv
+gyzysmHfrVhWEoBC+0phqRo3s0HeQpbUv2O/Z6NFinQ=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C14
+PeerKey=KAS-ECC-CDH_B-409_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=00b19e052edd44421ee2f5ba845911fed9183d885da85d51dc819ca565ce574f7db257509876377b40c5a08349019563b60e13e9
+
+PrivateKey=KAS-ECC-CDH_B-409_C15
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAPgmPPxleidpx1jZw
+APgEB5rcoydbLnk+jTEsjkAs8NDOUzF0L4dRX03ZzGaCRhlLlXK2oWwDagAEAQr0
+rjNLpAvWU44PCVqlb2GivStfOOlUt2F9kroQYDzcyoNlVNAkLds31eFXawvmnw7s
+5wGzNVIa7DBfMU1/I+0ozAxNI/M6Z4X8bG3pPl+rzicTAvlVf20q53xScg7aWi4V
+Q2RD39I=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAQr0rjNLpAvWU44PCVqlb2GivStfOOlU
+t2F9kroQYDzcyoNlVNAkLds31eFXawvmnw7s5wGzNVIa7DBfMU1/I+0ozAxNI/M6
+Z4X8bG3pPl+rzicTAvlVf20q53xScg7aWi4VQ2RD39I=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C15:KAS-ECC-CDH_B-409_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAbCDPrNEBFDj+lFIwlwt8uACBibyQHQi
+IX5Oy4vYp1GnK6suxWQq6Q/SnYxNeenMGRtbpQAjB4kFtqMwCf/qGhl325Q1ea++
+uHGXAFlpaynvkN2EYXdrNDoJyFOlOOTyL9+FT8vztzQ=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C15
+PeerKey=KAS-ECC-CDH_B-409_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01697512676ae56ff5ab778c411042d217ad24a24ea05bbc253e4395fecc8a07fe77ae0ca4ed977459f1a14d9b83931bccf46107
+
+PrivateKey=KAS-ECC-CDH_B-409_C16
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAfYSTE8ZJna5HKwvd
+t23sRYBvguCYcjMB3zO2u7l/eUvyaHn8M8KXP4bBVRVJZBqBm1cRoWwDagAEAEgS
+rxk3YwuOp9D/cjy7BbeidA/Eyb55LbIE+SlnTDLkfYXkdwuQPTKQptYsJ0yyV7do
+NwCMb2FxF4a/XFTrDBsxJtZBskpmYrZ7JXMCqaYaqM1QOEa8uxsU+lyXRUNotsJ9
+0t4q6As=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAEgSrxk3YwuOp9D/cjy7BbeidA/Eyb55
+LbIE+SlnTDLkfYXkdwuQPTKQptYsJ0yyV7doNwCMb2FxF4a/XFTrDBsxJtZBskpm
+YrZ7JXMCqaYaqM1QOEa8uxsU+lyXRUNotsJ90t4q6As=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C16:KAS-ECC-CDH_B-409_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAXS9Iz+GHHuFPMqPWjg1dISe8s127yK8
+DhWfcTodBzh8QgOxH0wzm2aWdPzx2sGZcDvrBwHix3jMpklj2HMp5XyLyW0PZzcE
+H9CH2vwH3WcOLOclVH4aJhxD+8VOFMNHPr27Mf2oRzo=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C16
+PeerKey=KAS-ECC-CDH_B-409_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=015960ea8b92bd77d52874e3ea82ed1763440189d68728d3974d4c01d6aafdbb5274648f6f3eaa4faf3fc72d09892ab038cb2fb7
+
+PrivateKey=KAS-ECC-CDH_B-409_C17
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAv6WUhWxnwoNrf7Fx
+tnx6Qa5D7zRQiYAkqTE2VPzzHh4fusetUrK8Q1iXWlxhq59OPk6eoWwDagAEAOG1
+MJpEgAqRatik0ZuCpYsA7gSCSAUKbtbDPOG8lwFUfpPXyQQvhJBlS3OizX1z9zPA
+vwGAsgM4dGNR+sz7mjcRpOE4RXVQu/WDFgNMbyFqU3SSY9/+I1m93NyJ7GRGqaSp
+9O+QyG0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAOG1MJpEgAqRatik0ZuCpYsA7gSCSAUK
+btbDPOG8lwFUfpPXyQQvhJBlS3OizX1z9zPAvwGAsgM4dGNR+sz7mjcRpOE4RXVQ
+u/WDFgNMbyFqU3SSY9/+I1m93NyJ7GRGqaSp9O+QyG0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C17:KAS-ECC-CDH_B-409_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAMHctzfSUwNbuR0qSoXzfQAUK+gfySeM
+sjpNHXnSfI08RECyyEK8HiH2kk4U3IMbCr+4RQAMc9VoewSQzMB/ZUEBrN2zbNDC
+7szhZd8nb4O+IR0B0w/1wkPwkAVy7m3wf1Od9qRomws=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C17
+PeerKey=KAS-ECC-CDH_B-409_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01127491ff33a67ffc4757416cd02a081cafb723aff52af35b069b89963e8e3ef5bc19c5a093ccf511e3c3c19be789280e986809
+
+PrivateKey=KAS-ECC-CDH_B-409_C18
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQASgIOBsQA7ySYwRHN
+4VCHzaSKb7LswB2YW1fw05IZIOksQ/OraIEp3AGtKfwx1o6WIjGboWwDagAEAWci
+f2KElZTtY/JH94Cy0R3ZosLHG9a3EpTPi1nOaQv+ANqbwduNHarJv/jADnvfBx/g
+0wE2w+p30JPZc5++aJExixSVl3hZm9Hn1al7/IL/6F/VqaAbgvcuEfrZbS9ctXmP
+We/qFe0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAWcif2KElZTtY/JH94Cy0R3ZosLHG9a3
+EpTPi1nOaQv+ANqbwduNHarJv/jADnvfBx/g0wE2w+p30JPZc5++aJExixSVl3hZ
+m9Hn1al7/IL/6F/VqaAbgvcuEfrZbS9ctXmPWe/qFe0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C18:KAS-ECC-CDH_B-409_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAT2WomfRoqnqg66xsB2KziLiUcgvX1/D
+71mXowEadKEBFd9g6Y0TnN02DnTXb6Ui7rVvSwFrZVq3zQ059Yj77+xU5PRQR2ZM
+izvo5XqxE3cPX+DGIwD0oJ+iiZ5zu8mCMmX1XVz0rhg=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C18
+PeerKey=KAS-ECC-CDH_B-409_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=01254508553eab09fbc2fafe13fa9b324d9217d7d0ba4cedbe5dc869ad68de4f87774dd17d6428ed242c71956f252969e6bd5837
+
+PrivateKey=KAS-ECC-CDH_B-409_C19
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAwZs5FmX1A1NUf8cs
+ntAZ9TEWkO5B58iVqn75LGD7nzRU36xXUkWmhp8f3sdF1j6lbIkioWwDagAEAFOn
+piqLQES2Cvdu+ltEQpv2X2WYfWoGIWPdVfCNyakbi7m2Jw+KAmEj+Z65NyzL3SfK
+OwCt1G9+pwkvSN2qL+uWyyS/ktJij7bk983fUj5fhAEc+Kq6vWAJoT8ppjtrfuZk
+xm84KfM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAFOnpiqLQES2Cvdu+ltEQpv2X2WYfWoG
+IWPdVfCNyakbi7m2Jw+KAmEj+Z65NyzL3SfKOwCt1G9+pwkvSN2qL+uWyyS/ktJi
+j7bk983fUj5fhAEc+Kq6vWAJoT8ppjtrfuZkxm84KfM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C19:KAS-ECC-CDH_B-409_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAXh7MLOyBOKYaQudcR/+7xZ63FeSBotc
+jUIuyQ+Uwr3ShM2/i+5kL3C9e+LakGue27ws0QBDB4+RIRApChPZAWDw5xWC+jnA
+512BkOuBHUUCIARMxtaA2VapiGDm/IW7htZZkKFgxbg=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C19
+PeerKey=KAS-ECC-CDH_B-409_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=004b9accc21d7122835fc21410ed1d83767c47a54ffee5f0c180fc55f3d0e8484af3ad38020294be92f02f0ba7e2b4f4eb1db07f
+
+PrivateKey=KAS-ECC-CDH_B-409_C20
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAbJCYtT0Q8qwChKmZ
+AmWPZn6kyrKGmK8/oHAGobtGNjsQPEqkySwcP+dTkJf6cLik+kbFoWwDagAEANPt
+9lL0P5yakqLk00uoP11+lQwoNGoqaFG/dVRwUBQKTpwcG1AOHSrTZMMGuaRK9QOm
+IQCZsmxkNn8ZA9qV31FWLSUELAGhrdp1u6WL2w2KqzULUuz76YSIwmGd4BzXD14A
+iVO8pUc=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEANPt9lL0P5yakqLk00uoP11+lQwoNGoq
+aFG/dVRwUBQKTpwcG1AOHSrTZMMGuaRK9QOmIQCZsmxkNn8ZA9qV31FWLSUELAGh
+rdp1u6WL2w2KqzULUuz76YSIwmGd4BzXD14AiVO8pUc=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C20:KAS-ECC-CDH_B-409_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAenaCtGhWsPEMfIglU7S5QKve3RsP9V7
+Ls63dIZYAgoJVmSHg1TfCqGB5X5erSyYWtMCPQCcznOlRwg0i0j48/Z0u3ZU9EHy
+g9TopOyPhZLvUjlfJMES1ZQtOuCP/o2Znv3jmYiKfPM=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C20
+PeerKey=KAS-ECC-CDH_B-409_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0093e2581c159d74d11f8667ee03399208b5c1a4ee5b20070ce8d97d251ef1236dc81dd688b2f07a730e6b8aeca0c193a28b178f
+
+PrivateKey=KAS-ECC-CDH_B-409_C21
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAp/o4qKuAMNa0l6I7
+3l5QB+OdFNqfgtxWSuPNtK9fz0G8/vetrbWRcebX09PDrGf3vnBzoWwDagAEABO7
+O6kdXSSIr1ctmVzvj/+x/YXRE0IejSwMOql824qTP8DT8F9GRs6EHr3PGphgS/+j
+3wHy4E6hagEtSGTPLKdWSEbec6M/JFeNxNIhNZxPL4bKgjywWWv+R2Dp6ty0rVCK
+saFx7L0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEABO7O6kdXSSIr1ctmVzvj/+x/YXRE0Ie
+jSwMOql824qTP8DT8F9GRs6EHr3PGphgS/+j3wHy4E6hagEtSGTPLKdWSEbec6M/
+JFeNxNIhNZxPL4bKgjywWWv+R2Dp6ty0rVCKsaFx7L0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C21:KAS-ECC-CDH_B-409_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAMSSlPtxKUIiGiUAMkr3vYx+wc0bgJTe
+0brAAQqGlgg/fvrsqlED1nYkmeG+SFfTIAMCgQBWT6ERCzk5Jd+7JLqaazNz9GJO
+y8PhL5cG86sFQpktjbbI2Lsl+gYU1Ib20ayfPZi57f4=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C21
+PeerKey=KAS-ECC-CDH_B-409_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=008e2f1c4bad19c46a5134afccf7f4ec14ab591c8b8ea48d9c3d1e7354ab43ba20aa39a65fd92cdc176cf3dedecbf9da49a8d855
+
+PrivateKey=KAS-ECC-CDH_B-409_C22
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQAzp+Ce9JMAUw+5Z7e
+90cXjWwDDBlmmtjnGLoTAr70ta0sEjNEj1J1spqJbAsuew2pIGi+oWwDagAEAXbj
+EBLZxgSy0aGSKijYpXTwYMw2OIsoFtL4EX2iDAaZqwoI92+6pHbwqcQkv0yVK0dU
+/QEf7cPo+Ogo4P+/Av2F0pwCAf0PU78mFMEK5RzLWMvEkAw4zEyaUthtifm4wt5O
+In9OIo4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAXbjEBLZxgSy0aGSKijYpXTwYMw2OIso
+FtL4EX2iDAaZqwoI92+6pHbwqcQkv0yVK0dU/QEf7cPo+Ogo4P+/Av2F0pwCAf0P
+U78mFMEK5RzLWMvEkAw4zEyaUthtifm4wt5OIn9OIo4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C22:KAS-ECC-CDH_B-409_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEATSt0sSZFy33ktlKmziV4kW4QHPDJSY6
+hYwen3zzCkTyaNP4NYQR3AqcqrUFwKvAFhML9QAxwjaxQ8oDbIg2Qff5uVf095ij
+FmfEFWA0Ann84JYqIb2LtS+iPbcahPNaV5TvXgdZct0=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C22
+PeerKey=KAS-ECC-CDH_B-409_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0190a1693eebe287ec980236d8762804d23fdb6f222763a0efc364f9280fdd53394c2badcc51ff09557f3b97cae7f70d790bf9df
+
+PrivateKey=KAS-ECC-CDH_B-409_C23
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQA4287mhNBmVsT/nC8
+VF0nnm2xSCySsTzozA2hwQDqL6qAOmSljMfrHP0WdXCDXFIvZZNHoWwDagAEANHK
+gjk7jVC9GJipCb85Mz7KO96YsLDc7Wb4KGMOaebrEot87CPwcmAEcHMmCnZTMd1v
+VwBsU1/5Q6D+dQ/Gw5kEppEroevA9GwbCCPkATx3R16imz8ySBlm8bFlvtumwXoU
+lPttTz0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEANHKgjk7jVC9GJipCb85Mz7KO96YsLDc
+7Wb4KGMOaebrEot87CPwcmAEcHMmCnZTMd1vVwBsU1/5Q6D+dQ/Gw5kEppEroevA
+9GwbCCPkATx3R16imz8ySBlm8bFlvtumwXoUlPttTz0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C23:KAS-ECC-CDH_B-409_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAPDsly3J/f0IzY38unKYtN8tvYDCCyiJ
+5mOsWMw0jL+Pn/0x/7UGGNbDjXKpnVxdLqzAAQC7C0iJPNuRXmXNXXl4BIAgF6KV
+NDZUJGo3/jpg196YfmqaEKrwY9lrEBhGEszSZAfX4D4=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C23
+PeerKey=KAS-ECC-CDH_B-409_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=001469dabcf2210aa7de0040b201221eb4d1a4725431fb5a93212a66ddea4187e078f5e3d82606f6cdfc0ffe6b69574d1d0ba643
+
+PrivateKey=KAS-ECC-CDH_B-409_C24
+-----BEGIN PRIVATE KEY-----
+MIHCAgEAMBAGByqGSM49AgEGBSuBBAAlBIGqMIGnAgEBBDQACKBnFu1vTPco+QGZ
+KPNnx3qQUkkLmouoelnNyoTnfGopmFP1SW/r5lL0ujM1AcT88rovoWwDagAEAKBF
+tea7t5UElfbV1kWit9cgBnJdAiPH/3VTQCLJJgqw0tjTM3iaPcz8OolQLKUAvQwf
+YQHsVW4bFiHsGJNlThmNWSPjEUeKi9L//ygMkJL/wHNyiamXSStunr+TGUdjTvf0
+O0Kc82o=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-409_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAKBFtea7t5UElfbV1kWit9cgBnJdAiPH
+/3VTQCLJJgqw0tjTM3iaPcz8OolQLKUAvQwfYQHsVW4bFiHsGJNlThmNWSPjEUeK
+i9L//ygMkJL/wHNyiamXSStunr+TGUdjTvf0O0Kc82o=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-409_C24:KAS-ECC-CDH_B-409_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-409_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEATeERODe7P867Fq2506BI7qY2LkaUHz8
+oNhQl6rZRMFbT9icjL4sdFHY7GQQRUIbS/aXiwFkR8ITyQNd57zCm91h1u5u1Vec
+Nr7Fa8a0T5KGv56Z+sl/NWcIzQMQ2/Yzj5r417E1kQI=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-409_C24
+PeerKey=KAS-ECC-CDH_B-409_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=005c701a93d7790322aa7c67440fdd9ee8057a0dae86d1e856ae89e7893da178bd67777f86db2be5c8e31dc50ed8a440aabc342d
+
+PrivateKey=KAS-ECC-CDH_B-571_C0
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIA0TyK+h5mblbIof2
+dDDqj+ZGxi/ji3zmHx+VZZfCe93ZkC4g1ENqvzvr2CQ+wpoASBqKLBn1UOmWQbXx
+Sq+7W9qVOnVZ+GU6oYGVA4GSAAQGr3H87BopBBFv4Uh4Zjdkwex0hw5dLVORnwtj
+WRLbgN1UYNnmmUWP+ElMW/x0+6jTsS9l8BXo3vEN4z8YABkfTLUC0hk4uVEBlYQX
+exicZkH/tni214M9jUuyXe5QGN2k5MDSGQSMAc0Nqer/40bVPPGgezOz291Lw6yr
+5IMvmYHv8mYJkarIUhR5he6jpR4=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGr3H87BopBBFv4Uh4Zjdkwex0hw5d
+LVORnwtjWRLbgN1UYNnmmUWP+ElMW/x0+6jTsS9l8BXo3vEN4z8YABkfTLUC0hk4
+uVEBlYQXexicZkH/tni214M9jUuyXe5QGN2k5MDSGQSMAc0Nqer/40bVPPGgezOz
+291Lw6yr5IMvmYHv8mYJkarIUhR5he6jpR4=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C0:KAS-ECC-CDH_B-571_C0-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C0-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQDtj9foRKua18RPHZRRP5MvWAg4m1A
+DBFgmjpjS5oyX0FrDj0yFXNMaKHCyPrR0Lues5OaQa8iQh9oeB5+sGZLnfXOpEje
+qjsAjmzHe83cgW6Ez8H2JoJPok09X9M9gJPL/h/E2IG2O0lBI7x1lnDtyxiHuzud
+WotRa8UDgoFjcJ1NrLWU0nehWpLAZOV3DRs=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C0
+PeerKey=KAS-ECC-CDH_B-571_C0-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=06775e1b99a236e02b020bc73666e5751c1210dcb6e9b02a69f4075376e49f7a1476d2209e861abb73f5e3ad189d268e035b1de93d47b3a64de5783c9a09bc223e1cc612f26dcdf1
+
+PrivateKey=KAS-ECC-CDH_B-571_C1
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAvTSt+Y2YObCCUng
+bcZwvoqvglMOC26v4hAR/p0PRAfIVJUVc0UozaKZ6fz3OKl/v0PEu6JnRLMnUxtA
+FD4Vi8hkWQnqiIRWoYGVA4GSAAQG6nEYJ62O1Ym3Ce819qnNRiV5i9iH5f5ZxR8P
+QcMot+zfhHNsQ/tw45hu5eX5huAJ9kEVinXM5rOfU6i/BoKDAZTkAHFI3u8Exrny
+pgmfwDZ/qWCTlMMiGtjG+xEdK9xDBQU4BHiNMur3ZDFAbnaKRIy1yONMgSJe7JAV
+q72SclwAJxLtMZLYB7Nq/qhT9yI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C1-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQG6nEYJ62O1Ym3Ce819qnNRiV5i9iH
+5f5ZxR8PQcMot+zfhHNsQ/tw45hu5eX5huAJ9kEVinXM5rOfU6i/BoKDAZTkAHFI
+3u8ExrnypgmfwDZ/qWCTlMMiGtjG+xEdK9xDBQU4BHiNMur3ZDFAbnaKRIy1yONM
+gSJe7JAVq72SclwAJxLtMZLYB7Nq/qhT9yI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C1:KAS-ECC-CDH_B-571_C1-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C1-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQFdcuwWfQjMJ+ZO2wGrHHXvMXR5qGa
+/nKBHLYSpiOMnMwzHmfaDBC4jMKl8e8v9ta3RAZdJC9ZjaLWM11MO+z1w5U5QMYO
+/McGtDNlLjo2oHAYqorT0v8x7Xhc5WAXFu/3cQ/BPG/5/3XH83AdRZ/Y/nDAtK/O
+2ghoFxfbmCHYyFj9OeJ0/zd3L46EhW5wZ0U=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C1
+PeerKey=KAS-ECC-CDH_B-571_C1-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03a80ea8cfecb858f9b77bdb46b6cda26320ee8c561a2fd6b7e0a2b62201fbfe60f577780c75a98a11a69de4c4ee911930d2200b6972bc3123d7f278615ecc65984a59fe352a1cec
+
+PrivateKey=KAS-ECC-CDH_B-571_C2
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAStjE7VoU8+NAnME
+nPftKrjmMuWSVu0EM2aFdkjz8qlnTK62+w/NX7qwu6u84XoPxKeBSEmcOJr1dIY3
+RkFpWw6FLzFS7sckoYGVA4GSAAQECnh2PRcEWd00tcBOx4LmmMvpA6WjSFUcUkjZ
+2s8ZvLmkmOoF6A4tbMHz6lujpDhVuAHIwDVv4+Ke4iS7kfTtDIVng3m3JUIB/0nO
+CmLp7a5qpjqYSORPGFQS0P60a4f5FCS9r/7VFoMh7XbyNfddM2Z/bX1qnIV7tPhU
+QvxA+aIMBK4GNipG7O6hXEXWm+s=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C2-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQECnh2PRcEWd00tcBOx4LmmMvpA6Wj
+SFUcUkjZ2s8ZvLmkmOoF6A4tbMHz6lujpDhVuAHIwDVv4+Ke4iS7kfTtDIVng3m3
+JUIB/0nOCmLp7a5qpjqYSORPGFQS0P60a4f5FCS9r/7VFoMh7XbyNfddM2Z/bX1q
+nIV7tPhUQvxA+aIMBK4GNipG7O6hXEXWm+s=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C2:KAS-ECC-CDH_B-571_C2-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C2-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGSqZoMP9EMkpnroqQeJaJe1B1Zs9S
+3+E+Otux55NmXStxg1h1Tv6AnkSWIYUC/rVgTb+8BKEQfKnsTq3H0QqdbRR0zt9X
+gUUG9j9p+MGLZ/EQUbPTAjahokkIiyvKtc/4MM256z51wehyUuXY5huxpmNI+2ge
+li1lq8VNXeot1yxVRZB0AHT3xmxLjf0wdWE=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C2
+PeerKey=KAS-ECC-CDH_B-571_C2-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03edea7e47ded7c2ab1115f4ebcbb42677c7fba6e0cfd811602896251ada1d5a0b461aaf4e000f4d4231b96d8dee7630d9f1b7860e6418dac8c3b07b66af6fd1acdb44b2683b29b4
+
+PrivateKey=KAS-ECC-CDH_B-571_C3
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAhmXtUgcDPbPQ2v+
+Ngw7EZueTdVvPChHr/sgIcusS1fcGPUHXWeK8rpunu+8QTjYGAU/LfMqEOiuXWQJ
+9bLx88q/NvgI/cB8oYGVA4GSAAQFYM+RMowmu6E/ccm13d0FwYWWnYi9Dp00o2B6
+kjsjpbZ1RSFnADri8K3VFB6kvkHrrpHTpqoVw5Pb9YWtbJIUsmnoa08FS/UC4y7C
+QEGKmk+QF+Yy+Kd4l6IjPW8fRbj3qoGPhH3bPOq1paEsdU/OjVewMgoHa1NEHc+f
+Ze8yBOCJGR7xVv92IpSJenL8qTI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C3-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQFYM+RMowmu6E/ccm13d0FwYWWnYi9
+Dp00o2B6kjsjpbZ1RSFnADri8K3VFB6kvkHrrpHTpqoVw5Pb9YWtbJIUsmnoa08F
+S/UC4y7CQEGKmk+QF+Yy+Kd4l6IjPW8fRbj3qoGPhH3bPOq1paEsdU/OjVewMgoH
+a1NEHc+fZe8yBOCJGR7xVv92IpSJenL8qTI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C3:KAS-ECC-CDH_B-571_C3-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C3-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQFBnGvZcvvkvMF5frLQojMBKTGl4o7
+eK/kBJxqmV/ow8C7YJq+SdFSse7WxxTSVP5u/xWanr0krRaRnvdvRHAFfrfCZaS9
+lugFHQjiHSZNjk28c0CIQqtXzXjTI+fetiWzdBmUuK/+Aa9EYWIttBmv7q0EWEX2
+w9ttmC9FtpK+oRzyXRiso8g77IQMdYKnBi0=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C3
+PeerKey=KAS-ECC-CDH_B-571_C3-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=005b640015330f8416f2bbbf8b5660e01a7abba8b0197a29e52bb535d62f89ad0443e08b6e0d1d15f4eb03c0fe35e3e43bd7739cb692092698a2cd13126cee4432831ec7423b3434
+
+PrivateKey=KAS-ECC-CDH_B-571_C4
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIArU5rMdwdYeZ9Dln
+Dq6Fubo0qLTzccyTWiDOjFZlIe7NjE9a/xFq4Nsq1urhozhENMWZN5ghrQXYGtoF
+SCmd/ZjP1tPxVzUkoYGVA4GSAAQG2uU4yCBEOXdBXO9OeZdLp2K2m0NIECAMxv/z
+JqI0TNIb4ZwVNkLfgqPlelUxqL8Zdn4ZldJyj8tmHVjsVh7yOjTYYHlxSQ0FBCQ8
+eSuQMYTqclqUfKiSGMqcj6Hgmn3WjeiOrpD5vSqN9BTdaaiysaLe0sbX9RTIkHmX
+Yk6wvJ6pM6LUdO+Pg7rqMkODTeI=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C4-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQG2uU4yCBEOXdBXO9OeZdLp2K2m0NI
+ECAMxv/zJqI0TNIb4ZwVNkLfgqPlelUxqL8Zdn4ZldJyj8tmHVjsVh7yOjTYYHlx
+SQ0FBCQ8eSuQMYTqclqUfKiSGMqcj6Hgmn3WjeiOrpD5vSqN9BTdaaiysaLe0sbX
+9RTIkHmXYk6wvJ6pM6LUdO+Pg7rqMkODTeI=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C4:KAS-ECC-CDH_B-571_C4-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C4-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQDmsnpGvWUB03NM42k9SQFdPAeQTpJ
+uSJGuj1t6FXj3t9uf97amrf3+Edudwzpu8OppeuYRUPcw39fEb5uKKHRCQkx9cW1
+o1EHgNMtuxNImb2i6YhIlBh4OHq6ZmX9JCUhYM4xI/aPm1vY8lSji4TsU2Ul/gB6
+hjtvzEifk3oFpf2UbWKCUyign4Ony6J/6l4=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C4
+PeerKey=KAS-ECC-CDH_B-571_C4-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=027af05ecd0332784d64b0b1bdb45c310fd445c5a6d6b34f35f4eaa3fa3e171ab98763d243a1dedf46aa29864620a47d05eeaefd748186bcbcf187c01e7ce36e2a53ded071036b59
+
+PrivateKey=KAS-ECC-CDH_B-571_C5
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAxipbjgngtRHbxvr
+9pehB28i4dLshHR/n8QlBdVUfaqgjYFHIXWWWZWGhc9OpLuhL/+2avCfZpRSHxHA
+m2YmyK5S+/szalKhoYGVA4GSAAQGdw8vzS6bf4vFwpLSg6uthRVQcf4373zoTzTH
+YW2j2+G9zpqwTOp7xLwljF0qt3I509CEVost/3eZiCiNn8a7Nk9RnQ6FWtME9qH0
+5f4A/pol2EWbiIA5iO8r8v71oj8T56fn80Wav8PVwAMDq8xQgPq4GwnVvgMg75kF
+GaBq8TwpVi7pVXFagswNrvLF4Os=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C5-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGdw8vzS6bf4vFwpLSg6uthRVQcf43
+73zoTzTHYW2j2+G9zpqwTOp7xLwljF0qt3I509CEVost/3eZiCiNn8a7Nk9RnQ6F
+WtME9qH05f4A/pol2EWbiIA5iO8r8v71oj8T56fn80Wav8PVwAMDq8xQgPq4GwnV
+vgMg75kFGaBq8TwpVi7pVXFagswNrvLF4Os=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C5:KAS-ECC-CDH_B-571_C5-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C5-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQG9liEkQYKHogUjkve44vGdHE/44TX
+z9v1vZDJ27bhWH5Fnc5uDWm4ss/rUFW+5WpzwTQ2BgGYrUdQ2uglPqg5ouJG1UFF
+l3UFthuPfY1sgWKiJp5yh9RZA0uPqsA2D8+Z+yHaNKMU5nNTGbnQNia5JoNpNF86
+YkrK2yGbIHGI0OlFy8Z8mCBo0yYT/CH4sPQ=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C5
+PeerKey=KAS-ECC-CDH_B-571_C5-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0763c0d659a7c080912005a2afd60ce57e610619b388ef3d5dd3c9386ab12069c6ef3a8e72eb741cba2da5c6f9267f6c09fada6459690ed4e432445d6f0f72dbcb059c87df36f665
+
+PrivateKey=KAS-ECC-CDH_B-571_C6
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAotDGetwVM/2OCgg
+xS+cMy6uZw0fB8/I8UcukmD15Ho4V2gBbNIAZwDKe9xdHVZ9kkYK98KkJd0NeK7u
+PRX7KNcRZ+ZIa4HEoYGVA4GSAAQFsbEUzvE6pd8wbOdBl9aA+bjJ2PZ1OgnbiEZq
+a7BOrx64c4NgItdQT0X66FqOSlQX7dfOOg5eueeSZIhO14NXez/FLYJfC1cBjjIm
+42tLM2eZxGhLulBemE3IgZFm8XzrhA42ElsoOoyGNd3353BAbZhW2Cs3z/H7zF0/
+XPS1XspB7hMfIep7yxnOBfZWQkU=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C6-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQFsbEUzvE6pd8wbOdBl9aA+bjJ2PZ1
+OgnbiEZqa7BOrx64c4NgItdQT0X66FqOSlQX7dfOOg5eueeSZIhO14NXez/FLYJf
+C1cBjjIm42tLM2eZxGhLulBemE3IgZFm8XzrhA42ElsoOoyGNd3353BAbZhW2Cs3
+z/H7zF0/XPS1XspB7hMfIep7yxnOBfZWQkU=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C6:KAS-ECC-CDH_B-571_C6-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C6-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQFpSzr9oEDyrAmbPLGicSPCAVJ//xw
+25gJwqRvkItyib5ZcynznuHkzKOYZk/6m9zwEpP0NZPRiOEkEdV+VZs/ajDpVUhp
+8EkBThNxZfsNUw6GU9fLKoRhjdOvz6PwhWAXkUKq6XJ5DOdGov1EadQVWHRDeMZA
+rnOkibt/gc3KaxuxZ8eUwm1iOKDSVq/DuiE=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C6
+PeerKey=KAS-ECC-CDH_B-571_C6-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0428413f2d2aad4d5288885c2edc8b976321ae1dd4fc6b41275fb88b8c5e7776165effce79025163538a0e83c919220a407ead6cefd616b4b05294488c2ef5d30ab8caa55ccbd1b1
+
+PrivateKey=KAS-ECC-CDH_B-571_C7
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAgEV0X5B4TF4tCoA
+TAHV5O8cdiQQScfTG/DqhdbgcKLiuSCA5h3lRvzL1NmRI2uzYO8/IG7hbYhDoN3I
+A0Y2ZKjM3C2HoQJ3oYGVA4GSAAQGyKw0NkrK4148QXFgMz5IZBho/MoEwNV3vgb1
+irClX9fbd5/nN3edoz0An1e1utSXAurPV1rLryffgzBwzYk6eSR3DJLv86AGG4Ll
+RdQcYv7waLNM2/ATlhFdKhQX+XGUg9JphrbVL49t4Gg3eV9tndfNCVdBEUMYxuim
+IGs97u8BTw5EsNxmhOEA5Kw2FlA=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C7-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGyKw0NkrK4148QXFgMz5IZBho/MoE
+wNV3vgb1irClX9fbd5/nN3edoz0An1e1utSXAurPV1rLryffgzBwzYk6eSR3DJLv
+86AGG4LlRdQcYv7waLNM2/ATlhFdKhQX+XGUg9JphrbVL49t4Gg3eV9tndfNCVdB
+EUMYxuimIGs97u8BTw5EsNxmhOEA5Kw2FlA=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C7:KAS-ECC-CDH_B-571_C7-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C7-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQCbi8e5k55WOkCVHp9sKHhSGbz0sAS
+fCu5sJ7iMtPZUY7kSuj1u0M6CIBp+jhs1ciQJxG3YqwNo6ejQgRyxH6FD5iN1gpj
+bX0Gd/9RAFLU9GCEn7jvDU81Gc0jjk4caItzbPbjdZVQ0TSh5so8tHnWi03F0Luh
+ruF4vW/hXsGW+x9ifYcHk5T294VOBTIo3uU=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C7
+PeerKey=KAS-ECC-CDH_B-571_C7-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=031bd2a84369e93dfa00581446d52762100d985cc7bb91c4fa8be7472e2e8e9781c52b19a54330442441bacae23f4bdc76486eb475d51f26aafbfb272a5ab5db184a4d3c3006e5d1
+
+PrivateKey=KAS-ECC-CDH_B-571_C8
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAIR7VF70lhVnHwi+
+c6SRRwYxhEkzQBEepNzhPC+SHwe/rP/IRB9MfJ0EefV/OhP0wzxj7UfDpD+y8G0G
+qXgOXAs6wwQQrcSRoYGVA4GSAAQGmU3cWuLFtvRdwytxDxpJORpH86D4wteEZVL+
+SH7wHMoEMRVbtUUzsGeinoNnNzr5XWp/C/mNhptwj0j5XxuIoVMP4iVH6X4E9iiN
+TXBPM6iYAx59AEb78eNKcsivGQ9NMxYzQ8iXugwNivioYjahw7ZVuXncRSLTPWam
+ZbO2UBVw8HYyKvCtK7qqBOoumV0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C8-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGmU3cWuLFtvRdwytxDxpJORpH86D4
+wteEZVL+SH7wHMoEMRVbtUUzsGeinoNnNzr5XWp/C/mNhptwj0j5XxuIoVMP4iVH
+6X4E9iiNTXBPM6iYAx59AEb78eNKcsivGQ9NMxYzQ8iXugwNivioYjahw7ZVuXnc
+RSLTPWamZbO2UBVw8HYyKvCtK7qqBOoumV0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C8:KAS-ECC-CDH_B-571_C8-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C8-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQCPuT57CTe4gOs+2WGMTE8etQ5TEfx
+eU0ItZn/wV8OXaspEdl+Aw3ffLS7rfilvOBcNTWPvQz5XT1cf/PNjua1TjedjQEj
+k5sGBr4j58V0bb04QE/WB/t/J47iSdyOJ0DPG7mxwHsc9+ClCkMlZ9GGl5moAxIl
+ENtDeYGiqhJuuarzx74FqA+sFJXhxAyhwQY=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C8
+PeerKey=KAS-ECC-CDH_B-571_C8-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=04df20154fa49a1d6e04dc2ba6e55a7f2ae575de5e2c6e4091a4d2c36aa93ca9699b890f0ee4df53aa75d0d9babad68605bc027ec67c187a6826aac0f4bc596baae788b376110216
+
+PrivateKey=KAS-ECC-CDH_B-571_C9
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIA0wkWDArQ4V/Eq2L
+2ah1I3ZBoh4hyjz5oJVtPP7e2WpeH1M9gntSj7tYbak+77tm0HeLGbGn+28Xu/nn
+m5rO/N17lgXniY8moYGVA4GSAAQDLTp6QJnwif6pGJIR9zZvLtxKv7MWxcBZSNje
+V/ygI7+2oRsQLqQSC6YhksDfYQvY0vY/xXcn9Ka2QKv40pn6xWxMeviDSeoE5jmf
+HO0madOlUG016ivr/M8M7IS8lzg6rcO0g0f2KWJuYJb4kENeWTNnUEj9zvze3j7W
+FuZWDULp4XxUkuMLwt5GicBZLss=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C9-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQDLTp6QJnwif6pGJIR9zZvLtxKv7MW
+xcBZSNjeV/ygI7+2oRsQLqQSC6YhksDfYQvY0vY/xXcn9Ka2QKv40pn6xWxMeviD
+SeoE5jmfHO0madOlUG016ivr/M8M7IS8lzg6rcO0g0f2KWJuYJb4kENeWTNnUEj9
+zvze3j7WFuZWDULp4XxUkuMLwt5GicBZLss=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C9:KAS-ECC-CDH_B-571_C9-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C9-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQA1KCxHBc5vtCU5y16aSODaDbZIVdG
+xyzGgARaNtga314lOU8mmiraHZQ568M7uTHW+llaJSYcJEoeF7BG+xD7VLsxIojP
+Lo0HUgT1DTKrimq7/5gtH+NyuMVBW7W3JrNGqk8IvjL4yigsHvbhUkIzYNl7cooH
+Tms887kScYsWks2YMBl0GiVBgkI0vcjDI/k=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C9
+PeerKey=KAS-ECC-CDH_B-571_C9-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=037a380f525590582658e2dd272a32de67fc0cf5390b37f4d33c1359f075d4461ea38a55027317892a3d1d22f5ea333ad437667d2f3eb8781c39504036ae33e4b0a26b6894722f0b
+
+PrivateKey=KAS-ECC-CDH_B-571_C10
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAS23haA8Jr46bppY
+LlwyqJVwrUMItxPOVHHqGT3sHzLWi0/N+xYA/bHstnaeJqDgV4Etu/DtSVWSZl5r
+jpqXN4owtcZg+63BoYGVA4GSAAQH7ffuDsd/Wmw8nsTtj9PLgUo0LpzGRwtUeB7W
+wUHiEVyG29e6J5k+t+vteji+SI+W/d+pgvNpGqHCppf3cGv/PRrdc5YGYZQHs4JL
+f3smb6Qv5Tatwqx5udHltAjnIXs6md3rmS8xI/8tFod00wCoGKMmkuJlr8b29XjZ
+vTEhEytZeYQfei0GDolIkB1lfBw=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C10-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQH7ffuDsd/Wmw8nsTtj9PLgUo0LpzG
+RwtUeB7WwUHiEVyG29e6J5k+t+vteji+SI+W/d+pgvNpGqHCppf3cGv/PRrdc5YG
+YZQHs4JLf3smb6Qv5Tatwqx5udHltAjnIXs6md3rmS8xI/8tFod00wCoGKMmkuJl
+r8b29XjZvTEhEytZeYQfei0GDolIkB1lfBw=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C10:KAS-ECC-CDH_B-571_C10-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C10-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQDu4QDK3//zieszzVLid3fZGzctWY0
+3w+FIKdzD4q+sF+ZM9ikNS0cd2fMP5uAzv/N0Ms6l7WSg/0KZ03E/SQDM/AgyCtI
+BMUHRJkzasOoBUMHiZAnaCUgJrUm7OVKwo6MyHjxi6+fq0K6TONOSWiqwe5qC7Fc
+mnCYgqU3KvVuoLNoFzhfu/6sS5BgaeU/v7o=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C10
+PeerKey=KAS-ECC-CDH_B-571_C10-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0420de313bddce87d07321e3f0af404d9d13e5369b79506e807178711153c9b1837cd055562eff3aadfc5954a221eeebb1bec1696d3df1cccfb8b61172a50d83cee95f4140ba070b
+
+PrivateKey=KAS-ECC-CDH_B-571_C11
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAgJgana2oT1uKSgL
+wWE+EVAldwskX1Vh1Yg+E14VnMQ3sck1Wy7uKzur7yKf5UWqsrzKFV6JcklfGXS9
+sewOYMTmx5xI8mpGoYGVA4GSAAQG5026TgcC8YbTNNPEniV44e36xWRkXdqMSliB
+WPjXo+9jJDZTwNUHQnc0+0zIet9KNr1avKH5ILm9bjv6UckW1XEIhFlOlIUFuSFH
+ottIo4MMz6KJUaK36OuEMTuZsKmQMceDTGM/hlovmESVJSiuXe4CQoqCTN+34gko
+/8U0IN846tC0JA0GWdWtsf8uLcs=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C11-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQG5026TgcC8YbTNNPEniV44e36xWRk
+XdqMSliBWPjXo+9jJDZTwNUHQnc0+0zIet9KNr1avKH5ILm9bjv6UckW1XEIhFlO
+lIUFuSFHottIo4MMz6KJUaK36OuEMTuZsKmQMceDTGM/hlovmESVJSiuXe4CQoqC
+TN+34gko/8U0IN846tC0JA0GWdWtsf8uLcs=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C11:KAS-ECC-CDH_B-571_C11-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C11-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGVWpMyYRmeUqT0DOIU2d296SzNEw9
+xOuWCkpkWPx4ac1ORbLxQMRop9TruoTJSCM3oqitqsiKmmKdoD3SR1JmQrCrcft6
+jHAFS5fZUrGfdChW2s9OUN8MMQO68lP03mWj2crOY/6CkG0sjoozEvtTXgD5tcpp
++H28f6P32H/gJFNmBKr+RkBZPMz+9vrAKKY=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C11
+PeerKey=KAS-ECC-CDH_B-571_C11-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=0606228f5a05077aeefbefac23c0d5bac7a6062bfc2b02ce8bba6698ea96b456b1f0d32c6e05dbb9be61a83090428eedea18c74f41238edede9e3a12e28722d2f314613c2e84d6db
+
+PrivateKey=KAS-ECC-CDH_B-571_C12
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAEhng0isM7kvLFln
+cQPqQJlGtVk9EF/EmDNRxO3pKcS5O/xpWHZVXjrOQXuCrAW4Mmdqwj4pVaCe5kog
+pfmOYkmfQ7p/f8jhoYGVA4GSAAQDHdSAjSs0G4iB9eUKLczjjfg5AJ+SGFl439mm
+DNruAFzbqCZVZHc21AevuQxnzdsTuisBYY9F6KJ0MX4C93D4Dvh7u8GxEFYFCgZx
+ycDOV6SU5pEfE3bPH8M5OIW6jCb23cu1Nhh2hgo1r8H0Vg8pcMMNs/HIF9vIrysC
+Xa7TqdoS0vrp1xTOrYBEXmoKCBM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C12-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQDHdSAjSs0G4iB9eUKLczjjfg5AJ+S
+GFl439mmDNruAFzbqCZVZHc21AevuQxnzdsTuisBYY9F6KJ0MX4C93D4Dvh7u8Gx
+EFYFCgZxycDOV6SU5pEfE3bPH8M5OIW6jCb23cu1Nhh2hgo1r8H0Vg8pcMMNs/HI
+F9vIrysCXa7TqdoS0vrp1xTOrYBEXmoKCBM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C12:KAS-ECC-CDH_B-571_C12-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C12-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQBAFGCsCmkhSju9f/QIhrYcIWrrGpy
+cFIDo8Fomru8DhKSel6Ds1Khutl3BhAfRKECLMwNVSLcXRyhQz3gOiuh34ZIdfUi
+vmEBiwKpjws+TM9EqWk5ogg6sfKgTa/Vvc7jz/Q4uwi/8SBDqhksX8804TtcKXQs
+XYZLnKxGvqbpbfKxvkSTrPlQIk1xc3+ZBlg=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C12
+PeerKey=KAS-ECC-CDH_B-571_C12-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=052669336019db5eddef5eab2336abeb60bbc7295e4bb663ab43e373fb6d888d7433ec89a487a91d4a59c289a9509ddd1bab33cd02a7bf37aaad78dbedf0b4ae5f2f35d15cb4e628
+
+PrivateKey=KAS-ECC-CDH_B-571_C13
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIABe6ty14j4t4ub/E
+kShjxaSJIv5p6KTPXm6Rdj79VHehzUOd7dCv6lBOOzr2gj6jCJwDdO2a7iSohRbI
+zzr6vplbm5Z187WroYGVA4GSAAQBYcFLvITkLsdneow3cAZezR8PROrIJCpxWmGX
+Hn5P//eP9Xob8blcv8LtlX0RlfnqUICXFcJDnHVD5XNSATVCbUdTW4v8hTMBJTYz
+0CJRRk7cxT7Z6KntkykyDvXurzXWTFm5c1yW4H8aYuwXvO5PBM2ahaPrUEqvN7s4
+jGx9CNkKoLaFVrXAaOy/ClmERg0=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C13-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQBYcFLvITkLsdneow3cAZezR8PROrI
+JCpxWmGXHn5P//eP9Xob8blcv8LtlX0RlfnqUICXFcJDnHVD5XNSATVCbUdTW4v8
+hTMBJTYz0CJRRk7cxT7Z6KntkykyDvXurzXWTFm5c1yW4H8aYuwXvO5PBM2ahaPr
+UEqvN7s4jGx9CNkKoLaFVrXAaOy/ClmERg0=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C13:KAS-ECC-CDH_B-571_C13-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C13-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQH+rTlkyjHAPdGSb2Qp9Uf8olY/nIN
+qqsyjPybACqnBs6zmTTbnM+B3uyVaJzox3a0/GVCqCNYzFHrvG2OUyLLP6bkaV4X
+D8EFrNRc/6Kd2zTuQudBACZ5jjeo0anOn5KU2lGYFktpAQxoxTKBzL/EB9FBCX2h
+N+eEnyKP3BoHqimL4myncfR6xP6ycj1aZmY=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C13
+PeerKey=KAS-ECC-CDH_B-571_C13-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=062de5aa98b440c6cb7a1428f6b5e47452b30454eec4d651982b531121febbd5a3833b180017f7ddb5ce38d7bb1c842de1a8a8fc7fc981e24733b7662813fd010a4e757ca4ea5c28
+
+PrivateKey=KAS-ECC-CDH_B-571_C14
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAqstQwJ7CPir+jWY
+7wFEOZpgtgN7F6OuQT1CLvohZ+nqTxnX7KmNhcZ8H+hfvLwfErr6MKhdvfVCRmiJ
+MV8VMt78XRgVCfAIoYGVA4GSAAQDKMDWf9VS6hDlvfe4fVC/TcujTcpWmuuGnFx9
+x9gyzjD+7TLiWnI3k/l8VX4vl4xeE0nmm3PvmRYAH/sNbNssY0PjRTg4bm4B0VG0
+btAEJjzZpcDUaoQNAyImMfkv+SgOlaNXRs28r9n+1oEcdhS51Qqigo3HonWznT1B
+ijSd0eK3MhH03po0tC/KEbl2Dso=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C14-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQDKMDWf9VS6hDlvfe4fVC/TcujTcpW
+muuGnFx9x9gyzjD+7TLiWnI3k/l8VX4vl4xeE0nmm3PvmRYAH/sNbNssY0PjRTg4
+bm4B0VG0btAEJjzZpcDUaoQNAyImMfkv+SgOlaNXRs28r9n+1oEcdhS51Qqigo3H
+onWznT1BijSd0eK3MhH03po0tC/KEbl2Dso=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C14:KAS-ECC-CDH_B-571_C14-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C14-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQHJnYwKtGHMbdiArxRQp6/fsz2Ml9O
+CEwvkuMojtKQSIueNnIOKdqi2xmTp9F86O+djM7GHeikBxduJnTCXVe/8sRlljWL
+NgUDwAItUyKQkeFK8PdFDeyhy124IecVkGCP4Jhtc+iMkV5e6N/ryJVZE9kWT5kv
+VjlKZi7xHIIU6K2oXfGxewuXQUzdZi0Yi10=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C14
+PeerKey=KAS-ECC-CDH_B-571_C14-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=07c7eb4892816cc3388ebcdfb412984e05910c112dd15b8e5481719401701aceba22fcf35aab0c3b040096161011f6177097c505395d9d6d8a713f6a5100fb476adbe7b9cdf4b68b
+
+PrivateKey=KAS-ECC-CDH_B-571_C15
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAEnG5MBaGXskr9Jw
+ckP/v9VbAIj9M9h9rk0hBI918rhiVjB1JB0vNv3Q6UBatCqlXL8gldq8Pa7frp3r
+kiIgeD6Fkc/WdgCxoYGVA4GSAAQAH+KaTC3QALvtEpEhuI7btcObNAA/FwrBn6mo
+XF/lh6q4ITYfSWNEDyWstJdYgQVS8Gtxmp60O3IOm3rW751BJI1fM1+ZUVoBSZ25
+WAjHGdJOsFxjPbiwXPlpygv2VkNbH98bCSgpD2pr+ICtuf1TyG7Hbg9izonL60wm
+b2Sodtd4IxoAMMOKoA1mxr1oB4U=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C15-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQAH+KaTC3QALvtEpEhuI7btcObNAA/
+FwrBn6moXF/lh6q4ITYfSWNEDyWstJdYgQVS8Gtxmp60O3IOm3rW751BJI1fM1+Z
+UVoBSZ25WAjHGdJOsFxjPbiwXPlpygv2VkNbH98bCSgpD2pr+ICtuf1TyG7Hbg9i
+zonL60wmb2Sodtd4IxoAMMOKoA1mxr1oB4U=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C15:KAS-ECC-CDH_B-571_C15-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C15-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGzXkx/PGTX4HzAUee2a0Mb5oFvs9O
+Vzov9Am6/EQuwZX34/39COWBYdTg/Tf2KpaUIbGc1I/oSKXX90uBN6fHJqnL03os
+87QEtbLNg7J4lXUcNNOsW5YKEz7BiwOcLhKNNEHbT3bot1BkCUYZsSLl+y8cJ5ZV
+mtlTxxHjMNx79V7fKfCVyuRVV7fI1YQ9ib0=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C15
+PeerKey=KAS-ECC-CDH_B-571_C15-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=05c638349000ec30881cd190c067e7f12b6b42d5842a8285a8ff0dc7e9c9eaf483309e48314fdc2ce7f9da6a468e549c8e70a50b68d07aee29708a98172209e5cd2e8c09cb66d982
+
+PrivateKey=KAS-ECC-CDH_B-571_C16
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAYazHOSQx/KPJ5MH
+WkrmRayznnH/6UTuYr+CWH8cPL4ojOYCTY0DXxB9mk+u1Xp7Ie4dbnEpoJgATyLM
+1SdAwDSm3ze1PQcyoYGVA4GSAAQGsV8ahZ49gJJGEbIMG5Tf9r0FdP74GTfx5U0U
+jS0x+MIbDqnOAxyUVXBvCFpp/UkkGFWMfemq3CyamW5+0f7aMpx9dgm7ayIDKRBU
+TLE24sKaozVyqmw0caUuvKayKL7nSfqf/ikpakpbaqDG3J8JUhbnsVE9gcugB5Sj
+9Vj3ShtUHHOyMI9PjnQCi1wrzfM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C16-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGsV8ahZ49gJJGEbIMG5Tf9r0FdP74
+GTfx5U0UjS0x+MIbDqnOAxyUVXBvCFpp/UkkGFWMfemq3CyamW5+0f7aMpx9dgm7
+ayIDKRBUTLE24sKaozVyqmw0caUuvKayKL7nSfqf/ikpakpbaqDG3J8JUhbnsVE9
+gcugB5Sj9Vj3ShtUHHOyMI9PjnQCi1wrzfM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C16:KAS-ECC-CDH_B-571_C16-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C16-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQCmEtlMHTDaiWa2VbVVWUSwscx+lDy
+AF0ASanZd95cALegVMlgzdcHiWMhSQvkM71e/9RMVk6qLVAhF1BQxb/BY82x6B3x
+M1oBp4bSkJizNPXBxK6GpBvydcxnh9pyBpFlV6T0MxkhQQNFZ+BB1V15SncHx6ry
+iELVyPWQN1pDZWkYqoDlWwKFNHzOj/4fFeg=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C16
+PeerKey=KAS-ECC-CDH_B-571_C16-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=007a40a59b6632156a43158565a4eeaf80618e501c5ac5afdab4ce3cb76ac99a0bcd17e9eec549373ace8c96aac78e2af6600483a2c49ec81298a083d5237118de96a953999beb26
+
+PrivateKey=KAS-ECC-CDH_B-571_C17
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIA0H46GGC3k/D9DhX
+JQqSmkGZTTMdoVTAJJ+g0cJqbeDoNfoIqMxSTj2sKGOD+QvS9NLHUULx04EI2cBi
+FDyObtu9oK+Hp2rVoYGVA4GSAAQCxcXrcydAJnJXPDe0kokDQ6tCK1G8ZbYAdm7B
+0HkI/wO8/edpTYMrzeUpRjOd8Kq0B0rgeon4IfWhEw0rc9sMQjrnoCOuLBgEdu09
+vZNtHDaYekNRLI8FYuMWEi0Fp+3U5CSJhMEfbrhSFdWqoCYqlfIGZsnb9FJIrhd9
+Lf/6OmqVBTMpi1w/Shti2h6vzVE=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C17-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQCxcXrcydAJnJXPDe0kokDQ6tCK1G8
+ZbYAdm7B0HkI/wO8/edpTYMrzeUpRjOd8Kq0B0rgeon4IfWhEw0rc9sMQjrnoCOu
+LBgEdu09vZNtHDaYekNRLI8FYuMWEi0Fp+3U5CSJhMEfbrhSFdWqoCYqlfIGZsnb
+9FJIrhd9Lf/6OmqVBTMpi1w/Shti2h6vzVE=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C17:KAS-ECC-CDH_B-571_C17-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C17-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQBqGguCezNGGjaICkWpWHuhRPA1zRw
+zTQa7nntk1VqOm58eyAwLsdKDFFwqON9eKm10N45AOsqZjpyR895Q/04HZWzqv0V
+YWcFL+zGj3aV1OQaCAxHZQ0gKHTaFjoXSOVQNzlY4xvQquUgmW0w84RzD0hU9eVO
+aMwklYrcUuKkxAc1ZRTz6nFmBW3Gfk0Rj6g=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C17
+PeerKey=KAS-ECC-CDH_B-571_C17-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=021fd2726973405fc30d2a1f2115907cbd0de90bb6bcb0496452e389b1b10ccf38e2400617040cf0dbb188f345337678b0ad8603dcfe926582d4321f384daec0943e2cd267f48343
+
+PrivateKey=KAS-ECC-CDH_B-571_C18
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAgenOC2KIlcSJuDA
+bCaB0JvKGbXbfnu/wTrCCDid+BaNd2FeMMqGEDk25T3ZrwHN/iT1COxgk5l3XOhM
+hon41flvZS4BTg3ooYGVA4GSAAQEYI3AUSvFXHNM1WKsWCX3yji3k/js6bmBzBxA
+Mt3YA5Fk0MZGtCsv1FO1odOnSuI8MsfVhAB948004zEhuQ+rOtpmIbOsl4UGqp/7
+/WXFCTcIRnB2dKxyPawkpvM6Hgu834skujLPe97I/ckjO3V7wHPWTe30hMb6Ae8o
+6HT7DTT1iw4ysYZFwwvctRbuOEE=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C18-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQEYI3AUSvFXHNM1WKsWCX3yji3k/js
+6bmBzBxAMt3YA5Fk0MZGtCsv1FO1odOnSuI8MsfVhAB948004zEhuQ+rOtpmIbOs
+l4UGqp/7/WXFCTcIRnB2dKxyPawkpvM6Hgu834skujLPe97I/ckjO3V7wHPWTe30
+hMb6Ae8o6HT7DTT1iw4ysYZFwwvctRbuOEE=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C18:KAS-ECC-CDH_B-571_C18-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C18-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQCza8TmgzaKADWESj/5NcyOzSg/PSM
+lABHn/TIKRy/RvFsQeRAmq7fFLxgpkKy17qs3o4AUd2K4Bv1rS5uZJDHfNQGqZnF
+ZeYHjt0p22o7h6EVBbV8VD/7dGpbQPuD1yBhgPOun8siLFQRp3R2Zgx7MRtkYxCQ
+WImpWg8v3DXTD8YcxVYKKRQjLWKtNjhrkXk=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C18
+PeerKey=KAS-ECC-CDH_B-571_C18-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=07a47bdc7d54ecd391672f131b3214d0efc4d40195db1ec993a62fe9da875efff5403bd708fa491a01a94f4bddc7d516baffff9fbdd213ca1a4905f9aa679d65da25c0f1fd2afb0a
+
+PrivateKey=KAS-ECC-CDH_B-571_C19
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAGuo8SzG4OeN+Mxi
+mISKdAAl5yxi0JnpJYSsdvWVrB/HJMsGqFoH8NRED6893qLyZfIBXdBZoWoDopkV
+uHMdYEUSzu8iuEHzoYGVA4GSAAQGNvQ16AYAZmEIc3MAdzqO1v+o6/gwfIH/X0Q1
+PpG60IYzG4/v8/HNuG4GG95fccX7k48RfiImqX0rZrCY6f9SUYLIFucCxqkBwb2K
++uapQQj8LHVdXeP6Kks0cfwqXN9K3aaFKb8YD/KNsVSrQxEkezkuk6M1u+h5Zgi7
+1gE/Q83MhG7CImdCPDz9os6KPZY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C19-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQGNvQ16AYAZmEIc3MAdzqO1v+o6/gw
+fIH/X0Q1PpG60IYzG4/v8/HNuG4GG95fccX7k48RfiImqX0rZrCY6f9SUYLIFucC
+xqkBwb2K+uapQQj8LHVdXeP6Kks0cfwqXN9K3aaFKb8YD/KNsVSrQxEkezkuk6M1
+u+h5Zgi71gE/Q83MhG7CImdCPDz9os6KPZY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C19:KAS-ECC-CDH_B-571_C19-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C19-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQABRUS5KDbxTXJe+EP+nQldYOCiDBA
+RmYB1TkbyzWCwRUlKTJJ8kSXzIByFrNMksHgdXgcg5HD9tPRT4ih1Q6p/HX/jVHM
++TMDnaRsrIZqs0dhesWotPFlcDTjuN22a8QnPi4c4BZB7OY2l53oskktxp6IU3w2
+scOtDTUif4Z+Q9+ciRfc6fjB7zujy1youlI=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C19
+PeerKey=KAS-ECC-CDH_B-571_C19-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=07326196a7decc92c81ae5a0779c9a42f53d94cfa4c3a13f19dbb554138e0e864eee6bc93e39214e2f74705a4b172aab510444c93b5b3e62517bbb7279337102db1c61de349d9747
+
+PrivateKey=KAS-ECC-CDH_B-571_C20
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAQcW8ud08n9C3j9s
+lpTY7KIXmCMJHSAvK6FikZOhyYcAaTOY/8gxV/fOSFjnU145kNIZvCSd4WRVjKyA
+fuFZd4oBLaGeUBK/oYGVA4GSAAQBULOt3hYqfwk1Daz0YEGf6GuZ3NlPRCg/uj5D
+0oG5O7VCgoEs5SJlqUg4lo1nqdbs3BtstkzxWUUhxHSepD2OTsBF5kX/I4sHtDMh
+thGLh8Rse1IojfXdHPfaYYPs5WM7TBfK42LYIRkffVeSOSgzmq332F9/Gd6UhnCe
+TS3e9CxVu012o8tQytKgmOrVlSo=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C20-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQBULOt3hYqfwk1Daz0YEGf6GuZ3NlP
+RCg/uj5D0oG5O7VCgoEs5SJlqUg4lo1nqdbs3BtstkzxWUUhxHSepD2OTsBF5kX/
+I4sHtDMhthGLh8Rse1IojfXdHPfaYYPs5WM7TBfK42LYIRkffVeSOSgzmq332F9/
+Gd6UhnCeTS3e9CxVu012o8tQytKgmOrVlSo=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C20:KAS-ECC-CDH_B-571_C20-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C20-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQATC3lZCQxvMbrgu/UNVVAqLXSOxKw
+330xrWlCW5RUmHdEPujdfAnPu+2G8TZlkx1LKiF1nDPhC0rPxjuh72GsqqGMlOPP
+yTMBdlt6N+uAbUMZbSkx2hoZU3QtPg2nzLZ+Df26XgNJFMzj7mOTv95AZw9AYZYG
+faiyk8aENZPdIhyJv5eWNna9BE6MirjnF60=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C20
+PeerKey=KAS-ECC-CDH_B-571_C20-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=059052d3e1c66efa4b7dd39e74299e886367d8fe49d7cab90e4f051bec10316438fb29b1290dfdaec169decd622a1010cf0a0275008814f4861b4d83ba78515a8768d978be430011
+
+PrivateKey=KAS-ECC-CDH_B-571_C21
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAdAQP8eUivEH5R9N
+LMA5K2aAgFnR8my6Bb5qOB9SLUy4VBN5NKzNHOozYJSOQG0xCMlDdp3HALTJzAzB
+2EurWKNeJ+skBHXwoYGVA4GSAAQBK9qN7T7X6LbTm1hVpY1yW2XjhXwqZ0mW6zk6
+Pj+RWVu/qHJTpW66wrEO1Aavnb/1OyImX761p2nKzitgtF2/l87tKwoE21ACZFSC
+fv4psySuPy1MDco6OpVJFRHFMWRaz1RbRe9qxKUMCdPSHyE8p2uW+xgkLsvgivaH
+Vd5OEHcXNHWCbqq+0mp1w2nNew8=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C21-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQBK9qN7T7X6LbTm1hVpY1yW2XjhXwq
+Z0mW6zk6Pj+RWVu/qHJTpW66wrEO1Aavnb/1OyImX761p2nKzitgtF2/l87tKwoE
+21ACZFSCfv4psySuPy1MDco6OpVJFRHFMWRaz1RbRe9qxKUMCdPSHyE8p2uW+xgk
+LsvgivaHVd5OEHcXNHWCbqq+0mp1w2nNew8=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C21:KAS-ECC-CDH_B-571_C21-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C21-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQCUDig5yrowW424+O1BO1zQe9wm5/s
+i+kBdzRtdsp7xxM9DsKArPBmAFxcwQtSqmVDNf6CCmYX5WDicJA/8cLMivE5jyTf
+4rADEHTKOTGAGmrLdltukUQXLtgdmZ7Z6DW9NVJrA+8qE/eDdgMrDrgUbCMTI2X8
+4Xany9ykSzWqN5hZ9oisJtxkyBSaQyLQg9E=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C21
+PeerKey=KAS-ECC-CDH_B-571_C21-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=03acfa4b3d1c2a6b62af23bdff6a215a416d4437ce6cc114d17dc4201195987a5d7301da11b913254702d7172e31d64e59b24deaa3270f20445e51dc484f7a2b8c3cbeb0bb9efb28
+
+PrivateKey=KAS-ECC-CDH_B-571_C22
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAy0vVX/ke40oD2gu
+JP2mJ916WOmwCCKjqvbregFPR2wXlBrcXiI4owgNcG8eFqRRt+kpQneZMMVnCkcy
+gcrHi4WNHxzJmwr/oYGVA4GSAAQEDzEw50scjrJl58TmkhQR65cUGCZ+jeqHnC6L
+Vjhk8jphsjQiyaBvoXiooVXj54RXWXWH8+NbefGdDC4YWu9G25WBnL4SexAByR0n
+wq5xE+sDvpjpTTrW3seR+sL+DSyMmLcTcbBYpkn6nD+jzNu6kyOVwnr/og2VrAQb
+yZeOP1MIKaLGTImxvM6sBoVPuQM=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C22-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQEDzEw50scjrJl58TmkhQR65cUGCZ+
+jeqHnC6LVjhk8jphsjQiyaBvoXiooVXj54RXWXWH8+NbefGdDC4YWu9G25WBnL4S
+exAByR0nwq5xE+sDvpjpTTrW3seR+sL+DSyMmLcTcbBYpkn6nD+jzNu6kyOVwnr/
+og2VrAQbyZeOP1MIKaLGTImxvM6sBoVPuQM=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C22:KAS-ECC-CDH_B-571_C22-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C22-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQBvf/9acLgj7A8hT7y69CI5o0jP9uV
+8LJG3nlV1hUHff0LD/AsZNAd55M1kJa4XgV7G3+fWSYtwnV/GCQ+GC4aC/6dy7An
+1osCGL59lWAp8TnBnS2jRnc7FtevyFirjctg1+SErs7DCcs/6pavOQNjfl2022eL
+tdubCxjYPPnrwbGq8k9DZ+xTNoTOnVZYLUM=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C22
+PeerKey=KAS-ECC-CDH_B-571_C22-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=067a58e5b3287bb9aa83ed9ca2d718cf7165fb574b6a446c3019849cd1584673d561b574bc8f68419437c5e8113e060847cad3b5ddc2f67ad75bc1e3f04554e63a5e4945cfcb65f5
+
+PrivateKey=KAS-ECC-CDH_B-571_C23
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIA+7ikZaovnDrOjEE
+ZAWcwMTELxNIerGgdiwsvjBOvmNQPmxwaKf0vBl/gfZbQpXBSyEPPLI3i2dAH89S
+vsAsE7YbbeFOG35boYGVA4GSAAQBd6zF/p9C9N4tJ6ub9vfg6s4wPCZv+LNGkIKr
+qTZ+ZkQL1rG9i24a7JK2XjWuqPAH8J1M1n7qXWAAc2yru53MyUPrtWVqBYYHFvGJ
+jiqMJzGd56JpjyHV3likuLjdArXkMxENOXf+6OxcCJ0XCvAqStPB+rRLDR4qO+up
+4HGc2L+DZEeNaGxONfdFfSTQIdY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C23-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQBd6zF/p9C9N4tJ6ub9vfg6s4wPCZv
++LNGkIKrqTZ+ZkQL1rG9i24a7JK2XjWuqPAH8J1M1n7qXWAAc2yru53MyUPrtWVq
+BYYHFvGJjiqMJzGd56JpjyHV3likuLjdArXkMxENOXf+6OxcCJ0XCvAqStPB+rRL
+DR4qO+up4HGc2L+DZEeNaGxONfdFfSTQIdY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C23:KAS-ECC-CDH_B-571_C23-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C23-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQAj8O0FPNBK0A/AcJTvSImFQIl3aqz
+TSAQifSdeeXcwuO2ghb6pm2sRFKcf+O6TSjYFbCII1lVcTu3chODUztdlCIbTtHh
+YrgCsyIB3icrGzK2pqWOoiQRxI9dxc8PlYcuZ1HtYizuzqIqVWl13mADhpriCvOb
+QrqIcXicgujzrTz2AG9DvEx9QQIDLEP495c=
+-----END PUBLIC KEY-----
+
+
+Availablein = default
+Derive=KAS-ECC-CDH_B-571_C23
+PeerKey=KAS-ECC-CDH_B-571_C23-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=06b272ca3330c0cdfbe60a1746bc0ddea6257536cdd8e976f2517eb541460a3f0e6ea7fec2b495e0f57712c8cac35e8a7d64d876c29851bbfeb6fe726d57e0be43dc76a584ef9c93
+
+PrivateKey=KAS-ECC-CDH_B-571_C24
+-----BEGIN PRIVATE KEY-----
+MIIBAAIBADAQBgcqhkjOPQIBBgUrgQQAJwSB6DCB5QIBAQRIAWmi2HWGlEwxc7+a
+InXjCAAD22SMLR4cVuLDfODXzZ+Bjqa3u6ND93TvDzNOpcEu8L51k9BO2UVFjXHh
+cRLrAdkEHSEzsTRzoYGVA4GSAAQFHlIXZCZa9/AbzZw/0CLf2y1KLFizsj0uVQMC
+xCqt1X0d9vwY5GW9mEQkle7SLz/WcAKEyfp4M7UWUUm44akeDgmaClcy1cIBmOfn
+0JTiB1KMWDhl0mKpGPwqOSYelcB9y9BE79OYGJkHivPrlzmCAaRlDw3Mvxn5Isjb
+w4Ob9r4AU/hFMccYQ6nmoQKrWNY=
+-----END PRIVATE KEY-----
+
+PublicKey=KAS-ECC-CDH_B-571_C24-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQFHlIXZCZa9/AbzZw/0CLf2y1KLFiz
+sj0uVQMCxCqt1X0d9vwY5GW9mEQkle7SLz/WcAKEyfp4M7UWUUm44akeDgmaClcy
+1cIBmOfn0JTiB1KMWDhl0mKpGPwqOSYelcB9y9BE79OYGJkHivPrlzmCAaRlDw3M
+vxn5Isjbw4Ob9r4AU/hFMccYQ6nmoQKrWNY=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = KAS-ECC-CDH_B-571_C24:KAS-ECC-CDH_B-571_C24-PUBLIC
+
+
+PublicKey=KAS-ECC-CDH_B-571_C24-Peer-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQFZagplNfm9T7ra/Z1I+5oD/t3ARhn
+PD4VwyAObI0fJsq68AwdpI5jdDFkl8ul8Z8XQg8mdjP0DlsGNieJv/Ea31ltWxz3
+aO8Bay1Nqsqca+2XayBk71Q1KliuNDZ4NaYhDhV4KRwd6NZ8ILw9b/piDIezCYor
+nzq7jSys1bLuK2g5nqxOj2XOvdZjAP0Em1s=
+-----END PUBLIC KEY-----
+
+
+Derive=KAS-ECC-CDH_B-571_C24
+PeerKey=KAS-ECC-CDH_B-571_C24-Peer-PUBLIC
+Ctrl=ecdh_cofactor_mode:1
+SharedSecret=02da266a269bdc8d8b2a0c6bb5762f102fc801c8d5394a9271539136bd81d4b69cfbb7525cd0a983fb7f7e9deec583b8f8e574c6184b2d79831ec770649e484dc006fa35b0bffd0b
diff --git a/test/recipes/30-test_evp_data/evppkey_kdf_hkdf.txt b/test/recipes/30-test_evp_data/evppkey_kdf_hkdf.txt
new file mode 100644
index 000000000000..1a0277594bc3
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_kdf_hkdf.txt
@@ -0,0 +1,195 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = HKDF tests (from RFC5869 test vectors) using PKEYKDF
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA256
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = hexsalt:000102030405060708090a0b0c
+Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9
+Output = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.md = md:SHA256
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = hexsalt:000102030405060708090a0b0c
+Output = 077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.md = md:SHA256
+Ctrl.IKM = hexkey:077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5
+Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9
+Output = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA256
+Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Output = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.md = md:SHA256
+Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+Output = 06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.md = md:SHA256
+Ctrl.IKM = hexkey:06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244
+Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Output = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA256
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.md = md:SHA256
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.md = md:SHA256
+Ctrl.IKM = hexkey:19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04
+Ctrl.info = info:
+Output = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = hexsalt:000102030405060708090a0b0c
+Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9
+Output = 085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = hexsalt:000102030405060708090a0b0c
+Output = 9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243
+Ctrl.info = hexinfo:f0f1f2f3f4f5f6f7f8f9
+Output = 085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Output = 0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+Ctrl.salt = hexsalt:606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+Output = 8adae09a2a307059478d309b26c4115a224cfaf6
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:8adae09a2a307059478d309b26c4115a224cfaf6
+Ctrl.info = hexinfo:b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+Output = 0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+Ctrl.salt = salt:
+Output = da8c8a73c7fa77288ec6f5e7c297786aa0d32d01
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:da8c8a73c7fa77288ec6f5e7c297786aa0d32d01
+Ctrl.info = info:
+Output = 0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXTRACT_ONLY
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Output = 2adccada18779e7c2077ad2eb19d3f3e731385dd
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXPAND_ONLY
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:2adccada18779e7c2077ad2eb19d3f3e731385dd
+Ctrl.info = info:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
+
+PKEYKDF = HKDF
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 00
+Result = KDF_DERIVE_ERROR
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA1
+Ctrl.salt = salt:
+Ctrl.info = info:
+Output = 00
+Result = KDF_DERIVE_ERROR
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.info = info:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
+
+PKEYKDF = HKDF
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
+
+PKEYKDF = HKDF
+Ctrl.mode = mode:EXTRACT_AND_EXPAND
+Ctrl.md = md:SHA1
+Ctrl.IKM = hexkey:0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+Ctrl.salt = salt:
+Output = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48
diff --git a/test/recipes/30-test_evp_data/evppkey_kdf_scrypt.txt b/test/recipes/30-test_evp_data/evppkey_kdf_scrypt.txt
new file mode 100644
index 000000000000..e61e5a14f1d5
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_kdf_scrypt.txt
@@ -0,0 +1,63 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+Title = id-scrypt tests (from draft-josefsson-id-scrypt-kdf-03 and others)
+
+PKEYKDF = scrypt
+Ctrl.pass = pass:
+Ctrl.salt = salt:
+Ctrl.N = N:16
+Ctrl.r = r:1
+Ctrl.p = p:1
+Output = 77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906
+
+PKEYKDF = scrypt
+Ctrl.pass = pass:password
+Ctrl.salt = salt:NaCl
+Ctrl.N = N:1024
+Ctrl.r = r:8
+Ctrl.p = p:16
+Output = fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640
+
+PKEYKDF = scrypt
+Ctrl.hexpass = hexpass:70617373776f7264
+Ctrl.salt = salt:NaCl
+Ctrl.N = N:1024
+Ctrl.r = r:8
+Ctrl.p = p:16
+Output = fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640
+
+PKEYKDF = scrypt
+Ctrl.pass = pass:password
+Ctrl.hexsalt = hexsalt:4e61436c
+Ctrl.N = N:1024
+Ctrl.r = r:8
+Ctrl.p = p:16
+Output = fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640
+
+PKEYKDF = scrypt
+Ctrl.pass = pass:pleaseletmein
+Ctrl.salt = salt:SodiumChloride
+Ctrl.N = N:16384
+Ctrl.r = r:8
+Ctrl.p = p:1
+Output = 7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887
+
+# Out of memory
+PKEYKDF = scrypt
+Ctrl.pass = pass:pleaseletmein
+Ctrl.salt = salt:SodiumChloride
+Ctrl.N = n:2097152
+Ctrl.r = r:8
+Ctrl.p = p:1
+Result = KDF_DERIVE_ERROR
diff --git a/test/recipes/30-test_evp_data/evppkey_kdf_tls1_prf.txt b/test/recipes/30-test_evp_data/evppkey_kdf_tls1_prf.txt
new file mode 100644
index 000000000000..17a8dab6f7d9
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_kdf_tls1_prf.txt
@@ -0,0 +1,71 @@
+#
+# Copyright 2001-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 are ignored.
+
+Title = TLS1 PRF tests (from NIST test vectors)
+
+PKEYKDF = TLS1-PRF
+Ctrl.md = md:MD5-SHA1
+Ctrl.Secret = hexsecret:bded7fa5c1699c010be23dd06ada3a48349f21e5f86263d512c0c5cc379f0e780ec55d9844b2f1db02a96453513568d0
+Ctrl.label = seed:master secret
+Ctrl.client_random = hexseed:e5acaf549cd25c22d964c0d930fa4b5261d2507fad84c33715b7b9a864020693
+Ctrl.server_random = hexseed:135e4d557fdf3aa6406d82975d5c606a9734c9334b42136e96990fbd5358cdb2
+Output = 2f6962dfbc744c4b2138bb6b3d33054c5ecc14f24851d9896395a44ab3964efc2090c5bf51a0891209f46c1e1e998f62
+
+PKEYKDF = TLS1-PRF
+Ctrl.md = md:MD5-SHA1
+Ctrl.Secret = hexsecret:2f6962dfbc744c4b2138bb6b3d33054c5ecc14f24851d9896395a44ab3964efc2090c5bf51a0891209f46c1e1e998f62
+Ctrl.label = seed:key expansion
+Ctrl.server_random = hexseed:67267e650eb32444119d222a368c191af3082888dc35afe8368e638c828874be
+Ctrl.client_random = hexseed:d58a7b1cd4fedaa232159df652ce188f9d997e061b9bf48e83b62990440931f6
+Output = 3088825988e77fce68d19f756e18e43eb7fe672433504feaf99b3c503d9091b164f166db301d70c9fc0870b4a94563907bee1a61fb786cb717576890bcc51cb9ead97e01d0a2fea99c953377b195205ff07b369589178796edc963fd80fdbe518a2fc1c35c18ae8d
+
+# Missing secret.
+PKEYKDF = TLS1-PRF
+Ctrl.md = md:MD5-SHA1
+Ctrl.Seed = hexseed:02
+Output = 03
+Result = KDF_DERIVE_ERROR
+
+# PKEYKDF variants.
+
+PKEYKDF = TLS1-PRF
+Ctrl.md = md:SHA256
+Ctrl.Secret = hexsecret:f8938ecc9edebc5030c0c6a441e213cd24e6f770a50dda07876f8d55da062bcadb386b411fd4fe4313a604fce6c17fbc
+Ctrl.label = seed:master secret
+Ctrl.client_random = hexseed:36c129d01a3200894b9179faac589d9835d58775f9b5ea3587cb8fd0364cae8c
+Ctrl.server_random = hexseed:f6c9575ed7ddd73e1f7d16eca115415812a43c2b747daaaae043abfb50053fce
+Output = 202c88c00f84a17a20027079604787461176455539e705be730890602c289a5001e34eeb3a043e5d52a65e66125188bf
+
+PKEYKDF = TLS1-PRF
+Ctrl.md = md:SHA256
+Ctrl.Secret = hexsecret:202c88c00f84a17a20027079604787461176455539e705be730890602c289a5001e34eeb3a043e5d52a65e66125188bf
+Ctrl.label = seed:key expansion
+Ctrl.server_random = hexseed:ae6c806f8ad4d80784549dff28a4b58fd837681a51d928c3e30ee5ff14f39868
+Ctrl.client_random = hexseed:62e1fd91f23f558a605f28478c58cf72637b89784d959df7e946d3f07bd1b616
+Output = d06139889fffac1e3a71865f504aa5d0d2a2e89506c6f2279b670c3e1b74f531016a2530c51a3a0f7e1d6590d0f0566b2f387f8d11fd4f731cdd572d2eae927f6f2f81410b25e6960be68985add6c38445ad9f8c64bf8068bf9a6679485d966f1ad6f68b43495b10a683755ea2b858d70ccac7ec8b053c6bd41ca299d4e51928
+
+# As above but use long name for KDF
+PKEYKDF = tls1-prf
+Ctrl.md = md:SHA256
+Ctrl.Secret = hexsecret:202c88c00f84a17a20027079604787461176455539e705be730890602c289a5001e34eeb3a043e5d52a65e66125188bf
+Ctrl.label = seed:key expansion
+Ctrl.server_random = hexseed:ae6c806f8ad4d80784549dff28a4b58fd837681a51d928c3e30ee5ff14f39868
+Ctrl.client_random = hexseed:62e1fd91f23f558a605f28478c58cf72637b89784d959df7e946d3f07bd1b616
+Output = d06139889fffac1e3a71865f504aa5d0d2a2e89506c6f2279b670c3e1b74f531016a2530c51a3a0f7e1d6590d0f0566b2f387f8d11fd4f731cdd572d2eae927f6f2f81410b25e6960be68985add6c38445ad9f8c64bf8068bf9a6679485d966f1ad6f68b43495b10a683755ea2b858d70ccac7ec8b053c6bd41ca299d4e51928
+
+# Missing digest.
+PKEYKDF = TLS1-PRF
+Ctrl.Secret = hexsecret:01
+Ctrl.Seed = hexseed:02
+Output = 03
+Result = KDF_DERIVE_ERROR
diff --git a/test/recipes/30-test_evp_data/evppkey_mismatch.txt b/test/recipes/30-test_evp_data/evppkey_mismatch.txt
new file mode 100644
index 000000000000..ebbd4d4b39d1
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_mismatch.txt
@@ -0,0 +1,85 @@
+#
+# Copyright 2001-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 are ignored.
+
+
+# Public / Private keys from other tests used for keypair testing.
+
+PrivateKey=Alice-25519
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VuBCIEIHcHbQpzGKV9PBbBclGyZkXfTC+H68CZKrF3+6UduSwq
+-----END PRIVATE KEY-----
+
+PrivateKey=Alice-448
+-----BEGIN PRIVATE KEY-----
+MEYCAQAwBQYDK2VvBDoEOJqPSSXRUZ9Xdc9GsEtYANTunui66LxVZdSYwo3Zybr1
+dKlBl0SJc5EAY4Km8SerHZrC2MClmHJr
+-----END PRIVATE KEY-----
+
+PublicKey=P-256-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELBUPQpznDyFsJSz14GLOH2Oc1dFl
+x/iUJAcsJxl9eLM7kg6VzbZk6ZDc8M/qDZTiqOavnQ5YBW5lMQSSW5/myQ==
+-----END PUBLIC KEY-----
+
+PublicKey=KAS-ECC-CDH_K-163_C0-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBx+LKHfWAn2cGt5CRPLeoSaS7yPVBcFe
+53YiHHK4SzR844PzgGe4nD6a
+-----END PUBLIC KEY-----
+
+PrivateKey = RSA-2048
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDNAIHqeyrh6gbV
+n3xz2f+5SglhXC5Lp8Y2zvCN01M+wxhVJbAVx2m5mnfWclv5w1Mqm25fZifV+4UW
+B2jT3anL01l0URcX3D0wnS/EfuQfl+Mq23+d2GShxHZ6Zm7NcbwarPXnUX9LOFlP
+6psF5C1a2pkSAIAT5FMWpNm7jtCGuI0odYusr5ItRqhotIXSOcm66w4rZFknEPQr
+LR6gpLSALAvsqzKPimiwBzvbVG/uqYCdKEmRKzkMFTK8finHZY+BdfrkbzQzL/h7
+yrPkBkm5hXeGnaDqcYNT8HInVIhpE2SHYNEivmduD8SD3SD/wxvalqMZZsmqLnWt
+A95H4cRPAgMBAAECggEAYCl6x5kbFnoG1rJHWLjL4gi+ubLZ7Jc4vYD5Ci41AF3X
+ziktnim6iFvTFv7x8gkTvArJDWsICLJBTYIQREHYYkozzgIzyPeApIs3Wv8C12cS
+IopwJITbP56+zM+77hcJ26GCgA2Unp5CFuC/81WDiPi9kNo3Oh2CdD7D+90UJ/0W
+glplejFpEuhpU2URfKL4RckJQF/KxV+JX8FdIDhsJu54yemQdQKaF4psHkzwwgDo
+qc+yfp0Vb4bmwq3CKxqEoc1cpbJ5CHXXlAfISzUjlcuBzD/tW7BDtp7eDAcgRVAC
+XO6MX0QBcLYSC7SOD3R7zY9SIRCFDfBDxCjf0YcFMQKBgQD2+WG0fLwDXTrt68fe
+hQqVa2Xs25z2B2QGPxWqSFU8WNly/mZ1BW413f3De/O58vYi7icTNyVoScm+8hdv
+6PfD+LuRujdN1TuvPeyBTSvewQwf3IjN0Wh28mse36PwlBl+301C/x+ylxEDuJjK
+hZxCcocIaoQqtBC7ac8tNa9r4wKBgQDUfnJKf/QQSLJwwlJKQQGHi3MVm7c9PbwY
+eyIOY1s1NPluJDoYTZP4YLa/u2txwe2aHh9FhYMCPDAelqaSwaCLU9DsnKkQEA2A
+RR47fcagG6xK7O+N95iEa8I1oIy7os9MBoBMwRIZ6VYIxxTj8UMNSR+tu6MqV1Gg
+T5d0WDTJpQKBgCHyRSu5uV39AoyRS/eZ8cp36JqV1Q08FtOE+EVfi9evnrPfo9WR
+2YQt7yNfdjCo5IwIj/ZkLhAXlFNakz4el2+oUJ/HKLLaDEoaCNf883q6rh/zABrK
+HcG7sF2d/7qhoJ9/se7zgjfZ68zHIrkzhDbd5xGREnmMJoCcGo3sQyBhAoGAH3UQ
+qmLC2N5KPFMoJ4H0HgLQ6LQCrnhDLkScSBEBYaEUA/AtAYgKjcyTgVLXlyGkcRpg
+esRHHr+WSBD5W+R6ReYEmeKfTJdzyDdzQE9gZjdyjC0DUbsDwybIu3OnIef6VEDq
+IXK7oUZfzDDcsNn4mTDoFaoff5cpqFfgDgM43VkCgYBNHw11b+d+AQmaZS9QqIt7
+aF3FvwCYHV0jdv0Mb+Kc1bY4c0R5MFpzrTwVmdOerjuuA1+9b+0Hwo3nBZM4eaBu
+SOamA2hu2OJWCl9q8fLCT69KqWDjghhvFe7c6aJJGucwaA3Uz3eLcPqoaCarMiNH
+fMkTd7GabVourqIZdgvu1Q==
+-----END PRIVATE KEY-----
+
+Title = Test keypair mismatches
+
+PrivPubKeyPair = Alice-25519:P-256-PUBLIC
+Result = KEYPAIR_TYPE_MISMATCH
+
+PrivPubKeyPair = Alice-448:P-256-PUBLIC
+Result = KEYPAIR_TYPE_MISMATCH
+
+PrivPubKeyPair = RSA-2048:P-256-PUBLIC
+Result = KEYPAIR_TYPE_MISMATCH
+
+PrivPubKeyPair = RSA-2048:KAS-ECC-CDH_K-163_C0-PUBLIC
+Result = KEYPAIR_TYPE_MISMATCH
+
+PrivPubKeyPair = Alice-25519:KAS-ECC-CDH_K-163_C0-PUBLIC
+Result = KEYPAIR_TYPE_MISMATCH
diff --git a/test/recipes/30-test_evp_data/evppkey_rsa.txt b/test/recipes/30-test_evp_data/evppkey_rsa.txt
new file mode 100644
index 000000000000..08485eeadabf
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_rsa.txt
@@ -0,0 +1,618 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+# The keyword Availablein must appear before the test name if needed.
+
+# Private keys used for PKEY operations.
+
+# Any Tests that have keys < 2048 bits OR sign with SHA1 are in this file.
+
+# RSA 2048 bit key.
+
+PrivateKey = RSA-2048
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDNAIHqeyrh6gbV
+n3xz2f+5SglhXC5Lp8Y2zvCN01M+wxhVJbAVx2m5mnfWclv5w1Mqm25fZifV+4UW
+B2jT3anL01l0URcX3D0wnS/EfuQfl+Mq23+d2GShxHZ6Zm7NcbwarPXnUX9LOFlP
+6psF5C1a2pkSAIAT5FMWpNm7jtCGuI0odYusr5ItRqhotIXSOcm66w4rZFknEPQr
+LR6gpLSALAvsqzKPimiwBzvbVG/uqYCdKEmRKzkMFTK8finHZY+BdfrkbzQzL/h7
+yrPkBkm5hXeGnaDqcYNT8HInVIhpE2SHYNEivmduD8SD3SD/wxvalqMZZsmqLnWt
+A95H4cRPAgMBAAECggEAYCl6x5kbFnoG1rJHWLjL4gi+ubLZ7Jc4vYD5Ci41AF3X
+ziktnim6iFvTFv7x8gkTvArJDWsICLJBTYIQREHYYkozzgIzyPeApIs3Wv8C12cS
+IopwJITbP56+zM+77hcJ26GCgA2Unp5CFuC/81WDiPi9kNo3Oh2CdD7D+90UJ/0W
+glplejFpEuhpU2URfKL4RckJQF/KxV+JX8FdIDhsJu54yemQdQKaF4psHkzwwgDo
+qc+yfp0Vb4bmwq3CKxqEoc1cpbJ5CHXXlAfISzUjlcuBzD/tW7BDtp7eDAcgRVAC
+XO6MX0QBcLYSC7SOD3R7zY9SIRCFDfBDxCjf0YcFMQKBgQD2+WG0fLwDXTrt68fe
+hQqVa2Xs25z2B2QGPxWqSFU8WNly/mZ1BW413f3De/O58vYi7icTNyVoScm+8hdv
+6PfD+LuRujdN1TuvPeyBTSvewQwf3IjN0Wh28mse36PwlBl+301C/x+ylxEDuJjK
+hZxCcocIaoQqtBC7ac8tNa9r4wKBgQDUfnJKf/QQSLJwwlJKQQGHi3MVm7c9PbwY
+eyIOY1s1NPluJDoYTZP4YLa/u2txwe2aHh9FhYMCPDAelqaSwaCLU9DsnKkQEA2A
+RR47fcagG6xK7O+N95iEa8I1oIy7os9MBoBMwRIZ6VYIxxTj8UMNSR+tu6MqV1Gg
+T5d0WDTJpQKBgCHyRSu5uV39AoyRS/eZ8cp36JqV1Q08FtOE+EVfi9evnrPfo9WR
+2YQt7yNfdjCo5IwIj/ZkLhAXlFNakz4el2+oUJ/HKLLaDEoaCNf883q6rh/zABrK
+HcG7sF2d/7qhoJ9/se7zgjfZ68zHIrkzhDbd5xGREnmMJoCcGo3sQyBhAoGAH3UQ
+qmLC2N5KPFMoJ4H0HgLQ6LQCrnhDLkScSBEBYaEUA/AtAYgKjcyTgVLXlyGkcRpg
+esRHHr+WSBD5W+R6ReYEmeKfTJdzyDdzQE9gZjdyjC0DUbsDwybIu3OnIef6VEDq
+IXK7oUZfzDDcsNn4mTDoFaoff5cpqFfgDgM43VkCgYBNHw11b+d+AQmaZS9QqIt7
+aF3FvwCYHV0jdv0Mb+Kc1bY4c0R5MFpzrTwVmdOerjuuA1+9b+0Hwo3nBZM4eaBu
+SOamA2hu2OJWCl9q8fLCT69KqWDjghhvFe7c6aJJGucwaA3Uz3eLcPqoaCarMiNH
+fMkTd7GabVourqIZdgvu1Q==
+-----END PRIVATE KEY-----
+
+# Corresponding public key
+
+PublicKey = RSA-2048-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzQCB6nsq4eoG1Z98c9n/
+uUoJYVwuS6fGNs7wjdNTPsMYVSWwFcdpuZp31nJb+cNTKptuX2Yn1fuFFgdo092p
+y9NZdFEXF9w9MJ0vxH7kH5fjKtt/ndhkocR2emZuzXG8Gqz151F/SzhZT+qbBeQt
+WtqZEgCAE+RTFqTZu47QhriNKHWLrK+SLUaoaLSF0jnJuusOK2RZJxD0Ky0eoKS0
+gCwL7Ksyj4posAc721Rv7qmAnShJkSs5DBUyvH4px2WPgXX65G80My/4e8qz5AZJ
+uYV3hp2g6nGDU/ByJ1SIaRNkh2DRIr5nbg/Eg90g/8Mb2pajGWbJqi51rQPeR+HE
+TwIDAQAB
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = RSA-2048:RSA-2048-PUBLIC
+
+Title = RSA tests
+
+Sign = RSA-2048
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
+
+# Digest too long
+Sign = RSA-2048
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF12345"
+Output = 00
+Result = KEYOP_ERROR
+
+# Digest too short
+Sign = RSA-2048
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF12345"
+Output = 00
+Result = KEYOP_ERROR
+
+VerifyRecover = RSA-2048
+Ctrl = digest:sha1
+Input = 49525db4d44c755e560cba980b1d85ea604b0e077fcadd4ba44072a3487bbddb835016200a7d8739cce2dc3223d9c20cbdd25059ab02277f1f21318efd18e21038ec89aa9d40680987129e8b41ba33bceb86518bdf47268b921cce2037acabca6575d832499538d6f40cdba0d40bd7f4d8ea6ca6e2eec87f294efc971407857f5d7db09f6a7b31e301f571c6d82a5e3d08d2bb3a36e673d28b910f5bec57f0fcc4d968fd7c94d0b9226dec17f5192ad8b42bcab6f26e1bea1fdc3b958199acb00f14ebcb2a352f3afcedd4c09000128a603bbeb9696dea13040445253972d46237a25c7845e3b464e6984c2348ea1f1210a9ff0b00d2d72b50db00c009bb39f9
+Result = KEYOP_ERROR
+
+# MD5/SHA-1 combination
+Verify = RSA-2048
+Ctrl = digest:MD5-SHA1
+Input = "0123456789ABCDEF0123456789ABCDEF0123"
+Output = 7b80e0d4d2a6b7f4b018ce164bc0be21a0604b1b05e91c6204372458b05a0e4dbf0b36b3f80dbf04b278ad1fcf7ff6d982d5ca5d98b13b68240d846d400b8db6675b1a5fcbe2256322c5f691378bc941785326030fa835d240e334e2a4d35b17c1149b59dbb6e6d53b44326ebfc371f754449d36bad3722c1878af1699bb0a00c28e37162f99aba550b7c333228a70c906e3701c519a460a14fac29ff164ca9413efd19b431b31a9ad2988662cdbda9cdcff85f294b4be2cf072caceb1d3f52642edafea2e1d1e495061f18b5b3a130d2242cec830e44d506590e5df69bb974879a35e6bdc1ad00e3e31b362f2f5cdeabd8a0dfddfdb66a7c43993a3e189b80d
+
+VerifyRecover = RSA-2048
+Ctrl = digest:MD5-SHA1
+Input = 7b80e0d4d2a6b7f4b018ce164bc0be21a0604b1b05e91c6204372458b05a0e4dbf0b36b3f80dbf04b278ad1fcf7ff6d982d5ca5d98b13b68240d846d400b8db6675b1a5fcbe2256322c5f691378bc941785326030fa835d240e334e2a4d35b17c1149b59dbb6e6d53b44326ebfc371f754449d36bad3722c1878af1699bb0a00c28e37162f99aba550b7c333228a70c906e3701c519a460a14fac29ff164ca9413efd19b431b31a9ad2988662cdbda9cdcff85f294b4be2cf072caceb1d3f52642edafea2e1d1e495061f18b5b3a130d2242cec830e44d506590e5df69bb974879a35e6bdc1ad00e3e31b362f2f5cdeabd8a0dfddfdb66a7c43993a3e189b80d
+Output = "0123456789ABCDEF0123456789ABCDEF0123"
+
+# MD5/SHA-1 combination, digest mismatch
+Verify = RSA-2048
+Ctrl = digest:MD5-SHA1
+Input = "000000000000000000000000000000000000"
+Output = 7b80e0d4d2a6b7f4b018ce164bc0be21a0604b1b05e91c6204372458b05a0e4dbf0b36b3f80dbf04b278ad1fcf7ff6d982d5ca5d98b13b68240d846d400b8db6675b1a5fcbe2256322c5f691378bc941785326030fa835d240e334e2a4d35b17c1149b59dbb6e6d53b44326ebfc371f754449d36bad3722c1878af1699bb0a00c28e37162f99aba550b7c333228a70c906e3701c519a460a14fac29ff164ca9413efd19b431b31a9ad2988662cdbda9cdcff85f294b4be2cf072caceb1d3f52642edafea2e1d1e495061f18b5b3a130d2242cec830e44d506590e5df69bb974879a35e6bdc1ad00e3e31b362f2f5cdeabd8a0dfddfdb66a7c43993a3e189b80d
+Result = VERIFY_ERROR
+
+# MD5/SHA-1 combination, wrong signature digest length
+Verify = RSA-2048
+Ctrl = digest:MD5-SHA1
+Input = "0123456789ABCDEF0123456789ABCDEF0123"
+Output = 6c13511f97ffb8137545fce551a43cf2b5b3dbdd5c3ceaaccd4620a6a373f3c38cc523d95bbdd810c852743b981bc4393c6b0cdfb0da5e77a8cc0108b05ff95e0f4dd7a0125b7390af1408dca6ddefac3b05b768de7b0c3df3c74e5f102f62743d67813beee1777036078da4cff5b29f49f01a6df3a2e709c37a83737108517687fe754d9ee908cb36c55e88f67c0b537108707347d16049f5dfac3d400ea367222d36627937a7f822f451c3d2c2dbc9e2202bffd3dc1b22213e17270a6b657619c6f44cbf66b077d548cfc9e1a114f8b853412470f2bf8d828f04d0d9f1aef260d216acb0911329fb5bdc48c2be3b198bf6f96e1c3fb116ad4430140d0640d4
+Result = VERIFY_ERROR
+
+VerifyRecover = RSA-2048
+Ctrl = digest:MD5-SHA1
+Input = 6c13511f97ffb8137545fce551a43cf2b5b3dbdd5c3ceaaccd4620a6a373f3c38cc523d95bbdd810c852743b981bc4393c6b0cdfb0da5e77a8cc0108b05ff95e0f4dd7a0125b7390af1408dca6ddefac3b05b768de7b0c3df3c74e5f102f62743d67813beee1777036078da4cff5b29f49f01a6df3a2e709c37a83737108517687fe754d9ee908cb36c55e88f67c0b537108707347d16049f5dfac3d400ea367222d36627937a7f822f451c3d2c2dbc9e2202bffd3dc1b22213e17270a6b657619c6f44cbf66b077d548cfc9e1a114f8b853412470f2bf8d828f04d0d9f1aef260d216acb0911329fb5bdc48c2be3b198bf6f96e1c3fb116ad4430140d0640d4
+Result = KEYOP_ERROR
+
+# MD5/SHA-1 combination, wrong input digest length
+Verify = RSA-2048
+Ctrl = digest:MD5-SHA1
+Input = "0123456789ABCDEF0123456789ABCDEF012"
+Output = 7b80e0d4d2a6b7f4b018ce164bc0be21a0604b1b05e91c6204372458b05a0e4dbf0b36b3f80dbf04b278ad1fcf7ff6d982d5ca5d98b13b68240d846d400b8db6675b1a5fcbe2256322c5f691378bc941785326030fa835d240e334e2a4d35b17c1149b59dbb6e6d53b44326ebfc371f754449d36bad3722c1878af1699bb0a00c28e37162f99aba550b7c333228a70c906e3701c519a460a14fac29ff164ca9413efd19b431b31a9ad2988662cdbda9cdcff85f294b4be2cf072caceb1d3f52642edafea2e1d1e495061f18b5b3a130d2242cec830e44d506590e5df69bb974879a35e6bdc1ad00e3e31b362f2f5cdeabd8a0dfddfdb66a7c43993a3e189b80d
+Result = VERIFY_ERROR
+
+# MD5/SHA-1 combination, wrong input and signature digest length
+Verify = RSA-2048
+Ctrl = digest:MD5-SHA1
+Input = "0123456789ABCDEF0123456789ABCDEF012"
+Output = 6c13511f97ffb8137545fce551a43cf2b5b3dbdd5c3ceaaccd4620a6a373f3c38cc523d95bbdd810c852743b981bc4393c6b0cdfb0da5e77a8cc0108b05ff95e0f4dd7a0125b7390af1408dca6ddefac3b05b768de7b0c3df3c74e5f102f62743d67813beee1777036078da4cff5b29f49f01a6df3a2e709c37a83737108517687fe754d9ee908cb36c55e88f67c0b537108707347d16049f5dfac3d400ea367222d36627937a7f822f451c3d2c2dbc9e2202bffd3dc1b22213e17270a6b657619c6f44cbf66b077d548cfc9e1a114f8b853412470f2bf8d828f04d0d9f1aef260d216acb0911329fb5bdc48c2be3b198bf6f96e1c3fb116ad4430140d0640d4
+Result = VERIFY_ERROR
+
+# DigestInfo-wrapped MDC-2 signature
+Availablein = legacy
+Verify = RSA-2048
+Ctrl = digest:MDC2
+Input = "0123456789ABCDEF"
+Output = 3a46e5e80635d3b5586187b44b08fd02ca0bd36a637a8afeb46a1c1eb18d05b3196e00edf85378109015bcd3d0cfcefc2919c5b8e3ac42884b360188b1395ed34df7d2749f36b91c320d290311d78b36f390481eff42ace0275385c05176d022e4b625cf0ed85082d4b25da9e8a86011f6ac1cb8d8b812cc2bbd6c240caa8445aa74f8e971c935dbf3447df0411eb9e5cdee0851d1e0fea7041916c77efc09dc54e8dd4b7ba8f8d85ef43d4f12abde99886f4ebd5f021fc1b476cc23dc6a94fbbe77c954eee496fb6b4b5c534daa4e819143ce8de511a8bcb65759750c17edaca6fb31ac271c1ca3a27705f780ae86c67009e76fcba9067dde3556ff59c44111
+
+Availablein = legacy
+VerifyRecover = RSA-2048
+Ctrl = digest:MDC2
+Input = 3a46e5e80635d3b5586187b44b08fd02ca0bd36a637a8afeb46a1c1eb18d05b3196e00edf85378109015bcd3d0cfcefc2919c5b8e3ac42884b360188b1395ed34df7d2749f36b91c320d290311d78b36f390481eff42ace0275385c05176d022e4b625cf0ed85082d4b25da9e8a86011f6ac1cb8d8b812cc2bbd6c240caa8445aa74f8e971c935dbf3447df0411eb9e5cdee0851d1e0fea7041916c77efc09dc54e8dd4b7ba8f8d85ef43d4f12abde99886f4ebd5f021fc1b476cc23dc6a94fbbe77c954eee496fb6b4b5c534daa4e819143ce8de511a8bcb65759750c17edaca6fb31ac271c1ca3a27705f780ae86c67009e76fcba9067dde3556ff59c44111
+Output = "0123456789ABCDEF"
+
+# Legacy OCTET STRING MDC-2 signature
+Availablein = legacy
+Verify = RSA-2048
+Ctrl = digest:MDC2
+Input = "0123456789ABCDEF"
+Output = 6cde46bbfc6a3b772c3d884640709be9f2fb70fcf199c14eaff7811369ea99733f984a9c48cd372578fa37cedeef24c93286d6d64f438df051e625ab2e125a7d9974a76240873e43efc3acbcbdccc2ee63769cdbf983b334ccb982273315c222b3bbdc3e928ac8a141a7412f1f794cfcabcc069a2ae4975d7bb68bea145d789634c9e0b02d324b5efd599c9bf2b1d32d077aba59aa0ad4a82cbbb90eaa9214e4f57104cf049c4139e2ddecf6edf219cd986f4d79cf25128c58667562c9d22be0291430d6cc7dad977d56e08315fcec133ea95d8db550f89735b4d5f233eaff0c86fce2b99f3f508e920f882c31f3e13f8775a3c8fa585c4f4c69eca89f648b7e
+
+Availablein = legacy
+VerifyRecover = RSA-2048
+Ctrl = digest:MDC2
+Input = 6cde46bbfc6a3b772c3d884640709be9f2fb70fcf199c14eaff7811369ea99733f984a9c48cd372578fa37cedeef24c93286d6d64f438df051e625ab2e125a7d9974a76240873e43efc3acbcbdccc2ee63769cdbf983b334ccb982273315c222b3bbdc3e928ac8a141a7412f1f794cfcabcc069a2ae4975d7bb68bea145d789634c9e0b02d324b5efd599c9bf2b1d32d077aba59aa0ad4a82cbbb90eaa9214e4f57104cf049c4139e2ddecf6edf219cd986f4d79cf25128c58667562c9d22be0291430d6cc7dad977d56e08315fcec133ea95d8db550f89735b4d5f233eaff0c86fce2b99f3f508e920f882c31f3e13f8775a3c8fa585c4f4c69eca89f648b7e
+Output = "0123456789ABCDEF"
+
+# Legacy OCTET STRING MDC-2 signature, digest mismatch
+Availablein = legacy
+Verify = RSA-2048
+Ctrl = digest:MDC2
+Input = "0000000000000000"
+Output = 6cde46bbfc6a3b772c3d884640709be9f2fb70fcf199c14eaff7811369ea99733f984a9c48cd372578fa37cedeef24c93286d6d64f438df051e625ab2e125a7d9974a76240873e43efc3acbcbdccc2ee63769cdbf983b334ccb982273315c222b3bbdc3e928ac8a141a7412f1f794cfcabcc069a2ae4975d7bb68bea145d789634c9e0b02d324b5efd599c9bf2b1d32d077aba59aa0ad4a82cbbb90eaa9214e4f57104cf049c4139e2ddecf6edf219cd986f4d79cf25128c58667562c9d22be0291430d6cc7dad977d56e08315fcec133ea95d8db550f89735b4d5f233eaff0c86fce2b99f3f508e920f882c31f3e13f8775a3c8fa585c4f4c69eca89f648b7e
+Result = VERIFY_ERROR
+
+# Legacy OCTET STRING MDC-2 signature, wrong input digest length
+Availablein = legacy
+Verify = RSA-2048
+Ctrl = digest:MDC2
+Input = "0123456789ABCDE"
+Output = 6cde46bbfc6a3b772c3d884640709be9f2fb70fcf199c14eaff7811369ea99733f984a9c48cd372578fa37cedeef24c93286d6d64f438df051e625ab2e125a7d9974a76240873e43efc3acbcbdccc2ee63769cdbf983b334ccb982273315c222b3bbdc3e928ac8a141a7412f1f794cfcabcc069a2ae4975d7bb68bea145d789634c9e0b02d324b5efd599c9bf2b1d32d077aba59aa0ad4a82cbbb90eaa9214e4f57104cf049c4139e2ddecf6edf219cd986f4d79cf25128c58667562c9d22be0291430d6cc7dad977d56e08315fcec133ea95d8db550f89735b4d5f233eaff0c86fce2b99f3f508e920f882c31f3e13f8775a3c8fa585c4f4c69eca89f648b7e
+Result = VERIFY_ERROR
+
+# Legacy OCTET STRING MDC-2 signature, wrong signature digest length
+Availablein = legacy
+Verify = RSA-2048
+Ctrl = digest:MDC2
+Input = "0123456789ABCDEF"
+Output = 08da512483ece70be57f28a75271612800ae30ffbadc62609bc88b80d497a1fc13c300fdfcab6dc80cf55373c10adcc249ae80479b87fa3e391a2cd4a74babd1c22a4976812d544dcd6729b161bbc48fd067cf635b05f9edaddaeb6f67f2117d6b54a23c5e6f08a246abfe0356a67d7f3929306515e6d9962f8ce205120ecdcd2d4e3783cd0b4a1f0196a1b13924d0d3649233312695c3c336ae04e0b1efddabcc878b57622db60f6f747a1124c38426dacf1425c92d304c2bb1052f987c1dd73e4cc4b20d23396d4f05f52f98cf5065c3fb7dc319425f1f6f1878b87f57afbd24fbff98909494581aadd04d80a639b85ce8684ea58409d8dbbbaacf256bb5c4
+Result = VERIFY_ERROR
+
+Availablein = default
+Availablein = legacy
+VerifyRecover = RSA-2048
+Ctrl = digest:MDC2
+Input = 08da512483ece70be57f28a75271612800ae30ffbadc62609bc88b80d497a1fc13c300fdfcab6dc80cf55373c10adcc249ae80479b87fa3e391a2cd4a74babd1c22a4976812d544dcd6729b161bbc48fd067cf635b05f9edaddaeb6f67f2117d6b54a23c5e6f08a246abfe0356a67d7f3929306515e6d9962f8ce205120ecdcd2d4e3783cd0b4a1f0196a1b13924d0d3649233312695c3c336ae04e0b1efddabcc878b57622db60f6f747a1124c38426dacf1425c92d304c2bb1052f987c1dd73e4cc4b20d23396d4f05f52f98cf5065c3fb7dc319425f1f6f1878b87f57afbd24fbff98909494581aadd04d80a639b85ce8684ea58409d8dbbbaacf256bb5c4
+Result = KEYOP_ERROR
+
+# Legacy OCTET STRING MDC-2 signature, wrong input and signature digest length
+Availablein = legacy
+Verify = RSA-2048
+Ctrl = digest:MDC2
+Input = "0123456789ABCDE"
+Output = 08da512483ece70be57f28a75271612800ae30ffbadc62609bc88b80d497a1fc13c300fdfcab6dc80cf55373c10adcc249ae80479b87fa3e391a2cd4a74babd1c22a4976812d544dcd6729b161bbc48fd067cf635b05f9edaddaeb6f67f2117d6b54a23c5e6f08a246abfe0356a67d7f3929306515e6d9962f8ce205120ecdcd2d4e3783cd0b4a1f0196a1b13924d0d3649233312695c3c336ae04e0b1efddabcc878b57622db60f6f747a1124c38426dacf1425c92d304c2bb1052f987c1dd73e4cc4b20d23396d4f05f52f98cf5065c3fb7dc319425f1f6f1878b87f57afbd24fbff98909494581aadd04d80a639b85ce8684ea58409d8dbbbaacf256bb5c4
+Result = VERIFY_ERROR
+
+Sign = RSA-2048
+Ctrl = rsa_mgf1_md:sha1
+Result = PKEY_CTRL_ERROR
+Reason = invalid mgf1 md
+
+# RSA PSS key tests
+
+# PSS only key, no parameter restrictions
+PrivateKey = RSA-PSS
+-----BEGIN PRIVATE KEY-----
+MIIEugIBADALBgkqhkiG9w0BAQoEggSmMIIEogIBAAKCAQEAzQCB6nsq4eoG1Z98
+c9n/uUoJYVwuS6fGNs7wjdNTPsMYVSWwFcdpuZp31nJb+cNTKptuX2Yn1fuFFgdo
+092py9NZdFEXF9w9MJ0vxH7kH5fjKtt/ndhkocR2emZuzXG8Gqz151F/SzhZT+qb
+BeQtWtqZEgCAE+RTFqTZu47QhriNKHWLrK+SLUaoaLSF0jnJuusOK2RZJxD0Ky0e
+oKS0gCwL7Ksyj4posAc721Rv7qmAnShJkSs5DBUyvH4px2WPgXX65G80My/4e8qz
+5AZJuYV3hp2g6nGDU/ByJ1SIaRNkh2DRIr5nbg/Eg90g/8Mb2pajGWbJqi51rQPe
+R+HETwIDAQABAoIBAGApeseZGxZ6BtayR1i4y+IIvrmy2eyXOL2A+QouNQBd184p
+LZ4puohb0xb+8fIJE7wKyQ1rCAiyQU2CEERB2GJKM84CM8j3gKSLN1r/AtdnEiKK
+cCSE2z+evszPu+4XCduhgoANlJ6eQhbgv/NVg4j4vZDaNzodgnQ+w/vdFCf9FoJa
+ZXoxaRLoaVNlEXyi+EXJCUBfysVfiV/BXSA4bCbueMnpkHUCmheKbB5M8MIA6KnP
+sn6dFW+G5sKtwisahKHNXKWyeQh115QHyEs1I5XLgcw/7VuwQ7ae3gwHIEVQAlzu
+jF9EAXC2Egu0jg90e82PUiEQhQ3wQ8Qo39GHBTECgYEA9vlhtHy8A1067evH3oUK
+lWtl7Nuc9gdkBj8VqkhVPFjZcv5mdQVuNd39w3vzufL2Iu4nEzclaEnJvvIXb+j3
+w/i7kbo3TdU7rz3sgU0r3sEMH9yIzdFodvJrHt+j8JQZft9NQv8fspcRA7iYyoWc
+QnKHCGqEKrQQu2nPLTWva+MCgYEA1H5ySn/0EEiycMJSSkEBh4tzFZu3PT28GHsi
+DmNbNTT5biQ6GE2T+GC2v7trccHtmh4fRYWDAjwwHpamksGgi1PQ7JypEBANgEUe
+O33GoBusSuzvjfeYhGvCNaCMu6LPTAaATMESGelWCMcU4/FDDUkfrbujKldRoE+X
+dFg0yaUCgYAh8kUrubld/QKMkUv3mfHKd+ialdUNPBbThPhFX4vXr56z36PVkdmE
+Le8jX3YwqOSMCI/2ZC4QF5RTWpM+HpdvqFCfxyiy2gxKGgjX/PN6uq4f8wAayh3B
+u7Bdnf+6oaCff7Hu84I32evMxyK5M4Q23ecRkRJ5jCaAnBqN7EMgYQKBgB91EKpi
+wtjeSjxTKCeB9B4C0Oi0Aq54Qy5EnEgRAWGhFAPwLQGICo3Mk4FS15chpHEaYHrE
+Rx6/lkgQ+VvkekXmBJnin0yXc8g3c0BPYGY3cowtA1G7A8MmyLtzpyHn+lRA6iFy
+u6FGX8ww3LDZ+Jkw6BWqH3+XKahX4A4DON1ZAoGATR8NdW/nfgEJmmUvUKiLe2hd
+xb8AmB1dI3b9DG/inNW2OHNEeTBac608FZnTnq47rgNfvW/tB8KN5wWTOHmgbkjm
+pgNobtjiVgpfavHywk+vSqlg44IYbxXu3OmiSRrnMGgN1M93i3D6qGgmqzIjR3zJ
+E3exmm1aLq6iGXYL7tU=
+-----END PRIVATE KEY-----
+
+# PSS public key default parameters
+PublicKey = RSA-PSS-DEFAULT
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQowAAOCAQ8AMIIBCgKCAQEAzQCB6nsq4eoG1Z98c9n/
+uUoJYVwuS6fGNs7wjdNTPsMYVSWwFcdpuZp31nJb+cNTKptuX2Yn1fuFFgdo092p
+y9NZdFEXF9w9MJ0vxH7kH5fjKtt/ndhkocR2emZuzXG8Gqz151F/SzhZT+qbBeQt
+WtqZEgCAE+RTFqTZu47QhriNKHWLrK+SLUaoaLSF0jnJuusOK2RZJxD0Ky0eoKS0
+gCwL7Ksyj4posAc721Rv7qmAnShJkSs5DBUyvH4px2WPgXX65G80My/4e8qz5AZJ
+uYV3hp2g6nGDU/ByJ1SIaRNkh2DRIr5nbg/Eg90g/8Mb2pajGWbJqi51rQPeR+HE
+TwIDAQAB
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = RSA-PSS:RSA-PSS-DEFAULT
+
+
+# Wrong MGF1 digest
+Verify = RSA-2048
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:0
+Ctrl = digest:sha256
+Ctrl = rsa_mgf1_md:sha1
+Input="0123456789ABCDEF0123456789ABCDEF"
+Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DDD0635A96B28F854E50145518482CB49E963054621B53C60C498D07C16E9C2789C893CF38D4D86900DE71BDE463BD2761D1271E358C7480A1AC0BAB930DDF39602AD1BC165B5D7436B516B7A7858E8EB7AB1C420EEB482F4D207F0E462B1724959320A084E13848D11D10FB593E66BF680BF6D3F345FC3E9C3DE60ABBAC37E1C6EC80A268C8D9FC49626C679097AA690BC1AA662B95EB8DB70390861AA0898229F9349B4B5FDD030D4928C47084708A933144BE23BD3C6E661B85B2C0EF9ED36D498D5B7320E8194D363D4AD478C059BAE804181965E0B81B663158A
+Result = VERIFY_ERROR
+
+# Verify using default parameters
+Verify = RSA-PSS-DEFAULT
+Input="0123456789ABCDEF0123"
+Output = 3EFE09D88509027D837BFA5F8471CF7B69E6DF395DD999BB9CA42021F15722D9AC76670507C6BCFB73F64FB2211B611B8F140E76EBDB064BD762FDBA89D019E304A0D6B274E1C2FE1DF50005598A0306AF805416094E2A5BA60BC72BDE38CE061E853ED40F14967A8B9CA4DC739B462F89558F12FDF2D8D19FBEF16AD66FE2DDDA8BEE983ECBD873064244849D8D94B5B33F45E076871A47ED653E73257A2BE2DB3C0878094B0D2B6B682C8007DFD989425FB39A1FEEC9EED5876414601A49176EC344F5E3EDEE81CA2DDD29B7364F4638112CB3A547E2BC170E28CB66BDABE863754BE8AD5BA230567B575266F4B6B4CF81F28310ABF05351CC9E2DB85D00BF
+
+# Illegal decrypt
+Decrypt = RSA-PSS
+Result = KEYOP_INIT_ERROR
+Reason = operation not supported for this keytype
+
+
+# Additional RSA-PSS and RSA-OAEP tests converted from
+# ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1-vec.zip
+Title = RSA PSS/OAEP (from RSASecurity FTP)
+
+# 1025 bit key
+PublicKey=RSA-PSS-2
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQHUDBvPl6aK5829invz40+hncyk
+73WkdFQ3X5RRTYj+0Ab7gp+EGf+H1jFdpoof86CTjpq7NGQBHDA62ZGZzwx8eotH
+fc6CnohE9iWxFeXpxKWc+PgRO2g0M2ov0mibRyy7Xlyr5nQ1DFm2wX4XaHT7Qvj8
+PRdqAX7cYf0ybEszyQIDAQAB
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-2
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=5c81a3e2a658246628cd0ee8b00bb4c012bc9739
+Output=014c5ba5338328ccc6e7a90bf1c0ab3fd606ff4796d3c12e4b639ed9136a5fec6c16d8884bdd99cfdc521456b0742b736868cf90de099adb8d5ffd1deff39ba4007ab746cefdb22d7df0e225f54627dc65466131721b90af445363a8358b9f607642f78fab0ab0f43b7168d64bae70d8827848d8ef1e421c5754ddf42c2589b5b3
+
+Verify=RSA-PSS-2
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=27f71611446aa6eabf037f7dedeede3203244991
+Output=010991656cca182b7f29d2dbc007e7ae0fec158eb6759cb9c45c5ff87c7635dd46d150882f4de1e9ae65e7f7d9018f6836954a47c0a81a8a6b6f83f2944d6081b1aa7c759b254b2c34b691da67cc0226e20b2f18b42212761dcd4b908a62b371b5918c5742af4b537e296917674fb914194761621cc19a41f6fb953fbcbb649dea
+
+Verify=RSA-PSS-2
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=03ecc2c33e93f05fc7224fcc0d461356cb897217
+Output=007f0030018f53cdc71f23d03659fde54d4241f758a750b42f185f87578520c30742afd84359b6e6e8d3ed959dc6fe486bedc8e2cf001f63a7abe16256a1b84df0d249fc05d3194ce5f0912742dbbf80dd174f6c51f6bad7f16cf3364eba095a06267dc3793803ac7526aebe0a475d38b8c2247ab51c4898df7047dc6adf52c6c4
+
+Verify=RSA-PSS-2
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=246c727b4b9494849dddb068d582e179ac20999c
+Output=009cd2f4edbe23e12346ae8c76dd9ad3230a62076141f16c152ba18513a48ef6f010e0e37fd3df10a1ec629a0cb5a3b5d2893007298c30936a95903b6ba85555d9ec3673a06108fd62a2fda56d1ce2e85c4db6b24a81ca3b496c36d4fd06eb7c9166d8e94877c42bea622b3bfe9251fdc21d8d5371badad78a488214796335b40b
+
+Verify=RSA-PSS-2
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=e8617ca3ea66ce6a58ede2d11af8c3ba8a6ba912
+Output=00ec430824931ebd3baa43034dae98ba646b8c36013d1671c3cf1cf8260c374b19f8e1cc8d965012405e7e9bf7378612dfcc85fce12cda11f950bd0ba8876740436c1d2595a64a1b32efcfb74a21c873b3cc33aaf4e3dc3953de67f0674c0453b4fd9f604406d441b816098cb106fe3472bc251f815f59db2e4378a3addc181ecf
+
+Verify=RSA-PSS-2
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=7a6fdc1a4e434ecbc35d657ad49a2f4fafd43bc8
+Output=00475b1648f814a8dc0abdc37b5527f543b666bb6e39d30e5b49d3b876dccc58eac14e32a2d55c2616014456ad2f246fc8e3d560da3ddf379a1c0bd200f10221df078c219a151bc8d4ec9d2fc2564467811014ef15d8ea01c2ebbff8c2c8efab38096e55fcbe3285c7aa558851254faffa92c1c72b78758663ef4582843139d7a6
+
+# 1026 bit key
+PublicKey=RSA-PSS-3
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQLyRu9FHtPuu5oxAgDMJYWcBI5L
+55gwKZERLraM5ttnTigNoh/t7RrnSIDKUisY2ySThQEoJ8UV8ORmof+mkdmBcFdO
+nQ6tsIdYbKSJM9o8yVPZW9DtUN4Q3ctnNhB9bIMcf2Y+gzykwJfnAM4PuUX4j7hf
+6OWncxclZbkUpHGkQwIDAQAB
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-3
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=3552be69dd74bdc56d2cf8c38ef7bafe269040fe
+Output=0088b135fb1794b6b96c4a3e678197f8cac52b64b2fe907d6f27de761124964a99a01a882740ecfaed6c01a47464bb05182313c01338a8cd097214cd68ca103bd57d3bc9e816213e61d784f182467abf8a01cf253e99a156eaa8e3e1f90e3c6e4e3aa2d83ed0345b89fafc9c26077c14b6ac51454fa26e446e3a2f153b2b16797f
+
+Verify=RSA-PSS-3
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=609143ff7240e55c062aba8b9e4426a781919bc9
+Output=02a5f0a858a0864a4f65017a7d69454f3f973a2999839b7bbc48bf78641169179556f595fa41f6ff18e286c2783079bc0910ee9cc34f49ba681124f923dfa88f426141a368a5f5a930c628c2c3c200e18a7644721a0cbec6dd3f6279bde3e8f2be5e2d4ee56f97e7ceaf33054be7042bd91a63bb09f897bd41e81197dee99b11af
+
+Verify=RSA-PSS-3
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=0afd22f879a9cda7c584f4135f8f1c961db114c0
+Output=0244bcd1c8c16955736c803be401272e18cb990811b14f72db964124d5fa760649cbb57afb8755dbb62bf51f466cf23a0a1607576e983d778fceffa92df7548aea8ea4ecad2c29dd9f95bc07fe91ecf8bee255bfe8762fd7690aa9bfa4fa0849ef728c2c42c4532364522df2ab7f9f8a03b63f7a499175828668f5ef5a29e3802c
+
+Verify=RSA-PSS-3
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=405dd56d395ef0f01b555c48f748cc32b210650b
+Output=0196f12a005b98129c8df13c4cb16f8aa887d3c40d96df3a88e7532ef39cd992f273abc370bc1be6f097cfebbf0118fd9ef4b927155f3df22b904d90702d1f7ba7a52bed8b8942f412cd7bd676c9d18e170391dcd345c06a730964b3f30bcce0bb20ba106f9ab0eeb39cf8a6607f75c0347f0af79f16afa081d2c92d1ee6f836b8
+
+Verify=RSA-PSS-3
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=a2c313b0440c8a0c47233b87f0a160c61af3eae7
+Output=021eca3ab4892264ec22411a752d92221076d4e01c0e6f0dde9afd26ba5acf6d739ef987545d16683e5674c9e70f1de649d7e61d48d0caeb4fb4d8b24fba84a6e3108fee7d0705973266ac524b4ad280f7ae17dc59d96d3351586b5a3bdb895d1e1f7820ac6135d8753480998382ba32b7349559608c38745290a85ef4e9f9bd83
+
+Verify=RSA-PSS-3
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=f1bf6ca7b4bbdbb6bf20a4bf55728725d177154a
+Output=012fafec862f56e9e92f60ab0c77824f4299a0ca734ed26e0644d5d222c7f0bde03964f8e70a5cb65ed44e44d56ae0edf1ff86ca032cc5dd4404dbb76ab854586c44eed8336d08d457ce6c03693b45c0f1efef93624b95b8ec169c616d20e5538ebc0b6737a6f82b4bc0570924fc6b35759a3348426279f8b3d7744e2d222426ce
+
+# 1027 bit key
+PublicKey=RSA-PSS-4
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQVK23iGRH7+b1fgNo8Gz1KwozcH
+YNFhzvEmuRvn+JxCG2Km7B2jwxHXXtUOCrX/8/0zisw6qKTnfuJjaay4G6kA+oP1
+MAz5u2xTrR3IoXi4FdtCNamp2gwG3k5hXqEnfOVZ6cEI3ljBSoGqd/Wm+NEzVJRJ
+iEjIuVlAdAvnv3w3BQIDAQAB
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-4
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=f8b0abf70fec0bca74f0accbc24f75e6e90d3bfd
+Output=0323d5b7bf20ba4539289ae452ae4297080feff4518423ff4811a817837e7d82f1836cdfab54514ff0887bddeebf40bf99b047abc3ecfa6a37a3ef00f4a0c4a88aae0904b745c846c4107e8797723e8ac810d9e3d95dfa30ff4966f4d75d13768d20857f2b1406f264cfe75e27d7652f4b5ed3575f28a702f8c4ed9cf9b2d44948
+
+Verify=RSA-PSS-4
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=04a10944bfe11ab801e77889f3fd3d7f4ff0b629
+Output=049d0185845a264d28feb1e69edaec090609e8e46d93abb38371ce51f4aa65a599bdaaa81d24fba66a08a116cb644f3f1e653d95c89db8bbd5daac2709c8984000178410a7c6aa8667ddc38c741f710ec8665aa9052be929d4e3b16782c1662114c5414bb0353455c392fc28f3db59054b5f365c49e1d156f876ee10cb4fd70598
+
+Verify=RSA-PSS-4
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=ba01243db223eb97fb86d746c3148adaaa0ca344
+Output=03fbc410a2ced59500fb99f9e2af2781ada74e13145624602782e2994813eefca0519ecd253b855fb626a90d771eae028b0c47a199cbd9f8e3269734af4163599090713a3fa910fa0960652721432b971036a7181a2bc0cab43b0b598bc6217461d7db305ff7e954c5b5bb231c39e791af6bcfa76b147b081321f72641482a2aad
+
+Verify=RSA-PSS-4
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=934bb0d38d6836daec9de82a9648d4593da67cd2
+Output=0486644bc66bf75d28335a6179b10851f43f09bded9fac1af33252bb9953ba4298cd6466b27539a70adaa3f89b3db3c74ab635d122f4ee7ce557a61e59b82ffb786630e5f9db53c77d9a0c12fab5958d4c2ce7daa807cd89ba2cc7fcd02ff470ca67b229fcce814c852c73cc93bea35be68459ce478e9d4655d121c8472f371d4f
+
+Verify=RSA-PSS-4
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=ec35d81abd1cceac425a935758b683465c8bd879
+Output=022a80045353904cb30cbb542d7d4990421a6eec16a8029a8422adfd22d6aff8c4cc0294af110a0c067ec86a7d364134459bb1ae8ff836d5a8a2579840996b320b19f13a13fad378d931a65625dae2739f0c53670b35d9d3cbac08e733e4ec2b83af4b9196d63e7c4ff1ddeae2a122791a125bfea8deb0de8ccf1f4ffaf6e6fb0a
+
+Verify=RSA-PSS-4
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=72ce251d17b04dd3970d6ff1fbe3624899e9e941
+Output=00938dcb6d583046065f69c78da7a1f1757066a7fa75125a9d2929f0b79a60b627b082f11f5b196f28eb9daa6f21c05e5140f6aef1737d2023075c05ecf04a028c686a2ab3e7d5a0664f295ce12995e890908b6ad21f0839eb65b70393a7b5afd9871de0caa0cedec5b819626756209d13ab1e7bb9546a26ff37e9a51af9fd562e
+
+# 1028 bit key
+PublicKey=RSA-PSS-5
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ0Q9mHymUD17TmqJglm3rR4Q2ed
+K2+yWz3jcPOsfBmRY5H9JftSfr+mpLTfRaF1nZlsS7Tr0YgoxE/FLQGRhxdAUl9H
+pLDMjaMl7YqmdrDQ9ibgp38HaSFwrKyAgvQvqn3HzRI+cw4xqHmFIEyry+ZnDUOi
+3Sst3vXgU5L8ITvFBwIDAQAB
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-5
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=d98b7061943510bc3dd9162f7169aabdbdcd0222
+Output=0ba373f76e0921b70a8fbfe622f0bf77b28a3db98e361051c3d7cb92ad0452915a4de9c01722f6823eeb6adf7e0ca8290f5de3e549890ac2a3c5950ab217ba58590894952de96f8df111b2575215da6c161590c745be612476ee578ed384ab33e3ece97481a252f5c79a98b5532ae00cdd62f2ecc0cd1baefe80d80b962193ec1d
+
+Verify=RSA-PSS-5
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=7ae8e699f754988f4fd645e463302e49a2552072
+Output=08180de825e4b8b014a32da8ba761555921204f2f90d5f24b712908ff84f3e220ad17997c0dd6e706630ba3e84add4d5e7ab004e58074b549709565d43ad9e97b5a7a1a29e85b9f90f4aafcdf58321de8c5974ef9abf2d526f33c0f2f82e95d158ea6b81f1736db8d1af3d6ac6a83b32d18bae0ff1b2fe27de4c76ed8c7980a34e
+
+Verify=RSA-PSS-5
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=8d46c7c05534c1ba2cc7624500d48a4531604bff
+Output=05e0fdbdf6f756ef733185ccfa8ced2eb6d029d9d56e35561b5db8e70257ee6fd019d2f0bbf669fe9b9821e78df6d41e31608d58280f318ee34f559941c8df13287574bac000b7e58dc4f414ba49fb127f9d0f8936638c76e85356c994f79750f7fa3cf4fd482df75e3fb9978cd061f7abb17572e6e63e0bde12cbdcf18c68b979
+
+Availablein = default
+Verify=RSA-PSS-5
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=ee3de96783fd0a157c8b20bf5566124124dcfe65
+Output=0bc989853bc2ea86873271ce183a923ab65e8a53100e6df5d87a24c4194eb797813ee2a187c097dd872d591da60c568605dd7e742d5af4e33b11678ccb63903204a3d080b0902c89aba8868f009c0f1c0cb85810bbdd29121abb8471ff2d39e49fd92d56c655c8e037ad18fafbdc92c95863f7f61ea9efa28fea401369d19daea1
+
+Verify=RSA-PSS-5
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=1204df0b03c2724e2709c23fc71789a21b00ae4c
+Output=0aefa943b698b9609edf898ad22744ac28dc239497cea369cbbd84f65c95c0ad776b594740164b59a739c6ff7c2f07c7c077a86d95238fe51e1fcf33574a4ae0684b42a3f6bf677d91820ca89874467b2c23add77969c80717430d0efc1d3695892ce855cb7f7011630f4df26def8ddf36fc23905f57fa6243a485c770d5681fcd
+
+Verify=RSA-PSS-5
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=29926bc3280c841f601acd0d6f17ea38023eddbc
+Output=02802dccfa8dfaf5279bf0b4a29ba1b157611faeaaf419b8919d15941900c1339e7e92e6fae562c53e6cc8e84104b110bce03ad18525e3c49a0eadad5d3f28f244a8ed89edbafbb686277cfa8ae909714d6b28f4bf8e293aa04c41efe7c0a81266d5c061e2575be032aa464674ff71626219bd74cc45f0e7ed4e3ff96eee758e8f
+
+# 1029 bit key
+PublicKey=RSA-PSS-6
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgRZMoxz/YJ86DnEBsDny5P5t03UZ
+q5hZjReeF0mWWYBx9H06BFWRWNe+NzzxqlPwqm7wkDnlZ4wqTGOQBRTIxPiq7V3h
+Kl8QsJwxGvjA/7W3opfy78Y7jWsFEJMfC5jki/X8bsTnuNsf+usIw44CrbjwOkgi
+nJnpaUMfYcuMTcaY0QIDAQAB
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-6
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=ab464e8cb65ae5fdea47a53fa84b234d6bfd52f6
+Output=04c0cfacec04e5badbece159a5a1103f69b3f32ba593cb4cc4b1b7ab455916a96a27cd2678ea0f46ba37f7fc9c86325f29733b389f1d97f43e7201c0f348fc45fe42892335362eee018b5b161f2f9393031225c713012a576bc88e23052489868d9010cbf033ecc568e8bc152bdc59d560e41291915d28565208e22aeec9ef85d1
+
+Verify=RSA-PSS-6
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=92d0bcae82b641f578f040f5151be8eda6d42299
+Output=0a2314250cf52b6e4e908de5b35646bcaa24361da8160fb0f9257590ab3ace42b0dc3e77ad2db7c203a20bd952fbb56b1567046ecfaa933d7b1000c3de9ff05b7d989ba46fd43bc4c2d0a3986b7ffa13471d37eb5b47d64707bd290cfd6a9f393ad08ec1e3bd71bb5792615035cdaf2d8929aed3be098379377e777ce79aaa4773
+
+Verify=RSA-PSS-6
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=3569bd8fd2e28f2443375efa94f186f6911ffc2b
+Output=086df6b500098c120f24ff8423f727d9c61a5c9007d3b6a31ce7cf8f3cbec1a26bb20e2bd4a046793299e03e37a21b40194fb045f90b18bf20a47992ccd799cf9c059c299c0526854954aade8a6ad9d97ec91a1145383f42468b231f4d72f23706d9853c3fa43ce8ace8bfe7484987a1ec6a16c8daf81f7c8bf42774707a9df456
+
+Verify=RSA-PSS-6
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=7abbb7b42de335730a0b641f1e314b6950b84f98
+Output=0b5b11ad549863ffa9c51a14a1106c2a72cc8b646e5c7262509786105a984776534ca9b54c1cc64bf2d5a44fd7e8a69db699d5ea52087a4748fd2abc1afed1e5d6f7c89025530bdaa2213d7e030fa55df6f34bcf1ce46d2edf4e3ae4f3b01891a068c9e3a44bbc43133edad6ecb9f35400c4252a5762d65744b99cb9f4c559329f
+
+Verify=RSA-PSS-6
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=55b7eb27be7a787a59eb7e5fac468db8917a7725
+Output=02d71fa9b53e4654fefb7f08385cf6b0ae3a817942ebf66c35ac67f0b069952a3ce9c7e1f1b02e480a9500836de5d64cdb7ecde04542f7a79988787e24c2ba05f5fd482c023ed5c30e04839dc44bed2a3a3a4fee01113c891a47d32eb8025c28cb050b5cdb576c70fe76ef523405c08417faf350b037a43c379339fcb18d3a356b
+
+Verify=RSA-PSS-6
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=de2fa0367ef49083ff89b9905d3fd646fcc12c38
+Output=0a40a16e2fe2b38d1df90546167cf9469c9e3c3681a3442b4b2c2f581deb385ce99fc6188bb02a841d56e76d301891e24560550fcc2a26b55f4ccb26d837d350a154bcaca8392d98fa67959e9727b78cad03269f56968fc56b68bd679926d83cc9cb215550645ccda31c760ff35888943d2d8a1d351e81e5d07b86182e751081ef
+
+# 1030 bit key
+PublicKey=RSA-PSS-7
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgTfJ2kpmyMQIuNon0MnXn4zLHq/B
+0v5IdG2UC3xO9d7hitEmR876oMSzGIsiHFFThnWbk/AgJLJauSQvg1fY8/1JZA7l
+5kPq9sZN7vpwiXJ8j/A5kzM5FcbvIb9ZdbblDRGLUQCOwz6fAaClRaEKg2pD3byp
+2LXF01SAItcGTqKaswIDAQAB
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-7
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=8be4afbdd76bd8d142c5f4f46dba771ee5d6d29d
+Output=187f390723c8902591f0154bae6d4ecbffe067f0e8b795476ea4f4d51ccc810520bb3ca9bca7d0b1f2ea8a17d873fa27570acd642e3808561cb9e975ccfd80b23dc5771cdb3306a5f23159dacbd3aa2db93d46d766e09ed15d900ad897a8d274dc26b47e994a27e97e2268a766533ae4b5e42a2fcaf755c1c4794b294c60555823
+
+Verify=RSA-PSS-7
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=402140dc605b2f5c5ec0d15bce9f9ba8857fe117
+Output=10fd89768a60a67788abb5856a787c8561f3edcf9a83e898f7dc87ab8cce79429b43e56906941a886194f137e591fe7c339555361fbbe1f24feb2d4bcdb80601f3096bc9132deea60ae13082f44f9ad41cd628936a4d51176e42fc59cb76db815ce5ab4db99a104aafea68f5d330329ebf258d4ede16064bd1d00393d5e1570eb8
+
+Verify=RSA-PSS-7
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=3e885205892ff2b6b37c2c4eb486c4bf2f9e7f20
+Output=2b31fde99859b977aa09586d8e274662b25a2a640640b457f594051cb1e7f7a911865455242926cf88fe80dfa3a75ba9689844a11e634a82b075afbd69c12a0df9d25f84ad4945df3dc8fe90c3cefdf26e95f0534304b5bdba20d3e5640a2ebfb898aac35ae40f26fce5563c2f9f24f3042af76f3c7072d687bbfb959a88460af1
+
+Verify=RSA-PSS-7
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=1fc2201d0c442a4736cd8b2cd00c959c47a3bf42
+Output=32c7ca38ff26949a15000c4ba04b2b13b35a3810e568184d7ecabaa166b7ffabddf2b6cf4ba07124923790f2e5b1a5be040aea36fe132ec130e1f10567982d17ac3e89b8d26c3094034e762d2e031264f01170beecb3d1439e05846f25458367a7d9c02060444672671e64e877864559ca19b2074d588a281b5804d23772fbbe19
+
+Verify=RSA-PSS-7
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=e4351b66819e5a31501f89acc7faf57030e9aac5
+Output=07eb651d75f1b52bc263b2e198336e99fbebc4f332049a922a10815607ee2d989db3a4495b7dccd38f58a211fb7e193171a3d891132437ebca44f318b280509e52b5fa98fcce8205d9697c8ee4b7ff59d4c59c79038a1970bd2a0d451ecdc5ef11d9979c9d35f8c70a6163717607890d586a7c6dc01c79f86a8f28e85235f8c2f1
+
+Verify=RSA-PSS-7
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=49f6cc58365e514e1a3f301f4de16f9fb5347ff2
+Output=18da3cdcfe79bfb77fd9c32f377ad399146f0a8e810620233271a6e3ed3248903f5cdc92dc79b55d3e11615aa056a795853792a3998c349ca5c457e8ca7d29d796aa24f83491709befcfb1510ea513c92829a3f00b104f655634f320752e130ec0ccf6754ff893db302932bb025eb60e87822598fc619e0e981737a9a4c4152d33
+
+# 1031 bit key
+PublicKey=RSA-PSS-8
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgUlTcKH7GFQ8FtNjHjFjJV32K+bu
+6JDV8lUJ5Pd4qOpvu7zfhd/2Tg2XIAOrNoH7um3UH9VBgpsuWC3p8qSk4KLQkAvv
+R1PbPO4O4Gx9+uix1TtZUyGPnM7qaVsIZo7eqtztlGOx15DV6/J+kRW0bK1NmiuO
++rBWGwgQNEc5raBzPwIDAQAB
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-8
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=a1dd230d8ead860199b6277c2ecfe3d95f6d9160
+Output=0262ac254bfa77f3c1aca22c5179f8f040422b3c5bafd40a8f21cf0fa5a667ccd5993d42dbafb409c520e25fce2b1ee1e716577f1efa17f3da28052f40f0419b23106d7845aaf01125b698e7a4dfe92d3967bb00c4d0d35ba3552ab9a8b3eef07c7fecdbc5424ac4db1e20cb37d0b2744769940ea907e17fbbca673b20522380c5
+
+Verify=RSA-PSS-8
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=f6e68e53c602c5c65fa67b5aa6d786e5524b12ab
+Output=2707b9ad5115c58c94e932e8ec0a280f56339e44a1b58d4ddcff2f312e5f34dcfe39e89c6a94dcee86dbbdae5b79ba4e0819a9e7bfd9d982e7ee6c86ee68396e8b3a14c9c8f34b178eb741f9d3f121109bf5c8172fada2e768f9ea1433032c004a8aa07eb990000a48dc94c8bac8aabe2b09b1aa46c0a2aa0e12f63fbba775ba7e
+
+Verify=RSA-PSS-8
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=d6f9fcd3ae27f32bb2c7c93536782eba52af1f76
+Output=2ad20509d78cf26d1b6c406146086e4b0c91a91c2bd164c87b966b8faa42aa0ca446022323ba4b1a1b89706d7f4c3be57d7b69702d168ab5955ee290356b8c4a29ed467d547ec23cbadf286ccb5863c6679da467fc9324a151c7ec55aac6db4084f82726825cfe1aa421bc64049fb42f23148f9c25b2dc300437c38d428aa75f96
+
+Verify=RSA-PSS-8
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=7ff2a53ce2e2d900d468e498f230a5f5dd0020de
+Output=1e24e6e58628e5175044a9eb6d837d48af1260b0520e87327de7897ee4d5b9f0df0be3e09ed4dea8c1454ff3423bb08e1793245a9df8bf6ab3968c8eddc3b5328571c77f091cc578576912dfebd164b9de5454fe0be1c1f6385b328360ce67ec7a05f6e30eb45c17c48ac70041d2cab67f0a2ae7aafdcc8d245ea3442a6300ccc7
+
+Verify=RSA-PSS-8
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=4eb309f7022ba0b03bb78601b12931ec7c1be8d3
+Output=33341ba3576a130a50e2a5cf8679224388d5693f5accc235ac95add68e5eb1eec31666d0ca7a1cda6f70a1aa762c05752a51950cdb8af3c5379f18cfe6b5bc55a4648226a15e912ef19ad77adeea911d67cfefd69ba43fa4119135ff642117ba985a7e0100325e9519f1ca6a9216bda055b5785015291125e90dcd07a2ca9673ee
+
+Verify=RSA-PSS-8
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=65033bc2f67d6aba7d526acb873b8d9241e5e4d9
+Output=1ed1d848fb1edb44129bd9b354795af97a069a7a00d0151048593e0c72c3517ff9ff2a41d0cb5a0ac860d736a199704f7cb6a53986a88bbd8abcc0076a2ce847880031525d449da2ac78356374c536e343faa7cba42a5aaa6506087791c06a8e989335aed19bfab2d5e67e27fb0c2875af896c21b6e8e7309d04e4f6727e69463e
+
+
+Title = RSA DigestSign and DigestVerify
+
+DigestSign = SHA1
+Key = RSA-2048
+Input = "Hello World"
+Output = 3da3ca2bdd1b23a231b0e3c49d95d5959f9398c27a1e534c7e6baf1d2682304d3b6b229385b1edf483f5ef6f9b35bf10c519a302bb2f79c564e1a59ba71aa2fa36df96c942c43e8d9bd4702b5f61c12a078ae2b34d0de221fc8f9f936b79a67c89d11ba5da8c63a1370d0e824c6b661123e9b58b143ff533cf362cbdad70e65b419a6d45723bf22db3c76bb8f5337c5c5c93cb6f38b30d0c835b54c23405ca4217dd0b755f3712ebad285d9e0c02655f6ce5ce6fed78f3c81843de325f628055eef57f280dee0c3170050137ee599b9ab7f2b5d3c5f831777ea05a5eb097c70bad1a7214dadae12d7960bb9425390c7d25a79985e1e3c28ad422ff93c808f4b5
+
+# Oneshot test
+OneShotDigestSign = SHA1
+Key = RSA-2048
+Input = "Hello World"
+Output = 3da3ca2bdd1b23a231b0e3c49d95d5959f9398c27a1e534c7e6baf1d2682304d3b6b229385b1edf483f5ef6f9b35bf10c519a302bb2f79c564e1a59ba71aa2fa36df96c942c43e8d9bd4702b5f61c12a078ae2b34d0de221fc8f9f936b79a67c89d11ba5da8c63a1370d0e824c6b661123e9b58b143ff533cf362cbdad70e65b419a6d45723bf22db3c76bb8f5337c5c5c93cb6f38b30d0c835b54c23405ca4217dd0b755f3712ebad285d9e0c02655f6ce5ce6fed78f3c81843de325f628055eef57f280dee0c3170050137ee599b9ab7f2b5d3c5f831777ea05a5eb097c70bad1a7214dadae12d7960bb9425390c7d25a79985e1e3c28ad422ff93c808f4b5
+
+
+Title = Test RSA keygen
+
+# Key generation tests
+
+KeyGen = rsaEncryption
+Ctrl = rsa_keygen_bits:128
+KeyName = tmprsa
+Result = PKEY_CTRL_ERROR
+Reason = key size too small
diff --git a/test/recipes/30-test_evp_data/evppkey_rsa_common.txt b/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
new file mode 100644
index 000000000000..24ec6a4f7705
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
@@ -0,0 +1,1375 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+# The keyword Availablein must appear before the test name if needed.
+
+# Private keys used for PKEY operations.
+
+# RSA 2048 bit key.
+
+PrivateKey = RSA-2048
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDNAIHqeyrh6gbV
+n3xz2f+5SglhXC5Lp8Y2zvCN01M+wxhVJbAVx2m5mnfWclv5w1Mqm25fZifV+4UW
+B2jT3anL01l0URcX3D0wnS/EfuQfl+Mq23+d2GShxHZ6Zm7NcbwarPXnUX9LOFlP
+6psF5C1a2pkSAIAT5FMWpNm7jtCGuI0odYusr5ItRqhotIXSOcm66w4rZFknEPQr
+LR6gpLSALAvsqzKPimiwBzvbVG/uqYCdKEmRKzkMFTK8finHZY+BdfrkbzQzL/h7
+yrPkBkm5hXeGnaDqcYNT8HInVIhpE2SHYNEivmduD8SD3SD/wxvalqMZZsmqLnWt
+A95H4cRPAgMBAAECggEAYCl6x5kbFnoG1rJHWLjL4gi+ubLZ7Jc4vYD5Ci41AF3X
+ziktnim6iFvTFv7x8gkTvArJDWsICLJBTYIQREHYYkozzgIzyPeApIs3Wv8C12cS
+IopwJITbP56+zM+77hcJ26GCgA2Unp5CFuC/81WDiPi9kNo3Oh2CdD7D+90UJ/0W
+glplejFpEuhpU2URfKL4RckJQF/KxV+JX8FdIDhsJu54yemQdQKaF4psHkzwwgDo
+qc+yfp0Vb4bmwq3CKxqEoc1cpbJ5CHXXlAfISzUjlcuBzD/tW7BDtp7eDAcgRVAC
+XO6MX0QBcLYSC7SOD3R7zY9SIRCFDfBDxCjf0YcFMQKBgQD2+WG0fLwDXTrt68fe
+hQqVa2Xs25z2B2QGPxWqSFU8WNly/mZ1BW413f3De/O58vYi7icTNyVoScm+8hdv
+6PfD+LuRujdN1TuvPeyBTSvewQwf3IjN0Wh28mse36PwlBl+301C/x+ylxEDuJjK
+hZxCcocIaoQqtBC7ac8tNa9r4wKBgQDUfnJKf/QQSLJwwlJKQQGHi3MVm7c9PbwY
+eyIOY1s1NPluJDoYTZP4YLa/u2txwe2aHh9FhYMCPDAelqaSwaCLU9DsnKkQEA2A
+RR47fcagG6xK7O+N95iEa8I1oIy7os9MBoBMwRIZ6VYIxxTj8UMNSR+tu6MqV1Gg
+T5d0WDTJpQKBgCHyRSu5uV39AoyRS/eZ8cp36JqV1Q08FtOE+EVfi9evnrPfo9WR
+2YQt7yNfdjCo5IwIj/ZkLhAXlFNakz4el2+oUJ/HKLLaDEoaCNf883q6rh/zABrK
+HcG7sF2d/7qhoJ9/se7zgjfZ68zHIrkzhDbd5xGREnmMJoCcGo3sQyBhAoGAH3UQ
+qmLC2N5KPFMoJ4H0HgLQ6LQCrnhDLkScSBEBYaEUA/AtAYgKjcyTgVLXlyGkcRpg
+esRHHr+WSBD5W+R6ReYEmeKfTJdzyDdzQE9gZjdyjC0DUbsDwybIu3OnIef6VEDq
+IXK7oUZfzDDcsNn4mTDoFaoff5cpqFfgDgM43VkCgYBNHw11b+d+AQmaZS9QqIt7
+aF3FvwCYHV0jdv0Mb+Kc1bY4c0R5MFpzrTwVmdOerjuuA1+9b+0Hwo3nBZM4eaBu
+SOamA2hu2OJWCl9q8fLCT69KqWDjghhvFe7c6aJJGucwaA3Uz3eLcPqoaCarMiNH
+fMkTd7GabVourqIZdgvu1Q==
+-----END PRIVATE KEY-----
+
+# Corresponding public key
+
+PublicKey = RSA-2048-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzQCB6nsq4eoG1Z98c9n/
+uUoJYVwuS6fGNs7wjdNTPsMYVSWwFcdpuZp31nJb+cNTKptuX2Yn1fuFFgdo092p
+y9NZdFEXF9w9MJ0vxH7kH5fjKtt/ndhkocR2emZuzXG8Gqz151F/SzhZT+qbBeQt
+WtqZEgCAE+RTFqTZu47QhriNKHWLrK+SLUaoaLSF0jnJuusOK2RZJxD0Ky0eoKS0
+gCwL7Ksyj4posAc721Rv7qmAnShJkSs5DBUyvH4px2WPgXX65G80My/4e8qz5AZJ
+uYV3hp2g6nGDU/ByJ1SIaRNkh2DRIr5nbg/Eg90g/8Mb2pajGWbJqi51rQPeR+HE
+TwIDAQAB
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = RSA-2048:RSA-2048-PUBLIC
+
+
+# 1024 bit key
+# generated using (openssl genpkey -algorithm RSA -pkeyopt bits:1024)
+PrivateKey = RSA-1024
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAK02R0z9ehovubaQ
+aSAj0UohCDkWB/bv/J+ra/bATuruD/Q/wm+4mp5+0btc+jNSC/eK+SEz1JVMtRUn
+AfloXmsJXE3EDS65te1jphU3/MBXjs+YdlXVFNFmmLd4Nnum/I0z1Gvkimt0WQ2d
+gn313vwqQDaSeho2Q2ZQgEbiwZ+3AgMBAAECgYEAn6tibMFY1lzaSEW08rCx1DDB
+AMajTuoJKTL/UjYSSZRsVo6T8SLuPV7QfXQHHFnsuCN+5jF+LKbKYpZTxpKEPYid
+4ghxoCQVg+2NrnRVUaw+Cv4iN9HlopaJg+Rc3XmbumoFE3JrkHZrZjkFWgdcijc7
+YyWLlN1zQLMo8xOOujECQQDa1mPPqkYVkfLL6e60QtZtTFubjsiCCebWp2VZVSrF
+vjQqEOl3jgNCrErODqSiheadaPk2SJRRoDpoDY9mTn4JAkEAyqBlP1yjlo+RpG2M
+jsUltlfL3l9Xk1G/i/RpjwoOUcg8ZMqkuNDiWCBh9ND9KuT4VE9bw7Q37EoxH2OG
+ORqfvwJAA7Fuicij2iVWZZ6TCrO+DqYlPaDRPXCRVroIedN4H1Iway1R41SgNXXW
+5VdV6/A6jhmBaysaZa5AjhT8gIt+kQJAeJB1jfz+LXDhlPfGAZFWvieBW6BZSIQE
+uC7GvGCcYpcFMGfPGVTYyN0DzBqp+OLiy6+oh0rtV4BRuD6Mt9+amwJBAIhG3Z6u
+82FZ31EwRwj1TO80bEpsCa8cNLReJc+FyNytrYkjBddKwkGHciqeaXB65V+IDmlC
+/0nh11NaBVUGqsQ=
+-----END PRIVATE KEY-----
+
+PrivateKey = RSA-512
+-----BEGIN PRIVATE KEY-----
+MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEA0aGpl/FjkDOqV8yF
+Gw7IFXcLLVf0scal6HRJMJhLoB4iN0jq2XeVCDHNsIzTI7WmdYOV7FAdyOjCm74h
+AFl+KQIDAQABAkAsWYBQte/zbQrHwmwSmmD4MZQ6xpXtGnK1KAzn7ABr4jHdV+OG
+ic1+sY3aKj+C79GWF5WEd+NHnTrV+bSXPrXRAiEA+ahiTkZ9x0m1JmQ5/cJGm8zS
+YOBdE0SlJZJrPskfGzUCIQDW9PkYpIddXU+vJoIIaTgoXmjMsETzcjcyjVkdK+LB
+pQIgScvIIzMbAsl6znpZ2fSPQoZsuU4YtRVZa524LbrtgvECIQDFkRTdhGLx+hCC
+ECeVqXe3CsbR0vUcuA5phSaxvCNHDQIgUaYqag90Gnxe9kST5K1DRRoKpksaIPbG
+NDL6WCBbets=
+-----END PRIVATE KEY-----
+
+Title = RSA tests
+
+Verify = RSA-2048
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
+
+# Truncated digest
+Sign = RSA-2048
+Ctrl = digest:SHA512-224
+Input = "0123456789ABCDEF123456789ABC"
+Output = 5f720e9488139bb21e1c2f027fd5ce5993e6d31c5a8faaee833487b3a944d66891178868ace8070cad3ee2ffbe54aa4885a15fd1a7cc5166970fe1fd8c0423e72bd3e3b56fc4a53ed80aaaeca42497f0ec3c62113edc05cd006608f5eef7ce3ad4cba1069f68731dd28a524a1f93fcdc5547112d48d45586dd943ba0d443be9635720d8a61697c54c96627f0d85c5fbeaa3b4af86a65cf2fc3800dd5de34c046985f25d0efc0bb6edccc1d08b3a4fb9c8faffe181c7e68b31e374ad1440a4a664eec9ca0dc53a9d2f5bc7d9940d866f64201bcbc63612754df45727ea24b531d7de83d1bb707444859fa35521320c33bf6f4dbeb6fb56e653adbf7af15843f17
+
+Verify = RSA-2048
+Ctrl = digest:SHA512-224
+Input = "0123456789ABCDEF123456789ABC"
+Output = 5f720e9488139bb21e1c2f027fd5ce5993e6d31c5a8faaee833487b3a944d66891178868ace8070cad3ee2ffbe54aa4885a15fd1a7cc5166970fe1fd8c0423e72bd3e3b56fc4a53ed80aaaeca42497f0ec3c62113edc05cd006608f5eef7ce3ad4cba1069f68731dd28a524a1f93fcdc5547112d48d45586dd943ba0d443be9635720d8a61697c54c96627f0d85c5fbeaa3b4af86a65cf2fc3800dd5de34c046985f25d0efc0bb6edccc1d08b3a4fb9c8faffe181c7e68b31e374ad1440a4a664eec9ca0dc53a9d2f5bc7d9940d866f64201bcbc63612754df45727ea24b531d7de83d1bb707444859fa35521320c33bf6f4dbeb6fb56e653adbf7af15843f17
+
+VerifyRecover = RSA-2048
+Ctrl = digest:SHA1
+Input = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
+Output = "0123456789ABCDEF1234"
+
+# Leading zero in the signature
+Verify = RSA-2048
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = 00c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
+Result = VERIFY_ERROR
+
+VerifyRecover = RSA-2048
+Ctrl = digest:SHA1
+Input = 00c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
+Result = KEYOP_ERROR
+
+# Mismatched digest
+Verify = RSA-2048
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1233"
+Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
+Result = VERIFY_ERROR
+
+# Corrupted signature
+Verify = RSA-2048
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1233"
+Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ae
+Result = VERIFY_ERROR
+
+# parameter is not NULLt
+Verify = RSA-2048
+Ctrl = digest:sha1
+Input = "0123456789ABCDEF1234"
+Output = 3ec3fc29eb6e122bd7aa361cd09fe1bcbe85311096a7b9e4799cedfb2351ce0ab7fe4e75b4f6b37f67edd9c60c800f9ab941c0c157d7d880ca9de40c951d60fd293ae220d4bc510b1572d6e85a1bbbd8605b52e05f1c64fafdae59a1c2fbed214b7844d0134619de62851d5a0522e32e556e5950f3f97b8150e3f0dffee612c924201c27cd9bc8b423a71533380c276d3d59fcba35a2e80a1a192ec266a6c2255012cd86a349fe90a542b355fa3355b04da6cdf1df77f0e7bd44a90e880e1760266d233e465226f5db1c68857847d82072861ee266ddfc2e596845b77e1803274a579835ab5e4975d81d20b7df9cec7795489e4a2bdb8c1cf6a6b359945ac92c
+Result = VERIFY_ERROR
+
+# embedded digest too long
+Verify = RSA-2048
+Ctrl = digest:sha1
+Input = "0123456789ABCDEF1234"
+Output = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d
+Result = VERIFY_ERROR
+
+VerifyRecover = RSA-2048
+Ctrl = digest:sha1
+Input = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d
+Result = KEYOP_ERROR
+
+# embedded digest too short
+Verify = RSA-2048
+Ctrl = digest:sha1
+Input = "0123456789ABCDEF1234"
+Output = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d
+Result = VERIFY_ERROR
+
+VerifyRecover = RSA-2048
+Ctrl = digest:sha1
+Input = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d
+Result = KEYOP_ERROR
+
+# Garbage after DigestInfo
+Verify = RSA-2048
+Ctrl = digest:sha1
+Input = "0123456789ABCDEF1234"
+Output = 9ee34872d4271a7d8808af0a4052a145a6d6a8437d00da3ed14428c7f087cd39f4d43334c41af63e7fa1ba363fee7bcef401d9d36a662abbab55ce89a696e1be0dfa19a5d09ca617dd488787b6048baaefeb29bc8688b2fe3882de2b77c905b5a8b56cf9616041e5ec934ba6de863efe93acc4eef783fe7f72a00fa65d6093ed32bf98ce527e62ccb1d56317f4be18b7e0f55d7c36617d2d0678a306e3350956b662ac15df45215dd8f6b314babb9788e6c272fa461e4c9b512a11a4b92bc77c3a4c95c903fccb238794eca5c750477bf56ea6ee6a167367d881b485ae3889e7c489af8fdf38e0c0f2aed780831182e34abedd43c39281b290774bf35cc25274
+Result = VERIFY_ERROR
+
+VerifyRecover = RSA-2048
+Ctrl = digest:sha1
+Input = 9ee34872d4271a7d8808af0a4052a145a6d6a8437d00da3ed14428c7f087cd39f4d43334c41af63e7fa1ba363fee7bcef401d9d36a662abbab55ce89a696e1be0dfa19a5d09ca617dd488787b6048baaefeb29bc8688b2fe3882de2b77c905b5a8b56cf9616041e5ec934ba6de863efe93acc4eef783fe7f72a00fa65d6093ed32bf98ce527e62ccb1d56317f4be18b7e0f55d7c36617d2d0678a306e3350956b662ac15df45215dd8f6b314babb9788e6c272fa461e4c9b512a11a4b92bc77c3a4c95c903fccb238794eca5c750477bf56ea6ee6a167367d881b485ae3889e7c489af8fdf38e0c0f2aed780831182e34abedd43c39281b290774bf35cc25274
+Result = KEYOP_ERROR
+
+# invalid tag for parameter
+Verify = RSA-2048
+Ctrl = digest:sha1
+Input = "0123456789ABCDEF1234"
+Output = 49525db4d44c755e560cba980b1d85ea604b0e077fcadd4ba44072a3487bbddb835016200a7d8739cce2dc3223d9c20cbdd25059ab02277f1f21318efd18e21038ec89aa9d40680987129e8b41ba33bceb86518bdf47268b921cce2037acabca6575d832499538d6f40cdba0d40bd7f4d8ea6ca6e2eec87f294efc971407857f5d7db09f6a7b31e301f571c6d82a5e3d08d2bb3a36e673d28b910f5bec57f0fcc4d968fd7c94d0b9226dec17f5192ad8b42bcab6f26e1bea1fdc3b958199acb00f14ebcb2a352f3afcedd4c09000128a603bbeb9696dea13040445253972d46237a25c7845e3b464e6984c2348ea1f1210a9ff0b00d2d72b50db00c009bb39f9
+Result = VERIFY_ERROR
+
+# Verify using public key
+
+Verify = RSA-2048-PUBLIC
+Ctrl = digest:SHA1
+Input = "0123456789ABCDEF1234"
+Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
+
+# no padding
+
+# Too small input
+Sign = RSA-2048
+Ctrl = rsa_padding_mode:none
+Input = "0123456789ABCDEF123456789ABC"
+Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
+Result = KEYOP_ERROR
+
+# Digest set before padding
+Sign = RSA-2048
+Ctrl = digest:sha256
+Ctrl = rsa_padding_mode:none
+Input = 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
+Output = 64b0e9f9892371110c40ba5739dc0974002aa6e6160b481447c6819947c2d3b537a6e3775a85ae8ef75e000ca5498d772e3e797012ac8e462d72e567eb4afae0d1df72ffc84b3117045c58eb13aabb427fd6591577089dfa36d8d07ebd0670e4473683659b53b050c32397752cdee7c08de667f8de0ec01db01d440e433986e57ead2f877356b7d4985daf6c7ba09e46c061fe2372baa90cbd77557ef1143f46e27abf65c276f165a753e1f09e3719d1bfd8b32efe4aed2e97b502aa96ce472d3d91a09fae47b1a5103c448039ada73a57d7a001542bfb0b58c8b4bcb705a108a643434bb7ff997b58ba8b76425d7510aeff3e60f17af82191500517653fa5f3
+Result = PKEY_CTRL_ERROR
+
+# Digest set after padding
+Sign = RSA-2048
+Ctrl = rsa_padding_mode:none
+Ctrl = digest:sha256
+Input = 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
+Output = 64b0e9f9892371110c40ba5739dc0974002aa6e6160b481447c6819947c2d3b537a6e3775a85ae8ef75e000ca5498d772e3e797012ac8e462d72e567eb4afae0d1df72ffc84b3117045c58eb13aabb427fd6591577089dfa36d8d07ebd0670e4473683659b53b050c32397752cdee7c08de667f8de0ec01db01d440e433986e57ead2f877356b7d4985daf6c7ba09e46c061fe2372baa90cbd77557ef1143f46e27abf65c276f165a753e1f09e3719d1bfd8b32efe4aed2e97b502aa96ce472d3d91a09fae47b1a5103c448039ada73a57d7a001542bfb0b58c8b4bcb705a108a643434bb7ff997b58ba8b76425d7510aeff3e60f17af82191500517653fa5f3
+Result = PKEY_CTRL_ERROR
+
+Sign = RSA-2048
+Ctrl = rsa_padding_mode:none
+Input = 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
+Output = 64b0e9f9892371110c40ba5739dc0974002aa6e6160b481447c6819947c2d3b537a6e3775a85ae8ef75e000ca5498d772e3e797012ac8e462d72e567eb4afae0d1df72ffc84b3117045c58eb13aabb427fd6591577089dfa36d8d07ebd0670e4473683659b53b050c32397752cdee7c08de667f8de0ec01db01d440e433986e57ead2f877356b7d4985daf6c7ba09e46c061fe2372baa90cbd77557ef1143f46e27abf65c276f165a753e1f09e3719d1bfd8b32efe4aed2e97b502aa96ce472d3d91a09fae47b1a5103c448039ada73a57d7a001542bfb0b58c8b4bcb705a108a643434bb7ff997b58ba8b76425d7510aeff3e60f17af82191500517653fa5f3
+
+Verify = RSA-2048-PUBLIC
+Ctrl = rsa_padding_mode:none
+Input = 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
+Output = 64b0e9f9892371110c40ba5739dc0974002aa6e6160b481447c6819947c2d3b537a6e3775a85ae8ef75e000ca5498d772e3e797012ac8e462d72e567eb4afae0d1df72ffc84b3117045c58eb13aabb427fd6591577089dfa36d8d07ebd0670e4473683659b53b050c32397752cdee7c08de667f8de0ec01db01d440e433986e57ead2f877356b7d4985daf6c7ba09e46c061fe2372baa90cbd77557ef1143f46e27abf65c276f165a753e1f09e3719d1bfd8b32efe4aed2e97b502aa96ce472d3d91a09fae47b1a5103c448039ada73a57d7a001542bfb0b58c8b4bcb705a108a643434bb7ff997b58ba8b76425d7510aeff3e60f17af82191500517653fa5f3
+
+# Plaintext modified
+Verify = RSA-2048-PUBLIC
+Ctrl = rsa_padding_mode:none
+Input = 0223456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
+Output = 64b0e9f9892371110c40ba5739dc0974002aa6e6160b481447c6819947c2d3b537a6e3775a85ae8ef75e000ca5498d772e3e797012ac8e462d72e567eb4afae0d1df72ffc84b3117045c58eb13aabb427fd6591577089dfa36d8d07ebd0670e4473683659b53b050c32397752cdee7c08de667f8de0ec01db01d440e433986e57ead2f877356b7d4985daf6c7ba09e46c061fe2372baa90cbd77557ef1143f46e27abf65c276f165a753e1f09e3719d1bfd8b32efe4aed2e97b502aa96ce472d3d91a09fae47b1a5103c448039ada73a57d7a001542bfb0b58c8b4bcb705a108a643434bb7ff997b58ba8b76425d7510aeff3e60f17af82191500517653fa5f3
+Result = VERIFY_ERROR
+
+VerifyRecover = RSA-2048-PUBLIC
+Ctrl = rsa_padding_mode:none
+Input = 64b0e9f9892371110c40ba5739dc0974002aa6e6160b481447c6819947c2d3b537a6e3775a85ae8ef75e000ca5498d772e3e797012ac8e462d72e567eb4afae0d1df72ffc84b3117045c58eb13aabb427fd6591577089dfa36d8d07ebd0670e4473683659b53b050c32397752cdee7c08de667f8de0ec01db01d440e433986e57ead2f877356b7d4985daf6c7ba09e46c061fe2372baa90cbd77557ef1143f46e27abf65c276f165a753e1f09e3719d1bfd8b32efe4aed2e97b502aa96ce472d3d91a09fae47b1a5103c448039ada73a57d7a001542bfb0b58c8b4bcb705a108a643434bb7ff997b58ba8b76425d7510aeff3e60f17af82191500517653fa5f3
+Output = 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
+
+# RSA decrypt
+
+Decrypt = RSA-2048
+Input = 550AF55A2904E7B9762352F8FB7FA235A9CB053AACB2D5FCB8CA48453CB2EE3619746C701ABF2D4CC67003471A187900B05AA812BD25ED05C675DFC8C97A24A7BF49BD6214992CAD766D05A9A2B57B74F26A737E0237B8B76C45F1F226A836D7CFBC75BA999BDBE48DBC09227AA46C88F21DCCBA7840141AD5A5D71FD122E6BD6AC3E564780DFE623FC1CA9B995A6037BF0BBD43B205A84AC5444F34202C05CE9113087176432476576DE6FFFF9A52EA57C08BE3EC2F49676CB8E12F762AC71FA3C321E00AC988910C85FF52F93825666CE0D40FFAA0592078919D4493F46D95CCF76364C6D57760DD0B64805F9AFC76A2365A5575CA301D5103F0EA76CB9A78
+Output = "Hello World"
+
+# Corrupted ciphertext
+FIPSversion = <3.2.0
+Decrypt = RSA-2048
+Input = 550AF55A2904E7B9762352F8FB7FA235A9CB053AACB2D5FCB8CA48453CB2EE3619746C701ABF2D4CC67003471A187900B05AA812BD25ED05C675DFC8C97A24A7BF49BD6214992CAD766D05A9A2B57B74F26A737E0237B8B76C45F1F226A836D7CFBC75BA999BDBE48DBC09227AA46C88F21DCCBA7840141AD5A5D71FD122E6BD6AC3E564780DFE623FC1CA9B995A6037BF0BBD43B205A84AC5444F34202C05CE9113087176432476576DE6FFFF9A52EA57C08BE3EC2F49676CB8E12F762AC71FA3C321E00AC988910C85FF52F93825666CE0D40FFAA0592078919D4493F46D95CCF76364C6D57760DD0B64805F9AFC76A2365A5575CA301D5103F0EA76CB9A79
+Output = "Hello World"
+Result = KEYOP_ERROR
+
+# OAEP padding
+Decrypt = RSA-2048
+Ctrl = rsa_padding_mode:oaep
+Input = 458708DFBD42A1297CE7A9C86C7087AB80B1754810929B89C5107CA55368587686986FCE94D86CC1595B3FB736223A656EC0F34D18BA1CC5665593610F56C58E26B272D584F3D983A5C91085700755AEBD921FB280BBA3EDA7046EC07B43E7298E52D59EDC92BE4639A8CE08B2F85976ECF6D98CC469EEB9D5D8E2A32EA8A6626EDAFE1038B3DF455668A9F3C77CAD8B92FB872E00058C3D2A7EDE1A1F03FC5622084AE04D9D24F6BF0995C58D35B93B699B9763595E123F2AB0863CC9229EB290E2EDE7715C7A8F39E0B9A3E2E1B56EBB62F1CBFBB5986FB212EBD785B83D01D968B11D1756C7337F70C1F1A63BFF03608E24F3A2FD44E67F832A8701C5D5AF
+Output = "Hello World"
+
+# OAEP padding, corrupted ciphertext
+Decrypt = RSA-2048
+Ctrl = rsa_padding_mode:oaep
+Input = 458708DFBD42A1297CE7A9C86C7087AB80B1754810929B89C5107CA55368587686986FCE94D86CC1595B3FB736223A656EC0F34D18BA1CC5665593610F56C58E26B272D584F3D983A5C91085700755AEBD921FB280BBA3EDA7046EC07B43E7298E52D59EDC92BE4639A8CE08B2F85976ECF6D98CC469EEB9D5D8E2A32EA8A6626EDAFE1038B3DF455668A9F3C77CAD8B92FB872E00058C3D2A7EDE1A1F03FC5622084AE04D9D24F6BF0995C58D35B93B699B9763595E123F2AB0863CC9229EB290E2EDE7715C7A8F39E0B9A3E2E1B56EBB62F1CBFBB5986FB212EBD785B83D01D968B11D1756C7337F70C1F1A63BFF03608E24F3A2FD44E67F832A8701C5D5AC
+Output = "Hello World"
+Result = KEYOP_ERROR
+
+# Illegal RSA key derivation
+Derive = RSA-2048
+Result = KEYOP_INIT_ERROR
+Reason = operation not supported for this keytype
+
+# RSA PSS key tests
+
+# PSS only key, no parameter restrictions
+PrivateKey = RSA-PSS
+-----BEGIN PRIVATE KEY-----
+MIIEugIBADALBgkqhkiG9w0BAQoEggSmMIIEogIBAAKCAQEAzQCB6nsq4eoG1Z98
+c9n/uUoJYVwuS6fGNs7wjdNTPsMYVSWwFcdpuZp31nJb+cNTKptuX2Yn1fuFFgdo
+092py9NZdFEXF9w9MJ0vxH7kH5fjKtt/ndhkocR2emZuzXG8Gqz151F/SzhZT+qb
+BeQtWtqZEgCAE+RTFqTZu47QhriNKHWLrK+SLUaoaLSF0jnJuusOK2RZJxD0Ky0e
+oKS0gCwL7Ksyj4posAc721Rv7qmAnShJkSs5DBUyvH4px2WPgXX65G80My/4e8qz
+5AZJuYV3hp2g6nGDU/ByJ1SIaRNkh2DRIr5nbg/Eg90g/8Mb2pajGWbJqi51rQPe
+R+HETwIDAQABAoIBAGApeseZGxZ6BtayR1i4y+IIvrmy2eyXOL2A+QouNQBd184p
+LZ4puohb0xb+8fIJE7wKyQ1rCAiyQU2CEERB2GJKM84CM8j3gKSLN1r/AtdnEiKK
+cCSE2z+evszPu+4XCduhgoANlJ6eQhbgv/NVg4j4vZDaNzodgnQ+w/vdFCf9FoJa
+ZXoxaRLoaVNlEXyi+EXJCUBfysVfiV/BXSA4bCbueMnpkHUCmheKbB5M8MIA6KnP
+sn6dFW+G5sKtwisahKHNXKWyeQh115QHyEs1I5XLgcw/7VuwQ7ae3gwHIEVQAlzu
+jF9EAXC2Egu0jg90e82PUiEQhQ3wQ8Qo39GHBTECgYEA9vlhtHy8A1067evH3oUK
+lWtl7Nuc9gdkBj8VqkhVPFjZcv5mdQVuNd39w3vzufL2Iu4nEzclaEnJvvIXb+j3
+w/i7kbo3TdU7rz3sgU0r3sEMH9yIzdFodvJrHt+j8JQZft9NQv8fspcRA7iYyoWc
+QnKHCGqEKrQQu2nPLTWva+MCgYEA1H5ySn/0EEiycMJSSkEBh4tzFZu3PT28GHsi
+DmNbNTT5biQ6GE2T+GC2v7trccHtmh4fRYWDAjwwHpamksGgi1PQ7JypEBANgEUe
+O33GoBusSuzvjfeYhGvCNaCMu6LPTAaATMESGelWCMcU4/FDDUkfrbujKldRoE+X
+dFg0yaUCgYAh8kUrubld/QKMkUv3mfHKd+ialdUNPBbThPhFX4vXr56z36PVkdmE
+Le8jX3YwqOSMCI/2ZC4QF5RTWpM+HpdvqFCfxyiy2gxKGgjX/PN6uq4f8wAayh3B
+u7Bdnf+6oaCff7Hu84I32evMxyK5M4Q23ecRkRJ5jCaAnBqN7EMgYQKBgB91EKpi
+wtjeSjxTKCeB9B4C0Oi0Aq54Qy5EnEgRAWGhFAPwLQGICo3Mk4FS15chpHEaYHrE
+Rx6/lkgQ+VvkekXmBJnin0yXc8g3c0BPYGY3cowtA1G7A8MmyLtzpyHn+lRA6iFy
+u6FGX8ww3LDZ+Jkw6BWqH3+XKahX4A4DON1ZAoGATR8NdW/nfgEJmmUvUKiLe2hd
+xb8AmB1dI3b9DG/inNW2OHNEeTBac608FZnTnq47rgNfvW/tB8KN5wWTOHmgbkjm
+pgNobtjiVgpfavHywk+vSqlg44IYbxXu3OmiSRrnMGgN1M93i3D6qGgmqzIjR3zJ
+E3exmm1aLq6iGXYL7tU=
+-----END PRIVATE KEY-----
+
+# PSS public key default parameters
+PublicKey = RSA-PSS-DEFAULT
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQowAAOCAQ8AMIIBCgKCAQEAzQCB6nsq4eoG1Z98c9n/
+uUoJYVwuS6fGNs7wjdNTPsMYVSWwFcdpuZp31nJb+cNTKptuX2Yn1fuFFgdo092p
+y9NZdFEXF9w9MJ0vxH7kH5fjKtt/ndhkocR2emZuzXG8Gqz151F/SzhZT+qbBeQt
+WtqZEgCAE+RTFqTZu47QhriNKHWLrK+SLUaoaLSF0jnJuusOK2RZJxD0Ky0eoKS0
+gCwL7Ksyj4posAc721Rv7qmAnShJkSs5DBUyvH4px2WPgXX65G80My/4e8qz5AZJ
+uYV3hp2g6nGDU/ByJ1SIaRNkh2DRIr5nbg/Eg90g/8Mb2pajGWbJqi51rQPeR+HE
+TwIDAQAB
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = RSA-PSS:RSA-PSS-DEFAULT
+
+# Key with invalid negative minimum salt length
+PublicKey = RSA-PSS-BAD
+-----BEGIN PUBLIC KEY-----
+MIIBJzASBgkqhkiG9w0BAQowBaIDAgH/A4IBDwAwggEKAoIBAQDNAIHqeyrh6gbV
+n3xz2f+5SglhXC5Lp8Y2zvCN01M+wxhVJbAVx2m5mnfWclv5w1Mqm25fZifV+4UW
+B2jT3anL01l0URcX3D0wnS/EfuQfl+Mq23+d2GShxHZ6Zm7NcbwarPXnUX9LOFlP
+6psF5C1a2pkSAIAT5FMWpNm7jtCGuI0odYusr5ItRqhotIXSOcm66w4rZFknEPQr
+LR6gpLSALAvsqzKPimiwBzvbVG/uqYCdKEmRKzkMFTK8finHZY+BdfrkbzQzL/h7
+yrPkBkm5hXeGnaDqcYNT8HInVIhpE2SHYNEivmduD8SD3SD/wxvalqMZZsmqLnWt
+A95H4cRPAgMBAAE=
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = RSA-PSS:RSA-PSS-BAD
+
+
+# Key with minimum salt length exceeding maximum permitted value
+PublicKey = RSA-PSS-BAD2
+-----BEGIN PUBLIC KEY-----
+MIIBKDATBgkqhkiG9w0BAQowBqIEAgIBAAOCAQ8AMIIBCgKCAQEAzQCB6nsq4eoG
+1Z98c9n/uUoJYVwuS6fGNs7wjdNTPsMYVSWwFcdpuZp31nJb+cNTKptuX2Yn1fuF
+Fgdo092py9NZdFEXF9w9MJ0vxH7kH5fjKtt/ndhkocR2emZuzXG8Gqz151F/SzhZ
+T+qbBeQtWtqZEgCAE+RTFqTZu47QhriNKHWLrK+SLUaoaLSF0jnJuusOK2RZJxD0
+Ky0eoKS0gCwL7Ksyj4posAc721Rv7qmAnShJkSs5DBUyvH4px2WPgXX65G80My/4
+e8qz5AZJuYV3hp2g6nGDU/ByJ1SIaRNkh2DRIr5nbg/Eg90g/8Mb2pajGWbJqi51
+rQPeR+HETwIDAQAB
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = RSA-PSS:RSA-PSS-BAD2
+
+# Zero salt length makes output deterministic
+Sign = RSA-2048
+Ctrl = digest:sha256
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:0
+Input="0123456789ABCDEF0123456789ABCDEF"
+Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DDD0635A96B28F854E50145518482CB49E963054621B53C60C498D07C16E9C2789C893CF38D4D86900DE71BDE463BD2761D1271E358C7480A1AC0BAB930DDF39602AD1BC165B5D7436B516B7A7858E8EB7AB1C420EEB482F4D207F0E462B1724959320A084E13848D11D10FB593E66BF680BF6D3F345FC3E9C3DE60ABBAC37E1C6EC80A268C8D9FC49626C679097AA690BC1AA662B95EB8DB70390861AA0898229F9349B4B5FDD030D4928C47084708A933144BE23BD3C6E661B85B2C0EF9ED36D498D5B7320E8194D363D4AD478C059BAE804181965E0B81B663158A
+
+# Verify of above signature
+Verify = RSA-2048-PUBLIC
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:0
+Ctrl = digest:sha256
+Input="0123456789ABCDEF0123456789ABCDEF"
+Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DDD0635A96B28F854E50145518482CB49E963054621B53C60C498D07C16E9C2789C893CF38D4D86900DE71BDE463BD2761D1271E358C7480A1AC0BAB930DDF39602AD1BC165B5D7436B516B7A7858E8EB7AB1C420EEB482F4D207F0E462B1724959320A084E13848D11D10FB593E66BF680BF6D3F345FC3E9C3DE60ABBAC37E1C6EC80A268C8D9FC49626C679097AA690BC1AA662B95EB8DB70390861AA0898229F9349B4B5FDD030D4928C47084708A933144BE23BD3C6E661B85B2C0EF9ED36D498D5B7320E8194D363D4AD478C059BAE804181965E0B81B663158A
+
+# Verify using salt length auto detect
+Verify = RSA-2048-PUBLIC
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:auto
+Input="0123456789ABCDEF0123"
+Output = 6BF7EDC63A0BA184EEEC7F3020FEC8F5EBF38C2B76481881F48BCCE5796E7AB294548BA9AE810457C7723CABD1BDE94CF59CF7C0FC7461B22760C8ED703DD98E97BFDD61FA8D1181C411F6DEE5FF159F4850746D78EDEE385A363DC28E2CB373D5CAD7953F3BD5E639BE345732C03A1BDEA268814DA036EB1891C82D4012F3B903D86636055F87B96FC98806AD1B217685A4D754046A5DE0B0D7870664BE07902153EC85BA457BE7D7F89D7FE0F626D02A9CBBB2BB479DDA1A5CAE75247FB7BF6BFB15C1D3FD9E6B1573CCDBC72011C3B97716058BB11C7EA2E4E56ADAFE1F5DE6A7FD405AC5890100F9C3408EFFB5C73BF73F48177FF743B4B819D0699D507B
+
+# Digest too short
+Verify = RSA-2048-PUBLIC
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:0
+Ctrl = digest:sha256
+Input="0123456789ABCDEF0123456789ABCDE"
+Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DDD0635A96B28F854E50145518482CB49E963054621B53C60C498D07C16E9C2789C893CF38D4D86900DE71BDE463BD2761D1271E358C7480A1AC0BAB930DDF39602AD1BC165B5D7436B516B7A7858E8EB7AB1C420EEB482F4D207F0E462B1724959320A084E13848D11D10FB593E66BF680BF6D3F345FC3E9C3DE60ABBAC37E1C6EC80A268C8D9FC49626C679097AA690BC1AA662B95EB8DB70390861AA0898229F9349B4B5FDD030D4928C47084708A933144BE23BD3C6E661B85B2C0EF9ED36D498D5B7320E8194D363D4AD478C059BAE804181965E0B81B663158A
+Result = VERIFY_ERROR
+
+# Digest too long
+Verify = RSA-2048-PUBLIC
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:0
+Ctrl = digest:sha256
+Input="0123456789ABCDEF0123456789ABCDEF0"
+Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DDD0635A96B28F854E50145518482CB49E963054621B53C60C498D07C16E9C2789C893CF38D4D86900DE71BDE463BD2761D1271E358C7480A1AC0BAB930DDF39602AD1BC165B5D7436B516B7A7858E8EB7AB1C420EEB482F4D207F0E462B1724959320A084E13848D11D10FB593E66BF680BF6D3F345FC3E9C3DE60ABBAC37E1C6EC80A268C8D9FC49626C679097AA690BC1AA662B95EB8DB70390861AA0898229F9349B4B5FDD030D4928C47084708A933144BE23BD3C6E661B85B2C0EF9ED36D498D5B7320E8194D363D4AD478C059BAE804181965E0B81B663158A
+Result = VERIFY_ERROR
+
+# Wrong salt length
+Verify = RSA-2048
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:2
+Ctrl = digest:sha256
+Input="0123456789ABCDEF0123456789ABCDEF"
+Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DDD0635A96B28F854E50145518482CB49E963054621B53C60C498D07C16E9C2789C893CF38D4D86900DE71BDE463BD2761D1271E358C7480A1AC0BAB930DDF39602AD1BC165B5D7436B516B7A7858E8EB7AB1C420EEB482F4D207F0E462B1724959320A084E13848D11D10FB593E66BF680BF6D3F345FC3E9C3DE60ABBAC37E1C6EC80A268C8D9FC49626C679097AA690BC1AA662B95EB8DB70390861AA0898229F9349B4B5FDD030D4928C47084708A933144BE23BD3C6E661B85B2C0EF9ED36D498D5B7320E8194D363D4AD478C059BAE804181965E0B81B663158A
+Result = VERIFY_ERROR
+
+# Verify using default parameters, explicitly setting parameters
+Verify = RSA-PSS-DEFAULT
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:20
+Ctrl = digest:sha1
+Input="0123456789ABCDEF0123"
+Output = 3EFE09D88509027D837BFA5F8471CF7B69E6DF395DD999BB9CA42021F15722D9AC76670507C6BCFB73F64FB2211B611B8F140E76EBDB064BD762FDBA89D019E304A0D6B274E1C2FE1DF50005598A0306AF805416094E2A5BA60BC72BDE38CE061E853ED40F14967A8B9CA4DC739B462F89558F12FDF2D8D19FBEF16AD66FE2DDDA8BEE983ECBD873064244849D8D94B5B33F45E076871A47ED653E73257A2BE2DB3C0878094B0D2B6B682C8007DFD989425FB39A1FEEC9EED5876414601A49176EC344F5E3EDEE81CA2DDD29B7364F4638112CB3A547E2BC170E28CB66BDABE863754BE8AD5BA230567B575266F4B6B4CF81F28310ABF05351CC9E2DB85D00BF
+
+# Verify explicitly setting parameters "digest" salt length
+Verify = RSA-PSS-DEFAULT
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:digest
+Ctrl = digest:sha1
+Input="0123456789ABCDEF0123"
+Output = 3EFE09D88509027D837BFA5F8471CF7B69E6DF395DD999BB9CA42021F15722D9AC76670507C6BCFB73F64FB2211B611B8F140E76EBDB064BD762FDBA89D019E304A0D6B274E1C2FE1DF50005598A0306AF805416094E2A5BA60BC72BDE38CE061E853ED40F14967A8B9CA4DC739B462F89558F12FDF2D8D19FBEF16AD66FE2DDDA8BEE983ECBD873064244849D8D94B5B33F45E076871A47ED653E73257A2BE2DB3C0878094B0D2B6B682C8007DFD989425FB39A1FEEC9EED5876414601A49176EC344F5E3EDEE81CA2DDD29B7364F4638112CB3A547E2BC170E28CB66BDABE863754BE8AD5BA230567B575266F4B6B4CF81F28310ABF05351CC9E2DB85D00BF
+
+# Verify using salt length larger than minimum
+Verify = RSA-PSS-DEFAULT
+Ctrl = rsa_pss_saltlen:30
+Input="0123456789ABCDEF0123"
+Output = 6BF7EDC63A0BA184EEEC7F3020FEC8F5EBF38C2B76481881F48BCCE5796E7AB294548BA9AE810457C7723CABD1BDE94CF59CF7C0FC7461B22760C8ED703DD98E97BFDD61FA8D1181C411F6DEE5FF159F4850746D78EDEE385A363DC28E2CB373D5CAD7953F3BD5E639BE345732C03A1BDEA268814DA036EB1891C82D4012F3B903D86636055F87B96FC98806AD1B217685A4D754046A5DE0B0D7870664BE07902153EC85BA457BE7D7F89D7FE0F626D02A9CBBB2BB479DDA1A5CAE75247FB7BF6BFB15C1D3FD9E6B1573CCDBC72011C3B97716058BB11C7EA2E4E56ADAFE1F5DE6A7FD405AC5890100F9C3408EFFB5C73BF73F48177FF743B4B819D0699D507B
+
+# Verify using maximum salt length
+Verify = RSA-PSS-DEFAULT
+Ctrl = rsa_pss_saltlen:max
+Input="0123456789ABCDEF0123"
+Output = 4470DCFE812DEE2E58E4301D4ED274AB348FE040B724B2CD1D8CD0914BFF375F0B86FCB32BFA8AEA9BD22BD7C4F1ADD4F3D215A5CFCC99055BAFECFC23800E9BECE19A08C66BEBC5802122D13A732E5958FC228DCC0B49B5B4B1154F032D8FA2F3564AA949C1310CC9266B0C47F86D449AC9D2E7678347E7266E2D7C888CCE1ADF44A109A293F8516AE2BD94CE220F26E137DB8E7A66BB9FCE052CDC1D0BE24D8CEBB20D10125F26B069F117044B9E1D16FDDAABCA5340AE1702F37D0E1C08A2E93801C0A41035C6C73DA02A0E32227EAFB0B85E79107B59650D0EE7DC32A6772CCCE90F06369B2880FE87ED76997BA61F5EA818091EE88F8B0D6F24D02A3FC6
+
+# Attempt to change salt length below minimum
+Verify = RSA-PSS-DEFAULT
+Ctrl = rsa_pss_saltlen:0
+Result = PKEY_CTRL_ERROR
+
+# Attempt to change padding mode
+# Note this used to return PKEY_CTRL_INVALID
+# but it is limited because setparams only returns 0 or 1.
+Verify = RSA-PSS-DEFAULT
+Ctrl = rsa_padding_mode:pkcs1
+Result = PKEY_CTRL_ERROR
+
+# Attempt to change digest
+Verify = RSA-PSS-DEFAULT
+Ctrl = digest:sha256
+Result = PKEY_CTRL_ERROR
+
+# Invalid key: rejected when we try to init
+Verify = RSA-PSS-BAD
+Result = KEYOP_INIT_ERROR
+Reason = invalid salt length
+
+# Invalid key: rejected when we try to init
+Verify = RSA-PSS-BAD2
+Result = KEYOP_INIT_ERROR
+Reason = invalid salt length
+
+
+# Additional RSA-PSS and RSA-OAEP tests converted from
+# ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1-vec.zip
+Title = RSA PSS/OAEP (from RSASecurity FTP)
+
+# 1024 bit key
+PublicKey=RSA-PSS-1
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLs
+DjatUqRN/rHmH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2V
+CAltWyuLbfXWce9jd8CSHLI8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh
+4fINDOjP+yJJvZohNwIDAQAB
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-1
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=cd8b6538cb8e8de566b68bd067569dbf1ee2718e
+Output=9074308fb598e9701b2294388e52f971faac2b60a5145af185df5287b5ed2887e57ce7fd44dc8634e407c8e0e4360bc226f3ec227f9d9e54638e8d31f5051215df6ebb9c2f9579aa77598a38f914b5b9c1bd83c4e2f9f382a0d0aa3542ffee65984a601bc69eb28deb27dca12c82c2d4c3f66cd500f1ff2b994d8a4e30cbb33c
+
+Verify=RSA-PSS-1
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=e35befc17a1d160b9ce35fbd8eb16e7ee491d3fd
+Output=3ef7f46e831bf92b32274142a585ffcefbdca7b32ae90d10fb0f0c729984f04ef29a9df0780775ce43739b97838390db0a5505e63de927028d9d29b219ca2c4517832558a55d694a6d25b9dab66003c4cccd907802193be5170d26147d37b93590241be51c25055f47ef62752cfbe21418fafe98c22c4d4d47724fdb5669e843
+
+Verify=RSA-PSS-1
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=0652ec67bcee30f9d2699122b91c19abdba89f91
+Output=666026fba71bd3e7cf13157cc2c51a8e4aa684af9778f91849f34335d141c00154c4197621f9624a675b5abc22ee7d5baaffaae1c9baca2cc373b3f33e78e6143c395a91aa7faca664eb733afd14d8827259d99a7550faca501ef2b04e33c23aa51f4b9e8282efdb728cc0ab09405a91607c6369961bc8270d2d4f39fce612b1
+
+Verify=RSA-PSS-1
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=39c21c4cceda9c1adf839c744e1212a6437575ec
+Output=4609793b23e9d09362dc21bb47da0b4f3a7622649a47d464019b9aeafe53359c178c91cd58ba6bcb78be0346a7bc637f4b873d4bab38ee661f199634c547a1ad8442e03da015b136e543f7ab07c0c13e4225b8de8cce25d4f6eb8400f81f7e1833b7ee6e334d370964ca79fdb872b4d75223b5eeb08101591fb532d155a6de87
+
+Verify=RSA-PSS-1
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=36dae913b77bd17cae6e7b09453d24544cebb33c
+Output=1d2aad221ca4d31ddf13509239019398e3d14b32dc34dc5af4aeaea3c095af73479cf0a45e5629635a53a018377615b16cb9b13b3e09d671eb71e387b8545c5960da5a64776e768e82b2c93583bf104c3fdb23512b7b4e89f633dd0063a530db4524b01c3f384c09310e315a79dcd3d684022a7f31c865a664e316978b759fad
+
+Verify=RSA-PSS-1
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=45eef191f4f79c31fe5d2ede7e5098994e929d2d
+Output=2a34f6125e1f6b0bf971e84fbd41c632be8f2c2ace7de8b6926e31ff93e9af987fbc06e51e9be14f5198f91f3f953bd67da60a9df59764c3dc0fe08e1cbef0b75f868d10ad3fba749fef59fb6dac46a0d6e504369331586f58e4628f39aa278982543bc0eeb537dc61958019b394fb273f215858a0a01ac4d650b955c67f4c58
+
+PublicKey=RSA-PSS-9
+-----BEGIN PUBLIC KEY-----
+MIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQDmvWkqyWZFeQQD/dD1vri5v5Lt
+EAB/w2UEZBndBsBcW1svSOz5ieTOJpEJl5y7QLSgrSTSJIPR7jFa1MyxU0JoNSaR
+xST23Y5sKdIkzyRpc67IbFv2sUAahQ0bmtG7jLzsR7BvD4x/RdP8jzGSmcVDPdvC
+swU7R97S7NSkyu/WFIM9yLtiLzF+0Ha4BX/o3j+ESArV6D5KYZBKTySPs5cCc1fh
+0w5GMTmBXG/U/VrFuBcqRSMOy2MYoE8UVdhOWosCAwEAAQ==
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-9
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=2715a49b8b0012cd7aee84c116446e6dfe3faec0
+Output=586107226c3ce013a7c8f04d1a6a2959bb4b8e205ba43a27b50f124111bc35ef589b039f5932187cb696d7d9a32c0c38300a5cdda4834b62d2eb240af33f79d13dfbf095bf599e0d9686948c1964747b67e89c9aba5cd85016236f566cc5802cb13ead51bc7ca6bef3b94dcbdbb1d570469771df0e00b1a8a06777472d2316279edae86474668d4e1efff95f1de61c6020da32ae92bbf16520fef3cf4d88f61121f24bbd9fe91b59caf1235b2a93ff81fc403addf4ebdea84934a9cdaf8e1a9e
+
+Verify=RSA-PSS-9
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=2dac956d53964748ac364d06595827c6b4f143cd
+Output=80b6d643255209f0a456763897ac9ed259d459b49c2887e5882ecb4434cfd66dd7e1699375381e51cd7f554f2c271704b399d42b4be2540a0eca61951f55267f7c2878c122842dadb28b01bd5f8c025f7e228418a673c03d6bc0c736d0a29546bd67f786d9d692ccea778d71d98c2063b7a71092187a4d35af108111d83e83eae46c46aa34277e06044589903788f1d5e7cee25fb485e92949118814d6f2c3ee361489016f327fb5bc517eb50470bffa1afa5f4ce9aa0ce5b8ee19bf5501b958
+
+Verify=RSA-PSS-9
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=28d98c46cccafbd3bc04e72f967a54bd3ea12298
+Output=484408f3898cd5f53483f80819efbf2708c34d27a8b2a6fae8b322f9240237f981817aca1846f1084daa6d7c0795f6e5bf1af59c38e1858437ce1f7ec419b98c8736adf6dd9a00b1806d2bd3ad0a73775e05f52dfef3a59ab4b08143f0df05cd1ad9d04bececa6daa4a2129803e200cbc77787caf4c1d0663a6c5987b605952019782caf2ec1426d68fb94ed1d4be816a7ed081b77e6ab330b3ffc073820fecde3727fcbe295ee61a050a343658637c3fd659cfb63736de32d9f90d3c2f63eca
+
+Verify=RSA-PSS-9
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=0866d2ff5a79f25ef668cd6f31b42dee421e4c0e
+Output=84ebeb481be59845b46468bafb471c0112e02b235d84b5d911cbd1926ee5074ae0424495cb20e82308b8ebb65f419a03fb40e72b78981d88aad143053685172c97b29c8b7bf0ae73b5b2263c403da0ed2f80ff7450af7828eb8b86f0028bd2a8b176a4d228cccea18394f238b09ff758cc00bc04301152355742f282b54e663a919e709d8da24ade5500a7b9aa50226e0ca52923e6c2d860ec50ff480fa57477e82b0565f4379f79c772d5c2da80af9fbf325ece6fc20b00961614bee89a183e
+
+Verify=RSA-PSS-9
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=6a5b4be4cd36cc97dfde9995efbf8f097a4a991a
+Output=82102df8cb91e7179919a04d26d335d64fbc2f872c44833943241de8454810274cdf3db5f42d423db152af7135f701420e39b494a67cbfd19f9119da233a23da5c6439b5ba0d2bc373eee3507001378d4a4073856b7fe2aba0b5ee93b27f4afec7d4d120921c83f606765b02c19e4d6a1a3b95fa4c422951be4f52131077ef17179729cddfbdb56950dbaceefe78cb16640a099ea56d24389eef10f8fecb31ba3ea3b227c0a86698bb89e3e9363905bf22777b2a3aa521b65b4cef76d83bde4c
+
+Verify=RSA-PSS-9
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=b9dfd1df76a461c51e6576c6c8ed0a923d1c50e7
+Output=a7fdb0d259165ca2c88d00bbf1028a867d337699d061193b17a9648e14ccbbaadeacaacdec815e7571294ebb8a117af205fa078b47b0712c199e3ad05135c504c24b81705115740802487992ffd511d4afc6b854491eb3f0dd523139542ff15c3101ee85543517c6a3c79417c67e2dd9aa741e9a29b06dcb593c2336b3670ae3afbac7c3e76e215473e866e338ca244de00b62624d6b9426822ceae9f8cc460895f41250073fd45c5a1e7b425c204a423a699159f6903e710b37a7bb2bc8049f
+
+PublicKey=RSA-PSS-10
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApd2GesTLAvkLlFfUjBSn
+cO+ZHFbDnA7GX9Ea+ok3zqV7m+esc7RcABdhW4LWIuMYdTtgJ8D9FXvhL4CQ/uKn
+rc0O73WfiLpJl8ekLVjJqhLLma4AH+UhwTu1QxRFqNWuT15MfpSKwifTYEBx8g5X
+fpBfvrFd+vBtHeWuYlPWOmohILMaXaXavJVQYA4g8n03OeJieSX+o8xQnyHf8E5u
+6kVJxUDWgJ/5MH7t6R//WHM9g4WiN9bTcFoz45GQCZIHDfet8TV89+NwDONmfeg/
+F7jfF3jbOB3OCctK0FilEQAac4GY7ifPVaE7dUU5kGWC7IsXS9WNXR89dnxhNyGu
+BQIDAQAB
+-----END PUBLIC KEY-----
+
+Verify=RSA-PSS-10
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=9596bb630cf6a8d4ea4600422b9eba8b13675dd4
+Output=82c2b160093b8aa3c0f7522b19f87354066c77847abf2a9fce542d0e84e920c5afb49ffdfdace16560ee94a1369601148ebad7a0e151cf16331791a5727d05f21e74e7eb811440206935d744765a15e79f015cb66c532c87a6a05961c8bfad741a9a6657022894393e7223739796c02a77455d0f555b0ec01ddf259b6207fd0fd57614cef1a5573baaff4ec00069951659b85f24300a25160ca8522dc6e6727e57d019d7e63629b8fe5e89e25cc15beb3a647577559299280b9b28f79b0409000be25bbd96408ba3b43cc486184dd1c8e62553fa1af4040f60663de7f5e49c04388e257f1ce89c95dab48a315d9b66b1b7628233876ff2385230d070d07e1666
+
+Verify=RSA-PSS-10
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=b503319399277fd6c1c8f1033cbf04199ea21716
+Output=14ae35d9dd06ba92f7f3b897978aed7cd4bf5ff0b585a40bd46ce1b42cd2703053bb9044d64e813d8f96db2dd7007d10118f6f8f8496097ad75e1ff692341b2892ad55a633a1c55e7f0a0ad59a0e203a5b8278aec54dd8622e2831d87174f8caff43ee6c46445345d84a59659bfb92ecd4c818668695f34706f66828a89959637f2bf3e3251c24bdba4d4b7649da0022218b119c84e79a6527ec5b8a5f861c159952e23ec05e1e717346faefe8b1686825bd2b262fb2531066c0de09acde2e4231690728b5d85e115a2f6b92b79c25abc9bd9399ff8bcf825a52ea1f56ea76dd26f43baafa18bfa92a504cbd35699e26d1dcc5a2887385f3c63232f06f3244c3
+
+Verify=RSA-PSS-10
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=50aaede8536b2c307208b275a67ae2df196c7628
+Output=6e3e4d7b6b15d2fb46013b8900aa5bbb3939cf2c095717987042026ee62c74c54cffd5d7d57efbbf950a0f5c574fa09d3fc1c9f513b05b4ff50dd8df7edfa20102854c35e592180119a70ce5b085182aa02d9ea2aa90d1df03f2daae885ba2f5d05afdac97476f06b93b5bc94a1a80aa9116c4d615f333b098892b25fface266f5db5a5a3bcc10a824ed55aad35b727834fb8c07da28fcf416a5d9b2224f1f8b442b36f91e456fdea2d7cfe3367268de0307a4c74e924159ed33393d5e0655531c77327b89821bdedf880161c78cd4196b5419f7acc3f13e5ebf161b6e7c6724716ca33b85c2e25640192ac2859651d50bde7eb976e51cec828b98b6563b86bb
+
+Verify=RSA-PSS-10
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=aa0b72b8b371ddd10c8ae474425ccccf8842a294
+Output=34047ff96c4dc0dc90b2d4ff59a1a361a4754b255d2ee0af7d8bf87c9bc9e7ddeede33934c63ca1c0e3d262cb145ef932a1f2c0a997aa6a34f8eaee7477d82ccf09095a6b8acad38d4eec9fb7eab7ad02da1d11d8e54c1825e55bf58c2a23234b902be124f9e9038a8f68fa45dab72f66e0945bf1d8bacc9044c6f07098c9fcec58a3aab100c805178155f030a124c450e5acbda47d0e4f10b80a23f803e774d023b0015c20b9f9bbe7c91296338d5ecb471cafb032007b67a60be5f69504a9f01abb3cb467b260e2bce860be8d95bf92c0c8e1496ed1e528593a4abb6df462dde8a0968dffe4683116857a232f5ebf6c85be238745ad0f38f767a5fdbf486fb
+
+Verify=RSA-PSS-10
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=fad3902c9750622a2bc672622c48270cc57d3ea8
+Output=7e0935ea18f4d6c1d17ce82eb2b3836c55b384589ce19dfe743363ac9948d1f346b7bfddfe92efd78adb21faefc89ade42b10f374003fe122e67429a1cb8cbd1f8d9014564c44d120116f4990f1a6e38774c194bd1b8213286b077b0499d2e7b3f434ab12289c556684deed78131934bb3dd6537236f7c6f3dcb09d476be07721e37e1ceed9b2f7b406887bd53157305e1c8b4f84d733bc1e186fe06cc59b6edb8f4bd7ffefdf4f7ba9cfb9d570689b5a1a4109a746a690893db3799255a0cb9215d2d1cd490590e952e8c8786aa0011265252470c041dfbc3eec7c3cbf71c24869d115c0cb4a956f56d530b80ab589acfefc690751ddf36e8d383f83cedd2cc
+
+Verify=RSA-PSS-10
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_mgf1_md:sha1
+Input=122196deb5d122bd8c6fc781ff6924d7c695aade
+Output=6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f
+
+PrivateKey=RSA-OAEP-1
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKizsoSvjrULOHA0
+qGDxRsSRnzGHY81sVZjIrkgRoeCrxMfgsILWk6Xn/O1nXPRmhRJ3LAy8ZKdCxsYw
+9TPIzHL2KugzxAvyWELphLt4vb+XwBB9Vb22YvXE4Pq5hFy1FI73OS3Tqv+Trh5r
+Znuz1CR2FtT1uhDUz9Im3ojTnxb7AgMBAAECgYBTM5z9t5/IRmplXHMWrKhcVf2P
+bdiY/a8RlRfvT1Lo/Y4ljfk/7hgPoOSrKWk82DsVKlU9SsTRgSuLn6WvDn9V/nME
+30FXCSbzMR8VxNZacyxIMRbuPT0tCvNUmtm/fL+3itiE+E1b6wRyTcc2mzHe830M
+9Tnpz83T3mU3KerV0QJBANMnN+cmf/4TQbLVwNFQqBtYb7MTK+0vjVJihkqcufMK
+84vkSFmNQToXLvuALCGs8cEcUgwvJqRx3K0hLqx8o50CQQDMiFPR1U2mMPrABPRx
+8oHHuJgtgiSkkO2+sz0+PVzJPEdlcD0d15FkLx8Rag3YUr4kGbKvcr/poDDoYLAo
+i113AkAOEr8XGOnO9VmbocOIL+gEapCHTu/OjyzMIOTydB+wozo4SK7JyTBfvsvS
+12gZln1GcazGQx5AN5aNs3h45pXBAkEAlSl7D5Wi+mfQBwfWCd/U/AXIna/C721u
+pVvsdx6jM3NNklHnkILs2oZu/vE8RZ4aYxOGt+NUyJn18RLKhdcVgwJAT0VsUCST
+vcDtKrdWo6btTWc1Kml9QhbpMhKxJ6Y9VBHOb6mNXb79cyY+NygUJ0OBgWbtfdY2
+h90qjKHS9PvY4Q==
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-1
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=354fe67b4a126d5d35fe36c777791a3f7ba13def484e2d3908aff722fad468fb21696de95d0be911c2d3174f8afcc201035f7b6d8e69402de5451618c21a535fa9d7bfc5b8dd9fc243f8cf927db31322d6e881eaa91a996170e657a05a266426d98c88003f8477c1227094a0d9fa1e8c4024309ce1ecccb5210035d47ac72e8a
+Output=6628194e12073db03ba94cda9ef9532397d50dba79b987004afefe34
+
+Decrypt=RSA-OAEP-1
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=640db1acc58e0568fe5407e5f9b701dff8c3c91e716c536fc7fcec6cb5b71c1165988d4a279e1577d730fc7a29932e3f00c81515236d8d8e31017a7a09df4352d904cdeb79aa583adcc31ea698a4c05283daba9089be5491f67c1a4ee48dc74bbbe6643aef846679b4cb395a352d5ed115912df696ffe0702932946d71492b44
+Output=750c4047f547e8e41411856523298ac9bae245efaf1397fbe56f9dd5
+
+Decrypt=RSA-OAEP-1
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=423736ed035f6026af276c35c0b3741b365e5f76ca091b4e8c29e2f0befee603595aa8322d602d2e625e95eb81b2f1c9724e822eca76db8618cf09c5343503a4360835b5903bc637e3879fb05e0ef32685d5aec5067cd7cc96fe4b2670b6eac3066b1fcf5686b68589aafb7d629b02d8f8625ca3833624d4800fb081b1cf94eb
+Output=d94ae0832e6445ce42331cb06d531a82b1db4baad30f746dc916df24d4e3c2451fff59a6423eb0e1d02d4fe646cf699dfd818c6e97b051
+
+Decrypt=RSA-OAEP-1
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=45ead4ca551e662c9800f1aca8283b0525e6abae30be4b4aba762fa40fd3d38e22abefc69794f6ebbbc05ddbb11216247d2f412fd0fba87c6e3acd888813646fd0e48e785204f9c3f73d6d8239562722dddd8771fec48b83a31ee6f592c4cfd4bc88174f3b13a112aae3b9f7b80e0fc6f7255ba880dc7d8021e22ad6a85f0755
+Output=52e650d98e7f2a048b4f86852153b97e01dd316f346a19f67a85
+
+Decrypt=RSA-OAEP-1
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=36f6e34d94a8d34daacba33a2139d00ad85a9345a86051e73071620056b920e219005855a213a0f23897cdcd731b45257c777fe908202befdd0b58386b1244ea0cf539a05d5d10329da44e13030fd760dcd644cfef2094d1910d3f433e1c7c6dd18bc1f2df7f643d662fb9dd37ead9059190f4fa66ca39e869c4eb449cbdc439
+Output=8da89fd9e5f974a29feffb462b49180f6cf9e802
+
+Decrypt=RSA-OAEP-1
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=42cee2617b1ecea4db3f4829386fbd61dafbf038e180d837c96366df24c097b4ab0fac6bdf590d821c9f10642e681ad05b8d78b378c0f46ce2fad63f74e0ad3df06b075d7eb5f5636f8d403b9059ca761b5c62bb52aa45002ea70baace08ded243b9d8cbd62a68ade265832b56564e43a6fa42ed199a099769742df1539e8255
+Output=26521050844271
+
+PrivateKey=RSA-OAEP-2
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAZR8f86QQl9HJ55w
+hR8l1eYjFv6KHfGTcePmKOJgVD5JAe9ggfaMC4FBGQ0q6Nq6fRJQ7G22NulE7Dci
+h3x8HQpn8UsWlMXwN5RRpD5Joy3eg2cLc9qRocmbwjtDamAFXGEPC6+ZwaB5VluV
+o/FSZjLR1Npg8g7aJeZTxPACdm9FAgMBAAECgYAII/IPrbXaiQiKnQCJPiH6ShsR
++8k8ZKO+C6rql/s7k8P/cTcEwZyWPB0Qeq6ZBUc5954C4Ybehvh6bd7+ptjM0dPI
+Gke/pyVb4gYBpKSy8IoWe14nnXFbG0Vb3X6rJFlB2XaLms77PM2llS2jzuclJbRQ
+FmOo7hXJ6ZLZJGL+OQJBAVnb3gSjPvBvtgi4CxkPTT4ivME6yOSggQM6v6QW7bCz
+OKoItXMJ6lpSQOfcblQ3jGlBTDHZfdsfQG2zdpzEGkMCQQErZS8wQDs4tAmV/W/0
+GhrMitpwNzI2tyAtObLuMM+0bbCVEfbzB8xhzCFgbBinW4pi+CLfAxug3w2v1VBv
+VovXAkBDbvUI3nNlGcLaTFgNmMgst0UqP7XvrcO5x3iaG8ZYT3la3bvTJDnHRoZV
+LstsLDB6TTr39TnuwVckjHsx8aJVAkEBKxWonz37KzkHPnPwK90MGns3ndQ18Fzd
+4u/55GKUi3zsYu6QUNXggW4HhahWtJEI3LdfNoOHTRymMpoZATBm/wJAAnDbF9WR
+SwGNdhGLJDiac1Dsg2sAY6IXISNv2O222JtR5+64e2EbcTLLfqc1bCMVHB53UVB8
+eG2e4XlBcKjI6A==
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-2
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0181af8922b9fcb4d79d92ebe19815992fc0c1439d8bcd491398a0f4ad3a329a5bd9385560db532683c8b7da04e4b12aed6aacdf471c34c9cda891addcc2df3456653aa6382e9ae59b54455257eb099d562bbe10453f2b6d13c59c02e10f1f8abb5da0d0570932dacf2d0901db729d0fefcc054e70968ea540c81b04bcaefe720e
+Output=8ff00caa605c702830634d9a6c3d42c652b58cf1d92fec570beee7
+
+Decrypt=RSA-OAEP-2
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=018759ff1df63b2792410562314416a8aeaf2ac634b46f940ab82d64dbf165eee33011da749d4bab6e2fcd18129c9e49277d8453112b429a222a8471b070993998e758861c4d3f6d749d91c4290d332c7a4ab3f7ea35ff3a07d497c955ff0ffc95006b62c6d296810d9bfab024196c7934012c2df978ef299aba239940cba10245
+Output=2d
+
+Decrypt=RSA-OAEP-2
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=018802bab04c60325e81c4962311f2be7c2adce93041a00719c88f957575f2c79f1b7bc8ced115c706b311c08a2d986ca3b6a9336b147c29c6f229409ddec651bd1fdd5a0b7f610c9937fdb4a3a762364b8b3206b4ea485fd098d08f63d4aa8bb2697d027b750c32d7f74eaf5180d2e9b66b17cb2fa55523bc280da10d14be2053
+Output=74fc88c51bc90f77af9d5e9a4a70133d4b4e0b34da3c37c7ef8e
+
+Decrypt=RSA-OAEP-2
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=00a4578cbc176318a638fba7d01df15746af44d4f6cd96d7e7c495cbf425b09c649d32bf886da48fbaf989a2117187cafb1fb580317690e3ccd446920b7af82b31db5804d87d01514acbfa9156e782f867f6bed9449e0e9a2c09bcecc6aa087636965e34b3ec766f2fe2e43018a2fddeb140616a0e9d82e5331024ee0652fc7641
+Output=a7eb2a5036931d27d4e891326d99692ffadda9bf7efd3e34e622c4adc085f721dfe885072c78a203b151739be540fa8c153a10f00a
+
+Decrypt=RSA-OAEP-2
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=00ebc5f5fda77cfdad3c83641a9025e77d72d8a6fb33a810f5950f8d74c73e8d931e8634d86ab1246256ae07b6005b71b7f2fb98351218331ce69b8ffbdc9da08bbc9c704f876deb9df9fc2ec065cad87f9090b07acc17aa7f997b27aca48806e897f771d95141fe4526d8a5301b678627efab707fd40fbebd6e792a25613e7aec
+Output=2ef2b066f854c33f3bdcbb5994a435e73d6c6c
+
+Decrypt=RSA-OAEP-2
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=010839ec20c27b9052e55befb9b77e6fc26e9075d7a54378c646abdf51e445bd5715de81789f56f1803d9170764a9e93cb78798694023ee7393ce04bc5d8f8c5a52c171d43837e3aca62f609eb0aa5ffb0960ef04198dd754f57f7fbe6abf765cf118b4ca443b23b5aab266f952326ac4581100644325f8b721acd5d04ff14ef3a
+Output=8a7fb344c8b6cb2cf2ef1f643f9a3218f6e19bba89c0
+
+PrivateKey=RSA-OAEP-3
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBArWP7AOahgcApNe2
+Ri+T5s3UkRYd3XT06BC0DjwWUgBqXCd7J3TBEwWky6taeO+lfheobfej+jb8Sx0i
+SfIux8LdakYyMqzOqQbWbr6AtXBLEHKdpvgzI0q7Xv3UopLL+tM7TTP6ehS4w5e1
+bjrNISA0KLd836M6bacGs9iw/EPpAgMBAAECgYAVtIpbVoOpRnDiO1cY+BT6DhP4
+UDj1BxEYLLphUQWB89IsfiMu+TfiLlUdaLhuL4yxqti+LkiPXffv0nnj9WjU6vNv
+gM9xQazmD8yRE/tsSoQf1Qu8fFEv/L7/IUh6qBHrPKjGIAU0aobehr+h2KlI/T80
+jCLqrfMzw85s4TII/QJBAb8B0hbXNZXPAnDCvreNQKDYRH0x2pGamD9+6ngbd9hf
+43Gz6Tc+e2khfTFQoC2JWN5/rZ1VUWCVi0RUEn4Ofq8CQQGNM5llgWbbOCmBbXsp
+VBZ1npyRmH9bLYrs1jsEtIvXsvzyKbt/im3Ii6E90uOa1VttGgYWBwj5cAvoC4/T
+dEznAkAGwKJJ0gpvLudciLSU1T9qrpmqQnyIwosWOnaUReXzkM9AwnT9bqYymlzn
+x84DohWDlu4qeEV4bgniiFqXKOTlAkEA0dJ8Kf7dkthsNI7dDMv6wU90bgUc4dGB
+HfNdYfLuHJfUvygEgC9kJxh7qOkKivRCQ7QHmwNEXmAuKfpRk+ZP6QJBAIyy91a9
+iUGx07dw5a0x7jc7KKzaaf+bb0D+V4ufGvuFg2+WJ9N6z/c8J3nmNLsmARwsj38z
+Ya4qnqZe1onjY5o=
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-3
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=026a0485d96aebd96b4382085099b962e6a2bdec3d90c8db625e14372de85e2d5b7baab65c8faf91bb5504fb495afce5c988b3f6a52e20e1d6cbd3566c5cd1f2b8318bb542cc0ea25c4aab9932afa20760eaddec784396a07ea0ef24d4e6f4d37e5052a7a31e146aa480a111bbe926401307e00f410033842b6d82fe5ce4dfae80
+Output=087820b569e8fa8d
+
+Decrypt=RSA-OAEP-3
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=024db89c7802989be0783847863084941bf209d761987e38f97cb5f6f1bc88da72a50b73ebaf11c879c4f95df37b850b8f65d7622e25b1b889e80fe80baca2069d6e0e1d829953fc459069de98ea9798b451e557e99abf8fe3d9ccf9096ebbf3e5255d3b4e1c6d2ecadf067a359eea86405acd47d5e165517ccafd47d6dbee4bf5
+Output=4653acaf171960b01f52a7be63a3ab21dc368ec43b50d82ec3781e04
+
+Decrypt=RSA-OAEP-3
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0239bce681032441528877d6d1c8bb28aa3bc97f1df584563618995797683844ca86664732f4bed7a0aab083aaabfb7238f582e30958c2024e44e57043b97950fd543da977c90cdde5337d618442f99e60d7783ab59ce6dd9d69c47ad1e962bec22d05895cff8d3f64ed5261d92b2678510393484990ba3f7f06818ae6ffce8a3a
+Output=d94cd0e08fa404ed89
+
+Decrypt=RSA-OAEP-3
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=02994c62afd76f498ba1fd2cf642857fca81f4373cb08f1cbaee6f025c3b512b42c3e8779113476648039dbe0493f9246292fac28950600e7c0f32edf9c81b9dec45c3bde0cc8d8847590169907b7dc5991ceb29bb0714d613d96df0f12ec5d8d3507c8ee7ae78dd83f216fa61de100363aca48a7e914ae9f42ddfbe943b09d9a0
+Output=6cc641b6b61e6f963974dad23a9013284ef1
+
+Decrypt=RSA-OAEP-3
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0162042ff6969592a6167031811a239834ce638abf54fec8b99478122afe2ee67f8c5b18b0339805bfdbc5a4e6720b37c59cfba942464c597ff532a119821545fd2e59b114e61daf71820529f5029cf524954327c34ec5e6f5ba7efcc4de943ab8ad4ed787b1454329f70db798a3a8f4d92f8274e2b2948ade627ce8ee33e43c60
+Output=df5151832b61f4f25891fb4172f328d2eddf8371ffcfdbe997939295f30eca6918017cfda1153bf7a6af87593223
+
+Decrypt=RSA-OAEP-3
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=00112051e75d064943bc4478075e43482fd59cee0679de6893eec3a943daa490b9691c93dfc0464b6623b9f3dbd3e70083264f034b374f74164e1a00763725e574744ba0b9db83434f31df96f6e2a26f6d8eba348bd4686c2238ac07c37aac3785d1c7eea2f819fd91491798ed8e9cef5e43b781b0e0276e37c43ff9492d005730
+Output=3c3bad893c544a6d520ab022319188c8d504b7a788b850903b85972eaa18552e1134a7ad6098826254ff7ab672b3d8eb3158fac6d4cbaef1
+
+PrivateKey=RSA-OAEP-4
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBBRJAtswABPpI0BNG
+ccB4x8jew7Pi8lvCVkRnM52ziFPQa4XupbLeNTv/QqwuRryX+uaslhjalTelyPVT
+weNXYlmR1hCNzXiF+zolQT9T78rZSMs1zZua6cHGdibRE9V93kxb6na7W7felsAN
+BzculoWm11z50jn6FI1wkxtfP7A5AgMBAAECgYAEEf/KO3yl6em+f+OKhRBeNTiW
+2wXFeWrs0qclFh6zZRyGKam4YrkE17DHs3+MtaHCtUABAYoAoessr+TuTpSSw0i8
+K+2rS5678GTo7/MiuQCfjuxlOQX0DfiKPNxJ1FZ/dWJ9QaymJBKbRqC3xpjl5l8r
+e6ECx0mhATW2VA0EAQJBAnRYwZ7BY2kZ5zbJryXWCaUbj1YdGca/aUPdHuGriko/
+IyEAvUC4jezGuiNVSLbveSoRyd6CPQp5IscJW266VwECQQIQ7pszq2FxbifSUb1G
+X0s1oaIy4toAkBwpS/IjUM5JDQmfZCtTdWEttjuh8gOGSSvwTTSzwivOuQnRNEG1
+O1E5AkA5+gKLgm6IwRIbdQqLJC+po1xbZr39H6Y308xIqEpPRXoZTncn5J97zG5a
+WkEmV/xHDHMi68N0Fu9FjDB6jAkBAkEBXZmoQZWUOXn6nhviw8G2n0MvRv0D5H1b
+77u/1rHRNx2D77Mwo+AglCsv7RFeXQK+JP2SyQGdHOzW3Uzx5UzImQJBAfC3AVFw
+s/XkIiO6MDAcQabYfLtw4wy308Z9JUc9sfbL8D4/kSbj6XloJ5qGWywrQmUkz8Uq
+aD0x7TDrmEvkEro=
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-4
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=04cce19614845e094152a3fe18e54e3330c44e5efbc64ae16886cb1869014cc5781b1f8f9e045384d0112a135ca0d12e9c88a8e4063416deaae3844f60d6e96fe155145f4525b9a34431ca3766180f70e15a5e5d8e8b1a516ff870609f13f896935ced188279a58ed13d07114277d75c6568607e0ab092fd803a223e4a8ee0b1a8
+Output=4a86609534ee434a6cbca3f7e962e76d455e3264c19f605f6e5ff6137c65c56d7fb344cd52bc93374f3d166c9f0c6f9c506bad19330972d2
+
+Decrypt=RSA-OAEP-4
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0097b698c6165645b303486fbf5a2a4479c0ee85889b541a6f0b858d6b6597b13b854eb4f839af03399a80d79bda6578c841f90d645715b280d37143992dd186c80b949b775cae97370e4ec97443136c6da484e970ffdb1323a20847821d3b18381de13bb49aaea66530c4a4b8271f3eae172cd366e07e6636f1019d2a28aed15e
+Output=b0adc4f3fe11da59ce992773d9059943c03046497ee9d9f9a06df1166db46d98f58d27ec074c02eee6cbe2449c8b9fc5080c5c3f4433092512ec46aa793743c8
+
+Decrypt=RSA-OAEP-4
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0301f935e9c47abcb48acbbe09895d9f5971af14839da4ff95417ee453d1fd77319072bb7297e1b55d7561cd9d1bb24c1a9a37c619864308242804879d86ebd001dce5183975e1506989b70e5a83434154d5cbfd6a24787e60eb0c658d2ac193302d1192c6e622d4a12ad4b53923bca246df31c6395e37702c6a78ae081fb9d065
+Output=bf6d42e701707b1d0206b0c8b45a1c72641ff12889219a82bdea965b5e79a96b0d0163ed9d578ec9ada20f2fbcf1ea3c4089d83419ba81b0c60f3606da99
+
+Decrypt=RSA-OAEP-4
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=02d110ad30afb727beb691dd0cf17d0af1a1e7fa0cc040ec1a4ba26a42c59d0a796a2e22c8f357ccc98b6519aceb682e945e62cb734614a529407cd452bee3e44fece8423cc19e55548b8b994b849c7ecde4933e76037e1d0ce44275b08710c68e430130b929730ed77e09b015642c5593f04e4ffb9410798102a8e96ffdfe11e4
+Output=fb2ef112f5e766eb94019297934794f7be2f6fc1c58e
+
+Decrypt=RSA-OAEP-4
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=00dbb8a7439d90efd919a377c54fae8fe11ec58c3b858362e23ad1b8a44310799066b99347aa525691d2adc58d9b06e34f288c170390c5f0e11c0aa3645959f18ee79e8f2be8d7ac5c23d061f18dd74b8c5f2a58fcb5eb0c54f99f01a83247568292536583340948d7a8c97c4acd1e98d1e29dc320e97a260532a8aa7a758a1ec2
+Output=28ccd447bb9e85166dabb9e5b7d1adadc4b9d39f204e96d5e440ce9ad928bc1c2284
+
+Decrypt=RSA-OAEP-4
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=00a5ffa4768c8bbecaee2db77e8f2eec99595933545520835e5ba7db9493d3e17cddefe6a5f567624471908db4e2d83a0fbee60608fc84049503b2234a07dc83b27b22847ad8920ff42f674ef79b76280b00233d2b51b8cb2703a9d42bfbc8250c96ec32c051e57f1b4ba528db89c37e4c54e27e6e64ac69635ae887d9541619a9
+Output=f22242751ec6b1
+
+PrivateKey=RSA-OAEP-5
+-----BEGIN PRIVATE KEY-----
+MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBCq3z+cEl5diR8xrE
+SOmT3v5YD4ArRfnX8iulAh6cR1drWh5oAxup205tq+TZah1vPSZyaM/0CABfEY78
+rbmYiNHCNEZxZrKiuEmgWoicBgrA2gxfrotV8wm6YucDdC+gMm8tELARAhSJ/0l3
+cBkNiV/Tn1IpPDnv1zppi9q58Q7ZAgMBAAECgYECVutMunBn8tK+VA3N/0WCo2t9
+MdHJCZuyFLeYSEZqJo+A9YpJrATA42SJNKAgbARTfBmyNmQ6YIJzIUTfdfohdYj3
+lGgr6JFoJ23HJsXAy9uE0xu/JtCkOvSVcX99UorP7jQVYfb/PK4FxXj4Rw2WgvnA
+0HL59gaLVtWID2gr4sUCQQOw05YvbRdUnL/KESlDSNzw5+OfjCvGgk8hZLYG1oeG
+Da4eYyOTz+31EyKCKQaeL2DkrNfmM6Q2Bj+COF9ImTcHAkEC5MMuL1FyabcHIwnw
+DA4xNl984osja4KRLfI5q/OVcs8O1gSwKYLlNWTFLWoFOX3lwFKi/dwUHvcYmDY0
+auszHwJBAehLEZ0lFh+mewAlalvZtkXSsjLssFsBUYACmohiKtw/CbOurN5hYat8
+3iLCrSbneX31TgcsvTsmc4ALPkM429UCQQDrkKoaQBNbTOoHGXztyIGb4efL/yVH
+ZiEW9GWkqfSHqxLzuk/vE4IiZaZSl9mLe97ZNy4//oGjiz6WAP7QVXVPAkEBL3+B
+OPlAQGLrhaQpJFILOPW7iGoBlvSLuNzqYP2SzAJ/GOeBWKNKXF1fhgoPbAQHGn0B
+MSwGUGLx60i3nRyDyw==
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-5
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=036046a4a47d9ed3ba9a89139c105038eb7492b05a5d68bfd53accff4597f7a68651b47b4a4627d927e485eed7b4566420e8b409879e5d606eae251d22a5df799f7920bfc117b992572a53b1263146bcea03385cc5e853c9a101c8c3e1bda31a519807496c6cb5e5efb408823a352b8fa0661fb664efadd593deb99fff5ed000e5
+Output=af71a901e3a61d3132f0fc1fdb474f9ea6579257ffc24d164170145b3dbde8
+
+Decrypt=RSA-OAEP-5
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=03d6eb654edce615bc59f455265ed4e5a18223cbb9be4e4069b473804d5de96f54dcaaa603d049c5d94aa1470dfcd2254066b7c7b61ff1f6f6770e3215c51399fd4e34ec5082bc48f089840ad04354ae66dc0f1bd18e461a33cc1258b443a2837a6df26759aa2302334986f87380c9cc9d53be9f99605d2c9a97da7b0915a4a7ad
+Output=a3b844a08239a8ac41605af17a6cfda4d350136585903a417a79268760519a4b4ac3303ec73f0f87cfb32399
+
+Decrypt=RSA-OAEP-5
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0770952181649f9f9f07ff626ff3a22c35c462443d905d456a9fd0bff43cac2ca7a9f554e9478b9acc3ac838b02040ffd3e1847de2e4253929f9dd9ee4044325a9b05cabb808b2ee840d34e15d105a3f1f7b27695a1a07a2d73fe08ecaaa3c9c9d4d5a89ff890d54727d7ae40c0ec1a8dd86165d8ee2c6368141016a48b55b6967
+Output=308b0ecbd2c76cb77fc6f70c5edd233fd2f20929d629f026953bb62a8f4a3a314bde195de85b5f816da2aab074d26cb6acddf323ae3b9c678ac3cf12fbdde7
+
+Decrypt=RSA-OAEP-5
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0812b76768ebcb642d040258e5f4441a018521bd96687e6c5e899fcd6c17588ff59a82cc8ae03a4b45b31299af1788c329f7dcd285f8cf4ced82606b97612671a45bedca133442144d1617d114f802857f0f9d739751c57a3f9ee400912c61e2e6992be031a43dd48fa6ba14eef7c422b5edc4e7afa04fdd38f402d1c8bb719abf
+Output=15c5b9ee1185
+
+Decrypt=RSA-OAEP-5
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=07b60e14ec954bfd29e60d0047e789f51d57186c63589903306793ced3f68241c743529aba6a6374f92e19e0163efa33697e196f7661dfaaa47aac6bde5e51deb507c72c589a2ca1693d96b1460381249b2cdb9eac44769f2489c5d3d2f99f0ee3c7ee5bf64a5ac79c42bd433f149be8cb59548361640595513c97af7bc2509723
+Output=21026e6800c7fa728fcaaba0d196ae28d7a2ac4ffd8abce794f0985f60c8a6737277365d3fea11db8923a2029a
+
+Decrypt=RSA-OAEP-5
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=08c36d4dda33423b2ed6830d85f6411ba1dcf470a1fae0ebefee7c089f256cef74cb96ea69c38f60f39abee44129bcb4c92de7f797623b20074e3d9c2899701ed9071e1efa0bdd84d4c3e5130302d8f0240baba4b84a71cc032f2235a5ff0fae277c3e8f9112bef44c9ae20d175fc9a4058bfc930ba31b02e2e4f444483710f24a
+Output=541e37b68b6c8872b84c02
+
+PrivateKey=RSA-OAEP-6
+-----BEGIN PRIVATE KEY-----
+MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBErF/ba0uzRn/RtwT
+94YPCeDgz7Z3s4pSWSMFzq8CLBZtuQ0ErCnjP33RLZ+vZuCBa7Y+rSZ8x9RsF8N7
+4hS8oqItcjpk5EQHQ2tvyWVymu/CVU83bNXc6mgpN4CmK/OdAClIWhYLu55dwJct
+IaUE9S5e4CiqQWMy9RCy6c/19yKvAgMBAAECgYECleyjVgYYNpVZzs0wOqnP2vwd
+nwaVnfdf/vkpqolpYbzRkNxpl+2n9ZY+ck0HtNwR8wZeWul9loNREigLkIS7FPKi
+Hr1OiJ1BucQTLsGVb8q4uy/tBXWISTZSLF/30zJhkEgk58re5OC7Ny0kV8944r0S
+hiKP+D8QcxzmPJDP8/kCQQSmzotzWN+mm9z3QmFwBa+1OF9fOliiTvdKIqjAXLfM
+OOvUzJ2anXiaYs0PYPDLlB00I8lpLvpP463/KQxHSaOLAkEEBMmoAzcf7bTFvjnz
+wAsAnl4Ipjvh5AA1zaylARzHAc9+68uZ8P/hfP0KS/e+/S3VNqyUbbeX/bxKvo8p
+NJuR7QJBA5Ycj3YKor1RVMeq/XciWzus0BOa57WUjqMxH8zYb7lcda+nZyhLmy3l
+WVcvFdjQRMfrg6G+X63yzDd8DYR1KUsCQQIhl+BmdCGWqrwD+i/utOcLFct4fWF6
+zTG7dce8I0rXBvfEjSGC0fD/nCKNz0GWe2wLptLArREKG4V4MewkXiyxAkEEAcTA
+xT1F29tenZbQ/s9Cdd8JdLxKBza0p0wyaQU++2hqziQG4iyeBY3bSuVAYnri/bCC
+Yejn5Ly8mU2q+jBcRQ==
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-6
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0630eebcd2856c24f798806e41f9e67345eda9ceda386acc9facaea1eeed06ace583709718d9d169fadf414d5c76f92996833ef305b75b1e4b95f662a20faedc3bae0c4827a8bf8a88edbd57ec203a27a841f02e43a615bab1a8cac0701de34debdef62a088089b55ec36ea7522fd3ec8d06b6a073e6df833153bc0aefd93bd1a3
+Output=4046ca8baa3347ca27f49e0d81f9cc1d71be9ba517d4
+
+Decrypt=RSA-OAEP-6
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0ebc37376173a4fd2f89cc55c2ca62b26b11d51c3c7ce49e8845f74e7607317c436bc8d23b9667dfeb9d087234b47bc6837175ae5c0559f6b81d7d22416d3e50f4ac533d8f0812f2db9e791fe9c775ac8b6ad0f535ad9ceb23a4a02014c58ab3f8d3161499a260f39348e714ae2a1d3443208fd8b722ccfdfb393e98011f99e63f
+Output=5cc72c60231df03b3d40f9b57931bc31109f972527f28b19e7480c7288cb3c92b22512214e4be6c914792ddabdf57faa8aa7
+
+Decrypt=RSA-OAEP-6
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0a98bf1093619394436cf68d8f38e2f158fde8ea54f3435f239b8d06b8321844202476aeed96009492480ce3a8d705498c4c8c68f01501dc81db608f60087350c8c3b0bd2e9ef6a81458b7c801b89f2e4fe99d4900ba6a4b5e5a96d865dc676c7755928794130d6280a8160a190f2df3ea7cf9aa0271d88e9e6905ecf1c5152d65
+Output=b20e651303092f4bccb43070c0f86d23049362ed96642fc5632c27db4a52e3d831f2ab068b23b149879c002f6bf3feee97591112562c
+
+Decrypt=RSA-OAEP-6
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=008e7a67cacfb5c4e24bec7dee149117f19598ce8c45808fef88c608ff9cd6e695263b9a3c0ad4b8ba4c95238e96a8422b8535629c8d5382374479ad13fa39974b242f9a759eeaf9c83ad5a8ca18940a0162ba755876df263f4bd50c6525c56090267c1f0e09ce0899a0cf359e88120abd9bf893445b3cae77d3607359ae9a52f8
+Output=684e3038c5c041f7
+
+Decrypt=RSA-OAEP-6
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=00003474416c7b68bdf961c385737944d7f1f40cb395343c693cc0b4fe63b31fedf1eaeeac9ccc0678b31dc32e0977489514c4f09085f6298a9653f01aea4045ff582ee887be26ae575b73eef7f3774921e375a3d19adda0ca31aa1849887c1f42cac9677f7a2f4e923f6e5a868b38c084ef187594dc9f7f048fea2e02955384ab
+Output=32488cb262d041d6e4dd35f987bf3ca696db1f06ac29a44693
+
+Decrypt=RSA-OAEP-6
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0a026dda5fc8785f7bd9bf75327b63e85e2c0fdee5dadb65ebdcac9ae1de95c92c672ab433aa7a8e69ce6a6d8897fac4ac4a54de841ae5e5bbce7687879d79634cea7a30684065c714d52409b928256bbf53eabcd5231eb7259504537399bd29164b726d33a46da701360a4168a091ccab72d44a62fed246c0ffea5b1348ab5470
+Output=50ba14be8462720279c306ba
+
+PrivateKey=RSA-OAEP-7
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBMRF58Lz8m508oxXQ
+DvMNe906LPrpkRv+3LlIs6R4LQcytqtEqkvwN0GmRNwBvsPmmwGgM+Z12KzXxJJc
+axrsMRkFHf2Jdi0hXUVHX/y1n5CBSGI/NxdxVvauht16fF9D3B4fkIJUBYooSl8G
+wAIXk6h/GsX+/33K7mnF5Ro3ieNzAgMBAAECgYEHDPz/L+uCduJ0MsRd/uSPSbeR
+fWUw4fDKNGDzLgJ2F0SHxW4ipF0lANd3VJUhnX0WWpzzvZLDKvmpjY3JzCloAK3J
+SgpU+0DzQpG/hO6OoStvEJNZxtNUKlD5x2f1z/8FpoHC5lb7d8qq20vpRo2KvNTf
+mPWOhtIFP6E0n3SOIbECQQdJJiwRHNRw7CVm5rNzL8CTKUaaoZBx07nAGQZRTG8d
+JrqhS+qwlxyLfmEaT3kAnW/qd2koyiUoWw3jZD0aP4xxAkEGvB5Q6WwCv2NunuqL
+iZu+v3ZR3nfdR0w+m8I7rYGCthkEx9l9++v7HgAQiHi25n5BU5HWeULCsr+bRDX4
+iwywIwJBA7x+p/CqsUOrxs6LlxGGNqMBcuTP4CyPoN2jt7qvkPgJKYKYVSX0iL38
+tL1ybiJjmsZKMJKrf/y/HVM0z6ULW/ECQQJipqopwqPGfcU0bAY4Gv2YeqPMk8+/
+7PVP3Z+deH1/WaUj05iXnaE3ovY4H+lIAffJTaIVGNw0y0CHDEaXmUrZAkBknUwX
+tu4XIedy0DiaVZw9PN+VUNRXxGsDe3RkGx1SFmr4ohPIOWIGzfukQi8Y1vYdvLXS
+FMlxv0gq65dqc3DC
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-7
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=1688e4ce7794bba6cb7014169ecd559cede2a30b56a52b68d9fe18cf1973ef97b2a03153951c755f6294aa49adbdb55845ab6875fb3986c93ecf927962840d282f9e54ce8b690f7c0cb8bbd73440d9571d1b16cd9260f9eab4783cc482e5223dc60973871783ec27b0ae0fd47732cbc286a173fc92b00fb4ba6824647cd93c85c1
+Output=47aae909
+
+Decrypt=RSA-OAEP-7
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=1052ed397b2e01e1d0ee1c50bf24363f95e504f4a03434a08fd822574ed6b9736edbb5f390db10321479a8a139350e2bd4977c3778ef331f3e78ae118b268451f20a2f01d471f5d53c566937171b2dbc2d4bde459a5799f0372d6574239b2323d245d0bb81c286b63c89a361017337e4902f88a467f4c7f244bfd5ab46437ff3b6
+Output=1d9b2e2223d9bc13bfb9f162ce735db48ba7c68f6822a0a1a7b6ae165834e7
+
+Decrypt=RSA-OAEP-7
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=2155cd843ff24a4ee8badb7694260028a490813ba8b369a4cbf106ec148e5298707f5965be7d101c1049ea8584c24cd63455ad9c104d686282d3fb803a4c11c1c2e9b91c7178801d1b6640f003f5728df007b8a4ccc92bce05e41a27278d7c85018c52414313a5077789001d4f01910b72aad05d220aa14a58733a7489bc54556b
+Output=d976fc
+
+Decrypt=RSA-OAEP-7
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=0ab14c373aeb7d4328d0aaad8c094d88b9eb098b95f21054a29082522be7c27a312878b637917e3d819e6c3c568db5d843802b06d51d9e98a2be0bf40c031423b00edfbff8320efb9171bd2044653a4cb9c5122f6c65e83cda2ec3c126027a9c1a56ba874d0fea23f380b82cf240b8cf540004758c4c77d934157a74f3fc12bfac
+Output=d4738623df223aa43843df8467534c41d013e0c803c624e263666b239bde40a5f29aeb8de79e3daa61dd0370f49bd4b013834b98212aef6b1c5ee373b3cb
+
+Decrypt=RSA-OAEP-7
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=028387a318277434798b4d97f460068df5298faba5041ba11761a1cb7316b24184114ec500257e2589ed3b607a1ebbe97a6cc2e02bf1b681f42312a33b7a77d8e7855c4a6de03e3c04643f786b91a264a0d6805e2cea91e68177eb7a64d9255e4f27e713b7ccec00dc200ebd21c2ea2bb890feae4942df941dc3f97890ed347478
+Output=bb47231ca5ea1d3ad46c99345d9a8a61
+
+Decrypt=RSA-OAEP-7
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=14c678a94ad60525ef39e959b2f3ba5c097a94ff912b67dbace80535c187abd47d075420b1872152bba08f7fc31f313bbf9273c912fc4c0149a9b0cfb79807e346eb332069611bec0ff9bcd168f1f7c33e77313cea454b94e2549eecf002e2acf7f6f2d2845d4fe0aab2e5a92ddf68c480ae11247935d1f62574842216ae674115
+Output=2184827095d35c3f86f600e8e59754013296
+
+PrivateKey=RSA-OAEP-8
+-----BEGIN PRIVATE KEY-----
+MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBW98OMNMh3aUUf4gk
+CPppGVSA34+A0/bov1gYUE82QnypsfVUC5xlqPaXTPhEeiRNkoAgG7Sfy75jeNGU
+TNIn4jD5bj0Q+Bnc7ydsZKALKktnAefQHeX6veOx6aDfgvRjE1nNImaWR/uxcXJG
+E07XtJfP/73EK1nHOpbtkBZiEt/3AgMBAAECgYEPfR6eWqol/RPkoGY64UTg0V9c
+0YvNsJ3yzH5k48XpFa1iZFMEFh0JjHFbt6uL0B0H6vP+18ftCK8qimLvRKsWsyDh
+SvcqSPlq/iYqCuTPZeY16RB5DNTuXOp2iksmOffm9nez8Ltr4yt1dH2JCQNvAmT1
+jUAc26ExcWFXp17PYzECQQoC74RI2frYu9DQBMjCqpdR75chwbDQMjalSw35R8uu
+1aJV7p6OINSR6hcj/glHBKl2Loiv0W67WZRBLKlm3E+fAkEJLTYuftOgv9np/Q5s
+AwG23ykVnPUMyDubDPTW7qcaYeACtG4K6fLeYtJbXXRS1Ji4HJrG/FhZPUw/tPXX
+LfuwqQJBB8cUEK8QOWLbNnQE43roULqk6cKd2SFFgVKUpnx9HG3tJjqgMKm2M65Q
+MD4UA10a8BQSPrpoeCAwjY68hbaVfX0CQQCuLHU4DALAFq0FiRszAd6IHyiuEXEY
+K2ssg76nxRXsqcopjHscq1gXpZcGj8hQYN5NqKAWN4quQ8f5Z7zDeQS5AkEFmNEF
+njraT2MgdSwJ2AX/fR8a4NAXru7pzvoNfdf/d15EtXgyL2QF1iEdoZUZZmqof9xM
+2MiPa249Z+lh3Luj0A==
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-8
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=09b3683d8a2eb0fb295b62ed1fb9290b714457b7825319f4647872af889b30409472020ad12912bf19b11d4819f49614824ffd84d09c0a17e7d17309d12919790410aa2995699f6a86dbe3242b5acc23af45691080d6b1ae810fb3e3057087f0970092ce00be9562ff4053b6262ce0caa93e13723d2e3a5ba075d45f0d61b54b61
+Output=050b755e5e6880f7b9e9d692a74c37aae449b31bfea6deff83747a897f6c2c825bb1adbf850a3c96994b5de5b33cbc7d4a17913a7967
+
+Decrypt=RSA-OAEP-8
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=2ecf15c97c5a15b1476ae986b371b57a24284f4a162a8d0c8182e7905e792256f1812ba5f83f1f7a130e42dcc02232844edc14a31a68ee97ae564a383a3411656424c5f62ddb646093c367be1fcda426cf00a06d8acb7e57776fbbd855ac3df506fc16b1d7c3f2110f3d8068e91e186363831c8409680d8da9ecd8cf1fa20ee39d
+Output=4eb68dcd93ca9b19df111bd43608f557026fe4aa1d5cfac227a3eb5ab9548c18a06dded23f81825986b2fcd71109ecef7eff88873f075c2aa0c469f69c92bc
+
+Decrypt=RSA-OAEP-8
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=4bc89130a5b2dabb7c2fcf90eb5d0eaf9e681b7146a38f3173a3d9cfec52ea9e0a41932e648a9d69344c50da763f51a03c95762131e8052254dcd2248cba40fd31667786ce05a2b7b531ac9dac9ed584a59b677c1a8aed8c5d15d68c05569e2be780bf7db638fd2bfd2a85ab276860f3777338fca989ffd743d13ee08e0ca9893f
+Output=8604ac56328c1ab5ad917861
+
+Decrypt=RSA-OAEP-8
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=2e456847d8fc36ff0147d6993594b9397227d577752c79d0f904fcb039d4d812fea605a7b574dd82ca786f93752348438ee9f5b5454985d5f0e1699e3e7ad175a32e15f03deb042ab9fe1dd9db1bb86f8c089ccb45e7ef0c5ee7ca9b7290ca6b15bed47039788a8a93ff83e0e8d6244c71006362deef69b6f416fb3c684383fbd0
+Output=fdda5fbf6ec361a9d9a4ac68af216a0686f438b1e0e5c36b955f74e107f39c0dddcc
+
+Decrypt=RSA-OAEP-8
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=1fb9356fd5c4b1796db2ebf7d0d393cc810adf6145defc2fce714f79d93800d5e2ac211ea8bbecca4b654b94c3b18b30dd576ce34dc95436ef57a09415645923359a5d7b4171ef22c24670f1b229d3603e91f76671b7df97e7317c97734476d5f3d17d21cf82b5ba9f83df2e588d36984fd1b584468bd23b2e875f32f68953f7b2
+Output=4a5f4914bee25de3c69341de07
+
+Decrypt=RSA-OAEP-8
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=3afd9c6600147b21798d818c655a0f4c9212db26d0b0dfdc2a7594ccb3d22f5bf1d7c3e112cd73fc7d509c7a8bafdd3c274d1399009f9609ec4be6477e453f075aa33db382870c1c3409aef392d7386ae3a696b99a94b4da0589447e955d16c98b17602a59bd736279fcd8fb280c4462d590bfa9bf13fed570eafde97330a2c210
+Output=8e07d66f7b880a72563abcd3f35092bc33409fb7f88f2472be
+
+PrivateKey=RSA-OAEP-9
+-----BEGIN PRIVATE KEY-----
+MIIDlwIBADANBgkqhkiG9w0BAQEFAASCA4EwggN9AgEAAoHBAM8s1B40yjpyjqXL
+iv9kw20nve9TZOM2/WjTEjxaGWqMKHAT6FPVFW1Y0VGVRSD7T217F6u2gXdlkJxX
+YRllnZArGQbtiisQwVXCTRJFKNq57q43m+rGbkpBF4bcuP0AYuvAMN4SGaBMKowb
+fdMTHk1rbK7i4xpe1BrBUJsu8e4qsYNkvlaMqUHCXsyE/51kO17Bqq4QKiDXP0eb
+eA/W2pEHUhLZ6sA6BnTYmeui5DH0xEthW2uiIyvUszuu1z1iXQIDAQABAoHAGYwU
+HiNxWpK8z2oRmlvBE4lGjSgR9UjXJ+F7SrDrmG1vIR77U7cffMvqh+5px17mFQCM
+UzLetSvzkKvfv+N9cgU2gVmyY4wd4ybiHSIlHw+1hIs78VAF0qdDMPCv6RbuYszB
+NE0dg6cJ5gZ2JzhA9/N3QkpeCk2nXwGzH/doGc+cv90hUkPDkXwD7zgZkxLlZ7O/
+eu06tFfzce+KFCP0W2jG4oLsERu6KDO5h/1p+tg7wbjGE8Xh6hbBHtEl6n7BAmEA
+/I1sBL7E65qBksp5AMvlNuLotRnezzOyRZeYxpCd9PF2230jGQ/HK4hlpxiviV8b
+zZFFKYAnQjtgXnCkfPWDkKjD6I/IxI6LMuPaIQ374+iB6lZ0tqNIwh6T+eVepl79
+AmEA0gDUXniKrOpgakAdBGD4fdXBAn4S3BoNdYbok52c94m0D1GsBEKWHefSHMIe
+BcgxVcHyqpGTOHz9+VbLSNFTuicEBvm7ulN9SYfZ4vmULXoUy//+p0/s3ako0j4l
+n17hAmEA2xaAL3mi8NRfNY1p/TPkS4H66ChiLpOlQlPpl9AbB0N1naDoErSqTmyL
+6rIyjVQxlVpBimf/JqjFyAel2jVOBe8xzIz3WPRjcylQsD4mVyb7lOOdalcqJiRK
+sI23V1KtAmEAoKMXz+ffFCP4em3uhFH04rSmflSX8ptPHk6DC5+t2UARZwJvVZbl
+o5yXgX4PXxbifhnsmQLgHX6m+5qjx2Cv7h44G2neasnAdYWgatnEugC/dcitL6iY
+pHnoCuKU/tKhAmALIfM1w1M0LrRMOqJERXgMLWVblAF0yuOMfIpOZJPAup/TA3SC
+Z7CDuaemy2HkLbNiuMmJbbcGTgKtWuYVh9oVtGSckFlJCf6zfby2VL63Jo7IAeWo
+tKo5Eb69iFQvBb4=
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-9
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=267bcd118acab1fc8ba81c85d73003cb8610fa55c1d97da8d48a7c7f06896a4db751aa284255b9d36ad65f37653d829f1b37f97b8001942545b2fc2c55a7376ca7a1be4b1760c8e05a33e5aa2526b8d98e317088e7834c755b2a59b12631a182c05d5d43ab1779264f8456f515ce57dfdf512d5493dab7b7338dc4b7d78db9c091ac3baf537a69fc7f549d979f0eff9a94fda4169bd4d1d19a69c99e33c3b55490d501b39b1edae118ff6793a153261584d3a5f39f6e682e3d17c8cd1261fa72
+Output=f735fd55ba92592c3b52b8f9c4f69aaa1cbef8fe88add095595412467f9cf4ec0b896c59eda16210e7549c8abb10cdbc21a12ec9b6b5b8fd2f10399eb6
+
+Decrypt=RSA-OAEP-9
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=93ac9f0671ec29acbb444effc1a5741351d60fdb0e393fbf754acf0de49761a14841df7772e9bc82773966a1584c4d72baea00118f83f35cca6e537cbd4d811f5583b29783d8a6d94cd31be70d6f526c10ff09c6fa7ce069795a3fcd0511fd5fcb564bcc80ea9c78f38b80012539d8a4ddf6fe81e9cddb7f50dbbbbcc7e5d86097ccf4ec49189fb8bf318be6d5a0715d516b49af191258cd32dc833ce6eb4673c03a19bbace88cc54895f636cc0c1ec89096d11ce235a265ca1764232a689ae8
+Output=81b906605015a63aabe42ddf11e1978912f5404c7474b26dce3ed482bf961ecc818bf420c54659
+
+Decrypt=RSA-OAEP-9
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=81ebdd95054b0c822ef9ad7693f5a87adfb4b4c4ce70df2df84ed49c04da58ba5fc20a19e1a6e8b7a3900b22796dc4e869ee6b42792d15a8eceb56c09c69914e813cea8f6931e4b8ed6f421af298d595c97f4789c7caa612c7ef360984c21b93edc5401068b5af4c78a8771b984d53b8ea8adf2f6a7d4a0ba76c75e1dd9f658f20ded4a46071d46d7791b56803d8fea7f0b0f8e41ae3f09383a6f9585fe7753eaaffd2bf94563108beecc207bbb535f5fcc705f0dde9f708c62f49a9c90371d3
+Output=fd326429df9b890e09b54b18b8f34f1e24
+
+Decrypt=RSA-OAEP-9
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=bcc35f94cde66cb1136625d625b94432a35b22f3d2fa11a613ff0fca5bd57f87b902ccdc1cd0aebcb0715ee869d1d1fe395f6793003f5eca465059c88660d446ff5f0818552022557e38c08a67ead991262254f10682975ec56397768537f4977af6d5f6aaceb7fb25dec5937230231fd8978af49119a29f29e424ab8272b47562792d5c94f774b8829d0b0d9f1a8c9eddf37574d5fa248eefa9c5271fc5ec2579c81bdd61b410fa61fe36e424221c113addb275664c801d34ca8c6351e4a858
+Output=f1459b5f0c92f01a0f723a2e5662484d8f8c0a20fc29dad6acd43bb5f3effdf4e1b63e07fdfe6628d0d74ca19bf2d69e4a0abf86d293925a796772f8088e
+
+Decrypt=RSA-OAEP-9
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=232afbc927fa08c2f6a27b87d4a5cb09c07dc26fae73d73a90558839f4fd66d281b87ec734bce237ba166698ed829106a7de6942cd6cdce78fed8d2e4d81428e66490d036264cef92af941d3e35055fe3981e14d29cbb9a4f67473063baec79a1179f5a17c9c1832f2838fd7d5e59bb9659d56dce8a019edef1bb3accc697cc6cc7a778f60a064c7f6f5d529c6210262e003de583e81e3167b89971fb8c0e15d44fffef89b53d8d64dd797d159b56d2b08ea5307ea12c241bd58d4ee278a1f2e
+Output=53e6e8c729d6f9c319dd317e74b0db8e4ccca25f3c8305746e137ac63a63ef3739e7b595abb96e8d55e54f7bd41ab433378ffb911d
+
+Decrypt=RSA-OAEP-9
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=438cc7dc08a68da249e42505f8573ba60e2c2773d5b290f4cf9dff718e842081c383e67024a0f29594ea987b9d25e4b738f285970d195abb3a8c8054e3d79d6b9c9a8327ba596f1259e27126674766907d8d582ff3a8476154929adb1e6d1235b2ccb4ec8f663ba9cc670a92bebd853c8dbf69c6436d016f61add836e94732450434207f9fd4c43dec2a12a958efa01efe2669899b5e604c255c55fb7166de5589e369597bb09168c06dd5db177e06a1740eb2d5c82faeca6d92fcee9931ba9f
+Output=b6b28ea2198d0c1008bc64
+
+PrivateKey=RSA-OAEP-10
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCuRe1WAc7GuMwF
++AOTXGdN2+DXXEwJ/XlR/GsMrsMTqN85lwxRi/+6XtaPPw1/IqQCnUE/GuB+Tr6e
+QXfOI+f1QEtWnk7hvc88H7A+8ROALU+FXrm1E0tafICFrcrm+i+hQX7DdjvhcbDG
+K3YO3iPBKtkrmAiExkH1qPrCa9rUoDOBoi/ht1SIUJTIJQbUAZpTWihq/rJxu5ul
+kt4Y3PYAwq7q5W4C9895/BTPO9x82E/ru/lQypAwSyIZp6oGOu+iw8GYDlYM1kr+
+d5WFthB2V7lXhX795gEJiKt95Bf8iNjzhMTm5yw/lD4MMcDEpcw2+HnYo6ydfVmG
+Dqraa4O7AgMBAAECggEABWsEIW/l81SsdyUKS2sMhSWoXFmwvYDFZFCiLV9Djllq
+MzqodeKR3UP0jLiLnV/A1Jn5/NHDl/mvwHDNnjmMjRnmHbfHQQprJnXfv100W4BN
+IBrdUC1c4t/LCRzpmXu+vlcwbzg+TViBA/A29+hdGTTRUqMj5KjbRR1vSlsbDxAs
+wVDgL+7iuI3qStTBusyyTYQHLRTh0kpncfdAjuMFZPuG1Dk6NLzwt4hQHRkzA/E6
+IoSwAfD2Ser3kyjUrFxDCrRBSSCpRg7Rt7xA7GU+h20Jq8UJrkW1JRkBFqDCYQGE
+gphQnBw786SD5ydAVOFelwdQNumJ9gkygHtSV3UeeQKBgQDs9a7NHlUV//rL11oo
+Fsbr9JAYzftGOOGF1mpzlrb4CQ+AGMf9lcw0uFfcF/DMZRa7E0arTVgsra17QQM1
+I4e3AzjQhAR8nZU5tkliBLPdbqRCSZIHvsAflkKH/2M2w5hGWDNoRvVuRoYYgcEC
+M9IXa/FaXpbdx4C8hoqnfTznaQKBgQC8RsRk/GrEyng7DrCKPIQbdy9+my8our1Y
+iuiF4aDGHkhYoPslrCmZkPNb6FFkwlm6EXXN1xknBxNRhJkrbCm3Rt0NLKvhQoNf
+fRSMwWFSS0oJlG1IuChHPxzna2y2iGw0XAPgX0HVG1w6kKPyQHPH10pP4l2c8hx1
+lg8/w4YxgwKBgQDHNWRXHQD7FdCKPemVelCRXXEm6UQtrPQryC6GLlZz/2oAjtTS
+43RhffifF6FgtDt/2py2trdCGGCYFffUXKJjwVmqMtJy0Sf69LyMotdzeOiusZsK
+19o8s94K5zFJgPYrbUsKh10d8DwbrjnM2DPvbNfi2VKL8ITR+WnnlOn2wQKBgCZY
+s39t+cEDC+HbaBF/qdh+OeoraTt+bTovcJR0E+7GFC4Y+438tqxUXXyGoK1I+EVx
+cPDvsmvEgSbFPv0dFpIBmNwqEQfcKC22qAzTBiNguj+hP3DkMS/xps1rj8TNnFw9
+sXxtalchL3OuKfYZMnutWbFThYWFuk4otgpipF5JAoGAbzhSazklCFU07z5BWoNu
+3ouGFYosfL/sywvYNDBP7Gg7qNT0ecQz1DQW5jJpYjzqEAd22Fr/QB0//2EO5lQR
+zjsTY9Y6lwnu3kJkfOpWFJPVRXCoecGGgs2XcQuWIF7DERfXO182Ij+t1ui6kN18
+DuYdROFjJR4gx/ZuswURfLg=
+-----END PRIVATE KEY-----
+
+Decrypt=RSA-OAEP-10
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=53ea5dc08cd260fb3b858567287fa91552c30b2febfba213f0ae87702d068d19bab07fe574523dfb42139d68c3c5afeee0bfe4cb7969cbf382b804d6e61396144e2d0e60741f8993c3014b58b9b1957a8babcd23af854f4c356fb1662aa72bfcc7e586559dc4280d160c126785a723ebeebeff71f11594440aaef87d10793a8774a239d4a04c87fe1467b9daf85208ec6c7255794a96cc29142f9a8bd418e3c1fd67344b0cd0829df3b2bec60253196293c6b34d3f75d32f213dd45c6273d505adf4cced1057cb758fc26aeefa441255ed4e64c199ee075e7f16646182fdb464739b68ab5daff0e63e9552016824f054bf4d3c8c90a97bb6b6553284eb429fcc
+Output=8bba6bf82a6c0f86d5f1756e97956870b08953b06b4eb205bc1694ee
+
+Decrypt=RSA-OAEP-10
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=a2b1a430a9d657e2fa1c2bb5ed43ffb25c05a308fe9093c01031795f5874400110828ae58fb9b581ce9dddd3e549ae04a0985459bde6c626594e7b05dc4278b2a1465c1368408823c85e96dc66c3a30983c639664fc4569a37fe21e5a195b5776eed2df8d8d361af686e750229bbd663f161868a50615e0c337bec0ca35fec0bb19c36eb2e0bbcc0582fa1d93aacdb061063f59f2ce1ee43605e5d89eca183d2acdfe9f81011022ad3b43a3dd417dac94b4e11ea81b192966e966b182082e71964607b4f8002f36299844a11f2ae0faeac2eae70f8f4f98088acdcd0ac556e9fccc511521908fad26f04c64201450305778758b0538bf8b5bb144a828e629795
+Output=e6ad181f053b58a904f2457510373e57
+
+Decrypt=RSA-OAEP-10
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=9886c3e6764a8b9a84e84148ebd8c3b1aa8050381a78f668714c16d9cfd2a6edc56979c535d9dee3b44b85c18be8928992371711472216d95dda98d2ee8347c9b14dffdff84aa48d25ac06f7d7e65398ac967b1ce90925f67dce049b7f812db0742997a74d44fe81dbe0e7a3feaf2e5c40af888d550ddbbe3bc20657a29543f8fc2913b9bd1a61b2ab2256ec409bbd7dc0d17717ea25c43f42ed27df8738bf4afc6766ff7aff0859555ee283920f4c8a63c4a7340cbafddc339ecdb4b0515002f96c932b5b79167af699c0ad3fccfdf0f44e85a70262bf2e18fe34b850589975e867ff969d48eabf212271546cdc05a69ecb526e52870c836f307bd798780ede
+Output=510a2cf60e866fa2340553c94ea39fbc256311e83e94454b4124
+
+Decrypt=RSA-OAEP-10
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=6318e9fb5c0d05e5307e1683436e903293ac4642358aaa223d7163013aba87e2dfda8e60c6860e29a1e92686163ea0b9175f329ca3b131a1edd3a77759a8b97bad6a4f8f4396f28cf6f39ca58112e48160d6e203daa5856f3aca5ffed577af499408e3dfd233e3e604dbe34a9c4c9082de65527cac6331d29dc80e0508a0fa7122e7f329f6cca5cfa34d4d1da417805457e008bec549e478ff9e12a763c477d15bbb78f5b69bd57830fc2c4ed686d79bc72a95d85f88134c6b0afe56a8ccfbc855828bb339bd17909cf1d70de3335ae07039093e606d655365de6550b872cd6de1d440ee031b61945f629ad8a353b0d40939e96a3c450d2a8d5eee9f678093c8
+Output=bcdd190da3b7d300df9a06e22caae2a75f10c91ff667b7c16bde8b53064a2649a94045c9
+
+Decrypt=RSA-OAEP-10
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=75290872ccfd4a4505660d651f56da6daa09ca1301d890632f6a992f3d565cee464afded40ed3b5be9356714ea5aa7655f4a1366c2f17c728f6f2c5a5d1f8e28429bc4e6f8f2cff8da8dc0e0a9808e45fd09ea2fa40cb2b6ce6ffff5c0e159d11b68d90a85f7b84e103b09e682666480c657505c0929259468a314786d74eab131573cf234bf57db7d9e66cc6748192e002dc0deea930585f0831fdcd9bc33d51f79ed2ffc16bcf4d59812fcebcaa3f9069b0e445686d644c25ccf63b456ee5fa6ffe96f19cdf751fed9eaf35957754dbf4bfea5216aa1844dc507cb2d080e722eba150308c2b5ff1193620f1766ecf4481bafb943bd292877f2136ca494aba0
+Output=a7dd6c7dc24b46f9dd5f1e91ada4c3b3df947e877232a9
+
+Decrypt=RSA-OAEP-10
+Ctrl = rsa_padding_mode:oaep
+Ctrl = rsa_mgf1_md:sha1
+Input=2d207a73432a8fb4c03051b3f73b28a61764098dfa34c47a20995f8115aa6816679b557e82dbee584908c6e69782d7deb34dbd65af063d57fca76a5fd069492fd6068d9984d209350565a62e5c77f23038c12cb10c6634709b547c46f6b4a709bd85ca122d74465ef97762c29763e06dbc7a9e738c78bfca0102dc5e79d65b973f28240caab2e161a78b57d262457ed8195d53e3c7ae9da021883c6db7c24afdd2322eac972ad3c354c5fcef1e146c3a0290fb67adf007066e00428d2cec18ce58f9328698defef4b2eb5ec76918fde1c198cbb38b7afc67626a9aefec4322bfd90d2563481c9a221f78c8272c82d1b62ab914e1c69f6af6ef30ca5260db4a46
+Output=eaf1a73a1b0c4609537de69cd9228bbcfb9a8ca8c6c3efaf056fe4a7f4634ed00b7c39ec6922d7b8ea2c04ebac
+
+Title = RSA DigestSign and DigestVerify
+
+DigestSign = SHA256
+Key = RSA-2048
+Input = "Hello World"
+Output = ba8c24b86f18633767ed1778ef12d283a508d0bef32dd50b4a67cbd6b75df0f4ef6e69bfafbc809b01b93ab34aad9a33908644efca6eca04db1afda1016d1c1603183d2263597cf85ce5b7acd6a4872cbcc401b90b221d85aa0a2d0e1f159fc0843e0a55c47dc108c3f207d000e954605fabbb8c938050f280e29653aa1438109d02e53dfbdcb8cb9b46d372dd39ba7317a3f4c0020dba1ddd247b3d58addb1df7208785a62a8e3e4372c1fa6d24a17cd6413f7f5c046ba40a881c21875fde848b3b56fea7264430eca15b27c5c3b72fedcbcc124f8d939ffc11e6d3172c7eb491d378902093fcc3bf3a2835a1fcfabf457c13abf7b37f08595ed72332e27034
+
+DigestSign = SHA256
+Key = RSA-2048
+Input = "Hello "
+Input = "World"
+Output = ba8c24b86f18633767ed1778ef12d283a508d0bef32dd50b4a67cbd6b75df0f4ef6e69bfafbc809b01b93ab34aad9a33908644efca6eca04db1afda1016d1c1603183d2263597cf85ce5b7acd6a4872cbcc401b90b221d85aa0a2d0e1f159fc0843e0a55c47dc108c3f207d000e954605fabbb8c938050f280e29653aa1438109d02e53dfbdcb8cb9b46d372dd39ba7317a3f4c0020dba1ddd247b3d58addb1df7208785a62a8e3e4372c1fa6d24a17cd6413f7f5c046ba40a881c21875fde848b3b56fea7264430eca15b27c5c3b72fedcbcc124f8d939ffc11e6d3172c7eb491d378902093fcc3bf3a2835a1fcfabf457c13abf7b37f08595ed72332e27034
+
+DigestSign = SHA256
+Key = RSA-2048
+Input = "Hello "
+Input = "World"
+Ctrl = rsa_padding_mode:pss
+Ctrl = rsa_pss_saltlen:0
+Output = 4a35cc7623f176c997696213045024f1b1121a6ec4a5755d206c20fc4a7c5259566d19730f6f1a75ac00878c6290e6757510588d740da3633b09a1d899c7dfba2031cfcae6a490e995c87f4750ea88948009cbed6c80cebb9ebfab7d04805e7a2140373fb888b5e6151d1c4eb7f505c4e0a584c17c6ca71e552ba13e1f20101796fe0d1af0cde661fc47d904b5d3f127073471fe6dc7e78f5cd2a049d67e0c7c92184e2bf97f8e16b50b8385daa1f8882e8f6c8683720903454b35356058f2f0136cad7689105167bacbe0dbad466ff2a298e41e5a65caecac4cde08529b7ea8717258e19b0732c966b34f5d52e4ec3073da78757471086553a3ff6c5460bcda
+
+DigestVerify = SHA256
+Key = RSA-2048-PUBLIC
+Input = "Hello "
+Input = "World"
+Output = ba8c24b86f18633767ed1778ef12d283a508d0bef32dd50b4a67cbd6b75df0f4ef6e69bfafbc809b01b93ab34aad9a33908644efca6eca04db1afda1016d1c1603183d2263597cf85ce5b7acd6a4872cbcc401b90b221d85aa0a2d0e1f159fc0843e0a55c47dc108c3f207d000e954605fabbb8c938050f280e29653aa1438109d02e53dfbdcb8cb9b46d372dd39ba7317a3f4c0020dba1ddd247b3d58addb1df7208785a62a8e3e4372c1fa6d24a17cd6413f7f5c046ba40a881c21875fde848b3b56fea7264430eca15b27c5c3b72fedcbcc124f8d939ffc11e6d3172c7eb491d378902093fcc3bf3a2835a1fcfabf457c13abf7b37f08595ed72332e27034
+
+DigestVerify = SHA256
+Key = RSA-2048-PUBLIC
+Input = "Hello"
+Input = "World"
+Output = ba8c24b86f18633767ed1778ef12d283a508d0bef32dd50b4a67cbd6b75df0f4ef6e69bfafbc809b01b93ab34aad9a33908644efca6eca04db1afda1016d1c1603183d2263597cf85ce5b7acd6a4872cbcc401b90b221d85aa0a2d0e1f159fc0843e0a55c47dc108c3f207d000e954605fabbb8c938050f280e29653aa1438109d02e53dfbdcb8cb9b46d372dd39ba7317a3f4c0020dba1ddd247b3d58addb1df7208785a62a8e3e4372c1fa6d24a17cd6413f7f5c046ba40a881c21875fde848b3b56fea7264430eca15b27c5c3b72fedcbcc124f8d939ffc11e6d3172c7eb491d378902093fcc3bf3a2835a1fcfabf457c13abf7b37f08595ed72332e27034
+Result = VERIFY_ERROR
+
+DigestSign = SHA256
+Key = RSA-2048
+Input = "Hello "
+Input = "World"
+Output = ba8c24b86f18633767ed1778ef12d283a508d0bef32dd50b4a67cbd6b75df0f4ef6e69bfafbc809b01b93ab34aad9a33908644efca6eca04db1afda1016d1c1603183d2263597cf85ce5b7acd6a4872cbcc401b90b221d85aa0a2d0e1f159fc0843e0a55c47dc108c3f207d000e954605fabbb8c938050f280e29653aa1438109d02e53dfbdcb8cb9b46d372dd39ba7317a3f4c0020dba1ddd247b3d58addb1df7208785a62a8e3e4372c1fa6d24a17cd6413f7f5c046ba40a881c21875fde848b3b56fea7264430eca15b27c5c3b72fedcbcc124f8d939ffc11e6d3172c7eb491d378902093fcc3bf3a2835a1fcfabf457c13abf7b37f08595ed72332e27034
+
+# As there dont seem to be test vectors for these - they were just generated
+# to verify that all approved digests are supported.
+Title = Test RSA with different digests
+
+DigestSign = SHA224
+Key = RSA-2048
+Input = "Hello World"
+Output = 4bae2cf892733233985102eb7117303e49994a8a97b3de64597c33f15a689502ba4dcea20f0ada460b262bd0c92db23dd090453f95debbfd7a835b51d1923ede76f4f66ba04d9ba0715b333a747c8d469283af653f286a307a3c46cd91f51ca2d597f9d3951fc068ff3ed45ba6b3540801159c7c890a252183de9e4aeb0512eb9ae681ac1d436c9efef9f265dcdf64ce67dce73d8a88bcb0008211bc6cd5493822818bfc208b8737ae38874184f834301de26e537694cfdc0abaccc2702820ee58cbba243aac685681329705999f4d77e596615293eb642ec450f149caabfab55092fc0315ec4157d322813ba9790c0f46c6805b8e1c0f21b6211c3529e6d7cc
+
+DigestSign = SHA384
+Key = RSA-2048
+Input = "Hello World"
+Output = 041348caa7ffaa7dce1ac67567c408967a1736dd44ff73076570a63c4c7128ff09f716918b81fdfaa160368bc8b85c23466f8c0d4172da880386b75065f541c0fb6c9355a1731532ebab9cf5026cafe03a790bc1698586fbdff5f6e8f1a7148b07f1f895a99d0f041b8b36d8ffdd5e77ba36e5177610e0825ba78594f95826dabdc95f682da04edf0d133c55e78fa386dea9dbc1cf748e768e9116976476e75a84b5510d869beac9a1a9ffc579a28629154b24ee9df8d51fee479f4dca5646a2032c27206ad30f4937fc096c41362562bee74562132a4f471bb4b4c76e774be0e9eca9412809665ab13951d3699b3a7ccb6714a0f070345f6f3e037bd0f8ae52
+
+DigestSign = SHA512
+Key = RSA-2048
+Input = "Hello World"
+Output = 32e1f87fcd81a9d5a9f988087cdb3931fe0b12197d501b9c958cc1614a236e71a00ee7c96f7d5b3ae5ae3f11e40df5d06b0a818ee2a573aa1459f7f14dc22ca0b0b0ad2d47f4ab9e479baa084973b69f74f691ee700af102aceaf788e513f0e942a862bc6884ef1efb993b11d2ebd95139c61c37f8eac3edd94a4d8a358842f17da6d2971b8141a70097a1de569751eb4533e27880206fb8f8e1ac995688ca6facc85ed116becea9d3c4d0e96b2cb4b422b21c81328a335441d897c7deebf0f605ef086cfc5d81d1ab30ac04f674993511b142ea7ad43a8d3b7b1d2d26ce4a93413b690afdb1718408379fbd002a3c569bf11f0c10ce7cb46e257ce6b62ef62b
+
+DigestSign = SHA512-224
+Key = RSA-2048
+Input = "Hello World"
+Output = 8f20f0f2389408cfb7f4b47c299ca610c34a2ad20664378530ecf977c3243ce5f01c71296d2101dc962853a27f64a228eea92fee05780be31cdd7fe648d39f136de1dd857609d0d54d0de52c5cdf09d95986d808d1c92dcb3e8e96848af788c959927196316fcc56b884d34711a2a947b7e806caf7a2b05314f0c726b5e083baa0b341ac6515529bf6b3a7098a635c865e8d4b05af68fb3e893feb12ac7c4d667e1233f2e39449c285d4ad2a809e687f68ef66daf710e7d21e97833372c251bc0b45bc79c8bfe4087f16662875c2fc91a02d11078556a2b3232617406fbd947b9d95c193742ac4bb1858934ed7288cd0327c678b5295c682a4d2ba91d8fafae7
+
+DigestSign = SHA512-256
+Key = RSA-2048
+Input = "Hello World"
+Output = 00904130234e4e1a51060f7747ab26ca766c64cff1df97e4d0f432169046da422305ddea16b96e0d8fcc5ab651ac247d1b65283f2f27e7e97538e9f6b77f9558c9885d5ddacaf4d6ca600ad61693766498fa815361cd1debe2d71a5af77da71f8bd72d2f5cf741aa177a2dc44107f5887d95b217c67dbc5a4874f9aa8de1fc8a5645815c561edcb348db6458018096a99a98f5d2e677f068c9093618e28f532a97e8d6161aec002d5273884ce8b46f077d37b1e158de682a927126952bdbb6b6dfdf47d7e34a7d9c9b1395315586a11ceadfb72c021b28e28b8397bc9086418a45cb8c1ad46ef47f1c2bedb14b50e50b58bd607992e1d19b895119c6a62471b4
+
+DigestSign = SHA3-224
+Key = RSA-2048
+Input = "Hello World"
+Output = 5b6f6834356ba08ef649d822592d7a3d889995283e3752760b0728ed99aa05af901298159485a690f8dab21c850946ef2376bedcc87f403288039e1eb18dfdf4ac1075753528c94b5a8b11f74513ef64eddc215f7df97d977e788fd93db4063529fd87f583c1c98d39cd79178330bae7980d9a846acdf3bdd77a864f85b77941b375c076ff86def44b8da19b5de6131bb8894c870d4deeb62361bd429faad97530abab33795912d63f2fb886b25f1a1d9583fae3b7cf6dd6a5addd1b28320ab88a4dac2d938fb50b6c9115c7a0a4edd6b7b3453e435605839703f0b0c6e58f7bb73ef0fb38cab4f2d9dc1fd8b8b77b36ae945dea7563eaa33608781ce5ac181b
+
+DigestSign = SHA3-256
+Key = RSA-2048
+Input = "Hello World"
+Output = c531d0db6635b7c58c7118641565796c3d61323e303246cfc39e4e697727fede52b029407f82aa07e25c4833d18ec6ef6b585f3f078ca1494ae80a696fec701e1c2386196100cc5879fb8ea77f07b7019185258e1ad632c28cc672a61296787bb16a0e4f259d6eac1960f7eaaee1f7ab7eea3cf2d9e11435859630f0c71c48c8655b1252e072f18831731b2bc8e788a722c77db57583c7456e9b7fd5273e6781e214616620084dfefffe506910a39087912c3a8586fce65d8a0b1e5803ffe59b53537119653d708a55ef17d2721b9c8c183fe6750991b0e77b79d8d208ad750b2bc3426fbeeebf9b090bfc19f6534e44bf6d7d2f2e1dc2594b38ceda420553c9
+
+DigestSign = SHA3-384
+Key = RSA-2048
+Input = "Hello World"
+Output = 78bc11342fd44b4c047a365cc6ef78476bf28547da4eafec09f6bdf68a5593e993716662801b313515d80ddd232dfcc414cf896349a0237976dd89a97a9c88a92cd86992996d9c2747bf4e5dff5acb2fc67aa51ceb27ed1b95edd952d8eab3055cdc576a860593308c426f7ea73e01bd05fb20a4fcb64b10945e1684da67a8367826535344ad25057b4840e138909668c2423669b51f2fec631fd7e919f6e8b82ee293878894cac6a58b21f2168ba6335197e39e587fd60076a369f0b8e779c045c507654fbb98f5ffc998f720ab48bdbfe6d397aa63c7209b45068e24b65371180ff6d775851b2aaceac393082920fffb9e8b6999c682875bd0eff231dfaadf
+
+DigestSign = SHA3-512
+Key = RSA-2048
+Input = "Hello World"
+Output = 4681312b0e27e4e5f2dd3165ea5bdc98210d4883709a842239cef72099d71855fc322c3d2f74a7e7357647de153c22e4c4f9a0e4f1ce9b7f993242df5ee778ca949e6e184551e87e0aac8440ae990ef76a14f6056a16181390ad3a150bfdbb985cfe4cca3255b5eb0871116654d59fc89f69adb46c307b927c51a5f34069a2f43c854fde8e2df0ded10f8e257d1d800aa44bf31981f93c062128cc551ad7f5f7ba68e9d7c917c8fc51bcda3ce9192680c1e5308bd5c571ac0a5ae7347a897e8698ea94059562cd3035e3ed5fcf6c4ca8c20f58a079dfcdb175242a5726237d1b92378ec7dc4f2db09a0fbd62d1ab6d1a3d0be7afd34ed9c3ecd1bc5a3d2c448c
+
+Title = Test RSA keypair mismatches
+
+PrivateKey = RSA-2048-BIS
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCytEHg4qzeBrqu
+1haSf0xOttQeyburRKC4N4KJIbtQbooYS6M7C9mvXdz4vA7PtgXS6L4gDTH2Bpa5
+qvbAYQ7CbmssmkciN/bqxMqecsuN49uMRF2Yy40UYCKv+wv6fGbCsrczDc5kfRu2
+XzKHewAKF9EZYkKLNfLjT+jQAogdfmnShDQPWus7t+9RbuZPrg/iz/urQGfTEarW
+8yFl6jJd88cjASrGCCxTCL2BLuimLrSauF/Na9K1Jmxst+lqXKhf4YYtf5ARgDBn
+oOfZl24ts9twBXD6hjfhVh3wOPJL3+EKOORBclHixQ47Kx9ermb6hQDv0AyRoXyp
+6Jy7gkLxAgMBAAECggEAeDWjXxh7+nqCV5ux4Wf6N7Tqqa9AK6xlhKXqjD6Bl1BU
+WpV+vvhwvXOhcjxmpjimYEKpqjvWEM5L06d6htyDJi1KsN0y3oTQ9wnb1owX+2F8
+TTWr1F2QkFU+4Cw62YuXQH8hlxlBbf1uh9Yv0kzeMOvmf3HGm4h104zsaghZ8aP4
+Tmmeqnc+ty3iQkjDLIXEaHYIZ1AZ7fzc/rc6kbkWGkVAgCP1CDIm3q586OZDQz0E
+hgLhWHgJQ5Z2m9Qw/hROJeesKHtq19GFafIBANDelB/yG8p+dCqPQsg6nm24jAHO
+pT1EipOWwLnsTBsa9BlcCYeBpqNIPV4ST+X4Que59QKBgQDjublne/+/i7dQLpCT
+01fzbkDEIV2s7jVpEz0imzT6HXIeHBpOmS7GHlurN7WLUcbB5QUEgzNxA08x80o1
+oU9b/jUpFBJRudyIKX8aSBVSInOXw1eQNjkqBZdUVN1ADeS/HYRYnPhIB4w31XgJ
+ujc9udPtn2GqWfKXrG5abfXfdwKBgQDI5GJ/8kh4nxtC7SvcJNfbRtC/03f0vJQj
+600vCU8X+wkk1EMtnHU/A/oOhZey/zdc03h3UuwznOER8KWLB8/XidRZnT9NgMGb
+sO7sNPyTfMep+jLcolv1SAThjQxAVxCkvl87GFGvGnBCTtLWMEWpazl8XH+aHgyn
+1NU/VJqa1wKBgD5Nb6YaTKwRA4QSWUe4SJW3Ek0We9R2D3LB6rXvFJ1hNPl74s6i
+JiPZ5mZ/hVGqe+BMUgUcCBThPOeDkkf97AJVGCI29ZQab3VpNPbxxbOE7W8V6Hzx
++M3AXdiapzWBF5YZ8z1zJJJATmJwKrkukzJ2Br86HbRHi5FngYGIF/6dAoGAE/32
+d3krESX0VpK3vK7F9IJ1n8FxvJ9Ptsth4P5yKpbG8C1XiiB54o2Iww00bZHMdqZs
+5KMR8oj4NQrXzqA2ZOLIiSqG9DWODupqvIMBZ8QRMq89hIt7z0sdgTzCLVz8wQhY
+/c6LwntFFLQ3cy1WoWeUTvX9lN7Mr58UobrPr/0CgYEA31WYhr/TH7sBG5tlUvuK
+1KYMRwh1HR3lMnuCzAFOEtIJhSG/GtWyPtlYzYWvYGEukBO5+QSoB9K+jNEm6tNw
+mRsMet399ylSQMkmPIfXldQvDF/9AvXBCR+EttZDr2Dw0Haeu4PGwT3WgqGHDWz5
+vOpxAsEe+k0AI8MnJvlO8uw=
+-----END PRIVATE KEY-----
+
+PublicKey = RSA-2048-BIS-PUBLIC
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsrRB4OKs3ga6rtYWkn9M
+TrbUHsm7q0SguDeCiSG7UG6KGEujOwvZr13c+LwOz7YF0ui+IA0x9gaWuar2wGEO
+wm5rLJpHIjf26sTKnnLLjePbjERdmMuNFGAir/sL+nxmwrK3Mw3OZH0btl8yh3sA
+ChfRGWJCizXy40/o0AKIHX5p0oQ0D1rrO7fvUW7mT64P4s/7q0Bn0xGq1vMhZeoy
+XfPHIwEqxggsUwi9gS7opi60mrhfzWvStSZsbLfpalyoX+GGLX+QEYAwZ6Dn2Zdu
+LbPbcAVw+oY34VYd8DjyS9/hCjjkQXJR4sUOOysfXq5m+oUA79AMkaF8qeicu4JC
+8QIDAQAB
+-----END PUBLIC KEY-----
+
+PrivPubKeyPair = RSA-2048-BIS:RSA-2048-BIS-PUBLIC
+
+PrivPubKeyPair = RSA-2048-BIS:RSA-2048-PUBLIC
+Result = KEYPAIR_MISMATCH
+
+Title = Test RSA keygen
+
+# Key generation tests
+
+# RSA-PSS with restrictions, should succeed.
+KeyGen = RSASSA-PSS
+KeyName = tmppss
+Ctrl = rsa_pss_keygen_md:sha256
+Ctrl = rsa_pss_keygen_mgf1_md:sha512
+
+# Check MGF1 restrictions
+DigestVerify = SHA256
+Key = tmppss
+Ctrl = rsa_mgf1_md:sha256
+Result = PKEY_CTRL_ERROR
+
+# Test valid digest and MGF1 parameters. Verify will fail
+DigestVerify = SHA256
+Key = tmppss
+Ctrl = rsa_mgf1_md:sha512
+Input = ""
+Output = ""
+Result = VERIFY_ERROR
+
+# Check caching of key MGF1 digest restriction
+DigestVerify = SHA256
+Key = tmppss
+Ctrl = rsa_mgf1_md:sha1
+Result = PKEY_CTRL_ERROR
+
+Title = RSA FIPS tests
+
+# FIPS tests
+
+# Verifying with SHA1 is permitted in fips mode for older applications
+DigestVerify = SHA1
+Key = RSA-2048
+Input = "Hello "
+Output = 87ea0e2226ef35e5a2aec9ca1222fcbe39ba723f05b3203564f671dd3601271806ead3240e61d424359ee3b17bd3e32f54b82df83998a8ac4148410710361de0400f9ddf98278618fbc87747a0531972543e6e5f18ab2fdfbfda02952f6ac69690e43864690af271bf43d4be9705b303d4ff994ab3abd4d5851562b73e59be3edc01cec41a4cc13b68206329bad1a46c6608d3609e951faa321d0fdbc765d54e9a7c59248d2f67913c9903e932b769c9c8a45520cabea06e8c0b231dd3bcc7f7ec55b46b0157ccb5fc5011fa57353cd3df32edcbadcb8d168133cbd0acfb64444cb040e1298f621508a38f79e14ae8c2c5c857f90aa9d24ef5fc07d34bf23859
+
+# Verifying with a 1024 bit key is permitted in fips mode for older applications
+DigestVerify = SHA256
+Key = RSA-1024
+Input = "Hello"
+Output = 80382819f51b197c42f9fc02a85198683d918059afc013ae155992442563dd2897008297fecb3a8d8cf9421d493a99bd427a628f17cc4a7c76d23dfad0619f4068403fa7351f6d5a92a631d670c04407f305a4b5cb492295754e73e9b7ad41459826d3619a61e90d4744bdaf0f24f2393ea9241e973600c2ed62b1a0a37c504e
+
+# Signing with SHA1 is not allowed in fips mode
+Availablein = fips
+DigestSign = SHA1
+Securitycheck = 1
+Key = RSA-2048
+Input = "Hello"
+Result = DIGESTSIGNINIT_ERROR
+
+# Signing with a 1024 bit key is not allowed in fips mode
+Availablein = fips
+DigestSign = SHA256
+Securitycheck = 1
+Key = RSA-1024
+Input = "Hello"
+Result = DIGESTSIGNINIT_ERROR
+
+# Verifying with a legacy digest in fips mode is not allowed
+Availablein = fips
+DigestVerify = MD5
+Securitycheck = 1
+Key = RSA-2048
+Input = "Hello"
+Result = DIGESTVERIFYINIT_ERROR
+
+# Verifying with a key smaller than 1024 bits in fips mode is not allowed
+Availablein = fips
+DigestVerify = SHA256
+Securitycheck = 1
+Key = RSA-512
+Input = "Hello"
+Result = DIGESTVERIFYINIT_ERROR
diff --git a/test/recipes/30-test_evp_data/evppkey_sm2.txt b/test/recipes/30-test_evp_data/evppkey_sm2.txt
new file mode 100644
index 000000000000..410be7abeef0
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evppkey_sm2.txt
@@ -0,0 +1,85 @@
+#
+# Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 are ignored.
+
+
+# Public key algorithm tests
+
+# Private keys used for PKEY operations.
+
+Title = SM2 tests
+
+PrivateKey=SM2_key1
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQg0JFWczAXva2An9m7
+2MaT9gIwWTFptvlKrxyO4TjMmbWhRANCAAQ5OirZ4n5DrKqrhaGdO4VZHhRAYVcX
+Wt3Te/d/8Mr57Tf886i09VwDhSMmH8pmNq/mp6+ioUgqYG9cs6GLLioe
+-----END PRIVATE KEY-----
+
+Verify = SM2_key1
+Ctrl = digest:SM3
+Input = D7AD397F6FFA5D4F7F11E7217F241607DC30618C236D2C09C1B9EA8FDADEE2E8
+Output = 3046022100AB1DB64DE7C40EDBDE6651C9B8EBDB804673DB836E5D5C7FE15DCF9ED2725037022100EBA714451FF69B0BB930B379E192E7CD5FA6E3C41C7FBD8303B799AB54A54621
+
+Verify = SM2_key1
+Ctrl = digest:SM3
+Input = B1139602C6ECC9E15E2F3F9C635A1AFE737058BC15387479C1EA0D0B3D90E9E5
+Output = 3045022100E6E0414EBD3A656C35602AF14AB20287DBF30D57AF75C49A188ED4B42391F22402202F54F277C606F4605E1CE9514947FFDDF94C67A539804A4ED17F852288BDBE2E
+
+Verify = SM2_key1
+Ctrl = digest:SHA512
+Input = 40AA1B203C9D8EE150B21C3C7CDA8261492E5420C5F2B9F7380700E094C303B48E62F319C1DA0E32EB40D113C5F1749CC61AEB499167890AB82F2CC9BB706971
+Output = 3046022100AE018933B9BA041784380069F2DDF609694DCD299FDBF23D09F4B711FBC103EC0221008440BB1A48C132DE4FB91BE9F43B958142FDD29FB9DABE01B17514023A2F638C
+Result = PKEY_CTRL_ERROR
+
+Availablein = default
+Decrypt = SM2_key1
+Input = 30818A0220466BE2EF5C11782EC77864A0055417F407A5AFC11D653C6BCE69E417BB1D05B6022062B572E21FF0DDF5C726BD3F9FF2EAE56E6294713A607E9B9525628965F62CC804203C1B5713B5DB2728EB7BF775E44F4689FC32668BDC564F52EA45B09E8DF2A5F40422084A9D0CC2997092B7D3C404FCE95956EB604D732B2307A8E5B8900ED6608CA5B197
+Output = "The floofy bunnies hop at midnight"
+
+# This is the same as above, but with explicit digest control
+Availablein = default
+Decrypt = SM2_key1
+Ctrl = digest:SM3
+Input = 30818A0220466BE2EF5C11782EC77864A0055417F407A5AFC11D653C6BCE69E417BB1D05B6022062B572E21FF0DDF5C726BD3F9FF2EAE56E6294713A607E9B9525628965F62CC804203C1B5713B5DB2728EB7BF775E44F4689FC32668BDC564F52EA45B09E8DF2A5F40422084A9D0CC2997092B7D3C404FCE95956EB604D732B2307A8E5B8900ED6608CA5B197
+Output = "The floofy bunnies hop at midnight"
+
+# Test with an C1y value < 32 bytes in length (self generated)
+Availablein = default
+Decrypt = SM2_key1
+Input = 3072022070DAD60CDA7C30D64CF4F278A849003581223F5324BFEC9BB329229BFFAD21A6021F18AFAB2B35459D2643243B242BE4EA80C6FA5071D2D847340CC57EB9309E5D04200B772E4DB664B2601E3B85E39C4AA8C2C1910308BE13B331E009C5A9258C29FD040B6D588BE9260A94DA18E0E6
+Output = "Hello World"
+
+# Test with an C1x and C1y valuey > 32 bytes in length, and longer plaintext (self generated)
+Availablein = default
+Decrypt = SM2_key1
+Input = 3081DD022100CD49634BBCB21CAFFFA6D33669A5A867231CB2A942A14352EF4CAF6DC3344D54022100C35B41D4DEBB3A2735EFEE821B9EBA566BD86900176A0C06672E30EE5CC04E930420C4190A3D80D86C4BD20E99F7E4B59BF6427C6808793533EEA9591D1188EC56B50473747295470E81D951BED279AC1B86A1AFE388CD2833FA9632799EC199C7D364E5663D5A94888BB2358CFCBF6283184DE0CBC41CCEA91D24746E99D231A1DA77AFD83CDF908190ED628B7369724494568A27C782A1D1D7294BCAD80C34569ED22859896301128A8118F48924D8CCD43E998D9533
+Output = "Some longer plaintext for testing SM2 decryption. Blah blah blah blah blah blah blah blah blah blah blah blah blah."
+
+# This is a "fake" test as it does only verify that the SM2 EVP_PKEY interface
+# is capable of creating a signature without failing, but it does not say
+# anything about the generated signature being valid, nor does it test the
+# correct implementation of the cryptosystem.
+Sign = SM2_key1
+Ctrl = digest:SM3
+Input = D7AD397F6FFA5D4F7F11E7217F241607DC30618C236D2C09C1B9EA8FDADEE2E8
+Output = 3045022100f11bf36e75bb304f094fb42a4ca22377d0cc768637c5011cd59fb9ed4b130c98022035545ffe2c2efb3abee4fee661468946d886004fae8ea5311593e48f7fe21b91
+Result = KEYOP_MISMATCH
+
+Title = SM2 key generation tests
+
+KeyGen = SM2
+KeyName = SM2_genkey1
+
+KeyGen = SM2
+Ctrl = group:sm2
+KeyName = SM2_genkey2
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 000000000000..8cb70247a0b4
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evprand.txt
@@ -0,0 +1,79394 @@
+#
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# 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 vector from NISTs CAVP tool
+
+Title = CAVP Large Seed
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 256
+Entropy.0 = 22ED7A66C9E9F494C8D2B8F81D0D49BCDD0C03863FF5979212211EFE3E945758B6228CDD9E9EEC5F7984AEF7212699F3
+Nonce.0 = 5BF245B95F8E1377D5A17EB331AABCD9
+EntropyPredictionResistanceA.0 = C0535ACD3D715A0B1453AB3447D53D9131C939AEE1D9CA24A75B285CF58D79403A4111E2F3DEE011154D31D646D93001
+EntropyPredictionResistanceB.0 = 9FBC48890273FCAFCA1904B6486D1877CAD91EB601E979259506F93BA462AC17D8676C570B2231D4D98EC617C4826573
+Output.0 = 19CED57563D065B606DA27DD5E8DE83B93BB7C8F8B02D0288F475550C3F44B77
+
+
+# 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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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 = bfb0077e995f49c403dc38297ee47b41938864d734b2e7b794e9bbf461a2a4a45f364d82a66b3730bc5c9902d7b5999f74554e59e454d658a86d4813b5e7609e03bc750c38cd52b36676057ed80bfd41
+Entropy.5 = 7dd2fffc51456dd47260395ddca60c8f
+Nonce.5 = 631e5b0ce84e3652
+AdditionalInputA.5 = cfc3ab0a51c3b0adb320fba6112ac856
+AdditionalInputB.5 = f5aaae47c823c04e6960dcc205fd77a3
+Output.5 = c6118f4689c7fccd5aeb468775807d39631f5b315f0c83b5d96fa6c2ebc0f95ef4414efe1c99ce71e62c4617dd1cc95777dddaa8258d065bf3af2adc679dd3d19d23ced6e2b4b47c856576f9697a5f42
+Entropy.6 = 7491cd165de84be1ce94f0bc28b7a01c
+Nonce.6 = 7de5f37fbd777526
+AdditionalInputA.6 = 2c2eb193197be11fd96c6b4f8a56748e
+AdditionalInputB.6 = 411d9f71e0f97e940650f4ca999fde5c
+Output.6 = dfd15d00e3693e89efffedd287af2f6f33004cb42b16b38b41a393548190f841dbcaddf67c410b79a9cf104ad1805e89e2c1a41a24053614d67e9567c1ac989db33d792d802455b17b174adbc9ded7b4
+Entropy.7 = 14986734e419b647da59bad386a16cf9
+Nonce.7 = c37c9bf5a4365123
+AdditionalInputA.7 = 58bb485852a867eb556c53e904c55939
+AdditionalInputB.7 = 92fd0b39db4f98260399d5c12d744ad3
+Output.7 = 81c7509fd3aa29f79e6ce6037ed4800317b74a6eab5c8ee15205d292bdab76d7bae62cb2c26c6bb95d66bc8d3b270e89f9e61b62818ebe27ffe49f3eb86ee5fcd492b7ee03ddca6dd333a3d9334fe2da
+Entropy.8 = 29872460a7f13c18e68067a0fb8dd6c2
+Nonce.8 = 7d62e20aa71a945b
+AdditionalInputA.8 = ebd987bd551b354bddc17414a26e1f08
+AdditionalInputB.8 = c2c0e53e61451ae17ff6a90c49b466d7
+Output.8 = 95609822203263f92a40955a5619240e7409136334e31b956368b49bb855065172de3718c40483871b455d8e25f43423b991b3aa9bcf0e27b4509b45d8f7983bc054ed5ff1999fbb75f9e91bfeab8a6e
+Entropy.9 = bb0a1f9b84741b55384b89c055d50272
+Nonce.9 = 2586dfe6306db73d
+AdditionalInputA.9 = bcf6ee1eac1d2d3a7b960500f80c5328
+AdditionalInputB.9 = 543fea5515ec0ea5d25d019bce973909
+Output.9 = 9d88970a8076401fc132ecff782a2f6817e4829f6e874172ab3b991f46ff5319987dd6ae539fc2a3657f00480c7bb5e7dd6d1a12969e81a387a9ae43ab9c0d2826448c6ca9e9bf9ae0821a35c4e2f0bd
+Entropy.10 = b9de6531312e4c7c6f492f943d74c2c3
+Nonce.10 = ae15bdf3cd2086dc
+AdditionalInputA.10 = f40354918f5878ccb02e3829893035f5
+AdditionalInputB.10 = df587b0822e64918c2f4903a0f3e2e3b
+Output.10 = a7ab93cd9ffe246dd4e3dc55ba946eb2151d03d0dd2b6a812f8e3a2db19c7810fbf2b9513413141562aad7e57f8ddf7425702f6c1976dfcd821a715868cb6d436acf9708481bfa095454c8c6b81de62b
+Entropy.11 = 70fdd37d3864be6992fbdb7855649fcc
+Nonce.11 = 9f6d994d1cdd270b
+AdditionalInputA.11 = 9e5a48c9b34289dcce947c37cf1a8db7
+AdditionalInputB.11 = a23dd58bf5fd187fc2a0636224388a3f
+Output.11 = bb89ab5854ede92ab6766db2db04a78cd03192ba64f957779d6a23221edbe86c1ab76ddd1af7406688fbebb8ad377bb499f66ec9672705d2fe30e8a2d5eed9b5da5c2c2fd1e059d06c84e3a4d046fc66
+Entropy.12 = 0e1834ca718e2ec89df66f767e31018b
+Nonce.12 = b97757adf5158e82
+AdditionalInputA.12 = 1b8f115dc9375400212e503376a90f6b
+AdditionalInputB.12 = b7b8a74d1db1ecb66c8a7f82ec55ec13
+Output.12 = a55d54fa57aa36456c64edf2a4bfc3a0458d20c00bd19b5dc971647eb46d282466c5ade26403f37af1906e57550bd41ed4e8848b485a122050c71ec1c59a28399ff07097ab2849cb0165fe6fa577f032
+Entropy.13 = 49666d8b26cf630f37eab9089eabbae2
+Nonce.13 = 85ead758fa67a29a
+AdditionalInputA.13 = 7702e397a447472df6aba9b322368aee
+AdditionalInputB.13 = d1afea4c22369333a7b08299ae3d44b1
+Output.13 = 63854c32a58054e7ddb0c0c39b8e54a9de6df4a9d8b6324452cf9d022319f6b7e30c7f6c75019a0f37b74b8d1cb19b0dd2814de6b3668fc79c34222fffafbaca9489413d0e29f8b62d7594274371dd90
+Entropy.14 = a3a0cfee0a1fcc885583615d2d4b5952
+Nonce.14 = e7de2c6ffbf1fca0
+AdditionalInputA.14 = 93dc424bd0d266879601745a23317141
+AdditionalInputB.14 = a17321015d327c5dc0bc1e130aad81ee
+Output.14 = f682834b5b492e09ff8e0f2c80683b032a3b262d16bc609c550dc0e74a4b7d8ebc0e3b8f2c9970d90aec9a82497dded20422b17b9e3cc3bca771cbe717ddaed5a7a6ae2601c7f765eaa719b71624e83b
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = f7e316b13117dcc18c4407b6a5cdc5d8
+Nonce.0 = b80ddee75cf39a48
+PersonalisationString.0 = 816cb137ef64f9df71a3b3a0b3aaf9b1
+Output.0 = be888585d95d95269f002abd8b1e33b2cb667a96d3be6d20d784b1bbc6639347837d01d4b95eed8137cf29fe724cfedf8b23f9258480be350c3407973c59a9d7f3a6585b3c0e36a36c6234d68852acaf
+Entropy.1 = 033f1e32612fd11974c6992be28b009d
+Nonce.1 = 6b528c9d2accd0af
+PersonalisationString.1 = 1b1defb546206d555c55bf23a7fefd10
+Output.1 = f1e012c33a6f2a5f06f00ecae997e4d6c48b3e5b769c058951e3cb3cd1ae0794165b54d90f0df66a40025956eb76a6150a850cec48c2497d2d5861296877e627df2f064d3d7c12f9692d657f4eea7086
+Entropy.2 = b207ab840b357ae0f84d84fd91fe9db2
+Nonce.2 = 6ad6f67b654f8c1d
+PersonalisationString.2 = 80e0290e51b67e7a5f26b151717c11c4
+Output.2 = b1500533483e007f9221663f00e3745b151b8085229df05e90ad6e1b4f286c11656bcd13ec280cb92075b50c17f4cc9bf4a07d661cfe17518ec5d2649318b9587db88e093e981fc51674c9893044ac7d
+Entropy.3 = d88957fbca97ba8a2e73eb64a38ef31c
+Nonce.3 = 3e07a917c111c5f4
+PersonalisationString.3 = 70860be005c1dd2bf322744040e2b702
+Output.3 = d7a9f9c6ac7b5ab8e06ef707626888628a3fa9cc86385ab56e39901e8b720b932c5c77980a967f38edb95f19b3c0f8e95e0bfdc8fb404771f053da5f96e79d52945cb4277981a978cee80d84b286e1b6
+Entropy.4 = 0a4c590ebcef0556af9811b6462b92d6
+Nonce.4 = 238d395f8d295205
+PersonalisationString.4 = 3df3ddb4cb22e2a6ccd685f094078a12
+Output.4 = 22dfbc9462cff94c26d6073ce10949fb5cd53c6055d727b1be798c5b1d018f732139e74fd7df604224423a2cba88dfe98af88f9977b7d79fff08fc6cdefcad3ac74084bab8af04c5fdabc943d51eda0a
+Entropy.5 = f8d9705829d4908e43d0fb62f72b120a
+Nonce.5 = 349618dce551e7c3
+PersonalisationString.5 = 054d18ec3b0f5afc46f97bbc0c5821e1
+Output.5 = a43c01fe30b01dd1468e4c81f9a6b04f8c34f904b21e5dbe1890778c13f5b36a664837b98a1bb0f533653d6ac7e537a6a0c5c879baf45815ecaee6b03a677b2dc5cc12042f7ca161bf90b2a73cf41d23
+Entropy.6 = 53e093055d912f7fe96f0bccc46165c8
+Nonce.6 = 80f5977f22a096b1
+PersonalisationString.6 = 92ad83187b24748ed77b36313917e980
+Output.6 = e95937e34e5e0c547aeb0e8dbe3cb9ba5f823978e3a42255a0803d096bea9cd22f387b4d967ec6c6d5a66d62f45a837673c586351d7533472d3bd4fa149d26e15ebae9107146b99219d4faed1380a81b
+Entropy.7 = cacb0bf934e427bccd07a6ed85d551e1
+Nonce.7 = bc16676c4386ffa4
+PersonalisationString.7 = 5fd3b05beaab79953709ed3c60e71230
+Output.7 = 60ecf6d89ae63b0ca3c395ecba93fa167776dd46fa2018f11b5d4cfb29ce1fb19d14ca7ce8887c5b195bd1bc0df473505d4b0e69a7bb54ff31c4b48fd06bbc783bfa85c8715aef86fdeeca5212a12bac
+Entropy.8 = b9b66aea1e07b60b30fd32ff2cdcba61
+Nonce.8 = 9b497bed54945c93
+PersonalisationString.8 = edde3ae39578ea819f67b38e552be3b8
+Output.8 = 7dfb2cfa0747071c97f11a4dda3780f3cad20b1c598d3e74b2a90fd39ff6b659012cacbf604b270762bf5008a9f779acbfb2c4b160d42285d63e5a9019626361bbd98bfad148cc81426cecbc076e926f
+Entropy.9 = 811bd64fa915fadf72c114b7b9a3cd40
+Nonce.9 = 8870420e78b33af8
+PersonalisationString.9 = e0dcc2804ed07b8f4eeea4e40268443b
+Output.9 = 7f4dbdaacedcce576bdfa03a80c3861cb52d8b14a6f63e034868dc3fdebb5f2cd1ae5790b755ca617c91714be92902d0088a60d2501123945d533ebc8b9a13fc81b6cf22cc0dca1c86f28aa5bf38a6fa
+Entropy.10 = 375ade012aaefb480dd9e01dcac6b09d
+Nonce.10 = 4b5218c585464fa1
+PersonalisationString.10 = 1d04beeaf792cf336013f6dfecf8bf37
+Output.10 = eabfcdfc396b5e9c10e09b45aa0fe978558aaf8a13c4ce7cdcbab0216882d39555b369c68e62484d1ccd51fdcc4cb61b22a0120147e6686c263c32f66233273a3011dad2428d4d6f5e9e20b9ef6474e4
+Entropy.11 = 86e59a0469837c69ffeca566656f0254
+Nonce.11 = 677e6cb313a34a19
+PersonalisationString.11 = 3809013d72fc559901ca1b06be5878f8
+Output.11 = 8fa62314bf1a1ff584317996a13a648006958fe8cd5263c61a2c689419358dc356f34e1b1981aa8f4d1899a51fed1a9cfc8db7e84b73506377cd12366bbc1440321ef1d64a0a6eb0ffe25400eb82a7ac
+Entropy.12 = 66d1ab7b3115249361db41482538d142
+Nonce.12 = a17cbbde7200d2be
+PersonalisationString.12 = aad7b6a9de717acc17fa7cedc2858ea9
+Output.12 = 18e3fa3d861ab810e4fcd05206b3ec4987c16000f6a84a28e2e89387b4010c840f796484d4730c5b3a46e37c99e5e1ea02a6d153d50e9719e0419e58e9f6254ba3b9ca80bb1b27f70a05c944cbbf9e89
+Entropy.13 = 6149060c71c6d6fac0d3088369a9628e
+Nonce.13 = 6a97f8199b36b3ca
+PersonalisationString.13 = 231c6f78388fb63cfe9422ded41caa7a
+Output.13 = 9d7cea9927e5e9552de9da9a8c291b9400e38fb32c30dc334f572bace072815bcc4806fc077b7ae6e4c82ed9a80b281fe186818c38bc1d0f16ce05ee644450d20de5ecdba575e436acb8526230cd8bce
+Entropy.14 = f368b81501338a3cca948353fe16970d
+Nonce.14 = fa9adae924417150
+PersonalisationString.14 = dbad22c389c527715d21a5bdf38c1fad
+Output.14 = a18d57e672218956e6c8cb9901d02888f3587177c3e11e1a99ea72370347b953a9f122c9446dfa109723b27f36fbf15edf103a56741c24968592479cfe30bc0053fa7b9818e9debcc494db64d15d038b
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 6466e1799a68012379631b3aae41f59b
+Nonce.0 = 6b0c61269f67c576
+PersonalisationString.0 = cc936b87c8c8c1ab85dde0ad2e9242b4
+AdditionalInputA.0 = d1033ac553ef08f22fd38f12b49b45bc
+AdditionalInputB.0 = f004ba01f51455430d84362e376eb775
+Output.0 = 5d675d1e92490952703c194194e1b061b6ec4e219dc2e1edaa891ef2d1b7ed050a06342d3c095011eb339f198519779b01ab1a580bd2e34d6cf4e47c1befe0c7dc37b4aafb31128fa396267f3732095a
+Entropy.1 = 7ed284c8596b6f0107de3b4b95cd9114
+Nonce.1 = 69116c8a073bf4f4
+PersonalisationString.1 = af668eb65b0f4df2ed49b37c842b272e
+AdditionalInputA.1 = f0ddc45922363f40271e7a01ed67ba84
+AdditionalInputB.1 = c2da95cbfefd2ac7395cf989711c1350
+Output.1 = 306f553077034ec2a86a64cdf34387c59769aae149d8cdb0041a5c2e6df9dd1e00ef0898179d6c6bf02b2c42b4a898f48cdd9ba4ad2b99fb133c5ace4249a67bc30e6452495c186244dc5ac6928b1ff3
+Entropy.2 = 48fefe997cef3ba2b73e76aaf003590a
+Nonce.2 = 19db21e0d05d99b9
+PersonalisationString.2 = d81759f6a2892c5b2d51b85f94d89872
+AdditionalInputA.2 = 700842841573e6aefc1fcf20aa877416
+AdditionalInputB.2 = a91efe1415ecfee71df068a16baf034d
+Output.2 = e6bed78be09215d9d1beb0b8b0889e677962a61bf901df09ad8e36ceec052588b57cdd445ce5a2c57fd40b7432860fa3c1c97847d790abd5d704eefc12ff1636a6c999c4dae9400a7c968e84bc7ec3e6
+Entropy.3 = 31c4900e6e37250a80db3b59cbaa10ee
+Nonce.3 = 8e194c494a419d9e
+PersonalisationString.3 = 121674898e64775d344f022ea692d9e7
+AdditionalInputA.3 = 06620c1998de3331b92f2409e8635861
+AdditionalInputB.3 = e0bc045344e45927364b27d9fca2c53f
+Output.3 = 1b6e68ec91ba9708562aaf2ce6e3b499f42a1b72b14e5c20a88e373b85cbffc924da24b4c08836b7a84927064eb0cc824f2dfa0f5aa8d480cbbf7ca7508d96370d92a59f8137ea39167a37da7f75c89b
+Entropy.4 = e8b41a5af5c4515282f3078688be48a2
+Nonce.4 = 4c3b5a559ceca51d
+PersonalisationString.4 = cf1ad8f0839817061ba534e004f61311
+AdditionalInputA.4 = 3c783aa5e096f5305d84aaef0de0865e
+AdditionalInputB.4 = 62271e8341725fadfc41ef136492c6b3
+Output.4 = 48a11729d198f908269065bc852d062b9332047535c04d8c0ad0b6b99e9a90e686dfca344df68c7bb72ecbc739634519077fa6f1f00e8df4e3712cfa79ef4d2d7e950085994bd553502f673f8ffec17a
+Entropy.5 = e900d8f9803f7fdeb4fe5222d99ce8b5
+Nonce.5 = a5412a73d59ffd2f
+PersonalisationString.5 = 10523f20a690465f7339f66f8d91f9af
+AdditionalInputA.5 = 754fb2b62ce1791c0a1731eca8d006dc
+AdditionalInputB.5 = 66a8fa0727f4f880afd4006574a51bd8
+Output.5 = a72c09f23de8cdab9d6067b8ee0dbcbba97306ad711860f7958d4c5889e61549e30fea415abcb6211d0ebddd27da0ca1104a4c585486ea495edea87257d2b75462504538f21d1803f2679128f8fdab7a
+Entropy.6 = 395b1da917188371adbb0d5027dfc2d8
+Nonce.6 = 7739dd160f53bf02
+PersonalisationString.6 = 3e864c1287dc15ee2c585faed12226c5
+AdditionalInputA.6 = b406d8b89f3d602560257fa4760316e1
+AdditionalInputB.6 = 94b72e355fd12a0834cd2448f4343d16
+Output.6 = e0a3a7c36b9461a03f75356e588b6434c1ea08d9168358c8287e7a3d99fc15530e1561d312c741df9e8fac58299ebde18fc90ad8a952c8984ef31dcdc9a6023d5edb4bc393b379feb9a918898d8c468e
+Entropy.7 = 0acd1da3cfebd6c66d4f2ac36aec6dee
+Nonce.7 = fba4c200ff691bcc
+PersonalisationString.7 = 6afca0034dbcf632c815e33e69f73340
+AdditionalInputA.7 = 0f3deadddf2c53bfeedb47fed10cf4e3
+AdditionalInputB.7 = 326ed610fe038f5f168cf7ee4a1ef38e
+Output.7 = a65ef722c91721baf5e609ea129a3211d05c53677a576ac5552e0d032ca17228a1a6cedc41a06e5add7d9c44c41110afdf5fa27f9cd4b4fd1b65c7a346c39fc3c22d1e042e396ae19628b2ee4f3cb5d9
+Entropy.8 = e9492967a06e84c80bd049fe9f2d08a7
+Nonce.8 = 287d30dc972ffc8c
+PersonalisationString.8 = fa60a894d9955fd14d368aefcbe50e67
+AdditionalInputA.8 = bae9d792a1d667fadbeefe98d645780e
+AdditionalInputB.8 = 418202160d92cb59d1e7378838643c1e
+Output.8 = a6dbefeaf6f859d7ac4137af798caa8fbb4fa2fbe496986cdc8c86babc72b1655e98e52c40f66681c4d4cb1319b3cfa97da73333109ce414ce41c93b1e62767fd26a757eb82dce2d4454f8e9dffb791f
+Entropy.9 = 3a655b77527c1524aa13c71a3d9e1916
+Nonce.9 = 6612c746e4bcc0ef
+PersonalisationString.9 = 8a1c402e8abc71ff11d7e4738f14b00f
+AdditionalInputA.9 = 39af3ce99eb8e9ea5964310c27c50673
+AdditionalInputB.9 = b3353bf522fdf8ca87e840665db73a1e
+Output.9 = 2be29338c915bd42397d73907d70f5d95ba9bff499d11f7a27399db66470e26598cdacb5ab06d1d13757043c8dbf56a05d30392cc3b21f4210cc141652ea42b02e4b957c846efd214a4be0f015b514d0
+Entropy.10 = 12420eb02fd4383263814968dcf60791
+Nonce.10 = 377a3fcaa2670b8b
+PersonalisationString.10 = 4efc5926bd999ad46c30e9bc7296b2ba
+AdditionalInputA.10 = 5c68c0f079110476c14877c5fded2b7f
+AdditionalInputB.10 = 3f1747b2a64bb371eb566a0204c82e7b
+Output.10 = 1d73392928438da9e9f7a28fff3332746f7ff90558c987383305c8db8175c9012debdaf73659fdb4c40417b5d8daa4fef8b42696359f05584542d14721d68f8ca7807b751d649ef24eb42946c1c5003c
+Entropy.11 = 847b94cbbff8bce709530aa019d10281
+Nonce.11 = f1266d652c327aa5
+PersonalisationString.11 = af28af297ab298a838616f1fdde1ceed
+AdditionalInputA.11 = 09334ce23df4cf7629794ac016d4ab61
+AdditionalInputB.11 = 592f2a1f075ae69f310827d15eb2d6c9
+Output.11 = 0035684b66bd9e73cb23fb04fd47c4e1f35467031acf05dcd9771a8193180d7c69bf87521a1df19bf847c659a6c4cdbc0c21e2b9cb26034cccb902563d16c63f39314d8cb5950487bc378f775b8cfd8f
+Entropy.12 = 3daf9f110bfe02bb4b1cadb61f79da85
+Nonce.12 = 1a0e5f88d50fd86e
+PersonalisationString.12 = 16b320d8bf28c72642aa32d4d9798c4b
+AdditionalInputA.12 = 153ab430f0750659fdffa6f98c6ea9f6
+AdditionalInputB.12 = 7eb0d6259b237b7c38728fe7649e643f
+Output.12 = 92d066eb16cb8753630888e44018592880c6253576531d90d042d1be9671c1b78cb84261b5ce0b12f3fc1e12a88f9799cba1a8a05b1cb0c58925a7913ab274f875cc71c47403fb242f85ae858ec58505
+Entropy.13 = dd71993ab8d7f4de58f4a94aecb0962a
+Nonce.13 = b617be934450431b
+PersonalisationString.13 = 84c695d83bc7d5ef902a583bd799f2b8
+AdditionalInputA.13 = 13ee6cced402ef8c8543ec3ac16a38c6
+AdditionalInputB.13 = 9d0a0fc678849860320568f9b19053f9
+Output.13 = fbda060bd0d00b0c31c8cd13507c36579e6af5e156c96bd860646b83e81c2437f636deba7b2ef6e5958fb3dae265934476a654990d08926deedecf1e43a41ffb61bcad560dcbce858c6ac3f748955660
+Entropy.14 = d77ff86d653f38975322d0b7f1c02b6b
+Nonce.14 = 4b2d2a31b1367c86
+PersonalisationString.14 = 842108e074fdea387cfe71526eaac9b4
+AdditionalInputA.14 = e488e16f48c61dd2152afe925eceee92
+AdditionalInputB.14 = 12c692abd90ab485f4d9499680a6893f
+Output.14 = 8ba04617a135d8abe0c3c0a170e7472e7ed750eac706e5c3ed8305d6f6f8a1a53e0c52d4853b21ab8951e80970b426008ae11952ff364817b6856ef0810860dc65faea487b5d7c3f3d63fd443756d2a8
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 66b3c78fa8c86dd891aab0e53f3606de
+Nonce.0 = 84142c2d1f1cda88
+Output.0 = e60d83ed6bbe75351f2fbd356a4bc8904b970d45982edeb898d0f2e6f4707faf497471c3df7460783e4beff0015d23d8c7ba270b6f562c4a7b76c0690b2609ade3fe372b53f1c5ff4d5f0dd9a3966825
+Entropy.1 = 22bf7d4b28e0b0cd263c114e594ce5a1
+Nonce.1 = 209eab8979e7b59a
+Output.1 = 4ca3bb37cf63c589edfd062abd77116542b5b753c3cdca97497eb6e13beaedde8c43beedbcf9a72cc8715070cbddf0f6ddc6146971b22ccdb1e3c9ee730da1b2126bff2c3cb0efabc871fea49470a7cb
+Entropy.2 = 20807f2c0e865514f6fcdbbbaac59895
+Nonce.2 = e60baa003c2c18d5
+Output.2 = ff897d957d8be86391546129ce6c98ddc43806784c24a0d3cb3080e9eac3c20605ff6d1caa24bd038d8b683f07b24f3846aca8236581b4c4d04eb8b87020c07b55888347a26382d62f9d10d4121a21c9
+Entropy.3 = be8d9fec6b80914c70a9c28ea6bfe7c4
+Nonce.3 = d6f7da93c2693341
+Output.3 = 7aab1f408b871a494b9df42208d83bfef1ba6476a51cc2f3b70896816b1c1e410d506aacd3e1f8916dc8be0bce42f986f67bd2f9f02395fba1ffe499e5eef70b3bf743f519fd8ca1db694f8970f82421
+Entropy.4 = 2958128df4649e1ae1f0dd5dd3740ce9
+Nonce.4 = 181ce194bb3aa4ec
+Output.4 = b7cda6ec47ed3ff8dafb78ed04fc5c0ec2d6ccb1869422665dc4bdf9842596eee00fd5934dc17cbb17c57fb970ce9a9bdfdca75aaaa4263a875a2ed012b6d56049f13b51e2a44acb37f922f8d13a4d19
+Entropy.5 = 91eaffb7b63f5dba7824d562f863b053
+Nonce.5 = fe530ca5b6e3243f
+Output.5 = ea3708f56e3a515b5eef9e361c4e0a8c385f38c17e8216f42a2db58e4ce5b48c7521b2ffdfe2e0be55d430150b6a2121de11ca7197167ec0d3bd6383be4b3b47d9c57fc224088d050114757115eee002
+Entropy.6 = 22c89c671b478015cae3da530356852d
+Nonce.6 = 9632ebd13ac406d6
+Output.6 = 861aec2488df56ea7f0bc4bd142c9162ce6a64b73912d94981b715aa14dd1fd649ad1d86fc4a5365c2307d9f6771ddfdb72d6d89d98a10341e440562c761c9ab1190529bf721db2ac0d00cfb618e34a5
+Entropy.7 = eda4dd917fd7765a8b102e831c39384b
+Nonce.7 = 255d248cdba3cf78
+Output.7 = 83263fec6c1c70cbc088e13dde4de31f142d7d2042457d79f0c033f0d790621f75823c55e41e9a4461ad7ccddf52377340d51f727b0f9b812d151036cfa686bc28afeaae995e130a1ee0dd11104e5ab1
+Entropy.8 = 4ef4978078ec29820636bb177ffb4b2f
+Nonce.8 = e4c9c345cedfc123
+Output.8 = 22c7eca633dab483688139397a2cd8c426506f60dde1bfe5e4e799999087f7f2046f7d8e0406179d4859ff619d70ce6db7573ec4a2085c4824d7e82d4fefa6fa43cfe23b245dab95c624866a72c167a0
+Entropy.9 = a2680750d8731cd093d6284f570466ad
+Nonce.9 = 7658f300666b66d2
+Output.9 = da6cdf3548ef1ae5955814e36c73b7aeaf5b4d533b037afce49bf72bf0416c911825ae05fd97cc5fed2301cbfb20545a20d56096aa474a39b3dabfc888a8a65ef3230e69f2ce5b0d7d30738f708d5f58
+Entropy.10 = 238f4a64db2cd8d140f9fbfdea102338
+Nonce.10 = b19af3bc12552fbb
+Output.10 = 27ce1efb77df4a848f0eb72451c0771f08b80f45e290091f8c3852fda0b71b281d01a070b380daf7efa94697806d3d138e945113002a628483dd7e341c7a9a6f836d99577b39fb0f9a732f14459595fc
+Entropy.11 = 1a3a0333340f1d67dda715285bbfb617
+Nonce.11 = 374b8f8be9f2820e
+Output.11 = f28cd91365d02d204fa71fe86ee40fb05f477864be556f2e8e0f212dcb1ed98ef59adde485cb28afee97ac44a789626550d533e6cb8a13e0cd039a7d56f270b892df742c499f5c609ef74454f1a8cbf5
+Entropy.12 = d622c47e9838e0fcd8bfb209f42a3c29
+Nonce.12 = b29bba7cfeba90cc
+Output.12 = 9340bb4692e52792693e8edc0c2883f54f8b93942ae36f06d5532964f1f9b581c02a86b9520566f5f796e3cb2194853ed9ec18b693bc7ac9a83c0f8db896d93fa20953d459afe443b63d1241d0b47cc1
+Entropy.13 = b54fa4fbefc63f96a45070dba669c3fa
+Nonce.13 = dc9bb5e014df5f2b
+Output.13 = 07452aa85d2416bb091b9cc8f49add2dc897465998782a01e628e9fed6f0f185fd5d412dc40625dec710ebf26729d0346c344ef2b1d3d42a9ad60f05386413e40978d206cf3fc8ecf40950a280e4477c
+Entropy.14 = ceb354444d1a29c0c3e8a1cc24d02846
+Nonce.14 = 86d3fd9fc51f8b19
+Output.14 = 6f90ad611987a37bac54bea0782ac78215b7d17ecdd3991a81a36d0e263c6f0dda2c102cfba56b26c7b74b5dd2548be9bc81c7958e9d19821583c6f388132b9e19ae7609add9a296c1e92d66a2ef5464
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ea97cecbcaa4ed7da13becfeda6205b4
+Nonce.0 = 59315cd461663fe0
+AdditionalInputA.0 = 2b4bc495eb171e88bd9f63427080fa75
+AdditionalInputB.0 = dac97bb5116f63bdb72f29f46d38e57c
+Output.0 = d7536dab2b3b6c7186443de2a7c69e6965a09ca8c70f5da069eaa9d1b9ffb2714bda751e479d837f7de4c8c97bc8c14925795ff1983af71f042df3c873e8c40081b9a42053d42153dd1680bb2e8a4556
+Entropy.1 = be8bb186bd76c6e3c2aa016785ef0c94
+Nonce.1 = 0cdf980a9249180d
+AdditionalInputA.1 = 5762c6478f213df44118a872a761623a
+AdditionalInputB.1 = 984475db5403d4acf71bad13567228c6
+Output.1 = 1519c0132bec9881f803fee16fccf04db11da71057a883fe268d3c120e41b6ef8630a191adc2c9a4183303966f6f815a1cbcfdc22edc1f95bc82076ab5261e8ea749660dd3a8f1077201284a752970a5
+Entropy.2 = 8c3f3c3ad85d8dbf0b755714477b456c
+Nonce.2 = 69628bcc65bb1328
+AdditionalInputA.2 = 5d85f4408624692f0d0258dadeb70e16
+AdditionalInputB.2 = 4f943e043dd224db1a144ff74fe913ad
+Output.2 = 1e39687f18b08f56bce6c2022e5a7de1b04ced771630efeb32b6c4a125ba83eced08084c9ad179c626ce930704a060b25d15be032e15ee67695280dac2e2b3864ad308bb54f9b60b0f1bd9212e0321e1
+Entropy.3 = 5f5a57c0e78390ba0e9aa6073102a563
+Nonce.3 = 4678275a8b8dfcbd
+AdditionalInputA.3 = 1e457cd70484f764fd44921edd931a93
+AdditionalInputB.3 = c3dc45c220b7bc21b318053f3629f56d
+Output.3 = 1f582cec88d71acdc1544a89918628e9abb9f58b8ff8b96259df55bb1fa2b5a7529c0e790eaceaa8f4a81f8622698ebfb2db9da255a3f2b45156a4219f6dea2498d8dfff599a2d0c0bc8f0fb220dc6d5
+Entropy.4 = 90ada55bf6def39bf8f61699e7c45834
+Nonce.4 = f034db6d3251b3ea
+AdditionalInputA.4 = e5f15880935ae775fac2c15de20a32a9
+AdditionalInputB.4 = bff526e108b7818d5a30e9b0626a8794
+Output.4 = 78793871b3d29667cedd4396389070c8aedf115a0cbf3a4ad2eba1c3bca058f8c3dec4e23c6353ff501614ea376783e9ecd8396910f04fb7005fb9f279eabd1b2620626499cd7702f41e781fd3413d7a
+Entropy.5 = 467d32153d4503255bfabbbbe445b388
+Nonce.5 = 182b13922fa86d97
+AdditionalInputA.5 = 84e961472125df37396be2d8f4187a9d
+AdditionalInputB.5 = 1232644aaab0b9a661fa2aef5976dee7
+Output.5 = 204ab49a983dbdda27bcd1a0b83dcd2333877d6db67d6c310d492c1827274e34226efa028870c5c125656dddaa77babc47db6bdafa3c2fade12d8ec5f3c8b81f81b1e9eef38f33cd840234d39767a97e
+Entropy.6 = 1d22fa6cda79053b68bb6ba98b985a52
+Nonce.6 = 2f7d01a0fb26145a
+AdditionalInputA.6 = 6b786ce43da77a58a531fbac7493ec2e
+AdditionalInputB.6 = 917b220b809793a4193827e4fbf0db70
+Output.6 = bfdc3c800681acb5337bd3ad904e26fae6174c3e576579c495ccce73ecabd54a5e14e6a8980f6e8fb2cee621343092d04559451ee5e16deecbaf57d1bc4cb5087b3291941ef7e6c6f511a869ee2d57ee
+Entropy.7 = 54b5fdd7dd2e7e1c4f09a6118e4e60eb
+Nonce.7 = 8162379c2b3dd97f
+AdditionalInputA.7 = b2ed5078e176447a17986e98f9827a43
+AdditionalInputB.7 = 5e6a483cc9f23e5c9d96952ba7cf105e
+Output.7 = 867ec6f925c5227c7483678b4b0985f902f1fd87f22edae2a5adaf85cc771b16408ed646778d8724370bdb0137a872b76994e874de7fc2e724de16f5a07dc949d1c3bc9e73a4a0c29905c2b1cd99df48
+Entropy.8 = bb20617cc0f7ed8ef129a7a0e4784c58
+Nonce.8 = cb3b83d613cc85dc
+AdditionalInputA.8 = b1419e3dbf91e155cd3207ead528b23d
+AdditionalInputB.8 = 9d5488ca664c2b1979489a4cf7420e8d
+Output.8 = 97ee02e386b01b929bde522e5f198c85ed031025f4fd3f805c8aceab9d43286f7ec71422828b427006d035df494b86fb9e710901651897187e1cdea5a649418c8724f0e641269a03127252b29d79494e
+Entropy.9 = e9ae7fab36e16442fc6f88b7d890d73d
+Nonce.9 = 37f721f2b227f172
+AdditionalInputA.9 = 63f92ec70f47458ca0388acb1dc551d2
+AdditionalInputB.9 = 853311c75063ada99d25baa6484fc953
+Output.9 = 2ca79459fa301219881213cd3e0c14cb004d12e1b0c776fd4f0632f91673cb67a66522fb724be121f8b46cfbd122cfd2b16d36f27d1735e5f1732acae85bf20fb4b55c53bdc9309062a6649fb50fbcb2
+Entropy.10 = ef8b69c2113d3e8387500b8e91e6d077
+Nonce.10 = a4b25bcbe92a9e5a
+AdditionalInputA.10 = 3a426211e76c0246cf2582a07e5ca681
+AdditionalInputB.10 = d8721b09b240486761ee0c670e5af473
+Output.10 = 055e5f058b054377830ba4c731617f9acf164fc5e25174234e052095410b91243666ef57335329908943c6d88cfc00ee3f0dc00023ec32cfc490e82cfbf435e388949815dfc005fc0393d1d5eff7fdcf
+Entropy.11 = 1c98412f62d9220ebd841b379128b189
+Nonce.11 = e1be2432431e83eb
+AdditionalInputA.11 = 6b43fe770e72497c13685aa558727f2d
+AdditionalInputB.11 = 9682fa8b498d853f3b436498aa68358b
+Output.11 = ca1079d686754c553882ab963dbd43a953bc76bc779b945cf380ac6d38d21244a1bc146320214041bbb5560439fab99721ccdca64f79b557f6cd1e051c6b41d3a3bb867caedb4575749c5cd451b695e3
+Entropy.12 = d7f75f8896cecbd64927320dbbe7a71c
+Nonce.12 = bb0e49ae3b40e28b
+AdditionalInputA.12 = cdd35d76e4dceceae918a3f58dc11ae2
+AdditionalInputB.12 = efddd6121e3f27665e0e585b035f771f
+Output.12 = 236bf72559c48ba0ea7d0d8a6c76e06dbf966af7cc29b168fd798aecbb00ddda6e82cf03d430e083cb4fe42a9eb547e2c82ad0dd62882c1731de37e8874419e896a4a53e448e98a0b30887a7fc8e50b5
+Entropy.13 = 4084b05fd62da1890245ed6bcce6cd72
+Nonce.13 = cfc362ec0dbf23e0
+AdditionalInputA.13 = a5292a172339a4291fb30b9a3325aa97
+AdditionalInputB.13 = eae3dd073edcf84caac2f6161973ddaa
+Output.13 = b030974cd3f0a21251821be65a0a2c9d8baacaaa06804b6e74bfe00ba0691a055211acbdeb2fa7da9641ab4f8bbf74ab3032a98f2417697fbdf80d74887752072659f817f168175341ddef5b6efd9fb6
+Entropy.14 = 46ebaf3fb0583fc5b8013e14584ce717
+Nonce.14 = d5d68f69567cb290
+AdditionalInputA.14 = 32d09b604a65dc8daa35cdc34141b751
+AdditionalInputB.14 = b8186a294c7824b7c550c1054badec00
+Output.14 = ae9a091cfafbf0e74c2be8ad4b984e824a24e65ba7610b0f3ab1750e2f12de1620db6bb8c493b3d8b06ab78e69cf2dffd73d4322a67ee7725aad84fb458b8f26cf04846850202e53c874213221e761e5
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = f0fd2199c6252628639976628cb71c39
+Nonce.0 = e2daebbc0ce7a183
+PersonalisationString.0 = 5fa5eee4f36f5d42f593c57de87543ab
+Output.0 = 3e1a75df8612b40eceade7a8c73f0c11ca4046a3a13e159af3fb9b969f38994fd1bf6896a268125555934aeea0145a8a83a780f2d71c12689caa9faec6d0d198758d4a0664250bd4d89fe9614adca3e3
+Entropy.1 = 75b8f66db02e8a39d48ff6bdb864392a
+Nonce.1 = 19883bc681293991
+PersonalisationString.1 = 1c5f890dcf7c4c81fbe59f12dfa487bf
+Output.1 = 9a4d78b6ee54bc200488fbc522d967c6e397b12f29dedd2a44b4c2d2a5e0c5de7d19a5cd778fb0a0cbe1d9893865a378380d12b0582c35befebaa135da44dc08403165a001bb3180cfa5644992112f26
+Entropy.2 = 8ddc1d1aa73c797502f971bbd59efec6
+Nonce.2 = e5b54a7af76fb120
+PersonalisationString.2 = 37ec2725347b4908abe8f69e22836d4b
+Output.2 = bd96549ed8c094bb043870424d38a71479e44a3f47e92ec010a1018ad5eeafe832fda541553948c975540ad8e73acb364868149504df3574a04b1c34fe7bd7009211c27f30cd34c1fdd410b83201947a
+Entropy.3 = 3c03464129b13d93e4bc07f5731a59b6
+Nonce.3 = 5ffea12fd5f62dcc
+PersonalisationString.3 = 588204a022727afa3f94ceb7bb8edfbb
+Output.3 = 17a2fb65d66d8a7f31924638a9445136ca6e5bdc3599a5501ffe976289297be9ee0028215901b4dfe66430fca4b0e4c8f0e0c74d9869b58c7b67b5fac560349f2c60318c79a7f3c143c5f61caa3714e5
+Entropy.4 = 05b17d9962ee6ba8cfd6f5e849b8457b
+Nonce.4 = f6d7a5aea88a24be
+PersonalisationString.4 = 13d9c60de4b04fc63d07485d0eb2337b
+Output.4 = 80a296e2082324e1d7a850abb5eec23694ae695345d57f07f3bc46c42e5d8012b37dadadaca5f1fcb0088c590050589e5b10f8bfd96722ec0c567b90bea565edbedd415bab2fa630d94738c444db14dc
+Entropy.5 = e536cf0138566d88525565c6b6cd2f86
+Nonce.5 = d048a518569027f9
+PersonalisationString.5 = 68e2286ed468333ee27c573453569994
+Output.5 = 615384d1982f75f8e8c008fd656b3be095dc6a1b15725cdc2206abb5b0e7d72514ee4f477d120a4b1fa81c40ec88bc7cb4048df83c94c7b2b6f7fd916ffc176781517d4decb9b8abe53c2289db4b41ef
+Entropy.6 = 0f48eecd9913b7104ff8b8800a2b1316
+Nonce.6 = 6de036fe5a201b5f
+PersonalisationString.6 = d00c237030adba874e1e6bcbcf2a47bf
+Output.6 = 36b76562ae5dc30545e6ce14ddbce12330f1cfea88227b8ec11654e62b4e81063a5574758163f4478a2838af2583ece2e69bfbf1450f12ac6e37a6948e7ec36716db22c40565b1a16a4b06e26659c34f
+Entropy.7 = 662930e8bae14d3be87d9654635a2022
+Nonce.7 = 3836f4d7a508595d
+PersonalisationString.7 = 7460d16da01dfe504870de63bd4cf60c
+Output.7 = c99b9cea7f7610d54632d39b457525dff4f01c57989f50949d1857998f4aae14aac57a1cc7ad5138e970ca678a7d4cbd42c9d961f15b45665dda08ab2cb1eaff6890c7b62684e294f6b37f89f1119835
+Entropy.8 = 3ef096ac9e72a961f56890f4b523f95f
+Nonce.8 = 1c100401a49402cb
+PersonalisationString.8 = e22d6f4b7fa50463db12138044ccfd37
+Output.8 = 4138091774bbf394d90b33c1b66017d842c7c5e7221f57f55ef0d60da4398c50c7d2ec9813177673b9f336a0b85a25f88e2156ea5fb2250b95ebc879a5ac58584af8094c31d771835e2624d11db50118
+Entropy.9 = a30092b4f481c74efa85a2836a92dc2b
+Nonce.9 = cd22e3e3e7021c08
+PersonalisationString.9 = 8602bf589cf670e6ba787b32153b2d3a
+Output.9 = 678f1bcedbc85c2002e04cf78ba8a89e7b1d56fee420d215a0fbf33e301de3f075acdeb3363b3c6c5d73ed1d5a284375fc3b8b4c73a27405d75703ea6bd9b295148ba9b703639cffee9b378082318940
+Entropy.10 = 2516c22aa5aecfb06594db8039fbab26
+Nonce.10 = 2b52ac3399c0d7b4
+PersonalisationString.10 = ed8cdbd10a1fc7c4280f399a93b8e47a
+Output.10 = b926bdf438c6e306a9ac0084294c1a97ef1368e106244edd4066248a20d4f8d601e43583b682afed5189f51b6f06ae004414cc668c082f8845a7075e5d3923158fdd8377d17351b9d924c8b8f38bea4d
+Entropy.11 = 35edf013d80eec2d3b785726629ee074
+Nonce.11 = 149c1260bd2b1d9c
+PersonalisationString.11 = 9212a95a4cf0855e3ee8c5257914ea36
+Output.11 = 910bfa602583b1fa5c05918d3453ac7efc163040cd345fdd2b5b342d0dd6f42eb2f847932712cf1219ae29766532ab16e6d8112cd6feac569f3e9942c0450b9fcca22cb9504b289094c96d5d1a7f7c3b
+Entropy.12 = 88ebea4ad88d9e35187cc70503d773f5
+Nonce.12 = 53ad0f40facc3f98
+PersonalisationString.12 = 8095d8ab6b617fa1d115d1bfe517f4ef
+Output.12 = 256c837781fa60cd1f775db1d4d7b765adbb3bb5dacc1716d39efd718f8e999566f09cebc1d8d038c63a3192d6ababf5b3eb38f8795662be594e63589d7adce57884ab62dc4099c49c1d25e88a99283f
+Entropy.13 = 7e9d7f2d749fd44674714d0f6b098b47
+Nonce.13 = 2970b716b2116895
+PersonalisationString.13 = 57acd2520d9ebfb762b759b998fe5f36
+Output.13 = ea846303d9e1ac8469fed0163deb49c6d6f69da2443dd31b66c72855ac30e7c02e06558d78e733d9f5a0f6e52763639cc2b8c4c0e05b8c69f6a3dd84063997663ed5f4e690ddbb8642380f8e8c9aa8a2
+Entropy.14 = d20b5ed70118ecfeb2dcfe8cfd7e6b6e
+Nonce.14 = 8368ee0e29d35c67
+PersonalisationString.14 = f189a80d5619f53cce878ed57522a468
+Output.14 = aeac5933065c33ce2ace2531a193e367f73c83fc328f61ee2627f6f3841914c6b8a3ff767f96b3c3b685bac931af9ec10c6f3efe25b5109bb647b120e3a3f6971a4ec41f4ef0c7a900fdb09d7ff3b247
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ef3eb1e63f9878d62984876712e76e56
+Nonce.0 = f959d31650364e70
+PersonalisationString.0 = fcfe42c0c65bbdc4a29eb0b598353e17
+AdditionalInputA.0 = d218da501fa09b43ed8e2fb8c3ecc564
+AdditionalInputB.0 = 2479f4330af9910d7408404690d8eb93
+Output.0 = 5de81d92cdddb3ec236037f4dc80d6c778ca72e128411a64689f26a243fb2b6fc54411ee9f417b1e113760139ae4b2f80d7475b666af16f87badc58e53046ee605ae9606ba9743c5e57a6959bebeb3a8
+Entropy.1 = 7480afff274e3188c6c68628fc315c0b
+Nonce.1 = fd5ebbedaadb6ae4
+PersonalisationString.1 = 1cab5735b249e550ff3609efe89dbc9e
+AdditionalInputA.1 = 834ea3f15f773e6d9c27fa787aa65886
+AdditionalInputB.1 = 85cb35d2e7ccef7d22e1638554228912
+Output.1 = f8b050224ee890defaf9aa7dc50b0e3adacc51f5d2b54fbd1cf99525681876d21e5c45271f8a8e9ef89870e52142a7f990afd486895912c3d456dbc13e89b28638e9a3130e808ddbae96de74b3dc1617
+Entropy.2 = 7266e7e0a7ad0252d27b82a0289858d4
+Nonce.2 = b02aa92033b4045b
+PersonalisationString.2 = d0d22478c069deda197e7351edfd6a0c
+AdditionalInputA.2 = 36991264cbc2171d2e3fc956c2d81f57
+AdditionalInputB.2 = e4e2e976bf833695e0bbaea1d92bed7b
+Output.2 = 06c9ff2a148a9b5f080fd0fd7742dee91e5f1b4bff6fc4ad274638aca07e9eebc22d484733c827b61f47c6d0c44b33ddbbec1f2ab3ad0042dd501aeee2c919af266351e2f070cee6e7288c306b8f84d3
+Entropy.3 = 7c6c0d591b81bd601602f1f3be60a053
+Nonce.3 = 84e2d7b9d80af9e2
+PersonalisationString.3 = e96d183121239ba35056264e73edbe79
+AdditionalInputA.3 = 673f409a0e133c6f37f2f3c3a30ef0dc
+AdditionalInputB.3 = c26810121161f3e08c854c299a3c5b45
+Output.3 = 7b1c784cce238da765184c6fc03f2bf582d2652c5b763d425b5be932bd3d7565aad01eb90213d00fd1d38c59dfb3d5cd92cf8a0b676de1c113d7c567ac92b852851210b6207e484fdf4a3a6244a2ffae
+Entropy.4 = 5f6ad5aefcc39b3319aa7edabd5c3b5b
+Nonce.4 = dcbee75db307b6f5
+PersonalisationString.4 = 6bc3fb023c6fd9ceb65eacceaa5c4e76
+AdditionalInputA.4 = 8e9ba1a1f6a7315b7b5c557ab00c68d7
+AdditionalInputB.4 = e54bfbf4415104e476cc9f37c50edea7
+Output.4 = 3371866666c2cabf028f888ab12b6aece43a7b2021d8098ecc423c3e72600bf49aedc71d24da4c7d992a7ce15896f7ae11b324fec93d76150b13892b00e911026ac8e3543bbbd0caf1996d9e07b049b4
+Entropy.5 = 7f267c4cb07d85bac0614dddd4d89d80
+Nonce.5 = d819ac8c6b43fd61
+PersonalisationString.5 = 617d258740d8ab7cb2c632b6372ef3ae
+AdditionalInputA.5 = 3a299fd07e8611e1c3bbffac001adb2c
+AdditionalInputB.5 = 94f5bfb53e3203b212bffd88695cfb58
+Output.5 = 468bedcbb2f9c6deb8141888a758bd7931ef128de4e678be9985298c2664d33999d68342a0747acf18dffcabc32a0c09ce7c6522673b6739efe66cc25b28c06e8677ab3c6f1e3840852d245e0553ca47
+Entropy.6 = 858923f05c1a1a9370c495fc8402589d
+Nonce.6 = a88f688f22e8bd53
+PersonalisationString.6 = 4cc68f42206afd82608ddf9f18507398
+AdditionalInputA.6 = 4670631a5d2fbd86f58487603b880065
+AdditionalInputB.6 = 34f7b4c92ba1aa900f7bc676c28f4283
+Output.6 = a391bb3c2f2cbde7dabd18a72b4e29b3b5c11d07c5c77a6b34e930f2804d3abd5af45f4102ad1e41da512572ed94d9d3317ac9c76bd56a0f10ff10ca7a8beb592dc3c8a017030b0b190a7abd506ea59b
+Entropy.7 = 317ddfb1a01bb0e147eaaed375999730
+Nonce.7 = d7c5a27ebd9209ee
+PersonalisationString.7 = 8d535a8d76042233e4b2bcf6ae3a7142
+AdditionalInputA.7 = b986568460caf36f3e83cd27d79fcb69
+AdditionalInputB.7 = 1a4be6766a5899a21bea3287fa21cd88
+Output.7 = 3e1c688bb6b680502061514b59ae90809dfc72182f54f0e8377ff50db2a86082f99e9f4c9eac9e3c5f06eec49d9e51434028be4e08f70634b1339db703bfc848ebc660a06ab8440409ed1ef4175584cc
+Entropy.8 = e3dd2e767f5205b6d0c4908d465cd2a0
+Nonce.8 = 4e356c171709cefe
+PersonalisationString.8 = eb84e2e5b2208882d372f266bd1b5ba1
+AdditionalInputA.8 = 831868d30c12ad5a81e39f74eda9f87e
+AdditionalInputB.8 = 0e34960f9469e23ed4fa285edd6b8371
+Output.8 = e47b96a306a4079a1a79e7e8e93d8a5e2f96fd995a02be29c4c36f980f2342aa949967a3a4f312a702081ef7bd959125287411f96ce647b91b56ee932e5554d455703faa6abe4109436335c4d2312b77
+Entropy.9 = cbff42d1361fa6cf283ea30f49f85abd
+Nonce.9 = 82418a778aeafccc
+PersonalisationString.9 = 93de9731c0c71807984681699a782798
+AdditionalInputA.9 = 7d11ebedcc74e249b27ab30987539792
+AdditionalInputB.9 = dd2c3632f573ebdbbdb5622c04b31ddc
+Output.9 = 12afcb023c29795c6b3deeb6558d59c7a0739d499c4135c37ff3dcd0022c7515b1f8777c1f2ebb49322f5dfdf9ea14151d20869b5ca145feec0dcff84293ed31557744cc74eac3b15cf450d19d1136f8
+Entropy.10 = 9c501a2207d416c084f8c6ba022a7a35
+Nonce.10 = cb44767de7042909
+PersonalisationString.10 = f3232ca9def83fbb545e2cbaf80bc806
+AdditionalInputA.10 = f4f676890634e131d03750e93b25fae8
+AdditionalInputB.10 = 48bbaad191bdc777937444bd2334dacf
+Output.10 = 200217f9151c702840d9fcd13dc30b993f1ddab2291791a92ee562e52abcd5358aff1ab24e63f7dd1af270fd1e3e58c4d400252253a80d7eb0501e4a4113c06d945bce640b775ad657bad105af60280d
+Entropy.11 = a8c68826ec8254bef24517adc8962f0b
+Nonce.11 = bd514bfa52bcf849
+PersonalisationString.11 = 00072c1d2e7670bd38f7e4093d894b51
+AdditionalInputA.11 = 351af55b61249dbae60adee7156cfe40
+AdditionalInputB.11 = 02d997aae48047eead333c640a10958d
+Output.11 = 9e3dcea0562a8c76a569abcfc805a178825d8de5d7ebccaf48747a68d5e5480706ef6acc5fe5e0e24ca9362ab23df84ca629876b23bf4bbbe9eefe58c93676b47c582c1a7181f5057495e83d30ef9844
+Entropy.12 = 0e579bc11f69b1d106e92c0a31833aac
+Nonce.12 = 8557f80c6f1ea349
+PersonalisationString.12 = c6f3848b26fdb4b4402b4f9516e71145
+AdditionalInputA.12 = 1a068f37e9c4a7a155b8b73eb31a726f
+AdditionalInputB.12 = 8c3597d23da6cd672b6ec873aac9502f
+Output.12 = dd605d5f8b193196ad843072768f8727594c2c4e741d220cb5d4e7d7001b93ced734f1a3ad263bdbf203fe5fbb07e62af456f9ef4bfd93d0c4f6a7523ac84b8088da6c5786c52c648902b972d0781c15
+Entropy.13 = 06ddcfcd7c11f7cad49e83290ccfe320
+Nonce.13 = bdd6f8b19ddaee6c
+PersonalisationString.13 = c473d3e0778927665f2e36187bd8e8a0
+AdditionalInputA.13 = d6463160605f3d40344ae8fe8d5b7c5e
+AdditionalInputB.13 = ebbab9e5e4d84227e8cabe8bcaac7711
+Output.13 = 0e57836e98299c4680bd28fb26ca848070ad83e9991f7d934c31e0ae17f32cd591d4f2eef14b2eaf95b27e3b1c75e9a0496a6deceae8fed5982d03a0baf861ee9324fc6e75093c7953461918a608450b
+Entropy.14 = 03d389e9a0fc110d173adb2ceb3358ba
+Nonce.14 = 8b325599297c0d47
+PersonalisationString.14 = ab25bef8d0097bbd42d55316af321bac
+AdditionalInputA.14 = af578fbbb8a830947e9b4e2c9e729336
+AdditionalInputB.14 = 5a69864ca39da1ba4719dfe1dc850a4a
+Output.14 = 8b846f03cb66f7e49fdddf7cc449a5f3f6ccdc17ae7e2265a5d0e39ea10fc3e6cffefc04147b773a1584e429fe99e885f278aff74a49d8c842e7ccd870f1330692fc9c4836dac5046c544be74652da26
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ac1f51d43fafea519453eaca3ebb2f95
+Nonce.0 = a6666fe26d8702c1
+Output.0 = 3ea69dff9d5633699d27fb4bab4ca972536daef15de584427384d66f00312c31a21ef02d88ec9ca79583b69fca776e2f67fc6a9a1ca2c519317d2523793dec48e11cdee28b1fc610024b03bc234619ba
+Entropy.1 = bd6768788f02e84a2fc3580a87b469fa
+Nonce.1 = e26b8c9c4bc6128a
+Output.1 = d4e900b0a6ed2c88ca0b28ee9212faf0657d28d7a53d393f0475c43ce5f0f2207a3f18cdea08d96a2a533647a69005b675758c9318a8340979c4e1d0bb46040e3f656a4862d4dbfd0780cae9baa4ab5a
+Entropy.2 = 514cb05af192b0b04435e21a13de0a2b
+Nonce.2 = 278c9a83acbddaff
+Output.2 = 31f864417ac27992788bcd5e07fff7886e969d06e747fa5c73a48a194a54f612327aecc3127b1e410a5d3f564aa56b978350e93e2b988b99a6d31cb0fd8b7406aaa2daaa5a9ed66fb746e3a58cc3614c
+Entropy.3 = 8a0899c465949b4999619c06086997e6
+Nonce.3 = e1ad18e17645df1c
+Output.3 = 39de5b2b5dff4aad99cdfabcac9d7b3c0d0f9fedb1c1f03704b3b5bbd8c8ea2cbd759b4e668d12708550bad5d5d315acec8c0ab952bf2ac869586aaa27863d68d9183960d508133e4adb9c8af3e41f53
+Entropy.4 = 5dd1da788775b4a30669b92a1c992eba
+Nonce.4 = b43aa41b02eb42cf
+Output.4 = 8a4562f76621610004f401fe72f5d1406dbe6adaebd926c2065f57466bd788306b20d13c16d1e7627cdb200c2581eb23b02d588dc4e5251d610562a084c18940f2f4d5ec306c6eee83ee257b93a749d8
+Entropy.5 = 7c4637dc79e29f7b857f65700d6fa891
+Nonce.5 = 8ab36789a68a4a94
+Output.5 = 4dfd7bdee8966c260331adc8a1763bd4d15ba713d5ce7e291d274387d59a98028b3675c5a58c237d8f40638bfe4892a16c6f76e92e8b4335f28a93ef41018e6022a9072eef6cf0aa833d80f056a8898a
+Entropy.6 = 46f15e711ddd172ed99469a9d1758011
+Nonce.6 = b22c685bd5463521
+Output.6 = b2b00d3ef6a9ec8a8ccd827f828fd56556ea3dbdc47a73a315f07253d66e14f8fa020e5bf025c7adc5f0b81b2cd992930e43e4b4e2d8dfb926fc387f9fa98c58f29f267de1a8235c5327ae85486fa3ba
+Entropy.7 = 89486609b21f4a77d44903309238cd10
+Nonce.7 = 2c65e57dc62b7182
+Output.7 = 044eb722caf85f4aa4586459925f7768a595674092f559f04d78ef6d94db382bb1ebbb7b9e10ba28896e84fa54b100715f6de5d9c313832338307cd480e7caa5b958d39f4899ef8f1e0926e9f9de9642
+Entropy.8 = f1322328dff8c7330d7408315f7476ad
+Nonce.8 = 3026a9607bc8d5a7
+Output.8 = b5fc472a4a35d59a0f298ea5fc1446d150820f8c78088511a45397f47fce79bdf5fd62af96e7d97a83ef505459aadd81c244bbe4704196bd1f3124f6d421f7a82bcf8be40e5460f0f74e6ca8ec39d7a3
+Entropy.9 = 0cadd9c27360ad9cf3de96b62056f6c4
+Nonce.9 = b2eb6a839574c019
+Output.9 = d28a38ebc8aebfc41d58116df36a3533c48c877bb8992c30ea17b46ba2945967c8178a500f271197c67e8766bb552df5970f07a76a4d8e57fd6467b4148439dc163cf700781c7bd81c1d1b2fc3848510
+Entropy.10 = 12c2b495cfa55a4482dcee035923e85e
+Nonce.10 = cb5b88622d933589
+Output.10 = 7075312c4dc21e54a2a83346ee8d3710a2eceb34c02dcdab3817f8a682cc0b1bf7b1c777cbd2af1e454ff471129a94059a253c82955b5ad9196372d1c93416500a65f962151a32c63bc6bc6b8443ac9f
+Entropy.11 = 2fea9691d8258763d5d0e86954cfd8da
+Nonce.11 = 3ef71a3017eef25a
+Output.11 = 5956ec9a16bc61b84bc0014eee2f5615cc259008bab23ad6a00ff7e36687e0f6ee90ea4b90b3c7a9e90c8f9d844c915b4caaea7c158b0e9164d98d2e9531f02f5dcb36a84bebcdbd7b7a91a7f8e13538
+Entropy.12 = 624ab76f3291da22fa54d49031fe02fc
+Nonce.12 = d401ec34a7e4ff2f
+Output.12 = 8b862d9ba4adafd17a458c585d8706f1132aeed8aa119ddaf4412a4a5716ad442c974f6fb367bae76fe0f33f84d3117887ac4592dfbc8599839b8e436fb22632fe43a8aa77ffd86d09b4b378a39c6137
+Entropy.13 = 1da2ef227cb78db77ffa872e407624c3
+Nonce.13 = 3c17de55283fe66a
+Output.13 = 682a991fe836c32b611340e698c48301c4c0b14a221f2f75e37e68b4db4cf9a26a465a8bbe55589a8a5d006093917ce859f93b0f016d43e2eeb4ed739a77e65fa5c08806ce7a89d305405a720e296d25
+Entropy.14 = b7ddb82f5664834b4fb17778d22e62f2
+Nonce.14 = 52461924becab175
+Output.14 = 8735d06e26814ee54b5daca4e1da3e321a5a19b062ec0c3afbe3b16f23332a687fadb29e65208130c3d667c075660ff70aea96430fee254c472686b8e82ca359a57bbdc3004bb3eb641c1f97e4b19e02
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 21b6808c0fc59ecd925ebe35ddfece08
+Nonce.0 = 09dd03ccac5485df
+AdditionalInputA.0 = 2272f1976f1465a07ffd72ae250e200d
+AdditionalInputB.0 = 0b2e0090a21ac372c94ce89a2cfbc5f0
+Output.0 = 165915d1ba81eb3f0b0213b058e528265d290c14d30b532a7f3cf1c3941a73ef5fe37c872d7241b1544548a23e9230cc7f2115d3bb44a30d1a34ea93bb5fed305f95ad7d4c3be5efede5a89edf97557e
+Entropy.1 = 3813f376f4fd1c6d73f3e160d4f998e9
+Nonce.1 = 95428569742d387a
+AdditionalInputA.1 = 64a733e774596ff48ded129b04d9285a
+AdditionalInputB.1 = 5b12c6915e0b86998b00ed290b901a30
+Output.1 = 6224b1ea5d097290a603b72fdb2a94dcd855fc702f9e7f0c1f4d57fa1b64e20f660beb6120f6d6ee24765b50674f1e612bb29159d09934ba18403328edf82f3530291e6172bc4b7e76e7da5db0e6cfcd
+Entropy.2 = e75004f41ae07db8ecefca47888ec114
+Nonce.2 = 1c1d86980d1dad6c
+AdditionalInputA.2 = fe3a341a5c8faff31559793f3dd9b43f
+AdditionalInputB.2 = 95ee782ac0ac3ea4d2c5148f3b37747f
+Output.2 = bf506dd70b76c9541a063b8cc4aa6f93b5549d71df899823c9b69c47d30a77c4cd6f4e50654c4955a8e5581e43be2cf46a5289560acf000bf54430a1949b5243e9a799db3cb086f08e6e1e34e54d3208
+Entropy.3 = 786471928ff558a293f4a36686611872
+Nonce.3 = dc41930c5163bc77
+AdditionalInputA.3 = fcfc99f05fe9a058c047dc03c0171c6f
+AdditionalInputB.3 = eba3d9774243a273eed091d5444a7ba2
+Output.3 = 5eb133f8f1ef9d764ce450d6d2bedab3dbc82f5a956be57ac408d6ba9251e642bda0bbcd920efee32bbe77c3abe845b4aa0cb2dd450e97108ca2a9a0e8fa9b3c4addc20bdb2ab5d76a5a4eee3e015793
+Entropy.4 = 51359dd92bf3b8c432d328aa4a6ce8da
+Nonce.4 = f844b34babf2bc9b
+AdditionalInputA.4 = 593b025d3278c32b2697076195888ebf
+AdditionalInputB.4 = ae23f51ebb06f517cd5ccd2b86cafd28
+Output.4 = 1d9fe28a9d695d14200d193636933c94ac118f2ec33c16a8a671f9c1ef474b5bcfb18e99d29ba6d55c1a07ea42958b5ff64685172cd7de24faf06510d5b9f7c84cf8955af6707b9321692336dfedf2ec
+Entropy.5 = 5672ab20f667e5918a8087681c187dac
+Nonce.5 = a9b42cfb74ccceaa
+AdditionalInputA.5 = 6f4d34dd4cc41d015d002630a57b5da5
+AdditionalInputB.5 = d571f6f4c1200b619483b69166a59cdc
+Output.5 = 6c4369290d517d4097260f88618c366a855351bf5e78abcbb23321f5f0f2da592b21024fc7e9b27d768e841e8d778d4367a0faca959a2c9b96bd2f256fbdd345ab9cdd5b035bdd7ac3c5d356bc1ed8e4
+Entropy.6 = b65bc4cfa115bcdd15730ef5f7b3d7b1
+Nonce.6 = 577f9be90f625ede
+AdditionalInputA.6 = 9e76dae1d2f68f6993e531e613f62263
+AdditionalInputB.6 = 16a5fc599f9d94e2d3717cf77551d47e
+Output.6 = 33e09a710ab41034d16bb1369e2bc157f333a3ba6dfc7300f6fe600c5245b043c5918dba6bd3bca6afcfff3325adabe550884f80b07239684bd2d8f9d558f58b520828067ee90f47b30954a2676c5cec
+Entropy.7 = 5639fff8a23ae7c51bce0744cc69e534
+Nonce.7 = c6d5632fd6899da2
+AdditionalInputA.7 = abce9c7fb00d7e4801651f89d5bd47ea
+AdditionalInputB.7 = 1da0833202c82da971e8198ee7aa0b90
+Output.7 = 7c0a2305e5233edeeda421906d8528426ccc455ccdc28f30df3b31ad8bec990bfc283fe5ffbaba93b880f9a01724684ce8e7242a26c3e9b1a9d23a14a481e5d3c75612c6be2763361a749e8ece57f7f5
+Entropy.8 = b039d4adad57680ad2a0f743a50633a0
+Nonce.8 = 0a472bdd9f6e2bea
+AdditionalInputA.8 = c539241ee05944ed0874eaf3aabf342a
+AdditionalInputB.8 = e97f92e56cde350d1901206903605f66
+Output.8 = 228361a8b6113eed3d84ed46a0573134c70d2d5a187a35b4599f2bf1820309e7211dea34d33a62dfa742a216752a9e57f33a604be3e88ea0f15f5d916d72664673d886104a7b6c3904af6d6563e05761
+Entropy.9 = 71e7d5b1845707ebbed471bc663b8517
+Nonce.9 = 42503fc9496864a8
+AdditionalInputA.9 = 59ea5dc55e22e034f1ed46d1739f1d33
+AdditionalInputB.9 = d97af01277043395dbef3a0eacd6163d
+Output.9 = d6c5cad4af95483428497f0ff0d8a30f673787f44ffcb9bf55c1ed39fa41e3f53849da76faa5377eaa832c835eea200226f5f3f0575d67514820024339e248b09111195c0bb7148facf310b593947256
+Entropy.10 = ef325265d5af25d255784e109b20b761
+Nonce.10 = 52f6faa7f37c7df2
+AdditionalInputA.10 = 7709e220f067ba161cd361639580c42e
+AdditionalInputB.10 = ed6acb902f1d0266c14f2993bdb77ff9
+Output.10 = 3b8bc3e1cab67f41841f74b0d20b87b95483be53da229fe34b47151d2ac2808ceb6e50da6cfffb14b55d0f3b846676612130a7011915b946df67189514b69c11514c06ce271dc370f136f6c5089f8c6d
+Entropy.11 = 80da5b7e5316c99ae6a21ecfe2e013b0
+Nonce.11 = 28dcd71591a764b5
+AdditionalInputA.11 = 39a165630c5dbf4ecc53f8dd825d982a
+AdditionalInputB.11 = 576afbba4f9408050938b8d204a8b1f6
+Output.11 = 9d0b9b54b9a2cb6186d43b1282fd214a00cb413904023b4820084f36a0f0e50888cb8b33f6731555595ea5b20521f18d1e94aa8eabafcf1686cdc850965911166f94115013e78d85804a634cf07a3d55
+Entropy.12 = d74921d6dfa69d7a73861016cf155cbb
+Nonce.12 = 3e49483902086004
+AdditionalInputA.12 = 4839cd9386e68298aa274b83f5ae9134
+AdditionalInputB.12 = c08d03f65eeabde5c9bf7230a5a3bf91
+Output.12 = 172b29d46e9acd26c0a38271adaf926e4ece4803f213abd6a1065b8fe31427f1f5bcac78f2f2156e7811e9c5c984f97aeffaa4519daed067ffa1975945897460548f78b67370d332af3af1f9a12ddc22
+Entropy.13 = d4a2f2ded01ae7a5c33b09f638f9ae5c
+Nonce.13 = eeab2ac971bc8f6b
+AdditionalInputA.13 = c3e727b3ce8cf2200dfc067d13c80218
+AdditionalInputB.13 = 6d4c889b91603890458277b9fcc57aa8
+Output.13 = 9defb23c7cbf32e2f895d8be3ccd9b0c6f2d6cdd3db0aad9a3a5f2f6189a441758bf1a622313a9ad7da7d295364ef857901e2229e7315b06c75598c9ce6db26a966c3dfa49df45514bdf46125c622866
+Entropy.14 = bf764151136597eef9c1a7ccff0f345f
+Nonce.14 = 29f9059f90816c57
+AdditionalInputA.14 = 7725ef70592c362d70b088ed639f9d9b
+AdditionalInputB.14 = 5ab2e0067c3b384e55a78492f0f6ed44
+Output.14 = ca095da39d9c21d7da073d9c95d2e415503b33c327d739f1838bbea4fc6f0254fdaf8ef6152e9263f46b864f39c7104d1d337d99fee588061152e623d7e00a27e03b5d16fe6e543453a31d4dafeda3b5
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 91d99c511c2f1967d31d20b313e5382d
+Nonce.0 = 1eaf7f1d0aa36a19
+PersonalisationString.0 = 31e6b04d73b1a970fd3dcd8f089e4402
+Output.0 = 1c95fb985cf17cb9cf0bcd53959972c8fd4bbc725b2ecc8ee843d55e494bc7684d1765931c173a838dc7b4344cdc14586409066d4f1d54ac214ecbe5bd139c65abe199525fa8ffbef59304e47baac9a9
+Entropy.1 = e677281e871c28d631b2361107240c22
+Nonce.1 = 87468967e455d2da
+PersonalisationString.1 = 114ba92f794518015c067f7c358c4041
+Output.1 = 59584ff00c44a0dbd15c1f35e050c184e8d587e8859cb061c8409c454b953924f5e6ee1fee4d763462dd6a29a6cbe4a373974c01d688ee5728cf712bcdc82cb0ad15419229b8cd114ac7851e37a3d7b2
+Entropy.2 = bd4831a85279fd767caff44ba26053ae
+Nonce.2 = 9e56a808711827f6
+PersonalisationString.2 = 69e0fe7b804c65bb8c7ba89a8b4c7c6a
+Output.2 = 7d1fe8c9de79611d57b51297cf1b2304591504a04694e60e21fdd70f3d782d17aea35173efa30ef2f235894d696f1a150bfe0396271fd8cba062823580a9e1de8e32d962bdcb4b4f47b942fc39849abf
+Entropy.3 = 46bdab811f76b752551a2b11b708963e
+Nonce.3 = 8be4fc159fdb7515
+PersonalisationString.3 = bc4f4d95927b1aa666791c4aa818700f
+Output.3 = c535859cef074916f7a3785537285be385893822a953fd41aba600f56d80e6efe2952f92ece5cbec15b2b03a229080de98c6ebda741f19d3557015a90ee0b2a0de9c0eb64c8b8af6dccf8f74e7ca1c1f
+Entropy.4 = 6701138a46b148a2688879989ab4da96
+Nonce.4 = 1bbd5c7f095534cc
+PersonalisationString.4 = ced04a25a8bdedbdbb28534376bb2414
+Output.4 = b4c2f0e989bd858ed16037f8344557b0cb35d044191d680cb1afcd2d8563686a92fdff5e1331fd3fc87d14f3ba10eb14ee6b16d648181392335c0ee4c2ab275881bba36c553d34810b8c689aad017343
+Entropy.5 = 9df820297bc0016d246a93cb64192073
+Nonce.5 = f2dcff78c90a15a7
+PersonalisationString.5 = 7059433f58646f5794ccf171ca188a95
+Output.5 = 06a5c61c664503469af0ff6714ae87e8a76996c35d80d45b0208bb26735b9e4630eacf50cf62ff3530214e8dedbe4240848638eb41783f8d1d3efa6399bc1d9554f5b5a386082498a33f8ea4fa5309f1
+Entropy.6 = 244cc3baa000afa7d547511770165f70
+Nonce.6 = c583942d888828ff
+PersonalisationString.6 = 53ab8f3e392696ffb6b06f45af125656
+Output.6 = 67d1735a4cd37be67e682ee5a3c99aba138b74887b90c8291e9e4e7156c786ef5626ecb2420e47d64b6a044fac951ddb302d184c5ae01f03c42ecf633a1e539fcdb4f926a472c48dd8ce30914cc229d4
+Entropy.7 = d8997d36ed9d8d50a190ed4ff8160acf
+Nonce.7 = d9b4add5ce5a28b9
+PersonalisationString.7 = fd9f0cfdb80ee581e83676cfc4fa09d7
+Output.7 = 6850db84a868eb1f0de75a3881a4ec79a1156f30b8618ca16e55175ab6f840932d21a340d9465fa12a587cff1f878627aad2e9c82784f650dfcabd12b36cdb1b10a2d1751d9756b5e289e8aa7d2302eb
+Entropy.8 = 0285da431ed1c618078e1b4ed9effca4
+Nonce.8 = f10a22cf4adb6c3f
+PersonalisationString.8 = 073b537b35c6a497e478516ed79783ee
+Output.8 = 12f8f357633b5c769665c333b975a81ed97f940f50094bdab1e278126356f9f9dab21a2fea61a0f491143978894238c04cf4956ae8ffabadb6abf0ac4efef76d5a581ed797948c6672008a8973e97567
+Entropy.9 = d6b735fda7419f43231d9051d73541f6
+Nonce.9 = 7e095b38be8ec549
+PersonalisationString.9 = 27872af730f3ab90a3a520e324c908a0
+Output.9 = f684248e039a9919773e178086deb5581052ee66ec06236a4972e4459ae16f7d5de66c7423189f12e1c9a105d1fb1500010eb280f346b45d96ac90389ff5174cc00911ec3a8972ed028f74eba8347732
+Entropy.10 = 8706dece8a595f0c4885c14695ff29d9
+Nonce.10 = 96587c6f34d29e6f
+PersonalisationString.10 = bd770a8f31f78482b2ca2e1e4b24b33b
+Output.10 = 4d30523fc574d6352bada3d2567178c702805adeef69bd6820ed97146bb30d09c16fff502089a90f9c993686c72c401825a83f094e8152af221d71d55e6882a10f4d17aa08dfbe54b263d2baae0b83d4
+Entropy.11 = 32526f30f361bcd4df5802724442b01d
+Nonce.11 = 1929dfb17d500442
+PersonalisationString.11 = f945c1e2eabc435193134628bc8c03e1
+Output.11 = e896265457d9251f4062a14f08d16ae5c4ff370b4675f20fed9511ead999a5e4ab7094ba6678e69abc7a95916676280c7f78cfbed7dfcea46493f57634e93dd18700607e1e19b78a57d1e47ba079e405
+Entropy.12 = 874b0dd42d1ddfb3d3835271f5731629
+Nonce.12 = 87b6c89eda28478a
+PersonalisationString.12 = 7d5b80247411c067797dfc10c1668775
+Output.12 = 699723859d25ab759a9b8b3728a67bf639e02b805d5ea7b6e6d614ec29728b68d6d9ed29a93ab1f1c624d3f2d5ca1826cd09cc1c5555604537567fa6fdb1f6622d29f2d81d1dd7c23179d75c43d72f06
+Entropy.13 = 5162636e7b1a5cf9b1c14d723bb3eeb9
+Nonce.13 = 21e5b177f119c477
+PersonalisationString.13 = 6513318d80218546385c2afc56e4116d
+Output.13 = c295e6515abf2598122752b24b4bb1493d821e6bb19561c2690dfbc06119c86539c0d21002d2448474762d60751ba8a58165f66fcaf6342dcd4e468363462f94149da6636c548fe5b9f2aad138a54a43
+Entropy.14 = f8a1566d14fff92e8de379d168ff3cfa
+Nonce.14 = 4e838a124e4b53df
+PersonalisationString.14 = 163e393b290a4d390ab0beb392f52d26
+Output.14 = 76234afc296ea36a44254f999ac31fca258a24427cf4bfe2c54495fc41478ec4a00b540659b3b9461cc6188bc1f57c19ae414bd18aa81eca7b9d765a784f0ef24335e46c2c77b8dc915f5d12c26bc653
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 5e0566b660631b94bfa096b3225d59e3
+Nonce.0 = 812bba142937562d
+PersonalisationString.0 = 08e83a8e3d50e50db2b0be92f236f786
+AdditionalInputA.0 = 496b30ceb7ef9ebe9d449d124d2202a6
+AdditionalInputB.0 = 2df0b03dd0ececd20552fbfd33188d4f
+Output.0 = 481e3558c50cb669164448001daa1d563c52afe14a92b58dbfa612f0ecd94e2e642340a3907028fecc214087abefe3b65c8fc2e0255f520c85bf62f02a7e18796950f4fdd4a408bec6924ea502360590
+Entropy.1 = f9bd510f8ab89ee8451069f3f9c01cb0
+Nonce.1 = a422dfa0b0621ea0
+PersonalisationString.1 = 94b4b3cf1453457fd58edcf4aeaf4c4c
+AdditionalInputA.1 = 3066bde4e26c14da649fc0cb714b7e20
+AdditionalInputB.1 = 40544e972e9a7bc227c87feb193a85eb
+Output.1 = 44f971347abb13b45030ef6003ac154e076e6ef49ec5849d80f092650701559c41cf6eeb02e8d8e319a5b75695014db895de56db1121798f8e681e6f4a3ec66e853f013b017859d1c76d348c0ee72665
+Entropy.2 = 105d33d2362b87ad3ee51fd7ac74b756
+Nonce.2 = cfa20f0e566dc5c7
+PersonalisationString.2 = 764c28ee81336aedca872ce266d56313
+AdditionalInputA.2 = 12cca70dcf8bee7fcb198949839b1440
+AdditionalInputB.2 = 114bc17e4391cc4fe8cd4515c2eb05a9
+Output.2 = 00db8005e9c9191c5cb1c89f79fe13a0e9b5b4e10b4cc772c8ad9f86d57bb0f43ec8a4b875a5d42575b91d6e5277b18275ac769325af3faffbff6a9d66f68500a07faee822d08ed8de790bc51cea80a9
+Entropy.3 = 5f21e96d25a54ec1dba73e67b2202dab
+Nonce.3 = b8fd4345dc8eb083
+PersonalisationString.3 = 4092d35fe74609eb540bfbc18f0788c6
+AdditionalInputA.3 = 2bcbc4a021884db410b7d23a35162924
+AdditionalInputB.3 = 7420ff1fbcf833db6afffa4c0f8bd0f8
+Output.3 = 6f433e459b9adca5c73693c586e9d37183b9f8c4463805cf2b784fcd8b9e6771f53b6f8dd8a98e047617333cd26ea7b76b2c7efdc1cc2ccb8858777f6467b222c51eab14bc0d74c62af735820eca54ce
+Entropy.4 = db01942b1e189b2981407ddfb84b3081
+Nonce.4 = 3fbe7768dcd64870
+PersonalisationString.4 = eba9f4974b3ce7bf67577fdbb69160ad
+AdditionalInputA.4 = f9f85dc7362a009510955f9000423556
+AdditionalInputB.4 = 7bd4f4d130a5d61be19edca07078e28d
+Output.4 = 57a4b0e981762f6bc6a980b693a6e1dac85ce344e98f63de345d3427d98c4ccc00892c6b3ef735bc273f6857021a1f2b81be7d60c22e60042fad8750894f77fe64bf25312f150ffee6121b13451aebed
+Entropy.5 = 3375f034069c2569e64d718a4deb9874
+Nonce.5 = 58cf63122c30c5f5
+PersonalisationString.5 = 4765142da01613784583cfe59c5b9ddf
+AdditionalInputA.5 = 47dc6757cbce9386867808b24f3278fa
+AdditionalInputB.5 = 20496311bfad06ccd3460c931107ad87
+Output.5 = f599cbbbf0d93c9e30151dd08689838d4132e4d83bd38063da1d845766f4c37b00bbd560b78362687cdf7d674337d203a33467226d35cbdb6fc924c9b966f9df19966f59f5f57c9f3b46e3065ec8b652
+Entropy.6 = 629b62131d5af04fe2e1f377c6fe7d01
+Nonce.6 = caeb888184526f97
+PersonalisationString.6 = e96e5ca5455d7a26941bd993e480e64e
+AdditionalInputA.6 = 0dd70e0d02984767293758485619a318
+AdditionalInputB.6 = 1b3405eaa98408014e6b14f080b4b740
+Output.6 = 9cf202d4d49e744ae4cff504904991e4d8ad9612d64da8ea03ba023f54f4cc49598d2f8015b2c8be8400b4a3d9b44dda532b3e724e27dd5744f8f3c7d99a33670999b11d403d694c95cb7e06a8a0e0b4
+Entropy.7 = 1e46ccc7b62a7a19958d65cb6d20c106
+Nonce.7 = 680bb7fa43b0db4a
+PersonalisationString.7 = 2e38eb083fc5db4598576dae95a093b2
+AdditionalInputA.7 = 95b3649acfe5158ef80906c41ae7487f
+AdditionalInputB.7 = 03a90dc938650d30be53cd72c2690714
+Output.7 = 05495f39993c97e1f84faee2058264b1c25b3ef61f59eba1832fa6af8c11e21ba3d4d38c257a46efaac7942a582b17277fec6b3a9a954e3f323c9a2a9f8fa9f90b1f47fbeec6d10698337c187e5b82c8
+Entropy.8 = 21952db33ebdf9ae6a785f6af9809154
+Nonce.8 = 722ee382e4a04ae5
+PersonalisationString.8 = b991bf9eb7cca76f25f45e1d0e0e96ff
+AdditionalInputA.8 = a8d8b6ee7be52cb0414c55a38f6ad74c
+AdditionalInputB.8 = 7f5c64ce3373c154376f4f189b11e6fe
+Output.8 = 33bc2a7599b4a2db6f0dd1896e40dcf612b6269195e81b20c4842cda27227fd9e74911d5504fc34ca0d858412b5082cce2c07d377ea4eaa7e878229460ac2fb5adf241b292dec31aebfa4434eeff3808
+Entropy.9 = f081dd932d9f5e53d9eee9807db58fcd
+Nonce.9 = 92f027b15ca5866f
+PersonalisationString.9 = 3cabd9fd3de7e196e1803f3619a3d048
+AdditionalInputA.9 = 5aea804f5250075d5427de0e73df42da
+AdditionalInputB.9 = eddc6c242813841ed7ac483eb6cbab67
+Output.9 = be5036d8f79fc9c1029c3f9e42f1045343dfca9eff6b74f6ac0b9666b4df7151ebd13fd052cc8bb9bc7b1ce6fce0f2749f313df7b9d06cebf3f6aa936270032e8e0dec3405ee246b80826850a1228900
+Entropy.10 = 9eb908f509c77c0ac953560493f4dc28
+Nonce.10 = 1aebf69b03de5cf8
+PersonalisationString.10 = a7f01f55fe0e6b6d731f387caf95d045
+AdditionalInputA.10 = 5dca6d75183f3092a18c8dfd950fdf98
+AdditionalInputB.10 = 50eb0cc76aa38e31b87e7cd8df950f08
+Output.10 = ba52cbdb845f5ee864fc1c17c6bd0a68439a7eee7027fef5a8083b2e0146c60464246527d52ae59ff5580f336b94594f5aa933c3f75744c76784df9783bdc91d130e29658fb272045e953794ae9bb316
+Entropy.11 = f8cf962f6e583970027d4263f3f8b936
+Nonce.11 = 0cc239a1fe9750c7
+PersonalisationString.11 = c9251c519d5526d6882f1b235fb9b944
+AdditionalInputA.11 = 9752b7e44c67da390d4ed5e8b95817cb
+AdditionalInputB.11 = d18d460512747b638652fd4d457bbce9
+Output.11 = 5a7e2ac66b5fb12b3eee1b6aad4b34e2439c53229e6f2a10a92069f8034562d1125a707766936b6e9c6551d7c8c02775a5721881f12a28e1d63c18e4a7869232511989c79c5a8d3cb1d4cb36ea921c78
+Entropy.12 = 55e311a23e872ba906bf060388e60ae5
+Nonce.12 = 5972e7aeb9f75344
+PersonalisationString.12 = be3f6e932339c5b9f71b87e72ff4dab1
+AdditionalInputA.12 = fab46e391e2c5f30b37298643bc55d50
+AdditionalInputB.12 = cf4e5483cfd794f03269e289f2b4c08c
+Output.12 = 648ec7773f8c664f3d7fb279b51c5b9a3d9b067d6aa54e93c9bb9a892da91fad4a30e8e4c5866ddabd2bb44b243d7a3a00affec9efb725c951862ff9184392dfd626e711e0a3840db849b1e3b01b4fa4
+Entropy.13 = 4a989e6bc37b9157fefe6789aff230f3
+Nonce.13 = 7e5ee246798dd7bd
+PersonalisationString.13 = a7f5af48da677d6721d11e284fb1ffef
+AdditionalInputA.13 = 3351002030eea100c84840748b0a3d4d
+AdditionalInputB.13 = acd32c8d515109e90dfe1bd9e6b326bd
+Output.13 = a77bd7dc3986b43136606a209d600ad90068b567a5e3a2f75e61b2748e265e500fc7ed492b8cdde39a6b0a87ad4dd00529fa7feb4635e315b7116e1ce6251a806c7c871f7ccc4475e332054ef812c631
+Entropy.14 = 75ddc6b58a06a0feb20b703ab6dd6da0
+Nonce.14 = 527130cde5214f55
+PersonalisationString.14 = 3a2fa9c3b13397ed8ebdf57d1efc1c97
+AdditionalInputA.14 = 27486f8dae1b36462639ff7eee869a29
+AdditionalInputB.14 = d1bfc7eabd8eddf622297012169f351b
+Output.14 = 4c893c3d1ed3a190fa88e159d6c99f26a02fb5fccb98bdef9fe43f1f492f490109224ba6c317db9569f618984409f2fb3db0b1e2cd4b95746f159cca76f1204f6d2a4c455c547a39a5f79fec95c8f4cd
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 4c2fbea166f7920af0f0521e22487266
+Nonce.0 = ef58d39807d588d8
+Output.0 = 54d8c2266c0fa6613e76768856883da0bdcd0d6621407e8599451e2859b5d0b56e588089e39e229ddf84f3267ba5acde539e5c0e4d33aa51e18e0758e7b52a240d3994a77edc4bd8d3c254bedbbe27f1
+Entropy.1 = 5d839ad9eda931021901b262e48ffc81
+Nonce.1 = efbee0dcb5601086
+Output.1 = de5d1198d1da55806056d79579409fe72415d181148db8273b0cba1e9ff0a8f4552047ded2f565e6ff7035ed420478ebbd8e4f0e301de8a5b558f2373a57708e05f0017748c40f7bbda2d297be23cfdb
+Entropy.2 = 803171f06759503e5aca87ee10d37fbe
+Nonce.2 = df19527df6da466b
+Output.2 = 8f71d35e91480b1931174d080c905abba4e1179476a35eaffb18df538b397d45decc4a4c9fbee8e8b74911e7e379d67cad77873671248c65c21c7f93d9c2116284e795e941c8efaf2de0d1474e81e70d
+Entropy.3 = beb33d42e9be573bd9e1c9e1d6aff44d
+Nonce.3 = e42f6b8177fc417d
+Output.3 = dfcac439738b84d03818568b2bb9d71a0f52f0b962d93d913e2b909ab464a378e003640ca3addb46f1f4607543f2985f561fc4def408b47fcaf838e25468fc97dbcf057edd51d88c342c81d6ce92b020
+Entropy.4 = 6bd49cb7c8ac1d6a04db642d8b462ee7
+Nonce.4 = 73e7cadf29be5f35
+Output.4 = aa5157bde2c8332f7ede49b6fd590d90dcb637aa2c62272d721f0f80ba8fa83f616b901dffe3b9e236003ad01a959d95bffb1e24f18cb4445d4b64ae2b5d1e78fd0b5830fa4aec73ee189f17bed79b80
+Entropy.5 = 9306eb88e8a62744ff5dd01d92e5fc4e
+Nonce.5 = 582de62d3c45e9c6
+Output.5 = b73714fb42e91620d1b81a80a416f5239ed3856e4f7320fc5726a63207707710803ea3fe11813e6bb7d5c2b9565eaf059d8f3384f6dd1d83f6917ff3efcf9290e34752923e54774a103d0a5135ef2fdf
+Entropy.6 = 0283592b01b7d932dd79be815a325841
+Nonce.6 = 4fcf02c7764c5a3b
+Output.6 = 2470de1ff90fd84c4e17eac1dcff65634799716aa0d027a3a9abdf92ae956a18abe8b23742bbf8317aece6a6d1ad2e0041fb112b7c857150f337a15927095f0a9e8caa42b347c65e750b0737b0a70241
+Entropy.7 = d1b81fb414d0c070ee8469b190c33279
+Nonce.7 = 43f72e66358b29e1
+Output.7 = caad4638fb82e619665a300cfa2f88234eb65d414b9d1ec9f9cbee9429626393366c8148be55b238c08ff48935738ca6e840cce024a5805de92146408993547380cf53be7c6e455daced820fc8fb34e4
+Entropy.8 = 6123ec40c42f3bed9cd178d4004ee91f
+Nonce.8 = 0264712f52edb23d
+Output.8 = d58b3f091a967ca13b55463e8529045d60a60b9602f43ee7bee075471eef83823b2d540b3ece6d637e1153579e2c179ec155250a18c3ae46490c61e4643143464dcee94c88c2afb41b7d516f65f215fc
+Entropy.9 = b1e632849427bec02897718c3df8865b
+Nonce.9 = c8c1c64bfd80be1f
+Output.9 = 4985777745c4fb29d01967570937da62a6c644881a4fd03e1403992a6a86dbeb98442852728844429dadbab434a0b03594c8d6ae41fc2b4a9ced5f63b4ecd8d4064f80acd3ef50910c9d84a0290c2615
+Entropy.10 = f6b732cd0aa7200aee6784552d0c38af
+Nonce.10 = 2d69a600a42674ac
+Output.10 = 47e9738a0d0e09ba786d5c9d0a14472679432aaa363bceb12bca2d85248d61cfb2e4b712ea4ccefa14820227db3a31f063e98c40ac21bbbfae3d6326c2fd59046d8864976bcd517827503362429748bb
+Entropy.11 = 49c494013bbe3320859fcc0cf73cd472
+Nonce.11 = 83f14a32419cdae2
+Output.11 = b1f3aa9a90440b35ccb797f7e0b7b4b70715796f320439937b5e7cc69ceac6691d3cc262bab35708ac845d9c44c50a0d45e29401e52be422460e0c0f6b983dad6d5e61f7f6929d881f430348bf16de94
+Entropy.12 = 498c61223bfaa533da307e7fd79b776e
+Nonce.12 = b362d90663b1c921
+Output.12 = 80a2a0f2822985428471bac8c5c46cd5dbee0f9fb91d08b9ed69a557700134738752310eefc23ace021fbcb82cc67096b58aae14463607a5077072ea74af4bfde68ee91f89231bd3bafaeaaad1406b39
+Entropy.13 = 33f724717aeff485543ad0d5c7703356
+Nonce.13 = ac4558a22aaefc9d
+Output.13 = 810be2ed84cb7bc205f6ba6dd691186e454da073955ce6e54f9b945445ae698a3d4747c973052aa1cc7e212208ecd4cc58b2f30ff6c4f2acdcabc3727e8665f55de7962f6fcbbeb406869924c6166ac2
+Entropy.14 = f484b922f492d19b58407c242ab90e76
+Nonce.14 = 8952a0a4b666b0c8
+Output.14 = 2d77235fa273cab3c1bb176d44817cc25300b3f0172a0b5aaa66b282c015d426edec5f1ebbfc0269956b85994167992a71002586923ea234be6c5df09f47d89132e440827b89f7ff97e032b3f74fe32f
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 9e13a57fb43ddcd069fc8380b818f2ae
+Nonce.0 = fd09586067e5d92c
+AdditionalInputA.0 = b2257ba77d8af75d23b80c9a9ce74630
+AdditionalInputB.0 = 79775210d749662d6a5ea2b2bbbf3530
+Output.0 = 78a4957978450a7f8ad00f3c3b4e21876f5a828cc60cd8eaf488eaeb1b9640bf493a9ceda1d3c768434deb20183b7c0ec8e7d751ba9011e3489563c795b678be5ea13618bcc3ba54fe594453c95c888b
+Entropy.1 = a4e86218fbebac79a31b3acf2ad3c6ea
+Nonce.1 = ea2aec423f4dcf62
+AdditionalInputA.1 = 00277c54a49f8d71d324c4f6d753ab8b
+AdditionalInputB.1 = 8b56dd32e14fe606898f8feb4b5e05d6
+Output.1 = c9310694bbea399211ec91d41c60f32313fca28ae5eddc772e98d8f5927864ad69f71800d9331ea4e531e3bb8356c6ba9365ac76b78c40ff28d0bad4a144b8d74fe4566e8dcff046dccaa938aedbb290
+Entropy.2 = b13f2409b5bc4151ca7037f7de835261
+Nonce.2 = 2f7ae458deda5e41
+AdditionalInputA.2 = b24f349c357a53b342ebe531e1a04013
+AdditionalInputB.2 = e8a5c65474a27d2fd50f6e6bd03cc27a
+Output.2 = b7d3337834f2e223570300f16b9b5a1d1d7fda5eb5be14b89066dd9be39babdae41afdf57589e4c9ec062dc0ab0d6295458fe083dfa6c55147a13565628d596c913e28a82700d89a8bbe226d33e08e8b
+Entropy.3 = 70c73c776232d14f09dc1f84afadeab4
+Nonce.3 = 39d459b1a361740d
+AdditionalInputA.3 = 679f2ff0aaf51a1e69ac27480d576932
+AdditionalInputB.3 = 27d4920dfd2683b66a42ad3d32071547
+Output.3 = bb8e5008c11c4d6e4c63996f1e50edf480bd155fd04668652eeed6a871de7c8605f217fa7942e03f3cc2b8bd1ca18d6ddef73ed9ec0072036a3416102c60f83debebacffe9fdebe2a478c2c7ca68abb6
+Entropy.4 = b838bb136ad9b6f2b7913ff41af9af40
+Nonce.4 = 43ccad7a4227ad7c
+AdditionalInputA.4 = 09db57817051cc2e19806d18b0a9084f
+AdditionalInputB.4 = f8ebc3544a5cd56e0b6136c9c3428499
+Output.4 = 2060e3922728703c947e0d7d94374e9741f433ca244c6cd396db884aa41f6a75d834fe763c8c873a960ff301586c87012721d8be1bc0226884c235321b818ec195940dcb5c21bfe95936ec2fe4a5deef
+Entropy.5 = e4f69f558dbbcf15768e21e276c7381c
+Nonce.5 = 6d14d8cdc6bbe6bb
+AdditionalInputA.5 = dbf765ff204ee32c5382a39dd6aff870
+AdditionalInputB.5 = 4fa90168a5a0073090e4d4af432c39a4
+Output.5 = e65401ce0ec9f0d247d50cff3ad070bb1f3c9f9e81e7237ca0539b82e4c4d362983bb5adc3d2d98dbc9a21a3351e17fd7890ef8fef7268f5c0031fd49df563ab6771939dd2bcd6d65c307485c0ce1af5
+Entropy.6 = d7a32b5597d9994fcadd9d94565523a8
+Nonce.6 = 5f47254c88b71055
+AdditionalInputA.6 = 1ebfd0d0a13ffb06dd3bc3192f55b2c6
+AdditionalInputB.6 = 804fc1772ab393c74d7cca2e566ef70f
+Output.6 = eb269c0f2d02ab4448f51e0421df9701f27e9da77e75b2e7603cf42152a8edc5fc292fa9d4046b22f7842bfa80d4a0334c79e0c8389a9ccd94f34b9c6a188b09996bd6d1e0ebe72539f6a25a5cc706f5
+Entropy.7 = b6801ab728562acbd71a2e2157eaa5b1
+Nonce.7 = 2ef69d68e40b3d82
+AdditionalInputA.7 = 9bab4de8295a5ee6e15cc4962f089631
+AdditionalInputB.7 = aaaa367701552819c4a2331665bbf061
+Output.7 = 091edfd88948e749b6aba6dd70077c88f1ea297bcedcd9e1f0da80e53ec1517f08786f2e864517a2754c5cd15008d6c03ab9ff2d058880869d8b8247be79a01133c556a515fde2b2119269c7de06b473
+Entropy.8 = ee5affe5e315db84f71a220b315888bb
+Nonce.8 = f5e5f7aa35eae629
+AdditionalInputA.8 = 6d3e8fd6870d2fcb22381c1958e3875e
+AdditionalInputB.8 = 8a3a4093fe500feaa1f7e2de9fc56bc0
+Output.8 = 27e79a6de3b99971182eab73e321683e2a601dee46314531ef8a0400037b1a660e2cf0759df0f6d2afca9a0dec502b466d95afec52b89741242dada5202806ece73996df88f35bf7c686a0f69732fa9e
+Entropy.9 = 28f15b1ecf1e8fbeb4ebb243e86e510e
+Nonce.9 = a149011ca0962b79
+AdditionalInputA.9 = c54425d43b1e6635467c5158ab570596
+AdditionalInputB.9 = 794c9b2604ba2402a47638dc7360ac29
+Output.9 = 487119e5db7e5b6e5792ac25ebc055e91ba827cd695b5b0f959185d9bb62e27a8f6c814afc39b26f94878707ae2d67d01877ea267fcc55d5df83b2d8099a093e952a43c5d8de9925e5a0bbdafd813700
+Entropy.10 = ae23ada45ba1c1c491185311aa994b18
+Nonce.10 = 03a157c7a74a20d2
+AdditionalInputA.10 = 09f37d8e0ce23d2ed9a820c41c9c06ee
+AdditionalInputB.10 = f38dd16e2fa8d52c1708fc3869bd9a09
+Output.10 = d45f27d91e077b9fa060c6a7d707c07c0ea3cbdb80194f08fea64d317715cef76dc88fef48356c1cf9f99e5644e6c5872e7937dc1e2c9ffe0dfaa87e425108d97f65166ac2c110ed0cd07facba773673
+Entropy.11 = b0050cbc412b3122d8915b795321614c
+Nonce.11 = a098bfa017d5eeb4
+AdditionalInputA.11 = 75816d4ad2581f92bce5e679bbcfff53
+AdditionalInputB.11 = 7d40de162b812131915408f979bf1ac8
+Output.11 = 74cf8c5d35dcfcf472f0842b465fdd136f12b405ee356ef480943e704cbb12a8f568d7e1c131e291a4e82a018b667bb5c812745514c902e713c9352653696ee07df6a552598d0473460bb38fe1d602c8
+Entropy.12 = faab57f31239c22e8808c246596c1f5b
+Nonce.12 = 0387f1636543a661
+AdditionalInputA.12 = d1b1eac58101b56082f6cf3f03ba3e6b
+AdditionalInputB.12 = 13b0b5baad299e76c732dd79878b7e4a
+Output.12 = 1a7230d14eda7f2f96e30e9b60137ba33aa4c5be0472880437bcc61ca82d1e0828918b4062ff7dee89128a48ed87ac60657051e0eeb4cbf372a24befff4d6e22e73d3dfb34d59d213e05cc099d48bbda
+Entropy.13 = 93d771d07ae98d787fdb787f30abd7d4
+Nonce.13 = 380d743dcf70a78f
+AdditionalInputA.13 = e8b4b833d8657364b8ea4a6704fb732f
+AdditionalInputB.13 = 615853a9e6e59be8353cb23ed9b068c0
+Output.13 = 2aea2555d25835ceb3425f584ba11f20f237e0a6af2f554b382411ecb0ffa8d6d5504b654467ba34a0436dae4a9d483f6f58a52d73844586bce2d1406f4d5f9b878c4d1460ef9c974cac1ce0ebe8627d
+Entropy.14 = 7d7b1c325e9843c3d2770efd5e134fe7
+Nonce.14 = 9dac46a2da81030f
+AdditionalInputA.14 = 9e3ea6eac120d663e330d282ca9b9d7c
+AdditionalInputB.14 = b8d71fce7779a9906b9790cd1d4e48d5
+Output.14 = 63d28a300a329ca202b98498c9f46912620bc85c246f034dca4186cd9b0e0810a363785878effde90aec8cb584862524eebf940c44fed21cb580d4115f3e0dda07e0e4a66689c2ff3e9b87edfaa4d051
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = e4bac955a3e820e5895194e2c13ef9ac
+Nonce.0 = 8f4d177da65ed48e
+PersonalisationString.0 = 06c4c601145a9d137a490c7bcd22f41e
+Output.0 = e967d2fa2478775342ec5ca153e5cb13c66134d4e17a89cf629d7845f8ce268332a04f0d7e2282368f4033994f20bcbc7d4397d5facc448842b1e9246c24a68e029fff99e90853bb19b7e6fc9f29e4b0
+Entropy.1 = 2e9518f753f59a4a53fdac88af187dac
+Nonce.1 = 9b926c223ad3efb0
+PersonalisationString.1 = bca05ffdbc7d8b928c7979c083d65784
+Output.1 = 055fbe1d5e276068f7883094c3df679da1bfcf38562ebbff64456c2ed4fb03985bddfb352122adbb0bdd92672d454f7db516209cfafe289bd28bdbc50bc22f03912ea694ad2fe1c9f2d57ed39893e801
+Entropy.2 = 299fb649ae002b0bd29f23fbeb221f08
+Nonce.2 = 6140ec1a5899ebab
+PersonalisationString.2 = acd2160d088532e0588a888c5dba863b
+Output.2 = 1630fcb482956b0f9a1f2c248d06d8069669ab2c90aa390da636954945312607d645a6ae864c3e3f823e2aac900075728548d784aca351f1f098fb401fd7e4141e2a374c8f252bd72aa8f55dc014a68c
+Entropy.3 = bf9508828a6df39ce1957ac53a216ae8
+Nonce.3 = 6cf30f3288512f8c
+PersonalisationString.3 = 133f95816e48f9c57b5edbb22c6ff97e
+Output.3 = 478399dbad14a599027c8dc6bfd79d26ed36997de488de51b56671d1c1a3fed83075fe3b5c930c5a0feb42575317e8c64956207b62414896f599164e5da7afa69d07874bf168992bba0a9f9842fd1d21
+Entropy.4 = 15ff59f07c18ab878336dee54dcb47a4
+Nonce.4 = 396376c48a1ce343
+PersonalisationString.4 = 924ddac14f9611ca3f81712021c7f7da
+Output.4 = 76be3c7f886ab38c1f982cd68e0a2c4485cf69627d670159673b9f3185de190fb8df92e51643c661ee84faf91e4ae7ec26788df47672a1e3c483dd28dcf48841c9f910fb0d46ddda6f16791afba73a83
+Entropy.5 = dc5fd0fcab490b8aec8db121543e750c
+Nonce.5 = b0ae04cce14b1d5d
+PersonalisationString.5 = 159d87275dde2e356fa81d693c5171d7
+Output.5 = bac7c6c0fcde7784f561f66b07a12422a3c745d0ef4d17433ae0e16a02e08d8cdbe0ed5a968964ff0aa9dddd9abd5c55904ad7da95f9ca6f745f0ffe4be0a0a880dcee0a631d3492c99f6cc5e05457c9
+Entropy.6 = eca59ee314b9598f2b9a79b22bb791d4
+Nonce.6 = 8382ba70ecce359f
+PersonalisationString.6 = 821de63abd7ccf3f74dc9e99a5f6e398
+Output.6 = 1f35097f7c0806a6fa9399da1c45e8eaa07c6b1c8fc3dad96667de01a313938e376490e214207f79e10c2434380287b5f72c67b9147a8f5682cdaa041abb7bf324464f589c06afe1aadbd474aa51497d
+Entropy.7 = 243dec1c74b6daf75c9481de3accb394
+Nonce.7 = 63a8361f5b8c9c0e
+PersonalisationString.7 = 79c60f83c9266b48e351648c991cf4d5
+Output.7 = a85f1e42f6b73b34fb63e5623047d2a16e9e03b9ab8b2bd035669b7edf18a71f7ee96de85f8b2ceafbe1347e9194b3a62df8ee5e069b8d1f619c2050fcf9d2db1010a493e9c0d36f46fb98406083f335
+Entropy.8 = 7fb905a5598e3133d3c47489b11eaa17
+Nonce.8 = 918cf0f9152b6294
+PersonalisationString.8 = 2815187728790a95bb6d22d7b092d2c4
+Output.8 = 1556a182045706d3c860f2432ec0bbe968955ebd528c2e8fbcc5c104be889c7b76ff91350ee5ba6908c7fc18f8b11afd9bb9057281e462f5350fd678e5d872df1991017717197c21b1374b79f6f7febb
+Entropy.9 = 01fb28bfa403a719e1ae11f61aae035e
+Nonce.9 = 27036cd4158f1b7b
+PersonalisationString.9 = 6e181755168169ba43c269af58ec40fe
+Output.9 = 1de83d60a0e36f7f4f7edce03077bc9268da4d64edd24859d21a190c06a09aa3a5c791116ba12e2a13ffa5e190d1338b8f655a8d9822b84d8650958bba819bf9b41292bf5d66b49ac6ccc02b9dfd39a8
+Entropy.10 = 9649465c60879b3725b92aad1fa41077
+Nonce.10 = 8e35b287bc32c273
+PersonalisationString.10 = 361ff99634ed9541e710b951b0105cd3
+Output.10 = 0211e8083c4576a815ab2d68f1c4ae8979198d8e44a5d14f80987695a397cf71d257edec3a32bccb2e293c59173fce4a1f975e4e9111cadfab18cfa0bf5f392e4e144c48279da563bac9d03ddf0c7357
+Entropy.11 = b33dca3fc104ae072a781ecc2dc4aa35
+Nonce.11 = 92d974f0278111a6
+PersonalisationString.11 = f271500a57f6d0fa653e2a9761a5118e
+Output.11 = c471044678d3bfca70b7c0979d82d0d3d7c7efacf878ff6e1d30f0f8ff48aff4d639fb189acdab5b3c31826c960f444073147d8a6c8ed508188f48c95f401d002ee5dd866f0c4b05d0acc4840c6becf2
+Entropy.12 = bf2d50d29b7337e71ce129ae8f8611f1
+Nonce.12 = 3cffbf94c8462df7
+PersonalisationString.12 = 5263f5b6eaf9122c2b57c563aac6583c
+Output.12 = 1ace79cb19719f58f320bb68e5aa531ebf5956bb2307dc09cf9ab544bfae36301a908445e4195f334e6287c90ff8a8c579f4337f88ccf9095ce23168702959a821ca7a92efb0aa748cd252298a59ee96
+Entropy.13 = a2c76004f52292ae30744b3bb7b9746a
+Nonce.13 = a26e98090c9c4e16
+PersonalisationString.13 = dfffada152ebc2c6e2dd7121d5844ea0
+Output.13 = 675ed1b8a28f8f00c3b6efd9276daf5cfbff95fd592ce8c94c4b5dc9793b67eb2d9ca37aa9c0b60ec5c9a2a56839708809594894cb7adcf6c9cee794471dba01d6eba2d1a631624b6d0c36804faf6a60
+Entropy.14 = 4a1b6e50d2854866e1c1ddb65377baca
+Nonce.14 = 7239f92b63fb3dbe
+PersonalisationString.14 = 8d2e2ca3985bd2538a71f02cc3eb5568
+Output.14 = 0e4cb328c03faaedbec7215725851069bceae4332de6a70e3521dd065f2f7923485969571ebd7f24be460fd901c6b3e356da6ee5262ef2d76ad14eb0f697f8fb92af2f46630198c5f7018860886147b3
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 1b2827ae51824e1f68a48116dfb2e343
+Nonce.0 = b9eac1b947ad0f4c
+PersonalisationString.0 = 51fc5e485d8cd08209c9894821a2a6b6
+AdditionalInputA.0 = 39a52748bdbc7fe0ff4545f0179949e6
+AdditionalInputB.0 = 4d1a774a707438bf46e6909aff874189
+Output.0 = 900d585848388e452fde7771408c5292645df462389bbdbb29cd1e2ab4f2287468eefa08b7b3bb69c26453bd47abdb91ba582ae27bb9d5243f983fefc62bc186584799963314d0f564ef36be638b1a64
+Entropy.1 = 0f3b65bb13f1acb3172be72edea5247c
+Nonce.1 = 3522f2cbac34238b
+PersonalisationString.1 = d892f65f1949d280eecb295276b9c69f
+AdditionalInputA.1 = 372c1f00a462a535c47a771b8e265358
+AdditionalInputB.1 = 3062268c6109e92e964a655bbe3f9380
+Output.1 = b7bb52384ca0e607a986abac175ec272ddaf0530f241bda6ea7b54b42456569eccc025ca66936f2bacaee6df8c93f7c13a89bf3032b817464425f324ba1763ada71d2d83466c4f6931626482238ff21b
+Entropy.2 = d79c74c23e2e016f64bfa3ad5b351972
+Nonce.2 = 5efc54f323f2083c
+PersonalisationString.2 = 08e31c36e9296c6cc2a96f2fd539ae5f
+AdditionalInputA.2 = 80540491eb6a5b39b079726a2d2e6ed7
+AdditionalInputB.2 = 57d492f0b098ccd5810f9a6bc9f79213
+Output.2 = 40a1a6f13f9e2c2b20e4be32e5162155165403e92ab8e4d5517b44ad6d24e0f7e51a970b469adb6ddb9870c11955746e280667185c5a5eb1c721863c22b260c2c00780020e6a66e6531dc714e883bc01
+Entropy.3 = da8b8c8a285dedce252e10eb803e9b90
+Nonce.3 = 477b9d7bb8f076af
+PersonalisationString.3 = b7a6edb7ad251007c28b2d3330e7c66b
+AdditionalInputA.3 = 2671081c7cf3b20a65444c3ed495a8d4
+AdditionalInputB.3 = e31b868cfe2824135d1532f8823122e4
+Output.3 = 602599edeeb4c86baf9479d4b745bd0f39299d2b8084f1f6df9f48eecd08dea98a8137732f08ae83c61b73ae5af095edf7caf112d98901622432b4f8d88f2e6561245652ef94b327faf9ce090f79068f
+Entropy.4 = 4c49cff551db41e601bd14005c9090a6
+Nonce.4 = 7e9bf1339d18cb6c
+PersonalisationString.4 = b834ac33cd97a9b506593ed59709e213
+AdditionalInputA.4 = 85649837db269104ef6a976738a171a8
+AdditionalInputB.4 = 598238e90189d1e923ae39ee5e7ec2d8
+Output.4 = 4c28991d91984941d126add74b463a8c31c8e0b66d12e664021671234d4946cd3e55f14d22506623165ba9d22c6a7f11ff2a12c626746f739d70c971d4d47f22976a0e8d06b93661350b43c6b2754a89
+Entropy.5 = 65a08a98f1b632beda761c078d4a195b
+Nonce.5 = b93a7d1a2f859cc9
+PersonalisationString.5 = 38bf8e9db845fb9ee4a4a50f6a14eb9e
+AdditionalInputA.5 = 865a17d8b9f7f95a4b08bf94bda268a7
+AdditionalInputB.5 = 7f18182a36a6cf7240337c4fbb5e4e72
+Output.5 = 30e24271f413596f8cb0f3d37cb5d33fa5f1abeb08e5331ce6901bdbc1b8de42ac12e49bc050ebcff00b42b394cde6bef0993f002f18c0e68aedff969670f312b9cdd8359faf3e0c4de24ef9db613c98
+Entropy.6 = 70827084cc1f48317e1c95f255837a3c
+Nonce.6 = 765fbaf6d035abb7
+PersonalisationString.6 = a5b804296206cf3a7893780865643330
+AdditionalInputA.6 = bd67fbd0cea225282dbbde85f9d85324
+AdditionalInputB.6 = 55b5b415ccb031f6ca34c9d7713bced6
+Output.6 = 2b8540e37c318afa95fc1e8d08b8d9ebf9e2b910f22ddeb5fbae4327d37cd98724dc95bf367e6e90196639bd21323d111278ca1666658ac1e55c7c930f85e773d37dcfaf591151ffec2729e36ec5fc4e
+Entropy.7 = 39e794b3b956574adc9fa54001b2bad5
+Nonce.7 = fc251a9ca81c029b
+PersonalisationString.7 = 7b564f1515461fa9ef7352a89ffcb98e
+AdditionalInputA.7 = 249b0afda23f95f45cb51116923359e7
+AdditionalInputB.7 = 18b4255845cd8b2f3ecd84f2708d6a91
+Output.7 = d5367e186259b8900a4cc2d08de8bb86503d23d8264252dd73ff9d21ce9cb5b465676269808b477b4b24a7231e5c8e31bf3a5d1d96444e8fe128cc7140213da67062660ba490b8e6abeeeb3381018f0b
+Entropy.8 = 0e54fd9317324539b5f87dda8c5feee2
+Nonce.8 = f66ceba0134d1392
+PersonalisationString.8 = 83ca3099c4fd956d69de1da9dd2dae70
+AdditionalInputA.8 = 604460201adba7560a9b7fcbb2dab345
+AdditionalInputB.8 = 911ee9cfbab9d8ab26131593b9a974b8
+Output.8 = 5598424e63e74429431ad9a07df02704754ffb9b304d2893d02ec6b45f335cf0663e865203cf2f106c1a9472e60c0c0631a96fd3856255ac01ddb94c7d0a235da604e46c19decfd00834a463ea270657
+Entropy.9 = 6b95ce60fbde0b7a1c084ee9c4c0ef3a
+Nonce.9 = bc55d0d73df2016c
+PersonalisationString.9 = 54d5952c46fccb8bdda8dec9fe0f4420
+AdditionalInputA.9 = eefa1d450f09445e372f30c8e7d0f306
+AdditionalInputB.9 = 160ade5d9d4dfdce0e044567a8bac002
+Output.9 = 2a7d8d1d248edd67b80b636c22b5ca69e904cefca340bd8586d17955c82d7729bb243b2c1715074d856597406b86b925818724237041127e6728fe3080a43f6955019e10a0e9b4b65e1de655d2621160
+Entropy.10 = 83998366ce3e12202f20af4c355679f5
+Nonce.10 = 4db83f885fcd6819
+PersonalisationString.10 = 6e69e4ad38719f5a36f624e3766ffea0
+AdditionalInputA.10 = 4ed8ecc9a49fdee286355b494af86d9b
+AdditionalInputB.10 = c1e79feacb7575244342e0183d25456c
+Output.10 = ba1b0c908e3015bbd805dffc803bfa93f1306d30dc7f05d2d4e75d3063371b947ed7ec98c24c9e2de43b37220f85af7d4ad26388948693358da23bdee6f225e8776905da1c24b0f96125c081a90ce7cb
+Entropy.11 = 2a400808e03ced3842ba1eb3f1575fe6
+Nonce.11 = c6b9b8c333063c4e
+PersonalisationString.11 = 4424f53b70a4f48730f812b3cfcf539c
+AdditionalInputA.11 = 665c1718a488186e3f7d0bb696762aa6
+AdditionalInputB.11 = b6d13ebd7209437ea5faba33814b2c74
+Output.11 = 2dc7a954ff439ec8108b0649acd3c5d8b2e28c8804cc9d249acafedc0ef81aab1caec356cc50c43b70c1fe4dc117290bb0648588bfe84c9b839640c1503438765cedb0e589cd13fc8cd80bd96ad19c6f
+Entropy.12 = 6f7a7d94dce02590e790b971af9d4295
+Nonce.12 = d742b2e7e6100044
+PersonalisationString.12 = b9db42702623c750b8a56f87e9b86ce3
+AdditionalInputA.12 = d8aa1660026346b64c73042ccd7be911
+AdditionalInputB.12 = b842d8105b29dcdd493b371bfe5fd9d9
+Output.12 = 5eb008c4e9bdab611628ff587411a8262c2758958103bd266aa1af386ebc70482481dc8dd6a253222e34444be45a6aa231119987379bd7ffc43f7a4ab793d1fe90855264f1f94733e424dd97387a180a
+Entropy.13 = 5c6aed6f74cc302e86c504f0586cdcbd
+Nonce.13 = e7cc8cd44f6dace7
+PersonalisationString.13 = 771141d942658fe4d658f4a8af0dc471
+AdditionalInputA.13 = 5d7a91e18f88bd509a6a0d590e71c761
+AdditionalInputB.13 = d46b57fa51a421e25aedf111157db8b9
+Output.13 = ad1ada8ce79045cb24748378b4c4629dd908058377502436e6de51b8dbbd70d721e804955a1ecb02f8b11d1d44d9f5011808c56a6afe94c77c15319d8e1f48c50234d13228fbc84e13b4440eacf4cd21
+Entropy.14 = b30ed321b4609c2c1b51235963958ea5
+Nonce.14 = 5bf9bc2fee575eb4
+PersonalisationString.14 = 8fbd86da0724355a4059f6ac78fe6342
+AdditionalInputA.14 = fc54b5339b37eb6889cfd7c185070bd0
+AdditionalInputB.14 = f6a783d6d42e5ad5abb0a996bddfa04c
+Output.14 = 683faa732c4551604c8865b5f777571c7d3cf1a60124c59b91283da0cda9b21761d1c17c81856958c6d590436c73594bb36f46c2f89237d8c7a7ddd2c58394c983f8f6c000d77566f2a1d89bac054bdb
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 39af3b5438eef3242073aa3aa7a3cf1b713cd38e230fc782
+Nonce.0 = 45fadab7fd239df2b9a4783f
+Output.0 = d86792dca80f167184fad6eba188a08160b14c324c5e279d98e5de1047402e3de71fe92aefdfe5c8aecb416757a67dcce3d0523a50ecdc381a98da93a511ac95f4a6b7a9c3192ebe21bbc27fe005bc413c1c10a1995b24078dd05727d55da602ba93a392769349993552a157f5699f16
+Entropy.1 = b596a90d7dcd893bdadfc2036fc9c69836506f1a3e7c70e7
+Nonce.1 = 651cb16aeaf9514db4210a5c
+Output.1 = 828c322f7de418314f16dc4b3935ece4151c7e124afcece08c49c4c12cdca6eeee36ab524a4896055afe4fb06c5ce2a5bcbde6e8e368b60e82592fd3b50dc2d4fac70911fde5bedbb6f0c68f7cc3a0cd5c4fa1018158830d5ede3e2115ebbbb9c38a11e8aae5696ef7e9d02b9808a01e
+Entropy.2 = 5d3e0111bf4634adc2d5a34accb2dd366231664c7c6a31ab
+Nonce.2 = bbab567ae9b2eaeb83497b40
+Output.2 = 8de1b396ae524f4ae9f98a835d5951b342760bab11628a13a7a4dfd033ea8206c5e27c39066cdb18f82ffca68ac2829911394d71817fc7e35d17bbfc67b3bd2e9e40f68277323faf11b9559fdc0d25ef447718e6f923891d65f342506079d7fe22a33bbd5e57b1038d2348f936449d3d
+Entropy.3 = 10662fcce8c1c629bc829e8d03e55ad681b6c64b84133b03
+Nonce.3 = 78b0848a2169e9fd9e1436fb
+Output.3 = ce1391c86b679604972e97123703fe4946777533c319ef1aa9ea7fbcb5a4f26e70cb92c7cd9a65e5151d88e56d741a8c208487f33d93bfcc7aa817acb7b239111e36a80d0b17102400c1894e896d7e1ee5dee8663c651813ce938b749fdb2f80a1b5d09fde101b1ba72c1ce56ca35bd3
+Entropy.4 = 7de89e0492545ceb3b6b1bce17996746747da2cd6e1480ae
+Nonce.4 = 353c23b65d82f445161f2ac0
+Output.4 = c7a6cc4ad4a983d548e09cafd45abcddd037f4dcd6835ab80f4af6922309eaeeae6f8ba5c7e0190806bf00ec749b5daf2fd2ee09e5f2095320bda0c1e26113153d207f5e5469a3979d2a7c0aa518db394643b42795799bf890d78414b1eaeb1c481f14035864a56f425d6bf38d6b67bb
+Entropy.5 = 2411daf4e0ef271c26d7bfe46e25277b13244be8bbcf9445
+Nonce.5 = 7fd5297678093b80876badcb
+Output.5 = 8cc0db0f68355fea00a6dc1361a3f9c44bb87f3ce288c35d0e5769b7890c0774ced8bf5cacfa7cc4b774f83d6465128c23adfef61974ebf8981d6b48587604f9ad8fa943ed52302cf6e83a9c7b34ba9433c00f8d779ffdcff133abc9438ea5fa3eb0bcf9a2cd8fe39f947352f94d5bac
+Entropy.6 = 99048602ebf1ddfdb73d95d0d8e212b04d7c4170e0b5d574
+Nonce.6 = b1dfe61f43696313b7411954
+Output.6 = fd3fb94bc19b82c15f4bb79768b5101be90b5c40813a3eb9e199b539b91df298749b7736eeafbf6000bf5ca1d65eb5cd642acaffd1e1315d8324b54a7c6fc6988108979ac1bb5646fed02f72fd4d3dde3a90a317fd853c771465110fc7049625f2ad9b54c0a04d78d0e584e74a7ade70
+Entropy.7 = d97b3e0a52771dad4581175a169a51a70ebe877e506781ac
+Nonce.7 = f31e0f4ae9109c1c128ddec7
+Output.7 = ebe9286c56e9323670c12510b912150ecd95f9f13ec5a1151df0fe060322144e81f68c24135dc0450d88cc370bbbb539437829da659622b27e1eb8645249518591182e126c8b1da02e511f59340eba10dab125569e56d51c41f61cd0e1c359dcd0aece6cde268b941a7681b1c78da57a
+Entropy.8 = 74d9e68b256193fd4abd18f6a3ed0c48558039a1a611320e
+Nonce.8 = 986fbf89ea3f65aa491bdff4
+Output.8 = 79a3ed8db4ae607601dbbe2690fb01e19aea95f30ce563d0cd39b9fd537f4c048b5136645cd43ed9e60d77b21203a70085bd8f6bd16ae33fefda796b11cad5173c0af42ec369eb9422a4453187871a0f5be7b381fca79d4aa05d50c0d59ebddbe7974ac6a387eb27f70ce4f679fa3ebf
+Entropy.9 = cdb221e409443cebc91f9ee083796595aaaccb0dce24da0e
+Nonce.9 = 925ebd02da9e4e3be1bcaa6d
+Output.9 = 826005339522db9c7c7399c390bbf4f6bbb5c552cad487b443a3ad1e5db3622a98ef61f712b03c5c5e975fd4979ed9fb6d057340855ceedd8d45a6468762d2726f313ea23a1dabf101bab8cbbc31eb67dfca58711aa16f07e553269c380266e04face8bea52dcc6f4c3b7f901df01bc8
+Entropy.10 = a961eebabb968499c010a92e71f0222119efcd4056961bea
+Nonce.10 = daac098a7a136c8a847a8e25
+Output.10 = 5584363551b2f93f31df0796d72449778e5e9b4f02eddfa06426d6857818d385343a553b55924ec848cabd6a1a6ce3b6bd1e0844e1b7d55d5b8e631cb24cdacaf7c2ee5452ad41ef419d08b53336783f93f108be30a0d9db24dfc7e5197adb2d53ee0537078bf946bea1b6174dcb06f4
+Entropy.11 = 2e66c4cabd72b8c2f8094370d7b118fc63fa9d24e9a40299
+Nonce.11 = 7342a6af50601e3fa9d20921
+Output.11 = a55517be119c37c3605d3b1aa4680abdb8698d9ceba46e66f702b204c21c8cc980ced84759dad161a3a84d130aeb4c37ab41ac83ee696a8ab3c9656c5e4f7ca51fc9830d3841d29e2f38cace9d22195242626a7b60ad89acc32b11aedd82eac3401e246361b61c05da5226645cd6592d
+Entropy.12 = ee960f5e2de2b565c4c7c4cd8b0aeff9bd0fa294ef2dd19d
+Nonce.12 = 6aaffa9d66fc3545752b167e
+Output.12 = bdd50169fd9a819f429fc7ad947394ee155cde628469df339fb479155e6b232aab084709aeede7564e1aa0cce6061760b1a3cb36730964d9060b970856009d0c6701fd61243e7c86f09000c2d91a9a429517737174fe99a9442967218bf8d9701bf4e37736ae467cffc343f0f2f5cae0
+Entropy.13 = 10aaabbcae9df8a6e9b45d93872e08d470a5b143fb349e60
+Nonce.13 = 2f2e4a64cc4ea0f25675c5d5
+Output.13 = 7bc574e9a6e0cf6271fd7fbf6f8878373763e4f925239339bfba8cdbcca600213ca667b6d75e8ffff84ef6963b3023b0fbee76d890af3ca4c552585219197faaf963d6007d23522d579d2e874ab1dc517c0c2092faad19e8e10f7c417adf02391c6da6e27be0f60af99d2e3b4e0904eb
+Entropy.14 = 08a325accfe119fa807a95e8cc2cd8ff041ccad8e2c4cf49
+Nonce.14 = c85baec1c2d1f3f189eecad5
+Output.14 = 2567712d6fd3b52364b508bb2e4ae18e34b155dbe99fef9acbe21346715d36c538dc380a5e5900e0ebde76c779006fabe2b3f171fa63fa0f5ba264748278549c9beb26db701c8fab7adfdf48eb63e48ca6f3be8f17131c5e9145f5dadb00fe666a651d2b1b9e785fd444b05d4efa8ccc
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 57ec3fe9533e71f46cb381364c7e7bb3be15c16b8a484a80
+Nonce.0 = 0588d36a9b96207b3c169500
+AdditionalInputA.0 = e557d72e18467da1256c35ff5f04ad049ace3a71b8149b55
+AdditionalInputB.0 = ff296d65a9733440c2970f2eb0f98b52500d5d87819200e4
+Output.0 = b8110a77cf2a6d5bff616f13d203c58b1c3fc982c2e6d1717cda266be36bfbddc4680e6881244a92b2a9eb2fedde45e70c8236b20ffc507c8b34e6b45147f85505f9237c23d5b6bd9ce2e69ef559fb0a42e26c42bbf64cdf4d8ae02b9e7e033abe49bde1a49f857565b1b65d66dc8bfe
+Entropy.1 = 3fff3ced5bbdd110846671b7c2bc239e9dbfd08a78906564
+Nonce.1 = d4009d747d5e191d91c710eb
+AdditionalInputA.1 = 4964ce869e7a9a0e8be86da8999313401308b979c2ca07c1
+AdditionalInputB.1 = a35e6c2fd6dcd49cef38f8023255822f82a825bf5d4cbdc2
+Output.1 = e4feda7a2d3a3bc9a63b16dd48ebef84503656a5a712312f8cd18484d89ffe2e2db35b6da23ffc6fdb885a37fb594d40a5952916d909caaf4baa422be7f604769d70d9134f09ac76666f90897e390882001f4a5dba98fd6e3c5d6ab4cf259be6380b11be2f64158650cd03d28c343f0f
+Entropy.2 = 546d1ddf61bae1b0d070dfdf14b9842296136b9905db5f7a
+Nonce.2 = 9b567c2c99647072a2f36f9f
+AdditionalInputA.2 = b47ea851859a5359a4016557d3e400b2989d31adead62642
+AdditionalInputB.2 = 5c7e7e774dc0bf68e5fa5e8961b1dbb88f48be925e29c524
+Output.2 = 63478e622e9ec86597f757a0453d0d79f3328dfff8606635afbd48d0930c44cbe067eeff10cfd56029236328685a7a3d96c8a84145a648719130239db0425f21845669b9cb1a114f3fc532e73818d0e832ce28c945c45d9dd7463b76696115c3afad89946e7bb6096d61c77ca2d0caf2
+Entropy.3 = 6bdae2c75a1b00bc5577054d425835f2104c57f73bef9c75
+Nonce.3 = 208ffc58c5562e8fedfc6405
+AdditionalInputA.3 = b9c029bd7716c56b1d15c34de531344b80467abf2a3ac1d7
+AdditionalInputB.3 = 8ddfad16dea80d45620f58b791b0e4efb6b06fa707103fdc
+Output.3 = e42b3c5de8bf00430e57948a515f59db11f534c5c680b9ac0c6a960c9c9a4b6c2ecd3dcf28bc5e421ae7c0dd00e5b917420d4960cc4dedadc2ba576bcd4626ce08439f747b7e192f167e3a814a59ebf78898c2e5fc2d8ae2618f0f36778a9793dd120130423f09e7a51ddffcd3ba7083
+Entropy.4 = a7050ed64ca3be6100c29d7412be192e2328bb4a428f9817
+Nonce.4 = 87f1be6e98a5fce717865a5a
+AdditionalInputA.4 = 62782544d2586a307e8a93815d3d0c0f37bc130fe6a617cf
+AdditionalInputB.4 = 4fae0a45436047f36bd6871873995e569f4f51f8bd78223d
+Output.4 = 837b99c913c8c876d251c81541254c5d9955c8df693a9a09ff485ec1c5edcc9eb58bec7fb70bf01ba15437d4fd6514fbdef0551bdc2862166231c349574094542145df5afb2394d46f089cb6971213322526339b7a9b82d2b42ed53f9415319a6255bf7c6a9f973fef0c598599cc0e4b
+Entropy.5 = 6cdf34bfa839e52c08ccfe7dc67e28b1b6a6eba76af69d1e
+Nonce.5 = 6881cac7d7bbe9d5e5cc506e
+AdditionalInputA.5 = 3a4e7355f1edda2ec1f04c20360720aa98e092c85d0d1497
+AdditionalInputB.5 = 7c669b1ac5529d08bdbe63420fb7b3c4f57b2c489a92562f
+Output.5 = 4dad4488f235c6f3764bbddfa9584ebf3a8f9532b32fa2cb7ad84a65aed9fef6883688e8d4a404e1b6e59053de30dd65c3b1afd12bda2e2c81a8cc18d13d927499e6e471b730ad366f1b135fd4d97cf8f2132f7b966233894cb6397a435e516ec2ae26829839c0ed5e58960cc13a886c
+Entropy.6 = faeb44374a731c82fb796f679c137d360e905978b4ced587
+Nonce.6 = 0167ca06d311d149d6ed2f30
+AdditionalInputA.6 = f8481def8df17524980aff55d653a1c221baf18206edbc70
+AdditionalInputB.6 = 16d5448307898425cb1014d6a14e641e25184ed2d2d3dd3b
+Output.6 = 7a942785235544df844c6c3033e28a0298d0e64709efb36d3d8e9d3da4b1997dde9cbc58f6f0463e3425836d301960096eb0fdf6ea523be33ba35cedf9851955eb337dc06ac2bc67939da433912262f10670fb75583d07e848d8ed7ad9509b40b88b4fab9b1a4a70858b62f9618d42d8
+Entropy.7 = 509d37f3cf2d564ca35083a8c823dd498f36de4858c9cc30
+Nonce.7 = 0921aa137edf66b88398788e
+AdditionalInputA.7 = 949d1399d8852a6ec8edfd205b5c8dd8b5560306b3299bdb
+AdditionalInputB.7 = 49c7c7774b4edd529d3012b25aec554c26f7247ef62b9f41
+Output.7 = 374fac9f78c78e0a9a00c9ef630aa725d7f4b663549ee32a91317a66762032e6bc2e65c8f121f9ddf85276d1205b4c0bdd3c9c672ae287127f15a5294905fc508f18eed03e2bb0a7deb87cf6def9e558ee83c909b348457582877098cec55f32f8996cb97a7cb477db51c48f75f93b2c
+Entropy.8 = f0233dab01ca210375e0691d710e278bc094e0da74e28a11
+Nonce.8 = 22a3e5f5cbbdc0f02fdde2dd
+AdditionalInputA.8 = f32e29e5416591ef1b0793d90931284733965d13c10604eb
+AdditionalInputB.8 = 1f319ecceb9da477a063f53415e477217af5426d2081e0a4
+Output.8 = ffb6abac49d5222c54f7445e7c2f96ded4a9b33ed082e6b4eb29098af75faeaec618c08ed4b1b8e9851707e5bd74d626aa0c7a473c6b225597fb986c0a84d1b4db05b2eff7574e7f8daf9165621408fc3c70ff143a1d30bfdfa6846a9430f46c8122fc61925bc4d3389203f8c9d49677
+Entropy.9 = 371141411acb60ce353a99001a34ef64ecd08d9c1a3d94fa
+Nonce.9 = 20e31c5f4642f3419aa6572a
+AdditionalInputA.9 = e7bf563c7481567cdf750b9594bec27a23d9ca1a2afaf121
+AdditionalInputB.9 = ef60f08d130484bed0259c3afa1ff13ff8560fa9209bbb55
+Output.9 = 670eac12513e54bfe7e972b98376e3f3af484e74ab9c8b254562b4d80ddccb749e429f13cd2d2f891c0da0d7ca82ca0c3e73e23f9c445b2243f0392690591e399f7a6ac93ef811122e0ef143ff712e518ff48b2ef10752e5c0351346f7eccf431de77f2da8024c03bec3e7ae2d6249ab
+Entropy.10 = 96e47d26fbe063fa5672e45d85beddfad1bc8400927595cf
+Nonce.10 = cee03bd6ccf68cb43339edc5
+AdditionalInputA.10 = ed1b0cf1cbcbb1db11325d0d2c42bb4cafacf52d48a90bb9
+AdditionalInputB.10 = 5eeaa3791e518ad39d49d6feda6ed8dc8b745b1dba128c25
+Output.10 = 0e9e53b9a3755455b75002797ae1715bbd593ed3b0aac423916da5048ab3766ca3274e715cc739e1d8dff93d3eb5eb41006b362528f38eed8d65ccbc48c13e4bbe8501d36cf89caec78f306442b4c84032fe2688dc453fa3a5fd5ee388495164694e5af82548d2f35c82e21509408faf
+Entropy.11 = 39089d3faf3c4f562ba15c8a87b533b792edfda4b70c35b3
+Nonce.11 = 6ca12a4ac1957a25bd2d72b1
+AdditionalInputA.11 = f1325d8cc54a4bd472e47a7f298d8f87b5d21522b733e85f
+AdditionalInputB.11 = cd3e29872c0ad0ca42e988a1e7b2dc1dcaa969de8a1e7612
+Output.11 = 18f69df6dcd8e5a13c55c779f78381e501a7a59e1add9cccefd95866ae464e441c16cc538a8519ae39373b476a90796c6fa0f31d9789a857c2c2db02e27197f28571aed511c97f2fed2871105c2ac76b7382c563caa78177f8b9ef481aa04773ae0705ee1f71bcba2c58db671f77acb6
+Entropy.12 = 29273551e60c507b97ee3321dffa92b05e47e282bcd47bd4
+Nonce.12 = 684db0cc7665a4f1f64168fb
+AdditionalInputA.12 = 878a46b06144e8a32afc3f31e8c5718cc6601504b5580053
+AdditionalInputB.12 = f7dfb4c5acfc5310a6c50e7f2ba088b71f1cdfba13331219
+Output.12 = 2a31df52695d478083c5dea78b0ae1bff652c751eba47a48cf921b54993d469b1a31d96abdc3d63907b4cce9b76ea6a5322b1e4bf6c10956cc104a950cb1991390374bb8c6e4eb4c370300a59138602768654c2f98f3419cc76c95253a1e4fea1b92a1a57806c492553f6d9344e16767
+Entropy.13 = a688e1931165bfa1a3abe9a05808770a5794eb418ca09127
+Nonce.13 = 8484f1229a5ddc11d3db57d6
+AdditionalInputA.13 = cd41c2ab3a6927b0e69f603769d76b42ba4ce0a5c91e989c
+AdditionalInputB.13 = 3505ebea09a6d420186202e06bfe1bebdd642cc7bf22234d
+Output.13 = d37da943810b389e6675179f960b1c1d6f59ea87f3f14568fe53ce0885e8ef34f3384fa840742a9164092dcfa719e0372f20c905694a15b97667e16c9bb88c66e3b94cd0b41e9010730a60d6eb48ef61e287e71128d7e05e22c4bd3480f861bef7221468638502a4ce26f2cf5a015ca1
+Entropy.14 = 2a9ed97cbbbc782ff8578faf135881d22ee08aea73b3d920
+Nonce.14 = 024d6781b3bd41c5f468876e
+AdditionalInputA.14 = ae701404440c584e27266a12318c1793b6a112d96e6a6749
+AdditionalInputB.14 = 53861747c9627e9244679d58e2dc8cfd8a72d1bab611dfd1
+Output.14 = 665481033912ca7d87caa56af2612338768b044953b02b9a50e0244bb805ca007648f71ccf923030e56baa13a88111fe211091a54744aa5d82abe97775878059dedc6272e7c7a5392d1fb443b770ee7f5dd05a3f2bba4cab1cf473d02648d4f8acce91ef167e3ac00c1c9324ca074486
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 9e7e20ab14485f3638d7c21057ba5014b64bc6b555c0c07f
+Nonce.0 = a5123d9e723137f2f735d16f
+PersonalisationString.0 = fab61ef10db3d14a61ee7c4923fd1dce1b0de0c74f3b1b5a
+Output.0 = 1d5adbf9a0dcbc7754b669d49c4b36ad5cdf12b8a1ed0854797d11636f9c901a4be0fb295c459cfc36293fabd40e90419b6908f41fbacc4d8569731f376c35d78634530827173dd7db7eccf616783576133d6019b869ebae4f21524092fffd9b0909dec7e49fa3e465d07ae5103f0892
+Entropy.1 = 48f5b0e478ef1381ba5736a31ee174450b4f8c5a7ba4ffc0
+Nonce.1 = b26b2667562dab396fb38979
+PersonalisationString.1 = 602dab661d8e8b90b39d12819f147360519a27aeddca9bd6
+Output.1 = 32b06226ba0ed1ac99b2717841f7a32f1f749eb89b8aa0314db53fb6ece27b7261d1d84e3b942b65cfec767e158bb5260720b4958e2dc632f6703578fae0d97d60c944b373d6070fd276a442063f91157951c7461f25e05e024bf44c0deb5feb34828b930437985e0f627ac5f4643db6
+Entropy.2 = 595a904e81b8f0e78a9af3cdea59c1e4f1e8d1828c04c3dc
+Nonce.2 = 7b5ac38c3aa063227adadfa0
+PersonalisationString.2 = e499452d048bb04eea2e19ea236e6c114e0684d886dba38f
+Output.2 = 4bf95e071060bf536a681beecc5caba6c8cf0eb71e7c9647eaa953a3ddc8ff3ab4f8d8d76cd119cf339c491e54e010c7825a74d7658a8ce1924e1f24ab60a354414aa7109a69aaa3a50dfe187f7f562e30e1dbf7c9de546094192615646885841d55199d0606d698fe4b7342704882fa
+Entropy.3 = bcf847f45abc8eff6f7a0e158e1d27a4663e06d1cdf4705a
+Nonce.3 = 6887396363601d522026b579
+PersonalisationString.3 = 7c86288e9f3fc1b6f7433f020e231ae7d88dc23bd4b1924c
+Output.3 = 696c8477989bcce357e6297a49ef021d5fa87add4b5eebabff8d5e9614c3be39dc432d0fb9168d7fe30c8aa6532c7499cbca5fb6de898ef785cb1ef1387d5e15cb07d699af4eb3bf4a2b70a300c625edc89e78e2539cbb4931df82cd5814ee2a2dd17829171d1b52ea850bdb79052be0
+Entropy.4 = 1b2b172021f45e443242a0f4be9843a94ddd558118373558
+Nonce.4 = a53e39d64c49013038ef6bd4
+PersonalisationString.4 = 94f9b7f659d945105e07882bfb1910fe37b524e22145177a
+Output.4 = 39c8a23b7fb65e08574eebc2a13a337bfab83fe86c4357cb8b70b542f20b6326bb9dda38f872e1ac12af4b69ba2192ca791b8bf0dce95789356ccea93ac1f8eb2a8a8016a76cb11e24054af33d3bbd873d6668c25386204d75efe45841865c6ebd8e659eb3fe7b35a2f530c21660e377
+Entropy.5 = 98974198980fb7aeb80c1236888aeff4f3dbf3077ec9721b
+Nonce.5 = b0bc98b7862d920714d45e0b
+PersonalisationString.5 = d42f9cae63146b60778af96bca786400e39922907d72750a
+Output.5 = 0ff30be6aa0ae9c5f88fd185775539ae3cc2f758e3e3ea8973421f1e80f326552308c3365a0c515ee402a70eeea86a9a6e1d0324e7af59c983ea0f55f74991aa86aad89faae5f4dff40e3ac5050d465323ad34586e9328dc6a8949c6d96d74ee1a266eb6f21593a43f7875289e6e6002
+Entropy.6 = 93f74a2657f77af265ff2bfe239dbf791b95c393741925d3
+Nonce.6 = fb6b25507a03dab25e16e90d
+PersonalisationString.6 = a7469a28f62717f55d37942a1b5b1e0b8826615946230e98
+Output.6 = 3263b77752e82b44c1d50c89587ba17d065b75ed74060d3b6c8a7da560abf9477a807c415f927b501b323e83534817f2908e468c1381de28003fe84840eb0c00d38e4508651113cd718128ed139e1d73392a8680e3c6bd48c1bdef53fce3c7caf869e80d451b1ecdf9376ea8af013618
+Entropy.7 = 3ab557b366e5db028976cb6a10b93fa1ecf15ed083035932
+Nonce.7 = f2a593ec45593a1c5f3df02f
+PersonalisationString.7 = b5ee3645bf2e69d19db24ceb4108bd1744581006d3cf40e3
+Output.7 = 0b54712d4cc97cf575141cec2da8f0f454ea1b1e2160991f433f976132f3022045bb6d9f1adcb693a72fe7c7a73463c7eaf805fc1782bac89593b9fe313d1bdc4b46531a385d5885206c3b45a663beb8cef069c1fe5748cb595a23f146e8eb964ae312a53ab0edc870585bee280c0bdc
+Entropy.8 = 5d37382677f0f018dfdfe2fe52ab8889fe66632ebef3b3a9
+Nonce.8 = 23ac3092d1d655aa549235b1
+PersonalisationString.8 = fc0287a70afa3b32f2976aebaa9180d2f75a0cba5d60bea1
+Output.8 = 50203b0d1790105742988c2d522c2aea0f214ea7838bfe74133f088673a443d861ab61286843ca8872827df9ee911feb6d1fefe207ef1207c469c8d782a1d8a3592feeeadc69e889db030ff56bb1dd867542aee785d00ef3052b846906d554be510db992400e58e8353b8343dc672eb9
+Entropy.9 = 08af5f91562cc16d21de2e752239c08968688e24b789f254
+Nonce.9 = 1c14e7e904d5d1a07a79f97a
+PersonalisationString.9 = ec3736f64db617371be06196aebcb684d3fa9ac6ce1354ca
+Output.9 = 7b78c3f9be80926f962d9fd68c53428a6de1472574691e88ccee58ac6c1de0bee933e701785fa97740cfa3e8ca305a2ff9ee08d8a496551336696e6cfdc9b1a543017461518401e5db39619d005626421d3b6b005c2cecbd36044e49388e5f8715341e60e9ffe241165519474f21664c
+Entropy.10 = 018714fb60f53fb1963cb015a48c34fa7dba0054292dd8bb
+Nonce.10 = 98a2df9ae9be1ee7d55263a9
+PersonalisationString.10 = acb8b85f7b2d82035d6394fd5aa55e4c75d0f801c4033e25
+Output.10 = a4e60d42cb81c787e51fc988e184fbade8f66253988823e9d48d9bb1ffb971e5fd4ed5dd2587d957303dfac5d7615160790d0345d9ff5654dbfe2d67a6477c210d27578eb66ccae918d6bc1898e00e943617acbe4c3e7d7513157a63d40684da25a6a53fbc0dc5765ff14f961728fa77
+Entropy.11 = 73faa419e45b495c279958ce1711f05dc0c08d2c2f4c4e9d
+Nonce.11 = b251cc83a727a5487d8538ed
+PersonalisationString.11 = 7896475d8edfa394f97b99dfa997353e4c5b3ae77b683288
+Output.11 = e4cbab42a9ceb0c61bd63ae1a5dbe79338a32a98874883acd69b9ce7f5360ee04f7fd18096dc4f03255b8f282ed648a4e6ede977fa648f658fd1f3f191d8e72022a65b14d7fd8ec98564117e98f123db1e9187a6d553dd576dea6ebc00401d8424fe3d0532f8178231e7ce3b6b9f668c
+Entropy.12 = 10176715b5690e976b4f24f2f2602a8ccc2be365c7627a7a
+Nonce.12 = 5f3c085a00995e66377decce
+PersonalisationString.12 = 737bd459570a832e5714024ab2bf23c82221aaeef17a67db
+Output.12 = 6ab86eb8b59124591708a327c621781003b5d02b1ffef62746be109dea8d14eb6fd19787eb10f00b4c49eb444596019a7298260b58f0d4cb7f78f2b38ce5ed5ed7c8fe434a9352e43d16e0fcb7de0a4bfebdf3ad178e692a87407c99e7615ee578cb48e8cfddeecd779e795640797ed3
+Entropy.13 = 38fe230e10f88c866e6a24da2dfb2b673c089e35e0121165
+Nonce.13 = f8c136acb3462ed183bd6160
+PersonalisationString.13 = 8cef1f8bc7a7fe65bc73497ae9cf14ce9b19aa89f0d7a21f
+Output.13 = f52a7ef834d1b1fee9ea9537aa9a8ce7ae1568501c03c865dcf1a9539bd90da4a0baa9696c27b55cf00a4012345bb86df73f6f735f50809261da19f737a2dfdf8f37d8cbc7fb1a37b4f07f47abd40c6c2941e1599875f3ccb73cb50d440b5ef8282bd7ea7accffe5ae23092e462c2664
+Entropy.14 = f7c0487018b79c81579d97ce58732c2be599c043bf8d5709
+Nonce.14 = e41f19a969494a2293ad0542
+PersonalisationString.14 = f67bda6553b5e4b89e309cb48a336b78460aff498846c2e9
+Output.14 = 44d544ac910b7668ba9c5524e388957520fdbf11383808a5a8008d119aff7e1e2bbe63b4cbff19455f20f3dc79ab0a83dcf0e403728f2a2b2a9f3b98930d9f285641da3b6b9a9467b2701ce1ecac82bad8214bb618c40999f5023dc2d97dc1a53a0296d44f6fc9d49db00959c89e9f5e
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 1bab3002107d7de482ddbd21bd1ce935167214236c92e43a
+Nonce.0 = 4a7b14930f5df7b3bdf07054
+PersonalisationString.0 = 4b1a3411df2fba9949d7b700f3eb75beb34262aafd674e9c
+AdditionalInputA.0 = 7f1eb4bd7ec9b4e59a0fc53a02a95170021b5776f7285d8c
+AdditionalInputB.0 = 6473fef885a0da4788045f51cd66abc76ee052f1dbe5a30b
+Output.0 = e0a42484d556ad6b20bb2dad3511e66aa2805af76174a70632ffbf6d52f157039dc678698ee72aecdbcfe4fede4fee9d60dc38c6ae8ec97966dc88051499cc3a9ed58bd18d61f7cc64c095a2b49a956625c507a04888fcc2e19ea2c285be0b821c3862914bd620193f5e26eb81e6f2ca
+Entropy.1 = 30eec7225472ef50584745c4d676b61200ee836795f017cc
+Nonce.1 = d761bf03df1cadd9bea7be70
+PersonalisationString.1 = 002a1e6b9b5ce9815f73e982394e59c950bbb24d206a6c24
+AdditionalInputA.1 = e7f188e48df3b5ca50b708b5c84719ab27b1581252fccf27
+AdditionalInputB.1 = f88d3d90d63cc742d910f99f5ecd667d6015b85bfe221eb0
+Output.1 = e15b37d524a96b80df3760f34292ecaf61058ef149e07f703da7149400aa6d99c782fc763bad6c49e30c6979d759f91440dba1caf411a691de73514919e9e6102a3dc766c470181b10c3d4345bc1325cca41aa784456f2fa78d5861c591b4adb749a6d97be96433aca16a0e603aa3530
+Entropy.2 = 72e7883fcfccfd62d3f2150fa08ee829c9c52356aec67541
+Nonce.2 = 001df146cf34d5e2e595a710
+PersonalisationString.2 = 865cfe82eb7c484811ff8ca0788689dd7bed895da4df4150
+AdditionalInputA.2 = 1e7ef4aedcba893a3a064427fd2510a2d959648997ce0834
+AdditionalInputB.2 = 940d31590fc49c73a386d8d0f3f1eb6c0eb2f27071982612
+Output.2 = 29125118f209ced4edce132adf6c303924751ece992e4d69fdea39f41e2ab70d8fac68c6d97dfc2a85a63bad2e224e1f2862533a69dd0991b322a8380be33a3bcad0b7e157d794922e107a8fde5951642b05f6872409aaf7c33647e0efd8d3e413247ea2e1814cb90802d244894a7d9c
+Entropy.3 = 61bd2985abde8125847f20bec4aa48a5db010dd7a30df85c
+Nonce.3 = e2e2f42a84a539be984d2943
+PersonalisationString.3 = 3028581d08ce2ece9f3aed84f39e74f91c6fcd255302e8bd
+AdditionalInputA.3 = 7166e72914bc5e7e604a4e0676efbda668053ecf17ee0c28
+AdditionalInputB.3 = f7ca28589b5a3d8c4b951858c252b9982bc7db1e2d0d7692
+Output.3 = ba9ab80afd33c4ff09192a41bad9bb631c3906e80516a291beb9ff3e094473a7f67cd3b24494c3b8a27b5418948802d091f591400ad95223fed1fe74ef0047b25da08a1a6a292213fd669a801f732cc1b3a3e37c948d12746e2efcec25eed880ad1284283d82b996da95907d137f63d5
+Entropy.4 = 63f006ddd4457b36ad98266c409843bc887909e91a08cbe4
+Nonce.4 = 78befcbb0f4b40c7f8e05e26
+PersonalisationString.4 = 9421617640fcbc98a0c3af2ccecc47f17a7a25d215404c0c
+AdditionalInputA.4 = 6690de079871e452b0faf6d4bc2b60ca0e94402a15d81407
+AdditionalInputB.4 = 910976d3fb6a72a9ba8e762ababca95f7e2dedc4722f1b2e
+Output.4 = 0c127ca482e866e0002de04b89dfa4da737758e2f86e59d8e38562515b366b8150c4c9aa760f7a990f498283a8376ea9864e1c12700748f3aa7db8a58ffc2968e4e3b6db7a30a0cfc400ea1fec45bb3ed47e63aa757b16bb3d83c51094847ecf9986b600f8f8e6c8f2d71c09bd8c0c5a
+Entropy.5 = 919ce30cee5673cd5e370193c82ef302042e6a086ce3e417
+Nonce.5 = 2c5a8c562f49ca60ea2b8a08
+PersonalisationString.5 = 2e40eefddaa7264bb7862ff29749b30dc08dd0a6dea87aef
+AdditionalInputA.5 = 5a291bfe3f658ffe92cea07cacb7da014d9a1abc6dee4f8f
+AdditionalInputB.5 = d1a0305d91ecb9e475ebdd79456c918cc42078b2ffc8d1a9
+Output.5 = ba9f67613f729a4c439f7f3d8ec243aa6a93f0d24a5193790aaafccb5884492e97c659c639fcb9c1645139b9ff59ccb5e6547d5ef6d0e9677a2783a4b92fa908393a899acb10140c127da125368f5d2d33db02da4f7853d893c0d796b9610b581244f8970493308dadd393b4dda24201
+Entropy.6 = 2e1812a26b9f528507703f924c4e90e0177d0b840d8d7895
+Nonce.6 = f5f4941005232e4e81a5924c
+PersonalisationString.6 = 982d33bebaa6dbcbe340fc9491900bf630db8623f5e9018c
+AdditionalInputA.6 = 726c5209a537bec66a88633821fa9ed20c1513343f138219
+AdditionalInputB.6 = 16708e9315e047dfba2a09cb6e470d427c30364a57f0adfe
+Output.6 = bd8085cab7335324cb5020fecdca1ae30959f9ceca2cc165591e699450cb28fa31130a3055658dff122f8b51c571eb5b32b9c6e3950ab93c9f8d25c83dd591e31dd73c3fa874abb6942c450d95b352214e480943ae6d51376b8fe08c9a6af0d231548085fd883a35a5c5ceb81a5068b9
+Entropy.7 = edf886248c36776c68f61ad1c503ea221cdfd5f5b46c0aae
+Nonce.7 = 86de752e8a66db374cf4dd21
+PersonalisationString.7 = b1ee07f1b27c5095020761e95b5797136b8e4007ea34289c
+AdditionalInputA.7 = c0e37683ffa869f741d7780d3b91f6581053a3f776abcb1a
+AdditionalInputB.7 = cc5c7eafd69ebb7f53b95a9c4898bda0a806e33fa7a8199c
+Output.7 = f8364516bd1caf2756d3fe58d28c63aa5fc938aa5c81cf5a391fc0534777b177bfc81234fda0f8c48329c8abbad50934d239774ef578af162a1ab8521a05fb946faa8d00c7d0aee59d20514bf0bf2f34a2e8bd8af00e41485cb980b93f3b23fd3ff369e73a9a7e8e5c51bd5ddfd6a3c9
+Entropy.8 = 1bb6659bb07dd8f917d116c7fd8f70b9690900478dbfaee6
+Nonce.8 = 6fe8a574a9c3b861cca7237e
+PersonalisationString.8 = feb686a43fab38860c78782b7af6d6f84a5c0605746858cd
+AdditionalInputA.8 = bc345708d16a151117e727245a77aa7876950fbbb93c191d
+AdditionalInputB.8 = aee40ac3ea5092a0e5175bd88394c8a7ecb918e2388fd392
+Output.8 = a2940c974731dc62f488da42e13d393b7245cc9b2421de67f1bd50cd369507f157095c6a93753771aee9a97963319ff00fbaeece28a18aac7e66f697957d37a74cdcdfdfa0c55900980224ae59486b3d14b9c5ef0c9932c78aeeccd883d4fb2b7287fc4220423f635b3455e6bcad9f82
+Entropy.9 = 19cd3546e81906f47be220bc0e61a4a3ee2649e2892ed9e9
+Nonce.9 = 0fc41524fdb61c7446c31d06
+PersonalisationString.9 = e4debd11929e7100f9717d07499b3d2b42294b4e1aec4615
+AdditionalInputA.9 = d18658bcfcddde258981445127414ada98f41c9a88cab369
+AdditionalInputB.9 = b88b9ad3d560d9ba8d46d1a75c1c7a1d5a849bd8b60e5864
+Output.9 = e2629e998c4abaa06414918ff0291704f7be337583e925bc157d109fd414ef1872bcb581946715d6fc5f8e7589075856cb14bd6e3fbf3f22655102d567e95011697912a1e64221db9bcc6ece8e4d3c835d56fe95246a499a96495ebf1f10f30261f50228cd7e0f7190de8bb8c25cc4fd
+Entropy.10 = 570832676dde2571c29d228aa10194b98fff4d22113ac6bd
+Nonce.10 = cb20bf3ead7dee58f872d72b
+PersonalisationString.10 = 0ff90aed77f3aef768f662a7f178502c797a1e84bf724144
+AdditionalInputA.10 = 0d33b4e282e686b1d3c892d5d5899909aa2b4332b76a57ed
+AdditionalInputB.10 = b499be360808a6651cf393389c6035a18e300d2caf80af63
+Output.10 = 5ef31ceee8f12bc07a2f121c52260b2686e79e4f617bb9a8569f672cf569c45680ad360bd49443cebbbe0bbac5ba9107e5056d62050a9c6f1000d0b1ba3c70e2379c276e11aae99d425c61330d7994812e6e3f242511de45715df5f41e92a2a4b9de3296b77e0e2f94ac06f81d59900f
+Entropy.11 = 420014f2d7fe3e8f0e18853aa883d5a3790ad462e8991041
+Nonce.11 = fb3c1a7dc0d5d5e466d79f47
+PersonalisationString.11 = c25b761a0368b5b157cb3de8717e7a49b548da3c286695b5
+AdditionalInputA.11 = 1cb26c9ee6a57408e1e97c44f7f5d7ad6df1fe72720e95e8
+AdditionalInputB.11 = 230df1b947f49a4af8d50b6476676863391c388d37ce8250
+Output.11 = ec50603a77e6dd71131eb84f1aa27d767344627ffb2fc372570cbba13b3dc5c9d1a4273ca27aeb58a685268da846b0e48cddecb48e52e659d6b30330cbf18cacd7e95ce9bdaeb95cf39b57fb7100bfbd56117e4c8525a62540c309a51b0d3ed407c4450baff058ff3bb482e17deb166c
+Entropy.12 = 0157720fd6d573a9da653b99af202f9f8e28e386aaa3044f
+Nonce.12 = 84c575d3bb195163f003d739
+PersonalisationString.12 = c9f419dd3684262d3746012a42419e3d3024dc78d3d2779b
+AdditionalInputA.12 = dafe211b9a53b7ea473c235e5dca0022d10d7afa6bab46fd
+AdditionalInputB.12 = 71366d7acec1b4d80ef81ba514ac572f897f45a0e729ae27
+Output.12 = cd9b74d1c8f1101e88621f9df4bf4d2b41d06db74af8bb221d1a5054cc296b3c2293301e32bd20db4697784129308d366f210adb46f451ab720ef729f140cc712d98e4c07e23f25fa4255f11f840037db870dde814d002f35a5232412370c28b28ea001428550d836ae0999676370eb7
+Entropy.13 = 4f9ff2ebf2a5493ab6bcc882d662108c4eb7e23ea2aa9bf3
+Nonce.13 = 3ecb528e7757a8dea6a69f49
+PersonalisationString.13 = e9806c7050d4eb3e23df8301598e848e5784b365e39ccc42
+AdditionalInputA.13 = d0c111ba31c992775d870796e9f7cdb1dc84cd8264f21467
+AdditionalInputB.13 = 5ce7aeddaff0fc56490cf5e167d6d5e936d1dd1f2691058a
+Output.13 = 2cac8f376d0e0bdc23f150a3d7970142eabf2a5096c3b2578946997ba66bcdaf9b5fe0d0b907d49ee86855a27c9c8c8ec0d5a630ae2b2f35ebd9f0031d497b3655da00494b93da98f82b43c4b8ba223060c577f27d488c48a496cdc5827c106d116a8d291a2462493ec45eafcc68b810
+Entropy.14 = 0d2514fc19a6be4bcb424115f4a4f7e0601b11042b535dad
+Nonce.14 = b84f6a9f408d87d6b932b127
+PersonalisationString.14 = 316764260e00d8e4b0a08969b0e9ed8478fc85e26f3b8e9c
+AdditionalInputA.14 = 6a7418d4ffc40e11859f33189d5a8327042ec268b004ade8
+AdditionalInputB.14 = 97beb8c47434a23efe536287d776edda7ed7cae84c0c7e35
+Output.14 = 1fe94acb5f5cb7e4a8edf5be61673bdc066288538dbd0ac29ce2d43f7b890028e48131e6b3a7cfbb42772b63f2fac8c0472418653ee2ebcdfa5ec08683e7d4a9cb2c67cf7e22c2ddc779c6d9971b29347e6688113294c902a5d62c1fc35595e091cb10e5a895d7c3697056659ae457d1
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 9c65020f706e8c75fbdd78ea563f84cfc6b9050dce27e4ba
+Nonce.0 = 9f1c43b205b36fe351b65c55
+Output.0 = 99f53667646f88b47df606644c02f1c61adec7c89d50258c4f8a918d06a8e1a043a23b083012ccc86b3939e05dd97a4540e4e3eb9f9dde191a3187455c8804dc80142d2567abc93f8db756d03d16683ef754caeff10f58665aaa9663e5b17b06ed8cb7338532380613908eba86b763e3
+Entropy.1 = 9d68decc71bd587f078feda4375446dd17615396a44f127a
+Nonce.1 = e67844f498d87e8bbb8f57a3
+Output.1 = e34545e29a6436b38bbb55d40f1570731816ce159c1154bbc9b872046e5a9035a7cd55f42c0cae7ff36388b8a25b0ce89daac4ecdb15dcf31b8ecaddf7cbf54a39916c829dd4ce9efe89d7e500d09fa31d641c01a6cb69da78d365f0b802ac1ecc4454d38caa02d4b42dfc8cabd75423
+Entropy.2 = 4c1b729c232d90a41634350b6bf66ccbb95658a325a53253
+Nonce.2 = 1e4763e6a25dcefa047031d2
+Output.2 = 61eb52fe649811b66dec63a356a3678e7cb207c36e58ad8ea8d91a58b94428f2d4e69ad49e24935da38efb2338070d8ac72b0cfb8ccf0add461b33ca9c5a9f6075fd06cd3aaa129c1983136c6a3cf220ae5db8cc6bba70b5092cc1cf8a679e01cc3fa76df54a96c36ffa684ca465515f
+Entropy.3 = a633333cc2827486dfe3a5d321f2f4b6b52661cac187c28a
+Nonce.3 = 1441e4d26478d9ecb0392802
+Output.3 = 0d5f4c53a2ad1422490b29479614d864cbc533b8bea9eb6517aff19754f4399c29b536c7f114e41f4c477fb366c19242da40116e6d690717ebad47afb7903ee83537fab189e0f866c12b2d3029528e89d67d557e16b79ef18faa946900a45b863e7de3e3b33f899fe4fc6881b72b6670
+Entropy.4 = 6109f13048e43c82a8808c4d946e6724619a25d7314bd6b9
+Nonce.4 = 492ab3e85d4fc964f97d53a3
+Output.4 = 2f9049109702d4a7e36396268a05531c43c2d129cb12096163d777d916a8c81c9495387e3d74d78e63e20670890bb47cf1ff08c760e2964a66ca22bde0ccf8c6cfed80f69a53ccb1cfdf7fc26d928cec7e6df29c9e96d71d9471e25290dc267247096ab90840566435655f793baeb0f2
+Entropy.5 = a7a8706c6aefd2ef52761c6e121b43e4819ee7a8e554b401
+Nonce.5 = 531f90167a768935c3ab9ee3
+Output.5 = 7c010a60a29fdce26bf05299ebec4237d0b003318e556f65283d00dfc95253d93d18da301d7546dcc89634c1eb7f68439aecf48d2bb43f38125cf8be191414861269df59066f2f6257b6df2e36c2dce63348a68c778bcbb62e8328d8383d0c3c197aabf858787462f737c34ce99abc43
+Entropy.6 = 7c240d7bd377145dcba9299c3f2566f0661c09a21ba7424c
+Nonce.6 = 48e79c69684578e3759d9020
+Output.6 = 2a9bd64b633a397cd0d5f3154fc049da73a2db8c58b46c26d8d7eccb0c92e2979e959ecfa6abb8c8a967f80b7c530e879f93933acf230bc056755324d9521453643b99b6f8d6403d65e75934bf905cc6b55d629237a3c12d8e8c3ba9c75e66773d1b755f6020ba0cef47964138bfe8f3
+Entropy.7 = a14bd07bb34467ff2e0bd383e8a0dc270c60b9306ad644cc
+Nonce.7 = e33f6bfc74044cf7c222cd40
+Output.7 = 61d7e0d36ec226d6e6873cf1e06fde37ea126b217decef90d4a33e4141e3647b09cd80845c3efc701df4f374f91b5aee0548534999903640fed0ae12c1101d1d999b0357c4ce2daac8f7632e6c3f176edd4b5a2fae1798efb488795bfd39b53a881b4b53768d123d05c159726242849a
+Entropy.8 = e727491d18e47a6a0729896d98355f62ca4a36ad73eba327
+Nonce.8 = 05f43e9a8a1eb0bcd450d51d
+Output.8 = 253429a4ea44ba84ca5985779956bf7763fc0b60c3c93d51fe9d514b9aac7a8ccb80f798dfbd0581650cd84d4c23c6367c9e5078fc7739f19b7e2c1850ce694e80df4a7c639d9167de53132905abdab64311571d437c3d985f794748bfa78ce5452c1714eae0c125efaecd8339eb71c1
+Entropy.9 = ac963e16bbb33458253e166033ed0bc4924899e1e4aee9f6
+Nonce.9 = fa04ef8bd29881239220c38e
+Output.9 = 8495d2df82bb3794ffc19e43dbd3097f181fbf4c5d801907b9c74a9be5f2b5ccc43aef7c137cc367a98bb58577c748c9780db7926af184db912c3fba177cfc64dd28dc22f1d423c1df3e92c5485a0d6883c828491766010201756a6f46184fc9bf65bf377710a483144ec82b83eab26b
+Entropy.10 = a822fac1fc504878de7d02eae642fc803df432dba16f7a27
+Nonce.10 = fe6bab4221b751687b3f8714
+Output.10 = 77de4777faa5fa60ec7aa8fc1803fe8e63adcbfd3edbe67325c6eea9f7e1ab0ae572562aa6a4707319c8d3324d6eb240545264258f6caa309778c44dccda298ae7a5cc973562696d7eb07a21a019631a839fff3e7b65f4ca6b1e4f336494d5f58cd738d7a2e515b9ca771d96301ec58a
+Entropy.11 = d5bda6bb1db8610502b3c38aff5f68758e0cae2bbf948014
+Nonce.11 = 388ca55b9b21b61edb225b13
+Output.11 = abf73fdbe8330272be77a28ebab485b9e32d368b38589b62bfd24e2b18b95eec681810de939b9c297a520c2938460083c86d3a63b86e1f2dc6f2b27e73c6825ca780b4d80d1d7b46aad53047ef73b325bf80aba04567320cebb9b69411d3d4858079cea3df45ad8ed77ac0ed4abf7fd5
+Entropy.12 = 8404ae2e83a8acf41b4bba86cc32400a2721f0de90150473
+Nonce.12 = 66dda22b74aa8abe9d70b62b
+Output.12 = 0edecc03b6368917de3877ab5478f8b52d211e9460ca8ccfd3c84d5f3764997fc15ddfe77452e7d1fcf3169215cc76a949d0a1487127604cfd7114330c7de19b958e0d70a4c2f1bb051a4afa444bbce831f9453399bb14ee241e58685af5d981f43d3d0b3e7d823d4771ba3bea93f82e
+Entropy.13 = f33d76bd0a5f52f3e8bcc23a3ee312dd2665ad2a5352fd7c
+Nonce.13 = 0b1a57561b83783b52efed0a
+Output.13 = 7faeffe318d1838a13fef2c6385a89b6a59095d9113fe70a49b83f89e4c87abd47e427185d6b2e6e58da388ef903fb932429dbf918190e3039f4e8a105e589a45f9f26a48db4caa13a7b8dec6c34351e08ed538353330256535daca6cb917988e7a3285100d5b4d3fc0681d9afe51a29
+Entropy.14 = a71c303bf17e128c8e0aa07fb61ccc1f40fdb487a955fd95
+Nonce.14 = d3ca16fb12ae4709d411e5c5
+Output.14 = 61a51fe1eca4cf947bbf2a77d643e7963ca2c587e0eacc8f7fab3b3f0e166197a4d15184cec4f0858de2773d8becb339bbb18ab2c10c8b246ca66dce48e2a0938fe1ab122b4930d603b937491ddd3d10abac731957f2e1e030eef33f7f311ed782b06697914145e266d0b967914d638a
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 938caabfdc9309495fcdfc44cbe9842767c0ee5f46008c8e
+Nonce.0 = 611843a74d8dc052379b5b7e
+AdditionalInputA.0 = 87b5ee416834f5ecef4c44e2f793c5d57fff283b7abe939c
+AdditionalInputB.0 = b12d12ae51eb9b13b6ed70b5ab2bb66b4e37e423d7656a91
+Output.0 = a67ed0ca435774a863d01e01d85a12d5bc5c0974f13a1435d06b1cc47af47039f36cbd19a0e34b441729c4190796ff70deba9d6f02c1c6972178584c7638e0004bfb2f76d70d9aa69cd34c6ac70a5b71fa2dcf9830e50aff7d30f828acc7736fe70528be85a8e38313504b0277cbedb6
+Entropy.1 = 5da96699db3f427d93a7ecc7071de112639b3c931cddc43d
+Nonce.1 = 7915faf89645da8c5767f564
+AdditionalInputA.1 = eb37fa58900ada7428d21b515be543c1f619ceb6bbe5d28b
+AdditionalInputB.1 = 82432e8cd090dba93d57986f1a02b20c8c11dbb51135566e
+Output.1 = db9235843239b85b7cf1e956022e4c2203b7e44070c72500866ac3d5c9e140c6aa0a397403207444adeb58cd0cbeac1abe815c858537c3f09a0305e0aac599818d70efb3e20068af159d902a1ce9f191b91bd5cfb532f718095fefd09701089d73e7aac3ecb58a5d1a0cf07396ed906b
+Entropy.2 = 8afff5cce17d445a3be8b01b9a32ac7b7f68db301785684d
+Nonce.2 = f766c18b867a77f5902d32ad
+AdditionalInputA.2 = fbef49b8d9eb99b7f1a70f8e5aabe341d9f0a8ef026eb1d0
+AdditionalInputB.2 = dd46cc6eb0bc8c9b26a895e8ec4d042db035d0f38cfd81c5
+Output.2 = 0a2680918a97591d11fdf5f4b268487696ecba630d52b13db834a4a15f9debe46dded68cb4056e8ebf31b334b8e22f8ddde4eeb23971c21144c929a5a3cfbf920f586eca7d3a0bcc6d889acd894da3a82f8ba5c93e2c5832bf6fe120eace55b8fd3a632e99dfe8286f8faabca2ddd362
+Entropy.3 = 69f89bae7ba220ce4611288a90b4aea5b0475715f1c757ad
+Nonce.3 = 19e4dd98f33b3e9e23d9b0ca
+AdditionalInputA.3 = d440c43db22b6c0dc8604379ade4e74f87b23ef40e7aef0f
+AdditionalInputB.3 = e7f81b34383d6c22d5a419695444177e11afbf7312c84f5b
+Output.3 = 8723b8252043c6556382257872461771c583f1874b74735207b4ced3ff66f9e12efec90693fcc6e50121dd0a5fca9ce490e2f5be6c61679d24db892b28cef2acb73f7e3d696fadbd02c87a476e4c10b46b7d5d5c8fcce53e1148f88da5cc47a5641478915296f62f05969f039e3289b0
+Entropy.4 = 47808d81119c7a2d2c299c50080d7dae57c599145553087d
+Nonce.4 = b1d1064765de807691be89c9
+AdditionalInputA.4 = bbcc725e6131b463e93d1b00d240b15c022da5c8d3395970
+AdditionalInputB.4 = 6479122c6ce7da9e736bc58f69b132140586d16b4ec9ac42
+Output.4 = 9c6ae442048ad9d8dc62c40840f7dd7db8d4ddd43ade18b9f6b0b83ae7bb3a6bbe8f5073a15e95298ae683a823fdcc466773e725d05c327ea334d96c9ea57a883b6e46356f6552a9c2d941d2af497d175f551b764fd5833de092c66e58cf2cca07879d768851abaf2df8ffb3995042b8
+Entropy.5 = aa5121e4b43e8dab0fcd714cf8bc8ff4fc99bf472f077478
+Nonce.5 = dc8bbbec75d23286dfe68162
+AdditionalInputA.5 = ad667b7251c0fcb2270d92df2853580d4e2f7e05adcb3add
+AdditionalInputB.5 = 3a9e35c51e134cee45aae7307bd9413e3c622d7750a58231
+Output.5 = ae2f72ff6a30cd9b823f618493b25e7eb9a0d986f0bf722e79c0a798d2edbe51fd30a1114788afb477a72d946eda35000bc918e8588b37d1a334398c57bcdf3000f7bc0aec42bac791e786a8926f64b6624d753216fdb9d5e6557083e221d3d777002c72236a9f732c119a76dfa422af
+Entropy.6 = db0f7af8b2ac81e74489eda4684c44b9fc64b8a93f6edfa2
+Nonce.6 = e6e00ce5bb343024a42da740
+AdditionalInputA.6 = 92468d0ff72e178452b3cb8dd41afe032193180b1fa32aea
+AdditionalInputB.6 = 350f5a101f6a739b987cbe87a7654e911094b8a76de05059
+Output.6 = a6dc5dfd703c5c82181d5f7c06ed42db88b0d91fa27cdc59632b9e44811e73ea0dae9cd3e2349278fb1023a97358e87da5a33fd1f5b63877a3c6482d1e24e59219261c7c35af6fad75fd7e19659b90e9aea18e30502bae9e3ba72b3b07dd58c12ea109de754e6ed4a4d84d9ee722d99e
+Entropy.7 = bfe94ae6fd97503cb9d25fee8a578f4c25ec69a2501c0e11
+Nonce.7 = c0db5a14ca6cd3311b11f0b8
+AdditionalInputA.7 = 54a43dadb1d9a4455a7c092822d53f8fe0aa66b722ca2a41
+AdditionalInputB.7 = a7f7cfb7580e8b88f8ba61f09e92c96e9a0280b7b5b4fbd6
+Output.7 = 4bd989753aaada62cdef8714eeaaa42eebac9b5bc5172868549541d50f1dfb37e04340cf9dc766915c600b6d9e6e96b8fd5696bc44642c1fb053c3ea2b43047cf3d97f3684431063d72a1d805f7b9f7f6f46ec2ad3acab9ba1c753b0eea9349140cb1c3a1df81be781c018706ddd87e0
+Entropy.8 = 3e8c1d5ba26f71b63de7517a78bdc74be1ba3d3e3dbbe1f0
+Nonce.8 = 4557d172729d217b15986c6e
+AdditionalInputA.8 = 1db74b668f64922d426b6d2f678368ac2c4d9f8702f1a82d
+AdditionalInputB.8 = 7e6b01dfeb46c2466633f0f80a4ed6c5ceb84eb421b49be2
+Output.8 = 78e4caa69663107a4e062561872ed5429e76b116b2952440d9e943f97fe26b607cc852d2834573cc64b306df19d1ff4e94e1ae3743dfa9194975a1edac840ed59f5897a0e244c48eea6f83ad6b2557ce9af8af866d010c6b414795b7fc520e2e20777aea7036cfed6255e30187c5752b
+Entropy.9 = cfcb605fb2bcdf037cbe0f882af18cd8af470b3e8207682f
+Nonce.9 = 3aef12e590829834b6557f34
+AdditionalInputA.9 = 20eea72865c3a32d903b2a763756adbffa1d42b1a61c91e7
+AdditionalInputB.9 = 9c1990f7f2176904d9ea99bf974dacd039fd8c25531e8c3a
+Output.9 = 1a1bc626c61f4f4c9a87342f590a2b9d1f09c16edb68202ac1986a11512dcf30b7be7af95373185e1d2561f75abb8c7926f76d00f8d66b59c11fa3ecbf7726c143a82079e55202799ddba02b2c7345f4c96c41dc785d5fc113ed7e50b38e86aeb63e586ed1f6d02ecb3c6348c91d6a26
+Entropy.10 = 47a8cfaea7ec9f0a2d674e34e7c643b61b45df907a2ff4eb
+Nonce.10 = 9a4da5f34cbfb9792dfdb636
+AdditionalInputA.10 = d504bd2d3ebef9e51d15e0f3993243099ca83e984ad5ac29
+AdditionalInputB.10 = d37523e672ac67b03e2da915675bda621755057fad998254
+Output.10 = 94784791d9a903d3a073f22cc5d148f2b04af03bcb1e9dec2a24703df9dcf8fdbb6cb954564320039b6b9222801c95965bd244faec947fef5358116cf3c1dd4638eebadfd50b3ef38ac4185bd9ab6ff3a51ac0b1c198c04c91582e42e413497ef8ec8741f2af7d1f86d54130ef67342d
+Entropy.11 = bf684f270948765b3a404ac189bfa3b1919ca6df8ce3f8f0
+Nonce.11 = 885d7169185c0c7a07f66496
+AdditionalInputA.11 = 50e9cafe7d7d6ed864afd568aa5d7de2d0db5f5a681f2e83
+AdditionalInputB.11 = 4b5ba83a92cd16ee0656663aacc93699a1002a4454119eef
+Output.11 = 84823c7a826106426e3b5e3ed356a2a1b95acec9179fae4988956ee2fbef3be9ddf3acbe0e72e091d31c115ece372f209ed6e26a5d85e5ea2fb1737612d5d24e7ae210eb90dd670b9f84129b6ab6a96e85191d6b71b5393d62aed703f02238ffd7da9e3e42aea388ac1dd1625be76d78
+Entropy.12 = 56d5f5e2ba0f288f8775432986f8969968ef6691de1838a1
+Nonce.12 = 96ad6dd5293404bba074e007
+AdditionalInputA.12 = f03afbeec8ada1aad046e28923f0ca7d83710bcc75c05512
+AdditionalInputB.12 = a96034cbcb0c93268cfbb83efff8683e50c5cc1cda357eee
+Output.12 = 5d0220dec7261725586627a1ef9e41956e57a158a2b9fb1189d5e402e3e11e32cba47409cfaa9c3cba943c3a1ce23b9885cfcbb55ca8e633d632c0229b967d02ec0adf4cc94754ffc130d55295471c17a416fde7a0136a579feebd1d01a85223e595db4ab50104e0426d816cdc6baf94
+Entropy.13 = 1c87802746f255241d8398f12acfdc09084b8998ed37831c
+Nonce.13 = 55ef213bd0399b008855e787
+AdditionalInputA.13 = 83d7f0a1666112ec78df40b5d349095d53e70333808dc8a1
+AdditionalInputB.13 = 721c9df9f5f61c1d0fa767f65f3276211e91f8214c5ec733
+Output.13 = cfc278e4bc12cc3ab515e00afc24c315adc3db92b7b74266ca1cf05d887a8c7ab8f068eaf6044d3e5ab7ffa341bd4f2b163c4691d51ac58163013b514262781277a5206090b8fb659481a6370767cf57d6535fc9954e936fe720de862baad11b6276955c75c5397502f281ec67a68fda
+Entropy.14 = 8a0fea72b780967d1d582bf62c2857b4d49d5063c4a40e7b
+Nonce.14 = 87f95440746ac4e00622b200
+AdditionalInputA.14 = e098f0e076a3f40fd970f5d221944f0040ef4a18d88dbe6c
+AdditionalInputB.14 = d7eb01dfd7c13fece92d35133c3be71efba145d7353c6d69
+Output.14 = f03074a219ef31d395451ebc8534e4f2cd2dbfebbd9257507979ecec79a5f76359f2d6b4653b31704ae5a49f884db91ac335ddc6d11768cac7850734e76734b63b71ff12f3f8d42cd404009e7f4b66bc0a639a9354ebd754c17f3cc65704e698d9bc0640919c386e96760f3c36d8789e
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = bf6003e9570026651e8cf7e8ac75b68291380303d65c7b23
+Nonce.0 = 7780ada8e5577a0fc81f8ead
+PersonalisationString.0 = 961c0e8f9723d8065452be8fa8a4f87cd7759110a5e97aad
+Output.0 = b2fa39f5c5527462831f0eeefd39bb9eb42966199addcdb3df94c1a7410e464efdfb06e057826e7f1b03bfde277ef84954a9ecfd5b83ff8a39b77a7ce2d98e257d2903732ae6605bb624923250c91926243354f134e006a43f653a80c0809f4d53828b9fc0113ac2265c1f1cbd6ec6fa
+Entropy.1 = 6d405a2430af83447de6bb4eb49d0f2a734320b6c8dc01d2
+Nonce.1 = 25fd9e8673e6a1660a2ed76a
+PersonalisationString.1 = cc5054d440c96bc2a367ed15e3a8cf0813ba92435ec682e1
+Output.1 = c4af166057f60236d28ac0ac707edaf0bc71b380146c8ac3e7ccb8739d78309e853bbb69e6b9b6fff954d292b79e6f7b0b2c7dec071c289819306a2097b3a12c637f8c5a46391485c92173d4c446d75d7a7e886a13cec8d8d0accc724f6962fc6759194f5b51ae978368c46232913de6
+Entropy.2 = fc56dbec9fe303db2046e838ebdb1a86dfd2e8ea2163433b
+Nonce.2 = cc8ced973c8d6dbd314de957
+PersonalisationString.2 = c23dfc21deae8c28e0ce302f0a40e835e0f6418e42f062ff
+Output.2 = 1e652571eab5c7fe644d492f594bbb65f2cec1cc709f59c914f8d5839292d71e3e9dbb7a30f7536097211a2db3d54bb4821cd6e19867cdd35d5022e1be5ff0baae0d3b29a640f0c4e3ec1fe8bb684ef042b5f2fd569054e4273ae5090345e1e919163a29a1a85540c25885ab7b86c060
+Entropy.3 = 13182a94147ae4d3003d849793c8565766b6e5983e7b4e24
+Nonce.3 = a46fe731649397ac3fde715e
+PersonalisationString.3 = b9ff01eddb2d0a4bbf93c7d39bbeee0eb2b819ceda280efc
+Output.3 = 47c31300337c2cd60fa6a335f8facc96a801c180ba6802188cd180b1d9f0240eaa6f93246ba07734475859c0d2cb480b17bdbed437ec1135bc0cf4440abbfac52d6e973a8f38eadfec8aab3e7828873e9bb9d98fda0daf7f20bf588f2fcd11b9cd5b35e63a8762f7719bb76e33d30b01
+Entropy.4 = 41a22ae37622c9e569165bf8e49f343f0aaddd1e95428ff2
+Nonce.4 = 03959dccb3997763b67a493b
+PersonalisationString.4 = bbd24c4ec6973f8bafb9480f387dcff2e0597409d3c52897
+Output.4 = 2a233dbffdca2341db0f8d3a34d9e4370d4e9ee329f4a12853eb0a1792369965f1e70500b02e4a3f92a9c4fe7df8ed7c94082c40db6fe098f7dca1e4a84e3c93fcdfb8f053ec20ea09f94805a51ba657bfde5364cc049caf8bbdfc20fc0a47ba4a753785adc3f91d262c03eb38f67cae
+Entropy.5 = e206413826911ca6f48a356f19f7f68c721a3bf61583bbb1
+Nonce.5 = 093b4311281b519f803ba9e4
+PersonalisationString.5 = d26a88780806f78f739ac7a7ed7d0c24bef62f4b72df63b0
+Output.5 = 4bd1a7832e7acfd81d413b2d1d6eba8bc20547d3a956b11231317a3d31cc062952023e7eb65410c1da56150befaea9846180a850ced118c01d251b1baa271aa695a420edb2d24bb96a0d7fdb75bd35aa384a36262ec139a9db6b46a5a770bfda54306341f0eebd693bba2f0f73761fe5
+Entropy.6 = ffe3b136da099d974145c3e1f287121c57bb3bac337b5000
+Nonce.6 = 630f2dcaae56d5f80bd98996
+PersonalisationString.6 = abc9a770e6f2c789270693ab1914e1a07eda7532c1bfbd3d
+Output.6 = 8ca7d3f48f15df2c2297a3624f193752f806fb44e0b8addd14cb83d7e68b4798b9a5c291f3c909e9fa2beb780da20213d2e0a5d86385ef268a6ae8614454e9ae53c23e20adb444336376fa2f512e169272cd8ab4b47999d6f9cac52c20464f2b433c9b92838bb71a45d1e676253911aa
+Entropy.7 = 0fa18417968db22fc28f3bb8a1c2ab94114b97164ca354a9
+Nonce.7 = 486bd6ba73fe4c9c160db841
+PersonalisationString.7 = 47b1f40ab253c3d8861b6e3ef53f4565a14021c00362ca08
+Output.7 = 18b1e0f40ce697f5a889b514eb6c2b2c2886d3c566c5ee90733e7105bad4f10a05a115c164112019f4d8413b218ac3cfa13b7adfb0bc629f440617678b0951613bb660068df8c74f416c6e329123ebc60f0d6971f03f0d932948f93d7cb42a2aca4644e712194b0723817c38757543b9
+Entropy.8 = fe57ec71c62d1915b4f0cc7fd55fbabe922b6ac434d16649
+Nonce.8 = 9085bcb0074fb874bd645063
+PersonalisationString.8 = c9519a97b7986f966f5da687d147b3bae7567fa87142aa1d
+Output.8 = 1b4a7a400a666f49a01394038fd1ac43efdb32fbbff5a3dbbbe9a100cb640f3eb72fd0f23d647972ce7aa6fc7a1beadbb0d2db154ee023ce4931b9fb3f9b7d10f6686482a0dc68899769e5ae6733972c3bda40fbe0cd009c671083b6a92aedd9727d8281f45926bcb1f5c35764ebd50f
+Entropy.9 = e3dd8f02b72c2ba4fd7c2975fce4f7fc8ec84eaf2afba222
+Nonce.9 = 10373bf894dd7ffd03824d3b
+PersonalisationString.9 = b9b6fdb5d5c9aa4b4d3df3049dfd4afc57161fbdae5b9db2
+Output.9 = 429c6f96b04987a320a5d176875df21ef0ecf76da2eb829f9dded0ae8ec50964237e0beabcd25f6d79dada7925c3108efe1b800170504083dea192b2b67754c5dd8ab3cd4a8f7597fa49795d6568a2e935d4a7e823c9bfbc7f8a72fa7304dab208885a7b0932ff4fe1c7a9e5b1934c93
+Entropy.10 = dfc61f3477fd2877399d37785a63e16b2eb111b38cc2dfd3
+Nonce.10 = d67ea41ab522165d1b07563e
+PersonalisationString.10 = f72b1f8b77f1a6c6e9268920cde5b2c8136c5e6b7233fb36
+Output.10 = a671c514bfca26220cfc979fb13e05b4a59007d2bc96d3626afa46f68b443f003672a557de10fca5dfdedff67f1e9a3f4cf0957d8d2f6c1274854b4c54822ac4b94606a175dce53decc5702c94d4bbb35c7175dc28cc0a0ca8278b9abd8b056ead8af721e4a20492e40706ee71e7b497
+Entropy.11 = b97a5b9989f450dcf32018d7a1441de61612fc6462ea0b6b
+Nonce.11 = 1966ef1b54cfad93852dc7e3
+PersonalisationString.11 = b64c98d70757172f168eb76bb2868409442ea80404a50a89
+Output.11 = 4dade80f03040c7c89e5ca7d8c601de677bee101376e6a7978c31f88623aa8bb5c7084318c23e38be77e747b8b328da520bd5f1a3b2626d71e2963f59691ac448c507cb9ab4acaa3c4e52628f6c9fb0bab576a615fb0af942ec32a50de682fedbb60fb5f1d1a00ac018be7d1c4647dcd
+Entropy.12 = f4bd151844b44bc43d10133fc27ce1cac4f5c3cb71ec16f1
+Nonce.12 = 16035452d515d67fc4115673
+PersonalisationString.12 = ed9707c88d5900915e278cc673ae1d4a0c5b62049150437e
+Output.12 = 1f6c2ba5223668f4e01da36b763f9cb633798ca06891f37a6c42f2a70b2cdb32c5d96b46a9f8e29ab132d90e3ba7f63849ae513b063778fd92f936838faef6bb66d78f13ede5a4c46476f71b0766b2127f64351e5949b40b47953b06430dafddc9fa838d2bf9f90653b975497f609107
+Entropy.13 = 79c9e1064e67d917ea72eaeef13d7a98318d948f8fe06d45
+Nonce.13 = 6af7a5efbda335d0276bd740
+PersonalisationString.13 = eb08a942b8a0a278dac3e3f0cb0b1a1829157dd9cbd093b4
+Output.13 = 98c0c192010ae52d41b0fa86dd5e77029200491eb876976b9f72b860e17646365b2a31894f44daace5ecc70ed85a892b6792f458687dbd72eb5a6d1a8daefe73f4f4e0743e41bd8eb26f7cd8c2888f636a77a38ecb243e89cbe3deefb76d0b10ce266e68fc6b6548323f3394c13d4550
+Entropy.14 = bc74e505f0d4db45bf15edd7950b4a54bbf99ae04e8c4e04
+Nonce.14 = 838d1c69d8408cf0134f54e1
+PersonalisationString.14 = f08a964b386eeadc4bbe57164d3b3a0c7c0068c49c9bc5ad
+Output.14 = d8af077476875fca2ef9f04013976c3c278d30592361b923bab2f7e3c8af4affac5408c390b4989da254eeb97ccdabf32f5e246739d0e532a6ea317e7dda02bae5051ca97a445f5e0696a041e5f9f2c077b26e575d749cae344859864aa00f262c1c41b2964b78f72f9cb98abce103f9
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 0e8efb12bd55fc07c34ef9682ff8a804c3d454dede06f249
+Nonce.0 = 8f3a9b2dd9627c09f761a8ac
+PersonalisationString.0 = 2cb8fb48d1da52810db7f1b771f2399fe4c8bdbfadac49d0
+AdditionalInputA.0 = c72e717b30c6954227576e99685b38e7562c4b1107e6028c
+AdditionalInputB.0 = d3e1dde19a4cfd7bbcccc1b323153dca4b59208161ac1518
+Output.0 = 2952cf5b4ec9f46691a855575edcf629f6a0f8138b8d4a1f62d3229e1c852b7e7e8815377c16b582a27406701e3f5395acf0bcaf7dedf161efe853ed6856dff173fac149d2cc783dc1ae77781103f1c9656e3a6adf3cffbc1185c9b943f5baea907e41d3c8bf64cc8f15b22ba96d59c4
+Entropy.1 = bef4134cfe6e952ef4954f0b43779c27731aa7ee1fc472d8
+Nonce.1 = 9fb0510d794281d606324ed1
+PersonalisationString.1 = 70b141ce833db247d2fcbfb1ef84c9f7c77e80124491697e
+AdditionalInputA.1 = efb3d5af5bfb4908c39fede9cd3463502bb4831357aa9007
+AdditionalInputB.1 = f7b2fe8f57f076d95678dea798c412db611a2a0f459ec15d
+Output.1 = 49be64e83a506b8cc3f0d801fd7c7a502d63090a8087ac471e7af1a7b31e78a0caa014b0e4899ecd83fa12022661f19c1fb17884c25a1d3681c921a465dea99bd48990fba31b42c75794f3f4535c1f6aa3bfb97bc1fa195fb024067d7b34fef241629b58fac1bb5c05de4dcea8e79b20
+Entropy.2 = b2e3d9a234e65876dfd1e945307c5c13dba9a23bb5a778c5
+Nonce.2 = d984c7113a3a7ee0690fc4bf
+PersonalisationString.2 = fa9332ce5fb875c8e9f773276a04c1ee56bc0d5b0efe4aff
+AdditionalInputA.2 = af1e9b36e7f93f35a10c18d5176f81c96227eb9ee362803b
+AdditionalInputB.2 = df5e1f0268abcde9da54d855a6e9f50e6f44c8731cb48043
+Output.2 = d51d635f45051a842e6fd418c01ef3c7b7363e63f84dcd0676b19dbd60df2ee0420bd82e59a6714302198ba9ea08c9f0f3de3ccf5f8a20cab378a772d082d4b94d21ffb695c7df6056ce8dafef38d4a0a33aa2af47feb73b704fc6df4df42bff4042c80615785a74df9088b25c60bc12
+Entropy.3 = 274000a2ca67257e92f123f669e505437e2a391bd828e151
+Nonce.3 = bd5abdff6e5d8c3345ce2325
+PersonalisationString.3 = 9dcad23fe569e5b75fa485eccba734fdbc00f874e1fbfbc7
+AdditionalInputA.3 = 1558e022437bd96a04496c937b662b262cf8ec03ee7cb11e
+AdditionalInputB.3 = 044928a106985ee2223c3df9d7df2a67813bde19906c59c5
+Output.3 = ead500db29ebf8d9432f9f53d8ea4def1dd92b79b296251b0385abe653070ac95a4db9768fe34a5226785b51148942325b76c1e4017dc0921e11fb548279e69840ea6d01e5de078ed23569b67f8e1f3165ceb173328ab9fb7b7a9f3245c6c07c640605972b281036f3749c885432feaa
+Entropy.4 = b3aae8e63a9bf9e766e36f351c82f095433d94216ff3db33
+Nonce.4 = 6b91c9dda6ff6996ebb8eb65
+PersonalisationString.4 = 9957de3dfcd3e00f5c376083011aecc97600d78e4354752e
+AdditionalInputA.4 = 02373d44d4d8ccf12139b869778344ff1048ff9dfc5a7530
+AdditionalInputB.4 = d996a59e3b203bbc0f97bf3a5abe22b442dc5e21b2ada571
+Output.4 = 9866105bec3087104d36e345514a19d857b15299d352c48075113b34b73823362c5ef47bb93e7fba2930b61ccbe9d73f0f5b284b9bc8b272aaad4229d9dc1ec4ef17f6d6bc428bf7053b4faa5a388f095b82e5bbfabf4ca8bdfbca725f384af8a78d2fc00527c5604fea07d990cd0d00
+Entropy.5 = 56909e95490f7d0d2c1b24c97006f05c9607d8111df52682
+Nonce.5 = 7aa9e95304def7b9224d315a
+PersonalisationString.5 = ffac409a9f1663710d1a042e9264df312c68d347d2eac97d
+AdditionalInputA.5 = 2a28e7d1755646737f5a3d3e22d2b34e9d2964c8913d3afd
+AdditionalInputB.5 = 9108ad8bbbb814d9196143185563f2684fbe84c1120eafcb
+Output.5 = 5b89b41311a53d8b7871f4905308f34a63df857230069bac66c5876d5efeab50854a0f5b94410aa187d2d34c2068add565721e1d1e2b22a43b23c8c2a2d7f2504c66f45a51600729b4dd639b93c2f55d67158cbee93483add30cacfe634a9f307663485c69f98f221dd0a28d144eea0d
+Entropy.6 = a3d5e7563a9c087250dba95c13e3dd5555b1671212ae4a48
+Nonce.6 = af8c7de0e94721f98ccca348
+PersonalisationString.6 = ed18f2b927d3dc023d1fba05ac6038869bc8eac0c0c5ae4e
+AdditionalInputA.6 = 7717361e23ee3e154a49627db0f13eccebccfb25774da9a0
+AdditionalInputB.6 = 107af893df1fd36bead4f53ef69f0d7e17263eee8aaa0923
+Output.6 = dd945e4f0179cc65ab7d841f61b122cde1df3651f405ccabab7162b66ad4a4855aefb267092c4989eb3d38c93042808710f1976b66131537018d42fd2609735e187d1c75b98765859f8ace0ae21ec198d2390826e5e9a36a03b2edb270705a44cf7d32435d2bd430ff6e34bf4b8af9cc
+Entropy.7 = cdb1376cb00d50572fbedbd45296743064ab739053ad9434
+Nonce.7 = cce908f55c50c4e05adb622b
+PersonalisationString.7 = 0b8e5b5496e99bc1ced351cc235b02f766182c24902e92cf
+AdditionalInputA.7 = c72f68725a3be4b3533b6de78c138365a82b6a24deb0d1d1
+AdditionalInputB.7 = a47d05afd1feb32bdebd4e6abb9c61d14db53d42cf9575d5
+Output.7 = f92d14de4be09f5a865ec4337015b36043f3286c92ed27c4f61ddcd9ffb8efb109b01637fc65ab13bd9ed9d70a0f737f44dfb6f9dbc8ab4bcc001341b238d65137d4498c2ffee062ad166f95e4e61f4b14643e6e1a41883c9811d21a32b795a8508f09a7653b4b00d430db03446f3b74
+Entropy.8 = 577eb580f7fb24351328950558d36510226f9228fe1e9ba6
+Nonce.8 = 2b7a15b342e96edb2b30076a
+PersonalisationString.8 = 072a22f1622a275bb47b4c67cea53ec0ac04ad464df7a3dc
+AdditionalInputA.8 = cad80dd8af88defe6568559c42d74e0f36fe003de9e0c8b7
+AdditionalInputB.8 = 15fbb51b940ff28cdd201ecde47141cdd2d939e0f03224c5
+Output.8 = d3c3616942892257cd8f55d56abfa6cdbc3db4c23739865bf696f626d5feb6ae5d255fe1301396c02b493243a3c366ddafe8207997b281e74de2dad91601893c56817f3a6f6a77908b2ac61a868ad035b5e6d54e10972713a8789f4878d0c6a1ce5a154f30c88d48f3cf52ad352d4c32
+Entropy.9 = cfdc5653ab06d78239fb6cec4e60c3241f980cb7b95fe05f
+Nonce.9 = 0613b0d3745613752a0119ab
+PersonalisationString.9 = 257de719c9b27931d39da3b95cf4480a1d84773ee77d0ed8
+AdditionalInputA.9 = 97733b171ab2b6f11e87d26048c7a8b9739df361a4885807
+AdditionalInputB.9 = 2f77f09c6a301e5b0b044fa7cfcaf63e907299199071146a
+Output.9 = d4aed48bab03c936eed8d08e50bca8e0762784dc930bdabb93e8c8191eeee4c5685e059db66b4a654e4cabf69a1e436e7436f608efe938a26164ecde7eb3196491315414edbf91aa036ab1db8a34f4ecd8654e5b327a68b55ddb9d3e74b340d0058b1fed8a2f55e24724d9360bf92502
+Entropy.10 = 800beb831b1e3ee733ac369238244cdd6062e5d1a5e2d29d
+Nonce.10 = 346ac541842a8103b9015980
+PersonalisationString.10 = 50a04b367e96822ea2f57d3487c73fc77de775e7aa7fb438
+AdditionalInputA.10 = ece3847b1e906aeb3d803c094b185f39fac052e31fd6f8ac
+AdditionalInputB.10 = 605cf7b158fa8655c81990c7a9acee96644c762191026953
+Output.10 = 76efa82867c3c7e7d6a9cfe08223b60f48dbea8410bb0ac6126f834759397de473d5644e409b26e05cad49cf0a4dac01da5150f746f2a85e899fc575f408e8ac6c9885c5ac6942da805b1738d4fb59ffd54f4da6b07068c07b2113eae2f64bc5c735a0b5298982e7e658a38c191fb3d5
+Entropy.11 = 246373f4e0f1e7c8e6ced8fccc86e83124f156bf7dee64c1
+Nonce.11 = 4ca6d0f9d5dcb88ac8f4a10f
+PersonalisationString.11 = 0b718f380c2802ff9276d3b89a7e0cde41d66eda99ddebad
+AdditionalInputA.11 = b5b3889a2987040c4013bde5bf3ba82060d32e6cb24e16fd
+AdditionalInputB.11 = 2dd07ade930289fb29486362f1a906d2630a27d126402af6
+Output.11 = 2faeeb7669909f31316712364b143cdf8bc96c4738e98a364116e84772c54b438a3eab37aa427ddc3d39411610294f4343c13442ebb6c4971207451f0f716af1ec592e5392cb8a6b0f7514bc11b1497ede1372d85ea3a72f18014d7dddc96d741a807ad8881173503207f7c5682d73dc
+Entropy.12 = 4464f4ab7210871eaf00e6b8928654d1f5b6edef2a6a33da
+Nonce.12 = 46fd0422d575d125b72aed67
+PersonalisationString.12 = 184d12502fbe8d37c43cdcb35152e3b3c37e9054dc1d3585
+AdditionalInputA.12 = 7ab983c20f1d8a6b004dc58f0f48af590dbb08832bb7bb10
+AdditionalInputB.12 = d07a2a1fec3b82462fc1460f064bacf5922e2ef0c4ed76ea
+Output.12 = e2afd0ac3774eb85cdfbbe4c98b8f18999b868a8faa24265ef28126f59a1cce496ba0747bb316290796d301bb6665e56beeb5c13c9965190bfe660e41ff9dc89a8ee2a6b0ea3067de1c5e091ffd75037566bf7848ba6e69479519b3e987a4adc2da8372e2f7153e6f0b622791f585645
+Entropy.13 = 5213a1f2263a3e9530acb8f5b9bacd4ac96951fc397005bb
+Nonce.13 = 03d1901dfdb49f92b6baa118
+PersonalisationString.13 = 3c736791ea6d1bc5d848029512053c20ef7dadc20e0ee70c
+AdditionalInputA.13 = e951c13d3dccb9559921cd205928ff68fc06d1eb59de1971
+AdditionalInputB.13 = e7007c806db5d1f31fde06715e46f27816df74a2022830d7
+Output.13 = 4f259149fe3d999daa93ceec96b789c765396075a1f82eaa9b8a33b5518cc746b346ab6ce488f97051349a2d6d1135f93cf4074d0f19216bd6ada4338f3fa20bc52dfe8c7749a93b38018894473c7236beb036a63c6f307999a106557c76d6f258ec2f9dda5789a69828b5d658806884
+Entropy.14 = f04bd923480d383ede25ae2d72687980cad91d008ce30e59
+Nonce.14 = ad9b67d7d3d71583bad67abd
+PersonalisationString.14 = 80326f5777366dce4f91f54cdcb6abc4d676174fc2a0e0ef
+AdditionalInputA.14 = fa0823db6808a3de1a7dcc081c01cca840f68b005d473bfe
+AdditionalInputB.14 = d3054fa2bdec7c63dc009ecccf25c1116380ac25f82a9085
+Output.14 = 556e90c95c1abcdde027fb2b88cf191f0686830ecf3fbf89de51c9bd735726131472a17f307263d57c03bd5ecd9ceba6cd5759b06594bf901418e2421fcef4b72678614079cdf4d25fa0b74985380552d2bbf478290445066e3f4a40a2e2b0792a685b769ffdb27721b1faa484e9c783
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 4359f7e431da8a2d30c6e0a53fc233d09b5f2aeb010f91b1
+Nonce.0 = ef430d7678c1a5efd64a1473
+Output.0 = a45f79ea40f5032fa17fc43bbe41eeeb44067e389771ec66e5491d0aba88f28d1ecf415b852296f53f18c1ebbebb03c5e5a69421bc1aac4afe90b7a7978111c41bc80c12152b641d5482e4feec1b751ae781055cec4e28e675a44984f9799be3499e28877db87c127ddd388b80fb044c
+Entropy.1 = a9858542925dc08bcb69d3e114191483dd93428b761fdb64
+Nonce.1 = f6a387906d68ae5116ef345e
+Output.1 = a9b88c7af4e02648956e3ad8ce26c67a7157436134686b4124b0fad82d08a29eaa90dff650255a0cb7a2f228151d01e1c9ec46c5528980f51695f35bcaa249bd9992ffeee5523d062201d5eec73602290fe883ad629d4b5df6acbcc9b5075b2025a07a782de9c0b3a1b04c6bef8070f1
+Entropy.2 = 144e6b7499db6fd3aaddd9d373c8154ffd2c0755762070db
+Nonce.2 = bab79a27bab306e2d23ebf95
+Output.2 = f6253496835bb5af6488b00987c332296b2ae545d3e528b4680a020a705c12e5ba02264d0aeca53dcd575baa35eb56ed8a0f04a2b48ed5339072c7b37acc0568e59cf03c5dea832a96a980eb3a1519121545c8d089ea0cc91cf17f1bf97f0970b57402f7e01b4f6dc1409c9a0155a048
+Entropy.3 = f576df3cd49a7fb3ebc99caa21d022d0472bdad51d54b0ea
+Nonce.3 = 5fb61a2c347bb89d74ac36d2
+Output.3 = 8face2b28607b247f82107dd616ecd23a51cffa2a2800207dd60da0d5e1e793b39e438a284690578a911bd42a33fdc4f25ff47dd93dcca05a8e5d5ab9c07dbca211dd0f4dac999223233e5d7aac490282dcd981012aa8228c14417ef5cdff331e47c3714a930b6224e024e5aaefc195b
+Entropy.4 = 194639e5abdb1af8fb1c69a58a8b9082706a1994f5e7692f
+Nonce.4 = fbcfa94a79ffbee32237fd48
+Output.4 = e5fdf2167e86ca9c25acd3e23815ee202241f1e848538c9dd271a2b4ddc958e2d32aeaed437fb9623504874676b35d242edf2f1afbcd29544dde8238bc611127b234ff6dedf7138f19a214d3d9f3a42738737e71e6afd0d06ca8752d91ee6a41940edc2ab14764a32e00ceea20a6996e
+Entropy.5 = 80dec8a6b5f61419ecd68ad8f85d6541983e661c876babad
+Nonce.5 = 5d36cc4fc35f703228585159
+Output.5 = d5768005ce952b9a92bde19a65665f672353b3f1ad9fccdc0504a421e7c7d6339e562f6419d1ff8ce08042866bcd1e482b83df49a6db756aa1a2b00557275540e910a7aadb70db4a570c8cefde394a712adfb292c93907fededc26540cedc10d75516f8232722457e56af1ba1b15cea3
+Entropy.6 = 105406056b36b6aef7ead09062234afd92ed1bc0a193dbb8
+Nonce.6 = d11bfb602b2a0ad2c084ffe8
+Output.6 = 2633b64c11e6a22a8aefd5156397c9fcf55fe3e29e3bb972d20f25c9232fd6261ba029260608a820b23e5df227fdf1b8f2c6246cf510e60ddb18d5ba52a510dba8c65f98c6dc6f42043fc8e8364237480a9a7ae3b0eddc23648297a6842e9c1f7c4d7ae69f7623dcf76a96c5b9531eaa
+Entropy.7 = 752371b36fbab5be9e34310c523af45c7dc3942129a0e975
+Nonce.7 = 0e89683eb12924f48863acb0
+Output.7 = 42a537d7d66a4ab65ec60f937c763d038d7a27b74219379ce12c2896dfc62903ea6bfb3e22bcc90004a7cca83dab8dae1c643c87f3fd4829e2236f4e1df25a71caf4baea73417d9ed0de7e52b13b3c4b8dd200a95c8ad77b4855796f67f5e5928a729657878900dcd85fa0c168a4bd07
+Entropy.8 = 78b2e69e1b9df3bbd9e91c5c1637ec8d4f8ff397a2eeca25
+Nonce.8 = 45b7fe4f558c74e873517a4d
+Output.8 = f8d8e42a247f040b9e68a91efcac3fa2bdb0a3f800bc4bb2dd3dba7c30256722b8f4b809b4d7a8aa0fa3a594e2c6731eee1d3f3c2b08f2e85cab116a13d2691a88cd6541492014cc07955c5f8a587e4653ca1b46f9c55a9a1cd3f64d1a84798872cbab3d410d076108cd44f2f059af35
+Entropy.9 = 716b62ac333a62e01309364e1fd997c0330d5b7cbd98573b
+Nonce.9 = f4c50be56f2ae092fdd4037e
+Output.9 = 4275d4cf2fc6a66d287a6dcac96c37f200e772a124e6e60ffe1c24d830e574950e3b8157d824ad2b574975df2b78503326a7b924597def7ed4b6aeb64bf1a6af7cee3b5eebc3ef5ba496a676724201fe818a4320bf97ca48dd8caa63909b66eb7f51dc793f613f107037567143d1cf55
+Entropy.10 = 1125b7287f4b0faeda7d738d5ebada5aae877cf81f752286
+Nonce.10 = 22f0897a5bc208af54221e85
+Output.10 = c028912701d511c09541b222c49b7d86266af6a809848b6603a4e93d199f1ab610c2a674fbcb7e1d9beec910fffa82195f999a201f4d27bc3a30918ea155b7bfea4046d5227ea216a431ec2c5abcb99469e825495da6347de11d6c479928e456d4c23c367b6c2cfd848d540c8a0819a9
+Entropy.11 = fc78fd63632c2fb6ce6b2324d99e11e6cf83a33b6e88ac9e
+Nonce.11 = 2165a244df8d1a3bb1d94e8b
+Output.11 = b7949cf6c67964fff1487a06168422e87b755e0385a68bd862089f59d76b0681b920389c5a9dfcc41bc95524fa5e040ec24f0b817c2830c111d233bfd3013ee09d3e54c10271399dd8f42eceadee0058abd26aed92ab9755e8bbc3eaf93998a7ab163cd607921f220c232ed32bbd78c4
+Entropy.12 = 91c1b3ef048b9427d6bc49af4333721882f36febfca0bb00
+Nonce.12 = b58377ace58be8dda71b8f5a
+Output.12 = 25c113c302faddfe001699270f83d242a00d49ec346ed0a97bdc503cd945f3073dceef5adddb4eed0084bb5ee18a07a8c6236f5f4232f47d0016965ffb9333757ca778fb7b3d003a77c26923798aa00c0bca1293c32490727f358a5b548f1fc83bf8e62c8e023449c9c20a9c93a5f04a
+Entropy.13 = 6789002d8743ba72ee8ee2b30489e5b60ee0d9d7222be0ee
+Nonce.13 = da4590b325550d0723683e50
+Output.13 = 01c4946ea5df3f1d2d8b7a04cf9056fd1b31b2c874e5cb2046af258fce4161162ce9898de21e2228f66c29cbf318bf97080d476dd501b95df1a0f9bd100ae492fa9861136d39121493ae3d1940d2045f248dde99e4b0e741d1ec8fc816b29e3c360efc27a4c24a578334b18ec793ee80
+Entropy.14 = 2a55ddbf673f4e12538e61cd2bfda6f0316277661f553c38
+Nonce.14 = a0c71049f5c75c23cc11c7ca
+Output.14 = a88e6cc37617929bee1e14f74ee363d1e05fee618fc1eb1f8abaff42c571048032c84ef0ec7a6d8ad7e6c5a4a6e90d714d76643eca063287929032fe75a2b63fb1f83ab36a7fa12a12d7332459bba56b017654bc0fc29beae1897863a63276208f9d11a32780a627135b271efda4f4f0
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 4cd821f06021e05a4fb3dc2634c405e9acf84c0fc59ed546
+Nonce.0 = e4efaac03361296616c3ad77
+AdditionalInputA.0 = 166d8115e78c87dfb715beaede2b5d63565c5bf52d8ac61f
+AdditionalInputB.0 = ba4e92236fd2a5a362673d464dd5f5b4fc0a5ad2c0fdeb62
+Output.0 = 5de3a9e43e4448e72c4e42ec32942185a4f58f8dd3fc1e1be4337baa5aab3315c3d537dff954ae43e8d79e218acbfc6f970559eaa41e4666df14817ec706837726df717e54aaaf5980c096c5ea91788f824a2d729ec8c11c30179811424bd9dddb24ac100b2474e22a7d822daf4dd938
+Entropy.1 = 5d1733d64c95628bc65b3dfc297751addd74228f98a9ae68
+Nonce.1 = afac53f1ff1eca8ab6994c3a
+AdditionalInputA.1 = 1a20ba633b7504c3d6e5d09f34ee81db5202285e83fef53f
+AdditionalInputB.1 = 13227640103fe093e830040674d53fea9ace7dd4f664ec49
+Output.1 = 419e5623bff172121c6ba2dff5699d053c6d9d86f2c2abb4eb305a2cdddf666069476c8ba58ae9f6b0b8414c0b698d5f4b151cdeccf338267d7e33101f2463a9396a1aeeaa467016ef0f53c3799492ea0768f849a7ef9e795d6ea9e0a81ea95ef69671c8dac68d51ad221547c61a5545
+Entropy.2 = fe3a4e53ae825eb82e278a317df56b9221a79489e11b93ef
+Nonce.2 = 1ac17b5202826a273d483386
+AdditionalInputA.2 = f21cbde7d9020de82f37e79dbdca1121d0a042a0b975b430
+AdditionalInputB.2 = ea04a666edf06b829ea91dbb84b484b19edc23b16bb53eac
+Output.2 = a8f60f803ce8eb612f7d1c1a698c95fc97451e0789ea2be634b2465d8bffbfa960aeaed937296a68794889b5af1522deabd64a1be9a215d709bb6a3d226bc499f4e5438c812e018b2247c133d94bb224d978a962a6287d01d85a238d904f5e297b2d6e729d85c5252203be431fc7869f
+Entropy.3 = a52c8e6f027701c1fcbd76722f921e301c3fd9dd7149b4bf
+Nonce.3 = 9a357a1452c5971d9b45dc4d
+AdditionalInputA.3 = a4bad1136595353bbd3b01cdda8c56928ed6f130503766e0
+AdditionalInputB.3 = 8f37092c5f54ffbd51f58b8023c72fc6bcea5a625b0ffa70
+Output.3 = 437fcd666beb67fd00f0137c75c27e234415e24028e07f7e5e884258fc8bebb177d74728f5a27dfb17a66ff60c1685fbd48f2d3c1c80db688cf7fa0dfdf8be9cf637a3a30a5ad43e98b6e80ab7c02a7f78635a9c6623ae1ab1be40f2a2a4c471cc78240fc10b3bf6856bc987f09fc105
+Entropy.4 = f9564d418c8fd789ff48314dea505185af276aba322c0622
+Nonce.4 = a1b7ae87bdccde885218741a
+AdditionalInputA.4 = 18a32ef711846c7716269ac04ae257501f4e09ebdad8a555
+AdditionalInputB.4 = 6c39dbc8050310ea67e70b3d007c5a8fb094f581a0ca6977
+Output.4 = 28c96c56cd76adc7b1c8e960e08974c4d75db4851068b6f9f1d2dbf922554a726e84528224c3638d39d9833f4a038f328a515b3da486804cbf82c4f083a8d2854acc06b97c5d957a39b216e55a8694d6b550aa0f322cca773e1dceabd84f381df06eb898c76dd296e4d67a0db63554fe
+Entropy.5 = c9406228b7220dff834f28c3e4c3abf0ff04bccd7786977a
+Nonce.5 = 46e5e4c9877d7468cc733911
+AdditionalInputA.5 = 339593a6cff7530fc2c310505dd9be6f701b3c72f26d6207
+AdditionalInputB.5 = 55de0b922ad1763fbf875f835d37d01419715fb1638a8cd5
+Output.5 = d2c9a62b6f62c4f95c1ff34d759fbfd9ad76bd3710ba5ddb3b6a942230126c8d8ae1ed25bc38ea42efaa604975fad55260edc832ce4652a22fc2a769b3a5c8846bd5bce2310db85bb0576543cb677ef5b26f8a3f01b123c868f638622f550025825180762df043efbface399e2b11a31
+Entropy.6 = eed7dfbfbd982f35f19ca1916de883db1a21363ff16d1716
+Nonce.6 = 6e78bdff2ea6dd8e8e865fd4
+AdditionalInputA.6 = c0e564b5f793e98d4b708df37e9b832bd11bd69f210b9546
+AdditionalInputB.6 = 73cae8da3674ff00bdae141bf13aa6372b81dd78a149aa10
+Output.6 = 951185132d67120a238cc4da1f79eded6c1171a109f0a65b489fc0d7a88b6cb003b2e14596783189b3566a614f392307440794dee4d95973df8abaea5601353e99173261252b1ba41d70df1c5e8ae184d66ee6a2c6896b076bacafe99218a16c3fe9efebead542bf3f7130b934096b61
+Entropy.7 = b6a05e14e60c752b4c307850d7661183d598fd522ab41f61
+Nonce.7 = 8c5264b568d376be822c843a
+AdditionalInputA.7 = d68702d4eea9219745d4a26aec5ebbe2651ccceffb6e8952
+AdditionalInputB.7 = d8ce1a1350fb9b34c63bdd82009d35eff4fb493b402554c3
+Output.7 = 2374474b62a52202eb178f82d5b4e1aa529e7a062e00329fda1a22f89a2ebacc955afdec457d5a84d159d94e94f112d04ae606e9afcd47fb9caca95c63885fa18ced924495fb5360836c70bbf06322e5d34a0e9c72c9a8c5ed0abe1eb920bb8c9c46b7478d88af57be13a60057f53385
+Entropy.8 = ea985af279f8c2391223e5bd31c0ab1db25d5e3f08d8c323
+Nonce.8 = 401d027ba90697c72b1735d2
+AdditionalInputA.8 = 285a68a8b4fa92cd671798b8d34040a795da82b1d24caa6a
+AdditionalInputB.8 = 5c66cf1e80cd8d039934d1f3c2898e9682320d4b2b460326
+Output.8 = 0418dbc1cbfbc79f4da20e56f4f80cbe2e4eb40ebeabe45ee6e8c3979cc982fc527fe9c2d7808e0b1c3369b57e118c88ee4eff1aa4b88b35de9a72760e923a44b29e7be4e379e78db3d10f4bf60c59af1f9c86f052d07a60496aee7d2c99b4167989e21e39b53f5d4d47027d299320ae
+Entropy.9 = fca365c5621af51099f6ca78d835420c5b9761a558f8e3a5
+Nonce.9 = a00c1fa36d37469bf62ebec8
+AdditionalInputA.9 = 891e5403d20ff0a902446aede74ffcc93135a847fdcd862b
+AdditionalInputB.9 = a044ff5ea904f54ae35832e4697a6d5b543cf843ec9b0966
+Output.9 = a27c2c3ea8ce9b892c2868521730371ae68f32174efe0d67bae63e4cab720eca6cb2597a6c391833865ab3c98f57ff507a3ee5602e88be441767d75ed97af9a36512183c2313e9defdd2b174f784ec962eee13da71a4cae2ef8b9f615c285d8fe5bc8704bf3462f46010ab512c99a5f3
+Entropy.10 = 506180b944d400028d3b4a43e4a553001c3b89b41c62fdb4
+Nonce.10 = 7743de27fa7d4af082a947fe
+AdditionalInputA.10 = cc2d5629cdec0dac130e73546791f29713dec64fff7bc0d8
+AdditionalInputB.10 = 46419305e58cb2e6d761dd23e67722012d9c83e552fccc3f
+Output.10 = 8d901f6fd77a489786ffe9df84d1bf8690a34ca5e5c3895309651d967032316b8d1965474e18051d00f47128cfae379762262e9e4da3594c0e93494e3da922e9fd6e63720beb14f8618bf6d94d7f3e105f9b51fe6bfefce1a925b133360cb3f48383118e3b8fd09f1f7cfa2770cc40ee
+Entropy.11 = cb3a0ccb89d85dc1fdf9397f6eb8bd1f28f8939b08a7563d
+Nonce.11 = 7be548412365a33260841966
+AdditionalInputA.11 = 77fbec5631f027758edc94f0cea95712147755519b1170bf
+AdditionalInputB.11 = a55a54ba72f9fb1e3e5fec8bb1b599ead10705319280dc3d
+Output.11 = d022253f3a832a58bf287b9d2d774ddaf72db6cff7bac1d62dff318f26b01be9ada7dc95af3ac6896898b5eaa96fb05ce097e6ef58efd90c6c68bacf75921f3fb36f3bd906dcca8eb478d6b29143237e752946731d03c695f4eb5cb86f978072f77384fd853bfaae60219e165c2f1529
+Entropy.12 = bd3c57df249fdfe7a12356df12689c927041fbd1f33774c4
+Nonce.12 = c4cf057afcb8ae81f811f414
+AdditionalInputA.12 = 4013eb9f96639a06325f381e6f7cd270daebb6999bfd0cd4
+AdditionalInputB.12 = 5773619ed73ab37b7002efa1102530d8385740b8aac81569
+Output.12 = 4c8154a08a21be50e9a8f8e1d4b0cfa5275e72b26433efebfd303d90e9fcbf0be8ed01cbed5cdc4b4fa0a27025e36668515a8ad1a31e4f4b0697b8ef6447b821721bf04131ae105456ca92a45a3193ba15be07347b9e99660a9e45ba88267c2010e0a0f4f47cca488f828344e353a7da
+Entropy.13 = 59f155ac90041456b095e61308181d14fb5a07c69981a0e9
+Nonce.13 = 2cbe51b9ebb4077266b5a952
+AdditionalInputA.13 = 3f9cfe88753e67b682fd496dfc1d43fb001549090855ff5e
+AdditionalInputB.13 = 17f6d34e5b1a5c2604f6641a2e09d1fb4e711747f2ec50fa
+Output.13 = ac6830003eaa94eb5a68252fea2a17b046d3684340181ca39930cbf2eb75686672556103d81c127d140506da6c183145628b8a2b53e8b855f8da0681f1af90f6f5ed0a4de7fb6006e0ed2f91e018646fcccb4f271d6f560cf76b40407159172592f48d45ff9959041db35cbddb75435d
+Entropy.14 = 598774dbbe13282b79c80e67efc9982c7750f18bf737f733
+Nonce.14 = cd1f12bd2899329b39c3253c
+AdditionalInputA.14 = 65e70309f7386d1a0aaa53da65263d5263bc5eaff0d5f3d8
+AdditionalInputB.14 = abb8cd0ce0560309d2424d2f3fdce7af085e6c14699b4799
+Output.14 = 8188a498ef9e0fd52a77c3a44f1c7edccf9248590aebc52cb9ba7b5cddffe867b26309f032a78c0ab751741fdd9bd77d4bd17be90dd045f6f8b45826c9900028f68138cf1ca8e18b253b8eb73ae04f2e156d51a792abdc6524e4f45e4ed0b06ab3b0c94bc5e1ed58f917c17f72161d31
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a26e9537dbdfdbe2c16ce370e309def06d088db2f3642230
+Nonce.0 = 4618dc0cb490dafdf5ba6147
+PersonalisationString.0 = 7c26b15ff60b195aadb5a9a4d25f70aeaa84265b27d73542
+Output.0 = 9f0a324c3ce414ba2e966d3312fbc52536241ccf9bce590f15dea7e45d8e7806d715a4a62b541a8c55366d96583ad052ab2f748e47eac850ebaa2e891db60f8a7544e7d6fee7bf506421eb899c11d827842385473e88830ef8fd068e32e5752caa8b2b63b1be888dc561c2a553d42c42
+Entropy.1 = 0d92b4e01fa4394d802b79ea8f4c73006287367df2155d7c
+Nonce.1 = 71050e82b95bf8f5d21687e1
+PersonalisationString.1 = e74a641fbe4ceba851456904ec9e8ca4218e670a18019098
+Output.1 = 49a66c2431185f175a2b881a0daa796e0f66df9bc96e446647769f5ebb6627a4ef09d299ed4deda1fe99b4c8cf7022dff28fce6b3de3124f92480d8f83cfc49e4b9ce114a922d66e96d1401aa6203e1655dc0b17f0412b61dcd4fb07f35d0c8ebceec459a4af86fbacab1541d82d6e7b
+Entropy.2 = f08d21c58984d116c239b6ce7f0f072c4d41b2eb32484df9
+Nonce.2 = a54d4972c87520aa415b7e25
+PersonalisationString.2 = 70934927388e99fbc9b861517909b910d242b6231a8bc790
+Output.2 = c4fcf36a963bf3ef0830b08931960dd0fd62840610249884f89ef2897ba8896ff09639fd7cc136d2d814bae0ea8932a83dd24c1efb730d41f4ca10744de802f4a055dfbfea225722781a9ae821e437865146c6639e87d91737057de0882c270ac6f262cd2c478fed91135a4eaa81164f
+Entropy.3 = 7a9f4ec4675e3db725e6f0cad3fe524d1e02d8180bb273b4
+Nonce.3 = 9529558fc7776ada7490f295
+PersonalisationString.3 = 054b2054c4ee9d9fe813ae63675fb998ac4fe0180fd13492
+Output.3 = c15cac5ecce3b57bcf5eea6d1d3ec4988d3c97b6d5cda287df44c2867e632db3eece965d3294eed71f8158653061b8ffee0ee8dae87d29474729451c0296597187c714d6897b3f1bcd1bda05418163ca557697277e9ee6b2c1a3c47ef5b261dd82d4f881c97de1485d0db26146ff9415
+Entropy.4 = 3f87d110b5896071c058c809b0ca5008f09a9056e0630c1d
+Nonce.4 = fc22430c4dbf9d4afcde32a0
+PersonalisationString.4 = 3dfd0c683bfdb483fc9d6ee7eb787a79ef910eb55b5f0405
+Output.4 = ff9bfc1d1e80d7f3eb4435c8df3e582eab3d12ccb9d7dfa33965d23e5728200eeb555e39c7ce00c964287a24a7c600dab589287ff82e12cac3534bd9e4d0a1d261f67a8e644101f990112d8389753761324447e78c6cdf4c447e59be5c16ff6d886a296805e904350fa62b498866c583
+Entropy.5 = 46aeebd8df9bfa3431b183cc1d4e39929fb52d3090deec25
+Nonce.5 = 6b3ce40b7f3fa7448a938e04
+PersonalisationString.5 = 46878a6a01cef1c4a30ea47066eba37b0ab9c5b7b76f190d
+Output.5 = 674fafa55cb6a977872b12dc3c426f4ded58e51f176cf5f591b7d84352910f7f39d66f7f85e33e30158cf4e6243f458298467e01f9df3a9723eaf685f4643c4051b76b85f4dc153b1ce9d163e49e85929f9f95b9fba3c0d96b0ff990ffc6376488a86a990af180992128fa7f8d542d2a
+Entropy.6 = 9861f6f037a71ca9c86164eb5c4eec91bce74ce6e72101a2
+Nonce.6 = c2af429929d4829b4b94974f
+PersonalisationString.6 = 37f023fabe12c0fff44aa961f5412cbd0ca34f0828038543
+Output.6 = 105a15364d15aebe50903e138cd32465b8b3a5fa2da47802d32d7a8cb75c89b5ba621c3d4ddb4ac9133c653a6cb2ccb971e9125b38634a400b8ace6eb4e99b109d160234ab4cafe83a1320354b55c89e3cd073a263d411482845d96fe1e032e43db88885871a8c27fe13e8514067dbf3
+Entropy.7 = e22a7f109f9a975a80820edfde25597b1778b821338cdf91
+Nonce.7 = 9c1a3b79b0bb3edd2bb1d118
+PersonalisationString.7 = 3f7bbe12073c941c1f6ed31fb12e255ac01b393e973dceac
+Output.7 = 536aff6c0cd2e4bb32f11170edb87f7ff7e2e5e6dbb2cffefed60e4d5b6cd6f8f5df013f5e13aa800a8c7d291e659e17f935065c481bc852c5fd65c88c9d40fcf3473048cbcda84e3f279ae1e8d33e9d106cc894cd2c549d2f0d6476dd8e783c3e9be2e116915498370ce0d2b77d14c2
+Entropy.8 = cc934eb554741f1579572a1e145c5c752eaa5fa64789def1
+Nonce.8 = d099e1fff20fccb16208d507
+PersonalisationString.8 = 82883f10a78958c6d5b8c92dec9110893e77ff09bdc997ba
+Output.8 = e56b85b3f9bf7b9e74425a4488cc087f6ce99dcd9f45f501321dcfae27618dea4916083b9ccc8f3384095408dbb2d02ee8690527b2374ae5c37b699ec7f3c313289c771ec82866fe79ea025405c15b5ea154e09319a075f71a49ad6d638d99b83ccd29f47e054146240bf0870aa89c2f
+Entropy.9 = f67452b2e842973883350d8866997e5e2c1feee6bb7685e2
+Nonce.9 = 9c0b03805dad87ca333db255
+PersonalisationString.9 = 0984d59b7d4a95bcf7f0f10f9245aa1651a3e3cca35f8e0c
+Output.9 = 36cf230211dc74b6297c07b0bbfa542681c57c4bf41c5658af20ffc0ee985c892369a40629a6e713f5b4cabc3c38d2a0189174e9f5f1af10dee459f4419a4caea3613370ccaeeb9d2da810cc05064df3b4e5349f50ae5d2120216f435195432db4544f4aa3f72d22bc2286a312206184
+Entropy.10 = f69fb91ad26201a137d9358ed6a37c1601abc7fa2c4b55ca
+Nonce.10 = df47344ea318139384b1cf3a
+PersonalisationString.10 = 517949f5451e9a4c9e38802f0e841ed51447bb634447fd7c
+Output.10 = 9982b4fb5c7784d5564e6175bdb4b11238a3d2fca5ef396a6bc2459930e56a01baff452b5c422161a5257639f175648b6ff95612fb7a2a4ab933ea0dcba04ff6bdf36b84f09a094d234945d0e4248c0a4ca5805a72e374be263778e5f7b32d004d6690bacebfc7aa3df31af8c081f6e4
+Entropy.11 = f4e9a343c49283a26de114e6583bfb6f2107b375678df18f
+Nonce.11 = f1e57f308d3626c8f4a9b743
+PersonalisationString.11 = 9007875be95be3b8f77e805204565649a817d2013b249958
+Output.11 = 2a6a06189aeb79cf666aca755fb68db130714efaa27df3a6f0c87cf2b2dbad6d93d0a5c44dc146ab484c47e8814072fa9fda814bd6391cfa809631ca896ba762a104b601a05266eaaa80daa3458897d7f5038e433e171ddd15f1ae6c5d89d2b97b5b6513e1870c931553aab08860c51e
+Entropy.12 = 9c9a3402aaa5d4726e8c236b94f9f6f85132ef650b8f0fbb
+Nonce.12 = 136c3e41a55f46428031ca1c
+PersonalisationString.12 = c2090b993dc33ea85ed255d213100dc0f9352bf9ede57a75
+Output.12 = 44989fc040f82db3963fb5a8dbdc6630f30e7809f0eb660675fdd906b87277961ecfe3291f6c70f59a41e0990fbce70d8b8c2c50b19812056cbf168020eb9e7debe996f7bc54a744b49e79f43acfa362b90217eca65d1a70c6f57c85e589a52b57364bb666b28313e78b998e30831d11
+Entropy.13 = 39ded30a35e0c0e02dc11b8fbcb9f01d54dbef143e27f0b6
+Nonce.13 = 92b92837b8c53bce250f4356
+PersonalisationString.13 = 628d19f1c82d07a6a03de095626dc93e298624c07d95277f
+Output.13 = 61234e866121741a10a65b027797703c29cb7cf7347348aac1e600e460243be86b494102d1a8704afcc49c5eceb566cf5a0dee57cb60926ae46ed46724d1e4a2628370ea5b6258c0c187f4c385b8ccf9625a0fee3f9d11de23315a09d8090c7ef16f52afe605e4dea661900014d4bb7e
+Entropy.14 = 2a053d72f043eb480f1bae697a59f17cdd44b9f2ca9112fa
+Nonce.14 = 1ffb77244697c3d67a564d06
+PersonalisationString.14 = 62865bf0f5af2146440d74e5ac8787cbedc544de16db24f1
+Output.14 = 1a74f62cc6bb05ff956d1af526926b937a84352830a78c7ecd2ad9c39a796f29f640d188ded8bda0e66ba81c941fed5e82f3c78543d9fca14335459ad9d573362f6b5d69861cb94c0bb055723ba5416b1fe08e74f27f23cdec9db05b50b01a20f0337cafec896f5f7412e1dbe7307e0c
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 86a1b85b447ed6047efd9d941076f8e2574a59825d823471
+Nonce.0 = ae0b9731774f400b41984dbf
+PersonalisationString.0 = 530ee91ea4d80431b54a3af8e6576f01aed5f3896c4aa732
+AdditionalInputA.0 = ac82066b7fd4d4c700084653dbafbcc2b37842febf08fa04
+AdditionalInputB.0 = 57b7737a97247423b83971cfbe1d1a77a61535b8922a4e90
+Output.0 = ba15fb11668d1a84785f5edf8b9054647fb702623a1140de9109ccbe1e14eec643fba1f4fc9debbe35d8a1fae3895cdbdc4a1e13f463955c3ccb16469817bae97c028f327c71386873dbf0da9fcda200a474d2e74ffffc867cd7e25f40158c4d5711c63af48e5e2590e787f0db84fae6
+Entropy.1 = 9fa2311cfbdd52a3133f50799390d6d670c28e6a6aee1047
+Nonce.1 = c7c811332cd0923de0f21868
+PersonalisationString.1 = 2a6da1f72de610e1d3322d33941d4091ca2a72452f1ee330
+AdditionalInputA.1 = 7a632b14f1607625575d89b86610aad7915503c2ca140866
+AdditionalInputB.1 = c7956c39600ce8361de289de2cfb36875e2f0460e2f3a904
+Output.1 = b17c449e66fe2950ec28d8e82c9a744fd89d91a4b4ce45f96b69ef98ce13704949f5b883f5c409483ba9d915d911c341855f4684f5d015b9039055689b7fe28adcf75e7159f05bdf0ae6e3cf37b07fe7583ca3169ac6ed96af336eafda91bd86731a38dcb655a048e4a7121749a2126b
+Entropy.2 = 211e39be0bab7a81c555d13981a12696e590fe65e5170fcc
+Nonce.2 = 16b7dbda910cc80202edc3a2
+PersonalisationString.2 = 8dbfc18b5fbfb523a79859decda92afd103e2fed12211b10
+AdditionalInputA.2 = ea753210ef86579deaf11bb431ae68c364e964b868160f84
+AdditionalInputB.2 = 5c3e93fe188b9b535a10dff33e5af1b4dd0d650068f808eb
+Output.2 = 7a7fd347a9d7a51aac53675a5f61810f1e7f1531ccd40d46e0d34b9084cf5b347b10098d3bade378c9190eda9bea755800b723331d182e1a693d76db0f73ccc3a209afb65a7aa713b3b9364c48c70a4656c7d3cffc404c07277669403145c595469006353b77574cf2d565e2033cff1e
+Entropy.3 = acc90c5fde8d56a80447cd97ccb88f72b2104956166d3d99
+Nonce.3 = e45efd3ecd788ba826f7d51d
+PersonalisationString.3 = b75c900d8e94e3926bff49bb55b1a3679dd9ab2970122939
+AdditionalInputA.3 = e52ee85ddd31155e77931f1ad6e9c994f28ffc10e5e15b09
+AdditionalInputB.3 = 3c90340045534f3ba3f4c9d4e427fb912434ec1304073b5a
+Output.3 = 9e5566edea3ca7048a602012617bd16fbd230aac183db50d161b36d02ae19afc1b734090bc2c064ef4e9662bf45618fd649c0794ecee55fb440f24c8a4105a77a7b512c5701ad7417e52997a1e27edd9dcfa45884b2f5c8e3d8a20ae8913b0a6915d3c1dda085a61dafb30392b41b4f7
+Entropy.4 = 7f5156a1c615c0f8f9e964363ec7584eb8ef40d27b9388dc
+Nonce.4 = 74563632edf1100fb1c33c81
+PersonalisationString.4 = b4884c6c63d03fbe824d4ae6b3c23cb4c5471b06604ba511
+AdditionalInputA.4 = 2488044d437698280452c0e1d368fd989377ec94f7a3b8cb
+AdditionalInputB.4 = df94bbc38c787272f64364eae04f92333439a546a6f80e97
+Output.4 = 0928230871ab46a44138fc00748a667ad6b1a72584625d6cb5b00e675ce505dd5db08883c1db0ac86646f2a39879694e16bad7b7592c50f0ddf3cefb00620c8500a353e27b1d233662295f1f17e08cfa4417afabb5678475dc55bc8e614fffb6c44b80ad4aabac18f389c1a9fdd61b53
+Entropy.5 = 24d7995747256a94f9d817003f64a9fe06cb158db616f584
+Nonce.5 = 9f54e37fe84d8a0c94523de4
+PersonalisationString.5 = 8924f0c493f87a8cd8ee710eb80831c106de5553041e9e9c
+AdditionalInputA.5 = 7ec5f3134edc34995e03ceb25045ec8f9230e53f25310247
+AdditionalInputB.5 = 2f4eda92e7f69499f8684395001d8c02e2a28c8a62d946b1
+Output.5 = eb9e6c934bea04b91056db81e56fe91109e3b85b8ce32cecdadf7b37d7939d2686c08c5e0ff11007d54af4e36694cfcd1448b0ebea99caeca8c98547128cd9e78a5541f291d1249f1cf281a7e555fdc24567d287326683b7ba9b458f7ae980773afec8d8650808ef7433a5273c06292f
+Entropy.6 = aec9f1cc9c78f32a518e7c442ad709ae4f79c2ba51bab92c
+Nonce.6 = 66a2175c4a34f0c483035f84
+PersonalisationString.6 = bc5f1615325ca6c968f7c1777a4f026fafebf802918b54eb
+AdditionalInputA.6 = c46a3fd414081ff3c88bb7d5b266399281da880f91d9d4c2
+AdditionalInputB.6 = ad063400d0fdc9a7174b3fb6b42304c763739f3152ee99a6
+Output.6 = 12a5c705873fc8d4ccb2594a61df026cf0e60433bb6bab16e98242671a8ae9d97bb6a5bd033464b30d26eda6bb05290fb8b7dd0c5b0062f25adfc3f5343c570322856b80bdbf4d9c65e25823291998ca46e34f3ee9fecb112df2cf3ad3455eee204c64a39838814f40d39a5c62ad5153
+Entropy.7 = 1b7313a4bfd08e69e356efd3cd89b03aa574b08346d4db5d
+Nonce.7 = 7560c73a2a82cd6633dc2097
+PersonalisationString.7 = d5a9a27d17deff4ed2d7bd2310aa19fe9351ecf6b308dde0
+AdditionalInputA.7 = 9557d12b235921a46abcb1e71252742459a45194df8d4fbf
+AdditionalInputB.7 = a0f7264952fcdeb12d065d80cbe988b9d295d70e0285b0a5
+Output.7 = f3e7cbe2f69fcc53e40bc62e89539b7231dc1ccb4699a1e7e512c75a7ca93820ec8459a1e12510ce112c6e0c2465aa76fffb9cdb9598c5b95bdf1eedd2d3e8eca5887781a06895eaccd9e465c9af03c65d046c5f45cff0f07a10a5908b949bc2a7b1469db1fe3aadf4babf4057ceb4e8
+Entropy.8 = 16f52fab801fc54345b49168884c5f06e1992bf6f3cb705b
+Nonce.8 = 7a5100a4247ceef1044f2355
+PersonalisationString.8 = 32ca8d5a042d4b744ad5e59379801254ea92ad6e9adabff0
+AdditionalInputA.8 = 479fc760afefb2991f9164245eccab65d3e370eecc3916e4
+AdditionalInputB.8 = 992aa7758aa7b962103296c997ee0254b7717d9254d2491d
+Output.8 = ec2ba51eef719223d8df5809516c51f4079ebcd0ce85c57c53587533a49c798396b026c564aea04c5bfffeaf4f9fd8eaa7ecf50d2f3cf0c14eb99dc461649f7740a93b40446dfcf2a68a85d78294bfa79b7586ab3ac3b5e31412c972dfbfb174615e56e18de4facf659d7ae25355b59a
+Entropy.9 = 3e33049c4af4b3876cb43f67ac8f8d5a8ac97806fa6d1508
+Nonce.9 = 22c2d8c3b59e99ab926b77a3
+PersonalisationString.9 = 7516be26f052af032b28e5f3e7d36139d584c3bcc14235bb
+AdditionalInputA.9 = 0d39b1348286ed5d5a1cc52a9358da88eec1e963a6eb0772
+AdditionalInputB.9 = 03248c2f296f87035626f743ff970691935bbf62d6eef9b6
+Output.9 = 24be53c262f5181a02359f73e97f6474c2433f77b4ba4fc7444ddd0e00982815945d180d860aa5e403c4fe4562b48b2583c5d51cca3a24a59f05a93c9744f436650af562b94d75d95c44625e85a0d6a161bb7130395c75cc3e067a2aed3c7f69adadc9dfa7e10015d030abaf80432a4a
+Entropy.10 = d883e6934565e0bf22c092233843736c1e7becde906366dc
+Nonce.10 = c73a7fa276796d45d16f36f4
+PersonalisationString.10 = 829c8d4fcfa8e520d0ba7114abead1940b23763abc4aa67a
+AdditionalInputA.10 = 2a8d92c1fe4e8f5ca89a277319e7ef4fdf9869bddb816307
+AdditionalInputB.10 = 76b8e1f0ac6572b1af383f99e3dfddc7a6e4ddfa69034016
+Output.10 = 073257ad0dc09fe074e8feadca8b38d884e355638d27ad27b1d473cbb5853ce552cb4e5f1bb3f4b074554825e5bea5c9c68c075706ca7bca6e094ac48c1fb1684f5fecf1acde94c71842628bbc8dcfec5cc2aac19dad22e75314dc69d902571f07226dbe75ab761a33bdc8a474c354eb
+Entropy.11 = 7a94944be2d18a2aa15ce5ee67f4c0343c4ff36a953d7328
+Nonce.11 = c218a8219257216a97cb037f
+PersonalisationString.11 = 8a31d2b549c488913eb64d0eac57a78c43a699ea168085e2
+AdditionalInputA.11 = 00fbd9fd9922029a48a6293958ed90cca72d97ef27f758ec
+AdditionalInputB.11 = 2f17c557b5b475fced2fd433577ebc7384e5a59aeebbc3f4
+Output.11 = 73d09e22031cc800b50a6e2bb189a69bb06dbdf03c32c042c94e407dc3047738eba7c265d815c3609f75144207b60f866e230aa9a43128d6a52544d5e220a8782865cd56aa3e2fdafab705db3eff96d6f2123ed932a447ba3e7d3db01b240e20a68846008e4c9e51d78d337cddea8ae4
+Entropy.12 = 87557273860b5d01c48d8196908649c4b88328809590e675
+Nonce.12 = 56833473f22dc22d14170a55
+PersonalisationString.12 = 998435cf6d83dcaa8e4bb70a1139817d223ddfec2adf7838
+AdditionalInputA.12 = 16708c9a59592f37f6d94f5937c4adb1707f93be28154d82
+AdditionalInputB.12 = 829a67d0b1814dd03f466f37ffb9c5131f7d74438a685f8a
+Output.12 = d1fa4436d881a25a10e5120c2935c46e03a3578a21efb382a68e22eda8c9c52adbaf611dfa14291e86ad62b77ed8d5fd5305f82fab0c0f8315a2bf6790d45fb4f0a9d3b704e4a52cff215526bc2b5b2427c51e117373edc7b254335914f19430c56a56dff1e199a8f727b0543e3c4149
+Entropy.13 = e26a797b9bc023f5fe87c7586165df6eaa17ffd60d6be21f
+Nonce.13 = bcd47b2bc34eff92a68baaa6
+PersonalisationString.13 = 9b51cd536ccf30091302e654758fe1b2d2ff820b3c42436f
+AdditionalInputA.13 = 58aac703a592da10ab6462bcc2ec2d67ce31a747a9098662
+AdditionalInputB.13 = 5a40bb66161a7c1e1664d2ad911f323727198d5f8dd41986
+Output.13 = 7f0b2349248371a7b4d07888919d214d94de1b3ee1e3b9f87ba84c9ae6f14617398920e632e34e6c03361b9ef0a5c96c7baab811fb3f0f6ae3a034ecb604b59ecb274e847239cfa1dde2bd238891b5c9c8e4fd8d8783f18f46a18e2277fdef293ad56abe9517e5c15e3f83cd6f458155
+Entropy.14 = 9e7b96155105119e84d8bc01d157e096b55d8fe43beadd3a
+Nonce.14 = 84e628d6411c355793266da6
+PersonalisationString.14 = dccbb94a69a73d5428753bbe29a53657060345b9db3298a8
+AdditionalInputA.14 = 1a6853817be281e26796430dc90f014f6fde64cbef16e58d
+AdditionalInputB.14 = bdfa703974a758cd4eb00661e0f4663f4e574cc7be6906e9
+Output.14 = 23c9f591ec9abea9f9eb89ab8d705a1e570fd2888772db5d6fc6e418a34e32d78fe49be8d4d8288fa397b57afd49c07b715e276c68a2eb8f3e63f67de21d8ad23fbbdcfa03b201952fae49928ce4da66cb70638398bfdba4db7635c8c726a3cdac22c98ae776e881edd60b69f0b38e4c
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = d51bfa907234595dbd898908e3e90e00791e275223ff7770
+Nonce.0 = f3813570a475aac3b7fbe345
+Output.0 = c2e1c50b8a0d0a0a76b0a41b3f3b46f3edf1c81918d20ded790426c58a2643ac72ef1bac86579bd93de0b8426a30a1c297b54f8a01f80e96bae7f4f1fa03e2edc31b0e44c82f338a4c2aab4905a6e231e0e04f0829450c88d17177f3305742def23f6b20a1fbd8eaad8c0f4aae0420a3
+Entropy.1 = c16de117afb858ea09eebeede6c98959cc7d23e7d76e60aa
+Nonce.1 = 3a5cd5294eb7148fe0bf49e6
+Output.1 = ddd1c2dbc679a1b8daf403cf549bb19b8e88610df4ad5583cf32c5d7b223e564d365e5aff9a1c358a8f22938cb7fd8be6f4c187cd32c2956460d7b27dd883c5b5548529e757a7b89eb8c629414dd6d05c93b362de92f5e59f546a94f8677e117f62cc01755bfeee85fa1ed34dcc83c79
+Entropy.2 = d4c80c96d8c77c32143b0910404d24c5c60aa6c4beeee7d1
+Nonce.2 = 0fe1715a585315e7dc190e8f
+Output.2 = 8c39007e62a24a425b607a918484664ce901530372dcb62240b2b23b7701e0fabcd27211b137c428443bd7b4f082c82d60e1b882d16d603062f8170f309dbf4ab42f243a6f3f53d131a33cb0dbb4b7bd256432756878c4b791ecc1b850218a018a0aa9e85131f34400592ee859ad00e3
+Entropy.3 = a79ce1a08f37ee3f37d6f8ab435b94cf28749da73eedb41b
+Nonce.3 = 0988b6bb35ce37d3f1624887
+Output.3 = 6f048662784d28bd3c3129f0feaf7b50b862a5e02b0daf428bf90e97ac3501f378f342d987cc11a0ac1faa1550c2f2c78468cc6ad47f8c9d047f849dcb2c9b2cf6f7dbfa398ae3033ae02d39e492b8ec20e2283ada6864b3ae2057620887a369ee08cf1c812b23a31715be7f5af7d6d1
+Entropy.4 = f766e51848fed6b6758a8a74fa792f86e7ba840d9a9a5ba3
+Nonce.4 = 72210ebe17918750526f6b55
+Output.4 = 70215dc0057e036ff584af502fc3aa1c6c7563a87fecee315c1d42d6dcb5acca0d858b3042ee8accb28306cfa2bb5d3e6e355ffb2419214f7be6465b34a0062538d6898c81feff31657480f67bd986cb1b196383b19cbb8f91a8d0c72ef9b0e884c98f6ba46ab9cd03533df2381884d6
+Entropy.5 = 163dca82234c9a423748bd5e607b90af327f1cb32f64bf97
+Nonce.5 = 9504c77f0e342d14557157bf
+Output.5 = c295cabc4d521a9da9458718fcacd74bf07cc142d3d09260482100faabde35e329fe46e4dc1c36308199eeceaf4f8208a55e74cc4b98bedb9f63568d9f855d8a54db3c30fb0690096c0f5c3ae819110d000283f3bd8575dc532ad4b66b7efc67eaad32018967b43b4c9304122c11a863
+Entropy.6 = 1ca226fe84594d89cf82967429052f6d1788623fad8fa0d9
+Nonce.6 = f45f05d64f558ec02141fd3a
+Output.6 = b3fc16f281290a7d7a2c3afabd44f717170f6355c1453d19498427216c7e270bfa7f5d1e699881f1f105bd52dc41d0790be4dc0ae7e1d73e13c34e7f892f658cd8bc2e811bfa1fedad6070b33a8b90d53e2b40d1763584a59a688d3f887f9005919e5604ecf4261cc283da76677f8989
+Entropy.7 = d576a4fc84fd78a40a40b521075afe5e261c048cbb9d511b
+Nonce.7 = 17fdcffdf7eb1ae65cb95b1b
+Output.7 = bad25947cdb63f878491fcfe8580f1fd18ef0e83e853877090e8aa4782713205810b1736e9d71cb775ce9664c056fa94ddc62566072e04acb1e4def924b209f9a097ebddbdfb8f8cdc3c7f1f28ee2526ba36674430398bb2de13fc622c83025d2ac61c7028d6a113c3b6ad98e67e895c
+Entropy.8 = 2e98287a92bd9a5503ab95f4cb4a554cc0bae99784b44c26
+Nonce.8 = cbf0010846e067fe1a6a3560
+Output.8 = 81f7dd83421637be81f9e5de165e71b6a09d7c0a6ee26f6d9408dd88988c160f1f179bc730d43b96be2e7e14072ef13531717e65600a3953c40f62362f2c457e57b2dae9c759bc4af38c65d50e6f72760fe07f8dcec219d033d7e06980fb9ac4e65843b370cd8300aef092252208a07b
+Entropy.9 = ed4e03b2b75ffccabeaee1ecc37ae454123dfca7bf852d1e
+Nonce.9 = ad93779cf99817b01412d49e
+Output.9 = da2cbf5d47a4df44b3b7bb80134af2c19c0f5e628aadbf4c0fac5d0e6ca2babcca83a2396922d02c58cdc2771de74c82fbb48af8aaff04181076019d8041341c3274dd2242ee768c6bcd1b0aa542ae1caf4209819a30df44bfdeb7a485ff1a02672580b8a8042b0e7d4425286842f994
+Entropy.10 = 1ff763c25d909bae4442e148129fe050eeac7ee2f08d1dd4
+Nonce.10 = 3bbbceb8183547518df61ddf
+Output.10 = 763a7f1da652e50fd8aec81b81d70b58eb054e5b0d79dbfca87f1cd44600606dfb0b3e4199d2ab56a99dcd01d23b154428e5b8586a4d56031e0e82d303915ead070c2e77b5b328a3c6de274f25b57eb60fa1dc53de84fdc9449a9bc8e2d85c6ef5dc96f83690c06cef3ebbd0a28ae64a
+Entropy.11 = 52ce78ea0da6c9e4d5c47dc011fb6a0445b039898e97c961
+Nonce.11 = 9446829e092993fe6c009f0c
+Output.11 = c79890800b6c62b38b9fb12e8d07e74d7903c130e006cd28c138167e8851ab938cfaebb54db84829bfbb5a972a2755b99e051738b6d22f916d77ddd123e28103cb868545b5a0f316d488cac8bef473dfbd66846d57dfaa906aafdd557e65f2fdba750f9237523df5d60cc43290eef572
+Entropy.12 = 939f7ca40e30cc2fc4a1bc8ccc7e274a55f9249e31d9aca1
+Nonce.12 = 9f3589315f1d5851e52e0736
+Output.12 = 9aa1eccedc69e688941c876b17589ed757d8601da125bf4d81ccfb3dbe3a8776839839426f6f434155ddb82118e36f10242dab580fe588e6396f2a9931b0d9bc4f13dc38fc85a990f8b9f4968110a5dbdc8aec5d5eac0c084c3320e757117b1c9b6ac1553fc23c291bfe39f41ebc8605
+Entropy.13 = 20247aa9598553f13234e8d8fe89ab145644293de871aaac
+Nonce.13 = 31a04e9b534bba701eab1093
+Output.13 = bd955300e06403ec6f27654fac1aa5ae176f911c8a90103e5d2b5001b37e0cb3f22b4a8c0f772f706bb954428283ef2dc341c143c1e1522f97a1a711e4c7a56d67f1384471db8eff43fd58f1fe5b61332707a08bb5624580b1ef102d774feeee046764b63e80792d871f61aeafecf90d
+Entropy.14 = 7c8a961f01c1888456ae6042caf338c3ab8b5be28b34d15b
+Nonce.14 = 61edc22b49e518eaa9e4e04d
+Output.14 = 9d2eb0a41f7b03ccae8e4e3c61628e6710f5999f3991f04ba90fb3007275d07ff169d325ab26f3446e585c2d454ff8f6cd4a520190afbc06f30ec9b49668b09de45a116b171c210f5f888cf3c273c803044b17a16b06b44bc39344f2b2acb2f21f4b0a7abafec8c8d406d26477db9b7b
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a8dbb0592dcf5173471de8818a20bcfe1a5d556b60dc3087
+Nonce.0 = b84edec829fc7262aba706c5
+AdditionalInputA.0 = d97f4bfc7c27073b4101c7c5dccf7819d3266a031d31cf90
+AdditionalInputB.0 = 0edcf2e8d86f9ffced03d2bd6505cd9c16d3097ad2b9d60a
+Output.0 = 7b3e67ac5f353053c73c03d80f8c070fbd2ff490bff4a577f2b97f5b5fe926d4ecf61b2d6fa290a769e6206e33e02c3355b6ea149c2ab754738260393edb3390b7ed8837c751370b116affce76cf1b62d7fe96b4d6aa0c986749828c20835ca939eca5f846bb90623bbc7adee4400409
+Entropy.1 = c4ab93b1af2574f70bcc6566f9035f1a4f78ccb4ba7ea719
+Nonce.1 = 2278891c155a1be29276334c
+AdditionalInputA.1 = f780f62b823ffd10d7473764dff5cf9492d4205b8fdac28c
+AdditionalInputB.1 = 91e8e6894bbe6558b1a5249bdcaf220f8f9bd8b33cc8953a
+Output.1 = 8921c09ac83ad49be61df6f45babb2239a1f7be9cd2dc5979abc29cd15aae8d51e93080bf28697f49a152068431c7717fec47b95a3fcf00c36671a4f3b3bd2e66b3f4f0979441b7b224ce1c0df34193cccf0ad1ff760d54c293ee9560375b344bcef715af8e511de772a0b0d6108d69c
+Entropy.2 = b56380830ea9fe95209e7d6aa4c23b71d34a58cdff979c03
+Nonce.2 = ad1698ff336da87908e6f5ce
+AdditionalInputA.2 = ec98aad65398c61bca7b7b32440bec139d646f1a9e484baf
+AdditionalInputB.2 = 8f151a3c7d292cf742621101c6e4ee7226158e441c9a012d
+Output.2 = 58eaefccbc5d04e9c8f584c4e5455797cb4e221c36b4e3867ea9f16f72294f9d0a1e6f7b0a6ab6d51a6935df1452f1cabd408974bdee9a17c52ae95068e6ecb7ec55ee39062fa795e647c7058f9e71ec01ef4f398bd11cdf88c61771982477e2478c438bf8f1591b0945c3416bfa439e
+Entropy.3 = 2c1b7b611c85df6e59907df53e5d3fc597f31f4f7539de2b
+Nonce.3 = a3c67467169a12beb63f34ef
+AdditionalInputA.3 = b84eda25bbf4f706ced37ad409e69b5564fe7403237bea6b
+AdditionalInputB.3 = 20907c3cdc7514c09f37e6f469e85944c00781a90de40037
+Output.3 = dff125381a7299be9f571980a7ab068157d05c21b37ceb400b5abe6513d4bb05136b0f1a093d8363b2d43395403fc11c2f2a1b6457db7b44dc165e918c5bb7567de7dde0fad44d47bed60a98c3dda461c36796d99ed2799e7ff5db8dad041b0c63a36f103103d699df8b555713f40e8f
+Entropy.4 = f1b9bfcd31a1fb8e6e8b6f05579674b5058edb1191edba86
+Nonce.4 = aaf079e0d66448177dd35175
+AdditionalInputA.4 = 706137c5519d877beb492556129e28481617cda963c82a67
+AdditionalInputB.4 = 06cd1a519df346e24078d435b5c2790e1d3facd3cee6087b
+Output.4 = d839b094dc03598b56f864a1077712cbeb7558209b5ed19a5f0f69653664ab89249d4ffbc80624c12cf19d7eee63f0bb9527beb5a057afdd2570f5a54b77cf64f1bcddb6e6995c997786903caf1242d808484fce6acbe85e357c9759668f5c232683b3b54083b781ea2da4e7c8bbe876
+Entropy.5 = fc4a6f6e2521d029e56bd53c430b2d8d5adcf9afe8d0b6b3
+Nonce.5 = 23bbcdff40f58cac16e0c26f
+AdditionalInputA.5 = 58b02447c1781199614a2c9779d391816ccb40908600427a
+AdditionalInputB.5 = 6b1d9257d8cf58a28905a8b308b7d433d4fd0565c1d1e8ae
+Output.5 = e625380c083be01bc4ef0123b622356bb0528e78614b18fc534123b5b7ba0127cf7cb8d0c8df89e8bcf2ce9880490d28e75b8dd8136263cd9b328b04ea469d1dd1086f11a9352fad67f78f82b945c75dee283848055f83a82897e06703a66f8b18cf1a88361a701d1c0bd738c7745b41
+Entropy.6 = 20948d554a41ff027528c1300809bcacb4780b959469d578
+Nonce.6 = 2b9367eaf432073142dcee41
+AdditionalInputA.6 = 8b7f07e8263842cfaf7d582c0927864170ae4df33f0311cc
+AdditionalInputB.6 = 73d0eeaa3206998cd7a2dd70b60d6da178c65a3a9fb215c3
+Output.6 = 40d20a3df1351bf03af3447da04a930270de48613a1b73681fa041e903385d4257a7774b8d62e726050c9a21da17af8e0ec107bfae390a37895d71f8d126ddd015b1d4e77a205b358f85372fb81107f0a5ec2fdbe37dd00877d286cecdd1991fc1638bbeaab27a3ac70e8c060747cadf
+Entropy.7 = ff41b81599810a01cca6159097feae80ab55e03dd04d333c
+Nonce.7 = fbba10f7eea1e17b95c6f4a0
+AdditionalInputA.7 = a40fc869741f62cbcdf1c6ca2faac41e40450c3624965e1f
+AdditionalInputB.7 = 7a7f5ceed2127cc6a16943ef630f07c9031326714e119df0
+Output.7 = 3a6018a00a97ccf114c3b764fef9215d6484da8ba9e085ef26d019be93f8ed1e37c4b891f88bf5ea051c1d09f4bd6851967293acc8a7ad73ce5c73366aa2404de86f9fe1c077d0434ec39757050e986a2f86f55e8a6bec27b016e0dbf4b9c9016f0a918eb417f441f7ff724d5ca8f468
+Entropy.8 = 5e7fa3002e0f5adabe9be1b79d792a16850d43705e744453
+Nonce.8 = 42b548d2a692fb79db011e43
+AdditionalInputA.8 = c1bb8ebdd77e142537f477557f190b026fbc1e0bdd1dc4b6
+AdditionalInputB.8 = a72b7c2552e9b46d3c34084a5da6c122e3cbe53f988016ad
+Output.8 = 2770b5910cde1fd5e54720d8b57e137ed77c2a7a50ece9c1c019bfbf92e279f141f71586764deab8214e83a4c9b3e61fd2563a8ed9645a2f13004b9ff3c0481dc1db497d63456103816414e4f1cf002cc24a0da861639fc847711f661b9ae91b6982ef2857eafacc8621fa4c7d66fc11
+Entropy.9 = 0db64b56c91e1d72e019da8b9829bbcac9e64dd674f64560
+Nonce.9 = d1637d39057566d9d20a1320
+AdditionalInputA.9 = 33f94abc4a8846483abc9695edbaa3479bcad3b994b80ce8
+AdditionalInputB.9 = 781e62295a01cf6513c0b917321ee9fb1ebdf2674302b48e
+Output.9 = 36043d99c14308be1fc5d518955fcf766f7b7e81812fa42ee98b367c5a5c5b46e2eac44ddffa3c21eaa48ec55f7e416cac71651540d5f29fe95b24dbd203f83c074ff2f9e6b561055121274438060450146c2c2cf21b884035c7f762dd923e3acf21ce26dc6291be66e93d74e9d3e8b2
+Entropy.10 = ddac5cd0ab9f7fd33bfca2f320c82c519ea4a65088c064bd
+Nonce.10 = 72a7a2d38467857f6d887d4a
+AdditionalInputA.10 = 7cef1f18e474b776a443980ebfe97d8ad661391c46d237d5
+AdditionalInputB.10 = b3d6f72fa5f4130b96f64cef11115aa4fee0b68fb5be5910
+Output.10 = 2f3245bcf7d45e1e22e3842857fe2b539e5938e0eae31271faf93f301e4aed4a4f4efec3a081bbdeca2c3c4e70fc0299a920261e0852543551d8de0b25bc2f543b6f6183b859e50c0162b26ca73a9ae6e504986b4ae5cd69b4abc8f6f1a12490d4f97b74a0650c8e8576aa165f453be6
+Entropy.11 = 7fd978b33986297a99ac44d269222b20828574624bc208b2
+Nonce.11 = 7cf10f8e5c1188480ab5e95a
+AdditionalInputA.11 = 65beb2e3a0fc3484e34e957ef004715762b2b9fbd68ddcff
+AdditionalInputB.11 = df6f2ddee86689f5a8592bd41e1cb59fe00374401ff7e8a1
+Output.11 = 5d9bb9b209911577b187adf0ac343a5a0545b77191d7e1cc191c2fab4e86ef6a88fb1282141d83994bc039e17f4b7d29ae8a3117586bea2afed00a41677dfb2ea9b68d6618d75da7d0afa5ec4a14ac80be6873d158f23de297ed4c0aa3b5fadeeaf189c7126c460b9044b93b87c71c69
+Entropy.12 = ccbc856e0ad43d99b8d62e6d9a3ad4c46619c738003c833a
+Nonce.12 = 49a96897c2d217859598faba
+AdditionalInputA.12 = af4eee45d2958ea81f98ed760a8a220384fc1116fe54df7f
+AdditionalInputB.12 = b5c42a81a7c83320235598bee78b2286b91f236187f5b85d
+Output.12 = 4a44fb3cc340ebbda4eb2d55312ebe2dc23ad7698d78b5556475f764003e50fe9e48dc33b6d1441b4a26f2fc5ce357dc9ff99c32ebcbb38f66c2052034bd98fb6bf638c6994b312ec5e389cd7b72f4312043c772973eac1664146bcb19dd97e142613f6aa26456bbab200ab98215a8fb
+Entropy.13 = 4b68982eb3b81c8b149603cb5176598a7b405a71186afd63
+Nonce.13 = 9b62ba7d0213555226c43b4d
+AdditionalInputA.13 = 8ecd586643a108b396694e4d30a28d32ef32551777a2d094
+AdditionalInputB.13 = f977340856dc1f6d1e90b74ee76173512ca25c59d9bd9495
+Output.13 = c117887bf34cd682114555f017a0689880ef011254023570f5f78dbf6223bf6e94ce9c2023abaeb579791249191fa1c95ba3f1bbf9278836943ea8b37aacbec8f0d0b1c42d30c373138ef078ad1533e4f17d3d87ea093dec837ae90afe8905a7f505603be966a2cdc8512f8ee8b19f84
+Entropy.14 = 7c6d9c85ccd4cfa4e9418baf144da0f635f0be86a4cadd48
+Nonce.14 = 8d574440a514427686dd0eae
+AdditionalInputA.14 = 71b5b9e9b813b5f69e8fa9fa7f588217268581b7d135fd7b
+AdditionalInputB.14 = e5b06d8f12539d36c665cf129c1c42e3b7e88edce1650870
+Output.14 = 64595391a02ff750b46418274b8366bbca0e9c52c95bbdfa65882b76395887a018faa276f3fd6c8dbccdb964755e36508897cdac977037d0978f2752d1dc68bde3ba1edc94787c1c8cfe42c2347052da30ba7f1e06b44c10805196e7bb048cf572fda62b4a28fc189702b1e575b008ef
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = ad09c736cb8dda3d7712cd5c7202f2b35aae8e300af8c791
+Nonce.0 = 2ff77f55e60ff80d39407602
+PersonalisationString.0 = f5679ce508efb1da2d956972d3b60e7de12d8c1ade1e9478
+Output.0 = 0e56df58b8807f848adfa323418993b3d7ed775241b457f11d4897920c16d477d0fa27fdde930e936d241dca0ca7b0114b52aa778b4c8e7e01b056184a164b8295884831221ee59f00076c73d4597e4682b7be34ccb25a3f33bba38cb1f92fa64812f250b992d4f7279ed42cea6f747d
+Entropy.1 = 3f35b7c4276fa70aa68003827acd417e7eabbf1d20b916bf
+Nonce.1 = 8a0be31a81791c537639e863
+PersonalisationString.1 = b5eb60eb35397c2d3cb98d1edce6a2211da99e7b9314ddfd
+Output.1 = e1692317a5014ac1b8b45018b968cd7fd536c550846a9810cc5ace69dbc6dda7131738b529379c2e8c34ad57cabf3e91083c8a5781a00991365aec36a91d465d6e88a6f2c935989a95c8d5bba947669fd35d6b45dd83bcc26548d45d27f72e0a239cc1526a8623cb162d4a082e624b64
+Entropy.2 = 4d461486b3f22d8ce8da08af84f25ec15fc10c4705110366
+Nonce.2 = fcacdff9520c5d24a11cb448
+PersonalisationString.2 = 1be95db1c7f0c8b11a5d6f3701a7141a2c65d6eda737678a
+Output.2 = 4b99ac142918528dbbaf74af8714885d674dfadf7600e82ec7aa83e37dd0da47d92b2550bf7c91d903d38f60a5e09cb0b1ba58a4175e47ebf3bc67e65a681d78282b2a1478af9d1540bc67d2bd5bb954a7e649eddac051360b5a9fafc08a24c1b77d59c467311c6803aadfc509651fc8
+Entropy.3 = db072d9325597a235926c59464ee717f8b4810de056627ff
+Nonce.3 = 4f6473ce509637b9caa79721
+PersonalisationString.3 = cae57c3640f4c61b94359d03c6353711c7fbc8f423edf99b
+Output.3 = 559d18ab0727efd3cd27d984698be9fd86ef503a299cec2432aef179a969b51b101995114587390a4d623ddcd396ffab11991732dce0ad364462d9ada9f2ac85b4a58b5bd5575b9693ae8199826916d0280601443fbaee51e9c8d73c1fc622a7e825dae538a51b03faedc2f1b973f605
+Entropy.4 = f72f4f8a6833835810b3e0cc780f5ff555d95072197a7409
+Nonce.4 = 681a5457166ca6f83ed03328
+PersonalisationString.4 = 18718eb98db1faaaeb245072245138cb6c2da969d02c81e3
+Output.4 = 07ea38d594c3cc10f98b8fea0a718814d31dcb0616354b0b4c8b6576ed7b77a086b673193d44de988ae90a5ee485ea6ee0030b79cb6532f11084c5cc7f35f3a8868ffbf5a77e3eff411129f1a70741dfb57ee017133c5c463b210cbda1f555ac25acc18bca1b119d99cf1170f4d267eb
+Entropy.5 = 9f99d3a316cb6e1580ec67e8fc5167a7759c6c6fbfe8da1d
+Nonce.5 = 9c88d540c0095e2747c100c2
+PersonalisationString.5 = a3007f783412cb79038f976a266d45809de66088cca7503a
+Output.5 = 835f099315eaca6cb518b4fd087a95f72225a08f732c9acad08f014f3aae3f5759039157d50d9a1714c614a4457ff7ae6318c7c09f9dd11936ab6488032ed675c3982237ab7cac5fcfc2f7cc1f0138ee5a2b946ef74bd807cf26f7df81048c940ed3237067023ba5a3cbdb47c6361ac5
+Entropy.6 = c80f7d2bfd86ba62a67cdf3404e8a79c881ce8217a9c4074
+Nonce.6 = 1d192883a140eb8d8a90c301
+PersonalisationString.6 = 0767e17904a4539e99ad56e85f8583980dfe16c80122e0d2
+Output.6 = f050a9ecb38a3e524b43d987649787fed31d6ec4a4020c569e43fc97c346c02d54304c8548f3be16ae608ca19ed9c343863842e11300650ae2caec61340b6f8e342a701fc9aaa88a0d6a830ae05467ac2793067ade18693843c7af8bc32ef99bdf10bc4db86b3d4a0b978cfcfab89b39
+Entropy.7 = 66d5a510a0e0b51d8b028b87f152431fe48d612bfc2ad2c0
+Nonce.7 = acec6d7148362a28e602dd97
+PersonalisationString.7 = 5001bf497d90587fb7d99bbb4ce1a4ddfe561b469e07de53
+Output.7 = 080f9e361847528f4b8c78fe332988a395ecb87475239ea5d99dbcf819c4951e55ad7a2c140e2167cc83a14c98fdb052b155612b898b5a69f14bf394bd378cbe1a87fb2704a39821b23e2fb2a7f1f17b3f6c8530eb45d2d270438352d9f8af7f63e95f98d05099e6a36e0c8ea45a5b1c
+Entropy.8 = ecca6005a5f965238a48a0ea2d18c3623f07af97adc0e48c
+Nonce.8 = 2693e9da016b14e2530304ed
+PersonalisationString.8 = cf50ca5152d134a6599a1806cffbf4567e340cad1b87bec3
+Output.8 = 3f7860118fc63c701bb883ad136e4e29c0988fa5d223819f718f54ec4f4777d8b114de6eacf0ebac1b68dec8b0ca66e0a316197508c2c3977473628335e201e8a28e9d9221a5ae11cc26aefa34024225d250e8ad2d1eead2aae05b5fd222a7c6750d908bfbe9c4fda64ccfc6b72f99df
+Entropy.9 = a173c93315fb6ef19c2e3968482c1e9fe282bfd9f6ec2f1c
+Nonce.9 = 0672a5a7f027dc327cbba66d
+PersonalisationString.9 = c163923974d37cf0073720da4fb395fc3979edfd29dfe631
+Output.9 = 7916596b3214113a3272de3b4f30105ae1157c1d4b7343422467dec2e0f8cd75d7afe7b5492a4295e9060be4c366532e3de87b88a1a5d509a3057d2115e2d5ead68970b54ebed07a330cf994a0899b5666ca3f18327c8933464d57e145a4505426be34a8f486bab0cea64eb8752984c4
+Entropy.10 = 4d3578f68331d9f93e3b0aa2c3e2dafa808975635f3cc0a0
+Nonce.10 = 504c206fe630797bebc50739
+PersonalisationString.10 = 68354010ec6e00d140dc70175a49aa6f11da22a112eb552c
+Output.10 = a38afb8c951188b43a7e8b2e5439668fa316c427bd0072f34be412d3a422e45441d19bfe4a68aa6ab346480bd3c283d32da19609e332d1c12656f20efca50141c6c65d17583c06960450fda068d11536a3cb7d4957ae54e1f564ba798072b4579254a2e91e217000878be390acdf9cde
+Entropy.11 = 8a5ea0aa66a0207bdbc6bad06491d5e6b9301758a6a776f4
+Nonce.11 = 8a038ddfd11361cb70717ca5
+PersonalisationString.11 = 5c27e921a3a1747c9a9163a41d32f96ae33012abaf46c893
+Output.11 = 34d240b19c2eb1872a0e9b1dfb9e04f1b157b1a85c712bd74eeaeee252a62f8870f9c3529016ffe8b854567d402d77fdb81938dd0bb5f87069599e09882bb30d76df8f2e16c0c075098bfd9ebd5422703461ec986a7c7b9ff4cef52b84a437f5c50a71ce01a166b0ae8df0432950c462
+Entropy.12 = b4b4575f39053a6de34b8670e564b0da6cf51bc92b918faa
+Nonce.12 = 1c5af0c009ba0eef40e13201
+PersonalisationString.12 = 88473e868b244d58965983ba2cb6b30519c46a287969a339
+Output.12 = 88ebe1bd3ffbb585d9fb77a9c07eac151e90f1f53ba4a30a000cabff625c2775f2f2512560363f950bb77c7f4f55551c21eb769a360c358551203bcf96a57755e15b91e0bf1901338da338640f9c5a4c2f8e077d7daff35344244510da18b3d0c9e97ce264c3dc6823a213f843950fba
+Entropy.13 = 0a53165a0acfe31772a6f362d1f6c690963a9ac202581722
+Nonce.13 = 77656bf507e3a5a512e4627e
+PersonalisationString.13 = f99cd75d3174aa3733e6824202e49b454b1fe86302543f57
+Output.13 = d97971a69784aeb3313e65ef2e33dac16bb86bdb10b79ad3d62f2f2f5fe2240901ce0673bb2df1bb2781c3f45e56d786a22ac774a44777809b59d0fbd5b420335e04bf4046ba90b5a3637e255b3dbb89204e4639739dade26a313e2778ef93e16e775cc003aae8653a77542633c37ff7
+Entropy.14 = 411b71a143c57ac4afcad74acb1c61f671999a0c00a9c6c9
+Nonce.14 = a16783ada78fa029ca3fe31b
+PersonalisationString.14 = b20dae78f254b07fe3eeb7c793334f3f432930353fe7f221
+Output.14 = 081803927779c7b2039681db542c965fe48dc3cfde712a361e77da9aaf9f21cf38e18b4e8e5ae5a365910ada327b05630abe87858163713fd8c2988975eca44ee3725370f1c68117e58c2164605524102f22f3ea55f21f7e8fccd9861c59973d71c0aaca574480be6ec8e1fb9a163680
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = de1fc2448e0033444984047e187b6fc2c15d638ba445493f
+Nonce.0 = a7bfe594b1e4e735a283b49a
+PersonalisationString.0 = a3985856f6cf4ad07b57f4932cfa4ad96256e3101964c4b3
+AdditionalInputA.0 = cafc4a0576ce7beecd09717b413854b4ce83ffb12a19be51
+AdditionalInputB.0 = 9dd94e1d4ceb539a59ea283596e11711576d24a51316ebef
+Output.0 = e96607fbd3379d34d505a80b2afb102e2b6ded5f587e75fdaf111a1d325e972d6afb3a4277c07d1441d74b26250f9a9d9022431569adf36833cf30922ba462fb6cfc1777473f84452d2abe498f29a7fb8acf924143d8fcec84603d7a022a0893ebbcccaf3d390f22b63097ef007f15d8
+Entropy.1 = 2f9ff6037fc3ba1d56efbfc890a0cb543d5e2c925a97b0c9
+Nonce.1 = 70f99e00b55e3cac6357b0c5
+PersonalisationString.1 = 978c1c174b077d1eca30b7048ad51c08c8eb7075356d12a7
+AdditionalInputA.1 = 3845a37b64c25844da62bbd7851976ec13815f291fcfcaa0
+AdditionalInputB.1 = 8aaec921ca08c9e9e88c1d7e2d904246b83a2de50d80902d
+Output.1 = 4cb4185632630662d984e834d0ea3c0bb1c7fcf4370979b8cfb3812387728b4dd5bca023911ba0b7b2e0c225ee2c630e1f77463eea3cc20a71c4e6da4e6590bf53171207d70d35f401c2be555b74ba67be41c4a2fc7b255d44b1d5483d33f813046263875ce52b9cb44a29392f18616b
+Entropy.2 = 0e34dfd2fcaa9b61e43f1e3d7671f67b1c740727eca8de3e
+Nonce.2 = 9e86de397cc30e25cef81e69
+PersonalisationString.2 = 591d7cadc1b4875cabdec90ea5e121432770a0add5481106
+AdditionalInputA.2 = d13e2237d7387f97d9fabf10f6d33d2f47371e95d101a97d
+AdditionalInputB.2 = 90a31e97a288a714816f061ddb62466a17e3e8e860ea6591
+Output.2 = 2a49158f8c5fe3bceeba5f43417ebc99d664f169d19579cc959607c20065498e69b5683bdac9fc02ddb7ffaba3fa3fb556dfb89e692c1f56cfd9d367d287e07d4367b10a7a35099baa5a9a645dae4178a688b0f2886d050642d5346576b3428aa6f534edc8d1b472645b0fbf1d9a84d9
+Entropy.3 = e2ffcf413362ec0e5f64cf6559587c99e90ca53e744c7c76
+Nonce.3 = 29cf38eb43688c895473e6c4
+PersonalisationString.3 = c9e9b52552287e7cdf1fba96ac9a9f933ce83122de0c2550
+AdditionalInputA.3 = 43b4c0f0f1a951bba10a3168750ebc7ba9429ca1a0d9d833
+AdditionalInputB.3 = d006395f7d47c5c54e99f7edb31711e58554a872c9628996
+Output.3 = 876d500e593fe085aca5492adf113edf3decae539493913032eebcf8630b9be8ced544a6ddfdf2248d2fb5fbcae26ea1e799fac91d49e1bd4ce13006e9e899c24eba714a7cf4fc15fd8c7d7d12682e851b32b93e45a2db1c0a797b5f03b2f25ec1ab257a7857eba257712a298deb3363
+Entropy.4 = dde4c5e0494373fd847e1cf9ca64c1192156ff072a177e73
+Nonce.4 = 957462efa059df6f56477315
+PersonalisationString.4 = 2d2f37b8e2d2788f2ce3272410585fa4cfa5e9174355503b
+AdditionalInputA.4 = 0546cbc0b8a93030e812eda71d40d514134f3f81b9b63587
+AdditionalInputB.4 = 9c7d51a9f7e0798ab67cce06717eb324288596ec6d3b57fc
+Output.4 = 55280136c9399e638dae3183afdf03b6cb91f04c85f728e65d5d683e8d551fe55e47449e782a7b8d5c133abec46d9164ba30710457a0d38ddc937d92558f768f757f6512d08f198cd5f3ebcd2bae21f0173ecdf5c1a59e8b87e9af4fd93de0a548f7294558ade7acb748b95c24184ad4
+Entropy.5 = c4123044e021a669bc67f477ee9fb0fcf8f777fd0d8d3fc4
+Nonce.5 = c152d4000ad67858256e3cc3
+PersonalisationString.5 = bc7d7de5487fed58f18ba3196938db5b1612ff8d25b273e4
+AdditionalInputA.5 = 68ff8f956bdca81fea0fcb32e564fd4d964999caf1ffa54e
+AdditionalInputB.5 = 66a47d5368654fd60dba5c85862f3d348b5482bb251970a8
+Output.5 = 70f629cd970034597c24fe00162d5c3f2c5097c685e9883cd2cd83e7b3b883224507eeb12797a98e4b4509b1ddc203c99fcba4c5ee0a7d0440f3e8e55e81a842aff210b3c7c24a73dea10f1fc3d4fff16a49094fe919c9084d2f0af39f1f66533edf90eca7cea1ae8fd676b7df0761a8
+Entropy.6 = f25e241132fb3410c8ef3f656d71dd5a3e3d6c72f0e6e9be
+Nonce.6 = 8dcc1aaeef78bb09059b2c4c
+PersonalisationString.6 = e86fd52e459d5a0452ed4e21f2875ac3079856f1faf64354
+AdditionalInputA.6 = 51a0ab662e9f592b92885c3beedc9f06e59c4a338ee70bce
+AdditionalInputB.6 = 3f9f05cd66cc7e3d83cca473dd9b859dd24905e80833fcb4
+Output.6 = 7809f1fd836a54c202befc994e47f288d0be785d794d9e52a0f56ffda32d706fd8d2d28cfeaa89a44cf514951bfedc9adf6183d297bae0e609665e4cafb5e0ecfc45cf3a760b538290ff880c1d24f031382a42d3de9639a44fe8ed15c4b79de8512e2dcdd68c38e59b58207ec1b40384
+Entropy.7 = 643a0493bf6b7ae347c63a708d4de9ea7b9536c386de6c74
+Nonce.7 = 28966cf93eb8415ec6653bc8
+PersonalisationString.7 = 6929e98df76b8d767c414a7f06227a4e88003a1dcd2d4ed2
+AdditionalInputA.7 = b6b3aa1f95e9a2eaeb51ddafe4d303f5b0165933055c25fd
+AdditionalInputB.7 = 1beb02a0183407e74fa5166808beda53feafb1d26c8b9db9
+Output.7 = eab0ea389bc66aeb0f01302ee412a7c87f300c95e45919bb9565a49fc2ed5e65d73d9517c3b4e10a1305bfef65c0dcf0142bffa715f4e041b98fe055483567a7b2f8f0e63aeaa6ec267bf7a54884ff3ecd11be6873fba7bffb7df998e80235d2360f23110c82fbcca12e08e6330b9f64
+Entropy.8 = 2145e283d674ce8061e31925d888e26b4d8bb7ab6ec162dc
+Nonce.8 = d87f3bd6b88cb1469caa4369
+PersonalisationString.8 = f9912008933b4604ddaf05b277fee26c3f8ab1696a7e0b82
+AdditionalInputA.8 = e9aa10aadefed36f4d65a034af21ac15d8ea6768785e5e9c
+AdditionalInputB.8 = 2a61ffd60625f27ef7d03f755693cf152426cb35e9e2aa48
+Output.8 = aae61efe5c21ff8b25dc39bf885a845dc1f21ad37956d63b0f419b3f7692ca037297e4fa5e3e83f6c72bdddede3fdaa9b7560877fde867da51b3769f5ae58b84441eb739a6256b09366fc7eafd1b11a4078d028e7ac328cf7e11a76b9ca3286f4df5e9e23798f2347e201630899fefff
+Entropy.9 = 7483bb2c5e9df76ff37f2d8919ffb54aa6adc0b992f1b4cc
+Nonce.9 = bf5f3b883468d1c49733fda4
+PersonalisationString.9 = 47282993db33ca2ed7fad8236063aad6313b788a6d421f59
+AdditionalInputA.9 = de49cb2490296839bd41fddaf31f3388252d41cde88aa215
+AdditionalInputB.9 = dfb03b86d8a19a2064ea289993854045284d08ffa68e309c
+Output.9 = c170e7e13ffc5a410dff29a6c6ddca5652c0f0792c09b66eec1badd7f4df967d8b15c91becd7f414019df2ed564d075d581153a2c2e0bf1294fc65386e286318523efba8728fc1e4ae030b9b001aa2ddfc48a5a7756cd60bdaa55f3bfc7bdd86091c90065f2f65e34d00e9d40d6bd2a0
+Entropy.10 = 2f42a38e99885aa203085915c1be080a6cf6e0264b0f2354
+Nonce.10 = 977a232d6aabda96cc84a4b5
+PersonalisationString.10 = 2b6fcffe888671b20cd8e12be8737e5b963f9aee1ae26ed3
+AdditionalInputA.10 = 8d727475783d45e864ef8a53aa3687edff5030525ea75b47
+AdditionalInputB.10 = 640b60cab272ab414cddea8970a12a3e6cf6885cfef7a034
+Output.10 = 4d738163a479e71f7b45dd0c2ff08eaa35a10d7e7b07192e6b88915c2780efdb7d7ca9adc239b26ee24fcff3ab419ca26aaa575a65e334347f259a0c439ec15cf2702685a6b9933da6825b9c394eed70b24fd69644b642f1fc4a0c12bc390ebfe479bdd8ff7a4bf37b03b8d6f2ac7632
+Entropy.11 = de952b5578d813ed8acf967ba93f75098d423eee2473fe1a
+Nonce.11 = 71638a0d1e6fa1e51c56bdc9
+PersonalisationString.11 = 74dcd9ae2c668f0256a601186140446eb44673399be80771
+AdditionalInputA.11 = 1259e07bf0e060137b8ab17a244ba6a34df152d34c11a2d3
+AdditionalInputB.11 = 55804e4c7029832e097cf404d6cc8a87121750e28feba0f1
+Output.11 = bece47e28e5bffe94522bf00c8564c39b1cc03b6a86a48192e8dabb74d24d0c7b3dea71d104fc6a4c9ae48ccfeaea474f4dd639f6dee9c6297d54b80adbe9d564b2b3c38d970fc836a8a8376ba5b991613df421286bffc02eb315a1db3f37ab5dde6344e25a3acd1513c313cf5fc777f
+Entropy.12 = 625e312e5d83f306dd93c5722f5624c8b6f3e5c014dc77c0
+Nonce.12 = 54f58da4c06c6525cc18a12b
+PersonalisationString.12 = 3cba7790e518323c7c415c5ff8a5d1ed959d25936cb689ea
+AdditionalInputA.12 = 9499c0165da8ade78a8616f3eb815660bcca2480b766404d
+AdditionalInputB.12 = 5942ab9dbc8464e4928a006a09a5c03141fed3ea4e9c58bb
+Output.12 = f1870634d5bec5ebce2e0bd52c1616926c79c053271bd9ae34e3cb16fd0d598d96fe8b6daebeb7977fc0e1841b8e8bbdb0bf0a2ed4c78104d4d60a5d38c79e5801538c81af945c7c3b4d8813bf2744b688577140f66f8534ee537d2dd78ea005c688ed91fcdaa74cecdb062439121f64
+Entropy.13 = 02dfde97b93b6c5bbae81b95f0d0aafdd7c0dfcd88d7ea19
+Nonce.13 = 59135b7a1abe397da4f5cf4a
+PersonalisationString.13 = 54faac09060a302f27a4986cfc14e49de181c83d6f74cfae
+AdditionalInputA.13 = 74e500a48d1b58b0175f0b18339ea02b11686d2d13f01e22
+AdditionalInputB.13 = 6aa3c0391703a47029da8f41c77f8ee78afa0b847dd771ba
+Output.13 = 8b0cc9bbd6d9f6a1a1273772a2592692921b464aaa3414ac3505a6c28e3b007ae7875088038e2f1b2902450f246346ef7f097a6f44951a63c9ff5bd136ab5925e9d5ec690cb9e990e4b1b15d38f4f209d86e38f5dd798f716cfffb6bbdee4e541351f86c0c60418a3afffabffd7d432b
+Entropy.14 = 63b6771661ab689809ccc5e5591bd1743921d6ed1e1ddd01
+Nonce.14 = b634e989ec3bd5b59777b27d
+PersonalisationString.14 = 822de3952ff36cf2d4e4027c12c4f7cd665c08d929591b21
+AdditionalInputA.14 = e5c633ca50dcd83e0a34d397df53f6d7a6f7170a3f81f0e6
+AdditionalInputB.14 = 5f0beb5a2d2968e83ba87c92bfa420fd6e8526fbbfdea128
+Output.14 = 8bec11df1022aa50d95daeaf23d78d6ee45c43c5768b90181e106c7df8ff333d7cb87ca1ab83f8742370db1c8c0c0c22f141ff4de33ae8bdb14fee7e6c069819320629c66d94c7c97ff52930a3c1dcd501b60f0f84bda4720ee187ae858a6e068326eda5809716e366d1b608c61b0100
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a65ad0f345db4e0effe875c3a2e71f42c7129d620ff5c119a9ef55f05185e0fb
+Nonce.0 = 8581f9317517276e06e9607ddbcbcc2e
+Output.0 = d3e160c35b99f340b2628264d1751060e0045da383ff57a57d73a673d2b8d80daaf6a6c35a91bb4579d73fd0c8fed111b0391306828adfed528f018121b3febdc343e797b87dbb63db1333ded9d1ece177cfa6b71fe8ab1da46624ed6415e51ccde2c7ca86e283990eeaeb91120415528b2295910281b02dd431f4c9f70427df
+Entropy.1 = 72da39d053c6e052bde22d10ace144cc74a65fa22610140168c6e01a5a987918
+Nonce.1 = c015f7a717b530cd6b3db49fdf62c494
+Output.1 = 2daae5267ee22d8488ec158086bca87f1abffa5fe76dc532516e0f93dea5ad30f6d179e977e2bba496868e535c0489227af41ae73d61909b2dba2d94f80530dd87a9292080f6bef224d1292d70a5d35c5b5b94f7bf7c0f70f4cf1475c27de210c5173875f7bbe59f9adf07a721a914afe3ad1c8729947d514d2bb33f6c298b4c
+Entropy.2 = 9d98394dc924928124f67d496aff2744a2443512d21cd9b1e4741c0bae0fbaa9
+Nonce.2 = 9cd0880276376b7e1bc904605daf79a6
+Output.2 = 2067124679ffc89649ca204db906b8f3b570e809162e3fbfc84917f60655a907e79f6e01a57c968f366c30d741a6bee959ff7617c43d29a64c159431e23958a54b5aec1f39beb42ba717bc370588ef422d04649e56c2d076b18f3625a9ac3eeaab437942e77839baee63618dfa3fa09c3a2fa12a2a3c3fa4d355050b0015db01
+Entropy.3 = 123093771f61bfbf02672d2e51669095eac503f28260650acd956d66489cc2cf
+Nonce.3 = 6be500bed696f47639b637182f35fcdb
+Output.3 = 0d2880b8ea355466c4f2aae750203e497e8cc43c949e1fe53c51943b9e712e0e6c33c85edd3421e09d7d2d15a464f94127208fbfb4c36d986aacffffb6ee95533fcbe251a822bb2870dbcb3032acde54f7b1af63bf352a84f5b1655b756b56ec7f470b23f04224456c51db772c4d21b50bc8e6133f22c00644d840e34316210d
+Entropy.4 = 8dba318b8188294b3c67d7a623e8cebf89b4b9a2e87cd318869d074502abaae2
+Nonce.4 = 3bf3fbd4a3f814e4d63b670fb2770ede
+Output.4 = 3be2b8659f989e0c2ba62d019406c893a6f69135dafeb28684b6062ba16a245e8979808f4b42d3839d6f4b1e7b8c3aa2601fa2ac5c97bfb54b7abe172b4104a449c0f10525599d1d119d36993b1cac64a8807478477d492d614096d360a024063295fb05d4d686c95eb1debd7af9e5cdaf3960ee6a673c1e211cb3b7403b3f7a
+Entropy.5 = e003fe0ce5a6943e0b195bb7824ba31ba95ff93089a502367a0ebab5c819c93d
+Nonce.5 = 0941087af48ff89f0b5fcaf3b3585c12
+Output.5 = 85b83ab2a160aa214ecd024052352ca433b444788a968f83555c8c2d4bd9f4482d34d29fb544a00a764d21fb384e36e3799d94932bbfd2b7f0e34638febc7c649e8830f773689a0cc360629db21e604700689d5b9c4b5acb2f460a1e588a38203a5d412fd17c5b561ad843fd28f7dc17a3b3d8c18872cb790803d06374cb27a8
+Entropy.6 = 590cdd82ed0ff23e5b84861734ee42c53882e10b030c05057202f2c43fa9ec71
+Nonce.6 = 95dc6706b352dd1c7bde6fa11d6a9aca
+Output.6 = c664fa13b6274143ddf17368995d0b213cbda25fea4ba4373166d294d51541b8b1a1c6391480fa7f2a37e3a0f28d182ac5f2f1e8f956f776dbb7ba72a1913fa995daca4e4ce2031c1b4c64d3676b108d0c82772ab574a53d35c2a7fc2649836ab06f883aa5c044e1018cc348b45db431489f4fc16ff3bcd3c7374d24d2100f60
+Entropy.7 = a7166b37034444c20af70f98d18b570c289d6a6869aefddd2f2377b0c5c4e5f1
+Nonce.7 = d7b8d8758add3d0013ca46f9c992a15b
+Output.7 = 0ec5a634f1878d5dddcd5cef2d6318d25b289b91b8c80cceeaeb63c27e2c3e3a0f41e21e213fb87f0ed7cb70651f5e4a9ec5ce2743bc828a25f1de8adf5d2bedbe9e02c17dc0070bf4e603bdea8cda856d64ba0b4b4e72c8c7618a3b154e759cd19b048cbb44280a67cbc985739bd325f8a349b72b5803adffe968b88b294705
+Entropy.8 = b37f0d04e8fdb956114f529ed685d810b0d8a71f3fcaabbfc798dd9e63f91c11
+Nonce.8 = dde1f4938d25f6a9308934f0eabed3d3
+Output.8 = ca2e784e37d1d468f1699bd8fffc44907f2369bcef5b17f256e4d01054e231142bec9582d15c40d858bc912196bbbf844033893aad7c84905e172d5736949cc53199beb42eba5c990e8e0b76cc4558e755ee5abaf40fcfdc6c01a43a59ae7fffbb7e54100d9734b8db7f575ff0d919c92d8eacff73d9f5136fa86d1c9f0e04c7
+Entropy.9 = 55943fa5274526031f20a0b34822a5c74702ba93c87cf21ad6ec17b99236abb0
+Nonce.9 = 95a37931988963066826e5d91c006497
+Output.9 = 575d788ca6f6388514e17c1b859d98a97b00d3d71f7ef8e620e621e2f7de4f5dd84a9bc72df70f7e65c50b49c3554d6d6288c776e51eddec155573861f87c961c6b3a78247f78db02413f17902c20b8e510834816873bfb225b667ecfb0fc947e28f66080c6f88faa289abfe821e6ae4de6d7bc4a1c36e187ecdf550ad41b9d0
+Entropy.10 = 34c06a3af1031f2c6b15baeb68ebd42162571d867713b5f572afe92226229d4e
+Nonce.10 = c92092af647d3117533f0e894a3914e2
+Output.10 = 76a85071777d64c95de7f5b6da5d98678b07988ba91e561aa47fa08535ba4dc25d22fac26dc844660a125a6913ec648676d6da0f4d9af6385b0fde771dea9f6491568356bb176f02452f2a330174ba3c9baa8949678ca94aa1fcd4d3bc7037fd0cc7872c407c2bb79a57991c328145b9a6382fe062b1f95b21eb76467529b251
+Entropy.11 = b8b93e7f1ba7d16778c2f0534f085aed65af14704f810255c52a2c2f73e286dc
+Nonce.11 = 692ab38ad1ec0732ebf1531f127f1bf0
+Output.11 = 2c3c63ecddd73ddbf468a98a16f9d1ff2c9ff51598923406b040602d874ececfae4cb412a11df96a75015171f93517c0571aa595a6b64c504626c5298c70e929ada8b3be41de2534808df4f5338595b09ca6d81da66cf7a1568faee77f7f23f5e481e0ada60422530c028332765c295a07fce0107c77a5b4aa4b34801834d178
+Entropy.12 = 13a63ca5e762aaf2a821853b87bc608e0acd52bb8167a0cd5fdfa2156c941eef
+Nonce.12 = 73d2167bcf6f89e1a548ad80afb13de3
+Output.12 = bb68646451a871898c67a312f12f6217d6047551414dab2c64dd786d308d2cfdca2082f2d4d497e7a890da3c04a5613e9efacf01417ca01f303d3419871a97e3d7cf67b53391da651b2ddb5df2ec6448b8dce0ca3e5fe78fdf7d5955b6b205dafcbb74365e3493ae2b709c4638243f1d77f5397fe7ac78baaf337b23b5faa851
+Entropy.13 = af58361acbbd1e254ce98f463d1a47f64998e4264780ea84d03ee67fba6d0a62
+Nonce.13 = 1ffe801e5c71a15d4b80375c066ec61b
+Output.13 = 02a06a8cbdfc215476d526c91a6f2bff994e6d7d40c0fc73b3fb2723fc8c6c9e669af37df33ad62827ee9da452c9c7f46d24caa1f1ca99333e26ecb6470db9522c6fe319bdb1d34ed52037e4b5b2021d8f63f388b954c7f0342394196522bdef3251ffda5efa9f4f84dfbd3dad94ebf84e7fb988e6cb631de9ab73818e6fde3b
+Entropy.14 = 1194beb668839c47c73e7516f9ba09d23dec3553b3b5532f75b260106dcc2abf
+Nonce.14 = 3c8a77351e93065d584feeb08c8424a9
+Output.14 = fabd48bfcdd07968239fe538c2d8c9bde2e257b9b244078f39287c7ee90de167fff56a693c4e64f45081635511b5fd031c0270a31b4a014e44c0516a55ae72345aa11dffcda4ccf8cda50f6948d5ae425d8d53ad5c74cef1364277990156796e1c5dfa1ef095c0d8983477eb24241135760b02c86c86d4ec3627edac8c1a7e32
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 9b6d88373841458da926cc51f83922d363f0f80f90a2f5505c04033824ef7385
+Nonce.0 = 82b21ff47bb5e1b33288b22f3856886b
+AdditionalInputA.0 = 45d21d94ae1ea460857b50b5b240d943d42160e4c12377e0f817b79e92530bc1
+AdditionalInputB.0 = ea432e31cc94c20d66fb13d1ef42a5f62b024134fc635aa1279a6179204731ca
+Output.0 = 3d23d0fc03936766a1e1330393e8ff6211149f3d0758db038da1c833ca8e5265c2a9ff6c8e0836904c5fcd3e61b1c77d613dc6bdaf6437573a618e3e75e455338a7f9a41300da8fd2da408cf095ff7eae1686d60ce9c2f547d0515da91600201c8374b7af8a5f49a6381aaca394c65d451341a0ae1546cd57e0d9167a6b5397d
+Entropy.1 = 73d3fba3945f2b5fb98ff69c8a9317ae19c34cc3d6caa32d16fc42d22dd56f56
+Nonce.1 = cc1d30ff9e063e09ce58e69a35b3a656
+AdditionalInputA.1 = f4d5983da8fcfa37b7546773c7c3dd473471025dc1a0d310c18bbdf566346fdd
+AdditionalInputB.1 = f79e6a560e73e9d97ad169e06f8c551c44d1ce6f28cca44da8c085d15a0c5940
+Output.1 = 717b93461a40aa35a4aac5e76d5b5b8aa0df397dae71585b3c7cb4f089fa4a8ca95c54c040dfbcce268134f8ba7d1ce8ad21e074cf4884301fa1d54f81422ff4db0b23f87327b81d42f84458d85b29270af86959b57844eb9ee0686f429ab05be04ecb6aaae2d2d533253ee06cc76a07a503839fe28bd11c70a8075997ebf6be
+Entropy.2 = 3c898d0b88cfde1955ca1c25d3c876c834fbf4ecaad1cfe7f2072dde4184f34a
+Nonce.2 = cf65881c53ca2b79541dae65b15ed8b4
+AdditionalInputA.2 = f5b4624b38efe5115e54937dfe654e2ba7dfe64ec88a6442e53de50780dbad54
+AdditionalInputB.2 = 64e14c43a3b2f2bb638d80eb5e57e74b07bf5005a424e0c1b5eaad6a26e9cbe5
+Output.2 = b2a5c7478dd213b82eb05a0cee3dc6fe25c8d9bb64b90ceecc17c56b0cf8fd877d330e3091cc27e6baba7961251818446eb44eafab8c6532c5fdd3d0f0331baca3d81a6f20494e524e73b21dfab347bb54f2bd211621c88aa1813c26295a80443c87fd9476616af7ac8ca83738d95dba2ff421dcabb8b5c82f445812a545fba2
+Entropy.3 = 59e6b039e5174328c4ec09933e51bd01a1de95f01df8bbe73edce41b80396b78
+Nonce.3 = c6b56372644546b6731dcfc68858e4ff
+AdditionalInputA.3 = d87ebb74220a6f15e8afa0c4bcacf1af13da5f5ac17c896ecd9de40bf88a559e
+AdditionalInputB.3 = 2974f4ce59fe9e5d605bbea8b7ca203b25dde4b76e02bf93b7f06393d7f9138e
+Output.3 = 683bb8bf39ac5513ee5d83235f53dbae4ceb1c6bce7933ac3b5885939d6c42e9939808e27a492e842330620082c716f99c75f213b9edfa059f93fa952b3968db3765c5eb8e6762810cfa2b6c8a0039834b2326710fb5e458354fa6697574f611ad50c99c13acc906df2ebcc68a040b5b11ebaf95884ca6931d95ee3756ec888a
+Entropy.4 = 3ac6fc55ea67b9735f21f597d0b9b479ff0a77995f1d8a12c2876b09b322ee75
+Nonce.4 = 4275cfee69dd2f9c4be5099ff62969bd
+AdditionalInputA.4 = f44174a0bf525241218949269a3e6003911e421a35819a98b8bf5f93aa78a091
+AdditionalInputB.4 = 331fcc1af5ce6ae7996bb8b0731575ec8d97c5fab072bb4275f2faada32509d1
+Output.4 = dd5c54bfc1a3084bcdeca594caa44e9ed7551cba4e08c945ce4d1412eae73a7fd026e2efa96e91e59e3a0f0534bec554b5826e0d75b2959242f0d3d7564fe16c3600a129f74c450bfe39b0a0030ac07e8a99862dd74d4f84c2ac83d526b0617b24f16b2789c93f375e1e760e7f7b326d0ed00b5d57fe9a1b6be441e321d8d51e
+Entropy.5 = 49767ea772dccdb46873254add3edb457d96e8e372fad8a83ef0e30f59a9c8f8
+Nonce.5 = 3a136c8903397675c5356eb5cc5c97b0
+AdditionalInputA.5 = cfa444405db381a4700f61215d38bf55d1bf16539dbfc8f4d67d43173b1da349
+AdditionalInputB.5 = b994b14265ceb89f580d7ab9837a150f0a47b53676cc9a8ee7c4a047eed9adef
+Output.5 = acccdcf505120250e5c6015ae085b90a92e35b35df3a6751cbb8d5068a8338451fe2d9b28985c4a145038d7ee3f13130d7abf63b9b67b4ade6e67d0712baf53de2edb340b4ca252f9dbc0e59008f4110d6fd841350e2da413425c97129af504c1915f25ef0db36c38a97386fa5949a2464091bd3b6f7f229777c438df5028a02
+Entropy.6 = c9ac39cf41fbea7d7063efbfa8720a98172587f7c2a75716521e58ef7d77fc32
+Nonce.6 = 3565603453aa3efcec11da7b1de53cc8
+AdditionalInputA.6 = ea0defb7a4c21ce69cdeec640285671bba779036de382bc037de24130199acf4
+AdditionalInputB.6 = 2ab1926921f686b2fd33e9fc2cef4e5d030e051f50d4adb73c3c7be90929e76b
+Output.6 = fb6eec78eed8ac3c623c2b8015df988233fd436db6855e9d3e14910f0ed0cb6c7abd34b708ce39fd2bac9837a0aaf64460b93b12673e9dfa43a65f81982f78025268cad6ccab62a9e0edb7860b2ba6780c6b7292a279799d4f5d77c01e9e4804477746728e3d834e73f4c46fa0f010b0eae1a89d655c832159ab8b86781c5de5
+Entropy.7 = 827076c54b7740f92244501069c0e3bd133b70bf737617bae2b05c42436d1a1a
+Nonce.7 = db9ea9b3eb20d8914dc7a05c17273024
+AdditionalInputA.7 = aebf4c50f089479e01736fc06e6dc8cb66ca03dd53e3ccca07e6dc6b8d6a4800
+AdditionalInputB.7 = 404c9aac98518d4b39a75019f729d271d6a7664a42c225ab211f1452d7ffb058
+Output.7 = 42fd372e3b6d47c89077e42f4634eb20ce349a33d4bee3faf1ebc0ecaf3cd98b2a2d16c8c602ba973ebb7255098bf498b4e273b54d647a6ef474891a3306007c0deb4fe6cb2288d6a08be5ed1ad96a60cf4d5cdf8ad4c9a5f831eb9dc9e3299b96bfef8dff43d774738fe81f36b2b23bfe5cf103fe36d47b94f0d24ca913d989
+Entropy.8 = c8bfc49fed3468a1c4907275181b843d7b36598c547e7593e65472eecb610929
+Nonce.8 = 0c04252eeec241ac99ddb84a30187a24
+AdditionalInputA.8 = 9fdb8ca4a7325f7b0a172d47ea493e9c41e8264a2a62cf4f5ef432735aac2b55
+AdditionalInputB.8 = f6fe7359d6993c9e6842c17b2328f01e00ea5123f4746265c160c2ba4f43c78a
+Output.8 = a4d366f0ab0d4017feb83f3bf7cc26d4b0938aac3b099dbae8a3e2e0ba06e1f089fe1f7026ec9ea86ee6ac5dd893fe8a64c9cd0a683787884b2c26082dd47b31ac09dcadb22cf6ae8e707c54e38748ab157175f7b7ed69b5d924d5cad699e1367bbb32b6762badee2e5e509fd48f6a6081e4c43061c4c111ceba5afd470d4edc
+Entropy.9 = c7d5db3d2d84d4b464c9e98ad2171599247c157a4938fa2f8ce474e940bc0a7c
+Nonce.9 = fea36dddd102ab8472653ec0232c9b7b
+AdditionalInputA.9 = 9b52dbe64ac0a770bf69db0aa0ecad599990d28f085ab409f2252a55d3b01cb0
+AdditionalInputB.9 = a403456feeb69abf91cb7422054b167725490756ccebbdf499df535fbf886007
+Output.9 = 7f61226e0ff11733b84a62be5602601cbfa728f9840199fc0c0957e9d39b4133e6936b5f97b09250e9d686b17ad80f6366cd7dffe7644e29cdaf4d07d305cb25be2b17f5ef81c190fb812b93d2be0780de4d7838933c4365db9889b6c65d61f2eda63f30947e21c4d0c6130aadb903db65518e9df3f1ecd58b8ad50100742d64
+Entropy.10 = ac1b4db7dacb4f441af73eb4b6f05d774ae4fbc980450cf1fccbff7dda78e6f7
+Nonce.10 = 2f3686096587c177076939789da6a0a0
+AdditionalInputA.10 = 0b3212fa7b2128b730c119355e76e38520c64c3c552ace52c74bce27b7b75b19
+AdditionalInputB.10 = e0290804900ffebffbc625454127118d251b2e8055ad424a0889b8173ff94d5c
+Output.10 = f16ef06ff5227da000e02c01b94350d9201013ce11200d0e3f69934cdc963fa886360d4ac2031c5c00d2c701264c5a193329dd71cba66a650d9f51dc124c7c016a7e0506b04b15513b5e30656b2c0bc12a7b266317797b57bd4d82ebb56e949cff26d6ed5083e35490bd77c8c4d088ac155d7998fc749b2974f21788db6e62da
+Entropy.11 = aa166e22cc538ee40ec2b84b110fd3355983d640d0e9aabec7f8bc0e17228a57
+Nonce.11 = dbb258a9a489fead5ae91017f96a4ca4
+AdditionalInputA.11 = 06c47d8f46743aa345d83436fc2a9760f9dfa681d75908a3df1e15f40656b73f
+AdditionalInputB.11 = 717a311e8342eeea8b369b74e25b64075add804d81f448f13515a7a71f818152
+Output.11 = 6a935a251a50a58aabee538d29d8898de9cd18d7dd7fd2465f4ecda7a35cd94579d70ec0fd96f2ea9492030d9f74c0e2a9d29d947b9880f9823973905a79a030b6995bbf6c7a7505a36601b23d7504062e8a7821df01d092b2c93579dbc2579e6c64846d5b04b62414a59be3c0cf3caae40d3b847acff3b221580f60c7a7085d
+Entropy.12 = 13e1bd42516a7193c1cbed5c54fc643623dcc0b59a4fad9aeeeefba207c8a558
+Nonce.12 = c8c41ea0dd6580ce4a2372dffee3947d
+AdditionalInputA.12 = 3bd158cb5cd9435a711293ecf4e84649164b72322bf638e0749f8afbc119c552
+AdditionalInputB.12 = cbecb4c129c1cad1bb3e478f208034ba92b19ea35941c631b29b2e7b40d719c1
+Output.12 = 0ea605fd73ca3dda32efe99b30e184973203b7a28479ef5a2b1375ef39726ed6cb8a6887710cb4d541aaef9646aec911d16606d2fbb2fb4e6e8a215f6ca5d251254b4ee5742093a5578ac74c80682f2dedd53df2c067e41052a59f84740c3a13f10472bb41d638bbc509db62d143791c2b09ee9161ff1021eb6b90c0ecb426c2
+Entropy.13 = 2101469bd69c6d5bb217ceb621c03c25270d2ca7e8298560810a94893f5ba025
+Nonce.13 = 15bef90fd6ca8fa00a8ff1cb1e75f40c
+AdditionalInputA.13 = 6d464d49a2d426d9321fe48bac2774764dec2228cfa1e9f883af39e1f06a579e
+AdditionalInputB.13 = 1462a06143d7ad6bb0f9e1c1d7c00dcca212e4f5dabd795e57881b26b5cfaeec
+Output.13 = 50b5eaf20eb7520572b214f4ff875a602e5a343ce69d0d73fe9b35d5ed43b9b9290b5f8319d1f753855c7d4cf97605862f7e3d33ea1caeb974d93ddbc93eb28664014caa87454d5773fe525f97cd29bd92fd273fbc1449340ff3e5a0fa752ddb56cdeb5221f61b35ea45cf4bfc5308f774dbb87c992e3618d3342fd2364b4912
+Entropy.14 = 0238890e5ac9ff931824bd6d660dac9979b25df92702790308b124d40d60db64
+Nonce.14 = b9b5d120774c962d946bd57615c92700
+AdditionalInputA.14 = 626385595bef7103af0af700e1df048d7572286af709289b7894d2ab09ca8608
+AdditionalInputB.14 = bfe8946dbf27d3a2127ec600351c3920d2531eb9419408233e0a888059b5eb68
+Output.14 = ee6d07661828213e6453d94faaf76345c70949eca4965714c350313b0bcd8e079e6a07f8b2f7a91bcb7ef39a61568fd1c40ab78f154b3582f830095d571de29f81f9565e46b560d34c32bff55341a991f8e863bd9242c7cdd366be12538bb6922f1abfa19e7998aac61d465fc46538ee9142acc66786f4516ef4105fe1d80372
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = dfeabab904bfe93a37bb5b1ea4a696f881ab5ab4be87ffbf2d4e8cdfaabb37fd
+Nonce.0 = a2d458b475053a0346b57fc518849ba1
+PersonalisationString.0 = d15d5d9a4a3a41877b4ea98dbda5079ee393f6ab24105dbd70f5bf145772b15c
+Output.0 = 86d8c63ed4a8a19f3429b4dd57ede5ca573e861712e631400645ceee763c37cf950bdcc4d9c886ead3f0f1bf46a63bf22bd2eb39b2dac61d2e8c8f29e26045b3db56b2265adc8152d4f736c09ee90364a1e265eb5e77b0c5988c8fa52717fd33b6da760e78f2a7c27065227c47ac2134b95b7dadbf96e4ea2dad78ef200e174b
+Entropy.1 = 2a85a98bd0da83d6adab9fbb543115951c4d499f6a15f6e415508806290ded8d
+Nonce.1 = b96f96e1839ff788da84bf4428d91daa
+PersonalisationString.1 = a880ec98309815d2c6c468f13a1cbfce6a4014eb369953da576bcea41c663dbc
+Output.1 = 2d55dec9ed0547073d04fc280f92f04dd80032470a1b1c4befd997a11767da266cfe76466fbc6d824e838a98666c01b6e664e008106fd35d90e70d72a6a7e3bb9811125623c26dd1c8a87a39f334e3b8f86600777dcf3c3efac90fafe024fae984f96a01f635db5cab2aef4eacab55b89bef9868af51d816a55eaef91ed2dbe6
+Entropy.2 = c58e3fda017dc0757c452873657d6fae6b2af071e8bb2c0e7b55df8a9ec3dd29
+Nonce.2 = ba0686d6f607c6d2dda190cd01fe0b9f
+PersonalisationString.2 = c072a6bb045d682c498b88030f9a7fffae8912ee89c8fc3c2dd672df18e03452
+Output.2 = c6ababbe424a7a6a3f3a07a6cd566fe44280a1a15b2c8a5507ab0d9516b03ca7be90158531ca6c8ff4d6ca9589b8f62754e542a47f815fe869a255792b4bb6bacb1c50a06af035b61aca966cedf45f6b7982f4382532acf62defd68db41d507b6bc261efd9c00cd0991bdf589e1de807282468ff53288e33e48725830f4f0245
+Entropy.3 = 0cc162cd3088cf13d44691eb9cda01458fb16c34d3c320d04210dc29cf1b55de
+Nonce.3 = df875475252ad6d66afaa66748d776df
+PersonalisationString.3 = 326849e67e7439fd905a66f4fec74ebdd309a0a050a2a6d3d98f015a4aa876fa
+Output.3 = f52678b368fcab4ec1126a2c3d931ba8a1f4e90890ea6be5c3acea5234d6a71c4daa96d563a9be5044562821cf31dc962435aa8c0fb3c514590e7e293ff98a5bf9df0ec5f73bf36381e0e5df5fc842de44c7b5921023404280bc223aece659138917bcd9689bd3f2fb82cf47b1db49e91b5eaa0f10491aeab3ceac78f4a2f598
+Entropy.4 = bfc6258061ff1e94930600f5ef0dd56d6565b61b99add62ffcf87bcdbdd68691
+Nonce.4 = 80b249023eb6c58d62c509ac8332964f
+PersonalisationString.4 = bc6d7c7af785c30082de5f83c999a3e418c46140ad180b6a8146bb8787a7b729
+Output.4 = d39a223384d05574896716912a33d2e113fd737786e6f25f44dbbe2df0903bccf141aebe3eba4b326f10665c57c630bcbcdc1362b9a0f244ee788199dc6d9ff99eca9f8b7ef76c4655851ccc6d652ea46ed2c3148f9cbe9ac534d888ef648580ee97a5b09ef5c86fb1cb99a4734b8dce19d225efb078826bebcc5a1712fd7519
+Entropy.5 = 31a463f2ac5e9a3a69c1c2a29bd15ebc089dc364db3596a0db6d6c6f7a599055
+Nonce.5 = 342776716c675bd0473cd104ab978cdf
+PersonalisationString.5 = fd8d04c7f277caac8d96be3f9563333fb462997471f4e2ec16932d05439e92eb
+Output.5 = b5e5a7cebd1cc522b4d00c0aa7a1c6b4d13314e208f1eee85c7e1750f145181019c2f86d7b4ce995a14bdff40571edf6ede51c4bcfa88b6a717b5bdf7138c83ccb2aeaa8bf5375c483e04ea65c8340e347e63902ac986f6837b50d5afeb6f5ded5938ceb663259b66b6ae041dde1093b1282f834c1fc6e35a318832898fb8648
+Entropy.6 = 745b09d574d1c6369eb41e4c86f281895c3e6a035c35b31b0bce032010758f9d
+Nonce.6 = 36b69a1b6633b08495a4105872d64dd2
+PersonalisationString.6 = 94129bf095d49565414f83c1cc06e0109fa416511756d9096a95da27e00c8d68
+Output.6 = e273d0698423cb0064c7d19d3298feb9a15e7684c7e8b80f0bfb88459a02dd58ef2ee8f8bb0694cbc404c459ba22d10c855ba6a5f2377a4c6fc125dee75e8da4ecd291c1716c694191964060a9f7c0699a681bfd423858d67fdf49da3a44011cb92ac61a68db3718cc5eba2cd25ec5436201b4d6a0949d86ed94c985aaedba18
+Entropy.7 = 1a13e1268eb80323e04ec0a32c8ed99ae4e2f18f2eecf29149115839f2c369e0
+Nonce.7 = ebcb8216494217a7d32b43f9b866c13f
+PersonalisationString.7 = e1380276e67134a1b2100a2239512095f2866795566dea7418d2ff95ca35477b
+Output.7 = f2bb0cfcdc7af7dc06ef410677a84b61d8774a8c2575126302751a9207ae21a5c7d76eceb6b81a438bf4247541476c0f2405e2eef136eb970eed83ba0361c2446717449b9598f5a78dd82c444594e82c13f49f34d340d2e67253c199049e1c44ccc1cbdb76f2a458e9987a8bb033bf69642865dcaa39c384930942c911eb1e13
+Entropy.8 = c1efb4a10bda29d83e46ff69b5e59de6174c34334300c7038656242fe3f6ce90
+Nonce.8 = 0baf6e6e5f7279278634a18824c4a7df
+PersonalisationString.8 = 7c234f15165216df8b7b5dad39cb860366832243bbbfe5d7d501ce9966f4fc6e
+Output.8 = 0dfc48f2a0e0f9fe8bd2066cf32cfb1b62658909d940e1a16c492eddeecc9bac2e210328203741356434c553dfe84522f97cdb351c4d67d990a74654b223c2ccfbce95253223066b6f7561bb6a348a4050329c0c2aa601bfb8398a9578b87d686884feaa7cc4a01dbb646f788d8b071ad00440606182cb3ae65180ccb0cce4c4
+Entropy.9 = 59002231818991eb8b51e07e402e29b2c5c14d29ed37d315513ad9b61b53dea8
+Nonce.9 = ffeea2ee73f3aa4791c74b4148772855
+PersonalisationString.9 = 71344e7b94d373d5fee3e28f7a3f98770b85e81ab9090b7c35077efc3bb2e744
+Output.9 = 25ee5dafe8da2302ceb60c80e9c47bde1a45be8d4b190f24a5b0c9cece4041086e4c36e721d7c65f0cad043a0877e7de748336b2b68e833decd0279702aa45efa0b904efff95878055cbb583e21e55a1645b4936bfb5d6ef7508284e7e2ba99c87c70f1ba6094258e32b7c87f32c93210c6ab2b6874473cf7adcd34d94cdf8d9
+Entropy.10 = c018badb3ddf970d34d4f229c73c5053f6e74672afdd9066e0cbd7bc3307e1c9
+Nonce.10 = 56833cf4f4fcd47999dbec236a4d1382
+PersonalisationString.10 = fb553107a28b004be536e1e15911a383c20118d3986b25686190000c894280cb
+Output.10 = cc168e495fe82793e3fe9b4ef497f09bd04bc50519598c07c7db0450482fa32d0ffae15f76777d6c047182acebe89f79f86a9e1a90a1a8c372ed8bac7adf9b03277204abceb5f8b487c437b79664628028c169f367e3508ab212ba7215105c3e01063a3a0d0db7781331e6012b5b465a417b05ebb4f548da70f83797e3753739
+Entropy.11 = f8fd7b39f1be4c6c7494bfa8b0087c90ef11f2302d36d3464a63401c0c8b5c83
+Nonce.11 = 22dc2792fcbc2a7c40ccc655cbe0fa8d
+PersonalisationString.11 = 8fccc783a77a175c1225ff4ef6e0c2733cea2bd61856e000980ef9d895ef877f
+Output.11 = 7524774e098c3dfce4da6d839ad696fce268c24525f1439517633e82d52aae315373e36797e1e3b36adc67425e9aaf7cceb1b19e13484131cd0aff9335cf48d3068d205952fe231d6dbf74c7d97077453f7ab1447f24ce4ee2f61975c17bf671ecffbe2dea4505fec87021c5f56840271b87b90caf590c95983a8440de42d54d
+Entropy.12 = dde38ed265be4426d7fa447ee70b7c811bfd0e74a2618b60e36de8dea5aa4af6
+Nonce.12 = f8dba4c31093d140acf8ca561de80e90
+PersonalisationString.12 = 971af30ffeabc6cc3330cf52108b4a6d278af52dd4bdcbfbd99494f12dc6c9aa
+Output.12 = 42d3dcd59e4a09f0781b28268031ffddacd6de651a988949854bb0958d74a91f2ab07a3b4f29eec666b516f7ac8867ba2aa915c08a27af59875a5a6673559eca0bd40688bc9ef1731e36150de1c242cdca4d734357768b2377768a8a73a627f1c7422bc985c25a763205d65ff7c3afd9e51064ce9cfb25ef37aaf902b86e96b7
+Entropy.13 = 39edf813bd7a141659a5962720c0ea8d91edb00f54f05b433252a076acf1b5dc
+Nonce.13 = d74cba7ba9f7991c7f0c5aecc4788d49
+PersonalisationString.13 = 9b546dcfe080170378bc1e833674925d0da0be2e81656d11935f29edcdde9bee
+Output.13 = ad933ba15f8b440c0c08303389a3a11f3abed7dbff640f95e4c09fdb9dedb05606cba2e4ff419c0f38471307469be4814e341f74092cf7b314bc26177a97f1806d5e69570d7a789e8310f9b1775bec2562fbc2aacbe7d9ebaf8ba4e953998cbd9ebb9902ed98dd05381f44d9b08587be13c32b5dd23a6717102e3de450b82c99
+Entropy.14 = 17176a26d4364c55020dcdf2f82d792caa013d63e6ea4610ac123ce2fbe4c6ba
+Nonce.14 = de2186bafa82b0d08a0b8215e3424512
+PersonalisationString.14 = d96db27febe22db935b117dc3068374e39c5b2119b497e3c1d858ef649e01de5
+Output.14 = d04435a8aab397cfcee5151f7aa24298ffc6eee4f577cda42d5e154b8d28cb2f0f945f11a15ed5b76486c88f03081cfd262d94a8e0b332e3c9c608461dcc8eba20d7db209810d25c226fda9fe218022a9b2c96876cb16c06c0553dd84ce57e20338c3d3e03c59ce22e668e25c2c50d5cc9afab91f50a28680964c2dacb9d2fb3
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 68c43a008fe46a823d260a9d7fa388fb9e401f0197e7e758a744b4babb3f4651
+Nonce.0 = eb6825777856331884aaf3751b3e4006
+PersonalisationString.0 = 23ce0d32cbf2d26467f0d62acff1a3acbaa6d2746dc3ee7aa9d32c880788afc8
+AdditionalInputA.0 = a31b9f13b58d4fa2f8d8ac42b62a207ff647339a146bd8b268b33d4aff57adbd
+AdditionalInputB.0 = d34fc6504eca4b568193c75357b0d3821a48c77ff80d6dbd21c6cf045ff489cf
+Output.0 = abb4ecbacd4e8fa943c7221aed433861c3b203232657ec4c417d021f905d911db1058ff1e11e272232482ec96bae7cb4efc135502dbe41724077077f6de79b713670c385d04644e1281c3e582e0016255abbe5f8c06d0de57160559f0c08f7fb5be3563c649966190f8d3261364447537de2c7371c6e8c308933d27145bf90ab
+Entropy.1 = 69ed82a9c57bbfe51d2fcb7ad3507d96b4b92b50775127743374baf130df8edf
+Nonce.1 = 871d87bc96b2c3a7ed605e614e51291a
+PersonalisationString.1 = 74a6e008f927ee1d6e3c282087ddd7543147784be56da373a965b110c1dc777c
+AdditionalInputA.1 = 74d36ddae8d6865f6301fdf27d06296d94d166f0d272674e77c53d9e03e3a578
+AdditionalInputB.1 = f6b63df07c2604c58bcd3e6a9f9c3a2edb4787e58e005e2b747fa6f680cd9b21
+Output.1 = a571243111fe13e1a82412fb37a127a5ab77a19fae8faf1393f7538591b61babd46beab6efda4c906eef5fdee1c71036d567bd14b689210cc9926564d0f323e07fd1e875c28506eacac0cb792d2982fcaa9ac6957edc8865baec0e1687eca39ed88c80ab3a64e0cb0e4598dd7c6c6c261113c8cea947a60657a266bb2d7ff3c1
+Entropy.2 = f2e0bf10cb9e688ecc98aedac6a894b0e68808c1ab424f772b3c74e92401a36e
+Nonce.2 = c8f6ca4258729201fc9a7bcd8ccc6691
+PersonalisationString.2 = 43db83d12fb72b50d0f46aa8233aa7c15df0510dfafb7bbe9f05a6a6c8cf4d4a
+AdditionalInputA.2 = be5e3c8da18585d0924a74f548164147d6d1b08e97e395fb1857add58e23a417
+AdditionalInputB.2 = 8ee379a80c68e6d3b6b45958a6f95bd9956c7c07dc7a4c89a2379202999860c2
+Output.2 = 34dc1c639cb823a36011654fc313b0d2c241fb11901f36eb388794b8aec61b64bd53362ab85a041b6480118459a4474851929d42fa1f62c4ed8ca8c43faade7d0f4c4738fffcb265d8e362d8598366261894db33dbda5636192b374291f0026f93c2f8f025e9df69d68c54a31861b88351aa1e5420f1d5a799dfcbbb291174a6
+Entropy.3 = 7d84ff603d8a8bcffe884381b729ee0b434595794922511f77bbf5a843d98549
+Nonce.3 = 006e929a53ee5fc650e48568d484fb3a
+PersonalisationString.3 = 9fbfe65a75785f7d1284f84c565354b764a6148b156fa8a327be5398d9d0c974
+AdditionalInputA.3 = 612152ed93c4429d722a44d35a09ea8fc722c39b1e8af9081f37243f44303067
+AdditionalInputB.3 = 829fbd42761ddba851ba02f6abb7bf8878422993685dae5bfd00f2c2929fe227
+Output.3 = abd6c6c163946d7239d58af9629a830ac6ebd952d506c45fd75cff8515cda1781b58ef48d54e77c33c2d979f00553a3d0c2cb1801b4b1f6e777ba568fc4fab40a19c56b1dc77f34a032c8ccac896d99297a8bd1a93736428cac23292f2f759a9897aab5eaa233d961235f34b30e632303d502a63455de5448172c3d1cf252103
+Entropy.4 = dea24d19bd79e90cdc97d34952e6956ae37d5f7b3ec14821101e82e5ebdd4e07
+Nonce.4 = 95df8697d4f8755bf60c7af5d5ae4a86
+PersonalisationString.4 = 6dab966662ed761b37f15efe3387c62ace3446295322de138757c706ac058d95
+AdditionalInputA.4 = 6a4a6d21a4800d5464a04fa10da71aa0c02c52a88ac531ebbad9a4d4b5a63185
+AdditionalInputB.4 = b6b2fb182c43a903713b907cffca85af04abcfa35fb0fa4ab66852a02ea3c311
+Output.4 = 14b83b155ed9cfcfdcf18eb96761a205cc63308e2f0c068e63b066a8085bd6936cbb8d5ba14d8973061372a5909f46ecddcf91b913b07b232e29914fed4d77f706d805fc36fbc665135ab3586024ed9390290d8999898b98b2cc0aa488561b587948c0fba9683d910e27720acf5a2f45d47894dd7fb2e93e9b0db54da736f2a0
+Entropy.5 = 4444ff211d265c17282c9fc6f2764280b9b5b4ea1858130389c403336aadfe14
+Nonce.5 = 193a1cce77e54299a3e878033d088f0b
+PersonalisationString.5 = 3dab537625e6407e9951efc7b973b1ff59ec4aaeb0c6e2b824a29f7ae8f8bc75
+AdditionalInputA.5 = a0695732cd80a797f47e976c7cd4ce16d8b5251caa760c05b8d8af708af1a694
+AdditionalInputB.5 = 19f17b170270f3a4cabad1618f0450cacb42917cf4d1419217a6574ff186a8d2
+Output.5 = fbf2936012c8699bdfdb961e97b745303324bd5bf97f6c682aa2f4fea30771dc1bda81c3a2612ec58bc56198ad7f6a7304a41b94061c62fb3299321524ecf552fbf23efdeb6ec99301cf52b830f515e8f9227f91da667ce3238a694c8fe4def4bda51e996d57734f24a7c699c59ccae867482e49aeeca6255d72e7f09a12f8be
+Entropy.6 = aeba3ed174c711b74e0213f49c02c0d1510372ca489d8628e1a55c646b2ee14f
+Nonce.6 = 6c884ad3662aba1fd335e94d1ec7b979
+PersonalisationString.6 = f781d9d51f77dda624a76ea73c0f9e23b8be8db4455672e3c1baa07823c04ba1
+AdditionalInputA.6 = 5d97ace9bea303472991913238745401790df08a586865e83fccdf052ac5fae0
+AdditionalInputB.6 = 2ed263134f95d83c4e18088b4b1ec2cb785f563b075b6992fa7e143769a821ad
+Output.6 = 3d8476a01b2ecfd01dea948d6237e1fcd7c918369b541e96fbb23b0254cceaebd90a459ae5bbb74823aa2ee5a5e1748aae604d29cfb65631f5fd405dfd66bbf76a5759afc2b13c1ca878772c1681a561e5f5a5f70a87070b4411712b4983ca8d5a68a37400d33e98e7f65af28a92385239f04e8ce43c3ce65ad234d43e331254
+Entropy.7 = a83a6346373b2f957b40a7b39f061b02fb07fac1d8096fa2cff752dd7380656a
+Nonce.7 = 4ced16a1ffd25b6d940b2b66dba5d1ff
+PersonalisationString.7 = 94e53cd05418f8f9e0bd36462bd935e6a4330c6bdcaf4a63630186c8fe7a63ca
+AdditionalInputA.7 = 61fe3257d38cb5fc1cc6f8d0c19bee3fe04a141ccabdfb64f005ed396a41d682
+AdditionalInputB.7 = e5f28fc44f462d4e704d6c07f9c7724dba3ed3205affac7a98365af4241bbe57
+Output.7 = a5bcd00ea1370743c858cc94c9f00f65229852e48df544295b2eb1e41a721f932038755e4761defe890702569c2af3ed889024cb6bae8fc056e866b73462a09797b58bc2d94bee0f0a23114946057c831f6f3b860c6b150df8f730449fbfa5b5a783796dd907926227759a4161f96ec06bd3dcd29d19c184309c6a4ac29aad4f
+Entropy.8 = c213db4e1bcf76ca0065fa2ddb46ba1b6e57965f06be127b38d1c4b4a8d7f56a
+Nonce.8 = b0f4151fc917433839cd65b761a98c87
+PersonalisationString.8 = dbcc5c472c52a98aff1eae55916c2d6116eb3387fcdecf2cb14840601ca09f8c
+AdditionalInputA.8 = f8c66edf70a4e0255d6ffe97eaf58e58b8c49ca36541c6d6fbb6f5eb49ae0b2f
+AdditionalInputB.8 = d1f6dd9b2d8f831e8a16dddf1cbd16bf82aab1183d690ce74c5a2a167ee90c0c
+Output.8 = 0a1da67b92e1df34109c9177261434fb628d34c82019f62570818c842a1b120a738f645f06889073116fda460760174be18b66566db049a06489a52d1d51881808bd338af6610dc685ca1ffe6e867bfa921de3523d7671821b59c0ae62dea7d79f31dde0ffe7f33707b1fb11e336f25cf437597744a9ebfb6df5dd795f7397b7
+Entropy.9 = 21a044e313428b929b65a998f54620e6ca26015a6110c81f530b00af0fc95287
+Nonce.9 = aabadc55cda3dcbc11bf2abd873f07c9
+PersonalisationString.9 = b797d26284ed7c8ae00deb200933e45c398de596fdc74750cc4acfdb3f12bb0c
+AdditionalInputA.9 = 2cc66c78657bfee4972d3a305cb18e0b9bb88f9efbeb0dc9d3cf278af0a90403
+AdditionalInputB.9 = f09df1f2ab01d8ec547fc493bc5b6cd20ad4335881ff5f7fb4a5b2ab5697a946
+Output.9 = 453873968e964ac0822b3f64c5badab507d037b9a66fbd0bcf830518711d93a425aa618b25971888e693180edc41306ad88f9adb0a0cde019d5c2c04ffbfb33bc7b03bddc4ff6829232fc27308c3f543fa8ece805d30b0d7e629e7e19ba7d4aa4e6c2b8fb7190918239afc6d5de1b088aa4a9a4f74c3092bcff4174f5ed46b81
+Entropy.10 = 40555cabd1d8990d9e4f082bfd6b511a9b0eff43405e82e794e512f21e37ebcd
+Nonce.10 = 822d4f55c5a11496e882a104f0a405ab
+PersonalisationString.10 = c296d39ef5e09d2572522dfcb0f877bee7eb3d5144a761c597e9dd9036e5c27e
+AdditionalInputA.10 = c621a48d502af2d475757dfca86fbdf0cdd5285beb99bfa3c7ae5682ad595413
+AdditionalInputB.10 = 9eacd5708ccaa65b3e8f3cfdeb2ce7cdb5523545fffb2a373a760212c7d48b01
+Output.10 = 4530deb1de06b127aef059bec9445cd4399e8ff1919ec4b6e42b807d68441e7c7d5518e53ec0afe4cab6df6103b99a3a6bb2b23b40bf0d826cb99e4cdbadd3b8f94266753103572b192adc4e8fc64b41ed5e8c81a9c9d02b38e9bb42676c74e4c1b7dd403b67395187b5c0041355f168e8ad2c604fa5d195c5716be43bf69668
+Entropy.11 = 57f18d806b5fd33b3ed7184d3760f5e5a1157495fae2cd94832e1c17c1a1b249
+Nonce.11 = c45022394c32b2eb630a3ed07439e6d0
+PersonalisationString.11 = 523fb8c335fee7b217dd729ee37c3cf6db2e25354763ec6d49027c1f4a3f5de1
+AdditionalInputA.11 = 67450c806290fcfc0a54541c2467d3856fe819a86ad12c0750878228b3bbc8d0
+AdditionalInputB.11 = 1d28c847c3e68667394b9104ebe83eb840c07edeec94dbc485676bfd534af985
+Output.11 = 9f3fff4be1b601b4636a3d15bdba81088781fe389c49bfb33ddfada0acc11490d707513107353496f63250e5d288b7961ad1320fa8ceb0493c2839f987a7b1118e65a77e8a3813d2be19395951a24c7b6f74e8a82436814db0dfa02b22dfc7e7d4b4568f3faeba4dffef5055a6010c50a878fad0485956f350762f2897725eef
+Entropy.12 = 99325d0905ace7ad3ae6c8edb8a634f82ea240c5603207943d7b2b2a0c5e4b78
+Nonce.12 = d3093e34b298c00a24698b808cd0bd4c
+PersonalisationString.12 = d5292bda059675853fe99c506611f5cc6a050b2568f1d96b0878859a86b7e94a
+AdditionalInputA.12 = 6d270cffe63788a0d48007ff04420d09c630f5af89d4b9a50598b0909de06559
+AdditionalInputB.12 = 5994aa92dda4498cfc2382987bb4989b4e80b96882fd9c8a56f62a7ebe91968f
+Output.12 = ddb71dfb398a9a35310a993420d82e1dbcf8ff4a5dbadcd9f70aefaa0ae576ee5a383d7c8a118c1d89268a730684a87531da5d732730b3700764589450fb4b1ddaaa31537e47748e28c69bf53beb6b2e66cfc8af1636c439971299c6a771f4b126aa1508adf8e2f6e0abb24a01adf9b1ddce28e838f8e93c977003ccccea67d5
+Entropy.13 = 21f48333f24396f8e84a408fd3a0c396d1ddb6e99e29ddc000b3b8b9879bda19
+Nonce.13 = a86258317db03497bd588f6726611667
+PersonalisationString.13 = 634b5d47bd8ffd18a07ada3d63d9ed2713bf8d330e2c17879ba51c4862c46ad4
+AdditionalInputA.13 = efdd4c50cc73ff5553c9c385325c79e27ecbffc7f96ac69d5a75d772a0be0fe2
+AdditionalInputB.13 = ebe0256bc9c42914df8c2be8bcd43b7b7c10ac28f27fd89880600f7fadae88d5
+Output.13 = bdf7581e00f22d104602b2b61240de26b97af058cd143b6919c334f2d095e2a2aa6a75670a849a156f41f7791b70d762b57f921db42ac0527165f4569b7d17a9647c1123cd8edccfaede16a40f311fb421387ebfe9a5725ea82b2f1dcc88ef886b5db0c54ba6b2213671c69070a4dd6f9b27e4cc115cb7dee935f1f481b02f70
+Entropy.14 = 2576827a528dfd324252be2a1da179bd64f1779fe56713a45b576053351b96c0
+Nonce.14 = 31a04c75f5ea01779d6b96e461fef171
+PersonalisationString.14 = 98e288b1da6983d32a11d24fd4ac447cca253d069e2388d6894054274badb783
+AdditionalInputA.14 = 5d9446eff72d59529a90b498d8f40983b3b2904f63664fc0aa1de8700dcbf81f
+AdditionalInputB.14 = e19707aafa391e8622539d52a05d930292bd0f7c17825dbed5fb7a2f8734081b
+Output.14 = 6ce2ae37349cbef9ebd1f9b85485810a22d430d94abf66912dd7b6cc751400e777be2f1cebc19d65694a456b2c6429cefd95eb934030846708d50be3b274c2f7de299f3c311038491f271448c7d02ff51de048fa1184e8ee06b7b46a9f123daecbebae4a2183dc8eb6976abf0dae7cdbea6017cd1500f37dfadcce0c1956ea87
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 8bb315fb43de660049bfe98905376379a133e2936061a58538d7a3e9f9727fc5
+Nonce.0 = 1fef1c133df5640b0248b246ed9ddf49
+Output.0 = 705e1e0dda60268015dcead1a889728ec6d079582eec9acf79e6fad850c8965cd264d3061756d196236053ff561972e231681cf89e96a4e1f6b074f5c6f0cb2742d9b5d9db3c60657db17e15b86eae41626bfb62e0d58fdafbbb3e6563407eec8f5d166d15dce3eb0386444f16ef72678d549d3c96c33b0ee89802e50e3b93a1
+Entropy.1 = 3909ccca9c088242777e7360deb0ffd08305edd8f2cc975a5766b1cca4edd23b
+Nonce.1 = ff6de7667baee1fe86b57b0197257b7b
+Output.1 = 9310fce4493058822a5502fb3f6d62568cd003f485a95d07f02cdff93750265771c0d58abf73ce024c5f8dca7e8f37818d51c6c369d03e67850c4904c5788d7923978a47a4d395d76809924b8366d50eddc740159949269f1107d3295043a0f25ac0064bec05cd868b5cab3fa55cd1f3bddc37048d4a30b05ce598dd1f9f2c58
+Entropy.2 = ff4f40e7427160c8ff9f802ac43053be76bfe72ea3f918cb1ea160956c5ff42e
+Nonce.2 = 18eb15e50b958a52fe4fcd40f259586a
+Output.2 = 57942a072f37854c09e1cb83969397c896f716a3b593c24460fdd3677e06db3d6a6e08fb38b0e9eb7f7ec3cedf29d5ed91e261c9f7f41481eef75f1b005585909ed03e5f05a8af32de5a2378c32088df022d1cb3eff1ed0bd8b9572995760456f9ec1fc21e1690948e5fa9c6d6b95072ae8c8436a781e062856748da6fab714c
+Entropy.3 = 3c9c77a0983bf33660e14dc595a39a589cf9ee93330dbacc7f9b090e62e09099
+Nonce.3 = f52b0b2a38a6c4af309b604dbd08d822
+Output.3 = 24b811821fb55cf52f18dc812453e2379842e3674b59313b3cf1c9a397e79e0bfedc60db6d2ee97c83fb3370e6c6d399106f9897b542cddd06a9071aa2746c1442b6ec7762a7110c8c2ac7d3d94a1744a685c06826e2828705e139f78e6d23c3f7508f2ba98e2f47d47ab2e3b0d85a8a4d614899178643ecd0c669ffb39ceaf7
+Entropy.4 = 773d008ee1a1b0917fc3da03c76f6e52e74748d7869a22508e3b4cf50c0015c2
+Nonce.4 = 1502e2fc204e59de9ff39933c429d154
+Output.4 = f0ddc5760e73b7fd5bc560678b006711f25af13d7d05c1f2c7e1ca462b3418158582176b848b88781a583bc7ebde955bec90d9f3585f6e7e139b4c8a7113099be4ca75f51d4479e62f34a3eff1ccace97e7b3522b7956505c5e79ea18405aa1a129f5b5650cd6d9cc1604e854a6af770df3f984e47965119299173fa39f6163a
+Entropy.5 = 193da0a769483b58b66f059072fc8885d62635825c42216c034a8febf65001f1
+Nonce.5 = f597da9635ca4f395fb99477b5447cdc
+Output.5 = 52c2a48f73a509cf78e1fe5f2eab809140c5ebcd24a356e8a6d8756c8f169d817bf1e3344e2d79ca75843263455cd861a83866b64b1ecb2caa96b775bfc8102058dbe1986d1c1a96df3873da9a64b82515ba05751b32f08f19250ea9bc96d81e8d0ea0a6f2d36ea571724f1a7d30aa0fcb098e2b79b4556f7b68553ee6b6d282
+Entropy.6 = 8b0ab289c5d2e286f8ae42ef04a4198bb10c11031f9d3ce49e3ebbcd80dc0e7b
+Nonce.6 = 67dccac1f5e4e921c9fdf450f9cdd665
+Output.6 = 0f7fe7d5d75796201ab88997fe48de8d1e7f617c68b00f3f121d5ed76052818da98f34d3d0c91bfc317e7226619692d222b88757f5520da601d50729d1467ce6f74690bcc0efb48f3bb904ab4b6f5d8268370b614a7d60ce58897f0bce02210afbb57e5699c783a8725c1974ca165e70c46d6e56cdf2d1f3acaed83768ed9c39
+Entropy.7 = 870dc6dda31e7b6b6d8c42e4662d01a9b66db626a5fc00cc16d4b70e7dfcaee2
+Nonce.7 = 9e18a3c040e3f380f3f150b383721b03
+Output.7 = bdd6083abb14ae806c4dfb3c415d0e65b081281339708fa35bc08bd7788b39683ecc597bef877823fc32afc868dcc3ea72576de3cfacf5681ca450aa8ffe32f3dd5f16136c76ed05918b3588de8465ecfdb316c5bc3271a9868653f906b976c9558c2cea41d5fc06eae8ea11cd5d5129658a047852d4d4bd6a29b7d03a1d9a30
+Entropy.8 = 6314cbed7f60bcc38ba5c68ed66a6e540acc489c64a757e8ffec995a412f66e5
+Nonce.8 = ed635d56e7a0e6ec4ef471c0809676cf
+Output.8 = b009bb2c49f06a1fa12554e5dc8d27557658512b70f3a4774594dc71b3c6fefe9c4000c9a4d604cfd1bfe54446dcf59f416382568ca7e50b0e4c1a6942ad4fbc852c363f6c8f47e19e23edf6eda5fa2e9bf33f1df10d2549cc27dffdf93acf638662bdbcbe9d3586df89c22f91d63db4a216b28fa5218edbdc8f1301421901fe
+Entropy.9 = 3a7bb4e4ca42c61b49d4f4bf5fd2309f68864f663090c47ae014c38930c9dd1f
+Nonce.9 = 368e34c93980503730aa8fa8bcbc342e
+Output.9 = ffea14c68a3121760c7c978d2e9b7f7dd2432ebc78b8e82a8e542893f4be5f9069a30eb425d51798578ee8ffe41003039fd09b58d3669c1a0cb18ba6a7f939fd62007da8401dfbb46941965ab79ba93e0feef9de42bb658aa9b1f4c2a758ebe8da978fc35f905d4f9688ed6a03c70b1fb6d76a054aa5f56572e34104e676cb1d
+Entropy.10 = 4230265fef6d8cb9ed4472e8f1a1a58bb7af6d9348a728686244c362c48f60a6
+Nonce.10 = d709d06ae6a992c14b18353cb5ecfc45
+Output.10 = 4982902068289b598cfb64efa3f5f3f1edd06cb14c4d636c633af56b16f8fd1c4a285517c7d6b4e9a894ce9013a8c8f92fb951a335dd464200f0734968d286c8e111ae946067a7d840b98fc99ae17cd314bad538079898e55ec7d77a6d53c99b313745d16b7f60ba36eadde1c1bec39359e275d18a345d9562751991e28d34e0
+Entropy.11 = 1b1b02ab5ebe5500732893112e792c4633e61c5e20d8f437394b8e82c35e0ce5
+Nonce.11 = cc7579c3164a92f56ad93bd6091e644b
+Output.11 = 392ea89da64cb6effde107c6ad12be67189979a145d03bca6ad7dd23b8dc48837ba3719a297141839295e3d41bf6d5eeb54da403e1451d402497649a9a98d66b5fbc0e7e38d9304b5e1ccc1204e465ab0634e1f4a5b3a6b11794df8e96c4c260acee65379e73644845c150679fa178ff8fe5557562ee2a94cd0fbf965cdd0995
+Entropy.12 = eceea48f2056736e94b43bff65c091b119d9c2b34a78e8bf4f3de9a44cd6bdaa
+Nonce.12 = 554ae80ed94a3294851b89fc20e73ba9
+Output.12 = 490b1f1e861d4eb98c282edcc6bcc7b0eeaa8892c6c44ecee0dd3fb5bc0ce0e4b8b24a927e256f8fa092720009c90ff2d2b684eaada7316d0b4ef83cdb8e22a3725796a2b4f557e9db98c2f0b29e30315241dd68d3fe889358c427c510871c797cc263f18b1b931c03a2af2ad315603d2c53b3d62ce0e1e1b4bcd6cea2655a10
+Entropy.13 = e610dafc442915f0c59bc9b5f6a05e297b67d6ae410cff56c4a39a8f2517299c
+Nonce.13 = 44a14f823bfdfab85bcc4a941cf9a4ec
+Output.13 = 65b3fbb62ff2ccf8a65ed9881e07f1d2d0c734aca7f203ee301bfccc4c4669ef4bf2b8491289457ea618196c2465a2310baf410835f94979dbbb93a42040f36ed162777664b475d6df38b00be98110002d74614322586a69112bfbbf52f31aaa417e5e729052db13e3328d97ab1bf2fca3bcfef581c55692fa17e0090d7e1a07
+Entropy.14 = a7a1dbf7f828555610197e71e0ad563b8691589c5289ced03e9ef83b6f9ff938
+Nonce.14 = 4274788c5d80e26ec1ac3a57b9c7c0df
+Output.14 = 5a907a26c1ef588219d4c69fcf4c5c283ab148a77588a40b323bd24e6dfb29551c4b6116c4d61349f5f8bd9ed497f38b239c37283902beb3c9700c768fa289ee4573f92316efb860a5ca4267b328f03c13138b774b4b9f7516003a699f7a0854a0efb045a5932753a771c2cc6119202b33336f10edb715bcce1d20ff503dda01
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 63aeb1416480639ecd17cb6ceec14cc78b3660b48e028bef7d1bf2941ba088d1
+Nonce.0 = 068cb2383db7997a69f5e0b30a09e402
+AdditionalInputA.0 = 35ad8aaa5845bfa226659044ca9abf6cbe02abf03df7b897f4ecfe70821e66e6
+AdditionalInputB.0 = 4d4065a69b30be27febcc97fd5299bbbab34fbe48e1cf392561c0a3ef9852f1f
+Output.0 = bd325ad3673c1d9530692c4454e0f66ff6a767f7b198e17c6f00e92a073e023745fe9cad7d7eb3bda115ff7c11517475e933f8dba00282c3b0d62a3831033bfc123f8370d21b08ea21e33566ab3e6f3f0111fdb9b4db8f7a0617fa7c803e776d97830c911f3483c2c55700d1f71c21e03f563394208b2a03508c5e9103c93c4e
+Entropy.1 = 734ceb9a6f45a559c05cc1ab095c4f561fb2ad0ce25999016c5e8874dbad72ab
+Nonce.1 = 647b6d99ede2c06b3a1a1c8ea280856b
+AdditionalInputA.1 = e45a22c77574ec407f3dcc31b60124b87cc3b78407a0c0dd25f25c5387e9deb1
+AdditionalInputB.1 = 6603bbe82700d219137f64a6ccf165f169dfd6508a33cd23a08201cfcf20ade8
+Output.1 = 634ffb5ad2fabd33da3910b8b7a748cfbd91c29704fae6bd85bc4d73f01165c1af97393257efe33d326673a26a7a448e725b4ec17ea63b260df6968e6431c98e3a72df8b1e64eed0ae04adcd8c4d817d2ad363ad47407891e962ed2fc0a4f3aab7c222197859a791c3d3453e5884563cf74b771e8cab0560c88de34179989e5c
+Entropy.2 = e2e0e3cb832263fa1bb2e95dc7bcd371dc6f2aab8abc493c95f402ce2cee6656
+Nonce.2 = 60e767ea37623a30133c0ce7549e6d12
+AdditionalInputA.2 = f641397d38cde556f4dc902707ab44c65b4c0590c1367adee548ab2d87c45865
+AdditionalInputB.2 = 6d2e2b9496d966f7fcba0cec8475c1dd58379cadb326e84c2925cb536ca543e2
+Output.2 = d58ed53651d081c8c56ddfd6265956e954af3a43c7d0c17926335dff7a0ceec231a5a9251ec7ace919f9d5584439b007424d2adf67664582722dcdec60ab67601f780a1cc4952ecf00477cd93eaddf94bddd0feb3f60786d2e4eeaeec91975897b0517d78a1497ad614abc0bf88b3e856b4e07fba8de5871f79f8a212c3c911c
+Entropy.3 = 3e4312079b57f5161781ed08a5d7e5a373b89c848807fcddd95391ed67c332bb
+Nonce.3 = 823bd17bc73e233cbd61bd06f27c850e
+AdditionalInputA.3 = bd001f6a383003d56ae28def7dc9b6d9f0a0636f3f0044ff6cd31e4568cb8d40
+AdditionalInputB.3 = 92f25bdfbb8dbee577000edf6af0e107182c815aeb95ba1d76e87ee57130a908
+Output.3 = e4f46e23f87c1160e066bf68968856b7da50029445ec56b6057d2fb99ea58d8a13129c54f45c60b3e4390e52cdc301b4fde169971034f56b4ceae8d4b4f32f5a45e75b7650cf2f53118ab0494720320fa0a39af585523feb45019890fa30507806b868f04f3be1722c44b0d8a5b1de558bec795de71a8534a84f0592ef68d7b0
+Entropy.4 = 5b59736e2ff2fecac4e3fe6ca38c1d156cdb1e436b684eff3b18ee3adf6b1863
+Nonce.4 = 0ea312ff6e274cfa87eb65550342ccca
+AdditionalInputA.4 = 61dad6d9c004dcabe17f434ea6dcb2ee9042b3f7a2418016a6eeffb2742a170b
+AdditionalInputB.4 = 633ed383277b3fd3a87a33229b7b8b6d9f309e2812e92cd21ef406e000bb7597
+Output.4 = 8554e104170c5a24b0c6befbda4abd4832f449433dbc597fbea375d887aa968cd44611103842c84f427878bda0aa13b0802a6b062d3900c7a1e56c113fd0d7627036708436191bcbcae76bea72fba68d912a5e365fe00a7d0a49f3fa282f12da7534233a25eb148ef270cb8a6256090a633d90e90739ba81f21dbe513e0eab45
+Entropy.5 = bef87a4bca98a155ccb67988ebc885aa56489fd074d13f517a17cecd8cb04cb7
+Nonce.5 = 3f81624d79b7f0cc4b69c5fd3663474d
+AdditionalInputA.5 = 06f0ef0c8635be4d159a17415699d36ff082a9c469ed566241bb2aa5de01ac8d
+AdditionalInputB.5 = 4650561c2130ade440e3ac3301b295ee58e89501e19989a6dd76ce4951d1b1f7
+Output.5 = 4b13b45a6b3bbb76724f8b04495e96a07fd31b9815f85d25666d9f8200fecc29a5e63c58af7e157a1eaf31537eb043de493487299711ffe5ceb26b2e3d76dded3f71240b36068ff7513ab39989f7bdf04b0aa589a91bb62b0acf240e92c2a680b25b207bed4ac1f348a893e262bcf469b01c72436e72394a1ba809638573d5a8
+Entropy.6 = 159e8f04a0b5bfc54b95dc2dc95d06fb329db7ff1a7263e549796ccd5534b2c2
+Nonce.6 = 515911b912cbbbf8f152e9625b49061c
+AdditionalInputA.6 = cb4045faaa85bd0981c5c1a4f51163d5523efe3e1e6e821e82a71eef515f80e1
+AdditionalInputB.6 = 3ce43a880c49bae46419212dea9e0c807b9b8ca216643d8899aee8a850541c7c
+Output.6 = 37a3cd5b60ea5bcdb39ef1f3b4b595ec0c609aad55e27053dee44aea6ae42f1ee5de247eb0324307848d988f6d042b9e7dce2db732be28b172202e82303543f52698cd164b2314a0dfdf032695b8dd98c83532ee104749308506ee8938a0fb316cbaf2c337fa581c951558143caa9ebf094d973c7ea774e11e8bda9a36e749e5
+Entropy.7 = 5457daab7b5a0254a1700359e45b093972242c967c76696b2019df59b5b209b4
+Nonce.7 = 3e579bec2c1b263d010e51b7a92c3079
+AdditionalInputA.7 = e0cbdbb2fa88963ce02fc8d585a08926c7bebc803f1ceec4fc1604ce01bbf530
+AdditionalInputB.7 = 1920881620aa877047bba5850dce86a17c4b0ab2dee5904922b4ac5ba4973e87
+Output.7 = ba062bebc757ddb62c5f21d262c44417ec834dba37e81f33ec755de184f73d7f922c6ab378cff9ea412c5c0bd003ccc280299860bff326d2d47996914d1751b4379a43b6891ca578034d5ce5c726f2a6bb6401de67b26f465ef8a9de0c15d5d861742e48bbcd22df2bce14c6b831040633dc8437b9b6a317431ff412eb689483
+Entropy.8 = 2f53d66ab1acf5f53d845c0adce99707e2f9819847ce07bc303dfa5eddc83de0
+Nonce.8 = 4a512b024a947cd5b5ec13da59f08881
+AdditionalInputA.8 = 47030202d5078bc2e99a8c48ca835bb41393db3cca68310f58d63c8e26beb5e3
+AdditionalInputB.8 = 2774c7b6e2ae784fbe756e067d59d5a493d9983a10704b6a6ab938b6d4a2e390
+Output.8 = e2d647dcf1af9bcb59a3dc9a9b94c7b0f1d7635db0af00263b2b545359ec445d1c6a1d5e968b7be9cbdfada681bfc442f65392805949b49d8b9d1d90f710abd15891e2f9863569f7654d9205466accad45dbb2a08fbd9e449bb1ce3ecf3fb214106e651582a5d7ff80fa9fe4635b79ce6b33688fe26f161d2441ae0a41996fd3
+Entropy.9 = ffff1bcf83a3e162ad10ac026caeedbf5438db6932bc0d0aea62c919cb98d289
+Nonce.9 = 2d54df18a916e1b118a8f0da749b4c42
+AdditionalInputA.9 = d26a700d5ccc8618504f59c0bd100515f6036fb34926a5d0f0c226f2cf9795ba
+AdditionalInputB.9 = 787e1f5b8ddd6bed24dbb7508ec3a92110eaad45d883e546ee46c62bc0cf9888
+Output.9 = 9d941f943a3aa0ccc342b134e6f5914c76b2b21a589280639cae9bd52c7919120d9c74b5df9b99bebbe63ff8b0d6b20664c3eb00523dacb90968bbf0bc5b6a9ed53e024a97c63499a7a73c1b509975beda5a3528663071d6c97a45ef796f187aa8d83c41ce7e5d687a25ced9818d31b2103a72bf6404eea253b2342ccd193218
+Entropy.10 = 524650bcf012792ca955ec312001ff8d453af7e556984bcc44707d5577641b0d
+Nonce.10 = 30f93f55a89806747171bfb2d4da347b
+AdditionalInputA.10 = ae68e720e75337ef6b2eb086f3dde3dabb854992091d44d2e5f414cba6d8b0b3
+AdditionalInputB.10 = 0e0f9371007aee353a9f2324b43578fdc4324ad0241b63400e03460d66eb0cdc
+Output.10 = 862a9f86597a1a930f317de9415088087763de830009b4b30695aa58b04b46db17c1cc816ef5c70437e0d925a52139ea483cd7d0b2119454be5abeac9565150858ac5504a9d3b49ad7085f720944a704f000e26bffbd7ac09b15e9aa2eecf56003d452bf832c032e77584d99043322016e2f4fd9e3db61a74318821ead14a132
+Entropy.11 = 4d0f84bfc6f3c7a8ac3dbe37f599309f6df1380cfd70b6accfd28290142a8a6c
+Nonce.11 = c335a2858b0db8d12c2545234180c0da
+AdditionalInputA.11 = 324a329c2df9cc02117f05cfd8e8943300fdbbccff400a2b8acbc3565232ae12
+AdditionalInputB.11 = 937e2c9c139d9a79a3e1b573ecdcb51ccba3ecf1ca56047067646a19345ed883
+Output.11 = 79e2595ed3b0e146e7dc750e4b8c4747560b715708a7d4d254f92cff581e70a5a9caa897b9317357e27ed7d4901a3974951d88024560e1c2f2bcb8a3b407ebdae8d149afd4958b941eaf1a0456856c2fd7cdd89d4e556633dab095e089441dc46cf0df676908b04fbc450957fb91e2b005fd3529a2b82cacbbf129e7ca573564
+Entropy.12 = a2aea6ee39285bd1aa410c1a4d019cbb91e408c5c597c0de88f780b543660069
+Nonce.12 = 8f77489159b279b406c5a3ce7b0cccfd
+AdditionalInputA.12 = e1342c6aa402b4f1d3ae7e51a86ed3ca72738e1ff6874ca58548162023096303
+AdditionalInputB.12 = d77efe99511bb301506a34e69bf726eba4f1aaddbf87d1af2fc55ebac73f45f9
+Output.12 = 238dee65f3e1a111a5b9030d1fbf2b900b632d2e3e28684a1352978b2939bf863d2e5091dbced8297234bb8f49e59e34b3bf38b4f3f2b2f61bb5989bc1e0f425857d684a843286fc8c302976f2f237c01c3794a10ef786fb7649f0a0aab523cfdb8de755ab4f4a397ce541cd718dd3fe10db428b00d3acdcb80b0c1cb17c7c88
+Entropy.13 = a18c44693042f527c948315e2be58edf552727cf44aefe76debef2c83d19950e
+Nonce.13 = 4c6c6903a482457a7bb5be08a4727de9
+AdditionalInputA.13 = 1886624786e1a2cde983ec9286f0f3999b55d778257436393d19cc25abbd14ed
+AdditionalInputB.13 = ff4c7080453d152a36b1284a8eb1854dff5f29f277f36a9ea8169b0282091a65
+Output.13 = c00f3b2d3e62b2f7fb082ea4e074980931a4abd84970842474da319b496aa2f6568b4bf1616ceab1de1469434b528f2d621a29052dcb92e9537ea266a9a41c52141ca6a16734f592cf99dd4ff652a8f0800927b9632d01bda8e02544ed978ff6dac3034116d787e54bd58a9a653459b14d9c27966886097fe925141f3b188f4f
+Entropy.14 = 23e264d1c47ef7670a3f95f4b17d8ffa06fdfaafdbc5190e75c55debd6cf805a
+Nonce.14 = 71fcf2bad21c4f472d1d50521372de2a
+AdditionalInputA.14 = de1bbca12357943b4489cc7209b3f063b51b91acc168ec5e0ad88048b65d1b06
+AdditionalInputB.14 = 6ddd9aba4f100ef902ba50adee53ef44a4f45564c13e774e69557e36a357e7cf
+Output.14 = 544ec80a966644454886fb97a0f05eb6a4a25fcbce795b5e5b27ee06ba14b7de18dbf54f80a670b87c76c336ac9af16c8958ad6c1bde9a97aa4c1ab5823d24a53c64f6766ce6eb9b7085cf7282499c37fc1e2e825f53bc357bf36d5901e0ae93cd3bd821fa18b5aa17548560f7ad6ef38124814fccf9b2b89de61cfc27c7269b
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a4857cf33fd496f9e7171d3ad64b6a35c5ae44af7b87912bc1fd540722796137
+Nonce.0 = 1a9c73962f2f3f2d4790a58eaa3d9096
+PersonalisationString.0 = 5e3677e8e9a43ac8181622b42e91c448280896f55cef2a9734e5e5527bc530ae
+Output.0 = fa82f560fb8bb4ba24ec563fb03be58792bf3a11c9c60c025fad0aa4dfa68fbf318ab0b6594be18b07bce52d227f50a44a650ac4df479b969d5b46ae60a66421dbf3ebfef0737c71b5d76b7b616bb9764b2edbd87ef52a5185fcda3c6a6dbc4270bd61c1bd50e606556343017001a3dde98a265f36ac3d124cb18a5dcfb37940
+Entropy.1 = 983d05878c13076379d2d4a0b5712256a7ee1c9fc9865d0023fbaac065077929
+Nonce.1 = 68379638e3ad024573e711065178ca7c
+PersonalisationString.1 = b4c34d7bb19f2b4e7d1a3c33f3f036ec27a874f0d24fe4f2c33dbd3a85d5596f
+Output.1 = 5e258d2f9270c6daa80434c98cd1f05dc26330b8dfa6d53d490bad58a96ada5b8098bdae39f4d97fce8f561a242358b832df3d2a352fc5ede95f6d041bb2f8ecc00d62bd358d3df2d8fa6e2841ed515b96c013d3fb321aba54c497c29422cb54bcbc09bb8906a03d63bfb9784c0fd04072d895c019c1d69ea5346d754601d069
+Entropy.2 = 43dc8c77c621519733c71184fdbe44c7ebd4bce8786c8f4cea5844c29610231f
+Nonce.2 = c606c535e068a6a79eb87e25c6efe068
+PersonalisationString.2 = bb15d65d180c4b5de14457bd6454b31c8a15047460b153976eaf65104c9b1e04
+Output.2 = bd4a55395f1f8ad37a7a7f3476b5ddb569ad42ed57d678f1e8af97905e4d151d3511d2db6b8bcf313bb58675768f472ae96171a0c362c4b2e8548cb3b4c9129721e2c3e0ec8d576935f150fd8c79eeea7d6cb25b54c86a975546edb32df6198b2d47138943f0379391ce8b5c7a20faf0d268f21652d25187afc04763156feaf4
+Entropy.3 = 56754c7b7825c717212481de3dbe1f11c71332eb01f395ed8d2dfc681ac95181
+Nonce.3 = 102bb5e8ecfb2cbabd0ccde543763853
+PersonalisationString.3 = 0cbed991d2abb392cfdb311ea5ec9c9d01a48839e5b216e58c3a67b749220982
+Output.3 = b4e382281c2f937287e622f27ed8de73cb67d99227265c191ab488573ebdd779e8466e9cbf26be26fc838c3398ca8fed126f755398b93303dbaee84ddb6746ef1cc1d8c75a38ee2e43927d9e295ab3dbf070528d17642b4c9fa439a814b41d122591156715cd0fe54e9bbfe03ef3974965415976f20a345f456e14dae8848b84
+Entropy.4 = bed1f25fc400357a1d25c2a54d65b9d128f3ea5c63cf46fa4b0328ec31a4a8ef
+Nonce.4 = 1462b598c9415f991e755d586929e325
+PersonalisationString.4 = 4f6b1ec3f487f7341088abec343c51aef8cfb60d8d46a0e9c68d187da02f14d1
+Output.4 = 0f9162d9f5321552f080f9453203c3d589554c6232f04de0e3868a2adc2d288b4f4f03d118e9f7fdfc96271f77894eed97aaccb613da415206bf2ef4036ab882964095eb1e246e78890651659a5104753652deb54e822543e5c4c6bdd8164a49d5478436f1e74677d5112bdfd59dfabe21a8d973368f738c512aa66d0f87071a
+Entropy.5 = 1dfbe58785ee77f0ef206a25466cb27834f314ddec65c1eafe19aee1bd86c623
+Nonce.5 = ac5d723fa5faf45b114cbdfc42e2211f
+PersonalisationString.5 = 40e715a969293a45afb1eeeab4e8b11d5c043cf58a8a596e1fdb626d7f8fc008
+Output.5 = bd6bc74b7a0fd49fec46cb4fcd5940a77a1ec93705ce356ffdfa40225fc728f3cc8e3918dee65fd21dc94b6926407e7903a17856ef1bd761e6d089988ea5b0a449c09ee0de8fd4489dda793b96639bb35188029a79e8c8b337c0c40c59122c47313903068da8b77b21318b59bdb34310d7c16ec91cf46a69a567099d29afabe5
+Entropy.6 = 7edbfcc031bb2f1b6915c4a7829959547410c2d9ae72bcd807905c7cf6ef3bad
+Nonce.6 = ebde9ff05b417e6285b88eb4714ed97b
+PersonalisationString.6 = 3514eefe53e06b85cfc7c9e56ac4aad000000557420b79c5c17f54498244af86
+Output.6 = c8e418b8ade328deeda4e595662f4f18edab051f799df6d48641357035cf90147b2b63b452f6531649cc80b27da7d1b25a89979498232cb1695cd6e563c50cc9b7895e8bfbef2d6a098670d630c8b96d7e29e376e1723a617436a65cf9ed730448c251438025964a01dbf6221b9aaa1327add8f4544e6fa15f7f410def8861f3
+Entropy.7 = 1909e66624d0581dcb233e385509d6be6ad3babef2383869df05b8d4ea6470e0
+Nonce.7 = 901d6f4340b6a62c9cd6e4416579b1e8
+PersonalisationString.7 = 87e0df2f0382030b9c075a7c9904cd2373c23d9b91e1a3fbcea1390fb2d3b94c
+Output.7 = 4cd933385c35765ae534e6856b27db712bbd3929bcbbf1a178279712e495dfd0dce8badd62e2e29ac17f00b2bd2319aa9e46f43b819c48af364011543bdb3f96b19687dbe5ad3afd04ccdc888089c3ef2e5b7ee9e17520e36409b24007633a09f9cc1cb34ba5a403db103e987148c24f6d62629ba82dd8ed5ecd189a238e09a5
+Entropy.8 = a5f94511ff07b6bbc622f0f3fa2c6b60f285b51122f8bb314be2af0c947b54c6
+Nonce.8 = b05459791bba70d4889369f43567911f
+PersonalisationString.8 = aa196426a45d6f5aebc5792876e55beeb2e54d2a828952b5ce925a3b6d0c8cd7
+Output.8 = 874e0417b59921fa32983c7bc3bf68a1efa3d954d1fe479bffc35f57e919581dce3d219707fd7a5e5cd236997cc57fce7d305172864228c23ac8873a2b282ac90d2c0f32bb900c047370f086ed06d3cf0469c3b82d37dcfbda0b1beeaa9c62329555ee9a5367221ecdcad623a778055e5c0a1ebb1d8b454346bfd1a78572cf17
+Entropy.9 = 95c199afd85fc1981ec2aa6fede6436c28c32eae52e6a44edddf1f5b4cf7642f
+Nonce.9 = 8dedd5c32085a23c1c6180f453cb4dfd
+PersonalisationString.9 = 3a162000c4097360c4ab4137ca5631c1c8e025341d1b62efae92fafd59a48e85
+Output.9 = c6227f19d479cd1fc49dc13dbdeeb0df06fc9f6ce11c6c1f3c6708675140463f2133c8bc6ab6ebd8e9461e14f75d2939df0df46e0c331c3043aa04d23ab93fb0cda15923e071087b22b5ba63f9484e7e496b2a9a9e8823b9a8276ab846b4c9a9de2dcd6691fbef71100ce82ebea79418b870eb3f8fde931bfdc6258f74b72025
+Entropy.10 = fcbcef50028bdc7ad212751633a02914372c6129a08a006a6018e4a347236a87
+Nonce.10 = 01f3250094b99f81778642d3be752d10
+PersonalisationString.10 = 45508dce23e691f9e70c6b2e1b2d3ede36b70e7ad23ea78db232666856d2339e
+Output.10 = ba7f0b27f7ff1af636b284e964c4cffc8ea96e5d8bafde594fa95b3508af6901cadbe73898200265a4aa7fc4401767da4395b83bfa1cc331161f13a976946eb5dc6fbee959ca7db4374a4a9456939abf1865a41b16c146ddcd655878011182a8d244c6e2b36acc47b3c2e72f9c03015463ab9afb56c5e169d27a8fd61dd2dff8
+Entropy.11 = 6dee1a672ad15390a3aa8726f010069c9b7fe9478f14e18ec3f4c342ab133190
+Nonce.11 = 313177543441c2ff222d912ee95334d6
+PersonalisationString.11 = 898c40045cedd2c82de0b0f83802aeb3ef575ad9635405a95c8fbeba921c1491
+Output.11 = 131b74ff3efb83e60c5222715eadec6e0e75e6467eb45a31f253b63c01dfd5029339a5312889aa038cd0fbd16212324db31556fbbb06f86ce99383f237a194368e3540bf8cd4c6d3dce85dbe1d13f6a3aca30f93093d9d0c9e73122d1fa718b2a8d245fcbb8db13e89e417fbe95474dee914a4746acfda507403b9c222070fd0
+Entropy.12 = df6c135f471686d1af5ef05f297f25595c5f05e4fd502a1f693d9ec44df1191c
+Nonce.12 = f6ac42f54beedf4643e4423892b52e8a
+PersonalisationString.12 = 2d8d07894bb0256782f300054d95cfb51a9d19fbfec922108a50cc2995aa705c
+Output.12 = 34ae97069cfa8629b801b8db03f1ba0db19d9322b817a7eba89c3cfd909cf8f07ecc0402ca9bf2c894c4d3807bf3b9b4d674ce169b2a26eea3ce9ba64994dcd393be35eae7c8ec640185aa290d8152bdb854bbadb33521f897553b46297e4b2af2d0a9b1743ceff7648d60a73b4f5805d5f06fe5296ebdf0d14f430e7b2f2f3e
+Entropy.13 = b92b652bd6bbe5b5dec2e1d736f9c90f1b1df723952638cc6aaa8023c029a49f
+Nonce.13 = 37ec9e6c51a7bc6bae0f526c83c86bcc
+PersonalisationString.13 = 529cda96958ff83d39a5fd469834a0c140b3efb8e4cfe663e2d5d2ced7fa7616
+Output.13 = 052bfa2f45ab5459f2911c0a606f90b91124eb6bd1d9af30e56299127129c464bfc66c816264c8a71f6f1fdf4f2395bf00942cc23b99d05e07e92ed8c172de7d608db41b35154dbefd625d06172dcefcc0235dd567d1fda69d255aff1fa5b698abf60aea6c0e7b13ae3898609ecbfe3c90b737ecd7d2b9a3dcedd647bbf04181
+Entropy.14 = 46d644ff515f49a39b743bd15469d7f96b2737037120a2a9279f564850027a3d
+Nonce.14 = ab7843b73ecb4858f2cc5e9dfca803ef
+PersonalisationString.14 = dee559515084d8ac49c3803f09f3d5fed3b307946a2752c267677f22786a0125
+Output.14 = a12f5e8ea3bb174934c15e5d114ba615da33210c98c38d7fde4b5aef9aecdeaef311d929d7fece7fee11db67134c3326b413b8dc17766ba4fb881105db68688b148fd95d812f6538b14f25afaae84d39025336136d270bd643f2a6c7164930372fb1c8f4f0dab60283e9d8d3440ce8dc66761c5d5c4c13cc3a367feb4869b559
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = bf4dab346966f86b5163b0f2afc02998549f4f4210b5191a2d27400da12686d5
+Nonce.0 = 328531648f5ce509bc011f65f76270ca
+PersonalisationString.0 = d6b55b157655a82d9afcef78ca2201388ea1793012007feb778959b8731325a3
+AdditionalInputA.0 = a12e7e89437b5a7db04934a84a2d8d678c836d5a2b8a990a69831829a71a677d
+AdditionalInputB.0 = be03bad20228f7cd4003e902cd9ebbad3161fd264372aa69b16b662ff9d66f51
+Output.0 = 44c05784091d0407dbec91a9d0439fdae627eda462a775e4074a80bcf33fa7cca1d2942d1dab232aaf5b83070c83009f4e6291876cdb7a28777f8cbfd305367c5e93455e8b9ed520f48d35dcb28c5f15df8dcd168dbcb963f9e9f8451117206a2b775cf1f00e4480b85e60f9158ce6bf6fdfb0a21879e8b83d4b371fef1bda67
+Entropy.1 = 4681c3fc821372f81b7e450fdd4df1454d1cd607430406dc62f310dcb808d2c9
+Nonce.1 = 95551c07a7bb908caae996f5315afd98
+PersonalisationString.1 = bb9f353d9c286f07fbd21c9e5880b5d2fd6d704dd78ac98fd7eae231cfbbb49e
+AdditionalInputA.1 = 8a41773b12d07115e1ed177ab6048c6505ced1d763bafc3665201af79a5dcacc
+AdditionalInputB.1 = f7158a12bff554b1a517d92cfa5f6f6ce7a5e60a14a059ec1f91c6dc5a17d6fc
+Output.1 = 077f92e9c43e1db80af239ac32ace4ea1151a29d50fd24512ca82fef323abcfcdde436bfcd4f9c16b6d290982d92481ab2666abc96a380a8bd29eaa5fbd88cc230772a75220bf8962c9b49e129b677018f859ca5af234d47e6c5ac69f410438d6e6c87d8587f3421f6458ec3b4ed693744ae63a189d0f6e309025580e7910793
+Entropy.2 = aef83ba870cc3cd21caba2f67b37e7baff19588a012844d84eaa0ccc4bf1484a
+Nonce.2 = 1f669e6a3e1820065aa55a7ec6132f88
+PersonalisationString.2 = 31eb4cef3c6087600b0e248769440b003bc3250611a90b228797eaf4420464bc
+AdditionalInputA.2 = 2129382690e63c03cdf6a08d51271d823e1964c3720bda5716847a0a0f750169
+AdditionalInputB.2 = 127053dc46722a42d7d333691ae9aa6edaf3acd0e1546d414f4b11e3dd70080c
+Output.2 = 5400017c4f7ee8067b328d575c84807c9c597cb1c9211c1655c9b4d2c0f0bd7b688ee8b3f6b26db138f7175f382f28821cba9fc383d7949585bf3ac00412c53a03cbe2fd4868353b83d409dd2149e372b2102c3ce4f6f083946af834eb09d9ead0af65e2f32569bde1d476765a3325ceb1c26128f08e931f73cd6efc49396a33
+Entropy.3 = 1457b500bf68716f376c804bf42b2db445763efb6d58fca870e299683dfca095
+Nonce.3 = 987e1d205b40b5f3bb43cfbcea1ee19f
+PersonalisationString.3 = 7552ae50ade95bfc7226cb9f890ffacfbe8edd5db2d717c26b14e92414a2789f
+AdditionalInputA.3 = 80d6c93068ca7d1623aa88e0ecccb140c578b4578b72805dfdf4dd6ea4f96ee2
+AdditionalInputB.3 = ffca4be8e551d5635d52b7cb1161c214275daa27c49135f9f6c5015049e88f97
+Output.3 = 33d161d75d7555ce16446264e2f424f15750eae0060e123362bd15a69608ab82e3c9b269737e74c864b40c9afb052ac756f75356bc4a648d4ed1ee4365f82389981fccded063029e1a60a763bc0a0b748d02eff0fe0581c7f795b0df67631ddede8ba240b97ebacb99a6f1baf500552a467c1cc9b01e4e9a71ce4c914a7222bf
+Entropy.4 = eacd2f167c5402a308c1c282678dd2d46b92497dbacedde6a0f700ae5a5d2be4
+Nonce.4 = 480cf5dfd1749fb9611ae1f1c46a2d86
+PersonalisationString.4 = 87684df9b557496b22130c57fd82bcfca30b0eca281911027971cad60e913590
+AdditionalInputA.4 = 6642da6d01d7134dd14ae87ef27e613bcd5b0440cf903a58bcc99411f02692b1
+AdditionalInputB.4 = 1ba71824d224fb3a81bdf43f516e6e070473c5a305706fb648f113fc1c5ae0e3
+Output.4 = fb1627b50e153a752fdf09bebff3d180a1705c99d9ea7cf35a6a466d06571919ad2ad598f6a9cdd482bc28f8b5e4cd2f6adf5027f42eb2c4fadbfb9aa9e7c77690ffe04335b53911733b40a86d51f520301ece0e88b38c08e6110214c5130aa23638acb3913afaeece5bdb347e05c83649d8f7597ff3cdd3617738b112e33b59
+Entropy.5 = 5a95b90f0a12a9709862f0b5b62df3321739ed2ced7f7e0ad06f92c0c5b8cf87
+Nonce.5 = 955de565bee3b8a798790d6b9b2f99b2
+PersonalisationString.5 = 4aa1cee36350d5825521a1c01144847e73e16bd1dcf1a424ffaab8e2b3cfb6cc
+AdditionalInputA.5 = 168fc301b28761d918f34f0a1fe7340bf39904d153a3dee4ecb232c7959a839f
+AdditionalInputB.5 = d90af4d5aa0ff6f6788cf8eb485ec70d1d396a3d561c5e1783c54d435dacf08d
+Output.5 = ab8f97f616a1be46b75832f9599f6258adc24eda0e6233b99a78140ab06ae68e385762fc564880eca8e3a6e26a1baa829fc380c21301c10b6d0772ef55ffad6a3e0b8ae514bcee33d39f8405fc2520a14f128bffe4fb4e193b617f0e21c3653ad1634febc27465612d853d43f2652c4966f38dc14ff487359f9c920e213100e4
+Entropy.6 = 1501b2734f2b5a12d037e36c05d70c72b7525cc226b9d0b99a5ed75730b4055c
+Nonce.6 = 1e97ad09e8c8ce00643220306e7c2b1a
+PersonalisationString.6 = 980089fbcf2be84bbedf1f70be0e7e1b759558734864db3b61d36ec8c5bea5d5
+AdditionalInputA.6 = 1cabfbbcf982e634a61bc97c10c65bd66e7914100aff52993ae6523aeeed92a2
+AdditionalInputB.6 = c7569da40ad37cb121132e86bb019f7d8456610fee981491279ed85652ba91f7
+Output.6 = 6a6e1b875d116e3440ef1906659c11ff6d25cf11ae9c6f79148357c8164db9ec5845eb9f53b6d85e6cf5632679431debb1ac433cceccf8491167866c30203eb12d9fd51292ab49872a961e27d253439eee0bd8d50ec915809c8e2a9b3a1b205b8593b5e3d809adcd3c29038a4768bbb6fefaae7a69b594f5acde75bcdfbf1a9c
+Entropy.7 = 8cb5f92d948a3b3733759b1c8c671c38a072a826ad3a421d4c01eb9625178de2
+Nonce.7 = ded2146932ce5bbf623dfc526e9d25dd
+PersonalisationString.7 = 346e870dfca20293e230edf222b79aa09f88485fa7ff2d76b1e65e26faedbd96
+AdditionalInputA.7 = 4aff0273664abbc33da9609439c4c4071f1d19cf743f7e7d87bb3065278dd4ae
+AdditionalInputB.7 = c7fe6180c505612ece7738d0145e6c80723cd5005da952b73e6b14c6241b18d1
+Output.7 = 3dd20a98949196c7ff3e68d9c7fa5b1b62a2bd65d12583ec7bed6d19d7d2e6fbd024e30651477ee8dcd5817f27a5fad6c6434862a5117ecd43b0934fec64f9060ed8ba6dcb240470038adf085d69151dc8c207666b2ed8ef7c1bd871039ed02e414f0e8a7ba3ae6a2cc1652689f96a62110ae8a0a45a0d213a89307b282f02a4
+Entropy.8 = 9072aeac1f8145cc4935bbab510ebced1380690b125c85142696d923d0576ced
+Nonce.8 = b3d5610767d3847cef3b93cb973944f6
+PersonalisationString.8 = f9eb0e7870a8a85a3052ce9d07674a7c77df4203a0fc6dd3ebe5ba397932cc55
+AdditionalInputA.8 = 21ee27230c10def9d7124274f4a0d8db2401762e9863d5806107490d1439f82a
+AdditionalInputB.8 = 122e466a41db172101ed95267761f8ed4a12774ce7520b9fb2d90bf7558998f9
+Output.8 = 9e97fb32a86b6515026c0f7e6b269c1049deeb140d55d184ddea1e34a01fb3432ccc79f0c9acb131e74e8d7c71e4c91b9937669fa0dbc1ee553ad031b2839efe7d112fea1e192ece3f31a4229a247e94b2a5346c0c8ffc4bce6ad8a8729936e72cc42734c56b6cb7356b7beae6d644a7c48f12b1debcb6d686b4049e7e12b07e
+Entropy.9 = fe9ff50ad33173cce2a5ce25f375497d6a5d7c43b2a9caea455b1ffac9135642
+Nonce.9 = 8fd27c24fb0a2ab14c2c0ea18ce5e230
+PersonalisationString.9 = ce916e34e5f55436c34b1067f8ecb89131c458bc1d49c65e7c677f64a3e77452
+AdditionalInputA.9 = dd006f41ecd84df573375bd0fc8115337282d4b2999416324e8f3e4ef92a96b3
+AdditionalInputB.9 = 56d7491938ff04a76957b2bf373c89803f82b5b6ac96c049c3dcd3d21926f722
+Output.9 = 441738781a055916e0df8bab44206da6646d1fa61a3bf5279ab78258ba2faa6aded2aea37b9627ab2ccc3a45ed52fd2653344854356e80ec4a22d7ff650c1a3ca9bab1da1cd198a5fbb5590cd525031989c4eefb19aa93c699b4ed8de7d6c1a57d7039438b970c1da6726044cb18f232375f22f7d4f94291b378b43c8e32d59a
+Entropy.10 = 2a5cdad2a51bc22eb42541524e63d047147c2b9999cd5bc588d976b033a49cf8
+Nonce.10 = b5b89b35470ffa02980da08b1474ef10
+PersonalisationString.10 = 5b99bb7bce03b2d301f9287268a2a7a8d1925d783dc895e71bfd525650db12de
+AdditionalInputA.10 = 95f30b42c8459b3fffaff9654cddec1ca7178047647884d601eabf5e0fa1913f
+AdditionalInputB.10 = 2cac6c504b2276ae297bb9b35925e66148f44c11e4af8af881bbd90978eab9b4
+Output.10 = 8729e536e7c8171083140681269ce1546056118f4854c65b6ba132d5023e3513cbd28ed661926dd8aea2de60984a8cbc6e7988e1f0147ec636e77785591d45fa925b9fb619786c7d225713f82aa332f858a0fd55803b9c7f11323efaf2a7ab480e628defecace0135b661106df1799516b2349428a8ff3a611f0c4c936d0aece
+Entropy.11 = 604510e4fbafecd10eff25ea275f079a93014c9b177565d011527916b67401cb
+Nonce.11 = d9d1685cd5fed8b234834963d673ccd7
+PersonalisationString.11 = 5581cc0672f840160517ba3832c280326abb20a02132381ca7ba988a2a75455d
+AdditionalInputA.11 = 20bb83e3bf457f06f40ca4e951df626acb3f6a44aa4129616953707bc3a7ce9f
+AdditionalInputB.11 = 48b106aaff970622537ae5ddde1437605a11c1a8bc7c01886bef0acdd4fdaafc
+Output.11 = 32774e5526e3ebebeccbd372ce2400e591656cccbde5904ca0263e5088ee7044571134cb29b09b6deb222f1ad1980fb60601795507a16f26227aa09f1c56d056825438a05a38c4404e23f42703b007aa2280030bc83fa6fa1cab7ccb1031232e380fa849c56a989563254eed0c3e6f0d4ea28a76f1e91f4b2d34a139f80a6c71
+Entropy.12 = eeb334175126f50ee83446966e73d349cb5a09da9cfd577fa01f424175fa611a
+Nonce.12 = 9563c77fc27d1d71eed0df7b8ea1dae1
+PersonalisationString.12 = 373887452f3c3a4d081afab548c4b190b75aa883893c91184f9fbf45a1eacac9
+AdditionalInputA.12 = 96797f861d3cd72fe2926b16e2b08182b8c957a8e98b2ace8b7a3dc6d80e655e
+AdditionalInputB.12 = 02156d4cbcf8ef9805ad73f67bd5e77bdb60e7484fb056b313131fe9ce0c6e86
+Output.12 = a9a089f9acc276c0412f0603e72e82392c06886541969e036fefd7e9ce5017f4887a9a0c54a5fb7216be36567f438a9651696f235722dd6630f6f2a1bad465861bd8474f8a783a85c4ed9b6d8341f99800cc36d6627374f072253b68181cc96b84e8a54095562c41f10285bfe770f68d0294d9dc18ef742286f362ac85936ecc
+Entropy.13 = 97cf46058b89537c97da8f9cf3ce36b666defa680bb36e6636b4500586756fd2
+Nonce.13 = 8e3c0413783ad9cc7e8915322af518e7
+PersonalisationString.13 = 1d846168da367975f77e58daf5a2f0fdd682637fa96702bd6055c4a899b16b42
+AdditionalInputA.13 = 7d7407eb173f12df15cea9fbdf3eabd963709fabd8b395c9ba3d4ae2ef62664a
+AdditionalInputB.13 = 250f31f1f3370cd9751c8b025053147f307d65cdf6ea0833cbd7b8b5b8252d1e
+Output.13 = d760c25a167e3a7ec8189f06eb51d36c6421ccdef7ea5b4f8cdfc9b6e228e6bfc8244855f83ab232d01cb64e20cf6cc02418827dc4514299e5896e494f45452b102a2ba4db1747d9f53a9f7e11043249deabfa0357d07ac9548d9dc200b38ea3501e9a4e90ce402d2844b8da1c5bf9cc91a8b74f532a3ddbc69c91ef75c3c5d5
+Entropy.14 = b6e25e76bb40fd7edadfb03c7793dc3f63f9b0068beacc1baab2f15865cce448
+Nonce.14 = a27a691d8629bc963e7e06ddd115881d
+PersonalisationString.14 = df596e76d8d7c4a74001ccfb2fa9e8e28703c6e2d584062edc485955e1488316
+AdditionalInputA.14 = ead8c0dcf4ddc909aab96eadab509a46908ee5f090983af609f08d8a8b28ffdf
+AdditionalInputB.14 = f357bda8f2048929a4e31969ec978cc333d58b4fc09a8aa1b73ec9bdfaa1a8f6
+Output.14 = 901aabb3f065be08e2f8072d5d3ffcb28ab291420644e407e7a6a3346b75a5be535bdbdd5a8245998689450292df877233ef0783e0bd1765413193790995d884ffcb2c8dc35fe4cfc12def2f091866d735b1dcfc9d8d8c26903d50e9397b1bbd674bb81fc908361b2bddb68f02031d87588cc3e94210422674e93fea6a5329af
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 7cbc54c2e6a7f023a8f8999a5f1acdaf7507cd5d77114cc9b4ac7299dc1be328
+Nonce.0 = 3da78de7b8f5e46ae8d906702d5a4bab
+Output.0 = 13d4bd6089a740b85a8e90683adb29bc8ede7b21c2a96c96b79573b2367fdffd00de609b786f751020f8d9f94b7052f0a14c1c4ab54cfa093b1e7237f3c72d95aed30f79b501d2e2616ee51f124e656e9ec94ba64e399c88089233928fa3fc0399bdbe145a275be1787d73ab22fdd54e142f312d4050645c2a45884506f3fdff
+Entropy.1 = d60129547fb2f419089a6dab653274ae805eac0affd7b94250a258b56524fbfc
+Nonce.1 = 95ca595db46dabb4c2fbd72585b96850
+Output.1 = 849069b5c73b05db92cd63a035624fe247e9d84f6d489ec767ecc70d14ae87e23a097ec145103a85728e8c85a8c8b3ffca8d7c8ff080e8b6a8fb41697d5c9ce10ebd69ce9e57917ac488bd1bd2ca9ab97adcc9c769a6ba45a2a812b15c740577fd13d20a4257220e3436c3e517a3c49fb16a7d17d48aa7a32b49279c6c5ba06c
+Entropy.2 = 97d2211c473eee50c5de5cebc764c096bf5e3553cfad251e1025d8bfe7629263
+Nonce.2 = e44bf914f9c6678bf6dc14dc37d3c7cf
+Output.2 = c079e2405ace7085f70a35120826babe44989f559765ef368475e643ccd09fe1ba61ee7a3fef478fddc44914877860658ecf0c00b5c32944841bebbf73ab716b113e4f55cfc55f974c3bed717255ff5632d29f66594d72c15425fb7525dc814e28af2dbb0f3f2435becad4f1ff67b6b6758a7cb280670a3b33328de6959a997f
+Entropy.3 = e4054f80f7b7713e5969d74bd5947366e6b6c91904fc6b0833b2a9215bf16098
+Nonce.3 = 560a78b9d9d918182ff199cd979d4d00
+Output.3 = f546d5d35a4d82f2741e9619afbb746c36843a486dd9932a4add1ba92ac58e7da6174f3c7168d30009823a946140d9f7cc027c4070870b9e8775da22f8b7d46e94eeadf89ab17932ab9fb05da08ead3b011575d50ac991d51f5dc46515e9fda09cd8e1fb24cbb70a9d412c111bac94b27845986106db3ec3523374c83ab0b366
+Entropy.4 = 445adb190686c6f01267f85a9417a07891964db6d4912ca0104d8b1913c2d417
+Nonce.4 = 629f5ad6ab4c9a53b855a89ef9131b6f
+Output.4 = 025d2c8da422f0cc95863cb879da114311c00c0bdfddcf5b7a7fdae89aaf116d5dbfc97e0a610bd5883c57d2e07668730566e6e0605a1810e6ee818246588f12a965c0db4b639e2ff8d3a8085b3f1736c46a86e1c7752a7538bf240f33b817470e69ded4d223911538e6fce9e39a215ac1c70e978a1b82c6a85066cf0e341b2e
+Entropy.5 = 663442555b663b23c27815574b8d6ea4181baf870a5325b22364efdf27acb811
+Nonce.5 = 13059175b7f5a2990691f8b6ead2f9b1
+Output.5 = 159ac7471027dc356b90dc757ba922d84f2e393d528bb851a91c46bcf82e3b08f73a3fe6177cf5548b542b4061facb28e936f153169c0e0148284367cbc21ed8eb577a31581c94c69c7c8245213c53168f268b817667860122c5c2e1e06695b7f2db2ee8254fe3c3c121232f4000c2ab5218b4ceb1eb129c93d821616586ab8b
+Entropy.6 = 0471b2c922386cd7ecc4f58a69ade3837118a3ff31c2baecc0761231cdcd1dd4
+Nonce.6 = 21cc4f15f288ac2e391802d9c25d2989
+Output.6 = c528cdcfc606beecd15152e89e564acb9dfb44d760d557aba44cd8c2d7c1918abb49aa4ef4184a189672811247e828ae5ecd0ee1afbc03831e7725767da12b61b4173afe68aa71ab34bdc69dcd9e744194f3f9d5b3664548972df82ce61bf1ece49b61d973d153c286f510ea6dd165921cffeec2ed4a3867b7fa23ee933e0342
+Entropy.7 = 5fd39bb79825e10cfcd9c836059672484d68caf7572f03c7dc7c87cec3b09157
+Nonce.7 = 11e932c81d29873a46836836cdec4a93
+Output.7 = 3aada5139ed24c194427f0e2102f16da7fa20faf88bc0fe2a91799566217212314ef60e3adbf7fe3fd0f25737cc0c6d1c469b99759c6672904c5faa3214ceac0bfb9115322e2f277e8a7d963a5fc9bb1be05105375a50b9dc7468b91ef8d39cb04e1d80d756d7b4260e3edd22c94fddbfdcb9f74f47e4dd4368045194893a4cd
+Entropy.8 = fb1af2b3a8e063696a0c98a69bf3185a60b81c5ab631fed390780c4c777ebb3b
+Nonce.8 = 09656fa3bee0b69678e11caa1ecda431
+Output.8 = 2aef0263d44bd904d62ec386b43320f6bada030699d1e5a1b418364b9159b24db47be608447f4b313bdff6365ce8b07775b94c30a03e7a73fc06156580a2fa35b83e62bd502d3a48cd518911c05611a7b3e7787bd4c15e8f51f52bcf1bf748225704b7fd463c74ee34f86485a82e495455e84b67f2859e227c90a0f1e8abd2c7
+Entropy.9 = 9ad917a384303e4eb02a5ad4d4655123441d015be4c79de9b75252f4966eee2e
+Nonce.9 = 7cae69ae330b83357d52a0c60db51dd6
+Output.9 = 4715b2e627ce240b670868fa0d2c2db6fddf79d349debd8d1638e96d4fc75367e216d5c1bbc24e7f04bb9b4018799a5857286bb048670de20112cf19fbc1078fbc0494f867f73080663a86d020faef2ad639000e8f469157b07b56aa24cfd9de96503d5a497c36a76bb5f1315fbc0368ffa63c086eec9f3c2a2f05f39ec4b730
+Entropy.10 = 63b10164fad0f77497172f863e0dbf7b832ec44b130013f88a036cf35ba00787
+Nonce.10 = 42dfcf70ca6d0f748086b035893044b1
+Output.10 = c174c81bedc81793110fe8afac7549475ea85a5ef44ab286a44ee5b886d5432b6c47c1eb37ef6df908a26f10fb36a8f7956c0651c2ed14a730456062d1f1b99d2048cf61e76270e1dff2262d69dff741f5e1785659a90ea81595ae0aeaa1b69f8653675d39e50423976523894557853c396b8d36b82e31cb9696a50ddbd51e78
+Entropy.11 = 4e5d44e9aa525bed9b454072ba8ce8716a5bffbfa0048998d83de5f3a9d91d37
+Nonce.11 = 57ddcd4ab6b80fd437826cb65c86b257
+Output.11 = 9b0869731cb7008c93284ba8bdc6d13502f4b702b3dadeec8adc49bd7c6b120ec05f1cd817b7a91c01976642c96efaf9a28513361f8bc91e6abf0937661eab6ae2da72dfe6b1010739f4bc649ee31c326ccbd8142add4a67cb7ad4ea43aa464611bf42d0ea566d5123526f13ac4be3be1f2d0c63e2019525b51b7de24c34a6f6
+Entropy.12 = 0234b735e8ffbea694599073e9180ecdd4ca98ba58c75b9f67ba81d19db07db9
+Nonce.12 = dd0b80deaf176186c758f3587b741d42
+Output.12 = 7584d6ce09b80b66fb2da0300cda78bf4e8f6c7b9069fafe59279184ec53efed9433e12bf0107a28a5e6f570ea7b103060203af7cc275a846305e30e67204a4c09375cfa74c2ae96ab0eb5b81eb51c6c95d09ac5be8f1312834d47d1883253bcda11517f22138ce72fe6256ee21b62bef368cca98c1eb8804ef7d75ad9ed2a88
+Entropy.13 = e9377e9319cfbb35462c4a68e31efdfcf812a678dc4a6b09561d1f8d7cf83e53
+Nonce.13 = f10fe7569a02299e548b2a374eaf0320
+Output.13 = eeb4cb39f9a7099ca43fea36969d8ffc6035107f7f442eb93f47e9ce739c45c23d9080b00c5824f702a8b4a79a43963e31075c974a021db55e2e419ba7e76fb568d8d24a6fca1df0fe286802f0b51d0ce35b6dc2d105da2ad3a36d14743fa22eac0b2316933dc0c3bd56fbefb4239fead21e42a065eb222460d0c711ea2ed1b0
+Entropy.14 = dfa94c198483c5daa046f1dd1e4e83f854fd6c5cbc3465f671bdfd36837779ab
+Nonce.14 = 298de64bbd817d009a71c1424ae839f9
+Output.14 = bfb9a54ce31406a82608aebc826441f8f633813a0c3bad723b802f3e905a6ee3512ff3513062aea51f93be17aebf1cfcd81868e85db3db9aa98680f974001fda8fe6a644f5efbb9d6e52e99ff606ef1ed7cd3b17fa6c6844790ed58da6df61aba0c200d7dff943588f4520891798098bddc65797b2f99c05efa090c60dc48a4e
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 8ad4599f8ede0ffb061bec6128c9f1786158f0f1f4473efbd562998fcff49629
+Nonce.0 = caba97e9cba4cfa0078cdfe4dd402ab1
+AdditionalInputA.0 = 4e004fc65b9679ce99bf5b52095b4faad01b5b2b8e4a539cc8b85fd2dde3c053
+AdditionalInputB.0 = 5690a64642b64ca0673dd65a4af898536758de741b685a4d8a160721385b72d6
+Output.0 = db766b26234330a21385b454beec705227010909593f117bab2fee95b5aaa10c19fa417e51a0d99a3d1cde3e9cbd235bf75a4f3162b0072f51bfd27999d3a902aec303b5f9f3e24930eb0f15b9d8c9005b601e3e67fd030e0c2b714a1e651201c97b9978823beb7c4769d98ba5b7c0c33384bb2083b49283fcdfb5c9ec8eb7f9
+Entropy.1 = 95f53e2ccbbcaea435c381f31ca04a2dc5d611f6bed5b7f7888da0c9b662932b
+Nonce.1 = fa9b946858d7547eec559927dbaa8df8
+AdditionalInputA.1 = 11949a77612333c5e6ddfc368ca9428e76d87575f01238a321bd22aa604f6660
+AdditionalInputB.1 = 4d56fbc716951ca2809bd2e6e48a724c3c2533f233a3edc475de7659e310583d
+Output.1 = a36235c717d1cd4d2108109a468584b930ac564d909c4c69c0d494943306234f1322abf78a5e49695d3912331795264aae02874914e747deffbbaac834f60d4cbbb157f0407748a30a6d949de5f848e366b870967505107e4db8ce3d8758ae80c2e83b8ebf5abe155c184b9045aaa17044ebe97567f22bf4aa4c1d33425e6efd
+Entropy.2 = 4a0a0b52a6b4923b0705a4f676662bf6898202985b76dea7e7d892909b1f70af
+Nonce.2 = d34add9dacf77c317874e921d0a4a50b
+AdditionalInputA.2 = 575b394d41caf41da40eca2d1c534afcd74b2df67b03b66e3f93c31240a728ab
+AdditionalInputB.2 = 9fb2b4faa33e748a94b01fc3d5aa931f71f23709001fcecac637b143faba10cd
+Output.2 = 85cfa124db69026339ca03af0df44398b5711c3fd7ea7eaffe05f82c1bd049fb7e688d7b98e3aac80c8c562dc25125577768bd8b766555ae8be74b139f105b97f19a8745e429178f767a2efd0fa91b1e91938e8b9828c5b2e66eba09d403e385f2e32c6eb8b667a31a061c9fe2dd811a23290e2555557336f39d95c29146d6f6
+Entropy.3 = f6742c2483ed572d63908ad501372ed18c05ec8b85f4d896f39db46f1c70cfb9
+Nonce.3 = fea41783c5d30b10db03a2a0e71400c8
+AdditionalInputA.3 = c946c84dd66d43fcd3f502bf616cea154fce51ac12484d3467bb8d719afd4250
+AdditionalInputB.3 = b043067557e0b7efe6e2c1cc6e9412a19bad509454d19c1888b975824d281dfb
+Output.3 = 0352a32a0c62dffeae34e503d0a127e50d71f8275d92ecb000be8ba074d3aaca26fbd9e11b03f317073b0683230e162a2ab4efa521cce0867f7fb61b69dbe31f67a8d42216629b2ff039e5a1a499b47181910c5790f1eb4cad7d07862fb8672a2b81e5d8c62ffa055e97f9411043f7da0c655b2567c56903cfaf1e7d256ede2b
+Entropy.4 = 650a1cc6927648e074fa9f6b0e411ba80d7a8bde7f41cdd40f145818e24d3f76
+Nonce.4 = 3098850b25334a27d0de3b106beb6dc1
+AdditionalInputA.4 = 8017e0a4c1d22060e56afde6357ffe9200ad1ec3beb9c2bb381d661c2eff4395
+AdditionalInputB.4 = ecbf1580f1b80856c384a9321a48a78d2ebe4eb413a314e5c4414db132f831a7
+Output.4 = e7ded56decca9a5d59e81b933008bf52a5ed40de1c99c98b846d1a104ec25a69e6248fcfea2295d78419a9293db247dbabc3d688fdddd58d9305fce64209b41fe5bb56e6bbf13447c7e96728a6e71518619e2c93aa9d56797c5436dd1562239da1eef524ddb9c4bae9ad6cc3bd497d71344a39419eacc784b039a4a72cdcac44
+Entropy.5 = e904f170a6bc1fb658f6bd0ae5b3b75aff1c7277fbf576247226250fb23424e3
+Nonce.5 = 323fccd0c9edaf325e38aa789f3c0172
+AdditionalInputA.5 = a5c257bba6418564858990b1cdcda34f79b48d2ac3ebe25e23219542566981b1
+AdditionalInputB.5 = 4c91b2f0e17726b653e4b142b4a319ec952fe4d2b71de31ff14460c3f4f55991
+Output.5 = 4334ec672d6a9c69a5203126a9db2ce35e19ec0a4ac3c0713062792a8c0a16934b8ed85df80890550265614625a5145eacc20df8137046b53ff4fbbf9d50607c731e3b82a41a1b74c8ab25f54a1955105aaedacc5d7759a8b60a70623a37f4de7c18c7605e99e3f532ad8c277a7fc44dd38de2caec60310ef7f1544e34a49bca
+Entropy.6 = a342e20ec138de7d9abf4e52830ba788306c54c137f9b6d8e9cc1b16563d7403
+Nonce.6 = fe1b14ef184c19c39e124118ed5b5e57
+AdditionalInputA.6 = 870ade2f3209ccf92e3f473a8ed0a312067f1afac0d57cf0c316a56c13280dbe
+AdditionalInputB.6 = 4d9e9a304272c9dbc109486522b4d60ae52beeb87671e893a83d372a14d2a949
+Output.6 = 83ea469ce91234c7a1d4589565220fc80c81cc7facc12801589051e9e18e42858b9ee397599a276de205a9b1ee7b44fe8c6d20c371c104119d371550d825b6acad530121b2046471dd8261b95492ad7b58ace823bec2c14384096b261161efa5cf69b8c92a4a699ea8d8df7b04cc24a5a12f4c6978ea50fe0edb7216e35753cb
+Entropy.7 = d6c4bc8f069e09e2cf0eff6241dca6e169c6c928c6049f6aa33141b459cc08c7
+Nonce.7 = 81509d1be3aad60707c156a7439029d3
+AdditionalInputA.7 = 877606701c8bfc7174a6ed8b8e07b2a7af902ce25923f91170e3115504ac95ef
+AdditionalInputB.7 = 17f92164ba8187f74a5d3cca30dbfcc9bf8da5405c808d86e69ec0cf34b6ed3b
+Output.7 = 566392354a817eb021e4a3a13ea276194879cb0cd72428e3b216aede311b5a4137321e6d2c44ea15e14015707a240389f0d44794d081d049f45405fc52b326b3f6d5d1271cf0cf219fe1141fb3404265bc77e4457ecd86288f67a2edf0e57cb43947c9c12ea41cb89dee94e6bda39833ee5cdb77a0732daa43d8cf2b0b95fb77
+Entropy.8 = 15aa5fb1bb743e06b63cfb87926d26a62ab0352b362f5cb14e0951860eca9dd3
+Nonce.8 = 81ffc56e38a7b4e25a22c12101d77cdd
+AdditionalInputA.8 = 48cf244e0840d885e32a6ca3a779f8aa85d1b85ccf963fdbec676cd6cb2d1ec9
+AdditionalInputB.8 = 16e545c23ae386c1b7e21338f0837f51c38a3a283c57f0a3aa97b11f8d684450
+Output.8 = e5eca8b0dba87ca8c2c7b8c2be1c8e8009a6440256d84d35a1d7e032e054366400dfe19bad435b119f4f5337944da5154d2d5b3b0b6324bfbeadef8a33c9d8f1e4e2fd6b7ebb939b8504bb002333fa73029f1c7c2bb9fba93c65a391aae2bb985b576c2026a41d1d56b6a33caf3fed8a75bc392de872710ac94bfdb558543a5a
+Entropy.9 = 991541686e31ca1b376aaba2e0fec39a211e45d6d5cd653e721fa8bcfeb6262c
+Nonce.9 = 465996218ddf25598a39db7fbbfb24d9
+AdditionalInputA.9 = 5066003a10d0c836aede4934cf5482f7124d49aff46da0298f0107077f6a385a
+AdditionalInputB.9 = 64e9478e3e0802273717f862d3551a22454aab44c19fa4e4c3aa16d2efecd447
+Output.9 = 1441ca96dc3ec8f9c7624d8f81dbfef698eae0ce9035b7bee89bed4d412762279cd2fe8bff51b629d136e5a80b0dd748c629d81ed84ff9a3812a27555aa78c00fb80731cda6d167fec9b22c3e48a673a00c039922f3b6c3c2caccd31d898840c0ae1f245b1e8f2ae82453280255ccc2c4cdd9585f0d2ea2040c4c59e673b3e6a
+Entropy.10 = d37d1b441184a5c18d519c3e3a18ec8df0682a0be062e909ed45605d2b538625
+Nonce.10 = 773501f19012e827cb6bceb2f4e8c0f2
+AdditionalInputA.10 = 07244b2920c9311b5b84b67f37bcccc4522614658ccb131665eed288f20deeb2
+AdditionalInputB.10 = 090f46ebabdbd29da8f871ba586811e8764d2445422082a41d150e2f00bc382d
+Output.10 = eea85ef6e9a0912cdc5ba42016b5814a7b48f6113e629f3b73eea46bfc77871f0c73cefead3ccfc373d87928f4e20594dcc4046b6ef79ba36930b793f34707297e3a8ab3696578197e21a515e8d940b44f625e684dde7939fed3d2c422dfade2b277ce631acb3b616c700d401a5fe7009b09da04d190a4422e76b013af1b6691
+Entropy.11 = 98f6d51abe3da3fd83239406d2e184a589c0046039bc94853660796c7667fb62
+Nonce.11 = d7d45de8d622d502db4b3d5147aeef79
+AdditionalInputA.11 = cf46d251b282e5242c84a83facf25209d840a7ef21ee8626c2c82ce9ad709b41
+AdditionalInputB.11 = fa655c1c925811b53074ecef18c3eb3fadabaf931c421653f29c01ce506992d0
+Output.11 = 6ae9ca31e2e885e519132aab97a36a87f676d84a94fa41f1a18eccaa0777e3fc494f934ff6d8625373aa8a949cbb3abddfca2606fd8bb8c7d333f423a05beeb3835e413db9758ae382d4484a09c59432cbe0db0d6d1d32598b0acee7a902e76f47865b9a3d666cab7321a1d7cbf3aefd49257972088fd45caf3b4e46a49485f2
+Entropy.12 = 4a9950eb71baba3ac0b25e5149a208571d8cfdeb443901936e850dcfee59ca66
+Nonce.12 = e6708320ae2071c2296e02d27deba664
+AdditionalInputA.12 = 831049a05f536feb8794e1589e47bc67ac697e3395a5b5ff85f9151feaa8f1c9
+AdditionalInputB.12 = c6fa8a6fa23a94f15a91b69ca106cd96a1527217e24a2f3eb54a52817b91c31f
+Output.12 = 59e02e5499cf7c0cfe286044e5f9f15cc4a4ecab02e88208ffd80758c8863c0a226e6e54c85c0a8e79bb2e5d262b4fc9f66ffe031693eb6f04e2ca1e3af5b611ee4de26f9e2bd2735c8d746bc0aceaeeaef7c6d8c881e7bd57cfed134f2742b4af9b2451d77588e17e2cfc8b8f8eb644e4c8073b5812ab4d70aa2a9a42330567
+Entropy.13 = 31edde9cb9e9ae2ff997b925ec5e42588a7d023c124083190aac093c5b961a5e
+Nonce.13 = 220d2b712f7e2bf38e70783d82d6969b
+AdditionalInputA.13 = 9e65e620d96a304a62ace2c3e5ff05cc5e6b7cb5fd714f758e76e43137cba685
+AdditionalInputB.13 = 8c779a51462f3aa70b60f90d3aada08994c5dce7efaef6bbecdf34b3c1613405
+Output.13 = 2a80233fa1ddd3f0e9a7257283e3ace1d9569c4bbd3a7f6ec8d272f64c1ab39dac19af57490e19706b3cd293db04a6320a825a854b16c9d066d6da2745682272d6c4f75b3e5801652d563beabba31cb8f1b3e643c90d91f173fc01d729d7108e9cc7cdd89765cb8d4894de54774dc3f5e8aca3d77aded01cf264d770b9007eaa
+Entropy.14 = b4e09a55671ef9ddd3aad256efdc6347e881f49c38aadb2a03bea89c48d3c08a
+Nonce.14 = e1a14d523eee40240fb5ef16b0d86915
+AdditionalInputA.14 = 066b072d48f6cc6bb00273e0bc0ebc086235fe79af1fbdb46318f56c62709f87
+AdditionalInputB.14 = cfb58f59c6d56993b9f0b5ba1643554072cf4ae8013c236120044ae909083f5f
+Output.14 = d5dd7f55ffa7d53fc0f679cddadeb869f39b29a6d394c9f1185b11ebefbcb43419c6a26ae3c9ab9d456e2cdba1aead05e67eabd3596526ee431ba7cab7f94838062fcec2363cf0e19849ffef30064263b3a059ce38aa02c2729bff5af9450e035161816724163906112205196c642bfd70f36abb4639fd6e4f7f6a879ebbcc62
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = b1cf2861d5076eb18612c3f82930cc4ba6b9550736f741c0cd0534b87d86fa3c
+Nonce.0 = cea21378eee439c51109b3f79c910c45
+PersonalisationString.0 = 24c0a8516faa85e14808e89aa0a2d71975cd68e0dd31b6c43b309deaeeef058e
+Output.0 = 9ffc823cf7dcdf286bc53d8adb84f2d12e5925c660f365aff1faa13bd3ba78e65a457f1daa93e4e5eac8d75299455d4fe4ae00e801fc49a70be1ec8e8ccd63537ca176b2d37b5f60bf558afb5fb5073261dd488d10fd1478361549485e9a38e9e94c2f0a2afe5c9de2a8a33969e19ba5c23e617412cfa5acc8cf3782ed9aa883
+Entropy.1 = b2fbb673ebcc69fa3c0030973f6638b3c180336c13a54ac3b6e3346bb7efd7f5
+Nonce.1 = f373aebed57ac427e23e2ebbc35d19b8
+PersonalisationString.1 = d3303fb23acc24e13b28fa6fa333a1b7be244bf5ab3cfc4b13680c08a4ffaa95
+Output.1 = 1eb240532d54a759d0607ffa55b59f01c6deb83ebe4f0c5e72a86876463e2386e33b7dcdecd7bb21ddd3af56602a2e7566a88d5a27dea795a81f6e765cab3c071e25ea3e33202a9ebe31ed2a4857dc902107449b6c69c7d929ff35bb44ccf22064bf382c0d405f08aa73cdc312cabe4c49beaee3d7726b77ee0a24394a4f8162
+Entropy.2 = 80cc1236257b9f5e35c5598b33eb0161bbbf23ec7d9a90793191be7c7475d770
+Nonce.2 = aedaa60739ca728db6aed8bbca4c9316
+PersonalisationString.2 = ecb8cbdcaf00649e9bfe53f6a06c7d004f2660f2b54f514dd9d2c9dce81eb249
+Output.2 = 801627b51c768103363fe4bf5525a96fa396b32d76864a8dd81a35eb20034b870759735d7248d40f023ba59ec6de827468fb7610e8312a78474724d1812683479537981da2b2b17eccec2158b18731806be9d58dbada2214d810db05ab358dbeedb101e9d957b15bb1388e4a3916d13f4c901ef9c06aa034dd87f05ab1012850
+Entropy.3 = d20d511eabb09c81a79f3ba6f6d281af2a55aa20733d66c633adfccc3c634be0
+Nonce.3 = 7420ca6931c91336f864c5c8f8ffec88
+PersonalisationString.3 = 9fc3b3b3f6d39e533fcf1bf0b3144f481e52a7924406f7433bfdf244e96fd94e
+Output.3 = 765e248b0db5920307b4be960e057142b3366b590d96c2e9924386a707eed69ca983c5cc60440f402239a1cee2cc221c314803d35c8a5dc49ddfd339f10943744fd3b7b8ceef2cc8d9cf902a8710ef794140eda8b66d4c91bca7546681b4eff9d3e44dae601ba5f64c4ace842e10d865bd42238a13be3d60f08c4d64195568fa
+Entropy.4 = 8cad67aee7daa30e2a3278db86031dca6c49b33a475ba679151378bd60465201
+Nonce.4 = 386f929e5d599de61b93f49d7b2ea208
+PersonalisationString.4 = 7609160f2e21c410db396f68218702fbd8269058ca2c210b8992c7b89f8d4b69
+Output.4 = 0db79419874923766f12b77fdd961b4384fad24e836b5ffc99382dc0832f5eb6e306b635ef220441e2c5331c9a22a3ac73ea487615112c9ce247bde7926bed0b17ec920f44ba6283289e9ec938da4ef559b44986001773e89d63934e15c467e8fd03924b12004df1390c267c29bb2084d06cff48913cebfd6cab5771011ff6ce
+Entropy.5 = 7aec24d543632b4b17e6c8282bf780ae4823baa9d302025ff1c0a4212433371d
+Nonce.5 = 148bc4071939c0df24a0ee1403a91cbd
+PersonalisationString.5 = dfc5432fdb048a77eb3489331063144a67119f5c9e9b81292e695603fbf36f33
+Output.5 = 60e502787163b2cd2713f717bad799753de94875e423949b1f00d5ea607f62b25cf40266f05486ec0230340fb66fbcbc7825ee86e2f6aafb5852f8581e7ba6c1901d63352d60ad8266e6f4caed56941222726ae1035f66f380c1636c4b627694ee57e2e6986cfab21c6d78d4f073eb7e367df8adf4b7aed4e0a50df0237b03f2
+Entropy.6 = 2b0f60802f16954e86360bb30f57235c6ae602abaae59890d4586943f7cbc6f0
+Nonce.6 = da6409a4a3aadc73f4313da03f8ac920
+PersonalisationString.6 = 98080ac454e0947dfb872df6491abb45c361d58ddea368d98f9e6bd2a74ef816
+Output.6 = 2b0be9b692b3a28891d635566b6358d5c17eeddc5e1795b879adb4655df7c2a241c8eee6b8f7b6168d55367c3a2899bfb530b67586e9f2b8940019d10dfad986abcf103b787fa982e009aebd24eb52cecfb916a1e2de8dbd8168c2f6a159c6fe0ef18892573c28b141812bde837d2c749951cae490b491d26f39f7e17a3ed7e0
+Entropy.7 = 0b2f3490a83576f730ed04bd570e4dc2513a739a282b4a5f843dc42d7db3b60b
+Nonce.7 = d4c38f01cacdff71be37c02ed68b4186
+PersonalisationString.7 = 170a9ba375aa92d5252586eb08f04658e7fed3a6820e5e2d3df7db4b29740989
+Output.7 = 46778c8804b6e5ecb7cda8c0535c6257b80bba1d362b45bc1ff67d181c2a02ebd0f3cff63d04f6c4c4db5b0b5954d3c2037c6eef94ce36b7f24a0cfa0b00905d8ddabdc201007b6bcd0d7c60e219fe1ca9995a3527b1dba50caceb5e0eb7120eefd1e9625891edce039c4d7ebc7f6bfd3839b4f608b18ebf3e004d913e029078
+Entropy.8 = 2e9ecbbfa3fad5e53c4321a800b5297af95f1471256b2a09453ba7934d02cb46
+Nonce.8 = 9d0e03e36ce2410a125d0b5173b4edce
+PersonalisationString.8 = 6bfd6bd8e4461f827a206aaad604904fe9b90f209a9e2337394971cc9cbf19f7
+Output.8 = 085a72dbfab649bf383ac75b6a044eb694b02371cd880e372c42cd0ffa265ce3d9b5253f2782b3ba701175f8c4b81f280f9996c3ed652b1e409a3740c5a176a5624784c3f03aaaf2b0f721428fcb55c9aebed4b0a13ad2c1bb2170adfe64a25130a41b18066017fa6e5595bb5d1d4f6c7355e0a97046d892cb255b91a03d5f1f
+Entropy.9 = c9e0346eebd8b4e63974f7bbcb54c85f8290afa61432cca40a5bb2486c116f5f
+Nonce.9 = 28421ed541358dd585abf9e3415f3260
+PersonalisationString.9 = 297a6461f314d04a9a30cb4606e1a31f4eb5cf89fdb2c4c716e83d21588e4573
+Output.9 = 2829cdb58fa9d47b5518ea8b34d67935ffd1b9d753ed340f7f6d0d76883ccfe0998dfb07f0d3431902cb1681de34dcc78637a34d3450c600af0bf67fe86674d5dd8b667e5aa5f1dd9e78039b2e634857a97bb2fcb566f695e678af10b5bce17d30876a63e11d6a4053d159095ee0bd6f5f872050cf9ef712ee600fd05865550a
+Entropy.10 = a438e51dfd58079f0cbf7d0722965f95ec21ebde892d4c36d3d95b5f5e8e9dd7
+Nonce.10 = c9195a85b4748684a50238890b00d373
+PersonalisationString.10 = c99f46288fe839c63bd1bc21e3211901dd8393fe3bd18c5567ffbba90eccf747
+Output.10 = e1ba377f1966c66329b6b0a3997d6fb62e06afa00cecc41f3dd532e6b0427d89c89bfa38cdc92abb90a512040d6ecc99bccfdfd9ef7f59c46ebf0aa63b45bca6e45eee02d0389e283c144ffadbcbaaaccf60ed958eba454ec31a026f0d397c5c5c451e8a301537e7e2569ec791b68f868e7e374a590b56381b6350dd5ab217f9
+Entropy.11 = c39b9c88b3bee8eb346bf86bd4435e738b450149d1bbdc0fb9c16ba9ef3a02dd
+Nonce.11 = 12918b5e939878686facf9264338b73b
+PersonalisationString.11 = 16da91970406d5cd9c29ecc18cd3d189e0f6cf65d86612b26bf6f2bd88dbbecc
+Output.11 = ea21806f4f2202cc00216f88299bc6681c3e0fd0c5608e8f4b6ee4522d59c43588f769fac9b48631eecd415c643665a83bb4b6d39a26d81de07eb3a296bdc406f7916b412264bff596ba85ee6866bdd64a56b6f15776c41b063b89a9a80a7abc3c54cafb7e7db65b5e3f781e770b5880041e484335165fb7d859158403d18470
+Entropy.12 = 6dcbbe3731f95f1fbd6576433f97890b52a498a022ee4931fca4478061ec5bfd
+Nonce.12 = 44abbc3bd9db8c992cc7d3cbd5978610
+PersonalisationString.12 = a4902e4d2530596e087584d55cb1175ba700fc66b1cba3cc9025a1c5fd984098
+Output.12 = a4f8dea1d06fa88c2eff31fc04c18f0611b63fcd6639b26a884d0dbf58f880d498bf2adf172ba9b3898ddc710b19a9f9f7cd57aecf588bf131418daf73f728e33f94348ee5d3d8b935e6461f9b30b33f83b1459e17792463c2b4527a1837daa05a976b62cacbb81ca9e826e7179a118ceb2096f3f5f6d8371ae67e6b91dd274d
+Entropy.13 = 5b44870f8a759e080d05b26502d930e3014857c25c0112f46869244f7e3124a2
+Nonce.13 = 930524dc57d8c1666a375ba95a99e97f
+PersonalisationString.13 = d880eb9e2df605d87b070c5fcdac39d18da0674d2ace57753c09cda63e0ad896
+Output.13 = 89eec24a8954a252b43271c3226f3a3bf814d8f7d14d7ea53b215333e42df4441d646ae967055d29ddd127bd7c96bd30b21e4d379ca75a831a97d516b1f9141814b654dc55f99522af8a92c72c78f5207d49afd3bf1eb52e26f89b7d6fa3504341e6e627771c925990b87070867e9eb972a29e3da7fe944bb486a19c41d1462f
+Entropy.14 = 88f77e49e275f9db1ee419e3629c942623becfa50072eb2aabc98730ffe5977f
+Nonce.14 = ea7d3c3b8f6da0667d7f0d543c68d7d1
+PersonalisationString.14 = 86c20a7e794c887898d5bc00e98398276a4e3ad8d674fb808a63a44330490d2b
+Output.14 = ee8e21ff48af611a17d33e130f4e4224330efcc1402b6d55aaf1f514553b880f18df68c0e4279854eb2e9b904c552f69f0e1badc347ebe336b70456f221e07a2fc78df72551d99df3755997029ee1461e2b6e396370096d7e8c2dfceb73214a72ae2b25ccc60b92dd71988eda811ceac4b7c335528249aaf82826a14c142007c
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 01e809719a3ce9027940128c4f86a0ed0ce29b5706741419c79da0d20cf29bc5
+Nonce.0 = 6c330857c50137dcbdbc6f684ea866b6
+PersonalisationString.0 = 5b36a0584b687a996e6d2d30715492a50380ba09c5b0fa68a4968a5e155f1c3a
+AdditionalInputA.0 = 2a74b5a9451f6e7e607d7b79a3f5228979399f48d71ef8a6dcb2f853536bc404
+AdditionalInputB.0 = 92ef06f35ddfa17675286e81d755f443d0249879cd777086d43681cd9d43e338
+Output.0 = c509d76427e6c352f2d5fe44c9b245ece37cac9eed48dc8392e0b793da558e35c59876fb6990b2afb6321b8feeca8370b64ef97335aec7d5e0619be85f13964fbf6b736960925e9adc2c5b1bfd31eb9f1a0b457e915c5a3843d411d95738fe6d99e4ff9658646658ea5165f8a1e5c3777192b4fab92f683a3af03f9622e152b3
+Entropy.1 = ff9959921f3b0f311af7165f90f69b0b677c2ed1a6e2f92844b6c805a4a7020e
+Nonce.1 = 4051880ab2d0db4542a40589dfc49a04
+PersonalisationString.1 = 1953a947629fbc79ce4323c727466723fc4184195f9bb1018af15fcfa22aee6a
+AdditionalInputA.1 = 8db0de6a5418df8c1bf002d190853f4f88f01384eb791e8c377130353d586d59
+AdditionalInputB.1 = 5fc6d23ca5e8f7cb6f2fc33f3c0041e49b0d41fe9f1f1292cf0405e14135d099
+Output.1 = 3025684ea6661fd1696beb6df0585b647438522d9c712c0dbbe9b356139e03c8957f6d3268f447320568b20caea135df9b97115ea7bc91e7f3563a9c80562283a0667409323739801628f965488e5a1e83087a779dba53390a961534901da7b67f968618d76909ff18b30b5c3906e0bb59d6876eac561899b7e9fabe74d69641
+Entropy.2 = f126f51d9c04ea06556a96ec6ad8ed12dcd2bc832acf4d653711dc4f391369e3
+Nonce.2 = b29d96d615b25eeeb1a2070d84b90258
+PersonalisationString.2 = bcf7cbc8e73c0927e66e00afc3b43a24c70fff1e92a6d6bb2c37f5fc246ca8f4
+AdditionalInputA.2 = 16514ee7a0bf9c2fb784de90fc5a52ac72cb7d7e6a0635f4c01683d6538995de
+AdditionalInputB.2 = 8b8f41c3e4015e3f2703a0f2f034eb1503984b593f1e5e8b0e0ba7ed17f2577d
+Output.2 = 8632eff5a138313f3505cd6ed20e59ce2c4843b560f876041171efe5c13a1286fb00f54b41a2c70ab92ddc18810e4a81d69e1693057bd7bdeab55f42486d7c4ceb588d6ba133d5cdc9a5df24bc1eb1ee62073a5de06c522da65b2d524798aa2eb6f56256930d31d72ac981bffcacd5c06f33ed1f1873009b70dac04d5eb79c08
+Entropy.3 = 162a6a17e07c17c1917f8a42c256113031fbcb00a131b34ad3becd1953bafce0
+Nonce.3 = af05a340ab1088ad42615cdc28e27e1a
+PersonalisationString.3 = 91b5ccf739aba6ce49653bef8e67aa0171b5f7763adc881a13324d284a937c6b
+AdditionalInputA.3 = 0882e2475bf8bfb5c4581256cc99256f92261d493704602daba7ff6ce1dc718c
+AdditionalInputB.3 = ef71a7b29ad2c6ae7ced171a2a6f5d39e67e460ae806336421389f99c8ef5183
+Output.3 = c2ef477cc7f3563c9a2f310c6917160ca9cb17fa31b8163ebb71959472b9a070c219205148ac472eee736778cf14aab8fae0a0c8ef48cec8c5c8f51a17aa79651304e33976e6f62d23494d0991e9566dc0b07b70bb855868f07e175bac2b293da46c74b1dc0cff7aa322fba4ab03a1aa2029ea739de40fdd6e507ac5836f76a7
+Entropy.4 = 241646d8af39e2256e4d031fcf7e2fb654b492bea8b5856796da6454c35e11ee
+Nonce.4 = 0d3339bd543f500c688c36b777a46e33
+PersonalisationString.4 = 15118c191fe254393333003fc85ce6d6c659857593a1c6b185bfd405ad6a7b9d
+AdditionalInputA.4 = d5391da6acc380ec75c5e99f177acdc34b13e05339afa5c49bf6869a797f1908
+AdditionalInputB.4 = 9a1248121aa18874ef9bd2b2f1f80678e108f17af3f70b4ebb951ba5cc46fa25
+Output.4 = 8349a0fa7b9a805c2604ab51ef2a993c6bc98a250c0d4dfdae704516a40bb1c3c199a1fdbb887a750fcff07550798183aa6507f5d24e6db53f92b55f29082bc62203da3e4e0bc279be58f7a7eeb7b8622d5f8aa0af3781a8b22fb21cd3527917aabf8101bbd3f427520ad40575999ac1f116d8b3c77f2941f6e8b60f5baad571
+Entropy.5 = ad198f51da004a3fe11e648b56a95fc0b839cc75497dc6f80c7595334b6fd0ef
+Nonce.5 = 1829727d4e2f51813a7f17aad62258fa
+PersonalisationString.5 = 7f0d878a5b774954f525d8d2607972a8c0ce934aa237bcb677e8d0a47b14da84
+AdditionalInputA.5 = baa453fe5d536da109a55dc4ff6fd2707a89f787f03060c1e974071b9ee40bd1
+AdditionalInputB.5 = 7cbb581d62e0838cfc8b97647e7b04db1b78c8703a4587747f653c65ac4a09d0
+Output.5 = c66586515942f7eb5a809ef9d07ebebf55862b2e1ee1fd31e1f3c54f39bfbbfd7a28879f4bea55d48eed2f1f867420d9ea06b1be01b56588c923e473e72f8d18d4ac7e6120885e21c8eea32c3ae0cccdc3129ae0b92756a94a78d9af7c8bb0d3830fd332e7ce08ee2472625449edafa001a068b6e1b572c089e472d0660650a7
+Entropy.6 = f74411625306c229c827b9122c9d4191c59932d98d17a360a6c4efd21d000b4b
+Nonce.6 = a21b091e3a76e201ac6e7c3c7472784a
+PersonalisationString.6 = 69741345b60abe7f78fe30fdab9d7cac15eb5281e2fee8dbc6042971520b4e40
+AdditionalInputA.6 = a472e06c1ef17c091e26681e081c2093f1553a563e513b19e7f51726ab665a78
+AdditionalInputB.6 = 2882a7b34d9cd9455401afa4b9e6770af410c0cdfb0070650699872d89a052e0
+Output.6 = 53969b2d1669d2a9d74a617a2cdc443dce8f5e5b78df5bd1341aecf49c6fd1818738ca90a60650ad3b25bd3a85d6fd539d399fd0eb89732ce30aec0bc046b674ebb8f7f42a3a40c013e316b2e437dfccccc5a3407688d68a7954754b316cb0a27817418092bf181dcdffb662345c4afc70bc106e1a1009c62e4c02ac68bea160
+Entropy.7 = 04912d87d697225c1c06236752d9965d461bbc4b6f2bfeaacf7fa4dfe4845b7c
+Nonce.7 = 9876c69ab89ba243bf526d7e56fcf17d
+PersonalisationString.7 = 50766199d4eda1a22ad50520e2b15efe1d557198d0dce24256b316da3b676904
+AdditionalInputA.7 = 1fc4ba8d936c8d923218b0c5373f59ddaa87026ea9138270199b67c3aea60c19
+AdditionalInputB.7 = da9745b63be291cdd7bdc7592c72639f4b1ac555ad4722fad01de4d3139d611c
+Output.7 = 233f2eb59e53a468d5c939e2cd8ff0f53c84a358a1f568f0dabe8a6da1f05fefcab09084721e04e94dd6ad5499b27f58c3623f38a058626e36c199df9d0c4f7d43b7aaa91694e8fa005c20ba1185f562c766afdc46f5e0b21ee8f99f1b5d74d2a5c3761712686360457ee5f39e401cf13a7860465266885c852c7e0047ff10ad
+Entropy.8 = 62be631f13d81b1e541266db7e6f700d20e57507286194f9df24ae1206b194bb
+Nonce.8 = 7c96ef19f0a493ab125a6ad652907f49
+PersonalisationString.8 = c5e7158a2f998a0d7a86fa200095658f06bfdface259e4d834d6c1527d77a005
+AdditionalInputA.8 = 7bffae3849642f4e4c11e2c9d0661af728da444e84e9443cf08e16901fa6db5f
+AdditionalInputB.8 = 2002702e7dbc7f9c6de15c8278b45fbfb4d49d4380e9449dd7954e85354968e5
+Output.8 = 3206ceecea52e28e6d9d03394dcbb911c24550863b296213083c6c8378341c4e249a74fb6cc5076cda6ba3ea7ef4986fa11ab85dfbb0f0d1e482264a198e0d5d2237a6c8133f162df2ea903c77aea9869199a72b2b832b50702d2c56d2acd89721ab1030a7717d6013f1094094932776eb37bf4bb312c0d5890058035354f4dd
+Entropy.9 = 04373d0851b92846756c9afaff843434e6dcd239e30b004be5e028c3b2f980d8
+Nonce.9 = e4500e5872e8172297637eab7c397a0a
+PersonalisationString.9 = 335ac62faf112760a094defd1816063fc6fb9737eba95eaf6958afa58791e987
+AdditionalInputA.9 = 23e90c1e4d86371d1a18dad03b65e773939c1acfd348d5560440c8423ca9c187
+AdditionalInputB.9 = b7bf74b8e469f17684975ef1505074c31111cc8bf1cb383e983488b55d2ab652
+Output.9 = a57c021e65c874f93073566d8c7236ec4e4052bed18dc16adf4932c1bce124fc23db979af66feb3bf195d9037f0cc2f8d4c548453046881aaf36429fefc1177b8646306a257ffe402371b0d246f8c498f5e64fbdc41a3829c8e8c3b885e0ca373a634889f7adae7f320aefb129159ee448b1b31ba1cb7f4ed0abd8dc52029350
+Entropy.10 = 1b3d9c778d104ce50cb8a355015e0f844a24da6d8f87f411df25b125f3023654
+Nonce.10 = 42dc85ba551339bbab7acc35d05ca12a
+PersonalisationString.10 = 9007cb64fe8c835f896f7c627d0c8c629a3eb498b914da68a6ece90bb8603708
+AdditionalInputA.10 = 959613514456db6b097a3da7f2013b20838d3f9e33b93b420ab9708faea7ff55
+AdditionalInputB.10 = 545c76712a388957b402beefafcac4af90c4415a5b25af0deff0c399b75926bf
+Output.10 = 0418769773d2c54d1e949960758b979ab5821db817f923ad7f4e30db99ddfe256af450d25226ce59dc089a42a3ec14d4852e67c62dcdf49aa1533f8d764771e24ea67cf3a891ac173727598e5aa7838e72c2a2cb1a880ec07d8e85c3b4c36afd263ab5697c777a90ec1505275d19b0902ba02373b1892473b79005c5564f84ac
+Entropy.11 = 3d6ef5c299ef4e48f9d6062692202843517883fcfbd8f04a5b1d8827f03e8341
+Nonce.11 = da32122de317e8139ddfbf04bccee593
+PersonalisationString.11 = 0e17a64f24ffa899e7d1187311d1d15bdbb188efafa2747a961db871b2a6814c
+AdditionalInputA.11 = bdfe3217d22d26c594e1c9f294dc9bbd0524a4b986ebb0b961a8ba776c90696d
+AdditionalInputB.11 = 833d96a820995207045e7be63024668cd06974a8e5cf0b5e51ac786954dc077d
+Output.11 = 1a60dc419f613f8dd6ce5c1ebecd57f94c0c2d7d4a76b0eaf14f06c77056f4d85ed6bb91f93d007f73cb1628113abc7a34c6a2cdd7dd80ec14104073e6eb72e61dcc972b4bde93d298bfe12460c64dd83738fd2a39bd02dd52c910a4192fcfcd392d96f8fec83ab935d5b4bc53fa8e03ad080aa279956d9cf3a5baedb7bf46fc
+Entropy.12 = 307095d3988a6784c0de8b62bfba14e76d0837497608e3ca09f40855d776ce40
+Nonce.12 = bad3299ad3c9f0b421f3920156f84d43
+PersonalisationString.12 = a29a09d32283d14ab219a9ddb9e16b0b1ab1d0388d20e4c67bcf0cfec09c412f
+AdditionalInputA.12 = 0d0256993bd88c8c8bbd46c2d57a1e691aa8d63fc52469f7d8309e984312d2c2
+AdditionalInputB.12 = c35129927df9da0114f9f4bee2cb0bf3f40703c4ae373c2d5b365e4d9ca47f07
+Output.12 = 45a5acbb705603659ad55439707c31309ba29235c7394309de2fce87fefde33eca5cdf6eb2d552774d5a3567e69de17336d906891b50768b9a05200dcaab488fb626a64fb95ae13928971db3d4d5ec98cf89e72c2b8e0bdc833e316c93e06559e72d12343ff9e6340f6c6eaebb8f4bdc9756d24b25e6e18f0bb71440aa60c36f
+Entropy.13 = bc8ba446c68b2fd3fdbeb8e477344258a2ef2255c3f14dba02542bf51cc33a85
+Nonce.13 = 5d04e33def6b5ed8732dc93bdeb5000a
+PersonalisationString.13 = 26f7c629dc1c44dcc3833474bbfd76ed047b863a20d809c0b5f00eccad3ffe30
+AdditionalInputA.13 = 2eea882d53ba94dd7ec57591240c8742d4c0201de62ced053f197aaf97b9a44b
+AdditionalInputB.13 = 850a641c6a528478e9d21e4c1122159658b9925118c20b1f08daff3d1ddc6163
+Output.13 = c6f69853b30a92c617e2a048df8644d15eb4d4405f4c2f9eb532e8e012e57408b5390e2b71c6e1c67584817270cb981358c8ce4e211e313b5f98b9940b6b7b803a5c9eb7a5487d2f2d67fea38b45bd5d9a01d22fa0364594d21c1cb8a8f74a042dbb30ba31d5d9c4e085deb09868944cd1ec19d3e4dc9c2f1cf113eb9b116160
+Entropy.14 = afe8f1aed0e9117f195e425b7315f05f8635297dedec8b41d13e53b2d852a924
+Nonce.14 = e4d356f3e11f31d3e4e6e295d15f042e
+PersonalisationString.14 = 0806cd80140302b264ac5812b74d718d60d8b3a9b279c592716a6a3d3f7ab79b
+AdditionalInputA.14 = ea12ddcafa4f578b8b43337508dd8627844d185b10af7de7e907d113c6d1fac1
+AdditionalInputB.14 = 0cc670275cd2b0eac5df123eb1fd73c2f2b093b76806943918cf49930fa97515
+Output.14 = 88dc727007c0e03c8d27d00c87876f8990b271964a5275f636ecd7f18cac9c869e5f9df5fb2d34e7f89c2e9819af562a706a03d9be9318896f5ab16573aebbfd94a681cbf27e7202b8674437667893246c267785d0deca5033de88a61bf5158177391c2e3232ea6f812c468d5629ed9f89ad0bec0f6c7a469f56331f9eba1cd2
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 10fcf8146dae3b9128b9602fd61a2a6bb009978bc9722a85bd60f8d30b83f552
+Nonce.0 = 6baea5c15e9250c9db5c09435c4ffa73
+Output.0 = 24ae5313ea0103b4b333ba25e22457259a41f85bac9db81b6b55f1caa621557ede088d6a0c4819a253c58bc562e00c6447499c091f93077dccbe8e911f9475da659ab9ae2a931f66065f67d8c24047be1481e706ea73ca69765a65f9dcb591e1b73a8bcf8a475ec946477b8cef12723c2742304578f0bccd7e513b78ac94136e
+Entropy.1 = d77be0a5a4fe465537546e994851fcab484262f4c697a2adcce15539eff5e675
+Nonce.1 = 8c752466ee270cd4870f5b4d3e6567e1
+Output.1 = 227673c200cb5d2b60c44d7bb90c43a8b06cedcbd93c3000651f8fd0b075d56f824aafac1c6cb892e75db3be1ce0cd65eb2069fb58adc875f098d8224cf62d4c04609f4571abbdcefad66c461a0c3b893f2140333ee4b8a89cc8468f41748fc565fb65798aa11e030df73a285407e6db30dc4a62f9bae2a7b42203bc8a6a4917
+Entropy.2 = c162e8a2cdd60c3c63145741dba3976d08793c2a9eefe422ed2790f0388a7a9d
+Nonce.2 = f5e38686bd46f8841253465bfffacfda
+Output.2 = 63701fad5563373bd6c3ff38a1bb7c8e5bd3a88b4cd182af534c3a120317fed5303efd8002709da280a17b39b506c4188f0eca9219db90868e3780f462b95902cbbd339543e41b8a98eabfa31399a0bcea9e8201efa961aca14a888d99556da529e72bb8158f855fd8c161cde32d130afd8c8691cd81a785e85ebe212dfac0d8
+Entropy.3 = d44e4e3e5347e90b4d2ee05888af66da3c26e1aaa53ffe764168c53f4e8c4777
+Nonce.3 = ca8495549e2bc06e444e559ee0c2e259
+Output.3 = 77356279c3c7cac6f804f32c496078604db25290aebd9014fb54b2c6854134f11f8dba3290725c97a6908bfc266563652ba59404611351c4b010bf2ed2d53e0cb5bc9812a27919e0db208b7897ba426b2b0f7c6982a6c3d3d9343093a689038d9e695449ef5a5db0786cbcb9f738bbecba27bc9310c62955a99c2a079b3f0d64
+Entropy.4 = 164eddf7e5ac3a97f12fd9dcec6a2c28299fe438b2f2e528b85a5570273c49d2
+Nonce.4 = 6e8ffb04f424e4a44cf9ef1d23976056
+Output.4 = ad381ec5b480bcb139067d5c6fc34fca074e7582bbcc2950de130fbf5a71ffd66c79a5366bed8749a2fcca8aec48738024b59af4f50a8ea435daab467bcaf8be0b340022bbacba80fd6ce5dc31e83f86435acb4af5ac6bfd7ea55ad66e99c5d77332efaf734560def68562f44530a4006d4d861daf290a10e22305b4e629e716
+Entropy.5 = c08325886f63c7468875930cdde822f98bcc5a8bcc9c3d3ddcc93b87778dcb8e
+Nonce.5 = 91b70fec62c55f130b605687773d1ec9
+Output.5 = b87be3fe492519398921db91d60ae31c99ee62069fd1b36d8e5f2e18f832ebca16e72b88c5898b27d8713718cc240b4517dd2cba73cc00fbdfd6cd94eb9ab2cfbd4c276b68881cfc9c612fd39599d73570a4614353795a9357f12450bb1c9efa096dc45a203c11291aadd765eefcbd20d2af70c51327453b4e8c3d67f13557b4
+Entropy.6 = e5e81b2d7aca827c8afdabf6d1aa2fd0e83ea5e14f44bca8210f70a5ba4a6efc
+Nonce.6 = 0a48b9ffba4ec92d4394aa47b3b5e76f
+Output.6 = 2f9b61ec113842913bccfed32b6b49ac99da8ed983d66757044b7d8ff01953a444527b111f78af5e2be174772008084f17c4ec950e1fe050dcd59c8e67f83338587e134149b363d46bbdc71fb5ca402a0499c72782795b128a2622d8c4934f0c4d9a59c5c71f28d6da1daacdb4b5a7e9fa7cc57ab9ea0bac9fb53af8d03bd906
+Entropy.7 = 2a0e188c8c89586dfe41d99664ca7742a6351bb359d9f6acd1aef946f08d442b
+Nonce.7 = ed97b1b9ac5d5d9dcdba2f83d6571c8c
+Output.7 = 1e242848fd1ec106dba9ddf8df21712872c1e6b99308f49ff48edb51e5d3af5f2d7f2347cdbef284a1b5377ebb06ec0d1318d2cb21185a0892db0dae9614a0e8886986ed9d3fdc2a666c7f853def036fb0d4ee3e4a0ce5a716dccb486acde448aab6b11789440c72902ba4a8951b486575d8d643a9137f44d92ad499fc2133c8
+Entropy.8 = d994f45a7cc96c251231be52fb9a0ee71598bcd9ea238d5e3bb0d9024b109790
+Nonce.8 = 960e6914924980f39ef4467995e7acb5
+Output.8 = 1e79ee0fb78196863e08ca886b756dd527bb26ffd8742517ec5b2a2db2cca7ff3d0141843b31500803d93d3081f6cff618d85a68b87eaa6467f3a5d4a8faee15494bc67d0e20ecdf0c045df362754d1eac229ac08db652421590481482c95469a6ff0d33c82680bd24879cbaa3422ebe2c21053e90ce3da7387f1a8ee2386520
+Entropy.9 = cc1b4aaaf4bb4e6f780c01387d1dc96052b9d31df08ba65ffe03a3b81d266a7a
+Nonce.9 = 6e3efc6d37a59c41b722c44ff63228b4
+Output.9 = 9dcc10acecae8b398c336fee4a041d5ff8a17b814625ae8425e7c0544864985d63479fb89306f9b10a2dc6b3d125729b5be30d7657203b869205193507f495128f456e167d8ba6d61471e5306faeaa2377c8b5ec2d02a2e78e3980b5a980d3c3d775908cd7e22c84beaeca68271df7f5b9a165fa5c00ff1d1eb9719c6c5b480b
+Entropy.10 = 309d4fb899d41e6ade625394ffdabd2eff54a8894e5d72440c2132d51efeb9f3
+Nonce.10 = 9963ca2c47c1373151d4aceea538e81d
+Output.10 = d8e507a090a690bf6dd264ddcf8440202d6f824d43ba695124a9bbae11486661fab6e47ca402d50d56307ded294c94ec0f3ac9f77f194fa3a0568c8729bac5a2af5687d0900cf8f173cf1e6b06bf1a1b319e0f8674ddfc97089119474a76bfe7f1d8607d667ac786de8f4f582b29deb9b984f0a3e07ea16a266532bea581e0be
+Entropy.11 = dc50dffd0059b869f4c5c1c26eb84e7952ec88acc30981c22bdb3eaeba78573e
+Nonce.11 = deb4925ecafedce0a2b22d34cb2c4db4
+Output.11 = d439604e338e75bdf6913fb60bfaf55f351f59e6c053dc0f5b2d511f810f1a92c2c419253e8b3916f50c5e9c0eb562f78df2ec853b8ae11b5a13c08eaeaea511b2881232504df077ee85b401c81f472aa1f11c7d039eb1a94ac3637a23ac2930b8fa8147f907868b94eac0141869da3c87931735bb5c52f420af6babdc5f7270
+Entropy.12 = 92fc3bf974984f9319909b012857495678e321005b3719b20a29bcb66aa0d8fd
+Nonce.12 = c7b8a5b55120c311a7ce4d246d55b3ff
+Output.12 = bd6dc280a58e046bb49d05ed62b3569d958b8d8a3578ff341f142c6903f1f927820c3ef4973abe202fcc720e8b672d68c49be711bb21bbc63703e62f91ccc496134a660e7f70e3d105b9f51a75b3c7e0b029749eb6f58acbd905abe6fd38dfa7d1a3bbba234313278265d2c5268641ef76e920ab413b8c2011a94755cf809e97
+Entropy.13 = 5b1bf9aa49da3f434e5b0335866131e3539bdfa57e039a2e788d9144dfda66f4
+Nonce.13 = 3e30ce4bc1b60bb53d0bd4ca23a2f638
+Output.13 = 885f089848ae891ae62153773b0ccf4711563956e50b6f3bd4f35d3b55ca64b528146f28704bd2a81b11b644cfe83709c3aa038a062f4946121d5a71c39735ccdea64f50358ffe71cb015674c351af290971c7e2cbb8e8fc4e1d24132c1547e83ccc3dc64f4991fd5e317b771eeb7045835db0fda85c719b03828ccf1d001ee9
+Entropy.14 = 6b9f904ac4b16d36e06a1bddc501d7ef98d5685c1ceadd0a6e1622e0c1e73716
+Nonce.14 = 4a42f39e5a241a2b96db29055159c91f
+Output.14 = 785014b0460831b7b67346c6997217b0f6c8e7313687ea6ff4d0b09a0786bd6ac362a0b1ddc6ab8c9c624625a379cbec7f11cf30ddab23cdec054b986175cdae0ca4ba4610e0711bc94e9ab706539d5fa2c1a4fd3cd49042696b58dce465f8e09a200e7d214cda357021c62248a01aeb95f8ffa8bd49d354fdccf4c71eec3491
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = d655b2dce5be6c88242c85aef1155b8b8a191de6565ead972f6199f370116296
+Nonce.0 = 4aef212c45fc6e4fcbafb655a909a153
+AdditionalInputA.0 = cb28b3e5ff3b6f72444c1c1df2f6a288bd3d8c77d26ea641af9e733b5231630b
+AdditionalInputB.0 = a2eb20f07b2514c782f71d9a3b9c5a41420d7a8bf172c06738c8d2a6b86b8bf4
+Output.0 = 2990b9c15396e07ea7b03b7904df85e1a0115c55a6db7d710147ddb4fd88a0d45cfb87f77ec51f58ae5b7659fa62b1a7e29697e8b77b6f3d5e56e0cb16edbea0e7a4157fac157a57263e96806df0c095d7e1a52a29d941bfa8934f1346a3747e8ba4ac48564bad03abc9c67a418954d9658212192f456aafff6ba7802d4c7c76
+Entropy.1 = e5075419dc3e8ef44b2f70de3cc4754448cf310ce7611b5e22664ccf7f76a45f
+Nonce.1 = 459551c770cb5738d6a0c9dff5a885c8
+AdditionalInputA.1 = 3fcca6b0a9d76038dcdf653fbdb9ea1c974772cf502cad722b0e9586e7095fa9
+AdditionalInputB.1 = 12813e4f10c6b9c4c336b925acee74bf8f6898985cf2ad344f966f36dbaef5c1
+Output.1 = 4ada3d40b220d74b49cb06e4a521fb9c8842df180df35c7305ae90cdac41092818fbaf4a7009061d7a47d9b59a7fa0ef571516bcc1a6e3696e22d75db0303fb60cf9b7f6cfcb433cf7066640557e755aa8acf44752b694aa6482550f00454c7c38baf071f52af82723b72ae32d5cb1db9f08b8cc9938cb41a01b572e1dfd2031
+Entropy.2 = fe4e8ef17eedfeab58afc8408657b157d237dd5a3032c3384451c645d2e1f032
+Nonce.2 = 04f259b71a64f449a96ce8bf4aaf6640
+AdditionalInputA.2 = f0c0a62b9457a43ac2055ad05534c0e588559e97042daada79ce544145cab762
+AdditionalInputB.2 = f3fb563d2743fff9be92724f07b36db36ca315b46aa58cc6e852fad274ac2882
+Output.2 = 5431db2c241a02f4052065e3d9660d78b80e17d87bf4bbe1a2607bda5066a019c31ca77c5de700345ab85d7e7721fc225bba3af19a211f3d7dacf9c8636b0cd4d7cfedce80ebda6a3172fac658145c09f84324d42f40b0d9646297e8b05adddf016cf99c82cb10570e3009de92b7ac0033e0d9442d597a8a12ad9a540a6ad8a3
+Entropy.3 = acc8cce03d6331eee00e2f92afd0e57af6d334dc09f1f12b09531aedf1ff97af
+Nonce.3 = 0490c0ece0001c457c37a6ac2aaa9c84
+AdditionalInputA.3 = 7a279958ff7353a86d21b1ed8da13e82dbaad5b6ba9d575d2438ff78681e78d9
+AdditionalInputB.3 = 45fb4909381329cd115e20de635c17c8aca86660d8261c8c484726c6b7a528e7
+Output.3 = c70252129ebb4eea5d8f16d74cb1bc9158410a6a21f9d531ca72753724bf65a8524aedd2e52e415a94da0bd935e8a70b411e54ca27c589bc39a7500113d693274e7ed63c1efb5d0e6ad0534587ac465bc27650457b76acb1b5edfb8e84f4879d65a96d560578a6a470f51e746a0b6ef16e905f523ee75c6dee7558042a5b5344
+Entropy.4 = b4c0cc8b22ff8b0964cf0bcbb346698a55ea7919a46bc3f8b3c1d15ac8f4a2e7
+Nonce.4 = a7a37ad52402287f358ad4ba0fe5f65c
+AdditionalInputA.4 = bd3fd666290c62f6a983165e0a9b0b6c2c8eb6c103f0f3ae81182daa0e23ac09
+AdditionalInputB.4 = d57fcaf6e2ace0ce6d593130c3981ce85b9e6028bed032d161b724526209c930
+Output.4 = d2517b96327b4254eb58ebc81d39ab86812a8e44ef791b03db3da09cda50235483708f7c8a43a2242b90a31b0a46cb3a156731d7df131ea98ccb34ff2e8c31ed1d50735cbcead7b897e68d85327c88355216cb0e9f5464e9e31d6f19e3c65354092de3ce7305f37bf6dcfda024856b4e40ca5363db69de046a0744633c7174ef
+Entropy.5 = 33397b807ba729011829cb675eb78e0f242760e4d23be6346cc4a848c8652264
+Nonce.5 = df486ddf24880a5f4e215b300b6a78f2
+AdditionalInputA.5 = d0bc65dda5f4cb52a3f29a0d5795f9ff625dfa99bb18224ebcb1942409afa073
+AdditionalInputB.5 = 05c67b270f38894b0be81004cac9da1e63fc5926e984a1e9ba74f683941b5494
+Output.5 = 01989d154481cac57e014d92dddfe8090c408f4b429b1e7ac516ae3eaa1f82b5edad323a438b6411b7ce1387fb3b5cfb8e0c362bc7a9b3f415f3c70ddfd85bc70c9c7b206920e298d83d9926e5d499bac651761187bce386d07775941e535708bd567f394412caa57142ece8a6467d9c2c6f92ff70eb8581b6da36e047621f8f
+Entropy.6 = 8acf2e4ae9db6969555b4bdffddb23ebd57e95ef12e1fbc601560b95c33df434
+Nonce.6 = ba6fbc2f089305fe03043853aac64402
+AdditionalInputA.6 = 175e6b4b49e4aecd13c597210eb134231807d59df4166a08b65c993539e49275
+AdditionalInputB.6 = dd14a03bb1c5fdd814dd26427cdec4374b6c9fc33961a825d5fc806171418d76
+Output.6 = 5ea601cfcd6ae2be5416536c090fa84f890f7ebdddd25aa4e2a6310134cd14651ce733a4d51a0fe272683474e0910fd1802f1c1e1a0d5e1a4cadfcc4a1ecf125ed48bc8ae751c07b8aa6052d6ac4112c3f9845ca554087a8b33ebe999743a9e02d2904a2f309783eeb78f639846214d95805e69531617fca284c911937bafcfc
+Entropy.7 = 7e4bc7f6ce0e75a2c1a9ac2816fbc72fb47d36516d116e753cbedeb3098474e6
+Nonce.7 = b5a7315add24016885430c4dc66db469
+AdditionalInputA.7 = e32bbf798ecf281397138c0948070a7f84b99b700bc37e0767515768bc172a94
+AdditionalInputB.7 = 343c58ed4dc4eb6b9d4b2955b9a9c0af8b2cf150861b75544e59aee5b288a6ee
+Output.7 = 517eae10ef91051ef43eedd77347777358bcaf7b7851a74e1ba1fc42471ec1a4aaee4e0cde41fb0cd89b1b30aabb146b8f267dde63e875ff1a2cf3414b5fe3f3b22bc7dbdfebaae3432a620f1ed7353970553748e2188f99e0d081eb6910009a6404701bbba1955bd33caf6f8cd6a117d55b4202180994866f6e91bda647a512
+Entropy.8 = b467e6551dab99051d2273b89a5167df8ae9a85d7c8c038a1c9c36e8f72547af
+Nonce.8 = 82e5429a03e76b1b51eccbac296232f6
+AdditionalInputA.8 = f0fb787b91336de9bed6ce86398fa84e0c3a640fe904efbc4b80bb28f77b656d
+AdditionalInputB.8 = 36d776f40a725de32a94bc516e9aebcb1058440020829d32a96a4fde1b8c02be
+Output.8 = 82eed6652c2b374ca8827fc0772c0bd7ad22913dbf84f5808dfb1cfa717d996d9638cbbf93f5d6b8c8b71186efdc8f0aa8a7d2c7afc3b29a0b4790b317742e40c5584842929843219b5504f4d8af002518fee33fed858615b3151601c4f6206545e257045b1cfa7a8d6f22097a734918d0f8774e4cb87fac1b93e071e5edc393
+Entropy.9 = 7b87eb8c272b101223ae3b6f2e7195a88e37a85136fc7a9f7057826ebe604e3c
+Nonce.9 = 71766afe4ab1a1aa178854f5b5b683c3
+AdditionalInputA.9 = 0ba1674cdefebe59a2d33c06105dfabfad70ad76153988b69b2bc10cef7d1a50
+AdditionalInputB.9 = 78e45ebf6e2032c437fe7f9e3310b5ede1b0547cae5b1372cbc69a1744c85930
+Output.9 = e442973e8f6b9daeb2740c5878ecffcd1ec1afa28a32b76c5d93a0257713e3e198dfcd4488b17c54c2fe4b014846abdcf2c4f881af2bafa7cbd16e17f89ce9f3bdf8a5810fde977760159e254ec5ff098df410a5f27e35fba25532add23227a5cdedae75b0f08420568086812fac85d2bbe055b4c0847e644ad227e4d5f1d719
+Entropy.10 = e465ead60ef17fe195a6bfff3c852d7d5dc0ce0397c8e3fcaf16c042fcc52503
+Nonce.10 = 78d40b9b261f53adf952b9b38c2a46c7
+AdditionalInputA.10 = 0d0f507da569735731a31c722818699bf682258afacee50a4b0dd6e5be24a868
+AdditionalInputB.10 = 69157422c69d110ca6f34592dfe3096f5fba3c5a06ddcdf86eadc34bcce5d427
+Output.10 = acb0d6ec609f8bfbe92fc5ad23bf23bc2ddf625374c09fa3ceb1cf162b4952a696d9cf899e1e3622820f374d7e1d33f61109c9bf57ad999a9d55db02be669d999975b19c29c34f22951dc922954253d18126e7aca1e6105ceef1b3ced0afdfb196a87e8aa8a8eefcbfc7082702bba3e3562b183d1ca776f219497ffde29e702b
+Entropy.11 = ecdb60558a727c176cac1394fe81333b6a01d73bee0ff98575670a9146961532
+Nonce.11 = d9b2933300f20e5755a15b8f53ae0f84
+AdditionalInputA.11 = 77ca4365ae20c488297a08fdb134137ae4048a4f1769c873375bde2984aeafd4
+AdditionalInputB.11 = f72c33140e7f95c1257dd5cc7150d0383e23c70afc44ca0985741ff1c5d7bd69
+Output.11 = 283657e6d2effde0b190509c70b649ab3185db1c0e305dc796c215ac06baeaeb4df94c903a6eed2bb713fdb129ce3638a2d4364401aa3c79bddb1017bdc5f452eb469e6780a87733207bb2f0ef6df431d8143c0310e374c3e3df59f233648d43b0d954f0cb8b40b733bda65d07a4b6e94fbcbcf409c422208a208343d8709250
+Entropy.12 = 911929c3ffc14a8ecb5b26586edae6ff282bcbdaf9c4d4907f6846a2562a0c3c
+Nonce.12 = 4d7a46dbc5b6ffd0481a3e070d5664ee
+AdditionalInputA.12 = 4ed9f3b31507637e0692f2f0c705b41b0ddfeae0498622517c03682cac40d7cf
+AdditionalInputB.12 = 3c529fe88e7863a78cd4f0e893b56d8b780723f2b579dfb855b7135dfc04090d
+Output.12 = c6b33017129a5fa1ae98855377447cbb51274780ea819f322e3180cce3b92abd0ecd188bd45ecbd7f2457b49fc560159f70ca07a26f6ef199f5f05673a2a153a4c2d05b2db11cbba731a8cae0074434f743eacd8de46ca73a70a105b5a902c47e6a5c94b55184993ab4a11a9cb9b0914c3e0cc022663c517fc0ed8bdfd91a435
+Entropy.13 = 8663a4934a27f7ce257aa05f3e7c64ac4478481f0c822e2e5a7ab17208f16965
+Nonce.13 = 1a26322dfdb96fe4a881eb32efa4e8af
+AdditionalInputA.13 = 43a3a82254715ff38223b1bdaba44167a475915782313bc3a6403cf470f53158
+AdditionalInputB.13 = 03b74c720e937417684628992ae20f9058109bec1c40ed42fc782c83745ab16c
+Output.13 = 38ac18a7b3e8b4c7ab345281031584c8ae55997bc99b3bb16b9b822acd2da7e07b82b6bbbf1aff01a091252658f641de11706fd00939335f0fbd841b7cc8229aebf0abb5ae1ef08ccd9f9d28c3e11246e8ff56b2254d32c5a8f961d17109edb44e4b8f057bd64672b231e5b6a7617f34602174bac27ee405a4815b17ee9006a3
+Entropy.14 = 614eea0aad7d0c66200092a0f8303aa21b3349ccf05ec5590272f890578176fa
+Nonce.14 = 4c4fff769cb2196ad57c9a674db91bae
+AdditionalInputA.14 = 147d51711ae8a420f165db0000d9d0cb9e9cd5447311eed43d7cc9217df97a3d
+AdditionalInputB.14 = 2910968bb1976a1b8ced116e673f408da6fc563695c918ac0a230b0bb800c707
+Output.14 = 357a7269b30ca744e213d894f5c45d0db9fba897e0c863a56062f5018ad9be9f37b8d550014ed68f2c34bf5195c0b7460df171ff3bd4a590578670c92470d876c8de19d48a6d7fa15fc7996be78d3cc8a5c657439f4bb9865bd56e187d5df2531a405e3e0f4b87c611aa8e226b8b0266290f06f8062456a7a4bf0896e4ddd948
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 1d867f5035bc9283f28d1c73c0694f9845ab8cf0183d88675f8f7c554161dda1
+Nonce.0 = 62cf61dff15053a91ffca7e72d5fc123
+PersonalisationString.0 = 549acbdbdcdf94e8494685f00b9845f3de370334602aa41f8180e198a35cab26
+Output.0 = 9bf8bd71725c751cd6e82a288f50d9b710fda83903093efb49b06098fb904d08339a0ba0f489517c0cdfc12e1eaa3ab4caf00374e1fb5c776cb75589b1600b33c60e2d6f8ed29dba28ed08a183257c8b7635f987c037b29377d4c5348a46e0845ef7e13cb682345f99be900b3cfc7fc4e746a21d06754c14ebb5853f8cc8dd66
+Entropy.1 = 28b9d9578a541a44f581a0a4057e0f7150d495ff29d3e8f8fc34bf689bba5b4c
+Nonce.1 = f960a9afcacc864451ddaf6a8b503acd
+PersonalisationString.1 = 68cc3f6f753574432091f165230d96c20797a61f2bf17419bb39251400d980b1
+Output.1 = 1006fd00b5818f28eed75ec1649a28ed20781898fff9c162cebd4e84d3363a1c140c7a110a315ba1f300422542f191ab5239b658048dc701321d8e94dbd12ee985e317d680708801fddaa27737c32e511b496e9ee260e030c64618d40180117faac4a1f0a68359f361d3d3c6cf163246554856c176fcc6642e3b2596ebc59768
+Entropy.2 = 680a780fb5cdb70f9589612d22ee4e4120a073041d36e48ab2e68a71d37cd247
+Nonce.2 = ca385301faed38577c2f378f1aa7f661
+PersonalisationString.2 = eec481b1191d2899498a0cdb771d1315ca8037a562526a92a13cd3713fbacd08
+Output.2 = a23f2ae78157f70dd684b8a553dc3bc16bcbb561037d1d39313ea7e3bdec13c1c7f98091bb0dc8825a1f743696639b6a3a9facc0b06f2a4de50878b1295ab2ba8ac7c38714dceb9d7a3220a3bae3f4c58079e3cdd302f4d333d42ab11fef3b93e40deb44579508232c1028b36001e3e19d3f9d7ba01c149e8c91c773012efd76
+Entropy.3 = 5b0c1030a67d25ad814be77ee43246aaa507583543d0af127af72701ce096697
+Nonce.3 = 4f4bf66ea5dd80e2f8a74e07f283d82c
+PersonalisationString.3 = a6509051d055cd1511437a23c4c4ad604d77f30c7fe9576015a9d7d0b7aace3b
+Output.3 = 80d95ba8500a378bcca272b2d062dbc9203a5e977724bbe4a743612becf097b00db35d08dfb151abe8928f8644bbbc74080136bb209d02a8f5fdc7c1341e60d4dc3f451ffbc05936e201a03281a4a2fab279b664142aa94019b75fb30a2954a877e327728bd8f1aa10fe675037a33138857b173ae96ad2bfbb9efbecc4710faa
+Entropy.4 = 87c8ce027600444466242819326a0965f807a39faf3a0b48021a65ff13ab266a
+Nonce.4 = 136b1cedfdfd4d603d8fc83309eb67ee
+PersonalisationString.4 = 0fcf8547b441ab422f0cf2d95c47cc28e428cf12d9a9ea2ff0eb42b0f7fd1bd2
+Output.4 = fc1155c5af51a61e86ab99c9f7cd56adf24f58445e3fb698e843b949b4662aac552443519dd7ea9d22208287190ae3228f089e32fe4f5f5d1151708dc3993e4ca645e9743b4b2f7f8180417b5645b77a066c114c3c742c3ac7a93b6b34e8209404c54c349f9128d474a0f2cbe311bc94880cc96a071ec1d0dd1effad9a315b31
+Entropy.5 = ad907f38567e95322ed5b3c2a215be0f7194b132e80619e35fcf57b3586b816b
+Nonce.5 = 8631ea64725c6ccc082c3d0af5d81f5c
+PersonalisationString.5 = 05553e60f6063389263229903834ea47dc81aad5347fec7e8ef9876fc37bf2ae
+Output.5 = b03cd5a6df9082f1e6dc342c435ec792119affde694cae8f5b37eafacf973c270344f1d729bc3d9e4c7baaf6438475a57614489253ed7125bb80ebec8672135e8b7372c457d6a0cbead529069872f470367db15d591293321dd1d6e90885c094e0b30761fdc33c0e6537b56a88d1de9d9525aa655c9466e0ee9e1945218f7aaa
+Entropy.6 = 795769b8351dd888aa92f07d6e8f9a04fed7296c15ab6d235e8a8316680fd786
+Nonce.6 = ee62b4927f4c1ccc96e4c76e014afe13
+PersonalisationString.6 = 04c749682fc9b1cc67c679fdbed9632c29f18225873e4e6107661f6d6eb12757
+Output.6 = 662395d3e6b7f213b8b4b59c97be6663da654193376ac232df472354e551edf83ed2737f935dfac99e025ae0fdefa2859d53197cd13d654eacba97b0e13f06c4541e9091c4a52362260a8015a7eece8b7f54f875dec083c16b38ab591372e4dab931171467a12be970e77131be76ad179aa9eee7b29856b2a60037cca58ea579
+Entropy.7 = 4a5e73475c94f15b6d3e2f3a17925077a0f278f84254f2499a4730864e9fa5a4
+Nonce.7 = 6d585a87e829c62df7a844eafe7dab29
+PersonalisationString.7 = 628f527dddae90cbe378425f45c6c2838550687a3eabc00962e74f673578667a
+Output.7 = 45a45ba2ecb6022043258fd8c9802fde9bfb96834e78597dfad861eb0686672de521e2f73956fada2112731dd4d4681c878248997b97cfe5ef41af7ff0d6b1aa235dd815ec7e907840b4d324ce144d6008d76fe9d750095bfcaef07b9b61252c9c2d8d925e950394636232a21595bdd9ac72a4e288884b3c9400b8f282f59789
+Entropy.8 = b54f138047988aa6444e39f1d6f6d678ee76959c8a60dcfbf326bdec982ad6f0
+Nonce.8 = 07d1124bf91d521a748da933eb2e84c6
+PersonalisationString.8 = d5c439bea73527337a3c286475e0e1843a9eaf4c37f2924a802ef0063a6e0b22
+Output.8 = 67aa568db726709a5cc6d5e157a50338bc898eb47ba8cc4b6fde07bda95bde5543f2e2773b0a557f91aa19e450db0b937516af6e80245d3cf60c3030fe8e3924d26f722c17442b534d7bf1a72ac8e0d426d36875e5d6d9e39c0bd607f3f041cd6c80c5a4625a8c3ba92189c8c35ba27a8647d09783aea4c69fa50654eae83aa8
+Entropy.9 = 598db9f9c8e94758ed16901120b063894e3c8c9b49f09084ef5d5b6ba4f95941
+Nonce.9 = e6efac7fd9a7547b465765505359e8da
+PersonalisationString.9 = 1bc2ee7e72244c607173c82de730983a7f919980c3c9ea9220b13c008d21259d
+Output.9 = 21a946737912de5069cd01dddc9fb261e42ac76d69c7c0d583dea9fdb7d464bbd1c4238ff21df42e8079a5ff33fe96a47e4f0767c3b91a1c1b3f415f257ab08d76fa8ffcaac09859625184eb29900637b812c2fee97d996f4910c7651bc587cee8483f1fc699466a30580ae91c5ebf7a75e20262c20538c855c154f82231da6d
+Entropy.10 = f34c4e31d24427b4baf883d84c332922be2d998b8cf44c7ab037730ac50f2f10
+Nonce.10 = 6de71410f79ea1e45f5e48c97f3bffee
+PersonalisationString.10 = 0007d483ccf2b8fb72e7d1d01b087d192acdf644366461af5356e13bffd041cf
+Output.10 = c517a99856ec0dd95556a0f7674deb0263d1fcfa09dec8e3448697e17bee0946d94cfb6979b429fd318a33750e61eb4649c0eb6b77e25884725c74bd0cdf08a204de6bfeca7b259fe0215175f5b7b8b8750eef9a6066238aac5d4144d1ed8e03710cc69d6a87d25ac00bcd0d783e07e819d05cc2cdb593ba535225d3c05b8c54
+Entropy.11 = f086b40e1a22e54642765b231fca1398b52df50232a513f2c6f88838785bb962
+Nonce.11 = 40b44a20f4f3d848d2b8309d70fb9a16
+PersonalisationString.11 = 4f3e71366ef7b27524834ff83baeffa8f736b38135d3f467e7a7afe65c640b9d
+Output.11 = db909bdb459091fd42334d1c59a89087b155f5ac97b02c3249a05d98c16e861b4368b5c82995139b608b7fc836358ccac44d9caed7a38a76c0a3d8462cf714cb3341c7ff21513bfdd0205d0230042004f6262ebd6e33607c9e7540d72e4e37ebdf4057d277031d217cbdc5f0eec0dfa9befd4473bdc046735e39ee8cb99e81aa
+Entropy.12 = fbc3e284684fc31743e16443ad93bccaced82b9959a2aaed7aaa2f9c2e71e89d
+Nonce.12 = b2a22ee90257c40d14f2a3409e7385e5
+PersonalisationString.12 = 318d3a036f26aa3abb7de9a028f74c8e3268197ed0ac9dbbc54d093435230e2f
+Output.12 = 3256410afa0fb106c00a00e1c306c8bd9b8ad77b8b90512a5a7d0c6465417d93466c77408bdbd6272a7ef9b772291bf5d9c7af12a57301bb9bc3a765648d574ec0f3d51b13ceff5b7bfb03f5eca9f320acf107f9c755b45d914ad6beeb3436a1817bd39717c601dba9a715daabc28f35dce70199f432dd35cbeb36be1317ebf8
+Entropy.13 = 306c6de3fbc4696fc0e76b022883f7e076cfdd900a1d34840084633567ed5f4d
+Nonce.13 = 2f7d1ab58b6851661e2073619bdaf613
+PersonalisationString.13 = adb09590e12e09dfcf790763f5a11ad8e9756d60e05272c6b294f58346c8b1ba
+Output.13 = 9a92b93500a7285b299c50f54270a2e0039e6a90ce6cd67bee14a00e3965961b313f6ae16932bdca6da66abc350323b2f8b72a5362869fe2e46a725844b984a060de718538dd0f245e2f2c7e99f4730fc2061dbaf4833a9bd7a61981d8cbe0283080db13d6c4613369837c72f6a2504c731ca9ff4c7d63bdb491a0a7795153f0
+Entropy.14 = f6c327302f4c09fdf6a622d304f5ba778020b00fb31321193d9c3feed76edc61
+Nonce.14 = 66ad2a0d5de624f3d709cc95e5c99220
+PersonalisationString.14 = 6f7f8f1ffdcf859adcf6020d5cffdd8e3e1bdcaef0b22e9e61384b888f1b3537
+Output.14 = 1bc4cd76787f031df8e4f592f56a845f7d8aa200aca0b910e68f149cde112d0f1e127faa7fae25ca4299eacf9e49e132f3e4083f1c5fb0304b714f06cea122bc1392cbe18289d2411ae08642a9196b654a8b177c127b9215f9df815eceb254b8d9b4f632d25d123ceec686124e58b3606ff1ce51fce0752f42232c03694a1d8a
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = b1a1a0a1f13a67d9d35441c96f8662e499f78a75b1c0a5c2e26dbde74cfa8489
+Nonce.0 = e0c8a8ad309488f2043ba4afde664d10
+PersonalisationString.0 = b54c1b191e08d33957b9e42712df4e64c8ee9ccc5c2e21a64748b36bb82315ed
+AdditionalInputA.0 = 7a57a675c9df3ec61a20194a34fbd9f75944b36ac33f755b5a4546830011f3f6
+AdditionalInputB.0 = 83e57b2d0f045d63f01cf2b43ca38b2b2f043fb2335f1bb1b571a813d561ede1
+Output.0 = 884328b4186f195800c5896fabe2a0cee49151678508c71b7ac394981168535baf1d6cb5bd6e6a1bb32af4ebbd8ad74cdfb5a6339b20c3cdc671fdca118156735979da11ed1e4a3fda76b4611407f6b8e80a3ed25802a4d431c01be668c52d37cd5b4f1cb61f57e3ff5ce0c374e2554e9ce311426a053299c3c846594e4bf536
+Entropy.1 = 3a12416992753074ff1459c565803a9dd38f733b1e609a0d8529717edf9967af
+Nonce.1 = 3a9eff839b5a3e16ad9754b4ca9fc888
+PersonalisationString.1 = ae8fae6429488ce9cbc42f6ed589107a28a93f47c4f76a4ea3c0d8cb62530a50
+AdditionalInputA.1 = 258634c87d0990169b2d36f418ab810fc03728406581c2f5d0baaeb9e4443ed3
+AdditionalInputB.1 = 4111d6bf8b9b9e3bbe9f9c3c412c846ca2628249cd1923a233e10ed08bf81872
+Output.1 = 4869bc773ac8a485aaeeee27ac7c3b6ddb4671951020de82d31005efe399d5e42eb4b6681e860bf7a75cec554bb93c20379fe61cd618aec52b934f5673b48c0dd79ace33854c30adcfe254921c63b7092636873248f004fa8136c6724d480e5a30786f281610ab29820f0c83d47e70b8f67620090bcede7e185ca11a75765847
+Entropy.2 = 3f6dfbf0dddb435f4918f8589a307a13b18b5266c968d16e1c25deee80dbf27a
+Nonce.2 = 6136d723b92eb98e77691fb67de701b8
+PersonalisationString.2 = 90048b185cc1d7432b1221520bdef6dc4156ae35920e3abb541875d7249b6c06
+AdditionalInputA.2 = 8ede7c3f39be4edd57d351c30be8998cb38d7686eb6cc1bd070f35d792a2fea6
+AdditionalInputB.2 = f6a8f40c943d3c40e8915738fb702f862cc105f94831b794bdb606e86235f394
+Output.2 = c19b388646174a0156f3ec227e42664737c735fa69b587a0534f261eaa65d7c533407f071e8fcc81f42d085fe9f9543aaadfe060340bbcf4223220d0683a4fcb89a7c69426d1806d04cdc2489643e7e133579002aa48fae5792841119065a4f8fd7209074298ebf7fb467ba52cff2842a36a85fde71ac4b129fcd109d9d3e967
+Entropy.3 = 997d371ea177188463c9ecaf63ae2ba867d8d448c91df1977dbe70ccb1f6cb6b
+Nonce.3 = 20ea48799426051ba13939653d9668ae
+PersonalisationString.3 = dfa25a85675adc25db3570ec790dd7eac9e92b64a5879371e6c67fb3be630dc1
+AdditionalInputA.3 = f68a5656436c9f739c72bf831da09512d79814445bdd9c1801ea367ce2928e0a
+AdditionalInputB.3 = a0ff3a93a1626935749fce8c63216492123a96fce53098787e2ad4bfc3b883d4
+Output.3 = c27f8dd3df5ae2131dd6cc7e673ab0edc84eedf3dfbab0e0c871fc0b8050eae21cfd437656095b25e89fdd35fb29d684e342a0e882d4967db8feab6c60c2aa8488045be63332610b0b5779825eecc6283b066ecc1df976c283ce8864276e7560e53167721b4aebfc95441717f7469cbb2cc0d7e082116e201278252602026ea0
+Entropy.4 = abd3ab8031c50746da7504c8d6e004ffb9bed74ced3365423cb76149376817a6
+Nonce.4 = db56167358e4bcc8dd261f2129879d6a
+PersonalisationString.4 = faaf7dfa866a726e635750e7fbeadc268f2213e70fc59082b7c451feaf902fc0
+AdditionalInputA.4 = f10a641ddb688473c47ac20baf6ddefdbcd9805776333481acca26c61bd7ed2d
+AdditionalInputB.4 = 5b849bde9a82cdbe65ed6efe5b49cdd0579b40c53d3014eab041f7cc645db05f
+Output.4 = d0c6b5cf0ab7434f9e6a9b7ceed29ed9ced755385c8a66fa9d448bd7e5b6fcea32fc6e1fee34b6ba49c727d228b84f192ba29c8e8c30effe59105a81f7059ea94573c00b83c58c9d0e0c2ae080d94a52c71f95bab28f7634984732dbb19a756c378279b48ef6aa7ec32145e395352c1dc0c856727bcb857dc0a8e1b935848dfd
+Entropy.5 = 39cc6cff94a582f5bd8f0a963f185211d121d84f20082ac45f079fb8078aa024
+Nonce.5 = 0a195896ffa44dc3d33a9dfc1e3ace72
+PersonalisationString.5 = a4f2dbfd33237f628d40c7abd0de84d8327727ca2c7ed3c203dcb437717f51a4
+AdditionalInputA.5 = e4ab130c1453ae6400bb2f27f8dd5b0d96fdf46f50964bff5f11f00c3c3c8431
+AdditionalInputB.5 = 86884795ac9c045ed5eecce236f9194d801707907e40c867ec1760e170304e31
+Output.5 = c5073fd20fb16fd9afcd5e15221371d5e066cafc80f2ce559e2f814ebbec6ff2f4c07c11de5bbeef9d6cfc92cc6bac904a3c5c1055fdd7094d805d38f0ac6c5467b28acb7680ea836d616c0a5e3468da5022d6a382abeb8b81210f7fe84e8048cbf112e8e6d6fcbc65bd67b344888265ad295dff7664699b35433b5b3ec13e7e
+Entropy.6 = 3e8579f74c8d91b38b03a190f5cd17f6eaccb2e77cff28011175509096cff146
+Nonce.6 = c6402322de78227a783751c4b1fe28cd
+PersonalisationString.6 = fdb70c3c22d04d7ab2e442183ed0b2e090b0bcf2187f0d2a87152631753bac4c
+AdditionalInputA.6 = 5879107cc1629ffebd599b9c11f61e89fe8b73c427ca67a5643e3856eaa778a1
+AdditionalInputB.6 = 0623d12e4106cb37e516236b90ba0baa6eeb6ae4428d64b6986b4daeeb0ca814
+Output.6 = 390df2130922b7cc05978855a3b5c8a4412b86ed6450bc43ab99bc3a4d7621f818b9db1c79bf2cc0ea496a5dbd33001b9645fffa7301e9342337406f56804ca8176fc2919357294b5b9301780a8388188c4fbd894008185b4ca58d424061961380e80f771a81fc31dc0ce17abba9bf0527aed5668df5299cd568d9d86f7cdc00
+Entropy.7 = d53b6acd4850470025257fb4ceb30991e2670f1cc6015a071446d40c8b2c956e
+Nonce.7 = 94ce72ca1d7d450a3aa0737bb8e5fdf8
+PersonalisationString.7 = 13e3eae54ab017d88353b6e71403d8153974658d0d63adc823bc6748e6c4465c
+AdditionalInputA.7 = 364a3967aa3828df17918077555e7b4330bfd6db87e38a41813a0f289a351033
+AdditionalInputB.7 = 5fc5a13e7174d56fb8f706c3786be94e345afbf87fe436602ed525f6db29bad3
+Output.7 = edc776718183149e3e2b2ae74bfd586d288264fdd888c71a184fd310197ee6d01edd10c9e4a985409ac0033989552b61209ce02aa40f8abaa48e58277c6967bfdc5871eae4df83479aa935ad1b9c0216ea12776df676c7d1e6b804e76140ea044d98a1f1729a773f8123fd7dff0e9ef801cdd0c53ba4f0564b499669e9d973cd
+Entropy.8 = 14d1e6a1896f2e2d5c3c9f52fdb0a38c153adefb2b721ba1c7e5bb0845b08eab
+Nonce.8 = 6facbae25c11e8944f8810b57fed4fc2
+PersonalisationString.8 = bf740e44536271b254e9a65a0418585ce49efbbdfa3ae5868809b3a9cf1c3148
+AdditionalInputA.8 = 1a2e1486550f5857defadde82a341e3437a3cf27c6bf4fc1cd8a5be6661e6d14
+AdditionalInputB.8 = e054ad9b1aeeb46b9ab9effe96cf44e8d9a8c1f6a2099d0c0ffcc8f2e171bfd4
+Output.8 = 91eff4f9d61ebd4993431628cfe473d8dc106cb69ece1cd060930804f93766b2d5c49a0de45d89b022651a26094c4cd07812bcbea7fe546d942eddbcc1bbcbb954d5bd84b0db9366fb353e24d34a4cfc37cc002f2b5baef7b79674a4d63330ada487f7bd269c13cb723331018a0afab0fdede8f2ac6ea93e84571d7112e78263
+Entropy.9 = f57c1dcdf515c3c663f4e0cc90674cf6678e7e84bc36d54027a87813ff366be9
+Nonce.9 = 7c750b805493eef74cf1756242ba1b12
+PersonalisationString.9 = 816deaa6c27d0a2f6caf8df8b7a222554b4fb6fc50350bbb82c99c82814628cd
+AdditionalInputA.9 = 1045d2c2bee045362968da8d54ea42fef4cdc4b0b8f32fc05eead7401d4aa04b
+AdditionalInputB.9 = 40e33c65d62342748014e179cd08d8a3c5d7d7e212cd75fe7522c79ac88533bb
+Output.9 = f0fd07ee4406f2be3ea26dd81d27567af67fbad791a22154e878d388da66d8138a77b559401cddd950eda9d4e8fcd7d3441ba52efa9d373a75300c7d2da993bab5edc1a73dcbb954da090e3d171660229e8674ea72076506210ace9841f292245668e42c6ae666d803de03a91fb969907aced7b2ea99ba09132096a056861846
+Entropy.10 = c913a05682edbb93d3893e433716d6ee85d714472b8787e8da9c9cdc5ad47520
+Nonce.10 = 10723ef0d3156cb3ea73462117b9043e
+PersonalisationString.10 = 3bf67a5ea55fecb3f53fd95e9a0869e5f3d0ecb26f4e427d5f38388ea041b5cc
+AdditionalInputA.10 = 9c17b2c6048db20efa260c491e5105dea2f7c6253008d0feaeaf099ccd43e9bd
+AdditionalInputB.10 = 5a739729baea3994f4c57ea0f5141a9869de011c88ae3d262b2e744624f44de1
+Output.10 = c567a512a21e53e687b63c51bff9144ddb902939fb5e7507e1d954b3122820dbd7d693edca18f825bb65efb122a86c02ff418065a5068fac80faeb9846f8db5aee39c3f20b60afec484f53510c47740dfa7a8c9fd606b0d50d20d6c07cedd47c22f9985e363554fb567c8294c864b5d9488c3ee0e483a775e9e668dfe73a1afd
+Entropy.11 = f1917e59978b897e41b41356f83e19ed1e07d5b02a13dd512507dafe16b38280
+Nonce.11 = 4e417a1f441a4a3b0ec19f31e944bde1
+PersonalisationString.11 = 1d0627e94172c9d02d3d71ba39e35c79393c55b797575a6e4249bbff8618d5e7
+AdditionalInputA.11 = d07ac1b2a33fe514e04941c244ca1755a59adaebd6880331728dab83f978bb4e
+AdditionalInputB.11 = 74f46be664a44b27dec26cb0c889fe87d5f0e43cd790616fa0a79f875629a57d
+Output.11 = 5752817dff8a947aa14d632862f2b83bd6dc862815e461b4bed109e49419912cd0a129e15646d9ea18be1ea9564930cbd499ec7bbc1526d73350117ea036e97482e31ea189da754e9a3248fd0657885b1bb9fa3c8e9095130e7173d41728defed97438597fde676623bd1d4fddd30cf5e5b2054dd2031300694e6a05d5adfdd1
+Entropy.12 = 3c4022358cbffdf5f462bbe4bac6cd55f544a4738aa7efcb5c0ffb11e759a3b1
+Nonce.12 = 53651bd2bd2bb9041846457c47e0ca53
+PersonalisationString.12 = 45416521e2e852298c341b02ffc9e7ecaf0ef5a1548dfe56f33e6b6300edadd2
+AdditionalInputA.12 = d3b202d046f032ff11cbcfa59a549920f3a673f73b1fd1de8a4143f73922fed5
+AdditionalInputB.12 = 10c480b05092b16bcbb354cfc0933ca36f281880d5d10b58a9679b5d3853f0aa
+Output.12 = 02f4e3c8c123438863d569a91257e9aaa67eca364ce32fde7ebbb3e810caddd76b205aec1f067842f54536fa61328c6d4341985a1cfac6151f63c47c198c5065e615ccaf33b712305c78876d2af1cdc0fa552dad953f67e25a975d8889977b1befccc4cff20061f76bf023fcf578bb2dcb1ea044bd53826d11838c3500d29790
+Entropy.13 = 8f2654e05afd29355a758443de6140fd3eebddbcb4bd09c85c83c8a737d2963d
+Nonce.13 = f2d38dadd537090a398a811e8534713b
+PersonalisationString.13 = f8eaf956faf312265e85b66ddd9741254f2ac3437690b4e583201d93565771e8
+AdditionalInputA.13 = 5250dcc23357fe76b2e7995926545350a8b9c95787b498c98762b0cccfa84a64
+AdditionalInputB.13 = bd67d109db303aec39cc14f6133359c89035991bf43a3e97b1ad0a3c7dc63190
+Output.13 = c02bf26819037d80eddd5749aba29c9de7d05891f541239c14f935a49ac56a3d3280291d3726ab471841ab8f7e3f5e785a94b23e057dae900508da24f6e007c6f783c08f6ab7de49ef637d1812ac822a4c0c84616e509121d902bec2e3c4f6626979724f2b0cd2ec3f7b44522345e56699ca3ba701a6b9c4bb0a7836fe161845
+Entropy.14 = 708f5c7e10d56c30456e9e3f5869a95a051cf7cf107708c40cccb801a3a7636d
+Nonce.14 = bac755e701b1fdd170dc92eb0f12bd4b
+PersonalisationString.14 = f1db3acd73914a62bca9a5ce3497b1b4da12b29cee7dc4781d7caddf67e45f2c
+AdditionalInputA.14 = 228522e58e65d50dfd176e8ff1749faa70fc2c82eda25b0748ddc5d41fd71be5
+AdditionalInputB.14 = 7af60c47b4cd146a39887c9b812a1dd814d74c398609bbbfb57e73da9caff57a
+Output.14 = 9528c88f0aea3fc03bb8a9061e159a06d78a2a654408808aa4d0e73ab1a51e5aa85e8bcae72d34784ff6f513193e183d556ddac5675314f2b5cfe392d1526056afe32d7c03e09ba2bdf3b10e228b0f600a61cccd9e7bf14dccf13b16a838e60909785307e6905d510d9888eaab169fa601558fc952aa8559d270ecd386d7fbd7
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 9ef0b00381d6c8c54d08fcadc6f5ef331134bb986373f65c6a14f553bcb6c55d
+Nonce.0 = 9fce26ada7b1de39590312bd9d81c4f5
+Output.0 = 663ffb625e62c4eb67d7177a6abb808a9f68c2d5840f19992c11ea3a635d05b537fae1f1746c1314e1a75e141c2e094187d17b9daae1442e41d3a0d1fea94d8ef9d840111379a52e6c7ffafa7ee83b244ced129613d5b8bb089e7ea25de1c29897735cf95695043a648a2ef6fd4aa74ce8328a5550da8ddb51f98adcdc108e455603f6f18f5a50016f3e8ebcb244a16bc6b6e554a7546153c12f522c75ca5f1017e01da36650e6203f30ed5c3da3b6078736465eecb400eeaaa2c876e37564d8
+Entropy.1 = 3435d2929787173084e16310a1c407699b08d8c68760d2662ed844c98c2ce66e
+Nonce.1 = e3ed52b47254ab2624de1c200a261eb2
+Output.1 = 7c8474fb0192b64c6b113d38d277a6825440bc2b484714c3a35d9bc3d35fc652b61741771e5d3abd7a1bea0263e35ba2ed4589a07363c1337895c40228ed6dcc36e02faf519919876b652f24cb80cdb044db786b240adf946ec0dcefcc2b406c7073db0f88024cfbad5a39ea53236f232d1251d640adb47c176cee0941bdb15e785344cd3753a7d77cf2a1b4a7048d00a94224de6822588e91cf3a1f2e966564a93bca54637724a4fcfdee95fb1f74550593f8367665eeb84625deb46307c21b
+Entropy.2 = caccd506e5e63ed46c19edd7474132d14ede0855dc64069316b4ca85a2943d53
+Nonce.2 = c26ae8b85baae65e669aabd4373b9f27
+Output.2 = 09d8cadaae97213ca801776fba9c58f2aadf19b8272911f7912905d030045fb77cfcf75c13eefd7a0bafe57b8c23852ca2f016beb5700b924f25cb123a5f527bd8cf2a34653446477c5a53f8dee827eab2eb6a2a43705abf22e1ac023ca92226493cc0a192f945cbfa62e84fbdb1afc3ecb31dcf6992d376bed81a9a3e426e770b12eacdeb32d9f3ac4d39a7bed6263c1422145b2ab84206b9c5da60cd5b5cf940be909033a3dd17246307fa428c6eacef705023d61538e781bf5d436c61d290
+Entropy.3 = 57b92173647a1bbfd7f490ac965739c76c2977ee2e5912d882c7125fd91aeda8
+Nonce.3 = b5dcd934cd05ef2c4e80450abedec058
+Output.3 = f0ef1c21a8e3615df65275fe61c11457e1ea15089ae80efb72c55da4a2845d8b265efc9e7dec770857e6553f48da64fb05c0d381eca7452bb05c6126ca897c97d4440d28be66300bb1377ad9ef8884b077753865e8769343b498f5f4d6a0dcd9bb0d03733ae8522c0d9226ed079205448efd4f2f752fd7e80b5c01a5ef525be5285fe1af113a355b8512d0efa256eb4cf2b957e4fbff861bcf04d13c51a3fb586265df2c7ce6adbfd3d91e943944333619a16e6dea782392dabc0635e960c793
+Entropy.4 = a146876f3c486fa6d06880ce232379cb929a0b8b8dba3f9c0196c39325ebfcbf
+Nonce.4 = c25a3bdcfd83770bd5041ab44bd0addb
+Output.4 = 12168702864f57ffdd8234a4d2b163e5e010bbe1f8049e08bb59e834dc04ac057a6cbfbfcea30fd93c7313193af0f017989b872f1159b5eb7c331571b10089a1f8ac3fd68626af7cd615d7bbccc7a47a0c325a20804a8c3c0bbba23d139506ca61d52a651a79133c2c3b1fd1b54f3f96791c6923025d7a2ade36c4b3efaca78fdad3185437ad7a41e42ff53f6096419b5fd3bdaf2d292175aed4d067c85c7f9257a91a319e9ed29cd4d5c728a11032f0b355f31dc3a9e030d4cafd98b7e99381
+Entropy.5 = 97f4d4103ba98184ae39a50470843b72d11f815a1563ff06fb8d7e5518a180d2
+Nonce.5 = d9b5a03e919666d1290fc42abde8f075
+Output.5 = 85b668b85d7f329e940c3f45fb0ea192c0d44f4d3a983af4685045f8bd23810e6c79644bde6870e83691392816dfecfbfb3e73434381c834d5a3a801109572f3a720d082866d8dd8845e4a11e4ff8542b26afe2ae78d5debc37c81295f89b1f1066d0d17af8795b011e854aa7f511285686db7b8dba0020cf62f9f33a141faa39ac5c6b62ec4a7353bf47d25d71facc5ed566cc3a83f52a5f03c1be283daa1edfeac3c2562a2c96931f5e833839502701389a934460550665e5fe0ac498e4148
+Entropy.6 = 72415fe7e91b29586157394464b95153664a3c44e3744d523e875cffa477e1d0
+Nonce.6 = e189caf1cd88569844a8eb1ac41fbccb
+Output.6 = f5316b3a02e9e4cc1aa16c1f686109122f2b3eb0e098233e1e2600913815075d922d038a57d9294cd7ccb7e888f7c186cad94228d62f33795878801362ae194cafddf39a2ef565378009f14b7fc5a17ef274dbf537d931dd3ff2563cbd01193ac77404b7c01f204a3ab63622c86ebf00ec5ccdf72f82b8c0bf75fd2385536ff4f73250a987fd557b52db57c4c4d7d110cd118d6df6b3b8579acd36382fbd8bf3ce84f0df2761717c8d2f9f199cbb67847bf6921e648873065c727cf7a4acb693
+Entropy.7 = 1fa6bd2bddc62da7be0ccc4b42fdb0607d9004dfd64bc588d7e35d74b17138f7
+Nonce.7 = 49a6f6162647c60f8043fe6b2321bb75
+Output.7 = 5aedbc8507377df3b171fa7665f12fcc76f5078a55ea0699323d67a1d6b22ace8023e20d00c57c707172bdb6d6989f03ed0c80a3098e07ee0c8974edd7b95205b01dd5fe41b4ef52a55fc947429381a91cafa8e8e0327a94846a21973da06d97d6ec271d1761f3d98319fd1067305d83a70cf61be3891309e1c8f4c60311492fd80177dd40040f6e4575132bc2e57cec17ecd849daef92b4f359689a70dac01d1a66248256c0dc9413256c70612356669ac12da3a41f5f66e3026af6bbaa0097
+Entropy.8 = b5065f850e8cf5dd50cce69848431785493a0aef850d46f5fd5588432cbbd0a3
+Nonce.8 = 750aa066e5cb008037f9c0787024102d
+Output.8 = f481d7bb452b065ca03b142ef53352ae8685acd6983566e9f8bb5a9bd4aca77476eb8f4ea85cadd7b4cf653058926311a49d160e9f1e70936543a6865f793333c7342f379e261e63b2c5c4d2ff0d3a80809074de2c3ae240b0214738476080ec0edda729a0235e561894cf09f3a8d7fb542471e293147a7dcd8085e80e3d7295436002c8870ac2bd3bd6a8197a1e8fbbc438d5b56ec8809941fc98393a9510c8f2330f2e724477ce117d499fe94d20f81a9dcdd062379adf101a07b32a4f42a6
+Entropy.9 = bc3c1154386f35b46813087587635c870eb94bb8f7e3d4fde740c05fb45fa8e8
+Nonce.9 = c78502e2d0dc1f2c571dd7d2980ba9a8
+Output.9 = ff7e33d7811a78e24a9d0d928619f4e0272cb0635e32e4919a55130aa1182019b713e54a5cc20fdb9b6f4233399db5d5311530503a82c6708600ac6fd3a69f01a0345e012e54002b6c9057b8d404d4e031e52965f4599c1aa65934a8453dd5f23bb158cc79cf6450c5024205eadf94ade87775f97526605b994c5a4208b6028d94a777ec909362eea4135d1dc6a8ea69196327ceadc8460ca134c54a377a373d641c97842606856bf8ea2038066705696ef61a2cdbe3dd355e14450a6e35360d
+Entropy.10 = 1ff952239e146246fd4690675930aef07de1ad5bc8005c312b329be044a41fcf
+Nonce.10 = 03bbfc86b7997955e2bcbde229050589
+Output.10 = 03c0613f0563a15efeb8aa262150f024e55fc0bf887266f2d283741c1f70991106cef811af091cb8e7b6af56d1c1965700d4d5e33c2536ed20f1bb782901cebcc56226e8dad0194c816980dffdd29ab28fdb3f6dd9b1594b5f904e8978d100192ebb627dbb99a9a3fda6bfaaaac69d6c27a17ed4d262a641a0ffad042ceb4123b7505afe32567b544fe4154e3bc805d171cd707da2916b0647487b18c0f2782c2a6c1c187d809dc5124f5af19fe6effd01e0b507f5adb65d5a4eeade5e6fcf23
+Entropy.11 = 57f2c0ad254729619876820e3844bff93b2958b100a6d825a65088c1eda38650
+Nonce.11 = b6a49e7c0822ce5b7e9c7155163cc5c9
+Output.11 = 0988429e260a33fe96f6151378effca8fb70d87744afb067264ea67717c5a55bb8ca7a02aff494eb3b64f90499f1ea75bd94a100e241be77ac81dd615b9a7e128bb4bd4093b0d82e3051ae36319df64b907523425acda58a2cea448c75f3f955c485a0955bdaa122001dcfe898cea2ee641bd3b92b98d203b0fb30b0798eb482c164305280d6559fb4947363e2d247fb7a74e63bb8f72a6019f32bc445760022f51d71313a974faabd6856deca0e5a465a00fb48583ac59c785e21e318adf36e
+Entropy.12 = 3f43daa8ce5c8bc35dfcb7e1cefe5956cbf4c3f37a4aefc4547eb58502390d12
+Nonce.12 = 0b66b696c61848e76bbbb50b875aff0f
+Output.12 = 6160184556703fa73f49098c9db27d2fcd1ce717fb2cc537c205c5da96b9c346db63225c83d35c7ba3ba248d068eeb5e266dfdc9a95814d2637b6ed7af6fbc3f6caf21d210ed7ab71b48275321e3145efa9cb54ef5e37989bd6762dd412b55403f2da6f6a9deba87d90c01f5cdb4beb118e191753c19d5df7e3aa117bf6ba623125ef5565eb60d2d0b17fdc154579b71842941316104d3414743e484957e41a8fb3e697bb7ecaf6409f895e144d36a6fc204520c6d3b5216aefa31f101977cac
+Entropy.13 = e0ec2dae2f4ebcb630ae1ff2f52bc119a60f39fa233379df4d7d6ac3d9650bff
+Nonce.13 = bad9acaf0c5b0854005501457c6fc470
+Output.13 = dba059ecbdbd45c9712fb704b063a624e883f6619b5e55831a172ce5797a78bb72c236a968437524b1008fc82202deab247015bd2adac38803fa38204a2f3595e14d8e39c19c1d6e64001a9f64761c1eb4fd874edf3b1f138f7249a9da5b74deffa8d17627348b9dab419a59f5d3c7464f7b9826aeee32de66c905082784ed39b34e7d3be4b03d7c211aef6e22b07ee73b11c4034e01d2e64a3555a7e1d844170a79a82667163c6a4334bc5c561b73d4a1620235a49e0d6de64ee61d0f978875
+Entropy.14 = c0509068d88167921812103b67e734698d68718ecf42cd99e0f55836c162d450
+Nonce.14 = 71a50d2db258ea35ba69b5716bf68a14
+Output.14 = f66c05713ebe804b4273103997d260adbe8a7d0f6b2bb862b867ca59874ab9e0898102664af2a8db24a7ccb4637269ac67d5e834941303acab9076ebfa04cef64f73480afb6808f11e6ab1a9deae514f5db1c90c59ce988cc1d04012640a40173362de2689f88647268c665ca44f57534c9ad9b8316b9cd1d5a14942e94e90607acf6ad37a2398979e56e9c227c1803f90844d6140f10d0baf20dd789d808a647b4df54d2136d967461383dd4db9dc154dd89cd282a2766dd6086bf3825d095c
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 88e60bdc0216ffda724d75a78929a362e6d15ec340f4cb52822660da777e5420
+Nonce.0 = 38643e37dd376ba886262ae8b7130d93
+AdditionalInputA.0 = 78860ac12d6f1779bd54383ec65f2594ae87f290a3fa3df29f11aba212ef469f
+AdditionalInputB.0 = a074df12db9ecb372949dc73a02a7cafca80440824b8e6ccdb0cfa817c89fe23
+Output.0 = 56b45cdf36fb6d47cd26b8e6f02677ba42cf43dea896ddb9e9e724a741e4112df6d396dbcd47672c6f85f9b2aa672645f6e0cb01ea13609fbbcd16978d741357f3e7211c07ca90e42b5639cb5e3227b549972a6a7ae5602f5b400de64c0a578ac59a133b7ebd97febf50002b3317b7b7d02f664d1e1254ef3c5c7043fe0bb7cc0ec20fec6b908ce697dd084a4c21fd1327014f95ce5f1842e07f69691c6d978a0a10c645827553045c7b54e22d38a17b5b0ed491b1b65505ab2be58940cc0d6a
+Entropy.1 = 039742435f3781b50364bbb02f1d5be7a943aeb672fea3086f64981e03ee9914
+Nonce.1 = cae0b79fb64a8fe3762e1959d1926a61
+AdditionalInputA.1 = f65ef033dec80726a302f5131a2062fe521dd1f2e78c77c68409cda3637e428e
+AdditionalInputB.1 = ee22d109cbd742cfc29bf70e24a4a4654e011728e72d5bc6a208986448cf8510
+Output.1 = 619e0cc67d3caff375b4686f913178dc49a357f632b383b020ddf3e3bee64e1869678284e24b15cd367d0d0f3803b131cb5b3fdedbabafd65487e026e6557cb6e3e0269dfa1fedf5f84acda609defa95309fba8d43c9b68b9bb4cdcb52f8ceb1533a4125282ed69df3913529682a402bf4f896b890c5f13e9cfd9de36aa0d3914f50ac1445f3c0cb491978443a9d64c00f582d4879fdca89a1958e6fa6ff49ee0ce3070b25202de9a482a871abfbb579eb33367c78a3b7c2f643246e01042764
+Entropy.2 = 61ff07cdda8bd6aa9b3c7c16c9a3e1cbcd17511096853c7c982b433879517ce7
+Nonce.2 = 8b017ca23dcfd6ec887b7a4a25bf56ac
+AdditionalInputA.2 = 280967d19ba7a145e9954fd7a95c71745e6915dc0193351b213db508b864f210
+AdditionalInputB.2 = 9740369c9166c6c8a37dd78f15cbdd1caefdaff34c11bad2c4fca926f349e513
+Output.2 = c0c980b883af16003f9713ff2f362059fd213bd9c39998e0fc3c2327c6c8bb89aea75e8830ca8f379156824650de3731a9942dcfbe46b65985e52aba8798ba6eb1ea85cc559f2a106a6f8aa82d4bbfe2d37cdd0a1a5dc22cd9267029b00eca99dc20129b6faaaa7b066d3e06d66993f91091117552a41fe615c3ce025aed44a8bbc994de6eaec33f6b3f62b343d3c27b54ad78ba833d92c0c376117e4900f97bda6037c445ebdc370d78e335cda3884d1b78663f172610880f56bcb4021bce65
+Entropy.3 = 133897c5d21d1486736de5a9ea7c56cb9657baa215bb7485d5762ba114d13252
+Nonce.3 = ca46dc46d97577e4b105a4c3d9e2cc3b
+AdditionalInputA.3 = 2c2315115ae67ca3734a4709ffbe6dea36644f07a5c3108f22f2c9ed00d0037c
+AdditionalInputB.3 = 1a267eac7ea6c2419b5fb175254a307e388aed2d91d26086dac65edbd4ef3edc
+Output.3 = 787937789e810e5bb3bf99274dfaeba0155f6671fe9aa6d7044f8d8e6d2e1ca71c3ea087412c7566f56240d34ead516c222d0f07e0b8922a3614ddd4307d29d76e05340c86934db19982c29bce0196c7ebdd7824827df114cfb0ccafe884d4fe4e5d4dd6b5bc50dfeaa95cc3db7e20bd6823aac27b7cd329daa149eead3443878030453ba15e992da7146a04dcd0707cea0449ad6fdd5110c71e68ccc639d92308b3fca5c32fb5ac8ac74f0e895e703ff5036955805b4b64bfc3064a13d3cc13
+Entropy.4 = cc4017a405dad4a7a8dfec1fca936e216eaf449284a21030720dd9dbdd11a829
+Nonce.4 = cb23d09e086ea3388c18b99fc0942b09
+AdditionalInputA.4 = 1dc3f63073d70e2712b59a8ffd341a949ffa834c8d5bd504a70cc159dda7cdca
+AdditionalInputB.4 = 3d7cc17df61bdbddaf7f7370d8d0e27b4ed7fe01c29fbe4cb356a453cb86bd80
+Output.4 = 2e0193b4efa8599c01493712126e9858538fd094e063e775020a0b9f0b8863a048ed9a5bc31fe0504ae8ccd4c69b2fa74619e19cad595817dd8599b4cc59f586e4bd6a1b09b7500690348a002277877a43e1b240837f89b12cb2a8e630375a18af8571dbe8ea61f5261f747b5ce10ba48582943f60facfc37bd2b30d00f1fa9482d793da6119c2740c12f9954dcb93edf97e0c759f600d4ee30bf66bbfdd58831a882d871f2e0f75bb387e0466cc5960f349cf842b1f74d055025546dd3646aa
+Entropy.5 = d7faa4176cbbfe084fb4a621f7dc5833a5822e5e91357bcd271f42a12b40bf00
+Nonce.5 = 95c3bcc58d1e8d6343271ac68ab83133
+AdditionalInputA.5 = cb9fd2644cb3592492bc41b9cafa676f1ae2ba415f782beba264f4c5f7929885
+AdditionalInputB.5 = c3612a530b3c6dec171c065a5c9e8733640d2d89b57cdb881727d0ada35df35e
+Output.5 = a4fa57a5ec0bd703ca2d2331096595f5950908060b78173c882c7a075cd9f55eca67df781bfc8916be366c9110f1394f47b573c6febdd652c69aab60b651d9ac2f466544f8e463d14f9b727f81f23a5adb83c9aa92da30bb620e0238a56188a42bc4d06c07d9fa3a0a0f123f808247416bd326c42b7414b615eae907119763c4aab18e130741447747964b6d0d72e881597901dc9b4fe08f3e7700dfc243dc9633765f85b088c1e71fbea816b523905003bdf5a4e4aacb6f3454c07d7ee63b6a
+Entropy.6 = affa831c6d28648f3c3b8920be71f02326b089bf1872bacb2955bb81e900791d
+Nonce.6 = 6fb415aab2bc9ab49239180d06f88350
+AdditionalInputA.6 = 22afeb7c0744e21e6272c38025502de4c767077b12616b5803e77ca3a61e9810
+AdditionalInputB.6 = 5eeafbe50d479be20ddecff20225b5c82dc4db3b64bafbd0f7e473decc81471f
+Output.6 = 76911a7de8ebc80c8047a902362191ab8a2d63e3e022e318db7279377653009ed9c6addc0bfde08245d4f10c5fc25b58223b7dd6b951ef83aaf259b353c1537e2aa3c49d3ea5e9c8431c091e19294eaafcf91164e61d5d06944b3e14ec3fb9560722f5e6708152355abc4268eaf77f13155d3bce2360e6c8dca56df85c2f90fb3699b86c3e10782dddb0fb658366355aaccee6c70d1a49240fd3a7bb0d74d47a8caba3e508535e6424dcba812b3ca2ee09f91fc74af7b22a877369843c2526bf
+Entropy.7 = 14e71204bf09aee3e2e588d6d34f4302a4942a67e3b4f92d86401813839bcabd
+Nonce.7 = 94e6df08a79317fb7c7744a5e56b983f
+AdditionalInputA.7 = ff0527ac23da576c37a5669b91198c6b553998b17da665e424060f6c4908cc4d
+AdditionalInputB.7 = c72a465515451bf1a45adf1e7c772aebb62f718c4ac5203f68499518d607032c
+Output.7 = 9259e4b645b3323d6045e25684349c0fb09c5abe48c9ca7d847dfc3f38930c55e68fd580951921c6322ccee36030ba32b3f72e118d54d28551fc7cb4a88da6158bfc4838ba96dc6e491b1023a7171fd9798a8b507bc615d2f7c3f99f27693ab777e05cc98518095625eae58930936e1423d3076e38eebeddaeb9c643905ba3ec3c20ad7fe7f7bfe821912180b1924d0a05f7dee45ab4a3bdd334eacbd27e6d8dc96db706d6bc593f9ed16d111c86060028f9ddfe692f2d4152be33db7e2e01d3
+Entropy.8 = 0b2a266c50a0c6454bee0f46cd186906809bf0c4cc753369bf31a57ada6c0a8c
+Nonce.8 = 4bf252fc2a6c71f47bd6d8fe5558fd49
+AdditionalInputA.8 = 94adffa25a5deeaf363622be8dcf228586d91a221d71a933d7121eaf639f58d0
+AdditionalInputB.8 = f7247ff324010fdb00c8ae78e4127dfc6e9f4c2fdec670560d269b9f5e0ba91c
+Output.8 = 4158fd28933a76e4b33bded70b1183988c6fd4a7eda1bbe9010c2c65d286c17c4576853d7bc05549e5fab44dd1c139c2483cc1217bcc717091161552e1e7656268f62fe5772a3f20133d89fdeaa6f235fdf6add1f91cccace65ab0e053c1016546addac1659993983f527bd5f99e246ed46fe9bceb669ec80e786c22fd2c0b79b3ea2218bafa09011120491d2eaa61896d80ae856ed5b1d880251fad58e7d0a3643a7c903931d736eed3a91a4af8b1c2eecc3351a3eade3f8d65df762b97f631
+Entropy.9 = 30587705218a4f096c22e07b68b4bc87b59809a11805df1559063684711cdb60
+Nonce.9 = 8ce54736359b9ffed924fceea9268a2e
+AdditionalInputA.9 = 9dad957eb776d28017d624353546c6a83471abf8e7e4a7f0564d4bcadabfd50c
+AdditionalInputB.9 = 7aee53efc446c7c50b4fafec9eccea1d74d39dbc43f8a803e963e92dd80b1f55
+Output.9 = 227d7243267b50a739cff7eb482e0ca9bad3d51dc6f340ba9babdd1b62bfac3681caa81c50209b7efad8b3dd00d687200b4c8794f0ba484d1a1eb153190e2cc10cf05531aad40ed7407d9dc64b6af32f7effbf09e837cca892e81b9ba2c03b631693005d98dba3db367cdb1b46bc07afa179afad5d6dff705d2d7a6878a998603e91dcc23f634994464292682eb8e06d6089068a0e4c265cbb2fb437eedca92acd3ea823c6c29d37314f126eb9dd54269d9020c7591f6cd53b2108d19c535c9a
+Entropy.10 = d759c8de12fd5e45793bf14603249a9f4d57ccb356e335986528fe46a9c084eb
+Nonce.10 = 0f476e3015befa6ea741b15291b62ece
+AdditionalInputA.10 = 14272338e0cf017bd43565a9bd4437e2c9f2881dd99f97d4f9211828aa7e3daa
+AdditionalInputB.10 = dbcf24ed6f4486dcb4c536dec4efc9c2089bf505c935e31763925469a7c6de3f
+Output.10 = c508302eadd6baabd6531f8a51fed008d3a36821bbf19787debaf44327a71bc63694e30cb1dce8b21328ff170e8c902f10f754f827c59f2acd032bbc9a7427e308caeda7ed19375d7171498a7562cb5f9354b0c7b0b67d96c3ff645323b65d6720b52f48adcabc846d16e99f11339b1db6506229efd588e9ddb77df8e3c4c700d2ddbd88c02b9fb1fc9da30ebad6a7566ef8e494dce5036480bda81736dd70cb71945757e3e0a557be25e2c61a091388ee373000f86d20f62bf3f6d73f70baab
+Entropy.11 = a6d633b526904a14a768167eaa43878f3e90c0bcdd8b29f533fc1e022808b550
+Nonce.11 = fee06f56bc7eb905bea1a88b70a70533
+AdditionalInputA.11 = 1de361bfa968b6153d6bb4bf74a91fce6170cbf0147c6ab8d8dddb30f585e542
+AdditionalInputB.11 = e3351eda060f18fa13a561b117e95cf6a6c614d8ccd2a75593f1b452ac04cd03
+Output.11 = a02459823e3848982ddc13580f6bb232095d4f1d333c307ea642185ee4b08ec362dde9f091ffbabd16563ab71cb726f5c14357fd28ff82e17121c9ec5bfe652d0abaadfdc04e087e986f0788484e810a3847e3b4583ac6b1c83526dfc2002d3a8a9b3ca40fb032a4e6c0e90f846192107104c01191bf071092f07c98078e916fad6e6167d2abf465e300b555eacb7c0b461e57dc6d28ccad40788ea884104b9c491a086e482dfa9ce635d5a055acd459bbd5541e12f44913fb75548f51c4f179
+Entropy.12 = e1a0e3963cabc7bc2d060a9fefcd18d4807df4ea44576e509a7407197b2e7d6a
+Nonce.12 = ff3c19e05bba77254c651add6ff6a684
+AdditionalInputA.12 = 2bb78f1d58462bb8bca712c6318e45ab0795f50af86032f849b829a1f5589846
+AdditionalInputB.12 = 343524b558f80f05f1dde3b56cc0b1480e5eb2be09414d95550b6e6deb87111f
+Output.12 = 2dfb951274800f418e9f9ce49eba3158bae66419598e6de45f8c0c7ad9d209a4d9c62b981ad67a89f86d9944845c416aaf097437fee3488e0b270174786985c67075bc11c02ba6631fed1005b291fa468aba902f131558c64516b6b85b3f56dc1835b5939ca194d9e808f30bd4c59502bd7a03609d7d5d52c8e266f25597dda0a73ef3180ac4eaf9ce3d9c95181cde3e7b88b064ff28c423219540eaed1a97dd88a91dae7d9e4419f695155c3da4819e92347559d0744697eb9f711ef83c4e2b
+Entropy.13 = 93e60c6b2f81642e04080231cb60f5a82dda1d2c29abec3d24c16aca31c3e7c5
+Nonce.13 = 627e420471fcd82c381e4eeea2b3b15b
+AdditionalInputA.13 = 59bce0170d87db5046f4b325f9afe2d4f68a8ca75d724cba772ef8379be25337
+AdditionalInputB.13 = c52e68493a8fd1b206a89728fb35bd37859b1d6a413b35513b07456c7c74e6e5
+Output.13 = f5d662bfbd1ec6e7ebb7c14b628e0aec1b814da4be26d48e5f390f20b0dc3c87b7189c3d8a5a417f3d00f7df891d86c904cbb7090cc02ba034e2e7fc5aa0d264a12e9bf8d9268efef72acedb1dc24ea59e6393f1a249a9f90e70ab94a9d810e92d93c726eaad2d1fb44fc583acdd0f9ad1bc615498451a130bca5e65a43d7da5ca15252587f3b7552b29f9fe4e101923c697fbe8e8a7c697fa00dfa9b701019281252413a8b00c4045ecc3c4bc48074c2603361493ad09c2fdb1aa9c4b500fdb
+Entropy.14 = 0d9baf7e4622d9637d858d5a31d9de2cb23b7b06101f7d881a6278d526495f18
+Nonce.14 = 1ba76b79471a3f330931e4e67a066cde
+AdditionalInputA.14 = 25d2ad9eecd3bb8bb60769942abd16edf0ba777f2541a4b0e80fdd70fc2d26c4
+AdditionalInputB.14 = 608c5789b5a2a6c11c7df095be8c81968c0bdbc6296026ab65195bdc5a297366
+Output.14 = e1c600294a86393b7067b6e77ca83e68d28a6b76f6f81007183be65a50fd2f1adf6eec5a64cc753c5bd0ebc12387bde8c6ec10e6ec7e603f09d4ae624cc5423b5bd53da4f0af064e14a7d176369f1726fdcf6468ee15ffd7db3be48d196601506c71e2f443a768e03ebc35245d254bb87a392508ab07c95bce84ba81058ca1545289c9d8142aa0858c9cd5ba54ee2bb75cebb5b74e0d099ee458752d11ed70122aed1254609a715ddf2720798c9194ae4a7424e2c518ce7a8277ec79da86263a
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = d1b31487d6de11389313b9fcb6d47a80068e27e7dd4f5d19bcdbb5ba7737e433
+Nonce.0 = 97c18a1c1bd7ef912be91521be7309dd
+PersonalisationString.0 = a7a2a558852c4b63be3502e8e636ee918d6d4689a647c91d50e3bf0b219f71ce
+Output.0 = e28462f6504456bfb2e6b96dd6a6a4d07feecb3eeb2ae93f6f12e0edc476caa9407d0ea113553038ee14077d368a589a20328a9ca3900c5b7b55fcbbfee5955e66aab957ecda339bc06372e152f7a150069404c20ac3829ac83559eec8c47e4cd297d091611b9c836d143c228726a8a9db34183c5a88ce18ea0f26c0aa166aa3f0d20e2612217d6d1088b28e09e4560970206a381bfcb1fcb2d623b0adc6e4090b3f85631281a37e755cb8b0f03eb9e0b6436034885919933d24cf8987b03d1c
+Entropy.1 = 6ad32284947f5537ff84e54fb0b1a06565aa3ad9a0631bd92b6134896a867e38
+Nonce.1 = b425d4cb33cb9b2f164b18a1858fa26e
+PersonalisationString.1 = ffd4a433802560050af263470dfd4f3d21420e3cdbae3b0dfab206a6ca477006
+Output.1 = 103adeafbea45fc3803e0632e8c1168d6a573126324a1d8805d225445f3de561215cebf6535edfc209ca34abb11b3e52de76a89aa4f83f6a3f6926e4bbf57d727312951e1d6ba41be3779cb868d954205f1806e230a77d5ae670008cfcb19f086ee704ced10a6441b887f155a7f0e67b6fad397668d5e35ed418110c56c1bf48264e5f3eeb0cfb2e3d95c6dff07edf106643867207d26a6faabc230fc871313240eede78b66019a039b9671f634908be7998c8122c63c92abaaf04c60cd56bdf
+Entropy.2 = 20f05b7de796da9c719b1ca95aaec82bcde16d4d6a12cbf838217dc35e64cd6f
+Nonce.2 = b4bc248b81ecf604c46217a1f4c885a3
+PersonalisationString.2 = 5565ef9e4917df80bef6ec0e0f640c9c74cd196701382e3b4ab51abc4c4c0514
+Output.2 = 07d464b783cc66f8333b800c0d0962d965fc0380c7fa013334a95bd5c43731493202aceadccf13b954548fc2962343ef5d0cf5b53811a13aed0edba9f89edfdb2f138d299b559cfa0447c57e8a68da97af4d04ec55f5195f3e4a0f62a54ca5ed2540d0c9440444908bb9417a60bdd946c409003a7890782c28524a4a1a3f7ae129b4c84282891ccd6726a7c8b87e94bc61680d8d147c3c753081aafb529308b1efef3ac701409767eaf17a7f4b08fcf31697728ecaf5dd9d797e3389323d4a4a
+Entropy.3 = 46e4ae18d4b4b0820eb45c0993e1da164544574eb0253d17c1e8b5b7ff172bec
+Nonce.3 = ddab598c043ee6e39c2407c2d8ca5377
+PersonalisationString.3 = e6fe2a7c315e586d3ea7cfe9e33003c8808373c82648849132a9b603169fee45
+Output.3 = a37393f43d3fa32cdaafbc30f2e28efcc0c099a429b49fd9e89e17367a45f0bd818dba8aa5e87e1b9b04f298253c5424628612a86646b27b4a763bc63e79d8bc9b27f84244dc8e5354f742b27563b14f3ab35abb8fbbff748788847c67042e09cede1e07ad03440b0d4711ba762a5ca7954d31ddaab26fc57ef07db7a3a4af18e9416c31e9a205651a669ca105035b5e35f54bd129eb766b7fa98b9dc9e543b2b5aa6598635351e3fd279c4970cdc639eade7bb302d1d6514614fdd1c65a517c
+Entropy.4 = 2311845ad0e4bd78126d71360e01a8b15b032607f008e8c35a6cdd6d145993c5
+Nonce.4 = 4ad8c6d9fbabf571ec4561c2aefa8202
+PersonalisationString.4 = 8d3f2aa391a053b6855766742914bf04067369e03414e3d68439e07f4e7ee26b
+Output.4 = 356fd204d7124d3eb0794f4563218446d1c781106d4da8d7763f1c849743ebbf5d01234b5f1ae93338616b9c581356cb2ff46299a8a5f4558e3cc53f631b340bd7af7a86337e4cab890c55c1a3c97e92a1ce15ce6aa2e32daf6d8c00f33b8abf1c05affacfe492d8ec9165390ccd264763ba3479ad83371befce8b40e36d0a8daae47c4f65963ba01aec198478cc99e7036491121b684aaad6b24d44ad2824c7a0175f0e8f5f86c04018aeec6751b0f0db07f8d75a9e30407d9afd573d8d4c90
+Entropy.5 = 7f8e103246a2b0f2849410ccb45a82214d1aae70a31ec2e830bea88763a864f4
+Nonce.5 = 4d7799fcec689da7b9ac2de78b9ce699
+PersonalisationString.5 = 34103f676b7c6bee8916bdfc5a74fa5d3bd5a7844176978d4d0cca1d77bac99e
+Output.5 = cab956dfef85d06c81e7da03fc40e043263fe212d78ae13bfb487dec6488b584b575868b607b252ee5c27af701f1b670152879bd413c46b47cba2bc37d8d9a51b71dca801bb2f79c12cba61674db0a22817035e74403d85b9f8ff751d86d1ba0ddacf969ad12009370237078719c56e17489505bbf5382793268b75344dcce85b53882c0c7d47f671f6fbaa811add4b461dc73daf17c6ee58854035cee29dcc49526b603b7c8f95d54517113b4b506dd716ced88e93c9cc20cb702206a769792
+Entropy.6 = 8806cd8adc9560774806f3743bcff600bade3e4f83a894c4a3040493e41d9b50
+Nonce.6 = d53ef5a1e8dc12be1ace6fd4e57ee0ab
+PersonalisationString.6 = a1491b48414f827d5c98ae16f301e12dc73c4dead9e6c7c0d7196431c3ae518b
+Output.6 = 2785f18188143fb138091b1e4e87753d647d549b9c35b786eb6aa6f760173a872a18e883c4139b1e906852bf6eb0f036c302726cc34c562debb13dc908f52ca7bef533b591604964a34a802218b940434584da29efba25d76d12b06216aa1dc41f03281ceee0ee8431c14a7f2205e4b6712d090404a06b7607c7a2b2f83a0106c05aba701f1992611e90cf5727176d87a42c1775acb90d643c4f37a0a9af55c8426686019b0a9f6383dfcc70c6a7f68afe7cdc4d4de84c756b53003cde73dda0
+Entropy.7 = edd1eb05c38dc7c1277ad85ea3099571b53514768ee71ad63259d10d58b28d5a
+Nonce.7 = 2fc0c76a3d624967c69bd2047a6c2961
+PersonalisationString.7 = c73ed0a632db7a800d0cf2d309298685ae3bc82ffc6e32fa4af44315e2979779
+Output.7 = 7d76f8730148d8257000a841227cb9f264ace803a580683858033fce9284f958380f416e0bcf72ab4966d74e2984f4f7944e4d72ba59d54fc8e84480487719d7c85c68f51f7119934d70d35f372e1c410390f7613e101cf1dcd5d748d9254fda42c073d46c8e834daf8b898bd53bbd8a99a6206fad1715931ad0de7f04743cb776f9c22db58acb21da72ef046cc9040c36f178c098ad60ac62e372b40c9dd6c781169863831c1608fe170ac4729913461a4ce7cd5f98710b1850497fc59b4620
+Entropy.8 = c70c64e47c76f021327116f283f1b8027d95ad71e927f1b3ff56094890befd1a
+Nonce.8 = 5f15c6adabfb9b9e715e58b4e531460b
+PersonalisationString.8 = 49e5e6186ed6d33611c300942e10797fb106fe057beb87206cad1f5e91e7970f
+Output.8 = 0f4f6ed160d861bfc9636d13e756d508314f7a94adf247f73bd6b35fee25473d7cd8e7f970e1e1b74c1dc4bde70cce4bc10ea2bb9c3ad35133f820478d3b1010f314219cce19f1849dab890dbe2f22280eb0769c41f2e8326cb698fff45559b4b1c05fac2f5c1da8347659750388810f93ff6111a2e2b24e59c2b2930fd3d49b17d095ded0a8028e142be72edd9d60f17cb87c0cd3b600710779ff1695b9a366104e8a3844731ba3e995d6dd9de0eec34adb06c0ef5f197d23004e5edd514f5b
+Entropy.9 = 920167ac2f1e7875430f6ede151e6e1ef55e021816713d8f507d293755298b61
+Nonce.9 = 8923f7863865bc27e20525ef13f712c3
+PersonalisationString.9 = 31be01d9533aa6d5731cf0ed3ba80cf47e232ae931a6e24f0dbc0140cf83c723
+Output.9 = b20569b73ac501e1c17ff898d676a658e96bb0d3a69b9d62e0f11a50b04cf018bdf610a8d2efb5322ed23c4644ecf683a971e52cadb318523bb9680f6e6209ec6f1e68962fb3691207898cf60ab2fb423eaed082a5686a78ef00e2a9bbde6c4ac48506d78393a2914d00db2e3cf0b293362c54dfe78e123ed8439f37a93ffeda9a96aa1de1e9323072579fcb289a726a4b66c8e69a541c458d263fc9767655c3c5ec0b687f9e5b0878458f07c255ef709025225d30fd4f54bffd942fced1ac10
+Entropy.10 = 5d7a94bddbdfc566f019d5df9f2bb6004d17bfd17f78ef55b0707200d1a5cb2b
+Nonce.10 = b32410dd50ff9be1c397267d292fbc51
+PersonalisationString.10 = 6432eee53cc19589f1502d86f51faddd59b800e973c860c4ca251d86c84d54b0
+Output.10 = 4639b0a8e9f1da8dc49b0d84701712a3d0f47bb98d57803df7d4f7b0aabf99af7dc78d38dcadbefc2e570c2c7c51c2cbb37d50070c6b6857ad75b605ea006d29737d6819cfbfa4824088c70eb51777fc7ff884613d2a9f7989ea75e3bdd51e0ac3139faa934bb9ef6d8a0b25035fee2acf2ef783538e7be8e4416430dd058a58c712a41ed6051b283aff5e644b9cdb89433a414b5fe5f1dc172040bacf145d8ee19cc75cb6c2aceda689d3226c9039e95669e11dd4085ea104444c0bc4e9af3a
+Entropy.11 = bdaa691810d9aae1175a5a4f90505efe05b3cfc57d4497e7bfbe31227a6b7b33
+Nonce.11 = 14d732ea6bfc01fa7d6b865c9b764964
+PersonalisationString.11 = fa1cad909364487bb524391afef23df89abe9f5a830ab86e1989ed44a02a1b0d
+Output.11 = 57de79efc2ebf40829ca43a8e2e0c9bc402c3dc0f12fe27fe49aae94f9ffe31cafe897ec47b95fa2541036c5db941dfcbcf17f7d0c10c492189cf7c12bf03e8fc9334df9dd6484657638f8faa697db696480ffba3447f333fa6d3b8d71df9a4404e9671f6415f9701bb73b23accf5bf4ffc3ef8c04db8784067fffccb8adca7704c6c8a7392ad3ffc278707527ccfb670f5d2ea8a914b369b18419bfce64f605a48fb7b3c6f0bf68207fc601bfbc75c5d58094b9bfffdac5225a8e55a5a28411
+Entropy.12 = 472b189a407b5b8ba02b893f74201a93c6d432e3593126d3c6e0d8f44d445d4c
+Nonce.12 = 3f9332a1d6531aa582eabe1c0de0836a
+PersonalisationString.12 = 78f2eb71d0310d05b547fba63e57fd66bdbb705c9d9bd0aa957b8439e616f078
+Output.12 = f52fadf02cc573205fd654284387219c83ff8636997392397fa45544b4da3e757cdbdf1b58cddce1c418b24c8c89454244132acaf1e53f472713a925102d2e313eb850e4cbff7b282c6eb1b959643cb1f72e76dd12a6c8aef62b56773e7dba3a43f67cee488d4f608f8124b9629963b19983876e099bf1e5b8de90d651a3a001eb7234a96bc7a7d0d4d9d07e2bab8a841b44a6215752b9a8625c2490ec8cd8542a22f62f24a3d1f6682272002f78cd96d4ba1d5edba25ac616b33f9e6c95c589
+Entropy.13 = 7f254388dc53c8011d891b24d4fd310f579cf4cf390212dd375bcb5eea787924
+Nonce.13 = c7155c12d487753b7a3b25a23b6c208f
+PersonalisationString.13 = 522744097cee423dd9af5ed4e939eeee69ccb888f3b9d41049946085533f7cde
+Output.13 = 332a6c0a3cf911342c54a6e9acd59d76a5b1175268208a45be86f265d7719220b2a73151bce99d83657303e9c010cf083f9bffbac065adde660a896548e7e443e219d6dfbadb57244b8718cd417ef01126c969f2219479e39694f67c310c785b6af9cc4ff8ecc9bf74244c97b91be77cc2812c897fd110d120da3d4ff8d1bc18381ec1daf3f1d434853c8852303790cb11aab0847b578d1b33be0d4ad1e0def891f883dc6cb5efb9a7cf9735bdf58d666b4c55abcfe342856d43afc019f092c1
+Entropy.14 = f43136a4ebdb1cf771055e2df4fd26f5a83beead0d407e3137ec35cd95668e73
+Nonce.14 = aadd62dbd7b34bf2021ea74a2788b17b
+PersonalisationString.14 = cc3308e380672a955620fba59999ec4fcabf1b7f63089a124cc1f65d58b691e3
+Output.14 = 6c39f49bb51765dbae1de8325e7a6f8f8aec031dbdd94b83d5c4e062848eb4e01e3912784f817ee16f9c2dd0129eacd3f7b8d5bb4cf9a4a2ef823b0505c2ac8e4a1ec30812e98564aebaec14ff710a77c1904ab1fa3fef3c3d09f2d55b047a8db860322fab6d939093385838ec6d11667ca843f69268ba1fb7edc462fcc285adc9b4b97f0f717c28ac1b6f371d90baa86e8728051dfe9b68f15dd31a6da35194253545a5d667df6a1322f6b73ba661c7407608fa42e1b894bd1b6e7641749977
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 2e154070573312bc5ea0fa00e589b85dd559797a47c7e5ac731fea50531771a1
+Nonce.0 = 8443504d05af55a2c5091f077b1edf22
+PersonalisationString.0 = 35679c78e75c78bd6eff67b7d62a9fef1fad39a049debd1efb09be9acc62260d
+AdditionalInputA.0 = f4bf0561b3e91f0eab5a801388b04b43eee57887d43516a1f332c7c503ab53d6
+AdditionalInputB.0 = 77371fdee3485a12e55d5029d70b9536aabbb28ac1ef9ca761633bec9058bc04
+Output.0 = c6a7ee27596c28ed32d6d0a3dc5b7255448c873b2246d2bd5dbecb1a3d32de95ecd780e3e61974a84b374a1c0b32258ef8dd41371c5af762aaec6555fd1359efa5051f24bfdbadf9be8c101198fbf6fa97ef58c1ab2865a913f1b1e08019bb25f0e17ff5f7543cc1fd35e7baa042916d12d29ac6a52202082f4224a45932772dec149a34da4b3912c30903b7681e89e1530c7d8569eef281d165ea99da653df0728c74c809dc4a0ec8b754193ccfef2ab725db8890f84b1aa19bed96ed1c6927
+Entropy.1 = 56aa34e25431cb55b28b35d5d2171dcbf5109948748e69dfa8832987f43b73b9
+Nonce.1 = 5336e88c494dfe9674e304e12350ee34
+PersonalisationString.1 = f73605cf71020175a225019df4525f7f11d130087a4e19cdda01c80c55928db8
+AdditionalInputA.1 = 8f694bf8a86e3dba03cda34dc7bbdfa372d576ac4c6d19c79f8c49e122403a6d
+AdditionalInputB.1 = 7f78f38a570313528857ac213f56cf7afa8fb42f282ca57646c1a4764f7ac28c
+Output.1 = 50618916906cfed37d51ea1fc6c6f31f8e7c2390bc7fd0f6c55f4421435fe23b81c1f08e401cea7b1c9432cc592bf6161119ef278d4e3f629a76c4c4a5722a0a813c6d47dbadb431299372a38ffe35eb413097fde80a8786b4e875871784f533162335875432451538b0132c4b0dfb557d9aa4d9504c667014aaf0cda557b462b46fdcb6fafc90c01ff4f216630f22976b9ede9f7cfc31e124929571147d842363b5dfe4c3876504178200f48e8cd549abd90520baabda136c3cf76936ac8b8f
+Entropy.2 = 9df99ed4bbf654ee42718bfdf5d756b59096275a8407fec46d212c844068d9c2
+Nonce.2 = 24f3efba4c5dd500ba7b346071cbd588
+PersonalisationString.2 = d8192cd5da58cd2ce7eb2a871fea1bb725c889bd4a0dd2d4ad9871ddd53335e9
+AdditionalInputA.2 = 771d33e918623c8519df44680f8357c4c12622cf02c1dd5b00721aa22e4b65b7
+AdditionalInputB.2 = 4b8c08f8b829afdfa9fcf3109fab4a0fa3c32f13b3f19fb60c6087f73eee802c
+Output.2 = 127a9dd1892b185e9fe850883e9d4e1288c8e3450b27e8ee217de51130046bc86a2c73a72c3f3fb325a85292e844d9d9a9fba380553ee18f451897d6ff898398d1b7223e187864813e117c8bd07b788d6ca3d0a9cad0ce3473d6ffa65612ce0e75dbe5f26484bd7839c80d404dac15bd204e8ab26a3bfdd0c7989e028aab9998c31cbbe238b4681cc6461c6941dfa32bebbbf0869f1f3922f2b1c453a2d0ad8316bc41c9eb5305b7a8fcaa287dd4e6875a248e5969aa84d29fd9ff5ce0477712
+Entropy.3 = 81360c806d49db96f2c53347efe920fda660f47c42a505478374b880181f79ab
+Nonce.3 = f4fcd0443aa830028d028b9a4e1958d2
+PersonalisationString.3 = a89a326ef0794e50f751d630da7a20c3462d73fab81b0d59a9a3f93397a367f9
+AdditionalInputA.3 = a29fbb07b42e6ce50b38851b703e61e5852df006859f64a5b80703c519b97513
+AdditionalInputB.3 = 1ffd978e3f471d853bad3f20b4e65e50dc33bccfc29c990eb1e19024bf352af0
+Output.3 = 9343cbc5f389ee33e2ef49962ea461a3fae44771774e4663ca8aacfc2df341cf3c2de3b7ce9e1820ae0aa3100c0fcc80fd04efd729f87ec0c2835c547906f6605c8653ab8435165601c0bed7d5442bd434d1dfcec9e99bf7a1820cc9ec01372e548fc6d5a11aa4229382ecab6e537792cf8292291f903c1e3f115a837fa15dda971a116989eb6ca049bbe5fdad94e2f4575ac09ee65823b7f659dacfb8d6c1801ec1529961b1774205996ca89be7dd6c8599ad47a09bc2b0e340ad64a6653b39
+Entropy.4 = b438ee94e419abf4a9b26171654b8acf3f023f1902df040e1ff868b3ebec9cf9
+Nonce.4 = a1e665d173905eb64654d3fe4a4a8a39
+PersonalisationString.4 = 28e523314338cbd3341a69deacd32220ff10ee1693cb4f548c9b58d2366591b8
+AdditionalInputA.4 = 781fd50e7ce600e3cc2bbe5e39ee3e625819752de5150d2655500701ebbd3cf0
+AdditionalInputB.4 = 3d1fd74618631f5d2ce8a36f92fca951f68dddc7dcbaeb557e15a85c5de19342
+Output.4 = 205920cbec20c34acc1d3c7e37c27de9a525d08528be14b3081e2fe5faa8e8ce0b96b3869f967e1c22c1bf66ea29971dec903b26a8ff6f1d72bff095bdc2d44d8964128af4ea8c5a3a45cb82b04e984f2a25160715e5d90b22ca19c06f4299f564263e35fe4d4e0829341c85b70cf8928e09810fd1007af84df5cf719348427b0903de0ebf83a9a0d70b657bfe22dac66abbae44d7012f9ed94a7fa09db9b465898e322c30a91bc428ea2a8a34ef8ee037831fbbf8bfe54cdbd0ba8f469cd0e7
+Entropy.5 = 573791109e5b80f450996f5c043878ce92e6850028759569f80a685c5c36b8ff
+Nonce.5 = 69589107861c79db2ce75a44a992fe8e
+PersonalisationString.5 = 2a5300534308cebfccdf895813e5abda83d744f98f14a89fb98c0e5d72132167
+AdditionalInputA.5 = 3b7f239900f508fce28dabd192aaae0c1c0c24b44f392cd562636d54c569d5ff
+AdditionalInputB.5 = 62860d4da851a1049c3b5765e0e69febbcc43b4cd70c91cade3ab85f17df608f
+Output.5 = 81ba3e144d8b6fc7c451cbde078a59b5d8a467bc37db6b9426568a58fffd7abf87d574921519c8600fae27ef8b76a15b8ddcb5e97a828e1063c317646e463ed37fd1057ad0b395c4d9e6f3d3dcabaf9fa78826df6f906a88d85bd6f2a87879dd2351cab1abf1d5978c713751a0c2223177a1f8ca255297c71126c9ec81aaac49034499b6acd230385c944aaab76dcf58d76d602c1d5ce5fd96d6d8c332140eb7d764e5345fe95d40186b15a0e1bf1af89b396f56b571a19b988fbfcc61f764e6
+Entropy.6 = 5082ac80cd3af3ccaaed9d107162fe84454519d4bce78cf34af410ebfee2ef3f
+Nonce.6 = 36b63e1c771cd2e5af376eb2161fd374
+PersonalisationString.6 = 2f094d73456b3831f8b87a4da447996131fc8e1dfc57177badbd2dd6ccfbb3a7
+AdditionalInputA.6 = a243f0204f0a8856967d59fb345598b63bf04eaddb1d11ef37d1241562f6933d
+AdditionalInputB.6 = 3080f43610f9d3543cd7326b23b5a156406eada28ba975e534d39f89b9d70478
+Output.6 = 2fd543b2dbd38cec3507c18f07515d07d67be9c0b52fe5b5710ff3d7e7be8fb79386c93cc0030847e813ab7ee8c7c3d95228bf903f6fbfd8efd428bb84b2d1f4ee038ec208c2474a63b3ab9f26afd11d5b10cfe8e6ee1abd43329aae940668c680953842b4943a69e4271ebc991575058178cc137c3035d1211d815859781b5065b8687c4ff0430c40dacedf7777d4433a6bebd3ddb6ee3967511186fa108fdad428d98274388babfea5c44d241c7a2acb9aadc5cafbbcc9a302d76bd86d6c14
+Entropy.7 = 1be0d9f203502eeec2ba0eab43afa0772c08538a27f25a1072c522e7cd5924c9
+Nonce.7 = b5cb88da2dd02fac6019532608e078b0
+PersonalisationString.7 = 4ed471e5ca7930e9d5bfe3260a3090183c87fbd083c81c85b27912039d8177e7
+AdditionalInputA.7 = 42cf078e22f1bd0096c9f246e8cd2208a3175d2ff95b478691c05d97b2793a29
+AdditionalInputB.7 = 7fa2610dfe9cc13ebf33b05e8131ed132f4f461885d141848f5c5cb0f3182296
+Output.7 = e4e9363ac7bc2d89459b9b396fbe5a76ec1718b7492932163d37cf343ed6e76dd36ecc24c18e061ad66a20c7b701ecbe5ae2786944887aeeba344768caeff8c913c8100d5bec0ac28d6c820bcab2727c4981d8214896ec8656642db09968b26a465c283bd68f592fcbc76b9cf25d5df57fb050a7e13ffced7354abb9c9807fe9955894b2200f97aa9aae645ae16f4e971efba4302157b073ffc2f127027e0fe8e7f9e7bf3f141fad60a1b23a584b8315eea13242f27f8727aed8c48b90de8278
+Entropy.8 = 1bd9b187964cffe0655f1eaf6fcc324b5d14a33411a82f2c3140c68efcec5451
+Nonce.8 = 29c20377bb7d252c690dec0c909a054d
+PersonalisationString.8 = bbf4bab9dc99aec01423f0bdb5d166e34fed5aafa78ebc5b1b8d4b4f994ba169
+AdditionalInputA.8 = 77db5cbf6576699ffe42e4eb5ec799acdf9bfdd9232aaf8819c2832b2aa0add9
+AdditionalInputB.8 = 23be6002c22f6f0b8d0a4f0c0f36b939e7d4cfdcfb68ce5ec8f2b929c32a85cd
+Output.8 = 59e5c468ce27d689f56d99f528765b38932706d0c858ed9efc4d4e4d4e159ea42b230b5537d39723c3b650b15afc20d80eec152b3911dde83bd2da7cf806415b7ead8b7d39573e07fa6c41a60c9f2ece70e71da8e0b8e88ebf951bf04f058973739360f0b56f9a723dc72a36efef2efa5cc2d2cbbf1d5839b8a64569132ec41cfd6eb10508e6e32eda400141b966008e4badca0db252ebbb8da0074ba27b01166e2d79b96ec20b117d2e25115b4ae90ab2fa6af6cd16cd880a2c35e308790e46
+Entropy.9 = 658b37da967f57c093f07ef201b433b5606204e6cb12b843a1f30f2495357b7e
+Nonce.9 = 0bf0d51ab3318fd208609ff11036ee6a
+PersonalisationString.9 = ecab60ddd0c61d2579c2fff0f67aca10d3cc45cffdc256134a504b668c2ff81f
+AdditionalInputA.9 = ff38fa79a7a410a992388b6b94c37bffb6349362bbe399467f1774b2e81fc176
+AdditionalInputB.9 = d5d4a4491ca00893f1d4a8d3ef3067de4b5299c68bdcc9eda341804801157a9f
+Output.9 = ca0343e7b1924562c56fddc5c29d126017a7213f6d8fc30c5fa97a4672187425f1639660da96f29d0c33ecce1735b95eaeedb54219fc1ca028d31fde7c1cd40bf88dc41ec6a549dc0c08d86d2ac553ecc9f3c6aa1a1b8e4f1313197c14bdb33e53b6fdb4301171520021dc2c9818f4388ee5cb82ce1e4de847ee7ba263bdf78d8d9ee7a55f301b2277ab846bba7897dfd632d17125edad4329d52b0d6bcad53c654aa2424601c604be69dca7f6c8585ad56c9c3c35ccb2e015022b7c11b63e72
+Entropy.10 = 6e40520c653ac0b72294ff90e30bc026f5e0e5e322a33820177d3834697d8803
+Nonce.10 = 4b18ee04649d5134fa426a5bb453053a
+PersonalisationString.10 = dad9b3448fab084661daf4a775dec7c3b4199fcab85108056d862e4d0b04e955
+AdditionalInputA.10 = c56b5f7cbc33cdd88969b6146e0feade007b22eefcc6dc63ac60b7ea3770e6b0
+AdditionalInputB.10 = 966836832a93c8ad45cf032d525a6706bdd7c48715948ae0055672b885e34bed
+Output.10 = d9a4a53b5be1838297f8ad604dd18cb660ee1b724d1e7a4ab3ba4b1d669cbe02f1d55b6623d9116499e4a64d3ce40eac2ef009f60df52eacd5c5b9378b4191d92b4f9efdbfaf14033fded7efc64ba7418791e86b76c56ce768f041f9cbaea360584631dd72a453cf79ce07f72478bc51bb7024e6b60610076928d4c992ec073420e7ec6a3dc7436a27ceb3bd981cb176b4b77888070cd203227a459c97ebf79b514be290cc8f174d7d62041a3b602fdf86c8c45160dcfe661713104a12a0a43a
+Entropy.11 = 09244932ecc3befaaf0bbd5c5997419ce657b15870778508a8f8ae8b73bde52e
+Nonce.11 = 9157244f767efd95f6a3359eee1291e0
+PersonalisationString.11 = db358320a8fbe8f021e8b1d6e7538c31ca0a8b1d82405b800f92fe17c08877a5
+AdditionalInputA.11 = a17ea8d6bf91d97e590578e20223a130b3b2fcbebb85d4cc3325da882c009ff8
+AdditionalInputB.11 = ed9670361a39daf1163f8dba4f47d07ed5dd77e341901994b829814942a0c04a
+Output.11 = e89fb75235c0528a58429a00a56ab0d9e072a8b909d35c01ecb2c37ee0f969d4edd3d6ef009ec0e56aa3922ad615e28bd1c2217d16d7e50742af212b99a7909d9249df4d822d0489ed2115c3b8c44087b85f848fb0b62de4e53ea81e12c8f4afeb2c503f6d7816c594f00263cbf83f98ca0677e1ad99d93e57433f0e774ce1bdf4bdd41bfde44614d1f9eb7f42bd125470b3f9c8b0a498a65dfd0d076ced8ff6c3a2ff412076ca3392d94d250cbedc849af19e450ca4aa07beb8a9d14c47153a
+Entropy.12 = d0379fa4eeae6c42e1f88627c96814df67257676734a8bbdafa90102a36a7893
+Nonce.12 = 3bdabed423e71d7667c08c699bc13e73
+PersonalisationString.12 = 3d4059d31c5fb99017cd60bb7cc33e012eb78b854667c3099e82034455a25e49
+AdditionalInputA.12 = 0ef949be1899fafa522942480321712450546354ea74fe7a2aa711846a3dc9ec
+AdditionalInputB.12 = c0012dc814f413de90a2963cffaaf8a15443ea21f539af12b0970277c6c906cc
+Output.12 = 4491950b4b0cd996aa6be99c7516b7ce2b1261d7603b8b0fbe18607c5aec09f957884ae5f31da8eff1d19c4d7a22e2e3f02649e69464e788e898b4345d8e9c2ae3a1441cdbe678034dbc2a6254b4a01edf0563275db80feb638e05c2cb7374af732ca6ec426f1e5bc7fb73611a42321c5d811958e2ad75ee8bb49588af35991c646396f8d322525a354728a1b93dccb507fe6fc68fd2e35660ca18faad7e30e8878b019830a05dd3b8fb3ac7da288fae8343fcf22593a10146f91a55e6d8c9f3
+Entropy.13 = 2636f178a386017608f098c7fd3d8baa39c7174bc566bf9d5424abfe5e50332f
+Nonce.13 = 0db8ea2daa6d04fc79778832f414a860
+PersonalisationString.13 = a97e80d4eb0facc482498bc0af7159a39c00eb0bb59bab969f109277a0173936
+AdditionalInputA.13 = 718c2b3a8b8ec53bd2d3a7693e110ef86881270c96635b3946e7b2794da96251
+AdditionalInputB.13 = 94a197e66302e871d2fcc5ef3a9e4c1118dcdf1f12de3d3ae22cc8f1749cb286
+Output.13 = 6976bb84ceda5248cb5702cb9c6c0d3706b7961e9932ca37646ea3fde76e8eec760ca17c89c640f1956ae9b7d06357a2c2fee21dda0592215a0060832e99f5593f8e30b47719673fcf870a2f5c09dd034bc890795905266221b85dc17e54a2e06be6af322e9017198a6bfedcae3924d140001036f3020c04a0799c4599c76b83a6ad6fa110d2d4b6c4d64d57aa9dbd55811dc531f65f21f331bd51d7f3508df1095db9ac9aa2d84deb97566748064ffec59b9eb89716369fa56255474359aacb
+Entropy.14 = fb1a0b4091757e86f201ca94aaee4dc80c8d1f0653b8f94c6375d4d3e5ef16f8
+Nonce.14 = 717570cb86547c1b5c0b719ad04a1aab
+PersonalisationString.14 = 5793999a1a395eb5acc1bb16c1259cef3244f584a98129709a4e9c5bcee9001c
+AdditionalInputA.14 = 0d81d8c5af9885d1b30d2174429bcc6979bdb2b82e6fd3ccdfe93f36fabf45e3
+AdditionalInputB.14 = c63866629ed771e53d2fe2d5c21e98ebde295c3fc3896fb67279427c61a89eb7
+Output.14 = b369b226dd535dbdab45ff8f13735214f9abe6d11463a44804b838d2932112ce6799341505b7b5bab423a3794c37f383b06be1fe21f5c7da97b333a41fb67908dbeeb2450a3581ef71870c964c976f039ee856fa507e9de948c4c097a64070b23cfa09ab7506a8ec4fc38a38ce21fbee3f3c1ef3ab598f5da202f35b90f422af31688402509c38ac25359409d2b61958390d28ca2d8b5dea99ae26c90978f01d7a482c12e134a81de0bf6c9f39e32a8b597ec7b7a05a805ebc7ce260c381f189
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = d6e0c22a71a37faf7f8cb744370a51b66fe2c89b42d50de1f8022fb32f96e483
+Nonce.0 = e755e976530fd24517fd4bbbc890ceec
+Output.0 = 16372a83494157b62c4941864831dbd05d46224240e821a87f66f530ef89bd4087f2a50d2399d109303f03821ae62d6566163bfa94a23b64198f9b4dc1db5aa924ea06841509bc3258007834b44f3be34a7f9c7125af1794945bbfa78e02a87c15101bc3a079f932c4691f1e5e1b9639ea74af07c7f026da30712fb4f9f9de6947a27b71d7995a494d83b480a284db2d287e75bc9a813241ea1d480a0a44033663bed21adbbfe89fb2d27cbb35ce878bb4883399602519b387bdaef42a1f2ecf
+Entropy.1 = 7d2e345d75538d97f3ecc1aa8083028cdd0fcf8418eae999c53f74e5c440cc0f
+Nonce.1 = 9f103a26cec74bf2a128fbe921e435ba
+Output.1 = 6cf2c0dc869761d64600d643dd5ef745af81b4b4c6efa431a2f2e4d63f362447e64a405604a1e598674c0bb1524797d42ef08609b7ed70feddf4e09209b01e4a88c447ccbb8c2888e94fa99c2d47ee540d0e14430eca74e8b1cb95de9683886d7f01910633bc52dd38007deeeab8057d669de681adf2661dbc5c89c3703abe3aa948fd970aef87b69ac88d6fe92e4380873bf380ebcd3d8552501900e60a4bea791bc66043e1415f93abdc06d512a4d890f9465eb5b235dcb34ecf976093e634
+Entropy.2 = 8bb875478eb91d564fbcfffe66fc6c20f6511898ea00bb830042d78ce633e0ac
+Nonce.2 = 04729420a565164a204ec7a38f16ab12
+Output.2 = 41e6abd28b73f030a3e48652d149e619e73898ecdad64691e0e683bd9088e7c3203bc46a49a23b5ded69e35d4d1a8f910f9fdbf80028c101eff30cfbf40ac1328a97a90bb31aae52383617b556217ec28a84ba3ee538ae81336fdc969ca7d50b1835d013671a5872c84dbdcfeafede20682f6f3dbabb66ef13e3585978a82a578e6de52fb940ca9b53003a40c15af2467b02de84882506afe2f40fee47cc5469caacd47b7b4456ab432d922320f320a02ec18e4b11a264219dc8c3ba0e9288cf
+Entropy.3 = 3a612d8a0b7cfedd97b4f703428d763ee29ea921078a17cc3e48aa458934909a
+Nonce.3 = 3c7ce412400fff61d0eff60dd832b0ec
+Output.3 = 805d75ea3dc1043883bbe6f35a269342ef16135a4a38caaa9e6ab270bdaf76b5c2ada5852c083e1446c5e52ea0060cbd29223ae6f66643f5a20763a265252aa71bee6bec068f9b74a128e70dcf5d8ca5b1a4250d6545c5191db80097f50a3050e992dd29bda521dd226f4a9f57c888b616671d9892535f647c34ad51d089bd5c0766c9ec4f8557640245937bb63f030e8e9aecd718357b34235710c7741bd2531ddc06a3d2fa27f47e8cfecb5cfc226fea92df329e6c0a64072711ea21026067
+Entropy.4 = 4dcef4b9b65c0bc00e19f802488d9cddc9e81f1b037325f3e3bf06d0ed003430
+Nonce.4 = 4e2f76d7fda5c7b10157569152d9d807
+Output.4 = ca3bd705171d8aeeb8ac1b6d2bf44fbf3429ad01f665be63be51607178b239409882b762113b9c927a01bd727bc12d8e60635c4b81bfed9b551647dc98070de799cae9b2b1c124d3e9a23f4ce39e83b76566ef2b752c6d7f9d68c1dcae984cbb1166605e19319046e19750e7f2810e60152ee5854d775df557b699f0b5c082b619df57244d865daaeadb113bf5e810c967512f5902e5b645ef5daf349e548b8647832008ad4770a8d59f327550e2c137e6d51288db79e7c2cec28e9c3a2c23be
+Entropy.5 = 68c0ed82a8f7d6cae4e8cc561b68494007c97ba71a7b8db070f6ea70efde8ff2
+Nonce.5 = 43a5e1a85c58613ad2e5864f471a8ca1
+Output.5 = 55a4ce97d98c266bfb6de5e5d309e95d10ef5e0b37d581b16f8bd8b973e91d9288b17ec45d7b12872fcceeefbd9128b3395f9238fa8726eeed2a8144571a64728b6f8f79dbb926c7e638f753453493672a2da55e7fe819525ba7672ab4b74220c3cf80c7001fd8969bef48e2f3f3d4af8d9839b688172a8a672ba6ad9c356f2d185ea0ee180857b0f2f12d729f2dff8ec907231f8082d0f0b37b4a25ede5ee53bdf2925df51226b5b2b1fa10f7cea53996572a9ae8615617de53428516a63d8c
+Entropy.6 = c6acc1d7e37b5c60eeb5cfcecb59ac587e63089fa00735a3b6aace2c1c8e068a
+Nonce.6 = a6129d1e7b6522735859e952c20f3d65
+Output.6 = a3679089cdada405d4ba1ab74ee6bf62780ac5f35259064c17d9429258dde96a5249c4656b25df32f3b263d33897f1b770a8248eaa3317fb2ba506c2a127c878762c0f14b25a0575fba8f2f38824213c62fe753e0ab1682cb5f63b2d0b1b9e2b13bf5039f54b15265d2d3b06e64aa3ab777742e746c944666b9ae1079c820575b7fd44e69e89fd89feb24ba911738a1d4e88c8ba7b1bbe144ed92382d0f46cf5ba743ce78908c61de2ee14fa077c5aad9f74e879a200159b21f5c1442226df6f
+Entropy.7 = c0a1360bca46d67702442ce5f87f902469c7bd73c4ff66e0683d523e139bde38
+Nonce.7 = 0d582cd3341b9989b6368e434765ab41
+Output.7 = 5b008b5596c448d003fbe0f603cc322e4fc482680d9fa05719d39ab120a2eef03879afc3be01005f00ef1d2d44583b2a882305589dc854bf1a718689094ea9ef52bf6065b593b35eb7252cc9543bb64326e49b56b993e8ca5881936a87395bde6781e3db6d491cda72d1240b5ca30b3796394cb170b25a07a5a7c2b78f4c133009d19b95a910f025fe5940e1bcab86a9401b58c748af5d3bfdd632fbd3d992cbe3cd3be326532f4c0c49620199f860f92d8b3de61f671288c2c3a1c6dbe3c663
+Entropy.8 = 8b6d99b6135b7ec97a4f3c360c9946761f66307bc8b975a7efea3fab625e34b8
+Nonce.8 = 00c7703abfe7768fba80a98e7e5914e6
+Output.8 = fb5b0e2d676407ecab27604ca92e2dc8d4e1bc65813abe801952acf0841b3c588ab87a0ceca68d5e402c6b8e029ee6b6181568a99c247e2fae1f65726e4992c52ff22191ea50e2d72017eda7f0a2c9be4537513d9243be6d2af9b8f0d12e6bf93054ac34c448c9fd85e0e0d86f83fdb794721662eec37673714cfa7e10daf1f939dd8af9c2bf43e5a9d423f68e16a7ad4458a6ccaa39564bc3e3822a6acd1141ce1c6fa8029f7f752702b6e3f9e565864e99fc088646c4c893b37062d2e40136
+Entropy.9 = eba5c7d36e345db4720d4b4911ee8918e6c87bf7a119e157b4a2984f3ec8acdd
+Nonce.9 = 32663a93c5cf65c628be04e578b5d037
+Output.9 = b23cf638f7245e309330a4743ce70f991b8ee317fda128dcebb3ce9e320be53fa89376b9842b8265ee0989993306aab234bd8912adcee5e0c25b5302fc52a06d19caa705825d414e9c456ef1d6585f530ccd2dc51659f3b1549efdd5debad83ca48bf55ef989aa362613691ee321667f5e480cedbd8376f033eb0250b6de795281e7d08f79a92e74f5063770937f4998cb27bffd86a6891298729a99a566bf63f80b5fb1582db22abffbe0e14606fafedf5546c2fc2cbb24e0f97432c3104716
+Entropy.10 = 9594c8a4bddd9b3f31f915001691f189cd877cf75c637e322ea28e0fe749dbad
+Nonce.10 = 65fa788422a6bffdb3c078f8fa210811
+Output.10 = 3a8e824da1646ecea7dca609165d9d5a0de86e635dc3e15def45437e6d486ee65f232179a7320b57a0c2556c0b3f2dd61d1788c40c893c01bd3407de2db57aa247fda07bf9f31dab68e906dea52853d5fa21bf33445348f4f1017c04f1c2b19292f6e60969242640b1fceb39cc86a86b36ff261c242f791108f8a62dcc2a641375370add670170d25614e7ace84c456a03a189164e93bd3b9f770dda15f9dc80f3e03ffe4e28b3b9f3622789d50d789903d0d69deeee07d9946732911fb4bf47
+Entropy.11 = e74104e5509896eb533e308c16dcbfca3676ce05dda54ccd729bf816d766cc4e
+Nonce.11 = 718e3b194e34782f288eccb8557820a4
+Output.11 = 320f8c6e6c744ab73dd0d3aef9cd4bcea31a68aa76f8426a08cb78846674ea20db0ec1f8e4f581ac1b8032b6552b32a6eef95f8a80d738032354776f590d642676078a0e51277040249ab50e94ab11fbab1ef049f7ee5a156c2f220aa97af300cf8cc50e774e54c5da30dd42102916c47d00f465045cfa97e01e31c266347496214758c5eb76c31ac0008027521e0341c751be8ff9ab7b4113127076ec746425d1f1c4d1f541713efc8c85ee29428316e69a4f7face139b372ee040d53178891
+Entropy.12 = 565886b248aec5fa1f84ae53bb59c23ee62e944a3e6fbef5020df88fca96a5b2
+Nonce.12 = 43f4f2ac29055c105622c341abf7159e
+Output.12 = 287ec9bfc3d229745529a68c8cd0b090298613ac2502a5f2ddc8902686a6cb367e2f3d2af3224acfa6f162464ffc670300cfe982cab3c236e8bdb0e3dc42f0e764004b6d2d26053912f9a80869dc012822ec3da13ffc611805100f4cfff1579e9ee8e6d9235fe8b272a2c0ba2428a4e7a974dfbb107c51643da50c6890e49ff5384668820ff8f330b42f6da796c47b2e113c4fe9136f4adfec36e063999a7a319a138c70d9c610f2b7625e0c1d13686152efe779ceabb4e1afe13ce464f6800d
+Entropy.13 = 20d35d6b462d216df8636a0843199a237036d645c6443ee404916205b34a8bc2
+Nonce.13 = 052f65db73c9f250c315a26a1b5ac123
+Output.13 = 5127e4982babb89f73c65c9c0c09e36071a8f59395af06d569ac8487aab7de071c7b5c620f6d74debbeba1bac7c7a692d99ca2357e8efe8fab61531f6a3932f7f7c57e8f184cf957dfedf0aaf0b0b138acc47b0cc697337a704785b8288d594a2d1618f74ed8d27b9be60168413edbb0e68c2130605f3a373e345eb1413decef8af2ce05cb641c2052098787596a81238948889f07c366b29d18a9055ae898957d86e380e53627859aa7df8cb16bab8ceaa914050ec467f14cf33b4811b53984
+Entropy.14 = 5b50064163ae6238f462461472ad2ac9acc300316e140abd9cd6edb87b8ffa09
+Nonce.14 = 581d145675384210801d9c75d4d19624
+Output.14 = de0ace4f4a728c681a0b326298142fe79cbff2ce5230e6c1ca3e2808692d02e4845867763cb9e93acb983aa54659be6f9baf210048baf7ea4f062bd7e3d9a6d5e7dccf427422b9dd93d392ffc810dfe185bbee253c3208e22a83c9804501321c6cc0357d22859487a3eaba53444f4027843699d5a78214c431ea741bba73bd29550925443cfa5f494372bd0e482e3ab4eace1b60187b6db588c0d252c8da3e0d6dd3e475040817ca2c85b1149d8447a52c111f05d7c14a0f6b7b6ea4f60aed3e
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 9c92ab8084ce412bd4a5c763b5f4c3365ad5bfbe1c8092fb6da3c8652393882b
+Nonce.0 = d2195e1f57c899b67a6fe60b8b44fde0
+AdditionalInputA.0 = 2c554956d68cdf327f9dfa3fc4485e552077f9ef24a69dcd009e4769ad4716e9
+AdditionalInputB.0 = 65ca4e0b75c823f13985f0f9b5a5b4958e6462326c05e2187a09575d71c3606e
+Output.0 = 4e909782c00a98ac54089005d1c097bb63ea3ac1fb496a21b6a3cbaf671dbf382d30d3f9d764c84f5cb727ff822e75c555937cab416e9777f53e9d2e70312d007aacfb23b562129d3a1d813192bd39987722c21fa4183494edde0c35ab30f0e0f606afb51f8920f7885641ff61f87c3ca0bd972a37726cebdde6006869955ca84042a69b7091672d6ff7c413819c50d8ae1bb3936723a0a84ec48886739acc7e05885290ba8fa966fb120bc8b5cff0d6fa672bf561c093102de085dd8856f290
+Entropy.1 = 419688851d8975ff61be12acc0e4f1b40b63b8b925948196444b49a50020b24d
+Nonce.1 = 423b885d9c19a5ea9485e8ae21107eb3
+AdditionalInputA.1 = 2dfb5083605f674b39ea91089dc5a94bf44d9510e31fa1e75de253049cc7f48a
+AdditionalInputB.1 = f50a59deb68db0f9c1d230558ff4f8e9619c92d56803c63de90ffcf3e6a094b3
+Output.1 = f85fb91e6827ded04a080ff6b198350d0b3e173bb05f6975ceeffe2fcce9ca7fd02022bfbbaa904ea3f23c15723018a3d31804768c87fea70f68ff7869b127ba231667dd304b8ce15984f47c37fc45b1ea17e634f76e4382fb0d5b49b4b4cdb64602df4c1e91b063728da6efd3b056a40ec2d0cbfecb21068a86d02dbc7fe4bc000050dc3702d7cbb4c7544608194047dbcd3ad076dc48b921b633df641c658f2fd14ffac65f28b20cc1755330948eb47d59a5b1c6b43f167846ac191cfd2e18
+Entropy.2 = 056e4326d5e8238d2ca40396a987107cccf6d2e178b93e03387114caea9729b2
+Nonce.2 = d674aca5cb260a52570ba1456e3e67ad
+AdditionalInputA.2 = c65f0703585665f9d911130fbb4e2007d089cfee3b349704306e16fc62f396e9
+AdditionalInputB.2 = 1c29bd4ac2e279bb09826a8fa1170538ff6335587d7d13744841722b21af28b0
+Output.2 = 23de91bf8195e5dcab43dc75ed4c30f8742a391b3abf1a00cec0752e9d92b70645b0c9998ff4b4a0f087fdced4daf48005e25b897b2e730d5191163faee672b31418b40bc99d84b688dbdb076e23983ecda347940ec877e8930620998416204c691cc65a46e879f3183505cb65e486f4a5a8f244bbac42f3ae4dc705fd1255e2fca12cc3050d1156a13f036e49dea77b6b9888e200d9276cd0b4267ef583144dbace60dd02ca139522ca13d75217fa9e1f041cc57e5eb05c82edfc4b8444267e
+Entropy.3 = 62434fe9c36ed3a7d5cbd3c01c019575da3013eca715ff2e371628672231e816
+Nonce.3 = e7ce6dac29c8ec7021c076c7c81de966
+AdditionalInputA.3 = 46266c8a159c53c69cdf84d6fe725ba29a9039020625cb2e6b03f1e660082de5
+AdditionalInputB.3 = 936116f23970e8874424bc3f4d88ef2c16b165decfd814320dbacd10babdfddc
+Output.3 = a21fb58d30926ae8f8f61639528bc0bd8e6ece00d031692c4f5c7cd31556d4854efd278260268fdd27e610579c01a28777ce183eb855b4e0ffdb59c6b4e5d223d5cfa3e48c6ec64a0c6f415544f3191f59d7f171237e75604e65a0c9b5a3341252da3067a85626170aaed23a5596a7391ffae4f9c3cd9ea8b8fb2097223ed225d8d5b335ed016341a53ff31e727d0015a7f2e76b7d6cd4600eff8bc4c6a40c6452ff336c229528f494686f0cd53a8d08d0ebfb482f730b600ead59000e57d65e
+Entropy.4 = a70a1c62ea656d332ae88954662a8f3598f92ef2b2ead334feed6923d6423940
+Nonce.4 = df356a7da8e81dae6dd97ded66487c7f
+AdditionalInputA.4 = ee9778138589f49fbc301d2bd04bbc5cf16edcc58ea6520cc83cfb1cecfebcb8
+AdditionalInputB.4 = 1623dfe328ab24b9fc11b6fbc47ba1f41a65b3ae9c1920279f557adb63f2da49
+Output.4 = 1535f4f76ca442d06f883b4c57a64d92662833cc74dc6bca95cdc6958b7632c2b19400c8c9baf27571f346a0021abb3232aed0bb018eeaa2d8803b84c1a3f3957727b04cb9eb988365521fd8aae14bb2ba797be1dfe5a3a0a57bd610785a9a14954e86fed25a354dee0a77e6b9f6ee35be27b66a45236c33cae6101086e593b6b44b44f79881fd674e4ddb638455855b2ca9096ad13d288f02797f1a2ceadaa1760d99d2d348fb6c77a3a0ab26e865f7a25a691d2171bec0f9554cf08cb10cc1
+Entropy.5 = b9e8a6f7ebaba074850bc8b75f4ba991956a1c7ffef4d9233c47f3a984cf6e08
+Nonce.5 = dd3085a721fbf3a59b49885decccadd1
+AdditionalInputA.5 = 41b3f7a531fddda2e3e9b46fefc1f8ef0cc5e2a7eb3330f70c51369379f537fe
+AdditionalInputB.5 = c7db86a2de326f8476ae906be92f13783d238a4bd81f7e460ebb92df925d7de6
+Output.5 = 639390ee12a46e9ee8f520a4a74ec0a2dfdca9d6250186c49efcb58f6aa9174189fe73bd222162529036a7c612ff7d8afc755359d65bf420d191758c4f0ce6728c4748ab703413ab70145d2fcbace4b1a5783d46a9a9c51dfc172127f668102e3695d5861b76fed157529d6948345ece071d8dd32cdd66805edf15cc7f8a03fab38811deaadf5010f75e73cfb3cb80972d1d0c557419f489b3331ba413cf0bca9c84132fe0a06692d7f54006926457535fecae9ee7d4d1851526cd87c342fe8d
+Entropy.6 = 0e72fae2c0d72c2ffde1f047e4e3c751582301e621b941ae6b1729d3e10367d4
+Nonce.6 = a47f175a22a9dd5c9324e0b2c3359a14
+AdditionalInputA.6 = d2ec23eebd97f62245f237a8d46ccb8346482ecfb8d20ddba22abbafb1cdae1a
+AdditionalInputB.6 = 2d4b97d1109d273d3917f237dcce2e68a7a047e9f163a0cdf02d35c61bd86d35
+Output.6 = b63966464df830fb1420ca5a3eae048f7cf6f47b1f7181b16adca2bc6cd27a2b50e900ae4c9d8b5f6f6d2a76080a02303149329acb3f1c15c3e236c9d5fdbc3026bcb1353e3d32d91950b87144845d526dcf93248cf9080aa4fd89aaf500f8603bf52317d56ea773693c64ad840fd8d7915a26c507dc72cfce822a42030514ab7921814a404df9086363ba353bc2b1270b40540178771693b710718b5e8980f224bb0c94c79d5914b43a404da064b8687cd9fa517f9d634b148c776598b483e6
+Entropy.7 = 9c9ae156bdf2c5e0191559f71c2075aa13ddf830da77b9ed823a00b105c4a769
+Nonce.7 = 98f7ec8ec236d76b01beca6d2367dd55
+AdditionalInputA.7 = c04fcd4fc4ffec31fa410682efb6ac2bf3011faa86dd80fb8edc88725dcbf30a
+AdditionalInputB.7 = ce614aa457287fdeecfaed756b937f59aaa312e7a3d730c8c2f122749db4a7bd
+Output.7 = a4c71c976aefbef24763d712460917f4ffb39d5df4cd1e062eb25a91e332c4ab32f77527262a8708e55ddd40be624dedba49205206412d9b1a5f2ab4ab64dd33dff2135ec27b1f5dc877835f777183e0573fdbb8efb99c437e9b022dc9304dd937cfd368ca5cee9cce373c19acdbf5ac594da8fe2c5b6f5346ee58d81897b3cb430687b6d1fb01911a47f4de60eaf71568f80eea983a1a4fce2c2324a1d417d5439e752ecda1a309a1a7c97c0c41a8384f412b7cbae5d61dae9b94192eca5029
+Entropy.8 = a8e3298143a6a06b5be4f7e30ff40ff51f65af40d575082e0342d0aa0393f55f
+Nonce.8 = 93c445374a3d7e3e65dc28deab89ca46
+AdditionalInputA.8 = 2c6bd3beb51734118e7633d0da17146a00c408ed678a23fc39f98320800a4470
+AdditionalInputB.8 = 8a9fdaa38777f31a65791fc3b0787394538eb04640d4467a4ebdd517b129be0e
+Output.8 = 4a1ecb32c35f71c2c7c9438e232a11a353f1e674e4c589855c04f0006cced932d61cb696e864be0d12b2e7f3bef0e9caec18fd27e4a7d0dce9b4aa81d084a4cee2985c415d2619834c724a6bbaf4ad3337907cf37fc37d221a0987861fad588a3c11a7a962466aaf4093c7a828a5a2897afd7b0c2f2c7237c952caa95e33ad6d70f793549674168b675db9440c8af702023d0fa2e4c15a75bbaa1ac0168888792d8af4d458e2f5227d46bacfc8a56ff31fdca36e4004948ae422759d5d69268c
+Entropy.9 = da0521494a14b82937012cf47bcc0735cfcf42147bf3907d8e4dbe23dbe470b1
+Nonce.9 = 41eff6b9b0c2312422063c1418830754
+AdditionalInputA.9 = d88235ecdea2d0c8ddc0adbd60cb7706378d05ae69fbf2d25b576136f427360a
+AdditionalInputB.9 = 28d7c1a7e7bee1b49b268e4c67bed13cab26fbcdf10f54eca239c15ef195d9c7
+Output.9 = 401500b8a9a85a812e45ad14494dc0d4756bad54ba0ce6e77a72db21cdedd64a121867e833e3c2a21501cc9d695d73ac478fb880fd600c227feb08d77daa40ce0f78a5f7f6bb008d3810fb3e5a00c30031e5a26995754e25b6889a66625379890937d5f1b3d1476f9ce436e84f905954392de14f919099e13018530d8eb5eef2ca78f35a9138974bdf761fa6c19435cf27a6994da80577474896d1b975d23ac231bc4fb0e26dc9b1a83856eac5cf1fe9d4400b6d3ab99c99c737e5b7b3910126
+Entropy.10 = 4ef0eb84fde6b6437e3a56352b978377608810840393fc68a1eb9eb75d58ecf5
+Nonce.10 = b87c5f8289ec92b6e2a2b5356b47df19
+AdditionalInputA.10 = 36fa25cc7b32dfd23d578c7d47fc495df20e7304fa839d2c4b0bd8bf7a022059
+AdditionalInputB.10 = d72b7e5876809766048542869e47c6efa6d1e4c43665677281a0842569eec754
+Output.10 = d502bc88cd8b862dcbe940d15125883657e1e5ebba4a16ad4090cf5183371dcb1ac2fad5f5ad1e347b90565c073925ac70c088cfaedbb8f1ad08027c9a08ce5a939a2b8368d8b75c2f0a7b32fdfc2b3ba13207bf558dddbba1a2769075946a44181e38e0796bf0e8c0ddf40037294a3ae331e412ffa2dd3f7971a7314aa8e3006245f7dcd3342da8292453b03af3f3f9d1fbad1959815e227e39a1ebf7d2828437d61f4173dbe19fa48a7d6df0c204ab18010fea46269c1896672627a85d11a9
+Entropy.11 = 3da7692320d19bc3ae58ae5f26e0d9beeca3e15003d55ad02762d5135b6e5fc4
+Nonce.11 = 58781992a8b9147c48a1d2fb3b5a6d53
+AdditionalInputA.11 = 9231ae680ae9320b5edd550993c0a6ae47c684b4546059f484005027a512a6a4
+AdditionalInputB.11 = 9eb5b5dd0847ccb1e996317a22a9a607f8339d073bcf6c2e967b49ffe2e01bed
+Output.11 = 1d8bbcb653e61bf2ea1601f4cde346fce963977f38477d74a4b4887fd0684ad1f7babc8fd15e197c5c77d0de545838313adbc03e91f9553b3dc1e124115cc31f3700ee2f94975d19ade55952480c6b29aee2f38555cf9dc87782f915b1f4e4b7318269a88bcaffd1e987c711bf7187fb2df85d4ae4648846ca4fbab420b04739c6a1e56af022ef830f21044c95ec76d6e70fb2e0581d47c3f5ccbde05fc0b9b631e338b3bc846c4ca0dbf0d39f88372c1788bff8df035a2e296edd17b53f45ea
+Entropy.12 = f52fd8a98c584e12d5542f9b693ba547cd03ace419a57d296e199608977851dd
+Nonce.12 = fa974668497f72f265d8b3f6d571bec8
+AdditionalInputA.12 = ddda31a89347f7ec8bc10a4635e803580a7e88baa32fbfffdadfb0f731bb3f45
+AdditionalInputB.12 = b46ede7d4885ef59856752767fe4fdcba935d1af82237a526697f02ba6f0bc43
+Output.12 = 01b9d2abee6c4213e3774925b0596e44838f3edce85b2c68309637012018c1a9ce1138e5f298cd0a249be681bb5677b667c0989f9aa165db4992cea51dd349de340d95aabd49071bf18e5df3855e7416beaa07803b9007d91ca44776feaa27b3afa6869e9ba7be9ff3de136ce60b93dd0bb3ff15d5b1cee6b751014bcd8bf335e7e6ec4cae6d2811861fb07998c124ade2cfe2716548f392a8366476ff991c631f6460e41d8fc91a36f5193187df3920f0469b2f24f054e397ce0bf4547a327d
+Entropy.13 = 2f703d506f0223a0773b3a7ca5b46619e86ba8a026a7666e60897e28c1d978a4
+Nonce.13 = 5f350c592f781cf7063fb68db563c3e6
+AdditionalInputA.13 = 76c2a197fcdc3ef743028e91aa94c2dd7ce934d0ffef1fd344a82f4e6408a91a
+AdditionalInputB.13 = 2ce9c93b579b9a5c4aee0997416a580e8e8bfd5b8c7347c23de454f5ae2f7b74
+Output.13 = 369e9f330bea22ec0927e12f74a3c94c87083ad3a69df792851497900b5bca3a9a20ac2ae64c35e7ccf90f707e767370b46636652603f8410fe8ce3496d6cd3240e73130f3df59cc6121389dde78d7c71ea85ff898521d52b21585661b808b70532494d27d9c39daeda64979c6383c31c40cacb9931faa4570258c15a7fd2bf72453175f798b8b2c765f2771a045fb5da3d1f702d627a3f708f5755753a320e5d1b0c00a61341c7ac50f55c5988103092f4a2a6f90c555874c77d4589b1dee93
+Entropy.14 = 222b09b67be3cf48846336aaa0e76c8587edbb0cdc5123fb9319924e452d49c8
+Nonce.14 = 1dc18a8c2637c16759c67bdff0600365
+AdditionalInputA.14 = 80bb70930ef2015949b53d787630f5de93d93f98c577ca4632266e1bb1f6f33e
+AdditionalInputB.14 = b6afd2c00be2eaed5c1991909e89029db0b04598115fae5118cc215298e0528b
+Output.14 = c20bd78d9c396fc8fb408361e1dd4827ed3231617a73cd8848e493927207ea23e6efecd4fae36aff74b5235067543c7eb44c290122f9167a0ec4c6a530ecb0936fd683fbd866b73afb712b2f20ccc981b3f70faec4f4fda62e956c7d04cf578b06259b0f3c044e6dc68baf91e6149efa70b2ad2b81c8e14d1a994887193e53bdb5986a23d0412e989c447689a71b283934e50c25e10bdef0b22ce7368840cf761e32aebc07d7b51da16dad4c332926a4cc9853ac8db36b4b01bb36746a28f527
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = a591f47c35f3190df0dc5a050fd6688b46dd5ed8bd05b64e7d42715e47d601a8
+Nonce.0 = 274e2aa59f62afaa52ece2a08245e628
+PersonalisationString.0 = 801822d1fb033db1e122470d04cf21462cfbdfe98c0ef63dadac8aa12dc44f1c
+Output.0 = 4d88a45ffad0f6982306f61e7f99ba170675cdd9abdec8e0e8a7378d849cebd37c632605a36bc1d54fa1c96897f043d7e54d9dd30769c939d65eccd09578cd60fcd340d02cd6388fa96e6243ba6fe1a26bed000c8ea7c3973ce74603c00335a182024dc22a02da4e364e76582902cfc314e6b501578b5d822cf14b6f4769d576dd64aa1c43c3a624d5227fe6bbc35b35d19bb34c22d0ccf025dfa19f9b5f8234bd9a852574f94b7d09b36fc541b72510b2a0ee4a429a82b4b00b42aeaecb527e
+Entropy.1 = d5b431386e583e5068b10483cd96590325732b8a1632fb2a3255833cd0a81715
+Nonce.1 = 25eae1c35de2ed75ef0d3cc5fb1038e0
+PersonalisationString.1 = 644f86121ac6309069d35bdc7c69d40cb5cbbd30e853ff1d18dbf20bb057bf40
+Output.1 = 061f8dd15ced1bd4644b765683d3264fccd5b31666e3973d8ad6aea95fb4fa9bc1760e69856e56529fd9ad17a86b0065bf436ed6ce668703d423185fa06a55bb1a450da95f9a9ddf454b02f2a8f00e3b302fd80b195b102136786610948a4a7f84be326f62e88d6ffab4b76b611bfed716340de11c64d6588a54bb8c016e8990be363ad582ac0d79cd071aa97f7d4c1aff94cc5496045f28afcd85ac22736bd521c5fd9ab0016be3d1d3f8f553fde82f0cc718d4d0d213262f71d99eabb36a47
+Entropy.2 = 1110ed21313ebfd146e3b6dd92bcaa35c2150c7c5d74bf1d0147ca4fea6dc15a
+Nonce.2 = 3067c7c896397f37336986a763e4984a
+PersonalisationString.2 = e7a6a485a05e39d1214140bff403a779c39b60260f29f2d1c91df91554fcd340
+Output.2 = 98a3abd3929f1962d024c93ba45e357d637d53697e43e3c662acf0446431ec4493e1da539532b5fa6bb4dcf5e80309a83e7d76ad917fed80b7cf62b52f25f14a2cae01749d7e28e4e6a5b65c2735474cf19c4d3e2b4c495586bca0c592ee11ebe3f1d4c7fac16e1f4474ff65d95fb45c919b77bae8f8b533358b5c1cc806b0a250053792238df745461513bda2186a274086f0115a3c63917a4c30fb345cf944ce749e0765ac3b163bb35ce1788b0e2724aba458f6082980263912d7ce8a455e
+Entropy.3 = 1e2380287dd296d984586d87e8558484c45d3dd626eea6a0beea898063aa3551
+Nonce.3 = c2c10c2b5f33a915c1dbbdc91b5d2912
+PersonalisationString.3 = 07df0d10a9eee870cdaf53682adf44de9435d5cfec2591eeead2020314189765
+Output.3 = 8bf2d1bd01506d78f79a8d08974bea54fff47169467e02fa7bdab00ce3150e4f216dc636a1e323e50446b6547044a5e1f727ab5badca1c0b3722ba4c26306f247507842c68f97d063a15e2268ce48a497aa891fed3c5437a9f1833fa064af4b3af8239608720623ad955f84219dcbfef6a6f9de46e591448fba67900f7fad9d684ccfc1cb78a8c93fab3c354ff5190ebff024ebec283a02295f123a9a24ba644c14422d829a9905ead3d9ceb66f42f48cca5a51dfd5368a5fbeccaf7dec5ff4b
+Entropy.4 = 3b31507e411888b65eb1d417c65db0422ab1b1d89686217dfc523699f9da757c
+Nonce.4 = 177ff5164eea1202ce6a19a2bf20bef4
+PersonalisationString.4 = 78c1e87ce1cacc654f7152d47e02b650b28d66a75f1d397e5e0832d13bc3163b
+Output.4 = f8df7f6c419e22ad6c87c46023b6fe190353f8eefe7cbc3dc3e203343134bf9fe963f2cfa029536bae9ff501018a39d5e962aca1c0f802e25bec0329af4806fcb76debb6734cefc25966cbb4b723d701ab17bcf227004a2bf907db1c1c3d9b39fd99a74497350cf4663ac19b712388625a45be24009afe54e8ff5952c7eb753da8a87dc00f7e8237a67332ae56848e825cb68f09e818399d5604e212fd72a7d5a698f902fadb1fa4464ed9c2b077c97f16f67cd54516ff29e043cf25f204ebea
+Entropy.5 = 909ceb355e5651e5df02c2e28791cd01dd45f3a97d79ddec63be9dc8889f5582
+Nonce.5 = 0bfe518565ce04138328c9cd305143ab
+PersonalisationString.5 = 69b6f1b31726c9dffd667b080555fa57d2a76a4139683e712d4b883f8b4d9c7a
+Output.5 = a9482cf7d0d9de7b291f7368786e930146bc139c311eda6c51c2a8e47a64a3892d7166cc271eb3a3cdce9b640429675434236a14d19a985d8d4f0c690f8f39e31552a9e4577a93b1383ca345ed1c0259b72bd9ea6a61bc18682dcb9c59f97ce7841bf247127df75c6d246ec0b4dc1ff87f94b2d3aa922e5c2c6f0cb468c60bc538e3c7843cf79ba1c42d449d2a8db4c15ab386ce0816601120935f8122b31fad93e7429cb30fb00ba7dfd8f37b131b9b7ce648e5d4cc2b12bfad1483d918ef52
+Entropy.6 = daf64055f2f675748a46eba5cc3b87a9e0fefd092dd1385c628b5e58fd900911
+Nonce.6 = 7ea7b0b1839bd451a61d21258f67cf64
+PersonalisationString.6 = 6c81e5048cc7f4dd6119d2559b559c76ee664490fd2231eb6782722eaf547ef3
+Output.6 = 38d0730d2ad1925e2bfb6880ed2e4a4b0a540696524fd75ad089cfa71ce5558e0d22b8b3eee6a1c3a80de84ab689e614f73b8e44862b46709553c02bd674b6915296fef49c01d7c6289345f212adcb69dd66d7e1b871ea31701f4ee618a722e00c441c271ac05d078bbe14c1d74c0589aec34b053ae0c53a06bfa9b1e5720b8b8a3c2a319961a3e439dfa74d48fe77e6df9e2594c8288d56a88dd1563397eca440656f5cb428a66a102bcc8fa8869d5f40d6df15b33ed6fc7b9335f7b8314c07
+Entropy.7 = 8c313ac7ccc78a2a37800654e5c4c9e219d1c4066829d9ee9af7cab1a5f76702
+Nonce.7 = f6c7031cb31e3dadd45301932a721288
+PersonalisationString.7 = c198bae21397263a4fce1a253f418803ade06edd961c7656287333d93d369dbc
+Output.7 = 7cba65a1f7424bbd3054cd681d9c6a89fd64c67da5eadab49d2d688113f79eed721acaff2a282eaf02b823d928d28b8e500c2450ed07e6e1bc6c5f9023f91df2fed7063e32c4c8264e6904bde1e85cd3ddfc6d7db385b9834d36d1127f3be9dc197f3f2df26f11a4f33298d9af5d89ebc2648b2d4c8c15dce8e535103d36c19a4f48af8a740b89150c93cff5dd4c244519908e54079b2a1aacddfd6ea1dbdec6dd6f142ed284ed868fe451b5da7bc773b4b0af0fa1c1992661eb1f89fc0f6f54
+Entropy.8 = 2d914f23c9c337d6c9075676eb69ee9117653c3f240801dc93f630e880bd7c73
+Nonce.8 = 7fc5e341c5839e2eb16bad31692280bb
+PersonalisationString.8 = 4853b817b858f6d0301233ae99660742960f3cf45db20ba1741373b4ea4aa8f2
+Output.8 = 0939234892e77964590b4a37eb11bb286f6ff63db2840d3fe6e527e7f00246eec418b3d79c2d41685841ecee9979bdb732feaa424ff5e51b4e2117d9d2dcafcdc6e890de6215581ad10549c84fd332ba4cad847abefe253863152ce3233152cef672437d686146a123667f3bf621e7a251471a26a695f091045cd8e8133b0670086092c33bcc8304ccf704d875deb7a359a38e4f7453e732ebe1f6519a7f1c31f59abdd7eff68743dff31b4f625f9cc315579fd472583c918a72a7ffa018b6f4
+Entropy.9 = 78d96495678401fd9b8a7bb09ce5eb7b5a82064669542fb6903768fcbb939490
+Nonce.9 = d652398df43d1c1b56f4ebc5b98a600e
+PersonalisationString.9 = 9d7e3515e98af6e36501ddec8ffdd055452d508ba27d0ec9d06ddef2746d6a60
+Output.9 = 80044c300c94b51a3c5e84600537c33c2d3e696ce6ed4ad38505ade4b14c65fd6af38cb7d9f104e9f4b5f3c53f9323fec9c3cadbed0bcf09075d45a5c10f8cf40fa70588d5bab1c2ad2609dfdb216c20cc409ac7baad103fd3065bf2349d3ee59aa96a420e6f627d9b5dc602ba4af8c8ced0f455a27ccc45be32dff01342c432c358196621c672ae1af55e218d82d0f692ed7e40bfd57d6f9ac243048d4085e24bc38287ce1aafb1bd8ca754ac33d6640519ab5480b724c5dff69c8ce5a67310
+Entropy.10 = b5334d2c3d504ea556e377d68e9b712b6d961153e671fdec6221b2d54e21b32e
+Nonce.10 = 49f105e0321ba1b39bb4d315560bd2de
+PersonalisationString.10 = 216d9ebf2006991e8540bfdfd430926ae922a8c12759797dd8c684ec26f49dbb
+Output.10 = 6849b8bcc155899625db6a4a7ad347125c99c61f2600da0c1b28c2a7b6f1be83967ccb1e40a1f89fea7e8341c30acae8b1e46c7a332f9f5785547712f7c930bc846efd7e6fe74d1c2954baeac284baf896ff51a688eb6a6eb50bac7eccdec2e9fad688135884a2bf8e0e5ccd2bf27c771806190102055eb07eedb749b0d96f99d34fa64c8254f375cfee6515d4eedd4a44b3597a7f6367013cd9412738fa8868a5cf13be772a2c6dabfd7e707c76f31d7880e91fe2afc5748f3b88fd06f1cbbd
+Entropy.11 = 28f183e74f140dd8ac8734d189241287e1a04355ace6f304c515392b0bb7699d
+Nonce.11 = a403cad967a07bdb585063ef1c9fbdbc
+PersonalisationString.11 = 972a837632cc67c264845e308270660abb9bd4b1262efc05f884c463388c6de2
+Output.11 = 6b56d50a4100e6daf006c581a65f4f97bcabbc8d102fe80d72853a88d7c69148f2e4eff6db1263b6ce92c92366255fb4ba937dc3847964433a8e63f70bbd758a6132d6b0390a8582bbe372b137b329bd92307fae48b6a16bb094fb00494aa574ba9e143b49a46c25bb1fd0d6968c1c24585a697fd88d331b0e9076755a7ec9106e0ff34c428f0e39f48b3034eba14dc5740a22541e07d61d2e99f5007592875ff479eae65d42d65e648d573f5ffe23013550072fa55dfe9f5fcbd9cd5aea9590
+Entropy.12 = 2dd6b3e58ff00dbce6255c452d1eb3aeb211e2fd936d5d0f855518ff2c1c099b
+Nonce.12 = 61156de8a16776022afe3c6e6b26ff39
+PersonalisationString.12 = 674a4dcc09eab1cd4bb4f21a70f3ef511de6aefe317509ebd9bc477ba792636c
+Output.12 = add0b4f31a396bef6c75ee4f6feda4909f6d1838a5e7d707c6362d56c62ba84f1a9093ed6c141b9a50b0d6a319b6ff3490eafa848628be4d84b822cd4b1735e52948714b6e0cf96e71d27c3b713ef4f22bf29e198eba2840cb01975247cf08208942747907779e591e1ae526b71e2a943f0a84b0044209de531ac3d4b2005818237c60a03e03918aeaa7045480315d2ee29957c709cbf50c98a87d9d194f4b00d6baad6446f40caf11fee232062e1df92bc57bc7c4dcb46f2ed175c21249d037
+Entropy.13 = b6a5b50f57d8ebf8a619615c9b91c1642fb0525fcf4d8d3733c944e3221471b5
+Nonce.13 = 8c37ba49cf56b9dcbab0cb4d238b4b86
+PersonalisationString.13 = a94b6b839fd0c30318b189391fb30877f17208f9401033aad4bb0332656b3b23
+Output.13 = 17c954b37811b89cf00b823a0c5f0a07418131200f8cd88d321a0dd48aa3853c4332f0c32a9bc039142790be11b69ad69c7463b166924182e07d7fc1e1427e42e6815c0161b45b6f6f53d1ef12c139c035fffd997711a94ac6b82ce25a5d6c7d7b465467ab30c66eae498870ce6b7dd5dfecd6cd40b9897d17298073f82b588965b6761566ef868365cfcad26a75ddce316e420faeffda45439ecf5d39775c471c683999cfe93be718b1c8b32a5d1d3a5c5d48a06ef7d4d7d9c8684e4a165bcf
+Entropy.14 = 09758e8217802f40ba0d6e9c71c142de1b40022ec1af3354e69048ef3be6077d
+Nonce.14 = 3432a2e2263728e375ab973bb5842d40
+PersonalisationString.14 = ccfee35071757d5141f55a481b7c44a584c5e537c636d4d0ba10dc3c88adf6a2
+Output.14 = 72a77d1c5dea9d00c349d4e5a9e6dff63ef6cb80b7998ef62e7a1fdc2267057d07fafb993e8df868821c6cf76430f3b7ff24a527f7e41fda6d560a773d05bc003f7e1ed5085f6da3785dd999a4763894455febf7618750bad4e30d8f52f3a072af30d57df5afda08ae7cebdcb659e6cdeaff52b47d4dc571e28315ff0e38538baf436e02d157b64afc6d50e6a4c5842aff1e7573888c6ff9beaf4f91aed988f03032388940c4f54afda05bf55ef6fc8c673f01ab545838574f3bd4f22865cfd6
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = a5825e0855cfcd4221837b493718a380740d53a21870837671664196ccc54d9e
+Nonce.0 = 361d804f9865631a0c929edaf560eba0
+PersonalisationString.0 = c337212fd68d23d15415bff96d8e8fbb4dc9b79b5044c213f513f6917487d772
+AdditionalInputA.0 = 5987f21b584c2107b445f06be605eb00d62acc379f7f24ec55b65c5467aedb19
+AdditionalInputB.0 = 74132b412a58461aa41e2db743daeb6d809b0043fbfde801815aa2984a47b59c
+Output.0 = a1876c53450ea07a97d260ef23f3520baba8b6942535db0ace5f2538c0c2418403c50d1f5fb10b9757a7e7ad7344b5e564be357271c007bb03b6964a891e29fdf17b7520e905804272dc3a692adc20136cebe7e14cce28c39bf509267bb4ecb8c036c3413acf0ce7aa4c2b0955825a00afa1ee6ea655d1cf5acccb66f52eb643b117e3c92feca13e190c517987074dd4464e44b3156383e6481ed743634c6eceefc336212b9d52e67af8dc60bab9feedd57a27c5eb97835bc9a3690801aa8c7f
+Entropy.1 = 6fe04ac2198c0a2c386b0beb4030b3037dad41fa62f88a8428aa94f7c83e9df9
+Nonce.1 = 2eca61bd42ccdc2b9673b093cb9cd4c5
+PersonalisationString.1 = a4d77e5d47af90366d947ec0bb67768ea4e868979045b68702842077e21d1c20
+AdditionalInputA.1 = 054e9f11cbd49e916fd7e6a14534aee0c456dc97ec0043e4cbec9626a381ccff
+AdditionalInputB.1 = 6a3ad6f6716a302677f597e790778421bac683cee0b840b2e9a0d86c2e326a67
+Output.1 = 4daf3f82f38a9ec3f2bf8a471da37aabe2a7d27c0bab3de118d66b1c1c8e137d0258aaad8ea36031de8c16cba7829544e8268a0674696a0a56262a05d0ef5ebce44b31ab6f234334e3aa20984696aaf37aeed7650677ca5a46727b73867be491619f55614af2a47a6b7e7faa3f57cf04b757a43319c59c0784f0a069131d962d6a155a8f69fe4dee911cc130a2a9d67db554b5789fd7ca66a71963c091242f44b402f80d9e8f0b6cc47620e9f1898ecd87bfa80dcbb31ee225229231a57bebb0
+Entropy.2 = c85ae79239ea7f32597ca927dd42a9d992016828464a5df8318f7ced398c0a48
+Nonce.2 = c384b12989ab5a7dad84e73085dac1ff
+PersonalisationString.2 = 06bc07e3728ec33aa92c2904fa89e4465aeffb4717fccf36eba7920cd1c73fe8
+AdditionalInputA.2 = 78f8a518a5657e9816b9befe8f216ed47152bb9eecb5cc36042314c0504a5fe7
+AdditionalInputB.2 = 6e4f0c9be8d4da198dbafe8abdb5d2bb5097d5ccbb697a7d1a668cde0890e155
+Output.2 = c02e1eaa1bb6fbad9c6ad2d7661dbba8600fc8d403e80b0542b22e499ce055bc7453ff11050b0320be3d0852020c95fe80538918a4b4d6871a6f159bfdfa671d2a3739eebf8fcd68cd2997f0de63fa8c9ce89fe663e2195b1d19340a9429fd4936a2289ad97ce1bd83bc95978aa4a5bf2720fd91568269659e43d8bc88e10d5b806968eb0bcc33570d4396881e59ed92c3c07f4765515d77ddacb6003cca95731b27dd5c48ddaa346a0cc313154f2d42dfa62d9ec65d8d5c9005cde2d0ae02fc
+Entropy.3 = e3f2f42dd8e41d8f252b3e77c3fe7025b48b416f49f634df469850f22c4aacdc
+Nonce.3 = ab60bfc89badfcc16ad53f991d2b3b54
+PersonalisationString.3 = 008b552e005c78568f8b865f3857b0b37f8f28a7fe277ff63dd64c5d44f376cf
+AdditionalInputA.3 = cb634698375959c4fca74026ee8606d76051c1903579acb3bb28772db7d289a5
+AdditionalInputB.3 = fa7f8bd37a442c09b7ac8256aea83bb88b05fe288e1655e79b2f56541738b639
+Output.3 = 2d301f5701673f080ba68fbe3da99a389efc9d6e4aa3995825a3f2f7cfcd24164c6a2db4cf507531577dbd8ef6618321f8bbebacdfb6da028dac51965bd10d0eddcdc7f34e0e03695a2e24ef852800fbf7085ba6d8d605e88659e3dc7e9944c712a4713cbac6d35b03965eb2a4890ff3e01bc6cbf625049aa139f042abdc50b17a187bf3bc23d40756a7e017fc875db1532e2e8c20d5e895f2a7e36c066e4f1fdfeb62a5eb00eb2ef06561cc97ad6eeabe5b536a314eb369fb4ff702939e0d10
+Entropy.4 = c2bb31d49db727c52800d589bbebd2ed6a9279034fe573defe4a3fc8181c6ba5
+Nonce.4 = d3f1992a0c9f2c9000ab8866b59fa28c
+PersonalisationString.4 = 3fb63ef00ad27975477091c18afebcef0fd815eed6387acdd1bf69a2563da5f7
+AdditionalInputA.4 = 37ff14bec69d47f767b1b7d877396ac6eba2381ad1e526d96621a98c921dff5b
+AdditionalInputB.4 = d6b53f08b72158dc971f53be13cd2dacd41de11d6dbb82b518f8d09f63b0b3b2
+Output.4 = 192c2cfcae91a6c130b8fddc321690dfa797606c45ba5016c29fe92cd59e1537097d4c0d5fb1bacc795010984d2d5235c2ebae16c0f36ff5f6d3ec2059bce03cb3f8e002499611490c994d74e678bcd87b610adc07dac492ea429127dfbc66399b150b7a89364a6bbfac8f18ded63dd544f1ca63e59e87bed39565230ca47c1bfbdd7a7554d3dc434ac01216d6bf173fd3fff5f378e487ac4078774e1432195f0ac30e8448c3d9b5394ff472afb345e725eb6b8ce1e98c5daeb0dd66665d41ff
+Entropy.5 = a356eeaf651bdd92ffab32abcf9b98155e71f7fac0f0e4adefa815e1d6c5636b
+Nonce.5 = 5841b7c7f014ac05ac65174255d1ee4e
+PersonalisationString.5 = 23685d20bc0302ddb7671f9b6986ded41fc6cf5059023ef3cb72680fdc030b6c
+AdditionalInputA.5 = 72470c86828d6bf03dcd3d23d0076712169a313ca3eaf32dcc513825beb2baae
+AdditionalInputB.5 = f1ed0e127c984b2289e28661620237336e030c43dc5f0677d784c3b325a75679
+Output.5 = 65bc2efa1ad4b2384228300a98761caa2ae97d8c0ccd6e4e445fd8de0a2e59ff25076de563913e0870458e8f9c70fdddbac3fc8d513f3f17669a1133a3fa87cff6ac447d7638a64d1f9609bbf1fc178e1e712a69f61d208e9747a2c834816a99ddddc8be9e35d70114a9db3d9b55e134898940adef320b4686770ba00d56bd7eb26ddfaabe168ce903704dbf0a7136b025737ea54159046d3cee11692c7f57e98e16f4442d0cf773a668fd709ce49935dae67f46bb58f96636e71c185f1a3870
+Entropy.6 = 9ff397614ad95ed8b6ac225ba32fc4224b8deb5dff0e73dddb670bbacd74e571
+Nonce.6 = 61c0b59489b8d6bb16bfad0fb2e4f0d5
+PersonalisationString.6 = 04b6f3a762a89f61990efec287674b816f7b12199067f350dc2bdc36648e9946
+AdditionalInputA.6 = 99faf59f88fb098b094a9514eebe0222d3670a7b91282b9a4f4b624d221eece1
+AdditionalInputB.6 = b3b94a78978bf27e3b44593dbfa8db5e9436cd23baa42453c3a39b6c80ac70b7
+Output.6 = 2750644b55acae6e32dbfc9c36b11af369e5fa190afe98b1eb0d12a96ebb2af43e49b8ea2b4347d0cf264f873d0fef08fd030b14c5cb8ad95bcc3a74ef78ae81346ce4f1ae48d98ca9d8a7d19272c475239173c169014e75304d4f737b7ac2e33ee621ea7aed7cf06e6c0a5dbc26cdcd9e425480e34428f7699458b571c116846e39ed7e720cd9dbfc9c6783cb92649cc8ef05077db319fd42a1c2e958bfea2148f19219487c57927a7f9feb568cfc7395989f7847e1cb90c6a7ec04439bf92a
+Entropy.7 = 1c6c04a77a4e7ba9fe80e6a181e033ab6f5bba8b9f3a4d8196748312c4a815f7
+Nonce.7 = 989de5c9845754012f1a22bec65468a5
+PersonalisationString.7 = ff4bff05cdfc71ae321ad58299185112bfc9356dc346e86e907fca645cbb9b0c
+AdditionalInputA.7 = 07315e2a0c7900ce7fb89de89d79bba2b8e6b56d99c8223a154472f25d11f4a2
+AdditionalInputB.7 = eb5b307b7ba293ba2ad700f2e829a6dd34e258013560068648ec3c89d2c89496
+Output.7 = 512c3d7c71e1e57bbe451e79e47f5c6fc07ad8acc3e93ef7324cb6f24b108a8487422704b82e5cb66001f4a2c523602093ee6a29905c143f838603702d4f61c522d8184755e57776e615b4967af9bbb5b29144d683ea9d8ab6fac3ac7e1a5c0579294b4d72e475a03e1f1b82db6868fb2bd361f3ca42f48d4443d51d593efe5a12ed8b34eb664e61c7c0b7da453f5e66891c91f0859dbed4dc1fd7d4a5969172309b5aaa55eef5871ea68047a58961afa761c5cd3c5805a8a7e7f0edb6ee4eb2
+Entropy.8 = 815e69bd8935f67f12239b4382bca5913aae0725b93e757d93974ecd6744306a
+Nonce.8 = c1b5d24c068435355f3affaab90099bc
+PersonalisationString.8 = 136e4bc9ce2d6217e74348a6b33199bb39ecc6ecd9553b9a94de75f3bd886bfd
+AdditionalInputA.8 = ec4c6dcce484736c22dffed8488d6bfb95867db71ad53eece69ea09f6d38562d
+AdditionalInputB.8 = cd23eb8437f35af8c0a0cee068a3f93fc9e830828338462eaab55e158a647a3a
+Output.8 = 561330156d2a91169db6bc0c885a99dddfe8af40fbe969fb22a079654ff6141110697923dd7f6c9d12a27797310b66d05bfbe9d4fab16c34cb1bc715fa4fbe41b9d90bc3b5f0958bccd2d968abe62734ac8b4c66a375c249a71b33a9170b192b9a60951ed2c2170456c5a69b6ec41898cfadd5aa1e198df642e0498454daf567c009ea750cdf452dd4a8d0e6f95d1be72fd24d0b90241e7b5843280bffe502d22722763c3d9a865210d32c0defc7dae395a4080430807c2d36863e1a27ed2eb6
+Entropy.9 = eb4f2e37c052b6e67beaafb75c575ac7146db34eced5c24dc6d4eb1fbf50dcf3
+Nonce.9 = 828dff1d8bbc85840e7b18e801e69ddb
+PersonalisationString.9 = e68223a3274661aa668de15765f8c334503dd41843cbbf743de5ec5d5958544b
+AdditionalInputA.9 = 7ca640279006e71bb906b5e8c1debe3cdb82d843e5b945959fbb22e597d35406
+AdditionalInputB.9 = 772b1cf18e4de1793f1426b707111380eacd9876289d593b79ba4ed8d54382c3
+Output.9 = 7a86197194aabfabb7aa94615ea71b2312015003c82337676adb69cffa1f4dc04b36573570d461233b38e03a702e0a0be9359385d56725b05b3bc2876f6c83c48f1cbe0857a079bff4bac98fdf58dbc3dc420699c74710083be78276314fd7fbb066dcbaf5a0d4bad3d7f09763c080c5d189f75bbfa7e2f25a332343c08a83975314d62e6628eae5ced4496d04e39ab7b70ea2ceb0e998e5a23de7d2a06a8f60bdbe60501dabc3816e33cac5890c95b0e2c388d0950b4d939590140f0d01d0f6
+Entropy.10 = 12f626801d2bf16595dc860b5c2ab1d7698eea16d0a9f0ad1062857713ba66d6
+Nonce.10 = 21fd329fa9a4d08cbe47784fddaf6f9c
+PersonalisationString.10 = 13570610ba985eb5fa7f4012d1b24620c09f371ae777ace6b31084fdd817bd88
+AdditionalInputA.10 = e0c52c099d2649cc9b207acd2c161cc9a8ee8bdca44c797c79e29ff86a41f980
+AdditionalInputB.10 = b76d430600ff1634b4cdb59daf52cdeebf8474ff88be984d3db900bd347ab640
+Output.10 = a73da8ab954385d12b87086c35af4b64968bbaeb720d5487ba579cc831f8053c2120cd609d25647fecbcdfa967c788e1393913c18f4362194c4b87be4aa1098952288a6312880b3823ed3784487a744ff6ece81da4177e5967642a755a22916b578926308e12139ade9a291df3779665a5214834c44e469c7cd39542d1cb535d16d92a439c43afbcf4551531abd8c2b69cb8901152410fe26236e0fcc0aa3dec898531befb1422a9e6b226739ef9a9ad3bb6f223bad19febc7b2e4afa0fd45d7
+Entropy.11 = 10b67c9740aac7c965c644e4f1743855dfeecec5ab2b8da4c3127dafa8488716
+Nonce.11 = a52df195d047859c9b6883b641204109
+PersonalisationString.11 = 5e37bd9c2fa7f6e257f19b30b4e82076ef6a9c96323e8d1e82b545dc937c617d
+AdditionalInputA.11 = a8ed5e5dec946576b43719992985c59defe7f87a2babd834909cb0b9c589dcdc
+AdditionalInputB.11 = 7d2325ef88c40ce2e1e4495b80f3c38c955024b760e945ca51002d0ae3006024
+Output.11 = 0cfb605afe8fd756d5bcb94bd6f240a1801b834640d14b5f10aef6b7aecc35fa1abc88496ec84a64eb3bd7e629622b4a38a11220613d0e50391a5de16e0aa8d6a126a7e8ac41e820ce56c9d3890fbffcb3f7322cafdd74e078b2f75acb71de440deaa0431183934d5404753211771bfbd605e3d6c0ec6d5b6f2c9b18da0927977b9d72a0a035fe0e272c21c94a4916aea5bf264ddff0c76b239a459a28b973c6fdf2c456fc04b3bffac4af071b6c4193a96f7eded304a500967bc78afb2c4e5e
+Entropy.12 = 92bc198252e5515648e06afeecbaecec614882b38a66a0c9111567d36b2a97fb
+Nonce.12 = 234003e9e6ccf82894b89ec20b53aaa6
+PersonalisationString.12 = cc55b057b68e8ee1e334f5c7610d4b0627f95febdaa8d5667d3b453c9f6baa57
+AdditionalInputA.12 = e17c2d2172fdafe61ce30ddae5632372f1116925f4e157a3a4fe020110ca3d54
+AdditionalInputB.12 = ba5ce9e893f63b356a5af078284a02aee9db5f108872a3bf3c439d5b435c1d01
+Output.12 = a8aa68af678e8e340b21cf7a595a3ba72daad1dcf124ba7f3ed22e070aef517d08baaf6fb5d522f209f85ea4c4d5357a91a5511bd6dea955b66399f7f3a86952a89a489f5f2e4fb814c0c25c3d7368bf1759fcc0e1b34d527ecd4bf767b96761436434ef537937bc4141e7edbc24faeecd94c93f60e6b6d50d92370571cbe4118022cbb2091098b953db16d5424a32f4a28bab2f4e2380bf5e8d96d1a4f4ab5a94581cdedf59ac7e7b123d47789e1270e9c0bbb43d9ed04e6c42d27f1a8b7455
+Entropy.13 = 3af3ce7c2de63bff37a8a40e7d5a510ba3941bb4d037f377496a68b82c527fed
+Nonce.13 = a968f6c45707f8d73938cdbfe04d1f17
+PersonalisationString.13 = 9c7d4d8266cd5da031f7bcf5c2aca5f4db1c6d8fed8411e5cde4af8f62a052f6
+AdditionalInputA.13 = 70a8bc04b426969c55599b66f797c20c88cf646f819d6b1d3cf9512556e1cf82
+AdditionalInputB.13 = bc33476d9491665ea2f5b7108c8b554c99c8a20787bd12ca689ca62dca0b8254
+Output.13 = 07450117a5b116d7d7e0df5f1a420141887f39f16852dd5b3ed4badf061f684767ebccd6656b4a838db4d8e4efe3284b85b02c4b7076c056f3255f7ca9947d7988507b665b653d0a531c6e60aa677eacf53aa380eaaa4741bf2bf9634e9c4a90ede8d20522217b8a7c2e458cc8b002341aa72aaf93263736b56166c3c9c4d230ff96fc3d51fdb8ea2125facced58e1c94cc4405ac9dfa1212b55e0d37a524d14684d476b5b1842844a9bceab02d5b6e1b01cfad88aaf045a9d9b3974e265567b
+Entropy.14 = f676e6f82d90414cd0cc23f83c112e6126436b962c454ea4b9eb0598621a27f2
+Nonce.14 = 78c9137a3ac268dcccbe19ba0a7580b8
+PersonalisationString.14 = 2952af91d73d96d41a9b6d4d1217de595f72979b9024e8c94912470ad29acdab
+AdditionalInputA.14 = 0facad642bc0004f946e3fdd149a4c0e52475c9e832c85b228bff6f2a4af3af1
+AdditionalInputB.14 = 19d477a7dd45a0b733e6c301a4fd44ddf65d4fe0a0435b57e319e31de4797427
+Output.14 = 2a48844f6919ed43a2b0b64a1d28707fd3265b418e0673190b49a606358062c1a54a6071c845adc6ad74193d746668f890423ebb971a63cedae3241005432c8f3fa3fe7f98d5912da34dabcfeb17c03ee8881de7b2ef04fa2147b78532eb0ce7d9244d717697138f116341c7b9e99f15728207f6a73c651b8940582f9f926253420a853ae18132093183a6073e3bc85633b75e1c6cec9323ed4142d0c8ca0dd5ab2ff2e6b304ab8cfe4aa98ac64951d836e074169d375ebeae8498f11bd02c05
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 6ef7df0c0b9181fbff0d97b87caf9882c5af2a5ef9b51e987a9e83d1f2deafc5
+Nonce.0 = aa26b2f2536bc7adaddf6573aab6dd5b
+Output.0 = 38c2ce0f928bf7a737b681360397036568719ca0d956292c0dcefea6183af0b68cc2bcaa4f00847980d21476f07a8c2ec4c11a8b63af03e62f7c2047d26a331db4fe9501a6f5007fc7702823954ccb8761a2fbd5c9f699ce260ef24ac6b080c5b5806dadfddba4d509d92f1cf387ee09e7474deae77f575ae4eb630226b7d738e8543f4cbc862fb87541c3d201fc2f1cd8509cbfd3f756ea0990ad8ef2105313eb3caabae0281b8088d0931110ef635d4d380b98d220635ef01cb2c345f5bc22
+Entropy.1 = b328bee870ca03a6d14e1f209addcac9b3751b22eb99c6e4a2a3b4a9e80e8683
+Nonce.1 = ce4bf7c799f3c7b0bb803a787ad28b26
+Output.1 = 8d0bf7fe6ae18a1d7c897429a373a98e8fa5f15c464427b8a1a36b3338ff746b7a90404148fe767f6f093a36481c95cd6f51a6efd9c6fff0d014d3b080f5233a6ab7fadb19d0b31bf789c1412b5d0440b720aac605a57ff517d7037e3bc4fd94207304751af0a5ec111b98923ffa4574da4d80de45f45ba5ec7d006681390ee014c026f7e0e355e610677377ea2348526fe723b7ec56726955fa95787e2d48cb9ea729fefb889b68568589a3c6e5450ccdadc38d027736777f32f69aeb74e2c9
+Entropy.2 = e29f20b139d71b3f6956366a4e735a91b29630fad720f56d62fcd4e98745cb55
+Nonce.2 = 9204c396863fdadce6ee46abbe655df8
+Output.2 = a882e81a9c6e10aa87ebea482efe66c6d95c6965a18b5c929b07157f79c7158e20a013e63effd24eae52c594a838297ba18c0f5c4df21193df16f9cdcc88532b423be880d328eadc531c1640b886e211b23f60d95507764c4320e0ceda4a4aa70ae4a5889faae167f59723378a0e14166f813dc4187d5f36641a98092e68e8bccc6b28da2f1ac60ee60eb74e6c2acc5036f12ea0532c32deabeec2c4b00c212201cc4945f1b32b0b445b4bfa2d1fd1f7108ec74c602538651bc6dac2ee025fbe
+Entropy.3 = 2c8bf920b79657639a86aa5cd7e48e70d8651b33686c7a3142c9448477074d95
+Nonce.3 = ee54fda4225a04499f170f680214961e
+Output.3 = cfb7f884ff3b36fa4db5eeeb296f4f0319485a2bf1de8d2ac5dbe98cee9abf24937ebb8d4af9cae3534990f2b0b866e2e6e866ded378ff7ae7b3772d7c013c7f5f91e070fcca8da7b94f372971e0c6ac3f2fa2612d7faeec8fd57b6c0ed038ae368ac8bdfd1a13aa0cc46ed1a2fbfd135950a90de13cb56eba982a7d9ebe9c64a59ace8b154d342966849edec062754be2bc86faf80f3fb87001611ab90b36672150c5f11930fd31bddb5675778e7430571fab26c04eb86689b12a48bfe32e40
+Entropy.4 = a2b35e243bf41155ec95b89ca8c02a14aa6cd3f3469d1cde5de53142e00b8b9e
+Nonce.4 = 5ac28918d35ad33dc28d346cf1186690
+Output.4 = 4c4745be14071078b55427ef5fb5297286b9d83b69396c2d2f24716ab4cac2fba4231d525b5c972bdb7fda75a3dec15d35885fda6471f39c6868b74c478886640c4012eea52fe5d919737b2c7ce47294549eea8f6ffb6a149f888dcaf3cc8dc1bc3d6fe48a7cea610cd00b9103712f05325d3f3ed2220972bce4cf92a9d86a6d10748a1172b2bd0fdcb9b159efbd0e0b2e8434b1e7b1a78220c96935d3f6989f4fd4b0d6722137fb67823034cd7b3f5a230148a0fba339b060f9e7b8dc024797
+Entropy.5 = 5e711d2210345876355dd9e09616e041e84fcb26d7d65cb522050040feaf0dbc
+Nonce.5 = d4ef1bd75e85b4901d8c005a684970bf
+Output.5 = ae839e7fa091788e8e11f29c14411569a2b4437719d7411436357f7034eee223c7acfead356f07119da87cca1b787207907d6f1484d8b85a3de58beda9f5fa913fe66ae347582c87564d13b47eace00b64ac08863d6e5e1304f70251280b86a6ec0301677e3cffe2429e865da116ccbfbf9dbb6c15454c7df23b66ded8972d8dd0d95ca154bfb4dec53d57d220882a26effe456201c37895ad7d94f1f18c9d97526c32cb206da2b52603f4c699093c7447d38ef9f49b5f000f1e6832e01efdb9
+Entropy.6 = ca71fd984698d4a801adde55a12e1d3dbf947beaa12fefa27116a542f83cd353
+Nonce.6 = 841355c447a8909c1b763ff0f99bcf95
+Output.6 = 6ca4163d630a00e9a19b9a8db91ceea4a9853cc816fca57d8c87c56d3071ca069c15855902c5105a577a6262101a2302741facf85b111de0b6b6dc052dd2e9b566e0fc53e2aee7e876cad9a5a257f544d4f0b3adb5b2720b4a96c32258c699ae449ead389609ed48452bd2e7bb2478c3436314f8c700bf57c5b3b1214a0b7ca89d2dbfd197e652c508b16b0098b46c08ac04168545c7f496d5b7381ee05c587687d0c473a05584d9e1fd8d6a8c650fba986f3b87bb69548be13006cb450973cd
+Entropy.7 = 2e2f77a265443252a51f674940f3d22e7471146663051e7b3c8d9d6294f2e533
+Nonce.7 = 0eedba6cf1248acd00895b7b731b8a5e
+Output.7 = bb580a32c2274aefa39c7f396d12bc2e4806201319daa402a4bfda6d6e112d977c0f699843cf0fdc488ab2bc6067d9b28f45a51842bc23cd1e2a658d09913b0548576105bb688c9f4859a280fb1829b5a73eb7b1e56bc2531598fc0b78abd5eeb9fa700d35f8d66cd534d868ccd803802e92447c2482c69307e52e687537c2670603014ba26ae7ee5306141270e7490f747d7fb6f10f988e7f59abb95ec698b467424e8717f5fde81a82da5bcebfd9ed0bc2202e04d3f05500dc160507b29bae
+Entropy.8 = cbdc84de78841d6eba2d14afe71d38a1c82e07165d69505034d8a287d8f5b26e
+Nonce.8 = 970d3c34193f81bf1fe70634e915645d
+Output.8 = 47f0ae073c8a605be62b79d0cec7b4909bb55d1315e13f22197b0735489c06a47a3c5c209522b7c21b551bc0782017a5a9e79e18fa75e167617000ef5f28cf9d464b76f66e20d2ea5ef98220ee92874b046891a7838965e818ad58e837240970270ed576e545d9746ccf0bf2c20c30299cd4cd3a5b5c038d622c376d3ec08344fe695a01987c5e1c298edcf7a42ae7473cdacf4b9d775d480af2d162b6d6b1d139bd0c208bd5dca83c5d4bbfe2ea64d5ef94da813cce88ca18825d47d740a1d0
+Entropy.9 = b917e2a2a8365f097649682aed69a177b2dd468aaba7b73d9bb66245d851538f
+Nonce.9 = 89e6729035344e3d82652b0bcc024db3
+Output.9 = 8bd97d4299911a92dec3fad5c198403eeefd3be981b25898eafc6b652da6cdfdfa223db37eaaa03e30c5054584f9025e1704e8e20f53ef4534c13bd714726fe765ff63645910c926de05c067ac20cd974b44704fd457c35359d4520610f4b51d041031a81435dc17a43cf0e4426d88643da33b82cc71635723bf5d959c546a8ec479dd7741852227fd5a9d4e9bcf2b7faf2084c67f776bd9ce2f208de44c8d2c03ae9a7cd7ba4fcd6a6ffa274333bb28b6abba2afd2dbfb9fe0486b378122001
+Entropy.10 = 208307e4ad35ab0be593d0c3f9a85819ed05c521519b493056d0a53f1ecda414
+Nonce.10 = d980460023bb998eb0d858791d5ff895
+Output.10 = 11be42b4a95f07a68b66340157575056269854617608a13b249dd69f8f29d2c191b9dcdb1b1777a28d55540cb1926b2a5cbb8adb558ace37feb280d4563c4201733c9008202db5d611713c66b70cbb81889136329f90e9aac3daba22c8e200b68a72621707229205dcd35f4abfa79a7c38cd5ccf21e71f3dcf769130273849bb58e90a4881e85dc7ee92f4dbb613f10e2acbff67a5c99429a9221aaa2dc73e714f735ca4a758a85ebf7eada7e37ccd9a6f7005276086c4e19a9469e88cb47434
+Entropy.11 = 92b42d45f93e85403bb49d9aaabc9d7b80eaa544f79dae4659820a0b08ace8f4
+Nonce.11 = b818f47e3225bb3f2e742c4fc3d241a3
+Output.11 = 39e1e1cbbc02111fd07009e694adff48c35def11fedc24eaddcc82ecee8d389f3afc8619392b49559036f3eab823fdd2ffa8555dd60d2fc3c51db0a46b0cd346d7213f931a186a967f15265f7825b65edcd5240f3522713eb867843294016907f9ad3b3858324482444310e28fae521e154c31b10c268d87e1bbc7641731f8705a1f0509ed4570162f6af1c2700e82f56846920238a9fb878d45e35598c43a269a8ed33df361d4749c0f67eac9b94b63fbc54d0a314c8c59b3315895fe6d643b
+Entropy.12 = fd96da186fc0247e6e7d05d98fd1db570b748372a5c17698d1367990c7429c5f
+Nonce.12 = 2dda1c20be855abd248ddacd2fc9b4c5
+Output.12 = f8abf96caa8d6b7356cf2b20ab810726fc170bd46e9d2b0817d9b8d818af28d9d7de4e7d1d379535173f84230d77444b5781b41abce6046f19df985e83409072c710d0dfcaf70b4fed4b54b9f53b233488a8c6ca01effc36784267667d58058e8be544a17ce1fa5af1729ca9a0ff1c5657e659228e15f246c3c3bbe56d6f55f59a14b421c759a7f5a310c9c5e590d8b80532dcfb6449664c7dbd29b998420a443d79bb433624f03c1843f23883827f42d755ed663714530e3dc5545c7c38e76a
+Entropy.13 = cfdb054dab9f892968fabec8e00730ba4d33cb161e4f9912f6e740a16f2e4763
+Nonce.13 = e3de0b0263c5560b98e2d9df0beec8dd
+Output.13 = 9530a7a287bd21829b2fba080f52fa63f688b9cbacc0ae4c13f9cbd692d318364a3d2f62e043a2c096ecbdcf5b33b47543d45c84b762f2c1ead80e979415f2428741cbb8ae79ac44c8261c4e9d561d9884a4a9946d826b5f1538e73c8a20414a0b1878a396e1181c2eaa8da3e666863704cc0892d1b96030f9624f864b01f787ecec03e237bc85f5431ea058a28a9b3bd4608563a2018d9150094ca007a7c7a5fa641875559cc85ac54986f92c34ffb4f23fe1456b35f1358f025c31054b36f4
+Entropy.14 = 3b6dde5f550d482d30eee2288bff802241ef20ec15696e614b7268f7c574eb1f
+Nonce.14 = b8d8984703ca7f942951fca97129135a
+Output.14 = 36d0cce70eb5aaccf9b172fccf68e01eb8ac8b1f2652cdd238f4b070c8f2d9a128418badb38d5d5fabe28b59d15cd432010716fa6a48071114b2168cd29028386171594291118e54fbf5b61ae3fbbf9a21ebe73a4aba482c7cdc5ea1a4f21a0f1b38812cefff9bae78c2b95f417dc0cda010079b637f825dcba059d154f5a53050db773250013a1f051de9f7882433d2054ef2adf9b7b57c67173c06ad16cac6bdf74a10bcc666f7d4a091a78131c5ed76fb733791278b6ee0f55302c4b122a4
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 211aef52ebfa8b8ab712d6734f6d2403cba5ed8ee1aca4bceb8358215b526cc4
+Nonce.0 = d24fd710c1773744b7af045a23e2b359
+AdditionalInputA.0 = cfee12401a1b8c02f02ee485c0eeffbd7a6983a620d357953e4eec75c486b43b
+AdditionalInputB.0 = 9609829d8bc02dde14cab4f9264dc61798513c9e3ca977f735116a0cf553c065
+Output.0 = a6dc3d779f35be2209eccb4fcb5ebf15bacb10a8cdd0bf3cd28b54cf750c6ecaadc755ad48dcfa06420ef52cc93959984116d54d5f243ee5422acdf46448fcf47e33032cee872ee4c3245b5feaeecab94766ef0027fc9e1df5e99ed3252b1236c3d6459a43dfe9b30e8c3069351f57a0f650112c0be658856e43b3643c26e640ac966f9a1aefc541b37d0534ad20bc6889055d98b5d398deda10bfbc62842b992b8a10d46eb9c5348f1ded1ec46c1d124204e4175b24ffe97adc7692d3f20e2d
+Entropy.1 = d559e3a0489a0cfbd5b8f5aeac9fc0bd5a082f580fb16b4e79391dfe27fe824b
+Nonce.1 = ebd227125a5b9c502e1611c7fa68e557
+AdditionalInputA.1 = 406b3d5cee034080e84e3ca2ebe480aaf057b636f52a6878fd0a4530b379b85b
+AdditionalInputB.1 = 96b9e8baa5c839a713b38a921bc69c17c9ec5fb1556f4c2139757dcfaf0a6eee
+Output.1 = 8562e5da6c7d5b3e9e74ad6e6f5e684b4f04ca9e99a0df4bf514e2ccab93bdba59559b64a28f4d1ffef2b14e0394747cb74964b5b1139457014dedc674ebaac25214de7e13cf45ac37d502f69a92d13aa633e0edd25ec9ec04a8a40ef1613b4c53e9672e5d7d2267493b34a5a08f9ac7752e9adff76b00337d7649f3c57e7c7a71347a59cdfe41f8f3fa6b2dc701408caedfb46b08b8abf46cc93e237ee8279e83203be7dbc4694579889a1cebd034a86f13ddc7d316df2e0ba0d7ba23d8f2f7
+Entropy.2 = 84bdcc44f1554efba8de2f3ddfb87c4fce23c8b97c1b0e70c42e2c1683675bce
+Nonce.2 = 7066b1fde6841ab4e7c9437d791dfdc8
+AdditionalInputA.2 = 31f4abe175e228cf53af8b3eca037a59a2126860eeb8ee69f1f88140da589d31
+AdditionalInputB.2 = e54f99458a3bfb6fc44f32527d01268cc7b8de06017050d0fd47764e005280da
+Output.2 = 8dce21f6599b66704b3d718bc351eb8435f3a00ce80393810e85b799b526c9c4883eba9e4661484375d5bf3087fe22915ee41018a4f30764a9bbdf35897f64a82f840c67ec8c3c62e96d9a59a9c54e03f0cec78258a138a9e5370bcb0a2aee4842e9e1a29cf1425a74cf89fa48d4551487f41620b1073114637624c5f5d3b512e9326b85c84566c3c8ba51b8bfbf716ecef1d04262c4025638ba225e181e2566c6466054e56f20838517902ad90acd9333aba3c2296a6ddddda6ffda50221645
+Entropy.3 = 7cf7a280292a7c3d15231003fb97cfdb93e722644436ba72a7975002e52581c6
+Nonce.3 = edbb6d2cde1321234e2131856f9accb7
+AdditionalInputA.3 = eb88a12d7562281162fd29222e7d01202503d97fea2a7e3aae0d6ba88e5c90f0
+AdditionalInputB.3 = 8455c1a90b23ac3129e0e79246fee41b4cca6b885860f62aaa039dce21a3c21c
+Output.3 = 145dacb9ff3e45a6e5a409d501c1316bac87d9ed5c4198db804b59bd752bf0100221963d497b83d047ff67b25f93c86c4fe9a9c3b2bec814a87a9dd56b87dc95f392c3282e98c53ed880f2fcf44aa48b5221f75f71e130f379f7911fff5c3ae54ff88f28ac1e82a7d6a6f674a92436503d1a99b179a53fed9591857d5515499c1f7f05a8daa6117cac680279104a081eff4de28fa6bb17fab7c1f0041c6fc10a38eaa4102318cbc859ab13993bfedd423d4d9f24dcc7c1366bab14daf5957632
+Entropy.4 = 9155d2e19cbeec98860722bef799c2f3332f1408e6afb32baccf1392507d6bf5
+Nonce.4 = b6b4ae01a586efde1d00255454a4170a
+AdditionalInputA.4 = 3af3a72a85bc795ed5f9ddda56229ddc462b32f92ba5b791f1be647009311f0e
+AdditionalInputB.4 = 5491ae4f73534fcb6fc328ed1cb0b4f4e57ca3cc792203eb47c708580ea630ae
+Output.4 = 6de2d0e3c5fbb6644ee11039bed584e909d974b8f569f60e12ecce8563e1dd280532bbc07a6fabb76bccca5a9d06cb01e817421492200f830efd1e995e8750c15aa2da8cf0d6f38c5cbe92f2ac221b1036b8376f92c129bf1b5fd0a2951041e0f6125c31a00bbd537be944d41cc46ca352d612e5c748671d61e5fb122444dacf57a80a3f22cb3e05bc36e444edbdce1c9ea1a1eacfe69ac7256d3d7bf7ec4037eed2fe7e8de50cca38f470657876dd98da5a7aa666dc5dbe64534f6cc6aca40f
+Entropy.5 = f8851337b20f05c86ae5cf6e7c417d4771c8e3e5d2339a5d2ff9c21386e0ec7b
+Nonce.5 = f361a2aeea782462b403004d8f85e7bb
+AdditionalInputA.5 = 6b3f59d3a5b8074d041a6c00f8d9cc01abf42de97bd04cf1b23a306dbff77373
+AdditionalInputB.5 = e475d94bd54d2d0f50aef24e77bdabcb84335eaadf20686b867dd66a1dc777fa
+Output.5 = d5dc0999ee0a31b756b2c84ffd4828feee1c0b97190fdd0c51e98ae23930d4b9a2dbfd720e4d9b786fa32991ec0bd2595153b9297438e5f32b18000bede539f504cee1d0b5848006f6d79668e48ddfc494715d66fa339a6d0ac3976c1e331acd70e498e1e8f122a4b121366d90896ce2fdad09296a0e44ebf074e4fcb555e252f11abe1a3b4809bb092ba35220274e71c046852c97f27dc030764963536e9c434640db8cc287ffe639830d891b57b8904a845c29967bb2332584d49fc14dc1bf
+Entropy.6 = 38084c1e381ac23b82ebc85a7f86ba3093ba8d535e137a139a9fa12d7ef908d3
+Nonce.6 = 1c58efd1a23f32caf94d9c400919a0db
+AdditionalInputA.6 = 194888df78f5ad2a96fa0f01aed22c6652e66f450fc586889e5fbdc22596584b
+AdditionalInputB.6 = 733888da96ada32c0c2ce72275efd118621224fba68557afa07a91fd6858f421
+Output.6 = cfd92af709819d97fd24f7dd0a1268e0946a3155911b2be0b4cfec2fa81aab610dfb2cae05b1dd4e8daa01e42b911e52093bc0dd3333d71fdc108c2616281df9c90669c68e72bbea98ce1ae8ce8ac0ef47a721085e66ba470cf2bf66dfd78acd1c6d8691bc43b0b950e8a717546482ae654e4f762a1ed7dc0a7c13a906964ed55262933dba034575465b14633b32a8391c78b626f64a13e0bc4bd68f36c63712dbda3e95c2567c093a694756f11e817948d4c225dd3b754b0b02a70a16cd527d
+Entropy.7 = a9e25cc2e9b737b19a009c35bc6dfef47fe2b27490c3076daeb3da0a8a1650fc
+Nonce.7 = 3421e2b231823a613dad2f851734daa5
+AdditionalInputA.7 = c788311524aff96920b30692939980d366c70955587c853793ae73c16e9d596b
+AdditionalInputB.7 = 10f12eece4f19fcb9c78bdee94732902a42a5854dcfe407d19d0fdc7a03c4f3e
+Output.7 = 83a4bf357b8268379e3ed4767b1acc503178ae9c47b5d3a8566a5932763d318138b186fdd760332516ec3ae3a560373479e75285662609757d04f2ac51fabe61b1d0a635e1d198d0883934480b9ace1cc0c096734f4a906ebdbadfbd039c191f45c3c6bcd642970c4346a9a6b8017081d6f58ac07ab68c2a1c085c902388bd0c425adcca80e73822d3305836c224168426c397aedd43ef9aac8c860dc3ce8e24d067774bebff3194f2c0164db2a074a6262ff379003b53bb0530cb4707eb0b6c
+Entropy.8 = 29240d738e28bfca0b228abf30f966ed25c49ef40767424393b449e7a6103798
+Nonce.8 = 29c23e30beda91e31499d2a303effc4d
+AdditionalInputA.8 = 11b3964aebac9f8e83d8d382987def28c62ef2baca63a546371cf10c44abcb54
+AdditionalInputB.8 = 06940635371bfae8f7a66dc47b56801d929feeb29a09e130085a1e6a98ac78c5
+Output.8 = dd60a097c02b8d810af0616971749539ddad3cc95defb3a1901b9e53dcc32eaf5e7ba348a5eec01d5821cb1fa674959ef6999aa02a8bd096c659d3a5ed4b66c84aebdd51e154c95a830e41cefcb1e7f088370b87bd28fac2aaf67bb94cc612c610bfaeebc050bb972dab69b1997d045d1b4c6c80beb70f61874dd4b06645c928c624af578fba39dc255fd789041fd8b68be1580a86598f696a24d445bf0e67b557f220d72e33e61c6b39fb2e5bbb3f803ddb2857c3add88a1c26cbb0ac5085fb
+Entropy.9 = 899829f7c7c8b2fd0de58862019278b0d8ff9c9cffc905604b5fa2f5cd48d995
+Nonce.9 = 16a57264e2eb3db6af150382dbe4b5cc
+AdditionalInputA.9 = a148ac240727d0a4ef4d7c091f1c47a8d307c880c97ee792e47b8380975d518c
+AdditionalInputB.9 = d0d9ae85ac486f93410bb128e2dab6e54e6fc71ca5b6bf4c58eaa21c7da6d387
+Output.9 = 2daf5b28c358333bd65aeaeab18d2e4329edfc1541173eea15e1c9057bd3e11c9035aef374ba9e8568bba5645b018b384bb189e1dfe774a9051bcb655a65ab2abde6ed3e51dc92353b7a113c74ebbba352debdd74af163337419e6bb5fdb167f1f1e278198c0856348cf1e46a68e29228b3cf4f977557e1dd502f3a155841b24841e642af62c985cb23c5e14622d843e7491f3db9c1019c511de0c089667dbf64c92107f99c107ee30ebde531732e02f19958a06c81e61777e785a9905bddcdf
+Entropy.10 = 0a4e66d19092c36fd8fe2722e769ec81b5fc21564488959620c5c841d37d08f9
+Nonce.10 = 362ab0fac130deb87047d69e81c20e33
+AdditionalInputA.10 = b8c044329a928212631d19fb7e6c0eb34f32c42f8d6aaecfd84072d3aaed4938
+AdditionalInputB.10 = cbd5e50781aad8b7ca73edbbaf5c803e338144a9f0fcb7ad457d87def2c5962c
+Output.10 = 41f849c0e0c2926f591ad257c4802e7552e078f0f6bcfc108d8e4e5f78ad6630a6bd02a3e2373d4c80e1fae46c6fc6306db3029d8cb199f110e20ac5ed0a82c275ed943d4fffd43ebc1fcdde7bc08e7190911eaa98cc493c290546755af7846575c3ca96175ab4cc1ffbc741b11d246fe056e5849ec5ea264c81061c2b54281f5e3d45aba4ae1bdb9645554bab59543d7bc0bd6e9ba3cfd01ee97f67e65f3a6dcecc02e507e420aab8a05151bf1d7351cace4758dccbdd4c34234b28d18a3654
+Entropy.11 = 294e4f34a6e82f7d82870148945a52da13daae4a1961ab558e64d64bdb164a93
+Nonce.11 = 7b33da99b4650057465e01498dd71879
+AdditionalInputA.11 = 30927229807d278b9753514a9b762b62a5468eeb8874af4ae8e3d00b8eeb77fa
+AdditionalInputB.11 = eaa065cbee6f7ed92f391f3fe6badfd84e62765df9ba11fa5a12b8bbe11b87d5
+Output.11 = fe50f4780b107b519887148a3a95754456c6ddc63f603eeb4405a676e67bfccc83c8f1ca5babc79aade63825b64c0cd695bf01cf0889729551be22103d79a8009140a2d3fa97e4a607d11681a7088d13b8dc44f926dc952325bae51c830352177759055d7bb1ce02cdac368c7c8f9b3f03d3e916f52b3e73c9e3a7b4160f0d18d4ef6073ced56f057eb9177b87b7e1931ae562ab07adc6ac5442ff519f8a18ce0486572f62870a250f1871d67e4bee9ba84815c6f8987f729315d55b3ad9f710
+Entropy.12 = 678348fca7958da9c6c9824f8e41f99cf9e5679aedf23e36efee944659931f0b
+Nonce.12 = 091632d69910829b3752f2ffcf7d7d90
+AdditionalInputA.12 = 5c90b6ae2ca748e1457a47881c51686e526faae7efaf615fe7b1e0faed5abe93
+AdditionalInputB.12 = 3ea63094d37b5ac8b70780f6cb068a06754c34232cc4a510a67496d6df5c8125
+Output.12 = def000cebc30b3ca76ac26f65d8e91e6fa8f16983221ee5c8691961dc3a26d3b78ad2ad2f1e861c642d85a5bc4c6e4963bedd68011144c184ec6c4e0484e404ff8743b32e6124ee35c894f118eec2afd215d4fc04d834b08566ab4e50b8d710822895752645c07b5d0d3a25b69df294130b9ed16dfa8a4717a59cb9d1ebb16610b0f68c6e2b4c9f3cd11c77da6c1ca3dfeb1a9c50333ad53c25aa3f8dcbe9061f14a1b7beb7520c58ecdbb0ea2050951b00befe5d78a35b269969ae03e0b91ca
+Entropy.13 = 4c562b473c4a1dce0d7a3f1fc037660225404bbd59b346ced01cd9c1a392aef3
+Nonce.13 = ab44014749ec64303cfadb70e07c2c2d
+AdditionalInputA.13 = 8f4f213671befdbaaf10f4a5177ac25f5505c82a194cf5255b0cfdd7d0f9f096
+AdditionalInputB.13 = 490246159761af5ad163c02d8beaec64130bcb6fb44d85b56e999844b148a81a
+Output.13 = 17face71c9cae2b898ed56a44b3634559d3ab58ed3806e1c0a88906ca1ee18a8825faa34c5be021177f2c642561a7e99132dd92c3ec3b47ef6d3f67225b644f431cd0bc6df12332ee910755aab48dce9da3775b21e7ae88135a2b074133b433a3b8bfbf21444e5d8dcb8615fbe3729bc5483d84ecb4c87fc73e187b361a81cd051ca65053da4dab05dae7f1a1963cc70e78ac6345fee5262cd34da4e1c42e2344602288bcefd8ae7cb3e87b0ec446e64e5033883f97b6ddcd279a772d660330c
+Entropy.14 = 4ddffdcb19672ad540a056a61d38d5a5f9d3649ad96bc8db0c81993a8615e0f8
+Nonce.14 = c4885909d8dfcb6d7e567623afcf47f6
+AdditionalInputA.14 = c6a3bc83220c7708eb7fff5787ecba27e48c894e15302e0ee7f4e5f09b3d6b76
+AdditionalInputB.14 = 39b854a1c487e24e1ed58916d8012277fafd6e7b6175c4be43927cfac9958404
+Output.14 = f7d2f39a513f6c4eab993fa440b769ce09a15476e06ceda47969be05f53ec7f8409de284749cdcfac07fe7df66b1b6bd39389401909f3a84538d041e1c038a289869e51bce8bac13a0f786cb091628f0a3a7f7f9a2f620c98889688d46a2a037fbc1b2a4fff40800eaccf98a0bc1452ff1f53f040daa94e17dcd6acef97192c74075d064be5a97205ad97f693257d96c04e78654a694e90b80a5234a25d1c7ceef360d53e768067335097c4aa8f126a31882eff8e55cee05eba4b4325c203f4b
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 705386dd8a706d0774b65941ce63c71f6424c4c91b0fca6213f2e6f23315f761
+Nonce.0 = 737cd32701fef49041fb80cd03077513
+PersonalisationString.0 = de8e15f6d310fea562341ec51e474455047cad287259928fc3c94cb3b153b241
+Output.0 = 88d333e5b81fa6738de0b1bc50b2309368c70ddcfcb5d2b268540ed506cd2d897dbad3069ca0577fe639f965963a07886c27539d48c7f6ef79aadff5c5a9865aaf3e781c0ec48556625a2b9d0a11a71a65b96a4b49d30a8178eb0e345b9c92084137d7bb95c2440640e8af22dd8061eb474f956446ada61cd8f0fd538cb8287ce33bf508b3b40b1346a42bec6e16a05b09f3c8a7e7e4c488a29f43c8ac77cde3fc0f3a17bfbe11c3848ead351d28487dc9469c537d210f0f01ffcb0fdadadd98
+Entropy.1 = fd72e20fe3bc974a33ddb71df40a6d8933dc7ba71b8069e0184ec25f17208a77
+Nonce.1 = e231684bf93354be1b95c7e485c8cb0e
+PersonalisationString.1 = 3076b2c4ef5e2942738a86eb1ea2c16c29d50d8ab2651bfa193a96c1b29be27b
+Output.1 = d4d5597cde675f700ffc4f45386f5dde0040788e9b4af8f6a8fdfbab3d9ac755fe99e3906e37fe67bbb323f32a264bd5a137217d6cf986a60070fa4389dbd476719a88cfad84920702fa8c6e8cd820a59be4f1c7a04bc2e89c7deb9ac4b8a8471a560fedefe360ae8594bdea4a8508f1052f165f5e774d362a6a57c5d89bd7ffcedebb9db1e76fe50e3db62c7958749d8498573bc4c0b7e04e7111534b333555b6a836a745b2ef793bcda23966e66bc177af74e04d07df6e4c05364fc6c5cfb0
+Entropy.2 = 36bc1f2d997c7e90489baaaea0e3a26f1c25e630ab76fe469d3a2be6f6f6f4a2
+Nonce.2 = f81e1e8299c4ce15b86fdf17bf480b51
+PersonalisationString.2 = 8ddc2e0d4dc14de4f335f7ce32d2ca9aed9c9c2cb8b7246b8be42df2b61f4fc9
+Output.2 = e06007b997f2ea6a48b4f01cacb89b35b3f67e13e99a3369070a720afff12b2da06b0d724d67ac18b1589dabd3267aa868d0f3f2836a115cc1e4af6b3a45bc8326f116a310cb92efca5785c387e6fceaa00188387e93c05dd45b71da23839ecee8d40b63191debc65b6e2632480d1747f581dd9d15b90df0272182a778f47b761147a749e9ef0ac0e59d4b40f7f360857e09de551d186f64d92d7e1f11a3da321b87ecd1c36a411f5a12e8e8b31406b7183265c9ef471a966810d10ed3652ee1
+Entropy.3 = a8b61446a8440fefb294e6beefc40d7c49640fb7b2d1f326f48f8dbc3647fd87
+Nonce.3 = 0505e5311530d5078407355eb1b7e6c4
+PersonalisationString.3 = 02e7e187f276a181c3b4f1fc39bfb09f16ae58f81c24c976645847c2e16b0260
+Output.3 = 22253f2904cea40099a0b24d92995094436563f933fa005019d7bfadd7ab6783c4e7e0881a5acf46e6db6da5272f768f23fbba6cfd3fae6c76a6896c1e0a80bbdc0ecc7cb88cdb554236c9157dc157fc10f199c22fc18cacf675008b371b381e484d2d854151b9bea555bd533945e6427ed4cc9cc74cfa0aa92ebc412e56cfd951181e376f0f900d0326e10876dcf2a880ea2830c0632631da09ce2caaaabf96d56f9d8eb25404c77e46d9c20e788cd1abc84c73e380a7e8dbeb5e4ce1f1f97f
+Entropy.4 = debb0f618a1a660f9a720440b775542862c150512d6e2d713fe61d0a090355b2
+Nonce.4 = c8cb776647df80f1b2dfe3e96d07ecf2
+PersonalisationString.4 = 588b837cfdf6e18b4d700d8a7903177231a36a41338048de302c9c3cdbcd0f32
+Output.4 = 4991f9fe4b6a0b791e9aafdc117add0e350fb2e25791a4eb3a3f9b5d05f619af797ac6d65c1bf1a5db175115c9dda209c0c0295eb5e4217ed8522a623a8166ea23b6799955360de7866cf41e9329d98fc7f29e04d6d5120ba541e5c01e6b250b7094ac035535be80b2597397b0644d6a3147060944459b2678e89cee3d38ae5c9a8c608ad3f20f2bc45ca2934e5175791eba4d650449392cfcabe4591f21cd44c96abdc2d71bdca80ec1fd92c47a02ebc996090ff58351e6ef7a050be12e56b2
+Entropy.5 = 4bf21213d980252f5dc3518b867b15b2899755e91fa461eac27c71477849dd8b
+Nonce.5 = 25647b2d71a8f3a6310a0e04a3e4f08c
+PersonalisationString.5 = f64157717d1ff1bcd6737216e1643adeece3025cff83297cf8113d6505de2df9
+Output.5 = 91d8d74d1c708edbaed3b47d47255969b52c34d3296c16ab803263c25e82996ffee23972e763b8305f01426217ed4b3fd2dce2250da3519550dd5e278cdf501c22dc97b582abfb237672ba695cf561f190a66744299dfafa764d7ccda05a36b250c68a21a491ba132b91f56eca7411dcaf023514c65ec6e8d13bf1f3b86c827d61aa223de5d92c20afc531de3a1d7e2769d494a33e7ca3badcaa7bc9547b48dba1706c68920c0472f5128ee3cc205ff63e6e7fd2ee60c12f2c7336361e81bfa4
+Entropy.6 = 91e9323c47847ca546d94fb870e112dd03f756ffd1037ee766bed618c49f6056
+Nonce.6 = ff42d9add486f711de89352075bfaf5b
+PersonalisationString.6 = f9ae90cea69c9987483268ced4240b5740319470f37a4db14ae090e4d5f35a5a
+Output.6 = 3b90cd426385b80c697bcef30f2fda44194aac38c726a1a6079b430d1b6c8fc2639836bb11abc40d7eb3037f26dc794b075437e080fa21da6e2b0b7c2c15c4f4f6ec9e27578d65b66edbe3f24d9ab5c4864b3f5dc2949e85484a958e68af6d5cc45a21662d4fe4dc8131501cf6faf4e3016b5a4fabd02fec24ef03b1dd1ccb5efde85430aeb4298d947150c6eea220b09e2177d9df19c6ff8b54c0168215fa6a3aa08886ea9036ea14d92ac817f903ef4f1c2eb8d79e9e920ea42273e53f5d0b
+Entropy.7 = 910b3ad9e38f603112e94fd39aa04a171c66bbb51804870568c11367dc8d4145
+Nonce.7 = 9ad5b632d6b69716bf89875b041db5d8
+PersonalisationString.7 = 98177a8f3e6a507a3b5b1b7f7870eb9c104c9aa4734398df3fd53af397078ce3
+Output.7 = 38d5d1cfad5004302a35ab1db30a3d1e5b372416a538fd2ac89aebd886fd1e4fea179c8fa2c020475b6ca3689c0bd9165553e559d4e69e9994a2805fe72740cc5c0361757565e8e6ce822ea6705e8babc9c7a435852f3dca8ba69fb0aafff13f9a5af520bb07cdcb294a731e089fa0ff34a90af31bc369fc6206608aca2d00c8f9f13ea6798e481e0aafee906539a715546a54a8a9bdff14a3f318c542f7442554be15dbfa56053ddec14320de8a2f0bbadce69324428e4f6dc4071329bb4d03
+Entropy.8 = eb5cdd42ed4773b75c2f4150ae05a22f912761ba6432eefae73bc51befcca0c5
+Nonce.8 = 000c53ac6e933508af6ff52eea37b551
+PersonalisationString.8 = 8e43ecffbab808b752d3c45c0581f7bf765ae2bb385ababb200ec157d1cacf8e
+Output.8 = d7e00ef43fa63f7663704f50ed7720dd84948937782876a88bf1fb393670d6e65ec27a0bc6a9301c17231d673cdc4d7083cb634703732012a4812ccca0e1f76886801d2113b3210c6e3bf15a7ee3c429d4cefa4c0fc87cf453fc7422939c29764f8d0b685a52dbd231410b890f5187d5e77fd645d7757f10e79ebef6ab52d1f4aa385d60440b4b9c4fc9c4db8880e5f57a743644c1e47a15d9b5a219bbe98495c900e248933c556a37c381274452a1a20282e17ddeaebc1ccf4d186ff3042946
+Entropy.9 = 59a0a9b8209a18b98133e9a7c4969122296e3ff2828f7b3524df4f1c132e0331
+Nonce.9 = 05b93b55f2a2b597be5bf578e1aaa517
+PersonalisationString.9 = 6b056e5c0d3820976ce478aa422fe508998b73b07d8a0e39b8d977f9c4883843
+Output.9 = 560f7c7cd24f94fb71cf128fe6b80592c1a9a68892bc06dcd872818a267c9a71acb613c6c8ffc916e7b3b17ffbbbead1954686e410d22c9959deff6d57935d8fe378de7a7ed5306118a5204eec12b3cd42ddcef213b676161e77e1c6b815c7241655ffdd63d6df99df3b446ade23293f6d71d33832127525ee133c8b4d9739d1f09ca51a860326d7819ce458e453b6156e8f78e4fd0674fd0c1c13509732e7fe00600ea2bbba6a1c8176430a2d5ceb75dbf42fba35ff21aa94f3b28e6fb226bd
+Entropy.10 = 4a347a7f16af01da9dead84ed59f4cf5ee88a80b0a1f1adc2a3950af9d225054
+Nonce.10 = 4ac8f9b859a19190043e552d8462ff30
+PersonalisationString.10 = e3dea246be6832fc4bfa5d33f51f25fdf4bd3413c69f3203747db51ea51ef9b2
+Output.10 = dbe0b8417996f8096bb3fc4634f673eb748e0fa66d50fb4f2af703080c8d214b35d302852ebc37b1b94615dfa22ff2daa50a7ac4b3026ac9a12dc77585142ae66520ba66642dc95a6adc5a1443c3a5e043009dbb3470d1b32abc77c035e1069c4807553f10ff6b148505ea4aeafd2e37adb2068d69bc5229425f8114a693413d8b5f545424fa04cdae9bb02adffa1af6999b7b67fec536c70c1880426a387efb67193c3173315fa9156898d9e24ab71a0000ab1b1ab3475ac2607aafec922f55
+Entropy.11 = 451b3d6e11a8f91912517e8a665a7c9fcfa9ad540ca57778280c50ace87c7dad
+Nonce.11 = 148cfd56c82348bee96a572d3ebff728
+PersonalisationString.11 = 862533cb4031e95b7ef8a05763f2566bbd51bd2019e2cca9c2016672fc6bf2b7
+Output.11 = 63103b4698327d4dc418388e5f2216899b2e46fac2adb002beeb940d0ec25b1362d6b4013a0507c2d8c9d68b8af61e3d53674722a4ad111950c6ec59d03a9bbd025b61d8c0a39c2a01a7d19cf26c1cd4c724831dc8f61ec77fba616e6f2fd336a39fc823788b96a89e219e4186367e91720db0cc165207b92db064c71c8c14dbe8d1135cea6c60f8fbde17b44c8416875551fa616a3290a8d0ed4590f0993534d223e882d74815e0facb0859af394d566d944bf220655b978fd155c6a6b3b3d4
+Entropy.12 = 77149d1581e379f92cb5aa34096a4f15ac25967e35419d4a5e91fd416930e791
+Nonce.12 = 7912098288b0bda5d195d0c389097d61
+PersonalisationString.12 = 861b9a1a2907805253ec3b2d3e87bf3fafa6deff2ba86be3877d3225e63a73d4
+Output.12 = edb878d87d903b9ded63158a3ae7e271d3f6cb454de15abad12ba082768123770e510709de531dd473f2b9bc4165a6946b91e5cddd15e7cb4c4e8d635b3e75494e4046913d8f08ce36b9468b003226190811470827ef5efbc4a90b4817a6f4767846a8516066feaf63c95bb9db8a67a744b7046a1e73e32ba62526375b5997d305082675ea0164a25df2808b70b98bd1a5393cdee448a400e3e6a066fd566035fa2926cbd2f044714e87bec4ce7273faa31d68a30f09eaddbfae14e45e1f2264
+Entropy.13 = 86aabec349d1c0f2ab21048228c940f5a06db0e5b7a6c8e2ebb3f2c607afc2de
+Nonce.13 = 1f952b9665ed8568e555aeca2e5dd84e
+PersonalisationString.13 = d80a0fd76fc5de2e674c4cb012ff479efb79b419167fb741585c2e38d4972780
+Output.13 = 8cafdd5141f593062496f7c9f401c84cbda10e5498cbaacfeb3a25acce4427f8fb0335b9439ab9e954b6773594b9976a70b1d2234b7a67093a3d75d0adef3b7cf192c775b850b978fa52cac4d2d9412b22cfb8dd25b03ffd7fffedd503c320847f934db95d680daf77ce351d473304c2b29d6083ae854fe6d9db87d412d780d007c3e72ed84fe2f43f00543d76a679bacbffdf21e3f1cd779a603d6940c892cbb27c1afcdead292b1b0f0943fc72e60f60aa4ebb007d3b62d81611e5f9179d53
+Entropy.14 = c0b522f46a82a6968e16c28d2dfd4c425411914fa4ddb7402612489624860f16
+Nonce.14 = a684932ea2337296cc3d150174a47ce0
+PersonalisationString.14 = b2c0af9038c2ef79ca8263a047bb9293a44ecdb457fb45945996157dcd199cec
+Output.14 = 316fbc32ecc1dfa778b13921b1d624f9231c0ecca03e17fde750b1e31e76b1c330ea5bd62ca76150f231ac4aa96b06f845db2d03b65cdaba4c160b288a121eb144058f65a751e22151f91b90131e6756356e7f90d880ce754cf965f439189eb8bedf86c58e1fc2751e65637930c42552fdf81acfa1d4515ad49dc532b2a10b2b11209425ed1cf43c991b4a7c49bf6e701990fddc420608d74c3636829e4683c4e77a8151708d82ef8fb81b3655670fd4d242e357831bc091f30e6d139d5e5ba5
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 8d94e04ee26aa9ec7381eceff9dadf9163645c4f7c8692df7a3263f23754d315
+Nonce.0 = 90cbf3689ccbc2340920946316995252
+PersonalisationString.0 = 8227179c9134175c478821175bd8a5651a82c38c31cef5d2e49396194cf569c5
+AdditionalInputA.0 = 3da647dd626a59ff5c6039e044438f0539755948975f2ba97278a439f4d0d69d
+AdditionalInputB.0 = db975d66964fc83fa4b9a5b2531c2320d6215c4eabe8543dbd7ce91753e3f25e
+Output.0 = 03e97b7f175b8dd135c46dda67ded1b2548670523885d541bd79aaa44aea3fc95a197b9753b529320557dc2c9ca9073c952691ed423d12e9aac6f74e5055331cf9ce27a067da06eddeef444f9abffe49b0b3ce97e616409a18e8aee5255cb68addfdcd558676b476febd4a9ccefbaa8f55f69271aab0feb2fffeb5a4b563eec046524a07aa239c83da5615bd16494920268ac8a7ebb4bf8760eb872c3190ca692a8518cf6a8777d37a3ce3bf5a15128b7200820222eee0d31ab7f062c461c48c
+Entropy.1 = eba56435837cffd42ea2207c506df663675242879bec4ef87f8930f422475349
+Nonce.1 = 3777c3b8f9c6e090f8bfa8293655c80c
+PersonalisationString.1 = 8c2166f2d67e5b10211ec2717519174cdc5964281570325d0dedb450e5b68c8b
+AdditionalInputA.1 = 8ab7647bd61d94c2505c542574cfa587f92a532b0687a9389f37d426a344b1b0
+AdditionalInputB.1 = 4edd5708217b45669d85e5ca9dd1710c79108c2d42035ed7e5c65c084d6b1ff4
+Output.1 = f8d2c53d8f59a53c2e35c57f09a299fb698f43096e3eb5f7a9fc24aa9ccb2c0fd577cf6a55cd9fa5d76a9868b716457ebea58091c09bb4b111723771b8d9d8c8750a13b0af4ee5185a69fb12c0c79bdcbfd10ee23454fc5fe9bc667cbdd24d7e02a9641c5058de33cfc6782010d39733a796a166da98dd7c6ad9e353d72d2937b65bc9ddada85a16218b5fed05dd00b7df8e78c8b2bd5021c5f7ea9cd3d4caf1920616145374220283ce279dbe4474b1c5476d943975f4e673430fc0996d0a92
+Entropy.2 = f2f1f7659497a8305f35a8493a5d776067d3a9735d2acbcb7ac565807073c6df
+Nonce.2 = 70d09abdaa9442f9f503b77d14d25fbb
+PersonalisationString.2 = 0c2575f457bf117fb620a9ab2ac19d23e1f65f16c4948aee441ce970f8643086
+AdditionalInputA.2 = a086eea1b4e71120d1137816dbdac96faf0e013b23b0b467a8fb16ae4887f8af
+AdditionalInputB.2 = b18e4342246fbfbc2ff5fa0e949f0c497feb60627c53873a3a6ede850de15f53
+Output.2 = 840d3b8e9d7ba5eed72a0ee853d281307f813077ef32e8a3979ecbc249ea21381bdd203cfbd91a932570274fa46698534958bd4e0a83818b08d43dac55ab85fcb1e27c571fb8ab8638bd66af9d3c1aea9b1755362da194c2b3c9076746e54d16b07f29afe76358fd8bf9dc8498b3e2558d2a4cbe06c20473c82773a586c3adf2fe747ef2aa1febc6254a2b5e5bbe422c93d93c14684f8e119dd1c0215b49b5ede11115742fc5785f455227f4b68869862ce1787af3771a3fff7a406fac55f3a7
+Entropy.3 = a292ceef569f185d60624e0602a0f78733a24f4e84bd52f83e38769ce3727336
+Nonce.3 = 01b0a5c0b7cd47554933603d8219ecef
+PersonalisationString.3 = dbbb16c8fa840502888e141ad82f13a22d95780aa32915f2045554b29f3e1f1e
+AdditionalInputA.3 = 67cea8f68935466233a17e27994ba5dbec679e69d9f5de89b62ab5b56c3e2d1a
+AdditionalInputB.3 = 981094dfeadf088f477a2955c0b597a7cc55d17b7e133dbcd06192a7e70db4e3
+Output.3 = 8bd1d3d2d24fc79506d92a3f55a972346422ab86dccbc9c5c6e66cc925ee12721bf71a47809f41755b4cacf005b37bdd2821be33d44771119652fb43817c1d90f6b01e3ecb2e0b5920a0ee30676e0ac074975b73f01bfe2d7cf07a278b75978f1b05033f9ca9fd5bf99b73831f7b6a9087145caddf35e54e23704013a8de64d36cc572be3de435a3377aeb077295b5e1059823953784aad9f0c2e33abaf9250cfc798e38be4dbf7237fc232e27569a97a6223b2c8f0b67d2e770781aed87e5db
+Entropy.4 = eff6e452706343f00434e8e72dcc922f2e56d1bb97515e220d2a698e4aefa42d
+Nonce.4 = 95529017b166e0766c2587908e30a8b0
+PersonalisationString.4 = 5ef174a49fedeb83841be9a638ad4231ab840d217b052ed7b655ee9cdf42efb7
+AdditionalInputA.4 = be111b2165eb0acd6487d9b9004fbcadd09741acaefa5540461b842cacdae425
+AdditionalInputB.4 = a33d190998c427aa599a5ddb3bcd26e5397ad1f0a59f38278013e37e67449767
+Output.4 = 6174cd69e59ef2f720728fc83c085ffc9623775664f53de26bc6ca12fdb391aa3ebf7a638413402f0ffce994b2cf3d23fea0db31f1be94c0a7f277b3a3f4a35fbbbaf8a1aaa30a044a2f66dc748e7fc44f374ea4802288f2ede3a9931770050ea9920ff8b9811bc5b75a77bbad2ecb9915bf2b20647e8d11e237c538727c96318683544383884d1fe0df7c93656b4a27f51d2cdb3acef1d1a590cb013a8521d0173633194eeb1629da4de90eeeac12417b7b25e204ec5b53984dc233485010c5
+Entropy.5 = d40168bceadfeee0513543da1c9ae57ff427e21bc2a8c5def2c0bd0a94d11dd1
+Nonce.5 = 2902d6db86bea33255d165ffede91564
+PersonalisationString.5 = 5d4077ea9f43ecfd30f03d548d8563dd5e13cce00ec525c008ae000848f84314
+AdditionalInputA.5 = 91caa77ddba8304dc282324a706000ca31dea9f52ddf51cc943f222466859856
+AdditionalInputB.5 = 9f9fdcd790dba268c4b92054029c4c9a9a040fe0e3e674226687dfe2f6af348a
+Output.5 = eb8169d05935de5e5f382b31fc710a619dd0a7d572e170c6ffbdc15eed5be2609630f8b9f852f12dfbf46e0dee9badf48cfa8adc545e13d897d593d26a7033ac71ba5cce2c575d541b27aa692c6d2a2d51f5beb95ca75804571a8a4d0c1b25b1ac752b6a817bdf987342f21afad47145b9cc66a13f8bc523e8b5f5d0653c6502f004a6d7ecf5cbc96458054041eb846b9c089939aec1bda4913bce79fa7ced1f36ca7e84bff89490136b19d32d2b7932449c792fbbf6057ab2dbea5a57672377
+Entropy.6 = cfcae9e5c273119db4c4060400ee98d99b9c8fecb486c1e4be259eaf04826c13
+Nonce.6 = cc1f73e20584132668df526b5649c844
+PersonalisationString.6 = 48b13013cee0c51a08792d4d057e093905eb93e8880cef5bc7f6b94d88f04cbc
+AdditionalInputA.6 = ae81edf9c7c8ba49f70a4e2faf3bd7e06b443202f185d07cae00b0d2b5840e71
+AdditionalInputB.6 = d6fdec894b6478edfd196e085af5cbd89bca403b6eda394b1c98f77371449211
+Output.6 = 734ab88603d7c3daf500b25cfce81ad6d34e12204758c4bcf34a9edaf459290701110b7c2d5ffc8358f54632ec15b65031b599d643c876c5acceb8156bc79e16393e61fc0166f4fe8d97f2bb64fbcc927af6f75ea69ff3cc6ece185e87c28a6ab3ecd1cfc9a03b69c6ee76d8b7631f1ccb51691ff3fd3d4cf359a74b217f23bdd11549cf42a8637333ac92d2d4ba95fd5bbd0f4181e5af92f533987cc50867675a1ea2dd250aa3f30c100df6ac6e3fa991595863bbbd7fb1df32efc7ff6202d0
+Entropy.7 = 596fe2dbb26711a790e8feed790597f67a27877538aeb5f8d70a938608dae6d1
+Nonce.7 = d211741ca6dfd385e29f04cc4f9b18f8
+PersonalisationString.7 = 36eef365489d9440b98c6519a95160894e582d2537fe5f34b2367c873af225d9
+AdditionalInputA.7 = f745c63afe49b4452cf4e9d68dd5efc4e46e0a0ec61f6e18438316819add6d1a
+AdditionalInputB.7 = 6159be82b4f11bdf504a6992d0a57ab1d8fedafa1cc5d43a4bae2a1d85c08fb4
+Output.7 = 6dac3928f926236148a6276b7f0ae75f498866ac9cf5995bffe6fbfd8fd7138b16d9f782e84115833801d0995e15f98a1133e70631e1dbfd513ab7f8ae28df5b27512bcee1984e8ac0943bd04cabb5a6d5bbee16dd17887f36d5204172316b35b82262104eff5117d36c04f5bae34e622932eec1b1f1fd09d40cefbd34a2ebf74a6d2b59b9c2f17ff2df640dfda5d9c4a7d4b0bb35d4da05e3d48df0af68c57ec89fd91e8e7149a26a795bd93f6265844b1f3d57c76be6f369d91f15a58ee14e
+Entropy.8 = f3eaa2913258e0130f608f374be741acd8e546f2190d99caa15b7061b1e04c4d
+Nonce.8 = 081e8f87e462f2ad4073dc1cc3beb993
+PersonalisationString.8 = dbc1512f971801a814d59b40cb8c3bba8699719412a317181fb8abe5a32357b3
+AdditionalInputA.8 = ee55a9905a0e77cc25a670484b72018843eb0dad7cf77b05f941af663ba8c15b
+AdditionalInputB.8 = d935e8d13f0c32b6fdae7850d4f050aa2772e5502c7631c11f7bad0e5d1d181e
+Output.8 = 6feb6ca54d169de79de3a3a077b1a0b665cf9d4197b737e025891a0f743532ac88728b4c2c9f54e6e8fbbac29fdf7d448166a382cfb3097183e1b7c2508793713ba0430f660b58564a0c6ae1c408861a5dcba1422baed032b792f3f36ca3ef9ded9bf8f9e019dfceb5a2d2e875c26c7f2cae8da63ec009eaecc55204c58b6bbd0374e9ba7d10522edc52f6ba2dfee359bc947ebd7fefb28109a7481a327ce0d01d838fdb5818b9a47902c6687f393494a11f3b2cc8232de5c9ba69074facacc7
+Entropy.9 = b9b962a5ddd44b4941041b1ea74485e249897dd88c0355d8303a57ebcf577209
+Nonce.9 = d83a4e5373bee5a9cbdc560f5171d1f4
+PersonalisationString.9 = 682dacff9c2eb2f300173c4f13118be59affcede0099780e843e894e4ab5cf16
+AdditionalInputA.9 = 93b3e104230bb246b527b671edf8d8d9553e78729533823839d59ec84470ce56
+AdditionalInputB.9 = 010b9610d7d10a4503b309287fad7b06cc16f9a03505c3454debeec9f7f06559
+Output.9 = 2ebf81a2608c2e9a0abb9de9acd1d4c02d3a03a0128f0b5cb757c4b189c8c93d63ee515bf1c625582371ad0a557af695ba72f7e88175bb71eeb96a75371b401a83df8e9873ee9002dedf352ef48403dd7035c7dd2b41906286f6d98eea99a142f50cf3eda184c0e54ca2735cb68427dc1c02072ed3c4a8558be39fa2c35399b2283743549d0dbcc0df370a486edc76aff8ce5592903e447e6662d1185d61e11db98daf5fc0a779cded256bb6c3620ef5f3ade3e1e5892c72fe98643345484984
+Entropy.10 = 561c3c79a72e42f1522caecf2af1873ad554b57d18c2c4f6c44648e8e6a48531
+Nonce.10 = 42ae3285a5102e0ff262ee8c9544b6d7
+PersonalisationString.10 = 84b6393ff308f55f803e33e36cb18f2ad515faaf0acd961a541dfec1efe6b75e
+AdditionalInputA.10 = e3bc52ff5d1c85f3f2e5d459a2e475836e028ff1f764d7797b310f52d2f95743
+AdditionalInputB.10 = 2aea6c35e008e671a5071b08967e7b5d1809f154dc71073e3c271bad6d354e83
+Output.10 = 67e0ca620571236717abad4346155adee7f699e6cf8034ea19ecdcd83a0548b9afe354d9c4cc75d691acf5b0da98da343ed1069cbdc76895b95f951f5c12ae98fbab55fb210defd128ee8bfc2799c6f1e10cca8c5c7c7b605419f701ab03af687bd3e3a02f0ed7333b376f46a6ec2e27d87ab0128d7ac12887eac26fb7c323458f58b85a1c132ef1a47e1e0d2dcc7f26655a11add6b83c167fc3a0a7587ddf8fb0b7ddc1f1e0d838fbfaa0155e969d513c4554229d47313a19fde80ab61ef5cf
+Entropy.11 = cc16f7c25b9622d7cf01aec7f9b591ca7c7cc632d406ef91274ade219169863f
+Nonce.11 = 554538c7cfb05406142b17614b3534f6
+PersonalisationString.11 = 18a5eb7fdbe463e62188e7f101ded716a6f931c98feb0c591ff46c484ab37498
+AdditionalInputA.11 = 072073aa01a786bef9e8683d459ca1ff801a783079e7b84c8873f88fbd98dc97
+AdditionalInputB.11 = 6784e0a93ab55e76df32eae827a7761b07b67d0816c04874eac024527ee5fce8
+Output.11 = c8eff9f699bc3393cbe96f4c0b16f4101647e0b04d8342b45fabb372e503f7f757032b3383ef3ebd135c934d9fb5bc9725d624fbb749485b4a5153259e85f66ad32fd780d7100c085086e105d2cca9e60de6f78747ce459ffcd1c607f68bc884bf910cf95e2abd960b635d2661d89a13e37745c10db7f4040d20bf36719b58cf89c7bb4e53b4392ab890c8745f6b26201ed341494cc398b9652096f69fcf512dfced15088842549e14851922e874521b2dae77275261a94c7ff096ce93598fb3
+Entropy.12 = 85d542f5f5d5671a1f9bb22a9d95b6eaf56556ed6130f4f5cd301420397a8286
+Nonce.12 = 8434d2197f7cc2635de79cd20588d10c
+PersonalisationString.12 = 1cc81c3a8170b34f9f4a562749f677044dc6e9f5e1c717326a47169f91559362
+AdditionalInputA.12 = 8e0fa487fe56900a3fffdf212030506d4e4eeb2d033ba660a656f10a9f3db146
+AdditionalInputB.12 = 2d5532072c4d5740802472193b51cc282add5f191b0464349401863d28ec4ea6
+Output.12 = b11270c27b2b9e709bb64bb5bdacea40d8cc15d4ef38a9bae293d4b521d32661203b2188c131dfce2d8135cd79ae4f5c08f1e5a40cb7ad078936e2437f17d3de86bc6e3402a0c63f660766ef5b7e7b06e4fb05feaf01d15be98f002b7c9a9dc88733b1e9bc84d2e74af30ac855b78e105c325355845dd5a9548a7ee7f8afcc37907864bc586cd1a3635840b5a6ebe071d34d7d0688905e5a791920b8f66f257d3cdc4999bbfc6c0df5b4e259bb3cb0795e005cbdb35d1637534dca076b5cbb27
+Entropy.13 = 253faed3a47cdc300773d76fcf43ba1d932639b6db6f0780f77631e6a70ad36f
+Nonce.13 = 97e289fa6c6511fef80c7644d0abaf6a
+PersonalisationString.13 = 4ddda6f3e6d726ea0329a011c0313b6683979a7ba8446e85981d454d3ed900c2
+AdditionalInputA.13 = 330d6b5ed6e0fb830d5270234904564f2920f1d2a60476dc79ef2295e43e1a70
+AdditionalInputB.13 = 8f1f018f1164c4e8b05386294ac97eae52824abe0388ad1bd4f4dafc2eb05fd7
+Output.13 = a53301d45f17bc6c89017c1bf97587ab31f4916d0056a2961705eb8d0d6024b8366a88e604d1883f9f530a9f4f187e1d3e523cd7a03ad86e2abceaf59c8eb279044a60307bb13c1660594835396fd3852deeab551b20dc572df37e0689b176812aef1126a3807fa313014a1d24e7a456bded4b343c24ee5a3a01557f27e7d030e182a0a285d1498a577c5e6b12bdec1e9836e3692c228f513e86d7e95e3dc1065d08a0d2bda698be78ea0b2b7f6a3497c0d5ee6b81c94586beb0fa027a8669b7
+Entropy.14 = b2e7ec92eefef5d32b32892d3aa2b65e01d305fd4bc1da9a37604693529fbbb0
+Nonce.14 = 1c2c282e101c24cb7a95d017a03ca680
+PersonalisationString.14 = efbb618c2b16d52e4e47f557888e6e035717e71b1deeec604eddf56582649251
+AdditionalInputA.14 = fa32817ad83c85b594976eafab28fe25c45aa74d0ab4750b33dbfd88361f9dcd
+AdditionalInputB.14 = 2e5cb3c7c9503e019b3383eb6264d6000160c3c99ee5700e7a92433da1c01f56
+Output.14 = a7571c1afd3d1dc1d3b28dbab54fe3514a0ec74ccf999376a963a3820474cdd67b190551ad5b24f4376633b4964490f79a94059a55b967f8dbe58eb20d70f1fdac91565bd8daf5223abfa13b132a140acd33e36f29fe1b107f62e6c45a679247b80c0aa050f1c2d3195629baef7422b72fb3cfbb82a2e4dd1966b1cc27b8e6df1907fbd6320f25594e1eff912cd9685755473b908e06fd30c4359258be0580e6bb2f986b0450d53fdbfefc3bf06c0d80648800234100af755acec4f809c39f3e
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 8c801881eab7c4ee266eefdfe4542c577ed822b8d287f9b505158b57aa4fcd45
+Nonce.0 = dd30c873d352d24610b55fd3469bbd27
+Output.0 = a12284431482d6dc016df53984647576a2ae619026786936e8e8644da80a2b4a81dd49e4562ba0e3435c199967ae9084fdfda4978759803d60f3eea6a88e32d3152f02a6f026f6c5be231bc352c381600c3a9c98fe371b460128724beac130a57b19d4f5b68d34054fe4fea076ed5c598f78f503b1cb31d445c93e12458f9fc31e6732a1b212105e438c8700eba68768b084eb3bd1760aabe5cd8b31175b0bdb09038da6a166c8f93552add13ed047b65c54d47b4b5568dfff2a3bf3daaf0fab
+Entropy.1 = 4227d1d20f16951377c275cf7ab4598328045c736b43514e39cca65741a37165
+Nonce.1 = 058acf3c8846fcbe63c25f497082b127
+Output.1 = 08b00d950dcf31df0f82d8831917fbe5bf2342753ff1d0bf0988cd9c9103d607967c525b11822f65616b1d5c9db40dbd67e87eef6a02575f7597332cca37e0ba63aa98e1a42e26fd84cb910259bd758d4e5350abf6764f6c2fcb58c3a9c33523b4d4920162393203529e221b25f0e1efa64abc09e1c647af55ee29fe57e744c206868b13124e7377ee201cb6847399bb2c2a209a050a1954a7ec43a8397ac82d586230b8cbd2c58072eb4a626aab866f39d4be2abecb9d2e8bffc696ced23fc4
+Entropy.2 = 979283d921c012117037d6c450e2ac3dbf47fc5ff8ec935aa2b2ca44c5191c26
+Nonce.2 = 255dc3a53398c95a36ff5ffc63404653
+Output.2 = 1e7ba5bf07492bd8647b0192566e3614213888b895ccca23fd55b398fcddbd8da06b2adf6a7772eaf053124b8ac6a88f48e2e6e9680cb1015436c4930390b1f0ecfba2bfabddfff9b550251194562512f0ea9f6d589857195d55e44aa4f8bede27a7304403222a9eedf9eec7e9927defb1f1338175afd9d7d1b2a4339262997f05b58bf589faed4555102633dbae9010de91844f532d4d944ec19a33e68afddd77a81617476d7cc6fb91e65306373f369a44107974ee7fe522d3e81f61442fa0
+Entropy.3 = 77dd9f622715bfe6d98eb9f71a999589df32fda44abba1ab3d94aea5bd01d1c4
+Nonce.3 = 526097f9e7ca8c1300bd4c68641d18b7
+Output.3 = 4873dcc448595c5be71a566deeb53c83696765eac2ff61843a00f9cad83ffe062632788d879b30a99539a60535fbfed447378f9ed14daaf5e3b2e8a35e539d263810d5f3d6b2f3d21769aa1b338069e26ef91c4e8024cff2c502341764b5f3fd3c2f6c86f30c2a8b528258b81cac6c3a6a1410e9abe633944ae3467512f84cf7ac2c4fc76992dda5e2bb87cc7e9136bed5d16df4178778f21956733df3775453098ce3ced544935b4ac8d5fc7808c1ebd18cad0362fa6b8b421f4d32415995dc
+Entropy.4 = d84eb51f6f165941a8bf40ba46cd1ad5fbb785b051fe4c338e29843517dca6f1
+Nonce.4 = b1915f5effd8bdc4af8800e15beb6f7a
+Output.4 = e35734999749f558bd177695b2694ca8870f4dea23e05b167af5ded6c832c6b79e3275eb81f84e60fe493f175bb45291818e7e74ea7c6f18c6f442f75b6365be04781e3fb0979ca35d04fb12d4484c95ea4edcff739ca22010766eff7bc61e465028fd61f7ab7279f2affe55d3a06b04c9da5f10ae940d3eba56e8b0086d15c69ca4a20fc1a3a7a4c46941e3e750e6219e87ab956b1d9194dd0c61f22868b6452ffcd9c555337f8e5e515e52de90937f1b523edcedb1b0102e6dd0ec649fb116
+Entropy.5 = 51b37bd315ac0678725c9139a78ce7ad7d23359f31d015add589f91b61f39781
+Nonce.5 = 2809ebddb9fb5798398560a9dfa1fc51
+Output.5 = 93420bcc789c6e870ad5f924fa3b358817b78ee883ebefa6fd106d74a363f908cf9e60e24f958a7cde96d0cec8000ef78d056300404f1e02c10f1d2471fe3dd6c103f5dadeeaba37e88bfbb4f033c5aca2b2dec35b10c8d34d56bd86459db87ed45f0ddc85b2f52e4f44f0ce81ca77830ffcf5694e3a0d481a83f41147808b30c6f2a05b013f0db1d4e8c9faa8e8ba1d68402966f2e650fa613b3aaf6dfb07afbe436a527a7744e7215fcccf0b3b6ebae0b4196ba8a7541fe44573c8172b0fed
+Entropy.6 = 203b742d2fbd8ddb86b4cb9375dbda0c8ed21a8ff8b20c37f0f337d1c714d662
+Nonce.6 = 4d1469ef82e38b7e8c53a2d288fa8c8f
+Output.6 = b612b61051530714138bf287ace0d00d922add8e74e74daff67ae281915a8b0f74df894f8b3f577d84fbdddd268f4e47bb7c51378da7a59d46883c0229b220f5469c0718b39fbe99f7cedf93a0b03d3e14481422f1b3785e670e963046d017c1013f09ef94f39dd4cad753f861ff2f0b330c751e2143ab207c0b646638cebd951b4eeab42eaf43486106176496311aa4e1a2e10f3718ecc4615a94aade44e735976a79c1c75eb1b4dd899927f8db44dfc163da8a47c0c5f6517a016a0b42389b
+Entropy.7 = 8d4053c62e4560aa5eaff157ce25439fc719811cd8057a72cd14bc0359e1efe8
+Nonce.7 = ae0b87643123e790a82ae9f89966e0d9
+Output.7 = 86ac147e7d0f32d9b242a838460c863f4786dcb116024c836007af4e322c21726806314c82a14d2a9ec396d4ab30cd3fcdb5df21c68af1ad702d6885a977b73e38628d391f4b313a2941e26ffbc38e4196c7ddf8f7e3afa3f2b062dfcd8485e98f87a3943b9baeef17be6ae9787032ed466ee00919b60c288d02c6ca42300cfd8df6cd10d8d6a7eaba6fb4d4b7d74f9e2df747fdbc28020716755bfbc1a431ff8ff01e2564e9ca06a422a7fafaa87456243f967665ab28cbead6d07c9da0fa2b
+Entropy.8 = aa674aeb1b5da4b7c726b83bfeb4b1a4bde1a52a087ccbdb4e0fdaf87f484460
+Nonce.8 = 973fe67fc1b2b8877d1083a555ca651b
+Output.8 = 0c8195756f630eb5d3d98a35b72431b57e070fb1f4eee8e97f884c2dfee0e5645611dfdd2663085870b18ac7d59caf727bae7a8eb70ba0920ae89c1d826aef98b30e5dfd79bb9fd6f02237ee8f60e43dded18d79e27e4bbdb08685b2bd8c179b2e121f636063a911f01e4be98feced5207c2d665cc7478ae0afcc29690c3084011a050ec3829e32a7bba89424f2e2210feb082c74d5e4eca516f220163acca8422ea3db37d8b543c3726091a3211e8c57baadd18c12993e4ab05eddf2d76970d
+Entropy.9 = 6d8188fe3de5e2a5b04af343731bbbd2e3735cbd4ddb440a4c676498567b08e8
+Nonce.9 = 3f16ad4eea9e9b8e0c9923fc915ca4a0
+Output.9 = 9e6f6b2d7a1eab7178442820bc3fa72e8a3fe412c99b5f05b7394d866ee0fb1d264caeba7ba178bcf6c3742917a2435cd89863fda6774ce49c3949568022f2129de240294786ecdc6cd2ccd4758bb2e2614177baa8402d110f8056f22a4275aa1c72b7df820b8a33f13e21c7c1d3799c115dfabc1cca757d2d7903583025d75c4f233584b4d71ade533f426ce45b007d0aa7f92260f3f88436d42bd7e798a574ebf3aa42124a6e0fc1d46519c642f8e50018843067b7a986cab6bb2eeaa983a7
+Entropy.10 = c17f5c6544320dd01aab91b17e756c828c5e003cfb2afae7ddb91785bb4da3af
+Nonce.10 = 84b440fe338967162e348e7dc30d56de
+Output.10 = dd5f09c47e45da8da6c8e7237cbd0a7cfbec482017d9ffc3f9a6b78f0adeaa5b82152302584d51cd25836732b8a1027ca804847bc9268248f3ba772424896a0dcfaf1b1db5326fed41517a0a60a8034b0182d8acb21f819921790eb9942e8af0a4b4a8d91eb6ad9eff795a35bc9d3c37cb3fa6b484d207867301fad80b685d3e0d0a1ea55a3c41d46d5de62e39c725c31b331410d94392f8d9669564ab97cd79ed69be64695d8298602d64f3dd2e32b1bbdd5f845e617782fed2b4fb4975961a
+Entropy.11 = ab40718cc20345ca62b5b15b3d868decead7139f616db6629e7f16aa12162295
+Nonce.11 = ecf873875a825dcd78ed858f09bf2726
+Output.11 = 92283cb0871966ceb9bff4573b3f4600d87f6427882f4e47967ffcad8cbcd3aca7e5bd0b2c5fbd7286ebf26161322417ab932b063b8847139acec642b9b1cd0c8174b25eec9f8749d338d4dfba6c8b73b0926ec5e2f0547da7c57ead4ddb237a204053cb55cea76b2e30a103883bcd0f7886c4c27461a4a38dece4734cc70973d25059731dbad506a8007a1e05259b9882a0060ae86a274cc2a71a87fff7a583a3fb6a3ed3797c37d88b00578780f1ef8864a05f15f640dd9807a9a78ceca5b6
+Entropy.12 = f6445b4f2c2d4afb4e9945d88f32555bf58bb4f1d9677cd955830c5c888fb503
+Nonce.12 = 66549dcbd3f07c92b6848766aab11f46
+Output.12 = a4699e29b2e509247366a6ea8f3784b03c10da3216a59675a2820101b51d4a3551fd5ecec7514091024117d6bddb8c3fd5fd499baa941ce1059f846f5ce5dcdb276d234521144fbcc14b9d7b457a13c860758aae61cdc2c92c520c93b0fecdf5e8f329b44c6dc3cd3e2522f5f514f18897d52562621bab6f93c93c74c55b4bc98105120dcd80d0247779595a1862c52d7cd701f203433e04c6052fc30f6620eb1a4ef9b63461f80367174accf8db1ab416687b0aada0da7c8b9ef954779f55dd
+Entropy.13 = fbaa77fddaa6f0b737902459f117ab739494b165136ebf8d75c00a12384d363a
+Nonce.13 = 1cce6f7b6dbe8e0902f6790c782216ae
+Output.13 = a47c6f2e3699f5f89700a0b0908f40b6a6135a8041d133e244d968953651f7f70c1b2c1a1fd93b1de3f863c1f97067716a60c0d418b10f70e21d641f9d5857d949819ac9a5dbefe5095e8eaeffb36b1e6d96d2d53d7eb11a60eefe6b3de99034b7f9ff58258ce1a9164bd5e928c7e1832cce094b7fbc431144cf042d2a1aef7101a18e52d68cdcd3f46f9e4239e0b312033d8baf5316183ce1899fff4b51078fab6e721c4e23f911ab58fb68b6bee28a23a44fef2742788448612dd77c8a4b96
+Entropy.14 = 1e1cde834393e00a2136b8924be5600c8bf59dc2d8a9eeae467ede71ee7b75af
+Nonce.14 = b6035e96adcb7e8f2e17022e2e4f39ad
+Output.14 = 9dde9f29034b6e784be24fe600c39b091568afb4c40c8e05b8b7dc36ca74a1bed38ab15643ca8c6da2f5aa4b7a6a5d5c9920cc31129c84e2fc9b865b3f30b698a143189a3f3b692b3e5641499c949e53e3619cb112f42046a18d5d12dfb3c6932a6a829d07deb17b799519b81e961ff293c0b2d24b629fe906166e330135e4ffd00609462f0f9b89a110084945243972486a0e1aedb2eceec02d402696c89abbc950dcaa72d7b0e00ed8e65c3e9eb1af7535de2da728f901650633242b3368c6
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 5f085635d4af1d4216f8f7475699380378affa49cb7c66ae95061c2ca1f53b85
+Nonce.0 = b1317464462811438bc59ff5be27c06b
+AdditionalInputA.0 = 0f3f41382fe8f99ea64ffb2edd5c826be69898a519458ecba98623f2e2400edb
+AdditionalInputB.0 = 41c6f4a8cc860a22e1545555cc50d8f8ed132b3385f7b8c1321cefdfe446051d
+Output.0 = d7dd1e0d38a8e52b988b7e208f01c3ab4f9887ac645df9b8c140c3e63cbaf6aff412057bd5c3e1544beacff77c3546085e24b30b27cbfca573394088be592df7ce4fe7918839476e802c97430833501a533ae69bfc58c5810a5691d7a14b0398d92817e24881dc6dcbf255801b629dbbd7ea3ee2440a0ebf1e762b71f44af8c0081a711818f246f1e0144416ef5cf56369c8b96f20b1ce3f2da20622d7fbec28b29fd09d24a2a2d2d2d56aca643340329a2bed795a9adbbccd40829661c301a6
+Entropy.1 = 5fe0188f578f6900174af80a2161d1a572c470a147d2441e4fa99dbc2178e8a6
+Nonce.1 = 06ae3907f4f7d47311e00fada6575d3b
+AdditionalInputA.1 = d6f0387df3fb9d121a7e6ca908851bc1d43a3020ab8ee04bcdf57880f857fe26
+AdditionalInputB.1 = c10ae00ed2e53c045f3115ac10a796d3419109d8a0e5530413c179814925dae3
+Output.1 = 86e0234d7d7e783d39d472425e770f62e9b3cfade4afc770bf1844b8914735a2115bf670af0f6dca2ce045eea63b951ab7e0763237cd1f98ce14a68d2fb653c33d6ddde96a65fcddda94b738c411a73b4e976b57abc9c1a77de67242f5ce00fcb23fe7fc6699ca250596d3e80757c5ce588d90118e9622b37d20e9dd259840dfd0826aaa61958d8df5cedb4fe2beffccfc42c465630341464320bb7a61c77a6e51b6b7f9f0e4fe0e518a5aabb84167dc31403113edbc8a0aa89c5a49fdff249c
+Entropy.2 = 04e8408191c64461062e513951dc77be457b1bc273e214e00dd3fecf853658d3
+Nonce.2 = c911660eb58098f1bc08bdba56e911ad
+AdditionalInputA.2 = 976e9987da9a03ff06e1de2e94ce4d777a09a7eb3afc0c46fa357e1ae7c26a80
+AdditionalInputB.2 = c21d79a86561879b21e01d33e94a71e230eadcdb49779a574e3c76598d2aaac6
+Output.2 = d3f33737fd112a8c2b6d674183f34317a7ff2ca4196982f9cba04aca0cdc3a3d2fce3a93c6ffee8439a7238c833572f06521c74471b31590d5a7cdeb6d2fbab57bb3798713900d67936bb265bf9caa5bb833dc652897d8ad052b06356ba9da97f37edc396fcadbb1b47632af0261b4df287e801388b43133d64a93fada91d4eba88635bb00548d24be99f2f480c3375378279b16762ed10b5453e2724a8beb298681dc90413e706bdb152d08d2ab633e9dd8dd0e63f5d47075dd4533dbd5abfc
+Entropy.3 = add2fbd036fd0916cdc65e0ddeb1d99556e09a8b0980e79119c088377668769e
+Nonce.3 = 09b3d33f8b126cd00efa559476401f10
+AdditionalInputA.3 = 0cf2c8210a45194c20f2068a6b1be73ff278418cb6f3ab85079e147b1a2e3ea2
+AdditionalInputB.3 = a610f86fd389413acf796457d2c7e285393feecbf4e18285cf25f4adbc839732
+Output.3 = 7241bce7a3de33fb091d01804888d245396072d8f8ecdb6ddcf535a745494260a5462ef9fe59002b7326c47d0cddedcf2d7f959b790a8ba4d4c4948d2c1c2a95f10c55beeeae785e863a252e9616bfda5c0c3ba3a5f3bdcecd4e3a4ec7488e76f7937797277f1f4076db53d35f01f52f864d319a504f3b6402865836758410b29b68b08f1564e83130f799cc1ea5df3c06d9744e4b78ef8386d4bf03d24037054652faea3fba22d018b868243b47de682105b004e2c6b5e3b21c6a0729ec6cdc
+Entropy.4 = 87d5f880f80b99890342e59d3b85f80393ed0775a8d4b8ae7a5bf8db9aaddaaa
+Nonce.4 = c0feaccb3fcdb3054f3a6edaed14202f
+AdditionalInputA.4 = eb93ee435cf552c75f0a0b86bdfdcb3170e1163fe433fcce0eda1a8fe2dbab80
+AdditionalInputB.4 = 6f57145a1b51b26fe1ccf12697fd7d23c4d88d25d9fb3f5cad111bc75541d6cd
+Output.4 = 29bfe06b883f6755510bd5a3d0dff03b738b6e9b6ed8404eb414d216b764b80cd4188e2b2464fc38988bfaaab14a9b1f2a606c5f08acd65afc998689c507e8ed2ea9be294076a6b10e9d265e816a4cfa696af39ae21800b8e09f36b767564cf734ae707e5baf665a21f48469b46b8b538e977ca3e9f18b30ccfcd59146826c54c0668f33310f8d698f2d4a4654a9dec2ca84d5039794472c252a45be06b321c013c8d527ec5c49f15894808dc337806e2c283637b7e6276c6f4f5675de54366a
+Entropy.5 = 09e3acb7d872891027598067a5814755c4af34308df758da89913938fd298024
+Nonce.5 = 0f23249457b52b73fbe00f9a77ef1117
+AdditionalInputA.5 = a54d0108d940df646b44b06a73781d370d62785393a25befbe8312d117465d3e
+AdditionalInputB.5 = 6cf2ee872895735082301bba9e45a0dcfcab202fefcdc1f0a88bf0e825078139
+Output.5 = 978c96e8615c0d595bc521c6e59ba1895dd83f8e62b3a689798d7840c4b904e6cedba7f9d7996c20189ca1d5490b2ac49021a7fef21715fc1c2f71e9f31897d4151b5a9692238dd3d2e802b201ce72e2ea6af7464063b2222eb618660167f15ff2f781371e2dc4ef7aad1e78163bd69125cbdd300d001e3e6d64c2e8528fabe32becc906929692f6971db3f9f987df7066f25a440aec2c9e0019a2e1298a279fb20748517be723c19c613192dfc4e390dd49f1f31985208460357dee01738475
+Entropy.6 = 8d82faa2471301c176a49034a3223363e5891be7bc3c35fdca216279f2b9ca5c
+Nonce.6 = f8187460d3724d6233a3506b36e8c7c1
+AdditionalInputA.6 = 007f8ac83c3208948b0011d70f95db6378a3ba7597d92856a75794d4db2a119c
+AdditionalInputB.6 = 3b914adb57d88bed5cb70f9788a5fd8f4694d0fb977bfebe60176c51e1f70246
+Output.6 = 6c771ec00fa60496cc3684729b7054b2e539e285671bc5ab3f6e3f8b80bbbf178926b36d94cc6824506e9d920cb9988bfd025d4b122548609c9d9b306b7ffa0f6edcc2278cd8c536abf544ae2d21df23483765f8931e2065a3a450ee718a32e15150041d8dadbc1c756948d102176e486b9e7516e3eed1d201a63de0a9a3e3f2e5c4751f8d77c3be7275b1c8aff401e3f45c78b9c1fd6347c349b530861a8f6abc8570cb10179843e422e0e1e8961af24107fd6052526096997b9609499e499c
+Entropy.7 = f933b5a23efa112d1e0e93d391aae55015beb2468786929d9d1d45c2b20ed6b9
+Nonce.7 = 7846542f383c388356fc4fa1d915d337
+AdditionalInputA.7 = 2defa8187afeec70d0a254f34f75e180eeb107f9401739789fa57adc7cc211ac
+AdditionalInputB.7 = 194469e824ffd7db69262cb3a064d8862f82abc54f6bb10b874ae6b0893d0baa
+Output.7 = 81c5edd27c390ea387550e98c73c8ec9af0f433ace2cee681f340dca16cf3014db120b5064974aa0aa916091259d4c2422c1be79bf599df4adb5478c5e27816c4b7b3ba16590748083c1f26b00a732ff1df704fa2d07aff4746aeba53145ddb6078fb91734a4f1716d1bb91a4f1dddc27f0d3ab7cc310a90efa7fc39e8ede8f4143052c503731f4f1cdf825e3f1ed9c457e38a5473808d3a03e237c68764dd32a6d9667201a4e004fe072be3de158d332314487c2c619a483cc7a900119d8f4a
+Entropy.8 = f4c916fb51e2fbf5237b4ad80b8fabdd86de22a4c7fac26f53b6082a62230f96
+Nonce.8 = 48fc31900aa0163f4a22ebf64d31912e
+AdditionalInputA.8 = dfabec14fc04c54c3654e08bbdf9eedab70078fafec610082bd800ff038b62e7
+AdditionalInputB.8 = 5c5ddce832d692e3bdea8c72eef7276e3f99bfdcabf5388f4d3fc709bca1320d
+Output.8 = 1c65ac44cd9c19e50e467649fc280903f176f37f3a870b9f7bb30f173e0acc736e8f3322cc1b1540189ced5a82b8b3e716012fba421ef39918de623f50bfc697abb56a034ccbe465d3b39cc6d305ed58eee98c539d7e77e6fdef520ed54b933ebde3c028e36156bdb9b3612fdff6bccc0c4524e3d8fc12439ee4f05de67c65ba35031f07100425778e9b9bee56e32d66f880cbe95e4af3050a5f61dfb86db936c58df7b2b737a80ffa253adf4456801f2ecacaf7f15068a685743be67f86ef29
+Entropy.9 = 460fe13f8904f0e13caac6d00ee0605a74f4f8d58f8c9c6cc95fb94d4e181e4e
+Nonce.9 = 32ea29d7fcb4562e69e07a8b5c8be146
+AdditionalInputA.9 = 1cfd579a0a37f5c1a5555f4604353c57f6e10a125d2aca12ff0185a884512cf5
+AdditionalInputB.9 = ae1f19a9c43af40edfe61fbb778c13e72bdb2005d819c6d906d643393039b260
+Output.9 = 79c4e16ea48251f6738d657b537585712aa4d882b483010b9f92dab4aa749ae29db2081e6d04a5bbdd9a4c5fe61cc4617d9a16fa815adcf530be39d1d3ad843f3fef9b6299fc58c88514521635cd9dc8cfc26a7973369cb090da50b6a1d6cb8c50e2e0fb90e96585a974edcee90c4c7c6792ab7dc5d10404ce31fe55fe0a0377ea13574e9ea8e9cba7547abc2432126d013bfbc27dd7de1a46241e2e15a85b7776e082b0c5cf76171a8f4a08dc395695feedb8d46eabeebbc2e3da07a405fe6a
+Entropy.10 = 725d56ede85e1f1239df7adee388edbf0c69af3df69b60a250684b6b4801689a
+Nonce.10 = c156af45d6c551212eea7fb6223a9c15
+AdditionalInputA.10 = 3c95dd25d31357eacd11117e3a44abdf6f0d3283ef16a4bdaecd124776230919
+AdditionalInputB.10 = 7d7028f8a4bd307d1cf9e113bbac18bdf45772953190cc310080580d9f402d82
+Output.10 = 31a724c055ff1668215946ed5a4b492aab198851280ced1de4f57871db31af69447086eb0b9ed1ffe77b771f08f67daf1c9526edcd4d4294759d80da8aae559590df5e49e0e54e53cfb2cf57316c7187af624fb86bf6fe44014b0579dc5f7f6ac3c5b4c95710e3e61882e8289e17a7081d0710e90c6c00fb2a295e1d6a1678d45ba12d4e5a039860e6d22c20328f4485bbf7737d57667acb15df6f3e010401b6ac64707ef6732b60cbea347a9b229547312ae90d701966e359b7980e9e2405ab
+Entropy.11 = 708dc47c4af4ccd27d82bc7ab1da9a76f2daec1bcfd3fc2398daa0d6bd93611a
+Nonce.11 = 638ea30a5e5faea1ac2c959bd3c63f2e
+AdditionalInputA.11 = 5312decf4e3057949bc97e2d159ba6a6ca94aad01b6368b821a1e0708fcb88c5
+AdditionalInputB.11 = a05b03f26a49cd5e5ccf72e18b1542c7409c70f89b171e0cbecb260fbfeaac4b
+Output.11 = 1f8d39a247712188d1f7fecf29897c5c4c4ea6a13f1098ad7def578490e1051613aacfe216805b63a5164bf34b67b4580391825b3200ac500b344d10030a965df6df064df95b0c1313acfce73a1b93a6994c833414b4b3b8071b96988121cfcf4c89a03ac16c5bb189dd12a9d1a42d4463dac8ce0296bbffcef917b8403b85b6dc5b94bc1bee9a865283ac02afeb20fa73da4ef9f3716ac6d558f76aa8515a0980e75c189cb836e02c3a0b2fb7dfd9ecd525bc4bad0498d2076ce94882dabfaa
+Entropy.12 = a342fba3f7a2df8a8d25130c5706bd478998aaf8f02646824f0481035874568c
+Nonce.12 = 1a637cf494acb59084f600c18233d230
+AdditionalInputA.12 = 0cf52f8ec7f53445200308ef04d24152ade65f8bed4bbcb4927d64cf2a0e78bd
+AdditionalInputB.12 = 76be4a79c72ebe2d51dced9254f3cdd52ac20f571d323f1dfe6bbac829fdd740
+Output.12 = 9b631cb56d5b8e07b1e14111c8a6d2485e442ab39af4b22f4b55ba1a7210b90682ac6d552531e35af6d8f4d659eab41cb89b581756bf12173eca35c3b2324be8230778fbd51f1b5f42f2c1ec8d3e38ee13b60418b0c82a8690822b62f73b1fc689214e9a33a90fff4a8a2e8cdfe84866baecb6bd19984752f8f72cb5346d8a68b6eb0bd2e19d698ca6016e6819317f23a3038416df7e72ce35532aef2f1428dc6127213dc68c06b26ebfe1d7bc0c96fc89f7e75a8353a279f5377bfb2669a085
+Entropy.13 = db08f992d8ecb7037f7631342da4cf771f540d4c50a0c09d3675ba670ffca750
+Nonce.13 = c7972b4e81f028ad5d640f9e0995e830
+AdditionalInputA.13 = 4a2d43e01405bc9734a70e2f6fd343289c33ebbbe68ba59554d6f16344b2b419
+AdditionalInputB.13 = c580567053d8a0eaa818cb611adfc1b571308c0fb437cd84d11a4eb80fe752ac
+Output.13 = 20e716b020bf03816f6bd2585b03529c8c258bb583450d8c47b89a3706ee488e8e3d73429be19798c69222784533239b973942d19d048378a58c6e076d9e223beccc32722e097b3df774018400bcb963a3319cb4889975755c422fae5b9bf504e59c341354276e5decbf3c279a4cceeae6eb41f0abb6c1355938e5d0d865c27bedf1f33a1accb70c7c6fcdc97be324ee3a86b93685f640d92eb9458d3e888e273a66e30cd98f8c58bb88c1bb1c541a525e62970875e5637a59ef24ce71d8b403
+Entropy.14 = 0ba5abb25413c57b2d4a6d673bc03360c5ce1df9cc9fc8cd26f8ec0f4ec87ecc
+Nonce.14 = 35bcd2d6a138d4f3989b98b60632b7c9
+AdditionalInputA.14 = 7112823304b16377182ff9aba920c97ec4d4f23cd472fa9954ded16495d23f7e
+AdditionalInputB.14 = ba183a035635d9617bd71b59fccd561f1c78a7589c7fb3fedf41dc2e6d5015c9
+Output.14 = 94e577e5c4f66be345c6be7038b02fcfb4070d5bf74f8004b59c279cce961dcf5bfdce2f01e007790cf770587a68d0d24ef0fcd1a148fca6920e707289e58b81fa4a58b5a018a358d336a20daef30b2881844838e51c56f11533b25c77b9c6c6bb2c0657350f011b24db6c60a84232dbcd218a816563737585c1ca6152ff13304ca86dff20f9f9596aaa21448f2c6e620eee58f69338e3b675d29b478f34f0e60dfe7f12f02e6181d19185f7dc945210d86d31e85eae03161e947fec0f0fc91d
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 70de81d127c681561c6b493c8cadc8414e8cee05483f55536c9ca85870bca0ca
+Nonce.0 = 9b0100814f2583b7238bfb1fd0ba667c
+PersonalisationString.0 = aaa228c9acc8f8d349f96509ed5d2908baa5a3df28fe4e286b7f555dc7080117
+Output.0 = daef45c681b71075a8ab3493f872a27a5889201f89d965b01e3a57ddeeab7fa9fa132187d1862dc51fab0ad807b81cc7d00bebbe72ec6b1f223f901bf959f66d8bc9c27fe4a8549272446d000b32ae9e33db96e71695643e1a612414e850e4c3345b0ae0b8a30ad1badab20b06d4f6200923aae94a856727b0e95d10f55efc3c2f456580b4db9e0318836e4e513ef7fba11c87c1cbd879a87ead4fb0afd28aa6e0fbd2583566f77c658fa6a153feb00b4b6a834e42f50cc1591fbd2564fa117f
+Entropy.1 = 7815eca31f6cb0d691feb6ea67bf2f1f7d18c663a009406c32cade57826b2383
+Nonce.1 = f7d59e72891fc864183031865fbf2494
+PersonalisationString.1 = 80db21b0ce635e1fd1e32ac1269681dfebb60d91993872a0bd90a792a455469f
+Output.1 = f1947411a357d7e6906530c81b424210327aaf43a9e8072b55f3360d86e6aa7c5f16d1563be36c57189f1bc5d83eaf95b33ee23871c5fa79b5a97baaaf6de395a7edd3b2f0dd0e45f8e5bdcfadfea6d369f1ab47851110cc39552dfcc4da755b7ca485dff07c51aeb6da71d2b4f9fc65c332abeace27327d4eb4658bb9c1bb5c6d27347be882b8c9642d91f08876fb9ded6ba78c2bd52ad9494bf494221f5861242574f32602a052f8946d320c552e265a0c6212d052c66ddfef1feff6a81d6d
+Entropy.2 = 07c630984fd7902054ccce7f2628e288815eb6ba9eab2aeb601e994773c308e5
+Nonce.2 = fd945debd0724f4070bfa831cd805322
+PersonalisationString.2 = 7e5491051d49b1c6b96928a2e8b0c5f59baa3be90d60104e22ff72d9fbcc0b24
+Output.2 = 8e6d633d282ba33e96a08eb6189aeb405237be9c841937d15a811536cef8165287261def7a63127fc4204f6643900f44829230ccc7de2685f41b50bb7502147b38d20b4fa67738de2e8bde5acbd249d1dcd748b39870d8abe49d3e0228099269f33ce7a4dc0dab1cd74b1ee9376768302dd48e5c7cbb967403c02a3e5eea40170ec5f6b3ab519016df3cf065cfb2c5791d0edd7dd53a9d483c469b4b37748e35325e4c66fa91ed693ef72f275a94341155083b8338b5a9f0be85dc71ad7230b2
+Entropy.3 = 99f5690a9b572caf0946163879e8e76f350edfef7e5f832ba3c970f2aec9b60e
+Nonce.3 = a2daf8ff525d7193bcbf6387cb07b31a
+PersonalisationString.3 = 263944e089bb9e05ef88a683d8393eb603567917e7f1dedddb7b69c487e1d703
+Output.3 = 0d1bf25551ef211926382b3fd4ac107229e528b6e653f3284eb77b77a089a0777c54794f35ef77a9a99a42cbad5e0e057c5857acd1b9c127f092d83b09ede142a425a01898253b3d5cce91f3e9105ffb3e6327bdd9ec7a75b221283a559d42a53c7e47bf3a8282e3f5a6612c0f53b728f626e580ab02f3a7a81b5c4b770aebaa4466d0e12c8771f9c40c8c1e6da1b18b440c767b10656af633ca304f5f9dabe26c9c0699bc886985a624b6f9a823122451eef6a16723b0504ca4ccf33390cc38
+Entropy.4 = a159ae0bcb55d0b4989662a5f5a95da1be050a5373c4aa5713bf1db7b2d84bf7
+Nonce.4 = e60db02a03f866aad3081cace521d148
+PersonalisationString.4 = d150b2067a427e4e05d474b365c89db93c11ba124116f68b0b028c2b8ade8f65
+Output.4 = 7a3e407bc1166263f6c7528bef56e5da21cc170c9eb6781643bfd772fb5b1c274552bff9de0dc964e5ddb3ce3833a5a0e83ff84c15f7d288a9b054a7b94229f92d00b05ddf7419ec73d8c567c1a2170a40223428ee2f879bb84592d4b36fdc622ec5d7d615f794b323d211588d1805181fb0e33fcb963142af52977f0ddd9c9f60e84cb202dec3d1b0e8c26135bc1f51c1cbe4b36a996dabb7ee1a11927b705909bcb0f13e2b7d6a1ea51c2134cf48a1fc9f34556257602e87ba68a73a6554ba
+Entropy.5 = 494f20f6b24bb5b0b422a07473e9f771a6fb0590e7599f6be557de35ecf1e7d4
+Nonce.5 = 87b2204760911cdfa00811e7c7a8698a
+PersonalisationString.5 = 141df457de2fe1ac041ff60c670eb7f5cbe90c2a8a7c17d9606791b66c2553d7
+Output.5 = 383021db6e4f1d414726e20e063f10e71a48fe90cf5bcf7c9e8a0650db622e98e72026e24901f446928f59669b03a1db535390d29b1a87c23bacfa0fc0ba01755f22ccf84600d49cd20c705dc4f6ac1c8b7343f97ea87841075d089755d022001f3ef8df4c06fd057b654bb46349ad5792d1b408491dd82d35a6f09a60831ec8d9f17832a690c32f73eabe604570bdcffa88155aa0509664cd0662da4e75a192e4662fd82222ddd6304523425eba02dad98d0b28692b43d61ba44127ed545957
+Entropy.6 = 74ac530e95e14ec86f990260c234845a163030ce2ca86a24f0459630fdb629db
+Nonce.6 = 66040001c1fa6528f678c4c0d9061f46
+PersonalisationString.6 = 946d491549cb1f1761836d2c594f32b16e6736afd8460c0ecb1bfda1a7d7dca7
+Output.6 = a497a45f83669ef44a4a08db6aa2f69b5bd0c8a5a7fbe0ea70d2e9f996334659c2ce6ad3d5f5dc733c5e44b506d0610c0a251cf315cbdb8e0735d3f23da38d3e14354d932ab3ed99b3d4b6f1048d28d79ef36f910b6d211a5098b78b2a0dff215a7d64c9a26e201c9cd2dbccd03c19ef5f831dc4cfaef2bda854a540b69452d6e1e0b82c08a4bb861f24626a7e8c9b17fe7cf1ec0d3a6dae71ad20b1ff5629ed09f59b060622088a042abc62b2eb7aeed4ee4f9ef821e438ce4c8cb0c5724501
+Entropy.7 = 506c04817286c07ddebd09ff08ed68914db54c1b7c73c819fdaf23d1e48b2f08
+Nonce.7 = 329f92547b4d42764c2deef18b06161c
+PersonalisationString.7 = 97ca09edac4a17df2f6d65c0e4958f760c8416f2bce656d9eb3919faf0b918fa
+Output.7 = 7494c76a946c6fa4c79044b566b49f41637695cfa8e933f13be301dc11d6f5e703720ad344a92edd2d1de07e07c7595da8f03054c05ad01886d2cb5f4f6c4c5f0cfb29a371ec65ddcdda744f2e8015d813fcd9190eff3f6512c587a8e503f3e0d4299bd6a5eeb530a9dced480abef3e05ba1df1a7e04bd24d6b9cc052172a00e96ea3edfa41952786b157f6a124dbc7fbcc6732a8df256b979ef8492188f2f50a8f36490fcac63245d82687f0c502abca7ec7dd1982f5beb662215262a1759f9
+Entropy.8 = 6c7bedf7b1c554e344b26782bb7269a453f7fbc5aabf42f09e3033b58630f0ae
+Nonce.8 = 564f4f9c541b3107596cd3e8292b7a23
+PersonalisationString.8 = 9f05ef7646b4be65741c55c65a5ae569615d257434595b35afa2e4415024c972
+Output.8 = 4d08e9668fedbc387adc4f170f8b656f826f9f62801407853801d3c238705080cbbeab1860354cb60e765207b04bb3630da109b9b0d8857339172224729fc5420c47f844509d63a3d70325b0952753b41545eb8f87a837ddc78854ff04c3ae67736284589ebbc017b0e9e6ef9e8b6de43e1de0d80d4fe303795b99c2a87f02932681cfde9d75b2d2052ad74eeb7654c7dde25d541bb09bad52fb1f232a81f1af740db999ba8a88fce9c024911f080ab6021ec7cff968b48e7b22b96499cea5ac
+Entropy.9 = 2fb7776f60596cc045c2c92e05d0baeaed6021fcc0a66c3751817d6d5c72f665
+Nonce.9 = feeee4984161db20ac810d441e3fc3e1
+PersonalisationString.9 = 2e8f0b6f22b86cd484d7cad65089b1430ee4051c83d3e560d81c02b539c29a8c
+Output.9 = c508658e64534c789f930bae1ad77966d05a2d556447e5c7407a806e7af4bb626d4a010902cae02a2692e91a18a5a136d48c0cedacccf04883fc2d3b5d1720e184691aa726d0a47a0a74f6b2039af4ea3ee5756746a9984748b1dda81cd4185b8b71f014fae6e15154d276ee9f7562dab242c95eff1c69b4000f964a243b681d060b292166ff4b2e54be84ac576194bb96b511fb510ae6d19e783cf632efee03ea22a0d3a1f60b3a2571ed7d5a6ccb1c3286219f0c3f992d865a7707129f45a5
+Entropy.10 = 778e9175d3e502548ef4b5c7fc0698e7557e7f8903b86951ded11b90320c517f
+Nonce.10 = c9da53d66f5be160d9d4587e6fc4601c
+PersonalisationString.10 = 8221e6b8c882560efe8fae9bd849f0bbdd93b8ed84a3dbcb00e342600384f946
+Output.10 = 2e95d3bd5ab51a03d89feafd4b2ff60e2df83737cc78714dcbcd93837113819fd7b0e2d4257345aeec923ee51ea306deea04c31729e692d577731dbaa43a5ba14a67153776a2ee9064774a2590f2bd37a77372266f7455d856f61d902acf10cb0f8403a2fa050acb58cd0c044e9b8ce079b9f28da5271f961c39fba814f818f006cadbe31f55ae88f47748a5c34e8d6fe0324eafd8e3e1398eb0983455f38089dd46c5ee0f2abaeb582ddf8f0ed910e3111b0106da5dd1b83efd40f01577aa1b
+Entropy.11 = 9abe6eadd8df7fc85e4f414feb36fe06b587e1b4a29909062940def816045ff9
+Nonce.11 = 07bee03f9779b86260e73338aa509243
+PersonalisationString.11 = e24084f08e30990410592879c20e7b661a0cd1ffac997173631d68bdc8e9489b
+Output.11 = 74f1ce1b87f539012c3d69ab217c4b1fdb8f656cfd455a2e328a2e8d6eb16800b1a6f1810a34cedfe80439166cf7e4c06411d5a872859082170b84e19a9c71b5ab0417e4ed923b190d44263ba3dfc89c8167118cdfad4053c93d90cfaa23125a64a19fff17124e085f129508835fb9e8bdb4e6bfd40089113fbfb05c0cd6cb774f5368255dbadaab3136a49aa0bc8eef0ee25a0e61dcdfb5ac8b09a4c5381d649a05c4474d1952e95fa4597f9947a8ea0bcf7f68be6bb194dc1eba442ac5aab1
+Entropy.12 = 3dea25021f90e1651008ad4c589f789cf93e43fa30770f3b1b6d513335d01f1e
+Nonce.12 = 691b22cb58210e7b277595d1bd2a6c3e
+PersonalisationString.12 = a7fde42c12f8767851d1d0ed0c0b97efb9f1aaf837e0f5c2173ebd73f31f8b80
+Output.12 = c61743c144ea662c459d947a22a57565eb5da0774a6e1ab29cbb9052e72fe45a4223e31226cb65465fd6a0a0ee94f81d7c5ed07d5395dba87ead2222dc235b33ee1fdf561060eacc9b661985698d7c34f28743fd8f78b3c87391895761d19489abcb7e97ae3dc6246b6164b18d41d996446c6d5da6b64474eacb99520401c0abe21bf7545e3e75ab0fc8d1813a4cdb8cc0a3572f8d386cc166e4a516dc4f6a84109fec2a0e1648c630c245bd61214b36b42462226a451c8dc4bd80d823c51eb1
+Entropy.13 = 5241cced127c6d4ade1c8c26a34aa330e8453f22c3ef07ba712ac3bca4e3e29b
+Nonce.13 = 0c2c26095bc35ae5ecbb261a9fca3f52
+PersonalisationString.13 = 743a783fba241267380acf9157f3a5066ff7b29cbd74d1452c9b6db3b4b819ab
+Output.13 = dff087e2fcac155933af6b0f610141ee4c62ea5e32cd101a84aec4d8ef186d322899c88ca4f361fc0caf1f9758ef4a9eb696babe0eb16d4d36d1b020e8a3bc6938042dd63db602d729eddf17851d79b5465f33e809a8a998197afdac882d2f791bd6e9fd8aca8fd3ebe776c257509f2c9eb135c1df8a2b56207e0c9b98f46fe37502eccfba54a8525486a38cfb94f56e9f18efb166881354292cf33ec2de3c846f4c162050c901055b8b41d1202b1c65be475f3671e6bde85211729132e08a7b
+Entropy.14 = fc2fd0bf5fd34e2a04100ac16ad994b7538f90db4094e00bb477af5fc223da61
+Nonce.14 = 67f50628067bc401648926d7567711cb
+PersonalisationString.14 = 5f8cb19e3c86b179ffb8812db791e8bbe6b0caff958715dd9e3368a2d48f65d7
+Output.14 = f178a20d27725759c839e7fabb63bd101c3352f582524ff088ccaf6f0546ecbd3d5165f1e3cacbb49ede115b8f6c8db3aa9720692efda124138d29eac17637b84977384fb88e81289ed5ec960e6e98fdc71d03ef0bbc05ac7682acdc62888b49fdbb442080687f902b5a313ac88d364b13871b20f684cf1acbfa229fa203607a0a37b4e1685d13a508da9f48dcd83f26751a2284044f93e18b2a206a1887d77c4b76e821952b376f19fcf53d83f704e3ec3b5c3cb4c390b213d57dbe4852914b
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 3367cba0b8f854e4d070ab8c7aade94fa952211c24b0bd593a6ed039296fc8ee
+Nonce.0 = 522ff5bad7c6cc6b3b75c217fa02451d
+PersonalisationString.0 = 160987249e693f453e084592fd889fe4af2881c888922e7f655f9980a2e42b0c
+AdditionalInputA.0 = 0bb082e1aa49086fcfaf99626560610a296f56072ac2129761d4dc8e7fd16616
+AdditionalInputB.0 = f92c004f6ba57517dbc7fa0ff0f21b89fc429240407b2f9196773ffded8847a4
+Output.0 = 6b0a99904c5c172c56ad8bf9e3c08d28245ddc8934e3e494219c8387ab9b895d46f031e50a3b200892ae6a2fb0876fb60e57cc30989eae21da130a381fdefa9afd3ff78bf68a9ee8ac6c3619f2343532060ce7c7560f88da75170914f3b45913324fa8aa8ee85107ab61833325ca4aaa9caaa8f0e98b8c18da6739faacfb55dccc344191f94b58293fd1454cc8986588457dfb63f7e53206c09e07f423d06b6d77928d426426b318b34eba140b0a1e962b36871d9190a0fd9e7b39bd6684f52b
+Entropy.1 = b0b77fd8105556f7d2ba75ec05a1c572b5abbc8041b2e0c2f39fc2675227e653
+Nonce.1 = de9e21eba0b8761f3b39d338dea7e62b
+PersonalisationString.1 = cc6466b6ced020b7eec5899fdb4e9ba942cd54c0c41ebdbff769c39f235f350c
+AdditionalInputA.1 = 07e18f9f5172dbc2e135b97d57a7da9a2adb0401327976b516a79b8e5f21c19e
+AdditionalInputB.1 = 9c4dee11861ac4c4dfbdbedb9a8e150dd3c9ce3477c1ed31d4637a5b542e2734
+Output.1 = 0b844db9a742ddb41c755d872ae421331e7e38f960be8a1a9d3a294bac5868d9e60cfaa7591523c9a353d409f9c75cfcd197bf3d7626db8333e4ee15195e6bbbb92c18a2b89e6c2d1419c85c3abdcedfb995dc73d87c5005a842a7d8a8e3a9306690f289de2d4124be6a7992579642e707461d344b3e62cc7fcb8a38147ac55a8bf39c3a4483168e6e3a068fb8720755e9117354cf9f42be654508dbeb7c626678091be07ba9a69c375f76cf6a81658176615a7b08a3f759ca4d8aada9cc06b7
+Entropy.2 = 719e042c520c191cd66904eb45a6a31bc35823243a87d6aa694f46977556755d
+Nonce.2 = 0e7a1f3ccacf2d809e3b785b0cddb726
+PersonalisationString.2 = 9dec818051541fa05260656422e45801f216122f402d512b2bc073f9de847c2f
+AdditionalInputA.2 = 7faf1236fe5861e3eb3a60119e8b3c385ba0b758e56f5a833d0a2682c00b3eb0
+AdditionalInputB.2 = 7cdc6f00a150165b23ccb1dcb278e34ac915a21d5a7ffa4a7ef1fd19307edc97
+Output.2 = b616ca393de06d6a7265e179dff284e2cffe8d460f97eba744293723e96dc78f2ba4518aa6a8259eec8f119fcafdddd3ed220079a5a121e571a7339f9a4d91b114bb29ad409ec2d99cb7849a2c5ab1f3a6d12e8a59f994b8b050e1539f4f69258bb87aaea49a1b90d011fe3585ea2c337511f3848a54f8ce6ff0aba6d37ef1f80596024660408ee779866adb75b2502fd59342c1c8ad074216fe0e72489cdc0d0a1b6893b6b55831fd93ddf7c7f65da27e9c878313a6639e18553ba5d912a01a
+Entropy.3 = 53e1f9ac699031b33b16d55bb021e648ed8a28fdc3fa85322fd9502d2a84d518
+Nonce.3 = 59a039426593e41f396728576a8aca70
+PersonalisationString.3 = ce18a5c3d2c6b59ecd716fd5f265ea8b4da4289d7e01cb1df34f772e3caa4327
+AdditionalInputA.3 = 721894371f14a98d6d86ab96862784e291d1a9e1308ac4deed9bc6f86425a83f
+AdditionalInputB.3 = c118a1a94ef21cb55db1a4402ef742dd71ecdecff420c0f11560ebe5e7104669
+Output.3 = 6de0328425a72e2609f602e26b34324c11eee4fbf71f0e8a6b975c6f28828faabda27c45f905a769b199c16e64a98e82eed115980c2bc51eb3a61edf86e25e177e397c4665e65b3c3524010204c500cf3ce4a7280340a2ed4a57707c9c826c0f19aee2b3bf372d60cfec73b448bae063df55f8984d482e083a75c9b351d58a8e22c35409826902182926b645cf6a31243983ac9c7a274bebb44df8750ecb6574cce2484635b9dcb4a4e376a74c6ccc7260c283c148e9653144c6015ac05422e6
+Entropy.4 = 6438ac32e88b88649bfea19571d7ba060261ec79026b05b816677fdb67398bf0
+Nonce.4 = 344b242d90e019934088688b776485fb
+PersonalisationString.4 = c4f6966dda5fa6d4db09514926ba854e5a6c1d6b993c755730245bccadb5852b
+AdditionalInputA.4 = 6ff7bf01fbe5a8e2e37b1b3b5a48797db4b7437a018feff8c8a362b68e253d81
+AdditionalInputB.4 = 91e119ac3172d26dc7f6766a032c278c76a2115370e27da299ff4e4c9c1ed4ce
+Output.4 = 7f9238ed1578762e2c9eb70209f429e8b9d4ac874101aad11bdfea76fc9c10a89d63ddafc02bdad6da82478102fcde4dcb75c869350ce82863e4b0c6a97c58dd19ca44d3e1a681e6ff9860f210f01eb786559c2cb96b196e1f56bf44ae2e0c995a1f339ec64404b060966ab86b0153708e5420e76a77edde266f17bf8931c6213d7ce678243fc8e9384df82546b5f00e6bd473c0089d44eec8f6fbff0fdb373df4a15f0d5a6006d9bc8b3f266418a5424af2d515d79926da9ce92a0414f6557b
+Entropy.5 = 10b838c9514802f9755a3268e48bd5b5ae658f281b1a09b7f991b70f621ad90e
+Nonce.5 = e35a4496b07dfa0f60c3bc7f6482f86a
+PersonalisationString.5 = d960b9a4af9b5a3ae7f5ef89743248398886739da826f3f016cabf4f917c0226
+AdditionalInputA.5 = 0101a6605137fd0144e3a337f9abc2d345f474c429b4ad8ff02a831b61c7cab1
+AdditionalInputB.5 = 9828206bbf49e20be0c59d6dc15bf41eadb9207b65ba09bc5f8b3f91a26406a1
+Output.5 = aefdfd6ec7f193c144c87a01e28bea811e29c809fdbde5d3105f8f6b42bfdd20986d3fba93e3b93761edc708d434865c6e0734c09984727048d3a22f2a91233a8282f6cdfe02181ed422ada52efc9eb83a78185f1c20f70a0df37277d6908b9a8d25e1651bb7e75a6c79f3bb556a18217bb2e2f9bd820672698b4da00afbbd7f4d8539ad935b9292991cc95fc2cc0d8f5cd9c4e46dbf0866ca6f9172959afff2ebabe01554baf93ea228fe8915e3ced5908e11227a13be93e806490a0c54ee2d
+Entropy.6 = e11ec151187fa63eb594726f36639c151ff6838b48f594ac9a213cf44c8fb88e
+Nonce.6 = 85d98d8fdd7e1ec7aed2a0f388662467
+PersonalisationString.6 = 59298aa898ca587ef9c12c0210541dc84564f04cff157747a7638d64cfc859f5
+AdditionalInputA.6 = 8570c3a713f75e1441c6569c64dfff22c3d7cd4c5c0e3e20a52b6479e43d78c1
+AdditionalInputB.6 = c4befca8e4ca28bee4baa041c568b6d61afe88871ff31568684c319143c3e994
+Output.6 = 80f4357149ada605dae89e177da4150f1aeb8850887551140e2bfa43491f4ceb0b0521f44a6c6938ec9b18b903438b7b7ff260831f28cedfca51c67bac0ccd40036c1cfccebaabbe93194bb6dbfac7e496e1da870e1d42ece5edec338d8e27ec9a884edc5176448c453c0aedb4dc5de7a707dab7259a31f2eece410be6e4caafec619c445c743702d14a6935b472ea7033e5b11237c819e9c6543e0816fc662f79d84e2cf47a2d6cf6dad74326da745ebd0a51800e9a6a47d3423013859360ff
+Entropy.7 = 597dcf0f4f85dc1bb4b3cafb22de583cac96ca661e4f06d8784f695b965de45e
+Nonce.7 = 0b72e52811d44a40746bcd804e1ace8d
+PersonalisationString.7 = 36c78d2c4839a1fcba7364a1a6baaa89c493417b021d576682bdbf1a02b69b56
+AdditionalInputA.7 = ea94293cbc27dab524c070e30ec4eb0be646f09feb77ecd2bc702d518420e1ad
+AdditionalInputB.7 = 7f64490bb0ae24c93b901106362dc086a494c3f11f9d29bdc48d407a0ded757f
+Output.7 = b7c6d10f36ef924886827954850cc292ab2979323ff1f7cedb3b49222355e2404062db45a739b264bf94b85f15bff29adbb17bb4ea24bc3eb3dda163dee4a267dff1168aa30cd288159636c15c783941fd2e81699a8440469add2eb492de6a5fad7654b111328d0e9bf320a067873f948312bf69a532471aa0cc7335cb313bf49226aabc47b27f5dab9fdbd33b52ba3b7917dff009665a5b190eddd376312970e583d38f287fcfb6e535a745beb9747f6752c722b17a464097cddd0c17d7fb34
+Entropy.8 = a84fb1a153b2fb6dfd6c8c01050028ed6ffcfda7438fa463dfcb6088424031ee
+Nonce.8 = e8ab86143a21f103d2379ad2afdabaa7
+PersonalisationString.8 = a061161d44625d4bc00c369eac66fd3690c7c6468c3584ec272db8e54fb09229
+AdditionalInputA.8 = b0f2fc219591ad6f67d3c43e04de22740fd63ce367a2685b1c591574b53b1811
+AdditionalInputB.8 = 08c623db0ca9d92d493d306aa9c3c952ce2e15540c8921e9747aa3a36e5548f3
+Output.8 = df8dd6d322da1b88432dce878f10445f86efc23afb3c5200b392f5175f9d474cfd38005da15a2f701fe6fc8a7c9d69c9e3aa08e59e6c9fa414708bf0d40bad1917f1352915669f1a2ed8fd1af2c9edc75ddb66b568a8b8b44acefdcdad531832f452bc7e38259f7ad8f7dff1121ad0aaf97921c6b5dd8281ff21066513dd82718e8643fcca8ac51e3afd643d1f964a32bef160e44696de970022000a56d7154c0243dfc4c93ae79e17e3ddde4d885414d38def6dc16a4effe71167b3c1e4c1a5
+Entropy.9 = a9b7db709f62ea96c92bcf593e08a67eef7123657aa60ee0db4fcb8ca35b01d8
+Nonce.9 = 3a6b2e969eb854705fbe64c40566346d
+PersonalisationString.9 = 1ff077215892c088e02f40e314b6cb8c3c1bce0d221acb447bdb7a27cde438f0
+AdditionalInputA.9 = 6aaac8aa93b3e7e18ddea7f7137a2b150e68007c4f7e49a71af05f9a11bb46da
+AdditionalInputB.9 = a31e16dc94023a66d5cac7abbd99e12910b348cd86a4534ba89b6cbcfdeef9e2
+Output.9 = fefa6160da2ef6f934afd80507c05d4630addcdb325431e17a34b77262b6cd0614968078c3c757ac8c3ac7a013bee5f88cefd5820f02fbede8043a75695c4e3c9e087f32ae8e3cb0335e97f8983f4fb82d19d8b6372e0230401fd4e4a07712139a8ce1c57e72d8a734ee272120102a033dc5f5f656a034aed999e4cb2f4f592e1d7f2e4d4583937d7caf634b6e0507b1b4ad10e0ba16d44c1ccdbcee8784a6b65f58dd4ed768e9ce42e1dfc7d9bfd9d1528099f22e221d95695616320216d2be
+Entropy.10 = f386e0016584a36ba37014c68095ffe800d40e7b670721112a61624a791bdbce
+Nonce.10 = a967ec6cb6fe0aeb03472482a937d01e
+PersonalisationString.10 = 0cd17ac981337a77ee1a476e747380a6702d8d5cdc9a4bf3ac433cf19dcca887
+AdditionalInputA.10 = 001a0f2652ad16e0bf515facc33e440906b7866f13310377ce76b7158fa2cde4
+AdditionalInputB.10 = a06a08311bfa08be609dee9ce0cef830bd7ad917af6b825be35256b0caef5f77
+Output.10 = 50f6d93f2909fabdd9a4d7ad2c1eba8d970cef68dd00b3ae537d31476bfbf4fe046912465c546a8bf10da18dadd9835a10da49560742d0425d87c61a2d6133e857c70d11d0f54152ba91d9462a2c60dc79f65927e56dd7f9ad77dcde97704dedf253189e066deee70ba4d938e9c31f68dbe5b5bafd4c00ce72f78ffb714f6a9490507a09102fb32cd8aa40a4869324142f1cf5b01661b8bfe442111767cddb7d9e601fb1df7f510f2820930776253805646948932e72bc2a4e69fea690d2977e
+Entropy.11 = a6379c0799535e100d1092c675df9ec321b8e5490bd9410c3f7449a3547615d9
+Nonce.11 = 5d32a5226624a29329471de262112b93
+PersonalisationString.11 = b7221d9819e0711d77c885aef71cc4204c730f441116c3893ceafa8e72d83b72
+AdditionalInputA.11 = b222c369619ef10ddb6d5530770416408d22901b13c3fa3c4b381e6b05e79862
+AdditionalInputB.11 = 85458492e9ea23e9fa7834874d032127f9c86f0e7784d7eddf9d6adcb9cf88b4
+Output.11 = 0509dfd32fe93c7c26a8550a79e6bd294cbdfd12e5c7c1691be541cf5d86419392955480b23d27ca6270cd7576009dcd3a229a6e3c4af5e48733e71b741a5d9eb1e25cc94558115d27e35ef04157d6a6bf840dec1114cbe6654eb3d08903fc0ef09636f3254b2a58c7eea8723eace3b13c5ce9b0432741b33efec2ae2fc78dc64d2a6937ee2f10fb4433af43f5c7356c5615cfcb4cc0e8fee95be59c485fc170bd1c6ad9aa15e2d93ac3f07e41c47ca3d490d5524a806dd10409d416811c455e
+Entropy.12 = 5611226d073719a6af19c98cee4933de42bf513682df50ae94fa906f1da49327
+Nonce.12 = 2efa79466faab2214ba0725d1bb37191
+PersonalisationString.12 = 42277298e322e8d9e7959a29ad4d5adc0e79c5ba85b17f29e1370acc00228bcf
+AdditionalInputA.12 = 263fa2502697af15129db52814752693e8461d327bbac88caa3b583862bdd845
+AdditionalInputB.12 = 0c66e1b8ca1bcfb909a104fb582c8c9ba85db1792b98799a3e6292c95dedf205
+Output.12 = 16973645325b777c6da555e9654b58c6555ed0c6f9054da814f53f363ec9c3d28130a2e558d1352ab26e3b205f20d5f77d7f3efc93a355d346eb4e192650c905947cf6ae166b6fe203ef41a366909a7e57a131109e4a29f9229a8004a8aa55d1c9a20236a4ea95bb8042bd0d15988963029f5ffbd3b5bb2ce433e26582c0ef89a9b7ac13df7051fdf1bf4b3031aad7fc8214cc233b7d4000596cf47a2e986a5d72c2ed3e005a7fc0e70ce77b93891bcabba208845fc9f9cd45dbb5e1a79a6cdd
+Entropy.13 = 2d69eab46d8b77c84aaca91169774793c3e46f508a4b6445d9549eb531ec3a71
+Nonce.13 = 10dd5a1a07ffb2d71214626cc5182cd9
+PersonalisationString.13 = d2f3e69da5dba1e14a218cd4030d8994bd10a96539e67e6968595bccc649e310
+AdditionalInputA.13 = 3ec61275d4b1ec9366aec719fe46dfc075d860e61f75340dc4cc4f790a9c5b0f
+AdditionalInputB.13 = 83e7f1447c53d1520d5fc9b855b61aa8d4078e85b78f8e088b5a6de026f2fc86
+Output.13 = cadd0cff161e9f787dc90d2dd1a5d3bbae6a771edd657209dd67f61d618ffee286c031247ff3d921fb24b16f3b4091bd0e1246745eefd1f79bb06ada715774bb79ef0379f37c868ddf768b85a279531badc51f9114c68a1e6c89a54dacd0b45a61ddcdb58d79ac9a5930f413a463b6bf12d52866a4bde5460bef6707f5f6b5f1e2f74e1363d93c6cdad99773b2bb2ba8a30c208112a67f7d0c0f1ccd09e554525b63d3bd16c3527ec07cfe30db3237425f899143ab7053b6d6f962be1212619b
+Entropy.14 = 161bef119af736fd23e188a227aae76edd0fe654f9f583d75d77a3764bb8479f
+Nonce.14 = c6e14c68309ca84788ad9f15d5f0a90a
+PersonalisationString.14 = 8b2039a6d4b909906a8794df5995fe9ea977c5a1a30982015aadf937c863cfac
+AdditionalInputA.14 = 23e4e6b0e0c1b28a6f9731f8b09960ce7adac17527b3bbaca7c811daea4b1cf5
+AdditionalInputB.14 = dc7fac6aeded9e17b5bb5e2bcad9424d42dc07e809da59d52caecba6e75ca457
+Output.14 = 5a42b35cf1b72d2520d92719a94ef1a7ca5b6d6c7eef2de25c8ea44c1fc3a9a5ff2128f47bbe58084a0c7a3fc790626eff5666b4c1e68fb2f53de3370b29c398d5067b255f5f7f29fdb0f8bc256ee3afbe78a33981626837c55f981e56eb2e1bdd89ca081e48f6da7ce6576fbd37dbd57a3f41cf410cb375614af239f2e10218e777fb97a55d9cc73243882b8d8d2a2c812fbdeaaed90b5bd71a274b4b171cd7e661912c9b3de1714a3fe4931d8fc7cb1c9f64f4e37d4e5dbc31602d2f8699e0
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 6b50a7d8f8a55d7a3df8bb40bcc3b722d8708de67fda010b03c4c84d72096f8c
+Nonce.0 = 3ec649cc6256d9fa31db7a2904aaf025
+Output.0 = 95b7f17e9802d3577392c6a9c08083b67dd1292265b5f42d237f1c55bb9b10bfcfd82c77a378b8266a0099143b3c2d64611eeeb69acdc055957c139e8b190c7a06955f2c797c2778de940396a501f40e91396acf8d7e45ebdbb53bbf8c975230d2f0ff9106c76119ae498e7fbc03d90f8e4c51627aed5c8d4263d5d2b978873a0de596ee6dc7f7c29e37eee8b34c90dd1cf6a9ddb22b4cbd086b14b35de93da2d5cb1806698cbd7bbb67bfe3d31fd2d1dbd2a1e058a3eb99d7e51f1a938eed5e1c1de23a6b4345d3191409f92f39b3670d8dbfb635d8e6a36932d81033d1448d63b403ddf88e121b6e819ac381226c1321e4b08644f6727c368c5a9f7a4b3ee2
+Entropy.1 = 22342fe603f975ea26c7ed7ddddb38b504e43c689176016c8a56b7af47b8459a
+Nonce.1 = ea8633f25650d21dcc79734a9ad41d3f
+Output.1 = 0aaf02a611b4d461e493e3532ce8ab0155811d3f0676fda82a64daf16c1f8ed1730887ce9f9b2ba38495e5360a44cc3efc4ca8c83f8a64e6e0f1922123505ebfa9d30412e5c4884aa1e067efafbbf8a560574646fea79bb89399477cad3a142957789fa78972d5680d3165cf2cb6eaa2cbd4201c76bd6263840cc745a43f647d8f3b6d674fc654ee71d8e6196cbfb341dcd0eb98bf126756d67a6a42afb8d24d3edbaf288af6ac09503f4d4794b4872b36a72c3387024e3647447fa767136ca3dc247cfd6ca22b169d3dac9808d85cc193e9bbf3658b6b4f6ab39445a2b127f46a1a8aee1cc19b44fa85848a7814aedde84ec1b1cff69bcb6107c7647b3a90ae
+Entropy.2 = b29e584555b8f7721368a042bd6e173e250126ea5b848544c63e8588c45f7456
+Nonce.2 = 58035791f0e93f5ee3b5087a13004e16
+Output.2 = 5afb6fd3253b8cf132fcb6f2cac2f5ab9470f9123d861353aac795569eebbee38487c0888bd9df77a45cc9fa8c584d8e534f2cdff13fed96f3caf377feabb346cc0f27733f68a68a92f8c0686d469b2453df75b7b2b75b5cb4153d0f5997890c986ade6652eaf1b12ce6ba9ae642c5646ec40791e74ebabd4e122d5113f34a97942fbc9a968eade54d2a3017335537c61118a855598b866a4017fd683da336eede2c2c435aecd838b01b166ba61cf93f6ef0a5930f1b54fba1237f92bccbaa2a30ce44fbcb9d74a9d031c02d63d374b20d3c1dcfe9ff6a554afdb81215ecc1032d8c8ed64af0cbbfd82af5fbc4da62328ecb2f559368daaf9b8c1bdea2eb2b0c
+Entropy.3 = 0ba19a623ce2ebff98f6a8c5868c89aaf061fb664ac01b59c8ee649691a99fed
+Nonce.3 = 71219f471964d6d88aa3576910b03f44
+Output.3 = 8f05c6dd8cded901daaf2078ea4b03e890251f298847a81bd826b61a3613c29671bf720cdf1262f0f3d2d7f502e527c1b0c7147c93d6bae619a64fb2ca7d9d8b0267781c9bac6755a25fed3e729c7baf3e8a477c329d56a1332874e4be626ff05f00df8f75dfeb2d06a391bd75c4e1ca89b858a214464d4d1f24a9e379c563f48fdcc93d92f0be5c115c7a10551a1ba1da08e519f4a4c815c3cad1eb21ffffc5c8fabe690b97e4077fffbe87b36d0e09da0fad2b55e0f812bf67714909cffabfa97e083dce8180323caf68ff9eb20368fe444f00d1d711ab683ec35235e31c82d56b523437a0ab90154b9f2d6a8695d9620f4c41ab5be48b5a6118a242ec785b
+Entropy.4 = 01ad79f5be89f5191da48a44d56ca5071e99f15a3714eb92174749ac0da9c53e
+Nonce.4 = 774995740ad00048ee2996ed7e1c603a
+Output.4 = d228d36033738b3b82f2840b46b5f0fe1bb06cb204ab3b68fa80725966f3674490ec6748e48db9a00285d63a29ef905cae5fb1552409f89fd6541b307e4b1231d46556af591023474bc2c07c821c745ffd7c24d311c4ff6bb5d346e15e4b617faef14a51bc3820270fd010d064daac2257df088bc65242656e7e8645989c0884b2dfcb6d725073150ae0c3d00c89b118d0dd1a424919aa8e9ba6e0aa3a8c4f13d2dca4f339b220356dd27f9df153e9c2ab86c03c1075c54583c95b64f42eb2b5b4f8797964d10f5f5d4b01899d81c53b86e11b6633ea2265aa2bb4b7a231b68eab232fd222a73c109530d1ec5649c2e0f596f5e37f340f84be9330d6979c2655
+Entropy.5 = aa82ceec0eb83402fb324471c806b95a4638d983dc2a9760f1147b6caad6cb3e
+Nonce.5 = 0de90f870d610034803f19ac72ee076e
+Output.5 = 69176ef1b1ca271ebbc18e438abdb58da73e8973da0d8f09db50394e648aeab12f236261e29bc95e39a230abeb63b2baede8d5760f5935103034d2d3163ef70cf86ddb1eeb51b0785b6c4d0790b8a9aff1a93965ff2ec0619d78f2986078a7dbed21420b1c768e59b4f65017f392aa7f72b47c7129f7ea55717be1f924766643aabad143ac153525a7f8196bd689d5543b9c1f5b6fdc50c9ced379cb6e979fb68c162abc89681b6255baebd7e125a5bd0da884454d225e621d4c0ef9f68d48eecff271e7e1845ed0a32b3998d114c6f57a53d1230e9976472fa0c51a4d77329d833f9061fc0301626eb11dc9c701358576e9a6a104bd86f222e6a0f9d0b4597a
+Entropy.6 = a6ea179c5b95eb59011f0975ce9752fcab7fd245e16c9ed5a211c822162d2ee6
+Nonce.6 = 54a833261bb18d895d11f517a6541c28
+Output.6 = 79292869d53048446d1ab4c5e4ad360aa4fbaad9b11c084a05884527393f877edb6565717afe88be6ff1a5562d2d94f5932b65fb3412891d47985b8499947675278e4a2980c5c2bf45f41c3d9c411927530a599f8592e83cd03b2baf47a60d2bb62e1c9b176a82f62bba15413464a338bb90e8e3524a8cca13395aa81e19c82d58e26d8ecf9099b9d1e879ba60dcac907bc74f8669f9fca4db4d7272aa57ff77c376e89bb696f3db16ae1b22a89a072f8909678a2e2ce370a33c53d65ecba52f6312d6f66d3c000b3ee6d58c8896b207e707933f4ef764330cf5d9a8a6ee6271f034c78bf9f7bfc9135590ba44f61fe89db440eb6d4aba5fe553a628ea466ee6
+Entropy.7 = 6fbddfa9c6d79513644acf22143108ef8808387055f7eb94538ac7ee2dbff197
+Nonce.7 = 7612a515530deefe1696f0838166820f
+Output.7 = 4741b139d81ec6aa6c56b365f4505df51651558a43236f0e05daeb36a0f2520172979402f7ef9e88d729cec885093b6687ff42918f162c97acd02968601af0c58f0be3f0c744741caf9e8096625b11441bd28c48d3b5deed47afb5cc57c7e2b4bd6c9fa400d5637b4cafdf406370c519a5ea1de8c38cbe40473dba8ed7d50d6524e37be7a0287dc21c4cf1f5d3a0b2f03ae2c349b76d3c2d3921307c15839247ebbda381b97976a15f7175cb6aa3b65324e7086f2affda903cc3ee3584a9c4807ac3555c1bcdf8f28a0daad1a55267baecd7da76837b455556fe2a03dc4f8f7dffd69da0164812e55a455418d34868372f5e0f292dfc08abee2e4a458f9c539e
+Entropy.8 = e11dbb2fdf96b61b60171eac2ddd71731457a61d750325413eaf0d631565ae27
+Nonce.8 = 48bef2b3617ada8a3bab0851ea3b2491
+Output.8 = 9b31fed9016a5de5d22186e88362a951e00f33eac66148d84276ce22021f71b5af99bc7439b610d347a6b1414c4c50a911f4e14a8997600686289320568996d26170f10454995d6f81ac4baecdbbf7411e04a767ac11416dda24db4e55be7c1d10d4da23d7b35c9226fb2d9c146b928d2339275433aff0b5527b29036c12173befcaacd5e9d7118d1dbd994c96b6602e86b537fd00b3191fd1abac4ccc4f6ddae7c59abe0cb3602930d9eb6294a9e053a415c1bc62a6b5f2aad89fa6c3cf4ca03d9cd150c2f252154bc46f524e8ecf90e819d97822e698a487bb92d7780532261cae81fc309679231ba6bdcc1087e71159169b41534b9af31f566a92a14cb492
+Entropy.9 = 31113275ab562f8b1704e21b7905df530d5b0f81f044844a0db06071587510b4
+Nonce.9 = 35fc721e174e3b372c304f0b3c0b1a42
+Output.9 = 967c10c259c5ed4d98a91f16454c452deafecd63f685c3bef917e55acb6dd955b690f730f968c5a888650c2562bd23c1d5ba6598e11d9389afe12d6178cc8a2c77447f8acdedd028c01f6ee81022729ecb88b837e54f27babfb785023a6e596ebee6df3caf1e8975cf040def89e742b907c3e51ba0afc36ce3e7fd85b25a5550f4ab01e1db76419f8a732a6cf8af141b8d9923607ba185be6ef60908667ae0ee0b7d293012fe52dbe6550f3eee6867a8a37f88aedd2da962dfaefdc5d5cac5e8e7456f709848bbdd508cc5f5cd706e7b5ae9af57fd994d3f2e61bca98dc3069967e56f1f30ba0cce2bbf390b1f02dedfceba56158009cbc23c2c4e9e646bdbc9
+Entropy.10 = 027bd3dbfada2497ad20782a28101ea5c9390f7371cd3245fa537ef932920bde
+Nonce.10 = cbcd6d23d8ab4b66a83545536930f557
+Output.10 = 290f47f88b75d2ee16030bd9836a5ffdee9eed568fdf300ae7f99ea28c9c4751fa46c1ba5d367f1c6e334f10f61cbe3ae81268826b6025396e73f6a3de2c835a15f57ac8e1992f1a46ef6aa9e96d77b37aaa24ebaafb3f1d211d2204562af188492c537b314dbd7a8c47ccecf1b2b692aabcd53040d19c329fc1e856057dcec0fba97beade1beaf9f253280e519d05f98bbd31e87170a7e186d824966710620ff1b3b66155ee34b42f4e4a97f12248c8a1fa1fada70f95f7d41348caa00ad2c56162909a1092b4e69adfcde429a02109b4dfc91aed1174efc16e79c72c98906747aa18f0ea877bd7ecbee871987e1f6aa8192b3e63ce4dc14f5e596492c74419
+Entropy.11 = 307480b232f51a42fa3a342eb8af69657ac0ebd1552585aaec8b3e88b0165263
+Nonce.11 = 71cd330614b1e942393c58e3bb65c2a2
+Output.11 = 545c5d384388091030791a107c52f615cfbcad977123c426de51e990617744be456952bbdec541f03fc5ba1ce745d2545108089492a8154ea700f71ff6b5dce1ff718368bb28e3c4df7c904dc9d11a10732675bf3aba0c1119ee56c3ad2ae3e67b75748ef0e4ba5c9102f0c7fcc83afe78ca19afa8446aa41172e1e2978923d14d7027f80eb1b325b99bf4fe3318b8f5ce41ff7687f075902a0ac5fb672b6bf05a90ac5dbf15832cdeaac4c562b7dcc58dacc40c5b859cf47c9ba74034cb18fb589babc40c2b4cf62eaebdf0c0f6143d6a6271f4b0637f15ffa18943c1c97b14061de36fa52f1237b0ee868ffe8615d9084437948ca0aed845c2b7e9d7700bdb
+Entropy.12 = 285278848f83eb2976183e15c93c2f8b9f99b35cc99f213bba0c7d772499cdb4
+Nonce.12 = f5278af81d428e5f86eb8c8bb430c468
+Output.12 = ff6eeb98c17f76b293dfe58b2f3ecd9cacfdedc9656459fbdefe21c528332ca2622caa102a24bce8c5a1d86e4c2c186de72519c6e0249cc153ac57a196a3eba5e38c7f1a5251dda339554460b0edd7e6688ec4b2bac7615623a85b2dd980f51c50182058ef28daa38ca819e7f6bcdea908b899934bf9717ffddb85e0a992787e30a920d6c1d01d5ffa6af5ac0b4cc9be59f3537352d92552903971888b0eb32100dd8e4a3192fc180ac0c49f274c8f52061fe42d2f3db5135cd5771cf20cb0abe50512559f7a775072fda463c82b51bbcd79e1e518860fed4c463a7ddc3fc0f5c29e8f82ef58001a1afbd73c404e7f93a5266c26cc8dec0445482e6d24d2f340
+Entropy.13 = 7badb80300f7b88022a593cabc5f857877e4544cd8aeefcb86b5d35e524e6e9f
+Nonce.13 = d5374c5187e21547541d27c67722f497
+Output.13 = b1791685a44eabdd6f1f65e428e2b943f0e5f1a9f926be96d8b30c089971dec6c5ee3431ea654fb5645d2e8f54b6dcee3d829d6f27b11ddc98d4337e1420d85ae6f82971a5fd6e4bede7d2a211da0a88e7f95e30347aa8f824dd7a7bb08f19bccf1f3b2cfccb37022344aca75900c868da52d251b17d9160755ba26ac5029e4706cba96c9c30199635116916c508095b4f55e6612386eb3740dbebedb085d1d513cee5eeff03d8e2da492d2c5a5016fd6af571013a59c4895769530cbdf820c88618b59153cd839049d0a587af9f2ac5f96bc6c0b3bad00bfc83e164d6d54e86585cc3c292d2e588b4217739107eeea6150efa2aee98565451eeddcc80027e60
+Entropy.14 = 471746177fa3ebbc1f1e06fa42d61d5d491abc82eb7d66e749b87d562a7eff34
+Nonce.14 = 42f8a1ee9b09940e9e1dc64f51a78b4b
+Output.14 = 238c9889284139945e657d2c4312ee3ca2013de69be10bdc8b90d54867889f2c15c6cc933913457d4f5a00bd52b0216d90c56bcb341dde7496218861b083f80d8c933627e19b7bd8b73d6dda1bb0b2b0f1f90e2b453cd063938cec3a08f34e5581c1322329d87709e552a97e8a8c8e8e598a5c5cd6623ad1eb9f7ddd12739b1d157b1020cb8cef19402938d31b74e490c0ce75a9f57a17476df1cffa55de73bb8151071edf396c3b9e4607b07c7e2b45c249f5a8194cca1e97af78be47cec0ab0096cf588f3d4432393a8f5423a165d585e2e5f98fe47510d9415418aba28aab1193261036214c35d8ba04650b4539be6b9f7377e3c75ed236d0e69cce004906
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 9c96a34f68689b8aa8d9c1f6cd0fa7c6f96071caf1bf5556f45bdbf48c6cf0c6
+Nonce.0 = 885c2539046afb1401eb7a5c84dbd9c2
+AdditionalInputA.0 = cb61c4f75c01b578aa233a0bae4881c0a11527c22fe7b34fb6ae62eebcfe6085
+AdditionalInputB.0 = c066fd2eb8e4aea2e7145eda0cfc8bef5eedcc367b1cb4de7eb2c2759fa75bf7
+Output.0 = 782c208ed58044e78b5bbbd8772a3caf25b47d36afeb0d3493c43e01cc66a0ca2faced2ab186bc46825d989cf8ee7c95f8c0b0d2b76e6c8590e72834d4c52445aeceeb7bf5f5d9ac44a12cbd3fa7f4462f856452dc4a929182d2388aa7635b9698a912585df7f560adc5080d53b82bbd7e9e480b00d1da5bb2d480cae2ba8c67d4bf3bfd146a91d6aab39faae1600af2ce3204cabf4c1caee4cfd5e6f8db1902033f7f8d33bc6e0e5d32a320ba735d091f30867b7cb7880c2e3ce6aada79664191df360d35fe9ae7babca41485b06ab49dff528782fbe6f2b0e74996e9ce9272d1ef392be5c17cc62c74be504e6a8731dd9548b0db27e0b7db4886f537883623
+Entropy.1 = 52ebc799bc7b658e84fb2f6760d403821c2350a4fd751d407c456532b16b0987
+Nonce.1 = fc734458c02c5317cd2e38ec1e64f37f
+AdditionalInputA.1 = 50b0b7659b736a300d9938433ee8bcffccaee9761dada3462207ec11d00572cb
+AdditionalInputB.1 = 711f06be74cbc8de412a7addb0855211fc0c20d2f955c5cd0d70c2834b0c1f42
+Output.1 = bd45e9f0591371a72c8d338b1f71894e7a3d9577a7b07b1a065942aa59455a0e41afc58e657debf2a8be99c2b2d3fa6f3f9852a5100cbb687811384d995539787a4dc49830f1bc7184d58f1b9f300b19733de1b6287b6a7a445dcea1f7d4fdea838ab2039ac2bd62813e4b65618af25555b18c8fb9d591e51e902e7b658eec9fe4870052b1b07fd1fcc17d5bd18e09576993ba08dee87600af7134b6facf1e53a0cd5ea027b1eaf7bba679ec4b790d7dcb875b24414a8ab647ec759e3128fe31d8e115241189d5399b6349dadefb24597e14f75e58397578a8d2b409588a630656543ba6984ce8083a7bdf0c74661baa0807d644efafb3fbeb3a98d1c09d70a7
+Entropy.2 = 3d0a38151851da5410908381af03801f73e07426d149f1822d6904b6d5fcc839
+Nonce.2 = 3603d5a8171a2e1a0adc81cf82044ac0
+AdditionalInputA.2 = 6933feb91c17f882725f5f79eceb855d34bf82e01eb9079194b53007bf3408d7
+AdditionalInputB.2 = 6c1701825040b577c9f91247a8d797ae5d3fae28e07a6540a76c92623acabff1
+Output.2 = 7e4cacf28872c3c322a5f614b097d766b806762e652e0fbb697112972f0cb626a9ac2e847479519b92116f7c4dc8e1884cc4a37e8041f5e18a906c97e7c239faccfb8b41d0f6b2fb196b42991cc8b4f4c35e45963182196d7f51eaf08f7a69bbe43227e3768c13527d83aea146d0e1f77d5d1c2217cd6383f7bc2bc574078d9a20754857027885eb65b63b8d51f430f7b431314b96f7eee3966474247ce91a95b2be40b2f08dae914df6a65e01027ad9240ff416479a997135bc1762b3b30b80f7d36ec82c1c0451ead1d8773dd93324141a396290a4dc5c684db96a375fd82c2de9989e4bb2d710e63c4533e62dc673f50358b41b07afb63885447feb1660ec
+Entropy.3 = 44f4d2d9b078320725d5ab9d41648ad8b52f76e1f1160ae6a4956ae7d4459ed9
+Nonce.3 = 29dc8dc0acf8891a6b9bb651a39dd909
+AdditionalInputA.3 = 0cb4e347fee636a60e1fe51fc0d8f1974c4455445ad0a0f009a386b2f23f184f
+AdditionalInputB.3 = f37028b7c6f5fb7dbce83e22b6ba38a1150f239ca495285cc14d8f68978b3f8a
+Output.3 = ab66f5b9283b3a6068b6d8b3f3286951221aa8c860a1995068ce2d0126b8576da410874b8b41fdf9e75171eedee86c9b58cfc8dbbfc4a1df6acb3532b6098439616a04a010e9151a9c41c67e5670705c00024d0509917da47d1d36e4c6a3fe64d62c49e90e4f2b4ddc7f691180bcb4824546351dc796d75a19aba6538b26ea99f3d681965935da7ac5205824503aa3d19ee0419a1046cf9f527621a748a5d5c3860227d7789346cc79a777a2b82917a7d100c8ef5afbc43620bca5d509f35dcaa7eb245534b214a478b73e2743c4e8818059a9e5ee72acdcc2ce8dd44180fd34bed41aaa587bdf7cd093c0e2e3d08793593e8fe2c291386c52ea773240329922
+Entropy.4 = 17051ddf920da86a7f9c4ed3ee7a346b3b58ce19dfa2364ca6fd5a9021931f05
+Nonce.4 = aec5cdd0d86d6345d06623465b6c7a21
+AdditionalInputA.4 = b5320cbcd949fc9534c173f36028c5ea68f921e348674472c6511df59a9cf045
+AdditionalInputB.4 = 93bf72dc74518bee957273b296d756b26a699e397262f53c071475d971a73624
+Output.4 = 03d2f3326a467f5c09a51ef4999b9de9631138a6b68f6f4d95bf49f7ac898c3658904764c2e2bb9146369b73f6e83706b83e59e53b7af21c53652a5c3c0cf0ee4fae56ae223d431895618a09157144a653f4c6febef566766b19fc9042292762f0324ff89cbc22bdac0ada6efa2809f8b1cc5733a42a25386a7f37bb90c1397b882fa7c17ab64f65a6b9ec063ca5ee8c1b82cc520e737e600d3b41cba59f5d5a6f5eaf6d42adffd2e84620d3276fe27159b6e01a47400288695c55073f7d6f27c314f539a4982129e3afa28a33ba0b81bf9c9a9877150ef19696b10d898d888b618fb5f7a4d9709acca57b23e355c140deab44faa97cf1267f29fac85f9dbc21
+Entropy.5 = 12d1f373ee85a3de0fd9e089177bdd6cfe4a9e96d4b455914adba312c62cdbcb
+Nonce.5 = e00da64eefd872ffa483c3ae184c6af1
+AdditionalInputA.5 = 05ba1f27821a05b87d5fa56ad1ddd330b943f62f6dd4f9a749e074db5489d2c5
+AdditionalInputB.5 = a0501b855a9acc67eb9f65cd4c5bedbe47ce7b967940798255ce86dbb9d4fd3e
+Output.5 = b8744ae9f2422e43746466c68ca9d9f43d32a1fd497defeca329697b4aece6f93609564b9afadf3605832c8705dab5eb8ff02a3006b2a7a91609aabaa4807b252a1a7e641c438bd5963b3307ac65231399edc841c3c43cfc23de8a180ca337500ea402fed377d10cc451ca85a6dd2a5d4354d0edf6191668b9ee8e2e9638b47e984fbfe0fc9e46d21e57e3029a2cefb739b0dab91a450e51aecb8c3eea5e9e0a7f699ada48406df6180d8fe1f03b0be0611bb39d91fb927547270327da75a0cf66230e35e27a1f382cc29ff283369cf5a0318ec3b5c71335f5823875b241415b40458b57149e98e2f47fdc948c08316b308c0c137057c6101cb0de490723137f
+Entropy.6 = 820cfc585965e1c605005de29785b2cdc0c4e19b738a70f353ff4e7f9774a9dc
+Nonce.6 = c8d6b9fad0a5a6da250678fbd536e254
+AdditionalInputA.6 = 0fecd9bdc519db21f071f98d36a4050d3a432919f4db8e1136e38e0018e7adbd
+AdditionalInputB.6 = 57411adc70853aa1915ae42708f670fb45eb413a5d1c663abb797e0342b42242
+Output.6 = e71c2ad46f888acf5620faa02c9f37c03dc841966794f4335e378e4872766cb33de96865e7c32fdcbb2cc2c940f44cefa623e1d3a68be8d10d125afa52ba45e27fe463dc32b92ad81b9e6f5945347b53df65dff542f575a58447720f274b25a6596c3e3833a297ad4f31a0ea1032de024f1ca426d2fd410700294978ce87f1b3d8f462f31ffc365b305a93750682ef058692e5131decf7ce540823d516794be16273c375b4afec3b9516fe7b6ddf4246d371de9ca6ae8c9c811818a5f98471647d24cdc074d46f0cd93c1bf01206d8a4a56adff5f801f25bc1ac85125485be9130e48e4aec90bf98f716e77685faed8c3d4ef2fc9ad7ac3bbe7a576c89c82291
+Entropy.7 = 49a8859f1a16f4d17ca84648eb560051b7c4b3afb10d3537bfd58be0e1fb6b50
+Nonce.7 = 107510f7e7c13fb1381c968376740708
+AdditionalInputA.7 = 5ee96d4b5bb691b8cbcc233263bb9968584a9af81b017fedd76c29a9ea140d84
+AdditionalInputB.7 = 5deecad0bb4252453db4d5dd0ba8d4c4b03a6bd3cc627bcbd77eb3a6b25d1732
+Output.7 = 0f901a7323136deeaf06c9788a1489988795f0ffd00f6a636847e6f71fab27a8087e730057acf24cb407c768b4a736882c427e4c8c15e69a8483f6af89d9b7007ce17fb8481f31f0fed3c88e41d8fac36aeade3e8c6831171b2977d0109977a002c04012f62af906c1495a09f1ad63852a05a77a54f0ff1ce35f72faa5b5ebbd366fb07646fa69eb153ccff92a7a9003f953e3707b2af97b6d4b7f3a7fe6d809c4c249478a0151c3aaf3783587fdd8117b28026867452abc8ac5c2c81ff6b5733111c316a6fdc75bc3db89066a5d527c2ef6429b7f6d35a9813dd78a2fe0869459bed16f2bc29d4d0c4f7b9af5b1a2a2a0edd79d2feebe92bfe5ca46500f7315
+Entropy.8 = fcc5a24d87a92eae2414e981da7a979379945782e177c558febcbf8e10aa37b1
+Nonce.8 = 1a0031e5951a961ddbd97505c33a20c1
+AdditionalInputA.8 = 35c92dcef12f587a2a40b5694e9bcadc21add32bb20802555167f154e7174b7b
+AdditionalInputB.8 = 8a88955f8b72bfe8ce5a89a61a58783a0973a143cf89b3a1d6ed779dd2919e01
+Output.8 = b98e6289d3f4ab10f6492e018a4eb3596eacc4bdaa68d2befc821594794390aa4ec4c59baa7560fa069f1ee527b5d774a6e0f3f009b710bf3471302826ff1fbff226291ac779a601c9fde3068ab31e03ca9894ede2ffcd724c3df84c78c83e6d0943815ee1ba44596c6fd06de3c8c615ee5055c6e4b7a9aed1710243d71c7027e45a04f139036bed07ec527bf6df39688d380aa2eaba8828515ff88e9c1ddf81e05185a654a5a44882a721af79b2f6903ad4a7f82666313713d0bc526b7df2a36b7b417a35ff9a85518f5279ffd540dd187211ba5b723f2d85577febf200d1a17b063343757b754bdc27daaf08fee194f5a2d94033491fa09185cf75e4ed5b88
+Entropy.9 = 4a96a3641b34aa30dc6abce810bbc2bc33656111408da0fc30f3886c3df48447
+Nonce.9 = 8497e189704dcc920e6e5c84eb502584
+AdditionalInputA.9 = 9f87cc8980bd29d83c50c57736d8351162df19122933bb14b1dda2968d74dfb7
+AdditionalInputB.9 = f91feb3fdb4acf57164b169e1307902e5e58f6fe4df614b737951e49ad617001
+Output.9 = 21558bba6e1db78e86ede32f3dee1487b5a849f08e1452b3ed338e87f83bebfb5f46f86f89705622c7f4ed5a2aca3da3cd958369a3258cbbe90825ab9c06279f8c79f6a439bf0c969ceb6a423bdbeae55f29dc6664c415e2dee884b089f3486fbfef2bf52a71707665231fdd7e7ad7a9e12c9cd28123e83c882f90b527c909dd2475cdfd155da8e1bcc16dd05206c7d66add9b64f72a683fca04ccd1e2fb86d235f132c900241835d350168f740a6428299ac4b6a4f3f8ebdf298f8dc3f3dd9c1b3c3cfc990ce299a232af0b3904ee858a59d05dff6fa4eef2d65b5877acb229519290871bb09ce4234e25a0e16e255d1c32095cc6710530692c1ab4c0f21608
+Entropy.10 = e6470fd79c149f2c59053d669639f58a66e5f4554b806e0a006e46b428263850
+Nonce.10 = c77f87f88014c409b4bd929425537e28
+AdditionalInputA.10 = cd8e2bbbeaf5be685b8c8b0b86f9eb99fcdd2017d4e39a5648ea57e9ad6280ea
+AdditionalInputB.10 = 6f5230cc7edab284cbc07a320782fc7900a82e36fa20a3e8ceefc82a3ab27e21
+Output.10 = ab9178160a25b4bc6e8b54323db41e0fd016c3ab6d07b0f8108c2ca8388c35ea344b1b919a493f2cb1803ed3a1b8cda434bb5663ec8c690da24bdf40f2740ce2abe7c7a92066312986a9a9836a60c889d87ba3194477d2620409f7d7a77ef874b72145332ca145098e2b9bb56f9e65b2bffb242b4651665eaa856babd26fc6d428b1174ed4d384621791f40babda141a48e35b17f281a6e9b93157b9230c4c774da8d15e8d10a9909f205eb49794e57977b2efdd97682f6353d4afd2c14d6ffde15103f97b48340a68b867b57e00cf39dd20cad29bc7d8724a3efbd3bc5c768ceb22567e2dbd6d1b89a1f342e2d39e6836e28b61a3176938090e1927af0ce0ee
+Entropy.11 = fe903cbad5c25d8e8b8d609eb10af84fe5f59fc0c12d14ecbd2a7b42f76a6101
+Nonce.11 = 0f607f8310695d76b484ad8bb00b1266
+AdditionalInputA.11 = 0706e7908e1dd6769d6e0af00654ba8ad7b528c55f54822135ce8c584ce79c5e
+AdditionalInputB.11 = 57a0e7c596cd4a459ef449b35ece7f802383d678f6e30f2c5f019dd74e1ff4a9
+Output.11 = 469d2ff5091b318b183fa5f78b6c3245d713e5df96d9f05169c9f3cf60d628637e1f3eed9e369af9b1c26ba6a1c221279dbd1d123c8dd910110dab7a2d3eeab995f04b3d5ba646f821971a3f81ac684336b37ec5b73bd5bdb64132d7d61c72d872f775af4ec3fe599b22380242b4bf1e64c694a061937ceb20cf4ca4ec4b6325d2367790170bec3e6c9780635ee1140d55cd1711cbf1448bb19db26f8747025826bf4df0eeca18ecda9b0062b26922e9ae6ba8e379bbda7ab00774591eead3be7cf0adab7802625aac0e438cd8e122d21ec89c8e4753f5b689718d7da631d0df7d76b78d7383cd6a17f456462190cf45932f00c1e26b29ef826f9a8cd2f043cc
+Entropy.12 = 747c41c808449dde40c5d1d62140a625c36c3f7590def00f8ce14088a81fbeb9
+Nonce.12 = 618d12d4b5c2b2f8e7487fe135bd31c6
+AdditionalInputA.12 = 626783eb913b63f6adc5a4fda8841f16ee08ff559130dc7ce948ac439e0a5a15
+AdditionalInputB.12 = c89cb3dfa26989799ed6dd59205630b44a1ed55bf1c261ac28b0d31f5f90cf3b
+Output.12 = ee956b27918f1b94c876fdc5a53a5bc39599bfc101a35363c41a917023652ceb797fe9208cc277a9c864374b3a708d63e2c48d9a5e1bf07a1c11645433eea36583f58ae44291286247e0dfd8ee6e7327010b666c6e079c46bd5a73cbd31e69e9a618bb199fb905ca81a2d3d678e7c7dbab236a6de260a2260f3c244483b6310d96190a7243d4ef847b0f1b02e25d09ff55fd025181d8f3e0fa02709a984cf6bedf67578d8daf113f31cf6371dcb4e170bf6ef45b2416ea4e7f67c66879cda2279f491e677b38c0a3c9025c31139d731a16f93fd61bf4c2da4e442240da8c5575e5c3089fa72d9cb6471256955f668c7cd4a3e7f33427133cc555c196d7f79b4d
+Entropy.13 = dccb23c10b786158d2c6559266677b23c2fb844a2cff749519571c9866b76c3e
+Nonce.13 = 986dbdd32d7d5fbf70602b3c0f6de064
+AdditionalInputA.13 = 4287f47eef5a9651e67f11958a210914382939a31459a3885d598d96cfa6e115
+AdditionalInputB.13 = 8f60356493515f80076717b82c4b6fd753709680826c27917fb716747e45b213
+Output.13 = d59d0efd58992786f0879a26a2da0bdc077d376d459b1eaf8835f6eb958a19017c235b294d23053c5645ab897b9994bd627671f35fd039dd03eddedced1f9b7965f7040ba2677a3d6074e2d4bb8b7a7c9804e4c18d76daa08c19f0ac098bb165a52a89a82b3e18770d7c86e15f147486c7e80345b0daaa57a4affb2e30684cea9273d5f190650d9a8410fb2638bea8c72e33d0eb4c8bc36dc1a61ced57d5791d5868f164f414e5172239955c0cb50733ff5a9bb6e6ad1ec08237cab8188a797f764eb898d9390f3013ef61ab7bb8241b382513a93afa63e40a1544a3c9dd9871f772649d87c4808089467275b182c00df64ca7272b4224af0793a51ca09fdf58
+Entropy.14 = 85bc56f0224c1340634c5c9a3375e6b8ab8c30975e94e0279862017141957217
+Nonce.14 = 5fea742395b8a7b8344fad63b0659bda
+AdditionalInputA.14 = 4b69404b80b6f2fec36a7dff1b194a228761694129efa6c6b9a044f55330ee3f
+AdditionalInputB.14 = 519c4cf1b30500f729e5426d76373c291e26cafceb594c10c96bdb9aef4b42fa
+Output.14 = 53568141a5c09b6b02ac4ab674d341aa6300f8be93c0f36a7376a6850abfce068927510a1b98301aaa29252cfadfe5a2f241abc677e9e70fbca287c579acd276c2eec5c8b508f2b119a40164c6a12c0e0ca1d3d53595bbebe32fda2eef2b613329a614a28d3b374a7b031b49dba74b465a7db60a8dbdcc9e952ea143e9d5a3a651c1b0d6dad79341a7c3fd5816933f2579cc005f3c5655eb8d3f9d1e4562a756ecca3fc1d688c9824391ec8444c6024774a295c44c17fe592694dcf41f305f50a16e07fc28e247bb3d9dd0c52c6fde79df84c8d521606cec9a55f909691f5cfd797b69304dff5b60ac816b0d5046a47c2434127da1fbaa86d2844f5164a9dbdd
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 67d492360c69fd41aca0ac52f5e2ba1820a5e73fb5fe5dbcd00bb9ea05af0523
+Nonce.0 = 5e7d69e187577b0433eee8eab9f77731
+PersonalisationString.0 = 22e4e18124ef50ae514d5146479d83f0be23c5c4df4ba208e5e5b3506d3e104e
+Output.0 = f7aa49abb823c6c41e99e782d098821b9f4029790c701d015b356a1b7c655ff1553180e20cdda09c82864933a079cb81ef033d356ed011ad2777dcca17666127c230198c89f1f372fddb307614d062187f0b4099101617d5c2e1b4792b1d91bf5eec60ba1dbf20e7b070379c3a097a98a043a583718101c052f29dc281d1f666494e11d5f80cded4e6a9385143d0bf33e7d687f8204cc97f57d9f0ddfc205a8efe2787e8f49575ebf83fabf585840212dc6fce1c54df92608b01e7d36538d9ef2b8a6b8910daa3c8ccc72f284cc2f2573412085d232e29eabbe61b27eaa2ed485059198d0ae57bb35a7fa66492c12e782c5774e1abeb202e0744e9d766f2f133
+Entropy.1 = fbf07f5125ca55031fda59f0c0709c58db66e58ec199bab56ab0642366225993
+Nonce.1 = 4a5c510b0831afe7de48dc135df7b01f
+PersonalisationString.1 = f9abdd2ae83f55daad43f94f3294b5c3e3e4a94a0a46dc37876c83a327e6897d
+Output.1 = 223fb23049250be1785a7d89fd0d472214d560528bb98d9e65fa3de2d5bad182f6c960b478562e74408755c4586f9448ed5a4802d0b33d42bb5362008880a82ff662535aa5855f1f0b82009251086a9e0c555cb0ab279c3ebb8c3afa2b2e674cd122c605856f9a2f404c225119c4e46e890afd3ba54548f102bff18fe4590e68c509c137096da4375ddebe8c57ef34150d536d24aa34402a2a17a10b1e06d300cfcad63d3bd788c3e13734ede9c6311f1a03b5bff3d2412de8e4fd116783d8af69cf481a64f461f9d2f80169f2504c1597af0066c4273277a26d11e58fdef365f902c14b72f426c97b97be16d744679636d943ce319fddfd15eda8886bfc46b9
+Entropy.2 = 909f726634f77ca65889f92331c3d3f5a8fb677dddb8447995d7a0d0ea8bcd33
+Nonce.2 = 0f95ca1a3a1dbd5110640b07fc3188b5
+PersonalisationString.2 = dc7c673317e8074c4400a4b23b7cd617fcaa14c3e2c577da0445c888f74c1f65
+Output.2 = 328e94f4af0c77914adde912afc2e7149b438dffadbe65f2b9b5d951b790ac616633d5fa98324631d542ec52129c6cc3cc3c90bf76f8dc916c3f5849d459036f98699d86d4395bc435c5e64c51a1bdaad35bacd9aed2748fc201358efa6aad0c42d675fa00b42553c134109faca026697080a9cd8c47a34aad8df0b70257d6705b91e5237d6ba29a19f17ae358a38faa28e0f6315bb9102f67e2c66330808b97e46b98c3d4f0d74b8fecb66acfc19974588e67e089a0a7f81933e8427b17db4fd3cf44d04b6251131330be52e2f924beed7a3aed905178732a5bff28fb7387b438cc61fc47cb6a7f143475f12d06c80066178d1d27882fc20e90e579fb30a19c
+Entropy.3 = 1cf9663b23982e38ff659f30f152f4fff812d21c565de45d1ae0ccc4473a36e2
+Nonce.3 = 21ed13b5925fd53b016a08337516157f
+PersonalisationString.3 = 923a425b4b1f9c1f7406ef300d09ff05d9a52befa2a2f55067ea541816a1016a
+Output.3 = 9e2dc48e266427a81d4bd74b802030748e53b8a0a76010fb76bb6b612cb6bcb76902ddebed71fec51caaef13146455b01d1e6e4bde4fd1d57ae9945374e0e4bd7ef78dcdf9e23abd86c6dfc013c49a211878ce1d3840a0263aeed12266542eb74df2a13542b681d768eff64e1725e209ce85e9148b47d50b7435065d760bde93fb6b6762bf8b260aab6ec38dc43a24f9816052d23f669c84ce8b6cb323949a4ea2d1ff9f4d4a356df45cd0235883d30068837f3fca8ce0430c0ea7e97e873a8c7d6b0894d6d8e20c0f52e4106d19af83a7b3540a9b20c099f3896b8b009e89f76cca8127c04c3c34371c04501fd03adad0f81b7e742705039332fad327ea0eac
+Entropy.4 = adc00d4f536f383b7df5ace4eb9548a5febc3e9c2903b53f88ba0be65ae6204b
+Nonce.4 = 6a39430795557e5188c0d1306614cf71
+PersonalisationString.4 = a332597b684c8fa2b5973fd526ffd55c99fc7e3416395794fb92aeb6aa3cf878
+Output.4 = 0c28bbc89dde0e01a853433536a54891e6b0f9e4066ee5eeff40d48c69d49280072302982aaab83a98e486e68888472207d51bb4dc3b28408ed04996045c27e0371ed0d09b197ea733fa32e67bfcbdc537d8e576f1811e9a44b63e400e06024cab6c42ffe77ffb9691f42871e7fed672de1ace37c241d49b38ed2bd53a6718d9ce385737f22e245146781ba0d6d4ec0198ce963072dd4aa085065f27965d899ebc10674f82bed0a4863441aadbcb9dff6020fabafd3dcb147f20814933a7f7ab22fc375d7030b2ffee2ce3298737bbc2c549ccb9c10dd9c9decf58896e3d8367882c89b90738923f8524004b7ed5433c28a9546ceb7e34864510f46f1bcb5550
+Entropy.5 = 8d67d1d0a85764dc1534a1177cfd14e6711171682c9ef5f037d2318bdc02d55d
+Nonce.5 = 4485e5ec300e024d7434ac8012291e82
+PersonalisationString.5 = c2fbb8c66e89908561af60bd468c39d2bd5ad4a66f9a8dd08185fab68644862e
+Output.5 = edfd24b72b3865e61915e79f3338ede16cc8e46cc8a694c52c491b981ca97bb11be78d3c30ccf03c1b03a7f7335b9c4214f362d437573362273d15240579ce2aa8745ef8fa4dda78cb3e939793e2fef43083bc699e56c9a7352ef14f12633e4fadd1a948afa08902ba6d09c494616f27e1b80575ec8720dded7a4bf4bb1fd0d9552caec2b033fcaab937ce7cfdee8497c7a0d3eee81969832cc8eb3fc8b9da97ebda4aae4a85ab99a0a9a09982c2c26f67d81dfd6216a76f06f50dc7286b83b9b54b79b5210aaff61bb8dec5cf670bc2d647fc3a126a4283d724d8a64c919628d1b97278bdd5de6dcc5baa6879ea9645b6b7720239eabd9a71df1b57cea0bc2c
+Entropy.6 = eebca3dd0a97fd507b9041e08a23a07390e009a4a2551dabfac0378704937f3c
+Nonce.6 = 727db88630875d690eb62030399672e4
+PersonalisationString.6 = 55c4f548879f4ddd11d44804732bb0a18c7cea3862f0ec7678eba8c751d75cf5
+Output.6 = 753723803f7005d26b1bcea4078bebdfc5b97dbcc62386f6c79e5b51df4b6902455ebe8b5f12e1220341c0dacc3e07b6b8355c3f372abbbc04e6a5ac72ddc0da1a32031b3178e6332f24eb0a98ff12a550a3bb8ea052574984e19b5a60a6dd7575e263be1ce9c26ad7251df75e4d49acdf9ad7ba21a75e156b7c8eef7cd77559200e22f573858b8485ab1ef991ba7764155da74b96f36157a23a3019527e96c8312dba922cf5779f23aa64f1860dd17ecfd82f37689f6fc618d204325cf4305ca5da09ad2eeba06884ec1919fbadd6eccfbc17dbc2337fceb88579368e0f305d70469f8e4794f513c88a096d3012dd43fdc1179dc27b8c1569ecceb3a0f5d44c
+Entropy.7 = 8268ec3826db5adbf921e9739a05c988df9a28e3621a68f584c9fc4292754275
+Nonce.7 = ed90c6b8824a0617f3b325c3e3900def
+PersonalisationString.7 = 9ce84503c8ef7e8f238c98d6bc9278c83e1f00d0d6db677874878d711f3662f8
+Output.7 = 7f761255e03be3b9fe8cfb2485ec0df22b954bec934f5b48fa64d63622d4a80197e9d8bcbafb181296e569f0ffdee8fddf44546a5ecde0d6812c9800903249cd23781769b1d2477d1afeb47ef07dcde6b9505ac3ab0ea7bc62220cec17f2594c9922b4704d7e1054251667c283622d5ff67446a3176a39bf5dcbc229dd45b71d7e71cfcb04dd1aa009fb5c4e4eb11c20b9ebb6963d37790d079c51c05ae169a9df659ac2547dfa1988ef9cd7def2b8cf5c32d8ea47dfe900fa97c40bff96ff4b7d1a3b2b51b34ab0075d32dc9e8692f9e735f0193a54d598879a311f066b0aeacbc0e4bcd709a3123de58ed71e6db6fbe4af3d9beca6fd4c018cf5cc1baa3533
+Entropy.8 = 6ba76df39a3fba79b29ead091c7b7bb0066d71b497b58a59d4c93eb3c8db902b
+Nonce.8 = cd24098e11d97aee427110bb29fde68b
+PersonalisationString.8 = ab091ecbe6b462a79e11bf0efdfcbfbab0604baa1a4d1dba1cd2e0a1b691313e
+Output.8 = 17f40c6a90ea77d29c6ce0ae5575baffcfb79d5ca15d70b2b1fcdb0a88666335b674ac5fcd48becf72be1f8a73c55ba60264c2169b68fc3a1f2dcf99d9b5176200fc66ad498ede17290f562a0aa397997a0cdb72b4936f1a58b335fa1ab0ae9362e0cc11e6adfb4d41aa4df6e2a8da87bfee28b7bcb7deec686f54d5b20087dae8d995e065c7d3c1da4c5c7b99fda3a7fd0a5e2cf6f471fa8cbcc700aaad3463640e9abe9d4465fe66023ce80b183cd1647f4ef527ce26305d43d480bbca239fd8210f09df21aee1ba40c07f05861b23cf971c0a056b4326479d0ae03479ab5ef19c3b735602360fa1b5df07385a1c1e5c509c3b4f55b398981ac62080595637
+Entropy.9 = e048a1fb7d64b7217fda281cb41776a2d4b46de489b90d5f9772dac5477956bc
+Nonce.9 = 5353abb44215646a8f7c05eb53c94a2a
+PersonalisationString.9 = ce0cb9f85badc9cd5f15e573a99f00a4060b66d5ea00dd77139b95468e8ea82f
+Output.9 = ea23957103cdecdb012b42012c1b10afd88a028b9559be9e7e3f1897dafeaf4f8e5f927b93b5718a3127b89ac84544bea9424acb4f06395def1ee054fe944c6339a8484941aaa5c92beede9cec976fc4167b1d0d0a29a63f59f54c7b5ab8c87b6ae91475ca57bb11c0dbdae426681e2c1261983252fad76c51acaaef65b95c9854778812f0bfb6e6abd7b8d17e99cb63a8ab4e6c2498fd12ec11fa7baccfd9a6f1241d65d79c2db7070b3a5c781a4fa119c1a88592c8995aca893b18ad43bff40c1515d18407f34e1eec70547fa0b0d25e1a2bb7c31ce253b2fec2771c62ca35936a39be7063be5ef934d4e2e7982b66ad8ea6ed7bccb664ae2494f795170cec
+Entropy.10 = 25409ba4ab52a0e452e799229cd057bf06704578a490c5d1e6835fcf542a7768
+Nonce.10 = eb75bbb6f4578a1152c0fcf919f77625
+PersonalisationString.10 = 1fb58175e5d8cc325bba59fdba58fc8c2a3f81a178e606f381c32a54e5c94765
+Output.10 = c156c12387a228b4d71db7f4be9d58b0ef09a7989cf0cf4f3b0945cb872c45e07b8129c18bd407bf27e83b2dfc24058c83f96bcd2ddd482f678102bf17ed0632c7321b66d3f1d27364d99db713f5d9e7e1347096eafcc46efac0acd96bf0c3971bd862c94af3e25cda255bd604872f565374dd03a37105e26a5b7f456cd36f22af3cb979689745c72bc1eda048912afa2b13346a819bc9809d80b4b1288ef8ade5d2db60617d89a66d63db70cd66e7581594670a2c60d591c578f6683e7b952047943795ec3501fdbaab4ddc3c075cde070b5eae9d0cbe76c039ee69ac691a35153122dc03b3657fedba475d3261d8a989d7fd4498e0e47d54d091c83d11308e
+Entropy.11 = d819597700d01af57ab5bb0d684cd587315da065a308dfb0819a297bcca33a5c
+Nonce.11 = 2a350973b91e7fc46fe8dc948e04b1e9
+PersonalisationString.11 = d644aeea2ef1aa8a84b44140b1f293fb6dee3e786acdaaa0639ce5d55ac90970
+Output.11 = c9f229c3a02de30395f9b55416cc4b81ca6ef2668e1d611ab58b1c8254f0091d57a808da88aa816b0901684689347fd4eb2da833a48be4140ad303735210f21937c59fe4b5601a5df8dfc48e3bc2a2e1330438646a946edaa60aaaa6bf942efdf03977e48cc6c24e095242bb9ce8e10521fc1847f57df099ab5d13901e4230a4f35c0d6c02b851607d5f9f9908884c5348eb64817dbcc32b0ecb9887fd94272ca5d8ba9e7d3730fe1457fcc8ee00b4ffdb0a184be8db8aa3ab97803ed95a2014133e5e0d00fa5420668810c4a90966ac63e0d780474f6adae9049d9446ad2a7eb1bca57e8a5f47649dca17d29939c8862e0a2ca63298744069cd1b410a0d5bd4
+Entropy.12 = cda7b628ed5b62786f6931c1194ef7dfa888a3b81991c7f5f140f1c39118a801
+Nonce.12 = 2061ad369e7cc487dcf0ae6192dc5b42
+PersonalisationString.12 = 7e915dd5000824059f6165d02811fc38fad6b954f8b168d4822a45302f356615
+Output.12 = c3a0296844d24b4f0e43120713a4cfb272b40f01d2548f296645c0ce3d8c5644077c3051cd882aff85e692ec111008f46473abfa461dfc52ca5e0ef79cf5489fdd16a26d9f1b9cbc00201720ea3dd32afda2b09777e5bc78f8b345f66d317bd9edbd0d836c8bc1e8cd5d793d0702f7eac2cb51562c2ea2babfb220234139e3ece41e9000212285fedd4863a9c4851cecd4e1c17a5c364dc650411aeba5089b88ca63d35ca4bc4e4f1d0ba31b3f4c890a6e49f90ec7e203ac84d627361e5b6c4e31f23e72b93cd4e40a7d284442e52f0d8b1444c48c70703f12cfe733240667aa2c77958783490df8b84a0eeef0a12885c0765e36af6677635ea30542c2f5f43f
+Entropy.13 = 8e3f8c69a382e524c4ed5ae465cd077b2541ab17efbcbbd726e3a93cd7be34d8
+Nonce.13 = dd87a12de5a73084da6760bbfd1aa5ba
+PersonalisationString.13 = 5ac9d0b995f41bb75cb0356e54fe2ea21d65db45f19b2a0f5135b6b533cbc34b
+Output.13 = 123f7e607e4f02ea8eb5dd74660a9536056550377b46bfe0815aafba7578c3d30e750339d7f20f240b5e6e2e2cd4eec10983f20e09772e904dcbab56306eb99f7be4f57b64c3eec9a78be8149663096e9d6f7946a1a5f32f2eb13c580dd6d52c7428d4c4aca1ed77f8c9f303111961d0e2d61af6bb76920101995b2c633eca98affac8686ad66d37d1af91fb6cae8132857eccaf56f6e87179279306cdf33260383d39fa19872d8385057bc386ad8d3599a7cce183997418e7e249eb71e3c0d11fbd048f88bf1d997560df21eae81f35486481ec58414b2f7acfd0a6a03531e3533ed67e705894797c1cc4be841d578876ddd7287e0ab10f8e0790f07e078efb
+Entropy.14 = c88a94c68f5c6560d90559173f8b9fd04a83a0f6578b22f057c781408dc1f6d2
+Nonce.14 = 8680d7b3f0a8ae576bb0f75364b463ea
+PersonalisationString.14 = c0bf8f2ca4efb48b8dca73ca7148da3cd5981c5a459be32db5a14fc7762c68d6
+Output.14 = 269b3b656e58f9aeed32c80700d9d1b863b0253b3b33155cc0849efbedfa51cff82262c9342cff7f1a7a58a5954fe66547baa1831fee55ae0d322674c6c784095f43b30c1887fb9fa5e7e7f1905da2808ab810ecd224ab403b6f562bac54e65cf7f0473991ce7d7cbc1a669a022fde3141a9880d974b7ede2fad24a3263570443cab0e8017d242fb4c2032dc8be56d8fc1e0e8f92254c7480e4941259ecc29ea47a1d11e074148b259ff95a94711d767f0655f1e0574dfdc4ae4f27b12015af86aefd36f6c10056c3d83e639e3641cdd8ba178f7779dcf502bab3d7588cffb72f6489981aaa7139c255df0e76bf6bba32e4f547327da4597745b15042869b2c2
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 31e8d6fbdc9026b0708405c20b558fcc0a107f3fdc836fe056f020df30d9dc57
+Nonce.0 = 2b8bbab9b486abb659c4ae8ff5978e22
+PersonalisationString.0 = 949eb753762869aa5ea0ce725523595f9bc9b219735113e71feab228d0872c38
+AdditionalInputA.0 = 88f1180d4ef564315280a9692f107ed9c0639d79bb7040dfc3b7d58bf24ef8f5
+AdditionalInputB.0 = f4fc8a26e0ad181838f1399fe5b8a4b86670e92ab92b2c4daf3913470724d3f2
+Output.0 = 10509641332a4d72a3c5936512c37cb9ab9874693902ee4c76e963675627ef86aa2e7d7029a152b800072fc53eeb6b41d12f481cde99b467dac3486836f6e146e9a79d3fb90d9b26f213ddbfac590ca083ed83fde4924395d25b645b96a6983e65fd662cae66112ebfa990f09b86b01270b7f0ef35f183eb01ffcbd7d5ec6adc4839cf3814dac858e013c6d79528ef273dd83724ccdc82b73dc63698fcf8ef0924f27b6a49d6d38f0ce261aa5a0a88779e47a413c29e1d7d20e4ab914bbabd5e6e0241cf53263a8efa321b4a632eb062b255c0ce5a0833114161dd073dd037967a1f03daf2dd7e927b801b40e62f26c0872ea100132807650232126aa8f29d70
+Entropy.1 = 2da0fc2bfa2be0783bb0c2dd7715a9eb9f6d242c410c94cbc3d0e9a3fca51833
+Nonce.1 = 06cc9be12a59a27227b4c17176e120d3
+PersonalisationString.1 = 8af60799a6550e35b9716abba2ac41b4b83d7d6356b46430018f7b539cb73289
+AdditionalInputA.1 = 104a667e2ca3d224ba0621f3f88a8c4b3209455c70e9d290129fa5938368f8b9
+AdditionalInputB.1 = 405fbb0f4395c202c2c1d2998a661b105152b9022b25f09bf9e9d72d1f098785
+Output.1 = f27ec9f8757be0de04c52bfa3065b472cb299293937b0af7717ad7183a614a093915f6301c7c470c4377b8ea07b946bbba032f056bb75a461aff3c3b7788ff650da96d60421b12b7039377d1d49ff12b30573d507827adb19d5e7b147721c8a07e5a697e69b04427e86bd250f129bb6b1e66946b7f3cbcb3af6e9ea76141d85e3819f1abe9ee1d7aa255956b6429892fbc918ca1968725f07d57983d5d1751c2281e3715ecc24a20c6f81d0affea22efb98af0aeb51e28894835a8d1de57140c6cd5e4dcfbe4d75f55ce1723b4bdd3c6f1e888c5b4eacf6adf0a1d3c2557a192fc5f5d6b315e6dbfaeea98c8a20c7372551936e93a02b835842109938a21d508
+Entropy.2 = 8bd067ccdb7b20356f4b69579a0d94ae74e8fa03ec51f23c9926f6ce183640d6
+Nonce.2 = 72d8095713f90db89f79394350f230ee
+PersonalisationString.2 = c97e413f1f6e95c35a4cde25c12c536ef79953a48e9bf2aa7a35dfdf5b810f85
+AdditionalInputA.2 = 15f793339b41124cef9dc41fefcf8ac1c593ee1ad6d4a4969156b1d8eead4a7e
+AdditionalInputB.2 = 30b86ca9b7d78adab135984ed7be67aa85e3abf4379756ab5f775f986ecb339f
+Output.2 = cb2f56f407197e0479a093eb4beaf92883275c70f7571477a6c3beeb71035b711a888aeaa8bb186782875dda6b05f3ad3df502b55f6b5eacf486447ba641c8688dd84727267d8ac91b04f192308567295537f12aac36aaf8f5c436a683463cb4bac86affcd653b5e1960abd94cca25064135f0c2bead0007917191cef1cf2d3207682e73714e7f7e3e1c2efae6b8d1c7fa46f0e1f75a6e8ac84659787ff0cd70d02311015c2dd926324d82cf38489ae450a01fd09a4dc411d62cde553947e30a6ddd6153fae1575e3e5222993584311b45cb091ad35484b8b75a90b6994faffec4820187b7b6ed20e1db84b0e6bc1fee1117b86b422b32787dff56b7a7923192
+Entropy.3 = 0e18475cc467fa2d74121b23d255f883dc98cf089d8293c90d27b9abd46ce5b7
+Nonce.3 = b5efdaecde8aee390772a53a242b1a04
+PersonalisationString.3 = a6fc0bbfa739da1a63b3cd421f08796a5973b60e9a4a047dedfc5cc50370d9b5
+AdditionalInputA.3 = aae86525c81ea75a989d2a4abc1e0abc2dd884d9d56c06cf57741295b2f6c8f3
+AdditionalInputB.3 = ffa8562e213fafef3c44058fa2273060ff7269335e14ae8e749e6c077912aba4
+Output.3 = 6b305c9721936264c1c67fc487703eb61b226f053532527b466c2d3079652347da3b91cd829054d75bdacedf744be63526f7e49de08008fda4ea71732e60568eea31f1b4ecfcbfeb9bfe876470dfffe1ca9347862392602145c4f300ee8a38bbfc6eca65f4064ae8a8066bbbf174cda392467a1706790ec8863d2cf52ea3d8f206c4a873e412a49c1591e30196ddfc49f17df7b082f90fe7b39af699fe5b1d99e3a371d3e5b14fc64dd67c788d8220ca1f381cd6ab6c5cf139400bd9993d0526bc2fcc4be5d50f90765fe533fc5475031f526e24cf9cfba075b7ca4d2016cea733aa63910df56d21942f3ed7f2306cd668ea6df522240af8fae9d5cc659782db
+Entropy.4 = 6b16be85b90e3505ea941adb6311223460d8fccff7f6a4c9aacdd65ae59e45aa
+Nonce.4 = a8ecc0ec169130c03d5e0fac59ec2ab8
+PersonalisationString.4 = eacca2a0e501afe855db355548811ac6252f6ae7b585d27eaa4d96b0f84e841c
+AdditionalInputA.4 = 9227378b4ffdf15e31abb003647624ccb297384969fce30b4e823e3e0a121f57
+AdditionalInputB.4 = d2ad216c4a649be4a4afab984e6b421025ef06c824517117060df6602b9447bb
+Output.4 = 40da3a7999c6969eb06d1d632a8ccbca514ec947bae07c2436d34477348b84fb996804cc1d7ae1d2b7ebd9bd16a7516cb703581312a290b3b8e3a999381149fc4f38218471591716e25a192a72fc9888eb4b22ab377a783d9939ada6eeb1c2c8da33dbd5562ba5ff0016a5da8aa3550862930ebec3d2f8c24c3b4de0926e835101c1668ad3afa73cb937c05456aa8be3572b07ab2ef8c342c33852989a15de2a2ded0c5eb0cdfcbef5c06ffcb308f6b8e20083b45f5924fde6efc8c3169be57f3c0ba0ac72ee4be386fb8e489fc36c01187ee40292c5f58ca9f7a3673abcc22577e009b92826a59b48465d77171aabd8238bcefce704bc7890d132fb80e3dd6e
+Entropy.5 = 9f942face5b5f3e682a9cf379636ff8acca12c337bf1c88d28e0b5c4cdb18975
+Nonce.5 = ed8a2a285ae5001b0c1f9827128fddf3
+PersonalisationString.5 = d1d855326c6d51d80e935c6b57bc1abd679404706070c6aaa7180cfc1cc2a70c
+AdditionalInputA.5 = 2ae71cf92ad651ae3ac7879a67d348609401422d44a7d2e1e9170c3e4ff24efd
+AdditionalInputB.5 = cebe3f8785219b9a60c2640151fb43dd1c81b21630c38526016f9ef7508d87e4
+Output.5 = 3bd29f037621d985e6e42de47ab6f7bb79893a7c5e532ca914afe871cd3d63313cec5e9bc8a2c5d1c5d87d7b016f7b15c4e0c843f37b0f57e3e76503f085f5ba659228b31727418c0b8e5d5cd505b140345557ae5de1bce4adcfc960a575d44363be73f568dcdf0d91c0f380f6e164cb1864a8739aa6711e376966d7d2767e926f3cf353e0b6f3fbba99f999e4ae3f8856d45a7d273db353b8edb00bab99261095d2b1cc3cdc3d25e3e1ef27505972f7f3334a6e954622169fa28a9e19217d96ab329150aa6d585d7698ffc22d581cd6cf68e11d98d259c2797a664dd12f5e8796609963ece539803e325e54a8b57f93fc547ffeb2ce7ca610391b58459e77f6
+Entropy.6 = 9a08a378fb535b1a8ffc730398f4071242c6954c248282ade345a50fcee38c42
+Nonce.6 = 006d8c510f406634360bed0fdb7dc12c
+PersonalisationString.6 = 0025cb801101a8d9d4647c02a0915c6b9639722b90e7ef88aab9dba3c18d80bc
+AdditionalInputA.6 = 99bac0346fac6b765bcc9caf8e2276fd75db65d2c182e272fd7dc66de3006482
+AdditionalInputB.6 = 349bfe2d3728eaab69761b461e6bd96206dedd6540ac510ad2b65f198a1400d1
+Output.6 = 0e383143abc652bd1e12e3a85c46c8acd1f97821543cfda5d9a05417def21b59821a174b58ddd1f1a8e2ada4e28d7806b43b693ea70fef21ec63fbf5cf11cfbd2075f3d242830fd708ff05e9fefeffb23c393b25ca503ac84046c7f020435c914238f18c35f7d3c293740caa7bf2eaa2a21a6028faccc13869bb734e41a515683acf08c223b9f8aaf3372369702a23eb6010b375ee7bbeac5c40c209db6369133d5026b97d4ccf588ec09a0427b8d50411bdc867f668dcdfd6b881ceb91820c24e79dac53aece4d3253c189203aa191e31fa1fdbf80ae6a8165a094b574c123bf7bdd15ff001049851a702f793871fcffb491ca38def8bdef9f1f5d48a9188ba
+Entropy.7 = 7e745954ba8fe961c0093c552de15a469763640677b53628ff46a3062ca8fc92
+Nonce.7 = a89bde60e20c10f33bc195221c184d72
+PersonalisationString.7 = 3127891b40deadefe09e9fb727fa91e1111f77133cfe306babd4dd3089043e53
+AdditionalInputA.7 = 6bf082cb8861f45272f9ffba27adef92d2b210838e9a619e1ab055e2c310a558
+AdditionalInputB.7 = 999adc41ddebd8cfc328212a267d111cb9bfdf4dd165dbf5dbc9ccfa1376b1f7
+Output.7 = edcc91b47943c29bdcad2718bdfb61b42fd998436b0e2608123857b21ed9ee2831b6da585b63ef872f9604385b05f6d2082c7c81c6eae7bf4238bb2b4db6168854368a17e4f62ce48d4ee8bc18ca5598c16f8b3b03d1927483ce918877e388d4c5364818d357e409f4d8eb6a6fab102d682e8477b6d523bad31c4e96ab529fc987d87bf4f78ca186dc7d3d9f60a2210b73f6e12419f847ee6987f5cbf3e69d43625a048387da06f392d861dcfb2e24cc5db300ac74350aed4e3bd93c62002602ba0798bedb1cc03a92a939534aab0242d4d624503580ebe899c6822d3ab14b3b52755d3826a05d81ad12eaf55dd4c2e660519900629418dbdee42ba85d82d129
+Entropy.8 = d209666b09eadb34238b15eb97ebee268f095ccf8de068e45187eb691aedbe25
+Nonce.8 = 24633a170a9b3b9cedfcde94dc8545f3
+PersonalisationString.8 = 298a8b306373a4c6065b9309b1c7e0f6fbe4ea23b8e0b16608e7b30c0d84ea11
+AdditionalInputA.8 = f60ca1359b5dbf63404e306e073361ecb9ff9b9396388fc7a3e7b3b3224c86e7
+AdditionalInputB.8 = 49a4b2bc9afc34a77894cc2c39f5f632389a369e70cd6338845676fcd6e838ac
+Output.8 = 7c40b03b7b1aea5526ea092d9129ef4ce2319864624aa70eea4207ac5703ed90cbe9e274d445e65a8ae1f8c0961db98c3a8df6b687c1771fb936a18ca764b20eadd6eb84b8c9b617b51d2a61cb6ae62d07741b5b03033da15ee8194f155227a5dd2c34c251fd4986e1c32937e6a7e040d843b2de983ae272cc25049061a6f5cd85dc04ce33b23a3af8527331a0874227f2f72a2882b55c31a3751a8dd0ee569cf254ea9d0cccb8bf3358bff46a9e370b7b21c75a96ce2e393d37fe0c2630a29d4daad9aa4479aeaf8bbbaba3dff12cbdea796827b80189d531562d89e3b13b3d5bdcad13710846d2b68b3dfee11e3143eb4b207cd03b924ce5cbfadb6111f0e3
+Entropy.9 = 4be833d06b234ae76f76f4a7f5f6dca13fbf5fa96fbbdcf4413143c1dadf4aa9
+Nonce.9 = b474266a8a849772728daa323cd39f01
+PersonalisationString.9 = a8416550b7e8ae43e7d23ac458d3e9a6f519124dcca4af19d9cdc3da491d1df4
+AdditionalInputA.9 = 9a2dc8a1ff7206518d04daa198291eca617badfda54bd22237f9a173e9cdf312
+AdditionalInputB.9 = 7822e3112bdb3b625ccea19f509b332879658c03079f3e70423a9911427d5d57
+Output.9 = 96d24630f653584ce05b24587f2d93cf6bf579abe0b6e2de96a12f706e2942b6329d5601b36b00026c8da2b4659150c4e1b47adae5b1d83cdffb841a0c5dc95c5ca7dbf92f8f6a6f2e849443bd3fe997660856556df7b7fbda85ac8fe7c367c228d7c616a3719027fc4e35819ed0e64c0a4705fbdf9990c1108805a347a2f02d9098f2710b0225bb0293aa093a6c1823959f2a6bb9334b7c84c3477a5edbf87f3b379a5655fc443bef0e71b1beb5f4ef4aeb5568b20994e8e895c40867b09eb105779bf6b2a751e14d06a7eaaceab83881ce70b69ec7785289839f72fba20e8212c61f7f9b6398c901daa6e4ac49e1567388f834798dca2406ed974ce0bbec1a
+Entropy.10 = de3371b2318c14c018d7a956b6be9e48cc8527fbd32a00bec1332cc59254ba90
+Nonce.10 = c9bb8570480ee0bd7ce2320280ccc8da
+PersonalisationString.10 = 01a0375aff8275bd7e03ba2ad4eb1f1e1d76fd13e328166d0e79522e4d3e3aa8
+AdditionalInputA.10 = eb2faef54c850df27a0d441b2cfafc980c7d041b56fc23e237d83e2cb303180a
+AdditionalInputB.10 = 509182b16622938ccfb82685e78a8b38c0ac5c36874031bcbb76f9a71430d4f5
+Output.10 = cba7cd4e19320e1cd00c6a7e20bd543cfe3fe08fe6b9a47803da640ed3bcd4376ccd142bca574c3be77e444ec008476c654922ca0a4aa582fc7fc0f45b69fcf24512872b21192e89fe8fc020076b370b98de505c88a06b00aaa7ed0ec7ee478ee779d2abe95e4052ea2d9968bc16d2fb8c01c9dbb1f2ec2d6d55c133d32a229cf948a0b2f812a7859a897f00277e83cf2a394faa0b85e2003cd1f54ec3ad1f53f03cdda8b726407175f0888e7ab923248ad6d92184bc3a8971f92e6e1e09dda19f3db72ddee8f3188b6100cde7272c740c74c16ac159b62087bf00ee1319e225be2a4d2d49a41c79646eb0e3bb338398b5b459ec5dec4f75f0dcba50ffbfa19c
+Entropy.11 = 3c0d31c4b26c7b82e5bbbe8a6f2c016f61cd7e9988a3f025f4cd0273d64b6c3e
+Nonce.11 = b8faa8fda84f68331db3734c0a5c8d22
+PersonalisationString.11 = 1a7cd41cecb03bfb8d3e9b1fa50c19e77062ebd019e2d4f7f078afc64ae1fe73
+AdditionalInputA.11 = f9f4162c3866486932d8976adaed4aace7f4c7f103395bc7adba35caae20cda2
+AdditionalInputB.11 = 4f33cbd20b4422a5285336d63b0ae4ff1f38176e1373702347ea39812bb9365d
+Output.11 = a6fe9127f85cdd8758c05c64896375a06e2f4198a3e98555de0cd3bbba0d834ad54defa2b6740d34151c7ff12a4fc361673dfc75e7e9296320460b7c907a8ebfb86953646188222c7834704936c3bd635c5ef7aa7a80d0f59d581292c906333c8bd35d9382fb4db237e992d4b8cb82e6acae241cb5a97e43cc2a3f877885e3cc83bc25bfc900088c746f2fc6566a74bc2966429c1ce6e2790a0116930c41be92dd2c0c579c31bb3955ecbd4d3bbe436ca939959d2def816185f2262110b8ecbd57003d6ad86cfaa6b776c74f77409a5333e57e8b416cc5f0f6c2bdc16344003f0eeb2b87a2db01a85ebf4677b87e75d69e8f6743aff5ea9ca6da4f7776afaaec
+Entropy.12 = ba63b08d942ebfe09327bf80106744393d980061e15f387dc23ab452f2b35646
+Nonce.12 = f60b6bf40766be9d9f9bbedb6205175b
+PersonalisationString.12 = 0e87ff3741d7377f840a7b5ac45c2d146ac0cd88c7e715746ac3e6d0cd0867a2
+AdditionalInputA.12 = 286593d37c6cf3c9154b256f82338cd3d72722d54eeebf945a9f152ee1243829
+AdditionalInputB.12 = 437815fad750af17566c43e04403bcd5dae177111effcc4766cc5e618332f398
+Output.12 = 9a438c0f075f6dadc1b68776e1c3651896110e6a03fd1d7fd95412caf21f945752de261742a6d3af8f171d34158fdace6f2f30d97d076e1de893a93e56a43efa46d5a3eeb1166dcec5936e89a911c48c3af61a82456d563eace8c0d3e7988937331219f30aaf7352f347df73eaade6c1831c20b9dbb622ac786b4a6b58ea09dc884806bed493b42477d47c8b6f06e73b070306374d506d48108ce8941368a455054e45f0409daa9f7dd2f3073ae8285615d990f905aedd9f8af0a9587136792107d4ef67683ee1be64a68ebc206c7ad0d5644e15b64af9825312a75c2ad56907930f9d957ca36044a3308e5167c8072292b010c8235c7500ee1f3283d837ce8b
+Entropy.13 = de2d8369fa5ce79a177da7d9e8961876f39d266ada2836bd7703a7fad2874e1c
+Nonce.13 = d81c2f1bdd28c47cf29c01e4d98a7af2
+PersonalisationString.13 = 0abc4e24e778ee25901eae2a8efc99314ae9433462cfbf2e0b9eb864c0c6e0fa
+AdditionalInputA.13 = 69cab36f38ae07babf50c3b1a39df5cbdb3c89ba7e1e60c0da8cff10547cb078
+AdditionalInputB.13 = 819603ce2fa8188e13a43f12d40de27d38b5653d0b91b8625d8a837ea7bdcee8
+Output.13 = 49d569422a284f6d2d2d08e50d005a3be90c6b559e78637935fde60f6ab6725ef8f2b95694b91fd9073b315a30153079c2bfd26a346234e3f3ee8692df35c603411005417d2cfd1a15125a7a42e291c58481419558503e6d8f54a3464befd6d13ca91e534115d2d1cff137ab3dc281e0c28f9c090bc66ccefd6e6cb6337ff2ce7ea22410cf548a0aaf77ed3f4082dce69409e140f4653088be2909fa96ec48a1dd9f02a187883b96eaeffc50523a6467a691b5cf8c0f20d6d658402cdbee3b5bbce602f922b1319b50fe45d60c1758b9f721c919b38a32c118e55dc4e79f7bce966869b502cec92f0e6c5a514b04f87339f368ceb1ae4a870958f6aa56ce8717
+Entropy.14 = d1922372f788d6b1285df63bb3e05d8a77b7055b3a31a3310ea51524bfbc36d3
+Nonce.14 = 247717665b4d71ef9e2855d40cb962bd
+PersonalisationString.14 = 7593c7841c5bc0d0a68a49ef0e4fd311e84d16652a8f15ef56ef10b00021f255
+AdditionalInputA.14 = 64278bb6b8224b93c0b5339726fb752f6d81e85b204d76376d99779ff1f86cae
+AdditionalInputB.14 = 4995815c060c80e9bead55dfe823b869862bd0e5b4357afe810a53c68d4b0e7b
+Output.14 = 9b4249e1e692153ecd20e968f86eb31bf9a22d3671d0ce9d3eea243bfc70890644a95d551cb9956cc3770e95c2f14ff154760cba1b24c51c41f7a961a4502aa053068751618eaaf743e0d37fd41ab4969444519c22c8fd96f9eb1be6ff3ae01a25abba84a259dad8bbc78f47dcab3ac2242e6974a56454999b4c59243102b731fc4bb4e01c92d36f232ca8cfe00fcbc0ac200c2e403d17d5d1dd3d6c2095ddd15ad58a070f18b69a5f5d3f240435d298bd48bd9be028ccaeb10997f88857a848882f51a193522bb0b979b37b5508775fe150cab8ce97c0760b7418b5bbe496562fe639540e77c1025c0e191fe000aa5d1e49bf02a5a3c6f46b40dd2c47786d45
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = e8347c69f4cc4d35b03fe0f74d38a8fa1dd57dd7a2a4272684a4823703f9dfc1
+Nonce.0 = bf28460d47c2457b173c46d5853a8d54
+Output.0 = aef43abba93dc266185516f1ed9ae5267016ab2502a0d1c42c602d1f12df539d042e2f5cdd52e4eff95b8a34be363bd49cbd3bce2a42187a2ee8d1af5f77b29748f1ad692de2f28f57cd312bf0d2a1b7701ce14ebc11aa56367cf6ea4855c4ae4a3d8e686c748d5c9e9e62926e1165375935605566b4d98b378ec42bad973a002f063c700930a737e8333227f0e612ef84989186c9859ee2e669fb259c30778c6d92d1e8ba0883ddddf0517bb98144a481d8016567866f91847bfa964367d28930ff3a84c27dc7fbdf8e449122e6d071be26777280a48d362e35b364cd816d91b281caec0000e7ea76a87bf3e1227d068f1fc3fef2ecee337d970cb08847ea13
+Entropy.1 = becdef2a9133c89941bb031628a42315247b63bcf47d0deb982a75df98a17ead
+Nonce.1 = 43c77151d200f0988c040d4665268f93
+Output.1 = cf13657fa184a2bf7747728e66813c3e795fd9ceb80483d6a2cbe25577eccb937b195059df92a0e5613263167e3ddf097a5bf77b223b2a63e0563adce0fc1af09cea497cc6717f098a6f85c6a8154ea3855477ece71ebf723b466f1c8bf3f56f2e28f4456750689a8dd73e73c8fba35f1d1d3dae80d67a2ddfdb7c6ac7e3a91f439eeede14cf79198354d9ff47845bf684da9a7a47f51a5ed3232708c0d78ead7be463a5d2c35e0b7b74aa3043d6673c5d09c98f91cfb1c8d3f9bc609d40fb8084d77c128d5abc55e2cfc5c1280a612d220af2b6871555c2c5290dcbadd96a01c67e1c953eceb6d305e48354f28efd21a1a7eaccb68825ef2ad1249b573bf39b
+Entropy.2 = 5591084e26463aa51e9c8b3bb653ff3868e2a2d89589abc93a2e09a9c2a065bd
+Nonce.2 = 39e3dac5749bd0a8046e2f0e32d50ae3
+Output.2 = 1d2dbc3cd00c8daa226746f500d2465feb8fa97566630b2d9a9e021b97cf1924e8137c64d5311bf82bf1d0ebdf909445151ca627497237b9f121f265b2ab304a5b2724355f63556a66b3a5bc9407c8bddfece164c38df52a29f656ea6c8e417aa752e6ea5c37163bec602a40446e41f138752d4562b5426fe5f85efd76f3b16e271de6ed2d52f05d3a896b7e490f5d1a98f8cf9816c5173efcd48db8c8573c59738ca6fd48950cd421ffdebf32b86683daab770d88cc059a6cf857c401e29561594e85e5a3191cbd95b61815a934fb0f0103d4ca7a176488780cbf100a473bf94a80a8e40fa65c92db33706f0f2838aa418ee72617a3efa902b2988483dcc876
+Entropy.3 = 070a1b7af0d37c6a26a7bef39a44fd37b736f665a9623fb1fe208e52e2bf23ff
+Nonce.3 = 0c3b6a5c15ef557e5a9272e7b5aabcca
+Output.3 = 62ed333f27cb9928f5bae6631be85d4ecff4c893bfc38880ddaca7cde714d0c203c2ae162aa8e0fdad445e4e81c34b96398a0fc46c6f5d94c61d2ae3632411540c1689eb0fe919f5e6c82a9892ac03ca55e2c192897f676c1fc1d1a4cb65b3d4bb957ef2f7aea1bb2ccb7951904bee6c3f6eedb99f02921e08e62c7ccde1ceb7a5b20735a3233ea1cf09eb8b2704d630028f81bd711baacb4b09e6193d65f11a3dd9e5c536a231d6366c03431305f790b121845038ed6c762e41841b938e21738e7f0fab5a189eeb34adac6de4bdbe9ab9348d4d5c2cb61406a31c224dd8aec8570c87cf4c75911f3316f95a921d9c6a90ad3c494dde5028eb9d66177b0d3658
+Entropy.4 = 28e996e15aa02541f781cfd86ab9ce74724a3000a22a70d101b900303848692d
+Nonce.4 = d5c4ba58065f6343cc51d9c598de26ad
+Output.4 = fc684639d41093580a3d31b4fea1d92ce92cf67a231c16c634028ddceebca4a754fc19a150ba618cd8c77c98e0b107ebe8402068c14779ac184ca7d506679b2a48291785a47c9a07a09f8bef24afb8875452ff15c96351a07ad7a5539a14d578cd7e4be6b9ad5c2bb8fb8087fe82b13b0ff93be8847c4790c7899203baac4050c8be7936783cd5e7dd3cb0068b8b41ecd246b909fb80083f0cc378bdbb39cff96611d51b3e94df7dfbc8afc4224af1594a536f277e0d3c34e8f08003989fb8f2d18c0db3d7f8ab08d1c351ebd24d39f9be002980b88f3917e68891e1d26f775ebcf960d1d9ec0348d8404cd86838c76bd691ca0160b57dfe75cc717cbb9c0195
+Entropy.5 = 21bcc39dd3e90e5a95b4056e385a1e7644b96e629f51b1e5f030857a9bf3c523
+Nonce.5 = 0090eeead56651d1f4acb93a2640d9c1
+Output.5 = 7bcf06841db1169aac8d0101240b4face1c11ec4dde6307df08de7b3d817c36b550fc86635d6921f93e2a39f395da6bf09f3b4ebae9272bf8e85c4e564c410aa09a4904bd17ba7200165672d64b1e6cf49cc4ab8483edfcb60e898f01584917368d380e00d5a3482a0a68ec673f20c03c72ebd53027cfd367df0b00d513dadb70da739a8d28ae4800fcf129b5edd33a87c0bba39c22ae192c2b19529f74ad6ad00e39e5bb58a09cba331115d538a70f09d1b1c95a0cade85dd4b61d224edbf7f26ba347010174cf244cb2700999d65cf8394357b3ca70e323c7e1509bef4b97019db32be0d91bad8ac2b4684462d3a6f6022bb30e4df1b299bd0bb24af338f73
+Entropy.6 = 53773445ce198107882c7714d361ac0484fac8d5aad4be7f1b415189beae6777
+Nonce.6 = d0349f351ed59b8b1625adda05f99c62
+Output.6 = 97443cf87445d4b7b36da5efa232b21b293c59546fdac531f98a1d76c219aeb046b7f190ed5ff5971ed7a62117287effdc4e1a692a9bb5067a733013d0527fcf5c85731aa61dda10a7d231ccf01c2fee79bf511dc01f5561b3f98298662ff3a74ea1d57170f322a40caaaebba287bbe150a22087cdd902a741efa527a372610f3bd7a0f2c59878c4e95b57b5b8615d4eec128ef009de7a5db2ac6177eafdc1f153b70a0ff60168d185b626acf4ff4ae8ff47c88eeb1fa41eafa36d9dce7d782a7528d1d676f9ee7848ce19dfabe5b24f395184112f6bd5c50e451ed6b6dbb7165aeb82d5100d26e220b7eae2df912aedb69990c3603df39f362aa9302982b980
+Entropy.7 = ff37fa0b66c83c3a2e2452068d13bebe869f7488968b518a2cb2f4836ce39f05
+Nonce.7 = 4304b9a6a5eaae133b2d42e3c70deecb
+Output.7 = 240b7b7baec7ad9cbd2884b27885484f4ae28778f8b746701eae2217697d5fd2eccf5ba78c59c76f75e33b2f93d84019fced311cbf153e843c9c1aa257bfd67fedc5682f912f64aa53bf95807f1024225542c661370457003b748529ad4a7f352535cb81632bfe4deb1781c94feb943294bec498a4f69ed12937bc751d135a937b2cac9f946bfa5025f4b6749ba412bb4e80c7ac07e2c66a1465e8895d40f26533dd2c0677a2bfb4f140eae18f95b789bc5dbf8634e2077a4c6ffa02f4d1757951b04ffb85bc405414317565efbf0a17aee32315688084ad72a6efeeaf2c793821359604aba2225ce7b5f9074d4842b0971cb6385be332f74d6f403ba14c0cdc
+Entropy.8 = 8cef16d1b9840107449d2c00d44dc14012d0dea61e7c8cb04ef5ff8d0c9be9cd
+Nonce.8 = f65e96812c6b43723777fdb77434232c
+Output.8 = de1aa00b946a9490c9313df6d3921d2ce4b86d5130742a8c0bf5763e81a562972d9c213f3b91c2b02ac06fb706817e642d6766d644d907dfd0fe09c8bbe760fbd8decca95208904dc6bff68b757d1fa1ff850eaf1447a7592ddb5e81f295f5f944e18dc620aeb96eddfb7938f8a3531d74a78df3e8db6cbd6fdc4365fdde3f2b9839e020098467f7be7a22e78f322265a3e01b80b97d2829aa2a17c56ce45006fff89677bc7c9c6520eb7568e1a96e3473d7d60ec2657a640df820ba63a9319c8c09da22a01000ebfb7cc1aa106704b2178e9423036378e125b2af7238ae06a0907e0c2ccc7f0c053e3ee72c79b2e6ddf470de452a2f4297e7a7f3582ee818d3
+Entropy.9 = 0b8b66c4a6fee647cac32bad5a11d98a86239059082cbf4369f8266288f1c169
+Nonce.9 = 73eca8a8a3bc1847bc198dcffd17425d
+Output.9 = c39a83bcc27acb6a436d7ed496dbb7ea17bd7d2daa3f4f7d5228ecf6f17fedb4d1c425128606b9188bbdeb80a10b9e4df8453bbe1d9c193b6785dcbde3a552bf0affc92f57427d8995c5d03b6f71feb2357634e93e85cc9907bd5528258d54db8fbfa8ecd5af5a3a675916977d6bef69bd2b25f9ef320684c3c0fa49754933e84fe496f61f9efe0770e3e3d893ae081ce347bb7bd3540402864c31305fed1ca8db00dc2a2ff820fd131a7cdbbce1aca08f9ca08edafea299b3abea97ab4f46a76ad3feb34a8ce72de0f0ef64ed7fa255ec92b12bec61621ca6492b63e76a975b72e59d2c8a070a15e7641d0a0db40772ee005a7987798dc59d34c7615b38c3ce
+Entropy.10 = 8faf72bd73374b5bf519417ced57dee0bb01c571d1548f7e2bc46195e21d768c
+Nonce.10 = 59ab29dbed76070b9258fc4222b181c4
+Output.10 = e946b4bee41de29082548275ab4209246c2d07508da801725f9daea8fbf9b3384c535be59c6e92a3c582f95a33cc9558255243169d0498c6ec2131e2c2be93ff9d8e0a9591d76bcecdda03b40aff3d5a001f4a61147294c4192e4a7cc90f1f57d1797271857f5c5820ca89d71c485c7b78ba1c9335d35f2c0eb74ad94085344df073b6bb4a950937bbdb85a33d3339d0b014117974c0e546ac0d36a13789edb31fbbad1eb0f36cce6203faa5e5f2aa8e15cc32fc473e4dabddcab3b856533eb45bcc7e3ad2ab4cbbc08f15ebce24f4f4ee0b7e096b6a27b59165584ec362578c319aa66e8a824956f5f9401c0c026d8412649be75c48d5a9d9d7af47a6f3f293
+Entropy.11 = 651779d201cbca886d6162cf5a4454fda9dd98918fc7c42aeece0847fb51c608
+Nonce.11 = 1dc96c75c0a1730062d1eb4f6bd19f06
+Output.11 = ad9ae444f5fb779d3336322f2af2956b851498e71877c506f8124c772dfa27f86a9fdab8b5e88b39c204bebe6d706bccf205a8524a7304f2a982341b26240719cbefca0adf09a118d447c173622189fe710dd272d9b10cb89c4e3b04f8729f664ef657beb1f6c3b35c580caa1ab96d3cfdc774633f29009cb2880f7370dbfc23c56729a4da86615e70bf378fa140512c056ceb417e5d8f0dfd498fb6b2eca31eae755bf0b67d30e132ebc22fc9e499aef98ce64dfe18580112d7fb16fd21b74f579d082c8f11bc10c3ba4471266eca17620398b81341cb8f6e9362afd012d94a8fe5a40838f5177d6990dfc236dec5aa6fe3fc9504d3e35ea9cfe62a5e296db6
+Entropy.12 = 3927db9cd0fe4551cc89c5f4503e7d3238ce1cd674b9614f5ca5166eae69521c
+Nonce.12 = d5e7c45dc3108368a22c1d449e89b084
+Output.12 = 953d87a53e3291608727b17a9a4408615a12958133ed6ccf0dc35b4c27f7c64441e795c08b2e379851a95bab9d83338dcff384011ba6de3a61b62eae465d589b705482d5fe8697bc68bd061f49ae07749e2b259f6d96d40c763181c6c6bf71d89ac22f59fbedc82e63925a2068e9a1ce3243899a980c8650ebda07cd681fc99d0e46919fa379eb84443427208a5f173ead9cb75be4e2a89a16f25c632ef4ae3f1c7819ff0d6b3cd204fc98ae489a31625194e30a4edb5a57aea04187823fdbbfcfa9d5d4cb0ccec5a10985bf2cba6fd245b5cbbf4c8fde250d02b3a7ccb7ea2bd043ebe654eaab650c97c8394f07088037c9ac12d666b7686b2f470eaa690216
+Entropy.13 = c7710ca435d5fe4b980e2aeb847b8073368a1e41ae2fe51dc5c76a12aebf22e4
+Nonce.13 = 10db159ade08e39ec81ee8ecb87c3332
+Output.13 = 7129640f6dc744cae4ab716689bafbc55d198c8e49e53b22eafe7eef106e29dcf9500192f6dfb9a709a448ba391d46d127028ab01a7bbc614f93621c10277ad86aa2e1d9c77b34849c3a082b9a28aaf27f13894f7472cffacfc33b5e0f9f60e58b191ea710bff020533a60fbd110808af1422afad9d35fe75cdee60368920cd27a2667e94d334a56ce0ad9cd726a9e7af237b5fdda0c457d42f5400ae94d0199cd84bbe54cfa709661b5714c2f7f19393bf0ef66c17fb29ed2f4c2bafd1bf1a13121c0d43747d9f549939e286f7c67ab8f9c13f140dab49bcd402fd107327340246365341c4672a5534863676ea058d8206c25645424b688d8fa9ed6f8092c8a
+Entropy.14 = 337373a24fe76f025575b3dbd7eeedd03d3459d6ef44cd53335a9c4963cc45de
+Nonce.14 = ebbea7e8e1a3a45c58044b65ab7688b9
+Output.14 = 21ae4510a133fa0906c873eb73e00d777b68a45a1de8759b1497f5146f0c45cf612b02e972ec93ebccbb85c9adaf0f5942fcfbb3b808482f05497f2f4734dd6d42c8413e1bd1bad10463dd4b4cf29f1662c15efc6d24955b1e54a60508d9ed008c9d29f8a6bddfe564c21473271350137452f4601179af37e19d553ec738539cfd7a8df17f07e1f9db5df776256e3c00199997307de394a8ba41be2829defbd8105fcb3cda215219fecb607eb1e7137a29eef188ca7eb349d2d1fe27edc2526ccc6d8f1af7eec9c06910f3909907f966d5904b32577f2715cc32ac08f1b5e25a734716ffddf60c57d422b515ce817b605ead2f875db7a789e351b660704f0cbc
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 65004ce396e18c5271a336b04fe843d35507d2d26a461792e19c57861aca8e36
+Nonce.0 = 238745ee7e7f3f4fb1b077a946791214
+AdditionalInputA.0 = 0dc48dd1c82edb83d2273efa04025902e67469b1c2eaa3b69209a3d0970b7629
+AdditionalInputB.0 = a632c8a7089a05b6dbfe610e4e1dddadf539098d878017f0cb5fe8debeca0cc7
+Output.0 = b2b33bbea1cfbd663cf04869a4add52835754f52aa341d32754141ece3e396546745dfe0cf2871b3aac8b997ae3b4e04b0cdda4d9bf78c6a41819687be18c27fdbe95e170bb96e3813193a8e9bff55f75fcbf3174a74d97a529b933214b91c8512cd4645ce9f0e3164a1e15fef337a78d512e60db3c91190d96bc9ef62188102626380f130b6b1536a3450604552c46e0a5bb2fcb0c0b70a98bbe238b8fae9d74d100fe789503e53d3db7699d9ba39a0b8ccb76354e54c90753a9cc5f5ddb19bb6b388e9f4d6f01fdda589c89e08764dd735aa4d4ea31db17d5fc83755684b77142928cfc370358bbcc65cb1412b2ec9be5d52b84fb389330a68bc9cf2a03379
+Entropy.1 = 4bb1834280b0f17bf106094792f29e519987c8b82517cf4c7a6ad43712ce33bf
+Nonce.1 = a1a798d536bcfd05c6de26d790936e1a
+AdditionalInputA.1 = a4f4af98af2c1452cfdf2c85a7b09325967258ebc3f97ab031575ff4148f970b
+AdditionalInputB.1 = 6f37aceac37cc913addea0f52b71b1faca2445043a6446bcf1d1a7769adc6d16
+Output.1 = 8b7df4d489426784b8fd50db864fc580a7637b6693510345a2901b4d7482ce272386e2e52ecdee0bd5c678c383fc16bb4685024158879e8609f1fd93c2c2d236aec05cc70dddb6a9f5472596eb1eacea173a5fca3cc62846a57899fc0c9787e7a9d70b5c0809c56de846b9e43ebc69b42376f59b5428a043650b400a438ed2bf3e1a1952d7e96a4d653da7fd5fedfa914c1fb92c7d3c41477b512cd117a29f78a1c7b2b41fbd7d7d56e58d489d5683ed6643f88b9346bf541a69f1ef1dc67069569acd9fefbc005d0b8158dc573bdfbf8dd0799ad1090b6649085d61bf0a4ade98a3a114346c5c9d357e126b90fc745e8ea707d9d69dc2e7bac3801e7ba18426
+Entropy.2 = b7871ef8cf6a585a2d61206b3d86cf6d8fec7bd1780c9f221eb5b8626a59dc5d
+Nonce.2 = 275e760275885a5e66d7ca03308a3e0c
+AdditionalInputA.2 = 2fb7c9f6326516189584c8b3c290a8c50c480dbab6fe37935c7d5c0a996ea68f
+AdditionalInputB.2 = 60c409d342067d2b36e01b9c8d0b08d55c5b1e9da615916b5d44e8882d86254c
+Output.2 = 637b4d6d51b148c81c0963317b60ed72e69507aaf7a3622c98052e2526a69170e216d6c71bca8db1b07ecc7d52f0d841522741c59e8fc51d60c3d248b2f13b631c6b4e50c72ac872d57784b19720b290b078585c294704b707f301458323cf29045cd0b38018479829b208eb80c1d4cdb12c8da3cf3b141cdf26f9da21c40a588cc70ae4a70975be60ba399abc7b719d40e36c6ae0bf62acd2ee676aa81d7006307375c9553ce1de7e0915e2ae034f0e3270cdf78fdf28c2955af4f7665caae274abf11cebd6de12be719704a4865879e7002d5dce75cdf34eabec219c5f635f05023b6f45e8e837c48d56722eeaf09926b316fed39f5e632c29ef0d32140bf5
+Entropy.3 = c5a84d5e827a17bba96a1f3c2bc1f71e234143d7deab8499d5d96d21952708c8
+Nonce.3 = ec028c6f19e44b5139856115b125917d
+AdditionalInputA.3 = a2cb9280a6f5466b37af0da2b78cd6ee19645d20965b7163216401d4d59f961e
+AdditionalInputB.3 = 7ecd7efe261b4676e93d92bf867ab872989185947af12f9c68cb8de432ccab56
+Output.3 = 9551c9ec17d1bbeac3d6f04f2d8a8d2e7643e3339956dcf51eeb2875aeaafef0604f529cae938204f5d58df042ba9c4a0d135a09e5512f3cd9e04c8087c58b9caef0f6a46a6b0ccd1688b77134487447e0625ce4414c768527b8f89b3dfb71c3e5ca34b653c9b5e506d514789afbbb38c63c55155b3489e5dfb6e1e2d4750432510ec050b82faadb3b52727a00fbab39717dcbae41895f093d0b27e47592bb6ec287da1a4c2fe1cf8ee407545885af0e58dcc5a50e3c48a792a87e0ba347266fdab8825dcbb323a62ac602eae8a5f7bc6616f6be459c7ba928b3e311964c97f1d3a56e317bce5c37306a6b9dd1cfffea1369f948b4af9ffb5e959183fbcf2966
+Entropy.4 = d24d5c090aad7cd498c8b11869fd512c7a0e5340520c8523128202a1a04013a3
+Nonce.4 = 88a4bf3203001c04eb1b7b78519656b6
+AdditionalInputA.4 = cf75784d2cf9de1df3a07886fb21e6b14ef822ed38341e0a2805460c1ab0725d
+AdditionalInputB.4 = 65e36f63766d717c445845f1e6d48c3f8f79c9fd991a26303398fdf404b4b429
+Output.4 = eaec99b17173d5028bdaed59c931ceea295a76172d2dc4db609368d2a76426d4ac14e4cf4960de1b449aa6fe0a6d1a682784f28388ace97c7f2bc7afda185417bd13cfc26fb9f068c58d74da0d38afb70d591e770fe7a79184ab47c8c70f4a3099752b4c48bc2d4a7598adac36f9e6c792d76b696c51a7514fd2a8d757417b8f1bf01500a0082c874c462640434e6ca3fe6fef52f338c01d6fe92ae90672c61b0c3d0e2e5b7bdf95bb87a112060f22ed4f7ce84751432d6564548ea153aef2afdfdd12bd4e92215b49e71fed404b12452dbaaeae4690a15bd14e303c6bf5b99cddc409d88d5a49621fdfe776c487a5ca3d3a9601fd8dd2e6838846a4cf5cf1a7
+Entropy.5 = 9305179466eb9200f276768512ce7aab3abb38fb3e1907dc300c80a89619a17a
+Nonce.5 = f8ec3bf1e181c40d45120aebc73e1b20
+AdditionalInputA.5 = 566d651a48b4cc08fedbb51ad7b04f05737ceeba64fb6651fd55e4bdcbaa7e58
+AdditionalInputB.5 = ce5dcda71a958623a719ab9451b1c6871e55264e97cfad09779afb919d62f9e5
+Output.5 = e8f6a6070d94dc1d38d33af76e8e9f80c0f0e1c323f2b649f0459c4dd414eafa1c10d20b45b5e7b423cb3f830ee9b9d6018af5aa46148aff30bd93b234dd7280f639c88ebbd5dd4ac27792b1f93fb83f71218d9597cc8c670912c766aee486b56750b0fbc48c496289d8626c7754e21578139430596ffa0b9cba28495adde43f26ef041765058d0b4934efdb0cf1095658c53f2dad5e6495445d7f5c4568972172f611242f67271aba9482c3bb8c8424bc2b18d1cd6f707abaa504ef3d0da9971247f4b09c082129700e91fe4730744f80708c86bfd00488d51c459cbe8475ba98a4e0352f93353b787fb7486a65607e0dab9b8b349fadbfe9c66d8302cfb1f9
+Entropy.6 = 5323118856f8ced58f32533d806c07c8a93746ccf8a94654d527c12975827e31
+Nonce.6 = d00a0aefe3b648daf24aa0db74953abb
+AdditionalInputA.6 = b2dee42019a3d6f3379fb8fbea31db7b776380cc3ad19f0e834512466a6e6a13
+AdditionalInputB.6 = 4ca59a3bb1cb96db8b18da8c44d1374ffce065741df3283fe9d19eab6e8a83d4
+Output.6 = 9b719b95bb115a0b590bd0621577eda821cd76aa4f8617cbdfcc05f9d5208eeef558a0ad6078349ca8f14527962aaf319f66c8d35b2f9087385efe07b30b0e08263aae970f9f09567579ae1fa6e981146ae47c481d503799518e8ab2ad08ebb47c67bdceb4f724570c2405d1a953f73821bfeb91bb40ba138906f09f0529dd635a35118f48c6cb47c581bdffdf6540a3695e2809f4a370bd0dedd65575498cd1a5737c5a0941dbdbe8ca28d6d60e46cbe5b21fc7712f66fe1771a51f25befc4854072062e6db75100292d5b34e3ec83b29504f769cf3b69a33b27dd77eed1822613b3d31f84a8647be629bae7538572dd6af6d3f6f6834425d34069afee97ce0
+Entropy.7 = ef27aa55ef8bcd299df83a948c4f8ffe21f9919420070c638a6da652b66e4669
+Nonce.7 = 5249def699dc3f59cabab112c0968963
+AdditionalInputA.7 = b5b3a2b1e674a618b1409023b7d96a885784e5d1957f4de0118f7d18d8f80215
+AdditionalInputB.7 = 6c58c210a477d269a1b2f95d496293605767ca8da5d5663271a31dd3a2f608c6
+Output.7 = d9e8c02677edfc17620fc244268f77f51caee50edec6d3cec04fab592b3609a6e93c7d43f98d67e55832337c919615d7f4004bf329295f0345ca087e0fd0a09ef8b1385aa1ca053708823e60c9ac056014eb8189819ee458d42983bcdef5954c8eefda5e65fcb8f100585ee734c1bf9c8a531397d0a798d39bb194a3cd064e1903674b1c2aaa7009326385226c9c1175ce8f6c4890d54e5b351db33a8f0895222a6ef9df1f2a539972f44534f6dde0ec7e4209a20aca0b93a9684bade19a1f787847dcf394840bb8a126f87cef5b2ab6db2846842e8da68f20ce4f6711f93cae55a7f9b5c249f807260981ec56a31b209ea2c3d434273ca5504d3ad3c9570147
+Entropy.8 = e064ea6c41b85a7f34985c41515c78ed3db807781f66bc4626243617ef57eb3a
+Nonce.8 = 59fb66314abe71ecbfe2e790168b49d8
+AdditionalInputA.8 = 82f23e1bf1e454b0118a2f8a888073bcd7914bd9da765a1b1aa047ebc5ee0967
+AdditionalInputB.8 = fd2da0b38e810a533d537faa1896e549eee244880e2aca61a5771e7171897406
+Output.8 = ed8df37d9d73e402a04a317a58127354492ae5f949a3b3269b595f25990e5403e88aa5624b86132f564ee75db9e63cd7c6b53adbe58487e17ab3afe0db70ef5e36a7b338974227f8cbaabe253a1455da9f7a54adf238546fe687a60bb272a34f97368412f9dd1b2b9ec5a65be9711574be4a3ad4ec64ed6279946366359545e4e5e8698cf300d361ded6af055255c3640843f4085ffd0b1c3ada6bcef1a790eb03ec468df621f64e0d12ba9d27ff7a4949bcabcb96eff46a76d11b3279943cf63b9dddc4706e4689225b9954ab17f5a60b8d111442763a3ac39698f7869d4e20fca3096ebc2613887aaa3ecfb626aade5ee3ad4974221052c0cef0f8ef2caf40
+Entropy.9 = 3b43c5876255ec8f831783e11befe2d92f18ea507cb41fabd5d41ac3f17be66b
+Nonce.9 = 53d0654ffd0a34abaf4c8a79662c82f1
+AdditionalInputA.9 = ee9535846d8c405908b5f232f4320644e2d9bcc8a53fe7774a92749274c7e550
+AdditionalInputB.9 = 2a692a1dc9a652fd559305c9ab07c9344fd7769dca6a7cfa29190bacc78bb2d2
+Output.9 = 1a9cb111016c210b9c7b95f82d2e34a3472b41f3b92063c85edbeca182800ff8df40a92d11e3a23b85d097acd073986e77f2790ef38c13babc9f04cf861c01af85492016c44fc117587b6813ab0b1f634657e1c689d1b9f375c5972bad3abb3726e574caec0e098c93c18aaf7221a6d8edc2bc3d89f44adf09d8995efa26b16b481a44b3de122ed32d5ffcbfd55cd4c840c745fbe5161aa6ebddca12ac855955ba06a46e37ec42f530a9d413e41c19043c315999131d76f25873d5686dac77d008c9546dc86bea12ee2c79fb3cee8d240dbe6a10e10a8a968be143803ec6787ad55ef79b6f06504bf368b2e296584a1ca1ea6f92338df240bde539edcb0d62a8
+Entropy.10 = 5db87abb653ccac39269f9ae8cc9034bd6224141f8118277736e4f95efca5ee4
+Nonce.10 = ca2b95330836140b72793faca3ab2424
+AdditionalInputA.10 = 0391c29dc29ec9fe2c1eb383d67b23a6656cf915b3604f1f0fb624fd57a95d1a
+AdditionalInputB.10 = 24fa10b718565f97d95551dc79125601da8fd9a14067e6f29b747bed5cf7a90b
+Output.10 = 8d03b1085a5a69f6c3a381a635bf6fc2399c0280b531a6e64768bda5b1257aade71dfe87518256a8f3ea75629018b1d95047b29b7f3ea0f01144b9dfa30b3eb463d5738e41b7f763f9e00a9c3bf80e55aaee362953a98220e6d980b6dc162c5d9a19375105571b53e1a5e264085abdb8e726210a3b7a9ca92c8cf1fe00db067dc7b3eeb950e570b796be4d9cef7984a3794e79c88a6e20b70f9db3682badfdf62cf2404f84b4e7460ab72f59de57db4afcea16be99d9c81134f0e9b15debbede3615ffe7825ec76bc19c1ba62681ce98f46f504a445d2fc29313446b3aa5a221a0ce5a8eed30a9e0f66127edbccd752d826844f110215cb98b05c0ce54da3f86
+Entropy.11 = 66184f9c658c76916ed6dc55020d39aecbc96bd688dc6baf167bb3d5f43df21b
+Nonce.11 = 1431b714e69d44e67614d8b5048ee0ef
+AdditionalInputA.11 = b255c59043cbb66cc8b728e0ce6353df7fc68ce02db7c7b8fbed55f8945ba9cd
+AdditionalInputB.11 = f21d925824bda64017c42ff0661a67c2c19959aaab81ef24bc1a9014ac823a36
+Output.11 = 4c86b7b0728754530e727168fc18af962e1c6db4586f9beeaf42996a24909f353397b27e0458f2a3af81dd5e51a636da139c89a802ba69875cca95caa491d2254a8047a85087e92ad34d9029ef2d8c62ab1ebeba4aa66a52a895987cd5812b39663e5e020974e6380dd100ca9ad68162cfc9921516e8b8e6ea2bcfe51cc90544a86cef0f64c0780c4a30635928f35e58e28628ebde6a3f3ab9cde64633afb32fcd6fbd2cc2a6f6a5435f509517f694df2e07d95b03aa977ad3ca8b477c0320a295bda792cdd7094817972ec69a5c13d72163387fa41665c1d65112e74fa51829bbef3725fcadd38a018198b7662c7c570a2665ef711a3731242ad106610d77da
+Entropy.12 = d3ca7216ef039be1fb5a30d1de5cdb047aa649da4e8a3397332a53df3886a31a
+Nonce.12 = 622a8e801a52963b468ec4b115f4beef
+AdditionalInputA.12 = 156d7675581a8384dc98f460970e79d92aeb23544f248531a3b4a25858a06f19
+AdditionalInputB.12 = 6a856d92123f7df0c86041dd3b102f7fe5b8b7ebc99003fa83598254a04ea762
+Output.12 = 3c041b78052f73efa2ddc80c7d10381527c8267743bf7d82d312c260cadbf3703df340f01db4ecd91985c444ad0ae73d87fc9d98f988f8e1041896991c3eb347f8bc8932e9ef785a4d002b9ea7fb03d9b6ae0e89bb829f70e6e7924aaa50256995c32b2b0551d1b6c1494167662b2c529076d6766fdba86b9924eaa2f7e5463fe09ffab3118e50c1d8bf70b65225322323bcdc427e4c62ae154981863eebab05fce8bf38242c4ba5c27ad8debcbc1b0f7b00323c8fa075f796067af0c19de875ee2a5083a3696d2e57044c658d396a69918e762cb0a672d56ce5badf8279d33575e010e5e671b773a2beb4608ad7758e4856d2305f60482fceb1736eebca23dd
+Entropy.13 = 44a57d527b5613552d7375b36f2a9e8abab4103266c1dc19926e8a98cb5b24da
+Nonce.13 = ed00d22df412b47787849e6a72a2360d
+AdditionalInputA.13 = 42f3d3865efbafedfad494be062e2eba3057c4503674d40a1ea0a8003606a21f
+AdditionalInputB.13 = 2d1eb96bed9c7da9843b9d6d26aa7081e76cc2cbb0fea9c63f3d271948162918
+Output.13 = 324258daf569cedda8d25fc6316c76be91e6e7a886d0866882a3a3260f7d485513fe8b54d0efbaf64c2cecbc35c68b399268df9b5de166a51b4ade63120b231050175a6c3006dc55ac1b4d49a856242155d6f091860dd74186a1978a9a966802787a5a1ae6f6258b50cb998593a9469ec631a0728b2f6cc1031ce88304d39b5393d614bb4cd18174576da66b3f8be72538e38e5d47500308ecf0fbf14994e32db460de082a25c328d11419869f2c9f3fec70e4ea675e79dbdedc9bd9ee493f16740f88ed7d56e43decddde2ce1befb96d4b11bdeeff6231a5606484c4c6f072764e23a47df225de192aecbdf1a6b3c5447212c0b35855304c54e0a9536c2c1cf
+Entropy.14 = b0653a76c3fb3837d347c979b9b6d1434021c7ddaabc5eec85393c30d98d64fa
+Nonce.14 = 836c9e8b7fc418ec0554a0a21f48f30a
+AdditionalInputA.14 = 771e91743429c40a2e3ececc9a3d73a92336c9c988c5d9dde47563b6317c6f7b
+AdditionalInputB.14 = ae1a58611aa54df3c655a1f20985552ed9e3610e92170a0de1a4573a5a1f93d7
+Output.14 = b2534bf690444513bdfecb35bd616b0de47b7cca7f8ab9c5e823b468da62855601b59c6bb75cf34fe3dbc7f795536b9619d243c0f6960895d6710130fbfda2a0bff803e856f1cf21a63e86e59be0d6da7516b697e9ff95c341913ff27c8abe10e6af1b7ad8dec9f7aab46b8d35c103f9bff3016b39ec24026a7b582f6e95261031f734e29a1b64c65639cf238381e5f7e31da624ad24290930501132c860118b6c59052aaa7cf982486219431311453a431a1cf50deaf068e2f9993c0ab851c9aec72be8f7c5c57ed03c488befe6ffc256efe6db52b7734c042b69a5ed74e2593c4788c5fa8a03a5017b927bb8f1c8262925d734c5604639a9b441187b0d95e3
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 817aeb8122d0917c53e8418ac6eee6c99dc3b481c9fc7626bed01285aa54ef5e
+Nonce.0 = 90e1381793a3b028c0c5e449e21bf95e
+PersonalisationString.0 = a955157f807bcb16ba6f213ecff5079081b361877db855d6e3063482307f7ed2
+Output.0 = a5eee0d85f5b5e3dbe452549e2dee5c74f56488d4c64562407818c70ddba651a4600bb83d3ff8df38f7e862e86a6d7461f1e5e422042b9b88ff954710d6848df69b568ea50f24fb3f8d4cc1e31aa8e6662b8a0a147557122aa771bde792c4e40d9f850252ef9fe36d273298d1936a64377a24ccfc9f4dc26967fd7f91479193ccfac2a5486fbada7db2beafd8fd516d800bdb2d88e18770064757fe1e14a65ffc9577d5fb262c8d2e394a27d9686e1d353f12da21e65a41a4076275d5a9beaf875f516e6f27aad0e85cc3315371efb33fc3f10cfc97861700bcf3f8b2b561463e443994f7ee1b2a29aec92a0e0def2fa397e6b6f04634d18d93570abc2dd0a5a
+Entropy.1 = 361bc3f1939172d5a0e3f20eec7d26fb8966ce4bde21cb07fd2eb00b0b9a6169
+Nonce.1 = e331cb224e5afd8e7af80bdcf66d24fd
+PersonalisationString.1 = b045395a04c8c66daa3a64dd7427e3ac7551df67083bca9c6e8ccec5de93d746
+Output.1 = 5a75fe2e7277b2b82273321f9a94b6c5e0ec72a216f7dedb67dd78a1a4428dd083f48c4929ce7861641191b00f91a1a56a2c280b3da234173377401b1650d3b92b6799c5e73236c7630b30421a694448aadfb7a2541c514e061f60e11814e81f982486e26b14b5280a620434802c8c0e725f18316c8416d9a77e682111a1c6c0d3ed8341b13fc3f35e22e4e8686cc870f61af68d650acaee8a4d5e85293cfc2385dcc70667c753deef62c17ff1a69931b5f8431bdd3ac22e04746b380dc78bf3642dfb9cc6e67b82c3bbc9160e77cb0556515451b4ad1a212c93724f4eee95429f60918e4ed8710b94ab63f2c4b106aa2fba439ed484e7ae8b36cd8c3b0bcac3
+Entropy.2 = c22d5e0d0b90201476f12ad0a5c4a6f825354f20bdaa5a0b0fd66cb21ebbcece
+Nonce.2 = 9bce3473f1b59d0f2d9c330e897d043b
+PersonalisationString.2 = 7e750fc176910b54649685c2fb32ac230477d841798976439a4818632ae27723
+Output.2 = 016c4a3de0558ab9ecec3e5c5ffa2c006d2ff2ab05304a7c7ad2acacae941d005e78bebfff592cc21e3cf6b190085835530950bd2b66225bbfb926f696223b8e8e0c78f317b927786fb5902965f6ec1753e56356c5c08966a670a34233f7481a4c15fa68fa79d4d6869287e0c1d3f53682d78c4c077a440694bd9d4c328d37ce794cb207222b1a70cb8c1a56c72b362ca91f78e91feced6b899fb56031e11095eed8c13817df532a06b5177566e1776b77503099473e21a3672dc6a29b959379c6ead06e0394790d72fac35954d81b9c5ea16a04125aceb1daf85f3a21e0b6eed54fbe641c700934575b0be11c7257a7a80d66ff50ad6d610e5a39d37ace782e
+Entropy.3 = 66665a56b7c7fc57851475903a28eba6294c8cfeb267164d53895f167e0868cf
+Nonce.3 = bea9c55fa782318c31209649338066f0
+PersonalisationString.3 = cb105533e41126fb2a824c036b3cfb66dc114be8b409ee511c9ffed0b45da084
+Output.3 = 6df8890f9ffe35015b3b4351a0520c266499fd08bdefd474a2fd77bc8483382ac46b49d3cc7cc88aaf728756651b0d4d8ca7eebd2f1d9c9c2159f62781882042c9258c59e7e50bffb58bdcd1b7b3f218efabbcb9f2f76c19fecc2fb3487c8f675a0e3b297c3ebd007c478baa815443cbdcd67ee1fd6d16b746387b9193fc5530157c0bb5bc34205db53084f0af81dec6024acea4c445584e8c432231f224a6ce0d659b25a887e068eef35e69497faae09dd554b323f417a3392799618f524dcad8b75a30fbf8ad131aebb8abe383ae77fbd91b15aac7719119fa4aaf9a091735a8688b96a6d3bc683313bd749e4a3d7dac3a1b4d68bf446b74bb73584a13008a
+Entropy.4 = 7154d7c79e3c5d084f35a935d75d4aed9f9bcb2e38b48502cc6aa12966fd62a0
+Nonce.4 = 4eb3709e8ddf142c64aae00a6cddef64
+PersonalisationString.4 = b0a0eb6a778f3b8a244de21607362d441127c80146c12fbfc52f71f71cc37193
+Output.4 = 159c424308885870464bca92fd917fbfb96c0e7c8e8d1f6f6f658272d6749bcb315bc7c15e20f601f9ae4110b153bf011b28de19aaddd3186b6aa2b9c0975486dc534ab06e19276cf92fa3ac8919fe4344b0e02967b2ec6130965daf4700f9eada02733df2c4e0ead926f3f69c6c8019b1eec72674a617195a8fefc769cf96e7576134cb26d8023a5b6ab96d58da2313699a75e2e1fb17386e5cb1b38fe435c2768cdd799fbbcce67d0dabfbe42ea12d50dba80f20c1de1ea8abbe66d9d3bbfddbed6db7dff72e2c596f8f70a5d0206fd041ed5a20161bd8c7550a0929b5e35cdf22871c25ee0b92e284f4598f92e348ea35ac9e4a9a93d67619cb1628c149b7
+Entropy.5 = 633a7564cbc72526d5e71718216d07768be27580711fb84ef32e6d7b06f47549
+Nonce.5 = ab841d51f3ab6a5242027e823c5c7038
+PersonalisationString.5 = be890eb2e33801fa2ef030d719376d69fb57ed165a176b743853538037e57c74
+Output.5 = b8740ec92271e2730aadf58fa3f0a42a1e9b1bd131cae290c882a7cf27762e0208ad3e21963b7622b9329e68ce1fd2db7c634b51a165601630957042e3795704834cc64223215c5ddd877b9be7a6cd1a63c9c15fab52018bff5c9c9e5c1181314c0e3318b98b6caf828cdffb2af6997ce62a598e12d4e7bbb3fd5f40a2a6ad84e4d10e7d0f68cd85e231d2c21a65588b571ff272bed2fcde15566caad4a76e4c273815f7dc883d4bdc16a311156d1f948f69684bd5fce7781439c28cce3e6fb40f9c9681a484f0d5a072b486b85b3a0ed5670b0d83dbfa4350a3e9422e2527789bf6f1df2c4cfaed345fee21b6e003c61097946506fe7e8318a9b12be6aba2d1
+Entropy.6 = 2ad728895a8e9a65a17f4c6bc49205353188f771ae113028a60292a7937bf7a9
+Nonce.6 = b67ac3e318d1ededd77c50c9543b23fa
+PersonalisationString.6 = 96a4faf4462a176345e48ddbde783052a733c1fa15cc42f9cf6b84a3cb8f3c92
+Output.6 = 6680b2e8b1e88ab0e00eb80c3dda0b14d7f02ba8e4daebc698642623ae4699cf5a4b9e428b165ef90026d33a71d1cd513a5252d600b0dea3f436e2263663fcdcbf36e685cea6b9f684530780ed3657f9af4e3e1ffc81c1ce76dc731e9b3c1e5a88a36c9e95c3efb2a204637b3d2ed94a3bdaf9155230f6287227bcb743fb360c33d059b39f978fe94216a54e39d5e0f0490a42107390271bb6d10015278bc6b50e79b95b76bbf27a2f37b2afd5da61fceec5b484ea74d6cddb34ba5c2736ca9b7ad0d334e3ba596611d224a7c51ab4777cacd4a9bbb66c46b6988ae03c1fbe8f60c8fa23ac1689a85a19307c98d149f65b856f2d760453bf7a1c8041b948affb
+Entropy.7 = ae6ef33071077fb24135ebf9120f795ef6aaa3c8505b8d3984b22880e385f49a
+Nonce.7 = 715658156bc021a4bcd193e5a2ac71a5
+PersonalisationString.7 = 8ab53e1458fb557964f0f2402da861e632393c1affc3ed324d4b6dd8e65c584d
+Output.7 = fc8781ba00efe3bf57d7beb9c1f25a604bdf45c15361ea7f742dd976781a9cd422a7346e5c9bcec222f53eaa53230c63c10a5ce2daf5a7069d1fd2b9dccb4c57387f6f38c705a3bfd3f117f9ee97079f44cf5f01d64065f5fdd9c4a3a524d3fbad99b67ba5f8f99cf91f93a662d67267f3c63ad9f0831b9a74eb7dcf50b0ab8c1a29c4573eb38ab556ed76f5304dc96373b9785bce9b30d81135dbcd9bcb5ec67fd72806334602124a2cff24921e2cf3a499922ede97a15eb066eefd2c447f5dbed7f193567ad4c8e109d236d01909291e118c938aa853e0292dec054bd40194ae603857355807c2e73372f38a2d6f7175850a807e798daf164c9a668316a6ba
+Entropy.8 = 84418e25f9d919c1e4b2e599346c4c0e6d56baf450d297863457a6659f40f8c7
+Nonce.8 = 3101341550b803c626559bc5ad77b629
+PersonalisationString.8 = 0f876d2e02da0970dcf0673795862666a4915c0190cd7dcd5e30182aa3640872
+Output.8 = 8aad39bbcb00432b9beb63a88d2ac3046286980a079ba0141fc875a837c120734c50f15e7e7248c14e13c5c8daa2dbd9a03de205ea0c00492a48cebe8a995c60d051f396447c3ee4c74f5a67fad6eca4d34896be95bb28149c293939b9b86e734e12ae18f22acdae026a9686aa4e7ad373c93cb5f9fa9950cf0a70a870fa49f79885554d015e603bdfd87a0a5f6a9cbe3c719d692d10f8c8d2dd10d23fd94866ce2b2016acc22b08e16d4ff0af5727a1d4fa29dc0bfa53d506de7def8f140c5c8a0922415207f4d21ffd2c13da38e21c7071beb5fe340492c545ec6e6d942403cf32d32b3b17f5c966453a9df28597ff3a8594a37a17929d2c759879aa905fbc
+Entropy.9 = 298dc1e39e49d3b43da34126df0542194516c00e4be461cf43d946e057c70df1
+Nonce.9 = 9118a385d2a8d788be53ad4621c42554
+PersonalisationString.9 = 147cd977a6e77928fbfdc29a6ad3ca1baab50c84efd592498465346d5673ee62
+Output.9 = 3a1d7fb2f86ff8921aea91310c61a1613d441402cfb71e3b78da7f811cf249f280742972fadd78f37719e37be78ebdebff95e2568951a4b8eda6819673c4872996f1fa9fcbb8bd99ad31cadd795b7e8100179666be0975116630ff55bed336fcee8aba1f2eb8b559f2a96734bdee9474e66ef1f655e4e08b736903e9256b104251bfcf3de7d9c3399b3db824f4452baa487dcbd8d05e80a5501682c1f2936fccd6c500f1d646b470260bb59acc37df03040999f3be8aa705f480a65efbf4282c786df4571cba381389b5c1732367b4c8292f009653cf2039dcd6e0c1de4286f70f821477cef404b8d9a14f65585b8cc177191577c5243434b02e37c753cd6971
+Entropy.10 = 4b72ce006313008e8174f1681fe10322bf185f31a8db8736bdef94e035e43050
+Nonce.10 = 5967fa9c75a93c0e079ffc562e5fbb6d
+PersonalisationString.10 = f3cdaa0a7ee5bbb944fadfeb32f151f76fb666b87879146af06110a2463b9b79
+Output.10 = 4a763a13ea5f1f61fbaeacd3cd0f7df564d88aaae84cac8b342eaf739f0f1ec49c382ee27b5ce07bfd0794f95c015d796852b8f2645bcc25d70a1f4fb8c1f2e042ec97c120d26a89c71b6d2123076afb82978f59c57d333e5a5710581d8695ecbb8734c902b3a0050cdeff4f59316fa3201a23c56d38d4339c635372353105000062259a9700217fa70165de95794bf8d3081f4c7b47948000a77cc787f39502c2ff2cfabba0b6ef7f52f6e6eda41d7646578bb93e5753c1541b6eeda7460acc1c5be3fe959ce709aee31e025bb5fb7517ddab28be4a725af6c94a3bf06f2039a8e3beeb224e5aa50d068a9dbcdf0cd461c65da1fedb1949832f3fa1bfbb6efe
+Entropy.11 = 2b525261b3c1978ddfa0bcc4ce9e825778f6ab04563c3a013c1e38e69aba21fe
+Nonce.11 = f294648a4acbec0ad48e2efd66c55a58
+PersonalisationString.11 = fea7926f3aa3338ee68a9e6db66ece6657bb35a274d79a65fe51e2be3b87b37e
+Output.11 = 60a2de6d286227c08602d2d0bc76b4d6b12a5d5acda5862cbff2443b63ad9bc1320d0864b2d3b63933ff323f8ea9f815a28728c7effa585a8f3a33739941f1ead91b1f045c2ef200140c317e8e6c6df67d951b607ebea239d5c7c2a9d436aec9b571d6bff5132a78e4c915a25448c1aa12335e80f9c1a34eddc696b408996c6f436e7f641d2ff391cfc85d395ed3f183c506c0bab8083e6ed8e704e1cd8eae8a990930dce1e5d728d98cdd034884390e521f42c164b784ea031132f5153e3ebf04b82823441688bfb05cbf8370fe25265abe08d088a9235c7657a53de6dc5142c0cd422deabcc6eb79377c733142e686cfe7be4337ef75067c8d191d0f950e57
+Entropy.12 = 5580b093f694f090bf77306ec904c026b66579f3c51102d3b19babc68e157ece
+Nonce.12 = ab7257bd6e808ef2474a487b628ce94a
+PersonalisationString.12 = a79c6b1e57b7512b5c178003eefa6d03f3916dbefd9a39a2e1c5a564d0bf18d5
+Output.12 = 8d7a771fc0a8ea899f1ef41f03feb7ebe947f30165467f9a5ed8e5ac803f7f51cd05d9168ee95d516585cd6d6b943a2093fef4f7a863bd25efbaf6dc33d2a484157452b68cca3a4f50221864905243bfd0f027801167a05244bc61cf263bae21283acd89954800f433c38f3a90e768d1425260eac41f0128807f750fb3fad302b4d1a052c542f28ca04440aa05311b48f4796e09917e3907a984ffb0dfe58ba1a9227999f6fab97280b44e3e951cd32ad49760e83dbf46d28ab7770980feb177c8ccabc8cd1646aa1893000ef3d3cd5d8b7a3080d9b9aeb19378f5a905497794842d103c48957434238d8da01fa89d4bcde7fa3af48b8db062243049d58fbc65
+Entropy.13 = ab21771485af32348fae88e1cf038cd60e2c875a8ef7857f5fc1bb5a432673a8
+Nonce.13 = ba5432bb86fb476f8b70533f304c94b6
+PersonalisationString.13 = c0bf62619671a60389e72da333e230a2af34d5594bc844d3b470fe3e747ce9c5
+Output.13 = a326ae9b147b2094fe07651f32021c5668f234e062a5b90a96a225b2ab0e0fb92645db0ddf087c920d829c06449e2cc497d7570408d80614e7d60bc44aef6f3bf89b850db6e796b72ba4d8586493028b064cb80094911e4151a57634468f1e7055957d40b9520a0d27fd7f99bf679f31e7c94f0d25de533862071b48f84b63879801d6f6ce2e2fdff1ccfdc17a8e0d97d38568999230f716b8b66d00a6adeecf1c72518dd66ef054df6e57d28d1cac28b8bb3544342a1397f89107b25f0668d2f733a288d52bf877e5ec0c807b9cab3f924f48d90e399e7d35ede45db2210a06f38c26f81505c5284ae38757aec9db48868bf9daa7cf784a7b09767464a6dc1a
+Entropy.14 = 155c57577074e6bbbc350223b66f64bd6fd4781d3feef2e6811339664f59b9ee
+Nonce.14 = 78e7f6e9e8e1511bc0ba7f230b65fe47
+PersonalisationString.14 = 37544eb1992fc569ff259946d639a00230ec1196c5565b8f9da62d9ce552e09a
+Output.14 = 0ddbb84e21d4d7110b933bbeaddb35ad81dc1f331ac8293695b30924f2713eca6f93a13d520da4486f32a12412a927d00e3f27009a944056a5805b0e050f5bf6c6bd32c523c1d607d6e3e97b59fd059a610d664396f69961599ce7f0a0cbd1dcff15474ac267e36c0b871c559fd13b7ff0c3fcc11ff8dac26761a42697c3744981cc5c5ac10cd0f3b285c4ceb4a550ecead095f90fb6f53aa302218ede7ed5ae5deac91a83f957d15ee901746d11777b23c327ee811966690f5f253c7c314a2bf2bea73ca46c6c8cc332c3493f9d023029d762fc90e5dddbb838f2225c521f196332812570a17455b3db45306aa9100ca83185395435137a0b961531cbcafc03
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 3a0b3706134d89aff6236423306e3d0bcaaa3bc1c33591aaef33808e67feed08
+Nonce.0 = 6b76a9b7a537dae85f7a23434c3c444e
+PersonalisationString.0 = f1b75afb882dc42969b6deaa9ce5a4f99ae6942aea213c01eb79e4ad87fd10cc
+AdditionalInputA.0 = 1e74d532b1bb937ad9c7f4d40cd7ce8dd7548adb99258e4b7652bb4f540e4289
+AdditionalInputB.0 = f8fa9374086dbbe84b50651cae672219a26dc6a789d35db27bdf6dd2653f8390
+Output.0 = 674404d08561a75d1dd50d47e234afa0d32b0fef15788cafb72a7747924616b8d31a3364ecfc3948e4c129801b3fb40f7c7d689f1f3c11d40cd7b6d94a58b4a8bfdb665cd55c2c2c4682c80f8fe3b292fb2cee32b5f5b1ce9a169fe61787b4a7fc19d27e08b77af6ad617532e92eb0b1671f87a793b8540a02a596e31bffa7c6ea546e35ce962a5d9d97c86ef86fb2d8c7cc7e6c70cb206cfec80c0230ef72b51884cfedccd8547445914f56c1834f3ad3b715bb1c234bdcb0482491d81adc67c020ac11ead0657e461cc53282722c38fac1f025de035e42153f5f56ab81ce34663fe4be62db94f11eff427cbcf17b43b0029b6b8b7d38916c1d4824c7f627f8
+Entropy.1 = 08ef8f495d14708affae3e4c57c21ae39d7bee3e4f9316e0daa8960a145c7d8e
+Nonce.1 = 95c23f6f3ebe662d28df27651110a733
+PersonalisationString.1 = c81056d8c1e97de17d591a99e5c61753bbf5a75e184c36cd85e1969d491f9b9c
+AdditionalInputA.1 = 6739d846dee917b5cd99c48c339fde318a15acfda9d1491974baba8805cc4b26
+AdditionalInputB.1 = 87d458ed9dd19f136aee879ad433aa57226f5124670738839b61d96a71efb2dc
+Output.1 = 463f161eeb198ff1b548915d18f7b7a16f776aa2b968db62a3ffecd55587a2e09540f3c1f7e5c4c2726f224778aa515ef24817b40c678ce7f53aab7672e26c223d898ce8fbab86354b5a5bb1b5c78002039a6dc19125a58ffd810899aa732e2199a41f2ed585a72dfa7346c22dc67ae529ddb871b57b8efefbc2b52f4b4652f7dee1d56d6aec6592edf7a207d3b2b4ce8993194f157175f499c7c354d4c275e01e7e7c38e0398657d651b70b428b307a07bba2c0ac741bb8d36e52d8b7747464eeea73366de1344bdeb44605ec19404c2eef60c4d49ca99c17a6a5f326537597fc539fe7b9ae3171a70afcfb3798d7d608179df9a88aa47aa254d21f85c73fda
+Entropy.2 = 3c65fa29cfd8e881f5a98cb11ab4a97f7e404f52f7d5843d0dfe020fb78d9f65
+Nonce.2 = 1cef291e0ad29c5e30c226947e6fcb1d
+PersonalisationString.2 = f9a452ec430a2541e2b6f77af9d886da1a342aa42fc31bf05e38375cb7a98baa
+AdditionalInputA.2 = e72be2c8e42039bb28638f8a05ab9035640f312d07112a3eae77674f90e5d025
+AdditionalInputB.2 = cedd97d41dfd9902cf9f89bd11727685f9caa0a7fddaa5619a989034500acbba
+Output.2 = b81ee53f99665311cbfb764db209f730318253c3b2e66f93c9a318520aa8e5d7371142969b25467d392f508806664e67d2d53885dcbc5d8e019b961e3d34a991962e9b771a91fd51956f7f039c3110749429adb9635696a48a3955ad183b50c53323ca36ee2cddde5a426ea5db5a63ce0fc57f91fb0a11c468d74fec78a62bf5fcf2b4093a2c4db72e6159ca5a295261458a3c59cc8b0ef83436d8abfe10653eefa1e1eca341ebc8d874497d20149574badebf40ffb4baa7c34ba690afae7c4316603d3541e72841e19513e47e6dc11b790749e0afcad653ea437f15db10118cd79a136b1cad437fabc4ef9914376c3db6a4f264a2443717b399092bf2512767
+Entropy.3 = 37e5a04641af4da6511d1e350ef93b0f84e93d6b3c15e1ea8c266eaeab4aaded
+Nonce.3 = ff51dde6c327b334e1ef1bc3b939dc7c
+PersonalisationString.3 = a36e25ef460ca1db447749948846ca67163f495fe82b05f7f33a5a259a7b5325
+AdditionalInputA.3 = 926c37bf1ef359d6685840a6430bec86f7b65977b968dfc3179f41e938c19277
+AdditionalInputB.3 = 8e6c606c94743ded5cc78a6b35524a1b45c6786c29b0e0280fa54217a65c9649
+Output.3 = 36b3b417121c83f1a38a4809c851358e7cb3422e703b8b9a49afa9f838d8df8ee691a0c12c3fe1fded9838793d62c8b2d416a5ca94aba8e082533b1d1e331784638cc9acfc26733c8c9cdf8c8c028d7188b4616f5151a3ee1205c620060c2e8c2699da3e7aeea2db873598d2dc1838ab67cce4c8c5e373ab10fbdab07245edb1596c6d788b799c08ca25b91145c646610f5d9dbbbee1a1e2e9bc605a7fd457dc3afa786bba753775ad0a0a25eacb2a7080dad269526bce4d1c6c5b6fbc1ab97fa173576bd6ad1fcc24267f68e208926d508b2267581831495892df850e8d49ebcc364475f017ecef7e4dd18b1e484ee6d0ddd08a9563024e4f31147446ec9ec3
+Entropy.4 = eb940118848eb9f6f4cb5590523b16f247d7ec7f1b697189d5ac586011f1d603
+Nonce.4 = 930143847c86887c18f86f412b2de61c
+PersonalisationString.4 = ced1786d55cdc25e60c88aad425c2564e1a27c6f6d8b65eeea5f4c76779036db
+AdditionalInputA.4 = 634fe5fe9e2f8fd44afe0f9ca59be58ba3ade4cd76c021bdc93cd8f3e620729e
+AdditionalInputB.4 = 40ee701a56cfd622d0cbf5059909dcfd1f29c316f653b778948efffd06023e87
+Output.4 = afa20073acbeaaa624e3adde20a3850543d6fe998214afa792753821d0929bc4f9e2db8f03b9ecac7b2103c97eda0448bd2c17529679128916f4c10113d7435c80975cde9e8a45f205ec97e1180a7f7f7e7c84b71e836be3a3914201645f55063c6f707d33aac37ad0658706b59a742604783947fd442eaf688bc5e0219134533b197302b05b087b35d4d74812bdcc780de4a9b9b2df4150667f4fdeaa0afef67a1f9d614984c1ea1ec42712575ebd10d6b3df75fca345772c8e7ce6308eee3e8b54c2b050575f713fcce6f10a846e3513b48a208674128ddc9b2d173133cce34cc363aa55048683020fda9c038b37e73f199d58f201a59aee400bb80f709499
+Entropy.5 = 51d7364e6faa505a510ce9a6ac4739428d6fccd3b7a7c841edc2333e6122fad2
+Nonce.5 = f33f5c64f591d1786a4d1039776b7db7
+PersonalisationString.5 = 1fefc65641e9abc4b9befa284e514aa395cadf1b2f848c0fe0a11d7544305369
+AdditionalInputA.5 = f0e5a98d1bf0c45c761264b660bc74e648d44b1a542bc68549e948e8ceba1dbb
+AdditionalInputB.5 = 658ef0048affdd317daae554d769f4c9c529d5ab6cb11665b04cc6f409731fc6
+Output.5 = 2423e225a6439240761a2179005acb6e1824367a33ef0da147fc197f5e38bc9034986e0f3f45aa0d6b1cc80f6e1746c2c8a1daddc165edb58b9604c5f13c287d6b56fe6e2675f5ef60d2d811076cece5984207e5c9026e26d43c40934f4178e64188b12e7d6fcbc37da3265bf59edfc7067b8c42dfb6dd16246d60113d1f57498ec91289cf4465895666dde042ea3d60c88d1b2a70e534e937cfe078cb196dfdaa3015a3d5f0c1c3f47f521376d4b0c48566b79bbbd619f959a24906118a819ef755ef6feafcf4a1ae6ee62baa4c402b61b73347f703ca4fbc35f83cc7698168222900676c8d7fb3c2c6bdb137b5a3b8fc5c1cf7869a55179a3a411329b0ef8c
+Entropy.6 = 58a3f397b3a5139685781f7358251ebdd22ef1f86833014f2910302b0c691b3c
+Nonce.6 = 4e620a29d315b9415300c913d9cb4e35
+PersonalisationString.6 = f5c74d111e39cf4664a7e5c6be148dd53dcd34684db0abc9fc01bf07af705370
+AdditionalInputA.6 = d0aa25c38c6a26716d2d2dc700a3358eb17dcb2168a1d7612af7027f66cf3187
+AdditionalInputB.6 = 19fdf2b40f59b32964a16ce77ad48f413aa875d541d2ad6e9e8d530c0a14d430
+Output.6 = 92fe033a889367df0c034fda8029c815d5f505207eff0b190fca5cca46517ee2051364621f53ab65aa3d23b7c50c50328aa97883909efd73d86207c13afef6f3ac559de12e6c7b277e8648dadee399f9b97092420c862b835744cd433243c64daa9409edbdd35988938a1ef251c4c821f399ead09709a131de03ae18a72f76b799a9bf9770b23bec3291b57cf99b5e3ad21f7b7ddbad9a90add400928a5e383e3fbe7b8cdf14665ea46fc3b199dcf1751dbeb79ad2de31287afa7105b99b1a49df41dce4d81dd6fab1d52b1f3549942b0922d16e943b180dfacb2ec9286bc413257c99c99a8f993438878b436d7f1af97380f1d5b9fc2c45d14f3d4cc05fbe10
+Entropy.7 = 1362e23afb6f89456f7f2f69f8f24575aedefc274fc5fee134fb5288f8709a5b
+Nonce.7 = a9a939ffccd4ce48c727ebf7eafe840b
+PersonalisationString.7 = b4212e43b1e0e1c442cd62e4ec3b560ea3de20a753d710371662d522b62ce859
+AdditionalInputA.7 = 827c9370783c53637d964642540b2ea8efbc08b5b5bb76c72b1d288de4a3b993
+AdditionalInputB.7 = 984bc571607190030fc278a5e77a872ca43094f00a18ae904a621161d764e939
+Output.7 = 5f844333935828907bd210484d9414f3639a669fc7ff5938b1d5c4b1291d316c6b0a6efcc80473bb21887608ee519a0b32fab5d1b2764ee5e7627d9abdd8118545775a0d564e37ff194c7d4e1b5f1f898b287e7317d04a61faa60d58587c604f470ba77414134c798d48bbfc0f948c7c95c13f771b27c0c7f067779f312d8bfd380533cb600e8b9610e68502bae5d7e61616574d2eea0257b8b1dbb4ee998890503ada086adc843ad5558141b8f4c0ef84711a8fe27f709081dbbab825c9112a166a823585e75add664ecdcfd65c0ec1dff6b22362eb8d5e864cacf78ecb765a320f772ecb74d6c72ef3dadde0944209c0099b7935dbe5bdc030d758a3905563
+Entropy.8 = f7001dcae15ba566e36b1f344a4688251594e966232272e355ecf5686c6c6844
+Nonce.8 = 594bf38379b0c480b318330c32ddb8fb
+PersonalisationString.8 = a2f5243e82297d29fde60051aa89a94a500b0097bd3ae8fafd54304d1341c761
+AdditionalInputA.8 = cfc794fb9ea04fa24becdfdc905eaa14749dccd0e1f8d2ac26ac13406542447e
+AdditionalInputB.8 = f820c1b28cb37d06f714c24f569c206e20f251decaad18b297c1e606af6ac90e
+Output.8 = b48c01352a87d48cdd15a3d45e8b2f1f76414c8583b11d3cbb74e8f9acc495997741468fd557776f5be8c14f526ce2cb8c4436fad2e954255cc06b3471b700038acc3b2fc9a7669f1f81a3988eefa5fffe84adf28daff56a23f0ac8b28ad7353a6817ba46f646ed82a0ef76ea577c68ece2946e92d146b9369b668b675592b74e6d298817983e901da7b9c122d2e7e86dc8896203058ecdbb49cb25e11e355e1bb80a636ce1eb3bcbef77af28a1ba08731dedafbe360dd0599e3b66d50e577156934a85046ad1c2a6fb2acdf17b2c4573c45f6b9a9245726210d12d9b0f04abc2e21d37f26a555a48fadaac303869db4198da105b68357e11f1765b02528eaa3
+Entropy.9 = fe4fa2ed2fce276d03b9ffd9b6b0f8b04173b3195d14cdd4190af99ab015e234
+Nonce.9 = e026427bdf89bffdf15c1325eeb2f292
+PersonalisationString.9 = 30734cabfb174c5969e6d2597b78cf66144a2fda03d5652bc9e12ccc59f4b1c6
+AdditionalInputA.9 = 6b2b5c92357ee522c3c462157396d011e3663a6f4eaa209914338e0ecfaced26
+AdditionalInputB.9 = 13af0126d29bc72ad64a512e43e8849d5526e5b698f02705492889797a1af2b8
+Output.9 = 19e5d5fb0a9d10ee2c485f5cbd4f5199daa36d6dec9b4f9ec5026d6bbed88f19b10101dca033283250016117619040f83183f3b904ef218f566439386edc34d6ff3c408ab57d3c1b3789a5e1dc0356c37c4437329e17b19159b7b5316a52d5264c065dc2588c468d9c573b2cad9398854ccb01839eb540ad3d2f620d63a45d8186ea86beb07d8e6e1592706c34e8bf20c1796f493c9b54cd3ea8c677a2ca601bb28cdfb5232ac61cfb54c468b4ea71b4b28d10d9ee70a91311e6c82ca1d3a2e222caaa6bf3395924d9a2ca6c82c317c8b92a1d57456f8ec95bb9c6aaaf16ac8b0436e9bdab337ec3ed50608b52fb62332fd2f0fecc218290131359fb070a38aa
+Entropy.10 = 83c40c76f49ccc74f46fd4b5c9a2c3ae0cdd50c6a9db02373652e809ef5f1413
+Nonce.10 = ff50f2c0fa12f5d776b65e748e33baa5
+PersonalisationString.10 = 9f84294805592053461f03cb2a975c7b5ac1768f5699818181da7972649e6600
+AdditionalInputA.10 = 659bbcccb2eb7b29453af3ec50519f9c4c6347a43fbda504cd04cc5a53985513
+AdditionalInputB.10 = 39814933558bdef6313af6957fa69ab5f97d7a1343b866a81786061f1cff89cf
+Output.10 = 433400b05cf98c7c69f93744a66f3e6d41e9ae7f72c9aad4f7f6b4e39ba83de9c22ebd89f54fa0fbe73839288a19185a24f3b68b42281516f14e416e8511df0cbfeab723fd55c5b26f07c7452960da9b1c7bab5236cfc0794689188c82b9150bf83072ef7b85e8842ddc3a9548d8162cd908f7126e1c96fd697f4c2ee6a53850447373a9058331b69006d72db638ee6fc9e2228492bb3455d991579eb87b198fd3ae5b4f6151b317d1155a2e5c24cf10d46688de98428f89bb713df8ce0d63544cae1c6c3b7f49022209224962d30653a95e338e130c3dea8bc6f8696cf399028513ac878c9f6cd06887f359c69dfd3ebdafd75fe6a0dd9c08c20a258ff1f10d
+Entropy.11 = 66cfe30c8c9c7191de5407f667f39963e6349caf7e7a9cd1856de291a8a06677
+Nonce.11 = 0fd8c9b7adc1fb95c2618894f7309c0f
+PersonalisationString.11 = fc16896c106017b51bc402fe5aa26662d2226a9b459fab00e44b32ef6d95ad1b
+AdditionalInputA.11 = 3ebc9d4ac1b48beb8644cc9e20384a2496e1931b2a39b9224a614d6504ffddbd
+AdditionalInputB.11 = 01aed38466bf2cfcbc412708ac90502bd81b022dca321e441ca05c8e0151cf86
+Output.11 = ee00b9b160b918f1dd42887cc7be0979a700f89e84cfccc0349b4168c578d4a7d53cfc144911a9b900a3acf6cb74e06b52c6353331b9e8a071dd89ca6174eb75e7636fd1dbe94627e89a6101a62cfc8c19eb1e21fbf6d428c44ab1b0b8745fb2a70ef8899502c37f07a285193834f832f3053678ab819f8f791bab1c2369b879ae319f84f0fea72ff2829eaac1a1a32d2aa74c01f24a945d8df100b4a537f64b495bcb8bc12857ffa359b1added6072e07ba4c50c72c7bbd3bd14082aaa3f3a240dca0ebf9ddb3041c7dfd97e13dc39d59b95d4cc9e847786b758f03d61331cbcf98564e586526ef35d81ba64142924b78a9b07500b9279e4f2ef15afe8b9085
+Entropy.12 = b41c47f7e5fa562793637a07efece07ab8f8f6e687c707a35734841c43cd695f
+Nonce.12 = cfeb8ca4c4f390017317c091166de472
+PersonalisationString.12 = 35b11d5c52a3ea0265e37150a3d36ebb7957dff52f7e9bf7893dac60a6176b06
+AdditionalInputA.12 = 99617abba37108c7f4e3439d437cb46ce3d42918a8e7359eefdb057393ed43ae
+AdditionalInputB.12 = a5ea5eafc4f928ecf420b7235ef7002289957fe14ef47c2fc2dffd8f0da6f20a
+Output.12 = 475c2cb2214206b5308a9d555c8b4f907717c79668b98be367cc84fe11369134fc03aacc7341dfe75569f6f72b167d7bf7e5b380648d8a219ac79f5d0a0b49e96f8ed94ecb2c7dbf8ea8e17e793f77e698a44d842bdb8b501a8c8706457dee4034ab234b64c8b8656115817bf574de6ee94039d55d4bbb93f93bea7d961db524ad56b635fa60faceb45d6094bcc6428cf5cf92ec86f79784ab899aae3eebf8790c7bd86b6e688fd616e345a2378dd8e29256d7b91824782629d0e638f7331005ecc11645502bd7213e3face35a5a38c8c86f9aea008131dcef71c882c9256bed724cd327d3b6d05b35222ebd6c06a52833314d3d905e7ba65b045af5c43f6660
+Entropy.13 = 8dce05b8520b51970313d0e3f06028a21a5efcde248e36e274e8ee8b874182d4
+Nonce.13 = 370c40acb4479075960ca1e2d4ebee57
+PersonalisationString.13 = c9cd41da22c36d99ac4b77c44b0692dd1b04fd8b2235b262da09d77b1261d774
+AdditionalInputA.13 = 5166ddefe0db8d4e95b2fd81e07b529e102fb5cf95abe1c5e4da717630e26c46
+AdditionalInputB.13 = b2d566cb0d0e49c38201ae12bbe49b9700ab419a4cd084b0f67ebfe276e60845
+Output.13 = 03296ffd55200be23ecfc44f926e2bde32cf535bd67102d8df6116e3eaa04bddd6b7139e61c8571c976c82f8db5d045bd4ad436b91174c4330a947611d65a44ad32fc6f1c62b085c6a3aa9f64751b8401df8664cdc2b99aa6048d04d58dc52724e70904118b86d718b079cffad38437530ebac791cdbe4ab748635781784f1a4f337228e33f0af928ae5613c0c525217be21ba4d9668112da88f129a63c3343d68ab43265c00c6950ba69c80a4494dda646d5e01c9ffdaa4064f55924a2639c14f865fccbe8148efd2b9e9223d6e8c53043004e4dc3da1d8a02fa7480d60ccbe8e6fd532c720f9f4517bd2a203847ccbfd3f7b6cba6316ef9c719d636d115fdc
+Entropy.14 = 9e8fcb613facffb5f2608253327dac1d943da7879e7aa3333126473291ea6494
+Nonce.14 = a1ccbf3b0eae6d235285da6cded02909
+PersonalisationString.14 = f5da0f5fbdc2306a08eead8a57a4baa692f5e37cbf7e711ef7a963734fba91a9
+AdditionalInputA.14 = 8dab17e96142c890eb16981b97364223e815130bdb0c0c284e50dd3349c0c82b
+AdditionalInputB.14 = 1439e2d19a99703fc35607b5bde55331eca67b2b9a9f7587ddba0dd1fe690ab2
+Output.14 = aa088ba4682bd2285e90c7967a7b8a518e0ec45afd490d367022893e3822c09d967d06ff28748b5de3fb33b071b73c581bd893b6641a72cd5db35540b904eae19765cc121ca4dc9404530114c3369fa80d20dd63c8c09559c4be48aa26ca77b47579dc52fdf0eb2f2db84ab688b87f63097140aef65410fcd7a81c2bddb2c92f9d67b2e46647aadd9b85c9e17ff8b579cd672708282981ba54d854e7c9a1de66621845ae2d337a90025ccbdd1b0d695790b1f977b1e944bbc04d16a9a399628bfb33f98b40e13567514d8ce0b23340803718ea3da44fa84c923f2a85ba21495c2f9541cbe8cadc0b230b1b942e934eb4fe95c3754a77a09641ad730a550fc24e
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 0f025f0a0226f2157269122d07a77a57ad00e0880c1b300ce0ccaeec1050ee45
+Nonce.0 = 4ef3654c08e3ce4510e771ea7d031afb
+Output.0 = 46c8a4a0802b7636e92c51376d3b8c028804d6e296cbdc01841f3c3f753c12b52fac5a079e58171c1b5764b4f7036c2c13ad66c2feb8e66e9a3526bb838a7ece35701e075265333f7391c01132633088d686d3fe6e8d432d26d0bacef5bd8c66c9543c9b3633c5413343458129f6074ec937de6a27b7f3ec9b17ffaef9549f071888304cd0d8d103b922ab835acae44a4f9fff00465344f214e21bdeeca836858c9c38f651d24ebc60c2aaed83046ab1660f0ebbeafd955b681cedc3b77c89954d8f3f6950f614a6db70a4fc3a06c262cc18d47481dc1a0cf3178be2a2173eb565f9a054cc14f27fa436ff4f0fbc94a0dc013f0a358f55a0bfe4cc223ea4db47
+Entropy.1 = c5c141e969c34cbe958f7f7d9265dfa8fa7f1d4c861b059b317a078077bb8687
+Nonce.1 = fffe17bc7a56ee1a19a19a0b12d7e5d7
+Output.1 = 1655f23d48cdbb733e14cc69c1da950fd14406d92ce41bf6056f83cd5503e5dff368c58991365223e202e0523696c67bb985d94d161ca124e7fe27230b36fa580c9177cef6b0725ede59068264e68b9826c32b2c8c7e442a55b78b4ee9809de0e391ed7fa60af03c96fd6868d307e6c61d90ccf6a6814c02f8641fef75008b727d73fcea92c9fece1f553d8936f51b8dc6d6736e6907b74ace32fca7963fc11541fe978173629b4aea86bb84624b5d4ded151fd64856226ffc4d37dd254263d7a8fb4689273066a153686852fc0b0d1f6781d1ba209d5238e0109b899c0efc75668f94c71dc9e68771ab11d3e352625680a3f5c8aaf7a144854c7623d6fd7275
+Entropy.2 = fea87fefe9eaac7ebe0d77cde87fd40e84354c06188d5e077058c685bc7a23e1
+Nonce.2 = e4ee2c0d6078eb436a063662130eac45
+Output.2 = 5c80cea857b936bfbb882e3a58e7df17b65a49c6bfcb1f183ce96b74eb53319be82afb8371beb9458167186228f1b5cfff856b1d5648693a0b99f5d7cff61866be763154d489d60e0c7dcbbb4343e7c36130cff9f787ccc7c813556e6c5ad7fd42ed2bdcde950af5c6a4e7d1d9d1918cfd28f0863c8163a044485e29bfa40078844a321d46b4ebbab2cfa7447a6d9bdc819bff3d8aaeb99e9adc55fae6e3fc89660926f1e37084dd94107ae7bd6a256851fc2a351ef2aaec1a4a709ff48f52715b74efe37149cf98055ea2dfc0a3185fb7ba0d24adfdc00dd13106edd78590b80ea47e865d17926c228cba1c5fa3a188b7dd892c8947ca335cc56d42d564cecb
+Entropy.3 = 9bd21ef53f195507c8efac8bb42c22c808159bb2d504c0eb38b6664fad9c7f4e
+Nonce.3 = 39baf025d0a74e580bb28f3853fe0c8f
+Output.3 = 13198fadcdd9487dcfadbcbd1c53d9b5313170d1d2a4596f1c1b945ac7381a71c7aef8573ba5d2d5d282b3e1b9e3f272d704e17655665e34d14df14388604e6f30d92faf9ca51ce2422f028004e720b62c4f700052a387ca96a16b053236940d6a1842dde5df8fe68595d1038b82ec00743c4f31539514dacf58a8ed2aea0e0414b7875aa6fe591cf76e14653385c674872300441cb30a27bed8b036a0ce9139ecf995cd66dda412f4f8053e48d475651872f9ae89b161cbc99fa3dbf6cbaa2708b02afa2cd69737562fe86458d78821df77e6f82741f9dc56d7c0c806578f2459048b890278382763292eb5b07aba1eea365afb704d762057154a551f0736dc
+Entropy.4 = a2903152c9c4308b8c1a52b3d19594872ae56ecdef67c6aea5a54897c3862e5c
+Nonce.4 = ca79f1cd283a142c7d69f845ec4686fc
+Output.4 = a5f63d837a35bce8285e26f239a636bdcd220a9558f6ab809328df034c28cee1904cc1aba40418027ed2e579f84077eccd3bfa5ddc303b9f29dcf2afb138b17768d3b0356c23496de614108f54d6a8dd38d060f69800cd5ec5746f7249316f84a5c8324a33035e3d585871bd2908dcd5f34288a8fedc8ba6b5fe89386de39e8d186a71203b7e5b3b2a7a95348630e61473d01cb38a36a57ff7b1d7518ec9cb37edcbef4d81f4b2a75ca75ef79abfe1377fe678c53a151cde9edbad14230f5e0b17be4b253c473c9f69170982ca8489d1439732f0a912c24ed0445f9ee9da76820ac7c95855c6c4ebd668d684768bb9e411a2cd6658afc50ab5ced87799ed3727
+Entropy.5 = 81df6214fcd7c04e1a5df60114bdacd850fd9f08ab6da2663c49c18c3f3c2b19
+Nonce.5 = e64c4fbc5a8dccc87f7a16ca23fa24f5
+Output.5 = dffcb91c73ffe1ee0864224faa30ed8698a3e98783366dd7292c9208abf7ae0d0ac5253fb1e604cc5d6ddb80f3e2020f594025168d968be6c623a46d7a2830d8f7a12b505180a4556ae7c0119d87e3b71d75458afabf0d5aadbfa48f6dbcad3ff27904fd4c258ac0c0640d283d3b73361d1dcf69783384dc1a771fb586a7a8cc5a879d36bc4bbff7380494c0f8269cb8f02217463255d19181353e13bc971d1ec53a19f3be339cb17498ad24289cfba76daf1fc48f2d10aecc110352b940e947e445a332ff3f2aa10661b708987e7fe6037a864e4b30c03cd2c3d8a1265de30b823d9da470f900e0ae67ed4c4172e0c6f2de34345f43976c521fc84974d8c616
+Entropy.6 = 34d6a4b0707359ad99f66be8fe5c6ef3667ae02c4dc8424ba032c477528d34de
+Nonce.6 = e0ad85fd0473022ba066300963c0d6e8
+Output.6 = 4c356339929f1ff03ab48f19d926e8bb58fb594cb0c8e7f309c21fef97b36f3c435167ceef664eaedaec74bd3665e007ce9d9a13e1196f8c28b67d98f447937ca776b66b9adac014ca159d55a99e0607195ee97c140775e7e0321737072142f9caba600725c6b4eddf7013e71ffd5371972be82638a3041ff3bad3c75c7db30cf4b6383dcb5f8287d31864d8964f23e5011d75f6af46f83735209fe564f7ff16853855ed773f0584b658ef94b8ecd61c7da95ca8f2f755401048f795b6fb13e2baada159a07457739b0810938e306c88c28833492435b09c3707e21a07909d7fd05dbb903013f1a85300aa6ddfce2ddb99e2222ab64fb86b466b6ea55b3302fa
+Entropy.7 = 6c8a323e45d62c399e4bb39d7ec415da5462320550352b58d750a08eacd0e0c7
+Nonce.7 = a3777d95021e0ec49284264d8aec2841
+Output.7 = d7c0d66f844dbf8279033d55e909f1d31c9f6e6fd58347c7145d8e5930db54bdfb42c89177165d54f079d4fe16ea5f5111fcecded389c450a8fad22cda5afde70d24935dcdc76fbdf161bf24f8cdf6f2408d0790972d1df2173c641fa534a345b6f234abc0aa1281e2531442c3941cca77466721bf6178262cf0a97bdecfc61fcd14a8de7efb9ecc14718aaf345d809c8bd39b0746b6b63a556d27d0a56d8fd0d8edb36288ef92bf89709a36d1fbf0228066b67b5a9991edfd75d47fd6135dfbeddb2ca36dfe27a5ca31bfd24e3e4828c876c8721d81bd2ef2291061e3c9419b3121d557ce3a34c429ebd070279264f853ad256d09723613d1b21d26615c5dc8
+Entropy.8 = bd16765357555b8bcad0bcb3e7510f064a0682c2763b35235e453c3e03f1cd90
+Nonce.8 = f8444e16c867bd6d0c99689b5fd33c6d
+Output.8 = e19f0a6cfffe8f1dab321e63650288aafcc689d730065d2aeafa2db661d66a319d9ef454d87b7e3d9df89537cf20d735d6cf9812b0db8db219a1abc1c8a40ac60e38e3e0a2de494dd962d74d612c003ce333e63a40c429201c373c75e7abc505cadaf13274e3e9b1cd3f0bfa5b3167598b24733ea6199ebead46bc6f0e1ed2bc3e246482ea141ab2cebf4c4ff1faa5c30da19a60c3c9b11e2b0f6259e793120c2166d5826e2819ac8d5f31b5a2574263201e21f5c82fec2b6f396212721c0d9ebdcd75b0b1f2a85bf9d9098a1db35fec6b46ace45a7674c272fcb7d33da9d857eae0ba8c5aef8232c3b877847eb8da6ed363e93cbc20f906aaed7d3b402651ad
+Entropy.9 = 63245db20f9ed7e9971d11411d8bec7dd8c619c186aa773bd1c212688f63f1a4
+Nonce.9 = 8eb298afd828a37621dfcebc3953207e
+Output.9 = b39dbd68fc00d55e6ea223f3859f657f4bdcf7485172620e9ed64945228cfe4d2045b141372921c6ff60db2c368a953cf28225ff9e9a2adaabbdd08bdf8e1fa3f66586b46568062eb1c4ca38e16ea89ed4357ec2d62396ac71537ec19095046769d84d15e5f8551ae94769e023f5053e5fb47672b8ca87192327dd21b7610d90cb534e3eed32d6517102a6c97e70a63a3342ad6728db1d6aecff81982f9a3eebb905b1cc47d597b393934ee2ae4f78ad081321fc702477a0e0d003b2eb46ed8f1d5fb934139267b0dba609c45334275c88f7c3d38cd601a42f3c7e79ab7a65614214b1980b53ff54ebf845430d80ead61cb31836de61984d0213d6a4f7e58d02
+Entropy.10 = 4b28b3e591bf4de102f6059750fbc3b257013a5ee9acac70150e3e69f8c3e8a7
+Nonce.10 = d48010157a266089207cdbb9f33417dd
+Output.10 = 8db6436c2222efc43f8e654376a997b545518ebed313d56e41ae2c2106479d67c92312ac1932a2fd34e35f21f3334b3af34b82234f7a7f8edaa4b21c2d91ca62d01333e55bab9a6c57fef029be043a1700851c4d41e35d667e4ff828086fc0db7ba7be7119c563189078c5d44e779a6439b1e03eb99da3ceef0b251b7c0d9b7656c4f31298a8927c36bf86d2692cd3da393fd6c05461c392f32a20f904fa667007770cbe34c2308883819006f8cb4d94e802a7d48d7c4921c33b713b049019b412df375e9c1fc73b52fd2f4142f41bb6f4d081f11c51221588a44640d0991bc0f2d8f0c1934080d0c3b22815f2a8346567aad97c2e90448f496e25178bbdb095
+Entropy.11 = 46bfee256f59babf082172c127bad6c765abdfe7697bb0c5f2fccfacae6683ad
+Nonce.11 = 58a5ae0bce251f0bf90a8842dd492c76
+Output.11 = 6d0fe78c5b2520222cfd07b407f6a009316735d845a2091a2dbab1881085f45a45111ddcc9c5533b26dc40fb357d5937866f834df38890a00f986d6f4438114fc1a922f0f5a4555596257a76a14aeba3b04350cf96f511f9d95d3fad0340e87c9aa1497a54e76a831de3569b8c75a343e81846549d4cf9b22060d3634c23563a11acb1002a926d236a8b2b0987711a1dccf5c9db17992379937e162d60586749a1fa30ba55e98990dd2de252a7b5fdb69fec6f0f275f409e11fa36a39eee404e19f60cc2308834d83e031e0936833f001d4e0ee8afd6a95b575675a63209054780ebdf0e6a9975a417c256577538a960cc9a65ebd4fd05550c28ddb82283cdbb
+Entropy.12 = e6d74ed56c614d4f7ad84a483712f2950d1707f22fbd17ba007574efda1bb907
+Nonce.12 = 597476f8c2399506ffc8a4c4a8cd6c35
+Output.12 = bdcd77917724d8343827fac4df8f6bab525d32ff935fb8d907cde66a1d75469c9095b8227b1ca1e32242e5330184ee4dc3a26d654e4282cbc3f60a6a9a0926467deddcece4b4bcac8c3cd4ffe21c1a9613dc985b09bb36e14defeec022b5c067ef37fc94fb4179b598eb5e96ac302e17832a6539c1d5fba1a229bc88ef02758cb7f644654f3860f70965af024037320a1c4839fc267c54b10c1a4aa91d0c04fc6122ed28f6ee4d20eba4af2512c898ef9ab35e09f754d1fb9baf9256961b1814abca124e439b44245d3558a3ca6bbdb7a01df7875a9553428006feb85a7194029d578315f1b2764e6586e5800cbf214a9eb1237c183882671dc1d545945d68eb
+Entropy.13 = 62ed680cb940790fa4e83c5bbe1143b8b8fbc1e5f1325adb1c58071ebc5d5061
+Nonce.13 = 963694cc9244a17afe30497a06e3432a
+Output.13 = 8396f1eaabd07b55c64ae1b70ac585fdeac582956894192d08291e97441eb1e7508b00caa5e75a4d29118e3d9d45313335fcdefac07953402b28c887a0250ab47a85e07368a1468347d4d678e2ec7eebcfdad9133d86d76e7253e85bc9fd873eb3f09a8e77df0f0de753d05eb0b51c36cfdc9c2c42737655719820570884f77d6d35ba232538870333ae3c3f3bb9a9f072e6532081bdb9574bf539dc2a8f7475c4871f082b501ad686b66f4f5b5557479cdbe829e16138d4c4f3633078a59c05984eebc74822ff7750242ae1e27dd43f73073700af07c63d85c8213645243d82614a5f7f7ff2d478c384b3cb6d9c967fdecb0d2dbb5b9e7130b351ddeb64c647
+Entropy.14 = 5f72e390aa960846a0004d266e3741b6fe0aaac98d9d87b4cbaaa7a2af0d0bdf
+Nonce.14 = 2074991cf0c22cd34b2de48ea1f9ec66
+Output.14 = 7bf54b69e455c7941e8e24ef59b5525dc1ed3b7f934333713b9dc305dcae2cd1b74648149e04bb4f4e00b110926a6bfead7adef954b6d7e180ff820192677efa3c0c8af6a3e201d8d555cc599cdd2626d8778ea2c7a2a8e0c99e719929ae9ac4fb9a7e5176da8987508d1152909f456a4ce9461188e264cda1c879af1a8cca6c182e73c164986cbf07f441756791fa1fae40b784800335d94b0b54135831044bf0cb5dbb5c0c71de6b6ae33d6b87782d34be3cbc2991ad109d6c0440916d91baf96c4375ecdc9f09dca79671a45309c408062cd08ee623c8de007cda3b3d110425d7e8fee13b2a14215033d9ea2397cc6b5c995f37273a00dbcdf9437bc77857
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = ce6658eec19c7f3871198fcd4bb39ccd808962969678503a64f1f0a2dd73e917
+Nonce.0 = 63eb7bedde814392544cf9929200afb8
+AdditionalInputA.0 = 08f75f9f43c59b46b8f432fbe88ff8435f98aabb0427e64376a0835022dfe7ac
+AdditionalInputB.0 = d0c1ff150a241b5a40c5984dc0a38846865c7bce547fdc3f4d711970583ace9d
+Output.0 = bb9b3d88564df2ce454c06d408fa6b6819cf5b847f1569831c6d2915877dd5b2ec6fc6df6c7eb226813a2792b2c33f274324452be2fe931966880474a1d7424a39302d803c5d1c2b537ea0194436758476aad1da667b2bd17de53ff8eb79a63316a9b7a3375c1b4f96aee67fc4479b2cbbe705b4d8e8bef85c0b1351ded321db540f91dff14bd625def3346c7460e92ee310c29b2ddfe361164536be9e1a0dc0578df95c3bd39ad261f5b653a72a7576d33542fd29086bdfb8ca9a97135c9868f42197c3dc68b6a7b9b1989b0e0bac6c094cb16cc8b2985b3567ec1b385bf09a78635652d830f06c818b3ffab8d898a50a9baa3191634f245e4d0279e14df134
+Entropy.1 = ff29e97738c57d4378e7ac2106eeac3edfec70d237a4f4a0a25ed696e40a4f48
+Nonce.1 = c40bcfdf12f53f44022d7d1af0fc7a36
+AdditionalInputA.1 = 308352e11732bb0d6daeccc0d8e833904ecd69af399e36984062318514e232b9
+AdditionalInputB.1 = 044685b8235a36a6ca5324accaa111dec84b5a0ee8ab7b5d90e181fd2ee2226d
+Output.1 = 463ce56c03da9698df7a73d81e4b65e4875c0a873a4650ae2dde18bce0c6e11216b25e8372f2d518d95cadd8ece67435a5ac495be999915ba33f556fe7785721bc27ed5580456fe44a8646798be94344f76a737fe67f7475f0c072e2a1fa17aeb8abf4bc490f3051e8930a911768bed2a2e44af818ee4cb87b43f58698d559cb7a4695b7d30dd51aa000b04bb32fa9d64e97d523ffd2f2778f372c7028bae0285375e2bd8d776e7e4dc96ee6ed6f95a8ce8e314479517fc6908da7c8e3124854088b7aa5e6440ebf415ad7d1b5584203ecddba360c3190e5e1970d3be323e69535ecb03d85e30e915cb4fafe8a10b28eda1eee396542afa2b2bdb9a1b16c324e
+Entropy.2 = 9bd2004cd65872ef6c6a77630b11c1281de1bebc32416e6f8605d3a7ae1ba7f0
+Nonce.2 = cec537e762ac381f6643e316ea9f234c
+AdditionalInputA.2 = 2ad84d7fccb80113042f708a9660a3866c4caa5436f35a42f699f648a9050191
+AdditionalInputB.2 = a6865e03384aee4251ebb79ab878c0656bf1e5d96991b1703b9ff6d8da151f53
+Output.2 = b1a2fadf88d4409ddfdd7de34f6cf275df2f063fbbaf36b52507a27e94f6378bca267ce616e83783a4bb503d341a6677d6b76ace231d70f2f8f6890861fde4e13960ef392a0f9fd6a248bb366ba80a0607d8bd2c8a0ba8f507271a24b20a3dc4e96ca5168f02dc6e7c6c6ae82d2ea13614fb65869ce8d0e93bfb03fd2b43bf72ecaa524144b3a7827488f8c00de1ba45cf8992c6315742d9749ec16f89310932b182ea4526b0ddcf45c7258cb4e473d51bc0576d1c48487d2db822b2730590c8d8a9dc9f55b19f455f2bd422fc25ceed04c1a4910db260e1bea23e8e3721833ac23974134e2211928d777f1e2f8f6867b6870b1dd8a90b3c7dfb3313c0982f69
+Entropy.3 = a3e55acdd8a6c386cd462c49cd1f58fae95462fc2cf721a5aa0299793cd59ff8
+Nonce.3 = ba858eb3d4a691588b133c724aee62e3
+AdditionalInputA.3 = 4c9d80d64061c857ea1d20ef1c2794885e03325e404ab6bd7ec3e8b5866567a6
+AdditionalInputB.3 = 2b6f74d6e20d0d6d68acff4c3bd188eeff4bf0c710f5366e68a35e23eaef4450
+Output.3 = 36dd36fbc96d728e218b89740a32ddbe7ecdcf0480ad06cef54f3c56f054c32e58c4f8f0389235501820bfcddafb9ba13188074876abc5b3ef521f3164353c073b241e8bbcbeef5872512300f766fefab0d0f55fd740731d5bda4854feb27ac834e0657ab94458e01b88d6291e97fa1324f62ac0450b07306dc134e639f6eb53290766c37087d999a22b74865c6b56ac9d81a5e29afd59e68a46b620d621af700be523fd5f2dbe789797371370521cd4d6b5b0b8d642af968d89ab6f94ce11b5b403e71b5c243a6ce875c056ee9254a53a55d5e3b597d57c4829fcc6f40c6264e82549e462876eebe4288a701afa31e7b0defda64d39dbe777592b399a689904
+Entropy.4 = 2d1e5fedc9f6e3e9219900a5fe7db1625c12fbd2fe630f6d722bfeb38c22a9e1
+Nonce.4 = 18213f57dec5d7118e29c86849f7ec5d
+AdditionalInputA.4 = 07eaa9c0376a479a6b304b7e83f7f0c653b576d80ee0d71be99488d0150dd6a5
+AdditionalInputB.4 = 52b1937488673c6304e24ae6b877e6f1be228a827a9b2db7368472c153baa6c9
+Output.4 = 04d011cb111bdf15c40defa89370f076f9e21ed4073c82e1704a43ff009a4478e8549e96ae9358f68e6c6e7e49c3c79ce738a3ccfb55520b6f6ac24de29411a5c232a6bc001e495bc80b986d2b701ca601c7edb29c06be2a46635d4cc97f999762919c221145ae987e14908d62af35c14040630610f2e0041412a2dad1883308664f1daa039a5a7b3393a4e69b85db74a6ad0f7439edc3414de797f05d4cb45ab765788527a5404aaeb88cca750666ccddc7eb85eebb206a1031d6c7eb058455874e0722205263462510880e8d3540394c35a7e1f8efc99d80e2772740c327db22ae8e84d07f7ad56dc33747767516c3ba804466bc860d6b466084651a462c41
+Entropy.5 = 5ad5354b55207a48bc7eb2564cfed6089c3f7a89851e8200146e84005cd3f85e
+Nonce.5 = b40ebc660b795ad35c9981202d1e62d5
+AdditionalInputA.5 = e4bb01a98bd3a20abbc9f9b348fc0bd9eedda7708419d28d41fd1382516d0a4f
+AdditionalInputB.5 = f8ef214e1702b0006fe65df9addf6bbb1d3ddf73ae6605ac30d885a1af32b7d4
+Output.5 = f8813fd53bba71c562c5443991644b64c0647eb1c13278cfd6afce46d1361cb46d7ea5108a6a39c90c698b3a159859ad8e93c07b4c8962ec20b429cd943ae977099e9009b3ba2a1fe9dd2a03db94a62c4d35c0030b6db24dde3462ef975fe689f07f1b8ee503d826ea0c97655dc7c1a3821806d8050b47e5ff516864209b383fa1b96f9e621a04f8288606ca6229a78776e52bc27436fc4180bcc6b7529de43151ceb8dd1e47b91188f669f7a7df3b5dce14641dfcf90e4223c9521fcbd6db92eff80f45162fd209bfbe8d26db68a54e4b9fe01a87f5de3ddf3174d2f7fa892746308d2e470aeac026908af531eb6aa33aa3e608a5a2b7f17bc12a91ad809057
+Entropy.6 = 98345771d2b2478cf7e8f29bc819aaf44b162405390951d1b2c1400759b1393b
+Nonce.6 = e95e5fa513290b0cbfc6c2103ef6701c
+AdditionalInputA.6 = 5227291236a97f27ca7c70b8a888d5429b331acae8fb0b062e306f168305f10d
+AdditionalInputB.6 = b9c1eff4efaf8681d92eb1f609b150ea30c5bb062b2a6de2c68fa992b38d338e
+Output.6 = 0bdd142c6a5e3e2f7c7ce72ae8bc0b1e73a33cca21d0fc4798f668ea7994a26daf473e563cd2a67c2b47ad4ef855fc6995d5375bff84fa8976a51b98a6e9257b412d5191aa6934776cc1a5e34c983620c1750203813030784b4564378fa46dad7f19926a840523762012d713841336702091400cccf80b80e77b10b017ee4b183b6f464b76072b838654e3af56c8d9b382bae9c577ccf71b93fd77f14b3245662ee0e6538e5ce67475988d2ea5035878a715db8245ac9f332be2a8429ad414423f1d7cc030e21762ed905d93572764d86e5fd85f32330aaebb4b7d7a6e0bf8eec7c8fdd6f1adf192555a36b0b3fbf03112172991bf9eb9ce4d3d4b5eef4c1b62
+Entropy.7 = c295e93470b0fc6980acb2a0793167eba4569f4923cdf606c066439d97f0964c
+Nonce.7 = 6b891e1e72e28eaef95c737bb9221379
+AdditionalInputA.7 = b44fc5845a252c16f661fda42722eee8e488ac5e2fa9fd9a368ea9455f426e4c
+AdditionalInputB.7 = 402633fc22b7df8611928685bb7e8b76362484dc3da9dc55a7f7c34f173e784f
+Output.7 = 3e86cf6e5df58441b7b26ab084f1e9a574180bf0e54131dc55f5a819fba4a6b4b6e9172ecdcd05342ecb709774f6bf9f0c7bb95430abe72f976157b73ec716830e1df472709364861349b19202fa865d46ae26004e990bf8f2c6e76034e595e03aab7fdce6c86eeae10572a838a97e6e43cb6b87d32a32d259f11d7a10c0948cbbdccd38cd0c27c15585883adea5c9c140513b55accafd24f1f55c1d06461e28efffa8f2a0f7366e0bf8825a67ea619046aa4e1bd56fccb8e150070da979c49206748b27530b9f3d8f1c31888c4d4a0ad752635b42dc2f911a0ca89936738cf9761806138678b1390547cea5ec73e61ef0a36d8477ee5323176dbcaa352f22df
+Entropy.8 = 7f7677a910fc28c0550ffd8dfdfaffedcf0676efa4536f715f5ecb6b3db371fa
+Nonce.8 = bd1dbbfdb160e914514d0bca5e90d5da
+AdditionalInputA.8 = c2cde242f8cc3d03d4b58b264d8beb985b480e7442969c205fc7d667fd42b4c6
+AdditionalInputB.8 = faf740d0d61f8fa31557f385ae1aa011e8ce9e7f08e93a913b828192b04a50a3
+Output.8 = 09a7e2731a28f7e9a6a87a9c911c64b15b9f500bbc0094411aff0d63ef71716c60eb0b9c67115634e5032030a35511051457cfef0ae1c45855a3dbcfd0e77fece846f65e43f1216e9275e9d1c33b7758ad7edbcd50735a33d3603fd5c24e914196b3eeb4347e6896f5fe47472960e71e8af2ff0e1491779dd202d2677b40bba84da88e51980824cebafcb9bf768107e4731a45d21220e7b8c9a419d5c688bd9893c1bd7798780ade2b4c557010162499b119b5934b8d1b4ec32aa1e1b7c14def8b90b322070c6fa765ce43fe97bc642093504948b9d538a8b048760fa5bcdfa37fd50c3fda3030971c1fbad7f8bc5d0ebb2321aafa4a4619b8de5d1b8b8a3302
+Entropy.9 = 6eb8e3e6943ca3171fe562384ea45a4e4142646e291079b7e9070d0f4132a1e0
+Nonce.9 = 2334d60b3bf0aa66c6f238cd2377d5f3
+AdditionalInputA.9 = e75b95efcd8ae16b4b4c77f1953fe2610142d4b9aac5c33403f37410b0b99d0d
+AdditionalInputB.9 = b2f8c41469e89e87bb6b6f108faa5a491258221dcd50090e2a75c8c0c3867cf7
+Output.9 = 617a6d9f85809cacb216947a16da57aa7ed8ce2138487ecbb16eeaf568e4ad90308a323a90e9af2aba3345770bfdc31c306320d92390aaa8253a4212bf39d8228d379bebf4441f7b46526bc9c5f065740c6358f48b73765d3a9237a2bfa58d6cae11f907b48a2ad4873d6816e60282728238ccc8ad9c114dffac10721570989b45f7501e18c4a2154a4bf31227dc854ca03a0add8ebc64949458ae8e67661afa01c782a3af8446a002a5a01dfe5ebefcc3a0bac807012496cee79111099692079b53f32239adedc3aac0395bfe2a5845f03c837802bc0c221517198637be893c164d2179f987061f6af68a5dcfe7a10c66d65f108374a493095adbf59af7cd98
+Entropy.10 = 75627693d9adb284fb756f6a98f50941f09ccbc9c4e1a4ae3720638fd69c6dd4
+Nonce.10 = d911a61721a1956114b1d932a9d8a77a
+AdditionalInputA.10 = 230eefecb10d43277ee4712843bb2d06aacd6a5fdf19edbfbe3ee407736884e8
+AdditionalInputB.10 = 53d1d8df1bf778e331c5119648fa9b40450bf05c3dc294739e208808a3e2ee00
+Output.10 = 66056c70705032729c87d4b78f7810028f583033c08532941e3903e5c40c35070d717c4eab02af86cc9090e76ea56ab01784e92f9e87e33f471f744a97e9290349d9e2b54192da5a065359492c4973d3ba679a3c9c890a42173150aedbf6a9c476b82fba53a628ba938369ac3c00905bcc7ecb00206bcc6b75d0c1f972f202c835b4ed2da8090d89977c997cb5d3d3c7c07588ae7a927b3dedcff2307fbf79b224a95fe27d3c0475480820e52df5e8e580ba5c558a4914137264ee2dc36b6deeda7c31cbe26a12222cf7820bbe7b090af56853bc23ad5fd741b934735b01e6b4fdc60081d6a1c72559fad11066affd29c8b51aae1570629aa7a42649c86ec481
+Entropy.11 = 5e819b5e81917ac851ec948402470ae7e72b28dd86b3d9376f0c105e65950deb
+Nonce.11 = b245b92c74dcc67ad92b6b1e9b57610a
+AdditionalInputA.11 = efb4b21d5ef42e0c0016d165eb8e3da3d39cd906da05e39b988c1b7be2decd98
+AdditionalInputB.11 = 92e7324f8a72bea5fc1ab36d362af82247ada40320acd5c634334b1126ecbf8d
+Output.11 = c4a872ac1ef01d981a9ca6b16e0983a7e9ff4b333f3af6b3fd114b827aa2a530d48e4ee80a0de15d577c68d2e2105e05b4c59e3c51507d40a334318666c09a54153f2b82b997d956168225633e21549b1b855ae29d3583fa977e2e748827592ccfc6d1baadacce5eea5641e1fb867bb964bc9c6b8c595cbe01f3936075e46afdf011586205a8984de5e92644f0aa64c93009cafe55ebec17b3480aa03ea855c4e2fdfb7f2d5ccb618f41b76d7d18ac474b8dae2ceba0060963b4ca5c5009472de540acce000020d81822fb448962086f09f574e57fbb7745f0cd89d19518a07d6b470cc0703ff56703f132a0dfdd56ccf7c9e1df5a6b51b0a7faf3fd624a0e22
+Entropy.12 = a7eefd038a4d362258cfb9f9aaf7120faf42b621fcdeca647660420230a785b7
+Nonce.12 = 4748586f617e22de6e599890da84224e
+AdditionalInputA.12 = 441fa009ba911da02fb2e746eab4565c5f9a5e25287a2c02f089b7e837de1a8d
+AdditionalInputB.12 = 2d8d6ccb723e8db36b85fa0ddadba3cc7862eb719780342d925a2940b065c2bd
+Output.12 = 4c5562026542121f82e9b0b03ad082ed7387b9ceb54cc13da3948be25f45161a59be97620b6d6692bdc93a5679bfa5614d5aa5d79e635c12cbad1366b59be166d7c70f1c99078e55dcbc538d73abb78ac5cf85a5499951a8e1663641a4a7f26367268a1436936e77a720d81ceebf4ca8d1016c1c85c51c08fc25dd0ab85f884e8a553cfd042e02403fa6b5300504885522cf1f5512854bd08ae606735a987c8d824c16608b5d500c6a513da57694173fae346aa4b6e483473e28faf6568bb9802818098a7d03b10bec298674509b85daf504b89d2d09579130188617461e729beb2296ada9c42c18f8b5fe85ff53de4176da51d578bc8de74c7b89b36dadc834
+Entropy.13 = 256aa1a9904ca011410252a16816bcfda72bf9c981cf8c2fb60fd6547a1f0aa7
+Nonce.13 = ddbedd613bea76951bcd03228f1959c5
+AdditionalInputA.13 = ee6803f2202480f5b72a628cdb67b43a1ead8399d2ec1967b4011f0c88cffefc
+AdditionalInputB.13 = 945462dc7e91507a5f8776d2eaa109d1f432cad59edf4da8181a8a7072077b2f
+Output.13 = e3ac2c7128a91af3fd5a0db99b75fbb04597d05b651ae5ff2016b8ce098de54cacc9d7a571749af17dde954ae276c09b719a5b3284ae1d281a2c5b520fc67d32207058d6ca140a4d5fe0522298c71ab2a03d1e50ee0af3990fd5963b7115313b85aa9ec4763cbaf6b75665e5f4aaf4d69e1219f45eb7922d57ce809814656763a152a53ebf1de1806f6e37e15bf35e8aaaa300d6545f595da4f0b108ac97a7ab261f1be4967031b80e27129f22561b2314d3ff72fe0d00e562d5edcf661a0354d08a7deb900a90edada2c9aa5a7aa25ef9c5b7d2cd28b80fbe10284284737026fdee531016fd5b9edfad43fb334b68ea7940c75238264e36ac66c3e7b31cfd53
+Entropy.14 = 869e764d3c4d3a7f0e99e9099619884489a15159a0fbe5e2a2f46cb262e4b262
+Nonce.14 = 0b99e432471f12ca1f549499ab24050b
+AdditionalInputA.14 = 97f8c1e98fd25289be846d80f667341a095dfbabd610c691ad6b2b901c59de78
+AdditionalInputB.14 = 136912d2805ab8ffcb4e7d6a81e37e14b7f7bb65dd0241d56f11d7c72dd5de1d
+Output.14 = 2e1f4954107f3654f51024f032518ba91512c9d8005265ff35248487b8c87d8862b8caaae27898a22f9ba7a0297fc071ceb6a1612bb99c0f15210a11f5a0725158832996f15106a7c43a216f90501c0dfb36933be940a875d4f6b0e5c29edb01614a26cb3ff7b906762fd6435eb7cec8c88f5fd7c4d76fcb018c08987108117c95d4d35c1c59efc06358c7abe7a73012ae4440b2ec86c3664e5549b8b0a30d6c8538d6e5151f9c17f9ce026556508b8b3d926e4364839bb526a94c7d8abf4c1241cd844bc6227a01d024affaedd4701129fb0f9b5ae853c7085ca13ec78ffa3476ddb1c1e71942c351c3ce9a855ccfa4c3c7f92b59d5b67e8eab16b699b7ed5b
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 1bfd7f07f367098d36af5b8bbffee873c007dc0bd48f5cf7c91f8b9e5cef2c8d
+Nonce.0 = 2d857c6bd75cb4714b7d4fe7d4d594fd
+PersonalisationString.0 = d192f006b0f877fdb711220c5cda3c8e20ea9542901f45be9dfee0f32523141a
+Output.0 = 291a924fb5fc8151c9e94664dbe2f2cdd67716268cbb4a8b04185b09feeaffae5f95ce43b6dced5274e09656b78c73a4cbf20728b23d926908abcd437d121a3fbe1ce98f601b5ef82f4c7ab43750b4824ebe3ef61abb424e1be5ee81b8ae2423f89d91c2066a199d411f22038b44e93ac7691f7d5890b6e8be650e8f00f2bfff54041050a949b52d018c40b92e1d41a1908604a6aedad1c412b6e23f519b3104cc8bc8485069cee56d85bc422d39f6e64828f63b4a15cc8dcc186d2109d8da3758e941d9e69b032593cbfea06b336d24e3f694db5efb1f75a131c8ede6d85904030ad550e3e711a448299df867c28d9cedc00f7a6af858941f739d0318a04240
+Entropy.1 = add7259c467713fc7cdb2d2c75c222c087c91e6324178a5f0643c59ed353533d
+Nonce.1 = 7d6c4365b04d1e5775e6d28201b484b3
+PersonalisationString.1 = 9d03b16fb608c1dcb6b152df2eac6bc9cb06b4992fb7a6c3ff23b16175e64a96
+Output.1 = 0e480db2cba1b1251bacec61ddfbc13edeebd9ee7aed408482c90d49041dbeac08dbaaedd44d93e5695b741a2968cadbf6547491aa9ba1b254353bb7adcb39ad8b037009400e2a7091d03e3752646cc1f1dbfbb0c32f5dbac693533eb8fcb4a0ac4a3ef022859a08497511134300d27c2ae96ae67c4ec2e0930d3f4bd8062bf03018f74e72734ff18d295db4339de172774b6f795507ed5f3c54914b1e561e9d4de15ff2109bec9ed9d6d909e79c32285e63675022bb86b7f797c9b8b4f82b127f3e078539ffcaae5d3707505351e0776696667aaecd2c175605b180deda7f6fef8e89943a6bc6d2d0edd69d64dc82d1c4bb91a7aef9e7dd6b92b5647e29503b
+Entropy.2 = b253f84edd98a84c546c19344f7fe406c106e5275cd34fc54f5c716e975258b6
+Nonce.2 = 7066dd73e116f98f1c8610cf799f8ed2
+PersonalisationString.2 = 7f0970f71af66801d6b2c0192bfa3edc3dc7fc3d1ce70060015d322637c4418d
+Output.2 = fc53724ca146ed88d58a5933a6a5a8a1bc05f0cda68dcfedfb43aace70066c7fb51242934313334f4c68c63aaf0a7c128e0bc72fa1a9b87b0b07dee4d3215e546f72fad5dd8ffa7310a2b944407c962e240829d7c7bc84add1a1639a439786bce6e5e2d35d8692559ccf4dda107f9c8c4ce1ba204489a4af4d3f6151176d45b365433f0523b9f07144c8f5bd62f8927e2eddeb050b1f94bc659a4b23d7bcdd4b84eeb7fb6e5614503c13540e90084b5cdafe5ddfc57d4f85b87c39a01224724287d567d30c2fcd6dd89b026e969e301027e3f1b80a81cc9fc105c6487760e7ccdd4fa4c386dc08b854445653b70452e66e7d36e44c1a3b6dbcf690f0d621c351
+Entropy.3 = 780985ea184a51700b88638f1864f8c4f0547718bf1e6fd2126ee168dcfdfa26
+Nonce.3 = c4f5e33004b3ae055d2661a4b85db863
+PersonalisationString.3 = b01c2f6daf9c3def73f437fbd52fc45ea0f230d9f0325598bdd15e81b34ee668
+Output.3 = b926314f2bf2c1dacc40e1c545b9a7d00e54884c2ed42e4bf6b2d96c17a3932b5d909059f21e3048d40379c44bbb6c6bebc264d169a59aac4165c10b735f3616df0236ef3b68dcaa5eb54155d3a58bc1831a22d55dd2fd46ece154f8e59cafc3008a4a9455a2eed024854bae4d4073147a21abfc0981213aa70ae408406d9f23e8da353fbcaed67709f4ebdb8c1cfb20dc3bc63ae70a1fd89a5f8592b1d2cfab27ae69d626fe93a9c0d3ce2a41b033ecc155afb4a96be6185ae4e5701acb1db1116dae3f41b241e60d378b34c0cdbd1ffb44550308cadc6e418da0ba3e1a356d06dad6d61e07f24e2f885b37f5d587a31f1658f7d2d8e572b9003342803a2332
+Entropy.4 = d1f50d07a46ba5b8b595efd66acabc6b70198f1b65ec4a739f2f89fc0d6743f2
+Nonce.4 = 8683889ab82b349f74656c4056f7d07b
+PersonalisationString.4 = 1788efb9a2619e0242639d39380ba1eccd7f9af6101f217204da17ad4cc0a0b5
+Output.4 = cc3a655585bbbaa957ef336dddcd63e45cbb56c197c6675e795c9de383d74bade00330599606b9fa63bec1f46ec3e92848b745201ccdc25fca84956e07132de002d8297e7917fe8fc2b2d5693b6c9c47c718de6eab306142be185ce6d08df089046c443827c045c8302d9c0eeec74d519d926f7d64c1fd2f9aed283595be1d4d3949ac1c1af8490f9d219941a16ba5812a8478319462601995c90618ac70873838ed3d4f5897d0763881115162d3061fe7788751736a2e01fa89d3be440f980c60b061e81fccea6a8d3c4317eae0e021f8b146dea15aed73670538a8885dd5049290596475a915664b3bc16f447c4ccf0a5d7d1769c9d1159055af40012aecf1
+Entropy.5 = 2e03ac55686f056f06f3e90f4eca2d92dea91e789c09b199651408e121f817a2
+Nonce.5 = d5af61ea5dacb0842ce832d36462b8a7
+PersonalisationString.5 = 9b3567f32cf3df72af5c44f0a75a176eb7a49e436476e3e8a6c4d2d8630cf1cc
+Output.5 = e72c1145666da3744344dbee03bf30120fd9ea7e77e587873bf55fa6e40d2ff0e0ae7fadd0ac79ab7543d566a35b022cbf3e2f63da0fd967e09ae0a5c6d32d8a8cecaad57888984fd82a196406048bd0fdbdd4b7bc9e0ee08ea8263924fe0ee4447e0a9de019092b12258a159f20a32c62f5d6456d4cbde3f4d46d60326b4a68a922b23b2a55e7a0d90fedbd171482e7b293150da2ea6e1303934cc09c6d8d5d39f34475d866f449b82586040926c589f1db594a5f94e93b1540798eab92b1771a9acdd92038229386a3fe944ea2166a27c06f1b9978bdb3c6a1796c82f4eca35f54d356b8d6518b3567f63362f73db1f95f9198ddd41f88024a4105598fa111
+Entropy.6 = b08d614babaaeff7b60f30bfdb767cd1ef2117e744ebb40bb0e26ebd780a2f85
+Nonce.6 = f7c44a92685cb9982eb2b303ab423a6a
+PersonalisationString.6 = 4daf05558ff18c380695d6e488aba4e278b079830fcdf553bad05bba94817102
+Output.6 = 554da4fb08e93dd5568ebdbdd31f22241892e5af438a57e64e494f780174909126c7294118c20d7bae25dc2f9084ac35517f36dfd4dcee58af25a95fdafd2a6ed998c7c41e21191df73548fcc63e61c01107c24c786030ab817005989fa0e7509246b9005ce6bdd4e26d545a9cb89f4175af7ff8c0a1046b0291504bf82d78da3aae30809b402e549f2a1c3a246f927241d045e8589d973888a47dfe2574dd0c9a9e9dfea377937e0fc69e4bf40b6a86b612cea29cce7d41dd15f76bb93eafefc43bfa9237de1167395474d42669f05daaaf4034ff97c410440ba175f4b431d16d702c9718e1ceefe4236c608e61f66cc378251bfacc36606f47f364df48f143
+Entropy.7 = daf400bd2c2f4ec2eb1b5ad2942df95ee1630f89bec55512297c73336b20747d
+Nonce.7 = e1036a0cb21f0316460d607dd43cab3e
+PersonalisationString.7 = c5b771c4d77dc827fe0c8fba95e2572871d202628606bf2f9762be02e018c6b7
+Output.7 = 85a0b64015dcb79df5943f856007f1dc38c561675e75721f0c7525dbb94c68cb8187d80ab92e1b318234e3dab273e97db5591713910da80b5222216883dc848eb51e2223552ef0c72147b445b497270355868b9e299c5f647b144e4e270a5478a67b86f220d1b83b1ed4262c4f341bd0b79d8f276396c87639a270ec6378c4d4046512461931a2234b72c70421a5ff8ae234f02a40bb0149ca6229e8708381b8d3b1ed321dc92d586770972849becfdcdd2d44bee53ae4dafcb36f37f2f68670ab266466d7975c1c660b9bce2c616bd06b0fb37e85f988cd21548ee2261e5d659004e12fce1ad46f065999cbe5cf7244b7ee79371fd51d7aa305c4716ca1d03f
+Entropy.8 = c47c748c91179ef923096cbfd0a514089b3aaaae521adef2ccf4e001a70d7a35
+Nonce.8 = fe0756615d0c7cf7da577b211990ef35
+PersonalisationString.8 = 9f676d607442a3eeb812146e5e61b23e860c567d388130498d109912c444e58d
+Output.8 = 8af06bf08fef7dda378002f9e40ed424110f9316fb1bf2b1bfde0b8d11f5d58c9a38a2afd9e9554b12e3d32e1745f38c6a3c753d7b30d9503c47d914acfd54207dee165903230a8de58b5e9f52f92ab08bc6f343a6176ef45c9d1b22c16521e2e08102db80e3ca1dead0c0216f70505efe869b1b1b441a69b83795847bb454f42235cbbb3e93db43b062d64b6b61adeb0ac8f08cbd3bdbd3c8f41120a2cde082ada4684831c35343bfbbbf33650cc17835246ce2536da3fdea5d90e569175f01f56134f614253029c928c7e6291fc5d96a14ad74a13a2531152994e6044a0ec501d8c301dd3eace89fd876742816985da1cb5d406ae7c3fc576072b0dacdde72
+Entropy.9 = c6f1e5decdaa6d12bb0a89a4f57d2ab2bc4a5acdfd7a0142bac9da1b90d9d29f
+Nonce.9 = 5cd1c356950d1ffadfcf6f6b70090ee9
+PersonalisationString.9 = db319328e8644fb9bf6645e8eff5181511e93c9b711316744a81ddce4cef695f
+Output.9 = b948b02d0f6c9a48fc9ebc1dcc399969e0470a2bfe5fc4c977eb4dc4efe25a2a3f78b044679ed25c0ff22c27d55198d6ae674d4647863cafd60ec8cb3a48dc4dd1aac9c71c6cdcfac43836a3a44a2048f4d76a35f2a10fb02ded6e6bd2ce23bc4f759c391becfc5e5d853ba67d27a197ebe5ae254c5af417a9da29b95decb3ca7c6969e68dce0b9b1560274ebf16a69be07b8c4b3f13f62cc86ff69fc1b734f4b0f6e0575eb0c485a65e8a7aca45f9ec35ceb620a39be1f438d994684c0028955cc89d0e4d1ff972a7acfcbf684acde9a2257067f2f3bf74758238812c99cd83b1a3005fb3b179639c2c9a7ed35942696d488e5811a7db3c9b2056ca1adb6ab3
+Entropy.10 = 03742b9f381090cef732fb774b73e3a10ddd99f45ddcb5724020b9b63d18b6eb
+Nonce.10 = bb80c667f0a4b2eb8bd51b0008737c3b
+PersonalisationString.10 = c00f0fc8c9a15ab7c066bf77e264f1e5b747b91fe6824905caccbb17edddfbb4
+Output.10 = ff587ca07631eb2ea9712dc7f7db74a0e008afd77804f4016df2efe649dc23bb1fa64059e0be09bf803d5110a027bdaeaa926992402fc5c523ae3409bc99173aecfdf34b03bba173f985d505f8b5ace8df2f8d30524316c7467b9c02b424160e3e1e99972628b0396c24d48665454e44baec91a867d400f9ca4a7da19bcffe1383cac3796aeaac49303821a7bc121dc7cc780b5e90d7f0292efb4e9c9c366ba37f6d857b2f56a395b7a34a07bdc1b6023763d04ddae07a6fc5b5081eaf6dc7e369e9349b5ddd150e29c693dd6ed513305039199b7313d5002d7fffe8d32f1f58883ccab59a48bcb4d25eeb29b540f1face3b3c4dba2731835c105d80edd45d23
+Entropy.11 = 5c9714d0458f6bdc3b57956436db01a91cec80cfec267daf62834c16c0600b7b
+Nonce.11 = cabb734b5011dda60f0772d415cdeb32
+PersonalisationString.11 = ca5abbcdf8578fb58619f4dab1f065c8a7a69e6173ea893f16c5cb9a27e6a054
+Output.11 = b3df6dee7fe5d5cea49d88587da12776b0c9928019829cdb7f8fb761973a24ed9be245e57ee39e73b994121b3cdb902bb9d36bbb5e1b77e4b5c9fbcff14d7f1d2c1c7913ced5fc99a6e8b98168e9b3564682ddcbdf714bdbd020e01611644aeb2d32192caa7abb7b320c34714ee6e817fbeb8f7a265e2ce12503dcb811b09b752de4dce1d28dd558e859aa89288fdce3cc8de2b3e20c7fd802ab506e7587cb5ead79fcfa836923d0b2a0e7b5b9c8f4dcd32a14ca495c52d2317c895d8d3b5ee184f4886a6776fe7e4da5d24bdad322b975ecd16f26f5edf1dccd42acd9c01e132d325773981047f49cc65687e2b631ce4c57b1680d35c01acd8360e66af6f906
+Entropy.12 = e2253a35a6439e8d3c0f2d79bfab941f517739a23f7965f3a4b164129ca7491e
+Nonce.12 = 4d8438248515909bc48d85c62e597b43
+PersonalisationString.12 = bf19a8dba2b174fa7a16151c17faf3689b97281868e9b49c749e7df255383872
+Output.12 = 91fc2f02c0a5748253f87d2a661264e128d9b919a51e149cf1a922d49a8b891ff937b809f2791d477d824b999a7b9d7573c86971e92fccde9798ea935cc1ad03e0cde00e9fddd481d0e33433824dc1253b6a144955a735fb4303accc3325b23fbf7e99affc7f95cca2c585b2dee3762765db7a1ce93229933d0ebe39edf985e84f5fb671c86f2a5d6d660bb7933f204cbcadb0eb829d9397d15184af6b7891e91fa1f82bd342b8d88b9748cbcd66c2a75ea1bb8546a088e0b29bf2f74f55f8842abe2d3214b1f4a37f2477d744747209d2c516d1d284c5828320c29abb331d32febe6199d37b3cc6bd89c4e9c9dcf5c55c7ca2f4a0b233c7154a946f54205663
+Entropy.13 = 288d9d6c23ccbde96cc3ed1df7ed35a56ee768805ee8fb529e7e00a62fb3955e
+Nonce.13 = 388145778b16d54b3029c40758081c06
+PersonalisationString.13 = 793655b5ce3ab8bee33ee590eec8de5b09b459e9875b9f99aef8a2ea8573a395
+Output.13 = 186995df846c1c5a02c1170239c3165938acd5dc9d3999a72f8a27f0abcb880ce9214f7e4dadd91bc116210cd110643e1f5a13f558f1efc46aa42155084bfc2de536f4435ef48ac85b167943c9b0323f9f6dcdd4ef6d8a0a665ecb467c0bfc523d439d50b7b164c4d54c0cbd51a7ae7c53941a09ab5c9d8fe77f5277014349ff79ec2b1d1ad94642b28be4dcb1d081880d11b6a0bae19e3192b3cf50badc9ec01439b193c5a76c29da92d269ceeedd39b3ccf7cafa8d85ce32c59b3f63e272418c3c62446c41e41ced3f45f5972ef9e31f5b7fcb3779bc6627fdb093f66da9f382e2b722a9f928910f5c209d18488f46ee56f5f6822dcedce604aae79f4698d0
+Entropy.14 = a6f5450b36f9b76e6bea00769bd7586d30f7633312fdceb82de3106940c6c96f
+Nonce.14 = fe9dfa1b683fa9cc70b7c7f8c81185b2
+PersonalisationString.14 = 7e86cf4111fbea8fa9b180a1bd9ff3e9d233304b1d293adffa49ce8e77f400ab
+Output.14 = ca0a6268d034f6817edcb6875b4754b5e9b2061ce0bc2bcd27c28065d8258b40ae63bf6d1e15521196da0afea8139c10d7bf3b54694a82d24476c578991fce1371e40b78087d95b1117650af7134567513a017353bb4af85cdc98db757cec9f92df42b7323b1e5d05387debb02750683a5553bdfb5f9fa34e14d29e09ad18bc6ef2380c173a19631abde085369ff47fa8b4fdfebe13b95b90c6f5841fe5aa6334edcfae26c13cc5d14d17a02d684b64bd55841831bde4c75de7d49bdc1a405d4e3e0d327bec44644e972349a49cbd48a4d3b8e984f5847ffeba950fff55bba9b287d51d8475f7799752208da31d91853fe6d04d97ea2a33d53b07a4fc787be2a
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = adc9f3637c769fbd1b96486dfc11e6f411c4019479bca1da72b84ed3357800a3
+Nonce.0 = ead88984f93f6cca5429f15f3c463522
+PersonalisationString.0 = b979f764ce2238cf8bc7ca065c7b237969ca0c1315dd04cfb0e8c76596cde541
+AdditionalInputA.0 = 70ea3cedecde3ad71313fb69d08a7eae49c57fd95cccf8ad01df06b77a34457c
+AdditionalInputB.0 = 3acb8005cc40184b2eed70bdd7a9e467dc71da1b366ba68544ca54301ff821f0
+Output.0 = 8ef8a9f36469d47e00763e2994e81f57d633d67b272d6eb04ce7caa8e80d23708454cf281f31df602e743fc6a37f47808a2fbba2e29a78bb7670d8d518585d1015d7efda9eb362d8f115301133dad020faf736107ebc3c951a0faeaeb2cbde54888744e5aebbd57789889ee91d6118aab00eec15936500dc2df48a45ef789bc681eafcd894ab817bd7efb0035f16db03ee6db8f0d48a89a3274d042350d4580fd74c8eff34fd29675ad3dbc4f12f0d375aa2d8a59e94d345204d4c2074e77565e24a28f432406c21db21de4fdef675f85c7e11620025c891f4a712b84585a69805adfc60f9c58dc239ea397f39e375ad40b945dafd7f360ff69602b634e01237
+Entropy.1 = 8bf9fcb308633bd96047d26e74996a371b84877f8cc2693fe6d35a2d58635728
+Nonce.1 = 0c34c1320bb44b52940580151d6b66df
+PersonalisationString.1 = 40bec9875b7600817f2747fbc7e57b602243d54b3f904ad43a11300e8bf8db68
+AdditionalInputA.1 = 8035ed0545b4d13a9568df1729a0bddb79351166cc783623d709d8e988e16a54
+AdditionalInputB.1 = e6f28695f5eea4846b473b89d361ccbe61b9aca654c05ff4e3033fcbb7827bc5
+Output.1 = 4671530a87d9dbd1da101fcc974b336ffefd7bcd7958b88f34c1910abdac0a255430289d39e3d3fcca865d4376c598e140cc820177a5a25dd4a4ec3b8742a4183c397d4818b3fd7599be4c3826b1d2087963dd21e99537a97946557c6a76ae6be47dd3af20b41d600219484b55fafde0f3a24166df136fbeb1554e2cce2d03179b3d10411f6367faa95dbab36465ee05f6c1be90b1177f4d9d8f99a72a1905251419aa0a6027697c14719970fba8f8029f2c87492dc4d1247c4d8c2ddcf7c0e9adbda2a6cbcafa3a829f1ab33bbbd2fcfe13b330b6e00f4758548a48cd58d255224275b82daf678c936ad5bebaad7a382a19c463b616a9e7e8253e286eed97bd
+Entropy.2 = 7a162b16d30474891713d040a2c687ddf2fac963bc66c7d4a9af587a36037e78
+Nonce.2 = 14cced220a1fa5eb84d055c425d62b2b
+PersonalisationString.2 = e684d7c4118cfcf7efaef2de71b4a1267ff675dc0e17a0d1a1f46d6fc52c2ae9
+AdditionalInputA.2 = f0f761b08204e3b71f10c0d3c97f4ce19354bbb931881f230497ef7c8067feb3
+AdditionalInputB.2 = bcf31047a99f3377e807cd4a9341ecaebfbf68fe5afec30b02cf4f77511b64f7
+Output.2 = 780d58db9ac60f70b6e3dc067ac6840e98cc21b24f048c2168219acbfbac6377a0f039cd59f76691e2c08988b52ab2d5056cd927bfa4d7e1749034a170ba9ce658a2beec30aad312404afb4e70fc22fd575f0548bdc76790d483c249595be4f95faad9f820517f2dd7fa2fcb9e1d08e3692e6f4435fd6c21f113640e45efba137efd62ad6b8e5caec1df450951c2b05bcf00e2f1827519c7ca3ff9db787a5885e5ea08f45bd90496301ce9243c5ef83184845e549f985a1bba557605db679740e6d909b80ad2faf642fa9ea6a0ff228f4df80eb2be1189c460f09cc4a62da2b82015cc7e3c864ec69f4c9e395babf7286fa587f6fcc9897d4d32aab050c5d3d4
+Entropy.3 = 7d5fa01c2eaaeb3c6cbb18f835ba3f298090a18ae60f41bab419e4797a222656
+Nonce.3 = 7c0acd7387200420af4f7f5485e06b89
+PersonalisationString.3 = 508bc1e1ed5aef30009011750c2f3610559bb6da419f0977c839fb38aae5aa95
+AdditionalInputA.3 = 097495adcf5b32861d065ba96bef0d6c413ea223f8252e6135d0d729701fd439
+AdditionalInputB.3 = 7de9b9af78bff2e2c097046fbbe873f7cb59b33d5fd6f46ae4c4862bacbcddc3
+Output.3 = aadb53fdf415fe6dceb1ccdaf4755a107b4dc54dcf2be35e366b8ab1bd4205879e3e2fdc58932acb3c94e2aaf4a2b4b8f8b1c4dc96ee73807fab85445573a1a7d74a4963b9858fa995e73f2985f860a227855914dd3c1f5f4408cfb4cff6f91ed36c8f07cd8bf87f6904056caf744f5d6169b1c75189f8f8c4175f9b2e922b90ad977b9b9be4ef71644d8ce44e24eca989ab52d457f1f49565e0eea684e4d92987473b0605a6e540b38b96de509306279731f8153aac68abdc5e5a3f48ef877b48f36e9f70414697869eae7a6bad58ca4ec0042bbd32260f4d84664a17a7eba3d1397d91bd55a18c22dc7f123ba201512e0533c01dfecdc5abe0e753a0034f60
+Entropy.4 = 1c9aea7199b3b982e0ad74b973364367d980a2ea7cf8d52f3c24e24e814e6b9c
+Nonce.4 = dbf67885a34bc3ef74d7341a35f46718
+PersonalisationString.4 = cfd9bc3b05c96255f8f04390236fe09a6aa41bcbe5257ea6b3d0994e8ecae5f6
+AdditionalInputA.4 = d97743c28758f9a9e76c17cff74981a82fab10c26d18cc56c4f49942ba4e04ed
+AdditionalInputB.4 = 3eebff61a6fdc3c79b7e3017f5067ebbf737e5375845ee70b97beab2f6cd7c81
+Output.4 = 86f241afbfb90fc6f5014d518b6bac9938d1cbabd5a53278d29d9f0a65b768663e6149b4f4ec9a1f702b7db271dc844d0b1af32f707f8f98fe69a2c58e61d5c77719a7082f0281abb3aaf8bd498aeed29547dd5475a0564f46bbb480365edfbe61cfeb9f4305c488d249752ecd687007db51fe61153648ac48e45ab70b707ff4152ef56c095f000cbdbca632863ee91d36fba7b2a42f82819003b205d4f443d812610e322669560b1f4214777f483ccd1256b6e93ec5c658c2027a4b96a380d3b969f79c1d6bb90d40a71ae43f934a1946f136fe9a8233213f0803ffe5340636cc5a5a9d20d654bd8fc09c10ea09956e36ccf6c630ddceefbf8216a26e71ce57
+Entropy.5 = 6178fdc27e7ca595e9ec586bdc976db694cefceb7f42943d2ab1dc6347c89b18
+Nonce.5 = 328313c7f131fff1040768946ab1a6e3
+PersonalisationString.5 = 2b7b70a80a8b8a7206d3d0fd8855a41878a4e109c7a4769c5216a6f5b6460750
+AdditionalInputA.5 = dbf13a53a448ab282160650054a66161fb9df6a88f63295059c96320f2b25812
+AdditionalInputB.5 = 9bb3bd1a28aa4c453c5ed113799b6dd08e671fb9c75428f042358515d1c212c0
+Output.5 = 1c8301f16b3800c53b1902070b40a5b2bbeb20c4a695b4f58e3f6e6b5deab9f6e3e6c699e51d4af5697e5044aeaddd8cdd4c47f6069801bd16d795e52ff8fe26df3136e0ae0eee57b10478965bbe654d4cd576f4813a350994f3e69c1f0257544f07e4f2f8332e05960edbcb77740f790ed88d722e8fc53abcb461dee973b60d6b109d40fc52881d860f251ea406ddb7153b00b268345cc0d1b1e5041597fa1df92fa72397e4dd3203dba88a41bfbb46fd537e164e1d68dd77951bafdf2b92c44e1105f30a11cacdb986c5cd82974d55a4eff89b021a23d0a8adf001921456f4bf2bcd8d3533f44cc679dbdfb1a04e6b0c588700c97ed72149142dd301ff0b28
+Entropy.6 = 9890952dc9e590c3f943e2345074a5583b220d03f000db3003225568930a9c56
+Nonce.6 = 1b7b8672bed5fc6489b7dd7d7881f399
+PersonalisationString.6 = 26a572534ea88c1b2ab6ba8fbf22cac200715351861201f74e43a27d3a742065
+AdditionalInputA.6 = 12e70f853aae568d7d06deb8d9d751db12ba7a0832ffa4e10a43de5e79c91d4e
+AdditionalInputB.6 = 016617fbde7e0bfeff10576508984c6448b3d1f7b4ec1eb5dfd8923d21e3c833
+Output.6 = b1b52bce27470ee1884e6795ed462d6f53b016fc43687fe7fd2ef113f806ca91a7d5f8d4c6289e3fd162aaffcb3ca8466e8b599128ae8a96bf825fbd582543e325bf1fb5a9a4bb8a6c67bb8724f8f0c41b3eb93576e78bd6c2d2006e942baac1a5ba6c4c872d24d6ea06738306b5297420274e564f05f19a49498728f728bcb1511e181707fad77a5df95f17251d3d5e78203edfa3782a3bb39fa96a5922b62799da862292f834ecba913987f516891e567166c040c22c1424b7a76022bd65cb0776eac68c1125b3bdd52761ca0bc92a9f93304ac4bc90aea9a339e8e91bc83008867a48dcaa715f42ef0d0d2a83002ea39f36029ed7f63e9c6a406d5dc980b1
+Entropy.7 = 26db7d60f4d79b892611dfcb52730c91172d63c0e47ef763460e47bd9d193125
+Nonce.7 = cff01edd427fe442935b2f7b24b5229c
+PersonalisationString.7 = c34f4c0d32467a88fe701d48283458bf9d34c5d10a4bf3b32f73676ee8b8ceb4
+AdditionalInputA.7 = 024a1d0cd380c595c916ea4f56bc59c93c33539d38e072d1535e703f1e80b9b4
+AdditionalInputB.7 = f11180f424b38340193136ce9a1ab7e6a64d3b49626189cd346ccde6e6cbaccf
+Output.7 = cb17590345e5479b0bb5b52d1f3650d027f993484c6c154b5686eade3772fb4f1891c19c4f990ac3324eafb122819ce22645e21e2fd8f3da54dfa605da7d0082d0f48b8887c5abc59e0b9321a9aac9a6e4e762a43abd7a3ab5d480db22d58708c343df2cd2058523b423eb52e6e8ea3e916c9c87eaebe7ed92892ee0a851f10f262354119514c9f23ced124be8cbafc629897b2aef5eec8bd370d0bf928d2b40e702a2a38def64287617928f21a1a3c54de63f7705ae837e2d983649fad1fbf8bde83a9f1750c66d8225891bac94139758a22e748fdd1463ca539e0f0b12ac7704bb425def93f0af786fc10fa5964ebdff589bd1e6daeca3e681c3fcfe83dd4a
+Entropy.8 = 46d9e13128472cf2224663487f41232925ac1e6c53ea1592966a29cf37a10af0
+Nonce.8 = 42da6f186ca7bc9f745120aa635f66ad
+PersonalisationString.8 = de13cc3b418cb8149a2f4349605d2cafd2ad321756363e854ea7a1e3b45817c0
+AdditionalInputA.8 = eff70e7b84b1d09d4854d9e4fe56693c130198ca6c5684b99883ffe51c73bd85
+AdditionalInputB.8 = f92328045cbc9635c011d3740b4c97a948ee12d07600790ade4469cff3ce9ba0
+Output.8 = 4113258781cbca60aa66606271ecd9e4410ce9829c4c0c1ba1a40d62f6ceb14b294390805856c8966328f5a06dc3c00196f5ff8909114f1b6e05829516728a2d2cb96a93311c488f62578b25edb0654f3f57504861e998cdd60e77fe82b07b288aaeb65a2f35a658754e028cbfb147985f1bb89cda645d7d6f8b38f8190f49da45eb9f70044bd140b18fcbd7d02e2886ccc843d820fe6a77645497b97724427198b1444dee7cf99d8d3a9151eb419fb7231faa3bc361a87b1c7d5f09d54eb2cba39dd06dcc7a2415593b980395b7f8d552190e0a1993e06223666573d3d6dd16a0e591da1329130425d0b8de294635fa038c61817fe94ce15cbd7199219c023d
+Entropy.9 = 1acc3422d89abf02ac5c8df5b89299f6db378fd232d5433c490db306e5aa6d4c
+Nonce.9 = e02fba6df060b4d64b8ee9428f49331a
+PersonalisationString.9 = 67fd27d89eb8d3f9d4ba2dce6554579ebf5965f52876824f42e17f846b00c615
+AdditionalInputA.9 = ecf7a642a70119c0920b06934e6bde4f55c9c3e1f6370a95df33ed408d135f1f
+AdditionalInputB.9 = 86d1324006f562e330b94489e3567dffcbb6f331b95ab608bc8d2f3efe1ab52d
+Output.9 = e431486499a7bc5360d5f2c475ca5b24e4776b4354b388222940f781b18dd5b1e3fb4929ce704fbe8d7b71c608f5a02e19ad7dd6e2f4d25f2c262b745733b4223394a34f66553ca9731f3c1b2ad31393acfae2b13c6192265d2968504ec0aea69a689121d5d7a137fdcc651cc46def9b651b5b330810fa070079845bb442a5e998cc886a36703bf74df94cc107b031dd33df85ef2fa5a3cdf0051f32208c703a0b5e377dd49cd1c0edb6f153988f740b344254e54bfce3d3222617aba7424eeef105732b8124e1ba40777757d7670b60868c7a3a5e61ba9579cb3af4556357780a5ab883eb2623893ddf8a8681729f321f07eb7454f6f2226c84e32bec6215ba
+Entropy.10 = 0fee6b365bb3fe32212491527b6acf06ef4a6e0ad44da2d606bea5d92fd1584e
+Nonce.10 = 0fc2ab565b599ed269d71fec6fdbc878
+PersonalisationString.10 = 303cd364a259f6396597be4fbb6b4cf3ff1c3cffd07c8fab452dd4f7e055df0e
+AdditionalInputA.10 = 8ff9bf93e680824243115c29613a41789ac1a8b55f1103dfd6f43edbdbbbc227
+AdditionalInputB.10 = 37244d52b35197aaaaa7a6790ad3d009b661a67e07249f75ae00f4c3dcc22edd
+Output.10 = 788cc299a32b71b90c735d00862e9b3bb46b5fffd2108eec93bdf4868ca554b298741fa6ab07c1c829eadffabd0224c0b11c43f745a347913612edbfe40e8180e1e95a89a3ae097450d2a708c59d36a2b145ee48f66c24d9c6e1098b48a3ec68cd2810c8a54ea07d7c281c3b4273f70a020a1ccdf79b07fe6c01cc4f2637f3b6c2f998a38950fa6edff818d448dc0b80075051a78a80237a5ec2c509d6c227eb36f91a3457ca8b62feee2211ee394808061ec920f332d685dcd3bda8633d27e0105d5dcb186ba9fb5da53bc6dc7634bbda0e3dc415353be9e6efb5063bb3b93771513315ca0e4d72ef047f21b26426adf5d9915e0534d1b22f230c5442264ec5
+Entropy.11 = 8b3bb4f24f21ab90c62aa39b0ad2f2ec95ba11c60ff7ea42d51a5a51c1d76ba2
+Nonce.11 = f9b14adec03b96ac277216b44c349125
+PersonalisationString.11 = 4889fb580373fab64f3ccdb16ae090ff64bfaf57e6c67158b49c7c504fb6c70c
+AdditionalInputA.11 = a3305f70dc430edf2460ec326c797aa16e14ce2a4407f504b2af8a02b2262692
+AdditionalInputB.11 = 028efc38a43e4a9ca921a052b88259621d13ca436602c23349f0ad97e22b6426
+Output.11 = 0cb259fb3f3fff8727c6184dd781fd653a8f39912fcd689e1cb13f616f5413850d5eb9013025d45f6f959ca87bc5a426a43c43283e1c81558597ad68526e6d4808c64755dcf22e8aec3f23b70c2bc908f6af38c1efb02bb77de6755460eac0fffdef3d8a93cc804198b68f87ec97918d6fa599f2a926de619cd728852696abd9bbd7d33858614e8e36d74fa3260027f428fb1941339b01e9d9f9545df13c128d044f98ec042de11af74bee70f35bd3e8ff7f13a5d59e25390b9ab76c83e78b36dca199f319d0b06e902194dbabff1da93f3dfcc3b4c0a673e4196881cb32181c9ad1600e20fe4d087c8beca7f6b66be3008f37b8cf3c79a8ecca557ad6c3e49e
+Entropy.12 = e85fada7870dd47d268b2c4f425fe62e73b5ca13bf73f357863e69747ac92e75
+Nonce.12 = ee92435d8a4284725305b0d5c668ae2d
+PersonalisationString.12 = 09dd8b6fdad45aa8cd42605534560c6d690420110af119e9ec1a4c32b9b228a6
+AdditionalInputA.12 = 1f1d272c662e8a46c2f6ce293a073a8bb281dc15247c22eed706690201c4ad99
+AdditionalInputB.12 = d334abc673f4b5c6311f5ee4c039efb92c61781c8b47b19e134af0fe821f7a78
+Output.12 = 5138e5b94c0046cd8498be8e3caea8a006f6a26fe56818be5a0587d3b2bc97a4a4beddecb86f5f731a30ab5fada8d245808a1b704b696b4759d7483451980ba4972629acf370c99dbf864e7b6ab0253dce6f42e290f806fdb6321f26b5fe042f72ed54734773f45e548bb7859ac9faefd3eb27fb6040aa8fe192e23efb1c80f78cac1e4a7731a338f44080137902c64cf4cd78dc862f7a6c1d241cd92ae384f31b149e59dbd73a5c2326bd341a38583e853eb5242f4174d27f517dc816e136b80d51af56b28933767db8cefa0638cc3f5d52e5a86bca1418a278ef5539877432d2cd5deeed24b5e60b9295ef04a698aa9f151528e3064d0a19838902b480ee7a
+Entropy.13 = f4d2ce30279264e30e503e12cd4a3860012b318eb3fbd2d35d052e7df79efd33
+Nonce.13 = dabf5ddb6960e828f2773512eb8c13bd
+PersonalisationString.13 = 0150441b3517417945f69f04c1aad32fe00579d8ece73694955c692158e0d6c5
+AdditionalInputA.13 = 2a5aebe3030cd6e618c1f854857fb3da477754f6950886a03a8f579594ae400c
+AdditionalInputB.13 = 387ab3af6c1df1f6218407c6c84d1ead4de220955fd57d9dfdf2e11b6b9100a2
+Output.13 = 38457da4da7b5487732a4424dd2f81ce7e62b35c4915224771764e5b6ff657d02e31f0a0984415b46fc014b858d946d42c05e33a7f4ed245126acb4f9a26ed68acb409c463ef453e6f1d2afed572c425ed63668989cbf28409d735e3e317eb7c8958493e292e5a11c67f3be64d28a9f89539411564951beb965220400c8547330932de78294192c6f208be9a6136c83b8a9699310889cc3b6894d23b966ff6e7b0466c841c6ba8728ebfdd1d59883e0511f1d49ad4e2db2e573acf558eb9cdb38bd8cb7a6b5bb5704a1db4faa524aed0cbc9f426bbf1b602f8a46237ae6e0eaecf2ac2fa8638c4f0cca2500efd9f06d14cbafac5b396838a4203f284f47bc808
+Entropy.14 = 7f900aeb8edc449047bd7421789f1354c5aca3d660fc7a0b7cebb99153c38b15
+Nonce.14 = 0ec35740b4ccaf128f692ee0222df247
+PersonalisationString.14 = 5414f7bab101d1ba72184a6596625823b9bcee8ad29cfa26753c21710cefefb1
+AdditionalInputA.14 = 91e14e178a033e26e6f6a0b0f3890fa46f83731a14cf31445c51a92166965f67
+AdditionalInputB.14 = 20299371a1de6f994260d1c59c1d3f731d8f70fea6e9389b3ede54d47594414d
+Output.14 = 1b4efcce136b40bdc792d1607d4ab4fadc10d5e2b22eacca6f412d3aa1c60320bf825778e7ff8296db9ea360e068350f90d7d4947dc9a2e2a4074653458784059ceebf2a97db0e4a29f7c6107783fa3683b6846b8c8ce7161082405643bb84d602c6c36ca79b2b6562417f0d15f46a4fbdc445d50935f49eedf01bb131d104385369fdf88d91518618134a37c5bf73140400cced73795910ad0d2a89db2d79355ecedbcdabf135219d2afd7ac28cd7e45c6fd4e913ce5d464fd6de6e4c62b76ff86c28b0ab27a3c2622cacec075c790a7ff2f57f99ccb89c590a1dfb5a1862200c9cdf97f94eef18ddc85cf9830be662cec1885a629a6603add9396fb26341d9
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 9bbd1324f894dcca51a32242e73bae6450f70574c39762966c5e273e5a2bd6bd
+Nonce.0 = b5d6bceacadde8b9084f9e513b3f9a4e
+Output.0 = 951d7e7b3e00a588d4d7db7f1ad9340e6405e653b06616d276f9110f9ac92a0d01f054bac3f360b3c8a0546595372502203efae87c6c34f1a8ffc60affd246917d289d6dc864aa4d4ad43300b2e37555de3453e20ec33707bc8e3b43f196db1f728d294111ec438200030a2896cc2705ae0b4de0648fbd35eabbcab9306f97984cb6b41c966cf247bd0bdda4bf2295f9c801d02b94cad22d553dabacd6f7c0f5aec91648ea9c3790553fee7e3594ccc5300b234d22df110de392a05af9fea978391e6405a34de26ceed8787a4a042ce4cb05d11d43dfa7757b75f18235d7d14b87fdd0d4ed758c93fb8ca249f63d54891509bf884a63cbf3f0fef92a7ede8d72
+Entropy.1 = 9b064fec39a980af5ad1802e451573c00a628c9b0f0220a132eb35efb75c8006
+Nonce.1 = d0b7183b91055191f09d9d23caf4a4e1
+Output.1 = 459ee4ea91b9b8d4092bb0eb0324ded2e22ff9c058766d0877472e867840d578465e5d6a8b6992b9d67802a0ebc24a7f2cee48e78a296652479a63d9a8d64e3f0da8205fed8b52618f28511a8029153ee633370ea4d54b8d0afeded37ac8f083299df7f15612a2a918f06b65a620327bb0d44dc8cb4a8dd6a327c1a891b2126ee395598d263cc2d8c08eac61bbcfc93036f4ffea495db5500aa13c25c570de95834134a253a2ca2c960f1cdc947ddeeb7127107ae4927e831b9dbf07220c1b71e4576132d49652f54a4b106f216dd6070bf0258b9b58ae84359d0145a775f42d8d54f9969bf95342c8bb15e75710f0f5c48d216b78af297c4476fc4c888ce022
+Entropy.2 = 2380f4b2a43c3cef6b8f70628f90fb7456d08dd8bbc83943f3936d9c2b1bbe87
+Nonce.2 = 41dff48bd7e3903160ee27870ace09a1
+Output.2 = ebd1ab440ab8252d07aba0770db62a9d9e84f2cd7db61c0cef74c1d508b4627d9e4572c147f8c3a3b594a6be90f7b8a6ff3f0a9fa4fa4940923541f763146b83545cd3155110d41b779f6c24aec8346cc1d0a809bfe5f51112b3864a6663cec439fac9d34aa23f25e7f8e8c220422f80bb7c90b420a0deacd3db4789dca47dda971e7d2a1bf37084097ee328f4d9732f236d9c157e3d04c089c3ab6183e783144f40a841eaf0a1229fb01ebb2e9d162104ff51ad6ca0d388d488a9c29ef877f5945c01852a4bd45db1092859a1556c59d82befe203fa1818ab499c6d48c4e4d773357d8c9614b30197dd5c1665f6ebd9ffdf4bc39523b33a264cb2ff3eba361a
+Entropy.3 = 84e7dba652be17c1c0cca87d9a969b9af18282202842ad14c2531fe76f83e875
+Nonce.3 = 4896f2ddf35c6401740e8480bf163565
+Output.3 = fe34c3145de3aa378fcafe1ecbd30d003eb9e68765ff8ce2d6cb998694c6f7aeb1d8be429a56d9c20243f56406e69e6aa88a4d57ebc49583b7fa440b32e891232d01f7deabac95d2611fd9d235822c562fae741420824b3792ff368e0177aedaf5e2e934e626a887a93da6fe6ed13e2b427b81972644a62e18ad1f8f876a06b30aac3227c0954b9ff442dcf87c638262fbb04d3e1fb246c9500121d90045e146afbb3f925cdce3752a941b8a0487a7b3192294a47011ff99ea9744792a01a8ff7694d0df491750d3fa1daf3d16a9cd3b05dec2c8970b179d46ea293dd6e6d0ff7202c71d3252f0afa6206b17eb3f289d388e3a9c29df8147ed57024e1187c7ac
+Entropy.4 = 4d28b4f412affb229b3385b79f99a65dc363058c6314e2d47556598a428cb3bf
+Nonce.4 = 69ab35a35eb5600c31b54effcab74075
+Output.4 = 0c206078d2d03fa13c60daaa827c7021e15a0290dd77b24bd018e008c0178bfa38eb1c0fe466f135c8e8b2e9e6eceeb2af31a6a16fc5507ddf777265710789ac248fbf9403e3716a3232566429c00e3cc5dcdea4f2437f2ff2a1f31ac0964a0346a6c6c293e1a3265237132cccaaf8780a58d8f324adb39ff2bb70ddb5132723315f8eb3384fd7d254e6551066a7a91adfb0ae9add781303695807eca55a588045f0caec82907b3a3d4ed0f1419c844de59596bc1b5f740632079502f6de79420736917776b1ee1d11a2f59bd9ce2b6e2b3906f2d38f4d96bbb449a29501655797ca990b85437245434a84756123113f20bafae1c2be0f0ed899dba4e116bc93
+Entropy.5 = 24448a568f6912661a26c34627fac21f2a67e798a2290cde17150ac593b179ed
+Nonce.5 = 9c2350726dceb1e3b2f5a07889e52d57
+Output.5 = d000492bf88878adaf7af6453ed1c45010d4fbfffa45213f7aac603e60c3fb575ae49f7db997b1d952d4840b6d82fcf0a4b00eb1ae153eb90f7b165cd7525edfa8bcdd86592d651f0afb40b635fbf391eb60146894e271e96e49138a4e145495406743a9385fdc68f23ff5e86c69916ee7d3a41691f9722ecb82e5791b81e11af3926d1c324d70bf63df39b3ada3e90f010326c2ee0d0580e7987b34ec03f5f5ba630c1e9290f8333b84bab99024bbb0cc81706f99f218d9d0a132d8b2fcf91e2906ce816b21913c20235616317d78bfcbf6c60900fa61570c28649809eef49c4e105793b0e08bd77947bebd9332ab5336b11d81c6b33bf984b2b355359e10db
+Entropy.6 = 3a0da00487148ca4e561f0b95faadceeeb35fc591661c76fcc7935ad78a5650d
+Nonce.6 = e3bf035deea32c0a36b5f2059fb5c877
+Output.6 = 5a2dd8c26bd0a3b565c135342d74b99142429355d51a3a4b139a2cdbc3d64eb4f478600b847388aa722a9bb25fe89ee7d0a60131490e083e76cac916154e39521c3be699174fa92e71ca98130b7dbffd01b54c2621b3525b0386b5861b540cc7c02a879a41789163447ddad8e3ac732d05fb6446eb4eff85970cc9c5797e6b1a3b507248cd2e242dfff48db1eaca77f5001f424d208247d8ca8d1998e7ae7d33eb293da86609c17effa828fc27a52014c6688b235d5b89aab5d7702acc446913fb50a160830450b2733eba77dd297006b33f55677c2400e09942a5dbc75703e09903f4c31369d582057dfadb98358a9d39e3545b793bab0ed8dcdff253cef3c9
+Entropy.7 = 1ceb646925c3e7c1c81eb2342008819010d49e0d11dcb6d972a85a007870fdf1
+Nonce.7 = e298763219629e8901e9365ff3f56367
+Output.7 = 6b50e633a4b2d6feaff1dc328f074f0978913abc373a557d8ca2adcb922aaf94d20e79f1346b6b85c843e2b69bfbb7dfa16f9debb8234141be1df06217b685703020d3ddd3a7f74793ecb56a88723c1ce81ab29f9f7ef56b3eb0b24142285a667a3b1f2e2b50aaf2accd89144ac3abccbdc16f3b68b1d61987aab373e47fe57e7621e328c0544febb987c599a434a1e10a91ad8f096764f51588e4c0eca548c66351348e728f144a7e585a0f81fdda645c7ed8541f967ad8f60968f09993ebd9a4c2ad63862857cd8fe5aafc78afef0ef03cc47ee88d912d37618ee59e0fd2ebfce9a7a4af6211cf23fca88aa134b80e22cf93dc8e15fd8bc30ca1a5775e1157
+Entropy.8 = 62851d19bd8146cd9829e252154734642a1b39d03392b7f138b0bbb7813c3262
+Nonce.8 = bf47c30f8f05e8dc84c5983747ce9730
+Output.8 = 4c619f0ec161fda03583ed4328ded5fbc84fc854c30f5cc777c47ab118fc15d56ce1713d64b75dd6c168225459cc7137c5f324338b57a954b839a461e38c407f6d4be935be264875a6cd693ec98b90125629edbf3c29c7a0b3c57f7e6542d2ad32899e56a496c3675773f794e08cab7ad8bfe95769a13ab43cc99d7ee7d68dd5a35cb57a668db468a99f1831972e4d7cff59f75fc1ac4c6a3c08eb01d94f0e7f1f940c801d960a6a85eb2f3f4578911e9222dd2f62cc18611e3bcb879443f91dad2d0d0e2f9603b09ba400fb6af4b7b73c97db42178c27765ba5df01b3b7b42e80560dadd73433d82073fdb09f93a381150ce8046014b5bd50c25e214e98734a
+Entropy.9 = 3b7964ddada8f16b495d277e57c7dd721bb098a49bcc0f116050596c8b88b94c
+Nonce.9 = 6f63d3239a7415859d302e78bb082dad
+Output.9 = 60df463f43c0340e5c63c1df2659eccd9f79266eebc88f5169d3a972904932c02758404e840002716add87208043766c94138f7bc162eeb754f050aab0e92df079589a46522b26ae33615923380de81a63e45181aee673e4b3ebef3c1f312ca922300f49edf85f5f7416bd2af9daa9ff729fbd01047a87c2788e842628d0221660df566d5921a7095977dfa9441c3e0c8b89d3cdf8b3575d13c4c4bfadd382703b9948fb0f767d468400a206a5f8eecb06575ca1d9d6d737bf3b7c80e42a233d4e5875fc46eb59db81542d91e9cc56aa71451160c38bc06e056cdc981e4b8c54d23330dae67f75fa3528345efa71ef5b0c51e601cc43dbb4a5968583e0304306
+Entropy.10 = 69bcc1be3917a3a035ec29eaeaf961e74954eb2126986f27e703b2813536e91e
+Nonce.10 = adf874cea249a301d88be68d97a7cdcf
+Output.10 = 1c59daef4f22a035f4f30c1791cd6aa73b5a939f27b2cef241df70c70bd3e324ca0b6f1b439c923c96acca5cb106002c5f73f3f6a6a8335dd7353f2dc1d9b2c10cff71f27d9b564e187e97cdc289df66de95aa7f2d39594abdcc4c123376110e6c09e19dd84ccadee35e4bd3fbb38b80623ba781c268958661ac31dc234cce44e29bc4644426eab0d1587aed15bd145838bcaa97819f61811f87a9d4ba14510ece56309ea88af8914b9b3d45b1fac3882e5fc0cdd2ba67a309f0bb278d170cf06c22589acd6fef645cdcb5fbe8bfe3b020fae2db4472b324e4ecb1d7bfa6d1317a9f649378eab952ad988f220ae12cc823f5ab8a2441927014dc74086bb64dbc
+Entropy.11 = ed0bcf14ad870c697972952ccf028a0200d5292028b0d3c0895830f316b674e4
+Nonce.11 = 92658caa52c652b04e1f87ea3923679c
+Output.11 = acd2e85b622993f76008b25c676a4354c56f3603a9311d7041d37e1fb44c5bbdb488d1b4a06b03155225b81f09ac25a7c6998effdc1a7803ed13af96d69f31f2872afa3e181c3dcf07aa338837a193451a715c02c75511bb63d7cfec5659f2bfd4b906761339b8e0d4a2f2cd2b4377a6449bdc877b59bb403074b4b3190f52c74a4d0672fed5070da1550edbfe75fe15bb2be3b8dfc632ae166f86ee8271d066592f76473df3eb645e97f12e1e519affe4f38941a4e9acdfeae336c9d83132981c4a1ae9eb3ab7eb1577a942b2522c3eb4c2dce453c59fc9bd46562520893bf9082e89fcd2d418afdc2ecead17bc292edd4830db798b6c2f00192340be018da2
+Entropy.12 = 6c652fb18bdc0a9ceb6a4a64a91b47bde1f14bda9e4cb2aee4bf7a1b5614642f
+Nonce.12 = 494cae47efb1609d8a042e6167ba16a8
+Output.12 = cc64d8334817fe22d79e4d03c8e20e732c6ca4bd04d10688593a42cf06cd044951c068f7396118a78ad6475b39285d12cb225438db9bccbfda6e0ae385eda77333c8e8237cdbb6a0500c1ebb8f8e9fdc065e35fc73a6c3e4630b79172e965f6d6183f91528b331f075a788a8fff1e1a410bc44b5b06bb5ade7fc59b7aedec39c0453a3249badbea0fc60bb38f4a132c3e0bb786e63a26f8ef29720f4fbe4834bd114e20679c8fbd2a20f8350d602e5e46a0a826376e98fd5e65fb3b44339cc00234cc033011f56dd25e1a84cc2be53e2fc52ef482432fa571148fa7c8ce27c04b0e16f7bb44e02b123099a9c1f9f8f8511f0699a646bbac2595acffd3c0f9815
+Entropy.13 = 1a41e673f9dcd36f8d875f2de629d2d8781cffa2ad7fc330700c766e5f864fd7
+Nonce.13 = 490c0d75948be3dc5659e1f71dea4859
+Output.13 = 423b41674ccab8ecb7084d77d69b2f3e6edcaecc1472959a836d8268e512af76acb32d7c891e78128ce7332df464c9bb0647e4c7634c2d03a4af2a9cf07cb59c01bab64485d3c419c210fff1bb77700bf6ff7d38848d677ab2fe032a2d246b49cb88c0e5b67334362f986d06ce7a832f15252a2c4a7cfee05f3dace252b2fdf797560c9fc8deb7186853a4fa3a228d1a2cf26114e2b7d5769300d5d5331ca0b7455d6ca341f32548de5e31005f8654112528fc9ce09ec7779504d90901dcafc77b3c2ff174203b38055fc5d3d271aa349722880569186604d4d290a70eaf3950b4b1adf5951d731b6c63839870667f12690c834455b27a8b838be7fe83b7b9e8
+Entropy.14 = c5ebb2ae08a03815e496c2db1e2a650b40893ea78fbd7ca8434edcde4432a43e
+Nonce.14 = 0cede46aca7d2a60f2e98eb3c7d1dba7
+Output.14 = 6d8eeb5ba130de7dca993b44b46e08894fd84ab8c347992aeeac56ce5fb5f435bba92f1129aaf9b3035aa117301a1289acc222cdac043dac58b62567102dd5a57483d79fd703e188a0fe47254bb20b361281b5b8cedded86ba9b6d86deb30e539eb7ee007131ab2af99408f38ec7fd66bec4f1ed71251c149dbf8393b6dbe96cdeb9a3b5ee065ec8636444e72339ed2cb27fbbe5421f7f141940d6fa1cf570b8dd0393625ae16b10df2f1f6fe35dba15a732357dcdf4f56abcbb47a4640dcef618e27d049e27f2af7b8634faad00280e004cfe3f52d63185eccd6c4937a026830c38e1ed6aa9bfeaf739416706f63bb8b1475ac25d734db28e39163aa0c69c52
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = fc5e63b0dc2d941dcb44c0aea465f55a0b472715f4a4de42fc9bd59b1a9e747b
+Nonce.0 = 923737a338790a844fd71127f4ca7c89
+AdditionalInputA.0 = 51f1587b438bf6153ffc13485171b1f246de4f32493d1928896334608671aba6
+AdditionalInputB.0 = 2ebe000fac78c1ebc66a109ab7f8a5427671193204c52ca1b9361cc282cf1e03
+Output.0 = 43e78c0a68edf406725fda0fa7bf6ef41a9d13792a8f3e0d68bff7e113e1ad2106aed5473445b7c5aa3bad570b7060b5ab9375af46ce5b2abeac2ebb3bcd6fb483136a47741a5f6b25b41e22589fd5405dc28be782d0e35abd3caf5ed57f57f2d081f1d320dbb0dde378d8e6cdc964fd4c4d8ed0e954cbeabc0c50861d6e5da784282a5e5734a6df860312b13ba0b89ca93ff31c4c25f3aa89a08a0f2d90da6cddd45ee9b9899e39a0443cfc5d1c2715a40d4cfbd10b9e0cd007e45fd36111688655c62de7de5a115dba4c4f503026bf24fab22f471870a99b4747b180bc19425ef3f9009715e79d1a65d986e17f0e913570cbe9dbe9068633b817ac7ab12496
+Entropy.1 = 6a413d4a578cb306798e443b5d39f2bffed09023e7cc424ffd3c64d339cee088
+Nonce.1 = 5303d062ec8ff198c7296079896aaa38
+AdditionalInputA.1 = fce9105459531647cf4768b77f5354a53557efe6f3175c578f63d3ed2d40aec8
+AdditionalInputB.1 = 046df2492fd9c7bb89e0c3e2c54d2ac94e235c8273b8d54c8de1ed16c178d635
+Output.1 = 475134752ca9a837509bcecb9bf575231d1b7945fdf3bfec6ebe87ed26779a040fc3b85d3d3e0584940f92ff3f79fe24fd26d222cd951c4b76022e6e82eecf78099759f9546113d8d52cb53d0361658c9ac3f53d124a3158e0d3647e911ee749a22723c6627d06f38335ea3cd35a9eef8e53f03f048575db8b6661216f978aee3df5c98ba04adc1a65ce0b6516c9d90382fdf489a07a28a38bf6dfdc13d750ad474a1f2dddc04f7465b88d420c6a6a0bc76499a57a1b5f4662a83278e73475a07c3de37ddc7648600ade8dfab40d0e40cb7e3014d22ad920050b7546075043ff09f945ee5b5ed84692c0f68829cad5cad3811539edd6a5d7210bf7adc1d5339c
+Entropy.2 = 299ffdeb87210a9e1baf88b1af27e65ad981c216059d86085d4953ab8b3810c1
+Nonce.2 = 7f9f5c3306b7353aac83a2817e6c106f
+AdditionalInputA.2 = 4484175233a7cc7567ce4c63410e216ad6f3b37f280d9f01b5de9a98890cd50e
+AdditionalInputB.2 = 0a2a2e87749f5b655a70f0022b03ff07b7f2932de1238d4c0d6fd5ba274cef98
+Output.2 = f868ecbd2192993f5a45b730ba2b0b36fdbbc0d3ef948b03c1bfff5f604ddcdfb4a218fbd10f317bf15f49c836e45f8e57c771a6536619dfa160ffa1f3522f228b1aff6e5b570d4dace125c76cf5539a3d7a95296f33b0d6387fde055dbbd1d7a0858184076f0c545f29c5779f272befe23d3dd7f7daaabdf1036c076227598129f48a73dfa46c668c6eb7b4ac4b968cd24b12e1d18245177d1215d8925aad60a13c51855d6f1bced0e60e92eb3a17145dbdd1127d1b73c876ef58723408799c93b5b3896def5036f205a0f19e0721b7cf57b997599dc7ed35d288cb5910c964df82e0841ca42f1681138b829e29b1c82ccb2580260a7cfc354ed5b98ee45e50
+Entropy.3 = 67c2cbb5f27cbcc410abdff68ac6ac8d306361889416ef8fcc6d9bcde0896ac1
+Nonce.3 = 4da3edaf07d4cd9a95c2cd54a074fcb5
+AdditionalInputA.3 = 86152e556ec04c92c5bdb40bd7ac8726561637ee8f2956c515ed3d5bf9484a28
+AdditionalInputB.3 = f7110dbaf70769d6aae8badf7f8c423c6940db38ce88a4ff59fc90c948246c72
+Output.3 = 9d1e03ba9f9196158500dfe62303c32dc0f26afaba9d9e840e01d70b598811ea32fbdc7085d1718420493b93a57a79d987fb3810dd9def9799b0e3b068418b02f95cb4fa8671dd9ad3bf55bc690669a02d315b9e4d004026df6b38a7281170da427d863d281ef32bad89465748a6c17ba3e125d5b10a1f3d7c8979c255f413b42c7ff4de9164d7fd7944634e52005dbd74f415c15cb990ea2cda447647dd6cd44ee7151e9782381500a7468c21d67809871a5d3bfab1617cea9cba443b828a6ac30b697f9aea0f99c0e32cd5f5c36a2573ddcf8fbb0b1ebc8e28f321303b1e1ee2edb0286d7096969fe9c1af9cfe300beacbc91b4b1bbed634aa7920ed2425cb
+Entropy.4 = d39e4a4bd47facfa52fd06c264d3aa17699bfe5bfcf44ee42a4b6faf1639bb77
+Nonce.4 = 591d0f0dd46830694eb9d402f6c28503
+AdditionalInputA.4 = 412ff1a13377455970bff12cafecbad13cbe6d08953fe8d4cbd582a185815d79
+AdditionalInputB.4 = 65795a6b1167476b0d4461adf135f86458204f694444bbbebf583b7689df047a
+Output.4 = 291b542d51f5cbfa3f7e781e6805745384cd9b1585da99c80aacfb216395d2439984b316f520b8dda86fd0e480726266506beb19271935015d66694350e412e7678e16e1e91ecc1bbb99b3b0c86d05113c987621b41950199bb5084e36c83a6c50ade9edf31a7dcb1f3901adf22569429bfc045d56fc53a776fb9d4024b5a1c040685471c2c58b3036641f1b6b3713886c426ffd348e5cd0efe00909c3d4b44f0c968f029bd64036609e34ff538787bf913cb466d6bf22f0c3f505aa92dc6582a8b6cae76ad151ddf9a59c065257f691cebb5fa329e22cbf55d9f92d489ab2db0096cc6741fc3fbf372620219c89370fe230d439c2c5386f6ee02c2669238bd3
+Entropy.5 = 17aefbaa9c04039f05d0204f7351f7e6df8d5f86102c31eb68d810ef105b3a4a
+Nonce.5 = 166991006dadd7703d7c8901635dac75
+AdditionalInputA.5 = 87fdf4e12ce8366ebb634fc5887f41d4897ee39e1f32b42528fee0ae75c35d4e
+AdditionalInputB.5 = b18605e0ddfe0f718d6be6756233dfaa8b1c22aa292617ffb4db04b9435db406
+Output.5 = 63d96eaeadee2532502854f052c95e066c09cb1c3c76bbbf8b709e15b0f292020b1d3973de95479af5236602179f3315836a9ed6598ce85008dd6bb593912b8d357b48f3096a2d72986690ee86ece53520272b25ba31238d569352740a1141cad49759cc655bc6066c2d61fba56ce85f68db764b374188de7e2de77b02e82f39ce618426d30534985c8fbb6460035a30de96cf88a97f4891c3a33ecc26e962709370c9c1724371a9d689a41f5e54470a99e7b1af9484ed21d5c9032d30d1b4f2feb1a063fe7aa09fc45c706f8d67af70666b2fe8c33b4c2c84bf850b0553f565fa312245fe45465c553da6c47160592bbc18213719542bc7052e4fdeca27fa29
+Entropy.6 = 04122b8273763101a8a0fc46b8fb78cf7a576f6058c54329b0b1c11f3748df63
+Nonce.6 = 674e51f28432b6e376c8e88c4efcb72d
+AdditionalInputA.6 = 4cd6a1b760358116b74eea410bc78f8fd66d01120fc73011a78584105b00974d
+AdditionalInputB.6 = 1d67e0ca340837fbcb841677174a22adf63f65c4b81af3e5167f02204735b58e
+Output.6 = b86548c55f4ae8f7911a63579b90caf5c9ad23b67fcfcf2cc82a4abf4ad3f4a9525be26047469ffb7d9e4683af04e104d31755ab59e0991fc70238f6e3f56ee394f0345f576e3ec7ada2a6ac3d34e2f988db6e9987566609890b9b11e07adddd46b35343ebb55fa03524d1a1d86bcffcaf04caa70df2e864cbcc5b9ba090cf71263a0f77dcc34c3b0ac0bd5ff36e17c919498138a4d6ea2c7955d09152accc92369a7add7707c11e17b50843052553a8df04939923eebe64e9da686ffa7776c9e803c38a277dac48e4d82624c21491ea6fcc46bf9505ccb28868765154f19c7f890efa19cd829d1a852cd8b48df81b52f069ccb452751d36f555fd8ea3e4f47a
+Entropy.7 = 6eb7781b14003275072627f2d7ebf7f772b0b8d77bfae088b12f08005364542d
+Nonce.7 = 1f739a58f7c3875b3b954ea69327fd57
+AdditionalInputA.7 = 8cbb38dfdb35ca7ad26878bb3175ddb4d3dc5cca629a1005250314c7743e0173
+AdditionalInputB.7 = c1a93b677374270fe68191ce935446effff7560cc8afa2616282486d1c0258de
+Output.7 = 0669f0f7d9b6453132e7c35241c95ce1c4702f67df6501a426b1ab42d52bcf7350f23d1e3667841c955a711932aa70bf968d347b810655f59947f25fe0af0bc482b4fc9770d1a98daf0114c2757d4da69ce53ff91ed2b643fc4b2c55816247c052366a6a738cdd8b285a10c49afe5b3728a850069959c379a97728c8cfdb5a76de8831d786b238d9973bfc477d3301e483a5ebc77e8655ca19bfd51aed0de8096794aca033a2b227ac7e62b3b96593dc5993f309236e273712fe4fc78067ed932d3e687f183d445267b40c852bd7f0c18f61bfa5c318129ce7dcf469cbcbe85c7372943824ffd6b1a46feeb65341b57c2c06e6e7c8d12dabbebcd296b8b8b902
+Entropy.8 = dd4eddad48a638eccd1a1948a9710893b1967854d541231f3899ca5f212c554f
+Nonce.8 = 126eb1e72c177d87e798cf8684e3644d
+AdditionalInputA.8 = bf683dd25ab6081f04d45a39d12ff74a3e584e89a4ee5d55d368c02fdaf13376
+AdditionalInputB.8 = b91c5e5c57c42891e10aa49be7fbf33901a43328fd818f0ffec700bdb182ece9
+Output.8 = e3f55e3222ae34a5ae63c25a5ea4e0dbfa7c8582610ac62af6934bf5a1a207ae635230a192cd958f2d2350c127b785cf61a67daf33a0d96304d445c65cad05c4f0b5737f3a62ed8cc5a791aa6b5e576b4582a9f8681a4f7d1cf169fcfa1d2526f2b225a13e0d56c2c8acbfece4e3352981f3e21f262b840dd4a24e1649e4e7299d23af11a9452fc703c3cd3a5b48c98efa0ad059c37ef95d1f2577dea4828da22371b7b40ade001d7ef8e2097ecaf9df2075bc52946ed5bb155fe6bec59667e59628b84f3878a7e00ac36f54450faadcdfcc9c0c300dccca5c3c6ae894970a13b135013daab0ca9f40dfc5e08560829b5fd0c11486bf7f4afa3afe1da8cdf02a
+Entropy.9 = 844158976f567eb43f4bc38de289ad523dad828095d0d3881496619e75f52e15
+Nonce.9 = 5862f8c0079328ce2a1453b37de4c650
+AdditionalInputA.9 = 94ba2076313891f1eff8d85dba77a5f0639ed46694d0ed3dc27bc9819e2b51aa
+AdditionalInputB.9 = 72f02328f1ebdc08d5eb7c64ea4a2d1697275359342f1d3b1734c7c339521a62
+Output.9 = 78e08b7a1e130690e4f3854cc21c2542368f5b8f68c833ae94f15dffce6e46bbc0dc9babb948f4e2ed3fdb41154a0ed289d1c44c7b5b70b87ac9f2af579e1a59b415e7444ffc4d5b4d5837963769bf9b186c3d46e512c42c1eaf17b39c0d755bd28081a0342c6cba303ce2fc2240bb9943224a80a5f11c77d876387c8e2385d527109e4d7e69c7fad30c904c27bd89ac85277f8c65f81b3d30806faf98b8ec6745cec07ef14de726a49c4606d9ee48a8572ba41daa7b1146c436895fc35964132c40c6aac34be49446418275b7fc72f50226a2e36fa70c0d6597566d26d58c753eac896ad6f2917ccef273d085d0abda36fa84ad73e69ff0ee91db78ceeab989
+Entropy.10 = fc55392bc807482650d2a37bd7ca04ad610e9acd27fb63ec72d9959e527abb69
+Nonce.10 = e71aa61209611477c5da3211c9069f3d
+AdditionalInputA.10 = 19751887241263f7c5eb4f5328aa397dbdedc8e0116348fff6fd0d6b86a9661a
+AdditionalInputB.10 = aef61b491bc598aefec94e48a7ae4a69f982f7841d0e0161d7125a40d74c75cf
+Output.10 = 4f10364d29c47e743c06949056891ec355f5739d151ef675849fa970cd0dd6eaa29813e834eb92193c479a0ae1ad8ab53484f9819daf1b818157c19a7fe4b284f063772515a3498c55a49e0e98de0518814f38e8b5923a704b30eb29958270bfdc639ffe5d94b1a7ce925adb984e93ca0f6d4b2883f15984374d43d2d51813bfc83f51c34743866e9171ddb72eb17ff2701c61c9b036fbecbab75e9cfdf3c4ed193b6f10f3c6241777ae5d265303d34f0b41f24395cd3dcd44461375818140789b4ce42ebeafdccf818aab895b8efd2edeecda1aa8aa18a3ab3d8da90176a7240ae4c664cf7a7cd91db54d293b9241227177b42a4535393894573ac67842e4fe
+Entropy.11 = f1567681fe1cfe63fdcd93675420a28040cea5a8ab5d9865b5c34fcd1cafa9d3
+Nonce.11 = 5e914c8121d6f13c8f663814f5ff39c4
+AdditionalInputA.11 = 4eea4d4ae99d5afde3bc134634e9ad3adbd05108e0dabdb3131c4f806c2eb3dd
+AdditionalInputB.11 = 38d6238af84944d244234f7f2f9d8e6e0e934c913502df091f033d0a1f542da3
+Output.11 = 3ec2b61ed468b6134e9919c70a3da52c533bd4880287db7826701f17789519a2ca8c91f606640e6ea8cfe38e88a618757f100a301cca9de18ff25b472caafed8176865cae64ce64a510fb82681b59b2b19d24db72a76ad3c33969a4426149be70f65f1f6bed66da7f5607bd5d07f023ebe6ccc598f9f3197ed43dbb7d40b2daa72df33acd5c3be0e8d4f7b91e0ed615a6c0bdc2a10128b756ef6d7216b96f1e7a7c9806fa6b654c23ca804420ee3522775eced6d9546863300344773f6442a391cfe58f392e94f35a7257ff493947f217a30b93d8300d5de891af979a7a738bd100e3a59b8a530a52851d74f713117ebc2210b330e390a01f4d3f030444e101a
+Entropy.12 = e9123e980cee2a56632640f33879698cf6aabd564c249a8d4d028d88c7547553
+Nonce.12 = 7ddd1e779f2c36cf5953d397c0639e07
+AdditionalInputA.12 = 2d3d24b67c8457f3504fb9f07f997906ae1bcd64e4665cfdf71ab7ede4ee4f7a
+AdditionalInputB.12 = 0caf0f8ad4c6eaad237f9fdaa565c1581cf8043b82f092e97858a2e9cab1eb09
+Output.12 = 4208f1f35b13c16369313c3b10da2420b439b6b6644fc55b2181b7ca249235c1d4dfd8d70bdf70e4a46d3a3bbd073a7053aed72d4de0579f3cf69409d70023fd9a1eb807f549318a3a8429fb1110da76f0d28ff2e13b7e6e1dcbee63819386ebf65854af2ecf0968ca405c6a9649fe8ed6e2b27e53a7a06f8af48cbfa87065c91c37f1aeab92f726df192e222a7f6df3c6dd4259c9c08b578772ca9ff4519e804ea73327fb43f524688c9145d2992e795fa3292541ebe9876730ccd8ac153e5943265a0e2650eafc19a69e2cfaf45bd4f330ee36a5835b577623fe3d160ce1266019c315c9f52add1fc0cac870e4ef63e23140d133f278f9bab5ece59a5942f1
+Entropy.13 = 62203c7bf8c4e9ba4442d6bc682092c3f321e2bf956b5d687579769d79efdc3d
+Nonce.13 = 42aa4989597df15216d59ec78394661d
+AdditionalInputA.13 = da8f27657156b4a0b9a6bba89e6142933006480d8bfba9f9d9a67ca890c0ee8a
+AdditionalInputB.13 = 2993169ff4ab448d9eee82ff0b02c18f5eaf3d222497a07d888daa8ff8ef0037
+Output.13 = 5f7feadbbe5ffd8813edd6de55d72d46ae817c17aa606ce97ca4e04e5a20c875a255500c6170dca69c81cdb31180c376f37e774ea9d4eaa8012c73e820ba258a2cb99aab21887b6522c713603e7835f1219314eff8aaa158d774f0447b59795c202d4929107d6b5da827a2889bfba8810b33fae693b82de682c0be19454b58da072bc785fcbf9e68fc46f45c5ad794324a92b5b8636edc9ac9e3e51777b6944ca61b00a2f50f263db65e900fbec52d6d736d00db4caf055fd30ba68054b68ef600191985483069e69f301d0dc2ffcc60acd82b5c0273a6fdd1908f53ea19aea642200e5169d2b91364bb2ed66326178ab3a17f15e1b87558d48305ea1cafe120
+Entropy.14 = 4756ee6155b4bbba6a3ca94c3c88d15e6bda5205e46ddae32e83051743c91bb6
+Nonce.14 = ae1e2f15e559e6da9fd33f60e76bb572
+AdditionalInputA.14 = def9d8f7b18023b69c6cd4121c0adbc2a89b3ca37333d4523261d5eb20595d01
+AdditionalInputB.14 = 06051dec796525094018b436605bd2ddd66359a2836a5996e8262bb7763fadc0
+Output.14 = 29e8184e37a5c26670bdc95c842c602ed8b0cf102ca144133e8cc841e1dc32fd038a72c26b8be8a568db60a4cfbd52b0d8b74cdf180a4931d6dd19a255104db105b3366d75e8f6afd0e5fab4dc14f6deac82e7703eb6a61f22b79bdad8ac7fab95a58a71f80fa510542615c305f7cbf84790060f17e7d78ab5d4b0ca34fad47133a0627b803c1caee3b97fe47626a8590672e2211f39cbe1b79d1999fb772b884122c8e50c59fdd3de13a53e805f40f8aa35501571a4c4cce79a8f738e60a43a11afdbed94e26f474ba5cd6ff5cdaf00d0fb84109aeb3510f1ea576c70ae78cdd0415a0521f3ff4083f9160011dcd6e2802cfbbbdfe9c4a3b114dd47b3a6cddb
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = b510a60a5a19007ba808e60b1628ed9907d1bef992d4fc0abe51500131cb4cf8
+Nonce.0 = eb1bd783accc855eb320cde10b1be6d0
+PersonalisationString.0 = 7ea10e96af900c25d3be3b50a0cc71a79fe414bd4c3739803f02ffe5b260bfbb
+Output.0 = 5f03ab529b9edab55e75e489bceb0ab6cb9ec6255c6196cd075397b091c3eb598e3162320c71e389e1d9d62a2de5990c2097561084e13ab4b2977f99c23daf214bbfeb162167c933860fb2cc9f80079e17893962ff03a26b2b4b838e6de9ff5e9dcfba73acc6ee76c477d1f7002265e693850a260e68617f13b24716d8db42c9a8f2e0bd5002289a86b02a845d9886d3fd05d8d85ac77ea60192a29047303a03b51e0e708fa00205b5c03b67b77874052ce56d5cf38e726d608bc0ef8fc2a7d27778f47c6891637b631ccc6e36eb893fe08a5b9f5571bd432c826d99698fd4179bc5cfb0d8ea2d555c36b70568c2206b18f3bea14b398d2b6a00122d7a447ea3
+Entropy.1 = 437eb8bb624742b377a03156a2bd868425c25bc01fd2d7d766ebaa4a0fe7b204
+Nonce.1 = 5b88ce5733490661afa2634097d95e77
+PersonalisationString.1 = a34be0d37e0149d78601bb796bdec7035c4c18c71d386fa5675b0e9f4217515e
+Output.1 = 24c4647c869efbd691ce8818f943db07d819862fa91afa55035ad86c4c33f4fe165246306a551c7fadac73595346154c7653499125964eb4e81789384efe2c16af8ffcb0900492c032e83fa26077a58b59668eb873036fbcfa8ed45ee7aa267e5e476a3955d22ba4a173eca18d5ac828de5edd5547a9671b90317804d30a5f9725642aa0b4f7fff3226814888efd515d81f07f15b00c67249cb1f42296f10b27a97059e2ba10681b4232acac8af616b71707e01a5632d0549f5c19c00940f6b9009f683e64cae69e72a62ac7b714c2f21ff199e601ee989883a3a8db0c85793bd994bc22f364e0c96bec4166427188aa08317cba5b5414b001462054cb003fc6
+Entropy.2 = 41b7ccf06fc6eaa85970896d34bc45a09ca8c2d688fda7fc1d9fc699204cb352
+Nonce.2 = ac7cc04dcfc4659c2f08dcd6b09bcac8
+PersonalisationString.2 = 9cda5c090ed1e6ec9f7d31f5073955c4c7d8c3011c8419ae91e4a829d4b3ed30
+Output.2 = 58921de02e81855122c17ae22e8400ca14a4fb17c2d16aefcef4cd5c59cf30f7c9a35e89b567a2f9ccf87e1b2c7dc86544d36e25b111ad3cdd0693f563fb9fd25bea8b61293c8fcda4d71c28a3f6b86881e5e0821f011bb94df2ecba6e04ba97a962082328cd10d8a06a150d86e59ca1e542b85dbffc9018e800dddaffc82aeea8b4b9099a3de939e5940459d17fb2265820545546252228a938b657c98efdb22f2fef35d24c6317dd6fc01910b6e4d3522dae3360a8e72ea50c01bf14bd06a713d1feba12c738008347985f133a43d4b8289cf709a5687a19f755d7891ba4b0e4bb5ebd4739411630eacbbee4d7d56352ee2f2505e516806ca7f54d7ef2842d
+Entropy.3 = f851e2ffc4e36ec323788fda250e712f08cdf832d13126d723e75a9c47c9e974
+Nonce.3 = eacf73975cf3ba5cfd4fe76e86ecc732
+PersonalisationString.3 = 39128755ccc6116548f90b53775c7fcae46a7c22b13d807e0314561c2e3e3b98
+Output.3 = a07dc1182a42dfaf31d99e3585e5d8c5bb77e43ea23e3bf5605ee22ffb453a9e1061b9692ebff369e8a91daeea4681d672e516143a0e63c684613ed7559701e2411ff94a8d23d816d30b9e5eb5c029e6f2ae419a076bb2b049ade66fed50b1f6c31978631b66ce8e9365e75c113278788a3779f4ae3547cd308eb99a57bf12079afa098d2b1f596bf6775ed38a4519924d4e0f7362755ae414ad1b5d1f534d45ef84f194e5e7a99b259fb09376164ba7c44489444f24e77dcc77189b450528447ae4a7b85724ad8cd379c7ce8dfe42722f596b3124da4d42c090b6c1060b29e33176e4462efafa3438c8a20a3d41c758edba313789271ee15a6770694a2cab16
+Entropy.4 = 99a179a403dfc5a28c515e62b3299d8deee64125f064b7563d9221eb2099931b
+Nonce.4 = f1219ad014e02fcc007d657726493060
+PersonalisationString.4 = 13dbe49995e1aa08edea3565456c97d65868d475ea48cfdd25fb52e76b33730c
+Output.4 = 7d46ce1bdd8a080de2f9a276b3ddccdcf2aeb51afcda9e3c7e4f21f8a4446087c7f61c600684b9ef6955a3f547a923086116dd634f40f6261950a9da0015d1f79c220fd36ec0decb7d3d6e65562c087e395f719051f21bc43283d217aec39b8e059b3b9222209b71a76c91d183fa791514a6f7386fcd7244674a54f0327acbdd1c2d8be494f82903f7710b1e2139d4174b736c5935c9b23da43ef25baf8125bbb7095881c21b7beed0df96f2979a8b981efc75eb4cfaa89c76bb7d14c9763ffb9c16173e556d57cbdc7f8a2397790f7b7b99650a4bf75d044cd1faa925d129f51ff9a1d5688769cfda7d4572378d99120d37f627271c40d4f847c311049a24ad
+Entropy.5 = 08f9bbbce05bb88a664fbc00b109148b8019917b29299594a3223cb9353cf06b
+Nonce.5 = d88e0b2604170d8f96f939063c868440
+PersonalisationString.5 = f5e65b38d925a8143669046aa129447019dbd4326856892d3cf8cdbb63ebc80a
+Output.5 = f16920529a5a7a841ffc8533ccaced4d7259857462445bb7be98de303f9f7ed243f58668a172092109ad4825cfc96b24ff6341db70b50a06fd508143e9e0ede67f32c6673dda34ef66f74fae2f940b52716e50453fcc021d3a72746b6ded4c1b19c50b8f6d21c5c7c1a96cbd05b393790ce18ffa737c45b9c1b2e7cf05b110026fc401937493f94b4d8464638e03d19485e642cdf38f6729e0c3dfdecb1c8559dfb62987ff629f1f57b4eeffbf9943caa2b12e0d77e51ec09507cdbbaf40666756f32a7810cdf69452e46d75f2d1fb7437d1ef75d13486d97b384f030d713f2b502e3287bc014e6bb6e373821c4756828e71b4c2e08ef3501ef12caa82c0e02f
+Entropy.6 = 33a4d88a408ce2450fc303c3ce2b397d97afa2c29e1fa9f27cf98bec60fdf007
+Nonce.6 = f870245d7194575faf70e9e63a417bae
+PersonalisationString.6 = af2966f37b4b080d4ae4da52a5e247252c7e0dad65e180fa2e1ecb05992b6691
+Output.6 = 84b2825630c86859c5ba59324b292dd1f4923df5b2e664ca4a3d6a5eeca62f5157dff1ad0c7bbc785fc7eb15091f25ae31b7da54658e4ff0fcdf7c1a3a4734f7a9647db50c3c45c48fc334b7ae1a725f0eb57cf1c078683aa50a7b3cd4c051ad3d59daae5e2409321dc8433f439cedf9129b1aa3e2d1ce5e659080762bfa8db259eaccfbb1f704a76f59e5878044df9fb08e65fdfeac65185603b0904561aced4ad32b6bb52cca180944c62d9102480cd0d59413fab6268f92224df1fef21c11c984ae263f24de504e6a52869066014ca230e33a9d7f64c7100ae286378c44bcfa15b1c5f43d55b79afd69bbcbe6ee3255b78cb59a0f7ae1bb9b4be239301c81
+Entropy.7 = 7c796db5544d37174068161145e2e3675e705dc54cc82d1e3486cdf59bb7f82b
+Nonce.7 = da2de425e5a735f9f799705c54e88640
+PersonalisationString.7 = 67f98ddc76c61b93270f3fab40a09eadbebde1aa252efb937d6cecf5f3a9e48d
+Output.7 = 3c3688bf7410f545073813eba8e58d89efa56564c50475648821c048fdff3369d188b61a3a40b7a75df7883aeabaa400252e2247e5553aa6050c2b0703ea79d85de06c7c18d650389b4d30c1735bd0452798a12d428acee1800a4d9b3666f247cf9f8dd2b611e3a0aac763886fcf49bceb66af8ddef6ed4e5bb39512dc27f29e14cb4ebe2f675ee28f2069e09ff9e87c7b43fd89ac710ae2dc49d49140079ba999c19391e8d7220c176f9912b011b799332ea545c666283ccc1455deea01eebfd4ced590e3454ed34ab80f4e2f7f7336f86bd295779948f8f982c5a4223873dd7c2ff87b5ee73a2472d86817d39a9b8a37daf0935a1ac7340679ead86f9e4139
+Entropy.8 = 0b8ecf86967f9f654f5b4fec1af177761caf138ff5b40dff36183a01a630c5dc
+Nonce.8 = 564ff097b9842c8539d8c255198057d9
+PersonalisationString.8 = 30320137d43b37d7a17c15f9763bcb37790ace97d88eddc92f3ee1d60ca1a929
+Output.8 = 9338ab01620bb5c9fd698ad49a18bebf4d1613254b1bd619cdcf746fb850481d44ddc88538eed16c29540337374e901f1e8d667bdee99e40237c086569a0be686489724a58b72012281d9241afaf27f16cabe5f41c2b3652708907c63d782e67fb58ec4442e71c02f98882950fa96f58cd19783f7106159adcda38416863bcb7fd6844394733263d96590d0cdc8065118555b2a524ba3c1327ffff2d2a894163a64525584df8ee65e315a472ee9752214e06a2b6c0e72c4c12a5008a8fbcabfa7b6289043448b65c077b64863653f6c11b70ff701296631a307bdb0019214379ffb70c0eb8c3563b1eddad3359401894522819f5f82b25d0753b154bb8d278e1
+Entropy.9 = 8a1c324d7c5d79f4cb89b5b24d447cfd2737a1cc166db3d34acaa50054a0ef66
+Nonce.9 = 19c7f7bd9c27a80b01722d3fb71565d7
+PersonalisationString.9 = e81d9c0f169a6f536369e4ceca14b2828057d7574b34a535bb39ea2929e193aa
+Output.9 = 33953f7192160d854d0fb54467382c0d8229c1331639c15a7067727b6af0fb0cc5551ad9fc7e0253441a4e54df8f7471f94e1dac4971c710d1cf4b4f37672681bec6c85caddfdfbe247855cdc4cf423805f4dfc681aa95958c804214c45e93c2620f298faf7685567d26d2de5185a591b0c0057eebcb715cf01743c6716484133024be4dbc05321d7ceaad7fdcb854f31b4858549c7a1cf296c16c3a39c5026c97471bc9034fd056950037c37dbc538e1dee56c566bd911f08e6c4e7fd0efb9e55bb4b1025b2a8b76014a19ba4c418285f177ab19308620fc4197204f0222429791dd0b88dd66d65af0ee681cf01bb7b77af0ec827ce72ab7530f1b2c0a54d9d
+Entropy.10 = bdd5ca5f0746ec225150cd85e7d8acfad14c329b478d9f069aff030380cecdec
+Nonce.10 = 31227b1d0e935db6aaa63578f1cff0b2
+PersonalisationString.10 = 13e4bbb57e9dfe1c22fd410859b25f587be324755cb8902c9f67424796c808ec
+Output.10 = cc312a20d41da4fb965668c719257b1d85f8d83d667c124655581d10b84afda46b637c5bce4f02ecb538661e9cba650a35d2b802eab3f8f12c38c92518579d500e077257869b82940b280fda6af390104d78d958d5da66afbd4cfa57b1158bb9730a521fc3e8f694213bc19b974983b34a8b912aef8306be0a622007b120e9e883e966a8d469b48c9cfde72410ac6795d0eb7ce1fe76f502940845a7d3170e2c8adbd522237bc25ce04c431424b4d98b692e36b2ef1d08491319d367f0d6f25afeca22ae65926f99376495b2747664079532ff4fcac4437120d54d720cfe3e41834df5857ddd34eac2a127bb14406794d3f07e36ae7e4d1279ee347d8004a167
+Entropy.11 = aadaccf8b08461e106ae1c8f7f1f73bb44fc7cb27cace17b9a78b4fa39a0a3fb
+Nonce.11 = 3f09fbc98dd8d90a3367364e13bfac0e
+PersonalisationString.11 = f089ae100801d5ee126c1de1dc84977b162e55a644a09e628876a411ffc8a3a5
+Output.11 = 7205d5cfce7d15bbe9cff1494660de9d7946160bb692b5e610e6c63cae2f4f273fd6ee3a3d2998a8be7b55557c6d591fe301f70754a4bfd00f07037a12d26dcbd9bf29b69254431f75b2c68ea7d7b42a1db0fba3fb411196388a19eedeea96a6418745bbd4c3dcb97a88eb952b4306273dc6f1b1c5f8da92bfcc34db99efe52b31cfd3585219735dc86aaf132bc9dd25d0e228a31393b6ea306b7de6c40ce0ecf31d3f69d478780b6cf54d4c5def99d1cbf36e785fa70a41f4f528acd89e9aa453f92f071915b9efe6b3170850d3870cb93da9960c1557148a1d8259f1740758790013c2e9b2fb929c953595d4c1eb54964c1d1aa31d8f886a713b86508195fb
+Entropy.12 = 3ceb5f4355f3a8d026842f45513ab83e3ce2d28b55ada2767effb313ad3c2e1d
+Nonce.12 = a87a2f032cfdaa979d11bbe96fc79485
+PersonalisationString.12 = d7f3aed96ca0719dfc4abc445a5d5e284fa46dbc3ad180f51792c7e1f4c701df
+Output.12 = 900cbcd97a61a8c00af8e9179259527ce85cda82b44d2fc2a71a3452795048745995d51ef2771e4feb80ffd3084029d2e6f83c99bd6496de6940b54e38041540e3effbbd89ce71871b28ff99ff9d62ee533c85ec50c116dae9fe555ef1fb444a2f8f593609a4e767a03024d6a61191bb14f59c5b95c28df537d411e6a55f89d0d7d04fe4ed2b917e966c12e9ee21af0705e6e7b09cc553c2a772f421b07a88621cb2ed5b62b8fdeadad1e1c5b3fdc875dfe8c32266078a9c30d088f6e9429877d1964b39efa7ee99008d19931f733516b2dd83aafca1bebe8c63e638169fc55c2b6cc98ff89e61566472f1713021d84c7138143b2ecf03b0cc2e77b5e001d98e
+Entropy.13 = bab81ccb0e7325ae4efb2844013e64b321d5df0bdd6c70a5e5f5c093f246fd7a
+Nonce.13 = 4fe74a45ca5175bc0b3e1bb3c9ac0799
+PersonalisationString.13 = 27e6945dc80dd525c33c7111b17899453218ba38df9802477881d013ca7add2d
+Output.13 = 9a44b46739ee75788dec7d182491e58796c308ab1d27a4eef0151cac65c31f7e5806b9ad7aa9636688a67c1a9f18298061a8d33b8d708adb9f05935e729dc977b9584af8a5c1ac3107d58bd4e3c751585259dfc39950ead6b47fdc0c3db5c9f8809881f4f9fbbbf2bc5299900745c0cd826993e2e3cb96df22e1b5da18a8c1b2037ef65b999cb0a7ed16b1ca92a31aeb7216723cf20c070143c1298e5f5bc344c5252ab966bc477327ad1cc52192a69baf181d07293acb00416b7e86ef9ae871a8d750c3653d8c27c2da99eb1fea14aed21f247d31aa817830489b11e2104d2d978b7dbbfd2167d599c252350f122b130838bff709bfa879a909cab5ddff12d7
+Entropy.14 = e5f5eaa9d45ab64e902b5444ac7084b776521f36ce76bb504d8e719be4a401ee
+Nonce.14 = 7b9a876017e5e14bd6a19719c73035da
+PersonalisationString.14 = eb97028b093f820b182384baafa56ecf196dc11ebc515a405ac24f73e465ae9a
+Output.14 = 3791ee66e505257b0bebc4319897e80ea8a70577b8a85d809cc7e4c77a458e8517368e2eaa7c0623b91ab3ebc4de3240e00e5f0cd20524d73b8000f00a3cecf869bee26763db9689dfaad9b5f21e3975f750e0c6b694d7df35fea26b2ff3c2bc679b5ecaf129320dde8245677aab9fb54b8faa97d394adae687a35b00f026430ef29bc7226957dac5edbc4a70dc82fcac00bf89d97e11d2a3e6ecfc4af4536c329ed3f4dda201db47236b03f30daf71e6368a18ab6224a023fca2ead589d9ea165d66fbce2b37a630d18ef1c97a619cd8949f16f44a9bc0f5837737d7fa4355587af5ab452f53fb82dd8b8b4706cf04e77938d7e0c3a9744c353edd0c6931591
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = c019421dd76ebe61dc590819ab0385af04786718e1ec13c20995ae183ddb4938
+Nonce.0 = 3ceb9453616e12561ea0cbbd3da6e342
+PersonalisationString.0 = 5907582bf298edc00bc62952e1cf64c9d2d31ab704886ce075f5b7b8fdee0478
+AdditionalInputA.0 = 27c88dcd607e7de8afbb5fc3e810d75e0a88a81909d4007113d1f59d209f9494
+AdditionalInputB.0 = 9988b422743304739966101678f5b80cbcdabc14daa7da3a1ff798906ac293ec
+Output.0 = 6cda9aedc71a4c483f8f006f7f2342af7395115a4c162a75e8b54fa4226bf6f129ddacf93c5e86785434f660f82bfb3eff116a2a691e1f14603c605dbbe9a14a7e3bf725089f200ae91ef1ceb542bdfeefe8a7d9b746e7d0960eb745f40e11c5c51ec29bd5d6a5ebe676ac86bc07431128f24221273856a281ae21a8f520aa8177288a34d15b1a58a47c72af7477bcbcdea92a547d3235d01ca99a8ea9805624f39083be75e654a552fd8e6615c086caa131909f2f49423179acbcd315d0a16657079ee144e01ff75540654feddf37ad1cc5b070d7058e7f250c5b17d9f47d8941663e8addd50419699ef338b3deb1092ef76a8dd463d9b88c57a9db48415b7a
+Entropy.1 = 98ed3a2e252fc138174a1d2a46b0b7c8875f3647e23dca839ccd2133665416bb
+Nonce.1 = c33412ba47d024528eefc17f04fd91ee
+PersonalisationString.1 = ef9e0566b3ad06c9613c348214e6b2d4827762a7202460de73a82b4b80d1483e
+AdditionalInputA.1 = 899a036346379a9fba5462aea59b8a54fff21301f3f634f5c5b9e0be8fc478dc
+AdditionalInputB.1 = 6d3223234953dde90edb7bcc08cad81f2584c1897efd4f377ac5acb6295525fd
+Output.1 = 4214c86c463d77307109d60303af4471441567b80caf4046b8e208aebbf11243ee735e8586358b2d9dfb3a98b5bf823a73e225fc0e6c3278aaca9d1c3fbbdab6270952eec081e3b05fac74dfc70cfddba3f96593b713f8060d2c26ad4c1be581e9f987fab3c1b986fafd57121adbb22aed6df8de1c52641b12651b7fb261536d6c894e9d9c31af2dffbe572e5a130879610c070c0f265d9a9ad63959bcd7853206e85c2c32e4141a9f89769763b9d81ae2f100779e9625aa6ecbd89d0f1e2c5d966678cb00858a0be5f9b9403da82da294754ba8ab32d78519d1356efe97fa93bc32e2767f954f51b73c85f566213585228aab6b418ea2dfcb31968b1892e300
+Entropy.2 = 417efe68345a8661c31a32172e6514e8aef20501d110681b6d42abc37da7e538
+Nonce.2 = 1409cf37a4a9202cd9b181b7795072f0
+PersonalisationString.2 = 76ab1ad7507af9dfb5457024dac2e26e9aeede5fd974f51379dd1fedca1de0bf
+AdditionalInputA.2 = 9439dfaa867bc4bb259ea4735ceb6071566b7646eeeed4106f4ea8e44d013c3a
+AdditionalInputB.2 = 50a6c2c4fa03904663a42a8cbd275f0fca0b931577f52cb49e395e705ec769ba
+Output.2 = a6f53d9182e4217f4bea6d940d35c9997af5cd5b8ecad8b6a5191b624ace37645b6fcf449647c258026fb4ea9f0c0c41f887c99200446558187a5f6c42a14b4483f8adbc62a5a5d0dbeb5555dc9eb7c57badecdfb72b28e70afcc45a2cbb56efedfaf5a95e9abafdf9a4e4efdae7f4162b9d3d92af08bb92e4e41e6f97d7ac0f3acacd68dc2afb1ef9ba379cf5d8e7b66f33f0ed3fb0e831384d447e5bf69d7cbfb0c788ffabf5400ebd5124e910c9da4edfba298b481ed044f61e629c5df428620d82ebe3d9ec68444ddca6be7a6a4d576792929c9395321a2dcd3dd2ea950039fe26809c14d7191d4fb0de9eaafbc0bd3bda9b8d6c18b464685b2339304d3c
+Entropy.3 = 0d2b9992666d72637da22e7da373763e6f75f42bea5e8603b881d6b6f16f74c7
+Nonce.3 = 1e294f3623513ddb233181946d2faaa6
+PersonalisationString.3 = 4f309b8cec06fa3e22a884a11b8f8e2eb0933236782249dec7901e499e32e674
+AdditionalInputA.3 = da447d8c99cc4515812100efbd301b2a5e8a8dc6aa9a3390b3d2d9a870d99ddf
+AdditionalInputB.3 = 0feb97c7df13585e3c6f8fc5c56a7a6c28786a22d950d37688de52be51c9cd93
+Output.3 = 02a27559a3db82206385a701785c6b171f60c5955213b3bb32947512f22af52a5abdaff6991e0d61d2cf7aebdd80e58a4df3584a6fe5fa2180bea156f3b6fe3a669d8c801d0773eb72776c89c7a763f46c35dc7f926d0391d0d8c3bc93935d96f86190fbbf00ab7eb0dd528aae8d68eb5ed8f908260b15dc0071990623964a379fafb69c6beeb470e279293d229e815cfc812a20e5cfb1dfa6507ef524702d47817ad1c31e923404104b676393c42d7f901bc7083f6fca932d6938ef16ce3e89c3731523b111b6fddbd74c45071e307a0f52a0065c9949190565a4132bb4bc3e39a2efda15dbd0da6d8522c1a67b3ef6684941f7a02a3c11a5de15db0a8cbd10
+Entropy.4 = 70657b0fa0580af281788522ec04d2a6980d1181177e89d9e00cc7d66ef37fbd
+Nonce.4 = 8c0df7bb0cdc4999ce71e0ec2c7b87d1
+PersonalisationString.4 = 96ca21e9b6c03712e5f112b2312a4a36a2e3904279568da9f0697e698c9e60c1
+AdditionalInputA.4 = 0737beddfe4e507b0d5bb352a07f8321e6c6a472cd8b389a1e77c01024bc58b7
+AdditionalInputB.4 = 14ca247927ad6026dfc40f4a456a03b2c1b204c3922a974e3db5225d4950915c
+Output.4 = eb8d934496dad16628f56ad87b5a6ca2ad66ec927594f5da74b75b2224361d94f8af30ab750d2bf07120735df04d2ae5a16d24c810ed22fc01e7bd5cd2f69159f232d7ebb611df6a6c4189d75099d2c79b462cc6725c1747dccc7be197d8928400bb802e3fd5dd04e8e5737cac7cc2c4e1ebe477941d586c28dcfc5bf5789d81b4e678bed28723e36b45ab226ba98fd351a734fede3b9e963cdfef80c4d6b27e5997d0300238a6729d10616fa8bc411228a01bc1a512702c2d1e4143521c9105c0e08dcb55e64f790cc52c8fc167db2ccf3ad2430373b5dae868dff163ec5a4d564f5c33349183b973b4551f9aa102c532dc750d45236c7feccfcbfaae589fd7
+Entropy.5 = f22fc6df383c42fe997aed905b7742217f58df9e898f7229a37caeab708a25bb
+Nonce.5 = 3b9d182d4afff9a41166e5e995332a37
+PersonalisationString.5 = 3d6db5e8adee495849e7d36af18818e6dc0d8140ed516d424bc8f1d348e105bb
+AdditionalInputA.5 = 3a8ca1fdd98d6c941bb4cf04f119abd38d194efa428146432765550ce87b5a7e
+AdditionalInputB.5 = 239edfb349a3384bf4d80ae9a1e07973d4e4c0f884147608094768b2702bcfeb
+Output.5 = 565b7c314d03c39e929f7526ebbcb8b70e143fd60efffa77dd4475fc60339a16eba8a4b93e840ff3a45bf09360d0c6aa3fe56c38ebdb8f65c38e3c8b1fe853178d8d5276cb3088496f991be7a2f2ef8c09d3ee0fb1f5b86b3dd7fafb2b244900064e68a48e5f1fd3093f8f1e63417fa970353c8f8d4b9129a55ac4c6b395385b6a74e1356556c27366a58b44e11a030063609b93b5517e12daabd6ebfc78e7044986f92b1da40990f060c206f4ee1b4e76d0ac619d16955e39be3b01b79f1602546b833a76582e0fb4a7704147d8763da3d02945342bec5c10eb85967a9069649be151452fab34f3c75610d0c679d1afa9b5856e772e448483c4c9740cb6a292
+Entropy.6 = 17d0c905f1f330287316e22eb85b1e0001cdd21f88592af248d2cfb12086c00e
+Nonce.6 = 2257cc7a1f5b8cb85fdc76ffdeda8667
+PersonalisationString.6 = d46cc814d7587e15297dc10ccd565775577aa4ec23fe7a61c736600edee11bb2
+AdditionalInputA.6 = 4be737628fc81e811e53110db183dee46c3b5402c733e45da9d8736faac143a1
+AdditionalInputB.6 = 5824fece34f2c6d85315c11104cc26f23fde2380cf6b07ad6085a12d64fe3860
+Output.6 = f9b25d5f4dc7a09165fcbc3b0be5a9e70347cac1a87c7105ce0b1e0cb59d4651ea8386e8424efa6c9c173f9cfdd5595f5ca84a16dda33562cfbe85f26016468381da01d9d019094cc8aa108e1ba907f14a934c19fcfa9e811b16c4e07e403ec18b2d686cf9f68674c7fa598266a317fa54e0ac0df11c1686e94d440cefbed98c95a3b4f3036d1c1b6d43f855cb86c75e20b6c9eac3ec9017d78e2b753627f4f965b4ac8152df6af1af3aff883529f6725a2cf23cbda3fa9b8fedbe38981c75923381b58d3d19409816c489c729da39bf8fec43436b8c256118283e1241b6201d46f823713ca5f35dcf140c3baa0f7ebe8e32807c1ef9b9e59ff1258820f5ba45
+Entropy.7 = 0612f3cf8d441b0fd34d34a5fe1e0b122ee91137e18cc6e7164a3dce286b39a8
+Nonce.7 = c235456348e9992185ceca978af477fc
+PersonalisationString.7 = a23cf118b190327dcce97500bd46dc6c48e0af8a93c6f204a6d56d26cd80ff9a
+AdditionalInputA.7 = c3339994707bd198e382beadfb144ed7cdd9a034df9722f8d8e18d96ebc061f8
+AdditionalInputB.7 = 28b4d1ac3334fb398e407b3fed12a43cb1a89403fdd188e194a2a48da074651f
+Output.7 = f42869964dd52db8e1d470a2c7d54ff3d03abdf39b26b6b715adaa1d8d5fb5b985d03aa44f23fe5e608475091e42adbed861f2e0ee153e56ccf0a51c744658a436c128f44075cc74f3f8ca5c716f89a4e20f424b7d7095285bfafaed89ae6c18e2f0f78af76525bbefd942a49b08e03fae2344701aa1574aa08c1b5a8764d7c47fa1b9e8d66756780f1006bef8e92ae8a678393e4ae028426896eff7c7b10ea9c426409481e7d2df3e0352d4bd066c88c17ade7d2ca1b73a7605425e14f3c697fe01f6c2d5e9304f53d9d1054ecd26d1c5bd8697c4bfeaf1a57c0d3792f926eef76da38a4e5969e5cf29815be920460cb8454bb168811ed38cf7a1503376be1b
+Entropy.8 = d9ccbf184c6579aadc9333f2112767daf22b10ffc25145dc00e243ef45c31f11
+Nonce.8 = 232d0075a9a6ab16e8bc506f27a0813c
+PersonalisationString.8 = c7dc766edc0c8a1b91f29da8bb0428a5c178ed885af5eb1ebfe7143f1fb2c3e6
+AdditionalInputA.8 = 32b043f0f2f36ecab1e8dd14851955ec10ab1074b84bb401ecb6cbef718c3e28
+AdditionalInputB.8 = f0341066b42b23a6a98bb341cd7f736ee8d3f51d95795857607b55d3426a1655
+Output.8 = 8a9ccc445878ab44c766fc84fc19f77d7b512c09cee269c9079352d8a40dbf9bd9c37839aa946e7179532b74df2f8ff62ffe3c93053ddbc5d66a97e97e9bdbcc993af2a5f92cf3c11f10ed8b01e219c89c063f19c8879ae0bd4f35eda9cfce673e6f5f4a4226bb4daafecc2b38c045c954a2d6e27b30a30f9f5810e6f8ee8026a52e89062f1cc47399f44785106f541fcbc059f90f8f41c78ab8bceee776b5446bbce0bb24e2c396814303b3174e40c8af60d23aabce1e541d1087ec8750023c8518d81d12e57da5da198233d783911dd826b45d64ceab2d41143c54318c01c2ed52d25f4abc11dc681d15543213fa9d78e3a35ffed598f6a494f9b89f6d9d24
+Entropy.9 = 6828d746558f104a2b74d4a90d45236bc52e0b776856cb4ef578165c57bf7000
+Nonce.9 = 58c798292768a3feea28bfa7e7e373be
+PersonalisationString.9 = 4306f114141a671c01f5dbe7ac99267898ee44e30045414259c354d7e7511eb8
+AdditionalInputA.9 = ef9b4871ad9b5f378eb34538557d7f0424ef0541354d1cd549c56af59879e842
+AdditionalInputB.9 = f3cdd8e4987d9263e9701dcb51f43227fdd0316a78bd90e7b60acd349aa08132
+Output.9 = f2873c2ff351579cee1ed36247680b57c542c7d9eb969f8d0d537386ec362d9fcab1b54de5c429013a858bfad66c09920a37e15ce7b3402117e1a307e8014e9f9d9db65e59c87869fb9d915b85277f2bfbd59d178e02e9b8a76133e707ca2f82d4dd6d0f18fd97569190c0ce4b5449b215e36da63d4e0652e5a4ee615f5f42d8ceb0eaf4ae983a1b676d5b553da40514a4f0e4d5d4a2a7e48c34de944e0e960abc81cda5d2bae6d25213086f7895a2f1bdbe436ed55956d9965667a96fa1e3c7c63a6b0d6eae05a918c11b80d91241fa19f85ea0b88416a74190e5b60b32e4f1ea1d8a9af016e255c15df02c4263860fa77910d28e673d2339bc12eb7c154590
+Entropy.10 = 326633f5c9927130e63a1722f4ecfbded95ad71e7a6ae93669d3170cfca8a72c
+Nonce.10 = b074eee47fe64fba2adf509f50ffd773
+PersonalisationString.10 = 29eb795e9c01ceb5470e874dcb7261f55b5a9e5b08a3a86031d335da464fd951
+AdditionalInputA.10 = 1c55dab111d49b09628f3e7a9a4794b881045df4145aac551ae69dc1c66ebc14
+AdditionalInputB.10 = 6b5dc65a69884036426d49ff6aa0230307b650beef241a1271b23b075ad2a70e
+Output.10 = 470e25bf2d87e7f8e7a4b2984e19923c1fbc97030818d9bee4115f14851542e0664b0e81990be32706f728ad09b22d2ddf90bb462c161d1c2fa0b6fa751c9c7a510a3f6118d781fdcec82a00be705934d86c87b336747f0a37203e337c0e4f308ad3e30bf13f26925590cd3b153300c2b7e6c99903d0d971fef71ef2f11ac0d3e546d095b71df2a4e033ccabef4704de9edeaadf51df55a7c73bb29cd6ac575314c8a073ab1f3cbf1055e99a86d2b006c4a23438302401917a753e45a5ab327487004402e110edbe6855369574d132307a5dad24f88aab37caaf9d1aa81a298a55fce6cc439d6c940861223800a3aa86fbc601abd53c6afac3bf3743434f926c
+Entropy.11 = 700edb601ee2a466d6d434afe14567fd99dd2be30107da851cff244b13423799
+Nonce.11 = e08da5f8f8aee5c37cbebbc0df72a723
+PersonalisationString.11 = 7b6e7d823f84221158525547a5d8abc64ad2e71b672f569c51bb2d3720ecf5aa
+AdditionalInputA.11 = 30edc33ed40927abd62f108ade73734ea72034183ffd7a69c2f09e1389a1f10b
+AdditionalInputB.11 = a2d137d1dcde4410833f746aae52d2da161aea1812ae722d46a3a977c2e2d844
+Output.11 = 930fc28408876ed64e03948eaf1b8159ab04445a1e1793625350577ca92cf75671a55df0517b6eb965d0f0e88a43863ede7f443d102d3b691ea42146a044ca06cf7a12b3ce0e82975dad6c1e94e7493d97a1d609d07a43179f56d7d741ca023a4d0de8d5ffc14901fc1a3bb0dd5e0532c0b021e07f7c886566387dd67d669026900e3213733b78b36c2076cb56cfa130eb0a5dfb1d6ba89e4ff0ab535a9bbb75f72fccbe2934d12588a589362eaa048e8963565250d4c16bf84b83a45a3ced2d27c01d01b24ba0608cd21cc00209c6df5f3053e14eb024d1bd30ea69b2a36e692bdc354fb4e095f90adb9b5e6dc0bff6017dbb7d00690ecf00cedfc3198e74a4
+Entropy.12 = ee2803b0e9106e30ad1911d830475a5c622b54a9e4fbbf5235ae59ef5b55feca
+Nonce.12 = f44352de645fbf7688dc47a99955a9ae
+PersonalisationString.12 = cf1e33dfff0f3babbcbafdc30c95ee4804ab81ef402ef55a92bd47f07a774bb9
+AdditionalInputA.12 = 04835b5b5bc1a933e743993414db67e8960f16efcda8ca7b614ad831d049e13e
+AdditionalInputB.12 = 7b23a049ee3ef38f6c4d03a7a04ee239b57037a9d4589152e068816b8a2d4b2e
+Output.12 = 407d89cc346d33c10238c2327213178e20ef9ac6508ee61881896d2c6bf176326e3850368ef53427e0c950042c2e17f9ce4b2b3fbf529f4ca71440f43522bd029fc08fc23f534e3446b098384bb4d0882b25f4ac8e8757c1f1ddc9a8f2991f69a4e8eea4fbab70929283deaef3c53e32a2655b24ee209fd4afd4f558f40efe6affff2e88d0981e155ab0d78e5170b11e4fa84d0772ece236d064e79b977c91899e053b80b26a9417175d308e8135b9171043536318ef2b58ca60203d729972b469b41acaabb1d4179c50c8a9e3eb934bfbec4834eeda418abaef23907f1267b686df17f179b8ca52aa1b2e424cf5ef862fb08ba30c76e082681c81489acb5f35
+Entropy.13 = 8845a9a3f7d7fe95ce6f6648a7fe143e216c6f922ba8725de32743d4996dcbcc
+Nonce.13 = 6b5b4a986babde808118d29f0437c610
+PersonalisationString.13 = 7ed80aa920d147c542e42b605aab9c7b92a3c65ece17bc72a4680df6e16cf86b
+AdditionalInputA.13 = a7deab3a6c01539fced6110fe3579bdc19cc9594e587b89a5cfdd358c5793852
+AdditionalInputB.13 = a946a020b4b3d2fc452eac9df0a646b34778e2b3f455121a67d6c47ce947632e
+Output.13 = fa85f06074bce30e122de1d723ca36fb2759e619777b4b555933adbe5e31d9190355d831426f640362dc797180ef9d95727d37c03f499a2d97bbe56c23ad3be8d1f022c0aa40f7be92c0f3853a9607ecf1721e24d1f944ff437cd300b6c36954a0b0edc270383215ee61039dfbc5bee9f0f31cce5597126a5296e06342a9b95f44bc83501e3c91dbb572b42f120991903e5e2bc7d970ce25f3a8e55e554d82242eba3305706d26e54c5095948240ac3806a9a24c7420097d0902ccf362a433c0a5f87a838f025c67e110edc569157216f455f51dc87622cbffc9cfd4f925c967bc0f70144319f555070823dec3b1a34b310c79ced174af4f08f12eefb51f9627
+Entropy.14 = b148b317a268628f04c9a87a0ac5f91498b8020f4e4835720c1a3cc07b050fa2
+Nonce.14 = 2f35e5b622aeefe75605c2274ec8c696
+PersonalisationString.14 = fc527a2f16b53c513f94855b35cea6090c303dcc642e98ed5f323aba0f35fa27
+AdditionalInputA.14 = 2cc9f137fcd8c2d526d70093fe11f90a0a36bc9764a4c5609072e181a2494516
+AdditionalInputB.14 = e40361245b91880e308fb777c28bbfaea5982e45fecb7757bb1c9de2df9dc612
+Output.14 = 66ad048b4d2d003223c64dd9827cc22ed3ec8fcb61209d199619177592e9b89226be30b1930bdd749f30ed09da52abaa2e599afaf91903e7a2b59ffb8fd470e6604485a27c200d375feff621118595a7a3057b7e31eadc0687b1008c3cb2c7435a5704b1a1a6a3487d60fd14793c31486af765ce2ce182de88112445dd5ff11b256cfda07018b95f97edbab4e4c39ca097c42f9dce80cd3f32677f3c224a86b315d02e377dca8f3785e9748ffdbe3fcaa3b0c6bf001b63b57426836358e9b315c6718e0b74fb82b9bf3df700a641ab9411d1b9fba42309a84bef67a14204f3160ed16a5497fe211aa1f5d3ae4b858b6d445f1d094543d0107ce04ef1d1ba33ab
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 65568162700f22ac868a504110fa466c70cfe0e7c32f1451
+Nonce.0 = 69545e871b89c7b3f95885eb
+Output.0 = 588572c2e4f0d6c7077d2b9eb593687ca92c86e5a9729505fcff52adfcf8a5eb850b910b985df10299bfe7434f3b6b7af92a3edaed732751cdb421c38431e2763afc6799eb61e176f9f20945870680ff8b62484378d3a7fd7d29202e5d371785d68fe399d5f600f34517fcccadf58937
+Entropy.1 = 6d8db826a6f0ed60070b934ee06e8bccf3f9c6cdc8a293d1
+Nonce.1 = 20f2e84ef04067e356118b8e
+Output.1 = efac8a6fa5372ac76a9f3dd3f6e39ff442c3efeaf85fbc446a4421d2b7c09f4fee0e7d74883cb0b9b95e810818506cbf4f553f6f8485756b823e10fd78f1704adc546243346a2148a3dba769b826002ffa74dd1f0bf2da571ca65838a582801c7b407b73526532c4dd4c01916c6ff7ab
+Entropy.2 = 41d983db9c26d36697da9ab03389b5ac45defae909956590
+Nonce.2 = 9ce16c8ba7e65d061b3cd4e2
+Output.2 = 1108c6cbc9227cfe9f1bc71d5e5a62df032a8bc8f96afd34ad4348254263f9528b3a564cce8cc3773841e25652d415c8c723013e392490ad8b8a4af7b052a537114afa5b7b34d067fac674f8d9fefaea7626ca04dc4025d49a55ff3821502bad6ae644e96d6c16beed3a209ee4f81371
+Entropy.3 = c711979849f2ac221e09a8d583fc8aea14cbed3bc3610ea2
+Nonce.3 = 662b94e01e557db42d04163c
+Output.3 = 8ef303d36fd31070f836af719fc36c34df0de52ee760261a909bd6a1ff80f4be8be5b9ac8f6c5cdf2f8cd9624d92461bd8c9306931c537162d4bcd81632b5d9d611c7b5eaa4c422249940bd7daac90c2a5fef9e2b7198583a85fe521740049a2a900f836c5086b131630938b71389103
+Entropy.4 = 9e32307f0307ddba166b20e1adadd1d9209678a84c0cc42d
+Nonce.4 = d5672f24c209be66d596e110
+Output.4 = 7929d9a6a925693f1c363930e600b41e21af13c58b3e7bd4badaec4e4563563a3788165ca4c2965242c8212fe90a62948e727349acb4131f60b66e9c9a965ffe72e82df4d74c49b23c7224535535bdff4fd42bf341204fb3f5acf617f3185be4a9e49185eacc44c0b290fd2b5155dfb4
+Entropy.5 = e548d22a097e1d2c32633f2fbc3b42d4fd8218f1d5f973da
+Nonce.5 = edbee16768a4b4e54c0cfec6
+Output.5 = a1927d0652ab1ffccccac434b5d22dba891622c75f4e383336ad180416adfbd68722ed6f63c0f6b34a2a427a87dd62f1df139abe2a0f48e80dd9aca0c6a6eaaf746a89bf965522c6f91b7e653a2c0cbf12fec6a1288abd4997c85682a500db0a6f7ebe98c9f0e8a5b7a00811edded092
+Entropy.6 = 34912165f33d3b3c63dddcd17d0bf5a0c789b54cc5abfaa2
+Nonce.6 = a1fdc19ec11766bce95221a6
+Output.6 = 3f96e8dd99851979743c0caf99e40c9eb604803b45a2457e331d4a688950912888abfa23ae15f233b5648180d7d89eefe49a0ee8e6caeb7c21fef7615bea2640c48d5441acfd6c883d8bd0bc47dd5a5f1a1b9e4ab1b1c2e963418b35bc4bc994d1edbd40719094800847f4e7407c89d9
+Entropy.7 = 00eaae3aab4866a4198aafc76d7822bbe92563770df281db
+Nonce.7 = 7e2257ebb3294ce85410a7ba
+Output.7 = 72e97d7dab6afe13df5c66822a57b80fa651721c83efb97ebaba112ac7c632a9239fc19f707a2a8871671eb60df465afc495d099bdda21ec117ed3c7e46316b0d9d9fd443f8b2bb3ddb2753338b7627ed9ee5c9f0ad02174dfd7e1c704577214ba1103d3ad97c40bb34458cd10c11b5a
+Entropy.8 = a87af23ab0a9e5b9d85b467eaf313a6fd264120f9c46e4e5
+Nonce.8 = 39ef754427d169b779cf926a
+Output.8 = f1bf2596fe551f4370a0adc27855a784bdd953746b892ec1053ea1615b304ad2bd2e57b150f167b0edfef2aeeb0b821107588e6fac002e664b71cafb79ae5e30d0f9fcfb22d96e5d205ae485fa6ebc6d3892fd9617c71f1b028787524b3e528c0c9e6b7e157f91585513fe061fdef7fa
+Entropy.9 = e767b88e1f3309b52d786742fa9158f34883ef6995051eb7
+Nonce.9 = 679fe80305cd357589106435
+Output.9 = 4f94f91f14844aa0f06d1126bd3e54ca7e0e353970c0fc77f39391b9400aed70471bd0bf9f458914658792c26c923d045d85b1618bc70155e665d23f441f2e01cf64094f3564a8893a07c5f1f9d1f7a904ed059d554c8561e869f59a0d89e25c770e2623b5ad793dc040a7760abae6a9
+Entropy.10 = 627a82e304483ce645b59717deabb782f03115ce7513539d
+Nonce.10 = 50360b296b8493afa8550710
+Output.10 = 034be2b6b71aa11d39e52970dae6ca3fbe6076d5915039e660f4def6da51bfbfe22864c88fc4e86e5f1a4b0d4628de7659f4238ec93d301b3d1cbde172bf675fb6479a463782e5691abacb4c9c1bde65a525d44ac986cbc94f0b229e76e524fb8c1790583a41f3ff8cdc59e414cdfcc7
+Entropy.11 = 0dd73d1481466f7f6feb9fa43aa2f9c53e1a102056072830
+Nonce.11 = 6c0a28a9866f0fe64bcc6aa0
+Output.11 = e9a42f4c90c3f190c41dd90cd26abf226c1da39529b8fb2680f2b65340b375c6753eab97ac42f65e71a5a92a8f08857bba3b13b06cb0686e4e62a3a80080867bbef67fde793de451adfff6e60434ebad8272d2d14cfe4f178d811e62eb45e53e5caade08c1db8c6f2d9133b5bd8aad9d
+Entropy.12 = e239c344ee1bddf16d0e01b644e35729a88aec9330c37563
+Nonce.12 = 82760380668b3e1d1b0f5536
+Output.12 = 1b349479778dc46eb4511acb435a31344e4a62d596b61f5127bf93be7f1fe83db61907e4f692305c6b9bd45717e63c7bdc787f2153171c261787f980ef310bd122e68f2ecbf57aa07fc13f5f97771a05d71d98af6167471a9fe55f58bbbff0e019d683fbd9aabaa987ba5256c857b770
+Entropy.13 = b67ad5d53b269f1ffbd6cb0f0c2e10dbd71ea4ffd5cc02dc
+Nonce.13 = 7b18284cbad366d4023e0e5a
+Output.13 = d632a5f015ceb58e7e56985f6367043828ba0422070d9a7a1ad8b5738576356f998351b571b260965d79c2dec654024152452656788ce6cb5fa79acf86deab8966f7abe500c6667ba9b514a8918524854138af5f1c2383cb70ddddb0461561076ec93c02bd1f464e93d2e188a5048084
+Entropy.14 = 42623115c0a43edeab391ee8ac84c2b3b1bebba8a6040cd1
+Nonce.14 = b79f5c377be52381210c1c2c
+Output.14 = a59dcfa9585b1080cee51ee493fabc22394ccd0949e3a4d4e5b8d60e1137288d20f65e7f1ddc1345869e1af62562d6c11044bb65d11dc0071a04a2cd0eab76718ec9a67d4482acbc82ac27685b98c50064b41e120a35e5ca57ed1bed6963fdd03e26865ddd3217d67cdddbc990c5833c
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = b55e3470142e762ff71ab8fc6b89a0215549a6795f89e748
+Nonce.0 = e933397c8f8c79625e841866
+AdditionalInputA.0 = 631fc318e5253b9209c0ab0407cf4cd9fe3e860e90b8572b
+AdditionalInputB.0 = cdc57096d1496ab33535f3bbde4e4986b362c8fabed73e99
+Output.0 = 02a22fe1f67b1924249b5bef0ce52878e69e90184d3a1a85d82cb99eaf59d9289b3238bf7522ac8b0ff2b7bcfe154dddc30d0a89976a97af2338f6faf67ca4c5d289ea631a9fb407a951b64fcb7e9fb18663fe7ed41a78b4f99b53b84c403caf2adff130807ee7d9794fcec29f5e2754
+Entropy.1 = bc9814e09d2e06ea98d6c0862ccf77e72fa53f3f18024990
+Nonce.1 = 2e50de236077b8b05ef4a18f
+AdditionalInputA.1 = 8eb7fb4022d2967ccc71ab7dc1b3df165e9bfb281d49afeb
+AdditionalInputB.1 = 756a83929b4ca38ad8df0547a6ca35ee491f2b4eb0c73e86
+Output.1 = 8c42c74c4514ee3db2138c667b542044cb1f1eb3953214396788882381bca385063f8094ce0a63b72b6d3f5e6fe0cf3c15700bbba97c118320ff914f874aaa99616111e44156041a233547d5641ab0b179e525ddd34c4559206c0720262217fe00f8a463d5bf578b10b232f4c1be81e1
+Entropy.2 = 9d9edb3e9095c40e9d9e366d4c91191d4140ccd51f9bf1b2
+Nonce.2 = 4e641bdca5709c4feb796651
+AdditionalInputA.2 = 492d9261f80bcc25cb136d1a64c1d5926e22b7833ab05b51
+AdditionalInputB.2 = 67f33cdb597cd3a4f0e4e6c3a089d2ed7cea0fdf62939413
+Output.2 = 61b483ec28add6398f831c1974d758dc6f2302ccc902cf60b3c78c31f9b299c26b267ec6d62434d57fef382db20603b2587ee2e3ec8f198945a973e1f5549fabbd17490f85f3a6e12e91c1c5a7e2d445a75f06864d845e09ae7dec761d55ff04050e839e6e99df065cc63959c3406aee
+Entropy.3 = 42618edd49528c5112fe084d5d18caeb497e7b0e80f8a2af
+Nonce.3 = 5eef8fe50058d324e9ffbbfb
+AdditionalInputA.3 = 227e3bac9a8cb304ece74d082c8c917fe6182402172bb257
+AdditionalInputB.3 = 9f2e9590288b9eeb9c8d947004ba552ca848e77973d46edf
+Output.3 = 1187ddbada9c20d2d03cb3f934300640db0dac05ce7e374921ded35a6cbc32c3f561ae5d86d68fa2b0d3c17aa5c4c1fc6b4290ecb287f8b7f0b8f7dffb02b3004931c50afdaa6e2d74c0493c8a8a9404be2b3bc8162026a969366e9d9c00b11c733a848fb307a4865b079bc536a6ec41
+Entropy.4 = 54f4c766566187862b8afbcbcc5d93d6de222ec42b4549c1
+Nonce.4 = 7928cb7432fb030624f36592
+AdditionalInputA.4 = 24ca482d7d8c041cfc0a86dd76300b3086b24e7b42d3c3ec
+AdditionalInputB.4 = d89729f3b5c2a3f7ee7e338e7c419c435bfcb1165258fe8c
+Output.4 = 6728aa895b04ccb81506c2fc499878fd99868731997b3c6511dc14cd8dac8354159d9dfaf84e3397978e8d70a8c0bb4ac1d8c552f1efd6412bba7630dc9321ca0c59f6ff8c8016bb60737fbf09e380aad086486ed781288af3c405f77fa6f5ef36787532b6f2562a5a713575902c30de
+Entropy.5 = 71a54f95b42285685135182f24ef5825cb428270b2891611
+Nonce.5 = ef52023107e1f8a156ece40f
+AdditionalInputA.5 = eba552b12d50fe79d6e3d626b6ac081569560936139dd2e2
+AdditionalInputB.5 = 94b2fd736cef340fc301dfb4e38d2566bc3abf615f5658b7
+Output.5 = b5e8c92a1fa4c514088a69b6713b5403d4e8ef3de251e34fdc480e1df8b518a66d8dd0aaaa883836bb1dd9fdeec4fa39fb90ed3b24aa0d2629cddd0d496a3dfa8361861ceeb1f94971e0b69b618016f5272bb5aa9b782520852f4c0429df844d582e88563b2dc7bdcdf84c34920875a0
+Entropy.6 = e73656be01a680ca8df3fbd5a49048fcfc132f3a6140f3a0
+Nonce.6 = 4bef14e0e7f9017d287bbe29
+AdditionalInputA.6 = e6b052eee311c8489af2ace4f288ccb9d94f521f39efd058
+AdditionalInputB.6 = 2d6676f23d37b3175600c17096de8f13a56b87c8a9521433
+Output.6 = a108278523eb0fb1658b88e71e79045fc939e06093c6045c6adad51794ba36ed450b766a30ed7f94badff13c4ed6e309f0bc4cca9d8a3e889d814737a0e7538c97e537775b211f6b8697b99900e6d4ccbba0c95859203c068812a6047d2bb8cfd5c5fbc594f1dc1fc6b9d3aed56116c8
+Entropy.7 = fd1b1b4716558c3f2feccd9f8b7218f856df024d93cfce91
+Nonce.7 = 272092313b6d263b457696cc
+AdditionalInputA.7 = 8d70f911e9f2dcca2c486ec262fc6f951b332dc5f887a67c
+AdditionalInputB.7 = 02aec2b3625743c943a4403ef38165503c71cde08f92d622
+Output.7 = 91aea12037d2053d0a400c16ef315c56cfa8c1a0fb23e930b0ea394ca79d408d260001def0f28706deae206f22f0cfb2420f82156c583506898c40eea7a2ea982adc3507283bfc144d4c8f98bf599cad0d865870fa22c20d754bf15cee54f005f0f99e90aabd0ff32e20ca41ec62d966
+Entropy.8 = 8e78c43c92dc84a8d09237c1918f4235ebb5b505087f77a4
+Nonce.8 = 1560cd40c4e4fc3a3f43f844
+AdditionalInputA.8 = acd7dcaef11a82b3ac1ed2c90c6fe2be152ac658e6007233
+AdditionalInputB.8 = 6122757537de9332f3b11ecfe79540b0b7d70c299023b51f
+Output.8 = 0b33705c872cf1ed03fb593c6c619386e1a0def84e3530fba3381c57acb8e1a9121ad4a9bd440e0ad5b3b65a178faf7d4f61c07013a433bf58177bc90cfb79d6c39ef05395cc504605cd756a4c4685975ce9467c387c8393d97c38c6542df9acbfa72b190fa3de3c72df8676ed02ca5c
+Entropy.9 = 84b437cc8142231114ea6a48a25dbcea6f225595c9493572
+Nonce.9 = dc914e4fd5a050cd2140cb1b
+AdditionalInputA.9 = f102c1f4039f488b87e54e58630ebf74225774bf09a24e3e
+AdditionalInputB.9 = 32e86479c34048921de1fa65745736ab235907693f16070e
+Output.9 = 1a77469f769034a462a604c695a806daba0764ecc121e4f3af6cab63eac9a4baca1bd4d01459f91ed5e83450a60e209dfc87f00b755f82c7122e766b96ed834f73d9ee03eb3236b7900a309b23ee19e1fd848b354c90dc78cd801b2ff9dcf08e204b51c879e211602e1cc0bf1aabd565
+Entropy.10 = 0a95b55c4e044a4fff1e446cac4517d150fb5f0ca4985f5a
+Nonce.10 = 8c216bdd76cb93e2ec8919f3
+AdditionalInputA.10 = dc2cba72c596062c8d5f633d9c4a0022292e7e72521de379
+AdditionalInputB.10 = aceff54c3683d1afac85b7110b71434110ac45bb3d42bc01
+Output.10 = ed09fb81d6a685a4b2999a18601aa6aa1818fd87efc768ef9eee05ab74f5db6e2f06bc051e9761960e3d6d48803fb70657fbce16640b963db614889c9d37dceb625d5ddfc3c5e23a5897a26c0c868053399bddedccdd6c77b12e245c5e48501d0c5c01cd4e81971e05e55042a1c94508
+Entropy.11 = 9ba456c2abf79c4eef4dede5142cdf58125601ff19d94ee9
+Nonce.11 = cb2c3d3ad6b21a06daa1f34c
+AdditionalInputA.11 = 8b4e394185a98dba41c2705dc3cde92d24fd01610e31e0fa
+AdditionalInputB.11 = f369c32e59d29c553ccb3a787a8842cb2562a3707e08af0d
+Output.11 = 0105878f5a465186ef059664470d62c333fa7aa3fe989d0f566f8cbbec0d4ca826d3c705c6237eb4d19559bd50df9c05de653c6b00af0be19acdd28429afb34709a86b67d6bd4ca63f293a41afa0acfba9d9af5536b84abda813adba8415e4e976e8feaa2859fbb24976e745a2650885
+Entropy.12 = 5854c32b8e6f88aa3e976f1b4eb1f94096ff30302d8bdc60
+Nonce.12 = 5cd9268b9f3d7c64c7787e06
+AdditionalInputA.12 = d5c9ed503f84c9946cb8f3df3c5205145d4ae6151a7db8fa
+AdditionalInputB.12 = 2e5791e204f65f9ea242843805da376ec67db17442a5d55a
+Output.12 = 65dae33b88a5fb3d0ea7f87df6b5f4ea8bfe41ee384d6708483bb0d28ab96539a5b2b031221cf5277616672772c993582a08c728d82d521fc126b5c12cc45e77f2613fcd7992b2e88d8e656d0920a23213568a91e400b52b1d992f9e1b6bd34120c2919882d9fd8b8e328c9e85a14d80
+Entropy.13 = 9e57e91ebc17ef7c42d954f8f6582176390e092e929d89f1
+Nonce.13 = e2931e8389dfc7ea35d32d60
+AdditionalInputA.13 = 8f8fde3f8cd18ec59bcff6b84a4974f1f021496f63289d92
+AdditionalInputB.13 = fcf8852764ba91a78cdb36de3e3a73e4b726bbc4665e208b
+Output.13 = 8902f1c4ac2db8d9d7db8aa089bb991acbb791845c4bb89d5fe994c75818a2a86360e251480fda2fef8584e935814a2c2de90d6cc421a8199b688b7209344aa1e5eb61a8b14a712dbd3fa4a63a09d3da7ec72507aa1297947a74f1e28e4fb5628ae848fbb05c096634d59f1498fbd8a6
+Entropy.14 = a02d9c0659ec1472f6a1e47df04cd12b8e8eb9a1e877686f
+Nonce.14 = 81ad7db03a1305fe7992796a
+AdditionalInputA.14 = 450a2109e7d83a3ab2e628ab35af4dce8ce7205de7c5f365
+AdditionalInputB.14 = 60d0ce5e11413c321535d849da56c3d9bf6222a3d2cf77e9
+Output.14 = 27397574a1ad91ef6f332c954c0d5802cb9c90926ab05c116586995bd795a2f1b4706487da86282e33d0b44dcb7a58c8c4a2874ed4646a1e963b7d26b62e0a5e0a5bb60ec6e07ea6b7b7fe1194c3ca4371736e595707ca7fb56bc924089e66b137c47f9dde74b5de3687aebc2f5c2a39
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 2f0af7cdf5e627402e65fa67975754b54b02ffe18ac2bfdc
+Nonce.0 = a77bf219dc5379a37a99c715
+PersonalisationString.0 = ed3b70e30ba4e29c14c6f5d0b14e898173ed519f38a8f76c
+Output.0 = ddbd262c7cb9c049d12057801e21a32408db3978d1b88bce0dbdd205bdb89da0293960d243047796884ac28514d523c5d07210567a351366639f79f9ddeabfc06630a14ed6df9dfdff62e82a79a59ec619598559053df328bf5921aa3e21f87400612cbb52a6c3cc56d3e0c36c784a58
+Entropy.1 = 72f987de64d4e20f09a599b180e1513c8488e21c7499c610
+Nonce.1 = 77ec128a5eae089e9d10eb74
+PersonalisationString.1 = ca9060a3a37665c26274537d270e4bb8affd076ab64f48c4
+Output.1 = 6bff81ece61034e05b84ee46518c0cdf3f6cbe4d6e10d1834cb0def74c9528b15acdb03f8749ac9b76886fef8c2f8b4f01818ae217d66dce7855b3785ba479a591b93e81c4456f6ab7f198159541211d8391f7e437c8867c247e98c27a349807213327ac0ebc79ff6ca5b720ba3c655d
+Entropy.2 = bb684cc81ae4bc31ed11a7c137e36edde3841ee8332099b4
+Nonce.2 = a95a1834cca4759176498163
+PersonalisationString.2 = 6ece01ad5600c194873294b82601526425e38b0d2e41abc0
+Output.2 = fbae71283f422550f0f567d6ee6850ed1a394f4e6870707fbca4ec24449d4b8be9fe72a5e0b1d87be1c8b4c89b8d056a04d6b196504b61d470892e294339531dcb65b0c8b7c85e55f9654ea01b3bb6f9d46cf70375988dd9a292999104b7848b9490ab5da31a4a1bdac248c4ff239e25
+Entropy.3 = 724317287fc41a2c6ef20eb466fbd707cd0018ddee71c95d
+Nonce.3 = 283561a4b7e8aa80f83351af
+PersonalisationString.3 = dec43db3496be4765f5a0e305a880c846b0a9e699a7d198a
+Output.3 = 45e20c24122aba282bcf342a2fa42dc272ba3fa90aa8c7342118ebd0bd59dba2001d79f4f49574cc807e51fe6bf59bdd0b81191d122dbe521055e11e4729430d14553d0390176edac67a15a4cda0d2164063fe5570560e2c1d8099a255afbe77b218ad2172d53e0b7f9af3991120f9e7
+Entropy.4 = 9e5a9a30661dee3b312c6239b68fe33c00348d169aa101ab
+Nonce.4 = b7c24e79f475ae0ac0682ab8
+PersonalisationString.4 = 42be159ead7265245de53b7bca0c1592bdd8927448eba930
+Output.4 = fc6fa5b9f0aecf616f59645652626b3057841605264e2f34de81d771b44f47b6e943aae80412f2d3732bb4fdf09cc1a935669d92714fe0a2ac3fc05581724ab9bfe8f5a5b505413ea6d48a7bc1f7efc3064c1752e32d149f05b56a81d4a0065a997a98377c772cf3e7d097829bfb358a
+Entropy.5 = f2fafffafbe4147b41a25026638cb7c2551a19b95c37a1c5
+Nonce.5 = 3caf68f7be4c8d177cc12c7b
+PersonalisationString.5 = 1bacac297e2cb2dc292247c038e30f1c62714c35c33b6c23
+Output.5 = 89088f1b2c2c2bd4375455a8a395ad657515d7ca8172ee2e5eaa3b02a86fd39fba00daf2906ea83485c8b21e6776f8cf379a70ea1cd83090e6257baf34a4d2580cce4f884b49e5fdf5d1c43713e42a3afc40971108ddc9b83d217bd9fcb7ac99e1f002285ee6c438e71420f75c45f444
+Entropy.6 = 933fad2d86855f427949b567231b0718001375e08a774df7
+Nonce.6 = fb878fc9bb993a44aefb211a
+PersonalisationString.6 = bf76e3e3097433f46348ef46bbc74d1629870884a7cbd905
+Output.6 = df59e6ca711d1b9ae21523058b3a0d59aa8aebf3d233d615d7e2eb85bf015936b3970f7037714af092e7310c25bae280784c51d11be2c29909041139aef75e1fde2df87879b11a62214011f967a1cfb44abe4bd47bb0cb18fd54673d3ff52e6a2fd480367e6123dce2af3e55f1c04041
+Entropy.7 = 186d0b34e0bcbb0413a5b6bec4fba5e9de5972289e978af1
+Nonce.7 = 8fc32990df17fe63d69d5dc2
+PersonalisationString.7 = a56e6121891194848aec57e05e2d03552fcf497d688da69a
+Output.7 = 5e2c291a793e5e2f4fd9305b104f41379f30600dd4c536a0b4aff9d0d7d5e98587a5f042e44d396c8e002b89bbf263ad6844b967da48490a566486d2fb07f6086384ca3e4116fc3b279571fabeb3c6de5489d2421540ce3702d84c6f390519149b2ec29c8a98f501f5838872671b871b
+Entropy.8 = ed30a0ff85b7850e00bd50b10cb25322ae463fe08916158a
+Nonce.8 = 9aa741c4faa9bd8150d12614
+PersonalisationString.8 = e138f0bff72f7e1192dddb3e5f0bb36c49cf1335941df9fc
+Output.8 = bb1546b07894dbdb7eedac4487a84c08ffed37d1183e8f9f18616609a1c0aefae244f740249e930c9f66f8c16ee3f5a58c323df5bf0b58bb020c7e903d06a6c1af96066da1b3e744bcfa3445c99bb3c3edc6e832001a70773dffc5dbe001bfdaf3b3987a6dbe905acf7f15c9228188d5
+Entropy.9 = eafb4ead0744a60ec5349c4f6c997afd9410a3510513b821
+Nonce.9 = 6b236aa2e650229561cba5f4
+PersonalisationString.9 = c6d3a51e61733a124d4580515cbfe48214f6538862f3cee4
+Output.9 = 0282a5b8cf8a2895bee135ded99ecd62f9f82badc61cf5d1b98850693e920caff4aaac69667d2c2d705cc818fb0ce7c7a87b289eab60d7a1f75dc963b6f0b2badea43b75f1df470dd540a7eee5edb082320a9799b3863e873eca71287c50f01743dd46a3cbb8bd50b292e0e48e1e33d0
+Entropy.10 = 3251085c799a617933c43263559d4079bab2066c12c175ac
+Nonce.10 = f876fc6367bb50e29a65ae27
+PersonalisationString.10 = 4ea8910480e2f10f01322173d4bf56e78fd28e5a5ea76dce
+Output.10 = 0db26f82dc278cdfe28018720a21b08f054205022819cf509bcab48726eabf2333208d06604b0ec58e75c0019cc0db64dfd51d42e4652b062f97402c5c9e97be30258ac93cce34f5eb72b46b8ac0e1463a4f91354ef3a0e728e2553bba05f483652ca09f3cc760afdd32887d8281e4c2
+Entropy.11 = bffe08de3c6ada50493bf7710c4f76901b29d4f5085e75d8
+Nonce.11 = 9fe7b08be59ea8f984f7bb22
+PersonalisationString.11 = 50c5baeb68259df26e9393376015446fa64f13e53ef99802
+Output.11 = 0405a18d3c876fb3d492096e55ab18f2c2d871f6cf877d6aaac4f0b10f7ec94d1f0fde299b1fe20a93b7bf5b5cee8afb8311c7af0f590f9210dc93ab2ffd5be8afb6917bdd54fc8bb829c68065b02394b3e14c91cb6d45727d09225156d4d74aed091d349784193b26504977baf8968a
+Entropy.12 = baedf1669fb2adad3cf4dc057f165445f88dc2ad8d10b0fc
+Nonce.12 = a06e451ab4aa19365f6593ac
+PersonalisationString.12 = 96ddb2bafaaff6992a320c37ba30e6775cb4968791f0da2d
+Output.12 = 0b4bcd441f192f1497a435b12153a52d3d3a27adcffd87bf366de3d1f7fc2909091eeacbcd8b3bd7b110a410cdd24e70eb7b993b72fe69e606c9e67ea7fe1e75ddf4f2d8833e79914d1cfc4b2f9d75e4f251980b2e99460bb9026b8c1021dca83f7396aca5be746515ee8476aedddf33
+Entropy.13 = 7d829378240e77befd623cc191b42c0353dbad49556b6868
+Nonce.13 = ff36e29ff50e871aa2c219d6
+PersonalisationString.13 = 418df77501e64240b3af94b01e623d3c1dbc04cfe89ef1bc
+Output.13 = 57743e47cc9d88534cbf28dfa195f6080d73b5fb202382cb2ada100f3522fa89f8b0b1639ca7229fa7c44ab0dda3a064ab217f0793027bc88d119ff056d66558c7bc63db483703056c01bc73986ef5854c265f5d2894aa12cb684773008f51ddf761119dbcb8376fb1f3540200fb0916
+Entropy.14 = 65b70b238a1a7107b83c1b9f1270bf1ab4ab454690f3333f
+Nonce.14 = f2435f70e075f8044d4235cb
+PersonalisationString.14 = 80fa0ec5a3a1b46cd639ae19c137239ba8113db33984c593
+Output.14 = e547f6d8cd665204f8ebf6d64ecaa23fcc59c1682eab3190bc76ad4981d68810833f1212965def4868883529c0bae4a2345da6a0e6a7e766d16022c6f371db8ad089d9227e3a85168d080c3ff2bdd604e7f8404a16268bd66d70f5fb164cee60f1af97bdb6e1d72059d7028a13ec83f5
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 70ea93c46d246261c8366308c94287b93389c605bdb2c5fa
+Nonce.0 = d5d72ffa9a6a5f38e93161f5
+PersonalisationString.0 = 765da1cef5942bba3bd579a2db5bc213a501742de91d3d3c
+AdditionalInputA.0 = 3160991497bd6c5316bace61d657f37e1c6d103a81913203
+AdditionalInputB.0 = 81d443646e46fa55f989aca376096483ec90362a2c90eabd
+Output.0 = ed197b67f433ccfc6edcd35202d923f3843291ab8b061843bee6af02e3e29d6fc923b12da4810254ac8057a85a976488f805f7c3e46f7964a7aee89e77fca18f9c98d3fc0f4fb2a64d187f2e822f0e380d5e4acd2add9e261564f2822b8880c1c0ef196d8eeeaeb56fddd46467fc751b
+Entropy.1 = 191722a32fe5636431da95d41bb792208bbba46d715d8be8
+Nonce.1 = 97c0bd36f3358421f22801d7
+PersonalisationString.1 = ce647b5b3aee4ec33c7583e22479856648a1fbc1bcf86289
+AdditionalInputA.1 = 0332e1a8f84ed7015365c26563638d2bb4c47161a6deae02
+AdditionalInputB.1 = bbc790be9694ff64fcf5b10dbed5bc6b03060917f7020a0c
+Output.1 = 1960ae5703637c23d052b73d389e25f1490423bace59c8e0416cf39fabd2370ab973c8dc379a20577c8348be0d98d55031a896a38eeb94a01aa253b9f0d7b91b00bb411615380ae19a3e662de599e49f195994a63e78fdc5f6e38cc8152a847a4224e6da14c576a585bd719cd284b417
+Entropy.2 = c31060b4557ee77406e4072d35725d82bd47158271975bf0
+Nonce.2 = 9f96a7c91a4e08382147ede4
+PersonalisationString.2 = 9cac48c65deb8f4ac3e45dcbeb5e096b296b341ae0ab8818
+AdditionalInputA.2 = db7841b95c43a7aa16960dd1d5d2bb29bed28e5e96a24d88
+AdditionalInputB.2 = e4c6e328bff28c3b7c65167fc46cd9460dac1286f4d4f712
+Output.2 = a9ec99ece87762e3548c23d98157bfb424e32519bb01752e3e520b226462dfb8d848c4784c97e5e227b4ee63fed4805ceb0ab75e1c31c41b0d012cdd8047da548f8a2977cb31f031929ce55f70b2b3d6cd6df5f3662bf5c9a76d82111dd8b22122386fcc7bf9f72f39e5417cd16616dd
+Entropy.3 = 429b62cffa82e27ab7802278a499a2a50c8f1c9575766538
+Nonce.3 = da3569ad5a22189668b51f12
+PersonalisationString.3 = bc56e97493efa939c391971758c3f01264a9385d7b6a070d
+AdditionalInputA.3 = ea52392b9a6b5504d689a9ae8ce1cea907248eeb3c2c9291
+AdditionalInputB.3 = c7f1935eab7fc756ab2b35b5d60bf1efe5ffaaea76f587b7
+Output.3 = c5dbae5d9c88bf1546be5794abb88b7612519a7449fd9e62cdd408f108ec48a716b6f8a4cc2d1d08afb538fb47693af8086b1e4ff3221e8d92810677e768ad4698d21acf0d3a1c06370a4e14387b5d19284d71cbce056a0949b0ad36a4539aa600732628eac8e4bdf19a9e6cd8c9a5f5
+Entropy.4 = 9ae60697d0fa8af9f2fc4bff94d1db77a9dd509bf5c59055
+Nonce.4 = cd33fdd2a73139107fd25dd2
+PersonalisationString.4 = 91b0dab516cefeb8dee71d2247873ee53e8d6ac37c1e0a83
+AdditionalInputA.4 = 5d6db98bece27d9a0e5141904ec872789dd9cfb10ac8d6e4
+AdditionalInputB.4 = 1e15c4628514275e94f889d7e2509e71b09d0e0cb0a50719
+Output.4 = 7d508737e0fc573616d71fc98f1ed389850f85c9720af22294fb51426202191e5cc54c801f32924689abbbae69b9e422570518e3a1b1c50205de3484644ee5ea5a1eacac33f54361af89332bbcaee6440dc844f0b40e8e6f964e66b838e9a2d56cd1cf1a878308b731224e5bb986231c
+Entropy.5 = d28aa86734ea726aad6b5d983ea99d3ec486ea11f7c0eb6e
+Nonce.5 = aff80a364132cff620fc917c
+PersonalisationString.5 = f395b1330bfdc1a65e6079bd283e4d64174be8787cda3968
+AdditionalInputA.5 = e473b3d157ad7101a8c613e4d05eb96f8a1a1062a04eaacb
+AdditionalInputB.5 = e6a9ad3e8f7d5e3949bc199aa245244d77417caaaecedc05
+Output.5 = 1b927787032769b1abef2ce19fe862b6193b21178f35e38840d9c0198be37f9be0b72be101eed761c276014781360c3f35336c1bfffa1db7b500b2c7201ba951f96ea38dd6397b8dd7203ad0439ee6df23ae2bf5d42c7788226807fda66584c61db861504033dae3a2af10fd3c0d5a15
+Entropy.6 = 85f68033e8fd65070307984d6941679d6bea191b11238210
+Nonce.6 = 027ca24431bffc575db4cb77
+PersonalisationString.6 = 2a51ce42f382d9bb2f42ea29769c636cdba77a62abecbbba
+AdditionalInputA.6 = 99a33f4f604bd8a4ef6a3373edc466e0346b25797a1310e5
+AdditionalInputB.6 = 31c7ed8358cfd9bd388e6d5d401fcce34692b9f5103f3c77
+Output.6 = e14a1d7d2ed32f90d4229bc168a3603ca7d56e8ba222095f5982d23d59be4947fe153219ce8251f30a902cf4bbbe4a5ae6f401fd4009b7f4e4610485269e12dcd11f5eeb0f8e15bab9b39fe8776eb7156528b866fea9b4a0e2e3fd9a90cc3d93d0ca07696916b158ffc7951d60b80bb6
+Entropy.7 = 1d19e11ca043905694f44f964b108684adaa80326028b95a
+Nonce.7 = 61d40e4d62dde85aca9f390f
+PersonalisationString.7 = 534e16cbbc4f3804315fe18f1165fffc3e4a818475639d23
+AdditionalInputA.7 = 40c2b580ac1df81aefd1df8f9a89e3a392eff777b4ea6707
+AdditionalInputB.7 = 9d060cb1bc45dc68fe167deb75a882c2b4c247af95c781a6
+Output.7 = f4fd01a277ab29a820cef853b278a4f79a3442e633ad3a748061e1020b70310ad4f4f77b2d44244453bfd69ffe9799971dd03fd3fa23317b577d1f484a733ab9b13fcd135d20da2717c800a4e150d530a9862d1adb058ed91c7f7ff86597929c60376739880868ac7d53c3d06cfdc421
+Entropy.8 = c5ffeee448e760f02ab0ed79f142695ca1ad9c52bfe9434a
+Nonce.8 = 0057a62335383d523d0c901e
+PersonalisationString.8 = edef123de50121b701673f8f41cb62aab17f0f9bb1248f10
+AdditionalInputA.8 = 71b6ad9e6203c9e4cd68850c86d86fb00a53f149f8cc1ab9
+AdditionalInputB.8 = bd7419b89d6e5455efde4599efd622d9bef12e69f87f38a7
+Output.8 = 5a04175330c7e7d1d610c7f10e08c7e031ab513f5d707a601d0cd580d144f99dfbea8ff634d574b4dc057d1a0926a5ee4178a2d8be59900072664a6d3d6a1b057236fc7220a5c1b980d49f35d9a9b49dae12f8e8cbad22983b9bbf82f89e5f07e369d001b25477fa22926b8834a6f286
+Entropy.9 = 53190559e83f41773411e75053fcd3fe632b80d28f3bbecc
+Nonce.9 = 32656f46682074f5d349b92a
+PersonalisationString.9 = fb65ef291b630d306131d4e3df3af71d727b1172d44c9ee3
+AdditionalInputA.9 = 8dca31c7299602bdecee106818c1c41d07f1dbb3c2c8252d
+AdditionalInputB.9 = 1cd0d5e5ff4e4a25fe0627e096b8c2c9ea06cdb8f451e84a
+Output.9 = 9628958deb7c95bb63bb1cfe6f6104bb816dec6e476c7993abb8d7e0cb15cbcb9e8299454390c4ba72307cb96ae08fd2c2062ae28ee835fba1a53a6eee531e480a434c10ee884675b6a4a58adeaf5ae75a95e49d161f42a3678c0c0c459cbf314edf329171b6822206c01d02e79f02d2
+Entropy.10 = 105663368ca3d3ca4d6676fb2972fb42aff40eae8929752b
+Nonce.10 = 5b333239203454e5fd35f3d3
+PersonalisationString.10 = 78fe1843c8575d8563be46579ce035416d196d2411d6f58a
+AdditionalInputA.10 = 1ef05bc2a19c3185e6592933d413c4c34028227e29145996
+AdditionalInputB.10 = 30a4d8734c9f48f7167e5a1fd877e2e210387aa515c2df80
+Output.10 = aab80ce4cc4f6425e87fe17b4b8c3e35419bb989586e98f20c2bf3ab9e83b57e0d734ec712cd84b3ab7135213a0d1f2300aca106aab4f3ab26947ebf642d871233abc5c4c7a2f241fb1d96d7844ddf446088d1d315d838855cefd8e0f83530ce9509df84f4398a432325cebff1669c62
+Entropy.11 = c12c51aefa27b6a528211ec51c82f753d38d01b70a9bad13
+Nonce.11 = 1d809d62f75dbe9d816475ce
+PersonalisationString.11 = 7536c910f6c8bfa3d1d51b67a4a767c21bdbc08911e893b4
+AdditionalInputA.11 = 74454e36fd57dc587415c49772b64e36eb0f918eb902fd65
+AdditionalInputB.11 = 1162e2e5d4609e1f2e79e54d69a2d6da9dd0ac691bda88a7
+Output.11 = 5385e6d950593f9f2b4d93291fabe0e4b519188e201cc9eb57c57e7cfe7604a0e263a2fd73d4359190f301f12eb28fa4960c68bd2532ee33e7800a5e791de0709524d971a92ec90df341606001a99af60b1ffe70e190b9d1c1b196503bb69735e0a8955e62b5a9c99f9841b1fc141d25
+Entropy.12 = e1e8808d4a54b0d257b6d83d920f41fb2eb874ae92a7081b
+Nonce.12 = 0363fb9ca9a667dc4a63a39f
+PersonalisationString.12 = ceb33739b5891006369bb9db99e8e509cf52e35b919457d7
+AdditionalInputA.12 = 1ea06da460285d80380adf45243c5d1e0605b25ddc320701
+AdditionalInputB.12 = 846abb105ad3bc773a6b385ee575c17ef515420602d6082a
+Output.12 = cf3d9b4b66c83a7901c4c35cf8d9d5c525962f6da3d793c2faca59fb9c79711bad8ebdedcb64e5148d6acf1e5b384f051b193358efa743bcc2754f10d99053e6cbe34b2cddad7e8e287c603869cfab6ed4df28b26a0a00f70877d094393eb721000566c61dccb15eb58d2dd65f0b5fc4
+Entropy.13 = 31f74101e7fed5cda30b13d34dda43093a06b8f04ca0eae4
+Nonce.13 = eb00477a3f425f588875d7dd
+PersonalisationString.13 = 66bf7e650e2abd76195336c95e5c373814fa23c1abded5ac
+AdditionalInputA.13 = d8c7711e465da516f63edd7c6dc0043b3cbb80f22e15d69a
+AdditionalInputB.13 = da09a438f8e5bac4105b168a956497c1eb920225f2148d2e
+Output.13 = 586a0dd5f9096abbae7a0ac9f022f3ff3f7db5e68a498d2acbd777f5b2cbbcf5284afe2b16c46f7f5b14fae14f8d6fcb10c3ad99544b5de31b031217ad21054914ef93772bbc7561ff92f4b680e0404845c7aab07a80c59ab1e23fa386f323b584937c930808fc67f978d43980348f1c
+Entropy.14 = adc23efdfbdb1e6282bf5d744d73e4b401de9f0ce5734ed0
+Nonce.14 = 78950e481e8ff5c8916fbaf4
+PersonalisationString.14 = 85c36732053af8a4aa04fd6d71b5c8d5092cd4529e2a8507
+AdditionalInputA.14 = 81356bf7d3122bd65b5d96d2ca68875e1d77b36edb8e92b3
+AdditionalInputB.14 = 1f185d4aeca1d95ba4c8e7867df64296525e00db7da61e88
+Output.14 = 8032e92efc35ace508d8a10f36a6e7110cd0b087cf853409e83dbc554633380e9793b7657a23a931e34347fe0ba34c2abdef6a8505e44da62fee97a9543b9e6dd6538726ec2cc6f6d19382562a4a438a2b0756fa66b48628af292e2f53e49edfae3ccc48a95f24c940a90d1abfdd6d0b
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 9adba4f888747eb59b4754790ad681ef015fe6707acc4740
+Nonce.0 = 042ca5d6914bda92b9cae9ad
+Output.0 = ee99b96d6babe910dd8e042cc028dc0c76fd63929463569687669b47b22f8472a3da67b6bfd48320970cd61d2a7a06dc62e0cf496aa4e75bee83eda197f164fa275f2d9043c2bde8c87fd1b0c8673f8793e66c7ff26ecaa22c1b79ec5fa8f525474247e80bde3690d48d0381d6a484e1
+Entropy.1 = 16697879a21c21091bddfa6c27aacdf456af7949607d19a1
+Nonce.1 = d96f230702adaa8dd09ca95f
+Output.1 = c82a5a60a240858db67812df34bf1e5b5c7ae6d9d1d2d9cbd0aad4d50eaf1ac4029215ab2081fa802b359e87dcebc7517e61a5ab239bd8e9e82a670b9fdf101cb04c2d40f9743324aecc5e83d26cbbcd1d4d6262135f34eecd17c2093b9614eb52d77c1d57b6ad51956af395c4d7a05f
+Entropy.2 = acb035ec4597de66d5b298ade97e01094dd21cbbd1b2eb14
+Nonce.2 = b5129b90c1f942a078d07186
+Output.2 = b51a58d7d8fa7bb83fd1c871c954a141555e1e01f73b67c13a613a8a7b65736ab6205bb63bd3c95c8d94a29883b4d1349307baa781a3e2e1346537aafe98d040538609831d86424067eb3515f4d34c1d7c8ecfd48b7e1d00b71c370697f2870bd3e2c9ee65beef855f5e1520dbee119d
+Entropy.3 = dbf353cc5d0522f8fbe08752c7d6c9f67f8def3720837aec
+Nonce.3 = 922f28b3c7f11cb1bfc2151a
+Output.3 = bc720a1a5a27beb5963992537ab2434da6547867b8a6fdf2bcc902fc54e5ad282f4277964536973f9c080226b6ac6333b216dd60ae015e0af1b8081cdf4782df65aaaf138e1c02322bb4a14900cb624c887b453a9607e79b8d9c8b630f4f8f9f5915c4159931f9c4252d92db3bb7a0e8
+Entropy.4 = 3ade8164ddc5518c56b8e27dd12d729808441543093d2071
+Nonce.4 = fc55f735f052a912d8d844d1
+Output.4 = bc305a5dbe0de0c96540f3392f06120457aa12001fb1090d2871ed682196d63333c68767dddd760c5aa033d802573166ee5af4b8449b93dee686632a771070dc7767ad4feb798080951a1f5de6847843dd4a5e81f8f6c7ec17725f2bf1375508b4b1b9a2e74b8f7ec52251cbf855a866
+Entropy.5 = 075804484a8e276ae130d319724f6902ce63916e2bfd8ca6
+Nonce.5 = 22390f15a33ad072e6317986
+Output.5 = 19c343c0b156f023de9dd804335220cd0132ae69471fed0327a678a5ab1199f7a9492a2295f69a6e1ce7b7771c1dcc6d2ac7f10108104aa22b8e413883f59cd8b4fce06e17ee767a9d35a7b4a3bf415c926e39c0a4a3a151630b06a6277700b24c7644587e126966a0ec401452bb2805
+Entropy.6 = c48b3edd0eaa59b5b597e33d06686d45ebd07558ed706cd8
+Nonce.6 = a674b554357ecbf7f11b8224
+Output.6 = 9e7dc7c3a48c6da3f2e48f6e4ce8d19843f384b2dddc99ea78e8a79780d37a2f04cefe31c106b593c5b8ce5fb63314488feeeb2dc6bf0b46ef62456bc0c8717e5873c8ee78788f8892f10a62de78ffe63491dfdcc7069cc81e9c2a5b70bcc807d9797f926d5aef5c42c53b7608bb5b87
+Entropy.7 = 5783bc44e7581781a6a7a91a251b277b3aa9bdfdf79fcaf7
+Nonce.7 = 1262f4e9c5df985b33359de6
+Output.7 = 0985885ac635d9361f1d3f8a08d0c3222713e689186ed6d761618a8843bb3f2c4d8831eacc70926cdc2c125603ca4c9190f387e0da5e72565b7530259f58d85e24765ea4059a26a0f3136ac03811166b57c876c529deb268e031a2b49405b695ad1165d66dddebecf9a96737f184ce63
+Entropy.8 = 729e8de3d5f8a92856d9f537c1ac4f06f4806f79bb795e5d
+Nonce.8 = 48e8bcb81b45d6b2a5402df1
+Output.8 = d8af0382834c7a2f22a40831c827135f1ec801cbc2f5fea3575695a585bf12a0ee7f09b9a0143181493f9ccf027d8be81b99077f035e7d26ea78a83456fa208a1fe70a7239c40607e946ff00094c867ac9db36182c25cd7717202c0f71a20c486816d5ae628aa89c181894468dbb81d5
+Entropy.9 = 7b8b66ad077aa353bccea7c2053591e08f961a1c13dd757c
+Nonce.9 = d96a36123fec868284ffa6e2
+Output.9 = 2cb858bbcc3722b3839d7c179375e43a30198a1528942135ea8c3aa36560635b80379f96a17154853bf75731cca14cc506d5e547d5e1d7b5af972507a4392580ee59f5b1c9ced155c0ff61c9d4790d03e870d52125c29f9827baebdeff34b1c8d8b586439e3dc42990787350428cb0ae
+Entropy.10 = a5961a00f82563e89384310d53fbafd2ff3b1c8d729b5c3b
+Nonce.10 = 8ea1871eb02020da39751fc2
+Output.10 = 59b33b69aaf52948cdcd0a408788a0eadeba9d40198d43b815897a71adb441ddcd09276795250b527427c72d15acfd7c1e9bca417b1f079b4b25ff0876f051322dded8b39aefebdb24b11baac8659ea83afc363d9f1eda7dfb5e973e5736467c551089db74b796437afbd5e6f0248bef
+Entropy.11 = a961b933a1c9ad696659e5e87f5b2d92bc470666fa3ae13c
+Nonce.11 = 81ee1293cdc958aa629cbb3e
+Output.11 = f9138e627879ef1dd36acbbaaf8c7a23cd52a4f0adae38cd47a8082458a085da585fa87402c9ae333a28f50bf33865737a8db85ee9dd2a4c86a7bb4d0d4c47c5bb57ace31df78b11cb2835a6ff7187a0a322883b28215a532306fd8c380bae23e13605052f737fb5bd8a5ab0327931c8
+Entropy.12 = 8db9ff5b00e13418a902135f279e268ab923d1554008b29b
+Nonce.12 = fc8c8af3aee6b77c4a8eebf1
+Output.12 = 2a5389db0f0c697d32ae0cc477bae8c92a670e19b7e431783ad6c4e7fa6572aecb40d04ee87a23491ed38a2207e90c44fd3cd1271b470690aa5f4eafcc834aef64a1f8d98c4b4b8592f17ce95badaa4e75fc95c32ff52fe66bc611d312eb008e7d22c7eea53894b955030d4b842e7680
+Entropy.13 = f859ceded81b96ab234189739ad6454bdaed399822d14fcd
+Nonce.13 = 42b14df0f8f9a1690f3bee46
+Output.13 = 8835761208b138ca1720296e1849e32e1a02859d9ea76298eac19cccc3663ec9308a2b68ebd4d18024d4f39ce560a0bd3aed9c52d53db1b53baded8b2d24f1ed5807caac9ceb6595cfa024815d32cb871ddb71a03b116906be43b5c7890729abf5d6379333e24e78192659774b2e3165
+Entropy.14 = 3879ca720aaebb2a29c99c0aa21d63308b44677f2bbe6056
+Nonce.14 = 2642dd7030605b3608f4513e
+Output.14 = b7ddc2d0295a550e44103ffe7e6e1771cd488fa2ea32b091076085284edb870220e02ba6facdf27d8b34209048d0aa4cce4556c074fc7ec2c3691b95aac3f47c3b42bee3c2e35da17b040188d47b7effef8ac471a669f29e6c4b97ff6836cb9fd8954f57309a97e9a697e061010525a1
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 53aff72a034b35c9531b01cd4bd533269a2c437abcdb13d9
+Nonce.0 = d9f1ccaf486d8fbb1649e18e
+AdditionalInputA.0 = c0d787528a4864d75d114683ba9f79245ed481d18dd0ab0f
+AdditionalInputB.0 = 6ef8c44727dc9195da01bd49406790305d4f4c45fece6d89
+Output.0 = e8ac2faa97f487544341a6457425fc9da03b79d1cb377cc7f66416d28e50540f7c7f359e3c876ef41b16a3dd77e6d73d8572a9f3587317b1c07be701d81537f69973031f18906600edcbab8328a1c5568f8407a961b989fdca0be2dcda4f7f9bc4789f5f56ba281fe0f5508590992255
+Entropy.1 = d5fd2f7f2ac76b1056094154705da15af9bf1275616d6858
+Nonce.1 = 0a1958e7a3a2ec7d34452da6
+AdditionalInputA.1 = 04bc6079cf2c42e8edf207e80680b03030f268d3ab2ed8c2
+AdditionalInputB.1 = 921b413ae8d44cfb52c889af877bd35e5ceb246dcea6fb96
+Output.1 = 929a3c7f936e87f4ca391c9325bb86b57389527f4245dc43f465691a3e80024063a3bc0386115852742594e6fd1ce035af8e90003df34f5b7fe0b7e1559362d3ea84a6fceaf3d51fb40d3c2252ac5c7ad4cac34a32722293f5a2fb65580c542a9f0f55b77b672336887dd4007851ce5c
+Entropy.2 = 841009350a7a85f7de5af9382c29c71224f4370c6ca12745
+Nonce.2 = 3d0ee6172e91d14f1cfecec8
+AdditionalInputA.2 = a1023dcc66ec0594d9b43e4e87b9cc47bd975af98cd1468a
+AdditionalInputB.2 = d0f024c039633808250ea0d455b7a9e2e62b5e65ef887d43
+Output.2 = 8376d1a22e76a7087114805bae931bea61f3c66aa74cb1e4bd35b4b4332e9557d1e5f90914d2949ecba8b258e8474d9846e93e454d2706ac33a3526d7083790664aef0634441de14911de9b447bf778ef72800d423031635f8a198fc155818515af38a221246be78a9ed136129e33f39
+Entropy.3 = edb82f2ff7eaa5807bef88b7ae2ad9e3d7c316747c2c6bc8
+Nonce.3 = 8f917ef6a0b7a6a76d27a1f8
+AdditionalInputA.3 = bf7f035bc39309d8c73463ea3cdf14b0a08d43c87eb8d198
+AdditionalInputB.3 = d7b41d97587c820727730f3ec91f1c54171609f991ee85f1
+Output.3 = 58a04c67cf6c79e7b8de492d35b8179c0fc45c86b9fd639ee053bc8eb7231bbffcadcc742b990f63f5edb8deb1ee7ca2095bf83291daec0e0f82df4ec58650401ab92f1e779119b4696a8c82c5da18ccd657c8cd60c07811a283653d72a92506fc85405efef0ce84cb4f7009b8776fe9
+Entropy.4 = 12c52451cbf115747fdd5a45ba3f864157a6d144f21adbce
+Nonce.4 = 0ed023b13f02e2d572d7b164
+AdditionalInputA.4 = aae7a7b00082b983d0b7b8293787c3f58a951478cfab2441
+AdditionalInputB.4 = 168e6f4887bbf5291596a93593f58e0f8973cf737ab1884d
+Output.4 = e259fc5921dde6398987e92366cdf059b3659d7f3f7dcbea3e4bcd482d2e70c0ffb15990f382cdc6364d31c4105386d0f259e2f7a5727df7c89217549f3d3c38410de246757d5f672665373872146fadcf93d65d8079d8f6ea49fbc1403e0fb2e6037fd1047526ee28ddfe940d630bbe
+Entropy.5 = 3a426d53895b3e46d97787dfe79ac48d3addf64b088d6c52
+Nonce.5 = 43a45ded0084ee3b2cf5914a
+AdditionalInputA.5 = df4f52d86893939d83c1fde14d90b4e85c4a68a2dddf5ad2
+AdditionalInputB.5 = 4205c5a9fc403572c4446670ef4ac7f5fb9938910fd0b33c
+Output.5 = 406fb613800bfa05ff713d736106958c1126be3d9c48f9cbdb9ddb73c7353242a6fae9979ab3dffa96648c05f8abf3ab784405ed263e0558631897bba78ad1566dd43085a20ba23e1b8f329a9121afbaf8e2f830d1c4069f44ff125277453bb4694e0bb2c01e7a3fd2ac4441c5241ab3
+Entropy.6 = 3c759443c83813a7deb06cfff7fc0814128d416f455f4df7
+Nonce.6 = a73af062f4ea0140d693e716
+AdditionalInputA.6 = 94309b66c8eb3b700852db9e1170a158604e5e043c5cb47c
+AdditionalInputB.6 = b4105cb2af73ca583e88fb3eabc35209a0a06452aed4cace
+Output.6 = 508d4d7a1ffdd032b40e526c93a93b1a5e965e4890767a0e495412b005dbf0e86685208a327905bf4610c6094ab7257a32e14b5bda9cc15c6333d404bc5e2fd9f554ad7a7c4cdb861b2b951dd28f02343b9ce6abec6a66681b4c064390041455ba514e1eacdb5edeed95b99672588101
+Entropy.7 = 494f4c733131ebe8493c783883577136c9990616b0caf069
+Nonce.7 = ef61c7230fd74072b85dd3c4
+AdditionalInputA.7 = c2488f2d5052c367364e925367d7ee42e5b7773c4db05d2e
+AdditionalInputB.7 = 79713c9faedb3ee6eb0fecf0876ee4ecd84691e00b96faec
+Output.7 = 4100051ac949d3a1cc5d45e9894df6bb2cff88bf647379fd7065bd8f50a8ad4aa3a084971349d7e2141081036ed8d5bbf043fd87308b53cf94407644b7a7508ca46064f71f56405be76072edf2475b6dfa805de80af43ef91932d62b45ededcf2b82a17d226137af9c2970869ce906d8
+Entropy.8 = 60c687bb49a3d1854d5798fe7cfde286e081e3fd09648ecc
+Nonce.8 = 583324cb7ecfb8f82c5eb67a
+AdditionalInputA.8 = d6aa6d3ec08ae9a035937ce3d1be94abd5c473a3cc5bbd8c
+AdditionalInputB.8 = ec5f9cf09e2b403bb1fc26ea87630347b5e4ae5709018bac
+Output.8 = 02b5d69c58848f5d144062fd9714e1166a133ca28440e9a80778602d1f7c35885970755847916b57c316072cbbc61ba90f5e063d048731b331b790b2045f4a9a447c1af818e3e7f156feb4c6e93c17e489b03358584ff83e84a6e9eaf5ec8213f06b209615edd9fdf9d773d2c2b194a8
+Entropy.9 = aac14133237444a1f625d438d4927ac2c616e5c7613ca8e8
+Nonce.9 = c7c662e78fbf37071ca15f4b
+AdditionalInputA.9 = aa125ccba1798b5d0d426d7508260da20c4bee5e0665aaef
+AdditionalInputB.9 = 473a728188c0655169dd024995a3db21b0b2f262c28bed2c
+Output.9 = d4f21a5754eda602c4fc20426adef10c49352b9bcbcce6f69da506be951cc582ed8ade9ede8ffdd4aca311134e2fa45c00692c9ed20661514ba867e9e5206e2585ed11c0d779d85a1d2dc9f1795b25116bf6593086135e4ebc1d9ad7bab414d4100a93bd299d83b19e5bdc9830f30a87
+Entropy.10 = 0a1f74c0db59187d3f20184ad5e7ccba77505351895436ca
+Nonce.10 = 89916fc0502667e5f06d039a
+AdditionalInputA.10 = f68260e1422eed3d09307b30204d92d44c5f84ee0ec15cf2
+AdditionalInputB.10 = 555a5725d5435f5cdd4941c5b8d840f357613b17f123cff5
+Output.10 = 0dad9bfcad83cf8189b0212a888870a8a4cd4302e5913eb27b451513dac8c5e007b4ba9ee148c60945fd5262f6964ef8caa3168c25b2c61a7ed8b4e38a88b610c266d5958bd105f43f0650dd4848a15446e294f325a4c7bf7ca77f51bd910d24566e5411982cfbc7a544ed03a6a641c8
+Entropy.11 = 96646048d50c5596e5ad91a8fa13d3e3e9ae4ee59a274a9d
+Nonce.11 = b114f953802390254efe4664
+AdditionalInputA.11 = e2d11ade8e55b8e3542687b5711497f78c79057eb0fbc29f
+AdditionalInputB.11 = ff94fea1dbfba2c2138f4930332bf03b12a952eabd0d9f6a
+Output.11 = adce9b6066b742c5eb294a66cee2c51c8335641a1ec849e36f721d96b8bd5cecb0a40dd11f3b2636bc5e89943967fe75c2c9ad77f068df8064f208a1da6d7066d7f539ea6548ad57f7306f4ab58d844ddde62a866c3ca58b6e78262d6e45909a9b6276dca45c773e468fe5500132a7a0
+Entropy.12 = 6bb582adbfdddafb38d1115a2eac2ffe3745ce63f93b4efa
+Nonce.12 = 4bca4f918bd3fd8cb78825b9
+AdditionalInputA.12 = 788b95a42ba57cc011479ea079f7b818cb42e2a3693dccfc
+AdditionalInputB.12 = 9e24b638b83586ce95338ac995ba8527086cad0205df5121
+Output.12 = e51693526744def29254b7fefa3287efe752538f25026b821375cefe55fe3f6f8c70543cc97078a096e3393060bb41205335e74d7d5f686497d4d0ef2e2709700b4cad5148d2919d42d84d611197c4dc4e2368c4f0e45e61c375efa356127dfa5860d071e46e7daf79bf380150c10dae
+Entropy.13 = c48499ec94cc528fd842074b3b34b624a6886b1266a01cc7
+Nonce.13 = 8cec818ef3bdee8dad4eb056
+AdditionalInputA.13 = e54c01d8dde55280f2665ad6b075436a61a8ca9b88b5a831
+AdditionalInputB.13 = e5bd1ed7e505346795622b52c2595405e59a84deef50d61a
+Output.13 = b76a9ecf3caea53d06e9bf24391075f3d2ad1187bd2a23dff4f642490511055b5e77749bbc886d85de330f554abdc35adb51c1de5fdfb1322939ea0ed85739c0e22c063e155e029d3549894b3427fcf3e263fb616f788434a09235a1fabe64d8f59f5a382e1c3c3222f3e5accf25faa4
+Entropy.14 = 131273679f11ab131bd40675b8f53dafc9416c3acc09bcc6
+Nonce.14 = aecfeb199abb733d2bfdac2a
+AdditionalInputA.14 = 13998df6bfa51c2708775384f01cfe8f4755b6fe4b3c2fd8
+AdditionalInputB.14 = 8d25383b6d04285fb699c644bfc9b7fc72de41c733f35b27
+Output.14 = 3f408ca372917703ecb3449ea55de7a969a5ba184eee8f30fb19b99ae827c66b13f29d4d3a0236aefdaca63c28bb71595d3dc1fc20f1e7ba1b1c9bdb7c2122bd8e443b00b5339508c315ebbfc9bc3c7bebaaf83312325bae696a576b3c92931eef6b4eab6bd90c140295f47994ec6e34
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 6e6710c92a30ecc014c1aa6f22b0951cc0430ca16255accf
+Nonce.0 = 45b5b13de6920a077b2810cd
+PersonalisationString.0 = 007f8d3fed0d3ca512ddbd457fdda84b8fa4aadb64ccf03b
+Output.0 = fd5ac10678a82e72b59b4b980d43e3113f27bd37982974477f700d73996c04d357c3e56f9e62c4d1c78d921efbde081d6ad0ff62e3a5816084d7206cb4bbc95b8f7f6fa2e73e5644f7a6801b603b730564b523c9b078c36cfb2ab6cbf05a0777f4ea99be0b75d02277a577032dfa6c16
+Entropy.1 = af06de911970172cae8fbdba5d68a704d45a2b66fa10a64a
+Nonce.1 = 9c150019343b6121c7ecadc9
+PersonalisationString.1 = fd2d79e8d237b56c423496e093f3c0eec3d42d6d495f5867
+Output.1 = 58c46b3be593b27bd9a291a2f0bb2fbaefc50f4713dabcb30696d5bcb088d042697ac2b3209b5eeca580ed218ea277edd9fc79323f891d471a84e6c45bfb161594b8be949eb7502d3815ec88b164ce1469bd78a1a733aa3549258e64a5856b0faadaf084f9e69f0a437f47a9bb363ad6
+Entropy.2 = 4436c8a1af7823cd4a7a45ee0e69d711d403e74ec6c69c96
+Nonce.2 = 55df37296d72605af0bef1cb
+PersonalisationString.2 = 24d2cb8ac193a62ab79e06221871a6f0c01e8ecf4dcda0fa
+Output.2 = af29c84946f492f67d6f7f8772c12745a1683d48692b7b76108c4f1b5f64acf9aa7c6cdbd11dcb5247bf7f3914a147d845ede06afd4861dab3fbbd3245107adca4c4f462674b05dd5ba6264b5606b5a4fc1c1775024b38b86025706db7927d2525a2277b06e0fffe92c141e452cc39b3
+Entropy.3 = 785124d2a657d0d9c7aced67d052af7ef3ed276e99f3a134
+Nonce.3 = 8580660681ccc094d999e906
+PersonalisationString.3 = 1d05ee577ead88fac87d5e5d6fecb3e995acf859d01bf923
+Output.3 = 46ca8576b7667fed06438c9cdf248eac2b4dec8f8b8ddd301b907a0498e754095aa3afb8199bc1fec276e93289c3fa3a976bb84cf41bf0cc243ac9b9513bce3a65abbfe8d8c338fad7e889d3ecc4a036d188efbad6da1fa8fa63e6d861aaa2d752f123df6a8ad56fd3e113ac15970c49
+Entropy.4 = 5e3c0551e9f8b7ade059965154ddfba00cd29ba005c30e4c
+Nonce.4 = 4bc4b1b444f4456a689d1d79
+PersonalisationString.4 = d11f62673361a7118820e1b9e64ed62432b56e31bc6bd4aa
+Output.4 = e4219a090ede86c2a34b8565d09364a1015a979221ae2df30a835df57de44a2ff32971f9878566597366c4201387f7fea93589b910bb82d99227ef64f7af6294ac5a434794ca1f0432c92677d171fa5d870c77d2108dc38508fb580577da77bcac39cdfd64187e2779bb59807392b809
+Entropy.5 = daff5ef6e2c193348c5ea64796a7e6788b8654a8309d200f
+Nonce.5 = 62c6606f4ae3a6fc4aac397b
+PersonalisationString.5 = 41178dc742ff695cbab25da273a5aff44d0499133a3b2246
+Output.5 = 36c11234660c94260a06c6f7bcf2d9bb655656e5a383759d15f5c5dd4b6e48f7168bef004efffc3ae365652964a7ee7a885ac29f6f6b9ccb51ac77e35078040dc6cff7ec03d01d8ac5a2ed16058af9cbe5740cef6073cf43f88daeb6504af3c8e6511ec2036d2e353f034614e32b19a8
+Entropy.6 = a9c1318ff59a561728c9f26924acef51ecf46e75b2d9a7e9
+Nonce.6 = 8582f0d6eb3e3f465a5ad313
+PersonalisationString.6 = cbb5a1319fcc9d0a9b96da31f626c2ae533aecc93f35faba
+Output.6 = a7d61a982c64fa7674f97172be791ce0b364a2e32e364b8df1cfec75291ecec19d599bf5c4ab9735240817d7c52b46c6a2e2ba05f9ffff9b19d742e056c3aa82e7be015d7b86dc99036a3dfa729cf078fa5ccb9e2bccd79142a4607f4fc94ff78d951581be4e9935f0861623bd06eb0c
+Entropy.7 = 2eb43ca2539335eedca293dbcb9d5bdab627a66afbe7c108
+Nonce.7 = 06b3aa48769d3d8d2dc8bfbd
+PersonalisationString.7 = a052b0dbd0df209714085f49d786b6033871296ef64b85dd
+Output.7 = 81d156ff0d3c8575f406f890d81f409ca8aa128b56e73ad890dc1f36a0b466d4af3e78747e106cff7b17f27ae95b73ba8aa09aa3608b3be5877641fbeddbd5aa26ad0bc9152a57a4f75bdcbad8dc74f5ecc8cea6852c078cd9639515a9333e3e426ccfcf452eebbd4b7ff399ad58afb5
+Entropy.8 = 0de760c9c3d76e864339b5490db818e4e6db41c63a41665f
+Nonce.8 = bb1a29370c6e57eac8f646c7
+PersonalisationString.8 = e6b33288a0f6413bc826f398f8bd6c12201a60c16c2c26ef
+Output.8 = 655ad7daacd83cb1890ebbd6ef5095d8a4faaf5f6583609fbd9d9cb59204148c6b732109028cc1ca56a1708938fd835b3f841aabff5179590612671ed7ac48b48c87defa49811d95b5bb88246e9f8c1b246be6066d94865cf29e228a8a686b820cd7d762752cf9da15adc8066b161274
+Entropy.9 = 8313933bbb67aca8534cacf25dac26e9be0150ebf7e74d91
+Nonce.9 = 3d9627615e1ea6d5d74afc0d
+PersonalisationString.9 = 11a3c0b1c19cb1d81d4ac4a99132ef87ed2ea757463ead56
+Output.9 = ab5b3171983d19ffad762c932fe89640d5c4fc0dd27f87f85240a80ac59a08b55a62b4b4ecf4d3cd11232a2435d4b8c803df6b70cb801671dc45b5fec76d48bb4f55ba91aa942fda880cb2bd8c3dea412b0c3f872b35299fb80298ef5b81d22e84c4b60479b5421b5f9f2d2b9a8c6f8c
+Entropy.10 = 7eb8a42a6d3b773856fdd615fa8f0faaf265d09ddd831d9f
+Nonce.10 = 3ebc730446b23afab85fd0cf
+PersonalisationString.10 = 8d2883a3a40a4a849b79b9cef7da2fcc1e5ffe2b4e8e10ad
+Output.10 = 50a43bf5120962bb141fa7d9dd669112aceb00b5ae6adacc6047f7fe1693bd11b1f915219c023061867bf1bec19c2d3849ea3c566d1c3c491540c5c84b4727e73b12c9e1bc4cca577f6b2cd3c9b626fe91672f0ab624f76a1e13cffe1e2daa513c75982a8e7c6b2f3044c21c6159c924
+Entropy.11 = 75d715ed43edc2506564c06e7dcd3ee6c6f111ad999b2488
+Nonce.11 = c00a2e3c32ed1e0b2e435dc8
+PersonalisationString.11 = 0b906a36230c92785838d09a03cb8a0ece30138d61cc11c4
+Output.11 = 51328103fd7e7ed67aeda05059570892d775205282ea925292e8febe64c01bdfe16e2f6afbf7de7323c337f7faca3f253485430c8d3e5f7086a647cad2e307cb80b9725d57ad60c8046b16de0c29d310085465baf966041b6065d72519f92a637a486e43a39199545a8b1ebd097986ae
+Entropy.12 = 54891fc89ab7805b3129c70ecad75c5331bb821b8f1c3b1f
+Nonce.12 = 69187d8c108c876b1c283aa5
+PersonalisationString.12 = 62d69ea0f81954352f554587533838e6193165f36b7ee737
+Output.12 = ad82de4dad4beb78281d29a0e34e369c4f35de269eadffe95fcd4a44e6dfbd311587f80acc869cb84eebbc48b75d7cd83e3a790cac2f5b92e97c0ffe4bc08a5c5ec38460f79736d978dc53758b6598ea6debda6068121ac1804b2ea6e684b9cda6e8786b6432632ede5fb40dad7e0f20
+Entropy.13 = 7dc68690b5a7cbc776c59419326d3fd8dc343dcd91d922f7
+Nonce.13 = 6d72bc54cd426fe51815d88c
+PersonalisationString.13 = 665f6e331d0a7bf0bef0cefb47bbb41485618b97f116c7d2
+Output.13 = f502a71908f9396591cf21b2f3cbad59f7253af8964cedeab7d307140dc4baabc3831015e9498aa5657b11b22953a0b24da5e4e53ce9db4125ba325d270339c34e50af89df0e1370ab2c40a3989cc222d68ab14c443ddeee929b78841b02c82b922d5a88ded6c9b5a7d8a47d4b4fc397
+Entropy.14 = 23c19b9ac1ae1ce4bba0c0262fffb615d010b317f7013ff5
+Nonce.14 = ddb5c0cd2b4b640898c2fd1a
+PersonalisationString.14 = a096d62f947314691cfb647cc2f331af834cbcdd5918f099
+Output.14 = dc9175fb05854708739c3da005592ada29d408ed6162dd278ee457bd3304e4f7011355da2302df1d0d190ef846cadaccfa5325d3f71c407ab2434d65d815dafa6ca15f7e701a104225a839f2fa9874ad49bbdbee576b1bc71ace28c825095510890861c851bb79e2e2e922c3ac22fcde
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = dd613a088187ea115d9419db1f3e36c9334c0388359bce67
+Nonce.0 = 2a31352007a20166a6acc648
+PersonalisationString.0 = f93e011aa0a74e2bf5145eeba9fc551535736efc8e602c25
+AdditionalInputA.0 = 9c2da85e0eb2ce03bac0b51b2d686770ee4491c15e76c14c
+AdditionalInputB.0 = fc4a5a59f46e417c857ffc6b34fba2a51254cbe41d66ae24
+Output.0 = d79a79f9ea5604399ea5151c2a61d33b69c35afebb67f246a371aeaea8f1e75763cde1907a5ca30c439d60b71b72429a66fc10d3c853e4552dc501ffadee6733e1c8d61efa1843c5e16cd832cf4b3d5bc04bef18d845a014ae2982fb26dce6bd24b455184d9bb1ac8ac324590b1a0c51
+Entropy.1 = d7e9f3d8f13b03a092b760d7fa1916bb7aff5d5a47fd2248
+Nonce.1 = 8ae94b692bd0746727d051b3
+PersonalisationString.1 = 185da67e83276a817a807a65632d3fca2d0a36e8ad8ddad1
+AdditionalInputA.1 = ec4dd4a3a64da4175142b9564fa0a6ea1818f815c8a84916
+AdditionalInputB.1 = 0d46aa655247fe22428b0914e2d69a4981e2ac55fc7130d4
+Output.1 = 8d897f548aaf86e277df2e0bce8a6944d399874b208c649a5a31c73057087a804feed87ea76ef670eeb27e57c37a08bebac9c957a3a853a420f4011f3f11d8c7fd061563d33ea1a0cd2c7a3c720a3a39a353dea3180d862300c44c481e948710d89c98138f3852dbbca23e4139cbba9d
+Entropy.2 = 97335ca16552fc5ba58b79d9a9c63a81ff338843856bee32
+Nonce.2 = bec64bef3f272cab252e838d
+PersonalisationString.2 = 62376851b9d15496bfb8496cc886440b0afdfcad746ab9a0
+AdditionalInputA.2 = 69fe8ac686efd13aecdaac4d1fa5e7c01da41f3066d4b668
+AdditionalInputB.2 = 5702049e811acd52d96d9191a4d03c31f3e5f28df5464ad2
+Output.2 = acb21b4829a7387a4994e3eee1ed7fd51a027866b76a48c21e09551e68951b98c25681fcef1b2753a539e07f82039db4c29656a213e95e9531ea67dd8f20da549f71a91fd2872c6efa1ce10f99e4b33b2b9c4149b95e1d9b9ffd4c9bdfd8c91aff0fcb02537b2928d91d29ce53a8c738
+Entropy.3 = 68f9d6bf1c3fc81a6a1a8a6802cf351fb0db7979845680a1
+Nonce.3 = 321e220398be80e0f358b85e
+PersonalisationString.3 = 6a142b88d0a53529fdd8dea74170185726c1efb6dfd3e73a
+AdditionalInputA.3 = f3e761fdc1defc199e7fa3f3ea595459ba7f36823fe5cbe6
+AdditionalInputB.3 = c7debb6fc65d592816a6f42f1e3914f8fa35d4bfe55271ea
+Output.3 = 9cd7c36c9364589549af7fe78a0732d6aa36bea12228fff2e528f5e5f9418599032eab2b67054f417834045a656358fe9774009adda5ed3b6c6cd299e151851cdb630c4a4834940f3fa4f29784dc99f7ef0f1e071fd8476af5f01d9cae7735ede2128db5c16df1a0b816aa10cd6dc83c
+Entropy.4 = ba06a17e6afa8d4e9884f63cbfbc64d163f2f579ca7ed598
+Nonce.4 = 21aa776100c0ddaee24634c5
+PersonalisationString.4 = 0749561f59c8ce7bb970d1773a9a8c6e554177ce0194ebc6
+AdditionalInputA.4 = b60c89ae622970d651c8473d6ad42c9a6015defc56a0db3a
+AdditionalInputB.4 = 607ec2c21022555dc67903849342674676c56608556cced3
+Output.4 = 3c44f1fd7d507f9662619c4ffc419b48a9bfa55a533b605d88d3bfc91c208c460dc2bd3c63ff30ea8807fc2817114e77cf7fe09f5a8c70182fe29cf41a76113f7229ef074d204c3cef444f63b3ac1af85cac9e09e9d92c78940074d39309cc45d1bf9a35a3a7b85f3e17897b3a4d6beb
+Entropy.5 = 8f27b7ee2a618fdebbeb58f516729a481f978b3d420821f5
+Nonce.5 = fd9d4f0a75107c64c7864f03
+PersonalisationString.5 = 06e854809260f623db93eeca50cc46d89547d29536dfc77d
+AdditionalInputA.5 = 98f108299f590d9ff866d97239517fcdbe2ea171505c07e5
+AdditionalInputB.5 = 3e3d83ee0f24036983bab3e7c4aa1c4070e17e1fcbefdd13
+Output.5 = d6e693a33e9f56106af0e5ff07348eb25ea7b0c41c40e0c0aa3e9382f1352e51b0c10e5756e455a24fb81af96fc58683f843c17aebe1376a65a16802807ea4f14bd8791fc182a93143fdc52d416f49d4578eda36a4e95646910ed18b906d00c7a135118183c828357c19a17a0812f8c0
+Entropy.6 = 4e668aaa6d1bdb94742401c43bba27ca169fcac91162c03a
+Nonce.6 = 16f96f2e75d712725137bf8a
+PersonalisationString.6 = 37944296e9607d7af30c34d99eb4f851c4690c53e3e25fa6
+AdditionalInputA.6 = a53d387cf1369c0d6f276c0d6e23b747658aa7e3c476a798
+AdditionalInputB.6 = fabd93aae74f8f8d84009644028e72bb2c97dc1064adbc59
+Output.6 = 1e1eb9d443a5aa4d86706099dd1d23f562aa6bc5307922c711aecaffeadd14f36f85738cdfb749b55b700b2b4a2a399fdf59b33faf1b0f6142cf7abf375f49412ab92a619848b761f691bb51dd95cc64c7e6fa104ae4fbb63ab0fd2a38e3c5cefbd39455df4cd5883a057ae4ded25061
+Entropy.7 = da9ac3575de73b7ba307fb8884004e4eafbfe2569f6d6cb0
+Nonce.7 = d25c0101ead9c54ba8863549
+PersonalisationString.7 = cfe05c5b187d62367ba3a7de834317c109e0b6da0da4aa68
+AdditionalInputA.7 = c655e7fb546efa9180b590cd6e51e8ae351c6c3d537bfd5d
+AdditionalInputB.7 = 676d6b386e495263bf970a7d63686e936b3115fcb6446056
+Output.7 = 2db72f96223b7b35963f1beff6ebdd3b08165e8701f8a8b55a7add13601761764b6a3a361a569e589c628875e5ed489448ff22ee02807997609e8fc0b97a35901fbf4fe7b2a7499589c632e93f9a7bdc854c6e269e66090eb3764854457c3e3ea9af902896ad5a5284fa63015a0161de
+Entropy.8 = 74cf7ac52ddd96410e0ba39f455bdacef239dbaf88fb4758
+Nonce.8 = ed4e1cd8b9323d32e688d3a6
+PersonalisationString.8 = 8ee3733c61ea0ad3ecab12cff88c4af119325a9d8b15fdd8
+AdditionalInputA.8 = f717b045e0061b0455ceddb624ad0bee50fb2501c69aafc8
+AdditionalInputB.8 = 21657e2d42a4fce1fce1aeda2f57844a32fd3bcc30ac7d84
+Output.8 = 0b0ceaac8868b359cf8c74c6fb3a4daf59dbd68552ef4531141a2a833cb2fdc9771576fa2dff8ec3ee49e1b687b19875a36bbbb66973cb075348c4f2daeb58a04012c08e7061e91e140118e7620b008087b400d4ca7171bce410ddd4426f6514af7fb604234d39890aee4e34475ce31c
+Entropy.9 = b1d73ec30299e5d754da31a37ed73f2dbe492847b796563e
+Nonce.9 = e118b64a81f6817d5f3cff8b
+PersonalisationString.9 = 319636c5b2edbf1ffb0f28ea5c1fc483e0c3ca8802801ee0
+AdditionalInputA.9 = 99d9fa824de3625643cd95002017626fdd0c2a29249b3fcc
+AdditionalInputB.9 = cb339d0f6d3e830eb316342d9f16027292c0be539d3afae9
+Output.9 = a3298689fb722453aa2d6e25a01e8e048a2339b3a08442ad02c611accdb7c813e0251e01b35e4a72c86cc51c6c064cc4d13c50cc428bc4172cb4649b51c69773da699821fc2883a80763cd96561b5cb99c2219479bc459c54e651c4f22c6df87408e3722cbe01494249818816c38549e
+Entropy.10 = 07115199075865a61c101375d4373f61f2f137fba7030860
+Nonce.10 = 4ab8ed6ced5d0896e5aa4e6c
+PersonalisationString.10 = ada2703b079e1525b203767e8ecb0f12bbb81530b5f83c45
+AdditionalInputA.10 = 92938d2ca56ddc997913ba669dd2a68f1150e971f994489e
+AdditionalInputB.10 = 9ab4e1a982b0fd473e9f5c44667b650e192f954461701843
+Output.10 = 36bd15e37cebc2a684bf1d9f971b700e34444d0e8e9c80b3a0d2c9aa320ce42c5bff316a2df6ccc32a5fc2a7cb00f8a6a5c7d3fa36dff53724c2d1a075fb7a71b66400f005e8f682b83421191c93a31e826e75e3629401ff95c4439eb846558d9a0087f5c47b2b8ebfc36d9f7535f342
+Entropy.11 = 1e7cc92e0aef60ce8a8f40c0bfc7bbf57c03a051ce0ec3e7
+Nonce.11 = 06be5dd7818edbbb0514c409
+PersonalisationString.11 = f8c1bf41d4109726a85865b3d4dfa4dcf729c2c634f18fa8
+AdditionalInputA.11 = 3ae2e5773982ef9f95eca6dd9bf8ec4208d8b4c595aa4538
+AdditionalInputB.11 = a137005a49d9fe3bd2d67dbadd4604aa19ef49dd4cc52664
+Output.11 = 4de76555a538b58f0dcdf6c56b6482976c692c7a8f1ced393bb5789a1cc57318887a70e0f581616052090c041e3cbbddd08065de1e1cfd548acb89b678e9e06302a5c3edc0873e69d7431e850d0fb84ba081259b1e98d6190581cc71131101594732c1f2b625746c9d4cadaa22f3d13d
+Entropy.12 = fc2083c98cb0b14e83d7a0d5394590351e11e195339ced76
+Nonce.12 = efc6f146a738fccf37386f91
+PersonalisationString.12 = dd0cfd5954feff1f95ee3bc54df0a55652374965eb2cb72a
+AdditionalInputA.12 = e841f20642062e7d486fa8bca1712720195278c9b3d69d20
+AdditionalInputB.12 = 0c6f9ae62c170c87a7dad1107ffeb0ec7a15953188b3aa73
+Output.12 = 151b8ef3c9cb616db975e9833862279f31585842bc0725f91b0d2ea96ab1587e520a6c9bc339974cff523255c68a05fee093773a9857a5f3923c002c2eb30a860c2129272baf62ac4e37befb6dc98810fb1c2ea1fb572a5ef37efac78306edc8ac8133353a6986edb99704a1baa84458
+Entropy.13 = ab0cbc1b4b9cae4d8036746ce9f44660022afae8ab1ca1e1
+Nonce.13 = 4dde1ab0dedbc4b0b77d6f9d
+PersonalisationString.13 = 32d8f6c25be41d2bd09417e8f3ba6792868033945b9d7650
+AdditionalInputA.13 = 92f399671e0c5db89310d880545366bc356197c99e2aff72
+AdditionalInputB.13 = f1f822581045ca7dfe2ef9c054b602a91e164253064ee82e
+Output.13 = e87757e04b704eca996703afa63fab787833df6131615a6de7ef9c325edccc52da099ac00082e83fde400753bc759fcd71e91f308e1e58f8b0d3c942b2f51acce15e631f1ab16793b67a32948fff4656959ac1fde49f92cb673185c3c469ad017574066fd689e2fcd202b438a858e35a
+Entropy.14 = aa9365f9c94d1454e34358290b219785c7f1bf114d7d728a
+Nonce.14 = bb3e73c7142054351a7510af
+PersonalisationString.14 = 054b4a59f963a0a6487a059ffc646cd8380bdb04847114e8
+AdditionalInputA.14 = 2bc060710fe3d92760adc274b878de0df82804e840cd098d
+AdditionalInputB.14 = de879de9c03efe5a68a12da7a06003ffbbea0a9c53f5e0bb
+Output.14 = 4968c67d2f830b591531d620b6c40de4e9a15dc97c70b8b059023033bea376953cc5fb415d823d55d5b02b17c2ac60a1c8ee7473d25e94888fae15c6a7770b75565fe505a117c734d0c7d0386cff907a893da3a83d45f51bec9d95670374524b4f59e45a04c88d1756ed854fa9f65693
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a1eea5996a5a9bc30ef4d3a83a07aaf3e29bfc5070835d69
+Nonce.0 = dd272151121d5c5a851173ba
+Output.0 = 340a081e6a7b044485ddb306c8aa26133a6d88dbd068bb622fc9c627f3d5b92cb783a6720907c50518963c911d836ebfbfb530e85b7ddc00dc9e262922b5354841ee4ce13c67cebbf768131d189c4093577b31ce136839c60052a4a57109cac049d7057764fe9c63d8f13ae2201bcb3a
+Entropy.1 = 90b6ee9f10d340cc43ae5edf72a9219c96ac7d9efd91648d
+Nonce.1 = da5032b93360b0cf804d90e8
+Output.1 = 5a1daf8c44000fc7a21f3868411b5f0a0366669a3620e0566dbd10f5b43f7b8d827fea6ad97361a0c8c5d90f1eddc9642107451e0aee275e30d9cee80bee182fbf4cfcfb647eb32de8cd3dbdde58ed4eac8b74cdd391e16f26885bd049a889341a37e8bc5e6fa56bcaa4bd81597534ca
+Entropy.2 = d8de4335819ef3e045145887e3ee56390171764276e82280
+Nonce.2 = 89ec41b62c811bcaf403257c
+Output.2 = 7377c76bfe76fd807582e066e629386980398fd2dd93a3bfcd476a626e1a46b7f72da48603a0800702debe1e50ebf4fbb2583854b179c242eab345f156cd1050c136cc5a59fa1a8ba160e793623ca665bd9b22488ff018713315a0e5fe0e6f86321fcff5ef753002e8a3253e849de9c5
+Entropy.3 = 4a0f5b66c344f6a603f90073d1aebe5ac69fb88af67a27b5
+Nonce.3 = 8ffdd2352cbcb4408c8b4fe1
+Output.3 = eb3b6f7bf9f4431e44a7265f562968d762a298513110066b226f3f7c8c7821eb00d3caf950ae9002301ed3ce20bb473f76160251017830e7605c3160e2b83dfdd516e20b00f9f34070af76b8efdd23019fb976a3daacad8bcf158c82b3f2519907156ab978d15beccaae43b807ea60e3
+Entropy.4 = 2bfcd1971a175e5a6e21920ec52791753eb1089875fab23a
+Nonce.4 = 81921e9cd6d27afab41e57ab
+Output.4 = a2bee41f3f38e2f356c82e461edb05218585eeb3325016d4d2bddd538e585aaeaf9b09dc652317b47f961a6ac424b28f4600f525e73689ee871d016e78c5d49e1a250409eae07a29371c43357b95d0bd9a02ffeb9541790344dfc91fe204bee47a8faf70dc2f885590f2a1a18d5a534b
+Entropy.5 = 9f09d96326362aa176874095dba668ec83deb995c17eceda
+Nonce.5 = 6e17699a0d655f4752d25f69
+Output.5 = 7bed096952b285b372f208a300b142c479d89a22b6098eb4b90d6a3b299977e2429a9461c71e7b9926a0774125475dbc8f0c1c127c916b2ca32bee8e8c28bb6a8390915763346b29a01fdb313c617ca91f382467befb89f5e58a63b1e3f826c1fda9d953709e0d91109309ba07bcc2ae
+Entropy.6 = b244d85a21073232c82c821823f196d292bad5295c922423
+Nonce.6 = 4ade801e3750dd91dbbe4173
+Output.6 = 44cbe6ea80ca8c9107de7733fdccafa6aa285ea82fd26b778cc2b93c652b3173bf9eb7988fb872e82794fbcc83ef0b83644d0c8f84012174cd1accff643fb57dd9ba992cba911081ceb3f67e654a4a2044195f16ad1092c095d52c1ba5b04964e2fc46f30a59ee8a5aff41cbf00ddef6
+Entropy.7 = 261495e2cce8181f414ae5f02a5dc80332b06424b5d23676
+Nonce.7 = c995ae783f33905a315030ce
+Output.7 = c5ac2bab9d7a3e0e016f3400b5878826b85df58988a03969ee3ee240a717215050518ab17f276d8bead20d2591ed6fe4b98d00e74e264c2924ef5fef18fe39d7443f94edaf831736b52e8eebd89afc2331e1d5411c59216b310c99ae1219dc3375a87ac7820cd590f162f766df21361f
+Entropy.8 = 60198ce36d280b35c8a944d36ca19297e980ca5241b35056
+Nonce.8 = ea5d96bad5525bff0db96ec8
+Output.8 = 62402bacf66838c7fd7f69eb9af3bd6c7c6c88a346338fa340d1245af69a935e1d0a8ddd98e38958cdac357bfd1ce65652db99416d6e0a9ed1757b5167ad23bc14629fdf0422598df93c3996298e7dff16a0c02b75a6dae1b459d5398424ea930b016a538b14cf05f3509479af9d4f4b
+Entropy.9 = c1e02fd43b86dcdcb40e454e1630f44d673974165e67f3ff
+Nonce.9 = b2b3a26dcd32751d517f81ea
+Output.9 = b884469b1b9f63b73499ec814685df4c794ef0db26864bced7ee6cb7206882a44d230e5fd6ff3a539397d3d099ab1116307ac94f7b16a041699838985c89dfc60eab5016055b0605aea3779d00918f0ebb8eb575f50b46061ad578fcd785e3ed639a3bae07533eaf6b0baba2db1438af
+Entropy.10 = f07143d93991f1f2a320505309c15cb2732e84cfa76ca1c4
+Nonce.10 = 228282541a29052f64617903
+Output.10 = 6bd0cafac285894ad2d2d4399eebb2d44a133d1cc65832e674b7b601e75527611e5d7f9716c624cb026936d7f9aef9300245e061407345ca0da411ab3e21104738c32afc62f8944ae2040db6eef6d5caf57a36b1baa48458a064616f21c6dca5757ad5f880350dec8f5707a27cbd5b7b
+Entropy.11 = c41f4eb1d82e66940ed38e18dd372907ed1c579a5a92ad63
+Nonce.11 = a0d3a5c0f8db3d6cfb9bc4fb
+Output.11 = f2b2872a29ac51f4c5522408af7c7d66d909a557a79a027e7171a8714167776b5a372604371fedae1b173269fe7d8139b7f4093599736f8d9cb315820ac2061bef6869e97f3d33f7fb79ba57bcea537cbf0a96869dac4a69cda5ddad47ed5d96880c222e461e5ec2b1f4813749a94372
+Entropy.12 = 970c52538b1d5ccf06c66de93301cc139bdd90307c05d357
+Nonce.12 = 6fcbc09b40f49f502e3bb557
+Output.12 = f509589df9d4734a333e04b2a920703b9daddc16da84bb798f77a26500d584d99099042ce5cd784c57135a26470864873b83707ea9e0adc7bb8e930d5184184985348c44a23ba2a81a4188909d80a88b611322fe621f53e0c2a0c0312bddfdd793d1eff95e4a3e620f83a3e41fa8a7cc
+Entropy.13 = cfaaa279e934c56f0f5be56aeed7d634aa1d4d3b423a2027
+Nonce.13 = efa4ec5a62f2d9eebac36340
+Output.13 = cc15948050d2b54c4275155a37930aeec88c9e023c07bb7d2bac4c1368f11fb171fa39c4cfdd16d1bdb20530897e379072179686afa8f32c2837920fe6d4bd62d23da391dceb5b3e46accf7d51a621d550f5648b857bd0f8b91e89a3ad887f8fdb64cf943982f2ed718c29ec7343d3c6
+Entropy.14 = 7ce7dd98c93953a8b60d395a68f03b8919931031e8f68bb9
+Nonce.14 = 1c217188f9c7980b8b03b41b
+Output.14 = 58884a4316fe8104459bb339a4bac08d95461ad8e58f333eae5ceeecbf2d375e8fbb82eb1d29890ee0c56037bbbac8cd8e202d7ef05ed7126a15064699b9dfd4523782aabc6eaf21f1727d02c1311f5812c4b4294827a75f1cd6e6dcc73ba45ea8fc5f2647dff725f5fd9bc64d7b21ec
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 430139af14830cebc8535fabe057ef9ec0a3b7cb47106c79
+Nonce.0 = c6f2576782dff27296a2a296
+AdditionalInputA.0 = b319a1e8553eedeb9b0d5d80f849347b9c7284891bed80c0
+AdditionalInputB.0 = 5228537d742c8258ba5ce48ad6e64abd5a1a14dd112acb90
+Output.0 = 56aab8ad28bed8464370f88758392a62b38f855251a84c2da53de74cb9f8e10587dcd06f947ea43e7c6b74245a09b36e6fcab5ddf128f86725b761537dee9fd5c3275ecc82a0fd9560f241a3c090d9ce51fdea471d2b25eaf721cc28571c727e6f113deab9f8dc07a947597a99ca5810
+Entropy.1 = 49382c010e9a8860c6c69fff10769772bc477eec81a93e18
+Nonce.1 = 8ff285a0a9f2e09e98a5adba
+AdditionalInputA.1 = 746b3ef3eb4e349d29edf3b7760b7c9c21b9d866603e646d
+AdditionalInputB.1 = 9b101e1c311bcab2846bdf3b210a8f1dd1d9fe6d5f8a0533
+Output.1 = 933e7f90201ac2f3ebdae180cf263cfaf3f60fcdd444be2b72c802c70661abcb2e11a5e7ff7eaf148d5431ed9c653ebe7b74f1dec611b1fa13b0dc07fc7922f082e2671e72bafd7720c9f12897fcd97b238ccd3e172206c444f0846e1205e103752b986bad3e0f203a28b90842db151c
+Entropy.2 = fa92d942dadb58fa5782c5c7dc7eac7fae284374a34499ac
+Nonce.2 = 8961a2dbf2bc76f2051e8e68
+AdditionalInputA.2 = 853a4a89574b7495259bdcdb0b2fe2e675549ba9a4dcce89
+AdditionalInputB.2 = 15a7a2fe401781ee9690f54931b7fbf0fbe4219dd0a44eaf
+Output.2 = b81dfc35331a50fcf057c003f9fef898018497d76a45b2b0526f8c95c84654aac9c3d5fe54ab04cf9395f411ddc329605dda3b3c1218861124862ec2936d4e66b4d2695aae77d1e3d9d2e47fe3b8d69869755f5f71890d0b2d4bdec23b280af78664ef764951e2309ba52a408678933a
+Entropy.3 = 880306ff24a048b5c3b6b3d55718f17095de78a63fb676c1
+Nonce.3 = a9202a0873a99eee6f89bc49
+AdditionalInputA.3 = c3221d29928aaaa39e7b1ad9d0843c8b8d4ece6a8c34beeb
+AdditionalInputB.3 = c724b25df7eb92b160e119060fc4fd2fc95f603c0e395413
+Output.3 = d7150810c935509a5264731f9c5f573ae471ad9b9cebf758dc1cf4b3cf46a3a456345bf7e7a3a6ab190ecc8c9f52739217a0954e3e903b5c940bc874dbdaed2d71d635faf57a265a26c79fd345de3e941d5edbfc0aa0f60a942e78870eb2168d489c9453da3b297866af7384a6f102e9
+Entropy.4 = f8d93d2bab63073e9896a6fd0e2954614a62f8afdcd54577
+Nonce.4 = 00dd57b62fd0b4668f64313e
+AdditionalInputA.4 = ec775671f95aa03f2ae104b9bcfd2f2a5428c05d6d4e48ab
+AdditionalInputB.4 = 2bd5c7e40a9a6e0c5c5b56b1da1f49aaf629278d5983fb4c
+Output.4 = 48b6447769f6303dd3da7574e3286d9812a862a971b67667661727445d66b67741c185ba78e3af2a628e0ab56715d2416c0bad1f7410532146a3cddf413fc3de300dc2907844a70084d6c5b826e3fe1558e386571625d52208f089a7504d38525f71dffdebf6e170f88dc2ab454f8fa9
+Entropy.5 = c5345b4937d9f864b2eaa4224889d5eca16949aa17de73b0
+Nonce.5 = 61021a8feee8ca0b43830f70
+AdditionalInputA.5 = 2b44e417cc1414189ebf39a43acb03e17985ac4708019f8e
+AdditionalInputB.5 = 055d7a8fc1be9dde91593d35b4cd879b8e10c9a5c384cca5
+Output.5 = 1432351d0101bed2d4f9ac25d5177e7c68a9a4cbebfdb18e6737e5088fabe22527f1588d6b912fd8eccc0036180c024d9c41da28d19f1629cd51ba1a7eb17831b0b044117c42406b3ba1200edf09be8a6d2f60170ec910cd59103daf711527457b8cc1137e6f42b5805d5361303a0594
+Entropy.6 = 587d0620ac0b9567030f746673bccdaa3bb5cdac5daa8921
+Nonce.6 = 7e7f089b27b994b4e719d411
+AdditionalInputA.6 = ad7a7efcba76a864320b2e90b4092add56973cff3ec79119
+AdditionalInputB.6 = b1aef916929de5478592cecb1c7667b48c3e96ab444bc362
+Output.6 = d44045ae17277e2bb0bff4d9eeb5986412ce0149b2229f112a89954377296fd51763b495e39fc079a7f2793f6d17a02b91d5a3b77c9f4f8e785d4d1cb9adc92632ef7118ca0e216c3fe6dc6570a897475db079227129589a5898a3ecc2f2a1ef2174d10a8d0d651d00d25ff6c276a41a
+Entropy.7 = 022185265b17db2b976e91f41a0b3a951a68c4f92c36dc49
+Nonce.7 = dae4e594c80772163450b21a
+AdditionalInputA.7 = 78ae0e48a3297aebd280ea65666bb3461c6fb9e54a7e3a1f
+AdditionalInputB.7 = cdf6968e1a567f8dfa520f9fe25159d1a725d9fb4f1722a7
+Output.7 = 4349225a5de8113ffe22d481627d8c78b8b68def1a5659ddb1db206eecf016cd3a4cf8c38e76ee5864136b6b97f2d033e5564b828353eb09ce5db37e088f4ec09c909e61723c9b91f903892b744a4c40d6ce61c9749b06ed747adeb64157b3b0185ed7b5954e8fb98e1fb52aae333c55
+Entropy.8 = ac55e154b3311a2c7be4a0c408cbba78f3a48630835fa7be
+Nonce.8 = 34c6e762464e2384201a6ea8
+AdditionalInputA.8 = 6ad9b936c9ab33055b64830e724bb0d16d290fc13e01c425
+AdditionalInputB.8 = b7a31d8e7dbe17c18d050cbfa75a6073ff035cc627bf6da9
+Output.8 = 286831705b2925e20eafde0b6874ddd45e07d018a60ef1334d23517404f160bd1964615aa74d62932da0f0931ab1a69aecc424411f4e6e8a97dca1ae9d6a2fff7afa581d60343df4017cda7252ae84dcadb2d00b394706b37bae65f1e2d84295060a9ddcf36a501fa49abf42955b9e11
+Entropy.9 = d776dc58e33ea42ce4185ca05e0d90a14cafcf2799742a27
+Nonce.9 = bbb8c671158d7ed82b5166d3
+AdditionalInputA.9 = 5b847d0672e9e95aa343afebedf54f0ee6e33cfad7930284
+AdditionalInputB.9 = 1724f6a622b9f0d7aac5b6e19b98e2d8090099451d688173
+Output.9 = 14a47165883051d29948f128eb1cf77299e8f058b24000c405f17f24465c896e6b61bb36e7acc10670f593902469b44b7f40b2eb0d347b5d48fec25d2e0cb2678ae8bbf00a2390a0ce3aff785cc7fb13857e501860c35904183a491a47542bcc39183b884d52c21fe13f0c25ee873fe6
+Entropy.10 = 3cc646a8d0ccde65e89555cd2c48b7f2e5919b2f41a8235e
+Nonce.10 = 57485fb5a8f3a0c09fc8e7d6
+AdditionalInputA.10 = feb5fc30cea5a5db9c25706bfd545d0a75df3478ab19652b
+AdditionalInputB.10 = f59b59f2a7ffb0d783c4ab7015c9abf80f48b079857b7544
+Output.10 = d9b7a10463f0902d2dd9a99af80001b391fc921a089f3839704b55c4e4f86e0bbadbb54269d97df19976ef5b7dcb50637318402ab292ceae5138923128cb75f0f865e69d41a6ecab75a1150b3c2659e4abf1e4875df507f18a262842d664ec7f8d71aa04f791c4c31b3f3c6eae209bf3
+Entropy.11 = f9214a2de98cbd59b244ca46c0c511ef616ffee2c3f41261
+Nonce.11 = 57c83bc36fb105bb19b7bafc
+AdditionalInputA.11 = a01076c3a475016ae8e46513623e537b057813764551cef8
+AdditionalInputB.11 = 3e7b09e576f932933e9b14045d11f4b88c39921e12f1bbc9
+Output.11 = 252e68c1bff523d188258ae1d9d5f44d280f589421f1652b5b888c62c6704dbec0759c7f2f071f1cd7cf083fd2b9dd0e8cfe6fd9556d6f620fd8466f3e1ed6c31ef6466c8e99684c00b02ac6997a6cc108c470f5a0c6fc7d70433e1c39b6730e2b5b13422abe2e3160a57a70e0e8a344
+Entropy.12 = ee0e3d3cacb18ec69645fa3279985c716488ee1d1fec9bd4
+Nonce.12 = a5f85ab349962935fe4c2608
+AdditionalInputA.12 = a18f6f60cb7cef4278e1e9d835728e2ade674ebc9e6e5bc5
+AdditionalInputB.12 = 22295318f4800fcd6d163d56a7171be86e57b3ef1680f36a
+Output.12 = fbd04567c37789c3301d91a48dca6a8fce4d6b829b2600f5fbff63e3477667aa1e098482983de8454b3d5f63ca9361f9554ade7046fac240b3c1528e6a1923f5e248e597f41766d79f30a69f05f98ba503c4439b5b024590917dcb8dd0fee81d3dde60a9622800810f9d2465d2190e8c
+Entropy.13 = 765df0f66a47d18d50d0bf3237a146402647e19860a16d44
+Nonce.13 = 50ecd13f3df706b5367d0a17
+AdditionalInputA.13 = 18cfeec15b0b18df9838463326f881fd800a2d0bea797640
+AdditionalInputB.13 = 103d383871d01d7655280890bf365fd02bd9995f09884e33
+Output.13 = 5230d26fd9d2cc4fb4c7a821c8793a344758cfcfd7a8047746f534d3785a777de056b23dfddc7a5e1b2d75741eb98a5f9ad4b9d9a3a5fe975d9362770a7782603dd93ef5c422a02646ee7416ea9d205394ec01c94ed3cd4b185da1dcd09733fdeb18f28049eb12ce8e5fe9b957e9690a
+Entropy.14 = d08a80d2900213d521d677c7ac09ea9f9bb0eb83af28a278
+Nonce.14 = 1e57f0956160918bf50af159
+AdditionalInputA.14 = e73890b772747a356ee1527501410eb5cddef015a8d6fbd7
+AdditionalInputB.14 = 9145caf79d0b85bb7874c2dc82d52bcca68225a18de258cb
+Output.14 = 4ce4c45336ed4bdf4004f326a049c195c26ff11aadde90d7d035ce277a5b158577a7e9971063ee9c0b5063ab1f20c90f619137c2f4713831d18f2237e1a3d522af9a585e5f43f07d911b8b977f6c644784c9c02238b9fcd0f663c8bc1913f783c200b388b4ecf30246c7120adf3db79b
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = d2c3aecd6b8e486cb76eab38e5ebc37b5070f6a790e092b0
+Nonce.0 = 0f64a8baea52bd3afc8b5dcb
+PersonalisationString.0 = 858ef40692b7f7e62f3169fa8a13c98d8f6933e50ebc8c75
+Output.0 = d12a8f8f008459664f44c573591dac13151f862af5577578e3e38289743b8a080b907806cc44f9c47332b1003da2c21486395bfa81ff6187cf8ad8810d35606376e099a1933ab6852209573c8d8a0e4352dea51caf95052e5f6486ea14789e4d2c05c9472f1183686340ce301f4fb6c9
+Entropy.1 = 91bcbadfff067f44a0cb9a1b4f8f438e03c9b0843e27ac3e
+Nonce.1 = c291985430f9c5b07fa1eeeb
+PersonalisationString.1 = c641e0b1ec8f43159bad85cfd577ce65ff567ba7d00f20bc
+Output.1 = 3a511c4bb4f326ac0ce253c4c34051bad1b06fc6b7bb047af3fa49be2c2786390d513aa787de6dc249d3cb6c8559774f477af2cb0046d2e0d75fbff5be4e7d31bf148df55339e1c1c08e96529eea8cb931a17625605c0e4d52c4c8360f33149e5baeac5aacd9b7515ea53035ba15fe31
+Entropy.2 = bae11100f3b038d02df5504ec3586710b453b141d03ea2b3
+Nonce.2 = 24f397b2eaa88a79b4c3f5e9
+PersonalisationString.2 = 1f83c3423b5e0cf93f47c5c9f6cbd572868c3eee4598a631
+Output.2 = bdf0c385401bff132bfc64bcf6f61bb337450f5e3e7c74b062c2ddaa657e5b29ff1bc65a9052b1cf9d620d999dc9031ced8b301f09dcaa0a830ff5f93f837dd118126e89f7c1f589f65de29bae3eea425f4e7409b79885f7724d21ceb52677e4c823e37632a03b9ae46fba675ce4a02a
+Entropy.3 = c2db152b8262365b4bf4aa660b3e070f12e6a14661224adb
+Nonce.3 = a5b7010cf753eff0d8a2c1cc
+PersonalisationString.3 = 723f791c5149d19889df6a7fd26e6f3515e929c573f4ee9d
+Output.3 = 4f83a33fe344b532956bc1b8434b013245e125493748f6e607c5169fc05e2474c703f688e896cb518d2c97d732de8f9d71b1d21e83483875f81069ca46d276e0f205079006d8589b70792abf143e141cc9b806c5209f4b531c6638393d61194e5d0525aac52372aefba937dfb4cf6b8f
+Entropy.4 = 7c4c298c6f162ef881e9efaf353c1919d2ff61c663e799ef
+Nonce.4 = a8de0d8f94afa79c44743eb3
+PersonalisationString.4 = c9950f64970dffdbe517d6223402230c46cd2f1e56a3dc7d
+Output.4 = 190f43d2b90ef83a1aeb14d400e6ccf549ef524bb4e3497a7b3e3cd013091049da732ce906f038cf8b44ca9a2c4ec932af1713e225a5a0d4e0263a04258cf205e94826cc855bda050e45ca63d0f77011b0f8b8f4d3a6ed13b3192f1c1bf77a0b640c038821f11d41b4f88b91d068ee1f
+Entropy.5 = 946d612a20f4faaf16e3426e903da5a6aac3c3f5d2929684
+Nonce.5 = 87a348f5273c351adcee6d84
+PersonalisationString.5 = 473125a5f41e02787ac3aed779d82879767bc0b99e9d229e
+Output.5 = 269a92f3f76485d79ac532157b1db86857e47d06d31a9baed10f77ac14535ec3755f0d62d5ac7a319afed2c97e80f763d1a34d9081c930a51e0ecca69de5993603c8fecf48d2724daf0beee1a2121b46a722184201a1e1d458f546ac2ad7efac9f6b1dc04b86d6fd3f338b73e51c0dac
+Entropy.6 = a2195db288fcf466dcfdd2dfa28eb5f179523432c44a8d9e
+Nonce.6 = 9c646dda740c309373503d49
+PersonalisationString.6 = b653612c7c4c76f2a4280ba9b7bcd7a9ca4b457734429e95
+Output.6 = 0c0304e64f89c28a21312d33e41852d66dd0fa0b3182d72a7700218f733f9800919c5c797f0954b06225e98b1141b3195c65ed24b2a6803d8fb61ffe122101844b452ba5393abb4761c958a048a62632648a5fbd814e42b1085fcb90b73671066ea0469b50b8ccb26ab8ef248b6e7f9d
+Entropy.7 = 09f28af22f2c439fff5c6af171b86d9201c7dce8b2405570
+Nonce.7 = 27c07db1c3e3678af7382b3d
+PersonalisationString.7 = 6df87edc7dfdf3083d217487b89aa47447ca9affbe5e5592
+Output.7 = 002be4fe83c41eb3049a9f1557047862e041bd60cd35b294c7482de1c91461dd533fe4e214f2df61010785d468f73e1f869197a4d88a630ef6d2a5d3c0b50b4b7fec387010f6343676f6a04bc6e508d8433fd3fc4312584c8b7199866cac5ba3e7284f5bb7da65d7cc88e8d3d49b82a7
+Entropy.8 = d8a0bc2b9ce7d23d94d6ee904a0dff1473b11316f851cd16
+Nonce.8 = ff15280c224aa6aae3066f65
+PersonalisationString.8 = 1e3022cab1cbe04de0ab9c8ad2998db3553b8b608c3d3c1a
+Output.8 = 20d424dc6924a19008a710de4665193bf83faebd4f239731a3bab01fd4b990c9770ca8d361cca9af6125fef5f5043717b3647e74a44258365cd729b958b17ea92ff7cb5f4c87c131dc6bdb67dbd85bb7c663738e1ea9b4b94f169488b1f4fc1bbaedcd259909b85ce5c7d5531bc8c65b
+Entropy.9 = bdba37524b555c142daa35562079fcbf08166f09a439f69e
+Nonce.9 = 3aa829e7919f1c9eb09a63e1
+PersonalisationString.9 = f3649eb1152ced76f287fb5415dab4930fd29e84e05b1186
+Output.9 = 3bad1871d40135e270f1378381e09301b3411e5a4a8d3347724e5189c1e92ab74414541ab8e3ac140133534611200332a05020163b77f757a4ffdeff7e3b85a50eeeb42689b3476bf63ec6b904a4c2a60be64e5f934e0de23f86261e2a5b8fd2c4d2657711fdf3c4fb59051a6d8e639a
+Entropy.10 = 0d889f0d95587ded8068472717b617c8ceb69298db344b6f
+Nonce.10 = fa8bffc02a360841b4d3fc46
+PersonalisationString.10 = 19d290761d2856e9c1e1dd2b35679d0cc1a0757c1a21408d
+Output.10 = d655db972f521ccc3055c4887093f7321fc21cd0f035020f4c15be34fbc64ab68a2bde5294f6e5e3f64b6f38e1b49e05d7c0c4972e8c9a6331ce1c6db742d6be2447306f47ffd2ae1df9389a150f0961be5077fc0362995b6fe0ba36693b6a41cc79c25ea0f75bb45a8ef54160e0f47a
+Entropy.11 = 5405f8b990b109536745533c43bd0126be9dfe88c17d50b2
+Nonce.11 = 29f019f96913ff7ea46ccef3
+PersonalisationString.11 = 991e58db922e1cd06211a35b393fef2ff78f114e70e33cec
+Output.11 = b8688fbb263c38db01dac9d67051fce737fb6acb6ccadd44e56d40a2d1d20e84b895021ef44c45c04175bc8f11ab3620d685c65b24bafcd1b064929c87b465266b99b6c038c912b4aedb237f2a7eadeeb096fa2399156bc2da6d4375683753f81fe18fc8ac0fc2472a20ed6f243a6a04
+Entropy.12 = 388955e39a1d0c84effd224f8637ddeb2dc6250fd2aa3237
+Nonce.12 = 43df01675b45d6af47f02901
+PersonalisationString.12 = 536d92cfd3cc5ba79ad4717d04a694bcc4ed6d911ac715c7
+Output.12 = aee2949fc76d80fc2faf4d8afee1d3be3a131d6c106601e7f43b22a28983320a8ee0880f72efae6c172bdf208d06231a2d17a497207bb922210e850d2d1a03037f5a71c058fb170d91eb96dd9f31ed5970382c7b7929f5a8abe495ae57562683faf889fcfec8074c574224de29e7d5f2
+Entropy.13 = dbc97c6aab6ae3674b4f962adc755265dfb525364477b160
+Nonce.13 = e7cfab7d59f5dff3d69d04be
+PersonalisationString.13 = 102ce2c09246c041187d63a17fc7bf25463903b27b5af110
+Output.13 = c58d25782af2737c8ff81b9b98d63e1f7ce58afdee6ec032450669dd1ed9f0878fd31471f937a6af7fb81c1a81fce4bd8b4523c369798b1cd8b6477d5bedfbcfbf7fc35cfa2db9ba0e22837aa8f71bca9f5c41613d839175739c1d1384fb615a0364ae5a6ef8bed781944e0dfca6a6e9
+Entropy.14 = 3a32dc87d05cf806884f2ee71e881d8d2bdb4f3f07784ae3
+Nonce.14 = 2b884a75ff571f92ba1eb965
+PersonalisationString.14 = 273f3885354c0a8296b0862e19157fbad69578ec121cecbb
+Output.14 = b60362ddfbb4fc41f4f5ef353fc0fd8f31e139876a3af0e69f9049aca46a5989ee3a1ebb6cf14f525c3d8a944f4e88e030e020ef6551289c93f5c6ca2f6bc495cdf49ac91bb86e4766ccbace5f7aba008390d2b6dfd416d63ebfe07f5d583b8f9916ebb54620953d0b73c136de06f520
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 0241d63cf22045db2d6aa18bad9bec76d43fc55dbe8e6c22
+Nonce.0 = 4081b2431f5ce123946feaf6
+PersonalisationString.0 = 2c3a641b37bae6a3260ed0510402ca6931455cb90aace7f7
+AdditionalInputA.0 = 84644c1ae70a6478d6afbbbad5d88ab111c1f22b2312b6db
+AdditionalInputB.0 = 725998f3eb67c7b9bdafddedcce3706deee41a2acedc1904
+Output.0 = c7075fef6eb1b4d561859c4480a13414c17a5bd22d83b83fd500d0ca287dcf7d7aef8145deb9d9f897ae0bda9c8b1a3af3953dfae963c31c6d2a6bb9f11b27e484a35a4e1cdc3f1f5085374bd3165257b8be5cbbf3410516ce4e50a5a06c57deb88e2a76e55d964f0c985e6961e6eb65
+Entropy.1 = da578abf4773283d09843bf757c6876dfc8bad170b6a45b9
+Nonce.1 = c265ec44bd847004853ccdf2
+PersonalisationString.1 = 4e5e5f01789833a9612f3da02482d738e7fa1231f1705f86
+AdditionalInputA.1 = 19d214d3f9b0088d67b0c0dbbb775c3e59277fe70fad4b1d
+AdditionalInputB.1 = e0bfd2e0d0d2f16c8989c4a0715f65e9f9bc8ebf63816a4f
+Output.1 = 6421fb3e06eb575d32edb1e86a1039fd57e82044f84578ef68da31f69aeb4f3c86051dc3a48b46962692846d71ad980069143381d21512e1dc8c41b8a7eedf0118c2761608f85efae95586a2cb2ec04a14c64d2816015c0bf014a02ccec86a5180bba4b945d29805e109bd95ebcc4037
+Entropy.2 = e1a37319a3dca29441f7f26bb6822cafcb5a09b7115b6ed0
+Nonce.2 = a2f066886fbb964b059d2b91
+PersonalisationString.2 = 2d310b2bf573f6b09d3c8b18bdb3237b43b4e28d82a14e87
+AdditionalInputA.2 = 5abc4eb0a77210760d8a5c3075f0327a6d38ed5f5d7e3d52
+AdditionalInputB.2 = 4bc482a3da0384743acce6f18b61ca3b689979649c33ce2a
+Output.2 = b1f3cd09568b6cfbff0849ebdd2ec96c569a7db2356cc7697f610b112f4e518c12dec6f8bcc4156fa3e40bcbf7969212b2cf287ab283fdfeed7ae39c1b433b26990bb4436329092ff3613289dae01390ff116c11db84ec85e92c5b2c9acd14f34d50de3a73a6ed66ad919f1124b81296
+Entropy.3 = 7a4f581af92c248f398f43f044af0bfb41de6e203d54b7ac
+Nonce.3 = 6637145979fed702de86cea7
+PersonalisationString.3 = 2888dd51726850fb20e5b8c75d99ed3f9e92068dce839119
+AdditionalInputA.3 = 3c4150870b101e882fb6602e053e08d099e6de9299245473
+AdditionalInputB.3 = ced202e9d680493dfc3650976467e9822c43e37981c28f3a
+Output.3 = e5eec038e2acab496ed13df71e15146d4c24f99d6fefe760585fcec5454b4d05898c60fbc0acf461ed792bea4c1fe38ec8a021d571f94321c854e1330481af0a36ce6cb4b1798bd9ebc835e8da72104443eb469d58c91508412112e3987b1bb06fa1c1aa205a68c302712877d5293780
+Entropy.4 = 2db0d2ae18cc07aa8ee46b91659383bf54869b74d400fcb9
+Nonce.4 = 8d116faabaa71362e30dd157
+PersonalisationString.4 = b2e94d8feff21126b4a03d08972ae0ecd22d67d9540fa3e5
+AdditionalInputA.4 = f6c5ac82537cdf7db56d06fbe05956596f757b8615bd0e33
+AdditionalInputB.4 = cf62d8e970fab9100a625696aa5607928d578a3676378df2
+Output.4 = 9b152ee43ca64dca2333026f6f3b6ce5154560251f2bc6adb4fb607d70c342bc1865cf0931869c2cf3da644d8776e8a23c2b45695baeeaac289a7c1e60c07cc49cf6e13935705411edaca4a8d62ad2f70f3a2e44523db22c31725a5d33ad9d49a134b1e273f62dc25c1ea78b42cecd66
+Entropy.5 = 7229e975b28980c469a0ff2c3ef3e451d7e953ed02902978
+Nonce.5 = aae67b87c06fb82404d43d2a
+PersonalisationString.5 = b10a561c1bab3579c73d0d9addc09524b09adf59e2ae5513
+AdditionalInputA.5 = 44aad47c5c47bd42d49e1e4caa71f37e65e132028ce9aa0a
+AdditionalInputB.5 = b5319d958dc4fcd35d486b66b5404772298d3977c43836f8
+Output.5 = c0f9d2147a4e1fe67c2dcc539cae68b71b7506443794b187b354c5b79088b2a7668fa283745fa72c678baffc4a85a5df25f36b90fd51131270e1e060a980b77e73eae8ba0ab3906ad8b8f68802a4c0f0a224c61c7d25686c008971b02ac64d79b712255d9ae2e101bacda80dfbb86368
+Entropy.6 = 3cc5a6f7cd819d1ec704549504faf7193436bec660c5c69f
+Nonce.6 = 46aa461ef2f388d96c2eea12
+PersonalisationString.6 = bfd06b09238375936906c0d77641d14e1314ccecfe9f6250
+AdditionalInputA.6 = b6a6d541100a8c75ba1a32c7ae4fcdbae35b93e0a8cfb338
+AdditionalInputB.6 = 5312857c11926becbb30a79d65a561031b4af9e82f5899b7
+Output.6 = 00abb1109e8a3a4c63f4d84d10d458461c8d84a503bf310854733bc75d8f88c002fad10375c9262760602088e74d481a63bf0b7d8cb30775f5feba5184f24f1d4dbfb26a9808955cf9fc076ab8780d7daf5ce8f2276ae5fb0b198ad0e138edeeac9152fa17b88530db1547777d4d7a40
+Entropy.7 = 2aa779757c7bee97711302922618f38d472566ac1809aec4
+Nonce.7 = fa7158354e9eb586fd883a70
+PersonalisationString.7 = 978aed038578af79355d2fa2e01860f586c49aa8feec0e04
+AdditionalInputA.7 = 832ff8d776a44d4f96d050d1f43e829592176aa9efc47927
+AdditionalInputB.7 = 145bdf6bfdbea3ff4f11a423f5db62f1c9bc492e6ca86b94
+Output.7 = 23d87eb9943a92ecf15b7aa77c9858e410319b096bf408adaebe9f044deed5beb32488b1eb6f7f46ea16b2bb93a018cc945c785b279e7eab82077e51db2100df44974c5338f06c8ef9992b324707c2f9efbf5e738966e62222fa2f71b5dcf9b375914145f7066c4429ade18ee648f987
+Entropy.8 = be05af7bef569ccd23529216809dabc58a4890b05fbe5ed6
+Nonce.8 = 8f00a651b8887b9dd2f1233f
+PersonalisationString.8 = 67357bb357785a8d53da2af35ccf61dc4820608fc3adaf9a
+AdditionalInputA.8 = 5ce79faf02293c87add7c63de609528082d74691e4eea8d0
+AdditionalInputB.8 = 4975e65fabd309a6cbb80170bc05ab5ba313ff13775bedd4
+Output.8 = 6fb057c696b4c8a47e1de3f345148c0714442ffdbfdc6b328ee72c2e82f0da2a22a872566b57c03b1f0cb41b70e38f0d4abef72bd77fa04de8635a459ad5420ed0f1dea6fccc7571427dec89624f6e5f12705c929a02610236dea50ff5bf179a299cec73a41b5ae965d32c8ca9c055c5
+Entropy.9 = d69ea00a8560b148a74fa063aee732866093d7876b709ab0
+Nonce.9 = 42dd2d9b70c0e17555f9793e
+PersonalisationString.9 = e04c16d8d6f086a2cc528222574c69488088d76a9a12df75
+AdditionalInputA.9 = fe68d478fa1ff0c0a8853b517796e952e1a5830a76b56c2e
+AdditionalInputB.9 = 5f0912ba2d7f59b98a94bb95eb16f9982fc88fc3dad5debf
+Output.9 = 929ced08c42433146df7e957aa6f67079f1c7f330d828987f743169c0f587111c2d7217109a4b2d39b30598b7ff63cd82aa6c48df775dfc75f4d24ffb23b6ed81620a9ee41c7cba0c044e6042ad5fefef68e0ff14b8699a37afe1ae19027a14922225670a76d9e4075ee48feadd44ea8
+Entropy.10 = cd8667a51aa1fac667c4054df4d14fa897f4cb33fa10f6f4
+Nonce.10 = e9b2dffa974a3fb7636d3610
+PersonalisationString.10 = 89335a54141b74a4bfcdb1f51d3a37dfdc0fa0630d8a8a33
+AdditionalInputA.10 = f6ed975836ae8301b9dbb0de788d3b035dde764ed1f8bb5f
+AdditionalInputB.10 = b0cf5fa3043cf9d059eb90c4e575a8f188cfa5c02715b643
+Output.10 = 1520ce4c27aa4717bdc136be975faed28222e60af8de42c3f3694f6af93beceb7356140ac4bb604b8a9d8768233c13f9e7e03240196bc743f86842fe093b195a847e2d55a8b760bcb2aa6747663545cb0f42a49485372f3d2fcd9eb0e5fc0de4c05153963b8753fe4bf4cf7487b7dd87
+Entropy.11 = 479d6438ac864ce7239302ee9acd3bd15e392eb171a2a78d
+Nonce.11 = 5667a25cdb29f88061ee2552
+PersonalisationString.11 = ec0b576e6c9afd8664c783ef7b187b7eb4f034f6a219a1ca
+AdditionalInputA.11 = 3f4055aa6bddf9ef08c215328ea8ddef66db064f2a2c7017
+AdditionalInputB.11 = d102ddd02b14b95608c4c814975fae3b6fca57fb66da542d
+Output.11 = 3b945012f9b35fef79b52b9da4d9ef3b2b25127ce2d8bfcfb64bc07d729f99724502c254c6e4b02c0c0b7c8f8aeee9b2dfe8a651d1c2a098cda4164ebbf68933f0250d52c8b7fb9619eafa039ac7d2a51b0284ababa7c477d4e0aabff365b59c7b80ce4ebc081d41ac5c839709a5823e
+Entropy.12 = e0ba67211aca6d78810010642e73f4e30d67bf25d48074fb
+Nonce.12 = 9f07e64c1787938ea66c1735
+PersonalisationString.12 = e97c45bf9edfaa6ad88016fa376cc2f43f5fc44b0244617a
+AdditionalInputA.12 = 23e2148fa6d8ee5ef4d876788e37cbe7ea19cd83c1814ca9
+AdditionalInputB.12 = b34f2653541958b6a2877d448a04dc83be817389e4a9b68f
+Output.12 = 336eb3c3b4fccc3c2c8a455348d6faa393599f9190467731fd3e0e1338716ed9a45a150675964f40107869df5de8774dd0c52a094354c06e9f06b483828f3e7c1db51f4af8be54d969ed832387622283ead5520e404167d594dbb4ba143fee7ec166535df49bd43a1b9696722b97ad48
+Entropy.13 = b7a302a9291b09a0bea88e2bf215d38028dc9ceec4f044b9
+Nonce.13 = 18669a5360a5e238a30ef20e
+PersonalisationString.13 = aa10ec4ca4feca7fb443a3316db113b80d8e8d629e7952ab
+AdditionalInputA.13 = 576321395c959c1f417480659dbf4f09c4360e2cfbb5c0e4
+AdditionalInputB.13 = a6cea8017225b5e7254712b41f5cf1ec7f14f87da34fe6b7
+Output.13 = 43d9b18c335e549fbeb6664e2a2832303792143f166d38a9070e3f0b1b46f01ac88f8f06ff64d0d9c110632dfb81151b4a3a4816d40b97d32ba2c07647dbc7e5f07fb2134be939b8eb7fae0026afedfcb1d68213abbe6dc879b2b69d705369cc19f59895e4217a680d5b8c16dae3a856
+Entropy.14 = 9ef357d601bcf7f14df95ef542fcf28780754698aae5918b
+Nonce.14 = 146b75a29814266bb20f6825
+PersonalisationString.14 = 4c0391c33892d336bc615296033cc62e522bfdd09d8a94f3
+AdditionalInputA.14 = 69720682d68b7043c331b889ce6d3d83aa3d33846e9ddc86
+AdditionalInputB.14 = 350c63e7b01ecff4aa171f157c71f89a55637c2cac0253e8
+Output.14 = 63fc9293971bc8dc151bcc2df20e4b5c7604138e4df49fed323c9f1cdeade3d5d1c8bc89e507e5da1f38c1f76d968ee45ba53a3da35e693e00afd683817ee7da5cd2b0a657ac6cf95913c859c6b4a15449fe9045a3af03cc198cf10b2deb67c5c3e9cf9a40b8251de19c6cf3114bfe22
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 71fc858e73ed787eadaa38733cb5ffeb072eea80b09c9e7e
+Nonce.0 = f848717a0473168fc4371814
+Output.0 = a52ce6f1b31d66992e2dd6c5e57894f764a088564f6891b24d5ac7c8521b735e6728cb95b7c23f1ed03ebe39644fd3006f2e2da22311b0923f024eed0af5e359a27d6b59044b14f394f19a68d221971c6e9143753a85fcef5f245ce9acc971972f3c67336c5ea6c34a61fefdd9962ea7
+Entropy.1 = 587028c1e8f76ce745e9689ccc118674be36c7204d41d21f
+Nonce.1 = e925267d28e1dd4e6fe4514d
+Output.1 = 296eab44fab0bf62c413e5296fcf1f07d454d7df9e925f42b05c6b648012262fb04eb8920538515ce6bcf2504982c0fcb63db4bcf63ca8eadd58bedf89b59abfe6242ed7cfea2c3fb4d12b4d84be4b5849e71a8269cd03facf61bc27aa2d4cd99bb91265aa54dd03d134bfb9cf832a7c
+Entropy.2 = bb03984a46eee7f2a41530b4a96af56aca2e04dbf1dcba4b
+Nonce.2 = ecc5aeb62fb194c02c9677a7
+Output.2 = 83000ef8474b2b642bdde0ab1063d229e74931ec2d053041ef1fb84cd3ecbf07a5c4069455592387d7437ca8fdc7549f763c7a18e5caf76ddcc7e17e0c9dcd4530307a5f3d38ca33d331370b4605a9fd1e1295ec0c5d7bb6c1c70aa1a63b6da8a5fbedef0c572ef18056ddf536a391db
+Entropy.3 = 57dbdea7bb92a12135c8c4001f1efcf7c54cb12d44451dd8
+Nonce.3 = db4eda7e3e6aa1f69c84fe6c
+Output.3 = a232d6906f05acba7cdcb03084ffcdf4e56a7bf7e654d42e07ae7710f6dae9d1f92df02f249ad5f8e7313e93fa14fad64d17f0143c5035e5715606131dd1e1f6dce0128af84eb707ac64601a0de966dd0a64b370206dd00cba6aab2f7e3cad5bc6522030bece4596706fa142e95e1afb
+Entropy.4 = 906af4f88938fc8fbda3319724ec2cc413b5ac17290f3401
+Nonce.4 = b2aeca9df80294d337480dd6
+Output.4 = a2ee18e606e12f92accf27ff587a8655bd2ff6afd2b9d0e53693deaa7086911ae6c5895cc794953323bdc70e383b33571bcfb67d9aca27f2cf63b2243e31f7c5cbe848b22b5f90eaf1f5a5d92eff4304f42d5b3d4799dc24e47b0030adcb468a497f8b688989160d4f5005d9809a5aaf
+Entropy.5 = dd1e5493cf766a4b496452f2116cba41ccc8f57f6cb95a14
+Nonce.5 = bff415595d30532918ad8ba8
+Output.5 = 7babe6d85ac651a036074cc31a14b9b37409544a6ced441b4c473e97c5c91443ad68910762f5faf3ca9fa3a258d7e24a779eec41397d34c106baf31cc709a5b043f0ea90962b388d5746806669c6e93b999a96d23a9c87a8eddab6eee46cd546b868fbf8cb101ebfe7d5fe36b557b4af
+Entropy.6 = 758e40e00995ad2876689112071d646986533b2ab411b3a3
+Nonce.6 = 525ec489a9567c31cd4ce1c6
+Output.6 = 9fa00f4eb8b1cce59bb7949429ad926eeea463014ca69fd7ba1ab2dbe181fb535bfa3a891844dc4075c3638f8503a18144a6697e6b097027e1e06fbf0a652c55fca4abad84f5184da6a5377d37d29d7f8c938fa2fc9d0ae187d46e2b1b2ca64ccc568a6c551cabb490977932427fdc90
+Entropy.7 = 39926ef11aa90d6b9f65c298313f27ce31bf845d721bbda4
+Nonce.7 = 5d6d2d9c6393365b811065ad
+Output.7 = 188a62988ead6121186fe2f44203de6ee5de2f52335bc003587cfdc676b8e86acf84a3538de7c81471e20efcd1cc0e14169b71d5288e4664718ab6c2d04037447e7178a3ce6f28ecf8bcb411e3d3ff6be89ab28291838325872435aad78f3856e25bbf33854fdc7a973c08106d6fbe00
+Entropy.8 = dbc63ed9d56330ac6bd00ed75929ac14c4a59d8a0aee93cb
+Nonce.8 = eaf3f72ddc566e85377d5f98
+Output.8 = 9bf07006aab508c74ddf9dbd56f98f961568a84d7704f08caa32f1ef7c40647166bf77b25f036a0e59d7d5898b461fdff9b343094b8fa5ea697632fb71906cfb36fccce0e62b1afa59832375a09bac40ae79d762b4bc6a912599d93a6d1cbe4a577bc8d0f734dc21b992c7dee5c8516c
+Entropy.9 = 64127714968ddc1027b41e5d6dab51459aa682134b228c5c
+Nonce.9 = bd4dd19ddfbfb63269b657bd
+Output.9 = b90349b768786c8563211362410aaabeb969c0780955b50d7eeab669eaa7c86871ae777121c1fa6ba3dcb9474fafe41ad1e573b86310fc86e09abcaa6ecc89d8b0bef1c57981f4b673fef68473e9a2fa14c3e5cb42d0d37407bc99a661197469648e6706005d347d5e5dd905a6d698ab
+Entropy.10 = c2f31a71e59f642244b2739e4cedc85a94f4027b743d7e98
+Nonce.10 = b73f789e070f663b13f304dd
+Output.10 = dca57d85851119dabf202831440511b3d162760ce0c6f0613ef16ed5c92babcc989b42e7b4ea5f9c374e81f5803e2febeea8b19df3de2041a80f1887c335f93a6710334ed47bea388629447e12c9d58fb1274fbe9476a1448f2bd92f2b7cf11dc8c55949774adeed4796cf40239d6e1b
+Entropy.11 = 84896a00a3e8174deeab5dd358266d58c59586490b6267ca
+Nonce.11 = ee0bf931d1e7572f1f25338a
+Output.11 = 5feb955aa6720e98353eb0e59786857c8bf5a04e63610d975e74aa4304c5dabc9c0d2d2aa93e44b23751c1814d164cfe6e816aa3f6212e42c5316edd2fe85f60640656e5233a54dfb287efea2d78666c9ba7cbbe45147ccce53813dc0ff449292e7f83e069b827a241c07e8bed4289d4
+Entropy.12 = 409025abc3da1f7b1583e66a0d5bd971b2ff583cfbd036c2
+Nonce.12 = d00af7fc331768ffd71fb90e
+Output.12 = 757f23e57616b0bf3fd7be2d2f339c056052b43ef537fc925cff33d7112f1e2e6c244f2a7dc441f9b22249c39ad21b9ad41d3b8789b5a0f1d307a0178ca89afc2dabd08e6809246d48bd251fbf830b67036d94c0bcb395ec03a9f454e2d34e4445b2286e69876b2b2cc822030ecfb52b
+Entropy.13 = f8ffee199676bdf335d2effa3a407dbd79ac61c42c7cf3fc
+Nonce.13 = a75aee976130194789ba4478
+Output.13 = ea9a1cdfe63628be6fed5de00024130c5c4a5047081f8805e23a5ab3cd7f18d2f874a1da2dcb6dfcac7e7c170ec6884a80f50bc9aa792774c7f076868ea0809fb9e843de4ef5a7654777c4ab4b99e234a0bd4b76cba943a4dd70a8d045b9f6913f9ac57eaa105f29e5b8395c60292b29
+Entropy.14 = e03af342db03da30e2b0e5b8ed76c2562194417fbf6be645
+Nonce.14 = 6a9a5188dabd510894073f76
+Output.14 = 7963276f1054db251369a0b91d854fabaa3dd5b2343ef4306cf897bf964fc8b885908c4ada163b929a19c948ac89c8480170eb59b9a8d7d2d30ddfd1248e2c1795c69da81fe72d6361d34754f88eeffca2c31859bc8940d6662abe2622fdfcc28a1764355aaf46a2e00e50606af2b6be
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 65aa6a5872a8e1108802c99f211462fe7adeb1e348a8d6fc
+Nonce.0 = ecc22bd1aa782b3d6d130f4e
+AdditionalInputA.0 = ee53ecd96e15fdf69b5a2edb0a36c24824011611f433a7fa
+AdditionalInputB.0 = f64c72fffd55e3ad838c058f3a466910e561600007411b2d
+Output.0 = 8ac5a2975f2dba1078ffa3e69466187dfbf06efbfa4681ddfa3168610942b9dd08d966dc68e70d7d17b80701d86ee9fea734ad31cb6c210feb6cf69b31e0102f2f6e0e79af2846692839f19e82cffd1de596cc0875e20301f70b11b4ad6a96f58c51d0ef343afed72c4cb2b3a175972e
+Entropy.1 = f586533d6374faa99fcbe9d91cb784452e3830b250a212a8
+Nonce.1 = f956444f10f121cce327f877
+AdditionalInputA.1 = 8458e0de3709c4ddb8cd854c0bc2401b21bf394a1496f60a
+AdditionalInputB.1 = 4fe0d84807b34e14e85c1074250cb4e7e008b6719b5e4606
+Output.1 = efdcd9d452ef1467bab77046a628f719251a3b39c9337f1900cd14619ae39ca813faab5b5821647b13d3c4112ba946956cef41caf212e5693ffcc85af393790e14fa9f7f7a983728d9042f48184bc2b1dcc6571ec6d064925a0d6f1b8d90636e5bc2808e9348f85cd8c17c4c472a4fa9
+Entropy.2 = 58840a220de5982145beaf05e64c61ed8d3972873f143bef
+Nonce.2 = a247036f140d25a48a357b0a
+AdditionalInputA.2 = f8412d60164f333d7bfa233f3de9f65cb0682945bb88c1b7
+AdditionalInputB.2 = 9a959cabd4640f3fa9155b6adbaa190eb14fc1334e6e9a65
+Output.2 = 3d8085751a7dabeea14547ca92715184742a93eaa265df7eed43ce7f8ec9cd727240626755a9f188d92163dcffc543aebab964b31becba3e6d0f93bf7aab1c3dcd145ef2243cdc26aafb15904becaf3eb6954025513caacff75d565df395e09d0cf0da6fe8cff83358ba2eaf4ea4e23d
+Entropy.3 = a085701b2b400dd410643b978a01f102614a1a89b6655027
+Nonce.3 = b66ee045db56a35bb7dbe1d8
+AdditionalInputA.3 = c252a8784fb11d10b0327dfc63af720ea8c0772f930794b2
+AdditionalInputB.3 = d45aea79fb2545fc884fdaf43fcd602b399f12abe0f12b73
+Output.3 = b3e956aa3d60f0d773c38b8ff4057923cc56c03085b5e0257933a0e60c484872543f37ce0d72fcb49aa1db4dfb663eb81698e1125e8747cf4bf092d9f1db342e4923ecc0d2cf4cdb87fd5c3fa6bcd2537c5600dda3473de3f6726b12ccf0d014ccac5c8b4b5144d78b3b06eb711ed5da
+Entropy.4 = fd33c7a17b3ba0f2396ad812d33b67ebc7a9b6eebbd6a35b
+Nonce.4 = 9142ee33906c41749bd93828
+AdditionalInputA.4 = 70a76a263f87afec96e77576c272307058fd46eca409d5f7
+AdditionalInputB.4 = be7501299de2ba69cc6288139710bcae9d9b141730d2534e
+Output.4 = a620c69f20f5a418441b58b1cd46f7184abdaf698a3636d9a8d17342c150dbc6a23211b0abb11403928c29176aed880e4798773ec7d0ec88bf9da04cf72ad155a73c72ad24538f4604de18d03502394455cf71a1a50df13f6f0d269dc78a88a77a843ef01121122583e740b4db3d7a33
+Entropy.5 = f58229a0ba3a66bb237970fb71bedcc286cbbeda4f5d3f01
+Nonce.5 = cd0c9ab20c7ba472ddb4daa0
+AdditionalInputA.5 = 0610b1e755e09c3daed93b2865618a95288842376f4b1b2e
+AdditionalInputB.5 = 80f9038ab8f8c5c5c57e8eea9ee47ea304609412f1c27042
+Output.5 = f881957f68798e50085cf8e6686c3f2ba0e22a1a0e55bae9696b846eded49e9d69052b8100fc79b8ea6e42bb5d5faff0dc42e91b70223a21ee37dc7c78a66b2bf4b735fcbffcc65a6a9112774f34b7cf2cd61f394d9ebd12bd79cfc1f90fad98790458952e3f08443292a51fe23dcc45
+Entropy.6 = 3f67c314b303c394b11199a366bf29f49422dc0d8c2e745c
+Nonce.6 = 0f77c08648c96d2f9ee4e52b
+AdditionalInputA.6 = ed685ea2aa60765766be26fc9684de4e60a1938f5b9767f0
+AdditionalInputB.6 = 84f0341e1783a19ad77f82012a8aa435b424420adad4c9a2
+Output.6 = 5c67d72cdd9f696b4953c090cae72a7699d8ab3aa7ea5e5f940683521838415b853eaa23f4451a7762711a24b92fa67b7eaecc2df32b997135f995f51ea3287c3951e10376360b900bdf223763c2c6182ef557ae075ff826df2f0a13c3e10653143c7fbc446d0120f9d4934ea9750180
+Entropy.7 = 4e2f85e0e30d4b77a81fe03f0072a63e14fb56d91d841a31
+Nonce.7 = b4254543c0402772b11f2b33
+AdditionalInputA.7 = 7eb4cfcffb33bc5c3e32db92a8873494e1f4b3ea9f24f315
+AdditionalInputB.7 = 68400bf6c7d1a25ef679bd47a561fe23edf62ed08c456c47
+Output.7 = 4e55d17a5f4ebae007e0c063e0d2f784a7b90c98f4babbe02ca35c136c694e1ed728339f09dc0a037449baa343b76d5ffa9727e1e71923b3fd9f379606e5dcf48142835cba7c0454eec01b75ffdcd54e06d870200616a4199927613eea35d57580d59cb106e72868f16620a9c3a7e846
+Entropy.8 = 8e00284b79522163a48d08458395c037759d8d3cd5d9856d
+Nonce.8 = 6002a78c5b84ba504186c0df
+AdditionalInputA.8 = 77460217b43ac295e28696069b50052fd63330ea0fb3b729
+AdditionalInputB.8 = 16efa694e5238480cf8b396bd3fff50153b36698f34d24f9
+Output.8 = 63b0973c54b74abcd4279007de0542cd7e9cee7b7349ac2ee1fa011858713b8a0f7d0b8f87ce0917f062dc64efc526100e1dec5a9573f91c3c9bc6e9efdc0e89ba2a41fdaaccaba9cf05e8afbc5b9ed968a350e4755dc2051cc90f7a0bfac9f4f780f25bbac226be0f6535913dab31bb
+Entropy.9 = 144dd54c8a1496d4fa8b1bbb1a96dd79b0fb717ffb47e9c1
+Nonce.9 = 810046aae72f65d9064a428f
+AdditionalInputA.9 = 0700d7161587fb706398bf4419a7a8fa25638107dc36f618
+AdditionalInputB.9 = a5a924bdc512ab017844849aa171553150e95bfce83303dd
+Output.9 = f385b334700fcc0e600e15597381e87b384e84daff8fc4a814ced3d783be712524f8476afa5970a4aeaa3f244c56aac3d5a43cde5cabc15b0f8d158e5a270b8f3565f1e40e909044dd64a64202cc566c8e16ee763b6a0b089b66b3110903e24759bba8816b7487254a10e62b5168dbe3
+Entropy.10 = 941ed4526f9c1b0c70204874012547423154979fe611688e
+Nonce.10 = 79b842e98729ea5b57d798d6
+AdditionalInputA.10 = 3a738164f72142ff69c398eed60f5dcef2e1141716bdfa9c
+AdditionalInputB.10 = 6aebb655a33a336e2c2fcc0b98818a0eda0d631ece3cd461
+Output.10 = 62be719e892cdee6536ff7eb77dc2531fa46668da978133dcec91cd869e0f994f6d2dd54ebebb3e848f8223d4517f399d447db2f20f0e3377c28f6a0cd61b1de3a9574ab2c17d3d94f6acdba42bb1c11d3ddf208da0f29fa4c9ca1b14901f8c656e026c8d50203b52a4e4012b43aaf69
+Entropy.11 = d793374feb6e4fa1294d399767807b8e2ffd6be4fb715dab
+Nonce.11 = 4e42459836441bd7913b29aa
+AdditionalInputA.11 = e4aee54ca6aa9b8896b520de8bce08455f30f70ddb84c5b6
+AdditionalInputB.11 = 4a7df785f01ba74cd1941b61631109722e24dee8b63630fc
+Output.11 = e4c5da863bcb51832590d36149a7983ccc729aa221a1edf9c7d189b09ae6826bbf2c1a6083ed6d7a569f5820a2215537432481571d6cea83853bd6fb6fb5449eec5010022962997ddbeb6bb18ccd82f752d5a578ac23141898519de20b55cfab16b7a2468a149ec8bd77b327d4a47cc1
+Entropy.12 = f647a6e9429f55bf8ac8b2341517e86508bef8fc965df362
+Nonce.12 = 06a9eefb20422685246deea1
+AdditionalInputA.12 = cfa6870cf6998256855bffa6fe90bee3920dca2295e7e0f4
+AdditionalInputB.12 = b2f5cef072c18e657f55995471ee8f5ffaea95a91ee21062
+Output.12 = 877bf989e9a560f52f7ea099e472c91a0adb3fb67c4ca3ea042d8355978dee05dda365deb6b8b6bf1608b6a2e8debe8428f452fdaac7cb5c6079e604b907f73090c8da4b844e58a55ee427fbcebca1cb29091389cefb77147fb94d27412fa3349bf66bc6ab9bb70a6b7eb0a6a81fa101
+Entropy.13 = 16f7cae9c2c2e2c1803091d15ebb1a06d1968602a121a152
+Nonce.13 = 2e727ee6652a0a0b3bb1d0c0
+AdditionalInputA.13 = 55a44fd8a9538a4cb2fcaf06a5ea1d8e6999b7d3aa993e8c
+AdditionalInputB.13 = 27fe6ccb8fd9f20e567c6a733ec02d664e76b0e85a1661e7
+Output.13 = f9c5f9421207e5f18066a35deaa492da10861718aa7c4fe42d671e2ef1553b2bf617b990ad8931b6988406744030a00702cfad172daf5afcafd1d9b73c733924ebbdb3415145904485ae89cfcbba740bc181694012da333792ee72c83cd9025a82fc82f1d062a8b8545e33d1e87e0997
+Entropy.14 = 69fa4745f5f7c337984e593bbc765e26ef05ff226e0c875e
+Nonce.14 = d1d28100e997b21d1db76283
+AdditionalInputA.14 = 9b6c491387a2394b94bfa8b077cd43bac49117e94afb9616
+AdditionalInputB.14 = 7c04bea824d8aa7b19facfeb3a676eb51c31d7b92f0ca1ac
+Output.14 = 332b884c8edcb260c535a218001d421e190d8b9c6b856fbc5a4ab45f92149487f8563138312a42487969370440675f5bc9b21a75d2a8386867fdf861c8650e26af47c5efd81d9fc39cbcd44ab0f4cb10325fed6f5b7ce5d8111ff71e5d78c7d1f53410e5ba492b9f68ca55325ea8b318
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 82f80722b82936a3a90f7371f92ed1d8a17521598653b38d
+Nonce.0 = b67742c5943422e7b6e74dd5
+PersonalisationString.0 = 207e1f982da78ae5f0612517efac3a13f024aef04f20509e
+Output.0 = 91de62aab4ba484d0b419e7211a44d2665f4800a166d8621a33452506c3753aae6142b27cef8247a7170ad9a3b777e175b852e3b493fe100c5cec89c819d6dd59b42d7deb411b5d4a9b9538a1dd051e195098ef4b0a23b55351276e2adc88395140514c6a9266ff32de25b911d7e18cc
+Entropy.1 = 4d6d79e80207e6f7bc2f34be3b701b84b0ef3c778629a46f
+Nonce.1 = 9e0e534a3f9a2afe7bf48896
+PersonalisationString.1 = 55abdb0275ba50f84b63a96bff7938e999a4f2087c2c0768
+Output.1 = a404ed0511d6046f84cf8c6e97cfd335ab4d28d0a1880da9a15b523ce5ed3edff6f2371134f55ac29c4f1c730ea0bc6566edcd3c5a848fc85f7b8bef501f055f254af6bd1361b7d0ee0397d60db1135956750669f891d993760bc38715932f36207c9caff81601aecbf68c1da3104adc
+Entropy.2 = 2e71accf7079a2544a44abc2b92441b73da66aac771be4ad
+Nonce.2 = 12f5d93b63e468e3b3307cea
+PersonalisationString.2 = 76d40812c4a48bc75fb234d6eaaa5ab2ba8fff7f04f78ff7
+Output.2 = 0e28a5c44e4e7c979f34af183cbe6bdf95376064db25198f0990d45a4ff50ddefb0f248257bbb3199e9f046081b9f55abf68f3c7703e4de4ec0750c2a7fc934b0ad13ad7412936bb907a33f65cf0b25e06cd6b23486feff09afd1cbea3115d210ef6fcd01e8ac2924c8a658fb40d50b3
+Entropy.3 = 8c199b3019a1dedeb9bf42d55fa6349b378878f33f8c9074
+Nonce.3 = 5251ee36a7b5f8d676a19eb3
+PersonalisationString.3 = cdea66ba0ce12cd4f98c2127c048ae8701aa7641e09f4cf5
+Output.3 = 2ecc11dd488d9e1f7eb4c50f501abb9702abba33e2727dec27f3baa2117bf793da57cb3304102549d5f405fd72af1a9bb557d34cea00dfec681dd4ee4673807af4774616894762ff8e9634246b5dd6147398b7640e86e00993245d9575368c841c94b83a9d8aa8ad87bd7ff20f1a01d5
+Entropy.4 = 03a6b9b143701e2b668accb182d2326319173b4a911856da
+Nonce.4 = b2c5cc00d378472f661e9aeb
+PersonalisationString.4 = d00bcda132b614d8025214bef489fcfeec9a532f16a9873c
+Output.4 = b65c54cc7aceb322190c7228075e3811321168a8063fb0081dfb0c7bb52b4d83f81906f18f90b946de23af0871b9afbfa4cb749d5c7b2818d4a753a57cd270145671071704f6d3aced07864a3a443c11b232390bd8959476243526de19408fd3e96a598d1ed40230f8c8a3aafa48a0ab
+Entropy.5 = 8785e1954572dd3ba178144856f7c3a8f6c2d9ec4c903941
+Nonce.5 = 06c4e1c7eebe745b0c045e95
+PersonalisationString.5 = 7d500869fe79ee995b47701d0027a8439907b7a67c31259c
+Output.5 = 943431f66d874d8cbb1eb93b14fb10506e16f7eaf7cc5c09b60011fe4491796a16ccbcae76a4a31e16c13ea661036246017dd52fe32afc5ab0b688bedea23c02c30d02bdd1d086cd4a5c843b54908f5eeb7a11f1a29c6d31dfa4d004a66ccc8520c3f016077c4904836df207b924cca7
+Entropy.6 = 3d744caadf5e12dac7ee05b2716485ce3d6ffe74be1e61d1
+Nonce.6 = d68ac7fbd4608bdd8d60808f
+PersonalisationString.6 = 6153c6eec875c7336c05ae17caa9aee71e74de74ce6d8760
+Output.6 = ddc959d5cc7b9bf9cc50de20d450b2b91fee5ac90c416218933a90d453bf448e391d0df88021032db82ac82a79ae218aef0d622a370ab69140b79896b27de188aa6563dd7e8ed9dc7ace1b15860e3ae944bcc249a4ba9353a2512a55abad2cea26cb6c3811d835960764d143eb21cacc
+Entropy.7 = 7b2dc2121cc9f905afae63d19c012b37589aa5a1959ac85f
+Nonce.7 = bcdfff8bc3171a2c708437f9
+PersonalisationString.7 = 22bb071709a9dd5a91ad11c8aab5c8d33ec6ad362486330f
+Output.7 = f4a63180ba722f70204c9f65058863a56761fc76c9078fc28f5a5bb945d878c61dfac1af2598ec333113aa4301fe652b13a80f7e39c1cad0f9ea3a555888f0b942517cfc576e2c1d08b64a0f18258a1692d3f24376147847700c15d3690daa4b1fb76290be325ccc1445a0ce1bab5050
+Entropy.8 = 87301c8c4755737f7d4b53402f0aa6dde672f73335e388e6
+Nonce.8 = 8fac88676f79916cb94e7edc
+PersonalisationString.8 = 4822054e5b777ef1c84c22e9a64a902b50c3c792dbc54fbb
+Output.8 = 15fdba37887729e1b41fc9476abb8091ce43d3bb695d50a949a889394d1a8afa81d28b18e748d630d5b685b655a06abd82c23e2e8e82b3de3e7dfdd0b065536917d649fa9b69805be4c4c53c6855ba98a9f4194e7fdc63cf1dcd08b2991dd9d417dfb5e245cc7b1fa4a432a3311e73a0
+Entropy.9 = c3066b5b1740731e553444ebd46109e1eab2f88f4e6ae6bd
+Nonce.9 = 01e9f3ef450b23f624304b41
+PersonalisationString.9 = f395a173b9fe3598d7fe48606682a2147a7fc59c5cb84572
+Output.9 = 9a7aa949fceb393736655a43c27a138d0ea49eb6be7ff4076444bf9d3d36d8cad49506a90c347270cc00cd915087e55a683c3f1e0841561ef3cf923855eed9d61622cf08f906e026eddede5d025b6e7862539136f1e9823cb0bf20d43c023a70130c0d73fd352e9e7e24f7b224038105
+Entropy.10 = e3aba0ed7bf3629d7ca5d39113c152841c19fe057704de63
+Nonce.10 = 9f60ce4f30f99d30459f5811
+PersonalisationString.10 = 8f1bb66a0f1c5138baed9c37158c0e04a6ecf7e5344c3c49
+Output.10 = e1cbba70b4dc058de330f33a7b9ee76656c72b4b102cd2a38b428216e708c7d8a403e9045407de2de7f1db07aad1000e69f6969d21b71b83f7502ed4e638563bb212db5be6daf94e645430dadf0b08d72ea726f6a1bb3eced96c75cb1c9202ade822e386c1f6024a2b5ad02f132971f4
+Entropy.11 = 3e84bc6241f9af681846ec2937fd34c6353833048f548628
+Nonce.11 = bd2e9b42fe60087ba3b00fc2
+PersonalisationString.11 = 76a6f3cf8da4ec437d4c2ac4433c0c5ea9e777702238642e
+Output.11 = bdb5d00d8ae3f94d931886023393aab4ef42967be2c67bd59c9b549f215e086809a6fefa6692f3ca56375acf5798ec7a400938ed34da2cbff1b3284446b42536844242061b4551e005b3e83e63b61494f87148699f149608745bf0a9df5296675e0026a1255365ba8f33adff8894a332
+Entropy.12 = 1cbab75221a9c1cd75af7e6949b43eb3ceb07dc2895379fc
+Nonce.12 = 33764191bfe1e1085c3eb069
+PersonalisationString.12 = 8642a444814f7086d3271a1728ea6a4e6ad54a062fdcad2c
+Output.12 = 7818e2068120a003279975ea5132d2e6b2477bcfe528052203d8f114537959eb45e6f64a71cd9bcc53e99213f1c6ed16d1fc874419cdb46ab32ddaf7219855fc54e8583f1502fcee1b6362ce40a46802e14745982c068b39b881d3aab21629e9fad97241dac2c1a13f07ed9dd3d1dddf
+Entropy.13 = cc38ffbe80111dbda46003b743864f93ef26b297d95b20b4
+Nonce.13 = 5b25836b5ba143123661c6ff
+PersonalisationString.13 = f1126463017cfde28aca230aacf02544f3e5b6815765e6f8
+Output.13 = c036c23671f7f3ebfe9e4c34afce5b892a668572223f86815867f423a9c2cc704b1428036e45913e029d621f9a5f8478dff2a57a87cba21c19fe969898c2cb97e267bb6fbca6cf86da2dd437ae46a54f1d0b094f476715b425b35bbe988b1b28e54e6ffea2d74b85fe3bf1c208ce34fe
+Entropy.14 = 19970d8a70d136a19088c975ab0262e51d2cdc41792d402f
+Nonce.14 = 9dcc6c4317ff492d0d7dec5b
+PersonalisationString.14 = 7d30c5a4aa169c6dce156a8eaf000f9be0f8681e3282dbae
+Output.14 = 550a9ad9e45ba359d463c1e084777bfb2ee25ff791070a87f01adc04cd1a7e9e6ef334e477fb5cadd82381e0add8a39ffc222150f17b8bb0d3b1cd80948c0a5ee09a84ccfff6c9ac33e6831d1a84182edac6bcc25fe357a708f78db9a88daf553914cdf0bc7a9b0527597f73707fec8e
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 71aad2885a565b570c4176bd3d37ddae4b1035e979632f38
+Nonce.0 = 1326c93a95ad7b56f9b46cd3
+PersonalisationString.0 = 3905e4dada3336cc9a91b9c3d5907626a6d890828d451766
+AdditionalInputA.0 = ea3a7a2197b528cea118e13217ef578e9b7e7f475499ca8c
+AdditionalInputB.0 = 15e3a90e20cfcb1dcd2b2ea97b7f89f65a0278d1cab82e1f
+Output.0 = ffd25749c559506429f708e1a170337d21517b9a98321b8f5a22cec9a17d9fa6cac217747a37ebfc00e054f57e837205b6fee567474d93efd295d44c47eb8275332e8dfb5bf1536b1c6ef4e589a07ed3524e4b9bd6a6abef1fd4b9b4cb5b4f8796a7a76d1912ce7f80fd63e0b91bdfb7
+Entropy.1 = f3240ee9d4c06c9885fe055d951e5938e39ff56a2e0068c9
+Nonce.1 = 6ac015a92282a6e87b7414f0
+PersonalisationString.1 = 5831f91eb9e7279a66398a8ea6f43efd3ad379d6b951d327
+AdditionalInputA.1 = a4f6fdfe4cc132cd57ed4b3f674b2220ca0c1196d344cd96
+AdditionalInputB.1 = 85dbdb01edfe331d4e8e40c52c3a28e9d52aeda347ed2648
+Output.1 = c4b967554913bf365a7adc7497f646878c6cce9b1d3b36ff2492275bea44659aa33df69404a3a2957dae94bde7b095542fd8aca3f3519b6feb71e825c0b64a820d56a63b8492a6301998f99533c22193ec09607152af43b96c6afb4490ec110fb27a957c0ab6de3a6312a22a1680d5a0
+Entropy.2 = 39bbe3300816ec9eeecd8f81429031a1b17d24cbba723ebf
+Nonce.2 = ce22945857c81e05c5f52cc6
+PersonalisationString.2 = 1e14d7ef323eb8e88b011cfce216ebe20dfb92ab925a22c5
+AdditionalInputA.2 = 344aa4079ebd79d2288cced93f8fa333217944b4e9e1dba6
+AdditionalInputB.2 = 20fae2a861c0a4834fb8b44db1fb415765973556f97108fe
+Output.2 = 1f2c30eda5715a76a28824f2c1c216bb5eb20724eee4a944cc01f8fe841cd4622cffc338280b019762e410a32e0e4b7f6a19e76c2246fdb269be659d1cef747d480a0cea33b7fafba1d4afa9fd78e8f49333ffdb0a70ea30cf918344167809c0bb93a89e06049ddc52ec0d53ec8fc80f
+Entropy.3 = 8c9b12dbd81fd4ab1d0665a71e10241e655558728ed5b7c9
+Nonce.3 = faa23fb3916affe38b6c55b2
+PersonalisationString.3 = 19193fd5c1adfa3faf2fe584732bc8538120ac0d0f243fed
+AdditionalInputA.3 = ef5999f1b84b22431641312c590e5a0b189285f74f729639
+AdditionalInputB.3 = 807b35be920b6869b78ecab63add9ffef1905d226d67de89
+Output.3 = 14dc7e57331d5ac76399c303df7072701993fa421dbc78051499cd5556c8ac69b1aa6e68e0c08b65c95342c589d2cc163c435eb637bbcda64ae174bc6cb7d604011f7392396238963f92535ed11d6a15a268310123b5e01663ad9ee1bdb15f05e174b8edacb9437fa064cac7d5f35ef5
+Entropy.4 = 7c6e8ceb57421268d2c28ab2e37e05f8cafc6d7882a74e80
+Nonce.4 = 342c8eb099686b2ad2b8a04d
+PersonalisationString.4 = 29b812867dbc955b73f4f46cb488878ea001229627466c64
+AdditionalInputA.4 = a00db37e1e20d36218213f789b9bdcc276b4b4d130a3aad0
+AdditionalInputB.4 = 1a951f3ec9c0efc7f87fb923972a6037a7d69e39ec1415fe
+Output.4 = 1a26322877750fd40a60f896fbb5cdfabcc39bb70d28100a125d4ae24bbf4abc6cf9e30e107bb6e9bb499e54423e220b51764296fcf5b20a1b131ebbdadbdfa4371186918ca4c49cb2b3be37e3f472b3fad4bd05dc5402b35146e68bc025e5e708e54b5fa26d07e34d4d961b4a35b79f
+Entropy.5 = 31f53497694c1be05b3abc9715bd5a92a040a6fa5c100eaa
+Nonce.5 = f9d772d0e69acbe50fb5b937
+PersonalisationString.5 = 989c7384d25ea30e6ec9900f155db75039602455645473cd
+AdditionalInputA.5 = 4de1de19afb424bb0ef45b84a68140f5d835b4f2779e7ef0
+AdditionalInputB.5 = be3850b00cf2b2331e4060f23df3d62d05165523d3363eab
+Output.5 = a0dc1ec87fd5bc91489abb55aa06ace6d5ff6ba2407d81463203efc25d38ab8ab5fd0ac89668b857afd07b4ad2ccaf62d718d44dcacfbe7b7e614b0b8fb342e8b614c9bc04a4d73e1bde463ab7346c1edd80b04e87d5dfbeb0e082d0742e35136c7d7bea5bd7f33e2357a7400c4456b2
+Entropy.6 = e4d14ee44b0853fad4e29d866db2a7e9bf035448f23bd4ff
+Nonce.6 = b2dc11eeefb0d44925067354
+PersonalisationString.6 = 1175b2f067ed0912e9e7cd4bd6fa11e73598a46dc27e1099
+AdditionalInputA.6 = 8051fa04a09ccf1cdc2b41cb4799b3f1318f7d79ceb1292e
+AdditionalInputB.6 = b75e05f9a62967a57b8e0b3af53b4ac5b7a9c9f9c96b6e0c
+Output.6 = cbfcc750a474249966500493ab5239f68afcd7ebcf613f7998c74b3b7cf0afdbb1d29b9b07f00e5e0c38102558f34e2172734c19a663c7f0206ed856657da0b73d5de0168fe28e47681279e9d7f3c72aa49ab0f8306881c0f684ce8a6f75b1e5b87fea58de78ea3b14565ed6b97c41c5
+Entropy.7 = 097b51a223801e567bd235a113c4a711c6a5b0a20dc44d6a
+Nonce.7 = 4ca440511c94f058063f2b7a
+PersonalisationString.7 = 91b839a777fbc2f12b1a5dcd72cd4500449174cd217d967e
+AdditionalInputA.7 = 2f0390a94b16702734b3ad8f08f91cae9012fc1e5281f129
+AdditionalInputB.7 = 21be091dd429ad8ff2ba1609b2eb4a99bc654c23433acd24
+Output.7 = a116b26f9a9429ba9894f37f9b0b388bcf34de7092743ce338d1fddfebb3ed855d3f17bb2fde486c1a7789f60998bab09d62b87bcb157badf644dd1f4fd4451ebbc6fee984605c259246c9aa8e0750f585248e9dac0e7d935d6de7479cc1362b59443c876f55d60ff0b698de1cfee61f
+Entropy.8 = 9c0e0890d95ef33842c657b1311edad3b4ea0f1fcd30a77a
+Nonce.8 = 79a62f9cea1c924fd736c4da
+PersonalisationString.8 = 7f63c222d598bd3dd7a59c8b8e4c37d2fbfbfeaff3319f60
+AdditionalInputA.8 = 89a60778310484079eee02ba66f983860b29aa18180bbc5b
+AdditionalInputB.8 = ee8adb31d6d21546a89d52e2eaea8f33c836e345d046395b
+Output.8 = 0e3c314968b31a01a0fc81314ed89fd253be80692e4e6e55405f889f304cbfe4c688be60b81ab09f752d9820d139c07e7653dddd1afbfaac5282405ca96077da102415a18137a569ba9b655204a3805e6692f8bb095580d169c91c5aa8eb09ad0fc3bd65f304d8975679c70d6fabe3a0
+Entropy.9 = e6a2928b4a18e8daca7a562878124c0af34ab51701dc5ea0
+Nonce.9 = fea9ed86d8693e2cc6beff65
+PersonalisationString.9 = ce0d8cae530701ebe5cea88019addaf80b94a6890ba141c1
+AdditionalInputA.9 = b17761fccb5866696e0f98f6f62330b12eb4be94ebf40f1b
+AdditionalInputB.9 = c5b0ae9b5807d9232382e34d6a0b5deea585f9782da34bea
+Output.9 = 48acd3f395ac7602ae7b840a62e419a48c28ce038bc33cb819248c422a2c204e277ddd52c4a94cb8ff53d63fb6c6f744a0363871d99cf6bef8fdc411af04af8b1f7a218e99ca4145ef15bbbbf46c4cc3ab1dacc84b113e889807c6e01c7e862116b37b89fb8434a7e5ffc2fb4324ce98
+Entropy.10 = 38ffe6458065939c01749e67b152c655ced53918f674c656
+Nonce.10 = 5b7bb10697c8f073fe335823
+PersonalisationString.10 = 0df5ade12b46f18cd2e512d84d8167e053dfea1f483f5716
+AdditionalInputA.10 = 43fdd1841910ace583719b7b9f32824bf6a80c52048b4925
+AdditionalInputB.10 = 0a117835ec5f6a8d9ca511333288d3ef7e2c02fb38529304
+Output.10 = eebae18396c6f818e20053ea19470fc8481c466e222a6af0a095e70088f47e79ba41fd8c633da751b03b5a9bdcee8e25853219f4efd73d1834f0719bfaac8bdd0c8051dc5455613b5d8306bafcaf21a3115120b7026f1c2ac0ac90688f5c256abf9a8992b664aad16c610ab17a413213
+Entropy.11 = 4b3cf57127fd60c496f9ff730d4dad87b47f2ff3b29c8c50
+Nonce.11 = 51b0e321e13768574caf7000
+PersonalisationString.11 = 88bd90779866d8ab9e4ffa98ea65980c9bf1a245770fe63a
+AdditionalInputA.11 = 94808ddeda5e1b55fa92c19ea223fae136df2c57d9121824
+AdditionalInputB.11 = 8e822717f48a08aacfe7025352bfad8bd102cf5b19ed852b
+Output.11 = 14a095faf1c241df1adb3d01174fa81c6910e6a2bd959b547269b5b5b769d11f3c9f7d5543f551dcaa120742ba5fdfadd271ab5f99a3983ec39e79ef353eb9fdfd395425b311d184bb42ac7a06ff4d90eba47b11618b6850810afb783c0f7b7e6876fa64cf23c2fb72387f5253e516cb
+Entropy.12 = 8b46ed6be54268f358605cdf767d2051bbf6cfdc594f8f63
+Nonce.12 = 2ff298a082d052f82c35228b
+PersonalisationString.12 = 53a419d0ab450d06a9a1a2151fa0a9732007e648cad54b13
+AdditionalInputA.12 = 8a39943a68607f13be4a5c68423486332e245477b4003e75
+AdditionalInputB.12 = a169e4d1ff3d60d51fb67f25321721e7c3184991f5bc846f
+Output.12 = c6835da498d59443175965d53f16a2d9fbcde43a430e4649f722fc15947641d008ccc3d3e4f5b10b8ad988466e09df6ba4121a6ca7f0df69f141f8262a68e9768b151aa05f76a1858609f227bdb5562e2e9c74e59cd5c01a8a4a95932649fb63f2beb7ef4fc059a1015fa25b18cbad93
+Entropy.13 = 7e9ce1e73ef64c50c2d9168a5f63359e4e00fa68dafb091f
+Nonce.13 = 786f10ef3169fa51ecb28b30
+PersonalisationString.13 = 2ef5c1bbf9d54aa09061147f9ce2944f5bc83a66d43ddd96
+AdditionalInputA.13 = 861422295fc96bc5507b84b27f9ffa1df2f06eb61ce76d56
+AdditionalInputB.13 = c5f124b884aa25ca6f891fba4bd82de45f884aaa518cfb1a
+Output.13 = 0e3866922f4ba6fbd89798c96d20a01176edc76c1982da1617658ad162e607df6710aea1788969016321fb5b29afb30e13b061ed35cdcf118e7ed9a211aa466986c80d464d531a9b36ab4d1d0d1f9fe3e3426e7e5edf397bc1598a17adbec1cbe5e889e2de0d77ac9e452dfc0427ee33
+Entropy.14 = 5586a1843e058e0964b76445f61ae4be6971cffacc05edfa
+Nonce.14 = 3143324d2f3c14f6069db0dd
+PersonalisationString.14 = 57d8bf22e41c7ba6e7bcbbeff5774511445f070da4083b14
+AdditionalInputA.14 = 1b8725447ec539ea4a13c47b323f1d6f435ba7e624dcf5af
+AdditionalInputB.14 = 86d30af40a7a395764b8b69f2656954c7c3f1c30b2b703b0
+Output.14 = 2fb2f24b2c38f217232dc22ecc7380b8240b05d2c7bc0e3dfdad268c8c10912a92595d70dd98e7ecdbdc6d7bce6c72cdebd7e121d75de8b6795b660be9096a1f24a97e9c5344c35f04451dbd8d9808c7a84c6fbafab6d060026490d492060f052fbf21a3bfa2a8e4a40db58672ca52ce
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 44ce0a55dd28a430bc87627f2a06a391269c4294f10d65cc674b47a12cc9d6f6
+Nonce.0 = c289eaa7eb8c0ec54d1a1d380f16def5
+Output.0 = c294640085507dee07b3a9e14c89a9d246370314b88ad7f22f5143132f953bbef8aeeef29dac7907c5f6da5f79f5e0cf89e9d63adc9f4eea7bef098d68389e681e9ff31dff03b26d6183bbcabad590cbdece476dc0cab3e6fcf85ac7c12149640e272cf85571aa2c638165df5553519116393a3c0ee3aed718d42380201d2c35
+Entropy.1 = 81db6e036142ee644359d026d3722abd944ef4f801091b7dac913b193df72743
+Nonce.1 = 194b73a2374a8f06ca8defafa55da78b
+Output.1 = 698fe521f8d37410bcc2f084d5a4fd704440d0c9ce1dad1f06f2e8fd79107457a2f604f1f0b35c4579fd2da01cec3327b6f5c99ed3a64f9f972218cbbf0070e73d7f12eb67bf18b43a3291f3979f36188a201f7638e3bed7749abaca34b65a23a5ff4525097172ca397d718b0ca13aaad7c97295a466da743dafa035ca1481fb
+Entropy.2 = c819743d44b0c5154d1d448d3e7e0e02efa80dccea6f9843b15a668888da3d44
+Nonce.2 = 50e36ddc82ac6a685e8810ed0beab583
+Output.2 = 02be729982a0d8f619267b2d574c1b45e648d46fffca0068664f835e272c89a53b470f6dc2cce5b743b447a5a7be0d4c5a3246d648dd729dc181043025aa5b5f8c6f603e3d921460e1f1ae90b618c9522a63fba1b28c2766a504908faf091b2731a6ab04d2770a1dacb2de12f48449b7b9a720939efd83cfa07e2ed98e9dc919
+Entropy.3 = 85128e5cbacc89aaeb6351bd06044ea4672791007514d2c9e8a65d1174e2f483
+Nonce.3 = a32f0d51f9ac809154bd794d913e3998
+Output.3 = 1825f282561b15bae06e5b874fe809d7dab530dda79c024608453da8351a21315c2f32a226a4f3e50a6a7803eb6c7d1c0ef034af809965d9da39942b1688c45f5ec88ce2c80343710ae52906c0d864781e493ab70ef8bda30f513a912e98efa64e40cb6c8936bffe196f02bab50987d6777eb8812e930228777978735feee0ed
+Entropy.4 = 69a947c4df683cae4f7d0880ddd1b1ecf162ade97360711e75615fdbbe54a54e
+Nonce.4 = a8a4136f9828abe10e9014555b092079
+Output.4 = 0fc08cc068b5d4a3f90bf6cd7f6f5c9d5bd8101b46bd618b80ff62d524d00bde3bb115bf3f8b819ff0d898579d8eb2d3f94b0ad1ab39a5ec784ea47a480ddb1a34d7bc472194b28a6df40d3098e7b3a47218d487d50b3c648b71fd4d3ef6f09c1cdd6c60d3de6e34583e8c664ad3c84128b16124b962fc519fb5a0a3fe071a81
+Entropy.5 = b03e1c29ccc69746a5b4ce0d0900c98f471711b9bfe00a3f6496fd290f619e63
+Nonce.5 = c1ebca6465ee352d159e489593de1b1b
+Output.5 = 1f0c7c8b4c182f1ce3a686b719439ccfee663f6f90bce5983b35d0680ad4d87ea865bba548f2e37f7670a8d2860f988372d3781386977819b9adf97c020655dece66bb88c027cd619b24e680f254571a2801544fa2d8b1207a8d431eff5fb32672c4df8fc143c6d4ba2614a3d601fa05730aa49b513389f01dcfd17b2541f597
+Entropy.6 = d89e696eda1436eab85b43264b484ed00614890ffa6db1890ee93e39c8b6c192
+Nonce.6 = 38a098244fbbcb2c1fde4b84a6c623ac
+Output.6 = e7aca2411dc9d15fe008864e1a8fad4a1c5d4d70ae324e102a35ffe798767948650fc34f23a42c1d2a779c7f6b44deb06144bab6ab1ef8664dabac9e86103233ad97164784ed23b878a223652da3ccb7d60396f1df945b6152233708c7ed22e8cc272709f33b4e21404b13dd33066f5557ced5415f3c860c55d1cf6ed32fe047
+Entropy.7 = e57a58fca96ad41884d89ef1433232bcb75f137747819959684081d754fe52dc
+Nonce.7 = fc3de0c440a955bd19d1d0e3feb1582a
+Output.7 = 7955e398bbe54f70bf430eedac37d5e8767a19088d5b41d4180e64f41b15dfcdc74d77b573030ad3ab29824b8bac5172d575e2fd035e7a8640a51536f26a3d8b0dcfbc92fd47e2f90cf9a125c9e11a002debec0bb08e27790dd2977f11c67355b435d70bcd84ee0cb672850b65cdf75ead392c49740942b865a16ab501d36c0a
+Entropy.8 = d5f809f10e0fd0ad3ff770006734320d4894d790bd21b1b7536fdac5efb5ce58
+Nonce.8 = 03fe039e7e942a7728a11367a73f7a32
+Output.8 = 596420d1cf1296081f985bbc8d39bf7693890fb0995043ba548054e4a161c0cbf807f8ad7187cbb424302f4e41a33b9ddec8a8dc07bccc511519116e29958fbd2c842c528536bfd6cadf6e77f97112fb30b370d1312eef66a127d1de5ed85db0f56f8bcd9bdc7c1d0fdcfd578b4e17f34b63188cd74808847ef7c72b9289ce85
+Entropy.9 = a6c7c911cdb55e30a4378a9bc822a2addef16f8bf95cc8ecc23461fb22da0d83
+Nonce.9 = 3b3885f628e8ccdc6653b2100a626001
+Output.9 = dd26f2bd84bdd8545893359c9f97ab81f98a0b70d56a8c0f0f54f16cf7e9f5a3eaa18f326637ccd44111008d9c8fa028f2e9a2b65dd0f06fa07bf4f90231657158f901003b42e07db224bc2db5dfcbc64ea6c394e76bdb82e1f4747b2d8bd1908169c2938c9a4bae8de37110daaae12ea3b974f7c5637f68c9007442af04d791
+Entropy.10 = 2d4602c7055b2fd556d342570611c679a3b0511f05a6fb548dec3a68abf39e8b
+Nonce.10 = 2abd4e48ae6216fb0d7c57149ad65c36
+Output.10 = ab8e4f28b147addd5a0a8b89f385b26d35c38e1e8d7956561c974197bebec46e9e1ff63ed57cda3037edc88a3ad1b891c4276f6c5ffb052def2cad96a274d68c9d63db2d9f3fdb367b0e79aa7bd631478b4d1c15d4d3a6aca9a4957fc15ff5cd7770955e6d58afe1cad201ab87248178d88b8d15d410790ec89600d551159f19
+Entropy.11 = 5660c5540607a5e4e4f425b6ccb5e21a0d5ce831287250c0ec09530e6015a9ea
+Nonce.11 = c7acad8bdd4aaf7c32920228e7f1292a
+Output.11 = 00904c4dd19ae62eaf31ed2b15b90f158e5d6e5368e6e8b55580c95d9b6ce91b902d7bedcaa39d6741b7e0e01db3f2f713118a4534284bfc1d6f72e3e22443fbbdbffe869c3700352071f4926a58957f5bfcd0970585feedda6dfd0297a17375b43d5c27b5a3b2c9049ee9e825bb14e653235f710e01eed8decb792488646e2e
+Entropy.12 = a59be6b1032007ea49513ccf13989d3494bdf927b1d3f8be0b66611e7e65c08d
+Nonce.12 = 0f6777475ec852294ba42fb74dc97760
+Output.12 = fe0e0248a9e9097689f39b043918db834011e15949ff5960898bbee0822a22556e84cb2098161e7ff5e8a4957a404bf704ac59fecb2d99acd0727400696fc1977f28bb702392614e79cb0820682215741058d6b2a7c96cf3d35b357c7361ed5e614193b781d81ad1e0c081947a13d30adf4710750c2535d82047d609701a81fd
+Entropy.13 = 476c950159ac9772eb7c477a3a5266c0e3b55c8f94a293268b53c3d4cb2d5490
+Nonce.13 = 369f60012a316ee36a0febfc0c8c508f
+Output.13 = bc433937b71f65d261167977afaf152ed57cd834c1367797e14c22277b4317d2478ee3ab2755d4ffe3a63f9325a21a5be13fde2d9a8521b5e8f3477d62160a42145dc368fd5e24f24b2e33aeccf4debeedae10c77606130b0c575c41147246ccf851d489e030c8f6795e25462450711c59839a4708984a0d7443149ff0a492bd
+Entropy.14 = 9021c403eada5eac222dc48e1437b6de48ca31b9e7e76fc5f60653a3d901308a
+Nonce.14 = 503b4bbc0ca538983285857a573f6166
+Output.14 = bca7456257568a178877bca602d331161828a4ed0758d1ec3febcc21717cc4142e5481dc9756c56099cb043130345689156cb96e1664ad007c461ef8b5b0fa7d18508541f528a43fe8c719f3a269ff2821ca655980579dfc2c794da673b8c9234d561b833855efc91b4747ea5135a1a05017543f5780f2cde8b472787173ec50
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 7350612ad286d0ffd637cfdf7c86402e51ceafce1f246f79c24db94b4ba92360
+Nonce.0 = 0e35c59815abc8c8662e27c87a3f6a87
+AdditionalInputA.0 = 86a2a7faa08f5cbb52143a34ee3e66a6fb234e11ead462b94b264f25af6fcfd3
+AdditionalInputB.0 = 4d748d317c3734890b77946f3dce111e7378203100de5f36e4d65cc4a85a2635
+Output.0 = 9b43ff0c4fc6e82cfbd9920839a7a4f5cb0d584419621eff4fdbc64b09a29ef225c1df78b981d415782dcf03a47274a3efb35ada443a024a524634ab831f206a53c1c0c0c8c9f46d409a0b0daa62364636dbe27ee2ba8cb4cbc4b5f82f64c40dd7fce1616b0c91eea1eea657e855e6042470d5fe35bdd02133c3edf1c73d6234
+Entropy.1 = e043970a06db063de678647767995302b7dcc3a62a86a41bcf758803cb580233
+Nonce.1 = 493941e49c54632091416031aa619ce5
+AdditionalInputA.1 = 14ef3d89754ecd20c4f45dfe336d505cb2d603854e69f7a961c6793c68c264dd
+AdditionalInputB.1 = ad3068bf86f8a39b26c884821676bd5e474a18af03e36231925a8f194d5ec9df
+Output.1 = 3fb5ab8f960192f7661a0e5ad16246557b3bd076eb236c88adb0b73a8be1eca0e7e469864e224721ab691332eb0cf8c001f4f5ef17e46e98af5ebea2fc058da7b745ccf407f4a13169b1f35c416ddf7b4c42ac41c35722c68c5e89f83de8bdc303eb44117082a52e2c852ea4859552a07a2a3a3d51dd15e3dc6bbf4991876a15
+Entropy.2 = f5656dc9c46acec0a22868cf2e91c85484a38d39c770de86e4234ad2d338a797
+Nonce.2 = 922b016bd1d80ecbf1134ab9fc20314b
+AdditionalInputA.2 = 9d160d63376bd4412fda64182f7637314a8fc95cb1917d3760948e81e3fb1080
+AdditionalInputB.2 = 91ef6e854fa188999bca9862faef791cf142abf1f5b33ff0fcf368876d673fdb
+Output.2 = 45258f1ec68c8cb9c4ab62d08d493dfc2fb0a93e7eb28f9d5fb0795290ac9fb0454f61ba4a72e89a1aa22132b28101bf60755931388e000bb628eaeaa1a30b93978c632336fd8598cec0348c570cf56b2569f530c12758551803d602e47972a31a1a3befdcfd78161f65973d978d1d33607d0cf404b30773eb28de0fe04dfd08
+Entropy.3 = 1caa8f2ef330484a0009447a646e18924b40fc8ed6a67d6b1e484b1e26d67cfd
+Nonce.3 = b5989b33675b3212f64722d4bc8fb9df
+AdditionalInputA.3 = 3f55ad7eac730e1b5e96f7780e28f9a42b23c1e93671f3ead77fe93b35f5fb50
+AdditionalInputB.3 = fd9cf7bc6f3751d8a28f8b9c6db953fcc20500e01f923722d0b7b09d65aefe39
+Output.3 = 29b6e72b5228a4e67c40d0d618214b16bd8c008e58bb8f65ad91067d2de6a42e4c8b4f393d2323a9b8219d7c32461a6062f46657f6903752cd9050c0d6d4ee6eee5adc30aaf540e4777562e9847522d4db31daf747fb1ba979f14c4dac4c50a3afb2bcf651b048195de8593ce8949738c2e657cabafa85699858e0b52d62f085
+Entropy.4 = eb331037e2ff46f70214308a3e1be1695853c864d1ee92c659b8c4f0dc9e65e3
+Nonce.4 = cc2f6273d208c7a7e49ce09ab9792162
+AdditionalInputA.4 = fd6b20be7750acad0024cb7408bc8cd23a43fe5c15d92888f7b96aa383e24a9f
+AdditionalInputB.4 = 44f1bcc19eb55ffcc588b9c2507cb98e103f2bba0e818032b2238a168ceb87f4
+Output.4 = ee1eeee317978fd1645cb4ab0325c640893d35b3b57fbdc7811788d681b964ddcda519c94c7a6be344758483de4d95d04268b20bacea0f1343d5ea6e5eebc6d9ed9433a0d181461acf7f3d8c6da4b6b47226f1d92eea75a6262608d8a5cbfdd0b54896faa7d78036822e3cdeb8e286a1012f16a067d67b61e95ffcc1f945a3a9
+Entropy.5 = cc00738d8b4dd553bb844eae3e658a36eece7ba2ef4fde53a2a88f329b8def70
+Nonce.5 = 86f1844007812341159718c6076e2928
+AdditionalInputA.5 = 33e85335e836e65e0a3a4d5e19c419e6208f349c6e4e307e7d0f21b0717fac5d
+AdditionalInputB.5 = a013d7ca37cfca37ff970068a17b57c9549f4d7bf9c6c175e0bbf5b0868d3f4f
+Output.5 = 2bae26756053c76a902a01797d05a765a3eff54f8a2882f654db8cd8ae502839dacea05d3416e513d97430d99329981b241ee83652da94c677bf5114ff243a53c5adcae98628d016c447667ddf7cc94d1af06c9020ad4c9f096135d053d08d73aaf0db6c9fb4b22484b8c2240a8d3572b1ff1420849a705522856a8159523dca
+Entropy.6 = e92c8a50a82efb4d5e86792aac348f7abc26631f25fccd6bfb39dfec8ca5efaf
+Nonce.6 = 2894fce530841f583249f0e3d0f9c95f
+AdditionalInputA.6 = 8ad4526b62392af830ad46a7e0a09c0d814eb19b950a89a2ccc3b46b47a53410
+AdditionalInputB.6 = da84b91b065df02e1d8050142ee01a28b750d7bd55b70f65c36e4ebddcd42e78
+Output.6 = 10d3791b8b3c1e86911eaa964f070fa5d19af00307972541379b7087f2c1cadf0eb142c469365e1a8c657c32535a12044b287cf05151662b96da4e8b6103a04a002d6a77dd7b269cc786c483c39e6c76b400239bdef538855127ea110ac4a43ddf38b34e17d58a6e297f75bc634f1f6f7c732c60eb710f6091dc40d0b04f63c8
+Entropy.7 = 26aea94a8944ae443e993ea8e1ba1470af8875b58e8052ec96386ca566d6caeb
+Nonce.7 = 5bddbb188fe0015c2be386bd2ffd0836
+AdditionalInputA.7 = aba1c3f534921059c65987a25636d9f652bb0ce6cfa4505ab0ccc99c6ccd08cd
+AdditionalInputB.7 = 546f6f9aa5b3c290bbbb6c148e299afba9c24f86c85bb83d4c11edcb12e7a136
+Output.7 = dbf46d64460388558a74b977f62fb2de4aef60c0845339c139a99876dcea1f501302099a150603efb7e3c7840f9d9c47208ed82f8814de6f88fe46eee381825ff4803948ecd3b49843805e0785658f6f681f527c9ef326d1ed8ff08c190a993d42fe7b06e5c413e6c1952a3db002601a436f6ea7c9cf0a119cda6477cc707835
+Entropy.8 = 8e2c0cc512e3b12038ed2cb280a3645ede5f405a9ce4f471bed4dea8340ed185
+Nonce.8 = 84850f530aabf1990b5871153f088434
+AdditionalInputA.8 = 0dc428894939a055deda52282d833d16ceb74292c627cfd1038317a9dd357d9e
+AdditionalInputB.8 = 3f0368df732f5f716ff738649fa34e3464f64f957ac93068bceb6368a80f9736
+Output.8 = 31f4a51f2625ec04bf1c77eb2de6944d17dc4a26635a586868acdb59496d8f8fbede047f2d813cac683890cc0a7aac09e52ffe3b2ee9f3f727c513e9cdc3f8bf870801b68be87919c6be8d32727ce9187b8fcf50506b48ee15061133331c541da4cce256527efe455c8a1624c07547899520bef7504be324ce39333fa932ce66
+Entropy.9 = 07fe3d8691b62a2c15ce304a7298694707458fa117cffd2334983581c935c931
+Nonce.9 = 0e95e2cef814077355b6d5498184f327
+AdditionalInputA.9 = 8eabf1bb24d65f02af41695c7947375ee8598b677f006f834f9618c42abac9ee
+AdditionalInputB.9 = da1bd2d85aa482f3bdfb91df1f87111a8e8e6effe955678e273730e593728e3c
+Output.9 = f5778bf8230ce869213d94f2d5841c899445dd97bd9c28e02b9e31f529495d0d8e3b6bf3f76dcf9e20cb1f0c7738e01a32e60fdf51dd1d8c4cd6199215ae011b0bdf930119535060da2781f02b758d661ad9f25aeec63477a261adc2b43edadba4d19898a52da1a7aa534ff90fc8d281a9198052c4713e538ae8ceaa19bd4ed1
+Entropy.10 = aca36e39522d614ee3834afdadb69779f2b5486d1c57ed54a2abe289ce0acdd2
+Nonce.10 = 6605f3b7520e76a681ce0e0e4ab3357a
+AdditionalInputA.10 = 8f712d523154512a4d6797fbeebe6b3c02f4cf5cd74470d5884c5bc52d55cb38
+AdditionalInputB.10 = 92fc6e44a5b2eef79d302af221cedb04626f198b88c59f52ed2371077db5e7cd
+Output.10 = 11012de2908fbb7bffdeda04c6dbe94e271937bb4f7450dcc1b7bbc730f18a680d06744b0079ae35f112b1f51e551318f876e1936862a8e03e620095a49ae0bee2276e16a92177c60f357ede15acd99e5aee40631547ee9ac2d4131c211ac8bb66ddfcbdb7a1e4436f7fd496a51693a6d53e91552025e30ee5e88fdcd82d3885
+Entropy.11 = b9306e6e764a2bc12715ba8b8de5b97bd6504093442320620f7939427773aa10
+Nonce.11 = 0a11f196903e61785f507733f1d60b0f
+AdditionalInputA.11 = 92e3744fa732ca7e31b0a383447f7b723efb9fc86b4a4a23dcb9efb1d79bca51
+AdditionalInputB.11 = a7503dfdc5917851b2f0e01ebd3976c40f3d0fd5ba82c653dd0f7dca854221fc
+Output.11 = 04d1525f9e975c87555adb0dc38ce68f95a173bc9a56d18e93f389b498033fbd0de73d45e31f5bb0a3e2efdf37340a67f59ed4e82a2e34c63022b1f1dd08bac6fd9c61fe08c7bf91e7d81fc3e6a6eea938f59123f80564c4e7ba6711a9e46333e906f6249a4739371d8dc6c5d7e50feb1d3086ef34a143db616a91c4222c24b6
+Entropy.12 = 284479852d7e26ae13c77f674cd9593d81a0aec1928d4fbc048eff11fc1b08a7
+Nonce.12 = c89c16f79e8b4537aa4257d7f6ee9916
+AdditionalInputA.12 = 5d91d857e78d441f3ccd535ecd2b4d2d5450f049c86088592b190f784a64cbcc
+AdditionalInputB.12 = 0cf631a01ea5a7322f49f728fb854a7606f36d6bce2c99f2b65cd819a2cc0c0e
+Output.12 = 1cee85c41c2c4eb1f4f8a23b69a03682dc5330b1b78d9655bc510e8c7693c569333b4529965ccb121a70c01f1caf2ac323ac0bb4cc16f55c40a453d222d798bf7661523b56689e710fadf33469b5b5bb87ebaa1b5b44acc0e50d30f63c770a83c70e591953e99826579ea77938a7a5946f578e16ef9d17f215148727f53b6c08
+Entropy.13 = 699c46f1714fafba8d271f9e033e1d967330da66cdb8fa5360230ce2768a241b
+Nonce.13 = e79d9722318e117a86639e26e85dc04f
+AdditionalInputA.13 = f655f76beebc03277483ba619acc2cfe65fa7d08fc5568fedfe3488247ceaa31
+AdditionalInputB.13 = 26228b541cc7d8620ce1bf9a073940dd369324203366b1420d1774f34f472e0b
+Output.13 = effd4321a4351edb2aa597a1c7c8d9022360078958a46e22326f87efc331a4e5ebf787da2cd1b929a94a70c4a2fdea94d323ab87a125b8b69db51c4d19074c540bc9ab6c1c27310adb465f52ce8084d397dcbf9eec12e8d806368c4beef10fd1c05510604b0c2f0b2810723e72b4a414ffcd4d87493f9de651237e45e8f48ee3
+Entropy.14 = af6143012d0a1026a5b7148e796e1d767814512ca4cd294c6ef6749faa04c13d
+Nonce.14 = 209924e1846340b3f574222c2b1290f9
+AdditionalInputA.14 = 439ba9ee252edb11b09fd765266b220077ab641cd7ed42b7cedc96b3997f9a31
+AdditionalInputB.14 = 18e1dab1f2af82b8912be6791b003d7b0d66ce76a78cc17b753055b7b48cd2e9
+Output.14 = 5af9e042af202c9584bb69cb54738c0352ef2c9b9483d6fc8efd525ca38e62f535f2ed5658770e8cc5d53d9f1964b8a55d871c78250851491441c924701a52175410f52b162ebfe3991a72472d8842248402a666d726ea71437fc4a521543a323d501a6942ec4b7fb77ce462face53a2ab9b1b9fcccfe2346adf36027c48293e
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = e724ab61bd5e236354310c8e3b1c1cef587eacc99ea3411cd61e1e033c834e5d
+Nonce.0 = 2951ffc5d08e47040572ff1ba43493c0
+PersonalisationString.0 = 59bfffefbc2c23df1f33f6b6dd852039daa82ef64d219ba4ff2ab243652eb9a2
+Output.0 = d640ceacaf7a7fea51dcb22704cc6d93d042e4fc667189e891ce5a221b7911041240498c11a51ccfae98dbce4e7b0ee1b63db44b04f8349631dd935dd18b205a7197e4de79086902a2a85594213a95cf37cff5068b51f23bb6e99c2853ce57869d1032071459471d8a2103a620a76826749bed5428eb197176202e9bcfbb3ca2
+Entropy.1 = 08fb48fbca8c66b084be402d80196ddb171f70be1a0ef209139af642e98751ed
+Nonce.1 = 8b2e95f175103ebcb419531deedc47b0
+PersonalisationString.1 = ebeb41167e04ece3f0ba908671174ae50a4c6e2f38ca97c8b45a89726c48776a
+Output.1 = 35a47ade8f180524a3a2da52a1b41e196fd5fe2d7e8f4456383a459c8682b501fcea1a21b730c70f7f5979a1d15c22446131fbd41e661446ddc02090b90c37816345384eab418c7a9266b16a76df8eccd665211ec7a06cd276c1164442f23518f51196ab76486d2891d6fdde918ae66b84224d42c07936b4a00b92453f3ce633
+Entropy.2 = e1a456bf6ac6f942a82dde80ee33814d30cb920d3bc94126e583cd870caf15cf
+Nonce.2 = 76ebdb506909457b308be76e5a62a54f
+PersonalisationString.2 = 3ceee1ebc781a9cab0e04300c972ef69dc548ade6fd731ffd8c343d93d08d185
+Output.2 = 57e56d0d7bd6f7197c7504f7a390603ead14ec6f13a4a744bdb9b296f08380dce9e0772f43de2009040da2506ec44b9dcd455c352515d17234333aca348c488242079b63dbaca2a6863f6b821c5840eebfd682c98619eeab05dad517584e0864d6be51df43da43f4ec1c95cf8164f8ee97f2c3776e99f2a3a21e6070f9b4ec60
+Entropy.3 = e25523d7266a5dd737b1e4ca76aaabffef4fc6fea945984e1c627b7eebc999fe
+Nonce.3 = 371c38983c6e99eddf211cf5d46e8355
+PersonalisationString.3 = 03ad49a7cf8a2df45f762af8d826d436a7f27c1840d53026a5ae3dfa00cd1346
+Output.3 = 32d68a82bfca15f8f1ec6f237601fb3bdd2d0078269c863898c6494b7ded5cc3eb110e0c25836721cc22a105817029df725bb65482e8776c2619e9bb97a2dcf7ac6e30c3fcfe15afdc7ffb9eca24fa41ec8d076065521bbff417c670aceae43267785caec7e978d1d0705d32e5375da93c41b7cb68af3592ed6957f225da8cb1
+Entropy.4 = a81b323ec47b3112d08d51d3abcfd967b36380f0f9d233d9675309b8455c792e
+Nonce.4 = 8ef18e08c3f6f957f026296c61dd8077
+PersonalisationString.4 = 91c526dea9e0f80e46cc2a07f793fcf36397bf528e63a7fe4891becad029bb31
+Output.4 = ca8f58eb28693eafc2f1d2c111f87e864d2a59f7966420d5df510639b0af39cbb577969de697c0bd14c36dc946c60ca257cd365bacc740e09746c1c73264bec0370d4f9b9fdc7b8db7f38514c020993386153115c19f0bfe211151fb482934f3f226ddfee8a392a3feb7e8f3c8fd707fdd8b260dc34e0f6165f5f4c6d0ecb1aa
+Entropy.5 = f26f12b72b13316624c0981d40c8c9b21cd570c5bd7dcc2ed0d8d63e1bbd7dee
+Nonce.5 = dddcaf5eca7cdc074325a6090f59259d
+PersonalisationString.5 = 464a49c5b2a999a791ca83107ac10ddd294c5ec8efdbf645072e4258f0ef2025
+Output.5 = 71ef604646c91a59471f87d7f7e968f06b079008e7713189d75a0e5dfeca5c95a8b2612525ecae1233073fdca57f68a58ead71cc0c9830cae1eb4e6f136e850657b507e00d3abd1caba6c7b36d2dfd562872dfe1695e3283bf3759421d0f00c50c43712c33ad6e65089572b33402c8a75374009d934af66b6dc93390a037e3db
+Entropy.6 = 8bfa430c3d068c53d4585dc8ec918ab63233e0f77a6b8515fcb34f6b0f4b6367
+Nonce.6 = f00c91f2b479bc03426ba64975e1a3c7
+PersonalisationString.6 = 3377a98ebccd45729efe0c12ce23ddf7f6ecb91241b5b355fbc005ab1e2e9c9d
+Output.6 = cfac175dfe794093c1abc24e74718c5cfb08b6ffb542aacf4dc966aaed2d52cae48f85022977339edcbfccde88f6eb03c3f4dc789fb0401ac63257783740168b789159b2ab4bb56fa00d0365edc3208e70e6b0cdd535a403c12b54919095500c0267d9cc69ed1c354f34d5f8bbd4e1282f7f07b6b233dd3d11b04920f503d597
+Entropy.7 = e0b146dccdb2e37ff596a5091185833eb7fba5ef5524bde1ee0bc9158ef651dc
+Nonce.7 = c07559a3718465d5c0f4a99eefb62324
+PersonalisationString.7 = 649f74cdb5f0301a7914d6535d3df548930c7e1427c75978508fed0471d39d45
+Output.7 = 9e8bc8ad94a1c5b4d2b46c5f2c2055cbc896d34bcbae9fc05c9f5e03ae2749110b50b4539a91cbf57ac62ed0cf3f50e76623a869b519f5a3e4293d4950d6c2d77dc7a546413c8725d2e666e54c381d6d5f45a43672c480110c503a7bc388bcbaa0aa431db2e54159fa7790f71bed2a78cd9cd3795a37bc7eefde6b442f39ebc1
+Entropy.8 = 845fd8931c77e4bf47596f06e89c215254a399f1495c49945fad2c5cb36d330e
+Nonce.8 = bfd5379edf92ded08630f328af6d8dd2
+PersonalisationString.8 = d560adb65f7b844d95ffa0616add4354d3c6acb5853efdffea71f8f0fb883293
+Output.8 = c57fb3411dcb917b6ee4a1f77b38de618bc454f650952d59c9acfcab49933d2b034414c8ea8da47d77bb3d8594ac60595f63b9fb3e43c21257fc3cae7b47cd1b37171abc54602312dd1513bb43dadc84a6b37bf0c916e8ef51da7cf6d051b0c1290dcfc7c9791828b6d588e470729f4da568f30e739b327e64b1ea4cc6fae034
+Entropy.9 = cbd7f084473c6168d48683b7944d4556ec2fa28742170586e75511af9180827f
+Nonce.9 = 74f44a86c386d27d9af962232348db03
+PersonalisationString.9 = d513dca6b39458c8b1b9f2d2f74098f2efb1417fa7f73073f9a34fe13cb1fe9f
+Output.9 = d1cf18a8232761dd30370c31253e5daf1be13ca524591948e0059c4e13e4ddc292df631d5dc8249accf981a4b1fa62dabc456ff6e3f4a972d587f6751155564664004ad8d957fd5231302b79e3243f72a3e01a611696d347ce3ad9a5e18312b71334294ebf1305c5d67266583e3fc9b06992a9077470cdfb74807e44351b8970
+Entropy.10 = aeb1ce335e02ac888506cdb89f484dceaf8e9a57b521d3dc47f03a82372a383e
+Nonce.10 = 70f20f150c35224dba780ea65657500e
+PersonalisationString.10 = e53a56519c5bccdb4326510b314faf0954f5bee1aed96a3126f3b38a2a79e69b
+Output.10 = 4ddf00587d70d1e9e35f252503e5e4a4b60ca6fd3de4fa4fc6f1dde8bffbcf60ee331bdae6fbf9d6ca9656e681cdcff243b66644e4808d71572b081760498604e32259c4a9d438c8134dbb8dfbb4ceb8913244e4516a36e8cf808ae4c91d65d56e5bd618db7a3ab438f3f6fb75136958a4a62b2e60d38545b177f90b9316087f
+Entropy.11 = eb94dbfaffab3c835efca8f6a2622a20287dcad7bae8b479bc9b4eaab2728525
+Nonce.11 = c3e3ca60398229280b765e0d0b53c3cc
+PersonalisationString.11 = a2268c8f7bb66f717e5e5a5682cd31901a192848578f0ca41867231cb7b26594
+Output.11 = 98be7dca4d36b878fdb708d367ccf9cbdc6075e06e3cc8c96d29e1ec5e01dd89d3a03e630b40bd1b4937fcea7386604bb64f4ac4effaff5f3037617a1ab52f3e0b89fd33d5b0e765f7234bce8f3efdff0c9c7000706ab96b22c673d9524fa6357d230fd12c77b490274641eeeefb6bc6aefb66a08d7522132250ceac3e8506b1
+Entropy.12 = 62a3be65cd40f626fa593c77f7fb098394f8d987e747691573fd170dc2863b37
+Nonce.12 = 38cbe852b48ebd1f07be7a2eee40ff62
+PersonalisationString.12 = 9f110af9f88ec6d2e0244b5a939aa8fef180c0dcf3aa53f4b31dae88595304df
+Output.12 = ab11fb7ff24f0fc05b13f6fc26dbecda3daf9157704c76a94a47ec9d4510a127dc60f9311306a0c02bb29d1bf7e01171743381774194728d9d0ba28ea8bb04d19eed67b205a7e511e71e3175c574d9dccae046ee9de2f38d360ba7816ba32f70ec2f7023e1b49de108483df1accae257e59b66b876cd5c2e590389ccd54e9b0e
+Entropy.13 = f7cd72cf750d99b41b08d1e88552119e9105cfa27c3038d1def40e919c63218e
+Nonce.13 = 3ef0bc4710cd8599dd342df67c4a6e74
+PersonalisationString.13 = 89550defa381aa25dfd1f60333c8a4d08acf784b538e13ec4718349fa7ba34d7
+Output.13 = e1bb1e2f3d4efb3378469779e538e1e1762c996361d14c400b198648a8d0ebb8700f73acc9d916c62f8ce74cc72357caf9d9d601c279de562c4e9e37b1b7cd45032ad93276bf785ca6022e3347a065811b2d34721d66bbe477aafa9d98dc3f5b34061d740434fdd682caff77934f4e00802c464bf645aff920d36a297e1f0474
+Entropy.14 = 7282abdbf2244658abe14be954a66476d48b06436c3fd7144a56d80a0f7df290
+Nonce.14 = ef68efad369ca5fe791ad438cf9dbbd2
+PersonalisationString.14 = 012ff5b08fe14fad65ebad5f15d74fd72d8577115e5e91262043e85a13a3043b
+Output.14 = 1779c05411254dc5ff714eb56332cdf9a378a160bf0a20ca2da9e4c3b4e3c425d2f08dc969bd4924560c8caf9686b27720307af8246e6cef20fcbc00cb1f137b6efe9902f9944c1384bf917675a52b7b816795327afc4896182a78d4664b98196f89c466d5fe1e2a54122035863c8bd61461b2ef9e7b469492ff63364b013dfb
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = f0bc27b45894b8dd8df1ede041521947680238ac91235d513dffc8edc208433d
+Nonce.0 = e395bf2eb1247d7a8f1bf0eb93999563
+PersonalisationString.0 = 30fafec33e0a81f029f5d2a49c3f2c9b64ebe5d864cf59d3a0a3f7ed23b9f6be
+AdditionalInputA.0 = a7ea8a0ce5b21697a01fb74f99823c7bea304c800b6c10053d3e7b8f63f59e10
+AdditionalInputB.0 = c8c491bd3580973fe6b7369ebb9eafbeb48cc1ad2d468c3f93672f51c12e3bd1
+Output.0 = d00e5bcbb7c9032c88564ac84b7453b07da60b189b768a24c4cf0160d6227f79f69bc62e5a7bcf551c386d3423a9cc77fd229a2b5f14d39af6dc965b77262f9d03e181552a5e2011aa7447a5e7aea97c9c56ef5b40fc4000d06a36672818e3e0ea894840ec066d1c38a1e32e2667bfe16147094f37f57da718432641f74fea56
+Entropy.1 = f75392fa224e1613b988ae2c3ebc2de35969e3b2b98e72fa1adf88ecfc2e7c69
+Nonce.1 = 2684df2b1a63c9fbf32cb7f2403cc789
+PersonalisationString.1 = d0851421b6414257390533042be842a319800420360bddf01936996e9ff413a7
+AdditionalInputA.1 = 58f4c582df6579c70dc8dffe57386c342922a67a9ee9ef28cbb8be649fdcb98d
+AdditionalInputB.1 = 0cd63280610d60b5ee1af92c2a3521126a2d9dac1c8b59b55f3acb43ffb6c64c
+Output.1 = a03997ed6d1d66fba5902610288a27ac5765fffdc5991e0131667211a8f5bc89c0f76dd80ef3ae9f35abe063c16fe3309567fb8d491c575bfac359f5fc0b9bd4083e2359dff3807261a7538e76332690608d400851cfc8da2b9bf8728419020e472d81d1790764f3de223f6aa2d33a1ccf01b2579124e311c0e42e60e2b77747
+Entropy.2 = df0fb5c0daf3d6a33f110f1366fd06b62d71f847257ef01a872ef271dddb3255
+Nonce.2 = 52dc78206a7c7b0b690d6822c56f09fc
+PersonalisationString.2 = cd6fe0153bf8958b8c647ddc3156762a33965f12ee8e70d0680222a079244fdf
+AdditionalInputA.2 = 21c99ce6a8949f4c8152594dac07cab3abc465c42ac6926c6d8ebfe223093cce
+AdditionalInputB.2 = b8a9b1e464ef4f7224eb4ff0daa7adbe857ecbb967f0570dbac11b8c78649b5a
+Output.2 = 55fed9acb61eb506b5fb69c4610eef6397672a1a4e268bdef30a7fcbe450f09f36647c52a45895cf32f83f13e961db96b1a452612b8c011642fee67e8132ce9023ea471c2ff064037053ac5866480f2e45adef8d35e4d497141309d0742a60d0fd8e525a54712ba73eb918858ba3341ad6b992367b32bdc1c2a01ea5611350f7
+Entropy.3 = 3f27e312b036c472581a941cd05c02f79fdb14f0e05d992232ae16c334967155
+Nonce.3 = fc08cd0cd3d9b542714f11137a8ca9f0
+PersonalisationString.3 = 73f1d71c8be4ae0eb2c6f380daa250020115ca8286d0e9340f76fa5cf3062fa7
+AdditionalInputA.3 = b8c91371e7e3d17494c9450092a5050a963369cb1b004519ae439a99edc04e01
+AdditionalInputB.3 = 5c29a67d1663d8e388287fbdd9fbfbd0e0be6a570af8866cbca11c76616a1811
+Output.3 = eb86f71184b2b2c31352f8d55a9d7fd04227e76d835d62e0f2452bbdadae22ed80c26d3196de984b52636ccff16db0a4abb4194d291f159ffeafd2f1dae997d04ee71c8a11cb37605a42e1b130e2c47dec5b632e40b53429435d73562b23c08c60d3648c386f9971b8c7ef5615b033dfaff2b18a7abebba1d9d11caafb59c6e6
+Entropy.4 = 4cdde683f4b7e1fd3d7e4d46e04024d4e7db1e4eb433faee7966ac011439eb43
+Nonce.4 = e74bb425c8bd6cf83b4d75f5bdec23ba
+PersonalisationString.4 = 21c1d4914c3d343232027d78e670f42d6a28c1c61acf9d52b44625f63c5f306c
+AdditionalInputA.4 = c7556c8da1f2e124c28a086b932d2598b4305161e429efe85d34494c84d998ff
+AdditionalInputB.4 = 7876cc1ff3757e4a86446bc453b083b34c48386785ca9d329bcd040a2efcf44f
+Output.4 = affd39d6b9ab6af3083a70f799dc50400dd62691344b529beeac79b8fabf20b8b51790c19ef9df300ee8b07bc6323cd93a6e449ebddfd1d477098ef1bda21b7e107edc7023d0311115fd02cd3f9b2436a21220bc39cb0cad519d15580459b013f98fd0a36dad709a544a387922667b462a1292f609e09d3cf40849a30fd468ed
+Entropy.5 = a20d2b47641f919ae2d3534a72a82e321819400cede1eef508e8126f142c5a48
+Nonce.5 = 8d20e8f0fcb0530898d1df71a5d9468e
+PersonalisationString.5 = b80352fe2d148b76ab9f6e336cb23942f2e984fe03efc7e490ab0f96b7136f26
+AdditionalInputA.5 = 264c077437ee2cc7fb669190a888f0da9f4bc7d009878b7759a63fd73e6c7072
+AdditionalInputB.5 = fd4e6dba392d83962d4da2848e38825a6c6e569638aa21fe00a6a4d4cb64f06a
+Output.5 = bb6d1a3fa71485a53e9c0e36ec0f295deb5eadbe5dff7837d0eb172c43a1a36466cdcd2e353fe9727d0562a143e82d6d472abbee3b1fceeed9cfe88a9a63c9888f3f60407e28182ffd071fd0cc15444ec74b5d6c46ee6853fc8229e5fdd24fa8151a55d44d717a64049e34497e4cb65f24cde8cf80e2021bd7a67ed1ea76b445
+Entropy.6 = 8d6cc0229f43084ab1b0f696664f098558d2282012f9c4ac01e03090cd085e89
+Nonce.6 = d2a3d8d77c664191c90461ffbbbf26ae
+PersonalisationString.6 = 4022d135a66a3972091fca3bfd32e56062b5a30710857c22a0948515d046b9dd
+AdditionalInputA.6 = 114b4d0a09b3df8ca4623a8f39216f59ddc197ebc14e144498c8fa6e1c091265
+AdditionalInputB.6 = 6df519590768d96f3d01af65d59ac0662e6c2a7c3291a63a46c6f932ae55eaa3
+Output.6 = f0045a024e513ecd3cec8fa440e16d97ed19d3d1994b3095cc35d11cfd8c222a2ce6f131d43a83940f1d15fcc0e5504de84493faddfa269f3ea2730db232eaf4de0568b409bcb8aea89ffc92272768a2ecf18d51ec26fd17b60c33b7cbdacd08982780fa0f6c542c9c9ccc318df9ece05df44f2fb106ea7b66e0803369e50f62
+Entropy.7 = 928824c871cbd0334c1fe1b0feb36dbe135cf2c15e56053b7ecd6644148ad88f
+Nonce.7 = 990d6c331c8a99664bad11c0235ba933
+PersonalisationString.7 = 10b52fc30a820aaa237e45d7797a4d1468c7e28e0f68408a649a588ae4b627e3
+AdditionalInputA.7 = 913bccd03d6528ea4fb6d091803bc30e454ee0b4a35bfee685e555dbe7c9794a
+AdditionalInputB.7 = 5de7b5f2c69e73e6a95cba27107490b00d8eafc1fbefa8b083c505cf74dd7de0
+Output.7 = 75189eb4b8ec27c07f21e62296480df944fbfda29f3ccb405b136cdcdedf4e3e75ba9f88279c6168fb1e194a9728c8834bc2982a9d0a45257899283f04ab95990d16b3c489602e603dbc67b8db756349b8dfa625b1f0abfe1c16be727e233c136b102a51681f6523385aaf96133d54299ef8f85ac6ece079fd55176d69d1d415
+Entropy.8 = d907f5aec9cc5ff472a08aee177887d231f2776f84398dfcfad3caa111b7f0c6
+Nonce.8 = 269d69b60a7f4d395c2e8c9c5847f7b0
+PersonalisationString.8 = f4be92cdee66bf95ba88f9d47ad92db7cb54e035e46b438ec60e5910aefb98f3
+AdditionalInputA.8 = b4cac4a29c31d7e55ada995cd67da7d3ff17830074cdb2e209780304a5d08d4b
+AdditionalInputB.8 = 1a131d13ae5b08414b8fbcbe1056621f6ada54ff90e058cda8218501419ef35e
+Output.8 = 0944ef17d253f5727008bd2bb78faed72471a1235342a6c17c80a6c62e197d8217f1825cf0750cd73d60fbdf55a41181eb316ed07d68e797f698f0046ec954ebd3a515154bd7a3d4a8ecf150a30aac1698250b8ff68d078b3688fd0687c36dd71b04da63feb41eb3bc73d67c464203995097d1c5c85067a5d786947addb568bd
+Entropy.9 = a8cc4c975595854253382485bb16ab271e1e1814fff59b147c8ca30c63dcb01f
+Nonce.9 = 0cab1460cee52a6fcb603b30bea38ac1
+PersonalisationString.9 = 11fb2ca962dadcf491ecaed9943286335b9ea25d7f78226399303e17e4511125
+AdditionalInputA.9 = 437bf2c671f855f39d3fdfc7bb5d3cdcf3481ade801f17150c907e2263f23667
+AdditionalInputB.9 = 126ed919d93f9e9cbc38f55ec38221dbad0d0fbdf83ebca8d5550fac89d94d55
+Output.9 = 234c8210b2f6543bee301c9d969efd9f5e0ce5594b7dca14ae0e604ad97e34cfa5ccb3cfbd2d1732193237e6d937c59c9589933632cca6701424565ee0dec9ac84f86ba3079fd470d1481b624a7424d3da2fbc4a0556c61b6f78107d4fae856f10636bdb8d534c2abaa63ce312e7a39985264cbf29535a639daf82d32b7e26ec
+Entropy.10 = 289f634be275ee54b8cda92cfae2b91d2b651651b02acc6a2234d590de47aeae
+Nonce.10 = a9c4d7ca11537d6d63030252205195c2
+PersonalisationString.10 = 4f3114016c87783088a126eb6a0f95e1e3a7d19fa421f421ab7bca99983efdaf
+AdditionalInputA.10 = cc60f01ebee620ac071e516e94065603f4ab92c93a1f965c030dc2beadf715a7
+AdditionalInputB.10 = 712d501d331fe0651d5429109f494e6d1db7423798e634c41e60642358f1bb5b
+Output.10 = 17d6e31fc8faad7263b3fef90923c257fd81364a3e57ca23abf1a6b02059a755d63bb59bed325d8d5301a9701efb27032f0e2a4274f11214cc103c8a5a3d6a00f4e3cc67bc73f66755b87779fd1f3dba16b7452c2b9cc30921ec0523664b771deaaa4d1e0bcecb38ff5f647e8de382909e49932b60bb403da8ba5145af3ada0d
+Entropy.11 = 7bd8dbcc115aa13ada7c2aaf8416b6091863e8e53cfa89557970af4f5f50ab95
+Nonce.11 = f7db40dcc52fb369a8d1d187c129334a
+PersonalisationString.11 = ae15b82f6155d059d2f21336a61229c10b459503e7557517fecca281a969b054
+AdditionalInputA.11 = 9c64b927e9d01b13c219dabb3157b803a88943e81ddca85cddc2ae20d10768dc
+AdditionalInputB.11 = 1886ea6b7e7bd81f1d2055b1b64fbeb2ad691c720f50fda3b54583a5daad38ae
+Output.11 = 9c0fc0cac3c1785a868be8ede990d1546fa9def993e4c27444cd02580339ad6d80ca95ce46a32ff21bbe5bfbaa5e8971b480c2d27b5fae63405b9c58145d60399b47ba4d9982a40f63e4eacbb011d034f50fbdaa78e8df72098f01ac1271d6ce60b1b81aaeaf2af63305b07973de44d92d742e7fc04382ba99d05c3037471c86
+Entropy.12 = 067aee31d2fbb808bb7af34c0cd54f1c22be6bfb54a809ae8ab83c0a068a11a5
+Nonce.12 = af9276a296ff30215daf2527b199ed9c
+PersonalisationString.12 = 42507df0b55177901f21649527098d5f727da59af570cba64cbe0b890f833982
+AdditionalInputA.12 = 830870a04f92696f6cad4ba20e00a764982ca29df05c828d938114a1c265c51f
+AdditionalInputB.12 = 2e262c618163fb20d878b1bdb8dc1fac96f020fef082340a130dc503e9986bbe
+Output.12 = fd33689cf54d1a59b7efa6bcccb70705d2b0c3888d2ec956f967b337dbfe88da9856eef3509fd92e58b893b42d37266993444b2f1d1c41d0546ed6d7e06e60259c4788f46b5f2303634f54c3ca2a5b52a3b06aedf43645c36743bf1122384d1c9dfc1fcf79133da93d75b4d3edafdbbc0ffd7c22a0e758636e2a99eab52db64e
+Entropy.13 = 3e8505eb06503cabc096e937381ab756f980124b86fa2c1bb80917a387254f14
+Nonce.13 = 286e3635acee4058942d65d4c2994184
+PersonalisationString.13 = 0f85ce96c2cd91a4aa1573dffcb1c77bbc0666152227e53f8bedbf38771382ba
+AdditionalInputA.13 = 4cea3bbbe673de595a21129463579d3c3c0d228f65b319a1c524cc55cc94e9b4
+AdditionalInputB.13 = 4dbc2ecf09129a471044201da98c9adc9916ae8ddecae73beb9641bbc7dacb80
+Output.13 = 2f729b2b58487f5149f7f5033a7c1183e9c2d993b08c7f33d0822aa3ecc528189faed459a639f32ee400edaad9bfeba8244b9afaf290571b83a47a9dcd21827149a9cf68f63bbdefda94f5172f01bede9fcc62c827767fc56958ea24626e47c3817d201f66abb0abe1899684655e3a1db9a9b8c7e8b0b0127e363452ce858c7c
+Entropy.14 = 54be888a09fff21a8295b05adaf384adac63ab5b48a9d74622b97272deb78a87
+Nonce.14 = bd58968d97d87faf1c483f026e5a75cf
+PersonalisationString.14 = 72bc28b4561017694de89af07e2aff548d900a5dd612c968f44bdf7a5c41c08f
+AdditionalInputA.14 = 77d998ddfd7ab7577ca9f51d6cfbec955aaf9f88cbb3ae32db7f7c460928823d
+AdditionalInputB.14 = 9ebaa09e7057ad7cfbf02e8f3143ef7b7c1dd6158f641815ecdf8e4a65c17f19
+Output.14 = 161efdc30cdd124d4d6b3d43798dd79bac70f494c3ebaca111cfa3d9343bdb73ac0def00776486584f932cab74ee12a391cbf4890b10044f7de6c73f973e43837a43b7c47a1a9a36d7e62f9b7ce40064994a610b92d68c6d37aa5d9d92c3d858770ffb8fbd87324b49101bade3f2014bcae7deffc1e4f6a1a91ddfe7e6aa33cd
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 6b8959a8cddd935015cbeceb995c5418ddfa7611dbd75671d2dd1b5747936049
+Nonce.0 = 8273a47d99dfd7f6397e198551c1b065
+Output.0 = d2b00bb883798f8b4db72f53ea28a6c87019085d858dead160cd7d7f59ebba333ad59542f1351998a1a5ee93d7bfc5a11c30898a7ae60a2a98a5b4c0421d86306c5357422362791eaa22d913a91f88805c34e97c5ccb0dce5182a68b429f46c9eab04a134e16af7967630dc53091269765a806f285192866d8b44b4910dd3134
+Entropy.1 = 5c87b92d5bfdc04b6e7ea8c424588a0384797d71546be7772a8a1eb856742c5c
+Nonce.1 = b6022d20ea5bb6873a66ae5b2ff35b4a
+Output.1 = 5274aacf6dafc0352e1362e0751ad929d789370e97c066c5c538b574666c5fc96a3d40682cd461929c9cb334e525c23a3ac64101c5ea992e94ee744a4ade3ea57e6ecb1a99ecd42a406ca5f9de7e57e6539955a80fed2a094d45095114427d2b156b390f9613845332067f49ddae05eb75977fadda554d65b229d390ba6a714c
+Entropy.2 = c7713c833739b3f814ca26478a80b4226c000311afce895b2d57ea1b2be62a2d
+Nonce.2 = eabde28b11e5a74bea96bffbbff23372
+Output.2 = 081d6e1f6b07d7c1059e9d2dd94c7d05be33c197c476a6834c96e588341a363016468113f4cdc34b3192cafbff1dabddffc3e611db4f23dd5ae866521397f4f570f7bccd15b318eaee7f24981fc51d2eecfdd2cabca6cc24c38b97012517338c3b9ec9c19a2ec97b30a03cade30e941f351c4c18c05005376bba014168942c6a
+Entropy.3 = 5288e404f724ac7c46decefc0abe0025a499b3c40b6205bf75188b56edb4080a
+Nonce.3 = 999fe785ca96a292c10ce6bf04c65fb3
+Output.3 = abcdf9ee977cc5028d86c7fa3fbd5338a6223644e8083808f30e49c5f335d5654923fd26d84b972405d06bd4601c845a0b98cabeb87e25c8d24e063748b3e3fbf0c161faaf2f339efe54395509f1a5a04f698aca4010438cd3caa1648e84e934b067e0c9f1a9b5489d30edc160cc9633598f949e96bfdfefccacbdf104b0550a
+Entropy.4 = bddca3bea89caad07d4738a9102e37db9eda2b6bbf49a26fbefafe1e489efec8
+Nonce.4 = 283b34d93edeccab93c19a64d1b6dc6c
+Output.4 = f98dd65a3f940062ef8c17ae1ccb0e592a7488913269450fdbfbce024b59fff234667ee811a73e8022c70bf4dfb70f02e334e1c5945e63e6164318f0cf64344fe8bc1107628a9335f718f0a4a8968054fe7311b2ffff9e25c0db8de396107f7d54acb8453aaf16a99dfa435e0fd2cd5e2e40011f5fc4ad335523ac0c530ccb90
+Entropy.5 = a65a81f933e09ff147e99539819ee8d9ccf0cef5c40c61d01355670161e5a21e
+Nonce.5 = 2c97bd8b2b1ca680bd30e5510178d389
+Output.5 = caba65a5c56aa4bd9de518494d83dec8e0e7cf81edd57013be3ab8370dac3f5118f568a460dca8e126f3e197cffcfd88270e80de2630a8e0c8b921d8d4b49b59e2c69b0d84180920436bf53a6e87883986216c82e76a41ce1f0091007aa95ac98e1b24c86a945844d0024d22e66c5553d11ae09d72d7fe1e71634b3a18015f8b
+Entropy.6 = 4ef4884ccaca2c0d21a0449945e4c4830cffb670de3230a94166b9aea851167f
+Nonce.6 = 7076c9ac76169ef2c86de3d57c310a37
+Output.6 = 321a73d3b018d1e7d56703ad895e83f95fe527c89e27aca2ab8880f27b93acef790698c3d8f03c463f5fc1424ebd83992bddbbd05da00d05ce8ae90122981d3df71d7a81f70ac6faf3b15d7e46d86182dca46d9708839696778fcc345a4d7b01b88a92f3592b7ed4f12be26e4046c3af82a5c369e98e085d6d30cd549801a63a
+Entropy.7 = ed0f1e9b57791a225f2f30bf3b6b23b5b7e3522891221f4104a3de50e64f253d
+Nonce.7 = 3b1511eac28053ba0e617ebe9e3a855d
+Output.7 = cbc2df37fd9c3ea926c75b516d1a23fe69e720903246e79035ddae60530bf21758246dbb404d4685c4cfcd4f678a9c30e59be13a3b4149a2de84d74daab47cadeb43eae79c2a40f5b30cc12450872f320087c5621ccfd94deb397be150ef69db4e8f8fc12899aa174d11b9223013ca887c427ac03f7c78419df940fd86b407fa
+Entropy.8 = f17065ca3d67cdc96ad35875bfb0c5ebc0a3b9a0b1229fac931b3b2bb94bdb8c
+Nonce.8 = 1bb5fb90d6bc99d68a121a506651e0a0
+Output.8 = 0e49c041f17a7e9efce3a648635ec94b21e85ba0926705a46ad1ed9a6429ecbd75d846cd8aa493c70ee16b4064b4829ed71bd3ac43aa39c83aa4b083467510ecfda55c58c86aea9e96f346c8c1d2c24704d36d11a6e9a8ef4cd523d3f6a5a3c58f63fab379a539d7ec0e2f2e74e24c39b4457a7994240a3aa9b675a199fdd738
+Entropy.9 = 2329c54d4ff27ccf43911dfce4d7089bc7e1dbd097b8e54ea58000d1ab075917
+Nonce.9 = f2ec3e850028ee960871dc25c3cb0230
+Output.9 = 16245b7f998e714cfe8388088e00d17796e4fb77b520d70103e8af876005a1afc48b382e2c05b72c4e8b1ba1d918ac2303a02f33e02383ec53ee7ca1ceedcea50963d8d57ab5e4061d6b1e8afd73bdf9d064b5d4c977bb27e2b79320077a0d368f727aa3ef95d70d5333dbfabb9ba5cf958e7be79d7eeeb8c83d3b2e63060673
+Entropy.10 = 20b3a9c78aa533afb888486dd4c4a25a236205724fe4e4a5f769974be2089b8b
+Nonce.10 = e96d564dd0b12ff8d2872495608b21e5
+Output.10 = 01930849a07748b0c2469160afcbfcccc4bf909df5a4c2eae684cc08e28883142e760e7884bf10873cb3700fcedafec4f2dc4429fa712546ee750bda0174e94e35f4cc04de4c79055ab457d9629168b6337969f6f2128a7a7e2a4651bf99512825b851217df9ca15905df4ba516119f84d0c8aaa3f6cb3b5fcd3a29dc55f940a
+Entropy.11 = 902c4bef72d4140d8c7a31406880f8e8a9e2f3e6a9b8b130a8f9a9e7422b70b4
+Nonce.11 = 25cb3fd05429899977bb62077b55341c
+Output.11 = 34bb5610fdc5a9668cbdf35158bbfe8854ac2fd82dcb2dce70f549cf9152fb3380ce054bb12f4e4e9a1e3d507f8fa3b7e63790f5d5fa4fb987ed6c67bc1ad0c9dfa3cbf987bab4392088d97d76a12cfebea471ebe49b11f9e125b78b49ce01d1d932fde99cf482f902f2f5ea444261eb25cd7c6e9ddabf296ce05a0e2e01dad0
+Entropy.12 = 590e6c0cfdb6858bd8820664684bad3f2c6e599b2864ca497f2dc9a6d2bc4237
+Nonce.12 = 025b0b96dc76e414ee0364f851f2bca4
+Output.12 = 5bd5ef1b1d58b77f86f6b33e7afa14617622672a27f599dcf938dd0585cef44e41b736fca01ca13d773f6117a9000ce6cddc0119f60da8e2d07a0f23df8cc623c3a597f86c1b6b234448b8e056433e1ced41e6c9b909449876ed0ece18ad7371ebb86cd765dcc65af13ea4cb35e82d3a437649373fac9abe4099d15d2547ef3d
+Entropy.13 = 4a90c6acd54292dbcd698f061143b3f41331008d8749da24034c77433d9ca735
+Nonce.13 = b2ca57227002eb0ada32630938b908bb
+Output.13 = 880876ee68e2d0dcf07951479e1002eee41dbdc5c4713e818f7cd8c6928ab600bd92155fe52a2f8518dfbe430c3f81bbd5ea093d012e8cbf8c010ba3628677a547791a804b5037a95c51f33196435e7235573c1fa173b6f28bc1cdf60944b8a2b6754c693a3b9ab1a59791118988357b0a4f95f353ee7e0dc4f3bb42998222cd
+Entropy.14 = 0653c409e957302f6eb62bbc4f42b30942ff7860e7c38dfb2fd26b164e83a713
+Nonce.14 = 273f7eab3dc9bf11216d5216bd12478d
+Output.14 = 51dfe9851da8d7d5add3dae413d8bab8bc7d1fcecea00795ffadce047d5243ae36f29f3611fb8cb66e98717a98735384aa6a310696356cb48f4672b2ddccf86eb44777c1616338792629b6cc6ec2b66dbacc1a6b66bd9364914f1f43277f6f43e13145fcdb73a4aca6b784f9084d22c967033651da610e9a85b1eb7513683dc9
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 24cc653fe80df97e75ad1cc6fb9e6dad7d66f39090256e264ec795de1eca00ee
+Nonce.0 = 4b9c30bf6c8787ef8c27ba141918b22a
+AdditionalInputA.0 = 31ccb681524efdac6580982cd1963070b6c4490acd9715a1fa344e27c3ee110f
+AdditionalInputB.0 = 9ad57d0c1c21803b2daf82118881a45df160d2141e819d60765d95d500d236e4
+Output.0 = 0d10df6b85789ad7a7a624def83353a90518fa0f8702c6105ce1457f29396c58d1922d31f35d729bdb54769655b3fc40c3fb770f3159ff42ab02dd2db481f9c7179351d772ca68de52cff51261138cdfd5101fdb2500f8d5eae73c3edafef37c1aa79e7ca14ab81a8f6d8f19098028df20ebedbae39c96b5e5751015ca265bd6
+Entropy.1 = 5cdef119ba5619a65a293543c246388586074583ee20e05d4d480e3986f1f987
+Nonce.1 = 388e9e48ff345a8b72277c5fafae97e0
+AdditionalInputA.1 = ff06feff16be98a6464e3f3c42e9e4e936d4ca2f3443884e4a1fc99ca1006f16
+AdditionalInputB.1 = dc25b55658a946fe0a020805e1ab8eaf89abb2a242baff7f9c9e61a018351ece
+Output.1 = 072eaaa7d7cd687c2b93e6ca5ee41be57e3dadf9141cfb96a2adfab5278d85bc8a04a0793ac1700abcdb35d779cd4de28aebd4d2d6a038e4efe4ff90b4f3e76ee579860e2744806b2baea333fe1b7b0ccbf53e83094206ddf5bf8c0f0bfe83fe1a3969211c01ce5cdf21dec623181d94a1e12db15bf9a8976645e935e99d7752
+Entropy.2 = 9116f7ac6a9b8f390a14eda3ee038dd59eb2c81210498af3d5e6da03f6a53afc
+Nonce.2 = 107135e675892626e8d76acc11c5fede
+AdditionalInputA.2 = fb59b7c31d5332c62b34daba52c8c10a6e88168a8db5efe767307decf5ef25b0
+AdditionalInputB.2 = 3a59f7f4d81692159ef061269403051f939c455e3de536d7c6f2f5469a839dbe
+Output.2 = 2711f36494ac072d6804993de3c4a697aa876d7028905772ffeff8fc117874539a6dc6384c478c13356b3bb00b1d0dacc057dc519bf49013039034ff77df965f2e624876d532976ad4c91523b793ebed07819a32ef4262c044df6e72e69c609bc18298e93c7e83d0fd2166b110e1ba620b6bc4c868e58de1b56a19e6ce3975d4
+Entropy.3 = f0e87b8a61b7642d8260d5e392aa117245851eb0e959626f9b509fea2b3ee6c2
+Nonce.3 = e7a0714347143a6b805936a05c518e64
+AdditionalInputA.3 = 6c03e7c903d8318a764c1c6533b222844eba023b3f0edd0633ae260752302eb5
+AdditionalInputB.3 = af70bb17fb6976a6cc40c2a08caa917f9ae9a05059d08044fd6519fdd3da9cff
+Output.3 = 62d08a5dbc67e9495d5b6754822800d0b91a4b44ed0e85647fb2500136dda299d2637bd0b2b639308dd562693d991e4c8a03682e514799f8e16ca6d96526003236ddc5d201bb480bc9b8cc08c36df82f823d6b390215328d57b6224b5ec9d09fc2ea45b61fa03c08096292d81e99d1ab58ed6348ec7198b15553e276513df2f2
+Entropy.4 = da74c824adfc5d172c57b504001f01d98745e1a26da82ac7e3253f8402daa7c7
+Nonce.4 = ffd6994eb71ce46783f7804fd89ba314
+AdditionalInputA.4 = ebab19b8af5e502e12cf27cb0a5be4876d72d851b03df41502cf0589a6b692f8
+AdditionalInputB.4 = aac6d6bbb99b2dec9f2ea0cad7b92aacd3a9a47da73ca606cef6333cc505ae93
+Output.4 = 3a115859d79bf8c03bcc9b87d82b9745cc34c99666d940233a2d1839e2a35d9d4b59404301e558a9c00ba99ecacae80f205dc16f0e82a641de15600b67dc721ec280c48f42260b079a5f15c09647426ae3c85ed47ce28b67c4f3e70e5ebe9e7e9e968ef45ab5d1501fa5f3c037e561b36527c0c3ec0db16ac4041f3bab96b34c
+Entropy.5 = d3328adf624620c72d9371a9717281ef69de5e45d61f3d6e712f0806b1093774
+Nonce.5 = ed9732dcf4291e121adcf1e1fdf33f1d
+AdditionalInputA.5 = da6d9e2b7d6fd59001f117696d15b992552a372b0b1cb65b88f021fb087f16f1
+AdditionalInputB.5 = 4dc6df885c25f176c14b25205d7c8d8381562a1fae9d68ddd18c54b28183d947
+Output.5 = b3605fac5833319aa7839b71c6bab5437bd0032c951a7641e1b4f26652ad9abc8a40efe2a3f1199629312cd803d485636331170701cfec8533e70f8290e1b2113c47694a5a489431c34e485b869bad03ad36e23bcfa434a316cf2d545fb6a13386ff70fc342251499a736ac9dbf0dbf25e9b071969ad8f2dd4c7606725f5e7b9
+Entropy.6 = 4c2a3fd749debec779518cce4c20356ae719791cffe49c3dcb56bd784bda783e
+Nonce.6 = ea3e3b7d9315dce93fe28f741308cb04
+AdditionalInputA.6 = 3f7006990170a8155f7f1835e44146e399a2c3d24124f089550438b8ea063f4b
+AdditionalInputB.6 = b9b8ebe09afa27cb3a4c67ec6c6968e9dfc8cfebe616a04e6f304668562de33d
+Output.6 = ef106e726b04a5ce96e875902938de91121dfdc1640f94cebb9f6bf73688ed0e1475581fe0121019fce7cad2da4f35fac5864cfe167fab3b1914e80008b5bebe9adbaaaa1083e94f8765c6a911358b1878b2b20d0dc3de9e72e63fbfa97a40fce035131c8d43e28a96e33233fa58b04d67b6568946697c0d934cb3fb3fbd1300
+Entropy.7 = 8e0fdd1f3391c9b4f4a88f051f498e4a5da7b82f6e2c2d5114bf4e40b8c6bdf2
+Nonce.7 = fc182e1bcca3ae17faa929f2c1f0f691
+AdditionalInputA.7 = b644f90b63ee94a005ff41563a859a32b848b1d52c6e1e9604f9e6ee04f444d6
+AdditionalInputB.7 = 148c1e8ea041827279de4853834df0eecd680f0b493adaa19793909a405ff02e
+Output.7 = 323b9ab6367e37ea1ca4daadb7c3906634d6c254826c29d2308fc33885576cd104d4ef05716ed68f32813d134391027b0b5b55065952f09eebc7f19cb041880ef0c206f078a4ced92ad248ed335b64206db8fe78842393cccae580f510a361b1b225198c2f0befac6039ac6d0dfa1d482adb6f0058aeb7aed3e8dfdfaaf6cc7a
+Entropy.8 = e8bd0911534bf0b9f21252a38871dc1a417f65d64dbab3db20cadf66704205ca
+Nonce.8 = d116be0be1d771c3ade746a0ff04eabf
+AdditionalInputA.8 = 0353a134b28c09f3995c9442ccf8b12863a6a3b1e0a0c854c2ac20b59788caa7
+AdditionalInputB.8 = 459b27f02004ba211bfc7c545ada007c6ee16aef24bd55f728d83439175881b2
+Output.8 = 031fae8c5ba4e15e500ad4129437f5af91b30d28d71a1f8569a815f22c2b4c1311378936f51eb5599221c630bf860c3fd4c116caecdc74cd8a36a90bcb4109045680ea588dda941ee140513e47d7b544f3ac78a780962a9e9ccad48905004ee441ef24cfb1b233717bd4041120b5f4e2ea80ab43fa28af26da4037d09021b487
+Entropy.9 = 64a90f18674367b4e78fb000f037fcd15fca064516acccfbacc69cf7aec6768f
+Nonce.9 = cf16cf470c20b2239721e784c15f776e
+AdditionalInputA.9 = 7b488587e5cb12d96d78bb1a50769a561ca4bdbb4be4afe80951aeda08f63488
+AdditionalInputB.9 = 8d4cef8c01c2c137fa015da5e854e979ed99ea92dd55f384764f9c8553ea78e1
+Output.9 = 1f492d12a7fb13acc24c44e74e2d18955f152b58e4575c15dcbd434ebc53efeb7937e42785a376be7c5e4a57586dece56d25511b5a1a134069e20182af583677a237e22c8d7651999221b348044cc54a67e8afd1b9cc38fb8290684d303dc1b69fcd61faf603945986b02e391ba9d0980333ad8d1596d46c52b27cb159432ff5
+Entropy.10 = debac482eed6ae3bfae7a11c846f3ef4e06aa5c84a1f079f33491a3d4bca52bd
+Nonce.10 = dbc4ef8868703f753c42a9d2eb5d66c7
+AdditionalInputA.10 = 6344e67575c5b96e2f02c91729fa7581f9be59969d458bf0bb6eeefb979eb9bd
+AdditionalInputB.10 = ac81edf0c682ac989a8067579da42dbc84c882aa3d638c88a595f9654d8d16ef
+Output.10 = 034b76cbc41281b31c5cc1bd955766af5f002a341dce5764e928326c785d93701793f4bcfcee528910de798cadf4f4f6411030376821e7492131f45b84d341fe8c4a78d9e701c50a5d276a9bcfb9e166ae9101e63f238af9809052167d9248489dfbcbd5e9a82ce2288ef439b532c65ef71c949bc0f6ff861f404650e2ef5c90
+Entropy.11 = 0c9a680da50dc2182bcfe5f6503856c2e905c2e9712d22ff65196a21546668a5
+Nonce.11 = 0c2542d05197ba5a8f99dde44aab15e2
+AdditionalInputA.11 = 8347cd578dd1f0b9afaff05e0d46eb526ca3bcde2ad8ee4c0091a80b11f65584
+AdditionalInputB.11 = 21d57232ae5f80a0200c1d36dfed1146efff6366a57fcca1b13f70bbdd0d69cc
+Output.11 = ef35db17311bfd3d61d3e2e8c3a2f81057030fdf4478e416732f02160305829fb5eb75b25f1a87c796e6795f8422a56b8efd4fcc05707654b7daa62b3973fec31478c5bffdfecf48be0f9ffd006a08516a1fbf41b769f7129fe698c177650e2b62b71da3c03443e02c0e8bc5d8e2d51885d3147b0bbead22c4accb599b006f76
+Entropy.12 = 2de9d4773d9cc00c037cdeb8303d3099ab03d3a8aeb62b92f6ea197dc6b34f45
+Nonce.12 = 8b8b68a9aeabb1e9219c04a59e271c99
+AdditionalInputA.12 = 8fa6d8854395e88e809c63f6dcb8c48b717bdd421f494c5540e3d807ed8ea385
+AdditionalInputB.12 = 6c0917b0b69ccb1724365e5a6337b754b0a896dbd31b60d9c3664d48e43449a3
+Output.12 = 343499dcc813c56ee45a07895d1e4100d9d58e7bce6f1e8a8692a2889c4f3ad52ee20962382e4881fe7fef5bf93da6c4c8dd788c9254cbead5af793af1617000ad6df60a6ba593412b51391dd0b94d2e4b7c5ae73e1df9026eb7cb64fd89f1617bc2e6f4ed4dd0145b3ef50dcecc90030574786f0e3934d5e018089be5188c92
+Entropy.13 = a445242950877ac93887ff76426bfb577bdc7c3717b602c15596eb953ad37ace
+Nonce.13 = 9e0a3d2ffd0f10d47750442dd7326758
+AdditionalInputA.13 = b9303057f92f0af07753605c2001a703bfcc7d4dd0963e567a44615d19bb5849
+AdditionalInputB.13 = 07dafba56b357101f909e959ba6b7d88415196c9967f57f6c424615ee02a9fc4
+Output.13 = 5b880cf453302d5428f8afd5ad4d84d02a3039c8b8ff0458d48fd29d237934bf6df76563f56ece3684f74bfdf7bbd15679a19a3c1fdf9581b42d7b8f98d0d814ee71f74b1ab65ba70c6eaa6370dd3da3228149441f7f14672ecacc74d3e2e2d3b6e2ec20b415e5abe814488e78c3cab3290b7f98368ebec09886d7e53b0af39c
+Entropy.14 = fa808f4aeb1b31fcfd519450bb1f0a91fdc4a441c9574665cb53e123d801b7fc
+Nonce.14 = f9675292f5616b1b7db50cfb451c2dbf
+AdditionalInputA.14 = ca73cf447f2fc3984a9de0290fd9a984a8460ac715cddd9e8ed99aafd6f752b5
+AdditionalInputB.14 = 21dd9cb8e146954a9745fabe039f6f52ba8200f575e9bbe19c703b8864f34e93
+Output.14 = f1b153ae274a380c28668f1ee2c8c3a91f5380d41bd611d974e4e419a37debe664d0b706722184fd3e805f2ff05554bde7219023d1f62a52970aedf4d77e7b4604cac2a804e7b9353c087752f7f185991b10910724d0fd06dc6526d6102c8d0ee8c32f6692c2786d3b715bf3860539689e3f415855ddc37bbb6750972f3a45ca
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a2b29309b2f92b994cca9341763711f410de0809864222725b0a6788c93c4edf
+Nonce.0 = 9ce6dda51f41070595a1e46ff04a9946
+PersonalisationString.0 = 7a76798b54541f1e467d8c9b3abfb0fa4aa8d0198dfdaf8f76018a44b39ff01e
+Output.0 = ebe18d74e532f6b2fd39cc67578a201846b071455399e28817f88d821b83a7241d67b3339e668590fe7095a777e91e648d535acfbbe6dbed8da2a4a372afb6665a450252758a311a26a90c59a31b2b231d7d23b5b96c85d505fd00b8181a92b71a33c7d01bd4f9d99a304fb5ee5201a8d252fb56cc41e631f489f153037765f1
+Entropy.1 = df32286b47c0ef2e1c970a7c3dfc467b91ca44f6d7a1f0445b42ea0d837bc950
+Nonce.1 = 7546e66191cf9e9161232119d7e13c69
+PersonalisationString.1 = c931524ba9e0e2b2f3f6022feaf919e26747dc6844fbc5ba3860aaf54bcaa0bf
+Output.1 = 922dbec1d4cbb4db10f0e820df95fc89dd8621ca5594d5805d15d705cd37cb36a62c381ef769e7af533af4093840bb2831f49d280a8861d82b2730ef9ad99c219554d8975743d68e8690137fbfc2e5533395c2399782e914f1d79f6dae6f2f2b9baabc9f6554955dc21f07aa9adb322253298b0beed2ff5f7a4531b53e64393d
+Entropy.2 = 6fce9964b6bb05281bbd8311590012e1108271c8ad097db0699f7ac3d67f3a29
+Nonce.2 = 2e045d1cc4eb81ae38413fa6659014fc
+PersonalisationString.2 = bea5d64a6baad14fc071bd6762a5c12479453924d5aa5e323d21221abe198dae
+Output.2 = 212445f37cc2a1ff5cb25e8a2af91bd27fe35c51785ce1cec4153cf948cc11b306cdcc0d51987f966f4158ce0fe7d220da97a15e673013d935cfc2fd02387ab33bae792855a1293e7693347d247201d9197bbcd4aa62e8eddfd0a451471d9b87a2fa364fc5ff26d3282628284b0920faac064279ca14115193a3b34446987a6b
+Entropy.3 = 9f8b0f7624abb0a45e80b90c5b3553f8d959aff3f815800e25e5240a3600bf62
+Nonce.3 = 10c7fc760070664da80fdb1ac11e2d68
+PersonalisationString.3 = 281bd732a5178359bd5a41d12f4dc2d98fb765e770ec0246e027e0111f936482
+Output.3 = a7ca3f6d2627c8206ec0c2b2384a280704e13e25438e1d0b3fc8adb5007ba878d1af2252f931065e199a01067961f4126b68f7f2e57b704dadbf9e088a5e46414ad2e8e5c737c84076f9b278b263aca7cd47fae99e67e4165f0cbe4188f07a96f9642050c5f4cbe85ae6ad3f4d07ec16466af69016f4e4991f1d73bad6ccbdae
+Entropy.4 = bf54e9b65e42afc599b1a12c8e2d375c6bee191b726f3233251cf7d54b81042c
+Nonce.4 = ba8ce550953593d132ceb2a745e3c389
+PersonalisationString.4 = 49e27487fab5d22994ceb07e334374258e77dfc044aa233be3a3671ed4d49444
+Output.4 = f1ade51fc3b79e8a2a800ba853a28e1575a89fddda009f2539c8c33a5e7262e337b4a72ed687963936d39da22295a71c30f80c4712ce4f32e09450559e72e1b1189ccdf54b1b13a3452716d48a2104c6855a89c4fbf1f0544d3a16e7f8b5e5bb65130f78b75e648bf19f70548c48d42e9267c5afe31ab45204679748046fc692
+Entropy.5 = 4735955e851914d0d4d9af22e10edcf09e9f27435c29227e4dc2b7fe83081a0d
+Nonce.5 = bd9b292dcbcbf64e11d402c30a76b086
+PersonalisationString.5 = 6c69a375f34ea77f015324b2638db8078d005d2ed6e719d3275e02fbe277bd78
+Output.5 = b1b0bc1e3170d66293e5eae853477cb0d0124359d39c03e7797d0756a696e6ab432e2e30296897b065ff2d0ed352a06fed9960e25c562bdd16a9e06befa4c71d97c6a386f8d9dc15fc8510dce6066e9deafcae0854e6919255b4fb58e74ca74346b898b33ae6c67a43d3a4d9ff0c733ae037430892a890959d22ad8402ccc789
+Entropy.6 = b3a2333c8bdfff01ce14a548c449ee740373a4cc5230d8b98942aee21f37c850
+Nonce.6 = f5fec1553d0f592a169e29fd589ce3c6
+PersonalisationString.6 = 1f6917764a67b698377791dc5a485afbbe61d9a31c5a51467ac626d4dac4cdf8
+Output.6 = 7c4acaeabe4a2286a99a69a79140090c274c8c77b17743caa20df2fa1a53278ffe89ea16011058ea42fe34513b77334b702efdcd10ca177ae6142f8b2659e9d798933dcaad33c4c461dd22114ceb33c419aa3a6cd39e924ad7d67c4473c9e2c7c0c5a8527be4df29dce0acf7aeba64c0361c6ba00593acc913c225b201ea6d3c
+Entropy.7 = 7b002015b18111df35257b166fbdb5164bc6a7c40d5ba772ec156e0e743652c8
+Nonce.7 = 19c0a51144fb8075ea7940d4f5052726
+PersonalisationString.7 = 7b60ffba6c8ea841bc142ea2a5f0712ec5a388e66c782a27c24948184ac14d6b
+Output.7 = b6fc6ef2cfd4d6eaa83d8519456eebc0e4252f63f94596868a4221f41f82f58c1971b1fdfd164ab9f537b491c823608eeb2ca0a099762d8eee4ceff82067fb7bf6cfd41b60cbeed82c3a971fc00b7f119d08c8ab1d69ce9ec63639116964cf29d2bdbf22213241493e6a2a08975e76335ac454a892052ce973a557cbcf73c3af
+Entropy.8 = 1903fc982cc88bcf375bce7b64e493ba9733a728e81caed82a0e3a86d98b7530
+Nonce.8 = 592c7e7a4aa8d34cc21afce08f230249
+PersonalisationString.8 = aed355a1a441126913c093b512532afebd9d9a847162534654bbde9681c1486e
+Output.8 = 7e912023704f16153c4536fd54b7f04233ad944f5d844605eb804d26f1ca9b67fe7eda2f92d0dbec79532739d82d10bbba01ff4a54a1d2924423dfe55c279ed734e34d40123ff85cfaad3057ee0700940c6aa0ecd6fb0eb19b1e65e687315d59d18cf713fbc21dda8dd810b1df9b82dabc045b3122fc15311ddc07a6f13a6d3e
+Entropy.9 = c934043116ae190c4ad878b68baa55a105ea3d1cd1a23e8666a3c1b3e02ba71b
+Nonce.9 = f08277c2711222d21e3318ab9248f8de
+PersonalisationString.9 = b35121b4542add788df00c652c248532fa7c7f13b8d00f15b6d688bc0248dc52
+Output.9 = 472ea39833518026a07fb3e27902eb45c67526f097c35411bee82e57321dfd19cc1cd5bf0c34df829130a6cb54f4393354edc2c403d3060650e86b284fb62220771dde26c151495486e4b6b3f08fcae2477ebef222dcad87e637aa8caaf965ea116452c2b3e633a1ad91d0a8ed53c13778901e83de77517ebd9c64011c131f5e
+Entropy.10 = a206aa10c2456110318e3e76cec80fee80496e1f595f26afd100f2a531131699
+Nonce.10 = 9c332bef31e05c6ec0c0c2f2c6562cd3
+PersonalisationString.10 = 2391dab997a7f4563a5f5ea03835293645ec700b922d1d722e3a1a4885c165f7
+Output.10 = ff6947374b3d0658da07923ffe4d1f5c014061ef906b02ed82c1c59321c4776a5b4b43f203d94a86f309fbfbc9c1ff7384778a5b35c74f5b6c4ed1dfe23ffe1cea0435effbb7faef75e9bf83fc8493319b8279130c1d0373d04e8f1906ad03bc0563ca2551cc314d7a160982740a0212208a46ceb1ecc738a1b49987fed632db
+Entropy.11 = c9632fc29a38d4f1b72654e1502544e786fccd7fa34ae513cb5c96680c4214d8
+Nonce.11 = 4d99af0e49407764159aaa3928d6cd1f
+PersonalisationString.11 = 75ae0ec81469e7f2c902fa4c328f9eb9ffdf277f656b82ecb637db898aed5dc8
+Output.11 = b0654f50e28ed708484952510dd4a04c631fe420025fa006b937a5046d5726803961ed5474e07005c6b3b6e391ed5eb89f1ad1e23fade6247bf14417087e62d27320c75a1eb5b842a4722b9cf6ff9f79911f747ec25709b8ef643cc76bf6006b3ba237ed9ebb18d0f98e9f7f6fbc6e5591da1e51956ee961bacb51a1037b25fc
+Entropy.12 = c0819e94b28e3ad495edc492d65e0d58cf83ced02e31bba09516c5be06c87476
+Nonce.12 = afc45eba87e9542f12c85287cc79c880
+PersonalisationString.12 = f64a0309ec12b8b38433d3e22870a8efd95a9cb891a706ef0815720a7f79bcba
+Output.12 = 03b81d0734664b3154c1c1b6a354a5a5c5990596a141a5153f0dda4a91d02e79cb2aa1c442f1f34d65852100e3b6522da2921820c791d3db0447a31698e967d24989fc9071b0571ba4484a7e87966f85a99b0b7f1f13bdc156c546dd5eff2bd8e62419390291f4a6d8b4706cda3dcac5382150ee68f6f41896daf60692458040
+Entropy.13 = 2d44aa9db2cca111cff20727708b96ec48aa270b9711dd4f3a7e41c7c91627b6
+Nonce.13 = d9ffef52eda7a37a2ac55e170c8287a0
+PersonalisationString.13 = eee6408c66e3853730d50bac7ef6964dbb6e0180b75de7aff2102e178209f1f0
+Output.13 = a4f7e08a321a50417d71076d08f86b71e644303a4366fa39e3cb27b8b2cc0dfc2903ca54cccb019463e0cd6c7cb29ce024820c2fb5d2d40d56c158117710a80018a6440b19396f025d069d32a59364e758f13bf05f406bb8ecc6dea73c8da68cc36306d7e66a1af6909ac3fbab7b9d515e881547da0b9cececed22c3ed8b01b5
+Entropy.14 = 708525ab7b7b2027fe3d5024e81a14e828ea85a78633618486938a4460c601b1
+Nonce.14 = 10818cc50b58ccb660d65ff705041a37
+PersonalisationString.14 = 2756a89e79266d6d86bbd865708321f529b023d0cb5ee5d9888c37db33dd5164
+Output.14 = 7b3d778ee1623b08875305d5761ce2cf44ef1bab87c7d0f29c862c40d3da31240e7450d827909b6b131a9b0e9ad68d5c02caebf4f3b0b7d7ac1cc58e353ba68e7ac9eefc3de1310cf9bf5f4b854ef3fc36e940d4fc50072845a83c38a7d4372c191b900d11d11a907a50607c348951ccfeba4efc30377e4a965056e4e84eeb02
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a05a68a8c08b38fcfa7891efdd733284a7d2c4bb9f0ae2eeafa41b88a06a2737
+Nonce.0 = 6acc7f9255dd26980333bdb60f33b714
+PersonalisationString.0 = 3b9ce45b351de38f6703d966340c30e17f196e5666efca130a3dc124c9386cdf
+AdditionalInputA.0 = abe4faabfc51e29fdd2190758e90efeea7a80f0540ef7bdfe914412b78dacba1
+AdditionalInputB.0 = cd5b8bb6929003b8ed80fa852762327a3a15b6e28829447bc3f4280b549d7067
+Output.0 = dc0e392ed6fa6c8da21d7898db54637c82e73d4acc6533d2b7beb7f3be57b5e89c20add7a92b2d9aa06efb56a9bb3e79984657df957dde373a67d6d6315b87efa0bea64bc4c72b14c84b75d0b4c1dd9d8b8cfc29feefa89e14c8e14af86549fa83606d7bfc23862195e24b765d6c05dc6aeac4173bff4612f5464031ed8d0bbf
+Entropy.1 = 93a571e822a0fad9812cd3443dbf66f93fcd6004d634496ec45546e2b4937ec2
+Nonce.1 = 47bcb9d31b67d394084b1edb4339fa84
+PersonalisationString.1 = e617903181afbd1713a9a25fbf71bd388b6767a7c25a729d72b4461ed34d9f08
+AdditionalInputA.1 = 5cffd6b4d50b0e279f917c42e54f449fc1768e088d2853168d0794fbc8077987
+AdditionalInputB.1 = 726cebb2c02f1fe79c2eaea863aa8624ac7e2c4d4ca113136aef023a160e073e
+Output.1 = d7b2bcb6a101a2bc272a8e55a97bf14b852ab233d075f612dcc2be58c46e7e67c94e218161ecc56fa9e1dfe254b8194e4e521ab7f694b019346899f8f1f0d46f814e53f9121d0d723a2d65aca687f7f79a2fc8f639af86db8b6c946abfd1f101eb491a495f307491c2e6f06d084edab182069e8a34c4c37afa46983a945fb3ef
+Entropy.2 = 34e25eac8e69b5ea03de942f71d3f04fa63af72d4f26f1e705be13a2fe349f0f
+Nonce.2 = d51b022a70e72dc3e208e95b101c5a9d
+PersonalisationString.2 = 81e9414808e7a951dcd53f1f208914a3f302fdd98cdf9f9cf857b0fcbee29897
+AdditionalInputA.2 = 3933b41c42bbdb3fa04f64c0076d5f92a02f476c194117ce399df215ae9459c8
+AdditionalInputB.2 = 94635fc96fa8080fa35ea41aa6cbf4c36a2208ad00d57656f837eeec6236eb92
+Output.2 = 3bcb95d0f72edd2f944e3572b94d60317cf03d4eb7d0d88b4a159011ad7617710210a596685f897fa2380837f84e355d42f3b43a35b605dde79b94618ed01229860d4dff1371040ab05528de9e99d818de9490a9c7e19a4088e710561af01fef260233ba017848facafdd9e3ec221f396f1f082791c70ea7465e49c1b7b1195a
+Entropy.3 = 29765e1ce687fff3db813678c37465d46d8234506152af4b2cafa32e986bd126
+Nonce.3 = 528be30fc81c3766cf46dbd3b16c48be
+PersonalisationString.3 = b528dae3996d2cc2b699e341bb73e1dc85a8cac5aae5203475eb98015a0a0c5a
+AdditionalInputA.3 = 3474622ed44ff1c4c0e5f221851bfd5f323eed2395fa16c096913d54bb85f043
+AdditionalInputB.3 = cdab31b9ad6083d72493c4f605a14b293530c70907891e0f51af0869a5451fd9
+Output.3 = 88f35a8528c135ff339084e4e3df0781f73debb34a2b9ca1bc87d3156d082797ea462cb74c70b1cd2a4b71955894f35d2e41ecf2bf5ef7203215f7b327fc2a33e1ade0dbcab934ad32c7698cd2d2ff480b531051236b503c72565fcfb1547e3a94f8458ddcc960b9d4c3813e7b31b9f807e4a173e2d108eef2069b71f7a59e6b
+Entropy.4 = 455fe46cae82e99f1ebd8ee1c03b9ff98ce17186db12bc8dc9ba31a303380a7f
+Nonce.4 = 91bc22dcc2175068405507192e3565ac
+PersonalisationString.4 = c4799b4df79f5542c085caaf240c5efcca3185aac5901a874a354f07d229cf93
+AdditionalInputA.4 = 82c17ea70dbf45249a2a47c9edf27f51db46ff24fa10fb37d4737812a6523c35
+AdditionalInputB.4 = ef55a79f4efefdb76695e065b257aacc23ece92d7351aa9c9dd2f4974df5040b
+Output.4 = 321f1657bd19b8369fc601d76bdeae5896790fa3154bbc3ca88019104da98fb4cb423b79d995d28a7d981df585b24e04b96b9100ecb3a40e47f161b4e35e079fd9d895db4eff2eff4c08ae73ae39435d73ec0dc9abdca4afcc90cd582516b465bffab172f1dd518d72694ae32b2f154041643ee452da80f5f85c8c2c4ac295a5
+Entropy.5 = 3c1fb423e65ba0984f66ae300cf60a34be48e62e2f8df0aec2b14b2c7e15a0c7
+Nonce.5 = 5d4002882ed27ea5ddf1ac221c7dfc76
+PersonalisationString.5 = 9431095b002e735089879fec2abbe52edc382d464c741a21647b823e16bbe1e2
+AdditionalInputA.5 = 51277ac436b7163b07e0df0dca03f533c9322d6a597ea68549115ac4f45b8af2
+AdditionalInputB.5 = 24771c02c1b804d11ef2fdf0231956de92fb0033dc08894322c9bd60757fe1bd
+Output.5 = cd011dde7042f973325afd1711d089beb236a2b9f1da5d6cdb0d93dbb139f31acdfb7643ef7d5aa0518ee0a84f6defed4a9751695773473dbb819897e76a22de3f6f2e9bc2d0a2b3cd5888c95d76aac30c711a544df9dd3deda1836e681dc2ed0a02210e2c2a430f3329fc9ed354fd86b411412489debbdd4b105460c1e0dae4
+Entropy.6 = 49680571f7a111c34094198031a3c0687e65becbe110d2002682a893b3d11210
+Nonce.6 = 60689ea420c104a1796e4fdd4eb0fa7d
+PersonalisationString.6 = 250cc81d2f52c2ab38f336cd60e682858af378edf5183cb08ad35ca236657d53
+AdditionalInputA.6 = 0add5184145e1741a9d274e3833eb2ad12c553a40a86cfd0d55db87f926d9f39
+AdditionalInputB.6 = 611380eaa4e1eb0b8e86ec6d73d2f82f86ac55aa5327b1eb95e79d0ad7f498ac
+Output.6 = 7508867f99822d5c81c9bacc662ec9371ac354b2e53ed5c566db48204cc0a50a6c5e799759d8ac98f995317f450f64e6952c2fe97dc270e910c06294483449eb3f2ec020be93ffb3eec5b74096b2ffa8de84033c8312964f33c6c9641874b664f4c538dc44837edc0666f4cc8aaa4144ea468b91018b222c97e94b05365de985
+Entropy.7 = 70b5d94214b567a9a9be4644d320fd8260c903f8be21eaf68311866ebbd83fcf
+Nonce.7 = 26e5dff4fee192d413ad71e370d551b1
+PersonalisationString.7 = 837014395a963ea27ab2d3f2ba37667d49dd21a8d9e86156dd667a45c4998ac9
+AdditionalInputA.7 = 70e16a291f44dc715d7bd642f9465ff1ce91a6e65d71ff472528d6985d4fc334
+AdditionalInputB.7 = 1f56ba398239f7fa7b070df36c897f6538c1a4563831b82fbd198215d20de9d5
+Output.7 = d54ff1bfe767595b198841c933b15f94c8ac589dfb7f7923c4216884ba26b38aa0d7a7ef7e3b930af6c360b87401b07f42ca570d385e6d7b221e1acabdad44774d9c4b6e072ad68548aa770456d59fcef049cfda7686f1cffe9de69e66f6409002932f04f612c338268a8ec38ffd7bedc9649c0a62403b63befceea6a0d9a4f2
+Entropy.8 = 3e075ee0f982ecbbaef7ec5ad3c349984c1a8a5374752994a9cc9ff9ae54e72c
+Nonce.8 = 626d4072632b13b1b61fc3bd0fdee7db
+PersonalisationString.8 = 9466286a642715be18b68e9030cf1388e81bce10378b4f4c70b249434f2cf540
+AdditionalInputA.8 = 526e5df09c03e04d845d526291a67221307d0942487b30ba18e6b66076740d07
+AdditionalInputB.8 = 07b16490c14b349f0c8135d26ac8d320688aa208be8152a6d47aeb37fe93952e
+Output.8 = f7d8be58fd50aa64b8dfa88c04c18e07130887b88eb87036ce613c5c7a5fd1aa814ba3f4504c86e6e4477f8636dbc189487b172d5a1c39cdedb2de59c7626119d8818c32c456cff5b4693ac47cc48e4785e741dda953a06f4ffedbc67e016e9926ac3a435eae8ae05dd7a7d5ea353d6feaf1c956718cb57ef79944b8c648065a
+Entropy.9 = d374e5eca8156c8f7bc147541b8f612c6e75d16b35af18f2f23f8535ba873db4
+Nonce.9 = e5c8ec3ec276ff968fa3d8e883e79c60
+PersonalisationString.9 = 9a7bc0d6e96ca535066a93746c91933d41604eefc7f61de72c220704c9332626
+AdditionalInputA.9 = 179e7e09172ec4fec2309aa2c3c7aa45a2eb6d09176a1b5a4171787b589ed48b
+AdditionalInputB.9 = a470506f702498100c8a9396081ae4cf558b383c28ba49e46ddb9e0e9fc7417e
+Output.9 = 30f3b8273ad6a190d44dd32698a13537e236c9be889644cbb2bcf4185728abf3cc39d9cccfab163e604993936cf32deb74b064887d4966f3377361e161ce8217a21ffd117a098c906a203e398642cea072ce86b05a0f555a19b885ded8a0c247589c30940f0cd8b4f152e041abceea635b4e8c9cf1b71933b9b0fc545bee821b
+Entropy.10 = 01822f1e8e132960ff685b90adaaaeb776b65a9e44808eb1775288b6e37d2599
+Nonce.10 = bcfa4bbe9c2ead1770f0c9e958905207
+PersonalisationString.10 = dc5f55ba94e6771103d2cd54605dc8766b95db748309c17f40657f61b1e963cf
+AdditionalInputA.10 = a5b5ba4a7366b7efced0c4a12bea29d4351473cc23c5ba1a6473b9cf434d2ddf
+AdditionalInputB.10 = 2462cebf6193756357738a405a5161cb5667b7e728e9d6e4b88bb10b137cc16e
+Output.10 = c003a5779cc658ab5a8f99535fefba8480a9b5c73e1824379eef1bef4b46c7bdfe1edc3ec5decde12f5142f518c848e6187a8b4761278dbe75689d67c41b0471df4b4026c346587b6c6266001ef5c5c4590f0a8292d68b568a378c1af10b1a197c159587aaff1de691114c7c0210a7b24d7b15e64a7a14007d89db9b8643082e
+Entropy.11 = e2c583e2bfb46475ab107222d35be7c1b9a75655e774c585e3ea147208eebc2b
+Nonce.11 = 37556239f4598163b7ac6658716666cb
+PersonalisationString.11 = 8bf6326005766f97c95cf8715d52a9ae9e199179d93f362c1e57f3c08e2353ad
+AdditionalInputA.11 = 6d0520bbefc8a7da9fc1c8bfa0ca32c28d358d9030bc4ef2a476702919e273ef
+AdditionalInputB.11 = f08f7b1fc1c8a7c5d428bd4ec0fca411e8e3e5477fafd5f3892fe07768257f50
+Output.11 = ed5f399cbe7448a0abb713cac3f2ed492b0864ff597d18ebcbc56cf66c846327d69d1f024e7565064c1900c8ea5abf152f65c0c8e85303966498a14a9a10a5209cae042f8508d033bbc9b62f9ae0a4f8d25f2cc2c6ff6105ba0e81ae2d2facb54abfa1a2fb072d3ba10d60864fdb416ae54558cdf5a39e2825a228588456daba
+Entropy.12 = d5c1571bd698d040ff605f11e0b934f4e11237c3effa1c3d037142af7ed382e4
+Nonce.12 = 2a8a311bf44e2cebf20b1fae8b935b3d
+PersonalisationString.12 = 15df66513dd00f3ba3174e1a8645c189b493a5590f0df47a5d85fc18bdfe7351
+AdditionalInputA.12 = 54440e082a92a386e502393e609919e2b2816a57157ae3c8d2f2a2dd25dec347
+AdditionalInputB.12 = bc281bcca29989a31699af26675c9e724942cac1ffaab380ae05574a8bfd0b21
+Output.12 = aed06907de4d895ffbf5ed194efe967b59ed23b31fbc0c4ef3286ae7ff9699934e156a97830ffef69b4aa747cc5ec664d7127ec5ed300b3511f16224b24633c6a4b677e13363a6036514bad39b55e1eea12d82b239acbdf268900dca3cfb0cc9e73c3f42a1d1d4ab8ec83538701384db24a6a8e2971d35fd6822b9536e686673
+Entropy.13 = e63b290be3d6235e090ef2decb3140980843c295d91f826ab2a44a1db300b1e3
+Nonce.13 = 19c8428ef1c5f37a5a83784be829f831
+PersonalisationString.13 = 9ec83b160bb3eeafb257d2fd7ed5b3f7b897f5d30f037f07761606f7cb3dc798
+AdditionalInputA.13 = 9003fa204ba1fe16fee24c616bf4f9b47ddde433b5325e789e70493196daf967
+AdditionalInputB.13 = f64d3df45dbfa0b313766e8e9ec314aa615848f0239f5666706e296a648a1e69
+Output.13 = 0891fbf7f92a5b24af2c2f81ce3ae10447c029061d12485574a6333a0637a34a2f75750ddb9155aa83a43584f1e3f7d15e4130c0a959e0b986920dbf1753defc6985a226f19b839111c07766c2f2d38cc922507f0c2272a1c54542acb7d1d4311028a55690d5a7362795d8f33e8eaef0517fb733531debb43cf1f32db4dbbd4e
+Entropy.14 = d56f9104c7faeadd6bbfd73c3d4063336221d9125e6d784a9444ad31c5f575b7
+Nonce.14 = 022c0ab0860a63ddc0ab734e0e96fba5
+PersonalisationString.14 = 1b5ed7471f45584232f05cfddec666c4733954cead8151642d64aff268f2c3a5
+AdditionalInputA.14 = 764b81871036cf65802c4e9659e25b8039be84bad1b121b536d2ffc26989285d
+AdditionalInputB.14 = 28d46df3c254e5cc199e14b45bb1e2f85a5da03f49dd76b5a16b76723d5b9855
+Output.14 = 94e1fa76f879eb9840cd50853565f43cd7b0545705bd9a35494668bef7d7e7085b48a455b38fcf10f145f28a599c58e2f88c2855f2437a17d7333d243a1c25b76bebc6a94f7abc3fabe4c78041d9b3eaf675c11970b14cfc6ff20c8b23852b2733ef8d8416a920617a9b271beeabdb0462e5d23fd68b56f58e3554e81493c5a5
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = db6dfba414ef49f895955df1945d700563af82c139d2bcf6c01b95adbfe77f00
+Nonce.0 = 69ea910066446cd8ba291faa094db8a7
+Output.0 = 1533fafabfa93fd946de67a35b7c26a9a143c59bae9338e226a2ac46984b7d2d674d8adbcbaa9795c3b2ad64540207a6f6131f549cffeb6e39522a1f23fdc8f347f23a51489889badfed38b3ae3742bf4779229aea54c5e844ee84479a8786e61755d610fa3ce6e687ba18ed5d174d823b15ccef9880111e02db9315b8515352
+Entropy.1 = 9699a65f2df69a8b3ababe4a7227608ac30f63d5487e7b3b05f28ed941803bc1
+Nonce.1 = 7d42534a62ba99f267dc52feced0edff
+Output.1 = 5206df57c834ba53c50b116f9a0cec6add0c9541deb030b39c217a5598fbc6372dfaed871162af6c99c36ed86d8c08d819fa56b1fa2a203fb54628a8d348c8fc65cf21a021b85b8b8650d6178042d75124557e55334a7759307900c42e0442dcb090a931d4dd817ee1dda05f7886529315e940695a8ed56b2006bfc61b2e85f5
+Entropy.2 = d5b674e58f5f8f21e0d8da8703ee62dc1286de9af95ee7421b34a951ce5db6a7
+Nonce.2 = 19c2ba4373b0e0c7c20a281ac8d3c438
+Output.2 = 991c8007d8632e34001bdc6283190c2a43d89a56176708247c74a24ed65cb1f544d1abadfef80133015af9bfe9502834c13f1ad0d5259a61f19e378c970fe7eddf9bb5750359d54fa30febe7fd3768db08d8ee3772dab65f3d78417cf13747af2bfae448b3ca4e0a02ece5eb04195c6c635f95b99782e42b74a07815936cb064
+Entropy.3 = 4ce06c20df676af7fa851e9be2b4ea2a86be64d8188c7da6353df113b4f000ca
+Nonce.3 = c7542cfb2456650d2ccefcad9c7964d8
+Output.3 = e0b6d8f203e6ac81a4bf4a751530c2f09fea755bb0a972bbb2dd30d413a43678ac90315ecf05e624d10e1a5db7fe89daeb2a4ce455197f4f490c4ebcf8866587764b77f48be58f88949e7af6e759fa99d3663fff8106c0352350a24a78564212c6da2d6772d1d0d038cdc509dfe1f066e8714ee230366727958570e1a6e4abe8
+Entropy.4 = f15833c6350257237e8307a32b4db1d638639d8b473810493ecb6d62ac0c1094
+Nonce.4 = f562941b78e840493f81760a83e47209
+Output.4 = 760a9b1b06ef0e409efc635e5a86da02718a84927de5b51d30474984b018e466eb176d3cd548bc3dd6b776fa102dab67ad1be00e5754387ba80921a90ea5ba9299cccb8a2e3eb72b3f04a5c6ae4aaf62ab04c5660421582a305e1a54f34d9dff34c3e33f47928ac780afadecfe50a905a672a7fac476a7c12716b2e0d5de92a3
+Entropy.5 = f33f1c74da1ca7000bb8c4dba59a79f3bc8a11c3fdd3e73196a54b0c93732946
+Nonce.5 = 543b324f3807f63e749c3629c4a5ea0a
+Output.5 = 8d2b1c2c2835c21c7d1ec1c382e717738a2a8eeee716146fd23f12d0ce42c320fd935b97710702639628592f4dbfc83334bc921cb27adc8bd704affe1616af16aae655f4026a7d931f8092bfaa60df8bb750e4aac86505df154cdc68d5be3bcf64f09297df172808efa2baed0ac6159db3ee4d887c74140803f0927c56e225ea
+Entropy.6 = d1f72d93915eb1dbdc5e0783078c64b7fc1ff3f746eba67f07260641bb4ae597
+Nonce.6 = 820759cae8c50a47f349acc059d8970b
+Output.6 = 4255a149e758b54ce159c7a627d5b0ae5ba89822094d7d5e8ae5ec4b8149ca04655d7ee953a78200358f95880434aab6b3dd5b5d90440dccf7acd8001728adf857610de53c98e9717536dec368e9cdb4db2e683db30b2269a485fa5087be25bf4f845f2301b858a9b32e1cfb09b8bfeb7e4e2b38cd3140f016e4a17457efc1ac
+Entropy.7 = 89af1c3421ddee1b8abd1a3dc386f10c0d02b9efa1defb30f6bfa02faad51492
+Nonce.7 = f723457ce9aa2a3aa439711829a15a70
+Output.7 = 508685fa0696b2d5d2aac8f6987b4c83a0118efd349ab72d3ba13363a4ccae18f41ff1c05cb5be59b3b45de85c332212d8cc827ce4ca00630581bd15f47551848557494d0040bafd02193971802db5483727eb00d1f7ea620648c92760de8780e5d70487085b215f3a67f130c633bd7e6e4a963c57d0b35232cc16f332933890
+Entropy.8 = 9c2749813fa1d0475abb8fa34d2ace6340d3693801f506448f89284693380d98
+Nonce.8 = 2c2fe7f4ec934b5f7d51dbd1410c9308
+Output.8 = 6ddd7cc110272e0fbf8aea493e5319435d3d2446ff51ce89c84ee2cfa4dd42c0a10e1bebfc92977f6c898ab65a2bd59a7170e8c83a0b349399026bb8a656f8f9f27d167042f43fa367d407d460a44d1f6776f5420afae894f76fb6b960a2d76b2a7ac4ba2653e8753fcd54dc36ef5907373ba20db4fed72a078eec3d99687bce
+Entropy.9 = 1de3b3eac4ac1b5981a60b929fe054b81780889919cecc4d06304b5efd1128e7
+Nonce.9 = d46cf622a5ba659a3a53a6e3aa02abed
+Output.9 = 58363af7e61ea5f8bd8313abd508bda4bdb4c89f26fe3f2f4ed0d56b5e22bc24f28ff17fbd03aa842032cc0f780407dc9a67588f31634d28ad6cad773a36e58dac33243c2e25a9c72cc91fba36a6c0ccbb504f1b64f76c69ea857c9a58ac396a054095464a69ea916df9eb178872d1162ec3b857fb69d5fb0b28ee98ea309fbd
+Entropy.10 = 5ec6edc2bdca4fa7e3b885e70a43045b4088ee07eb79ed563cab5716e9843d9b
+Nonce.10 = fea3bdb647c22649fec9a30cd1d44bfb
+Output.10 = 1aa2d21d79e82e6382423101eafbbb905513930beb78864a023c0ba81f9bebc99f74e9f97dc8f68c5701fceb6991a7b65e3978e17e24bdb898fdb96037fbd1d6820caf2ef786d2825d95fc3ea031597f4e286c48d036d49194c3da219cf7b9d90ae72f161ba2ceb642d622cc3256689ebb2cc8a4e46051ecbf6a6304ec36c54a
+Entropy.11 = 59d17c36e4eceb4de7c23c104a3cc94572a7297c8cd83735a9e0184e74dbaaa7
+Nonce.11 = 1147202d56aec98b784c2703f8b66474
+Output.11 = 72624e2c6f1bb62079e3e3b74d60869a7d63d49426f51e4bc6da2c171247779dc3370c3ec48aa2c64f5d712d0d41ef040410f5056fb08894392dfd576f2df410947b54c4bf3540187120d4301b51fc11014b7f6c1a03867a81eccbdd6e0d73f8e758c3ae0b935df40771a0f0c890c9f3d2f46c1eb9e66c1688c14427a6b58da1
+Entropy.12 = ca9f514aba48a854c94f9973f69994262411da1728585322a71691507895b3a8
+Nonce.12 = b04944da2bc79245a96a015d9f2673da
+Output.12 = bcbe1625a4e0e6417c13b0a615102934333d942dac85ef3ed0289b6f7a318f80addd5b1e9382165d5a3ddf11a171979d855c7bd5a8fc2e3976029f3dcacdb14e04178d4bd84483856be2f988af694d8e482eb1282d7730b288b7dd7c3eabbc60f673d3e229628b5f6ab4af9f173f7aeefd249d2bd73a78403cfdbbae6cb2a053
+Entropy.13 = d31ae8d557811d17f12d1e8d98e897499e6cea5ad51afa654f3ab2c43b633597
+Nonce.13 = 8478c766f94b48f94aa2b67f8963b52d
+Output.13 = 6ce2058f4dd4d7c2aadf03a0424a33c439b641de320ec2e8fcb33f8fdab0410cb015a76d4931892ea0a188e55d3a9790692731648be5e3ae36be3b9d3eeba21a2c62a0ec7af9f8c2e3eff2792e7bfafb4d346a4fe5077f6b3c2e34d059104072137576721a113e981e47480635e5d0da90143f2c960ee3f34f5e50cc22b15b75
+Entropy.14 = 3bb1f6cabc56a02643eb767cc6e5bb3a5bd765555e4e27159ec905012f58de22
+Nonce.14 = cc37cc9b20a2e4de0bdf8ccc3261eb90
+Output.14 = 28f20b9a94340aaa6ca98174b5929ce3329d81bebd67faf5e30d12f775748c34c848bcda26cac8b4a9b34c7c92c9984a6f5a85269583358e985c2b372a887f9e3f0f3920dd512def27d818522ed1a49e96d00a5aeb41bafd152144a8b6f93426e73d6e8ef7a8a5381bc464b24061080af02aac51fdc52f404e1349b7d04daef8
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 8ac4497cf49fbe453ac4663b1e1c53d2ad6add0f63f56313a437801d298b47a1
+Nonce.0 = 8510f1a9aa56747878f2c66eaccb23bf
+AdditionalInputA.0 = 41d94d876248b34deb2dbe2e1b9852547a9302cebb13b1f0fe99d7e907ac4e22
+AdditionalInputB.0 = f2d69751363e5ee9fd0c0a9cd1ad5734c9d5a6e599ddcc16a86aa9ed80730187
+Output.0 = 21fd8d48e42f0037a3a69db14cda039ba4e08c4c17cd26f9867dffeb3f22a7ddfc919298bf4c3e1a154fba617842eff44e91df94d06f58f44824982d05b6ff608e9727e56751f7180bd1d829e44fb355ebb69a8fbdfec99219e4df8fd47e4d59a8f1375921c02ec1a030383ff8b3a3dba9369cf275a783346751d20582653ca2
+Entropy.1 = b615d6ec1025e148df17e8f18ca8b34265d561b5420a8b53e9723f8e13ae065c
+Nonce.1 = a3c52ecd92e3a9e83dbb747d2ff3cc58
+AdditionalInputA.1 = 413591cc34326a1e9bdcbe44e3ec7c096ec5ceb3cf737fc25ee53627a14dadbb
+AdditionalInputB.1 = 74978fb169df7d7c29aae8af4c8c02ebd292e6e6634b0f6e56c0d267b163641c
+Output.1 = 1ea225119d66ee0530f9b92a60bc7d8dc10b16fdeb1d21f2d1f2d9c4d114c508335cec6bf157e1c7379c4fc42a38b28d88d2701a7b6462022c75f57915a1fb794b572cf2a39bd8740102ed1738d79178d154ae9fee88a8d2a845e192a6df69efde473b0d31e58d854d39aa2d6d230eabaf67ce684f8f471062bfc7ee53978768
+Entropy.2 = 4045ea2ae7758290a7e2835a4b126a9a7942cd5e3e0b4993856554110c8ecdb3
+Nonce.2 = 6a80fd9cbb289e15e68e6c66e6018557
+AdditionalInputA.2 = 4bcebe218578fbbe092ed01487052bb9d2882b9b32770ed46198eb47a82ec2f9
+AdditionalInputB.2 = 4fc425a919b1feaa55048f8f0a5e8503f6941af0af05f0e1c1cfb31ea39a3064
+Output.2 = 0833cc8bfaff9543bb099c2f96ed252fafbb30063a8866e143559a68c579ca4cbe59a5c24245c8c5ec5e421fad9830c85d72666d5d6c8a177ca6cb6573bb668e47ac11aae50f9c79392c75d856e6e808bad57f210b45431ef390d78784cb05f7bf572261c7c28ec290be028a8fcb2c200c6dea97449adf9e0e1c93f398460b52
+Entropy.3 = b3134cbea6c62a43463bcbf065aca184dc51125054626762103e5218b20a2339
+Nonce.3 = d9fd0dc2d5fd21c3ae9550dd0a5d971a
+AdditionalInputA.3 = 57cbcbe6f85dcdade76b74852f832692a682d1a8044fef6add7ebed86dc5fa93
+AdditionalInputB.3 = c7d86acffbe4228546bff7e156a6b8d45c0d108099f155762ff49ef6f2a3caac
+Output.3 = e155bd9b069f6ac59430343be7fea5534620de806a963b143ea7afaa5402d5e2233b606e7d321576b833ef5992a005c63da1a7fb8ca538ba06537e40a1f9499eb04ae83a0522ca5ce5a69d2e30ce3245900c5d86fc554d0ee44b74ec548e86313a9d6837bfb6e441496bc868103fd07d333f73c7f19e9838743cc25694e178e4
+Entropy.4 = 6c93a3fb792f55d8641abf9c8de9253757cadd451b550aa377c2905710101089
+Nonce.4 = 6c5d731b0aa78754bee533a260c5cd3e
+AdditionalInputA.4 = b51de8b31db492f0b0521702facf637b731f60e876266ce68a9e51f46e673b87
+AdditionalInputB.4 = ac50abaeb46dd349fd9c823548728da598cf1730e8b7c8bc05fe778f26d7c5e3
+Output.4 = 441e951b80c8c7ac422c0e722095213f895a731c233da6b36b50eecd8d6a5617a66f8ffb020c4f10e2fe041ab1b212fa06ff79046f79f1558dcf9c8dabcd7fdf1b5215be465eee630f1b1fefbabbcfb9e0558c5d31c589c8e3acf61f8cf28c429139f95a6321b8e78e58599e5d09f3553178ba55d4273ed8f5b93aa4cb5afe85
+Entropy.5 = 97f7bb185acddbeec46dc7a962789e68701218cbc0958f1c4006d88218e0be4c
+Nonce.5 = b6286255768c7821825fe51d60ffafea
+AdditionalInputA.5 = 35d8cf0ee86ec23782588befc8a4c8aca9722a179f1d7f66a336d41d00897790
+AdditionalInputB.5 = 6bb6c0b42829f95b364557054919882e7ac1a9b38f845c5eb76aef1b10a601a1
+Output.5 = e9147ddd76b8a94abde2154c472ee3c797b6eebf4f58c6709256edd2091823ad59510933ccbee75ba7ca7669ca5f293cac663f33e5371e7a4605848a0f9b7a2cfc55c02d45cf2bc9ae0eebac2bbd22db750452c925e66597d8a5663c438a1e6c36f939a1ed3415180e878ef5c6b58f0163664b0ebd40ca2a41801b84c61c682d
+Entropy.6 = dab48eab3269b3a0876692c4c29707afe3d0f9eb326267f0c23dddce432b75e1
+Nonce.6 = ea91a9cd0272bd4bece9060d0d221f07
+AdditionalInputA.6 = 9cea5a04c2314e016704d971a1fe3fd90d3c9610012f9092506adfa37752cf1a
+AdditionalInputB.6 = 81eb8936cf9c62db818194051e735d269fa28b18b94c90c90f2789fe9834e803
+Output.6 = 3263313489a986016d571cefbdd2ad0f403224918038f8516f98e7755b1db3c66577fb8ace65ab7f26db2f143b1ad5b41a8c46a74c8b819d8eba34a8b3ea50d1026f5e70082a4270a344834a9263a4e36b03e393823c2a8031416d7b73a4360f349dcfcfe457636b555967753053a36af555598248ff74a274ee15e62a8084c6
+Entropy.7 = fe775a08961321d6ecc543435341178f66f444a6b6f08caee226f830ea7fe362
+Nonce.7 = 835d186118215d6dedcf28f8ce1730cd
+AdditionalInputA.7 = abd17e63a0b6899b055d68d3df8c96425520d506d45e049ac83a23ed9b321c97
+AdditionalInputB.7 = 92af9acbf65be3345d97e49d8602f8be465644d854d30222274a15024edc3afb
+Output.7 = be45b9e43ddbf6f6164f6bdbcbbb4c50c6bd8374b6435ae83f793477c9348e2bdb6245685056611c6e7802ceb4387e8019bd2dc4e9a824dad501fe6bbce4d834d995922de308a25e551f94dcb7b04d828da966172323e20a32cb4ddd0f4b028748bb37e368a16092317d498a5b501d7f2438b49c62e94c2f32e5bac15ea911f7
+Entropy.8 = a05792cf43db185c729ac261305dfbcd8d5ec59fda608be0157316ce8929d9e3
+Nonce.8 = 058f25520f3053cd99f3e31f2ae2c0e6
+AdditionalInputA.8 = 0010388e0a66f52a135db41dfa61cc72c448dc218f4ffc6b368d41c9e1f85cee
+AdditionalInputB.8 = e217ce83882938cf38d588c1439a44941dddc229b4fcceaa5a4f8fe5189ed660
+Output.8 = 240980ce5faf0b0de10cf3526c7eb0a8bc80d45983ad50b4214d6c55a3c720206aa5cf3486caddec8a605f28ea71bfe7109b4faa2de938d240741ce0fcbf9a6d41610e0611bf6c4c5b6ecea9db4852c0bcae39d5b6d597940166e8af619220ddeae40dc51f83383dc94b38b9666391a9b62d6906162c0ff9c8627027611aa00c
+Entropy.9 = 830f4001b1abbc338a643001456a8a805b3c9b925139d6b1c1bb461d6bd031d7
+Nonce.9 = 7ef3f37a33db5deff7d5f1c98c54211a
+AdditionalInputA.9 = 00bb94e8bdee763a278f802da1ed1f7fe0577718a055eebbbf120111d4a5b2a2
+AdditionalInputB.9 = e8e871d4812894160b70e7cb44bd1aab226dbf8e4fdabf7b34a4511e5342d1b2
+Output.9 = e80cee53dadbe53bfdcbd9616720e407b4e3c4b4bf92023e7d0299b5864bdd4345d7d5aca22dbd105505c3085c0198a7fa0538557a3035d5bbf4d7d8da23c3c645b5db78277a4db5922ceac4b8076162c916228bcb6826e3c0e3e7024d6eafdf1a7933676c58d355708d07466416226fe8fdf655de8119a8dba17817f0dff3b4
+Entropy.10 = b701bf9feebb980e3a9aed469861a46e2dfc5d9f11bca9ebcb8e5bcc3f62a7eb
+Nonce.10 = 2f392974104fa9410b1401c61b56afde
+AdditionalInputA.10 = f2664dcfe959a84cb384cb88de145d27c2b53a6d2483bf547501b4b22ef6fbe2
+AdditionalInputB.10 = 62bdd4fc510d7c4985cfebcba6baab7a93e9302a8427ecf2592fee3b09a0256a
+Output.10 = a12a8713870b336bcab3ca6ee581a6c9d3a20366cb24b104ffd062d7a76dc3b68b7aa31cc3d00720590434a13db547d9ac5aec2c0cd87f4aa7fa2c81f449b4b916c9d224e0b1ca8e201cdf3637ad26cd8136e5823d38763a19d3e517530b9f27cc38024a2f5fb8620aee989c151d2ba72675d60e9140655a185caea70aeea685
+Entropy.11 = 8f663b3a2df227e03bd383c27bde459b8b5726359fb9262e990db47c60772074
+Nonce.11 = 8c38e1211c37f38bc4ff92401801cb77
+AdditionalInputA.11 = 9a5152240c9a6f601216ee59cd3bb014a4b6785f53e402f13c68ab690e995a22
+AdditionalInputB.11 = 62bfb4426b3f345c82c08f73ce67edb97fbd1c75486d9f9cafe9351884242de1
+Output.11 = b93bb913743785404ded848a1a0c75e105f186fabab702192a0da367c348441d0d98e31e2e4218e69b20fb3ac822419ed6683210e797fa2e9e09591c0aa510cd0c45a4959192fb6c71e8b5ccb0339e2f4a08ec64dc16cf6073244090f658377e2d28a0996421c0fd126e82ff43ad21cc5873aea02cfd53807c85240b3e37d6ee
+Entropy.12 = 4b88fa497e1a2143cdfb7a12f6e3f11e4ca6a402efec54aa9575987b82d30e37
+Nonce.12 = 918d0238640c98b22c3083164e22937d
+AdditionalInputA.12 = 0d9815f3fb74c255e6c21f8ce165bd0e3584db0bead50fc18e18a86e49406e24
+AdditionalInputB.12 = 31a200326295d8dc676ec3a99e6c90b9709b287dcd2ba85582071daad684d34a
+Output.12 = 982a26cd58de5d0ee6c12a76e536c2f7f9e84ef4801401d7845d5d81d979b2e3e70e32648fab8cdac84b884b79c4ad8824d32587ca155b779bf5661fe5fcf697320e8043ad99fb2df9c3c08c1b2394a750e91cb98091ae020b167b0051349041e281305015f679f40154d9ccfa19e1b5f4713e9e20f84c970754a45971ec2af0
+Entropy.13 = 99630ec3f20e7711e5f9b4f1d3383d4b708077f50cbc637030209aedf0c9a38f
+Nonce.13 = 9e5ade896b0f6341e2df29f79d7dd683
+AdditionalInputA.13 = c04753735d995425cc6e462ee6834d804f01ed258ec7ca291f31abbff1403243
+AdditionalInputB.13 = 61dd0c5b1c47fa60b79f562270ea46510378b6a350123f75a33a451f39c7f28d
+Output.13 = 933f1e235bfafb809c878776d02943f8f5f4b306e3e3045b0f2c2018aece9c035c83aec1a000bbbae666eeb24aea145a367795addfb26d1ed29727525818a3edb7d9a068167ccad317afa1ed091d3c81ae761d212939a134d833801149507eae1f0294f561ce683ed38d75fbf44acba1d06431b6cee4035b96bef6a29dd8c345
+Entropy.14 = b3e0ca896a303a02dee471608c750ebc8072af67489a0c07b6ceda197838fc69
+Nonce.14 = f5213609ef951c186e87826db5bea191
+AdditionalInputA.14 = 2be009fb81ff22c5c2e15c988cdac8f21a6f17a4277fb1df773bbbcc39b24752
+AdditionalInputB.14 = 0c869f061049dbaea48af93272c5b321977659a79f8bf0a5c6d68b982ef44b88
+Output.14 = cd9e8213591ed7e30743ba0dbae5f08a4021845d961040c5188093d518c3135048ea8ff052fd66fa83bf98c06d39c6cb522dbc938b6824f51488197159666369e7a9444e04b7ce5832bd6db1b3cebf8c0f7bf865bfc3cf60d2a2c0ef06abf7737590fba097c29fed234369cf9f064b142ca30e3941093904945021372c20d90e
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 6ae74ea53cf8de98a48987c0791031a3788fc6f1a3a9fa3c2ca98456fae413f2
+Nonce.0 = 77128adb2bb9ee72aa11b510c92aa39b
+PersonalisationString.0 = d309529d43091c81bff08bcbfc643a1d46121be49fbb503cd8401d86a5f585d9
+Output.0 = 7f7a9cf087d098d8f437304c5ac8896b16d8190b618bccccc5b6e15a83e9a178abf78c176f8d43c80451f15fdd1af1e247d00475c759f269e5d3c30d279c90152292c3bb850fbed2c59bbff1d4ea15aa57e97aa35204e1831a35ff53e5f4669733db3629f213a1a1efe3c758c6f9c23dd7d99685a4b19f1a3c3f2e0596019e7c
+Entropy.1 = b2192e2f41f611db8fd6578c4db7b622e1356747b49a63277815ba90113336e4
+Nonce.1 = a9879ba05c4b012f9a371fcdc37d6b4c
+PersonalisationString.1 = 5bd87f3a4a6f3b5f901382397af83ac3e6cfac953ae1b35b257341e0e8ee4bc8
+Output.1 = 814e44b745382415fc4978094c77dfa29ff6b2beaa09d89ff1301355f72535cd35b45a3766acb81715d7e71defd76a73488ca327c4633bdda604d4b3a5e7311e85b828debcd56ee1cd306b69eb09293aa3bd4ff79d857b5dd1ceee89ba47e7142bdf786a3724ef6ea9486e1f3d49b634e3ee1f9684eab8b8f0fb447b9cb0ad63
+Entropy.2 = de2bfb9cb335e6bc20ec4996ee55ea9fcbb5332d0f5609dd08b9a8e6c3a764d6
+Nonce.2 = d002e99b429afc604c2fad8be38eabd7
+PersonalisationString.2 = cddcf4bc93b29b5f80d3007bffede16937aab58c86ebe57268c9887c8dbf809d
+Output.2 = f79d24aca980c80d4e446a1b52ab36e9f5cde9726890be621a2609e3888fd6c4d7a263ba045603b28dd2059398986387129d08cdbbd667606d83c561bd7e024813656834643adf5507101275bf99c9f3f706c06c031a03fd34b10d05df736d819d720265f7c6833e7291150f93c19ee3a563e969aaa7c7ab993d2e995fc4cead
+Entropy.3 = 608a851046e8a59c9cbef11357552d67e4dbe386b164ba0972939f11343f6427
+Nonce.3 = 17f976167e4cc80effd01d7e63635a51
+PersonalisationString.3 = 31296aaedc99cf580cd06278f024f6c64ad1497195396f303dba4ea0757bb631
+Output.3 = 782f444c80b8d9fc17120795fa5873414f6a3bac01a6f4dc3152aaaba22d3b6c592c5745a1f6d51c42887933d7077cdb648c4adebbeaf14f7eb43a001e2d6350c7c4bb4912ec75de5383610704d76f4c7e8da45f03b337a7fac87dda64b896b9b3cd1c4530402539871bf974c69d3d26eb11c0fb8ba159a723aa06dc0fb7b262
+Entropy.4 = d34d85e13a4a8b2b22818984da7b1025554a9a5340aee24002e8cd6504fcff28
+Nonce.4 = 61fa36db1ca8950aa4862abb44b50600
+PersonalisationString.4 = 76e9f9bfc30cf06b1212d0df29660f1454b877a83a4f90b5718b2fde18d73224
+Output.4 = 3df907621663d94d48613ef08d1663249a4b148989fee50d44795337b6edcd9f7dd22d626524cd90f725e2c26ea5269b5cd10ca341186c4bb0f488c0a91011bf960bf535dcedcf6c2d0021beb24a2466929bb3da14ae417612ec609d09e563dc5dd29fde5b9fa84c24aee995380da430b381c2c8bca77a66e3c589497f0cda8f
+Entropy.5 = f8dabe8985be5e7d44394353b116a05f04639a9af63cb86c5d7869c52a1c081d
+Nonce.5 = 492f6e8c76b8f44dee078c05faecfb06
+PersonalisationString.5 = 82b9e30283d501574db8be220af52b91537f3c4642ca187f47e04c3f18094136
+Output.5 = d161b0aa71e697bcc4c5c66573c9d4256b8320aeba913b41b84ab5626db7bfce534dcf655bafbf518586e68fdbc86026a60626b96f4c0b021fbcfb03ff39cbe537acf30af98a81e1756577fa4a99a0f0d92fd5f05d654e53f7b50de81befcb2d78338f7af6d2b7522cc2d709797662d2b6e75020c21a327d03d92437cc95351d
+Entropy.6 = 8b7c9af20937836cec75d7b500dbec1249815da50471950b721473203cb32045
+Nonce.6 = f587727b11ceaec028b58695724896e5
+PersonalisationString.6 = 92caff644278f146b70b5c07239b4759f76c7a7491fe810699bf632b95931568
+Output.6 = 63f7946fa19b086ae9c0dfafe4222a5f71aa1de2ad00fc16f1a4cdbc428b1dc5e33bc0512c3bc2bab4f38847eceeabf45ec49310cdf27809125aade4cae5922043ef63f5218e08dbb09c04551615e8766efcd77d7d7ee532cc8abb730917aeed6b9afb33e7fa7d659e1f11d6cb1ad178dc1c55a9771fa08597e615e2868e3d87
+Entropy.7 = fd95873c6328ea01bbd080bc83c6dc6396da15484e6458fe7af7c43ac0bc52a8
+Nonce.7 = bed78eb94bd44d8d542067cd04c68fc4
+PersonalisationString.7 = 5db74cc6cadd8b18dbc31fddfb8d22af93dd63cf7c1070bb377d97b2c18c8475
+Output.7 = 7636443dbf0aa1ac9fc49532b62c74cf307df234b84c2b90e24dfeab7de95334adf2b3304fc549a27c45f915219cb3b305942a902ac08f6975dd5d607ffbb0a7d75d0373d647d5ab49f35651a53e18ce3c7f8a3355368199095965b7cf79c4e6cb030d5813ca83b1f6fa353245bc2a269cc4c905c51f5944e0e0336f263848bf
+Entropy.8 = 9db7bbd5d511a3c605c4aeb5d7815af5fea38f3750cb01f8f8ae74a2071a3ea9
+Nonce.8 = b1d9f4c7b1f2dfa17d892b341c55e8ae
+PersonalisationString.8 = e89a556721874b6939a8dbcab703f416380bc054d88bf50783260cff144379a5
+Output.8 = ad1b0813e743524d0aa4ee845ceba906ea66347a4d285b06cf84707a9ae6bcc36fb0db52141020bccc846b0847b633f3d5f24046dcdaae2dc456ee2f67655f1152a36383448d835fdd1333c832ccf96cf96f394a5830a3909010eb647d4366d63cc710433ddce17310e82c49aa56dded4e0f5f9df213a1dcdf3e456334bcb404
+Entropy.9 = b516efeecffd7bcec3bd16f39dc3aadfcb230385153112df9ca3a3413563916f
+Nonce.9 = 9ba212a4d73bda328199b5bb7252d84a
+PersonalisationString.9 = 7e2343b0525373c968cc752a66345c30b74cc7fe95d558f86d96fcb67b9ae3d2
+Output.9 = 3112e7dfba7f5571bf806c49c384dc025ddf537f3c37f5d7af7b98c5b809b5cdc9300816c25ef7dbda98856f08c8aff7db12d62d4f4dfc2cff3b7f7f043feebbf09751848b01dfba36d26f33162c0f57c15dba334093bc9b7a36a6a023c5a29100b2bd3406bf83e56d4e68896d70467db38228c82fdea9aeff1574c34a99e134
+Entropy.10 = b0a0e3d75f5d91dcea7e53f283f0f613075878c654925948c15531fb97016e8b
+Nonce.10 = 2eaa61a0624b32c1ad8b0ab1f6d9b96e
+PersonalisationString.10 = f3b8d9d83f8b212c84442cc604fb4e6475a8e92e2ea1cc38fb8990da9d8af148
+Output.10 = 4434a9db8500c93fa9bb921733c6f2dcd5489830411af3e00a2374e958ec759608ff0c72cabe91dad49c6a8f3d89cf426e42dcb74a279064fa8747eb387fcdf513f658d91b4a9ef103fe02c35d879c9a07cbad40b0dd26ac29c67416492f8711bd391d34cef8f242f0a3ca9c421cc2129d609dbadcbb9a6870aaa5079870ab34
+Entropy.11 = 9a54bc2e5a90360029b9fea13a5336f61c437a939318d0006f07269f0276f86f
+Nonce.11 = 76abe2c9ef42157a84657584e86ac70e
+PersonalisationString.11 = 556f13f8ab3f6650a67625118cfe5eae4c0a341c06ea923172eacc779896b18e
+Output.11 = 1c972c4979ea6f14f39c8539a1ba71e37fe8fa37af64a415bf7d67f55125a4ffab8c7e89643299d71298c1737252e670a898af1c687cec44ff6a224b9ad5718deed65f1ea30a59ce3b7495e7e93f3d7abe9c137cb48f848acea34cd72573a44fac2889027aa4b055f73e40a0aa1a5935990770ba1b69c450deaa9c811df5a6e3
+Entropy.12 = 42710e2a84f8f1d6a31e37e0bbdbcedded32384b6b4d375ea1cf83c77364b983
+Nonce.12 = 1a79de4edc07936df71a9bd75b03a680
+PersonalisationString.12 = e61d835e4f11b75c98918f21b9055a5bbc03e30cf61bb155f9d8b5671f16152e
+Output.12 = 61dc4d2b522e1c1b5183896910302c43f3233d0f4d615250865ae13ddb525e4d32091e832e8ac9c3b21ad0829b7d22a092c9660f437542ac0f5d677ac7c70712a8073696f96264daa0d600f9c1c49edf79c03f2c7a2279ffa1efb1e05603df367ab435791af7ae2b15ba3531540c5a57e00bc5d20f699251cca26acfa2c10e1f
+Entropy.13 = d242a4324a6769c5a0e4877166fd8fec89a5cf2707bb6556cb30805f003927cb
+Nonce.13 = dee5f4c2e66d90f90217cd138d5946ab
+PersonalisationString.13 = bb95bb17629b0611cf2ca41b8762f0efcf3795401bca5b5770598982f2218812
+Output.13 = bd331c3416fabc12e29d69fa497d42038c42b17c1a2eb717cffc6bed960ba03fe156b0cdc83d5bc97cd4013e8e04d2a2588fa5064449aa9829abd64ccb5c798f597991e9d04feb5c80c09feb48247f421cc3953247662a98a4cc9b48250da4c4eea6fbfc8a5ca664c94c4a37445863787ceeb112b25fe17ddea6822464475632
+Entropy.14 = 38c054fd0b1218674700518ddd07985cc9bc7586bb7453daf0e4c0a1e5b90dd5
+Nonce.14 = 704e8e29c7aac1d8cbe97bd7305f8cb3
+PersonalisationString.14 = 631c5d0240b8d9800211ee6c97a5ae77405a354ac25705f22d405e17a52109cb
+Output.14 = 9ee855e661d4293fdd7353492c711b39625ead90849ae5808b1f67c55cabe17ae13f0f18c0954341d6a2d24b899785642c0b29bb1b81fe098a17f8701e8820cacf6c00a8dab2e96e7f8593e188aae48385ede7bb5ed5ffa3f19053663383d666d38eea377d121e0b55ee58ee8fbf1e49c42a4d3d48fb0c9247c6b94c6539f4cf
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 787c48779085a05d6231d2591592c314f6d02c5464bc09a1a93a6702fab01f96
+Nonce.0 = dcd3194eb9a2afc84d9c7c9f52afa40d
+PersonalisationString.0 = 6fd50a9e2da23475d56f6b7a2448190f7f2774daec7f5958c6a1c651a041f3d8
+AdditionalInputA.0 = 06678110a57db40ef01c41380005dc5450792440a5588c49e46468367a908c19
+AdditionalInputB.0 = 88f8ea0d2170e0abd6db21f3292cfe299efae6f14f32588d9b857a4109f8faca
+Output.0 = 9826ca55548efef61cacb0727a7c46336f4d9ecde2548730f6c495e03b04f3ab849d9bcff5b92895558fbc24912c88b3226b1c693668e28a2096bd6871920229e637d8ad81a58dd9068bf2721b1c7c99cd8d54a13d7d2a47f9ab3b5a05321b889b73880ee6fe402ff1dcb4a4bb4a10d2671c8726cd51fc798e29e782312b42ee
+Entropy.1 = 8419d978ff6545564b6b839953450421958fe8e14a9465be9f6bc266c8436a9e
+Nonce.1 = c33466b6e5ea840bb1e865c401a36cbe
+PersonalisationString.1 = 78f45022f965d0cc3c08c45a9d496defe44acf645a363df9d3a04436f05dc24c
+AdditionalInputA.1 = 0492c567dfb909f96c855960ecc92c89c52b7958a65c1271998e999e67c1b2e0
+AdditionalInputB.1 = ada1cd7e1bf76e83c2f558166df077965dbeee6e33d11eee56f1cdd18a580a85
+Output.1 = e3eb9e3f61141654980e1229e1f0abc758dcc4ed3993a7b135e168345a1227c6abd171e32d7d2d629eed40904b1966f5862fd0cc616b90e1b21441478cf169a89d8a81018b734d141722b0ca7531c7ea4148b67bd30ae763825954c33b800c260356bc7a03496ad9d095c8c88a57ff9718a676d3e6d75e7e178df55ab16fd509
+Entropy.2 = f4501d68428b8225733cdd04405de609984a45d68b6c2763c96afc0beae6ddc8
+Nonce.2 = 501167667dcf754073ca65d068fb8cdd
+PersonalisationString.2 = 0f0846a752e97d4e5d6ca160281b23e8aaac87ef40a509f9b66c6000e1b7951e
+AdditionalInputA.2 = 24055ddcb920530f4c766f8ec1d9364b64186c699e0248b09fd1e649d51aad8c
+AdditionalInputB.2 = d99b2ba13c7b61cf2e37cd7fbd731e44d07ae7f351f22534e7a59d7552bc78fd
+Output.2 = 9f08db4c787cf75d6de9044088cd1448ce729db616048a44262aadd71971e9bfb89c4ad7c5ef51036afa4dcd24c186145e19e60b0da7db074146c0822db8d546c8be4a253c12cb9249a2785c83653b8373415724ce8623197a098281840e75a2fb10292cf91698bba9e94e28adfc80bdac688fc5500f2262f5969898422f998d
+Entropy.3 = ca0acbb8240b6a6d7ecbf6c55be3d06f18b014be52cba699466a232be0136d24
+Nonce.3 = 76d75219922f60dad511b3c0ef182819
+PersonalisationString.3 = 3582b0b1729f835b0691e4f983559d5a238573798ad1548a352853db26d032a0
+AdditionalInputA.3 = 67e6f9ff1a82ae840936f811a73307e670f2d66392be598643a7308bb0a5f6db
+AdditionalInputB.3 = 35c43ba8a676c181a84b8221674df353e1e931dd9eed60a5de2e2cf43fb70816
+Output.3 = f6378139eca211985b2ef75fdbf4eea1cf54ffdcd7e1a4a72a73d95fdf71eb89bfbe724c4dd48ab9d5597f27f4575108bde89981c29513ee885566a985d03a87e354fbbe0136c9b06c9b6d4aa59e7d2a279cf17d532f669213b225992541327fc4ecba79dcf7d3cec3cde00c777a82562c7b4cce65122db6ba0203b494e08b88
+Entropy.4 = e83ae0ed1943eb9c2809f3b9eaec39ff5f500f3132f604f298416858728eb358
+Nonce.4 = 0367a08f5c1e0a54beb42a970c7e2dd3
+PersonalisationString.4 = 7c94613ee30a132d23a9b84566b2a9e1bfcc79299d44b731e95814dbe0b759bd
+AdditionalInputA.4 = e8419fcb0879e0d71015bd1a633b16d2a487d4bd000cd417550f0e8cbb3afcfe
+AdditionalInputB.4 = 57acd6d9a9e8068959983352b2946bf9705b0eb78dfd7b101cfa283d8ead1964
+Output.4 = e953667addffc7400139226cf2d67b1fb42cdef09d3d0b0adefd187ba5f305a27bd434ef111ddf3acf083bfcf4839f4ef14f920414138771f3df3cf0a95453fcfe241fd2513a9a4596f60594ed3c53d898eed2bfebe8dd86529d8274078ec3cd863b16008bbfe1fc54e2ccf20971071dcb857060cddaee639968f99e5c1b82ac
+Entropy.5 = 8e53d83a04aaf00dcc566a75ccff8aefd3f61ea666ccc8013609349dadb565c9
+Nonce.5 = 651bd9b0a4299307f37a82e75a7b2a44
+PersonalisationString.5 = c0f8073e1efb565acf9ed8b72117f21b48e5446243fbfe01256cfc35468c4a78
+AdditionalInputA.5 = a679686fba48afe9a2478c00b4ff31ac3265b01e5f3db39e239fc84458d3af13
+AdditionalInputB.5 = f63cd2d881417c3867c51f4ebc6684614ed5f4c323925682c983bc9d5a9d1864
+Output.5 = 1a165a16982c6f3ff3a751edf32c64de810be8efc19ea938c5586eb06030351e7ebdb619a8c306c8f06efbcc45af7dd757b84061e286ad8fec70a04a7f07e335b3cc6df25452581c3cb6fb4b41725af43cdb3e284195897f6b79338a5c1d38c5da6fabc2955338f3e0afb38c354ccb2cde8a0ee4d75b32d250ea97c2e31fb8a2
+Entropy.6 = 4a319ea174000a86ea3c206788356a24f39b6b1d45dac45b2b2780e0da9d5235
+Nonce.6 = c78acaa506ce24a39c3a329082228ddc
+PersonalisationString.6 = cbeeb7409f7344e1f5dfb063772e0f1a18895ac6d518cdf9e17c40e7b7f6edbb
+AdditionalInputA.6 = d5c04a32ad65d11052af3c4c85e7ffadbce9eb4452320c7621f492371bc6419d
+AdditionalInputB.6 = 3a88370fb54310f6438f938592b9bcd77ebb34bdb37e7fde5bdb3e2562889127
+Output.6 = 19ecf6190bb39b324dd0f42224954ff30896abbbcffe8ed1722a1fb3f07c5ee1fcc18ea427eba324e47380d9ca449d929893f8c5059aa766db63c8ae5b81d5334c3c099a1fc51fe667367b9c63695c194377f8f7360cb96f4bcbe3af48a48cdec47279597c68f2d154920d257dca0732e12446e544f23c71be0cade7226d1570
+Entropy.7 = de1c59568428ef983c6a90c567681d29ed17cc0af4cdf2464aa5c9fdd8987cfe
+Nonce.7 = 055455dcdb95f23380f6183dd4b387b0
+PersonalisationString.7 = d6439b6910cb7481c6410786eb36c34928b9866d10883feceebf4fdf8b919ccc
+AdditionalInputA.7 = e448c47cc32b54cfc974ab323bd1285bd3e8263b86e26fa651dd2e75b83f4773
+AdditionalInputB.7 = 632dff833d94261c2e06f68afbbb7c269d625a258909dca1ad7045234c04ebd2
+Output.7 = 746746968203f6303185521804bb95aebb6aca97fc75756f0b69aac27cfbda34852fc01156a819114508fe1d7ef5c768c5b3a06f460aa493321ad3ada6c55baf0c1dea628c7739cb94a129e685a5dd26c6779ce38624c47378784c046afaebafc72f52313b2ac5e083718f22c3c2ceba5ce908e07d4381758d9a8b3cf440660e
+Entropy.8 = 51ed5271ba5fe49044067a6fd6a3549f7ccdb9b1cc777febe7e2d7ad526a0888
+Nonce.8 = 9e63e687657d4810c9ecff60545b49dd
+PersonalisationString.8 = 677d3fd349e811cef125bfb744f3d375b1da5ed6377508f402f51f75d4d11394
+AdditionalInputA.8 = a8892f9e83ff65ebe94db299d6d5142054a956ceedf01499584c2b6635ca4a03
+AdditionalInputB.8 = 36c6e19a77fac3f94c545ae8a1005e794631131ce1a84b05bae82e2d6d770842
+Output.8 = fd793800ee78e5882e8624ad9b5aed75e0812369914372af82ba862504ae124f28233e6679df927979b380a5b24c90660b70b3545b435817c69f521b48a9f5b0e4de336bbbdff3287ffda87c5ef1616ffd3aa946d53bf2e85d3aaf935b56637549882683c93aae768cca00d3957b2f64a07e57d1ddb9f664edc61cd56ced86ce
+Entropy.9 = bac6a7ae5a9b3e9629cfb6ca94fc29e4c20be0d0f105db3db1ff13e5c856e1db
+Nonce.9 = 2d0b5b5052a1bb0837484fff457fe088
+PersonalisationString.9 = d5d69ec6bc1f2d60dca680e5d0ef40d6bfa6c3437ba069b177783092f6dabeb0
+AdditionalInputA.9 = 00297a1384274b1c127b96353f2719ef2c1dce5d47e7a4e6accb56e629533960
+AdditionalInputB.9 = 52ef349adc5cf067343a202a26806a3d216bda0699c3706aedc4d7adabbf2d81
+Output.9 = df73e17dc405884ba0b2c63d3f63a13200c6e7f3271386b3cc5433ab47ff0da54f6bab436efa258c9aac39a8c9b952dc32bda50b21d70edad0f882b0dcb48f7164881360f7f22b13ffb67bb660e2440ab6502dac4b7e97b7d89754f41fa60187d74075da14329369e44f68bd984667f27fe05f937ea3b3ae065397f29ee52e7d
+Entropy.10 = a16990706c5ef1957bd9e18fa57b842471b75716839674398374d47edc03227b
+Nonce.10 = f12b99443b8d23b0c688a568faaeb176
+PersonalisationString.10 = deb8909840063ac0e3febbb239efc1995cdee34aba6ce5f008bb479a04501b2d
+AdditionalInputA.10 = 923d59bee650d236df875a299312a10149e12a050a8cc75e2063a2a8e8ca282f
+AdditionalInputB.10 = add1359827f94de55e8843d12d2b4e442ca533ebf6d21e62ad36c31115d9f27a
+Output.10 = 82aa4bc73ebfd97f709048066cf8622d467a017bd77b94ff83cb19fb317b4466e953684c4c85b45b210992c234cf42171b59d7eeaac6efb0741612fb10b9d79169b6dd6674662a48476972cb2fc3baaddc63ad000465f013b711bbee1d2ed9c3729939ae30f72af5105406cacdca8726727d36e978d432b45167ced25f0018e9
+Entropy.11 = 64c66c0990ae8dcd8dd1d865f1971a231734a61d4764568e42cde2cf0ebeb666
+Nonce.11 = a3d1e7779fe1b2f3f04a56784056f605
+PersonalisationString.11 = 210e12cb24d0104469be92278501a407c431ec2ccefc819913306f10a1734f83
+AdditionalInputA.11 = 598579c0de0354b5143b792849fd5faff95b71a5c426f58a29d0ce7570c3ba7b
+AdditionalInputB.11 = bd95ecb2eb2b1ea883405a076f2dd6b300c76f982b23ee84f908926ba7f706aa
+Output.11 = 0800743cc3603f8a815f5426915d036969bcaabcc2febc1c3c985ece7471bfeb524d9e3aa17c552b6cb911b7c91acdd5f743917d3f959aa56fd176fa8554ff48641f206b9cfccfbc1f203c39e9c4273a8cff087dcaa519ef3a325bb85425ad871ba11840635c5864f08fc5932b8fc47bba71f22c7af3e1df4606e55df2b2c58b
+Entropy.12 = b1bfdb68de4e646ae5b549563f2b5a126d701fc2add3789d45a69cc59b1ecdfd
+Nonce.12 = b7596e47dba4fb94210262d914161cf3
+PersonalisationString.12 = 294cf4536b0589729b16c7cf2faa03651882099579351fba40408d09e7b9fed8
+AdditionalInputA.12 = b5f383dc3044b20b2871ba535d6a3ffceb02c120fce00eb076708ef683dcb320
+AdditionalInputB.12 = 9f31e368487bd9900b6ef60f213df9edb75bb4b3958194a4eac7eb217ff7d489
+Output.12 = 92f4f409aa4499889db37c5b9e317614cc0663019f6273e0aab1a9278beedc845107f342b0249726ae3d31387d2d6a43e5ccefcb164225f9626857f2d20abd1a428ea324a0b4a56b65b0473a003c9e83d1113512e5aede99903af9bafc31b290063821e0edb0d2eb66ed4bca6329f8c0bfa76cdc11b084712ca429ad4ae7b4ac
+Entropy.13 = f23296e9f6b4fe0d39478f5bd3836df6876ca143c71cf338bc56590b8d8f4b45
+Nonce.13 = 1671cb02a09e1cce4f4f5bca9ff46558
+PersonalisationString.13 = de2a5842623793527f1d8a9920b49d6dbd57e81e5b1832a028a45a2e60218e77
+AdditionalInputA.13 = 9794e6c7f13f59632bacc55354044261a0a3e9fd00ebb583f19983f8770aebf7
+AdditionalInputB.13 = 6843d1d2642d6d311b8d3a8c07a082ad9fc7a64578e7fc21637d40ede03a35e5
+Output.13 = 0a0f0e17827b2d90ed0beb105267708d21dcc1d6f736b6edf4ac102cf3e727b7000dada9c515a30a303103b9db763417740589e3a9716946f9c77cc999a984b0d0b74d702b2a3105be6cdec7a0e13ff6d61c3883e43653c6ad8b70a49f1640d66613c941a849f34da8327844750dfe3786ed5836c0275d991b7828681f767507
+Entropy.14 = 0ddd1ec822682f9d3e48ba216777831d51a2fd2a829859c44c410c55745b1426
+Nonce.14 = e87f5807cc22d08355de7ee7432e38c4
+PersonalisationString.14 = 416cfd40dc3d7ecbcdab031cdc6e109a897fb34fef4de26c06865abac16b47bb
+AdditionalInputA.14 = cf6884bb4cf7c08ea954cc2d2389eaaaaaa3bf9ab1dd74372c20bb3e1235a326
+AdditionalInputB.14 = 2b30cc597b280e704632ed1cd2bbbbba7a9953deaa809848eb937b6b1a44b91f
+Output.14 = 4de8e3c529bda0753a9ba237633be4c844308c233d6e58995c339cc006c7d4789b5f1a6314637b9749621fae3982c5a748d58c080e12118d4442bb55732da53daeca71d3d033b10a2a807848babb822a346524b4a41e9d85941730b21c0e80a9871c9d9aab0e6d0269258b57fcbf7d703794bd2e5f3d7b3da9d3cf2dc2073653
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 977bad794d6a66f653391048a93fd5487ae87d5786eb3660b3242f9745196945
+Nonce.0 = 2da69e3c2ad6113fb856e64a9952f59b
+Output.0 = 3b668c087681b0754e11cf961586916a33d94241e30590c54cff103eb8d5249305b4f5d5f2caca1f2917d76dbc88b6b7c5d7fdf81c4d2335e4bec48ab762dc6071a445bdce662723f9163162719892626ea64db5e5a679eae9e7ead61a4ee68548476807e274e916b78e31b3f24358d0f85b55d3799cd004c52b3f072fe513e6
+Entropy.1 = 6ff27c10e8a5d50a44635f2c8523d5be10119ba9ca91138812da510dc53c3df9
+Nonce.1 = 4f9e28d517e4c9fe2d80ef045415a5db
+Output.1 = dd4683e3a61712a3f9a5022fd85fa721047461c3f14594cb26e582159c5da63b6a1feb35bc2d5ad0e91d6753afb88872b0a7452a794324bce76caec058b49dcd1bcff66650ab4351d28bc9f27470f49ff0624cb887307a73a53b36ac538efe7ccbf668452d554f5bf29b5eecfb239f65b4f93f7ec170b1bdd4d702819d1bb08d
+Entropy.2 = e281e4ca50cef54b78023f0216811c8e496c283f8129b67b0138a721ab9d4c29
+Nonce.2 = 3aafb1ecd651aa6af196a5027889dfb0
+Output.2 = dfbc79df8f637f2a5700ad6b909ce181d57d5a77ea6dc57345bd81c2c3abe17698ba449756648d0374f3eaba4330061a9c0fcae19c0cefae6c4117f17c4b4905dd21b279c927fd98eff97a2fc4d8c17b2ff161f0bccb8dab8b8886068d17aec68ffd8dea073ec13564e20c405a15fee13623adfd27cdd7aaf2a445e636785052
+Entropy.3 = 97e7a9d8590a7f6d2091bd6572d47114dea68c15210d696425ba7ca6a8a0befb
+Nonce.3 = 592c5ec696188a36c377709e9f403979
+Output.3 = 5846dc2fd66a0d8c90d0d539c175019eff89c13e8a13924f71db344196a4ae1f42d86ffe9ba8b6919b68608ea89a8a2dca19d2d0ff27fc35e5210d0dde04fdfad4cb5d3d9910312df4daac2b9a072d1002e95b0c062bb7b9423c4402bf7b2a2872b50abf2e1e9a2341645ab18ee60290d3b8ef309fb43aee97ac1a791dc49ebe
+Entropy.4 = fe2f9a2dcf2d3676f9182343ca2bc9778d391d9fd4dba746bef150a3c64d0312
+Nonce.4 = 1c17ff1e271f7ec1dd46a027eb762c24
+Output.4 = 9007fab4989a4e950c746ec716dd16df19ed62530d3926a363660bf3ee321d86ee698510383bdd65a5e8e0572c41e3f439ece3e8d9188469e086afb260cdd835aac531b449729eb05c4b333060ce2ace0b7db464fd6e6227b4d0e2b0458b8cc64e4a4c60e1c9976cd2ab4bff3427f3d4da8ca3e79f6f02262a48bc6b2d0e241f
+Entropy.5 = 0659dfd417ff136896c1bb6b2adc25eebc70913754f764cd1fd5d6d00403cf1b
+Nonce.5 = 4d85548cbb9f647b60dcb8d28c57a0a2
+Output.5 = 123a082d2228a4371bfd8666d83cd5d4d2d3d140dde50c8e0a81c725ea38145d4cbe27d96abe618594812fcd291523ba4e15f60a19d7e19296076a0ea082ea082639579270b2751d87d1636df08b38f542891024a166b2927335ed5d98c468fee4957867bccf2e5b03d631a7c30d67e4730503a87010608a4b76d10f0c789719
+Entropy.6 = c56e1588c753cbbd1f7b4ea9caab01e9e2326b194f73a2da7a50eb1006ec9cf4
+Nonce.6 = b7d1a7edf25ad51ec8806d85152aaa21
+Output.6 = e76e079021c9403d2dc1e1d1c116948b34aeb08ce8a11fd50ec698e0925570170956febc0a50be7f08fc175e27d989e11802403ddfd9d5354391fa716cc83fab6a26b364aef36d810b8822e76d4474722df58590148a0ee798082a7c22f3a8e25f8e30d3f5b8189f1e93ba8493f395ab2fcb42fdc6450af3865d23f734004c51
+Entropy.7 = 8491ecb34bb773da280dcc16a53d1ad06ec448b1cb07989e7391ce231941309a
+Nonce.7 = 5ea5d2bcda790c24e14e8974fb4dfcbd
+Output.7 = 19038826a6ccd215b4a65e99ae00449d5591313e9fb0232c071aefa2967ba057ffb593dc1017b18c80cca3a0e11d9f380181e0d9639cb353a668d53ad090eefdd7b7d1f6957c18ec53f4d790c6c30903a8a3b6d7be0e113fb068a15c089d6178374d5f624aa85b9033f15decd454be569ced0b6e660240d70bc75bbfd6908c13
+Entropy.8 = 48badb5d8130d9bcef7d56f70213455887fbbd9b6fc52eff7f1fce3e1686b342
+Nonce.8 = 9d43bb414ce755be3dcc04016a8c9870
+Output.8 = a64b5f39f00ee23fd9d95613993ce5f69c1f55c466e0434537b2c3829653f59f0a35742084f7fef22f24f642b2912fe2285eb50add5fa76e9cb96d09a482776ea8f82886d547864a0cf5e397481192a3fdf11a8a1bce892db86b7e9d15a7ae8a12607410203fc787c92b9273fa522ea7191af0593815debc41bfcbe465df0790
+Entropy.9 = 46be19b1b70166e32c2b1704387586c3c50a79749e4f9bf3f2966403190156f8
+Nonce.9 = 4e706f2158e038b19dab6c3bd8137868
+Output.9 = 3c96cd98e0beb49b8b88dea365cf70af8fdcf9c1080d5212fedd1cdda17c9d008425acd60254c21c411075164bf50d0432f3b984e5be6cac47dfa4efa802f15432ccc2c2630cb0a126c33d6a2610c6631e6dd1f1745139ecdfec8563fffed93afe2f35b5435fb600d451830d391c924ebdb7eb233b1ea8df38a658e3e3fb1f14
+Entropy.10 = d48b7cad74849bec068e7743af6cf710685cb4e1f2a8b7d7267a12ccbf3c3706
+Nonce.10 = e61fac110b7beddf3d9b6a0956991600
+Output.10 = 755835306c0c0b799cdfb7a6daee20d560ce3b5baf7bc6d92d60eae60f653fe820ab6896bf18aaa52b9308c9afd940ed447cdb7e52248597eab7cdcc3bf9b03b078874067a4a4c58e548797691f687db6b12aa61b85d70eb6293d6e7d0b12f906e85051183152427a8f6aeb3f4f27fbc77dfbc6b27939e4b94663f0f120ba091
+Entropy.11 = e71e6ef37a8a6b5b56941634ed456c1a36f0168dbb4e13c21f89e7ab1eb843e4
+Nonce.11 = 2bdf609ba15aa5ee348c3a18253546dd
+Output.11 = 21caf52eea10dd1d5182f003b2161e5608677721dc926ec45a5c3a13640b2459809a5eadd7f10f314a0b1380d5cfd18bec41fb9a6f3082e6be19f0ec36acd640d1013f62ddb74af2e4af37c7b6c50a1d993612dcd1c1a3b008dbf7efd80a2987050a33b0c5e0eeb51d9bd42c3782a7f541a4d228b55a2f2ecf54bc72d2cac46d
+Entropy.12 = a6ded3a009274d1aede6412ab7a2383bc11dc302a82309fa6e4a25159635e4e7
+Nonce.12 = 42ba80e06774c7355d245b103abd8dff
+Output.12 = 14e43d4cf7fc8efc26c36bf74b42381a5f6410fde51e3d37c8dcaa7d2cb8fa1402ed73b7f3b938c7cfdb13741557e3fa45851fe54e35a594ba0c07bae01aa2bd3a667813682d4b7a1855c48d8ac7ec0a1129463e8659744fe16196af806a305bec9e8c26682f3d4c4e710f380fc6b998a0de036b042058eb49b51da561245e1a
+Entropy.13 = 01097e91d496e7154abfafb70c4a1813d5a4c761fbdba36f097448f6c1920b12
+Nonce.13 = e3a1b6a347bbe21c7204ac04e5499866
+Output.13 = ab4336414fa90466d90b7e62b6d1aa8da7b590b6e95a1ed298d3300bd1f1fa5221225d34145b2eedd00ecc25813661d8ad43665d9f32d11a4ab287db83618006ce7936f559c9376fcd168d3c7cab6a719d1fdb2857747a9173bf3e644049d4e8cc82d49a38957d5b6e84c316784197507b883b91ec60b2bced85c53d8de4af17
+Entropy.14 = 043872fa9f0c4d97e2c6824b778a4fb0debae214d3358a5aa01c0092c9dab6a1
+Nonce.14 = 0fc8d529a37083c2efe84aba8c8abbc0
+Output.14 = 22e8eb6b4d11657a66cba93f89b519bcce87a9bfa5ee22cd3cfef6180cb8ca842e8d408257b8140fabbf1dd65085ae62fb8b1d2a679dc0bb0a82ecd3b8bbc05782a20a6345554a1f5467e9811e0fce41a786c805ce2882f8b4d972b9a37eedbf828a381d34bab95efc47233846f8b5c701563033253323eda41effad5fe37d3a
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 53bed7c2d56f54b8a7d7da4c218684d5f4cca7fe7f5232a7360a4ba2e94deff6
+Nonce.0 = a1c969fc148e0264b4ca94a54cf9ed81
+AdditionalInputA.0 = 503dd23f5f5f7b29cee03bd11febe1b5762be2a526807a8a3f2373dd861fc92d
+AdditionalInputB.0 = 733f4c9420087cd9efc5184223c1aabb5cc8432949b9dc5fa717854cbb7abea9
+Output.0 = 8d8e9840291dd82ca3b81bbe67b951bcb8080a5bea13b6f226fac5a9ced6c58745b17fb50f5cb8c38e060f84c5e2c87dbf8ae339a75b0843f99cf37088848b2a2a9c5439d1ca78d4074328d5b3a6919eb8c95f6ede709ea2fc184525e5a875a337004474ce11d28b84285b8a9c43410a766942cbfb037510b049ab68bb485f6f
+Entropy.1 = 1663a0e53c1f285ecfac1da43bed9ef0df072bc8df1e19eacdc5a08c8b2b3a50
+Nonce.1 = 7084d27cb1be8839c3b71c119b227c71
+AdditionalInputA.1 = 512d27dfc0ae38dfc3c7d78ee192e75c3c1b9a0cf76128746983d5b9f1af4fb2
+AdditionalInputB.1 = 349fa0f24ebab5b267a8324687f2a78ae9af7ca61e0d3cf8eb16bf33bcfe3f91
+Output.1 = ecf94d83c640a382bf68727f23301925225ff8919bb897e0d46f27d5832979c11a90e924c842bf89d552d52e1aca427a88ec5893389a376af85d11ee806dfad4fb76398f86c07a54294fc1587f7896fcc90e6ff109537c3c47e95d076d33eb349f251e814ab31d9bee7f1fa0695fda471901e8adc913f1dfaaf0ea2dd6b73ea9
+Entropy.2 = c643990214c2d24438bff1d8e410cd46ebfd5d65cd7f8f00f906a1eacbcf87eb
+Nonce.2 = d4bd6fbca5e9fd2037b1d028ee9aa106
+AdditionalInputA.2 = e95eb1cdce75651534556c0b2ab0a823368d98543483f6aa53eab49ed33794be
+AdditionalInputB.2 = 94f8e4f2193d78c76ec179f5c18349133879cf3143547f23d055a3fa8fd1fb01
+Output.2 = e94713d1a909a94f5a990ef29bdf09b05ae401e5d8df178b96c4f74b00c19dfab4747abd18b423c25c16e50f424b955256db76cf70ffd5d40ec948bf50f6aa0741be6840e2612657e11a5b35c32a39350276e96b04d6796421d0cf82902c6ac3129104c083a51de3321addeda6965fe9cb786e11093cf58397965cd1f2f319f2
+Entropy.3 = 77b9049d963536b980ea63af4af1fb832197df50cee8f51c7817800d90a700b8
+Nonce.3 = c844537f07888ef94e1a6895629b439e
+AdditionalInputA.3 = dbdb062c21f5929605c0a96c7e5d44c9b75b91e5ee99fcfa4f88c4372f852182
+AdditionalInputB.3 = b09e0a49fca41eb6e9b92eba93c6bcc333e6c9418fd30b27c5fef8b403a1271b
+Output.3 = eb172638ba539a1f0ff50770e13ecd8e3c8d14d4edbc42811807d4b300e5ffb283254f32041e04d217f6317b550a18ca39d50a3b90993a12c49e049d5b71da6df922154227e5cacfd2e7eae861a2643b6e5f9f822360b1ae37184c768d96c68c186fa27d943ed98a2e253b6be89b02918a76c2e93cd7741650c40f4d68888789
+Entropy.4 = deb3fe5793c1a2483048c85c4afcac7e13b528bc3bd692d40d48489eb9cacb35
+Nonce.4 = df4e1d9b52514f27f5e89024ff71fdae
+AdditionalInputA.4 = c7ad9febfc8614cd7c1023e836128b92f36dc3b06ebcabb2ffab1bf3bbaa3465
+AdditionalInputB.4 = 79b9fa0be961ba70b0cb1a1a5e1122e9437fda8b738319fddce8304dd00efa7f
+Output.4 = 1bdb7eac9d696380f252b10a010470f5e95ecf590a9f1c117f6d119b5eb9cb00a1f38512b577416cc66073a6e62e309f22401d0da411e20ab0c9c8b33584b96b11fdb8912b637eaa5622df504a0775fd1245b708a4f20c24ee449f86ae6c8ccb6fbf0f46898401fd3c9a6590cc5816ce069a43b1ddee62fe886299488a145cc4
+Entropy.5 = 818a0cdf80f40ea32b6961c9af1b4e31e598536eab8fda19353091c6d19fdb17
+Nonce.5 = fdab476f4380baaf75fb1d982fbfb488
+AdditionalInputA.5 = 7101f89fddbb25ece886405b7a46d2c74e6a7847d32980bc8ff754e7ce92b415
+AdditionalInputB.5 = c88ef1acb3361500da3f9db2e085def49eb09c8e2a783c9db53c3ce70245e813
+Output.5 = 2b2ee30632575980b343f9984ec2bddb606d9356d7667f5849ea3690e58468376eb0b893668636e972cf1342e8292d7057ad1096b0c5611a0e13ed019d5b19db6fce1a9897a251f7a956ef67a6ead90b3389e060995e36341c73766bb4746b6e05f8ca295ddf521e0cd654a854e078d724d789fc427a8b09b11be64c6df13194
+Entropy.6 = 3d5035c8faa2cf1e40eef78e04179e0a69e2abaef1bec7defa52c6b6f9aed63f
+Nonce.6 = 83cb8087ff8c16e7040d859139f5810e
+AdditionalInputA.6 = 4e5112b1348ad1565ff4979b8702771a61cc2abb45f332a2405cd02937c637bf
+AdditionalInputB.6 = a73f2175f7b6e818dc80d6d7d3422424e14887b6987856715ab6202a5d954c91
+Output.6 = 01b678ef0c4b19b4db98568e8c4ec3b3ed35e56a23738004ef10b3d1239672a4ff4187a607169b0c10ce6ad50f8f9f9ce4b79b51617004a9f6c2590e0501f87fb0435d4003e9c3a806e8411a7578139e33e97507d8249c71596d3a6a77b5e31faac0ccf27c848a8f13f90250fffc65492009e4627b46f18b114465c514ca3436
+Entropy.7 = 033041515201ce1a874c70e3d05c756cd8fab846de898a40ee0760e1814622bf
+Nonce.7 = dd95eb79542a287f9a255c29419bc074
+AdditionalInputA.7 = ca3bcd61e5b19522ddc6aaa7ca47e81b7441ada830ae9ec947f382d343d7452f
+AdditionalInputB.7 = 91f0a8d7a8f10f18102fede3dee9b87bede797db283e947084064c73b99b1bdf
+Output.7 = b006ac6104025ccc871e10fbc61757912f120338072ff56aaf3131970330d9ea87088aee89c044a291f31d60eb86270ad21cb3d63d5fc3b7e351d2d778076a354c1795e2d150a40ab250df9b27f0c71d317f9048eb583635bfcd8fbd5d6e91d874a439d2efecea448a227e89270c5bb41d89ab44ef9a81f8373bb6b41469a827
+Entropy.8 = 13d2d8514398f3736640a71a3b7e0f852835dc612d52e75b7754eae492fc0f4f
+Nonce.8 = 7de4e31e1f4dc988412f08c392fc022a
+AdditionalInputA.8 = dacc45511407511b96e81dd6c2730b2407908dc2e459a35ab15af87296676ade
+AdditionalInputB.8 = c9dd61835086ad085f168416167d5f5cb4b3ae21d4c3fc37ec3de01e1c74e10a
+Output.8 = 305797a5b259274bfe0f2207201f8243285d93bd4efe82f2121025fe2c1822de625bc979b5f0e1ef510d9e5e49274e8385b36f94deb200c36f1e344718030417cbb32ad7dd536ae05d5a89abc41d02efd13b090f3367f6b4b721a4c2f9526a7f3609ca0a7862dc8689efaa56dde7b6d644acc3945ef1c5ba7711549e5162e2c7
+Entropy.9 = 1784e2e2ead34b92f572b9615569d0670b551b3007f4d9be1bbd1049868672d8
+Nonce.9 = 009800ae1537cd56f51096a48259c09e
+AdditionalInputA.9 = a4c6f1ca33b8e8d8b2db08a102a15081c3152018fd1183b2107bf90102303498
+AdditionalInputB.9 = 59dce95705a6a5ff512a06e83756b0f3a78a9f830dfff86c0d9940dd3a002d34
+Output.9 = f920f8053860afa83254a8845f9337f9a96f92eec05ce08d752fd140bb859f8b7ffd1e6e557b784b6fda8e2dd47bc75848b347eb0b7f4d278f372bb98b3840a691e099e361379f6f51a8550760aa442a55734cbe3896de6c8d2a2683b7f9e581a39a56a12646371342576dbcf14cc69458b73bb6eea6f9e3773e0b47cc0086c0
+Entropy.10 = 5c194c98095b4eb0f4ae1fc80c5b369544103df2f2ca3d40b1b7779703c39dd0
+Nonce.10 = 78dbc82051f2b1a3442fe1c38f0d374d
+AdditionalInputA.10 = 0af314ebac96e155c097b72ad8f99513653b52792abe10c26c4f503d14b167a3
+AdditionalInputB.10 = b2dc3591fafc18678ad5a4b1c39d148d97b57388e96e920a7ed9fac0a941cb49
+Output.10 = 8330ca306d4589e11e8b55d54a8c7ccbdae499a15fca1e2d8cfda9353e8a6206915a4f30b70c3c271223145aa2837eb0d10dd1c63e92948b643ef5cca0c9131eb29dd951778300d4778a3a3f70df88510bfaf0166177b11bb30c9533e95433b74de04821dddcc8d42e5eb8d20490fac142af5c07dff00ded2fa1a47e7d41e6d5
+Entropy.11 = 137bdb80886869f593a01ebaf099629dae8d782eaf5723abee0196afea1ebcca
+Nonce.11 = 118063ad3eaafb1637169b38baf7c2c9
+AdditionalInputA.11 = 6b46e2d7916693d3aff0eae6868a6da0ea7a8cfe6632b25a114e36bd4a5d6229
+AdditionalInputB.11 = 5702b6873a0a8b4c32455ec5093b045296fb45bfb594db54263241c8759c774c
+Output.11 = 0b4e0d523d4c91dba446dc62ad2e4ac5f96ec2e94c1d3810fca8d5a6bfd0c21a69063c9d1116bab1e3bad3441dcd3ce016e0178c0404e6b79821d78a7b2ae14cae202ec6c3a3778049ddfbd2ab485807f4055e07b373515fdecc514e8fbbda6b01524e47fe3015f36f4b7aa1af80614cd26e019f347538d54c516f6131854dd6
+Entropy.12 = 7a5597180a8373613c5907d94c43c1a2cd11c64ff0e6a295493cf04e7f9132df
+Nonce.12 = ebf87235d8801bedef1ff4a481bfb146
+AdditionalInputA.12 = b013efaf34ce479f34bd2a84d131da339c4c365cee4aeedc69ca8b64d94ce42b
+AdditionalInputB.12 = c0b6b756b3fc84867df1ff288b46372bb18d9edbf8b5a31483206eaddd9737eb
+Output.12 = 835e4e76fbdaf4699ab0fa007172e0c44bec9fea82d49e626134a854738feed48c6cb71cde5c043c37085344b73bc1c9736df67837ea8cf9065432ac5c7688772ae9124dfc57d8f04eff2e63f7489fef1f65feef74817d6bcfdb10be2c6e995d95f36a2df260bc4a2ce290f31e1788a2f7ecc58ddab5f116877e7c2f0ed8e621
+Entropy.13 = 89aaf790b4056daa37e210ec61b90fa93029fbaf5a8efcddf81eb4d7092606b9
+Nonce.13 = a4afa4870d4e79b57f6e7de1de1ff2d4
+AdditionalInputA.13 = 20ddb6bc3434f6ae523520fff328efd3168272cdb36a26928fa8c17fdbd03516
+AdditionalInputB.13 = e05d9a9cf75248f42226f35c471aa30c8f83a71e476fd11d4c910f4210e39313
+Output.13 = 3dc9a4985cc68a6bb8f7bafbe1c0e01085eb9510cbbcb02c2138213807a7101db5fbb6d1b4e45cc2250f83e703bd4846cba9d9cd5f3430f4c634173d23eda6c863ea4fb52ab8cc4edf8a870b8db7d224be58843c38537c479153db76e3bd1fc3d9c3929ed858a45343b9c801aaf1a2fce1a51870248582d5989171e804155fca
+Entropy.14 = b35501793bffce28236d8e784598bc33c674cdb11dca4a6343ba7bed270c6607
+Nonce.14 = 8dbaef5ac377ef9f873c20ab8505add2
+AdditionalInputA.14 = 585a4b6736338ba663522b438ab9255782c39b36e6b253186e821ae969b8cd3b
+AdditionalInputB.14 = 2581ca0314c9a224b09c0c2e677e1df1c215cae0760d3ba03d1053156e9c3155
+Output.14 = e244109b937e9a71caa70d627ec8280210c86676b4ea842c6a4569e5da0b25c1ab3794ade3344e2185641c77df4d3011962e8312aa7c2013e4373204d861e27e88ede82873d5d45ae5700ddf0ae7d523e96df236a249ffc6e009e231b77d64f07f395e57b19a4d2961a6046c910d0b8ac3d882129ec3e337be4cf2d9ef041a8f
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 36bdafb62d8d85c6c1dfc1e74e618967379d8b2894cc91cec2d63e59eea27454
+Nonce.0 = 0e917bee109086aec697e039a2649da0
+PersonalisationString.0 = 7934847193396c925e3527a3be05f8f847cbdd6a97450c421af61e214590f433
+Output.0 = c89c518bf530228c5286c0e8080c54d3800848b6fce01c5ff5e48123c5da6470b54597f08c215d27622f0e3c141088b4dea13042a22ee9f56f9cecb44077b651da382d996f7822878b57124938879cf5f95dd0ca277d132a74b1f0fc4d3264cc2883fad8d2dc5525b1e13538dbc7dd159e56b445ee8edb307adb7be2fbc80aa1
+Entropy.1 = 6a59054b7ac00a84cb8a7b6a2c94f2392602be03a964d46084786e59e3c39351
+Nonce.1 = 2e46a12ecb7377212e7af1f6dfd0a5af
+PersonalisationString.1 = d2fe3aa0e0835ea3d35fdac43990a9996f6a90a3d672d5210b798b96620fdffd
+Output.1 = 67c78059d7da65a67642d78c8a78066ef6429b9410f9c6225a10d59f35d0355dc1d0b278f36e54654bc39d0264284338e11e0f4d2f320e02d18c79f4c12e5f6c06d0123312ce031657308baeaf370aa6eb0706bb75de2d40f10eb3667d13f874ad30bfbac42120ed319e78056b202b19e002ef5e07861bc9dae8f22f606ad5d0
+Entropy.2 = e39eeee22c0cf449605bb65f595a230a93081fe2e9c1c5dbbc9c76ffda60d469
+Nonce.2 = e438292cc51a948e95de47b2b900c04c
+PersonalisationString.2 = 408f5fd16a3f69e173f8bb03b769bdca5da2c7ea23523de2a1fd3181af028ee2
+Output.2 = 64f34c811fdbe73192a8c4e176423e05d8003e7727566917b5fe51e32174ce3ba9ced9aad03720905688501b640ff4b74aa6d59e50fb69f73b31c23ff86d237d16b3550c8b96f426125406d7e551b8e9dc7d5cf3de62851c17931429b83893dd1dc1601eb1a75f977e3913fcfc093743a65dc953685d63d3a9f0aa565735ffbf
+Entropy.3 = 878b3976dd608df84e9f052d4334e8c8509d2216bb700029a99a96d169be21a7
+Nonce.3 = bca9170bf78e85805fc6ea2d3b98c227
+PersonalisationString.3 = 209da5e2d50581d0a52aca020a2f55b63c693801de19e43c7c181761ffbc16bd
+Output.3 = 6a5c5178b56f9c4c7c183f32ba6ea8981d575beb7fdc71ac19697ce58bceecb72fe25428be950adde5ce468d16c459dd7a0f1dc646cf5f53d193df030e5abeddc807b2e888c1adaf74f2a7ee469b82235772c6dc0e737da07779046064d0edfc21891d365afd1c6f0a797907d319f48797a69ca45310e888862e1a4efc36819e
+Entropy.4 = a703f570ffb78938dd155b0cd100afee6c26ed97c2675125c7cbb7dee598af79
+Nonce.4 = ea5e00c45ffcc23ae5afedc3e7c1894b
+PersonalisationString.4 = bdaf2d9baa9b8d80aad7afae5eb38232ffc7a726900b4f33d7e4e31f7bfd5018
+Output.4 = 46c088ca13d596069732cf233a625e9541a98df14d08f2f58b9365817335698a287edcf26db955d096ba43cefd37b4de4fea1b2bbf9c4fd0dd9c34d9d5c7bb2029453a455031bc69142186151524ae8e8c1114c5074a4751dea96c7bdffe4747c63ccf0eeed6732981fac6b28288d414b4ffa08ffbbeace515251e5cee0a6b7f
+Entropy.5 = d2a8d2a92b5e98080e38fc5c86e3e8950a71993dcf8b1c893e0adb64abf2e505
+Nonce.5 = ddd08bf7aa7a03d0af0d08a0f6a91d55
+PersonalisationString.5 = a6a3697a569825871d1681ca5d6c7e3ef7eb927c49738358bc116e2d0b65fe61
+Output.5 = 347e66e4ed7cfa5255275d5d23312489562f7d83e024e921344223945c1135621e09f52cab7a6425474c40c4cce594257451140d31f09fa3e740cdc17884aa01d251976e7c8f9671e26f8a9de27d163c951a970e2ec471324a77d433303b5192ecb5776d2f93f3741c0911be509e7c868933e1494e68e997f0758cf364b5a8d0
+Entropy.6 = 4c22707f97a09ddbda3ffc43e2dc41e2d8a91ea751c327107b9addb62a2f692f
+Nonce.6 = 3cb7afa9053bf6bb6dc98b7b31618405
+PersonalisationString.6 = b1dd737b2c437ba426810c0263d10992ca9dfb0efc8fe5f64a2ccd8f2831c25c
+Output.6 = 2f0712ed85a3a7ee5f940e37ef1bb571bd6701c98c45ae652be0f88895c9372001eac4ae4c728da07573b7cfd3443ff18ca0e2d7f9798457b5133fed02f25526accf90ea69eb57eb582461106a04b2f9175ec301ffb5eeaa392d45e250016b1c64a466c6215febe159bcb15ef702a98514d92a80f4b8a9f8b5835ce1d07ce240
+Entropy.7 = c5990752da659ae294056723ba56ea93a82bd152530d018b5b58b65c65628605
+Nonce.7 = b068f59c108526820c5d490b312a4686
+PersonalisationString.7 = 7d032fad9355aa9c73ad6d80b2a24ff293d9bc7419189088a60fdfe57df59f6d
+Output.7 = e4f4d01ab06caa4430628fd227b24581b3c0f33ae51eb6a5b4ac42aeaed548d5e44c286f1ee54a45cda80dc3a16e8ef739861d40711e5526191dffcfd6082fd38392c8ad5525dd3c4bd00db00086b48b459c1188cdfdbd4fe5f0ce8dec7dc11ee0238a813db043e1c73de82abe21396f86d4d11495302e64a487da654013b62f
+Entropy.8 = aaf44678e88d8e7a98da178d806d543dfb77593f2097c1aeb254cf742c59b765
+Nonce.8 = 0a971c8bb64fcb80edd392656d322beb
+PersonalisationString.8 = 88fcf865da483f1feae2299ba3783ed417ef14671d4163d5c85652ebe44d1f29
+Output.8 = 45d1acf678c646e15a9277a453b77afdeeb7214c49c29aa8e6e8b849498880028f7e764ce1713e6771b633c3753cdff943b96366d5b0f88d8c41369b352f6e0f8939b37b90fa79195677c555ad48aa0d40050ab35fd797758bfb20757d26f44d5b610ef0c0172546d6365f7a861c629dc8fd9316b04654ce5e309bbbb5578627
+Entropy.9 = 7f8cf3f0c0ba8c3a8b72c6442f486df6121431f9622f2359377ba05329d61c18
+Nonce.9 = 0768cea6f0fffa07bf57a9d99edb900e
+PersonalisationString.9 = 80e5a3f74e89a75196069f8b90254b3809e8e9695c70624aa6fd2b65bc7932aa
+Output.9 = 0e793e7a940a7d5ec3168b7eec9712197fba8d330cf4e0327ee77009d9ba6c60f3b75586ed07fc56f4b2e56834012791a9f34cab2d9284644a635026244f3dc6798414f3f9ba743ebd3eebe8f5e7a2b4339730e52cb001a48015398a89f5cd802e8da1bed1b93135bba8f0b1f71ba4e1ed3fcb6d8be05102e2c53fc0e8f0daa5
+Entropy.10 = 5f483698dfeae3d00e4dd1a8c5d1055f9faa9c37b76c7f6b427d4ce1504e8970
+Nonce.10 = fd6abb49f9982d7462c1a52231820301
+PersonalisationString.10 = 24308ba52c488b388cd3ed49277fe3ed7f4023f1ab2d4e839da7e3e2a7595c23
+Output.10 = b341031f9e030db833489f45c065c9a106abff89b43eb0112cd8ce2825b6cf25a9e8d58c969310c1bf9d6c849e133e44419c5d23d673b897dfb7efdc688fdbc779b56f714d8434b5cd12ca5a657e3c0450908425612e230a9235eadeb31d4202f02b38f8eda36b4135bb8a869eafe9ca77410adba8089ba2b305735e262633b2
+Entropy.11 = 023a4f36a435e33b4b6b6d3c484a165ebc61e9090245ff07fa59a363c29d5115
+Nonce.11 = 07309a34c4749f791e2f17ddf711ea93
+PersonalisationString.11 = 0d20c4c4be9883e1e251f3075193497d55c9bea63db4d1b87502e037a99abe61
+Output.11 = 97e85682a9a3260f958d457d6adda086902d65415dc9716f1c8f54c029e5608c15e0efdc5729cba64b373c4dd811b156f7730439a4bb3564bf64c9d5ab170d4503dddc82b5572489898e9d5230ac318676327a983b58a36cc28cf7fd082d63dbb4bce99ce3e949488a98a3aac576d83844abb41089be54056b41e2872bedd0bf
+Entropy.12 = 156a743c0ae8e39ce81b7dbc3c756256aab68d488e74c857e630b6ecae78c853
+Nonce.12 = e9ea051ab34490e29779b79991981464
+PersonalisationString.12 = 4ed22791055df7800f153f2f0c9187629d6bb1df4cd5c5ae738427a40238241b
+Output.12 = ae7aa0c1fb0b2c44775bfb5eb357104e308fe3e4ac21c8b0dbcf0810c815bf59473f3d252f4b469607398421ffd96bc116fdb09aa3116678d344f53b44230198cd1d87cbf3f82e68a3f7890487f93a7c8058d2611f5b952ef869fafa542b3006b833bbd27fc5a6115702778d0c87e7f76d96fe2164d95c1bb29e15360920480a
+Entropy.13 = 924140b7374a855269956d3300dfdaa74f7427815fe8930d2699ad9717f12615
+Nonce.13 = 1a320adc8d60f29ea9debffc2d4337ee
+PersonalisationString.13 = a1005683468a9e0443df0fc9170f80c950831d5c7d41f3161b60be684248dff8
+Output.13 = 6e6d4af61a5c67b7265c74e2da280ce8617adaa90fbc64fd886de42a5107dadc6eb81f76fe02e8bdd2aec2c6cae4ccd11954b5033f20303cc0a301ead5b33e94ef1d95173bf1598db7aea0087a92f838b1e18fe95e738b4da7f81e91a0060fdf2201aaf4c9fe2679943773602a0abdeb784c38538b3a47f47414086b3d299ce7
+Entropy.14 = 5c8a9f7e1416be2aec921eb7e0534453ac6689deb0e569011ae6ccf4375acbce
+Nonce.14 = b2328815495d926dc8ff075d5834bc20
+PersonalisationString.14 = 4c539b94823c6c7883b071ac395203bfb5117b6f9d5db7cf4063132e6a2a3cb8
+Output.14 = 4f6035946d4305290485c7aea10bbceb99b841770dbf5529e31ad51b0ce138344ac0b193a5074234adab8887a51d9448a2cc637a543372ed93885975b8de342c6a12a1ca8f3d053ced1dd2c7d6a3fabf6ea7860071c035f0fd54ee5775ae3a5d457d4af9e034ed337d79e9fd52c2ad051388dda50aa78d37403f33d52d30f6be
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = d19e82a4e2c2b36a505783ad251a1071eee4865322ef2610905f76995f37605e
+Nonce.0 = 1ad142f81d7fdbd9a64b3ce309626c57
+PersonalisationString.0 = 2c59345e9e1d887228a03ed83befe1985a8a8cc655af7dd208b66bfa9778ffb4
+AdditionalInputA.0 = 35703a613a2d8d8f5369e10772f5829c533e9e04ad6e7110cc94b4c60fc823f9
+AdditionalInputB.0 = 7751c478f25880bd986e763f7855ac6ec9fe00d4509ea48e3272766e2623528a
+Output.0 = b2e4ae060c3feb6de19ea848bcda053f34576b917ae63efc8016b8c6e6b843a34adcc6ed74ef17fb914df9a3e252f538e33e21b80a721f1dba4a3170e3c9c4d35074ca014f375aa0cace0845fbda7f0c9c75bfc47d1e012b85da16597568e666f96ab3054c52c13feb953d46b91b8b9fe90f292978661b1a61db9fe01a7e9c31
+Entropy.1 = 15f593886acd66c07f5d865357997fe347839ae7a3db83ff582110d8f39381e9
+Nonce.1 = b5d1e47b999c97d605f7496c476b8020
+PersonalisationString.1 = 16e3533318db21a3f9c46abf694c9622b76d552f5de62246eac8c4744fc6859e
+AdditionalInputA.1 = c1892d246475f79ac3287a9274980022efff11d1b4d50edad5afe96d732e537b
+AdditionalInputB.1 = 6bd330e5a775e9bed13096a690cf069b1a38616dff116ba48f0bc15e319678ca
+Output.1 = 81cf6bec1f9a2d4e39e0b1ed642a9c439b43677ab7865e39e03380f290cf6bc96fb50e98a48a1c1af96a705cc8d5fee58afea6459598589367ea75a02ca86a41335beea72c6d215e9eb5ad2635dc152eb4c27aab8976137ed562466db07ce4276dbda8588ac8192ae93e719a5bce0f1daa83c65bd272fcd7aaa7d405baf768bf
+Entropy.2 = 461704ded9c83e010aa8d73e4ca3f2511ac1e3e05838b471d339e5bae3873a32
+Nonce.2 = c9eb680ebeae3d9b469e7c559c5281bd
+PersonalisationString.2 = 16d6208bb7aeda26df9f566626b00fb14279124b6c7055be8ebec6f6fb8d1269
+AdditionalInputA.2 = b3a17140c2a9bf6d1bef8306c658693743e467bddd428229c299efd998bc7e09
+AdditionalInputB.2 = 6054cdae20567e46a081a55f15ebe5ff754e21de0b727c361e0355fe1b2582cb
+Output.2 = cae06dd7050936f4ccf9f614b54779a06fb3e780099884af4e4de9f612c4e8f6dd9fb46aebfb35e2933494414411f923b982faf330f2ec6d96ae021f18f718f647d3c1e3e40ac42758cf84a30ec2c1f86e1ae0ffead7a9de27222c2431991422ad723bac9a89d951a3e4f4c96e4560f90fd3d10e0032a6a4ee4b452747c5f997
+Entropy.3 = 11ebda61ad081bf2ee5aaa20003ee951bbe28c83beb46935f0c72306c9de9504
+Nonce.3 = 4d03f6deffae5fd793f00dd6e5eb82f4
+PersonalisationString.3 = 5bc1a27851efcb22dd767457ce0c2282b39f3d52849754511f507f31e6745f8d
+AdditionalInputA.3 = 2fcc405b2c6c634b7ce251bb7e5a35ae412a1cd35f357a40fc96073a026ab65d
+AdditionalInputB.3 = f127e9435866fc53fac707c8ea671aa849a0818252c5695ce37c13cd090d9b78
+Output.3 = 12c0d5dc580e8c061384f04f4b77e7127def4ee3a02657b7f7b8d386b40fc9bfc6efc92baf05d34a91ef6526f8e73d3d96746231396a57222f3b56d3606e197bc432069ede15791a0390ad0f0b3e47044fbb98d944e9972e88235d11f2251d2add7b5e0214a5c4755d37dc166f15197f33a4e837d1e84a46a0f0065472d066af
+Entropy.4 = 9a2d32fef1e20dc727be0e0a829dc920f5243ca69b398a3f1fb6040beeb6250b
+Nonce.4 = 2b3785395b404c827a639174a09f22e0
+PersonalisationString.4 = 9b30dcb792fe5160620608f3a1e3e8aa2891b95450816b8d9ed8ec682880e78c
+AdditionalInputA.4 = c6afd869dd2e5898ee4f1117d0784f55d21570a2adbd7a2ae31a99c9b2da383d
+AdditionalInputB.4 = 479c9ef7b5e80e3e7d239885ce16d64f4bc319780c147a3826fd7b676fd40a7e
+Output.4 = 91453bc7f3080cfa1d05fca4e8c786ef87eed1d3adddad3b0d0e7768867d86de1631dd09a0c5546bce783d9a7d83554c1420e837d43059e095f9e0770a4daa48bae983777a03f2808923b053d0a2c4d52b8f89048883799d757a685a09fa3b4292cec4b0b95bb5225539513964337670f88c0ced065283c66f1d9ad231c35161
+Entropy.5 = a401c7f698176237e9fdae6d6c0e53af28067a5538a6cbe64a3b88be8404eb49
+Nonce.5 = d96e8c6a441164930c8d1dcedb04ad83
+PersonalisationString.5 = 57a5da1b3bb42f0b8f685ff32f0554eab2a69e4c1ca3c4738ed4c0571103776e
+AdditionalInputA.5 = 764be59a216181ebe2a8c1a7d3354116745966d163db17afcc6fab3cffc91dc5
+AdditionalInputB.5 = 81af9b7e9237fe872870b8445227d92e0c5ec8b68ae5804fbffb35562e01087c
+Output.5 = b05729cf7846f25ff9229430873303fd6a5333665dfe3cb6c09229e7b6689d778cef0c5e8afda636be2869f3583c200eb47ba57c3c546b0b8c3ddfc0cc053228af14fc395225e616cc20036878fcdb28c3eb08a139bf29bb3d39688b484a976aab0449816ff24716c4e5dd5188383f1de683432df2cfa32af95617f4ef2980fd
+Entropy.6 = 508e78a7f545dc7eaa985b829d787b57fb3fdf4730919530ed3e8633c52c4712
+Nonce.6 = e77db514352e240088b56761d928ff60
+PersonalisationString.6 = 2d1dddefca2080aa853900834243e8de050ce2f1418242381fe4f0515a1f9da0
+AdditionalInputA.6 = 47e904412c505656eb3b3a093207cf042681550b3a1ed4a3c5daab996d214c26
+AdditionalInputB.6 = 5e3dfc3f176cddc39063ac839519a105cce664f2bb202857ae4d568999efc634
+Output.6 = b16a11949f510fbe62f88624c9fd89aad352623aa4a4d9d7a90f0fbd4baad71fd47c2524915d3371bbd38ec51926dd394517dc526a9e4fdfeb6f8e21e98486302d9472ff3a12ea4850aad19b926d76812f7cd45b9aa788a5cb6d7004e8aebe27a0fd249fd660bd67b5b4eb51c5c89e8d3d8234858139520259108a5f9297ba60
+Entropy.7 = 98b6aaba321a8a635e92367860d615a35036328b813d336c4f7412c73717234d
+Nonce.7 = 219825e6171553b299132f93ca2e78ac
+PersonalisationString.7 = 7f374e6eb48adaddd977ba213fbf9e1abf0343bdf344f5ca281f45242a279d63
+AdditionalInputA.7 = 4f9927afe85dde88d48ac6ddf7162e98d2b4b73ba19c769efa143fe06a972eb6
+AdditionalInputB.7 = cef13363f31de861db7d8af29a64aead7650ba514cd279e3ccd23b55eab719e2
+Output.7 = e28665a7262d78d9ea3b8b2c9920403fca82fc18c8905eae4c2fb64ccea43a3c67685b40eac09aeccabdaee78d50b912d6bcdb256b11669e298eabd61a1f588cba6ae3dfad21bd839101c142df6394a0309fdae7d9e0c5d9ef85a8063f5b8a8f1fab89c9a7297231ba7e41553bc39d972c511a2771925831f47cefb04d00e18b
+Entropy.8 = 6205db6529515e568f2bfc47870145c38e85b944ef17eca9cb9656a6df83695e
+Nonce.8 = 3924352f4be5b57cc8bf16e63874347d
+PersonalisationString.8 = e2822d33aceae8bcbfe21cd366be89e7b8d6d0863efe86e47f0d32402808ab66
+AdditionalInputA.8 = d81b01ddd6ad9e9e4056a41b9ac50d3bf4916e942b5e50f8190dba50e78208b0
+AdditionalInputB.8 = a28d3a383dc7faa76b4d240cc472100d43fde377f8236d0f85f9cac8dc62ca13
+Output.8 = f9ae1e368f2137fd467248482b7d3d04d16794afdfdc65b557c47a41da60b5b02ca4220a63b28397249651162d48b165b80953e4bba6c027f986eb836712928dc9b61c52e064182576c4170f8c01e3555b27486e5336e7d9bb62f60a12208d5c2c853cb42c1237192e7a5a6f889c3f13c910ed96c69c507546d2df35a1e92c47
+Entropy.9 = e80059eda9e1602a846c5b257c8fab7d5a874496cdc43f59a0255700233dcbf2
+Nonce.9 = e2711178e5628f5defc52d80718d7422
+PersonalisationString.9 = 6943811553e20af5dc611b09a810a9fbe1d169f4d74d00095f4765d61b737d99
+AdditionalInputA.9 = 25501eab7fb3cc9922f0b1e478a8d433e50e992896ffbe2a03887cebe226fc93
+AdditionalInputB.9 = d215cd98765c79659034a18b8a0118a8504c0f6772bcf3dbcd6ec95ec3d62c92
+Output.9 = d4d19debb670d7e0aab58deb86587f36f65bbc2e8488d005afc69342ca4fe2ae21c3c8f95915f8ce58db8532401270b6bb17816b3adb9e5eb553227de5f832b7015719bbc9236dd9155376c644f161240f4facec851488d71b6df6344c980156fa05d5e8bc15aa697ab104d03ca4e6f5fc8cfb9730bc0dc19ca122d47c7e0ce2
+Entropy.10 = fd3cbb5bf8cb2cb3517078a68663eb410b4c1e6534c6917cc1d410619b1b9c39
+Nonce.10 = 37442270189e8f592cd244703e618997
+PersonalisationString.10 = 93fb77ea1e487a1ea93477c86de6a665dca99621836a72290e926b5404471785
+AdditionalInputA.10 = ac77bea26e86fb7797291e075543c689fe0274e943ac19522bd351411b8847b5
+AdditionalInputB.10 = afcb73389281d91c832a7b31633edf9b92159660dc64fd0ae21d87144be52cd9
+Output.10 = dd560d65ac3d76a1e674e2361a3fea702c4e60b0a41e12a76f4eed4de63d90af7d2678f77eeb1c27959d1c3f05d4eae36b6f27c8ce72282606c7502a78f72e92dd6704c77c8c9b5bdee065801783de3f42e1a4fc1e8ea16784254738f8ac7681a98254cbff176cf9012b72d00a14304804321e556b704c9f8bbd8ba4bb939cb7
+Entropy.11 = 52d3ba44099cb6ef2d1f5382e1ded6c2b38f23efe1814dec957e50d318e1818d
+Nonce.11 = 49c643b9bcab90615e55d92ae404287d
+PersonalisationString.11 = c9e9843b562182b1633d99b75d9f073314c1316b83b07e1c62495d07724f72bc
+AdditionalInputA.11 = 39b7d50832d82c62e7f0b89ebd2be9a89eb7e6b08f254144b9a372bb2011ad12
+AdditionalInputB.11 = 2302018d8e0b4e943c702a00b55de9758297ca1829fb5372cb02ee19ead7e3f5
+Output.11 = 8db291de676981e57260e83eac296046396ebe718cbd9ef83cf0bff852fa074cbdd188f82a438b1b291587e011e35763a478752fa85c749b8361bec6e597a6a516bf24cf1cd39d085b677ada70a25cda686605956276bb505b9875babc43e2b4234abfe474c292cff1fac39a2c1cabefc5e88c9c2b3484988a8aacfce12a6584
+Entropy.12 = 45243c1599a5023b37267897df1619609b6548acdea2e92dcd253693a780540a
+Nonce.12 = 2c94230db5bcb992318ece108e79d2ba
+PersonalisationString.12 = 0b406bb75659d6ba936c7aac8bfdd46ca3b948c9dbc9d262d21759c1bc2d875e
+AdditionalInputA.12 = 7134cebb34fcf6d9721319295813cf49a792590e241185f1c69dcc1f69561d5c
+AdditionalInputB.12 = 2949161eb6e5f096efe506b07e2f4d2714696cdd1d1789f1ed73bc77389f4c35
+Output.12 = dace9aa854974bb55ea025080b017677d964b83593ec904e3c99dc0a9778c7db408d79775f0d027ea461a1eb7be785f2eb5717e829066a0f5ab3f7e60daed7e7a8a5e1689b229442b4e311c95eb16ea1351e14de2d1881f29bf86d0fc2fd9f9fa96901c98941a3742962074dba8896a0f162b32b9d24be502085c4aa21c1c78c
+Entropy.13 = c4330e4b48485166dd91071a97b8c752c235ea17be0d5e33ad46c361792d7e18
+Nonce.13 = 75a187fa344d9ca79a438dc120938cb7
+PersonalisationString.13 = a5823f2ea0dd84d959ea4c49646939b3799be6a19f0bb14eefcd14afa324cff0
+AdditionalInputA.13 = 5daf6e279fb7f0b04deae9326690ec124a8b663632e81c6f908078e4891e828f
+AdditionalInputB.13 = ea656d8d833090fd324dbfeffa771bf542f5180ccc38cf4dd26c450c9e7806c0
+Output.13 = 5e32b80f1970119daa27ee416e055e6c6e2fa712fd35f0b29c3cc1f4b0391d36247c215961532a098709e52018f6cd4165886a4e8e1a0584f9645925b50ce147f6814246b60c66d509d66c7410a3cfe8018d161953cf4a46146c0fef92c8359c90d8206ad2631b15fab3b6c812456b7cab017163b037b4eaff55fbc769d77703
+Entropy.14 = 1bebff7d1450b3bba8eb89ee198f5383a5e9d9fc7b35c082137f44b1523fdade
+Nonce.14 = 96a4101857a3904dd6ebd101e73c9d5f
+PersonalisationString.14 = 3278e5a6fd03d3f7bb315116b7d1720106e77defa3a82a2c681d6d91a6eb172c
+AdditionalInputA.14 = 95f4b7871a641c5cc4f8ddb8cbd987d3b0935cb2f55c77ce34035633c85c85cc
+AdditionalInputB.14 = b494e2af5b708ac30672b8ce57e72040e8233c538001a348e2cba98a8cd12acb
+Output.14 = c731cc7b21c42730bd3cca61fc5250b507ad08b24ac471d526f2217f15dc4d1fea85b57ea9cf6b3de9f650df8226326f8da0a766c6d3d9ab7713938d29d9d33ae2ffad658210751286896527504ea23d6e4dafa10f6e626a8b1e4b386d2a27ae12cd8ceb1f5024418b70c005b35f2c898a0faef74eb56044407930dc1cf73f70
+
+Title = HMAC DRBG No Reseed Tests (from NIST test vectors)
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = e91b63309e93d1d08e30e8d556906875
+Nonce.0 = f59747c468b0d0da
+Output.0 = b7928f9503a417110788f9d0c2585f8aee6fb73b220a626b3ab9825b7a9facc79723d7e1ba9255e40e65c249b6082a7bc5e3f129d3d8f69b04ed1183419d6c4f2a13b304d2c5743f41c8b0ee73225347
+Entropy.1 = d0c57f7dc0308115b1ea30e2ea2f7702
+Nonce.1 = 89cebdda617d132c
+Output.1 = b797615a78d1afe74ebedb9d8948d82cf2bb586ed80146b96d41a709f689178b772dd342d29af5449694bf8eaf33a664a24c0ad29a12529eeaba478a799917ab4666de1b6eb2c7332017d67eea6fabd8
+Entropy.2 = 286e9d9e39e4024dea0c885fd6f7f107
+Nonce.2 = 586b6a1a8ac3ac0e
+Output.2 = ca25aa9ef286a3cd52d101db01cdf0ce14c7add124f1b6a9a8b3a48c74989baf01f6ff704da7c5d5785b6e9c21914892102313e7a15cb2f9977a513ada0d3f242819aef2c1699b72cbd358c59435101f
+Entropy.3 = 6b20dda65a96f564fc0253d38dbc290b
+Nonce.3 = 813e538d040d8dd9
+Output.3 = 66b6ef57a3282838dea05d122ccdfa842dda19333ded2015d381394da38c8309a6e9703ec065335b116efb97daaac9c53ceb7a218ed0db61c3ba969dc629b95f5418eadfa43c58714fb02176bc0b17ec
+Entropy.4 = 32339fc82b655051042e3038e3161c4f
+Nonce.4 = b252e495ff396be2
+Output.4 = e95e4551a37e338faae4419e3a70e4c1e3d516be7e554cabb00007c591ba7cb6c3247889a9b08e46c6619f166d996e4e34bbf6cd8a354de9964de906041f73f2ade2eb82c6e82627d3257738c2821fcb
+Entropy.5 = deaa9d0c2ca7a05cba12eeb7db24277e
+Nonce.5 = 1605e1d030d76ddc
+Output.5 = bab5be6001da5951c1e7873f4e2be318e879370eae8a51ed8424ed6f12b2d294b45d006b1c2cd8c1ce047fd16f2fbbc09954a8b464cc986f23e86e1d9398d20780190aa5be0505cdfc826c7a01dcab99
+Entropy.6 = 589766be3c03b0a351a81b1203f944e2
+Nonce.6 = 928e95f8a3bc7452
+Output.6 = 5bee2482667220462ac6d3c234f7333703c5abced2ff2ad91d52193e86a61cfa43be0b4f7e831e1e563e260178f23976b2f3e132356ab54567b37580bf9d751223fad7793f0ac11fc450817536116b1f
+Entropy.7 = 07cc4d22b010335045cca142d91494bf
+Nonce.7 = 4d5e842af4155d17
+Output.7 = 8e13a574d17dc8b44382d3b263e857f50816755917603a07ca4987fd40340042a1e6a82a227647130304d73d8704fd9ad4db3ae42daaa55b1f93948e70c451a12724fed870e02a1a8ec4eeab716c6854
+Entropy.8 = 6425624a98ab3018eb4ef827f5a4fbba
+Nonce.8 = c1022d70155ef375
+Output.8 = 16fd6abb10dba1659ed56d4296b65fe3f2449996bdb8eee5c94b249f04808cdd9563569a4152bd99a32592d35d6a4cc806c228284487fc1e088b178d4c8ecb6b0e3cfaacd7d39d754d8bd4e6662f44a4
+Entropy.9 = 01d11d2b631be240de2f41d10bdce47c
+Nonce.9 = 89fa32427410cc61
+Output.9 = 4640a063e65ef0c0de97f98a39297219e2a1eceed7e6426199719911edbb3d06fbde6fbab83878e9ba9fa8e1d044f7a40f3627d7cfc49d17f101ee64f6b8c6e6154a01b4d39fb9ba6b33ca2c27f9fd52
+Entropy.10 = 5e0a89b3aba1cf5ed94756083726de8d
+Nonce.10 = b5d79162f73a5031
+Output.10 = cae7b2c25dce1c12e2c4f61b3e53155b9177e92bfb8faefc425d1cbb507713921378ed880986709bfbd7cda66d18dbe0732137a86d47b7e8223e345af0cd9a0219ba290040bc6ff44c1de5b16f32b933
+Entropy.11 = 3b76d32d5982daf6e2164340941a1707
+Nonce.11 = 441bbb99a2668ba4
+Output.11 = 63640e406e16b3b82723a6cb3830657b756fe61cf2ada96f667e0f2df0c9d33c6f164ee78d4976281a84d3024ff67074acecd65391a84aafaec9d6b088bc33616543b61a4c603e5a21bd39e2a72401c8
+Entropy.12 = 45fcafba2278bf8e6d437396f60f0e84
+Nonce.12 = 654de44e0bd6cb8a
+Output.12 = 7e2325cb2ced372b640c2496a3970cb7771fd494e40ae17239bfffd9ea2ab0ee74c2d3c369328a3b465e67bcbea86f50a32f9ff820505df5adbc032d3adb83581443877f85c60b3b701f59b1fc38c063
+Entropy.13 = 4201db977ef90d08f017c8e38204c299
+Nonce.13 = 5bbb47efe9fa4cad
+Output.13 = 101c7318e26693bc11d64b780e9b32d4d958c7475ab99fdd6fe86554dcef54ccdc2ca9f4ec355eb25d7b3f570ff95ec7abc2e9e2fb879bb045debf6c8a98ff46668c0de21bd8d4d18fb9e11550878e32
+Entropy.14 = 5d80883ce24feb3911fdeb8e730f9588
+Nonce.14 = 6a63c01478ecd62b
+Output.14 = 9e351b853091add2047e9ea2da07d41fa4ace03db3d4a43217e802352f1c97382ed7afee5cb2cf5848a93ce0a25a28cdc8e96ccdf14875cb9f845790800d542bac81d0be53376385baa5e7cbe2c3b469
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 32c1ca125223de8de569697f92a37c67
+Nonce.0 = 72d4cc4f0544d409
+AdditionalInputA.0 = 9e98cc8e0f8eb84d1911c1775a5703bb
+AdditionalInputB.0 = 593aa3a300e5c907a011dd5a3dcd77e2
+Output.0 = 942909a9d380aa5d4e3af69093a8fa513ee545b9bf9e1b81c5f30966db3e5cb52f8b1b6fe440d592e5fe4a972c36aa498035e2442f82910c5cd095c7f4b4c7e7555c4669cca481cdfbfda167b5d6f8d5
+Entropy.1 = 172a2d24ef128dadc93e0b74f277e7c3
+Nonce.1 = 692f86e6ca5e1117
+AdditionalInputA.1 = 93b4a1fdbf9dd30996298804dd86c0f7
+AdditionalInputB.1 = 69d792dc9b6fe1601f31a68e4d007187
+Output.1 = 13f30b4698d6e973556c3f92dff6241bbfbde300ed58d07fd5f64efdcd0c1b62ca3de6358d505dcf972fdce20f7b891c4cab493721d80cb108fcee915835b02dea33041b38e28252c30a71fad85878e6
+Entropy.2 = 4a17b8069ae3a74d77c9c94514ba90cd
+Nonce.2 = 2abfac0002d2c5da
+AdditionalInputA.2 = cc39d1a2a425f00e220d721fbfd5b6e5
+AdditionalInputB.2 = 1ccee25f5868e863a05b72d744e64aeb
+Output.2 = d787b355629779ff2916397d6094f44dec06337571ccb0abf5a17b6cfabe00557894e9ddab8caafef467faa4514582b5073e7d1d9fdd6fa34c565d1aca23742ed4e87133253a9664ec085bc6c76965f4
+Entropy.3 = d60c4860d9ba3ebb64e2095231e07792
+Nonce.3 = ba6b5e9e22e14043
+AdditionalInputA.3 = 776273bb22f5e62a793692127bcbd785
+AdditionalInputB.3 = 8795e45f82160cb1096a509fd3572f92
+Output.3 = 3122c1d3a6de8b25fd180b159731f975f78601360155e43f694b289822a25948d2c20a673f181be06b59c566960339f25015d2acbf5c7d3f68a2bade779e00faa24623c1313da888dc8cee901fa05573
+Entropy.4 = 494983c04581b811e0b2b846c54bd318
+Nonce.4 = 24bd70fd182558f1
+AdditionalInputA.4 = 935200a7edf1e2903581fedb7c04533d
+AdditionalInputB.4 = 49c0133cca2457fa7cbbd4c68cc5e78f
+Output.4 = 0fd2ec47fa2e31326ee9b894fdd6224818190168640d91a2a0c247b1e27ccfa343e9370d182d95b2b5bd74b4b09c44d04094364a6fd02ba70ee2c55e04d65ad9c6da65b9c0742f9fb5ca95daafa48df1
+Entropy.5 = 77ea86ce59f2466e55ce2057e7855035
+Nonce.5 = c09295c02f1c51cb
+AdditionalInputA.5 = f36d65f22b5afd3f51e13ea38dcff555
+AdditionalInputB.5 = 6b613b56e470b5c2c30c30aab9a772e1
+Output.5 = 41cd8ef82609012d33b4e5b51a39ec17eda4317962627796f7845045920becd7caef56d4a2c3a8e849e299babe92367ef34a8910bebd498248ccc2b3f5f63920b31cfe856973e15e48b060871a9cf9a7
+Entropy.6 = 2dffb03703023f65b757b7ee87899a14
+Nonce.6 = a9c8ce788fb2bddc
+AdditionalInputA.6 = da42b213071252adb755a6cb24094c17
+AdditionalInputB.6 = c83fc2beb60a7ee9b374f3fb7bfc8900
+Output.6 = 8f54271e3578e60e8989e49f5b426e1a0296afbfcc7da0ffbdd5dea71ec6b339b6d866bd3756ba745e42c8cddf997cac5fed72b33ac81e5f4d6f2d15f030a41c684552fc94d48c0d97323ef7eb656857
+Entropy.7 = 890e7323502313bc7d617805360d5968
+Nonce.7 = b6c68c0280cef5ed
+AdditionalInputA.7 = 257f1f60cf2d36924c3e7b6e4cc35135
+AdditionalInputB.7 = 89235cc472c6e2e1e92c70324459a9d3
+Output.7 = 55283453e82662c8d92f54cb4a5d784e83b1b3527bc5e71a53f04508172eb5156ba2a9ba92116cdaceed17118c7637af4b574d364187a52cf0c20d768da518021c3d95cb5ce6bc108b1bef19bad66677
+Entropy.8 = 167ce6bad165eb640eebfece7ca6690e
+Nonce.8 = c5c6b5f8c7fa9304
+AdditionalInputA.8 = c0e7ef13138ec4a7d52baf8592484ca0
+AdditionalInputB.8 = 472a47e3fc098c7cb92fb953a26e25c6
+Output.8 = e2aa2650c84be79ec410ff9bac93e5caff8a46a8c39495856ff64c8c5399e81654ba90c8a8b26cdca2810ce68e4ab646e50a1f6fa7a829cfd72c9a61e1a0b415c031067dcd417baac9553cf7d84a7742
+Entropy.9 = 6b8aeaf70460e83a124899d705dc0900
+Nonce.9 = acd811698669fcee
+AdditionalInputA.9 = 94a53808df5ebaa7693934d7fda92b95
+AdditionalInputB.9 = 4d4e7d88f44fe556c5ccdc56f8b2f098
+Output.9 = 165aae6bcdd799fe325ddafce3b645900eabc87552c0bb47ee2eb6ad51462a8a4f4498c4bd24fcfc46de5d12351143d5a838060f617258c218035a4f29fb34a54673205b2e1b362991693d7b99972954
+Entropy.10 = 00f30f92bd44a9b2b04a6cae67533ed8
+Nonce.10 = 5b4ae1335b98109a
+AdditionalInputA.10 = 77ec4274fe5f8f22dbb4a1ed6050811e
+AdditionalInputB.10 = ef041b6516825d51bf76d2f651a55576
+Output.10 = 8c664357b01425668ea5daf07a2b5b8c50dbbd71d9f48c50f275a02b6cfc4717eb7db286fa49f17d05d44230f7d82c251a6f0fe0a2add5d2cc9a92a527f63a9bd3c8ec93e9a404e0829629c5eeb997b0
+Entropy.11 = 2eafeebb58a2fb54474280112c5668d6
+Nonce.11 = 1be2aa4df98598af
+AdditionalInputA.11 = 389a36ecd687080a5d2cace8a326f03a
+AdditionalInputB.11 = 495965bdbbb1bb01ba61191e9dd4b038
+Output.11 = f17db045b0af4913d79f99e018c1f726f4fe02f08477cccc0d6a068a808bfc6ccb797e6022dc3b99ea18086a56428884110c49128a51e10c15f6ecbfe0a5a1e97e72a578fefea6c66c436c91a2b6395b
+Entropy.12 = b6497197b783d1f493a6430748b45932
+Nonce.12 = 895ea2a9d8204f5d
+AdditionalInputA.12 = ac26665e796d1b00951c725da88d992f
+AdditionalInputB.12 = 5f08c7951106dfec5096d90097449cc2
+Output.12 = 170b58ac3342a968c96aa29f1ce820debe7934d9db46216c03ae3afd304188cd38b6208e1cad5fce5c26179a30a8771015a99d2902d51899ab0c42e0b400d18f1e89411248db96f9d62b466f828de150
+Entropy.13 = 4ffafd1f20dd38699bfca029c0558483
+Nonce.13 = fbeed3cb29aa0eb8
+AdditionalInputA.13 = 96abfcee883d8dcad967c071c12dde19
+AdditionalInputB.13 = 9fd7cc292cd55d8364862f5fd675c08b
+Output.13 = 5e8612c6ce8f5b6838a1e4fb9e14370fb2d66bc885f6fe8a3ff232f16340c2af58eb2734494e0ce920f36046b7a807f4b55caf3a45bdcaefa4bb23f352601c0769749f0257428918b931606c7b395135
+Entropy.14 = 89a6f070afad5ccf4d117c4e44baa2c7
+Nonce.14 = b28941fa7e828c04
+AdditionalInputA.14 = 7206a271499fb2ef9087fb8843b1ed64
+AdditionalInputB.14 = f14b17febd813294b3c4b22b7bae71b0
+Output.14 = 49c35814f44b54bf13f0db52bd8a7651d060ddae0b6dde8edbeb003dbc30a7ffea1ea5b08ebe1d50b52410b972bec51fd174190671eecae201568b73deb0454194ef5c7b57b13320a0ac4dd60c04ae3b
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 49058e6773ed2b7ab309c0949fdf9c9e
+Nonce.0 = a457cb8ec0e7fd01
+PersonalisationString.0 = dc477641d89c7fc4a30f1430197dd159
+Output.0 = 4e891f4e281100453b70788929ec743a3c5edd9b81dc798bc93771368c39b612037b6f42f60c5d8924b646848151b0c295be491d4a28d1927deed523fd04d3d2dda95ed42166312e5c3392d22893b0dc
+Entropy.1 = 4ccc7d83009a28db14e839176774d45d
+Nonce.1 = 9345358f336a1622
+PersonalisationString.1 = e6db32976d9262b1d3dc487f22e1f5b3
+Output.1 = 5a171e9f0065ece37ba53df81ac3d88054d53d0cb695a901e1a1ca91352420b508c461ac91095ccea81621b800ddcff905020f96dad2a50377d3945047420c3b902e8e361f4525c1d4bfa8af164925d2
+Entropy.2 = fc7d0c3ef1c404ada968dae35581b6cd
+Nonce.2 = 31e0a46c39ce49dc
+PersonalisationString.2 = 14158a65fc9b3bc1ac04c7854493852d
+Output.2 = 918494f47dadda22667dc1d066f44f3ccbb61d3f84b2eeab7d26f4e999aab94e79d282287ab76d4e3eeeef2ef79c2ad571382abdea55d5d8642f604f8f27f3f73a5bc1413dc87bfdf91da1c6045ec223
+Entropy.3 = 1f0df7933dc99eaf7b284b02ee773ec4
+Nonce.3 = 6461fd762c595408
+PersonalisationString.3 = abd1d8af4ae46d7e5f1f4e0b71b54edc
+Output.3 = f1eba7596c6c20118f86017ff86514d745ce7ea02c49719094e5c2a96d3dfa1dd5079b8eff8078ba9793900dba145a260e672837422c351c3f231c201dfaa21e48d3f7ee28bcd08dac680e80bf87ec20
+Entropy.4 = 09988a36abad74c3cf377db9c9200baf
+Nonce.4 = 6c27be4e21932166
+PersonalisationString.4 = 17b7a40f4c37894bc948456e37ad482a
+Output.4 = 091e5fb9c6c218f2460c514fa215061460ca90cfb35c1a9f5ea125fc49aa0b2beb42dcb0fed865f8510c3141cd51d1b33216e2e72cebcabd3e1bc0eab201d8e72a0d1de1c2b7915a0cf242708092f211
+Entropy.5 = ce1934b6561ebaaa851accf8ceae5b0d
+Nonce.5 = c587922ff68836aa
+PersonalisationString.5 = 602e9086f44d03ce61039c2e81fed620
+Output.5 = 441da7552b2d45533fc924ea985fd4b0b95942fc7997a37128d3e96d4c2792b241dbe921d61f3898852d4f93740cc3649cb5279a7f0f09be3990e9ee599fb0717c308e7a939a441b5c3ba0cb8aa19647
+Entropy.6 = 58f1a9eb935fd08a4c3c894a06ad00ca
+Nonce.6 = 0576589700a4d50c
+PersonalisationString.6 = b14f2a74cbe3881069f30507919c6870
+Output.6 = ae9c6b40d951aab9c2d9cb920a05f3e154898c83e392dfbd7ffcbe2283eb2b75842fa5e7bd9626ad12e814874f1966fea1eb817793d2eb0a9cb9270cc9aa4267118fba0c7b6fcf487a97ebcbadc67496
+Entropy.7 = 0abf2f845295bb1dd283daa24e75fa08
+Nonce.7 = c9e9202793c479b3
+PersonalisationString.7 = f8742f44932bae2d65a032ada2b76382
+Output.7 = 8847696e8edd2c7b751b780a6fc69d8434a3144593936943217465362b3c3f7b25b75149f7c69d10ecd169f00ed98b53e0e498af6d9f600441ee2c01a9e74ed845d24cdab4543dff7d1f7800a278671d
+Entropy.8 = 0f9bc6935e7baf17d560931ec3e75d9f
+Nonce.8 = da7b19214e0ffb9c
+PersonalisationString.8 = c13bb26e9349a56866f821c10a2ae28c
+Output.8 = 12a849651f310fbae04c4da4680a21a50a9889806194be470b8b111a32ea741794cbe725d98ae9d40c0d60c04c8b7b32917f9dc18c27dfb8c64579a176a2c4b23cc32e5237fa5f904ab1249aafa7cd88
+Entropy.9 = 79d96ff5ec92af9fee0af7effdc15ce5
+Nonce.9 = 6b9cbdfbbbe5b49a
+PersonalisationString.9 = 23d1288ae41e65e56e7b783f85ae8b47
+Output.9 = 206c2564950995ac6ca6d2ad51e9cacd7540f254a335d6d7eed7ef17956949cb5d7d3f4e197e82aa4442d08d1d0f933e641f703be1be4a9ca5747e524687a7a034761493dcf2e1101789f135de5d3f49
+Entropy.10 = 94e852ffbff4f20078181221b5fbb804
+Nonce.10 = 8f3e95de313a52c1
+PersonalisationString.10 = 1841dcabae24c156a17a1d0eda6f8bb2
+Output.10 = 15319b06c05d47deeaeab540e649cc6e2989843de07dcaa966d799a36902f72943585e2773912040185ac1efa060c6edecef800e3116c66ccfeeec9fe7ee70f3dae2ac1c0210310ea164f4c4402d2f77
+Entropy.11 = 473c743205bb375fad15f537dfeb402d
+Nonce.11 = 879754b2b4987cbd
+PersonalisationString.11 = 4f88f4db50a6806d6899f71981beec49
+Output.11 = 46b0694bc8afc6d86dcb8b80cf8815104007ebedb06050ae625b890060c4dad3d9e2661042d26a3cfded0383829ddcf616ec84d3f32d307480caf0f87ba9b00e88812f5cb2a4e94e354092d0c50b9bc7
+Entropy.12 = 20208c9ac4830512786fce7ebde344a8
+Nonce.12 = 2cee0d7d7a5607d6
+PersonalisationString.12 = 2602c5f52c7ee2620486ce56366cc8eb
+Output.12 = b0bd2c0739ed1608848dd0e9c1db9f547c64268754af09716da40b2682fbc45f56de954cbce0d8a3f53eb2c3afac9e3afeab4038fe042c897786fd3da70f2d6b62b12981630bf30d76dd879e2926ab40
+Entropy.13 = 3011c31a44ccfd1260ae9e431da41e88
+Nonce.13 = 3b1a6ac9060f2fa4
+PersonalisationString.13 = 6b36a1fcb2a2173fc7e0c120c2627a6f
+Output.13 = a781d9970c7272e98d941438d311cf7e80d2d56b29eb0b4b1c76d00908401ec5b4bb1c5f159dbf42ab30100933b1628faa92d2e25bd37ead4c3354c823013cd9e331bdf5e2c5c7d11d5bd9f50fd110fc
+Entropy.14 = ee6d57635e5ab4b3d73a2652c1443b32
+Nonce.14 = 296bfe331b6578e6
+PersonalisationString.14 = 4fccbf2d3c73a8e1e92273a33e648eaa
+Output.14 = 90dc6e1532022a9fe2161604fc79536b4afd9af06ab8adbb77f7490b355d0db3368d102d723a0d0f70d10475f9e99771fb774f7ad0ba7b5fe22a50bfda89e0215a014dc1f1605939590aa783360eb52e
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = c27f80b1d085dd15cb163f0336d07745
+Nonce.0 = 7ecb3f32a90242f7
+PersonalisationString.0 = 4deb622a31b4c530348b5f08008fb7ee
+AdditionalInputA.0 = 5a84f94804e2d04ead773d2a324b34d6
+AdditionalInputB.0 = 226d9f4d720f580c2be44d4eaf2ec8db
+Output.0 = 6db76a0a003a64dec6801dd3271fae8a43aa8ce2e0d205e3830e267072abe28d2a6f707494d15638559fa4282843760daa90eec5d2865ea11e836e60345160d5112445ab1754b578b55471a1d9caf275
+Entropy.1 = 517dadbd6e20fd83aeaced197732b1d5
+Nonce.1 = ce221a60f8210685
+PersonalisationString.1 = bd9911bc192da45c00c47d5ee079473d
+AdditionalInputA.1 = 33254154ffeb4983d27ac08980ec4943
+AdditionalInputB.1 = 349db52f09422883536d11ac4aaaf7ba
+Output.1 = dd7be811d3a9fdd194e8f8f18b35e1d9f1788844c371d811cb898ebc561d000cc285afc8f486dabe37d6c85e614d3d196c544ca560ac6e0337b0700e1ded8fb28903e66329afdd589308d56c50d73803
+Entropy.2 = c763149ba95e7d054da52e4d3d062872
+Nonce.2 = 53bc2f43ae7c9da0
+PersonalisationString.2 = 305d6aa3c6148a0eb2e91b9385de5903
+AdditionalInputA.2 = a36918edaf5add6f0f81d3f991ee30a1
+AdditionalInputB.2 = 5c65b09e744317db86d78aaefa66af44
+Output.2 = 5560d27fc55b885a29a449a1f8835966549c4956ebb0393ba9fe748e74a5a303f1478bb3e507a9daa1159dd8dd6d171bff2e3830581d7f6fdbccd91a8748d20c1d981cf909c31db6eedf5587722ac257
+Entropy.3 = b479a14d125fe4601053989439f85200
+Nonce.3 = e198df756aff7543
+PersonalisationString.3 = 8f590670f88d8c2c713d63643f93ba55
+AdditionalInputA.3 = cda7c7ee77e667b96ef0ba330c9ca6ac
+AdditionalInputB.3 = a60fd147f6cdfb408d160e388c20d8d8
+Output.3 = 5f088bcebd816551c4b22c3024aeab2f75c906dc8fd0ab0c80055e0445c1dc151a06df81bd39b8535261a7a5dcedc7f9b17c062ee6f120f2099f2ab5aa93f27a08d7b5cf1027e26adf54a520916c2cb4
+Entropy.4 = bd46fc253e9334d4aa8bdff5e21c12e2
+Nonce.4 = 61515159b01a4516
+PersonalisationString.4 = 1735486e5ea8be74fa158b2fea8e5cad
+AdditionalInputA.4 = c3517d58cdbd0262655174cc1d1eb324
+AdditionalInputB.4 = 404f7b8eb461d077368e2ff06ddb4189
+Output.4 = 7f1cf172b67ec7c566c9e24c071b79b5a4a135a369ded5e78b8cd2467749e30c401bf176d88cc0e05a587bb2b8ed09206bb314df59009e88a01ef007e61eba2e40093aa003dada48314869c0f3b99d50
+Entropy.5 = 600a31b8f55c85ce27ece4705e6fe8cd
+Nonce.5 = 17a01e7827ec2383
+PersonalisationString.5 = 6deef06a079ad2062e77dba21fef6441
+AdditionalInputA.5 = ca5512ab329ee941b22f327fe0dad499
+AdditionalInputB.5 = c1ffc97289d8d363729daa1628a2c735
+Output.5 = a81cf5563940ffbbee9dbdcaf7db1e7e53b427fd3a0e795c35a1b8eb6f6316e43b804690a44897e0f42fbdfa8c9f1777024d2a530eda994ed038de60b90602545cef99b69f371f79619babda9360c665
+Entropy.6 = f38b0cd16e9434da916b63e8b7ce1a91
+Nonce.6 = 883ec208c3baf76d
+PersonalisationString.6 = 534799e3fe51bc370af6568072e2e579
+AdditionalInputA.6 = 9520ad24a61d29716342d2b7bd35dd45
+AdditionalInputB.6 = c4e92d6da37a9f6236a396f352c53c86
+Output.6 = 5dc0b3bebde5bac6d4d24ec08f1510dc88e1e06c97c3031dc9519f3392e83a09e1a7db99b2148d992a928bb5c1f68265086f7a84e697a7a0aeda4b41590606ed139063def46fa2a625657b17f18845cb
+Entropy.7 = 06a5e76d0ee90ed0206a07a914dc2079
+Nonce.7 = 6a8a2fb2c0ebbf14
+PersonalisationString.7 = 2a49312af91926a37b5f7c009e8047ef
+AdditionalInputA.7 = 0cda72090ebb007ab27156957e64e7bf
+AdditionalInputB.7 = 24695b221f42a5be6d4399c6444c4aa3
+Output.7 = 2b0aeca45ed44ca34a2fc741c5e4e2091e115a4148e71bd8fa90588e32253ffcf360df213b48a19f6f45186b67dcef6327729ac8f3c08d658de89e71539783fb66ae834455407e7827114317299835bb
+Entropy.8 = 6c12df5d2ba1f6a6e1e733baae42daaf
+Nonce.8 = eb47cc188d1b0be0
+PersonalisationString.8 = f510139561b292a7a1a0292b7de4b162
+AdditionalInputA.8 = f57a0c1dc69eae7473394ad1b950dc61
+AdditionalInputB.8 = 9dded4779fab0c8843fa693146837689
+Output.8 = 2be15d2ea87099a8c0430ba8e9451208a898379da075169568196f656eadbab59637c1f949b4506a851ae0394e135542137bd0daf1c188decfce92f6ef2396aa5bb125cf3187230ac81c3864632d9234
+Entropy.9 = 0e6a7843e29e5f16d2bbb4021d6389ae
+Nonce.9 = 692298b9f62ad22d
+PersonalisationString.9 = f0434f112699d116cfa7eddad486c544
+AdditionalInputA.9 = 146eb042377cdf6a0831558ac17ad971
+AdditionalInputB.9 = b29c26d483fde8489263accafc10d698
+Output.9 = ecf0812aebee7a452339071d9906709fe00fccbb0d94cc101b507646f554ebf3602459a4f20b82325b0e083ca189f59d68c5753dbe942643f07c7afcde99f9d0cc2883923cb80456fcedc535bfa7d647
+Entropy.10 = b6bc57d663b671868265fdb756e142fe
+Nonce.10 = 6da9c07dd0821c6e
+PersonalisationString.10 = f43c5223bfe726a3164afdcabe931eb7
+AdditionalInputA.10 = ddf419d8e074a4ff2daf06a1adad4bed
+AdditionalInputB.10 = e0862e71c4ac52194cd320d196e446a2
+Output.10 = 4f9b9e9aab493571160c732881dc358f73a08450a152124775e559889a9298d034ce1882dd2116f4863f1524393e1a3f1aceadcd9c4163dab7c543cd375c3f4b61ed72475d1812017ac83bf22846d14c
+Entropy.11 = f5649fc184f33c63cf8484011fa27578
+Nonce.11 = c1651fcd1a0780c6
+PersonalisationString.11 = 153f7b2c9bc9494a20ed0bf16b97ffdc
+AdditionalInputA.11 = 6106fd4fe0e1d894837ba8624cebbe2f
+AdditionalInputB.11 = fdc2988e6b358929645d27594fa98df8
+Output.11 = 49130a750b4758e7e8dec8d82bf66ae771d51181c33cbba9d84093ee4f83f6e3aadd3f40fbcc441fcf90ed83b83c9d9671b9092907a36231ec3e2c56775c5699fce16abad104b291dd13f67ad4e1ff4d
+Entropy.12 = fc3dfb2f29b649391437aff692076067
+Nonce.12 = 1e470ebf09e8fd68
+PersonalisationString.12 = 4e7d48fe49ecefebed749979b965d8f6
+AdditionalInputA.12 = ae7405de4957947dc09fb1be2227c763
+AdditionalInputB.12 = 3fa22158d9bb1948c64102f3ac00bfed
+Output.12 = ffb49be8c714b502595da9248248fb009eace24ff77d298dfe8b05efe6441352213bd236bdf4b3de34fee35b051747f4e549f69bbad8c729f3b5cf2db29a0ab6aeb590857e0f48babff3a9ea3e4079b6
+Entropy.13 = 32018afb07a6141e9a6badda9b647f65
+Nonce.13 = 0090ba3475d0149b
+PersonalisationString.13 = fa92f66bb7a06a1652d4084c15d2f778
+AdditionalInputA.13 = 13c32c456c799cf0808e00c6de7efce0
+AdditionalInputB.13 = 693728213798dde84176dabfb50434d5
+Output.13 = 12c9d6683e6ebb5136253db60b39b3203f52607e44d13ae80709cdf2fa61ff5befb0838f544e39e135830b573ac5a31b7535c0a2502370400906658e6b1e9a0f5755f360d9bff68fa55ad628b49a8937
+Entropy.14 = 3e325daab3301856044f416f250b6161
+Nonce.14 = e447e63d85ca084f
+PersonalisationString.14 = a9d2a53dbd7ef4b9150dd0ed4d002e56
+AdditionalInputA.14 = 4de6c923346d7adc16bbe89b9a184a79
+AdditionalInputB.14 = 9e9e3412635aec6fcfb9d00da0c49fb3
+Output.14 = 48ac8646b334e7434e5f73d60a8f6741e472baabe525257b78151c20872f331c169abe25faf800991f3d0a45c65e71261be0c8e14a1a8a6df9c6a80834a4f2237e23abd750f845ccbb4a46250ab1bb63
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 60fa9faa3d94146dde1d8a38a5173642
+Nonce.0 = c5bc78e089d37797
+Output.0 = 4952f3fac75b96410c1b44d902f7ef49596493754547f32168e4f1115d86b9e0fa4fe328bef656434e72f6c1e19cd8b6b4663423a903ad437fbe8e5636b295d7aea7b3066598e47ac0462a46b20d04ed
+Entropy.1 = 30be5f89a4ef4775248cb897c260f289
+Nonce.1 = e44518d129b80fa4
+Output.1 = 96b145ab45556c4d682470afa33ca50363f8c2d380e827d871e9a6ef9e9d94e86e49bf6318c9a97d73a205be12dc337b3000f468659ef50120a3a4115a0c117cdfb5701df5be06287a36049fa9d54683
+Entropy.2 = b6f8c09d68dd03b86f5ddf8893edd20d
+Nonce.2 = 930d5310b6612df5
+Output.2 = 3675f24bd39baae5dc858bf5084bb768e57be852ab511138383c0a02aca88f8e4fc64a479d913b8c7267e54e3303bb054407b4f25f76ae2b72632af5d21c996b286eeb03ee814b1ba4125e62e5f3f5e0
+Entropy.3 = 24edba742c3766e8a0578e950235b843
+Nonce.3 = 6ae1244c39d80ec6
+Output.3 = 347a45833fe7f4c1efd252c0fc14e3ed1157155d8c740dd2e14037e5aaa6b1689d47eba89ffe6e0bb3f9941f62ac50fda20189fe381230351ac4f59b0828ea09ab3f5d215cec85296dea99d9502b9502
+Entropy.4 = 70564c873184a8dd7c7206abf391b61f
+Nonce.4 = e986a1034e3c8d1f
+Output.4 = ec4b9a050c7da7ce0718e2ab4c9841b40355f281c1a76d6c0678af8250a8164ff211573673e721a4f76100a695eb5a311d24cfed2a1ca3e773b11b5895a4176542c32b89cf32bff77481c10af961a3ac
+Entropy.5 = 64842e7c7e87c7350c9ba5854aa63119
+Nonce.5 = 3bfa1412e1022148
+Output.5 = 453745b31b89a58946f9bc07e70fd62e5df72d795239ca303881b7184c015270324d78f3609d92268554d2e0151838bc176705e2a28aa225aa4132fe6601f2a5d4a583e9212164cc4bdd388d057b2bbe
+Entropy.6 = eb4b7b585d73140e61b217f99fb875f4
+Nonce.6 = 389176e8dea28165
+Output.6 = 14c6cd926596737b2077a5f395ba2ee846499b64477945d3c6c303c8a08de66fb98035499fd6c35a180141a503f20368b4e8900a8f2f2fe14925c1861997ee2c0f4a9c8d38ee065dfe73812aea43356b
+Entropy.7 = 72a4289a8ee982fdef0bd7b54664f318
+Nonce.7 = 40ea4ac22ab6064b
+Output.7 = 94f424038d90c186284df40bf1417c07070b045fd004a629f742019be0be9a1c8b36374acff5459188f26483026d472bbb679446ed2c1b6c5c4c65ecd67e90f3152450732db2e715a74495a2755664f1
+Entropy.8 = c3965e33a23b263405b2ed5e568872fc
+Nonce.8 = 403d8aa6c3e6ebdc
+Output.8 = 0631607bd3ba6687b6d8812dd4cb11e063c8ac83728f7e81aaf11e80bf044e05ac9b4f19492e3e02d0b0c15ddb036301b61e7a06b05c690a3892964ee87ea40ba937c7c7f6c5fe56f46e72d51d51c59a
+Entropy.9 = c957695bf87d6857d745adc436023945
+Nonce.9 = 8ea5c27e4611f76e
+Output.9 = 7aad79598f035e6b6cd7fcd1e56107d30e28e43dcc310348856c85eedd4aad0b252b6c57caf0301f0e6f56d5bc46b9c138483c0b837f3921deea001b238817fde421e60044f4c1958de1e53b43f6dd21
+Entropy.10 = 09fdaec5bb25fe9e1ae8df3f41947d4c
+Nonce.10 = 627d75c0d6519876
+Output.10 = 00e5e7791478fe28275b10f72ef3b76ed75f63218794b9838a6b276e9ed41d86363774dfb067980e7b89820905bc5cc4cced95f4b0f9f4ae3ef2ad8d925939d813dc1d461ceed5adc855306288793f5e
+Entropy.11 = d2325425101b1174d6d48c37fdd28568
+Nonce.11 = beb06a1a2089717b
+Output.11 = 77ecba51d4e396041ffd209739f4fecba7c33ea8ac3637dd8d19b05d59c2ffea67bdeb8d7770f4df1f7944bb7e60bd67a88f559dca42b85de8b451f5aab8bd57af5d42560869ea1ec4e0efb87ae968b9
+Entropy.12 = 1c381cd09bd8bf1804a831af9fd4890d
+Nonce.12 = ef6b1725ce5c687a
+Output.12 = 34394bd281562940d2b00895f3614e5845b682515c203442590c7be350439c0124b3256cd2f3e6248e47e1f12483f79fe0925edb53c250605f75b640e41d6e64767ae31658efd54cef6ac67ec4234b41
+Entropy.13 = 0bfdac88b626b8195de7b78a602a19b5
+Nonce.13 = e6508fa2eadda030
+Output.13 = 83a8eaa1dd0fadf4bbe3e3a95a35d00dd7e7873c1853cee64ddec2c24ecb3b67ec1f0d179193ad11e9993807fe5057423fdd8b5bb1a076506cbba573c981cbbfad3c3e644624cc80534926577fb2b2e6
+Entropy.14 = f41d60edb7749acb68111045000ccef2
+Nonce.14 = bb5fb8962ca3002f
+Output.14 = 262821119be1ee0bceedc1bcfd04f7fa2e199b2a7522c4a3a98c4174e0ac4ddcf7323dee2fcf9fbd2fe26c4fad347f7199be105730441f042865aeef50b89c00aa661361b6a1f20849bc7c70aa294543
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 84971398a188485e5b7cc7e6edaeb2d9
+Nonce.0 = a59f89be8be20996
+AdditionalInputA.0 = 4bc60fdfc7c3a681bbea21a19032f4ce
+AdditionalInputB.0 = 5ab2a1abf2afd8f8d83821b35d082cd4
+Output.0 = 39025bb3d8f2340a86938121fcf4f1e9ade448fb8ec99374f0071c8831d7be9f5fdc53098db5beb2dcbd9c96adb2ea2eddb0433cbe4d8786e91624917ec8588d5bf33c91dabf378e9a470410ecb6a51a
+Entropy.1 = 12b32ee74192c2bc8078e5984ae7a1bd
+Nonce.1 = 08d8504a65bae895
+AdditionalInputA.1 = 2c8d38b4d3965a26930d4986d3c7b21b
+AdditionalInputB.1 = a6d2d727b4075fe3176360b40115c31b
+Output.1 = 1b200b444739f85ac0db8a2bebeb19ddded23d59acf0489281c4730fc48eac1beef189fe148600355dcd4138c71d3b89b1126249be6e851fd70995b9dead88b5d9df08aa7544964ecbd2dc12267a25c0
+Entropy.2 = 27ec9e41e4e109db196ecdaadeed9fa4
+Nonce.2 = d4aa732c88c78a4e
+AdditionalInputA.2 = dd4d1a94affc29b358c60c73a2ec4149
+AdditionalInputB.2 = 5aba178b3078646eb594b800ef5d2a69
+Output.2 = fee36418c7cc1f48dafcb76149fb36d54541f73977c5f1b3431c1f3be1ae433b72bfcebe96ae054ce2f73185a3e44e98ae968e02e235775a04e4349c03ec7a4f910c3213a0dc4be26e7065cf5787d3aa
+Entropy.3 = ac8c43cc931afaeb75f541771b6dc7f7
+Nonce.3 = 9e0dabc22624a0bd
+AdditionalInputA.3 = 1976326c21cfea84d91d13cbca0373a2
+AdditionalInputB.3 = becb97721e7d6cd382af066bff11831d
+Output.3 = 82640e81f53ee842182d62f4f38d8622ec69f9ec4feb9af26cb81f5ceb027b979402c5e5fecdafa2eb7b8bc08c8e895684f4bc319c8758701f3835d58fbe5a31cd7b4bdba9970fb0b17ea37d3e693fd8
+Entropy.4 = 70953edfd1f48092f958b28d86bb1790
+Nonce.4 = 0ead495965341fa0
+AdditionalInputA.4 = 5357e6f2a3cd2861c44462cf89b7a347
+AdditionalInputB.4 = 8d97d48dd9cf537c1ca1532b554f0021
+Output.4 = 1ffa8f5b68e29c3da306ea98faa4efdf5199005aa8584bfee4252534d509f883320ebaeeabd74511766ea485874b499ce539255129acc039f59cf1116a101bdc733ebf50c2d31108b3c6610e86cba975
+Entropy.5 = 9eaca437bd80412cdce32f446e6fb284
+Nonce.5 = e61d9d24d7054d2d
+AdditionalInputA.5 = 86283863fa1047db98aceea176631a5d
+AdditionalInputB.5 = a8d0245c143ec7f5f1f1d09a57f48335
+Output.5 = a92b842fb7441ad1b398528a732ddab7bb15754db43efd1fed23b95100e8956785f1f7d730c87067212d87b11ee17fced34c9e69081f8a8d9a706fb16de866231284fd0be6df95320e1aa69feb98418d
+Entropy.6 = a3031414cf6d26ebe5de67fb2ef7923f
+Nonce.6 = 1fc9c1220f6e31cd
+AdditionalInputA.6 = ca8cc025cea2c5331a83ecb3bce6d7c7
+AdditionalInputB.6 = d8d64e55886b34f2cd727e4a37759be1
+Output.6 = d480ffa034cdcf73e863c64dae95d2b3c49f5b449d6ce3da0758f3fcbd7aa5b4d632a74dccced921c08fd39b2df12d5b29f8d02ca3ab471de1cd5aad664892e93cc2826cf46e2d8a944d3ecd26cec814
+Entropy.7 = 729e2ff2cca01f2578e4b52c0c6fe3d3
+Nonce.7 = 4e1f920fc2c97823
+AdditionalInputA.7 = 9e59487da8c1725ebf3e6501196ffe63
+AdditionalInputB.7 = 782f02945567c9383703607a6bb484be
+Output.7 = cbf5d87829f87a12a261da9a9aef54c493fc0471fd2bc57064af3bfd0657cf0e82541b88822a993af4cf377bd4f2f7a9d0eebf0ad7b8786434f322cda6688c4dd254dd4a450ada1a6e25c0890672384f
+Entropy.8 = 37c767d4db84fe8c88508ae9c4ab6a0b
+Nonce.8 = b5c893789185da94
+AdditionalInputA.8 = d37210842bd501e2082f2fc318b716eb
+AdditionalInputB.8 = 173992ad99c21c954e9d5299b6e53e13
+Output.8 = 5e113e6668e356f07431e329922fe872511465b6442d200eb70792c8d0b75f70043f3be94bb147744cfc6a8a39df27e4892303021afa2df27bef3a63202b91c6a3854c98511c7496663fa83d32eea34b
+Entropy.9 = 17c19b32a8b2aaaaaead5b0f4c8c6304
+Nonce.9 = 1d4d16b8f8821a80
+AdditionalInputA.9 = 2a5c3e50b8ab093eec5a01561434a14e
+AdditionalInputB.9 = aea9183348a707ae27f91f48a1df9cb1
+Output.9 = fcfd5181eb4d1abd5b7ef55be72fabd82ebf3c8b6f2543d8f2a843c46b9981c502add61eb90c14a905e0cc4ae4e39e9a9f354647f440ac73751d47273f67083f7c1308596fbe0865fed3819a0452024f
+Entropy.10 = f85f8411b1bce47aa600d1eb6cae91e7
+Nonce.10 = 243d5d8b79feb8b1
+AdditionalInputA.10 = d3ec04f5ebcb3c19599dd38014e38b88
+AdditionalInputB.10 = 67f2c2f1103632c70c41d89024ddc2cb
+Output.10 = 666746eb52de69630249d484fc1cf7dfff944ba9ce4c53b637e0bbe5abda3ede79e7e9d638e0464b4e7c5f937ee26bb968aaa8f99eec60fea9dbe088e510beb1b4f2debb388e81e8e0ac4dc085ec3e4a
+Entropy.11 = b1d64019e69e9b3d31be5fe1cc2feaac
+Nonce.11 = d091d095f6383cce
+AdditionalInputA.11 = 56c1c22ff63b2306a5d3ae30efdb020d
+AdditionalInputB.11 = 09bbe719b03a8cb1183d5a5dae9fba7e
+Output.11 = d06dbd3ef365531af05b59cc63a182d41b5211d7f831635961456a8c6c6bda76651fd3aaa7c52d0167981d88e680fd08814072fec146f9d67ad415d085074dad1ab51b3254c48b08fb5f44b3641ddbc0
+Entropy.12 = 79d85a22febb793162910b9b9df5d2b1
+Nonce.12 = 2ed972839ac5eb88
+AdditionalInputA.12 = f0eedb8bb43657e4690f4f1a80d19300
+AdditionalInputB.12 = 3f4f8cd7d1c92136129f463bb6e28ff1
+Output.12 = 70f58a7155c36dfe0b3ff75cd004415bed6ebf58b0f5945914c4a30b4a03db1bb5ec2da66c49f3dbb3519eee2e15699c340e4ff6f555ed53c278730b49e95f6141bb0ca6d54176e816b8b0da264ef9a3
+Entropy.13 = 0796e15cbc696f3677b86e88b224da53
+Nonce.13 = b257ec44739e378f
+AdditionalInputA.13 = 8adaae564b20644317f1fa9b263f92c5
+AdditionalInputB.13 = 3218c4a32b9dd73e865eabf014026497
+Output.13 = d4d042d00815694e28ce7aec58af1d5d7bbee38a64b1b5be258fa7495c3f8e1ecb356f0d71f3f4a064e54b718361ec773b094b0c473331d91c8e9429d66a2234fb66a2365e299d61a0c48497e8f4fbb4
+Entropy.14 = 7a41f0155e6562e5775c72f3c4d5d7d3
+Nonce.14 = 525b6641b2641cfe
+AdditionalInputA.14 = b4894bbb6435ffeb710bf5ae440bd744
+AdditionalInputB.14 = 689fb48c27983ededdd56d5a6b2c0345
+Output.14 = dfe8a9e17b938a1782fc3dba4f234dd9c9e36b67b28e1d901ca6b3628689aa4d2ae6b005ae3ce97e0d1e645da2710162294606ce51638b91e9c46d8f7f4f1a217e44c36b560f78b0541fececcf49b9b9
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ccd5c563cf7a63377a50c1613c916f0a
+Nonce.0 = 4a10bc36ae0dc7a1
+PersonalisationString.0 = 4dffb8b3662deb1ce7615badaa31db29
+Output.0 = cc2e9782fe2b2fbc869014032ac90984406cf8a90d51c8a540bd5fea0a7b87fb1f74e309e6012f81314736a9a284e740fd7d95540967b7c8b3c00db08e224bf49166f0c7855aa66a4c37f008ec85f556
+Entropy.1 = 29c3ecf108e961484ff8d70ac31727ff
+Nonce.1 = cb6d67c43fefa178
+PersonalisationString.1 = ef3de896e861a90665dab631a28d2660
+Output.1 = 7b7306d5fc8dc8b99d51546d22a09346bfa273969db066a2c9a249d8a9ee1d6a5af7b65267eaa12b297882b10b4b74ca41cfcefb89bc727663df339e7c8509e7f330b96711b5e063ff06efeb6b3bd976
+Entropy.2 = 1ac8ad13adde0db4639730bc990be05a
+Nonce.2 = 0cfbd5fe2b072303
+PersonalisationString.2 = 77a689c50945a03e809c942dc8260226
+Output.2 = 3ac0bc009b7390a25a42cae20d931996324a02158ee7923c81d411ee086b799d023b4269d5e773284fcc88408c9a6e41e977f610f8f405d919613fa617bd04048eb8c0ac1663ba9eed9b5590b084110b
+Entropy.3 = f50f07ddccffd7db928183a88a3e6faf
+Nonce.3 = bf3a5c486a87c89e
+PersonalisationString.3 = 58bd67add7fa081c3034c1d6e05af8ce
+Output.3 = 76eabf6d4cde433854233cd2600b5dfabf34871d71c2c25582792170545613f53d8c5c0ac6859c7470431e2599139f902ef66ca09b017573e9fe71311e65eceebd705bdd1f04395062d9bf9a30876bfa
+Entropy.4 = 85548c8caa37dad152905b18d541ce6c
+Nonce.4 = 8b9537a556c8e31a
+PersonalisationString.4 = a91111a11d81ffa5eb07de47456b5a25
+Output.4 = c77d8471e030334cea1c4f5efe314e7d354bace881b84147face9c60bcf0fef7f056a9aadc2692ec03d1c8c70b00d20b4044d19706869c212bd1e47db69ad1c4c27c525df0aa13ce4c6ad7853ceca104
+Entropy.5 = 43b7c1ddb10a2d1fb9c564be23be474a
+Nonce.5 = fddb39943d1cb8a3
+PersonalisationString.5 = 36e732d9437557cf4bc2910492b7a17d
+Output.5 = e5576e48fd1cec1257068eb41b1f1a42efa21caa25d90526f553fadb28d65fb92215d2ccc3dec5be675730c92872d5a82e80ea76662c7dbbf52561c449aadd0e485f8e30cd0c3e5cc7bf857c75cc1236
+Entropy.6 = 94d3fa379fb01b342669fdfbff7831b1
+Nonce.6 = af1310b01e6ba647
+PersonalisationString.6 = 203ba869bd4b3166887cb38e845e8003
+Output.6 = a46908d8fa56d12ff54531aea8cf011edfe567d90c396b40c8001b19b6a2e28055becdc8e6b89fb084f01d147285c3d7d1677d0f65ba1fd8c06ebc4b69c6456e16d13a9394ff166ca8f113b0d35bb94a
+Entropy.7 = 614ebbd4af2300f8ba40a525d5239165
+Nonce.7 = 0f1e54196c7d8e23
+PersonalisationString.7 = 2906741ed4d07ac73fb85e474e7da600
+Output.7 = cf472147a08866ba54c5291ae637a00dcadf484efa53142175caf67d476cbbfb29cfb096a34fffeaa4a69ef0fbfcbcdd0124989df4ccc4d4fe0d501f4cd91da531c49ef3f9b97cc4f5c30b6be3288bee
+Entropy.8 = 8af695ef704e1cd1faa552d345e76e52
+Nonce.8 = a304311bcabceaea
+PersonalisationString.8 = 94ad0cd4d4f60e42edfe7d0eb499208c
+Output.8 = edc832cbe218a1aba14aca5aa9a659367c94e5f8c98840eb1b713a683df9dcb8657751c73ca6091c482febb05c964d5079f1ea3b719da1dfc4c971200181e64e7b7e122514f23d7e9c1f8739fb992008
+Entropy.9 = 2836f6474ec4d0e1ea15be3a60d6ce13
+Nonce.9 = 544da2336ab1453a
+PersonalisationString.9 = 334d9ac9dd4490a8e766baf167d12966
+Output.9 = 66d0950b03741760622af56924e529298454e7b22d8d3a6b09d23e5e49380304c97e5ba4484b1bf8d49d58766594a5af997eed57b050e49d48a3d92f6b00027700bf2d198b4565c7b0c0cdbb376315bd
+Entropy.10 = b7fe628056bf891304a628c6dbfd5c1b
+Nonce.10 = cb435893f644c63d
+PersonalisationString.10 = b53b230221acb4ef9383bce5974649e8
+Output.10 = 9b6a546349510864bee318e3b6d37a4164fd83f8eafc76048a94c65509360f22e4629bf916fca047bf6395fb6a8fa3c0ede74d5180d4942c83bffdfedacce46f3a0e12cc3ee8f7b36511cb5f1da6f035
+Entropy.11 = 0a37c75bc808a90bc6b358b1df6be5ae
+Nonce.11 = 52bf5df812897d1f
+PersonalisationString.11 = e43daccecb6c15f011c51cf293912994
+Output.11 = 3ff419c6d50891bfc44c2f8e00532cfa74234d0427ea5537c4a1622b290a74f1c3170730bbe8f358cfb237e7dd50c03747ca9c56c6ac503fea6acf6338078d301397128e3d27839cc0f7054393144ae5
+Entropy.12 = 9149a3fdb043cf4a58a0a6682cd0211a
+Nonce.12 = 6c6a87fd2a0873f4
+PersonalisationString.12 = 19c0436e4318e74789800fd985b8c096
+Output.12 = f01392ed90222a4beea745b0aae255bf78eaa226ff0a6c276bd835abd1d397680074e0035bef3667225ab22517381d38830b47337ee9ddf843481bfc867ef44df4e3c152eee85dd0f6377e451b513536
+Entropy.13 = a3e40c12c6eb6cf0f8b93dd45f02dd07
+Nonce.13 = c697c1c060c90bf2
+PersonalisationString.13 = 1cf43d5e6cb74b0e5d70f9377eb4ea03
+Output.13 = cc002d549d5813efc10d16d3132fb5b394bea03109c9f11ab01a3178dc3350d9e1e9896846db60007ffdaa3ad530089fe4bee9380b807a19adf594466723ac98dcb540986ec6307f2b0b37d79366d0f4
+Entropy.14 = cb89ced16e360d7a417f4c165cfe3e1f
+Nonce.14 = 3c9434b7d7e18472
+PersonalisationString.14 = 55bfc33da17f712877829b7f8a134e55
+Output.14 = 705950e4790ada95b99ace57e31115610ebc65d755fe587eae8fb1aeae463bea8b50a278f45e61d3433272ec31b0d48afcf219f5f4a0adb20537be9c7cb65911df28976aed4b4278cc524639a1ca5f40
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 2e46d1465016ed9c8e97ad09b64135b9
+Nonce.0 = 1f767a37dbe161d2
+PersonalisationString.0 = 9cf5328f3c83d9106633ef72969db870
+AdditionalInputA.0 = 2cf2385a1c08820f116110ece73d5c38
+AdditionalInputB.0 = e276ba7a39aabaf7b6ac06b3e625f228
+Output.0 = a34e465c7cec4a4425e74ee9ff00afd03c38ec23cc42275a45e2b9b1688e0346c831db4e876b26ec8a0941d8822ea2493345b647f47d62f5a4a1175a68c931938c504b10bf510e84e1d1b7575ce60392
+Entropy.1 = 57a0130495639fe36ea031a4712d6f8d
+Nonce.1 = 1511d09f3c4423db
+PersonalisationString.1 = 06c68391122a4cfccfd3213e1ddd0217
+AdditionalInputA.1 = f40e72070d55cc04837b00620ea049d2
+AdditionalInputB.1 = 1370babced8c74778fda2b7196a3e3be
+Output.1 = f83977567a81ba5ab9183ae22b8f74dc56600c9ceb0c356bfa538da363cd4cbd23df38209ee318a824d555627e4d92ab67f419908ce874863bd3a14175404b59ec024eb23953241d057044366ef5c92f
+Entropy.2 = 22f1aabcc1dc1bdd3ca4d543052f1ecf
+Nonce.2 = 0991d99eefc2e214
+PersonalisationString.2 = b1da6e0615faa3a3332986e3110d7bb5
+AdditionalInputA.2 = 1cfae24633f47b1be98f613de4aae9b4
+AdditionalInputB.2 = acc5e271f1effb59954c59ae3c48371d
+Output.2 = 9c39b50e672525f5f55cdcc5a6db5c12e0a2659b6066a0e5206c8355e5ea050e3d25d7758e4295cbbb7407ad8cafe6b18248100a7b44cf46789a8204b89e0ce61863b8f668ea1a85bb17d1fe784163b4
+Entropy.3 = b1c1c8b29339f45baa8844a836e1744a
+Nonce.3 = 330bdb95c9a75071
+PersonalisationString.3 = 005db9cba44937b96c2dd8fc2ede4f19
+AdditionalInputA.3 = e7c66f46e635ba70e13ec802eb680600
+AdditionalInputB.3 = e042426aecc7b6dacdcef259ff1cb974
+Output.3 = 6268591ba5a4ea9264f2fc084ae0fcf29cc8510cdf13d1cdd6dedea38fd1233cfcab9a516fb1ea87d2be3663cccc7be45459e7250236c27b4c2ba2ad93f9b162d7a217c90d0e72367aceb2b68fef6972
+Entropy.4 = 869f7dc29af9b337707c9ba6b53c096f
+Nonce.4 = a591976c911e9b93
+PersonalisationString.4 = 7ffe89547e750bc81c58bacc420a3d01
+AdditionalInputA.4 = d2bbfd8e2746021fb96e6f193f60d5a5
+AdditionalInputB.4 = f7e90688db62f547f9a663d0bc36a881
+Output.4 = c5131771deeeeae61e527ef451c31268ca81be89876626b7c939c5853f73bc4563c5990157baa59cbbf9bc90966ef5dff107d9dab2c728490195742e7870f9355b7f6b34e222b026ebc6f66b1cc08b2a
+Entropy.5 = 0ed5f3590bdf23d6bbda155607512a46
+Nonce.5 = 0fac870d3d0d10a6
+PersonalisationString.5 = 7779c7095f0e3217148433212b514ad7
+AdditionalInputA.5 = b4cf127f7694c84882a7a2bf2ad82f86
+AdditionalInputB.5 = 9812e2fa754d8d84216bd8ec8590e070
+Output.5 = 49c672a8b8ada4637c85ad3cc8f34ccf65ee8a52080b40ffdbe123974667716f220a6b8d4325a2233c920df62c6af9332b5fe0fb4927096fdc5fcb0582561c6a5f2c2c02a21b7f00114e37eb841fc2e0
+Entropy.6 = 45b88571f1f6a5078e8f55a64fd65cfc
+Nonce.6 = 21b460e9d18d8b0a
+PersonalisationString.6 = 5f8e745b4cfe2b389ae793dc549651c7
+AdditionalInputA.6 = 60807d1ed62addf0b3b99aa193b2ae69
+AdditionalInputB.6 = 7bd3ebc62ed27255e890eab9bdf1f48f
+Output.6 = f276e92a70dc952274e97b4a6f21033fe9ca3c8f6b3351e5b9bd7bdfee10fe48fdec4207ab0ba2daf748546a1b41f1885b2f5c72fe8bfebabc2070630eb4510f56155e9f56cd28f34d2a7bbd1537fd35
+Entropy.7 = 644ecaf5aa69da3b77b193e98ef39a04
+Nonce.7 = da34725b826a7658
+PersonalisationString.7 = b5eb33eda5ed33589fb10140d7fee099
+AdditionalInputA.7 = 09e5f533ddd905216fe33fb7c56b61d1
+AdditionalInputB.7 = 81b42cfea57b3b23e42f9a76693fe3e9
+Output.7 = 97e86cc710f4f5cb03e5647aac699fe9470daa8f466020e68aa6b6650d1e5087e60ce0327b76810baaa6b1e5588d7b64fc4601951877e6026d1f193073bef1366cf3c8e70a8dd8b4f8008c92a5dec8a9
+Entropy.8 = dada9abb0f4971c5c1729f770ea65c5b
+Nonce.8 = a71b797960511bf1
+PersonalisationString.8 = e2084322989327d6c7cee24debf5ec6a
+AdditionalInputA.8 = 5258eb6b1ac6e0d7fec82311fa25203d
+AdditionalInputB.8 = 98830de1787e18f24b5ca2c06710ba88
+Output.8 = 6d1f6ff3ca5784dfa4fe330a6b34176a6568d2dadb61487afd1b95e8b074804550d4fb68cd5b2a3fa418cdbe1ee4969653f30fbd535b96cdf84ea8fcdbb4eac328a046a4d31d2e1aaff732bb0a081702
+Entropy.9 = 409b34c37f4d2e5dfe0a05074c386087
+Nonce.9 = 7f73cfe2adb07794
+PersonalisationString.9 = 5de4a53e8aca5cbbab1b3066d715dcbd
+AdditionalInputA.9 = 9a7edf9398b24c1d31f2666b9b9d779a
+AdditionalInputB.9 = 0f155315784d676aefb7f5eeb62a0949
+Output.9 = 03f0404283d046fd43a2febfae41b2611fbd27676917d22bdc688d77917998175eb1d14ad63adef5aa8f5bc94a7e0cc50c31e2edff8899c8ee34abdbadc4a9472b093efa5c0414681965e52a802a0f93
+Entropy.10 = 494fdeee3c3a1cea15a6f6143ab89e7d
+Nonce.10 = 4a93f9e8a360c74e
+PersonalisationString.10 = 2b473062164ac8c4a86a6f59c476666f
+AdditionalInputA.10 = dedcf5e809deb64f31f4d3fbd8076518
+AdditionalInputB.10 = 1c9726d1393c3aaf1742fb4e5fbbc869
+Output.10 = 905a4f69d059fdc164a699deced281fe946aa55f7dad003e2230ac913d7deb2aef87ee37d14aa32713f4d3a080bcad96aaab08aa2a7dc4d028d9783b0e1bba64bc5a01e34e6caa52f4bb2e7652adfd6f
+Entropy.11 = c37b632eba47b37068dd1468f882a805
+Nonce.11 = 73fb2c8c738d5dce
+PersonalisationString.11 = e8e74095cc1ae4bd3caed78c884322a3
+AdditionalInputA.11 = 327d9a42a643908553dfce12419a52b4
+AdditionalInputB.11 = 87cbd71021cb4a019b0ae3b069aaa860
+Output.11 = c0ffbaf2331fe683caca2dbd984c1c3d0bdebadc0d4156c85290c9fc8cd4578a6c4637ed0c7952ad0155e59c8adb824a2d9dc76410c2722f134846b31da96444973eeed9a07f6a1205dfea448bf44752
+Entropy.12 = 804d2a4a5795145a38f7a9d692b35b96
+Nonce.12 = 053f8cfb46065585
+PersonalisationString.12 = 8d57d0622ee09b751bfa6ff2c724d887
+AdditionalInputA.12 = 7aa24affa982e7506b48299c566d84bd
+AdditionalInputB.12 = 8f0705827ae4704cdc4519b4159d2231
+Output.12 = 2a2e0e2a5567ee6aab61a6bfb17d29de3f406c3235bda1073e5ee061d0b9fc5e24a085ed5724813cfd7594730aeff3e64a2b8b0a9d40ec62f2b461b34385827fb14b8355b9fb9939d0e046e3b9824e9c
+Entropy.13 = a1a878881fe14aebf0200de12a35d42a
+Nonce.13 = 7c82be726a835f7f
+PersonalisationString.13 = a94a268dffb62c4c2dad1f6b40bc4e52
+AdditionalInputA.13 = 9a8d19dceae983564041ca7b0585ecab
+AdditionalInputB.13 = 133c0dfc3586e405a0000e0ba3bbe7b6
+Output.13 = b06db3a831f7b86e423b4de951c477fee22f8cfb539362084b8aa5c1da9cd23479678f40e9419fa21e4391dc8f616907ee1851addec517fcefae47dea07b364c9d2a6592a3b43439e17d2621fd6da02f
+Entropy.14 = ce9057867cc50a1169569761d70aa88a
+Nonce.14 = 372c31f9ba8a99ec
+PersonalisationString.14 = 86acb354abad884d85c37bf8fb1c6a82
+AdditionalInputA.14 = 7ee4f3670c4671f128cbd743c408bdd1
+AdditionalInputB.14 = 38f8003e8fb8c119534a2c3400a87f8d
+Output.14 = fedbb1636b83c5cc5379c9aa4d1319df6d30770e469c2f7bd65b4b74d9bc880d520e11b2c3642a7c4cb6d6138d1d92f716317dd762c0a841e56e7e0226971a7f470e918d44b4f374f9e7e3b5209516d3
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = bfa766e525d824db96ca32b4fe92d793
+Nonce.0 = 9a72e7b810b29762
+Output.0 = cdc76a2e0242f5618c69335e7a7cb82b3fbac60cbb8c76eb9d8ede01105a5a507aa13bd23454dd5faab287dbc1a7edc0162983936d8532e0131a1e80f59e3dfeaf75e6c28e8d049c95a3974047382b3f
+Entropy.1 = 92ce11514fbab1cc4ef748469ba3f6c9
+Nonce.1 = 3cc37ae299c2bf9b
+Output.1 = 05e19153e1b8aa4c032abb176226c7b8d6f7638ca120dd755300d2fbc0c48a980c076f9f9c00224aa0b4d7a271c88cfab9a41e6a57afb2abe58d97ff7b229a7c4bdb4dc00bee87377742ecd508e40ee1
+Entropy.2 = 7fa77653474a847f037422577f9682b9
+Nonce.2 = 41e1eba1cc019344
+Output.2 = 514a71380a77d4ecc664fefd584c70fb69e5873dcbd8f198f2aeedf0c80c85dd1bae49b2a2bef1d5e80458b2f26711f1bcf627363560b59ec848898c94060c829c3f3d8073cb73988d769899368f187c
+Entropy.3 = 09fcba90dd5d55421963620faf9f0c91
+Nonce.3 = 7b1a05f1e9ce9079
+Output.3 = 76c29f559fc06c3b924441a45e195c6a217151f21b809de36801e260e0c4be3f6ed45e7315ad7526cbead47b70274f5dce9ffae78a8fb535409820c58e89d8d83ce562d0c970bfb15f680f357986a286
+Entropy.4 = 218d7cbc38ade0cd245ed1d2a3c634a6
+Nonce.4 = 23d8d1ee77fb2a64
+Output.4 = 2648b3639e9131f0b57a7bd8087d7d08cd7769c607be1940fbe99929124ef2721794b18212a5e5c2a4b8b3421e091b0a845f5b5752d668510ac2596b7c93a91f382f94a747a4e1d71bf7b3f3a3986e78
+Entropy.5 = e39498bfa4d98ca9b22b698aa1f63ddf
+Nonce.5 = 6476ff7308958104
+Output.5 = 5ebb29a28822c2e7c7dffade16560af4be4b0138864a9d3f73b0833e10773c0c86d7e44166db49ec5d2ede42cb875990d5d7b4430dfc6df7a7bb4506b6e73446a14bc60dc6b19b51f73314eb08b000dc
+Entropy.6 = acba480a9559ff9c61cb9ec7e8abb6e8
+Nonce.6 = 7fd83151ed1d2373
+Output.6 = 58b6519828e5668ea7b874429c1e54b261069f3e5674bf61a99c36fe088c7fc9447bd9775d5434dd75daa8066f0c621dcbf043a05e2774d377e31606ae982fce03d81a20969e71a16568bfbee0116e54
+Entropy.7 = 6a1496d59769fd65bb498278d3baac6c
+Nonce.7 = 8de8ead8cedadbda
+Output.7 = c88e74a0177a5393e216980fe5d89350af0ec099a78543f30fef40a22d843cd0c3f1399c15231129bc2fdf27fb82ac4743ca8631161a886bb8f15b5f5183ed73956f29ef5a3151c14ed0b5d281b2d345
+Entropy.8 = 68ac7cd82f0c42f2759b646350891457
+Nonce.8 = e17540c06311ea2c
+Output.8 = 27302d645b6b4318e8f739b397b9acbeabdbc01bc68382972529ace95a27bd848e51286cf8fc87cff57280cbbe20584962d2bd757ccf60145c72f0de932c68277b7907a56f67b399c93a65f4780f6553
+Entropy.9 = 2f14d50ac42f37fefa881d6f34c09175
+Nonce.9 = ec7bf5fba3c94496
+Output.9 = ca9da0d8ba870c599ddadb8083d3ca7d13cc4567a997321b85d97a32c13c248c520a27cf01999050a4cfd7410f9948fbdfc9d588b2c864690e4ee0820f7dd9ac558702578f7d39ea059a7840fcd8cd27
+Entropy.10 = ec842160e9877dff8448a25fd19a8e00
+Nonce.10 = 5d46b4fc7108d5a1
+Output.10 = dda69460e6ee719256562b53c9d2301b41245452dc27994b6455a1ad10e3e712d0f689b858fcd832910dc27accbbc5a5d5c0219c3fa265aaa1139815d5b4a75f2852e74c75c7d6b75b60a459902ed003
+Entropy.11 = eee3c4cb2459c382680e40a6135d4564
+Nonce.11 = 7fbdf557e97030e7
+Output.11 = 5a64d31283b8db2abaadf7870f83177d8dc638da08b640f7f3b8faa134942d3d6001647a202a25c55289fbf68fea9f5b57e32da221e580ea5f3b2ac60114640de1ee4523bfc6457cbf271f9c55c0fffc
+Entropy.12 = 84ff66d74434cab61f40a73ce992cd88
+Nonce.12 = 64c3e72ab8e677ec
+Output.12 = 9fc91387318f67c9687e31050eff3bf0518df31b2315f682d47771a93608db74c8c567f2a8da7e2fc06e00b8a1cd2b89d1592fb29a4925e63828e6d22acf5a36587d50d02593bd8431026684ded816c0
+Entropy.13 = 78725941aad0cad65da5d0b7dc9057a0
+Nonce.13 = 577147770612020e
+Output.13 = f9ce02ce66fe9f370e97eed7d86b01e0701d1b9ff21531f0f899dac067ff48c6d6d11790c2b0e6c6e8d3c993564a09b05a7f135751f11d72452238868db2f7c08c170ef7b918911556e13f5405bb9969
+Entropy.14 = 5b6aaaf5c4e5acdacd2c0c14648eeb3f
+Nonce.14 = 353cc1174da7f766
+Output.14 = f7664dd99fb870dad1a45a4ddb870c9936fb42b3a063336e447f15703c5a95dd79eacd9f41cd0c1b4f2e1a45229aca140f463c1beab47aa0525e5bd6e1accf360bc8525430ba05fd14d1f008009fd586
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 9e66c1fc6886f1a84237d721be6c92b4
+Nonce.0 = e0db993d92e0c85a
+AdditionalInputA.0 = 978a1a8a9d6c6498d3536c7b41353fc8
+AdditionalInputB.0 = 24826f2c58425ddddc71d796c6a57314
+Output.0 = 94a0cfacf2989cdb19873989f8e86739d5bf3afc392b7211ade4cb127e6e18a6398132bd38d5c327211a3554d24a8036cd99d50005087779c67276196578b4e35ffe11931077aede78869d1b9ff72561
+Entropy.1 = b8565f257fad8812578cd2990dfdd8c5
+Nonce.1 = f51c7a9029855727
+AdditionalInputA.1 = 3fd4c7015e0b7b306a3fba2ae8d0608e
+AdditionalInputB.1 = 7e8dc861242e508b0d77f37498ee8cec
+Output.1 = 14c233eb1cd922174f6cb1b82481079b8ce6d8893c3c16e7ff75c2c05e246acf45fafce47165759fdf22e88a497f3a7ae9490d0ddb70ae2a84e366bcd02ea844bf4a6e47432025326a04fea07a6a0a63
+Entropy.2 = 68d5425a0e31b17d6a9c0a86f9531aa8
+Nonce.2 = cc68d1be9927216b
+AdditionalInputA.2 = 61443cd0eade23310f8f5baf711eec1e
+AdditionalInputB.2 = c5bf53fe4c02f92bf4407272a24d4b49
+Output.2 = d5262498e9fc05359bfabede33c4f6bbe694b660568f643763e7c1b3f5a4dbddace7cf8c79bb0fb39b3c042a266c999ef5ef993bd12d20992eef2125363dc4c9277e5fe12ce58a6b371f20bb565ebe39
+Entropy.3 = 0667638a456f0e259ae466b6717d9fc7
+Nonce.3 = a56f17dc6d536a0e
+AdditionalInputA.3 = 9f9bf58fbddc2a46225049b3073a04bd
+AdditionalInputB.3 = 6c18eddc0893e73e70656851dfc7b83f
+Output.3 = 04437fb577a897b5093794845b74b29079a9ad5de13736495860d57b3a677ee228013db9f8360cdae829411a2b4b6dacb6afb74808c2409b3732e7cbf94367b2cbf02bc2f7d8808a03edc5ec08de2d6b
+Entropy.4 = 501533f7849cf3a9087ad9ffdf331490
+Nonce.4 = aadb2ace7e079e02
+AdditionalInputA.4 = a3800ef525b3b5b3559d11ab3ae63738
+AdditionalInputB.4 = c3699b14a20e1a24cf4b4778cf3f30ba
+Output.4 = 6a18c13785be673be7f08ff46ad79c13f824bf23988fc028d03d739e09ac16dc8d91fb1b242b5c610e8abb2def1d8c22cde1b70e7f59c5392d544bc0600f890835ccb58db841bad89fa8e0236fe01be6
+Entropy.5 = 486cec72c53f9cf14493ebf4e5b94bad
+Nonce.5 = 07c1fbbd5669b51e
+AdditionalInputA.5 = a543305abf590408c163420e4b82044d
+AdditionalInputB.5 = 5fa086f52cd1cfa6e7c791025ae3c8f3
+Output.5 = 3849b7dd20676d7c994a807a5a90eea088859387632f8a9753c2fc1ce1dfa9f4f1c088898b731a29c54d571f034b96e37d8f65bae67c117213dc943cba3405d84290055b2f2d6f67d0ad60097a5c2556
+Entropy.6 = 59864fc6051992871c3cbff05df5fb78
+Nonce.6 = adb94619e96fcaa5
+AdditionalInputA.6 = cf3c0c8aca346a6726ade353d3c27ec0
+AdditionalInputB.6 = c9e780c2d9af4f14c1189ea1ddf32f6f
+Output.6 = 72c02fa3609040bd97a220ee02a0431d421e28fc62ab49436e28a9d6644177f06d005047a186d29962134fb677b2efced14140da676d7175b8d66c231de87e3d7bc98ad6221b27dd228a1ffd37d4c3fd
+Entropy.7 = a7320c2a974506a8f6668f7df465d5ab
+Nonce.7 = 92c5d91db0c0ecab
+AdditionalInputA.7 = fb57906891f92d0a28ccaeb989c1a605
+AdditionalInputB.7 = d193e3199c9cf3c9a06aeebbcb916039
+Output.7 = f137664231ea31fb33387e0d85d414e1162944ad7655e3892bad7e1392270defcd9326a37dbd49a2212f4efd6d8209b190ed3323cddbcdd32700b688ba785eca0b397e699ab9b38484ec27899668517e
+Entropy.8 = aa832d6d61b476d84b305c62d70295a1
+Nonce.8 = 43fca3d2bd71625c
+AdditionalInputA.8 = 03a0cd32aa84d6c0e27f534072aaaba0
+AdditionalInputB.8 = 29bddfbd93bfdcfa360f2b265ca4cd33
+Output.8 = 08f0a32e483f905f1d7c0e4a5379f801fc09eea908aa343cbf65092ca038a2a18fdc2e28a251af4b176904a6f6681fe90c60c7efdb9bfb2f07a18f4a8fe1d29b11e50c61e3e77cb63897f72768b70a1e
+Entropy.9 = b16199af13f67d2e1d7116d5439cbc24
+Nonce.9 = e457f39562bf2879
+AdditionalInputA.9 = 0ad042679b50df22db3524f305844eee
+AdditionalInputB.9 = db8a6bfcb4bbbcc237c2910cabf857ff
+Output.9 = 081f6bb91a12784e505b6b70bbedb94d31dd1e6a536dd438507af07078fbd52a7ebc7cbb234b1d36d97fbb232c19a029b834a3bd744052a9b0684b3f54550464985a03d7b1a869cff4c4214a4eddf69c
+Entropy.10 = 1a87ce827097fb2cf7f647e9d4f7e1b9
+Nonce.10 = 6653fddc19852c6c
+AdditionalInputA.10 = 1516c1e51382a92e4c50f79e8d15e00b
+AdditionalInputB.10 = 484858b3063cfcaa96eb0a35bcd0aa5f
+Output.10 = 33976057f1cee34c47b99b34f4f0c603acbd55afeb1a2af4057424084305f40ae3e66edff18a0b9c78732f0a4e75c6316145a2f6432217ed89d5c758a64d7c94c21b0ab4daf293b4bdc1c657c2a21ef7
+Entropy.11 = 816de0fa49585cc03b3dd872dd4b5e9a
+Nonce.11 = 2ec77b957f041fbd
+AdditionalInputA.11 = 278b7035cbe66cbb62f6f889169b90bf
+AdditionalInputB.11 = 3179734240b94ddb4ea9408c3b881634
+Output.11 = 47f4293beedfee7646296823898803f64e75c1903d4adad302f52828f78f377a11197c203556a8bddcaf07052346f2f63821b4fefccd5586edb3e42c3e440d1c1d771c455b4a87387327835a90f58d29
+Entropy.12 = dfa7b352a12272e4e73e695821684529
+Nonce.12 = 03064231e58dd00a
+AdditionalInputA.12 = c5068492e672a25807d99feb92c7efff
+AdditionalInputB.12 = b17b041a785c9d5d7758954df5b8eaaa
+Output.12 = 039f06a342d27607b94bf72a1cb7bfc06eaf4acd27a2822105544fd4fc5611c62b93cca5f7e43de59fb1890dd7b90ec115ee6a003a316a2e320d7d67c4a2ce7767561ad0affaa5c7e43493bb96c14145
+Entropy.13 = 973b3fd4d03b1b31977850f55e0fa2bf
+Nonce.13 = 49c927702f726b90
+AdditionalInputA.13 = 0a7985ff1ad019aeb2c4177399bd8ca0
+AdditionalInputB.13 = 05d5f836c929ab7840b01e97d3637aa3
+Output.13 = 02467667e66aef03a95114d3c97880f0d64ee98600e2332e60ecd58dd9e06844971bca4bfe65fc06e91103cf802f3a6fe6499a19696797896db585a32c1bdb5e1ade83914e6799ea41245b3162723031
+Entropy.14 = a6f43539adfab40674ecc38a4a3cb7f7
+Nonce.14 = 2563816402e9a386
+AdditionalInputA.14 = 4eb5c1192fa86b355237b5a8bd43ebf9
+AdditionalInputB.14 = 7323d1a6f983b7d16df6b0aa9d14adb4
+Output.14 = cd41a0d7371b2eeb790fa8335660385c418ba84507ba94d1d1015b3353cdcad556993c19388461fd2cce38cc9fbc00e707b18dea9d712ac0616b443b23aee8131c295a1a741ffde36b2032bdb8ae2f6f
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 042c8e1c6782d8f73d009068a75ab2e9
+Nonce.0 = 677b47c76e4fcb87
+PersonalisationString.0 = 14ed0ba096a31c15d23e4960989d188f
+Output.0 = 9e1aa2125ec8f2198d5125fc84ddcf2aae63bd5f2b82d1d04e8e38068519fa15f711424e1597f4d3fd5d883539eb38b2df9d2404f5c4c2b2cd7161fc6b16661857fcbf7f495282cd3eefb733a3428f63
+Entropy.1 = 012e549615f628bdaff1accf34e67aa5
+Nonce.1 = 4ec7216881e013d4
+PersonalisationString.1 = 1917cec767e585d21f2c87fb8ecf8998
+Output.1 = 0ef48d6825eb2eb7b5cf2fd27d04e75876e57989dd590a9670e96d53436f07e5ed6b3ff31b0c2855cfee5e633536cce00fb1d58213225ec604f1e6337ea50b7fd830c5c219ac6195683fca437f8c360d
+Entropy.2 = f6182e3bd5af9db1168c1169065c2e9c
+Nonce.2 = c7d77e5617ea216b
+PersonalisationString.2 = cb4c573b948f9c42bd159510850f3c0e
+Output.2 = 2c0c8451b2906a4645d8fbd5e5d114eb6a8648881fd6e6283fbeea07f8adeaaee0be053f25e4c8611039b47d2243fd515f22341fd5b9a32f7eae4c93617b958dc52cff027b8e6571a9c77b3fc6e3d38a
+Entropy.3 = c53c031d335047819ba2d91848cedc2e
+Nonce.3 = 68a91905d2eaf2f7
+PersonalisationString.3 = c1651f5931d0b1f0ef1a6a5247d6a7e7
+Output.3 = ba234a775d77b5eab1f86b34b24e12519e3021e6c4aa0660d09ed78c18969d90d148d073014ec162bfa3c4c2f1ae44ed3259b5d21f962accb659b9811650bde00d6ae213849ab38745e7457df3e41827
+Entropy.4 = 92d5f92b4d7ed319175b898bf7265ce4
+Nonce.4 = 02ba3243ea8ccf33
+PersonalisationString.4 = a7ea09d20435fb095bea129439891737
+Output.4 = 3f9e757dbf6fcd15ade10a025d39b5cbd95d0d95ad4ff83a771f3d1c5ced8e7c9b878d0a0ee7b7e4083a2c20af93eec52914ecbfbad346676717719bbbaeadbc9e7b546994c39eb365de83ce6a08bb4d
+Entropy.5 = b26878d986cb7a9a24ad23e114c23796
+Nonce.5 = 2c0736af4cc7a493
+PersonalisationString.5 = c4b853b830723cc305bdccdc54c52b33
+Output.5 = 39d24e7112a6d61e9c8bee3e81114d6562ef1253069a7f5f395f57230ca243a9cab966c0429d8ef9aaaf42ad99f7f1eed705ff0938c7c9bced04398d04518e387820b059995f23b1f0021240e3ad37f5
+Entropy.6 = 1eb80342278e65a93bbab11e9ce4f335
+Nonce.6 = 8c1ad3cba58ee175
+PersonalisationString.6 = 68b626801dc8e98beb6fadf1bfb5e21b
+Output.6 = 7d1eff0e42435bbfb69924231bd839eff608ca112079726ed280eb0760b05574a0962a9dc08937fd3cb6348a171022b1bb5f6ff0d1899ffd5b41d7d802eca0f5ab338b51ba23b63030568d9231861709
+Entropy.7 = 97d536a5b1473c0095e7bdca428cbcad
+Nonce.7 = 0429afa5f99a14ae
+PersonalisationString.7 = 5a5178b8b767570857f8ed35ddd54d1b
+Output.7 = 9a5361931a1d6f327c47fc47320dbc21b0ddb149630877e2e190853c7bc61893152995225f3ea86bdd5be605a96d029f496575f08aa5fa6ca8348f0718253ecdbb689a779d3f16bbfeddb97c6419b615
+Entropy.8 = 1215644d686cba97f1be48493cd18a14
+Nonce.8 = ffc386c7b611ec22
+PersonalisationString.8 = cdd3a57725dba43d8ccc2c0bef1d4d99
+Output.8 = ec30fd9087521b3e890a212329a5a85570e0723c352c16239fec39877393211a4ab913f76eb9f03178717e40b0f3f7cc6fc8da291d62ab4d9152992bc32949df0280874d455d47d257ee62aaaaf5f7e9
+Entropy.9 = 178bdeda669c11953434cae40f74a3b6
+Nonce.9 = f6c34238fe691384
+PersonalisationString.9 = f3da7f228d4a8ac7183a68e81f8aca53
+Output.9 = 278e1015773790d2aa42b2c4ecc19ddfade99816e48b661b1ae74719817fdd24a21149494a5c2b3aea02c71b7f124184579efcbfee678b83afe5d7feedaf4612e26ce646730fd0828260a261787674c6
+Entropy.10 = 7fee0519cda3f1893a6e6ec597d5245d
+Nonce.10 = 3e40b0ac46e758ca
+PersonalisationString.10 = 69f3db79a89e62370e583282a6dce5c1
+Output.10 = 1478ec02c5b50f2d26260f00e01996208a1b92e19e7df9cbe265436344ffef4dc1a5390256d0e995b49cb16f2b6050b6d72b3744f98465ef277b2e1062d0c91636e5d3f4fa1cd872e18948926eb090cb
+Entropy.11 = 22582e33b126817172f564c942218e69
+Nonce.11 = 9541c0c884d445db
+PersonalisationString.11 = 8a9161291feca7b619dda96f1f95d1d4
+Output.11 = 1d3047675d69bf0f4ce0edc6973c5026ae079fc4476767d230ee5ba70eb1e35f0d75587d994c3a2be9c8d4116fa0051b70eb16342831838d0e4607db0ddb41341488462e5661dfedad87c99bf71cf1ae
+Entropy.12 = ca085646c0a62e89b7234efd1bf44218
+Nonce.12 = 05d59e3c6db4078d
+PersonalisationString.12 = 1c5658b01974a5a7257f827244739636
+Output.12 = 65daa28df559584a0e93486abd9252b6da3377a4a664e940e3f8c425ea5a3f6587db7a208e388e2ea39f8a82b0876e517d0a3b46156b70090cec0499fc9fe67ddf3787d2bbf038ad73edf135a6976322
+Entropy.13 = 1c98e8206b14aba60d99e1c50f59385f
+Nonce.13 = 3bbf085009fee036
+PersonalisationString.13 = 39fc2e475db746dd67c15ccb522fb842
+Output.13 = 9830a027cae50a265d8a7ce4d155be3bf12b828bcb594af7de85f7094f17c21494bd15e51e3d0b498c3ef4f8c4713f9c2feed42b1da4b9d08d1030a8cde51c3c7b90ae0e53023537b1adb8dc7481bcb8
+Entropy.14 = a6608d593372e785fa76a572b9621e42
+Nonce.14 = 9bee7502db25ae7f
+PersonalisationString.14 = d0e8fa47aed6b67ca4e8e521f733921c
+Output.14 = 3c649d295fd9b98082706f3f841f5275834143698c202da4c881c7d0a3c9995329a54d440fc4d21ab596e95e5b6651c6e7138b332c97ef771bc6e3b0b3fa09090ffb402ed1116d8395e5f1cfea3eae6b
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 395781cc8e4f9edb23827e941890bf96
+Nonce.0 = 1130d2546d7d7f90
+PersonalisationString.0 = 9b44ac5e40c0588cc281d3eacd48db0a
+AdditionalInputA.0 = f5cbce8c4aefed405abbc2c230082972
+AdditionalInputB.0 = ac6eb276b884027fcf1ff10c7c1606a3
+Output.0 = be1bf64388be36f069eb5f88eb587a7a91ae6d7b2c74dfa777ab7589196110577f12ebc73c2050528befb468db93bdb4c1020068c81162154550720b8d12918ab7a37e3b371349a2e3455704070d1bf4
+Entropy.1 = 51251ac73a86df514e0c971c3e3a1fc4
+Nonce.1 = 66d581f9d0306725
+PersonalisationString.1 = b9c4a558d71bfa722481e0c0d01c7b5a
+AdditionalInputA.1 = 4a38cc49b0b49c70bd7c6dc847dc536d
+AdditionalInputB.1 = 4bd1dbe9d8f783eeda0bcc2de942cef8
+Output.1 = db53e4ef8c0f07fce0427e8b2a3c3189cf8de8fa9a614dd07773474b512b390df3821f7ca9eb855047cd832e35e7043560aa9d208093725f85cda4f0f011924d2fb7ba8909a4e9d1e5cc270626f7c90c
+Entropy.2 = 6d4b93974bc805ff68eb614d360a04c9
+Nonce.2 = 8891f9e7a0e66398
+PersonalisationString.2 = 07c90bb88817427849cffa336a007673
+AdditionalInputA.2 = 97d40b4dfc4d3c2dae4745bf806c5a2a
+AdditionalInputB.2 = b6325ae18ab95627c1ca62a7bc9bd201
+Output.2 = 27dac72aa66bbc55cedd8e60ef0abb091dbc8994f3dac856d0a53ed9cd37587227003d76a288a4c18e5c617b0310a3865a9bfa28b91ded5f513a833001653cda0e7e2286327bf7908f5b69370a94c021
+Entropy.3 = 09ed2b11320062b64f5efd5a32adcda5
+Nonce.3 = a1096303faa72334
+PersonalisationString.3 = e7fd5c4f07b9a2140aa0dc38e40433fc
+AdditionalInputA.3 = 8530e77b80d4fe108339503477e9db05
+AdditionalInputB.3 = 1c050b08664b731c2af0a94d1885fef7
+Output.3 = de13d0810b89ad9335e99e693c5b60f7745d24755cd6686e1e8dbfe43c2fd1c92cc22afe5dd0009c07a4f2c75b669222069f2b380f24b75e3f67ede5b145956d345a00e623ca89b5148ecff5b32ac54b
+Entropy.4 = 7c6ffa1a98dc40895449a2e1b52aee99
+Nonce.4 = 502fcd0d65fbc300
+PersonalisationString.4 = da37ded34f1d122cd5f84d96e94a5743
+AdditionalInputA.4 = 9bf0c256f0a6da19ceffe7fcc19bc483
+AdditionalInputB.4 = 766f33235868a866a8715766ce18c2b7
+Output.4 = 400b225604d672aa52bb10de6b5891418ce04f03552179a5eb9c3b715acee26d7291f3884762fc4c7e286f8fe9c88a3934e97b4d63da432b4b64dc1ed3c7990f423421b86139848a7f41b2a074de732a
+Entropy.5 = 37cfad7c080aacb7b8b128b604875c8e
+Nonce.5 = 7258f12b264dc52c
+PersonalisationString.5 = 7f4860c5c2e8cf85fd222fd94f3f62a3
+AdditionalInputA.5 = 657a660856ba3fb4a4c9bc4d4ebde43b
+AdditionalInputB.5 = ebbb0370723861eb7a30ca54f66391d6
+Output.5 = 39427b5d8bf7d7edb76639f44c4f7891a173d5b3733cfb18055108a7dd1616abf2e1fcaed08e905073c5561f6f1a652ab073d51c48733ab1897b82231e49068f827a239d5420c0db93603fe5b25b47bd
+Entropy.6 = 7cb29063e19682699f43e0692706ee6f
+Nonce.6 = 5eed287eaba2a9ed
+PersonalisationString.6 = c7bf51ea250d877be79ee40a2b307da0
+AdditionalInputA.6 = 72bb22bd9c69291a2f4c808ae932990a
+AdditionalInputB.6 = 99927fa92f19b363eace031005fd5ac1
+Output.6 = c356ad9937bf66cf1f89964ebb7ee56ce2b6b2485d01762f5cafd10dbcee20470991d5b71797459e74e39a7429f8e7662ae9428f6ff0c1569a478a2f8b792e3da4ae5efcfd39b5ae5c3036aa6bf33751
+Entropy.7 = 1429a31cca0e5208f7f5f137970c77ef
+Nonce.7 = 58b2e384bb27eb26
+PersonalisationString.7 = 102c8946a835168f063cfabbcd9cbdbb
+AdditionalInputA.7 = 955c8883d259660f51eea217c7a5644f
+AdditionalInputB.7 = 699dd0c00f8115de647a0cd9622cf8f2
+Output.7 = 9582eaab608ec13f000c8446e9beb4ee8afd740b5e1c84760ee66f03867f92545ec3cd4e363e3b9e7775790f9d4c827e6095a1569d55ce744e654da3c4257dd518bd5b362fcd119827a10ee893f92530
+Entropy.8 = 851e7b2cfee37e3aab673d4783fbd34d
+Nonce.8 = b68ec7489b72f146
+PersonalisationString.8 = a508efaa12a0852bc2ee6ff247445fdc
+AdditionalInputA.8 = c014eea6b2a6f6cb3c95a5a3d750909f
+AdditionalInputB.8 = fa1f383fa97e4fbc7149f41cbb8b322e
+Output.8 = 3bd8d7f5eeacb31423bcd15165783b065eb5ed222cd2b949836d08cf3315b31bdfbf88044d55a2bd201e6b55c3518c16bf5f50c31fd4f5d2292927816dc40cb07796508c41142d9d13ebe924154f0b23
+Entropy.9 = 493f87823d37b2de87999a6f8d81e624
+Nonce.9 = bfb6fcee09aa1056
+PersonalisationString.9 = 70f7bd3167c5e5146050ee5d2cc2037e
+AdditionalInputA.9 = 07ca42e34252d6ada280eb2e97d7fd93
+AdditionalInputB.9 = 1df64e42fe23b9c04721757425bb4670
+Output.9 = f62e9c9486d469181951fca12454ad31a691fc8d0efb8857787be2cfa619dd161fffa204b5a56638c6751a32f56fe874f8e97ce268daff078fbafb3b5aa324f117d8f4866a91ff25a0729d4d98a7838e
+Entropy.10 = d8f78f44dab7ad3ba201244355622a4b
+Nonce.10 = 088cc74e5a96cc2b
+PersonalisationString.10 = 8589f76f13989e12871aebe6e781b377
+AdditionalInputA.10 = 4de39d14e5c2155c0f5edd635819049c
+AdditionalInputB.10 = 8668158ff1d7d950435a42cf93216a8d
+Output.10 = 46f450014b594168eac0a023252525d8b3d04275b5b8c32eb764a094a339aeda594993a96803bde46161ab79c72278b01b63b687de2ef15b1cb7030caf5255e0a3635b50e3e966649e80fc6bcda7a3e4
+Entropy.11 = 86922b8bb0b3a05c39585114f99b0ac4
+Nonce.11 = 0d9a57a72bf85bb6
+PersonalisationString.11 = 75d62935b7ea694429fb34a5cc493889
+AdditionalInputA.11 = 8e387a9195b09a62fc5274478594d989
+AdditionalInputB.11 = 32b7b72e48d31db05f063fe70753fa2e
+Output.11 = 4bc46578da450e26f0125500f9798ad50509820e8e534ea61089062c3c8f6026048ffda5677546549ee218f86d2a4bc0ea0ceacf21e0f090144f412c36f70acbe785f38f5a80078dbca1410a0a180c50
+Entropy.12 = 5fdd8bbe36190c6b0dbc1299ac97ebdf
+Nonce.12 = b81e2cc176e4dc49
+PersonalisationString.12 = f629c8f6f55820ba33deefae6c155ccb
+AdditionalInputA.12 = 87a216dc0dc9e4e976272d045e2a0150
+AdditionalInputB.12 = 6115f3da6224d53b35bd0ce21974cf75
+Output.12 = 7634ffdc8fe0b0e474506fc16c7c04e0dbaa72557082a40b2a13b2cd371a2d288ab09de3a9db5dac4b3a86d854db4811d1e9403bd5ee17ad64d4327964ac4eddbb3ccd3ac98e46f0aeef618da11cac87
+Entropy.13 = a618e67dd74626b8009054f325839902
+Nonce.13 = fed41d27a6e16b0c
+PersonalisationString.13 = ca0ae9a874b49faf09cdc1a061e76105
+AdditionalInputA.13 = 8dbf94e1a5537658cdb89fe0fc64738a
+AdditionalInputB.13 = 24e28c7c07398a04a356bb2c3b51ec34
+Output.13 = d198c5c3f2698cc86204f0fe160b1a125275f0af472c3161c79a523dd86f585baf2acbed3be454780697a2eac6370b173ade6363735541dbb5e9e318504668f2bc7c09f467988cad5fbc88ab657f963d
+Entropy.14 = cb4556568f9f296ba5eab8ec24144a6b
+Nonce.14 = f906b9309da2dca3
+PersonalisationString.14 = dce3e4ba41a0827085a6956f66e389e7
+AdditionalInputA.14 = d56ade0d74ea34577eb12a899d18d382
+AdditionalInputB.14 = ea83bdba8490ffd136def5f7d9240c59
+Output.14 = cd3d8174d8af97387ff02707d2757ce685ffb5d8dd91d95b8af4a3a757f9321b0e908096cd1321de0599640b7d81f43606b12e029ae158ed568ce1db429be75285c655e15f88da859f09b4cd843a0b61
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 5ec7bd88120cb0ad77244b19274dacfb
+Nonce.0 = c7a50a3d59ec51c8
+Output.0 = b4f1bf1cc25784b7108e0a7062988baa39f5906e145f6035295fc29f574777de196a42091523832157830d88f89685b630e4fa187040d5a472b0a16ce1cbc41e753fd1d28c37036e065bf9051d6d0862
+Entropy.1 = c163707712457ca60c65b9e5618fec7c
+Nonce.1 = 5fb5b84a82ffeb63
+Output.1 = 6df04dfe768cb4dcc29309b05041da2c6c141c22942c7884f2d900967d015a7873319e61e2ded42ee9df2607e13c0e9840322b8454cd9da874d1fe6c258b810adf83cdb7512d1f5642d5d992945b5259
+Entropy.2 = 88a5ef064182cc40df5a3b6d8bb34376
+Nonce.2 = 16900a58a910730f
+Output.2 = 3e44cdfb6d20d910463ef5df4f050fa91bd5c7a6a886650729978e9bf484a4bf7f2697109bbb78445cd4257b320aba2f26223906190282a4229c8631effe42dd2b2083a7b097e36a57aa0880431440fb
+Entropy.3 = 64ea885ed16a502511881beeceac0f2e
+Nonce.3 = 25a0cac3cf54d3cb
+Output.3 = ad4cf605dad01c13cb54e0cd20e307d6941620a580d98ea653b60a8ba2dc2c11f000b52da5987030aaeaf6bf880f4ddf4fc73d6daba8751869148b72948db9a56122d9c76da9bee8b35e2dae2f6ad8f7
+Entropy.4 = 2bb7251b9c609d7778a97a69ba2c5116
+Nonce.4 = 9bb22a4476821c70
+Output.4 = 80acba419686dcbcb80137c38ac2239487561a53d0e7b0a820514caaf2705d3306477b2627d54519f18dcdb53b807194b69ef4fd728a498114f44860465ce53bb428fbe0180c7faadc5f53bd195d549c
+Entropy.5 = fc6fc4bed4600bfa12108d5b4c29e50c
+Nonce.5 = d63a38c3d75afdc1
+Output.5 = 88b2c0d43eb53965943f90819510fe9f72c8865faab25500492f21dd74b28eb68b12227445f4d57c3b1f64538c4dc9f71c9da5d06457e4f932b2a1fe1b4176b4884cfd1512d2707d538790495eccd509
+Entropy.6 = 7028dd8a558b2e8ef1b31a99c7cbd922
+Nonce.6 = 41673e6aed43790e
+Output.6 = c161310c687f23259d521ff1c8dcfb58ed5c219e2fb97708f627ca06d56eae38f6da079280accbe9b758917b8e064a2169884b1c106da6b5204baf819587ff63de1b14ff0b6e8a67e7bf074eb7c98b1f
+Entropy.7 = 5256b720d1aaa7006ed9777bf748bebf
+Nonce.7 = c396a5da5d3efb97
+Output.7 = 08cf26b11f0bd8fe27887a661a3f258ac963e83e4353a500529b89ea630b9a27bf54bc3ffb1f70a5c9d407e9ff1d708c96f52e56cf5c55521862d76357550d83f0fd529cfafeeb140d4108bf4395fc85
+Entropy.8 = fea8ce85ec3d016e529f6fa8c9fc9aa2
+Nonce.8 = eebb74bd7352eba1
+Output.8 = 51bb34c212fd748795cacd926559ea4531aa97084246d74fafdde8055c360df20c8f45907afcc34e637702810201bc441071e707baa90f28a342ee9f6291497df6a1fff88b93794785b00bb4678da9f0
+Entropy.9 = eed4b9a341c4f1b234e30160ad692ddd
+Nonce.9 = 136ee68226c4acdb
+Output.9 = cd4dd8da7b9218a7076e9cba47f3752eaba8b0ed168142c565e25bd30669a90e2e9e7b5dc7c398df147edd6f34fdd9a1b53de1538c01f4a81472bac8c0748d5a96ae3d9b3859ec8a0ab3ee9f07f57243
+Entropy.10 = f7480c8ec4a24aa42bc1b5842895262f
+Nonce.10 = 85dd29845e457646
+Output.10 = c0210b77f76c309c0963f62beda4e161bba95689b22be0517b2335ed71b5b9170cd1ae7ffb33494ca222a422dd4b0dc933fb379ca270e42bc362119fb262f4c116cc49fb91cd9dfa094f487bd8f19f5e
+Entropy.11 = d6eab3988d4dede3b15a7efe0525be38
+Nonce.11 = 3f80483a12d206ff
+Output.11 = 315380dec9c6fe0f1c777e85ebd265db19227b3b34351eec0e72cd85bd631c72ae3a22cfa973fec74c67af5bbfbe7ac60d7fa219bb91c1fa627edc9682ec30c10d5f8c1be460f6b974d53939d3762a89
+Entropy.12 = bb334043d219c0dca576c41732c170dc
+Nonce.12 = c8950b84272fc33e
+Output.12 = afd8e538ffe6b892b595da45cdffe799835a1bde1117fd17a9c7194880f1aae8fafcea80a49ea72ac8b2600430fd2c896c214762b04aa3e329812aa7a9cd19f2bf7d8b6c3df022117c4b8f13c9240e01
+Entropy.13 = 67c3f334ab77b6cb276861c01da995c6
+Nonce.13 = 0f7105d28757f1cf
+Output.13 = c8f8a34ab2b49e102cfd88675cc1609d305e0db5eb3dd9e31fe4401b3d3862d7c6c26ccedfa94c5a396e1e135f449d2cbba19b0ffb3dadbf1714c665e05cfb68901eaa67f37b5e27d95eac0e4cbf3e84
+Entropy.14 = 1c3fc8de26ddc78651c9c2e4ba874ee0
+Nonce.14 = ca6a2d3cc5495dd0
+Output.14 = d00ff8d3b8ca273cf7c3650e36c892018c0f765da45ab5b902c5accb30ffe01a99d3b86752195dc9aa1232fc852790ef51860fd114bdc78ae02acb5ab2021ec726829591d623b0b66329e641c1f915ce
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 1d4ff3bddee2a714e2a360cdeb64bb81
+Nonce.0 = 70eb607f343c614c
+AdditionalInputA.0 = 85b2444cef46740218775311718b3bc4
+AdditionalInputB.0 = 03af762e2412050770648c20535a413e
+Output.0 = 7061cebe3a4628b9ed38b87d5e693c7e7edf3e275a47f302f09dc8e1f04431fe44a386066eef4bce5b21caefd28f572f8cceeefd288514e7691f6507ab2641984763b08a24b4635f58682f4490d8acc6
+Entropy.1 = d732557a454b388415b9a9bcc97ea588
+Nonce.1 = 241255a5fd2c4e19
+AdditionalInputA.1 = 03d8f3bd8d1969b1ff66d2d648f03cfc
+AdditionalInputB.1 = b758cef73f14363647aaadce56c13cbe
+Output.1 = 0e99118cdcf7b2ac91f4f2fe09bf9dc067b3a3c1d7353afd903d7918930b4bbc45101bb9852384388b86c14032e26b9bb5831e303664836c6301119748faed7b6cd55a7f88da95ac65d385d956de4301
+Entropy.2 = f23f9cec6dc5a4460ce9c8ac25726bfe
+Nonce.2 = 160659bfe9c598b3
+AdditionalInputA.2 = a24e4bfb8a46c466bccdc832c98587d3
+AdditionalInputB.2 = 0fdd6412f7131f0f1e5d1d352d788876
+Output.2 = ebe388231f9b7808269810919c6cbabda7daebecf25d23ce931b68a51612a489ec5549783cbc321b302edfd2fc5788f2c334ed6281929bc8206d4f2717b427a3cb2b409c19c9ce3884f6d50086bba7a9
+Entropy.3 = 94188299f1039810c304cf0a549d1e70
+Nonce.3 = c1da4789a61ea63d
+AdditionalInputA.3 = 17a3d30cf18a4c0e8f6211fc27e056b5
+AdditionalInputB.3 = 3f06d3496243b3bc8c776fbcd6285d5e
+Output.3 = f01f922b83266f8b1c96121df16c39d80b55e9e7d5308fb714a6d600b26ebec69c642ba019ec163603b0010e0ee1ab1bb4a30085dde7917c7f07ffb5a844faa6de7939e58f844becb4dc4716e32eeb3f
+Entropy.4 = 89d9ecdd493901d7700b70f4fba5c817
+Nonce.4 = 93116eb0f3df7247
+AdditionalInputA.4 = 7dd119c797812c5085d7092f0167b6d7
+AdditionalInputB.4 = 29d0ea4b1b9301e192586282bbec3f03
+Output.4 = 94c588f3d4aa3f2453f0a9e63a7edf0a94ce46d12127e1e27dc166eedf21150b4cfbaf80407d2ab935374a3acb6e5f75de2e04bddce90ff225b2fcd373f4f6b4d076bdd552eaf3a96fab871fb526a4c4
+Entropy.5 = d020eb4b0478746c5804c68227b60814
+Nonce.5 = 844dd4f7ac813181
+AdditionalInputA.5 = a8d4605e66ce047b44f0a76d919ab5bf
+AdditionalInputB.5 = 06d226f23ac745ab70be56e74bf16b89
+Output.5 = 4ccea9f3451410865736c8f39de05962c0885184b4c71440a1e100d30eba1a925a6ddd1704c386bccb2f0aa1f77e5c0b2e9699a3b53bce23adb3021336a2072fce0e474a10f2cb830bf4dc233296fff0
+Entropy.6 = 87311cd6d41577311776791af27dc2ba
+Nonce.6 = eccaad0013620831
+AdditionalInputA.6 = cdf6407aad1625c62b065aed10ebcc29
+AdditionalInputB.6 = a5141fb50a2e115a2a2686fdfc5b25ed
+Output.6 = e601d837d8cf49023bcacc62f634f21bcb55550c9b8d55f15393c35204f4595ac2e3d260f20e134502bcf302ad47e4d8403688331eb6c521e899fd74692ee898dc8cbf69fa51630908198e09acff2f0d
+Entropy.7 = 04fa2f6a61d05de96dad12574b087146
+Nonce.7 = de7f002889d01f48
+AdditionalInputA.7 = d6597fc82de2ecd3380caca446d7e3d2
+AdditionalInputB.7 = 47e9a32664362d236869a12476572b43
+Output.7 = ff4a17a93948653b824349d62497b8ad72f67c5739a83e2ec0172e3d45fa5abad453107fc6b9c1ba7e4bd4e1ef463515bbccc713401df29b59163b452a6467d0a5fc74cd36b7e49a74d1544705cf4b0d
+Entropy.8 = 88ff89c822ad204be55f50929dabeefd
+Nonce.8 = c571e9d7a8a8137e
+AdditionalInputA.8 = cb80c92547056ffb54dab764078b0929
+AdditionalInputB.8 = b41b013e9df8aa75d473509f12767bd6
+Output.8 = c0164827454fd6a46e2877365cb5b192f1a3b2620d0ac4651921f826c99b7ef1e4559bf7210fdd23c278f13f8796de7c2991336bc1beb66278b93a76927a283eef4096cfb326493f7bee4d61f2906e8c
+Entropy.9 = 7082d4d2d49d5efe4c9e8fc04d3bdb42
+Nonce.9 = 2a091022cfe39827
+AdditionalInputA.9 = 1893242827d291f3ea31cee285881aea
+AdditionalInputB.9 = cea09fb6617b651665969773bc5ae2f7
+Output.9 = 6a7e1e8dca50262bb55902cbaac9ad59d4b48da16cc19b21a2263d997b907dbfc40982037da336ca28cf0a688b954c49bfd7671562a9e96a2aa38d8bf5a0cdb36fdc2fac5a665fc43ae1ce6beedef783
+Entropy.10 = eacbfb8680be1198807a5bf035b477d8
+Nonce.10 = d8618a289b4c1787
+AdditionalInputA.10 = a262ae1dc1dbcc02911966c1566a3ceb
+AdditionalInputB.10 = ed8af1b6720b9ae9b986ce20ea8de984
+Output.10 = 0c89041374d951a0f1dc8b9250e746077e385f667cfee92beba7f5e4bb212d046180359738e1a22c095f89cc978e33d9ffcd5ff496c2a45123c47a092ff4c8528d693a78e0c7bf551bc0bb7bb7b686ef
+Entropy.11 = 8013306edc8c1d6ce26f6ce87956549c
+Nonce.11 = dc4425101b785a46
+AdditionalInputA.11 = b717ce62a16e4d6d7c90c1229b9ba46e
+AdditionalInputB.11 = fca6f456fe7ebe27dcebabde41578f93
+Output.11 = 6635f4cf9b477e962efd6d2fcfc89ca0f99c964fdc179b3df576afdf4699fdbd67d420fe3729f31d91da4c75c42ae95ef0acd64be3e62e9efd3587b546d7c6af9a766698d899abb0afc2bd1526856214
+Entropy.12 = f8e7e522ad80fcd885d96ffbdedd340e
+Nonce.12 = b42c724936e6a73c
+AdditionalInputA.12 = 8d935a10ac6cb721195989cc1c2275f3
+AdditionalInputB.12 = 49c840a81aebd952abd28074f0391bc3
+Output.12 = 5dc34245a9dfe5352e8558c6b5ee8981d944c099cdd7a390287679e55d77a0855ea3977a63471c25a085b84663bcbffc646f723185d22a59cc19ae1f5a0eebcb57244bad8086af5e00c2f64b2d0f9b12
+Entropy.13 = c086baf5e2e28621e14bdcf66455f4f7
+Nonce.13 = 73b45761be4c62d5
+AdditionalInputA.13 = f99b75aabfee784ad4ead7ba30fc3339
+AdditionalInputB.13 = 7f61cc8a39a51e8c13df50933875a117
+Output.13 = 402ccd84d20d1d5feeaa9f0c0a216751d1d1633a986537e557bdfbd0125443c22c9a5acda5373e8c14d2c918c591259fb1bf35145bcb55135fe8ffb3fb21d5bbfa8dc4434fce3b3a676aa57a5f949f0c
+Entropy.14 = f4462d503ad505e0f39fc5faf4243d03
+Nonce.14 = b0a135635aa32174
+AdditionalInputA.14 = b180d77e0ef217268d2d4dc9d4a9532f
+AdditionalInputB.14 = b192957f3e98f7595768d00834eee1d9
+Output.14 = 7d4791ccae7980ad19e5d8eb8932ea8ea1756710349ab8b771558cfe471a278dcc263b737486179a4ffad12d5311d23912c3a46f07152808d288be2dfd2b315fc4f6df6418029be52daed643dd3c6110
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 5e49a74886345e9b117f9614bbe51834
+Nonce.0 = 0f426b79ea3c7495
+PersonalisationString.0 = 67d609de0b54fa9a92f9251d9726948a
+Output.0 = b63513680a45c0dffee048e0b848cf974d5f761e5ee6703ea56eaca8bd301c6c293eb294248bbb1ce4c9b38e91afb76a72497bcd7699f700688f28ccccca4c9be0dddffa0037b8545864b8ac3d783b29
+Entropy.1 = 6b1f7e4651cc692dadd3551f387ec5b2
+Nonce.1 = 98ab6ae4378c2de9
+PersonalisationString.1 = d2265947f751952cbf7b2ec548466cf7
+Output.1 = 24b722f9fcf5b86068898550886505b7b5997f6add8418e9e2d53f79f9f5f2d1ae590119b26f5aa60b4f27450fd0d355819a13f8d3db3385d9487e37f52b65e4cd77efd1c00d4a5a07660681737c685c
+Entropy.2 = 50ea9be56fdba8e1eb1a231e937494f5
+Nonce.2 = e49c8d0e27102d0b
+PersonalisationString.2 = 35e02c00f76e70db54c62d9e59695640
+Output.2 = 887e40a6535a39ecfd43232b0fa1654c10996dc2c68a90e5a5e7f4c064e253ce22bc4a0674b27e58f233bc3268381185702b64c35b9fd946461d4e630322f15c15751cd3be2e11d617cc4c374dd4cfec
+Entropy.3 = 24cb5ab8b0ef45cfd12a47689f547bce
+Nonce.3 = a27c36776e84f9b3
+PersonalisationString.3 = 12067dfc22ca9fd7a417bb7b1ce74bac
+Output.3 = fb1bc7a75bb2c665c4e16d54f6662d3ca8a2c7522e2307a026963bc8c1cb675f3003a515d6692bc778d6d06d730c1f4c2b329d0b1a97d509d810ea04e93f24e9260aa0e3ca458ff203df50b216d5d070
+Entropy.4 = 6024862593338c32104e15cb9b3e7f3c
+Nonce.4 = e69835ef6a4b9b76
+PersonalisationString.4 = 33646094468a6aeb6ffdb0ed51fa816d
+Output.4 = 910b888451135677f489a92e74386d9105c3e3ee0a237cacbfc7593513343f7191b8bf3ac024e8b08339f48d851af412f69d99ca79ec3f77ef515f1c50a3e8c76a68020eb7cae42f0b5c85f2d7867483
+Entropy.5 = 97ff32ce46d7b677ce0ced4328ac7380
+Nonce.5 = 5caaded67b7fc4b1
+PersonalisationString.5 = 52a347f8a748f6cdf00bd35c06cc9938
+Output.5 = 6780be92c063e33829dbe1967e57259e874e1257b68c124d281830ed4bf701d04196e4ca5aeb4b9de3495563e10ef74dbe89700065852081634873159bb07b79a466798bdfd3991c1dd8f44229644246
+Entropy.6 = 10c5b4a8ba0ade3525deabe099cf8a93
+Nonce.6 = 8c5d4bce78945c61
+PersonalisationString.6 = a71e5244ed23212e9a823889dec45311
+Output.6 = c39d0bf6772d31e6cbaed8784055441f26bab0e22e2e20e496182bc06603b0c625b199aa08ecfab23f525b8833e18e519a73edeb4eb95fac1597e950cf775e877ab6d5c4bdb3e68a8ef52ae4940266fd
+Entropy.7 = 6267b5221bb5d4bf9175088b2b614813
+Nonce.7 = 44d4c8b9f43a289f
+PersonalisationString.7 = 3942ee8267758df82064dd072aa4b031
+Output.7 = 67dc72ebbe5e277d382714734b6a76953ecf872b62e1715aed38540f8515e38e98a91ef6691abfd802c3ad419a3051686b503d5bf58e0bc9dc9cacd2a4972d5759eccb96337a4289a0b8af79804d0f95
+Entropy.8 = fe17ad7b3253557a3753e18e2817a6ac
+Nonce.8 = 3cfca92eb552914c
+PersonalisationString.8 = 542c51c478d007182487d5316aaaa728
+Output.8 = 4a7383a685cbeeaebfa9cb93a71b5fbd264aab74444a048d89bdd001e2d6fab33de0a2840a9f43b32ca0469e1b6d769332d1279929aa0f4aa2323689009166afa34c93c5f71f7c68801efa919b2b1831
+Entropy.9 = bb67d6bd268cf10f8ef5cd032a3e0337
+Nonce.9 = 95841be3247b1613
+PersonalisationString.9 = 2470df0fdd1bb5061e77f15fb4501b6d
+Output.9 = 4a569282a106bd2c1a7c7a268c0a9bfbc63234d923b221239bb4359aca36fbc4892da7812b8fe0be8359f766b0fd5068242873c7f3660b6694e73a3c86264d1ece9f3607f7a0b8209045561472c89c39
+Entropy.10 = 10102cac1368c5b822b4a547392d14d4
+Nonce.10 = a9597155cfbe324d
+PersonalisationString.10 = 153b8cb80f01c8f34d4b6e7a3491ae0d
+Output.10 = f2ea8f4897d24880bed508749ca4db5a14c78181020a77038113e96f1ebdcd76d57bcf94f7e88426f204ea591e44d090f269dd1c2daf529f73a5c1fd1c2c718bd3cac431111524ff875217927455a80b
+Entropy.11 = 7cdc836a14679df8bea5fd69e8622aa7
+Nonce.11 = 913462dbb0232f40
+PersonalisationString.11 = e77de726e424ddc68c24684e82909718
+Output.11 = 41adf58187f1fb944653aad1e0bf32c27d19b1843f43298509e09d99b1c4e0d4b2656bde1fb4de43b0037c528b6c433d85bbee310c289d963e38cee2e4b7dc063959286a94e5e433af610fde78666665
+Entropy.12 = 38b2bb6b2c4ffd6d32ed8e44c29152a3
+Nonce.12 = f7e32604ddee8265
+PersonalisationString.12 = 671e0039164d3f4763894ef7e0a6ae9b
+Output.12 = 13c539e208831abecb6144f51cb34c3991be24b85d460ddb869a3cc4096e3a7ba89246b57a4b66678df2329d58c32dd9996fa7611d0faeced9ec361e22dcf8466ff8e7bf44139b6e68b04a8930b2de70
+Entropy.13 = cdc703b17db7b05d14e751ae8a88ac64
+Nonce.13 = a3e4f21b083fbba9
+PersonalisationString.13 = 97acb1789f970d21d417d4754909b431
+Output.13 = 35671517954ea541f6d75a3b38da1e39014fd1a6dbcee4b5bfd723030734dc73387d771b22fda0b2a6d19980d1c7cec6ed69f6006519c1fb5aa8c2033b357a83a738771f3f5518f297f8cb6d1982684b
+Entropy.14 = d5029bcd6cdd778fd24c53edaad4cefd
+Nonce.14 = 84f7310a7ab653e6
+PersonalisationString.14 = 0fb2233c2cea27d17b6dd93bc4621285
+Output.14 = a2f373a523ac9f2524b059d0c23bcaa905e15948c7ebf71b6e82150aef562dae4003c1a8a3748cfd553d9a51a8f9450b9d569d96d897fed50eee23978e49b364c64db63fac9dc0fe9e8b58836aa04a74
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ecdf8b8636add7acec544cd3ed61449d
+Nonce.0 = fd08166fb3edaa55
+PersonalisationString.0 = c6cfae798639034096d373fb05e7ea66
+AdditionalInputA.0 = 3ced5b730332278cdffe927b09fa8386
+AdditionalInputB.0 = 5f957a87c8945af77daccf356cf1183f
+Output.0 = 2ff3e68a48fdb0a5384287a0cc4e6efb6568309ddd9411838c5fb61cbf916cc881b1cf0461fd7631d313225fa42c70d529b59319767cb50f794f4c790da2e188fc252c16ee0ff72fd35d2392cda0163a
+Entropy.1 = f08fc58f52ea05607dac4fab29c03faa
+Nonce.1 = f81b8500f163bc87
+PersonalisationString.1 = 2019786852dde5df70af52ef4ae45adb
+AdditionalInputA.1 = ff0b7bf79fe5215f8cd77b53425e8a73
+AdditionalInputB.1 = ae98464126b1d6fcb005b9c302653a00
+Output.1 = 3ad0f37b5bb09fae80e7aaca91b92a37c04a177c5ff35593812567193c7615f65db70bf48d4dcb067c80532df8b91db8ceb7f956acc69c499ddfed76ca28e0612936975a3db82877f531a496740b4463
+Entropy.2 = 55a0511c439c7d2bf57f24e72631bac0
+Nonce.2 = a1902df77b611e46
+PersonalisationString.2 = b5ff703e5ee561ade96d6ec9cb852399
+AdditionalInputA.2 = 2c46d91c9174927f3910cc2a6bf7b136
+AdditionalInputB.2 = c342c914786b86985d06f97eca1b09eb
+Output.2 = 995acb5a585073cac82d5397c2dc6f32864a4a55284f57acd0aa008fcdfc533859a34fdca12b5eadf0ebb88692045521a4b003be7d382e9c2df8ef5cd6f7b86c75f6bda74c99c07d2bbf8255eb018953
+Entropy.3 = f0e444a5c5bccd92b7a4447d0b7a8f33
+Nonce.3 = 6ad11519797af228
+PersonalisationString.3 = 31ec61272a7de660fbe54b3d813ab02a
+AdditionalInputA.3 = 84f648d11fdd386dbb9f356d5ff6396d
+AdditionalInputB.3 = 7bac281eecd8ea9fc440520fcfac3d6c
+Output.3 = 21f5863c744843eae2582e2496e8187d2a1283553f4ec2af652af79fcdd46eeb559b82e0b8aa8e1ca482d20d7875473a90417d1a1331f7ec2ae61c7e51369c48833bfc3c42c48acc84c92bb49fcd9c6f
+Entropy.4 = c9bcfae1f6183ef17bd28430ddf76f7b
+Nonce.4 = c4c17b0222afce01
+PersonalisationString.4 = 623a8f3be2ab7af2a27a1731e6d78c29
+AdditionalInputA.4 = b9ca73212f96d6530e276f773cd9ddc4
+AdditionalInputB.4 = 1fa9dbcf819c2000556786452999d3f0
+Output.4 = ef2483673e7fa559e948f68c7ee44010f915d2ab416f62caba7ea7032091ad5ac52164039ad95517202e3451007c39f73b457cbac320cc1f23cdd247301f02163366de26b32932606d346057fe20a917
+Entropy.5 = 581594493c98a498afd58188a8dccce7
+Nonce.5 = ff37dbee91e5833a
+PersonalisationString.5 = 105f07329f1be889302ce0ab97e2359f
+AdditionalInputA.5 = fe21bb1d9100ea6e5c7f86019ce933a6
+AdditionalInputB.5 = a9d96cbd83d7d2252da3db8b58747396
+Output.5 = 008c173739751c8a06e4ddd0dafd5b39feb7942e24a0331b4dbfe598dff251636f49d92017e67badefc308a16f319803a1e4567cb55f92f6bb28d3b7a50f289f6c2a46b548821b6891fab108a3ca3109
+Entropy.6 = 50173e83a2a00f28ab36a062e11279c6
+Nonce.6 = 37a896dc2ce1ea66
+PersonalisationString.6 = 0cef11cf404712fc16d3ceef337082cd
+AdditionalInputA.6 = 6b385190658328bdc12bde2ca1a58669
+AdditionalInputB.6 = 67e68c79b41343075aabc236ad81d13e
+Output.6 = 98d4ac286364d8b0065d85884a92abbec558accd791c1508899f99da1d810833e1de6db45a638996fb0f4b74628fefd7544c5d032fcd459509092543c4986f4b47ee9c3aba4ccca7d146d9407c13301b
+Entropy.7 = 44b537973561a17adf0704ccfd896b8b
+Nonce.7 = 12118c2a2a398be3
+PersonalisationString.7 = 1964328cc10a307a3a841a916ef8a14b
+AdditionalInputA.7 = 814873646eaf96fb3fb8b41fda381c79
+AdditionalInputB.7 = 5b81c9a952f49b753890889c9c41917f
+Output.7 = 58ddf616ac8d74e9e476e2232d2a4f1d20d3c1fe805fc9ddfc86b69189b505797e9c376221e9f4754fd18e45c27a291747513b6867565048d47ac9180ee4aa0695a2309bde567578d4c28cc2fd2a1db8
+Entropy.8 = f43834731514c5f2c376092325d2775a
+Nonce.8 = dec7fa004bf80241
+PersonalisationString.8 = 79c27089f8b37eea234ae0520a9132bc
+AdditionalInputA.8 = 5b6ee749feba913358c399f1f8892f75
+AdditionalInputB.8 = 03c9f312da912ac95336867614978cb1
+Output.8 = 4d02077441e5d123e279ea243aa8b38dea676280d30400dac7eaaebd0affd2b7380046e8db3b0ce68f5f2ab4f90cf3b476039e4063911e3e2e7046ee64175d919d729edacffe30cae6237948546ae4a8
+Entropy.9 = 024254d5e87006bf6950699b2d4890a8
+Nonce.9 = 06bd45e54f2b997f
+PersonalisationString.9 = 05d97e092abf630c1caee2efd85cf0c5
+AdditionalInputA.9 = d16a5458f1adaf690b45c828904c2b6a
+AdditionalInputB.9 = ce4976405ef50a48b89b6f43985220f0
+Output.9 = 4eacd1c4c49b44e6116e027fe47eebb840f1602782449b57b111ed937c763f7a782ae1350140614df4ac6c53e9aca11897220d4c297df616c4825dc58f157866d0caf6e56886e5707f69d0e9000f1091
+Entropy.10 = 8c5454259ca8aef362e8efa35c9f3b11
+Nonce.10 = 728a4ee0d2128440
+PersonalisationString.10 = 2667a9d636da6351e40948668673f4c1
+AdditionalInputA.10 = 203012453323970b3b91444d6c7102ca
+AdditionalInputB.10 = 4efadb9ae54fbba80cf2efb590d810ab
+Output.10 = 6f2df271c1c1949e9fe6b7ecab9efe02ee816fa3b09e93bdbf7ff4a8a19b98f4bf91c5aa483ccadd69347c5c582ca7e24b533d0bc40df5b831b9ef0b211317c6574f7943e713ba262649e7561e6c6386
+Entropy.11 = 4010ede8d2e7d59cf74716df74616054
+Nonce.11 = ac406a56911da77e
+PersonalisationString.11 = 0af27561cce5f5f1550b7075a6342ead
+AdditionalInputA.11 = 145981d2453db5b43ab3624865099307
+AdditionalInputB.11 = f9fb41d07ef241b1aaad338698413116
+Output.11 = 22689fc95dc99c3204c9c78470c6db6817ce7e0f868ba59f787fa6d599d592e1b171bea843802931902c537ecd2df73c3dfd0e73435d702284a8da1e82d15c79c06d421c99bc2e309f237249dad8065a
+Entropy.12 = 0bfd37c2065b641164f4336580653ab1
+Nonce.12 = 9450667d44ecf118
+PersonalisationString.12 = 94ed9615c421287d3ea4df7fa35b53f7
+AdditionalInputA.12 = d7a3b4ade238820a17ac17dd0605b85c
+AdditionalInputB.12 = 92b78f69065b1378c6995d5108361c21
+Output.12 = e78e815006a80ad1ff8b30fa0da3fba6a44c1dacf37ccec85f930379882589a327b041bb794238356b791492f2ccf13c3d266984dcfd49bb1957bf3fd247aae6815094115ad195056289f1e6d1566bf9
+Entropy.13 = 086a5ed9fb52ec937c8d811a6d628ed6
+Nonce.13 = da42ea961c3122f4
+PersonalisationString.13 = 24068772d8c4e0448dd4709cd65125dc
+AdditionalInputA.13 = 5da50f9d3b7bd02faf4a6dfc909f36ab
+AdditionalInputB.13 = 7fb0214a9b6646c07283091d41cbd730
+Output.13 = 47b6bcf1cc3e206096cff1d4def748aaa803c0910602dba2bdd19afaf1d2a9c49e9e464fb36864d67802caaa470685bcecc229bb0402b99122005cdf28acdab4bdef9e1d23f97d6da6c88ddecf037c70
+Entropy.14 = 3f87d9e1951d8d9df7733a6cf1b3471a
+Nonce.14 = 5dfe594ad6c10325
+PersonalisationString.14 = 673abaf005b0ca394f8de8d040aa4728
+AdditionalInputA.14 = c9a1481cd25c537ba57750d594afd25f
+AdditionalInputB.14 = 51e29804f9d079f3074ec398320b2a70
+Output.14 = cb3cd4510de88f8081d8989c2679f76387b7d2cda286b75d659a3ab7c3b2ac77ea00366e7531c1c9f4f8e60c845c5d2a5e05fc999621d011deac3f28cb447a37c2ee815f7f5be3a571d153475d6497a3
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a76e77a969ab92645181f0157802523746c34bf321867641
+Nonce.0 = 051ed6ba39368033adc93d4e
+Output.0 = 8925987db5566e60520f09bdddab488292bed92cd385e5b6fc223e1919640b4e34e34575033e56c0a8f608be21d3d221c67d39abec98d81312f3a2653d55ffbf44c337c82bed314c211be23ec394399ba351c4687dce649e7c2a1ba7b0b5dab125671b1bcf9008da65cad612d95ddc92
+Entropy.1 = 65cdaa5ab147d0c79fdd02b24fc94d0e427f59ef9a31f447
+Nonce.1 = 458c6befe0c2cde5a58c6b7d
+Output.1 = 0d164682b5bb552a53a2a942373639d98576450ca632faebc15060691a4219467c5aa106034cd19a214a0a4f31d402e68c4c565f49b33b680d522ef25f541e8202be779730376fdcf5b7b58fd6ac959204a88f91008651d2c02ada82505f914d4d9b9aea7967784e5320e185e1248270
+Entropy.2 = 650996f1477112af7604386be5ace78232904315d99d87d7
+Nonce.2 = 2a06709d331a6f930b447cf5
+Output.2 = d3341d7767cfd95640a107b3abaed7b4e1855b348e3ae5bcc53a0b0d49d4b4976837ec8f376f38327135578eca7ee583215bd5c79ebf499816f79afcc402ff1e9ffc4ad0f896761c9cff75050bf84baa194c355763b16b5d2648d480a2b48f22662685de39c7cee90aa0b6edf8062e42
+Entropy.3 = 898640ce467201a53e7731bdfb572977f7eb3e49050bc1e3
+Nonce.3 = 67ca74bf0a27376d339d09f4
+Output.3 = 4f5eea927023b4abab5d4d9944e84ca001ee081cbc21d4080e1534ee6d1d8a6f60361029ffa983bcc79b5d65d4aaaaaf98983de13ddde39a739f9d95878fb31f57f96184e5f2f3adf654a468c616237fcbc6b2c194e247178cb90294f631c449a01f1fe09c02587c460305be9fc71b5a
+Entropy.4 = fe405dd73956bf6ec875515eebd8c5ecd60553643da75091
+Nonce.4 = 4c83dfc93611d57390af7324
+Output.4 = d8ae0eb81913a190c439f8ffa56c06155a73f84b20608b2b2e9eab3061202cebad18ab8b3eba81672152c1c02ef573cd6e8623c392facb6a857425c6795cd7999c1e7f56f3fa9accca018076e0bfc106d075df98f5fb66f28933215e9276777dfc479e71a8d506a66197918d9b0f7a8f
+Entropy.5 = b06892f6f455afddc8eb60aae35b35a64f63b2aa85a2dae4
+Nonce.5 = ef489266f7bc354f72d68b71
+Output.5 = fc10c03fc37d3bd5fba6591a97f6354a9ed8ba2b6806744432851f43a3ce6418e39ccb417b8539e349acea588e2abe5da06147c9825c6e50a31f8589a57ca3bfb10f0da9c8e89fe2e372b5af1cf96e0fbeec5d99228770c41a76e587da7d8764d5f235f5d1d6188d84ae61c52c2164fb
+Entropy.6 = 9174e174e9e031f62b2e19ae5c0bef22eed7d5598e6e7350
+Nonce.6 = 4759a2c15b05c2473a721d26
+Output.6 = 1962f2d473b31a2576dbd78022f4eeb974641fa2e9cb582f03ab741929f51f0f4663129e68ddc242e1c2ceafacec3dccb97e09527aff46b948f0abcea1451699dc3ae4d3fb5e04c84337e17b504af2fb5f1aa6ec0033ddf138a188ee162c497526563a67da8015275d89f0e1e902b2ef
+Entropy.7 = eb1d45ba0d8951b7b1d7ce922b7d1f6e94da8b821940126c
+Nonce.7 = 9da5b0b4382425930743a051
+Output.7 = 306b1f733e6f69b6f26b7baa5441af4967a5cad8faad18029440aa989aef6024dbf3ba02dfc2c694dad6496ff760d72ae6914a4dcd5e3a443f4bcb14bf2b64986f35c32449f15e3084d46fadfa2ae213da6b26f787cef89b6a23084a929608a9f6acd8315808c29f8ae435a40202a012
+Entropy.8 = 78cdc1567caf2ff529ef8e3475c0fbb09a48b687a544f739
+Nonce.8 = 9f503948621f29686fb15216
+Output.8 = 2367067d8ec189b0819eda34602768a0698b4b545c7d5214fad58c9787b89809b97f3af5f9349907d2954f8c0dccbdbe63cc019bde3a6fae10497ae57f33e91ed55b6fc4a83fe8a2463552796d5120da8066f7285a8388958817b1218e006d7fc617f453ad0f9217966a0731ba99f093
+Entropy.9 = 25f9ee24ee25ad3d29a974f8f552b178cb292b847a6be806
+Nonce.9 = 94213a6c0b33e25e29fd3ecc
+Output.9 = 32fe251a619d164c217365b12a313a942b6a9c3df007751a5fa9f356412d1142c785c292e3dc9d0b1d77e080892e5d39b91c58fd142458c71182061920a0721db453a32fe7ffc8b2c20bf11894fa37d8f0e9463edd43a97f65362295119be03d5e06f617fdff6accaab8c4da72ac8f81
+Entropy.10 = 0b644221788c266aae00a3b63a87f32ca96a6c32b116cd37
+Nonce.10 = caa4f75ff5d7e56be3b4e20f
+Output.10 = dc9245da77502cadd1a8ac4d1cf6a199c8e529deda10c87ab6c69ceea6fdef36d45f4d036021b93fe5b342c52fe1e71d81e617bebc58804af3109bab93dbb2e5c546e108bd0891710128b5e8e4a4f01df2003d038fec8cef426fad7f72dd5e091b4850e9bf4932d60deacb6e9ea3c5e6
+Entropy.11 = a6677badff70966a3cd2febaad7de7aa5849ba763789b20d
+Nonce.11 = 0a39b6c569261b826cdb15e8
+Output.11 = e04838c970f5d7208a2a7310da893d65391666a5dc62d9ede71fc30816cfc3e8064ac59cc9aaf30283356078c812676ca20beb044a6d78db6c5ef9718a88559607f225002452c01459944433013cfffea84d6fe404fbbbc2d66bb50a2fa01d8a5d6e4ea9b402dc5256752461bf6fcb7f
+Entropy.12 = 2301d8c053312db04882f4284cf8b47966c1c9b8c49de847
+Nonce.12 = d0c11f14c5f70ce19346562b
+Output.12 = b46246526b28f3ad7f6d8732ca3bfc40f005d97a519640a4ce728486d8bf830d661be5a97b11113e89096d9bf15cbef73ec28ac13e3fbeadc9bca500918bbe92ea23e131cc622dbffe2272db16ec5d4ca30e9bd986d1709ae22d10180514bcd11bd6218ea1fbaba101444945a17a4c4b
+Entropy.13 = 78644ea1b0c4c55c4addeb476fc34471ea2c4393697aa4f1
+Nonce.13 = 70726010c443b8e1c4a6b3ea
+Output.13 = ef1b41bd03ee8460d55759db65a4c97758f48e3a09127be04c7ed08bbee5fa5cf119929df42c187e2a347a8df99c502b693a7ae41946f4918d84686880ae29d6d8fbbc4fccc9e295876a249cfa59effd331994e84717b4c76637df36beb960761880daab3d43376341439af2ce8e33cc
+Entropy.14 = 71acb71235e88e3aa6d8bbf27ccef8ef28043ebe8663f7bc
+Nonce.14 = f49cb642b3d915cf03b90e65
+Output.14 = 144aeb56a11cb648b5ec7d40c2816e368426690db55b559f5633f856b79efe5f784944144756825b8fd7bf98beb758efe2ac1f650d54fc436a4bcd7dfaf3a66c192a7629eea8a357eef24b117a6e7d578797980eaefcf9a961452c4c1315119ca960ad08764fe76e2462ae1a191baeca
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = c5c89c26ac4ca8b1106ba90a8ef4d6d687dfd88743caa5fb
+Nonce.0 = afa4745d9c1f8371120b10c8
+AdditionalInputA.0 = d3483ae5f9ed97efd3f852e4a6f20f25c947a03f39a4b75c
+AdditionalInputB.0 = 2cd523c5958cdf403caa61abe5c4739cdb9d40152f0e769a
+Output.0 = 1fef4e6abc2778d1c3e3ce00fdb5eae1ebebdd5cff0a7087644c8565d1e8b876b2c05264ca81498468851fc7b9e5a2163a06f377d2ed754c095adc59dc015a77edd69e4eecbe48d9dc127eedfff5cc73ae38127ae3a518fe7fa5abd1a9c53eeaf144420873341e2efa3d81493c69b04e
+Entropy.1 = 6860e44bf582db9818ffbe4c699d4218965c29f463d7a02f
+Nonce.1 = e1f36c8442b0a5d103def7a2
+AdditionalInputA.1 = e9f598357109e2a532dc980388b8a5991256166d67c3bc01
+AdditionalInputB.1 = 58ebbf7402be041724701e5c0132abe604c11a62a9de1d2f
+Output.1 = 52fad34b27113c146595a6740f505bc2d3edf6618975cb9c4a5155788eaf08b96d232610d9b4ee06264fd92f319df5a52b8f9e31b016a6c21d27d31d9d42bbb7588a7142f26ece3ddf211c8cf4530947adee302aa71c0d7fe9060c1b25f1c1f2e053598a7fb72c4db55fb1b02352d60a
+Entropy.2 = 27b9f78ae07821f2b5625c8fc3a03ceec4fc8062be860c2d
+Nonce.2 = b20403dd88a8751dcad56158
+AdditionalInputA.2 = 1b6c848fce706abd73612dd3fd421c1c7ce9f4c2d0ecc670
+AdditionalInputB.2 = 14a43645c1b6ae394f795af6ca2e9084e7e707f3f2cedd7a
+Output.2 = 33c592017af545b3a9cf3419ce1c604e9c7c687ebf6418fbef47ec96e61f1951068eec9b60005d24574313f04ffc16c30872ec83e41e248e3d5c6951930d6a88b8931d5502d1142ce50676b3adf48453d1a008189658db8511d19a06ac97b4d5cfac19b54e8e6b899d501715f401ef85
+Entropy.3 = 8d7cf5c2e360ef755c1e9f5b7a44a1e29f09cee7ca44e159
+Nonce.3 = 25ffe9a47b2d55fd7750b356
+AdditionalInputA.3 = 0e691c9a435939c615f0686eae88e090ba5c4b3f5e6e00c0
+AdditionalInputB.3 = 1e3a452295617e5a9e6f78256d2781feeb3812753b4aad9a
+Output.3 = a307569d8adf3f7e6ee4567a5b2bd338badb9234e7b27c92429ffa75e4c56c0529fdc6c15df5d47c46e3d2eeadcf1b9e93a5dd6cde99a82f04b0d97f7a3bfd05c0e1d8370987222310ab18c980ce48b2679361c3d9011dd355a9b06337c054ee37913d5f4dd30d1fc942cd733a0fa5f8
+Entropy.4 = 1a0d2c734918c539c1b306a464eb6b54f92e958e8636032a
+Nonce.4 = ec23ba8ae817bec48384461f
+AdditionalInputA.4 = b8ad9e613a891fd0db89571fddda77827382e406cd3cdf7e
+AdditionalInputB.4 = 1e172a708aa4ffa3618ff0d7b1f9ba341f4811507851dfb4
+Output.4 = 674df1f3095d6c87bc54dd9b2aaa2c786bd50e4ddc02493745d820dad8552131fb3e389e99b0709478b65d4268f2a3b468a8447dc572a6ee024be6be9be9d428c12cc92894d15dd1c959d6222dc9ec30478c7a0b57f5bd8bd53868b98d7674738b54cf74100ae215693babb6db3b3890
+Entropy.5 = 95a30a0ca779a4038ea920cccfa4cdd814ca17d560d53a75
+Nonce.5 = cf170f4712994f9bcb2efb74
+AdditionalInputA.5 = 1da6c8726bbfa3c8bee6dcff6f76f2d55d60527c4f0db26b
+AdditionalInputB.5 = 595ebd903a596a1f12175080185bd94c2336eb8dd29a387d
+Output.5 = 317c19cf4a45b8cf3f645da084ada54d1b1f81379152424fddad22a6dc9bd22841e0c4c5a36bfb7879eafbd1a939121905a938ae034c7fc01afb56607e35f895f46f13e91ce4e8e75b6a87a1e5544e18eb194fd6754b06885ac05e332a05ed436e889965e405e0f2069b04b40ea0f635
+Entropy.6 = 8af8930562510231a592a72587fa6ad7c234e13304696590
+Nonce.6 = 7642fbc785c0b86cba844f0f
+AdditionalInputA.6 = 9ee7b221064966582dc836437b82386f5204a302a4179079
+AdditionalInputB.6 = 473d917f5b66f0f6e3fb4670ba08c2cbd2ea765b46b10838
+Output.6 = 5c2fc9cc7148dbe40a692b3636778eb80188949d198bba3e8355386b78b54bfb963f5f2d9202988da20ccbf336a7c737a66c90149b9e8e306477151c4d912f7c61e872de0d0e47701cbe765864de536d599946b8bd65e4d89d4e61deb53de9974fbbe634501800feea100fea573e2e50
+Entropy.7 = 2b9554ecf94c7d647a4e117f43326cab54466eba56a09a52
+Nonce.7 = 741b2445057c491935c067d2
+AdditionalInputA.7 = 0144be6978dba85aa645d793c1881dc2deb1bd210811ec9e
+AdditionalInputB.7 = 1cd265f3812568274b643954c70923a76dfcc9f123360111
+Output.7 = f7459b0c23966dc1a53e0c6406c9e78ebe728e3484224cd88b6b2ea554522e75eb4a1c8a3fdc66561426464f50b8d0ff95b266677d91776b344a820eb4fd7d554678300558011a7cd85d22e92dc8ec2c2fa15c6330ba157c3e71728304447c1ad4d64f3da4fbf26d92e1e7c58a1b289c
+Entropy.8 = 335ede8603fcde78ea9869da2dbcab4a6e72f1b53439f308
+Nonce.8 = 5d06b856e627411a9ce1c297
+AdditionalInputA.8 = ededc73fe268935c10832c463549f8204a29cf0fe00a4d87
+AdditionalInputB.8 = ef1b8a80dd49d2c263999ddc0d5a1d9205c1b1c66239fd80
+Output.8 = 05bfe97c398b1e33ee1c547c0edb5b654b7060b76604195440d06dd2f614a398c6c43f1803893c4c8888bedecdf998367cf992301a25f24c263f5d36bbfc6fe8b839cad293b3617c1d2c60a814bda0359e3f717fa80fc7324af8827d438c88642754b39b10d18cf5bf42f11177a0bc6b
+Entropy.9 = 9b0275d861117553ecd3c4d7cfe762f88df22c4c4190dac8
+Nonce.9 = e0be5872818e2dd765261d58
+AdditionalInputA.9 = cfc0b07082d514425b17ce3cb334ec62bc1b3be0be58ca4b
+AdditionalInputB.9 = d3c70ab5ff7a364a9e6dc75132ac67e0d373fa2df301afb5
+Output.9 = 09fb41bcceb016e754795e1cce582f0cae91d7bb50245975eb75274819e1e4dcdfbc5e2f13fd26b9a9f9e945cd807ffec4e275681ea7bd33eae13efd8a01edbe02562e77b44b6312f416c3dd0be64f2bae0ba4b9bb36fc3a44841d21d8b3571c0ef644d88cf3cc3c851b256a15f4d716
+Entropy.10 = 1981c3f9ca58fd10e8377a8d0eb3cf02102aab6f7a033af3
+Nonce.10 = 135533d9fd850e29ecb8dc9b
+AdditionalInputA.10 = f9978ba41df22894ad5f3849c1bdf21f7bbc0128c782e79b
+AdditionalInputB.10 = b4d57de5e18d393273ee9f3ef9736599c6d639f437239219
+Output.10 = fee23db2fcc71624fb39f573e33a1490efc7230c27e9278188251634f9c045bcb26e79ece6a173491475ae44a957c4269570f5469234ca8b6873cc973c8d97178c58cec658a352bad0d4c6001cae5664258db59ad76eb6304d166267eafb46f4dd536a914fa6d1ac58317e7c557d4653
+Entropy.11 = c10d4e521350f7cd1853576d03c4bece3e58c8c740859e4e
+Nonce.11 = 16979499ec1365fc073736a3
+AdditionalInputA.11 = 78b245520153baacc66846e7a83a2a925f892d4c2ee63c0f
+AdditionalInputB.11 = c8ca7a33de5991d44d7ef7da2d3368cc2cdb93895c394d41
+Output.11 = f92c15f5833800b28dba2d134d4dcfc41abf72f5a700469551e8ccb83bdb0772d14d6b26ba6978169e3ddbe5f214d57930dfcad719bf10d306749246d2624bedd4a18d327b8ae6bee67cf0bfb5f649824bbd0440f042146b95a83e5845ced69a55ba055d5dfc7183c3bb28d61312d274
+Entropy.12 = 7608b5617785995a1f7144ee5229e4f9c138e418bcc3b5e0
+Nonce.12 = 61a422e8cf875f58650e996d
+AdditionalInputA.12 = 961c2d33039e60a2871e1f5b82097f6b1cb03836dba5f440
+AdditionalInputB.12 = b18cb52d3858ac5bf59f216a28c0ad49f3dc88c67b5870e0
+Output.12 = 4b0313ae873ce5ebf08aec160416492e4c4c797a5017061ea42aefa0685ab19b74a7af11f019b9fb63072b797f7ea3354efd32c4abd1e866405a319ed2fa13fc81019d61326e70e503141b9c77b4879a45e9f36f101dbfff4359147282ef814888fee81640def25f551cee41d12609aa
+Entropy.13 = fef7a43fea2ff1a0f624086985e535778d7a73dbc47bc23e
+Nonce.13 = 9da92edd5d2f273cdbbc0251
+AdditionalInputA.13 = 836731a57497a69e31f8db4f729774ad65f31d968dbc55a8
+AdditionalInputB.13 = bcca96d808ba98bb50e90afe58fc88e95dc14c3e90c56004
+Output.13 = 4f2c64ecd146689064fbf4fcffce2a2ab3910e72ec4faec277f7b9e9ed510381312b01f21650e175ebe9c45c11e977276f13be015243a0cd16a191abbac6462ba96e4e4a1120b28083da933419e8c8f03099906eb1ee012ae291104c6530f51b5e32e6631cab8ef5aad68c0045255ba9
+Entropy.14 = 00197c70b2f0d3e98e4b387ec42a65c4106a1689ab5de611
+Nonce.14 = 01ee76f4b5e530e7efeaf964
+AdditionalInputA.14 = 03015311cddd0961ec7a74cb84d835c058a69b964f18a1c1
+AdditionalInputB.14 = 5e0d99e0e7c57769a43ea771c467fb5e2df6d06dae035fd6
+Output.14 = 72e8ca7666e440ac6a84ab6f7be7e00a536d77315b119b49e5544bf3ead564bd06740f09f6e20564542e0d597ac15a43b5fb5a0239a3362bc3a9efe1ce358ddd9d4f30b72e12ed9d78340c66b194beb4b12e973213931b9cfd0ccbdf540d2c36ce074e2beac7a4ddac59e06e4c7178d3
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = f6e68bb0585c84d7b9f17579ad9b9a8aa2666abf4e8b44a3
+Nonce.0 = a43311d57842ef096b66fa5e
+PersonalisationString.0 = 2f507e12d68a880fa70d6e5e54391538173297814e06d7fd
+Output.0 = 10c2f93ca99a8e8ecf225400c804a7b368d93cee3bfa6f445920a6a912d268d691f1788baf013fb168501ca156b571ba047d8d029dc1c1ee07fca50af699c5bc2f790acf278041518141e7dc9164c3e571b265fb8954261d92dbf20ae02fc2b780c018b6b54b4320f2b89d343307fbb2
+Entropy.1 = 85c2a5ca453e477b5ced164a6cdfc7dff9c2fc349dbba685
+Nonce.1 = e4a5e79066e121b8e7bd5a8f
+PersonalisationString.1 = 68e0dfc8145a32d83cd41d76fc19901d0cdc7543755586a7
+Output.1 = fbd2ff764ba0214371e8e0604584368ab0e5e7887ea456965b62986f41d7cd2a969035b5d282bd59ee013b730c01ba419f5e553407041106df164187febe1e42e128a298a572f812f5cd5c67c3095b31a2b86c0f64c7b04823ca4ddd5e775e5bc1132de636d4f5ebbf319ff81a815fe5
+Entropy.2 = e7f28c80e8259b43f19ca54a01704a35f8498ef4f2634289
+Nonce.2 = 33ef9a168c0131db69e95108
+PersonalisationString.2 = 60593dbc4e031268eb06bcebe83b9c04b8c5fca69e787eab
+Output.2 = dde91517435ec8a37bb5bdf117ecebb41ad013830c04977c93ab0bb58ed069480fd75ec3957395f0d6f3ec4f524a24f66940ca3b43d7e91272803a56cfcae22b2a345765573f861d14840cc35f1e6b911a4b831caeaa4a9bba798c82a803dee10de853e6532463b359d07f8cc8ae2770
+Entropy.3 = 1593a81d8c7c2fd04930b7549e1ce0b0aad740d686e7b972
+Nonce.3 = 304144f81754fb0a9924b5c6
+PersonalisationString.3 = 07b6ad022234b1c7647724df1646fd0f037fc60be15fc24e
+Output.3 = ea8071c8d8e32db997cab20ecf42ce4ea102cea5979a2569f6d60ea8b0cb1e252be78f6c78007e4a0e42ee7c8f91e12e1e394b8bf94de08b8fe6dd77ee8e7bf932c8d7c91a879d34c635c8b4ccd3b564bdb01bbd79f9648a0de72e732ac33fa04a6b283b4cab36780906bdcd208c8ea9
+Entropy.4 = 33b9aec94a326b9de5f111418d2a30900d2a9d1ca60ca10c
+Nonce.4 = ee3213ee1270075b54dda450
+PersonalisationString.4 = cb55e3ed03539bfe2b60f06a5d9b8a0dfc252632d94f0498
+Output.4 = 910dec9bef9cd59c4eaab2e8a4e1f3ff796c230836de21dee4d7fcacb733c516149ae07b6908998139a454eac06899910fe80369cfaa397b6283d9a1e1dacda11dd6dbd819bf9937f1d675b1921583fd37438becaeb66801576e462f4cc14458d54801b63e3e07e1d454a321909e8e79
+Entropy.5 = ccea05506f38f222efeb575b55b1427f24462ce893503b85
+Nonce.5 = 8f259640b14a0740b4261701
+PersonalisationString.5 = c1b85c8c907abc597fd0193deaa93d0d128e6dadf1547392
+Output.5 = 7b75c82104d086490eec75aea3a548e2f09e72e87262842f976373ca3643d028bd0d39711e783605d65a0a75a126efb67ddc18a57c704c16c6193b168fd89c99a5653b033da90730920454d5549e2e5bd76c0cd8822f101a50996e91fe9d3efee8d7daaed50634936ef9d5825a4d08ca
+Entropy.6 = 10aca922f6daf58bfe2aaa25ccc266cce780d9316fc514e3
+Nonce.6 = abfd6e8fb7db495635aa12be
+PersonalisationString.6 = b64e51f0f2b0a2e36a68f0235621e9b1f44ad46003c911fb
+Output.6 = a2c002c29f2aaf575d16a0892a0c05b1065af44104876d571cdf7b1193dba7c810d216d4f1be1444a56f2137e08dca99e765df4df9c5997735b60845627d290f24110c260a0b3d26d813acbf196438dca33e8af84223e6e37b562b368ee0e88482619e534269b71972a88bc74aca7a04
+Entropy.7 = 43acd2920393eafeecf55f8b9fdb2ca607e677bd7a5966cf
+Nonce.7 = 02d25c09c3f44fddba39e18c
+PersonalisationString.7 = f3aa9e7883ac3a29c8b0b585340ac7e94223fa549c3e3257
+Output.7 = 69f44057771a92b0019f7f6e5d94d226d9cb144f084b5d3304e9cfe5c98cebe2655f0765cfce9d1cb00e3dc29c7f25731d9da33e9537fd58a8f310446d03fe2ebaf2db71a6fc96dd30276afd5b6627c3912e9b82dfaab899c83785bcbab0a24c6534991ef0dff4d076cd03b17c83c05f
+Entropy.8 = 4ed7fcc29708b42d67d68c63ac8b25a90ca779dbf0c7a68c
+Nonce.8 = ee8e62054d236ca19b20eb25
+PersonalisationString.8 = 271c11420f431cf629c82b6fbe67a7746c73ede5447611e1
+Output.8 = c4801020b3568c78db7a56eaa21d8c0af43cca2aa576d04e7d91073e5ec4fb26bc915101fd2e88727af43d9217ed2aaa84a400cadb94ace9d80989b9cd323e5923abe46dbbc37e59be9c88079c0bd79c950638a212f78a2b15e0e60b746628ac9454375de26cf5f4f6dd5f13ef2b0d4b
+Entropy.9 = fe355ae98956ecdc547fd874c44d10f6446640abe51b7f7d
+Nonce.9 = fd94dbbb09eb0174b9803b86
+PersonalisationString.9 = 4ed22949f8454d2de680aca77317bfd60e7b4cabcc6d7a1a
+Output.9 = 50a093814d2708355174ac293ff6bb3ff49db74178b0cd9e8b96185fed816f174a86a8fddfe7a9430876783c652f8d9bd1fdb39b6150a25a4e5752002784d09f40982acf67fc27e98503138f9bdd76740c8111198d6279138f04bd8de187113f5b72bc09164b8cdecca60bc002d73324
+Entropy.10 = 2f51374b44ec63290afb879b82b9601903213ddf84856eb9
+Nonce.10 = b58be25c11bb61f4beda20c2
+PersonalisationString.10 = 29e20d31c37eae481532c04bfb635fc370702c37bce02749
+Output.10 = 8d962a05b45b9640eb8c3fec53c42356576f226f1105a99f440377cfdd393d9ad603c5882311a8f4433dde920580418b6de917b1def9ef0340d5495ff1df4cef4d32193d0f39f65f79790ebbe122f63531354c0e765cbac7ce5e185e73bdcd43a2dae95adb5ac10b34bcee909ae504d4
+Entropy.11 = e9ce04369bb6aa98e676ecc7adbb291f1d88062b0632a977
+Nonce.11 = 40590644da6089f1ddd0900f
+PersonalisationString.11 = 47eb87b07bc34ad3094a8ac55bd2f5543f6d83d864924dfa
+Output.11 = d9865e8edc0d19dc4c68305c85795fdda2e78342b29673dc4341f901569509d9fc9f9579feadb5576cb050e18cb617845049004007186f8d5e6e9f19655e15fd218f5c346055ea668e94736b1fb4a1f759dbeb4817a1c1cde4a6606edb929ed57179284da743f08836369743babf4d16
+Entropy.12 = b3b7f12ec69d825d366a473be79d49d52e33e1e578c85db5
+Nonce.12 = e9ac6bedb660c46667d70ebe
+PersonalisationString.12 = 60b409a04c48179b4da05696ee5351b501f26a74337bba4b
+Output.12 = 09fbe28bdd81a2f4c4fe2d44eb31f3b654fc0439333b12d7b6a839e9c0047dffb35f5e04fdeb9364cf11b6b435145e8435086641efd43082b3525252197dc4cf6b1cee744bef9171ea67e42d5f4c4551aae4da8e062b25ea0724355c72ae090b43e4613311530938528d015a449d26fa
+Entropy.13 = 616e5b7bab53e0f03a7e74d334767a927ce4bc0075525dd6
+Nonce.13 = 19a473a020da1c915dcd3b09
+PersonalisationString.13 = 059253c54f664cd68682db12ea6ea2bbf57b5ffa76b0a11e
+Output.13 = b0e456d5fddb763ca46103a4c63f3dfd9b0362293c57b1bbac9a4cecf0717d8a14a9c23a4d8907a2eb4dfe3d1355018dbed5e4ed7675db5db007d233a2f78287ec75210f708f8a169b6bd6825050122a21fd3d4274587fbf28be83993f66f143372c1d5eb1df9c63247b21f0886933ca
+Entropy.14 = 5560084df2bb17f0c54b951d826f5027169503c6175be517
+Nonce.14 = e8c5220ae48b0ca1412e9c74
+PersonalisationString.14 = a0a1d6d3887f7ff9f13c85d6ae5af2c840fd85989b7e50b3
+Output.14 = 14f629aee43f71b61d467ccc37de8eb6110ccdc65fff57ddd2e66707bb768e5de5df5467ccd55002815d306adc7b7d6b5d87c20d2922bf5fd3790282608457b69720be7d7affcdfecd173a741c7fc99f5f30f981b1bc102977a61f1515b923ba53cd87a37faaac12e0af613ba0972a0c
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = e4547261c9dda6bafe9fddf435a80ebc96354c7c2c8847c5
+Nonce.0 = d26c6e73a967bfc4ebaf8613
+PersonalisationString.0 = 42849dc8eec611eaa49252067fa60d7d7267d711dc35b576
+AdditionalInputA.0 = 815f50fc233f157f96ad0627c355bce407b269dca91af661
+AdditionalInputB.0 = 775a1c9da6f58d4eb95b27935ecc01dde31ff17ce2e4e65d
+Output.0 = 25adb777523a80a6dbb6ac1fd08e02bfc4b4686cec5efe3ae9aa2d4469eae8c9c3693fdc8e0fc107720b7789ef7331e23fe3799412ec86857ffbba515a5af4d91013b2f17669421c822005b4747942790a11a24c4974f27d54de69727b0ed507b6a48a9d6c53f93e2f3d33df73dd643f
+Entropy.1 = 06d677001d9b3c97fda4d09778aee3de131b4123696b109f
+Nonce.1 = 81bb6b0d7fbcab3c5842bb83
+PersonalisationString.1 = f99638d2d4365b662cd83ab4e6a7bbb624e6c72b7b38e81b
+AdditionalInputA.1 = 20b7d56f6222bafeeeee59dbca1933d8086218891f3a9bfe
+AdditionalInputB.1 = 9de4f2847fe239cb1a3df4b8ff64c25d7b0870f3c9ebe3a3
+Output.1 = e18ff19837ce21e68944659321311b8584dd515ed8a6a1f2b0ac06e69009c3d0cf0489af876201efad962cfd1ba54f540b94131d788d3fea797c4bc079593bc7932baa70abb145a355741a98c584f0fa3298b8310b01e1a6debf5359d7d02b1a6c663100acb56975450bec20e91b736b
+Entropy.2 = abd38c0465cdfe018f36ffbb7a0ee51d67675ab4f0f1d1e9
+Nonce.2 = 3418bb4cdf6499a371af4d3a
+PersonalisationString.2 = 9a07d5571d841e3c1a9eb3fb48cde3b3e080e1c2e0db6a6d
+AdditionalInputA.2 = a392f79022aebbec0c82b981293627d139dfb5232eb490b4
+AdditionalInputB.2 = f5ce1f6b1e6715c49bea42ff439fdecd9b3b7f2e578133cc
+Output.2 = 885c54ad25992fc38260498d6f4d8c73d6159af5f7efef06174da03afcd8384cb28690fd9ded1d26e2dff74aee4dd0c47a0d99c6fc1ec8d8faccbdcf6fdb12a528564ad0d8131bcf5222d7e6c69c52da1acba01b721c98ac5a33725111f12f6d8100009d7cc9efb7ad8d7d95ea4e620d
+Entropy.3 = b52620e58e0b52b8eed0d6a6c5f4ff6c1483c61fc41dacf7
+Nonce.3 = 2bf475b37d068d061d1edcea
+PersonalisationString.3 = ef0d233de00d24622b7d4ff4215aa720787fe80aaeb65d7a
+AdditionalInputA.3 = 81b735acd3dcb13e65231c2d980fb40ca850370581f230d2
+AdditionalInputB.3 = b2302d024d92cdaed4b12f79b0aeb20c98b2321710fefab2
+Output.3 = ae94204670196baf740768f97b3a095134b384afea667fd90a77a16c8ae390a732ff49a3073a27db0f7a2c8ad5d7cb527d334a37abf0472f292a20f2a28e667d7c9e9f7b8fbdd177f36bf92d66223aee3f712b6c9b064e07ab96f6a77613ea55008fb4f8fbcb2f1ccbb0da75316c1faa
+Entropy.4 = 2592a5ed86ff64b9b4c1fbb81222d1bfbc53f3a639571ecc
+Nonce.4 = 356084058b8855237da15c50
+PersonalisationString.4 = a626c51ec99e72431485d2ba027ed9cabcae7b86116abe4f
+AdditionalInputA.4 = c430876552d28776570923c6b74e42c3210f01104006bf11
+AdditionalInputB.4 = fe2ebc239690a4eb18a0b5e75d08831cc2eb07c982c63973
+Output.4 = 005045ade7cc15467b5ea784649d9804540a842ffba4db8d44df4f44c69480bd4fe965b645aed09d62190daeb2693a2192aec3d71453a8218e4700201ab922ac35d241d95150b47cc7a051897be4d958f2da5c2ebbfceb1c550cb67b32ff83ce4fd845fd826a0d2469b506f5158765fa
+Entropy.5 = 376785f5ff8a82ceb0aaeb010533cc1089059ec583c302b1
+Nonce.5 = 4bc47e2cb8c2711839ce7f68
+PersonalisationString.5 = 6d345e248339e893f75696c039ac47e5678696fd489a393c
+AdditionalInputA.5 = b0f3fa1131c3fdd5c7fd2de93931e45a66fa030422ac65db
+AdditionalInputB.5 = c66341e3f9fb82e3ba85f229fcb7d34457e4a6ba8396b548
+Output.5 = b92d17e1be94b0385a8cc3e16189811fef7b284a1b0b6b2520fde79af7826c745e746486a70cd8dd9930b163da75f7eea7c216e758d9ed6c745dcd7bde19bb9382c1f7c37cd15b703b884d7d452c255b25048a836844c5ff28aaacf733a52c28904b36e1b51729d7aed81d601c0872dd
+Entropy.6 = 2cc2557582c5a90cd2ad0c4a5578eb0bbc9bde41b126e46d
+Nonce.6 = 8e9c3563341ba238414eb628
+PersonalisationString.6 = 9d2fbb9153e3ffefae0770c79de10db069a5ff9f50e31787
+AdditionalInputA.6 = 2e54e32539e27ef76ac1eeae2e30c2385647652e20903b39
+AdditionalInputB.6 = 1f4e01255908c3c8049521f8972c01ede7dc76c425c59640
+Output.6 = 7d6ccdfab33f322898c470be02d8257e0e952dd10f407b3a8eaeeba47c541d968d79eca29e15541c1505fe4f19a41797c9ca2280c06261fe9d0c58bab65d16f5794b57566b8795c38c7b43d4761c8fd107beb95147a0fe61ae8dc31e25eb2957e44c0463ca7c1b589ea587f0cae1428c
+Entropy.7 = e670f896326b76034e43cd85f6f6f11fe6582d3471a8eb88
+Nonce.7 = d37a2302de010aac0e556860
+PersonalisationString.7 = 5e218091abee1960ef81f4d5a80415e388bd0cc79bed70cf
+AdditionalInputA.7 = 7cf84b9ff30dbd0f608fb21646d7c5b542fba50adb38d5df
+AdditionalInputB.7 = c1c4aabe7616a4c97a4dbdadb08a9b63c6e10cef8d463fd8
+Output.7 = d8fbd557fccf31829b5ee11b05d0353e725bff15fdaac94d21ce95d40eff55edd852b264b515ec6384e2d28d014e47a2df0d4f56a4ec79309b06affc62915e231d62d02bfc60220c72b7ca7ba5671f882839b791ef534e707a04e5274c1011f7941fe1075a5d06a47af9fb2f65c1f211
+Entropy.8 = 0576bb2d4c663b781193509251e2f76b0a8bb792e7944960
+Nonce.8 = 0c2c154feb70cf33ca942508
+PersonalisationString.8 = ad15e4fce9f4dea43c12ff9f9d50c963b335a01332541154
+AdditionalInputA.8 = 3c8a4d6ab96cebf9d02b5663dcb0e0db23699623455cd4b5
+AdditionalInputB.8 = 43d2d3a8d023fa1785ce4781a15eb20ad787685a47da08f0
+Output.8 = a68e648cb07da2eb795a8c898c8631e565f33c2fe9c35e686d6f85fef145446cb79bb6d17bdc8224bfe437468a9630ed03c517caf1226c278ae510c869d67d50b6bf1cb378a34035041f290d8dbc123650ab4fbe5cf6074ed0ba90e45d9a8ae08566ea3d3a00ee3741c8ec8f56dcc78c
+Entropy.9 = f597ce05b9a5b1cf3847bbd4171e5085384cc256f77ac615
+Nonce.9 = 73b435726cbd538b93de9f55
+PersonalisationString.9 = 573cf859f8fea05f16c6d03cb4e524b91e917f39eeeb1d68
+AdditionalInputA.9 = 2a842454870c3f7936f8036b453d219557ca341f261d2519
+AdditionalInputB.9 = 7afd8cc269899acd88f5c55af29fb0c4ce678a0d8ebf924f
+Output.9 = 8162c16c1ce3d5c6b7c96f0281f4220569a882277935752b86e7d3f54646b276cb77ed96da73799911fca3d19d34c1f0b21068a472afcb77410412eff2abd03c753a009ce02b0e995477546366020294eff0ef0da66f31a413313e2774ca04f09a4d5076e0e85ca97d5bb6faac4c0c27
+Entropy.10 = d5b5374fe143035c4fea41667bc8bc7d46000998cc82ab32
+Nonce.10 = a0040c705e01f9b354e8f16e
+PersonalisationString.10 = ed8bb219e67515874c5b9e3f6ae6e4dfa9c42d1e69204e8b
+AdditionalInputA.10 = 70f03fe6e78cc34ec1678b2708fcd8ae3300183ea15ccfc7
+AdditionalInputB.10 = 9c641d7e73d1a2b819e113747d74a979b74c444ed36b7391
+Output.10 = d50df8e3e17c0f5e19673ba2097d1d0c4cf7a9def7465a5b91ac8d49ae1b6a821fe9efde841ec9064555c0e2d6cdfa41f1089f22a5c27090c5a136660d1af586a1e131a853f19bc3c8f4c79aa09e39c2f22b4456c667ec907e2a4124218665e7cce50399ae1e19ba9c2399f470444839
+Entropy.11 = 74d7c8c9b170e59e4f128c8df1955838df5c8071a5e85439
+Nonce.11 = d71e785c68b37e10efb39c9a
+PersonalisationString.11 = be3d54203a1078d051519137774d5d851e81be026155eb78
+AdditionalInputA.11 = 23f7b6758d79de580ed3eb995fc173da74939837aa8d9eb4
+AdditionalInputB.11 = 6f0d5a333ddea0d38362df0dc3ebaa2be2fe5825ddb0ce84
+Output.11 = 4462fc32110b25b3797c5cafaad830e8a4346d9270fed98b30f1345a7a8dde19bf5365d6f3788e7f715feb2762af263839c8c8188908c61120743d977d71c51f6324d887bbda380fc07eff09a31c2332e7b1aa1692c59c3379db95fc21cf711c004c4d385fe14f48f2f2a31bcce6aaec
+Entropy.12 = eaf27c3f69279fd523c0c3a1da5fc4f01ed64c27ffcfe3c1
+Nonce.12 = c596482f5baae1434e8c687c
+PersonalisationString.12 = b038829fc95dcba8645ce40a306491c893f48139ae30a071
+AdditionalInputA.12 = fbbf7abb8cc2612eeea6d9463efd55c47245e01713332bd6
+AdditionalInputB.12 = ccd7e81f529de1ff4e65fc63d34c262ffde7ee49e6707197
+Output.12 = 96dfb7445057633b2f0deb69135d10d0a2dc53faa9cded55ddfb8edc63f5424f8fec7627597a30328177dde7963f76f9e5412b5b440256c6a3f0c7c7fa02ca49e19ea176abac013696e9d529f65e51d4a7348e42dd254bbf19d9632d6c875b8ecd7a4139f1bf020a159d2a30af8d645f
+Entropy.13 = 319cbf2b11b37c831c654b6cec2570dc6d7abeeab185272a
+Nonce.13 = 518eaef30faa5acf5c8b254d
+PersonalisationString.13 = 9effa141f7466b659eaa50c32c8e683c2640f54027ab6aa5
+AdditionalInputA.13 = 63b3acc237588cdf41c0d4bef16c4890cf3d458fcf1de8ea
+AdditionalInputB.13 = 573d6a7960aeccc3280a8aee4d72e587e9d196b7b270e329
+Output.13 = 8a568086fdd9f01206a5aaee34d253bbc9339112d3170699b9a1392e97062d5d0f16240114dc1789269217c5b4b2974895b20903890f7dacfef46fa4a4d02891c70425ab3b42f53d72f852faf3713ac7b8207dc453279f4df345091b8bfeb54983095c2d190358293ba507bdfdc39b24
+Entropy.14 = 56f3f5b08da10ead0c986dd2ae5553e4b2eeeb47ad5d2219
+Nonce.14 = 7b12b89b4a871c51c0d85554
+PersonalisationString.14 = 96c8630a1f4187fb0794601cf51e7e333e71756a0421ff43
+AdditionalInputA.14 = 875e5bc9548917a82b6dc95200d92bf4218dba7ab316a5fe
+AdditionalInputB.14 = 4d3f5678b00d47bb9d0936486de60407eaf1282fda99f595
+Output.14 = 90969961ef9283b9e600aead7985455e692db817165189665f498f219b1e5f277e586b237851305d5205548b565faeb02bb7b5f477c80ba94b0563e24d9309d2957a675848140f5601f698459db5899b20dda68f000ccb18dcd39dfae49955b8478fd50bb59d772045beb338622efa5a
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = bba743058788f9cc91a321caca494b3ba5c72744950ec788
+Nonce.0 = 8ca27f243ad670e805814af6
+Output.0 = ddd4d2ec6e05f6876515d79fd6f1488b5aa61786a8b7ecc15f865eac437bb71b8d05d1e7e376f4857c3357bfcabb1ee3d933316dc4b67e69476c7d3fde0a26eb386e5d2864cdaf99022101aa383bf100d9d0519b6725540c5e1eaac71e4444dfe8ff8cf35eebb8fb5a804226a7044bcd
+Entropy.1 = b9850e5d7dee9ed1c6cd75c17f97a5f4547de22302442b38
+Nonce.1 = d2e59541e55d3d9effc6b1db
+Output.1 = 7ba9ea4bd21b7878067eba71ee78acf4c6d3387b97045940436eb731d534e543a5e14887af8ce33b0f6496555d8badcdf7e8d2c4d8de5489b4feb226d2716cfb90aee90fe189e67d03a923ae3f8afee786557ab1fc8386f94cac58f0986854b6cb6b2c90bce778a367eee0b15655bb13
+Entropy.2 = 7204f95f19a279305ad41b9d0cb7dad7279fd6678ee3980f
+Nonce.2 = 67746832a7420086fe591a5d
+Output.2 = 556364ff6f63208683fb53f18c0dd2db792577423745bda42437c1b33c73667cf257da823ee5080e0c103e6ec57b6e81517062c55989ce76c257808151dae8a2932cb78144207c15f6c9eb4fd57caf0101a74c1c9b42d375646997de7a035f3150433c4e912e12f975ab8494d49f91dc
+Entropy.3 = 748e2ae47a2c03365491374e7406c408958fd08e0467570d
+Nonce.3 = 3a0e87c3f6c19285981845dd
+Output.3 = e0475c909d0d13d389d0828dc50099d1258ac5382c68bba1abd2206e03bb7af7d40d1a01510f9bdf65cfac9efd047a736689296bccee5ff1a2e376cfcf44f96ed6817ca249353efa42921b0f8723d330877afa17296fae9856d628bff43bb929aca216a29a4c1d9e69df7570dbb3e5d1
+Entropy.4 = dd1bacebf057c043d76d83f86b46fc764e2290e4d68ae537
+Nonce.4 = e08d66b15f2c49f4889df2c6
+Output.4 = 09bd632fadced576c3e0351873fa9539fdc499f41220b847301a8aaea2281c1d9b317448552fe262b822bef8779a132d66f9b27a320279fc92d5c8373f9aedd20f6c2a422a9f34eeb87587a1de6a2150faeb4403912bb81128c7409bb58a2261aa7ea47294cb5f5d3601e721cc000932
+Entropy.5 = 3e894fa8f7e68a9456340088d6efa3cf3d2d80d96aaaa89e
+Nonce.5 = def642aabea32a79ee0600bd
+Output.5 = fa8c91477e50c20838c0edc8c882d4a76855b5e406665c26142bc4593a6d75998dbcc0865423345ab846da78537a915a94d60e3d2e2d1dc265c00b8c589131d82f5a2916205b42b7c0d0746f6b516357dcdd0dbea1ce7279e8879f79c0bed8c94ceedac2b028c14655c186d160ca138f
+Entropy.6 = 02e9ec23399fa27efd580a333ff8161e71a4f049f02b3655
+Nonce.6 = 8f4bb7f7e0e9f208462580a1
+Output.6 = 9ef5824559ce7832f6fa9932ee1e332f735d42a8c21224dca73205400f4e0b9a758b691956389b8ff78855084652fe29b5b77f56f22d14274e030e017f5c0d75b9b4ebd4d540d0a5f057946cf17ea6aaa94fadf6ad39c0de7a7ebef4e332a20b8f4f5ed1cf95620e41ffb6ec105a78f8
+Entropy.7 = b2480a2abbb49706d7ded682e76fafd53b8bf1f0a533590f
+Nonce.7 = ba562cdde7e35c6f9c41f1e0
+Output.7 = 723d464216a191a10cdaa96d4c9015fbd2f7ed29c8eee3280c5563353fed2c2a2b41fa51a72aa6211f3798adc271f7927e0bc31ef157d941829d43b27d008d17414c4dc2a3aed177f3cd3f7de16dc2c2e56aae74353ce2613286864f774bc2f1388c0284d964c095e7260c94bad47ce2
+Entropy.8 = 4d07b701d5614b0e96ce8e31bb8ae111b635852fd55f188e
+Nonce.8 = ef66012b0999abdf3e6fac06
+Output.8 = 53ca443e9c3a2e7b88312bb2989219b0ca73bf20167a5a68aa55622b7d3019094f3c1ac312b19c746b082fd2d74bbdbfed24526b0220ae13c3c11e66f7b2f7a0f5b3bba01c8a19d056780d49e79366cfb965690390607d7473ecfd9d48b73767e0098df0fe585b49fbeebeea121b07e7
+Entropy.9 = 573a180ee9c46067473e29a27a89e11973af9e061d80a908
+Nonce.9 = f39acf7e26a154ddec7c76c0
+Output.9 = 0013711f1a3460cead54bd7cd0a3f13e461e5321fec3971a9c7ac8eacb97d9c373a5e0922b8d0eb5fc45c728a9f00486bbdaa2b88be2a8f9ea69cfe168a0060841192c0d7457ebe350eae30819d74ab3068a8d67ac28b29d6ef48fc24f845460706812a1b2700a53b7ce69b39fc9520f
+Entropy.10 = 168a647155e7849bb6e5405fa65fa2972fd869a16970912d
+Nonce.10 = 8686d17cf524ae8e4eb937a0
+Output.10 = ff6b061a4743a2b21f1be263e0e620715e2807c507a2d6889420562bdee79da662ad40983215485bc4155e0251b449b80cc787e34ba07a172cf4de74988545aa7ef16d00b8293a60eac04d9826220f37291d83b54b912dca8c0debd470801264aeb4c2327873cef0895a76bd0644c010
+Entropy.11 = c0e50ce5a5a5c7389a19a3f24fe7232bdcb4f08542cada1a
+Nonce.11 = 3d27e3b7542e7a9f88905c8c
+Output.11 = b603a876767cc7bd88e9414a5a2f7699254aad3baf8b40c4415e468ab70e2490bf440afa0e2e307642ebadabc720ac2618091993049b6c5b90287d85c9f589d291911547ad2eaad5d31635af2d2b77eac3cf4bec600ffc4d43cf0526897564da9c10dd7a3bb17b04b19a64d3bb5697d6
+Entropy.12 = 41e85704f784e21622628ef5af301d9ab2bba7f87430d37a
+Nonce.12 = d5619a9a2b58e223f6c256a0
+Output.12 = ec42453176fa42d1b2c6778172d2df6b16f5e91e44f5cb1541dad058ae0abcb6b41da5689e649c5ab4022b4e5f56d33db70cef87adc287185bdad3400aadb294a79fd583ba26835ad58dcc640d15286352015cc61f07b875efcf7d00ba01f2302d20b7ea3014597f89b2dd9d13264fce
+Entropy.13 = f2c14695ba4bcbbaf6ceac7da25e075e47357ca5246aaa7c
+Nonce.13 = 8829afa614b4556f605a7e2d
+Output.13 = 72ee34f0ba35b3e8ea058357b6c848503b0b754204f4706c54f532c14650093c6cb993c2c3982251610a6e09c354244c0ccd8ccb6d9fb4682cbb594547a0d3e69fbf12e6151208847baa6a748e56ea7807fce18af95ce8aee77dde17a7799d62eb91ca37d4c3903191560d82b73f569c
+Entropy.14 = 30efbec33ef98a928e9441af3caabb34cdad892669e88130
+Nonce.14 = f77b7e0fcca6f8733e0bb0cc
+Output.14 = 85f5368cb9f44474af6c4a159477c5cdd05eb0c0a37847bbb07e9a9c8f633ef2c3727d017f1bbfa89dba056062202f5824b3a493ab53a2a5fcf796d944577f1393d35f2a284453b2cbd8eaf35b9bae7b87c156cdf9cd0a2fc94ddb0d4842e3ab4b6c97089cac0e32bdeb32dd8233fd6e
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 8ad37bdd28f6b39cd2d62cbb226cb52c7c9e4e7158e74354
+Nonce.0 = 8a537aa573111a710ebedb9f
+AdditionalInputA.0 = 66abc2c8559314d27f080a2b608b220c1cc3c581cada3a92
+AdditionalInputB.0 = fb193d70991547bdbc0b4b0e753412176ce727ead9bc3a6b
+Output.0 = 91a8a12810058b6a9b1e5f86753b257f6e14afd7415765458fbe131bb17a55401062c6a1253dd40c5a6df5c79bdedcd205e584eca3bdb62608976b8caa2f57ea3a6305a84d8018340ef410f1cd13c214e7c80c5da348eca06d37469758fba4a322ba7c9ba791e037067f01f4bd7d741a
+Entropy.1 = 71556baf97112569f7ce185bde939046d7c0da75256c6838
+Nonce.1 = 70f7798dcf87c5dd469188a5
+AdditionalInputA.1 = b2d8b249be357d29ecfa8846130408ba92e4c375e2a18341
+AdditionalInputB.1 = bdb135172136b8e495620fa1bf00b6dc1096743f654e0a1e
+Output.1 = b5df532fc5640df7ec27b1064cf9fd82999e9e13594c76e7b37b4879272deb5d25650ffb91f03e4207a52460a51f46810669732abba63689969726ed48b5fc911eaf2da52b4d731d3c5703fa41c83752d5121328f7bafed472bd484d13308809a80e0998d6c3504ab5b935c67e303e97
+Entropy.2 = bace0437423f99453d4bab253b7385f25cac5529a74a55d2
+Nonce.2 = e0070add2bfec0af44a5ab92
+AdditionalInputA.2 = ad0931a66c8eccb069b18794d871ad801709b10fcac63333
+AdditionalInputB.2 = 25be43136f84f69506d946b7b8cbfc14c137d65daac9f6a7
+Output.2 = cb15d0960a48246f38fec77e0bacf22461cd337ae77418742c3a5f6f745f73d9608b52b2c64b5d24f736278655d45cb975b03e8698e74e08b52f402a1828114a9256cb22c55bb21445da8c354aa8001caf14167daf4dc6093f9aded313ad6433af48a8291e9f9d529f32825a77717c54
+Entropy.3 = 98acac10c00a8a20d80234f05ed900420e092f1a52a66a3f
+Nonce.3 = 75a0856c873ceabcc3289025
+AdditionalInputA.3 = 39ef8410458ab56c92dc0a3bb4fb55ab2b6366cbd10232dd
+AdditionalInputB.3 = 3cb5cab71f8c1059e6e58ac5135ae9411a2b22e578dee61d
+Output.3 = 34d345bd8c0f32713ffac93e2ad3df5c50134876284ee3d6002a6a69dd66a903b7f05ef52c582e34259680e80b15f459bd0da3848db49422223e072ed542ac2b0d172e71b170ddcc77c355eea7e8a00789501f09ae3ea928b76bfc8329a6ac66023dcbcfb82be6ecae29472f83e2e5f2
+Entropy.4 = ee5ef00aafb26dfdbad0943029a5b82e7844d6e838252ff0
+Nonce.4 = d32ddb64875d956b1141d891
+AdditionalInputA.4 = 17642083b7135890eb32fc0d75cf3db618e84ab12b9964cc
+AdditionalInputB.4 = 8bf2232106450da94adfa30d7d6f51c712845a50ea33fe39
+Output.4 = ab35022268031ab65ce726095b2b311d1fe744e4229d6ab03cd79eac3fd93099ba00d0021a95f40ac86a46fda4041c27b0ead485ef4d91a8b3fcfab4031f762a6746516161b0f998194a4a5ca902e905e79e67b17cc70be2f8e077290a575a7504f55c47bae81dd732e036aed18f6e00
+Entropy.5 = 0ddfeac713fb4e00565c0315aaa80b54b09f8ebf8f94cdbc
+Nonce.5 = dec892f0d33775e66743b9b4
+AdditionalInputA.5 = 984b87667149b02521d1fefe9238bb843f9a9392af304b19
+AdditionalInputB.5 = 6d269fb9d218e1e932bf7a8a064b9252c8e8bd15e91928e7
+Output.5 = d8a6470420e87e87eea6508e48953268ec481f70047214c3c1049be0fd0d41d04a8fd8b25751297f6bd2a3ff74cae96bf75666e179671055443c0d487edd76f3a7dbe70bc430ded72718853496dbcc57d6dd3685593aedd2c14fb70203e9bd84ec7531de1451c95fd2bbd4bb1065cdf0
+Entropy.6 = 2c0cdd5597ec0580c57fbb70a86432a736ad44a8e0ae8f22
+Nonce.6 = 9857f254a4bd2b819b617fac
+AdditionalInputA.6 = bc662e9e8bd5c069172b688b39f74f368c44554c09fb2c12
+AdditionalInputB.6 = 0b95de4012b602c98c1767a0f0a11b4c85df71e691d7bdf7
+Output.6 = 96adc9cf7562b8fd344eeccbb91c73441f7691a9c58e7b61160f93cc142fd440b038f48831da2b6343b40ca70c620cbd6d3c5509cae8ca3be87380af58d1d271abbccb56c2ff883ab445f30914271e25b88098c412a64c15956d0ad7bab12ccff80e0a97331af5c21cd6b0018e63cf17
+Entropy.7 = 96275ad546f4706febfb4e983c56a27d742edf3f92e7177c
+Nonce.7 = d7534695bb16adc11621cbce
+AdditionalInputA.7 = 4abed05763ae67b4173e31708bef17f4b0bc0a75a6f8bf1e
+AdditionalInputB.7 = 478b6a8aef8f40de30c0b0c320140a739c914d5976540153
+Output.7 = 34ff8a4cd818b7f870895416ba60711775b10b090602717bacd8ccb94f2b751e0b2a364c9fd66ea1bdc4d57f5b3ceb3eb30512d31321b48ac41c2abc30025272904a934a3187128c95f224821db1ec657901bcba19c75b4b64906c9c12c45fc80b4694e3a94e580fdce95c9cd3254bfc
+Entropy.8 = fd72ec0a165678f3ae47b074b1ae1b056b1682b7cfbc1c68
+Nonce.8 = cc7af6fb09185c0c92e90db7
+AdditionalInputA.8 = d9da5d76ad4ed06cbf2f827455ebd12383f870d13b7434d3
+AdditionalInputB.8 = 67a85292e710ac97c19f89daa4b0c0315bfbbe71ae8e99c9
+Output.8 = ee2b927b0d53e70544475aebf23f5bf2547f5a4f013fb68b56349c76bbd26983e9c662daf6280b9fd01f979dbf2e68bdc17e17c866618b93fe0f6e05d9de6d4a97783cb6516f6338345c7153e0fef538163e1622b07c377e4ccfb0b9428cf62df2e2869ea5e94d4e1f04d81c3666329b
+Entropy.9 = 15f6299979025dd6dfdd87fe2883f449446ae9a8b013dc52
+Nonce.9 = 40e2360188f8f02055fb965d
+AdditionalInputA.9 = ce54fd58debee248473a1ba98917542adfa9523c71ebba82
+AdditionalInputB.9 = 1ee2c747db56b8388399fff174b35accabad494918dc9a3d
+Output.9 = 2caf6ba1df44f8c5525ec6b81c22e8c66926a65342069dffb8d1dfc8a39939b5667d2d24d8c715ca7cb41f83eac1263efc6ca8fd8bf8ff2387e716f154a8832f9fab9d2e3174cc1e7cc6bc06b583b75bae5a93fe063e18866d0f2cd2a418ad4b06d98ed330d5c10cf8eb0a7d2d013df5
+Entropy.10 = 73fa0c8c227664d091a6e809173b1a7fdb502dd8de877bc1
+Nonce.10 = 7d5ab4dad7976c0fe9ffaf13
+AdditionalInputA.10 = c88d5f61e9b23d6c440195fae62c4dc992be1323c7a77c1d
+AdditionalInputB.10 = 7918b3c108b6b21301625499611da496c1f6abb8b6bce9d0
+Output.10 = a0c58c212296636b7e1134aea8c9cf71fb2ff33a1266ddc8b635791a00b50ea8d9b2fb912614a3866bd0557767a23d85fa7b71b1164d2bb3b36e2b97f5ddf94a30ce29da682e5575b9bf0deed7c780349c5eeb7fb39c00a73f97dcccad748d7a98e445efa1091ae7d911dad929fc0645
+Entropy.11 = 5f6b6db4db0f5d9aa8e8f7bf5dc07bb188ba16c104979a3c
+Nonce.11 = a183ff25816a11805f761c62
+AdditionalInputA.11 = 7abd7bad51e1ade5b2da0b536c8d589c682df09ecd634c5d
+AdditionalInputB.11 = 03a31694a8e68ba1463551380717db35f43702135c74ffdc
+Output.11 = 5bd753bfd322db90ceda38f2e7e914766be456b6d774d9952448ed6ae79cc6e5490a42896fe95cce1cbafdc18c43065e35492affc776318b3e1cb7371afe9e3f98d09c0a3ef5a8ca8c893ebb0055605d3025a0bac535fa3945b0e302f7c4889c4f67c943032a387e06557155d62de880
+Entropy.12 = 0247ab3bf3e64cd450b605e07b9ca806bdf6bcdc7e5be087
+Nonce.12 = d5908c90f49903077d5ca9df
+AdditionalInputA.12 = 822829af2bc971c062e0e72e122331f67523c4fda4e6b59f
+AdditionalInputB.12 = b74dab0782913c9f6c191a4b5c8e5ff4c533d2897d9f4ff2
+Output.12 = 70a729135b2098c38aacdd074845aa66e7d8b971da5fa03d519f51a09c19848aa1d9cedebb0388eb3c2cf1ea34eabfd2cc3f96bb7d4b7f057c8daae2a8dbd81f9936eb001fc54554d4b0093a7412c370dabf0f884d6efc62826f6f50b8966445753406ae0d12f5f018243781ce4e0e46
+Entropy.13 = 154e09ce03eb313b6b37a50273f61fd829c987495f848e3c
+Nonce.13 = 6baa744eb875635fbecd1043
+AdditionalInputA.13 = c64900dd98479781a1ed32a2c3bf2de48408648ff8bbe7c2
+AdditionalInputB.13 = aa40b7eb8381ac8a70dbf84ca9e68f526d3ff10c4aa9be79
+Output.13 = 5fbbd2c5224f8ccc954869b141abbe26cf0e90d02f19d8a5a54a4fcd4a62eba01071e0970c89857f884ab1d018ee0d31bb88ddaaf9aa59d2c7b65de619b0d7b4760336fa1e926aa5697a5be474ad42017f3484a40d3b1aefaeae523f9384e58ba9924dece6685c76c05920992787acfb
+Entropy.14 = 34bc96e55d3b0f3fb83b2755b7e58363113da2fa0dca7dd5
+Nonce.14 = d6db4281d219135dec4b01c8
+AdditionalInputA.14 = 5c15fa9dc77d6fec5f7a4a3e4a315c05de2b5e46efe54934
+AdditionalInputB.14 = fb65ede490ee01a1c100ad5e23a20f91b45adf1ddc15c590
+Output.14 = 98cb3191831dc79334e8e37d5246600f822aaa40964b91f345b9df90929db1b7bdea96dae9aeb88d05fade5ae6c29aa8eeec7fdc96e654c5ea41ea01e3104ca4d287bb03005feab0bd1f85e556bb6bc46a2227b14fd94f9e6cfd0341cfce951851feb967968d6cc818f364345b715bbf
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = cc77c08df466a3f73d20f613e39ba50b5aee8cea3dd9da69
+Nonce.0 = f9637f3f581c27e8154b9359
+PersonalisationString.0 = 24befa89cf5034a5bdfa39c6a7e405cba3f3755f38d6eb40
+Output.0 = 321df4649ce0f94f53f44da95cf8912b35dbe7accfd075ef9b0e89c040d0bb4a1d41a2ff80f3e2ee099f87c4dd099725d0dcecf52bc082f9903b0cf0f1438443a9e25786aaa7e0bcea67f2b165755ff28eeb9b7803d1bee81e3f18c2685fdbc378b05b52e7a003f72a3ae8e1450b9883
+Entropy.1 = 7685572080f06c46c8242862f877d58bddf4a5fc9d553d99
+Nonce.1 = 4b3574aee84a3d07f033826c
+PersonalisationString.1 = 69b6ddfc1327bde11e24dd793ea5494296f79a6a4f88f1b5
+Output.1 = 48ff1e1d05637fa86d0ca93341f684dc94d238206f8cab1a5c6e4c32a820430eceddea0c293d5fcb613308fa230a618b690341d1ca17ae694a86666f1bf863351b8af6fb6e913293a610f5447711f0bbad01105090b2ac03d5691055dfa2fc6b5be3757ee4e2b8309f04e6ce8566f1e9
+Entropy.2 = dffdc5240aaa288dc1e47afffa775231ed1c59fc9913fbd8
+Nonce.2 = 9236964c000396c803f7d2a2
+PersonalisationString.2 = 1fceb760271c306b9fb1c1f433d24862fa8798b3628001ad
+Output.2 = c2a591f58da6b01ff2e841958e4495d07f9641ff99d8ed056ea296dca602d0ee07ae4fa33f44d4e21dc0a266e3366f20d019c75d13f98bee7f5b024ccf9aa13f2068cf74f93af9df118decdc4e073df30ee90040963ea367b2704579ee395ee1ac83ee79681a4be4f01a4626c5f7bfc4
+Entropy.3 = 9e04812cbad24f5ce80fa2b45ba880ec17b26fd10cce6020
+Nonce.3 = 3211900ffbb9045d3821c919
+PersonalisationString.3 = b01370ba341cff79f7005f892be62a84060806438ad14311
+Output.3 = bb60bd21005a3dd93bfe77584e1367547d0e3144078ef05928ba3de70eb1e6be2d066661cf1e0552b0f6125111628c30cc123feb5a3c057fb969f25fa7c8b895c36a828cd627b56f46dc7a5ccd40ab8c8d8e5ed558605019c6be6d062fe9d86fe38ffcda42bc9708a4334f43a8d9f273
+Entropy.4 = 7af6a521fdc55e303c53334a4effe014cb7ced725ace9ebc
+Nonce.4 = e5713a9faf54f31ee96e52e9
+PersonalisationString.4 = 0d1d8a87891dd47d5488c0b52df2afcc9fc3986811ba4759
+Output.4 = 8afdcc8051d4968751cce8fbcfc28b1081424d70314b836ab158576d8f1be9e6884053a5862020f1169722c8f7ca4523ab8b66a25e017673d04f0369203f6f5c7ac0ca5adabff91e97b1e43601378a4574ed6d3831fa16855df7715e8c92f458b509a51283cbf4e5ab0cda7c1306044c
+Entropy.5 = e513d483313d824143e0f2f35c4799a66b20819750faa3f5
+Nonce.5 = 479ed252b3663b51dc44fbd7
+PersonalisationString.5 = 242fe2b949d5d12b278676bf38deb79822cfa59a294b562f
+Output.5 = 8dabf70ea50f952248625652852200310caf3761a8ebf382f17a572afb6e02f2050a5351fd917ed36733af9cbbff1cda0385c3c7966a3fd1fe82f18241a17e5b043a4e5986931d69c36ecd90aa383ecaa6e5a37cde917d944e8e2e2723850ad953049bd41787398a00637e5ba351a8d2
+Entropy.6 = 85cd18858cd605bda2f66c255189c528f467d0ff9601f4dd
+Nonce.6 = 024ecddf06232859beabf989
+PersonalisationString.6 = 68ca6f72bb3cb92d876b056d4efd21cefd4fd41e88a77773
+Output.6 = ac02806acf16d16b60548c81d90002f71c01888dab7ca7cc68e2f1c1b0c5347d1cd26738388ef5dfa44fdcff534a327103948a53df708a43388104d93f94d0462bb2b2409e21102b7cf4fdad7f97465ca2702ddeddca87ac01a3bf0167b0ffc6f123f5ca5b2bea4082369d09def70746
+Entropy.7 = e9b462858798475342df2b27362174685062f577f67aac5d
+Nonce.7 = f134d4d2a09bc00ee34768a7
+PersonalisationString.7 = 7d610e3e8ad86587d205d3661f2d4054a772305df989da74
+Output.7 = 0cbc76d53828951f2da32ee550fea0e38b8e32df618eb8e5355b5f5b2bcce685452bde3ef8e257b30e6186f0cea481b33d318c7a0a7f7efcae0cc789095a7111cdf702782142c025e21a128403d2105d1f2f1e85769a92e2e7087e3b271525ae9c83273f811247c3a9fa6f0918aae299
+Entropy.8 = bfc20fb89320917d77518a8e2321db89cbb6034c3e881813
+Nonce.8 = 10842875bb240b29463dd499
+PersonalisationString.8 = 62798e770aa2e7e91e66ce2da4ff5efca2f135045d682f1a
+Output.8 = 487810965470f49f26d805bf9ac1c394a570891871f18c5929c2ac38ea49046405f032d4635dd92f4210036cd1dd80b1542333af84732d1d009c2cfe91b9a932620352f5ddbd6ccecaeefd75885c1184ffcd8ae9a11d51a664eaeda1b70962e7958f124d6d61c6d605bdf7894e3b3f99
+Entropy.9 = b6e6337e37b42b0d94366c6560f7ce1e92b9a12e8cb8920b
+Nonce.9 = 903b548fae74c2350e606816
+PersonalisationString.9 = 40a1421dd702077801c919e12652f8ce453037be618170f0
+Output.9 = 182737f299bdc8ce28a1c201e6c81e2ceb962cef3ded74c95a82fbf008832c3619c16cf85dc4283b5aaa998c53e84855e7a86dd791e72ff9f4471fdd7d011d74198bf9f55cfaeea9d91f974dbe07d3b63ef0a3fb69833f19317f7842c0711c782987067176e8d93ef9d2c92b2f4d0638
+Entropy.10 = ee35377a65ed94502397a83b6a06cc459877a64b67a7c27f
+Nonce.10 = 39361bc989edda90588dd2d7
+PersonalisationString.10 = 1d5aef06c14332225fc27ea2999e492afb0398fcd5a662bc
+Output.10 = 61c6a16349b39e3238983019da3d6d07d4fd6d55980af4167dc3894b5053aeee7cfb4c73d4b1e52dda71d49eb94ae0faec230d16fe652ce252679ffdb61557d3fc71d9448c19dbf85f2efc37722c9c4068caecb1bd7546b6c276a70ca3674b8aa975c3fa7a73b2d2068d13b33bbe441d
+Entropy.11 = 96a91f6f66cb26b19a38e1ccee4d1efa8385f12a73b91593
+Nonce.11 = cf539ad397ff8455659ee337
+PersonalisationString.11 = a83b6355b9a581b3fef4bfc35b8d414ee333929c5946f836
+Output.11 = 88d3229c004bb57a0467e4ff6b0d580f539417f2b5cdb9e1ed376035d8980c9419afc658b164adc4b5574edc3552f037c0d086c2219b8a14ef1787f734fa5055d0208fdaeff365a383a5e1ac33cb79fc85155e8c701ae6e1fafcf208ee6ec594f4ae7c491bae8ca29f671d499f279e80
+Entropy.12 = 504d354c253e43f941a1cf4e9ad187e879184330bb06b765
+Nonce.12 = 2300e7738a62472090fe83c0
+PersonalisationString.12 = 4e8a5eb99a0960463a77b093d73e1883042be5e3b93e7d93
+Output.12 = 231bf1de582a733c6fb10bb71b1f3f2d0e8e360b2b5d19e51f70cdbde9a9b11574751cb8e949508e891bf71deeb3720fdbd72fafac95630b345ebd73cc81e12ae29ad5cfb1aaf9b95e8b4bb143f4eb9141221cfb6b6756d086c770acc3b8c24e200ee985e4444004ca259553a107c3f0
+Entropy.13 = e6f8fc3993ebb29668d64f1fb471ee92c1aa1d946fa80283
+Nonce.13 = b0eed241daae8d748484d0b9
+PersonalisationString.13 = 73e1ad4ee16e5c7865d4c2bd6d843075a4ed72d48380ad1a
+Output.13 = ad4522e99f7c6c00feea0280ed6d2258777809346ee3ce52c150f3046424b9510bf17d13ae48301b7d224510ba79020e5dd2cc04959062c3bd2740c8a4239850f4b1b64c296aab8a46fe5988fd98f3ca15984f36b45ead997b813ed4032df344f081ee7879c1a83386f775028e21cf2e
+Entropy.14 = 0cdd3ff2d685c17a4211f54d45f7a85af293e9a46edeb10a
+Nonce.14 = 46f8ee037b927ec766de0aba
+PersonalisationString.14 = e6299e0eb5826e498d873ac02892f01e02f6632101fcc090
+Output.14 = d86bfd8f9d80eda3bd43850ea6edab2ba4f69ac8eea623fd6bbd5c0c920620f8cc136b0170f0310a156271981a9cf7629e1b8f0759de1e99e20a0930ce3bb7dd2d88bc9172a56108cdd736dc529a6b99862bed7d543bdceeebf450020762652d520105f5c5cc3c9a6ebb64af2a7e82b0
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a454d24cd8ab7aff528fd2a4df6313c760aa40a5fe23b0aa
+Nonce.0 = bad23d7e66ef65668d11dcd4
+PersonalisationString.0 = 6c09c1ed75318b7e621547cd9d84d98cb27a18a4144469bc
+AdditionalInputA.0 = aaf4b7b16eba92693dfe6203260243ff531262230791c4d5
+AdditionalInputB.0 = d7fe7447c154387c582e913a82505ba381fff66008f13d5a
+Output.0 = 0b20f3849a3f0324b477f3f925bf4739c544419c225e2d5b46f4d1b625fcfed15bcbadb2661c012f2c66dd13de1aa52298473cb026c316b1c808baf72889145b1e2927048f72d7e4e8dba1a7250edfa66179b9abd4283e823fe371269971c1ace40f90b6493a6e73670b7e5503f46c89
+Entropy.1 = 3bc7f1773fe1191695b3fd9350589433ca2c617951bbefe5
+Nonce.1 = 3d4fce3431bdd8e06f5c5182
+PersonalisationString.1 = 39606af9aa0c1c455ae72393a36c55726111f5560b4af998
+AdditionalInputA.1 = 8b461996671bf413d4b898ae968777624b174aef9dc8cad4
+AdditionalInputB.1 = 087fe5dcf0a0403fdc15746950f20e393e73db916e964dfe
+Output.1 = f189481e192a67998847dfbaeba1e71517aa11b22f1d9cdd65d3e62ac44bd3a6a344c1ad4d4628c12d9fa72b29c61f8ca8e3eef37d1e4cde51d7905d6314b39e9bf513b24cd24068dc57db263480ecc7eb528de332d7c21d6cb43c7efd3a8caf48a4260968c1e33366587a64de8e254a
+Entropy.2 = 4412a6bb0840a10ea6f1fc9543226f7f26c0cbc7965a9979
+Nonce.2 = d52f7a302a957fc4c4fd6706
+PersonalisationString.2 = 064f8a9c4276339d22f31db30a00cc781bd1c0340f2721ab
+AdditionalInputA.2 = e88ae1d4a3245eadab582b21c1522d8a3d93faca3823cd44
+AdditionalInputB.2 = 4fd482fb3641e626ade6d9d94a18303c6b1a7ea629dff0ef
+Output.2 = a29b0cfe188977ca00ff72993bbf1d7cc4446d6781ae091bb32a8deebf1f546c2571968447a85ed52c019bc0fe4ab0b18b93170b295cd897200bd3f5321f51b09e7607aebac79e2342dade99a4f422949aa97872a07f317cd9d1482ef397c6354ff2019dab5f915234aec6721f556e69
+Entropy.3 = f8200b1a9d49e0a7320c05d14fa77f3528077b043b2d0f6f
+Nonce.3 = f83a3d3f55e9496d4914bc22
+PersonalisationString.3 = ae356cf25b715ec1fb158f51b21c934c22eb5495858ec019
+AdditionalInputA.3 = 7d25558e3ed1135f26b78ec98fea2c9d62e8f76dde73de67
+AdditionalInputB.3 = 4aae0d3a2f693cbd913ba68dfc3f5cda385a07662b65ec94
+Output.3 = edef6c0324f5f1c360fd0eebf6ea8906b7d378510fbce36ae5cabed186eee6efb4443dfc6b84d5a5cda22bdd24eda444073a148b66587e5951f40ea58d947d474adc7584f5b6a34ce94b6113ca71319f7f83723a0acc57e638930cff1d72fdce1eea4f8cee25bb77815553872f10fd83
+Entropy.4 = 0da057cc5f06459395c6ea651ca7baefe8887d2896a836d3
+Nonce.4 = 742f6ff826f86b169283be9d
+PersonalisationString.4 = 823532fb5b1f75a967483715f56546e254366cc774f233bc
+AdditionalInputA.4 = d8260f314d9d515936d765ffe21a959751a893efca455d06
+AdditionalInputB.4 = a5615ad8f003973b9a7605eab80439c8aa2fea56386aa396
+Output.4 = 71f5efaa35338feaeb52bd12b7961214adec8bb9c30b751453ae12f4b706b21de5c0c0701d4f5ef0cc2763fd10c10f2a856403f6c28b78ca62cb7dbfa19b7eab7351e92727382e339c7a7c44578dc0f3bbf4475fcc1d17a7bc2f6de97acd7dbade74f317923af035219d85cf2b3c3087
+Entropy.5 = 2f55b2b823ac366f4d06dfce6d081dbb3a00ac466a2bb77d
+Nonce.5 = 00642c8032c0e44418ca14bf
+PersonalisationString.5 = 6a8cd0ebbcae6ee434e37c586f7d7983d3d57ee6750503a3
+AdditionalInputA.5 = c94083c6bf2799c97144f4a8240957c4da177054d56f1b7d
+AdditionalInputB.5 = 2eb6793d47dbfe0de54ada5afe34e8f61584f5bd75094ed5
+Output.5 = 50d6b4737a9e5365cb35ac37ee157f2dbfeda1bf05cd1b6be50dfea46290f8e178215949f5f1e3b6cbd9b4fa47384a9fd58571ed2e664bee4577b6333721a72007ad563e4cd9096ae6e61a016a6910b1c832c23277730ccf246c284861ddf4c3722cc9e2872040660088c97f71c1e039
+Entropy.6 = c703a60ccebafa633b920b5de2a154b9fa4940973f3562c6
+Nonce.6 = 32b3afdc67a7092a61f13e16
+PersonalisationString.6 = 5a975900ea7ad8e778d24c6c347d09a58e8d084033010ffb
+AdditionalInputA.6 = 6275f07d22aa29f0fb4b78f545320f1a7ecab71140fa425a
+AdditionalInputB.6 = bba4afb2b69201234eacace27ee6d77a5920cbc509da66d0
+Output.6 = 779dbebdec3601f11322ea9d0857c88974f2c8ddb77e2444b46b31a7f65d3b949462bdda4aac94f689d44467b049c718b93a8451a9068dccb75f7ea9c6c60726299b5794c4746840dcb770eb3e45347dafab6980e6839c55b6f35ef87ae1e0915dd8e843bdf3f0fe38b5ce66d7bf38fb
+Entropy.7 = eef0b72f2b96523a8dce8f19fd4f2a7d041615f9dc2d30bf
+Nonce.7 = 019647a36f43d7d36183dacd
+PersonalisationString.7 = 6387a9efd6df19065a93cc64fbfb7e3e26a8966f0fcbabf7
+AdditionalInputA.7 = 76d848401dabae20bc1504c2a44c950c8ee01f76df2b57ca
+AdditionalInputB.7 = ae05a4147ed24eb84c90506310d0a231e1fa9a2fc618c503
+Output.7 = 2f95615371c773aa030fd255ad19cedf4ce6d50fe4e6d231c82e687792b35a4a10a48e4d88918baffb03bfdf137553db576b0afc99d4a370a2fbb2925f1110e72ee3b5960543af4c1141d303381650d29aaf024040cd70503fce0ea41794d8e67ba7615b0ae28a0614e26d33b063d9f7
+Entropy.8 = 68442c7db00b0d360a86709d1bdbde023724730bbbc2eaf1
+Nonce.8 = e3e3b777747fd8bd4690a9da
+PersonalisationString.8 = 184cab9e9779a367e1fa5888d6038ce5f6702a998465e9ba
+AdditionalInputA.8 = 442ba6a8567f3002d7c7f94398f23aa7b3b0647f116d9c7c
+AdditionalInputB.8 = 2d830926a4cb5683a308593db5d6034f8bc94f3bdbd88056
+Output.8 = d8257fecef134d22025eb884a8b93e67a24227a62ba8cf6a4a412317cc27d7e2c6291a42df02a82511853ada9e4b75f2f8beafbb4c788e607fd9f988e8e3feca807c35141df39ba2d692ca182c5e40861880bd6d8648a8d65722bd65d87e14d7449e0d70927ef25929a03a915c4fd806
+Entropy.9 = 328b4809643931688c48b0737969554c5a29752d8493603f
+Nonce.9 = 9010cc0138e491197b28e87f
+PersonalisationString.9 = 3451fa995bd9e975535abd0354cb4056f97c6b785057f3b7
+AdditionalInputA.9 = 4eadc6391b639be2b0a556e159a17b5731b1469766758183
+AdditionalInputB.9 = afe849042ccd9b7d24a01996a9a0a3bf5b8b723ba36b213f
+Output.9 = f6f1baa1eb00e5cace4c83296f4bc87f4214f3ae9f635d882f3d2ce7e759c04055d90728181eed28fedfad593ebb8ddc2212a8f24da13684e751f6845fec92596a4ca85c1197746c9063781498640ca152ca90f309e78c834c98814a6918033d1528983bb8b8bdb7485a3d6797d24773
+Entropy.10 = 6087021a7d6524764fc44223dc108961f90529b8c08f991a
+Nonce.10 = a532653ea4e091eb7ebafd2a
+PersonalisationString.10 = 513cfd915f4bc8fd35c90bbfc7ed2f67b21f0c73a430a402
+AdditionalInputA.10 = f0fdeb937d463ee039ae72dc536efc7946ded185abd47962
+AdditionalInputB.10 = 2e85f0a2c540af36f3803e4c90bf88118ef7df7368250345
+Output.10 = 6431c3c5a0e0adbf88a5ef1d7a618d1b10763d0dfe11dbba8058047630d30c0c40e45c116f88ba352f47d051d6ed1c6b55fdcd3ce1699e89bda7a3c29c209da9eacc7ecbb783799bd6c17d975f0cd40e1a812fdf12d46a7a4df879ee7661f3799d794c635664a466dd00a3217cdbef59
+Entropy.11 = a20e88ca7f57ca76295114c7a7521e38a427a9fb5b7a137f
+Nonce.11 = ca81453c651679646daf9e0b
+PersonalisationString.11 = 23b423fac0d765ece85f1a9282f8e97c5727205ffe667dcc
+AdditionalInputA.11 = 8e64128bbd64c06fd983272721b0069a7656874910cdaef4
+AdditionalInputB.11 = cfd615a8abe010af9b11ee2d9ff99b15558992626b15431d
+Output.11 = 390a35d348edf975dfcf2b06327e436145435fe5491dba467a0012e74172b029063ba96bc5d3f0df9ca6759ed275126ad09b5a999723a9a25f3496b0cb2a3795287da0edac6b07ceb1123d43de721ac10ae4353915d41c3b153a7a8a9acedef18eeb3f4093485a44e43cd0c51a435be3
+Entropy.12 = 5701627b7979c249837577eb75abf823984f5cd0a4c400a4
+Nonce.12 = 1e02e2426046c34959b1f23a
+PersonalisationString.12 = 4bee7c103ae40e5ad80a6ed9c8585d291c49fb40c294b31a
+AdditionalInputA.12 = 04bc2574d5beaf8711a127a6fc66115beda575d76b206d62
+AdditionalInputB.12 = 83f45f0ddd859bcee9ae599758a0b7cf9713221f9b3f7826
+Output.12 = bda8062291bc4432ea63712f305396ec06e8ad5606781710e2a8b043030c91810b06bddc53ab24b41e273232c7755a13e255f22e1e0f55d9ba62b845957bf7c9d7765b9051066ec2aa5032ebc2e627c34723b5f9245e3c88d90f28948c91bbee6a5889d4aef514d4c91803cf87092b2b
+Entropy.13 = affafc143621917b595694ecf1b9c6b7be988dd4e48db4a8
+Nonce.13 = c9bb6a309658de582eda2c99
+PersonalisationString.13 = f6e8a7d60dc77065820cfc97ce0f2f033bf2dcaf199a88ef
+AdditionalInputA.13 = c19e97bb79c8508750186932c6fb6573e4770c611cf57830
+AdditionalInputB.13 = 0ecf65a8035adb6346b9f942a4e2170c30a47d36326712eb
+Output.13 = f539cc2e2d0ae7d822edce1cc54fdef805c39f5820ce61eeb47342dafe02f383fb68c6f9e591b41107da8b27ad92b66d85ba0ad02772e199f7a8685a6ca591087cc71c7ed383b0fbcd53f63ddd5ebc7886a4d46568aea167d44e6e3b9d9fd2f831e55c2d6b4a807154b8cac6ac4f18b6
+Entropy.14 = 0142a6db5e49eb931eb3d1dda211b959e46a6c5df36fbf72
+Nonce.14 = c77bac27755936b4026d7cc1
+PersonalisationString.14 = a1de24491d19189e21e332d2f57981f00124f5b8b177f588
+AdditionalInputA.14 = 82f895626afb606f335f5f050f0fdf3b45275e0b451774f2
+AdditionalInputB.14 = d423d43240cb6461402a7755f247573f24fab496e00b2e5d
+Output.14 = b32c753900d4a0a0650d35d0fc918b3aa5f253d4381598ed475147f32c8b002bc08678e45bed1b9b519cb9729972886f85e581c75d3c2c9fd6ced929be29aa3befcd1d3fabefec590ca55612c1a0409446a01398d0e4775a548d118a32f29b0dc29530329d2a7656e5d3ef66db2b9726
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 1a4b3584ff2a80fac650b6951bfb8ee871d8c57ba2e18155
+Nonce.0 = 67b2967d4bf065e82330de27
+Output.0 = 452c1cd1a5c9d0976fd10c8b6835b28349ac99d145d1f00309b846381707122c1bfa8a36f767df992bb6d230b7ee35543085e0f9cfa2f29212ca228ca5dbd5169ac4b97f1ad270e5f993d612d12643f144a492e05f2c8773b93b6c8436417900188a5700dceafa292d3599162c3263ff
+Entropy.1 = 8d1091ff23561b8ece902f5a0b67a37fc3f2d63ccca851e5
+Nonce.1 = b035839378c9fc410cb72b1b
+Output.1 = d17c2a81342b2efb5e4cca2ba0593f9a0ce3f100f0b19f99bf195b8d4ca40ed8a03b2dfac74f225d8615b9a791e303d8ee874d278058433cb099585145a7deae70f92f173bc57a295e92da14b4f61101600593113c69fcd9ba2c184b5515eab325ac0566b2e4dd6e79a9cf1515872b6c
+Entropy.2 = 42b2a6e4b3ddae69443bf81498f8fb92a51b3f500d46b8c7
+Nonce.2 = 7147df6a69dc21bbc855b057
+Output.2 = dca346255660c7c07ac2427724551cf9e9ef7af3eb76abe3036b36a2d2de25df3425ebbe1188714ec215542fdca04ad469fbe7b12ddeaa370afc62610eebc2208efe7fe724897c175dd69ba0f000dfa4c371c5585ec80d91a26177f1947b7dee1f49ee10141691db118dfcf971d1ffc0
+Entropy.3 = f51f942cb2f700293aaadcd163eb63656f38b4cc7dcf51b2
+Nonce.3 = f827f45ab5b8add3a19158fb
+Output.3 = 59a7086f47293e334ba89e431fa5f40562f93682b516ec3c7dfa9bd775076b3657615fdf5ddcc4fd0fd859ce3b1a8faa8d98a9f47d3dbe1690b079ad85d71ee74ec16c0ab1cc87b9a242b2468237fc9d79fb36841783a1efda57d91a45ef27d5f7106bd68662bb9aad18aa70fc9dc554
+Entropy.4 = 6d90d0ec3a3043ab5a42f3bf5c0e3298251c089b050a372e
+Nonce.4 = 62c90bfbe087b7ad6b94b7ba
+Output.4 = 72ae55f27c32d2dd2c4aa6fe85d50900c73c2e0f46e8e04de4f6a5b69969c70e27ee860e09619d26d34108d826bff285f796ee18abc5561ad333d310e6a3a957d9c92a4bef663784df1212997ba3e1432720e35b663630c3c612935a5d6779876200d9e3b4d06963bcc37366b0c40251
+Entropy.5 = 5287978471d45ae1fa089b0def2d6b49b54be0708a8dfe53
+Nonce.5 = e218dfbc430d4b438ab3fdf0
+Output.5 = e38a48aa3a22c64d574c4f88cd65c6569c433c3d24454524397795030c6120a053768f0ca40958c40d6f53b07d8a43fd69eb0699c4143b7afbe297cce0562e5e881af715bc7d6d25a60cf0a94e50063836a6d91f5898b0a16bbc6739ea5307a0309800326abc2f9fc439ce2d229dce15
+Entropy.6 = 1e9f424e39ee8e2a739bae6ec16dfa30855675cb23b2553a
+Nonce.6 = 28536e945486662c2c0c8b3f
+Output.6 = 0e0df3c867fe9d932801e4c2dbee521887097a93afbc0add63431f01d33dd8cff505ca80569f254f32791b8a7b08744c25b246a35ac9b5f2c271a27e17d6c45a8a33218bff749a041ff24f4ca49af70ee0cd131d66266ba7f48aac8c873273ad41b045cc5da575a14846d770147d0ae4
+Entropy.7 = 77002974c7bb8fcb393527eecbf58e200d11a9c420004508
+Nonce.7 = f480a38a3ad62909321dad55
+Output.7 = 825902146cc12c31fce501eeff90d2a5ac5e08539c8d0e776aed57e6de0da7d781cb49abcc5f6b6a9242e892c3ea76f2a2ef02204f0b070ceb0a5c485a0e8e84b11efd0845dff3cde293c9c62c81c1118727fe698f3668611cd3846b0404c8b686e0d868b77f17ba9224bc3f58e865ce
+Entropy.8 = 2a04f83196c1ea689c8a57f8aa6648a747eb2ba1fde550fd
+Nonce.8 = cf4723d5ae1aa8a7e327fc7a
+Output.8 = 43feb5a59648af2b23b95729d5387bf045dd918d6a2bbb49205f90aab25b20f6c7eb41f40c11e2665b310caaa67afbf4f7751ed911f55038f7e4393bca3004b0a0c7252fd60dac103b9b7ac2ead22ae4271ce52d67f8f406a5752bfe5197f2f44752984e59e6221538e78c63c9837748
+Entropy.9 = 21d8df582c9a17dc0d6df2d505c675a7ca2fa37fdaa8992c
+Nonce.9 = dffd0d50506d5f4f572e825d
+Output.9 = d7bc0ba5e60c8cf7558c4bc8a3e0405a913b8910f0dc935fc5acadc12149bb2deee1a5f80a81c7d902ee0bea8dfc7a7674f9043c3b29ea41504ccc2b240c1b01f66d363b03ecf52bdd2c5cfb29ce26a63cc162ffb66bd36c3cda913491dbf96ed960d1309b9256c04cb185210b861992
+Entropy.10 = e5e28d1d4887588fc400af05f9aaccb03be29cdc4c252bc6
+Nonce.10 = 1916a7c1e10c6758a48d5036
+Output.10 = 0af6b14ea82c9b6821b7323d45a1ff3ee86f7929de4baca319a48b66e033190011e2293148b5a1b522a4c130acf983b2e87be798698cdf35fdab50629e7440594e7508f35e38a98a3f15b486b74c314b6eeb9a33eaf39e8033c0845242e07d8f1feb9fd45d32fe3195a7811057e6419a
+Entropy.11 = 79fc8f02948d201517b9946a255dd83f9b46048e38062351
+Nonce.11 = 5820501a892cd13ad820f522
+Output.11 = 8a823efea75af7a40af02a0854d59b4244221099ac247ea28557a78e1ab67002d6bd6d9a85c92bd0bd48ea007e4ff9562bf4cf039d40d0e28c868d0967ea7ba50e6b90af4755999a9968827d8e8158f2c62ad97472874076640dbfdc1d3dd227b7feeff45fb2536f0d49c8328af4def5
+Entropy.12 = df7d2599bc467eba6faf4d43c3b8034b81ef4a8ff2e5f7fc
+Nonce.12 = 879236a06a0a640064b09dc9
+Output.12 = 23c77304f505fc3d25b4af24d1941d4ce8c04f122d22e1393177e9c75e5b2e11cb3a23bb889c44e750177f9c4fd0bbcd09ff3d6b580bfcee8982d742846145e1a44725a05b5ce31815cfdd90f59db8689373b8803f87253c22f036465c85a4b556ee9f8dea177d633906af53a6032ffd
+Entropy.13 = 49cfdcc0e60d5a39d5b1dcd889da0b791483aa73f4959a0d
+Nonce.13 = 22d6a6ce73d457bf2cd78013
+Output.13 = f880c0a1942c57065129ac7b4604ee4509f141cfdfc7e90ca2390b744f8169eef4a90d90f88d7867c5e6001bf58870b4ee29b83017c956e62f0895ac28631ca8f7fc9ff1c71e7f26643a709ebd2ef30f83f612824a94d3fe9f9845b814d817d48eaa91c246c4f401d54d94903d7d45ad
+Entropy.14 = c617061099a17392c3092d27728b35e59eb45814e9df9fa5
+Nonce.14 = e1634c0d96cf91c53b063450
+Output.14 = f08234ed8621f1f551cf49ea60140313a71341f6886c484a06e74e64aba6f8ffc2cf1edd34cd93e836ab033fb0893e52e01da9b3104fe49584a45447c136222b1c1f1d3cf406a80ed9d782d2ae277790eefc5c06f954e654f7f283ddea79d2160cca1f63d0ad00eae9e882de34ba4083
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 04fe18c01c70eb0779aa73572144d0b81954768a73e70ef6
+Nonce.0 = d8d2773dcc931ec0348bf07b
+AdditionalInputA.0 = 52d9163da92b7c4fee39e39f8d310623e16ed1864e284de8
+AdditionalInputB.0 = adf9b40f7b95d919a3fa3d8d3322f305413db70045f19406
+Output.0 = 4dbd5d3e1a0cbabe3a5d6c275215e2de672436ec7215b628b4af5d4992c9fe32ccf75e812c3ead43717f553b38950ac35e68e057fb140d3e977e25eb9613b52537349b2f922a90ad9e92c67b2d3116322d9cbfd554dbf011272b0d3d9b4c1efa9c87d249e1b2e5ce152b46cdb19b8af9
+Entropy.1 = a6a2043c9d5a35edd3a87c3ef76d680fd4e0792f0d0d1029
+Nonce.1 = a74e9ce171fdcf713695ac77
+AdditionalInputA.1 = 9ce76390991b8c56a252c3e9355adfd0dc21f642701c431e
+AdditionalInputB.1 = 5b08193168e52f4565eba98f798df4ca8170fbcc47b158f9
+Output.1 = 7fefda34735500595b8bba1652d5d86ed5426707efb50631de3cedc2417f44879a641f1165fca2395577ab62a4efd3ebac3820cecaf83428ed882eddc6ad577ae0e4d29cc712e504cd015232180ce9d0b062dc554688f25bcd5e3b79e9b906a11a0ffe122c8928410f0639cc1dfe699b
+Entropy.2 = 3ceef6b6a4ca6aef15044374a5a2258f482f0d41c933a162
+Nonce.2 = e9820df285f44ebd5c0a7458
+AdditionalInputA.2 = 87f498a2c94e4a8591555a966d85aee0a186027de0334eac
+AdditionalInputB.2 = 3ec1f65ee04953e563ea5ab65ca89bd2d8337fac2a93774d
+Output.2 = 9a9b0a9f6fc51233e18cc47e2002c463bf6ece89d739071852e1b2d532bfcd7779e88d84d22e0506b57a5c032dc89d26eb4840a48ddf3a65dc5bc31383cc2c638379749cc33c826b1cbba5cf425361314db2204c47d3dc0d38b6c017fb733445b95730ad7bc557484ff29833198f64ad
+Entropy.3 = c25aaa8d76c66f0ce021a388a6dc8bc475aefbc2e18ea001
+Nonce.3 = 4e22fcd37f19f936e097dcf6
+AdditionalInputA.3 = 44dd1356503c99dffe7d8cf211643c0d629f7ad1d593656d
+AdditionalInputB.3 = 68509fc262f191ea95208c76c9b84f9ed182a168490fb1c9
+Output.3 = 8b7775c0632da15ab6c8c56203b87765625204ecae760f01ac19431ee4a58fa458ee565e5ef54d834bceab6a67d0831466e7c15e63da2adb6bdb16e469dd9f460308df80476d32e2ece0677361f07f3241f2ee93e39310a60cdad7fdecb4cae022e48bd2fed69d7937e4b200cfad478a
+Entropy.4 = aa6a6c7083031e4e4e67af56f2e9287734b1f4112088f696
+Nonce.4 = 4e9e1b17f3756c23370c6d00
+AdditionalInputA.4 = dbb5237e3d8184b077a159f8498adec1da07205f1df5a927
+AdditionalInputB.4 = ca99c2672b20e6aa37aa2d8db5650ebb2dee685614f7d43a
+Output.4 = de90ba7686bd82f034daab63f4b0ae636775a36d6b83715655f055647d365c3e5dbe6ddede8d05dabc74a5f04214399c606c26213a5167dd0060bf71fc8d7660addf442ac11546f482602b66a883011a39b23925ccfa882f2fc4af178109d056d0ca962083a2c10e5442f86976a9e828
+Entropy.5 = 0114a3d59ec9e8d2ab2ef6ac509a6ad739ca4aed1ee2d515
+Nonce.5 = 027d64d479bff5c27b100bfe
+AdditionalInputA.5 = 392a993b8e5f6d1f1dd0ab0e8a88d13cfec95c785fa0b384
+AdditionalInputB.5 = 555d0b602dcbea92b5653467b0d96cc9adf792e7555e826e
+Output.5 = 3e9a92f64afe5caf818e2df55085c7f11e87457007bd3feb5ce47d299ee9eb0688f08a1590d4f3b02f9655f683b743ecba6b601054e0f59ae68d713a17b8491387fde3d09a2c121175aa3b0647cc7af467918b876437c8bff8c1fd44e81fa968d907e1823eb31ba6acac0cbed087f7a5
+Entropy.6 = d45cc7d8ef81027104b1e477607310cab779a6e756524905
+Nonce.6 = ffc1d1c455dfbb64cfc72486
+AdditionalInputA.6 = 081da5764e197d2231d8408467001d9fc62af0864aa3b585
+AdditionalInputB.6 = 1ceb8e1ba42123046c5e985e440e2d3defa794ce8d02cbcf
+Output.6 = ee691cf740efef2619c839c0df42d54446f2d718ab1d24ab9e12d740b2d3138543141bed82442e509436e6f424cd00042b8eaae417ee84badb11fea087297d44bc4cd05cdd22cedb1b5b8e336e0bca8ce00712d573d480a81144dd19c08a71c8f5ff4fffee8b157566cf146280ad93b7
+Entropy.7 = 394316fe580f0777e846b4b9b0f320353c6279f337d52c22
+Nonce.7 = 096fa0305f4c34bfd499e6e7
+AdditionalInputA.7 = 286c0e78e078e116649cda0a60cce145eb73f0ea2157a505
+AdditionalInputB.7 = 62211e071dd9ca0b74bc31976bb0278e1e3147581f2222b5
+Output.7 = 07561a1c877000f1a5821e01fc5b4085fe12f23d6be447068aa955153bc2994ca036b8e4fcab23ab2d61296c76c53350b88b3ac0431fb30123e5cc36fdbc90aa377ea143b0c615c39c6ab1e5d1ac26a2a381fdbbb66d319095ad2a620eff824343dba67fbc83e1e2ce0725e9915f26b4
+Entropy.8 = 1c08eb8091f6699c50fb280daa9ad51779f8a1f436281747
+Nonce.8 = a84fca5456c589c805c06f66
+AdditionalInputA.8 = efcb121a2d96a8b238b16e3a9e3994e54a929ebeaa22fd3d
+AdditionalInputB.8 = 7b794fb66048297ed44d089ae7811578ab93efaae5d0c9f5
+Output.8 = 37d83fc06dea430f2a3b20397191dab5cb6845fb519dcf4a558ff6678c271dafa3ccbafb803facef82cf5f2529b5276214bc5ea0b9a1542c72fe50d97c4ad106a246363176126093af34752d148d88d9671411a34ea06fb61da15e320a3c5643fa2fa54bc56b4a5aceb0475af112946b
+Entropy.9 = 1ba96258c4e4306aa3600b9a8f0c521109a46d08dd1a8375
+Nonce.9 = 5ac982b29fb102947c51de9a
+AdditionalInputA.9 = 9f0d1c1cfab6ed13f74b814f63919b71fcdf10d1df05ae38
+AdditionalInputB.9 = 72070d604caee6225a8c907717d359dc2d02a848ddb7eeb7
+Output.9 = b08abb3405ad9594952c4cec6165f9375c9827c1cb8c58e9c79eb6b944a9c5e363db9dda5dd7b3f7c6035cccdd614dfbaa8c548560c06f4393722da3fd6ae06b483931fb508c5f95202aeeb839d94338ac17c2ef0ca82664b00621edbe9be46c9815381a5ec54a484ac11a0a88c0d21d
+Entropy.10 = d7bdc1ebf496da1eff58e5186a1d7a035e76a8ff2f83cf0b
+Nonce.10 = d54a573539d9c188ce5dd91f
+AdditionalInputA.10 = 1d7f360c6ad4d4ae2a7aba058132a0ba932ff13fee459285
+AdditionalInputB.10 = 563368ba97764aa6dfcf57ef31eb913b025f5c9c4f9f56fd
+Output.10 = 23db14b9e262aaac695bb33c48812582fcd8ae9b26bfc5e92c247c33343a778d0a1de9655df624959795a042160b46d920bc9bfbfa42c9e0d03311753cfc26e9b391e196391ac399f9bb31c03ebd7ad2c422d8dd37707d3281abe9e9485dcaf08555fafc8b304b46bcd567e88b3a03c9
+Entropy.11 = 93d14e6200b3ed2a8d4a7226490da3ba6936a2f4fcba1c70
+Nonce.11 = 2bf76ffb27bbbb020953bae0
+AdditionalInputA.11 = facc4663ff63ae7776765043497bb0dda1884f9aee4f81c9
+AdditionalInputB.11 = 55bee081a8d3e334c1b3e33a6d0a0eba93048d908b2bbb4e
+Output.11 = 159d0613e4fa05800c320f3ce188d40440f367ce7a71e3ce2b14e7a5e5a6a106bcfa46184533dc6a5aef114765845f06b2b53152ff370d1b4da09898e25000a3659452ffac0ee6efc6b0a14aa88aa5fece158c53df5778da435e850cb31c7b18372d7358b2a0d3db7c606f9d0d03f884
+Entropy.12 = 8caf36ee5a6e0c2bf1ed2666ac4d7e94cef284ac243568a3
+Nonce.12 = 1be6e893542305eed4574b77
+AdditionalInputA.12 = b3afa95380eb50ab1f8942148a9254373c7f07f1347b3c73
+AdditionalInputB.12 = dce3c8a1e10a064876d120bbf354e3cbaab455f3ddcb3a71
+Output.12 = b4cf8f0b89d6f93aaec9fffa072a04f817dec9228df08f424c22e431cb45c3836ecf5ae80982b36c4b7d7a03798344066fb4922663c6eec0771adebc5aa20abd84490733831e7b707c73778a395e7af07943cf73354736c06098a9180eba242b8b2043964c189dee9f1fb4e233eb8b3a
+Entropy.13 = 1fdba6009c876e2ebd04a907f38842468d9165406be44133
+Nonce.13 = 6293d81c807811a26ae25782
+AdditionalInputA.13 = 65806ae51630678cf1a7fa6f1091849b7678324443347dea
+AdditionalInputB.13 = 5747fdaf1d4be67e6edf9321030bb328458b62ade8a491df
+Output.13 = aa6f56f627f3a5de4f2beba08590cfc8e89ed39b87194743049b8cd66c640c7d66ec20750341776a75956d718d454e58f87c2b402bde4487d2bfdf17e25a57484d66d95dae534e3e92cf298bec64e6b772df235b2b653dbfb549256f9fc556fcceae6d9f671f524352c834d9ff997eb3
+Entropy.14 = e2370bba6e4af0791a98c2a2a5d73b2f1951bd0bb0b1a5b9
+Nonce.14 = 601da7b3cf9856a79eb24723
+AdditionalInputA.14 = 857ce19dd6e8a45be185875f1a98911062045553e8d28ac2
+AdditionalInputB.14 = b5f1998f0fa38145edb86ae4d569ef4dc2e0aac0a815d3b1
+Output.14 = 8f0d978b24bae2a0665beaddfa61e8896ed7976432bc4f7c444699e30b8da1ecbab8990bab9d0d72ef6f6b0b27ede12dc171a43a14092d57e3999cee71b1356da5f29b17fec227ca2a4887bd990fa33e1e01c8a9f900ffbeb300cc5ce9d7d2e25a44fafc07e34acd61d425e0d36fb0f4
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = e839789d37a736a88d1bd2f4c87dd401cffeb5246a9f81ee
+Nonce.0 = 42c92fc6db45d2931676b2c4
+PersonalisationString.0 = 2086264c9ff9be5c2bf5318cae970635958166422bd14fa6
+Output.0 = b058f6a5b9836edacf1f83caec4d389189464d5b443f50f17191f94a0507fd905bf498340975e897f5e4ecdd6f6158d777139928724bada3d0f5b4f671f37869d58907af0ab9c70aa911101157983992d0d56d55801af5cc13084331268ebe6c0b5556fb97007bf67c48630f4a911c7f
+Entropy.1 = 0ea2c82b18b911163b422282f9dac95b7dfaac5334d29b4a
+Nonce.1 = 6a83fea0e11425c05a24c0c0
+PersonalisationString.1 = 7532ca78cd321c48f7cbc2361c2446214970e0799e2acd51
+Output.1 = b155b82a6780d690821ed8aa2a73d058dec1b8970872625c8ee97daa47bf5af9f5e27a89a06b988afb128acc76208cc6c497270e323c740a8a20d35b712f4771787521350500872228ced8b999062c546121bfb778b4e8011bef854122fb82d6d45b9a0d3914d7ca7642d3de76c26996
+Entropy.2 = dec13a7cae49d037ab66a93030bf0616eb10f2bd6f3f136e
+Nonce.2 = fbdfa6b3fbb3d8a27f01ce19
+PersonalisationString.2 = 882a4db945637535726ab8f189541a06e9d2d8f0cd592908
+Output.2 = a0a2a590abee813c6374a01f28c4171553fa9f99167bf0d7ab01a799b4b6d8f3a2d662f08ed819367e442d5a5ada040e45d1d076a5cdedaface5f476011cb3d3ea9940733a68395188ceaf5352218c08b97b4e4ab6c912345d96684e49c2e0fa6cd3fac867c226e35301ca1f8eb112b7
+Entropy.3 = 3356b274b94d4c72eb99daf36a9f40f4f31fb5dfd8930e81
+Nonce.3 = c61996d830020a6044235817
+PersonalisationString.3 = c304ba70a1ac4295aa7a932f17d0a3334ce383c644e2f8ba
+Output.3 = 94b23e0d02aecead7adbc6dfff9243cb2a38771e919b98b9a33f9cd5dddda7b80aa5e9916fa698c72e2450b5795cd7539af03a699f91ff68dbe48423c0bb00f906da678649c1cf1af55aca64a57fd419d7a30fd8adf69a8c35c185dbaa921787d5c00187e172124ab42354bffe308431
+Entropy.4 = 19382daebb9bc8406913ca5350e8392b3bd8b283016c77d7
+Nonce.4 = d23d79e1dc3117f287d23038
+PersonalisationString.4 = b6415d575baf6a14141a36d7e9c998acf578140064d998c5
+Output.4 = 96789132c221902c8f3b7802707177dfa69f101141e3565b6863935cf3ae7d5f952f0d5a737bed690a714f3098613b622206566bb986209e1a3f00fe24670b3b92c989224cffbebba02dc0d09c162cd9a7afe25c034308bc819278dc9658a8da59fca2272baf293f8e27e186d9b932df
+Entropy.5 = 5434ad8f922c1c1c93d5fefe9bae2f8fbe12eb3396680e69
+Nonce.5 = dd340b0f6317efd7bb01390c
+PersonalisationString.5 = 1403781717b3adec9299526de1e5fe76b93381b82c267204
+Output.5 = 2e857bffc0907280cee3cbb6b9f16822147eb2cb2afcf576c9987e0d1c485bcff8fda87a371e1681d9a584fa447b4cae4e37af7429c798753d4e2acd6307faffc7db6a0b81c069c71eab5922ab6e1872cc0c0f0528605152a7835efb5325c11c0dc9ce9e00740c8f2e403943cf8bf893
+Entropy.6 = 0cc10da97f81d9cd41390743e773edea0242b0decbcadc43
+Nonce.6 = 0057c20913afad8217178dba
+PersonalisationString.6 = 56d0a8710290cdb8f41aa12980c45b5f146c705ed75058bd
+Output.6 = e3897fee70be31a5d2223ac779f22902cbe76cc2c0f337f62d039cafbf541a23e0c8a4844853a671a587cc5348775247f833888443087cd402ddbc27786297ae7de5bf14ba1d2265d024eb4c11b53045b5adb186a4523b6fed3a28e5c7eeba4f8bf41322c72630726df7f6913226ec86
+Entropy.7 = 012474a6f096a70e3511343211106543a9cb3c6be46deeaf
+Nonce.7 = 31ebc4871a83dbbc0ec9602f
+PersonalisationString.7 = fa3722640fec20fe71bfaa70bce50a6a35427b9ebef86f51
+Output.7 = 784c27824d81cc95d3a307b7e65614f446682ecf9762e06854539c3367cc09884b3c4642ebbdd7b0cefbe5b83b4f22bd52af20a60e2d9bf0ac2b9203059a7b9d3f6de40c6dd8f1a84d915bbf0164e07be5a80cc1ae13b1d6375aacda9dc469dc3f7aea02be1db0a8efa0009bf08d0a8c
+Entropy.8 = ea6de830cc196b848dc7c05babca7da34a4f266b6d6e7f78
+Nonce.8 = 2b65ac25291f8140482d73d4
+PersonalisationString.8 = 6d8c625e496022ee09fb1779d3dbc07f0e1be6cfee78108a
+Output.8 = 8e412b663a83ddd7aca7d9f118687fbba248ac0224fe4b6e1e8ab2e0e3553fb599f0c5d1f3883b178ae121dec34f27d89426f924de4f6a82ccaee6b5466bae13f14d3502e22c14215d1b71bf74feb8ab75343d228c3f083d8b3f4a355255cb286e17899a4f516a14beaf3d1e6dcbe1a9
+Entropy.9 = 20121d0ed093ddbbd1c400ec51d2c0f09488bd32db654c89
+Nonce.9 = 9a6160e20e6b1bc4fd00ad5e
+PersonalisationString.9 = 3ee55b010e4449b799626de4e78f11b1f3ba66c95c171d81
+Output.9 = bc7bf567f09e46cce33ef5013630024ceaed8d228b28577795fba73d539fa61b339faa0c3e91ee2789028016e723b82bda514f501bd585e57de94a02f31bbe7cbe160504cc28f84e96c13861fd93337d6eb61d78632044ec6f8dfaaef906d4cba9b511e8d40efb28d9c3e8962e097b9a
+Entropy.10 = 398c932ee4b1aa6503e6ab9f921f2b8340bfb208181427f3
+Nonce.10 = 029380cd030e5a2240276e61
+PersonalisationString.10 = 8908bff3d5d20051990e9419c168816e7b503a7d611cbf05
+Output.10 = 302be094ff9249e2774cd22bcce924989e85ce7a8f23f247627908bb7ee72641ff0d21cd2ea2ea89032f73d54aa7c477a994083775fadb9789d46c7048309851101fbd70adff9535c050895f6213585ca2a69bf7d7b293ea183f3e2a3c6019289e0b5aed998e246090af0e00c26c0ef5
+Entropy.11 = 5a3a85d2b93ca4bf5e37960da12b01ff5331d055a439e755
+Nonce.11 = ea3934c6d853e6b210003157
+PersonalisationString.11 = c7578c21d72479fac2ca4e09c946596dfecb4300f36a5aa3
+Output.11 = c58f3a02b2d4733d304bcfa41fd4fa420a1c063e221cf95d993a6fb941bed1b8ddfc2ee6a4d0ebdab393297b262cdda33a5723d9375be1fe6eb1bbc72360c381f2e6baf42ca72ecdfd5b63a8276c3a4b08c81de482f9e1ce9e28719548a7c32a676976f8b0a5726539527844c00daa3c
+Entropy.12 = 4257218dc21a8e500cfcbeb8fa6fb0e3a22872d257d84514
+Nonce.12 = 1760652536bd7cbb5f0a118c
+PersonalisationString.12 = dff57346d46a35df1303fe5f07dc71697d56e7363721f006
+Output.12 = f6bc7b9253f24ca334ba0c32daef8c34aec4b41b624dacddc9b8ca282be67eb0c61e992756007fb7fb7ab62de86cdb42ba8c003469ed013f3dab8dfb2569b34e69cbca52f1b562fed469f064acfbdea0ec2daa3cd8b767768f6d593c5e0cd198cc3ed6ccb8d6eac531a2e63aa5fe6e0b
+Entropy.13 = c45ee677a9b6888d24ac4cc87e88843274b34866ef7d73f2
+Nonce.13 = 4966f9a2c5de62ae383f9438
+PersonalisationString.13 = a8d68661608d4f7114a8f7fcb94db2db62f23626514faa82
+Output.13 = 0a4f8cd2ed510ddbd9ef73f6277884ababd61d60255a7f874f3559a22d137b882a7a56cb8ed471bdc82cf652ea401678ea412661a1a0637157f75b0fcb8347d073a2a5798cb7ec7843dbf480c5e9ccbbd8a2963e4a2894a9ee6aa229194859abc1119741b99230637665108b822afeb4
+Entropy.14 = 3d313cc63caba556d7601cdefa066fced1073d661a95046c
+Nonce.14 = fc382061e29c4047c6f05dde
+PersonalisationString.14 = 9b2eaa4c2a229cd2bc5de218aff95f6e5fbc7ef150bdb50a
+Output.14 = ad49119d6b4f25ba34050920fc503d3d0d331ac2535d916a58d781317fcc2b1117618e9105ce192651ea9e19fa6756975d207c662f2b464416d849cb67b9af52abeb84f80863943af99c7916e78317a091ba90714ec8620f661b41d648c15c06e822329cd7f145446c5c3630a4243281
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 022a4c6703920a5689df3afb8334e81baecb4fb8f3c6191f
+Nonce.0 = 8e686ec6b19acc2f5e669f3f
+PersonalisationString.0 = a1722895c6cfe54ff7b171298f9ba76a0e2b5ed99fdf683a
+AdditionalInputA.0 = 9f9b8a01381aa5d3723dd9c40c76b597e36eebacdc1e7e42
+AdditionalInputB.0 = 2ec442860656682e7f186aea817cdebea3bf887326cb955e
+Output.0 = cb73479eb95c8a22459a9537cb835f68d57102103ee369c8ad78d6a90f1476c420892ccb336a214dbb209a5347e427a5d680ff2181bc709f1039f8183ccb102cd275d179a807c99936832972ce652712b0fc2f3ca16c1dd941f797c1e1d81ea0792e126f4ef29726fd73e8d685cc7628
+Entropy.1 = 5cb8edf12ef46abc59dfea601102d778e076e68ad5dbe4a4
+Nonce.1 = 265792a997e7acd615426258
+PersonalisationString.1 = 360f42fbc785e003e4c242f1a97eacd4d1de88614f89ccb6
+AdditionalInputA.1 = 1121e26ddc2ef9a7a69d44cb380e8a91c4fb1f935ee59215
+AdditionalInputB.1 = cada711ac36e8ecaefa4528fde8796771e17e7cfd767c003
+Output.1 = 049e621331992cffee43fe70d1838b392687bab762f14a76786daf5dc8d6ca0b2af3f048c3bf9b2af49c89c9c7748e0fde8da42ee8d820e0d705c9c70a3c296a182454ef116b50c458cca219032e7c5928315aa401ef0afc3cf679a62aa0c031de0af094c022ee95650f7d9a69c303b9
+Entropy.2 = 50162c1feea7ab594626a8fe9711c86745106ae7e14f378c
+Nonce.2 = 631def7bff27c0e3054071a4
+PersonalisationString.2 = eb1560537c45a751136dca5c1672b006524234aae8da0302
+AdditionalInputA.2 = 7ba520e5e707043967cea95168828f0a918d05e46db7838a
+AdditionalInputB.2 = 69d548527c7f36226d339e64fe66746b0341f2c7c2a5b1d3
+Output.2 = d670c6c28adfbdfd8d5e55ccbcd2421098b3369078a9222080e737b8f6b9c0875316010f3417f9eb1e009fb9942dbd39fd7b504473063f4aeae5feae49843fcdbf15ce04cf2b0d367d925470b0051630c19ba65b2c55db39be08fe1c272f343fa95e51096e09fc20f255a8a4e8cd580e
+Entropy.3 = 9aecda215824e5d271680ef252af5224024301ec79950591
+Nonce.3 = 6318b640058df9f89218001e
+PersonalisationString.3 = 11a33b3a3c7ded4accdf7b5b8b1b10653710abd111ce4db6
+AdditionalInputA.3 = 06e4f817a340e346d084d7705de6c3c5af500dd65f65385e
+AdditionalInputB.3 = f3e26425719bd4574f29198a60d7a685bcc15e82d2be5c57
+Output.3 = ccce37199cf030ee149b04e66852ff5187942174854b41e64617c53793d679c9820855d022e0620603db0bf1a39da25c9b4ed5e6545784c0518dd0b8471090ee7d0d7f8a02d4c084291b57b82cec5d1633257a98b1bb3d4dae76405c989eeadfb32303725086d7a51b9c7ff19f274511
+Entropy.4 = b1b4f960a8229eb924b963d27b476e18592084a1dcfdd21a
+Nonce.4 = 373bc05e7b0b9a30ddba9e27
+PersonalisationString.4 = 20f41ca210bf19798181c3b9ab6e699929cc5e75eb9ef710
+AdditionalInputA.4 = 5b116d567417ffa5881b45abae9bdd2f99436bcab8dd7592
+AdditionalInputB.4 = 6ba879343166cf4c3770e3d521afc957ed6c6af1624c21fa
+Output.4 = 9eb9e267c76f449c22f9d2de68f4741d4676d269eadf60b9a8762c8e60131375b456b530bf2b4adac3976453af4e7edc6d3f50237a2774346f0c57c9ebb50979bb5147a114d55a45f375abd4bdacab53f9b5566af7aefe6e262fa1c2919b978ddc71385ad3aab88289e81dc796135ad0
+Entropy.5 = 79019616b51e0cdb2853b6037469ec5c4041c754847b90a1
+Nonce.5 = ec784efa9dfe6971c1cc8e55
+PersonalisationString.5 = 7d395c2892559b4ae1b48dafc9e5c5d3c0ada4ce5face41a
+AdditionalInputA.5 = 17c03ca3bb1c022a7d5542384eb533cd6c0348642d73fac3
+AdditionalInputB.5 = 88d1ec5ae9dbf834c2702d369c2d1e9898e46b0b6304b31c
+Output.5 = 15df85c25744fc8d7e7454f57dd09894bd31677e310ea83cf698521eb9874648225b804467e6538d99b36a3d9b9c83ee17fbc74502edaa1f7a81018226ca884868fb60239004b0923effa4f1e26b1345fd8bcc90d4c2ab6c7ec50142e493cf49d659cf90ecd54150dc0fd9703a292680
+Entropy.6 = 070a0106f92374d62f299758e69ae583f842ec72af44d970
+Nonce.6 = 0f093c2db27472a83e260826
+PersonalisationString.6 = 28f13ad3dec908373d08b33d3bde86e0a54812617ce6c09f
+AdditionalInputA.6 = c7fc449d3f11377c71d9166c04ed1b0071857ef0d9fe8fe7
+AdditionalInputB.6 = 9f6f91519e9a7c6843237797f1d227c5e9cf56a67898f3f8
+Output.6 = 419852b29cd03c1f38d5fc09bf71f45587f2efae5edf856d1c99b66c83cc7f630b9317ee2ae9659ae1958d5dfded5ebba0a8a030e7d30b4028ab95d0b2e531a86c618cca87d0275389f9a0274312fd9425e5dee6f09def20b733bba07f07b8ea08f68d88d8ba3926a485494153fa4c61
+Entropy.7 = 64dfd94b910f10e4195ebc69e9681ce3ca4dfee16692aca3
+Nonce.7 = 631f4b1026996f8cfcdcf575
+PersonalisationString.7 = 076162ff8bb0a469c61af3dffd4f74df8cbd5b708e08730b
+AdditionalInputA.7 = 3fac3ecc0c79a92dc0d4a1cbb3a9a83d16245eee47ff0efd
+AdditionalInputB.7 = 6b341ca2ef428b54a1ba9ba6fff4187884225b8c8c281c3e
+Output.7 = 2c2fb0c6a281525c0261a32b5e786574b4e4b5d6f0d56c3fd25211722f4459dcedd912beb885429ab1041f8b372c343fd85937e18be07b0b50d376a431be83cfb6d17b05a9a8051247ce9a72010b563e7855116da31406fdbedcbb673b939b19facdbe0eeb2e8a9e8ba674e4a8a6d3da
+Entropy.8 = 3d99701d332b175c838564569dcd34b939b26bc5115d38b3
+Nonce.8 = f996619e6da316ff30654a11
+PersonalisationString.8 = 624fa1183b896862b3a91d97d3d41725a0aafaab37cee49a
+AdditionalInputA.8 = 7cce65dffcf965ee145980387129bd583ea14924c6a8b485
+AdditionalInputB.8 = 32a96ba7c738919bc70ddaf7e56ede000581745cd2d03cec
+Output.8 = 710222ee9e0842e124b28c181e4516251d6f9b056153f6e99317ae923fbbd7edfecceb88f6972367f9d0b37895f8aa3b770e27bddc880cfaa684ecfecab130358589cb39580df3d02a5a6314bcff18b42189f05f18118f48a28ef6d97311cd37b7982dcfbfd23d098208cc04c726e8fc
+Entropy.9 = 09d68ab04034c996e0e5e8777650d7e2a92275d7b53a5a59
+Nonce.9 = f0f7e8cd33d58b343e80f51d
+PersonalisationString.9 = f7bf58d397bcd6bcea308aec59efa4eba816e78bfc6e6e00
+AdditionalInputA.9 = 0bc458e7a535e904327963615229f32e1e4d161ee5a169ef
+AdditionalInputB.9 = 57f2ba3ca160046f4be60a9a06435f6563df283aeb2ca20c
+Output.9 = 0691a9cc63f0f085333555830149f4cbd38c533c5f19f6da8e7cdfead5985d72995f4dfcbc2d0591e22272ea82d3771a2c0f0917ffda91615f1473675ccf8327128672853e2fba30d87ddfc35294031ff4407c3461fdb2285c08c13ab197f8cbe262a8def84832cb12d156bfe812bfd0
+Entropy.10 = 7c2563d00e707f404d1b64671cda1d682a8b0e016915c5fa
+Nonce.10 = 6cb720fe416b4936f6a558df
+PersonalisationString.10 = 79a7332689b27c25d555a4da362247da22cfc4b050891b4e
+AdditionalInputA.10 = b078de49137002c94594754fcd5e87d37dfb3ed443e0a534
+AdditionalInputB.10 = 980a9816f5054a51a6d36dcc57638fb328be2511642c2041
+Output.10 = 5da237db4ab10c582af1a414895e1123db3332641213fe2b98b6bc0fbd0bc5223d4bf9279e3c9d29cc3cfe87f2690d19f1ef1c59c81a362c1279231be9c4bc11aeec2b3850278c2de9811b450e60dc630303196bf6396f1a56ff9c253ba73af07aedcca761571e9e705d3eed8c07a77e
+Entropy.11 = fa5e2962dd0b9865309ac777b82f71908b8b26e7d64a9d58
+Nonce.11 = 7ac03535459ad4c37a4dd6a1
+PersonalisationString.11 = 7ee7f75c5406360d50a484e0236e2144011701740238f7c3
+AdditionalInputA.11 = 25cca4922fac43959104249cad6b5c70c703c760ac81350d
+AdditionalInputB.11 = 5fcca95cca560af454b26f7790c9753a448fda278b4fb650
+Output.11 = 230c6111b9e211f39f54d8d4a8c1bf0a01263654f13e8dfdcf1e7d4724e7f3232c5fa1c246eee098621d6068a794ed5579cc8c32340efb49da83c0d649ff508ce963c0ecfba1a17af432e35d95b153470fa0633ec48f7476b47a1be6f3c432209e1fab9f544cf6ce56d3dc58aae26c82
+Entropy.12 = 057fd61e010f1654f6de8e2630c9125a829089ee9cb75e08
+Nonce.12 = f302d50c96452760b2300db7
+PersonalisationString.12 = ef35cdba4133e492226f777c6549582b946a55c7f33a801a
+AdditionalInputA.12 = a2bad98d0ef95eda7854814d4125dde5cbceda380e000513
+AdditionalInputB.12 = 65c7fad6b33db5314b2a5677e08f2b82fd5b32c82dfb87d1
+Output.12 = b62867a85e60a8e56910f86cae706f601e8af19e774fbdb1fbe6fad540bba5cef4b6ed3dc30d6f1431d9b39800112c271ff96a3cacd596cb246deea7a19a70d026254ea4a741b6fab456538da412cb0de7de93d67cbeabcfcbc8cd7ae83cd97dbaa6f77be17e79be36e563fabbdacd77
+Entropy.13 = 988cbc2e52b0a36eab9706c7489fae942d2ab0f22eaf0305
+Nonce.13 = 9d1ef6c55654a18bf23a208d
+PersonalisationString.13 = 58b59b66d938016543dd33df1ca9297f9d88fb77ed6c482a
+AdditionalInputA.13 = c225736dbe448c61ea7160fe46c93b1ea1ee1e8b6ca4b3ba
+AdditionalInputB.13 = 4f641f932289a3a71df6fccc3ed27103eebbf6e350c58d9c
+Output.13 = 482b711fffd2002377d900ae25a0feae2e5e6e8e4461bd894b68a9ca9dbaaac40df905585a7e1b5da1bcddaafb71f1fc2091b9c690442f32d7aac8299cc9e982d596a160844c9294424b68772da017b2e136a40db3cd6b6261c6b57061dda5e98730803026f35c9ef2b20f230f9aa48e
+Entropy.14 = a1c84e56a24acad0287f56a89ef64c0f2e954e368394eda0
+Nonce.14 = 80a078b026818b775885dea9
+PersonalisationString.14 = 9b2df6661739c99a27e4a063a838be615b4cb5b4afd118ed
+AdditionalInputA.14 = c9aac7bd9f15385facc344dedcfa754bc9f4f30277a3555a
+AdditionalInputB.14 = 42de701acf5622b30e7672bf7115043a9912c1758c1b316f
+Output.14 = 972ccd5aa60966bac39aa9c891c7c513244efbfe3446fde6806cee991851f1e4b3d4a4a0c04b57242deb4f53d27040879562fc5b32621b46a642f3c84063c5195faf9b78ed92145821ae554d58325b03d60e11461adaa8ac87876559e1cbe47f7b5c33a8311294b0e54a44c97d4d2c9d
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 476f962c4eeb614164d362c0017c48a43fe538feeea16ea5
+Nonce.0 = 51e3de54f3f2d727aa76976f
+Output.0 = 0293a8d499efa54d6a532b3b7e3a559cab82974072a4eb0d8a07e2944fa2ad7f067893646cadcf71813f38338551c26d1ea746a7313ac42a7f86384f20f33642effbf49339302702d4c0f4d1d83eb4e75c59d2e3be3c61f02bcaa3da262a72e81a8670059a004404fd9439e40419f713
+Entropy.1 = bfe84885903801c141d5b8ed54944d3f98190a7045f0cc0f
+Nonce.1 = 8abd859c9bf0708b2931470b
+Output.1 = 1bcd70dd666931f79b4a75655f729eef2e2ae2967ac299340df8766b6b18aea96c458ff98324f10d8427966dbf32a1bdeac1bb18fb2bed59903f4c451b10ea3f6d75589563d7b2bf5ff7ba8aa8d72d262b55696c218be577aacd1c36035578f23d3f1a06e8ed0e6e396b82bf228e2c6b
+Entropy.2 = db5496a9249f4ffb57ad68cd8cd591383e776fee0ba209ab
+Nonce.2 = e0623333ca49346613f6641f
+Output.2 = 8a7df25b58ddb89a8fba79a8f81961cacd40d165fff1da1f6442ec4d9115a2f32c57db0c696b9fdf02c45040d3e06f39b3164253a8784f173f0a033bfa3c62b7285fcc43f9d748e3ca5f126b0736488b9ab978234f3c5810fda543e371c9afadf0b4a50461f1d7b4aa6c9bd5553a008f
+Entropy.3 = bc563959caa44290cb41372e9fa7a5f26700af7ddada3261
+Nonce.3 = c0a014fcae7ffaaa7f7a300d
+Output.3 = dbb3be4c1413680aef0f240b7b7f75e96fea98a39591ad44153ec332b2f13480ba4d3cfd93f0d2ab849fdc19389475a4e9462f56d85937a58813a076258470fcd0883e77e24ef8f67b0580a0ae14ed446620fea0eb71b60b1b70d6392711f0427c319295a6bf96b5cc52e4e570fefaca
+Entropy.4 = 1e8f4da6355c99108b8ad988224db84ec915e3050a9d8079
+Nonce.4 = 395656aca928e3ddf4e3a609
+Output.4 = da7831295a245a683653717735e5075e86d8fa2e2fce6c78181830e79fd1ea28cc476ae2a313ac50d5f20dfe191f3e77ca6222ddd2beb06a7429ce3f02059fd4ea6b48e12ec7b2b4a8dad880d97db892c1e070eb954953f7a4a1fd79530dd6809d2cc45a6fa91bf38568debaa2d8326c
+Entropy.5 = c179157f5943260d6ca255b347020f467b94a435f60ba699
+Nonce.5 = c5a511e14773972a65803904
+Output.5 = 1d508b40acbc6316564bb9758495100ae265f34a9b32969cac46b250d2016f65152886da59801890e1e4af0f673e5cee3755e5be09d6121679577bc0a11ecd76de3f1a8cb7a88023b8c543bde38893adb3d2d73806fbcf4a6460b8da68f6fb81d7f1939ab5f6dc8f52e9c4a30a610f63
+Entropy.6 = a67549626af635b17a9d9f876a9f609f2faaa685e1d8dfce
+Nonce.6 = a9a089e1cd938fc52d3fccdf
+Output.6 = 999af9cabf96856d33f6c76d25fb7e26aef3a7b9b7f4ee95a378be081c3112db71613a4b157fe41adc99f036e2661ba623b95a1de71f8c07144dafe46788c152419f9242b92581f23bd179e975eefe4f87a793f2643c49faeb993271efc262b08c97b67fdd507973a34b2c0a5d35f414
+Entropy.7 = 89f7c49a3b568d133c4552018ae715d0b1c8875fa8e27636
+Nonce.7 = 21f9dab09392e7fa9d3fabc5
+Output.7 = 300c2e55e78e8be8faa8904bdd1bd567a0d3531ab8daf479370d0121efdacfda8fabed4e78dfa14a42ea6d2c9677f6c7d475777731ce4f0f21bb3b1c200f843609d2b05d1a02a256c318cfb4d9aa38a8768135eaf1be100e86740e48381f98715b4ff397e2404fe833cdd21988c0cf7a
+Entropy.8 = a7bf882760aedbbf6f4e9cdd90698aad718b095e78ee940c
+Nonce.8 = fbeae860ac5ea09d878e2977
+Output.8 = a091a067ff1e9ac2576b4a449796b7e8a0870a836077b6197f30c5bfe45ffffad6df0c1466b303b8521feb80a9a6910df93548d5d841fec1194e4c3c9bc59675007becf16c2b144e3304bcc4711a059e9687d4c1b3b09154565d2d3cca7946d445551f279f0e31b6afc9d458cb203c1c
+Entropy.9 = 65112a896f101f7bdf37773f0f238a9899a82657dc67e0e4
+Nonce.9 = 111f4f73f43c7852f3679d0b
+Output.9 = e3c38940a1a53b3ba2fd18a4eb7e86e3af137863afe89b0af7015a1d6381cb994a97dec587e71576b1cab739bdc3a30d95bae3ac392fa517b4681ea1716bbbe44b40a9637e7bf83e1d2c89af1517d1e7598a4204917f6428cd49bcbda600fe2257874047c11d19a821b1bc3c0fff32e9
+Entropy.10 = 3b00c75d70cfe93077ec922fb551edaa872224eb555c8b64
+Nonce.10 = b15f67ca2af303e987256bd6
+Output.10 = 35532bfee8f3cf34a998b3b97b5d2cf2e81d7c8862c60495c8474911b555131a3869b2033e439743460cc5c0daf4c914672d6ecdb5888a89813f58f950f4c1e91a8cccd76f641ee7762152fd2e2151381a2dded48b62298eff2b2dcf50e2631224a8480aa4f2777b9be75c903ce5105d
+Entropy.11 = 9208f66adca82cf2493939e3e83e07599be808745059bc2d
+Nonce.11 = 91a6fad948f7823aeed70421
+Output.11 = 4bd4e563081f6a8c07652991ce764a472d58788f137646be0737e7204ee13c3ffb4f4a08a88b2e1ed1fdc9050fa001bb83b2bb48faf0ff4a33b571f9508df26e5d5a84a8fd90b7f5b288493d18046067c01bbb30548a52117192895e0abf996ec676e148c3d1013a3df4052fffc7b6d0
+Entropy.12 = 6616a7ac20360142476c3cd2edad8ab48e63266d18eb8472
+Nonce.12 = a203dcccbdaa50c88555476b
+Output.12 = e252d1fac3d3f356480eebb844f2cb8d2345ee0b069055cdf860142a220d820d944911ca25f9f5efc50a1a89f74d1ac078106ffcd5b073420f5049e32a8680a3e6b5d6c48703a67e0b8cf867ddef4f551447b4a02be59203b8938d88c902d38a94e67526e0a9df21c8b41ede44c640e2
+Entropy.13 = cba637ea1b6ebe05a14697e396b94df920adf1657b3fbc54
+Nonce.13 = 92ed0d7aa82507091a6de29b
+Output.13 = 3a9363e56704f53978f2b30888d9ba88034fc0acc4144ea4129035f7ffbb52e84c1847b3777182c132ba50092d15a29a7ea784eec8cffab1353194846e22355782cdb479e5df62d3a31978d01ee8fb23c76704e416bd0955e5007bd41914783b406607293577e42716e74e3fa81f9db9
+Entropy.14 = 47f141d1d0142d53c10628d2d1dd77aafc11ffe45f29b126
+Nonce.14 = a1e958e036afd40059ce9639
+Output.14 = 2096935329ffd975154c38a2c22e30ef12b7acbacd39868032d6eb31a596e617fc7e05026b3dae231f256ea94dd4ea4f05734eaa7916be6f846b0304ff0de389f3390e51641103e7dedee99e56d9455c80a7e10edfd2147a50b3864b05443a1646fccde2197af1d1d72ae3c2d4594218
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 57ed9a49fba2571876acf0dd2bc02b89c5580ce818441551
+Nonce.0 = 488bb9f803f1fe8f5bd3fdb0
+AdditionalInputA.0 = af56a27f7cb757182919b32bbe8e04476e89458122244fb6
+AdditionalInputB.0 = a4e6fb9e9849521942f6ebf0dd8be54ac527834681732820
+Output.0 = 027bd4ba165cd02c702b29a091a3a41704209da5ca6eb8289abbb6d7d7b6ee3590111c17971f7c527dd193ccee331c4e35e466f7af854fbc6d1af36c9a2e1f402c83a8baa1c481dc7702fdadd846760d5d9748c7747e6222822d322656b0787e4b0d1505d4212f302aa296588b2eee33
+Entropy.1 = f97eaf2cea50200708716bd2b231896ba0844b4e371efa72
+Nonce.1 = f10beae03ad82e7bf049837b
+AdditionalInputA.1 = e5fff751d7a3d606ffe1e0f2d9afe25c8d91b5d830dc6971
+AdditionalInputB.1 = 8f0606eeace7453bde86feb1f75de6ac185261bd892d333e
+Output.1 = a9256a7271dafc6509dd7f384469a76aba8d2f4fc72ab4da2e3925c744f96e3625e954dd27ab4050b535cdb8cf91da0811fc8b19386e850ca4ec545e3a13aca725a3af6592de9ec99c1d427d25ac044dc29b041abebe511011f6facf447355c1af072f01b4cde8509f446f2e12b91619
+Entropy.2 = 8cd5d75231ca8e4792c83d7fce6f88cf08f5ca6e5993ae84
+Nonce.2 = d14a6b389365c5cdad41f80a
+AdditionalInputA.2 = 502cdc2c3644d478d1600da8f1c5e8bb63b63baea6de1a09
+AdditionalInputB.2 = 36fcb7bcaee267608d3a8184f5c0851c7ba1d8324bb7718f
+Output.2 = b7712adf83aff24bfec8f752160fcef6c2a0b91778932c86b799dd18c1d9ddb6234c16667438f98b7ab9ab56072ef02d1beed2dc7a31a4ae75c9ff0ee8791e1783ebf121e3178dd9bb67648097bccb7225aff421369ffd96eb124fffecd03c9d2f7a435755dd3e11f5aa4d95beb9a665
+Entropy.3 = 7a8a818fb69ac1eacf63b19967e49f0b7547775f5223d248
+Nonce.3 = 8d02f1ff4e39f5f282702b71
+AdditionalInputA.3 = e21c1f74db73d31df275ce1c8052fc3976abcffb47aa5fc2
+AdditionalInputB.3 = 4f5047dad6802910e7b2d6ec22002508c611456bc758cf92
+Output.3 = 04074a749d03cb6849ae7125cc4ac98f635b283732e22a4807b0681e558f471d9757e97cd33739b49fa3634cee0a6f7475c9e4d180a576406ae1112e8e711f581743a8b8db681867afe238a61b3ed6a941e64dba255151de2ffc30febb11a5c0bf042b672948cc5b78a58af48e7655ee
+Entropy.4 = 144128dfd03a9e5710c7a87e0612d5676d85e6e698cc955d
+Nonce.4 = 8815d69679f4af3360839f63
+AdditionalInputA.4 = f46a0b8d495a26093620d31d048be723c3cd362f0822960f
+AdditionalInputB.4 = 1606abb94a27dabba952e0528cff03c53052d70988321b2a
+Output.4 = d9516de14de47c0497a615f8a2f24638464e275ff098f412f73fc76ebb856f8c38fc4ffd028882ae7a6b93f3dedcb2ff427bb37572bcf1f85975cf15da7a791def2ebb1522b96c85e2ccfdcfbdad10fb82ffd8bc255f822eb0b483d2b00ac4c61c6eae2b9fc0ccaa2599393bf9f7b762
+Entropy.5 = e7f51ad21fbdf706d26bd2103890d8ee5827545468a48c51
+Nonce.5 = f86f36d35d2d9a1690634c55
+AdditionalInputA.5 = ff6052c815247cc6414c0c1786462a3e8604d7dc73a7cef0
+AdditionalInputB.5 = 096ee77eb9ab1394e5cc1f9b9a98974256432a211dca9e51
+Output.5 = c61380c7f75081b8a3d5782a5fdd92b82a9967cd278b79153c478f73e9b88b9a6c669f02ef0e6ded7a3e4a43db39cd68cf4129c5cd8c4eab9776d90617d51cda2cf26f4884c1218552f2087b67af531c1b7f3aef5dcaa22c7bb5162ff999d81fc69e1964561ad3a07b9fa6844ed49b13
+Entropy.6 = 6e3134d888f819cf669d8c92861346b2463511e7cf7f62ad
+Nonce.6 = 4438ea59fa6152be195106ea
+AdditionalInputA.6 = e5dedd87e5e29bb24ac2e61cc5c65148fe3df609de3f342f
+AdditionalInputB.6 = 1d11f10e5fc673406a399fdf9189cbcb6751617baf4ad5cc
+Output.6 = da1d8418abbad9dededcc9332fd405e649b7238def5313c7b9a6287eda75df3fde1851ad1f4ea99e0e80958373c6c365a19ac3679e15cc07f704a925c76fc78405ad78bc2d193dff60ba57f4e2d715b3be2d7f11102751f300b7200b31e5221b489b6f736fe042e283b5cac173b9451f
+Entropy.7 = d90dc1778098c574e2fbc186b203cb8cc017ce8cbd313749
+Nonce.7 = caefb6f0b71739bfa7aec315
+AdditionalInputA.7 = 925444c097b593a33d53d08a29b5cbcf785642c43a6ec875
+AdditionalInputB.7 = eb838df62496cd815efcec2293d131fc6b77855998721613
+Output.7 = 8dc7b7567de8ff7a1a375a4c8c621dbf3ea360e63e081c66a7a86cebce2d88cee483657217b21d023e44fb1252c8c83de4a74249e00879d60c3a357bf1c13dd9a1a167c5f1c012db386646751e4c35675c4bea2bac2a7eee550cd8e759295e523279c3eb88a85e63c85e509c029152ad
+Entropy.8 = eba72f4fd8f29999f93d0407cc412760137dd5f483bc985f
+Nonce.8 = c9820bb038d062b396aaf824
+AdditionalInputA.8 = 89bf37e6a1b5500144f29798eb72f1dd4a976c855cb41c3f
+AdditionalInputB.8 = 717a3811f9e7d687a02b90fabff2c7e947d344f43e49ed2e
+Output.8 = 6bf825e0be465be76cac3d7c94c908cf9a880a955da7b0c217a1aeb3e1460e5003b5d8a815defbf8f6a896f9395b201a9bce861409e99123227da146aa1d864773481f63aba0c19e6070428ba6a5c05cb235929abf65bfb4a478643744e4afa6aa1530459f21c9cead4843cc9a330d02
+Entropy.9 = 56e2c5f09d263e60d797c30945d92df3aefa0d8ce29a273e
+Nonce.9 = 91127569f164e04c1427b2d0
+AdditionalInputA.9 = d6a0db341d30ef5988c9e6fa7b444f661aca4ff963e94645
+AdditionalInputB.9 = 43d236a9d17fb6cff6d492eb1c82d2606f9c622b1618bebe
+Output.9 = 2bda1094866b868bf8b100b3ca7a3ca043533a665ac4b1c63d13dc198d79fbc1d919729e6427a692d5b15108ed6401235ae286fce4c2c531337d378bc4a631388471ea83dc027eedfce1ce8311891636525d0104a8d76eb9df8e47b8c64c1eda0c773d8840dbc19ff51bcdc416e77002
+Entropy.10 = 8aa38e5726c98f290dd015d9087132c5e16dc98eea740ff8
+Nonce.10 = ffa02fd0693919009200b02f
+AdditionalInputA.10 = 67d976b2adb1d83e950442d729411924abdc3fbb761c7cf7
+AdditionalInputB.10 = c2d44be44bd4a4440d459ba25d767777edad914427825873
+Output.10 = 8d19b2a51412ee64a32a2233657e16715cfcfd2704c4a037c4e30efb0ee7f0c191a8239779b58d5779c342dd44462682cb06db8a09380ec188b7039b1a20441f6c505b65d4f92e31e0bdb3bed1305f1e3b4fb45fe97e68579f140fbaec6c6102058c4ac7f35b562602dfe5cdce2d3cc7
+Entropy.11 = f1b8973320e94d0f142f26c497bcff03e934b02abf151a13
+Nonce.11 = 3defcaf4a83b45bda6d73251
+AdditionalInputA.11 = 3e6c1264d8d62e3dca2e4dc3fa7407f42c68db0b81df6763
+AdditionalInputB.11 = d4195a1edde9ea61da98cdc2615fbba972f281c9987a29a8
+Output.11 = c2a184935fd1b02602a1b68b5046d894a5ad5d66535afc55ed1b10a8e716e7b777410c30517b294250d3cd8a1846bed1d097ae60a6c837210fdca052be42d6c4e4cb5b3ca6ed4f9e69861661d3346eedd9515afe7916edfe7ad9b5cf1dec4aee962d4547039d53e5e32a16463f7d7fe9
+Entropy.12 = de70f82db3356421f41b6658e0f9a7a3cac77de47b7350f6
+Nonce.12 = 815776b7591f0d222259030b
+AdditionalInputA.12 = 5a98a404604feec43818b62a5a917054915f02b2744fb942
+AdditionalInputB.12 = 42f5e90130281ef9d547da757bbaa496d15b574e170b54df
+Output.12 = 0534e51c3cb4b7a4c2936899d4be18b300e6aa28f6c7e8690f6647f8fa089e97c66dae0b37a4cc03a3aa4e292037efbe2bcd14d4204610499faf43d40d44ec9f149d66fc58d9785aafc51156abf13f34015d8d189bfc0f1a06e44fd45a3a30251a9495a096c19fa01e0252065f820872
+Entropy.13 = 3c46f1ba7201b00b9780490818edefb0de90c4f92729e064
+Nonce.13 = 57e98935fd7b1d57925632bb
+AdditionalInputA.13 = 1b305372315f9c2c97b9f55dc955e400fc192a179bc48d59
+AdditionalInputB.13 = 3f62ad9fb61380cece220ee03739a7b060f8fe64e35db483
+Output.13 = 092c0b0a9291f782fabd28b82137294d2ccb3198bdaad49b2ea34b8abcf0f5618db6baed9b821eb9fc3598ff44b57b2a0ec113f3110a36066e964f2b403135cb248dbe127625e5ee3252abe5fd2c2168fbb16436986b984f46683b68ca23bd847dd5b9d6ba875df7a92d367e00895268
+Entropy.14 = 9a92ccdb098bf070241207bd861d895a196d7ec4931c5528
+Nonce.14 = aace9acf257721de5c9ea06c
+AdditionalInputA.14 = 49a758a4e0a8ce69aa2e5f9b7940c6fbcbfc4fdc91165e4d
+AdditionalInputB.14 = 9c8ebc02c3d92d33112a15747b6367b8d6db3447cb9be2af
+Output.14 = 70cf10825dab6c1abcc1532a1b2bccd96f0638d02eedb40a7ebf97093f5d0295b6bc74d9e48290ab39260d684effcb401427a4ca62b971e5a31f06c14a9f8e3851c3e79dfe129ecf8a8e185ee58667e2b692474a0d5f0a39f9d794adf1cd71c1266563dde24dc944661acbf849fe69fa
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = ec6d04a3c5e5fe627f143eccae0df8051d130e1ebcf3f7ef
+Nonce.0 = aef3d3359581b8f21aa01856
+PersonalisationString.0 = d8ab28a3527cd2bbcf40770af6ec5546870cec6511c2d97d
+Output.0 = 8d98f91d2e9acc94c1d9cc1662a1afd58addbf0dedc13a006d2cdbaa9e0df0e98b78f9ff5d893549faf3364c68282cecd2a31252c598d3514732463b6d73e7e972fabe0ba2d8a754bdeaba3b0e5ef1035fa661f6f62e5f8b1161ac351084b50cc1f75deca2a90c9c77c458489a5e1954
+Entropy.1 = f1d31fe67dbaf10a0e4e6a97d4d643ce773be7e2a0013ac6
+Nonce.1 = 2ee61ba2a50b6db2a324e42d
+PersonalisationString.1 = 4b1f2056519b4439acca3f28e7d973c517c096c310e362db
+Output.1 = f5acd8efdf29fd6e3b0b16dbe20b71a6c5f735252c4951c06bc70d57ec21ada417ecadb1317a6fbcc074a8e3c7e2593a550b3071394048076ecedd8bd798323b2fda1a6257b39dec8aaa4ef048c96a20b79016d54037ecc8f2568c4f338f635a7e0405cb21554bd4cb8d4037c1af638d
+Entropy.2 = ac3fcb2b468aaaf59907f5e77a607c9401bb2b23fa4182ef
+Nonce.2 = be792f858062ddbab75ed0ad
+PersonalisationString.2 = 6206da440125f222c8e532b2ea4f9ff4f1188bd7154af10e
+Output.2 = aba4944582fb65ca07b36f8540d7778bafcbeccb33261122e723c4373307f4541e4ca8b6c65eb57fae6138a42579954deb515e4d3aa31ac2e64246216a15ee4b4d8691982ebfb01552a354c0b946e196406ff12cbe8d8610311979377670ab27e9f07a6fc85ef97937322a791ef014cf
+Entropy.3 = 32283a9016b6689e23fd25b7f25d6044560218555a382a2e
+Nonce.3 = a7b0d3f0554c275b17409e77
+PersonalisationString.3 = c91a407090e025d17472f9bfea67727039e807b11711f1ba
+Output.3 = 89cbd90018d8bed92e13f2f8e3553ebbc7d92ad9f9a2b522142f2d2fc9ba21d51743aac00f9ffc8600a923f241fe07a552096b20dd871ecb952d6146550deff5333f575146b98b87a86def57aa767c0de5d449a60cda8cd097d6e7ec426fbcbe6f226a7abaf4886e06cd7198465d9806
+Entropy.4 = 27aa5a89bfcbc8f45d630ef7039235a1491270b9ee12b1fd
+Nonce.4 = 25e2db1c4a48822932282d4a
+PersonalisationString.4 = a7cf93362700094d138a3480f6d346ff43857a24cd5e57e8
+Output.4 = 40d5a08d16ec7c88fa6d30045564d2dd4c34de6c9b79f5d0bf88733bcf1dbd20937d83385a4d2047c4f2667827747aeb4c9278f1bd995dcd7e9e1bf82b0b2561fb81ea5af2985a848ad585e6cf0a70d8b8be124b6428f7ded06dfe592e01d822bb594eb1914a8ab96896c21c1692eff5
+Entropy.5 = b4b85e046f08dafe63637c4850bb7948f250eb1bbd7b2d5c
+Nonce.5 = 7dd564f0a77bda9ffc15fcbd
+PersonalisationString.5 = 8913bdb42fe26b3568d402ab311201df8219071789d67f3c
+Output.5 = 1e5c96141a57e6ae1e4e38256987429d9fd66242c0163f224b2e2b4668f20a26ae7ae5429a91a2c2dfdd187b5f48fdcd193e5031f359f91e7e5966d71d8b4f69e390b5055e794d99a3713d6629fa21603a07758ebee379625e289a2cee34676ca1612b953e4e0804016ad87332a7c200
+Entropy.6 = 50868f3a44ce812f81b55d11921834474d8ccb6c566f666f
+Nonce.6 = 88c16a2e721057136deaa738
+PersonalisationString.6 = fb2ee927dcbe7e354720680ab0a2f654d37e75801c46367d
+Output.6 = 345fe914a47637aa9188b30286fe334bb4a535ff59eb3a3773c6788a8f23a7a0a327885d02e0b99c1f7c20c80f945cc267e24d21ce2f1d672dedc65efb7dbc8170f18f05ffa092f8f46981db2fdd3b09083f846baa8a42cc5507af521661d821278694ef387dc71e39f4dd6fc334f09e
+Entropy.7 = 1de742d420194d35cd22758dd9af62dd2616f922876d2815
+Nonce.7 = d815e56f7227afc5d2b8bbe5
+PersonalisationString.7 = f9cae04f2795bebfbfcf216d5bd9504e56e3708c87328106
+Output.7 = 9407f9d4c6e9c87f457f3b8358eec03fade91b2ae164c5720167bd6e2b79341a05a2bee108fe9412d2d5c2b8dcd9d8973935886ac32eb030bb937e8b4023950fabadbe14d6395df3e88181d504e9337b39e2fad7428e100758780941f216b03122522ac54468417929a8419a52e8e6c8
+Entropy.8 = 7ce6f11c25232a389a729ca6b348fe95e40b6d0d7b635a7f
+Nonce.8 = 507f510c0c4ca5b400f52ed3
+PersonalisationString.8 = 4c5f000a9bc259a30dfebf0a94cb46db36599df5f315366d
+Output.8 = 70c016d2aa32ebe0dc02470cbc9091f49e626c835e651e456590d5b012dd0ad52e12eac46ce3a7ac06995bdebe44e51a6de373f5533004ceceff34ad26ac2f3959d0580ff40076dd193c8e3ddd3abe1353dd8280b7856944437aeb7a8444ddbb8e925c23f08f35eda55a6198eaf88a34
+Entropy.9 = 6536fa13cfbb49ebc28daf8f4afe32eba911c855c7720b7c
+Nonce.9 = eb6fd6d465013e0c09fa01df
+PersonalisationString.9 = 8e97deb1da5c91712ab3fcd6b2a3d2e2cf7ad121e21b6180
+Output.9 = 348fa39ea0377d1225dfc5dbb742af1edfbb9a6bd6dfbf2a5084a351dfa04a002676931ad738ec6786ca5b1e4cef0bcbf10c6971ad8975e6929b2d9f6662e8adb95c85b8c9779276195f6a05a230ef2f1788443c959a665ef54a43142fb41449e5e4d72b7229f9635de0327354744a6c
+Entropy.10 = 098b2473b93ddbe231bfeed3189847a312bf31be93fcc133
+Nonce.10 = 42b193b577d8bfc1e0395735
+PersonalisationString.10 = 812cf649617f0fd152463cd898ebcbb9a95bff1ec387b9e4
+Output.10 = da4d2352096ea715bdf6ae24dbab334611e01153d1e0a18e6b70dd3f72bb644f00ee4f01e9616313fdeb02c9df8823d1a36e6c85b6c05383ec44cedc844c5647ef234fe67e1626831e8c3267304c2ee212383459dd9e2d091c014dab7689efa371cabcd950b13abe1b6e818122a0982b
+Entropy.11 = b6d5919c608b3fa0996f48f1051769e94519ece1375df47f
+Nonce.11 = fee339b6117011a67777f269
+PersonalisationString.11 = ed9ac05d62a4edbb359a4e80d4ab52660cf6d54f6e966745
+Output.11 = 62f982f99136763a48abe593acdfe63f485ea69e6b0d2943f2982a5eb1c874649cd39cc7fe82b1ef385d0e66236234ff3e2f584c26a7f21cfde83c32689e125e52a6a53f8cf2369bdc6a6800d731f9df627291bd312dddd9b03e02a2e73f22700ac02b91f28353c90a0a3d941f4ea623
+Entropy.12 = 48e12559a63a103b22c4a0352a419e481b7f7a91d300a4dc
+Nonce.12 = 82a08743cbe1d070c61e5af3
+PersonalisationString.12 = 65e365b9c5ea8781e4a12bd74902f3702f6efb1cfe5b25b6
+Output.12 = 6d86e32d1d7e4a7e4e87cb6970e09ac7e97ab35283b63a241378c417632aeddfa078decddeb709624f5912bf35e0cc11dde63b317f1694a9b6fd9533469a1649fd9310bdabd5faa02f8048826eb8d3fafec63a0d4c9cb221b35a92c3f1f50d9efca23afc5b5f7553e9bf6100f0ac42dc
+Entropy.13 = 6009f2c9e3252a92663cdcda8116da1404d62078a6f1a124
+Nonce.13 = 49bd6047cdf3ad23323da8ed
+PersonalisationString.13 = 26c90b6cba78c7fc2e3a64f03f280a6b6d0e5bfafcfa977b
+Output.13 = f28b4424f6f7059f1741e600b88d9b2e1fd5f2e5cad1b121b886f00af6f1e10d337cc1b5a3b3b5ef6aa755f2160a66e78d841ab193e44ab90236e59855be7cdc9b71c63702f4c2bb6f15a8050b5d731c1a67c6deb7764fe29d6825e19009ad835f95015f7559bbb0e042c3e3867c9fa4
+Entropy.14 = 337343cf9fccf15a2bd2d7c6cabf6321e1a270250cbad4d4
+Nonce.14 = 82dfae196513724ae269204e
+PersonalisationString.14 = 6e01d897ae919812b8408f82edffcfed8db6df2e2cbebd95
+Output.14 = 6e9bebf2e54d8da4e8ede97ce463239245ff1b021acf4441312ddba96d1f3d750bf2b9583a8aee76e2ee36a56d8e2fd4e11377d15ba3ad0876fd467c375a744240de0a7b38974e0e7b27c3917ce4e22f2bc78861f6f8b1fb42edbb1b0cb869fe5169527064cf2f38c0154082af5457bd
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 6e4d2940460dfbd41e1c73042d21f62d633592c44e83edce
+Nonce.0 = 365a5cc795f7dab209136655
+PersonalisationString.0 = c851f06ff7019f42a82ae6676bd40564d4f9bbdddb80a195
+AdditionalInputA.0 = 1eea9031fb42e7a502836aa6137f05d493333d6b6e3cb863
+AdditionalInputB.0 = b234cda369720bcfe49d09acf7d90f8a8d468d5f3fbd95f8
+Output.0 = 2be579cb4182fe2a6581da62357cf15d210a13c0319a19547f908ba85f4323822c877a1ab4a2db438adfb53a77ba61b56b392feaa48d3a4026fcdd4f9122da04c36844a5390f0896b637240529e8338760f50ac6a5c97e69730dc70193e9e2a587c7d0c8f60b9c3c5ca1d2a1835ccd4f
+Entropy.1 = e350ff0d2dfc7287bceeb35890a8c15d38dde52b619ad874
+Nonce.1 = 276d551d78fb5fd9ca975733
+PersonalisationString.1 = 26082fcd908f3abe2aa84d994ededf8644074f4533b0c30d
+AdditionalInputA.1 = 82deda3adf693b1fe188fee404172fe7f04e7e5006710cc6
+AdditionalInputB.1 = 30c1b7ad057fc6aa6d88b8458b108fea96fb0fbfdd40f77d
+Output.1 = 0503dc0006ccb729fa9ed9c8f126504d7b61a42a3451cbb6f5b0df877af083083f1a0caeb07d770c96be4a98fdac5dad75c2bb6ff3eef5a76268b4080b3b52666cc476170b17b96610da63dbcc8183d966fa1cb608f393f87c09ef37a0976fa88fbc2171f82631964d17722091259a8c
+Entropy.2 = 9e43d636e8546d2b308d1b8d63b8a2b4b48d792d74f75d78
+Nonce.2 = 04d72917fb0cdb3b04685aef
+PersonalisationString.2 = 0ebab05bca590442a477decdf924b72ab69a29fca394db21
+AdditionalInputA.2 = 83ff05444ed46476bd7edb540943c2d7d6da1ccbff1be85f
+AdditionalInputB.2 = 026ac29b358bd73ec4e4fd25c2ed282dd355716082136d65
+Output.2 = f4c39d38ec72d5bc8055f2987a7f9027d0a208ec54aa80db92aaac6c5c95984f34c6d546be242c4705bb61a1e9c52b45cb7aa3aa4ac9d9fc20fb37d3ae3a826761035e6becb79275126e1b85470824a1bb8857b4d54255783e80ed6dee3aa9e0417717ddfe694b79da325c53a66f4027
+Entropy.3 = e7dbc930f11c47cad1c811b43f1edb1d101c2754de24bf9d
+Nonce.3 = 5b3bdfbbf1e8cf7f14acb1b3
+PersonalisationString.3 = 4355af238b6c7bb775c5330f78c17462348ebd258d0257bd
+AdditionalInputA.3 = 5825bbee0a7289c7e1d4849f0a5c4876946daaf0a2c5828a
+AdditionalInputB.3 = d769c70dd273146606de46a518af3a8313a23b1d13efba62
+Output.3 = e2ad257cb76b72edcaa0be8bd98cb768ed88387a30acc5210ac62ffe4d655f3c1b12da9d43104a0c09c48a6410baf9744ce26291f2f66668532438cf6fd21b5fa2caf9314f452f8d0170cafadf450a8916f3f95a65997c439fc1aca0329df2793e04f3ff53e57df913329c74a2e078d0
+Entropy.4 = 7252fc8ed77209be35d42b771f5007bff64ca5fa84f8eb95
+Nonce.4 = cf279739cd16cccb67acd2bf
+PersonalisationString.4 = dc303e18ca804ab2b496bb45cf7ca9c524302d086adb3548
+AdditionalInputA.4 = 2ee0a4d9eee2a4ca197e5a43de6b8ab2f29838b980cb0a42
+AdditionalInputB.4 = 2d522785f489fa25913a5760f92551f3218c2591a8ba99a8
+Output.4 = 065453e6406da76a74064afdb6427145bfb7af78f727006fcf98935a7bd49e7abbdbb971e3003790b3813f702b9c7d2126afa2842e592bc3ae97da02d0ee65ec7388d3937d10367e46abb204dbaf132746c14146fd1795d4390edd9e861b595a7b059426a049fc554928b4e28b9cdca3
+Entropy.5 = f3b4ea208a73b1e7cd50a69eabbc0e87c9199ead23fded93
+Nonce.5 = 0de6252b958c13f09658d31a
+PersonalisationString.5 = a1486d7937f1b1689d2cdeeffe889efff4b083e31cf32cf6
+AdditionalInputA.5 = eba813f6d050984235906af01b1ef86347a8bb4ec013949a
+AdditionalInputB.5 = 94d64a4be47b0b817889033911a058f7d35486359b09831c
+Output.5 = 1dcb678bdc3fce11c7a1298fc1d5ddbb3d338280b1e8f0b769e6e2373880cd3219fa51d103ef5ab1b00027b9d82a5da47aa1cf6dbd8aff93a7835bb99ca3bf9989ac6f7f25051b6a6fc3991df95cb24c2f1011296f2793ec08a84d50d2ac9db92c0e17c13c96db3433c28b3990165a18
+Entropy.6 = 67ca2dc211e366b804a09507909e414173c5969809b6891e
+Nonce.6 = 9e02c896c54dac88bb7d203d
+PersonalisationString.6 = 2621394152ebf2b2cdad3589bce8fc6f1e1e368fdebaf33d
+AdditionalInputA.6 = 4db685115fc893e24a913f2b68a8c01ec21bcd7910f67fd1
+AdditionalInputB.6 = 1a4114929206b34d25883c88c1ab7d6aaac1a8e2143a959a
+Output.6 = 77c5b6ebdd3801e3f53344e19ef48e06e7a1be24a553c48687e943928154494c07fe4439732629115324e7d0443afd360c0578e3917a66a2534f52576662b0b7494e7620d24ec00491e79aec4f1ee1f847ddc115399504a0ab0e51213ee4c4189273d5f8969246d3f0d823e00d665ae5
+Entropy.7 = 0f00a5e8745b3a1b4f94cf750984b096d6b009b7803b7c2d
+Nonce.7 = 533a354ffe79aa47264946f4
+PersonalisationString.7 = 9111a440fdf9bf9d35112665be775f911c03bdaa88d91319
+AdditionalInputA.7 = 6f2421cc1eaa8337bb3cd46e1258ce746a36f23f3fb828b2
+AdditionalInputB.7 = 93a6e1b05e44cb09d5ba34731f9db7d813083cddb0143016
+Output.7 = 11f174162271d85eee49cbc2abfd21ccf5767d3d7c496d8ec4d05e953576948dc5d5607a92c950dbcce1cf9bee799d21fd80a79699c5f8d48d45541184da907ea8e558df51b2841f2bc6b3cbe21b408b2efa67ea46cca6b6f8d0a0004953c542127d0aeda2c30cb9846b261f07efd5c2
+Entropy.8 = 27bee9d9c7dcf0706048a9ff4e89a8a543a6176e1165f018
+Nonce.8 = b290f7fc0eca4967fd8b9b91
+PersonalisationString.8 = b827439cd5b23ee1d2a59b74338f5630ee8fce0d872e1c66
+AdditionalInputA.8 = 222157e5488f3b73773f424a243c879184fa178f35c01ddc
+AdditionalInputB.8 = ba1c25441c4c07bafea1c0a33f9a80d5dd121bc6e56fd3c0
+Output.8 = 25977ef6eef6e05db9f7fb78512d43890bb85be9567e268439cd9a296ed863c9f7cdcb9153fc0e35c5d3c135f2cb38c5247cf7fc69f1def95e4319644578492b8f10c5158e3eedeea23037d1f2043858daf7e508cf72125965f406ae8e646b663ea4173a8bbaf8bfeea829bf0d157a26
+Entropy.9 = 2834539e3fa297082059e7b26ebee3ff38fe12756f044da1
+Nonce.9 = fdf297a9bde8d2c507df4b77
+PersonalisationString.9 = 3c6602a01cae08d5eaf6847394e10112f72b723c49e47701
+AdditionalInputA.9 = 1b987eb9b82aedd4c2ae942335c13c75d6389d6f4159f7cc
+AdditionalInputB.9 = fc7ab0489cc9ebd563b262bea427b82c2da2eb754c7a0b56
+Output.9 = 03a8c8966c47075bc7d9c6859c8891b9face30d09b6f7e5c4e108391db5c271ec55fd4f3d91a9e7172bf352232c5e4f92816f13457a7ae09d1bfb1fa2c34fd229cea72707d6b74190ebb4bb1d1d076a08506d25d123257c42cca749eb613d430729daa2c8a9461495d86a6539a222e00
+Entropy.10 = 95e91b1792b10fe833b644f5235c6b90791242570e67666c
+Nonce.10 = 529b02bccff35643134915a2
+PersonalisationString.10 = 109b4317810b510ca5b318416d103b334f156c6670a16d98
+AdditionalInputA.10 = db2dc2227a211da34c58b977e6ab45877e641751287f5fc5
+AdditionalInputB.10 = 8c85677eb8b70cd69ab5f8ad7bc26025e5971d13caf92508
+Output.10 = 757643093c0956fb4e3ea5e90a0ca0ddbe1fcba6a5de312701900a1d9e34c8bee72a2029e8a5a59d25ed2105ef36dfa58fbf91dee667d31d9981d1e3bbaadd1c5a4abf40cf7e232d344bcd44d74efe79e6b23155211197c3b6cba26f4e145948ab1b8be0d999188184a0f3a275c1dce0
+Entropy.11 = 1a5884a115d4ecb53f95b044ff1e46039d9e4293f0992f4c
+Nonce.11 = 7bbf646f678a09e762649a7b
+PersonalisationString.11 = 441995088e01a80ab65449a091c053b4e0c1e48d27c88db5
+AdditionalInputA.11 = 1ec6df1a1516e666de0d83c53ca726b19823ea77459ade8f
+AdditionalInputB.11 = c3131ab7a7ad85fa9cdae86f34a79584c19a9099416d3e43
+Output.11 = 620c8ea5139338b809d6f2f5f6420e39efa2624600d4a577457365c72e7b87dcd891e7b4e73fb1c27c423511a70374b73425f25b2c86ee760ff86bb49a43b3f984a501627a0f6b751077134652ab19951073f249b3151e572ab8d65801f4a5aa88289dccf5b9933f73a8c847f7b3a86c
+Entropy.12 = 2547200c9ef949a3d50326e987162f40f7dbaa5f8d21612e
+Nonce.12 = abd90db2b48a25d576b9e773
+PersonalisationString.12 = 23c858d23feb4778c66d1e7109acca9080e9a0b08210bd49
+AdditionalInputA.12 = 4e57767fde19a96ee237bbc7e28f48c4fdd048ad735d218b
+AdditionalInputB.12 = 0a380d485a4c3accffa0d08304cf502530bbe3dca1099326
+Output.12 = e56547912d6a028e59577fdeb26c5e69243cac13a3798b21c79749607ecd255e4aa403cdd51d0d717aa8902716f7fdcb1fa0f3c382651578e5a6c6bd568a6e9ecec6de7df5f7888ca9a007ccf48dbceaf27061a8e66e65a15158c26336e311d6f5eb496781c014bdc8420dbda6661ffe
+Entropy.13 = 46c98e4b13b41118b76f59e336c71589c93bdb09fa9b2828
+Nonce.13 = fe9b134a2fd031d93d0c3084
+PersonalisationString.13 = 2b4e017f69170a987effc607b71a360e5d9ad3a7bb3583ff
+AdditionalInputA.13 = 968512e2d6612878b68e2716e7fff3d43965c8a2c7f33c7e
+AdditionalInputB.13 = d229b9445b5f07c690ea1b0e4d7fdd740d464ce501ebf47b
+Output.13 = 1a685f050da9ad94dbeb7bb94a73c42475d914ea4b3a04b23bd816c88ef50a123a361c6b1ee5a318bba7665f37566e764a5054c18014e5ffe2aa72aa34c5f41cb49e75cfa1440af9156576dcf181d95c83af8b042ea74c12a3cc6d8ca63a8fe1f71cae17ccc8768bbd2c3bee147ab460
+Entropy.14 = 73546ddd5480d1f70142ad1def9b254f04b7970d056bd160
+Nonce.14 = 08779f86558a964cd8ad3b06
+PersonalisationString.14 = e0475a33b78746e89b835a353fb294ca4c2c9d2ef861a6be
+AdditionalInputA.14 = a58757b98280d90e84d6cf4e2fa89c01a9e6aad22d6cff0d
+AdditionalInputB.14 = a3f5de1ec6d0ccd39fa153899f0c1a414106a2aa182acf31
+Output.14 = b1797707f1217d81c8463b44957df350dd139073b056c50d1c912fa111f9cb488bfb7d2ec6faebd078171cd6b71171ae33698ff96c7225d7fd36ddcfeb2630464974d12b3e03877bc73ce1a2f89aea7ff7ddc8ac85708b35dd94d3972875e2d3e7237ec33871e99301202b52e2ff89db
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = ca851911349384bffe89de1cbdc46e6831e44d34a4fb935ee285dd14b71a7488
+Nonce.0 = 659ba96c601dc69fc902940805ec0ca8
+Output.0 = e528e9abf2dece54d47c7e75e5fe302149f817ea9fb4bee6f4199697d04d5b89d54fbb978a15b5c443c9ec21036d2460b6f73ebad0dc2aba6e624abf07745bc107694bb7547bb0995f70de25d6b29e2d3011bb19d27676c07162c8b5ccde0668961df86803482cb37ed6d5c0bb8d50cf1f50d476aa0458bdaba806f48be9dcb8
+Entropy.1 = 79737479ba4e7642a221fcfd1b820b134e9e3540a35bb48ffae29c20f5418ea3
+Nonce.1 = 3593259c092bef4129bc2c6c9e19f343
+Output.1 = cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655b924159413e2293b17610f211e09f770f172b8fb693a35b85d3b9e5e63b1dc252ac0e115002e9bedfb4b5b6fd43f33b8e0eafb2d072e1a6fee1f159df9b51e6c8da737e60d5032dd30544ec51558c6f080bdbdab1de8a939e961e06b5f1aca37
+Entropy.2 = b340907445b97a8b589264de4a17c0bea11bb53ad72f9f33297f05d2879d898d
+Nonce.2 = 65cb27735d83c0708f72684ea58f7ee5
+Output.2 = 75183aaaf3574bc68003352ad655d0e9ce9dd17552723b47fab0e84ef903694a32987eeddbdc48efd24195dbdac8a46ba2d972f5808f23a869e71343140361f58b243e62722088fe10a98e43372d252b144e00c89c215a76a121734bdc485486f65c0b16b8963524a3a70e6f38f169c12f6cbdd169dd48fe4421a235847a23ff
+Entropy.3 = 8e159f60060a7d6a7e6fe7c9f769c30b98acb1240b25e7ee33f1da834c0858e7
+Nonce.3 = c39d35052201bdcce4e127a04f04d644
+Output.3 = 62910a77213967ea93d6457e255af51fc79d49629af2fccd81840cdfbb4910991f50a477cbd29edd8a47c4fec9d141f50dfde7c4d8fcab473eff3cc2ee9e7cc90871f180777a97841597b0dd7e779eff9784b9cc33689fd7d48c0dcd341515ac8fecf5c55a6327aea8d58f97220b7462373e84e3b7417a57e80ce946d6120db5
+Entropy.4 = 74755f196305f7fb6689b2fe6835dc1d81484fc481a6b8087f649a1952f4df6a
+Nonce.4 = c36387a544a5f2b78007651a7b74b749
+Output.4 = b2896f3af4375dab67e8062d82c1a005ef4ed119d13a9f18371b1b873774418684805fd659bfd69964f83a5cfe08667ddad672cafd16befffa9faed49865214f703951b443e6dca22edb636f3308380144b9333de4bcb0735710e4d9266786342fc53babe7bdbe3c01a3addb7f23c63ce2834729fabbd419b47beceb4a460236
+Entropy.5 = 4b222718f56a3260b3c2625a4cf80950b7d6c1250f170bd5c28b118abdf23b2f
+Nonce.5 = 7aed52d0016fcaef0b6492bc40bbe0e9
+Output.5 = a6da029b3665cd39fd50a54c553f99fed3626f4902ffe322dc51f0670dfe8742ed48415cf04bbad5ed3b23b18b7892d170a7dcf3ef8052d5717cb0c1a8b3010d9a9ea5de70ae5356249c0e098946030c46d9d3d209864539444374d8fbcae068e1d6548fa59e6562e6b2d1acbda8da0318c23752ebc9be0c1c1c5b3cf66dd967
+Entropy.6 = b512633f27fb182a076917e39888ba3ff35d23c3742eb8f3c635a044163768e0
+Nonce.6 = e2c39b84629a3de5c301db5643af1c21
+Output.6 = fb931d0d0194a97b48d5d4c231fdad5c61aedf1c3a55ac24983ecbf38487b1c93396c6b86ff3920cfa8c77e0146de835ea5809676e702dee6a78100da9aa43d8ec0bf5720befa71f82193205ac2ea403e8d7e0e6270b366dc4200be26afd9f63b7e79286a35c688c57cbff55ac747d4c28bb80a2b2097b3b62ea439950d75dff
+Entropy.7 = aae3ffc8605a975befefcea0a7a286642bc3b95fb37bd0eb0585a4cabf8b3d1e
+Nonce.7 = 9504c3c0c4310c1c0746a036c91d9034
+Output.7 = 2819bd3b0d216dad59ddd6c354c4518153a2b04374b07c49e64a8e4d055575dfbc9a8fcde68bd257ff1ba5c6000564b46d6dd7ecd9c5d684fd757df62d85211575d3562d7814008ab5c8bc00e7b5a649eae2318665b55d762de36eba00c2906c0e0ec8706edb493e51ca5eb4b9f015dc932f262f52a86b11c41e9a6d5b3bd431
+Entropy.8 = b9475210b79b87180e746df704b3cbc7bf8424750e416a7fbb5ce3ef25a82cc6
+Nonce.8 = 24baf03599c10df6ef44065d715a93f7
+Output.8 = ae12d784f796183c50db5a1a283aa35ed9a2b685dacea97c596ff8c294906d1b1305ba1f80254eb062b874a8dfffa3378c809ab2869aa51a4e6a489692284a25038908a347342175c38401193b8afc498077e10522bec5c70882b7f760ea5946870bd9fc72961eedbe8bff4fd58c7cc1589bb4f369ed0d3bf26c5bbc62e0b2b2
+Entropy.9 = 27838eb44ceccb4e36210703ebf38f659bc39dd3277cd76b7a9bcd6bc964b628
+Nonce.9 = 39cfe0210db2e7b0eb52a387476e7ea1
+Output.9 = e5e72a53605d2aaa67832f97536445ab774dd9bff7f13a0d11fd27bf6593bfb52309f2d4f09d147192199ea584503181de87002f4ee085c7dc18bf32ce5315647a3708e6f404d6588c92b2dda599c131aa350d18c747b33dc8eda15cf40e95263d1231e1b4b68f8d829f86054d49cfdb1b8d96ab0465110569c8583a424a099a
+Entropy.10 = d7129e4f47008ad60c9b5d081ff4ca8eb821a6e4deb91608bf4e2647835373a5
+Nonce.10 = a72882773f78c2fc4878295840a53012
+Output.10 = 0cbf48585c5de9183b7ff76557f8fc9ebcfdfde07e588a8641156f61b7952725bbee954f87e9b937513b16bba0f2e523d095114658e00f0f3772175acfcb3240a01de631c19c5a834c94cc58d04a6837f0d2782fa53d2f9f65178ee9c837222494c799e64c60406069bd319549b889fa00a0032dd7ba5b1cc9edbf58de82bfcd
+Entropy.11 = 67fe5e300c513371976c80de4b20d4473889c9f1214bce718bc32d1da3ab7532
+Nonce.11 = e256d88497738a33923aa003a8d7845c
+Output.11 = b44660d64ef7bcebc7a1ab71f8407a02285c7592d755ae6766059e894f694373ed9c776c0cfc8594413eefb400ed427e158d687e28da3ecc205e0f7370fb089676bbb0fa591ec8d916c3d5f18a3eb4a417120705f3e2198154cd60648dbfcfc901242e15711cacd501b2c2826abe870ba32da785ed6f1fdc68f203d1ab43a64f
+Entropy.12 = de8142541255c46d66efc6173b0fe3ffaf5936c897a3ce2e9d5835616aafa2cb
+Nonce.12 = d01f9002c407127bc3297a561d89b81d
+Output.12 = 64d1020929d74716446d8a4e17205d0756b5264867811aa24d0d0da8644db25d5cde474143c57d12482f6bf0f31d10af9d1da4eb6d701bdd605a8db74fb4e77f79aaa9e450afda50b18d19fae68f03db1d7b5f1738d2fdce9ad3ee9461b58ee242daf7a1d72c45c9213eca34e14810a9fca5208d5c56d8066bab1586f1513de7
+Entropy.13 = 4a8e0bd90bdb12f7748ad5f147b115d7385bb1b06aee7d8b76136a25d779bcb7
+Nonce.13 = 7f3cce4af8c8ce3c45bdf23c6b181a00
+Output.13 = 320c7ca4bbeb7af977bc054f604b5086a3f237aa5501658112f3e7a33d2231f5536d2c85c1dad9d9b0bf7f619c81be4854661626839c8c10ae7fdc0c0b571be34b58d66da553676167b00e7d8e49f416aacb2926c6eb2c66ec98bffae20864cf92496db15e3b09e530b7b9648be8d3916b3c20a3a779bec7d66da63396849aaf
+Entropy.14 = 451ed024bc4b95f1025b14ec3616f5e42e80824541dc795a2f07500f92adc665
+Nonce.14 = 2f28e6ee8de5879db1eccd58c994e5f0
+Output.14 = 3fb637085ab75f4e95655faae95885166a5fbb423bb03dbf0543be063bcd48799c4f05d4e522634d9275fe02e1edd920e26d9accd43709cb0d8f6e50aa54a5f3bdd618be23cf73ef736ed0ef7524b0d14d5bef8c8aec1cf1ed3e1c38a808b35e61a44078127c7cb3a8fd7addfa50fcf3ff3bc6d6bc355d5436fe9b71eb44f7fd
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = d3cc4d1acf3dde0c4bd2290d262337042dc632948223d3a2eaab87da44295fbd
+Nonce.0 = 0109b0e729f457328aa18569a9224921
+AdditionalInputA.0 = 3c311848183c9a212a26f27f8c6647e40375e466a0857cc39c4e47575d53f1f6
+AdditionalInputB.0 = fcb9abd19ccfbccef88c9c39bfb3dd7b1c12266c9808992e305bc3cff566e4e4
+Output.0 = 9c7b758b212cd0fcecd5daa489821712e3cdea4467b560ef5ddc24ab47749a1f1ffdbbb118f4e62fcfca3371b8fbfc5b0646b83e06bfbbab5fac30ea09ea2bc76f1ea568c9be0444b2cc90517b20ca825f2d0eccd88e7175538b85d90ab390183ca6395535d34473af6b5a5b88f5a59ee7561573337ea819da0dcc3573a22974
+Entropy.1 = f97a3cfd91faa046b9e61b9493d436c4931f604b22f1081521b3419151e8ff06
+Nonce.1 = 11f3a7d43595357d58120bd1e2dd8aed
+AdditionalInputA.1 = 517289afe444a0fe5ed1a41dbbb5eb17150079bdd31e29cf2ff30034d8268e3b
+AdditionalInputB.1 = 88028d29ef80b4e6f0fe12f91d7449fe75062682e89c571440c0c9b52c42a6e0
+Output.1 = c6871cff0824fe55ea7689a52229886730450e5d362da5bf590dcf9acd67fed4cb32107df5d03969a66b1f6494fdf5d63d5b4d0d34ea7399a07d0116126d0d518c7c55ba46e12f62efc8fe28a51c9d428e6d371d7397ab319fc73ded4722e5b4f30004032a6128df5e7497ecf82ca7b0a50e867ef6728a4f509a8c859087039c
+Entropy.2 = 0f2f23d64f481cabec7abb01db3aabf125c3173a044b9bf26844300b69dcac8b
+Nonce.2 = 9a5ae13232b43aa19cfe8d7958b4b590
+AdditionalInputA.2 = ec4c7a62acab73385f567da10e892ff395a0929f959231a5628188ce0c26e818
+AdditionalInputB.2 = 6b97b8c6b6bb8935e676c410c17caa8042aa3145f856d0a32b641e4ae5298648
+Output.2 = 7480a361058bd9afa3db82c9d7586e42269102013f6ec5c269b6d05f17987847748684766b44918fd4b65e1648622fc0e0954178b0279dfc9fa99b66c6f53e51c4860131e9e0644287a4afe4ca8e480417e070db68008a97c3397e4b320b5d1a1d7e1d18a95cfedd7d1e74997052bf649d132deb9ec53aae7dafdab55e6dae93
+Entropy.3 = 53c56660c78481be9c63284e005fcc14fbc7fb27732c9bf1366d01a426765a31
+Nonce.3 = dc7a14d0eb5b0b3534e717a0b3c64614
+AdditionalInputA.3 = 3aa848706ecb877f5bedf4ffc332d57c22e08747a47e75cff6f0fd1316861c95
+AdditionalInputB.3 = 9a401afa739b8f752fddacd291e0b854f5eff4a55b515e20cb319852189d3722
+Output.3 = 5c0eb420e0bf41ce9323e815310e4e8303cd677a8a8b023f31f0d79f0ca15aeb636099a369fd074d69889865eac1b72ab3cbfebdb8cf460b00072802e2ec648b1349a5303be4ccaadd729f1a9ea17482fd026aaeb93f1602bc1404b9853adde40d6c34b844cf148bc088941ecfc1642c8c0b9778e45f3b07e06e21ee2c9e0300
+Entropy.4 = f63c804404902db334c54bb298fc271a21d7acd9f770278e089775710bf4fdd7
+Nonce.4 = 3e45009ea9cb2a36ba1aa4bf39178200
+AdditionalInputA.4 = d165a13dc8cc43f3f0952c3f5d3de4136954d983683d4a3e6d2dc4c89bf23423
+AdditionalInputB.4 = 75106bc86d0336df85097f6af8e80e2da59046a03fa65b06706b8bbc7ffc6785
+Output.4 = 6363139bba32c22a0f5cd23ca6d437b5669b7d432f786b8af445471bee0b2d24c9d5f2f93717cbe00d1f010cc3b9c515fc9f7336d53d4d26ba5c0d76a90186663c8582eb739c7b6578a3328bf68dc2cec2cd89b3a90201f6993adcc854df0f5c6974d0f5570765a15fe03dbce28942dd2fd16ba2027e68abac83926969349af8
+Entropy.5 = 2aaca9147da66c176615726b69e3e851cc3537f5f279fe7344233d8e44cfc99d
+Nonce.5 = 4e171f080af9a6081bee9f183ac9e340
+AdditionalInputA.5 = d75a2a6eb66c3833e50f5ec3d2e434cf791448d618026d0c360806d120ded669
+AdditionalInputB.5 = b643b74c15b37612e6577ed7ca2a4c67a78d560af9eb50a4108fca742e87b8d6
+Output.5 = 501dcdc977f4ba856f24eaa4968b374bebb3166b280334cb510232c31ebffde10fa47b7840ef3fe3b77725c2272d3a1d4219baf23e0290c622271edcced58838cf428f0517425d2e19e0d8c89377eecfc378245f283236fafa466c914b99672ceafab369e8889a0c866d8bd639db9fb797254262c6fd44cfa9045ad6340a60ef
+Entropy.6 = a2e4cd48a5cf918d6f55942d95fcb4e8465cdc4f77b7c52b6fae5b16a25ca306
+Nonce.6 = bef036716440db6e6d333d9d760b7ca8
+AdditionalInputA.6 = bfa591c7287f3f931168f95e38869441d1f9a11035ad8ea625bb61b9ea17591c
+AdditionalInputB.6 = c00c735463bca215adc372cb892b05e939bf669583341c06d4e31d0e5b363a37
+Output.6 = e7d136af69926a5421d4266ee0420fd729f2a4f7c295d3c966bdfa05268180b508b8a2852d1b3a06fd2ab3e13c54005123ef319f42d0c6d3a575e6e7e1496cb28aacadbcf83740fba8f35fcee04bb2ed8a51db3d3362b01094a62fb57e33c99a432f29fce6676cffbbcc05107e794e75e44a02d5e6d9d748c5fbff00a0178d65
+Entropy.7 = 95a67771cba69011a79776e713145d309edae56fad5fd6d41d83eaff89df6e5e
+Nonce.7 = be5b5164e31ecc51ba6f7c3c5199eb33
+AdditionalInputA.7 = 065f693b229a7c4fd373cd15b3807552dd9bf98c5485cef361949d4e7d774b53
+AdditionalInputB.7 = 9afb62406f0e812c4f156d58b19a656c904813c1b4a45a0029ae7f50731f8014
+Output.7 = f61b61a6e79a41183e8ed6647899d2dc85cdaf5c3abf5c7f3bf37685946dc28f4923dc842f2d4326bd6ce0d50a84cb3ba869d72a36e246910eba6512ba36cd7ed3a5437c9245b00a344308c792b668b458d3c3e16dee2fbec41867da31084d46d8ec168de2148ef64fc5b72069abf5a6ada1ead2b7146bb793ff1c9c3690fa56
+Entropy.8 = a459e1815cbca4514ec8094d5ab2414a557ba6fe10e613c345338d0521e4bf90
+Nonce.8 = 62221392e2552e76cd0d36df6e6068eb
+AdditionalInputA.8 = 0a3642b02b23b3ef62c701a63401124022f5b896de86dab6e6c7451497aa1dcc
+AdditionalInputB.8 = c80514865901371c45ba92d9f95d50bb7c9dd1768cb3dfbc45b968da94965c6e
+Output.8 = 464e6977b8adaef307c9623e41c357013249c9ffd77f405f3925cebb69f151ce8fbb6a277164002aee7858fc224f6499042aa1e6322deee9a5d133c31d640e12a7487c731ba03ad866a24675badb1d79220c40be689f79c2a0be93cb4dada3e0eac4ab140cb91998b6f11953e68f2319b050c40f71c34de9905ae41b2de1c2f6
+Entropy.9 = 252c2cad613e002478162861880979ee4e323025eebb6fb2e0aa9f200e28e0a1
+Nonce.9 = d001bc9a8f2c8c242e4369df0c191989
+AdditionalInputA.9 = 9bcfc61cb2bc000034bb3db980eb47c76fb5ecdd40553eff113368d639b947fd
+AdditionalInputB.9 = 8b0565c767c2610ee0014582e9fbecb96e173005b60e9581503a6dca5637a26e
+Output.9 = e96c15fe8a60692b0a7d67171e0195ff6e1c87aab844221e71700d1bbee75feea695f6a740c9760bbe0e812ecf4061d8f0955bc0195e18c4fd1516ebca50ba6a6db86881737dbab8321707675479b87611db6af2c97ea361a5484555ead454defb1a64335de964fc803d40f3a6f057893d2afc25725754f4f00abc51920743dc
+Entropy.10 = 8be0ca6adc8b3870c9d69d6021bc1f1d8eb9e649073d35ee6c5aa0b7e56ad8a5
+Nonce.10 = 9d1265f7d51fdb65377f1e6edd6ae0e4
+AdditionalInputA.10 = da86167ac997c406bb7979f423986a84ec6614d6caa7afc10aff0699a9b2cf7f
+AdditionalInputB.10 = e4baa3c555950b53e2bfdba480cb4c94b59381bac1e33947e0c22e838a9534cf
+Output.10 = 64384ecc4ea6b458efc227ca697eac5510092265520c0a0d8a0ccf9ed3ca9d58074671188c6a7ad16d0b050cdc072c125d7298d3a31d9f044a9ee40da0089a84fea28cc7f05f1716db952fad29a0e779635cb7a912a959be67be2f0a4170aace2981802e2ff6467e5b46f0ffbff3b42ba5935fd553c82482ac266acf1cd247d7
+Entropy.11 = d43a75b6adf26d60322284cb12ac38327792442aa8f040f60a2f331b33ac4a8f
+Nonce.11 = 0682f8b091f811afacaacaec9b04d279
+AdditionalInputA.11 = 7fd3b8f512940da7de5d80199d9a7b42670c04a945775a3dba869546cbb9bc65
+AdditionalInputB.11 = 2575db20bc7aafc2a90a5dabab760db851d754777bc9f05616af1858b24ff3da
+Output.11 = 0da7a8dc73c163014bf0841913d3067806456bbca6d5de92b85534c6545467313648d71ef17c923d090dc92cff8d4d1a9a2bb63e001dc2e8ab1a597999be3d6cf70ff63fee9985801395fbd4f4990430c4259fcae4fa1fcd73dc3187ccc102d04af7c07532885e5a226fc42809c48f22eecf4f6ab996ae4fcb144786957d9f41
+Entropy.12 = 64352f236af5d32067a529a8fd05ba00a338c9de306371a0b00c36e610a48d18
+Nonce.12 = df99ed2c7608c870624b962a5dc68acd
+AdditionalInputA.12 = da416335e7aaf60cf3d06fb438735ce796aad09034f8969c8f8c3f81e32fef24
+AdditionalInputB.12 = a28c07c21a2297311adf172c19e83ca0a87731bdffb80548978d2d1cd82cf8a3
+Output.12 = 132b9f25868729e3853d3c51f99a3b5fae6d4204bea70890daf62e042b776a526c8fb831b80a6d5d3f153237df1fd39b6fd9137963f5516d9cdd4e3f9195c46e9972c15d3edc6606e3368bde1594977fb88d0ca6e6f5f3d057ccadc7d7dab77dfc42658a1e972aa446b20d418286386a52dfc1c714d2ac548713268b0b709729
+Entropy.13 = 282f4d2e05a2cd30e9087f5633089389449f04bac11df718c90bb351cd3653a5
+Nonce.13 = 90a7daf3c0de9ea286081efc4a684dfb
+AdditionalInputA.13 = 2630b4ccc7271cc379cb580b0aaede3d3aa8c1c7ba002cf791f0752c3d739007
+AdditionalInputB.13 = c31d69de499f1017be44e3d4fa77ecebc6a9b9934749fcf136f267b29115d2cc
+Output.13 = c899094520e0197c37b91dd50778e20a5b950decfb308d39f1db709447ae48f6101d9abe63a783fbb830eec1d359a5f61a2013728966d349213ee96382614aa4135058a967627183810c6622a2158cababe3b8ab99169c89e362108bf5955b4ffc47440f87e4bad0d36bc738e737e072e64d8842e7619f1be0af1141f05afe2d
+Entropy.14 = 13c752b9e745ce77bbc7c0dbda982313d3fe66f903e83ebd8dbe4ff0c11380e9
+Nonce.14 = f1a533095d6174164bd7c82532464ae7
+AdditionalInputA.14 = 4f53db89b9ba7fc00767bc751fb8f3c103fe0f76acd6d5c7891ab15b2b7cf67c
+AdditionalInputB.14 = 582c2a7d34679088cca6bd28723c99aac07db46c332dc0153d1673256903b446
+Output.14 = 6311f4c0c4cd1f86bd48349abb9eb930d4f63df5e5f7217d1d1b91a71d8a6938b0ad2b3e897bd7e3d8703db125fab30e03464fad41e5ddf5bf9aeeb5161b244468cfb26a9d956931a5412c97d64188b0da1bd907819c686f39af82e91cfeef0cbffb5d1e229e383bed26d06412988640706815a6e820796876f416653e464961
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 5cacc68165a2e2ee20812f35ec73a79dbf30fd475476ac0c44fc6174cdac2b55
+Nonce.0 = 6f885496c1e63af620becd9e71ecb824
+PersonalisationString.0 = e72dd8590d4ed5295515c35ed6199e9d211b8f069b3058caa6670b96ef1208d0
+Output.0 = f1012cf543f94533df27fedfbf58e5b79a3dc517a9c402bdbfc9a0c0f721f9d53faf4aafdc4b8f7a1b580fcaa52338d4bd95f58966a243cdcd3f446ed4bc546d9f607b190dd69954450d16cd0e2d6437067d8b44d19a6af7a7cfa8794e5fbd728e8fb2f2e8db5dd4ff1aa275f35886098e80ff844886060da8b1e7137846b23b
+Entropy.1 = 8df013b4d103523073917ddf6a869793059e9943fc8654549e7ab22f7c29f122
+Nonce.1 = da2625af2ddd4abcce3cf4fa4659d84e
+PersonalisationString.1 = b571e66d7c338bc07b76ad3757bb2f9452bf7e07437ae8581ce7bc7c3ac651a9
+Output.1 = b91cba4cc84fa25df8610b81b641402768a2097234932e37d590b1154cbd23f97452e310e291c45146147f0da2d81761fe90fba64f94419c0f662b28c1ed94da487bb7e73eec798fbcf981b791d1be4f177a8907aa3c401643a5b62b87b89d66b3a60e40d4a8e4e9d82af6d2700e6f535cdb51f75c321729103741030ccc3a56
+Entropy.2 = 565b2b77937ba46536b0f693b3d5e4a8a24563f9ef1f676e8b5b2ef17823832f
+Nonce.2 = 4ef3064ec29f5b7f9686d75a23d170e3
+PersonalisationString.2 = 3b722433226c9dba745087270ab3af2c909425ba6d39f5ce46f07256068319d9
+Output.2 = d144ee7f8363d128872f82c15663fe658413cd42651098e0a7c51a970de75287ec943f9061e902280a5a9e183a7817a44222d198fbfab184881431b4adf35d3d1019da5a90b3696b2349c8fba15a56d0f9d010a88e3f9eeedb67a69bcaa71281b41afa11af576b765e66858f0eb2e4ec4081609ec81da81df0a0eb06787340ea
+Entropy.3 = fc3832a91b1dcdcaa944f2d93cbceb85c267c491b7b59d017cde4add79a836b6
+Nonce.3 = d5e76ce9eabafed06e33a913e395c5e0
+PersonalisationString.3 = ffc5f6eefd51da64a0f67b5f0cf60d7ab43fc7836bca650022a0cee57a43c148
+Output.3 = 0e713c6cc9a4dbd4249201d12b7bf5c69c3e18eb504bf3252db2f43675e17d99b6a908400cea304011c2e54166dae1f20260008efe4e06a87e0ce525ca482bca223a902a14adcf2374a739a5dfeaf14cadd72efa4d55d15154c974d9521535bcb70658c5b6c944020afb04a87b223b4b8e5d89821704a9985bb010405ba8f3d4
+Entropy.4 = 8009eb2cb49fdf16403bcdfd4a9f952191062acb9cc111eca019f957fb9f4451
+Nonce.4 = 355598866952394b1eddd85d59f81c9d
+PersonalisationString.4 = 09ff1d4b97d83b223d002e05f754be480d13ba968e5aac306d71cc9fc49cc2dd
+Output.4 = 9550903c2f02cf77c8f9c9a37041d0040ee1e3ef65ba1a1fbbcf44fb7a2172bd6b3aaabe850281c3a1778277bacd09614dfefececac64338ae24a1bf150cbf9d9541173a82ecba08aa19b75abb779eb10efa4257d5252e8afcac414bc3bb5d3006b6f36fb9daea4c8c359ef6cdbeff27c1068571dd3c89dc87eda9190086888d
+Entropy.5 = a6e4c9a8bd6da23b9c2b10a7748fd08c4f782fadbac7ea501c17efdc6f6087bd
+Nonce.5 = acdc47edf1d3b21d0aec7631abb6d7d5
+PersonalisationString.5 = c16ee0908a5886dccf332fbc61de9ec7b7972d2c4c83c477409ce8a15c623294
+Output.5 = a52f93ccb363e2bdf0903622c3caedb7cffd04b726052b8d455744c71b76dee1b71db9880dc3c21850489cb29e412d7d80849cfa9151a151dcbf32a32b4a54cac01d3200200ed66a3a5e5c131a49655ffbf1a8824ff7f265690dffb4054df46a707b9213924c631c5bce379944c856c4f7846e281ac89c64fad3a49909dfb92b
+Entropy.6 = 59d6307460a9bdd392dfc0904973991d585696010a71e52d590a5039b4849fa4
+Nonce.6 = 34a0aafb95917cbf8c38fc5548373c05
+PersonalisationString.6 = 0407b7c57bc11361747c3d67526c36e228028a5d0b145d66ab9a2fe4b07507a0
+Output.6 = 299aba0661315211b09d2861855d0b4b125ab24649461341af6abd903ed6f025223b3299f2126fcad44c675166d800619cf49540946b12138989417904324b0ddad121327211a297f11259c9c34ce4c70c322a653675f78d385e4e2443f8058d141195e17e0bd1b9d44bf3e48c376e6eb44ef020b11cf03eb141c46ecb43cf3d
+Entropy.7 = 9ae3506aadbc8358696ba1ba17e876e1157b7048235921503d36d9211b430342
+Nonce.7 = 9abf7d66afee5d2b811cba358bbc527d
+PersonalisationString.7 = 0d645f6238e9ceb038e4af9772426ca110c5be052f8673b8b5a65c4e53d2f519
+Output.7 = 5f032c7fec6320fe423b6f38085cbad59d826085afe915247b3d546c4c6b174554dd4877c0d671de9554b505393a44e71f209b70f991ac8aa6e08f983fff2a4c817b0cd26c12b2c929378506489a75b2025b358cb5d0400821e7e252ac6376cd94a40c911a7ed8b6087e3de5fa39fa6b314c3ba1c593b864ce4ff281a97c325b
+Entropy.8 = 96ae3b8775b36da2a29b889ad878941f43c7d51295d47440cd0e3c4999193109
+Nonce.8 = 1fe022a6fc0237b055d4d6a7036b18d5
+PersonalisationString.8 = 1e40e97362d0a823d3964c26b81ab53825c56446c5261689011886f19b08e5c2
+Output.8 = e707cd14b06ce1e6dbcceaedbf08d88891b03f44ad6a797bd12fdeb557d0151df9346a028dec004844ca46adec3051dafb345895fa9f4604d8a13c8ff66ae093fa63c4d9c0816d55a0066d31e8404c841e87b6b2c7b5ae9d7afb6840c2f7b441bf2d3d8bd3f40349c1c014347c1979213c76103e0bece26ad7720601eff42275
+Entropy.9 = 33f5120396336e51ee3b0b619b5f873db05ca57cda86aeae2964f51480d14992
+Nonce.9 = 6f1f6e9807ba5393edcf3cb4e4bb6113
+PersonalisationString.9 = 3709605af44d90196867c927512aa8ba31837063337b4879408d91a05c8efa9f
+Output.9 = 8b8291126ded9acef12516025c99ccce225d844308b584b872c903c7bc6467599a1cead003dc4c70f6d519f5b51ce0da57f53da90dbe8f666a1a1dde297727fee2d44cebd1301fc1ca75956a3fcae0d374e0df6009b668fd21638d2b733e6902d22d5bfb4af1b455975e08eef0ebe4dc87705801e7776583c8de11672729f723
+Entropy.10 = ad300b799005f290fee7f930eebce158b98fb6cb449987fe433f955456b35300
+Nonce.10 = 06aa2514e4bd114edf7ac105cfef2772
+PersonalisationString.10 = 87ada711465e4169da2a74c931afb9b5a5b190d07b7af342aa99570401c3ee8a
+Output.10 = 80d7c606ff49415a3a92ba1f2943235c01339c8f9cd0b0511fbfdf3ef23c42ffff008524193faaa4b7f2f2eb0cfa221d9df89bd373fe4e158ec06fad3ecf1eb48b8239b0bb826ee69d773883a3e8edac66254610ff70b6609836860e39ea1f3bfa04596fee1f2baca6cebb244774c6c3eb4af1f02899eba8f4188f91776de16f
+Entropy.11 = 130b044e2c15ab89375e54b72e7baae6d4cad734b013a090f4df057e634f6ff0
+Nonce.11 = 65fd6ac602cd44107d705dbc066e52b6
+PersonalisationString.11 = f374aba16f34d54aae5e494505b67d3818ef1c08ea24967a76876d4361379aec
+Output.11 = 5d179534fb0dba3526993ed8e27ec9f915183d967336bb24352c67f4ab5d7935d3168e57008da851515efbaecb69904b6d899d3bfa6e9805659aef2942c4903875b8fcbc0d1d24d1c075f0ff667c1fc240d8b410dff582fa71fa30878955ce2ed786ef32ef852706e62439b69921f26e84e0f54f62b938f04905f05fcd7c2204
+Entropy.12 = 716430e999964b35459c17921fe5f60e09bd9ab234cb8f4ba4932bec4a60a1d5
+Nonce.12 = 9533b711e061b07d505da707cafbca03
+PersonalisationString.12 = 372ae616d1a1fc45c5aecad0939c49b9e01c93bfb40c835eebd837af747f079d
+Output.12 = a80d6a1b2d0ce01fe0d26e70fb73da20d45841cf01bfbd50b90d2751a46114c0e758cb787d281a0a9cf62f5c8ce2ee7ca74fefff330efe74926acca6d6f0646e4e3c1a1e52fce1d57b88beda4a5815896f25f38a652cc240deb582921c8b1d03a1da966dd04c2e7eee274df2cd1837096b9f7a0d89a82434076bc30173229a60
+Entropy.13 = 7679f154296e6d580854826539003a82d1c54e2e062c619d00da6c6ac820789b
+Nonce.13 = 55d12941b0896462e7d888e5322a99a3
+PersonalisationString.13 = ba4d1ed696f58ef64596c76cee87cc1ca83069a79e7982b9a06f9d62f4209faf
+Output.13 = 10dc7cd2bb68c2c28f76d1b04ae2aa287071e04c3b688e1986b05cc1209f691daa55868ebb05b633c75a40a32b49663185fe5bb8f906008347ef51590530948b87613920014802e5864e0758f012e1eae31f0c4c031ef823aecfb2f8a73aaa946fc507037f9050b277bdeaa023123f9d22da1606e82cb7e56de34bf009eccb46
+Entropy.14 = 8ca4a964e1ff68753db86753d09222e09b888b500be46f2a3830afa9172a1d6d
+Nonce.14 = a59394e0af764e2f21cf751f623ffa6c
+PersonalisationString.14 = eb8164b3bf6c1750a8de8528af16cffdf400856d82260acd5958894a98afeed5
+Output.14 = fc5701b508f0264f4fdb88414768e1afb0a5b445400dcfdeddd0eba67b4fea8c056d79a69fd050759fb3d626b29adb8438326fd583f1ba0475ce7707bd294ab01743d077605866425b1cbd0f6c7bba972b30fbe9fce0a719b044fcc1394354895a9f8304a2b5101909808ddfdf66df6237142b6566588e4e1e8949b90c27fc1f
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 5d3286bc53a258a53ba781e2c4dcd79a790e43bbe0e89fb3eed39086be34174b
+Nonce.0 = c5422294b7318952ace7055ab7570abf
+PersonalisationString.0 = 2dba094d008e150d51c4135bb2f03dcde9cbf3468a12908a1b025c120c985b9d
+AdditionalInputA.0 = 793a7ef8f6f0482beac542bb785c10f8b7b406a4de92667ab168ecc2cf7573c6
+AdditionalInputB.0 = 2238cdb4e23d629fe0c2a83dd8d5144ce1a6229ef41dabe2a99ff722e510b530
+Output.0 = d04678198ae7e1aeb435b45291458ffde0891560748b43330eaf866b5a6385e74c6fa5a5a44bdb284d436e98d244018d6acedcdfa2e9f499d8089e4db86ae89a6ab2d19cb705e2f048f97fb597f04106a1fa6a1416ad3d859118e079a0c319eb95686f4cbcce3b5101c7a0b010ef029c4ef6d06cdfac97efb9773891688c37cf
+Entropy.1 = c2a566a9a1817b15c5c3b778177ac87c24e797be0a845f11c2fe399dd37732f2
+Nonce.1 = cb1894eb2b97b3c56e628329516f86ec
+PersonalisationString.1 = 13ce4d8dd2db9796f94156c8e8f0769b0aa1c82c1323b61536603bca37c9ee29
+AdditionalInputA.1 = 413dd83fe56835abd478cb9693d67635901c40239a266462d3133b83e49c820b
+AdditionalInputB.1 = d5c4a71f9d6d95a1bedf0bd2247c277d1f84a4e57a4a8825b82a2d097de63ef1
+Output.1 = b3a3698d777699a0dd9fa3f0a9fa57832d3cefac5df24437c6d73a0fe41040f1729038aef1e926352ea59de120bfb7b073183a34106efed6278ff8ad844ba0448115dfddf3319a82de6bb11d80bd871a9acd35c73645e1270fb9fe4fa88ec0e465409ea0cba809fe2f45e04943a2e396bbb7dd2f4e0795303524cc9cc5ea54a1
+Entropy.2 = a33288a96f41dd54b945e060c8bd0c094f1e28267cc1dcbba52063c1a9d54c4d
+Nonce.2 = 36918c977e1a7276a2bb475591c367b7
+PersonalisationString.2 = 6aa528c940962638dc2201738850fd1fe6f5d0eb9f687ff1af39d9c7b36830d9
+AdditionalInputA.2 = 37ee633a635e43af59abdb1762c7ea45bfe060ec1d9077ecd2a43a658673f3c7
+AdditionalInputB.2 = 2eb96f2e28fa9f674bb03ade703b8f791ee5356e2ee85c7ed5bda96325256c61
+Output.2 = db2f91932767eb846961ce5321c7003431870508e8c6f8d432ca1f9cee5cdc1aed6e0f133d317eb6990c4b3b0a360cdfb5b43a6e712bd46bca04c414868fab22c6a49c4b89c812697c3a7fbfc8ddf10c8aa5ebf13a09fd114eb2a02a07f69786f3ce7fd30231f22779bc8db103b13fa546dbc45a89a86275281172761683d384
+Entropy.3 = 5f37b6e47e1776e735adc03d4b999879477ff4a206231924033d94c0114f911b
+Nonce.3 = 7d12d62c79c9f6234ae0314156947459
+PersonalisationString.3 = 92d4d9fab5f8bf5119f2663a9df7334f50dcde74fb9d7732f7eba56501e60d54
+AdditionalInputA.3 = c9aef0d7a9ba7345d08b6d5b5ce5645c7495b8685e6b93846ffcf470f5abd40d
+AdditionalInputB.3 = 50d9d1f5074f7d9f1a24a9c63aa47b94da5ba78db1b0f18e4d4fe45c6875813c
+Output.3 = 20d942bbd7d98700faa37e94d53bf74f2d6bd1d8c95c0b88d842c4857797d59e7c8788aeeac29740122f208f703bf35dc32b0035db0648384feb6aa17a3274bc09b2d2b746c5a06fd82f4469fb86131a49482cb7be7d9b4b95042394cfb18b13f333ec0fe5c227bf1d8f33ecb2e42e358b6c3e034cb585331bd1d27f638029b9
+Entropy.4 = 2311c5afd64c584484b2729e84db80c0b4063fe9ca7edc83350488d7e67264a0
+Nonce.4 = 6a6dfd975a0dc7b72df1f107c4b3b3a6
+PersonalisationString.4 = 2abd870ec5fe26ed14dfa57a3309f920131b70580c3639af2645cd1af93db1b1
+AdditionalInputA.4 = c6e532a3b25653b6002aed5269cc2118749306e736bde039d4d569d4f967773f
+AdditionalInputB.4 = 5e7d26c4da769c373092b2b4f72b109fe34bdb7d169ea38f78ebae5df4a15759
+Output.4 = cacaeb1b4ac2305d8714eb50cbe1c67c5a2c0bbc7938fdfdcafef7c85fc40becbf777a4cfb6f14c6eee320943a493d2b0a744a6eb3c256ee9a3763037437df9adce3e2260f0c35e958af0edb5a81debd8bdaf2b8bb2b98b9186e5a222a21609ff58df4cbe1d4898d10d6e7c46f31f5cb1041bfd83a5fb27d5c56c961e91403fc
+Entropy.5 = 362ece9d330e1172a8f9e50258476d0c79c3ee50346524ba12d970ee3a6ef8c5
+Nonce.5 = cf11bcb4d9d51311ceacfca8705e833f
+PersonalisationString.5 = abb5a8edde02e526449284ecc31bc713383df3ed085f752e3b6a32f305861eed
+AdditionalInputA.5 = 746302ab1f4a86b17546bea762e929360f2e95c7788a63545a264ef997c8c65e
+AdditionalInputB.5 = b907c5b2a8833a48e56e819228ce9a050b41b3309f5ca37bed720311d92b33af
+Output.5 = 73c7131a558350590053580873ef956ff952f2aa6ff1bea452e013d1bc2afddea2311756dbe756e63ba6258480c48f3f6c1319b5f572f67ca530af09e39413d1d432bea8f89206619618cb0e7c88e9f2033639d0eb0efc20616b64f940da99b88231984c3fb23f19e890576f555fde394dbd4351f17a7ffd5c369379001bda03
+Entropy.6 = cf614bc29946bc0095f415e8bdeda10aab05392f9cc9187a86ea6ec95ee422e1
+Nonce.6 = 77fb5ec22dc0432cc13f4693e2e3bd9a
+PersonalisationString.6 = e4ce77914ffbc5fddf1fb51edfafdc196109139b84c741354135ec8d314c7c43
+AdditionalInputA.6 = e1e83ee1205acaf6164dc287aec08e5b32789e5be818078db39e53cad589db51
+AdditionalInputB.6 = 4e20c0226d5e1e7e805679f03f72452b5bea2d0ba41e0c12329bf60eb3016dd1
+Output.6 = 838fdf1418a746aa52ae4005d90c3fd301f648c5770ffef2a9f3912e37a93850cc4b8bfcce910aead0cb75958823b1a62e283901c5e4a3980e4ea36257458e2e4953555819b8852a26489b1d74821f80c9908469b43f124ff7ea62497c36159a47353098a1b9ec32e54800d6704371cc37f357ad74aacc203e9b6db97f94d0c4
+Entropy.7 = a8da1d3e233f393fd44d204c200202f7d01896e72c5ac652940cfd15b5d4b0bd
+Nonce.7 = 0a112b4cb0890af0a495e0f49fcf6874
+PersonalisationString.7 = d2e32799bc822b8d033299bdf63dc35774f7649e935d25be5b10512c430d1bda
+AdditionalInputA.7 = 920a82d76fcd2cd106ada64bba232b7b2344f3afe6b1d1d20ee8795144571009
+AdditionalInputB.7 = eeaac5878275372025f8231febed64db6a11273c3c00d625fc80a95f18ad7d3f
+Output.7 = 5f6dae489b53d89027b2cc333c700f090152d77b3eaf01d47f56ce6eca9893ef877b4cb560fab0fbdb34e3d1c6cd8480b33c053d2661a10aa531df4961b97d659c7492584236582b3fe701055efa59c328194cd1e07fcffd910d9ee01b7b9e8c8fda7f7ac01a8e203b8b26eb8078a9b9a5021562c44af24089e3ef84c1d5a6bd
+Entropy.8 = a77b1ed4ecaa650374e1052c405f1d88881c25c87d13dbe1334d8c1a847fa76b
+Nonce.8 = 05c143e2f145db216fe7be9ed23635d0
+PersonalisationString.8 = b5c750968ff09ed251d4a1c05342ac843db5246b19045728a634fa4f6e752e54
+AdditionalInputA.8 = ff5937bcd01a363696bf8e40adc8e4ab3e56dbf7e7d09451c99e538785fe6697
+AdditionalInputB.8 = 4acb34eea8266badcf8f6557a0eecf3eb4d7a295c876d6175598cb66a388efb8
+Output.8 = ec13eadfcc84e77d2a2efa1a2cd8b1355587cb27feb3d19d75b37f0446333ddb8236e751c63b7a6e595ec24a25051a696dbe8c062dd8896d1446db228a2f10e8094ee07e7ee648ed6bebb2f5ec5aae24c9c640665c28355cc11c116795ecc070790f7fdfc4398900311b6695d5da0175091ed1828d2731085bfb4a20bd86cce0
+Entropy.9 = 491686c781e83eb4e21d9989e8d718100b0d21a2c56295888baef1a65f219651
+Nonce.9 = 499085296d21065feabf3106101c8d6f
+PersonalisationString.9 = d208a72f9ae34f0817669fb04f49239dd31700f3dc9a93db8d75fb79f9b686c1
+AdditionalInputA.9 = 9ffc61893a293a864008fdd56d3292600d9e2ec8a1ea8f34ac5931e968905a23
+AdditionalInputB.9 = 4ff3a397dfdae0912032a302a5e7a07dceca8d9013a21545689319b7c024cd07
+Output.9 = 3c258ebf2203fca3b322ad1b016e21c7f5c148425f81e4fb0a0e462dce9dfa569c37a006527768297a5b68461b08912642a341b88c85597e30e7561206886098c4e2d861f11513f0ffdbbc78d3a2dd60c105abbb33c5e05ae27081b690fb8b3610917aa9bf1a4ad74481b5ff8334f14e5ad6a6a1eb2259476078076fb7e3a992
+Entropy.10 = 36a5267eeeb5a1a7d46de0f8f9281f73cd9611f01198fdaa78c5315205e5a177
+Nonce.10 = b66b5337970df36219321badacc624eb
+PersonalisationString.10 = c2a7b164949da102bece44a423197682ff97627d1fe9654266b8527f64e5b386
+AdditionalInputA.10 = a977e2d8637b019c74063d163bb25387dc56f4eb40e502cefc5ae6ad26a6abdc
+AdditionalInputB.10 = c5c9819557b1e7d8a86fa8c60be42993edc3ef539c13d9a51fb64b0de06e145e
+Output.10 = b471711a4fc7ab7247e65d2c2fe49a50169187187b7978cd2fdb0f8318be3ec55fc68ed4577ad9b42cbb57100b5d35ac86c244c4c93a5b28c1a11c2dfe905d608ec7804dec5bb15cf8d79695534d5e13a6a7e18a887ec9cf184da0cbbc6267f3a952a769403bafcdbb559401be0d8b3300ea7258b4026fc892175efd55ba1a67
+Entropy.11 = a76b0366df89e4073a6b6b9c04da1d6817ce26f1c4825cad4097bdf4d7b9445e
+Nonce.11 = 773d3cc3290176773847869be528d1a4
+PersonalisationString.11 = 1bfd3bcfb9287a5ad055d1b2b8615fa81c94ac24bc1c219a0f8de58789e0404a
+AdditionalInputA.11 = edd879fa56f21d93029da875b683ce50f6fdc4c0da41da051d000eed2afefefa
+AdditionalInputB.11 = f528ffd29160039260133ed9654589ce60e39e7f667c34f82cda65ddcf5fff14
+Output.11 = 39d1ff8848e74dd2cdc6b818ad69823878062116fdf1679942f892c7e191be1c4b6ea268ecdff001b22af0d510f30c2c25b90fc34927f46e3f45d36b0e1848b3a5d54c36c7c65ee7287d325dfbb51b56a438feb6650ce13df88bf06b87ac4a35d2a199ea888629fb0d83f82f0ea160dc79ed220d8ef195b9e80c542f60c2d320
+Entropy.12 = 46571e1df43e5e141235e2a9ec85bb0faf1dc0566031e14d41a2fbd0315653ec
+Nonce.12 = b60ef6a3347967519aabeaf748e4e991
+PersonalisationString.12 = 759fd8593e3688b23c4a003b655311770d670789878570eb3b155a8e6c2d8c45
+AdditionalInputA.12 = 033128460b449e1accb0e9c54508759ddc2538bc64b51e6277553f0c60a02723
+AdditionalInputB.12 = a5e4a717240bdeac18a0c0e231a11dc04a47d7550f342fa9a7a5ff334eb9327d
+Output.12 = 9d222df1d530ea7f8f2297a0c79d637da570b48042ecddded75956bba0f0e70b271ffa3c9a53bada6ee1b8a4203c22bfde82a5e2eb1b150f54c6483458569422c1a34a8997d42cc09750167a78bf52a0bd158397af9f83caabe689185c099bf0a9a4853dd3cf8b8e89efebb6a27dba873e65e9927741b22968f2875789b44e01
+Entropy.13 = d63980e63bbe4ac08d2ac5646bf085b82c75995e3fdfc23bb9cc734cd85ca7d2
+Nonce.13 = d33ed1dcae13fb634ba08272d6697590
+PersonalisationString.13 = acd0da070072a5340c4f5f4395568e1a36374e074196ae87f3692ee40487e1df
+AdditionalInputA.13 = f567677b5e12e26f3544be3da9314c88fc475bf84804a89a51f12b191392c02b
+AdditionalInputB.13 = c01cc7873e93c86e2bfb8fc984cfc2eab5cc58eeef018fedb5cba5aedd386156
+Output.13 = b133446f633bcb40724bbf9fa187c39a44b9c094a0a0d40e98977e5466dc2c9adf62a5f4551eeb6406a14658de8a0ed7487c3bf6277e811101284a941745ce16176acc875f1435e14161772fa84609e8123c53dd03cbb868030835c0d11d8d6aa04a1b6f908248b028997737f54735ec4ed7a81fc868199ffb61a779d9340334
+Entropy.14 = 3d99f9b7ac3a2fbe9cf15d960bf41f5588fc4db1e0d2a5c9c0fe9059f03593fb
+Nonce.14 = 411f504bb63a9b3afa7ffa1357bb48be
+PersonalisationString.14 = 0bb5ebd55981a25ba69164da49fa92f2871fd3fc65eb30d0f0d0b8d798a4f8f2
+AdditionalInputA.14 = 288e948a551284eb3cb23e26299955c2fb8f063c132a92683c1615ecaed80f30
+AdditionalInputB.14 = d975b22f79e34acf5db25a2a167ef60a10682dd9964e15533d75f7fa9efc5dcb
+Output.14 = ee8d707eea9bc7080d58768c8c64a991606bb808600cafab834db8bc884f866941b4a7eb8d0334d876c0f1151bccc7ce8970593dad0c1809075ce6dbca54c4d4667227331eeac97f83ccb76901762f153c5e8562a8ccf12c8a1f2f480ec6f1975ac097a49770219107d4edea54fb5ee23a8403874929d073d7ef0526a647011a
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 369f0eec011db3db44971ab16371c7a8de327a4852bd34226e0f25358e296ce6
+Nonce.0 = ca6043750aa99545d1597f71d583246f
+Output.0 = b507091b56fc9e9cd90fe4c466b5a132615df2d4a18f73302f1d72a416b993c4c207388699e645f6048f595fbc7c356f85f683040a1ccc3155cfe4243f169f0f3e8b2ba5fb33b56a090e553342bd543134af325baa23e4cdd114c429253c8ff9a0239d95ded339e412e23983454dd5091822b1e2712b298b319ab3d4ddef3b2c
+Entropy.1 = 268d2f3751c52f9302296f48684ec9f2d88389bca90f78211047d723b6d32e32
+Nonce.1 = 7aad9b5479dc01a02087b6a8e12b7f1c
+Output.1 = 429082b705e7d0f2b2faa9028ecbbae792ebbd1fd877e309f5288aacd58a42c2eee866c2d79c31b01501bde6c04ce92fbb40377cef98076f2b63912d3cdeaa5b075a572264509cd3fd66124744f6fa7a3be4ea6f5fde86abf79b22344d73716004c8409a79048eb9ec4a19340e26e0a9576d3964b434118ec715c5dec02984e9
+Entropy.2 = 05ccd9244ef0f0aeae3796ce9368696b90d1c4e2056e83190350e5036d9ac31e
+Nonce.2 = deb6542edd7e754963553b70c0462133
+Output.2 = 402138cb19dd4d044293f81bad9ccaa453f6cfae406f0199d0f5c844674157752b01d6d330bf61772aa2235860387e7db28dffe437477cc7f684cbfbc3434caa366ea5ec1721a65ed8fc34b2158837f83dc7bc50acee11a3b7e21b55fe88e6aa9822c9103e6e43c974ee559245a1c7f2c2c43759ea443d62a9bbe3c5119cccd0
+Entropy.3 = 159a81340a1ad14c0e77e377c9e4da79cabc3fb8f3fea8d1fd830234d715fc7b
+Nonce.3 = 87ad56b811552f05f9839a15780b8b62
+Output.3 = 04200567248d099ed436b77b1fa29b36fa708152237ac96ce18e7b41be6f81e6106feb33527066b922356d477131b45372bb1853ccdec058733274237e2c5cce342136a7b6c1ba8ca52d55241a5a759f3f18dd24ebf37f44cd29c36f606855adc89d91cfa8c0f6909479d457cd26b7eaca3e30db3abccbd89621ffe2c0eee7f0
+Entropy.4 = cb86a35f0e8aca3af38dc4eceeea21d52d43fc03d795e507bc47da9008acb0ae
+Nonce.4 = 05a5f1a5fe29bb529b83d1bfa727e341
+Output.4 = 45b03b3e8dfdddc46cafb4d9d5765a0b5bca694a73a9bcd6d0856076772fb7d99beb199b88e16badeb2dc018b7b343ff017a6b20f6987efd85d14e54ba27b68aa040d2726b3240af3b8848fdae1ba941fba58d30685428842cfd5ac1b1935341cc76433ef100c1c97fa9f11c81622ebc08515a53b707d4f2c57bf24c3b01af32
+Entropy.5 = 680b1088d2a6fbe45e629af37221e89605d6e285f80e53a8bbcdf6dee0fbb6a6
+Nonce.5 = c61821d54b747e2c5287d086dd02e2e2
+Output.5 = 1264b7f3da4a3dc68cb09c40ac75e53488581bf4fc7647a907b381e140c20fe7c707d4bc23304ccf080272731e77bfb65a39035cde1260d58b117c8a240074d6b731f529a8ca72706f1f387e8c8d0a22726aa4c687e2c6b8bdae8204f80e6fa72b50ef2531de3d7adbef5bac4cc9056129ced057995149bd4f2d824add6cc446
+Entropy.6 = 53e83610917a79598a6f5383c2443ead0b3f35f3ec853ef81109c322bd601fd5
+Nonce.6 = 8211d8f173da228877d99f16f5f8082e
+Output.6 = 46094c468c3513e45ba28c4f4466bf5e96c81962ea2cd7bd444d90ddedb16faae7764720e4ddb8755a56bd3ce81598f79b3d135c72f33cfc7a2db67aa0f7ce550b7b6285dfc9f7d2f9a79175c6c5a6e47a9d83c2841b0f8b6ec7d6b864a885abbdf24a516310b1c4dc8d399fc01ca0be7c709f3afb2a3e60290e6ea7f3410003
+Entropy.7 = 24286f08f6960927ac1c5a24c7b75c6a02f40a095ae42c6d4df844015bf08471
+Nonce.7 = 472072af39fcc2e1af9b4eb59e7d645d
+Output.7 = a32ddffd7cb5e73739de87623aad024020a506c551228a465223affe3f43d034fcfc32130878e807c313cbb178be0a87b9f14cdab345b712305f7888aebf0c462755ba59cf6caba7b62185f9ac4b2f253954d94359752999f490b9435d9e1992c34b1ab6a4390547f3dff5517a4209da9fa5284e309b6f3f14f1cd516be3d8b0
+Entropy.8 = da21ac05cdec567d217433dbaac74e3f9e5ac8039412e38b1eedf3a703086110
+Nonce.8 = d9301860762979f2c042233fdd4db0b0
+Output.8 = 48d4111eb766c5bb15591ee9af02c803cd04f3e59db467a6f9083d40d5a916f3092abe5f68297e999bd3a31b0328925417c39cc6232bfa9e74ff9e29dd07e965f52d5127cf1fe2fd3bbb9cd33a87ad2f23e9bbc3549ca69fd25b61462ab4a8e8bd3986ebfda89aaff68e99aea2dd1dc81aeda759e80105f5459207729670300f
+Entropy.9 = 36ca7fa625f0dfd939c8cd11192d9c6a364d57af22d0be45c3e5c6deb104fe73
+Nonce.9 = b74646e6e03efe09d2648271305e8597
+Output.9 = 30edf9da91c2f9824b4c49d601b7df039481df61388766ad0967a665c8907bc57dc781cd007100339dd92c4a8e229998170d8cf3d592a89cc29a43b6b4288fae322f333bd34cc56b95015802c67e358b8d81e0e70578f4437ed4b031550bf6d5d4b58030fdff34841270476afda9b6376363100c3fd3423f5f8c1fddabbda653
+Entropy.10 = 8df532502f4b0b721aabc640bf26fce2c0e98b9ce3d1b13c2366242c839716c1
+Nonce.10 = a1250ef983c762deb1207f22b37c58cf
+Output.10 = 5764dbb364f5bdb53da80028af9aedc7373630ccd1ff8a92fe4bf7b71660d1fdb30af2de5648316fe430baf4fa38673378c3a7285f603f3264546e3bdb0ad3db5e0d41ff507bcb61cc05d9e878186c489804bc79a2cb4d105662310682c47dd4636bc96b9e84261844854bbc835fba216f2bf3a5c9cd439a5351d037c601a176
+Entropy.11 = 86e62b68da31a62d1bb04d391cda1cc1fa3a167d8017e9ca056ad41dde790807
+Nonce.11 = 72a9fca5fafb7fc4d65a7d7932d1c1df
+Output.11 = 58f260156b6c82e536b1b250cde98636a1aaf4369ded6a469c6f83d47d371e64677b4c7ce85c2aa1c3addef187bf7c0845b019ae75b53405595b24f1cafff5734918dd2e36999c5cafbb45e72400ccc53f0defd01214800e59986c85d7fea49beaf7cd1340d42931c4debda0be70e27163b4c81f10c6ca76485961282066bfb0
+Entropy.12 = 0ac25dffd09bd845ed6f213ef2e1da3bd17beb4ef00f55fbcc21448676617950
+Nonce.12 = 6a6857e0009ceb559de41cecad964265
+Output.12 = 6fb0eaada52f5dd0a4c920fced2f86b1a7a1b549649ced0ac23afc336dea4de934dc812260cfaa33a9d111ea6117964c6a6647417da263645a560885e6cc9d3c2a1e0953a525e5df86fbd12df7f87cf632c5f54db554a07805d6977f8e29552c4935e9b2a2ef67276b40756a207162f1d44c90afacecc5d89185b6be4f83d0f3
+Entropy.13 = 4bbafbbca804e6a4aafd89744558cc7758bcd01bd7954cf6d2940307dd9e0d2f
+Nonce.13 = ae5dfda1271a218ed6cc2d03cc98ad55
+Output.13 = 49fd164513dc36255c799e2b86912570a7ccb6df9ecdf14d75894d4950eee167a87f3fef796fa71732d12d8aa0d1c09eef37ebbe9131b1e6aedfcb2248ecc7a86b3305aef3d56b88826feefed19f9e6a14068016f0f5ff902431f859fa148e5412518709c0bcd3088229ba66c96d7ddf40f07c077bb265811bef8198a70f7d9b
+Entropy.14 = 17da1efd3e5250dfde3ef1683bd9cf4d4432a2f223399664f7645763bebd5ebd
+Nonce.14 = 0b160c67b97d5302972b5c517bed5a7c
+Output.14 = 859bab959dd16f2cddb05376b3d3e46cd13c191c18203bf3c0bbd5803cc559aacce48d88564166fd5f43c22d08cda1acd8004f36915739796a39ca96f8e7def14b58a8ee55ff72de7e2e2727389e027657447e32e47d4ea2f0fda48e86046d111cc334bebf4ee1019199c94fdb26169661cec0b0c47176cb5fb7aed8ad35afb1
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 8ee1df3d864bca351263fa00489d73d4a14c92f022a7cc2473695f4aa28ac496
+Nonce.0 = 7772269c9b6fa377349729a2a20bc1a6
+AdditionalInputA.0 = e60fd2e75dd0693ab0cdd0bebcf39be34aa2eef17f186e40c97426e91ddc3fbc
+AdditionalInputB.0 = 45daae78c6ff1b619460be949b6c6d02e1daddccd6839a38d5f631ac704886bd
+Output.0 = 0d44fc2c64abf7e2deb1d4796e244afcd2cbcf543b52c5756b7395eef49480da5a0dc060d7d6b0b5beb6655ed67d13e903e8731b482fff8bb8abd96323a5b4e6b342b1d665fcba0fdd146d41afe3c413fdfb90883170afa62a1fe81d0dd2ad87b2b7db73ef15c5cbdaad876e3f279a0702f6f19a5f523615557aedf62e347d5a
+Entropy.1 = 5045965f5a7792807b5000b5ddd7fb4505731c8a54fdfaa50b15cc0f8bb554d4
+Nonce.1 = f647bf05ef60f0026786cc892d995d3c
+AdditionalInputA.1 = 0135cb725e9d586f9915d2957c2314db77dc87a29da5706e79ebeca8aec414f8
+AdditionalInputB.1 = a9dc7482c99a81f802e9cf5e1e010aaa897ef6cb87136a4fb1d565b6a1e3ede6
+Output.1 = 0096cda80775920aa62f9753f364c8d644fa398a6236b294e288ea9dedf18cffd0a44633bfa01da886b4ef9e35cfd4bd046162fdadd85952e16ee277456ed1ed4d2b1e6127b331070b275933005300af629af6e311bc58771cd79872eda4c8c1ff01bb6a649b864669f1f8ef3bd48def515ac543b71f791b228f63a83d72eded
+Entropy.2 = e1c86f1381aa66d04ef5ad4bf37d616a4f6643173d1255ce9d2d2b280e32b9f3
+Nonce.2 = 8d95c6f153a33d023f16a0223fb850b6
+AdditionalInputA.2 = 5a1ac82649fe40758175ea2190388ae4c3892a77b4b6b7d3ede659ed6412d85c
+AdditionalInputB.2 = f33df558c6c9ff6725f693dae66ae82732c9533ace7a205a76204a730bc703c6
+Output.2 = 0396c538b6c78416194759be86aeec309e650fafda1a3dd3b42fd53bee870636643e74c8ad6e2dd66ed8c523773ae73c67307ad9a38ff8eafe17047a5065416ec7a7074e32ccd0614d835845d21ad8b730c3c45636e5e7076d0609d6f418f4288e543886cd873c115b173dab45cf5ed1ee571b130a5c16c5321442513adb06a3
+Entropy.3 = f6c342ee8c1ce21c48ef23b7fbb81f09db4a4ba40f9530ac91651d01157cd773
+Nonce.3 = 8e5be622de1332f4fc7809d223122793
+AdditionalInputA.3 = 786e9d9fc8a4e69d7debb4ccbf01ccd1cfc01eecbef81e33279f795f0d93704d
+AdditionalInputB.3 = 85a54090284c779d8efa30136defd6ed23313591899cf45165e5e96965e2e9f9
+Output.3 = 72d4e84f08ae57d9caab729e3023b470aeaeb6c8d46e850bb214e54a4dc6b657577b9328eea54fe3f4ae031a8b510d2f2155dcff10d0aa50f6d977c297bb3569c62c178c3cf6eeaffab9af262bbd6ede1d376bd79260b8cdc4e65c32861a08c4f6a2fbd77a21fb2e4cb01602c978464346e28020ddf06dac7bfa6c1425fefafd
+Entropy.4 = e2f4cf8d27ae6f3d13f623c86f9b89d6a4d2ec565a14cdb598cc398bee759e54
+Nonce.4 = 4c9ba98dc07febbbb0953e5255712933
+AdditionalInputA.4 = e87c78debf021b4109b9145e7aea28e37cba6dc0809c89565bf9e445ccfe7a6d
+AdditionalInputB.4 = ae6637919e509dcaa8b8988aa1a6d84748888d00880d2057d0aa3799f76ce85f
+Output.4 = 5edd979d099429df7ba93da29fd559adf961a7fed541fd6618132a2cff323eded1e4729570a690204a49286da6f22744f45bc52dd7704277fa2583ebd79eec34b2fb9ee548ba150c2cd8245380363b6af02568848b2c4d363fab81d8a50ab7a93b7a4c5ba518717947affc2a8cc7115881687fbac9e243a6a44b72d0ce07bc45
+Entropy.5 = c71741d9deb8d267439ad9b02898c8c86bb7c1086a4f849599415ed0e0ed32af
+Nonce.5 = cc01057e084bfb23c304f84b9fb74af2
+AdditionalInputA.5 = e0ae8cf8decb7cd7ce0362f3cb9745684e3c545380ae4c106e6017a6b022153a
+AdditionalInputB.5 = 691a785a96d36f47ab61a913990f8fa2c2ebd613f965585c328512e2b8875032
+Output.5 = 7ba7195b9589ee57c78bdb3c0be0b73aa60cf6ddce6203d4b71290714c034c11477f39ee3035f2c2c67b82b259a12cfdd94b25f1c9ec003071c749f9f49d6bf533046b41df288ee8a9f2c0d5141008b38736c881df2015d471952e04c0b67b1998100186e772033ff0c8e9eafe5b16ae5833691dc261b87fd9394f494af7b91e
+Entropy.6 = 113117270694c3bc4e71ddf24b247d1444102b8e59a60a881e237cd608dad285
+Nonce.6 = 3d0d8bbfab7f44da510bdc2b3bd82011
+AdditionalInputA.6 = d77151e85c753fa98da13045d3336135919f9b935f63b0c2b2329d48211c08cf
+AdditionalInputB.6 = 584f76c57a870b6a56ad16e1e352232790e95d84aa9e9d09ae90aaffbdfcc451
+Output.6 = 04ccffc354bb0a1cfb278af71b9a42f178aa766e2bee8b462e18d8a1c9498ec661137e194bd165b7113fb258ff04b11fba53406ad44057f692446cc688faea61863c35e7e962d8dc48b6facd6d94838c64450b1f7ffd49239a70bfd8de7522cd62471d4c9717ae1a501a7c7449ec1b2a8c8cb95a7e3e59fab4ad9cb9bb7bb38d
+Entropy.7 = dea80aa984bfab5870a28877c225fe071f087f82098a7678d4e20a7366a5ef32
+Nonce.7 = b80f9014c996e080662d2508dd5aa4c0
+AdditionalInputA.7 = b235f3e8666c052ad84806fb10049d17dd789e2c20772c8e6b626c5d18ce58e0
+AdditionalInputB.7 = 958e83f41081db21e38aca7915ac89504f96e62e2eb5d307ab95729194135063
+Output.7 = f70d390f57706633d37e5d9a084856fb4bc15b979303869f3e1dcda73898df876667825e85b873ebe05d56113779df1f396e36e4de1710425cc05235401e08b1e55fb07775d2ba525110cd7bb6c810e57320b79e3498da92a913fa5e85ca0a3c779095d03dcd711af791f4495f0d82366124c08482ae01105fe0ad3a030efa7a
+Entropy.8 = c54de4b970faa4b67cb09d9f3ca85e95b4130ba12789aee27ac6c428a6eca4bc
+Nonce.8 = 85cf6aa08e0415b3e9c1f305bc5a2b0a
+AdditionalInputA.8 = cc191b16b837e94f33e202ad65df8f69fe34ec204eec82cadc617c6df1af4089
+AdditionalInputB.8 = 6622b70c3fea83c21863f154a08fb186bc5ed9f9fcfe214b727f60e77a07aa72
+Output.8 = 1420839289f6be0af1ee01aa5644c85a58c7b9183062e2e40a2987aca2ec6c83dfe1fb3d3a578b644eff81ff5ee3722046681d1a5f81b72a05deca4747b4834e5fb2561027ea226db7b7eb7d8c7927219eae1b33509e94397a7ee756edbe28d203174d66db85911f81f381e15e3f4cb826dcb19af9ed214017c919a6e666cca6
+Entropy.9 = f2e16396676fa0d34d853ce0ea226c3871832a48df511c225f711efc3c46f58f
+Nonce.9 = a8bc3b444cc8396f1a08022f63be4d05
+AdditionalInputA.9 = 1edda2649c50714fbe61e15cf061c38460802230aedadbe3906b0923269e1149
+AdditionalInputB.9 = 9e43abc3d3a481f09bccdaf457da96581bc7d4a65d8af5952eda35e9d01a847b
+Output.9 = bfa514a6126212691aef3a7329f9e1e636b80d376b15758ae489df619ff612ae9d208e8c5030ccf678ab8d4aa841580556d1f91128cfe8998e43880eecd6204dac4874e04b9a359eb2f73921e1b4f0361ac1bd6cfa357e29cec4ed35716c1366608273e295a6a5b97f811c1d7db675ad8573b59b8418771d6215e2c282b1907c
+Entropy.10 = 6a04d1a90b7666e632cf1d18dbb0a6c7c1d20aec7f9c7ea42fc947a149329cdd
+Nonce.10 = 79e323dd7bc28b2bbed53a80e200f903
+AdditionalInputA.10 = 9856e5aad41e622f04f2934ab423aee79b649bc066bc9e70451cfc5e65d2d6b6
+AdditionalInputB.10 = a0a0aaf2201c2d12d803b3059d716c27da58041486d9ebe4e20dd1cca09859e1
+Output.10 = 8ab2ca3d82615dc53c1eb64f16f369819661c04d0a8bb56dbe5848d154cb8c30aa771b466c916e691e1f5d7564783bfdcbe88b8608321b6b5992291a33b05ebc0e5124efc370a5973011fffffb9905dc92bb1ccefa617f9b033f32e62a842ba7fdecd6e0e49cb858e24eb82bffcbbf63fa834bde4ba80db32bc21bf339eb58f3
+Entropy.11 = a99cbd7d274c6d3115ac939ca67d52d0f43ab38fb354df110264eb7d462be1ad
+Nonce.11 = 9dfa25936d6a1952c9a2e0bf530610bc
+AdditionalInputA.11 = 9f41713d7b6159022f093e3aace39fd3239033eb40f959be0e353388b23a8596
+AdditionalInputB.11 = e41b10f633dc719ccb209e6ad26ce3c4623dd6fa40e959fa7704280fc447dc90
+Output.11 = d7cc54165ee2d4fd1d89f9b025dba0bf6c3172aa7f756b6af2048ced3652e97c0241d0e8836b2d919ff43885362f53cd7569a51afa668b2dbb4dcaa23fffeee4dfa10f951c1ebddede97b8cdd5f207707030d16eaef87ae64a98df90fa3974d45ed6d604d3633a17ae90710a39e889eb62f448746a781e94f577f1085546d243
+Entropy.12 = 4fd0335159cbf717b8c6f4520661cc746836b661719f975647872658d160d440
+Nonce.12 = 14b6fdb19e6be030009d189fa3155eec
+AdditionalInputA.12 = fd94b41909b6e6bd5b966073411a54529abce0ca7b96d36d9d5ae0b252938f30
+AdditionalInputB.12 = c20650a1d9ded8e981335bed144373041be44c7c7b0c3681df5cf6a319c0cc0e
+Output.12 = 1653ad31fafddc0c56f0609c11d3d97100dccaf0c6421ca552cdffaa9d50d3fe325162589c5c20824002ea9f69d2585f8c7d75f7032b60c6053507f1cabef8f498a6766d7b1d0c7c1137e3b9f8dd06590cd4132f1fae40537ec6685fd67b801830781fba5a395081dc41ac29248710ec279ff7dc07428986bb6b520b4e822602
+Entropy.13 = 0a8bf98c5c06576c361fa8d2ad062fa285b449547cfd6b07683a9f1b7b5c9441
+Nonce.13 = 8198f6a486f6ace1ebefb650d4fb1cc4
+AdditionalInputA.13 = 02ee68246e71cb327a402a7c93e681e23f34cfc32ffd215fae52723610a5c19b
+AdditionalInputB.13 = fe0d83222c1ff9dbfef2921a391206ad8474b0e04b7534eeedd3a05dfc299c9b
+Output.13 = 9d222c7ac62a830f7deaa90394a73e0178f192c94e1781e8dc7588a9723f7d10939445e5d0529cecc8fc383bf9e5885eb6430706eedd7b99f918659d397387e9f71204df344230ad958c4a21aa206d2beaae2d45f1435c31d648536df00c8ef9b5f52b40700524e2728f510b2f6d8678339d23861999fc8ba2b96bd08bcf01cd
+Entropy.14 = bf25cb51fd828de8f406d2ae16de1e4e9e4c46262518564e75cd7ae55a5cf04b
+Nonce.14 = 6203d68117aa20b980b6b515ffb030e2
+AdditionalInputA.14 = 50687524beffed38fe27963340483886645153311dbd4d10d86e7d6b260e0c4b
+AdditionalInputB.14 = 1e3ebe4a54c3092d540ad2898ec3be1af84a1d515c013632402ffdeede7caa8b
+Output.14 = 007139a46072d9dbb6589b8ecf5f287d3aebb13b480ffcd6e95f0b2f916cd99e75f30a21971298257a80c17e9e41f8e0874dc9da8f6c18007a6e4cd5971df083ae62bb7b9f1bd4926f17e5574535f6009c0068b4ea3a50e2ba6c6aa6c7729fbe8ba58b4b795740ff6ae2f3d6fbe3e06828080cd1dcfb11771ec98ad9e0bac0b7
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a8c77ba575b8468bb5f99220de43d466cdb1d91ac3253c3be27cf18f82520624
+Nonce.0 = 052b3c6dd0ee77fb8b0980c38ffa2cdf
+PersonalisationString.0 = 4f074ac6ccb7c21c9589fa223428af0e860ae31fe008ecbf520653b9be235ea4
+Output.0 = 5769beeaae2879ca0d7227d2dfc51bd3b7ac0c82c9ccaae84b2db60aecc7e06bb5989418865424cfe75f7014b389a46870e222226e6c1a90a4f16208636f635076793b2ff8c99f93588ae0f93be1086a82f45c786784f683d529157268984d7c13add196bfa0c7ddb314ce9375b2c13930209c52ddae347d064ed5d811f78065
+Entropy.1 = 911f3206aef3fa424e5333519237cc7d59b71d40f97fc793c4876103a2d05980
+Nonce.1 = ea7877e8a5b1a29a10c82ebc8f8fc3a9
+PersonalisationString.1 = 5fd33aff8724f27a9f56a2fb6d49b407e120f636279b58ce2bda77447a79826c
+Output.1 = 9bf6d3f44c48c4b600980a1e1ed36f6554c74be9c97494c77a945ebba813664bba4f75d0993a1bfed4c41dded58fc655ab5d8ac59a120323e0543bc68a6ff5cf365123a940cef7c9e393e288477d5ce9ed3ab474fabb0a5d7a93618172df738eed1aec78ad209866453de33519a63db9424090a7a4df827a25dd53b3fbe4b6f0
+Entropy.2 = 5326824ff5cc0597b46c0a162e841c5690bda10df74e483e4baca0623e43413b
+Nonce.2 = b1f4f182a5ccfe00ddd245a4c8c0485e
+PersonalisationString.2 = 2f29b4ad28f722fc884943c1c12a586ff1ddd04db3d8695392a57385fc99115f
+Output.2 = 994c14885e734fbd200df66c45a68b49451bc4b44406306452efbde9a8d411ecac912dca39593be82dff920d540495d63d10abe04b06ae778473109f39f5257d6a81bf63b7b77ab7dd7b21261aa41dddbbd1872bbec87a4534983892cafd06eaeb71db18ab5557949d6c34e63dafdd048bb4c81ccca712bdf9ad6fd70a6b48dc
+Entropy.3 = 8adf144473335a79173d3af6e50965001a34ec27ccd567313c7bebdbec9f71d2
+Nonce.3 = 7065371d51d3285d6ea653494c308863
+PersonalisationString.3 = 0fdec2ca6179623406f594af0f662c675a7cb7d6fa65030c1c5a04fa4c89fe33
+Output.3 = c4fde769d5db2b89e2e635b08a187c2f9615787705c7ec82946474281366003617f186a4ad42ef51f6833532807b4eb7653d4317f7107aac1e311750931089ded92f9af5727dc40c99bc7035f0553eb1bb6f134312239cb682935c8715bea886424accf89ecc016ef67b805df6f4ff83cf758c277b4de9809bdf7e420b47c352
+Entropy.4 = c58faf114e4cf647c3a27189acf2d6346147b9b6aad7c5d9cca18aa13f513949
+Nonce.4 = 96e1b9425401337f46dbf9cd0ae076f5
+PersonalisationString.4 = cbed9113b3b2170712a8ead60137461e72f46be14ba79fd0a70e48930d347565
+Output.4 = c5d2ce2fb4baa2cf5633634f3ccc13f1e81fddcad1c80f9d1fa3353264b03355763753ef4869766edda1f3dcb8f27d65398a5568e9a17cb5dd0e38e752b71896abc2bb6f945512b4307c0038c519641b9de9a88fce9c0b1a880e23bff0e7d1c56b5d2449bee84fcaa6ef301533bb0827d13cd14eba0a17e0a1e7820d4a98a82a
+Entropy.5 = 39723ac65fb657f3c273dabe094f9c4b69cef6cce25a2041e07e5f3d0c0c23cd
+Nonce.5 = 6906ad6afcd5390340d04dbc484b12c4
+PersonalisationString.5 = ec987d4f7da75c0c6045a11180d3619c6db996c61116167a17c632d6141dc874
+Output.5 = fd6091b2ccf111d47c7540d2ab92e67243e104b6550b2aeb7ebd89b635f5a976890a9df7ca8b719cb4833cf52eae257eea22a731f03fb85798824d9991c72aca8ba856a767804b79a3b4003c2a82c930a4b840cc9df082ab473d185aba3bfb25be5cf7904f0912b8a1320c5ace8c6142e09b282d778a80c7406256a4872f2852
+Entropy.6 = 39120774b5e76bfdcd7a1d5c94b359bbbdfa24e7ca1ba37c8786e6e7d417c363
+Nonce.6 = 81d05d26b0af3000c9506ed5d1332cb8
+PersonalisationString.6 = c36ff94e9777b742cbb6f7a1b7a25f1a64a3d1e343f153149b596f732e854d7b
+Output.6 = 9970e7ac5858f7eaedce07f2a0c50673a91dabdb48de4ccaec668c3e9db5e394984a44d3b9ffda3c874deddac6a4bf5e72b0b083afb87d3fd0139f8de12d319363009d53cef0ae285c507e1f9fec2a080969af22bd52d37868732af7fe71be681f6ecc7d92b4264f6a7c11d5d04d0de40ad9b280f26f6656b56dfda50bbaf603
+Entropy.7 = 6df7250981e3b5a74efec19f15ec73cbcb46ccdcb23519f2dcb2f9b855addf65
+Nonce.7 = e0921ea03a36ab53544f2e7815890d6e
+PersonalisationString.7 = a807fcb6dc1439fe7b4f9494e68b613e56a608a78595a466692387ab6983dc6e
+Output.7 = 6adcd591650110a0ed81d6dd8c885d73d03add2d81e4d654b6c0a7b96bb6cebf011a1778b33370711f55795ec6d2e1938659c409251653fc4c643002863ae674517c44af69c44d1358ed84800c1c9e5bc79a534e3e1c1f207e5acd653ed964a319598d1d73d3040144927712cf554bec81d4665a50e3b252beab0f511e7361ba
+Entropy.8 = 0ee55f1797b1498cf0ff8535cd3430613b6da15d1fc06a851ca8f3aac878ce84
+Nonce.8 = 220e692fe775885b919e1ad689ba6e7c
+PersonalisationString.8 = 0e849b31f01a98ad5e9245c7799f74936efe52d99427621e34dbf83c639f1dae
+Output.8 = 1e9e523c79bfe89c2dca46664e3bcdab79a0a243bdc607dc752173cf99b591757faf7ad84cecfd1af10b5dcd5d76d5a8e41a4782e685db46bd0ecd3458cbeeb11558685d25133e20e5f613dd4a622a73baad3df1a80f14f98da1077a300acb0ce02bf55eae2346af1b7df7b97901d382371632594190dc42c944094bff2862f3
+Entropy.9 = 7f90574ac55c4b3f10a9d39882a4ed1a9e922f25dee0779fd0a5839d5dec0091
+Nonce.9 = 914e40a201adbb144089f34c91786b1e
+PersonalisationString.9 = 26a55b8e95aab92a12b681bea7412f00a48d6b438f54da9c42f34ac5c31ae515
+Output.9 = 0c7f925664c6db4fe5b6eb0b20b0e0bca5a704d1724f33b0fd55ed8c47caf5b77a224872bd77de138b64a8fab6b2c6610a4670d2a8b463288fe063418a19c7b865c876b66a50e8f5620f68cdf3f2108c920023f02a8b44fbb065b1d763659cdfc360109be6813fc63a14a5acf08c4d49d98732a13c8bb71555b0dcf51deb0871
+Entropy.10 = 6da05910b7d742fbfa3296dec76d884c0591c4274b0b1ef7b8b556ab63c99a60
+Nonce.10 = 69beec7da0557e59914cecda553cb9c6
+PersonalisationString.10 = 3e1c544c43118a8115ff26152c57f43739eb5cc66f63d3172bf8732c25607cd3
+Output.10 = 78829fbf89d5f7ac217c75c3d4b36500cc454c87547b53309814496c73fc4141e88ae4d7cb21bd0627c0531402ea16e48ef829737ec84694eeecc5c72132e76fc7aae325c01d8d38b62ae117f42e3d858521fac939241493cfc04f8a1ce4f49abeee9705eb50b3ecf076ecfc464a7bcd1dace6ff61b027c5e50941af8ea01f9d
+Entropy.11 = 90d67dcac6fadf87e691b700a4b6755f388643d9d46fffa91f9ede43e9cdb72a
+Nonce.11 = b0e142d060c97f4bf4fba4663249de43
+PersonalisationString.11 = 3b1ade723ecd8a8cdb9de06e844f5bad612b90946002c8b07dbcf4cb989a7b87
+Output.11 = fecaadb4a186b178236e1ec2def4ced5f796b74bc3b0bf6f8456ae1696e267f1e10e21a27b3f1bdcb3bfa047f9206ed5c1f81195af885dfecf0ea28ba3df75a8f067164e72aa47a42c19b41f7562527eb27e99cd2381d49fa88db481183e1ca351de70526d2c6631ef50839a6775a3aa08c7f96fd1befc5cb7f20d28d031e37a
+Entropy.12 = 19daa51bfec63fe6f0d3461ad0e184bcc6231052e9b84d03d7fb80c691749e3e
+Nonce.12 = 323e269e7c69c02fbf5c8fc2ee6f7782
+PersonalisationString.12 = caf1f074076ee7692d5beb895298caf38f0b48f5c6cf971b20db2ed5628409d3
+Output.12 = c1466592a415356d40de0a4aa72dde8cb1d07529fbb6c8380d5006b36cb3cc0092a34b0c380fc41818a58c81d7feca4755b88b887562f2b478a5ffba88fed5197da8422352e5cee4b92ca91ea2a6f5b7b01b89ea0204fbff2fbb5ae3273dd4aa70514da2ab9d43c4ec85ed33dc9d3e27fabadfccd558bf3fa34209d7ed4c994f
+Entropy.13 = 3a741bafe59aceb22db401d4f26a7d746c5ed7d3f24391153448bd299a86a7d3
+Nonce.13 = 4d13731ee770540ebb919bd07df8013f
+PersonalisationString.13 = efaab02851795f0c8541233d89135412734a628cb61ecb96b427398a6739bfd7
+Output.13 = 0b34a9c51d82017ff2ba9b91baa87d5c4aef78aa51b1bb3851838e9ba1fa0e277fb533e02963a53dc1619807539e3ad0524a4db76a6be1b7b8bdec774464456edf97547bf40517cda7da00da503c133c633066420b9acd878cd3109ecc3c9995a3357ee3ca7004f70968271824c2a6f4dc2199066d9dfc3219439094bfd25d3b
+Entropy.14 = e344a3bf1eac434ca09e944efee161cc1673590fed203527bcff81a97368823a
+Nonce.14 = 2b653a89e549e3b1ee7817f5864fa684
+PersonalisationString.14 = 814146b3b340e042557b0e8482fcc496a14c02d89195782679172e99654991ed
+Output.14 = 3ea100cf50c25d7b2ef286b5fa0720f344de2d568979e7349befa23589083e835205cdf6a4670722fff04260e54618c9c00af75cc26eee665b64e7e628ec4c56a8086dcd583681170f60d565bd97d0f416e4c231e281081b0fcd16c8db63ea9029abbfcb068bf57a36364aa9e27603f447adf337baa35f049a129abdc899f808
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 191c4f0bb2853d9392dbab6defc8ca2eae6cb47d9a412d0490db7d08244cb70f
+Nonce.0 = 9044a8503b55ef8f40063fcf066994cb
+PersonalisationString.0 = 914fbe6c98771f1cec56223e4493505a31dcde5f9700a121be232c044f06a10f
+AdditionalInputA.0 = b57d926494b263f4ffec0190e73ac6699e1e40f162b5a6098d3a53a18dcb68b0
+AdditionalInputB.0 = 275e7cbb53ced5fb5f063ce257d36e8319b64c89fd728f78701cc8168fa4aaa7
+Output.0 = 2cf8b9a153666c8655aaaec79a233d4d715117d62d2ebc1902faba663717b9653a40ad4776bf492706751188c2461487e47a6567370b4946e455bf5caefb14e5d8fac20d9c54bde3235e9406705fee3eaab9a1ac4da9497f98a457d1de4bbcefdbf8d72ecafe52e481d140a360fb1a3f5404f3a2f8a361a792bc0e5ff7430bbc
+Entropy.1 = 66952a80d175c4c1c9088df2651bf38cf458fa8f6bccadb72a7d28a5634ccf05
+Nonce.1 = e1e98ef65bead7ba5a99fe28cf0b18bf
+PersonalisationString.1 = 6135d7e64f7fa25226b273e5f3ece934f67aa7c91e71c2d10206731d8cdbc789
+AdditionalInputA.1 = 0e35d508e3a21cc189fee36d60f5b7f0307e404c0f8b33d9134a10fcd3bbcb08
+AdditionalInputB.1 = cbc3ad8d3f044ac8e1eeb6bcf34a698f18c4bcea3ab66b76db92f5ec6b378398
+Output.1 = 9a2a6accdbc9e2257d7c3379d2d4c9b4814237b993cedbd71a3d1ecd36245edae35415a123ac50f6b8f9cc7ee9043caa37187a24a6e3f7864765f22031ed0f5d87707c4141589a1d837440cd3fe3ec810ce1dc590b0454c8f45ed1c5ae1aecc8cc7272710f396cf0861fbdcea112d03ec2644fd201e012095f6f08fb4a91e516
+Entropy.2 = fd2028bda30cba426093d2a4daea714793fd994175a745665ae2a4f73b8c6f1d
+Nonce.2 = 48a7d049d27b573c93d8e1337de0f3d0
+PersonalisationString.2 = 00c8167deb963270bbc42587b70c040502e62c898d9ee5703b8d06df1b33aec7
+AdditionalInputA.2 = 7ca9b267490a8e529a7c7bac1fd524973983858056ab7edebdbbe21d10380432
+AdditionalInputB.2 = 8bc8bbe8a26b6783611cc8ed2b758b9b892b0c3b8b8054927e5f5690f20350cf
+Output.2 = 0e282478de0fc1b158bf477b58f9a28590f1a5898f0449d516252fd6bf0bdfc6523eaba4497a24d37f69845ca89d25ea727971a6ba46effdd3d2af71de84af3353f092f7ee6d68e51a5da3fce18a67b12914a99126eeef8052ff438898e8c52929bf87fabca66c890abe8b28956f51a85f21a5a1dbda62dfc806a85595a6d506
+Entropy.3 = 66e593c788a9489289b73ec3a9d763b251180a995b31ba5e330a86e698208604
+Nonce.3 = 25aadd63fd7863fa353a352adb7041bb
+PersonalisationString.3 = dd994fb735c46a3173b2ccc874982c86e178c4c35b286f30940f64846ddb50a5
+AdditionalInputA.3 = 65a8fdc7be63f403e56245b5221abb40471cf6b03c9a4c9914a8647fef34dedb
+AdditionalInputB.3 = 929767a2ae876aececb1ae633f2edc928b16de16b2ba12755ced6a6addcdd95a
+Output.3 = ac67f75eab0da1c905637f87ae0c8d1acd197d26f474b4d6b6570da19d37b21ed394cc187687db391b8d9cf6046c6e4bf85f0f3d19af625b2a211bca589163d6df971ece248e10fea8ffd334fc6fd310fad256cc68323d6fe82783047b18b05f3acb46abb7eebccfa084c8f2e8eda74d25544a929eb8830cac9e34713874bb64
+Entropy.4 = 60254f58a67a400f417e849b3350f226dde79de73df115c32def3f3a0e5925a1
+Nonce.4 = 9c550f7d7adcdae3ed5bff7063a3df45
+PersonalisationString.4 = 67d1fa64675fc618b5ca7b98dc2fedfa52a426173048c06bc9a3e73c70e43299
+AdditionalInputA.4 = 750f64b0c9458bcbb991dc638802e0ec1ecdff6fb8537ea028cce9788fd1c07c
+AdditionalInputB.4 = 45967cbeb58fdea27bc77b8313169279a233a6b24c559c07c8606a3f775f1009
+Output.4 = 8c12dbba5021242725698329f5ceab818b523c8fd01c4644568495a3da06ca8d4b0c04d3219ed72020f271e465e66f1c001964aff3ac0a7156e604269fb278bbff1ba413ba2bbc88ce32c47ab085523e43473356c7892c174d18511a540111d5955421f4c090c1f6777dc2293e2f6b855be62e17b6bb6aff8a72c20f107e53a1
+Entropy.5 = 9152351bd6ee422e7cc23905a84e9df973da9b9ef6be79270b25953b2ec81543
+Nonce.5 = 52c8f3b3c1d4ce7b2e4abafe7659fe3c
+PersonalisationString.5 = ee6b13a50f5cd452ea6fae660d9601e7d016bca025ca02bf67b91427def585f7
+AdditionalInputA.5 = c526fba80085c560436416d85a55ce289fa690693c789e3cbdaefd7733d3669e
+AdditionalInputB.5 = 54b5609d580a3f8c8ece8e65c3d185185fe33de9f62dbdac5c76acbf31d4850b
+Output.5 = ae8091d02534162bc8db5c5f180234dd7f379a63c9ff8e0c6a36326beb161f889ee150f283456bd6a6d1b4337b1f988e744335bdc0fa1f29ada54abd1ee0c37c6bf9cac95965485a752fc2613f91d51eacf8ab44a6124624da5101ea1a9fd1b1d779905ed820e7ff2f848c8baef4c3e41c6f715eada4f05366bfd80a1b471fc2
+Entropy.6 = d02d4e9a40257703e5eff98648f7e533e41dca57a8eb78ea69d475e7a3b005e6
+Nonce.6 = b6716a283689b9b53a75eb8bc260e0db
+PersonalisationString.6 = 4cfff605bcdfbc934d8af8d9aee2148983ea754d3eb8946a642c8efe3dcf5bb1
+AdditionalInputA.6 = da7d751dc4de039add6ae6191375636b6800c108edbfbbb1158ae1c2d491223d
+AdditionalInputB.6 = 327497ac302dc8d156801e24fe93b3cdbd3ac805358dca693640b4dc0533c360
+Output.6 = e34f023e0daa7c3a1e556f1596594ea78ff023b6752e6362e6facf98299f2aea069b9a78ed1599cf49e29e6784bb6545b04977c7920502dc6187d63fa845ab4036a739c5c16d9efe699b7a3d016f2ec0898a837f056c63b3d4eb99bc2b4e1e5b02e55cce68d85bee1f841c6a922f052a3b1d41434f6bdb48927ed794d01850b2
+Entropy.7 = 4a479b7274d73dd187c52864333aa73ab4d8552539cc1d451ce746f41118c0e8
+Nonce.7 = da8b0333309c81271d860d00834f5667
+PersonalisationString.7 = 9106f9df83eb13f2c14b445e9a2026b5c6000b34afe2516249aa3012d5b595b7
+AdditionalInputA.7 = 1083a1771d4d035d9906245cf46e00bf07f9470f766033056501669cd9097fbf
+AdditionalInputB.7 = 7b2572fa64aed4a0790311419363056539c93ebbb7732bb407fa43e33a55e0e5
+Output.7 = 20f198b797555605e3c0607beada5e704f951f468d5ad9a2ba1a4283d688a4c26c85b6783eac4ad3ad284d6d0af75be668c027432a57dd7cefe76c8c1122e7c5ed7e72c3ccea44d5ea85e1831e1d27b461974cad2cb52f699c664d592819ddd0b90a0dd793a09468fbf7b3db64cc3819e6d9c46798f88428441980121df615c1
+Entropy.8 = 046c6e0caca05f66b7c7b0965c64429f1dd7d383b64d03d86ff0655bf41cf616
+Nonce.8 = 559d2dd8a47b0bd94e23d28c14126b5a
+PersonalisationString.8 = 7324a958348d97cb437a1799f097eb2be287558525b102f4921910ce671b0bbe
+AdditionalInputA.8 = 7fc8abf7349e5e735f72166142436591c0d4cf6379bceb2371750bcc616c2ef7
+AdditionalInputB.8 = 0e6bf7c49078d25f2873e5304c38d232a99c5a5bcf5e76d87b156fa89b750b9a
+Output.8 = cc3dfb7dce2277cbf912cedc6b0543a9fa942fe23c1c7e755724e28d51038d12718bb0d417c731b8e733059b3031e5bdb7b478ae01fc5065ddba94f32d26e9cd524501242d3a99f18c6247f7316be5ae4a03fdd01514b55a22ac821bfdcb82c6b38bd8d5278995d021e0d81d40a35c6fc483ee08c93fb12a2ecb0073f34fa22c
+Entropy.9 = a026ab58eb641ab68dff0cddf3b2e07b5cfd9b5f03388d83779add9ad1d447f4
+Nonce.9 = c830a9faf3c3c6b02031fd664633d12c
+PersonalisationString.9 = d8840fd34420044938f1bb9258cd0d3404f2d12ed06547542087b1a5bcc21754
+AdditionalInputA.9 = 94c14a30b3900aeaf3a0064f8a9cf04dfa70242f3c6aa27428f33fb778e4cd2f
+AdditionalInputB.9 = f4e4c509c219e723a6170e761d7dfda0bb78ce74b953810864c13c3bb6d939d4
+Output.9 = 569004db5e2d08287141a62483a3d7874ab668927fc87f4d864f4a92d5121fb47bcacfe09bf7f23fb181395e7d7d7e634ea221a7df5875f13ebde451c296f7c61b4ff5bdfcb2f013bce81df30c2c2f4f1e9f05a78ed90e86cc727765e4b25785ef3225757764fadf059ff3c7fc3e175e37daccd99122597eb92c4aaa6a27629a
+Entropy.10 = 22bf25fdaffeec3cf89b615f77d78a271779277ea9706b917eb4d9106bb1430a
+Nonce.10 = 4622f84512e9ae07ecdeafa56729bfe4
+PersonalisationString.10 = 2454a3b2aee313d76235c56af4de49cfccbfabe5befb3e39ea75c6c2aac564d6
+AdditionalInputA.10 = 382fba6725b8dbc099f5bfef572723a69283af910df07346b72dc8238c8c7dcb
+AdditionalInputB.10 = 98d591352b329d12eef10c23771d90ebade36f16d2b33957befb5e48d24602eb
+Output.10 = 971f8a8b9357cbc521b7fde2c16a8f03958fc6470a794dfca80a0032ef9da7c757f955198620e8941094f3b3e3491ded94375ed262f7f42dfa74b671a15c157377fc319c293808c1932b52655484477d19cdbf23e1e90453722a1d61f9f83729c13f74dc1030e1dc5401430d1397381e33efb408a6d657ac297cbd59c61d8a72
+Entropy.11 = ada68accc624c8c30c7c5a4d8442110ed7c45a8d6a645693f322d0b4a5beb2d9
+Nonce.11 = e5f2972bfcfa1122282754fc7b3348cb
+PersonalisationString.11 = 87806a8c4bc013fa85f3cba02a75eaba5f815fb7ad681c98602dd13c91965281
+AdditionalInputA.11 = 9adbd48f9bf04a815556017772d2b0a82a2558a16f2b5d9249931a3b8f17341b
+AdditionalInputB.11 = 6296a548d31454e14bfc630b4f5fba7c0801f47b16ecb5850e870ac8e9c8ea77
+Output.11 = e5511c5a8cc82892315eae52d2f25930fa03433178ef6173cd4a4128ba9baaf264bd00fe8b1a5ff1d68ae9ccd83f092078c70605c585a4dd1391cfa211ab8fa8bc21c7cad7292b56e0f6185914ebe1b9241d7b51d78952b936455d1a93234b61b4ed47bc7a63d8314f841b16a600c4f375a06deb29f8471a2aa7f7ea8eb34205
+Entropy.12 = 9779a105bc750feeeda774b832d74a045383b61969d264fccd3be63298295c36
+Nonce.12 = c5415f6853a1b3bf8aa3e15efb452421
+PersonalisationString.12 = 39cab707205a5d4a4967cb9c5b96604723df6633e3b65600560717015e529ff5
+AdditionalInputA.12 = ef1badc8726464042660724afd2a35b61342e215fc8b17549f8ed470a78489e8
+AdditionalInputB.12 = 2d2d26f781c0d3393422afd14f90aa74036b0fa585e86c68e36749cf6510ff22
+Output.12 = be0dfb331ba8fa326bd7ecaf2768d3f9efb3a329e26db3dd3b56a1f817d36b240b22ec81ba0db533a98ecba3148de7f0c23ca4f719851208ca3f11cf2380cf757271066257763aa16b804dff1433a2eca3f5b85f0898191913ae2f35212663bea731c123fa8b9697b77cf70b31f559d9c5946e7a5d5ef1f568c4e9180755e13f
+Entropy.13 = 590566793eaf2b1deea85296d189a9b9709c42f072a4eed2836bd8e73b537940
+Nonce.13 = c2ff757940d823c72f1fc5526e7c810a
+PersonalisationString.13 = dab526476eca7b485bb17c3109e5dc98d24cf605954c39385a5f813cf3c0171b
+AdditionalInputA.13 = 65d03afd4c553ed446abbed2a0dbd7c1bedef4c4d4de6dc41a59489e9fa8c61c
+AdditionalInputB.13 = 8006e5f77ac2f0613d3b4cb7a7a2eca552a7b6751cf2c23d58391a5712c22da9
+Output.13 = 637590a008a9b8d1dfaf6c95b015e57680bd611093e1c4b7dd102ac7a4918614dbee4c801447a91ba5bac589b30382b031d8c0106fb804b67fdccceb3ab45377e89422ed8b1859b8849eece53e29d4793b9a3af0a645173ce380afd99d5e4a8e922c7f6dd1ab3f5752fff2834ae8fa37ac6b221ff9e4e1d58241506180e0a325
+Entropy.14 = 8ca489bdb9c34722db712d7d63207fe78bb6ab645bf7ff7c8ccd7acebe555368
+Nonce.14 = 2419a6bc6d2e57792264091585427677
+PersonalisationString.14 = 8f8642092eacad449117d08fbeb49d312f69e3b4658c2dc94c1c0e4d913aff71
+AdditionalInputA.14 = 95f6df9905b652de6d08399f61956acf943fe412bc71de60d6b69881f8814b90
+AdditionalInputB.14 = 87b818568ed80f7c2e8f5b5d7be403f8badf9fa0e716aaf1d6409957b242aa07
+Output.14 = 45b5182f313a26008bb4ab82f68a12e7c783c243ba1ac6d8bfaed44ddddb607f964ace9c3505d59ef5a3691143a4845491661a1dff8ac4de2e56b54e263ac3aef86966fd656b5a65d4f3b89731d50fa919663bd5691678ee5f8f499e84b1822bd0b91409b62cf98c176df7e812513f3252d25d15fe13ef9f253af477d16bcfcd
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = bf834dd99be9d58e3f6eac7664be2922c5fbcc99b8337037398e72757452b5f0
+Nonce.0 = 179123b7c887982acd3b4a37f3d87283
+Output.0 = c46477fc8d4c9c2097826f24f66f65bce6888d9766ee2264661f0c32ab452a0f7b2d1705e2b22873a22fbae0ad599494970b2780881b0a89dbf237a5c5b868114ba2004fb737ba22985368ab2e1940369888f484e2d628c7426adefd35712dd52b91abe48132974cf97a545140d8820da92a6a301e3f27e6b3160b1f4c1dba91
+Entropy.1 = 9e99d33410a8b2081814714ccca9997f8efa85bf47b3f44325000e7a26885e5c
+Nonce.1 = fec5d7169c2af87b2075f8c7953a2302
+Output.1 = 9be1e7e341343bf0497ca2af665f5b2ee7935be8e8e8b10f5fe9b646bd32b1876a634207338a670fda09b750ed589c56901e7111ddaa2158574d9f0ea4a7edb84559ef406167e107b0b49ae32a1a318d038fd83a372ab8e1eb04e845fb2330b5d3dab39924016fedc5ecde3022576c4d00c790a1cbbc60ba21878c73e50921ed
+Entropy.2 = b41e761ae51064b5f1bc3d77dfb4b4ceed1bc4bba7d4f821895b84081c31f75d
+Nonce.2 = c7b8a8d8ae06daacf64cfb5da139a553
+Output.2 = aea278ea3144b9ae4d7286d48e07ce674062417743b7d6be2ff8a9ddb39b1bb0a76a3d6e76950aec4fce2376eca7056f4897d8cb8799634ac8120fd75b78e6874774d040353493312007f8ac2c85ec046f9e54d6c54e4a64f708c97ed521628ace6d4811144daa0ba734bd89adc1553bb090e5dbfde7158d3b7e04187cb26ee7
+Entropy.3 = 8d12298dea58e35585545ebb5f20d7da6a640d59c1485b38a60dc56260e9cf2a
+Nonce.3 = 81bff3acdb2c6ba76fa2cb029fa29cd0
+Output.3 = c19ab18a2e671d589a4931fda6c835dc366068fd51dbab62c842b9846f706eb27344076ce772567e3633246ddd2594188cb5aaf7520d89e29707126152b94434a1d68fde56754d78234e495921529318d20965a19878857176f1aaeb4231c2cb535a4b54dd6b245ea5306b7c03b00dbf83e927228a7bf048f34ec3eaf3b0e7f1
+Entropy.4 = e1b9f54f7b16028caf1facbbf5a09d1da61508eb23848f9d3cb961dd082e0e3d
+Nonce.4 = ed5606c8230f993a0ef8e30e4ac6f87b
+Output.4 = ea858ab66ddd7c268a4a21aa7655430353ca0f12026e6c7792d6bbbcfc84ae6d59e478075881ec39d074c60a01eaa46e2d0663b323d9dd31471cec1cf858e5c4df4f0ade660bed3eee076b0fbcc09f7429eb756a2425e2a0435b1fba221189e2b28002370cbc85d4fe8db544f80e0abc5380f309a0acbb739cc07e7ad3808108
+Entropy.5 = 49137936175ffb835e80ef48fea9354bc018a86d23596d561073cac534f4bf8d
+Nonce.5 = 753563c02f45c9af21b815eafa77fc5d
+Output.5 = 325efe5b6e98a1a0cfb52fbe5f72ff93b9026aaf908e0deb512c75535ba6f17ff446b4be926d946b559cf86d2d16960ff3407576701f7bc02d39b345877ff4ecbb463202c2bd4e32a200dcebff6b7379c954ba1a995b565fe4070bf0b181a800b07172e5a7afe1a428d2966b893ce671b3a847a38037af3066fc4c5631f39d4a
+Entropy.6 = 4849a2df18e5d528c172481958e1d1ef53a608e213698af8ecdbbb508daba39e
+Nonce.6 = c827f4b4cb07303066bc78d5521def39
+Output.6 = 00bc3d2b9bf7e56add8c25993c998ad35ad55eeae3a338a31334b60a4afadccb6cb8cd9797881bea849f8c914e1d25780e13d2e620b5e18930dfafbb2f362bdf8bf8ef040dab3b16718419ac27ca1bf7132ceddd1657d60cc63a7760cc8d463e30e3d2a9c7dc50478438a7d8289713d6934fe38865f039eba69fde55093067a2
+Entropy.7 = 7fa540133452de6005b1d79c3fe87e4c50b942ecc21739253a867d27af439043
+Nonce.7 = 84fb3e54c85c20cdbddc04a4538c8038
+Output.7 = cd1489b14b1f9e784a5d11af4502740b8f1eafe07ddc818e7b0236bf0b340acd4b8bedb37a7cc7f168701c9339a8d3ea11597cb7d04d3c74baaabf1c76a1fc4e58bdd35237322ff3dc4fa613bf537dd1198d7ed2ed91fc71f0224fb8872ca75398a64a047fdb733c320d45bd662b0a61036e017bc9f0684b3e2e9a7ff7777ad7
+Entropy.8 = a541ed73fcc5fb2125edfb514eef05c4b2e55d68b0c03a9f24da4d78c57d472f
+Nonce.8 = a81fdec163cb205cb8927020edafe7a2
+Output.8 = 6b36f4b229c6092d430fe2b413d46a577d90efafdd84cbfc9b9728cdfd5845c98f203ce507f7b618d3357217f7abd344396275cefa11bd9e572ce2d011abe66992c64b9393020c2305d45b6c4c50db4115f2f2b79f4659b976932d99fab0d3c5eda0c698ccd411ce9ea89c9f1c7970895889e0dc82b8fde4b67caf9299f1c073
+Entropy.9 = b43bff7fde71c178cbe11e7a1350c79bcbe619ac4b428ae90dc45427b962e6a7
+Nonce.9 = 1a1ec9ae03b53cb86362c6daebdc6214
+Output.9 = b358fa64b37fee910c5456767e73cba955b0768fc5d073e0c96b2072f55e1e7df71ef17ee04b6538d4045e930b65f666b7208f95800367fe74494d101d7f79388b939225cff4245d175a142caaa450ba15f407eff53e6978cc48b41ab6cadf158e94fe4a5821a8c71d2f2bc98c4f87d8d424d681924ca3615f15c1ae720c6b45
+Entropy.10 = 11603d301f43587b45021858a85ceca9ce7eec33baadd09ee073e9d12cf7dccf
+Nonce.10 = d80d5cc4dffdaa05735079dd391ae848
+Output.10 = 05ac8bfcc06b4c6114e33d93f4d49616b58814f5906e28937ebf6316fbf96f71b6dc5bb73a4966e6a10a7f065a97171780e2204da4f7e43057181612ec2bc82ead92610552fa969b1f49cec59f1ced0ba5bd2285069efd6e4e0916786047037171664ddaab2584d18bfde5364d71e1a5d0804e36ffab26208ee96917ed19bf8d
+Entropy.11 = ded63893594595036854ac58a1ba4c49e2a262bd6a5bec530b8797dc0f491be3
+Nonce.11 = 267ed02edc56cfd991a510fb6d0f69fd
+Output.11 = c8ee488d07eab1ef20504dd838c01003e6f2ea51aec3ccca927290bea289f44fa692b37766787ea91a3c5b48740f05ebe56c7cd225d8342a46b02064e321d90831384b301aab6213b010336841d09f04c9ee6ac4ecbf1cb932ec3b2fc9a15596d5b1129b67021de20077e975a4b8306d65c5adca4ba590b73483cdea53e87970
+Entropy.12 = 9e520e1d515e4bec39f2cdd032cfa9bad9ce5541b107d7e6a616833beea72a40
+Nonce.12 = 3fdfe4b121b69dc292081b0edb4e68be
+Output.12 = a3e9f73213fdecbc0f415724c41fcd0f3426def28ce4593b8358a56adf980868e01069c54f9efc679c7320c9153231c394a07421ac162db788942ea01b5351776ba5747aa8bd19ae982816937e2ea556204656c582323b19103536db68122623b53b9da6ab8da8c77081ff746f354018840f45a019f308a1d77a3c5a1397bdea
+Entropy.13 = b5ced385bb14d96498b7c8f4d11ab929b482a2e6050a5d303348aa97f5265092
+Nonce.13 = 3508f53b7825951e10a770e826b7491a
+Output.13 = 01b9191a5078fe1d330a97aff8ae937c7cb3f66c9764e200ad94696ffd70a9935ea14cb50a888548c413d8a1fa0e1511e3f20b6b87f58ee90497ef188fe6fbd4968d77c1d70129dc8f4cc83cc72bf986f4ae84656b92a50ca071400c7db3738c485151ef60e4821e0f4c5fea1c75831f5dedea51505ea2e6e327cdca133a6f53
+Entropy.14 = 32695b2c55839eb3a048fabedcae1f23bf0c7206280ba4ba0d08b9bd9f119908
+Nonce.14 = 01f2a4cf8a9311abe5ecf58d6661dc5a
+Output.14 = 4a4f44f418d585e03f508f2ff05345abffeafd75f610a957be7f3ccaae31ba28e69bf8ae441a405fdbc0ee761e39c76b69062f5a3866fc296be1ad306e6584ab2d250d717605c70a17c46a298f714e4e820c85a1fb84f4d61b9857a40c2902193ad703c78635a2791abe6abca6124229ed75827135c27f1a04d244e1d73ff059
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = f3428ae375e688496eb2fb0cd772f429a2ca9a76c032d3c9463cb50e0b5890a3
+Nonce.0 = 4cb6959e2fca6e7d20d4fac254f8a7de
+AdditionalInputA.0 = 0f5e71a5804e9405e4f8676aba4aacfa4e727e0815a80b90f581fcfba078f842
+AdditionalInputB.0 = 7f80c2e83cb9ece1648b04730a6cae9b8f7cea3fd5e2372324100f9642d26f4b
+Output.0 = 7df486701b3a8e168094531aca081818d619697bf6c52e65a507a8a100cfd3a12d6fee64707840af7d08ef76d5cc16485157887800bb1dd5193b99496dd5009c53050972ff006739f198d86f9815fd014e54d4dc0f99b364aa77b74ad98c33dc3d007229de7a9a131ea388fc838ac966fc52f4924382ec288fc80d20b046df3b
+Entropy.1 = 994a0a73b6df92186f4b1ca970cfe343729800f24047ffdc8927fc828bd522a6
+Nonce.1 = 9d85ca8f29bba4f1c01363542e183c31
+AdditionalInputA.1 = e9817932f8d67a67106bd4554c34a1a0a9e6a8daea41cfa17d94843c9b22bc33
+AdditionalInputB.1 = 2fb1acc70dff1cfdc6e9d5f5aaf54d47ba35d65bf2a753a42031933dd4831c4f
+Output.1 = 04820d0328afe9fdaa1090d8406b4da05d715cf7d109d548a8bbda5252fecd9444e1a5440f55590e3c4d9627f819a50f85f0718dc9e52a575a3b8299ae692fd85aa0012f73ac1df36425b1d3e4d2fb829c2d268492516f648968adce04670e94112dcda0a24a3b20f2afb719e0c29c0de3260a0fa4866bfee297acc9aa5f1578
+Entropy.2 = d4af86308ed748abe5d167b5e909beec78dba45b2bc843688ad306ce11b4e013
+Nonce.2 = 3c0463a033341482d9a801d48f5dae8e
+AdditionalInputA.2 = 5b76e99c5cc24ca3ca6d3a2ae00929bcebe1d447e05402aabeb655fd5d0ec317
+AdditionalInputB.2 = 9ef2a90d6a55b002a2315c7619102b22cc237f6f57ea1939558a0efdbe77862d
+Output.2 = 3e459928d4dd84b7e260b4c61ceae1cd16cd4eefc0fef1ac60a470c6ee2d42c90212dea44a991e0c9958601374b8c189fef1ccef875ae6edc7ee8acbbb9fd8e16e7911a62055e07264494a236508c44006166df0ce858b0d7048acca802ee2f4cbe9d07a4185ee6e389364dadf33cc341412d6d95d6d56c937af61b3c8efefbf
+Entropy.3 = 04644f5f4409cf4cccdbdf82fe0c18f2bc402d20639789e7b6910ec8d29a314c
+Nonce.3 = 9697c728062baceabd2a07d88afca4d7
+AdditionalInputA.3 = a0b73b5b1a0027e57b8b2b1a430eeab72eb714dc08d95077e001587cce1f82d6
+AdditionalInputB.3 = ac28cb0721f8487112a1530b09f2842f0b77381a7b48cc297f32e24363006c23
+Output.3 = 602b4925c876c3eb47da8311da030f54354d168cc3afb980ecbce27ac4d87ce85f646e649c3b3e881efa63fd3525a5e27718bc2c29efd5c4a452747e49c9815750b4bf969b4b3e85ca131eb60596b7c32c7208b293bb62708368a079af6134d6dccf6a50cffda785798b9f80146b353727cedf9e6bb9e25a0217ec55ac1b5b9c
+Entropy.4 = 6a67d9773751e7a143ac8f5a99c633f7178fb241a2269cdbb3c0b32bc649d503
+Nonce.4 = ff0ff303e0e567dd7ddd4b252eef9708
+AdditionalInputA.4 = 57257c55ca2fe1a8a50a20e635109abf7c5850067a520268efad2cb418193888
+AdditionalInputB.4 = 92cb366adb81fa8c21b665a7c5fce7b6c9f26c3b21849a38b02e90bfacb5bb56
+Output.4 = 6feb7f47c9d43ebc493adf05b8cb3fc21184e424a5b5276978d8ceb2517f872683a55e6f19cb03bbd52b75b7c532b0e9c07045f4e3f432219807a57c25e937475e2c40b4f488dda434693e122f6dddf3934aa1038bf7458cbcbfd53e8aa51ac84463d11460d860205f72fc1a1f11d9bb8b333a3d2d887388da5c4d3d99ca52d6
+Entropy.5 = 08aa05db8a9d5b1d61ccb8498dc7a5b6256f7cb07eb4b3d661de84e710dfd232
+Nonce.5 = a0fcb7f1b7c499586d6b3c68240202fd
+AdditionalInputA.5 = a80a861d9c93dcd4b3f9771f55d32737fbda4a7de39c0b7f12af1ef26167f49f
+AdditionalInputB.5 = 650bc4f4e76c8c62532fd851d775b8ec0427eb7ee47d0fa811ae43b4b8e8be58
+Output.5 = 6b4203d79b7c8e591668b0704356e32c67ad3914e1789e372f420ce6a08af752a45aaacfb8e6e1384c98528b00dbf10012c94e2df67b47ccbf8f346e7a5f8c6881bf50fea7abf6c87e27f9619e33a325c891691b735f92b4efcf47de939495e3f718b05bad728ba85d5ace789d6bfd149d472822524822a333c464a82a305b76
+Entropy.6 = 6ba11a9dd7d9d46bd77e95a199cd4cc34211cf3ef98b2a9b3338d06a9df80e65
+Nonce.6 = 6885b88743e571edcd7cb1c2062bc178
+AdditionalInputA.6 = acb78b034b56232b6251c0ef300cff4eb74913409ad9d761084b038c6e84dda9
+AdditionalInputB.6 = 961679305c08c76dfbb8f246a14814e69b0e6b1b814c52787b70b64a8ba669af
+Output.6 = 159b2530a2ed2bf561ad577b2a86bb0fe69e78ad6dc533c1da61f8ce40f3610921f2cc36edaa07673869a36676bde3ae95886e057a372843716c18fbcf2b175414b443852544d83489bc2cea194131f47e3a222478450d2a332144ea5cab1c3ef06d3e86c8a901a8ce4ce822f0d6aad20c02377500d65839460588cf455a2313
+Entropy.7 = 1643caebba4994f361aa30ebb7bfbc05269b94bfe04460ec17198d34402c3e3e
+Nonce.7 = 57d6d8dac11901483be9edd9a142829b
+AdditionalInputA.7 = e1984dfe543324ee3d01290deac012dd2cc8885defd80d50cc172eee873b2ff9
+AdditionalInputB.7 = 5d67e46e7d6333ab3a2f0fe92e8c8e544106a1d707a3b1aa7a318de3feca27bd
+Output.7 = 4b5068ba8aa425b779987af553e226168d30a8fb8c11e1f016fa11a0d481ced23d2d8d72dbd4f2371cafa7da2b6058a3b2f4b6d195b3e803015e49ae84ef4b1fb76f60009fe0a99363a99a4afa621f8d9dc88a8ac6c72421f458ee53fd555ed8175b169ccba11f37bf43402d4671b30e70a03bfbec40ee38aed7840415e82f4c
+Entropy.8 = 04f03b4059da6f27ee002be1293f9bb847e815725937a20a4b4ddc14cd205868
+Nonce.8 = caa8372e9c756eee3e866e06cd1d8635
+AdditionalInputA.8 = 7200badfd5e0b72a2a811b885c640dadc83934045abe6a75abcb4a32e4644295
+AdditionalInputB.8 = 9da5ede4dd0f7a19a18fed57682962ed280a1cc5d1f4f31ce75709f85b28874a
+Output.8 = 250c97b743594cb37645b07bf1b5cc2b647ad7e833ef409558ad6898773f1288cab24598e326bea0732cbc0ab50c7eab9f7d104a4efe726e25d04d43dea5ecbcfa1c03968a0e6b9ed38dfaeccf2aec4e7e86a99098e0d5166768af280b0dc7d70efd0a758af3dfd35fc8332edfb47c70d0d802e09ec5feff3d3dc5688f6d14ca
+Entropy.9 = d5fffc4f57c7b4e45a9b7bf5fef3553c4cc8dffe6e57d2efc0bc324f1900b7aa
+Nonce.9 = 2a29436352fda465c64c49680d0fa169
+AdditionalInputA.9 = 0f4531bb7d1e47cfbe675c85a77361fdab2a8938dc546ce60a21535590a972fc
+AdditionalInputB.9 = 147e0561311ee6787004c40028e9d00798fedd55b7a4cc68d67a9cc44537037b
+Output.9 = 0a4261eb4f92e279c13c2a598f5f1652b42893147bb56379325bf135efd275599cab58b1f5e4aeb5d6f0887812cf129a08f7295d77257057c373043a63317466418b3a7531d7c021e46e9b1228e3de2768a97b2b13e4338854ff575725a6c668d43267e27f42f3227a618c815744419da141f4d190874cf45277ad4dca5af077
+Entropy.10 = b36567bfc7f655ca65d92b623ed689cd21cc6733dafe6b4d3fe2ad51dccca2ad
+Nonce.10 = e06e4c4fa61ad7850a4effac4da4982d
+AdditionalInputA.10 = 4ebebee72c9b6f2bd24e8eba40296fda003c09664d12db55860d1f088f7c6402
+AdditionalInputB.10 = 65cb123c58f4e38d0f81d9dcd60fd29903af2a67b11df7d23097108d70211a89
+Output.10 = 4b487111edc0e1f9a4cb1afc9dcb610c8fe9d48848678bf8a96adc4c934d6111615b5fcc4c239087ce3fe54301aa1c648f3ded4eaaab4c04372f0d2082f726da8027657561ae4b2cc8d651d8099506a31b5a8638547966d69506638567ea10e795681152bcb4e9c167b77a01b9b44c41f3361d247654b295c770d427f445e363
+Entropy.11 = bbefdf9f55f4255c7b51563a21eabd43b368c14e1a931a3ed599c393f4f0f884
+Nonce.11 = 91557e5e2d7e7d10288c9a6d3eeba345
+AdditionalInputA.11 = c8f142b5ae906928f263b32eacc42dfc09e4edf7661364c621206d3cb81d52a9
+AdditionalInputB.11 = 8963c3defb02e45c4932f88d14861dd337b158f2816e19b2e8755b3a0b0aba6b
+Output.11 = 44b7f0912606cb938008500512dd286d90dd12d4419405db5ded4e617fd249cb7c1224bb9c4d11515546065f5edc5bfe7fd2d8ffdcbedf22bc30049a2d7e550650a49dc65e7e941e6429728ae5081d2ba1061b404aba6b15f713694ac653497b8a52c7bb55a415547e964d4b487f8390b151f6c5e485f426757f0d739f4aa565
+Entropy.12 = daf8f8a18cb7b0aeb4e9868352c1eeadb819411d7c06ae0c9687d76ed48b3ec1
+Nonce.12 = 489c0582257a88bde25f7f1328d16e27
+AdditionalInputA.12 = c824e701fa84122ca549f4cb07dc33efd7eb8f36a9adc449352a2d38cadc39a0
+AdditionalInputB.12 = 2efc4ec1d7e1cc02e63d7396ebf91bb624d7c743d2acd5cca7c4cd8c82d26245
+Output.12 = 62532b66b5233431874ced72210b676424bb9d4950a366e8c334c505fad419d20ad3b1996a3709ac4e165135c4c3198d3d7340d6c700658078d5182a7dd684d165fd095ae1001deef5d7eff9924ce975ae588e625b7799ef9ee437160129f54f4625761350628b56dc7a38cb04b0fbccd2fc67322228fc179d064e3599080a35
+Entropy.13 = 9cdc0c9d7e25fe80cb61e3745989498511dc4e5de76833438941c947aca3b1f3
+Nonce.13 = 3b81cd9b6082ec5a3d222c14db62f65b
+AdditionalInputA.13 = 90c13afc65a139b48374b02e91232223bd9ca319b9dd26e920d277c939e9ecfb
+AdditionalInputB.13 = a68dee224c30d58bb869b3d84aa77f7eab4d4d1e8130012a0d443f9be9a643ae
+Output.13 = c5920441447b8ca365787feb8ff92ffd18d7f28fe7a8c726172c95d642ff3d5b38c4a9f09e72b7c095e73d2ae7d01ca4d9719c318cc1311ea7cb2a40bc8a1d75e4890508bff48fe74da84e657779c94511d608154e48cd252907d4918a36f1f20ce52191cfd9c8f36d48d24b25b81636524b191b86349a5a4883bb078e4f8ef3
+Entropy.14 = 26c7b96f47802510f0a0ed22eccd26c39ae56638aaec9a52d90d1887297999c0
+Nonce.14 = 09ffbde5ef15ad645b4daf2b5bf8bbe6
+AdditionalInputA.14 = 2e51dbbfda8c92f2c838bd85ca5dfd7f35504fae1ad438431b61c2f0625d5201
+AdditionalInputB.14 = 00f507a359585778988b6bb6b91f23d4ab29d2adbe632e4cd4646c8cd5f1b76a
+Output.14 = b7adbbf07414551464711ad9a718315b0587db2782d34179b70b4c0e323a91ad9de40933023e3a6be71cd50dc58953ad1bf66354bc45dcd9ea23682d487b43903a8f426182536e170af8b04460c586d8ca56e4c307ab7116d8130634dc9a58e1c3077bbddd6bd58c8a0fb9b18c4b839aacf5fcd711c611db120e6a605745e86a
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = e50153d9d7114aa4b8535482f8c4c8f187e4bc12a59d35c51f3fae9970d1f778
+Nonce.0 = 1175f514a24b02cdbd1d90396f92c51b
+PersonalisationString.0 = 7ba1b78349569a81902cbf95b5127cfdcc5bfaa761c349f1930c62cf536abd0d
+Output.0 = 924462b8099a1019cb8837342194ad10f24b3c70b0e3b7ed8f28063ee5ad34a725a3311557ec63c3044416e785739ed4ff386d6f5e5bf53d23c45f62acf725fa548b4c564e562a458424a63dab7771e4adb68fcdde2c250413bb7e95c47f117d7bfa85ea3cf7034fe52b2611fa5deb3f7be98e27b8e5adb83f97e897d4e0cada
+Entropy.1 = a1a7dfd64b0bb565b6965c23af2ec3814714d1a7af4367d249f3ef2c28e10d70
+Nonce.1 = ace62601e397838eb0093b8bfceb04ed
+PersonalisationString.1 = 128886ac929d9c4d198cf29091ae013e3ba2aad3ed7c017f0da7dd9da478d8d3
+Output.1 = e7e3e99c793157becda566413ef21fb41e468c1192122f4f1ea6be51d946b99709235fe7a028319335120e0d60758f85fcc653c5570b7adca527be222a867e33c5fc90cc2202c43d036a25d88f0121a082fdf7d145ba95c5a675b247bdf5a3d327e67e47fb2dcf821faa9a907dab628f70a0e0c7bd211fca2606899b46c0cfac
+Entropy.2 = 8eada77fc0bf869c8077a6b3aa697d4c818e398b309c4d9e73b77e7b43958f8b
+Nonce.2 = 4ae5f1dd363ca3f0a3e8bd65311102ec
+PersonalisationString.2 = 9328cbc2233821eb0b977426c07873661549488eb7aae957e0110e3762a46864
+Output.2 = 821ac3c18dcd7bcd3059ed4bd02bb9623003a2b05d823f17d3c89394264af0a9e53ce44db9650a96498bdb21f270f854aab79c053af154c271a2ead59c74b8ef420588569a5c7828b7f3488069bafde17d60199224bbe3e40b177d40e91c4b748c4f5d43b634f2d7be50bf037b0f5385ffc54e050e89013b8a8a8a238bc5767b
+Entropy.3 = 0edc07b780c304d8145a36ef567912244ab3c49c11d0ee4e324850f580bc7f8e
+Nonce.3 = 4044447c33e8a9349774d409ea04093a
+PersonalisationString.3 = 32d1710102b28da78d2cde1ae3a14e0448603dab18786a3a43be95562161b037
+Output.3 = 9ba83f591a73bce88ea8a8cd1486d383c64af6667025b1ce4b930e389b017abab1df9691b66f7b57fd52320c3676fafa280e17fabfbdd5e567edd216fbd8cf1aab2c530ef7bfaa432305e38e3a8fb56094a4c6ea0708dd4c8b3820bf3b87e1d7381a10ac23926afd91baa45baccdfebe78822146b815db2ecc4deed0298bc8a2
+Entropy.4 = 4fc150782f8aaa6ace45fc5128b8478cd8feb34d1cc3e14caa8508d8cd252581
+Nonce.4 = fcc48fc6618359b700d2936114aea646
+PersonalisationString.4 = f7ac2f0fa50fe11d397311c0387df50567004baded7941c0ad9633654a92ea00
+Output.4 = 07e2a5d9d56680dc39f2d514a3ef48d39d3a8f024cd692d5bad864a765ca7a701016fecf9d01aa62e16ebd908c8a335f147015e1656ec1e646c12bae177797d0439794400ab7bf896577c64bdd1aa0aa3a0ffcea31891bb971e7d62a4b45c23489ab23cdd399ab6558156129029ea09b8273d0d9955054a4cee427988bb44372
+Entropy.5 = 8eed1b9eb753ce303fe8f30c4d782345f27bc4839695b8bf8b558cc8b59b9a07
+Nonce.5 = e42b1c108bfe505a5730dc69b8d2a6ad
+PersonalisationString.5 = 8e9d09e5c51a28ecce73442e47414ec907034f2dfa2f24db2c0a4f7c0424b18c
+Output.5 = 29b59ee90517aefb8fb25e60a7a59ef34ee805d03be9b9cf30288b256f3e361ce692a7221fe115d6ea3cd35a812f3fcbaac6abcaf4cbd30231ebdfad3945846e2c00ae7b85cf710ca688609dc33a21eed8276a6a70bdae857cad6073617a7391ded6f74625392be49ba781dc14ed81aa5de93f99d357d71dda1a6be503ec56cf
+Entropy.6 = 9f0bbaa33b7321608f0cb354add1cacd01ecee863282c8c30c58929f197dd877
+Nonce.6 = d4388f2404c73dfa515f309757752dcd
+PersonalisationString.6 = d6136b57bf0b8ef3d0a402b757cd87dfd8bc98af42cf6b64dc7251beeae7d3d7
+Output.6 = 3e026fdf4cbe34a6345f809cb5d3b31cfcce13e02a7e3274e8fb054b60718933053098bc329d0f65743c6523d747655869d5b56400c7ddb6d73620bfd9d41d82b6da85ac1d4703c93c074431f709896c5eaca30cb95f8aa138f88f369e23ca600ccc3e245dfb080141efc2e2fcfde1ac40120b96f8b024a8d7913b498dba390e
+Entropy.7 = abb007b472c21869d2571b412d2320cf7c0d080397d35e47c47a8ec10bd21cc7
+Nonce.7 = 59b420bf6ef70bc58d02a074e09f29fd
+PersonalisationString.7 = e836f980a188f0189be8bf130ba6136ff71e0994863cafb25bb611ea875cfa55
+Output.7 = a2abb57a18401a54c9eac07a1f4ed1cd21f525f9a5795dd9bbe7db61621073e6c150804cc2dc11f0734ed8000062df0ce7c7448499687da5d21302f507f8c225166c23fe01eabfcb0f83448aa2da9111785b0ec3e3212694225f0f80426d39ad000fe904f68f9fb7d6851e929ddd12ca9cabe97d717d5374b7d60bd4b33573a3
+Entropy.8 = 831b39f472980c2cc0ab18bc0fbbf9dc2639c0fdcbf8bf1aa7b85192bf589f57
+Nonce.8 = d3691ea3d137d7248f5592397bd1c6d5
+PersonalisationString.8 = a08affc0d4262986cab581f602f6139e959960de35b7931ccdaba450185ff290
+Output.8 = c2359652f77d03118eb570b1d3e8c2525aba84e48dec6211a6062f346614abf249052b72d5b05880c3c9d40a2d05aa4211499a06eb4a4bfd011ba1d447c7e16b6b3cc061a9c40fcd6fec9f32173d2237a49a462df4fb2e4457c0ce94c29835351e1b3c68056d5819d92fd035fde6c8b0f52e5f327a9cbc7896932b8e526ea465
+Entropy.9 = c977c3a73ff79c5d7d3fdee8ccef4713e90d0a87f0b28ff65407bf1323b70372
+Nonce.9 = 9d5d1efade50b35415d190f295886fbf
+PersonalisationString.9 = 560277ab734b3865ce5a38761099f3aa38700a05e1180d30fbaa6250b8a827fa
+Output.9 = 2dfc99d31356463ee6ef955e9382ae7b6dcf181f8b7ade07fd029ad6fea5e1f0b571c6eba513d3d8d8f804a8d723a76841e104c196e53c2939892a607e6dd02646d2f338db0380b62434c5d2d2785a173c3af5fd333a9f115a733645241056790b3ef7bd8c29f23bc9b63529b0676d0157512d74e56520bfa5fba08db56aa951
+Entropy.10 = 658565fbb879495ac5634af9f478d9f8409c9708591f802d0183a3036cf786c6
+Nonce.10 = a39383adc3c396c0509662e022152899
+PersonalisationString.10 = c60456ec7c0dc96bf947293076b5b1f8b6f7cef4289b225c3d99bd8b8ff5f134
+Output.10 = 33c6898798a7e84ee023a2c935766cfe49c8c9d23675852116c322aeafc49ca0badc1d8fe271ab6d766ad16e1dab047f11a6c6fd4b54c5b6c5c33662322e7e226479f1f940c1a7576c8f6a9a5fd5ea6c76e11f7ebb64d4540d7f69e21eaf12e35c34725e5618b3fb5bf41ae34ee315d2cdb4ebe6eb7ff6187dc37176d6b444b1
+Entropy.11 = 5f369d910ef83b28b012880db63b86d2139778c931a4fe9ed11a3cacc5630a54
+Nonce.11 = 9ccaa788611202abd00f6a230f36cb8b
+PersonalisationString.11 = 9f43246e07542b8b72a0d49648f6539cffcfdadd2bf364930003e58fd645c697
+Output.11 = 114cebdded6802545f568a8a1e20a8ea7941735ce6a85a9f1310e70344dfda961211558af1d260c0485789d3d89376a15e4666110a6ee53860dab6a46100f34c771e97623db5c3ff19bcd904c5ab626139ffc149e82f188bc14f5680735eebeae410167bbb67cdf4d9f536f0479808e01540c6b3e16e9cc5754e7533c188c0c5
+Entropy.12 = ffbd8a4cb741b9f636b5a35b00be7d174ce0bd0c6c4807ad7425b8688511ebc4
+Nonce.12 = 43bb0b0d7ca0488aabf66cfe79cd4c78
+PersonalisationString.12 = 06dd817b26cd5cfb2b53058fbb36ab2934fc1b00fb2c25903f013b909ae6ba3b
+Output.12 = 7e76c92d2973a0cd991dd65137498e86f551e57424cc655473de7cf8438a1740d1aade63e5c9b60451a8cbc1c3c6cfd520703bbe969093ee9ca2c96f699af61cfb649783c0c33d67b86451ffba9554a20c2c306c49622ee6e8e6b8681f6fa9a58a212d80d71c2d7fb998da1c4669567532287cfe67f653a678e61493d2eae1bd
+Entropy.13 = e742599c62d9baec6461daf2a28a77e354f1069e569029fd2c6ea32e56e52a54
+Nonce.13 = 231c786e778fc70846b56c7159611ad4
+PersonalisationString.13 = 41156ed56a74f98dbc311069d8edaf70a267193705c784b363af82cda9595570
+Output.13 = be34566a89229f4c9bfb43aa61403d48f59411f840d38061dd8b1331715d821b17200d2c7305196673a94eccfd99fcae5fb9e9a461032692ef5698c6634037525a661d84d6627f2052dc9a08d98643b555d4fcdfd16504bb7b441ac928dc4ebd74a4fa647bd853729ee525277b319450c104a88569eed42c2a2c1bcc3eda9aee
+Entropy.14 = 8296aaf08f44bd70b0d219306e6242dc74775cba1793bf2b41b4c1de6519fbe7
+Nonce.14 = 3f9e88b93a6e69d070328c2c570c3be9
+PersonalisationString.14 = bbe702bbd2265e73aa073f47ce55fb65902abbe51635b414df688c60868546e1
+Output.14 = 0280555ba6b2379dce7cd56615d7d86feadb8ad995e2852a0607e663a34b1e0342c7bc649adcb204e271eeb87521591fad74b3bd841971cb100ae5f21599b732d8c5f9d578c1113da7034b580013720e62b1d013e28205d5024f8b1eb3219e6cf821792713354cf1349d32a64f32ecdbd7578c55e401fbea57f21ea3ebef0f9f
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = ea4da988e6c5f0685a587bcba36eabab586a87e2d724708078bb3766a80546ec
+Nonce.0 = 9221ed63f8003b6e95f7fc8043f5b01c
+PersonalisationString.0 = 93dc2c6b8499308ddf040ccf81464f482f09ea44be246f8c09181d488c28606d
+AdditionalInputA.0 = 576cd452c79649d871d061bd8e1d7ffbac4687a72e25158c9e1dd87f7194f571
+AdditionalInputB.0 = c30f97e178b95ea29c60f9220bb23b15e9f0dcfacaedf1e825907327d732b0b6
+Output.0 = 13ac0a60c6ff5a08f580bd1c039172fced4079a0dbe984242e7b0e113ef6694cece20e53162ec533d1fbef12eed5a10a8b12829188baa15dc52883c9a8317e9c084d3e075221035241ec050b0bd498e5e27fd97df86c22fbc5776d2edc273ca930c0a95877f4201378bcc3173556e9be46b0d55b340de69612c844166c10327f
+Entropy.1 = a850b5711449f79f3468e8bdf10df2bed8467546aba6229f257d8bc01b17c051
+Nonce.1 = 4ccf750d53e8c3c41dae2201da36a948
+PersonalisationString.1 = b664f6ca0987d12db7074a892aa505369499f58fad3973416df415b87ddac56c
+AdditionalInputA.1 = f63be9c8490da4996c7d551a9de46dcd1d1bbdf37ad5883749cace9d9f6d9db8
+AdditionalInputB.1 = 752dd42b510678dbef74468c1a26558a67f271867b3bb8aaf45b98686ea70af5
+Output.1 = afbea8efd4d50447e1ece2fcb60846b72ea50cc0c46c5afebaa747afe45f03cd2070c9334ee42d10e358dfb378c898f0031f38f5cf5545916cb2dc0b318f491cf3a3d3393a87753b2512cd8163aea85ffe6082dec5ccaa6a6ef85a7b9733cc323ae8748b4c712c273336186e867504b3c7b2468c726fc77917c2280ca0791d1e
+Entropy.2 = 4d49d3e490132f9330a3b8ed731790da8480f03299e3843920086dbd173ae72f
+Nonce.2 = 4d68d064a0baf5834c72bf66472e2f6a
+PersonalisationString.2 = 4487251a3bef7e408649f03618799af364a3b47f8f804f7d60c2d3b20c53f5ac
+AdditionalInputA.2 = c3745c6eb7669599e2c89a7c6f1c295b5b7373057816a182fc78bc8ad7693a32
+AdditionalInputB.2 = dca71e4c0b76c68118f14cb026627420b27fca09e213db84298032013c285b62
+Output.2 = a93e832e4b542cdc70208e42039e5064201a2ecdc528f609bec2d2695c30c5dba25d43968ef5870d546fae739139f33bb1eb2d4d6b31bdd2d1c52e89aabb45548e1c2cbcded4f9c9069e31a08e5420b3197d9cd70ba625dae9ae41fac18b1886c442b4b5b15c7b64cf80074350bb2f02d62f88b5452133e9567966ae1a3c7331
+Entropy.3 = 604f43140ad6c4e8360395a1c5b98f7e86cb8ee78dbe5672c37f58ea24b07fe8
+Nonce.3 = 9344f2f41aee9a7741291f7b55d11e92
+PersonalisationString.3 = bb981dd8e390829577a610589c401cd41ac4f03271c1987ad30422779599a01f
+AdditionalInputA.3 = 48bc9ffc2a1d545180f01ffdbb638af85e532679dffa92b776697e8177c268d6
+AdditionalInputB.3 = 4b373c488c7b79479ccc6a4c56a3c1eb1e97356f46c3aeb5bff61b8749fa372f
+Output.3 = 767a4152683e8be55b2bbeec6f7a2dda214b7708dfb4eecd064d520e90da7682a89629f6da97e40e1f7c9e532011fa28f42396be604193f7f44221507a24991740c66258bf02f0f3d9431aec19aa76cf5ee2a5744b05c6dc343f1ed270a4b9ebd5326475362b852fe5b44694db8e4c47f847da927a09efd07c80595443fe66ce
+Entropy.4 = c90218e658ac6b41dfa4b2820a758c024b6e0cf9abe2b999aaa1e673d8ac81c7
+Nonce.4 = 5656251045f3f94c6911a0b238039587
+PersonalisationString.4 = bf315bae9e0e691138a15547a692c774a5ffd96b08fae9408bc6ebf94f2dc32b
+AdditionalInputA.4 = 2e17034a7a3197f62151a691422d66cacd84e39b8626a922f09e6c1e77fe27d7
+AdditionalInputB.4 = dfc297a291dbc6c5dd17cb3b1dfb759a21f58f8333379c8db2bf0de97cca3ab5
+Output.4 = 1a799a11b051c6a6fe6d921c41f64c56d0dd84f0c137edc770d37f9a1a787a1ad67d8f1c990776aae08af7c0b9179db8270940db11885b910a1ec502e2f5d66d6c314b7ee65f0ba4b177ff980480af28dfd3709e2d3cc6974ae4c11b9f97b9eefbf32301776422cbe3c9fcf24a19f2e2a3007946303f3700097d872e11febe26
+Entropy.5 = 8554821e05a966e51cc86d3d0312a94f125f89fff56ab97e0f9db5c746d6f5bd
+Nonce.5 = b208b9d94c4ce82c86b7e5ebbe769c0a
+PersonalisationString.5 = 4b0e5786ef6cbe46d759aa648613a922ae1c326d4cb8ce741bc1fa81b8f8ac8b
+AdditionalInputA.5 = 0cd90d16285fb69771d76e031eaabd5f7b9955f717aa00307c4c65dae4bead32
+AdditionalInputB.5 = f03bfff7cdac519ed1465e749177caeaef7308dff57ef41fbf1cd32b8d9b286a
+Output.5 = 0dbd52be12081e08c12b4147393db622132ea3deceb140aadafe702252e967c340a4a13f27c72def4b4dd68a12cf9b6b8546226ab2c57b9941c010a572eea0fba9a8749b6e876278695aa73f68cf7a8c86bb52dcbab07cacf19e3b84d2f1c14eb51ae396b6ffac4c93bdb4a3c9e486f2641a37aa0493ed07c70ad3b505468190
+Entropy.6 = 021f275f7823b872012c18aa92acb01be5cfcc6d44a4b35cc24659f2e12183c3
+Nonce.6 = ec63898f606538592702d5eca2e4ff4f
+PersonalisationString.6 = 7f94ad23ba6d54db3d587ef06bdb50dbd4354b33d3d9d03e26fb5117497847d5
+AdditionalInputA.6 = 39902b10b045cd42a42286c12bae6f3bdf57f143060c8bea80ae961d46e275d4
+AdditionalInputB.6 = fcc239dfad229994fd6d3cf35e46fb14c1381c259086b41fe719312aeafd3eec
+Output.6 = 7acfc3384ced24f616bceef72b052a99f5c2eee9d724b92ddd9a6c466e7df7faf060cc5acaff127a05b5dadad29f6eb8b79c1c07403f609a88a947c5e7d70de1021d19e33bfb68439ea106b434c756a4e687e2602e4407c712eaa4cda2154180128c3ad918b8a9eecc1fd7d52038f0496e38d1ccdedeba1c514c7169762e0038
+Entropy.7 = 477e1c8515f368946f5c8b6bb111516d4b756113f37dfe9fc3ecce2efd8b5dd2
+Nonce.7 = a1a6e54762942a4a1dc0d58fa7895bff
+PersonalisationString.7 = 52dfdde18386885d2b2fc42f98d9d718ae54d31a5a090f8866c5fbaaba90156c
+AdditionalInputA.7 = b10900a8968e7b8e117c22d9d97b1fa6c4df0f0a8884d620fcc99c64d351efd4
+AdditionalInputB.7 = 72ddcac7064ddff0225f61685af77dbf0d3c73ee335f1cec00da8824a0e03f8e
+Output.7 = 6cf275475f9258e86bc31b8c98fa4c69c602371afd32c2222697f2b60f4cf998d59e18ad7b14d44d0b90294b1f1539a912e0f17641b747b5661b5831dcb664ed643c2f4b66f46de05b5f5fa727c64986aebd7093792869e1a251088bb475d1eb6538c4021abbd39d0f774c6cbdb41917d83fa968d96e840faaeb8ed5c11e5206
+Entropy.8 = c02380281fc7b8a24e4b28b4e558106bb131efb72fc90cfa38f2c50b00162224
+Nonce.8 = b73690893ac8350e9e2f27967be1a07c
+PersonalisationString.8 = 4f40a4f971f777ebc4417b6347cc3ccc434d8c7357fae77c16e730fd78b92f86
+AdditionalInputA.8 = 8baa40a4eea9e71bdcb642881c6013db16410b6069670f80c60b6b1e8bed8b9c
+AdditionalInputB.8 = 421bc6d1fbf940beae669199dd4e9adeb7ea76692f18dd616fb847e450ba83c4
+Output.8 = 2b601faccc83c5c023c8a64de29d9065ae372de49405c6283c7cdcd70baa8c5ffd4a072615f2c476b5382b785453bdf1f494dbcb9a678e2046693ea0afb33a63f5febfeb40785daad8e9306bcca89a1399a47ffe883871f55cf0b2b86f375f0bb844234f9ddff66645037b0c8771843aa3b83193d1381faabf013a9a6b34cc05
+Entropy.9 = 44c9d13606484d13512a243105405dd124bb31aa2dce7c924acccf7d309f1b09
+Nonce.9 = d8ab01b10063d71c93e3b49244960b0f
+PersonalisationString.9 = 60a7fbd174c0b4f92fdc3469e1130ab6dcd6dc5a74228a82646ffa0349a60749
+AdditionalInputA.9 = f8515192bce0fea888b7c58d70d37082a3abbebdc7070430336acb4217eac9b1
+AdditionalInputB.9 = 068740da4e58c1797760a6790b53822057da817b8ccb99ab77ce49a570352828
+Output.9 = dea55eeec42a4dd2a881c7bdf6059621e2f1ed611b5cd716a7a0e03349c0e74fe71488e2fb272a8a56425ce4d971dc0cab2cab5e8a1e7e855aa33681dfb63b5a30d0f1844deea2ea60ccd5a351fbf1c94acaaae7feb995ce036262b344b0ce964cdad5e3c1cbb9282febc6a298c597ee4bae512861232897200d7116ed10661d
+Entropy.10 = 3d7b9004662fd21fedbf04b917c6e349c1bcd86e320e87556204bde436ef1c85
+Nonce.10 = 7d4fbb77f14977030ed74ff43ad6d6f2
+PersonalisationString.10 = d421c84dd0807921503eadbdcf326a4ce0808f342f941e24076a9446d34eb712
+AdditionalInputA.10 = bd7dfc2285ca27999f9fdf7428d59ee77b935cf7412882ec0006cc61f36f01e0
+AdditionalInputB.10 = eda136626ec38aa374b434fdd986e90025ca470fa45e0f4748375806b8dbd38b
+Output.10 = dcf27906dbff8f710a2092d9ace4ffecb9f1d1d4cb104f1d3be76b17ca18aff4db574d1053e2e3437aadb1ad3159547a77b69e4b708bbfe60942e6c2d4efe2ea1bf8150ba61c159e9de88b6b9175390df2381f58b938b83b8f71b115ddcd5471180e4dbce79e815baa6b0a4a3e137c5488b231ae396ad170fda7fbb44bab99fe
+Entropy.11 = 9a937114e00f83915386b3e66701ce6b1ec7fcde6c302d7383b1218121e38a3b
+Nonce.11 = e24546426e524e670af2188c5360be16
+PersonalisationString.11 = ba876365a4a86fdb0af9069c733d4a9a962de2ef2d04b4cc1ac2a50fdff70dd1
+AdditionalInputA.11 = bdf92fce03cd2691bc9224c9047890bd0977759189d193cf36f3e7e99e230dbe
+AdditionalInputB.11 = df6aa525733889f65a4a2debc2f08576c22750c4722cdf820b691ec101fdfc5e
+Output.11 = 02dec2be8df5d686f391373da54fd1dff7720cd39d2e3eccd85db0d4986cd316cbe0e843f4cde7a90c123dbba566880f009d04e29b51defe3cf30b12d10b8de01b3d86cdce4a16b1142f8e4aa132a18b7225be7be818a14b894608dd9e6476c87b558f3ddae530af49dc16d530e92391b00b828db9b6e49b68258a0e0cca4fef
+Entropy.12 = 76560236e3c6c548ba1fc39efc8d952f911e46a297bfb666681e836e5a5baebf
+Nonce.12 = 006cef471ce415d5ea83a95c31009194
+PersonalisationString.12 = 01f0711a8e1164cb97692552849c2a1c9443006f5d22ff2d080f083eb1020c1a
+AdditionalInputA.12 = 6796a8fe3f9414c5e495b732bd7c4b60208ecb7b318f1d14fb0a197d6a21c6e6
+AdditionalInputB.12 = e949913f3b2f545db51d38d512a0fff24a19d6fb6a2842ede621e357c8c80164
+Output.12 = 65addfdd398662599e452ff5e5e690deb62ea73b9d453ff2ca3d164f85677e0beb6ab9dcd7ee9ffa3293d7f0375bc97c87d509e650702dbea33f43961ceb49adc2ecc85d165d53e734c65bffdebcb9d881bd98f8b339c530b267f31e2f28574ba69b5ee3e91cc898dcb9492903bcdb7d08169d007b5a30b14b641d69fd9aaef8
+Entropy.13 = 7e47e637a043f06e574fe6a718267f0bb5e16bb8e342c7a2e6b2d76ef9f10299
+Nonce.13 = a7564f36c172bec0d2fb2760a7edde1e
+PersonalisationString.13 = 825e34284577c8b62a5606a9046200238c78ce32e11869ffbc83825e1989cc97
+AdditionalInputA.13 = 8ccc4e243c650f3e56bf49e8858ba5f36e0f5dda3aec49bd624b6ca7e832980b
+AdditionalInputB.13 = a2f614aa755f50b7777c354f97ab6ebb9376fe008f10923dff3bd4da6848aacc
+Output.13 = bdf43d744a41c83b45977a4edd5e701dbb913191db52c023cd4be9b03d6971561547a77021926d9f6aca5924e633b7c5503197d47dbf6d412fc28f176f53c5a50d792ecb8cc7cbb5713057bdf17d492daab67c6cb001edc86def7570d356ff83b37f643ff427aecd01133b81d43f6a15e95c4a1b04cfdb614a1724b75f73be70
+Entropy.14 = 517f160ab174f63da837f9ebe5545396f7e78a4171a73a76c6c2244b0715fdf3
+Nonce.14 = b02adc63c0c8790454a6a9d01664dd51
+PersonalisationString.14 = f21e5f51f5e119e17a5ba061fe5aad0628c3789f4df3c0d7025b43a5fb155481
+AdditionalInputA.14 = 38684dfa6edbd61e464e49f7d01932802a5a5d824db6b1df6087e84a8ecd49bd
+AdditionalInputB.14 = 4949b08a12656c497cc6760791982c0d4e674b0f8a14be730a91689ee77e981a
+Output.14 = fda39bf8dc1aa785422281dec946bad99d5ead17cac55d47bdb9bd0a80a72f3c611f92bcf29e3e45475426a7a9f139b755f332cf75035b047697f4131c9bbc9ee825ede9a743b14f02dea122194405864aa2b538ed5cdf40ecf81e02bed1556ce0e7974548f050b084b8f3626c0fb2c7272d42cdcb039af4c7d957e285b53b5b
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 0398eea9b1887385fdd440f46c475829e5a15d73e0fdc22e1d9290852a0fa0d9
+Nonce.0 = 9c7b1c1fa7491b8c7421854427ddc1c3
+Output.0 = d2bdd8ffe6d840380f7dacc3ce913f10567b7ad40d3e319880c9ace504043d5158cb0679aa374ebc4d4693620ce9ea372ed9ac7b95d90a098467cd4b6f491c41d86ae365a4c0da37690b1748fbe76f5312da9399565cb691710c15e1e3a83b4e61f7e68c6727b9a2a5bcf752d11f80736a6f1ce1553e92d3a388ac83568651c1
+Entropy.1 = 0ff19bb811df7ca0f547b5d9a6809b1a7b58d5d144426c00e924878101536924
+Nonce.1 = 9478e8b18fdc530a570852bbc3460cba
+Output.1 = 848653b4a3d65f1e1811aa6da7f91d6826dbb22f636dcafaf62d966e86f5ce67f0e2b27bdb847373f44627426cd04ef27e79274edbb727912d89662376e5e1a831155f72ee61cc5a102dcc042a2144474649adc1244539e4be23ff49333544addfb9b64a97b81060d1ea2107b6cf883d25775836a8a6560bab1b50e8b688f930
+Entropy.2 = 0236edaba4e5e27e90c96bdd78ead44fd7a2cc5796b8dd7b2bcd1dd06a287487
+Nonce.2 = f86fa888c9be09b4b9f8c02d8f851e2b
+Output.2 = 5dffab11d90d4b9782a25b41caf73c4264953bf9531d066da69e8c6f84064d547904730ecc42eb78f21e9f2bf8df012d46257541182fa43e412853392abf33b5ca50126d5d3cea6fa887ede484f2173c8a65f7eae2e8479914328c44617b2bf57af9ae128f0482b0ede00715e58f1c3cf2d043d1c1c276d50730d039807e46d1
+Entropy.3 = 55a2fea78b19b685e0fae6d9bbd14ed528342a169ad494f2e4054e30ea54a36c
+Nonce.3 = a63e8e20cbd540490639e98a3021c358
+Output.3 = aad57f77c18631d5bd8744388ae6b47b975ddcc51ef39903d16e7e6aa90e0ca3d56b97c6992c6175782f92ebc57e0b9ec4f2c9f5489f96a63bd3c2d1f3c1e82c4417c24c7620b1c37dee5a6bae7e7a4d1cc543151e3f98e49e4024cf79c516398b3a12f3b55b12ad33a690fbc3c66fdfaa471396dff727ced7ab5a2f09a73dba
+Entropy.4 = 35f938fc8bbbdade64d95c50f75aaeca356a2b9fd1ec1719a94b8239081386ab
+Nonce.4 = c8bcbe8bdf4532cc50947878d414f470
+Output.4 = f77873425fdedbf30e33b2442ff6763d2d041d3b838a66d26d469dcd6103e203ed7473a33b443fb8d2964bf9a02214bd14cf8938744c4ce28ea46e6f827c8917da407dbf2956d458281767cf0f7ddc973b16ed81c446d85d9dcc454bcffbb6f831109a1592bbfbe1556aa4727c5ec3be6a55a0282d6ee96e9e37845873d6b858
+Entropy.5 = e107669ceba4715a97d531d083f842993a4f217745387e79088b970be077d1b7
+Nonce.5 = fe44cfa21e308b55b4575b4dd3744c68
+Output.5 = 1d7870659867a1c0ebe35218e647a56252f73a1050083730aa293e9ead28149397bf5e5c7e8a6c6a336dff4442119966a0fd6502dc0de72274d04ff1acde4588ff25ac08f154e029f609dde8019ce696f83495725588f4edbcc09bc6c03d43a96a0436e1cfa0a3e2e4303d0f9fa481cf7f5b37642d7851cf5727ac41481c5c70
+Entropy.6 = e75c87acc72256b4c1eb11df060dc3fa21c858b737178dc61f907c57787b4d06
+Nonce.6 = 0487c6c9609f9de7db75b63b000c3af2
+Output.6 = a87bd43c52d4a7c9f21f53fbe2938e59dfa8df09a2cfc110174ac4a66f01e95a341d8a2d5feeb24683852b2e123522c91c4833d0fec27aafe2e774f4c1c938336e05e6c7f2f3e0806be945ff2301a44b21bb8d6ca047a9d0db1b404f38c66afdb4cd495618a5c6e132368bb950b3cbaefb2323f289918f046c8c595e7925f6ff
+Entropy.7 = b1ca7743d644438cfae752bcbc1489622376ceb0e8272b3718ab0d71165165be
+Nonce.7 = c3c5b30c0b4e599c7e710e6893248d55
+Output.7 = c08cef3165727b8d6c4cd0068501a6ec22df38c754cb0e1ada39c2f902db475fedc449c34c51229ec77c52a592553ed2ff4b55907fe16394b61f18693cca19902a692cb6737d0d3b740625ef86f0eed0b9f8129f709c8cf68374b031c887cce685d05d6e50675adddaee662d16c2e7c6a5e450f407b6c6db63d76576555849d1
+Entropy.8 = b37f987c7c36f253852ed7d07af677545364091187c0fa7111f03affe8f65bc1
+Nonce.8 = 6005e3904c94d629d161f81fa810b7cc
+Output.8 = 84a0f66555383cf133fc3e116578335685471ba8b7e6876324f29d0f991e6e3413f0b19edf69dd60ac05d4d7d7189d11f9fa2eb3be1013eb59ff32c1d576408bbb11734d3c8538327fd4f20f5d7df48cc59a3cc985d8783ee2b6b12fd991b0658fd25764360071cc96dfb696bb4baccb61bb293dd6c26c11f0939bc5a4f6e774
+Entropy.9 = 416ceb8c2ce590b5773ba8ec82fc91122c58808273d65615f8ab023cdff77692
+Nonce.9 = 3d11888f43fc72e329719c8e09852b4f
+Output.9 = 38e71d00732e20b2eda46b185e5a45647ad8cccfb987ada270079cb223cf4271618a41df6551343e093b0d5abbc079a406e2fa6cd955bb86789c4cb3fe42ff4ba82ec3f03329ff786e34e681ee26b35f7a8d764e948ec80f9f6d7cea6b939039961fd22806ae5a404febbf7e062745a0c64dd3e87922767309fbea5d1b58a7ed
+Entropy.10 = 34bbe706783662324f12047f1bdd4cdac8b09ec3e3c8a3faa48d0edc3a241042
+Nonce.10 = 1924993c64cd8395319bd45471502f5a
+Output.10 = 9ecc31d722e6764e358bb7d9aa2a278f784e2011f46df7ae633ae9427963a05e52857f11eca36b42e76a49366bfb335ebecfc61c9c0180f3d102a93472bd4564eb14ca40511d8e846f387b11a37aad97e08900431b303acaff746397bd0442eeb19af57f213c3233f3d8656f139518db4fad823ec40f2d7e637c57a0eb192d70
+Entropy.11 = 6d7bd10ada2c3b56c42de6634dce1d34270f04f0e1ae89f804c90ef4b2dc8eb0
+Nonce.11 = 247373004e17d7704484049dd649e8d9
+Output.11 = 2d8f85b73c227092d44567e23ea45b90b674c3e29e9356a33180cff0c8dbdda915ecee403524fc484889bcb3c78713bcb3642faafd75fb32009732ed7dfe352528447b57b6863609a626631a1e84eba3dcc7a23cc66717ec1225e29c9774f8180a6de671cf5ad21a2fb2387f63b9974b47cec7027889310d41fe6c802f26026f
+Entropy.12 = f86bdd78fbe954f941790c8bdd1e650929c3797afaa092346faa22a91f6a1a0e
+Nonce.12 = 9b5a2d78c91bd9e28b138f0476666be0
+Output.12 = b8083d6337ab2429b4301bc0b0e0344a63e4a11d7804b8a89ffa091b069a41664ed0e807f2a2a5afd1bc6c44b4d791c433a76a0de89bc0470365fafe11a82538e31a44c3e6e263e330873c3ce8f220dc239bef3cc06bf778d09219393957a1162bcd2e7d7c2d58fa8df2f1793b0ca773be634e5eb0d8204ee89b9c08add83050
+Entropy.13 = 675d0f1b40e76ca58a97fc167de10fde8fe12f9973584f843805c23b4ee569ce
+Nonce.13 = d5e4b9857b535e5bddd172efb6fbba5b
+Output.13 = dbdb9b0230e0e5994fdea825a92a123b18313894d83c24223758e76ef61b841062af470ad9e3de28d0a1a49731c72442df14fe3f63f4fa408cdc513dc31a8c09f68b127fdeea936231dac202cf2b63dd08083fb5a63f6f409d1e54dc055e11af8392efa83a0cbb68430286e8984aacb54c13f73f29490d7d2bcb7f956c58291f
+Entropy.14 = 1006646f977b83f4d90870f24b3b72d0b4947037f7671a64ce3b52829506a519
+Nonce.14 = 5698d50f59c42b26339d218fc985a41d
+Output.14 = 44ab1d22fd3a84f8847c33d0fb0aea66408d5181b8ea95416beddd9784d86d72d2851857b503253016036246cea11f2ad2bd18fe56508697a50b14e7c85bd9b002deadbce5ff9f72508b6ebce741dd7803a2d8633dbec235cccd37c089c9d747a52000ed4cc1dc8545ddb65e784a698bdc74a6ff4fd7b3dbed31a22f83b4fd8f
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 5643776352534d25cffa8f62c071dda1cf6635008aca89aaaa574b564536e3bf
+Nonce.0 = f79149ab6cf92a106931e51f0541c689
+AdditionalInputA.0 = 125edfcaa0cfa26f2d3ade21f3c7b273e0c4a9211b5b6c9ffafcef4ed1cc9112
+AdditionalInputB.0 = c1fc75f96f393df228685e1ae71539b7d7db0de05887bbdf6236e465b0014458
+Output.0 = 52e2a447da5e55d0116aa47e1dafa35aeacdf777c70c3bd6291af7e5a600c5190541669e344f5d2094e014149132743bd8d18c8938399cbb3ac9b99978b4e92f96d3c3a9b4c6ec90bd9eb45d1ccb7935488e490feeaf23b44c6d9d8d99f953dfb67e3897cd03050cf4d85c8c3f124a4c8b90e1bba98f7b9f12898917fccbf6cf
+Entropy.1 = c912bb219548b23346f5206f0a66f16698d70ad1997801b9b709d3428cba6d5f
+Nonce.1 = d1cd49802816d55dd41ea08aea40cba6
+AdditionalInputA.1 = 7703e37fbf2d23995b393a762c7be95315ee0a2f73d17aba55c7fe58773880ab
+AdditionalInputB.1 = e53e736d6ec5558fe50979d280fea1875870826a0cb9cea3cb23bb9b6644258e
+Output.1 = 46579bcfee4077dbe7d25255a276a0a57e18797ba395cd727e5114c5b24474b25ab0e19191071492a30bed3090862ea8e203c4a1cbf41d9c48bf5fb51dda7817cebe0cfba43fe7a0f12c24510b9b2ec318b35bedce221ad3353a22e4a5ccad12537d5e5bd77b481793a5788ba6376b751c0134f14d924744ee2c01ccb76fa33c
+Entropy.2 = df3d1d0388742b4a5c010a5a21404311e7753881ee1ec4e2652f00c30b92f520
+Nonce.2 = faafdd9e53737c2678020b95d0c3f7c1
+AdditionalInputA.2 = 0644dc5880ed92852ed37f8d87f6c6dfcafd6def4446fa0eb432c14cddf2f10a
+AdditionalInputB.2 = d40f131b0e02b1c74cc5e0ad8859cb26a47f996ecb60f2ff8a277760e526d8df
+Output.2 = 10f6d23f911b851815260eb8e3fb0ad141bb5f03c830d9d355b021514e483d5608158c4dce73471a31772b864e9250c72b1ef9545eae39acec4af0dda8519607657b5fb39818d725a4ed33c24453e8fb1e8d4e471672b346c0c20b8ed5e0cd356ae809cec1f73ae7529f6e88f321395854f61c35157bcdaf21bf52f2ab51cbef
+Entropy.3 = d788812e4e17649951c02c187b15f09fe847e123e7266f4aeaac710f6c3d1625
+Nonce.3 = 03cc7c29a190572ea7dfc48294f56878
+AdditionalInputA.3 = 2ba83c739f5893d3afe796774c4966509626fda16bee8330c247c012074ab5a7
+AdditionalInputB.3 = 47bf4d370178e2ff4880b393ff7ddeb0ee09209b191440e37c780cf4924964ad
+Output.3 = 356d211018519a4969fbd68233bf76cbd2c5abd855f2b0abdbafafc3b47f4825c1716b2fdaa1123c2ac1d4f34bd3da754b0aa48ab13823838da5b33bae7caff78ef6a66e5c0c77326dd8f54a5e0869bd2cb0d7204d63304c13d13245ada1df9a97331004d785706b1d0bbf1b6b1de68d370dd125d7951df23f0edd10ae79506f
+Entropy.4 = 2b6f323b758a84da468d1008e780bc828c8b649fe6328134cfdbc39e19eaac59
+Nonce.4 = 17bf7faaad250b6095b85811e82ab79e
+AdditionalInputA.4 = 53b4b3e55643f43475782328cbf1e916918da2c2e0c063c54e0a3183e6c3bfcf
+AdditionalInputB.4 = c05ca07aadde27c2eb484648accbf2d34e82f24d08b2ba12c316f2a8c30daa91
+Output.4 = 8859aa86fc6cc4b8e55988643f0a2a7bb346843f0d58e3755fc5db925a10a75614a9e246e649fb616d60887645313afe5d0f9c8287c765117418282da310ef1e7b8b43a482da5eb2bf7584b3dc07de022d25de9adb262be5b1f1566d7a94e357765bccfc5dc044345efaad1110b4f5a27e77c503873bf305c42f589df611c880
+Entropy.5 = de116198e5250bfd31ce835fa29f1e559ea333b14127fed0df323342a5d29b28
+Nonce.5 = d7a01a18fa49389b04b27643f2ef1fba
+AdditionalInputA.5 = d85f784b477dd8aba132cad83fd99748aff3572cb04e32530bb7daa937bca506
+AdditionalInputB.5 = 78fe739bd0e0b330eb6e98679a9068376b62f95fad49e9627d1297c9de55fe7c
+Output.5 = 0d5cc0d9659e8187202ea0bf60dd2f09c29b49598606ef5b0ac4a2f5cb7dbac334dfb56d70a676b4e2f17afd87ec9e277fa089f033616194a2628ecc7ad579f74ffad5eb1becc06e4f30b08673d9b1ba0ce9107bddcf27f44a1f92b5ad6ed6e9ab3f54f9abcfb128d404a1d267a464ec75e880a108fd49501aee99f1a2a6cc21
+Entropy.6 = 3df5c20c256be660689ba6accac5adecd5f53342e19064c73bb50c5399bfd13b
+Nonce.6 = b354dadec57e7ce6aad195e6bf3ecae2
+AdditionalInputA.6 = 3520a90f6fd4a937e59a06e8efa102e7912d0d9bf75c097013f8d7d19343bfcf
+AdditionalInputB.6 = 79e15cf2c0e4cc093ebaab800a9800a48f2a2e6f6c42cb896022f6364cd768b7
+Output.6 = 42a72ddb7f4fcdd6c881d6e80451d2e7a69abe8f526b222b62dc826b19734ab4bf59d5e79be1672b93ae761b6d63f44185a07a03538fc011d9881cfa2fbdd5069041c3b078208ff4c3e3853fe67f5637bd80df5f23ba76ef07a2655a0f188b5e073fc767fe66a4610764182abf50410ac870fc3078a1ec21e52da984e9a08d8b
+Entropy.7 = d7c7dd4af3480bd34e28366c21ccb2a03dd7015817a69de1e7e4388fe9e88523
+Nonce.7 = 3452fe913fb5177cca02e65d991a25b6
+AdditionalInputA.7 = c4b1de6ca48fc3332114ee93f1734f1ecd694cb7e40f0dc9ae770a8607b5df97
+AdditionalInputB.7 = 835df8e83f7a03573946e21e3fe58e6e7906301f4493b7f682b84e60af680c4e
+Output.7 = c0162dd685dd8e73a586332dcba95807e45a3682b8908f3f211e24243b50a34125f988eb442d52e09f003cdcd4a3caad2017541c006f0a79909cac5103d4fde05fcd2b58bf005afff016ccc310d5a85e4992beb7b8356ab4041a2de38d0981c49dc00cabdf7508d73c92bd68792bdf619e1d735bce469023eac891579e08b9f4
+Entropy.8 = 741ad501296d3f18680655d5ff88efe7db6e917af6d26df9bd20895a70381d11
+Nonce.8 = 8281033e701a290c81edee11571297ab
+AdditionalInputA.8 = 90221d164e9b0db5fcdd9e48e0515dd578a837de7897055fee7b8d83887b3ecd
+AdditionalInputB.8 = 85f8198b9258b2855286c1327d54062ff733c0e5a9c3a6f9cf2a2c85e4808779
+Output.8 = d7e7f32d8b6a82c071094879d15d12d96c3ac653fb555ba6946a11664d01a554ed82c0fd550e6b0151cc3aeba5768842878c049f2d2e2dffef1d5efeea2e27e76925e094c7091edf885c14e9700d46000f2959abb7f2f5d29886d857a18d74000f91bcadce8212835379522083ecd5a76a157bfcf9a7c822949927c3472c30d8
+Entropy.9 = 561a4330c56e459bf7fca66a3ae97be126fcd81f56b497d4f0c03d45313515fe
+Nonce.9 = 8e0e519bb591cedfb5754f10757b4a2a
+AdditionalInputA.9 = c052616877a19a2447f447bda00933695cb17ae4a983eba2455079e7505dfd54
+AdditionalInputB.9 = 1a77a9fc49455e6a7f267e3720708f2b8921dcc6b672b58bb4721b1e356510f2
+Output.9 = 50d61b225bce39edd2fe26d521fb0b7254e9055cb08dacab76dcd3f2baead3b23adf875eee062bb37216dd7e94718797ff1fc90a1015cbeed501375a48a24372a067662b280edb96386cfc53cd437c3c016a03f2dafeb4c39e7f340f991b7796b081fdef69cfdcac950f81b93a235b31713fa9ca05398c70e8811bbf5979d749
+Entropy.10 = 38434169f568fb1e1836a62c85631acd8f5be3dd64a09f6f2309c777398d4c34
+Nonce.10 = c7fe254cfc90e1913be7df63b7ef07bc
+AdditionalInputA.10 = 6a6f43cbd8d228c1e14788868b59f68deaf5f77c6416dcaf4bef267a79266a9c
+AdditionalInputB.10 = e06a05f1f4e9f29d17df2fc030a1abbf85c63530726d0f76dbac51f535f0ce67
+Output.10 = 15c039bd9a7626ca6426f763ec09e0c0ad166b56ebef62a4b4392f272610f96df95cfece3659a24ee6b1e403556e0e30e2a065986fddb111542ef49b0eb2e15f31ad14cbc4dbad5d2abadd26a7007d18bae0d916fc33ddce158e97133490c8bf6337a329e581f1992b10efb9859667b083cda53af45ca784c374197f751be856
+Entropy.11 = 8311a7cc5af8b85c0d129552cffb9ed9a172c0d9ecd6a3cbbc8b56e8f14bbd40
+Nonce.11 = 57977e3d5cc96c26c177b8a6e969362a
+AdditionalInputA.11 = 1f86c630850e2bf070255c511e4edfd0a63ddc96bd072df784e550a165f58b3c
+AdditionalInputB.11 = c1f971acbbabdf5571c90905243e579193d79c259d570671b87f71652cc85fb9
+Output.11 = 3ef4cb4fcdca24583810ae7e892b790c03e370b3fe6627cfb3c1b1096494c0d51e264e5cd278e1faa915726718fd781d961ff9d765057b8c500793602f65e01b52039b61d881686af9a47feb9425f3842ba821352b66a52c60fc4be92d6b9b20cb1d04f29bc5387f941c6f1db60986d901cb4c2a95a3822b247519afe2851fef
+Entropy.12 = 1c3d1f251f06a6d0c28e2a25e72f5c5cfcd41e18c73eac703fff701884fd9782
+Nonce.12 = ab94d19358ba74042ab5050ccf9be51a
+AdditionalInputA.12 = 5f670e2e7714f4c89242a58544e674453b695fc39d779894b9caf55d9631e063
+AdditionalInputB.12 = 827fb33374e4815e0771b07f590251c1d5ca5a69bb235ea2ad886f2956a8f751
+Output.12 = 0cb69773c7c34c9c03bc678f33ed6e74da3226b43f5e8a4f25515ef723886ccf09b1bc07d468752d846f50244d86ba25ddcf8995d645e7c2d086689bb08bcfd52a983b0973235699125b21cd85f4f1648b21b05b0e2e7eded2ec5864170de8d0b0de46611270c916673f126ce59931be6692528421415f8d4a8266714bb04559
+Entropy.13 = d6c7079504c53d5fcb5ff68d6694e6168e8ace2d6e1516f89a0bbf0483c359d7
+Nonce.13 = 011248ede6a732704a05de2388764f1a
+AdditionalInputA.13 = 4a121966c13a5bfaf4bed25120bf307010bc1bd3112b64ef0c00f3cfb2d25644
+AdditionalInputB.13 = 2a57c3cef57878a846db8858449939317f4c5767ec381836fb8c363a6e3abbec
+Output.13 = 8530e5eece0c0844a18a5f0e85cb10ccf5f706f3fe21ebf841412ee432795811def6fcce30303ee764e3411ed6398b6764431736f53c6dc5fdb627c5d6392e47d20f15ac39128c1fb93bd117f2fa13cc76351b1d01cd4f87b35a3506e0002679beda64044947ec92a1ec5e8fc761281e16ddc0cd43b48164b2eff7796fe3a499
+Entropy.14 = 7fa0633aed9d622d26ab60779879c9f3e84aea2313f996c9558f934724db2d48
+Nonce.14 = 76cd330bb81ae68860d2abd0c7bb533c
+AdditionalInputA.14 = 8d72118578abbd90ddbe6115ab10b499afa26c2360eaf6fa118ba590ac6717c3
+AdditionalInputB.14 = 6ca4d45fcbd0c7e964557b2bd7622a528b4722335b47383f7bca004b7cd5cf04
+Output.14 = 360d9ff3111c6b713fc641b571b582770991885f2fea806a485006a1b4f41ece4ce83dcabfd403edde77780c044c96e85ce5d1f1a368ad881a64be8c41e87f0a682ab67170ae05a24b08b4a9178d13ac9928ecb3b5e23e745d93aaa5f111c335c77cb9a5c3da8163cb428fef60da737b884105ae57616637b0e40bad9594bd51
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 30197171d85c81d6526474b43cb5efafeba746119ff10ef2a96d9b30f40a354b
+Nonce.0 = c634e60d27088ed0cab663af404706bf
+PersonalisationString.0 = 1f0977ef52e535260e4f5a0d749fc6b2e9752e0f10848ba939a8b1ec3320b333
+Output.0 = af1a3ad8c297300fd1a7e32a2d306f8265d287aa9fa1e3727b60200ca8786bb2e4e4a44cdd9e12ecf396fbc33d067c8167e202c5a524d0701b30be08697ec431dc497473046a61b69e3becb128c23d857c5f17442760eef220102d38be11e21fb4cbe5398267fae7de5aa3e29f79c30c70ee39a7c06e05874e7a2b8c1735d6ee
+Entropy.1 = 455f4d93e91d45a36faf6bbadceb021f446852e8a2228b5934972073a131e80b
+Nonce.1 = 49e1804270f15512d811c74ed9d5d905
+PersonalisationString.1 = 50b1bd2d3ba3be6d048e069cc8969ccbe8ba3b0dc7273ea0cdeabd5a779f446c
+Output.1 = b594d436422690f2bd83d304b5333756785c4851062f47e43f0fbaa89dfd0ab4a94faf7cbba5541bbcbcc2008aff50d88ef876c12dd8364235fd41240cb7b0908f980244ddb29194d06eb389960311396aef4e0641d95e9c26796fd793f15a51e69911109f41653e9738c00dddee21960854202743b9362a282f2216a43bdec0
+Entropy.2 = d10486ae771b1fffe1360ff70eaf5264272fb402162af835d6fbca194c4bcfbd
+Nonce.2 = a269686bbfd9a3031da2fd5421da5dfa
+PersonalisationString.2 = 2611bff5b6484e76641625a1887b4844098fdea0ca73a65bf6aa89aa0e5fd15b
+Output.2 = 6b44ef05d0650180b94783bc33c1c7c664e69ab5466bc24d6ef44ebebee15f7bfc22f42b34980aabefc737ed456fa903f651e73173d64987b7b2a54d8b25fecb69d74cba837aad4ceb6738f94a13c7eff800115b70b3e242b8ad46cc0972269239eb68d7118bfdd99bb1c4dd95f24f8956cb802a0c2cefb6b02ceea2c0a05a1b
+Entropy.3 = 76bc1536924130b36b83328f40adaa1f8fea9aa24809e2f1b1886e8421ac5a3e
+Nonce.3 = cafb00f40e590ad87c2f9f1404bce230
+PersonalisationString.3 = c6a45da5b04af67d0d1f5dfcb388e8ba51e675aeebea1a18578f51b2e7ff4fd7
+Output.3 = de051ac87331749acfa44341740bd5f67afab1dfc67ea340610a70900d049171ced410ed4d6225c706f0eae3599f399c633782957f93eca8f9b0afb94d342e8b8ee8b27fbb3467b75eb9f32239516b0a3dc0b8d0794f05abf149d7db416cf52cb73a8f97b6ed578e654812e514e6ead5a5058d8b57b704a8cb6a7c243f5f5e26
+Entropy.4 = 4a207dcf464ba938e1e9f03d3c4990702481cac85e3c831d74c0ab1e718636c6
+Nonce.4 = ac9cbd6cd10c793d450c2dec09d42c30
+PersonalisationString.4 = 7620cf6a8828eeb4369c5f3841466d06b7ad38dc9de90293307b57632bf43def
+Output.4 = c4ca1ab0ad257e3de0879b4c8f4bbee4e4b22775e0f1709b8f7b1b30c962a6c867a8e49e1a7e8639c8d1510d51911f1b6dcf5c0ae42ce7f860954c3e954dcf20d0f56378ceb43ca4949deb4b7d8b287da600c6c31ff45bacc2f75c106734a0bd810865ce5d9f5d84a15fa942d271aad26d6ea9b263911a915715b0475e151102
+Entropy.5 = df8aa843e8a06278e1ba51f529bd108e90ff710b6d8a0b957f63ec364c411ab2
+Nonce.5 = 1d20f877693716f5b2fe8bbecad9fc06
+PersonalisationString.5 = 509a42718c5d8f24ccdaa6a546eec3bce0f8fe785bf3c72146024e8e7c122e09
+Output.5 = 03233972e3378a35c76171ff5847d111ed39114455b1354aefe1011ccad284c9e8d3dbcbebe7cf86e82387c0c025682887350796f080cfab3422b0e9ded3a60f274388a0757e32358f97c13235f01c803eddbb0bc3abad143dd050bdb0086b97f57d193a44e3d6adb2f0ad0aad2a45879ce13eee25e5615a39b570ecbe673348
+Entropy.6 = aea9f1ab7f2a7b176f76a1d114688dc3a692158c2ba4fca7fc6285477fe8e6c1
+Nonce.6 = ac2a7d31a95908a556bb7c75ceaa21d9
+PersonalisationString.6 = 78bac89b1cc0c21b32c2e24394e9385028c0986d4639b34130a6983a39010240
+Output.6 = 2dbc34d5d949d830d0684c8a21049bda78aab9068f15be81551a5961e6be5c3dbfb3e8fdbfe131a72e69a2a68ecbc9b5baef8fb7c75ab1383c04aa681aeb5e170219ef60316d70d44076edb6e1f8dbd6094f4c7befad0138c6393e8f8363fd708efbc9610d6b1ec1a3d2bc458bb56b6a33960dfdfd381f1f7e4626385c7616d3
+Entropy.7 = 329cf7fb5c8905b7ed6a805eeae441318fd4f793c50c14a8aafd04d476109539
+Nonce.7 = c9ad01bf21904253b76426d94634ea74
+PersonalisationString.7 = b79f0ea558c4dd2e42bfc592634a92d51ef6c13154a6c1eb51c9d08557a1f6f1
+Output.7 = 3d23e8d902f844403f15425d8a177d7e5bd7d337279f12e8df350459936d7fc86105a5f34c573c0c9554ff9ab663aba74c36f243a8f1770f80bff3f15776aa7db7815af6e9354782c0d02375063345a58bdcf4b838124cee8e810cf75430f9ac54ac5955fb7c79ed7c6341606e82138c131e6e1cb9ac6e0437bee5da68eb2c66
+Entropy.8 = adf012e2395c2d53e3a6e3e73a1d5f83afe1ac065a75f6b20b45db14d0d12734
+Nonce.8 = d729499703a5fb90f9b1d6c6989aa8a2
+PersonalisationString.8 = e97021e3b7f72f5c6bcd82e654706e83fb409dafe4dd98f704f03c6338d6d24b
+Output.8 = cebe2a94bdc056224498fd95cd3ca676997da94839f3cd0de7a3beb0324ca13ff269db8027d0bb01daf4dbe55ceec325d34281955f425ab4edaf311fe85853130144c43ca1c42502c921d28a7b7721d32831c34d2ef9b9ba8dcd43650025a95afea2ab2731fd43fe9781835caea31a5cd178935f5a8374ce78a337725048cca8
+Entropy.9 = e29de9b2c5e069f3fc29339ac517e70d9b9309fce6076551b9e5f016567641c1
+Nonce.9 = ba666331b85bb6d8a763df9d30a6c6b6
+PersonalisationString.9 = 67abf3319b242035460fbe09bae8df4f10600632a19295131543d270ba45335b
+Output.9 = df4fc7fefe67c4b59d29cfaa6538d1d6a7acd4ed0b6710dc7a98772af519b2d563a0b4840353e987606e32e02c6af4a43f25404ff4d3c98631d73b6412cd4c4f9aa13e3ac7decee2e4a5180675e04d6b34415dc9fab1216dcdc4ba219e9424d6c935c39fe4ddb9f5b4cd9ed40315b068a02b9c20fca9b898c5136ccbf30bdc03
+Entropy.10 = b2ebee204c7165dea375e9360f308be3ccd3801a71255e0edd1f42ba3ede07e6
+Nonce.10 = 486cb1ae920d332847d7019e9fc61611
+PersonalisationString.10 = 5f3bd6d419778e63caafd45178888777efd7b484a29e9dea30d450654e01e83f
+Output.10 = 40c271a1dbd1dd069bcea65d9086b6b2723472a9e9bd6ec5e9ff479e8335e04d3cb988b0d0ed6d5b8768458a2aa1cf5d94a96b2c824a0690376b87c9dd8946f62699406e8fef8d5a997be8e3f63e815f130786cd5d4f3e500dc782263145911c6e69ffe406ceeb3e296594fce9041ad77a5b005158caf3617b8fe3bb0ae8f2e9
+Entropy.11 = bfdf29359846af38a24267ccb68bad50858b8b9ff47ed5fa8ccb99694ff9eae1
+Nonce.11 = ccafbc9dd71255d1ebfa76617642d6d2
+PersonalisationString.11 = 71e50feaf0ed045972b44d80b599a2087fe250d266f1129e821f54b57d99ea18
+Output.11 = 4988a75a728f9e89b3d68824062ba03f3bbc1fd651749ea8522de4b466f66f35dc202b2d87b8b05671cfa5dfa79347e621941bdc81329c3112bd520337ccab5cdddd2a982abaef5619d076251f5ca0b5e4550559ad0884727494105b40b968c071c3c506ebd72532585ba004db7c9eba61a0e30f2ee2aab8c5e5de1ff44a8731
+Entropy.12 = d10f709fc7674fcc37e77b3214308dce6c0433b4034edeae098564509688622c
+Nonce.12 = 63c3ab9f1b35626ce98ccb72ef3ad5fe
+PersonalisationString.12 = d9ecf8f8e9f3bcab221cb29dba385737daaa57853bedda0cde26d61edcbcef3f
+Output.12 = 3c5fe9b3caca83b59cbb33dacd55fc05021bd648dcc89c39226e0b6c81ec0053d99c4a68a627b41e62199de3041ae79c7ac46c7de92cd26643e5c472ffd1af0262d10c7f527aedd41e973f5698b9254e9883149f6041ad8b21934069543b408f2a66531d22d469144e945a11259e9e464f96d8feed8bb14badc11ac942a7dcd9
+Entropy.13 = d74f66ecb33efce890c4ee4aaca1d3438d82eb65ea46a137d0d42d5be4b13f93
+Nonce.13 = bbc9981a2959721c7b439e42e00c1aa5
+PersonalisationString.13 = 91065f0c37c28fbcab2c1a883614eb8889dac50f53248834c7d5a3c2ad24d0bc
+Output.13 = e1c36e42016a1b38418d6f93cb6816cbae186679a4259369576b2b466d66efb49c81e611550398208a793d19f082fcc0ffa2567693fc63a6534028f5f707faf029b79d6957f6aa613a2462dde735cac2046d000817eb59362302ab30cc69c658a2e975f18c1862d5d0f41e7b1171fbb8de215f176afcfbabbf8c458c444a176f
+Entropy.14 = 6cad4deb8e3c18f4f4265d845237bb0f9760b379292e363d5ce8e5bc243fb2fb
+Nonce.14 = 50f723edc4f658862758e149e7ae4f20
+PersonalisationString.14 = 39d43e627ab7c7a6d12fce4cd8c001678bfadd9d07d4086674e5d8bdef4ac62e
+Output.14 = 02e68bf3f78812aa270619b307dc0e57b05b8310084ecd1914a67d93b77127e0b3ec40e359adc451eac8788ac708fde70575fc1b9bbfd291bf5b8d7bda7bcc23a0271ba0bb0e6d617132399bd6cedf5a9a683ea98b3b0dd3bc6d811e4f66c9ec751012992cf54e3ce474e09b31ba9c01ea231d4fa8f09441e204c4d3285c78d0
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = f074a8cf417a9a4c4aade25f530567fd7a1410a074f3b0edd664bbc430ddb250
+Nonce.0 = d3c0823b6d28a42d5f0fc01496d32859
+PersonalisationString.0 = 972527fe90601de9d13a050c7e49d556d0de6b0e75e0619807ade2178eefe47d
+AdditionalInputA.0 = 0dc678372c9f24230d15acd1d36b13294c58b76f2847397fbc32dfada12b8e51
+AdditionalInputB.0 = 59874caea33944638e1e11fa3626fa2bc26d4502120c17e0e198d04f9ef0ff95
+Output.0 = 79db15ff50059ce58dcd44553f5cb6a19554cf35d2b64c869336a797cef93b24c64b716aaa11cd82dca0143279ed7cb2698d7cd726241ca17b5ce6831b08ae84dd57f95b11c07f7fef1d381eb0b7fd535b902ccede73538155f30100fd13ff007806b367f5032561338a92541f441725eab17996dd58e9870025d98b4752b547
+Entropy.1 = 9f5c9900211626b17c06b5539432f6c30d925e222fc1dcc466cdaedf1f727c31
+Nonce.1 = a1e46afccd53e814f782d147c82af202
+PersonalisationString.1 = 92d6864dfdb5a6382de645eb55c243192e828e49f5322e4a769bdef2bac063ac
+AdditionalInputA.1 = bde8ea0bdb9e9deaf5ac5b8f01f23eaaa1f6ee439d477668192e2d53427251d6
+AdditionalInputB.1 = a746193e4731f565a4b9eb0d9a9d8acc76c7f7d6838de3ab758ae8936257a485
+Output.1 = 734fda58d20881a190d29007c82d5bea9af04dca8e916182e3cf1ccd07d4aca11410a92643325d85f63ab26a791dcd3100ae814d2299c6f6afc662d246003a4975b85e0d032b0c8f485b4a3008df9579d5e2f7e0626923f46bcbe5e693590359ad67d5a45b0baa7c77bac396d66081bfda6b7bb71acd5a6b489812447ae63b78
+Entropy.2 = 79edb0af741348294208242c92b8dfcdf9e99fd20996b2b0825a35af7fcc177d
+Nonce.2 = 3a69da52b49809c566876b77b13539a3
+PersonalisationString.2 = 5f1cee7ff01c5fe1d182ab7c4bc7bf84a50f16f0fcbd4ff08eb13c2e3743965b
+AdditionalInputA.2 = e6d9361dc5093a8c5a0ae402811e166ac006f5f6408b5209c8de263cdc268db5
+AdditionalInputB.2 = ce7b94831a77ac8b37118fca378e90d786a767337289b3a83e7f797148cfe223
+Output.2 = 0b9bca1a9601da23e903891753125484532172b85d3ed22c1695349a7cded86f374b1339398208e07ca63885808c5f8f775b15a379f9efaf107ec5ffd9f763a0ddc68c54e612a89ee864158d3be45597671ba766acf2c47e8c96ccd146eae4c0ab608c4e8ad5c63b0a66e3ce6156a05ad63d599306be4831107151c2cfcf8476
+Entropy.3 = 882dcaeecf17349b31d7bbbbbeb9c85270b705b46e7a5b60519d8df30f17aff5
+Nonce.3 = 46e777807732a55950af791ca1ca5fc8
+PersonalisationString.3 = f771698092ea1cda1c6c232d0641bb76886c6df8ebda39e95c7f573186f4cce5
+AdditionalInputA.3 = 6c54bf9fd6e48c609846b8a6787e7406db2610b9838599d361be009842301c35
+AdditionalInputB.3 = 23b208e7c5319cb7b37fb8e84638f684d5323779a7f4d3518939f95b00d93705
+Output.3 = 037ab6a81bb8b468ecd17d6d09196236df1442ee8c61cd2734873fcf9a7e56d95e86ced82b1bc8d93e67e33044fbaf67fc389d4f46612d8b6ea46468aac3237607403ee3f59632c7a0fbbad6f1fa7e66463b969e6944a33c56a8522812aed5bbae582868820576d90cfc6e80c159ea1a7802e367f674d206bb950e8ecdd2baa4
+Entropy.4 = 11965cda20767ce8f8c5ab4c9b10cf589324c3a9d6a277d27d9c5c4c93c6517b
+Nonce.4 = 1798523cc23aafb99a554b24a0d5e45f
+PersonalisationString.4 = 566d51c543e9cf828a659200862f1a2a4994009a58ebfc8f303b0852e7f53343
+AdditionalInputA.4 = 6458534c476ab44c4e742a8de3bdbc576b45a880b1bd1ef97c99ce33636aafad
+AdditionalInputB.4 = feebef75b94448968acb6d79a3830c7b1eec03838bf623c50070b9a99982c83b
+Output.4 = fc6be50d4f8da8be8dba73b5e6286f9cf8fdd6fd686e84b03ec5e1bad1dbfcb190fe333db6dbf72babf0d9cdd5182201d69ded39451f8910b01a33365e37ad8a71a40f5ce10d2dab6b06d134f1f3130567ddbce3d2bc17931d60925b8542de1a0a3b1b2a4e2491dcc18ebafe4e095274c491d09cbcd90f7790274c5ec07bcb33
+Entropy.5 = 9c0693df87f400f82f61cb47cfc2d672fe41e1cd2e17418ac1d51dfa4d8bace1
+Nonce.5 = dfefe5a66bb369d1e788b72a860b41c7
+PersonalisationString.5 = cf4bbba8b2427117775663f84c77bc37160ec54e68c6aaafeecc967206a37b54
+AdditionalInputA.5 = 122ae7294c193b47c925ccccae778772355fc621be037973991b429c8466a2ce
+AdditionalInputB.5 = bf5a7c27b41bd872e5cddefb2f606aa836019d5c347950960ad9bff41f302f0a
+Output.5 = e3dad2408c98a142b27659e9c7f0ee269d8b0cd8caa62a5e6704ae2c4c908a19d3097421ae6b6d309a4009181a14fe083451ffc9bfc31ec1b5ce33a0d3f4ad311c2db315924667024b9d54e1750c2366aad08fc9dcea9c043239212bb7263fc86ffae6113aa9451fcd1be848fc781943ae014c13e28a66b824e32e8926027bf1
+Entropy.6 = 5dd98a23c155939634161903f2b3da3fc31a18fc1c5acaddeba1fd08a08f0faa
+Nonce.6 = c7ee4ea3efea01a22ceba03f86e323c8
+PersonalisationString.6 = 43501b961a81bc4458fd9dc15983f4aba6cd9a11600294a2bb8e0518d2ef5a6b
+AdditionalInputA.6 = 7d146d124643ab686e9bf2187b88769f2443d6dc16fddfe413f9b187aa2e6b8b
+AdditionalInputB.6 = 6dc7b364bdc9659e92b7b935432519bf44906fc79c3e178e688d98d7f1c78a55
+Output.6 = 48ccf3cd5a7250191a9644a76b42a56c1a44ef05e32cad5069beaa74235e6e79c279a555257c17ad939e00f813a4571839d20d14004f18ffba309195e729e51d09840df3da1590a765791c8c9b92016ae861216f61107426860235f97cda7cf390aa441e504f386d3fe6b2f0d30b11a794866ef180745e0f0f42c0e74c16edce
+Entropy.7 = 0bcd80d942263c3372f8f4257ff5d35bd564a12dec0c7e8fbe1cd1521e26875f
+Nonce.7 = 41db7a98b2be3678a76ba981e44767b8
+PersonalisationString.7 = acac5ec7e76ea7a7a770437d77ca74ca9e364b20fefb02be3a3c2811c026fed2
+AdditionalInputA.7 = 6025b0b767745acdc844877b2b1b0bd669ee857dacc9842d5735ef734060d18b
+AdditionalInputB.7 = b41bf3892a914dc493098c74059517ec5506302fbc01408c0a0f3e7486b54711
+Output.7 = fb4031b08172dc6bc1b4957e10364e622ef2b86ff16125d31f8dde69cad49fedfa5d6f45adfb8242b374e48120405fb984f6af9fb4b53dcf2a78c6d073ceaf8136dcdf0b26ab9f7f32a3dd5c87d09af57d51658fce62258324a0f7481b31b1f423621e89301c728144d3edd91b071f199a4dd9f2ea4d72c21b90e833cf848c92
+Entropy.8 = b2747fc3131b61d2c3c8e6d3e8807ee1dbbd0d0795c1b8e2253232b9dc4a4c70
+Nonce.8 = 84e66ffdf6040a2ed22e549b688f14e8
+PersonalisationString.8 = 3ff1b7307b93a2fb6fa87729159e39e63e3f1005e056ccc09a50deab679a8d23
+AdditionalInputA.8 = 70c27cb8a98da217165e5946a4c1e5764b8f77f4f3c5bef85c2d150f8afcf664
+AdditionalInputB.8 = 0dcaab2b2f2b51d74a1497da0950f40ec41eef100273519ef2d305bc1bd4c1f2
+Output.8 = 3196508c7f7fe190613022ac30266193dac214ac4dca2456f33ac717000499d4afb5a336642c79d187dde196d1cadf507506e34ff8126cc065f024bd8b2ef70e6613e55a0cb9a1edb0971eb3bd843140bd84767b582561c27ca65cdd06e6e9360b9c7a4a5cf7fa2ed2807142af0fd4e75afe124de44ef9ce7782894b47a5c53f
+Entropy.9 = 79c40f253a2265a659f7c127904df1fd4851c149df7820f6d82ca8f886f7ca82
+Nonce.9 = 2066ac2491c6f46f3f6845ad64987aaf
+PersonalisationString.9 = bb3cd677f58abb5dc58260547800a101413f6526f229b7a9bc707d4e0fdb9447
+AdditionalInputA.9 = 3ea9d3f993c25a2291d0dee81434353e97f445b8eb21af2482024ce83100a1f0
+AdditionalInputB.9 = 0498b70e31590717779f9d8faba5c86cbc6814c1c7aecdd4487249901ae43e7c
+Output.9 = b9d881038b23e35fb23bd80c7354cbc96e2be971fb38ac478702ef904789291b7b6c1002548df5749e78ab495623527967e37698b84090259ebb06bdd47848d4240591396ccecaba1ee19e3b8c9245d36eaa72a070ffa1b3f5a84071ed664d567715139974917c7929a18a12d0c14058538a38c488c9c4fe9eaa95a412301684
+Entropy.10 = a5b77a8e17178ff701a35996ed4f55d952e4418e5a348eab4ac9703c6011fa3e
+Nonce.10 = 92ddadc8c640b32f840863a5eafeec4d
+PersonalisationString.10 = 78286d39fc5180844e86a24d675e583514b7cb83ec691f537c5a3c79c73ed4a9
+AdditionalInputA.10 = 484bb51214755c3eae593ece170e6ce0149e76040833d8dd4d5a9def84bad047
+AdditionalInputB.10 = add105ee47ef06f5d5bb01013a349170aaf2d5f7f5d5ab811f3b677050dbecaf
+Output.10 = d37a8eba004f3541308646ca57c15cb75e7d0aedb56b7bf59600c1e3f6dfbea78becf175b5e0121e096de9d5654322c0af2db301bc0acca5cdfae5122ceb9c79cb9f6dfbfa37731b2100127452541c65d57313e25619b609fdde38eb502288cbad874f8356e67ab7c217b513670f600432513e234d2b4aacb44bc417f8deb857
+Entropy.11 = 1a27c3084aae1e055174e8bad8e8366cc1add1a14c74f507ce849274332b003e
+Nonce.11 = ba672516904ce5e8c975d7aba6059228
+PersonalisationString.11 = 6e28f38655ec1275a61e5cab038e3383bcfcd59674e02908daeb008213596b35
+AdditionalInputA.11 = b216ff71bd86ef02f4234a08a8eb8e75a1acd20182fe668ff7503249e7618aa1
+AdditionalInputB.11 = 2bca751093d5f73ae3097d84c08872a4c6a0d31c56d6b10b181ec21484b54021
+Output.11 = ad052424dd5139802e198b6eda26a2eb6298b567bbbc831fedb8638815d2b719d12fec0e2a24de8cdde0322ff930110b10b850f8af9d35f0883bf9fe01d14e13c660fb9868d3476fe5b110f486122daa9b93a760c75a50a92d6fe742250868eeccfdd0449bcb5dc2eebcf6859b703610b5431646f2f1420b3691528c5193d5e8
+Entropy.12 = b5019df2c59490eafc352c76418aa5d04c253427b8cab96b008d21a2dd9bf532
+Nonce.12 = b963166dda387bbe831798a8eba4368b
+PersonalisationString.12 = b0c6a491682245f21ee9ca783559bed4b499b7eda3a789bf209c9e2ca67f3388
+AdditionalInputA.12 = ea1edbcb22877f45e3a285a5d8a5890ce8768f4ce2d9ffd8c95635d4c0af50bf
+AdditionalInputB.12 = 98c93e01ce7ea9e64a604c5b55c61ee2a0e482d796bcc388355e06f0f42888d6
+Output.12 = 8755b0aeaa9a2050e4ca9cde67fc0a57ff3f6657d02dced9e9d40a7cbebd6abbcbf57895d7b821b51f9b3efbcc4b19262fe013de30d309e1d8b70995fbcdb2ee34551688e819a6d697a15894b9e29012fe477f487b28c3b4e90a76c0f976c75eb6cd1f4b4d8b839891e0cffe1c6ba51f258dd83764c0cb87b3c39802760e0467
+Entropy.13 = 0f2c30aab056b778b82676c4e862780fe31649f4d1fcb8fc0cd7fdb76b27423a
+Nonce.13 = 7e92afd284532c2966bff91f67499d10
+PersonalisationString.13 = d68fb207bf5afe47051fa40f82cecfede1ee011cb7a5d08adc21b3aacb9a6553
+AdditionalInputA.13 = 99f65d454573f1b5d3b419efcc80c29574154650e0a5abfdfabe8556c18e9245
+AdditionalInputB.13 = 23e5a72d637af785a74c8c3b96d85ed373afc7fa0468f905c497f0f47c737c4f
+Output.13 = 0b42774734a3271975049deaa9e34c3dc2a601b169252520a8f56bb663f8e1638e81cbe2dbeb8f669dfffb8a8be697b2689ce90abea735a675168ca5670a568cea3b8a1f08838a5e47c4c7c77f94f3464fa7b46a478e323279d9e4f01b82251e252ecf93faefdcecaff4052cc10ed87f95413893e350bfd692c7008a3a9076b6
+Entropy.14 = 774804cb3530deecfc477e3f47d57039aab2f1a2dc133584a358b5d73c164092
+Nonce.14 = 3bd0ae797ecb7c0780e758c64ca0d61b
+PersonalisationString.14 = 9b7ccbeec10758cd0a3a8fdaee6f3989832e44bca7763f59e838c612521d3427
+AdditionalInputA.14 = 9ba9285889d50c27bdeb4a830a5b3120931a53980b30643557444718cb2d47cb
+AdditionalInputB.14 = 0f8716df331067b8ccf0e5b90ff79dd0f962acc69fc5f89c593bbb84e3501ae2
+Output.14 = 9d2c0053a0fd3f9be1fe33db214f6f2d54aca573e0642bd269f1b1ca23c42a1e85c73449830673cca14feab4d2686814edbd90c325e0fbcd5a2d7ca75334dbb113a13a0bb4e838f6724c74dddfca8c2bfb903c362d3ea82acd60d01749f6dc01fcd6708009a58ee9cc57a0d089095efae66aaea68ac247cf6aa8808d1038a109
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = a1dc2dfeda4f3a1124e0e75ebfbe5f98cac11018221dda3fdcf8f9125d68447a
+Nonce.0 = bae5ea27166540515268a493a96b5187
+Output.0 = 228293e59b1e4545a4ff9f232616fc5108a1128debd0f7c20ace837ca105cbf24c0dac1f9847dafd0d0500721ffad3c684a992d110a549a264d14a8911c50be8cd6a7e8fac783ad95b24f64fd8cc4c8b649eac2b15b363e30df79541a6b8a1caac238949b46643694c85e1d5fcbcd9aaae6260acee660b8a79bea48e079ceb6a5eaf4993a82c3f1b758d7c53e3094eeac63dc255be6dcdcc2b51e5ca45d2b20684a5a8fa5806b96f8461ebf51bc515a7dd8c5475c0e70f2fd0faf7869a99ab6c
+Entropy.1 = 067fa0e25d71ea392671c24f38ef782ab3587a7b3c77ea756f7bd496b445b7a3
+Nonce.1 = ce6acc722768ca0e03784b2217bc60e4
+Output.1 = 16eaa49510ffad8cc21ec32858640a0d6f34cb03e8649022aa5c3f566b44e8ace7c3b056cf2a44b242de09ae21dba4275418933611875841b4f0944a8272848c5dc1aad685935e12511d5ee27e9162d4bb968afab53c4b338269c1c77da9d78617911ed4390cb20e88bf30b74fda66fe05df5537a759061d3ffd9231d811e8b34213f22ab0b0ddafff7749a40243a901c310776e09d2e529806d4d6f0655178953c16707519c3c19b9aaa0d09fb676a9d23525c8bc388053bfccfbc368e3eb04
+Entropy.2 = 9f76503e84727297bc7056c7af917a1c98baa725295457db4fcf54ed09af7f15
+Nonce.2 = f39c46142b85a67b4b323594b7e97bde
+Output.2 = 7d6a8bc5a7f057ceed6109bfac2486f80f81373b6b31d062aa1fad6d9eda5874867b9ef007ba5a92ba8f3fca624bfd9f7ee5770bbeb0391394fef783c16a7f003c06e5469bab03445bb28a2111def415d162e40472d3e5ae628c5c63170bb19f741c79a5331c883c12bca429f518bf71b14683a071b6c6e1e55d8c7a0f3942bc12a103556c49ca173e498b3b4a15027145cdaeb195bc8a7e1aa82ebdf6ecd516481a4d21f400d0d71b5894545888fee8beed80d3251647947f5abc4735b47fd0
+Entropy.3 = e242e5b3b49d87289fe02840dc742a2a6cd9490fe2cce581833dddb1edc0d103
+Nonce.3 = f987f5de5c68cd345c81b032ea55f36d
+Output.3 = 3a858345dfaf00defdf6c83114b760ef53b131fbf14bcc4052cd948820eee78a11cbbd8f4baa308e1d187fced74cbf019c1080d9efffd93fda07df051433876d9900c1f9ad36ea1cb04989bb0c55fd6d01e46923f3bc8887ac00ebd4710212114165355361e240b04232df55a81add3fb363f0d4c9c5e3d313bc7caac7d49dca8517cedacf571fde9686ae93d901fb9b17097a638bb9899cfab0ebc9d1f8a43c2eed7c9f326a711d0f5b9cfc5166c9b561824cbd7775ec601ca712b3ddaaa05b
+Entropy.4 = 42cc17365f5ea5fd22bdc4ade715e293064d6794d82bed5b77c4c107a73de1f7
+Nonce.4 = 6d759e4b191ba01e0ed5dea788ab018d
+Output.4 = de06dee8c8fe453aa03ac2546c39f5cda12412864d52ed5cbd0d4905dd226746d50d1af9fd3e1d90de0f16295cb7f6f4d3271ef00564709df4b05eb9f8adc0f8e8522b05b9f32c37d8526813898b9f71db57fc8328e3b79144482e8aa55c83934d6e097e43ec6d0bc32edaf8c0e6ca449b2e8388b32b286e2d4f85266b0605fb99d1a647565c95ff7857bcab73662b7218719189d792514edca2b1d0cdcd9b6347e132ef4c323da24ad5afd5ed6f96d27b0f879288e962fa0baca3d5b72b5c70
+Entropy.5 = d57024a230b825b241c206f7b55e2114461ecc9b75353f12ac1d9ad7e7871481
+Nonce.5 = fe401c320f74afdb07f566ea500b0628
+Output.5 = e8930bd55a0a5a6d83a9b3b2cde7085c2ae467ea4a2e65ca303697d492ca878bcb801769eb1b7ec564586ec8b36d350e192c4fbf03a98be0ddecf56d465914ba353ed7734d19a680fc4593d9234c4ac8c23b7dfa1e26b013f590cca43b9fef126121b4842496b11dea3ef5e981cb357341f03f92a546a62609236ded6f7d814456acc0596d555cbdc02cbd47dae2caa1897831ea464225922c6600a8bb92e711653067f83b21e1df054309858948c11a1399736fc8391c5b0fc35629abfa5650
+Entropy.6 = 059ded79125b2d56d9d52bcc950bf608d1a2373515dafcc81efb6588005a5722
+Nonce.6 = d8f5f4181f9f2a316c93fdfbadf50e75
+Output.6 = db65d2000632c3d7009c227e99c210e5897f4d7edae608a242b5a4f17708613f8c19a4dd65d6bc3ca57737c9bfdcca068288eea49440af768d1fc977c32b065bb71aa3d8c4d77c9e8e8a6166f332a247978a6c41ed253a1b68ad934a3416b40344a681de28638f00b0a0ffb75514c3f62253372f809906043de35e4805b8e962e5eb957f04212835f802b2c0b3e76c7cf239c89adf31909cd6224d542d929f9b20a10ab99a7c631e4e6188fe2ba8f552c9c88fdadb528679fe950431641b8f37
+Entropy.7 = 4630406b475b1263b6078e93e5d4282205958d94eb97d1e66b429fb69ec9fccd
+Nonce.7 = 0dd9982c338df935e929c42fab66adaf
+Output.7 = 5d80ec072f550981bcaac6787c0488cc470406249ec80f4bf11050630227f8b5ac6b3b369db237d7c24a0980dffe8d3abd9b64fd4efa492349bd4eb6902edb94553546110227d7de5a864ddae8b9fed8de9f0df9c596e39de903fda323ee6f788831452eb9e49c5eef3e058b5bf84f61f735a93e042bb9e458df6b25f42a6eb8fb03d437cfab757fab4990c721a757eaa5e9048208abbcce6e52f177b20dcf52f1fa551a92b68bcdb01680855b8f79131266378cd1f0c2a4141c9675f01d1e48
+Entropy.8 = 6ea9c6f784f12a9707ceac8a7162ee5381dc893ee139f8f4b4d93db266829db4
+Nonce.8 = ae92bc52ff860d8ecdc9fc16bd070130
+Output.8 = 234366f1591cfe244956f9496cdf446e0d390ba64beaa066945b1b4c5337dded2619dd2bd0133a5d612bab7c251ab79e3951cb134894c422553fc8cc7b3ccb29c20adbf52dda35af779142d7efc735342db2ee067649fda25f3e8a74f8e4f6620cf5a17cb943602609cafb85bdf482873efa4c74928cc0d69444b72aa6bc72694a3a21c6a721aa4e0fccab0a98aef375a37a3e8a15dccad13b6d70b3483581004642d879804aa00cba207b51affca43490bb98f67953265574366ec3829e67aa
+Entropy.9 = 5c13056be92a7f71236fcfef460298acc8595dd474310727f5ccb9a7acb2254a
+Nonce.9 = c7226f86349e20e2aca737068ab0f2ce
+Output.9 = 16d415eddefa4dc295a64adcbbcb8c6fe8c8f123c6b09dc08a56d723cff5978cc120fd0a68a2f4c202c220db372d3128ef52385d5786c12dfc6e60ecfc3461a09fa80453e2b1b6365eaeb4df602d192aacb25ab6b4a59689d4bf8d1c4c42a32779f62b06baca6461f154cf40901f5787c1aa2bf67cbfe7546ef5b2bdff20790d8c72d077d48c59c92d1af90a90ccfcdf643dd9d6cee0b1faf5f2f35cfd01d2077ced5e2d013ec1e09336dfab9d9e51ba9a3a2837306213bca2d79abf8dc3282c
+Entropy.10 = 38f08a099fc2d405c32d1e0f867e5450d5ee0d53783c31de9ddeae46d962999d
+Nonce.10 = a01f13a43320c715612cedb920cf12eb
+Output.10 = 079ce7a5b540cae96c2883e95acde3039048a6c45a2d259cc648639e7205392d91fa3ee080e615f1e0741a0e536c9e05844651b93461bfc547fb452fec61f853e1bd6e08eabd0cf1c5f84f85eca9d42b53d1e5bae51be5fd35189e4f1c02b843c6361fccf4ca6648bf30a23ccb8ebc16fcf158746eb39cd96f19d46707c001e11c4e0e8ccbc89fec66c69fc92843b6bb2ee1cc7595b65ba89ccaccd6130a8417faf705e8e203e90ee64ae970c409389b5cd0ca80a4e40b642689741691b20621
+Entropy.11 = 0863c868c32442a1a64095a71ab6ae2f9e61c119b58dfa4f34efd26593bbbf68
+Nonce.11 = bc407904c43300452dd4e61df47fa98f
+Output.11 = 585334828cf531828fc7127fee0c926f85b8e71e8522ea921296dc62b83a09a00397cd45e0664d0f26fa24edd3e3d8ecef8fdd77ab22431d4066f0efaf3882c97f179a7060efe9e8cba5d8145bebd502c0e09ee791231d539983c08860d7783edb58440d193ed82bc77c27723381a0da45bb1fc2a609f8b73b90446e39869a5af5038aff603b44db9771113927a5297fdc3450eaa228e313afe43c31b0a95b476c5ca312b4f589f809749481722cea9990c02b647976aa6c6f02ce1e5e6ea6df
+Entropy.12 = a41ad223e41e2bb9c131ec945ca310600ab00c51f6e4fcddd803bd9ab9be8af5
+Nonce.12 = 483373838894d32745a81ba9d6967751
+Output.12 = 95ca31a7eeebdd2348cf1d43411d2c35faffdbcaed4052d50cf92f0e9d2e757686b72d631a56ca98b68215e7014cfed943abc1e13441c1d660f13adf2188d0975154e1b42a592a62a43b57f82cc21a428873a92fda83abe420efb5233140e4d6c7852cf81e85961fa5c606c5f33e06077f414b0f814cbbe50cc606bffbd474364e608825fdaaf5e74d862795539be8697e2ce05d71446881e3f65bb54ed95e941586988f6e0c34e1beef426696e9dbd9a214013d826a8c99a2a686d8402c583f
+Entropy.13 = 62a26c1327c0ebf8b40691fb4c8f812e81f5474b0c7db70aa9424110fee3a05e
+Nonce.13 = 41c0cf2e87210e34d0c6bffc269bf2ba
+Output.13 = 6e20a00df1af37e6cc55e580ba21335111eb375395343618df7d630b9dc234496e3964cd45c5de34bda46a28964f6148704c30925feeaecae0574038434cd33c1dd943207a8dbdcd72dc9ecb76a25728b3c2a8ac13c1de3a126d7d43a46e12e0d0ca8991469e582b78ef6aa691b5a0e3e85cba7d7aea3c1e8e031674e85f5af36546eb2a0a28d4ffbaa316a9a6c944fce291cc0c235e8499882eb62b22b548ae07cf9430329e009f4443cb94f7a14e8661166b0d681dcec867205abed48145e9
+Entropy.14 = fd54cf77ed35022a3fd0dec88e58a207c8c069250066481388f12841d38ad985
+Nonce.14 = 91f9c02a1d205cdbcdf4d93054fde5f5
+Output.14 = f6d5bf594f44a1c7c9954ae498fe993f67f4e67ef4e349509719b7fd597311f2c123889203d90f147a242cfa863c691dc74cfe7027de25860c67d8ecd06bcd22dfec34f6b6c838e5aab34d89624378fb5598b9f30add2e10bdc439dcb1535878cec90a7cf7251675ccfb9ee37932b1a07cd9b523c07eff45a5e14d888be830c5ab06dcd5032278bf9627ff20dbec322e84038bac3b46229425e954283c4e061383ffe9b0558c59b1ece2a167a4ee27dd59afeeb16b38fbdb3c415f34b1c83a75
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 5e919d353357671566d2c6ab6e1acd46f47d0c878fe36114d7fea9fecb88a3a2
+Nonce.0 = 7efca9e3d1e1b09d7f16832f3af75141
+AdditionalInputA.0 = 442f17cb3cb1482a19729bfd58f46f6ef16285554892c01b0718968d6e011082
+AdditionalInputB.0 = f9557c93eb841bfd7b5d4b71da928efcbe3f55e1870493ef90d16eb238380d65
+Output.0 = 36902134f1989cfe7eb518a56c06aada98997d9bacd04aee21f879a57b515ca3b5e0c2d5fed05ca1a8b054e8c46b389d9d9186feb0abe8e2e60b3a267281cc5b4b7341116ced35a0e07bc2b0330bbfd8b07f07248fa6d8fc5c9df13445324162bdfa22a91ba71453ab123c92f91c70b8bd540b3b180b11ab45ae2c59e57c7c43dab7576594959a96eb502d182267c86576b1846ccee1a694cabdfb42e0c8214192efb502926fa3c27eed020b7cc8866a5af9d838a57e78bf7acd230e1f4d8361
+Entropy.1 = 7a5d1efc9b7043060cabd67de7fe22740bcd6a8ceb355d69f118829a2b3c9200
+Nonce.1 = 6a5633e613f8769c1114b1822ffb5408
+AdditionalInputA.1 = f2ad962d992434468681c644587639901ff74e2bbdd8761961ec34edc4a0c36d
+AdditionalInputB.1 = 75aae0d1bca9484c89fc4de3d1b34275ef0656775f3f8c96f2bbc50401aaa718
+Output.1 = 5ca21af4b399db38f8b74a406aace69f994691f2765bb9c47b240000152739e059b163cd007de5f28bba17e485fcf9ff6f41f76e93998510e302282cbdbde09fe8b1a96187e57c9a3df94e2e748f20026476ca682dfa890b478f7a21f4927f74f99aedd9ae782ba10fcda1dc34c31b4f784722e01cc4679737276f56df23c5bd8c6985797b83c0ccde2b4c7a65c652745de7fc8a235ad7ed0f456f1e7568b2dad475f0bc46f02a7f35c05cfef9d0e2c773ff895e291a2cfc2424b106096d8864
+Entropy.2 = 611586ee40cb3ca4a9238ce112a237449bba5422ac9b18ea53480875334d8fa0
+Nonce.2 = 26da9d96c4e87f94b2f9a7c261be3edb
+AdditionalInputA.2 = 2f835c336a3aa0019b0bf940c24643bc8fca58c9cfa6509aa9241de9e0e1a046
+AdditionalInputB.2 = 1911a59c5f2568860ae71e803688889dc44d14ffb0d93e324c39f32d95c1c3ea
+Output.2 = 27bf42f50476d8a2cc23f455e9ef477cb8e9c90f2e97c8a483093ebf55b2aee02e0356cff919e2ec9811b42c73498a6c2b96aa5b761ef7e715cbf66ad2e3ff8a6c92419dbf2e653ce70a87b51e26d9f607eb25b45b91f947d0026a38977143c8bbd94076e663b9cee35505b48e453e7cca83e540975ae8a53f26390aa63aaf1e2669410cc83427eea09428776a2d520eebd170602c52dd491c98042018a0372a0b39cb565cbe5e474f927f91515a6a7444fdbe1d89d8ae2c2482a0deb8ff236d
+Entropy.3 = 85b1e5da599efd4a20ffcefd4737fa3ea1d2b14be33861c2a4ac3ac2a49d3947
+Nonce.3 = b14cf18f4ff426cb6345f1a7653e9630
+AdditionalInputA.3 = cf5bbf98d8577077b0b84475dee0f0e9aa95eedd1d916507b5233b688bcc856c
+AdditionalInputB.3 = b333ec111e1e7d78c9ac916e420704832539d2db46aca3bdc4732e8ce72b5e80
+Output.3 = 4773d32a9fba37acc6900f3ac70f6978ff1e40039d6e3286c264fb7fc59f1bfe0188c7979380c8922bdd0e363c8e09a49faef59ea85a9f0e400b94c74a8a50687e4e51e25266eabb86276f22628d0d2e19c5696cd221a9b80f94045d001ca4c20dc916ca0ff22c93a41fc822912dd7e247927fd45982e94d3d1fde77cbe78beecba830b753079326ae33274f13fb7cd875e85fb5e9e703e61cbd41bc4ad47d7b4d14afc873a39dd810ad8eed95adff8dce3adb7659b7c1d4e3f62403767940b4
+Entropy.4 = 50f986f6efb413fba3e8e0beb84d4948c2db0661ab8e064d9fee8b3c2f0a910f
+Nonce.4 = c35d37512f88bdfcfde797a21a006e01
+AdditionalInputA.4 = 37c7b08222ba63f2136bb28f5ec09b9a899b56371615be41bef49a0b640590e4
+AdditionalInputB.4 = 4a1e34a5d60ca08e3e6c0f1b86547ba2d12fa293275e7d75f83a0b846daa48df
+Output.4 = e27738c6fae66125fcaf4e725a0881d5a450fb5b02a55057d6cb7babd91d502c4f4a8431a83352f47ea8e5fd7e815f5080d144318a1dcbc755e0b935785cd5397955da22e3ff633b34a64ac72b2e6b7c51e78ff553731e6e8da911d147a6e05b36b74898cac6d3171bc8650e445ffd19ede2aa8218be17671321c186465d852dd80d73290546b88ef7a978b41c4c549e9c7fc6ef86e47084778fb5aed5d41e794ee0e700b77c0314a307b10df69daba605f3fdbe2dec708ba0b20d6b650befbd
+Entropy.5 = 641dbcbf99b61437c2bf65a13dc3e0324eb940335da123870d9429636dfc8297
+Nonce.5 = 9d0cc913c73e8a6321fc3eb9e973c0aa
+AdditionalInputA.5 = 72580c11a87ce6b4207908aaf5bcaaa1bd217fce3e8bc0726568c64639b70767
+AdditionalInputB.5 = cf9f4527e074b72be735558dcaa1fc82f26ae286bf944b49649f769bf6faf49f
+Output.5 = 345395723d048c2270c0eac990498689bcb862a4996e82995b4e7169e671eb03bb2242c4669c874c1aeaffec58aa653c7d7431abd1650f0cbce8cf5db8316693f3ed501fd9b48c1a44b34f7878aa386d65afc31f94f908a322b03d06c2a1074a03bd2b579cafb0f7cee6d6934588ae1ce9e4ed37b03737c553ca19af4b46b5e43767cee2e459ab91407df6cfd13a6f186abdb148b85a5f49bf92ac6674fb055c7fe123e9355a0d33de281c03a56f91891dd496dabfd6eaa6fff6c9cfb4e67c44
+Entropy.6 = b9c305ada943a64a2b00494e869f9a640173eb1c2518dd9be93abc3c93c7e6b5
+Nonce.6 = bd0627a199d15f77b188824df00d5997
+AdditionalInputA.6 = ffc6760f9af02d35666275c074eda03f53dbcb5690580bb25768a6566b328dfb
+AdditionalInputB.6 = f26f436a820ef71597b75134b8d9dca6e9a6afd9b429222a4c9c878f3b92716e
+Output.6 = e5413a234859511cd837312bb31aac4d31962c5f7f27aec47417f367ca99b8400a4287e60412fc356cb40d96ddf5cb801285ebca42b2f6fe4a711451c1574174c58dccb2cd3342b7092a196ac7d2881a08e7f5de939ccc8f4eedc8f867c81aa88655d96ae50f618279d5009ba2ac4b1df4e63030cc0ec3541b6a94bd9a2ae5d1fcf4d847114a783c997a7c6b9d549010bf7b649abef692cdea3aa8ada14574e0f78b7fcbe17b587ac14980e40264d6de030e429586593d5ce3ae571f95454dcf
+Entropy.7 = 9875dbf59b760eab9998bf3341847910526d10071dc179f96081dd793a600193
+Nonce.7 = 6881e7f39075cd382293a1aaa8c845d2
+AdditionalInputA.7 = 1196583a99afe1d377b344585c8252a0690704b8f7a2b7582387ec91a60fd7e4
+AdditionalInputB.7 = 20147a88e0f9f1e8caa8cb14488c9b5c38e5520a36ae913b4703d15af27218dd
+Output.7 = c808f6f296683d26208359a766fe61bc70ee8b6ed9ffb94ce269578fb5568fe2358d603638324b63b29bb36ae71a542e38ee69a2b93ad7e4a887a27a2852cdcd541a5fa6d0c8b087aa1185bd5788256e7d95c2aa2d5c11407b7bf762f416b01d8e747c45298f875200a2e67679d6d5ff7a7c0e50a010690b1920df1baf0afcfaee7ab0862004e23b5aa1ff47b8273d503bd74a54e7b39ac7e6d6fb0a594d30531cab8a67b22783470a65f24faba1c231b3ba45efae9f0be04e2338529cfec008
+Entropy.8 = ac92a6c791aba0406d6ea8255c3c0901eb711a424501c2c2c847076d78bdcfc3
+Nonce.8 = 266b7c3bc578c7501daac6dda8366d4f
+AdditionalInputA.8 = 13379a77d84a0c4cec95e62ac4c8a98ceede0d89b8bd317352a95300963415ed
+AdditionalInputB.8 = 04d47ec89a3e1b7f22580167331225a00ff258da72446241a6c09c517ee4d48c
+Output.8 = c2e6528584c6dbec436ffec4075fd3aebe953fdc0b46b4b225a3c2886e60d21879e6ccce3746d881f6d80e33876afad439ab9f68fcc458492de12811fbd57ac49d868754da19279b4c0a38979201a588884def5677392dec97cafc94bccf8914d9f78575711bb6f2adf4116db91c8b54e36e9ac2f5e01caebd300acd7bd45eada69d20f1b4139013a8a614069315a1c99137a6f23e38f91c210e0c156c6fb498056e823dc41a05348ab43c2f6f4ce188d4e05a13d38f8025731ac1670949a040
+Entropy.9 = 63954ac7a0f989a458d2b4a6b7013dd66683624584b545060bd03a57b92822ef
+Nonce.9 = 422764bbbc35fa5d40d34145afe44bec
+AdditionalInputA.9 = 7b25d875dfb03333cc27b9d4286d00a85ea5921f4b8a4717b957349eb3509053
+AdditionalInputB.9 = 8b70d28c5c80086c0cbbd01337ad45297af271d4bafc764b0fc5705700cd419d
+Output.9 = 297752e61c4ebc4e1c68391335e2cdb49b0f19dafe359e451f8158fb7958d32a98455a852002d8f05169f438816ae6fccba1eae4d1fdd7a1176b04831d7ce892f711ec825062ea1c6b12144bbd3a0aca7f92520ebb87ac6045d2ac3a4a74fa559926f0daceb59d44fdb39f5fc3b877f34241531e863c153286f3f1b2ba2db4e2c8e2344be40c2a7a8cd01daf168696ce19f83ddb64d50e2313e78c5dfcf077f25e5b4d6f687279119ce856d4131a63ad133cedd020881939bf70f82eabfe46db
+Entropy.10 = d0944e0a3f3604a588271c8eb65913ad9b07ee2b29620f8106ca70ec10aeb896
+Nonce.10 = bc9b2b519c77fec5fc419e953ceb0be5
+AdditionalInputA.10 = d58593f2488f0a292ab552dac006c94b20ff500dd57af32be808921a5ee251c1
+AdditionalInputB.10 = ea9e579c9dca67f07ffd67d2483ec1fac3d2ec22fefff73c7ac9f125888d7a4b
+Output.10 = ae736da6632a7d8bdcc9e279cb7d3f9101a8f7dddeff253277d1d99b45c76a1a5c193334e912c3dfdff1bc389b209c3b29359a4ca53765a1e40cb900c6055d8a285cf63ebec79b46019efe95d5199f215f11961f3319d225bf3d60734fbfbf3593ab105cec2a17e308af469b3220ef7f055675396d289e6f4f8009881c8a2b4e9de88d53ad13e8bed8b38be6d8988f615b4590fde3d91caf50a86eac3fbf29924743145803978d261132b5975a9f108499250314e098e57c56e2f9327307cff8
+Entropy.11 = 1ef53464bc7a441227a27ea7b5c558dbb3f509aaf880213cdef7e8f6a1d287c1
+Nonce.11 = 73cd5b3148d46c48c83c5cad3ccc1f50
+AdditionalInputA.11 = b052a66992fd8a8cb02c593edfe4766fcbcd3505af29d698e1f4db398acf717d
+AdditionalInputB.11 = 37333448311c2c6edee19aadb8f1036cb60cff2a945c1a0ea087713bff31e915
+Output.11 = 4ea7054659cae1cc178ef431aebb64c2c8dda3a965ea940a84c00d9790e2e3a33521395cc4d49038994aa4c7dcaf0b52b44375d93b625ac2281991a85a5acebf3de552355e17b3528faf39d392fed981400f28540f5ca64a4d2eeb952c88856c8f7388a49611810941b46b1000ee4a8aaaadcd39944c4abca9110fd6580093f9303f86a6e129d56b5aeff5422c2261af33523cc6a174e0782e13a026c003c17430b8371bbfc3d51c3e06fbdc30769a278b109238bbe383cd5523053fe589b72e
+Entropy.12 = 14148d69d583d4c1758c307e0eb0b762511165823fc54096f9da5513e87df53b
+Nonce.12 = 96a7be8d31b8a38f24a82d846b0e13ef
+AdditionalInputA.12 = e05f81f6402c52dff5c221a2f191155bb56abe160ce7dc8a6bedfa029195a612
+AdditionalInputB.12 = 214777e3faee7d953b5c796675e106d50cdc12836b3114d14447ae91cea3c1db
+Output.12 = eb0497b32af8a91ed3959c31b079b8cc5c39db3100913332fffbb6b1d5ebbcdc97d6e67c934f3336197c9b730d80995a7d7445e36cf3047cab22895f244cac803eabd001eb1ff5d5645a803c41ea6dde6c972b47de0372ce901667d03e2e02aa0a5aea809e0bdc7430440365908418ce6066c24191ace05d6a797ef9b94409989cacbb9d9ec31f3cf0112b72e1420b47e0c184a8aacc214d55a0d5e0869d09303e4014de0430c07380006ea75984e6c32b06067d7d7b931e2b74666b4b569f71
+Entropy.13 = 27d47020acc3a80a55149fa0ef43f684843ba89fda4bff1c29d20baa2b219567
+Nonce.13 = 80569b7fa0c4078d9ff71a3790f1be3f
+AdditionalInputA.13 = c03ea0b88e2f9b53f902b22746bf4dde09439c190a7a638e3cb990d86739dbed
+AdditionalInputB.13 = 3ef05e71487cdbc209b5ab6e808e55f0a93bcc02df766b01c1c1ae5875b1023e
+Output.13 = 3ee49e2a58d800d922cfb66284da84bbb5944c85f194d95f1156b673392132a430e47ae74f1ed7c1d0e632d8cb604c88777437d8f37e7d0428b834555a96800540bf5bce6f430328fd328baf4b22b7f8e663c1d8583bc0119248588840510e11203cf47dfc4f6cdf8344170a341fbb7d93999ba86be3fb94d9c03922fd3d75e3fd5b42365aa62606e352676b2a0c51fb030d8d5605e8ac6bac2b4f8417d8e060148e3d4ba67b31e5e704d866bc87741ba877d12b10e8a9b37f3feca908fe1fc4
+Entropy.14 = 88b6550d49182ca7321d8015f780121223a93343dabaf21978ee2818e7bce659
+Nonce.14 = 1d32b48eb4642069adcaa5986224e6d3
+AdditionalInputA.14 = 809639f48ebf6756a530e1b6aad2036082b07b13ed3c13e80dc2b6ea56e70a04
+AdditionalInputB.14 = 3395902e0004e584123bb6926f89954a5d03cc13c3c3e3b70fd0cbe975c339a7
+Output.14 = 4a5a29bf725c8240ae6558641a6b8f2e584db031ef158124c4d1041fe56988fdaee91ca13925fee6d5e5748b26cc0275d45ef35abb56ad12e65aa6fe1d28a198f5aa7938fca4794c1a35f9a60a37c7360baf860efd20398c72a36b3c4805c67a185e2f099f034b80d04008c54d6a6e7ec727b1cace12e0119c171a02515ab18ea3d0a3463622dd88027b40567be96e5c301469b47d83f5a2056d1dc9341e0de101d6d5f1b78c61cc4a6bfd6f9184ebde7a97ccf53d393f26fd2afcae5ebedb7e
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 2cd968bacda2bc314d2fb41fe43354fb761134eb19eec60431e2f36755b85126
+Nonce.0 = e3dedf2af9382a1e652143e952212d39
+PersonalisationString.0 = 59fa8235108821accbd3c14eaf76856d6a07f43383db4cc6038040b18810d53c
+Output.0 = 06051ce6b2f1c34378e08caf8fe836201ff7ec2db8fc5a2519add2524d90470194b247af3a34a673298e57070b256f59fd098632768e2d55137d6c17b1a53fe45d6ed0e31d49e64820db145014e2f038b69b7220e042a8efc98985706ab9635451230a128aee801d4e3718ff59511c3f3ff1b20f109774a8ddc1fadf41afcc13d40096d997948857a894d0ef8b3235c3213ba85c50c2f3d61b0d104eccfcf36c35fe5e49e7602cb1533de12f0bec613a0ed9633821957e5b7cb32f60b7c02fa4
+Entropy.1 = 023f5673dac29f62245510d0a866629c43c64bf35a0bad30f1270050876cfb1c
+Nonce.1 = e80b615a5a47ecb51217a46079e11fd3
+PersonalisationString.1 = a6f797b155d6da01f5d155cb7291442e1b82d4190e93e279fe5b4aaa7d04ecc0
+Output.1 = 507b824443af5db28f746229e03ab00c73cc3ee4956aa14b33eda00dd2b9b645c132dab7dcdbc659c8ba0e1a3575fe7dbc7cf9691f9b714acb1b33bef96943003c992f661e04fe9e8b9f648f4af9a58a45b08b8fa7fa3704e6bdc289abbe14a8c7e1747a52ac916c31ed079de0b900672e658a201279824d0d75ae35dbdd43aeab915653765d83e46f347fcb4fe3321fc28abd2d0d26a662661582ce21b6dc4ea6d1b236e9692a83c8ba0fb299157b80623ad4f448d25d57f537b10e5e30f80b
+Entropy.2 = 96b5bc16ce0d101b90d54da6c4b3d85a70ee19d54cf4cde3d048afb5f758a6b5
+Nonce.2 = 2ea2c10c16feb71cedfab9bfa9e462f8
+PersonalisationString.2 = 2ff415e2432d2e6c4279910a5e56c0f5354a5af0099132d891943b4a8901ca6c
+Output.2 = ecebe717afe6dc08dbff3ed626bb06de0f9784283b70e378dec19d4fbb50e61b7be48ceb69851b2bb94641aec5027d53d314a96500a9bbb38a87c9aa42ebeb96a23cf29a0fbd5e48b399daa1b24dbdc85223f24b7d77332bb1a137ec709d27c008c709696cbe44bb2fc19fb10a2fad4ffd8a9d89492a939f2268d1557f44b6a64e2a57887830fd8bca1b6306aaedbd7f3f476b827995a1ed121388497edc7e639c87d092f6591a45b5647c6c091c15ed39f594b7fc4ae92331f96dd8e17be970
+Entropy.3 = 364a833a283a3e0b8a5b681daa50df96d806d4b54828f2b016de5d88597e6287
+Nonce.3 = d98cba8fda464d21aa1cfb7b26b9b226
+PersonalisationString.3 = 35b0e7534014dc2d7eb0f20ff78a69d5548d0a64122d4936a6ed177fb3ec66a6
+Output.3 = df4c799cae37173a81c545d019ffa336ef2c039a5865af425e5b60bc3d7202f4bc1aac5a84022bf4088061abd5c39d0fb047ba80163eb5dc8b9dd515948f16915832c6f76b45acc25b9c01e7f70955c0eb51bf50f00b24bb8e7ff53bd7c051b53d8b1a837a17a00355d7eb21e43b2b5b249dadced37d06e7047c2fd12012705a59d051afd26245ce3a59acb4b996b718c7dc1ae964bf12b1db02fd6c06ac2fec6ee5deb02c2c830110e9bbbd3c778a136b646ce2a0738563555a89409c56b81e
+Entropy.4 = bb4d38c775acdeed663256abb747ec25182bc16efd0de02cb4b05e4ad4749c92
+Nonce.4 = be6f1e856e423a8f3bfb0c0f27ad8210
+PersonalisationString.4 = 21591e796b7e68e7913fefbef4872af9c062f21c8023c0dbf47e040c3aed3733
+Output.4 = 12575776e1b9f54b0fbc39e85a77b6912160bace4f1e9f049e3a1c5bcb452cf9be42ea10c028c3cc249401ac236dd3baa53ff327735435f4869d3289bc9465ccf15f826e4e4fff099986bdde0d09bd12e3caddcf452eed6ca1206ae4561b84770a9cc6e962567304ef79d8d3608529a3b5e4067fa83c8c35a06f1855da5f5ea7eb106e4c60181d12ba00cfbf7eac60bda00571d95c45c9d75c43b42e27a238aa5e0f02bbd96cde59a2e572934a99d05c399ffdf15c65f173748734c51999a29e
+Entropy.5 = f9d041d24158f480600c3747cbfd868c3f7e9ac7f74b3760eae5320839e4f513
+Nonce.5 = 0f8477d88b1d914c0d8b375d089a4c83
+PersonalisationString.5 = b148049f4093f0032c7f105dae219aa9e3f70487ce3a6b6ecd99429f66be5406
+Output.5 = 84c58bf473061da92fa8d56aab3a75598428f18dca504191a51746eb5fcad8f784eafac5ea81d636d579e330baf7db95c8d706432e9f585e84da090c0eb40dcd819bf10e0d5b8600150d186f732af50b431c596c920eca742e6555129fdf5df96b44005083d7a33087b150d63529bee4b6e1ed4189ae2d93cee8dc671d47c0e74ba04218dfe273484a4bb59a57743ea56843d516ff2c72ef9841996d31b0d6c5beef367a6b44cc84cf4d403a06b40406e4c9f47da401e3cf31412694e6164dcb
+Entropy.6 = c18f511ffc3479a59357c17c2fb3d1e0e6f0edda4c8b567f2413323c2037f2fd
+Nonce.6 = 140fb0cf33eb59526d8c0dbd216939b5
+PersonalisationString.6 = 7387aa3b0b3d92afb29761d3d5ea16e32a68297b9ea6751e1d54c8612f6351c1
+Output.6 = 949bf03868563c7d1498c69c327686682656374b2efdef6342e69a388229c580ca2217a9332d3ae77c2d1223f5dedf4b34ec50b79d5baa7283168ed7cbe71c6c3c9193bbe01b76e011c39d2d462017c2c74b7e698fa2140e16886a9ec0fc6c36decbae37537638ccf17777f1cfa49d2c2c7ba3aadd0a1565d61942de94aa6fa16ecafc2dafabc9082f23e75a0e2f8f79d1c0a15ce57fef7655f1a4fc6fc4d4a694bf6ca9e333959f35ad354524f614905c6a52ef8f524cdf01c5fadadf207772
+Entropy.7 = 6b09295110384eb56726f61474bdc532fdace31ceadb5fc23d587356cfac7433
+Nonce.7 = 8ab6f9d89394b907edb646650865a3fc
+PersonalisationString.7 = 7cafcb4db31ab411c396015b8bbbc990607e08bd1cef3337dfa0e295ae024f9e
+Output.7 = e51bc5b3a6bb2a2667f5d62c2ff9902dd07b566870b4c14242627da7581449ec985739cdc2bb5ef036033fa798112ce20df06d46d61aad7121b8282fe7556bdd363cdabbf47184e55edd85ee0b7b0be17b9a7f822f4d8906465b525c16385d0899b6c27728ff2a600870aef65f58f9d3777e8987d86e59fdb69cd232e7289fc75cf2174304137f988a17b60c57af84cd8e556aaad458f511fc0b3009516435c0c60098f35fb6a4a90d90bc6071d38000703ef57cbc19d6b78a0f797f3ba044c9
+Entropy.8 = ec6d0f68240f5c47e822d9088364c6cd03ca53808162b4f06f5956da65290946
+Nonce.8 = f4d26653d079e50604f836c1d798243d
+PersonalisationString.8 = b40b5737cc76c5f6d1df0f13bfbac7e26f92aa933125705b6197d9bedb11f2e1
+Output.8 = 207833cf65599e1406ddaf3452f060c872099cbf7483f1f7f14033490f7258ca5fd7f5339f914498b6e61fa426cb872c880a9fda9b8ba590cd8006b990af7ad412f60c8b2ad969c2f9cb0e9d005943d4dd2dd7af9699046ce89d6405597716d43b9ad54641c2278b04b2bcc5b8ecbcd5e2044e4e6ec5a628605fcbd67249e813bb769d7df01b60404d030e69e9672b4fdeddf82a22042b83ca036578b69f9a0ad9702bcf95fe846705b49b0a0795dfbc4f671e0158ded6242bd8f8fbc2410c46
+Entropy.9 = df59ac224e4ba1b6dff348f17bcf9c5a94a3235a54f2799a6cae29d8654b79d1
+Nonce.9 = 8b09b444a28a7d537e1a2bc89e95abd8
+PersonalisationString.9 = 14a0a91e0cfd63ef5fcbe2e8c7a44bcf5769c9f95b6c50bbe9d3b48b82a09053
+Output.9 = 656438e7738d441b9ac116361e9f26adc0e303da7889cf559841b3e44127318edd356051bd0b3ecea78feb2b928227921a0c183c9f56bfd11ef31b28da6c78f3891d8ae1804bc158fa56e8b7a1a46be4954de493ef65a7f9beb46949a323a04e944034db30b19cebd8b70bfc155882ddfaca1bd5acb981c2c1b3e0862c6234d13093ddbcdff15129d586fc24ea2fd20946fe45b467bbbc77a6b6973eb6ea02994607c657eec29e4c4b3915cb730db056babf1779127047b401e25f97f606063b
+Entropy.10 = 8da1ad6810c1d6b7ead210e48f51c370d4520547a330a4d591e61a9847aa0434
+Nonce.10 = 63f69d1b237999fda9b5697f1e7aaa07
+PersonalisationString.10 = 291c536dac72409e31e71cafb1b5f55c14421b2c7a44d792cfdc663dc8f62692
+Output.10 = c2bff571554c26bbd4442fbb3b0f8eb4db09840337658a7425613e0fd4f96e60da39b250c3a77379a53325a56ec02248c4d67fb9154e3b0eb8972a3109aed531eccc027705b267d2b9c037da79860d76e5e980b5b30b7ea588fa221d24d973f6d4c625de65123e91613a1528cdee59993aa827f319a759412f20aad6c50fa79a3debeb346ad92809470daf228cf344e09f03c839a28d580a2b3d7050685ef51e95649aba7228a2f0c82a2dfd89cae6ce549e8b27fd46f02feb473645765018ef
+Entropy.11 = 5e8d6571f514519de6c4c0a7cc5b85df616735b8dd09c3bed2377499aaabb296
+Nonce.11 = a9b2c94642da10e8fa737cdfb3129334
+PersonalisationString.11 = 6ae29c71b76fc48f14a3d731a0f6f276f73e7672eff631dbb1d22b06463bb236
+Output.11 = 5cadc1264314fb4bc7ed7fa74bfa16aefa624bf2fd60c992d0cba10429c56e0028ebb430b1a1c6662a9b3c7f6de244ca000ae63db9570f1aa3e7ffb1e97a9d848021d8e632fedc037712a29abec4063b9d57c60738f0af0b1aab3844b03f7aacc65d38bec91a11b7c3bf8d970f01e00fed9dbbe9e2e499a21c72a7c5a22864125133ecb073a4c9f6d9fd46024f5c1ee7fa447209afa6ccef1f97ae77ca67fca5959dde209d2597f87af6e154408579cec42c69fa9b7cc075ee3e37ee3d91ad9f
+Entropy.12 = 5c9481b2642855fac8931eccd1bd6c5a05b560a55f96d37e865f057a95812d81
+Nonce.12 = fe65c84c96a990eb7a302b58de723cb4
+PersonalisationString.12 = b6a61b9a31207363d62c0b88f1632290f4f18feb41a6dedb85b7450ff9157016
+Output.12 = 9cc77b68e1ac23fdd2e2a6ff697053f816bb48b39b1162f7aa3fdd2dd1867f68b13980c9e5989d4631b7983248501731326bd7bf6e967b3dee7d2d5625d3cc2e198623af9f77f86103491ebb4aefda5c333b51557b8f643e6d6c593fd7e27e4bccca13140f6129cbd024de076e4688567fd7e41dc7b2bd0bd9b3e966d5d3c461502221b52b001a4d2102894da04172efb900171a0eabab1fd134217580cfc33a0a94edc0bc132af91d048c6f5ea4e34ebc9686a99f81d19118ba4da63ae3df7a
+Entropy.13 = c43f883d0adc2b56984d4a497a8ad76813a01df5a0ba22b53144763b65c7bf3f
+Nonce.13 = 6f722e4ceac59966a6e44ed898e6109b
+PersonalisationString.13 = 769bace2c263edb87101743673724ef67a935e1ae9cace87202b6015d20fd9ca
+Output.13 = ce61480953190453247d091838dd80117f7f85a7e9a1237c92edf10cfa26b423735788b1e89f33625480d9faae57112ee62c8e4840475a6a738018ad3fd4a77efdd8f15ffb621c429419b6adb20431fd35f9d62fb33d500b87beac4856aa4971eb89710576b609ecfe758f3682dd316e7ee9d6560b444c2446656c8941dca7d6eaa70fdf8a70f18386ee5d4c86738bc261c0e8e5f509dabffd0425a86858ea3c71de5be98570dabd80a37b4f7f954002727c0b712e58693603c23130a45e98df
+Entropy.14 = d083f7f8c65374627ddb51582b3a39e2bf074508d5f28ecce25787f386058de8
+Nonce.14 = afafaf2ad7e6449308e176be01edbc59
+PersonalisationString.14 = ddb4ced192f52bdfa17aa82391f57142ac50e77f428fa191e298c23899611aad
+Output.14 = b978826b890ce8a264bf1ad1c486aaf5a80aa407428c0201dd047fa1b26e9ea9ff25a9149215b04c2f32b65e007e0059a8efe11481926925061c748678835c0066f596352123f0b883e0c6ab027da2486244da5e6033953af9e41eec02f15bebdb4e1215d964905e67c9e3945ec8177b8c4869efc70a165719b8e1f153c41744d44d3c56a15822d522e69bd277c0c0435fa93e5e1bc49bc9d02aee058a01a04580a6cad821e9f85cf764fc70dfae494cbfa924eab0eff7842e3541bc29156f6b
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = c2feb900032f2cca98d3f60536f563d8ac9af5fb2e90dba36c371c0a1c58cf5e
+Nonce.0 = 4a60f2be0fa13b8266b715be8aad128c
+PersonalisationString.0 = 8e6f9be0c692648072d19c750804b10e2ec313c8013abd363de7a467787859f2
+AdditionalInputA.0 = 72f54ba3f8e71ad69a040bb8493283acfc8815f17dbcea220ecd68372a2dffae
+AdditionalInputB.0 = adce8157ef60482841dd2ac5ac512bf7649120c1dba81ea75f2a70b7512bb6f3
+Output.0 = e76e4326ac69ddbc6b2408c529b05a96425c65cc65671601191238e9434d2a0147f3a25ce9b6818774f5263c92459bca421d2b492f9a9c2971359baaa1426d6e2c36d8924f39d02ee2fb5502c4e0b206dbe9aeeacd508abe6c055d547b5f9f35de4fdc9c05a2c63ad699a3a7e265598b8f40a8a295d7376b88c49af9edc790b8a5ee221e19877616678e2a5135d7b3756109200439d9ec8bfe0cc5f3c334ca9c022ab9192d5d554dc7ae76af1dc06d814427f46a7cfa2dcc62f4777d07ebde7d
+Entropy.1 = ad500edbe28b9a4338b55451b81c652797eb48fba753c186ce0aa9ad02a84ea2
+Nonce.1 = c995b7ade6de0fb4ec97bcbd61b711d5
+PersonalisationString.1 = 5770c41832a4cdc4039a8c332a4b45e7a7b2dabb678ccd2e56452aabeab14925
+AdditionalInputA.1 = d8d5516d158b41cb9d66566b88064900af78183f765f2f72a19548fb797377b2
+AdditionalInputB.1 = 60a3a01a72e6b3f33a0c236db08237e7d656bdf4bab1db57ae23b7305569dea5
+Output.1 = c5ac3df66bc664e8bf84c758c7926992f0e8a03cd3f3f5fb8277c85b4da526601e8131f9d205f35594e101a86fb83ccf4c1e98c8e609062256701ff2132e337cb7287f0ee2e8fe3ef11ae703d7efe52e63cf89119ced05950c55aae6c822b6b0a8e1b91b537e5bb2de165a4b5b43a1c41fbfd65fff9bc5329d303caca84f5d1fc6acacee622623ed5dde36aeda0816749557c924d6ed26cd80e456fd0ae2146477ccb63a203fe16ac1d0eb2d12b6a2cabb21d412422e95f2df8ccdc23b4ef0dc
+Entropy.2 = 51a29bac53961792077e88ed3603d33bd1f51b3fdb2b5cd1ea131c6f643af65d
+Nonce.2 = e81eb2e260396d2a69b4184c4eb98a15
+PersonalisationString.2 = 72e5285b92c4ea4458e8a2159687cd46e7df9c1f4513d8b72cc88be41c2e1522
+AdditionalInputA.2 = 16a69f7aee34c567595f3d362ccbdbb7b9e9372c4b1729fbb80d9a089eee31a4
+AdditionalInputB.2 = 825197262a43f6523182f0a91005d70b17d81c2bb692edfd02ab988130c7d5b9
+Output.2 = f63f531c242a295d7796c3b4844fc74821af5a53e0e7ae822cd8a7f9de91e6164164f3448fd7d18feafb97c9500e0625d501dcb3927e6fb39ef65dd9586d157076436452bd3066cb30d1f47dc0a3ffa5f2e9ab4e183018b40a82b39b0d170aa21b05600eefea906838b95456e04cf046808030a56951d2502c5eb6271228905ed08549bb171d6c0408d88250785f42e349ce1d9e74a6cd0360a008ec804e7ecdcb4d1fe24aa5a18cbb65f4de1619a29c6062b409a386ea6f43e60adb9ea3dd28
+Entropy.3 = b30ff9c6e5b6bd258f1cea0fd5ef9adb81fbec233ff2fab01e79b7422878b2e9
+Nonce.3 = 50604e10ab80ddceb9d2b968d0d37ba9
+PersonalisationString.3 = e8acd4b380aace0b27572057eaa947e10e6b49516140139c74a1d4f472221dac
+AdditionalInputA.3 = 1d2ded0003521e2ba6a4a3e732e0949c1d858fdf0925fedd9cfd7f603e0e692a
+AdditionalInputB.3 = 688ac5e7b4400d962c106fd2ce712a1cda6a0b8ac5196ad727f9b882329a3d5a
+Output.3 = c5208fec1d67517311a42bec07782ceb247e9c818e4f5f3bd160c9e53d462b61884feb278cdc8f64e22f59d27dfa98d3a90da8c7c5ba28ca40bd0d18934595a376553d1a8a19de07a83e2e9db42748c982cbcbf4a975c20084ea9cc6c6a41b571faf66b364e4b7e4d32efc80c30b219da1c02a1ea02f6922adbc31a057f999605a2d827f10907835c2bdde4157d7bf2906a0ad27bb72f113c6ec4f23631a2b8517bbce91b560d90d73fbf0699bab21da23e27cfec513bb5e375f50108197d664
+Entropy.4 = 56715dcbaa4f5bdbd157bdd950d1c1b46c1f4f8d7818ab321d72c0ff3c0a9280
+Nonce.4 = 64b0439f7bf021dcdc7febf2126e5432
+PersonalisationString.4 = cd5547991b525f7795e075a59af1701375175bd760db99d316b91463f87f7f3c
+AdditionalInputA.4 = b2e4f02f1c14866f538eddab402356ff3b405abbb9154e88b98483a83be70f7c
+AdditionalInputB.4 = b8db321ab30285eee7f9e377ad62def6caada447d00a4ec882081daafe2ec009
+Output.4 = 7ed8c2be58e3553eb65508377d63d7f24518d1a7235dd4c740bd987dd8bc1c1e3ca97a69a37dc9a270ad88989e4868e6cf8e4cf01703c0b1eb6aed8c3f8af431d819e68b6947ae134d360d87e33668cdef0e45e11f5cd79329ff95ed00e4a6952750f1574f489394b5fde3c6f07311a1e5d9c4e070a0943ef9d4a130a9e4b0a80c256e96ca5042961766874898ea0f772b78d1a33e866351a4eb425b822b5ad596cf249bce8ccd6dafb334b71a503fce2c8fa3fbac9943910ce5ff02ebbedde8
+Entropy.5 = 1c60a31760019e6a571e2987e57e19adbc1accf3edd44e501061cbec331b197e
+Nonce.5 = b68d0fa8fa5e3071d6f8b7c9c0a3c35d
+PersonalisationString.5 = d4d84dc7311096791dd9c9d7f2cd291071f877afd86b9644427482d09ac9df64
+AdditionalInputA.5 = 6473f4430398d7e5a2d218bd05e6aedac1e317269df3e4705d56c22d6e7abb0f
+AdditionalInputB.5 = 379649b56a46399b9ab5f3880e1a73993a58cf52821d3cac87890aa0e6322a94
+Output.5 = d34152fa12fa341d0326a525aa838558630013857747f02634d24e9deec2da12f52fb405e7f1b973dc2d982d26eb2ddb4b49c35a9308b06809171dc990a4248e6da0c329a259f495247b9fa8c73af06604db7b629168e34081696a043977dd29a3c0362d5895f9aac24bcba58dd74078ef6f8d33eac864f2e6cdc479da3d224bad8099d011e914b6ccc3631a7369586e18c71a4087de0d47a7c29a09c12438c7de2d4b47768f47685b742c25b860e716c31e2afe4ce6d92bc2fb9f34400602f9
+Entropy.6 = eeccce7f7edc52f0e2559250be36526cd1839151a77c59d527f66fa24ea4d86b
+Nonce.6 = 3fb298c8d72b6a0a8e191b60259d1fc1
+PersonalisationString.6 = 26d35895723ba3d431991a0e6fb2154ae5bff7e58609c926ee3269afc5cd631f
+AdditionalInputA.6 = 227b9a71a6c17ecbf627161fc627f8f6f1a28ce39772b7a3d36064e2cc6dc4d5
+AdditionalInputB.6 = eb59f780c5a955e1355dfe15cc4a4e90a6ec75584e63bd0de734399f47b95070
+Output.6 = 78ac77657dc56b23e617a9b38168da945c1cf52b6062c2b10f1d7a3814d9b9efa5545da050b0db5a65a2d2d2e02fa12e97eb970fa8e83c524bc809d675e0db35c9762323f327f1edb9b534ce16d02519750b41ebe51f747e9da43fd1afc60e46c7aba72e15cc7a22fad19ed55189f287a14737483eb6b32d966c3e3969d8198f01f2ed841f20d7d2e156d6285a29e07f6d7fff42bd575806c4092522b03e0d1b8df0cc88f5b82d24a7fd0feff6ada03a60ef2541a4ab041a49aa973c7163bf94
+Entropy.7 = 86f8104a081c9565dea5652f20145a068dadff125debf818262d8931cec6ba93
+Nonce.7 = 7fd5b51affcebee952fb67f29f197267
+PersonalisationString.7 = c7ba5ff828855e6e78fa1732d63aac1f49701ff7ac1f3506e97941f998b4e9d2
+AdditionalInputA.7 = 6917bca15db53a5359e5c4d30ab4d37fc6a1bc660faaf2e74864cb4aa52e0e02
+AdditionalInputB.7 = eea8db0cfc04f8de14d6053442b5b4f8733f822df4be5966a0de8b0f7d2036f6
+Output.7 = 562b8b2fa3bb15cfc3f7e57f309e31b13c790c928ad6b32a005f5431c28576c5706c4ac0dc2c7a4435bebfa06571278f485932bd94382efcf727b300b230da9b9e9f377d2659ac75dd8247351d5ed8185effa0f255a2a2136e63717e0265d561a34c75ecee1c774c25e33fd938696825686acf9a419c1da3fa1ce8f695e231087aa0927dde6ab487dc61291ad4700c5c608fab1a418f6b30ff97b8b8f01ef8164287849a77b21be5d11d82d0c19056e07d59a30f6c576705c6cedcb9f22d3a8f
+Entropy.8 = 0db6f73ab6d31ddf8f78d76961310d68f081c9e6d5985e1883978c2dec48d9f5
+Nonce.8 = 8875ab658b3a8b795bf464af9470a90c
+PersonalisationString.8 = d886936ad36549a10b5dc5d6e21203abd75ad63f826794b4adaad45a70424c5f
+AdditionalInputA.8 = 76993d3bcc32546430efa30e3b30acc34c7672b6e18c7e2e9a1f1cc26f7f7a22
+AdditionalInputB.8 = 54c72cf3457e6f5f6b35dc14167fee9383c44c867f233ec9d81f187bce438c0f
+Output.8 = c3523894d273c85d605d39f5b89e3388afad8c20787897b903d8db7e3de7590340174be3abd7598daba7806ab934e0feca02bbe66282d469ec01476bad5ccba59fc14cd9549bf4af49641f4326b1052b179c89194d21bec0501c97ef2c24aaf045fd348b765910fe92c0039612e37baad2445b57d9db6c1e550adf6688a79b117f6b7a37e0209d89f194a1bfe1ff2e3b28f0454b383af8872f32322bd5313a3c9ca48d33eab7c3807bb98f8f402c43b99b2176f0b33be08c7e84c86b26e971ab
+Entropy.9 = 3b1ffbfae6ec54a175a80a33c8768fb60f2af9ee2b8620c4e800a17fb9241ae4
+Nonce.9 = 7f77da414f67b5d7b24dd100355d2afb
+PersonalisationString.9 = 0d50cf61e2020a909ba6e36ba4d0a394579d3e4377cd4bf0068967e8d0fe7a78
+AdditionalInputA.9 = 5d4efb3f6e6503c5d85a1c43398d0441ce8aefafaabe2f6d86988a24e033f502
+AdditionalInputB.9 = cfb6156a1b139abf21c73001240997ee1a8cad91a4bd777c0372c1e8fcfd3fac
+Output.9 = d3ef776c8d77fcc5e947bf53e0be11777e69c7dce138f24c1a3212d1b6b932580371479b7619fc82f029d92969628f810b54a8fdab8eba799e750945f3545f6a96226bc760ad736101516efff5d8581f5864b38c29885d39843a4adca17046e1e388c890542988797b576da64804eb4101638328d3f8bfa398ffaf83cb7290a2cfd39ead13290ae773a8958b33914ca02c8ff6a069aa25ac8b36f6f0f1dcd8f1c5fc838083a64ae7ae11b85be3a9fa80ed83949b622002e91776273fa32d6cfd
+Entropy.10 = 19767ce1f18aea366539642fad400a03a675b2f3c0b1cfd49925e535b2c27790
+Nonce.10 = 43c5a1c57ef550acae733729516aa62e
+PersonalisationString.10 = 6bfa882c1e895eeffbb85578182653c022a4703091529780c075cd482809b990
+AdditionalInputA.10 = 11236df1dca3de6e3e3a57d2741d1b77f15f45b05beb47cc500100b31188a42d
+AdditionalInputB.10 = 98708a88fafae56c4f6fa780c6c0e33ca8f2592983b5ae607146cd6e92204416
+Output.10 = b6514a3779dcef2c9ea0ed7ddfa808d045c5907314c358302ca32b2055987a38ef601637cdcf77b1b8f7eac479f8f18972013c2e1a6dfe612e8a586dc529ece486505534c0ff3dc0b2049a0e46d7ac504a1fdfaa9b08d9fa017c5803415fa391ba7eeb576fd6ddba4404feb46e7cde56e090dd280be5edba7d6df9c5ba7d3454bcbd4d443b08fb51a117c1d5916f225dcd6c1c3fe2b2880f4d42962befe3ab76bdc086e29381dd985206e3e00ce722c9c040af5ff4cd4a8183b446d91b310845
+Entropy.11 = f63292bab50668eb14b83975422a0c853fe55714a9edf9d8a817ba0b2f26ec40
+Nonce.11 = 063a86ee3c79c694273342a02f68ecd0
+PersonalisationString.11 = 3c525956838e26b77b8cfc37f024ec398ed825076dbb749cf49a7d868c201e6d
+AdditionalInputA.11 = d9a41b47c3bf8743099dc8fd228f77dff01ae304761eaf57d751e11cf094bef1
+AdditionalInputB.11 = b790c37dbda20fbeafe9d1339a1151144253bdfbffe17ba87240eae49c606bf3
+Output.11 = 3586b63315020b3ba1121314a0fa6c66d57de0ec44abeef7b7325e960832b7944cb0a81a747ee5c5d3163001536d3e5ad2ec869b0e5ceb14aee2e6915073619528c1421b59b80254dfc3cab0584898b0bca72c76ae25f52b7405b9dad38cb2b841e1d6a34fc5b277129db49928b2f6c0dd22900ee786ec128164ed12eb324b502499f1c5c89be2101901476b39c56034cc293e320e63a3e019186d4eaf9a098136e8c0ce7f6326f84ec95992dde2585ad3945a9534aa2954b8c15a48e3324d76
+Entropy.12 = 3df74683f298ba48648714e384989145c1b84246736dc275636809d64c75ff60
+Nonce.12 = 3056e703c435eacf21c0bb152d9fc2a0
+PersonalisationString.12 = 371217ca2337db03c4d06714624fa11f90d5dc575bdbe12a457c610be066dc2b
+AdditionalInputA.12 = f26b9cac8df57a33e4b5868c36f2b9322994a98269dcbd7956b93d147dd0aa27
+AdditionalInputB.12 = 0a6db86c3abdc39878045b8fc2d5f0f77a8e298efdacb4cb9f74762fc23b96fc
+Output.12 = ff5252b7a39460a73094b9d668b53d1932243caa885c0ecd850612fdbe7e46cb275d079bb75a6b050191282ccb11ef255d52cb763618c4b624560d79bb9a5bc99319783de43c152e7aa7c4cd879a75869285320a9b749c897bf07220cc1bef1edc494bffa6ab93dcf839dc15f6f2e508b9e216e2a1786b75abfb01bb7bdeda722b47af895f551670f9562d9f9b78e98ee7ea5c5ca4f836af5bf153925b2aec055eee8164edf3f7b72e24b1203cfae1834705f74cac8c6043a3c2abf6bdf28fc9
+Entropy.13 = 53d70692f0f4dbda23d78660f0f08c7e70ca94441f1440348f76108874d13ea1
+Nonce.13 = 4652725abd1a94d315364416c90e662a
+PersonalisationString.13 = 6deee916ad660811cf05b5652f32df4e97f544ebb57762617359159cc9a425c2
+AdditionalInputA.13 = acda427eea1c8c6791be6e4d2b60be30302abc84d5c5a13be7d510004b8710c9
+AdditionalInputB.13 = d27d7f598a14205c45788665cd062135b6b65547d3188959e38ab675401d2b62
+Output.13 = f77f9de60e95da3f1d0d67b5dde29b31df59ce980ebdbad7b5e0a0051fee39e1d6fc4311f21efa016039bb05f3b009b223be6f2c007b468388a8a19bb468c7b82cc93dab3e160b2b72fda1240fcceea01c2638e9c8bd2d1ed9ff9b55bf69fba4b6ae8e694c150896ac6233b75567993f9a9adf25ca0f0835b9991ff4b8d3f4f1a3e4c5f9866d98b7a75196804f996492a61dbab5bf72f87658e2300a1b0777ef7f43ffe8962f6b6708d2d91dcdf6b430cfaacb3289f74cb0f67370bcc9af249c
+Entropy.14 = 85186650694f742c3f5f228f943788f05602d4827518908fd09a1fb445d8333d
+Nonce.14 = b2d65f376d48c66eb9e0498999e1ff49
+PersonalisationString.14 = 499928c41841324749143be9cc769899c38d6f6e6933e56898896fabcd802931
+AdditionalInputA.14 = 9574ca51f21865c2fb0efc75cc9d90ec5e9c43104979cd64d00ea5544ea01c96
+AdditionalInputB.14 = c0df840a18d7584b62c70b2f057bf824168edb673cb517cd9dac89a0fc80c9b4
+Output.14 = b31e50202f883a8563cf129a0d5f8a33abad79d8ec8a97167ed7fca778e5892480617cdf50b5e51547f7ec1bede35020a311572c61e33e9c82968e8f69586daea3dc19063bea56503f8ca482918d229949acd6f1c52cccdc5f7f4cd43602a72a5375f3aabfd2834ee0494823beada2daeccbed8d46984d1756fe2207ca92186b506115f6de7d840c0b3b658e4d422dbf07210f620c71545f74cdf39ff82de2b0b6b53fbfa0cf58014038184d34fc9617b71ccd22031b27a8fc5c7b338eeaf0fc
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 26876e6c5336438fc1d6a42db8556b79ffb40ddf54d911204bfcf9815b6a587a
+Nonce.0 = 529c6636613073ca2834bd49ec6e9e70
+Output.0 = de4fc87a1cf14ef0d8024e50ec1644e2166e16efd4b9104457ca038df0e293e09091c9a5a4cca20eec3b4f4d9dedfcec1fad477b995ad5b75c178987ca07b827a354010fea51c2197fa395dc2763d9828cf24fc8d23dd0caaa5cce877fa7b53e964ad64a7b6f4f00a23edba52999b2d636178b458e1b32174ae53b88f01f661c225a2efdd41a747d416c2b4293e06ff0fa8819fc0a81be85bc9dad4d657d220a2fcbf1747d4403b90e8b5aca1abeb5f292f3cd56d7d52d87c1b768c1efa1f159
+Entropy.1 = f7bc822d9dbd992050bbe7ce63d75f533d563c679ba79af2319e2621bdbb3a62
+Nonce.1 = 2996479aa1eb7b1ad7ad3757ad00690c
+Output.1 = 818b7b5362bf5ecfc1a3c9cde98b6c0992c89c10e6e4db7803b855cf1684f195d3e5b688748d0784adc2c17837e7ef90fe89969900d99305b005f7d065adf32d4aa329891c47c92de7ecf212d68de1620a833aec9c25ac2e2c5cab6105899d3dbbb8d2f72188f2aa971029bfc2e35feafada371ab261eaaa0cb07ba718ddc2650927c715bb15b1a9c90e885a4601f492f42c885ab44c6c0dd55954b7776a1446d4b7156b806e4251357b8b98b965f52aa89a9d8fee3b6792e5464196fede4ef2
+Entropy.2 = 949d284af749288f9b212fa0f614be223231f23b5a808dcb4a681a6963530a59
+Nonce.2 = fee00892bf66979b20ae63aed253b276
+Output.2 = 4677563d7f97cf3e0f306c9b4d25637bde575b50f194ace05f4b4399d402b1ed509766acc0832e83aebad0fc0e3498cbdd5679b83fb144b2872531407604f069f52920a0882d543b552f076af6f1ea30850ea19adb70a258a72e8a06efd4662992c0f5f084ba3a51655e65b6a38ad7ffdd411889170c12c4f2caa32e41a88840d2be66e33a80143c9a0e4128d033bc83b005980891ee20b5564f7b376c3163160b5f3c467ceb57c1cc6b0b7db504c76bb6137997d8d8abf93658b3427c7c966f
+Entropy.3 = 35a2f9862d3c5d1854e45acc410b8af3531140bfd0ac396b5b9aad54d37d42f2
+Nonce.3 = 1ab6cd08babc134af3e387f67072ecd4
+Output.3 = 9f548d7d53d72bbccec2712dce82fb5c9004ff99d36817a2a026930574f8f767a653adf82f1013177c0acc6ac53e38ac1d8cc1869f5aff5876a0b11041d362579aa2754c0f77595e8ebfcd842a6c899c81522443516747b77a398f0eb134257cd57356db5eebd5aad023baaa0952c1cb1dc5221f9fb5ffec519bbb62b0f51e36097e442d8ffacc0306702480ae68dc79332941c72492ef1198438a291ff02e4edcab40423b14377b04c3253c3da40af9f1047efb7a6ab314f04014ebd787733d
+Entropy.4 = d263f0f194705e76f7999eae32bd273adb72cec1d6bdc5bb4f36ab71d29a0fdb
+Nonce.4 = c0883f1977acbca45ebbf125c3dfbe98
+Output.4 = 1a5b7ecebf9ffb969ce8b2d564fab9f713d9efac26e5b78e6b0e95f8270f754ade0afbcaf0352c7dadf68a42086a04aa346db4f082b06f945821deeb252f51961d161262456702c8fede5b122ce3073a64aabc617461f231b72332fc2c9fd459c99ce60064ef3f8b43b318ac9933810bc0481065c624da47af64839f1ee34b46af2cd2d6d2ffbbbad78d0076532d0e6ccf4c7c05d516bca844106831d084b4b3ffc78429c571a55657c954a81d6fa7b4ff3a8cda6d346915344bb35ad6a04f31
+Entropy.5 = 63deb4d3aaa7f72938a1e8736d2b8973aab624c8a22c313a8391318ed321c866
+Nonce.5 = 2b4bb4ad4a1732ed5ed6f8b3e7c86a4d
+Output.5 = 681571bb60bb0f420cd55335aa989a17bcdb124e25280ea74179f7179da5fb8789276ec5aacfcd1369d31ddc2bd42f3c30d9555d529ee967ca01a27ce5f16967f3fec2575803c0b5dde71e9bc9bc4c4ec68d8c4c2caad24bb00144f76b41f0563bceed75f07a7a089f6e6d01214a9ee435c6d4b12087edf0773d33e84ce82fb3b376f7bd0c537d28b659040f92e8ed126734ed9f9767e9ad08305ea1045e243f9336f8f5876aa832e10ddaa65901883afd139c4d60291e0fc25d01aec8d10173
+Entropy.6 = bf942c2dc6ea6c13114cdf0deb79647965122d158dda77643d7001bd1bd29906
+Nonce.6 = 6130041df0c0b3456836b7cdacf21489
+Output.6 = 627f48a3386b67b9b26281d25f9a63f1e31ab02b4f54f777e4efb010d5adf57a31a74e933d38039477d74a80a695200d0b59fea4277f291f4f4223ecc5cedc023136658badde9608035951884956e471bae6b93799af10273460f1cbfc4289ba6ea5245e1e9d13624bddbf24a6f3669f81eb8f8490c0eda9a7698b66f743a8f1f2e1f29b8f99be0c260a59f5f2210b57b44ba3cab90d5b983fd3608db5b5b75e935fc246523aaabf9b90d9689bf744144aa4c900b5bcd6735d7808e12959d40e
+Entropy.7 = ec994004c471addd48523971bc232c4eec91548f1a149ca3119a9c9c444d4542
+Nonce.7 = 5cb34f0f0f24caaf965ecf734c120e5a
+Output.7 = 89563d7c337798fa0bd9cab2c782658233a8cdf9ff42f1824e4d0858e8e6a02ce3c0fbc4f96519211563b934bee1a23d8848055327218646d1599775b1b03777382745e6876a35116f2dbefc5a96f0efc584887e49966b8e0dedd726cd11ace6c5a57e9fe6330d94a50ad020a4254ee5822216c4ddd122c085f0bb17c4ef680c83ee832ac9788eebbec6eed83f55e6fda1a1860db780366fb007369a0e08f594e19d104f7599c615512c5ea7fb2e736c39c959e6519288987d6e1fb17674db8b
+Entropy.8 = 6fe36237f785b1f1f423486cde5ed636f8a3f63764b3374ac78e07100ecc8f08
+Nonce.8 = 17dae741f00878fc5749c1b91467e196
+Output.8 = 9818398c6c6ecf6cf2689bf8ace75227d906139bb6445f3a290ea1280e796b2a2809eb5b73311029bbb3542902ebaffb2e778b0106683326d0f63da777d4d64533a5a3e1db014e491e8408d9c0826ba560dfc89626c9de8da1b8de7f38525e9b947f600f6ada514758c9d2f9a2c30af2fe133c29b4673087129384b5354373dd79dde1e09d9866b7db13d3b6f8936ffbb59d9e7036281d5c67a819527d85584f31e341210772d1d92d9bbd6da162512183fd9fbee285f8ab1aa3c37424635384
+Entropy.9 = b3dc10a08bf993887e6f832c863002179269053a902ddb2f8be64de85a75e2ff
+Nonce.9 = 6a73b04b74634e5402f3675e92c51fec
+Output.9 = f76d670ae68e656bf15f418fb608734d5a729e8ccab91f3e1e026b741cd4db1a146c95dd6fb40a5913cc094af37d42f9420e747ff9fb9993b554f4b4c576134e29ba167178d00051c50ec8db6ddab31849faa888d51e3172f7dfbdf5511d71a9e421c63fd328e06bf24c4488b89a8c12860b4f50dbaf4252932f4fe1d7714c79160822e6b09326e8ab0f6cebfd37b7b53aa63c74eb23f9b76b6f88445ccb2776b64517f0c4460a3b989c280c04a833e14c45b4970c692e0c11a6b9f7980d87a3
+Entropy.10 = 081804a3b207c53e2dd569fb43e8f3a1d6c8e4c7d6dd929f640f9ca404b7a392
+Nonce.10 = a95a8412e7f34bed1ee81f6d4a118774
+Output.10 = d5e4de0d78fe49c8e3524fe3e3e8f040689f40278027b677c750fbc8ca04a85d9da9ef0104e5f77a923e2bb16ebddc2e75d0ff1d5dfa7ede9d8b346e427f3b80ae3034b696563f6e2a6222567e7935cafc82b754a920a84d66855f17f07da945e9aae60c58fc8506677729874900cf90aa0887b1aa25e83855040b529c1846739e6de886c2f72542bd159812402bb5d89b0ccb2505abb97802e748a25a879a28d3c4275fe2c2e63ad88e6907f405066e60362bd5f06a45fe42549594d4e68830
+Entropy.11 = f5d86fd2539713d7e3f781b2d923ea5970ee621fffcf0cba495fff1e5ba901bd
+Nonce.11 = 7d3e11364599ed19cf455b8a450355d6
+Output.11 = 0f79515263336ec096d018ada253f63cfd5c69a4f65c3893087598ec0a2e8a569243fcb4767d9dd94a1e6cd8fab2cdc4cd7d6dc8015b14e739341a7715d8e2c699bf9b2310cb83bc16db43cdbb2ba02aeb1acd34ed0b35e29cc109d70b62d5f2ee171bd1167600c88d2a2f08379a2107778508d9ae0ca6fd5414c3bbfd02458445790354ed9429fc4307678f448bca3edd50bafc64dc48441286f14669a5c6691c889ac4f7b89fb146aa30e6747c8838d48be30fc483d74345a3de5e7100a57f
+Entropy.12 = 4e39ed4180d9f4cb5fa769f483b3b9febe6e17d98ad1b76e0ebb3289106070e2
+Nonce.12 = 26998b626c94ba599a3fe052252de22a
+Output.12 = e4586c88e74825a0906523ef8f390829620bdf3a06f14b93d6383e55d39353995f8cf5d3251cff72caad6d109eb4b0f4dc853a80ba9bc49a68586b07e9d4dd18f31d9a2c8920dd8b905ff58df378a2eb5070c417abd65169a250b35a82344978793bf072217a652b7ef419d55447ddc349f75b5f252c36378d2f4b35de0ee0cc3aa6000ca7e6fac5bbe36af85523b705a91d2efda5d114abf51e6e63bae08280ab019c6cc6a66d91c4d3c9555fb92b79709cc2f55d1cf86322c5089490bed82c
+Entropy.13 = 40dfe11932d986451b0ed314510977e47c22df026dbc3187e4c421b4c8b905a9
+Nonce.13 = 9ef4615b4e45760341286b6f3c210c72
+Output.13 = d2c4243b4165bd5e9a5c9057c1ce4c65f149f45719e07f2df87980083868eb48068573ef853a4ea84a3d18ac6fffa201d0fb7d20ad2934a80b4ef9dbe472ddbd7893cfe1fd9e947ec05e370772f865c86161ca0ba57e2fa85b6350a4e6dcad350f44cce5f3f8e0a9b53da9f9db98b2317220bce777968a05e5a31a35b6b57335090ff4d002ff384f4eb5ac9203ef0a67e3bd8004fe90817e3f2bc671b7444b768c79fed4c5cd6d0f7566681200756a0cad121d0c32341aff8787a8c621aef4d7
+Entropy.14 = 5f28c73baaabbc09e8260df3b3577c21f2f02be057bf49d2e73098ed5ff67f89
+Nonce.14 = 8c2f85b546903d8d4c10fe4549c3f673
+Output.14 = 1563c678f1b072813888970996af33c2a6b70b8dfd2e146c46df0616509382062fc9c72d223ebd555f4d8892aafd7b3b61619559fe3d3e7b5e83c07f422eeac912ca7d8858a2d25b966a8b34348b8ebcf44a4651edb9cf5a886e383b01423322ab3002edc8c936aef869d7638f38ca6688c308d2a17fea0ded21901d8e9f1ff8508762cb1dc7e700970938a0ece74c1c2d1801230ea785165d62a7ab0d6d59caf36b30be8e2e1f691210373b7a2866e32ba4b49b6a2f9cc9b80aa1340ef5c76f
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 62ebb24eca06186c05b826aaad2aa51f15af60b5f67ae495a0191f91434fa537
+Nonce.0 = f003879106f41d940f4f6f898714a097
+AdditionalInputA.0 = 6483e2d4b227201b9609ba30086405c2050aa02f36ef135739dfd3435fa93558
+AdditionalInputB.0 = 6c2089692cd0a67b498424fa54f6ad6842b5d34626ee299dfb4bb4d63f942a3d
+Output.0 = 2704c3ee59dee5d5706cb628f79a1efc140f7136bea8e86d423b40bdd9aa593f5fcf64b4af633a664f7e8ccb581819d32c202da5252cd56405b4996473d156700c99443b5d0dcb6b54c1860a8e7f5f5c7398ac6382c7699e8c3f477cbde5885bd6a9d5907923e8a4f0099c88cde1d7705a41a272ad9a38a1175efc97d3b71b84f22d3b0cce3d1e312961cbc33a24522dd8c98de65da91c0c9023934167cff68dab4c5d7f16c910e2d0b8874b3e75550284f754ca212cd7e691825ca4547da456
+Entropy.1 = f3d4c946892fdba3b23baa720c06444e34efe30d1db15581d5f45dfc59c04049
+Nonce.1 = df6b5e90b78881803b8a3df73fac0c08
+AdditionalInputA.1 = bb12247ceddca5fb0a570e0765d405d40af5ff72ea95e9a919d2fb9ce849082e
+AdditionalInputB.1 = 26e4caee61172df5fba3c3091a27d4eb3878c32b6c7bc40c78d0de7bcf40c9d6
+Output.1 = 3f8e62a0a85b13fbd024ae94c52a9cf778a5a8027cb46fa58fcb346dd71ea3b617afb5cd971da5244e96cebd31d789caae52f7d5e8efc4afb813a6950cce1705c2ead8de6f0e4e6043264b2fb958389f48382c0885f4482e140201ecdf3b678427c5ab07184505747a02b0ea53a7d917fa9ee8a7aa250c5435768815a900d1f0f3cf5ae5fb39921e9c15264a14b9124aebd62b96c354c867e590d2b04e414e3bb1e0fc88d823aeee189c10b75aa200f40817bcc8c0ea9a2537431ba32df858a7
+Entropy.2 = 893ff8048e13ec4aae35a8f261bafb6a8409dee911a2bf9ec3d6cffadf6674a9
+Nonce.2 = a994bacb9ea65c5bcd8718163c1ff927
+AdditionalInputA.2 = fcb46c16d85039fbce1140cc43caf000e07414aa9f796cea532e6811526ef9be
+AdditionalInputB.2 = d1a953139aeeda6419742e888ffb001bb0b724ef8703e5a17bf3e91eca5f1101
+Output.2 = c3d408d988b413b5378a63aa90bc5771a47e6f5668a1270eda593d30e5979352789aa71489d8b991f55a3f3ad0aa6d0c751f7c82559d0acb768f95f7e10e74d21bb54aa680849a41086fd452b0798e475ba5a20bcf13e83e7a40b4532470a677ae2e173b9bd873cf2e682d1128f00e8d26279049a2c2059d0cb87e48a50ea159c9a3fde6d8e0095da79e3e7ebae25dac67d2f5d7d668c4261ede42c0b906f445e1984badc8cda8e79f8742253e54e7ea5a71b177bb59e0df683af46464aad970
+Entropy.3 = 03c256ec2ec0f2860b511c05dad74bd8a19ed41bfd01992bddd40c2bd0c7e306
+Nonce.3 = fa7568f856e3fdd931c27cb32295060f
+AdditionalInputA.3 = b93d57cbbc837704a1fa827eae13860c99f5a678b6638302f7a87d288ce01e25
+AdditionalInputB.3 = d4c3a02ccf562abe26720dec088673844d340cf4044cf6e9df08404b1e22a860
+Output.3 = 74c05cab4d6f8b201ffd6e7639744af5c2318cb0cc7330a0f564b20f608945b6829259e053a4e9e130a9345451780906c8a273d5f21b54dd894386a318bb8accf151e957851b7a9c1ed38f7a2f2d8809abd4c6a8df47aade5bbc717237970cda18451e1eb215f4679f5d48c3f35a2017fcca89da5b8f2c9161a7c6311d5b8bc6ba8f897ba39517b5d46a6418620ef936dd9571cfdfa60f54645421ac51d9ca1c0f46c87f795e49a5a6e13dde458e7c6671166f4b445518f580a71249d251f699
+Entropy.4 = c8e1db988eb9f4d323a570b9d112b6c4797c20adc2974d69c6ebe4522d89f219
+Nonce.4 = a48fdb886617cee124f8f871768cb6ff
+AdditionalInputA.4 = e513b0e4f78a66e30fb5a58693d1ae636662ce7dd4549f059e8198fc657053c7
+AdditionalInputB.4 = cf7681d93770f28d3ecf433afb5996f1af45b317733e7ba7f8b9400147e2c5a6
+Output.4 = 24ce04bd31dd19c28b04d00c0b60eb8b0f38bf804d3727ee1d8fe55f7401960b6fb3bcb729baaa6722925c311910f186454ccca438c01fc9a744ab329819238181bd74c1696e5b0ae5a91c9109e76dda66fed6638ccb26424c12dd1041fe95e627d600f05756a9dbb5c21bc239a60b56dd4c857b826f8cb434e39841c7cef93c4bbc84514eb7ae8b1c0c0b712286c1ed105392788d97e772227428df55ddf009ecc579d12a1a3760587ffe4212e182b06099f2dd41a46625b45245dd0b90b290
+Entropy.5 = cf9485bb0722b0f7c4eea2fd0803d091aa580a94f6b381173189dd086d62eda8
+Nonce.5 = 932a4bc330290c41cd5cac29b1f377a8
+AdditionalInputA.5 = 21fb157190c749153918bdd7c109c921958d2d52f2001d28992b30f71e3ca9a2
+AdditionalInputB.5 = d21eb68721e8299d67ef2487482a78f13ffb5f7903683b6bca50e3594966c0bd
+Output.5 = e26a721c80b02f9af013665c5bfd036342b4457c2e5160e687c4e1ffea31d1137a49c1c15ae6b91df9a4736c0e0a41fdef44a7bb031f31bb041f9fcb4ab8829acbf45baece5b0a0d30a402fce6b958793209056b9f15a374cbd61e7c39f8e774a986c2929a659be9a7a4b27c38c880ed330200c8ad5e88d70dd9b67eb0971e577d2341dd56eecd6adecc59db1ae49b898dd7c88929cf3b242a2d0c23d9123503eb1254087fe64131c9747f8b4461008422a1ac0640c1c7a94295e537d34e76d1
+Entropy.6 = 36ea4a8984b22ce3c29e8e9fcb139925a8588c2d8a779d1b4a0678ede2a0307c
+Nonce.6 = 38f098d86068e3e51a1bc42792503204
+AdditionalInputA.6 = 43e2b1ed65db38caa124f8c3fa55f8d7e9233acc09a9243852847458bebb3ea1
+AdditionalInputB.6 = 0b8bae69d568a82fcfa9c3550a2c251cbe97e21a7ab46d8b21409810612230c2
+Output.6 = c01be0a9f5afc8a79b7364995c048ca91aa54b2184d596a99aec552232a3c8e14f6a472751d8e1f0142fcc2ec70916422ae7a5756cb0cd344af926417615a2f8476a09ed917e111efa3454945fa132712b4caaa0ac21c65f05e2d6abfbaefbac04959b5386d4c2fc6f817c372a057088b9379c05755c9c90d5ce0c936a89c824047f2e27703b103bd9dd4e924fa7f0fb8c17cd8a2295b2241c4e19c209785acb88e64f8de201ba6cfb7d823b7afe7762777ab5f106b64b47274815d34ddc1831
+Entropy.7 = 6b4c8418bac43ec55e67e1bd326a269f6f07ecd0e26e7ea9f8c3801693f5d140
+Nonce.7 = f17d963379dac92619b2eeba2722d402
+AdditionalInputA.7 = 6a9e1c3143e34fe108c82e3be6d77c320c8e645eebf320f0df64d5aa4be880b7
+AdditionalInputB.7 = cf2e1d8c5484acb5ac496340feb1e797d523b5036cdb07c5a2bf913fb492c3f7
+Output.7 = d9bca67a13517efeb1ef25dbba66a4780d32f16243b11a58cfb3d69b557a9463151590c7e40f8049db8df3b13d9b36560023cc40101e94a2db342e857c9a9ed879c67ce4977038744ff07cbaf7987bfd9b63f8fcb14101cbde0bb7d26132292d0d0d957ade5091dfd161d78b99110dab1c40816a30cf976ff9460d9420e3c110a82570972708ef162bfacaba62d93c424bc754fdecbf8ad95a81ccefc76a6cd943c48156decae06305e7a781f38218b0d7f7795f70d8b09fe8c0ac49335f7819
+Entropy.8 = 8b2eff17d531de72a8763d63c16027c217052ca321dd1db60deaeebae810b2c6
+Nonce.8 = 8c5a39e606fff833d4ee2d409b101efd
+AdditionalInputA.8 = db87d8bc10cd391e143e78ec5e1b51e9e33935a652d9b878adcec8a9c027a19a
+AdditionalInputB.8 = 5105f07bae116d056626642e4e2220e9cfaff7acb917ee310e0dfa18787ab83c
+Output.8 = 387f7fd397133081eb230c6b787e252a0074bd06169e86039c9443822e741b5c3740b159b5d4416ce6f262475ef8c7a8f85ae5cd1e7b49b51059ef819a7771418a8254befad60f8bd74cbe178f34621d4fb3bf4f1162cf82a2ee4dec54ab7334a0ed4fa4161883dc8a55e646ca06562f605c696b8e25086e56a3d6f2c44b2c381a0ad50f3021c7123064a62faceeb209b8d1fe0a818b54e468866cd5e5e1cbedcfb3d5a8da1c9f924cdadf7cdd6184150d902bf6260116921f51d4f175e16097
+Entropy.9 = 73572014f58acd41a507321ec56f1a1ea80f2415fb6acf1bebb0cd326c29533e
+Nonce.9 = 3f7a7ea2593ea0270e57c81d4ee8fd48
+AdditionalInputA.9 = 676845489c666b033a96640cb298e46cb63a0e00fb1bff9e8d866021d3a01259
+AdditionalInputB.9 = 4bead56cd537b9de0cb0a45b86a1e0da6524e6d0ec7a9918c22f8a79d07882e1
+Output.9 = 5a90506005b5b45b983f667d57c5946df51e27e6949ae999cdb23c6478bc9443437f91eb1b66ec36e68a593c361baa2ec0a5787b35f412167202371bcfd694f9384adb628c8356bc183dbff40e3c291e0c7c965cf66eccbf27f0174615eabd9adb4481428c1ba2fc1dfd7197eb7b99dfb4ecbb4dc23b663fae6be5c7594ff56f87f658d4aaf89aa02e7fcc59b98b0ebab14c33c73b82805b7d1582bc89822561c214896e3cbef8b5c6f693ccc5e71d7297e0a5771f7dd184af416e88bc2d2832
+Entropy.10 = f065ffc9ad34025af4ebedaec453542355798f59e38d5f2f774c9f2b2e275445
+Nonce.10 = 254ace0f50592f76b935a0c363251d13
+AdditionalInputA.10 = 6e1fe2921fe0a965c1c07542a32828ba8d33a18cf4a817be26931d11e3cf7c1e
+AdditionalInputB.10 = aaa0e94ecfedf60d871aa4eb3d7e1520acc3229701141c16af0d64d66e033185
+Output.10 = e2154a38f44222b66ebab4879e164bb83dfd44a7e4ace9ef5d269ea4b4fafe809c198c3f24dc32af488777e8e49ab1dc45e6e77136334aa1a3bb5a96193ba879d4454ac5fa236a96e252b72a0d39b896a947620ab4730d617006f24ce45198a42209491824994a3d4d477c3c9c365cc2c01e490f16030b3d27b2a3387fd69a5a8794262ffc98a00f3e2141f6e08f1749cf76bec952ea03cb90c3621cd680a47819981960f1db179aa13f314c1efec8654a92297e9e3ad7925f6d6e538581a387
+Entropy.11 = 526505d862fca5597370a98fa11a57ae6834d33e39ff2bf388d4ba0d6031b08b
+Nonce.11 = b0028d2372e811884b5cba8d93f8e75a
+AdditionalInputA.11 = 05622481ff951cdce6369a771ae1c7ac3a9a8241185cc1bb26cbdce7609a7058
+AdditionalInputB.11 = 3ca8ff7ce83ff9bd1e13f0a048bbbb07f3968193b3e842ed3b12d583b203a60a
+Output.11 = 7243fd41bb710525b1934a9a15e91bb7f48d044f449abb6bf8462a80ced8bff52febab1cf921c3624b112e56c34e09de2c8c4a0b281bf50085b2414be9a1515ee5990a430e61cd4e91c0e4c27910538aff996673d841c713461c68e66e7081dc55dde20428292198abec7f13da9990596e44882f271f239ef894ee72b056e4ecae1830a03fa49bcbc26d8ce07e80976ae7c0ec7f567d004a4047360fba84d47b82432502a685acc07cdbb487ac2d83205c84482bef7d65a121533451ff22eb41
+Entropy.12 = 70aa28a7f25d610abcf55bd2993d98ca26b3e17335a001007c3d6d3c82df5821
+Nonce.12 = 99183b198e03e79e0600da5e09485399
+AdditionalInputA.12 = dcede896405bbb26e6fef3569c894367d8878a1f092f516b568bfef6799c371a
+AdditionalInputB.12 = 3d73c345853ed5945da65e43513673f773e436be1aaa681f1678558bee65cf0a
+Output.12 = 12287cc2b1ae1e41cdcf74394fc6aa17277189a950b548f1c204df13bfb3ca3ea862cc6e145377e0a986030ac387a24580989ce8af650d3d17359649648323eccfe955d8c9c591480f27c670a00c01749c139c8307072ec484743be8dde791b0496d663cd4426bc6b6339b565be53b85b2be0bd3fdf498b61da7876c76a7d2d035c90ff7a2ed17a26e5bcdc498389fd319da44030c8a36f39d034179a5a82c3acf73d3c9ff9851ef80bb17e13f6abdb8713f04e7748b8ecf8a5af10e0f893e22
+Entropy.13 = 86038c7e900813e50d45e5280171a3a71a66405ff28608dfc4ca895c998bc04f
+Nonce.13 = ac58edbc686abde8c368b36a97690521
+AdditionalInputA.13 = 3fdd34967ac56776116576e467142c77f6bef74bcc8af8a368529f50a13e74d6
+AdditionalInputB.13 = 0f9aa920a18e305916bd0eee770a510728710dd7b78d9ff736fcdf682a1015b1
+Output.13 = a64bfbd4b9bce3773baf172cde3f68da426dd6e4ac8c806c0170e0d028913f4f55eeaf1b18ecf9748ff4f0d40fff963cdb2d4369ad4490d2222fb0991c138e117e2b6a0beb3aa7095796dcb58671772ae737ee5003b67403d6e7bbfb1f9b73e5eea81c229fb7898db28ada4314ec70ff7bf26aa5dc9d9e1fbd05698d35387386d70a9d1112e09b6f2004f645f650b97d44f7191f3cfc5d0385407d369331226754e6b17bc06dddad5aab80f20a9040f1f78ad3090de9e5315e8b59bba8302435
+Entropy.14 = 1514a977bebb10858a934df7cc34da90e283e3def25299f43e36025b92dfbd70
+Nonce.14 = 857a61b0cfa5c0fd647d6e8dd679bfb2
+AdditionalInputA.14 = b5d9cb4b3709adf297462f1aa8875c9f84bc39e323b8fe1c0df269344e5035ff
+AdditionalInputB.14 = 5e47728cc468e0d2c6b6a90a20f83a9f0565716af54844552988f1d8c3a83eb7
+Output.14 = 548c3496135ecfa1119098ea2d862d421af024a844c37a02142e2545e4ff1038f4b73c7f6b7d0fba8f92f292cf5ca8fd57dbe7ce129423e0ddeb1dffe89252dd6b50495c88f350bb77e08c8be409064f7e9cb751aeb779eae30b7c471dc41365f128d22474a7e90a9953e948642001f8e6ba8f91d250d8b4c6407892cd96b12e5d94e4d7608e6c11604357436c8d1cc07a21aeb58d396f413a31f72af1ac06864ba68c04e0c25971c1315f5a8c5c04fe252105fc822452d0cf66f86af13d613e
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 3d8c838b13b1a2ae1624200fb734273e99d7cfd1f5664ddc0219f843bb989ecd
+Nonce.0 = 86a712402f94e31a77c4ef90f62a63c1
+PersonalisationString.0 = ecf3b9deede92f0db083c357480e5aa35052f04e978a1244a7510db146d7fbc1
+Output.0 = 560c30e54c104655e740855b42ef4c1f1b4a4258b9b8848d872b983e95feaef1bf5b90d0ac269e68127296ca822f5df9db241326ebd6a7ba08c356884162551e396f2507107f1877a253d3ab772a9793e0cb568e7f0a8a66852f5085840c9df500be130dfbfeb4a5fc8b67b36511a865d4d5446a7e1dbb8e6370eefe8b3a7b19120198a423c3780608bdef537191b05cea2322eeb16b5e58e047cb647a2aec836f050f241f3135cde6d0ff9ad413c3420f13be4d410fb16f513af41e3dc7219f
+Entropy.1 = ce4ad450a33d1ed41710164acd23563a6a0bcd8aef890ddb5828537f15069e59
+Nonce.1 = cd09493ff51e749b4fe30f59fb4ad542
+PersonalisationString.1 = 0515e1a57e69ca196748176ddc4e3d2d36aa1976755fbc06d8874dd9debb36f7
+Output.1 = 41e75940f9b806fd1cccba476b0f6b9ed6197d38d5e8e1f37a9b9d2f595973381ac51764ce540dbc33223a69b8f8dec7af0ec55f073cfd938264576d92c16b1467af6ce9ca7bbfc08a017e5706beb658b921335f03d5b270decb19f51e73f4554487cca15dd4141f23c2642266798a71d6b07bc40a6bda8f1d3783f50ef5aa0b6d4ead3622c841fa01ec626982722890deca6ab049c3b2e275521af1ab59afb5c9d660fbfc03ade21f4a89403deb6de6f0e433ce2c1fc03f2d8bcef9d60127aa
+Entropy.2 = a245a692d7a3e240eee4f4ac059f213f7bb649d58ccfed3182968c62d39369e2
+Nonce.2 = 058ad8521a26ed89b55e47c737f1a4c7
+PersonalisationString.2 = 6811a882b926875a484853cdef9738c212ce0661fa63012968a14239ff411d89
+Output.2 = b3d0c6015d7c7341d324ac1a17be3ae63e9132f17c9a48db50a75a36f7562061079c716b0ba0f5ee6f82c404ebd0b6d9de0c1697ae261d7e0d4f9f43ed32665fd4e182dd813548682aafbddb92036dadac28667e474935ea5e221fa16716018c90ae60dda369b20676ff7f5bf0f130525c2b0dd8e467bd0dd4f62b0f69bd988284d539f1861d767874bb3ee2ea6211090de81f1687ada0152500474566d9abfac236535e4d6d6b2c39ebc79782c7134f56527744df5b32a44bda3432987914f2
+Entropy.3 = 9eafd49658cfd5a9873ab83282076677c8bd7ea1b3c9ca92181978824ae486d8
+Nonce.3 = cede47939738975ac2853ac07eb8a18e
+PersonalisationString.3 = 8272c97255b3dbbe53ecca41250013454b329e537b78c4af82562bcb00bc7e86
+Output.3 = 6a51b8fa6fb18fc3957c8f7f9828a216fde6f1a91b05d8030882dec9f4b37dbd5ec0f4cf9ba2ab27c9df0a65ab1e795ef830d13a1c89ea958d5dfcba302e34d72ec8435abadd874b9772ef3e53d297f63ae3f902b3df66b0aacd540207aeb772cf6a962ccc7280f90372efc036b20b829c6a6acbbc71bd078f6b2bffb37095333f551a7f6f68649c8334d7f673bd223fa00e2af7549a9289db8746ebcbaffd8bfb59b58b9455cf049a6e02a4b476ad5e6e7b8c891c6a8adc1a5a279d0f4ff5a8
+Entropy.4 = 58a28e11822bbe1a41e32a8be1d27e8de9668381c6969b4dcea864d70d7bc367
+Nonce.4 = 794a3f1067e30c754dc96102a436b9cc
+PersonalisationString.4 = 3347257112059266fb1a4359e8350479aec27b4116eb18699fd5495e4a3a166d
+Output.4 = 1f4a0091c2648cdf9d4be467edff582169a0b6b73da859015cebac9bd2200fdcc9b109b6b703b35c238ad1551ad4fb45bdc0b5dd4c4814158c1c7641b94e51539dbeb8261a818afa68fa5abdc50eb9e173472709e9686495d2072065963665df41b94a7a94ed0fbb5f9a6cb851a530e87b451ae39c59f437ed16ba324221935317f256055dd63b1631a1ca6d4e6e8915dd79b0250d83a3cfb117eb299cbe3c41f6708e27d62c8959df445453a1c8282f87cd9078104d9e2aa83d3c34b00eedc4
+Entropy.5 = 1c644ffa4e1561af95be8b59a4aff572bc345cf942f6e8c1ead6d2b35a39fe5f
+Nonce.5 = fef59f8881294588c486e6be0cd177f3
+PersonalisationString.5 = dd31fee7a712a0d422e9760dfee0b08e09bdc1a2b335620a7aa1bd520bc0ff57
+Output.5 = 4ec5f212b020ffc80182ec4c8766bb7ebe4b152c225303cb1e17ff6f3319af5bd6d78dd5c4b6a7bc3f457fc1bf73ace8a5d83d046d6964b9cd47102ca4139156595bac84043adb5b017db046504d7036f2c5430cd9a4496f60d041e1f11a08bb716dc53e861a18ac8547e5f1a93849d70d5c0098215b1b231a52f1ddd8cb1eefe6f746603caf5e9eedd35bc0c1139949039f725861a768c02708c4180c5c83d4488cb37fcfbafbda3c2764c3a9fd97280a9f2dbb285340c9001378b43df93d37
+Entropy.6 = 861ceb71a8bf4f9c972bcd4a0303c31c3839957d14f97fdfeb44ee3e8a6943ff
+Nonce.6 = ef359fa8a16d7ac5eaf8b705f8802166
+PersonalisationString.6 = 7759db318373f0b45ca5b569479be3dbbd44313bdcd1cf674dbdce501b5c5289
+Output.6 = 96b7fcdc5767af289128acaffcc46a7f0b40a2c661300563880065ec38009898d44ebfbe3dab1ded3768b5a13225b1a24f541ee5d8effae22be4df2d1c78b09fc087ce29808fb0cf3ff6638d03075e62100ce032d8e171bc742e9e67a60f4afb5e77c70376c52988cd5979ac3840bc432d63fbe8f783669c23007102bdc733b2fd39f3e26af0f9da035ffdb84d2d802a544457b7e762b490c1f2ee13b313f7861c6d666ea82425252ece54e9f82b06172fd1df73c78a37970a6ca9c5f34cef5a
+Entropy.7 = 8e6cfeb8efe01efa18f46c9cd2441f23869999ffd385470928e15f3aa00d4871
+Nonce.7 = b3a364dec4842609ce8b32ce50d66a61
+PersonalisationString.7 = 681a398b9a1b2ca78566f60bb39324cbfa82dd9194059c32f9ed3bed1e710513
+Output.7 = a6dd28b76f702ba30eeb580e753333ec6b5dc15295d7ebfd488274a07e73cb3a3c99fce2d51e84797466dcb9c8804ded9f7d1cbb912c18c2ca84ea18e2d527e6081c30460c2a6780ba09fd9721ab28a337960c9c8b923908617c8ee36baaa8cad6cde150fa31d201b164288378a221e95aa798155943d567f9e57eb0eef77c35d382c2d0453d46e9d5b8c537db0acb7fe1b0c890f9ed3248a171b8f96cf65e79e735f0abf6f63011506f0b596f89ff2de1d3a016a9aa92cbe2469304da4b4913
+Entropy.8 = 299acf476d2155f4374624a8ba35ef3103fa6e56cc3e2ed445cd90913a70da46
+Nonce.8 = 5310710dded27361c092b77cbd923a4d
+PersonalisationString.8 = 5bacb4ccfe5a822ca5e371eec873ee668427bbba80f30779c1b86b3e62a7e7df
+Output.8 = 661f5ecfaa8b55b344d7325c97d007a3b12b8a1b6d26c6ade00c1f9addd9220b6b978523bab0882c787a6cd8318d8d3a0f98a006092317f9d82a52da07eab0e1d3070c464df8d10a0d9827fb7e776e4cb2c8851a539fa44cfeb7d9c489e55107356a49c309fcbcfed9c10d084330f55d199fa9d9f9dd0d70dd4bdc0a9325351528174dbebb304c85e35a6214a261448d9000de9ee19c81e3e73715201b3880c89193bafef03cb4d7610ced9021dfdee8450e410eeb3105db27b98a8b77bcd4c9
+Entropy.9 = c7212588ee610d8a6966eeca406989c3c46ab0bac021baa07db4d2263f00fd26
+Nonce.9 = 1990f704b819461b247c77ce9b16201e
+PersonalisationString.9 = d06e1f51e9b5e6e657c44ac158039ac0629644000a460807ed5a6bb95c5cb8e5
+Output.9 = a8a625d9573e997a6bbd5cf720e23debb78943f8273460b9582e79b4243184101df5e3054c217fa3c105b0548a37f256668fcca3b4332c147891fcc9ea1f29119de2e4d1c2949c85f0fadd2bd3e8456455bf8b51d60e0d7f6464334475fc881645c10b8cfaed9f5c811e2b1d9cd2a49ae2555cbcd419b44508b569ea43f549ce9da27ade3947d3b6973653356281237311f0ce16e68935fd046c48275a7ba17de6409f6bb26678cb58fc12d8d71d47ddb6e03153eba2c063d46135ee762b27b9
+Entropy.10 = ca0e42da77a3a29b3cd9952f931ad932700df526e895389d5b25fb1147d03b05
+Nonce.10 = 8c9e53664bdd9b75330718e6379f3758
+PersonalisationString.10 = 0c25284a3f6306402bbc96f67449e0075a1437469ddf922db84df16f9be3e976
+Output.10 = 1607d57308a3c98ad91001667cbb5db626fb77eaa2dcdae8e1657e46d920d708f01d733814ca952685b18d972e62c8fc799e7a2e2e0262405505fbf5436287e125a6b19d4f7180cf5c3f96f211cbfab4627a1c7d8ff9f7534f79b22f3d3adcf4fac015974b4f982d81ead08f9d7d31d474294e8fe519d00d70c983d775ba4709fd283750c86458944435d2b8a5eaeb090995851c321939c3d8dacb69cbe374a0657817638dae1a1e950e7fd9f085cd1198900ef05607adb3f0f515417220ebe9
+Entropy.11 = c2d015ded06a0d382af18aadaaa67a91b56779e13786f530afa2a694913b5180
+Nonce.11 = 0e74ecdf06f0779e6868c7d0004ee3c4
+PersonalisationString.11 = c39d1fba53cc1e066676bbabcd1cfb941d2d9562991ae9fedad3aae98da0e61c
+Output.11 = 969e37a4609a25ff5f1cbdb98d526b47ddd966ebe5cbe94c50fcb7250db8649ebce6a9c61e9891a8935968eeefa92c7b11ee3565f672f3df8ca1c6c17fa9a0f13200775be4ce7cf76f40bb60ce2b2690901eae1ae4ab9b3c2a36039a5cd05ca8a942e44bc8c99b170f7f5cf442240dd4d59b7fd85ea6e4fbccac9cfca8a804bfcba19c9b289157550948885014bcaeb289e023b8dedae477d3a02f2d95f07a54933c0cae71c516a74c783bcc268d2bba56fc58de91ba8c834de2a075a77ef0c7
+Entropy.12 = 3d968a89b6944455c45a0edbe57e5c26a1b7cd4c1c0703b5b0fd49ca9b767255
+Nonce.12 = b402078ae154a901061d1a0ea45af2c8
+PersonalisationString.12 = eba3ff1115cbef18d89fa59a112c2e31870207201a2719edf63ad55295c10373
+Output.12 = da7f439008741250e7525f61e1e980d662fdf3c396062de34d77d08b4b8fc5beccf0584875255647e0ad95a215c1293309068a2efd9bb13245e5baa1ac5cdb2b143a94e8853972fc9de5567794d8940b01d06407700b5dd1f498a05093029c56fa62e825597d7a25d1d6fba75a3d6254d2e759a2493468b7c402cf42e0e94b5ea8ab58e30e5d1594ab00145c65ec6c0ec2b535b81e2250cfb97f51a89f8d61faf0008151204a3e7521c21fe82901f5aab457d0f1f5456dd6e0cdd4bd96968b1b
+Entropy.13 = 912ee739f45caadd545abfdcca38f8b328ed1b08e28935ffad84ebb2450c4646
+Nonce.13 = cdbff46667365d6e74e5b32004114ec6
+PersonalisationString.13 = 0c64323183aee41ece9cfb9aa5fef5767fe42242658173b339c5b8bca1b94a0d
+Output.13 = ee116564835e608ffd776fb64056ab138e5f59f36b801c3d4ca900fde853c317641d60bb693ebda975fac51f652ef4d4f2c20c059cc5466e5279a235f7018243f86fa1e6b649661c84c9e58a876d31be278a50ee9c2de361cabaa1c3a7e085e023ff3623a7a689c8bceec13324a161669d258abf728e2c557753d26697327dd827af827543e50419909a5a95e214219d1115ee4d85bea60e89c7e3c15ef2e45c417020a0a28d5b1da139edfdc238bdf473fb16d1bb03d609f8de4a93c6b96f9e
+Entropy.14 = 3a4e2cca3a98a1ae21ae00c5a2c8a68cbc11f5130fd9a88302fe9df9c4612c0c
+Nonce.14 = d28f752f6e466e3fd9595fd380fa14b6
+PersonalisationString.14 = 232727310fdaac541b182497e5240dc2623a36b4efa7a912ab3ffaf9939c2336
+Output.14 = 3bc26201261930bf3dc164d25287e41efb47c07c8c5c0adf3e86613435df202116331cfccd4e07c9ef008c62d4199d937221a17dc97be2043270ecc605d3d48c609cbce3aecba3557dddb304f440250b2c9fd78838483e2d5a2b22015b97869b891f9e42afe21df5fbb8dfc9061468c70c63a14b6dcad9ccdeced41d021dc0ff47821415e8793d34377258d9d6629b9e396b9d6b8bb7fc22e03ecfd4890d16912001cb7ed002e33a595052ddf7b991c5607ab93c220b2122783d51a8372a223d
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 9c4a7f1cee91c735a698c2ee8b32f025086a03ef762c0bf29cfcdfd290240904
+Nonce.0 = 4cc38e77f47c469ef0518c03d93a521a
+PersonalisationString.0 = 043cde6d441c20b48d8493455f3b963edb5dc42cfca9bc9dc097b0da059ac135
+AdditionalInputA.0 = 4befb6b5fd63e30baaee6d29aa0049fca44802d241044e61f25a0f9f1132b038
+AdditionalInputB.0 = 17466d9beaea6732e199fb1a2f48020f0e804a45211c200dc500db6b51f90bba
+Output.0 = f488c60714f020b01b820fd5f7b8e7b908734a17100e100daf7f3e81dea708308056aecde94ba9a9eb5303ebe45427ca928522b0bc1ca8525eacb525fdcbbb8aa7632d119f740a5a5abd77529dcd0f555bf50e59a24b855e180adb6fe382d737fc76fec081b98081106932e1f64aaae912a69f5370dc287f09ce53c3de2c0a71fdf6c3fcf0baf241b68063bc13d6ed8fb2ec1687016c68acef80b48e98be7a35b92c199685784e444ab6e7a233d611e764112ef6806be22cfafb94341e79fc15
+Entropy.1 = 8e37c709efa3a8adcc433babdcae3bddf0d3beecd933af87c66eee45386024ff
+Nonce.1 = 11f327a64d39084283bc1ad8a0376181
+PersonalisationString.1 = 8b72244a0e189cbbaa8cfc19c8a72a8285ee4e33f3a3f15fd537392fb093287a
+AdditionalInputA.1 = baef5972f9ed48597a94aae8869db4affcc34c3219e46c7f733d282a2496f00e
+AdditionalInputB.1 = e3758dd41c305049b5e272a6add3cb26b7ee9417f8d74e330095f0bb5b33928d
+Output.1 = 9fb95381bfb55c0d0585fd2e75fda22ad43bfb0996186b3a89c70c8addad4fa6b1a5bb2c4fa50bb897604d8f4ea10be851d4fed5d43765a5d68a8216d2b6d0c41b480fc415f5bf0e2adce910ab6cfdcafb8c62ce73af7827d49eda5913dbcabb502a23b025867310f426d67957aa096c8e9b97e41f0974a2ac1c5495dd1028fce7f953d12f4601a298b1923e88ba4f3eb3dd3e5212f770efec82f84bae5b7befaf00f6fad747c878d22168295569ec1dda8ca49a2ed33c6f9eddb389f8d412c8
+Entropy.2 = e33188a0ff90b430fe56051f94dfc6ee84037f82ee3c422a8f7194eba1c2926b
+Nonce.2 = b629040f73d845ab33d092e5d954a75b
+PersonalisationString.2 = 8f996ebdac1611d632643a44e2d9b5603463746ac2e678b708406f6cd96f8bd4
+AdditionalInputA.2 = 810f71490df34b6d0f4816f285e21a43e6b55f43876268603cc3812374766e36
+AdditionalInputB.2 = ed26329e514d5c8c740cf05c3bddf88608bdb7953f01ce8f00a9e9a06bc13b60
+Output.2 = f9a8b3f0e16882d7ecd7b979a85ef4f8ccfc19c2b3eec990e5b65d5610fe8efd1debcdb5b7cffc4a92aeac9c5a11dce67ed391e7ce2e9da632be84fb203bddcb63de2f1036620ffe5ec6e85b4551c366539b6e4416f7a1d44f91adcb07807df47730022a7f6d124cafbc774b300f0964eab2a9ea058285d9f9f6af16cd3a6b920f3ab85a12b48ddb42593f2cae56582edd3e3cf413192dc21a3f20d1c1fbeda89b785ac89cfe1fd10219604406f05edd07cea23ed814c75bbb91426f5599a808
+Entropy.3 = 6da45724992ba90085a0986b24d6fe1ef77f0712ee7cc830ee69ae2d733c56d2
+Nonce.3 = 04d161e1881b09a555eff91d2185beae
+PersonalisationString.3 = 9a60291fe9f320e96c873023a47a831de3984a6410295d558001889b17565cd9
+AdditionalInputA.3 = 9ec3b7ee3c743e64f0f673e54782ef59dba6a6ca52078cde70da7ace645fb01f
+AdditionalInputB.3 = 529a343cf84e2af344301e314e0e766ddcb13daafb3f7a73534996f85b5f462c
+Output.3 = f725650dc59584cd6ee04eb233d3771ff8177c2532977521de3218fb545b84b21726984b72586b00c087b79fdf9e8dc26f689354ff4f1d2dd7b42ae8d9c04d815a5fc7d8b6785e01b10b9f43750374692924783138b54a7252b9a6d741dba653235aba45674ee0dafd15b6a203aa6cfc048b5ac0b4313b3b7ec17fb9fae9bfc9bd17344c6e7b98816845fb9597bfcd6e8d40f01ca91d87e50a2cdd2e14f81f3de2ea115141fea030b47a98e21aca914068e38191389a94155d7708f6aa5f4111
+Entropy.4 = e9985ccbed72b91cbb5e1a46400ed033a7085c1c52579ffec223a768c7fbaba4
+Nonce.4 = db103f830eb174734584331f9690bf7c
+PersonalisationString.4 = d048bbd7f144d4aabff87d2cb547dbcfb5ac0ed73ec7cb017e238904ed958f3b
+AdditionalInputA.4 = 60faf7cb810a746eeaeb28ce7baddef8e0fa4954e965ceebbad5008927563f74
+AdditionalInputB.4 = 916e8c9e766df6f458f0d81b38992e490199a770795af2853449d825a18b178a
+Output.4 = 8953e8f8afbddf4c41ebcffd943375a7bd525db5bb586a1d3862e8163b6293fe267f044c887586dd031db36e4a941c6d9b4bad5e15110c488a84b8dba638456269e7a08686611ddafaf7fc1c766a4f46174c2895dfe87e594592a9edf27ab67cb781b12b2692aea11cbb150bf5496e533956e503e1293186cea536cbb3dcd4b50efed5020a6668c7f66755df83e29e83d08dd404d87576be26b8490dd681888d3ad9270e589b8fc583261b734fd16224cece0927f27d103a508354e1140ffcad
+Entropy.5 = 6ab09ff6979841bfdd77d233a6aded9581956458c0c2effea998cb3563b9e13f
+Nonce.5 = 7ec8b20fb3fbe33784d1320237718cfd
+PersonalisationString.5 = 4de40daf7a43aaf1c132529f5605f97951538c739bda59125c1902b36a7afbf2
+AdditionalInputA.5 = af4c8130e8193b4d23c0f3ef11621a285eb8ec119801282d6e455e1a485bd2f6
+AdditionalInputB.5 = 52ce2a212ab940fcaae1edf647da13872af620a1d8af9ae32f8d6603a9a11a56
+Output.5 = b4364042f2a28b353dab347bd81bee069a00e003f2159ac5e9da6c9b05d535e829fdfb3788d448757e036541686a5248b79fb04fe37c362ccc19096066804d8952357606d357712dc9a6e15c57736befa4208c41ddc1ceef236efdb06e423c020be96baf5aeb35f94f13d363e0ce936b193861d8d4bd026907835278ec86dc970e81f0c46f795599f80694d691a691fc4636a7264d38b7b65d3dd36b313345cca89a62361af1bb6c91eb71734ce572a30978f6774020bcb26dd2cae8daf15659
+Entropy.6 = 661b65402f7556733dea9b83adc0ed0c21d66f3eab84647daaeba7530f27bac7
+Nonce.6 = 31db85561ddc9a0647b2da0fb3668a80
+PersonalisationString.6 = b7afef14b800513eff5cba58038702aaf3224d75943f8fb888f74e45622dc2dc
+AdditionalInputA.6 = 13e0bebca5f99716736b6beb7523ca84f3f5ba0c405bd20d490dc7080db3afd4
+AdditionalInputB.6 = b478a3daf7687405a0e20c8280bed3c14b230f1d4dd0e9472c948ac2246c4340
+Output.6 = f4bceed43662ac668c5cbc6a9c3d0bd44d50ee9bf8fe2668c487d5e4425ffc3db0e660f891e4f9883b841cbf036d25d533dbbbbfa01ac4d190b54fe35f585d85da386ba02be022e93e71c7de875ca2e769c2b324a2d63282b9c1d6ee2d95394b11d1391dc05f1120d16d4aa262241058b7fb6c873779b4d632573b307752b984cdddf5f3e9e789a10e58b874e64da23323d7e731b41ae980f9c11ae45fb6ea317a42af759fd8fdbcff2d34d2605fbd2901af4e3fa321ef0bd53e18b849f21180
+Entropy.7 = 4b0e29719bd4223673262342caa1ea6b1e18a600f91bb39fd2e77e0d96e57b62
+Nonce.7 = d5ba0066f547e0c5363e287ecd8fba42
+PersonalisationString.7 = 9f540579b05abd904f5d75c0e8921e6dadabb5a0e44db560a7f03820d5a7eb1c
+AdditionalInputA.7 = 6bb7571dca82cfdf45a5edaffb993adebed53f206990cd898e16261c8bd95a6e
+AdditionalInputB.7 = 2510cb7fe7ef4cf7c69e9c396afa35dcfa97ab8960e3f795b91a0d8a4f8561ae
+Output.7 = 9ea14969c373ba4190f7e6a95f9b73c9a009074d4d81f82be5af6d6ad49a572a8850b86f93efa6f06c79449c1411297c17921fc95d7188beb5ce6096c8fb0a515edd7ef32a0bbc2f372484525e6c6a51045cf068a3519811f4cc7d6ee5a3bc339d2d1b2c550455538dc3afc3e9b3ef85927dde4a968212265596285a40e5160e65e08b842c3f9e82e28d0e594c33ece7455688da678d7be395df515971732e22483656fb57f30d0915542d6a99758d797471d9b1da999aadd8af26efe57389f0
+Entropy.8 = eaee806076cfe84c6c5fda80fcfcc92f09431977685027c64953ce523bedefa6
+Nonce.8 = c5eb6526b3b2e6b640370be7987c520b
+PersonalisationString.8 = 60ddf3ac0890b0180ff2924f310662c7ba73ec2051af65fca86918c15e3b2d05
+AdditionalInputA.8 = eb13346d00f34e8e8b25db172ea8efd0e7927019fb30af33d6d4b52b582a0cee
+AdditionalInputB.8 = fd44e8f382296eb8c17ccbcc2edccbf12bd162d052bc1bcbf9199332d1047b27
+Output.8 = a235e1b8ce4a8d1dfc20e148641039e389485417a0ed2d712cf901a2b578a762a2ce58af3b30073f9ecad3c813bd585c9b8888c94dd6dca085dc71d8ebccf4b7388e360bb1772b09ff380fc517ba980f40788b3725a402ee229b66b76d9c48db098bedec0410e2223549659049700e363f8612bdda67de18c58f4679f8d5af022a7bfd24449a926a3ec4e4dab532a88e3a1932804713fe00f2eda4c652d18e861cc65fe4ecd90d252e4d884650e9a3be5a75ac6953434dde523a4971f2596046
+Entropy.9 = 8005d9db2b56ed36b3dee590f01ca83d2755097f2afe47fc8e7842a74d440660
+Nonce.9 = 0920c9b95399a51261c62656c60bd782
+PersonalisationString.9 = 09aa3cc1f3a5600bd324bf452cd2a902a49094733d963ddfb78eaadb96805a73
+AdditionalInputA.9 = e26ef8542413fe828876ba76efb14134409e5f70fc76c9b4c80c0b258d3f7257
+AdditionalInputB.9 = b02e484a10b5d1ca640d64bcb07d094bb8d47efd2efea25658a12c10ef5e8dbc
+Output.9 = f81392b0795df1bc3d0955f231d3d64044bf13007ce022fd64f903d923fc1c720572f111d6cae234a19830086558e82d2e0162f6ba80f26271936bed9298228da55a25dab03a8c92db0caf38350fea839671354006ed73ab84cb6967e0935e6dd06debaec6f883927bd00e371d1e1130c9e7b380429bee2663b35435c4fcbc3695c6b06071e83537f819e1baee8f9dc3c49af49f2e2897bda7a5731a40eefc775f99a2e8e1164e4bc6b26b0f84a9f9114a5556a13bf706722f2d2ce90f469550
+Entropy.10 = e326266e50f1e304eadd0c2e3dd81db72a32fc9437ef8e0fc2b77f6058f20699
+Nonce.10 = 2ef476d1bc540ff6724fcd92ebe5d55f
+PersonalisationString.10 = a389dfa175e7531c21b211deaedca81de96de398b7b31e22781682e5f3976198
+AdditionalInputA.10 = 30ec0a026fb30795c49bea9978492b6d38af22ef0e0464dfeb2eef8579c52ec7
+AdditionalInputB.10 = 8abfcf6f0a4104e39acbbc0be07e6dccbb820812b2fdea977e033815433eabeb
+Output.10 = 2d8a21901671b78eaeadb3d876ac0408aa43a373ac49629ed82705632cfd9cae9c934fe49a658c0d83ba27b803398cc1cec7cc55c68fda6b472430ae614f3f256c8b09a904899cd8ea8dbd5d2686c28f91c904349581071f56a3d34b7f4a24fa21e9327309e96bdb6b40240bb90080a124aadaa7d63299c189bd45f0b2752c4d3dd9716ed9ed1ac33c99db39470c98b30ba36404b1248f31986411ca500257cfa8cebe6eeb1f80cff0c2f3940f86c443de1ded1f268707ebdea39bc7bf839efa
+Entropy.11 = 0a5805548a372be592deebe0ce7b2d60faaf64a881467c2c736087b0f5646d33
+Nonce.11 = daa36d9cd46c6a56e4c4e660add04f92
+PersonalisationString.11 = 9540828f07a3e41c9fe311cfaa0ce1061f2feb5d7fa26332779551051290a878
+AdditionalInputA.11 = d0aa198e0f628d12433f928f3ea098bec8d1cc1ebccebf7bfc5f5bcfa7598192
+AdditionalInputB.11 = 93e8c30b320417e8365d77f14b955a5fb66e01718b715001faa0cf2e7e20317e
+Output.11 = ca7d9cfc9bfbe3c2bd778ad41af45165b51f4df197d66935d91c87eb4f6967af68ed8f216122a5efa693c4487996a99022ca38e4cc3e5ff51381f1e9e5454dd82cb18f444bdf7230c7fbf070147e353db51db91a66e4801b1f88e7d0da3ef86083b6c488a154146b57e1c14d6e9d694f3b2729eb557ec3729c18fab731d0f06aa1004f500ae5d07405f9fd0e1ef034dd45e30f60ff651876c1a5ef6a3565e5ec8a307827c0678dfd21998373df08f403437aa1ea60a505c291b965157aff4064
+Entropy.12 = 81fa7898cbb2de53b18834ce7defa42cd33be876a67dd9a9ff7e9c94d05b16a5
+Nonce.12 = 889292012ecd0512ec6a34a0463ee256
+PersonalisationString.12 = 76e142c7e33baefab8adeeada934e33c369b518e8c1e65502b8df5e05aa5de77
+AdditionalInputA.12 = 327f07aaaf092fbc83225624f3f35efee19eabe6171a8ea6af80b405134c2d55
+AdditionalInputB.12 = e4e4678588af6440b15f37a4952761c5c8c1dd1f6028ae8bbe5c73b8f7b4e7b4
+Output.12 = b1f4cac331eb1b35e53f134b868b2ebd317df782bbb438f9d62c822914b6a51a186683fab33773054f203d8647efa86ef88a1c925fd1525f47014c02747c2e3547791343c407a85c8fdcead5687345dde7c5cf0afb1c88eb65375199e1b28758bb47eece3edd2bc8dcdfabd227b3785fd113ec7111c1787786e208f1411dbe46edc1fb9647dbd419c814c339935ebcc202bcb440864848c7d0c176f89f848c59c4f7b0e2e9ce602fc0ca9dbbfb4341425eef29c8bfe29bf6b7b1648c6b52cb2b
+Entropy.13 = 1c34b5eb2e2f4cf4907366e590f05a5c6b53c1ce978f3089c50374ee4e80c66d
+Nonce.13 = aa0a92fb97e78f86f8ed296e50439ac1
+PersonalisationString.13 = ce60f571a5a7fea463773a721814dc779d9ad5453bb4821f25ac8209dad5f733
+AdditionalInputA.13 = 46992edaec1bc3f258c6f5c905c692d5db2e09087678cd849ce3bfa13ea822cf
+AdditionalInputB.13 = ebcbec558476020faa67a7657d5311e2276dfa18c6b5e974688cc8d32634e0e7
+Output.13 = 43b5ab88a780c1b271b50dd3f01e6d2f5f48d202d2c3d327d7e43f8c8e43dcd54e75ea4e036cdb5c1fd731f680bd755a0d5a6eaeb46a53a9a376da0b9540bc309f0c420e243c1672da4e5d7afcfe19989e3877b87e86c6f470519129f582f53e70f7df0206f4f84d5295932fcb89d71c474e0c33d00afd6d15c4e87e1e307fc9095bcff1a0fd843bf9d2e9ccdf0e4a4c74b06d464f4d5d37e87da95d3162c2acf07fef59bca3016ba34eb7ba95a3ae30a16f3ea979e0533e8d3ae811230494ce
+Entropy.14 = ae4ac3569dd6295316b275c0207514b791ac1524a8def8187d38cb3a9fd57394
+Nonce.14 = fcce28e19fe0194a146a08a4585e2dc4
+PersonalisationString.14 = 2f44c809f5f7ac6ccc7d47e6f05e7bcb7e176bf5e00a5b51178d1c94b23d1415
+AdditionalInputA.14 = 50ceb01860d60ed119f101d5c573b5db00402dbb03885a09e8d326156fa180a3
+AdditionalInputB.14 = 01e09092bc892916c29f7b515823f244d147d4b16976cebd6a76a37ef6e62998
+Output.14 = 6f1379c44d8131924c9a78286e80ebb34604ad78b531e795cc30c4f0aee422e4052f201ba226bc0c2aa3ec341fcbb5a87e24b91c36be7dda62addba6960df1289372e9677ce030555a9bd1691f559b8ff787dafa35cff5dfd66a2abd83f81552a82ba6ca7d21c438483e60fd77f93bc109f5be802035412c2af2873f5cb186b77dc055c0e0b27b16b1ef37de0b81fe63c4074a7cc8c3d27f71a992b5468351ef8b84a7b3e8f12458ff670d1381d879feeb1cd3b93436580c86bc2c33f27448d4
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 1c18486f4e6dfbbb1c0957e0847fae335543ed5372e246d9b570e636eac32483
+Nonce.0 = 03b567b8344c6bf6e0eefd978f8871c1
+Output.0 = 12a3f6b00d380b795f375dc6c7b4732c1bc0e6e4936e58f4a8542c6b3fd37f3071d3741b53c3019022dddbd662deba2c6eee15c1424dc17890c872db84f44f3434574e5ce78fd5bf4eff394e3ea46a51eb10b0f70884071a740f554145032a98550491b5f947dcd28f0117a477465c1f0d678ff1ea9a1e183690937400659a6d01b6ab1feabf8e50ba88572ec16f15504272650c344ef9c55b8ef35f5212ac27c8af7fbe0cf2b54ebc277282867945d1a6b3f15e50c63dd70c724de6bc36b359
+Entropy.1 = 700f47567c8fb2d678e2f6278ee7523718ed22009fc63f45c815b5be4adb99a7
+Nonce.1 = 44f50596081eca8f134f4e6b0b9e1216
+Output.1 = e0bb2784066bf4a178149510b11a95f6e9c1e53a4e84220c81d7ed36c4e83475b145f9c4eda65c40d811200ad47bf9ae6c28388565df70761fe3d738335a1ca1839a130abdc31ca771cf76b79a17083f4eab6d36b66a54162caa810172e7d67a28d838de92eaf44f6dc41bc02b6d57b00ca9319c98397faa8912e229de7cba69011a73bfe7610e367d5fe9eb11608988c9b002f23e143b9f99e83d86aab7c3a0dacf6fa02dfa0dc397f2dd2bf7f656015b1ed10005922b36643b3d4ea2ed608e
+Entropy.2 = ea21baee5676e92d793a916b49156e0e24f4c06b1c20e754d15bd2b98b3afa13
+Nonce.2 = 984b4c6c4cced8495caf74c5866aa10e
+Output.2 = 40e3bb79f2f3f76a29cd019cd1cd3d1d44a2cbe4da25a7c06dfa3f8905e272c0ef80b0cf2430cd7c7f0b182d447449701b80f840ba09c9ce4575588575948b1be930d8e44b0979136f09424ddb4858a01c0b8845c1a26b8f7c1a1cff4e2cb0eb6eb22f6fcac07f641535481dfab9080cb9306dd80f0e1f63909e8cf23b5bdc70e93ed1be4bb5673cf71b0d830ffe4702c86c523bf51ef9a6881f9af8f606e320fc36dc73c163b6fbb52d0b094f94b38cb48578a793915828d47f2780653eaec8
+Entropy.3 = fe8b2f044f52fc0f068fe93aa6f4024b6820c29020f7ea7b1ce96e3c814b6a9c
+Nonce.3 = ca88bdebede91d024c45058a6f921445
+Output.3 = 0350b4be4eb2309e4cef8f2890b76f6a6c5e96ec53494612d0a079a52e795453761653a73cb149b08686ecf20326d185f8478ca5b5d73eb3ec495267ad7c35a78fd424b1ded656e69db2175d03edc601185876b9451c48c39417c2dfc19aaa7dff60c6a74db52ebb5960879400400451ef7d9b3406d822ed340f576f89e4c72b484161031947f284cb0c87730adea276eaa877cf0c4df3d198c20953c5c2ee9befdc51ee9817949beb339d37ab21e73ac61b4b276592ae08fad37b43c67fd785
+Entropy.4 = 8818518f921df409f6f0fa1404b988b4d883ab5837cc6b8686b8b48783b15f7c
+Nonce.4 = 6602439de339c11b7dc013ffbeccec11
+Output.4 = 98744227792c825a927a713a72caa1d94b26c6f3a52fbb9486fc39325ca021215815def57d17097b4fcd834b31ddd2cd88b38e81fef5f5ce2d57efd23043160467ed2e36a3504b1b316f6254665b5af9765e3d05ed01c2accdf573dd6bb97d193c99269da8ba7e338b0cc22a26b4725feea2411f77a13e12eb405aab939aef7681874cc02f3f024344ee6c340a6ce7357f54a76eab994de912ea25348d63104569f36ce63f1d9611824d08b7dc1191c23df88d6ab61ddf3e74fceacd13771820
+Entropy.5 = 327a439db3e8fac78c5c4dba3da6bb267d4876ab84f07b00b86e66e5107a186b
+Nonce.5 = 0249ace151b41111042dd74dfecc2f10
+Output.5 = 86c687e5bfe842bdc1ad283c3c7c1a60b3980a0e9ce9eb9980e717b19c4fbbd561b77367234698f8e1b89b098f1d602470491642ed716d3140f08e44c0bfd953e720b532ed60281b8360dc68028d70947ff25464f3bfc19b82fb3406c7c3b15c3e59e624501c5c085f80cfeb739433b8384a333fb68ed40ef6760e5a9370fbccdffe565226b9df4f59b28f277a5e40de20b51be8d4d1f3399e1764629eaee6e5b6d162780043e3d5b4f0d73bdffb11c222616e932fd80f16c359617774304e70
+Entropy.6 = 83922a8bd65ac85978008f4afa5e73451daf787d5ca34c080e6e683f0fc9f456
+Nonce.6 = e722cd83333f3741691953d7b566f4f3
+Output.6 = 0a2412287f1fc5f1b9126cb5dc82ee7d996301578b60b5cc390a2fd6ef77b09216ef42b60b2cf1d7dafb34d6ece8efa735674fbf9bf2e8ed611bc53ceec23550241514fcb5954270fd37a1b468779265a60346a7cb431cef6ce72f7ddf5c55e387aa7dc29d66bad2e26986edd4d959696a408a9986b1e53c84ca1a2fe3eb3a4e517e662eb12a3cde9325e2543842ee4f1c9cd65b07b2304e305b5c8e0c1dbd7d1c7a6bf962751b7aaf706592b9fefedbf3fbd888596cb8d50d0f04a8040a7bd3
+Entropy.7 = ea8989f5b43902e20288c438c2cd35bef2e4dd207bbec3d2015e70b9b5524ad1
+Nonce.7 = 2bf759438a5d451ff19422845735c736
+Output.7 = 44d5a315d0a0d51917335a71cc9283e36aed8d00bf944a108873d709d9dfb57efdd47d2a17f1b81530fcd871e2dd30742913c447ce95e076b64baefbbf3f9ba86399869a4fb6331ffe7d317244f6be0788dd520f0f9028b01debdef53fff9b9af2116d227c447e9dc3da1d1393741d6404c5ba7121f777bd3876b791183164acb32d8c33667b5e5bec5d987baebb28df3192859d83ed2ceffbf74ee7ab97762c90a7cd17c5c7cfc1fb22bba009e84cab3d59bc7ca9b19f467aeb12f58736bc02
+Entropy.8 = 4e38b53df75dcc50b95f36e41bd5a24dcd9aadc980c64e68386fd86294bda3a6
+Nonce.8 = 7bc745a77981fbdf7500218754d62660
+Output.8 = e10ea6a3b1bde7bc1a301c81e3d016e189dd7729780239742bbd93b3c982ba3db093d9e8335e7d5ec632c98ce0654d0071442099f8fbeaf9d0ed46e151eab5b9da788d0b89fbb348bdba41eb635c10cd6b73b2f5433708193d73d691b849b1475c7c74548b6a5de08d1456e2ad813b0ae57faec646d51609d6c486c15f0ff18090d94cf9a6999895c24aa09546422d7d2e8cd739b08bcd605fb709884e06359d72f01c47d258b975232ba2528abfe8f28f36204a0a14507b4accf57836e9a722
+Entropy.9 = b8f78540c699f13b00312eea671a91a37ed28905f3196b1ed4a1e494f3ec3693
+Nonce.9 = 6b85ef4eec4c39c65d8b90cdf0ff1960
+Output.9 = ec4bd7958166f008e197e743f5e6a831f97e402bac958ac5e40508c33a51a6463af1a76119ec82c4ba7a1689d3f7cc9544f231a4a6b034e96911a62f005deda1104619d7e96694c0ca68aa8624cc3a577f798ad8f0d20ba4842fcc8ba90ce708413e183654387e99c20172e4aec8faaa504fd53c8d8064e97187917efa51494b1a7738a135d7cffe390a31b11d78845f7871b5ff2de7f0d2c1f249a66b4fcf51db7654fe4f8393f7641d9bad2609ba6a0e7ed6212d33b92e742588db5a07cc99
+Entropy.10 = 784d53c3bc40b4338d3fdf294306e8f53170d60512aaac21a7fd67caa9369be6
+Nonce.10 = 9326d079e84cc1a48868bf8791416aa8
+Output.10 = b9e624193d5aee01d00e3a48612c75a8a51bc1c7bd1e487ab8dcc926b7683beda0ccdebfbf67542099bf88c0257292580153fa7cd4a42d680260922655307199b4f3130a2a79b5b1eae59b01b8adaa744d3f5fb21ae2edb469d58288388f31043e80b19ed16f205426397545ac88c570e795e2e88ca797283f898252dc80dd89c31f34cb08a3de620107e3d103347d25e27d0dabfc2d3a2aefa3a2481d30bedd9e3f1c92f6526a1d47faad3a3af5b4ffba9ab4113cf893461fb5d9aff730b9f3
+Entropy.11 = 7be3e68883ac15c82bc8c38bd93b79c0af39d0cd23c2095eb026c4a6d360befa
+Nonce.11 = 44bcb78f61a5e7c32706bbaf2ad6711f
+Output.11 = 1b1c30249a3b3758237e31243323f65ea7997579eea6d839b65f35797b754a34845939879c7840eec536ae328ee5e8e3876cc0b0ef412fb74ad98d6d987bc9cce8389c2e5adf5fd1f1c8f2314f9fa1ee05d6cf3232c391cd8ff8d3a08cedf1cb52988ffe58c2e7310ffa807fe97468ba9a9ca8e32d3fa0fa0adf62419a22300a3f2db66238f564457d0135d404f239752e650059177840b33b6b77a4de422320e58d195e5cca9e41c753e7be6c8b525efc447e7546bd19e91a387ccb0aa6f665
+Entropy.12 = 8c7fdf4b71829495d5de18adf6823107e0e743462e77b7cf48bdc9be0524f1d3
+Nonce.12 = 70a13ed80e2480107c2c5bced30e4d90
+Output.12 = a9990b3ab01338e03de3188a4abc84f2ebb65ac8cb1c57d263eebe5a56607e552947bc756bc036e4826f89daca5851ff7322db9e8135a1e2ebbfd206f67ba43e059a32f75358b7402ce12b4c377c750acc5598aa8721b6ef2413c2295c10c3a84cff68c6250ae0eed541e20f420d2c46fc5928efd526ce19fef408304723a54cad2f40e97c5ff93f41fa6dd8114499c0db409cb70acd58404a6f02e5a9004d6dc062db2895ed14285a3f972cc6f4f611348d434387e0e937e4b7beda8a3bbb20
+Entropy.13 = c32ac6afd0c780418d98420990bcdf63e80e5bcbd5c9f79f91695d031f9fee22
+Nonce.13 = 7d66b3d83ae22021f383d0b19d6eb52b
+Output.13 = 606e2a9b9bc568afbda558856cc305acbbc1a99d0087df4dec2d1cf8cada9596c0276b19a4e48f7ad83f45fcc995e4647de927c0002e9117e44308bd20d62275a74f2bb0d9c2f1c83fdd999039f21d073cdf0a368bb963b86d0fbc478bd860dbfc10e54d121efbe2f08853e7c7628ec7d8c97289529088fcab8404ba0c657480f7c581dea23fa172b05e389182ff3bf434b230306fa451e67fcc122b32586f0f8ff3b6e3a7cc9c060f917a96a59c6fc270f654e8500f6e5ef84c8a47c296bd42
+Entropy.14 = 57050c5fe58b2a2a0eba0d3b9c08a9b285e1180d2a297e0a9ad20740c6fa9f00
+Nonce.14 = fc309209936c569a1367d45b212a9a50
+Output.14 = 288668476b39814edbce5ed91951cec398ba2dc3bad76048df5fb1a2a680519c217ec4d57adc0251e1f8892a866b142e0953353bc2dd207aa2703f81814d26a60daedfe94d97de6043ed5f3bd957b7516681827f7a36d1b2a87b692c67aba050bc38b5e84f65f07d70cc34549f01aa390c5fc8dd01304fee7378e62549738e3f710ee6a4e32db3f472e1c2ef1e803e57a8ea992f389f0823c922bcea8b00ab844e071579170baae90839ffd5e00844ec343b02db090847cd323f8a68f0dce64e
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = b86bf722bea4cefde43ca6bfdefdb01d171282049024692f4b34d423a9f89225
+Nonce.0 = 133a73e70733a68a3be1a0035540c3d9
+AdditionalInputA.0 = 87c1d165b3978619b7de30e5b7bb85127af50ec6ecd03e7ef7f2568e83692e4a
+AdditionalInputB.0 = 509f071cae9902d6a01a0f7c69582e4b683f74fc53fee94d07901fed8af026c8
+Output.0 = 64d9821c6bd450e1f8cfef31d06b9a9c8c666b3b6ede62fb35267334d59a24da2f8ce4eb863c5119a7104443a1e9e22b1d7b37b7d672797fe87a6b228813c7faf21bc5c1cd23584d05c19c93b8ac755d5444fc5c85e37de4aecb73eda4a947261f5141253c369fa2d1a7298631ea60567a6c93ffd95b017d0be5dc4c99aa5a33be2273f8552c20dbd313ab60f53bcf17569303f6930b83fac947984dd82b23c612df58b5d62b98340d54b071d6a22b42b7fac93be3ac810db659e8110812c0b9
+Entropy.1 = e58a82e5300f366c0c56afd704f666177194632c024653a6c39fd78e14f43edd
+Nonce.1 = 7872fd68197ba366520c3a50b60f74d4
+AdditionalInputA.1 = 9494ef44d55aa8502e12cc24ef2658091bcb3a15850b25367007c7e6c04d0ee1
+AdditionalInputB.1 = 559a4b4fec44538947a45abef2b55a21ad7f5b9188681a1b308693916594f5f3
+Output.1 = 280be8ff72f15ef75de01f605c83e45a36c0cab3a8efae98453d291a297e8b26473864472e1697832d2e1129d76f6240927c747094ca2f8bc653d2988c31ace8822d3656f5e513288e874c25695237fc6fc7007d01eae56690893703ff8369e498c9671059e09306bb270b5ac54c4a7881ab27b90e92e8a57c225ba371aa7f813f2f2563b9865007080cc278d0db3ee06e95b3af26342232a2232f80041df18aba5a1fdb906cd2f4832e3e73cabfca53bef1d2ee69379d73e1f658872e7fdf3f
+Entropy.2 = 3e8c5de27d9a29562d4462f9923b09dad0f9b1953275d92d9959844804673e7a
+Nonce.2 = 54fa44767542034cdde939d2796a7adf
+AdditionalInputA.2 = 9679e7d730c110b139c42196ce1ae63b604bedd098e377130873b840a753047e
+AdditionalInputB.2 = d2d33358f1e90cd1261121e7036dba3c36cd18a6b7beb4a82d1e47c69abd8e4d
+Output.2 = e6c73af620465244ccf62f5b4151da39fe4885529b3c905243f7753d8767678aaafc7379f0074b5743425715d091fedfe33f138841d7c07195ab0d04ece6419cf89056f0477f3abfa638856abe3e740ef6a25afa319b8e56d290a385b2ea2e48c20743d850f7b7797ad80d42ac0f1f104e432d2a9e264c9e6c19908916c40c465ef9d3e57a7b311154a03da4c5cce6ff74192175027773b2c8b9950a032a7a41e9728513aec144f0ec937cc12dc2ad2a4f0e00048b54cdf81378cf7c169ff252
+Entropy.3 = 901d216a32a2cd2555833c38b175ee1f76b58ca0ee28b4d2409054840b1c9795
+Nonce.3 = 2ad40293170b525f211bc7c04476ca3b
+AdditionalInputA.3 = f91d7b74aa21580cd6bc241d720999db1d573c6df97ecf6460aced64be2353a4
+AdditionalInputB.3 = 2bfcae59d9f250e5aec2781c52153247d9ad4c44078be1195c932cc101a20c66
+Output.3 = b9dc17e4db6a48a73ef74f16f3cdee4cfd1a08fea0ef10131a4f02aa85dd24b7eefb0474bef0dbb0b738032c964ea0e710c9cd47d790e25b5d5ea2b8dcc277b4e3404beac530385b083e2265c424ebd9086e2dd3bc39cdd3a3d0e719b04e60f9d4cc567cce0d9be2a57b5d82cd5c917b578bef85d1507de6edf496c7a3d433c26b73499beaf4ff5cfb51e89b83649f90db99e58253312efd8c2a7ded3e9f97ac13eecdb4a5c2d57ae236f715b1c74ea2af7b2a19b8426a40f573a07320315cd0
+Entropy.4 = 2e27c3184e58d0e14418fde81f62773dc3aef5b60d829df57a30fa8168242dfa
+Nonce.4 = 69798e95a322ea454baf0c30c8e11379
+AdditionalInputA.4 = 89369f0fcaf68f8b5588314f396a28115f24479def507afdcc62d7fa5ec1812c
+AdditionalInputB.4 = 12434493d808760462382541a6d9333ab968c989bdf39353c5b5c396fb972980
+Output.4 = ca94ea6e77ba78c42d2e36c513f9e1ec38858e0d14017c7e0950fdd8137b3cf773b24c4e4ffc18bc4dff859081a8e4d64333fd1ac3242107cd1f08acfd4b9ace7b1eeb417fd4f1464b5c27929a1473c36393d665c83f621397bc71851af6708f90e75a711b6b482ff0580cbb36295db0db086cd081bc80caa8d37c0560a54dc9e343441b9045b95bab35a50c2d2291bde8bd0d96d63ce6b9be958f3c3f90d1be1336a2ddbd6abb997ef9218c0baa3f4f9cec03c77c7642f2b744db6a395362c7
+Entropy.5 = 76bb91e695eb0321720a517c3267b293ab311f4eaec93b6909ff0d3d99346b5c
+Nonce.5 = 8594960199b709a71157c64b084a0af8
+AdditionalInputA.5 = d20f33c405cd9606ceaea8184bc2c3a30a4180b0ab3bf24dee503834e1fce563
+AdditionalInputB.5 = 434d1c5e4f04c0f998a60e214fd9d13f10591c2cc3660e29f9455483e2b2a306
+Output.5 = 43e6fac40318590a1c9680b5e739ad821279ef551fba7509c48efaa560f109c6707a223434b9da000ae43004f0542b8a9d48bb51068aaa046998383daef71cb0c10ee5cbe1a52b64cb65c5604bd07984b6efc5c2bde92f1937e02b9467ad8b55e70001fca6b59652ea3451d3da9d31a981c27b592d674706c047588b7fe67d087e049d93de46a45f8d24f0142fac2ec140f8b3c6f2295952183928921f93ee9954b14bbeb5e2a88c87b7582824b2273ebfd4f62bda6e28db22b2fb173e133373
+Entropy.6 = dc34a49a2e4d1222edce9e87088397e625b09a16bd331bc10fa07399cebff43a
+Nonce.6 = abe6e879a99f1c467105f7fd331e92ba
+AdditionalInputA.6 = 8924c8bbf9e72d1eaab9322755982007e2fe18cc645256069bf36ab3352dd655
+AdditionalInputB.6 = d6a726312e14b9e2fb03b9720c6d966a7c5e080b6bbb4ffcb1759334ecd823e9
+Output.6 = 7b9469a5db5c11545a565b370adc239df6af835de75ff321bb991aee3fa4e98abc67873ed89b215a716e1ebc9088d9069cdea6bb8f8832c93d8beb9988f1d59b6188516a9c9df72fae420ce0443086d2e33bafcce6f8acb558c08f945c4109c6ba7e4b22a825fa9f90b15f61ae28b3aa076f2813fece691e5376bd6379e76a54384953c9ac54ff39890316881cf9afbe8cda1bc9516407ae58c6f0adac3fb706b6fe0a882facfab3d5cfdd0deac27692b14d7afd4a9f0fa771276de27551c479
+Entropy.7 = ceb82c3f876951ed4e0f2acea748e93ab37ece0d110e8df618297c8db8d184cb
+Nonce.7 = f8ed30e8c1401eb6db5be4d47ebfd4b7
+AdditionalInputA.7 = 70bed533ffa03856ee96fbee70155fe82823d3e40e940c49a5da9ef14fe95b1e
+AdditionalInputB.7 = a54c96173d3c2322f122cb0f3b13d6b2dd45f72b050d675d7e14de6eea934cbb
+Output.7 = 091cf354f4d40678b532e5397217738cd5206d6621ed55f397aaa75c599630ec9fb662283f3bbc9218aa808a4ef56a61e4fcf3be9f36287ec457198f86a37649814bf4c0cb62e25a35ee65fcb9defd0d05986981d99e5f78378aea246f532b32d3fca7599e1ab0ef561d85a93ac86934528c5f07e3db9c2701ff44b948da62e7b6e61c1212574df0c66b213f1807019535c6ee79cf4ed2902f2f5c069ed57288a2636a5e05734a041c72292388552b9dc06d646794b8437829c6c2f0a7c1f6ee
+Entropy.8 = 37290e324fc44a8bb09ecd5fe8bffed382580dfdd3c23e3a4b43d91d017598ae
+Nonce.8 = 0cc4b3e487a1d8f9da80d391f9ee8df2
+AdditionalInputA.8 = c8315083c39a6432ff119377dd3fa42d56b892b2a1cb19e90db21517db1f1003
+AdditionalInputB.8 = 61c03aaecff7e56e0724b3cc28903436493d12a7104bc6f1c8a3e4edda317596
+Output.8 = f1bcb21912fa0f73ec9a4155ac53ae6b056afa8359aa3ee563604ac820ca3b230f4207f857d1c1a018639ddfd7dcb310b28564571f5f0bdba6a1fb34c461267e59b853b99f696714a33a12f584a42199d8e62f1e3ab59560dc7778b2299c25341e66d90592540ebde6bb10d9ac3bffc43ca6a058fdfda1b7fa3d26915601bcdbd1ff19150bd428fa820332c575db788deddeb4741ff0b9f882ba3b27b11bb4e023b64e405f8d1afa96aa1783e6011669491831f89f7f3a69b7037d1e4532e6f2
+Entropy.9 = 6ec400d8311623e5ac8c1734ff7db9b97177fd105279db9820fa90f3320c84bf
+Nonce.9 = 0f4f7df9490978b72f5e2fdcf32fc331
+AdditionalInputA.9 = 1fb87fae83d388c30bf6c7fc1ac9c407bb666dfc7dfbe634b4a6a509d3f17bb3
+AdditionalInputB.9 = 334b409a84456d5e7d8e8fe8d2ef3df3d491b9fd3ef037ce7fb74ce4fa515f99
+Output.9 = 728196571ac1200d53ef168bd8c3adb6288772dac75416e390488297893190dfdc0e80e251f0e6118642af27a3e6e86630bc5f4afe930938e88e478e393599965394e6d16d75cd1785aba5401d5768ab061fb4723b67700c574e5885bc5771075007a6811520c1a91b1c853d764136c26c91e742bfd1e033b5fe40429908028e81369bacf8baa019e0b6c218b7a6d0da0372c59b40661cd41341a6b0ee97c594f301c3617c35c58e092283bb11f52754a00547b735c75b2e45a18882961bcef1
+Entropy.10 = b9a4469ce59ba2eaf1ab63b090039a1652d09fb3b794d35ce13c5130972c3d05
+Nonce.10 = 766dccac327092b5d3b78a7058da2037
+AdditionalInputA.10 = 6b49aa49bb6e08782e6ea26fd7eed0a60f40683516c1b7a388a7028dee1e50a3
+AdditionalInputB.10 = ad2dded6c6e22c34c475253f58b6ec266acd90d5ada6fb8e6b1225c2678d030a
+Output.10 = 2a8db9fd0c00f56bd85e735aedc131a91d497d2f006d22f43e61d3c3de477b30ce2b5a4c7d5b86467857ed10123a13ea63da95403a46504e662f759f3e438d576b36ba11a6158606eccb68a3ac654b418342ea0e6dac1a5449d2199ffd7c3a3cc5a7bfd1b76161dfa7f6091ab454a317abe3e42ebb146dd022aba462e70d7f033bf3ac0af586543952917fa912bcf33151bbb432aeae008aca12a4098d0a07d66ec252ee8f3876539d6718328d8e43f6794b2358bf0396359f0214e23557496c
+Entropy.11 = a49b6e419b6523481267fb89ec6c1fd4c7ca95d34dd48adfbf3ade97e2a0f684
+Nonce.11 = 426fd29a58a75d73062c39b5223de523
+AdditionalInputA.11 = 3e5d3ce245b2a7dd5342ee0df9ac54c5989a5c57e39b07708ccdfb5799b389aa
+AdditionalInputB.11 = e0a191eb18aae774234d58577436abebd9e5cf8c1a8d1c19515a66c8e5dd6f32
+Output.11 = ad5163bc5a9f444286c69deb5bf4490ecb79760e75b07f2d5841c3ed0002d01a55cb83529c5b3119e2eede1baf1f8d9489e6bfdfb7071e03d4f62d1cb1710e1125da8c275a6f076e39c7e75e662c97f23625c5dbfd7ab795da6d0cc204ed7434f2189f6bdd2036e2cdd56917086f9cb33b3707a82f848c510cefed7743e84c1154612abf8858e67173b9e4458509c8d3b8aa98e9d1939fd1ad77c0a41713d75d7e9b6512a0345f06d4da43d6cdd499682b16ca7c066fea7dfa79385d31208074
+Entropy.12 = fe6e09efe4478174e5578be98924610a3a3ddfa3a4888a3a0bea7f1d69ece799
+Nonce.12 = 6dde6c79096b4573e10ec6773607d6a7
+AdditionalInputA.12 = 8c863b6afc67d409ed2fb258192e68957fca5860f1ef11239b7a174627a4b053
+AdditionalInputB.12 = d597a278bf4288f12729e5eead1b695eb54c5aee7ac2d23c06332153dd45a823
+Output.12 = 1433af934a88673aa5fdeeb4625eb84d78e131db30bf3c1fff60f766a608e8a09f80daf10b4d960fc6b08ab22622ee8192c2265f911ec25998eeda6b6e5e1c8752aff6e5e2975c4cb909dfbf0b051bffdef58ce2c59fe0ef0f6fa26e69a7e33ea8af396fb243e712cf84514ae52eb5d9d3937038086dcb1d3fed46499d3a22e1a1c7c7e5da73f1c51fdf5a49272c5fbd1a70a6c2f9bc14d61c20090a00d1c16a349ab7d1c3c2bd1fe01974f46ce785ea373bc99bed24577e056ce5ae13d56ffc
+Entropy.13 = 74d3adf8f006a0cf4a24219af0c67ca28ecbb59da663b80773cb1a950cb21a65
+Nonce.13 = 13691948a3d6de08e972e773af602af5
+AdditionalInputA.13 = f9d03c7e2937e359d154e074bdfc7fda3a247bb788f52282ff450da1a4253762
+AdditionalInputB.13 = 5f466bb3dec44e3c14d8b4cd68ac3a826eb19bfe613bee4befb779acf6f59d85
+Output.13 = da5088f6676967bddde61d4b60211060352c2d0f20f2362d4137b9214025b30c995a299fc91717bfef5e9ab6ab2872bbd9c1e958f9178a4119385ee50574b832616948e195a0a8aba8a72eb8362f4f1560e923c50ccfd996d85547a22ca06ab799a62c816b71fe85c8b77ec3e912968479adffe5c96db340ed01225bc8ff41191dcbf743ea50bce2e29455ef39952c4193f373d95b01afd8a091aaf3416ea0e83ecc3a781188e3bdc2440d92224ee1dbad947d9e88b5138b710764bf841c51ea
+Entropy.14 = 23c4788c9b32fc0123695a499251cfba0161f3ae38e20958d006a59168163c64
+Nonce.14 = f8509371ee17ae28920718ab2ba6451c
+AdditionalInputA.14 = a633f5f05ed8b09b70683a9f9a8e998ebf843b68a039dc3aa40cf30a5f997f02
+AdditionalInputB.14 = 9a57c6be8c1d992bcbd599952bd94a755d7ad686698991d189afd11cb88b9f53
+Output.14 = ae0fd8a1bf6f2f53f9e81ecf6f40ff6a36fef58a3f157b6a435403e48da4e88cab7871bfe2233b92afd228bfe3117d7cff0798225a901663d51f0491109b9c631dd6d32c5bec2da321b8e64ebaced87a27f17f67082df944fa94acc6c557fa6816001642e38b7d776c631212b782f71aed6db760f90e0de8e81baaf4d419170362932e6c319dab948749b331aae41b4cb3267da37c9233c36d65d5482c8940387498453b226af485a37ea16bd9e4f938618f70aec97e8c1430a8d8b6aae396e9
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = ef634a2fa208c4b3d286a7a0d9c5c0cade45c18b4b80a0cc52160c3c4195a22a
+Nonce.0 = 4481bb6010534f61621be8ed36bab024
+PersonalisationString.0 = c4771aa90866ec257ed00bb4a26ebbcd0434fb480c1a1e2965bd5b7508fadba5
+Output.0 = f098fe063550997cb83ee2d782fced1bcab43b601fccf4fa127cf9dcd86df6fea36dd7aee7ba7adaf2642352d17a815090ce64ce8b23ab55f7e170655d1625ea25f46b745830c8af777ad4b5f06941459ca7cd23c84dc6dd55505e4af6e518d80cc39a1abede7a2adb7d8aaf89f0f52e7d75ad975cb256d489b4cfd0f493e99785e30f01fc0463f671f0889a086e3a768b8037a538d13c708c0f9ec5957c2aa69ceb5552e13d5754e3b8f36a582a0d2d103453c3ad6e5ae6fa0c606efbbe6fe8
+Entropy.1 = 66c7826a288db41060521a95bc955811418ff87d97d142bc5411d4d8f7e3e32d
+Nonce.1 = dfdbec93e22a3b159cdeabf30cc015d3
+PersonalisationString.1 = 3c5f09d775985c5dbd27b360e4ec15cc2433eb125d699c181ba54bac7eaeb40b
+Output.1 = 74f9087067f3ecf19b9d83cf22ef7742c9af476e73c14c8c5fca245af503545c62d071d1d5bdd028b44c3b18d2680b1a2401357a45361f1625526ce3814191580ebbceb724d099e727b71e32ed5af196fda4fd997b6f994e63dd953ba7f8dd874c0a4815b2457e16420936d795bb350a6f9de5504a81a08e4d81034e96ff9c41112f83dcd04e964ecca37bb59b23a96bd8a2db684349339432f6405834b90889a3eeaf986a312e59fc148dd85d6256b3e9f9214f0e011f9c4bfabdc84a284ac4
+Entropy.2 = 22c6ecf7f834b3d23cd974255f5e664d9e6e00ebad971e02daade9cd3e82c8e8
+Nonce.2 = 361773240099c21ea1d62dc377556432
+PersonalisationString.2 = 0e1cdefa5c99dce4638734ed9495ff4a43a9b33ffb146752c3c034605f4e58e7
+Output.2 = ff53c742ac1f0a45f9321b5b21310a6270922237ec22e39ef1299b72a3488511732cf3bf436bfc66e3c4e4e5ce171fcc1aae339d5623e9f728d3739f1c48edd087d2fc6e21f5648f81de39377230c75dd3822d8d060ca9725dda80907e3ce39544cf5b4cd48f8d1aa4900dde5e70263b044142a64dac9f42aed4833c5b861e1630268310b44826b021224b53768e5ceb6b186a4af15e494753b00c45681480360cfb260e627d17a2fc6e492a5447a6d99c87853a57c1d2ac4f2ab187d7494e94
+Entropy.3 = 1358aa2df891f990c5b4750a607071245695e9b49e9e0eb755094336282da9cb
+Nonce.3 = d7483c29db6943e3a757586b9a45fba5
+PersonalisationString.3 = 76694a8784ec67185bda5bd02ade54165ebc2c43cabe60810df08e7e6143fec5
+Output.3 = d5670f81c1acc1aaafc6f8157a6ea9f74b49c14993ef3f61396998df5ddc1efad0060c8234f69bef6c9a56485f98ad42e28e246ca7e15f352130a184fa7bdee46cc1f4598e7a39d9b31a47b47ebe9d1b3e745451176bb3361b6f502b0de34ae134c276f322c817df3ff4ade40973b7736aa2c2470f0da45e25b7a80ba187de4a02e17b0a5000bece919c01c77062dcfd21dc76adf597eb50a31018c953a0829db44a3ce577f244df490d1c47e5783d5c71805c70de5bbf540a91510d9d1a3bd9
+Entropy.4 = 01933cb95bd72dc97cd3a5fe722f17380df95e0c5fbc4091f54e96b5d70449ca
+Nonce.4 = e8d10bfce84b7ecccc94d2de813c4f8c
+PersonalisationString.4 = b07921836c827387d4afe21757f54dfac551b892f249e63b8ea6da57267a1d77
+Output.4 = 356aad872ed2097374fe24c7d4d9e754c97ef6bfde2e72cf8582b0cd0bd544511c6c2abdaf8728342297ffa197c44463973616d87400ae81a972b17b2c90baf692231db7b2224fbafca3f3e5f89bd887379e0c4f7665eaeefcaecef34c64558586623003c65d2cd53c6997db448fd178eb04c4dda35db9c2a6c2402858a8bb19bec8595c0c29e57e5a5cdd71e76f215e7415d504d89b0e9ffa9939d08815f82fdd8e8accc32441e4682f8da07d0b1516884abd64f2b5daaad14fc195943beee6
+Entropy.5 = 0eb5b221daedf44d9404bff9407d85271b3a517048b954c50ed0f7c1bf937344
+Nonce.5 = 187de3ebf99990df365ec1f0b6c48536
+PersonalisationString.5 = 63db9544f60c8b049e3525cd399b7269f5fca85d43b1c6aeb39375015792defb
+Output.5 = 5eeb2050b17895ae2c0710fb3d5770e3ac1a38eaf2e49b41c0f69baa870785b102a9305c224ff7adf0aaf8c7bd8b7a3348de3e038d2c79bf418e4d34603bdaa3647b820775e5b4e9e5a538b62799239be75ffed8bc7b8b675908b3aeecf0baf1ba7bf2b25cb8b2717f21be6a794355c300f16b24d935b312c01f56274f565b4ec0155cc50b9b6b15001874f9cee05d424df2e4910e59594b86905dd86ab04cffc5266d2513d7880c2f04cee5137d2ac58aca52d5cd96f1455b97218fc4962cf4
+Entropy.6 = 9ae14cdf2214c2e74c1f8e5e2b8cdaf0dba057c65793f9cc51f39d83f9b85133
+Nonce.6 = 622db66870ce2852cd0d08df8212688b
+PersonalisationString.6 = 6ea4afc062670c6f07714a4006b4ddea1dcfc21da7e660884a8c41c4b23644d0
+Output.6 = 682de9f80c901263a6898f269a1fff48cdaf5d52747144f9a6cdba09110a5c8c36bd78d72322012a91d7531dad52042934fa80808e0fdd4167d39dfc674c24d0ed0f98a5e45ad04417d58830a31f0c73caaec8f21c89c905a20ae7048aff5ca67a5403f8ea3ec9e53699507f1baa5cf7841cc8f1184fa092b094e99ec8f951291a7c381510ce456e7b56b0ccd39468de88346e430cf6ac6f81b2909fd867c7a10a1b51ce3da3c0ecc1a3769696c886f1bd819b393952366412b5ea5de823d2fd
+Entropy.7 = 2d855f1a04d5f65f69986e7a1ec6c58ed7dc4d3f03d67dc9293f0651d2d48275
+Nonce.7 = 25f04000c06d2953d4c254a920ec0010
+PersonalisationString.7 = 2c0a3fc5373bbc75a150a9e360ff82abcb855273d5486802966fa15d9a5463a7
+Output.7 = a0589d24d5eee689b18ae972c7d886cfee95dd50527db32de1fe43685cff3214e97be1041084aaa280d5b15af19e361cc9dbb664880128ef7945b4691dba1b8a5d228e505bc51ffcb194e0c7f2c1a1e302a72d73185961e291f9aa4fd58ec7dc4d68dfbb95d0b4291a8c17fccd641e572d9a042143fcf5ce47790736e8c9949ae2c23e685d2958a78fed2c4ac861af2e0542ee0e82779592a9e238a69169c2ae34500cdcbc20d42d36fc57031ecb60e63e44b6f81bdae3d186fc02e8b7e5d7c3
+Entropy.8 = 5230f6a45cbaf86ec55539c1e20c52e589ef93c733db397335b7bce9b3871537
+Nonce.8 = aa67dc753f0701833f0b283b2e9aabad
+PersonalisationString.8 = c62c19e84b7c5fce42c8748eb698107cbc28832b3326af798ab3c1b6d5101f15
+Output.8 = 91703c6eb85484755b70ec923ae93919a884dadec0cc7c5dd4fa64bb6513c5c187570fe85721116c5a6f421c17785d3f68d826e17826e76383357b04d72c7eeb00350eb6d39f284df65c1cda404e21745f92375f6e6734cd9d188b4cfefea738924ec5968fbf6a15ab58bdc8940683d9382e77b4dc8e7b3a7cd52bf789cb8bbc1e27373d2a803cdc051ce84f823fb0ab20e85f290e3f17d3c030b83150b135815d9f5eff9ef2c81c5ce728c2d259bbc2a3c1764f65ea0426484c2c3b0b518e37
+Entropy.9 = 90b5046853057797c2f89d73d650d9bca3ad63454aef960399742ad4e91add09
+Nonce.9 = c6181214992648ed4826e04218a3a588
+PersonalisationString.9 = 48d37716832a3d7049c66fa7db241d0a5cbfe8040ad30fdb606213b6ebcfab7e
+Output.9 = f445fc941a77b13cce20248b2b5b3ec45a8fdcb041886c5cbbb2bfdf1275e6e34ee6a76bb5ff0937f2875b76fa08bdc31df426f096827fcc56b098fa4076310bfad22c9b98b652ddb207beb4b1392d6db353adb7582b73f2bfa2bb46d7d585e11525b65cb95de2cad9869480c27a043bf17d796d05eb12d01aa0b0638cb413e4a6ae54d28c274548706d829ac5d28e0bf2dcf9903b2b987a7d2d6398c52a3f740ab47464c8e6eb93106ff7d0db419eaae38f9cb7989e7770f398420412356136
+Entropy.10 = f86c8479d39fa3bb7b3dbc4e84659fc710d16cb2183c3d3c4e1d5427f9a7556e
+Nonce.10 = 44a148f52a8efda2f54cc2988562d7fe
+PersonalisationString.10 = 2ac8374e7b10ca0ef618ab2db2001326a07fb663320d9768c8b8333e53ec13f3
+Output.10 = a4c612e877cd6cbcb8dda0a216724cb45005124fbee148a2afef7cac2430583af259e361ebf9f7d00766bcceb5b2f7507f134c724cc69b1e2abed1e361890cffa3ff2f81de8da2176503238bcd9b51b6897663552b561bc2b3719d4f7dff242218f8d0b51b74c323c698e0f52c356f09b74f2105b0304429b3d89f3cbdcb7fda2dc84ccf2d6c7ad87f75a9ef73ce407eefca8eee21895cb4914508325449fde43bc77f3fdd16d8c769f2bd36e07f8dfbbcba896b15911c4b0143a5ac6b6f4795
+Entropy.11 = 523d0904f258ab2eccf2232bd5247112bde507eb613bb29a40e92b86e2ff2797
+Nonce.11 = f4509136b780496145a5d7789e2c280c
+PersonalisationString.11 = feed7c9680fb11a17b423dfa55e26cfb367a45fb2e0d63f4dd806849181b896c
+Output.11 = 4a3d83e002acbaf108f6072ff014a2c0720b50bd8de178a6b9259361ddf351c6ce1825cd4de14bf9aba71ca04e1f276fe732dd3cfaa33f35acb32bdf868ebce6d4aa1589180365473f40e274de6ed5c46341cf51e45a70caa4f49d998561bbbcda258248de3eef656bbd07ebe90d96b9771b249e765e2d3c295c8ee8fd9faae20eba7af26e924eaa101945ed0ac839ef9b6f23cf3d03245ab8200ebd75b70d080fa8379bd3ddb7a6c3428b7ba640b6ee065a3a56b86b0802d1ff5b1880022643
+Entropy.12 = d75ffb7da2b4f46e313b1e8ea625a499c8b082f9f3c26d66899aa524d9832a4d
+Nonce.12 = f8d729306ef7649ccb14e9c3c6513e4f
+PersonalisationString.12 = 294bec06c13c3ca2f2ac34dfa7dfa8c8a8e6483358642b4d4072e314a4df1120
+Output.12 = 0594f3da2e175d8c9a83e7fc2f76dba53ae1e125a7986195479a9a19e59fed2d19bdb2544b623dae9c47394c0f57d9e9e37f811b409f4e391182b16720a460f52989c8aad9c8afd0efdab460563e4651f6fe599ef57c98db56389fd628712ef04edaf636e620ed6b5bee623d1f45ba4480424de884ef03bf1fa9f0b722f3d211534da8ffbce10765d10b7649373070e3e354810029f9c63ee7a217ac33bfb4797500edd958cb2929646ceb26cf8d8d159865ee5fdad7aa43481499dd970fc630
+Entropy.13 = c4dc5f712b53926f8f1f7b2af39d480320ba1cce56e39f722a10f0fdbb6f47e3
+Nonce.13 = 04fce136460f211fcedfe60f4a218d78
+PersonalisationString.13 = 85f7692af420b7e0c0ec1afcbb2b46b9972c3bcfc51cdb4fe84f2fd01d11376c
+Output.13 = 28a3f1bb8cba67e70acb682e49aa22f6a51f8abb7f7138dfae88fce3c9c3132732fd5bedf074301c9604aaef834c5900b90195c2e081e941fdd6f6d6d10122dbc423849ac2fc14a2cf1bcc0f4248c9bcd3fe25f34e975a4cf7b501aa4903927f836831b239000d26fcd6252e863a1dcda3eb72467e284d7b5b78bfb035d5e5226e6ca6b5a9822d0f805f1a6576f64a37cec35d539a99e9b419ceddca816e6d706bc75f72e568d7721e9019a7319b19f65c1736523e1c277f101ec9ee7677dd6c
+Entropy.14 = 446956dff7fa2b038629e16041915d58c0fc9214312878958abb87bbf3259dba
+Nonce.14 = e1609138b91637917ec170fa3c3fb278
+PersonalisationString.14 = 230db2e57b87e910cbab26fbac7fa93a65c07c1ec004c74637e346c2db63288f
+Output.14 = fa58f2e96776b4aa079dbfb49d81d8abfcc30d459caeb45dec4f1766fdc3b234d52cdc5337ea770e71a28cc42c82cbefce896d1fecea5a5290300208aa79b5ff97d2091498d749b66a9e5b2da7b774567ae9f83b87a8417b1bd089935e575b16618ffe8ec04b91fc9315968dc395fa2bb8776133d3ede95aa89ae675881b26ca831fa5fe6cba800d2fed1d509353e8cba6f007cf3c5e0b9424cc034e1c817d5f7326764f5ed1d17ddf8900977a0172dfab50bf4819a67e4c1af4704f59eda3bc
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 5d9c7c53665a68ba61f71f9fadb42f313cd10f19a69b28c2b957c92ebb6c1545
+Nonce.0 = 504a6dc7a2ef385a6681312243762e7e
+PersonalisationString.0 = 53160857089ccfda7edaa84d173b6d24b42a7eecfe9925838a55114a1d8a08d2
+AdditionalInputA.0 = f7fb90fc9a10c4cfeefccc4bea86b16216df007e51678ba9043abeb2fce23bfa
+AdditionalInputB.0 = 1121fe8826ddea6657cf0c5a99c91f00ea399057fd0f8540ab2cc0841a3f09d1
+Output.0 = aea7c37843a0bfab822cb5ea276434fcee305e066f8ce385f275f1d2d091d4addbaaa91addddb8f122c945884fd227a3657215e98fb7764e7f8e541d3fd13d214e4fcd626990a96fab2b71b64dbb46a313bddd8146c10aa3941f1b30973ad70e928cbd4ad35ea3b1e2983312a343009474609d36ad0eb0cd11558fb22c09ad9a4ab7b46b748d5854a137c6e09e1d04f6d3724d78450c9df562655c773d5cb4958ccc1d2bf3c1a48811a04617941248b7170e9dba81ba39846e5f1dfeed184890
+Entropy.1 = 8dfc0fb16e2869cb5fc140f6ddfe91837b6e80309b797b68c30d6b7a8640f292
+Nonce.1 = b254a718ee5c778bb132cf91616ab577
+PersonalisationString.1 = 8242f4ac8d4048f6d7326d22f2c64ac8d3fe74e5d8519b6aef371063fd8e12c2
+AdditionalInputA.1 = ecabfd632c829db2a894ef8ea37a86f5027bb8975c8f8b0ad05a0d129d172590
+AdditionalInputB.1 = 3c593346a485f2339b4e478af7cf94941e2b09749e7a88a728ba1054dc10ff68
+Output.1 = 5cb6b5d3da70440889809ec0099013dbdc6cad5d79ea84cd676b6a03fc6ca5c329b4dc03909286bb621dc70e5cbcd726e735eea49af2042bcc8c26f41d4de58b5a535b37d06f89c64c480baabb74d1c685c61e1ac5187617f56057b08b1bf3fcb479d4c212b6d5474587819a0c92f654568ffefa02ce74698c95c7a6ef21583c27b9beacdec4de668b4fe143d77b671d45285296bd7b68b91fdb8c81bb589d2b6a59b4cf0cc1da8fa6007989e04628bfae06fd4c3e465168354be129b3568508
+Entropy.2 = 93fb949646b69de6fd6a088792f183a27c93c60d4ee292ff2a33d24432e9fae1
+Nonce.2 = f4a62bb91323a10c82d31a1026e3d4c7
+PersonalisationString.2 = 9907b9bc86e0469896c4ae84ba62f742bf64c0740c249d466b7fa2089417600f
+AdditionalInputA.2 = a93305a129f43d39676478084f0e156b3bb1423ded3293f464fe7d4c1d59586b
+AdditionalInputB.2 = ccd11ff83be2aa88f5f856592654dae6cc84c7d6acb115e0414dd230d20776f9
+Output.2 = 0715305913f94b159611d2a1694095ac96ae54b04bb5bd73ddb5ebb29f15421d9ef81397128b9c4d8b74c924d1083e886c6ad9ce325396cee8cbdeab26ea09317184e57f5259afb812bd03b484287eae184070529f720bf4771a52e570428fcd6971e7e8e0cff6ccd669e8d6e8cd56dcc41a243ad3b64165600ca3e2de836665098e51c03bdc2f50a435ebaf0b17bbb4639b486c9ccaae4ec270b7bf7253caef62ead9dffa4fa0ffa9a5b3330228793a333c1c6648276939a3dca7ba1c9ee2b0
+Entropy.3 = 59aa99b0e4a6252c6383e799bb25a6025de181639acb1a425c4487559423b128
+Nonce.3 = 2e7cbb1c325c09068d175ab31a6066d6
+PersonalisationString.3 = 5616119af6b34c8ef543a6f70250b86f5263bd0f30838584100446ac15a96ecb
+AdditionalInputA.3 = fa7d975f1bc0239d5195f935fdcbdc14f98d80b56eba681a6e682527c36c70df
+AdditionalInputB.3 = eff019de592f4dcc731b455f097079d279fb25b8d11f0a193f90ea425a34acaa
+Output.3 = 42fbb3c28e7aa943c9f06a7da2179145a7811ae12588b8be865627a020fbf0dd99cb2fd79bbb42df6b1d91d1039a1ae7d68a7c4be02db6d24c5f63140afd010188f39eb8b74d4737360ceeb8885d4ed8a03dac5b6b2248a0d8994498554d79d28615547b0fb30fc34e8dd23f7d123585a44e2285f58181d0a4da00f19ee5af283d1564a79e03af42977e063c531efe3acd35bedb469ca94fcfb45ee66f25abfb142854a6e28f004e7eef73e2e5bea5c06c2c7e00ce5793a31f6e533bb84396d8
+Entropy.4 = 688c64470a51b1c68265fb6b0dace0a2481b4a27ea3dc7147746e33a53e8714d
+Nonce.4 = 63be1e439905100adb12a6049944dabc
+PersonalisationString.4 = 42257ee863c8229e9f9c9c82d2892930fe0a3b30e0f9a6953293a89decabaef6
+AdditionalInputA.4 = d4ecf65a968839631f651b34eaff76ac33b6b97932e8960c5f958c705052f1da
+AdditionalInputB.4 = 1023cdd5b7240582b8f68d552a95ecece66fc28052645b8873460ee493c7d6a0
+Output.4 = facdaf480300d1801e014ff7a1d9e37534c580b623b9be1ee6f24874d2ef5c695062b22b1041a7e67b26a191e39a4a75d00ff7b49a059081906b2d062f58cc019b1eb61345b7da93e68ffcf387def041dd7ec24bede8ecaff0b8e9813ce34706297e09e06755134bd242c86c378b4fcfbf55dadbd33cfb0317df267deefa8a009b7cfd7c693676e7dd818d0460ecc70b81a9085da1efb7d1c162fc86d53c9dc70fa7586f1c25d574395afbe2262dab2625a445e3216346e0dcfd4be388f7623e
+Entropy.5 = 23fa4e2f46e3cb221dd86dae48e7be4353ca762cabda028d30bde00ebb8ab51f
+Nonce.5 = 931ed9ecbce7ec9605b70a81ff15f700
+PersonalisationString.5 = f5189f0fc5eeacf22b56d3e1591bc8f9700d8df5c55ab46a405b7599c4877703
+AdditionalInputA.5 = 7457277860b1a789aef6273aa8b76d4fa78211c3183bb19d359e7b15b2a92910
+AdditionalInputB.5 = a448b76609e8a5aa826e4d856f8ab5c83da8ae09ff5e005a28bcd76012f7c4cd
+Output.5 = 11ab01bfbc67db080a1323a3c98e08a3c53ff171132798cd0dede1f3e091302689cf7252a91ac83572bc485b3c4509b69b2bbfc33b9e976f97ed337d765e9ed6e88a6f731211f9d4efab22f4b818162914bf55ee3637541d988bcf5a7e73c6ec16a5def6d37c020c5b2236e7b2ac60c7f39e16a99a6fed6102be2752182c2b92fd54321bcfa0a473cbc6e1428d015d56cc69db9df2592010578796a439cb87bfb6380c9acaeca9747cfc99ec0922a725cdd5444c52d1b7d40cbb92735f97126a
+Entropy.6 = da401bc7dd5d32fc10552a71464e69bbab5a3c078d8dfd163105095d7a8b9102
+Nonce.6 = 016de70335e530d98a67b53ca0ab21d2
+PersonalisationString.6 = a9b7138dfc2c3a0ae525b52be361ae29a34be5f565eb7767ce864de669d6c878
+AdditionalInputA.6 = f20333a35d035b1db11a9c0dee8da0616781d146a7768505c7c9d6238d425ef7
+AdditionalInputB.6 = 58d80e76efaac6196a864b0686437f8f37fce5ebbeac730def8e6d86128ea0ee
+Output.6 = 3f68928bbce71e4cc5d00aa20f6aad2fbcdbcb3758693f73b520a38ab8263cb62da057d2743d6582ab02c2ca6e0552e8ed82bf50e1256b19e73e69df72a9a0beb35a0167d52ec60d172ed32a919063ca873da14013cc2f153d44a92b05be03e9116c07b78f2997d266f9def541a03401195a54e96afd06ce63b24c3948be82976f2dbd82f87fdb68231b8ccbb401b51b7589fa39da6d23415e5b61d51edbd765c8ecefe82fe7ac4d5f3be17d04595b25ff0058735c1e28c701a53cbe610b213a
+Entropy.7 = 923104612cc5f070f1818ac997078fefa47fed6a738de0f2f0864cb408d62f7e
+Nonce.7 = 0f4ae717b33e3918a5f4012ec393a89f
+PersonalisationString.7 = f994df70505979458aa58eb16fc61144122dbb35ffe994144769c706ab1215bf
+AdditionalInputA.7 = 31cc002b31d02fefac8e4d4bed276168194a363defb6dd9eabf5c393326e5959
+AdditionalInputB.7 = 15a67594dcace6eedd0313cb3d0588246c881fec7ff1811e66828bf6ff8e1cc6
+Output.7 = 3005c8d7ec50a45669c1cc96f72ea81fd655d8217ff33aeb3dfd8e88558fe135d21176315bcab35daf059789494719f74985ec2b6b5d3a4df88bb06ee1373f3403f3b2085beade29a1adf3eb6653717119865787cf1e78d6d5aaa74f4cbc02daee0d72cf24088fbae885c26101d1aa94420d491cf7022c84ccb8531c7f5985cb3bc0ebe1d1ed6555a35b9f87d0233d175cf4510a27bd2e8aecf3a3b23835a974502d0ed968e895e8883279bed8a1c921cd53317d599531feb1909bcfe3e301a1
+Entropy.8 = a350a44a16d275555a788eb51bb26bf55728accd72c923f0fc94aeb709461361
+Nonce.8 = 7f85cbfb9ff1667d994f97ebc7a68718
+PersonalisationString.8 = 4375dcce5f24a8b83bed735df6ea8fa3c844e2e047de1ef39e1c7934f7a10e0d
+AdditionalInputA.8 = a9a95100efabf115d1539a9af5ca407a49b10eec733e8bd29d6ac3658dad2cc9
+AdditionalInputB.8 = 831c5d7c1b33a8ef19f0f9aaca3d8cd39ed407792615fb5e1b1a8a31d65ce828
+Output.8 = ae851a841531647e0a46669bb1b47989f1984a20f338c0af1ed1b6796be8a30665122601b7e494b27ef5582326d2b1c22a9b4e2d193392423226986dcad99adbcbb20c1513e4b80c7f6b2732475e5eb8a62c35b0e549da8fee0172a666aad8170a9079e368f1b41bcbc2901bfb4ef8c65d93beaf98fe75db6113c18cb111b3d8ec719b12ff74cc08c95202952a9253694f232be8307d7e13c860d318e8e20722680c1558d30fa1288435c0d94b6e63554d3af91a3e86fcb7825e97692fdaf3bb
+Entropy.9 = cfb2ffc9697daab880ff300b2d0a41c28b099b3a704fcaee1ee0ed33ed51e157
+Nonce.9 = e6646b09e52fc6a43b15346fa6919590
+PersonalisationString.9 = d6f092bd1110ff92d9d814ca793fc2b974b02e05c24588f453486f6725bccc39
+AdditionalInputA.9 = 929624cbf5c2a47f75d6d9d7610b7ca68528fd4aad2a3e87c912513af40c5d72
+AdditionalInputB.9 = c4e1cfb35bc1defad7585f72ec46d2abb1ca8725109de9d11ef7194868db0596
+Output.9 = 8d177aee91b7e512fffeadfae92c257d0e86ca70a9f7f5950463fbf624586b994ee1eb181ca18f8951eaea7d48730dd3aef54ec44a8392a256da56111cb2efefada54d40a8eb196413b434a166636bbc38d2dd10364ee30543c1801a573b2ca7cdeac3af2d283742facf280fee5abfedf407d8aded0472ab0737472068dcb4a3a1f1e0eba9beb9f4c59eb8c6233cf06c545a2ba47703969da7635813b484aa2116699d8e6580a083bbf8b1340649d6c1ed2d262d67d91c1bfa29b125ec46f5bc
+Entropy.10 = 450f27b3254d5f8fc52b388706eb184ed91770ac1ba3b10ede029efe079d2789
+Nonce.10 = 8d745aa6d6ca92faa65d4563bb8b5138
+PersonalisationString.10 = fbce615973a829e1bf32910a7588bc43151bbd28bc4bed214aac784a64cc7795
+AdditionalInputA.10 = 5584acd4db527b639779c21e4feeb5224db0e5a8d00fbabeb3515150aea1ff28
+AdditionalInputB.10 = e236d5f4397e50cc5419d63e6c546f5da4f20977f849f25e600a6f691dd69234
+Output.10 = 6c8c81fbf78c8f756f9fc6cb0557c41177bc6be6f860dbd10da4902c8e1f6d8139fdf5efda03d794bafc9daa88f0f27b6a68fc8f74798dfdb40b4f4d1b41230ad1524cdfd9fb417a9ecae336aa0061aea424c9b004daa943623b60349e4507854dc0cbd222a938c86f767ff4f6ceeabd95a1892a61fd194c53e2ba75b327a541be8724fc2cb8274d23923ecfc3bf13e9664d45894ab2cf5dc0af6728bd85f89f352479cbd4e2fc35d55ecb1f3078609e8e79c265ab36b1aa11222c0e9a9e073b
+Entropy.11 = e704e75c58530dfe375f46afff04c60b53bbf6064eb422900a30ceb7b9eab5dd
+Nonce.11 = 6d08c287c8908dffb673aae381d8f0ef
+PersonalisationString.11 = 9e10fbd7d3829947ff27c2795042c8f3de0bf2303fcdace14204f2b1a121f0d5
+AdditionalInputA.11 = cf3f1a6f76aa442e467bac41b72ad8dc9f65f72f7d819cb80368ab0cc9377d35
+AdditionalInputB.11 = 7b0b8726a4ae3e2db51722679c2c546887ed6c23c591f69ba04d3982bf310777
+Output.11 = 4d6e50d77707246a660ff4c30fba80bfd5d50a7fc6589c8ce01298a9ad41a49aaf278d6b624bd321e8e44dbd4f72810bf1751bc5c8b7c2abbe5f02ca4c89930c586956e868553c65dcefe424eed6c1c73837f38d5b723a0ed13ae9d0e683f7c67df42a8d5bbf164ebcfc9574e00f715cac1e2165d7785ed6c16dff50c52ca3ef8e4f90b6fc6f631367680cfcc528afb2fd44b36e65bdc7eac1b84e89d6926bc67f8fe597146d24ff2e11d1dd34fa194c457c150cffe32cafa58fda63e0733e59
+Entropy.12 = dc2b1d58051bcaaea2f7a244f3487abd9dd13132e48020c084391177f37090c4
+Nonce.12 = e49f14c3805b94ba08f6314eae58312a
+PersonalisationString.12 = 432a8166d184b5753d5665ff24e57724e9b420304ad1bd86d687b8b5d23fb604
+AdditionalInputA.12 = 26b43b327aad2209a2ad4b5893ff91b24384048be2c60f905183f61bb3a99f66
+AdditionalInputB.12 = 6d28a5f4dd27101c04943b1814e8f56a72bfe11c456a7361843ffc0a4c3d275b
+Output.12 = 54d2bb638335ef4d30bf03f1d87e9c356bce1db6f48954ed79c0f5f0d350b8a84d6e9d58eeed77aa371eb3838c379f815fcfc0fa94f2f6c6b656afcfc7c6a6c32556a4609f88c6717d35cdd1be5de5ec6000b3fe25ee549d8263721196ac643490cad2cc2198b7988139c2976c0fc1d4a159e0013c952394053efdeabe4b58e62af9e6729b4ef520942a0abe5ad7e1653e7fe4e128edd6f759cbe769d196de2b6b1348019bb2117813e2c096f74778cbc428a1c03fbdae977e156de1748e89d8
+Entropy.13 = b01a11fa180c8f7c4246a92f8bdef73b7b02cb94bed5d3bddc9a71fc52775b6d
+Nonce.13 = 9cc2f6606a9facf1b9f6a174fa7856a4
+PersonalisationString.13 = 1390fc090b015654ea800b2a76a51ba197364872bd572e5569a62b02e781f3a5
+AdditionalInputA.13 = 411cb153516e88ac3047d42554f130cf1f5e4584eba05b12000d57ce26092183
+AdditionalInputB.13 = 181671639b100af3c7a6a8e4c52f454f13c7842b9dc8363094a83489b0af3bd9
+Output.13 = 0fc49e77d42dd4e21547be63dce71228c5778f5846de734f7b41a736e8ea78a0f7e128dfdb56b21eff43f6bb7bfae1757815ba39a20f9b63035402c3a98833cf0624d68206d67c4aa20b89b6cf0fcefef25a8c10dd32bb4eaf80cf29221ff2cd4d2bcb7cde45a1c7068232f2db003dd391b546c2fc70d2e8ea381c9ec130ba0fbd85eae32a9eb7a1d600372babe998d80d7208914d56c6b5d078313e6b8c9df8a729efdad73fca37c68c53898bf59425460a9034fbbded5b7c738dc2310bbbb5
+Entropy.14 = 43c8625576b8f3440c13d936134ade09d6f87d3efea33a2b8df97730c8ef5687
+Nonce.14 = 4155f20d1c3dfabdca10fff13e8e8c80
+PersonalisationString.14 = bb10eea932e1189909516dbee5d579c363b2d78068dae2c87439ac6fa8717651
+AdditionalInputA.14 = 32f618446311f03a0038dae07e85e19006a55b69501d764c241f683be50f027c
+AdditionalInputB.14 = d64a97650e2f25362fd711c7abb5635672e16a02a1dd5ed8a181762e86f4f5be
+Output.14 = 54ee53e6d18e974913ec235a37a706868f217af33b25e8e5369d90071be1d01035ca331b8514f3d6186a9ec62b1e7808b7fa22859eea21e4b8113ef770772561eff7f8b6ac22125d002f6ba9f53b235f7d85dd5b601787201ee1423de5d971b2e758b3955a048b50f118c01122a8e657f69a63843bea00a46c4fc2ebbae36adaebfe3e6c9b1c82e498d3fe48d332ac1bf31ab4c80830086c8ee4b1ea190f8e269f74cd760f5a29d244064d09c1bc30832482d5205e35604a388250a7a196ec74
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 7ec861a971e4a5171531bcb60e13109d62f91392b8b24ef9af0413bd44e3816b
+Nonce.0 = 721f6aa183b04847e45cbca9c84a4390
+Output.0 = 015cb92b0ceff3fec9dca022eb53cfed0f5c066e2bd2082801c6a5d3112a1df8ca2a9748cd190e95ccf2a5a86d0ea164c25cd612a4c4793b3f4fe17348d6db7f11b02a2a1708c6aa4b3fbececb8db1e4ebbe5231f078e9b841a768c5b5a3453c30ed3d21632bfe0caa92d8ad00c34e36eb90cefcaaf4bfd3c5d23198bccaaa224f4bf642de696660b2ca7b1425e57ae8cc30925b940b593921a0503155c586c2f4b4a9c3499dd7f977184f89a6b53bf847c08a0a8f4d5ebdc18aa2367bdd1d43
+Entropy.1 = 76ba96536c4976bf307766cafd308229adbbac3ee4bed239c83531840827ca05
+Nonce.1 = f56479f011e2c46dba76d738a5bb3d09
+Output.1 = 8b23fe629ab734b6204932ccd9ba02a20f7293c55ab271f7ebdde54af9543af9b071b27e48b83641265ed15961a35926a7830e808444eef27a9089439ed278c11af894c63184f2f8fb4923f1da2b414eeb3cf7414b99edf65afa1a02ae0c3376e525aabb7f7abd363b2cbd68ce94183455dc10e2b92b4870cfe35fe1aca83b6a916f791b9f642a20ea8ba930e2f8b565f316cddbd020ac94da9500021c3218864da7f4cf8533f3538d19902622ca7819cf725e4be5c17973cb3ac8487d2f4bfc
+Entropy.2 = b821a3684d176480f41d12c444d85ad78a76aedf6647277618d793fd03e9cb7c
+Nonce.2 = e7836140aa4039b91be35524a5accacd
+Output.2 = c943054f1319c1185ec71f1641ae7ef7d2ccd073b710dd7e85702464314d88f5d5316553a72a906f5d99897097ec87617a483971063dbfd88c495aa974aab3f633b62a73f95364f90dca491731ea87b308403821136be078de3fd88baaab9348c071bbdebf9d0a9515083613fe8e067a7d2b9bbee8a70b464878ebc95da6b7239e87ed1c5c27a06db189f05aefbbb87dbfb9978a24f4644a96bcf7f836af08447890268e8e786b4e0ce1fbdcb9e548d905d1b7fe8a3a69f95965504665bbf198
+Entropy.3 = fbf6e4827e10a380cf9d417714a1a9e4e8f33228ca56bc2e16d0b4281576ea69
+Nonce.3 = cc90c8f06c891546ae3827fe35dcd427
+Output.3 = 0819f6331d9c831ff9e9428fcc762386a4ef1cac711a29f726181abc2e2bc76b958b534e2030f80969cc277c1a02189621139eff9d9fbbf02572dc4d6a8025fc96ccc24135890f0a1b2f921ffc4ef94e2c06430d0e32769eed898eb274ac19c9aa00b41886645f55f7cd86cc42a98797538376caee380b50eae6e0398cc967a8debdafd16b8cce27773806701c5370e894a67fcd559e437c8425413466df7116b61ceb155539f26049f5e59f1f1214fe0d7111190d437168a9977e1c7ed716e9
+Entropy.4 = 69cc8d57ae9479c32dbe51ade985eb3b6e6544f32c95a7774bd83631a4cb3cce
+Nonce.4 = c27e999835c4b348f433cef33e0dc9d7
+Output.4 = 8ab9505d1c4cbac5618faf7eb0bac480417f8810069bd8413e04c0164b96c5435199cf6e40b684d7ff4dc1b7ba48634d004bce718c996aac58b8169b86899cadb8470198bef3c7f0710e641683f4e048027b4381e551c505014918e4aec94dee56bcfa08beca3adc14bfeca86ec722f2c360dc45c26ec73cbe6638b2dc49ac13a1625a66229d5327cc037b7874c9b3082a05839400c6b18f19e1edbca2e249a816dbb0979b4566d481d0d493f5281c1acb070234b9fd876e42363059d89bc4c6
+Entropy.5 = bf13f2521b5a6e715effab45554a85d5e70b059c35b1dd997daf02246ddf385b
+Nonce.5 = aa94f820b0c56ef0b1b5899955643e04
+Output.5 = cd8be0723808d583df5232df652bea57f043cdc004f8edf18ab7cd53b75b0627b1d6affbd8e7f27a8e8098cfa33a8b34f21cbb99fc2298d7f12e90155da1014e36d74781f1c48549496099b4a12b5780af05aa9cda3fb7b3641f30e2160defa2f59f1e8aa754a9fa3c0f31a1b7adff1eb3149bf6f6219e834cced5fc1ab357c0400797e969b2a11ca37af17342c77d2b4aa5e7fe49f3ab530de0041fe785216865aeff18989e9e7859174bf39ca811bc5cf8d4cfbea8683ab007ae6f58dde898
+Entropy.6 = 877a45679277a32c3dbe08285702dc3b799c344e9bf05f3621929fa48208e06f
+Nonce.6 = 4a33c7167e2800193222a29139792f31
+Output.6 = 885700296f0e10c506228e49ad393458112483d894f449f41afe8181814d06bc248f1068c0236b4326db64b9d12d302b2c5ebe57774fb5070e56b83d283c7d7a1e6045caf62e781dd5243ea75013bfdba0c2eef24b632719cf590012e6685dc8f9811370abf51c15013ca66b0e2164aa7d95ef00cdc12695313dd68534cbbb783ed37f7ca116fb3c40c79e869f9cbf13c294987c7dafb1d4eccf8934c769c487f1e593e316f91530ce3c6ae0fd9b9c7286f2d99b4262f55269b97e4654bbd575
+Entropy.7 = bddff6b625e8af75ff95d00371f098f98e7e46a9fc1c58225370c989c04790cf
+Nonce.7 = 53fb18229c3180a01b27cfe06d5ed81c
+Output.7 = 98281f2145b514dc3baa0f153c06b65d17a856096c28da6bb63a5ce72ff2a7991c1b2e56c54feaa872d203faa11b67e4746ff28f8d0720ee44eda590a235b2935a6f6eb44e4b99db7e4b06ed929d76bc3ade6d051e78f568c1da530715b2977ffe34ad73496d92e22b2adfaabc70504c5b07b254434f69fe77e2fe8e4c281159ab5ebbfa27fecf585f5e1ca8350dd8af08d614eb9c2ccfd23a528240d4c18f1e38a2f0899a7756f1c933af46a20d191aa3ac98031f46398f1d31101c8b7c5bed
+Entropy.8 = 6b9100a1a9f7794cb91a4839f0652d3d6145a560c902a65a2ed04fd64705f806
+Nonce.8 = 991cca4ff903c7c11b5aabdf3eeccceb
+Output.8 = 2a023a002385b786889ad4e90ecf4fb8feec1205ba22bea0df1186805676c89edf8816dbc74fc2c6f4f9cd99d5ed9d5d513119439706b45a4f694d765ff0258aa61ede082a0a07374a8b31a3e60059cd0554f6404d316c80ba2c1e48bddddcff7325b23eab2aff046b3d77b88cc16add5187f5c6aa21c60cde458eef4985bd458cadb7cd6e72073961267c76c4ed5210d6d3656f5212785e81e3d5dfd7f9ceb1be685051f18a942c914fff5b22eec72365158de583079594aa075e0805387919
+Entropy.9 = 0e4213f8305d5f79a03911e56f92056ca972740ed13c7c443003ea1950a752a6
+Nonce.9 = 8e9d8602dd03e0e48efa3d2262799bf5
+Output.9 = e6605936700593052d366fd6270cbe134004d7eff6b0e4d5b795dc2e592ed01529ff6454ee51c4e162d713ac58548f022ab327a7dd528c7e1a03b1fa780c6d642d18b2de50a572b5df3aac3b4ee2705e26387798a097dd1b3bfe91f171fe9e84a6bf8f40fd8e78b042dcfb84e502c1cb2fb8d90aa9160dafbba1656557cff61e9c778451e9ff608c6729b1bfce1586ddc2e02c1cd5eea75a3dbbea1edfe5c3366d731d1e8f6bd8fc6988e34904f546100e80bbb9b2e94aff5276844ff97f116c
+Entropy.10 = 800b8899668cb039c21eda997426aaad014ff6f75c31bf43fe4e6c351096b535
+Nonce.10 = 2819a2a2438a3f345d13ea74a0eb5560
+Output.10 = 7da447d31e9708332427820e939182a22fe9133d141fa92d1db3b27ac2ca062f738b54ec52b6d970bdd64791b8fd7f7311934a46926e2856963ecf28de4319ae2802259d35a8a40ca4d334fac9b434efe9e23f8d004d7375b04c2ce7bd8f18ab31f820f435a116b78a9176ced350f3dc04afb03d83e05ab877116ccc55efc80a75c9199fbb0389605d581e1a995f38211e71b892555cd5632e8a27d23db41397d0a9f9c715e5b27f784d7c20ddbcb93708f17656ec77d5fc72ca3b5e91058465
+Entropy.11 = fd1d6c0227e52fdc2bc487cf684b2103c1b67ec452424da6da6e073d4b0b14ab
+Nonce.11 = 97a121a6f769277690ae2d1584e602e6
+Output.11 = 0ae6343c01a33dd566c695fd8d89b8d940bfca8b8112fb2d217378a47e85eeaebfc95260336216538be1bae906d5c945ddf9fe4beec588d10e2b6e35cafc4956d408d67a522ea4e0ea71409b71fbf85c4aa1490e0ed60a86d9b4aa0af730671c2d5a754139b07999db03922468fc22b2773da21c3af92e9da846d53a6505095e657b45021109bd1e89ffaa243b07d7eb7f372bba7b3bbaac12cf8919a2f7acf7d2b47b16321ff9de306bbb1209fa521c5d30e9b3aadea89ce8500b2c1f04267c
+Entropy.12 = 0665e58153e45c179d7642324c07af0d8987c79b41b87e2d562c3d93a0f7124a
+Nonce.12 = 38d46ad28aeb68dc18af6d5e20248e49
+Output.12 = ce68def79d3e0526d56c97f95d415632a4df57ab187e264dd63f488a6692c65c1bff9a0315c3c5613b9efaa34bd8f778d0cc6f686a791cf95eee2fde86f197a71a352fffe6ca3d51fffdda29c9b926e95863b27491e0358c5c090ca858b876062260e459c7fb304aa28b82ff4739f2b1cae2462d0e2b65cba9b672a5d971da523b197a6c3b364343f97e40abe4a06f68c80e62ce8b49d0dc1341b2488d7471208d1c007ee17d6d8eb84cb38666e810abcf3cf94742a757b5e4a4be3d9b830d3f
+Entropy.13 = 76d73d310dd5e098a1e5b4b1fa695845742894c8af70a435cb2471c242f880e6
+Nonce.13 = 0d5df7286df0456f6e7c57a4f2b0fc06
+Output.13 = 1ba858b861bdc4eb4ccd356564fb145a49008ba0c3fb47813b11271cd65df113f9a123f0769b6a3c921ae0cecf25265256e36e287ed2cf389ebd7e29aab0bb74214304aa6ca9f10ffb7471e74bf61cbeb7ab1be1717a6daec94e5c2cadbadfc71b5dec408debb9fc228e43af3377d91dcff956cbe39cd34728e7f259f51dae4c75b13b89131056eb5380fea3ba5a8ed462553bf85722a3c5348f7d8a26caa1168776d841b6a1b2d7ffa9a36b4977fe9a50eb915c4725611534551cac5c3ea3a5
+Entropy.14 = 9168436a8600415b83062125de0ce6a998090216dea7374af08e6d3becba054b
+Nonce.14 = 94206c91dcdf9c7c3f3571c703013419
+Output.14 = ef12bd2b6dea20cd197ea9eabd98eec1a2943619cd2a96dd16a6c5485435e00c59570ff14d7d9fc09c99ade0e5ec12a84c0a8ccd5677fa9b92295eb2a620e8a0400bc9ad8a1ac1aa4969d8d04b77ad59b81d95cad75358698107dc8a2ff42adbd679ab29cc29cd6ea756f4c4e60c271c3134c48b5d5aedecf011e73c2663ad1cafe57120cc70137370760c350f4e9c0b8e9b01c9acaaeb56094434f4f87c67a5b5f674783204ab0d0598c06f0802a05ec97073c005f3c9f772fe0bb449c1cad0
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = f550a73ade2a81e2aac6c4fb3fff7591ea1b0a3b1f3729665b328322d65cad39
+Nonce.0 = 9699a10c9cd9ff305458d0dc98ae5754
+AdditionalInputA.0 = ca00085218dae0c745b6c97a71d46aba8becdbda6b3ced2c138d6cd666a83593
+AdditionalInputB.0 = 95f0300cd33da989c68e7af53e0b99b242526f6ca3ac96dc755f553204db895e
+Output.0 = 7c13c680f872b693769b80684dfea1ef9b175c18992dccf1209246d090c538b0c74cc09e8a81f24af51e03e87620b6084f948688666fc66e9e2e2ce0f74ebe404b80db2549c35574c9b5a7bb1aea8edfee08d8d711394e301fbcce81d71c051d0e6d1635a8f58f6cd397ba6986495d984e1eeba844fd1c743d920a6ea80abcd5d2367419999b17c5d7bd05fb26b6dc37620b5c56f28bb0dd8f4fd2df28ef072b23e12b4048e6e92a14bf5c99fd67cfecf8eb587d31e86cac2e96d6d65e49733c
+Entropy.1 = 4a8c46491abaee69859e568def790f61e8ef5795bbc1313c7f6a04573c4250f0
+Nonce.1 = bb91875f71c4814fbc3b74254bcaca90
+AdditionalInputA.1 = 224723394147830a34509171940557c265bc7c15012706cb7f2596d4e919bbff
+AdditionalInputB.1 = a391db8e3da2c01271d562a377b84e7b0b42f45954d6d99155b17288c81a5a12
+Output.1 = f529737e0f26492d7b56a4c08eba591ad34e433917671ef8234d05c1520b8e69023853a0639acd3641c1f461c841ae2cbe6d4f543d8053083c093797fdb79bd4608d2c78d4fd9a82deb3be23180c5a987ad9b9179e9245e384096a4a410c72e8808bea70076a468d8f18ced06a1f91051d66b683c8cb1e55ba7027245c6a8a55a67711e2cfb3f63d7d530b8308976a6492f5259a87d0b3ec9c5ac509b2c25949ba3551a2b9c8f231a092438487cac50a173039633d05c67095745e2635864498
+Entropy.2 = 907fad5abc0391eb2eb52a33a94440a25a4eaa44510e14ef693c9ec00766f422
+Nonce.2 = b9ee4f24128363519e9574bfa40194da
+AdditionalInputA.2 = b34bb91f6e63a2ac02e2d1f6fedeed3a7f5a87c84469fbc0badc14396be6db73
+AdditionalInputB.2 = b386a9db2806d42123390a899783282ebba3dd55a7722574deddbf31949a663a
+Output.2 = d48d20346fcb3fe1933090bff111ced621699782492cdef6eb4dd13d797f0b6b85c60cd4e9c54e7c3ef86e0c81f2d69155cd20455aa5fba6326b084f1b5b6dc6536f8cafe34538fd8c5dc084236cb707fe9463890abb7d3338a3a869698e9d5a2f03b12fa83fd361eb4c324c4a734336369a92b3429ab2f2463b1b1e01c61ed2fd8abe0462ec5c0d0b34521563a58d031fef357e778864d00f2bf5834db33f7c2f0ce1b39a22fb854fa2bf9125067be15f0a3779dfc9b016bf480b31698677a3
+Entropy.3 = 0e335b6733af1bb5cdbead51be3adf5d9404fae9d5c2532e18a4a75308d32510
+Nonce.3 = 523a7a194ea46c97dedf8edd4ca01c40
+AdditionalInputA.3 = 44c47974894c61a1bc5c7cea1016e3731202265d23f3a44f4c60054cfff9caef
+AdditionalInputB.3 = 086fc6c5142b1b8bba5647199b7a6c0a855efefcef7553ddcd90721af578d9b1
+Output.3 = 96cb6b4ea71d2fc2c905ce111b2464eb5fe33aaa77c15f468ba02eaaf45128051b2e972ee7e9e042039cbc6a9679ac50a2a6c277c26e6edfe9068062ef4a3ad88af7fe49da0b92547e8670402650e001b2dd966f2a8f663e97510fcc791204d0d0ec780ee3951484b74f7f455b343cee97503617af207eab2229678ae96b984388eb098411633621e6350e5d192b67a7d6a512820df34171f737c4d896016c192d42f8e5b1dee49c7144ebfeec641aee385b20b2fb3668d06fa0cdee2662c4a4
+Entropy.4 = d8f8e9ed7d147bceaafa2238fecda0549f900d2b4fe50ab4c97b1f4234cd9f05
+Nonce.4 = 801879444c78dc7c4e66008c610003f3
+AdditionalInputA.4 = 3082526b235f490feee994465d1fd59e357fadaf486afef08e9227b4b09dd80c
+AdditionalInputB.4 = 4517a7b5dda48239a92411a41a613c6b887f264b83ac9279cd49e27200823feb
+Output.4 = 82f87a256ca3d2e496d697dd52c62d8e89d55175c36dd0b25d7e7b4f58e544d5e989b4a4db9dc29ed9d9c07741f72becc532879759bf17a1e954da4ce83f573114e7cf7364d79e1e31a9825111715bff637b23a58fdc7eb6fb196386d5a8b5abf18becce3d97db59af82291ae2b647724fa97681eca62b2fa2edfc8570986a963dd4fd9d238ed8d519c1bcd14dca43bfd6ab26803ea7fd04756e65b3efa048eb892eb887f85405a0c86573167f64e62fab598a0f89431e44746a8ae9abb361f6
+Entropy.5 = 86c8225a2c1bf4da6c8a1e017cffce3e2e9be8321ab1b9322da0ecc53eb8529b
+Nonce.5 = 05258ab2e5834f2f5ae255cf828422bc
+AdditionalInputA.5 = c31f94ae4c0346c36911224f7de28923d38658a9a991954dfa616014c000629d
+AdditionalInputB.5 = 290c37203c95d9259d4d6e13f10584df40dc5261d7e2706cd0db032de7964bfd
+Output.5 = 08bf5fafd9e17aac1db7a50bb7e9080577d45de81527ac8f8aacb5e3d8971318ddda9762eddc386dcee82a4af97d6c790c4651be9950661a9b521f1fc71a92475e98202595541cc75a9863146df2bfcaf6e5effde1cf816eca3accf22918732bd768c01ea5e31a67f6b069f4f59dcec43314135bb863da9f92f11d468f5ce40bf9a72ff0251c54f42563f383fde78fd558491131e2e2fe8d9c78c56602cc0fca42ce76fe5360c273b6b30dedbf5b96afcfeb5b1afbf55c2f5cfd520c1a5d7b6c
+Entropy.6 = 676bc936e201ed7ace38d38442eec8ab8b56728732c78f50d2c5c7b651a60388
+Nonce.6 = 39671aef736140a276208c9443bbd056
+AdditionalInputA.6 = 72f9ae3bf30332e1b6655cf55113202720dba5bf69f0c9a7bb2d3fe99ca028a8
+AdditionalInputB.6 = 9c134c8b6ae178e4e72b05569e9a1805fe43393463c02e6f6ac845030317f1bb
+Output.6 = d32a85fda8427aaaa2f9f78193ef5291426963cfefe0442437779dafd35f32b91d091de472d90b6ed94eafc3940a81a68df200ce1e4a3712ab34ffcccc618970afc96f084883e56445b137033fff7113e8191c8b98a0ff24100af1587eee09f3bdd9218d6c58868be6cc7ac9ff874719d05752b91fdd4fb170ac811a3c52d7269edfe26449938e2a47b08f37ecbaa7598088c331fd45b6db2921ad0b42aacac4f95732e7ce8fc943b2676d22a509988c826a8fe0f5b200982bbb5631eb549ea6
+Entropy.7 = 83985d33fd3f7a61d418892c79e568fa62d6c7ae33cc49743062f824a387eb81
+Nonce.7 = 1e750139896873a61a22845d998d7a01
+AdditionalInputA.7 = ac2a8ab5f56e379a6d567637024d0cc59573b426264c825aa00ffd33b806abc9
+AdditionalInputB.7 = 64559d045f264318e570dd79986cbf8fea8f5311b03a83c7561d5f896ffeffe3
+Output.7 = bb3d0b1d4c8ae2d13203c3af720ced143a51c2c095d0a2a4b0b83d3886ba1f3d763514914836b5912f65dc30cc2f61fe973dc4389dc8177874677e63aa45f01ea27854c6dd0a9eb9dc9ed5a2b8e002e5de325d50308c64c7df1960d8438e732f8c436eac2444dd50d9dc0136bc589177fe1f1a9782a219800d1b8a9fa4d36e0cac9404c1e30db227a1956c3db519b0efc3d07de0fe863b46fe9b1d21683b2661de4d85e8eafed5b0fb9e899db59008850185a39d50eac34e7c187d882572e128
+Entropy.8 = b79b06ea08a86b871c3a10b70749c0a93edb753e1eb442f6243d48df55478c30
+Nonce.8 = 45ca1eceb003819b6c2c9c3c96a22846
+AdditionalInputA.8 = 8f45a1ef8745b46a258a4273838d8d22fbf3a753583255107238fdb9017004bf
+AdditionalInputB.8 = aade8a28b63cfdf042406b6326aafbf7baf88eada200ec8d807149cb9a29d876
+Output.8 = 250038ae86852681851a211915786f766792179a7a32e949261eca18af237a65cb1ec6ccb45e2c1a8e4fe213a4db7860f2143f8eba763a94b94fa30f1436851b7fb211ac26347113e673f4b7bb52a7fd1cd33c01f58a6853d83641e5bd5a7447d0b97abecfd03b55a74514ffd204d79de8086c262e9068c5c004cfd3bf6528eea9ca7ef2f6dc4ce334506edc55d4d32359f1ddbf696320fb4822ac1cf1c79ecb168f9c3781288fc304f299a7f66271c308bd3730ff7b0d380a13baa342a5ed95
+Entropy.9 = 00d626c3ca068c64dc073c1c4927085275414a06daf9a66f16ff039c4a3f2c96
+Nonce.9 = e059cde80adea5a2dfb7f6d888ffe9e1
+AdditionalInputA.9 = 384583b9652d8eac7d2c8eec19a14f8f9f7ba0bb7791ed8e026dc39eb7566c82
+AdditionalInputB.9 = 46b2bcb68a7264dadaa4d6391688117f103c0856bd9df8f825672e80391657fc
+Output.9 = ec2e0678b67c881f8fbbd892a8a513453ad8cfed5aa98f0b2e88f1b21f0b6c172329ae1651506ff442f5140c867308db9fecfb906095d9c0313e036725a15b63a0d3c6ba631722ef345b2a3bc4d870c4e3dfbfcb9cf84336cb680906225eb0a8051d7a36f573953b80502058373eb737a168a29eb68d4ae8cc9217fc62cb64c939dab72510e74e637a0741aeb554f364557f483ea3f1f2028615b3852a4b2fd6dc3fd0669682220d7e6dc73bf4a687cc7aceeb8b80860d4de7dd437618a24ac1
+Entropy.10 = c35a05e26d716baf236e8a695ae328e2788a1846a5fd2c2fa04d91f4904cc951
+Nonce.10 = b75c87f786d01ee1500c678a89218b71
+AdditionalInputA.10 = 5ebb9f8ff05744163076a401ea1f985f15e61e334f97f6bf3e7cb233ab10f2af
+AdditionalInputB.10 = 7a7860b2782fe04c0095ff2f3a0613f81c28942bf7a8460c1c6a832408f9f292
+Output.10 = 8ab7021f328c92a1e5a1ea643c5deb9d0a0584fff0ea0a4cb560532e3d083525b846a3ef4042bcf90c595b36480f4f575196fa573e858605efe08f7da9f6e9d5baa22624255363312a2879aa997f69a3e834727b79212f8ae8c058450ebadf7d24fd8d08bad38b1fde9e9f04e6b9645d9a63f8972facdfae5aeabb71208f708373be24679881bfbcca4ae4741709bbf75063419bfd2a079e0b386adb8c7bade05295901aaa0287fa654abccb26f0bb611a3957808e0db94bdc463bfc4ba35679
+Entropy.11 = 7094eb8f4362d3c682b9ea841c5f3f4fece9684cdf90a64648a308263f960b0c
+Nonce.11 = 6cbe49f3bc3f91a1aee6034ae57938fc
+AdditionalInputA.11 = 356af1b365a70be97aa88058c12b1e2bb6d75905077caabd13b1de7c44f92de1
+AdditionalInputB.11 = 73aaf6b2171a959899af57f66b312129275e3926bebc7af3a1fadb312e313a0f
+Output.11 = a455e30a961d0e545e7060e58957ca8f8171208992ffb69a3ae8ee9aa59945020a1776a3365a622b82df14b9ae163a457b1cf9c325138bedc8cac7dbfcef896b2df29c3db67d622b53b52f06ce11c7b7b9d41913c0ce951e5b6e91385d43a728e1795c16a6f305cb1af6894f08372490f600139685f54d9b3a6d8253cf1a2c1a47e5c843676d0911f326fcaabedaf9295e90d3ea8cb667fb223d08a2e220db2619f1864d6d50922f031d939dcb68d8a73e8fea3136da0988a113c77b7d89e179
+Entropy.12 = ec581c6bab9f3650e4f81986d226c7110754e56b55203e3878a67ed363abe0ab
+Nonce.12 = edfe66023c6ea2e240dddd067dc2ff82
+AdditionalInputA.12 = 24ac39fad4e1c34c1610ce79b8d9f429ee1b2a84b90e51b0aa1fe70a2f0db259
+AdditionalInputB.12 = 3133186792cc1697ee64e4ead8a25212e1c8aa9facdb0ba32905576fb94fcdaf
+Output.12 = 294e71ba9f8b9c0ed24a79ba9d3b97843ecbe28c203fe5a11d00a91bbce3557c8786f540cdb1dc3662ffbd7238a56b9b8a422d2d8c689f5a1ca64cc888edab463c1e788b89f063bc6b78a19fad19e7df5c0e4484f864228862b0faa43848fb1a03e87d41a852313283d96dcff87c3138918e08a669c9ea2ac75e83037901b3b6cb109fc1daf38439ace1ef104817f47e009c2635612fc3a26c7d4f7d219388f08bf2f71b79615dd5940dec1237e40e34ebcf01213c355c87c7114233038fce11
+Entropy.13 = 9771c148e73b526145fb7cd020d8d1290b44bd6e9bc419ddb63afe8b93c9235c
+Nonce.13 = 2b9b1916d36006ceadefb73ce791a240
+AdditionalInputA.13 = 66660895abe90ed678c594c40a48d3e267a8cfc55c934d862c53003423dfa804
+AdditionalInputB.13 = 293e651964044844ca10dbd2d28844a9343a978e6406e14819478da868145055
+Output.13 = d803e3e953aac1115a9768aa223d05ef99e81decdc1d288e84942d66681f866b7431763367e0cb5a8d3c9d0bb06b8d032c70005315d5afdb2a73fc96a2dbb759987a6a6a10e1e80246b66808d704c42e1f64e0cbc976b6bfd0c45088c64636e7ce036dc8063e9bcede4116b1e6eb44733946f820713feeb892e584dace4fc3da0dffc40cc2ee5bec8bce062f634d3d7edd969d42267f21a8b153f6ac771d24d2440574fc4a15b92ee0035e809a0ea9e790ae7a8ea9c4feabe36bd0e89821a1e7
+Entropy.14 = 15b572a99520a823420e4223ef85ff32250d6977f58ae95b1ed004be62ffa57f
+Nonce.14 = bfd8f7be44b81fc23cc1a02b30b9021f
+AdditionalInputA.14 = eb9e19bb6eb7b714dc4d56243897916364dae7bb3861a4697d7d3f2b149db843
+AdditionalInputB.14 = 156d12c7a1d0af2cb9f2d0610cedd9ed3b982e77bf4a9dc1ef0f71284b751ca4
+Output.14 = d3b0b0ac5150afdb3d9de12d2c8a7d45109436ed9c316aef1d1fc5bfba1cd37cd750841146dd08320539eb1678962e990f7b7662b44b918447e173672b873b8ab0348306cf6ae2bcc6756036870745436571763efde334dec5be7bb9920629a36cc5db66e8824695cabecb8bf092858e095a2a520eff140f483ec528131c850a8eaa48d8c997fbc810401ca378666d84020fd34af77fbe1152523e979560708fb15f3b7981e333ad4ee8c2fb6021a562f339616823cac5998cd919f82d43f41f
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = c226c99e0bbdc88687d0255efc80136a3e76a5fad39e4f163f954365000ec0ed
+Nonce.0 = cd4b4f1435bc949900b6524b55d78eb7
+PersonalisationString.0 = e885aa3050cdb3afa838e5ff7c813c04b0095465b4ba6c4c54f92cac717e53ce
+Output.0 = 2e978624cedfbe0b48f9dc21e4ea31d58c517bcffb0e8da48aa402c275a120d132f80502400be2f8c33d3bc16f677a901d4a9c1cf48ff7a558ce901f5c14039b4473385ce69010e3ebf5454b71b11ccb9cf1851c2707d1c56e30615261c77888886fce04f312dc5d93e8ca758538d2520fa92aa59e90924ba8d8595a40734c0d7feae97ae58ea2c418543dbcc30c2478b06245a7336a3c9e3ca8943a4fba8701442ecc88fe3b84e3eaaaaec1efc033e47bea1cb82a2a867ab121746226667481
+Entropy.1 = d0a1d38a02881ea4e112344407be2055f96239b39f0751a1ed267f6a77207444
+Nonce.1 = 029eee3c270d1b4e8e0a19d73983cc3a
+PersonalisationString.1 = 5b768d026f40ef55ed66e19834d95304b9b6972a40dd3c43766acb87914879c5
+Output.1 = c801e38dfaa17b2185b61cc12570450884dfa272a67ebf4820592fce70a9eb2cb2ed13fbc39dd935c54cd1a8445d70c6718424db84e6b5e76a6efe6c1f86fc51327b72d38efbb6af9d3a1eaa9253e3b72c994d939330e5eb47c87afe7312c47719d09616095aeceb4680042944554b3c7a8b58754cbe2581b91040d546422c2fc8934ec905154358f45f73f66b9dd8c6cdfbed1269e0e73eda25f64c0f5c82a43e852b6f92a98e62ae1dd8387910c2f352a314242ec736131580799702b3f232
+Entropy.2 = 69631db949d342739b49fb8220fdbea39e5ef5329cd3244816545bc3c9b94c00
+Nonce.2 = 06bc4c7b448b9c389a35d47197707301
+PersonalisationString.2 = 37ba849d3ec78b5ff44487b0bbce6edcbf7b1737aa99b632ab3020f5d9834a49
+Output.2 = 573bcb166baa08cd384bfddd7ca98de22af6e5c4013478765cbeda74a2de6ec21a66b40bda796a8131d9f56725b6f3673f2374b0002d1e23ae0c17571a71702162d2ae1c0f4dbf101e38eb6dd91d8a7a6782e46f39801792d754a0394ee38127e1f3d6d759b584a876743149bb124a887614c30cdc7842b4d48d80d6a3fed5c96d2f6b30e6e183edd0357bb16927332a78f55c79a9dc7a3f813e3026a69d079b39c31a44a6b544cc3d84b21f8805d8db97b4ca75760ad53cf2c9d0e4e468e382
+Entropy.3 = 866bb09d74ff6d9ed788def6fc410e70c755051369b77e103da9ec1a8da78476
+Nonce.3 = d83d6d5a3f03e7f8297b9cad98be7068
+PersonalisationString.3 = 7b06685f6db8fa2e16dfc704b810e7fcf88440d25266785b3e6650df42fd1add
+Output.3 = d8c4d3f5f3dd127d56b721b5752f8741e2f484448002e1372e5c30ebd2522bc58034489fa7d095d8311521a3e05d698d3121b30ccaaa4990ba16c79d121f1df2da7e6a9fad52d851b29060cfd5b134c2a610d7ca710f49741f69a10842f1b407cc968645f9bff967297ae316f262da03be788faa4b67c7f2bd421fd85a0a9bad8e15dc4db371365d391d60c30be40e86eddc8a3235fd6e64b98fc8b2b04f83f2f1399d6b2f49b2ba03ece6a73a4c65ee93df15db5700cbdfb57384e1029010fc
+Entropy.4 = fbd6587801700d3f27e437dc2f016d3533f492b38fc34fe8e9fca7d898649c86
+Nonce.4 = 48f13df7a179cc6b1135be1c09811b51
+PersonalisationString.4 = 17f3c855de72a34275288699d056dedc0ac6ffb6e679743598af9e08049a4d12
+Output.4 = 41456396fcecc8623e5592de93ca0b9d3eb8a3ec2484b1846fd2dcba50f8493ec2ab6c9d004800b82be94dab61730d82d6a0c6273fdf37067f7d19ee137b462b8f80df50f92d2937fb2aac183e24f06d384bd62f883cdd35972bfb1767d41f44a1324b2db89b1192e005fe3b8dd1dc3704a57519994de304e4ed4baff4143038c3d7a857a8b0e252d63d1f1451d313edf45dcd1b7493da67633e24e293badf3929e09a6552900eb709d92b6f61d325448efa3a1956426f35a5397beba63ad0a3
+Entropy.5 = cabc1f91d773df45e9486463a14bca91a7a81fff5f878e1b9fbc55fc75b38ab3
+Nonce.5 = 8299c3957b3722e2612d05f888bc41e7
+PersonalisationString.5 = a819b53f9e30c48ad7e25d10f5951380c4d2b132fbcb429c7b33b5aacf261cd4
+Output.5 = 8c7c38e525169c374671fa388beb792f52e2ae9a9523fa730a51616b1e8588a84d3b739d3a60e4932df41effbdf6de7b771d67c506371367188e0ac8d1526f53e1881b5aa13f9853a2fbcc03bd1650957501b85f760239e110714a22b9f8f29335abc98ca68540a6eacc42679980cf40fac0a53a9808cd3d21ac5c077c4a081ac6ffe9acd5ad7f44816375ebdb0f7936bcb74f6f5493f2825502edd4bec79cda16f407026ce092bdf56830d00677843fa19d3fc7b0f0462ae937f09ba7bfe131
+Entropy.6 = 6701625b6756e0a8e8de1d0b9dd19212319c3bdbfe9f297bfa037a6fadfc2754
+Nonce.6 = 2a03a06102767ea29caf9d097699ce9a
+PersonalisationString.6 = 89dd6daec1ce4112061ca7f2fbdc60f33812aca9b6c35ef488fd0696c086af45
+Output.6 = cde347b70312faa4526626c1cbdf0d9519abde1120e9b6cf773481b0e4b402729561a81a8f8127d316d42bfa0bff2799f87445fa89220c206a0a9e4700c95b99a4fa3f77704f3b513b2b8ab5c84664c1dd7e30834d9d7a0e27fdd9922a311cd9474bd5e824b586652a5a792886f427974aa4673efe1a5ab6391179277a2f3fe4308516f1a7ff04a075a1fd3178d4e1117e3cd3fb8bd3d666d5735b7b4362f5ba784453894ab9625c1bfc121050d22ae6876ff0fb5688853d2e4acb064d66ec96
+Entropy.7 = b67d67c81f6bafa0cff2843581cc474afa2ba45c09a26d8a03daec1f7a60c560
+Nonce.7 = ef06c7bb28bd8aba6de1562a2491ba88
+PersonalisationString.7 = 99d8c88165f6c6d9a7d86e557a9f527240bed0849074e3f8a9184907dd8bdb78
+Output.7 = db591fa371e527beedaaf1d68acbb4a0a0d97f019c7fe41363ecdaac4374f5e1ceb54796b4934ff3bd316d498d5858c8439f99babf20a0f3ebc95b5ee54faffb19abfdc2b72306f5c8ba90bd07b33ce583fc4c01fcd622652c26ea70081ae26a09d10ad4656cd9f2f2039ca8984babe2e2d9ef912e250fc7449af58568c7ab2e2208230680db786668a21e36531fa4d427bde56204232cd6e54b936ebd010fa630cd631669df347c3fb4a1c653a518ac4d65d6da36699da39332acd4fb14e9f7
+Entropy.8 = 1263b3bf29a25c9adbd52709ec333099f4d26adfb9b3356fe24fcef8bdea882f
+Nonce.8 = 30c58470d8e4d6e4978b47e867bdab98
+PersonalisationString.8 = 900fd212a376dac224a175095d392d3d9e493e52f16d588d435be5b69bccd67e
+Output.8 = d938c0cb81d87be4a7df27d93fea45a92f6826a27a7f7d32edf15fb60382df18f4b471b52a60f2a63872438d8da72645fa98f3293ae6764c2cbcff58836497f73cddd83b1d8e216bd54fa8af3020d632dc69f812916f5df354a72f3d9d8fabe0eab9fdf40d3a2de6906e6ea6d50ddc1359ef384d2212cc0b8d82ae03fce1e5096d1f8311c7b6237b1a3cab7b40694eca12015e39a41a1c5cd30b351182a5392e0d27ee757c1de7ebd5627bdcc888774bbf7494103e7682c157c88b6adca638f6
+Entropy.9 = 4dd16486f7e86a2ed5ae8b3bbc2bd537b2d86dc8bc86ff1344fed3ef0c97e07e
+Nonce.9 = fce9abc0dc444c8bb2ca2a955a7ccd42
+PersonalisationString.9 = 5dda276a294d8116fe0bde3da82d25cde25d9f5eb9e9753a8a28c5d65816837b
+Output.9 = 4b4859fd7138ea1ee74695fc36e44749b37a21a5b736b8cfcdaed7a079ce2ed43367715725c60986f31ea5f0978e5272602b36ac27deb4467516a32f9c095d081d3f7fd94f024d8fd88ed0ebff3bdb8a31ffd0fe48cb68eb6d3b8780a92760ae6de81b3b215242dae2f033f089fd979934922151cd32660fb0a2a4bbed7eec7eecffd352079ebf56d80c23912fd6355bdb5f7f5dd63f2aa24afdc18c875a05cb543ca333758e2d8375ad34207110591b0c46d2ea552dd027ffc5040367fb00fc
+Entropy.10 = ea159b4a9efe984991f9ab6b94b41d5c8c077efb6466c24039c66e1099bde478
+Nonce.10 = 0e4df51d15cca504555458577e645887
+PersonalisationString.10 = 6ee0cbc6e341b8032105d7a675c56a24afad41abd7f5e716a089f84c1f18794b
+Output.10 = f487e93d0644f2f77e65af549082c1b2c8308d05cde1fbf5bf70a6f38eada3a2a21c38fd3f0c363aec51c7c101d8f5acaa61d7ebeba7072284947703e65612ee1d629dc365aaeee4683e6ab25bca4f52dddb7981d72d526d9aa368a2286b698ddec1f7df3c91b0512d70f4065ee920005acdbc115a628b13552c668e83382aea91b6414769fcaf44c9ce97eac2fdb6bf4da02fce62498d7b9af2a52b0969820041cac60e816b7d4d641ae6c4191db479f1d4de867b4be8dc53db1753d4a0f92d
+Entropy.11 = 0511f38d07e8590b4db94e962039b90efd3c5ade0b43bf2762a4072ba22b073e
+Nonce.11 = 84bb72969a96fc7b96a5c929ad2bc00f
+PersonalisationString.11 = bc4bb885d222d889701bef54ff198ebfec28b4c346aa25a206dc00df6977d655
+Output.11 = 658b2fe36e25a450c860bcc8ae3025480d14df174e2cc313ed721d3ff11e7b0e94b7161e7d31cec796060c28cafbc8c08cb5e0615e4c37f4d78a2b08f43ffb2d0b54a6b269c04a12c26173e268c297619e89b726d11c340135fbe46dabc249aafe3c1a69b45b16bfb3bf2652c5980b1f82bc7bc8668fd1e6bc14c3a900ee223812ef9201534516c0082a97828abadb49b0d71a5e0e2dd4c9226b32559486626c6f7c0483a56ba876dd65a49f5660ebe47ee143eefd471174e48ad9b47088f587
+Entropy.12 = bef178f2e5d4a9d1d06c7b9259f07cccfbe10df897c58bb151003dc7ee6ce28d
+Nonce.12 = a7b4db39f27f22bc9d525e00b20b68cd
+PersonalisationString.12 = d28af3d0ff436488cc480ebc15845ae1ed7f61964b49379ed5a409bc50b3141e
+Output.12 = 1cae8fc50d5054ab8ef4a442091d00cfcd5c69711d59effc0d96d9faa6bbf3f43436abe3443009b29d793646328d0befd1bd9d0e14e7f148789a84597a7f83e73a43991e9df0f93d7c0ea32995d30925f832240f97162fdc1ca4a36052e089e2b6bb1493d64a25336b221dcc391290283459d9a70bdaa29fcedee59448614f004d411ce7ea51ee1c21980b94ae8cb8301af79107b6e55492ea82f4b4c77bbca160ef9d547ee2623b32404dcfcd00ba45597127f10fc2f6dde1e2877ee738b920
+Entropy.13 = a3be3f8ffce66eb94ad04be74d17d7fa9fae16a8e2738e0845fd9c9c8654bd73
+Nonce.13 = f4cf725d0cc2ae9e9d4b6e04ad251514
+PersonalisationString.13 = d00ae9ce52f8a9515acc207b96fe56abfd5f89ffe55b52d046afaaba56b09444
+Output.13 = 686960f59b4af2d35f747eb1de19640f01a3f6ff19ec754ce9bab583ba2f4ed6fcdd7ff5e5df802a98a93ab28c4437aaa8b6e343efc608f0b7162eaedb6047fa2ed394a3a4c2571891b0a4f8f7439383881bbea1f5ee2acb40598e10b4d77f86a1616632ccb2edc6fdd6a42c972e9db1925638d83a19cee00b7a43cba278e2d56d9e9ce328b04f0e89d75880f374c1da8b2cf1361aeb6d6aeb881aaa63eaa3328e5f2a6e442c545c050a4255eaa2bf4fe812bec04cb9d98b7daf3ddb081b4849
+Entropy.14 = f40b9117c9bf9058139acd5bbc51267d091643c3ea487a3e948475f629bd1843
+Nonce.14 = 733bf048e5b112426979a9879b6a0c10
+PersonalisationString.14 = 58d91008875f51d541c6fbd626a49a798dc51d9cf2e8588808e74953392800e7
+Output.14 = 1794335e21606d706dc89ace28c60a15c0c9f108f5ac882b103eb62e225de749285e5fb0be98a5bdc26e3c998ae418306380941d78acb7c81b91ef41cecab328332ac7404ace0ea858e7835534f778cab3e3e4eff043742e4f7d4d5725bcdca0b6be7ddbf79e57fcd1d5a4279f074a599abac2cd281ec6784e29d9399f5ffa8def3252acacc59844c0c24c20d029a89b4407e0b5cbe9a8d51241dd36bb82c400ec4571dd1baf831d58fed3dde4ac7f961be6ebc18af6bfa922a32b81ea11334a
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = d7dbf40b15ce2ed99981e548230f2b0da3db0f89a19d35f931545cd6f631da41
+Nonce.0 = cd0d2912a9f40d0a10573e65aa23d33a
+PersonalisationString.0 = 89e9f6570f95e59234f850cf572f2e82dd9b898c77b83c466674075227a51ade
+AdditionalInputA.0 = b263d5355c94d9c9dbf430d763ccdff333616b955bdadefb7bd74d3d08a16ba9
+AdditionalInputB.0 = 32dc3f4b48126cac341695d1974c67bb343f0e2d1e2550f701b2b611ae3c942c
+Output.0 = 1ee4e48d8332ed174ee3be9010cd5c0258288b7b952c14d0e1e365a675fc6087e39e7e40fb2ec07691e40732aac1a1cbf5b0e6c551fc17f81be729b1596eee49586d2604c8587fbc0acc0006a73fb84f90680e135d9e25a087a6910a82d93d8d5026415981ec8d1e6b3a12e25d6295fd5217893e50d5e57704ea5d221f8d0457fc4de51d7c5421d5af63212050252252d9fe1ca5421c1e0a2b262ac206f1407e000a55877bd5610bb5f543fac0de3b5834fd265e34358b37fad97aa404649d78
+Entropy.1 = 8a236b8c0cfaab8a9c0809064f164d07c183a7b78703eee797d77e515d0da612
+Nonce.1 = 47b2b3e33e95b2f3c2b8f8dea0c207e0
+PersonalisationString.1 = 443ed6fa3941e0b67a107c6545d41bec3cd75746fbc910507e2f75d9ea2f7795
+AdditionalInputA.1 = d71b802411bd0694097d27dc059cc512c38612147ed1cba292dca30de102f719
+AdditionalInputB.1 = 13206242a65ef05f616543ac3bb308ddfcfca210a3dfe06e627acf60db11c50c
+Output.1 = 7cae1fd9f7308208bc2c6f98b3a5a05c4a4d0250c759d2be6dcdb54c1c597b7b301d4cea849126fd6d724c240ab165d8b75b81cc7120d2f727c9b0c0849e32611b79751d175fa7189d096eee7887b53afb625b4e543b67681942eb98c871a5ae4d24e8db5cf477f6109186a0a2eb64188abed1eec15513d2408fcc5e97d8b99b06e65491f6a15854091b10ebf9fd9fcddb5d836a089849467f3a6fff40c1640696ca1cab392f3dc24ccdd9568d971e67ae452d36fe8a320e6d9a9bfd03f499f3
+Entropy.2 = d433ecd48f0f8eec52abd23c7201244fea49c4ba16b684d402e4e8e391938405
+Nonce.2 = 3d96ab5c95f13aefd4d63449c5f64fdf
+PersonalisationString.2 = f0dd0c4b1b25c923665109c02605451c55b7eb07ed3ccd0591f2a912fa3ddc6b
+AdditionalInputA.2 = 306791fe4783249348ef2303ac68a8d1e53b2ddc03c5004a5e7ba883fa251152
+AdditionalInputB.2 = e4eb15bda8ff4ef93d3ea03748090b835cd93bd6366003404d4d8277c5f1e76d
+Output.2 = 8780007645be1c9c288091a0393823026ec2c0ff9fcd61f6fb9eaa01b56b7b9cddecfd51e7a6263fe321e6edd12c17fcd5d036af711ac26ebe5f9602076b0334d055a1a399334571f6ecd5898c20011c05c153731dc31077679f558a4e1e75de4b7056d5ba5edd721eee2a18a8a74c4c12b80f80dd8f81f41e3cb42d654e302a96abe294d8c648e8c577be58a9fa8ff4dda2d4192f1ff3b0319d8f9e0d50a30673a0c20b83e7163375c48a0b85ae9b46cdc7eb4ae318230f0b8acc19ce908201
+Entropy.3 = f13704506d90cae5638820e685496d08364b60f210c1e3cf8edfc662da150897
+Nonce.3 = dfb760948872f8c2001531d8102d1cc9
+PersonalisationString.3 = ba7a8b96d6b005582dc14bc9dbf6e3a34b02431a6fc7e3c95e6215d92a882b30
+AdditionalInputA.3 = c8daad23ea5945eb738ad2c1ffdaed89ffc3fb23a192ec8f33fdc2fca6860399
+AdditionalInputB.3 = 70c9db40ba55f426d41fa0ea2aabe40d4d7c859b497cfe3aaaea39d221e035f1
+Output.3 = 52970c4b998d5837de02b3dbab4e6904cfd0315e5d46752c5cc977da79858b2ff798f0c5b5651fd91f95624a9f5b9375066e1d4705daca5df32c5022c589f58c8eabded1c03d0e195272c5f1595fa5e8979617f6b40a19398af3157585e346289c43e416b6129c64dd64f3079a15f71a824e10d832018590f8af828117952e783c4dfc2b27c86bca3dbd644f5d448bc195216e7c279d553f7078fb24f3251832c0ccbe0bf2331047c63f68b138561187b27a4381a2ca52279eeb680bd112a896
+Entropy.4 = f6e6912160ac922377567d23314dfad6fe63858acb53d29eecf2799190c76803
+Nonce.4 = 9c79a142bdb9db4d16844b37f4c1f6a2
+PersonalisationString.4 = 24133ed4b4ea655d010cbb09de6aa7ec2f307635d139a76a6f53134328ff16f8
+AdditionalInputA.4 = 66b1ac9156025628e845e4d16afe9c29eccb473fd8b0a76dd20d3aa44b1eb702
+AdditionalInputB.4 = 401b86a2b4271d27c7ece175de3e0ec606c125a3645ca65180ba096bc7f7f6f4
+Output.4 = aac448a6846ea837589de9c75b80e5f0f73b3aca9c5ca35a0a6992152ffa4dbda84aab40950255aa814b1e37fb628604c14fb8e93134cd02b78af6320fefe27dedba5af0202cb4b9b6afbd33623f3ef650eddc4105e898ac2e2a2a29ed69005bd7402f6b882df98ef90433c263e0e746d3f54ae278f9232ec1b6d5f1536f87536ce06f4602e6fae888b8859f76938b5aa458abffb636f098fc47c62f56d7584d762c5d3effaa26bd68f897f98500c74b84ce7ccfd5bca08fc3d4d8947b00571b
+Entropy.5 = 81b3c1c4f9750b1d0e70c92c28d20154fa6deacca86f3126180ab070e235ec37
+Nonce.5 = efef7473462f8ff6d1cca84534060bef
+PersonalisationString.5 = b3ad0c14ff8819c295494e80f0214014f965894dc14441ad2aeffe51e3afe150
+AdditionalInputA.5 = 503e69b70f62573f2436766503937b4980343d9659e8d8904025db535c75aa7f
+AdditionalInputB.5 = 43fcaf436abc01a27be29dc8a6bda725fd8a61f761dd9fb789d2f14e26787be5
+Output.5 = 272a34eea7a52e5c010571fc7309bdf297358f22d5054e10636f19dc6dc20ee9c7d311832184f8f358cad9f9c4b24bd6aae1f79ca917bbdc2ce82e1bd239015f745060ca8bd70c205ad25ae1188192b413e93e8785f8102b9a93dc5fe7be3e2ac0b33820461e9f7727ca40dc422eabe48d6d32165705da68ce4af6f92b1cde8417a0f03f957a1532a5d6edbbde3aaa5fdc31ef8ef23bb2328dfd41d21aa9ac34b3253d11db89621ca9026849d6054d743e86996bd0f3deb53caa56f9c5aaa97a
+Entropy.6 = c74f75725410f6dc88724e1d4042e65876d0c07cae476458548e9924862bf1fa
+Nonce.6 = 1aeeed8e5b54d980d76cdccdb282617e
+PersonalisationString.6 = 1ec1e3299f2d935db01aeae77e24e4a12c7acbf390bd061cf97b9cdfea49403b
+AdditionalInputA.6 = 89f75d89d4e6f01bae5ca0243ec0e4db5b1294243eccfa7a3879b393590c4c55
+AdditionalInputB.6 = d7623a2e811e3759fdb4111e9975fd718e014a4645b4cb39ac88d6d950d2382a
+Output.6 = 76c2ac9498598843353bf369e5b2466681efb22415c891dba3706a15fc92cbe9959275766efccff5925e40caf156f3a2ba47f20397a877b89c4715b72b9673305d7a6e7f04f40c5d9c7b8bce66097a69ab2148cfa4f37d138f012b627a0c2779dddf42012c96020b0520f576e5a7f121687dcd0c4ece1282aa0d46634a881aadefded803cc125625f309453f65f16cba85d03b083ca6d603de271760187213e2985d1f09dd7c6e7378ea5e54c2c1568d11cfe4f94420c7472783eb8999ba5f0f
+Entropy.7 = 9986c72fb73e9b17d2be1a899258135ad3e8bbcb3825698194e6c5e36c335fdd
+Nonce.7 = 8746f8604bd75b089ff33cc30e6e2a5f
+PersonalisationString.7 = b125be003e38c2d40043a26fe22d24bc93e142b86a7821a6fef68f72edd0547e
+AdditionalInputA.7 = 4ae69b086b45876efdc54cde13919e12705539ac595cfa0de346cec54c5a6dcc
+AdditionalInputB.7 = 13da91d9a02ff0a2527c4c9370896e734d92f92c9568bec22e268dbf76e913c0
+Output.7 = bb21f51cb988eb1c3f83467719b42d2adef2d07d24aae2f09d090424c349bc616a87ce7cf7dfec8a4a2651edbca628f6b07e73c25756d3ed67547e723d0f0f619aab1bc775eb509e589844c8e28ca868bb95d79f88828fe7f19a76e3b49a77e40d7fd32460f00a07b8cdc9573ecbb125ccf677208dfc2b49d816d8ad436e568b3b086b7fd5491101099c6f56fb8f154eb52be4f17756e482cc59108a79b0cb1ce3b43e619c1e14a84c6ac93f5fe20ed0d809282462209536c105c08f345e715d
+Entropy.8 = 6f1e81d2fdfc2f40a8454ec91407665c0771347e18860b4c3bd79e133b2d7eec
+Nonce.8 = ca7ec8767baf20cbd123153b6e80015c
+PersonalisationString.8 = 7e283de6520ff84944a760dc14c2d1b976e5a09c0e227a59499b4ddd83a102b9
+AdditionalInputA.8 = aca28f2094a28265e538ba59b4a0c8984198312b643e93cbad5e7b8aaa8c8120
+AdditionalInputB.8 = 62049e29ade953bcd8eeb7051b8803aef7a98caefc540d4e4fbf08e067d0291b
+Output.8 = a481248a2fa67f1defe4e9d4f26304d30004565e4880e4cdc37e7eae6d1ae91d2c052856764317af5cb89847742be85ab67c651d654c8f6f6f4e014734d6018330b91c763c39fe95b68e071740818f50705572a2ac391f007a7e23f6a12abeb03779ffe9520e9f0f840cc13d4a94b2946ea4a69a63dabd2622b8c00d65e2131ab38ed82ac8b4a33429aa6d844dcc6afd507db02bb67112023e014dc301b75f9e821d3e212ec2a34bde5b64497824f2a54651b7291e009615ad57968b96e6afc0
+Entropy.9 = d00f31999a8aefcd4aab14b74c5190a5e4037a6661ef1a4e107be81d3f7ac922
+Nonce.9 = c80f10d28a578d4c458a21aa58096ae5
+PersonalisationString.9 = ecd8172e7f6e23ca272a69fb2ea23c9ee85d763e567d5f6a684a0c12ef851bd1
+AdditionalInputA.9 = b63e4f662b9d9107281da4e19e8f6033ec47dcf02a5c5bebf8148492a948d4a2
+AdditionalInputB.9 = 24d1da3fd579cbfc9496d9ef3fbd7b72012b3289b9f132316eba13cc79def6a1
+Output.9 = 685d45e702217e797a0ee0fe271c1bdf72915ea61f2163f8544d8ab41c6cefdb581fd98f522bd656192246314dcd6f3eb8c7c82c36e1b82ae4c48165d44e86382148b0842ac2c3fda2c71930d3f569a4ed6a4b14a8cba82204fedc496362c23989e6065e134106691849269b1a4aaf3dfe98cff1a8c18fa814eedd6c7c7893c567b9cb45f771142029c3e0956a57ce682d707a95c19b3da7c273fa8da3edcecf596cd48614c930e068e8d277a3dfa43a4fc0c7db01c68db594e7c2304ade4663
+Entropy.10 = b53b275d9b54244c06d34df0eecdadeda53dd6ff92e85b311d6568b10eeaeae5
+Nonce.10 = 9969ea5738114a585c6cd0e24e24f1fa
+PersonalisationString.10 = 47768926b26609fa308ff521e231adf334bd02a5d9ddf2fdd16d03a0ae808e79
+AdditionalInputA.10 = 0739bf3fe45a9ca6e23aa21b1d93fd77174b1d86efd10d711ed7ef7ae47a57b1
+AdditionalInputB.10 = 297557d197e9ae02eab318f74dacc2df93fa2e71d208676710dc023375f8969e
+Output.10 = 33bcbde29d969891e8e1d0169b7d293ad3d08ff0b2ae01fa97b9a4b5fe37aa676ee185b2ed0f9cec1371aa9c426690c1a66b64a2c1aecfbcd539eb2ab56c92a0165516bfd373a62a8be55da9674cd6a588bf586c6337d95c4033c2c436e329904604322c44b8a6ecfe67e4cccc37cc4c853aece7d1fe59bb54536d1299802e6c9e9c7697013baa8de8af29db409a3f65a8af607d97a17f4ebb0c0165e722710d2c92c129a58a138d9094f60f6f5b681db68336b172124d4e8180a241232686ad
+Entropy.11 = d187322d390c6922639ebf3d752ff8f47915305de1d7c18f7971b5665b8da6fa
+Nonce.11 = cee12f48dd46d0664205805ecd8d5fa7
+PersonalisationString.11 = cd8abaa08a4a7437b5f3a9b3866b3b272bd4d1c44aae4dc4d599f7f2085fa6bc
+AdditionalInputA.11 = 3ad2274683ff6b05259e36a057502c4db82691daca42377e746158d0cebe4abb
+AdditionalInputB.11 = 2fcdbe681d1f708b9e75eec0edbcacd657c036c5fffd0f7b0c760be0e9cdc1e3
+Output.11 = ecb870f15f54798df68c6d05dab67d58b450714476df7cc3c8ab8951b6a2e3fe35ad68776099590b7b044e3a07f048d5c954cb341b25373b35abb0811f9d62c296207a9e83265b75029410c68a43e5d8c95681d5efc6b0a83336490ec3732160d42304b553abc20a860c5c4ba53ebc48c8b8d279543258392e401c0ebfe90c4e8af45db6b59de3cff448a718be9ed0e18c2d1ec87f6c43c02ecc5cd66b50620863f3b05059571e2abec9f3de02dd0ea44b0cd7eae5dcc13fd1b4c361b3d580ff
+Entropy.12 = 9eacb323374fb7fc53f544f055d6ccda36d558510d26c0e534c3210d720b6e18
+Nonce.12 = 005d9fe8b8b6d24c7f044e94b17cbe0a
+PersonalisationString.12 = 9607f55daca672230e4eadf1faf9ae3909cc0d7ebf1f3ade0ee23a543a0b373d
+AdditionalInputA.12 = b181ec672657e92c751d758a3bacb384066c7724392b52aa72785a2d8b106693
+AdditionalInputB.12 = b14813333c1b08f7cb0c20f35f6b3a7972c44253ab13232029ed909d2499798a
+Output.12 = fb22d70f1230dc59c28e253723e37736eb8391f30cdaffd6b9cfc468aefb29132073ed59c64435c78a9448618991b7d0ea6278fb884df827abc33c8274f90bcb10112a5b530e019a2d253b4681d7a1ced1b63f20f016d2d66bfeafe2dd54b761c7518ace8774f1561c12a2f75cc4d2f2bebfedc3ebe9ca11d1d7eb8c0caeadad29d1bf89728bb5892a8b23c3ea191ce49340afcd34b31fb1b761e00b08ef8f8539776f3a76e6b68bdb01168f881b63bb235bd6f19aa9c0bb16c573987e87c885
+Entropy.13 = f78b3eaf8d24419d05877476e5d52a980020aa7b326d7a432d04565a26aa9e31
+Nonce.13 = 672edbcbdfa8966c975ab8fa058a6df0
+PersonalisationString.13 = 83e33d7b81f7b7fd5134c59a8662378e9042ac62c53ec8f8b13cff211f2bee6a
+AdditionalInputA.13 = 61e80c2e4b5984b9453ef5df4cdada8a62ecb98a119b58ed1cd4fde05cd36055
+AdditionalInputB.13 = 8e7b596f642cf2d7b2eb7500be3735b3383a275437872f7efb0ef8a30cfc2caf
+Output.13 = 013f8b67173ed28713614eb5ff2ea5fd8e3e26af0c0fe62ef6fbc3a2544a881b6361c39f54fb758563c3b12309a55938811aa8dde8402ad344ff011c38f747750a172cb5504e8cf348df31cedc918510ded429a410da929653980243f825b2c325b8642261cd9c932dc3b87a13dd8f747b812bbb2f39675d6a0373e69bea510ebc3bf01b5ec948c2c86a6fb5eaab9bb48819b108360d66951ebd0f70b6b07df971f29223eb708478ef49af854e7e6efdc683a605c59eadfd18a7a7ae82739e65
+Entropy.14 = 23b249425f65cd337f1037064fdb3d01b8749f3cec8f900a8a38f4f43391f3a4
+Nonce.14 = 63b6cd22486d4af49be336afc6b4b884
+PersonalisationString.14 = 95603884a75e3884acde7152fcaf69fb9a44303451826422fd95c894928db74f
+AdditionalInputA.14 = 73cd5580972f69bb4b0d0cd8915a5b594c3a9fa40b82d6b37446dff4c014e715
+AdditionalInputB.14 = 304c2001d8bfb9f1b23f3b336db9f5da17752cbaba782d8932d2641aab4c34b8
+Output.14 = 5771705c788e15fd5f656d4b5555d532ee4c48453be651a69c30fa706abe7719d9842028c667fab59aab97fe64a6140baa5d42dbfb7ecd58f2ce557a7b8b2c01669232e0b8bb0ddc6ef8dbe627ec5b370ec74553640982a14bd38ad9824b9651b717f8e90f539c42d04f7cff648c38b26abf38dd2a777348a4c2872f6551ef0f9e148bec810025779e7cbe1055cb0250a764fca5a1feba53bba64b7ea0c4dd3d56a7e6b4f8a157264e6666d356fe5a7a29fde7f4391662c4e69f471c21c6beeb
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 35049f389a33c0ecb1293238fd951f8ffd517dfde06041d32945b3e26914ba15
+Nonce.0 = f7328760be6168e6aa9fb54784989a11
+Output.0 = e76491b0260aacfded01ad39fbf1a66a88284caa5123368a2ad9330ee48335e3c9c9ba90e6cbc9429962d60c1a6661edcfaa31d972b8264b9d4562cf18494128a092c17a8da6f3113e8a7edfcd4427082bd390675e9662408144971717303d8dc352c9e8b95e7f35fa2ac9f549b292bc7c4bc7f01ee0a577859ef6e82d79ef23892d167c140d22aac32b64ccdfeee2730528a38763b24227f91ac3ffe47fb11538e435307e77481802b0f613f370ffb0dbeab774fe1efbb1a80d01154a9459e73ad361108bbc86b0914f095136cbe634555ce0bb263618dc5c367291ce0825518987154fe9ecb052b3f0a256fcc30cc14572531c9628973639beda456f2bddf6
+Entropy.1 = 4cc8214cd7e85a76bfa735bbbfce926c0323fc348de6c05ed1800c2c8f58c6b1
+Nonce.1 = 001eb1f6b29b35242a3f8fa2e90003f4
+Output.1 = 1efa15d644e1bdf34eade3ff2f5e9ca45203ccaa1e534ac9b4287a846b71292b03102286d99f2be64b898fe909238f540ebc25f49522f60ef723a4c428ead530a97c62405cd5d9ecc54ac5baa47ac4f6195d637833f462d21a659b4903d9cfa6c9fd4512445f9abb5782899a6bb64592f3c2b3c745b18645301fdb09a6a331e9fb6d9654fc79c14ed83ac1684c755b9cb209885f86ff290a71f08a848b960152f05b1aa8566bd382ddd45521062831d7a0fb3a8bd8e112a91b5960690cd8585c1aa104514e3b9cbf52f6384e84c27bda2802fe9fb952cbf2bd607f869d0aeaa6b136c6a5f6e9b0522b6019b7ba6af6cff99fda612e024867decd8c0c6fde2034
+Entropy.2 = d046270e6b7997cd5f4e9ed1193e55382191f78547a660854cf60bb03d039a39
+Nonce.2 = 50cd147a3445f6d32d14cbfb9da0c327
+Output.2 = cdfa9441aa5eb11fe3ba50528ed731c9ff9e70b78da075d00c52d0e281e3a868f66a53a2a6a272d7e0b1a32b6339f8afd108bb9e66b04c3d6bc069b7e01b69844322df7deac66e605a9e2f43665b7932c67c418a77a4c9a302782d0e735795755613a1c5e90089f759d780fb3a984dee4e06ba3dc5a8c652549587d975e586a98ac6aba6563e2767f1a379261b9dd37992ea9681881ea7933b5c64093234c849142ced85bbe5956f527d46ef091e4d18df2a6102621a91bca51bf7aa4b242414dc16e74ae59dfe560c19dbe315e7f98b11086bc26e336dcefcb91c4828682da90d3921336a45fcd36ea4d1213a13213a132bf20aa1a3991b60b65de7ab9cc656
+Entropy.3 = 8c7c80b169160c78104c205e4492a9477e6f7ba1c3bb4daa86d222deb6241bfd
+Nonce.3 = 2d2dcd5c40b46fa553ca6a2f6be96991
+Output.3 = 1658a7552e4cc98c228072801f9ba230123e7f1f7dca7ba839f440e5f7570fd29c38b86a2aaca04cc87a56205b41d19e38998b47d0ffbfbd9bb56a6eb31bbfdce8d01e8991b82315c39f60c222298160e8d9f14b1a6038d8eaf15eb7310b180a8e2e8d05ef028782b55d4782d4774160a39896d1a896823f8b92a99abb546ef02cf189200a1a7a2fbb7019e4d8a935224c20d11a18e0d8890549666f6599c261532b036051cf7a65dd33bc0aeab8fa2ac9ed520f6dd893b9dc3cd3b87d02a0543eca0bb52c58b7ac4ab3f00171e21dfd3363229ed362f960d8a5fd06af5caa86018f9dce81ade6234a6992bfb9e2660d08a103dadd7d9ade4c45d691aa3799c1
+Entropy.4 = cd394508d86c384c0c998b58cf7017b7124269428e4cf39519b5815cc2d88734
+Nonce.4 = fd2cbc87c79063db588d90b9cb1569f3
+Output.4 = 7c4de5fa97362e63e52e790fb66d4b067e8cc1742975ba6f9186295832d31c4e0c97b7dffa262b93b109621044a4bc89c9fc82211f5cb763974eb3a816fa7d7853577bee1c36c2c36aabe28559d5bd85691c3e3bd610e61e4c3b76e167526d1331459d8bf09ceb403062cc97e1229eb3a70af6049d291aadb002786e7d21b81c87fa68a51a1b9a89394788bab70783a88c883ca17eceaba455f357c611fb279e38f67e3c27c5ade5f95721fa79fc2da1bd44ca7f304161359da4e45d7b847672bc185ba502123a802535dbd167b2c93bf901626e23fcaba03c4f89625a930caaaa30400645680e5931e094aac6f6467b90b13c2be9c98744f89d113151cd2ffb
+Entropy.5 = a14be417001030f6a9c543f829715b075d0efd8fa35acc7eed02a1401c6f59df
+Nonce.5 = c87b8b9255e62fcda6a35e52fa4a6f9d
+Output.5 = ed29a49be56e081f5b6abcd2ca1a16dc096071989de72a39b8bd544d2a2a2db5c886c0c29ce454cf60addb56cb4f28f959ccb7163280ef81e48dd2a02024c34a120301d359f03844d1af01f485afbe7c9b17288cf345172290fdc44e124670c5ca9e8590df6f9f63d60849c62d3921003532dbe3e3e6bdd75d28211365f6c489598a99e605ca671ff91552b5916ea9e12259723c0e1a633be34932d0c816c30b519c79656a70368b28fadaf5eb32eb6e47e00b04f152ace2eafc9a3ebd3b1b3795ad85e0897e46ab57c361fef2908041d365f73180b505ae2426603decd0b7dd33e2f7ac885aced4194999602d4d62a984233d0696fff86f7fa7a6cf993fb7e5
+Entropy.6 = b8ceee088f3b13dbd1e7cf230449f246a456f504d63fd4288838a50ab76576a3
+Nonce.6 = f400502913cf57cb2341c5e6a63fe9fa
+Output.6 = b4fe3f6caedf4ac7b93fb1c2f316bafa58487f28a37b8400fd1f32c963b04cb3c7eb601d0dd8a7e4538b14030fb0e97794c617366ca827e3afdb0f714983a6a72b261db8bf98d5fc48fb55158661f987d08e952913212717cf204a3e8cf1177f63e2a46d920ffcec4b580a1361253a689bf765200f4e90dc6b34a56e10cfdbf932fbc3b75da1d55cba0c5287f552d883763b83acdfc7fc9d762f79774701f7ace701f0b26c67217e022bf6b6e0602e0d68cb1377b5ebccb9a8e41188dd1dea662663e8aa093787d6490a4e887a34a27309c64c40e4ab2f0acfec4a1b8d419d99fb578aaa82da9166a7d7873e27226db20d313e868bcfa4fe3854d6fb34def7d6
+Entropy.7 = 3c1e8a0199786fc268ee0ca0c0446d7363bd781069cf3a3faef2592cba06ce1e
+Nonce.7 = 70c7c691af73d6d59addbd6e3f646d64
+Output.7 = 06f44bebc2c1736b5cee283e530bb877b28651d70983c272a10efa80e3794ee428644048d67245dd3ca8b769b6bb192c9468a9fcf2b71c417283713d39e800225ba659c3273022f5177fd7867173f457f3bb66ff2c2e7bb2574dfee54438e35c98506c178d35259b04e7c541016f5c2d980074b4ea865203ae2e8935d745a02ab5cce04d233cbc18719b1900f2e7e98229b851d19fac02fa6e5ac1bc973b20a17509739bd989d4ef5a66fd9e19e3ceef2415b498843e93631b2b168167bdbb8db313eef4c9668d5001cb34767ee41db872163987c3bdc144637b52dcb767ffc19bf44fbad487b1eeae7957b497fd59a95f0988315eba73ab7206542f31c49267
+Entropy.8 = e8a0925bfce66dee7e6a54fe0311d259bd7f7a22b8576d64840cc51c731212cb
+Nonce.8 = 1763365deab3ab82de9996e5c8570eb9
+Output.8 = 63ddfd70508cfa247408ec231d56df7905f65b62e5e5a8309fff5239620faa0f055d7b8fdbc648ded78fd567c3141e1723d197296c92d43fdc18af0c4a54fcd52613286c78ba7bdfd0fcacc7b11b374739088323ba95f30872d77b6aad21228253133d76d29d0d742ba349956fe71e8bbf3fc7186a3f85f144a9040ceb0529a713583c1fcdee756d0130b38df0964bfc3b669fabb6ec6874d17d9ecda9fa567890e42540185eeb3497ba8db80b803f63803442aec14735e9eda177484ad61bf0c76c2862b7691b4cc74efbe35203f8cf4f24aaaa1d831030f28eef8b49e85b249e6fe835964d53aa74de6a31424ec3c833f4b8b39559934bf5f23d4b1d450bc3
+Entropy.9 = c493ad96bb20b2480bd3122b4b1ea51379f5fa2bfd8bc0fed4080995b162c609
+Nonce.9 = b6d6197f432c8597163feb9c5439525d
+Output.9 = 764d3e4459504b490eb1db7b5ab8e6413601e449750534f4c4f70025026f87217010eb14705eae6e513796c7f20ecace32a063238824b3fd6956810066930bf425a1c585221c8f61ac64aeccfe8a3e33d164d02d5434e9e594b7ff451601874d268a2fd8de9922c36e67d8146fe553889a15f624d499a22f5109896758f30bb98f70eac11da1ad48e99bb4422acc5b97295094324eecf530525c1ba150886d053c84004c265693a4419602e5e59bf120de6ff054d0c7c96bc14e9b5fe1290c08ebebcda21744c04a2e78964cb2b52f8e6a70930fd1ded1f0edbda4deff91a3310019e967df3fdbfa228bec9897412a748201649328b7d784851fcb5ac1251f8b
+Entropy.10 = 1e868c5fe4b59e6d4249854226bf1120a74386ea590e9c35c58d7ccdfad56d71
+Nonce.10 = dbf557da684289e96cbdd66cbd9cb879
+Output.10 = 2032963be29c0d24c2631b1cd895124b9801a4d5c14c28fb34cbfb1c2467134f499153e2a3ec817cc4b2e4e06068ae78f5696dcee99334b0b51e9f29e56a3d3fd5c65c4cc70e10f9e0cea2572c28ec4afe0896d7689322d3afd931ff836be485f78aa179100d43d910564dd1adfedcd32e3e7e53b06c0a46a90b1173e4a5152cd8aa38f2a7e329d01c0b81e62be6c9fc8d1ff3db08f8c31c1e77c5d7fae619555c0e02c658486e35f27a7d58ce63b9b152b9ff528ab6a6cd9b59240f5a7b6b52dc3f6e47f9daa2cb8cb525d6760cf409ebe2c7641c3c32e330545bcd73da9eda20b7590d84831d4bec807a56994259bcd2fe28105f2d7fcdb3eec523fdef7044
+Entropy.11 = 55bc1c7358dc334b26412ab472dcf4210740cfa0ea688812d8b1a7fb257b979e
+Nonce.11 = dbab14240cf59fcc8a7007553ac480eb
+Output.11 = 6a9d30d4ca97dbfc2d2852bef044bbfb95ac253b27e588c67fe179f6adb81147cc1cb6eba6a2c4afd6f8b3f1c8d45b51af1435ebf1ba8596830314353c9b4d8aff9620dba0099fe0a1ea417b97fa4c28491fe6d2a619172127f18155840f90456bfbf1e7ff587fbe566d6b8eadd6ce594bfcbabedda37858a7610c8230f594861984dbf1e3ddc9eccc8b9d2ec3cba1306d178f7677ed399b10b995b3ea55586519e5730e52ee8880ef0e63c476f2a80d77c6ba802c47e9174297b27520fb027d134e17cfa6f99d59cc5f53737cdc2e663e1ac59bf74a87ab1064e9acd4811c0406ec5a29a081bd0efd1e557d6b6c9c7fe6131c5c00fae82339a1fb90d3be2b6b
+Entropy.12 = d894820d9cb243859447cd3a3f6cdd125a9c4faece6ad756d288a15c5d24c39d
+Nonce.12 = 776c5ea9838c4c34f39f12c1a9df6700
+Output.12 = ba23f7aa0b7f6a93bc0df32e68e78786fffb5acd7fbc2864468568753e3ddf31fc2187b20c229d0d0b261510f6442816d2226024b57306b474079c92c66a00be482fc104cdbccef0450b3f2ce94f6bb6a5125e0774a28a2a083f802d3c45e9d4253295f80ca4bc439f539a7f82eec6fd450bd196ab468ec6902752dced44ab557fcd3f6a72c47c0f18cec6545ac669cf432e2db308d70a7394ec772a34f14f26d7bf7d0bd7e4437248618efa2c08adc7de9231ddcc976ef8bcbd11be54dd17ca9fa515fee6827bf5efb602fe8f1cf5d67078b17601803c5be05c24edccad2837d0be191f918d6dc62742241728a8690db5836c2045ec9f8bfa87b768f4febf2f
+Entropy.13 = 17facdf2fca2e1134674ea8e8daa609b4477f415c6a13a5c157f3fb7727dda6d
+Nonce.13 = 3c1dd89ad63e781588e4b3f8cb1f2f6e
+Output.13 = f472b4c20bf07c170b3c8eb682469e88680d1fa5561d72b864c5c438c95c4c8a3e61f89fc30d5fb4e843e5ed1230778b48c467fa46ebfb7b56220a610483827f3f7f8ac307f8aa57a68922a06c8fa5de732a0d05835cd48690a2b3f734e4b7e74799ad774579a9eb296112f3e2bb68551af0e9e0e5e0bbb219ccb6c78459dc68a3663987156a50e72aebb219a1e43b5603dbd8055bf1e76a4468caee86489ac9a1a9a66ee7b193484ff3bea84341b62dab124a43e38945cfc99f2c4c15590fe180bb3e6eac544483aef710278213a83da85a38b6d140f33654c9d4f6b8ab3eacef1c57fd2237dbe8adf23b3aef6ab30327ca119b9e1e95ecd068aafae0d07a08
+Entropy.14 = 2c13e44674e89aa105fc11b05e8526769a53ab0b4688f3d0d9cf23af4c8469bb
+Nonce.14 = 700ac6a616c1d1bb7bd8ff7e96a4d250
+Output.14 = f778161306fc5f1d9e649b2a26983f31266a84bc79dd1b0016c8de53706f9812c4cebdbde78a3592bc7752303154acd7f4d27c2d5751fc7b1fee62677a71fc90e259dfb4b6a9c372515fac6efe01958d199888c360504ffa4c7cf4517918c430f5640fedc738e0cc1fcec33945a34a62ca61a71a9067298d34ac4a93751ddcd9a0f142748a1f0a81a948c6c6a16179e70b6f13633fd03b838da20f81450b4fdc1752e98e71296f1941ca58e71b73ea93e99a98f58d0892fa16de6a16c602036ac857dd75f9ac2c9185932103db5430e80cde9131e814a0bf3f3e7a2200a7152424472fd27f791a854f29aecc448f8d3fca3f93290266df3193d9e13e08907ab2
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = a3da06bc88e2f2ea5181292c194a10b3db38a11d02ac2f9c65951d0c71f63e36
+Nonce.0 = c74e5e3d7ba0193bcd6839e9ae93d70d
+AdditionalInputA.0 = dbb7270760d8d262557807ce746ff314fd06598143611ab69bfc7e10ca5784b3
+AdditionalInputB.0 = 8cdea882f894e5fdc5f0a0b16b7d9ac8cde35ed17bcaf2665564d4ee74059e29
+Output.0 = cb706b90e88380e5c1864458454027821b571dfeba0da83f712efb107b8752099514ef87b4488fbfa3508a00954bb03090766d2bbd399e71c86c7967a4e8ded57095a29d4cfa01f8d28c97e81a4cd4fc5be7fb32a0d6c230cb8760e656b74fa7e18e2063ebee5787958b272fc5de93f0d6837e55f0c360dc593c88fff30a428cae37ded52f825646e04133a19790c304e4b1f040e10439c5edf454e6f71b23eeb43cdbe7b0634b8e283a97806073f7f28a43de2d0d969b3eda380c185b785b9101dc905025c9cdb499e594de0f0d3eb41922c20994fe2c403dd5bf01e4b2c3ee6654d6ab9cca7d4d5ae59525a796119547eae6a3cbf8ad0e9b1de3c4d5a804e4
+Entropy.1 = 462cb274b7def1ac0f9db135c8fa2e48599cfe2badf2ae9f6d06886b25dfb0cc
+Nonce.1 = 250461f0dadd9e23cc6c08ddf4ae12b9
+AdditionalInputA.1 = b087ff5e230284aef4c90b5f9c48fec91b486f3d936d422475a2b12ff47a05b0
+AdditionalInputB.1 = 150a4ca383c3863d9ae3212de9ab9da7442fcd5367af157714d74c149f69eb9d
+Output.1 = 12d4740dd0c5356fa76cc441f9088e361d3e636dc7b1ee27a26e28218eff470e28f51b76540939d624cacf2e3facf0967e7396a42017f68789e53f4b1d216fbae675801b8869b06d173d42126bf88fbbfef60aea6c4ba15538b2d64f8f22f389ee35e01e4ea88fd7c9e4d10c145a5f6e4dd33a55f2cafbd5f56856ea945b3b596b4900cf78936732bda49a52bc5a648c6561f48b820699533d48ff04eccd81aaa5bd25fa277ef314026effe2e65a9c38d45832cbb89579535782bf6299327339591a3e66d82aef6fcfa0a21b6b50a398b737a83a6a9b34dd46f3d15162dfa488fcadd18dd06f856f6d6c4cac2677eca641bd4e044ef4cddf6c95f1725fd8c606
+Entropy.2 = 727337765db704e7b9d23dd139e63b5ac97adea990b7d04881b6b2de045c974a
+Nonce.2 = 0265210aa4e336ac32f4b0a428ff272a
+AdditionalInputA.2 = 48b452cbaeb990b6ca4ba64ae8f2a91d792ab83ad499093d9c4566ed8c7cee9b
+AdditionalInputB.2 = e7e32096873180e03c9f7bb33c5af4edc3fb9a36113275839302d40f0890dbad
+Output.2 = 21c7d4c258778dce67f1a134670b8595dbbb0e036ae78484d7953f280f1faa5fb3bd213a54132a089a9d6f1376ca8b7064402409187acbd5de7e4d7146c1f02f73087a6c62ca6a7e736900a9e4464af0351bcb71b2e1f1cc07440cd74f50a61757f0b3bbb91fde9c898e62a9cec3dcaca0c94d5d0a8edac0f82b3c99b65d736884ffdd23fff1d9d6e8199254e784514fe3c34db51a86eeb06ef7dffcfba9f195c52cc4b2db53e0a6b1bdbed68d85822c6c03571482fdb6535eee1b6e26ce7d33433d3a1271c5b93ce9a31c9d7c805e3635e79682fa5f8e7894d8d16ead32e3fe8c625174a12a7b8623c0000a75c506cd367bdbc4e3da3b462938875050ff2271
+Entropy.3 = 8ce3f77c4ba4f40d4eb3e80d03f9b138bea725d44f7a47f4a1f7ee3afb45c2a0
+Nonce.3 = e8fa75683ba03964a8e3312ccc6e1b66
+AdditionalInputA.3 = 83260430843b586cfa50ab51120ea5675d63402074d45b0bf80dfbbec74fdc63
+AdditionalInputB.3 = 0640b6427bdd6ead525962b228392b3c28abe131719feb0c0f738288ee87acbb
+Output.3 = d0a402dac648f7a53b5ffbebb1f5e6a12998c999809007f357dc568d7c653bd3b4da793d6d7ef802338eb36c7e4745655001f700c4ca68cda07d726dd088ed9948b2d49d8b50a72530dc9daa3387cd69ce32ca49dfa6cfca98f8a8b641c929f84c5f4045579dbfd3fdcd997068bb0f905f9a4a00accf06a483282e2eb99b94d78be46e07dc87903208bac0fa75323920997d9c4f9c0fa4cca5e6b1d69fdbfae8dbb52d659028387472c1a54283d074954094ae11bd3aa97360073ee033d7008e63b89e0efa4788eefa96ab726af4c2422b7472fa1efb7d95bec93fccb7351768625de30d9f5377610026b6f7f9568a9659644c7e68483672ca9ac8d0994efd68
+Entropy.4 = 96b0d3b13a65ae1010bf40e6e2dc6e6585db8fdb8fbd2b272611e51c62e1111a
+Nonce.4 = e93babde207a42980c9ac9018ab01153
+AdditionalInputA.4 = b67c2ecbc4d4c46c3573883b61311a2655cdff0e01a12a20ea0cfa4e91034c2b
+AdditionalInputB.4 = 9ca69103d5af577da056d4d5e95f53be87aae4689918bdf0d011789f2ccba9b5
+Output.4 = 63f05a9815c2671298e9caa06b0746767fdcc00884eb1b30e53b16593508bb75dcaff9932230913f9b62cd0361af168993ce7b6b967114e2612c8f9c376104633ad4eae2e968e455b96d1d5ed6928eee9acb21bb8fdee7bf525f143dcc624a66ad42f1bdbafc19b165284f2c771edc57dc9092ffae6ef8acb9f8fdba496607c54b07f3ff4d1721f45db43f8ed5c695716b405b57034cf4f87ab487a01057ed449bd918093c532fe85015f0c5856cbd7a440c33c7968dd25330f78b66248873959967e307f9c9697803e8b0939fae51870ec533ef7d17e227dcb68ccf270299e65ed8483b9077831e010e9dda3a50ef7b008a0762c8ac5ef42b7e2ecba450d7d6
+Entropy.5 = 49913e04b653d82abc54cbddcdf898c409819dbdda4af93bc97b434dd1e31970
+Nonce.5 = 6504b1c76f34ca6d9dfb181c7057ed8c
+AdditionalInputA.5 = 68b8f6f749ad588ff2c7477fd7c55be648134d57be6846674f2659d75785c39f
+AdditionalInputB.5 = cd7b2d7b24070e501843f0caa20666fbf963760893f4e277d944991ec965fbe3
+Output.5 = 67ba01fe694d8f9621d47be0dd9119b8654d028e4c095347629afd02e96fbe6e4535d1666ee0331a6da79e703571ea0983a0d02051bd95dd130c7733012424b79a0bdfbcf72c9cb0c6d6ee408e2f0de45cb084d8182d1b8b4d389b78d0e3fbb7f3c8891ef522f077851b2463bdf1399d178dae3299a43b00f48cd1068e17f42615bd506878eef5fcd5951c24641b58f7a563240abbab5779db1e44bc2c66dd48ea7e746660042bf92b727d622bafebc05de309c24824ddd1d9ae86034a8694ae5962f61ab6e76b435c9dc8b370d708adc4d6fbbfc44644da3f4d4f24d3c95d958de143531c84b188445b6840775726c87b1b058dd8c14e4648973d5a91a152ba
+Entropy.6 = 4687135763568418f6f30af400d37d794f712b10a42087fd832d840b9e8b1f81
+Nonce.6 = 8dadd1aba09e78a1925ecd9ee0d106f2
+AdditionalInputA.6 = ac00dc729c5526698fb80f685ffe93e9c25bf93b22424c15c20043e1fcafbc7d
+AdditionalInputB.6 = 948555d8a6e0473a769b7019e6909a8565e386a624a47a1f9c96ff5e6609a894
+Output.6 = 4f09384ba8a34f819a0d4473c3387f74299753fd16e386be51a5ee70d1b164be6fa53a3face06379da2d961bfd6ba21eb437bc77b527960352790bbc978217549006e7409b86ee97d6a042957d27a02fa5f04de94791bcd7d02cc6798bc66d3b6cd887f2a984224b3c279382558ff64459703d93b40fcdbaa7abe1bcdf0b95f4c6ec6583a86a41f837c6cbdefee3de4767e330cb2f4a0d8915f192f02c1ebfc78345f80d5e0f21185c647376d588991486ca9a8fe5c68d0b71a5f81b08bb112c56f69c89412f0282eb1bed0d05c959608d1eb6b1eb4a76a76ae927cfd8d651a651fe83668f24bc0d19e5de86813b16bfe8c771dc9f16a7d6d0441b3278de136c
+Entropy.7 = 4ccc3c6cd73101efb7833ce1195b28b3aa3e5628db02be166f2a7f6bf7e8efda
+Nonce.7 = d5ff3f1c375ef981336af28252756647
+AdditionalInputA.7 = 8396edacbe629826be44543bece17ede600f7f877d1138af5e83c3ec44b8b0de
+AdditionalInputB.7 = 98545ad6268e604fedeacaa10b727ced0b0e284a00c29081a41c0d2e3675bacf
+Output.7 = c37ef92675ad963cf41ee5c14d882698082e8dda5a0ce9d50b8409c9f0d30d3294c7c625ef29c33f395de140405a6f9cd9d737a29d892b67e90427af24e200bc9cc7b5d920aa8a93d8ddd0b6f69cc98e303ca3a512b3d883ec542403d58bab1b4232c31696e72a764f2dc7b278bba02efdbd5413a08563833ef7a283aa6e5ab221d1ce5c7dd14363ecbeee879d157b6aefc8bfd2acc004d19eda7cb4b382e54bb725705b3f52ca5be08df445d8f6eb46353ef26217bd3c1b508f049e810fabacc0a75d717b2bea9f63cd8d2fdffc27322eafc98e7de18a911ff44cd0e5864e0897f0550e3c48674d11dbecc9d6d4c42f7592fba440608ad479ed296a6ea6b1b0
+Entropy.8 = 85ef33038e0bee3e40ce8eefd3648e89c521ad537b0c8003617824b08a154b75
+Nonce.8 = c89f036845a6f24fb9a15513ed28eda2
+AdditionalInputA.8 = 2c675110a2bbcee5c6096cfd8f363441e3473664cf09577a95996928519a9292
+AdditionalInputB.8 = f1db097abed76cdbb1fe6aaba94bb51c2af8f43c5cdd2eafdf6b40a234d3897d
+Output.8 = beda7162fb3e07d96a5796f091388995894f69a59f06a0c7c8eb704b5dfcb82f7171d34628b116e1ceb0b180e6052d01fcb13510edd4050e15d6a8bb27a5bbac46d8847972f2638967d53d5b7752452bbf0bebb953a4e40212ab587b8e74a9599021c93071ac55a08feab70ee040c3cf32246857167f13473d20a38c8d6d364da4d1f043e24a65b2dc58ae2a56215a34081fe91bd554edf86a7d582b227316662dac6a71693806545760060fc1a204df40f1b5df92c7b0561507ecd95609fa5317bc43b1e9a40880a230fb4deb79cf4a7a2b97beeb9cd4c8c841d4ef2668d870eaa11f2fbfa0fb899a424f1600bd46778136dedd147f124dde4d64693233462b
+Entropy.9 = 77a48fcd8cbea1be145a65c9e20cbc4e660dd439c7ec7e2dabc6f0430c5ba716
+Nonce.9 = 182f05e834e84e89565714fe8ccf0de6
+AdditionalInputA.9 = 1b838d460961b8f1623667fb316772cf50aa462ceeb58c36e2a6482ce7aa9f9f
+AdditionalInputB.9 = ccd4048bae7f8166c35e932cf3a09feb2f97dbb31af61a3fe5e4edb881ba6930
+Output.9 = af5afbb8d60d77c36c20a8f4c20b68ccd7fddb703d1ae83b5981605c4483e4f092329bd75aaeeb6fb4e6552540bd772edba5e5a96dd227acef73241257fe8774f757c673dc3370423de5a85b9118b5aa98682db6a89f520174a25e8e4b71f83ef432a91ddd8f69c1431c40d282d7e789427f18d9c5673131d5d3797d1335ffda64319d642f5ea5c1641092893a4008f076b649170916a03e06f0854848607c6c44a9f27bd3b17b293a914a86139e9a1b11c8652eae3757162f9f7161a2ee6f412a40002781e8fc8b80242331528225e70b9b23c6b2c970db12eab61bc290fec9b4c6c13d6454d7336f439d9b4b1df59248ab84e3a79d7f37df07e88c20f9ed92
+Entropy.10 = 71cea1ba7a7dc792ca33288ccfb67570d9b1eab34e35296209db20c6676f174d
+Nonce.10 = f4e062d1f660522881aeb11a651581f3
+AdditionalInputA.10 = c9667d28614fa05f112ec31487cdb3d925f2cb312202f7d85695a8f7336573b9
+AdditionalInputB.10 = 6363dc485ddb9bdd61db33fb1beae9bfe2d0e7788a86b50774f8658bac094214
+Output.10 = e62486e1dc854f90b803635c1718f075cecf7fd44d1d304d0127979b83bee5e4abdae9076fc5ef89f6435e4b72cee056372c603f16beed39a2adf6ddc2577b32b29396db81e9ce57fb67c2525c2a59dea259ace4a7b6560ee20ca8e3f476786c34466ff5f6b45ccc916477f6fe96e7e4be23867a9ff9fa07609d9d8a5db7f5e1a068ba9b9c82bf72e76d17f73518affd5c58368232bcafe65096962c561617f489c8d978cb28676d8932a3c3489eb0f2f48a193826ee785dc850e41b0ced359ecd2636d96e83fdf8996617e6a39e141c124ad1e2e5fdad27144e60b56ed70d91543f3046acc831a6d56926ab1635de7e04a149958c9365a53c144903d7ea392c
+Entropy.11 = 3a23653a34334db7d3abbf747d9d47d6b18589ab3516b0600bc93517d206a1a9
+Nonce.11 = c74a51766beec0563db655273d5dbcf9
+AdditionalInputA.11 = 89922f45e6637e7fcae0a98d7ccdcf36650bbf7fe3253b7716014047a0983e98
+AdditionalInputB.11 = 5d7519b3f442e1246185e1e7a56fd37473f18824f3c9d21656f54f1fa8d2947f
+Output.11 = fa40b69397e13d5f1ceaf294fb1d3a15db8b345286e5359bbffe5cd743ebab412845a9f5e4ed8481cea178d7b647019a7729c264220991c3ae276f82d6c33402f061aabd2e28cfed64565cc2d7f1774e26281d0808b2857d1c144d5aa36944a38358181b28b9110470601204076c02ed44ef411cd6a75fecf55225eeb3ef4f1717d3f5cdaec83f5defe835d2a236eb1a8f00167a727329163eed34b3b34bade7896e2d0de1db1b15c7c2b173ee8d4f0bf77f8e8a973be61e107daf240b9b7edbc599469b5f40e98c0d2d40b048ce4462cdead7e8f85d175a1f39f8bac61ec00f4cb4c8081201ca6319984264adca745b1d0feb471b5d8fa35bded03357fcd7e0
+Entropy.12 = 24cd11e75f2b0ab60c5b7a35020d716cea2e4f5b7748327c0cf355b118051893
+Nonce.12 = 34889dc3198f13c36cf7beb42b2a1a6f
+AdditionalInputA.12 = cf9571fecac5d79d65617a885815703de3459cf739db097f8ff2ee557d0b0745
+AdditionalInputB.12 = 2282cbdba64ac2a4053c070efd1dd0638fc31dff97dfa15f76bc077bf173a821
+Output.12 = 1b0466ae577c0b9e943616437c24b9d32ceeaec15bc83841843585c6255534a4a71ac96698f628d907255894f6199f6d7bf405afb0e46359ae0dec788ca52111950f8adf88d324f5b9a76d79e67c3581b0cf0318901332883794398e6aea0f7da1f55f30ca34b11127e885e86d787f8f8b3a1342d71f3738c8445707e0dea687baf759b261eceb4d661ec9bb006e9f08aeb1cc0357cd8df526943d71a6d73c9ae80ca69fcc3004b91dfdb2b6b8d0424c1cad81677d510ac7a51c1ce6f02b9ab41466e37ae0c2adfc63b31fc2e4693e467d3384fe359e9f0fd0f4d08f4a9037f3fd5495d895b6ed4121cca037c6aa87a5ccc5b856ee6151a900459ff0ea77550e
+Entropy.13 = 4931d76a7ceb2238c1f0ed76be24d2fe1a925d1084a392fc8c43d93535da0e93
+Nonce.13 = 51e52abb58a9bc34c46f254b8313d387
+AdditionalInputA.13 = 92a8eb05034555680bc937d0d958e820b09785009e5e05739f29d9af17a63976
+AdditionalInputB.13 = d37465a30f837fe05f04f6b7ad4bb1c83bbae83f9c78f027b4831f5e2ad2dd78
+Output.13 = a61894d3c30081c7836dee8506cb97bf7bb4e56a8a94c72d9c8b6900b69ea68b30c41ad33dd21554361c171cb959c555bb668436293e3f1c103bb72509e43f2baa19742ed8c2d3eb9d0790c845097a7f0b2715b3d127a7f043c4b265b4d6fb4b9af9edd12427e1b5c8b680a135a315761aa4a9ed598a7620f335fd595c40c933696cf95b7eca55e8520e9154f69e3446ea4fc3b69f36fa1ae7eb456b350c93a1ebde342bd4578142d8338268af1c240c94457888d045d73196347318f89e281865b826837ca79da5a6dbc81569c42da475d97ab5501a1b13e99058c40840958331bb73c78e5ec90aa0464b9f603f11bc4baddc28b71c42282176654458d2fcaf
+Entropy.14 = ffa596ed725daea92273519c279d0a26be7f77cee1fc4fca44dc99b97ad8125a
+Nonce.14 = 3172e5a36ebc671df1fcaaa54bd7218a
+AdditionalInputA.14 = 6cfccdd8253cc5b284701ef8d16f8888f79100373a7df50f43a122591bbddafc
+AdditionalInputB.14 = 5795ae5be47a7f793423820352505e3890bac3805c102020e48226deab70140a
+Output.14 = 4a398c114f2e0ac330893d103b585cadcf9cd3b2ac7e46cde15b2f32cc4b9a7c7172b1a73f86d6d12d02973e561fa7f615e30195f7715022df75157f41dc7f9a50029350e308e3345c9ab2029bdc0f1b72c195db098c26c1ab1864224504c72f48a64d722e41b00707c7f2f6cdfe8634d06abe838c85b419c02bf419b88cde35324b1bfdaddff8b7e95f6af0e55b5ff3f5475feb354f2a7a490597b36080322265b213541682572616f3d3276c713a978259d607c6d69eec26d524ba38163a329103e39e3b0a8ec989eca74f287d6d39c7ceda4df8558faeb9d25149963430f33b108dc136a4f9bfa416b3ceaa6632cd5505fe14fb0d78cf15f2acfa03b9c307
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 73529bba71a3d4b4fcf9a7edeed269dbdc3748b90df68c0d00e245de54698c77
+Nonce.0 = 22e2d6e24501212b6f058e7c54138007
+PersonalisationString.0 = e2cc19e31595d0e4de9e8bd3b236dec2d4b032c3dd5bf9891c284cd1bac67bdb
+Output.0 = 1a73d58b7342c3c933e3ba15eedd8270988691c3794b45aa358570391571881c0d9c4289e5b198db5534c3cb8466ab48250fa67f24cb19b7038e46af56687bab7e5de3c82fa7312f54dc0f1dc93f5b03fcaa6003cae28d3d4707368c144a7aa46091822da292f97f32caf90ae3dd3e48e808ae12e633aa0410106e1ab56bc0a0d80f438e9b3492e4a3bc88d73a3904f7dd060c48ae8d7b12bf89a19551b53b3f55a511d2820e941640c845a8a0466432c5850c5b61bec5272602521125addf677e949b96782bc01a904491df08089bed004ad56e12f8ea1a200883ad72b3b9fae12b4eb65d5c2bacb3ce46c7c48464c9c29142fb35e7bc267ce852296ac042f9
+Entropy.1 = e72d696d4dcb41a42d89037487b3eb01d2ddcf0407e4daa0b8ff562461eb6f83
+Nonce.1 = b2b01fb9732601f3573c6831aef09ac3
+PersonalisationString.1 = 8bbb235642f8caed49700463168ced9971a0204b981025bee41c72b76a965d51
+Output.1 = 8e5cd2a91ea113072623b787ed37454fae2c1905a725be3b124bb243057794dd68325a5d8bba5d6c7796d91cf682587ebe91f6beb33c5cd60b00940bf6de57c7fb082b9ba0e5b44e021be6d45099ea59367291a733ca50334f0315d52ed267af1b98e5be59359a0b9965727d92aafe4c92fda2c915cfb5a378c7a717f743a3524fddf5a48b1e7e113fa6e94b76f4e13fce3cc18b970f2ed1c34bd622611c979b6a9712c4447c3e50a7bb7ae30a8bbf479dd4242a8c4d1492c892107bb4ca695e3c790c9799bc6ffd563ebc3a4968accfc2085ab576ca6e9bfb2904a357c2cfddb55378994e5e4b36008cacaae024312fdf036a097f0fc1d3f9e75fe7cff74540
+Entropy.2 = 8d6ff3e3fe6808bc796a73957b19d758b257fab71dbb4e39acc2fafb01f88e98
+Nonce.2 = 2e2b74490e062044975d6b1885f61ec7
+PersonalisationString.2 = b5f819154ed5442d5547771af76cb6333d7f35e6f3e1cb03b22d09e601eb8eec
+Output.2 = 9cb257ba9d77b95e5bb2305424116eedc126b9a8654e56942e282da3823c09d9cc1c4b9c4975f13f9138e93ac75c4bd552c81d41d6363466cf2a38e2eec9294a93630dbc9d7ca89a0725fc7e41b0e55e8999279df88fb579dcc500aaa97d78ae354496048ad47d0b0285bac5e5f6e9bd50c2d9bb6f06090b3835171533d2105fbbb3762b2e33bb75c5f7c89cfb809858244526f8de3aa4f611bde41059109e8ff21b81392b55b9867523b4a4cf5dd74c23a2066f9b26225cace5c5822888f7f7dd233816ec3ef137852945fc6648b4c7cf11fa744cdf62aeb02ec2e68c29c071c84883472619da2680068aec82700cc1cec0dbae8b740b3be7c4b6c972c62998
+Entropy.3 = 138a1a9408cd7de6c1796910145263e5816d377cb9949bad0927f9c61e7fd18c
+Nonce.3 = 71eb585159831189707ac6b8b6f80100
+PersonalisationString.3 = 9c0ca722c55c19694df96e70f941b5b230efb1fccc7a7abe0c471dde92a39272
+Output.3 = 976e1a19af964502177d27b09458e3beca6e9082ce21721d31b7241795886213894f2e3f9acc23af6aa5eae7218d00871dac9e237cde1dd9654c1e893bac47e9444f4dabd26d3dcd9f11a68b297956f135df32fc3470f7b01383c506e2a2fbdf1c387c4ce684592fd4e5be0469a29c8031cd1ccd002edae3bea44c93695241296d472783df68e5ac7a62e33a5a74f70fe45252f88309b7f3603f43a5a0a823cf6f3bd8670d50663ecc326aed709224b60fe67ed29860b31c8161d416dc5cbca1c16e69cd7ce41a77cd465cb810f2b5963d15e352715fd5e6175c68125fc8e107d6573ea89db8b34fdf93e2e173cef77746e6142c8e5c44dc288ce86c0710a04b
+Entropy.4 = f4010441edc99d524f6caa660c180e25afdd09315f2a495ec003471e1f79bf0a
+Nonce.4 = 13bc6f04d81b25f4d4c9321aa3fa58b4
+PersonalisationString.4 = 37fbbb3fc5aa698084184ecc8e8b45212dcf851e6e4f2db8f775d3f759ef0c4c
+Output.4 = cb3a853a930cce84703c47719f6d609fce15f903a887f646c0781606f6f926765afd7411b4fc44be350b14cfff04383e4930eb36f94329033cd5f21d467fa74ca1a3c61c94a290bf6753809d8e7b75431d9450361613b16d6be55c392cbcb3d4212ea42cb341878cb268f3daa87c73297a807e35b82458cab693ec9bf66f43328ff1c4e727998d841a1d1491ad55c08522e5c69f19233fb4a8b11e937c55afa38ef5e0ac74b6f856902501a2558663f453d069c291d762da968298d596104580d80bf0787ce4a148dcda5ffc4b47c653f9b7bcde6cbd36dce707738b114d5f6e488b17b63f402c99d0c2b4dca40ef3d05025e50f87fbad86468ed5c08599bfdb
+Entropy.5 = 64179b56a75ce27513f0353e10a5107b935293af96799112448fb5787d9949d0
+Nonce.5 = f38d2f6e523ca3ef7429621db65a37d6
+PersonalisationString.5 = f0cfd2400dd8d5e857e5878fc811a5c9ce5e0097184ccdc57c0f96d5a66020c3
+Output.5 = b79591df35bf97c7f4731ded3eefcaaf9d0033bbb0741c0c28aca622e211491107ba9b9645ed325ae18a7aac6160cee4e34f3d3a44de58af0f5fe148b3c93fa37fd2f98e1c3c46a216bfb78d2636dc6b89501ddc315ca16eaa31a818b2fd100a47ade02234096ecdbdfd0997a3c7a4481815665b9a41070bb1bd4d7d9576957421d3b9b75d0e06419298aaacaa4f77afccecc7a67d59295aa0122197ba72b115b8d6960fa7c6c801785734f716b36805b97d4416baa1ab16c190bb8095b0c9e1267f1ade79791333ef6e442c681134dc1ff4ea547a89b84fee3bee0cb481f0afc3d1d2026add34c44f67dfce9c01ffcd443d0d5eaea00b60d0cb2ef4fad1dbef
+Entropy.6 = c21f2ca0d103186755dbf2d8470c0282fe11824f0873cfd7935671d3af749ebe
+Nonce.6 = 961df3048132b35d39bc1f96e21672b3
+PersonalisationString.6 = d040489ad6f484b13be395fd99fff34706cbf96867e614cd6c91554d61231eee
+Output.6 = a91bc36569a590e5dba3b64e896b21625a8555f71ab77f6f348d2d787e19594046a255f265bee7171100f2db39e3a5d966fcdd88ebc127b23b1798da44e03006a1987a4f5c8af3d83c220661b3c1ac45c5e785d96075681b2b19da1d5b0d143f3cf43c8010523f08feb59360d8a3dc12f101f2542d9fb0161696914f96cd1db573fde8957da6d7e9821032d9fca00f657c326ec0418cc3c60ae387e13894126fce27573ebdc1694853c5eb3bf37f82a5bd59b149d36cb3d408216315fecfbd2cce84f9e5186f24557c3c93827f6962b90fb1f49260250a55bb443c327e03e4a615be0bd5d290decc7fb6813d8b4d8c5619745cfaa1302987f2139ac71448aaf6
+Entropy.7 = b3679d82e8a26b602835fa5b780e9678d8a84cbcac2cd6a66174a9c6f68d86cb
+Nonce.7 = c4b1bcdcc20888953f8ff22363fa8a5e
+PersonalisationString.7 = c35fe47a7a0c8f82af93ec7dd162aeb423af44aa71b35d299d561b65640e43a1
+Output.7 = 4fb91c1ac25546550d914c1bca10943f0bc2d6785d11eb28eef7b138b42a248b7866eeedee2a00772d3ea216430344af63e896fd0731e93ed7e06e96024385af563cc80cbb27df9285219b1abc57949c580b3d7b7b2e956ec2375ea5069c89ca50602494fbaf80b06424fda851a7576806dd18cb8c96e11c746b71e272c09eae0d3e1a5e14d46a4f09ce1520c36aee0e565f3093e703786bb109a4362620eec6108c0ae71abcb8e3a46e9907fa74522cf47f81d743ff4766b7ecf81982340e573a2893636ea8072373a628abe72e78fa22785e607d4fd6941b6b58da5d77517e3cd6d228b67b49b408b7b67c76ff126da818ba19e4dc36ab647f3b3bdb3c9e19
+Entropy.8 = d120f00e06be42483e026e4be88267ca2f8c1b92f3a8342fd460ee5f2f162bf9
+Nonce.8 = e851a711e87dd4ce719d660de2988754
+PersonalisationString.8 = 28b9fd7cbe714602be7d7d8a159db5e72cfdc8ad8f25cd18023da801466bcd2b
+Output.8 = 6912a14bbddf7b5fee9d8df4e06662b8856bcb85ed0dc70061c0951b46ff4a6d9fc49eed01f71a9155b3f03ec31d2bf96d0cd5b961a36cb702c9cbb4a938f3a5cdbbd22d4a94f12434a706362897617f25953d6f62243cb3b8cb21877cf74899d5285a5b7fdc8fe18f49bc7f0fa4d200e8c98ee38884e4ab56ff8e31dd2420957c016b3a3dd65f6cef4b440d1a4f4dd38ac774e0d06e4d32bcd1d25aa54417f6e2be37096fe6fe6b2e08863ae1f03f9c7f584ccb5790d085647a1ef6a39614b208fdce993294bbcf2b66692d41a9c71b91fa0183486d70b3ce17c8d3b6ed8a3eee804ead37cb8b13fba5858eb9ee7e44b4cd9f5d1e063c33e15046bc080bb3f7
+Entropy.9 = 256eabcc37aed36ee6a5e288f6a96c28b8554ae987eea487a87f7f1a3c93052c
+Nonce.9 = 9dceeb5a5749f26f4dfde9ce42908d33
+PersonalisationString.9 = 0aeb442729544bdfdaf0a0997e12da31187d92e5491eeb19a9d0a5b8142f4017
+Output.9 = 729f91d238cbbcb0001d55967c9e33765db722ee3c1acfb58d67f630b24ed6ea612d45b12db152f082bef94fdf1e370bbf1388c26ccb6e5d2567340897cc11efe1c5f87213a38a4f4a8fcf0ed25647e800a5b67b67558f0dad71e560334b15f294f780d837819cbbf068b1855b3cf62d9cc9db854e69efeb82f71d4877fa3af331f9d93c4a44f8f034fe667ecc71114202560f4131002638bb97fd28cf8843b5aada3d173fb1a0f9ddd444bdbf902e4b1ae6530dd291217a26d0c3bcc8a745f1475473197f85de47c3c2fb0cc7dd3cef12296dda7d5f16b62cb2bde59b21d29c0e1c700fc513522b8cebe196ae36542f48abd8c6a0f75cd2da045221037ea8ff
+Entropy.10 = fe4e42ca7246202e31849eb9becc217a8ba475c289d36a96879afdffd0996e07
+Nonce.10 = 26346eb244156cbc6cb297d3f57ceb43
+PersonalisationString.10 = 8f75e9cb9dbf8636d5ca1a08e5def41e9c773de65bda450e025b3947d198fc0c
+Output.10 = 952ecf7252536ef906e1c4a9d4d0fbe5696a574487a9192445b9730d96ec2bebf57c9fb3ff1203011ef221625f95721611b10ff4eca17833ce11c4ae6f2155d1954dcdcf17d4d9252a739c99e085c3a6169585fe1b2523388f0690392d30f153d2fa75d8dc12fb8f235cbd83d5d1d0f883bf2f0dff0bc3ecb490fbee2dd09be21cd63e56c90dc92552a7819da8682c1676ee432e1e6c85cb8928b9997ea4af23e7d5dcceaba634cfc31541133c2d11cda92aa858d7fc98940fe4bb6865f8986b27ccbe9889f94cfefdf5e7d7c9667dcb91ef9095daa86a27df13a4bb8afb32d4bc5273247c29a93b4eb53c0189308585bb83baf9b6ce76d995838e035aeee907
+Entropy.11 = b18f4e2614719779660fdfbd342f37b944141c5adc2346c4e37733a4da6fd2ba
+Nonce.11 = d849c315f51034df3c7bd39ce4f4ddf7
+PersonalisationString.11 = 7b6c82ea24ddf29ae2fbea9c9e284506288abff2059c07246689618d3e6ecfc2
+Output.11 = 2cbf77930162fd93a9becce1b29e5b37a9b401b8e7875f650204cce39ce74592686e274372be83c1ede3e7901d4e9fadc5d1b9f58e03e7db208feca9573dd3e0f39967922309fc7e065591b59e6cd7cd4aaf836882d1230320e22f0326c629afada478708125c4ad140b3054c9d4a660811a40df01d6f3d0acd7a16b69b10f388ce317fd795b8336a141a3c3cf95f30035567a58c66a08806c8523984bf18d75bcdd67a6c1f9fc464e939c913ba02d28fa465042e1151adb914bce52048544ff6835d1f81aec6c42f005f592772e751bc7f64ccadc276a1754c382e1355958e435fe2a096818171b644084c702ed4740bbad7f536aad0bf47b3c1fffdb3e214e
+Entropy.12 = 14c817683e8013e1a3a56e46bcca485cbf386cf85bc45d11817264b0809919dc
+Nonce.12 = 9fecddd4a2d910ff5ee139f436af231b
+PersonalisationString.12 = 13145848e593be74e8d9730be55c9b98fa551eab55c364127b16b4a295ca15ad
+Output.12 = 4a16be29fd77ac3e0b0754ef030b0702209be0bed2e2292059d5d9a07322050991991d482689e71921fb4f0d189be688fffd4eff001d78e2fa28075101c55ac98f4af065b9fb34df0a1db10ba41c5efb241e2acdf9bb65fa5051c6d01cb8a0d683b001c034cce35dae98197b3a6945b31f3eb1342cf1a8bb6e528dac01c7f0350253029a1ad0899801bca276bc5eb3dd92a712f2e99b21b81deadfc23ca053822b00f0ed0cad1b2367fd3f1bf50a121d29f4a95305877aea757456c852c2ba2af9da8cf3f8a68847749d6ffe8e115291f999059109f2ef4a1299798d2d04bada29088e9b886cf839c71cdae58b5a4d17818ecc05dfa09d7431f471f79abe0e66
+Entropy.13 = bd5263fad2fa0c4caf9b2031c27b1328bd30fbb88549d528fb3227994a012ffb
+Nonce.13 = b37e0aa74649ab01627fe3663d28fef0
+PersonalisationString.13 = e49c8fd4b2d1676096f937a0674ce41f2b960eb53e4b35d01212adb6b1ded917
+Output.13 = f5dd013f8eea8fc48a2a77600cac576dbab7919c91f2d360749ae7369f184fdb428d3575ff97574b8727ad20dceb04d116030b8c3ad2ee54c69e6e01fa1580cedca2949641067a2845f6fffd1909ae2e520b9319ecbbcd6c10afee1ac1e4630cdf6c7f66c233eee4e7147f0503cc4179a5047668f198b69aac1a715480602df33c8383ba3b9cd179c647dbb5d5d1bb20c9bec9d933d75ae6e9c256df9eef4ae2ea062583b6619d45f2fa684d4fb6535c381478c2204e2f448018e9fcc4184d40c3fd02f8382c6f856be5ccbba36a81c7789efd1ebc4b71f99dbb7c002787f9b2cd4a20dc6444b808dfb8654b00afbd1f6595668de0b52dbefa298ab69687a50e
+Entropy.14 = e9e4f59e1a5fd43acbe20923907227b2790efd1a2118106b1e4823588c525423
+Nonce.14 = fff1f2e2ac117af8b2cb023f0dd6c6ea
+PersonalisationString.14 = 0a4c2df69d6c69df0a9c58ab7c886ed9db294f5fe98eb066fde543b409ee91e0
+Output.14 = ae35e947a538e7da73f944b4dea689c064b144b753fe597369e58ec4868099c0f000995949e82dc3e5c00555a2cfe48c8a87e87ae5e7402e2b1679e413cc556f08796269ef3ea83d6a49116349a31710964fb2f936cccf249472eab3267cc1ca0073ff4d964eefc82dd1559c3737661f8b206757a64c756680fb7ab6be8cb433b93f21a04c1e99c777ac26c1f34918794085ee593ca27ae991c53d141e52f90e7872bbb036dce78e6a33e2d638360f9c15d5746d6ff13c1bcdff1cd01749fa51c3c72e68c0ce57423d4915abe84c15cfb3301d0c3b8ffc6a1962c1fd981790fa2a3da60d70e8e8557e4b2e7458ad85f5141ad46e1db751893e8327c8197571e8
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = e97a4631d0a08d549cde8af9a1aae058e3e9585575a726c76a27bc62bed18a4b
+Nonce.0 = 227221d5fe5a5db9810f9afe56a3ee78
+PersonalisationString.0 = 94084b11d55e0f9c2ef577741753af66ad7a25b28524b50ea970105c3545e97d
+AdditionalInputA.0 = 24c81d4773938371b906cf4801957ac22f87432b9c8a84bc5ac04ad5b1cc3f57
+AdditionalInputB.0 = c8c878451e2b76577c36393ca253888c1038885bbfdacd8539615a611e2ac00b
+Output.0 = 761422dea283262998c0ffffefc77de2d395c818b9cf1ac2bcd1153235e0d8b63199c51e195135a75f1f87b454484ecc560c532c7ba5923c9490a423c177453459d81efc38ce2939226043cb733062eae303a009b48ee0cf3c7e40abe2b57a70a6062c669a9fbff20b4c94b4ecbc5f744a80d7be8134359581d441da921737b1329470b214f3e679fb7ad48baf046bac59a36b5770806cdef28cc4a8fd0e049b924c3c9216e00ba63c2ff771d66b7520dd33a85382a84b622717e594e447c919926a5b2e94d490ee626da9df587fed674067917963fd51d383e55730c17a124555e2e46e1395c9920d07dae4d67ffee5c759b6a326eec6d7b3ba6dee012e4807
+Entropy.1 = 5c96609e9de807efed31d3c2d63e284be5c44c1b5ab84672664de8d8d8e2f818
+Nonce.1 = 1b95a5290fdafeb05dc902a9a7bd639b
+PersonalisationString.1 = 135aafb3bbc89ef1e00a2a35ef32f122b7511cc55d86e7822a34859b630b4d29
+AdditionalInputA.1 = 115774904a953af07936e3efdcf6054b4c534dc8654f563bb10610444d30625f
+AdditionalInputB.1 = 4705ec7525e63919f7483fe76cdf7397b19f22d2a9d54b6cf0ff9abcf0a7c46d
+Output.1 = ae2cfbb29fde23e8c22d77d7a50ba66798da93be4e49ef78b38c9be2411e2d8a9954eb29fbad0a967c51b26d8d746801539aceb32e2459d07baa994869d3b6db2c88fb9d7250fac00de8f79990d501ad985590031f7c45a00cd9b6d1b5531b238f3a31d33237c40a3da31356171cafd52cbb7929e32b38fe523d8212de801f554348a3cc468daca70e05affc9af97f172aba00b2acc50d7dcb5f0ecbce741c71a65c657e9d0f250c44f73865962b1a0d19738e9ffe9f17c3e03363bedf5312c444375529fa8df9dd72b7c09f20c2ef37abb93e6fa57cadbcd7b23036bb9924fcfb9bf83b09ea360fd3988639151b1ab22939e9ea1cdc413f7a2cf04cf2778345
+Entropy.2 = 4cbbd0538535994cf00354ff8609ddfd04e80dc4174b9542cdab52385dd968dd
+Nonce.2 = bef8157a6e3f26f040229a450f8e564f
+PersonalisationString.2 = ed81729d1aef522f7bf9c127207d8a680ce4432964ed4025b5bbb12964374f3e
+AdditionalInputA.2 = 1259073b57358935b7149fa4349793c5ff28d3ce98b483ec48986aa285451abc
+AdditionalInputB.2 = b350a4e931bb5db50a866aa3c01ead7d48d5859bb97b675e77ebb844ac832eb9
+Output.2 = 215cca589f737df48d60360c4806ed548d44938c2bf5b1707310df987edda51e5092a7d9ca4955303ac59bfa980ba6e1819ed1141978c3d7df1125f5c4abec5b15bb8f5fd0edb1f26bcebea5aa7c8d5d32e8a5b608f609d9dfd765074b23cc524596a91226b726d899e42bdee0321eeb2dbaf63d33cced6890c19b466636df05072f007ae60a2364dde7f82315e3e30e63258b8abd12f18b6ab3d384cc9349e56dff00c3f53a86a301aa7205394199d32382096f6cd9db9646a92e73c3fd1e53c28a91683031c1ac72bb85af50be669d0e1d7b05a3bf1fc9720025c1e39e1f09d18d2e9247f726ac691a1c2321a667e6bacd7d77a57ce46397db1a91e7908ad5
+Entropy.3 = 9b2bb0f34e6f0a31eff00e6604e6ca77643f69895877f77197a06e2b42bf047b
+Nonce.3 = 3c1ee55a2a28fb3579324a54458310b2
+PersonalisationString.3 = 895e7060956784e5ea113ca785214bcf608e2a53c175e6edf5b78f1ad90e67c6
+AdditionalInputA.3 = c0b1980d57fb797c4907aad1fb5662bcc8d6ee30f6bed951e77c11d1893346e9
+AdditionalInputB.3 = af3357fd21fc04d1d1bd162b94bf129c45d41fee90366a180d98d41325336b5c
+Output.3 = 50941cc105c694dd26d5bc73c08399168a270428ef594a6968fde834e889cfbbf0a80d7dad65d2fca21ba8019f1011313fe86983a555fb3ccb643bb771724e04114f3266d72c2e1a75363aebda9871c3bafcee3f389ff4c6f1f1bb5e6da5389e04f2822da800cb058da9cd698c65d54b16e7562c83506b632e4b5c7a78d6e36ec307e48cfec4fbc3ca3dd67ca95f9bd7f1d609e0a6d8b5bd3feef00e0c4165e77da84f989210c78daf633aef657855fca26b832994000f980c21d355db10f71f9cbb8079c48aeb673c5ba097a325d9a89e05bbf960fed4f8eb097cf37f61900db8171685107d53f85bbd8c1a4a1c7045c8b6e3a8a2c4114542292555585a090d
+Entropy.4 = 9c8306c6941098408c56518a44d3075c22e02f19a6041d2e9c4e296fda435db9
+Nonce.4 = 17c99d538ab65f6f1bfab0d479a1833a
+PersonalisationString.4 = 3a80e9f5b71b242ae07ce7b617057dabae189c5468da2cf049b5b529abc877d5
+AdditionalInputA.4 = 3c151e92dd3121a8d2d11604632df00cf90706d3e843737445de0f2fde1ea924
+AdditionalInputB.4 = f53cb5fe673201f5eaf4115382d48ba45be405b37a31a56e41d1d76202038b06
+Output.4 = 9bf31156e54d7142490e620afec2217931fb2389215a3609b384b0551bb3c9d90c3b3053054046a324db9b34633e41b66114bfa7ee86bbd22d08d53e349a4dc875265b32151d3e475df348a22d5226478184f372b0ba3be92ec1b284fc66dfa3609463214b6b468b29478acb0c55e1d4674882cb75e3eaa3a66ea0f4d7b1a571206a761d636bd3519afb6f05a0f1b6bb38c00bd68530a6c9b445b6b4a9c7457a055627b606f4508ed676fb5ba0d27589b7f464271c3e561215905c50ec48f5ddd1b8549e8d163453083db96c7ec8eeedaf6804369e76760b08abcca937c497900be385db8804b443e8a1489b8f3e3e4cf367dac3e15cb8e95cdabad04f08856c
+Entropy.5 = 87a8fce521df0a2e26f1b1f9c7ec9e98968474915a085a95cbdca7d8c669e08a
+Nonce.5 = 69b8c3c3df07f9ada368be448938bf92
+PersonalisationString.5 = b1bfaead04743bdcfdb193d32260918ff803abbcc0d5ddc50439bd01f6e42a3c
+AdditionalInputA.5 = 12a07384e9c74fb3f33df1a089dddb7d416151a0270d0c0216e085f1ec4c249b
+AdditionalInputB.5 = 9b42567093112cb5889703b77b4b372276b5bbccadf86eeb9ef6d3cd395b2acd
+Output.5 = 5ba662260aa0f743a33a9b552ce41d93335a855a55df11b870efacb7f75e39c978e730acce3664c814ac10fa10989fb00a39b584bb14cad2c02c309703c8ea8768d479d9b4e17402ee38cb82c5f4d80125f3e674ac1adb919cc8a988f79f531b08253fbad0a1b27fb1997a4e2c7bd5ff3abf66281e8b60987587327a9101b76cd13771e23ee2f02dc339589b9aac4f5af740afdaf494021c3504fdda8f93f77cdd8262df7d4c48f85b6eb03a7e5279db4d18f645a63eb6f53f9fb123c53a78686f0113a209b6eeef3b10cd4489875a07af863c467f25b69cd13b8e72847465fba025e25fe7bcb41745369f255df0eeffc3e5f066815ef7715680b104e20a7e9e
+Entropy.6 = 69d667bde79e41cb78742426ca5ebd48086cf1ded5cad7293fcf910e5ab23cc8
+Nonce.6 = cad75bd989c3ffd05817d1aaa5493c05
+PersonalisationString.6 = 5f72346eb50ea82cb111d5b3c91dc9b7c61c92fa1a062177d513fb616b1226d5
+AdditionalInputA.6 = 0465b8aa89d9cbbe8e1cfa2e64e64b8d1f5dbec7f710a6d37fce898e3f81e57b
+AdditionalInputB.6 = 173135f31c2320cccf513e88a21f2d207e00cbe4330d2f550e0be77405eef47a
+Output.6 = 34a08d7a564515a918bce93cae084f27a558f6f214c4bc9169dbf507c3f11d02ec97bdfd777960f6b4c4543c1e14456d0079215320ab607e04b7519090ebaf3a5fbb0d7a3fda1af6cd8c5d785524bdba75abbe50e3d58e5f05f8f6b2c2570f1178acd2f4c11a7b1b8b4ebe4ddb71a85bf19bb2fb25241374530cbc6c0605066e1129a2d398356cf2ec2f7a286c5b869c702aced63f4e12f39b7ce250547a922872c36268a3a4649f6641987bb7c6baf1a3e82cdf04d11160ba11c5a002cfbcf4a8698286ff318ec01fc2c5f6664e50561991a533ad183a21e7b97e0052b0350d213738b0c6e5421a524845a861f539930540cc40c6ed78c46be9c122e7974d35
+Entropy.7 = f1f6e5a55fb2180de436d48115aa1aa38a6242eeb0959de3690f259c1d8395a5
+Nonce.7 = 862d1ac4843404d25215c83bca90f44e
+PersonalisationString.7 = f467ef083c745a1bfc9be44f1d468b2518e3ff1c0cee6819fdde354d4071b17e
+AdditionalInputA.7 = fdda9f0888c4439cded15a768300d163c1e326ee5571c22ab95ab3e44b1676d2
+AdditionalInputB.7 = 6b8d60c565604c8fa8d7adaf0b07ed268a491fb79794d2770356e191daa1cb50
+Output.7 = 55d0788614b770f4b8c3d3ac0bbf628f294ba2fd16612b65d0f469ded665e3c8b82c95db80cc6b410b5a6e624151fc50bf02f279ffabc19dd094cffb17ba44b11209b923df326db14eee35a8bf1eca3807afae918206e844e517eb32c207342008a0da742e734433867fd86fd89d27ec6e51a9db3ad1adea645fdc57179c4b71de8b455ae00efc09328a0bffd8c61e3880c007915997daeed4adba61b44040f6f9b6c6427e1c23357c8f7e18b5c974b3c34a2fd5cb5e70f48df2d10c1deabd987f8390bb33858d9a5133a7bd798b1c7741729b8562fecb3d4831e9ce101de192d64bb5d757cbb21090d669afc5566c1d6e25586678b5f2fc7d6c6113ac4eb54f
+Entropy.8 = 0db9d437153149e101d5818b263b975735994dfc33d8b3f158a05760867757ab
+Nonce.8 = 438a5024e1d43006226018c378af55d3
+PersonalisationString.8 = 275bdc5fc78b0d8afb5c8aa5f7854c319a81bb8cc9300210a9990fb7933a352e
+AdditionalInputA.8 = 809da54d1830545672f180fa3e0441a0d3fe472e7cd7a6d707fee5af7e9b21c2
+AdditionalInputB.8 = ebe66cee6efbf583c881a25e346ca7d99741dacfce0d8785c659e92774e26ff2
+Output.8 = 878a3d109d814ff4a4935689ca96b3d444bfcee9edfcd9031255ad2538871027273bad5225864e84f3c2afaa22a40e7f6793abbc49c8b0ddc7b30d9dc7b408888e6b98f4bc79e08775b599661ea4b50669132c21272f8d17fec9d1e5310335b0e6480d7075c830a44ea528900f99de61191b5a006ca4340356dbf20c62e8ffd0577d623146b12937e84a6e17c0ae08efd339c9aa979c7e21e9c56e019f7e4f375bb601b1a83c21f27a554ec05191794befe514dfbff5a3c9a0a9c80bfe9b6adc7deffd31c70ba13fcf170abd6bf3d384381e0a31fa9c81b1bd207ea2e0b4153b6a1252a9f73f19f6f099fda0f87baba99b9711a00b5f50ad88d3bc1c4e806467
+Entropy.9 = 4106f6ba6a291fa54e4ecfd9fa61b961554e4e8e03e19d9bfd82bd35c3471e8b
+Nonce.9 = c5bdcd2f810079c1bbfe906929e88d27
+PersonalisationString.9 = 5a7e61b86ca70939e64af613a667695c7c915e667c79998e76e55eb33fef6d86
+AdditionalInputA.9 = 86c7d5883aee568aa74d25782019fbd6f5acf4196752ff3d1dd96ec1e7436424
+AdditionalInputB.9 = 3a5d80e739f5a30e6bb507d82b60ff987d5bd9cbbff4b47daff278a3252db3ef
+Output.9 = fb146146f828e880c6ec7ab5a65fc8ec4e4d7d975c6d7c0a9bc7ce041f49799b11e235d7ac5a4ec4eea721c3323448e686ae96579233ad698a9d6fe3f5b37d87ccfce640192dcdb51c7bf35404c90b705bd97482d95d1c3e3a40152c86ab923588842ab02f4d922318a7fb84453b072c749a7f54e8ad005c29c48af6f01ecdd8fac13295e42b2077c70c7bf54e214317f98003e4cde07755e95c91f1953b29b3eecd49dc753e74aaf2b1c83feae87428be6a5aaa3261f0f65491e04c1fcdfd5481eadab68f057df3c83694c7451fded86a18470b06f1779c38efcac54b576e99eced3b5581eb5c9f7b3340ad5667d1f0d3fead8b9484a032d5f74d900fd64d10
+Entropy.10 = 5d1fcdabb70dad1428c8be291720c92b8565f331ee3438d79bcddc968efedcdb
+Nonce.10 = 9319f5ee91124b93b965d504211fef04
+PersonalisationString.10 = 6c8c8a066c6208dbc18a40a30b9f689048877e038bf76d65acbdde7ae4c566f8
+AdditionalInputA.10 = bfa2e9ebe0d70d3b62cdbd78c775a62e0e22fa75f168123a336b66b9a2b68c06
+AdditionalInputB.10 = e48b5245ea241baeb7f665a9daaad662d7b2422c3e3711cfbed81d73691864ee
+Output.10 = 1586e0761c4a39013dcb552a0e363e709f4303c0e575653c9b240be7449ea26e4bb1dc93f06ec958b6c06217757fc550b356c135063c00fce9d856aec0edd20735b46b7c9a8e7df780db3072fc2b314fa5cda653ba3690132f10d30ee94c8458846be75659ef3868086bcf54ff55a8db1ea65c3e747a8ddab3f2304738e0c75adfc10c23ba651ccf0de64a39cab3beef667f466391a61a87a981afe883f09c4edbd3eae98d51cd3e7b31ee179f8a4e10feac96ea210a4b8415c9f2cfeb2bc8bf51f13801dc542ba1badda1c30141d72abb1bbb35c9bb481d91db5691c44bf3526a02d0bf776304a951858aa2fcf3f45bc656abcaeea94cbdc851a914b4b3a3ea
+Entropy.11 = 9fc58d0785adbf033ce6642dcc9a861df44a35e89d06b346b165074a048b5009
+Nonce.11 = 94b4c0b3e27306b8c805c97b0ea14bb5
+PersonalisationString.11 = e02f7a856266195fb5f4810232cd5c71a4465e1d95625c01e8e7eb69c63f6796
+AdditionalInputA.11 = 7cd18b8d035b57bd01464280abe891b7faf55f9ed9910d9a148b030340c67cdb
+AdditionalInputB.11 = 918c4d43fecf993227f7c120d239a30d3c315602800d6d58b9e9e0715964cfa3
+Output.11 = b8a3581eb4a208d1ab8f0e84e9ff3d2e0ba57703a7b5be2e4f3a3ede2e2519f5e6068c28c41171446cfbc40b48a97bc7a9a1e4d3b02f48fbf55b1d63da7cbc5b7a95f354afda273dbf5bf099961db4a4c5f296286dc0a51091a522398973d5527b2e55e0523c21fffdd0dd38527bc45959d5a711d541634e3139577312d678421eb37553c127beec64422316e48542a906cd7efe0d96eae3c4f2db7666083d9365a76cee4a207d712ddb04bf775be29ed9f030eade4537961737e3939a19e0769a3a8b96d055120c49925fe1ebc4a2ad54468421dd5465e8761b3e2e384373a971e408dd3a54907538a7d887986677eb192761959a4293523f81647a657aaeea
+Entropy.12 = d43927d1e633fc3433536cd03617a97a3a10a7ecad3f0c781602829f8ec7feb2
+Nonce.12 = dd5922f2a2dee51db93bcf35100a8364
+PersonalisationString.12 = 3335a02aba1ea28d2e56973e21109e0adfb5068613c447e625fd83a8d0e34494
+AdditionalInputA.12 = bfde33c52407d3137123812c4818ca1e4b61878b8f9dbaec47935e3948a88d0d
+AdditionalInputB.12 = 42597cf03bbee0e003d8677159918f5318402f7329f08e1d93c850e2a2a2f1bb
+Output.12 = e53c7d0b376a94809f472961acff314079014958935cd67acc476abdd919a43cd3f7d1462d0d6e628ef5d0c8e04a6d243838c61ea36b015e84d7ad59e49b45c9b04f6ec78687ba47156e429b2fb6dc2c0da4f5677d1f689cd28612cfa6d95628c26b5b3e01186153a1c25c02f5ce5fc287623358687d2034347b2433ffc1445a2d93cb0103ccdaf0c585f7f4e7d41aef310be127208b3da90523aceac5fa13ffe77eaa4d1fd058957c8dd2f355cae7f9e3d8f29ec7099599ba6c755689d53d6ccd84e33407a066506d97decd7e306d22ca6e0faa7b94f91f4eb004422ddf9dd6b1f49b6400ea55d40e25c67103ab50bcc92d100e89ba569b6d51aacddf02daf1
+Entropy.13 = 0bd69ce9a0a66dffefba83ae563e8df0fc6c7d7bdf491bf52cbf3f3777025cdf
+Nonce.13 = 92b32217f550a1fe735b8519b44b040d
+PersonalisationString.13 = 820da3187bc879cd1f40476fd9677f3b67e02b35b6632ab68891e25f10555b69
+AdditionalInputA.13 = 903b882de013695b4683316ffbd7c7809288d54c72e369f70cf172bff85e5629
+AdditionalInputB.13 = cfb5f494e76486ceef12dfe1bafd6ccf9b0754d8d2306fb0c41c0f4e921317ef
+Output.13 = ebad5e5a358ceab806ae5590d80bc0ba5d4061f49f4cb79a8a9da4fd1e8cb8f41cd8edc657c5180d18e62da2b53a50085b7e18b957eaf4edc975ca9d43e380434f51542dcfa947c322c708f3d3593c520717230df17f9341f02a5596b2058a27ba23f72a862b391be884570b22e20c80dd20d0a935f068465d554c8291fcd88eff608e92200f90cccdc82cb5697f0406654d9582e8db54225aaa28697bf2c4f47eba086a575298b991098c212c9e8d95bfa48f7e500c7223d9cbffd1df6f725909ab6e9aa837ff9e69158af434d18e5a7f99d1aaf10931f380d88344ad841064130cae50edf8687615743735f80457a228475bab7559015c4f45f91bdfa31d87
+Entropy.14 = 45784684d6004731689e33e45b344d7b68dc4fa841133cb2dd65c4b326dffa90
+Nonce.14 = 1109dfac2e48bf17f2fea33b412dc653
+PersonalisationString.14 = 7c6f4675f7a0b8c424d5be9e809efa305493874d9a950cb343afdfb64e77ecb5
+AdditionalInputA.14 = 2b2dbe3834d8be93f1396b19be83bd96823dd82740da71c5eeb7b21865021884
+AdditionalInputB.14 = 49c322fc1bec86d3e20628d9bdc1644e6f5e0237c7c694746bfee32a00145696
+Output.14 = 9110cec7d07e6e32724bf043e73021b3ca0e4516b619d036ac9a00914e12f01ece71989f55c1caccd542c60a9cccffb91e203fd39dca2d92c8eb03ee7ee88abf21dc6891de326c3190f25ee9ab44ca72d178db0f846969465b25a07dcc83777e6b63a7f9f1a8246dd31ce50cd9eb70e6e383c9ad4dae19f7cec8bfe079b36d309c28b10161c28b8d66c357c7ee01f07403a596366725fd5bd3a5de3cb40dcf60aac10635615b866ae633fbdb7ece41695d533757d9d16c6d44fd170fae77c15b7426ed6ec8c9d6e9245cd5e19e8dc3c8c7e671007ce8454413bd07407e8a2248bee95a7669db6ee47377b4490a6251abb60cd4e2e404ab88aa4948e71ecec50c
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = dc01767ed6527b8775e99fd5d46dd33db0ec2ebb393acf59b080510a657954ba
+Nonce.0 = 174e0ed454d1b57021fa980f4597ea25
+Output.0 = 3de906b138662897b8a5aa00d8cfaa364bf70143d1de088a6f38b610c8f4d2a20c107c9f6d277850fa5f50007744f90cda0e20e3b140f9aac249a43ece99c574245ced90e6023ff5bf5bacee6656866db3fd72a209c79fd9829e3c63a7f46f0d31398e189331f93ec97ff1554bf0739c18abc1cc1dca1d8a8a5ab243b7355223ea6eeaddccc0972f23a03291b28af9303c21c0a1417529471c6adeaacc659554e8619b03fe6112de5c72162dc6e1039cf05141fa88be6abddcd2f312167e86773e52e73336c6404b44820bdc14ffa6f0e8f7149da33743fbd2c89dbd0e75b6bd9ce7703b337031ab51f5137fe1508567340fd11bf4b51f34032385f1287d4af1
+Entropy.1 = 197c8b09c20500b2ff9095142c4629becd3a131ed17b99940ab31a53762226ba
+Nonce.1 = 4579a3858564901928fed2a75c98f32f
+Output.1 = c33b2418bf4d66f49ad1c05102686c65613cc3602d74aa4e5c611873a337c0fffc4c8ccba9c5ab56c3c9cdfd9be3c0da039bf08442cf2ed4af5a9fdbedf0d66001192bca2a2a5dd5a49cf159e2a5ff00066eec08b99312f84033e6e6f24bc5d908cd9d19e6314bfebb98bdf431c9779d0ee7d15cf9ee7e9baefddc6c6625500911d2810a0ec794e28eefcd0fd76590419933e1a1e077cb2860975762926eb206e1eee8f1a6eeba762d7ff6056a37c56649b034af7c976432cc63e672dfd4b564bfd4898de6ae7944789199e700c64a78ecd1b841d206a7c523040f240001829363809569dc5e90762c5c63a5147fdcf6f31beb60151ed54637c73d6df4a93aed
+Entropy.2 = dfe546e4148a5d0107f3dc9f735936d87f5ffbd694158d140ff04fce96785e93
+Nonce.2 = 943f71ec131f0d6abe5098a00a93321f
+Output.2 = 8290a703f35fcec670b1239fee36a0059fa0b3a355cda9bc1f824ec616107edf4f101d9d8e7979892ae17a3cedfbc9c13a938335d61414f20308a4afb94846bc8ef1729cd35fca10f0bb975cfb554f8723cc51e9356d13c083fd5954a0e4346823dcd5b5ebcb0e21b788609bd88fe40354dfcdecbdd97d08af772351cb919e3d19ee65444f1269dd790cdac4ee88b026770eaf75c8018cfb7526a1c4efbb9a870287e6a0ed8dc8e67124feba54baefe721ce87da82743e4f185b7f591ef67506ad43c50df769dcb68965808d246f294461d4a55c9a148998572e6ab52bf574a50cc60129b1bbadde86695e3c5d4d21ba7f9e4beb432a39ba85dce836b16452a2
+Entropy.3 = f81566d48684aa031fa29e7a8c759dd08f6666b13692776361ece56e92bc3c2a
+Nonce.3 = 40b04432b8979914f3e0e19b9d3c01b6
+Output.3 = 1799a737c4436d32e8ea5662541c2ff628c2f293aaa7a463f6566e52d78782c88a34c505e36f29f351d2063880b5b8c3fc99ed9e02ee62496649e1401b1e151fcdbb3dc76f13b209044fa205d050603fb1197da58e7a1a3c3edc8c4b6adc230239a120b71baa6a272624c67f0eafbe6daa71c681eaa67b47227daa1ba058f399440c421dde47ec1b8211d5c57c7bb82c7448a3491b6209a450ac1e0856363fff9afecdb065051021c6b9f0e7a010d1022af4ad396ad1d164894e1c077fd83b71d55c12f9b41bfec2023998f43a2457cd55bd0fdf0a68258fde7a6fa13beb1070a5183145a2d7b88786b443deabd15e594dea1f1eb72d556178e0c74701773739
+Entropy.4 = 36afbb34419c0396505235be6de69861e8902bf1c70a3e2836b97998cbac8b38
+Nonce.4 = d45450d4c1e1c3cc4be7379b0938cc37
+Output.4 = e1dc7fb2c7d11f53a88520928b127cc0e234c1ce3d593bb05967ab2600a1d66b0fb32e70b9985db2f6c14999f3b9faccb72c318e07f9d7770f3a0ed33f2f822e36a5db463cfadbaaab7ec75e773e8d4b5497ac104e23e199e1284c4f1f9e75322ebecbe659bd564ed808f815ed25317a7e5c770eaa40b63a529634a0cde0eb1bab761a91ef260eb4cd2c5e2535d8b51d272ea7251de7c9741c9b3d1ab95d1fafc7ecda61aa8aba1afe220c0fdf3cb22234538c1d47fd0921244b11b55e54aaec9e883ce542f238aa1f746c09be9bc8b4c09116730269115cc649c1abf323f3c1beab4601d402a49d35763f1ad49c7783faccf1bdeafc02beb34a6d247b6ff33c
+Entropy.5 = 5eb9dd00469067be59bd445b04152b85576725c3395d7c413c723990b9f56000
+Nonce.5 = 54b1b9129eca3d2db0c63e4467a495b9
+Output.5 = 2fa8957e56449eeb60e0cb78e9a00a31842b821ac67e8c883f6be54e8134666b30011f6ca692f4694d663e8542ec824369faeedd281ad710110687092cff0f72990ed35cd942fc5626bd58bd4ca6a5043cce4db8d4e1dec5924bc9f9f2471b1ebc952c73629e3e53bd88b432b6930fd33e9c03daba84205793cc6c34d3e52f244efcb0e0b6335d14dbc4941bad32a8c69d750a7a91509a0ac714d80b2a0e28e14e02e5e5785906b94fa153b7abd1e0dec4b4fd00c073ab6acb6f705c07f8d7239caf3809109c78461d7ddb334edd0ef9902861ef98b7d7ac418ed9c24d2fb7c4414e25794ee5165feac3611caab8945541af42f77cbd0d7c118a077ade186972
+Entropy.6 = 42f551fb6533137f40758d00c3b5b81058281f7cbc18ba5f40aeddd31065ec7b
+Nonce.6 = 2cee96d6c3eef1c9ed1485cca77725a7
+Output.6 = 3fd4f97eedccf2e2eddb37caaaae3433e5585c9fddf32aa601c68338554ec84f16aadb8e808e194c4f090defd53ba7c362aa70cdaf8c014543f4b11ef2a3a70f804422242d646a0fa234ac64719cdd7589835d49eb0bd2ada4b6ee458400974dafd17b43a9e5515495d0ac650fbce449e79db7842815beac2137d57b6edcf121389861d85b9ffe68143cc06e4afa9cd9639b45b310acac933160d7f0699a6df9e04b156acb02c43d5d729474bd28559de2f02192dacdd790ac550bd6c9afefae91ae3924494dfae1ce356a7bcb188da65be4eb0c356516246ef1f4e031d6247c61790b267dbf8775261e11cdae2bf7998bbce7c15c7ba5bb6b7857e7494dcd87
+Entropy.7 = a9e9d5d06014d240d427ff79fd0c6d314b5d4af6fac5c0c238a62f9224b3edc0
+Nonce.7 = b01fe9f159783d29824bf8055c646c93
+Output.7 = 60d46361f9b1834eb8c103422f3cbdfb243120cdeef6270806039931112aa45d4baa38791cca6b5eeff982a3aa7a2b2627502365644e4a6dc5a868785296bf3ca101e9bab6bd4f03b2adcc870ff9987afeddd9e6ba1edcba09f79192adef6b561c5c36dbe8aeb196da9a2384259583f6d40aeb54197f0291e5b70a34aa559558358b88f5786cd5822a1523dbbed83314882c5083aead0ef17c2ca94e7322142706cac212a5521f6d4f881ac61128b13e327f4b5e81c6bf2649b01b40645edb9aca61ebc58290db9f46eac6cb475b5c3a9e481a80cd98f548031c99e46f41d85456fa87f824e8164b408dcf1aa14fa3f9ff236f11e1ebc86c3dfe0e97e5d60018
+Entropy.8 = a160a99bc9baef7d5ec8be75bd005d094e431f555fe4d49d3f1f41fcb3a07736
+Nonce.8 = b5d170cc69ee34ee7ba73f35646512cf
+Output.8 = ce66754bd42cfe4ad5fbb8a0283cffa51dbd56da7326786ed7c5eb372a046dfb9ef6906c438eee9a21b78327073301c994353c42ad58db488e28004cdbf5c0cc9bfe75aad76be3c81fd72601fccbd580c2186d92ecdb25dc13973337f4876d6aabeeafe1604f1cbd5fbd804a6b15ee1e3d9987986941a4ea51c2d461364276913c16c580e12f51bf4444b5c0e4ff9f4b797cb850a9cc562c4e39e3240a196816638c5e62525f880dd57b1808c54d59f55b4f92d0706b08b25b77284544c91ee987452849d019a65a38ffe3511e0431e7be6207e88a1cfd989185906815fbd4c421e31c7f6cde9ed3139a87a5e08930e44aad1294451e0ad8f89978a1379cf7f3
+Entropy.9 = 9ec905ee3602c95906f6084b8cf69a8be76d268652035370cfdf13a871a85f86
+Nonce.9 = a7764c145e668435e219dd8cf9cab23f
+Output.9 = 1996b8d7bf0d43454d61239147a8b32a27d73e0b1c1d8bbf8ab5b751bba9cc813d8be80c0ac7d71ce30bbd5ff5b1b17c12413a169af3d081f8ab1739048a0d2c1c2e24c5e44b0dd7225eeb227610af83a4a271fc31da57213eb6d938edcc2da5e712210202a09020ae24967e271677adeb2dfe6347cb6573e413dc20ae7ebd151acc91a255dc5153be1f6dfbaa4f2b7704d557592961d9847c5d8302469b02e3ca07cf331b9e61b9ec64efd32f3405319506b772fee3aa1d2ac2d70303d47e193e0e1ac9c8565861a5d7f62e515d61f770e2ab3fed00b3f9e713058322586914d69491fb4515cb2c5d21cf07c710cbc4ce362383d084c857e73f62c58f76567b
+Entropy.10 = 8dbf9b093d9a190ea8d588a16b5ff2f72caa500a3cd55e0a0b7aea0ca5c41731
+Nonce.10 = a5087104d6327761d61843ef45cbbe88
+Output.10 = 4b4ed879c2b1980112e0f4e627eff8f8c7d210f2606aaa2f7d26422c3e4dd3a66623ee501b702ae194b7ac258613e87f248bf49b40d0df4427142185d2e94b8e14570a00efcaf59ed542454f250475cfda7a98d1c1450978336f613f704dd9cb87b132ab60f24a51a1e1d815ab7e1d96967bb255dc5ac351238053602fd774b9223e7f079a423ef7b0a8ec9a71e222825ebe3c817ded31c2e6c68e9ae26feec7e75fd04157f60a25ad6c13734ea8ffcbf426dd61f4adc1a15e0693b420afc3035f7c847766430792b4fc78a32377a808c82ca7a2abc3c8370a3ff192014ffc819b5e842596cfc46d0c79546ea429f744f5b1acf603e65fc472d592ca07c8d19e
+Entropy.11 = 222e8db3a1b1a95497aa0a141277d9c9c643d0cae5f47d1f58cc15c8120cefc4
+Nonce.11 = 5836e4a886163ee0b2966ae82117b48e
+Output.11 = e28b5015a08bb7b427bb90d734089a277eb749803280d5edd578fd4ab6bf48c3c6ad69176c116b3d98452e377c08bc4c2d06f552db3258c0c4062a498e22c438114dd312353e47444f4a3e393109fa4a33fd183b599ac0f7290726f9589f24a266e6214dbd0a165e22b277c88047ce9aba14f0b0912920560c89c658997590b4e18e7bd5989e956b0a4a05791c920adda109c598458209965fac49ba908be37301ae4f32691334975860014d63cd8cb4e12ea1052ab6b6fbf2728caa0d14321735a0a5064fa134276b7617bd081938dddd2fa5380284be2b16874b3739748d0aaa79c420d1a48a1ef860dec60e9a1ee0348854670eb289a36c6c844ec37164a2
+Entropy.12 = c648e453f220fd4568476502b7260069174cd037157de9021346e81695a0f310
+Nonce.12 = f38c95d2dd89f2f83a26125306249bce
+Output.12 = 43a9a34282ff596a085abba35356affec9178ede69c2abb61b6f697f8e88c1c89a1585a246e1ba6bab4f9ef2d886bf570e7e17b587bb5a65bdce7c23372eff0a56e66689a000c0d30620678accc0196eca5c3b28d2d7ab89e8919e8ca6cf646797b282062d7c61dc6bbb540b635117c75bc5184f821375b9a03a67f43675158a8a528b730ae0c1f35839a2301f38c229d40890efb10a68f727f8b92064d82dcabbceb764311a1ee66010b5e61cf1b68c2ccf20d15d8d50601f91bb75c5a86448eb230de12d598ddf15ba5ad9b65ddf9c3e6ffdc3708c1768a4cc2378e0c5dc16b9321a5929157473108ea4fc1d78825a6f8815d7a392572ac0e6334b496a218a
+Entropy.13 = 19306c387a4da3de2f76013cd9c584dcf5e91a85a6dd35c0f25f2862a785bc0e
+Nonce.13 = ca0ef920312aa7c7dbcc510f9fd0c29a
+Output.13 = 9e13d3d914923d8a6f3d182cb8b17bcaa961ac018af69a716fe9c95f091c7e15877892e001e2b6d656306cd8359a96638bb4a56f156b4a80a1ac65d2cd284c1374c7b54cce9718f364d40a6bf90ae9ed8b8fad347212cc4546b4ca8e19c3119b2723c190d705bc56e3b2b34e6340ffe919d94dc531d7ef5fd69e6aaacad96a1b2c5278c8735f2caebdd3ba69a779a3c8b53d03428221307eb026f9269d924d5db129c8b6c680000bf868cf65a6732975dfd31276cfd96bb98727b55470ec9391f345c1c2371b3333f5b4ebed9910f72e638dae62bab13caf126fd0e90de9c51709aa3c6975a915b34f97f0598cadf90aca49e961dc5b2b32afaf0801fe481561
+Entropy.14 = 1436be35237c34bac5b5b36b24c998380883fb52621daa420112cb57bc84745c
+Nonce.14 = ed884f91a94c1b0a51f316df776283af
+Output.14 = c74ce568f0c465e79ef3700857cc8857b74ec8c075cada3f2698ff69569318b130b5b079ac5b69814d057097b0a107a546b011db601b2f7aa1708effd6479f383d7d484a5df76b63f1419eb360991475b2cd97590a1887487a76cd6fde7764cba5f101e4614c635ba7b1e18724a0a8fb39ca0948bffc441b6aa0216cf3c28ae6c06a24ad1bbe68970e06884d3b68325a3d7c1dce9a2fe87d565dccdcee7c62ed32b577763f510f0029a99530209628359bedf4bbfed1a13c222692d8cae60ca736df834a6e316db27642ed5839d2e11716a5c06e8d067e8548d7ac0687da801d292e2a6f414d7470d2e72261188347878d18e00fab3d4c15cb4c4a73cf963437
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 3be441b063a22fa9357d7ca654dd26a6d955a9a51c8bea4d65cec0bcc105edf3
+Nonce.0 = 228a8e6924f558da846e42c3e1294566
+AdditionalInputA.0 = b50a072e1abdd8f890bf20064f5148ff22c5b2eb16e6f2881d5c51be2f8ffad6
+AdditionalInputB.0 = 963a1fa213aa42f9f007205cb03b045a5d64e8e0f5e3a36844b6cf64df78cd65
+Output.0 = e0d38d3c2c4502c0b8a9f2b31d18d181879ddc8857d0ece5a780d8cc0b9950d4629a69623bff6df09513f88c8865d5a9ecda0787a90c1220865005f2335cbd386e76e14653e2c9db306e7a03aabfaa4f5ede248a4204690547c36f12e92d244836b28c0fb477a32effa9927441540532f6d0b61e450cb49b8874e857525491f0dedbbeeeb1abc1014abdd764bd8caf68ee748a08298cb62c89154fca983f484b5671bfbefb0f899ccc0fdca4024181a44f494d010d09f1f95725a06c8ea0bb0b2a4e0301c9f4acccfb031f33264a07eb0bb0fd20116bfdcd0fd79eb2b34cda757d0ac04c2ab7d4733231177f1d2f726a214a588fef154125e6e57a004fc54975
+Entropy.1 = 2035d88e64d9466873131beaf6cbf3453b134184985725801273630f12d95366
+Nonce.1 = 861ac90b63ce73983f8a080ae0a65abc
+AdditionalInputA.1 = 18aeec56ba07544e9ea60824d87d6a399ef112f6f6308c19465e559e4d9cf7f1
+AdditionalInputB.1 = e5809dcf5dd95bc13fe99f0fe94742c62ed6d8d91a690d5ceb8c9dda1fdf854e
+Output.1 = af01130e63bfd0e6b8a0cd5ea48b83dba4a1b0838bfe468c197b99f20a07761cd35c961d92c33f09914f1012054156f7cbc2334f89c67ba52e1cff9cdb4b55bc70e239cf8e5a93138a54202d71dd09684b37872d38cfaa03737157ddbf4ed49f8d828ae8785123849631f75d6ee336f0019c56f94c27b745c95731cff204c21f416ded920d483254cd4b5e6379b911e00bd48cebc97043d312039c0d45eaebf9ceeecbd5732d7e154feb91163cde82fd991d1bf96a639a85da1c08ad202bede11cae576e9aa02d5fdec20b3861198ff4aa9b5e180f5a8473de8a7108167b3319802fec12cd1d2ad2f3b5ad1a30f380c0e626f08776acc3f6cc4ac720e6b3497f
+Entropy.2 = 2b5435f668155b6f33301f7014843925954ba18a3896c917c7595f8bfa54370c
+Nonce.2 = 6fa079fc6d57b301c0a43a97fcae6d2a
+AdditionalInputA.2 = 5f3a28f69b873d551eff06f5ad0c461a2708e760b45c23e83b12a9ead6a5fcef
+AdditionalInputB.2 = afdb3929500c23411cb7375fa422d5c951215ddbf456358265df0a66ad54c183
+Output.2 = ef3d42ac07b4e662bfded6b76b476a92a0b4535c4d02b241b3861439f8c3c27edc869414c323ebc78008e1f26e2021c8fb38dfc4f5601b2520df6c277657939e7d03e0b5862f327b48c072a64b99a41d703dfeae41fd833cc617861d1855c309d76e5834915b87efb0f86becee399f3f8c7a8dfc01a1d62284a54eece9413b6b6d4c392cbb44cc3f2596cc6555fc349b50ec0201f0cfe8a4f96cf3d5d1dea005e2c73f3e7eb85f148aea3395a634421025274a23d7de7cb73857517127ccaf310bd90bf3d64c028a2bf37eaab9832d248919114173344d789efd67bae89769e0c0cee047fe250e1ee6cff4892fbf690142149bf18e445beb431ad34798433e5b
+Entropy.3 = 2a5a13ed0e320e894edef847fe8a83581e147701b7b98aaa2ee76b4d2a66399a
+Nonce.3 = a93eb301506d1ae415ea92e1eb870cde
+AdditionalInputA.3 = 863ea314f0d52544140d82cc8bc615b223edebc7d130fd805e9a32ca7089e7c6
+AdditionalInputB.3 = f5d33b1506afe6f7701370ca34572930c21c465608b443db98594f7f0f44b8d0
+Output.3 = f16d6ed1993b88e5c9809cec08a3b67a8237eac65f5b10e8e80aa764684eaba31190bc222d4f5ba4c5e207b03d758389a98b6a74b74cfecac38218b685f5ccf449f718c527b10ac19591ec74f41096d8a65e5ed6588a8b54c6f942a8c3074d1efae44085b79ef96d9837f1e4ead7a8b02e95061419f948532921384320478d2b75d00da24605d73613b2c5ca2431039d2e6ac74f13ed043f6607ba0366adbb97009178c991d3e66a58cbe5ac5388c55a5de3b1a4fc5739261f6e9a50c4f764c29e08bc2ae0ac4333a97992b4295da0d06222ad86eab0890949453befc3abf103565af6739a1536828bca6332b8935c6688022658ef6c628bdeac85c3fe4f8d98
+Entropy.4 = d91b0846115fd4cffd0881fba7fad9dc43aaedac2c585ffcf928f4f95ae5ac95
+Nonce.4 = 0c21ffdb57b959c4561abfc4960f4383
+AdditionalInputA.4 = ee0d67f52101e279d4647bffab48e16135f0c045c2d8792833b262cf33c921a2
+AdditionalInputB.4 = 7b2f1ae4964d4b8985cf4a19a0dc3d4d9bd83f0c988106ff677fa749bd6aca98
+Output.4 = 258b3d74bb8099a26a1393588d079dea4df8038a0341027a396727078273c86e0c3a6b264e4ec09bcd5315d804d7d4bd4e6a9d1540e82aa3b237e3913c10ce9066a66c21c80be364c8f5c5df996ca6d2d822f971fdf8a02a5f3a511e764ace059c48a7cc45bca9cb93305597efff3ba485386fd6aa4e2a593b25dd0bb2ddf94b75cf3606ca44edb3ec8d1e8580c9e6905a6923f50adad3af11b8ed945ae47f2ee59a74e6b9f961fd582e9f03d96b93a431f548779aeebf9dd886f9167b84bf61097a3690742660f859c989b4835d64eb20b2705d88fb26821459c0be38ddcfa2964ee44b592435c603a5775d2a02726565e91857f589d30c9b9824ade79e4df1
+Entropy.5 = c42c2ecf33e841570312797edf38a80519e41a3d557b1c1fed2039a659f30c09
+Nonce.5 = 778ca5eee535abc320483166185411e5
+AdditionalInputA.5 = 9f27710982765d669372be5e3950fca2a8681dd740bb6bf89c1c2c4f18e1cd65
+AdditionalInputB.5 = c6bb4c83edb4b67855bbc521664fe9af92393f8007831707cba859613bc9c29c
+Output.5 = e5f2dc1f6c1fc80672808f85af646a59afba470467e79a112e33259e8f30acf7c1a271ccf56bdbbd13ad76d0c5c9cdf1cc6cd7e5d648db95a7fd2d49293c775f5129efd2e71bda8c257afa6990b6f2865639dfdea1293233f93eb5d4326c3395d3b847302a7e08c862ffd322829989d3a64e292afee8f43d4dd87364246b0f3965289c0df2ea15c0aeeef51e7c0f9192d360ff3a4496b1aca2d802f9dde94972c457b365b19b2aff75316b8ad6516458e323cc618cfafdbaa4c390f11418bb8db5f805cbfae13de6ab43d1d00023ab84c533f65005ccb57b2a40fe118571ecf936e5445050338bd795b5ebead38a747ba08d730268e52adccffe919e9fa4950b
+Entropy.6 = 5b44d5c2c03f6c69c74b8669a029e776c62bef95ba8479aab2a85cc3f56d38cb
+Nonce.6 = 1ad75070506235f9f81b32c7ea8fbcaa
+AdditionalInputA.6 = 5e6ff7c4eb4ac0d178ae84228985e43b38fbe84d683c8991816fe170bb5ea731
+AdditionalInputB.6 = 75bbb6d7e2607e9b26a39457ec3fdbc11177ebcb8c747a68e989125254387eb8
+Output.6 = f2261ea0627e122c8363213d7b324811299decf7f9cef5c4fa513468549b0b41f0eb3bd6ccb669d05a455892b62ed2b07c32c0067dd9664a2363a3f827e597d5e2fef658c7610045c545715f0541ecdb31d1fe1dbe9464da63b297f7bc38bc5216b3d40c43c9fa9f3eed5b7a9f1407c1036b1e9629ceb14a661f0f1ca23b8d304aead80a4002f981fc04aeba46db169726da0e632436501eca10dfbc227362bb72b65bba7ce66c049234841e775245aec3087083090031d0c9a755d2681be65b72058a0a84bc1ef6166ae8abcba46f5b15de6e4d51ce54fd0ff472899ca64c65da4df0430155685445cd672d2079ae76efdf4f55f793190138192e1af930e168
+Entropy.7 = c46b390564cb8d4821bd54013891281e8787e380230c771919fe80a525c521f6
+Nonce.7 = ebf67220adacc3bc9d1d8444a65fd67c
+AdditionalInputA.7 = 5f27e929d41a335838cece0e3a1973769a11a9dfd7761eca8141916e8f012838
+AdditionalInputB.7 = 1e52ddf999ba1d43f7daed52823f755cc48d87955ae840ef90bc1459028b2b0d
+Output.7 = 1d589251084c8d632a06094499724d4dd52da77710687e4fde9df4c000450b93ac103647a33f0afce8d1fd806a3eddb2e6bb0ee5e1f4a9f20712fd91d7353c6a0547beafa32f9ee05f9c0e30444820d40cf8fe052ef519cd54826af48c31f2a0f8e45fad4e9817e5fc6768683703284f22ebbd81a10df3ab05db51fac38a5134e54db214af9d7d97aad341932663212e1c245719dfcf476c1162ecdac8dc719ea2df89a8ce06757c6c3e9b38cafb937ef46d9f7c5511bdd028e433f1c95d662bdb687d0e9d89ea5ad44ed87675d69fa6e103e18d80d7f41027064e7ff7ea81d50b1289e8b25c4cbee96d142eb3157d377fa84949175ccdb6320ef6c497b03433
+Entropy.8 = d26fb0a704ccce9b7ccbd4bbf56c946fe2d8ead56b412e46f036f3b0d8e5bd2b
+Nonce.8 = 81e8cac75364fdce2ebc10c28fb2bbe0
+AdditionalInputA.8 = f58379ca72fdf2fb310f652c063f718fcb66f62bc71a0d071c57907efa8506a9
+AdditionalInputB.8 = 942fa8f536ad10f5f9c58e71ad44a305ea1051833dce8c28121bf0f3c5fe4766
+Output.8 = 3ca0967e168df1203d05514913005a006dd41301aa89b23c281c8aea7f7d77ea8d2a6723114a75d5f085e892a0556b587c413675726f2ea37eb74e804e21760c318d34cf18dc7d376da4f107ed5bebb81f5d18f29b0a3bbf19a1305f0600fb21a788fd9032352da9a90b468e62101441fcf09950508d4179ebff9b718935d15763d33ada17a7405feaf00fba9dda9a04ddf866bb29ba45ca5900415df498356951664ed95c26b9eaabcc663439c8255685bfa69aed876147173cc74c49892eaafffd64ab62a96b4068496ca70df27ad303bf2df1a453ababb8a85e1c59350c548e4d027ea7e44970f093a5925b69c1c314064a7d6d7cd5dbc47fcfa6466522f7
+Entropy.9 = 2c31f479f22839208f36d431108a955e57a9049c2f1cc9b4b8e34419c2149b4f
+Nonce.9 = e52b789d5f955da837c9e36bc45065f9
+AdditionalInputA.9 = 4e1575b893681ee7be72f7f2cc185083041d2112d44d2127349dde3951931486
+AdditionalInputB.9 = b8406079d48af21e3624037296e99e32cc4954901bb66ff9ccf5c2add9dfa0ab
+Output.9 = a8df35a2a10fe5de68fdd266820ec3d23cc92bc57d1877c85ff0abaaf2cb8a5cf280b35774890fe4be2d252413e1543e03eb8eb8c6d999faba860d82e7235e5d8bdf248a679ca52f73feefd361bdbe7eb7ae7a48a11f5ad0b6c9672e4454f00e19af4811c9de56ca36c19a20ed71d40433bf09f1c19f196a392db1a096e660131dd3eb795346cf92af3936f1a882a61ae2b593d15d7b7db52d319159f51becbbfae305d5b73d81830cb783b4e57f16ee08eac9f1fb2746e052d1d00edf95dc8eacec7085fa8f3d8bd2ebfca2cdb024a6df0c4e629e23dfa4a317752e38640ca0158f9de9808b9a4e79e6941f0c4f7400be8268a826f45d3c64ba4ce255154a3a
+Entropy.10 = 06d347e4ecd8d4a244f3dd204f37304efbd673ac87b5df480d3b84d6583d1f40
+Nonce.10 = 3c57ef63b91a147882c513165b58df0b
+AdditionalInputA.10 = f9801c6dc3132039c76e41f7c17ea6ae0cfd076c41cf2107aaed63ba5cab1daa
+AdditionalInputB.10 = a2542fc0bf60d6fcf4cb14dee691c31d08727e59a943baad07c8e54328e77130
+Output.10 = 7a40fd8342fcd0cf2f4b16199a7f2031c5900908d1141b5e781b73aef8519be8f349a885bfcbfaecf89efc1f3f38384d2f848f83216c737aa5430422b4c5845541bbb4f44fd49071281ab1d2e8ead68b3296bb98f1d3f856d3426418e2bb58db45a508c08590ba488ac3344fb6e743fff24a0ef2d26711c35828d36ba20399c4f24b751a097caad1a73d208550c82a5d86a03688b69260de29b8af55f6976200e5080f8bff0c304ae548bbc090734e6233314090877cfa77d83dedc4310026dc9873d68f3ad20a0069fdf5347b2eee28288a45334fe291b7cb85bbf7c1a49cd591a235f6af94da5030706fc64ebe1b7f9f019abe16db5bcf3a0630850dad9c33
+Entropy.11 = e7317a5ee429719881273b0caa026ea3e36e689761ee5f5a304b5f691f3f99f7
+Nonce.11 = 94553e3cbb2429e404dbf95eee05ae72
+AdditionalInputA.11 = 28be12f035d008945a2342fceb12afbff2b3f321812942bd8b5fd8e0ed025383
+AdditionalInputB.11 = cbe3732ff6724c380ff6aa306b90920b3bb4f84b5453242463c2bd5412ac23c1
+Output.11 = cda5202b1ee1a3e5738eaf29491877e4e37066c2a5288de563dfa00ff7affd15940079a223fc61a798aeecb310e4ae54192eea434eee30d3208485c7b7834e8c60da3f1ff5ddff6f67a24c01aa6598f92a0d929fd762b7c0299e6809e882a9f151b52fa33b54ecedd0513ec2806ca970406de7ff930e404e152ff49f22afe048fb6a65f85ea8e5f4d03b5487434d07898158c6259902fe120f2d94cb4e91ae2020816c09e01347717cc7b193c2c9e4b022593028c4df2f64bd9fb39edaaaec196815ae602820615b1df64586c2a7744a03c8b63fdd0ae7daa7b34c3e6478406ea865ebaab7fac2b7471b28e87b06056066e04f559fa1d8a6b472c75f21c6afb5
+Entropy.12 = f2ce8fc5f39743a3a9c2723c45822bab8d80e7c277334aa589fff6366539ba34
+Nonce.12 = 68b58d159dddb8f5d25f930100d9374e
+AdditionalInputA.12 = 762dc9151bd37f578e8f2b857ad97c9d44be221feaf52f08313134015d2a9b99
+AdditionalInputB.12 = 91c0c1061855095040eb2f6555d233e881817632f9ae1e2642981e53c84dfe91
+Output.12 = 86e780bc56ca72f763ac2edf6e6811891bfe402aefbb78e36c6d1c839cf7148eecf1ebf27418fbaaa1548e1342d61989a15a407ee9ace8c8f93e359cfa1a5cb169dcf076d42ebc459339b07e0e8374380bc29d82c4b02030c16e11f178f8030e06d68622c5077ec600a3d83b1e212aa60d46ed6af8874ef03dbfa2323a6a094874966f1490e0f6985bc6121ac01d99f68fe3558dbfb919745b87d542f4036799b78e9138a868608d1668fb0ab30c38e82b719317f200e8604cd2e014f9b67f49989096021070d7efbb08745d2f644bb0644fc02bd8651e8422d1da6651b3a32df941a4fcb29eeecf6ca7e07d0aa4a54977920634ed5ff82d23356cf42ee57ff8
+Entropy.13 = 5ae114a0b760c9798c0cbd1863597d38a3c5633c5cfc9bf64d5343b446ff4d77
+Nonce.13 = 892341e2a2d86c05c9c677740aa774c7
+AdditionalInputA.13 = 8ab7a59f791a24461ed7208a9513bb5c8a654331dc7f1640b778ef8176df620f
+AdditionalInputB.13 = 98dd2251ccc48cea44ebc50de3332cad730be6ed25374354a7f3ac416c98b7df
+Output.13 = 6d1c77a4b3ca219cf417af21e3d6d0478cca7c4ba71d32f5c8e791157f8877fb6d3e5768acc27c01a44fd1b5058624d20b838651f0592a671afbb3ec346acabc57dd78cdbcd172a01f09589075d1accafe0a1a508125727eb930392928738759b3ca8d5f3392049ce5dc2ac9fe991195501b3d5dd710889a2ab1a24e43c0732493b307b74e13b7a6ae6ec9b6878c1eaa27e30845d305fea656f66839eb41d387ae413345255eb0e87926b35212c590db261cc0f6a676fc8a2cd8a960a389b125628192d697a3908c4ac0fa726dc0bdba6214c283ffb161b2ffa925e23f5aab9afcdb509f8412dcf1b5d19bb23360bc5baf1eaacf1f6994eb936773c776b18a62
+Entropy.14 = 8ce8f693d5fe76ead823907734ddafecf34717982aba9e52c333e548aba009cb
+Nonce.14 = fe318ec6a24311ec2cab608a7e6da78c
+AdditionalInputA.14 = 48e994654ab1d109511a3b34f5fa9f12b8da17da510d7a71e3839ba86b493ba7
+AdditionalInputB.14 = 949ee0617b277a3ddf4a51343104704775d91797be1826d78051496a87d9113d
+Output.14 = c4bce916b00a8583ebe1e85feaa1f076315ec9433e18afa1252061a62fc7558491678cb31048e4b4551b697e8dcb58dff951337f0fb7a41546d9a7838a1da149cb44558d324eab9e7ae147e8ead666e3d4eabc9978626efc8710ba8b5eb485d5693e5d6cac36ddd3a1a878ffbc77e9ec5d333cdae2b5803dcbba70d4e0dc60366dae5cf25990f3ae6147c99ec6c998397a1ac02b1b6ef6867aa897ca90b7fb938e3ddeef57e40897a644a4f08e37c995210e00f07145d5b3620ce673072525f9f74adf79ad703c4a09adc6eadcf77e76c6b032270d4c68f01672decf9aa0e941086188304fc33a28f53bf121df747b7dfdc00ddfe68f6d06ab7e82295f70652e
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = c07c9e1d2a0f0b5dc0b4e9a0cd47caba5d2669e393656d3bbb8830e3a1d456f6
+Nonce.0 = c925484deeb0c02e1ec7a38ef5e36794
+PersonalisationString.0 = 6252125662bf914498ec710dd31f0605278245e955e9533099ea9afb0ad6ef63
+Output.0 = ea3ee991336bf6581121965ff6a6283014f5c523d1dee5dc80e2721eb83a45b987d3a8abfa55ee72ed6cc2068588a6b8caf25fec88ab5f85ac642ba24e8414ca1e707e3d10f7908b186a82db2b68ce58fb47b670730bad51f8680d59e179f032de3a0f79723b933673264098fb1ec8f3793eceec7131cdd562898fa091571df4cd5e32026e7889fc8b659e90eab98baa2cb43096c352e58066ab913f05e728136a83d24e76b41c21ab6822c4ca4c04e14733a1dfd2b71a270b528346315609139005194b7f3d07bf28108af97f09fb374a57bb9aa7680cb9e78e2160c972e938ffcbabf12b971011ab7c1a91703d3c1c394463d907545c82623a3ae1d2af3667
+Entropy.1 = ef6b4f56c5db9f685e6ec380c464a4dbb95cf606f084586c58672b15d053d64a
+Nonce.1 = e16ff3c7a87dcefd6e10de7911ca6ed9
+PersonalisationString.1 = 50802dacbd92284106b984a2e396fe6bb812d99854e400089aa90cd5f144269c
+Output.1 = 879ebdba3b1b84207f6fec1a1634ca18367ceb5965f19e27e5ff68560a37604b9735adfc9afefe54a5fa2dad2518256d3c1df4df770f674bb7344b10930d1216af13a34605177f083b4e33709681def353db5af5a299736697222ce8b642e11c745ae8f0cd1b76f4ef769982defc93c1c70ca94ceb83f8886859ead2f726e3fe2f4bca26af14cc7709143c45a6a5b958d91660ff8963fe17ef2a8a9de834021298368291e2a84be1ab767b360d2c949a97261d69886d6ab0722f45c95598cf3080cd1c80afefdcc671cdc5ddc447342226f17579b49811bc247be11aabf9cf7ebb3c792ba2ea78bc0a790bd100389acdc0b4fcbdc207a90397ff3cc1797ba3c2
+Entropy.2 = dda85b63923ad8ce2bcb0b4b6b3a84a214b9002bb495c1ff8dd0c827e7a7666b
+Nonce.2 = 5a8694dcc941d12b4d493c19cd570de9
+PersonalisationString.2 = 2216173dfb01b06b657de3436d0664a388f808b60756149be8abdceee6f4cf2e
+Output.2 = 9207bef177758af5c15d7d3966830b6ef24b4637b6add27942c6d424e2ea88f019c0461248d2617b9465a83b05dd41d7068a7a504c8db20ba0764e06b94b90c6bffa114fc60edd4800d5f58c423da2e50bf5da0726d33c26003711f12a7b0d6aed1011352a959d4bde66ab19102a18afd0a5fcfb609842592b91b00a287671d86779d53dc68e1d9cf60377319e338d3f55825b46bb5b7b98bd463ca8f15d2aca6085f213a51fb35d5dca650a27b4063089a354e6aa2e56898d638c2e344a3a0b4127a231236d2007a79e0020751f2b8a39319b98ec17b6c15a4223af59ea5c476f963fbf5169cbad65bb871819061df647a304fa3455efb7cb628c2dc208c208
+Entropy.3 = dd3ad19720c1d6c4879fa48ae23714bca5a1d66c0954931869185b48dbce099f
+Nonce.3 = 48c5d647187ef550d19146ee9cb698f3
+PersonalisationString.3 = 18f7902106c00d137e6b15a4bed0b4accfe6646128ee8823ac669e24179303df
+Output.3 = 98f4bf7e10872da726b3f51faeb78e7526dca37fb55a83b50b774e6104e451cbf7f369bc34373bc13812bbe7d85e0c1237ddd0d88894cc93610d9511b8c703aa337cb32a2a36f876cc262e2952fe9428b92c387705b6a0461e8b5c7674a69d6bc60db0566bf269c989ca014edf9e9a4b03179506cca38808f3f7cfadb64f3e803c343a86285fa12038acae76447185fd501d5a2e6d28fa115dee82b51dee3f3fbfe25e773d251a020f563aec137c70039b2fb19280dd6af9ff02b637bcbcd9e797f26106906f9592538f4c2a9dcd48f1ecb38f7c2ae448f21170ed80535ba1a8f54d75e4d716a848a27d49fd046862dda79f1988ba90e3ddf6b5986ff969488e
+Entropy.4 = 5e2d0af8be964d1a61be969defc7f60a06814b957be5cd8ca15664f497794b71
+Nonce.4 = 2eae930008a2aabe1f198c85b8a8d6c0
+PersonalisationString.4 = 1199ca7cdaf509f81d91ffb82fde7c046ac4656d3b5dd0cf1074fb5038347e49
+Output.4 = 88daeabbe4e2a2569535426d288b9ccbad2cd69560575ab7a41059f59f8cfcfbcd0e2014407cdb6704b017778d5212cb1ce4e32d644c3b41202013f56853be5339df4213982c4af9ecf7159354277e03618b7e43d1f0598e8989820d523f656bf1fb337b50c983c90b05f87f4f758f0f087bc6699332efc4674661362f6a503374016808ad6f40497e4bb0e114d42015725d9b19f864fc3c5c5c0ec00b8053a578538da3e137c0b4be7bf851f106e2d95fcdd7ebcb1375ad3c73c9873e70081f699adaf7d84ab7030e3b223170c051b8483f23159e98ec9220e84c0077dd6953d407dfb1e3748b3eed11e50ca7a39f89a003ebf69e803ee20d60a6ac192195d4
+Entropy.5 = 92ca3d101093735e51f6fd573831b25999b1a5ce1c097e4f77f4aafa6b4c80fe
+Nonce.5 = d72dbca1fee829ae441d39da0465e172
+PersonalisationString.5 = 22e63e6682ce40e6680f2cc9d7a9ad1a596fc6415cf064e928bb1ab72df2db0d
+Output.5 = a5e34c0e957adb585c30195b1273b68d4cec0b345ed1bf59411733fc384d62d47ee2eede9fcd4e62781b7c2a03d5edc49d2d199f20a0942f26d97426e5c689bf7b6b81332ff8b4f9ec595e604a49c5752761c97b3d592ac04701c561a580460ff11351cb885c34834bc46d0584ff4fa9b449fbd9d03600dc1bd622c4e4940bb6a64f4ac7e71e8c23d52e1c348eff5b9b7f8b8f1b95682e53e8972238273956723dca7ba68e0e680d756d6acb4dab55d8a11e3c5b4c79d4b34905ab22c43c83dca629d84a14bb5bdaf18578b24d7c82b4661b4b17e77f733c9adbf798fbae707e7b73c812a60833d9c95d974e396cba4272f1310f6dc0ac1bf5d5a823f000d533
+Entropy.6 = e1d4f840d1a01cf5e3baf6eb6aab35c639f60571275f1c115eecad9ec2758f8b
+Nonce.6 = f5c70fdd75c0aafbf443d897d31f181b
+PersonalisationString.6 = 1a4cc8a65d133ed5e0548f770277d0e3eadfff3c24f09e00f15f1f0ccee00d4f
+Output.6 = a194fa818179426cbd54eb333c2517054cdf917529d3a9e589f27dcdf99fe3c342b95f4f79806c236f786a38bbe110a8693563ab67ba6568b45e309a6d245b1f87ae2d48ab1d3ea36cae52eac12b44f4680f2d611ce9c72f56663fd1e36fe45aeaee8d4e996c1f7d38aaebb0b531e2d663108994ba31a2ce149d5a32452377e05dc4a413df8dfb10b3595df855e0e07c2a347331e871c0b00139bd0a2ecd715a4a5a4e85239f466c779d96f44de09142bc40f3a48390f9606d65386a214d99932b0ed3be2af18bb0de0d05e8a875334e62291ae6c0b91f39fc1586dded2d2fb318f2d26d843332218798faefe3e9e3425502efdf010d1dcbd32f6343f3c85f1b
+Entropy.7 = 53f51d0b68808fb3624fa264a1fd9256f59c248dbd04f90e516638f95f91f58a
+Nonce.7 = 67fe6aaf8f40159e194a0cff0162ded0
+PersonalisationString.7 = 6aa803389ba0af55905fd1873fffc6c9453034a363dba07bee0cae6f73254fec
+Output.7 = 912f5656584c52f95a4a503e26c23b99fe2dd4b96fb03e8d86b29d780bb55a0086b3a77a67ab163c56abde4ceb6a68c4b06eba82371f587ed043739e12cd6e722a6d73d01495ed89e35dddc2b794ae7155179c609dc4f9a7edefcb4c92e1025aff94a9d24b7d84d70139051a5c1e6ecf2db9da2f6bbdfdcf613dc98f9008d444e5cb59b17dfa7caca4621568f897f77c77a5d85eb4f60465cf8f58cf5d37ffbab4d6b1a56136ad14543e015ff7a225bacf8781525e96c3e31b8da29c6805572620feef74b20360764fbbdd06233f1a94905c378c66ce86066c12cb92f8375fbf14f4fb205de70ef7ed38b28932fe186bc10f6dda1c73c20e18718bc6b59b39f5
+Entropy.8 = 47369855076e8388e990cc50d9eabaccebb582e6c369a99b6060424fcc23494a
+Nonce.8 = afc19984384c07a8fcb59c8e63ba97e5
+PersonalisationString.8 = 088a77b7655f59f2dba8fbb3aed15499e13342d66c7b0655cfb1b1395c725b44
+Output.8 = 6f084fc8c0b936aaf49e1a98f3a96846735895ba71b246a837516b6c678b5f6a8b9a091fc6bab3307f428e97eaab850e5cd014e7fc356e2af6c8d673fa58c1bd201fd8be3f38759d109bd06d6452786d230700ceaccee38fb0de9dd05a5f9d0a64dc447ba63f92d93c58464f5a14026c4e2d83d8af8da039839552dac49fe50ca95fb38ef1dffd8ae4c1ba5640621c087118f8d71d69cca33cbcb58742a16eb90bdfa51238877e55bcdb018cba252e26f222272a6c267c28be26db945fb4f0cda1c0b4ca281fa2a85b2625504609fe86005b9e71237bf50c31cedf9e13ef022d6b348873d9f5eb3cb9a980e063d76c9e1baab412eafe3f6980e560fe6d8efcf8
+Entropy.9 = 9770de601e4657b3746637e5599a79f4ba210bb03d8805fba3fa1f2f26737592
+Nonce.9 = 148dc9db3e1e58a31fc21e596dec2324
+PersonalisationString.9 = 5bffe17060a51fe205385ac70c9634873cee14fef7ce2fa8970f7e9ffba450f8
+Output.9 = 30339e731f1f4fc03c326affccc77c23678f6ddfda53b944d9ccf8429b4ff06b36f77e5e0fc378d083c9381e8de0a24285aa3b17dfe2ce7f3fe591afdc0e9a91e9a90f69566d104bac8086781e543487f652d77f836462b01a3c5f1e8208ec43f6f7aa78bced28b9de9b1de36a468630966c0762e31f6fb8b0d07a86210ec395aac19c5a4f3661c9f7de171106f656f705ef14e7f30d3bce37335ad53093f5dfc1971c39a0fece8259800d1b022de76cf250bf5d2a22ff62227a8a4176f9c8308bfae7fa68c1fbe7b2027254c39a161ba4280e38785f664afeaa3ab2df3c99c28939378c1864282715d16335c8e75a085d7f389aeda6c26c331683fce2d01ace
+Entropy.10 = 381ec64f6818df09b9295dae3adabcd409e6302d5434f15f37ec9e5223f08a05
+Nonce.10 = deabba7b30c167c6e6876b63983163a9
+PersonalisationString.10 = 698f68deb716fa4258dfa3869119bfa258b0645f9742bcc362988251276659fc
+Output.10 = 3533a7cf3cc1aa7b16ce6be85d863b65734649b6668fd63dcbfa92a320af14b6f2bd01008e6a7a2232f36b4891a566723d63c4915ecc00915c96b0f50bc999d3ad4783b8e3d6157b5204d46b2d709479a2c5059ff8e78cc156fa8b57cd51ecde4551263397bf097a3d659bd257c9b1b3ace8d062007ef7595b2a25104aa50aeaa870714b47174e4553af3ae88be087e821bcf44ea0770cc8591a115f47d89a712fcc6707380c48a5b121c15cae84acff7adcf5fbc1d9abd47eade80e6eee46246a28b5da9ff4521ddfc1cb6b34d1ab4ee79fa18eba29a1bc7c10bde98653e732918b6176ad764f3ea31543240beb406c473f1e60f6b20ab383be850ddf581cab
+Entropy.11 = 93c686ac3e6a7d9a4b70fa7152354f3eab1641bc3afa7b4fe4629d94613d359d
+Nonce.11 = 2c0b9cfc3c188fd6e16721ab5186626b
+PersonalisationString.11 = 86602b7ab3e2c375c39eb6419b3e43463ac13824ca92f138f8d4f774f81a93e8
+Output.11 = 47abfa2d8ae584ef51c493c4f852c9d198b64a6ab238ad10fad1ae468d4b79fdbd5f37b217e91992dfef34ecc1198218ab9d7cfdcafa7fd53aec3bf4c04be52f43d660805f559ac5d9a6b7a27fa6a9799bdc7a00adb6617816060691391070f102c134d0fd1687148413efd2d4215ea5e2fa18d270fba542069634f2255713466a4086c09318043934a884ee2a1dfea4a77017883402a222d5ac3bd4dbfefa1131cab7f2590d339e848065a82f6a3cb366cfa0d6a8582cf99d32e89473cf7a7d2db63e964e48557a1210499beddd73073028cabddf737a8ab9b7ea17f4ed7bfb94c80f03f5f0e5ea64f4b59eb4b3dfa0fc1701c3a2fa7e588b0d4e9586560256
+Entropy.12 = 3aeefe3b75307aff285d3fe8907f123a9fbb748232a11ef6bda3c12c86f20228
+Nonce.12 = 98de460f9c004152bf9920414759fc2f
+PersonalisationString.12 = e3c7a127cfd509cd8944f762c5991d9de53c7e37673f2208486c3bbf8ab50b98
+Output.12 = 10b72d019296b20db00cc383abdbaa2b69bb4cf3296c4fbf82fdcea190d09115455cbc79bc2a373dc04fa52758fd21e1012e86f4b4ff6ccad0dfa1e5a27b619e62fece2eb9b6e65c5aa5fe22867304d46971a6365e33f60821cbec79546010433c7771e911a15c2726ad039680011bba5b6779bf107b98c596e4acc36de55e8db936e512318c051950c60f1ff4273bae501b2b325f375c3ec10a4f0d076e6be9a146851e661465692170037b01c49d17ee9c8e42545c5d6ab58ba1fa2c7322e735bf70c1c8266673e8dad1cca8e6cfa1e601be95917184677b7534dfd2c6f1640821cc675794b29fcc71df517cee4ae6efe95d2fd866939aca4400ea374a8acd
+Entropy.13 = bee32aca74973a8b63b36cd8ac04a68f36484202c6249ba92cd33a1379ee2e6c
+Nonce.13 = a5d175205ef0278c9df481f882d482ad
+PersonalisationString.13 = ac5f8a3e150849a818d0170bcc772e0397b7c70cca37a466fb774bca78e4d708
+Output.13 = 22104a4798cdec3742e654aaca8122f69437867fad058e34e840bf94d460b61e2d7aeb653ce8c8723c00df1b4f77eff3a70345c1a2b3fd601075667b5cddeec75bdea28a5066833f40b50d7350b12a5cd93afcf19b353d06083acdd05f8c8b64542c3ab2b4ae1283df7fcdf747d3b0bbb3ec3345a0f8fcd156692a4a2e6d887c8f3da7289282865f4d75e0ac46cf06b4a93fc0f7ef19aab22290104095cc1f94b03688c7b3712491b9ab2990c204120a22e6b08e1bcb3ea7550262fca5bebf28b4e062e62085ca87f96d259fc17da8cc0f30236265668e2590a68e8028417e4ba0edc1622a6f1b4d8bdf9519aab87beb2f89888e8b3bd6a0d42107653a69427f
+Entropy.14 = cba112f4a75eb3dadb31a728f3ea66ee4671e971a313e6516ab3b3890f7432de
+Nonce.14 = 70916df78dd9ea799230435b3e48686b
+PersonalisationString.14 = bf755696adb9c92839798798f836b063cbbe987f0163ef3f4a97222c888f5da0
+Output.14 = 411cd8e76e711447e8a93ca95aa3aac5e51f559d65a8385a15e71877ac8472a347d9d453bd6761655711ce2133900d28e41cfd1292d28848646e5cbdcac1e60e49e62aab169b1735e701e38d65ccc073f277972ca85444dea86c19c0c08317dbbeca4fbd5d4295c9da71b89623d0028cebf1ab68fd0aef5b37e76e2e0b3e7f72eee04c01b6afb180b1fa0c370975526b788ec4db076a16a798671451af3e20d323684e232a25d78aaa8ee43f734f1555bf0a324053c7c895dc3e098621e189962a914f486cd7a5ff330f39316afb762b1a06cf8b593ca00d7edf739e2e6827a7af662f33bb09fad09d6bdb3a565f2bd32512c79927d390c79a1cc6db968b13a0
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 09bc3030be920435cf5d5c813fb250be9ac32872c83d9635ddcc3829137d1d9a
+Nonce.0 = 43e577bbdc084d4d0332c31104eb2e4b
+PersonalisationString.0 = 39f8de35161a2509a4077cf9f92eb653603820db6fa86491553caeeb9ad46cff
+AdditionalInputA.0 = 3d97fd3f3bc27d2806a441e0c300f36e04542a4b9c3464211767670eba8f970b
+AdditionalInputB.0 = bbb65df791d2100a6b81b35f23c27c1ed374de5cf6157ce9bad2834d2a757c63
+Output.0 = 9d5ed4dff9962d280c18eb649964c960c897ca199802c9186245f987aea97d9a62312ea5d8f6a676f6c72febdee232257bc2bd40075af935d7dc62d988c8c03f6d276b1e8b74496188ee823cd44bad8bb087df4cb7c90b94b93440bf5dccbd111937221698c14693d2a1236513df271140bcf8af22b5884e3d116847c63dce9101e27603d48f8d94421b92aa38547d12fd7aa490267dbbb7ca142ab392f4f0a59553ba95ba1c370c2a55af5d63cfce6bb6182945eaafc5376c117b06e99a4f1ecc36a0a8682d66e9eadffc1567b758eec1b4e3bded982c097aef4fb5799cc659a2623ffc8fb69f5258083d42324344e61509aa29cea48cc3c3e1449b01cf7732
+Entropy.1 = 9e32ec1406569294f80b9275618cd8f1641de6932f08a2fc1f588837b29e5539
+Nonce.1 = d3e09213361f2de58201c70bb9000393
+PersonalisationString.1 = 7e680eaacf7fcde39a8b1bc7aa29361421aae124d9d365d383c23f6459611e31
+AdditionalInputA.1 = ae26bc465e1dc217c246cce54860a7c0fdf3c092a5b1227dc07a0cc3bd5352af
+AdditionalInputB.1 = 345813c8c9d9a637758d5fbe6bd1f945bc3e01ea5997f7bc410032f5395c3350
+Output.1 = 391db05a30b47cbd122dad7f1576f5e71702558c3a14ff6ea33f063aa5e5c1e55ba02b305efe824f39c429d2b310a21ecc13db90d42b1120077ad74e461f9ed1fbb8bbdd832ed2edc380d33f0d67fca9d9c08f8e75acdc719c188cf17c97338625f6ec4c6a9f81883b97dba36a3c8db5e7f9e69011a4d7df4ef058e6290c1eefa85fd6cf5da5ec55510c0d7eafc59342f96398312167a2efeb22d939d9a96c6cf4e447d3b3f44f9f588898920f2dd6e6a11159d9bc72a65292a36efdf3ea335ae4694bc7aba3b3253eed13c68a75a086c8de9994de7ffe46148e2b0de52b2dc9a6d17867c5094a7e199ca013c7b20238bc4a73d65fa0919d97bb4311e4827044
+Entropy.2 = 255e4f602cec552c3cca5a77b2b9ab5a4f1858976672e0c42913bb8eb5ff9d2d
+Nonce.2 = 8fb76bd15999e595a8ca37f3bfc0971d
+PersonalisationString.2 = 5634cb5aaa4fc6d629c021d462e22c4a133ae0388e55bfd51f4fb35f0039a16c
+AdditionalInputA.2 = 6135184538e4f3efbb2659fbed7fe6241d833246e728885f4b6e06fbdcbdeb6d
+AdditionalInputB.2 = b27267fe8849ad2f38b36b574ff6d8c1e6600afb235f48f2446edbe7fecd5ad4
+Output.2 = d765e96a0053ee69e94e0b8bdaa65871d30bf96e8c11c17c4a08f674a3b1a462466e4a3d08293ee32b3510ec42aecdcf7a15ded002b87c08ecf106eb47f09b79b4ba2fd6bf948dc76c798f8dd6a6226e4e4eb4c55ee0a1b12f66ea560fe3e3a25ac3e5d782ec404d78bc9cdab96e73740ff2eb7f91e4958c201735494bce023cd1dab31974fd2da6a4d24bd3e2e58bcb90f1461d8616a0df29622badd3c89b382ad2fccf2f5380552576ebc51948dd0431816754c4609cd4eadb8466a90bcb293600ae02c757362ca599aa2d5b72211473aac8239f1f7ca0f7df65f9264c61b55c85254fa59245f07457a01e06176a76e1fc71b573bf6bbe04a6b4974ad2c481
+Entropy.3 = f973a121c32528fa8053ddc12e6e969c954c31b21a8cecbd98936f26b49953ad
+Nonce.3 = bf4b3f608fcc13fa4005a1e3dd822b91
+PersonalisationString.3 = cc223ac448b9819fc6decbb791f022630d7be3c78e41d14bfc6f37ff7f551a1c
+AdditionalInputA.3 = 5137cbb31accda1fd665e3f9c41d7d37c98e9c128b7a1e0c894372f6c4a830cf
+AdditionalInputB.3 = bbda84bd4e6d5d19a938ee2e61cc25cfce6fc632cec2674be6fd580813bd97c1
+Output.3 = 459adc32bd38efa3ad29f39cc97b5c35671b438ad918a4686818f0ebf4ba01225fdea29125fce08afddee97f334059a668af68469a157964ba78a97cba8afdb15c0c02aa2fba76e8aa92f64f72d1d18be67d81db84a6a2b8e16a11c07b72b6ba704e3711b3ae74f2aed13f72b007447f15a5484dfb261af20cf5d53d457f36b9baafd19e2c26b91f859f5d4ca3ed50a8e5d44cf02a3b5b88e272ae080cd852fbe2be2100e8eeca91fe3eaef95e8ee74a9a42817d10cc13c4480cba442b3359f62360882332a36dda3232208ab9cd5db2e24840e82ea2271fede6104d4cd37a657e0f133e75a6ef95902a3633790c86beddcbcc41a57e7fb147a3d81663714831
+Entropy.4 = 41fed837e359fb197cc7765df0042ac380b52af7c764ec741963e00820531b49
+Nonce.4 = 3ed63900705b09cd983e37095b5d0a19
+PersonalisationString.4 = 29ea5c2a8e27288fbdc86f9896b5c31cf3d0d9628019e896463375aad408daae
+AdditionalInputA.4 = 66b1367ee4cdbc696708381944429fd0ffa41363995529c2d2602f04def6fcca
+AdditionalInputB.4 = 94eedb157fbee8e96d9b2e652e9f3f85a9369fd12f6e2cc8bbde7a9e79b891cb
+Output.4 = 067d6acba9b75947bbd7481e04a072b45b670252d611bd61be095e700c40e4562769bea034e8ee806a695403f22a52f4d699ac3b6f11091dc40844c551ca12b9fb1b3c515d650d2016e14f7b77021727100cf8eebe8d7c543398fd5d82f62fddda0a6d30904701e5982d88589eda087bf4ab591fa6bcc5e162120e41bab3c2e6d8281ed8d8bb4f95c356ee7dee8d462398178f6ab38af7eaf25556a7569b1f6495f1bbc4c841ec3b17a9cd9d9c8605115219b4b9474f77d4ab8932da21c8d085ff6679fdb6110262f7370caa210313b4cf5b8d4d35fa90357eb98d10a6e862be8da77dfc8fd8769e5685893f16c30e364de413a8cf7209a8cf1189060af60dbd
+Entropy.5 = 46d98b6da00741d1a8c0924ba5bf4c6790bd85f2e9866f23b6aaf8b9cff7ba38
+Nonce.5 = d48d2da035ec19d3d851860c6d8ef193
+PersonalisationString.5 = c89511110bbc97f370b559187d09b99441274e196a87877b2d35c79046534cb5
+AdditionalInputA.5 = 6e3df828943252d6289fe453bdba2200b37f8c29dec413e83f452ee599926c9a
+AdditionalInputB.5 = a03f902500ac943600a98491151473f2c1ad814b40f598e58afe79c0b064d1a7
+Output.5 = c1e23e316266e6d26f1aa82b5247c0d5dbb0aa9a59757a8d7ba4cfab9c5f3be551041fb29de805ed17164ee39a81e4fce1f013c49f8082c0e5270becbce1084efae450f8205712cc58cdb6ac396d1e0b694072221637a4a552d7c1dcb5c484b632fe1f58c012103c619a8fb111eb7255bde01b873506322e5b701b5aa204c455d7a76b9557a6d18426503222d4b1ca3cbb371695ada52b1a67421e1bab333104db3dd2ee5fbb9f47e7109f91b74959933a908a4a34ea2779c30af4c8073f5d2ac04b9d74b7fd1c4cc08417d07e0fe87db55cc1b750a3baf510ad41655e60a07814130cfa2b564207237be0dbb79672cdf9f0cb1c9078d9f5bf434b2386f93d6d
+Entropy.6 = a142ec85e1420abee37d39a2aa41361b5950f73dd5ae616191c5866c50ec619a
+Nonce.6 = c8b4516521853ca4d708d41041f6c746
+PersonalisationString.6 = 0e39e872ce1bb7b3b1dbc61099a5e9c715ebf2ddba4f089d9c970806f49b58d0
+AdditionalInputA.6 = 79f5470d228db663a8a123f612b8b1fad4197770343666b0e3f1a30b2213539b
+AdditionalInputB.6 = 21165763bc12d4a5219b98e729d054db7c9a1ca4e2b1860efbcad4f0615d30cc
+Output.6 = 6258c25db7d14e99df23800a30f71a147de1b62544cbdb147abe28f3aee6f87c13898e3928e46e1e4c851d898d5cd30066938ba17bd8c41fedf6981b1f2aa97531646d75334cd1b7892b6119755410a0a554a4a942e11d744821b29a188145e7855d2b00e0dd9275ee507c7b5ec21483fd6c1f13090142161f5109accdb846ac3a6330a524043340fe1a9511403a46de1acf35e19b3cb4ae89f90bb4001648798b145da48e93c16d920dfaa656f74fdc4255ab082f74c5bd35743352c4cadbaf155e2830bdcf71b1582f414b92f943d3aaa90f47241178006de9bbb530e73741a1a9c0d82b747e939decbd02caf554a19dbef3a184c2eac5f59e05caeb2bbca9
+Entropy.7 = fcb026c575c99789628f6627f8fe653810c3528e7200edb5523cf5c31635b72a
+Nonce.7 = e94be2989d5bc708c4924517dc612e1a
+PersonalisationString.7 = f1d42cf211135748359d832ccdf255b36e66659331b61488f3930a956e034ea1
+AdditionalInputA.7 = 6572b25a241f3754a8e93d8663caebe14923ac04ae7138aae4d642b4e0718f62
+AdditionalInputB.7 = 4dcc93f9bd9233c4a81d92863db6e3cb866808ffe1c99241ace613a08d14b52a
+Output.7 = 682e3370d5dd5281afb292c914abd205eec08ce92d2a24f8b84282df44af2b76d799eed6051dcf180932c19e3e4da6f7832de7423f451a084ae857c05db393e8abf2e03096b12b8ae9fcdd26d44191a0772265f842ed2dd9a4186c34fe58d180db8267b266a60fda74833768a2ed058c63bf10a93936a9e824ffc9056a81aed8da527e3b92429abc05707f8c298785843a39deca7756b8a9a97a72d6690689a422cac407e5e7e31a2f8e1f2475610351564fa7d90a26015294eb425922e8ef17ea88b91222fe0509a28728147b5cd489dad9565fbb5f843a2e3920c6b2663021bcd07d3c3584c704288895e6fd7a6c0e064ed45d5e82c81149a181c08048ba05
+Entropy.8 = b8c395ffbfdcd6c48e1a452eb5c1c1ce8bd38fe1928f72a3b37ef82424036224
+Nonce.8 = 74184b8aecc71ffc29a45ea483fc856d
+PersonalisationString.8 = d4b656949099572c220490a38039f1af5292a039d9c0cc9cd673d84b6c236cdb
+AdditionalInputA.8 = 725aaac264877f5768b7b38c24def1001f9b8a97b40987b0093591d1874451a2
+AdditionalInputB.8 = 9f1f7c7cb474e4281d6725c61a3064bcba5bbe0393143e7785c11473a923f2ec
+Output.8 = 1fc9cd1eb51ee500551d2c3a23e6b26f635679ad7ec01ae858299bf7cec3d436bbdc3880296fbb6521a1c6bc28e4de3a5f445ee78b0cbd47c0ea423889593fe66e20bc2b459a84b2e688f83d2f4235a3a91dc8e94a4d20abc4790b10e7fbd523d59da66d28e695558b9f1b4ae2d7df70ded0bc40408961b6fcdcc50ec727a8f002adf8612fa2bbaf94731ed230836fcc7603544e7438e1918a0d556796597a82949a5dec5b79cdbc1bcc4acd089f724a5b8e0ab95906f070fe8cdcbe0740b2fb9f3a3967107bb34a2e0827d2ed8b538ce9ddcdc34bc5aea845ae48cd34f3d13f7062768de95a2dc594f04e19b177e1991866847a287eb11a4f3118d3e50b2404
+Entropy.9 = 81870082f621371b54ede06633fc8cec33c4c377d0cabee3aa79e038e0782389
+Nonce.9 = a2da4643e02e9ae7e8716fa462e91f36
+PersonalisationString.9 = 02bb318c420607a33fc529ae77b957d7c23e910e54bac3d17a082d7db5ffe5a2
+AdditionalInputA.9 = 3ff5ea73a66333934bab129ad76b4cea8c6971b02f8b0a882a20d7925ccb802f
+AdditionalInputB.9 = d8ea3fa5a1dd5de075571b6adf9243bb9958803222ca882aa65acc875a7d217a
+Output.9 = 0dcc1e2292a177ea581c145ba3e2a1cbaa2510d2600755131d221aec0e8a9182420b3ec5b4750c57913ad9a68c64b5b57ced9233690a89026c94ea0b27a17511dcb9b20c09ef1d60e814f6f089879eb81bb09dd0d5681798664be953a5c265b362bbc26d75e21c941f82f6b539fa60a1978d9a64146bab812336895720c3cf84e7531a2a65cf3baadee3216cfb64888102f7be2c6b194397c8a799b6be682a21bd6f868ff1242c54be6f25a4bf05df20fce9bafba440efd9f30ae4d01d1a9aa81aa434c21bfff92419679c3ae03a52763a3dc844f1448cd350274cd7aae5af73336db4af1e47e0fe922e5c694cf3603deff94da69569b40295661d8c152a08c9
+Entropy.10 = 3ef14d2ac21bc380799bf7d42d23085ccdef51f922d3fc51200bc754f6df0d02
+Nonce.10 = 28df3630e1561181aecf42ff2595c506
+PersonalisationString.10 = 62aa1ee92b33d7951c5f165b1124712dafc356765be5d02eb5e7ef777c767931
+AdditionalInputA.10 = 614ae253005a89a089b07b2662d1d971b3ed4b12b5df225ba39325d2157b1e6d
+AdditionalInputB.10 = 23578b92eabc916024e8dd96aa9d44ea5b7db5f9e682422fb6a14d488a66d3e9
+Output.10 = aa61830df5d0041aef47c867d9ffe0d92c43fe81c0e7ec025f75a995bf60f52820fe9ef3b0ed7c9cb678240c1804797f55e86b63f8c27e167f65e0b4449c4553c68dc1450c6eec89d15e79d72209287334b3cd6e7ff4c366daf6a8bbd2e532a851cf656eb9145dbec1a6e5c39f76875ef66816c4c9d62afd5c1dbc6ca3e8a02bce5b6838e67cb0e36806e85a45d6afa8bc5b1692079dc519d8bef3dc26c14212ff5afe4d1241a32ef5ca92dde3d594ea6ca0fb9537bfe1e1b5e892375f9a4528d5e53fc69b8d8a669c78a3ed7a4501612c1c048103ff570993922fcf2519c8d0e2ae0f2973bfadd584bc8836f25d9a473c38760be5e66852bce968bc193bd295
+Entropy.11 = 5d2eb072057b9fbc153b9503c8503ccc7149b715a0bb078cc27d59f73d2a1f36
+Nonce.11 = 6c014cf80e4a35b05b99f2beaebd533e
+PersonalisationString.11 = da18480b5940c0367ab4994f3ae36e5d50b1232da85f492d491761a8f45acc21
+AdditionalInputA.11 = 951fe96e88a6c677286221e9295129d6450d31a69e0dfcec3e1b8416d96411c0
+AdditionalInputB.11 = b84ce0822b6d382687c97528a682a460390e7228b3fb061d8edd9404a0dd197d
+Output.11 = 10268946085d7410aa440d93a26e58a182fb11afbbc60307b5ebcf9c5dd262315b6111a253f3d27045f6491701f0972627fc36e9c54e8ccff62f2aa51f634af2476009bd6c438c68681a9294bb632edc0e099d2386efc4a419dec4ff8f00f61cbf4ec5eccde8e76c48a2bc54843af479a6907f288bb7b5688a74ace87ed6c31fe38047bbffacbf850b621cd5c2ad88b499bc0b72a7d55925ef4a84736761d3bb687e115acb3cb04de2fcb744f2ca123390eb05851460fa8df29bbe909e7f9d269a80c30a6e9d633f1999b27fcd146295676def015cb1b1a43b30ede32e6c68218b50358af8133cf93b145de78dd026a8eba4f433fec083c5ddd82fc0849aa8f8
+Entropy.12 = 49e80feb07119d55de484cf22c0aca0f957a1afc8a12b56995c1a7082c26d8f5
+Nonce.12 = 432ee690466a4e3a500338e8f056a919
+PersonalisationString.12 = d1181420b1665d62e6746b1f5350f717c1f573d916c1a9a2bce500ecfda00a51
+AdditionalInputA.12 = 4382440ffe5f9f5b290084ededc67ef8b0f91e8b47c244be231a7bb39842bb47
+AdditionalInputB.12 = 2449d59b847cd99d3a98d7c6071ca52c77f5262ad5ebcd521816c64e202adc97
+Output.12 = 463505c6c5f555e72dcb1506c31eb88209c3736dd31dfad1d21de2f30a4ebfb59c9f7736d5407b0db96863d5bfbcb8521eb6df746db499ecef37c9902dcecee62b44d1b42f09b8102b1700f7f5acb51d8826938d787495c3df8f351d9efbaf1d80990b7d8d98f692dd9fafb6df7bbcc18af9f63cf7e92f05a439621c3c69a2eb1036a6112ec408b510aefc9307dac09db58d0a05814ece8fe4c06b230c5dfdc31d0b5a7b63265b69056175f08030b1827c71e3f5908d5f5fd67538396053ece3adc608ee76c7e0ff660025c1ae04ae980803b0d7d9947771060b7dc9855651db0f4ddc31db0a4ff90313771e865580ff1e31b2d8551490603d04281275bc3b35
+Entropy.13 = 739f507ecb4562e693ffba10383314724f915fba5ae9ce42e8a798b041314ef5
+Nonce.13 = 428313474198d8b4c4ea28e8b9ad5204
+PersonalisationString.13 = 46ec7b40a3c5f085be8f1a58c389abbb46cff788ab93da34519e6500f588b3a1
+AdditionalInputA.13 = fe2b4c5f0198d1586dbdf33695db3ffccc9fdfc728444bae789888f8743ee762
+AdditionalInputB.13 = fc5f3b4159a09070eca195bfdac5d5693072ad38b79d5ecc889ae4c1de420b73
+Output.13 = b6cc790c42cc1f5eeb363315dbd5703d71ce447e1d011af4d6c78409569885947acb8c1021896b2236217436a9c21ea02553b4db941677f56410ff8e832f082ea725af008f0b8a033966f5026105c7dbbd06b7b82aa7d1913345e8ccf9595fe28a9ffa141047e1f9be89c9923a42acd9ee6f11b8c0c2cb494eedfdccebb5f0ab43507e5dbaa00a933d72aabf6a943e12c027a6821d38364d459190bb88d46124ffa7605e12a284899ec1b5394199facd996f0c8850a832acff9152132aabe99d2752c70af7ff67ee0442f0e4bd5d08f45cd4d14ab3f9fe4998bb1dd627a6bc683639ca2349c05ac7850db523229c45e4ebda037241a87bfae5873e00aba734a4
+Entropy.14 = 26a470f786b0dcc5d19e2b431664f3bc36075e0a2a21b97691540e5200cfe561
+Nonce.14 = cd0a1ceafa0e2011794c4bc7f7810112
+PersonalisationString.14 = 35ce6b81da9ce12e38fbfb8fc2c42b13dcbdb4e7063f980b7b2ff05058b2566c
+AdditionalInputA.14 = 6f9f47857a60b6f3f9fe9a83ebcec5f16ca73e236d2af5b0daab45c0b9718f44
+AdditionalInputB.14 = e6628fbe4a774bc5383218302b7c565da5a5bd9f19db6182b444af5ae5f62739
+Output.14 = d701c1824a82ff1803c4b59f490c3f37850ce85b5905059ac4484f5049f31772ab8401bc9b8fc1fd6ca06d01f01caecb3cbd914ea9574f497df0316a0d56e2830c8a908ba78d1dbe243d0fbc560c407052ec02e9c77f7b12264a46316a777955ae87a71f2da9cef2811f6328ccb288343abb65a36359c07122cb4e6639397829c48dbf8a821ddf00ddec2f294e48d05adfd0f7a706bfc337387bb7923641d08c288d23ed5a2a20f34684549f9f6b3d74ac0f04e10c7dec04aceac369f505d7ccacdf30ea0662cbab001740922e9ac32b6968e0c5a640345d1132e883e07fc82858980489893d0e38960883e989c41e72ee967c00b9a943f0666d1f5e93e848ef
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = b8986abc6b50516023dec0e7781e93b4b03848dde5e52228d294554df1c2bb00
+Nonce.0 = f33c24a6daeac094c1ccd55cf361977e
+Output.0 = 95b7f29293e4a8f8482708020c7ecd95dcf05cdb3df4a4483b686419c74582b9e98edebf5ddc6bbf9814f17f6d46eaa90cf3c13ee1747377a882483729b3adc9cfb3f7d4c0271347521aba7396f100bfd57083718effdc69930a6ab962afea0275c667c7152f088f2019c44b416eab94ff01c243b158676068e4fe44168073e30167a57a4ff8cf8010cb3bff991f4e93e70db1e37f40a7a82d4faccc3be32b9135d027d95ac543b632a310620a02e3b470a254e9dc98c4e99e0136a104312639809fe0dd94ab03a2eeeaa43ad232e3793b4aa7b0b78767d11c85d2f87f7849ee2d7189f1e4e5b8b08bac8464454350f1e06e7b7a5570071521a7b7b3b722b8a2
+Entropy.1 = 91c55c82bbd72be09529ee915eb2c9cd13c7d2d892aa2d4bfefb01e427c348d7
+Nonce.1 = 9d117b412eb74a7959bae27760f40e2f
+Output.1 = 63ccf23c51a7a4b0c2ac4491b8d38ec2489236597a554da8436f5b4dc1eba5087f8bc8a4f01ae07bee9e98e571de0120b7b6d2f6dcce99993a669437e52b2b2c98b0f63db9f724b42dd182fadb69be98ace37f12e1d27ef95f8a3018d8948a20c6b45e3931f659a27ae20231ee323d45d8de5ac6d8464a2712d73cf5241d0040c87129be676689da5f90bd50f5617baf6986d1b9d2f691f6bec73508b82164384b65472ca5f0e6390bd983c8ec75a3707a9c019ab559a7a6e89ddcb9254a89bd413a037948b94e6de4b191a251366de1fd8813b5dad261545f868ec907d0525f1201c62bf1a673b901b3d9d44a362f3d2c7cc3a760b2c9948764f8504cb29a69
+Entropy.2 = dde440ac558146a64d1e2c2f87eb87478e0bbd74e136e689f3d265256e241477
+Nonce.2 = fff859ca9364614d9b5863eb66241c8d
+Output.2 = 106f18c8ed2c030f51b4e93558dafe67172b90d87ec55cf2bbe05ae4e5b4aa1ccc48d8e394474c7df81a1c251fc7e3e6ab3c19dfce7c295f254bf11cd7b111b78ccd711fd87eb3befe8fd7eac04bc74c9c5973d4d1e49a6906fb89bcc7596a2d5068aeb44750029a2527ebca0be10a1a1cf6bfb07d76424fcaaff1a363723de6b4c0e5dc571479bfaf2867fa367d7d959b948f45b195ec62132223170f8fd4afcedc7a00d27e61fbf700f49d75dbecc39a9ae57e5f3912afcc5332e079474c4b9e378583c55e3b6f073701d887b2eca9bd847b6465318b1a449e3eb10b0471a7777253dd183c61805b0d8014467c6387fc32d96d4eb52ba83d3db2f28ee05a2b
+Entropy.3 = 1345c9f6856380372ce69dfeac4ef92df722f03ecc518641706a051745da310c
+Nonce.3 = 3bc180fbc657cef9407b75d1b54cb1e7
+Output.3 = c83d6366f2f83627b33b3c656a259007a0077cc81b898dd4d61df0c29a2373fa40437510f34a5752e25d70641936f47a37c760a653372e557220d2315815542b7146f4aeb3ee9f9ae20ffd438e252240d8b2e08b0797d4cb1e066003b76dcc678adb112a82b7a3ff1bf8c65452b302571d5fc02ad3f32272a6a386e3c977e756ecaf2d3d02e8cc093b862897ce2e5e948dd8f734d55fb17b07c16d6e709d79e6e5f55f9ecbe6e273a17d45822ecd0ffbc3c6c414a0f9e48e47a93fe851f95034bf26dcbbd1ceb9393eddd6af5532b4890b492217fe1f88befd804b6ee1dbd4deafe0d267ebb3d3b8811ef3a56cd6a3de86cce946640857a30f2f50bf2b49cd81
+Entropy.4 = d732d597e8a0422d76f6e50efa36e3730f59e3ecf79e315417a51f227541c05d
+Nonce.4 = def492adecfd386c3dd0182ffef8ffb4
+Output.4 = ce4473c4d793faf305df6e140dc003789a07a30baf67ec1536f7aa9a7cc1f471a04bb9572136c171de8db565f2699136e27b99df40edda1feffcc2dc69105dc1cc28ed89b16043e11e4bb3d5d7f6a1c2af9a2682c50059ecfe1703aa75246f6e0f6059c3011c52a572851a9b6a833aeb9ccf2849dd17fbc9e83a038462ec9ba2237ae49abd362d3e8741bac32785296ddd9fdf65686123f8bdd880299a491e9236353321bb61251582c2a101a236b94656af99ea28697369e5e94b00945f8a78407b9a8271f3e2ab4c782c13a5e5be75537adc659ab2d163dc126460e9f6985dac8a43fdae67502239c85f634fe48064222ab8c3e74e71f8170a4c1c6c5f5951
+Entropy.5 = 5c03a20629e0853b273a8c5e8f89203740133523221903a50b03ba6234d6625c
+Nonce.5 = 45501a3fb480211f9d2b905ea7594986
+Output.5 = 5faf1daeb0830553498d82ac172c0772d8dd27da798244ab2c6757b52e0e0a296778fdd919b39878e97a22db985d2c6d68b67b73e6e43fa9fce011500aa9145ba44b118ceca3d563281fa4eee23f7664d07f1882ee5979974ad726d37f43bee6ee7a16e033116c4ccebf1f65a859754716c43b98021bd588c79bfb1926db0c0211f7461be4b273f1a762fa978b04151709734c8d6429c9cb2dfb25784c9576847c48433f7b97675acb5df1433509f074e0877bbbd4e85aee338c734e53f06ef895f62224333465c35e6edbe0075d9daf3c0c8e1bf690460bd716792a6f78f0f47a408734317f6ad5b1d48754c24faba2579bb49db0582dd4ea5e2b9ccfda0579
+Entropy.6 = ceb630090ef9282f160d091a8e72b664783dc3fb75991f3ae1f7c6f73a2af906
+Nonce.6 = 7c00f71bdf80b23077f1f5b023c6e2d3
+Output.6 = 2c8416d3b2e9a4d1d613b5e15d8a11d47893a625cede12d0a72b2b3bc51a20898fa3ba2277b5a6aaf1533cf89de5bda5a4718a303a6e34ae7faa1ab282b96057459a743be70c4d966824ebdf872682ac4a28d24ccec49c5a8e001e33bf56f01a0d33c11669d75133e8711b763463e40462a78fec1f92859306c3515986a56aa3834dc6e9fb6adf4c59519f288c80519491f1c0f3ce10d06058ded3ac519918156427884b431bbc13d3aca7d10e0674733c55f727e18d84a5de635d92fed7bd08957434367e803fc2c8f33cf41068bbcba158bb28dc0913ad6456c3f5208413795909c47e375292b7d4e2e23a68df5ae3c5850b18b216991079ae32a211c95da0
+Entropy.7 = 76b7040ddaf267ec9336ca11549bf3ca5b7bb0a8e5f9f5d8590ac8b6cf7ea1f1
+Nonce.7 = 0dbc66c634c191cae0b2f868cd1e3ad6
+Output.7 = 2895076c2ab15efb5ae7d61fe578f78301bd35cefd33f1e752a5bcb18a65c197479efee3b262277bc7af37bb6b3a2e18a2e801be374745eaffe26064d0dfdf7fcb173ab4ab5ad3bbf99c27a90cd4fc874b0dfb729981ec0d0087594d191f353f454e8e764b920630b4a9821f1137164f50f5d29a3b2d85c592d6a01bd3d3647cfa0e3b3c010039b91d567f8e8f71bf35b23bca871805ea6a3148189c28e703d4f87e34fe52d759019994b7ffd6aedfd4eee6f05c96a46bb7a3550967c7fd016538c6fd35708b4f74b6c4505e0af52a221af880d89be0ad1e077c94e9321608a11d4296c3d2506c6ed3dd7497934068604bc3f3d8dfc7590f78c88ee6bcac3ab9
+Entropy.8 = 576e23bd76a4db151397ba4f88fdd359aa2bbfbde4d1f5faa3341ef472ca552b
+Nonce.8 = 49e936bf613e20debe5dd21c69109806
+Output.8 = bc35bdf36345602ddc9659401358ac23b4077e3b27e2655d521c6c41ca8b3e895f572a175e6916a38a6844cd5b7004b5fd30972bb2ecaa1492c694fc951c84b782b3acbf5e4e492d200ff5f0e445d0a0a0e6c98a8b9af6e29dd22a4947bf3476c04112d157636acf3f01286bfa9326b0c6c1b150273434349a4e2fc4241d1c70e50c2b60552bb608b37825f5942467e407f8c97a0d41c6d6687b26a8518d3faf08fd2a2f2ad770d3111bc0d4feb84a17aa0e94fc21fcab1027c5dacb66c8b6a47d93aedfc2dd9736eeab146196f9f689627958886f2a59436f652e5385799cfd2a68b3fe7a9f5e3c3393113c07274d4779569dbc00ae688990354387c0bbd93d
+Entropy.9 = b1a179214be05736fa7347df9c48d5e232daa8bafb3d4f97200af85efcd4e3d7
+Nonce.9 = 45e7d8d1df1cce8e4c7b8440497523b8
+Output.9 = 434171f3f7354d83fec4db3d3661c711af86509600390f65a9bba8e441012ac77fcdf571d8ccd0cfd251912ce649fc54635a058ae7ee7cb6f569b23f878ddba61a7697f460e38886b6c87748d681e92f0bf9fee069518c54e8ec68e97f8a37abb2ab3a52229486150d58d18d1adf04c0da18681aacffc5aa930c3917b363d5d09563a551d357c36f0a4cf8ae1ac19929483f38cdf6622e6920eb59f53f2adacc373d7de0d44fa850de05c8a6769cc62fa06b1613d8027d926858aac39b6caf61d2d29435aefd106910234b1cffc5cd44ea7c09980e0841c7de8cce4115d5aa570b842a66aef9e2fb79be1a5b80b4d8e16bf6580195d88855896a781f7818de65
+Entropy.10 = 9246151f2e277d5a46b79d0974eee76bd6a47b4d0464e01c00155697bad29380
+Nonce.10 = 43e6b81c6860e213f058e63d2f3104cd
+Output.10 = e72f3fc80993eb5c3cbd9b1f5012b53d33e7c7fb10cc4371ad20f1b80945e41b4e7114130fc5d86aa3a2869cc28c8401708d6a52fee5e8fa610ef5f1bed0b3e6392a9d238d714cb4d177858508b0623ca80d8458509b12e2b9bbb45482c68199a9fab0d3b3c9144d0685b88200720fc0a58095603851397ddfab4b1fdd014aa893fd3821680cfa9fdbd356a62cb59939401715cd2ac1f878fe78b4754a5f0c8860c6fbe554a95331264ae2b5f918fcaba26b32c1ee5dcd9722684e7f5d7f18c42a1855ab7e2b504c6af919d3fd2e3b0de2022afc88b8e9082fae2949389456f323ecf76ba43074de7256b00ecbc0ce278ecd8024c37e684c1af05814ee2ad34f
+Entropy.11 = 2eaaed64e3c5b25e11944f9cb797c659faf2f4ca559d318b42bb6020ceca3928
+Nonce.11 = b9cdacedb393b03add28bee49ebe58df
+Output.11 = ea1ac99b43133c3c5d6976cf339457798ac8f3f087b12539fa6b515257d91937750e3bf4bd800789422ae7d8fe7f117ebfe100ace693d25029a60d094cd9d8a35fbd19883f029446c61d38da1b11644c3c144694e66a8c082fdb1b84789a53cbeebc0b4261d441cc9c5875bac228b4ce26bc4fe4dcdac5deffb4e5067b20c70dbc24c3f240d92a405de0292db868da057f29797993ae95cfe3a1545892984123ba34b8fc7b3796012666d749c37f019144dc9b7b4143b3af16724641dbeba733ea1658e8d4ddd35025e3aa162ca9c53ba39aebcb4ad9674556fffa6e6c6e0294f6924e585bf7d0b2a3d96e849986a7ea567584e6cb5f05bf6042092a484e3da9
+Entropy.12 = 65b20851e9328b872e0cd0fb8c609f12bc533b8790273f32f4d87d1c652db2d2
+Nonce.12 = dec1dc60443d1026ff9d6bf2da30786e
+Output.12 = 7dd708a70c37e5dbdc566137ee13a57d56ba0036f0b0a348aa07f468305cd41faa670a2e7bcc67549f96bad30f886ad093f7ff0598abcca9d6e92575d968aad1ba37513e60e3a4086d1e18770640eb4cb3941b26807f4eab0f83ff3d4a0e5aa386d15604f775951bd68f3000040560175466ab53f4e9dec4d2d9f06bc749d77b3f0bf7933ab7ddd991853036aff2a7426e3650204b1d91042a5671ba814c946276ecb6277ee51928bb78d2d1ffb3575f6663ecc654adf845a1476e5313c62e3f44d1cd5f3ff909bd1efd46ba6211327199cff6c260b221c198f87a70031b85893e91e47c7179116b646754886c72f6cdea09b19027763fe77192466c722f7122
+Entropy.13 = 99a904a6549341d4e0fed855a64efdea701858a6f17ff86ee53c267b6269f61b
+Nonce.13 = 4aea3da4fa7c79e41c60b8f75d3e043b
+Output.13 = e256006dbd3e4f916687f875cbb071ba9acc6df7b416bb55ff5eacdbe96cbaa01d1e58e70d813012e5ec02f8c681884e5e80b9089c1b43e6189c257d98c13289c8e7029153f4d3b1981cfbadb42aafcca26f20de807b40c239d77ca7cd47f3f4c9e0f86e5304eed35aa3cb11fe41a313268c4654b4cc9b6ae4e044997e5aed8d433e691cc2d82ae725c76af08609a853cb9ed4ea468dd3dd4eb919b5e796102916fa217d9c3097d52fdb0a0985d04e4a8ca0fb13a1fa7152f6d6776e4f245b3c3593fb7ab6a464c2ca05be4e25b6ab48326030b4692438e316d2a5704d0dd577978c75c078101d6552d8ddab17d360c0fc962b66e763b2f856e49dad9caa941d
+Entropy.14 = f5ee32b61bd57a4a4d51309e846f636560a8bb2a576c65d37a3f715ff1878014
+Nonce.14 = c638557dae4f9ab6e078c61d54d0f566
+Output.14 = e929e6c5c4a629c49fbb8623aea903ea129bb6484ed542cf940dd97bedc292e8bce924ef0cc57fa9b50b17b82618a840375874735560aea57e4e9701e4ecd0e812d1bf9fdecf67f431e4d7f6f455dfe4bd3b9a1553c574b0bfbc933a31580319c97682dd990c7081b711c2fa67a4eb54472be39f634c5dd901848c012c309c43f34d189a72c219acf8ca393d3f2cb292d62bb4d5e88f2b6e5e0422dafeac17415af623473f26ec24e65082123db9b9c00dbce3ca1942269fdf66f14add6c486a00527a39b050c2f3a6bc461e750f6e33236de198742284998bff98b7b3f6566e66679b3d8a1e63561fb5f8228867b8ff92230a9f2a6b9427821b6d55a359994d
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = dca330679bc48878079dbd7be18364ef00456b772db86c2c09d99e93c85317d8
+Nonce.0 = d6224a1930274e5f55d570154bc331d5
+AdditionalInputA.0 = 78eec2a99ecfae6ad6a8d8ce9cb0ada29b491fc50f2f3935f71de8ee4501bb51
+AdditionalInputB.0 = d227d7b53e8f0477df377e9292b53a32129d2f23bab95612a43ec21e23ded61b
+Output.0 = 5f09c1d8b0c2f26e186434fa87732e48dfb3d24151e8a989ac354b8859a5385a8b1298a2300314dff4cf9ed621478df29767ff0499bffe62e93e63ad510b58c8201e89a64f14dbdc60d6e3bf920db5ff8624dee09ded5981e57533918f236491667dc4ec7d8a9dc2877b35ff64438979a763ce071adeac8c7c6198a8e53aba6870940b5e8ff3407098abaa0fd919e2717f27f011644b9f248aaa406c3f69ecd0d29c33477fa3ce0c193356c67b2f27bade247befc5876eeb5fde5ff8c6ea7027ad72f3325feac6ee40b8c5e59c480ea899949a1d509be4c7fed159df46c397f5b350a024d7f29b86ec07e3cf649db343510f3f1e1cd70ff2d509a7a2c814cf80
+Entropy.1 = 1055971f5398700cf74e4b6299a784e812cc9456d6bd328529ee5073115fa92b
+Nonce.1 = d8799ab74e8ee16c74b9344095dc1da5
+AdditionalInputA.1 = 5676e4e5203b2289315d261cda31a1619eafc6cd47b4eb712483936a079fc6b5
+AdditionalInputB.1 = ede77de0d09184231ce425e37ba4d9ddb2f2aa2c51a46e13feb086947ca46da0
+Output.1 = 8d9812d72dd614f0f6cc0ab34b64552e9f64a328e4c77930fd59dc431044a6cdf3bf674a73e38913cb28077d68beb5d0741a045ad36df1e8368c612b4bd97e1f5df3153817e26d8669097d8c2cdf3109d00ddfefff98081c51876f602ce0dc0f007c691dbd71f8b0ea1d660782ea89727d676ee95e4fbde66f24af9c7e98cc0eb70e0a6ade1780637cc099a643edcf4eeac1b0a84a7f236478cd59a1841ae317a9e9c2111a20601e7631b36dedaa79d8924dd5e51e94ab5a7a7196caff7d26a92ccc92e9f73724b170df23525c401860e097038028634b38475e14a297606c4602ad8d029dfef7c626b4841f225ec771b8ae212526a5bc8c042bfdb766c64620
+Entropy.2 = 23a72ea31d61a0b43288b75d97cb8a94390a1e5e5efb644fcba2563fcaa51283
+Nonce.2 = 58208a5e38678556d2bbbcd805dc1538
+AdditionalInputA.2 = b53a5f909b625e60e78bd5207ca6be7bb3f1d9307f971e3a772fa6658ee874c9
+AdditionalInputB.2 = 23f555d87c5c840ef86dff90110efc0e38b2e8ed10a7fcbdb5bb654998beb38c
+Output.2 = 7da790202a375b1641878f36ef368b25b4829fd1c8e7a05777d738b76fe588ae3300ed9a26465a8a7a729c6a1100c2dd2b53eb92b7915b883599862cc1c4d9e8e148a0cf9685652deee9bbcb24b01aba227c07f02d43d1812ae46d892868e74090d70ff948c78df5ae48eae4e18b03dbe533985115125964076a5da36127d85cb8ac245df7cbc9fa30ac7262fcdc8c6bb4a4a9ffb19cf57262ab5f8c82275b35323dffbf1dd3c87061249e358e19c60c7cb1903935f2af48b070f65c7bde9469d0350510b767529a124a23061f262ee5898f1e0e1b9084cdd072a6c6c60a88893d8b52158774799739e103df116b7b3fca61db28950bc460b82559ea252c3717
+Entropy.3 = c2983bdd3c205cb1ee5fe6661cbba36136a495f94857a61643b24cc61b61902d
+Nonce.3 = 7a35868665b2bf8c7fd10101a6a59c51
+AdditionalInputA.3 = 038f68013b2a3d6568d3b90e94892b42f590e2c1a5146800296a5d01a144e329
+AdditionalInputB.3 = 353c894c921c6efed6eaa1529844158e9ee8f8804ba45b5f06de96802cdcece2
+Output.3 = 1f759cd7e32ed71bef27608d80889b26073e8522e89468d3c173fc8c7094ff34205d13cf78714bc1eb3561e4d7601c0607671c434a24f922d21ef73590415f3b441fde05a754e10bdf88271198efd03ecb3fd429f0496f073e34bbebfc6d9133ceb164813fb9366d67d1827197e1d031f44c4fd2d8f3c9ede7ae3eea92789e70724059db13b47ef0e6b254fce37f3e5c489e8be8b39e461ef37a6a04aa65b846706df043e5e02d22f759e3b6d42d1e12dfbce9855011e2e0671920492dbc63246ac6fd5212196e900c3781f243ca8073e51e74b0d29fc3daa7c5d1a76057ff63e0c518ac6cc28917556fbab7e0f000afbaa9ef950c60123e268848a5fc015a78
+Entropy.4 = 09b51083ae898da41705b2ad39b2dd6f3ab619becb7653aefa79bac5dee29741
+Nonce.4 = c6fbeac7d823ef53804d9c9cf39b5c70
+AdditionalInputA.4 = 58c676366b3552a2428867d08cdc6d76202655cba6fb069a85e06afb652d9f5c
+AdditionalInputB.4 = e2f40323f480d5465b8490caaa162963e096ea2347ec46093c76d45cfd8440a7
+Output.4 = 1124e7d660e90bebcfa1a74bf37dc0b054be0e970b75337e400d4583db67c25fb5fd7d15be0d68d09f0055bedd4981159d79b58205fef3270510c1d78bbb766bb31b42fdac0be9a746767f11a739cdb40d4e29ba88926a55cc997fae4a86754fd0f91528f254f976af9deeff5bbc59622b04c9f369ec6a664c9f5c5b117d04c26ba1d88e6dee930a57027773fb0db42173310f5e16d471a87c3cdfd2a5794491f7ad4c2088e125606e7af79ada104837236fbd0d7caf310916595fbb07566afa4e688f30f6fb0e03975808d93273c647ffdc212faf7ec8dd1df31ddd3275fca5bc76636f4bcab9782e60512f08d99d9f8e68c743e833bd248931def394040da0
+Entropy.5 = aaf79b2b75249c5a7c75cef16490a3fddfce499d248f08fb67788de1578ee878
+Nonce.5 = efe3579c0606c406ea78a10dfd8354bd
+AdditionalInputA.5 = e4e75eca095d786c905529a01027a5e55069e060d15b53cba94a4154e96e1794
+AdditionalInputB.5 = 08bf2b65a29750b16fd45374d34b7c5b6c18c17dec6bb0eb6b4b4f25da79c572
+Output.5 = 75a572b3ac8d15ac2e4cc0834489756ca8c0307af89614e7021a42e836e9d840cf852b93ca87936aae761019eeb20deb0d9d999086b05b4fb7d28e535ceefa1e2ec6d1f96717f7b69079c9c54f72dd45ae257709356cc7b190fda05b938387c193b55da263be22bee2b6d50e861ae89c0d126e461de937739c047ebaa99d859e409bb1aea18f9aa89b2af61b25ccc599479b53607b009315b9cec84dbd53944ce27bc7782d21159b26e72afe72865117dd8e6add356d93a853ba3a2be85c760a53315aaffd0abdf0669a27346dc6cab90c517bd1fd655c267c889805d3e62182b690ff6b2e889680590e6e8c617b15edf304b6585985b9627baf83fe818ccb39
+Entropy.6 = 075ce14e5d9adf4e74605106bf058191a08a0af9a8da150c51c383fec9182caf
+Nonce.6 = b689bff21ee556ef05fc1dafb0ab4f17
+AdditionalInputA.6 = 94c1a89f5b3770095f3bc19255bc9a5fe45d4b07dcba8530d011170dabaf8b32
+AdditionalInputB.6 = 9d3539e9c88daf5d94323ced1d2ff66860dd0c086cc517403f274b942634408a
+Output.6 = ca7f2c99034741b7307492a24c0bef27f6ec538aff545cfef0bb9c6fc1e1207b555d09b3db88b83369e72a9cb7552b4b9eb15d53ce61723e8d325b496277a12c5fc740d14de01943221c10c3d6ca86f544f96bc4bf9c31877403d6099f5d70f5f619392eb33597f97bc4ef668364f3edf72caf4282df42bed6938d97fd938a04ac59be4553c5196ea7258f9c54d3ba493a4725c2dbe5845811ebc40e3987aa86c0ca9f9152ff6f4d279e59c9d189a5cf9512f72b39ec2c98fbf96a525fb23f7f6d90018db11b41f13a76cbfb7cd2d38369e94b6ddb6d60ec01bedafda6f8e38009bcbabd0bfcf4313a9de8864f6f2bb0f3587b301efd129796a44f038a74b517
+Entropy.7 = b80f6840170a2029a9bceddd72814cad5f6e7219451f4bb654f1da2f760eb08a
+Nonce.7 = e4b79c220a017375d4fef8f33003a844
+AdditionalInputA.7 = 09a42fc19475f26b3a0d1a211d53ae12f2e5f10dafcec5131f18a43914bd3c33
+AdditionalInputB.7 = afc6dc5954026a5b6bacbd9d1c530f9781967adb2dec8f7255b4c843ad067a2a
+Output.7 = cbcd5664f060c9395cb3fa36e2b271692cf9430d61811ad61e0459d118c63c61c1d23925139cd20751b0727383273e7282e05915e38b99086d16ef7bef57251ea26bc603b4fb6178d8c1354fe996409d5d23e86062cad96f4d83770b56d92ead7b01dae92ef56fd3634ebace7853a67535d890e597b383dd13d12717f5a44748353b2e4463feff9234179cbab0625755a4e5f23728586e436275afcee9ece54fd1acd2d390aa423832d7e24da6690cd85f8f039127e7e29321796a3f3f2ef853503753768e1231256f1864f14ec77268956b37ff502ca0338bed517f98b897515bc2ac38e64c8ba4f67c231c95d91191c02712516083bfbb6c677c40ac9a0779
+Entropy.8 = 9e80fa514a50d3a67cd26806dd4e0cd23a0f914c9c65f6c7497e79fa02533faf
+Nonce.8 = 6a458cb5341eb513ef9b71c2f71626f0
+AdditionalInputA.8 = cea2c633f4ef8cca4a696a9b9e342cd0ec79c76ae39ce9c16c68ac64b3fb0b5e
+AdditionalInputB.8 = 892c72d384052fe30d23615687b499f2d5c1f86754fcc9abc37b9b22b6db114a
+Output.8 = 0065b7cbe4c7dd33ebd090cd492e67b9eeb08295339d01f45f29141a7458e3464fb393349ca762b6ddd0eda5320829919de66cef93bce08da0dfa88e540f6f4f352aee5f0df7c01019cd28bf6cb4c219952f19a2e3a8544c638ad40a14b3a5d9daba65867e815d70406bfe5b4e335b41e50e5828f0d0bbc3d239361591dc84d34d41b50fb259ed8ec63bcd5fb579f300c3efdd29120c3dd3206d90e01a8dedce656a5838c09117e859026ed3ab99b242cc57fc6a9840a8e33e34f5a8d3e02f619e2e3fd385207abdb7da4419f50809a645e21c5b335c181ee3615112b0e106d956b8c6d9f92fc7d4b10a3cb7d5075ae19a492a89cca8419cd9f7abdf7df2469f
+Entropy.9 = c233d84feded3b3d76256d95931faf82a23b5928571e837ddffad6c714c28d49
+Nonce.9 = a2c79e02bfba7f9964cf344efe20b331
+AdditionalInputA.9 = 5f7aeb3f5d6b72ad10a6c7eee488b21f7027a199bc97bdc71d13f925fc0926bb
+AdditionalInputB.9 = 832e4bef1e0a300a5afe4b26d7dd32473bb0edb61793beb9e8a0e1bfefb566e6
+Output.9 = fea34cb540e4c85b307e50d983719bc58a042015da5556e1d017075611fa5ce6875aff1c55babac281e73ee6a0ed193d4409a45efd18ad9abab996b5e285a7747abff3d07fdaace094df6edab8e26526d22693ccfdbc7bedab20f8bf52f968233e25778c0146223a5db012ae7cb71fe9022e0a30e1ce7c8fce9d90229ce6ca8d90c64612367b4f774674cbe1a0bffa983e59c6459be93777fe284663640e54ce524784deca45726a483543861d2ce3d4656775d4b5effa7357dcc886d201b172c270f31a777da9c7d7793b6ca48dfefab80ed9625abe1dc5b0439c04ed12f2bfcc9d11c3de13bfaf2d8ae27eb348bab822d5e98c142e04d344b5e8097255b909
+Entropy.10 = 117250981d88d42426d260ed0635d8bfede995ec758f8edb25d60b1ae07c349e
+Nonce.10 = e06b08bd885e81f4cc2c2463f10566c4
+AdditionalInputA.10 = 635ac4f897cabe45e102bf6543a496950df259f09080f377d0df7ea3be8b4480
+AdditionalInputB.10 = 59258422093cf1a9fce1cd688921ec8d180c9e83e6efb0a693ee830b0a031b93
+Output.10 = 1cfd35cb31299346bc9448812db8411df74cc65a7a6b4f89570d123067fdc8d711c958820bc7a8c03336770dbd94ccc3123daa53f3343e951e7056128f8d753f7dcbf3edfd72090b1afc0de97b80d5824c2513a25153a6e9a6d1577ff4f8d078ba68cb598e88dbad0ff9c56f8d4855b3e48b7ad34cf6a6d82aa57d464e2e5888c2182c6f21acab9cc060a519fdfe3cc6793fef7e15ecbad54b63a2097751dbdfc54fd701c54ec5421188b2ae944190c5c3f8481b05a980d3f70cd61b664eb8e3bea584afcf596a59281c90a12181a2ee74c2a3204625486067d9d9ccca0e7c0ddc1d7da87c53ef769ef5740f6f81a6aab9978259b219aacf79a3fa67bb6035f3
+Entropy.11 = c571c17a6c1d64fe4800da9cca2ec486ca72cf6e2882526dc039a9ef1d449198
+Nonce.11 = 364b990d2931698f99243782adb4dee4
+AdditionalInputA.11 = 323fdab714624cf9abbd89df915b96a1872d9ce09e407aef5a76eb8beb6b362f
+AdditionalInputB.11 = fcc9d0f6e5bd5b9384c89f4be70908bbe37e522b5fa2e53309a1e6f32256ce4c
+Output.11 = 5b1d45919fee2d2b7e4209a5c316686a8a0dcb4cf3241a4aae490234ab1ddb7101a4b899202b583a337480997b3132d331347ad5246b5da691565b471b627fa77f57b955d7d4d237787e2883fc0b1ef93aafef6957a52bee5dc12f5c39b7931fa6e055c08bc974e3a00af314757cd972281a98500f2ffedb11631c1d633f69cb73aa2831aaf94c688bcbb4f920b076a6e64f4ca4c537120091a041e8d94b1b7c736be0023e2a11eaa2865d747c4150f8bc4c29f0bca3db739fc11280d35367b36174f13aefc564a2aee178485a1dd678d548c6db1712df1454dc8c2f3ebf9a17cf81b157d702d4ef150fb17d39f7a1dee91d56ece437f55452c6ebb7a3ce4db5
+Entropy.12 = b2a3525ce8412662e7b20722954428fef572cdf5b07d04d9d8b21dde198a9307
+Nonce.12 = 51e22484621970409b4d19ea0af1aeef
+AdditionalInputA.12 = 7cb7a64b76bbb61a58fa67399fd0bf92e8ee4648f301cc0da9bf71c33a861426
+AdditionalInputB.12 = 44c681550e2a09d16d0473d24ea7980b2aaa1fcf87139280423440ae95310e95
+Output.12 = edf2c5bb038eb0992a76211b9cb7683a31fa088a60eb9008894776ccfc384b09bd41dc6eba77ce508f29f5a8e16eee1092c3aefacd7fd963ea2827c1048554f7e563540735331651c32f7cdd1b8e9853404b1a6b174fef944e682a3a01051bb779500bc3534d4acd4dc67589f39cf10f6fe37d2f96115e7c2f4d4b45f881abf6a9f81f031b4ec2340dbcb54d5e276f098abf4e1dd9f25ce80f0b65a3430fe0fdabd9017611395c2e55d72acb5ed18d2be69b9c52d18ab3c2bd2a568599a53d42b39e93ef0446cb1f6ccc16e5b7d9858beefacb4ca7ab40c90fe377b594681f6d172f1c0865f022aa2ab56e3510cd44ecde2a5b7fcec6ff5b6f6f399e202a43b0
+Entropy.13 = c559c5f8ec0e26669b71cba2c06ec3b83fbe99dd9e70b14ecd03ce4b6f487200
+Nonce.13 = 637b96e7ec68f44ab14760df1f00109b
+AdditionalInputA.13 = 35b8da13dad70c4ea6218dba0921989106a6f90edaa49e3b0037f76104ee528c
+AdditionalInputB.13 = d936ea3ec34c9d5191f92bd528582cb0d350a51c43e8d70d97005cc8e6c01588
+Output.13 = a3bd22c5b8b73f1d1d5ae2e5b3feacc14bca4a16a8f4dcffabefc3e79d616391f2bd76513c800529beb1d528aa4bbc1e2032b66dda8fe6a945ee6b91d32b51c9325505b25e91119f6f5321f28c7a571985f7fa065b67134b29b9d8e0d71f5d8b6563d9f00832cb7931eacaf41385058ea0c3c93a8689137ba4fe7e34c45c6eef2304bb262d9ae137b2224097bffb108ccbd7121365957f95f4ef81f6681decf1dc29f33372eb428844ad648398a20270edea6ca736952182b7e0db3d0e352e922641ecbc3de95c16592f45cff6229bec87621cf93517efbc57459f8de4075a2436fabd17df999953a181e196482c56d4274a2dc403c44705a122d6f83f9ca24c
+Entropy.14 = 4019c183d7cb2d5361edcae35686953261f5bd1f847fb1c161183265a6186562
+Nonce.14 = a29d6ccc04bb066817ca7c1ab6ef1526
+AdditionalInputA.14 = db7b290176b65f826aac2190a912672f8a9c97815706af33732f68b1f757d62e
+AdditionalInputB.14 = 13425f17d8fbcca3b4d7793a53507a85813f6f50d3365d680c0620d5fe1bfc33
+Output.14 = 12d4cfe6574dddbf9de82b8a357bbd6e32a3addb7022c313ac401d0aecfbdfbc7229822f7db9012e8bb0e2907fd48d3eb435ef8368802e5eb948f1bd8d47569b694e23979652f6978b568d7e2288b596afbc67b6c1e0d662240356dc6257d9d273a9ca9f7dfc9bd4175a50ad5b328056c37046e734a76384d7418591a7604f332a457f2fbb277dce4fd2729fdd1319dc3a56b9901a50dc90feaf5969cd9e450bd8716e44253ca55c4e1dcf791658cc467cfba613c27a96f67bd68dd8ccf46bbca4294a0f548b919626d1712ed4290ec90c1098a082699450738d32a8c6516d83bd54a42413bc0ea0b37fe5d6b0663806df67f61d2c553aba3aed3f9aff111d2d
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = edb77aba67caabf66d3c8d413dc36566b7dd33c73d63e960ada87cdad9dadbee
+Nonce.0 = c978a652b5e6ac2a190904bc40d6756e
+PersonalisationString.0 = 9b383b001677ddaf1170ad611a6290243deeee5d66800c4df57d9eadea09a427
+Output.0 = 44c890c4ba73a795eedd9166cbde015048f77ff2c66fd44897f6336885bc7549e624f203ad2e89765859d1189d09658e19e4a30d929a896db54df1ad5c3fdd8b87b8e5f90bae3bd9e9810e3cefd816320a80aa8b2ddec800c422befceaaf438005ae24a35568047298b136f47d832fef5ef8a1d53e8a6f1f89ee49fc560f80112f7d40859ab8c7e2e4a4618da79b9968180e461a15e341a20f4e180ea4b2bf01815b161182a282c9524daa408fccad1e9801daa13f1d4804bdf396fa46bf3b0be4ca9405c7a637616212d96a47c484e15ee6e62293b2ddbfa1ce675c93e6d893ae33a66abb7f1a54f7bd23e53907c75297cac66317ad5abb00006de77bf9d9b7
+Entropy.1 = 08f94b7b7ceebf999c850a6b83d499b045c421ba32569a81451d19ca4203d841
+Nonce.1 = 9d59d755eae840fbbfd9a37e9e02ef07
+PersonalisationString.1 = d5550e16a863843f4cd187bfb650f683adbb44c86d50ccc21f3e7630db3335f0
+Output.1 = a2c62c753a64e44e34be03981037275ae9244b016d05a2c9a63b36fc611c82d4ecd819c1d3910147b25b7bfbee0236ed6711a4293825c5d57cc1c58af1ddcfb8df533d81b613864577936a84c88c267b02521e17b481d61ce19c70ac625952b4b7900bd3e21b66728406a7eded21499d7088aa60cd444a95915ce7767228c9bc4953d53f46d90f67e736bfd7dde2442ed01182253aeb8ea827f3049faff9c210e99c4b33ea6e623ef7b6d2c975c374ddce64f63860bc3c9db27015d23d97c27b90bef3088cec88a3d0d905eb1d11b32596b6b35281bedb3acf36f61feab9dd9ce9fb299f7d78e50404640827851222cfac558fcca1848da435bef281c739cd27
+Entropy.2 = 3de25b41b5149c54af8241645c5b763c035217d727727bc3eb48dc50b2154192
+Nonce.2 = 0da29b48baf4f732099e4eddd2fb96c7
+PersonalisationString.2 = abd5ea43928042b4618c2a8933185fd94801c6cc2e30f855e403cc403d306356
+Output.2 = 8595e3dea6d7b4849c1280fa4ad3b99f78922ab1dae43869272396db1097045a66cca3234639798dd0e4e3cdc07154ebf4424de58627eb42724e0ced746bc7f87695d2c911d551bbf9270b9ccaa0b2903db71d75f6c3ad764e109d56d19d388da0b7d921fce449e8667814a9cf0c4115a01d81e49ea117ca1489b4f8c02961c9f9118b0f4159269b40fab430ac65d9fa924d0bf64499526807c8c917de331c519be4df2f1a653934fc6a3c39f4e2b4c8484d91bd5199a72655b9d54d813552eb55136d6821fbb4c48866a6ed9bc3ae1625b5ff5e7bc1d43a251972d2b397fb0c0e9def966f9760d98ee995acc744b9ddd707f42f27b8d8d91eed8bb0d4813f6d
+Entropy.3 = 1752d86ba9b212382357f36854099c9b7f9cdc49324b5b1997bd89827d80009f
+Nonce.3 = 7327fcb73b868a9cbfcff006887e24c7
+PersonalisationString.3 = 00275a675d26641f1ab35a7528984a8dca8c97ebab8eb6eb28cb66fe84221ff2
+Output.3 = b81c15c53d887dcef3f883a7d59d4c9c9a0cc12e025dc35edac3bdfddc103075aef3f64a51082bb4192acd3506c485ef3860c3064c58189464540a81048492bbdd30bf008bedaf29c0da72f074dcd1de0a960ec0ba7bd14d9f2387a613c3c90b1641ddd7c3fab4dc87690d29d0e04ff239234f863d82411931e2ffaa1d145f659309ff4a812ebd0b42e73493236540a5f01eb1b16d9b708c096308696fe0e6ebf082b8056cd52fcc5c3dca38d63a6cac9c511bc868a4d66df93474ea8d2927edd1e82860de415aecb983891cc2fe543a2ace004049a9e093e04d4f70de538532665168811a460b266dd67bc690c85978be0a842b39d3b2dde330f2f9a73afb87
+Entropy.4 = beb782e041c9d9a5b139e53d8e08143e0068542cb2b7e5db08499b956eb8a886
+Nonce.4 = cb85d7488309f168aa876d0734d3ad5b
+PersonalisationString.4 = afc9951f1f4a984a9a8df813305d0fd3522bb403964bc59a74a81ed0c85c2310
+Output.4 = bfaa34c4fff641c7aaaddd740fba23c411e1d8b42fb3352c1727784880625d1e361c27aada86e9576769428746007526d5557e391dfdc780fe07ed6efc11867b09445ad1b7e2e2b0677347b9115af686e260f5d931b2018853120726670d5614c6baceaa5af00c0820ffc2a05ecf892f86ea228a8be5fedea5d92a8da790bc124dc9088e39c40ac841d10e2d62447be7d20148e4e82dfc84d5d43a47ed3720a4d3b2c2bad818d4a3aadd5cd82d8f7efe0b78f9968470f2e68dfe00c0d58f9c8d907b39416cbb649aae921e813991665b26cfb454065b0f29783509dfdddbc9ce44c117bb21a38c99ad566ff606fea27d2d9e67b4c052594922245e414c1e3275
+Entropy.5 = d5bf7d62d00accf87cd381fbd180da753d77295d2686363694a701c488ab0c41
+Nonce.5 = 6b20f1e0dca4e33d41ad2e1e9c208f31
+PersonalisationString.5 = eaa87c33076d80188b5fad9b2a8a02bf86444c44da180b96d268b8cfb1542390
+Output.5 = 06526cd25183a00907d645d24335e149ca77df7f85e92748a7a87b61feba04664bcacc26bd3b1ea915ddb05efcc0afbfe9b0a589f059a8e683bf69223dd192bd88f3e2aef159d330bdcb594db1570d66efc1ce9815190e482dea0f49ade057e3877ffd9a09bcc026bf4e067f7c142b0745af14202172b20b22917d040d222aa88ab06258bc05bb9fc82127737f1469ec9a09adbade7a0633bd17b7fbebf6d77d49b53c1504fa1d4916dddaddf929481530d56b27d5380d102e922b359721e94d6fa3bd3f28246b9dd92c1008368c42bc62848a8d190ea63fd5564551576158ec1bddf335e3a4bf9b46766a187b3092b2992e1e6fdc946f037de5a8b2d4e90c4c
+Entropy.6 = 5a85a9bf855fdcf49be93d2526a919a4894c0f3aeb309d40f207901ecc0fa28d
+Nonce.6 = 602a3e7262dc08315232d907ad1f59a6
+PersonalisationString.6 = e5e345b3561349e4d63dd0fad99ee220d9e619c88d5cbdcb4450534346a34b27
+Output.6 = 349fde44edd84d380e8874188fa96cad5908b040c45555b819feefd74548efb4bdaf65d70d8df66ffd0ad8ed1164d45abc8d7d13a0e8e926223e154c21315dcf682d8ae7fbb4b1b3152b4bb847864935987a23b3598b1fff783bef3285d42ca902625e5512a579a221bc901ad42e256d4a6d9731ab506c31d4f415a3be31c1922812c4dada6aa41f2cc6b2093665233c67e9a4330972fdf37b388d8548ca0662e144032b4b6a2e0c2eec6aab7d7c0ba1358e2e0b301bbe416bae5acc79736f43668aa9e5371ce07c39779b2d13e25042db12d60e97fe1dbb5bb2c50d84fd1b151a3f2b1ab48a994354d2ca1f472904ea744cf58dd0b1319bf99a37da6f7fb994
+Entropy.7 = a2b343ca9c9f9529ff55e63ee3ae949a7b6b503746dbd8f7d6218ac80c0bf9b1
+Nonce.7 = 75cf81e0cfc6e785f9726764aa4645e8
+PersonalisationString.7 = a59dd29cca65bd03afea186a4954ef29206731fa886a48206ebf7fb6927a3e48
+Output.7 = d6cf433eca8f0666456bafc8aef685dd0e754809484c24ebe02540eb23aa1347b6c7a50e2dbefe708721b4faa6c789a1bd6713ee9cf90a1ebfea3c3aeeb140cc98632ed1243f54089c5a1ad6e417b07aa2fb6c499d4a61243174c710ddf884f6b4852150ca52b9b720e4695ae896fcce789bbdcdf46a294c745d87d396fa9672e7bcddc44bb3f60c311a188666cf8881372df9f8d5e9c043ec407f88c820efa189256d7c1c7cb80041ed2adb12bde1e0d6c859436c7477af255b142cebeb166e1620e90a7678065c4af0701b56076417723756929b11b2eff02db9c453ee8dddc972cbba1609582bda90a0ae87a66939937e4f77cb1d377232b4616239516ff3
+Entropy.8 = 8ea56a01e2005c37c31497fd29737ea3b4526dc41437fa458f0b5832ac20eb62
+Nonce.8 = d943aa0cd94bd4978aad7c73780334fb
+PersonalisationString.8 = 1a42ae9e19b372b72c1b531514a053ea1a78666c16923df2f2e79e6180006efc
+Output.8 = d6a2ac0a8ad361cfd21fdaabbfa801a355b11b19a1ef8bb273c4467186df3950aded4e5da688d791b82480f8f153da515624273839c737e104d45546e3ecd93a6dd264632109c64514a54d6269e4b532451ab5858f5822e1f591dbff0e059b7f3d4008b568a4ad5da523310a5b26d8db5a567ab4c4a06152113ee8f36a219630391c5dff713f1533f5bc008799156260d6651a40d37ba3943beed438ca200c4ce9fa7ded15c7f603ef42525a44a11d58ee5822085d5b20ab20e7edec9e85b547bbd69bba771ab4c3ff826dc431d6989baf43c9b6290e49d03c8b9994f84f8a284c8cae9276dd0ff1f5b667557c23d6992ae9fa10331b7e9bae6a8b91522215a5
+Entropy.9 = 519b1945befce5d1e96187884347ef9b3cd4e5071cec80fb51c98c67c453c442
+Nonce.9 = 2fb7d601b274bbf70e993d28e0ed8e72
+PersonalisationString.9 = 3b80d6282d60ddc94765a1bf565f7e852dc1f02fbdea78b69618adc620c1f40e
+Output.9 = 84dd67414dcf2958a46055de4fc10ca01c25e6cb267382474a5b9d2f1368a57304c33775099e503f95ff1210d4a67d2096c10f1ec3bf20d743fdd76ebdd256dcff2e0cdc5a33eeb53ba22ef8a4fe3ca9d6cbaf80827256b43817cba35a348b8c98030d0533137b503f32d3857aef2dbb28d77971795aba9c13083f60de3384a521b57492708a4acda3a7dc4b23186835f03692cb31e1de591f52e6e75e7859bceace3e1777ecc049f3998a70144db83ea86fc064e95efad6e35b4106c297bfb2755f7fb30addc540c89a5a8851174ce22fd1b7e836fa05e4808a1a407ba0afb3532c6cfa8f0e927d958a51a59c82cfad3f871d52e14347f156288f7993dbb6a0
+Entropy.10 = 83cc514fa8ab6bdfb3336054192fcbbdf1ef556c3324934cb37ab2560fa335db
+Nonce.10 = af261aca6c9304f2da6aacae2dc03883
+PersonalisationString.10 = 786925c06d3c492a86815236ccdcc4accef343c8f38ef3ba5faadfc85cb8cd14
+Output.10 = 8d0e4fc80515d2e3eefb3502227dab5ee4351c91dd01044c7564fe8bae3a73dc08e9ffec5c8eb9f5445c2230956cffd13276dc2567026602a3f0e7ffb355073dfa01730800e6936425a8d26521e67fa309c426cf70a4929f49cf095e792727197ce0d3c9cc1ef4fae13f10893dd9746c7fb50b5e796dccf7cba63fa906a55d5dbf069fa62ebef09501dfce2f5256589cf51c36a01b14a81d0cac61d72c7a9b8d4af509ec7d950a137da62409a71c61328ff3c7494c6267c23a535f592e914ff17a6d9f5d0c8115373db101cec89f5bb8540e1156603ea965c8728c3c6f80728e5b998aa272941c06264605606b666b328dbe754f3f208b084cc7ad8ae7c7070b
+Entropy.11 = 14f2f83aa5842c9320e1a3ff8dad7c5e4ba0862790e3558a2c72b2de80f7f79f
+Nonce.11 = 74eace5391ea07e06086ac349312fd7f
+PersonalisationString.11 = 42aad660a98483d4c1b67bd7e21d0bfb68ff19c6ea8f752e8083777e5f619bcc
+Output.11 = babea6d83335979e5a00ce624eeb176c3cee353b0a54fc527b3e8a0cc50adf9ee0b1c593fc7eeb9172360c13269f352b589870275b19b653c486c1ec029c115e138d9f87a4dea41f68166f8d4f42c6c7db7240c43209fac2a6f4c51c942b5c660a04d39d9de739ab559f3ec36dfdb742a32af806d408da4f786fa2ed2035571a21084965c6d6954cc12cf222a94b6f38791bcb2add8318495c9acf19c7ef57e410d4abc49c290309a5dc7baed2b07cd6198e0790819bd9a877c5419c863e30ec51a761d042a9734a365d90795c24e26802d20ea0f716524cd4a0ff51d477d0576576edf380c19df4f02adeda7be181225af4531e8ab14507460604bb343cef74
+Entropy.12 = 00fc95fa83856472b00b768fc708a33aa34f2ed9131806db181c866afd1462be
+Nonce.12 = d83ab71ea108ea16515709e570e254d3
+PersonalisationString.12 = fdbb2d6bbc8a928fe4517ee72aee729d0eb1271ca81af6a5088238431ceb7095
+Output.12 = c081d6b891989eb071bf0a0b71c474907265be63e377a09da9a960242031dd90975980facd28cd796a682204f82283748bbb5fae826fd9ca93aa1bd0defc349de351f7e6f20e21a0ab8136228698035aa25fcae2167118fb45209290df4e6913d0ab1c86d3c9fc6f6e0060888298fc66ee23654c084126579ec84695f3a186f5ebd25785cb46e9a59e255625e2818bad169e6f7cc74c534d12364370faa8a6361f9e7bf555d67e7242cdb938040a26ed80606fd06914e75195d534726318f07b8dba65cc62319e0888712ee6538689d59bea3d885e0726295f219d6592dac0789f804ad13ac299f740bb90fe4931015398a6dd5e9fda6341958111fce25e4041
+Entropy.13 = 38dacb8077d4db34f11073e2eb9010dd02dc81ecb8ff3eb9b734f64c48e53fe2
+Nonce.13 = af14d0a2076e6a24f5ca02486ac730dd
+PersonalisationString.13 = 28dc06090ccea62ffa3118dd24bf603ff69953c457dfdcdf1e9faced7d35e768
+Output.13 = 5c587214e8d8da5b7f02254ffb5a22010a67dc6bce57c87f0d0c06e055cab7ccb833f90eb0138a33c5fb4b0d0360004cc24fa15ae5dcec1338a8233479a31d9ee03f9ea28e78495e6abf4541b17ca14207beedde6055c7f2364564e62a91df25da12f61efbf2c22e88d75a678e4895cddface074fb2b516506d0d5fa65c84d2e839bf043a865065c79f11087f7aed7b116c99a4abb3766d73e0829a1c1ff1388629c1e323eef58c49a7e0a5755f81266a67214e56509b1bc46319f6c7ca9255125dc1befdb475ccb600a871ad705d69855db4a664ce644701f044630a57c2ed719335c5b45cc82e4c57e1408adeb7d748199a4ba60f56642c44090092d88c26e
+Entropy.14 = 5f0d1e9762c2724d5f95c91ae417ec0bdc4646ffb3ed6a880f4380d514caae6e
+Nonce.14 = c600da30d68cddd9b823433845111880
+PersonalisationString.14 = 8896ff67866ff1f59c8e5074d91e6b9112410c9b6a1eefbcf05a1b8c7123dc89
+Output.14 = ad8150de910a0bbdad0a674d032919ac3304d5977fc43ad5d5b1fa9be46f22e94f5c2747db228315b0d0505867fd97f9b1582f97b4693ed542c416df1847a85bcd4ad07d6348a4df78412e3df4e675def7f44b1895a8a2156c811040a46198a863c0107aebc3a426b4c2b9ac294b227d323879a70cdf7ceeee7f6f51f102c3ba4ae9a7343aff295b664c869f2c2d6e4396362fdae7d9b5eb0802f37ff7a3a7f1c944044b1bd9b21fbf23f191c6f538398164c2d1b67390e7b059b1c9f5bb031b89a23895ac65770182c8072fb0ad4a7be055d9a4653d08e6b22a61ebdfb66adec2629030f47aca70a06d68c9e1c041ceb2dc9bcd1ceaf61655ef7bbb1653f3d6
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 7b3a81915d5e5de4f743bac84ebdb4fb1fb5c4f9a2ca7bd3500169284073cc7b
+Nonce.0 = 858c19f8f6e2a58713937cadb13d3189
+PersonalisationString.0 = eaef7b7f98f96a154498133c5b4089327ea00d1063a6651449c225308586dcbf
+AdditionalInputA.0 = f23482e50ab28e4fe6a4677491ef66720dc4050169231f7d8cca9eea674728b0
+AdditionalInputB.0 = b03ea1d2ab9b3cc661e7f87cb53ee1f5028a2a03c919795da17c4a5ed4f61d0e
+Output.0 = 56b0c16d58584cbc29f53a7bea04b0cdad156e49c716fe56a23cfe5dfbefdf6afb2b8b7bb348b63d05149aa3257b4c1e653f53eedd7ce6d3088e3c660dc96df3cbeb39f0126fa963d4a060457959deb654aa309d37cb228d0299a2ea7761d09888fd45e4d46943402cc164e96503d14edf8201a7f22ef1c8b7c2ff5fc42a52bf61f227bca4c6c460aab6d9b8eae3bf060cd15025b6286f93dd7ac741e4f7390798ba4719c446fd0c2157febfa0cea4661f32ab285844b55d3943829dded94f67d705bb7704d5246612a9e5c47fd6b17effb5058b7f41539d763ce93fc474b8dde544be508b3c3d3ea7415e947af0b130eb01b39059a58dbab10ae75a709b90d4
+Entropy.1 = 56c7839939abb1e64e91d016aaf8c0a17c1205ef34ce09a5b8ce316d11ead5fc
+Nonce.1 = 37684e58bdfd21397f0dc7f9b08be256
+PersonalisationString.1 = 75d20dcf7b2a40fa63b7c2b7f3a12190d4e6bb908c14e19fa5ff6d271808d0d4
+AdditionalInputA.1 = c857fd57ae571673aea5449a28072fdbe1ba155073fc0a4f1ead3d44d869678c
+AdditionalInputB.1 = d6a1d3c63e3615ba1e47a6c5432608c07ad1db498d694edb3d115e5aebb221b5
+Output.1 = d38e0bee565d8b64da84b7f3fdc7e494743890feef09977cf8f894708db5091b418baa14fed835c6aad306a61bd00b811ec58fb7d49af05d7389cb7381111aa0ec93e9cb4856783c0d3a1b4c9f6b1d969570f06f31fd538c3c5f231de627b133c822f6b74f3f8823bd6e539cf124fb6ea1d380eb3bec076ad863843c59faff660f0e207aa8dbe01700f62b4e5aff385f7b1f88446cea9899aa30ac4e8fa1aa93111e8b1ba9ede84f7ebb57f5fb54a2ba52df1ad14b4d6f4af8a6e35df92ac818eade364afa637e72ce5435cf1548acaa42209d688a9e4103b035caa1cc2f4c64955c7f7634aa010ea30297da048f09f676e57a12b310c0e2318662f94e3162e6
+Entropy.2 = 4d3728655564f8e03049e2edf580dd5ddce55090fd305c83c1bf2ef0e5ef2eec
+Nonce.2 = 7c99487dce3ed31999384173f946bfe7
+PersonalisationString.2 = 6d150a86863c78149798987a78346ab6257ba9beff05dde219543dfc63b79379
+AdditionalInputA.2 = 4396635271fbe8220a63db6052caa53b53e3ff9aaaf2021b16cabaeab1994fae
+AdditionalInputB.2 = 10d77b8b5fac2248ea75b042a0cca8ac75142d00e8cf5dcd236c49ecc485ecf6
+Output.2 = d80a588eff1672318bcd946dfd3e56fd6d4b7ad0a7af508b1e30def6f4faa572d2351591b26a800119b2312ab0912a4dad79cd4472a6c40b4799afa6906c2954e1bb3f408d53920888922389483d306ba69da763fac38097a037987da7c5fa45c0b46d4819b93f1afbb073032bb61fe797632d717220ca5cabd6d05b158340b25f727d5900a8b2aaf99499d2f7967e6aebe764c7c8e215b3297f48fba84e91898996e40447a7eea521992b2ea3fd7d2e179ad42b2d5e4f14c6bb7e56a9ab15a69d9e7f4522bbb118fdca77e4dbd751424650ec8451c4c2617492f79b67f5aee11cdfc380e70f522816f735cf37a03a2ead810b6121eded78aa8b6d9c2ddfaa0e
+Entropy.3 = 7e1be93493e037a987815c05adb3a1782a7c0caa01bf82d6c196469255dbc0f3
+Nonce.3 = cab66ae4483bfe4adb83f3912889f976
+PersonalisationString.3 = 1c6c0b6b0fed5a83bb9bdc1226fa272785df0c2a6beae6ec15dc3a37ff93f589
+AdditionalInputA.3 = adf1ae0b09f84a93752f3beb6cc59e50bc3faced986d03658188515d6fc01eb8
+AdditionalInputB.3 = 70edba7b2460704a9ec2e77c69a4cf9c7cb9bfa7c13b3f2f9587d29c06d17bac
+Output.3 = eca9d2d99b56401c7a642bd215a876b2740aa60dcc8c580f091d9bfd75032f951d50e46e42b65998ade5b7b2a3345ef950db609a9f91dd69fb5dab5c49d67548d2da8a38dd5c16858d6728b9a18c52e6d11605408c4dac7fb0a11769f85c44c7b04f3d1971f8b67acff2a0f9a87fd76c7313a753aa7a7bbfd2edef13fc2ca7552bd8dcac7cf417bc6a33d602356b1b26e0c75fd623d7b65a449089da6aa9dcb57721e06796cb030473d1574560daec8385d9d25cb977a2ca78f772241f2b2767bbc9d760d8e48ac8fef648e9ea13a9419185028de6c22499643762aad5bb67c336d7292dd5fb4f5b3beb2f4b3b2d94e3549595d6255cb865d3829bd27e899e5d
+Entropy.4 = 0295f8d1d700e72f50a7b31bdf46e95d67ef65e1e5838d0200269e0a91a8ce25
+Nonce.4 = c23bd3621609f6ab3bd6b1fdaefe7c14
+PersonalisationString.4 = 112f56fea75e8a787789d9c6b1aa3aad39ed59377c8a6926787e08b0f9cb1456
+AdditionalInputA.4 = d1d7b9aeaf88a0685d498e176dbe749c33b7b09995376173960c0f9673e6d61b
+AdditionalInputB.4 = 6c55e5742872472cc7bd82efeaefabb65c318ac4e3f320ea50ed4100f03e152f
+Output.4 = 13c4ef07a2535d4f187fdc9f2bb3895f483ff7e84e8b7b296ce1b037da06da74bd5e0242b14fdd1208fca43859386ba3d7fac294a0df922c3a0ee7bb7cb8bf19571df5de1d634cc549619795948040c3de4f070f2fa4b5f7810c2f8affcec034afcb1256fb6d78c7a215776141494ff461c66ba6e46fc085035039080b1f04ec1dec14f8ec96cd32129a05743833257e3e66a83ba53daa21c93c84c45a09184ef379ee0282157fd990d93d4b78ac8785fb31d83ca0d4352edc1fce4a29fa21296ff734110aaff2a00158a4cadded842c75454fcd9d0feddf03244bffc65caf05435a68cbc68acd0bb30321a1309f64d34cbd043587e1c98815d8671c1eb68064
+Entropy.5 = 6eb0c84bc55c1527d4ccd1b3d7aadcd4a9923a137650126ec607c24bde4b386d
+Nonce.5 = f8b737daf1f599176cf5c3673c410d35
+PersonalisationString.5 = 7a3025f73a1a30907ae556c10512bd334f6587ba2c1268015856b0c66505b5a6
+AdditionalInputA.5 = 3effaeafe622bd78c4160091b1133a225ba564d9097cc54e6a77a38f4c403134
+AdditionalInputB.5 = 83e79b5a9543c271ee7f0d61c196778a191e4834c1f3e2de685af6e0cf15d7b0
+Output.5 = c78921f981e0c7ec67ad1760b970fddf14af5cf6673dba3e0efba8a8e541feda880850a40cc516549dc4faefe9c333408f7a180b6707744fae1bba1f4d26949d9bfd00a226907c08283d4aef3444cf82dbc7a02e2b086dffc09583a79f2c8a83ab22590010f486938dc5f2927519dae3b2443fcbaa04a1ac2b60c46c05e1edc0eb280c0d93ee200c6fe7e19f2ff7a0796567d3a2142f50b97d9272d8defab3c7e19cba1dc49e296c3e79e3f58250837161f2c67b8e8b6a8e71708b0bae7034f32a76207f2832e637d23e80efb29533a572892da2c7d4e5a453cb37dbb13298e42ad86fa632456727043358bbcc914e60693268ae529321bf1c6cf56287971897
+Entropy.6 = 1febde43e4c44419180b980a51cf4a76fc13892cd91891c5063952046c124baf
+Nonce.6 = b4aa99f656be6d073acfee490eada249
+PersonalisationString.6 = 8766c2eaee8513569b185e328b42da53caf8632e91f26729c55a8f25b40ed8be
+AdditionalInputA.6 = 60bbe1bdc20ade21bc8ff8f11b80c13d8c811250dd49ee9cd8c1f1f0421fdd9a
+AdditionalInputB.6 = fe1515dda260323cbb45278130a5b55d279f41c97bd1d801e0b9cb098af38133
+Output.6 = 10b910e4dcd9c98f8b1b3e35dc4acc7cadcaa4234d7993a72959b4b4cdb7901e51c0824c8571cb7b7700910df027b14538a3cd9ad3eee3e94212dff6bfb21a880fa51bc31fc443a5c91ed10c29ff2f3f613d7f774847ac7e94812a98147d7f30ed53601ccf72dd16a08fdcabac1f5c8997605845b40bfd4bc67e65de7f8ced9784d3563fb39ec58aebd5cafd4283edd98aaf232ddb3c017482ea1d486ad4292e0dd1d7400165ff0aeed121d70ce5fe476e2370b4dabdeb09541995e410880050f18828b33e7cea2e416ce919a9d2d1b26127b3b5f28ec92dfc6db6acf0fa5cf7f189b00b2d4cfdb9d19f2d1759022c89d7857946b72b5c6f93dc3f02ef03819c
+Entropy.7 = c1037e88a42696b097cb17b79d315195a343414e91c2543304157af79dbc1caa
+Nonce.7 = 1ade27e246c387497dd5fa429ffae8a7
+PersonalisationString.7 = 8d519bda15952217c7702702a3df23fd2bf300684a343c17363cf66d659f10db
+AdditionalInputA.7 = db801361fec564ac3875cd362e8f32ef555ddc8041c3aa93ec27061eaf7f5303
+AdditionalInputB.7 = b45a65a3a828b2e999f1e2c1c5795c93df89e7d70f514487f60e3f8858b69e50
+Output.7 = 9ce60b935284f845d09da63aec8e36947d4e6cf77edd2ff707fd87bc30f155eb9efc13736d77a02be116490b8f8ec6223f8515165a4f4fdf02ae7a6655b95426f88f9313f58180be3cfcd073680598f8d50e5960c71d95f6546d082af0fa9f7c0444b19af0d0cbeec55e9622f637db89ee08dd45a4b4a1cc0ec188bef984e8a0eb3dea2d6667eeb454278a7b9069f3eb3c08f97401bd75fc5efb1478cf13d77331a1bdf1b232b36abf4cd015fdb0369b510b461a7cf0321e995a2a41231b0c36e411904bb72c63adf5329f8e5dea67d0822a61e19e493f4f46da728fc83876f5766eef4254105052f93df6ae0f78618dbef4db40141469a348ed8434aecc1283
+Entropy.8 = 305a151591a2f4d6180681d2a94bc6f91a9bd6f3fba692d69cc93735169a218e
+Nonce.8 = 79da15d407559320681ab815c0ca63f1
+PersonalisationString.8 = e2ed74af774c389dcc0dad145d508750ab9838a16ac94310efb5618b87ce4d91
+AdditionalInputA.8 = 48f03495d498520bb9ca485f5bdc554818a91417a785b61a1f958e3bcf5d22d9
+AdditionalInputB.8 = 2a74a432e08e98f52ccbd63b719cd5550da74c91506dc9dd9536df6dbdf2ba08
+Output.8 = 8d2411b7e86f05d8922d998d09bb231ab9c19bc0d3a3548b3c3164a45ec65439e9e98e8bdd5cc71a6933756a521c2426bf6eb6b6afd26609ce390ca181eb373c7f0a26c7dc9b5482b2fa3173d1a35a4f1cd6107034e094f29f55c3dca5669f4b66e363f05fcf24942d826f5fe17ac4ff57a9ce46d8968b91c164a7d1e751f4f4a200bbfbf634496348f0ec788c81c588fee3ac154b56f39ed15fcf3a3ce8cb52e3d8a47bedf2a9573e82024c9c539e5d03163cacab7cb8c54612455dcf0bfa33c5ff02b5abdbb439670556314e9029a62a7fab7987e0701dbaad103ef0a86675c3d198f33ce87ebab684951941f3f3757544f3ffb0ba8159ac0b4c43841999e2
+Entropy.9 = 6f772fdfb0f199b445a3772db02dbf97794e8f360834bd9309e1a709b7e497a3
+Nonce.9 = cb8c3065c45218672f882a12140c321c
+PersonalisationString.9 = 2572b0d48ad946c569ed55a546aca0b73227ea8be4e8fcc1eb550b4166e0d415
+AdditionalInputA.9 = a52971fbf209ca54e2304a63b0f89dc2fe9d84515677b84da165eae137d96d20
+AdditionalInputB.9 = 1df310779604df75bcfa7172e6534ea8f1177c239af950d20e42b2373a795356
+Output.9 = 50ec19b64cc9c569f3af8af2d2b8b462ee6bb39cae0810627408b11ce49fe140c3a9c3fe8c8d48c8b996e7536ee383bdad7202fe50b99bfdc0cd317f482c1830cab5c476b3795bb6c23b27242436b557c803ce3df28a8581ca0fa056e7abb5af8762967b75a562159dd27251076b7cd467313186edd523f6b75afaa6ca180c45f24928789443c7fd0072528445c4e11600d008f23be676013d9202ae0aecc6e0496b64975fe86dc5d451ff28cfd8ba0dec43a7218e91ed8633f0f2e37f260f39810aaca8d15fc7feda93ce9501731ee345639e94832996e199dbac2a4e06ee3504f24c89c0d85ad50c5b0db95afd670f3f09a77100ae897a4d6d9dbe3b45ce6f
+Entropy.10 = f10380473ae97c18efb69f62bfdf96a9631241df6f8ae3b5c9bccd487bcc296f
+Nonce.10 = 2820f64b276e0a27616cd0ce24a260e7
+PersonalisationString.10 = c8d40a0697031e04e8ecec2af6f22a56b2586189ab17b761887aef408c28f076
+AdditionalInputA.10 = d6a6e4581068ac1b19def2a5deb78f105b4a9790135c3d9f006929f5633a70f3
+AdditionalInputB.10 = 8a2fd4538cc2c293152c6fe323a440be096f021ce0ad432cd6b58212aef59782
+Output.10 = 9b33563c4b5e51f5b7c61aa56ca352c22222cd9b189d3814affaf64d3901dc597ae085ee547c179d8ca16b8aba97daa26b2a89d6233d44eba7c9d0f620d83c5c59dc56c4307176cd9f07f8df359cbd8b9ccc86e20886fbccdcabe51b84a0163b12fe7476cac6c92111ee33060aa1051909ec21c10f91e0ea3ba0997ee9b1a709b1c0d51bf5de65a4becb9b863a3109fb3215d48c82d7c6255078ea870411fecabe43df8b7f57a1a885434fc98e614d83068e5b179ba4c23a1e6562606d89c1b28a8e563e4c8e3398956aab7c69101c16a7de53fbf77e8a9b21d8c6818d679d71b0f21c65a5b6f0cb7d16d343a4ad1ade1cf175a2bc122ff913092c9085592dfb
+Entropy.11 = 6e85668f6e32bc628bc223ddd388cc0183fa97f7fb4f4ed5dfe34ebf8b30e73a
+Nonce.11 = 94c09f8a846e4411906cb4625df8ef26
+PersonalisationString.11 = 3d8799bb91e42c8291e79f832e2b8da4298de1c3813675b02419c0f0be5db1b1
+AdditionalInputA.11 = 852e596b80f5a2f84da026c9dc683807e1454e55925896a684824ea366dbe230
+AdditionalInputB.11 = 8f206f1152f9422ecd029a52adb06d7d1481235cf9a0d3ef810883204c2dee79
+Output.11 = 8f548e2864b29471df6fe601a8c5a3d88ddc84cac7dffbc982534e2548cf02baa8d0492ebc8006a3f8c08ae969f42ebe02a1265fadf69834bd39a97e669d3433e02a03fbbbf2bc065565c6043dfd03b69ea6f52c126624487ceb1eb0561484acf7d2f410cfce76edb71ca1cb535dc938459766e8d42d90095ba4bcc2bbaa62c746da9f49e289389729dd38eef8973a5c68f5842f161e6de345ad987809497c28a2be795bd7f90fee14431feda2e56ed7237f16e4c520bca327e40031dc2e52157629710056bda94583aea590df7afccc24c839a8b617d6fee2a9f06cb1477bf0e73af7326ef73f4fb98588c874a26bc3c5185d41b5c3050c7f6b7a24881247b8
+Entropy.12 = 2d5d3331174e39f1f473fce5b314d357bd860f5df70eaf58c7606a386555520c
+Nonce.12 = 0446c5fdd5fe4d3b6e9dfe1fad1bb55e
+PersonalisationString.12 = cc47cb1978ede43f08fff54890b962b0baeb38934d93159b3fe30373919d3cfc
+AdditionalInputA.12 = 3da08347143de1d72bca6daf1c4773773b8b8da0efb728796306ebe406fa6b9e
+AdditionalInputB.12 = ffc462b3943d2593dfe978e37cfe89b596e8a1fbd960695190112c52a8ebf2d7
+Output.12 = 0b5ec2d34426bd29b44e75d0f02b689bbed1ceec754ea8da30a6dbf8323b9b09f8c5ae235385f55d01dbea2ee02b4d72ab3b3db34c12170a9dc4ac1327c9dbef3c6507383dd21f27b2c07d6f9429fd36b6543f7ea46c422d5beb4528e2c41838cc59b48c9db6e340b20ceeabf52c8b6c821688d601ae86a44eb473d3f2c71697cad3ed1f2ceaa4618dadbf62540783278dcfe33266c95804a72ca6d66b09bdbd0695bfce6026d4eea3679b9b192cdce786b82e6fc2736827b6945a5f68ef9463e1053b6df159e9dd55a422f61ce8e33ce0969bd67a1adb29dffb3df3007f2bd1581133bb365124d35fb1e74b1c04a9e18c0f2b59f98f2e8148fbe4b91b3ada81
+Entropy.13 = 4754cc397a9c64527a04e34efee599e0f925f0ce0d262959e2d911eca797f773
+Nonce.13 = 325294ca7629cd7e2a313426063c374d
+PersonalisationString.13 = fc741ba5d5ad59b4a3ab023fb5b29228be8fe1ff53688e6c51f673c5d5fd98a4
+AdditionalInputA.13 = 40c7834e931d7a801ffb819d996a1aa5f2eb4a6ef64714dc370d297ad5ceca4a
+AdditionalInputB.13 = 9a7b8319111e1003a7aadc70749d07c2a45e6e35285307ee9c9c9a4aef03725f
+Output.13 = 7a0a7f3e19f79126e1b0dcbe1f5be9e4f92f80ee712a8501e8482ad76268adde28c4894de72a7afa8d22f88416e0a15c94739e0f03b65e5f30e10a819bcc784995155d8d6c859fa52988e97c81d52ef57b3cdacc03af07a96563e4191e5bda7cf832b310519c933f496b186b6afd840abf0fe02da2ad71c7f2dea7bec0ef5b629a3bf8ee8df9f52cf91373b55d249ece5baedcca7688156b384c6730d7cda18ae461e2bcfde2788465342f5fad384ac68cb6a039a6b4314bf9c59569da3a512458a905cda4ccfe36e2a93929f04fdb4ada2d2b6fbd4046d72f7fd61dee0e97c3c57096e9de975d7720d764911ef2bbb90ee4de8755e7f3f3e50f25499d508ab8
+Entropy.14 = cec4e6fff029cf6b087ef12a8d5f542c722c109d277f1638fe9a318815ef2f58
+Nonce.14 = 8cc7248c77c705da6c57f591ec015632
+PersonalisationString.14 = 18a8d2730025abc2209580bf6b5cdfbf98414e0e837f166dcf26d489d55086c0
+AdditionalInputA.14 = 4adc98c66aa72da2c63172aba2a6c59fb20aa7b195a0b79edc709bfa994134f1
+AdditionalInputB.14 = 83485ecbf938b8035d047956a3a1bea5adb66c4a7a24b21dfce4269681c31bae
+Output.14 = 6c69a58a3b27c73ac396840a93ff914219fa80241d39d65890ea612017d7b92b12062fbc0e3c39508c86023f7d70e9b156b4a766465c01c554acd6b5d78568d2087834b3b14f3fdc4d4b959e78ae2fa5298c87321b777afaea4a5c271a584a23a262f8b679cc8198ccd116c88dcf529a6677ebf5189d287f56eb445ad7313acce013b3fe49fb5212cdc3cf8c5ed15aa26b1135d7d9e0570719c4230c104a652fb36ffc57e219e735c03346d18eb57bcba813965bcb39b6a81da624838ba7b9a65d3b684a021f4071c66ce705974f2bd0ce1ad6727136d77529e3b400db0d14ffeabbac877cdf6a38ca66d83492a90482343a5a427ae8b8f77a2f724aa30c11b9
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = b6218db4a23ba91812f0bcb425335dfa82535f62f580091442c9b84d13520512
+Nonce.0 = 0af3420dcb3b3c9fcab87faa4b8d424d
+Output.0 = 4a7de883632c3994a36a9ddea329a9de611938d1ef7664d253e5521aaa8351fb2b0dfad134ce0265c244fe0bed3a3aa92f0d1a9c6acef83f7de0ab63f8f1c3d7fb0ba92789ccbea0d623d6c13fa105f6193899a01058581c75076fc3b3e4efab80a43bf44d001c04d8d506736ab1f89b19e56964d7963c05b9012eee267a724455ab95661b8264f617be5bf9cf3f802faef499e678f4ad60bd4d0ecdab530e509c3892e285796ffec16d86944d680f9798c1d3ee68723d027a30ac4a24cd786d4d831aa7d513304dace72161c247206c87a19138545abb73e9f3d152a633db771b8fc44a30ef80cf51b72cbb2f3c6aaa4d269d21ca261c4e37b738a150de07b0
+Entropy.1 = 40136bc306788c4cefdb176bfece4f36a6394877701bffd97c3ab18bd612570a
+Nonce.1 = ffbc7fd2c6642875705ef4fd03626c48
+Output.1 = a285cafeac40e0f69ba54aad2ce4729c7dfce5986280394d21415ed3d01f42d058f6398cf8f0b66b1d106633485079ff222bc776320f545bd14dd1493558475c47bea679ed53bc467cfc074e80172ee4ee1a69219e9e0a363e0943bab755e321be51100f86c2699999ffd1e28c0a2cd5aaf39ef1a0650e0d2836ba8019b459f37c46a1aad8ebcb428212571d3311c5d62566786e802d8c332e23edf9520545b6862b9bd5c1c3956b469732ee9c613fdedcab0b549456ffefa53f861bb6b2a2b88ebcc6e0bdc46e599d71508029bd38da75dc3c25e72bcb005388928c65bbd95c1a5c998ccddd238f61cece503db24f29e7c9a8cf9e65ff6a1f3d1593212662e2
+Entropy.2 = a7b5fb892d79e492e2c8d71a0102ee88fe3f59b8e4ad9cd1d81b060fd8003971
+Nonce.2 = 7cc6a54858c8cd55f2fae01c56697c6a
+Output.2 = a470511f2b6ccc5165bbbf869c310ce23938ab12c43a41f7948d33a82f11e80488908d06e2af77fb0f20afecdd0ea10066b620d31930a6bfaf6187957b6e6f81b55d2e1326961c9ca81652a9596dacb4902ff4884b58c5a36b8c05aa3c13b67d27b30ceddebcd53fd8b4378ccd8d6120542647b6890c4d02caa295d5ea456496113d3a08e3fac09111eda6a045a3772bdbc70a83493d32a3204247c616de698107aa903721fd735e9fc54192e7c8bf4a6cfd4c4f905a9378b4d675abf7767c49fbff7fede516f55a291023cbad78de62eda3626e31c1ea8cc59a675bacdd28c03aab810681ecb2e56304c238fe24a1c77c9e6e3418d037a775f6e92a70698fc8
+Entropy.3 = 69b215896f256a733071f69845c6cdf74b9691e7763441de0e773a31e66443fe
+Nonce.3 = 066baca0590baa636f46ef08f5a692a3
+Output.3 = 01c9fe0a33ed105dca11803a2383c6d40b47a5eeaae652aca48a13e45ebada151ca8d67ddfa80695072eb6008265976e7a0ddb1433067d9f713f0a227c8790542a8fe78d7b22473e54bd4a8b5616db0201f1e9038beb957bfdad898b1c23e8af9c2b7fc2c9f96c6e6ffdd2dbf573cd78a6c340ec42d8be6025f86e873c596631bc3477848566ffbdcbd68b9e76cf38d96f4f01d8afd3962fde3da68a030daeb0034ee83fb292c1c869d9238af670a5dc4d6788205325068cf1656b4375687ab032a362deb0f80e6aa6ccfdefe4f98f77709bc8d6b6df8324a768dcba833f89538dfab26ed2e4ee631207000658343e45655ef5e75825c7810079c8092f905193
+Entropy.4 = 6b1e50fbfab2832c10f5d700df82a557c65e02c76c93989f55440ef504323926
+Nonce.4 = 2237e475dad8bf250e39186b8ea84c81
+Output.4 = 1ceedd14783c8de93a55f78d671ab637df79aad2aa6c27a25e47adeeb972b70c03695bf3868e06651a58fd1bc9b1edd48d8a9f235d24dd6a75f62e70b27e8bf3e6e3f50bb86bff965c5e8825054ea8bc99b92f78daefbaff65ce19b509e502ae7e1c7d64780e9daa88e8080ead7d99da186c5862882b696159b9ebd3119cbd6d5f59d0ba28123c86bf9400a32f3328b11c1907d818c9d50686e3431b2787f0c1e5e193c2353f9ffaea36bec23a0b81e79d9421bcc7433218d4ace4fdf77afe3653557698bb1ec92cd92fd6e3e819b907b1d3b17108a119522d85b62cb78e52523ff53a8917f4794f2b588f20ef0e6d270900a67db64c06d074761220b9bae365
+Entropy.5 = 569558ac4d144b413ccfd7190456fbb9774bfe794f87c8287fb1d9793c10f4e0
+Nonce.5 = 3dac59142e1618546d5daf95d3fea0fa
+Output.5 = cb4a6120b3f246e8823342bb72b0e1fa96870c444046e9118626aae0e127f79a69895508a0e40b2adfe07ed0f92c2cf72787886298350983ba75577bc7c3ae4f30d66bb1c5da0a544d0e49edc45f2b7d89179e55c12708055340f1588f2b10ba3151e4bfe88cabbe5076a76b6c747064f770343ed9db035aa3ea659777cefd8c14f19711f2516b5d4ac4228e060f256c1824f795e194f9f19d828cff81c60368247bbbc343c72eefe28dc01d9cf15d81f47c0691d5ed67a4c499aee5ae7b09072bde7699f4eaacd8c4c2d1f6919021304027b1a513bb65f669b9451c234011184513b2703dc090461419c20c7fcd58ebc82de98335e0eb504008c0d30e8d7b0e
+Entropy.6 = 27fce7d15031d5dd6880083d1ec5c2a3e8625b8c4c0dc0d7d438266ec7de5689
+Nonce.6 = c59e3bcdc1f6e31367e7b8b958eaa7d4
+Output.6 = 6da842ae1a45995da23d6e3b5ba2c0ec56b21624a2fdac824f3fb3b04fe416054796e2f06977838cc4f68d74d94410a1383d58c8a044429ee74e82fb4ece69a05e805e03965a757d58b66a9f4d224f41c35758a245d68889d60fe7651442b546bd34f8aa01dda206bb1b244d20243cf1e012b786b1992e0366145598ff19eb05a7e6386af08f41a77371bffa59bb69d5207c122b8ab6ed9efcc35e22bcaf7fa20725b642cc5384f261b6a853f3171f9782c50783ccf3d29bc699c565b8c380446bdd9b3591a60cfe455979de800af20b7b9b2014dc7d010a890c95c8bf41ae4144e5a764e0b067000e3a7ea325e387ff8915c13dc48874ab3399669c6580e42c
+Entropy.7 = 0ca6f97189498ec6ac12e2e5cd37a07822b4477871483af627b4c765da5161d0
+Nonce.7 = f279ca8bb4ea4c7136f0ad8fca7b7d86
+Output.7 = cfa3865020689702cb30dde9f5901000146b9b3afa92b34a88ef926071c5f868c7e5006ae33dc38ed990006f3d7ff1b3d412a325527effd32f416e19394d435043d3bee05166f22b8505fdefb1f28053424be60457833f988cb426f4a8279742f16d2163a898ef6a08c85d5fc77a8b127efbb118d0b1a3c288c29e8e0a299c9e13d3935ab6ed39a8a2dc222ae897da1e34ab65a158f7bf01ec8654e39761fa3809a16aa6078e42bcf57562d213218849c27a929743e7b2c40f6fc72b2d78a3f11f9a7c1831f02593f36e0437dd6fbff652f7f0d956eb9579b6d178f5b34ecd29825028c04810fbff369fb0b65cd23205ba939bf78dbc0310ba15e20ac7b22d24
+Entropy.8 = 2823011f32eabe40c1131b36c9f001cc28f7e86f15db184124c15e26b8d01914
+Nonce.8 = bd4af70749da0f3f64a915dfec31e50c
+Output.8 = a0198acbe891a7acbda52fbe35181c97d58d39844fb2975c96eb0dffd606092e691048ba65295bf2db16aac82b094a93667fd18c23ad5c0b564120237d3c56da6eba0d39cc4d8e023ef15e7ead8e241cbb8d0b2560bd444b84ab3c85c1eebce0ec40fccf680f2c4d440214125a2735d889da956dc3a895c7a69f07854f962f354e67524ed18863ed71d3e77816bf460b171fbd81b0a7c364c0f6ee18d32d7543a13cf5a7d7b992b8bca523e0de92fab578f980cac24d779f806565467702f75021652287a96adcc9f420e2acb22528ca77013501d9c7e5764f625f7edaa52a26b0ff184f343bf24477cc54c893c1434f7bf38d18efcf255c397b9a70fa0b64df
+Entropy.9 = 15dbcb3de71426dc0aea3a0851e7390af9e3bac12e1db58dd931d4ed2d9682e2
+Nonce.9 = d87baa587e87d5b0c32d734dff92d9bd
+Output.9 = ec3246fca162a62512bc4ad2239270b2b0a98b25f6a7bf0aeaf80099c4c2da07e33fc1d58d41d85df68113c0d0decaa92a3838de2d99f807d615b2e969669422d9d52821315baccaf3a3630b2a7bf7f2c75a59948974759f6bb53d21ae9b981ee54261168d707eb45c0e0f7332ba702f1be30873a96f66f164ad4e78ba0ba3e5fbef4caf4b1d807e7233380f34a6d48013763bbbb5c6c16a83366dbe061b480ed45c8901804b117de73fc892c819ecc42951b130465e30f4c54f0112ad62f7b1193ec0c7725ab6489d343178b212e74ec147d3fd520a9ad9db384073b22a6a478f64b37a2e76cebea0e246660cf80536145719eff348558a72e84eb50245cc15
+Entropy.10 = 6a36ca9ec24741c1389ad722a350c61008ce53432c24365cb6a60de26fff37a4
+Nonce.10 = 50a4c1c05fc3893876e627976e1ea388
+Output.10 = c54305f7794a66781bbafcfcd1a5af259fa3a8b4d47c4e3ececcbbf80f885fb50dc93dcc507fa9109c238bc724289f5e3c765ffb4289ed0fd9bf7ae050c0154d11413997e61789c8bb806c61f4002a63bb2ca21bac9ca65abe92d0594da90c4e122b6ca9d0d4db29265783defa05ff40ff1e6c5089e8c1133d85d8de6f5cc20699659ba4d93e076086bcddb51bab709004e0391bb932440c951ee064de58795c14eddae19dc7ec8e2f2d168e90da41ea4892c348983ea07ff9b961f4a09f6a9aae232ce69760a2d240546b19c0fad337c764a480c9b6150b3db83f9c2b65ed4221433554e5cdc6bb18982c11755717c10f4f1c7cb7aa9d2f388e04a052f41474
+Entropy.11 = f42f1d6f989cf2df671516b14a9a5d72a4825ae220e52b058cd32d09802d9dac
+Nonce.11 = 985aec205afa866c62d988545950f210
+Output.11 = 65b86867a230ae4abc0c4e4d8c6836a13c1b289145df5111dd75a2c863823e77fe68925696f51e9e9e3ecd8d81ef2717ba90a537f7f48d8c242e4494bda43857314893a53dfc887ea27a3f8fd809bc536e6bf484430ebe45ada15426b5d2d994549cd800280654b29ee75730b8d533c081fc63a97b1751f50a33914ed84f4037f3e9b41c2a6c7b6e438b89b08e55fbd1040d289c2068d9f7529fe459ae9667201e2c421abdfaeb52cf0f242040b6cc5c8ffb5d42f65c71d842c6c7549a4334afba7ddbb36cb98f7c02a985a54ed270b730949db4bfba95034caf778cc9e6ffc90dd9d151e12d62cb400a44e2d5d2cbeaa33814d61a2875396ab2d62f27caa380
+Entropy.12 = 52c8842778efd89fe5b79bbc171d48f3406c5d8ae9021e6ac2baeb843a665fa1
+Nonce.12 = ae7456e2aab8f0e2a0cf0fcfa93f2773
+Output.12 = 6a8df38c7526e114d111b1fea1306a6cc3553817a8250e2aa6104a83d2dcbc8dc93022b5e8c8f975df44aa07b1cee181d7f13164d1fe7e1ac7dfb1958edba6602d5bbcafb7230f27ba2c9ab4ebb8e27db12799432ce3b2556bd8ede157a669e05a3c892098d428b077cf6dd11bebba9cf344b50bb27c301eecb26dcf38c3d8d63f838401324c9b3eae291ae9a3260a417323f03c75669853acf9c36b646cc2ce6258c6504322fb5b799865a94cc686c82cb66f2dacb7bef9b9223c63c3f2633ea5d77015ceec773bc1ff81329e182a51a49c0a28cbb778588fb4548f1bb118fff6ec374fd90249cf2e01a0706e7251d23fa2d282848b533f2a0bdf0d99ee8220
+Entropy.13 = be378ace07f021f5a253200be49caafa203ea2fb5e2be0e08a10d1ae70c213b2
+Nonce.13 = 651416a658d6ca7140322a9b79e66b45
+Output.13 = 307212bb8be68ebe8bde498bd83356c4fb38452a83532e2021f3f1d158c9e9eb8b1594c03d09f313f56037fb9e5f44707a570ea56b55e34c60eb4ba4e2c40bff8f79883e4657be3fdfd587ecc64303f89866896dc9fe6b28025dcb47ef6d49ac368f069ba4d274f93ff58bb7cf90f1e3b97f03ffbd727414e22dd26dc96aaac40b61fad8247ed21554c02f4ef8ad32518c5548300540c7eaabf194c46a58a08f4a637b77521d0d4829cdd3f878e7b44287dfefbaf027374c8c7d5ff35e2a455ba528572b993151d6b5a2cd1d87579182d348e497c9796a7375be6791d6b95c3d5fa6b75469f62dcae70a2c736cd5e44a3d44797975f39614873e3f3ab1b2ebdb
+Entropy.14 = 60da58990a377a615436ef43b1199f88c7a4629653dde2350a4c5115c42e52f6
+Nonce.14 = 592033d0de138ae7082c03553e3bfdf9
+Output.14 = 7a770dbe8e1d3af1dae5b93acd9e6f1748a4a6a88229a875d23b37665e0cc96d888dfdc428a32cab378a9ebe22409709cd9d11f0c751c08d98eeac13b6f76f0f51ccea254cae23177c3aa207c59b5ce221b93442d037256d553275a6c4b5c83c1fe555a630e37d8277e02c050c19e145a71ec98b96ae3ae44c9ff87c4501c1ff7fd5231510ac9df623b3fb178e147f07d1fe02b48e877cba89a822c91b5af56b71d60116c49f80d87656144854909a7d718b5aa8f071f18357c2c9f9b6c0fac3195040f26b86aa936fd35ff37287aa140cd01ca6c5e577d815790d6fcb1a57569d23e801e2eb2b669ae7cf17d87f9ee66e0b515bcab09087e111da199b6a15b2
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 5f53208e154142870bd3b5e7699791012f159c6fa39dcdfd616076cd077b8c99
+Nonce.0 = b3dbe0e037582ab6a069c476403ff299
+AdditionalInputA.0 = 815e324f0a2a9049a706800f8f324e878b25acc3d41dad599b2c99b463eaec2d
+AdditionalInputB.0 = 5e932309c4a6d905fe2d9a1f45f999601e7d7e33f2716284437df58cabb99a60
+Output.0 = 5dd8c4bcab8dfe2c317c294b0141ef8902b0ea34d724ba331308c223fe8a5f2c4a35b93e0195c95791db2ac50d8cb967fb3de881e9dc7e39f04c361a11c0709daf35b1190141865f1a5790ecc91e0440020089e0393f0dbbd7a0869557edc8d9c040b9bd675ee8ee383828de15828b5eb630df9974e7468f7f762eafb66649a8e2275662c9804fc427089b519edb4febab2180ec6f3ff67c0315f28c4110f64c2adcd220cbeefcd8d2b09421ee8afdf414be79dd127e22e7c3c61a4f1320d70f1824f5e43535e88603d308f36ef7fe3a407eda266b848df00ca98e4c47b5c0b2e3564785acf4de9d96d7c24e7617eb97b80e5471425d7742fb5d6b13e5bf505a
+Entropy.1 = bb818f4f8a274a389f126c58c15f061d62c411eaa899cafdb7935b8d00e566cb
+Nonce.1 = 3390166bf88800dc613ea80b2ccdf4c2
+AdditionalInputA.1 = e08809f2532e27334c401fb857602bf0456dc0604c6c41fabfefca66ec0ecbb6
+AdditionalInputB.1 = 966fb68f44729db7b190e26bc5a5579fc1e4235d85cdf2f358756721b92ca11a
+Output.1 = ae5c1f18ef751caf3d68027560756cfd2735a32965c5e2d4158f5be3f3fb5ac20d909838b2a70d7f296ae131c1d2537f38a98cdf8dadc9408734cbd91b297e7580b34cf45b0e53fd9bc82f82843e4c2c3357cd9fa8f4aef427c80f9d9f56afe52bc0ab4e22ef8cb59947eb36234d8c10d9f79c38949d2be1f84493fdf1d77de2e92ab574562dfb880359ba0a810aa3f8120880cc13ba01e1f83d3135ed34ff0dbcf784be88e9cc9411e9f20442fc648dcc95375e18d8fa72e0a1e2db5a2671ea95d892ee1c005316244c582cc6754cad181c32d9898c859fc84fc74d259314561a4f15541b06f05fd38a4c8d239e79eb125a0c28b30a0f40516afbb3fb2ad1a3
+Entropy.2 = dea954fb58c623d5a8d3a3bd716ae4d76b03d5f330379e4f67bb890effa29c30
+Nonce.2 = e90a327c9ba71a8c36169d8f9c94281b
+AdditionalInputA.2 = 40344d2e6579f10b751c0844db402b3ff324cd526459b1f40a176a7ad6d4d2b9
+AdditionalInputB.2 = 26a9b743844cba645522a13f60ffd612a7614db918262b8e2a93f4258089aa49
+Output.2 = 88f2f7499df92259ad5f83d06c9af216887a469788fde0061bf4a52c98f1ee8863d0ed4321830a29181b3cfbaa4375f458dcfcb9f9477c0ad323601ad253c68904ae726277fda9f5f0a9ac4b012729d178f68fa122b8d60226b2aea534b175c7c46071ac1698e3f3c0edb61fb69267a174f7a60f2d7320b1251bfab3bf392e2a5517f0c3befa15b89ea27f045e1eadc79235adac3c82c7e6c8f03c24fa339c19e12d9c31c61881609d9274dc6aed93ff42fcc205cf0490468ca4acf51dfa07560b276c3a58f30d9109c6c374848ef72e0254b52ee4fa2ea570b6b465562989ad4f401e4191bc965bc6a6586243f77bdd3e0401ad8da0ef10233c026a462df1d4
+Entropy.3 = 820908ee00440802209b601f7ccaa1fb7aa7fc966204d5ff8fad79e2b9239057
+Nonce.3 = d6c900d2d66902aa4d644622ea0c388d
+AdditionalInputA.3 = 619ada6cd00fe08da88366105240ca2ef102fd81895bb947e1ce44b3fbfb1d62
+AdditionalInputB.3 = 383bb8f61fe8db188e9d1301997c82bae5939016737b213417ff0286bbcb2adc
+Output.3 = f7def9caca640ea612835f9b3ba79a1b59b46ffd5a158b387aa26fb4d25c2d7d97d6710bff02185cfcdf66f3fe5f105800b6a3c7004e1e28e9e7b7e1a032042229faae9039466b0f03da7494529e4ac47be1ff726c132712b7c81ed8aa3ba9d22a4b5ddbe5559660306a0dbddc50bf6c0ec6c0b1b7374a2c600268d56d3a555bd4a7f361222aa46b9f955370566c25a106cdb304f2c27686f36e43599e3b99537eee63feb307d1d289c548bf0affa411b6f9e2e208c269dd0680404498195fbf3d0ca0b52edd9db35ab08973f13011b19c5f5e1447f801135def683dc08da9b6bd470f332d9ad6bacc54cecf423f344143eeb8da4735c65e490de4b50f261043
+Entropy.4 = 51cd23e202aff376a80967e00ada6881ddc313f2b4d49c2a20baab822d00d68b
+Nonce.4 = 16b14ea136c036895bc99cde1b51cbe9
+AdditionalInputA.4 = 88890ae176d1700a9d02ad8132fcbe9c53253198b0480a7b9ef88a4117b35a35
+AdditionalInputB.4 = eeefdfe8db8974d99903ca7d73b6bbdb0c2144db32f14881679bd1910abfec9b
+Output.4 = 770cc0dd8ccb46c9a6ccde3e0fb6ef79ae32876f925eda7748e11143f26218283e1ef6e3ecfb3606460e930bc058127ca2ceced930c98f6a5c352eff9f162d1a711b9498f67904daefb32b4f3d904c0e5675bf01f4f0e4622e9e3e3a963ed9bf8ee5dfedef7a6197d25ce5504a2c95146b040beef60226731cf9560fc81ebf7571cddd6af11b28c9addd5388e59b70301eb7d06a7fb6eaa94df67c9c12f2c61d317fa5588d1902607a0b89498d6ecd6357adb779ff188e105b1e4c73b127af8882b70df611d28cb426144b130e8f1ff86c9b5507848393dc8a5019b8ef5e8049d5e6999017a1d72f933aef9b839b3f1085bb1f73fb54efcd1c59aeffd2a52f13
+Entropy.5 = d5d6de67a46ef58206c34edb08ff608a67a3742a9bdd482d16a056fcca001003
+Nonce.5 = b011b34571594bc09bf9079c48c9e0ff
+AdditionalInputA.5 = f50640c96a263bd03c79a00cd5468cfe14a3b634615336ecc99639922ff632d4
+AdditionalInputB.5 = 6ad766d17667c50de86883b1776c66881561b6f40b1caeec3ab37de9104af2ac
+Output.5 = 899c67ed7545b4ac8b00194d139e1f11526f0c979df0ffcd3bcc0ef9c4b6104ad634b4ef51173c6d1a5dfb974e8a348dc7469bd6a82f176b0397598d4c36e9483426265c731843697fa3eab07d74645cfea34a704e36f14a5930bcd85320689a61a1315776153bb2da8e564a72f35152dade1db717ac4b2b9e5f02aaf134a195a7a53696ae140d600e16556cb17bb0cb8547c978c3aa659bcd21f83596968143b52d6bbc71ae2a14298e05451bf603e0ecbec8df6d732ccbba1aaaa4208bb34b7c74ffc94a3a4e8972d3e9326d8b7764e20a2f7075eddc93fcc3e254e5f7550115429cc41a5b11ddb194e81c34fbe382d87053752eacf1359a4fefb3a5b61743
+Entropy.6 = f7c80f935ddbace79a6147809118051e8141423645a2e1eebf57a553b2ac28a9
+Nonce.6 = 78db18cf3e634c7732b4ffa2c192bd29
+AdditionalInputA.6 = 82ab9e0d20e003dd3dea69ef9ecc9abc3fe5ea082b64247b51f205eabfd4d6a3
+AdditionalInputB.6 = 8836a391fef74c69202479046b7580df4eb4cf303a8eb1114f8037f4c0bbf68f
+Output.6 = 13dbaa43f4816f53389767757096586cf38e995f077220db6fbad6e09886f808c6c36754d3799efe1b56e93ad0fc477a383fe7eba6fb23c8ca11c2a4aaeab85c2430b404dfc547103ec4666b23089d39936e9c8df701f9ba2879700b54dd15538a1d7950a74751ad6b064df8173db56a0e6649abdc4b32323f4ec4c1090242b62af08d20fbda2a80baacaecb038e74d88267d5da9a1a29efc2624fc07c6f05067cb6167d8e1dd6b683ddd29b2d752f2b94d689de199701dca3dd9e46bb3b5888719df46a2e85d2ef59a82ce6068f340800eaa5f86e757bc0d80edd9821255f1147b8d6fe44195d8954bcb0bcc21cc01111875b023d6b363a0f9622f2e64bb5ba
+Entropy.7 = d134f611e1567c375a31df7a78d82ab95141206f1683bb9ef68f3ccb1c4f761c
+Nonce.7 = 1af760c8b834873c3eaf9acca1ea5af4
+AdditionalInputA.7 = 2900cd4c73855dadeb86f3a30c2be038f3297fb4415cfdcd21e5be7c7bc56d7f
+AdditionalInputB.7 = a0e3f8ad05c6fb4886681307df507fec0e4536904dfbf3fdc0bc2e698dac6db3
+Output.7 = d84e7542049ce66bd1e2edbd80dd2e06a2e24b022f65e2990d1583247af3b8833f8ca82acf4c82edf76acb42e580f08b91292e77887835717554a2f3f20ce5b0015be903b4d12cde464647a4d82d8ceb6731e01b3e700f154a3e1bac8c0bc716d1edcc105408e301a712d3be7cbf126a01e8d93f485d5ca28e55658fd3967dffaa2451eeef46293d10613d9dae4438a44b4381a4ba8120dcf7363b89a3980b87e82b2e523070a5fe07692863f6a0df4ce54f4fb5bfdd33c31f7908a20ac03333b066c78406b549e386678cc72a31f5bbbf0c5d1f0b1a68377ed7494b8c179a61b4751a225afc3f9bfebcbbaed95817107c7d99a08b0ee437742926b1ba83e368
+Entropy.8 = 9a3e502d7da223add9f3c8fb3527f20f3dbb97a94c65bc05eb7ce54db88ed783
+Nonce.8 = 706802aab465532b69543cc639ddc05e
+AdditionalInputA.8 = 15f0e2ea6a98cd0cbba6318048ae88a7ea657d426f4a645b64efa61caff37942
+AdditionalInputB.8 = fb5e7247715f5ccaa096d9308cdeebbfdbcc97dcf4ddf1b297aa992685f194da
+Output.8 = db0f1565840badf175610755f3d1fe64f39a4d371e718207b2b95d10331b7d39307a9f7cd8fa4162749bfd78850a834918da20b4139dfe96ad96771f4b7433eba33c261a7385e56c68bdd8dd1e6554972c2d9ff03ab1ac558d1ef755bf53ac35d19fe2214a1696f520e66a2d9b367cf8ad0366d7985b1263e5e96d4de261c95b7563aa321b8bc33725b64fb561ca1e80a1fe0730b4b1aad4253f473608fab97f97af2cb189c662693f3d61aa1e8c83b11462da8486e14a1984c759f1c1359d1211f6a83dd34014fb7652b91f5e6991504cea02d5d5cbd3ae925c466d64881e14e3ddc6f04dc87b4eee3bc12c8d47e106c90e9b8d21d538f25dabf69fb8d54872
+Entropy.9 = 8dbe6ceda79f9ec5968419ee111be620c583570fa490a49a071405ed4448b202
+Nonce.9 = f05875f10d53da7f51678265d1984a0d
+AdditionalInputA.9 = 5bb5d934e6e1b9d39e45e1fe7feca8ddb04eca581b91b005327cd785fec7147d
+AdditionalInputB.9 = d7a3fbd3124c4a4e2ee1625f376d46c3ca67da15e07c44bf9f3f43a1713cd9c2
+Output.9 = dc028d494668d26fb1543c61eef669548f4b3801d94542eef20fca7517a7ad157eb4eda652953bfcee238865a6f467eaeb06202a5a023d4b76e023e796c0a9d6f178b9692e3a4d39b251eeba404c541f4cab9b1a5de191312ff4f849cbfb77f475a92dfb66872e34d8fcbe44dd8ee021b5702964fdf1cd66e11af019086544504e67cc41f5e9b122caa64ab754d4f7474dbafa494bbef2f4a986113d8ac68ae0eb1a28fc315b47c0513184240c226a8d23405313e9304e5309618677872a9528b470a98f4ad836311f16c96906779dca6a7c30632b4308115ebd68b3b914882de9bcd9c27bb8052e22aff9e64f273505e81b9d62288c8bbf348e10667fec1d93
+Entropy.10 = f7f6ad0895eaad1ddd1cba9ae3ea7e72375113373bba8ddce7a3f4265da162fe
+Nonce.10 = 5ea3ee6c43057ae0abb63e20114292d3
+AdditionalInputA.10 = 10e9e13d7c5eeed771b055c7800a7cbf5adb31a375eb149eb0f5a0fb6e6a2a3a
+AdditionalInputB.10 = f57d802f0a785cf091bc049c8d89218ffb0496e7a3454565042a4faa7565493b
+Output.10 = 62c405597f42a01697505e7451eab48c9a0003d436e335aafa78c852f9ba4cfd0725d2d89a5800fd2a7e27ef6a684b784d49cfb45253ff821b48a89dfb18e22df31bacf669a1c1468b95eb5e98ce5dda8bd7ec870bc945b5ba6a00a41b9c33f3eaf9aba275db7de27cd5a378e240a203511fe8782bd29dd9b6c570a48497f9a304f021bda8c72573a4c17cb88fb9cc6c116d1040849d44bd574fef14eb4bc59777526aac55d8abffdae8f57c66d6ce994b344222c0f08d9406add82035d5d9415c0bc7087a07c4a7e2ce26949dfa8f50a974ac6ca9a75ac346b902220a6096e87011de6ca322651e45a065c041d86935c22697001dde6eb32a520e593ea997f8
+Entropy.11 = 57bc52e811ee4b385592bf84c17facf8ff317af891d9aea1c17d0cdea612879d
+Nonce.11 = fd6f5af68a70cf478ee8fd3f304a6e8b
+AdditionalInputA.11 = 2f67f07bb95aff6be49b5a4e3f8980423b0ccefa8829ae3fc9ec71e57989e95f
+AdditionalInputB.11 = ebffe7b78896b7370b6296fef497e157c078386c26802c5dff1213363456bec1
+Output.11 = 12135b33f80f80619006e163b58fbce3eff54d661d009c587cd7ce955232af7df372b705ef2944815a0ff042988d146bfdbd164b4c7980f181216fb0a314187acf1d0d8909a68ce8ede9866e660f419d926cbd867ea355fcb494dd54b864fc134441b50bcba88f6acd8af11595038fa3ec74797c0e2aea3309312cba16c0ba9ea64990a74290b324d2f8fb906a4a980f8ded2c7e55cd285870bc4944b6e9aa6ed44705d7123971dbcd093e5340ae96ba5d3b32a6a7502cb5c377b7012807dcc61bf66fd3bc714944cd7c1bc90a749c6abbea31b2b2ca81ca3c72f39ac17b249a63c5a44ed0a67d4aa5a9b130dc6f1911dbd37ff59414796c4acc80cfd2a9d9dc
+Entropy.12 = 74ff892c65ad587d924d3bc94b39d6b67f9e0497a4e5c90bb5354ce288f7cc54
+Nonce.12 = 793256703d13afa4042e306cf82d2979
+AdditionalInputA.12 = e285d66fdba2d8e54e7b8b82f9d917a4c44a92168e006c808d68fe3bcc120be3
+AdditionalInputB.12 = 8172748d6351534fe7fb89996841768e56de1235a0bc7166d728e12d6b302434
+Output.12 = ee1cd769f5eb1b9dc8d757f250d22d714b0f8b03ae3532699b45d22baad8d4a0847d93787dad403dad8236a15b13629cf488dccefcbbf27a5d542daca2c9fa78f5aff61041f70570b245085e83ca5aa2fafe531d352eb59b3e8c29754c3f9b3251b78bccf8e4e303cd13894d0045fddedfcf2caf6266aede9797181436b507d6b0f3b64a4dd6af93ecfa30f6e48c917e3bbb27322520af2ec8fa6ed0e9b76b8b7fb96ac80d836f4801a1f3ca128a276f49d1483afce0cfb1dff280fb995b7d5cd5d52a437d9476fd4de49f282f96a15427ad9f490c08eb17fd5d9d2c66a0e30625de1ea267c811f450a06d2fb118492b059b7efcd0efa66486976592d41af99b
+Entropy.13 = 1bd2f883cd62ca34f206b5bd3b6548a0d2e19d6aa02e41066bcd8d62ac693735
+Nonce.13 = 300f3444d7a7dc04b1e602f79f57795f
+AdditionalInputA.13 = a3add73700d673c7f68370de1301ec6cf5c74fc67318e41ca91540168a1a0d6e
+AdditionalInputB.13 = b71db2e2cf972454c681e5620512c7537424798f4fae53e5c843026449ab09d0
+Output.13 = 669181e9fb4ecc48d55bb1a1ab958cf1512908265a14a899e286abbc0579bd96f97db2f1777b03bbf0fe1d5bbfd223ae8ec9e078abeaa2a0809971b67ace4351e5eaac19436592b57f561044fdfcd801f71fae90f6ee1dc153f538b731b94034b4466b3cc5730ab6d2a8a8327bdf065b7e1f0e2a4ada21c61bfc06ebc6b93e9ebd694869fa293391b1251ee7225dc4cd8640ff45d3f8f95fcc3bf2b06669c47d14e8f2c3b831b93df6bcfa91cf65dbd2fefb3a95f3953c26cd349c49bb339a64623c366d43da3796d2bff32bcb203de3f3e430c7cf0a736b50b15c39123a995b4df0e6cb4649590e80bc3aefc14ef89bbda00720baf50c6ada1bac658004dd27
+Entropy.14 = eb2e114b4da9bd296a0070862a38a5149ef575c828b68738782e6161ef35a792
+Nonce.14 = 4838a73c4ba16c49d8410d9226b54bb1
+AdditionalInputA.14 = 967911f9412d40f2c62e43f48ff965bb1579a2ace388c781e125fe70f4adbee0
+AdditionalInputB.14 = 052c401de1053b8dea309196bb8e326d4b643371976d1ff6be0a6ea4ad27e5e9
+Output.14 = f7e8cdc3f8d2796414b9c83486d746cb8b1675b37d0d7546392c59622c693045dbcb10e9343524a6e7a9cc757717af22ddb8127bcdfb29cb8da409bd69d42aed9708cb2f904dff562a695be004ab25d31b8485bdd677c96d156ce8037726519d1949cc15e91acfd1c7c0bd58058b72c7d340b2f0bb12115ef44af6d20ce5f429d681b614e06bcddbf8ba00b40732b4dd425d1a87b663afce0e9a87b942a543b055f00b2428de12464a1309fccd0a15d512691e3858666ea4dc6084283deb075877c0162dbaf8318c9cda01ca611d72fac0b386a753ef35f438757cdf732a61a1f6123d1de3f61eb072d022f56c679a86f7a05bd6fa420ba39ed2973d4007b9cc
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = f85649f8a8c01f8a2925f7e93e356be0fbc75206d1ce2f7e04a14257c3338a48
+Nonce.0 = 01a8843b7a3dc0b1cab5f7c8b001598d
+PersonalisationString.0 = 91022d072824cb580ac07555c90a31373f2dfc272de60d3bdbc0612e175874ab
+Output.0 = 9f40affda9c797363a7b058d7f5b848f0ba366808e7a87ec94894091ca0818dc387a8ab249af3268a9b0c95f7a781d3c7ba613460a2a5f8ee4bf9ed237afaef69f046e163799794252d2c9708ea337b8bcc674c5016172c50d6de9d941f496cbde4a4e7abcdfd42a989119224ea7f3c4727179f42bbb54466f530e4394cf18c15b548ca610511800b39da69297a46ed1b237722c6d50248245f7e90f343617aca44b6245c99a714f719e324c2fd4b95e84b3f7d3212986dd7f51f60e38d1a077398f5af31adae8647bc920e6a0c865a297bffc88b407a24e2d2aead0e711fcf96b83bbede5bb35a5f9b0dc5e2376a693afa9070a4b1aa86dec23e6e597a74237
+Entropy.1 = 58b81001b76e248d9a4eab5e7371a97dd0992bd4ed6de18084b2321b8c292b30
+Nonce.1 = d4e9df171d09a7b93949907ca65fd5b0
+PersonalisationString.1 = a36d996ecf48058ac850d66e56d812e8c58ec0d89a30dcf30475d3830c4a33c4
+Output.1 = 22d8e1f50c301208c5f198f29cf9f97704f2df46f662bfd7bd2883c22b49ab5d7bed1a2b6cf0c55a0aa0b695c52695b57919dbbe8381fc56e72553158e10ab59d4e682dfc3a07199876c266dcbe07735382d8ec079ab4ef5e622a2329092cde45c53f71aebe43b34990f55ad037eb33a87abbcd3ada3112ec43b9bb20b61bac549733222313de2bd91d532f1c17bc3de3fa34f7d3aebb2b59d6c8b90ce211e184fbe54ac0cb97d7a03e057a6bf69c4deb4f11cab49bcef323e9ca2eca1f4dec50a02ae1deea1d56f037d53da03da870dde13ac7a084d1e2aa4f095b3cbb1276a4f5815cde03a1ead7d5ff87fe7453cc603c0a1d1f6af1eaedec35835a6ce0c9b
+Entropy.2 = e2743de1bead33b91f0fa01a64e2dc2175749260d4475dc1c4652c6192ff65fb
+Nonce.2 = 952e8d0d03b09130e4df1de0f8de4484
+PersonalisationString.2 = b187c33f16414734eb500c3c3230d3600c4b4251c2c44085b7a585c86dc713a3
+Output.2 = 7da54694edc364dcaf51bb239b82b3a8956264bd1279920b34f6a7a33395900b49180e38f0e97a2b1c5b7fb11bb1e4672275cae66a007ce88d0decfca929766c2c07e019eb94ed00094a5e72a82ddb00badada39d4eee8900dba0e71ba29750641908dc4b4eec95ecc3b49cc9df72ef5ecfbd1fa8c9eda509301222f9267abb4893470a75dfa86f793db4fea9bfc1de6c637c2a29d6c60272a521c10304bcbf595cfa632798701da4d50eb776d4dbe01865a8471c58e2cdbed14f083d6b4ed3cbafe1b2ccafe82e73151a8299c3a04d36eb713dd47c9f4d306c0e503026d7d6ab6c4789078c8c95ff5abe002b4bb86a369b91b4ef23c6afc0559a2cba4ff53ea
+Entropy.3 = aa1cfe4c9f03a9990c2dd55c0775ec36f3daf3d64873ef843692b5887b7d7a4c
+Nonce.3 = 70484796fff90a01cfc2168d1d0f5ed9
+PersonalisationString.3 = 21b468ff6f1e92ca410177941ec0bea74990555071cb7d7fc0844fb24cefd511
+Output.3 = 72ca74671d10f6aa0607c3abf4e86f022af34cd8c32cbc274eff9bd38bcd4b79c64b09e68f44a3b1c6592b7f458f743f99a3971becf6acd974792dd5812d473891766460b028f3724036496188bfd2fae5d3bf734d2503316db5c9b408496e9d99712dec355865c240d3209c1793fcc815df057ffe555d2bbf47e7370031893aefec6ef0e71d137e16c416dbe52df3b98f280f5e6b29636d7d9bb0999139fb5e46bfec53bb22c8fd68d2a15df7d4e1a2c813ae363bf3055e6def008ae16343ded598a0c08548801189ced03e6f81b31286dd8e3eab82d648b6a9fe5aa6fa1f951789cf4f5815e10188d2d9755e04f283373ce7da806cd92935aea243d6a566f9
+Entropy.4 = 2625400a6130e77fa20f0b7c58cc0f9d0f22ef5ea54e5cfa6e6e648933d62322
+Nonce.4 = dff0eb02fc7ce93e4be2e294a24509b4
+PersonalisationString.4 = cdb1072fd83114ef83323ccb03d702f68a550d7a0e8b153a95eb9f771a271861
+Output.4 = 4fa6071756afe972853072ba73e203773937f7d6e1dcd7982c37ef7566369e27add7889b32ed2e2c2669d00633c22d91fd98f2223789681fd3b1d93a16c2278b8e4007286dc1273e5abdce7845f87c066a59b0d8152f9c13230ce488f9cf00e7c3e1e0c3719e6087fa251e8bb4ddd3e778c6149a14db3217f172a8bfd656bfe6fe2c4960768adeca843f1f36671b722fcc62dde8b2e0c5765c6232ada6a4504b21f350786d0879408d8979e19a3aa16f0ec47df3d0836296fb88363d1fbc687bed75f14ccceafb185ce90c2b0f5cef3247f1573e822c19b1b9944204d42a6101326b127262b7023e89824a3f2d4fbc4c072ed3dbb7325e77eccc70cd82218f43
+Entropy.5 = 4943e0c725cba7ac3bba16d1de3444eb367129fa38d1bd6e0032ec1b3e0b767c
+Nonce.5 = 743775b879b22ba24d0b08ded6298ef0
+PersonalisationString.5 = 1d8d1abc5f597648889bc220040cfe3bd49ad771ebf7ff2ffc9a7bb8ce2cb285
+Output.5 = 1cd45a83f0236d70908291a0cb24e8af67268ba14492c0ee4f7f736e48a3da7c5bc80a0aafb54ab028907477463d7587a11c59cf2add25aa799fc39290c2284da916790985dd1d842421a24186aec5acad4ed5e511dab8c28f2a2a0b2449d1aaeb5265e5df2e708e761a42df5304dc92dd2c10028cbdabf5f21c1cf572cb0d55c194a273c166df5dce469ddaef537b3f5e72b6ec8c3f32e2a69d90a640ed3f219832117615c209251a467f7343df9a6fb891c6646f01f896d83319bec63cfb0e36d35d5b554f08a0635c3605d51f9e7cb8c32cf69cf3cbddb02f68c321ae08cd185de20256c9c78efd667a35a3c423e6a0d83213fe0acc1a11693b641037daec
+Entropy.6 = c90ef2a9a1cf4936689ec66acf771e3b0faaabbae4af866d4595d20823d04df7
+Nonce.6 = 624caf43c3fb18b0a9b9b7b56245ce60
+PersonalisationString.6 = ef05d14650114038c30f441f8484301d2442f6b9167f57f1f2c0a77b5c91212a
+Output.6 = f89763a96ebbc1c4b5d5730501dd5a5910a9b907b1939442562ed880bca94724f9392d31eced9bb670cf355d5113a78f6b6993a85954c8e52d450f14815e8d25f3c5af5e0791fc9f94220994d58b7e3decdaa01993428bb597f1129c7c9a0643c413d0696df191ab0b18691c77e79d5705ed144a3b54ccb3e025f4f71d62cbbab9aca0804b15325d335a35b8ad9d06435ca2b847fcf45a2bd0afc95583cc11dd66f63596c9a81ec1244a58aee352b59cd4173e1b5b51e88f1d64ed887dc7c23efbf7ef49e34bc1324e91d17403052741dcd7e1e5a866ce3e2e424096a4c67ad818220a36a4ef8379f7650a2e49a953fe488202f1a95fb55a929b0e3261f181b7
+Entropy.7 = fc9e6a14f9614e1430dfc99640633f2195e35532342ccede226e0896d0c07319
+Nonce.7 = a43c19082988a2a1609150d903106415
+PersonalisationString.7 = ec6f5aea1cff91b0b798b1247a2e79bd62173d8ccdb5daf9492b3958ad82c48f
+Output.7 = 852a9d864504846fda05677c567bd9fff95221e620b8473c5e51580697ae193d7bf1f3237fd094363bef04f9231d95b8531a837ad43c7ff18d165acb2502f9e645460e06e2da19bd10c2df17ef2a6c0791921d74f72f91db4f80484f4fe3eb0aedac4e6417cef76e75c68c041be290f955a6121499842549ea9251bf892107614a1ee94110ca401c096c5a88adc4b39bfa5f821fb980b6e6455ee75cfdb8cfb31756565c3c836cc8e96b537080facd6c4c38c5d15c405e904a9d708e92a626cec63a5f88e3fb2b597348a7798559d612fce9013e6cda53b8eef61d5c874ea030d377639f93f3c83b5f7f634da201ce392d9799102ba9ca4c6126dd9fb77b33e1
+Entropy.8 = a5e0b94b0efb6e1df2b691bdd3e15d68ba602e25a4e1fa7b17fe124f280b722b
+Nonce.8 = 3be26657fd44368efebe93c16b230e4f
+PersonalisationString.8 = 652fce43407146c069c6d20e557eb75bbb7c72c10afeaffbdb9ff4bb6b2d0558
+Output.8 = bc9379fca8507d562434c8d54d35dfece72c18197593480bfa7b63b262d79667d8184c9026682b4a42b73ee237ce5ff46d8cf58df4cd7f145ba4ae3964838a787f353f82c7ba02f9680b0b72bd37473dc98fea004ba5f3b87c193170f00aba61d16eca612efc101c9db916d9ad9f34c20595a4df87106b952b9d3d47f3ee346f150e8e4e21d1d3892008ed163c0cde88a6d8d6d6ee7aa2511e15d583e3f286462f9d3d13966f955898d0c0c7a369e886caf2c3df6d41238ba85086e47fa78028f3dc01545834dc73b25509ee6577a6e8f159c70407bb7b05ca9bfe2580e8ab864543fbe67c286230dfb3c792ad050e79ce16ca3fabf73387e85a68faa44ee95d
+Entropy.9 = 77f4fd085853b3b577b1b6e10190fe7f1aab5adbe80d8298b9c0c6d5bf695232
+Nonce.9 = d472daefa0831117e7b8f3f667c5508c
+PersonalisationString.9 = c52f79e56dda5affe2fc350e3b6aed9cf7de57f2005e1f2f003a90f1cb175974
+Output.9 = 2b37c3d8c45efa020eb3f84284a93c5207b25b71c002d941528ca0d98f7ac42a72f55f1ecd13ea74a296d3e231e453511a496a0dc577252cda49b4e48056ff71cb4e309495d459d6c9fa2e6502f3ef39a06ec4dafc9f14405f14c3015b6ad7bdc9c1077aca97dc7974996c925c66a98b15fe8aa355ce3426b1af68df85491d46da2be2dc58e166edc60216520f18939cecb381d3d4efe70d89f4e4be3c93f11f5be68729f48ad9e501b327146087bb161ce7deaca44622bdbcb50efe8e076fd2e9cc3902cbaefc3abedbb60cbf24ce332a00bf7ff8ec7a2cc81d6669b9957d15d68c03e1308550b7041ce77c95de5cded1382124896b2dea1254af1e93ed7be7
+Entropy.10 = 8b9e3283cc2316b6955171a2a3de5851a56ac2c3e6de14166fce6ce0d24421e4
+Nonce.10 = 8f2caa11450b9c6676d35cfc83e3a1aa
+PersonalisationString.10 = 55d98ce73f316177ca27dbaca3fa25111c19fac26fdc224adf71e46c33d9e076
+Output.10 = cac7b77c2664ab953a413557f03b73ba499a7ba627acd4bb81b1dd77198e17ffbab3393e83cf39a56353b387d312791f89df0cd9b4c3bb94eb43d8f34f95a4d2485609728f2fe4fbb4280c35c18a1bb5f5d4f7457eb4b79dd13ae5e3f39ea592028fc95f165cf7024813dbccb18651740146276293d8a45af3d7315978a610c4891134096701bb8cebd9a4bbe0685c06f12f8d98f825b84429ab7363a04043ae9aa5732274194db7bd6517029a92ce11d57710d2152fd877c563b9dbf773930a3e50326a84fd880b24bc142744b8a8b4d0661a008684bebe8d5dd682fab88b90247fea58ee911c6c8719dbc25bc95ec4440f50b34eeec9514264d05633a63862
+Entropy.11 = 63740fe4ea180a767ee3ae551a0ba9f87fb93e511830188be1da2f5a3256db07
+Nonce.11 = 2d7f7bbab9e17b0eed3d6fe126b49af7
+PersonalisationString.11 = dc61dc0b522a10dec7869d396deb1ef849bfa93604299519a520516d0e673098
+Output.11 = 85eeeb0897db47806534ca3cc1b700625e364196dd3dc4fb771bbec51b7e5aac09164d0cd6cd6f67bfe780b656d162cb8a9d9b5a9ddac9a3a38bd1fc23cfa41a17a4271239bbfd604845866f4b515fb0e9df75152d38251f5f50f6b4d99835eae72a518eb83c2e72501a3af9b4cdbd374134f6fbe6401cf592b444be6629af1bb1378b09038a01f459bf95daec141ca7639247776e44cf0ec36c8e494f91f4cf3bc0da212437279992f0986b8f5d592c8f64c5baf2e97ce04983af1639b90ac350a84a9bafd4e659d554dd29e5bd128468675e2c264aecc332a373655704e005144ec1d8efd8e1f5c915b78c2f8ce413242d788927aa8b3f66574750fac7fafa
+Entropy.12 = 5be0278fdd81b7a4a0eebc3528bbe5982ba4084415152dee27649c6bae0a6b0b
+Nonce.12 = afac0cd0520ad32657e543c27bb01d73
+PersonalisationString.12 = 265d72a4f0a1f93c91f72c755e9386626f1f0afb86e0bc341dbdc67859c176cb
+Output.12 = c056c7acec0c2fc67e8a66cfe62e26d63daf7dcc5bf1300f6ee44c818a35fd99ae13d16be2ed0b96ee98aead005d1b0c8ce10bd72a02045608129c12c02e6c0828717a60717bbd2238b88ce40c1255f7d41bc42f44276a140aa4f917ed22896480d81887b79f7e9bf066d28302816cd4c8493917de189caca99276b239f17fd040f98951ee2323601435f008a377fbc71dacbd1eabf80a55b5398a141201dd9ab2b8376ff39bc5ec15e21a260ec2445910dd2413b69dbb77883bb0b538afe8fed0e10ca5f195ee5365289b928b0d6c55f375b32f4e056ec7e0c3457ed9fd9ea8d8ec623b172b2ba5dc178e3f63c29765a5d793ff774030c41691791760cf3b7d
+Entropy.13 = a0bc0cd27d6d11f9fdbc9191f0ca551273742c3d83e0b10439326ae6458fc3d4
+Nonce.13 = 08e08a673d0f1678b1564e7c6f1695d2
+PersonalisationString.13 = dc5c4cdf1531fcf69c55bece5c291a96ce9330a86737770fd5452c1e77d2a5aa
+Output.13 = e8d1173494b8f4f3066361ed8f16d75fecb9300df59ca8b1357db17f20e669166bfedc14f19aa7d492a92311ec01212b9bfb7cfe7ccb4834d22c0a14d8366b4adab29f2eed561ee261ed617fc3bc031c364e348b46579b2f4c9c2266e238168d9c20c8b353de83c2152e7865625661f7fe4f6c722fb6471127ca7b03af48cc107a1341cf9a40c2279a49cbcf6b4da179173dde4f217461aa118bf5a8a57f5ee4775a79995bd20d1895b71a18d8a373a29e53e286efe7e0db356e343816a114099bd1c621e14b2a44aec76ad84b572c6922c3bdbb4a606f09488061a8ab85c9e2032769f2ef444b5505b1a5c881350214faa716b7b0991e60b6d1076f16a2edfd
+Entropy.14 = 2fa23531e11329997329d273d454ef186bffe879fdf95c8812533e4b8027df87
+Nonce.14 = 0a6bef6b736129740978e31c3fa279e8
+PersonalisationString.14 = a5ca2491479bda16341b2c14339a5307fc2e2f5df4fa625e0ea351a95a14f588
+Output.14 = df587647f8d440a6c8034e757cd47f28d0e58f8aad9a047cdc8a70a8b1cd0d8185240d47bc5d2f4657205ed218ec38307e68efad94714630cd490b939719a4a07ab994793112c021969a8c69872903315c74b00b677648673e5883b5f46e075550092914cfeab05454226ee3d2154698f368bfda0b8b99eff5d111c1649a0f7e67ec0f637c6d3466994d655066a95732590e521ca055b048dbafd219be1a04fcd047c3722c4adf29ebd8486e7171359292e11ac6b740b4d51093383d64d2a45e51115c689ae29357366f2013eb9b420c6bd069d22c2110182e842eccadae81797a5f57d9ff47311f094ea0a25d7e329fcccb93c28b92ed85ccc2d690a84f2b2a
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 7daffd52fa28b43e757198330e8bdfaac82cdc5e75382e853a784ac217ef3b61
+Nonce.0 = ad296a73e050479b682d52a6a6c40002
+PersonalisationString.0 = f69854804e703d05806f19f92252d967fb60088dd50f134b28233a6d34692c7a
+AdditionalInputA.0 = 65139b95508799e5f084992ad67eb8791e227b2855b83aa9a2b8bc34316fad9b
+AdditionalInputB.0 = 7f5b56bd20063b6f441ec8888357f563c44aaddbfc93ac43d82274d005ec993d
+Output.0 = 29cce539d22fd85edada8bc7e47d0d629a1efab369c4a8fc7d9193a77c4501bdc91b92e3fa7e149fec80b5e160d3e3817e93a5a2218de2a084dca4d5c869b5a1e6e448e4fcd709c373b7cbdf3174972a0c0a5cb44f84456ab682e180006be754f612951bf63c14bd55b636d92e9263d54871b2ef2617cac337a508cb1e2791595181d7ef8a888bfd87c218e45fbf02d857457a443d54318fe47e28b545948595ecd45cecc1b39da86aaf151d9b33bc2bd8808b84aad54ed9be103a2654fcd8d588d2163f4b709a94d515af515a95085e4f6eda8db25c428a6b6ebce0f73e193ce72bf2dfa725224452833f7f3016ed01665c8e347c449548ded796f674916c26
+Entropy.1 = b29cec37319ab7e660943db72115bdf573cd0cedb96617b2fc1a267a1863addc
+Nonce.1 = 5647a7847e096a18ef465c263c5dfb31
+PersonalisationString.1 = b54306ea8f371a62fc303a0c07bad5628cfd573384ca31468df3d69b6e10791a
+AdditionalInputA.1 = ddd2bba2e52e8f2cedee4824839edbdcd12318f0733a3df131e1cbf675609f3b
+AdditionalInputB.1 = 9f919539828030ebdc8a9aba819c682c9ba1c0c2083c04e28959f541f6f3b295
+Output.1 = cf199ad48ffa3a72cb0c6a8dd3b72085d0c7cf1fa0135709054f47ffe5f750c31bc6a3de04e8951d3e4defa3ccc59a7ad54ce13bf1d23be0d719557194f7e7479ade1f760ed9a3c70388443d529e1da92688c7dd9ea25a75d2d61eb187c575485ca2399b53cae426870194cb3881f500829fda6b8ad277bfa0e37e56d824856f7c956faf3bd7e7d4b51a4c044e4f4927737f1ce993add43cccfedb2f5d433686c67225c490ccf65b2e7fa6edb3b207c27c3d7634702692bf7693ff33855eeb3572d01d99585300c538b987fad6ba9ca0d7c3332905e0cb48ea30e6ec2ef11df51dfdb9e16ba2283b6e5f7b33a0a7492a5cb525b8a1b0c56332323451eaf23795
+Entropy.2 = 154dbe61b70ddeb8ef1b86467d7a654efc44f714cb9581d4d9ffde04852979c3
+Nonce.2 = d3b764f00ba26e7c3c740064a806a22e
+PersonalisationString.2 = c036192bb12e9251d3a82d545c68f30a3c126d32a46cff77b8f4d2e7c418210d
+AdditionalInputA.2 = 968da3cba08e923eb6db2574b5f5448274c45d77772c55b38c975c8c3f5e7170
+AdditionalInputB.2 = 0d28459d9e1c03a3ab4dc025aa66d0571d1b29afb7a354d1bf266510ff8494db
+Output.2 = 40bc58286b9d99b318569de5d7d199c023256902de2a3a5a0f1e38745100110274ac82eb4ce76b224725a97b9467039042d9ef066c88da7007ab0d02b9c4294f1684c5f8ff125297d3a6c42eb389026b693a67f2db928fb36712027643e6be20d43d32d6499de412516ba2efc5ded5879b7502fe6a982abf9f7285840fa65b8009459b00927f476161d8a0776ca87a1a73b3d5dff57b49dae18eac183c67ea6d0bb60b6d6029c588e8e36356adaa031880bed616dca406a4423f42c5e027ff4a1bc3742c2bf4c1ce5125e1c30a276cd63882a352dcf3881bc6eda8bf9f1a45e75c1c9b8532ad00799256056eec5ec0b257ccc131d3e016c2e2a1d5bd4f2bc13c
+Entropy.3 = 47c502f2daea3e077382bb976b50f7fd60b60b21969ca08b776c978a0adfcae9
+Nonce.3 = 569b613d34046ee05c07f324f890006d
+PersonalisationString.3 = 7991d29722aeb95dee02480b916b7c19d890e1459f0a109f9ed4a06164ffb5eb
+AdditionalInputA.3 = f61a95c3e2cc52206c71e94ca33764d6557c1057a2315e016304b53e12213380
+AdditionalInputB.3 = 943e708c9f18da2de784d4f7b83faafd1f282aaba638f422b46e34e2ff625409
+Output.3 = 92409d22fb6869a48c3e516891cfc50b516c8f27e165fa8ef60a2d9ce0f19f692b6d2bb733faa71408e4146cebfefd18844c22a9c4099a6600e7d4f26886b8a4c2581cc1ea78137c996112b89a2ab44028685abcfacff96a50c6d57c17f6834dd5faa2c97ee94d30870f0a5663ca7162e0561b78cc55873405ca1a6312b5a5a6f2c1fbdb5c5f75d4644aeaf57666a6e301cd1321c8ed00146948e16673009346b924cecbdd1f8285417e42d42a5fd15f6d7c6918f26e690daac352269967e697ed52a2bce2cafa32c11f712ffbfb4af77542f77872f4d87c74330203d096febf4756d5a09772e49eabdb8556115c8460676492e139efc2a763538b99fb8916e1
+Entropy.4 = b8f2ad7927d7ddc7c7c557f7feaa81b844241776c39af7846664575466a824c7
+Nonce.4 = 22325deca206a0fb523cfa203475a0a8
+PersonalisationString.4 = 6ca30c83db364c118b5578626a25dc50744f881d06ea1ad7e12d4b2dda86ed87
+AdditionalInputA.4 = 80766434c23002b8f7fd6ff2d0570cf1d58306e930b4e52dfbf2cb54ce8f0a30
+AdditionalInputB.4 = 1aa9df37dd258e9ba47627d302b052d36a10ec99194d5d8a07312c39a1be522b
+Output.4 = 30adb4ff0102209fc1d945cc117aa41ac4a63ebf6cdcf0163c44668b752195c1298d7228dba7742229afe2db33483fb971e03f533a306bd1e040d03e1dc5fcc8a995b6e960daa221082bff726b2e3847e7eeba0cb7a50965af57e881bc3275bad2a9ef24eb5981d5789f3710b0ace60a5043414f8ff3f9471e6059aa4e0e3eae0f6df7bcdba150bdebed0a6894c593eccb85d5bf92328a6d86d965a66954c69b1e2ece9bfbfd2d618063aa60526074989bcf2d55014427336dab8a43fd35b3a07cf48399f71516c785ae0edefa71c1752a9ede22db388160424a9d08fc63189d941c924a2a11bf80ff3a8460753e1f66989188ccabc80b5c6c7152426ab0d5e9
+Entropy.5 = a117f14412be652efead9399b431153a7e06d166e451c218e4d566f3f3223e9c
+Nonce.5 = 1bf3f7bc8e4fd7179fc50b15cf1f230c
+PersonalisationString.5 = d53cb9b946a4fb444bc6806e6ef8f6e9768d8b716318bb48f4ddde7ba6e3af7f
+AdditionalInputA.5 = 00c0635c761f901589560ca4c6d3a4b3af29e4e579148fb18a679966a50624e2
+AdditionalInputB.5 = 4f85cbddea01213ad0389d2f3fbba61d006c0ab7db93b9b2762a070851873c74
+Output.5 = a55fba38162ca52fe0ffe425697a0b706ac4217324e998b578b3d000fd422e95c0c1402aa33564436d90f9b9585c692f4887223628f769784acc981ec7bd561592c5ad0ede9e8c49a032afb1c40c47a692731fb5d36a4ca8c637f7e16be7264e4f88daf0995720afaf949d69a12b4b860942c24fede4c0f216f72ec46073482bee058a193f5957d38bad2b0a0da46e5c2d3d8c9996c9cff64fa7ad0420ed4f518e3c52dbe42e478cb9f58142139a6b4862c8b0bafd8e181216cc289a106972438a708aa7da67c744732922d3f801cd097b72ccf8d60a08fb3fbedddcb19e109cc59413a6b4093a8460197a8158b59a21447b66d8d9e0faa45efdfbbb8c285dcd
+Entropy.6 = 1abd1c8a15f923c8f7e1034c081db9926a22a62c6cb76427939b7e2246597faf
+Nonce.6 = a36bf9cff5bf8882680b26789a485b89
+PersonalisationString.6 = 656772a1bc20d83e9d07eb1ae969d653e5e0f9c318cfb278b7d0d3b6e9798b7c
+AdditionalInputA.6 = 04c47f15cf1d1410c8aaaf6d36221b71c3e25850410f503c1c9e72f23cc4fab7
+AdditionalInputB.6 = 5c386aaa8bb81d893c09d5a48eea4c9aa81fa4545412b36a9630c02dd6b2f28c
+Output.6 = a05d3f5d21575f00fa71f372783484613eaa76832bf6facaf0c3410405f571cfbe6c611dab18d6497f326a9d5e7a91de3b649d8a34e120898ea17f8583c68e9e7c5a0dac5cb6c75e0a70718fed21ffb625ff40c580faeb9b4f1ffb9e960f84b7f220d79d7069072a9bef93608ae0b650488f05ea9fbeedc1b2ef79ddb2a7d3006e18b16faadce43191ef72e1f513a701342ec88a40cc74d444bd8c6467fc386f995c1ed5a7a1efee930bca7ed04fa1a2469aef2f193f51ca23299af29330e41e2651f600e92a90addbe07d87d18634e558200b6d68c151b5ee54bd6650cb3e33923207b6316c18cb866cb6838a54fb2c8f13d4ee1041c57c2e9014215a1e1ccb
+Entropy.7 = c7fd8cf0d432e71d6a06dcd5ee01dfc61ee8be3aadb95f34b892bfda01ecf63a
+Nonce.7 = a0bfa7a995ff1df2bb1dfa94dfb5bf5b
+PersonalisationString.7 = 513a68a14ebf0d7a6b84cf1ebd7d01a575b98bc0e30627464870c4482729aeb2
+AdditionalInputA.7 = 3c413c1b84d2f3a2357dfc4d7154ac429e8372a1c5fc670fa55314d3b67c5569
+AdditionalInputB.7 = 5e3d61358b30bc14a4c04388472e27ea5e287ef6c8f63a1280fb38c828c9c23b
+Output.7 = 1196d784a57514303c36658daa4d8e375de466a6cb78203ef35a7ccad0377b4878e520be7b5d416a7af820b576f2d83e572eee478c412e463a62e1eb779fb6bcd022409f549b4928f41393124f7cb139e3779f949e3937b1102239b9c1d2bd250e990c035af31dfa3287d024bdbf3daf469935fa950ff8c8c2d72073271b84ab15d1d974126954e533929c5125e19eb187eebf76ac56159ea3ffce28b6a33f5740aac79df500964475137e65c05cfff4af0fa31c924bdd8d3609f92308d664c7a6ff63cae83b9093ba794f96528b83aac8bcc91c3af89b5eeaa531c0cc8aeab68f9c6f6179757de6dea533211ccb2ca3af34696c06a1fe19ea3aae74e68de7d3
+Entropy.8 = abf54f468cb9c22a71fd81bb59aa554cf8f04c2ded03c9facc3e73f38b75a383
+Nonce.8 = 89ca26ee8e7b19e3589ecb3ebc7298c9
+PersonalisationString.8 = 918fbe183f1cd95e1accc8c041acb0c0b93c261f706714913449e17c16f0e761
+AdditionalInputA.8 = b2f866849f55c6cb34905348c52b4b2c6da7a25953ad798ade917cbc16b25de6
+AdditionalInputB.8 = 03b107aa9b9cd034f58bddf19ec01f24de19fb76a12a460bfbecb5602f243d63
+Output.8 = 81cd29ccec8a8627e56b3a14d7b7fa3e17a62746909ca57c9dd82932d92c50a4e38a01b71b801690e7f7f1c38750cb221fc7b122c74c90f2e51470361236d69a0546351658ac51ccd9c29f496e3d37ebc970cb120a87074f5fa84b128b8b46622a261d575ac3d12a50eaf9547d131ce6f8406539bff3fee4d54512125f20291b3d15c5366760d75d4c5c590a04b963427b71c6ca8ffa8e7669f842a91895cf990607420dc9d6d8fd1a2546ca783b68ffb2abf8a2070215eee230c8694a809b1eae79be74cec05bc45c8f463883eeecb3c37c2b965f5e2053df4efe6809b3b56e72f02bd2af7357cd954e112fc38806e46f424ae9141f28e56d3bcbf1114afb05
+Entropy.9 = e0a3b6ae60dd17bad65d97821ce8c90cea1593a4f4a37ef0e5c8da0febedef17
+Nonce.9 = 4c198cbbb3ae70c04a06af3b79582ca7
+PersonalisationString.9 = 0b20e39a7ed66ca9e61da96c97025a4f4f56e667ab528b6a51de62c952241e43
+AdditionalInputA.9 = 75e3940f9943df4a4f7e0991b10bf4ab22010f204b91ee3bd0c07dbcd567531b
+AdditionalInputB.9 = 5c3c6b8c43c53f23ec921da7570db2f6256b4c41ad5f9dfcdf493702a21830aa
+Output.9 = 891edff707485d4426c543e582de69ce5aaf47125e75158994a7dc47def6f39f11168afc97919778674b03c9a6bf9246ed609e484e9e4c9e52ec9b6bca4b2f7d108355d2106a830ef4e959ae326836f4199c93dfefe536e06024164f52dfc3a00a082d4bb1009a9a487c04b3c400a04bcf679add29b30cf1e6e34ad480e4a3dfe4510955eee0b09fca5792b94d03501985347117f106f8fab4e30276f5d196959a9be4d402d23c6087efe0966dd47f3de658fde943ca2e72485b745afa2dbea5d007fee57490f55305bf4cdc943f149d2d02d8637481ce13915abfe3f2c38f5d4ce2e5c4341800bba3ed6caf88d1e5d90bd0795978f34512ef998f064b19d46a
+Entropy.10 = 2edf89c11e986c3d7563ac9252a48d1204610a44e1bffd3c38c40747a048f611
+Nonce.10 = fb1e441ca95c2d4065846706e9b3c4a0
+PersonalisationString.10 = 01ad111387a92b19a6a5d6fa9bf7510a94dea22235c9d30735cb71a070c5a1e7
+AdditionalInputA.10 = 2be7202a1971bfbd2fbe3fec604ab6310a65be22d9cdf40957b0a0ee04a6f3f3
+AdditionalInputB.10 = 66d348269c32338f16bde77f92db62c5b53dee123cf0d428b7516bd827eddb69
+Output.10 = d49467c5e09693c9ace01358015ea245dfaa03c324b4de5f9fcc385a3ba73640fda11832fef7be1eb2e820aadd5627091235f521776f12fee44e73350fa52099819db2b365de3f049cd366b410454f8c161237aca945bcdbe38b0d7d3565f2bf01d48df462feefe5e852783584d2296297e5d89df1e5bc280655d90cc2873031868305b13df01bbdedb76e55c0cb9bf5900975ebcdd855c136d87b9419af811fc7457abc340c01bd9e4aabb110f048025c4d80d83c245f2ccbc70dff40507afe889952cade50bb7c3357b0ab402ee49c51d81ea0f5e8de8ac22ca6b72689abfbca940fdce47d60d49b56a3812102f6b6b177c982fce8f52db7fbf0c73c19842c
+Entropy.11 = a2df1f523094a0b4f7d2569f332a381ba5900d19e4befa49600cbd94a43863ae
+Nonce.11 = abb5b481776c8d95c9585c514a0ad948
+PersonalisationString.11 = 582d5025e08cc763e208f855eee90562e62273db55d2675d4b03f31eb6d55f7c
+AdditionalInputA.11 = bfb78c53c93f25d4cd6520e938d2dae2f11209da0b20c1b88e75883aac8009a8
+AdditionalInputB.11 = 4d7e8f65d99faa9bf9cda25cb3d88d124e10b9090bfb1812d7a5cceb453923b8
+Output.11 = 489ccf70a7dc43400625bcf131b11c71e87d9d6d379702aaeef579180a1b8d1a32930e174f97800bc44c7182b39f11484c51567fe920fbd12ea841869da9aa288295320d11ed52c95900ec1323227ad32fee5d414bc7662513f318d25c1ae8b4ea3df087f0bbe96ba87ad30ac38bb316c56bfd2019dda6be6b30c40e48f90fd60c6b8422f5c214b5114cd4106edd324f254871cadfc3ecc518ed598236a396c37bc6d8be856337c87ce6a7bacb88054dbb6e5e3ef49d0b3f14a3ec85ea9b7afb0885e133c12bb35689a2604c112dbb3e31295c87e0ba5844c92502abc85b07c2449c8b085c8eaf3074197c9dea0d605e01f2463fb0e528bed1db5dbd9e7c0fda
+Entropy.12 = e5eed8ba95a7412a3d49db1a34e58ff5e8f4c3bc667fb077262b845859532bb9
+Nonce.12 = da75e7ef316abc0eff6c27f34d37044d
+PersonalisationString.12 = b9a68b0b8f5b7c06ddfa444f925b1571f4e7c25d476191941a7f5da5a16d87aa
+AdditionalInputA.12 = e34da55fb4ba95b815bb6076a6542183ffde47cf078e6bc263906afa504712f5
+AdditionalInputB.12 = b7dfb1c01fcfe21bba3c1447bf54bd9f61271957485fe757404e0bedaf7aa374
+Output.12 = 1dbee8e755f966b501a6ff6fee38a829e321118eaf31da441573f05c55b5bf8f2a31c5da69da035094180fe18713f48c319ce1615d9747ec5bf67f94ff355c4857b7f163daad585576f9254bb929fa360699c2449458237fc923fe4cf96027bf71f2dc137480d0525b1a27aeb7bbc7dc65c59a6822aa70ed366079390267fe921127461663c436e11e5c397062e3e302bcbea1e940dd48c588c19e6b5943e4b07dd5e4b40688644dffb2f50dbe933d6821ddf243c3922544f5756c5f8b637eb6deab44eaae55c9691ba736eb805d1f5b1de1fc8a0a1fb17ea83fc3487677cc29390dc8701ac829e44457e4feb5d4c1dda43a5edb194a926dec649db7d99480ec
+Entropy.13 = e53fe5a7a467d45de79b0d4c3c6b793cf8f81bf61369c9957d125475fd2e9925
+Nonce.13 = 2e607a6b31992614addf46893f26c5a8
+PersonalisationString.13 = f2fa633d2765ccf20f57e372895c06d93215c99820479b963e036cf850a58078
+AdditionalInputA.13 = 9dc34fb473efadc12d67952ecf5704448af5cf6954adbf0f9821772e56343fcc
+AdditionalInputB.13 = e1dda8e77cd550a7e298769e94a10e77e824afd5d7cced61125281e3de9da4be
+Output.13 = cc569e20dcb43f2bb4a21f0e2f99e21786f6723a3fc3beac5b7cb93d8e119dfd1fd5075e7663a19e3b17d029b2117f070ff4304ef8566065cf48ed4f4812ec693ab0f3974686455bde7656370282465c38e44f11f62bf89ec685f09be50f8b940b8a06e3749bc176a8d4f1c54724f77a3eeb49deb767f2090e8c8be04a09ac6c9a1feef0798a59bda8fdbb07efff1f9e6f29fb20a63060426dd7eeb64060a2ed76f3f7e5826acc75153c3e48bfd1031ae3699565ab925eeb4ddc834478e3ffc53718730102bf1ad11816fe0871caba164964f5266f4fe3181fd1040ac86fca0efc82db69445880d3a97859aaf032e2e3cd7048e01579949706239115ae83e443
+Entropy.14 = 5cb31019c893de9f16cf83328f7e115d75a64f45339b75ad50037bac082d7ff4
+Nonce.14 = b2d6bf932af6ac29c514fcabf1a85134
+PersonalisationString.14 = 7101f575d4d0289c8a82d82f5adb761da9bf0b83a09a9b2f90ab6fc7f92e4152
+AdditionalInputA.14 = 06df99a38f4222b9e7e1e3f4a6f488c1dfeafe847129d54c93bccb16493069c6
+AdditionalInputB.14 = 3977a9671024bf0150752ba10c9f6432773bb71aaaa9d23d1ab72b90b7f0e088
+Output.14 = cd4fa86fb559475f4cf4a60f111d3d0f71646d3d25111889332f2451eda96390c607a0178e1e79e8124c7626ecaa9822495e5341dc6f24818f97951bb29434c7c48d05838fcf3b43b8314827d3acc8fbe2c4ae2ab066626c25c32a760002cb1d980169f7691bee5e329ff1ff4938d3bdaae583f3561499563198a5eb69e73f6b963a5d072d23e07b0ce48cd04b31f9ea349c2cae355ba478e26a5fa33d8f03af84235fb1743d30910f5557194e3609494019bd705f8cdbf3d1b4dafaa09c9d8037d2e0ba0f96948d4302e981162c34c12c2fabe1a42da517b7e5a1f796980371420cb305d0a316bee56767ce1aca9260231839b92fa26fd75846d9304427da27
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 5b3b225c13bd5d7bf9aa8ad7ff170697f6492670ff64b5c0
+Nonce.0 = d53aba6178eb4db03d022e56
+Output.0 = 16b4152d7f20ba956d3a788e33c644128f82d368e85f125d1c2618f6090f4a1b20c30335e836447549a662c7ca14d4612cf490a3e83927d2255ff398673394a6cf9b3eb46765d51ea1e487f8355249de965d37b7f035240501ead7d2b2dc35b0c6d41fb54f0e9b4bbf513e96871b705d
+Entropy.1 = 755b38d5ca8047a5c9682b64417fd2ea12b92a065997dec4
+Nonce.1 = 990e8a9283563ee6f1a3b9dd
+Output.1 = 33b7c05d2fe057191ba2721d161e6d90524743b0e3b8604fa12f16e2f8d683482e789b7afe7ec8e1b86e3dcb6edaf1bc58f50e558bbb3beb4072306eb3568de3aecab1bee824746c2252f6191235962ddbb829a6cfe49ecef5d0a0ec3ab4f6922705330ceacf05034750100efa7ba389
+Entropy.2 = 6123e1f18c60e78a726a885cd6b3d5529e0255a0ffbfe522
+Nonce.2 = f660ea8ea57def22e03f6bed
+Output.2 = 347f041021494bacf6ef510337b78184c12d9ad2b680bcf1afe3ff7670f9fbfd6331a14daead42f58b8461fd1d98e1b1ac9e0a844bc4c849e83cb5724c107d534587648c66bdaed7a8b48ac8f03b12e72768c1a340e7800cb8f6cbda6b8691ddb26a9ea09d73a7a78b3a5876e58f9d5d
+Entropy.3 = 057a02a79da51dd68aa05e51b135b89521fa3c020b0213d5
+Nonce.3 = 933718889255b54a14527722
+Output.3 = b9e3c4fd5cd56fd62ae134f95bfd9015e0271feda314704cf8f901f5e48e60582d116d7930a4f4718eb08cba45b997a5f5b23902f5c11d81b09708320a5735dffed23a4c8e86541c90f7a9071092650339fd855697278880e3be3ce0ea96865fc778a9dc011ba17e2471ed9c0ffed719
+Entropy.4 = 04d39a39d5211c50507c3b1526f341f21946d4e7ddf5c4e8
+Nonce.4 = 36282819330e2eac6ec7a555
+Output.4 = cc6c02ef46520c4e38da46fed766f7b6c7243ae04ccf14355dd9ed4d56ba0feebb2b86395e7e4d1cf3d7f0f96e888e6cd5f54d54bd817949fd94b30badeb09c28e93db797a5732512b6e03755f3e477ac747d9c2aa06d632786254ca5fe8eb302d85a3966d5852e5b8decfebab4396e3
+Entropy.5 = 5a47d6b4c3b01665d06bf3241c24008d46256e2f18b623a7
+Nonce.5 = 3b88528d2f62853c6f17f27f
+Output.5 = 4d1add998ab87f871f3d2dea37e153937d5dacdf71f082af4070a4e09316273cba38cd8aa70543d218dc29404f54aec97f609d9ec3e375dfff76df8095b112d0b3beab9165b494bff80baac6253ca711d085ba30a0773f3ddc52647f8356b1f7d5927c237e9f2aec99b44399450e4227
+Entropy.6 = 5736ca8684b9c5b17e2e67b130b445ca694da7ace0c19f44
+Nonce.6 = 1b689c4c8e459e13a0a5c585
+Output.6 = 208883b80e043db8b45bf838237179a2c8cc34609b58894f727c8c6b7815b9151dd48fe43d7b60525c87f31e9d643fece218372df433a85da0df3c3c3855032cdc8faa9af2b2c884ec4c60877d68e16d7d1ff863c63c404ec5c741729ce1ece7e4f2dbd3117b7bc1b830472f1e5a4b81
+Entropy.7 = 7a747648c0545287a5d9fa58e8c442b750e3524c2e79134a
+Nonce.7 = c6a70b28fadf6fabf03ae303
+Output.7 = dccb525a08c96d73593ca348f04e67a0a1a0b164026d54dd80032241809775c76fb6aed2fad971512086cfcd3f3c27deab1be0dc27511bbbab205a871eaecdbe66108ac6e5a835e759995f56e2728f15c5b0ca60e3728d949508151b750331f361ac0e5f97120c5a3085e217c70aa9dc
+Entropy.8 = 38538bc7646a54e7bec0db7dbb75cac62a3633af0ea6a384
+Nonce.8 = 2df888e3cba9b202e67efe5c
+Output.8 = 882997aed0e655ab1bdf52ce88dbf743643c1ec62b369a22e9db7736b8c0b7fdd2c69bc6fa634fbbbcb92c47692f0bf47b6aa1aa3b5a7790fdf8f019a069dbf668e9774ce90da48c2000b6a7aea67301ac7a83da7f33008aad78707ea37cef5a506ef7b2baba74c39725f49c67b40ed9
+Entropy.9 = dd1804090cef1708aa21829c1ba692d343b298c99513841e
+Nonce.9 = 00d8bc1b63d36447dc443042
+Output.9 = 057a2fa4ebf0a0c78a3f336cca70b91dfbf166fa000437bba6fd3f4dcfea1b202a866528a9f9a20ff7f6210fbdb261d4676f8359156d69403745dc9837c86145ef0ee4c0937eaf0fa551a4a1414d6b401f48922e86debcc5b25550574393e0acf29e6c807d3a849ab3e6a5748f22ed07
+Entropy.10 = 1b32d8674dd31f4449b462da7b12c3a6abe569731bf681d6
+Nonce.10 = 62757f4fcdb4f807efd6319e
+Output.10 = 7cdee95ab127bb4c8d77b87fa93562f431650dfcdd75ae7ee3aeab17312a51397edea835451fa163f07c04d5b05fad51d087953f97f231ad10e7cad0b200da3a70a22c918eab3d1931bce6159f2a3b57db69006c0887739cefeb811169d5a0ccc25546e513a538c99dd280dda3cae025
+Entropy.11 = 451e3420a0bc88c199fa98f007feb386aa9310c900d5bbbc
+Nonce.11 = 0d739bca00f34d94b2048157
+Output.11 = 012af91cc3143c30cfe67edec181509fb616b0bd708806ae5ddb7348ee3cda760474187419d84f2565b65113436ad0567c05c9b7c82996c336db22b8bb8cdb2f918c1d1d21c93330f5e7ce4217755d1b0e701d7de4ca9ccd8647a9ef0ba39e8eea9f6357dce29758c09f5df7a2f853de
+Entropy.12 = 7333d146d2668fdbaa608a759b04b02fd931921e324bf1a3
+Nonce.12 = 8b80d878513b59dcf6340a27
+Output.12 = d444d620441d2256e112d19314e5577e6dc586608b5b8c6f4c3174e7b59ccd30db1daf7c571d3ea249c6fce8b58f6b13d03d2f311cdeb6ca8336ff922cc23923013f38e2dcdcf4ef8abf3accf3f5fe789d254be337116dfeda04d967967bd6e7a80e92927d53fd6c2d45dc77dac0f677
+Entropy.13 = acf49affa9806ef751aa8dc2af66573e09cec323b458e7f4
+Nonce.13 = bea35dd49119484e28a150ae
+Output.13 = 98b367faae684aad1bedfff48b754ea6bc950c631ae7c7a2522c55ae2d47ca6b4c4ae50fa136b7e774ce63ab46d216943328608682edc650c7571271af6c87abd0b6a80e922fa3d293d4e9bfc6539b4f29c55511600baf2cf37345a98156a89ed14e214cfd80d525e57a3dd097442f71
+Entropy.14 = 0cac1d970c06da6f224d49e5affec0fe338d0b375b66687b
+Nonce.14 = 1fb1df257951ce8fc0cf12a5
+Output.14 = 7d6e2be5aa574b0edff39ea938e94143ed92b287262891dd2a6c9193b0237e8fbe10056e15785bd818e548452792a31c728acc14ce2bce9295d3776885018a57c8580a8e7df9a34ea960e0b39af4510711320528fa7a0badc6e25a0eead8cb091c404f626343c63d40044055ee9f9e35
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 63dafe5bd5470640d3bab640f2dc121ab4c3c315c7bd9e94
+Nonce.0 = ee95929b8b7bc25f9858441f
+AdditionalInputA.0 = 157a1cbcf68f5b3b0569b0daa48a2c6a026020daf456a5f8
+AdditionalInputB.0 = 6b89d4ba679688056f6e441510a0f458fa9cd89b226baeef
+Output.0 = 406eb41cbe21780e6159b9dace5d0b0151d5145993293ba0664a4a79757b6233dee1b245aa05653870c4207fb90858bf3ca94ef904a7b67bab3d8cd4f5791e246060f163b3061039dd04641f088edd01485e9c9d71e20e45e7a8234c4ff0c49273e5ae847f69cfab18c9965791167019
+Entropy.1 = 8385c0a8389e3566e48b48e581da179dc6d6639faff4e1d4
+Nonce.1 = a2938a5a871bda9869b98d7c
+AdditionalInputA.1 = 0f0e61d40f561d8cd459addb73aa0a360f6941c76ffe9fa0
+AdditionalInputB.1 = 7c2ad17442c70463c2a1a3c2a4281a4d95be5c55332fa0cf
+Output.1 = bf16dec355433fbd3babcb6887b9dc305f0fc32063a956f00af0b7f4c09a52b2b443da7a25a3695c33fb773c603a55c94e86c03de24f0f468226aa1b287a2192bb8856c1297098f9c3010bb3854652cebdaafcc997fa4ce844c31d15b812fd21dbae760da96c50836dfdc3d5c19a1b6f
+Entropy.2 = 0295eab95b2beab2152ebd3b3df31f0a6bf7ca55bde682d5
+Nonce.2 = 9eafff0d6c47dc3aae40d8f2
+AdditionalInputA.2 = be18217c79ba99d47ef91bee75b2bbeb21d830790bbc684a
+AdditionalInputB.2 = efc73b84496469c5eda8b02db076f9c1478650879496431f
+Output.2 = ab44dfdc590b7af12d537b4ac6699b6258ce6a2c866a5d09616e17dd58a1a7d46a21cf074b7b9dcf5d95778415e7a8b9762a45bbfb6fdcadf6244204e1d0862df791ca0df2f5c5c648cb04660bca5582972ea43a0a0f1bdd23683799113f0efa26ad31fca15a4628ad157d405295f0af
+Entropy.3 = d0a435f96461ccf9192eb7f68676a9aa125190b65a8c31f9
+Nonce.3 = 087f18c1e9b7c69e272ab149
+AdditionalInputA.3 = d47b0ef89ddec88ca648ad2f18576261260f6aa072b58764
+AdditionalInputB.3 = 88223f5f0e52a88f8b464ead27f194bfa1dd5cbfada46eca
+Output.3 = f45b7f407499da13604b6edeed15c5bca77b0a70def50507e8acffe228b083654cea602bdf3e40ebad7f35e672588a2e01c332c2ed8a9c829274898c8e2305f63c09a781dccb1870eeb841b6b9ec5f33fb0aa70c9aa0c2267ee4cd093bdf675dd51482d7607afb3048787984830ebf27
+Entropy.4 = 959b6bff05371e71e7c6d38486a041b57a667001dd8e92e1
+Nonce.4 = 48fd2a6be61454d85ce3ab25
+AdditionalInputA.4 = 8339e74baf3c107aef29cedbd16c099daf8322487acba8a5
+AdditionalInputB.4 = 6b7d13415e1322d8143965cfc7d1715d381750a0e091c3c8
+Output.4 = e482a5e24f11bec3dbd496e0773b818c50c96694cbacc292a45536fb93588bb03ca5c15edf59ffc918be6ab73f0b5ca79a9f0c09a08b0e458dd864207c42df2e2ae45489b3519594bde53adfe96b4f4570357101ed5434d90ce71daef9c438295e7955a5556224d9d176270e99f29037
+Entropy.5 = c26a1c4c88cb02f417abacd3a27a31921395dce2b08c81e0
+Nonce.5 = 1418b871119d9ccd33dac434
+AdditionalInputA.5 = 4c93093d0a5c6f0a073999658f24d8b3a5f6ac8eabd59c52
+AdditionalInputB.5 = b41b61809421a996d36f24962667db544995ebff11e72370
+Output.5 = 7c6205fd871f78031c6a8a992386d4d38d4a057c5569bf50def38e3f6d83cda024cbe3c8f76c16d95c5f75d6fd495b1b6f49fb27d5f79e6e02333cadd93a2f7d0711536083dd32169422f0b3a7f15975f672660256b4b4efdceb22d6249cad912f8571ef4cbb6331e9473381469d43f1
+Entropy.6 = 4b7df454ca5b2c86507580f8a4c9b0bd9f41ff1385aa0aa9
+Nonce.6 = 1b52a7f4498ffd144fe34399
+AdditionalInputA.6 = 7d89fd1e8d903c34c5e35d0786346a6df5b0f34963b972b8
+AdditionalInputB.6 = 097b39710a4f83166e5f1ee294d52648239469492a03b8d7
+Output.6 = c5a9e88502350e53c00ff52690261f1438191d145d1aacfb40f8d6b13feb6f11380f080b1d0b5d91c3962a4b5f77ed7e43e6b025c28bd6f47a99df3a3a68ce7f23770a60fb0686ef730cea393df718b25c81c2d10da0ecf55c4d0b6b2b9729cd3caf18a196c27868c41970013cc93ac1
+Entropy.7 = 3c2c85cb8840d5900a7f5fc1d0c4e1bfd090ea8c354e76bd
+Nonce.7 = 4d82e8b2a7d03b4a5227c57d
+AdditionalInputA.7 = 1a2d581f8baec211351c604f25230d0824ea6c32c73013f0
+AdditionalInputB.7 = 19c8e4022f023d3ec597863affeb772f28280a421800997a
+Output.7 = 947536c18d3a7d6365351106fc087ef4177c8ed32c81ce0e5cd8481239ee148be7a59940dc8580d2869fc06ff18da2c58693102daff817d3bcc94803f28126816468596df1d5899e42c6346e24fc6aa52dfb01b17f58a91101a1ce3288fa17cb56454a3e6fadade70131d875f7b27012
+Entropy.8 = a60f3e68bc831febb931685388d20c3384aa84bc22bc1cc3
+Nonce.8 = 10b715ca386b573dd61f47cb
+AdditionalInputA.8 = 01026eb2be8698e9205a8849a24d91fe51213603ba5375ad
+AdditionalInputB.8 = ea8486e1b817ee73b97dc36fdda6e06cc73b0071cb90a734
+Output.8 = 50d8d3dadfe6b90d4035bd41f3614f21c2fce7c548eaa2b56e814396771bddafc3c784a962093d3c08edd9b4aac97fe857807e1a238a598e7eac874c8c7ad4e6e471481061dcebb9bee8447d1fcd159c0d4a20a6e4cc99bfda66fe77d9051315a8de5622e3d2ad3e4f14ae0e04a347fd
+Entropy.9 = d95eefc175dff8e45d1d6235feeaed46fa61e8d05da75cd3
+Nonce.9 = d4794d842266513d37ad302a
+AdditionalInputA.9 = ab52641b345da4b0e2dbf9ba684f3cc8a1f6b835f38d1adb
+AdditionalInputB.9 = 775a69105c74e1e69ec24d4b432bf940ef922c90eac7b825
+Output.9 = aace92c24618f06ce42bcfdcb7e197e8f84cbb05ccf42c480283170ea4760525a441bcae91ddaaa51b594f6a8ff19ab6dbfac917b8839397a2c9ce3f7e1e7ecaa9ae01301b72644b283a6948a71a76d80ceb3391b479361656927da044c9396b330874591f0af3960947c36ba51f10c7
+Entropy.10 = b4d878c971f827313074841750dfa5d2733620c48981645e
+Nonce.10 = a1bfc76a29052a667d345a9d
+AdditionalInputA.10 = 9857236d6834efbbe2c3993dd3800aa317672d82c9d47499
+AdditionalInputB.10 = 507124f8cc320d98d178b21bc3e6fde209e07bc046225101
+Output.10 = 311f2a5ca649ea2f58d06f3cb44b78e3de8b074857c02c3728f90e45e957eb4fd8c633dc2a871fcc786e73ac4df4586c07203ca23f0d460e36f4be0b089dddaf93d82b42a7f36dea4d91a60d8d93a6e9c9ab4852bd893a6359fd129b25add102d91878a87d9cfe3867185179782f6e9b
+Entropy.11 = 9ac1ed2be242ed5fd5324e56857c32128c68da90a07a59c1
+Nonce.11 = 9264729bd6de7d59843d37b6
+AdditionalInputA.11 = f25d45f3a74890cd0fdc522ab295f0703238a8bb725af061
+AdditionalInputB.11 = 9ba58d7a6bb20dd5039906c897fdf7755fb50f82ce518172
+Output.11 = 2d578c2fdb58cd91f93819591efc3cda8ed3d721e3ef2519134e272a1c044f2362ad3271099c11b1b5733de692fa832ec8ace344ed2cf132b8ee51aeae8a3f9f1842ce4137a3ddc2737d861ebab6b360502ec85788445cfc38bb0c427d0ad26966aaecb699df46c8010b4f4294d76795
+Entropy.12 = c76928e0c580912f08275acd65c72966152f71afd7596b3e
+Nonce.12 = 9bd5a085f0d2adae355b6273
+AdditionalInputA.12 = c3497fabdf21814366f8aa1ac244860ed2caa886e97aee04
+AdditionalInputB.12 = 1172e889ca9bba0f8b38b1a63a2720f83a45436b8ee36795
+Output.12 = 8cf2f71556634f6e066f6dba2a5c51ac4d3c288b772e1db169f8e3699f613061023b3b4cd63d66e678ad8fab81632ad221550cdb8e9455af21b30b3d2988d97b70524a901eca88c5484daa7fe1a56ef7598d18b7370ab66408dfcb85e76692fc42be36f550408c26271698de04fefec4
+Entropy.13 = ec7aadc75acc09e795048474173a63376a6dc401433d52b5
+Nonce.13 = eeb567444ae6c4698005435b
+AdditionalInputA.13 = 4239a623a2130ad435e03147820cdc06beef91321d3462fc
+AdditionalInputB.13 = 3bb8ecf4d3ca275b298de723460c7eb1e24c699d7ea55607
+Output.13 = cafdea1e07c6d56eaa45abf259bc340b8e96101403ef73393ae0d65aa694490288e5be90db700f7bb190a17db4f90763a1edd3e7f8bf9c48e95baa429326a75bebbecd817100c73767a9b6c5643520c09b2ba7c4247eaf4a97fdadb7b9bf9c8ebe54bf8dcc4e258e8bf6ba48baeab4e5
+Entropy.14 = 4d997980b937c73e2fb09f4d0d64818cc388ab0630651de8
+Nonce.14 = 393cfa1d7bf9444f4f1801ad
+AdditionalInputA.14 = 38ead8a466e462f5c0617822c23294cdba07a80fd51dc241
+AdditionalInputB.14 = cacc9efb209c71b123498182d25081aab8f0159bed1fc0c6
+Output.14 = c200766d5caf72e64a77a7fcae1ae3d14681e33767ba2ba7faca26209fdcb59c7202c381b18adba07ef0ceef443d9e1c5888366bfd953d614bb184370b45ea2b44a251e381fd2bdb80bf4bb8dfe011e1b143032bae9ce82c2869537e70d36622bf23476163a2dace9ba863a5f0e3d303
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 7779b338c6daf3a808bd6d4d4f8c9dcc417858c5b9eafbdf
+Nonce.0 = 4c3e8a78c4b6cc08add21f48
+PersonalisationString.0 = 3d3d654bda5319f1f33a8b961bc4d81725708f49295f4810
+Output.0 = f7417860534c53c0b76d2661a4d7f2a73c3079e257708afd4a098666c6d923e61cea1a402b00359a375f5a2548261e3ffcf6905138fa1e5844a3ffe4807840151ddf8b0fdd779ce2fa4eb2dc69867322a942b3fa379f8e660c4b9cd8f4fc8d054ecd9a3e1976d48116b6227e48f3ebd9
+Entropy.1 = 78127871105b41bcab8e2fcc0872c6a349f79bc4f5de99fe
+Nonce.1 = 21e680ad4785b31e1c7e196d
+PersonalisationString.1 = c16204d3d686bf094f8ec7adc787582385753fca97d58031
+Output.1 = 3226aeadf9dbf8539b43f4090f617c3c9e2af46a9d23cb8b0100c9159e65e6c6c868ee6e129ec051a80a8b824cda03f01870dccc286a8b5eaa83973d418c51bb9636711974123a1594c9684e9048b58bc1afd7aac73af08d39741f364ecca224d10bcda931f1780975de6da62ea63acd
+Entropy.2 = 1b46250422517fa0a310728a513e16d7f5bdf1cb08957de7
+Nonce.2 = c04fc923b05357f50949be63
+PersonalisationString.2 = c13565a9eb0eb4e3c37e52d376004099c317d59d7f16bcfe
+Output.2 = e9d487826444ddea533fa320b5b6614c626f81a21293a46a426bf122921a453406cfe78b520af28ee242ccf01d9bc91c9b0e536a63cdc0dd7b2e9ced5522b8b715a60090705eb294f1f24c419b7b07e4e87ac437ae42ea50c89fe6a1dbadb4a8ea7cb208649a44fac99924a160599ba7
+Entropy.3 = f1a475541673e72ad1d8c87591ce76d2b10ddfa6a37b2a87
+Nonce.3 = bc5fa0485791066f00109616
+PersonalisationString.3 = c419f9f1ca9e1d9a581249bf304f8bcdf6aeb72ac93cbcdf
+Output.3 = 534d83f1fb149ef6f907923156b300850be81acd35adb1ad57727d1c45e70a04ef8333c41579af2762aae14fa9084d95c02322854b0b5292e582a724e8f579ce69503558bb547e88ef1076c88b83cef5d90620cdb9f03e1106d9efa10400f721a712b3dbac020332523a4e3517cd51aa
+Entropy.4 = c9573801888e1ca2533db8e29b63e3563cb2a92c3400d4e6
+Nonce.4 = 6a34b5ca69c275641a7dc02d
+PersonalisationString.4 = 1a9e250392d2f10e6941879f52c1ed99ddc1dff67c747156
+Output.4 = 1f41ced1a5b39d1c3fc4b4f56c4ece55e9838687359d8815e52137c653a0645629e9874fa1ae2bcc4cf5956b7c07b9b5979f8cb7dc4dbd472e8b2538dc5b03ae0e7ccb20dc44b1a5c5965357fc08bf4d80efc8b53cecdf31a2495813df49434e21dc87bfb206e01aac1ddc01c64c31bf
+Entropy.5 = 5cd50643670d4416392de743674915df1e1935949f0e4f89
+Nonce.5 = 7f51ac7a050697e871ff8c64
+PersonalisationString.5 = 662803dcc005cdd5132b31e26dece6be6769b63a78c74e3d
+Output.5 = 0457a933c41047631701928096f4e658d29d4ecad3c6e20ec5d6601b48375b1031364aae14d850f41a40aff32611ee03888e452adcf1659feffe6bab68c4cf561e26242f19feaa466ed3c3d76a985fea781aa7a0ba9eaedab04930a01fb3297131fee25bd8c0ba9cf004ac411f828b93
+Entropy.6 = ccc57ad67f97d2cc0fd5832c22aff1d1dc9434b9dcd91b7f
+Nonce.6 = 5280496f83b449b8418744fc
+PersonalisationString.6 = 90bc8d33e5f5c2811c763223b1d116344f2040334d4735e8
+Output.6 = eb62f1dfc617444e7269021d955edaa4c2e8c5aa1f151617dd6cb4c1015f6bf7fc07b36e91f7fc677a78c91a06867781418ccaaf0f2b0ac2afd97400cbac72248f86c5b7c93d5b32dc5cbec6239681d6fd6ff2c191948b8a9c1702b0e3c155ba7a9135d43109c1dbd7d720b20b0a694b
+Entropy.7 = 20b5e9a31f2a548bb7107288d2f5f969398c5fc80b26fe10
+Nonce.7 = 16c1e60cb5fd3016a07ab45d
+PersonalisationString.7 = d48ae24de4378a50597017aa749310cef92244622486e05f
+Output.7 = 3c7bdd5caac4a54523732edba53dd8af20e27c7b6ab3c0be214c2d202cea315dedfcc1d385ca8edc2321877d10477267876d2118c8c0bf7bc1eaddaaaa1dd8ce771344464366d3c3cb07b1baa256788a46375095220406921991e26e5212317b796e327840ff0548dbb7ac89ced0c664
+Entropy.8 = 7bda764fe1ea9aa3fde49d0e7359ed0f90b155ec9bc8b21a
+Nonce.8 = 1d555eb180a723a638422a29
+PersonalisationString.8 = 056d7e15879e3c80b2fea17434ab7ad596375756d984b620
+Output.8 = 2c23eaea5ec8f17898b080f203af9992df99f37dae2a475d966076600ed62add0dd70812e203e7c4beacc370846c935d6e5363131b84eb5b4189d3a83729ce2ed4ba30a7b56e6be640ad32a613e301cb316e56b9ae308f27544043d7aab18ec356640bee179e3a6d731616c4e33cbedd
+Entropy.9 = d72a48b27af5caa18e767ce1f338d1f69e75b26ec2cc5bb7
+Nonce.9 = 59076bb91969ce4acabc3a9d
+PersonalisationString.9 = e1eb9ec1932197d0de11fb000ec037c1b529553861d4fda7
+Output.9 = a7e62143e2419cb5a068fe99cd4f55d965d9da42bcf6870ef5b28e23961c5b31bc5dc1f0c2e298f41d3f75c5c70cef3aca70697662a2821474504604e32205620ffea2a6769ef83e22ced242d56b7e57ec20bf9dc0f504da10dcf563d551b8d89efe868cfb91f8e354c2166dfb13f3b9
+Entropy.10 = e27c86f2ade75590f5433fce85ad3da496af421ffdd51cf0
+Nonce.10 = 7f80ff9bc0ef064e19033236
+PersonalisationString.10 = eb249b714f641102d1f24d274c3267c32f5ed6e4d32fe5ab
+Output.10 = 36717fcc062701f88960fbd209baacddb62dff8403edf016ec54e36e7d6d3b392b955e4d6c0099890c8354c2b796ae81e0a5276298a39b82901b62252d3dc97538a47d2eacca41f9bf7893504375bd47ef482948891390ba7ab9878e9fbad69c6b576b822e2e46697b0051a8efb096f1
+Entropy.11 = 107f6c39a6cd5c119408ff2a56efafd487dd994eb9ea79ca
+Nonce.11 = 9f07c0e473afeba57423af15
+PersonalisationString.11 = ecd1ec1d7af4b2a13a603bba80ae16b9af1c7f56d80e8b01
+Output.11 = e6cd1028751fbce6dbb60d61b6286820bb201f10f696b37b6dd504182c6110c9888cdba5d0e2acd1cd5fef18bf6fb802bdeae46b145db0894848012c838aa6c0d7899ba5867d3af52d89ac1d7711ba5cd953eafe917f35a6ced3ffd2fe5c2f266eae20c77c5e406a3d9818a8339d5786
+Entropy.12 = 888f7757e59da40cabb86ec5c931688a7f043d8f7f283ad4
+Nonce.12 = b7c5cde1289b62cc1c004fb9
+PersonalisationString.12 = b9a4f1b1f34126e5e8f27920d70db25c381836edf73f08b2
+Output.12 = b21e6dd34373a7681cc23b524e7b25fb540ca512435d4c0dc93dbeaa495e70a9b4629eb383ae4b275b59021b27fb4029f5de45801f040471764fefdcce0186b56f08274c7e5af0d2590f75ebedb1671fb5fdae7466e13f851f52d9f027102be0bdce66e01849c229c5c42635060aeeef
+Entropy.13 = 1cd10ad0a015083c3d6f24ff837e51b3be5692d51937fd27
+Nonce.13 = 1411349dc6b43dc7534cf42b
+PersonalisationString.13 = a85c155a5cdae4ad4fa5a1d3f0e691eb9b038463f259800f
+Output.13 = 491313791ce732b82e535011ef3435ff8aa547c2caff104a665f1b87934808b3afef4496b93a3c002febc94cc465c772284080ea9ad47abf7f560cf0a01eedea733a3ee6bf38eaaf83e3213245fd337973235ecc46325be7660939c614a1a230feca0a5b08934fca989949cdeae83041
+Entropy.14 = 440f9526897f79d20473708adea88954a4739d7878a45926
+Nonce.14 = 7e2f3e4427d00de41ae92bf6
+PersonalisationString.14 = 2e8bc8edcdb3dfdd451542fbc68481b30964fdf8a6ca77cb
+Output.14 = df949beb9b33d2c1522cf6fdb3206cb10b58411ba9e28a4096cda7662b69d23e0da2be9557b9a3b5a8d67db4d616ae9fda3a7e0a8516196568f7a81474c0264993b141f14066fbfc29da724e447f6e503385944e902510f0b3971f7bffc6a6a202ff88d8113bb222b104055f427fe770
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 46ddde45b98fed77037fa8ea68fb43ba6f3392cefddd2eac
+Nonce.0 = a45f96b7a1336ddbfe85ba81
+PersonalisationString.0 = 2c67fc5cddc80426e0997498fd33aa00fd4414607f868d74
+AdditionalInputA.0 = bdc24367bf9d8cfc09d26e9530d2cdbb0db31918ddb15c9e
+AdditionalInputB.0 = 89cae49c4384bdc3bc660693cddf56cd1711474def060c6f
+Output.0 = a4b121425727d5c73ce3660728cf20f7c2caad3315b8309de92fa479adb05926a26e065909f3e4888bce158558234def80c1a37505edc3568f69b27791e78780cde40c1e3e9b2d271ce60ed9b48bd087f566506526c1a459980489cd0e6ca02d350aad9dca3d0e364296b961760e2d38
+Entropy.1 = 58b347f846c9b315104bf7c48a04933703825b97da941446
+Nonce.1 = faa02eb085823f290bf2dd2c
+PersonalisationString.1 = 9e02fc504b0ccb7839138bec99af9d9ac507e01c3f34d02a
+AdditionalInputA.1 = cbad01dba02f838f5f796faa3b514ed9f475bb75786bea79
+AdditionalInputB.1 = fa720a5c03a7f2a350f68b82cdd11d17ade8bda0f18881b0
+Output.1 = d6a9a44fff51ab1c211a04118bc60c4904f7c8e7b7375142036f0c23da33580339cd38c37b1bf8d9ed742beea284ec03565c5b4f6abd87be9d9b8434d403a8e52b6c0d9f0684d9e0035cf8c22fba4f4b7e4d33ac699662ce6ea69008ee2521ad0298193221310003811d39d96d381ac6
+Entropy.2 = 74632987157805c80df8ceb811b42ebb1a8d6be6efdd4926
+Nonce.2 = 5eecb01070fa639be1874bdb
+PersonalisationString.2 = 439a0e3c6ed0e4ab53c5830e77a0eb4f556ea41911b46825
+AdditionalInputA.2 = f6280e33413814c58c136646633f5567dd3c7958b6661229
+AdditionalInputB.2 = 082263d9c1025131d9b1c451ea9ccc332af490ee53ccb687
+Output.2 = a19fbde9d5dfb2a7c11ec095eb2931f85f613329ae89a33eff13646d67ccc0c42b176980947056f505d2665fa12d959e8a8d32c4f006fc51f8432d38f4cbaef238bb361aebccd9d21ba97af9cab73a4fa5cb6b5fd8c7559feef742c968261ab2e33da38fac1d630d0775e60d3f9382ca
+Entropy.3 = 7deae19a703cb88a2361d86326b819465499a7679fd052ba
+Nonce.3 = 0fa8a6d75f31fe2db5a11d7b
+PersonalisationString.3 = 7ccf88c1a1def998da19cf98ca066f476840b5e4bd695dfc
+AdditionalInputA.3 = d7fc4837ad61425d589a003465431546c58ede4110e3cf4b
+AdditionalInputB.3 = 28dc09ccd7f1b9c616b2d45306ef250ac58435160a63c740
+Output.3 = 554c29e5d2707c66f70e371020e8d4aefe5938b061dc362e810b5bbc5da1c83cdbf6441754bc0db10d0178383d700ebb56e8c4be777241f3cd7dc56e0b057d30bd326cc028a170f07868e2d9b7491f02a5888c8d67665294d37d324303ea42f13fff05b01d820cba0f4748e460f2cfaf
+Entropy.4 = 9563db55a321bfe87d7d09319bf23235d9228160dd5fe156
+Nonce.4 = a2abe2ee5b683a2e37b2796b
+PersonalisationString.4 = 345034bad8c3148b28075a06a17c2d2892d7eb5fb608ed8f
+AdditionalInputA.4 = a95633eb69863d2a84f4ee91d489b008af687e7bbc160bef
+AdditionalInputB.4 = b4ff8d84990345f7962f4847140090556e48b6a747632755
+Output.4 = 0eb5c1947f3c9e8fc39b69ff69eeaba9643497f28011799203a82b2c39d1910040b6a12f7168aef8209864c0dfda672334c4253a234d7bd21f2b7eae18a28f4c135e596a9adbe79226a03ed9ffbef4a58b564507e464dc5a8a1d4150127e89954b98085f78546aac878429cb2d749d0a
+Entropy.5 = 9c43382b38f9b820624a0b87fda180cca680a9865fd9a94f
+Nonce.5 = 9be1db042f7231b5e9b8fd5a
+PersonalisationString.5 = 2e72b116abc67661e18c839508b85c8a0624594e031572b9
+AdditionalInputA.5 = 7c95ea0277483aad448e213ada79602f952c990935a9e605
+AdditionalInputB.5 = 010bb82c853baaf66f2371a60763f64c7961394ffa8eb780
+Output.5 = 3b33f8643ae9408c6bd95105d7cd8e807daddc0adf7db5f4b5184e45aa68287244cd9f7ffdb65ae1a29cedae6b2063fe5c0111da109357e6dffcb3230e0abaa5cdd4d7d6ddcfa1aae00b52d5ed0b36833aba9cfdfa900a152ee259045a5291ca584661afbcc140677601a0bde22fb137
+Entropy.6 = 3a505aebe4beabf45a1547ccff0e486ac9acd0bafab5b118
+Nonce.6 = 3efa4f2cc667db0a6086f174
+PersonalisationString.6 = f8c2b4b2d8ddd2279d73b01d801c299334756149915a395a
+AdditionalInputA.6 = 8d43e5acbaf6828897ed954a80954ca2460ff794339ad186
+AdditionalInputB.6 = a19097bf67abee1a038b1dd5a88a20fd2429f100d3d69fd0
+Output.6 = 767f0201be1a01cd68b898f5aa77874ebd5f2c940e86849114e6abf2475e01774dce4918223ed4f2fb913144be07acce98eb31ffe1a10aadd671ab60ab2b814f3f4fb7f2ae683beb327352819f9b10d73d8f24e1ba2496e3542e7a654cf84b925ed64045c26b11778ef9002ebdf34fc2
+Entropy.7 = 7b5e5fc9a09afacd1ae4e71d248c4906fdaca57c85a79c48
+Nonce.7 = d9fb65dbbb02224e2f403784
+PersonalisationString.7 = 6f3fff13edc6909f817d022994fb1fe93071e2f6657b34fc
+AdditionalInputA.7 = 33e51ef5a8b479b6982337fa77888ab85f40357647cc361f
+AdditionalInputB.7 = 139b3c166f174e53eb559cb2809abdb5b58ad1deb8b9e5c2
+Output.7 = 60ce79ddd122965a9e6ab06160e576bdb78195332cf29c9c73a37a9aea883dc649f0df395e1c7f89a52f55bd80b19506d0e8a78641ed7661235cb71c81bcb5654b338aec635f4b5c86b2b64158b9689e307c4a97a385bb9e83f575f67ae331e63c4333fda3b8040027bf83b579279451
+Entropy.8 = c2319f76bf25e8ffebdd64b0fc03a2bdfbfde4d6e2f78a46
+Nonce.8 = a0d8fa1afe79bc40e6461b41
+PersonalisationString.8 = ad96097ccf90ea129d9b1721d93ee4086020e355e476463a
+AdditionalInputA.8 = e68edc4dc49169f681d1f1353b3b2d55b49846db81c5a31f
+AdditionalInputB.8 = 26ee0c941922cc16c5ef7b8ffddf48f2a2a4ea0e0b49e57b
+Output.8 = 8e5cd4c0f0717b06d25e1c54563228d0e6f751691c7ad902e380b18f09bd0bf46c2b96bad60c106ed9d26b399b80f074f745055fa7c10e7375cbf4e02a2cb7f062b4cf404a0182234dca2be69f0b0625f897a9fb2c596169fe8be0acd0f01f83ad5bc8f618242203c436197c679bef3a
+Entropy.9 = 8e6d8d9efcfcbbb8bed7f3323ba0b04cf815af9f4a4805e3
+Nonce.9 = b40e689ff92667a912b8ff59
+PersonalisationString.9 = 1d6ce0115398c5362f6e9ad62d7d37a4a184258f5a506e7c
+AdditionalInputA.9 = 0bdf19bdb27abec77218768e59214b0979adac536be6222a
+AdditionalInputB.9 = 178edf54f5f96bd82e93e577d4983d2f153bba7996e29408
+Output.9 = 02d79a029cb7d601c13ffd0913ec9d53f42e647c1172aefb48694fec2974bfc9545f9fd53c99fe70ff4bd9983c0da886f622315927e49c982128a64a6882d1ec0c7513e660875ae298e4c6582558163e299f9dbde5ce8dec518d546402c9b41f88fb6326d1f0be3c27d2a2213330c7e8
+Entropy.10 = 827e8e215bd31ffa8df600f99b6e8c969abc1f1f0f2ef40c
+Nonce.10 = b55aebf8ffd0c5e8ce2d1893
+PersonalisationString.10 = 584355cfa8e990d3387e9479078d42e8d8a590fa8439901e
+AdditionalInputA.10 = 2ff8fff65b445a7917d8d82b4740fcb3d8c71865764901df
+AdditionalInputB.10 = cbae7b65632eea51a2418a331b366ef9eb629f011f58094b
+Output.10 = acb9a14f721eb5aa378efb4c581b2dae310047a3f935d52c187ec611ef09bd0924b429857290c69813e3257c6e141295c4c797447cf13cd53f6903ec5e52139fea40af0544cb40626af6605833839881b35886b11b740d0898ca03b5c4389cd522d8aed9a1e3d7676913625557b49cbb
+Entropy.11 = bdb56b4118fd2ad9b059ee7b11c27811a1c928409a7db3e7
+Nonce.11 = 43f68c453bb36a6577eda89c
+PersonalisationString.11 = 9f6fe6edfe933dc0184a61fd06b272efd84a54ab37b36b35
+AdditionalInputA.11 = bd082b306f4bc5e6e872aa654d3aa82c11aba5eba3ee9555
+AdditionalInputB.11 = 1781a62f4c63f16f5eb4633edfbc8b9e653538340f6894f6
+Output.11 = 1d50ccd513be2a9c6283becd42a6d6ebe187d09fd05b4b7af914fda1fea1413d6ec59285b9f8a156da96e205415bf623b7e42e2e94b6cb851c0482cfcc705a3b09ee1f5a6db2d4a7b0e8e20879df1804a3f7dd03725cb01df9bcf185bfc1895cfe777a2c6b8782dc95ac91df71cb8daa
+Entropy.12 = 95ba955b8301837490ef805c00b487e7b4d9cfdbfbcc6fdb
+Nonce.12 = 26e75277374188f329ae3173
+PersonalisationString.12 = 2d90aec09ecd7f8b1f44585b0e6cfd035c23eaf8cd35acd3
+AdditionalInputA.12 = 6642eb07b42b9b2268ebb4c77deb8e1198b8eb4b013800e1
+AdditionalInputB.12 = 57ef8a5552a77a016d7da606e2706188a446eab1c41752bf
+Output.12 = 6c53aa52f02357646b19e0b356237322d452324a805d6e55c37b02a77ee9135c6b61ea6ca3fe47f67b98892015806d20580132df37c37f98818f0e42895057d83e67454f3c91fa8a5701d74433538edc1e1c1040bfe3bf040dece9e7521972970c42e7f9842f03640677d806b238ac29
+Entropy.13 = 9bcc73f7f5156b43ad8e435e5dda09827aa6527b3295c2c3
+Nonce.13 = 93e36bffe4d423a1d84ff20b
+PersonalisationString.13 = d9ffab14c4ecb7735548f2c1455d3b594894ebd3193e2667
+AdditionalInputA.13 = 79f393fab3becf59ba5d64c2339a98a8103d88937bd083ce
+AdditionalInputB.13 = 16cc2e1e2a9527b3625f7dbe0814adcbab0a2c9d1a6e7012
+Output.13 = b142fc12823400ae680f391cb3917d6695941d97a9f15c26780892269046a4056d7e7fb94465aa90acf17ecf0d6cdab45ac3eeb67d1e8d02694e48312b246be9a77f6257924ab5ab61e3e59191e3644b49b17516ba8d98df7df2a038f97bd31b23c048cc1d4b1722d023895ff656b026
+Entropy.14 = fa4c240673f669f70909659c0d029b2777d4ba4608035309
+Nonce.14 = 656a121e15ad6f0910c4863c
+PersonalisationString.14 = 73172975a452683cb4d0068b449943fd7e90bd173c2bddaf
+AdditionalInputA.14 = 23a781948449d82ee235d0495ca48d61aeb399d7e2ea68b8
+AdditionalInputB.14 = b52421e5b0e5281920da6975ee18d74ceebdd5d5de05c018
+Output.14 = c878a886e24e20a8b7e22e41ebb33a2b6e9a0168f4c72bebb78f0955c8449592e91c6a2f1ba5554c9459bf2702e67470c1df0b5125d651facc0a9339a2b7c921a51bc7203020f085c9231b3acd850ebfef0d0e13dc8bcfecf1f9853930ecd9b262cecaff0e2bed9e3b5b53343b733766
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = e3531d9061eead2c3e6156d734c868058ee1106d6fbeda03
+Nonce.0 = 49f1adbb9b0434e43b35f61d
+Output.0 = c83417e540a8b865e1fc67010f7c3ee53fbc7ab1476af839ed6a68b6868da3df1d7bcf0a391d64a8355483a13001973e6c41c7ef67775908e7722d33d74c3c1f1f4912054cf45907c44f63e95980d3b9431f693257742de46a0110d13e3b4a950ae1beb960827f01970a4423d1ff52f4
+Entropy.1 = 759643955856b089da414cb35ce5fef778e8b841eb4928e1
+Nonce.1 = d67fe75c275c5181e9707cb0
+Output.1 = b10bf0361c4c0bcdc332c2823ba4cbd5a467919209a8d26162706b7a9847d629329dc7b89a309d260d386196383925ec51abba83904d868c5b28d144ee493fc572ebcb76ec896e545b9e128d08d92b7e403c30d6255a8b61329303fc07e1d53924242aaa666eb75de6c917e41bef5359
+Entropy.2 = 0d65675d08778de1c87ea1cbc25cf043d25a445d7fa4ec5b
+Nonce.2 = 04a0474456542589eb16aef6
+Output.2 = 79c04cf6b5c19cc58233175a9f013acdc0f4133a44fbd2acd239ec7147880dc21abef48adca501cec91cd55aa5c4d7dd4396b8975d5ba94bc878e99eadd96cbdd43487fb238e7c88dafd5d6671a9dd7fce815227a87dd837bfe91b38023eab6c3b2c63f91d76008a4fd4d7af75700737
+Entropy.3 = 648c10d494a503cb365b9d9c13c4a773a45bba9283198219
+Nonce.3 = b494706cd2655da2b91d97f1
+Output.3 = 52912f08ad3531ca54ca395b3a82f03be22e5986a820a712831eb6fb040c4eef906216c752240a53a31d0a9fcddc00875c30ec7eb97149de5a407b1cdf7b44e1e8c50b5f5e9edd8074bd55a124ffc7d87b15446ce4c02ab3b6c18a5907fc1b19a910e71b3b83b708deb166d0668daffa
+Entropy.4 = ef089c54bdb8662eb33221a4ef4f17d2c94cbd10e409d6c6
+Nonce.4 = 5cb151a90e401f0a950950f6
+Output.4 = 4f4a23bbd8b8c854f071aca737baa6248f9e83ecda5ed5fbe9d1f783ae212f75efb298105c405669eed22452b69127a67b6c29173f6ad3b484cf9d79d0a54c9d5088e483ddf2ceca1c92c3a58781281716f4df7c1277327b26954554bf606a1ae2adde82658054ac65d8fa65216e1852
+Entropy.5 = 210bf15ad5605cd9941fb8b309c3814abdff496b7026bdef
+Nonce.5 = 6f6ebd64164b864c44c93168
+Output.5 = 3fc9b64ce46cd25cf6914b3af2962d45cbd8eebd8c5d76fca762172cacc32f86657bec562e325fd7b108adbeacac976b496882dbd43292773cdbe70e8f327d4c96c9ea8148a867d2b32acba33f665984e5ce9e4a70a5ddb534d66677864a0ff1769313bb6a7906e34051beca587040cb
+Entropy.6 = 5930207a31b4c30034c413ddb8e45369b800f3134707065b
+Nonce.6 = 2239d9ad0ba0982832dd94e0
+Output.6 = 5155a1838cbf95edbcfcf08a66e5cf5f84ab4c80971c39d1bd750f1aef0450abe49ed45ad4a2202330e46f39ca3c95bf09296873e2655d17437925cb9d224c6999a7e21ec60960459f3e8eb4b0ef3f400a8bc741ea14017ef9d6e76094d7f48dbc87f9736c3e1c41f6de94ad2f6f9b36
+Entropy.7 = e3c43fa0c7b8b0a983f6029bb588da7291249eb39cd6bbaf
+Nonce.7 = 9a03150a7ee282422b738cc9
+Output.7 = e9f7d7481f9c8e751f7d6932bac17beca50ab599bb84341dfdf85af59c59a4011fabfd91e9c7d20936243709f1a54fc895cab112bc08cd2ec405164f2a8737b2435a89fb9fe9a963b90dc85f0a4b572221b4384d872ba42a85cf3f4afda8a12ad58366c674cf26b3d39ab29b557315a6
+Entropy.8 = 6b9ef81228eaed4e83874f3e0a77601a640b62e9893e5985
+Nonce.8 = 5b895c59177332a152203c51
+Output.8 = addfd3f666e9a55731b7b7657f9fb140f1b87ba509a4cb6e1d67bd5ebee7c91e045551ee10ea346752bfd4ed598b476ad842beaab8c4d5713433689229c183f6e3779b1bc0f03bf1cdb0d5ba9601caf12525b63f2c71aaa46d98910d20c40fe246f4733d8e380ed2b7bde5577e053c04
+Entropy.9 = c53db93a94584242255e96b86198688aed0c6412df909d7a
+Nonce.9 = ff540600f108783e8b0a1090
+Output.9 = f47462b296c558efdc0e06d2f4a4e389ce6e0a8d5b18ecdadf7c903f8b33817a2b28638e4e1a6caab9ad9dbf6b5c78060852cf20ed4934bb1b9498be2738175b03ea8b360b030bcac5e7be9e2ff4906a100df7e145ef7d4b5214ee688dc94a8231a24e221832884985ed6d4bcbd2010a
+Entropy.10 = 7f1f29c7e0d1c2696c3ef8dda22b3d85d3ac800ab3dcf2d2
+Nonce.10 = 10f84345eefb4de9437679ba
+Output.10 = d1fc4d2f9edf1af5ec6f46e6774695385bb124dca4df58dbd487fe043e4ee32d9fa0e4fbbbd48b1a2c7d5a40ad3d442f99b19e002bf41a9f2140a9b0960f4350ea4ee2e54d838dad4bdc9ba579b4d48b3476855df21fffa361b7e48bb3da4555e5cf3b013f0a9c2bf799cf9e37789df9
+Entropy.11 = 7f11a3ea8986e157d398cf9d8821e58ec54b03c074a0d695
+Nonce.11 = e1542d2f485d8d38ce6a0e26
+Output.11 = a1be459a9aec274670ec0551c8d7eb04a17e641209fa9ab023f4cb1e4e239d8b514fa624420ebbbf48ca41c6d185429fe8dafd2bc2188f8839248c0cb3c446961950ba19761083d7ff3dcdb64643568faa93b17501518fd3b28418c8cb12e758f87bfde156743e16c14dacb805274c69
+Entropy.12 = 382488fcb96104b16a3f5a022913d67a5e9292e42f983d03
+Nonce.12 = e42e979ea87b26e284e02fa8
+Output.12 = 1524934e50ec2aa9fa500c942b6be91928e2b74816707f3b13922fe423a00b9f3f08af39afddc4166e43d8cfe67c21ebb81b9502ed635415601dd27b3c975105efd690e3700330803dfd6833e1e080c22f2fd49e63bcfaa75c55d00e5ca32d80f075de00bf475659064d96da16bf54ab
+Entropy.13 = 591bedd004dbd24dd8aedadf9e06ce459ae797c2c5ca1d58
+Nonce.13 = 1901a9199ca809fb79d003e9
+Output.13 = 96fc7b246e91af2e3d53ee09661cec50462717ae0d46bb07419b3587e8966f36c49cdfb65a4b93c9272f992006d93428a48ac73806d848ee7869d06069f5039e0b4941c28f56610d727451475dc3ab8a8a997f65ab1092038e45e4e95c8ab434a2ddbf114805f889b788f43fa8365fd6
+Entropy.14 = 04c61e5cbd79804118267ee1c76db36b71b042bf60a1c891
+Nonce.14 = b833be09092d4755ee6118f6
+Output.14 = 0c4663313750b12daaeee80cb28f097cbe6f50df2022f9ff02a51fb373da42411c5856a136e9645e99e69aee273726d146e3ef4e546273eeca52b43c068887148b7197143f5b9a4c55d4b0544907ee9ad2f181d1b37742d1479d39e78e47505603550d2b28bc1d151a50bbac140988ec
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 2a374f1b9e48284b53fa6b65e7b2c3a8f7ad212f4495cb30
+Nonce.0 = 502aae33e7d4f1d1934b674b
+AdditionalInputA.0 = dd2af86c53672c100bb856e468b4e42dc0f7b0d73e3c3ba8
+AdditionalInputB.0 = 2962f344b83a91a2346bd22fab91fe0bd0b23596f9cfedac
+Output.0 = 77b751b44b7816f93e024a571fdcb4f909abf685cfef2ddec2e7a3d7cacea7ef879653458d5db7398bc1569a5ee4a979f9c8c973883b2c866dc41217986abdc8c534ab6fa3f623dacc1888df1ece46892587e288fc4f07ed4506eef4775ae6aae9756a704b4ae3503ecbbe477c18c0ec
+Entropy.1 = 453da7383e61244dcf6c49ae18ddd190e1214080d01425d7
+Nonce.1 = 189b4405242d913dc7aedccd
+AdditionalInputA.1 = d46ba90eedc984d542336b3625a1739a06f7ad76cbeb5ddb
+AdditionalInputB.1 = e6fea8e1a7a0534fcff5ed7ad2b0ccd87d44ac98397686f1
+Output.1 = 62d6ff99a49dd80751c6bbce4012c8b6b84f818d9e5f74ebcfea24582175a6a004182982d13f4a07d692f7104da2b28d60d70de62605728674b7378a862382700604339ce4e29d4c93e37d521ed35cf00fb08c9558caf2ad981e4b14c37e29fd4ff926cc35a623d481580a51ff7f3937
+Entropy.2 = 2a1a528f725c2ec6f73423865e068c5fdd77399622f58bd9
+Nonce.2 = 68d9e0855b8542b33cb8c974
+AdditionalInputA.2 = f2ee70145e3bc1a41cf0726a46323ffc84d59440e476edeb
+AdditionalInputB.2 = 3b508eac8a11aaf32e5b5e66cecc55376de2ab1ffe383445
+Output.2 = 851df59060efdd1e1e89145996d57f865c0904b7887dfad3a49ffcb2a46871e35b216866d1f79ae8f6b9cbaaa9e98a498013f86abc09fb73807301734214c367207d351e7256c0794702dc052ca4965e60830eb12572e5164df08711551efb6e8102b0201ea1391032e2752fecfe12e1
+Entropy.3 = a7db1d1fd5523e296004111ceb2b67eac91ee1fad3daba27
+Nonce.3 = 2e7f522213ab9643c4ee517c
+AdditionalInputA.3 = e1607ec4d62af93b705ccb88ec089d39219c964aa70210b7
+AdditionalInputB.3 = c8b628c45bab8d44f2b49428340c67e275dedbae219b202f
+Output.3 = 8028d91f312641c56a8e3604fbd50132df7ef4d191f3e97d70f2ccce6f5a6718d0ed00e14b7bac235a2462f1865d86019195a796e7c62187c823192157f00cfd4c98a2722be766dff8d2ef89f616b6727be540513273c510c8d7570c6739507f2560bb18dd4cdae337e0ff8222a7ce49
+Entropy.4 = 78c483a5e54b968f81b3342d86d9250001691acb66599b05
+Nonce.4 = 5ee32e6664bb4e5f30e0d079
+AdditionalInputA.4 = 00b801917ec202abeeabf7ea78e6b03b9e785f7f36298dc8
+AdditionalInputB.4 = 45c22ea281c17ada08a6fd3634d6615c018b097f7b7ada7d
+Output.4 = 7164d27163e571f970baeebcb4c74e197c3fa0d93a0db0545d076654f6f64b7bea5801481bf7f6fa30924f58779a72108bc621e50ac7008dafbaddc61175645cde5e63467ccc85da3ac0a23ef565f6fdee981360a7499a9d1d6771d4a3d3f072e39566ac5252a66828d37b2c24b3712a
+Entropy.5 = e7a9e9d0c2a71b6272bf4587888c0f6fd553c542c4d4c2da
+Nonce.5 = 0b0dcd7cae761819f1b4a42e
+AdditionalInputA.5 = 0dff8772462c6a48ae96a0f0e843c26287fe543a30423ab5
+AdditionalInputB.5 = e9106acc0e9498cc906d0cb15afc41600e3bd54f257ed8a1
+Output.5 = 421c4a839698ac3e93bf795046da5da0cb986714e9235cd96c1a21830dcf352f526adf04f1ada8eabe770280dd615105ca00c0adb8e2d548fa37ede6c4007eaf9c8686d3cc4ffceea6194e629ab41fc2271ede091233bc570d134037d5e33908570344ae33a91a5d2a2ddfd9f4b97242
+Entropy.6 = a59ec5b841e942983eec7f3c03acc4809ce393f8397a86f8
+Nonce.6 = a65242a7dadb5b78e979ed74
+AdditionalInputA.6 = 167cb7ae8565561a781b5894cdcfb5062233075fc80f1c72
+AdditionalInputB.6 = 9291401c131b56f148e7514a7dfca06970ab07758aaa6533
+Output.6 = 500d2df6741712710460426c2c1b4671d7137c3410ecc3366d124b12ea790dfcec70b1a1293c171174c5de88e8b74ca67a2173dc5036430852444e4a7b76b74993c2b1ae1b23bf0a852c5fde8de0bb753163053f8d3331510a3a54895157378e57f05ff1bb56046aa318d9bacd86dbd7
+Entropy.7 = db38a6d0352ce5a84c42839e36f28a2b9651331330a193f3
+Nonce.7 = 1765a056a954819a7d88c513
+AdditionalInputA.7 = d24b06d2d28fa36adc5c13932f267d9790340b1421b7b302
+AdditionalInputB.7 = f6ac582cd7eb332f1313071b292c26b8c9d827c7a1e13b80
+Output.7 = 48e6da10ff39b284fd57d7d3f4a7d035d0bf7c67e9149b8d031973882bb42d0431648b9f91b2bff4bb079b79abb40a565a391d306de9f18d258bbdd12dbaba48db62cc4b657df4393a607e4342d2b71681e8b3a4d693ec29841571aa7bdfa442db7e4e47b89a84f80650f70005612668
+Entropy.8 = e2c9d56b67cb3a03758ad1d959d012967291ad22e58ad723
+Nonce.8 = 8aabc6606319643aae9d1756
+AdditionalInputA.8 = 07726bf6b72b7c5d70729332f3c35488b60c3be8fdf05902
+AdditionalInputB.8 = 9b3c1cebd6715cf179c422066289f4cb67d1256fb443c79b
+Output.8 = 3e2f34815f5b699f3e3d565525f7c70e5a3d016596b31a1022db66e286d54b8f9d0b33b381f67a63e2c4d0b0c01aa1912ef6022ea647675e3120c755a38040cf495102a448d1a24e0f1ad89e4feb13bf99ceb522e6c5a54cfded9220369f73674ce8fa5e9fc75466bb1ccfad9a31b5d1
+Entropy.9 = 854c45caa4bc9a416c089db8ad30a31eeefb875a8cedec9e
+Nonce.9 = 229b238f05fda43798705df1
+AdditionalInputA.9 = 092ef6173d7fbe83ba285d7863030b2e55f4616870866619
+AdditionalInputB.9 = c1cc56e32151576144f1f53bad44baa753d23cee1462f4ea
+Output.9 = 5c92987ba6193017ee002b023417e1f3da2b16e6a07d2dc7a94345e3b2a8c7367b46a76ebd8be6c2daf9154e55dcda7612d7378f800816804ac16f5c57bbe843b0d23fa0f6720bea34bf0797e6c81a32f9fb366c26b5c09b8140ef51a7f56412ecf44b6e1b35f80b0692d620c0af2b79
+Entropy.10 = 5985a1eb66c44d136691b1364852a7ab8aa9c7a59f8b1cff
+Nonce.10 = 61f3a45bf46be1e707978165
+AdditionalInputA.10 = 8fae2a00f4e40c1105d9e147a5563d48234c67616ae92fbf
+AdditionalInputB.10 = e0f1a6f3d39ff1f80fbabfe9dbb9ea78823d7195b1733a14
+Output.10 = 0d7c66d66e92375fc1b4d8da02353c8c55c343d7c2bab01dfdb0865e23f15bfc19da44a72c168cd1d620f98a81763f83201555fa6cda1a3563401648cee1c0a17efd86ae7d33756c518d635d4cd8dd9921098052e81833a8a2e054af3d05e6b0be9373a595ca57fff3322e30bf64198e
+Entropy.11 = eb6a7bb8c9bb9c13cafc0c3f936ccaa6f0950c34bfb82164
+Nonce.11 = 67485bc4ac4a3c97762e8ec7
+AdditionalInputA.11 = e9481922f448b56d7760e5abc7a8fda1b2c6dd0eaf78afc6
+AdditionalInputB.11 = 1c395e4b395ec43e7f385af0514d7ea64b0b85c090eb777c
+Output.11 = 7fd067ea549a95b7b5f70e76e686a2f9d61a5a6720b5f77a314904b3653e5f7e959b9bbe48a2fffddb6b193ef3ed2f0d2e11f24082701c83b2e824f82e34b31e713e3927a0485f3b0c1c43ab95410796503c9af3e201a7d5c36b89f04b1a7f48408d21fa008bb80b6aa14450cadf5ba6
+Entropy.12 = b4630e1c27ee087559d02d1559925e13a4e24c22d5b69ee1
+Nonce.12 = 266237a8750d6d3f5394af00
+AdditionalInputA.12 = 65a0520a1595f6f9043f95a1b1f9985fa0383ec60a67aa68
+AdditionalInputB.12 = 1624ccd7b38fb92dd7b6a95b7ad25508a20be2ecd9735cf7
+Output.12 = b13d6160c6b96697b7d723c151bc0921a5ceb8885e893e2b0278af356d61cbe1bf7dfdc4cb2cb8b4924aac495915251d0595d0300ed72a8597048fbe347bedc42b4d2015a6496f7454cfbfde80e8112f649d9b5550750b5b8fda0fb8434a5b5afce89edb0b6f696023e2ba8ee0f9537d
+Entropy.13 = 6fa1deb8e9e3c10c181d2254e5fd9bb84cd2934188f71f7b
+Nonce.13 = 6c4fb17c1e78e6ad32a203fa
+AdditionalInputA.13 = 55e9e961cc54430c6de5f22735dd6414724232a79d0ae73d
+AdditionalInputB.13 = 52b8961acadf12310149a01f23555a075095e30363e71728
+Output.13 = d6141bbd4ff580df7ad8db354b0508fd1f80ea7303248d03e3f1c39cc1949762dcb22aea5de6af795471db2a57ed77ccc9573fd08a47a8ed45829a86666cb12afcb6a6c3085351f891b5107742fcc1ea31a7eb48a0bb15af8db9571c852f8c56b39a80c0e55d418f8931906b223656bd
+Entropy.14 = 13e82fe78cc31a8cd6182de5041f013bb88c8507539f889b
+Nonce.14 = 5a01e4ec918e6282c62f8c0e
+AdditionalInputA.14 = fa3bc697a6bd8ce341735365ad6e214d1e53e8d6d0a2c206
+AdditionalInputB.14 = bea0650424d1f26e75a49ae2dc529f1fdc552e3a0aa50948
+Output.14 = 4a718257296a3a99f199a5a24decf8f3e6209a4a7fb0b24913393c8309826ffcd6c47208ea6879921424ca55e63a7e5bc63a030cc48be7648da78fc9f314dacb2b8568635e5b14a94bb06a709a2f023a86a871dfd708204c911d94ef3690b3634e58de03fb20091d628bec834a760dd4
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 964605b6d66e9a5292d9d31525bebf746e4389a2ddc7896f
+Nonce.0 = bdf90e33bcf73335ffd5b6c1
+PersonalisationString.0 = edcbfc33b078bfe6b4176e5be38218d55ce79f2a66116a5c
+Output.0 = 54c7c78469d75c95ac0745d19e9c119a227adac9654beecf7bd9e450e99a2f18cbce799aa3191750ef33f3374fe55acc8a3f6dc0bb25fa2dec93d3567dbde2d7b97db688fcdb693d6737e5f5cf749b8e9be61061c2e568053b59d061f397325262f67f2226f020a2efbf7a35f0b7ab67
+Entropy.1 = 0258db537a8e9c1d23bd71b29bcc1a613c5e9c709cc2ecbf
+Nonce.1 = 0b465ca6fb62ea62929ea550
+PersonalisationString.1 = fc4666d977ee84a698a3d9d0218d67d1f8a383582dfe34be
+Output.1 = 85501828b47fa6214fbecb914c95a8a0d66c1c934bda76a1bad03c87cd3e2205e5989257eebe32892dffbc1ba5ea3fa59cf06ab0fbc30b0b16265e68bd726cc03f4539227ff2ed3cde6c4b0f922176f05ac4fc2135814f9c72fdf1074793503e276b6d724fb4a9a2317dcaa1d90cc111
+Entropy.2 = 7e52360fcb0515224dfa9667da4f81a0f1e0939d6600195a
+Nonce.2 = 6b4dcd641c9e0222a198d0dc
+PersonalisationString.2 = 6c6924fdbbee036fc28e0a81e85e40553067eadb80ef0125
+Output.2 = e6edf2d7bd306163075fa29dcd4febafb5444a491de16fd48bcb41b5145825a3028a0be45fac95dd22f6ad54472115aa6956855b6ff451fa0ef1c772f8e6781d888b02e6d40250bc2ff3fe2441c69f60387e8830f74ac49ba5dda06719983b34d7455827e30093268422670f23722fba
+Entropy.3 = 1c3a96b0e8678021629a617f91f72799226bc752ce3d1ed6
+Nonce.3 = 33b0ae9c091a4071539709f3
+PersonalisationString.3 = 4de61783ce5ec63f8463e0060090bc344d7f8a67e4bd1bf1
+Output.3 = 3985215aa5ac4626d4b0e6810b018bc3499844a257a51e2eb9a1ff14df93bf1966ad825f11d088163703819cf3a60faf7ca2b82309cb879206571e2606e26828a054bbf6cf0591b7461d167b6db830a3fca4438c2b4bdf3eb9e4a6dce82128c5248b0172b22b1db4b002dc54414c267c
+Entropy.4 = 94dd060cf231cc665c6da4c9e2567631561098def0e1feae
+Nonce.4 = 0367559d20ae369046031853
+PersonalisationString.4 = 46e690d7bab0331edeec345b74d7df0a44368d066d71afc1
+Output.4 = a0454c64d8705e792dfbbedd8767a647846e269715813750f3843d8ed4339c7e12b6477340bfac2cb6473d0dd0b6042d9ef4d4c93c53f8901af5888f703a8522f944ebedbf4f84b3a3ad8edd1ff4b764c287cebb20b77d989d8cfe4abba7446604dd6393b6c89926b6ffda462610522f
+Entropy.5 = 3ea5b0eaf326fa080ddbea65729b06494bd066d6a47287f2
+Nonce.5 = 03d01cca4eb32fe2e439d472
+PersonalisationString.5 = 93df3bec33d9b3ad7cd52a3055731fc0dc28941582fb8acc
+Output.5 = 6a1fdee1c3ba9ddb5969e01e601eb752c26b586e10e58b6edabc70af65870b203db1e8d1de547d9cd42c6d7b5b202adade23d65ba2b9abfc7406d11a7fcfd1a157ca7f50aec50c729f44b9d8e13ffc86ba7c34d9d769d9ad1e2794d100ccb2b413f7daa3a462c5dca629afc3e1988263
+Entropy.6 = 69b194b5b6ccd5718f3b86eecb545cec907b2e6127ae9fcd
+Nonce.6 = d7a3946a8e18be90b16d71e4
+PersonalisationString.6 = 187369638adaecef00ee0b98f22616ab0d16c0d4585984ba
+Output.6 = 38bbc7f20deb9e7511eb0935c4d05520f86e51f36d1fac7207f2fa46f446296e3f88d327d04f1d8773bdeb41208d64debc2fa22a5def63cf3ad9cf43afb6c56f6aece59bbc06b2bf9381dc98e323fbddaf92e98dd34771f153e69830e56cf031cfb12124df669c50a0c16091db2a25a5
+Entropy.7 = 070481a6cc60841845d8ea7a1f2bfe6a739809f51d81f723
+Nonce.7 = 20076e507774e4389c938c0f
+PersonalisationString.7 = 8585a41496f00e4636a9f749701b8e4eddda2a2788697a33
+Output.7 = 3f696485a1527a0451862cf583967ab643805532d177953353f45735abe53cb4949f4a5ed7a5a16615edd787b91a58fdd62601126588d7eea751f7d4e1c68e60accc8111f1b32122be63b546ffffed4e78c8fdde3e1e7a9de80a87f2c448d0b2f1f2279eda99dc805b4a90551dd11a4a
+Entropy.8 = 0987377b837d2d1974ed89353eaac47b1203820a44bbb47f
+Nonce.8 = 1248a40c04dc13c12c4d2820
+PersonalisationString.8 = f3b51dca8e1f71495e889f31267e0002f9ae2795f7a088e8
+Output.8 = f5c9f13647415e38dbcf51d9fa59fa255772d7491a25e1ba9fb28e371f7e342a93f9165732a0018daa391e572d997bbe182a7a5dbf14182aea5e00ff461f91af73b7d9bfcc0090618e874169e0933f4761d1645f23624535d5bc6acb290ed75be21fca0840c7011ce482e7471cd3ff8f
+Entropy.9 = ed5dbe15d70905fbebfddc983222354a56deee50bcc7ed9f
+Nonce.9 = 1b0c08e6b9cbfe408288be42
+PersonalisationString.9 = a9850055c33bbb3171eb5191363d586a0feafa3b7725e15d
+Output.9 = a9bd2a135e13f46ee4bbd1361186c9111170dec4204f74119fe0754cc94796f417448b7814e6a651dfe89417e5ea4072f6a68f90fae052fcd2de131392dbd8df1c18e33fe02f860ab4676afbc946a7bab81707ef91455430952a888ce036561768ace89a4c4dbae3f3ea3705f25a4e3c
+Entropy.10 = e0affd64dbb37e7e3a8d497b4e2165f192736b6bce012d04
+Nonce.10 = 0e3acd9ac2002c119b40c0ba
+PersonalisationString.10 = abc6d1563a710446da2dc79010c19382e9b53d146bee5f69
+Output.10 = 0fd5021b2aa099973f5ca8cb457b6cd43e95ef033c6f32d1bdff2a4e74b09cca325a464613d15155b52ade80beb1932afaf1a70a0346317bf8d6b6304fc25149c9829605d6f8aef9af3e0e59d5d91d05a77e135f5a101698222456a91b6812976b1553e54c7b8e8fe55627f881b4bc96
+Entropy.11 = 83ba814f77180faf0c62e7ade044528360406d501428f160
+Nonce.11 = ed146ddaaef8f87227d0a031
+PersonalisationString.11 = dfb64abee8c98592f4697c521d91fad6dc563ddbff54792d
+Output.11 = 9302d1859f659cb3da6a77954bf767697ea30547c815f92afae27679a7b3828c04341f6f5d8076c935516eaf6fb180ffc5cd24a3a1c18ef0af604fd60c21c585a2ab6b8e309ca8796344018b8fad59c10acca5c8077165d7b42bd23e51bbe9fd5bb02bd7f1e56fa462122964cd504173
+Entropy.12 = 1c0b42ac60d38a2f1f5341f7f3c1bfb1012baee20b48c354
+Nonce.12 = e3b6b51e2b2aaddc1fce75af
+PersonalisationString.12 = 5874d0e0629018ee07aecff06bc0ff40c8af290ed80a9675
+Output.12 = a778bf7bfbc3aad8bab72cf82a389c60310a105357b522b6961665b262145b4e2dcb436fe4d796cea8b76885a18b9b33e1b8b513758c6d26dc8660d780ccc01c7e52f12255df50b2fad5711324d963b5238d98d4294f32212cc0f809c4455e007a6aef445c1503d1ff364d726c04dd0b
+Entropy.13 = 523ff413f291ff6bb96de180b81f4eb9c0a01e791663d80d
+Nonce.13 = 5180eedae67148170d37a105
+PersonalisationString.13 = 7847e7a278f2f19986c00c7d26b7331c6e0a600218b67bca
+Output.13 = b7ab143c7d7a34c86c9da733addf6033ac582c74596eba1e5d30ac1a77f90e7dc7938a99f717afc877eb7abe6723b7b5821292a9013c6e06814cdbca2d0a1fa73c927b9f74abcd3b7227552e82eacbb2682f6c755a97bfdce54a24e97ea8f7a35b0610c1cb87059ff2d65f16dd8563ab
+Entropy.14 = 454adb53a146aa9808331cb86e8c0d94495f4c0b4fe5c716
+Nonce.14 = 4b729a67449bb5675a1f9d1f
+PersonalisationString.14 = 9160b7c96fd367dd7d378e82be11ad1827c7661d76bc1fb4
+Output.14 = 1d7ab4500d99a18b8be2ffb8177c869059e25f1ffbddb36694fa8561da1d71f86a38accb1926339f6dff71ea8ed104c3518e62b00e520c51a096c1c62469e56b139e6384e982588e748a8074dccc51d558d944868e2b8e1dbd68bd83c663447590430ebe15c64aba4669d1a4a784d8c5
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 54b0055affad0e71d23d83f45ca49224fcdeaf01f466ea42
+Nonce.0 = c64396b801efab9220c03521
+PersonalisationString.0 = 9114711d6cbef07525c4fc0773b71dc499504164278fffe0
+AdditionalInputA.0 = 7f1b2869608f86a28d9cab4362cf9f61fac61acf305991d4
+AdditionalInputB.0 = e61973beaa0574dddfe68e7f2ca6ec1390063bfb628cde77
+Output.0 = b690aa03f6acb761a4f338d956167f2225479caf73aab84f064accb59240234c183a097a906afce703c0b025b0385314eb9e3275e60e26eb6a6e814ba7a9bc5720e904a31ac15d847035883798ce95d7292cf033eead3854264d15025aa8e4541fee4df1cf7615e226d1a4607ec69865
+Entropy.1 = 6e186e536fe41e9d15358db2597f287fe57d018fcc0748c0
+Nonce.1 = b9856170d5c84fee7fc144bb
+PersonalisationString.1 = 0ca903b164456491c4a0be232472d8c7354a1171a2c74dad
+AdditionalInputA.1 = 6a5cb69de6fb23f7f971f8ea9f1a88d95eae40013a317910
+AdditionalInputB.1 = 246452f5f59015f096fd854fb5fa032f21f9563b1a6c6726
+Output.1 = 872a48dc70969f5b1c88f76d50c9aaa25b9ec4cfb1091e55fa7efed2eead1fec26fa64bbec2ad5f0b1d8e16b65fb7c28a59a1f27c1548585a73e0bcadc9c3634fe3993a24ff00c8fe07d688ff1024efdd2b2fc97fac8e61b93114854ec37f5be20331d92ef919b86c383f78f7dc1789b
+Entropy.2 = 6ac2a32f1dd17b95999f24b2acc717105f9d990931cdf5d9
+Nonce.2 = 5d0bb25aa82e66f86519e6fb
+PersonalisationString.2 = 555689475c716d88ab2e3a1f99feba9325f1b1d29373230c
+AdditionalInputA.2 = ce4077ed89813174863e4103b70393f3c3326ef13936a645
+AdditionalInputB.2 = 23c391d7ec13148048448cb43e5899ab3bd924af4b44b75f
+Output.2 = e3765ba7a62972a271994f3aac87f94f2862e00c8462f7ddba1f773a059f9b887756155a5b7b00d6192255ba2ffe5ee6308e26867d363bb6968329789a622ef657a7c59f5919460ad5316d9d30e22439add62651912685b44b7f80d771509bdbaf9e56ad67cf7f52c87c4bbf450e6f29
+Entropy.3 = 2cf506ece0b5ee12a70d8ea99cbfa29e60b51261a1055c52
+Nonce.3 = b646d938449fd38095740a80
+PersonalisationString.3 = be5cd5330969bd712bed97c68425aa9e47cca9468dcef189
+AdditionalInputA.3 = af11b59ca3903fb9f1017d55d5dfa3e115f1f4408c029d75
+AdditionalInputB.3 = 58c9ee30621c7cd77187ae3b97a0c4b662c5f942de05dbac
+Output.3 = 399190fc55f749c6c6c3aac0706036151851081a35fb057dc69905d11c641adbff0032face2b014bf78c51bfe5f31f73681b5d2c858be306febc762fe8d5630174e73804d3d56667511b232f238334e56a5e7d3a432fc9c5d8535887ce10a011f33323d32391727546bdbb8cfbd5c11d
+Entropy.4 = 928b96a549f48c38ddfd71b1e26ff7d15a8a73eb8ac2cf4f
+Nonce.4 = f8e919552e1dba184bad9efd
+PersonalisationString.4 = 9e4c74a0ad86719fe0b71fa323458755b7cf74ce55dbedf2
+AdditionalInputA.4 = cbca1bade06a9e225e29ad77fa09e198e50afb5a5440b175
+AdditionalInputB.4 = f873153bbf917594f2b3d20d0cc643ae3cb6d6b9ce29e41d
+Output.4 = 04816df161de286ab408f27193ac405724402d6293f27903412f5ffc0b466683746cd08dcc7f8be5a89d0eb020f8ea3610db3e985d6a739e1d261c060af468c4bd9a1275fb43558bdba5c64a0c20d4fe9dd77cc4b240530ca336a5d11846942cf0eea57d2434568e19683772e7729e2c
+Entropy.5 = 778e93102fdb42936b697feac3620ccbbc61a16fde121eb6
+Nonce.5 = a5fdcdf6c1920fe552d925d2
+PersonalisationString.5 = a203f263ab77286e6a80def472bc5b775202cd607d1e6d47
+AdditionalInputA.5 = 05add19da67b9f4608c770dff556c0d783a69d8ba5c8e95c
+AdditionalInputB.5 = 7add6db36627659939abf112cc25216fa2799a8851bdadda
+Output.5 = c06a1da094c5076e3de20cbd107b6800c7946514e45871157a2a5cfb2cfc24f41fb396120480093a5a27a017321932705d7c79c96ba851f0a82314d201b0d7fc170577e02f3dfed405a2e0ce623d7a1d5912a2ecc840015ece833de30f1556e8708a491dc7ff2b9b6e6dc4c2e49d87fd
+Entropy.6 = 075549db0d3eebf7df75dfa667a5e00e397067ebe76bfbff
+Nonce.6 = 91dc01521c3fbb72f1b65a13
+PersonalisationString.6 = fff91043b91ae77b30de5a822e11d4f4f41cc4442e032155
+AdditionalInputA.6 = 7f719aba39bf0cd3f4e5e9ebaeb4adb0fb8bebba47fe4009
+AdditionalInputB.6 = 2c298c32e7542326707d4a56cd4ec004dac31c2dd5205e11
+Output.6 = f537c48589de81857f6e1f0475c465b45d5cf754e1332c8baf015c31f00f4e346148ec832d495c92d322bd2d6218df1aee3393b889364943c4766ed3729bbe817e6b9b2be8619f6c20acd4eb50d7b61c92e99fc0ae8c3577a5fe42787a699e1a7b1a3b27f2ee542cd9e2d946045b4d2e
+Entropy.7 = c8586a9f2a5c9207d0b24e5c491e56dea8b1f84a39c1f374
+Nonce.7 = 8a77ff3dd4f34858c9082d36
+PersonalisationString.7 = ff1cabddb2b1d349bdea575dac3b8118107d9f54abeaf94b
+AdditionalInputA.7 = a8a8ab52cf3cf5e3cf6463c4a7f0730af07960107ead5aca
+AdditionalInputB.7 = e2cda5c41ec6b0b425e18398fa99830339e7c21650e28c8d
+Output.7 = 3ad3dbd75978b86d39f014613d43d957b8fc951ba9e4aacf5a39676d56f55801b6a413ad091f5c98713f2c7f02b1042110665226e9c9c162c5c8d3c8416aab7dab52f6429bb468d6bdd1f471cc3ae8f2da0f442bca1311cffe07a17cf94aa6dbefaa0887c13dbab302040699e2c28688
+Entropy.8 = 07a9896449003b02e3193fb6fd538724ca194bd74b562142
+Nonce.8 = 8d811a873698973262083650
+PersonalisationString.8 = a15389911cf299d5ac71b9d17f27c315c19107e96fd746fe
+AdditionalInputA.8 = fa7504ee15acb030d8fff380d1b406c6aca886b590fbb2f9
+AdditionalInputB.8 = 112d4e8df30d9819eb0ad0ae236fa0edb2ff3fe342966073
+Output.8 = 48caf17a456d82efbdf5a795dc491c718401c52a818bdd91a332de54495e5b82af8414b9cb07cbc2d89580892da4383589e82528981e4c74a85f9842356789e03cc9316527a71876951a5f5587e32f1050ce9fb2c1336ccc4100d9e7edf8411ce74592456e67716bd9998055fb4418a3
+Entropy.9 = 895e848b2df83f81b22237c9594946be109f81acdd5e782a
+Nonce.9 = 370eb1fabf1e5464dc86d3ee
+PersonalisationString.9 = d1d99dbf06b56a97e6da7efc1a07c892a7683a1323ce67ee
+AdditionalInputA.9 = aba95292449651edbdffcd0457fbd40461c9527a30e09c5b
+AdditionalInputB.9 = bd2acef0b5cc32572ba7b98dadf9c7d05f75f280e48c863b
+Output.9 = 2bce5a2e7ef91b3510b9af12d13eb304c7f3430d57ac1364aee98a7168a81a0b7303778d3f92659eaf9a518cf1f2859d057fabc2ace9f40ed6e676de79ae3d111e3e1aa8ce67a99e77b3d6299a3c0ce89851026f27b2c6b1c9e0416e03111c53e3d10446ab2826211e7ba1876c486495
+Entropy.10 = 764af072496b6db165add0985d9a431583318b0fef4dd7b6
+Nonce.10 = 2b91490376096a4156d5fa8c
+PersonalisationString.10 = 81b7e8d587e4cf2d2f486cd46761e4fcf7090510f114be5b
+AdditionalInputA.10 = 5a5b16dde8d7f39b3df2fde22170e784b3d3dfb8f9e0194e
+AdditionalInputB.10 = 29421eef64356a90b793493c76d339713edd13fbe872171a
+Output.10 = 5464166d69ecd2b4b59a6b17997bfcc77e8aaa3f841681cae499e4a9b7e45e2112d36824e61cd06835a5ef6281aae377efcaf837aeaa9cd9203d273adc89e8c3c78ab3553a341ff86b575997ba31939271a0d04c49aa9d59c4c0cf2c4755368c41074c16fb1a95bda2521ea45142a298
+Entropy.11 = 043179c8959545b4d13ffce89d0b79644d5417ddb1188da9
+Nonce.11 = 3aa67c89993c389edfde4247
+PersonalisationString.11 = eb51d748010fd54e65af7902037c43f7527a04ba40ab1868
+AdditionalInputA.11 = a8190567c3b9a5af01bbc43a1139d8a23d7e95757454ca3f
+AdditionalInputB.11 = 44f0eabc18f76834330ffc32c35cff6a46079554ea3e5ddf
+Output.11 = 60bd0c67f08470b637c913a729e6c5644768d21f83fa632a5bce1725a2c5cfffa3460ae191d6fd37e33ce15391d3276202df55d4254c0907b62a3cca113353e981f364babdef9a54064aad71ff75b33879575c4cd4af0671223738c1bfed07ea564cce32d5607a299a747049832dfa58
+Entropy.12 = dbe412856752a4fc1759b5aac831ebb146a215d87abca852
+Nonce.12 = 4b88bf08e289c5115d8bae4a
+PersonalisationString.12 = e2de76ffd60730606b6ff456e3514128c9914867568fef67
+AdditionalInputA.12 = 62fc2611e5a0aca6e8f2b30a8b131a43ce558a2d17eb795e
+AdditionalInputB.12 = dbcd64f2fb49e75b1d6770516672005f467221e8b1cdc5cb
+Output.12 = eb8bb1bf2e123a4257926bdf35b6a63175d9611faab63aa8977b2893fe7177a17a861534dfa92f724ce05bbf5b7a3bc54e4927706201c128ebae396ecd2e54d1fdd4f83dbd51c2906dd9b23223b6175c97bdcdf32d91464047ff620261b28729e09f2a97b6232e4c178e60511da5d42e
+Entropy.13 = bc7ecacad555e18187331ec9862e76b9aa4e5f3d119967c3
+Nonce.13 = 979cb1877e39b0248495aac3
+PersonalisationString.13 = eb815140223ee40bfc94638db0210c23289c7964e6f25242
+AdditionalInputA.13 = e644ba98382beebe2215e4b7dfeba6acfe2bfc39f583a412
+AdditionalInputB.13 = 799ded9bb39308482b40f3e4a0e8acb373fea073cc98c557
+Output.13 = 02398cd48a76628f99f333d3497eabf3a12c0566f1b2a82fbb6a9657b074c0073990b426e2a2d3f77e7d1db534fa2f21f9b909f542631cd00bba24fd9644310bfef5e6207c50ae74f91264b4a9b7bcab01f3af3c9aeb6c4a8ce8e10a2a84ef48a09022c6e6684308635942d0e40afd05
+Entropy.14 = 3fb640de81434ff8279f71dbb75b13f6aa9fe6c4bd42ca8d
+Nonce.14 = ffa558724a7e029da8ca5313
+PersonalisationString.14 = 0a4f559dddf77d5e9721b5aab4d30383f485cf99781482a8
+AdditionalInputA.14 = c375af43c11115e995f47212f81cf3cdca5801d184d82235
+AdditionalInputB.14 = d2eea45f69c6d82dc3a7bb3be69d595c86c5ea5b4aee6001
+Output.14 = 907452bdf42eb168195313eefd090a2fe1be8b668b8ec7153a4ed4c07e6979244282e976decef02ffd4fd92b0d7b90bfc453cfd81a823dc162dde29dfa926f20e395d7432e0aea61c72e05c1673180bee3b47fa171cfba98864fc2bf83878e37c7dc019d465788aa1500ab3db8997d3c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = f34daf1a83be8c66db78a1771484682b2a2c1a85e8432ca0
+Nonce.0 = 264f964fafffd3e9b525c43d
+Output.0 = d93a091f24b41ab722834c6e03f33acf5f5d6c9f9b2a9f4c16da15fd25c82f0ebde303ed57dc58b84b0c0686322f474d5843da8f6f70c20905babc28e57e99b71dccda26f7b037e40874d995a284a98dca1ccec7a42487f429b22b14fa25ad32e370137e1091be2823af1a9d354d848b
+Entropy.1 = abd1f62b43c2b148d0119136785c1a049a88bfc8d2a97ecc
+Nonce.1 = 8b63f7a40384fddd5d34f602
+Output.1 = 358b7a12b1f24bed4bf127d7506b7280b7575c3c15abb52a54ee45caea8331033fec9e4533a28f0b02aacd19977a0486197f7679065e1ee7746d150bcbd52495a7d9eca7fec9bb3222555b81bbc4be9efb852e6c12297390a1eb2afe967c202599d41b447bbe62e762f567b62ba6572a
+Entropy.2 = 3e6363995147f6e32565a406b066c60f1d2b0d4530b7b49d
+Nonce.2 = a01827f1f2ddf5eb2ed15718
+Output.2 = fc53f4beda45aba7bb67a576116f3d6cbe9e276b5c4d2c469a817affb34f913414cc1e03cd64f16c2075e6a17e4a4a44e9ce0d9902ae81303e243301a91ecd3ca1b74a4b655688e300b746d28909f5974cbdab82fb89cbce2383d730a8d81c32b15cedaf89447705faaa9b8708bf4786
+Entropy.3 = 5e1744a97efb29557d273002e81056fd8d754f4a7c3660f9
+Nonce.3 = c0dc51d382eb857f3fc0811b
+Output.3 = 0a0e20eace858a98bf9f4baeb1138ee8130d4b6101da0dbc12e984a1cfdcaed21ff0c9bdac3691cfbae4b6e2de6d2c1d256ca37682515b63e4c62ce2dcd99e431c0b5c867010c6c505941cd08be8cb7aec27e35cc8d84da00f8cb0d2d24662ed2717aac9566be8b26548a619b454317d
+Entropy.4 = dbbc8cbf7e897db6ff62a6c64e023f0927ef5dff4bc3b8fd
+Nonce.4 = 0e7b9ba5b8a36b01b1c560d9
+Output.4 = fea381e30f28f97d3d16e9796fd43f72b1a87acb6d02eeb960bd39bbe79e3bc98933ea2b149661ba9493ab1a2aa22bd8bf75011d83740573f5af1fc92e5eef36e93ed07291acf7258d94e35943f599c3aaeddd3588743671aa50b902030516e6b9038702ab54062db6378d79558fcaa3
+Entropy.5 = c9fbdf0830e7ad307fa89df168f23c3a95a8a1e3b5bad17e
+Nonce.5 = 76cc2507ffa3428a0088a9d8
+Output.5 = e0daf2da44c336a28f1612967549202425eb9d30dc34add82953fdea7b05c0461fff620edcffb57173cc13d266e76092eae7a2aab5a4bd6ec94c6c12c0e2af6ecaa4c074fad05531328d6314378d73e1bedf2fe41dd1d98a0df0d01c1201ad5a5ace9be833782f9d67c43a3783e3b98a
+Entropy.6 = d47012dbfb4c45cfc21bfbed79b5917a298ee998585b0675
+Nonce.6 = 083068b359b0568db28dd99a
+Output.6 = ebacd13148c69c7e42cadbfce6110dabecc4c4087dc025c92b33f1a5ff829915984b9d378421c5aa87add7dafc326e930aad3f094967ec9a031d3db47817ef4498c68de615ee0023989690de975e9cb703479667914637e8337093d4a0fd0e70bb0f7a983d2e57a3060298cf563fb661
+Entropy.7 = 3054b8a17e7949165920f40fce3458d329ba2f9a49aca375
+Nonce.7 = f4029752726c79d51deaf5e7
+Output.7 = 99aa6414d7e91bc8e6ec4dbeaf741eb9177ab4018af383e0d96e738dcc79ca83c4559d51194fd226af1f63a498d3ce1cc41074eaca6d2f2cdce4126ac674d3ffc1e7451dc1dd51145b04cf888e3643a0aa90bcb2b75d4e2ba36994b1cf2850cdfa89c045bc1c7e883a80b749e152ac77
+Entropy.8 = c3b37b4b1ce7c944bd5637010f959d1fdadedc644dc34c32
+Nonce.8 = 9a538928aab74e7cbe4bd6e9
+Output.8 = bab320c1755cd8f47314d0d2aad63c02641bc6b72f45f4d02091a4ce8e7cf0752a830065937a78604d9fdf2a0b9704d183cc49dfb46bd8c3e6c965de2876ff096d4d4c80c791e7fa65f6c4125fb38fb3f2ef92cab84967286b50288e0663de1e1c100e536ef9df21d2ff3e47246d527d
+Entropy.9 = 413af08b97b5495aa62337b8109b6e1fdeeab59177d42b67
+Nonce.9 = c6ee4d3e71c0028f07742fc3
+Output.9 = 4c8f6be540ea40de222cfde738091c3b3fe729b6655bd9a429c8e5563e68d1ddfa74222b73af3308ed0200594183812deebcb4f2d378b09ba83f9ec048db66dde72b2919e74c1440df1be32d52ff9bdf3220d5251e30144e62e0e159d4110f46314611acb9f1ac9e4eeb2c2aa9e3752e
+Entropy.10 = e99ac5c23a0dd8a908fb1b6f17a419b6420db16fcde8eb79
+Nonce.10 = 60d304ecc143c1f6f96446c5
+Output.10 = f1795784ee4b5f4adff32c7fe096c06a6aef21b34bbe37b13f9e65ace09ac02bb5f1c66468b24dc3a982800c892a1fd4290da6106c0600f38ff86b56c03c618555025bf878a5e4eec1a917fcad02d2792ebb6be145f7be473dae3c474f65534903120d67192613fc6478aa19a5c1f97e
+Entropy.11 = ccfa4192729261c658f0aba93fc082d26c749246329fd7da
+Nonce.11 = 95caa0b8fe92a179963cb10c
+Output.11 = d75fdde8c95fa7190a8ea4c99fa20a9d821427e793cb36dc473409d88658d411fce08f7d51f2f20c9bd007867d7f9d83d990f649e14f127800b6d4a486d652f1f289d30cb4dd792a468b2426d232330349e80225445dd03d5af8f3bc7d15e8a15f640461b2d27d021770af134226a657
+Entropy.12 = b4aead96654b757651ae06d08d5bb6589182549f67a1c215
+Nonce.12 = 38e1494f9bdf69d8dcfb8776
+Output.12 = 1106e5764c291c0e96497e34617e78f638db0bfb5e7f178afb0b8e8b9c9fbfd75b1e7a078b6fcc5f1116af05e957645dbed437753bb88e0669360edbec79980263c506494774e52ec1cc8d67baffff5bc9d7f5ea8188f920ad96139e0c972e88b96010728be9d19d00d797fdc433bff7
+Entropy.13 = 2f74593b03781fd063eef41aaf7bef35d202706ad25a1da0
+Nonce.13 = afc3222e368a6c23fc23236e
+Output.13 = 2e7f69773be1e8ddecf37e6534042feac5cd50a3550750819604a1cf3972147ac28098450df577e6b776be072a58f75ce2dd88888f39b94d0d4b39691f4db783b7e1084af8b95239bbb4fdde63648e27c8b4c3bc322782233e2306f174cb37da630eabe55ca092ac534c91026f28cad5
+Entropy.14 = b37ca70fd13538ef74c5a3c7ef00a78705919446954ec43f
+Nonce.14 = 3ecbdff8cf33b50788dba82f
+Output.14 = 1bcbccc535fbdc8617575d46ea5a9cef2622995dee19aa4b998325dd8d0935957170f6b18219354cd2759ba53c9c1f380586070db0c89979a581ce1e00ce38855e123dc3a2dc9ce74bc3b6e27c9603fb87c09a1d90bb540d267d456f5457daf0920a13119a2b805f9b97b154f80f4bbf
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 0e6e1cccb8e464dd9a13ba91635d65825f7822f6b2e442ca
+Nonce.0 = ee334b65e55abd2db6a49cf0
+AdditionalInputA.0 = 8513c7d32b08dcf7e405d69d36843a3a2e78e0634134bf27
+AdditionalInputB.0 = 7f924c1464e9b4ac1ae742d798ba819f2baffeb7ba961a9c
+Output.0 = dc99d95f008a2374a6c3cea046f814078c420163db30ba1a976b6b1cb15dee69652032189848e623f81c5ab55019820aa61a6dd971d5804bd412db5a90ef3c9dca46d3000d18e99f06e7649eefb8f0b94b764a089daf4e7c0549c52b6a54d3873273dd3ca9336cbf7b42109332030058
+Entropy.1 = 453f0245024d4e57bb264452a8e6614c367565883c198567
+Nonce.1 = 8f5879dec21ac15c6945613c
+AdditionalInputA.1 = 89c0a5d097052a8f89016ec8762e2f3613c0fd967ce24aaf
+AdditionalInputB.1 = 3c333b324af72cd05c8274dc44e3fabfbb1d8892a40d75fc
+Output.1 = 3701769ae1664a69ccd58cb1106e7a9a71c2ec9ee889a997078c313c3b73fedfdc3f4a7cf14cef8a0b09a51ca1a27e3e205a1d55e584d63db83cabce33bdacdec715a98e03afb2376100c5b7a26ad35f3de04915e9f307b081eef2e9cc638aeaf3702de6ee94355dcb3da2f910b9618d
+Entropy.2 = 8d0da6d15d7478ea1acf1c73c47fe1b5e825ff297e8174aa
+Nonce.2 = 558a3c84bc80bfeca60c57f4
+AdditionalInputA.2 = a267da03894381f931a87cebfa13eba71a242fbdb94998f6
+AdditionalInputB.2 = b8853669a2e9071f1258e69700d3abef8d2078e86536b6be
+Output.2 = 1ba4829e43fc7cedafb34da95cf78f705be85e0a96f323b9daa27c14c56844636023fd4967a9e5ed794ca06873879e7d008bbb0499c166e985d252ce938ae6d942b6f052db77fda59f232f74d72bb8054269ec1a04f614638d0f7797c2a79ba5cb3ef37d1b5f9cd8e7a45c870b634779
+Entropy.3 = 125e75acc1edb675f6ee035a2c7b4b02d60ce6cc26957010
+Nonce.3 = bd4d4620804a3779ecb20333
+AdditionalInputA.3 = c0bdef842b3127324d6d78b5d4d84661aecadf326a71d8bc
+AdditionalInputB.3 = 26801f937a23856721a18e10c506267b8ed0801cd6e0bdaf
+Output.3 = 58ab6980c180d32c1eddc0289cad603628e578b771eb6d58fe432f4f9d6808c4ac38fdc0cb0dd44f7c1aa7f5909d62e1d0c84f69f29cacf711521ac7a58ef1db129c54a292aca92a8337c0a5f87539d3a1fbfae207568fd7fa89aae52936972a8bdeeac4b5966f5e8d23aa99eea4a748
+Entropy.4 = 5a40002e4e008d84afaaa4dbd899eab9ccdbb411232fc8bd
+Nonce.4 = 112b4263fefdb2c8fe0fb17d
+AdditionalInputA.4 = db54fa2732fcb97cc5567418ce0c5746c61aab8c95bf252f
+AdditionalInputB.4 = 853baaa33146a9ef2dc24116fb51bd4e47366a916d579255
+Output.4 = de1e72076639ca9a60a679083e97bad71fc528a114fd0ea019b32834d1a00851cafe7779fe56b49cb6d055a2277c17957e75f0d826780b24a3b2fe00bb9e8dd7eed0ddc037e62e9259d04577321d3b11860b9aa0a1e20c82076a0eb034de10a6190e87c6cb402226cad5d7068883f0a6
+Entropy.5 = 8902e5e69ba65ca55ce35e89b1967ce313d46fa5897b0718
+Nonce.5 = 246d4710654269768b35b2bd
+AdditionalInputA.5 = df40878148cbb395bb2955b2d4be6ae5896d5a85228bda4a
+AdditionalInputB.5 = 19487b55132cf08898bc32c4cfec04de50635f781d6d354c
+Output.5 = 39b901dcc914558c45b7a85f6dea0e1a0ed398bed8e182bc703e3473b1967fb7d58c30cdcf47c9cdfce83c79e9457875c549def68f3bb91d6dae891bb558ddbc51ef499e1bf510fc1ee5a09f454d8dd68ba6dd88a003319debfa3bae19e255c6ee8625d0172f8fb396d7b9600f44c9c7
+Entropy.6 = 0823d9b62ca3961c4b8ecdc13877076d1bc9a97d953418e9
+Nonce.6 = cab41696618b7e6c601e35c5
+AdditionalInputA.6 = 7a06ad46cbfefae2a68b1cfb4ebd0be0cc2f132fcfc66507
+AdditionalInputB.6 = 487c4927a71b6d1d389fc396306d48d6cea06d440ff68715
+Output.6 = 6e420136ed8427c8cb45fc75d3bf95896bc89b52c12ca6e1fae7853d98306880b62b0ce42d5d07d3c0e4df8692f5fb23e00abdc29c76dbfef999b3835db2de577d50bcc49cc6b13632bea0bf1b9eeeeee91706c7a427d14625730da21fd0b71e74efcb207d5cba53cf98c57a4c7ec5af
+Entropy.7 = ca3317a230007266f80c76c3e123b8a6e72626d1281507c3
+Nonce.7 = 30f75131e9652b4eff521c63
+AdditionalInputA.7 = e75fb0011a8e5aa7da95ff3aff5c6d425daeb2493810d895
+AdditionalInputB.7 = ae4c746bdc9aff3694feeee3195e7b3bb85f200062e2cacb
+Output.7 = a6bbbc9faade4da0213c78f2c2c89939a18eaa4b450ef696fb1d58ac884c87ffd719c2d50a5108c04aaecca17aa521eb44c65d34789a93d8f099e84f4767f61fc0f0065bcedb78881ac130b1d259f51eef8cadadf962b29fdfaf0aa16cfcd46c6df7c3bdf9deaa70db7e049f42a3ac5f
+Entropy.8 = 9259c798b6e62343c61e9407a2c2a9c1f2457675f4d280c3
+Nonce.8 = e429d3824c018d1fee543f7c
+AdditionalInputA.8 = 901c5fd8d6b39c2f51fd61028dde69781f7cd5327ed53010
+AdditionalInputB.8 = 77ba8f47bc6407a5c696e729056bc1232644a40b4cefcaac
+Output.8 = f7e6caf28bd9afe00771590a476270131e57d602883d4dde9d30cb4dc1d07a8a41626174999c4f13d1e44cbff77eef6dd0d2842f404d87544423f01673c93cdf4847357c6a70b45442036a8147501a8ad11bada963352a95cd9eaac8a883347c4e20f4fe0821353164c0a4660f719155
+Entropy.9 = eac11f37733207819cfe399de3c7758221105acf2e56c127
+Nonce.9 = 0fc0c2200a446d20d76c2303
+AdditionalInputA.9 = 7388250f4342ddf093dcedc6969258ca46daafd367311d63
+AdditionalInputB.9 = 28692218a9cff95030439c02774cba5f128d731e554ef7a5
+Output.9 = df0c95c0afd6018ae5700ce083a4618154d27596dfd7d3a81fe652f89987ae6d45cbb13d1b29d4f26891e735e0cce06d7ac4d3d8387d1193759cb4a72ca388007a2f8d631e15dec6808e4a270d51a2f8474781a34a8f0677f49c6a8488923e495272d97fd6104e3806fcb4eeaa6d2034
+Entropy.10 = daa498ffa9f01126e8730143f45ab8f0a3d9b1752a2eb11f
+Nonce.10 = 1a82eb2b88fd118c3c29039f
+AdditionalInputA.10 = 53b461fadf4462428dd1de81f373faa88b54bf8fd33a0ccd
+AdditionalInputB.10 = 835dbe0984eaaeef6feab85abc5229eefebdb40b1f2fefbe
+Output.10 = 44b08d6b4048ed246004851303f24cb6f3c3f9cec28598a8d75467090e304489380f35c494356bbdec92f645c695272d9c14b4d8ec2244d4da0e4b899e244ad258f9c94c47b09d522a8ec637dd6c25c4a7d710b163266b1c6722bb811136148788b9f3c9058cee41f69cb9348161638f
+Entropy.11 = 4d48741a39422fe84c6c89cb2dc3c9c0ac17841993b6683c
+Nonce.11 = 001e5f39ed54a12216b035cc
+AdditionalInputA.11 = 2fe05cec456217b82b6feb7184d94b6afdb6e9c1170ba0f3
+AdditionalInputB.11 = f9c6a0076aa46298ea09dfa3608a7efc62aedf91abd98ec6
+Output.11 = 49dfd444cd197625de0b928fa57bc23670e8f1d084f19da9f8602e56d3090495a7cc45c215388816c7ba25aef2fa661dbe27e59632e9dee092b86e0aca0e335cdc9f86308e32aaaf19b9646d7947dea97ec856c873c85ac2f16473dd2a2ee9f4faeebbcb009e5f20403c29a422f998c3
+Entropy.12 = 2739a0a0020f4cfd86cd6d0f4f2a46c5ea88ce2e7ea4fd5b
+Nonce.12 = 6ac143a15a0a945f3004a325
+AdditionalInputA.12 = 048590374d554aa89b26d1772735bdc1a1a7bd82ab9742e9
+AdditionalInputB.12 = 2062c228e3084eb84ca1aba4da82b1ac9556439913bfc7ea
+Output.12 = ac9482058f041f51e8b1ab2dcd6ebd835d64c04fb6047b925b95dd3ae93bda64f0139b949837a138b4fca403a8ca8d91dd5fe05953436017a1aa741de13df644f6104cdcc1e9b10f50e80a2a75bf434097534af0ba5e5ada6cc3e2529e91c2a9398bdec97360baf1a2791c14875e6a61
+Entropy.13 = 0b87675ae4b4691225484df9b2e18339f77a20f7e80e85b5
+Nonce.13 = 701d430e1df0f941892b0a05
+AdditionalInputA.13 = ba93d17624a2b25e6112c58994cc7ec00d2e53588ff18b89
+AdditionalInputB.13 = 328782892e879d5e314b989f55cba533a4d13e883d7a19d1
+Output.13 = 977b945459a0309a767882379ef9a7629209f3f724ba0f12c9d58f62890396c4c6f5fb8bdad336837afb932493cc45f23143bdd89b3a1c801de2b3241c08f4c219e77398abf32361408b3ce21236e4059001b89536ce19405d01b73ae163f7f06f2dcc3abcc6d712dee466dc9bfb60d1
+Entropy.14 = c90d2beedee0534de8df54dfef40729c5d1dc00340f97514
+Nonce.14 = 43323218555c85907739ef84
+AdditionalInputA.14 = 9fcab4a8d0d1036a6210d56a894f861fbfacd4b20c081f38
+AdditionalInputB.14 = e279bf650f812b8931662e59a0da7ab799c193da1f6eef1d
+Output.14 = b3ec81a3cc8dfa4e1ea17d33566a4444bae9969244e7a8970eab02afc8797b5fc85b6614ab009625b81fbe078bfa4db78ced2d8b3f1e3342b477a3fb42cec7d44546585621bb8310075808aaddef32ede3e668e626711fdfaf2569721bf645edeaf74a9826aadf0a9cea9893aab4fe3c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = e3303a4ae7679c7b2e1b11a6cc53ec57da6320feab0a8574
+Nonce.0 = 23694cd207d292a0e2117d1a
+PersonalisationString.0 = cc6815b0a2a72096228bcad19b160a094f38079c33843408
+Output.0 = a55de90e2072d5e33235270532805a32f7907a9f1e7909821e38457d4df4390320485df395d0b4ac7419ea76e83298751029185b29141e46436ff62e99100b48ccb7435ae39a2efacd728e30bc53ea13dbad1c2a7bf64888a5a5c27f5ba1967565a1eedb3f6f4c22b0d0bc26b6b39576
+Entropy.1 = 4f5a764f19f875a1318198bb8b349a30c08553b899eaaec0
+Nonce.1 = 45a0f4f8aede6e5a1f41c81f
+PersonalisationString.1 = 56ca0141d40f38214bf5df497051111586a8f17a55adfeaf
+Output.1 = f62df5d4b080486fb75d4650294daeeaa43b48e08eef1cbd84c8eb8e1e91fd14a3f7015fae775b029cffeaa61d6fbfc23540886948549e47290f2ec83808adb5aab8d1a6188d478478e782988c4ff005ff4b14998aa86f2740408799550687c8f1752c98b556c65349deea6f1d803e9d
+Entropy.2 = 4c909fddc98bb2dfae170a0aa0782fa172972b6ea85b7bb7
+Nonce.2 = e22e1471e95de620ef6cd726
+PersonalisationString.2 = 91862754f5827026f2b06dde98f78b98a1482ae85e3f6f74
+Output.2 = 169d1dc8766ab63d65b59e999daaa8487e961a1d28974c7cb361c93f828d20dc11a64d7d144a310a7244add3ba2a4a12dc92811efc35c8586e7dba7a5d01ccea640e9851092f1a5fef963eb5729fa93cb27970df0ca196034a9aa3888181b229f5ea265c850f082839cceb924ad2c099
+Entropy.3 = c9715b284991515bc3012c55f5b4733d80ed0ab0377e1e23
+Nonce.3 = c662f939921a00ccfbd60e43
+PersonalisationString.3 = ae3969bd37f76b5e4b1826d108f71288315c91176727c6a1
+Output.3 = 951aed814cb927e4d7927d8e927f63a6c8ce9e11192a7bd28c8d54cd0b1cbbf57d3211ca349724f2600a11be482c87cd870953249926ab0f124b6ffa0addef4f1146d47b56968ec4b04661261abf97b412ccfd4329508e906c512b1485396a976bc103b769dcfee6d4640ecbcfdfeb31
+Entropy.4 = d25a87f9e2be0d53143ff7df4862804d17dab2dd8cb1f124
+Nonce.4 = c46dab3fa9ba41e5be509ad4
+PersonalisationString.4 = 3177026124d54b96aca5f126c49cebe2410f7a5a3bf9be36
+Output.4 = 231b1d2b3179d2173d2691300367393c40cc251027d1c08cd808fa6c735b27af004b19d9e520589a5b3dca9b482721916ce24b5252af6d4e4381d9bb74c189618753adb7fcf62881addb36addbf9b5cfa8d1fe6dca27e8526bbe35aaefac2b9f1a01bc8800b2631b63823d02af1ab85d
+Entropy.5 = 281600a07e9c2c4e12c50b245ce68f60eb8724a0fdf8ef0c
+Nonce.5 = 2009644fda9876d69dcf8515
+PersonalisationString.5 = 2a2ea4b3974f2199e91d640cd02211c2abfdb0a475aca283
+Output.5 = fc950fc6f1e2daf6710f334d6cf6685506a80170f78648aef58a86961466cfc19bb686e26d8b4441459d3ffa6afed7d4cbf657cdb2da1a76df1fde3b1246dcc49f83897f16f8a58eefde54556953ce1ff032f048d7fab9c2764c56a5636c97f714c1dcacbf6b922268e173a7a2585906
+Entropy.6 = 7ae676a4b451734da237d335b62fc5be34ba4ab7a30602a7
+Nonce.6 = 1eb6319e8e94d08853f918fc
+PersonalisationString.6 = 6d1236fad9a2d0de231a41e6bbe378a8dfac61edbd419457
+Output.6 = b784dbdae689a78c95ffafa2e711f7402013012249f1807a931131a09ccbe070971e36c9221de28fb86784f9552b619ab99272b73227ef3707dbf3c54c91b3ef7669a8e3417ea498c066b4ff1643e2bdb3155a33afa2bc849c179fbf94da4df319a4cb07461c1725d38b6f1860aabc89
+Entropy.7 = b1f256a885b84dc228ae9aec33937e6f368b318422dff436
+Nonce.7 = 9eba9038aa20761962600868
+PersonalisationString.7 = 0dde17a7bf2ee703801319babd44882394b5ff239928ff37
+Output.7 = 353d850d24acc856d403ff3b2b7d28537ccca984df0bc6cf76ac4f429998f5d9083ad9eb3f571eb420580b97b152a2027b97e520090eaec8726b587dd14bcfa29a216c3432ac8911c8e9dba88b2a625244e6af66790c483bcc86999a06034a671f65d229a630fc88733e66247449b0cb
+Entropy.8 = 5f341c5dff9f4e360c0863fcf17f152ccbb88139cae66bc6
+Nonce.8 = 8b00a1baa5b8cc65ad9c9971
+PersonalisationString.8 = fdfadee79f09cd11763e0d37774dc8a741cf50efdf63e481
+Output.8 = e109796934a01dc76886e6ea067760028899a201194673a42b4396e27c8550bff9959d3b68e5c43f70a23dada1b55589d9eb487f8034891b28c915f57f9717fdedbe2711a73aad2336ec9d213f3d5451119f70e0ef4f943dd156dd4f1059f917570343f2df84e9d5880c8d4088658e0d
+Entropy.9 = 3175c146dcc471af61dc0332ba34bb423c5fbfcb7d5493af
+Nonce.9 = a4e244f41aa276be01336b54
+PersonalisationString.9 = b75abe441053dc92d9f2af0762cd07ac7b3f64209d45977f
+Output.9 = b8d12b6fcf72b2822afc28a6e6ddc5282f882a2c91fd3d1459dd5644c35de19a864898bd5cf425f809123f1fe74f622100463e9a73304afdf91b38b0d84c4bbf743c68ce58bb5ef4484b3942ca27953441138366a851d6ac2c97b58020cdaad931d2b66b64eb054140b2beb8b60aa502
+Entropy.10 = 7b6e8cb381d57c2cbb817fb717c430e0c0ec4c4223bd4978
+Nonce.10 = 82a7d811338ce2f1e55765cd
+PersonalisationString.10 = 6d818e590a7892ad20320a8da5986fad0d6dfd2639c18d27
+Output.10 = 5b4de2b9a7cc34469b68f110c49a5c86134a25413e192fa0d3d6149c4ab2e257a081477e3a9d0c504db745183fbe21c9d204f3ff2f5d30f666a575d3c14563a449f70722a9002f8e14d15ef750fd8560d48990e9f650b15795535ea430a33d7c2c3f8ccbf4ae2e6496cf45d61c841440
+Entropy.11 = e56b1663085d4409a5c6b7ba1b9be6008a785b2ee8d35d0d
+Nonce.11 = 70fbe48f4878432a6885c39a
+PersonalisationString.11 = 8e8a4f95f6d590ab664fc95b962ff9de01d0e962355869a1
+Output.11 = 7d96b91fc1b62ae0705261822116461a359417ac266e8fed4786748a0e7b6d662786a86c59c538f38c7a72349a5592d29cc726e843f9cf5df0c75a09f99fe314ded0431abb2a6e0c41c50b7fdc4a3c8e464c936c1fca40f76cbf52755082c19c58eb8d0055350c9bd7cc12e425c40a4c
+Entropy.12 = 02ba1c8b09584647170c5eb8f1d873c1051432b5a5b3fb70
+Nonce.12 = b80b42d3ea625b78e58dc502
+PersonalisationString.12 = 919476db346ffdbe0fabbca46cbeef65866816c7add8b57d
+Output.12 = 941d6f2a3187ee3a031a9033e6182655b49df4cebb26697611a551f785758ccf0206e89ed2fec100de0955e7f2995672f047e54c89f23054c96a8ee7eacd6085dae74a2928f4a180cbe08fdf10309da2ce3243ded1c3e02ce06d9c07cef5683305f1945df63e378e1bfd4d665b2d3d9c
+Entropy.13 = b1769e3445ac80870d8bc0fa973bcc1bdad10d6ddc79599e
+Nonce.13 = c4bf61831c5c2ebace04846a
+PersonalisationString.13 = ccf622319d28d73a9bd96f5e475bd113e3e2fe08a0c91125
+Output.13 = 2e87b375d519248457e0a13fb76765d7690835db7b54e794976df1d448a0050e77cbf6119f393d2f30e9f6b308196874d9123de6b6a5884668518b8014d28aa08095de75bba6d905c0ebc909735871afbb1ff616cd8de9e2741210cbf9e49928332f0c508006b01cc8a0efe453714591
+Entropy.14 = 20f5f4e9177f3aea0ed784f29e6ad3d98b7ec22bd6813386
+Nonce.14 = 98ec3ae036755323042c08da
+PersonalisationString.14 = e6f24d96c8d11cc68e72f56ee7e345c5a0083509821fdf17
+Output.14 = f5a9d375a58d1b337d245d29b7a9e352cbb0fc950276e042d075a71f4bc43b65b063bff299c670adfc46db39c4303adbbfebcea1df964c27d33cbfe4d46567475abff4f357252ff7d05ed4ac34e6ed14c33c192909426654d604736f3bb0ba01aa5e0454d60dfe8aa5b2df3a52df22d4
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 2891ee8f8e9a1424c183cb264c9d54cd9464dbed4cafd92f
+Nonce.0 = a82b8b7261f27954c0b2b905
+PersonalisationString.0 = a79122352074d9ddd47fb38f2999c554417f916ac91b6cc9
+AdditionalInputA.0 = 73975cec7ffb76f0286ea79c31dce922ca3734bc97d874e9
+AdditionalInputB.0 = b06421eccb0a8b1f229d2dcf37e7307e7e3c8fe25a60923d
+Output.0 = b3dfd82549ab620b7dbb18839b8905e3c1fb601086e56468e4742107d0e7b214a32ffbeff55ae242828bfa7c7a17a58d975c5d91f2d6acc8e9c0c1bb57a5bd0fddc868ccbf32dc511f110a6eb3ec7ea15cb6e1ce7c083d46eabed92df15974533990bad0a3ea0068b201c736cf17356e
+Entropy.1 = 9399ce75ad8bcada260628d1d8d19b71b6d6af06e37e9eb5
+Nonce.1 = d9e246bff1469a14d7614802
+PersonalisationString.1 = 84938b4eb3417b6e63bc23749cff016dbbb78131d9a5ffe7
+AdditionalInputA.1 = 210d043b33776089b3193dced4f9834d1756156a7c99a487
+AdditionalInputB.1 = 3859a8f5b27553f5db49218a1826040151cdc3cde86a6a20
+Output.1 = 2f46ffbf97ec5bb0e2f1ece66f034071d6e38944823a68772f1e02b9d1b2ee1fe20c2c342e605bbddd3466c90418c22525a9539c970b6ce9b0a76a89919d2775e47cb33cff0c1c2ce7b2c33313a773da42a18f9bbdfb86822b928fb531a42af0bc7203591ed3d9dcaa52a4771ba8aeb9
+Entropy.2 = 50a6d462ee7f36daa3ee1b6f910df9a07b43640ce1d93e64
+Nonce.2 = 05afb8ed2774893ddbe9163c
+PersonalisationString.2 = 6c08959591929f7f9af2bf2b10ce18305187400f25de9cdd
+AdditionalInputA.2 = 358b3d23ff04e2c491f904faf2de30a380da7f839e610556
+AdditionalInputB.2 = 7d91a483d805df00ba36b8c9a0baf88fa95a99d17665e1eb
+Output.2 = c8a9306234df08b0d54150e0d8136a8df30cbb0b754d4e11419b2c5ce545dc442f92046c5a68899e6a0569eb2565eef33be88eb9640eebdf17b48224a74519cb5929e68c5d853da4076c769a92339f23f1bd9343943474e0efe942f3d73f708033b29625f74b1919c7cc41e70dc6d6c0
+Entropy.3 = 698b942cd87ff5192b4dce92a595ee5aa2058f0704ba9d1b
+Nonce.3 = beac1f46b3c96d3654a441cb
+PersonalisationString.3 = 233f706c7386b90fcf0b4a675bbbc31b8ee944505c209064
+AdditionalInputA.3 = 9a8de8fd95b9c033fdfa872694c8ad6a8244b429c8988a25
+AdditionalInputB.3 = b44e0590396ab432ade092c965b45e499a39f4c5446251df
+Output.3 = 662cbaebf6f9f7f97b4fc9e5886c19475b88c8db65c2b23950814995178f13ab1609ada4969bee61b1be6b51d8f2a0ac1ecd240a75654f36c8dc4d71077498216080f195309df7a7f09780f27cea43ca02dcab33dd7f9127141c5fcb59d9777fcf78e1740b04c8cfd46b2407ce1ad6b5
+Entropy.4 = 02757cf3f6b0030a78c6ec4bbce3a1c5ee959fa2aaaec19f
+Nonce.4 = dd2898b3670f310d71997b97
+PersonalisationString.4 = 8bd4bf55492271edc261146e47dade3399dfd3b78167a644
+AdditionalInputA.4 = 45a7e6ee6bd799a59e8c21189e75f32c808b8893a0842475
+AdditionalInputB.4 = d5e39b3d9410fd9872cc44bb4ed94bac0225e68b8a68466c
+Output.4 = 4b111c654914d621dadff8565dbf51fe83cec43cbd4836cc760e3c9541a0de5b19e59198724256fe2463648f136d288ef19c786c0358b7788fa7f20a2c33e568846e07e769c19dc3d2c51eeb970e7284530006a6d7b0eebb66e81792be92e7fc22c685ee29aeaaf127276b072591a5a2
+Entropy.5 = 30b17497a71cceb8fc39e5858c2c6640790ebc77873993df
+Nonce.5 = d752fdf1195c843a1c401963
+PersonalisationString.5 = 38b848e8ade794908e65fa23989c7ed0fc02d9756518db46
+AdditionalInputA.5 = 4d527b3b52061ce6276147e2c1ff7a7bccd8a55a67ace5fd
+AdditionalInputB.5 = d6e9b8acd134b93c8dc252831a4c729af2ea8fd1929d5e50
+Output.5 = 527bae9a529ba63b5d3ad7389829a2aa8ebb2bf1302e144c1f77e353bc6b6d5563db499a7bffa6b4ce71b8c1195d0f1db230982a4b27d7b2efcd93787ffba83fcf9f0d1f6a7001ef5541d705c4a7d2b1ee41d811bca511633ae813482581a8b54464cf6cdc23d69e5a4458efa750acac
+Entropy.6 = e39fd3856fe6926891693fc833c15731af4c850379ef1dbb
+Nonce.6 = 6bd4a0472899bcc60c2cb614
+PersonalisationString.6 = 1438d90343b4352949170a0b9e89dbb96a125456b790d18a
+AdditionalInputA.6 = a3f1ac9cf8058ab0bf2d940ca894fa2559a036fdea8daa92
+AdditionalInputB.6 = caf58b3c5b113cf247b70d2317cc787426d6d8fb1371515a
+Output.6 = 1f0c23fd30be385776225fd53c07620d7017ba85e7153f63cb51dbf0ede1b1341c920af9b29b3d6e18f303b714daa6ea3e08e5e46705952975552275431b4f75e6c66db45c563e59e168e5037d80f921e62ce8cac2ae47ff54e760161bcd056e0244602fd0c9dca49021ce70f9c956e9
+Entropy.7 = 4fb152ce37c6fc80a78c3781644a27530178b6e7c75c4827
+Nonce.7 = bdfe338ecfdf2cdcc9fc0da8
+PersonalisationString.7 = 1bba11ffb258cc0649932de2f3642a60e11693d936173714
+AdditionalInputA.7 = 5b3d577df24790d495ee82361008d93e3ab09156f4cf44ea
+AdditionalInputB.7 = 728f6aedc5267af2a238b48a613c7a3fd697ae0e94857f36
+Output.7 = 60b51017b1b016c7363f1bdb3bc4151ed94b6e5766eb30faed3701abd065a5ca1f72fadf2906d2201e006a216b5e6d0c4afcad6f3e7e1e4d6ac0825d1343becf798853ea4256a5d381e0b591b1930bae985d357c8f9d2ec87fde24c37a1bc75d369ee72792dce9c297572a797d8bf811
+Entropy.8 = 59fbee059caaff5875717ee7d52e46bd7d80505d6bec5b01
+Nonce.8 = 277f895c18453b73df2f2639
+PersonalisationString.8 = 32ba9bf2907e26e8958f62fa53d3254e31956b5110f1cea7
+AdditionalInputA.8 = 899af98474de852c8f46705afc08cd3bafe598a40574f918
+AdditionalInputB.8 = cf4344671516acd9c62506cea7058cc2d8e201759804f11e
+Output.8 = 94ed6d2af7dea638934b81b7c5c6f6b4658d4a5314f1d70fb37c05f0465913af202528edd0cf7fe63784f88919390035e24b1943ac2ebcfecead9ebc30d731d545bb52337dc063bf8639498402c4bd21c16219f64e2e9bddbbf3aeb7d4f93ea3ce549622529386d195c57084379b9ad2
+Entropy.9 = df82c9741a768ac1d4be1831c7e3f175460dbefee0c922df
+Nonce.9 = 53511f0c8c0c6a999f9e9bc8
+PersonalisationString.9 = 9b63917fd7815a0d67aa68d833a01060993bfed6fed2d8fd
+AdditionalInputA.9 = c4ec7ad2d5c2109a7b25a329cb0663cb1824767eb8eb9777
+AdditionalInputB.9 = a3c15ee9cc6f89adc9e1ba969de4acf79fedaaef1ebe463d
+Output.9 = 6751e7f05c541f00a09e7a926953c0c4ee23b73267a5f734e5ac3e54ba2d42b5db1a560448a5597bad31b8f5701b8e15755afd8a2bd4b76793760a9d2f30e7fe2b6b565d9ab96f9d64f85f57462812b7b080139437a27c43a92a168005f77cadb863a7ab1f21b6a8eb15bb1791027bd7
+Entropy.10 = 65ee272214377e79c8a545ac8a20f9d6e609e50dcae34efd
+Nonce.10 = 35484d4af54635300e886606
+PersonalisationString.10 = 128190bfdb50272816f8a7fb5bfd4d4dd00fbbdcfdac89fd
+AdditionalInputA.10 = dc342a6f15575abdb07b25d0e1707d2eb89509f76fea8008
+AdditionalInputB.10 = 211931ec67c836257a6a6dfdbde45046d3e26997ab6ade3c
+Output.10 = e03df89ddb33659175d5fd22f060966603856305a0f3a551f89212ec4ef7876b2368614cacf4fd020e4ba784a553475eccd28272a166b744546c6aeae06fe414768586519498be880049c4a0a406e60e3d3d9c43183397965b702a50e2172ae89ee71966284a38c661095b576809e269
+Entropy.11 = f8f7dcd5a45e43c9d3ef1b519a6a260390aa7c9b837d3898
+Nonce.11 = d8d35d1d93c5f5b9589a969d
+PersonalisationString.11 = cebbb4167c12f97f4249c446f4701c86b2d284e926418c6e
+AdditionalInputA.11 = 33089b1efc4f06682e6958a916c273380ed30a2bae88572e
+AdditionalInputB.11 = 99aa5f6a03354674dfbe04437f2615517d35a28ec7e2d3e1
+Output.11 = 5d10d30afb90eea8aca1aef1d92f4c37674e1678a0f4c6ec59bd9f2ad680bfe681ab962020bb85dec6671ace83d7209542cad3fb48bc626bde9124dede8cc150fb424bb80d70a3e59a70f54d8f7a00544a0db50ffcf1282ad10a9e7d508cc4463e0db19a8e1878d5232b182dd6e1fda7
+Entropy.12 = 8bc136d3f93874f55fcfbb6fe2a4f528ccf158e984ec39e5
+Nonce.12 = 6325f9050c4c3ea4081b3cfa
+PersonalisationString.12 = 8d05b3d6dc9757c8131fab9a6f4d4c3af5a9b0823637a242
+AdditionalInputA.12 = aeee1bf64f9e415228c62e36c69a7c60d0521208f4a59906
+AdditionalInputB.12 = 58324bd9c86928f5e49defb914b3f209059099854db33d7d
+Output.12 = 3cfa71f9839605690bac7b7123fe609900959dc907b0141f3f20f4a4e17e11c5295cd464149b4c95bd5596436bd7cd95025cbf97d201f8625d116d1ed804ed4a0f51d7e9110496181cc4db44499600dd5f6681886727b48d52c9dbd7a2850975ac2b781ae483d4ce4f824f63e5589316
+Entropy.13 = abfe395e9180383a31d98a05f7ef285fb89d34de25ed5dbb
+Nonce.13 = 3513527ec8ff87c6c8c38719
+PersonalisationString.13 = 5b5f87e814b1fab63b9a46e49b156b036f9d48b76f02a74e
+AdditionalInputA.13 = 74bd4cd14c3ddd3b9ccaa39722f8131d6359e40a473ddd3e
+AdditionalInputB.13 = 2f936d9bddd7dde3b1b6f930acd1a473203a2aefccd8492e
+Output.13 = ac7f40ab8cf0a2bf7c8e45bca7642bc178d367cca85f9f08d50f14dc29fa87d0d63ddf7a3bf8b54adf479e06ae6951e849760d738c2ff70162e049b9d43ff218f0b35b6949f2cd10390f59e8787886a2f78f00412b44e6cffa94776d84b25c26760edc734fa166045a756ecb725e6554
+Entropy.14 = 67790fdbfec284deb88c22003b3c89f253d087987698927e
+Nonce.14 = 99876a4250b7aef0158d6c74
+PersonalisationString.14 = 196c43bb6e6c43fb3c11d5b8b24c61462f9947e5c3c32b39
+AdditionalInputA.14 = ec35738bedab1835d07ec7a6d9a5e6e0bf8a3283541b3216
+AdditionalInputB.14 = 689957f9c2c58f1ff34899bd0c295bbfacdd149ab378428a
+Output.14 = 6eebecbac4dd64b170cf6aa84788f643755ad5c6c731b63bbba3b2bdc2694f1fd42fb077b4309a0cb09b5ed1107fee2379272351ca9221069530762e4c8ac4c142c30167a32ac2b82b728d57bef95d620cd1b7a2ab5c1a6fac2cc90e0f6cd003ef526485c8bf0dbc9baa7c1f0d6f763c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = c4fb3cc673584f65aab31e16454639870855f1214eed7389
+Nonce.0 = 6118e3772d3661abd2a4d253
+Output.0 = e76605f95067db702989804341c5d89b596a938da1dde2e95b704e5d52856106ad9c9dd40c3cb2a0a146007bbbeb33c6ce6a73247179246c2c62e4eb94047f19be976badd1fa2ba3fa2ba8e8390071dd745c384005de7d4add40e86d9814ff338963f99c04e2b8049d6eff177762ea15
+Entropy.1 = a1c83f9dce3f598779cfaee5b35b44a186b0400d69ef65ce
+Nonce.1 = 873687888999958af6c43026
+Output.1 = 267acc1abf128cf3e6000a5663a2c8c391e0048091a0ba3bf8a7fc26bd0567ef8017404939041ba15a02fcce30643351d86c59e4841e0e37ff1747a555d74b61ca2ddb06c502aad9d894a2b1d3d538294d7c3cd30885418d8657010ec1311e2d1d81fe00482620cac965989ac4ff81da
+Entropy.2 = 8b237ceffa56cece738386c02ebb18564e6d8f8d95933694
+Nonce.2 = 295515a03cbc5549328d1402
+Output.2 = e4571e6875291e55dd133d815f8f79c2f16787c90452978144ad7f1c86f4f626a42c661dd8dd3f89c56f01638d13f08fc12c05a934f518f5ec8067b81f6541a1744e653a903275345c932b7f75c87e28eb27f0efd4424bc73ff099cd69ed1d19bfceab1a00de7551cbc0a17b28e94e91
+Entropy.3 = 7108dd77febcf9c9622ce18d0e55eb133185d01d0eadaa46
+Nonce.3 = 9d91b9c79cfd327ffddaf258
+Output.3 = b9492242ccb9de427f72fc0f335c8b6ab4923f77a1d6b77c66c9160bd50c79ef52338f35b526da4d5cf57391976161c2501294fff25dd539020fee8109e1841b28697237adaae555db963a36b7e5b1becd3c0e477ab8adf0ca27f6560b1e21a4005322c800c03ac12b0a0f9e32044e94
+Entropy.4 = 35a71f1f1477262fbdeef3c6519b4c8cafeced619247f0e0
+Nonce.4 = 131c28c430e082e247fbcc33
+Output.4 = b75094b8c9cebb7c162155287b2d8154833ad04c657eb1afb3f25ae88a0445bf549b4c4e211cd4390c9bc5612f88fa5825907a93aa0042bcef14b5a5c1930bc97f1f6bae6943eada1f0a70c5d4f20a2ed62fa11cbe48f46f267dbfda6d9617518dc0d386fe25f1f706778e7d9eedb349
+Entropy.5 = 6fa7529f51970267e12691bc61d751ffba248097523b6307
+Nonce.5 = c3daff5b85a277b8cb6602b4
+Output.5 = 00af923a2a59b73aa75bd60ea15b5c442b781514e18b9013e38424a2317b730deecce9e78181fa1452c6dbf2e22c76f17ae1525bf97ed277b1837f9aeefde422185eb6ca4b56e4b0bd3ab4dd45e77376af2058f99e863c92532dbae96d35039b9d6c530843d1df37361ea0fd039f0a71
+Entropy.6 = 7fe4876c24e1984d3cef2d39363cdbbf3d62314afd38d15b
+Nonce.6 = 1c7aa72ba39c93dda32e8216
+Output.6 = 55350dd355aebb35cda8277553fdca6899db0db798fe65192e496efc7ad7c4d12f50987b505e7857d39ceaec843f6ffb6df5036b9f9440003d1ff3cab3aef5808a99fe59eeed048eba61d0f7add2986167edfe7dd77b5dc0151b57338673f3120cf051e7daccee9780cedeca18c71c5a
+Entropy.7 = 1ab7a896159cde0950808fa4634e047c8ea3b21cd65385b9
+Nonce.7 = 7c5dca71d1e6d7db475a0eb6
+Output.7 = e255fb01e7810ced3be9ea0410b85a576171ecff2ba6e42b48bd95fc7199be084500ab32db29ca0df32d47a0d9cb31ebe33f0c0cbd9d3fc88a6ec455b601e0317ff4654a0826cf76a8ae1f82037f0c3a9a0711ac8ade55a5dbc8ad5c291f6a4a2d413f7178cd5e5b1e20a6e055ce6916
+Entropy.8 = e5e0eeda6c10d7399d4373cc1763fe7497a6dcefdef3117c
+Nonce.8 = f834f84ae5c5f575c9051b19
+Output.8 = 6a5c5e29af39950a974779f9aa12b22b7f4508d81d6af68d96f7766e1ddcbdb6a8e49407148f7b4ea0e536db358654b4e6697d6857eb1efa611731612dad3e69774a5b9432afc8c666f495b104ce3e8bbfba5a58eb3ecf2a0837c533ebac232f7e14353c27147109becdd86f03ebed7d
+Entropy.9 = 9e33d60882a7d76830d4e09bd3875a7c79a70dcba6809a0a
+Nonce.9 = a42882e1bc97ae2cd31cd651
+Output.9 = 280573785ed687dbb9089b9dc400c943d3be6a1a9eb23a08030193e8435630c2cb580c79c103623aa8e21b1b88a658a7ce1e95fcd30c6a5551d46302c9424dba582ea57204f7e9d5e5ce28fc705b3e454f9b1c93acc47453f91c69c3d1f1dbf2e003c7b784164df89105248d39a9fa9d
+Entropy.10 = 9f0463cdf0a570013618750020f3624150c7e450a72982fe
+Nonce.10 = 3ebe6ca51bc5917b8e813890
+Output.10 = d12634c4bdf03b793df7b5a958a7fddbfdfcc8014370c95197166582eeee86db1aa4c29ed27fb76136644192ed4bb95b8f45ac8c3cc0f5fdb1d2ef897e22effc320eeca1fe8fcb0d4f40505143222760bfebfa33eba2d1cc3b68715c25a2680a404200780fcf3637d7b0159c3f76673d
+Entropy.11 = af16fec8eb451e1fe943ddd6b024f9b2c900da9a51a34cbd
+Nonce.11 = d521f835d68b4e7935be1bdf
+Output.11 = 56368c7a9f8ce117cc775cda0508117f0be43cfc2bbfe9b37237d8e9b4f430c7f1a589f4663a837525b514388388d93c37b2ecac465c958e0aa0404552ac5ef18b5e8eccbcda175347f05fd497b205eb3565a84cf8918532f0de2af9098d1f673472f98dae065fbc95755cfd7c463c5b
+Entropy.12 = e1cd2895c2bb7f08a17cf1ed43edf63a1079683dda7f1dc4
+Nonce.12 = eca177fe86d8103f3ceb80fd
+Output.12 = 52fe64e3a895c3e03c5a1c822f00412472ec8dd33587b986efb16351717792c5b9de7992dc53fb48ce19e8e46e95187fafa8eeff8e2b6b82382b5666e5fb10218c00f5fd154a7f15d589d24c932eb6d906ecffe51091101e609795a2945ceef68eab4de6f8e993adaa026a29e37dd07e
+Entropy.13 = de09dbae1769318a11934f3a60e4585d6b4d3651a3fe9438
+Nonce.13 = 15bc228bb7450f10b4541fdc
+Output.13 = 1a9f338f8a8ecfa40b7dc768025516eb4fd067fe9a3d3169bf1a613c1c04e21f53bfb102069cc077b7fa88a3934d522e95c4999893e0b8df84367f2488d5d6d32bf2cb53c67d55875ba5c90a4faf62f6f6071367ae33d1ac856807cff9e58b2510d391f1686c1891a9013c4416cd61d9
+Entropy.14 = 2fe6d7ec78f76820cd88c41a5a958c399c7ad1619406caca
+Nonce.14 = 1ed975755cad5e4c475c5945
+Output.14 = e34b31db083e58516cd60ead2e5b0d39e4a2bb47c2436531c0e700e484c27d3d233d10d1ea6c58148149751f24155fcd258f384d61000da88106a0205d693e4ddfbb5c35f101ff15e531e9ac4a988c16302a962146a3aba9af5c505697cf9aeb7bdb8c49c281458acc33ad4010122aa5
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 7cd0ac25d39b0f4819498fad7f2dbc83e9c4d73d0664c4e8
+Nonce.0 = b2d4ef38e3d037cf62ebee9f
+AdditionalInputA.0 = bd78218cebad956843f549e61c2a7d8f16f763f6482b9294
+AdditionalInputB.0 = ae206217ad5e88a9f72845c7aec800162e9273e08d91f53e
+Output.0 = e399fb7290f60a64a773fa98e34d0848837df98c39c3ef73c6b4f7440ff4bad9361e3ca54f2c2c8eb1ec589ea98076566154444e7927b74894e3c586626d1f8271466dd46acbccf7f02bb88634baad04d2771b7fd8367fa7a7a0d2462380509ff82d025b5c8c3bc56a36ad60632454ee
+Entropy.1 = 2ff9f57e31f09cf62b40907efe5ade5dafae434d49b6a5e8
+Nonce.1 = 9384a11b7d9323770a0136e2
+AdditionalInputA.1 = 8c8c191fbc1402fa146f744b59f2824404ea6eb01eede29c
+AdditionalInputB.1 = 09413b38438d354f4e0b412349fef34ec4adee658381aa3e
+Output.1 = a34de7d42460b7cde46c0a8abcac8b2ad099280e7b616219faad831337ee99bf06e2c0ea2dcb4c5e0cdaa485f7b70a48e4ebfde73fff246aeaed575ce23ad8e14daa30fd1c9ddf46f67ee8d17b18ea0b75fab38db8224a7446020bf0da8d433f75b23c710d7fdbdebbf5a2bcb547d3b8
+Entropy.2 = e9a389feee1b70f0fc61d24ed2454d994265681d890a1803
+Nonce.2 = 0ff859412f4f70f9adb0f26d
+AdditionalInputA.2 = 22d9910ceea75da77ef610b5c8bc4c6f8f1f4cd4eaa3255b
+AdditionalInputB.2 = 392e98ef7b7301e6c02953e6353308d5ca58c38bee9da865
+Output.2 = 3d7ab9debbe8e8b5f09b13f8a9b40c07a0536052a44dec8c9cfed28eaefe05d4130abe437c6ac23625693fe92f72f3c367bc48d1dad2802009ca9940531ddab492d271501d3e29fedfd9682b7ed2a8d443f253ebd3c4a6142c7538cea9f139d7bb24a75c8565114c5adc9645ed498588
+Entropy.3 = d8634616e8c49d23d6d8ba13298eaac1cccdb54b7d53c35f
+Nonce.3 = 84f7e17bf6a05357802b305c
+AdditionalInputA.3 = ede091eaf75e800cc30aac3a31e5278abd5558adba22e245
+AdditionalInputB.3 = ce87423b19fd9ed44430b66e2635fa02a169d985508d21e9
+Output.3 = 36adfe1ca977a2a98d01c22599db8113e6456b6f187076b75406711f08f110aaf848c182e2f94f71981cb3be96c636fb309409dc72823c81cda23cc1053ef686a8aed3585b106bfa6b2fc8205d1b2690e18b7c726997bb1588fd67fd5ac7df42288d97fb4d8ac18f0cddf5225611a82b
+Entropy.4 = be138010ce76c21634c2ee7238f62c11ee4f9d73594bcaeb
+Nonce.4 = 867ae2fccb3f393413262cba
+AdditionalInputA.4 = 765f7711577bb646002e8eca1d4d176e67f043fbc36e35d5
+AdditionalInputB.4 = 0da69681b3d142bc24d0d35873823c1c9f2832d150d749a6
+Output.4 = deb2d52011ff756ecb86777250182c6df46a9f80cf541b4ad08300cb4d40d960f019a34c13d2941ce61b78bdf27ce14684e8a712f947076306b3701e75b1c8177b511f6c9c6fb0c47dcb8fa57851a551eb3eceb935e64a98021d77167e9a17988868aedce2203c042387783f0dbddf44
+Entropy.5 = 20522bf3d40aa4ba46a29659d6104b453c185e67ad6808b5
+Nonce.5 = a6c0e5f1786ceeeb28c103e1
+AdditionalInputA.5 = 31a6367db8f006da27b1b738973938f58a3d90a1b840deb1
+AdditionalInputB.5 = 8ef1a71d781a600889f3617a26f48fa3ed9c8880955b5c1d
+Output.5 = 220cef1c9b6434a27e1fcdee79a52331447cec09692cf81e59fd7db6d002aebc54d7db8a1f9e098b04a1e38c7c77ce8c61650eedd43be3cfca4e61c3f75ed2e280f17e2a05c6e77e7ba8c9ff91d597aa3eb26f0f7d120ee303a5595330f18eedd75920cf95c0c36bda6cc215ff832c36
+Entropy.6 = 596aa1fee7fcea366a972188c27eb0e268a798de4dfb52df
+Nonce.6 = 811b64304324b06d7cfdebb2
+AdditionalInputA.6 = e9beb6e075529b9ffcac6e15809f7900951f31d2255084d5
+AdditionalInputB.6 = cc6006c354abb033df3031efbd52f46f1ddcb402f93d8599
+Output.6 = f1e9a56422d3370830e912775ad4b2e1a09e5cc41932332bae778ced63c1db4f19756cb0f6acd0f1db1da0e6bc3c3bcc5e43eeb789be2accd6ba9aefe80b854e968aec0f5eb14233005a53f105b007f115308ffc56fd302d7654f302d00613743e494af4682060b33e609b03f0e1521b
+Entropy.7 = deca084ec56e1f704e7c8a237cf20c97ce915f2a4f249265
+Nonce.7 = d1e93bf0c3bb22680c67d835
+AdditionalInputA.7 = 18e4429eeeb6990bb0c53bce2d922bf103e9eb8fea583b5e
+AdditionalInputB.7 = 4bdf70e86332d2549111b8f1a140c12baf6dc834faf481f8
+Output.7 = bfce1e88a86a96862cb62906641abe91c135a573fffd66b1bc3313c83a031596cadc3b7333a55431f3b9127b47c5e82ab56e39ccb0dd736ffb63c820c56d8923e67dd1249b8131013722ce080d94833ce86d1ab2e260e4b19790f1205a50e1d8aed64d4bd172f182021b247651cfc246
+Entropy.8 = 0217285cf32ff124f9816bf8f415cbbfea4fd9b800b53268
+Nonce.8 = 8f33154f1b98c30a4a6ff69c
+AdditionalInputA.8 = f7a363a05e1ad62a301b369cd5dbb203b1ed7d4fde89f987
+AdditionalInputB.8 = 9fbc34c7e104a6ae7e0533e6c914154ad2cb421ce3ee8ac8
+Output.8 = 2a62e2f9629d6d9b7a9f4909e16aba57fb9899ffd362ffdf13eb5d2fdc283d8e67d41de07942f24efb5d1da727186635fbc3e57d357416d6f4168743fdc7497d81e568e5c53a78ef1dfb584539b75368f3d0ea645c80d1320f61f2b0f31fd5851162b629c86bdac5f1968debe799e2f1
+Entropy.9 = 84e389dc94e2c049164dd3d8bd3ba3789745d6e1ee4059b2
+Nonce.9 = 8d51c900403d363780db9a6a
+AdditionalInputA.9 = 8f8ed5a48265f632e9877dd60a909b51dc765e211ad04cf4
+AdditionalInputB.9 = 71d8db255499a7da92010ff5e400a8c5d4fb2d82df842131
+Output.9 = f3cac3710a5961dbb8c05ef27142d05c1d36e4d2804983933d856752b1e20914381419d97431b828105c881a6a5bc17151902c5bf85b4c1d744bfc6222246498af3e40d1181607c593320a127f8f23d330f364cd9a85e03dab043398d84df37a4527562016cd03e2b231a341576f9538
+Entropy.10 = c91ba78ccfd117371d77e82d3d0ac97cc19d4378210c5a22
+Nonce.10 = cd40c4b742c038f72d98c93a
+AdditionalInputA.10 = 5ee95cbb690b780d882a3625fca7899984e3c948cabeeac9
+AdditionalInputB.10 = 576d3b60e504752bdca2a500ea2d081571cf5e487f0c9ebc
+Output.10 = 173927a2b43fc2c3231f99ed92b7182f52e264c3d9ebf009471276b099ec904550315d92a47655df02f3b014f8cd975989e538121ffde40486cbbd78902951db5f2b0b3026e10fc48dff5ba41689a9df67beaeaed7f34755a740dcbff59dcd301214bf0556d2b868a625cb04356d148e
+Entropy.11 = 86d9cbfffc5bfee75a219e3f616c17e9d1a6692976ffbdfb
+Nonce.11 = 68611840b5bac261fe97ea5c
+AdditionalInputA.11 = d5d5ce8479631b37c1c99adee2e99fd487bbf4db191a31dc
+AdditionalInputB.11 = 22ead38d9dd54c82daa18528e98f4cc7378312f0299dd70b
+Output.11 = 15d0930e1e289439e82fa7ed49e641741a0e72207dfd3c56ca4d2a65c816f88036414938f4fa0a93f4925f094bb8f3369bb63bed01c8672e5abf17a531919fa0d607f5f37f72c7bcc30ff89c8a48d4c2d97670bc31d062faabdbb7da52a9398e29f2b35e6d6691eff367dc42fd20bd13
+Entropy.12 = 0f4ce7e8c15a2760c23eff7ff4749a521c8ff60ce0e02a81
+Nonce.12 = c05a87eee25ddcd5a6ac703e
+AdditionalInputA.12 = b76b9d4dd1977dd646ad256d09de6844ed385e26e8425171
+AdditionalInputB.12 = cb6ef520be5ff2906873839b9efff647d7aa08bca8031187
+Output.12 = fb4b2815e493a36132a8bd3ac670fbcaba1a305bda4a5323c43f8466f7da209be4decb840fa5d71b474bbc8177b9145156c0d47772f15bb1af634beec127d120527a7a7b834d0e8204c6056871df54169c0dc075ea6f402e49370828fc4257ca69c5ab7340ef574aa3f7e1e8cafb03e4
+Entropy.13 = 403dfe9f80b3562d4c349145aa6f1d46d70acd16192dbdaf
+Nonce.13 = 4c9dab7f11d3c2211e5620c7
+AdditionalInputA.13 = c0b0e304db4c294ab44bf9f1b4618236516319b2554d68bd
+AdditionalInputB.13 = 9ae70772b7bf86dd51f9957af96d3b899d4441ee84c88538
+Output.13 = ae41c113ebcc299f8bcc443c245bec19d4b3a746b9f52ad47f6952a338863b0a4cdf2d635e5f59f23a4aa0a425e701a92e726202d63b339a81b7f7486b657738a6d6f11df213301dfe110e370a64af01b19b9c2006238376f4446f3c6ccb80969be4cb60c30a37c9221c12f811173188
+Entropy.14 = 1c7f39179d24334699c29eb50e1a79dfb2363250fd016299
+Nonce.14 = 1122354dc0f35c3598742aa5
+AdditionalInputA.14 = 17c87a351e940e261e8806e2548da44a751c550ff5f0257a
+AdditionalInputB.14 = 7e3bb28f266786ae38c24876087fe35c7e43222382270380
+Output.14 = c943c9ff0cde86a62756465e6bf4fc9dc25447157537831c975782dad82f3e33e6e7790b41c158713b8978a6967bfadda9e15ef43922b3f93c8ccd0cfa834fbc6776f3c1b6369b4f25b1cd1189f8b8efc31be2dc151d3608eb2189a4f39c0f0a3deba00ffc97299c11c46885b424a7b2
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 540474a887a098daac97c42f0818b64d40b8eb47149fccbd
+Nonce.0 = eaafb1519bad0b672da5d22b
+PersonalisationString.0 = 8181206a69385a76953a51d7e5edff3157ef41fd08c41402
+Output.0 = e7103405a5564138ab0909761b6a06b7e083d294c495317c8145a58162d81d1d3a09b80a3be99da51855b87611384fd171e648380d02f23989db0ebb42d2968fefd7662eaea94077dc1778b867c69033d3ff83fba96b57f303fe68261f48301bc9a8f063254a185fec9a180e6bb5aaea
+Entropy.1 = bcaf9aea03649886a7e783417032bc48f0bc3c77a6c46124
+Nonce.1 = 6ca3fef89c7d9c299b493368
+PersonalisationString.1 = 9eee0eeead1781d38ee6783630d3e65d9db9d1c9ab731e71
+Output.1 = ad5d0a53acae54aab7432409ac7b46b1c54ba410ff60079dae18df059a644b0610cbc5bd37ee01ac4e40e16ff6972e3157f952784d98b50967c8ae75a36b85cc830f6fe856bcb0ed4baedf93e6b55fb68e3a1414532e4a7297ba7e3120d5365655653d79207eb76b459088b16b4f07c8
+Entropy.2 = 4ee53b9b089cf133e5e162085d506716cf37a5f0aad13135
+Nonce.2 = 8e6f882967d17ac775e2326a
+PersonalisationString.2 = 805c3ee2d07d3826289cf5ce76a4f70573f13e1b1d5ed514
+Output.2 = bf21bd026307a1c2456029bad6a4b19fbf18337f3a6498d26379ac147c0a59b721e640b499da797062a309eadd378c922983a7ace3ceef05a86f882cb38ee714473f48c5088aa35c5db7fe7d30933aabe57ef2df9f94eda15772f3b28fe1dceb661e708d90e764d870865e65e747cd44
+Entropy.3 = 37488795638f53d944c091548b41ff84e1f59088658b57b5
+Nonce.3 = 992ff3c60155f91dc00909ca
+PersonalisationString.3 = eb5cd8ccca404221791d4d9c3fa8d561c4b7b716f3e267e7
+Output.3 = 8be432e37dbe2cf3fa18ee66e1fd5d065963e15330960c0f80cbd040bdd2178996ca946ebf9f84bf5373225022e789836b7a7a8acbae99bf689e1c73fc7f507822fcffb456c0bc9bf4f3167d8042e09266ef10e92dd522d0029fd642c65f300420c1f94e727f4a6bb1e2ec6ebe7e7822
+Entropy.4 = 37300fb491848475c02d54a5301ab519ee0a4f79f2f45f3c
+Nonce.4 = 81f001ca36ef52bd88d8e3bd
+PersonalisationString.4 = 0754e254e5cf74c59997909046293ce030bbe3bafe69c7c6
+Output.4 = 00b002b819002e67e15667f067441e7b3f1a5504ae548be606e58c0ae30f1d26f71d81a0db5a25225b6036847d25af79939aea8c4f0bc3541b9ede8a0a5a9a3f45eaea96d88f6fdc7d395818225b60a3fcac49515a540fabac74cdf57c73bc59689d19d98a9f313e2581a784284894ce
+Entropy.5 = 8f251f01405589464b7e05e73459fd3432e10a28335347e5
+Nonce.5 = cc63c71fec0170aedf8d537c
+PersonalisationString.5 = 2116b9245c27ea748e2137a52334c918f36c1a64a6c7464f
+Output.5 = 290e95a1278b4f7504dad0231e4733d736698f4222430682ca18ba0aff31073e53d51c70046f12b1b6a14d74247cf1e3aff2a0a1ced96bc1ebae92e4c09bd810e354ab268da3150c3bd6d9df62d5ea6cef9c49163766992b52b137c40946478290941e9238c7a2da1a0b00f4cc4cecec
+Entropy.6 = 3613593f30ab411023c92b1a1790e07026632c1e00d70661
+Nonce.6 = 853d8aaeb7848393f43eb566
+PersonalisationString.6 = 17227dd8912f2506f849413c870519ae89245c426f2a2243
+Output.6 = 450ea8ff0e69e88bd799f446c506d7157d92f0b62d12618089765eb35c45415c28c608342f0e3e6385afb9da049275da25ced9ee04508588461ec5f502625c2ecc5bf6b5c33e646ad4f6a6ca98774c23585216812229c069bc7e3eabf7584c4a8d50c4a1184d95f77a121f6c1b9cc175
+Entropy.7 = 762bbbdd8acfe5561274e27d2be46164863ffe556d37fd38
+Nonce.7 = 15c70ed7de9e2c385391f0e1
+PersonalisationString.7 = cd60cd237f33e40b3b37062dfa56c1cfa90b21c549c48d79
+Output.7 = 51c49e156d6fb62706c79a67b336a0c00aca33d390c483c46996057a9210e5c2b3bdb10c5fd08b1f4140c6eff0f0cca9617f1d3248370521576c51a5e2c30cab28b7e92e2c5758641ffc2a72efd065a57460a81e4dce6b47dc3b56482e024bfdda01c07d0aef4229c7b10247cf8b4ca1
+Entropy.8 = 20b5460e9de84c54c032a00281aae28244c00dad68090aec
+Nonce.8 = 1d4b21fee75f3fced9c0eaa6
+PersonalisationString.8 = 486c4f79ac8d0e50c606a4f918fa237dfadb748557d230db
+Output.8 = 89e6e16d7a504bf60f8fcc96ff50e50fce259255d1b36293957a6a377c0dc949fa72d38ccfe19290827fb1dbc98527cdc1b1c75b5faa281a84497d871767e67e3f37396f7e50187cba2b4035bb9b9b4d8783bc4ec610f458ae88f37a40ba0f385569097eca4b40a0220f8a5f4b172c70
+Entropy.9 = 97e55216da9e733d2d305316f447c21ad0073979e9782818
+Nonce.9 = f2ca8e35c362794c9746d415
+PersonalisationString.9 = 409eb3662ca4881d28eb316d8c278feb6281916c44eb3bdc
+Output.9 = aa85c42dbf91cf07b753eefe8ab560b9b0ff2d2c2b49a45eba03db5c7d562ac2c2db7daa54be6e75e87896677b9ebd9ff91ab035d865fb75aa6d418c098a9506fffc74fcdc5d2a74e7352df990ceb38eae5719837539c8a132f2c535cfa1bb69cd6d4eb6f40874397e1c8938f6fae444
+Entropy.10 = 28d50a878bcd630b30233ac8fab1fb97050809109ce9008c
+Nonce.10 = 224cd9fd557fb7bc5c804078
+PersonalisationString.10 = 4bc7107510317ab16ef3d2a640aff47875f95a92c2314aad
+Output.10 = 23d37ed9f748e0b51c0613a3d2e4428ec8e8c06e551b029c43c8555a2720a89de0c3b533301e21dea1d6893eefe77466ccc518d1ce48690f8478a23ee4e1fc8486039d2752fcce5b9d6fdeec286c441f6b12d8f6a8d39154db12c71e38f463359f8db1c1e68a61fdc0ba0866aff438ee
+Entropy.11 = 59427cebd6bb51403dc4e3b98fb2d8161577b97df8da6cf3
+Nonce.11 = 0a0202a23a48f3a04b6869be
+PersonalisationString.11 = 80527604f7206108389b0d789c2268039932d53e09878902
+Output.11 = 5cf701785ed71ef72e2575055dbf277c28ef352c74ad35952c4a1456943c0ff02a29d88c333da21186c0a96a4d96c8875b8249aecb5785ac1768eb1da0325563412bb7d8e2252de3fcf87100b3f5da9b4d6b369ca978944080911cb60066960036985e33cff514a30f2483f2cccdac15
+Entropy.12 = 2bd867d7229b5a6acc918b27563cddcace362cbee8d7045c
+Nonce.12 = 2a6a7d5de86270d56d36f209
+PersonalisationString.12 = 9a002cb5218f84b74413a35df313344fa2961c59a76d0f33
+Output.12 = 9f682ee53c84d4d4a49500fc42112173d0836cae6d7c89c8506ad77da295732d61dffed48c47be800399acc02c159c8979f37ab875442db6c983fe846da97c7ac9bf38b70f74d52c2efabc38728bdbb05df0f469ba933213e601d680efcfae6b397dd13e37d4d371cd05f850374d4e0c
+Entropy.13 = 02ae1981aca084a3634db99df57878d6d9d43f7d89658f67
+Nonce.13 = dce7d387c7662b1f9d7575d3
+PersonalisationString.13 = 26975bcd40635e64f1d37495af4da7f3e4ea6b9374d59e09
+Output.13 = b08036bc931cdc272d4c4c66894203320e28aca6b5ae174b5b820832563c0be15c4d5e3468c3397b4f960d73e6f5a4166b5491cd9f431ed43fe2700380c6c848a84bd82ce69439dca77971fa402f7b720caea84f6b64eac5e7e744943eef6c421448867555a133849cd7edc7576e3b8a
+Entropy.14 = c3e01806777c3a435935e3a3b55110bc54a1fed09cad0e08
+Nonce.14 = 4fb71fac56d2aa35d7fa44d1
+PersonalisationString.14 = ad66fd02b6f6e30ce521ae0d783236c75cd3699696475ac7
+Output.14 = 4b2df98ad411407c1dff07b5c08e97ab501fc20ad191794dab73e9b4dce62470b3c70d75f07848f436f16a8c63ac31a75525bd928b5c76218099ec940e3ad193eecdbad834557e92602d7daa6e3eedcbccbc4d0829c8e1c7e59adb95ce928bb138870566eb27e4725191a9ebed50304c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 5bf20c3fbb97e770355d522f06eaf7aa4f67280f11d14502
+Nonce.0 = 6085eb03eb7b3d2be92bc000
+PersonalisationString.0 = c2a83622b5b30faa3823534b3446af32e48057c2985ce4e6
+AdditionalInputA.0 = 8c93cf82da18330c34db37f3447562780a69a6a84f4c6012
+AdditionalInputB.0 = c649c9a2dfa87b4d57f6aed26ad3f29845c6b2274ccaead3
+Output.0 = 7dedabaf55fefc6c141bcec9c9d5bc272aa4e31039062e1dc99de7d2621f4b87b2438cf4e81adae7f44ae3b430d5311f2f25072b927307ec04b55cde24e5d775e58d0ef4b9d2f2e8f4728537f74842f5418502a92a4c8a0b7741a1f1ff1f2dd7ec03c26405445fc9bda9dda869007965
+Entropy.1 = 5682c920ab8e959c0c0f338d8211693e8215584f326960c5
+Nonce.1 = 321541f5845784986c40676c
+PersonalisationString.1 = dfb076db913e2713188645a7f0ef899d12b9f35d3bff49ef
+AdditionalInputA.1 = a01db449c5cddd36a17124f2156f978371a537287d84fe54
+AdditionalInputB.1 = 59af26bc3b007895035b0b1b7f4ad84c0f858f8e9d44ab0a
+Output.1 = aaa8428afa0945335015c25e33dfbbd319633571bd35286d42a7570982c19c35efdac6ce9cde5b4c26417f550d0f49508329418367ab07add5b832333a8945e4fd948c8f9f98a809697ca7fc33c44395da6253f5c39ff0472a4321b235defee3966ffffd0691935c530dfff354175285
+Entropy.2 = 0784b749c1c2b1fec9fb04353337421b0a75a30aeccd9ef4
+Nonce.2 = b5bd2758fedcdd59daed77cd
+PersonalisationString.2 = f3c84c5e3fe4adbc9edf5ffcef1d9916c7761a434308efad
+AdditionalInputA.2 = 3fb177db53c3461aa5703fb665f98c032c80382492f095af
+AdditionalInputB.2 = edd351d70dafe2e6f8a8ee4bbfeb8b1d37e6fc910b2bbf44
+Output.2 = b8d5a0da04526141765095ee0fc09ad74d46ced1aa18ac73787f2c176623ff1c4ae306f3df1ccef5aca8bc5a601f535f59090613e9628c38882d52f0bf8679526a33bdfd70b2029e35d9c396b68adae7b690fcda04adfd623ef0915600e9b13d278967260570f23820330e87a096d3c7
+Entropy.3 = 9c615b41fd3fd3e397ad2c9b182c099d1f9e4f117912558c
+Nonce.3 = b48814030846219c3ad97aaa
+PersonalisationString.3 = 0e8885e7b1e8b35f94492f3000301610e98595327c32b487
+AdditionalInputA.3 = 32e9109f6f2d513e376ec5d38449b32a90404dadd997b1d8
+AdditionalInputB.3 = 1a7bb8200614a1c6c2259675a7fa788b3c336ac2b2975331
+Output.3 = 8521114ba354099bf94365b2b361fe319e939aaa6b7ab47d2f884732fd94f68480c1f14321212ba8bd3a0216c4df07f99fbc6e75d17195a1d342303610e5d818fd9edf64c242d0b7a8d9a4488e330c3cf42efec25da4f2a55d69723b148da46a578565c78ad0bba784be3b9dde14548c
+Entropy.4 = 62988681bfa860913709bbfd3a8bc5274cb73c28976e7a64
+Nonce.4 = 1bca37f4a2d83578fe57e4b9
+PersonalisationString.4 = d105416a8cdbc6317cdc74b73da683a5f0af998aed927845
+AdditionalInputA.4 = 104595afd6b0fec0ce25b54dbded4bea7eafd281fe9a1349
+AdditionalInputB.4 = 89f261d602fdd5cd0229a8174540c2f23b507a63037e5c11
+Output.4 = 335241ad126ada18e1e160147886ccadeabb147423f687bd426282838a9722d1ec1563bead4bec86e46cdc08c2d1558e35594ca5e88e81e96d6c7cbcf01da3abdfd7cab26a91fa0a4daeb57c204861573738502d80829091072c0a063e2f7426ad390ecaf4a7347ec80f03f199f6ed96
+Entropy.5 = f8431b3d731d19e7c2831d102d531ea079899e60f46ca05b
+Nonce.5 = 2c82c3dbeffe4d432eb9686e
+PersonalisationString.5 = 1100eda9d679de2ac765d7080758a35aba516e038af15e05
+AdditionalInputA.5 = baee835ba95f04284d30d65efc6c8dca13ba99ec45109be6
+AdditionalInputB.5 = 6f3f4fbdce86e074bf4c0700c37f38ab7bca944e10c8fa06
+Output.5 = 7c44c5c98c03db7d31fd3b1250633cca80b7156a261d66a0566e0a865cb5aa75d692e3874e9367deff760dfdef4e84a7a876bbc86df0b59f6a565d6fe24a32912c09109dec19de565f265191e05fbfa6b2c0566fd024c25ba30521b6c8c1bc68a79e778418513dd2e034e6acb0fc05a4
+Entropy.6 = 3a42c7c7e82b8a2408bbb6c7faa6d35b0e7ea502bf165600
+Nonce.6 = 58ca8084d6f3c5c6d0daf564
+PersonalisationString.6 = 2510bd846cb92fa9f886fe58cba267ace4e9c7c75421bb37
+AdditionalInputA.6 = b177cd86579fd72d3fb0b77163804ab9de2a42cc2c7566ab
+AdditionalInputB.6 = 9049675ada39fefd5e1f86a31df38e2eadde3d892a820a04
+Output.6 = c2087da5af1ea949b4330b54616fb0d44420e2e188f8ab311eb0329013ab54b98b26d26f78f1ae1b16998a4439df262246042ff2020a490c21e820051a87ee259de93d4974e401cd25758da6c75bb2e7846a3c88a9d300c087f10d1521942a1c3a112bbc7b4cc08368ef8b3bafbf3a32
+Entropy.7 = cbcdfa7f3569761870c45723899a5d0a51f4c5c9c144e19d
+Nonce.7 = 102cd91d3660db996a280e80
+PersonalisationString.7 = 877dc905aa23081726653257b11434aeecd8d3c2aad0347a
+AdditionalInputA.7 = f1985cbd4b52f44e99135c8767ee6eae8bf1f41a63b1f616
+AdditionalInputB.7 = 322d4e09587dfdb4f12454bd6540f4220b507d6494097c16
+Output.7 = 57713161edb9ec7eaaa67e6b81fe4364473d168059ec1d13607f625e4f10e50f2e74ba85bdc15d910ecafe5074f80086e2da1dbe6619c85d7c1130d0e3aef336aacdca3f66a7eddf3420fb8b8c9961e05a5fe3b8a78068011cf7447dac6ce7bad8d7461778aa54caa867015281b7db7d
+Entropy.8 = 829cc50508f0780e06902f12237a45206f37a40aa153a37c
+Nonce.8 = 5ef179b9c3d2e7aa988ef879
+PersonalisationString.8 = d9ec2e226ee3b96d9d98a7e93f0d20ba856bd75359c49132
+AdditionalInputA.8 = d8aebcf39ded17518e3cf3aba1fa54e98bc305cbc69ae909
+AdditionalInputB.8 = ce69526e3b78db0748f263fe76210b14c6cbabcbe9c10105
+Output.8 = 085da2ae17fcc727ca5401e99af6bca848dca003d1a0b6fc853256675216a33abdaa8306c342304494e2d178ad26710845061510ca37ba9091cd0266b16b975f5375fc432890acd7d57be995f8f0c22b7ff16d881deb9db25cfd54b6dec2bfded32c6ad71c94633370a6a13d98280f4a
+Entropy.9 = 3062a34c22417cfdce69a1c7eedc3860d2867e605708304e
+Nonce.9 = 3151bb9a35f8cc0651c3e8ca
+PersonalisationString.9 = 3e96d57fc181868ebea7388f5b27ceb85168e1bace15a7f6
+AdditionalInputA.9 = 4bdc529c6f41c13abbc29690adcce2db67704e6681a4d23d
+AdditionalInputB.9 = c7eb01b7e78ad989298fdbdb5c7b64942ff9b42e3a77c623
+Output.9 = 84e24b9f76eae69bb07f1797efdd14d85d57f2788ecd3cd9bf66f1b93ee82c181c40122a14b7b43aa7d1b6251d11d62fc1e3d130c06145da650f54d256f5ba22f5f2087f6333dcbca9fdc0d3580285df355a1bc1d48ac704e677399dc56cc067a797fc3972b989952a8e5fd43985a24c
+Entropy.10 = b16562524212943898692a5dc27487aaa672180a6bfa73df
+Nonce.10 = ceed667862bfceb8a194801c
+PersonalisationString.10 = 1a041968ef2f8e6fac6e82cbb69a23b74988dd524ac3f29d
+AdditionalInputA.10 = e7c59300979604ede174777154f79c3d82ab49ef8a8514cd
+AdditionalInputB.10 = 690445a88f7d8160e1fa3cee8f31ca19b294fb1ab16b520b
+Output.10 = edbe66ab6252cf5a6545e10adb9db2018dd70a2cee28d729a392147eb3f74eb871dadff057b0597c4908bf6e2e5af78fbf0e3390c14b63449b8878fa546b25057fcfde15b8d7bbaf2dc336d62aece9eabf87fdc58a6b7209567647a6779b4e68b8d1137e186c0da0bda590817f2f0787
+Entropy.11 = 711f60b8245f09caea0b5c02c28af104c8f03478e59f0c2f
+Nonce.11 = a473eb0a1ec31566475fba15
+PersonalisationString.11 = 3ea3626b345a6218be11fceef20ca50d2a63a8ba16f5bda0
+AdditionalInputA.11 = f362cf23c6872d57a682d914d6314e0b135fdcb94679fe04
+AdditionalInputB.11 = 4734e254cf6738439ab3b77f3695fd0b7510acf68570210a
+Output.11 = 62c82c6855a48ed5e64aa6e557b4fd391f1cdd52b16f8322943d85924458a12680d3e6f6d101735f8dccaa4c640d182af4e63a50cd966ae2130c188c1719054c83380563e98ba44455b5a229fb05552c10ce8122b27b43e76b9f56ac0845ff66ec75c09b64c96882008deea3d120ba8f
+Entropy.12 = fe54286c3faafeb7d2d46c093309445f97624e26bc9074c2
+Nonce.12 = 00f63060517eb334ad776b2f
+PersonalisationString.12 = 3f0c9dcce20ec13476aa9ef18f4dd5bb136284acb7410322
+AdditionalInputA.12 = 8c3b0d24cd9e0c78b0b42ae74148ababc2e18b82c815cdf7
+AdditionalInputB.12 = 2dd154b5d476259eb3ebdbeba12f59caf6e0734e8a6f3538
+Output.12 = 32095d4034cb5a90c4896bb73c3dbb4a9f2c7c5e93e0fecd51e518b8e6f8c218fd37b1dd9382a5df8b6f1bbf4d5737fb0892f72c89d2bb48f685f3addfa8884d22893704447342abfb06d908c56c79366449c4811f1b2e4b28c8a881280ac8014cee173e5e1a193a8466874449c78b16
+Entropy.13 = aa38ecbce699f8faf5dfec83cb4600e1b8d29a9e9c592d30
+Nonce.13 = 5bec7298c72cb13588e09df1
+PersonalisationString.13 = 901e57af5a407b722e92f6b556c7081c16debc4bef5dd450
+AdditionalInputA.13 = 762eb4c2d8921b7179850adf76eb3ec74641d04515d7d769
+AdditionalInputB.13 = 48e33c81d4c2a5656efeec15de2d13188e9672dd9c6fe3e0
+Output.13 = 17b4a1aecc813558ee38185bafacc2be4226e19dbe466d5d701250bac74f467cf7291a3300e1e8388e4765cbafdadb682a9c1a1d51b7a411765c1efcd1da8e5c4209800b8acbe05a516808f712bd59650ff057301e29f8c1bbe74dab758296f9d988970f9c3b9141a7b075af28e00a55
+Entropy.14 = de3199d89f2f9e4c36aa70515b4f7f4d86017eb89ffa0ea2
+Nonce.14 = 05b7e7ff0ac5a2a29a2bc724
+PersonalisationString.14 = fb8af910473b1bd7c2927233a835313343e11809f195198c
+AdditionalInputA.14 = 30a66bba0f4d6c249e271de8927b6ba1e99fefbf3386934f
+AdditionalInputB.14 = 1ebe06fd88f8f914ea8f590483994fbf227613e7f49ff18a
+Output.14 = 38b4e2bf6aaf771df03b3bc37a959955dec83f07af4bcd995957a31991c5ee18b5bcb7754f3bf6293665dff2b4769d081d9be6393803e2c62a73ed8ce4adb17b36c1e0deb8ff6106308be9019cd179a92feeb184d93a9348d3b14a70bf13fd74d12cc427496803b7fc041f87c630756c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 5b3f146867c87388fe04fc3d24f35626faf66baf9d8c5d0facb2aaee8bb4e466
+Nonce.0 = 175857ea77de3cf4113001a1aad3dc23
+Output.0 = 5a78701c0446bf9cc04f34719e6b4a269367e250b5747b241c5ac3b70e946b918f4d9f700c9a975eb0b5ab4f72a479c8ff6098e346e9fe4b5926a41982fe1b80bd49961ef154851b49c6abe7454b0b9ee27a32c460768008922daadc9e06553cfdda852dca6565b18f5ea9a98b96dc411b2a949c61b2114dbb657948e4f76b42
+Entropy.1 = 1666a317326650cc54fa44d79fb12f2c92d25571696269091cfc2a29cb6596e3
+Nonce.1 = b78aaf2eca04378633a5ae675e13b040
+Output.1 = d736aa8a0de24e6c52abef711f1e1349db056bf01e483f48a6166b4547c523f33fd006162bdd52f2c62ae1dbe3a2c58b938d72d8a00eda9242d57a155ff8a2d41522c0328731d52a97230af74099c0bff068aca1dcc4d9df7b9995fcba22c0f2b936fa8e70e1a51c79cdbf1bec25b43c56ef65295a58db537f3f370296f11923
+Entropy.2 = 2009dd7821a3585f99a4cd2f457f24229b53d22cc89182246ca5db6e69487c71
+Nonce.2 = 77b1b3f5360d813f180b06a5fac3ff52
+Output.2 = b5f8d9152bc11357f68b84c5fb327988f4342097d3fbb1d93e1a3a2f24cdee67c55eb8dfeeadeb217cd5c2d09a357b95f47823d2684320788a6eb96cb1f8bce99062abbcc85a03fa94b31ff2d69dba146b0e9c5e90c36fcfc0b63e4daff8029d24f0a636434d4a1caf28995a361163c86827d2064652edec5426c1e0980e810b
+Entropy.3 = 8fd8dd091ccef6d09a2cf58c82527e580a12a447f142cd5ea720fda937e28087
+Nonce.3 = e3181e32ee2401be0e3b6b860eafac88
+Output.3 = 754cb5db3d50e40ad74b2b622120b6326d36979aeb8cdaa5f81ae18d2a5e89b8d648a817159181b635fb93baf102eb492dbcf1c3e3dc652971bb5b45025a893bdfaa4c1c25e2dd31de50049ed6ec6d80e047bc459c7686e1a731841d3ae5b605957a26c44956d5549ddbedc9ec5cc7c92b3cf707bec475075d0fe35ba0009f7f
+Entropy.4 = 6db89e68a2655e75d59f95de5fe3d2b74407b4f46884d1e8f137732f054b8119
+Nonce.4 = aed46a379210fec6af9c77410a25e2b6
+Output.4 = 7070edce2f109a33036d2e5728c2a45b459285d2f7eb16e20fbd6fb490a5fd61c61be9ca45ce9fd09a4dae6c053f31591c8e64c494bd35c13c259bfacf36b6db2019def01cc74e7596a57aabf4467ad4998218e0264ced67cfa37c6ec50b131a5cf6b9f676feb95a0647865af7baf4f49a3a4bf7692458025e25805dd19c9933
+Entropy.5 = 435ef8c310049da6e111246eca1bee2227bb8228d71f3d623d23aa0db0ef31da
+Nonce.5 = 2c55bd5ccbf346b71d6e7f4b2756a270
+Output.5 = a439e798d74920d9209072e57bec34ea4fd5fb03510b44e01a499556ce11477aaa4381f66575102282a4a5343216363688e28c0a36613701f3f57a168477a8e556b2a14dadee9b153b035b8ffe589fe4c8d582f7c604e72a786eeb6fb0fb37eeee3175335e652158b15a8fe6cd38a0251b759e6b40c075e37e55bb4c42dcad64
+Entropy.6 = d45d3b017c2e0ce9981b77271012e475eb91a757f5ff4f51405f5cbc26d85032
+Nonce.6 = b4b4a4131af602a8d729a25d0fd5c2b1
+Output.6 = 1a0890ff41f543326a18610c59567e9a6b0754d6af94e2bcb7347e5d1331a7e7c6174d9877d5f54de708b970e2f8e1e3c5d9347f2b374121d263b3a904eaa271bc9bf42ef26821fe10cb6f0de1e7bb552a2632ba84dffa34e5cee1a188f22210bb4f8124beadeadacffb8847211c3040065776935e75281a0d418116be0e3ca0
+Entropy.7 = ad54eda3845c0aac7ad5b4ec279c62bf582172e3fabcdfca15b230598dc486e0
+Nonce.7 = 9d6cd0bf5d3f97f53b5a4eef256aaf04
+Output.7 = 33086e0efc780b22322cba0a43cd0fc8bb97276c2aa510337469cb8ba0a07455208cb7fc586865a67af37784bca6ba032bb470c23cca4752fa3f82cd7ae511452d43e5d389de0a1b599856619670b4720e2b931f528a288b98c56e6b0c7b2cf06299c14d28ac830bd4845a59f5caa5276ce447cdc6bf3068ea017108ea8e8df4
+Entropy.8 = c67e8e52ee82a9b13b1132fbaba7fe6210bb31a003e5a3356a4b28faa5f2e408
+Nonce.8 = b847901b4687575cb72b3275b06f0444
+Output.8 = 51226367fc26700d609d4b01ab33e51c6a882053c38551bff3531f46611c1a7305351ec487b49ecf0dcb642367ab5f51cd760201bcdf72fd38d08f3c645d34aac91714b870d3f0f8ed9ff7be78c820d438df3b846efa538752ddfdea4b2540937397eb5e457c426ea7650b7ed26620acaf3f2691bee931723f21b2d169b9347d
+Entropy.9 = f65e250ed53484c77c364c65c0fc1ec3d9cba8e43bf2625cfd3bc6135615529e
+Nonce.9 = 0de3f7b52f56b0b7b6dd31678b08e02f
+Output.9 = fe9adffe781e198629a7716b22dfe1399422f1115eeb1622e343f5431ae5763811c2b18d3a9cee915ba4436238730867c3a48533ffbce8a9594042b93d94ae2b57bc926709a7a338ec1d2379cc37e88509f8b95a8ea8cb9d99a7f1c1bcb07570f873459a111f3c5b0c02b387fcca1abac0ce5ea6ee4e83dcb2feb601b23c88e4
+Entropy.10 = 91998ca5d4dbd8295b61b40ea79b77b3fbed7b479ec112b9fbec73e9eb1514ae
+Nonce.10 = 6a5fa647a4eecd451aa58d94e5add2c9
+Output.10 = 3f60e74271dad63be38e6193bad496670d0512f3fe55c7de8f7c7f6e2d1be29eeb9b15f3d1fa01c167d6e66f1baf31fb4890aa76d0799fdb6bc0e5793df50c2ad193c2c570692d09fa6cfc8fe0ba0c13481e9f2bd7d2873638179bee35d1a64af60f1d7165ca066d25cab6e96d0a1bdb0baec12617585271b5111e3b1e7c5157
+Entropy.11 = d1f062384b3edf86ad129511339d270d05c17b04c5f71d58508c94df92167a7d
+Nonce.11 = 8165f59c1b683c5204d544c7197c04df
+Output.11 = 5cb24f3720849053bd9c398e76edf3ab6936005f1e4f8d2428c9d05f7b1d45ead572c01502fb2afb8c19cf700125896e6e798c2ca8a2ebc74fdb9cba1f60f2abe83d5037faee4364cce026e310c25fdb16a9cd002281230be4fcf1c9fa1cb3f386834ee3cf19a554825cb332cdfb1eb04d52fcd01d1bce690797dd2ca7016879
+Entropy.12 = ef27ded40795e5cad4412949b351c7164ac4cf814ca72dc0074d366432b3e268
+Nonce.12 = 83392a8b16f873ea57bdc63ea371e315
+Output.12 = fd824e80924215cfadf3028a5ea3a5bfc9f78023aa4ac8ca97f9ab9015148180765b4850f6e62c7242437afb9b34659ebf5f0c1163f36285f9661f3db9044a848dbe850f65c8fdae88bbeb9db3e8c03103b4e927534982e9071f4d34a1e44340287c7c6ad0f94c9a163ad35cc98b218762743587a2b4e89b0f8caeff7869464d
+Entropy.13 = a5c4d5a722594982efc03c0e34807b6480b96518527603394bb2d79810677b48
+Nonce.13 = ba916273e88cc91febf21eb79fc84d98
+Output.13 = 9c06959e1b051a6e69b8605cc9e44d1dc4c63f8767416d14c39c26eb2fbc01ceebf16d163a0106cfe4ffd8e3caa6ad58d04cba95562b7613b9e0a2f8aa0a10e93d6bf9b30bb41c31e4ebbb399504ccc8016623fac5f5908f8ba7339e6c5ca9573ee058429c44f537dd384e3592ad746de441dacd4cfc96cc4169c32cce4627ba
+Entropy.14 = 7f422e735bdf349e4f51787571ffe061ec7e9181fa0b6a342e36611da25c1a15
+Nonce.14 = b09d8dc6997bcb567cfd788d0e06483c
+Output.14 = b83bb6e99b0a5237242711e27779d05d2157402856f9653542f1ce52b1a7463e13d5c92309a06d8a78773ad70504b64ff070c2e6afa4ec3662f2729cb7552235b79c18e08354e334474f238ee74feb7e892d5701543f418cd7f2f5533437d9901dcc54687816f16eb7341b1707c6310a2085dbf387044a78fed850b42fe9d8b4
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = cdd5df69d5f412f28cbc4e7d1a3ec0aa8a9c39099d744356700dee9e12adba1e
+Nonce.0 = 4064a9c86f77daeca18694ef44db43f5
+AdditionalInputA.0 = eaebfc8c4fa7314df29b550b7300e65631320bed97076ed77962f200af98bd3f
+AdditionalInputB.0 = 92e763bbb3e5128ee56d67e211a459251f7d1468a6810bcfb3d2d595387b2b62
+Output.0 = 6ab56be520083baac951a1b8518ccfd5aa01f0297e0260441ce1cb5498f890f01a40150896b91c227787ae8766bed29151411bc3016f1c21a783e2a32f3332495d9172aca0a443bb6e4c11ca18b1e92eb77758996b96a5e68a6d5be355921ba1993fcd2f091d5abbe1c308c5ab60dffbd1166872a905e4d415fa4077fca8cc47
+Entropy.1 = 420b4e3840c9aa8da44f3be292b20b3ee2e6a44b5b12f8db243905c8f19c7cf6
+Nonce.1 = 7800a088d0afcb91e10b1eef922183d0
+AdditionalInputA.1 = 68e8c934abfc3941440336bf90997c28735f652a70a0001fd612d10f3529e5b5
+AdditionalInputB.1 = a7540a0406c7afc0d3ce84a7336ce87051fa49f4de25ac6f705177695969f0a0
+Output.1 = 7a6686db05aa4541e0f36fc08e961a5e93c62c4dc1df3710b566ae42ccb6c24450322cd026c472b63975cd3a6329d1497e3d884cb18fe16139d4f3283d89c2a83ccc98812e2312238f0690d84076857869afc8357c6c23033a0dc1d60c26f47262446a06b31580a3771b7c32e52c7194f7556ad4f4ff4c7233093b680f42957b
+Entropy.2 = 3e17be3541dcdc3f9473d1899833ba62940dd84e47e648644adb7507d446a787
+Nonce.2 = b1c2b257d3544f99631a73471c343005
+AdditionalInputA.2 = 7d1edeec776872da7dd544345eae29fa0ce8cf52eca03629aea1c84f55fab487
+AdditionalInputB.2 = 59bb4800bb72676f8e84d712bc1860702ccb346536b05b5b89102d3124a6f537
+Output.2 = 4397766833f092381ab2fe5dacf3ca30076d5f3c844dd34d01bfb73eeea0a496a1729c40973854f3a4470723020c0440640fb1c0a5c10868f17a135b4fff2db6afb33f986750ddc4656cca012cdf586d426bd346cc0ec18fc85f51f6aed9a35886f10d1c89b3491227284b19d441a2218bb43e006e3d83af811a854662e87d11
+Entropy.3 = fa6985699e72c01498bbac01b8684d38637a3f795254fae1ea4b7cab3d17ca1b
+Nonce.3 = 9bd0d01c809f7074af93bce2e315b19f
+AdditionalInputA.3 = acc2d540c1bbe8bda0af6a90ea836a7c3ab6b04e5147ab529388f6a5af57ef53
+AdditionalInputB.3 = 5744f7e5dbefc2e16092d08fa1b9ef82c5c6d406a4872ee24a3ab1000e462467
+Output.3 = 93223aa9c9be6e2c5e0a09c73acbdf4a68f22022cde3ab96e7915dd7e6c25005278c6c4eaf71c1014fa6342f72fab5c81707a3f49ad3a9fd4fe2f85f26b58610b1cee7e6f743c6282791fdd4a7f59a2bd842ba09a927c4bbce12840ecf8469701eb2e7c9cf4684a47e2c67575f021a3eb2d57730db411890c2bcf2343cd8cfd6
+Entropy.4 = 125956fdb382312fbfc3f976e66c988ad1acd6b13c0ef195431c534cdf22bcef
+Nonce.4 = cb46cbdbb5e12b4fa2a16f644cbc99b0
+AdditionalInputA.4 = 7105324a13b8c87a52d1487fa7ecc13317e0afb180460d875d2a6661fcba7548
+AdditionalInputB.4 = bb53fe3ab0730c2430e319aad8539041104d1b39fee46a22d5969963675d7576
+Output.4 = 50ac90228ce534efc66ca2330454adca3d7ea5673ef0cc96136a8f2af0669789cd40538a302b558336ac9130bb4b79e27361860bd594e3f77b10eb6a64930bc7e64c32e4c420f9282fa5e2e74917f1e48607e68dc2f50ae3dd4c10fe4a9337d08fd0af406021a34edb7c5921c551c3e8f89594570fd3e334ee17bf09b1feb4af
+Entropy.5 = 534fb5574fe56d3bf7dcbaf7976ef7dafff504deae7b16cf911d0b0e32213c94
+Nonce.5 = 954cfec33f6f27fe32dca36dc9b5f0fb
+AdditionalInputA.5 = f23cc21789d2c46a01925120351df1be4fcf66ec3e1cbe77d6d654fe716f0f7b
+AdditionalInputB.5 = d435a7d719f371b31ae3d324c6204780973af62aa5d55c1f12550bcb1b5a00ee
+Output.5 = 221e9629a912807425fa90254b6dd6a8cef88d99208b354a901f12b83a215850ec0bd32c397b916830f6be27b6742a0aede0aabcbb5f9db9173aee50aa8ee67bb244425b1e17b898d7b9ca590eb688ef5ad55e2721585d82a7e6d10dbbc10e705fb9fe4c197537c5df9b2e23b80d6a92bdca8eb420025a068acee570e3816ff8
+Entropy.6 = 4d28890eecd3ac81531345304d12bc855b31a07d4ad97a7f82966e06cb874db5
+Nonce.6 = 9b979ca831b46525ef93c4e1a6a708a9
+AdditionalInputA.6 = 7bd52e99e04bb84f5f12e485cb2c97bd9579b6992db5b2f02ad1cee9e2a92a9f
+AdditionalInputB.6 = b951964ec98a6670c3d36b543d315d105316b07a41992e5f0f3a691d7411b4d9
+Output.6 = 5db71cc12144d7391c2cf48d7733c5275464ecb816019421670857c36e67e730cd30ccd2300e91d7b990e5938a5b88b85f5661ba4edb1dabc649fd824955ad6b769fd348af17a895ed939e0a2ec3205be750f2b42a10673da8ad6876bcb1e5f101729fabbc466d0f61cf95091ff393f5c1addda85afb5b66e3015159678420a4
+Entropy.7 = 678173f88789f8aab64b71604f4edb8aa5bdaad2cbf0b0094f5f5f81342ccdaf
+Nonce.7 = 4c606b18c3a90c3cc15bec4bbde5ddd4
+AdditionalInputA.7 = 4aac1d656515d83c45f57707369f8b33ba47399d2d745cad03a2c925d52fb5b1
+AdditionalInputB.7 = 6fc9c468f35eb39e7f6314d5663138298d8103cfc67e05583ab4c292d89a6624
+Output.7 = c88c745077c15be4956fa8a38f94ec3e75d6db25604e616a16450d26cfcc3725753e6dfb76cfd3bc3f18bf167b9c759042f865e7199dc55de718ea4214f905b986f6c5d94578a73129d6294ff16cf8712ebbbf542dec8ad576fe1d99e178799ba526e4370addd6e61834f6420eb388aa51a8ce7d26a9d9928438c63126e4a5f9
+Entropy.8 = c573b11969fa465d2d24cfc9fa4087bda26798a4bcc5698faa0d6ae4ff825318
+Nonce.8 = 1072ef05fd6e85ea3b4433ff851cc07a
+AdditionalInputA.8 = f2b714a5128ed5a88a7370997e8c3a1bf9fc086caf3041e70260cef63d06ba00
+AdditionalInputB.8 = cde0ab24c12243b16a32edefdaee64802da80386fe81e3c5653c8c1a70126c17
+Output.8 = 5b063e18ff7eeace619276e0539621c27735f42502688e7aee7e5c254853418dc8d3e0855bcb16a82da11ad892612f7173fb4db5a60f4e48fc2a65662d88db286f6a6f7a5a6bc4578b2ff80c94dde50a6ada3c8be5ed673d08ef7f487609106ca9282f84ac74cade5dc08acbcea4af359863ab91e99111ced1713509e58dea5d
+Entropy.9 = f072c8f4adef37014e166e7a1481592de73e952024c294a5c510080a6373eebe
+Nonce.9 = 47cfbabc54020dcb03417ac8d313a6e1
+AdditionalInputA.9 = 1cc8c1bfc5a0618a3516ceb26fa1bac6e4ab6db12b6451654a4673ddabf71722
+AdditionalInputB.9 = 91bd9a16d29c6cbbd027c62ffadc3377c7426ed922941bf5c1bf06e941eff07b
+Output.9 = cce875a271f87affbac57e84840987f16dbc64a2f72d0ab225a2837b67919e38bd2bc76548eb9e21f2d198dd0b44e6e05de6988f0a4f11193e775843bf7ecc7c0099bb979d2309a799cf06e156cc595857dc2d8e94d63255ce9323b6b5988f944efa937856f9798af2ec76e457d21032b2b825a7199013c78e0d2f148e4d4105
+Entropy.10 = 60a435ca6a63ac5c19443588578457df40a2620d881cd9118469536bb5ab5786
+Nonce.10 = 3835197d7a0bf98621bc8ff399401ec7
+AdditionalInputA.10 = 14c3dc23d0ed19ef6824b0a4b19c4951c6d80fb63ee17b9e37bd4a9f74855799
+AdditionalInputB.10 = 14f9ec3c8cf1b87a67a981e1fd2e6850062b66a094fb5627a86967ad159d2f79
+Output.10 = 6c1ff1a5837f5a7a0b4b17afc39952978d5b9fae7a96ed8e65a822d97c6cfa210e0b1d939d414419d45f793d730b73133f7bf0f54a8b2a8c5948d824e8e615dcd20dce9e0885e88a3fb7db8857de3329e34561f8322ded509f208ec89bb84e310841989ee4ebd14ddc15730943e3fdbca64541d72a6a0d26f5b5387ee978fc2f
+Entropy.11 = a96f559ccf84eeb41639099677386e37f8edcb2226c1465f38d0b15c8d6ddcad
+Nonce.11 = c784b7265a929ecc5ed547c6b3f49008
+AdditionalInputA.11 = 42134092e5a8f730a07a19a93c7efbb30cb4fae17106a901cf4889707af9a73c
+AdditionalInputB.11 = 9544399f7b1930937b5ed1cf8f68b30325e5e73f5b2ae8d5eee0e9fb6c31fcc7
+Output.11 = c297efb2493e579e99be468f0297c30cd0186fc520d55bce91afea048c02a4ee6e3c218973b667e62442b751d420068977ecb589b38d62eebb4070b44168c04377a893a15e5ecd806507aa1c19daa660ef074819b06672b043eec1042cf4772f72eec571c6c070e49ed707c109f44514d5c271066553924a2a65f76210d7a279
+Entropy.12 = afa5ee609af43feb4c49118390383260c243c8574d5dd978b8eaa95dabb1d21e
+Nonce.12 = 019075775281a2596a614015eba184cb
+AdditionalInputA.12 = fb10c2d99db2ad8ce6ae61eea83c4190022151ad5890ba6f7ffd4e31ce989793
+AdditionalInputB.12 = 5de0f779e7d0319900c332a2d4e2e5aefbf6f14097eb55ed608463c77949d8c9
+Output.12 = d7e33c9ac2601db4bde7c5e8db6a41eb26e1a4e59f60448935b61c65b1056fe688d98aa536b24656de502b45aed6f75ec06188b27f69550f0074b1c0d1a216c1d18f37042c15d6ad180619fb16df4ec966fa9fa3202b63dbf698efb4626c3655485042243bc57fbf3056490f11ba46c5dd39d955f2785958ae28daf14c118eb2
+Entropy.13 = 5c3b6563d2adf828855bd5da8f4983745db97caf19262e7ee50fd083a2dfe690
+Nonce.13 = b7706f07d7099ca8c176651703be37f3
+AdditionalInputA.13 = 742a2a8c1ee7c14abff6fe3d28f8968da4f956b4ff8ce6b807569471ed9a48bd
+AdditionalInputB.13 = cdfdb9aad81b820e624274f5ac6e28d083e0931de30051dcea15bb7c2f38cc76
+Output.13 = bfe0a0919b64b441e37c9a3c91d220cf96eb5cd5692a8c30a6d3f410bad48548ed4c61ecbc573628079aad0771141eff77afb1d7a10ce170e8671f13d566f1322915173bdb5a5146766f9fb81a413df5c8b0965b0acaf5ec4a5b43c52f44cf63e18e62240090d71ae82c73e39b553c634acace2681360cff4cb55600c995b513
+Entropy.14 = 80edab0dc029c29644224a1946f6b30b55433217ba3c44777ed848fa4ac66464
+Nonce.14 = e609fdcf259690c12694a18308e752ad
+AdditionalInputA.14 = 5722b092a5a0195f14b5f236885538cc7a514e997876c06f634926c695561cb5
+AdditionalInputB.14 = 6e4f341a0524dd1085aad0b6c956057893f737704ca2fd8eaae6231e9691688f
+Output.14 = a757af53227bd8555853ee2e643256074be9904d2fabb0ca86a645b0ed1905731cfbfdb7eefc83938fb576d7e5da8135300f8e934dca521637ed10e5e791e18e82c48085f511476452237ceb930e0307e228886d36aeb83d8e25ba23b38dce6dbc335de90b63db4021d6ebba5dfb6d8044a2bb7bb20aca679cde16406c8c4746
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = dd8dfec2a638c28cc592fe8251d3194fbb6e61aa616ea5e97d0f7fbdcb86373c
+Nonce.0 = b1374a4e92d9727022a751b8bcc161c9
+PersonalisationString.0 = e08910e9bdcf94a44129e70ac8d51bae004460be9209fbc4fea6e58677c0ba0c
+Output.0 = 6042b14ef02ce94944d88222ab63fe31cc33f9d263507897b0c62290b0927618735364adb6c79384a40b5856f3cc97d7612ba3775844c64339922bf56e66a29666f1c2b2fb190605e90eb758c07628364ca08a11277b8d21476526201af6270ada6434ac9979b5f824387ff370c7e4b3357b589bfb4a85b4beeb005f933650dc
+Entropy.1 = fc411e7845d97150d2c95a0175f5ddf669c8b500f07026082c0c59d2da32d7f3
+Nonce.1 = a2093fbef410c3e32afce740e4e60200
+PersonalisationString.1 = 51aa4bb8db57866fa3949d57425803be4944f6bbcbf99cd1b56bde050581fa3d
+Output.1 = 3952ae32d30304db6e71536da7bdfee6ee3819b7a15a39b328f8f70b119d11e6254e8f06634e0267c994685eb978dae49994f51fa93ebe6742e2f17086afd7288230bbc2b96f34a6355d0795403e0e7dab5e7f96c76717ec11f08b1aa8aad01dd92d44263099df863d56b7500e1d9fb367a37e16c89abf312825cf1d5ba7f4f6
+Entropy.2 = 3b03c7f8e50df0114104dcebbd170461d71037f804b544912b2db16783341ba2
+Nonce.2 = 63058a60cc2440b8e2103b955a3ce7fa
+PersonalisationString.2 = 37e673c5f2fcb73eab99bdbe85c5428fa5f2b048120442036e98b0523791eb8c
+Output.2 = df3d636415279b81b915833ec2479a7cd32b8780219a56dfe4735d760125235b366484f4b576b8cfbefcc69882585b393d21f8f743e3aee8d879aef8ea4bcc0005d29c0a69f9c00cf7cc25c688de98e24bf11447847fc42ad16c94f58856cb1419a91a1c79e6cc2a36121b1a38f099d6dcf9af1fa63de6e3b0021d9613694a22
+Entropy.3 = 62889775bfb695f3382f0c3065936f2ca0c8e3f36d3dabbc3fd42e840341d43a
+Nonce.3 = 6e9417a995f808b88ec3f993e5357c4a
+PersonalisationString.3 = a9e295ad98021c6535a4cb357a54f8f5a117bd2737d4ea9853de82777966c9e4
+Output.3 = 258c5c20c10f4439f89fbc0aeece81f821613f24237c6b6d0ea8bfac3203b9c2b8f63f7254a86b567030db17c315eaa0de97cbb24718fda33e0b919b24b2982ff796bc4018b71621c53feddf939020309cd58f7cbc345faa234274dafc21e65aac143455a56e4a617ec1d8a33a726178c06911d5dc07a646267ee4b8d561b15d
+Entropy.4 = ec7661dec7df316fb840fc76ac8d71903f6310759eadf95f7b9cdb0ecba20421
+Nonce.4 = fb6b67d61c6b28360eb88e6f5c9350e8
+PersonalisationString.4 = e6488489e7fac11d46ec82fbaedc5eb7afa5152e0b8a829a04b89e27bac1c51a
+Output.4 = 7b90a1cb3d214f54e91c2fa61a69ac9ecc6e43041dd7f2d0d47e763992a06719390aac0e6ce209b7f5a17c5f171409a66500c623849e3d957263e38fbdd89f01cd457b461390bd9ab1f9df5f704e6ad851cd83fbb3a151a8fb8013a6f2e096a6268f466390aa65ee58a68391f756b9825b84c2cb624bb1c7b2c39f775e2238e8
+Entropy.5 = f901f337e25bf8e1bae97af692a73401faa390ba957b5bc5133292a87882adb9
+Nonce.5 = 2d9afe970688acf45e291bd510c93836
+PersonalisationString.5 = 18660d66f4f07931896b7fe198fa87ec82b25506b400da4ab318625eacf71518
+Output.5 = 928ee49e1e18b378e9fee6f4f16bf5eef588025169802dfee70227c7e57ae7ba8d59353fb0e1e51676e40921487baa3b840b5f98dd162e64d929b8d81417ffd449e3355db1d35acb082a537455bd0092dbfd885b093922986291cb265acbcbaaa41f8b4f98ac671ebfdfa27c38c41e4c8787484b8ff99c78e4f97525c3f0d785
+Entropy.6 = c24f0a26f18e7b826c81d50827a31ab7c7212355cb55aca952023fccca8a7898
+Nonce.6 = fc3ed4a7151f9e12dcc63d4a73bf37a7
+PersonalisationString.6 = a0b65d0f1c232c1a389d7d0d483d9c2627b70f4494d26b7bd87bfdaed5664cbf
+Output.6 = 4c3af91cfcdf0fdcf7c634827be028d8645ae10ad640f9007ab0a890a8ec8b1749ca963d1f2fe50c982e20d409d0c7c64beec606c5b3529a8765a6d3340681554176e9445e9d4a65d2317c5db8584bcf5d2221422282f2b1ae3d9476d0dbb5bbd90d6e8b16ca0d47d8599bac225f67ba2832745fc0e1678b2d7074089fabe9bc
+Entropy.7 = e6c70f5c233a609c41f940b17133e1544803a5c429b2bbb5917d9d31af83caca
+Nonce.7 = 7a0bc455e12edfeb33e49d1d011f51c5
+PersonalisationString.7 = 1cd40e196df5b314cb554a95cdc58e9f1be896c7e61f51f1e1f38bfde47c0309
+Output.7 = 877f3d2b98d694a0d0307eae5ca3ae4690ea725a748bf53f26b16b637d24f2113a51cb531046f92a487d880f9a2ad92f66a1e8cea4aba46c18878b03fac98d07e367f10f7ca0ed9c44eb50111c9b18c43e00214fc90a2d7cc0e5865b7d8826974dbd1648086cff3b38ee948f3790b64f066d883061551f9f6745bfccaecb6783
+Entropy.8 = 62cc5d526f4309f879ec33204f26b94354a83b555ee21e4136f02c09d3af9432
+Nonce.8 = 22fe210e3b06e853b5f00a6b27b8c869
+PersonalisationString.8 = 61d3e3f488b6d4a97cdb4833b97e5a1dc3556e9898248ab83af7b7addd2efcf8
+Output.8 = a77671353d8f4c9326d4cfe1b7fe4ff9e3921be4aaf58335137d3ef136750a3a963069f2e816f4b46fb40414a63dee8fef0aad87ea5bee17a48fee71e262606bfdef3a5991c7e1b3f1515aea637935c2fccace54360c943d96bc46910405a94df6d16e78f77bd7fd4c9cbef9f051908c601ddcd35a6b768dbde202727d03487a
+Entropy.9 = 4f7d29aec8ba6438d89c9830999deb28215680f7abf29e7e84a8bb6a9f4415ad
+Nonce.9 = 4571e9f72258e7de7801cd80122d093a
+PersonalisationString.9 = 86e3bce95d32dbc308ac1d0a1a233868da91ee2ae436573462a2f603bef82b6f
+Output.9 = 1c7bdb5e2f91e38bc7ec08ccb600ab630af47a81dc1b9a25dcbc4921d48c844c9fe4f7f1d097b4bf63ba6bf54179d12ea384ceaf86b58957ae833c2d9c715d50eb9ccc41408319dc0d25db24b4fbf5fb906282d6f75d15ab37d27101cd62da4b670260ff2d421359af9c53437587f5e12a800208b91b61bded901c4772f8a731
+Entropy.10 = 7569982669b99fbcb79d23381bdab6399820a204dffc405463f9b769493a50f7
+Nonce.10 = aeddade62e85511b545953897a945c89
+PersonalisationString.10 = ff2003fbae431c470937fb68007fb36247f40f23a8c5623aef69e8c094fd64ab
+Output.10 = 019fcaf920f3ce2e2bf7c3247650cb8555aaaf8f0a0033758409cc9dde00458cbe2bfc118285d86664ad665a9ae8c6437d1a085b820e5bcf2461b7715415a463f7472348679f84f6c9afcdf93d65394db23513c3efe3c45783d7c153039e9584a3f9b63c323df37d73d781516b0d68e2fb01a80e477ffed6e5c14ef772db6ca9
+Entropy.11 = d287d43e20034609aca0083e55332f0dff6d6877e646cffa3c8248f22478af70
+Nonce.11 = 90b2c63497deb7698e84f71d149e8b39
+PersonalisationString.11 = dd537701d7d89bd7f8ff3f1b76a84b15c706eb12601798f9badf64fb52fcaa42
+Output.11 = 0641cf15cd88530f05b902fef84b4be142ad686905002a21cf74ebd5626d564c5786a835e01a669c819d63fd15bdaa97d55523bd431d23dade44029d6d1e6c374c62ea408a674f877d8eb638b6f270af0b9ead6806cc19f9b10261b0b7500eceaac56869e2b2a9447b65f75c7228720c1530fff4150aa7b82787880a183d86a3
+Entropy.12 = 698831f2aba2be5b651bb40850a2f9d1aed8ed8ed180f71012a52643d38cc04c
+Nonce.12 = 4bd3beaddf6280ef1009109868afe8ff
+PersonalisationString.12 = 56e05ef424777b7bfb75e755e70fef1186d4103872aa5cdf35af81ba4b00a2cb
+Output.12 = 2684818725306a95c04b38e0dae52ee97b3c3c85b61053c9aaa59d656b64af1d8ebbc47787c17024c54b6f90232a9010191ec63092b85ea57c1f62ca48500e4099ad3c8b80e01951bd14445c5b37623d44ed8c64db9ff3bcde5d8ca0abe0baf3717fba2bcde261866fe149a2653a4e230a449df539e0d79f6ff8fd4b99f8b3a2
+Entropy.13 = a95fe69ea1e020ee75d4cdc9a29a8ecd7c543a7dc8bf3ec27586e45f4e5ee2a4
+Nonce.13 = fb1af7987f30edd626ba0cf8e55ad96d
+PersonalisationString.13 = 9e448d98496494a4b510adf2dadd5f66b3d4a5d8d81fb5c8bbd7244838c4d882
+Output.13 = 6374dc751a4655d9d6990729d70d25ce147c01556fc3f827c63783a517a0c6b033af4c1325bfd49e98a38b6cb6bebc139664508b91d2775f4ba03de149b84f8eb6b7dffd8db38af1dc8b38e0aa5ae36b791d365b08faafb9906d2755e279a6e1ab912d4628cb79e34847cd9368abcb5b390017bbf3594959bcb04fa8c5a5c449
+Entropy.14 = b2fb9d9bc5ce30966b7f2e6a6458e2f2f6e72ce857fba052b5327ede9ec2492e
+Nonce.14 = 06b7b75d18365f4957489a09204b2672
+PersonalisationString.14 = 9e32f001033eba3bede220d4f351ce110e6ee2eb0b099ce54f9606a21d80b1ea
+Output.14 = 508333114a0abd5fe10327daa0f1342c66569d912a64d8ae89227d0d8ed5b4052cf84f0c38927d88dc0d7c476e747965adc9579a4603a36566a1730f55ed7b100c1695f060674484781682ee629167f7adce89885ff04d722d960d0297d2abf79bd3338126c2d356a91bfa588f80db7ea365bf181fa5370c478a04d05a515b78
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 21e70d349eab293c4f5837c3df990834507b951a8d4666570e8c7985483c391f
+Nonce.0 = 37ed12bd119a1266d5783e1c7668f787
+PersonalisationString.0 = 178e4aecd4411836d2d941af0995d91f540d10204f21372ad92c5b33e0302f0b
+AdditionalInputA.0 = 6e675921863c9c468cddf377318e2a5449eebf8b23e5ff18f1c7c1c72f4c1965
+AdditionalInputB.0 = 122f0a17b7bde2e486f7c0f0d1d8e323bd7f2bc3e73d8213950f66e3d4e4c4be
+Output.0 = 30446c874ffa0c9c031ebec131cc3927720f5eeb2d89c24a71010b93645cdb820599e91cf29bbaf7253b1f53304c28e7eaf44198ea135029455aa7fef794a275421c2f8be689af46d924e88faced5299b1e861e9c69340de5bd88d1ed912c9c54909c4d0d1bbbdf7a43d02a35ff8527042efc9102539ed3b669121bd35a0f014
+Entropy.1 = 0fb1e82a4c9f953c2f26eb6f600c99d9a1b956d0b5021b14e69e8e09efa3d840
+Nonce.1 = 00c82eec973b490ed979fca6a21b3031
+PersonalisationString.1 = f90298e146832be9348aeb59d88b01f62d630d98c765633709a30c3276ce007b
+AdditionalInputA.1 = 866454c880dd51941098145415b2785499635957c37c5f8cfa1551f7bd44e2d8
+AdditionalInputB.1 = 0543094170cd63bf310a2083431caa4417f3d030da7b3532a1cad77fc6aca607
+Output.1 = 6426ebe77e5cc2e333d0ce30131ed6a60434a48b5d744b95382d6bcbb98e6f302dca76a9390c3c42afa161a1a330e867083ef57d2d1080a2519b1255f7c26e7c81463aca5fc83a8dd735affcaf7a1d2b4734963816be8d615af5e0165b13e11fa32cef4e8b7d0586222c385a900af6629bce543df050074f504b82766e0bab98
+Entropy.2 = e0cac24c72c06af1c5c07a106f81bd63cc46cdad7b07d2c8f7c0407d1e9f3b1d
+Nonce.2 = 2aac0d3e39b0df6f858b041e2386c116
+PersonalisationString.2 = 1735a2c0ab36b5d3e969edf3c81cdbfd81d1088cfa53dadeb5f7ad04e794da6c
+AdditionalInputA.2 = 66990006cc70c774f007a4009fcf3ef9c9d06924683ca4d895c5015a82d90bcb
+AdditionalInputB.2 = 81c8933bf1c4fb192cc479c7442924c602887865abd46529f00d906042efecc1
+Output.2 = b159874ac478611e84728083e8cefc211965068a2e4a57d93925d0927d823cfb5d22976a568d0ea1a699c8a2366f38a1a6990b263915be9a696a25c18c30abee89f2a3a4b98ce19240216407daa9d04de8528c554b6a21cbfd23295b003ed83f38cd14e52ba940aa0fec38cdc07c926f134a0dc7369e068a330755f476081bfb
+Entropy.3 = 7a2e2a12896cdfe58236fd8f4e6ac8e52f552b2255dbec6931df16ea2fbc1e1e
+Nonce.3 = 227c5f96a0191ba78d55e5a92102628e
+PersonalisationString.3 = cec7c7874f5a0815de0d02bac92cd3ac595577118cdd1d4fd43f4ec1f2d625f2
+AdditionalInputA.3 = 4f1c7c2fd1bedb81fd97f315fb99d19f35f139662c05d1debe47bf5960b3e9ec
+AdditionalInputB.3 = 6ab618c0a04b6da78c860c8e42d51adb78a20d9d9bc390020d189aba415745cc
+Output.3 = 4e85d1f49d23f02aeada1656de99582a372fa2fa71c90894a42405785cb65e7d0cf4f872ac98fd9a05ec31b929c0b098e8475cc44a3faf4ea16b9fadac93200a70067fb4ed6af8b9951af7422dd6c2b3ab6829bfdf516bfa442f21ad7f4b96143e7efaa6a9027c8c7d32cecca533c71ad57d625af2895274800442fa4b985998
+Entropy.4 = 47ccd8b9be0a5d2db97921545f536acae8f8e646198612edf584d29d9d467aa5
+Nonce.4 = 8f485ffb01bd7d455a5bacb182a686e6
+PersonalisationString.4 = 340381209f56a1e2708142ad9d0939e6fb3ddcff5948e51cd6095b1a06496880
+AdditionalInputA.4 = d24f1ad05d467e234c6908013281d461aa7d296e52032d7af820ce4cc3c522ce
+AdditionalInputB.4 = 354f2df559f31ccfa9a60944211a16da1f29c4c8ac1cf3cd1f884c4e093592ab
+Output.4 = 2c8f02ade6828a06885e10b762fa97e37acc6dbdf4ceed62054c149720b4e8af58484d0d03c7cd4ae9ee4d63bcd3081b22ba2f82bf0034f668270ad7f9547a0c9bd5a69241e544e2069404753302126259b434ea0be978c8f70ad0fda433714ce36e88a8ab8d846efba8343dee0107201a5979e02c5267cf2604d7903e6eb532
+Entropy.5 = 965f827dc87464c7681e78415c81344e002d0f66318eaa17126b405b721c410c
+Nonce.5 = d48ce77cfddad68839a83f21bc2487a9
+PersonalisationString.5 = 74db35db42f918e051baef36d48c096aaaea63e523c97f32a459302b849b319a
+AdditionalInputA.5 = 4c4d3f5616aca374d0a603b47a7876a8fc5bd31b62a9e6534589fb37cccdebb2
+AdditionalInputB.5 = 73f733636b59474a7e5b8526db858eec2647d05f7cd308772586dfe12fc2a8f0
+Output.5 = bf29080e61c4d1bb4e7a5a6ebd2685d8214aae9d2def9c748412fc4b49b2db87a37d60a4f91325549c467fff8cfcba8d3c5202bcf20610f122665752814e8dd23df94764cf9778bd04783fbcc6cbe433b18487798523c9a3099b5784e44df6dfa93c3e2e574a07a1e7e6d16e3269d11f05dcac0c3dadf0648267fe730f3ee240
+Entropy.6 = b9886db437517974e34149d3fe0ef179e299bd9b8e2b57f1463d13897167901b
+Nonce.6 = 2ac4e56253345e730d659f468db14867
+PersonalisationString.6 = d3b8d816928ea9e7004732f9b426966708b609585d6138f0150a15441f86a843
+AdditionalInputA.6 = 8bef1b152f475b19b369526b15092739cf54ca5eaf59e5764b8500f3fb8f5e63
+AdditionalInputB.6 = 58758fc6d0dba7ea0da672fda5e909676530f36e8eaebd186203ab7a06ca7677
+Output.6 = 493439e0f97a0e1355cbee8ef8417f075138ffb767c8365544466d1f3f1b73e46139c40cb429938c5c10bcfb1d9d1e22a1027c0a13ebeddfd94a915dca3b1c01359e2c594e871142c69c1f3098f6de3af708d70aa9f0b9cbafce681b75e3bf89c0cb002dd78e875577533e664917c0a66fd10cf3ced138f4c05bd006dca29332
+Entropy.7 = c88b4f71c071070b713a02c00a5d956944f8a0287e9a8627ebe83fcfc0cae385
+Nonce.7 = 7e1cb1b5affccd189f0b51a8349948ce
+PersonalisationString.7 = 6220968b9f1c8f46ace5340e0a65824f2a37e390de0391a1aa8e2d2a088e830d
+AdditionalInputA.7 = f86287188cb5f27ec93565c1563f16b91fd4debb0ca9d76bd182b84785b04d4b
+AdditionalInputB.7 = bdd8d60c1d131eb80fc6fdb073b74e3c6451cd13d269e8d018d839f217374111
+Output.7 = 2e45dcd97eace6f9b8521d69e0f5245c10bcdc2fa704b61fbf3edf59d8e6e125c2ea88379a427c1989c613aa99c8afca97163fd9c1fff4f2e057f0a4d8145704c443a71891a3df553035d4666e300e0b23c4760a21d00f2768028e911bc74d458be01583cffa717c464d923b825cde946cf2dbc0cd4fa8f17337ed62464ef6bb
+Entropy.8 = feab9d566600071522029d5825b4f5bbb5b4ff82ced29343e17211dfdea3ac90
+Nonce.8 = bde8439416737a512a56a6a9c3c9a18a
+PersonalisationString.8 = b89491fc253b8b9e89bdf1c15df07b41917c0793870efa38d3491182198c5693
+AdditionalInputA.8 = 2531e32a55332495a00ee3d5c70b28ee80fc7a49e815aa63eb85082da53ce13b
+AdditionalInputB.8 = d45c8b77dee4e17c601d7459ff51a032511ea8a4c880245acccd303b39d4ac43
+Output.8 = 2a683203a7995a8d4d97ba8c01262d8b5c6a05a4a1c28a1940d0b9b89f91786bbef465d8e3ee521b54c2deb6bdda562486fa254a2f7ac4871672b7f3758589c8077470ae009d56cfb6c695073b60013461ec9ca30ae7177496f718e7b99f762b54c009ea65a2597739eda7b0dd9d43dc4a42602d1edee9ec5d1f383721cdf3e3
+Entropy.9 = ee28b9e92d4da3c2e1d3f7466b454153d803bf584561051b2f09a0230f353a34
+Nonce.9 = 2507e58a3f71d86585c2a678252a408a
+PersonalisationString.9 = 57bfbad36e612da95d30a6c2b47252b1559628316b57d7b56781bf07ce47115e
+AdditionalInputA.9 = bc061d8c3aa86d7a057b4e1e226fb5e21729e25a38188d901894a28879df8d87
+AdditionalInputB.9 = 838a571944a02fa04a8de7caab95551badc0385341416595547a42a543b56dd4
+Output.9 = 8886f1b2573e0375ec179c34e34605ebebf65cdfd7df53d3f6416cc79c6f23e301eadf38ba86d04ac79b4b4aacc40e969c19327de64dbafdb647168f46315c1bd93c2336d83b5de4177cb5af7a13e20d11f303de0d3d4d465e8d6c6103ec82fbdef4f91bd9dfca64357a8fcf7ebe0a0438f1e54f42c7dcf3724ae18ce439dcc1
+Entropy.10 = eaac356e801381f5041878ecd99601ac66ce8e6c3ffa638871747085604ee8e5
+Nonce.10 = 053ce81f05b620400c35961a99ba6f68
+PersonalisationString.10 = fdd69f7242ca1c5c3a59dab35c0831a16a0fcac992222f551a32dc9df9f7bf7d
+AdditionalInputA.10 = 1004170066dc9155dd5c8775aaf04983d7be3318f5949e89616aaa5a9280e958
+AdditionalInputB.10 = 096ac15cb4557b65f0642a75894093f9399713557cd0e04a0832f02bd36d0aa6
+Output.10 = 277bdb77a8bd521cd41bade38e2848e35f1e4b759ce53f0de21d40bb0cbbcc1e21bfa9c313e08409d75f2f277acf329db9d435ed4edfe10924cd84eae0e17734636774813410854ab5afb32391798b6d2446ddec49909db0ee9faa73f6d57abb2ae413bb9d06aa7ea85e09ee6279a37b43adaff7eec652efa46043b5ea170577
+Entropy.11 = fd03f4ccd45c4196df8c10b85d92491ddc8286335c88fd253a5b1912a99b2de0
+Nonce.11 = fd43645d02457b9a204dbdb1c80b1fb1
+PersonalisationString.11 = 27ab2a336c18a8e6810347971d2cddfb232e2563d74e44940d7a92919c0e6c2e
+AdditionalInputA.11 = 272075e5e26af83dfb231a81f6b5d6653a30996c431ead11fd6e217d7d19dab5
+AdditionalInputB.11 = 47aa672e7aa4458cc8342fe65acbe2ac8c96814ba9afd2d4d5d6d8487c8a31f2
+Output.11 = 421e4192d63734b3edc52396a25352ac41a38475239c1c794488d2e23110ba9ee29bdd53a05f468f589e745a6efde8c7ce7509369466719c8224041dbb7114bc37c253b1a6ece7a8203fb36cf00ed1c3f227f2ba731be4b3e719446b9ac36e664e67f9e9ffd062113db2879bacea8ae4919f90d07537c08b56b252f01be5d33e
+Entropy.12 = 171b7d45ab1ddc76a664ce27f3f4f5c0b2782926b46988726abef58af747bcf6
+Nonce.12 = ed92cc3cf7aafbf15adf499501f7c8c6
+PersonalisationString.12 = 4a68cf528334c749af399d8bb6859f4ea84b8ae32930050efe62fa57f3347222
+AdditionalInputA.12 = 4832054d792e83f5bc5082c333c719a3617bcd839440ca37b644ad0196900c9f
+AdditionalInputB.12 = c841367e7f365d34f88e942bd3c6f1b04387371dcb43d6aa241979a47e82c9bc
+Output.12 = 45f23431901db78d4890edab29b9e51081002415202464a980b7407c5e1fde5162f4783d9d569a8305e090f1cfda0a2562218bfea6bd6b88ea4fb6feb431e1c84206236bea5654194ca200e94fe886b1ba7b2e21669a9bdfe14d4a8a8b63c45088b732cbbfe9967f438a203cd80a4c9ef89f81eab62785645c1d5bd699bfa046
+Entropy.13 = 3bae035cc07b748aac575152d582a7426030a7ad0d3b74872194a63f00f26bd2
+Nonce.13 = 448ad56777291787a748776a4a0d8acb
+PersonalisationString.13 = 866f3ebfd29c21f080d7b88ba056c6ebaf8c083cb7f36c6955086fde2d59f339
+AdditionalInputA.13 = 8f9fcb0ef8d946c6f8e1dd8cf5cd290056b94d10507c7da05599e239a0fcbe64
+AdditionalInputB.13 = f34d066514618f16078d1897a5351677c2f3a9677cacffd2b4c9f7a86670dc25
+Output.13 = e8e7166838be4044eb869d7bd2c930e769563485b7a07382fcd7eb82c2a6ee4e8e9299b30f0d5dc70609dfa5082052923e617f4cd7423a5d493f949169699bb61e3245e655dac57606e576bc8eeae8b862ed439dca049debd8fcc18a35ea51e38bfc33a4199fc5284318c6ea1ddea6cb3d4cfe5fc62a64797dfae81c99cbcf3a
+Entropy.14 = 05979da0ae57f443db522ab2ecc62e3fe6817dfe4f970f2920a4708eea57f9ca
+Nonce.14 = 421f0f2b040c0d8a53933213abc5e4e5
+PersonalisationString.14 = fd6727cf1ab563ca9ff87470b545d4c18d9e99460ea2d00ff8bf32e1c27ccc85
+AdditionalInputA.14 = 5b2d2bf0653e3c075c469de5e2a093193e700abff9792a9f3bc0d143fb00c962
+AdditionalInputB.14 = 976c765df6b57f0eed8661587045826c329f4f1994020de30fdd835912f72fe0
+Output.14 = d8275a104f1dad7412637d12fabf9dd1b06592850cd48a3f38304789911efe8f08970b8f90fa021b04039cd3d1ca573c1586e7ef586f4c623dfc559efc0f2c89e4136b59f0f5706a74679d1c95886a5ad05b9a850043cdb19d806d617b2f640f715351cff6920c47f96a42b872a512a7b2e99e4d0c2230861b16f3b38deb9b58
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 58d74d3439883b3706641fd77df6585d9189642bf35fde681415b88dbe739c97
+Nonce.0 = 24be10c3e7e66e3ef092293c573791ce
+Output.0 = 6ffd1d09fedbbef493a0148c027e21f5c849ebf4aa22cc3ef5def034db12d02087f2320eaa9d4846ba2a1a2700127de263c773eea7d7f28c80e56fe9a17e1170993f96be21dfe0d899bbe537982a890a3fc6fc504026f396635f85f7c7288959f52b8bc1733797e6f20f04fa390939f8396ced1cbbd98330068002b9ae76528f
+Entropy.1 = aecef1ca16cec592aa6ad0857b8632ce3ea58c1b7683fcbead4c200e9b8d86a3
+Nonce.1 = f3c40f46569c1640dafd7ce04980e25f
+Output.1 = 35ddb613ee1df8604d3c57fe63415312d735e39b822f32dcda3f5b36f48b28eb1dc4340c102a10f3eaa3c7d5d80c4ff017e9be4b7bd364146352db99f4e2c8c230211923d57ac97f37a16360fe41b853a94c272dc714188136661dd4f94681da70873c4279838756ab0eadac03048168c89934573281b209df3bf113fca13551
+Entropy.2 = ea2c4de790dc599bf6b0004f38cebf029d5bb309d270dee4cd17c5f63f2c1f58
+Nonce.2 = d25a01c86bc41b09a96db5e26e6e7268
+Output.2 = a39cf0b6a58827112425a2a3173e7217fe5c12b91405b695e1869a8cc7b03b446085845223e4fb759a06f4fc06af9a256135ae0b2e2fdb7c960cfe98e245d045780775c7b572f3708409e0e54af3af6eddc9a6d526be10395bfb7828f4a83c3ae9ee1fd39af9a1344b24139ca76b7f797aa26806909786d805dbeccfc58ab4e4
+Entropy.3 = 56847911794d3e0aae716c3fea9bb7934c20a74cc6c49185e4b8211a6f9baf97
+Nonce.3 = bb80288fc7310d0bc949d9e9577cf5bb
+Output.3 = ed025df4673fe9abc7b71cdeb3562331bee52de9881fe1893ca3c5775aa4888c6156dbed89f43ac03589947edc37dd0054579fd9201215df95331c7b8d76a444e1fa7d0e805e10666cbf96a223c4302e10090889f57c9fdd4c5695aecc63f9d4bff88420b67abc0456ae4647d784b1e7cc0e107b9037f81bdc815fd37db9a53e
+Entropy.4 = e0c22f7c9ef6d333496daf66dbb2f66bed05603214baa0c8c26998168be4f136
+Nonce.4 = 7b91eaba77c65d5ba50acfbe7ad4021f
+Output.4 = 0f879fe9f07fc22fcc048037f710268f18c7e5c48c400239e6e14fe1bb21a85d475e4d85191c63c8873f6ca5950c5f888760e9aced47f7dcc693c53d9f1ab05cf95a7d1393e16b9137655da54534dba399bc4fa69de64ff72ee64c17c8c7a8a5b2e143d9395c86ccd29d244ffe7aeb516aca23baca299125eb7d62c2a0e02830
+Entropy.5 = 50849e29bf46faf1fcb6b5a89f0b4c440d37c01c6704e766fd9806a0645dc77d
+Nonce.5 = c5482d9931cc99add1454f5be5b49a82
+Output.5 = 82fdf574adedec8d26b8ea8da77d63b1dde7d4887800bf928c52381b7320b45148e04617d3b002dee13c182133bbc087c57654df708abbf3eec2243c8d6dbc890ea3692a3f49a07b4278be4dd39110084987b7b9b3617f2ebf4ef899a1f602642f7d5a6ea2c8a67f511648bc1ef477e583022d6672c44d142e0cea69ad753cd3
+Entropy.6 = 8f997669afadfa1eae9975c796674c43e9114623a9b4cd11a2878755ac92f570
+Nonce.6 = 6c6e904acc7585572e0f22977589685d
+Output.6 = 6ff95048e306e0d0a4735c3d42c617ee737f7aade9aa3dd2c10a2129e4771dec06971de0d2239f804fed7f5ef30aa7355d64fcad2c096ccc3be6e3f1ac86535f238b0b6cffc564a2c0b83dbd994662cf1fbd734ed7ef7904874aa4c72122bd50ede3601a2d8e208acf0d554f99431f68e70bca8f14d405a86f3f4a492e4eab06
+Entropy.7 = e2564f88e03f952c9e763d5559cb6df1f1697551fa7fe77755f813e75ac9e0d9
+Nonce.7 = 8ce0e8e322b0dbbca3bfd27e784522b2
+Output.7 = abbbe509fe028adf25e56f01a09e4e36c80f46e6c0952637b2b5f6a4cb2e2e11d74b2230d6ad34861feff352c7f7b34fef02892a1c716d2793c84a9642d09083b8e42f37300167815a52b5fd8537bf9c491c6766f36179d9d41e6d6486ce37dcd192de93f9b91eba29604068adb3c0d82d0ce7141e26a778eaca4233d448a907
+Entropy.8 = 053e0a70a8282ffd496aa1e23bbc08f8ad63d6f8bb3384bd85e6bd7d73dc7459
+Nonce.8 = 278a4327261c8ee2b66725d665a58176
+Output.8 = db1d35fb48642ea3e8fdb42bb013c8517ef79e20c0339f2b5ef81f24a36373b9e3c7accd087f34530b74cca912267c622ad990bdc7bd38b75b9ca04f5d17082d1457725df57c520e80386555b227a1ab6b124b610ea1ca5257a513a0a040d9fba3f6ff02e298c571c6941c9d85276716dc1ce52e757eb9099c8d799fb00bb93e
+Entropy.9 = a95cabe12de3ffc140075da1b7656f7b1b1dd52b9e27a21a7f6b14148a80fb18
+Nonce.9 = a0b919685ab73b2f5645c92f32d1516f
+Output.9 = 51a716db9d578dfc3e53067707f5adf0113a95d531f66c45eeae4e83bf00f3c776f001da09a6680274e522afd7dfc4a84eb34e0fcc4977079885f9180b663e2a559be765dcc5cdca9d2a6c7cf5e1301fc291a98126d70e4a6de8f09ac8bc59a730f7fbbec0d6241c69aebb77999c730cc52125628e40ad15520741af2fc53ed9
+Entropy.10 = 195801f6378b76ae85ed81a4e906414d7e434cd46e3368cd9a2d6877975700e0
+Nonce.10 = e349cbda480925a90d2e0b88af171d79
+Output.10 = 35eebcbbcd48aa8ab40a6536e65c10ba8efc6e889d29e30d463cdfad077a55d6108f5c175302a5e7cba3dac94f82ec311ee8e6b73e13fa15115b4baa2848d1f30f1aeb8efa716a350627c85371ff744e8e305d851b3bec0a2530a10ee77e63695d6ab0452d6c78a5198701e048370e96fccbea803591f4e099bc0e801255b774
+Entropy.11 = e7c5655c8f504efaa3d7467b54b02a5443aa2cd6bb075a7f665c01b38fd28c9a
+Nonce.11 = 86e2ee751854af6852367d2871b93e65
+Output.11 = 050b98d3de20130121733a0197760251176b28c5108badea03dd1ce0f4a8f74832c9e7813a507a6c2dff80eb2378a0d26c79300ff3dc3b1729df762ea50a709b87d97b138e9fdf7981eac418cb8830599e806040d514acc6da5040293bcaf46aee8f4eba69e8690aeb56f414e55910102aa2d4c5dde2e58c3625ec68edccc90a
+Entropy.12 = 13f1e2a631cc4697302c85ec96aeda11d19caeaaf42dbc57487cee53b54b4e03
+Nonce.12 = dbcc23386960304602da9c2cdbc8186f
+Output.12 = 5c6e47247e68c6da45dae4925fd2071cf3e4910a2cc77675951cb1ae714763ad8cad934ee7cd985f36aca2571f9505e9effb11e93428389ccb54a04138ed59c24fb900c9b59e0f07406d611b3e71fedf5262e48bf4e8c9c38cf1a7c3c43b54e78a3a35049e1d90145f45cc203e8c22d2530c62a225356e0b38236fc7cc38b455
+Entropy.13 = e285871f4c6e631e6411272e9275b12ae74908c292961089b8ab137df47e819b
+Nonce.13 = 8441c048965d3b8585a5ead1adb08212
+Output.13 = d28a4c73cf6daec844ff20a3c4f642db65a7b5222aeaf0f99a34d65277e626d0c76c4fbcf2a8c94c4d9d213907e27d20b8b201ce8b05a5aa47e9053078173a7f640a5ddfbb05158a70f36da1a058cf4f451f2591ad17071f38e097ab1ac80cd2b782461b82a29ac5c5703337a21cc3eccae86da1abb1e192cf6c889bdb729fa5
+Entropy.14 = df6edf960abe3aef5f50741907c0171906c0837ba3bfaa3a1044fcc4f19ed21f
+Nonce.14 = ff2558bec3e5377c12697c908d629952
+Output.14 = 9d68c2674eac76f3ccabe1c6c0bad96d5fbdcb1629c939e397eefbcd2ec2f25803fbb9aa72db952f7fedcb290da99f34c0fdd637c37dde1446d475a61c38c3fc5c1ebf9541d136cb02a43b2646df7ee4bd0d9191157dac92a33f401f089ae15618624fc0baf707409aa2f80cd5d0676612c2667aa420acc6e016e6ba3f63c686
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 9aac8a4157e65932a049a03b5dc4ae16c3aae9008c1426c03827f56c7a07f684
+Nonce.0 = 4273bbd3012b195167dd33737c9b29b9
+AdditionalInputA.0 = c781e398ad6a508e13d180a190ee5e80fdce26258f51b22c9d0be8211478e75c
+AdditionalInputB.0 = 5feaeb0d4da6f22d104a691516f4118a530de0c42c4fabcbe0b1d5d9c6423bfe
+Output.0 = 05ac5fd52b87ef178ae223b06f39b312139ee7d5210efd836a855f6c824997b11ce1b0174fcbff6e483df92520a183c2738950a6caaace6338f785505f35ad61c297ce8147c66913bb814a7b06267ca4935503f38fafc7e3b5c44454a3cec8ecb00a7c2824e6934e5653080f1c07ca5645f9a57095a4a1c11a776e9809c20297
+Entropy.1 = 82429d5356efe083fc548f529641c097b70852668d8dc5e88a042ad4f06b8bef
+Nonce.1 = 68ad3e3b3748d83be32e9d53608562e4
+AdditionalInputA.1 = de307f461f07a40bae29984b8d47c0b2196cfaad53cff068715c29f6a55928dd
+AdditionalInputB.1 = eaf198b02ab329ba869bbe661dcc8d2cd8fc891a126609e5773650904dad6b48
+Output.1 = 59e300269282e688daf96e0877089e5c2677691f6945ebf12b09ea56335310963a9e3247383a151c19a5445c77847b6aede57749b46fdd2912fe9d8b7861e73e37b4aacf72fa9222518e4e0ebf4458e005bcc50067b2270a9f61f00054b12754e6232348e044c854068d31dfd6af7bbf65879ce46a123ecbb0ccad97298d5df2
+Entropy.2 = 5c49b171332e0a37ccb8ff59edb4c2cf699cd75174ce15b83e6673f77c81de1a
+Nonce.2 = 3abc7061b6c9a53a811bfe1350b086e3
+AdditionalInputA.2 = 1c109d588a4af7d1367d7452af7b492ffe0fe313179ce7914716293eb83f7801
+AdditionalInputB.2 = 27477cf2620af0c44412297e47174611dce5fe5ea5d1da2913800936c0e86132
+Output.2 = d1d5b2dcb96b9e272d9612781cf099cf446cbbcfdf4015826291b3b827730ab6d023c58dfe59749f977450e675fdd27c6c646b4cdb9cb219a79720bf7f8956a41767a90358a451c6acb0da87ce630fe36de21abafa4b29135039b06d81ac7655cb0abbd21d316b07d2dacd66ed5806976954c120cac30276c763e516935a33a4
+Entropy.3 = a8d838cbe08795ec9a57b4ec7c716e028e65efb1309dae748249a66d23cffe78
+Nonce.3 = 1407e13bc82fb2eac0cfc3b99fb3476e
+AdditionalInputA.3 = d0e37d29206694092a2d36cf7ab6b07a2a6e2cf46e7cd2b97ae29496d3e3c32c
+AdditionalInputB.3 = b7521d68c084c92a94f57e664cd770b8b25b5a849619d4cfc1bdbeb689c3c84e
+Output.3 = c297492f1a15a93a713ca7d75a5f678ea3c39680238614a0f16cd546db9bd5e7591ac5881bd5a867e43845b03d54abad01b9b8104b3ebfaa183f1d0f073f35a37ae60c8de50622f9e0ef0b435ca328cbfa919d66759069bf8f2e0120d3131c0ad4b5c834687e271bb110268c253f0f388e4b3eefbca9016d839ad42ca0f82f64
+Entropy.4 = d0d21190a01f044d9f6a65885bbce4f9aa93f1368e936170c34cf8b8537c4328
+Nonce.4 = bfb916dda9c432b099409d35983539a9
+AdditionalInputA.4 = 58443183475ff639d75db340419a333e4eb934db45c907ba7f46c8da33aa2962
+AdditionalInputB.4 = c1f1e17072f955df5bebfc925518e5874e63553c47db1f67f500ebbbe9955af3
+Output.4 = d8634388d73653246c6c99a8a26cdcd52551ebd8618e13928e8ca16bb21adde0cc106d71f58447a1179cd94331e0315c5a242cb5b233a4d488199114cb54a7639daf0070badfb5654d253bc0fb87187142247d5053d2fd671ec1a666950e3b2b2aa3fe8eb871959d87d53bf9999841f874d4a7cc8cf202176f74c548b42e21a4
+Entropy.5 = 81b29d54399c4f02b6a9731130523891891f6bd49b072b58680acbfc63f25c70
+Nonce.5 = 3ace110ac710e1e4382466dfd7ebc3a7
+AdditionalInputA.5 = b33793eadeeec4188afd51d36f2741e45a0e4849cdc2388077a3cc7ff2105542
+AdditionalInputB.5 = 6c824d82b3ff1c25543bc6f5c2b3c25175654440abff89df8e49878f4e85496c
+Output.5 = 7c3d7b2f2cbdb5c215444cbadee6fd65dc2d4b0df58e3a17ecddaf5a195ff48e0603e8d461fe57369f4ed05e7bf61cec66d7087e6a7745ece1f74c41fdedcf7a7a6ac466a2e7ee4d53db3ecd03f1c78ae7605b085b26f5d49135169981687bcd549ae25c580f21f0d07f80d5a5b075ab5942eea6cac4005224f812735b1d5268
+Entropy.6 = 124f490660e8f4cb85c3ce2c185fdc0737eb4896b492fb14f5798fcccd50404c
+Nonce.6 = 7719f49172bb06106167d6c370fba1b4
+AdditionalInputA.6 = d94d3911ddd7e96071418370ca67d059de090f993ff86192262c09b21a953965
+AdditionalInputB.6 = a05755aed6ef45ea7155f16aed4d67bce063857ff2fc490e46df41915f968819
+Output.6 = bd3f7794939758b5fa50c29b4de8c288208bae130e5209a8e0ded81d9be51f3103a543de3f56bed1bad7834ae2e650d1e5d5c6015e4e9b4720890d80b7ab7b5bfdf8a3e3cb0ffcdda96f475289166b1c3642a5ece5df20c2fe93cec0acab9b4c31402545f3d7877fc489cee15d162de20b09b43b92e50a39256edca1b4e283c9
+Entropy.7 = b69c1edf0fb89b8e901524fb6ffe6afca2df563fb3e4ad7c78fdbf617b683974
+Nonce.7 = bda3a1116aea7d2d5aea4ba2c542fde5
+AdditionalInputA.7 = 15d9ea848b7011cefb5007c359e6727751ca34e78e555be4a707a9bb77f87c1d
+AdditionalInputB.7 = 32754d9f879a8af60ab1c34f700c29617659e622b77db2088ce224474e6ddfbb
+Output.7 = 4d054f036565598cf5753de2149237d9fb794d47809eed62158b5d483a5d1a25843cbbde16bc7889873c84e3aa4bae6f0ba05b9a076a827a7cdfe9387e01186e1ec2b48e29f24888dac02c10b66dff55e6396972d5288d83b196b6467145d7f14163bb1a8da0d5ae365c8bc5dc8300048e3e817d72c1a66663e7f5ebbdf73a1d
+Entropy.8 = 018a8498057a251574aac12ff5b6afd1991cb58724eb5397076d393c8c238133
+Nonce.8 = 02a57960466dd2985da4d1d29d98d6d4
+AdditionalInputA.8 = 0ecef161188c197cfa847e14d9e1c21e2bc60ef5c33c7d5198f4ab8355098d7f
+AdditionalInputB.8 = 4c2ca24a3e41b216ef4910ff437b0b6383cc459756579ea9b5cfb97e79a007dc
+Output.8 = 990939c264c668073c3c6bbde2ba0a4a2970d0c6532162b34f3ffb50bc5d6fa13ab90d0e5c17bbf9ac2b0bfa5481cd1a1bc397904cc0e909a34e4e5609aa34a5cfacadf2c615e66777fb0fe6206b8561b7163ffceb14e3873fb9d7e14152a2d6a8e7936834dd5c0e8a81a1e48a95b234e85e0b16c2a2a447c58634749e5814d7
+Entropy.9 = e2e62610ae4b77312e2a97f043c9ae3c605e905a10c897732b993b7749d2e111
+Nonce.9 = 42db363d6cdacbf064652866a994848c
+AdditionalInputA.9 = 388fc641d1b7f0c796f6f30a42368a74bd24f84ed20a9102c9e1ca552b9f2a03
+AdditionalInputB.9 = 98e2326b797b5fcd5d87a4f81e48bec81cc265dab79a92914c3665d10f10620f
+Output.9 = 299bae6240518b31d3e192144bd0adf7f260f242e1ca171b6947a419c65c0417136519f9c590590e98616d9ef5e9a4a52e45e9859f91ac3d8fca0d232e0c75b9e6b650e645a7b57fb215d23120d38c230f3f6f1657daeaebc5f7ae3cc52eabdb96ff175b35237e2b7fedcbffe451b2d798e1cd1fb27cae2d65b632778156dd42
+Entropy.10 = c7e3d1c5652959fc4d937b337e431aad7af523a724a28e34d66c3345ff97f4f2
+Nonce.10 = be4c452a88f470424097856b6457dd23
+AdditionalInputA.10 = eb20ed19bcb7993ba674a0de19260826648c9ca19e873df26fb1ac8b4f18a1de
+AdditionalInputB.10 = 0d9b936931d204df44354dc13f9e2cec38e7d80917f6c86998e387772613faf1
+Output.10 = e8fa080a32b3775ee0f5097e8624a7805afc3a71493d43bb9bf7498a92f6b2de5473331a18965f0e93c996fcaef2669ea9baeaabb0d66b9f34674e79448c5492581ae16cdd44cd24aac25111bc914f2bfe41820d8899770b5792f06666064c810fb8bdd18b23db0e437a2f0b7026c4990b00663974024a37c2a4906c19a3cbed
+Entropy.11 = 659f4a17fa4701a0a4a047503bc55f19f0f0acb3a1eacdff2a0c2311b22c3f58
+Nonce.11 = 5c58f7426464d7c81761a15ef31adff5
+AdditionalInputA.11 = 44dcc31cce2c55a822470be0ed68684167952e0e588381f873a2039c5f88fc87
+AdditionalInputB.11 = 34eb4ab8ed50e61d2774dc71b330160179045a94658572eac530e2b02cb3f715
+Output.11 = c196d2b293e38ccf0b4090cd050ee22ea2c6e2d75e7e130fd0d6c9c2988a29cb9595d88001745cfd2df9e81e0b782d851718cadba8ad56b01e68c044ab4253c1af9b41ffdea35fb5baf5da3fe98e2497f6e0ffc055002c10f27564f63b010aa4659f24a89dc7b9ec9c5e0dda4f3c23e440b31e7acd28768fdf4500c33d1f1088
+Entropy.12 = 8ebac55f0d28e55162592cb5638f3058d964650617223880b65dbe662df215da
+Nonce.12 = cccece63fb664c0dbe4844c00453e229
+AdditionalInputA.12 = 074fca8f1bec7fb505388f541533408dec1faeeca49dad4d2a71502df85914de
+AdditionalInputB.12 = 041ebfc7cb149c53ba25a3d51ee451a41e7f4a025751f9a80ded880c4ddc5573
+Output.12 = bf9fd8710a81edf3e55497e7c85da1417951376a11467d757e08c5d67938fb62390c9614f4386f75c7bf3b48b42d2cea72017d3f746d9f120e2b7bf3b6313d27453c9bad1e740086dcef776271f22810962227022a6374900d6fb70b3c0b3de1d471b76409237bd1994826ec8d25d29164875cab70ac3bac500cb18ac3467f2d
+Entropy.13 = 671a2d51182c21e83f137787508ea24b1f98fae2f013f329e84d5ec9665fe3d4
+Nonce.13 = 50cd543046249a1cd360c5feb6db48e1
+AdditionalInputA.13 = 819150f9b17fb4179dd4dadf0166bbdd99d2b40fa976669693d1830ec53317a1
+AdditionalInputB.13 = 244e11a5e668c1b18289a7fe3c5a654ab47bcd98b92337ee54b84cb678e2c1de
+Output.13 = e497681ae8040afe142d9f8b6a184c41a5fb135b5be8be23170531d5b5d197da4f517e9e4b7a6ff4cf4c9012135476d55d17e0a128d35f422a8963f359228fd3dbf6693202b3c60f58719c760dc417c5ada1828a225fba5040f749f1863ba01fc88f37373f53b9eea6942eca319810c32468af14e80d995d78d2619768f6f483
+Entropy.14 = b2044a32a3f427bc5ca798bba15eb828d6f3ef4650d737564085bad1081b82db
+Nonce.14 = b0c38f1094978b6626cff86bb5f554da
+AdditionalInputA.14 = 4bf2c816e2c3e9721d192a670153d620aded035ffa214cb0d7638432c3c6fe1e
+AdditionalInputB.14 = 06f515395ad7c3d025af7df781b49b62f068ec9398f6dab31ead6f917c663de0
+Output.14 = 1e70791e6a8ce753f959ab75d1225b44452ce7aed0fb53b56208b3f26419f004983c452d724c483b4f9b70d2d84734ce8ec0258d8edfac639b355204e14b5b7bc1d3aee6ddd9f5da54c6cb086d16ce381c2d5cefbceae3afd56c13441d80c7e6081aa68ff57f21d460370de9ae713c17ab14a81f0895e9e492af7c437d7a5799
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = d2a3ac96c06d87d1f6299e98a3ac43cd163917490ef02b652d8416fd67c0274b
+Nonce.0 = a9c06352c760c84614eba4b66298f306
+PersonalisationString.0 = be420c590d13494cedc74f3236313d940bc0cfc4738c885b21fc7d60ec9bc49a
+Output.0 = fb66b8ae25159fa61631277b47db3bac31a337961ac46eaaccae5902dbd356dc73fd06e21b23683ac17f1788b2b60e7899122995fb25d016b936d9bae58f1e06be96a1e615bbdd49fdfa79e3df8ac4cca1f066d555893e2fe4360d16db886721ac8a5e401934f8f5190a3750b00b2a4629beeff767d3f4270fc1fd68651401dd
+Entropy.1 = 0f78c24cbb1e44c6b9ffa66ce7e89270ac1c7bc88716340e7f53c4d3ff7b65f4
+Nonce.1 = 90509da07f8be8a0f625fc12e89b7643
+PersonalisationString.1 = cd4856cf2a61aea4fda4bada702f0be2f15a460bd1a690a139fa3515974fa9f1
+Output.1 = 1f3781b65456151ae296b7e3b2e82c9292b8d97c1249a98657491e1eda382bbd1a337bf1287a22d1b26cc7151f7a2d7a6ec64d0de57c64a6d1fd3272d1f43b1de46959862fb85b134977502c291ebe7c842f1116e34dadfc3a130c1bc80923dd68432ac0d80aa1c35b51df05951be928692513a26dc16975dea4be0b35280b8f
+Entropy.2 = 33ee8d0dc48c2609347b59433e29bf1685e7900c423d1ba1752c9be5842abfab
+Nonce.2 = 7a01de38ee0d06c62b431a672078da60
+PersonalisationString.2 = d139ef8ed22c9887c3d9acdef3ffb1634712f02160760c61e0d4d1ae9d57e066
+Output.2 = b96adf670697106396486ffc5be9b133a95606ef89777dc82da72229e151c2d5d186c33e324388e4d4d07142d3abfa42a9ccce503846d8db21f911f3882fb17f52044f26eef88109f83ac394a0cb28e52f102b32dd75ea4f6218c2a4fed29afdba8be324b2fe1f206ea2257359b3830b87a63560a7649f5c22ca1e607f92361a
+Entropy.3 = 989eeb516274ef8398807ecb36647152b31f37c318c182869ec6a66ed816c33a
+Nonce.3 = 4a495af0f210b6552ea2b51d58c84d35
+PersonalisationString.3 = 38b59f9e9add62089d478f5e6e26a6a8fe0769567c89ffdae1a299c6950d8092
+Output.3 = feb2acc2ea034d48c43bedde72e7431949ceead6e9de09c838a9017421c707d9f39871c1f328a5deb843e66b87bee6772ee3332fcbdcad92600831c53f2f439d4128e329a6c0cde6ad891598fd3f1fd937a563f655388cab7361da2064f2168c25c325201415a99aeb6096b0eb7ab9597a781685b93e4562ff4e5f2e562774ea
+Entropy.4 = fa5ba9b71ca33c1ff844b86b67266ebc58916c3683fe8ea67ea63c5a860f69d0
+Nonce.4 = baaffd637cc0e1363f4ec182c0fc9532
+PersonalisationString.4 = 9b9a6b6bf0dc0f909857a18b5bb7959d94977b0ccc07acf8d81ed56808297f17
+Output.4 = 779d4e6ecd49870015078134c5b2489c2d4eb5e1ebd80a4104f21735e49ec6a07aac01f16c41d9fd1546cb6e0b6540d6a14be4041868333d020922be9e16f83feca6bdcc656de16984434e87e98de46b15b287531fc415e27ab4dca0e5baf8bde9a446c8b35007c300598c6b34c076fa6f7ac8233c9e47d22168b66206b56640
+Entropy.5 = 67beb75bf701e1b63440efe5dd9ebfd4516cfda5def6c7240f649857dbabb28e
+Nonce.5 = 657ff5fd8f368e77e09189d018e807cb
+PersonalisationString.5 = 648d618b13f9fd5fc571759951a9b089b4c31b1a7c59c2e2e1724f00637eb3fc
+Output.5 = cda8e01dd85646262d91f7bfa2e30c19bdbb106a5e9278f4e93a73a2b37636dc56a6a6cc9b83faa00061eece4979cedbce65c5692aa771fbb23a8017ecede8ba0a3213a809d5464461cdfeb3dab4b0a16b6fd38726008a6b499b5f3169662ae471b4339cbb889f9a5fafd4c55ed24d97f501c5c980792b9e6ac1a1a0d1ff304a
+Entropy.6 = 2b902a0df62bd4b046a8d7cac27c8047c406af0da014f4bd0727603b258c365a
+Nonce.6 = 76b57a7957308bc9624e32c413300819
+PersonalisationString.6 = 70c04d9287432eb3f92e782d4e8904404220c489c0bf6498b77b579e063f1464
+Output.6 = 01abf0c89105731ca9fda10be989f5e10867b71e9ee7accce928b4dec9be4ed4c4714ed0b8d1ed080e1a3ad57266cbd84b6e3fa03931958c6949abb8c553d381b749eedfe54658362b7914fea1bbfc17e8b88caca7f88024699091e67ced6349b7a54ecc900e6821b619ec257153217184baced2e14224c0c4dc1a96d1403de3
+Entropy.7 = 67d42bbb560b8b4e018db9ce142f59cdf8bbd1724b2e4889c27efd3300c508b2
+Nonce.7 = d84840fbc1baf2d5c0cb8fe433f6aaf2
+PersonalisationString.7 = d40fdf1c5843b15716320ad9aaae1c79c48ce15fe64b526f625c2333ed195a0c
+Output.7 = c6614bbf77c586c3d8c91b45fcb7e024c875eb562ec84f0ff32bd75d888de6a5753078395dad486e74b6d4f333dcbc4097777722298e2d262e6bb995eff347291e65f979e4f276829ea816fc5faa3c16ab9b28c3f03b4085a221d1f0e7d0f4c9df1f21c195c330a9e45717fdbf3e9d3fa7baee8b0723c1e1aa782f38f6ab8b0e
+Entropy.8 = 4f7fd8298c723f3450819017b77558d4086284d168f88ef204ae0ad1115aa476
+Nonce.8 = 5b3eba417cfcaca87786d4f13e30f7fd
+PersonalisationString.8 = 7c4f834b82af1d274e3ca578db6fed21a1145e314baa720a80eca83709e58469
+Output.8 = 064d9bed03f2b6a913909617cb8958fede376f40b79bc289a5ed5720dfe1910803e938da32ae9b4488dfd44c37b702f4f9078a8e1d42fdc06512de3fd049abeba02f93e91c4f137fcdd4521f0bc423a6ef9b5dff26ca12145be58690288d4702b12f542b912d70de076842f292d8809a027e10a789c1165bdc20769afca83f0f
+Entropy.9 = ccd39c303f868c0dedae792109e09beb74be295d1cc1896c7d4e0f58c2e5c8a5
+Nonce.9 = 38141f323b8e483d80a4ddcffb0b2dc0
+PersonalisationString.9 = b49d2f4b3ed163cd69d9979a87f8b63c4f109e902740cadaeb16059f1d4db435
+Output.9 = 6e9c45f99fc8b5601306a52469ee1a03a342fa3414ef707cc201dad1ef1dae5dcf93bf55391427a9fb6029e196c3c2c8c29e0bd8c97fe54070db7dcefda57aa13acc85cb3f3f71ff3f8981dd6f0f07fbeaaa406e5461637d2b4e294927e8d5b269ce70579cb6f468448b6c9490c96c6679b7cae601519a48e99ca860a675fd14
+Entropy.10 = 5a9de4a21e89be4c6f691a535228772eda42308b33e33f3cd88bd6dc28282287
+Nonce.10 = 1aafaa319281d69b8f54f401d6a663ac
+PersonalisationString.10 = 42ebaf1828e0ea2a2e047fbd16fb4a9e6b7aa678807238be93dc16950d7c94b5
+Output.10 = dea796adac8845f6511310b4f0165561518fbc7e3442f34c8fe7c658480c2a101440db31d7c79736cafcd2a0c400ffbd37b8fe73ab99deba474253d206553904c14e8455e5e26309148a023abb3265a8fe67d08dc9908091101263c3420b051b781e3b76a9a3d3c4cc67282a3839b14732662edbe59875823845d15b4d16ac15
+Entropy.11 = 20b9ebc6c44f05b7aaa1bf52ab8928bd2833a388383f90a618f1057b69115c13
+Nonce.11 = 3070100b757e2bc99bc1701ae1fdd608
+PersonalisationString.11 = 3aa37972201eb96286898a6c232824fac8853053e4621c39a5331ceb5ac26017
+Output.11 = 5c368bd5a1b056d349788091d51bb821ff7ff6a8fb2e194775f98bf0bd76a9b48c09ece83efd038d2db6b8940b07b689cdb630aa7f6f723eb81f83c48f73dc9cb75a10df2b5206382028acf5edae415f0a3ba007ee6575dcde6ea22b9df58f8f6cb513269c65ef8829abee30a66a64dcb373c2f087cec36877ec569eb687589c
+Entropy.12 = 1f8b5afe164dcad4d00e630f612ba16b62f184e431c397c88ef693140b624449
+Nonce.12 = e4489952852e75c0b0f7ca90ab8ec9e3
+PersonalisationString.12 = 24f073b96d710243c12fd16b53ae7183a2324a0244ce00a35528fd74578fbf9b
+Output.12 = da30b36dee2a788e90bf72de6f4deb6614d6db16564a2d3394373ff051a49b93e576697d67f8b74d5774d78446f856af153a95933b1ed4dca5c4de42bee6b9b377934e50138a8feee927b1d65e58703ab4b37aec90f6835a6d73310f80d6e95b021e63bcda1c9677eaa099db49cdf684bd025296dbd3cda954c963a04a31af31
+Entropy.13 = 5c5de88e41581e1cf18faa16d46751fe1da33a7bf5aa5c12a008fc65af9de205
+Nonce.13 = c519ffe7dd49b70556063777218dacf5
+PersonalisationString.13 = efee6a025fdecfe1f6a31ef6b2a2152a0de53b65faf8e3444435896398fc39ab
+Output.13 = 8cf44f07902ac42105a60ee44fdc2aaf0dbe5f911e1735c3d64a56c893f4e7a189519c7ce4c1f3ebac95a061aaa0cd80233ba60fc888c0d971093af745fd5b47d86b680bfd67e50ad9b8568ecbca94696a124c535556ec5dda3b197de1da3db9cdb56055c9b54d6d154d2b1d99b37035cc2737eb60b4eeef1be60d83f4f7cdf0
+Entropy.14 = 41e0b160ba753b912c728d3622338e5e6a7669e2e65b6af57ae203179ad3de95
+Nonce.14 = 2c4c4f3a953e551746f7e258821d24f6
+PersonalisationString.14 = 676a9304a3f744c62c7f5048f2137982c89860577cfcaf0d855514436ff8eff2
+Output.14 = 7bde8a5a34538655ab2ca26d0447eff3c6da298b3fa53ff0526eeeebaa4a876b60e47ca544ae30ccb00176ff84920bb4e4a4ebc3cf74b9cf8cd8ff9f7b11266a3c9bf918c458760bca6368ddfb3522edbc61ad14f2b638294e51d82e617d8c0c631aefbba50dbcd1a0a88963c3d63959909ce2cc669924d7163b01cac468c0d9
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = b4c63246127d680629311672c1213953d9c6e02903e9845a1d5b03e46d645a62
+Nonce.0 = 4e43b962456a20f7bc93ab7c78cc3590
+PersonalisationString.0 = 885e6dbd7f9a2507342d1d7c91e1bb5e5f60629829a62da02b0f38b35e7487c9
+AdditionalInputA.0 = 40221fd762af6e5ec2f18e388cc2572fd000d9517e1df9ea0455b09cede4ba84
+AdditionalInputB.0 = 359b2d9fbeb9180550e1ef3db1cc3713e95430f85d616b136b2ba984b1406565
+Output.0 = b26b0f32b8dcba51377ac1897a71b8081b669c5b1ba3b0c0e28e6b4dd362b2d40c2b717cdf6d51b7ba560dc5939d97a8b09c516892a6c267c8d4fcc887dcae50527ccb1f1d567fdef7eeeb0f5a8fd5f5d637e5b78a5be18fee1abf12e7ad6787772992fc87179f462cdbd09cd6d86c34494dea17e2131b0d61f6497cae4eac82
+Entropy.1 = feb65d1f7d8de2ca9cc8d3f3d95ccd692a785db5d02db51e0193ff5b056c55d8
+Nonce.1 = 8b0395855860f1006d3e47c50095d379
+PersonalisationString.1 = a012d2a33e3ec0de09960f58edb443dbeafd686d94f11b5c000fab29b15ad5b7
+AdditionalInputA.1 = 6a7bbcc87233646277c8747811b6b058c75623e5ff1487e983217d74b8776277
+AdditionalInputB.1 = 9351b40a484bdd7d575347b75c1e80c7a59daf3163aef4edecfb3054178dda40
+Output.1 = 1ce8ad2927cf505716395df916f65a9481d06d280e03b90ad29d75b6b4664118ede74ce849609335b5d4aa1f011758725371b80f34fdaf480f38f7742d1c38b99990938e9dba3a75782eb6c089a87bc0fce78682b110ab2c18f4cc879689fc85f867b7517f0a821a7243213182de7b441c0f0c07413715401213d11942d25274
+Entropy.2 = 09a7faa7123b1f700976e2cb30397ceac10929263883b81318ba0b29fb641fb1
+Nonce.2 = af07eb87015680be7ca84c4d47f9a730
+PersonalisationString.2 = 34f98a1f6f5b2292cf2031c0e99fb963afd0eb4b96b3802d844770dbeed01665
+AdditionalInputA.2 = 9109abbfeb98c83a7023714269d900a4d61748212341eebc8194427721663a9a
+AdditionalInputB.2 = f68dc108700ed8fbb471101d39bfc53de7a6734056c386dc03f92162a554aaf1
+Output.2 = fe4bb358c7e783002236dae3fbc2615778461d03ad7d309894ada851254b1295f614cbc617fbf477d71769ba7642961c4682c77b6483db4ed8286e2a89392ec9d7b0afbcb41f7ea273607a86f07371a8f723a1c4cdaad357f2a2a4d40b91478dca43d12072a9679ca402d81ecdb314a48ab7b21263f16d4b9fb82bac2af2c674
+Entropy.3 = bd047b8c447409d8ce7384c4d98a8dcda6229752cf8da82aba7b5391dc0edd1e
+Nonce.3 = 703cfdbcc6acf355cecb58b1e4589a64
+PersonalisationString.3 = bcec11129cb9f8462b7ccd048bb12f30235e1dd808860dcb8c2fe18494051005
+AdditionalInputA.3 = 84eb8e969f47f84c82dc92e59326370dd5a11cad0273156d1ffecb5543ed251c
+AdditionalInputB.3 = 5002994dd71e6338e1cd59d263f6c428dab1c72c2a989017f81b583efe0920db
+Output.3 = a230baad00b46c5078a33663efa0bf91edcd4650b149318f16a933cac98ef6df88d2d98a33d0026830812408e43ecaba8ce5aba28dbe5615f83c700f3cfb752d0e63153bbeb3b76fc8ed9f2dadea2032e560aed5da882ff811c3afb9d819e94a0854a3e9ab21840729411e1859de0d7e770339b937b72cc6f4cdbf7608767dde
+Entropy.4 = 1fbed2747f542f0687975dc25f07a1847e904a071324050b65e8f9a1101601b8
+Nonce.4 = 7c242af15fdad4ad9f05e35bffa326ca
+PersonalisationString.4 = 161b53c75fc6608c83f6e3a6c19da10a73929febfbe36373a91e101480fa975b
+AdditionalInputA.4 = 3dcd00e39ae451344b5649a61cbf3385d28ec37f7c8a087009b6b960d21bb0a0
+AdditionalInputB.4 = d631b7732b2b3e7f7b7da836e3d2c8dd9e9f453d0a767945896f48ebbd5055fc
+Output.4 = 897d08cffa83a5f77d1d3b154fec8c7cb06086fda6a6ac2c7e89baa23298d121b64b29bd7bc38576141ef52a8fc74eb187c44a4963b9530e3d1923e1c7f6d481ab231a756a28674a92995cc8799fcbd2b88e0853675f0d1b00e2529b51e5b6f8a456ecdbfae678d7f96d7b7e097d741b12cff5b3ce92114caddf4b602494a74d
+Entropy.5 = 514933103b0d4980181e7abb3cdea5e940de710675076cf8010da5eec2b8791f
+Nonce.5 = 50e87a88c04749f799a06c63e9999e5f
+PersonalisationString.5 = 61bdc922fc51cdb4fd3071a3a1d8003e56e61deea1a912e9dd9eb8821953dd03
+AdditionalInputA.5 = 447e2d7d2069438aa954d7838298dd2395707ce3b61fe4cfddd7704038c451e3
+AdditionalInputB.5 = c3be82d3346bb920bcca53c8d8749cbecbaaf4028957625d66edfe33d30cd504
+Output.5 = af0a307fff4f12f55c58168a8ced23e7f0ca35d117eef104f9adef44f6c4299ef75aba12b8ff842d1ceec0517f1449ccba09b0d038be5a032db0e9f7f2b9bf3d33fd36793e68d672f38188b14ad04a4f3e59e78dde954a132f2a3d8843808a4e22c2ecd825bbcbd46967016cf534847d7885653d4f344c5202989eef28bd8ef0
+Entropy.6 = 3ccd352cb0ad8524df23121d97e35539b0acb0904a21bb62d9cd9f5ebae01645
+Nonce.6 = 445035a9396d81d50cbade273da6d76e
+PersonalisationString.6 = 60262414d3c09bbf34a2d8e2a3b930a3bb2f430485aeceb6bad4627edb473629
+AdditionalInputA.6 = 86df0eaa1ba1b81a2bd310e57ce5b89264d2c678857ee585830a5872a3da5ac3
+AdditionalInputB.6 = de8728469c81544d05cf9754e9861b30b8d9559da97a0e4467cf2d60089290e0
+Output.6 = 87ecb75b60906cdeafccced53fb3d7158c43516a89c4a0c0db0550ce4feef307e105b00185f84c34902fcb95aff069e2b69829c1921c4016096ea0657ebe81ea39eb1fdcae3d37a989d6c4aec171e561944f2af69b4d0aa8df76a72a9e2a7fecc3b04650ceb7828ecdfd9d644206e47f3b2575f3a72f25d1fafa3eaa52a410cb
+Entropy.7 = 3c48e4d5c4abd0ec45bb9aeaf6b02b9bd490a2271909d2abc209fa1aa5be917f
+Nonce.7 = 91933d09e028c687ff77af9df776785c
+PersonalisationString.7 = 489e9397bd3ca368aa7d0b32d81dd8e9dc78e79456feb1277e6c187d897b9c45
+AdditionalInputA.7 = 72769e781db74e06c474c26bd589ee3a613b94ad6924d092554c26495af8b6b9
+AdditionalInputB.7 = 924ee1e94e62d1c77d45e0ec71c332e4ab201e24d993b6c3fc23318a8a1b567c
+Output.7 = 025a2872d89a2d647aae4be7ac36e6eda671844e91dc99dc5f50bf61d2a6333ebb0792e1580816259a6c1b1aa5c7407e4c461f6a5a9faa0b97c07d384db071a392e28aa1e9b4dace126dd9ea5b1c6d7113640aca0e626027c99e569a38c4f179d69a7cdd5af83c62a5ee1e9378ba680ef9c1f752321a38c1384c7d4fc7384c6c
+Entropy.8 = 63a8241aa13e576e7ae9728a6969b1c15d282f45df058ded45758c30fab541b8
+Nonce.8 = e9b8688d1ef6e23b651ef45d718b7a49
+PersonalisationString.8 = b1e0e48ee47d32aa673c5d5da7c1f6cba2269f7ce451c85ddc0ac39e2ace9c44
+AdditionalInputA.8 = 13e48bf3142434f5830752ca1c564bb6e9e828c19fa9123be98db312355af725
+AdditionalInputB.8 = 21294b1373cf90c53d111e03c6a3c82e98cac451a08958c869f14bec0c4f9712
+Output.8 = c980c003c2639692b395ff3fbf3213c672ace29fe2d10b335dbf26f0e50df91918129428aa98ad8eea71d192bb7d3b279aa851688a916bb66dfece0a323c89b67dc7677d9ede5bddd44fc18b89e31008870eca510504176a27a98ebb22792ce502f16b464e7d29d7ca0b44856cff607849e083b08697362928100a230721a4ab
+Entropy.9 = 6dbead8cb3685a6d0191e996a78737aef9884e8becc227f58654913c00ea95da
+Nonce.9 = 1f84917e614a4e6e88755a7e5b81386d
+PersonalisationString.9 = 7ec9a9973dbce7e5ccf289b6e33ef22c4d7e06c546eb9c5e3e2815d82d88ed6d
+AdditionalInputA.9 = 9dc8d3afda83a62c3e2467b8105a93e30066a0311132913a9181ff3096d84f9f
+AdditionalInputB.9 = 778b0e390e7199fc7867d5736715827098d99d37f5592480c9f2024fdef7e10d
+Output.9 = 5c06cb732f1face60fcd33f41c0bc67770a58e3adb87dd61ed5c72c2f73ac2032f0036918c99995bb47e4ffbde2dd96b91e3e13a26dc8af93e3d9046719213737521d35a41044f9458f452cc661e02dc4cfc8323bb5e2cc37cda26c8f2b7d14fe1ddb388045e400abd595329e53c0b4bf4a60f3a22c5e75635bd717a79340561
+Entropy.10 = d723d8ed26d609ac7f9d6cb6ee6505cd22d051bdaa36958b8c28769df08bc2f6
+Nonce.10 = adddfc40da377c50e6067a6973dc29e5
+PersonalisationString.10 = 5ea4fbf09bf753c9b25d5f4723183c6eaeaac85a42ee3b7b360f962851b08ead
+AdditionalInputA.10 = 35417ed8e0e15683cdd5baf324571c9f711ab4ef4353e821aca77a2e14cdd9ab
+AdditionalInputB.10 = 9322ee6fa460f40891d3530d13b9f2401e4f1fbc5c64f92bb61bf87650496b76
+Output.10 = 212476d8b3f61fa93745b2ea73e7249a01109c07b84ec792ea4503c385d16f82292061f1a09979fdd6b80896828ddd929abe806de301aac647a8bafc8d8c58a67b12e25dfe9e3e0a708cbf04ccfbb8e2f3b08f95db4c8d5e1d340492aeac8dd6e3b2966d2cffa925311d19e44ad5502a20bf98a1f2492c42d7b50e422ca9ebf4
+Entropy.11 = 06fe6e2a319ee26d8892c37711d1231709edde84abafb438c96cc7b0e7abaee4
+Nonce.11 = 271299a6bd3f0bf32ee519adec5184e0
+PersonalisationString.11 = d4195410f57c8b1a8683ffc4336cd61536114f943ca15d3930ad832393436ada
+AdditionalInputA.11 = 38178f646813d9d45381e96297f453337c4cf8de1a55fa0536a2666b09521ddd
+AdditionalInputB.11 = 435c72022295d2ae8f90d6f58bf37836afa213b248ad5bfef0ee9c3f94ccc0cb
+Output.11 = a1a4c2ed245ac5c2cd8cc5bfe8ef32ebb72aabefad2e5ce8ed7e6a481077ced56f86665ff46ba08d6d133386aed19c7aa168ad1a7421021638609eb56e6cb05920e8109150bad1fc43f59abd6abc52f867d11ed3ab11f7edfcdac017207ab54f5c00144a35fdac4d198c4c6a3901aa79c11f7e69ac4da59837d3dba32e691241
+Entropy.12 = 27378e8a90a0b2298278e1257ac4ada48096dda236bcb31130977d2aef9efe1f
+Nonce.12 = 223a6bb250c36302b37fc490325e68f6
+PersonalisationString.12 = 0082c632e9e18e1839987feb0b29e6a1b880e7f41d949c2c828a106e79423af0
+AdditionalInputA.12 = b178b3548c23e7d2dcecea78965e9d80256f85a5b9a706aa6674018791dcc6e8
+AdditionalInputB.12 = f041a14e2291e952b7268c8c7f96c7fd36dc8f6e0f2e50b5a21cb13f5fa813fc
+Output.12 = 7eab54eb7fb5fc71847f002c02f56fdc5a5be00ca00f7a48ac54ccc88494ce863a951e51d652e36a0355c473ac543a94dc69c7e390063e4d83a3009ab722ae8eb9034dfa9ffa78c91ee9ba87ebc2f767be9eb2b564671b9f52cc1484d07e3016405928e5aec3d6e3a7e091686f41362a223a9984b2a6abdbd7285dc7cc5fd219
+Entropy.13 = dc9173e90852c788a7cb07a14b8e429ff03446d80ec87a5f96dcfc6a2fbc0f0b
+Nonce.13 = 28c7c982df9bd7a3e9982065629523d3
+PersonalisationString.13 = 54534cc4e9a2e4baebb04ed83b1fb44321deadc5f4b34580c93a591f6e508c1a
+AdditionalInputA.13 = d7cb568022dc436f97663aacbaff5243628b40bd7952f5b1ac3c68d160c8cece
+AdditionalInputB.13 = 554121acd7c699df501c42997701e49deae163df0b7f155cfca588590bf5df19
+Output.13 = 6c2a337543c096844b9f9ec87a3c3d93bece6d36dcde33d00ae1dbf3ae3b1eb45fe76eb079291379f323df545f57a0808fb66cfb96bfaceed809e9d805c366282498bf06ccd6419a2294a240bddf19f1e27eeee812d97ba78421da227d69d1e568bfe8a00396f17bcfbd76fe6a97f1da6636676f300853f0cec7dbfa757671a6
+Entropy.14 = 439a55733a39ffc77f6b732c2bef562f7244c92e24b0e039db15269e3595cfd0
+Nonce.14 = 66a488a9a57e09dce4e612a3c48366e9
+PersonalisationString.14 = cb2168f5d0518e08b198fe12ae99e5ea795556a5450ac48cf5c41cd2ab06b170
+AdditionalInputA.14 = c168776136197bc3877c824461994a4cb020b61ad1630bd8f38d0db2110ece03
+AdditionalInputB.14 = 4f54082a1b9e6cdc8599e1639865c00fd758f403adba5cb74a37e2b20f29b654
+Output.14 = b48984588cb54f78610e05c8a7ce12c630934f5ed2e4cee21e523fc65a7b8412189ac51823ecdf493844a859aa87f3e84645f22f0914245043f7b86287a85db97697bcc84684b072162c2fa636569df83fe85f1ae25204786bfdcf5eb85006d09a4d97b162248daa8ccbff9eca28b7bce9fdbddcb8679ba50b6648cb3bfe9af1
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 9f465b884dcf655c921842200344234ad4059886ea5d08158b32f4f82a1bcf01
+Nonce.0 = a50ce7d89327c88aa76333692b65ff44
+Output.0 = 5a277a715800aab77ed59efdfa98ead15ca7c566dc4a788b66d8fccf2eccdda9db7c635b171842cc4f04cdce20add856499bad172b5b267cf863369a57eee5518d6d252c685d8932c50a9e0b2493ffb6cc9caa3f6abf9a6845561d9f1ec042dbd0312fb324370abecd4c740e453165c6f26096ab49ea1008b99a63f6bffabb03
+Entropy.1 = b18d53ce1cc26f77ccb09f48d2de283e4fd1ade79a4e1297863e3f3244194e0f
+Nonce.1 = 8ba1a44d4fd7221ab66f1a3b6dfecc02
+Output.1 = 3856de3c07690074a53bd17f76e3f620b0d7952fa257f0ec0ec2c49ee4a906fba86db39f743e9b65cecdc3e77cddee806798277a8ef09e4c4ea098ac20b2403fdc31dc9f8a62831d61ed5a203324e0fe020b99433d1cc3b6ca60587e2a5eab17ea9feae2f8794673d65d19a87912fd4f87b07ff440953fdc1f52bd0a801585b3
+Entropy.2 = 02893f95e806c2406474f357480b7100642fd60d5285d6875edc99484d3f2ed8
+Nonce.2 = cc2240591fdd1eb068b927e4d026eeef
+Output.2 = c9c78c2ef52694e85e3fe6b9fb4c87f08ea15617ea974395ce073138f05fd7dac7103f0801d22595960c691167c39273cf95718b9abffdf643ddb0bbf2e3ba74ffbf75782335c6e0ecbe6f16bb71c4b8fe83d34beede6a76e7fbd7852ecb0c1d2f33d54fd7a378a6463b7f934ecba0ba53f01d7583ad1a2a9c9b4df356b3f73c
+Entropy.3 = 77ce1d534c97621f2ee80744e1d9bf2377616823d2c7cd167b7f8696d52b5cd8
+Nonce.3 = f31804771016f0ad9a31c480872f70ec
+Output.3 = cae5ceab734bd0a7d251ba6a7a45c6c7d59a4e68921bbc4b696da1f89d78fe0653aef44d9fdbf088f5ae4d3bd32c8d32ab9b0f64d57d2923f76ca0491b45e87eb668ba157a17e96a17b593d34fcca39a5ff9469ab321aa19baae4a1f2e59d122df8793e6f2934dd976cf7af9e2ae998c87edda134dc57e69e45fda3be20ed568
+Entropy.4 = 0a566fc2d734d538533a0ce4841fe1d10a44edd77cc66be1256298b1d2511075
+Nonce.4 = b83a69f6a5faa05de81c41d0fdfff4f0
+Output.4 = c9673a965bd6415428ed1aca9e689feee8b305d93077eece568f01fc2b2d9fbccf516a6dd7006337852ed3df1414f18d56ad77b90e49f3466480da4a569af87f3fe82e43fe254caac034cf9ae7f51c42bf36f5f073e71c087558535431d80ef65825d8a13692091bb0625eb9bf8b0c7d6a68860e9aebdd8fb21ec4e92f10f2a6
+Entropy.5 = 3c0cc07fd3164979ff8c50fe5ff0781cb8045c2e8c15a2b2dcee237da7f7c340
+Nonce.5 = 7025cc3ec12722eba6356986c8254eca
+Output.5 = ef9273fdd863ef56f6def6136d6ddd86dce70f3152f2d8ca7e01088f00d685b06bae2488ccd2838ef23021a1c4c7a1930d85788f8651a83fc31babfe719f7ac9b24c5ef541aeffd6459892fd97f0787f77a751a11e3a166518f11d334a9d1de8013a96c852d37b6f4133422282b08df20bcb3d7fa077ce82e323f1873fca5722
+Entropy.6 = 7fde6b41b786e28fb708534cc71b9a5781410289c4c008d1cd33537c5f5b03ce
+Nonce.6 = 4375a24ff20ed56d10e657c5e7fa195c
+Output.6 = 153c1330e828df9ace5c766e85acd82cd7f6b014b606ad1fbec25edcd83258cc1923a35f348a03db77c69ade5caf8acf231a587a64bf452f624f5321003d66b1855524eadc4aa1a377ca912c7bf2a20f76999d70214b8c73cd69425c5b40e872c4e0d4e0e5ca4c32449d01cfde062456b95c24bc8f180e2a575c2b6e07639f75
+Entropy.7 = 078abd36f77395b6ab942fc4d45691a0a6a8fef6e2d6f0fe99979c91f4598adf
+Nonce.7 = e4249f9fe55b428199e3b9fa7efe4e08
+Output.7 = e73a36fdd9dfaf858822cfc7ab9de5c52f2450673b7a59b883d7409e230f416c6f60842677af5fb0f57d5507353637de66fb009ecc3d3b4830fa73d7d43f140c6b1359efe749177bbf776e30a054399dcf3faf44fe68756aa20830837a4ebb69d2d625c3dd1fe7d30faf7d523d92099479f15c3f925f4c22d9a2534ed4ad8314
+Entropy.8 = 9f1c1629856c5d028a2b9f8f388a119518a59840ce26d6b532c86406695fdb9c
+Nonce.8 = a44fa5fa6ac291bc784da9248fa27afe
+Output.8 = 3280d36bac6030472f9d0d1ce66ebd9e65d9c529a8539e3d3ed756d9165b94f4a596f390baa999ccbc00228953aa3a37c090065cb2d8e9719a386450e172d30887ff28f59a3aeb71df6f8122509dc81cc42ace912897cd14becfaeeeb92fcba3092c39e0c53b3a067764c2e20b059b04ba483afa3112a50c5508fbf458d6f599
+Entropy.9 = 81d0d864601e76ae4dd377a6f54a79b7a13d179b3f470e1e785b8105a8228793
+Nonce.9 = c8446ff557901336a5d18ed8fbb64193
+Output.9 = e5b64ca94576b22d0d4aa9d808f6bcf7c1568d5999dfc410c53a0fc54f21e293548e7659244a93096946d2eb21de54d687650d9edef5e0e1143a14e739d18b7348fa34cae1a1f08f180fb1d58bcb42b36052aab903b50538e252c4fae93abdbb5c51d2d99cceeaac2350e7ad1d94215cb945123c822de752cfe2db51b5ae8930
+Entropy.10 = 670ea3ac9da691881cda74715653b392309999842e8481c4d403418b37f6ca60
+Nonce.10 = f22b88678125f4edd9c9715a25a222fa
+Output.10 = f25feac8fb189e38659feae84539c62627ee4efee9eb3c959555ea1e0ca7ffe63bc5ddf9c0f71b0f4966269cd1a965be66d5851be3a649b9cd9ba8e06d432765d4baadb16eaef1d3d90b762b6e185cba792fba08b34b1018416a6085689f60d849cf0d739411e1d8f0f535afb16e48c08190392562b74aa7f400e036fe72748c
+Entropy.11 = 8eccd6292fb4ee68fa6bbb3be6e995c5bea9e9d7d9b523ea214b2083b46aa1ff
+Nonce.11 = ade93e693636defb359273bc99f5add7
+Output.11 = d33d9e8b04dae6800ec065a352d2cca3af2c68d7a2f45381a9d98997855ea0392c1a553d0588605729638fec424d0749e53fd267776241a7c06203fd619982c1cac4e48c84a835e034f1e6367403a95f6aa8188a116f76815d5a4efdf43ae89f4c5d48454c4e956bdf2d73524b4c4b9cd92dee7487cce7939fb89dc4e0aa071f
+Entropy.12 = 9b32c52ccbd66508477ac950ddc43e26d4be7ecf31f5f9d86edd3349039b1b90
+Nonce.12 = 2dec9d80c3abde7cc94f07850d8ae7a4
+Output.12 = b00c87fef5816d4707554240a13c882892d383042448a8d71b5ca250bed0f90a22be791135f81c4bb8ffed83f45e0f4c32ebaa1dd6f9992c101784bd7202672f88e7a0eb52cec64f2a2013ef82f04d64bab346f4bd948e75ba922c1ad469975659f82089763c143dd8f872cc4b0d3f02dcfcb4de868434d0ab6d6c5ead89150b
+Entropy.13 = 4637a3f3f9443a915c249cd7a83b8151308cd86c80fca2ba7e45cdaaa44ac1b0
+Nonce.13 = 096f13ff358095cf2052359b95ddd5a7
+Output.13 = f08e0bb490c0bda177686efc825381d1b363cee7a7e9c007d279a773dfcb0fd2b56048fadad1c7e9dbd0f79666bd5c68c4d64a0e2a5ed5d32c74e1bb6e6588f2c382e886e5138d57ad8ba7b31b119d3106ba15e396c878388b96ba57b70e496662a23592d36fc42161453d70a4fa1306c971207c0c44a96c0da7ca40020b37ca
+Entropy.14 = abc502a99b7c3cf14262f6b036925a9904105b019592a2a6be26d71fc42c7444
+Nonce.14 = 40a212f9e1a5aa54f2c7ed4ccf631c9a
+Output.14 = 0e747d83e2104367beca697db9b6bb994061d82aae7b1564f6a0911a1f599084a7ca7c94e232908d41df93a6b416e76146a53b490afb552124fc0c2087cc45de96390565b58f913b5dddbc55dcdd2617ea27858ae7c7748b31d832fec0fafe84594ad7b693cf972daa9521ad4134867339536ed5cdf02a758e40d5d96802f4fa
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = e0d0a7dc4b4658749b4937ef523d15ed5fe24141a0e22856392f071dfe237eaa
+Nonce.0 = c7b9c88df2a8656dc3d57f5fb5a0c169
+AdditionalInputA.0 = 842be51ea1eccc708f189a6e142adbad641004b3f7f8a59d3201dc51c4ae3db4
+AdditionalInputB.0 = 0d6d56191cccb8e99c2d7f06d660ba7a20b1503ec23e550572da59e8877c45df
+Output.0 = 0dc1e0bb6ecbdefdda365c9231ef6bfe129b4ebc9d744b1987c59859432f535c69757344d309dcf452fb7445bb27ca77e333d97e46844b3ee50464713de14e3a021116610af78c164a138f9cc3e3446dc5d5c26c4c6f511d5c55bb735d86b76688b45a9a837ae892e50f850530c8f197ea7d5febc34fda405d91895938cb2e1a
+Entropy.1 = 7b302d6d92443decd1c603b6d0c9dbe219c5c1c24f6a0b675e51c67a900ef327
+Nonce.1 = 2d351fd288a9347b3ececadbfeaa3bda
+AdditionalInputA.1 = d37dfd818fec362200d2714a3b7b29fa4eb47a7f288dccd873e703cf9da3c20f
+AdditionalInputB.1 = 89419ebd3669fcf5db3872b603893a3538b257d38f34475f40e3b937a91f4ab9
+Output.1 = 5a8836845c21ee4261edc66e36cd6bde3d921cad9e9ec394923fb251e85b172e379b01c45fa80eb1a8bed8e91be641822b284b1ae5d9d790af3b41153e4d437d5227efa6ee7b2f18ed5e4b9ab99b85d710422907bace74718d5b674dacf968d63ff08be4d964bd8645642094c0e5c22b079520d3a4df4543d4ca77e4a2e7b173
+Entropy.2 = eb37bd350c054e7dd0eabb10cfdb693b8f0bb8d67f7a512990f16297d5c74ec6
+Nonce.2 = 98f694aa2c7d89bf586b840362b4b7ed
+AdditionalInputA.2 = 1fc1dcdd773cae02aef23eb2e76992904229c620ec4690d7d79423a0e7a6ed50
+AdditionalInputB.2 = 9bc5f10bf30f0371af6db4e85b77be1df26d64204e5eba7766e0af70a7f09049
+Output.2 = 3ff44f1184b42a48c8561385ead05c01f9a840b0967ebd0f847765e4d964550fcc6c05168a85002981d1c90857bf129d23d4c25881e52a82188aa56db1ecfa238358bbe45cc8a0965e082d7699cbb3522432a9aacd83e5aef097ea4c557c247ea4675f88ae78cb8a286dfe30648c4b00ecde039742e6ce53e1d5f3278152682a
+Entropy.3 = c6bc7beb1a4bba40f0e8e6985d7c1b43ce359e226997b50cb59e74defeaff024
+Nonce.3 = 6f58957db3c45681bf062a408038f9c7
+AdditionalInputA.3 = 2f1b3362aff83e37a0e94264917924a0f55c3255d62d925ff4ed16d624cd590c
+AdditionalInputB.3 = 59d01551cae1dbb0f6679848f920d33656d6c560eb7413ff63b9890d7c91e5c4
+Output.3 = 5a5804c33b9a8f7ebebcb0d39ea2580fd29b7fc3463aa5174d40c9fb81ddcedf4a6dca163fbcbc9184ad6db679102aaaec7c414b28db52bc4ac6ece91976dac4e496e7ab65ef3439901443e81fc3e68c117699e5e17400094232f4ee21cad8828dd86d9d19f29ef471b0ae23ab1c407a1e69eac4262c89fd497a4efc032d87fa
+Entropy.4 = 06eeaccdef1773c0eddc07ca8fd1bfe65787945167be6d9a4bcd17b49cc635f4
+Nonce.4 = 542866f5799fa9a7177e889664e193d6
+AdditionalInputA.4 = f5a04d6d642faf8db682f73d71cec3b1b37dd525a154a79ab00768369b2caf53
+AdditionalInputB.4 = ac44cbc8d6a4db3b88e5f8234b3e4c6c5fe692414e15fd594755fb473d9dfce1
+Output.4 = 9453b9e129278954dfb6bb52d7f98fde43dacb76398d8fd0fc4cc7adfc39c92899dc5b1c75d4e2c418ca6967b3d6cc2039df9aa12bf92ecee48f99abcbcb7adccd6766dac6a13aeb04cd86c48db9cc5656e63cf1659718e6e439434472a0b657eb8c29a10a907f7ded9a2b37cb14a0e567be3932f88f0591c669463e656fb059
+Entropy.5 = a1dd4427a148ac81d3b01beed4287bced7c7ed65d2ba818d8d0cd6d7eaecf369
+Nonce.5 = 6a2e4e2e23f17882b8919b1059b3f332
+AdditionalInputA.5 = c250cf7bfbd9a7df188a0bc018cf6b95b708ccd716109d934b62da508401524b
+AdditionalInputB.5 = a95ac33bd369ce6a0b2efa9c09df583e363c82f0f22797a78b3a7339ed25703d
+Output.5 = 8f54b7cb5cbba5340673ebafe57b95714a7bfaa681d4fd559e0d76a994562f42e776a0d53c17bea94f6053572cc127507b5c964996753aeb4df9d025fbf4c21e40164ad7bd6d104786df843f18d978052ade05b70bd89a7346f3e0ec547c67693bbb297d6df3e2dcdc8324e339b1c75fc5cdc251f3eb6f8d6254dd6b70f4000a
+Entropy.6 = bdda95adb55c7860251ec198def364c531128139c255037ecba25d5b25b4583e
+Nonce.6 = c9a942174fede387da76acb0ecd17338
+AdditionalInputA.6 = 7c7acbb66a5635d664c00261f5340f82524fccf61a61ebf007652fea2b9909e5
+AdditionalInputB.6 = 27d242168429812328c5a6e60e08bf2df9a14ea289ee94f296d3e6c95f92d493
+Output.6 = 12d0764a5f4fe65722d0d3512580c0c4fa349a136b2b85d2ce8b0057fa836ca84806f9540673e339bf996cdcadcbd1b216357dbd91a0e53a98be0b5602b24d3ee4b14caf7e8d166f2ab35a91d111860c483dc81ce016f48a993f00aedc3a9243ddcc59be37f1fe33d213c52e03cd66b50730a6705096fef56928cc238fb5fdb6
+Entropy.7 = 8c2b18e46263c99aae4815966ff5bcdbeaa9f0928ced9cef65707db59a7f502c
+Nonce.7 = d938104a2f260e26517d1e00160fee97
+AdditionalInputA.7 = 52eec49185ac0cb99bbd4541f37afb56aee7aa7b042b39aedb6456d9a4ef64c4
+AdditionalInputB.7 = 21f1766f42c31f357849a0d2f8500a7eb2dabdeb5a99d365da1704fc008fcd50
+Output.7 = be0089e27d3dbc40cff4bafb3e3d4defd4b081f415b827ec74b47481204c7ac98bd091cce7277f344274cb68fc263470219c2880728a3c2d6dd9046fb083726a45a07ebe564baa53a4769a367fb85f606b5ef102d68687d23ddd871af71a460795a6851a77dbeba8287b3cfa5fe987623f162292a4507c2dce02f54a0aa3f267
+Entropy.8 = 83dd78e06bbf33068b8f4ec5794efd1f3525259fa5433d58063b6f5c70610b45
+Nonce.8 = 953eef894f770584ae4c202c904cb5b2
+AdditionalInputA.8 = a8b57658fe81812aeaed0596ac39bf3f332aedfeacdd7f06dd9ecc863f72b256
+AdditionalInputB.8 = 7e49d4c496c97cc3cf863027cb8ac8f45c39cf378e520b15671bff3f02fbd490
+Output.8 = 5b30968afc450a87ab65192ed4dedab2c4d560f335d4f05ebdd4be12404a054f3135d263ec55a1b642dc48786b912ccd9ec7f168b7b04d82d9a58c64385257c5e7f79dcec45670324a50ca60346e3f7156223edefcd34e2e886f705f7c01a0832744897b21949bd4198c5ef1d2e55c90029051eb553ba97cc417c0103f3e2877
+Entropy.9 = bf1a422213950cb9a00290feb88dcc48af3e30aa4317cfffd5dc4dd456285eb2
+Nonce.9 = e4cb43d52c62a3abcf121367a0d5c607
+AdditionalInputA.9 = 6cd7aca4227de91d638bf97771ac772f0825d8baefa062a7d0279ac17a088b3a
+AdditionalInputB.9 = 1e14acccdf1e40d5150168321a15ece4abf8862754ba19b566d5c7c7dd037d38
+Output.9 = f2d89edaab4ef395947239a92750c9d5291dd61155c9e201e1d0571f49e9294b6f1093971a7585e5b9b402e4b3fd0319f6324c17ba9c9cc1c8105a967fabae0973cacfb14cff8d296588b40bf7e56ec51d290b0ca1604ac2e4a278b54dd5fdaf49791dde69c510a7009e24dbe31939f75c862a7094a2d9b35b950d059235d8a1
+Entropy.10 = 3123574346cd99ed7f273f896afee137e589c86fd029758270e6edd04d646b1c
+Nonce.10 = ffdb7b4363644eecb036fa8416f50724
+AdditionalInputA.10 = 775c5e8a229036fc5c175835159316faef8c788201a2916df7402a8e9616d89a
+AdditionalInputB.10 = 9cda15fa3f0af57fe853cedac1bb437ab635c474e1e79cf1cd51b57e0be3ab9d
+Output.10 = 75f937d3e6171af73e2fdfd0f63bbd3e1df931fd7f2662aec502653961abf44462b68485c55293652899471259029e321487bc9082bca728cde0d9e87a51af864ed950be1b9e0a07c0c985b87488de169a8be3b0253f3a0cfcf8c88b17258e83c88be7f0640854a286af3c1a646e73eea2c41e58210cb0baf7e26c766a0ca43f
+Entropy.11 = 025f1495a7e0719bf4124f932ae686a6c3935f9130df615d25391296f4329525
+Nonce.11 = a986397d598dbf3a14d929bf2bd29cf2
+AdditionalInputA.11 = 0740edc93b19e1d92637b36abba92db0944daf42f937db25f181130a612802de
+AdditionalInputB.11 = 17553d52208c4825c3be199055a67180d9014ce4ee9536711f9d077786258208
+Output.11 = 4b30fd3823b479d6a76134f03548266c056b5e3818a3f021cff07084bf8a87cf143e9adc9d864bdc9ebea445000cefdfc9b31efbb44d637bc3a893baeab84dc52dd21fd7ef551ec73ee2ebf035010a297df9b2795280398c26ea24089874214cce5f952a1f17926ddd0a074c61fecf1510a164ba39b4d90ade61d378464b7bd0
+Entropy.12 = a40ca6707a803b3c01a9f3cc1b03cef8f9ccde82ddaa49ad2f636ecee4b88586
+Nonce.12 = fed41de8492b78b9a6f0009c617ec911
+AdditionalInputA.12 = 3c266b6b891d27e806b5d9b92a3b2e48aaf7e81538d9d4afb53235bc37727a61
+AdditionalInputB.12 = d6df874c7f49fb343b57c03132f00c7d5b338866e5a893746413676f6c684c31
+Output.12 = cd3e84fd13f899853b5aa41f0ca50370a2ed2b7d1cdf262d9df6ae437a41a0b8254bf7104503d1da1abba82b6e372656af5c986f032b6dc7ffe9568a09afd72d79ad1012af1c50262292566d70923628526eb9f07030a1a1a94d8341b66126bc91d34b291bb59bc0e84c8f7ee4e9b3568ba1bcacbeaec8da43c9d8e0d327e8a0
+Entropy.13 = abb925fb51686394dbfa73ac43a20b6e5b2842e38a75d84cd309c95b5e5643b7
+Nonce.13 = 57e2b9eea87dd34ac574c1f639ed8624
+AdditionalInputA.13 = 1dcf94cf20572cbf3e1b759bb12c8dad888687ebe8a1fd3753eac3717ff61153
+AdditionalInputB.13 = 25e729b21db7c2796fd0bdae714fce0c585ce842ef08f964a4191c2d920f572a
+Output.13 = 5c9d6909aa6d9b391952cb8285f1d99d1aa78d48ff52e5892bb893e29b4dc04537fbe2caf41d58ae139c52fb413a51be888d0e7720f0de0de191f6f6de66c551281dbb762f15425d14a1a2550eef206a55cd57887e24db3a6c1df09f4c9765df690dce0bb44cc96fc989095998aff3ee1b976637d67c1ff02ea1dd2dde692338
+Entropy.14 = 3faba299095bb9f595d0fcc1679bcc814d341c0edcf9b5021ee3d90083ae6f83
+Nonce.14 = c0fcb2dcdf8cfe42c4387444f60c9dae
+AdditionalInputA.14 = 2a8cf10885a141125dae18c40f7bcb7e09c1b2726e22a7f776e4735279f784e1
+AdditionalInputB.14 = 7c2db5278d2336764d274bf9624db7eecad2db11c6622831e47338ea3ef02ad7
+Output.14 = 08ed2c3aa35812485ea8aa0b16149ee4f3207a0368be2035e202797939dd2a1c1db1ab244434edd783c7574bf48fc99f93827a1fee91cd1db1cad53512b6931d2d63018045b2a50a9b523a6ee212fbcb21ffa57ef998b4ce24e5f2f875a8ff3a45d8602cd56cfefd2f61f73d00dc33304a464f4fc1f7dd311b516a8da4e91151
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 7d3291d6d076d9e6b3a071290ac9ed8d361111dccc2c601c041d1fb24eb9ffe9
+Nonce.0 = 85e9cf73b7dbfe71bfdf103d465ee8e3
+PersonalisationString.0 = 4b20012ea864d2ec2f931ac12078d57a5c034f9991f01b495d9afc70fe13ea88
+Output.0 = 7b531bbfe9176edfe963acdadde9a28f85db1a40d6e898f2764b4aed5ea67925362266ed3bce1e5c4053c011cda9e2a7c46681d15ba493fbb96c75b89907e2f7755f3db8536fe188a7c46484afed6f2f822449700644c9bdc5a24a1cc707d5d4e993f02f39718e866b8360c7e24095b918c1ca3e3f45ff3191ee80c21eec0c8d
+Entropy.1 = 0e05b73a9fe19c76ae180b9c02318647b6c55cd589df8bf4c822ab8e0ddd6882
+Nonce.1 = e6ea875f5c9b333f3acfd73c869128b6
+PersonalisationString.1 = 86f0debf8b2423693597a36f58db2c0b25a67d3b58fd9cc0597323a0121258f7
+Output.1 = a9a66c8f04cb50992d44d471af7718b0c79fe5d2a9fc3568757f72a94c95fc737dacee237157e6f38ec4bfbf6491e09cc1609887db5dc5a5e386b45ffcec6e8747f26023156afe6febb12e2c13237077ea24d46d7f314e1468afde13d8fdc7f9d9f8b6d11a209c1e732932a227f2a403b5a2f3e25fbb14aa088a14acf5fe7311
+Entropy.2 = 70a1f74dabd03952df7d3fc226be8ab3b3986242a889b17a596bc06e964333fe
+Nonce.2 = facece933b1bdfbd9ea73af227480e15
+PersonalisationString.2 = 2d96a92212d66216e5a928a7453a4b13a985a8817934ed788e694a10788be77e
+Output.2 = ff3c9c4f19be369d3954453c0ebc0f6026913ef9e8518a553ed5909cbee6a9b2589347f77b04510a31d84f9c3578f95b0bd67c5843b0e1ac4be8179225a74c9d681490eafa0032883dc89e481043a7a315cca9a3df836fd61baa1e02d5dd02a94dfd1ad66564c46c0b61def767a8a590c6e97a4002bfbc016181741b80d429bc
+Entropy.3 = ef6ce3ccfba08d79c79dc8bb6f2f8eb10f290143511ae9b71a7326d7e4d575c9
+Nonce.3 = 771701a66a88b411c4b6459be6ab5e31
+PersonalisationString.3 = 2eed07a152d24f7ac3b76289bf9943c20e266dc2d6cf8013513d57e12c62100b
+Output.3 = 6ebd8cca433cd07d773ff61cbcd6fdb54d6a1dfda56c818cdb49fa1028f20dcc96a16d2231f8f3d9b6656544697e91d1d06590974a430796a9d13b817bdd1446ea80bab76b45ccf8c293a4b8d359449ebfe9b71c6284d7d0c63295700b44e9c40688dff997f4662afa4a8132f33174d2111db500e629badd2275783640ac1e3c
+Entropy.4 = 641a1c607e6cc3c3af24718920a5b4c6b6d4e531175df6d3561c35f729a24534
+Nonce.4 = 6e36da6668ce4b9b3843f893f47f28f0
+PersonalisationString.4 = 471e8d2158f963c1419a402afb7b4b9f3a1872dcf1a14acaa4fd7902635bf95d
+Output.4 = 0aeaa5bd2a6c00d13561cb185216799fd9544b867e6cca43931ce89030a5e095e4dab9f343554d344c55369801e74464d173036dae9c1ca6d94a057c49f5f39d9fd5ee193c2d36c73f9d2d33c016437f129311ff6e489761bd6b7b8c60cba9fcacdf848cdbdbdb918247746a3a7434024e1977f697c40fc128d5ba14ac0fd76b
+Entropy.5 = 7122ad64a4822ee6adefedb4d337fa92d7fd48d81507b87a760d6b37a0e100e5
+Nonce.5 = 0203d0fb9f1a9ae9a44ba86b91152548
+PersonalisationString.5 = d7bf3d8dcfaa8fbe020cb4b9a8ecadc05581c14475f933630258042454000564
+Output.5 = e24b2aa865c8e7f542f23f7ce2053325b1218bf9a47a306697e02699e23530754097fd8bbaba09d506f950d3e6f71810beb58c560c91d827f07dc6cf5fea6375eea833c37d60480e9430f90ec10f370d24687d5d2ae32a4245a3928ac39ad3d61989217bdcd46314235265e6584d819927030e7a051b270fe247d4b5568d829c
+Entropy.6 = f5b861b5ebcecf356bc5d2c03cfb8ba189daf6cce5a3a24f90c2f7d6d8555ed8
+Nonce.6 = 30ea5c420bfdf54b800714a0ac847c8b
+PersonalisationString.6 = 7795cb039bcf99cd86b17436ac4284cb7cf5abfd0008bc4b2f156de85e194d02
+Output.6 = 9a58409e95ddc0e109635341b294068c9a0ea7e05a1eacd50f1d24ce82c76d715d9efcbb05afcd7c5ac67be14dd6a47c18ba346c8ba8459b2283d5f89763ce84ec8f975b800e835b18476ebeb67aafb3b5688ed5280267f3eb4e03c9e61c07d974d2704acd72d0863b0ba5d5ff30628c0f5277946693494f2d1128949375f606
+Entropy.7 = 1d33127bd3f4c528e087da8bdcff8c4877a670cd2dfb174dafb9186c1e7d269f
+Nonce.7 = cb9fdf934629bc19f888c9b059330844
+PersonalisationString.7 = 101d8e44a16f1368654c4beff891ea3a0931363492615b2c2918037d44a9cdc6
+Output.7 = b9c3381e5552fe02c26c4e43710be67f22f004c1a649fa216f0941958a71337c3412886129ec129cb9f6a762cf08262ab2dcb0e66451f09f989eb06a290000b0f80f347da535d7cbaab14e6df857e82e32e80196f7659404afc6c65b571c827d33520eb0755e2381ec8c09989e401ec112649cfaa0bfd67189c64a53461a86e2
+Entropy.8 = ab98afee5eb805593ea3413acaa93e6180830f97b75a3fc91b58b736be146a2a
+Nonce.8 = 806e7ffb3d81cef8a885ce3e96c0e7d5
+PersonalisationString.8 = 8e55e5cf1597bc5df1dee0861920dd53904756079f41b353b9a0b7a3f3c424a3
+Output.8 = b6979a7fea87ac176aa9f443830bca91cd15ffccaa66c9c8dc951c7704fd411847e57f98b556a88b3fc434ca28a32a9f3f6c1064a157aff92a8f3b2539d9b14a02707555a6310e9ed65e558dc16481e37fec86c5d8e76e2f955929fb500d5310b7925ec02b1138d3ecc03f6417bfbd08337d570d06e2ab0416c907dbff8d69ac
+Entropy.9 = c65c7861159bcfd3f41fe8deaaeefff7d72471acad0bbe1cf649213cbc714d1e
+Nonce.9 = da7d7a885d4f2a70e6e7a63f65692617
+PersonalisationString.9 = 4a60014f03fdde58489d4c69bed27c77ac0f5954ffc8035c38ca428e7fd5ac32
+Output.9 = a30e5be5b7659ceba62f403e0cc4205f66eec07f573d76d06289ebd1e95ba05b397524fe09521c2b43b6ea515c56c14396c90862809233830f30ffe42737161cabe63bb506b3809f490d144822949e91ef90799c121158c3a05168d1bcaa9e0fcf66036af4fad1212b96831959b1927f34ada29fe1ed5893035fb9775a7df94b
+Entropy.10 = dc6199df22e79756e118c614c47a9c1f04968865c23220e975fcced6055ad950
+Nonce.10 = 11106c761eefc1027b92346f87747967
+PersonalisationString.10 = df50bbb118a5d2d90a4b6cd6e8bfcda33cb05c9d96cbd462fbe5f788f670b261
+Output.10 = b46bd92d1c1b066801eb2de82553ad94f349a9807f685816c63d8a2df30b7d3e64f455ad7ed6c2ea08a0efdd49edb2ce47d07f9b6e7c1f932a95c17ed41aefdf7a134f46ea8ec4bb4032bcf9d6fca6d0c5a8cd008721c24a84dc0befc273ef30baa66ab0e16010e31cbc786cb1590877b5cf966e4a4799233420ef9e25627e8a
+Entropy.11 = 03d29e87ef3a123c7badcfd46f097b4ce64451951548e738c3c2cad94578ca61
+Nonce.11 = 9d4806651f69eb9aa98d7faee7168dca
+PersonalisationString.11 = b84ee132ff8a937fad8364d7d7ae104a1d3a5d1c372d71dc2ff66f9800c5ea1c
+Output.11 = b0865ff00606e9c00ea87db396b68fff02697eb73974674f301af4b25b638d49e77b585af645e1cebc0a52eccbccb97440e9557b3ab27bd35e7524169810154830ca6295dfe6c1a9e19bf742c03e091f704c98029a44140a59dd45de7a9af35c2bebab8825f053d6bb36e0e00948c91a5eaa92077b1e5e0e97721883ef1f268b
+Entropy.12 = 9c551d477a9d1ae2d04b0d367db759db079cfa3fa4584e0f664715c8251ca0d6
+Nonce.12 = 56d34aac48cc7215f15912307a9bef55
+PersonalisationString.12 = e0ef0bc324051ee3edff8f371ce45b3259d5fb90b051510b4fd97d12943e5bac
+Output.12 = 760ff9435000c1122c31d6a9d68d94eaa10b2ea4b1f0fe1f7a8025592ce59927d39b3531410a5c677381749df30e64074cd3e9bda5d1b10484287ae603d45201944f115edbbf15383bb2867bc69822a84973d59238cad311a47e664749c96bc1f2c76e01a5738172cd51fea7bf2fd7e814f4a03763d9316e5bcac3b551e67edf
+Entropy.13 = d5a74baab8601262fc7f10f213567cff06b2e56b7c55e9a833cda5f5d0cad004
+Nonce.13 = a961a671739d2de3bed64bdb2227066f
+PersonalisationString.13 = 5a85407652d846f446fb84071413b1d23ce2c04daf8f530e2c140074b385c15c
+Output.13 = d57263867580d234ec9a507a3fd44b09c749ff649e80c6990b09e5c770f088c2b56d3b2d0a0513d3cd7a917e3abbe102ade7c88b6772544971fafb4f09679659d0fc3447b43a39e6fb7f3107ef50b68980b313b364d3c9c02f8803da0c425f6e963feb5f087fa51128ca96e1ab90fc86be3fa11ee4c253ce4f4a386e734fde9f
+Entropy.14 = bf2cc11cc54e247811897e1242274b4f4f52018ac60b73fe9df8972d3104de72
+Nonce.14 = d5aa1d24b7c7564f6836f626bcc6d32b
+PersonalisationString.14 = 4ef1e00dcda9e893d066ce48cd291258a29e0a234796c30a6465079cbc3d3aa4
+Output.14 = 43da46cb7b737ff7617715e3a8aa4c42d8cf1b62f32ea97d035514a10798f5bcaab550eab684cfbd5c8d3e1ce6d9fb026812e647ae6a50d3d8da8e9e2f1d5f7fe550e7e0b88e146925f2aa64690e1a5a5de152f6421837c15337efa80fdedb0a4754268bb83fcf0281b05b3885dc64b87f1da61b1ab219779ef44a1399b992ac
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 4bb71d074a7918510266f827ca1b33905975c2d999e9066ab213aa0ad00a3152
+Nonce.0 = 87758cc57f2b197f72e80291209731fb
+PersonalisationString.0 = 002ded7492cb7ea5d753458fd886736b9e146021dd01e1b0898b51222270a428
+AdditionalInputA.0 = 6ef45c64221e317e93895845d498de94966e01a6ca3a9e84fb4565f388738604
+AdditionalInputB.0 = 1bdcb926421e9a8a23f1e1ea948b1d60ab2ebc569b9e89c8d644042664a9af37
+Output.0 = b61b548409f45e3a8d57f2b1542da3d120396adbd5d7d1f65f871d8a6a12478875d855f777c43b0ca819c997bf00a14efc0882753a52293dc92f373332f027edf133d9ec2741edf080fea17391be3bd66f345f03aafd6482f3ed79fe3af7ca02ebab77efafcb71cee6831043621905d94032b1ba8c8990a05e34f383c8a920c5
+Entropy.1 = 78b29d0b561bfa1da48813409bf29e8bac44964aca202cbdb987a04fafb856a5
+Nonce.1 = 0d7c60e7066ceb3261d4307ca5c13df1
+PersonalisationString.1 = 287dc6cf22e6bdf928df8eddc130e90bb0351d031d23f2ee26e308a3cd34f990
+AdditionalInputA.1 = f633edf6fbeae2385c758b6c05125c27bede61081597dcf49bc6a1370fd4ef05
+AdditionalInputB.1 = 2b1334ac80215a9dec28cca031342a67d9a0cf97abf982818d777c8e57a84bde
+Output.1 = 376a4b8491382e7515ff53a46075f69ea20417267f298fbe50d7fcfa376aa73e681ec54e54a3a9bcc3122e7ae6e735c4bde2fa8ee6606444f20ff4929e00f9dc2fb6f423395e79ed1fe68b0099c20990074139985f325090ac470be57c4698369198efe7be568582fb70e158512a21afc75d366f1587723e6fd234fa82da1dca
+Entropy.2 = fd1df2dada2b42f0e60b7f50158c56f101c25ce4027e423428e4f0c1c3dcb3bc
+Nonce.2 = 1534aa910ff1886b94f504877cb0cf35
+PersonalisationString.2 = 9985938153af7c71540806200bdd8d34d96d8760e49f640ec85642dc17470697
+AdditionalInputA.2 = a1e37d07f3d66847e10c2f390936d613cd61924bbf11cf9b661d4734186a9274
+AdditionalInputB.2 = 41c919ddbb27809ef4fe4a0913d8e1a72be24f41fda73474daf40748d06e6ad1
+Output.2 = 835fe9170519fd28ed6215eacc7fa12da2d643449648d51af6254e822e9755e8b4b296065ac5297b6346937ebc2b2de81aebac963fb6aea7c285acde54692bc2643d261006eb833bf83d970ecb4077259df6bcad04dbd16912ed9df3bc292b4ba58c2fd2d8c6d5fe2e9281aa6dbb2c771abb8f0baf449349542796b1689771e4
+Entropy.3 = 3ad9292320d9c7c91f8aaf15ed92dfca836e189251d6b84b8777958f54f9532a
+Nonce.3 = e7399a99975e2cb007e1e1f5d6e6b9c3
+PersonalisationString.3 = b032d5b89fd43ea6b245d8ba4f8d33d669eba0fdffcdd3683609a5c24f5d4f63
+AdditionalInputA.3 = 22d27bd1a3e3cca2b4af76d3f4c4bf6c53f8bff1f27a6492ad6bfacabc51ba7f
+AdditionalInputB.3 = 2b990b5dbc8f67278cf34722861c4b6836d299dc7243f497411bc232b030145e
+Output.3 = 86f38742f138437c0bd122876651f1c3f53a4647f5d45b941b2c1a848295f1f35c91c86c62048724c43be820cb5c183f60a792cad40f4fbc8efccb4886a8d703c6697c02a50df6e6797cb22b1914e874a2dd635b90491a2d4af76c318242bf7fdbe0ec5a19498e637791a0e63fe28372f12ef6f573d7b15cd658fcf7cfcc2852
+Entropy.4 = 0c86923b8da00c33e427b3dee30a31d1ccdb9a52d93317930647ac62b49beb0e
+Nonce.4 = 1c13fdc25b4116bbeb7ee8a4ebce8d21
+PersonalisationString.4 = 9d5ea6d69c5b41721f6a70b1d6ba03eb66d656503276c800b62c959e3969786c
+AdditionalInputA.4 = e6913ba38baad8e9ada8fd4df657cd15befa47b73f310406c7b5fe933ac2a189
+AdditionalInputB.4 = 07a3c24f8c84c9ed496794f91f38e2ace4dd87ec0824b50f26c83906ff0f5b90
+Output.4 = a533eb5cf4e7e7030cd99b83559dbeda02bf6f4f4cf65d2093ca5eabdd6c9756b44c72a739951fc164fb250addd5b16493a8d8ca1973f277924a34900017437a08e1df78c32923e2a90fd405c4242819e28a976c36d80245093251c09e2fd8f2bf09d7d68912c7a2447aa6a0effbe9485107bbeed529a12eee084171c3aa9bbe
+Entropy.5 = 8ec41df314f3e83bf523e074ed5d95f3b283a02bc4d0344a018c5337076c0a4e
+Nonce.5 = 63e9a3825716ab2baee337beaa02be4c
+PersonalisationString.5 = 5f61772db899aa4a311ec6cfaf5b5084b7ede2daad93e625b41b4fab1f392a9a
+AdditionalInputA.5 = 4e06b930ee8e733a06c0a27ca0a5c4619f76ec40e1bc2da8e5ddc6924aec32ad
+AdditionalInputB.5 = bc8ca78161d58889fb44bb1a9bd9ddb7aa62182f569d8409a5e0bd51106e62d3
+Output.5 = a61b58890e8fd7938cb0eb267ccad80eeaf8afdb5aa402bcd332acd702bd1d971ad10c028a07dfbbe224a82ab13c9405c2dbbbb9ce781a04e5c719f3046f7d9700df1ac4b99056633599f617838b8d345e317f6c438e5f524c16937ca006381a4d2ba690a1538cddbc040fbacbcd124578f02180c397f4ac537969f761b6da3d
+Entropy.6 = 0b775ed04ebbed443b3b1a060504d02367df95473a0f950fad0b44e2b20dfb05
+Nonce.6 = 516be332dca34844a36086d4570c513f
+PersonalisationString.6 = efa41d6ed6aa470e28508e71f1a03cd0b16f2b47e6e8eca90da7db66380c86e3
+AdditionalInputA.6 = 9fa5da082d44fa3ab3c47e34067bd81d266787dfadc438449823f7478aa57e4f
+AdditionalInputB.6 = 9b0c63fdfe85b1989cf48ce4898aa62d8734ab477c3b1387aeda070911913db8
+Output.6 = e7fd604da5050f8dee29068aa65ff7ee93f48fc459a5e3a4499e429e309467f094d931406e183e13310e6c52752d17f86b224a77b1cbef973dea369ac565be82f6656d8952b66ad241f74a9c11ee1802c237b0a9f5e5655e7de7996b9a7e6fd5e0d837fae44b1bfff7fc7731038e390ae3fddc36d972c0446ab3726935437983
+Entropy.7 = ba4a457de181362612378f0a8d91ddeee68ce64db6766a2be01c2e87ecbdd88e
+Nonce.7 = 8eaba622e04a14cb0a08232109a90c66
+PersonalisationString.7 = 819905ef1decdaffdfff08e7eee33bc2c4eb70710b66fdad28d2ed917911357d
+AdditionalInputA.7 = 1fb810ee6d4a25478f47503e03298457ab985c896d1a91bc98f07636e0374c73
+AdditionalInputB.7 = 4c4d40679dfe61aa13b512ceb05743429220c38170fb16e26e698d2172245acb
+Output.7 = 75c91cb632eefe47c7672f47a00ee40bbb301f2f0163b0cbd243ae0acf986da42374c59e339f4cba815afd06ef9d1b1c5c47a474fe27706401ec7a58c7974e4048b9f78a5c4a1ed4906ce82dbdabc1337b19cd75f2d0e155f25c5298968489c7eb7b6784352825d371ea4523bb5a66a7f3472aebbbbad2eba7fc522059d816f1
+Entropy.8 = 2a49c5243ab6074e38c7dc087828a6707329c713c61417d499649ce7eed92d52
+Nonce.8 = cc0ab3694d07207989624b08faae8024
+PersonalisationString.8 = 3e5bef2b8d79a14c23a946dec7095e56cf197e1b397beaa310c25dc2e2c875d8
+AdditionalInputA.8 = 63c5cb3fe315fb0756173b9c7abd475c1635048d138c9fca8e8f31c94757cb34
+AdditionalInputB.8 = a32f9bb6c0d74edaa332c70a4d1f081a306a309816a25cc1ae1093651ab4e10a
+Output.8 = 39acda9e511780fdfd83dfeef8660ce20135e6881f559a1d919363616664b44a255a3d7ffefa55fdcda6d090d8dcdeb301b3c888ce7daa9521fd40376fae97390d9f33bd77a008a0f6bd56107e169f588c904d184d5da0775aba42e1683a8a2d30ae89db328ad65ec3c8fc53b06612158f70168934fa552a5a684807765b34df
+Entropy.9 = 834a02c3f2318347302892525aa2aaba338c57388ec7ae180a7b3143eb78c1c1
+Nonce.9 = 00f39e723b85c5466ba5e0b0d151fde6
+PersonalisationString.9 = 1d33ebcc8967e48f72e2cd79e2c6703aca216482aa85224e8bbc8d1bbd88b53e
+AdditionalInputA.9 = dfd430f17d253ccc85bedaf2d11cbeb31f9e8695c7db47c581fdef9fbbfbfbcb
+AdditionalInputB.9 = a8e58de4315d407ce6a6d18421de5d719e53c137ce93bf4223142eeca6c970ec
+Output.9 = 919ea28acc4213f1b2da34d398c0517f5308e82b68bfddf6c762b85298507ba83c38c8c4f06c543a0bc346d0a363691325392feb3fc372ed790918f2d5d5d7d110a775a85d0b722a20eb17786858ebdb0d4c6f2eb754ec7a8892c7c0e2bc3a8d9e0b506e5c7c19465bb9239112ee59c5ae88f0fac046ed4df7d2e67ed4c3e2a0
+Entropy.10 = 2ab17f19b3e8694bc48ae806389a1e7e0e48165215d5e3822eb62436a036f34e
+Nonce.10 = 11292bf1da36f9c1cf4ed1b8812e40a5
+PersonalisationString.10 = 8ca483d392c9e54b2bc6153e37eaa5cb2827dbe12da79f24e8d0c521d87564c4
+AdditionalInputA.10 = b2bcf6d506b7cf753e26301ffe669afb72f822241c3553cfef78d1db2a2f576e
+AdditionalInputB.10 = f9eeb1e416b4fd7a0d9d77d939c74539328d4ce45d1a0f914fdf8de3fa20d3f6
+Output.10 = 45659764dd888148cd38359fc498b7718540dc8861052eabf35e1fd12a744724127feab298f74c697de786212b54e7beadaf3a65ec1557211a0f8540db21899a1b5fa248ec5913f38e72cbf419fd51e136709ff1c95caba7ee165cdfa8d855bc9c8a04ff605f4486e58b9cecf4ce3d0c1f93ccf275da82c0272f14e23b00a483
+Entropy.11 = 0c3eee185623a91b1bacf3985cd8eec3aea43af69c0a13d3157e72770b97cae7
+Nonce.11 = 8120cc51fbbead16c4e2aca7e426cfdd
+PersonalisationString.11 = 4747d849009ef9fc3fe575a59f05d9b5b436eaac9aa1ad47c8c8579feca791a5
+AdditionalInputA.11 = a58f3425dd0550fedee553e7959acfd15bee30085bf82dec19190daff4899d56
+AdditionalInputB.11 = 19c192cc73b0326cd5774219c50ae88e90931875959ce046dff88447affec518
+Output.11 = 5d6a29ca64e883ddd3c71db3b105670495bc6af1c89b5b5ce107bb3d45de616ce1528435d4bf497616db499a1b2d7363048a56930297632ec565ff90b89191c69ae6783d665c3f55ab10da0b8e38460a825573d827d3d3f6126e612e71426311f7324db7612d6cf0b1dc5daee2e69c250ca7d3932cec81291983c7ad979064f1
+Entropy.12 = cf969c2b0fbae5b10d6e8dfb9b7cd7792d979ec02a6ecd7a3438416b160972fc
+Nonce.12 = 96015ec100068defda4ccb6a1be67a2a
+PersonalisationString.12 = 681e4517c2c171ef6403fe6f871c19188dd86d1df8fec5f2f73570f8f5d5dd56
+AdditionalInputA.12 = f9bcb08bb3edbe09e0c49a86586b7f1bf211f44b88507bd0f63fef7736b67586
+AdditionalInputB.12 = b854b478caa8446f9c35f7147bb23ebedd838fa11b3c447e73cd287c717f0dce
+Output.12 = 3c2bfd58d0fcda5224a0e4b97e5eb079946d8645209270e6f1d5996d52b836549bace9ebc1146e29ec9adbbffcb88e7452d917f41d61903754f11a8ab20f2a7d70f56d453765fa47d0a62b82b7b328e45fb3e09db10d6bd3b43a422256b5fd52d32b7debf080bff1e6e69a34ade409822136a6b6ccf05c9c30dc9547a841cbc7
+Entropy.13 = 3ba983ced5b33c894be227e66563e30421784d3a4a5946254fd2fd3d9feb20e8
+Nonce.13 = fc78fd1db8a42289428bcb8f6c9b5d49
+PersonalisationString.13 = ec72929a30306abd19079906afd105127c80c617a354b96f6836e4ba10624ef9
+AdditionalInputA.13 = 21dec4f9790753d65062dede826436a7ec0017a54705272081ae8c587c27d163
+AdditionalInputB.13 = 9d9d8efb6b71d0e23d0b8e57762eef874717c978e581a15cf21921eeb03ea09f
+Output.13 = 9ac57f843b5780b72007eb1ea44036c17226af3f6c35edad00ce2a51464fa565eba0fe16c56a1a3b710f1d2a9ab155438380c74ac056f60d59babbac202baa0b8f11d850ce6884868222fe045c5eab6d346082429743ffd1d2da488cf2930d50eeefea4c1ba755c643e66c33b25fd35a653d264fe767c30cb949141316aab1d9
+Entropy.14 = 6d5b369b8e65241a179177d78fba195841d8b8c1941d3a3a85b83bc0e09a13dd
+Nonce.14 = c40c452fcddccab9af07625c075774f1
+PersonalisationString.14 = 6bdd668cb196eaee5fcff0a2a82b8b82d5d93242a019d272e0f3f3e67addb891
+AdditionalInputA.14 = f8dbd6a405435595b2520bec5026075514955a666e4ca34b7d0339b0a0bc5edf
+AdditionalInputB.14 = d9536bdf1c3944d4d239b6dd13750c16a2780d943d4cb5fbbe418189a7d65432
+Output.14 = b5e12e5082c09fbdda81d1a2229ef9bd46db84e62ecbcd1a2c4e88557f8ed3b5af740fac2bddaaf441b66084ce2239adfc9d02f001cd23470535f13ee6ed73256adf902b359930093ffb293a7c007074582a356529ea3ed9a5ac0a1a3f62df5fe09d27f5a7ac6abdf1fbd5f5e5da70da5e3037fb062d0817b077b56457238108
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = fe9b6c2334c269a392c5ed8a4ff77d06fe922fb7bf9ab4c7352aaf0de6da776d
+Nonce.0 = fb7f12b4df9a75bdb7ed921104199b5d
+Output.0 = ee11a047215073a239e03437b52771b10e694b7631f17e0150dda9a9691ab0a6ad81bfd769ff917a70e236b5bba1ca72619d53adcf842a4b6fe83b3e59b8f8d1a1669c817d2610c24eab7630f6f938c6730cf48d4994e60ad7c53176ca8d08c3f6469ad5f606ebd55c52eb24dff018e1fb9b56cf09142f07caea0f34f5e00b0c
+Entropy.1 = a2db33f32c048711482db06db1e5d3af17ac7426ff1fcb2701900d482bd945c0
+Nonce.1 = b563cbeda321e919668666dc7e162a4a
+Output.1 = c9c222e15590a4f3d82dc165433a0680eda7c23c063e4ed2caa7b86ab780c35a59e5d5225b6eea60b3a704f5ed52f8e350fb2b0bba5307c950496161b3a11df5b0eece7061bc2491ed3be81d4b0e461d8392bda2461e41e0da9d85c6ac7d15f1214b9327596e871a1f3ee556adc6b6d6fe47ba5d2aa6937e4118de8c29220e4e
+Entropy.2 = 88a069a5db6a3313256c23461393abffdbb11d3c5dcdabc7bb78edb39d1dea03
+Nonce.2 = ff6c48c66d2e0357a72dace011d92ec0
+Output.2 = 84d08a17413d1727443b8b72c961fa21c4f093fd657173c733a67f19066ae5d32abdf00e1456206783f4ed23c4f4928371b6faaed5149a0db3adee0ab8ecc47080249d5b3c14d90c47c543a139d372e23b1746774ba1315df9cac29350e46732b2177e59c9e0ab61e6d6b8a71b6f60a65ee9c50a35d76d2e0e434f2a693be919
+Entropy.3 = e3641e0796dc42033faf67f1e1d609c645563e76bf2bec43cc8cdaa9fc41077e
+Nonce.3 = 6f90f968df06e204469e818c9225c148
+Output.3 = ff0a095631436e6a18f333bd44a16a1cd4080d139d4f7b76e4c1542206f32fc337c49269bad2f1151ab653a4e7eb817874de78f9ef9577aac9613dbbbc47bf0f2fc5c897dae6a3d9e7ce17a8c4ed3b2d223888bc40065f99c94d4d45320c6454fe185146be4bdd435eb5a62c65cde2fe11d876a427324d1f2cc4f4e3af528ae0
+Entropy.4 = db7ad0ebf06ee1e9f49a7dddb8f628636816d7ac328a01079e03ccc9219b5b81
+Nonce.4 = 4a44b8905e98a49d430b181ae2c1b6dd
+Output.4 = dfb897020ccba8f056d1f47adaf9b6b888092fd5daf6fc9d10d599c4f970edd825d7c56ede6ce0a3e923dfa157b878da91777727c45d14f226ecb0603a0f0fa977c7c460bb4c5fb1c178df61f9080c9b05b1d8efeb2a54f7a3eccd4ce895a05e4c3c86e431978a1a89b0fc8f9cf26aab4366b0f7ce4f3dd4667b894662f5a265
+Entropy.5 = 92c00ef70eaa84528ace8f35c42618cd71c72e99559e41356a42c91d29160090
+Nonce.5 = b7dacfe6a09f6bb5a588bdc50edf66c9
+Output.5 = c0e06b14db9ebafa978370be67a59ac9075be6c3ff621747397145371ff21e5da05c30e71b6a415b41216e7351a00e00c543c112ce3a8feb1cb8fe9741c6d31ff03870a801c006e4f57d89fe4fd7b493e9778ed6e4673b0adc16d6c47da7b7cee80409cc8574a07f0ad46105e71a5e7dba1bc9f85345d517df8ec53948cce316
+Entropy.6 = 479ddf4478411867824f86b18c159054be3b48f5c655cfa7fe6da514b26bb974
+Nonce.6 = 62547d3daf0ea4647d09d40faf09f5ca
+Output.6 = 8e24fa8cbc3011298eb6fa07445c74522aad747a7d6167b87eb06246b9656f79c1baf974b7d7aea9daac4d2264abf78dd8e5ac1050087da3d9a7a063b7466994519a3a26e4016fcb4a383798174ee81923424e372bd83a00addcb710ac4a2117e84d0502d68ab5d75d904d2e92893f46ccecfd37168fafdec026c88792b2d811
+Entropy.7 = 3f4cb58417d504cd23757e6607dd3a94e716e510617830caa1ca6b1a5e114a73
+Nonce.7 = e6212e3bdc78a7b3f4a610a3bc3919e0
+Output.7 = 59532f9b5d6703ccf9e1acef2cc4c6ddd4de929793bb03155f80d9e11dfa9d031fcf571003bb720b800e2f8fd0ec919c9b6aac84e4f545292cce04024e950c7cdd6b82cf2c91ff96e8486a8876d542a7b5e8c3eaeb8ec35be5014b5d481a821116c1e8d92301f18317b03dbf1334c4e5e24d4b411734f190b1e34b9da22eec02
+Entropy.8 = ce49b19e177d0dc4984611c5b9df1f9349cc10d2a7793b67b57bb95e175d10e0
+Nonce.8 = fe1b91478f1facebf85bf51992b44f0f
+Output.8 = 4e73c6806eb381de46b6c69aa5a35c09780bb426da1a17a95dc47e4704145a28486605d9b8b3cabe7508e1c7b8374ea1ef5004152a992c1d6907c1fd6d869de68dddb79ae2deab7b99eea5064b61fff3cf2d2a5af3298fdfeb56071e054581a370ce09dc78de5790af133fba9bf01a21dd7954c3411244b2230cd85e3f1dc37a
+Entropy.9 = be930d99ed2a925d47b90e89ebf312c9f71a3b1d615ede518c4eb9c1bc93f2ec
+Nonce.9 = cfa1e14da2b436fc3209c9a75e451f10
+Output.9 = 6f31186b46098ef0a750e5942031f3e0d1965d17b2e10f2544bb406e4a3b6e5794f8d06ce020a4384c11bdbdaeb6f62d5dcc98730c7e6158ab72e4bd0210c9ee2b97f2e0542c3ef4d8feea856778465d10382c6655df2c50d0718fc6d952cf5d980d9d2d9cf00a31eab2f0e8661180865590a621dcdedcf9e54d938370bddaf6
+Entropy.10 = 1164a7d7f1b9d9a0598852e85c0f885689f52020035a5e93ac558d1eb85a18cb
+Nonce.10 = d9ebee23642b2c052e342ef82c6eea20
+Output.10 = 51791e3d9825428ebd42c10c3f6dc092ca07d6fceec0e9548640f53e10a2d294d83d05f08d106a66f00bcd5133b11c89ae4c90bf44a31483066e810c177d977ebeafd3c89daf86514f3782ff9249fa61e7d1b1797f8993441beba0cd8509068c25bcff8bae8d9166b344ea33533137a7373b435423d2704a456a22ac8d633dd4
+Entropy.11 = e1d85c9e21dd1309460b37a5e284f38bd64b2a7adc8cb1291ad4c31d44e57f20
+Nonce.11 = aca3b5b40fdea71cb2fa83f46ebbbf1e
+Output.11 = 5986bc351e62f8c5f3e7a8a74b264090b0238697c30667031caa494417205d464e46b8793b9b312c28c69827cff253342af64ac21567e17a42c9ab4dbd556449359f9dc3eb7e552a1d90f93b8df61d1896bcc8600085505b10a37e94316567df57bc32f484deb52a3962bdcce0344deecf7b828564e2cf3a24f5b8f346fabdac
+Entropy.12 = c400074480f73ca5f473ccd30955ab8f171b7e0ad44058143065ad787c50bee2
+Nonce.12 = 421d249079f8dae96629250123934c35
+Output.12 = e540caa7a63383c62625735b8fbacf538b97040b69f141154950e144ee15530f0888dde3892901a7478617ab66e80dd4f40707bc5bf91fc68fec2186ec6ef34dd4c545966fcdcd1d52506f3c6024d34d788ee72270905c3378719c0ae37e49cf3956fc3a8e88fce4e9d75222d6ee980eb4af921cb7d9d484be2e74bcf168e3df
+Entropy.13 = 65ed3ceadd308e43a496770ac71904e24f8024466d9fc2c6d754b72149a93d7f
+Nonce.13 = 64da0dd9275d2386c96e144ebff60ac1
+Output.13 = 098ecac859110d81b02268ed8598a006d440f8897116cc336014f5bd5a02d2eb7e0d2837c1f6fb8512c1ec2daa83c7069586f87bb620ff11c19b6d4a731130b1927c9df11cf1bcabf53450667513b68e8b7c479dc689822cde4596d59b8b081cdb4e971f46d4be88f6bed69d4a2ac6c6c3a7a790acb807115dab459d69423e90
+Entropy.14 = d233eed6e4a43436e4418ac071bf9ec00d463d0568cfaf7b4174f96c1f6b8564
+Nonce.14 = ea8e646e88f7fd6c8e590155df15558d
+Output.14 = 314dca793ee1eb0dbe48bedc324b557966ac7a17b900bc4167ab4b65fe6b34ae625c200c4e21428ed258fe28b99c31cc4e8f9eb93a793c3e33fb0b75a2595a3201d939dddfa27911ad6f731894e16692343f25de291da89570a257a95cccb42f7d9820afa9b35d16664f95a2099ac929683b7480a4d1e34291853047ced3302a
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 783d38088bea13d5fb00f7932f080122efb375969120d48341f3ca84f01ce2c9
+Nonce.0 = 3c4740f91f3a31c9c7727647cd6fd009
+AdditionalInputA.0 = 2ef7e40e41921181f5b59374b1f63700cfcfd04e35e0485d3be0a0e6fa7aef3b
+AdditionalInputB.0 = 05d755ae5b808bfc914f011df54d56023069927794560f9420231aa7ee525a46
+Output.0 = b4e5d453b3902989b088e7293f8c893d0a91cb5ff1bef1bb9c467193db6f2340627a15d3f6c1e1ce4f280ed184328d0e2bd97c147d8199222a031cac6e7ecbb5042d049530851724e6491e292d59fd5ba5544ea76c437a2d74241de9586ab1cfa12237c3f798baf204f82c6439fa2b2aa29b641581199dd2d7da85867c757eb1
+Entropy.1 = aed1522484b9a61eb9ba89a869076425db705cb6d1875a6b0e70eae6bd8e2917
+Nonce.1 = bae941b5451668cd62e101ccfec0c2fc
+AdditionalInputA.1 = b85151916205df5e673788c21fef42b9d29dcb46e1836c3dc04a8df66a3583c6
+AdditionalInputB.1 = aeb9e301b8d98f6a1810c20d8a9e40256a6b630af252345e9bdf27ac9a5d2b6b
+Output.1 = 87db11298f748238e3af3782e4803bdc543e0796c954ac2517d0e9ec030d2f1e08e0f1f6c202038081bef42ac6394b8f33445e19d502eb4fdc986b6f88514000d73e4d2cee64432535e90d8b58abd1dfd07585aa8e9b70142417ad9cf92ae3dd9f5db57b5bb05e92b0cd5c3c7c487b81d0df29c67d4893eac3bc55078879f9c2
+Entropy.2 = 5d309e423ced3983e5f8a4c6e83e5361eb86de1eebe525e429e9d78a670b225e
+Nonce.2 = 69de69519a248dacef84e6d405157e20
+AdditionalInputA.2 = 2f48be38169fe63c7635781b914d4f53fcec11294aab76be590141ecfac45af0
+AdditionalInputB.2 = 3111df83df1d5c1d4788b56817d650a6df23215c01235924ec4e4f1407261ebf
+Output.2 = 97adfa7bf97c65fd2f386e733d15d7bf840caad0be70def089300f5dacb131da058c5602722ad87c72fcb5427636bd43e5a88ad4d81b2781d59fc7faf02852016aa18a3b6bb5a126d8e20d9602c2d2379dcd46301aeed775b16e9381b916e3edeb812f54ae32a7242f0d93f23a3f6d19ac41ec4d6d90308d4944e1b0576d1cc3
+Entropy.3 = d48e8339bd48cc2568b9ef7d8e5666e3b2ba78ff19cd527553c015826fa62fec
+Nonce.3 = 6c0215f1dde19d420db4f0b01d423e7e
+AdditionalInputA.3 = 33f2d1aa07d9ec12ff67d48b1d1879a781f7e35397e92f6e3d71ed8728bc6e20
+AdditionalInputB.3 = 1a5611bd7d3a82cdba3314b579dcf6eff263445b43f029a8e0455ede1123d1c4
+Output.3 = aea125feedac1ce47b12840ce75bc6aeef363974d2603215f5796da81c10a0790a5aad8e12ef6718fbebcde9ef873bd87e6be79dd2d06b680ac6e8769727d139899bf79125d7c05badd292f006e67e6c66659fd4c89d0653fe3a0be1bf44c669f14625cdeae4e0a90ebd66fcaff6770bd3ef6dab5b687cf7055e5a7eed9e5cfc
+Entropy.4 = a3eb4626907eaea77b226c7a3c8825a97b313e355a7256675b8c9385052b6833
+Nonce.4 = d6b1e18dddf67c0cb5ae18b251dbe5e5
+AdditionalInputA.4 = ef38e6236a32bcf91ac17261c249121e8d7c3927dcb2c61c850737203a232f05
+AdditionalInputB.4 = b0454ef0678f0b1eeae19e7bd5045ef3db8cf0a7bb2d07ea8e124280143263e2
+Output.4 = 20d3853f5aa17c01556a88375ce7aeeec8c7a9f814d7f8d2e5ef254566b50664266fc881f66604135f45b0e11e64a5c74e928070199c934ddb48c958f02f3564303e1967a105d2917d557a29e4cc5ad126a636eb0a8b9a1e6042868cb2fa7d5e25736e3a9695f360df187f5a978d65e4dc9923613407974736f2b588e0eb14ef
+Entropy.5 = 6f666c5310e663e3333839c4e729f5743001d60fa00bee56623d55961a9aa93a
+Nonce.5 = 8f9f4fc35d5287870e7779c13abe3589
+AdditionalInputA.5 = 0649094b12ab7fb9a655931d345d027ccdabc83bb12969a11741ee45b2601713
+AdditionalInputB.5 = 4e636ab709cdec760b71aa06d5ff3e3a022c5097f4bacc31b12a42f2432eaea9
+Output.5 = 85cda86d1a3ed9d5082f3ad8dd789d047573d9925671c51c5ec868eeb953ed41be7054a778c5f2cd291c92eff0ab21cb007f9718eb4c6bef0ab530bcc1b2cb37a382c5b35829bcc8a787becff7e2cc31858832fc11269be755fa7909fb4251e5f416ef66b1a1d71ba8f3598766c43a62d47b8d7ef9fa732a1e4b93c926bbf691
+Entropy.6 = 7203720a23aeb4482ee71a1633fa9ff9140688c1586ad7637c3e2caf0127b946
+Nonce.6 = e9f05a76fbb3e42066da664cfe33d4ba
+AdditionalInputA.6 = d1d2b1c97df772b47496b74b802f4c47156e5fe50bf1433a14b7189bafe710c0
+AdditionalInputB.6 = beae72874e153cd6a72551aa514d95e2b54d89153c3e081a35f406bc5d34392f
+Output.6 = 890be3e12cc5aab8589f899f03692fd535dc26f34516134e11455b4d597cecd431093e7fb85549e0127239bd0fce5155a865c3b9d49599a0b27b12e9fde52f3066f91f1acdf5ccc07779aeecc14d211361abbca17f56836a1620d667b56c6325f559061ac012d1b9ec87fe1b214002dd9cd1acdd9e1e67b199399b760bf51f7c
+Entropy.7 = a9349c52dbf93e9e609bc71d8a29f1d9704058f77ce7627615c9c40401476cc1
+Nonce.7 = ba5c5a60142207c185d0175025f2ad6a
+AdditionalInputA.7 = 3ff140bcf67b06088d2ecb0bb88a61ac76d72a5c13ddb3ef401cded5a38c0bef
+AdditionalInputB.7 = 7e741429d99ef21a3e1e0919df00162fa7997a4063295bf5f642c66ff4a76363
+Output.7 = 2e934ef0dc4b908873a949c06896ac8bf1c813385b656a231869b72a64cb584a1bb8d099a4597fffe7c785ef1b09dafa241999e4872cdd52c9ad9f873983542d3818ea4c814bc573a85692a85b2b83cf792c107283dda3c4ea101126c18fb793e6e49bd815cb09d6f7e4476e228527cd1e22d648b0b12f6f8bc091ed66fa23d8
+Entropy.8 = 76a4d7cda9080e60ab18d27190dcd2798ed296eefdab08df86939c871cfdb50b
+Nonce.8 = 0cca14fc2087db3e6e0a46c284f1d54b
+AdditionalInputA.8 = f27bc089eea7d846d1acb366fdec558aab55ebe43d10d433b984255a5ed3ed99
+AdditionalInputB.8 = c921a2ee2a2f5de5cae14af999f05a555cb7f55510fa8979da4e9ba3abecaabe
+Output.8 = 716fb437eae91cb3612ca0bba13b3732c7adddb8c4d2848c74402dcd269c6de9f47d79b9f5f63f575c7f1b4f977ed6aa88bd6887d2a0b1506776477966005530215b8f950e78644fe358de470b068c79f81b727f904cadf0c8fde32d8272e926f267fa3ffba382e138bc28de8af44dce73de1da2416ce34e093ee444de665c68
+Entropy.9 = ab1c7ea60f3c733f14202c475b13fa3ecc35c63005216bd7b86b35b94c7465fa
+Nonce.9 = 049e065b7e3807c78bfbbcdcae44a137
+AdditionalInputA.9 = a406b44eef5c8c17ecdc974a36a02f905dea1fb822b2ca3ea0b33d921c6b20c1
+AdditionalInputB.9 = ccb5cec46a1c21c4f00b8338e613dbd898a1525bfc2c9fa3ec8b0394641aa1b5
+Output.9 = b5b3827489a5dc42516ff3766219dbd0649440c26eb43514b9946b1dadfcedd0d036fec817d118d9f6c4bdbcb03ead58d4fdd03083fba73c22b9e63976c80af8843e1acc0d47acab0c1ac3db1cbccbd52c348bdc05b778077d420f4c78d5da0c17cfcacc19f230a4959ab17e62bafd0c9beaaa165d31d7e63921d62fe06a440a
+Entropy.10 = 56ce0e8ba80a3ff6ac671218ac0bfc75446cb8cef98c8cc4de7ab26eb9d2030a
+Nonce.10 = 468c6f2ba47bfe0a436b8eaa8c0c6890
+AdditionalInputA.10 = 19501813b5cb87e00c83abfd757f5c114b8e0a824b2870427998be60f1199c0a
+AdditionalInputB.10 = 93fd0a3dc61667da87ff2cd9461581d6e53f1ea9bec08655086a5c59032775a4
+Output.10 = a4326344b98e7c21251be7ff8b135c7bfbf07f9f8aa3e396083393758c1508f097302bcc9399c4345f60b00a59810943fd80bb48587c5670bf31ead86d61f887c823df22712150989b4f77711ef87eb77ac07c954530fb26fb4cee7f29ed568178ab9e4434632d1a3a413bf9bdae3113c8a6fa7735f3a0979c2ce519db86d2da
+Entropy.11 = 91d26f97b9a6508ce6a1fc560f3859feddda28ad0c7e87c68abc591fa7509e5b
+Nonce.11 = 4bf0bde6ebcacce81bf1a954f28efd0a
+AdditionalInputA.11 = 038bd3ad2a540ef953d47bda6a5820c675a9fdee1670669978a3146456665de2
+AdditionalInputB.11 = 88f5b4bf52baf5f2fe080fdf8ea81bc61e2132aef838c9071e3d8867fe091dbc
+Output.11 = d489aaf46770dccc15d3eb5fe33862123187834237e8e1d501fbbf522b3099c126e3e82f2e3e28a53bf875bbcbb513118ebdfcb1849071851eefd9f69ee8cd7189ef00c658c331982fa4c06c566d68cab5ea319ba76e4c6a4b1980540fa5d48a8a33d6ebafcb9a90b535a3f7004063c72a80b41a4b3ce5743c31b8e693924eaa
+Entropy.12 = c87ab152f9e99cdab94128af0b2928f39107bedeabdde440b8b9c35db5feb0ea
+Nonce.12 = ae03c4540f7a79b2401ada85f349da4e
+AdditionalInputA.12 = b50e97d3140c5f7c063bef299d1d3413bb942b2a24899b0dc107dd21a8cdc35e
+AdditionalInputB.12 = e52de32ea77a8e6997059168eb68d190d446c50fa474f6c60c8a5932aa11cfd3
+Output.12 = 392e03804036661a19abb817929b5694a62ce374fb60c7386d2eb4f0fef12d7ded067aa64a37a68d26f83de1ee1538523ee7d8695eb6ba981566d45bfeff190267a15cebfba946310239cc3698106645e3177266c6fe958982565784d3efc525ff3fda181c5beacdd2c4f860b8d2aeb6e26f607c3e1bae26dee903bf9603dfcc
+Entropy.13 = 5c2bbc1c51f2dc7cff083fa66f0dff2d468ce4631fc4b23d6f38b1626f003d59
+Nonce.13 = 02a0b85d32594f92babd47c9cb8a0ada
+AdditionalInputA.13 = 9438c45f4ca0ee225e5f906498413f9132c79582f98588aadedeec5bfb3c56ed
+AdditionalInputB.13 = 499fe637731f16583408671261e084c8c019645cd3ae13ff04ff4e12e40d54cc
+Output.13 = 69bf2bf1770c1ccaed0c69ddd31f76d886e2d97a4d723d9fafa3c722132de53d3d0a4d2ea2d95b0d3a9e1273e0c6a4a672cfed4d882f4cb18e1d188fb3ac193ada51267e3b133e675c056279f12181ee646416fbc8f90ea6ba8c728fb5ef0fea18745e497513707d99400a8442153fee22a7d6a42f9c465860515d0633ef6b6e
+Entropy.14 = 33924b2ecd2d81b1150ef4e133589d09a2ac7231a69f4641c153d7252396646e
+Nonce.14 = 1a365d0d40721a88a32a7d81a2bf8906
+AdditionalInputA.14 = 46cc09705223bd3c01fa037d9a19dd2465bc612f519e51d33fbc845742d29062
+AdditionalInputB.14 = a9f78f79d034d46086bbe5c8883dc2a34a1a17414aad2c767a3b3f23dfc9b637
+Output.14 = 2674afd329d03ad3b1bb8157c3100a312e29bd72b55139c408afe7f2c9e6d53df2cb8b829b7351a80cca8f0b59d60f6454ba60b154f654a09aa82a63fb28ceab9435cb6022934a0599a4c3a005bccdaa8bdaf8246ca654692a6c038cc82fea477fabdf3d6a0975e952ce3feb7fe8c4510b8c5347b21da5431cfee69e9dd2d8c4
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 9fdfdf86578c372fb12f4a9bcd04684d97f2c0cab75a4ceb7397140a936455e6
+Nonce.0 = e389044699da28eb6daedbd8043054f5
+PersonalisationString.0 = a085ec7ba7eb41f226d265dadf847cc6580912c88e0c3d070ae2612c198caf4c
+Output.0 = aec18c76acb66a216d82b899b3a37e6ea9d7f4026e23b7412be1d911237deb73b1e786fe1f3b2466a4a779f5254ddf63b6d67aa10fe90f269ecc652ddc54a0208d26cb0ba690ccb99fdb82fc58862d59df81e53c70581d5e9f44d030f08ea7a6a5634db45a6eecef32b5b385792bc86d8c5c3f6de3f440e2db59b6c3e4c11137
+Entropy.1 = 1ccb5d261c074fc9b3ed6eb695e2fceba19c6e93464e00300a7aa919c5717c07
+Nonce.1 = 5a129b9a9cd9d4cfaaf25ebbaf8da3cf
+PersonalisationString.1 = cef872a687d7d2650aad3c493bddeaefd28bc92678380e6dd4df71fe7a087ffb
+Output.1 = 57e8d94c5c508432992c35f0228566ffd0ccaec647f1e090e45b6be57b4c72d87d150e18e6769c1381f092e2c8fa6068611d1b673951b7617a7a6758ad6b4d75191c088f18e25373d34d40b1c27016e642ab3ab393fd25f36935d9f665f03878883ff08aebbc4664fce81d2db609357b6eea4c9536c711f95fcf7b02aac0da25
+Entropy.2 = 4c03c532d19fbce23d4a0b04fd1bf6ec33fa12d1984cb2af2e0c3774b2435dcf
+Nonce.2 = 6e83bd488d911bcfe0ec66aa357808e9
+PersonalisationString.2 = 301bc9cca2d1752e2bfe0c688aa201f2873ea05f9c5c0c304d40583c090b6210
+Output.2 = aa0a5817c0a23543ce6fc5f2bfbff12696a02c162f21a987404d1e2766a6126e138e6b2a96ab0ac1920f9bfb53f8c8e85520760897f0039adb1a1c16747e37a9f422d01afa63ceb328659f1c754ae364bce90979dc825d81c147775ce1e48057d1837718fc3253df2381d063c879848c6f6e052aaf13a99ab3f320853b091a42
+Entropy.3 = 00b1524d7d8e35c40b64059769730ef3dcbfe07932d6b11a615c9181f168a64d
+Nonce.3 = 2d4a3c33f08ffd39204a72e9ea7bc101
+PersonalisationString.3 = 0cf08ec2cd3bcd8657dc1ec4834076a566179b33f6ba3db637f0d59a315f9448
+Output.3 = 316c5431b53ff132a99e98665743f54c095ee43bbe741f0cf5210cbbec5de543744a5c9307106d20e5c3b12e49cec9512276aa3f3837a7b5be89b9b0324837726bd055e3b202188e8231cf4d2aa94b2bad23fdf97e2eb346ac1b5dfb1d78c21284396e246e172558d03f43529e4dda6cf36b0600d44d3de1f8def14333f066d2
+Entropy.4 = cd3d56688cf437c7999b168573921d954eb462eca6614666c89548a95ef9e930
+Nonce.4 = ba94b86d13b201a4df30797fd11c4b4a
+PersonalisationString.4 = f4e5752b543c1f24711f2c7bb975c2efde94490ee0740ffb3460e3f08d866acd
+Output.4 = 99bdff22f33c0ff01a419bf009dae223aa969ed6cc0b5f3942d2b138c989de793c060f9a08b5e0b91fba1b35ca8c5ca17a5f56d0eb8637fa691e3bc0e83e8eaa3ed682a82a8d1fc94357e236842455fa015a37bc5c689973caa5f22160373ed9abe7fb9346fcf55240cd5431938413bcdb376ca9fed0bf7adecaffa8059f98b4
+Entropy.5 = 80f85752aad0dfd7a44993e0d7fea2a5a55472e9678f0f9075d6ec17cbbd913d
+Nonce.5 = e1d8c1d83d7e175f7b73370282a504ad
+PersonalisationString.5 = c03ff07c165571fb5c0abe1fc853c276eba511201854111642d54c5d5b323400
+Output.5 = b340bbd7cee2749b30395d1bd1fb73e822f3d313fd0ff052ac38175093b0a783f773a26e8d15ba17f0ede833d15ae1ff1e5f5f47df9b749e3009becfaa1af482c67cf1a1fb3b199d5ea85ccd2ee617a909395c45b4b2dd0d414800690176a574f25b92085b6dc6b55a9207e086cbdaa09a6c2006d30cd09150fe9b341c75bfa7
+Entropy.6 = 944099bfdab971828aa58667801a65c4ca9fd85f76fc948d775ddf7e07c0b410
+Nonce.6 = 9a019a09ac7cd8075233781a3cb10e9a
+PersonalisationString.6 = 3d5069db480166847db296cad105c3ecccd9d4d0257d29b2258a1d97d4d2b50b
+Output.6 = d45a2c1a254fcfa5cb869f07167f6089613e70c3e1c4221cac011941e395801b0ef92acbe0c6dd4625b5b545475360d54974fef96308c66962c3fb63b26491112f7df4272f0fe1a858942d4077608f75ba37d268137169d74b9d42985b52b260599137128d6a92344691cd3a87e02df19c1d4b9230e6e61a8f554e615b0d3f5a
+Entropy.7 = c90d15bbc18763f30764f3f8da44319a5d0b705304f5f3d8aed090fadf356be2
+Nonce.7 = 6f145afbcf79452eda4c55284dab6487
+PersonalisationString.7 = b197f0bbe7108ae12066ad85aba7c16bbd5e4ba982bae27feb5053c6b2763183
+Output.7 = e6a52d64c90906fa5a632897bd43da3592ce4263f3eea522abb2cecfaa230ab0bf086899e91034b8825d6948d4873893616ada207b78bdb7b2f3d85e0c2417619107008279b6d0c8d22031cad5054629fa21683b38e687a3c8fb9e4e75d424ea96bdbcd58c2338fa11075d8d7394de88b9c56fcb6f7890314faef791fa4b3472
+Entropy.8 = a248d90f95bad902bfa6978aaeef35ac6b0c394783fa5f2f69d60f9c6985edb5
+Nonce.8 = 0fbe4f5ac6ce7210bbeb767e85a5aa7f
+PersonalisationString.8 = 9792b45a2589f9eee5dcc47c9ff69ed1b1144fe28f55b721229d1afe2341c55f
+Output.8 = 63877670656b316cc80936783c85c6aab613c66c7363f6cd34e217d6358f08479617c17c95ee572bfe60968ebb0d027e4080e32486827603b1c62f3df1c6643dc8f66aba05681254e87a34543acbf059888c910580b370e5f7e741bbbb1ce0160585d6c78cc880ef6b0418df90a99be046ee77ab83aa7d3c29d540747bf1174f
+Entropy.9 = 8eb3bc188fda796926a3fa760ace26be81665b71b4a6bf8c474286af5bf5619f
+Nonce.9 = 3d1e8fa6193bd09217785c4e43ae03bd
+PersonalisationString.9 = d6eec95d0756662ea762c57edca973393d583f6c78e8c0b4188a6154c254c067
+Output.9 = a0b24e9c22062dc09fe4043719f2c236091fb17cc4393616828596a5d1f317ac381967a3f6484f712cdff45a884f2b1abd68991b77c081c714e3fb703e3645dcc04f297d4d53345a59786d5b53025703d7892b93ad1be3419fdf7482d651ea9c31daa3932e548179f1ed6829e9a122f4eb2fb58a91b0d8a14d9a5881b7f20cce
+Entropy.10 = 3dc0860de27fdeb10d93dab4a29e1512a9be16800e2119128fed67d49962d970
+Nonce.10 = a936b72f8ead41cf0a64d4aecfaf6881
+PersonalisationString.10 = 074143740c4c610701eedc3256868ddcead24cb6c43a7230f6c7e5cf864dc927
+Output.10 = a0793dfa61790fa40425edbdaf34aa2af679d0bbc0db95a29f9cf3d908269671f2fc79a3273b6605a7bd2be4d14e5e6f9c5277692872e07a89716b44371f1d2d58acceab7fa3dcd35480a6d8e60915110f03f1b0b1c1dce4b7fda9314cf5cd950a9f27744100936404850fdbafa674f11a0dc173630f7b15b247d702b6670858
+Entropy.11 = 0af7649298924c7b03b0b0630671ee0c5bf099f18363e42d9fc2532e250967f8
+Nonce.11 = 75927ba5576ebd2b96d3edca5137f2f7
+PersonalisationString.11 = a583fa1d0acc9d41ed708bf33a746b830d5429a9a887568dd33d5ff7b9cefa4a
+Output.11 = 43fd478d2eeb146bb9263e3bfac7e48354375917dd9b65e4163d3a3702799fd44d76b6fb3b4e898d44448862a2e5c0738c6708685673748283ede5109a47025689f812132bf927fd66998dddbc52015a1234807d98ce161fee0f4ee49ed687eea1427c63f48ae41c03e87d882066afce08b568adba56eaf3fd9de0828fed780e
+Entropy.12 = 5807ffde10a973247349fc5d30c31d1b65fe6e83fc3fab4d518a92541e370b25
+Nonce.12 = 2802a5b3bb5418e5ab8853f09138e1eb
+PersonalisationString.12 = 05d48f94ea51e6ce46294b63639286c8234de5536b9af08e6ea759ca006a4331
+Output.12 = 35f578ea52643e3b550fad130e1abf2b2b4bb2d1c7a67b0beaf8a2db46e56548fb4ed534e3be97fb5a08f95bc0304b9625fe9598cf2256f337cd4f51769841f7fc7e00ff85e0137dd2315853eabe82c284a2daf79feb5e34ac7ea56183c4a59d8f981f15c8483be3fdf1e5b0308f330d86b0df36a36a0f46a6b4ecbb15ec7eb1
+Entropy.13 = 58a27ebb2f5f18ee96b2618939b3a321d6d1999b1ba982bf6a982b8a3f89c150
+Nonce.13 = 0af1ede5632a415b59d48d17aaa8e8da
+PersonalisationString.13 = 6fe5d697a91b5a8b7d85ee5184e454b327ec1c31705630f905b52616109523b5
+Output.13 = 387182355689879c431524dc669735876d1216ebf7b9d854a6d140e4abee55927413f68de690502563d3c87cf3697177d208e9b4085fa0c55e865cd29f8719bcdbe243185c71c944c7dd6f1852f96368df20f64d5a5a1f7786e56c167f270301087eaf5ddc09aba8447ea5740cf0446994a5b9ce64690cdea63594da144bc76e
+Entropy.14 = 154ca210ca3b1b04e1145760dada6e2f19b8047344de87bfc0655ce8c82ddb64
+Nonce.14 = 4788964160bb81d6f6c2675008b05410
+PersonalisationString.14 = c56e284ac65798010eb7bd39ffdf49bc25fc2e663e90ff93f73c97e65ea82935
+Output.14 = 683493fb3c6ba0ae0c42009beb39fc37a9d235fb3fa00648ce4d60b4d6bdecdbaa1e2ca0c0fc80c53f6f8ceab31c3c42764b8f23c4cda91743be33e0a77fe5a4297701bdec6b2a5712e76c64bb8b7e03a257c140cd8aafef046b049303679a7904f029444d92d673107bdbf769fc1130429ff64b527b0ce2420e2c70e8998ee8
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = e35c9f8a3d5dbf95c4d595ddd50deceb49a9a1b86598b91155421600c2c4df6e
+Nonce.0 = 823e1dff3d501dff696840d0c1b9484a
+PersonalisationString.0 = c63766604d42a81f8c0cd16824cdbfa490e9117f9ed009d2aa31f2185cdc20fd
+AdditionalInputA.0 = 611b5b182cc623e272d490bb01c558b54ed22b6ccbad227a10dd3e8f767ebcde
+AdditionalInputB.0 = 21e458575bdc9f7584f2fa646f844c8a0711ba61958c549ffe6a8148d3ee3543
+Output.0 = e687b2f27f521cf17d7309326ac6a93504999fd4cab5506e1188d258eaae87a68442f6213a208db5d0608f3ddfe299b3c36bfe5a4d2491b77540485fd294da8b65a52bf0cb9373e3ab422c8f440c8bf2ae42fc150999f3c5201bc38da026ac232790c209cc0c9c7c0dfe9cd178ed8c859d037397fe2ac8797c0e480639ccdc6f
+Entropy.1 = 5b0767a6230f8f13996fdb7253cf6f578020bcebe72c589b8e804e9a99018540
+Nonce.1 = a4be44df4a8bfc228bff33faa813e36c
+PersonalisationString.1 = 997e3edd016c6feb410e2368bb6b62b50f77925d5f73a6c60c7055fc211f57b1
+AdditionalInputA.1 = 09229165e410249150760d2d448f3343cffcf969034e6213748d26fb9c3fa35e
+AdditionalInputB.1 = 509bd449fb971f0eca5a2e9b2876b437dae9828b28060122fee83c03a7a83137
+Output.1 = bc367409f04b8f405099a13d409761fc6956a9ddd077478d720e544bd6b42ca9e8057f35c66109d441c6d5bc6ad36941ddbf35c860850eae89508a712296bb0dd138fcd8d49a4c52eda996d2a0d8a41be12f8f5bc0d350c507f15346798fb7841efe21decc4383d63131b6d263bb26c11c9dbe3f0782ab5cade509bc34cde313
+Entropy.2 = edb07acfec1e919cfeb0044043d386011a80ac7c46f763ce72f1fa8204699f8a
+Nonce.2 = 99c46730998ed332c0890ecb754f6687
+PersonalisationString.2 = 54ecc0f9857e1cfb9f18736dd8df8212a51379ef831fdc3cf301bbf552b01628
+AdditionalInputA.2 = 7fd99b2bfeaf6fc14fdcadc6f089712e182065e268c4d8b418fbe1f10111ddcc
+AdditionalInputB.2 = bd901c32a57ebeaa169f122966fee5d82f798587330cc94aa78a632da7ab0cd8
+Output.2 = b4f0209f5da8b8d4acc614e1a17a75c191c56ee6c3c306defa4b2e581d4c507cd8768a500ce51ed8a1e70bcfe840f58c21570fbb4d3df0fa01ab8d67535271de8152281ce1c7c94a26d18c743dd59408a67149666139a3204e3d3da3da3a0fba5cfc137062ce31a0a1caeeb5d91c05ad0bd6703aa17510e6933353afaed836ed
+Entropy.3 = b9252e25573d8f0b91ef7bae9c7f16ec35ce426b71217cd3a5270f6fc2e4ea6e
+Nonce.3 = f55d33fbeb961e5e7440402006851242
+PersonalisationString.3 = 1c5e934f491cf43b092bd002c608c405dbd26130e6f6b4d8fe4bbd9b5352aa8e
+AdditionalInputA.3 = 093656e387f61f578c513768020b27f93ca6fd48d8b8049ce3d0d2119b849d30
+AdditionalInputB.3 = 909a375e400709eac94720aa3f43aea6f3b470a2ee68e58bbdea8543c0b66d79
+Output.3 = 20225fe9e8d0c22f983bab57c9ebe3982c867705181198850ab24478b9f2a0fcc425faa9905a5ff3a10b3263f1b1af5695f4c5643ffc2fdd4f74f128e3ff5553eee3409cd321fdafb7ef39f9c091c8341d7e08ba97d404359fc17a509aeed05ae66ee6c80d09c18b48929e708566cecf650299a5a825cb1bfa372643a5b51c2f
+Entropy.4 = 3d29044953e0e5687e4e44d386ee0eaf98c67861dfebadc473171d265f28fef7
+Nonce.4 = a5db488a937139496758f433ab7c20a5
+PersonalisationString.4 = aba27161b624cafa071a7cc9634536885487cf1178cb51bfc8815e11cddf7ff9
+AdditionalInputA.4 = 5fb2ffd19e47fa378b461bbacae7a090a080cc1491c3c8dba09b09ad6f027724
+AdditionalInputB.4 = 3272f17115034cdd60e707512084966569488fe6ff658b7a79b7cebfb971ef70
+Output.4 = a9700b134d7759a4fb4a7f5e28c3077c5ff92f334a7c65099ceb5c3b3bfed5af2a9a1ea63c91abaef05f458452b11922789541ed97e71a0c57102a4b15c57d55722ea8d1bf38c04e23470bf95fb66143958128ef096d68109bc552cd894b04582cd3bd5984879c17d8a45401897700ee3ea3d1cc305832ec5a6f8ae4fa9bdd49
+Entropy.5 = 2ee961272a90535beff20400fb4bad1d1bff0a85749de0df1c370aa8ab44a0ac
+Nonce.5 = ccf78b9a848f240f3de40d5e7320a8a0
+PersonalisationString.5 = 1b7bdf3e53a0620d306079715305c48c3252a09fd76c2012d5a07c42d4ccc1a3
+AdditionalInputA.5 = 5a4869ba152770146fe7f5714439df83a8e347f8fe2124a3d0fe4dcd0fb9ace3
+AdditionalInputB.5 = 273a1a9642812a5a44f905909b56e881cf62c33713a1f625ab76f1327c6415d6
+Output.5 = 35ab999309c07b3f5d39a8633fabd707842952b38c095ee9607b7e29be7c186f88fdd702ea8205e88f659007fdb8ac55edbf1f25097cbb1e9a014e52a5031b52a77fffe0d3987c3ccb6f2ece0d246730b0476c54cf721e2d8b0a5f2c6cc28ed098dc73b88a5dde35bdb406cba2915fcec77c7d7a5fea2e12bdde6c5bca900790
+Entropy.6 = db04fb0542e724cb01cbd0153e54d29ea3f80775e3267461eb879ff249b6981e
+Nonce.6 = be45ff7d61dba96af72261e4f9f6030b
+PersonalisationString.6 = 52e6c18d1a1674c3550ecb6dde927da4478303025fa0addaed92b8cf7258e2e1
+AdditionalInputA.6 = e089344a40c526e3c0dec9a545c181b8fbb2b9cc404f6e2f711dff6bc84c5551
+AdditionalInputB.6 = 9be23fd1c693e891b8d5750928981ef60637f4196053f950db62cff359536183
+Output.6 = 9aa538c87b993a337d04db7514597d284b28d778da180fb6a446191c6267f0e5638628b513f3c7588cd37053473bf140eaf6b40345c295646f27eae4275f04e6ef48c8c07b3cb7196ef851b1a3537cb82a42f9221972abb5dd1bdd4d4a7ff928833e268ab9c54cc1abdff293ca11c739a9d3e1dff505e76796f9425b9dac368d
+Entropy.7 = 4fa53dc32771e9e4cf4dab428916248eb2a89c9ac8854c3e6bd6c24efe0a27a0
+Nonce.7 = d8ffa17ce4c064d7b6b3cc72acba9096
+PersonalisationString.7 = eaea15cbf5ac45cdd642e9b2b883e0a141f46f575e06a60776b9254e9b3e76f6
+AdditionalInputA.7 = b5a89821feebfaeec5b1fec3838b9800d1e4c7c0862eab0f1b3afffa7ef2ebd5
+AdditionalInputB.7 = 35909c49a8c481f4f7cf0c7088f598999914a1ea3d7a09553357d840acfb9d66
+Output.7 = 79952617adcf1666dd4c854b887e5a6cf2764962ec2411d112e6c94b193b074de1dfb2b81f9663eba5915fafdd2e2fd6228c268bd68eb69a0bfe80ef8af4bb9da1674dd2809f36805980171986a15febff3e939bcdc14b639576434986a1d62cde79e8fc237876dc3416db7e8e31449be5bbdf229b0d07f1a6d4ad99013c7350
+Entropy.8 = edc50725c8b85f084e3d416e9bd96725fbcea48f334e77707ed23f760493dbb7
+Nonce.8 = 21a09eeaeff63484d2e00a1f4c0d38f3
+PersonalisationString.8 = 0df0520d118fcf5df1ec32078dca162d27458bf61c4f0bac941b00d217da274e
+AdditionalInputA.8 = 16c1241085b00c21a1c14a6bf10378e0a104bd7a69bc2458ad518d3adbab68c0
+AdditionalInputB.8 = ecf638c63be2dd4c2645a86fc17699266eceaa81c2fc88305ff0c303c89b9d26
+Output.8 = 3abfe7578be0192648fb7122f71ad8383541cd33aa39a6f54492d0185c2cd914c189ce1f4aa859492b883fe0217c3579c54abb2f740a0bd96616b507622bdbac6717cce451d991f11faaa8c60d374604b87888be850583caa004ea899cea43126ba04075872defe74cac58e4af24976d1037f1d998c6c6feb8ec030bb5643884
+Entropy.9 = decc16dc3f674f25805726f174795e5192e6ce4d94f4da4226dadd46ac53abb8
+Nonce.9 = 343723fa8498695d329daac4a0f57ae5
+PersonalisationString.9 = cff8b23e11e6fac576f4571b75ee8b7258a2f2aa9a666e139a6f400c2d4fde2f
+AdditionalInputA.9 = a7f5bd0fdafadd4c55f69c8d40c649b7f56d54da3aa45c91aaa6440b0b115aa2
+AdditionalInputB.9 = 637492a2943bde1311b277d1fe95dcf9782da457c03957e0335256b871b1e318
+Output.9 = 0babf60542efb0b6c667a0023635afccc4b36ac58879e2e7532ab854a0613c955cc15a5248e7dd63e1f3e213c10bb0c67c6f27f704d8f0a5ec4c670b4e3a21f2c32c456e69ded4ea9336c7339eada279012e34e46b0029279928f6b6a881ce086c1c1a319ecb247de7f377b1cbd2da34cce3f827285b26bd737a88b4f30cdb0f
+Entropy.10 = d9ce46c4f6fdc83a827f6b313cc42e04255b96567c4ffd6b568d5365f92ae2bd
+Nonce.10 = 385dd02922cbc66fcf7392d2876e193c
+PersonalisationString.10 = e6322121566023f1323b1912b183bb01e9855de469aa8ae9823f1df89306aa6b
+AdditionalInputA.10 = d60f71db6a57e5a61b0aadd6bc44687a8e7787c8410b2e802ad3a79ecfb1bccc
+AdditionalInputB.10 = 579a3f74d461d54154596e3099787ae7ae3387fb65dd628b102a6355b26aa2af
+Output.10 = 59c24b2f34cd4e6256db3368485035210dc15836c6b45a8c32790c9146d807d84bcd6484424301f19c95d545b509ba015e98c1d9a70e70c0f4f3997d2695aead5310790d479cb2739525e3fae5e42e2673f6978658ae5c74aec1bb49525c880adbd16482ab302fe1b85ee083bb46deddcf1d8b73998c730a935d5f464e26e135
+Entropy.11 = e777a5e0a2d636c0461c38eb197cc24e3aa11478dc250b3e491ca737550d6dff
+Nonce.11 = 30b7ebcce90b6b3606acafeff67a2c47
+PersonalisationString.11 = de11cbffba3069f1f4be51f875f208af0b3bed6249bceeede0390d3a1dc884b3
+AdditionalInputA.11 = c6683590c48260773fed70c2f27b9807e65a2a670b27690bc6f545dc6a656dab
+AdditionalInputB.11 = 388843325a24428c899d8ce657de0df81c1e3727bec78260f77c8ebc55b761a9
+Output.11 = adb109fc8d60254a305303750e9126ad76594d33b5059f9f384f60392b940ab313b262ff63f793ef3ccd44556527c26a27dd6115a94a96ce7746c49801cbaa8b084b47e22bb307070c92395915aaa81fe16cd745c083aae5cafe36d157f2d222728a8ce4a5db64cbf9df47c07991763c85b9b39c1a81a064aec01d956b6ab7cf
+Entropy.12 = b0d79298b7e005066a2870a617025ed08e75c3153992ed3085dd3efa41edbe3d
+Nonce.12 = e82f740f0f09bcea0baae466490abd2a
+PersonalisationString.12 = b2edcebea88f0dccd7f3e98e3685260c41142dccc4d14ac93cfacf4737bddb93
+AdditionalInputA.12 = 66461d13e5493823ab4fa9899c19b7ca1490d3053c157596c0465bc80b897472
+AdditionalInputB.12 = 948591cf75be1f9f99466b937c7ec6e3fada28376f4ed770e9a8654ac37ab584
+Output.12 = 900fab800740d7401b43a493b20b1ff3fcf71d4349fa1a24016800957729478e62e8846f959c90dd95c550c5d5557e9d7a05deae0bb1c432aac91f8e4fc616cd970df77a70a3b4a06d3a165831ebc865a8d5e9f916b56f24431b6f855a112161ab4c2fbf7bc45dff12814102d11712f57ffb948ef95cfcecf0ba2a8d591bedc1
+Entropy.13 = 049a53c57ce25acbe9ffd2cb92f8b6850ba626e9c30344c72b8f8a06fb918f2b
+Nonce.13 = a5c7ada74d46947a0b8e590881ab34a0
+PersonalisationString.13 = 085d9a9aafcd7ec89d3b1548287c10ed12d929b185e231229cab104749251fe7
+AdditionalInputA.13 = ea349d15ddefb9aaac537de4031b44ddc82eb0140ee63c1864fe9288518e7053
+AdditionalInputB.13 = 832db21d6d03b2212e00a6d1b8d29df63f542eec27eb35b783d8226eda99919c
+Output.13 = 5d21ec714cfca1ec6a9b044bf1a0ac1e8c3b59b3c1f42e7184a334e2afce83055786ac1fabda6af8bee8b57ca33a270898327e0f7af402264499644f048a0c88760f5618d904d4bd91cebfa8c3d4649ab8ac42ef5c1187cbf2b74eb65110dc7245a229e7dab209bbf256f576db9c9f5389ce6ef910fae2594e0da3e3b71ac751
+Entropy.14 = 68cf3f518b4745452a4149d200434960cbe10bcb783c3f89d3b85f618799f5cb
+Nonce.14 = dc345f21a33c168e4e07603187592f9c
+PersonalisationString.14 = 2c26ce79ee85d0c9ca4d1abc6e0ac2adb26cd223dcb513403a53755b647598e3
+AdditionalInputA.14 = accff53608616d9007199e41396846be5800eea55f73f64a6d8c8f26b5bae07d
+AdditionalInputB.14 = d8d5258baff41850de1feb5ecbbd1795cdf4538a1c57f55c9f585ff035a13e55
+Output.14 = 5032daa03415b2b6780ef4c6cfecfaccefda712f2529d2cdf4cb45d52229e2b7388ebce926a7aa05cc132b3479e7b9c0b8b4cd0262f7b18a58326eab2baeb91ed4818bf20a105975342bed6a97f2e67c483a403f98a4a5dfee98130741b909f0c4812c1917334ddc5e678256b78c23764217798f25db20d80ea85b69efd75892
+
+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 = 0f65da13dca407999d4773c2b4a11d85
+Nonce.0 = 5209e5b4ed82a234
+ReseedEntropy.0 = 1dea0a12c52bf64339dd291c80d8ca89
+Output.0 = 2859cc468a76b08661ffd23b28547ffd0997ad526a0f51261b99ed3a37bd407bf418dbe6c6c3e26ed0ddefcb7474d899bd99f3655427519fc5b4057bcaf306d4
+Entropy.1 = 1ff8f4a85dbf2f6bb2648967419bb270
+Nonce.1 = b0cdf7bc47ca5f8b
+ReseedEntropy.1 = f90699441c1ece41cf1f6a32e4948656
+Output.1 = d9ae8b33f1a10cbf516d97b9ad7baf0d596a081a0ff0f4717674239b9e339354d813b2bb71c10f7d2e34994e0030e4fbfba6438d077c361745993b9d6f669b24
+Entropy.2 = 7a3b24c17b87513675c431519e771ce6
+Nonce.2 = abe47800414d25dd
+ReseedEntropy.2 = b6ffefc408e41f77e2cad479a669274d
+Output.2 = cdc469c1547903b9fee583409d411e0ac763a00cd687d4f8c811e9c74dc3b78b27b66fe66a249b4178bd3bd08008ea258c5a908d2ea737158d163d1f34f93ea3
+Entropy.3 = 102e3428b25fda7529248b67bd1bdc93
+Nonce.3 = 62d6aa84cf51ad73
+ReseedEntropy.3 = 00d7af7d1f9e36279d07034427a9b5d0
+Output.3 = 6d7ba725c81fb0c8de32f82884185b9eb273bc1ec13e4ca1a0370594cf9c5bd6c27c371826ad86bb8f5d78c697aa9e2927e1c9b2304af0288efe629eff137c43
+Entropy.4 = 0887ab2c94dc3bf43ffe8a1badbd5bf2
+Nonce.4 = 511853d97431057d
+ReseedEntropy.4 = 1733e3828a48fd80adecaa903823ac5b
+Output.4 = 79df1b0832dedde945ed593ce7ebe279ca28a37386d4c20810eded1237cab0b46f1b6b2a212e91ab2150ae77cbc0aaf7bbbc3e6a776a44eae1ef30165a3b6c41
+Entropy.5 = a28a05fdc64da83ecf4d11ffb6173645
+Nonce.5 = 2a89e8a1cb2691eb
+ReseedEntropy.5 = 9b82f296bf1defa8642cbe5fc4c7c868
+Output.5 = 606eeacb0e6d8f8e0f6741cf427a935aa6c789e8deeb8450ca8f66bca86e924f42fc3c61c7f69004e247b676f55f4906d2158cea352c607f7fa0299ed09e6f05
+Entropy.6 = 71f005df033adf9e1195911611ca51c9
+Nonce.6 = 9a33209fdfc41a3c
+ReseedEntropy.6 = 88d1ada2990dbfb6916a9ece78785689
+Output.6 = a24982369ee65868646c8e0c279dff3011605d3399595c455fe20ed338f8c2a51061aa7b40f4e07e86378e896623d46f85aacfa6af3a1d66e22e7cb561e135d4
+Entropy.7 = d5efee24d6b81f4975393f7b82603247
+Nonce.7 = b3ab7c0e7c280909
+ReseedEntropy.7 = 7d8cdc5f4fe607ef6bc1e2938c27f0f8
+Output.7 = 335e1385201962e636116d6d5ff5fb91ed268388a26aea34cfd354895d9b76a514f34cbe9d3c863178156bb6fed7368a94b037101b26db0d7e6a8a009256db35
+Entropy.8 = 006fe4c4c4c016a51a0eb0f35495239f
+Nonce.8 = 990d275f3c27c691
+ReseedEntropy.8 = dd4b17e7d3004c5324ab0b98b75b04fb
+Output.8 = 513f6996d956eeadb5c330c342058fcc465793b636fab74b1bb56e496cd25e5afc7bfb3cd304bb817bdafe7e8d666260f813ec5701b6b4e1b7f872aeee09f363
+Entropy.9 = 3b0e7380240061e38f6cb81cbee4bcb4
+Nonce.9 = e882e80e0a2fb7cf
+ReseedEntropy.9 = b18597904c54a88267cb2651bd5a9203
+Output.9 = 563b0b8dcc828e4293563ff6be314d0ca8fffd176b4ada8d270040863be632540567556702815a0aab40cdc923eba1f5a1c9928494d4011b63f17372c5bd48e7
+Entropy.10 = 60f5fe65d5cefb731b28179c35b2aa3d
+Nonce.10 = 72919f9e097e7385
+ReseedEntropy.10 = f35412d4ddfde38dfa3f61aa8f6eb805
+Output.10 = eb7aecb6bcd36dd2fdd32472a69c02f9e71aff13a3e047b58769522d984b608d334e513920f8713d63143c971875b781f3584bc7de352add787820c5f8aac029
+Entropy.11 = 52926e414f4c172b8c490ef13f345f08
+Nonce.11 = 41d1fa4b9b060f3e
+ReseedEntropy.11 = fa9152731e26d374c52041abe178cb26
+Output.11 = 38b94e8cb5cd2e49070af89cf208b99f40b0a780578f11465219c7c9b293609270792e6d9f457e629db372dd0f7cee2300e7b97a35ae47a2f75cf922ee5e2906
+Entropy.12 = a76d0c66be9abb6081b52fa5bbba7600
+Nonce.12 = 340f89b76e467bb1
+ReseedEntropy.12 = beaafe74dda0b4e7cd9a24aeb82a15ea
+Output.12 = 0f06f4356ec30e462b1dad3347a929a7d7fe931a377f09e3c3f6d281181c079d2520f78df1d50c6bb73a29dbba58e16a394f8bc7f1dcad3ba8c460f1443f07ab
+Entropy.13 = 08418bb6476455948cb88521d1515dc0
+Nonce.13 = 8484164b1afc42f1
+ReseedEntropy.13 = ae4a02a40636024fce89335f6ee11df2
+Output.13 = 59b345ad05a9d2f5c42adab3e790e1e72d0022a2cf8340cb5cea9382ad97e1ac6317fc02850951fa05b9119d82af59dc241dfb624d8cc437f9a8aee3e1c64e9c
+Entropy.14 = c9b8d7eb0afa5889e7f9b78a50ed453c
+Nonce.14 = 3058ba347ecd11b1
+ReseedEntropy.14 = 643686b86266d9111f29eb389e1184b4
+Output.14 = 0a8ccadc1c5cbd20b8ce32f942505e654b91a4e9410e0ea627c961d632d3be71d6a7dfd64b8f70d28ff91869b92ced908b454936b6d18fcddd7fb77216ccc404
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 285da6cf762552634636bfee3400b156
+Nonce.0 = 8f8bada74820cb43
+ReseedEntropy.0 = b4699b33354a83bfed115f770f32db0b
+ReseedAdditionalInput.0 = 38bfec9a10e6e40c106841dae48dc3b8
+AdditionalInputA.0 = 629ead5bacfac8235711ffeb22f57558
+AdditionalInputB.0 = dd8a02ee668ca3e03949b38cb6e6b4df
+Output.0 = e555aa4432bde04dcf0f0b03ead187b31df06653d444234b5c1bfc11b224285f2fb2b6cdd5a9ae6f13d99bd02c3c9fe9c3c1be46a600f5f757ab4574af893501
+Entropy.1 = 80094b91c34507fc55fdd09ade25f275
+Nonce.1 = 72593493d447ee20
+ReseedEntropy.1 = 7ab86c3ad6710fd49e923daefd4a8ef7
+ReseedAdditionalInput.1 = df5b789306bcf320b76fa374e5710829
+AdditionalInputA.1 = 362a4c6e92885f444a49533fc51d1711
+AdditionalInputB.1 = 42145327187e1b570869ba8fa4fa942e
+Output.1 = 9849573cd8bc103e7d6224e79973db79c20b0a31f73d8af357cb1c797a843509667a53a6e221c336979f5255192774c65f3eba7a301639c02b8a523625195df4
+Entropy.2 = 25c90d87e77d6c2797e5dc27d04cf732
+Nonce.2 = 64e9f6733d251c65
+ReseedEntropy.2 = 13cb8ba8b346c4efafaaf84e6abfaa4a
+ReseedAdditionalInput.2 = 30627e21e45890b7a9b3f319210c28b4
+AdditionalInputA.2 = d6090486baa3b36f419030d5494fe24f
+AdditionalInputB.2 = 231f2aa8f0e254f92daa38c04e8dc9aa
+Output.2 = da1f07fb23295ec17e3143fdc03aa3994cd5a88dcda3b50e17a9c13d859cf2d7c90d0d39e04e13d31803d7f1c9ec47be15a556021e83de464b183d436171ff72
+Entropy.3 = 685d89e547bd797fc0b78662825ec530
+Nonce.3 = 29476758b4cd0727
+ReseedEntropy.3 = 82d8f62b1d1593224c269f49f3f2ed95
+ReseedAdditionalInput.3 = 1abca0dfea4b28659764a85a30b590c1
+AdditionalInputA.3 = b8478914d919ec5cc4d3b4f83bf24ee1
+AdditionalInputB.3 = ac57c388d1a9599024c301f7e16dd76c
+Output.3 = 0db221819eccb09cc079b887f5b77381d489f9fe9e25e57fb1c8823fc8eb12eaef5dce0e1a91c2a6983c8b20115e5447d9fc6719ea229d98a68c79c5ca26940e
+Entropy.4 = 5a3706860a277e909006792be989d6ae
+Nonce.4 = 739c6813dabf350c
+ReseedEntropy.4 = 5ea803011a5ee4d426c1285889a1adc6
+ReseedAdditionalInput.4 = d3738ea4966679a2b4fd28594c0bfe31
+AdditionalInputA.4 = 9ff24cd5b8e9716ffc96512d84e19eca
+AdditionalInputB.4 = 4ee9d468ca016d92ef40a88bb41687b7
+Output.4 = 2895a33b3a46d730d33c0dc709da6668236cf702a4c8bbb70c7dfe182ab9f51630b6193f3a0586d5569759ffb07cf3fa57235e84188bc17ff3b1402a262e5f5d
+Entropy.5 = fa232a56f24071f5bb274d08f30dbbcd
+Nonce.5 = 3949714e120bc1a2
+ReseedEntropy.5 = 7aeed4b20a2ff21b04064bd4f7c6c7bf
+ReseedAdditionalInput.5 = 0d512a998c5173c71aae64f9cd37ada8
+AdditionalInputA.5 = 784c9523fcc8ec238a40e7f2f164de49
+AdditionalInputB.5 = 97fcea8196b1e42c6bc9145ef9f84e63
+Output.5 = 7c21d06af2e5de04c5845a63e18ac7c26cbe8aa4839183f52c0a65c296584d223dad6f46b5ebaa24ccb3ef9ef552a686ebbacd49007e5018516d4778ac5659c4
+Entropy.6 = 85f2fa44bbb7dca1bb390758577db423
+Nonce.6 = 9410d460fee69433
+ReseedEntropy.6 = 22bb0570e462a63564359cbc805f2187
+ReseedAdditionalInput.6 = 9a49e3cd4133843c387b4da9c6b048e1
+AdditionalInputA.6 = f55bfac5b93b60cbe65e818ecdd5b885
+AdditionalInputB.6 = 4a25f1fdba66a52ea226a98410139966
+Output.6 = 90b20acd6203f7e945993592bc1685099876c6e3b7016bdd35ff40d093627650138cb55d0d9d907339b1ca280c38374f85de1d590565f9571582a9b92c663904
+Entropy.7 = d379395375d61ddb6ec6a156dbed82f4
+Nonce.7 = 023d15f0c2e6520f
+ReseedEntropy.7 = bd646f98fd89f2daf0bc2dbf98c163b8
+ReseedAdditionalInput.7 = b3cb862d241a390acccf1e5215b68568
+AdditionalInputA.7 = ac3f739d30526a58b23a7cb7de915c55
+AdditionalInputB.7 = 3593a0164a6bcb02fa32a452d268d199
+Output.7 = 1224ce5b56853064b76262417ccfd52d18c2551c2c1f1dd59d6d7074293afe351290cca18e148e12fd2d0c03506f693abfcc28d0f21567634fe2166dd310b60e
+Entropy.8 = 1917adc40a5e1244ba80b141322e5cc0
+Nonce.8 = 0e6bf2e297d654b2
+ReseedEntropy.8 = be43bac369fa80de6a20b784ca1e46a1
+ReseedAdditionalInput.8 = c90e30310f33ee1a92c62a4c345e0d97
+AdditionalInputA.8 = cb46d6d4013dbe3046a6c81f4fb1405f
+AdditionalInputB.8 = 2aea603cfbb42c55f641903344e28a78
+Output.8 = e08aaa8a1bdd541bb3a1216bb99bfba38c9a917183c73f623735e5d9f5cdd305c33975ccc699e18a699d55dfc8a72c2df0d666032215cf79d2e87930ef8650a0
+Entropy.9 = c9963a1551764fe045828a6487beaac0
+Nonce.9 = 08cd6939f8589a85
+ReseedEntropy.9 = 16cc3515b117f533809a80c51f4b7b51
+ReseedAdditionalInput.9 = f53df12edb281c007bcbb612619f265f
+AdditionalInputA.9 = e267066209a7cfd6848c20f6105a739c
+AdditionalInputB.9 = 26fa50e1b3cb65edbc6dda1847991feb
+Output.9 = f947c6b058a8668af52b2a6d4e246f65bf5122bfe88d6cebf9687fed3bdd6bd528475652da50f09073950658af08986e2418fd2f487257d659abe94158db27ba
+Entropy.10 = 39ecf1b6a0b4cc2ff09f570056d1a8cf
+Nonce.10 = b315f7640bccc2a0
+ReseedEntropy.10 = d745e614cc56315ac75c7aae553026b9
+ReseedAdditionalInput.10 = c3c6619e829b702c845b8914b157ae7d
+AdditionalInputA.10 = ac85823fc36459170583fc3713cf90b7
+AdditionalInputB.10 = 5e0f4229cfd01241685ae18b93d70bed
+Output.10 = 460cfebc9d301c5e5aa68328b3b51143de26ebb479ff92db1d6b497e68509008abc4fd690e61107e2afa15367f5d741b3a0fb0045131c05041b2d805caf7efcb
+Entropy.11 = 88fe0658047cfb81a7ae0d84cdba0141
+Nonce.11 = f88791d32b88d3af
+ReseedEntropy.11 = ad774cf5a517284ad98bd9c4e6bcac4b
+ReseedAdditionalInput.11 = e63c91633bfa70ce95ae7674183e137a
+AdditionalInputA.11 = e03e1fa7b64e475f126bec1db02ca99d
+AdditionalInputB.11 = c2e752ef80db56c57f60c29612b8f9ff
+Output.11 = 8fbe91060a480feacd4c63f92b318f9703f8889ae9f4d5a1d0253f90f5a3e78aa60bbfac0ec15e97244eff2946ec14e699d06ff9cc8706c0582dfd08b5138485
+Entropy.12 = a326b3557ec1c1f9e872211d0ee48e81
+Nonce.12 = fcc9336b246f548c
+ReseedEntropy.12 = 00062dacc27f5f67234588d68b8547e6
+ReseedAdditionalInput.12 = c5e4b9290693f356eab655da19d5a6f9
+AdditionalInputA.12 = f9c791d87411a7e7c67d9ab8987e055d
+AdditionalInputB.12 = 94f8bab2daa9e0bd5078cded05df2694
+Output.12 = 3d0aea7e347d3315c5561c4a7dbdfe1b1352c1a476ea58cb35a4953d53da74853addf4d23cfca3b26e76c0efaa830d1c8dc232d42ee8b961428a8a52b7dea889
+Entropy.13 = 69bc64175703d4096278d716002a4c6d
+Nonce.13 = 0630cbea0bf12371
+ReseedEntropy.13 = e097ef5eb7399983d3ea0a130879ee0b
+ReseedAdditionalInput.13 = a23961ca1517b2e7681cd503de2a9475
+AdditionalInputA.13 = 7c34ebe67ec479ff68ba2f1c9f301aac
+AdditionalInputB.13 = e3896b79a8bf253325bba632e21b9020
+Output.13 = bc9a7c157b4dcce9df141f49db839e4b40cc725bb2f4187bfe07b6c3bec46ea6343f4a73f4c19f17f67bb04096e0aeba6457cb5175fe6687d8e566ee1d91ca16
+Entropy.14 = 7d659cf5e18375f80bb29e58d8ebe508
+Nonce.14 = f711423c8a3b0d2d
+ReseedEntropy.14 = 61570470a9fb756113d32377d49965f8
+ReseedAdditionalInput.14 = 0d3d3cb2d4d3c4300c58081ebd3785eb
+AdditionalInputA.14 = 7358ccaff37094c3c1a6880011a72069
+AdditionalInputB.14 = 48ca1a7f96dc5918f9d9abd6423fdb8d
+Output.14 = 69377968138d3d4ea43426a025342a58586bef7ab2602fe07d70509e43d4c2f4960c8eab40b00bbf0eb120223473765f4833bf228b907b7927b0f53642452a81
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 070d59639873a5452738227b7685d1a9
+Nonce.0 = 74181f3c22f64920
+PersonalisationString.0 = 4e6179d4c272a14cf13df65ea3a6e50f
+ReseedEntropy.0 = 4a47c2f38516b46f002e71daed169b5c
+Output.0 = 31c99109f8c510133cd396f9bc2c12c07cc1615fa30999afd7f236fd401a8bf23338ee1d035f83b7a253dcee18fca7f2ee96c6c2cd0cff02767069aa69d13be8
+Entropy.1 = c6c0853c725e9dee29e9431e8deb2c99
+Nonce.1 = e2be4b86f62a856b
+PersonalisationString.1 = 5fb725462a228c2026c1b8894dd3406d
+ReseedEntropy.1 = b8b4b44324a8120c04d6eaffd017fda9
+Output.1 = e3e71a8dfe7999570c94f7842a0ff975f0e03c32529d69444c246e82458c874a951f2fe6eba366714609473d599e75b5cd9693f769692144652cc8fa39368300
+Entropy.2 = b5186dbe9a099a85f5a353437169389b
+Nonce.2 = c65810e4bead9f2a
+PersonalisationString.2 = 4b0cc2ed0899fac025370a796fe824e2
+ReseedEntropy.2 = b9e703daa6ba64e33c6868009e65d392
+Output.2 = 05e452e3b8bc0b60014f38c324cc02c543a00caf4944b8a381559c9d50d9c2f342f545adf87d8622ed18f70642a6dbe3b5c7a07aa070ecf46acea81353f74de9
+Entropy.3 = c2f0cf9a5eae59b0cf9a2e72b3659f20
+Nonce.3 = 8576f1f1744e3a02
+PersonalisationString.3 = 7ab4469c271333629c51a7c2adce9132
+ReseedEntropy.3 = 1cbbe2e15d42b4ea086e701e25b54152
+Output.3 = ba010de5f90cfeee93d5877773ca60cb3bed7cdc86a6b1ed67bfe2a09c9280a9b1635d6f6005d02b22b22026182d4cdb8607d1e85b92c5f3c56385f9ce71e649
+Entropy.4 = f29f113e281c1f9dd4a907a58c32f238
+Nonce.4 = cee12afbd16bfbbf
+PersonalisationString.4 = 10376776992d0aef0587b3684a9a8a0d
+ReseedEntropy.4 = cdc7bec4329099f78bb1c3f4de178c33
+Output.4 = f9ee43430d028de1d495d61f28260a49d52c64a12f52dd384687ef57f8b98dbf9576710ee6033fa5255b0d038b226a36166a0c278aa3a432aa2811d3e118bea6
+Entropy.5 = 59e8c9a8ca4e44f30db47bd093274109
+Nonce.5 = c36add93b496f65e
+PersonalisationString.5 = 15a19bd596cd9c1340b66919a14ad9a0
+ReseedEntropy.5 = 9a4606bbf76f92c4ddc720ee6e4ac100
+Output.5 = 05124320c6dfdb803441e79cc97e85f3066b49c04542ebd3fd7bb105319b244ced549f0d69ca46bb3a7bef33854521dd8e829ccb6320bfb10d0b3ec2a18815b3
+Entropy.6 = 60fdf3424d6ce229c8773ebea2a72fb0
+Nonce.6 = 0b6280f678bbfeaa
+PersonalisationString.6 = f39e3476355cae160aaf2968287eb938
+ReseedEntropy.6 = 415127ca26bda6e2c288a4c0f515fb16
+Output.6 = 9c07ccd7d39fe9e5f21987ba482c2d97d7798118f5b5936ad1d987044aa79ed4f3683429d62a2cffb80cdba7e0adb800ed6f8e9923bb4b918a1eb5c92368c151
+Entropy.7 = a49beb27f8e233332186922f3b20eaac
+Nonce.7 = bea24f9a5012692a
+PersonalisationString.7 = 115045ea5b7a6f7ff6894188298ed279
+ReseedEntropy.7 = d273aca1b21e7927eecdc023f0402a3e
+Output.7 = 39b23485d826c7f5ced4231ef9b1a1e86c3de191c4c249283e6120bf5524a4e426153da76e098807da0d75339d3c020c4f14842e60490c6f44e9283df6bf28b8
+Entropy.8 = 1b2fc3eec116b5559964d6d2653d66c6
+Nonce.8 = 6e04941ddef56e69
+PersonalisationString.8 = 68be57974c6c74c1c5be0da1c6360e30
+ReseedEntropy.8 = e493c7d991d0430f93c20ae0fb15a166
+Output.8 = 27949a3dc05aba02a624ae002c45a79a65cf6040acca61a0bd5f2ef06a9cf6f824a066656c1b6aac659ee7a9d3308050cc8763d91e48d19dc1df20af14926523
+Entropy.9 = af51c4b1b4bd2119e0b49311279bbec0
+Nonce.9 = 4194f00bb0cd83c7
+PersonalisationString.9 = fd052bfd73fe712f4a069d2bc1dc4bc7
+ReseedEntropy.9 = c140c4ce45bf3bfd0a473e5754355b0a
+Output.9 = 6858d2634214a46ec077f86e667b6f3c482c797367ae01d50fc0183887ff9bac3293ce67643be146b86dfb093a5718ab8c12f713ef0cea0d04958ce7a8d8777b
+Entropy.10 = fb70a8065eae006270179098a6b67eea
+Nonce.10 = bc0001c0de387f1d
+PersonalisationString.10 = 804f5f90bf5a4d7a99f850b882bc7001
+ReseedEntropy.10 = abc77b6f10d0a89452e063fe97f4000a
+Output.10 = b9f6f51d0de5ffa1fd42ef9a7ad2e60201dc3e4b15536364c1bbea2fcd7c35a77fb824bddc67a690ac51dc2e34cb7efe9f61d5d6d009d961c661de44b98a5e98
+Entropy.11 = 92847e86e656eb7f90de2666ba07d9fd
+Nonce.11 = b71f251d206ccf6c
+PersonalisationString.11 = 74ba9724a8e8c9e998ca496d3592bd99
+ReseedEntropy.11 = aeed260b730d8f32aaeb0d9be797835a
+Output.11 = f6a25d68eaeebf57d2d870c81781905ccc69ef7f84f02c7ffaf9868c08a0e443fff019c7b7b649fc50f0e4a95c25ebcd86f94c8403c8a786197094626a98a8a3
+Entropy.12 = 297efb111809939edebcdf9371cf32d2
+Nonce.12 = b33f34053db7c9f0
+PersonalisationString.12 = d3799c84d31590fbd0d3c4ece3680e33
+ReseedEntropy.12 = c5fe86ee68e459ca3b06e445ea5e0b2f
+Output.12 = b1835eef69d5406c3648450307ae27d392bdd44a0fa7a70af6c302ab1c3c3cc7c681e190767a38c3ff6b687f3ee12f8555a9d2b4696585f1c811d1329430a51b
+Entropy.13 = ed8b28fc95036e5e618695e490b7256c
+Nonce.13 = b995e7c1a88d09ce
+PersonalisationString.13 = a43e3708744c8a7c5feabe66c25c81f1
+ReseedEntropy.13 = a2a59898f453e63fc646af134853e9ac
+Output.13 = ffff0f1591aa104ba8c552da01c870c51f7dc2a1cc22300508cb4f6310194575099aa4abe7f2918731667394da8b79ae147caf389f4396b5baa88f1917b616f6
+Entropy.14 = 7430a658608213045e4ccc24a0568ef3
+Nonce.14 = 3fd77ad5b36f2554
+PersonalisationString.14 = c1ad9031efb0fc153615433fbba1087f
+ReseedEntropy.14 = aeca96700a3d66467b2561a3077e6f72
+Output.14 = c4b248c18fa838acecdf9cc33635009c19885b86b7d1f65c06dab906304da69f4370ac8fc83e4b4721c07351a218afcdaf30d4706324589bf918be20b4dbbe3a
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e14ed7064a97814dd326b9a05bc44543
+Nonce.0 = 876240c1f7de3dba
+PersonalisationString.0 = 26ccf56848a048721d0aad87d6fc65f0
+ReseedEntropy.0 = 7ec4ac660fa0bbfa66ac3802e511901f
+ReseedAdditionalInput.0 = 8835d28e7f85a4e95087bdd1bb7ad57e
+AdditionalInputA.0 = 2a9bd50bbb20fefe24649f5f80eede66
+AdditionalInputB.0 = f7ce3d5c6c381e56b25410c6909c1074
+Output.0 = d2f3130d309bed1da65545b9d793e035fd2564303d1fdcfb6c7fee019500d9f5d434fab2d3c8d15e39a25f965aaa804c7141407e90c4a86a6c8d303ce83bfb34
+Entropy.1 = 4d61d917e5b71565d27cb8bce5266e84
+Nonce.1 = f10150ae95cc14dd
+PersonalisationString.1 = 855b14545dab54e7359392d2bd0508fc
+ReseedEntropy.1 = dfe01de786b4bdffcbfa47f13ab75bd9
+ReseedAdditionalInput.1 = 8b0f5f42aa8a84c24d11a023aa288a89
+AdditionalInputA.1 = bf32bde3c5bbe4eddd4e5c3309b87e7d
+AdditionalInputB.1 = 7ee1eebb460fa1821ab59407f0b7291c
+Output.1 = fb92c1e910589acfda9adabe59214e027bc44fcbc0fea5f231f2e9b9236d3b872e4b9d87907c41ef71f041a52eb826a38bd44fa15f6095e41b3ff30261a6e7c6
+Entropy.2 = 89fa82addfc939965aba18494cd5299a
+Nonce.2 = 305c4c0ad786586c
+PersonalisationString.2 = 625cf5f44f832b3bdbb69a4e9af2b177
+ReseedEntropy.2 = 2738f5da3c5ac99d91833a02a9dd9d4c
+ReseedAdditionalInput.2 = 49ebb2fba3fe7c3e1e7bff9574037562
+AdditionalInputA.2 = c5ff2cc8b8af7bbc9ada35a39803d4d2
+AdditionalInputB.2 = fe0d798601ca1f49ecc5d21fb38932fd
+Output.2 = 3a9558f2f4c54813c4e462250babcc80f75a4c5486a81c76bf187d9240a6e4364ee5ae0b9de53acfb14528a0539f500c67f0372da8d61e70b77a4ad4478b3fda
+Entropy.3 = 01d495860e546e696684f2795c182777
+Nonce.3 = 203f7898746ceb65
+PersonalisationString.3 = 1dd5a0d8869164323dd78b4686d50125
+ReseedEntropy.3 = 52f8057f5d913bccffbac81ba8d84cb2
+ReseedAdditionalInput.3 = b200d3e4d930e951e0c4794465540434
+AdditionalInputA.3 = e81cc7ec3af3ea3a3216451605d9a821
+AdditionalInputB.3 = 04aa311f7c209cb19c2984bfe2fa48bb
+Output.3 = df2e1258c4e19dbf1a01a02a4524a623f69433345b34cfa7dc9f8280aa8d888e0d7c477e4ef9d26626bf6bb921f04b42e3f1fdfd07a933922e5e401d46e6bcf1
+Entropy.4 = d96bf74b085d53251e2bab125e4660b1
+Nonce.4 = 9a240caa055e8cff
+PersonalisationString.4 = 164b91372e9dd0d4c6a0b840b5b98745
+ReseedEntropy.4 = a07645093ec9583b3bc7b45d56daee6f
+ReseedAdditionalInput.4 = ded261a7c109e1fe0db09181962a9b6f
+AdditionalInputA.4 = e1e673d0f552f015a90067d12316214a
+AdditionalInputB.4 = 59b6d6681b9af43ca64e710cd81b5d36
+Output.4 = b27f08c12bb8bee50bf4da1bbb8704ec9b383df84516764dff13bed0f2e7ba216bcb57ec31551c469146572e4c43047916eb7faf0c76e01703310da66181f754
+Entropy.5 = 411c63bf9755d96df414da1ede04f25d
+Nonce.5 = 7562630891cb0ca7
+PersonalisationString.5 = f69b3c6888d287b7d5beea03ab7d01e5
+ReseedEntropy.5 = 78ace23bdb31e43deeedf8a507c121a3
+ReseedAdditionalInput.5 = f7dcad9d6d31f212fc3beeef0df94385
+AdditionalInputA.5 = 02ad67c88655fb1e6e8aad0db6f97ed5
+AdditionalInputB.5 = 172ec6d5b4c01d1e4015f6677fde0ffd
+Output.5 = de065f8fed81af948b340accb2971089a9e23d621ba2b6d584cd9da425c5c9a4ba802b7b3615884fa967c118ec2ed14256a0479c24ccc5917ecd63cc4dde740c
+Entropy.6 = a17c9664bd0ec6a68953f5d816a4ae00
+Nonce.6 = ef8d4ba4152d0d61
+PersonalisationString.6 = 01ac065c62182f51cc8627dd1c1538e0
+ReseedEntropy.6 = 345fb98729177280a70018d67f4974e3
+ReseedAdditionalInput.6 = 5873bc53075d4b8a11bfac368b9136ed
+AdditionalInputA.6 = 497b8870517613e94b8c4b5ddbd74662
+AdditionalInputB.6 = 5e8b41fb2e078032fdefc377e5044b68
+Output.6 = c68c926c32b694d4aba7b7d58b2a8f0f1d2097feb7b92569b338c1ae76430048671cd45b23cc6ec822c8f407a84a55611feb4f9bb080a0e9a435599af8b792ca
+Entropy.7 = a330117c45e06624494e7cf3181a5b1b
+Nonce.7 = db393444f627a217
+PersonalisationString.7 = 56c37d50accaeff994ba287ee76ac538
+ReseedEntropy.7 = 7706aedbcf72b4a8035fc9a134ad27d3
+ReseedAdditionalInput.7 = ecf84cb0b46ba4bfd52b36d4b8964313
+AdditionalInputA.7 = bf9bb515d615a2b3b67267c69e71f018
+AdditionalInputB.7 = 3e69a8946945702695a5a3751bbae855
+Output.7 = 60ec02f11520579e42a26c1f25952eb2a368b805cd74b6ed6b28029d760d297cb2e3dc8b915627d25acb94dc0c9dc1b2732cdbb0101555f7fb416ed4f2ea07e1
+Entropy.8 = 3556fb8729bf4cc98214134271452e56
+Nonce.8 = 671c10fed8b4cf40
+PersonalisationString.8 = 9e855999aacba32f9165d96523a23aec
+ReseedEntropy.8 = 6d857a10611f53b3a977151c8fa28607
+ReseedAdditionalInput.8 = dabd1141be9deab1636b32bc3abcfdbd
+AdditionalInputA.8 = e65cc2e5db616f7288e960fbcf66f3c6
+AdditionalInputB.8 = 4e6ba41574cad76b3c305b4f2621bda5
+Output.8 = 5517c533a061283b9b6d73d33cd85405856d8a4eb20e84bff235b41fcceeddb0b44bbb7e6936c3e3c02cd00b19a2af6f34dcb21341faf76619d6226fb6057462
+Entropy.9 = abe8b1ceae3d3db529f95d644e9f55cc
+Nonce.9 = 5be2691fad7f230f
+PersonalisationString.9 = 29e07171a17e7dc2e9ad9ef7cc23d9cb
+ReseedEntropy.9 = d38fcb2f07b266888ffe56fcc9aa5a1f
+ReseedAdditionalInput.9 = 6b878579908e78e8310235756a77f993
+AdditionalInputA.9 = 1d3ff6cd957b54210be644e6d030a6a1
+AdditionalInputB.9 = 773dc5b396704223e7cca2cd608bceb8
+Output.9 = 5374a2bc46b52d3edc6ed1a17565e748c5e8988d5fab8460a88c2d8db6e850b33c0c8746b322278732f9cf0b73605bb373c25c68be04589102e584e6ac1b196e
+Entropy.10 = 79ffe8b7d3d49db911fd30ef9346d57d
+Nonce.10 = 1b788042cd2043dc
+PersonalisationString.10 = d0ec0d2f766a1414347717c34caf05e7
+ReseedEntropy.10 = 5637ac604b75c1b873163bca73deed55
+ReseedAdditionalInput.10 = 469e7caeb962541f1a91edae0c2317d9
+AdditionalInputA.10 = 61c4af6e274db9afd86804127c61fad1
+AdditionalInputB.10 = bc2b9cbaf0c3f0d5703f1f773aa2c997
+Output.10 = 7aa06859e429ae4ca7e91f0ef853823348ce396401cd543351fd01d9e2d71d60e8335f1c1e5eb14cca17fdb88a7cf98b76c66d0e9ee19bd3c8d9497c76e49173
+Entropy.11 = ccb9d8b86815e210ff4ab2cc2e6731a4
+Nonce.11 = db6011e5f097a612
+PersonalisationString.11 = 49ac613a4f2c9e98649d30423f495dd0
+ReseedEntropy.11 = 2682d8adaafa995bbac43dc1cbc04518
+ReseedAdditionalInput.11 = ed137c1b5502c4f1e201edb05ea77a17
+AdditionalInputA.11 = 3c0007a5e230f771d7f748642c5f5a99
+AdditionalInputB.11 = fa22dd67eabf64cf83a37bc45ecc2c88
+Output.11 = 1358dec3a9f4575e6ecf0d7d597820004a18cf9c7e3dc9f7140e554a7f82f7f9b66056078acbbc01841f15544ac5822f2ff0a849caf6ea8987175b10231d23d1
+Entropy.12 = f94ffca816782085e9d016a42f84de8d
+Nonce.12 = 3258624be8b32e05
+PersonalisationString.12 = 94101d2a9c6ef3a6f0c649563a0297a4
+ReseedEntropy.12 = 3632f0cb9fd46d92b6f9290a49e1de52
+ReseedAdditionalInput.12 = dbd2222336ea625ffb44d612e2d1eb6d
+AdditionalInputA.12 = 478afb776c668135a2bc5246843b68ea
+AdditionalInputB.12 = 16a4778db16816898f96078216d83199
+Output.12 = a89a30c5bb0f1e907e99f36001f5087091b2d4af6e60a7f87b56f694dc1945531cd134776bb35369b419edde4f75b66264025bad4774e8677d6457918e575ce4
+Entropy.13 = 7fa4ed36286ded64bf4979a71f91bced
+Nonce.13 = 586d02a8692fd60a
+PersonalisationString.13 = dd1ef2e4dfcc03703390136dd740cde7
+ReseedEntropy.13 = 1aafe145128fd1ee74393a6f82cb6503
+ReseedAdditionalInput.13 = cfbe4f09b2cb97417ec7ce818b150f0b
+AdditionalInputA.13 = 9169f9d15800e74b53dc415afa498839
+AdditionalInputB.13 = 8dbea4f46525ef21bfce86aa522ffb4a
+Output.13 = 3ec9a502b021faf36c2331cbf031605039ab248b3ebdf7c1553707c7c2fa632ac6602f3d61cce25dc21a3b48f3865eb89cf24eb32740718a2d50ff2249414f3d
+Entropy.14 = 02f56ea027875adaf72fac22d61cd17d
+Nonce.14 = 50dd7248a6559af6
+PersonalisationString.14 = 1e2f364b23ba3cc5815c1384ae22dac7
+ReseedEntropy.14 = c20826284e8fc928548f60c63b386dda
+ReseedAdditionalInput.14 = 98669220d56571f2f2eb17af75b6ac1a
+AdditionalInputA.14 = 0d859d1d9c911f7e6d4ea84a9f77687e
+AdditionalInputB.14 = e1cd4d474c985ba562dc4100ec01155a
+Output.14 = e83f1f0fe0ad9a8b6c0bee71484f03b22cde5ef990af0fa49e45f9e8d0b1cd9c058ff5c62f409bad005ea4f00caecac1de6f6f896f0dabe020fda58375e6ca19
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 8fb9573a546253cdbf6215a1805a4138
+Nonce.0 = 7c2ce65402bca683
+ReseedEntropy.0 = bc5ad89ae18c491f90a2ae9e7e2cf99d
+Output.0 = 076282e80e65d7701a35b3446368b616f8d96223b9b5116423a3a232c72ceabf4accc40ac619d6aa68aedb8b2670b807cce99fc21b8fa516ef75b68fc06c87c7
+Entropy.1 = a356f39ace4859b1e1994940228ea4eb
+Nonce.1 = ff33e95139f767f1
+ReseedEntropy.1 = 668f0fe2d8a9a92920fcb9f355d6c34c
+Output.1 = a10661657b980facce7791de7f6fe61e8815e5e24cceb8a663f2e82f5bfb1692062af3a85905e05a929a0765c741293a4b1d153e02147bdd745ebd70074d6c08
+Entropy.2 = 9d44a610ec1751cb169a5d83208ccee6
+Nonce.2 = 7a507158c989c323
+ReseedEntropy.2 = d80a20897c167806f2e29199a27ce7c5
+Output.2 = 08e618adca1134cb45a73899865df3ab33eb31a751b4298f98cd1fc8d2cb7c3ca19aacd62b375567d6ba0ce1c08f5fa6e68ffbe76b8eaecdf683dc34e7f8d6d5
+Entropy.3 = d0730d39d5b5a545d81562fafaa12ba0
+Nonce.3 = 6837ef6800d0e74e
+ReseedEntropy.3 = 9bbe6533974a7b1a6fab4ead39358abe
+Output.3 = f442e8c6fa95343c33f79e32b972e40691e237a25d5526f57724e71841725cba94a5d45b433e80d2f281ae5ab2455ba7779cf6f33700f4a13e4ddf7743d9fe7b
+Entropy.4 = bfa911f91952b025aec0d1a56ab1d07c
+Nonce.4 = a50439c803ddf040
+ReseedEntropy.4 = 42920c5e7c08154fdd80c52631043885
+Output.4 = 8c1d408d7a3d0d305c134fda0bf83cb82f00cd7c36a0c9b616ebb23baa6254467f95c84cdb77c596a754cc3bd1047af78f0ee064fb04b5e0f30b4a5e456901bd
+Entropy.5 = d0f79a4acb7676071ef771b595016304
+Nonce.5 = 5bc0fddf69a10390
+ReseedEntropy.5 = 279eacfcffbb3fdbaf4b9eb5a66f5cb2
+Output.5 = fe5d3a28e51fb8a8abd0d9c958f18cdb4989e4d5aeab6c79edb5a43e7de909aac157d9094c18c5e5dd043baf065ea2007332ec2e62086b0a61ee49a25f01a238
+Entropy.6 = b5a22a2203644bfb3f2d700530e3f654
+Nonce.6 = 06747e4267cabcb3
+ReseedEntropy.6 = e8a0f995241372d7a306d68ca154de3f
+Output.6 = c456b404915e2d9cf907c3cc15d5472dd3f5592e8b1555703009e2c9c311839ecdc57fcfc725561c87f6748ff41cd7cd4058c791b7b3cc5d7bdef9b525816263
+Entropy.7 = 5046484448d20097de1a5bc3128a92ae
+Nonce.7 = 3abc3ddbe20eceea
+ReseedEntropy.7 = 1afbbf9899271cfc4d0d5e1a5926dd6e
+Output.7 = 8c4afb3764125f6862b16219ab4d971c8d11470b45ab316a0c02a177007816a444ec2585e9466bedc27b69647a4c9ddc00d7142e53824f94c8599a8fe0493fd8
+Entropy.8 = ca137dcc6295618b1fd00296b9f51280
+Nonce.8 = e4220ef872a20800
+ReseedEntropy.8 = 509d1a2bbb906a9cc36bd8120783f29b
+Output.8 = f707b1c7098b2379e754a06849f7e4554531992e976ff1f9d186349f56ac345f3a9b180b4d305213121718369897639b6e96537b557544840a70053102ad8af9
+Entropy.9 = 085e0e3deea07dd73f59f14e5b7f2ff0
+Nonce.9 = 0cd8417be4b4c4dd
+ReseedEntropy.9 = 1cfdfbe27d16e5cf1f40b1338ca88b68
+Output.9 = 41ae72d7cccbc3c5498dfea89539fab8bc4132fe97a4078155a602c48a59afcff8521c9f8b98cce804833df10ed72432ad555332b445159705ca4f083b8c4750
+Entropy.10 = 341e1c73a6ea1f2656f5a1fb1d374768
+Nonce.10 = 9da8a50cd2ed656d
+ReseedEntropy.10 = 060c46770b917e1e52aef57959dd215c
+Output.10 = cee3336fc4e3d71c6bc38a64dd1c63b7cef02d1f7c7447e62587e55be34b3af11386f5ee74978bafd9771a2cc3ec5cea1ea12ad972b4f4c3219ca06cfda34e71
+Entropy.11 = 9703154e413783700f008dd7638b67bb
+Nonce.11 = 121e512a318fd57e
+ReseedEntropy.11 = 7ccf5ce243a06f5d8143a771258901dc
+Output.11 = b2f5ebe6d2a3df80a650813cefd85e139d326813df86b5d24412160c427ead56d754a4cc9c47a238f1bddf234faf22cf0448413c1b0f6ebe76815607eaf50cde
+Entropy.12 = c21f5ba960560548e0e21c5f7ec673d9
+Nonce.12 = f84e7bd5bd4bfbf1
+ReseedEntropy.12 = 267cc99106d5785cdf3071c3dcecf491
+Output.12 = 0a6500cafa9b84701742c0fb627e744a6d4a5c560e6949aa1821321f661e5e1c52a38394aba13b35dcb514289fc8c284b2036dcd8191937c84055723f16a908b
+Entropy.13 = 284a67bae27ab32bc50162c004cb92ae
+Nonce.13 = 04bb326459a887d1
+ReseedEntropy.13 = 79702b24df8df1bd7aba9c32ae596e6e
+Output.13 = 1899d5eed8c2f57e3ed10e780043a85366f1f7c2abc515bcedf66d0b16d698694862adf1a338fb72dafad45e8bc96240d6ac2f3d8bc15374f5a8b48bf6bcfae9
+Entropy.14 = dd2c72a4397b13be4553b5c49a2f3beb
+Nonce.14 = bcffaa34aaac3254
+ReseedEntropy.14 = 90874287a689bb9d6853330ef774ba2f
+Output.14 = a1533421971e2ca2160f2c50c7d609b1b6f56bb7dd7feb0102d9a49952f7aab4a9af4ab5520455ad4bdb242d6888daddb923cf08ff121df114d8da4375f3ef00
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 0ebf2b35e3bb324759439b95a288061f
+Nonce.0 = 85a82c13cc42d712
+ReseedEntropy.0 = dffb5d118bea701d8851b32c87eff01c
+ReseedAdditionalInput.0 = a5381920805718f3f6b30661011a575d
+AdditionalInputA.0 = 62901ff5dba574f53e13c6a62f89a292
+AdditionalInputB.0 = f1d5092bbb3fdf50ca79f3d8b76ca793
+Output.0 = 0f248aa875fa2c12d5411ddcd3fb5b466e14d92bab2e024eed612e988cf50db1a7545df09f886d516da5e021124dfc80f606fe08a6653764abbcfa04575fb0c0
+Entropy.1 = 10ee7533845dc0f023061b20aa735eb7
+Nonce.1 = 35fdf531f188a792
+ReseedEntropy.1 = 31a226c2bc5774fdb5e68bf3b0dc9514
+ReseedAdditionalInput.1 = ae85202016bffa9a3f7f5a9ad403c880
+AdditionalInputA.1 = ecda1ee2f9dfa30a436d7d14e3e0a5aa
+AdditionalInputB.1 = 95a632ef2f1fb0356743dab7d68b8410
+Output.1 = 475f262212a8fa707d983ebc3221d40fe5afd0d57f3f6cca173298a01295d3d4d8fe9c08774849987ca76b0268dc381c66b2dff14d6cdf47283c4b0b27bdad7d
+Entropy.2 = fafcaef2edba52d43f545ce1145331c0
+Nonce.2 = ed9e9313c5a7e022
+ReseedEntropy.2 = f6e697d6325888e6df3e4e472fee640f
+ReseedAdditionalInput.2 = 04a70833c5e916a7fbd4a7956713a305
+AdditionalInputA.2 = 7ab9b4536fc0df7ba3c30b5c2c87cd77
+AdditionalInputB.2 = b71b91c5a55ea8368e438c943ff39c3f
+Output.2 = 6a113a62a6700fb98c2cbbc973378503d910ada05aa8a38e1804f0d1cbbffae13ba2f3abc36deb2b39784c31c8c1318c4a4b194d5518c39b06d705574ce70280
+Entropy.3 = da1e2047bc9af02b914756e96fdc2f25
+Nonce.3 = b167d6001e06540d
+ReseedEntropy.3 = 85187c6383493bd8905a9223a3090e22
+ReseedAdditionalInput.3 = 36bed89a0ebe1c9d797924f9ff442d23
+AdditionalInputA.3 = f9bea56f2f3f48b380c04a3930ac7a8e
+AdditionalInputB.3 = 5c29b5b55a55a9b6845af9a17c67ee45
+Output.3 = cd69844eeb184a70d0534b514c5af3d22e3eb6794d133e8984b9a9b5ea35f589c0677083c39f3c60db7cbe58cbf7df6fcb15b6d721a7b6a94e1dc4086bb13e05
+Entropy.4 = 75fa45e312fe404b2c2d046c957be475
+Nonce.4 = 43f4abdec9958a7b
+ReseedEntropy.4 = 37f9af344a6d0507b52a9ba7c5591a8f
+ReseedAdditionalInput.4 = 60fe6bc8fe440c77b860e80cffffd0f9
+AdditionalInputA.4 = f49a524228c4296fcf84dc8935c82132
+AdditionalInputB.4 = 272a13a8cefd6d539c0bf76b22f7dc74
+Output.4 = 799ee64e0b592cf2946366071f8abece86ac2210b68f0386fba35f9556a9a3b61ee62f7364f0875e6806d40e6a653541b31ca33fe707b66c74b2e15735a10c53
+Entropy.5 = 28f3bac69baca7309514783466305a86
+Nonce.5 = 3705b21e2c31dee6
+ReseedEntropy.5 = 00135b11108541c68c868153702f9ea1
+ReseedAdditionalInput.5 = 988b4e9777226db3ad2fffb56864c120
+AdditionalInputA.5 = 0ee8a998fcd486a30a35e7fecc7fffa6
+AdditionalInputB.5 = 9e45cf0d8163759e79123bddea7205d9
+Output.5 = 4f4e762f1b6d4b8eaa155329ab299f520e5ee19e7a6575c04652da31943266225aa6eb36388a03f17aebd6c745fc637aacdfc5096e3103196d3f0386d42c50b4
+Entropy.6 = 9002abe2297b61abb3e4de54edbd18cf
+Nonce.6 = 46b106132b92b9d3
+ReseedEntropy.6 = 78d70dd7d7213e599e4e7bbd52a0f952
+ReseedAdditionalInput.6 = 9319586b5f897a4a040e3fa031dbb891
+AdditionalInputA.6 = 4473cca8481ddd85235fba35bee53959
+AdditionalInputB.6 = 05c2a1c71f0f42481afec1bfeaca990b
+Output.6 = 9bc12b3948f983649d873df9e6fe871aa14c4680b76085c4254ec568c3324ff76ad01dcb29135ea54548884425710fccc28002f2f5508318abce779e5baa1935
+Entropy.7 = 12e7fcb432d1fe19047d5eb98e45e09e
+Nonce.7 = c6041cdabaa6a394
+ReseedEntropy.7 = eabdb274498d51f33fcdb01be808bd7a
+ReseedAdditionalInput.7 = 6fd0a7bf2a25cce7e5ae19298b9d12a9
+AdditionalInputA.7 = d821533342b372f238550aa4b61f7a4f
+AdditionalInputB.7 = 804c7fdaae8430f3fbd8a2ac56158025
+Output.7 = c55914730d087625531397e7543f073520ed063c7b9a66a7ca6552bcf32d37ad9639f9c3de760c87ab77f24df6416966c97743993c27cebc1888a4c6b07bb198
+Entropy.8 = bf101943665c5b275ab6e0dd1d560304
+Nonce.8 = c579f7dcc6414ca5
+ReseedEntropy.8 = 260d293ff79ada3dbf7d418f7e851063
+ReseedAdditionalInput.8 = 8bde827aaf129c6ab5f6039d72b49485
+AdditionalInputA.8 = e5b593cbc807f62973bb1cee068ceba6
+AdditionalInputB.8 = 3166b001f9246cd307a3e80822f798a1
+Output.8 = 1e8dc87aedafeff8795aa2921ad906a5b83335e8073d3d88296f3171627e2f50e44ca4bace9d0cc9b0f5105a70fba948f12b2057303296f956f67d573cb42361
+Entropy.9 = 6b18da3c0a9669705fb201df9a5173db
+Nonce.9 = 97cd955225e9bc43
+ReseedEntropy.9 = 7496cd7c689e6d15dcd0baf0079c3cc5
+ReseedAdditionalInput.9 = 0f228424b9d27a9f0c5c8b0725874f8d
+AdditionalInputA.9 = 62de3801712c166fda683faf159e55a7
+AdditionalInputB.9 = 9bc9afdf65fe03f0868cf5b1136dedf3
+Output.9 = 317c2aa96f4d3cf79ba8736e7abcd934a8749192e4b21ee0d1feb930093f9812ab7cc6ca7550a02dbeca6528a91b88dfdf04af3831f7e55ccd927172e43401e8
+Entropy.10 = f81d075938bc826893c5751584066707
+Nonce.10 = 78ae6037c77f6caf
+ReseedEntropy.10 = 61c2b1949b1002b0cc08b383c45e0cde
+ReseedAdditionalInput.10 = f5c0000cfef6f9788e89d68addc0989a
+AdditionalInputA.10 = bad0e28feb48a9523408d6b8bd6aecbc
+AdditionalInputB.10 = 9b8b1b6b2146432faaf3a4ff0985a15a
+Output.10 = bdf688b9715cc4cbe72e15dcd8a6596ba2bd003953ebd2bfe69212909adef0c367b473edb45c41acdd22836f5fc9fd47cb354b457f25cc8127ed1625b8fa4aaf
+Entropy.11 = 57ceb9ee595c6e3715d90194021aea79
+Nonce.11 = fb51856926f1b068
+ReseedEntropy.11 = 045b01a347c6730fceb1f2f5ba760337
+ReseedAdditionalInput.11 = 63eca07eb8f49b54a534e0b409258617
+AdditionalInputA.11 = 34ee56a083c0b5f7d0eb65bd42da727e
+AdditionalInputB.11 = a4873d13093c725419caa4124dbfad6b
+Output.11 = f15578396890d4a0c0ac22e55669a184fdb55cab332af7a62102c2d181f114fc34b3e589b8a8c02ee35e9e1aa8af286dd1addcc24bad8211dc90d73809a42670
+Entropy.12 = 2c43f14cd4a262dfa1f3a73d48f678ae
+Nonce.12 = e1dd9b8d9855d647
+ReseedEntropy.12 = 67cebc59c187af2598ea158f0d0cdceb
+ReseedAdditionalInput.12 = b09ce2cff6d8b352228c008b6afb6820
+AdditionalInputA.12 = b6edfe4cbdab74e5f1ea1f44084ef2af
+AdditionalInputB.12 = 2744ba1a4d41cb78b1a02302bd724e1e
+Output.12 = 0cea1f4bbb78060144b22101898364a09c86741b2aa25125dd825cd28c7447be68801de5e8e20a2bc8aaf3459b8cc7c5a0493027b2ae7888b3368f1900831d9a
+Entropy.13 = 5be3bb2a3faa2e107be55012e92dc62f
+Nonce.13 = 045e5090158d31cf
+ReseedEntropy.13 = 2b462ff9729c1b9290a817b2a1ae3f94
+ReseedAdditionalInput.13 = d984aee6b0ee0325ba17b3c10a25f18d
+AdditionalInputA.13 = 868320b83f1b39e394377b5fb528dbbb
+AdditionalInputB.13 = d690eaa80d28a5341d750894014ddd8d
+Output.13 = f9eb2a7a58c2467739972e1e24569c97624ee0ad5f79f12665ce0c5a650180463def3dc33515030449706a3d4edc4c4928f8558149fede30c5f31223d865354a
+Entropy.14 = 1d0436a5dad66a812e0352ed0c0291f6
+Nonce.14 = d1f2e937243dff92
+ReseedEntropy.14 = a91dc181e98d78e1c2c639f9653c4c3b
+ReseedAdditionalInput.14 = 4bf6fce28e2adf33a0863dd3dbda7172
+AdditionalInputA.14 = 7974e5aced47ec8b669972d7c5bde5ba
+AdditionalInputB.14 = 89033efa2cc7090e7a0d1f78de1d8794
+Output.14 = f8573976e2d113cb164f05003c116f0788346c8540d76615f667ed968fde0f7d3fc010fcbe0dff8cb2b0cc33faae9eb251f3845af1df65450cf58c6ee6e1b382
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 13fa3e445aa961eefcf6016e499f559f
+Nonce.0 = 30dc8d2604a56005
+PersonalisationString.0 = da2064c659de89b4f0cf658d4354c280
+ReseedEntropy.0 = 0dd9fb5e7a47e28cd49297a6c13d9fa5
+Output.0 = 659e9210052d6c5b5fd5e49c7f6bb534a53e95f31df0eca7b9968e2cf3d5fe7b4d20b69726db5e2c8a80e8b6f60eee71074a9fcd264320b1c533af92c823ac7a
+Entropy.1 = 99acd51ac4a78edae441b4d1182cd976
+Nonce.1 = fbaffd7749573bd0
+PersonalisationString.1 = 0a7f73966dc7f9f41482a870c3a8eace
+ReseedEntropy.1 = 725cf181229d41741f02d147d7f0bc1c
+Output.1 = 7fd550147ec824118b644f83e6a0855e4167a1f6496fd6c0d342db4ab136cde96e9abc5e759c7d28b78afd697127946282a32024e3855fc0b57b36aa9d0ed3a1
+Entropy.2 = 3af67d00fdf0e73f59591d57b8f6153b
+Nonce.2 = 6981c884476120c4
+PersonalisationString.2 = f95276305a1c0e3da2de5c70a7ba970f
+ReseedEntropy.2 = 8fe4a3d6a0199b23545df99ca6ef900e
+Output.2 = 69af02a406f263eeeaf7a4c4801bf39c3f440db9bc31b523831717f6948987797b347f12af9b4b4fbeada3a4d416bf986aa9248937c318e93e55039b649024a2
+Entropy.3 = a2136b0d5ca7834940d9069548f5dba5
+Nonce.3 = 90b06592e231547a
+PersonalisationString.3 = f9c2dff3992ca9aed00785c216d2ae18
+ReseedEntropy.3 = ddd3757477d8e3256184570df1a6a44b
+Output.3 = 0a727d3017a44771f98442fdf5f1bab06665f93f19d2e1e6ef91738a037b98b83aac19e45bde4791cf74168a260ebb1e058556d31e027db437b828222e515b69
+Entropy.4 = 97163af45ad833602f32f938855546a9
+Nonce.4 = 37931074ded1f778
+PersonalisationString.4 = 386a07fe493f90ee72eb3a652c9558cb
+ReseedEntropy.4 = 62516c22a736d6984bd8d3f8d9fac1e7
+Output.4 = b9053e87e82874155e5deb8fc4499aa81bdf24bac3ef399a292b05d0b879fb75a53f71bb48ca5abc558347d6db37b5534ccd7ef08feb3a0e8a7401a4da3c9c59
+Entropy.5 = e541275a47755d4ef6ab52b81b984c99
+Nonce.5 = 5d33837679cd5dbb
+PersonalisationString.5 = 135c22e4cbf8137dabbf2cefeeb76db6
+ReseedEntropy.5 = 0ec9420c028173b97d1e9615938a6129
+Output.5 = ed765814cdde167b62e4b0fe6ed8450f14e6f116454570ada2af1394aaa5af68beec0e2f70933c5b973b5e1a7559634318f4e60428f930acda513c20795bf059
+Entropy.6 = d35a70ca8221c1868f8d318e52175baa
+Nonce.6 = d7209b944bc4aa3a
+PersonalisationString.6 = 6f4e198752d3427a362a1b01fa41950d
+ReseedEntropy.6 = a6849c1caba2f2629858827f92da049c
+Output.6 = 49dc8751e8fea3f3f15cfbf207c377b49a5a9afd453dee375189260a62578d18c4db515791319c453e5b412eb4e369134940fe762aaac8f1316eab8d11309a63
+Entropy.7 = 2e0edf2c26ba187d9d409d203b0786ac
+Nonce.7 = dbb2e142a8916db4
+PersonalisationString.7 = 325596e2e104f8f6c1054236ebb20ad2
+ReseedEntropy.7 = f61f1f5d07ce98c6e8b0550e07f22dfc
+Output.7 = babf1b489b3d540995904ac0c93aab228253825f86f79e0fcf530e32b2fe68ebf8cf3a8da30a49afa72bae8b36e35ecf466c677e0e328f574be9140726ef2159
+Entropy.8 = 1d4e201ea2a275b4bc62016f902c146d
+Nonce.8 = 1347f044da76a495
+PersonalisationString.8 = 8c93078f9edb99745442897e7f404c95
+ReseedEntropy.8 = f66cb678e4e333f458f38c84dc8c8bef
+Output.8 = ddf770d0b2ebb0190d32daae7e1e1677797408d7c826cfeb45bde2f7dbf24473f1c6f35297f498c3e7078d78048d6cda7afe9b6ce6ff8d3f972e8dce7675a78c
+Entropy.9 = b05f65560706aec6aa69a53034981a75
+Nonce.9 = 978d1396087c7995
+PersonalisationString.9 = 7505c5aef50b6556535ff1e79a9285fa
+ReseedEntropy.9 = b24016ccb9b5321749d382f78835adcf
+Output.9 = eae3632d8b224ca6903f64baf5f75d891640bd38e5714e5cae75f77f0cfc38f06e5eb9c267df6b223933eea5b97377f07a9363bd106872dd86b15ec332c8e920
+Entropy.10 = 22a786b99ee8f874311921ceb09b0b62
+Nonce.10 = 0212c9fa229e40c7
+PersonalisationString.10 = 4f0244e27b0804306c601e84cb919566
+ReseedEntropy.10 = e79e8e72b2cff50023f643deaf2fa325
+Output.10 = c2049544b5c6395d5ff8e3e41b05ab6cc2727d0d0828fb7f9c46d9f998971f77f48853e307394b2fda282faab50cdc7329a52755203d0b52b7f2a635cf42ca04
+Entropy.11 = ef179fed1a28c91e8976a5fb93d8a0dd
+Nonce.11 = 1aed84cec7e6d791
+PersonalisationString.11 = 7d9e67a8f04a2203732b4d3f399d2291
+ReseedEntropy.11 = dd3a4947894005ea82fdc3fa1454933b
+Output.11 = 0906cb8844149ebb326ec2998ce2bf1c69474db7da02bc86629e4970eafcfa023019b60afacaea1a2e10bd3fa1107ee02cdf05f1d930a3a8c61a2cc7c63ea5f1
+Entropy.12 = f186bdff36beab82ea451895864b3b35
+Nonce.12 = 4449d139cea2458a
+PersonalisationString.12 = 4aed4e99555409319e9c525777abbd2a
+ReseedEntropy.12 = 67485699e30bf27eb684d6663d0507cc
+Output.12 = baa141660ead5a6ef41d0acc13e52619a50e262fa71f929bb8e4d9f1ce34e1cabccfed6053c28cbf7589a67696965d0131b223ee83c270800439c6c252fa5d82
+Entropy.13 = 0ba7d625a1cfb900e1cbc780968a90f2
+Nonce.13 = f4155df46daee1a8
+PersonalisationString.13 = 2dd3b5dfe0ceae7f3821d87ba0308b92
+ReseedEntropy.13 = 94a5622bbfda8149393852daceee855b
+Output.13 = 0789357148b9644ca0a5308da2f0c51fcb6a991d09f910b402158059b74125f752895de0b1c70794349b02d72138ad68241cf4c28f8328313c1fd211b1c7c257
+Entropy.14 = e2866d63f6e49e3bd4d94f28e77755f0
+Nonce.14 = f31f809e82177434
+PersonalisationString.14 = 05a4ee9d4e41b1d9685ec3a8cdfa542d
+ReseedEntropy.14 = 01a4f6e438bd52751fb6dba25e301ae3
+Output.14 = 509fd9086802dfa8a6042e21c588f79606b21e7e2e3985498bd2c23098be88fc8afa2caac0f4004be3d03a2a6abd5e90e3aab7e5797eceaaf0e3835408171d81
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e9095c1899e1ea7dbd867d915d8e3def
+Nonce.0 = cea157889daa5c09
+PersonalisationString.0 = b9ae881d60b2445330d1aa2d49edb168
+ReseedEntropy.0 = 3c66906419047d58f47ae788c49c7a69
+ReseedAdditionalInput.0 = b0190579cc71c2142e2b4b147b4f0149
+AdditionalInputA.0 = b2b478915253c784e3aed97b26cbc9e5
+AdditionalInputB.0 = d2419fcce3643bb49cb7ad93ec09c769
+Output.0 = 06410639613584b3b1455919b2e9df5cb3c190c668a0ab473da4e715f81e4472b57afde082727090e3a0d07829ac71850debea34cf0f2899fc3b15dab84180e4
+Entropy.1 = fc17a0da69ce9e7a5b1f575349ca48b2
+Nonce.1 = 6168caf0737a14f2
+PersonalisationString.1 = 0f04681443adbebc5c62fc83307559b8
+ReseedEntropy.1 = 5e8635ae3b3032368ea8dd875a656c58
+ReseedAdditionalInput.1 = 16143e762ed7c92b074bbab4d1f7eacf
+AdditionalInputA.1 = 3465c0eb0107e391ddec0dbfe9aa9ed1
+AdditionalInputB.1 = da9405ea7562e0aeb4fad05ddbc2673f
+Output.1 = 93369be668d37e36132084daed4c637dffd84c0ba4723c7afb1c7b039e56d302294d6bc9d22cb2ef05879a0ed9841409bfdffcb2ec817dfcad47728297871faf
+Entropy.2 = 796e5c41a5f52ce0463fb3eef07a3e58
+Nonce.2 = dddc938014b90916
+PersonalisationString.2 = 126ed44b14eb6310d6a4ae6b298a4757
+ReseedEntropy.2 = cc8a0e9bc79ca4a5807cdccd8bce3e5c
+ReseedAdditionalInput.2 = ae436f840bfa4b376e18c8565647040a
+AdditionalInputA.2 = 925d97c345eebee3b98402e462db0e05
+AdditionalInputB.2 = d7fea1ee0fba8831d3abb03c0fd7a002
+Output.2 = 5007b3185210dfe1c7f5577d38593f6b8a2e8a6190b7e14b47d86b0d906f59eddd3835a7b167a3374428ad9576588cd9a7712ad0bf7165dec43dc3da5f11d0b9
+Entropy.3 = 1025ac69e978e413939acfd5859e95ed
+Nonce.3 = 638b9c36e2c74d96
+PersonalisationString.3 = 9eb46676274b965e9bdb06a6e88474aa
+ReseedEntropy.3 = 0b1ffa142098080aa6f7f39591cd298b
+ReseedAdditionalInput.3 = e09018fa1ecc7699d23a95d2eaa2b763
+AdditionalInputA.3 = 78895023523f16af9b0853e8e688deca
+AdditionalInputB.3 = 7a3d33d8c4a6dbf6264407a543510a95
+Output.3 = 4edd23f437664693689451c7fdd5b5e9469a4ab0a791dd69a9c55e6bc518ac727f844291e45ee4161319690705553f1a320f7847c418116ee0e11ca65277e5a3
+Entropy.4 = 31c2d2baa08a1e840fbd3945b17972fc
+Nonce.4 = a62bb4531b51208b
+PersonalisationString.4 = 178397b1ee1e7c12c4c16a5389329838
+ReseedEntropy.4 = 4556ec8ae5c69c19a39711d161932c38
+ReseedAdditionalInput.4 = 589ad784d2343d58890ee677772e424a
+AdditionalInputA.4 = d592685e98554738a3afdb2a90a4da5e
+AdditionalInputB.4 = ba25fe15d5289e3a44be7c51cc4958cb
+Output.4 = e212014a69b2fedcf8a6432ae8fbd6876d573de2cfa350967e38eef590dd0975bbd780d09f4b8648d1bce961e7db6f7a911b6b8de23f790f8b5d5ff6cb23ae66
+Entropy.5 = ff5931dc8f62d0bd4a5fbf311af93ddb
+Nonce.5 = 692ffef26e04fa27
+PersonalisationString.5 = 57f99c26234512df835f3e391acabab2
+ReseedEntropy.5 = 5f4244762865f5493be91d5690a31391
+ReseedAdditionalInput.5 = 0f39876d906778ccc8a2b11d7143442f
+AdditionalInputA.5 = d61b399313b4d13d50f8b20762df5f83
+AdditionalInputB.5 = e3cad6240ace0feb6261a45b4a960e8e
+Output.5 = e32fd48a050235a2604b4f2ee8dafa36139b0afa59cc64474c5c2c988639fbda5ba2507a4b7056865ad3d97d52965e57eb5bac8fee26f12d79d7a062ae6b5f67
+Entropy.6 = 03220b31bfa4aea7e017264ff70fcb21
+Nonce.6 = d1873d935fe60df4
+PersonalisationString.6 = 0769e860ef2c56ffca9d591b62893fd0
+ReseedEntropy.6 = 81546cbb721ce8824cda3a56d061acca
+ReseedAdditionalInput.6 = f8f3ed27709efaa56e354a83fcfe319c
+AdditionalInputA.6 = c8e325cd78120b51b33ad7a6bf9a592c
+AdditionalInputB.6 = f7d43206a8313f7e129250215cb4911b
+Output.6 = 48f8302b5eafc451424a49d917dd48923c5cb835ffb1533d0fd0b248ab0722dbf0c9d53610771aaac9c03993fa43293cc7083ff1168c23b2e618761058af797b
+Entropy.7 = c5df145cbc99c3fe243e46a8ad5be5d8
+Nonce.7 = 81e54562579d4032
+PersonalisationString.7 = b28e1da0af72176ec1f767c972fd9558
+ReseedEntropy.7 = 546e4694c6130c483c36d69718ac2b73
+ReseedAdditionalInput.7 = 78e05240cff43b62862585005968adf3
+AdditionalInputA.7 = 564c3fb62e542291fc3c6edfaa4d4dfb
+AdditionalInputB.7 = 86965563373f3a499c78396423e8d5dc
+Output.7 = 3ff8226d9a38afaa8909bfbdb3d849abb36896e3241c96510d32ea82ccd9a77cf26f30a04920fb2eddb8e06a32a6b107a2d2835330b8f03bf4030dc2c445e0b7
+Entropy.8 = ddb06d7b033fcf770b1183c2f10d9686
+Nonce.8 = da0fc8b8908ca951
+PersonalisationString.8 = 7b6c6c25829694d50193c69edcfc8bc8
+ReseedEntropy.8 = f193e216601ece770c56e83fb59b80e1
+ReseedAdditionalInput.8 = adbf18cdae2f017b4741e65ba1c4d067
+AdditionalInputA.8 = 3d109698432abb856eabc1945591a485
+AdditionalInputB.8 = 98da851263c02add5cce6d0a076ab658
+Output.8 = 44ffaa6277f29dd771024280dbed728a298c2b0254ffa8774020f849af3d979cbfa26abe7f4a0802703891d9f791ab5a618088befa3cc4307b2f6ad4a4391bb4
+Entropy.9 = 558e28137db0f651dc668e0f7ea59026
+Nonce.9 = 82d64daed7730963
+PersonalisationString.9 = 94af4325ec7522739eb7b1445936d6ea
+ReseedEntropy.9 = 16eaf7d92ab4dc77638cd755f383ef22
+ReseedAdditionalInput.9 = a2962feff8928b31fb53a07fd1ceeccd
+AdditionalInputA.9 = 0ad8333171b7d8ede900f7fca03fd449
+AdditionalInputB.9 = 31adc14dcae150331e7e02ee4c17706b
+Output.9 = 78b0ff4ce159ddd503062f553c68594fec394bf4b25e64ba8af4bb2b7ca5ee8767634cba2fef9b32ae283d1951f4b98d46a998e7f358c714a95affaf41dfeb17
+Entropy.10 = b7ad5679f68142a8476c98abc2bb1d83
+Nonce.10 = 7579dc55c505d795
+PersonalisationString.10 = a5a73e8c501b5fe546c3c19b9d3cd093
+ReseedEntropy.10 = e266af41006010d3dd516423ba800d92
+ReseedAdditionalInput.10 = 157a5e19f7e558a49f1f71b6aaee14a3
+AdditionalInputA.10 = 37d3492cbefcb89b056fe1290a095f4a
+AdditionalInputB.10 = d21d692633483a676b0b30b35651df96
+Output.10 = bc7e1f7874d04fb00059869e11d7f47eb3c17516a058c195151b3310923e631553ca6b8fe070742a07c2a23c3c3abac0473478c04a066e5e13771ff7d517686b
+Entropy.11 = 7010a55c31bb9a36578dcc9ce3ffe5d9
+Nonce.11 = ce8b37c1f7b0d979
+PersonalisationString.11 = 9ad0de6c7101732fdc600e51fad1390c
+ReseedEntropy.11 = dc157bf68f160b84821319e69aeec33b
+ReseedAdditionalInput.11 = 6e7a5c5f08299fa4d4556ceaa2527b3f
+AdditionalInputA.11 = 6e1f9ca8dc3d22a26eca835953b5a8da
+AdditionalInputB.11 = b8b38c7a3c5cd587e9f1f94eb1f2df41
+Output.11 = c84e93d168f87955f17513112fd1f4f2af7fe69153da7e505e83740b292985336724ddf46c26ec4d2c45fd88369b5f65db8a8758934c8a829cc786218d26e971
+Entropy.12 = 72f67587aa67c348ee5c01c988a076fa
+Nonce.12 = ab35825387295d4d
+PersonalisationString.12 = a91db32b93dd5cc3ac4a6161b25bee77
+ReseedEntropy.12 = 8fb80d677048d2564d3949b9b9579cc4
+ReseedAdditionalInput.12 = 4306a4adbcd0dc8cc2f81991e12911dc
+AdditionalInputA.12 = 620fdf287f777c67b62dd04184c488a8
+AdditionalInputB.12 = 8428f2067dfcdaccf54399d0b7934aab
+Output.12 = 5bfef85839879d9e9553a2fd24f35aa8199a091775d2cd91173270e141a58669b192e8e5b357c57c02bd2280e229829725596cb96086bb0838227b00209c9a72
+Entropy.13 = 1d2922ab374be1e743695dc9999dbf59
+Nonce.13 = 309460d3e0aee322
+PersonalisationString.13 = 72be1c15d3eb98566b367e7270c4f9c8
+ReseedEntropy.13 = 0d57201d230c4c88c77f54e3db0da7e7
+ReseedAdditionalInput.13 = 4f019eaf1a93a2d5ac3b68acbf7fa57a
+AdditionalInputA.13 = 0cf82b0c4dc6f6070c89727c71a870fa
+AdditionalInputB.13 = 367d49816145ff6079528142ec9876c6
+Output.13 = f038a79f9f82e26135f2e7aa678be9262a7be0e3ab1c2e6a9c37fd6fc8f58cb490b555a6acb24b3558ca941187356f92d0e7a5bad301a962f06181bd70078565
+Entropy.14 = 10cbf44608fda48fd6ed572fa4ffe7eb
+Nonce.14 = 6aa347c48dc809c3
+PersonalisationString.14 = 1b5898e0d149e5036a6396b854d2c4a6
+ReseedEntropy.14 = 802f1b3bea9162b69b3b60faca95bacf
+ReseedAdditionalInput.14 = 722729664be0ae8077437f59229eb51d
+AdditionalInputA.14 = 38c39183ead35859c7c75ed1042b9cba
+AdditionalInputB.14 = 0c75ef357c721604ef2e1186f656f56a
+Output.14 = a70efa589e73b5b52dfa077dd02b256bc8b9718f08d354454456e1f1a56c00521c0d63fed302cc670fd5646cec5691f8b6ae2ea88927cecbd348e2e774830131
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 845229e42c4b39c41573544fca838c2f
+Nonce.0 = bcb23a5b7b280c41
+ReseedEntropy.0 = e549f5815ad32953b115b8da6d2c3dc9
+Output.0 = 45338bb67d2731c9f62ead904a61eb816f93efe0605fb4495f92521d9553adfc5c1b0230216d4c2a384f7ae162ff6319fbdc4e1108446f3372fb6ba5cd6de21e
+Entropy.1 = 61701c00f47f25493aff86627e13403a
+Nonce.1 = 80ae97de15473f70
+ReseedEntropy.1 = 82b57772753df2e7776d63ee975116b4
+Output.1 = 8a5b2099d291bbd21bcb479d37a4082f028dcdf1c042cebd5ec2ddbf5867b5ee60eff1b1dcddd76fe4416f229cab3ad65abc9b57cebb318909feae4c1a2db1c6
+Entropy.2 = b579a25f3d285bf8e5c652c2432f33ae
+Nonce.2 = 261291699d891889
+ReseedEntropy.2 = 8a7da7ae82372e50dca2dd7cbf4a97e8
+Output.2 = 8ab1e75d312aa8a1fd7d29f15270afad72a429a7d09cc0f0c33316a73e33b3a615532ff60cec574b4c2f4ec3ee8bdaf9182b2250b70eaa66514952ceca9dfd87
+Entropy.3 = 7653fd17aad224506e9d7670f6509d77
+Nonce.3 = b6205411ba313cbb
+ReseedEntropy.3 = 40455e2f1484c89a0f5451ab09a90008
+Output.3 = 39a46870b16fb134a44ee6239b0a1689915b175de51c8acf12ac54d42a90376530d8d99b2774f2da48c6d0f00d63ec721b292ed3f060eab8490d0ef3843572ff
+Entropy.4 = d30aa74144d9e93d9d89fa4f02966c98
+Nonce.4 = fd1a5f8b22c1e382
+ReseedEntropy.4 = 5828a64ef309ec9445ffeb4284f249ed
+Output.4 = a0aeb594e5ffec5261076120a795150d4190236331bf13cd6b994cbc61c3a7006228c8a6090ccc633877e372e1fa469a753504f0ee9d79467359f71c1dffd81e
+Entropy.5 = 9c9bf9eff8fb95ea6a445406dbf258c6
+Nonce.5 = efa83a3bab1f4c1b
+ReseedEntropy.5 = c409193b187075c52403e6853f7b866c
+Output.5 = 9caff06f9b61b600e2108b0b94fb8256c136e5d79a17ec3a5091171accebf1216bb529dd4e9f9debcea9ed32223acc55d8db1a55041aee39228251a5496ea482
+Entropy.6 = d36d63bf8214c360d9c82877b07160bf
+Nonce.6 = 3cc21048a81aba3c
+ReseedEntropy.6 = 2ea08431c84ad13527277a317309e5f4
+Output.6 = 9fec4b24a21aaa365619202b158c85797e64129bb5a095c7a35a2ad5bb4c583f8ca029b69f992ce1a1771ec363b016d20f9b012b78696cf2299acb6957c01777
+Entropy.7 = 89d2cf4258d78636bfa89dedd66ece30
+Nonce.7 = 67ba75ac919561f9
+ReseedEntropy.7 = aa1f978d93c747933e9f717e101bf8a0
+Output.7 = f9451e0387be0b518c538422f4aeb80d775561304555c5957ec9c7d52a8b773c7bc19a21a848d4741c18836396b37011fcb454ad87ec066e40a861dab407ef37
+Entropy.8 = b15a9eecbd33ef601fc4946b78b31803
+Nonce.8 = b145c3db01c5dc45
+ReseedEntropy.8 = 64c7acf3473d0c4ab3d9d20e424b8082
+Output.8 = 590ef8df1309d1f2cff27e405c722329f699cb5672053131228060280f448d1fef8091de469aa6c26dce06def99833802b363dea4d7c4b85bf28149be93d6c16
+Entropy.9 = 8d357cf4eed0f104e393e850b91048bb
+Nonce.9 = a99f29509bedb6df
+ReseedEntropy.9 = 5489e4838ce24a12c579fbc10fe79724
+Output.9 = 55d7568606d76fcd236e843dee343890405429b056a8b63ff52c089078195b549de6718b362ddf2f6f4c979cdebe2fe793332b78b892dac8edd22c42a5d06880
+Entropy.10 = 6201550244c1a42a4c457a7591d25743
+Nonce.10 = e83427a9f48d567e
+ReseedEntropy.10 = 4449410cfc18830ec18512ffbe64e562
+Output.10 = 09a34444998a2c1caced5d9313a3b8e39a13c8ba98a33e96d78a991055acfb384688b5b3e1b87c2c3d0c910fb9a420499384a49070201b76c14a126851b8f43d
+Entropy.11 = 5bd54faac8f1b11fe1d50afd36b0589c
+Nonce.11 = e385788e7b67fae2
+ReseedEntropy.11 = 8726550330d852838a999fc989e4a1a6
+Output.11 = e87bd188f3feefb4d058bd732a0f225689b8eb31cbbb65b3161eb5f8d523b1befc59b005c8820d335a060ce2aefabaf74a6dd994f8134e7805ac65e506570af7
+Entropy.12 = 4749f6ae9d200ce0ffe5bca2f7007c5b
+Nonce.12 = 90db60c760e3002c
+ReseedEntropy.12 = 54ad4ca19402fdbd376006021040bdaa
+Output.12 = 379801262fdbda3b30373719ea2241b8e84fb173565163d963502277fd41b62c2f78506d23ee80c7f2e8b96354a6caa69dd694d8049467504617f694894574c2
+Entropy.13 = 184845ac4e884213081cb29423b5116e
+Nonce.13 = 299207bcbcaa35be
+ReseedEntropy.13 = 5460f71393fe8aacba6aa2b690cac978
+Output.13 = 019efacf060de6898dc234ad02facc8179bfd7e4fb708f1c015192d43d953e590bf3e8a252fbfaed5d9b5d69c99c2343d9c32c71a9010a12d69a8e6c86e5890c
+Entropy.14 = 3729fb442bc32e132a5b3b6f379dca0c
+Nonce.14 = 5bd4f3fb9ef363bf
+ReseedEntropy.14 = a51080a35e53e80f63678299eb046aab
+Output.14 = 4fd586f74c278c149d1bee6714a5cb9410c205d042740b454b7a841470b7f987f6af8a680e91a3f2bd88116c25d9e5ec8a78f2d12a1289a01574f2f751181cd0
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 34d0f9f714d1539a298b21d3ea188d0e
+Nonce.0 = f2ff4bd5f6cf7812
+ReseedEntropy.0 = cd44f41dc3fd07d88500b4084a65a9a0
+ReseedAdditionalInput.0 = 19c3b70ba950ac8535a4b54e1176e7e1
+AdditionalInputA.0 = 2335699d1e4dc4f7781375750fd6dd86
+AdditionalInputB.0 = 25a84ee746665d8c50b0d672445a9f04
+Output.0 = 064054ac13c9daab5906b648314979376063508bba8721fff6fedc452219081f6fe03f7cff48f6a582dfe33ca7e57644af2088fd6774dfa59cb93c1160edf8b3
+Entropy.1 = 9747590ce43b118f68512c8dd6945f2f
+Nonce.1 = 572136c84f2b76f8
+ReseedEntropy.1 = 79183d9f83bbf2e4dfa11cc8a4e520d5
+ReseedAdditionalInput.1 = 077748f5935170c24ee64d5305701407
+AdditionalInputA.1 = 55c39da16497ae1baf6816e13f9ee28a
+AdditionalInputB.1 = 94956bbe661933d7c8f7025d751b27b3
+Output.1 = 7aaa55d565fa409ae98312a65b8e6c462f0be0db739fe86290dac1b5e1b1924144988033e89e81bcc12cda586bf5c9547ee32bd5cfce50dd213295a47b2d54eb
+Entropy.2 = a18e3038d4bfb3fb194834b65c3af280
+Nonce.2 = 6042ece5c216e0f3
+ReseedEntropy.2 = 39cd5ebc183b7c85908cbaf45e1b1792
+ReseedAdditionalInput.2 = 1d780d8e23065770a6ebfc0c11bdf8d1
+AdditionalInputA.2 = 7ba257ad0b02b156ebce644ec3b590b5
+AdditionalInputB.2 = fa8cb5ef31450daef8560d484f9bd638
+Output.2 = 5856545b1c444e020351ed06420a4186898be070905d182a3229188afca55c2480b1f12e0aca0b680c9c72c2009cb3dc0b9be7d724fcc9f26937fc09a5d733d1
+Entropy.3 = e134cc134a22b4d622ee6fb1e89a1c53
+Nonce.3 = 149f4eb0080070d3
+ReseedEntropy.3 = 533684becf30ac8def95b5e544990c99
+ReseedAdditionalInput.3 = 1c61bc27f6d45c7e06613777a6ce1498
+AdditionalInputA.3 = 65f60ce8dfa6bcf82f73f0a93fcf9911
+AdditionalInputB.3 = f2c1e2a1dbe9f1828ec7733c18a16ba5
+Output.3 = 322e860379e66384df97f521eb6b8e8520b0372e908927e50e06077e3bd3805199fdd05d0b8ac61982b1432107866e37d4596b42a3421513638a6196e6a92d61
+Entropy.4 = 3263fbac893e72f1560438da0b4a9a34
+Nonce.4 = 7770a46c62719759
+ReseedEntropy.4 = 5d3683226f904c8dba1759994bb87760
+ReseedAdditionalInput.4 = ec8dd92eece7bc810e4c7a6c15f1e804
+AdditionalInputA.4 = 051bd83d0de0520bf91255811e454a43
+AdditionalInputB.4 = 22841deb0d11781da56fab8d122b395c
+Output.4 = 9e42abfa0c062d8ad694550a395a7c362f1491a2f4129ee5ae5a17e31deca412c8444605e9559058dfdea5c437653d190c57195b42d44f1fd8fdafa0e8ee4008
+Entropy.5 = e63ef8ca1615f73f0e0d35ecbe681bdd
+Nonce.5 = e7f6c3f5ac90ffcf
+ReseedEntropy.5 = 7f891c36f7e3f013ed05379aa993b381
+ReseedAdditionalInput.5 = c94045d4514c747a84e41b06a555f849
+AdditionalInputA.5 = aee69806ec57f61933f606c8f1539245
+AdditionalInputB.5 = a67dc6b4ee427e0f6d2da0663f0ce382
+Output.5 = 2a8c7ccc8c5242b1214d192ec5028db9ff42e73a3211571a05e9b3d8790a787f2bcf809b8f02ec8d3ed21a579e955c42fbdcf8583ef693bb7e0096b7b9251b2f
+Entropy.6 = 6d2c97d0c888f49c45539753e38f4f93
+Nonce.6 = 8d6a04af07d26f1e
+ReseedEntropy.6 = f6d80a65e2a4569a9f644f6262ae8bc3
+ReseedAdditionalInput.6 = fd491d4feeb230da88f1c3b557ef1da0
+AdditionalInputA.6 = 52266b8c279dbe61718496c23f9262de
+AdditionalInputB.6 = 0a2e549d8d1b4f0f1a663afdc576283a
+Output.6 = 1f72b7df97b35d8daf1e3596e58c728dab6e7258567741943185ab7edb0d41fc877769834b3d01edf4693018e526ab55ee124fdc5ddf805852d144960d1666d9
+Entropy.7 = 17921f57c0bf22a513fdb08de4fd6780
+Nonce.7 = a1891a4e0af5694d
+ReseedEntropy.7 = a493c2ae196f9a2b66109d958e8f9be8
+ReseedAdditionalInput.7 = 311c0e0ff4433d402a69955b54e8c1e0
+AdditionalInputA.7 = fb16e6ed995381cb9f93fb379123eecf
+AdditionalInputB.7 = 80817dce78d30eefcbf1fbed07c08f2d
+Output.7 = 9ee11c5c7d77b9d3b05cc828572d3edc79791f3092b4cb6ec06907fabd202b678cb495e560c750eab28ec91dec23bc4621c353db91f0dfb1b95614f2f41bffd5
+Entropy.8 = d50b76457bdfc071f71fcd1666d447fb
+Nonce.8 = 1c9ab7237419b3ae
+ReseedEntropy.8 = b1e94bc1df60d54f0eb26293bf175afd
+ReseedAdditionalInput.8 = df293ae285b9af7a8e69ff2fcdfac85d
+AdditionalInputA.8 = 0facdb57418e7a228a7c56663dee72dc
+AdditionalInputB.8 = 3831f9659637fe2ece94f524a38ae576
+Output.8 = 12960a4d3f80dd2251022153529d07f5e72e155f912d9c42c7c134295701e0252e903062718e0836b4bd4af2c65f45e6c736710e5bafb842936a23182e3888c4
+Entropy.9 = afdd79f792e4bd30694c4a04dd9a28ab
+Nonce.9 = eb336d7a66a6f29d
+ReseedEntropy.9 = b8fd1fca747e540929d8800a335d5c8f
+ReseedAdditionalInput.9 = 418edd80f344bd88556a4d901e6291b9
+AdditionalInputA.9 = cd1637517ce62ffbc59698c881806942
+AdditionalInputB.9 = 12a4e47e6727b04aa90ab43e39dcc322
+Output.9 = 25f7972e9ef340b16f32985ef50922ab4b596034b8aeed3dd69aaeeb98bbdd57a602bcfb42e03a42b00c9be2877964a06fe31d368f911bcc9753bc3cea059dbe
+Entropy.10 = 2c1111f855115ba35d49e666fc528e56
+Nonce.10 = 4296bdfe67de2601
+ReseedEntropy.10 = 85596234f2b8d9873ac29744af1fa21e
+ReseedAdditionalInput.10 = 5ec12e102ee59298f6466cd6b931ad5f
+AdditionalInputA.10 = 681d63d56893c0c85b4c5b081b6b46ad
+AdditionalInputB.10 = 817d54b8d6daa6e0f8f1c7018d7e1810
+Output.10 = 0957d1a10e59758cd6a0c507505617fca5520396d43491e4f0b981f023af5e09805304e887d70a9f29bda15bff725bff3e54efcaa4596342def17dd91ccb5068
+Entropy.11 = e84c466a541dea2d42533686011d8fea
+Nonce.11 = b6871568d8839ec5
+ReseedEntropy.11 = 7312edfa7ad556f9440038244a984bf3
+ReseedAdditionalInput.11 = b5131ec346e970f2fe248cc9bb41c664
+AdditionalInputA.11 = f1803095a6e9e62969d4402942056473
+AdditionalInputB.11 = 10a7ea90ea7b6975f08a8deececaa4f8
+Output.11 = 158aedc71da0304e1dfa238d306fcc8bd7a77802749dc9282658fd9eedd53f40d8263f34d089784267434912c7e634ffbc97908700ce2b599f9b200c36ad49a5
+Entropy.12 = d332c06515e3660a25e69fad54e5837c
+Nonce.12 = ca60e6718936fbd7
+ReseedEntropy.12 = 50dc6dd9644d79d28f05baa9e2ae772d
+ReseedAdditionalInput.12 = 7a48dd5eba3a69899d3253797802432f
+AdditionalInputA.12 = a50ccb58123b0c37fa543d8ae523e8ed
+AdditionalInputB.12 = ce9e860890eb6bcd91d9733cdcf96e10
+Output.12 = 060626499e14438576d7621d71f01e4be874a955330b0d5d6fef3794eeb761b4d11a88d1ce09942e244fde576d7e964585423d6584726eb798f35772caea1df6
+Entropy.13 = 475e4905d8c968d86437453f58886693
+Nonce.13 = 4a9366ba7fe4108e
+ReseedEntropy.13 = f00f3c00e322b4a4388d4b5c81a746b6
+ReseedAdditionalInput.13 = 8bae1a96ca839d48da80d2fd656d7080
+AdditionalInputA.13 = 24ef112511b6fb0b0ce569b642da3e41
+AdditionalInputB.13 = bf743994d49f01435d3f6505e4108c06
+Output.13 = 579805d64a46714443423292142e390494d8ec9f42a65a481129f6548a0bbd3db24b902e48c0d4977027538ab75447e7115380fc453d25250a8c97da5d0c86fb
+Entropy.14 = c0e18b8110f492c52ea13a86799b5b23
+Nonce.14 = 8c8d0521b43e17f4
+ReseedEntropy.14 = 1c6d2c899074c76e08edc7bfd8b8ed06
+ReseedAdditionalInput.14 = 0cc1fccd3b6c0d9aeb4ada6f40009603
+AdditionalInputA.14 = ee079955886e85e7cb9d76b5ddc40c14
+AdditionalInputB.14 = b0c10548fe954e2d788933ccb35f561b
+Output.14 = 9267ed605e90e15a3703f1517daa7cdaa03cfd8f0d96c569ddea429cf826b39fa97cdb8103ce590c5e91b6a8d6bd93637758b53bcf0fc6a0b476245f94b5954e
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ae5a2f9726ea953e4ec057c4c96ddd83
+Nonce.0 = 7fe815f735253bf2
+PersonalisationString.0 = d4914e8870c298365c8c5df216d259f3
+ReseedEntropy.0 = 2cf2fad8c59c50508608555549cd611e
+Output.0 = f9120eaa71e3d8543333cbd0a83b46ec86a22200878616106c866e13a8cbd646915ad81c7a11aed8396a25f98b324b5352eaffd501fdc9920b5353590eb0409f
+Entropy.1 = 95ee917d266131bfd690cede3e20fe6e
+Nonce.1 = 3768c29157e4192e
+PersonalisationString.1 = 0f89375da6b2f7aa5e8e86c98e092889
+ReseedEntropy.1 = 78e59c9b60282fe55108eb896c1627f4
+Output.1 = 21f45f0f87955385b3a604f87f7a770fdc4e4c2d6ccb7cf53487d99c9e11bcfd886f2223451777080fe49e3b8a4059a83c546610107c9aa9a151522c7219634a
+Entropy.2 = 244b4aacc403b08f4fd80dd655d2639d
+Nonce.2 = 41639d0315113fa6
+PersonalisationString.2 = ac587a5c8dd70b8238bb8ac673ef8cbc
+ReseedEntropy.2 = a4bb89bd6be858c9289053a245c47ca1
+Output.2 = 90b59989325f3e7fda225c2189cf7f6cd4a4c43486b42bb7af90f6f2b15f9de54a3fb4e1c84b76249153cb6f6e2aad8dedfd17b90252228559ecc8a7d718dec4
+Entropy.3 = 6ec82c6c913e33a11756eef84457b766
+Nonce.3 = 1774b27cd4c33784
+PersonalisationString.3 = 808c58bcfecd0826b295f40108ba20d4
+ReseedEntropy.3 = f8cb5bf5e68ccdc43488f2578bb4a5f0
+Output.3 = 11e8e816053bc066be8e9706d3f937cbf98e50eca805646138b41fa6a6d4a358077fb794a69fdfaddd75c4bbb5e6f71d7c5e8cb088bb25162e25eacaaa1c4d1c
+Entropy.4 = e3f025984fa7c878c0d1f97215abe474
+Nonce.4 = 33ccc2ed466c1e7b
+PersonalisationString.4 = 37307836b15355447a635f28cce03888
+ReseedEntropy.4 = 3346d389742920c81ec7c9319f457f85
+Output.4 = b1c91952eacb72b4f73b960ce4f228d18ed3cb22e4a87072f89cb865adbf4d38e3d8a09d1c1bb3c71d9e63d7cd59c2544186b86eaf79fa165144ad9c3909321a
+Entropy.5 = 8ff35a1ac080dff97ded221621166a86
+Nonce.5 = f78aad37939c788c
+PersonalisationString.5 = fbc5b61a7c04851f0690ec4cc8702757
+ReseedEntropy.5 = e251fd54e0e66660d5ea10a7edd22029
+Output.5 = d4d313907b08293c1a03cd3d9a63192f44677d370ce320501b5faf2cd66fa8fa4fd1dd3f340326a99b8b5e5b02a636eeb04fbb0f31f193be24342e6faa3bc233
+Entropy.6 = 8dff9853cca315ff7e45a13b1dc20095
+Nonce.6 = 7e160780d697255b
+PersonalisationString.6 = 628055ef3a084967aa287f626d0d8caa
+ReseedEntropy.6 = 8ad8eb28ce1bad08f4a24f3b653e455e
+Output.6 = d65778084ca505561355b8c3c8cd0833cc94c68038b00f38ee593f0bcad797ff6ed2ddd98f9c65318094b43c25dc59b6bbb0d31f79c044f910dabbd6c1bcc54b
+Entropy.7 = 118e19a31ccdd14b8449e6b12e1340b0
+Nonce.7 = 22187a3abb4477a0
+PersonalisationString.7 = e7b885952c83884ea6a96c1a51ee7ed5
+ReseedEntropy.7 = 8db14d02f1f63c385dfd5592aaea1c2e
+Output.7 = 15478cc9c12df70e182008b860e0c4de5d8dfc375bb686c58eb694f4817b4b0c373de53c4901b64d915bbaf7a41a4360aea9cb996ee3d51556fba9b0c3196bd4
+Entropy.8 = 83f3f7adeb932e3b803f435213a3283e
+Nonce.8 = 248d7af9ce6e4167
+PersonalisationString.8 = 39fcae726dbe651bc80e56a7ec19fa60
+ReseedEntropy.8 = 0bfe69b9abc8a76c063e06d3617e4147
+Output.8 = 7e6f2ee570137abe6c6e8db2556b2d30f87aea4fea5fa063a110e942aec4a2770b571bad44f07d3989e9adff2918bebc04628a88eeca6c6f2cea7cc338eeb670
+Entropy.9 = 2de989ec6d0da9ebcc02f724a4476712
+Nonce.9 = f2f3794d18ac2bcd
+PersonalisationString.9 = c50ac17e4a68f7f02d6820653f0a71fd
+ReseedEntropy.9 = 350927eec6636305babd0feee243082f
+Output.9 = dab204ce72afd6cd256a1754ab7ebe424d4bfc6aeeac9b6bbd06e79f21286345457b5fd46281c145eec450225823c7596e18b7bcbb379845a384ab48d8a555b3
+Entropy.10 = 760fa0515304e524743ca563baf248f7
+Nonce.10 = 4686bf0437a286ad
+PersonalisationString.10 = b03922e8923493d2227a1bffc9ee7c09
+ReseedEntropy.10 = 70294aaba8042e770e2edd6a02d365aa
+Output.10 = eec8b2577cb10375f56f8aa8789cc816c0bfd4b928f2b5afddbe8fddb14b0faa1dfdba5188a2862523cf4c44ce1d90e12a1fcd42263b305e2d85d3c40f563b14
+Entropy.11 = e102ad437aa0a7dbd850608377afef1c
+Nonce.11 = 0c1214cfc9b3b450
+PersonalisationString.11 = 15a79cbbd9ec839efc49a1030e8c20ae
+ReseedEntropy.11 = 8464c0fb7335305f54571f2951272115
+Output.11 = b6b18e26d90e70e0b786ff640840273ee086bf03205905fe1cdb2e9e892f0b2aa2d6e78ecd3cee2d99286160c294dc368ed45e2eb331d03bad58f4b5cc505053
+Entropy.12 = 90a9acc6566b8ba0db4ed5ba9b7d19d9
+Nonce.12 = 74b6c943761b9568
+PersonalisationString.12 = 6bd16bc6b029ab5f76683be712dc3272
+ReseedEntropy.12 = fee3ad6f484584b3163a213f199a4d42
+Output.12 = a3cc0df53f0d516a279a253e6853b146a4bded0c270ae661e19faacc5a764515d01566882f88de5160f402e2ce0ec46d1d7d50289446de69ac9d889ae10882fa
+Entropy.13 = a9c5fa1fd15dc35acfd25981dd547b56
+Nonce.13 = 267404714f70a7cf
+PersonalisationString.13 = 610714922290360d4919a9f1f471bbc6
+ReseedEntropy.13 = 9834859ecd852a7269546e825c01d611
+Output.13 = e72eba34d42b8ea693bce7e876c7b338c1a7191b07c9c53e1c0e27b08bf0636519a65f634feac52e760ae7816699babb0c0268b17238d80ce698308e6b360cf9
+Entropy.14 = e761778dfcf12b1697956ba1f49617be
+Nonce.14 = 8ce252ad4dc8a702
+PersonalisationString.14 = ceae74c9760fb4495d333f84761a8a30
+ReseedEntropy.14 = 1a3653bcfa549c1f98f17f5b26fc04b1
+Output.14 = 67ad31843d23d5b1b21f70876351d5252cf0cc93a91a7a7c8f785189f829349be67acbb9dae05d52b214bce4b310197738377a5f050e254920910b4497d607ba
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b7025264dca8576bd52a26c2d64b5011
+Nonce.0 = e59d54d2c03032cd
+PersonalisationString.0 = 801f88c61c577fa16134053d07bf6f0f
+ReseedEntropy.0 = 91ae03a1b4b4316611094373f9349a57
+ReseedAdditionalInput.0 = 652f24f936551b0bbeb3e829dd1ec9ad
+AdditionalInputA.0 = c07d36375b0ba8e7d9bd7e9f53e2d98c
+AdditionalInputB.0 = 209953abe850459d83e5ddd15d21505b
+Output.0 = 4b153e0ad2e8d26ea0517290de365e3e5bbebf6e76002b3e8bbd4ee9eddef8cbc9c4dc85ace21d8217ef25e6883429c16321a458b50e6c15acc6d5324b55e5f3
+Entropy.1 = 174436f235267b3893294017d4e69128
+Nonce.1 = 4420e557ded3f7ad
+PersonalisationString.1 = 449f603806ef0120b8d58a9aa51f6004
+ReseedEntropy.1 = c6a1a1328b7a40736bf9c7eefee9f2df
+ReseedAdditionalInput.1 = f09019e8e60b2c42bec611817b2b3bfc
+AdditionalInputA.1 = 1ee6efa242e65112a3f0d2f1706ad38f
+AdditionalInputB.1 = b1459d42049998d4da0b01ffee4e20df
+Output.1 = 11b0abbb7619b37c190f2398e262dfb7586b632b3e96c7ae099a2fe0e1fbee70e49b21642d37c365ef878f63e84e672105ce2b81911f18b60aa6a440eccef52b
+Entropy.2 = 2fcc99d40af5cba141b792d186e61343
+Nonce.2 = dcae599dab135c65
+PersonalisationString.2 = bee3fc601316057b12cf791a6fa362bb
+ReseedEntropy.2 = 712fcb5b2836e6bdb9293508e0283e8e
+ReseedAdditionalInput.2 = b2e46fb39a3ad89bdcc78ade6238c4d0
+AdditionalInputA.2 = e2567f6ec27bcb1497c2fe151739e8d0
+AdditionalInputB.2 = 9586b4ada0a300e83697517f6f43463c
+Output.2 = 2b5ce72c717ee10ccc34d86e3967afdce83d485997f6dc3d3d40b597e0742065221056ead6a16f395e4d8c0947167ff6629098f33b9209128ca7d713bed24177
+Entropy.3 = ab7123944a2f462a368da1712716b114
+Nonce.3 = 851d50049e1d4f1f
+PersonalisationString.3 = 8ad5ac694f28281eaa427844fcffdf6e
+ReseedEntropy.3 = ed59f0720625382bcf4e4857f5360f54
+ReseedAdditionalInput.3 = e7ac9966020be3eb21ef1831f3de2304
+AdditionalInputA.3 = 1da1bde09d7b44f6fa074e55a2698f4e
+AdditionalInputB.3 = 795326f83c8542215b1315bf3d7c9846
+Output.3 = cb656e62417188a74d7afa6402564b7d15729b5b70b14d8b5c5130c6816d051286e5e22ff36a45058bc50b7f0f53d80c95913a325af98502b2e0591524f9fcdd
+Entropy.4 = 8734aef1172bacc3dc4a3181773b7fe8
+Nonce.4 = 1d31ddf0c880f01a
+PersonalisationString.4 = f23a18475cffd571b96d9bae1284ecf4
+ReseedEntropy.4 = 1044776a680cddc38c7a9d0a9d373fc8
+ReseedAdditionalInput.4 = 4a6dabcf181d435df7e35b53022b6045
+AdditionalInputA.4 = 0cb7c361821586d6406cf0d0741bb3e6
+AdditionalInputB.4 = 984e88836d0cfcb1b9adaa26ed047a56
+Output.4 = 97f5aa05fb1691e434f827b1ed0f67c6b06a129bbb6464d9ad03de5fe8b63610c69600d972d83a75b71e23cbd05b306e5772126703931a802932dd272ddc24ec
+Entropy.5 = 08e2e74d47dfb3c0ed43644d98413911
+Nonce.5 = dfe6f2b56147116e
+PersonalisationString.5 = 1ef4b3074c247b7c962d49ea2e519568
+ReseedEntropy.5 = d91c7eaae89ce07de8578d9f46411190
+ReseedAdditionalInput.5 = a6f73c36fd4b510ede52bd81eff11203
+AdditionalInputA.5 = 20dad865c4e421bb4967bc88b30053d5
+AdditionalInputB.5 = 9afa0a2c87ef1a1920a2490ab98805b5
+Output.5 = b8adce5fb7c284a18f4c9f15fd6643505451da4a05e2dee0fd5723d15ae5baec8e98d08838d4489b379cf3490c7f61b5b78d5903773d68d914253b339f267c0e
+Entropy.6 = d424d81123b145471d64ac2de5e411fa
+Nonce.6 = 46bf213dd4004867
+PersonalisationString.6 = 8ae3f0a188d1b5d31baab8f92e604079
+ReseedEntropy.6 = b3ff4e4f5dbf5866a86a5a600b6912f9
+ReseedAdditionalInput.6 = d9b430a4ee9b1cf7bfc7cc4a77ebcfe4
+AdditionalInputA.6 = cc670556f4b5871ff0bc15c7f5d9c1ce
+AdditionalInputB.6 = f48b9c5ffcfa9dba232def34cdfce9f7
+Output.6 = a52a74ad01c9fbefce42462b187fdaba5be775ac961d6dabc69698826567362dcdb0cd11beb4d38ee1bd7903aecf1afcb42ee02718ebe51eec8afb4ff78c07bd
+Entropy.7 = 09e6c23a826effc9e9631089c6bea137
+Nonce.7 = 2b702fd95ada5219
+PersonalisationString.7 = 44700bd3d049b6b6bb426a3eacd41d64
+ReseedEntropy.7 = 631c3c7dbcf90395d22be358dd6746e4
+ReseedAdditionalInput.7 = 9f9f8e2a8bf34b4f2c52bea9a1a74c28
+AdditionalInputA.7 = c7a5e54b97e0b583d0c35aa6444d258d
+AdditionalInputB.7 = a99a5e8a6ef062b8fdb67c7f9687ffdd
+Output.7 = 011d23e54ebe6aba2d19d08a48920482e2810c3363ec54718f1801866e769c180231113daa31b2c1e7b1080c7cbd730522cfe20c16de1f48bfb0f27ea1bb96f3
+Entropy.8 = 826fcf8ce73258d03416c119dd6ffb92
+Nonce.8 = 33a766d82e3bdaeb
+PersonalisationString.8 = bfd2d1fefb06f15ae1c515d31f6d2970
+ReseedEntropy.8 = 54a61772d57a0f49cf71cc07a88852a2
+ReseedAdditionalInput.8 = 4b038237682748fe3de05c62d34627c7
+AdditionalInputA.8 = 056198e2fc30185317abd3cb27337baa
+AdditionalInputB.8 = fbb485a9c3a84724e9695e395c595e50
+Output.8 = 0140d3d92f1b416a2629355d7a0bd641d765b80d94cab4939a7df253d56ff43f15879d1d4816472de93c62ec963d43f95ef46cdda3dd10dc635de7efcd95de26
+Entropy.9 = 3b82cc6ac3ccbb1575a62f131319ccd2
+Nonce.9 = 27bba0a7ae72de41
+PersonalisationString.9 = 825a89b63cb21878a51d75063b5cdb60
+ReseedEntropy.9 = 37f5d81a3483fa8b56102a0951ec1670
+ReseedAdditionalInput.9 = d78693f68ae4cba38f3e18882964a755
+AdditionalInputA.9 = 74e4f02b34c2bb5c11d2bada9679a960
+AdditionalInputB.9 = 90cd8fdc9e34445540a4d4e8dd43d50e
+Output.9 = 29bf5ce99ff28a3cffc99ca5e4fe8e70b7381ffab6a6c6ad5abf97e73f1e4a9d3c74d555e6808584b94ddb1efe048f27ff70606ca8ab67c1d262ac38087c2d3c
+Entropy.10 = 9d8d931620b5ee399063a78eea532690
+Nonce.10 = 9c7ae655d5e74446
+PersonalisationString.10 = e820632027e10fb5bcd48acb4228897b
+ReseedEntropy.10 = e3618db79c9239c8839caffd15eaad79
+ReseedAdditionalInput.10 = 9fbd70eb16bc4439a576591449a820ee
+AdditionalInputA.10 = 9aeccbdc45524972c2b8cbfc42ad006b
+AdditionalInputB.10 = 44199dd3e397ff4bb5574d5e1a86fcc0
+Output.10 = e1b78fa3a42443c789631f2500635616bd05c62db98a76fce84f63aecd842ee33dd963c5a475f0dc6e0a01e8e44132045044cb33efc0bbbfba116c0756cc3dca
+Entropy.11 = 62a87e0ffc6f62ea868f82fc4b4976d8
+Nonce.11 = 98268ba7a9f80a81
+PersonalisationString.11 = 21251ed832f078c0574e2862e5d6e458
+ReseedEntropy.11 = e63a86056475ab9b10f46b0732b581d6
+ReseedAdditionalInput.11 = c02aa56235ea4a752eb7d4ffb34ddeef
+AdditionalInputA.11 = 1344f97a17afb3fbf84f0bbfee49ba10
+AdditionalInputB.11 = 304fbde8e0734e6371b5b80bd22dd42e
+Output.11 = eab0c76614250bf3d0b1937e8b56cde6bd01d62644dc8855f0d444b190c21eb74303eb5c3b651259ed5c4150633a92f0eb52b9422a5bc4a094fdb6d074758ec0
+Entropy.12 = dc54c3caf370e38fc0707bbc19851be1
+Nonce.12 = 9f397106f6e7096b
+PersonalisationString.12 = 05a460e368b5bef68d3832250a75a11c
+ReseedEntropy.12 = d8ae134782a7da3e01d8b46d20307b57
+ReseedAdditionalInput.12 = 11bf57a2cab866510f7ab724c743c7d7
+AdditionalInputA.12 = 00d75e2b56b9cd45f1fb04e2d39dca0b
+AdditionalInputB.12 = 5717b701b969ad3252d97f5f2f892099
+Output.12 = 2211b8f7dd5ccad5204ca983131aa215364daeed6083f242141a54df64f6ba9597769dbfc5439c2ac22a1061ee12631b23dc265e64decfae4d7e531f04ea0166
+Entropy.13 = f513722a1fab9c61aaa3fc995130a30c
+Nonce.13 = b39d9c895e740643
+PersonalisationString.13 = 2eb558ba9ef09360badbc50adfe989e7
+ReseedEntropy.13 = 0d398bc97316153c2aee280ab90fa6f2
+ReseedAdditionalInput.13 = c5f038a4363ec1595e56c52d12ed4a7f
+AdditionalInputA.13 = b983c30862b0761c601b19b010a7c36b
+AdditionalInputB.13 = a513920a6c6cd40ec46ed077abd0bb4c
+Output.13 = 84689ee847b4ae301c3694b0746331e907eaf60f8cddf089959be7c90572c3bf63ec70d18124adad1fffbd0f00b646998ac1e8649a769dc45062b9741bd68615
+Entropy.14 = 835ee6c444f5d714a52fc82ab27a3719
+Nonce.14 = ca1268da49f4f5f9
+PersonalisationString.14 = 0904aa87a1ca57a22741f86b5e7db40f
+ReseedEntropy.14 = 33e8cf064791591ce4f317b2ffbe34dd
+ReseedAdditionalInput.14 = 06a062b00ec4f95fa4284dd7bb3441aa
+AdditionalInputA.14 = d4434a19a8bfad8dd1c7a4d30d0c511d
+AdditionalInputB.14 = e6c5e3c6120b14535f149c6d4d523a0c
+Output.14 = 949522aca9d35e73b28448d4227efca8b21cf03ea05e6483dd777af1e451d2b98b6f61eef586223a212cf0e4adb51c92bcb61368dc711f3ef09fe756660ff2d9
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b25e5c411c47c68711f62a1c95c6094d
+Nonce.0 = f49dca3c2cd31643
+ReseedEntropy.0 = 84806941378019ab90b1e845f1b4afa9
+Output.0 = 25e548218a2d851d596b02ed1c18acea5c5abbf438fb838ef4762f736eb89fc87068e1455c6ac32d162dc32e543cf5dff09b9d3a19d73b0dd25c4e3fbd0b9309
+Entropy.1 = 2d8af566a207095f367cc2fd6b553f09
+Nonce.1 = cf043e8ac56af056
+ReseedEntropy.1 = 667ab3c312fe1962de00de6471735813
+Output.1 = a99d65d52eb2a0bb6215118751fc3fcd3e5951fa1701bc1d58338a14811991fe43175c4f7d8ed49dc6bea22814701e89593957e5543733f9a5d761ebed5df0aa
+Entropy.2 = d27e9dc50d02c15c94fb4c89f0b63f3b
+Nonce.2 = 03708637e52dbc43
+ReseedEntropy.2 = 29fe203f73d1ec9d8b2db843cf24935c
+Output.2 = 6d0586b9bbf78477d1763a6b13946dd7ff3b64e1a0812653273b1b8924a61037cc824719fa7a68820d6bebf9ead16bd8e9b168ef94fc0e8c10c7bd8eeec05e9e
+Entropy.3 = 9d35f5dee9dfea543f125e438b9d8085
+Nonce.3 = a071d5cc0816f770
+ReseedEntropy.3 = 720ea884c253ef2350c2b73757a7e589
+Output.3 = 4d571fec7ac322d1e0da52571342d97525f2a5dd063beb0dbba8f1592ca3263f46596fbe15bb2187b4234e1d249cab0bd18a7024acaa6025565699ec88caefca
+Entropy.4 = 4f1702fe2a6a2febfbcc28a4a3cca895
+Nonce.4 = a8602c8329e5ed59
+ReseedEntropy.4 = 7eac9189d1723ecddc4d4c9b7da75125
+Output.4 = 179ac5065c446bb0213a0f7a65ea7287f03221aa0a53e3838cebf109a021b520a366391ff67ea7806b42d6fbe329aa4c7e4732d16e324abece0334f9950f59c7
+Entropy.5 = 5df01e87e11dd227127820dc1d286cbe
+Nonce.5 = 7fd3c3b39aa910d4
+ReseedEntropy.5 = 114ec09430b7c0f43e41b65461c28baf
+Output.5 = 9bd45879f0f0b9faacd7c64743fda1d0037442c3c5c581bae00a4fec9ad6a1175a15fdbba56e6237399281f687022e4a1ca0b45320aed268e6111d92609a1b40
+Entropy.6 = 60bf7d609d7810b0d486ad95321c3b76
+Nonce.6 = ab8b8129c5b999ff
+ReseedEntropy.6 = caed654dd87903a784798f70aea3d5c7
+Output.6 = a442507dc8e23b83b951af0f25c207b73148f4800d45f3948a088ff3d961d21d9375558056cdea1228f2e93fcde8c3a4ce8c8d7f98028c8dcb1b38e795ebd495
+Entropy.7 = 33834550dbb58b77f6a11c5043da2c35
+Nonce.7 = 0b315724f1d7d88c
+ReseedEntropy.7 = e2b07a290f047961eb10c26e58fe32d3
+Output.7 = 28e70d99b3efd0d9eec93fc533e335e568eed57c21d7fed920e5544667cfe13fbc063dd818f31cc83127b639458f660f7481663adc3bb1fdf9187fef0a7a9df0
+Entropy.8 = 3ed59577bcd9a04f0d87f097b06aad2c
+Nonce.8 = 6acc6cf7185ba0b5
+ReseedEntropy.8 = 90d04f840172e5f5ccb34a113ec7fe9a
+Output.8 = e3b8768023875df81b9fcaa4dd55ed533ea8c05b57f02c2bead327830de5293176523aea974bff8352a784321fe308e1b2897b47078d25c24fb8a171639d276f
+Entropy.9 = d1177626cc0676737d879299d01a5a24
+Nonce.9 = ef9efb3a6ed4848a
+ReseedEntropy.9 = 19beeb41b5969df1aba65de85474f6c8
+Output.9 = eefa3b05f8742c2c31f72f362ac94e9c254d398c2c7b4315b6060e733c801fb956ff0648fa87338d5feb1e3304fabec529a337e29462d36c02a2757d0b31d4c6
+Entropy.10 = 9287cc2bb1fee82a6d74ccb85349c75d
+Nonce.10 = 222d7a6fe2c16c1f
+ReseedEntropy.10 = f5f601cebc5a7fb73f14ed2908016c7d
+Output.10 = c54051b9dbb98b812dcc417b6715267a117209d4735877b49e68e96f4fa7167d6e138269176fbb4d5ebe53286dd0c0c3bc6b7fc6d74264458a61cb67418be4b1
+Entropy.11 = d8beea04e455b15c268702c787a546bb
+Nonce.11 = d33f603433f097c4
+ReseedEntropy.11 = 3d0e2090dcabf521160962e5ee912132
+Output.11 = 4edaaf5f468382ca0a8c9b51174d97c106a2ed2ec636e9b4d29c2599c0e0d680aaf7bda15b267f8f161824a01cc60d418a8f13e7cde31fbd2a85272cb5577679
+Entropy.12 = f241f0598f9315dcad17e6098a7d5d72
+Nonce.12 = 3a79da9ad1749c15
+ReseedEntropy.12 = c5046a9d087946e3ac1c5412772d262e
+Output.12 = 07d0b56509418fba49a362eb47c3e230b9329304c0a4478949586cb1fe28b1d0480c4f443b04b0a2dd12ced3d721f13e7f1bc0ed074bcc0847ca0efe7fcbc363
+Entropy.13 = 8a40d580e53bdbbcfd9f49cb7656e3a2
+Nonce.13 = d4129fc3724c6d41
+ReseedEntropy.13 = 88eeadc32c3487cb074543abf2247643
+Output.13 = 6a02e4c3c814f75f6518fb2a5295a05c5af491b64389f9161179af5436a52a5ecdbc0731dedaf95a24dc56ec634c9745b6cd333a6de9604d18a5187ac7cc9a1d
+Entropy.14 = 0756b7331d1c5b8552f104734a4e4f5c
+Nonce.14 = 1778bc4130ecfd4f
+ReseedEntropy.14 = 488ed15dce02e3c2e3ee571260fe734c
+Output.14 = 8ea197963472da0430aab9c31b91b5f95924e7c8a34c2625277ddbdff551b837f40896f133f7f6855fbbbcb197d4b222acb3c0d04d1cffc3411947a58b57166b
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 096af1704bcab313f8a4e9a2b1ed506e
+Nonce.0 = 58f0eb1375a0bd20
+ReseedEntropy.0 = 4b5579cd548bf9eaf3f175459613f3c8
+ReseedAdditionalInput.0 = 2f233b8d0124b7a0ac81cee2ea1e7ef4
+AdditionalInputA.0 = 19f8dbdcc77851f36b4005908620e403
+AdditionalInputB.0 = eb89422293b9c9aa20a50c429ebdad6e
+Output.0 = 824451fd9819ef4e300ea6eaa1d20512fad1a6cea43c47a92dc50756b5917b848887e705b17d717815a5f6c3bbc0f4b3e1b392519e5e7147da126fd0c58a25bd
+Entropy.1 = 479655c20672db0eaabfd89b822f030f
+Nonce.1 = ac0435955c0976de
+ReseedEntropy.1 = be000629c31eb6d66b099dad3aebed35
+ReseedAdditionalInput.1 = de2f66250a053f6f3ff1f1f3e31c0edc
+AdditionalInputA.1 = 6ff2ba8fe34c1d08e55e700a7730c23b
+AdditionalInputB.1 = a2c96607a2e31a5dd10c821ec053e2fe
+Output.1 = ffcdde31bcce016d9fbacbbe8be4621ba84f8c97fbd0a0378ee134e8d4124a5f1298a2cb0e8c1be8c6587c600ab272fbbe30bbb15a8f8fab68c3e822fee7100d
+Entropy.2 = f6cc9859a8811d247e9342587864d453
+Nonce.2 = 702f64b7912a61d9
+ReseedEntropy.2 = bf7b100a2354f600622123d21e61b22d
+ReseedAdditionalInput.2 = 9250fe419ebfbab0ec7c5b8cb9e15e6f
+AdditionalInputA.2 = a2b1f0ac230eb05f99c00f028ea8fbf5
+AdditionalInputB.2 = 02b1471ace2330cb9990e2b33f7d2fe2
+Output.2 = d865d23847d0ae113ba069b645649b1e8d9764c4b8256b9064601415df6200ed92ab186524377d0f970361b66d074862e763894fc1f93a9cdb645ca6d8e4449c
+Entropy.3 = ccc6ad2dd9318d61bef5390e0e5fe91f
+Nonce.3 = 6ddb3cd378fa317a
+ReseedEntropy.3 = 9eab54e743ac5ec4977cad57532f81d1
+ReseedAdditionalInput.3 = b02c69da7358e82525a503d7b724d15d
+AdditionalInputA.3 = 1cd722a3932db212f927a4e01f7e7132
+AdditionalInputB.3 = 72c7fbbfb66c1c744fe14f39eb4f68aa
+Output.3 = e1aecad7b58d697adb10fdf64b550ebbdd72146dcb973464f23ade8456bc90372272b0e041a71d4e0b635a13b575163a8109e9c9abe693296d7485e72d586c66
+Entropy.4 = fb39e5b3d0d13d19a9aca761e6d6dac1
+Nonce.4 = a84c3dec8fd8d3d7
+ReseedEntropy.4 = cb3917e854117b54f872fe54f396426e
+ReseedAdditionalInput.4 = 1201c04886bef5f876ae732970803337
+AdditionalInputA.4 = 04ccad68eae57299ee863c7361978367
+AdditionalInputB.4 = c11ba7994dbfbe09ec91116ec37a26e0
+Output.4 = 7b28ab4b2d8ffe3c8a78df522f2f66e5373cdb13a2e7b95f80e15fb15e9ec85381848394b91058d9b1230c1b52c75d32226cc8206f78440e09f2939fa4d09538
+Entropy.5 = 02a896b44a0bee21ab76f2b3b81b822b
+Nonce.5 = f87332df5d234cc7
+ReseedEntropy.5 = 81a55970bd1ffbcdc44c0526a31173a7
+ReseedAdditionalInput.5 = 34b9bdfd1b35b3c3cf183ffc1db7ea64
+AdditionalInputA.5 = e370dab5c51f4ebedec1ce2353ba2d3e
+AdditionalInputB.5 = 2a9cb19b537a18f82df6c33a0a4c2716
+Output.5 = 9f546c83afe7fb8fa8194077f99171e9787ab3dd2c3be0debb9920f9084d0dd177d1143d76fdeabe6c6d794165ea9960267d616f6f0ffd57ae16d08ef56505c5
+Entropy.6 = 6b90994398ad0daa3ca982ea945c56da
+Nonce.6 = 6b31e0101563d6cb
+ReseedEntropy.6 = 189044b33df7c32a63d0b513c9a080e0
+ReseedAdditionalInput.6 = 5ddd332be7ddaaa86d476e5f49e169bb
+AdditionalInputA.6 = 7cca79e6dcc0f12cead189fe61d5d4fe
+AdditionalInputB.6 = 957f2bc67a2448aa6961a3357650304a
+Output.6 = 44ef3bbd3275800bbeffaca6c94793dca2b025f50f13bc572d75e909b6bfd4b7bda23e19a343467493d23c16d88120fe73e3a246e545af09ce2df0ff4e0945da
+Entropy.7 = dcb2072ba7466c37461b7581c4cd7ab2
+Nonce.7 = d5f8317090124cfe
+ReseedEntropy.7 = f8d4f7776f53a7041535e6a216191378
+ReseedAdditionalInput.7 = b3cce211f1061dbd0a59384f6ba14a85
+AdditionalInputA.7 = fcfcd55e353b1294476ba98280e52e6c
+AdditionalInputB.7 = cc41571b9a7e58adf9633956887cab4d
+Output.7 = 47269a355155dbd99a6d9e5f3f3779eabe60f373a72790d17346e86726e6b3b46a0174ae5c5159c06ce9be0777d3d36e5d1b37b8472ebb09213d3ed623fa3ef2
+Entropy.8 = ee897721c7658edb43cb66d9179d0375
+Nonce.8 = 6f0cf5071c79b4a6
+ReseedEntropy.8 = 2ad2c85a34e4447d2db63e178dc706c6
+ReseedAdditionalInput.8 = 6f9a1523cb3dde588d80e52099df13dc
+AdditionalInputA.8 = e60088d6feb5d7b83a010656cf996c65
+AdditionalInputB.8 = 3a4443f3e9ae8c59298cb53a8bd605d6
+Output.8 = fc738629b7d59913810bab5d53f7e9f8369ff927c4c3d7dcb8c5d61636d06227977a997b757707e1e1457b1b8fff3f7e4830b84c5ad6fc3d15ac1a57c58767b0
+Entropy.9 = 0e45d8b4cc1223c0fa44cc4e9ba07a95
+Nonce.9 = 1c73a3e36da248b5
+ReseedEntropy.9 = d88353f782fd4f77ba5e4b7415aaa70d
+ReseedAdditionalInput.9 = 91d22d8666e3a88e2173c764615c8848
+AdditionalInputA.9 = c1e7d9a010be5ecbbeb9bf6c2342d361
+AdditionalInputB.9 = f81d44b95a5c5a8a50b5858b981e676e
+Output.9 = 32be02e9681c6dbfcb9bf688c2c515d63692faae3f5f7608351ef28c3aa1aedfe10fabbb2d69319290f63f0e5e5beba91f2a5c269fa73309f23260d76dae3ce5
+Entropy.10 = c7adf6032ca80c8ac0e62f8148ca3573
+Nonce.10 = 7e546831f948d5b1
+ReseedEntropy.10 = f48ce498ef65f5bb2329857dbae66dff
+ReseedAdditionalInput.10 = 84020b1ec2c2b2c98e49cf7e71600049
+AdditionalInputA.10 = 6036f96389db7cd16349bfedcb80f473
+AdditionalInputB.10 = 5f2cc73c731294ee13fd234b29ea10bd
+Output.10 = d2f2ef17955cb9337b6ff68b8d38f64c83ca1e12d78ad78b39ffb2c7c6d55fdeadfc00bd96d1239ffd1a5f3460207a2fc1924762774156173ab0f514a93da10b
+Entropy.11 = 5b15453c396dde5a8263a29c3ec1d971
+Nonce.11 = f6e90260370db0d0
+ReseedEntropy.11 = 2e0e8fa62541bd37ccb5b445c4c5fddd
+ReseedAdditionalInput.11 = b615a841ea7ce4c0f85fb0cdaa602394
+AdditionalInputA.11 = ec2ba353035a9010cd99ec92fd8f2644
+AdditionalInputB.11 = ace225a788da7efb41ba1556222f6286
+Output.11 = 3a92b2570c78c5d542b95ebb0cbc43a522426caa846f5a52af61c107707473367055c4455333531607985cd812db42ee26fb2d69ca0210c0443fd8ca0fef1f89
+Entropy.12 = 967644a12c0cac92aa3c24615a902a28
+Nonce.12 = d38e6176c37cee4c
+ReseedEntropy.12 = fe42e06c38a81c452508ee3d5dbf4b58
+ReseedAdditionalInput.12 = 723ba4720dae76095612142152ca8f79
+AdditionalInputA.12 = 2b81c98b29249385b2ce41a080e72a76
+AdditionalInputB.12 = 13610d87459ccc72a9e10b452abad9c8
+Output.12 = dde71d2dd103524f8a8ba7af12afbdf51ab569c9973e16139458630b0da13d6240042c3b0892457e90446390f22a6d856d3a21284fea546811d01c33896a4a1e
+Entropy.13 = b7f399dd5a9b2c4869aa4add46dbbe64
+Nonce.13 = c07f6df3505fe2c9
+ReseedEntropy.13 = a7c49b25c4f4276257372d7b29a7ed64
+ReseedAdditionalInput.13 = 29c886f99c32f1eafff568175d63c58f
+AdditionalInputA.13 = aa3f8c159154af33539bbcb8fca2836b
+AdditionalInputB.13 = 20e840f70e6d1d8883de53eb0dfe2eb0
+Output.13 = 43e44d6bb57b70fbc2e74af37bdf79116f3eb0c0945be73a34ee90c0a7446009b49f52aa9c6a1dd90d2b57e7e30a65d46268cf269cfd8623f7e2cab0e0fbc665
+Entropy.14 = 71282c33992443506e388554ad6fe8ea
+Nonce.14 = db214073bcebe133
+ReseedEntropy.14 = a3aaaf037446f7c2aa1c204a332dda01
+ReseedAdditionalInput.14 = c96fd8ebe8985419de8589033204419c
+AdditionalInputA.14 = 213b12dc915356a1281fa06248641f93
+AdditionalInputB.14 = ef7e08ce74770e30e5ccd86ab9fb0613
+Output.14 = 8b77d5332ee6119528680049aff574d0210f4e43f75871cfea4eee70afac0e0df945785556754c210467dd581e97fe6881d9f72115b66bfdd728e8f1425a4075
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 81052d3322a260fcf3339b53f6cf5d6d
+Nonce.0 = 57303972ab58f064
+PersonalisationString.0 = c3cee8564d8bb2fb8efe6b16aa2616a6
+ReseedEntropy.0 = c9b103f3779aa63e379841b714196cf6
+Output.0 = d53712482c2b3336403c40aae156203c5859a6b3fae4b553e72b8a6687c0152bbdafe4099439e197e5d60f8e602e5b550aeb7387a4347ecde6e3a04288390f13
+Entropy.1 = d712be6df1e21dedd88893031da2009b
+Nonce.1 = fe560d2141846540
+PersonalisationString.1 = 49ec80b4f3f85388d2ea7454ac31bfcc
+ReseedEntropy.1 = b5ed3dd2f5e19cbedb9da7b0f140c182
+Output.1 = 0422d60cecea426612044a3e97c4c962975c86f59b278f80abb5b5d20537b39f979394dc3418d004f391297af0fe5a1742166bec5bc013e2e7329ce308d8a0ae
+Entropy.2 = 6308f7ccbfe7469b1a9d97274a9403bb
+Nonce.2 = 4f63a862808a0b5a
+PersonalisationString.2 = 0abf7c0b6ec5423874c17001e1953460
+ReseedEntropy.2 = f2f88715e198c7e3ee46525040d8d7de
+Output.2 = 008e17da7757afbe5c5f2f790882e3104e234381ba5ae3a99b7a450147973f543c8ae0672ee724eaa40973f0b724610fc512981254a5453443bd68253a673783
+Entropy.3 = e89dac4d14abe1783fe79f9cd7466dfa
+Nonce.3 = 632c72696a6575cf
+PersonalisationString.3 = d115426c6abcfc94db8a03440fa68069
+ReseedEntropy.3 = 14a767a16c2cc35c389928cc9cae2c6e
+Output.3 = 3a504fd1c95b6cdd1057b3aa6ea9afb0dd53475f774df7797d949853fce538e1a3f1bdfd7bc86fe0e4496f210351afd06462c3e0fcb66a5478cc54c854690a69
+Entropy.4 = a85e33ac6b709b7de2ad773f77628b32
+Nonce.4 = 7e5b6a38b6660c54
+PersonalisationString.4 = 1abf0b867ae7810c52bc8bfed2437059
+ReseedEntropy.4 = 65a8d3d0fea01a05168124184deab4f1
+Output.4 = b87eba4bcf9b914823818be7d13a73d7b2ad39a0bb289559cb1862552688e0d4229a7b1069e2d459fbbe3852d548fb3160260255194152e62a3cdeb7af816ff0
+Entropy.5 = 0fb403ce513c9148efb4973139da3c1b
+Nonce.5 = bb37f73df280c7ba
+PersonalisationString.5 = ad712ee96ee96ad82108815d975f0f74
+ReseedEntropy.5 = fbd8717c36c2fa4dfe1d9a690b5d16af
+Output.5 = bc16da47e64d4801c4c474088aa53564673231dad9da7e76b4ff8e5be653d561d54acfd2a55e0f4cae45333eef0ccc28abd94f5e118efa7b3c518839b7e409e0
+Entropy.6 = 2ba9c09fa833a4a198ff0679a02261a1
+Nonce.6 = 764e8c4605711d49
+PersonalisationString.6 = 465496ddadd10086b7e6c75780418177
+ReseedEntropy.6 = da681a3f603a2ad1eaae2e7efdba5197
+Output.6 = d63528e280468c7192cf7739dc3bcdf56b3a8560924c7d1848d64ae40a0e5c124b47d2d1cc439a04d753b3b8858fc227b5df11864bfa224e46bf0a6a01ba683e
+Entropy.7 = 797b612310f4d89755ef63d58951cc90
+Nonce.7 = 21b821f937d6e660
+PersonalisationString.7 = 9b9277b3685dc03012a42d2f01bb28fb
+ReseedEntropy.7 = 60523f6764d42a6f947939ed11511586
+Output.7 = 4b2fa5538397eb49f6b6d76d55e532b578bfc5a1f288d7ba20c8518166975bee53e63fe7df54ccf69e0b3ffa077278f92cc1448000d96d82cb45c055ce6c00eb
+Entropy.8 = d08526c17883939324fa66fde801a3bd
+Nonce.8 = 21c28491a8fe20d9
+PersonalisationString.8 = 6ef810477d4d9614398946653fd34712
+ReseedEntropy.8 = 40645beb71b40f95063d492ed3bed7c1
+Output.8 = 0b2c243161c8386ec996a8693fc307c0c5a094a023c812337f8d476bef8c96c6f716870276b09009494d64df31e66ff6d067fe589c357eec5ac99cc9a81b2d6e
+Entropy.9 = b91afee6057bf4c6306964b86fbbbcbe
+Nonce.9 = 090642799a480be1
+PersonalisationString.9 = fcf63a6b30c2fdd9a53555779605984c
+ReseedEntropy.9 = 1b47800f5b6189116c341e9b99c43b01
+Output.9 = 9d85b2aaad31e02479e2af3a59cc61da98cdc24650535618318d93dafc18590d5af6a420253d74d52991b1228376198b1cab0e12184385e7c028923c93949310
+Entropy.10 = a9aafd15d109d30cf889e6545792b869
+Nonce.10 = 4dabcc8c293b8816
+PersonalisationString.10 = a0e566637074c9407c2f18f57f8b0c3e
+ReseedEntropy.10 = d18b43413bc0c9bdc8b8ca83f22b1c7b
+Output.10 = 4058a7d03309c5494ba68269b487ac6eed2a8f203db91da9e094137e53cd48453d50e3a641dbc19a4a7e6409f4c1f709719ef835cecdb7f1e5c4a3e44f125e22
+Entropy.11 = 8bd67614996c00fae1c151fae1b78bbf
+Nonce.11 = 32ba6e0150a08c02
+PersonalisationString.11 = 5a4328ea5b5cf8e16ae21e8df06df940
+ReseedEntropy.11 = cdd5e249a77709e02d34ae6a4c713876
+Output.11 = 616cfe6127eddccaddaaf816248293a71fed14661ac067ebcbb8b315c773bd54e5416cb1f2f4e3f15e785b9a48b5a310cf241d53b211bc2070c74f53f3163109
+Entropy.12 = 123c4344436cc0990b3ade31830a974b
+Nonce.12 = b5cd6c8bc420258b
+PersonalisationString.12 = f9d9b8d8d1d3ef2c3cec38968c406c03
+ReseedEntropy.12 = 94906024e8b4f573208870c404267d30
+Output.12 = 3511d41acf56d637a813803d1cdbedfad5a2c322ea64498729014468ee2e7a2633fc37f3ca11be7e4987f530f1f9a96649829eb6da524cf9bd0c7f20b2199415
+Entropy.13 = 0cfc00d772f38e58a6efdedef1fac3d9
+Nonce.13 = 46996dcea6ed652f
+PersonalisationString.13 = 68e39ae143bd7af759339df9cf861122
+ReseedEntropy.13 = 5c7ee1192cb3b43d3029ee6ce7859534
+Output.13 = 6fb8871ff319f63119081830d38d43f37740c3b862d6b2a0780d89bcb38921a03496fe8a09792f4f64bd0ca1b6071ffc8db76de1cdd0b09c2a0ea1922ead6043
+Entropy.14 = 813ce8c15be0eef6ce6e119a5b3fa23c
+Nonce.14 = e471366732803f51
+PersonalisationString.14 = a35b7d7037f4e1a2bfe3ff17c2cee87a
+ReseedEntropy.14 = 8f8daef25b0c78ae5add50cea3054720
+Output.14 = 0170651e7eec1f0011c957313a9c332021964abeba2e626efc59d8b03022f8b2772ce354e5dd7d6c20951cb6341ce9861b35346e9d166d92ce11fbc0ad21b464
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e796b728ec69cf79f97eaa2c06e7187f
+Nonce.0 = 3568f011c282c01d
+PersonalisationString.0 = b5ae693192ff057e682a629b84b8feec
+ReseedEntropy.0 = 31c4db5713e08e4e8cfbf777b9621a04
+ReseedAdditionalInput.0 = b6997617e4e2c94d8a3bf3c61439a55e
+AdditionalInputA.0 = c3998f9edd938286d7fad2cc75963fdd
+AdditionalInputB.0 = 648fc7360ae27002e1aa77d85895b89e
+Output.0 = 6ce1eb64fdca9fd3b3ef61913cc1c214f93bca0e515d0514fa488d8af529f49892bb7cd7fbf584eb020fd8cb2af9e6dbfce8a8a3439be85d5cc4de7640b4ef7d
+Entropy.1 = 94a799a2c352bbc824921a75db0b1590
+Nonce.1 = f5fcd4cf35327dbe
+PersonalisationString.1 = defffafd85c84735beaee87b3d226684
+ReseedEntropy.1 = e6950d5bd31c482b6d83c646d7bfab07
+ReseedAdditionalInput.1 = 903b9c0791794cf5c88248825422ab79
+AdditionalInputA.1 = 1d087bde28b66353e0261db4f99ac5f8
+AdditionalInputB.1 = 909a9f61a87a681d08441c261e33edae
+Output.1 = 551f8b6071e4a1bde59b606f8e3df033501c1e45a0f718b6bdf06a64fcef9cdaec65ba6089125ad0a25e617a03acc26a262fe4ef4b6460524cf6bf921108d5ff
+Entropy.2 = ed3f6346ca316cea24558d0f1aaa4bac
+Nonce.2 = cffbd0ed0336fd69
+PersonalisationString.2 = 07d6fa6941fe2a4af35b4f939c2ca89d
+ReseedEntropy.2 = 1dadbff4d917ba5236752de8e01e42a8
+ReseedAdditionalInput.2 = 031f2b1f3130d0db79805d9c787c1899
+AdditionalInputA.2 = b2b2eea5fa8a1881e2615b4679ec4d9c
+AdditionalInputB.2 = 00f61c3a374536f89bfccf7e43a3b04b
+Output.2 = 8cc6b6dbb095c87e0ede01f5e87b8aaf0eaddf43fd2dffc08439d106ebbe5173d5b3eb61f38963c19b5db1833be1442e8a5099251cc66d75773bc6fa4936732a
+Entropy.3 = 6b476b201b0caa270eef30b0940682a3
+Nonce.3 = a1d0954c17167b17
+PersonalisationString.3 = 654279a6972d0f18ca990fb9e87f4089
+ReseedEntropy.3 = f4367480086b4822a3b54dd5b1f4d310
+ReseedAdditionalInput.3 = de6e784068b051f60427a3f49dde446a
+AdditionalInputA.3 = a6a5d61d9697d93364e7e550a93cf7d7
+AdditionalInputB.3 = a4e948811c4555002062f5e76e892ffc
+Output.3 = 332a3868362afee036e8073f1c8391ffca33c724325aa3f66c797152b9978eabe8319229f8ae3e523f03b147a87bee278fa33551d5f30428b56bb01e3b3c1cf3
+Entropy.4 = 70cad557defaa0c8b37c167c9723dbc7
+Nonce.4 = dbe89a106f15d112
+PersonalisationString.4 = 846cdb83872be7900104c14c1f88dd6b
+ReseedEntropy.4 = f04c519d94a0ab7eaf3544ecd5f85b95
+ReseedAdditionalInput.4 = 9fbd72ce332abff5f74666d7e64f5acd
+AdditionalInputA.4 = b07687adbaef6b1141aebd9e78358474
+AdditionalInputB.4 = 5398f31a34af720d2b2e30f65b8b0567
+Output.4 = 0f29f6b207c382d3524403de0edde3bdca56ab081013742b40c923a3e3c95b9c3b361c1cff27bf2d2e60d81f3b4506f88ee558f77f7248ae3a68ac291f0021e8
+Entropy.5 = 33ba494b5491845103b57aaacef0a65d
+Nonce.5 = 55385b3ea7f3b4ac
+PersonalisationString.5 = 9247dda03f2c310793f3e5ec5d07d397
+ReseedEntropy.5 = 87895ed43af734518991197748198c0d
+ReseedAdditionalInput.5 = de0eccbfdabbaeb7f9c52580490ceb87
+AdditionalInputA.5 = 6dea3b1bee14666ed053f0b512565316
+AdditionalInputB.5 = 1e3d49df6e079f9c8e79260c63127445
+Output.5 = 139d256f1ce3e4f2b6bf086d809faf19820e799f744f7c36580cf82419caef4de76e5110e11ca475604fc04a55fe3b0713cf191a6dfb9d33ded0d5c61a6ba160
+Entropy.6 = 26e3a50f73a60698b94ad39315a66ada
+Nonce.6 = 6e53c2baa71745ca
+PersonalisationString.6 = c47beb1a590e06707722e3f194fa5cee
+ReseedEntropy.6 = 618151421345f7400ace77eb7fa4b0c8
+ReseedAdditionalInput.6 = fd7ebb1ea4e76d8e5228cdff7786a52a
+AdditionalInputA.6 = 39e8c578b7c924c56afcdffea37fed4d
+AdditionalInputB.6 = 2483b96f2190ed57b4a68c7cd04a42cf
+Output.6 = 948c0ae18f989d2de0700b5ff1cfb539b914676ecb4e516f4fa037699b181404a300513bbb9af3f55553a6be6e894196485736e753432bfa679d07bb6c5bcda8
+Entropy.7 = b7516865da6b6b494e6b33b278fba588
+Nonce.7 = c66f5d699f36981d
+PersonalisationString.7 = bc6431500495b2cf8f910537b29e86c1
+ReseedEntropy.7 = 4ef07edec95e662ad8ec1ae30c7739f2
+ReseedAdditionalInput.7 = 5db27541e3b6dc4830e7afb16b267e42
+AdditionalInputA.7 = 5a4ba4f6a1a76d21a4161204d582cd25
+AdditionalInputB.7 = d35def58fb9c13f26f13db4f44f843c8
+Output.7 = bc5a174b9af4c1b9b377b320a93bce848da3106a147ca6b8842e020ce3ad5b79d26f7adf721005183a1b53ce0764a7d4738ddb97cdcd0d6a76a32dbfa496d2cb
+Entropy.8 = bc0807f6cdae0e32b1bb0ac0b4028119
+Nonce.8 = 76f5694b0c852d4b
+PersonalisationString.8 = 32494822002c74dc406b88a213e26d46
+ReseedEntropy.8 = 16d460237a5f38a649e68fc111c1ef56
+ReseedAdditionalInput.8 = ee95f184344bfb0455fa7f4db2326d45
+AdditionalInputA.8 = be4b332e3cf20a868ba990eef3f8212f
+AdditionalInputB.8 = 4345acd433eec510afde2faf2c51dc9a
+Output.8 = c7b57b7e6deeb13288b48fc1775c0eb122811ce27e336dabdce3fa23db316882ede6938a441ffe848d82c0a1a37a1e8bbf12ca3bb8b2265cb5b3b335d4c79f14
+Entropy.9 = b54314023cb882d759e74fd822d61495
+Nonce.9 = b33ad7169c3264c0
+PersonalisationString.9 = 89bf26190eafec317dae9949ff79aa20
+ReseedEntropy.9 = 490088225d2a81641bc0147d108a7925
+ReseedAdditionalInput.9 = 470b3f0aa0f280599fe938cd5aa1b9bd
+AdditionalInputA.9 = 32f3b0f8610b2fe6549409a742ae1638
+AdditionalInputB.9 = c837682d0a19db10efc34a44478512e2
+Output.9 = 99ab5fa618bc7bd1521bf3d05db3cd082724836d2913619d18d07ac47d57f05f4df2ebe2bd22de0487ac6cb9bab758f9f49ebf1afdf7cf83e8ae3b5fb69d629f
+Entropy.10 = b3cb56ce6d01eac4583866fdf2a0cce6
+Nonce.10 = 130d06c35a72a870
+PersonalisationString.10 = 5de4b0c6c71f9ad91df2ee4ca4cade6e
+ReseedEntropy.10 = 7a916fbc9f003948551b1c7e61c5d126
+ReseedAdditionalInput.10 = 637d0c6ef199c8e3e309387a55ea3986
+AdditionalInputA.10 = 84b3aa93f84447e2d3792d2f5fe0ea61
+AdditionalInputB.10 = a045f50aa17c94d1f55c55d3dd705932
+Output.10 = 227e06771d658094c824cc4bbc1a985058c5afa37106f3f0fed370df64bb22651151e3332c602d0a36486c70ed7fd1f5af6b52c3fbd28b8a31032bb10f79df5d
+Entropy.11 = 7f249f2b0af7f6d2accc534486ff25d4
+Nonce.11 = b4a5eb9f06227580
+PersonalisationString.11 = 260f24cbf2c66c31c878ba867a4704c0
+ReseedEntropy.11 = 9ba292c29226af77342ca46ca80d0320
+ReseedAdditionalInput.11 = 91a77c7f132f210351bb51c6c7327f6f
+AdditionalInputA.11 = 3361b46fc051204302264b97b8547707
+AdditionalInputB.11 = 06478fa687465e759420eaac2c7d0add
+Output.11 = 2605bbd7d0ef8e2b3d8c579eb9f0602cb035cfd5e466e4d5a1e40f9288bb06dc52896ce341ab39e216ce7b8b70d62e1ce07bbc0a31172fd191f400fd2bfafd47
+Entropy.12 = 7c5d54816513a318b33ac67ed7144d4c
+Nonce.12 = 52bec78faea5e1f6
+PersonalisationString.12 = 8a2f62b83307bc52e7cfa4cf81736efa
+ReseedEntropy.12 = 192f6531617ec4baef6a302e18fe8a16
+ReseedAdditionalInput.12 = f2aca1e5c0017708fc7814cb748b0979
+AdditionalInputA.12 = ff68c19402e0cbae1a67f98ffd62f25e
+AdditionalInputB.12 = 2e89134c16b5da0f572a72e8f72bad03
+Output.12 = 959d505f742d5cfd4e5767ab75f41a6a97865b6a48918a68c9155d9ee56143963c5fe0200eb3f73e234ddb0df4bfe9a96b59c8d3dbc324d49a01e0113bfc0eae
+Entropy.13 = 59870c273d6d94a6a8a38a2c63ba2882
+Nonce.13 = 16767b2036076301
+PersonalisationString.13 = 1e4c01af969528849ffafb17044bbcd9
+ReseedEntropy.13 = 4d8353750de15bbc510ee89c56d9b2cf
+ReseedAdditionalInput.13 = 58d49d610473cd1a0c022e338e45c9c7
+AdditionalInputA.13 = 2bc01029d8195d54f8ace2352c4bf156
+AdditionalInputB.13 = dfdcb78bcda77cf0a636de21849babc9
+Output.13 = dd24c835595ff642fc2f2379e35f5cdd7495783848613564d9b2bef962504f2c7607505e09122d63a2aa0678b95f4d3c3dd3c5f85f1a1a0f559eef23db002fd7
+Entropy.14 = 03af6c44c7101544ca7888831f3f9f95
+Nonce.14 = 58d80fc378569346
+PersonalisationString.14 = 7ec2b597c845ae8bbb63609a80c2ab4f
+ReseedEntropy.14 = 410737c3c6112b5113f0ef66b0fa6a07
+ReseedAdditionalInput.14 = ae2ce6d1dba56775db17b8c6d9379f14
+AdditionalInputA.14 = 57866375238ea56e97dd6af8c5010618
+AdditionalInputB.14 = 34a449f860c0c18fdf854b32de572917
+Output.14 = 564bd3b77e4c3bdcb6c85db111f294293a4738d20043da15649b8c94f14ecdc73fb75d761971f3a8dc4f33f45df97c0d2bba4e4be74f52887325b300ff1e6d81
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b11d8b104a7ced9b9f37e5d92ad3dfcbb817552b1ae88f6a
+Nonce.0 = 017510f270c66586a51313eadc32b07e
+ReseedEntropy.0 = 6d14cfb36f30c9c1a1ba0e0a32c2f99d1b47f219a3a8ac14
+Output.0 = 53fbba563ae014ebc080767aab8452a9f36ce40bbf68f1a12dc0a6388c870c8dfa4250526cbc8c983fee6449903c6bd7c2c02e327680a66b464267edbc4e6797
+Entropy.1 = 880a7dee52ba3583044254bdcae89db6f8451e631937fecb
+Nonce.1 = 82999b1f6683a30ddf527659df473e2f
+ReseedEntropy.1 = 1153cfd0906d9d82f2b673ccdd928eda89870576c9c478af
+Output.1 = a07979b2aeb6c48195b917ebb4f3ea4d248e9624a910012900ebbdff1af4a975400dcc510a0f566b024a2382062808cd5b4439dcceaf7ce7e3837ddfc25cb166
+Entropy.2 = b85ea76739baf83c2ce44c9cb3b0d655ef369c63148505d2
+Nonce.2 = dcf5f66c8dc3d96e117ca8b907565879
+ReseedEntropy.2 = bd67bd3fabafd298d8d2a39e7c887788609dc90b00aafab3
+Output.2 = 7d6b367526b2fca36b1843a5f743cfef02e1c49f16071d1501f91ffbd24a03f5e0e64fbf550b6c366f5c0592bc83bdffa5db64897bfc38425354bea3e178261d
+Entropy.3 = 5c1c987625e91a8da14d9a4827e83e0a18b7154cfcd2a2e6
+Nonce.3 = e75d8738acef17ff94a4809eded5cc74
+ReseedEntropy.3 = 4dc9ca6bf7c4e914ccb785639c80b08538e6859ae160b1c1
+Output.3 = d23c44c89cb4cf3a619df80df76c7525d37f83be93f723f55f26639969de8b12c687f17b4d4c947e6a53de7c0f7cdddef621502162a34cee70d51e14e79d853c
+Entropy.4 = cc15b70589b3e47b00a08e171860cd244355da6ad8e05cac
+Nonce.4 = 256503309468955f408de1a18819e98c
+ReseedEntropy.4 = 00d394ec9e37c158b2b65f43f69112e6b75d6b1995d56a2c
+Output.4 = 6cc2805953bc5cfb9a26808b10934001cfeb91a37a2f7bb8a91413500d6962020b1ae0d1ead603899eb234a51bebea221a803e1cec0f9cfd650686ee14b0c5c3
+Entropy.5 = f9b2fdd2edaa5f94efdcc3dc97bafda014210d62be329c18
+Nonce.5 = 99868805c0c36bd268650a48c6c84083
+ReseedEntropy.5 = 95e44007d9ba0beb99f8220852f86fb38ca63331f89915ec
+Output.5 = f6538f8f691adaa117938efc81885f56ffd9b421037b924be2b6e23d3851e4650e03f0dd7a44afa41a460ccedc3b6596dcb049e989564b0ff5ef6adcea82ab01
+Entropy.6 = a97920820f9869a43875e3c2c6465ae5f8b0976ec8b6f656
+Nonce.6 = 927c2aad29091d96a45f28172530ed77
+ReseedEntropy.6 = dbdb21298a359c9cdf820a04b286d87cc0a07496d9a49a2e
+Output.6 = de33efd68a83c91adcdfe9be0197a7912b0ff0c7ff4d2fa38e6b1fe427ce77775dd8a66e64060a8e82fd3afef9a73dea82a54a554a20ae3140c16b8ee3389534
+Entropy.7 = 94855425e828ce1f2e051114a90fa1ea86dafd8f2aa58eba
+Nonce.7 = 979a8cdbadf844665b13ad19769da909
+ReseedEntropy.7 = 695a5cd79866a72e2bd2b4b61be0708a4ea79580494d1bd5
+Output.7 = 4b9f910556cfb45d3b3a0ba945e272d81e361597e3a26063b3862ec5ba6a5e9ee7c7d770e7bbce703e6eeb68d6eb12735a196cd201b5bc9f2ceb304ba64b665c
+Entropy.8 = f1a752eb2b869323484864e2285c08f23bc51ced5510c053
+Nonce.8 = cbfb3885ad9eb3ddb2885329030c20b3
+ReseedEntropy.8 = 1abe3ae34c0a9b5df60fc7af7a8f65c3b765709c2fceed3b
+Output.8 = 75a3e6e4517a3026f11fc6191a328abdf9166bf5e90010c1e8332e4a593e4e4931d6af129ee250d5654c6a9b601be6eed2d67119a7cd22221e68dbb9d713d138
+Entropy.9 = eac15d4187db3c656f3ca82cadf3b822e792abd77d076209
+Nonce.9 = 0794cd4c856c3b06e5a08c01a2f7339b
+ReseedEntropy.9 = df9f05099f0492b285d6791db70389a412af2e9bb49718d9
+Output.9 = 3895e8b2751cac3dcbaa9c06b98d4bb48fc7dff175adb4fe9e8dde5e761f9c5f9d7c92c4e8320c9d6fd27b48713b39012b67154c15ea0be1d0b9b4523cd82e52
+Entropy.10 = 8ec770275486316465f6dd0a82d5a5f7529392ca59dae572
+Nonce.10 = 68e5b6bef9b22184872504b2b8b1bc63
+ReseedEntropy.10 = 066bbab885dbec60a4005bdf1b26ae2405b0f089cd72b470
+Output.10 = e237d14fa1de2db1eeed8d5612e64011612b929a59558eb11afae1e8ab010f9acaf6970b8612d76cb982bf8bd0597a6cf1450f5af46048f3768896540518d36e
+Entropy.11 = 4d8f48add2e43f33e97bf4a047c0fbf4b69fc61695102625
+Nonce.11 = 7fb4e4b5e5c02582262f9c1ae6e3214e
+ReseedEntropy.11 = 387a8888565927a2262251d13718e897da8ddc41a595a1c8
+Output.11 = 2b5c7c6d839e83f56e6e40e06ff17fc22eb1250dd3a1da76f2d6ed8b23696f2c1062dd1e64aea763e455835dbe68cb58ccce0ac26101a3edf0d6560a57be2f28
+Entropy.12 = e2a30fa3cb3e33b97d83d0d3aa2df405377291e9920f3b26
+Nonce.12 = 41a5e74c8f196a5da2b4d9043e24cd42
+ReseedEntropy.12 = 15f08637daa6579270d87b0c7beb81c320981215fd58a106
+Output.12 = aa1c37503fea02a1c9d7724bc28b824246bf620329ba2f8b4d3aa99a8b5ad3aa4738d5b639a9e1734e52087f4da10f7c293154923b608190a29e6a0df76e562f
+Entropy.13 = 91f9697bb5086f3315f5ab85de1e1fb3c1cfa843dbae5a0e
+Nonce.13 = a2e5ca730077769e3ab652b503830247
+ReseedEntropy.13 = fe304716bfe5a4f0c612946f52b3bdea06f912d2231524d2
+Output.13 = fcd94f138b88aa2e498f7552345b253aa6ffe0bc159880379fe739c36092294de28d7fa7bbb574266f5005998b1ad1f2942b0e8ff18cb6b37e2f0cbf45c0301a
+Entropy.14 = f3922cf422174ce26b0b691df1c8d44efd46aaefa620c204
+Nonce.14 = 54290f5202de671c30d7819755257494
+ReseedEntropy.14 = c7dbf7f1161d3551c3b6e360ca732131c04fd5e1a43f9aff
+Output.14 = 114eb92d66786679dcc9ea1afa04e4bafb83ab94f338b3bdc40ff66bebf1c46f736d6a912ac3e3e79c5b0e14927fbefb59cd805ad5515c501923dc47d6456e64
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 3a09c9cc5e01f152ea2ed3021d49b4d6386aa6f04521ebde
+Nonce.0 = 490bd4ee628cf9615035543e70fce4e2
+ReseedEntropy.0 = df06e5668d41a6fa7660aef477eff7a0ffc0542c1cd406d5
+ReseedAdditionalInput.0 = 59b8c26626aab69e462752722f19450d12e2c0e959882d4d06ef4177e396855d
+AdditionalInputA.0 = 28e57a9128e479985cce391e98127fd126f37ad0f317fd5f97b8c18e762f360b
+AdditionalInputB.0 = d488672b52e867816178369f542190685bbe8672720c1943d8a4378cc9b9dd0c
+Output.0 = 5c233e2850e4981bab0f6513a76ca2c9f9f97b89b7fedd3d9aaffecf305d89fd5306cf24715895ad9ba7dac8c389fd87f95b4973003150871fa281e962f270cb
+Entropy.1 = 602a92357a4337c3d42c298384c29c1e048d30c1146dced6
+Nonce.1 = 869e7d82dec9e92c07d2c658bc867dcd
+ReseedEntropy.1 = 088c0abf63346bd6a7fc7542dff60f12cf55fd320ffb6075
+ReseedAdditionalInput.1 = e28ecbbe6461c6c13b856eb6fd971b000df6f4ca6fada059b6201c658266225b
+AdditionalInputA.1 = 1a1bfb7032f9aa197842ef9a5bb333d64b23e50b878fe96c36343e45642f94d1
+AdditionalInputB.1 = 6c596c8194ae838904188d3e8caf895fa2b2f523544529a3df54ad5ed7349760
+Output.1 = 1a40cded46f0ff7809149e1ed8fda83b18dcd1dbcb5df7b2b4e2ebd876ea6ef3dd53528f90967bcd8faeb63fbe5be1838af37857c1d010704a597d245db57e57
+Entropy.2 = accefe82af414c2492b02dde59705f015c78027a8eec113d
+Nonce.2 = 5134075d9514b466ce11f47329818123
+ReseedEntropy.2 = 77950e14e32d9665ec60308c1b4732fc51f7c6fdc27a0437
+ReseedAdditionalInput.2 = a468a685d27eb4bf61fcff6ce591c5579f9a22104815bc341b411ea1610ab51f
+AdditionalInputA.2 = 13ceddac150476a1364b9f700ec7a3ae02629b9aa441a559057b6549a133e496
+AdditionalInputB.2 = 90842d71b9c597ffd307b5a9e1b7355f730fa30bdc42425cb01c9b941521cc54
+Output.2 = 774fff121f3b7c9bbcdf844497212da47a83cec476f09bca3e1989e54de0116f3f25ab247684fbd0b5b59ad1bda0773fa006d6049dfb0eafdbabf4be05bec455
+Entropy.3 = f8af594af0d5734e802dc1f347c02f5fad753b9e4e2d8eaa
+Nonce.3 = f867144b4fd82889d0746409bf8ead4b
+ReseedEntropy.3 = 3993803fb8d4233428aab460835acc9ad4b2c0d5d215710b
+ReseedAdditionalInput.3 = fc53856478fdc91cb28a32f1fb75e17326e38825783171a2077f8621268d7f63
+AdditionalInputA.3 = 1ff04a1918607fdac61660ee440d1c1fdd05038d03c6011c932666a4b54b0391
+AdditionalInputB.3 = d67e82b265e5eed32062714f5ad24e5663cb9618421cc1b69cea3771ed7ae4a5
+Output.3 = b4e22034e142c5d1ada26b090278b7360b5e1d9b0b56fb257515f5c3ce3462169af1ac86fa2cfc5866e973a9830d6554186fb2d1f5f11146a15e78afebd8c120
+Entropy.4 = 8592cec1a3fb2615d8deb8fa4251ee2af17b52d32cb87eae
+Nonce.4 = 3588820f95a516ef5d24975622e03df7
+ReseedEntropy.4 = 5880bb7de2ceac8af53d243a74ed5def43b763c5e290e39b
+ReseedAdditionalInput.4 = 9245b32be181a93c03776757dbbed2566770b01ffbd2fa8bea194cf97e1ebb39
+AdditionalInputA.4 = d4f68a99e322f7560b5f601abff899711df066666959f231aa3a6353ad5974b1
+AdditionalInputB.4 = a24d59dc5aff9bee69f792c290d2f498d8850bb1ec75edf5e6fe0fd714a8e229
+Output.4 = 9413698a33fffd6c898f2059cfc7a601b22c343a4f7b484573736714bc3b851a3164e2b30565348e4d0d0bc0ee6c50d25269b1a289247be0906514455131cf29
+Entropy.5 = 42a2acb03c89d96646852dc27967948281faffe054e1e724
+Nonce.5 = ec2608864bacd3d67b135caf43bea121
+ReseedEntropy.5 = fd612cde9fa653c38a43838daba232d0d83569b4c500eb20
+ReseedAdditionalInput.5 = a087388b6db755045809ae598225b5f3b283c2f33ea6a2216c34cf46e5077d95
+AdditionalInputA.5 = b7b13e5f55980272901eb186ca61f5cecbaad8e400945e4746aa859fe723b9d3
+AdditionalInputB.5 = b87fc6c11450a6e62e2b8c97623b9aa3ec05fd240ac9faa54d61c701d7d96661
+Output.5 = b60ac5c2dd9da055754432552133b8d1731c7bc30d8f9958596a543e954fc201a16374b2d6d403334af68d20ec0d5aad47b2c2c8ebb1f8023b8c19eb041f3e3e
+Entropy.6 = 743a00f382800287b234d74d27469b32228f5fe3bdcff46f
+Nonce.6 = fc3197602929665fe0212dbab1f0f725
+ReseedEntropy.6 = 2f857a20338c3d9addfba4a79d84f9efec5ae85dfabb62d4
+ReseedAdditionalInput.6 = 4ca1f2b86c8e6148666877038c00961616e4671b7676a9647eb6515d39224d99
+AdditionalInputA.6 = aa194d366dfef62ecb949aac68cd32fb09d13ae29ff8460f669bd7da6caafb9e
+AdditionalInputB.6 = 2d255f273b8b7fa39431b0568adb4aefcbecf57dce3f45f77e611e97c6d586b6
+Output.6 = 280da4a8bd8158318ce32e926ad4f03165bcd4ff19c274103838cdabed76df4ba064267703c24bd1839d18d0311837c4d7cabb7c22751b63561436993a14d419
+Entropy.7 = fd36f61e82b17aed18e70f403ae5ec89d1bec1e6cc2c739c
+Nonce.7 = b3a79e1a78ef630f8274bb1766fa2f4d
+ReseedEntropy.7 = 5df92bd63a0d9210edefc45508f476ee97de02bf06753a29
+ReseedAdditionalInput.7 = 0ee3d2ccf2343e684710b94e721b23bd7a1466279206b0b5aa854b03be2a7360
+AdditionalInputA.7 = 95fc8757df7b89cef1db5dbbdda2ce459284705c9ac568efdb6fcfc685fd136d
+AdditionalInputB.7 = d12ae9ad4412de00efc585f029bb3616558e60806785e32be7086d2c6409e2c8
+Output.7 = 0d359a5e94ac6ff1fa3bc15adc46d54830118310bc650d613530e629d34a459be5b2a629065b4e7f4c85f3b6acb8962fcbbc8a0fed24818409f9425fffa3e16a
+Entropy.8 = decea18abd55455007751bbdff8501c46305a7fadf15e7a0
+Nonce.8 = 9ff532b82685f9ea4f918947080786fc
+ReseedEntropy.8 = 2c06c5d48a5fd386999d428ccc227b55d7549f57c4f3c162
+ReseedAdditionalInput.8 = 823b0eec0451a289e82721ea47949b5b258b850a4fa14983921e9eca70d64d8c
+AdditionalInputA.8 = 01e90b33f3067ebb738df38f6ccb08164a0d8d9219013fcfbd0599dcfdd4fc40
+AdditionalInputB.8 = 15dd70afee053c64c6e180f43bf15642007f2f2df6db9ebe75f4064314aa61f6
+Output.8 = 9a6083aa7a1fc1ae11da9da45060beb1142a57e0aa84f75e3de18288b178fb2023fd30dc427fc92016429063568accd492639de3d8d807dc324095a6ed01fe56
+Entropy.9 = 239850b9490a64034e4b1de3d8dbf9378c6ee8702cc6a134
+Nonce.9 = 0cb78bf0bd2ae27effdcd5564b138c9a
+ReseedEntropy.9 = e5cbacb92964e9abd8ff6deb1dae102111f529267bcbb43b
+ReseedAdditionalInput.9 = d73f9823590be43e2389427bc796bf7ee5ef658232338b4575fb57748988df3e
+AdditionalInputA.9 = 1e483f9abef83466d261ce535af9394d117c0dc06b5bf56897e81a98d80a3254
+AdditionalInputB.9 = c32129bfa56d52ed84834915c90860843a78a6d9bb5c470ebce2e138a3955b24
+Output.9 = ac613d48588a2800ca6b77d56af21fa13684764678099e51764897cf508a12f9bbbbcf9a72209183411c846ae9b01228fc1dabc341d63450fcc015932e8bd645
+Entropy.10 = 1f7f04d9d57335aff41ef211299ed9e88c95083a93da7666
+Nonce.10 = 2c08555e92982191522850b777d61cad
+ReseedEntropy.10 = e1f418c99d814e9e9596c262f826619fbc0a314350e0bf64
+ReseedAdditionalInput.10 = 5d1cd963cd8fef60529a157f55cdb0ea96a60e845e2fc63266b9138eb2e2b4d7
+AdditionalInputA.10 = c9d536692e699119ae81b8896e78ace4f13468b6260ad8cfa48d16781d3444ef
+AdditionalInputB.10 = 09935f2c5f631320637fbf8cbbd10d9e082d21e3f26ccf9b7fd54ca9a3473871
+Output.10 = 59464ca68b54f4fa32e764738c1073f9b8cc014e2f579e67e1b118f7f2f78dad7f3992c53a45d6507f8895a7be7f764dc72a88d406640b3709965a9cf6ff1e8f
+Entropy.11 = 8c4ee1f9e10a3ad8587c156e282f11af86841e11c5ed1c2b
+Nonce.11 = a2760ac4500a6db46b2a0a239408be43
+ReseedEntropy.11 = 05261c4b4746937f425cc49278df533829c54f36b43f5924
+ReseedAdditionalInput.11 = a26881f64dfbe6b50cd879fdcc35b690d5ec7ef90e657a61342e0f6beda046bb
+AdditionalInputA.11 = 39e1014129939c1a55f5fb584b1414965e1e7b5e5dfab23d1084cb324dbb328f
+AdditionalInputB.11 = d0bb63a8e1cb4cdca8cf2a2634b4916039759cc1d574b8d2e27818522fcaf745
+Output.11 = d3eff765c83e140bad7b00c571d27910b217ba53e00f3f11c5f21aee87fbfe33e2a195681752062d79a6b211d582018799465b83d6a8c732a87ee8e90bcb47b4
+Entropy.12 = 8f6aa16544117151eba02fb266dc347bdd2e1ec5e6021814
+Nonce.12 = 6009a164968e19c707570c4adbbc2253
+ReseedEntropy.12 = 0b51e68156e2a570e1a08ff8eda46591b2f54cb217883d04
+ReseedAdditionalInput.12 = 3cd2783e00d48f5b4c133931bcb4d3590d09c709ed6f195c3dfed6bf150c76dd
+AdditionalInputA.12 = db891af97a110a3643155094e0eeb9c6116c381b8616e36f471aedf2725e1c54
+AdditionalInputB.12 = fc6084a2858f34bcd2b87949452b382b189f3513436aea38d68fd9c761d68e83
+Output.12 = 15b7c5b6706167234959727da27185e65b7b8fa9cb775970a5fe806285a037b322bf8114a398a019effbcf65c3d4dce154e03a0c7f4b72d3a57f4ac8f40b4074
+Entropy.13 = 52f06fdc40d32a19e69d32a21bf8f4cf55d6978421e636a2
+Nonce.13 = 1fb33c9ee07b2a2ffd410b7c6a02365b
+ReseedEntropy.13 = b10434d0aeead874a30df249dd692dfbafd0d5d8aab67438
+ReseedAdditionalInput.13 = fc8a6614d937f50f74ea949f5097b9003eb04b953510de4646c94d18c978ec62
+AdditionalInputA.13 = baa0d5c1146eafa4631cae7d4c8c80930096c9bf0564c09d5ac8895eea025727
+AdditionalInputB.13 = fe230d750ea1c881b2c73c6b97cbcc30e439b1830a9e8eba123421574390a1a2
+Output.13 = e8bbe223d9ef989b122745e5f5a442e0bd54ba8d8fbe919a19995425251d0020d5503b493a3722537d81bf425ec9159e53725b707c2df8bf2e2c258fd8fb8e7b
+Entropy.14 = 8f8e6e35a689bb88f8968991a4adbf89373c58c5ed363f5f
+Nonce.14 = 8570bfebd6379d105186f87e9964cc6b
+ReseedEntropy.14 = 295c35e72faf6aadeddb49320f86a43b18da0e60b8d941a2
+ReseedAdditionalInput.14 = 23be848cadd90af9b334da7344ecaafa99cb4810fb00ce674f56e5ed36ab98ba
+AdditionalInputA.14 = 92bd8eeb636fbf83fe7d6bf5d299843d8fac8437691ae5f5ea43560627a7c022
+AdditionalInputB.14 = ed82e0fbb0ed607bf1d241ccf3470dc0658773b0c8f5b832b3244ae88e45c6ed
+Output.14 = 10c4cd9c6fb5616295224d4b2caa98ac962cbaf50f9c521749d554cf2a417ae76c07fffb8875381a2bd6305b5031fb62f93c0064aca7a455db7545e6b52938b0
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 35811473d105a6ae332bf72aa98a443ba97da55badb2e3c3
+Nonce.0 = 385bd442b5b7210c2d66109f88ac1ed1
+PersonalisationString.0 = 16ed4ee59401550c67cdab99620257e54cfc7aa312c6814f81352123e4a28f11
+ReseedEntropy.0 = a835e0140b52ae14df3343b65b110192baafd17ec2bcb10a
+Output.0 = 4b8afb7c20bf941db7fb2cac02b46a45313334c04034b7e411b3607e19fc921dca47f19c5877e92086547cc6f1158ca4cfd62001f7e0f3af8a62e3c9888bf9ad
+Entropy.1 = e3cff7142a7f220186032d9ae1710ada9214773a884f3ec2
+Nonce.1 = 1d827a2df68e9f64b6dedf0998e1123c
+PersonalisationString.1 = ea14febc4cc33846d266961d2d97fbcaba58c848bb828bef6336ab069a87daef
+ReseedEntropy.1 = bdbdf2287bec536be16d62180d667ccfebd37d445920c696
+Output.1 = 16a46ae5dae5ea51c58a8ff6eb43196de26ac97fb432c6333a418268f4befe2b7534a89beec1a77f239acd4c63367ad7adf9bc6cf2e4f742efccdef62624572b
+Entropy.2 = 0cb4fa325fe328385680a2053a47194a7d6d201a028f147a
+Nonce.2 = c3a712ec12b6ed9a214707a5f15a8b4a
+PersonalisationString.2 = 5d4433d29bac8c03a1616df4319ff31f1ad62d76461af6d3f3be537dcd9b1a21
+ReseedEntropy.2 = 616ebb63cc14394809d5ce1148e85c26def9aaccf70b2f13
+Output.2 = 2e0b663a5aafe0fc615ef4efa6be0c7ba1c474360df210ed0bc76ff458a3bd732d3dec7b890179bce2698c285383dc58045a9579fc724f9a24ca768a43b6f5dd
+Entropy.3 = c9d89d88c933033a275309d3e8e484b92f3c22b1f2e5e084
+Nonce.3 = 492d6f25492d7e4334e72bfcfc2f4ec5
+PersonalisationString.3 = e1c99f116057842d6306db327b436a653ce76f4a30c308921366bfccfacedc98
+ReseedEntropy.3 = 8335fabd369e9dbbc4e2d634b37461e30a01db6ed482473b
+Output.3 = 5f4aaf8b5a3a1a031448f949c4f82c501ad6b0b8291906ee005c1b771144c1c0daf5857a2564f7e0ac21df5d523443aba951ee5351a2e660e4d527dc3f320ca4
+Entropy.4 = 89d5f49b38c2511dab84dd379d99965d897f82952947ade4
+Nonce.4 = de6d0838f52995262fe8f91c2455a09d
+PersonalisationString.4 = 9471587311f59db5d7b57b7b74db62687d85a08c2255f4a84e6c096e53b33818
+ReseedEntropy.4 = fef4bf584b767cdfa297f07717e03b7e9a29f161d105040b
+Output.4 = b23d19fdad4fb8e45b2fb5ed807ba3acb11d56649ac2ef7147c8c78b134c5bba87a710cfb6e6460281dd4db7d6283e154afa164995af0249119838b22b8a5a4b
+Entropy.5 = 3778c992778f16f48e46f68ce00be024696aaee2d53cc6c9
+Nonce.5 = 9ea6451ee31df30e60adbbf4d8298747
+PersonalisationString.5 = 5aed8056fe05892e9c99c60f0bc1d9b24848f72a1722fc4f489a1ec20b5d19d2
+ReseedEntropy.5 = 421f1b05f47a0a1100ebb5ccb04dc3178799d2401f719859
+Output.5 = b584043cad7cd346dfd058d46b34f0ba0ca6c34b6198fff8c8614710483929a18baee5a67b1b648e6b27a7e9100cb28d1a942360f852295f33a8f8cf09b829cb
+Entropy.6 = 74ed969a5f8067a4bee99c248d799a8549479322460e1c6d
+Nonce.6 = a8a5c874cddc73abd8a6cc5a0cb28718
+PersonalisationString.6 = d7b64d2dd3bdf5ba98a6f69e9045f261aae32ea4ace5ca054969eb3133270cbf
+ReseedEntropy.6 = be8802ae995aea50a6de7dab9972b8653268affb687b46b3
+Output.6 = 88754997c474bb30e9f147273f653c02693be2c2e47953b4c8ff2c37a1e1955219023d5aae09a8d39d772bdc583610128b89440c9d51566da8bde92cc26521cc
+Entropy.7 = 9ff4b4fe4bee71fcc83ccbaab7375fb20d51800e946aa20f
+Nonce.7 = cc4aab82ec3bc4588b848c41293a5718
+PersonalisationString.7 = 0f492617a189e9d535ca7b64adbb6a6dab3a5be513f86742f961d0c8daa53837
+ReseedEntropy.7 = 99d688499f6be5da36b9c9ba943eec847b4b6b3cf31840d0
+Output.7 = 3c4c9a4c1c82f16a3f72c21ad9c0257b5c69fbd12b70a3a8bd2ca42a2033a231bec4d93246d25caa68d60c7aab4194381a309a1aaa079893f78a96accf1e10ba
+Entropy.8 = eef4ce6412c029dbd0090f6bfb5642689c5366ef4b31089c
+Nonce.8 = 01f980773c1c7aefa218a767ae023ee7
+PersonalisationString.8 = a9ff7203ce16a720b8b6514dff587f54eb28323669d01b9e55fcd34a98dcad90
+ReseedEntropy.8 = 1926a729cc54e22869fad80db774d84f42d738d3c8848d1e
+Output.8 = 5223f269daf6b478cd3105b8d689cb0b32247a4764d8b052be2c3fdd8a610ac893822820acba53c0368518ef3a3fdf98f5f4440789fc2bf4b1e999b384fb8a5b
+Entropy.9 = 640cb52bb0720ecf4d69d9037c8a96999d06221aaa53f0d5
+Nonce.9 = d8353dc33b33287b7ffd9100bccb5554
+PersonalisationString.9 = 989f1ca7d63ad2bf8a2c34921ad7bf8af3d830dc1caea6a84d2c88bef3318aa8
+ReseedEntropy.9 = 865f772822f18563e9747154eca2b86f3866c3e152293e27
+Output.9 = eb3dfbcaaf41dba5b4cb1334df47b088d34e7e6e1340645d196b40579aaaed944e93e2de781b62152d75e82af9036d7ccaf3f83d67465cce2746f7b6b3e26e58
+Entropy.10 = 5e2676dc7c0e85e72aa4838639967e04f7701c111504a4ec
+Nonce.10 = 293a645be43ee792df89ea78c8fce575
+PersonalisationString.10 = ccb13adcbdf112979ccfcd1cb40f7443b08207da543836a6952149bc9a8b9537
+ReseedEntropy.10 = 640e6edb683fcba5b10d3c395b19bfe03b6498e140302a5a
+Output.10 = f70e60471a48049a4a85191f4dc2a5aa0da11a4551b3c1ee491367b85d4e10014bd914223ea70b2099d83165feef3e966e2972c554c397d33bfe5c7734ec3faf
+Entropy.11 = 8792c5a2c84b1b9dcd2a7fcc4a38d6cc852434de18b0f2d6
+Nonce.11 = 01132411a6df2f1fac374fba2e961d52
+PersonalisationString.11 = e985ad135f44c4f068c19ba42a474a782c4b2392a5a943e629802b2758231e74
+ReseedEntropy.11 = 51ea6900e3d2789e9f135354b6638ff3dd4957f92891ba66
+Output.11 = b384b72930d1b531b5e28221339ed28d045c7293673d7365ab2b0b28af0d82ca97b623f91b0b6508fa3fec78e2c5600740357e77c1ac673bd38612aaa91b46e3
+Entropy.12 = 5572c0f3520ce25b4bacbd8276beaa9c8ad4f8cddafd8daa
+Nonce.12 = 46f24e7a1de769484464ab419721263e
+PersonalisationString.12 = dee6589c8b972b0b581852a26301cf5c2e7b582f5d574d4134db5a4620271045
+ReseedEntropy.12 = f25ac7a1d9fba574f55a738d81d730d4a678c922abff5667
+Output.12 = bc7e16f8c6432da6d7f9f187650a330860e6b707c2fe2bda146a5adbbbacd305c81366e15f269fcf33b40cc1710e2efe3d96919b5009fbadc0266ddee85e02f5
+Entropy.13 = 89bbe5d001db9fb2198db6d925d6ca12f68a2a5250a142a4
+Nonce.13 = f458127b7a5dce83eeb87be824e1a5ac
+PersonalisationString.13 = 2396a71468435c635e51f4f7d38c4a1157240ed9a4f6323e13e7db340aba1662
+ReseedEntropy.13 = e13462325502906002ebf90bc2a42bb106f2d735f1d69710
+Output.13 = 0cf5a25485ac140bc64971d9b1734fa57badada8ea2baac70bb29dc23ab53279ebe5444de23198796398214483e8ba12ee647c3f0668dfff2d979ae04143fb3d
+Entropy.14 = 8df6796aa35595be1f4f9f0740e2a822332c82fbb9ce492e
+Nonce.14 = 125505cb0c37e04bb9ac58990699a925
+PersonalisationString.14 = ffd75a98dcf5218a81f5820087eec84a4a076001b01e24cc8c156803ccf99435
+ReseedEntropy.14 = 599488019a36132002367df6e2a6f82735ed55d5fa1c9146
+Output.14 = 73b09aef6783b0c9d308dab8c961be7ae34affd4d0725684298a2c7657e5a33fe367781ee1a7f27e337c23ef7a355d7800f08542005f9686f2a8762ee8f6db35
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = c4b1e6a99587eacd7ec8517f40f9433ca432cea8686433f0
+Nonce.0 = d03a29e548e58ca7cbf0ac707b1464e3
+PersonalisationString.0 = 0daaead21779b2a428d2b7fb12d9ab8316899edbe26b5460de1549c99e4781c9
+ReseedEntropy.0 = 2229144c1b4efb79ab5fe079cda26bc33acbb2a0a87f642c
+ReseedAdditionalInput.0 = f116a683ca485fda846a598b8d9b079e78c2828286ad530bf01f693cc8af9f84
+AdditionalInputA.0 = 7c89de353298935bd26aa18517355313df0630da5f45ea0240e809179363080b
+AdditionalInputB.0 = e978b8fe56afc908bed129a46d57a8698d66034d4dbcc7aba3a33d5796fb7559
+Output.0 = 8ce7e9589c2975fd6989a450aa65da9114e515777c97351da037ccb72d4987eb69c680411724ed602e6ac76cd2d085725616c92777a4664d43a59c3ae9946134
+Entropy.1 = c58ad50f488bd6925c0e923e8364e82d655fd4d9bc05c9f0
+Nonce.1 = 219cb712581187726527a2633c5505a6
+PersonalisationString.1 = df4d6ebababfb209a601b938a6556ff037ac2d51efaa237b347d5dffff1e1271
+ReseedEntropy.1 = e471db32c9c50c2688075251cc4551604d02e2c139823752
+ReseedAdditionalInput.1 = e5b1ec5e6e8b4324b9e502fb88f9ec6671ec494140c46e58ec1d0c87d4ff2364
+AdditionalInputA.1 = a770f73e3bfbe61e8f05ee034cdbc1458f5342fba9f04dc2eb52573908d3d16c
+AdditionalInputB.1 = af9618160e6e6f6565479c744b75cc8ade1666d94da790086a2e8213ddc9cc19
+Output.1 = 3f8eff824790e0ec6d07fa28e0a00e8e06dad033fa2de5b97b4d467c70a913ffa25cbb3005970e65cb3f3424855d4bfa10f72568cb5e91e3fc1d6d8178331f8c
+Entropy.2 = 8abafdccff4708845a5f0a21d99bd7c74cffc95a60ab9e8a
+Nonce.2 = a7d98da954c33fafca07017390591d53
+PersonalisationString.2 = dc7a32711d6933b6fc10184ae08089a2b96d4448676bccb4e8f0f69a466d4449
+ReseedEntropy.2 = c38ce572840b1638eff0c1801f40bea24b71afb141eeeba0
+ReseedAdditionalInput.2 = 3ca05c23d825917e4a98d9bf1bebc725ca0454a0628cba77686ee58d456a5b39
+AdditionalInputA.2 = 9207101a61710edcc602d431b4b9f13a1bb0f43a0dbe3e97a4cedc32cc17f4c6
+AdditionalInputB.2 = 8dfecd01bae7c6f4719b2f120b6bf11b848ff5648df30304e340de90c3342bb0
+Output.2 = 6b876eb3d291fbc49730b5515a326587297e971360dbe294eece35d0dc0058c0695fa061b236457915c47012b789ecdce6c08b5a47a0e5d1d23db3073bf292cc
+Entropy.3 = 6bbfcc3adcb57d1a542a246facd899244162dd9afbe4cbe9
+Nonce.3 = 98f60643cb5dd66b415b4285f606212d
+PersonalisationString.3 = 384b97793b9d518dbf71890cbf13836e51b9e9b1d6f769cac20b71cf51d313fb
+ReseedEntropy.3 = 0d884093d00e9a951ad2df6680e365af11d14e7000f440af
+ReseedAdditionalInput.3 = 960706a79fb0b2ef0837d1630fed53af50df033cdeff2dda61e5a3f3252aefce
+AdditionalInputA.3 = ef74de0f4210d180c099fe5fdd58c2cd6d8c79b3fe4a782e584ac96f8e274303
+AdditionalInputB.3 = 0adc4626c9d66085e1cd4cc4a10f85d04dea8545399058512da0a6ac3877377f
+Output.3 = 927b0319bdc76e795d378453f241916e25fb8a722494146ebdfea99aa48aa6d878d8cffa9324a8984814dcda30e5aed8c87399c9e5fd457d63c0d61b46a46a7f
+Entropy.4 = 0c9104c08ebaf5a491f2d85f10ded3e2fe7612dfa6e1d6fb
+Nonce.4 = 22678d0ed3646356b52fe328b23f2ed1
+PersonalisationString.4 = 58c1d9b76a19d217223b44319497aa99e390e320b8c91e1170eb8f8f484a34be
+ReseedEntropy.4 = b196632d9b651caac5add901dde3f22eaaf9fda984ed3680
+ReseedAdditionalInput.4 = 2bffb5876d200a35872e30a9976e938e1f4ac543fd2dacfee161c07467c34578
+AdditionalInputA.4 = dc7ff3aa1dd3d2ec7741c2eb648cc364398ae012d2d4758f0f5b32a9b3b73c4c
+AdditionalInputB.4 = f6c937cdaa891462a54d5caaa0c6bb2009d19c7692e267d57940d6f2886fe687
+Output.4 = 6082ab6e55f5373b2d70dafa2dd0c53acd979eb1b09ff42d34e3641593c1fc66937b6eb08a8490b3ea208ba5e0e994792b1ee99926159eb080748dda314b4860
+Entropy.5 = 02ffe9c16287739489bbc5b1620f749ad54b2c4c8a081122
+Nonce.5 = 5600af3695a9ac4672e3b2a52ae0b19f
+PersonalisationString.5 = c7c9f9cc55a1f82a6122a53654095a38bcc1ceb7f2a97c52a7e7f46cd0d074ca
+ReseedEntropy.5 = 2d6e4b107429bf28cbd9efd62c91857565c99f70cbd12f00
+ReseedAdditionalInput.5 = b6747c8a9392c6e5209c0d4ca388a449e727b1feba24a274c79a20b07c598945
+AdditionalInputA.5 = 1c4fc55f2b564cffba27fc542812e246eff4d6bc65eaf8973cb03c3c9fde3959
+AdditionalInputB.5 = a814a51ad26ed3400e62a3427d1b881c7b3d3e46dfd86e54b41401c7e28ba2b7
+Output.5 = 1b727345c0927c805004419855fc698da87750e448859d7533ece87bc5acb2efe697d6f5a56bf2b5747b0bd4bd21273062994e89d3028db63e5b0f8cfde02b3e
+Entropy.6 = ffa16b187b4e0f40d73d4103a80219e5d7961064fa6f406c
+Nonce.6 = 8122f3b2cd575fbcbd3e740be1af4411
+PersonalisationString.6 = 0f23a08ad7ab7d0ec9df9939e085d0bf49f3eff9263f4d0ef9f88b54723b5c66
+ReseedEntropy.6 = 72792b72e8363796c464da3b5428fe40254911210e328222
+ReseedAdditionalInput.6 = 1a3b6d8606510b13287dae1839c93c9f536edb5cf5cc52f4431ad7f2ed53df7f
+AdditionalInputA.6 = 9eef33785e862a99075e19fec4207c2eef9c6e3965b3f22c53ccfd655b848062
+AdditionalInputB.6 = 881e83d175fad04c5ac548aa5443b930b5dcc04b9d0afeb5e7d057f0c7757eea
+Output.6 = 87b27639b29e7306d303e67e88598ffbeff230e0ac231e9772be257e6caa96ac35018a45f83ecb72dc7b9ea8c006b2ae36627b181adf30f565921841c87821b1
+Entropy.7 = bd04d91c3e3010938917081069d0ad9111885deff89882ed
+Nonce.7 = 3a78168888749e95e44b17188e6cb3c5
+PersonalisationString.7 = 312ad6943601470d601840df6d9d3f920485e4bbfb0b1c6883bb186882f3057b
+ReseedEntropy.7 = d063dbddca1bfb0b5aa19a9d88f58cb9007f98f098c8b801
+ReseedAdditionalInput.7 = 170059a3313c13aeb46f61e27f6b48f8aae94f1004083ec27cb71adfe1d36f35
+AdditionalInputA.7 = a1e3e45715c68d5711d576f45065b7629ad29c6f425542e1204d5787229451ff
+AdditionalInputB.7 = 8cce6a52bfa2b02e566e8600231b0f5ec8fffecd13338722fd476be4974350d8
+Output.7 = 86c2cb9d00aac25556e837d828aeee349310f859547bd51096283a3d2212df63671a07050e1d641a39f88fa9ff13117548e158e1745e859447167c80ae98e71a
+Entropy.8 = 4388feb0af371c517ff32678ab06ee5bb08d3ee2e96bc9eb
+Nonce.8 = 30f6d86d5d70e8b0cd8ea29f05b9b96f
+PersonalisationString.8 = 81e82b9d1a087c0b5157a0d31c60736b19b22f6ac2c0d64e49e647e5ccaa5b98
+ReseedEntropy.8 = 7507423c12e4a91c291c3b7b3c128defa4a343215cb88632
+ReseedAdditionalInput.8 = b9c490c70283f95ea2a555e5c7c11f25461d607512c83fbd867f03254194d30a
+AdditionalInputA.8 = 1d54aa2a4a2ef175376882d40f1b9297f7d05ef21d5a6d95fc84d589d1b030f5
+AdditionalInputB.8 = 2b031f9b0bca10cbd1c4799de3900df2815a5ff88a66f9fdf163e89532dd1c91
+Output.8 = d3c64c70d8489fec82150bd88b1c7e5feee71004bb6daa375e4042092f5a9d62a6c07a4cd1cc059e329587c5b6e1f25d4dd2ec89e69c73dd10f4a61966965de2
+Entropy.9 = b3442439393aa5b9fbc477d38ffcf914efda009b4b546504
+Nonce.9 = 9e4614c237fea7c1b50b1d09247b32b9
+PersonalisationString.9 = 73644e9c092003df119516d1864dbd7f8d30cec0f7011882f4f7e835ea7d0ae1
+ReseedEntropy.9 = a10b44607d8f4690a8965186a44f54425a1428c7a36fa5b7
+ReseedAdditionalInput.9 = dab621ccbd15f12e3a7a6ea0c41d54820189ebf955be6125d732165d1dda198a
+AdditionalInputA.9 = 3cbb615fc6bb70339065cedf41aecbcebe82f32dc947a7985626e1f42dd3ea80
+AdditionalInputB.9 = 19420e42cc2135e4d70dcd3cf3ac8ba630e42eb1ac7112906578a1e316edd0bd
+Output.9 = 7cc32d5f081595245c1670d4989ab7bffe053c03b0f2d636886baa93e123c10c1b495235c9a7cbb6bc08bc06719b6d4b7c65f0ddc54d2ba97f7326cda544df65
+Entropy.10 = 3e5a64dc441c5699d224dbf49d71d32a4365d7e1d3e47571
+Nonce.10 = a21951917c69cf41885a93988661a36d
+PersonalisationString.10 = 9d759fa873e37535cd39cce9dd092414b8387256c6380ab2df96fed014af4171
+ReseedEntropy.10 = 96a1287a1b36f5f14ce8abedae64b791affc5a5cdb505375
+ReseedAdditionalInput.10 = 76a125cdaea27122e4f8f74cc9284af261c7e36f2b72b6137f6ee538fc1a8420
+AdditionalInputA.10 = eb4641288369495866dc9c2e7242db84c374b799d3fe0fd91e8201629ba1dbd8
+AdditionalInputB.10 = e457acf8c517fcb838865f5879e2dea31b6fa506a6d4f41e3d05abb93d9493f4
+Output.10 = e321e4349bdcb1f34020b23111d88b558695c70c1473852f46039a1afe2676ca91c9b49065af4b81fefd6b3e0dc3ea88fe69aca1f21a3e09145baba0261efb54
+Entropy.11 = 54533d5c0027371780224184bf727205dd72b40fb09f4937
+Nonce.11 = 73e3f2afe2c6f2112ab936f121ff25bb
+PersonalisationString.11 = f458a955414ad47cb2f43dd8ea2f4b1bcdf09da53d075e2b47d4b9ad93cd4e04
+ReseedEntropy.11 = 67d5a079c4e68ad4c957ddd485ee587104c924b171924d44
+ReseedAdditionalInput.11 = 1acc20b2ebeb2dcbdf6d3a0a32708f59e43f66027b525da610a3dded85524475
+AdditionalInputA.11 = 88667f25d19e4c994587c1924ec6ac51973b5a434e6236c895e3d1d200520a44
+AdditionalInputB.11 = 91520819c6440ba41e25a327ce168df9a989c9fdc95c3db9a0f496d6f4f374b0
+Output.11 = 1b10c9517b63710e0e48dab3146fedfecb95c4b5e5cd39379aab9b3602d8156a5ddcfaaabf6ccbff1dd5911ec8ed113ec934cf34921d5f6b73387127554d2988
+Entropy.12 = af26036d72b9ad0584e79b51dbabe25e60914f3f48d978e4
+Nonce.12 = 39eb3c0fd20a00b77ebdb003018020c1
+PersonalisationString.12 = 081f45a7ab84510577aa113dd711c0c289c4fe4e662b746eeabed2680a670b25
+ReseedEntropy.12 = af8e6899dd097a549b56b9d249dfef8cdd396ea670df8c38
+ReseedAdditionalInput.12 = 88bf969c1ae4baaa60b74cbd804b798b9580d45c1000851086301d41b6a98395
+AdditionalInputA.12 = dbf4cfae0384dae71ae5fb2baa27b86c052916c92a662c32839e67b9fb13b226
+AdditionalInputB.12 = 30b3f073c979982ec19aba537319c3b7b8d8d684d993a5c38e7218a13692271c
+Output.12 = f009bcb2b52e308b769da06c02aab3f4f6e77604e4ecfc9b50cd02d5c1fc4b71d1fa5aa952027a856af6149578f1d909e3bcceb8e6edcffb6140fc678ed54559
+Entropy.13 = 8d92ddadac4461b0a40dec1bea91fb3f9a8a76ec7757b272
+Nonce.13 = 1408c1e6bafcd0972f1f381ba31e157d
+PersonalisationString.13 = 69de45dc21e7849e37ded876bf5d892d0ff567638dca8f480b049573dfc0734d
+ReseedEntropy.13 = 2adf516111eb9bd18448284070f279956806f4d2d2ebbdcf
+ReseedAdditionalInput.13 = cf774b405f4502ef2074dbe5bcf8681528fe011f71b1cd418a01fcabd1c27c04
+AdditionalInputA.13 = aec59ea5339696e8a4173aa239acfaaf17426ad1d834460f8483c36e4776d6a6
+AdditionalInputB.13 = 332b678357f6b247acc1e34467ec4df744bba42b1e1cd05a35d3accd0ecce91f
+Output.13 = 382ce5ed5cf02dd3854fb97b1625f23ea997276d2d8b85c105da6d958ccbf8d0c122ce47979189cf7f96436f0989a2be725898ae91dd964d1bcd6a2ec6db6b94
+Entropy.14 = 22d0ca9265d89c5b3716524590bf2deca531fe9ad6c4cadd
+Nonce.14 = ed25ae6279f1ff4452b88971304079ec
+PersonalisationString.14 = dfe04ee19a64af7c0698a057b7680fd37a9f7b5a9ee3c9fb985a207346dba568
+ReseedEntropy.14 = 77ed9f0ae13d237cf3931343af6fdc34eb3aa84774b404ef
+ReseedAdditionalInput.14 = 7e87db1a9cd81914e43949a7a9dba167ab012d35557f7d9001d4ece353c79075
+AdditionalInputA.14 = 23962b887c196b7d0d62b2e79b9addcaa74ee04cf2a28c45386f69a56bb47699
+AdditionalInputB.14 = c0282b471662732c8475c1d6306effa2e8b4c1afc160544d3c9b019e0071b10e
+Output.14 = e79201755a4cb63a1334cfaa53ac5532c2d44557fda2a22f718d69f0dceafce18179678b30ae8c97eac2fc499790d2532ae1b3fc5401b088ea1fa3a49eab2604
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ff25661b6b585c5a31217a9b5c20a6e307f70b126fda2e25
+Nonce.0 = 1be8f51afebd48145541603df92e5d0d
+ReseedEntropy.0 = 29855dfe13480058562d337e16ae0c8753cc4eb5420c8825
+Output.0 = 8607c9d784548f2f37f2616b244e9f27a30092df9424c47b3464862e675f03d4ec6cd5ff79f9f4a5d388a603e7495d39477955460ac2ee0c2ce4d3d834ef5174
+Entropy.1 = 39af29f392bc317898a66a84ad843b9e176987b029d0012d
+Nonce.1 = efa622ecfecc7b5293768b48dbf3e5a7
+ReseedEntropy.1 = b666306e4f02f4cd455c3a799438733677c5965f482e325a
+Output.1 = b736c6ba430b051fa2096ee7f077b0ceda0b40d4f397b4dd559c294a73003df380b266d2bba4eb94acc62f45987126f778c94c0208a330edc8bfa3aec7dd866d
+Entropy.2 = 3430be27583710618822a1d8b4a0fdfeabc12f8d2f702387
+Nonce.2 = c2bdf87547fe9cd7cad23bc1f63049bd
+ReseedEntropy.2 = 53e2ec40c031d860b77a00c86d1b6590a4bd02f7b27b1ef1
+Output.2 = edf1b1b648907abe36e5058fff3ff7aa6682e01d05815617472cc50fcf17c3ebe0c79c0300499e881d106739e6e4d6f40221a77a242dcde29687a2da7e181209
+Entropy.3 = 27f1d6e2cf04bd6e97f1ac028a7f07687fe8a017447802dc
+Nonce.3 = b3c49d6352848c4f72d7f82e5c3572dd
+ReseedEntropy.3 = dfb13a1426bd48defcfa7a91e13467eeb243075c23a6a419
+Output.3 = 7d904e4ce29eda570c4ca27af38235af666a251a4518f064963d8c3641806e5e7d963d1f32090b8ae8699182b9ecd625ec61e09c47083488eab75656c2bee4cf
+Entropy.4 = df28a9331b889913657c59f9546cb6e33393ea65858432b1
+Nonce.4 = d6d8583bb7ef495a5b108730af2cf14b
+ReseedEntropy.4 = 7b144e638de53a661817c295619ea0e08f2bcf3fe1c78290
+Output.4 = ea760ab5da811a6b1a179ccf531902e15fba08014ff94d199a1cd8b7527487e43c36f6874ce35211e6d719fabf8c0a05d4f3782e78f9f8e89131fe9f3921c8ea
+Entropy.5 = 3ca78abb9347fdf876d298a37de1baf0679f9e9ed691dd63
+Nonce.5 = c5b357e7f277e44b2aa52c6be5ef12ed
+ReseedEntropy.5 = 968f83030b805037d2bd5db9eaeebb5c5bb4650b21afec1f
+Output.5 = d2a032f77b57d744067667cff18840d034e27381943ef141fb947f34076750b9e90c2c033eaa9de78e48fdb1926e3124c21078fccc44e35098b489477522671e
+Entropy.6 = 891cd44b246f6cc47901927a0174e225078993b5b64d8972
+Nonce.6 = fb4f2eb73c303aa6e3d612a91f251930
+ReseedEntropy.6 = 5ef1972373ebdb4c7b414c69845a8eada0734ea46fa1d012
+Output.6 = 59e6f2e416e0fa43b65fec2bec3d511d97e0b0d537ebf84057baca2950449be1253f584d575403fb172033018efcc094e43db99840881d944b450afc6b9e99c3
+Entropy.7 = 55709ef0148e66a605e43e76ccd1aa9ce167e25385716cc4
+Nonce.7 = 6cc4711ac143aac7363b9f5fe116d550
+ReseedEntropy.7 = b178ff732e79459db512863f65487d08e0185c3e825f7496
+Output.7 = 0d27a39e961057fc0303818c800587254cc4a7d7da33f216a1b2804a2785d722aedef0e16c02973007383cb7574c64ed1f8c528cc8b0bddeef7707cdab7b7ea6
+Entropy.8 = f97b442ef489f822004697ceadacfc240e533db43cc9d21a
+Nonce.8 = eecf1b9a52c370f0fcd64b5d2d7b053c
+ReseedEntropy.8 = e97b2617e87c6ab93ffb9ff06408e444452e06d01dbd9949
+Output.8 = 2f82dff54324195ae39e92630af541b39ebbeea0adab967fe51597c8496cd6637ef74836b7a92d9c7f699346a8b4a8907870409fa5a2a39bf171b8d7e5806c9a
+Entropy.9 = c5d2d836c375633819231bf91f50f8b7498c7dad848473e1
+Nonce.9 = 4525025b4e848f81f4d4c67b5fe22b67
+ReseedEntropy.9 = e9f7d8d354cba1691c40ebce00a2dd73c4569d793e838a23
+Output.9 = 3ae7a6d76787abd470d2a9586549fe0815da690402c83d4d7457a02c1d795c61c942df128ca7c2fd2c0589f9a0c9c08b247579ddf265af06affa9f0441f69771
+Entropy.10 = 93dfc025a3a839a77d63fde80c3dd28d82d0d2999d19d04c
+Nonce.10 = 97bebab36846536f60d315fe884347ec
+ReseedEntropy.10 = b415c70c93ed68964c9f152270423cb382007a5ba88827a2
+Output.10 = 5aa70288c848e1c2ba058d545e97fd9102fad25fb609da1e301c252e4ff0a7eb537f3c411fd048566764bab617060465bc6c3a2ce0670e68926ccbf4e98d9140
+Entropy.11 = 9463fc03c17bdb566f1408cf6d052669816fd79d4c550286
+Nonce.11 = 3142c030d33f4651548c569b64fb2d45
+ReseedEntropy.11 = 6e6d9a7167fdab95921d78fe197d065ce7bd168975473c54
+Output.11 = d182bf85d948b2c8b05cd2a98b2c7baf4618c12387b41d72babbc9f92b9fe3e4ba6552252574c40459bfe74d9e790b294911ca0777d2d2c4d54929700699ea0c
+Entropy.12 = ccc5cef1e1774807b2088ea248691361b5603806ce613109
+Nonce.12 = 0256af445465dd03756c3001447eea4f
+ReseedEntropy.12 = b6bba417ab2c32ae8121c9b0af7724eeab15b7064d9efa91
+Output.12 = dbdf755f7a3f7e8ae10da9957fd6f068b24d2b253818b8fd1170fe17c6eb98112d56394559f50753761b4860493264646c517abcf5c86a29cd1acd6d1451e394
+Entropy.13 = 95b7c27807116cbb6ad8b69c8895ef115bf56587d8c00f6a
+Nonce.13 = c947784114f6f5ba965286fd9b31f3c7
+ReseedEntropy.13 = f336b1ab1a4febac39ebceb2ed919a81b4388b13ae777242
+Output.13 = bbd70942bb2772a1c0097bc5cce01bfb64dc27cc20037f859e23a6c78575aae4e2eda38c64599a40e706ee0c119fc1eb0e139ed1a02f0da9d7cf7b84cc7e6934
+Entropy.14 = 770b80e15a3eee89f75608a780934b159de6ad3f5d78b6df
+Nonce.14 = d74192d50f0f739094808987ed94d382
+ReseedEntropy.14 = dd3e0ae94de73952665cd75c729404329098d610940a9a40
+Output.14 = 111c1575c8eec37a4272f59e839b6d6da24886a82f1d3389952b5f5fe9ea6b352e8473959dfd617d0cd8588010a1f5da8c9a9dd036610a93d4e940e09a95b164
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 1a1a4a3bec7bbdf98f53592418d903aed3e114a7f0114563
+Nonce.0 = f0b7b7424f108f6db6cfcbfd2d40a5b6
+ReseedEntropy.0 = 6f78afb310ee0dae6732e0ed979c63a3ad8792333662f624
+ReseedAdditionalInput.0 = 9f050542a1097f935c68f373824ab9cac17827badbe07cf9dee48af33a31991f
+AdditionalInputA.0 = 38d68cc7c89866d8d2708a215776af154b3c082d550c555e1aaa5a72ef2f5be0
+AdditionalInputB.0 = 40f8314489c3258dd4b13ba59b7e8f3ec95db00829a2353a08cd758b4989c053
+Output.0 = 15cc0ce77ee55ca4d72b2e75c32887694dcac97f7d261fbe9ee1d09970b7b0313fb318630afa4ac369b9979c22647f60a3799739942d7808d4fbb14f7ac49037
+Entropy.1 = 71e73c32cd9205d45c255a5e30ba6d98475385f166176006
+Nonce.1 = 10a5557cc3a1268449b9a440f3e57eb7
+ReseedEntropy.1 = 290c465c47f76fe11c2dddee3543886e838318411aac6922
+ReseedAdditionalInput.1 = 4a2f94d6d857540679ea0b031a8690191aea68199af394e2f64186e41cfaa3d7
+AdditionalInputA.1 = 22eaa24b0a5cdb2361fe82861f33c242bb4a5b9e0f7b10e2efde2bc32e42d720
+AdditionalInputB.1 = 219c4168957f030f6021d035a52a5cd666e9bf26ead95388a8cc6f5931db8dbd
+Output.1 = 7633dcb4ee8ee10c82ac4e6fae5fe6453dda9b83f38316d3d68db1ce7261db921a7d5382824ce9d4fb12a383ea273478eeeba97dca2eea9b3b5cba7c978c20b5
+Entropy.2 = 8aaf10eb8677c88fcbc3d4b8418341a538cc28b1c72d9597
+Nonce.2 = d583c85266a9eee28d623f24cd5e16bb
+ReseedEntropy.2 = 15dcf65bbe6fd3974aeb4bf1f25abed2a37a6f46c8df48ef
+ReseedAdditionalInput.2 = 77411de24f03352864e33b9a2b34d37f915003e28e31bdf0b4355e900830d6b2
+AdditionalInputA.2 = 130702d1326b4e6dea87967e9ed7efe037f1e560704244738f3ed5d62f57f726
+AdditionalInputB.2 = bdfe4c8912ab00670bacf142310a9222558541997d366590887104ed9546a2af
+Output.2 = fb5c7316163c8ec1cb1b9fbc30a81040fd4e6e0d1b6d35dac6ced9e67804828807c12926cb1e7b28449625dc11fb98c1fd71d6693d7734cf403e80e090d6a82f
+Entropy.3 = 814a71f17b4d83eaba1642b53b42ab5fcf3749531e052c6a
+Nonce.3 = 1970b24974a6e45fcd099f7f81e98968
+ReseedEntropy.3 = 583ddd4b2d88dde25b7e2285478b06a2e1ba41c005e2b939
+ReseedAdditionalInput.3 = e12514eaa3f68d7f2cf0377736360b2a14459c0b741d0432d041b98de3f11edc
+AdditionalInputA.3 = c4ccc66d9b2f4d09e23025b0c0436ccc7a7f02973405df09344d7421aa5692a1
+AdditionalInputB.3 = 00e6c49a0166e47e4b812fed1b2f9e662a6e7b906adae6486757ca65f0ad8aa3
+Output.3 = c073da2488ad58c9b2b3c5c121de4081711086b62dafbfa23595b2deea862e89cd8bcdb166817392fbbfbc54ec070f1ffbe545fec8f5b04aeb3482f2cf5af4d0
+Entropy.4 = da3f840c1b9e656b1c20841aec392618d90527cf645a7691
+Nonce.4 = 1e156c5d97f3245a4e88f4f1d0afe5cd
+ReseedEntropy.4 = 6c71433ec988486e2930e72060f97157ebef1b410deda0fc
+ReseedAdditionalInput.4 = 1bc4ffa8c578259b65261d38a80887519ff05371e1824adb3ce890c8e2a6c1b0
+AdditionalInputA.4 = 7da1c487cd40ad88945babd350e98ff69ba65c92d9991bf2b9ee7cb62f592628
+AdditionalInputB.4 = 0e97655c3fda2f9c48cbf6d84897e09ea771f9833fa311879014289a09c0a11b
+Output.4 = 1f02f7a8a29077eff915cca98d4436caa270aafea037c08d5a2a9171dcb6a618e99e7eacb0072807a61eae8f7557c183db67a186893316057f85f166013011d2
+Entropy.5 = e51cc4dd6324eb3e2ee3cf6807a581c5fe69a4d90674a1b0
+Nonce.5 = 8ff0157eea81295aff85a62fc87fd5fc
+ReseedEntropy.5 = 011491b765e4f7927c2ad56bebb1c54466ce6a0050de0bea
+ReseedAdditionalInput.5 = c9460ac85333d583dec696f8753274fb16ed0e273934bd18c8b9b800d82f1916
+AdditionalInputA.5 = 837a5b4c64968610cf67e1766b27665495de9a7958e83591af8a183328f0c427
+AdditionalInputB.5 = 6a2217a865f979a750b4b564b9d72e8ef9a051cf26639cfac83b0d1965fa2bf5
+Output.5 = e25f04c506eaad2c39e2a12858a3bfa5464cf4df77137b8286a33374eb6765d745c934afa0607dfe4600e28b69230d28a8cb931dfc3d434977b7a859a86d2d74
+Entropy.6 = 1b9fc4e15d6dfa69184e905dc57d849d791628683cc71c07
+Nonce.6 = a5902965d44b0e3c6392d96f2f0faee6
+ReseedEntropy.6 = d988c4561c9f6d8adec72ea5abd370738e82d8c77b77a796
+ReseedAdditionalInput.6 = 42786f5c79ee03e39a7a7ff01c2d20e2a6d5aef7c7b161bc2ad1bc10ece7d451
+AdditionalInputA.6 = 8219b7c30096fb4eee433c09a61c21eff9d29fb56d4a28a9e6dfac50f1564206
+AdditionalInputB.6 = 14870b1235e1cb178ee729ae455e05de8cabf7b31bf7c5a8ff6ac05ced3c8938
+Output.6 = cc7386b1bdd1869232fb948d899dbb0af66333d07b23ed3d105c377d7a15d5be678c7c530c79ad52c2dad5a35a2eac31a97497643992b4a581e7717de8bc4bde
+Entropy.7 = 50aa979421c7ccd42d6f05525092812fa610de8233557d1a
+Nonce.7 = 575bfb8f5c472498eb16b0b9e0b9ad10
+ReseedEntropy.7 = 8314c1b30b3416b3d138bbf2f690d0e45c06150d3535cb4d
+ReseedAdditionalInput.7 = 41981cc977e7276cf69b55814cb066528c906dc264f6f8563faa5ff0d4dd4e0a
+AdditionalInputA.7 = 3d4650b5f19cf19f3c037a110d64a2df4e81ed7ad6cc478b836374ba9b0a1591
+AdditionalInputB.7 = 521212557a42c654d8e28b3995f035bd57e8c57fcda6b89db60dd2cd11df9bf9
+Output.7 = 87f983234603ffdcbd617d62d23c5f9d40ccb5e2cd55739d994b09591e6336d1a3ec92ec56074ee3fd783d5699e52da09ef2002ae8f2f853647a6bd9fff6a0e5
+Entropy.8 = a53e5daf4a15618a2ba59ca1d3bd9abd75d58598e458ae7d
+Nonce.8 = 338cd866b0c405512947f4102f0e3d27
+ReseedEntropy.8 = 42ce3e84e8e8dc92d3948caa0a71248492f16ea6c54a444d
+ReseedAdditionalInput.8 = 01008ec0cce17f9f9f600ad682f0daea81ec4e5fad23adbd45ee954d7ce8449a
+AdditionalInputA.8 = 69424003f08f5dcb7366e74024648d9bc01a5708bf15574b8167943027697555
+AdditionalInputB.8 = 8131406a803bd44fedb1a4513e4cc0dd19c0e1aef2cd91d77f91359ad665e2b7
+Output.8 = 824856a7290828273faa88585c17d6c6e9395e6ad9eb8581fcbe15d26b11d1d78eecbf9a98a56af47845ac46d73ea6dc4754b596dc97c264c4abc40291fa26e0
+Entropy.9 = 1c1e9ccf0b05a931cad4d8a026d031364635a3856262b75a
+Nonce.9 = 61e948365f590ec363075cb6acc140f3
+ReseedEntropy.9 = 0da4b5e8409bcc2ee6545eeeb6e9d785700923c03404d65b
+ReseedAdditionalInput.9 = 1006440f9137e57522887c93e7092881b78756fea22857d69cc155b0a8fb7dd8
+AdditionalInputA.9 = 7de4c757592ab99a0f0a9e94a51fc2d5de57280285f0f2a368814c4705fd2504
+AdditionalInputB.9 = 11c9468c286e6639536d513d1368ce25253f0e60357e450773385bd87c324958
+Output.9 = 3712fad06fbbe39cb2ca2e8536ee1061b6ed74362d8cc6cfccfd49401e210d1013ee0d2128e9902cc343ede322d9e4cb5621c6b3ad27b0ca8d27a18d3139d153
+Entropy.10 = a15b7dab42f6304cbe201c67eef52cb72b92f7dde9cde9f5
+Nonce.10 = 3d6216c778fa796312281eb78e360dfc
+ReseedEntropy.10 = 86c59d108e18a072d13c836e70f9a3b5035d4a80a7384f15
+ReseedAdditionalInput.10 = a61d90e6a94c096e41b4a9b69a1daba4e5f530a53da58510e45adc361be96400
+AdditionalInputA.10 = 92d374ffd369a71b9a963bb84c9a57bcbd02215317060aa1ba6f8db7f8a889d7
+AdditionalInputB.10 = 1b367d51c92fad59c7e76bb1eb67b986fe2b4b3dd7e3ad6cc736412a9018790f
+Output.10 = 8314c992f978657dccb0e85886b671e2effe8a6276d24dd4a86bfc4ca17e43dbc5cfc06c59d521c2d91abc13e7ec7e99983f2fdd123194971b1d52bd7ef152de
+Entropy.11 = f024bb6554a31a62281e06314fd467112868cfc18d395080
+Nonce.11 = bf8e1af5cd96315362f82be82e4b887a
+ReseedEntropy.11 = 94623e66065f1528019491893c8c5d23464a977c7f30218d
+ReseedAdditionalInput.11 = 5d0a5511ca4f36d0b0fcce0fcd421f95ff659012d6674ad8e197b702f3588e91
+AdditionalInputA.11 = 6b9cc597175c2c0a3ff485122f6e124935f23b48adbf0ab297f1b27fc11e99e9
+AdditionalInputB.11 = 08967a8dcdcf63275d799152178a752c7928a4307f5cbe7c01bb5ba607e5e6c9
+Output.11 = e02be557a6dc834972f3de0322b071e35d7925fe374e854cdbaa64892827b86445545df6cccc8f5343b211e025c9ea03d80ef2837ff06f4f206aa22625b9abf7
+Entropy.12 = 820ad74a3c3c10b56452df57bfeafbffd09f1ad021652a9b
+Nonce.12 = afb768e35678b67deeccd883a43e2cb2
+ReseedEntropy.12 = 3fe98072d4213d47517ec826ab9a4b5fff39e898702230b2
+ReseedAdditionalInput.12 = 36687fd74ecfbc15bc9f4007d2a360dbcc4f355ee9bcf7ec4cf1afddbdca0738
+AdditionalInputA.12 = 0702e782def948c2778badb2f6a4b2ea77320e82b3edc2174deaa9cb49372448
+AdditionalInputB.12 = 3159bb5c1963243a58e53d236e09be0558a54871751d4604ba7e3fb2e3f382b7
+Output.12 = cf817510cd62d088ad8480dcc02238d3f943b429f91e4add15d87b4cb23afa3b5ea926eaf7c01f4ebfa85de1bc98307c4963c8189ebef46a8bef6ea1aa14b833
+Entropy.13 = bf0339774a1d0b64a24ffa112c6d730746b7167a6495c6e8
+Nonce.13 = cc9cecf904e873fa41bf51656334409a
+ReseedEntropy.13 = 4d4e0e0ce33bd3633b332cb158ebf914c178ff195c80292b
+ReseedAdditionalInput.13 = 2c62ee3c5a44c11aaa31a004ea1175ee4f8e432144418b8a83f379ae07739a5c
+AdditionalInputA.13 = 4ba7c360343d98eda3a315843ef638795afd99b8527c07b567eed4d52b3aa046
+AdditionalInputB.13 = 380a1172c438c5546e3abcb0e9e3ff685196727ef67c62d1e517dd555dfe4628
+Output.13 = d3f2a7bc68023ddf2bd575767648b08e08e665890cf5baef717b6091bda5a32bc19dae9ca9642ae60fd416011be83c926766e36c9aff6166fed3a6b27da5b31b
+Entropy.14 = d531fd35f31cb0fdd6692055414c69e9a33f8ddd69764679
+Nonce.14 = 90b285dde81dac32399b10a260918a57
+ReseedEntropy.14 = c13a651618fe8b946dd3e4727416dd781048214f4e65bf05
+ReseedAdditionalInput.14 = 5d385072d25018f357c8255c330cc5ac3c490023232d6b42300c868ddbb18ba7
+AdditionalInputA.14 = 843bdd124e610e6d4a8b8a570b6eaaa4208ac4c90a6346aec568bcb40e7efd9c
+AdditionalInputB.14 = aec98664dad6634833e27781c62641f6749ccebb407ac2fa04063b47d187c6a1
+Output.14 = a497497e07223513b6decdcb3c1ca62043da0b2d65a1316a5d245f6170b27b08040c0cbdcc596e0eeb8f0fb8f3907a57f41cfea1e04dedc45c586bfd26ba4523
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = a7118c155d69705519f1a56f3f524efcb32aeb32a98ae81a
+Nonce.0 = 0207f3534f118c71cc11f181f5c6fc0f
+PersonalisationString.0 = 8d11491c83dede012f271c263f8d4246c3efdfdd288710c67e979f4fbbc864cd
+ReseedEntropy.0 = 66abef82f794f35ed94282deef0dfc228ca5ec83257e81d7
+Output.0 = 5ddd46baf5c6a5e30943c5bda12f5db8ec19c537f1702afea31292b4a9a8d425763a9f92b36f616f4ffdb9160774d8776433b7c05c46fe6f66c403736a044be5
+Entropy.1 = 45c2af2d3615d4493beb79220c2f782ba5642ef44547147d
+Nonce.1 = af672d645a6834d6565fb32d15d4085c
+PersonalisationString.1 = 0758c24fc92f126b41ea906da2bd9e8f9732703b13c4f2334c96fb55bdbea998
+ReseedEntropy.1 = 8dd15d944cbbcc5413996d321620fa1264789534bd228fc1
+Output.1 = 6e4c6cf2192c959376e1d9f3fef0a715a9932b1cad08b9c653e7b1acee5313051fe2f43cdbe0f16a565039d547cab6de9bbcbe3af12d9057a9bc3feb98d7210e
+Entropy.2 = 5fe4905c810fccffd3e2985f2094690d7a581f3e5ad39971
+Nonce.2 = 3a12f5f2d90627b9b7212c33bff3de9a
+PersonalisationString.2 = b4591dc7ef2705808edde80a37f625705e5ba2ab0d4c794f10ac0df6353f5c15
+ReseedEntropy.2 = 79d3f08470e18909e85a0410c7e4855b155cd59b2cecc47a
+Output.2 = c497be7eae974f2ed65dfb0f8b6cbb3ce05db82ff31f36f04aaa44e19b0828d0c5fdb59cf588529e5f7eb048c42d503e5be7372657347e9d3edbded34de31633
+Entropy.3 = 7223175b57e3e3a22b95bede4b62b246eecb217ef87147a4
+Nonce.3 = ed25c6f4c4879fa99f175b2e470c8dee
+PersonalisationString.3 = ad21bf9e96a91b56fe9b199a16a674885abf223483c76c6c279ecb253dc5800b
+ReseedEntropy.3 = 544bddff07fb6246fecf5aa4ec7a88350afe2758240bc558
+Output.3 = 3e52224e4891a17c1019d28d0c90b0365928660f8af1f66fabd6e687d81ca724f134014c7259d53fe795abc34b6fdc039d9cf2d246cc738105e17bd554752f73
+Entropy.4 = 1deb3128bd87022dd2ff7abeaf7bfdac66140c319f1dd24d
+Nonce.4 = d6504f4dbbe2feccd89c9c225cef0c7c
+PersonalisationString.4 = 266737c2c2825f2d0c8539757ff8f9e85ad94fa4ec8e2a2958025f0fc2c66487
+ReseedEntropy.4 = f9679a220b82af90385c5e04fcf891caca1246c0ece083fc
+Output.4 = 9d4194c988a7bf40d47d406094b7275340a6474357c8f4ee5fcedb29f5c3c97bb9f6dc957a4ce3ce541fe43c4d2c547c85e4823288af9d47ba8d4f89d3d46caf
+Entropy.5 = 92295be38766b648cf442b84cd3eaf02282e378c00d3e42f
+Nonce.5 = 8f1b227ab2cc6564868d7a219b36f5cc
+PersonalisationString.5 = b572b2bef84403d8a288f0a5475c00f186941f7288023b8cdaca3ee65c4b5e46
+ReseedEntropy.5 = a5b8b6f44d8aa23b6621888545098e2554a68115db1b3f0d
+Output.5 = a11e67a353a2e64ee0608eea12e6db0b35c1c6d9ebf8869bc4ea4806009b423c68c2f6b39130a082ed6b063ad57bc2d75569b221647c9bd1c038a73604df2cd5
+Entropy.6 = 0b6ea66e9619c8d3e1bd52b365628a4a0b7f948372df2853
+Nonce.6 = 6cbaf02c173d739b0094c0a25ef20a54
+PersonalisationString.6 = 2d23dc5840f8fdcc8a8b93ce301418faa817ecc6612ff0c91b01ad7e22a864e9
+ReseedEntropy.6 = edf76385d2c99516988e91869e09e1c07e655655428474d4
+Output.6 = 1757ead14a22c4ce8cd190fda36710c3ee8056268bd6ef448bc38a34057daa0d55e709bb20fc72bbb5d4c1fa16b404269f9468c3029ad44448005d5be0f45526
+Entropy.7 = d010003f835ece36be84e253ebb829b6689ae05582da399a
+Nonce.7 = 17281f73427d331f159dc5cca3b84269
+PersonalisationString.7 = 9a9c9540e6f177fde40ada55cf6dbcb53cf30052bf69fbfd104195db59699574
+ReseedEntropy.7 = 6b72933610d8efdab5b23656a657f6934592f5c86e018b4d
+Output.7 = aef5ae882ccb2faecff84c6484248fc13ed80791e8926675a9c01184d843e0aa154d97dd1759e4efb1788b0ec8fbcdd6e59e9f1db02ad47c8b16781fe813c250
+Entropy.8 = a9f408a0a97285f0c53416e60df55ad46a1bee91cc9d4636
+Nonce.8 = 73c7853fa67681e4c25587b547110eb2
+PersonalisationString.8 = 3ae26b8b2ebd1a15316100969d335a383945fdf6bf9f7c1c658311811679933f
+ReseedEntropy.8 = 877bf6c91d6345f777dc1df5650c1fe40f74cade7b3b29a3
+Output.8 = 679fdcc2c5b10bcfee0ab322a1a3fb43a830039e9c23574fc6ee772cfe6ef7991d350e52c0cbd7b6b3e4edb2abd3bffff6d722bbae43305631df0abd109d6bdd
+Entropy.9 = db355d726c79eac6d62258ed92d4f31cd3e6a8e0cda05274
+Nonce.9 = af52b3f0d43e3a0310da57b4d0c6a284
+PersonalisationString.9 = 51d6b8403b7a3729c5e05d595b6f3850d220b233f4ec3052ab678f4a3e1ab429
+ReseedEntropy.9 = 9f1e5762f5c75b1ac98cb068817739feed86facd98fe85b1
+Output.9 = 5e6af300a4ff0c0042d1e8c51b0eac14902b9594db95c35dac8eb53149663c6ad59f9f475c6802b11aa094494413ffc61aca806a4557208b0c863b0c10a60cdf
+Entropy.10 = 4dc65abe7edc6628a9ce20fecf1ca9cc11e106c247aadc78
+Nonce.10 = 269e93bad38ff69af72330e5fb2960b1
+PersonalisationString.10 = 5e10578bea14b9806c4720f199de43d4b3498745d367ce6aea805d176b83af85
+ReseedEntropy.10 = ecf4f2a515794d3f4e198246f772645d341214a8e273ddab
+Output.10 = 41335b222f063d9f1e8c09b5b1fdf9d20c8d097593917a55327f8128f5bd8abd42a2a89a86d10ad636ea8ddc0aadf479c2e6e6786ee166d337d8cb3263d6b3fc
+Entropy.11 = b986276f9fbb11abc12a1471beb82cf5e8ccc53c02dc3527
+Nonce.11 = 165b23a4478487e0a4efb40cd3f86353
+PersonalisationString.11 = a820fc958868894bbaaadb333aec48d2f9ca8eb33780b217ed3bb8aab792ddc3
+ReseedEntropy.11 = 10c4476237b23ce6f5ff6bf2690cf86a9e0a5deaa2ec945a
+Output.11 = ce03a47af0f4deaa7ba0f2ac332d4c467dd1bea4de2791abca975543ae78560967e675e90d1ecdb6643f39aa753b8619b9e2a76e4639e62702dea23c6e609b71
+Entropy.12 = d6465c9ab55c68193f5be87f102408e22bdc9b2981566ff9
+Nonce.12 = 0c0bf9bd555b915642693ed45692b2e3
+PersonalisationString.12 = 5898c4999a56758f679194a91d88aa1ffea861743cbf99fbf53ff8eb91aca185
+ReseedEntropy.12 = 8283c48d8f7750ad74631197a58b30f2a536bed26063ff2e
+Output.12 = 2f1f484fa276476531c09e2b8a47454ff4a74b0423793efa056b415bc853590076d3277369a728aee66c1f3bad913f33b482cb8e0e805891e20acf14644dd55a
+Entropy.13 = 1eb696f5c64a3c492185be787989a3e014e8d55257f39e1e
+Nonce.13 = 0d7b8a3d6bee621d2a29742c058e8666
+PersonalisationString.13 = 9c1484ee471c8847da3d97acef0d0283af1d95f735717fc231c12846bd8eae27
+ReseedEntropy.13 = 17e333bbbf9faa7411cf13dbb540e05be954b81715b09c68
+Output.13 = 544c5096e69f2b3bf74d8ea789a9572d2e61aa836b2c5aa5b02bfe9edd127ca1cc49917d8e7fb815497096857cce595c84419389662f1bc842b5fbb46d44dcd4
+Entropy.14 = 0e14a05ffdc1a80a9ca9c7f377ced69c0642ab8490c692aa
+Nonce.14 = 25098e574502ed6349edc0c8d3a28006
+PersonalisationString.14 = 1d0e83b9f32571af1bd94cb15e4eddf18a4e565204746d7a34d648ef17d386a8
+ReseedEntropy.14 = 3b2cdfc8e4eab283d611831ed121a9d1dd2c3b90c86e4298
+Output.14 = 4a40d4b4ca4290c67b5222fed57ddbba72b6aa20a57048a32478b9941bda2e96e4f35b3285d512ea1ac0282ef2d4ce4c223a6dc79b911e1bd3576c9c9008f957
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e89d54f816f802a1256fb9c9c239887ebcf6c64d68557940
+Nonce.0 = 4f022171cace97c081df28cf425d0956
+PersonalisationString.0 = 53cc6834e9fcbb3eca6880a0ae90d3a7760aaf5a1c0d074b092b9f937031a68a
+ReseedEntropy.0 = 6e5c51ab74c8552c16be257bd1626df3af7926be67b62c0c
+ReseedAdditionalInput.0 = 73972f57c4a3e30a795d8c10ee801ef0f6c8be7f79fffb96b541d322ba7fd9cc
+AdditionalInputA.0 = ece1b64c51bb97ee3e72c1c7d4caa3a3d48b6410914240ca033f35ed5b898331
+AdditionalInputB.0 = e7d5dabd56f92029a09cf17cd64aaad8ba6b4d72dbfa07003cd4eafd83c170e5
+Output.0 = b0e03cef0fbbfaec5754a0a2c1b396a7df6e44df6ac0554ae19d77e6fbe4f0136483380cbb81568c1c1f0ae7fc02758d8d1e796866b7a6a6d173ecc016b81f26
+Entropy.1 = 22f7798ac67c091de8687a849b7a2dd40452e65054d3543a
+Nonce.1 = 10a42146c7b0a412347f1c934b217bfb
+PersonalisationString.1 = d6ee30bdd4c87150b79f88a1d11fe3889cdbdd3763002f6d6e27352f6e51eb93
+ReseedEntropy.1 = ae4ae79bd90b36d2ab76f23d9e942b5c120219a078ec458c
+ReseedAdditionalInput.1 = 2128f348db64712574219654fba03175bac560cc2ab83f93dd43d5ba10ef8921
+AdditionalInputA.1 = c0e6b2eb2ec98c78ee46d25707d0f011c3264020ffcc81cd1b60c4c1ef56ab66
+AdditionalInputB.1 = 19c00177fb103078c0ff323c6523258231530d0d17954793b3637d9d6204689a
+Output.1 = deb74b2e7ee96766f32e96da12ea1da4dc4cb5275f2674879712ce7deb35cfd57861ef4f011b51f5aeb2f1676f32cca37729cc7a65358149704c6543282d9d9a
+Entropy.2 = 82017fb78d3455958be32cfe22c120768f668816426430f5
+Nonce.2 = c05973367c93868314d5ed91fe275b82
+PersonalisationString.2 = 5e9cc6695057a0bf1550fdf62c2e966abea013b9adc6f2a2a8dd9ddb7bb35071
+ReseedEntropy.2 = 7049dccb73d0431aee4733be2b1a269a55dbcc6df83f2de0
+ReseedAdditionalInput.2 = ee731e2dabdc7131a1186e873935731a9318deef0efc845631ac80c9f91d925a
+AdditionalInputA.2 = 0d6e1049d9bfd6e5d5fbaae8728762822c2d26f45cfceaa42e8950b7971ec94e
+AdditionalInputB.2 = ce6bb4b8695bd7bb48a1a9c274302f4ff2cbd33072e3c63563302ebcf825a633
+Output.2 = 0cbaa6a067c4c5687367a33ab15fad90ec64df41ba5fc5f2cba001998328f8a94f3a4d8a498f8ca0c9704a86ecbce2e14d08234fab8c4cee79c4ab40522dd1f4
+Entropy.3 = 16fa5365b5b5216dd8a5bdb8c7becc09a41c61623555a1c4
+Nonce.3 = 0c108cfcadd4a5eadefc66d06fcd637a
+PersonalisationString.3 = 7f4ccadd08e4bb1df1cbaa3292491d6609aa7f88afb074de67545bfc1d001136
+ReseedEntropy.3 = f817114b9ee5ac7a7567ca0b0d64bffb80b9152f01af8645
+ReseedAdditionalInput.3 = 7a6c28a40d5181580166adb13bba1e8c2168c143bdcf78d0baba0502f9ced85b
+AdditionalInputA.3 = 88fb836359f8e46e3d06820995cc58d61bb61f8a5e1287ece411b65b146831d3
+AdditionalInputB.3 = a2ec3e730cb941d61655bfefbafb482cd5feda998bc3104fca6bf744fb184b13
+Output.3 = 514c5b0cb67fe3a998692daf5ca45870ad3d84ea05631e53dbb140d431986603bd5b5bb0c0e02d51c13e4b33d5021571deb7e222d9a9fcaabbaaf88ef65ba8ef
+Entropy.4 = db2231a8dcb60e154438be8d11b2219e2927e831d5b3f6ae
+Nonce.4 = 5f0f1721f273199f4175a97d535499da
+PersonalisationString.4 = 1c3764ee63bb1247350a4d4a682510f5d5f880211aadf9d4ea865f6ba3d2cd74
+ReseedEntropy.4 = 96560db1580869c39b9b46074de4c29995ec1bd8fe7813a2
+ReseedAdditionalInput.4 = 1a9d96d88244873025ac5845a1fb69d9aa9d182062e4b445268f579c778532fd
+AdditionalInputA.4 = 014cc69f6ecf20d1ef39081d9b945aed9700b860530fb3a6e9eca87c6dac6bd6
+AdditionalInputB.4 = 26df8683ca3836e5922155d4e7e627f3f137d07c05624e764563ae68ab0d7519
+Output.4 = e82410f1bf2c0cace35e05cf44233e5cbcb3dda74572c69eef147193f47e40bc0d4d206ac80b77e36ea11638b35ab53f7a16eb5c01f2ab4349884b088ef877c4
+Entropy.5 = 6911ebe9ede1dcd134db336f95ad1b8ba275bd56efe27a17
+Nonce.5 = 54f19ebb53d8edcf4eae8ca463126eb4
+PersonalisationString.5 = 05e1a0f5b3d964f3e63a1058d7e2aba7fe58a9ae97c2aa374527af296f4d184d
+ReseedEntropy.5 = 10b48f4a15fa121c51498c2a86700fc47a55d83405165569
+ReseedAdditionalInput.5 = 2f7e0d7957b18e034b9ca9a1196109ca6ce3a5ac80600385e00514acf715e81a
+AdditionalInputA.5 = 3bb13cc2970e8f147dfb24fb0b761f0de6327b0fd177bac75acaa72dfe60e266
+AdditionalInputB.5 = 714b135df699531a72c57ceedd3990f9d53d68e78dec0b68d2add1f3a494afbb
+Output.5 = 9970d7202ff77e95f42251545853cfd50d1e5ad7a51719a391ede00b3f8f5007ce0503484b83d0f014e65ac027829a5c9fc7f6092c62e7ec47515d200b39b618
+Entropy.6 = a3d8659c097d5c7e274283647aad26c07fe751172ca12e10
+Nonce.6 = ea0f68dd7b6878d6d139a935c24b7feb
+PersonalisationString.6 = 84515e0519279740ce7a00fa1b31f6fb2bb14b36368b9bbf95b4c432e1382e99
+ReseedEntropy.6 = 7de47811574a94e6ecc4a2d16c4147cfb69e411b66aa6d0c
+ReseedAdditionalInput.6 = f884459884e22dd06a7b4e2343022577221213c861ee61d6a9b596942299c772
+AdditionalInputA.6 = 35842edb5dfbf02c72caf9e248f3c07ef0f9b38071695c0a2852506d65e5252e
+AdditionalInputB.6 = 9a433fdc6f80b2cfb81380c9f9b44bb4a264e5fbc75934ba635fdfb696ec5d23
+Output.6 = e6efbf12fed1c64c3a98175571460a19a4c62ceae4153beb7a04784ea4d8ddc41d9c8c6e89f7b64a95c6fe3d57e7b36488e93631648e1f94e0fc6ff3c058569d
+Entropy.7 = ddc137a725957f7f36275a2f2ee1bf8ae92afe711a7a3f77
+Nonce.7 = 4dc7e3c75d206e4e3e7fc033de542c20
+PersonalisationString.7 = 76443ddbcffad40ad8c7c0b2811045216ea16c7f5425919b137866cc17bdd2db
+ReseedEntropy.7 = 4af4e3e877ca4b1d6fb9f4dc422108dc47c924faaf931f6b
+ReseedAdditionalInput.7 = aa28f723363214acd082ccd2358be8c72f2d3a90315383d4b67993f8d8dfdccb
+AdditionalInputA.7 = 8c427d260fdfed813351ea2cef64315278b33a087891e36aea4160574ecddd74
+AdditionalInputB.7 = 8bca366dc90b9a2a9faf8556820c6431e26e0fdb7d9c7c2c94fcc89da60818f1
+Output.7 = 8347068ebb42b359228a84340369d51a73f85ab2cda2e32dd2663fc83d2c6474e38a08b8e9e60d6ec0bc1a4ee9f093fb69f0cc4281258d72c6e4c7a4d10f08ac
+Entropy.8 = 3cf4e261f726eb75dcb35629f44a3102968b6c94790f4116
+Nonce.8 = 167abca4fdaf21a30b554314d2defc7e
+PersonalisationString.8 = cc87bc66ae04ea9b35ef847f92909f8dd23641d6ec2610bcdf1db78ab0fa4f2d
+ReseedEntropy.8 = b59be5dd93d7d2d400d9bc93b6c4416015f70fdc3ac80978
+ReseedAdditionalInput.8 = 32387332346c566ec9456a16e916e9a467fa0db0c8a315b67121e30035029938
+AdditionalInputA.8 = c4cf2cb92cf856e333cd953aab500b3fb7a259c6981b2206f39ba16bf439c581
+AdditionalInputB.8 = acd98e1c9ad49f1b309eefe95a5ba36f35c411fc4241afbe067e6ade67ffa09e
+Output.8 = f9599d402a9f26fd6f1fe98fde3422546b7d751162a7288bfc6b32f863ae98b1b204828632d3ad5e900cb0fe54d84b2ceb4df155ccfd991e93a263e1e04fdbdc
+Entropy.9 = f8fea209a8abf3d6700f051291bff98655f99c1041d69b61
+Nonce.9 = fccfb400db6f4bbfafa51bdac03580d8
+PersonalisationString.9 = 7170c1548df5c48eee3b076516396cd355cd761dd29b8a534263a3b9af299dca
+ReseedEntropy.9 = 963e222af3ed7d4b6d33d92f8efb7dbd4470dd86ef4a2203
+ReseedAdditionalInput.9 = 34a10d365333bc694024e7e087280d5fa27f0f69c48e53799b0d3f55bbbe5821
+AdditionalInputA.9 = bc95ea099fd7eb907bcc9669ff2aed110db88c30b09a10a6a50b45146c19a2ba
+AdditionalInputB.9 = 87121149b25eb1e5500e782d7cd0733f9dff8e5973acfd0bba04932cbb058cf6
+Output.9 = b325c7fadee911ab38de35bb02fe63f704bdaae8ebd2e9750d273b6552e34286e472a01c054d5a846a64ce0be15fc44afdf5c6465b50864b2465894c8388c6fb
+Entropy.10 = 2dbbc1b41eca69aeeb3f161907b12281653656f15c879341
+Nonce.10 = 7d88a124a3bd8471a5b561dad2ceb9b2
+PersonalisationString.10 = a1b66f79b48fdaf8191ab27035b0a3a8bb1ced658d03005814c2494b68026485
+ReseedEntropy.10 = 50e0df187dd9c27d5a0e962c2c8615bfe7228d1475e2f4f7
+ReseedAdditionalInput.10 = 8598c80caf70e2e6ffce3c6cb4f06933114015d7c9c5d273b428b4fbc2d14b7c
+AdditionalInputA.10 = 8394e945a421e9bc684f49876a011596a22c6c988b83c7309f3dbcbd9cb19d8c
+AdditionalInputB.10 = 705258f5b78048207e1e3f8efd9eafeefede23b4e51c79c03104b156865627d5
+Output.10 = b7f5396c9d2dbb14fbe1622d1540e5dfe72bba85cdd49515114728dc9a35ef386ad5c1b7c7b7c40b06904f71190a39d5be419b29a42b9470e6b973830f0187d3
+Entropy.11 = 607b26929e2a9326cd3bb26e7dd10b13095cca93949575f5
+Nonce.11 = bff291e59812d10a4d65b38a6144d008
+PersonalisationString.11 = 52aa9810f26f284e915aa38f20d58b38949e5db92780511d69cf73c08bb9926f
+ReseedEntropy.11 = 6489ce0e80eb12de88cbcdc4e6a1f164f8c34109a84221e9
+ReseedAdditionalInput.11 = f9d65f818dc0806eaaa90f22a61b7cf3de69542fd72239693613841b924ad2b0
+AdditionalInputA.11 = d85920fa2d321ef617b2398e438c6aa4552291249c544a65e62fe1dbfa77fe75
+AdditionalInputB.11 = 77f964780f6198e521a1d3111cc4a8aac7cd842d8bb6904495c8bb25578286d9
+Output.11 = b8c1a53ea07af7cbcfec57b7c489faf85161d9dde7c2734b605f6238bc3aafdc4483d241352caf04479ba67c84c1bfeb19a8bbf0c4c0e707288d2c2c69701122
+Entropy.12 = e1b5b91f0f5ef3d66518ca65098c6af790806624bf6c2e98
+Nonce.12 = e9278ea5f8643511cd787a71e39b4c4d
+PersonalisationString.12 = 0cab8f63d08fadaa11c1e80a1e29829506be3720963bad7fe908ea74880e4138
+ReseedEntropy.12 = cf204bbc35e977fb77cb048acb7a3cd5ba1d8e1dd6484313
+ReseedAdditionalInput.12 = 3c60d516af0f43612e2e0db1ad91ba12ad5a9bdb20cb3c807a7a30fdc00dac8e
+AdditionalInputA.12 = 4b697bdf6ee015faacfa9596cf4ab664d47dbbc198ac77112b2e64e33251a030
+AdditionalInputB.12 = 89dc88d0ba7c9dd831f0cf11bebd080e1c38d16970cf487b46e0aa7ebd468240
+Output.12 = 8d84ec1a7b11ddeddddd6d6b90b2604e6d6c872c9d3ece424cae84be9b71d8c0c1395afebd955020cca15b03a5f509d88d515b3bbcd58fe90a3052b007f7e8f5
+Entropy.13 = b46c57d261d5949f47129828cd1a7fc8bea08261132557e0
+Nonce.13 = 829f0e692055f6baf7f55d364213bdb1
+PersonalisationString.13 = 4e00001a12f532eb499df4710e47db80c15b08c00ca92b8485d3b4a8e021a4be
+ReseedEntropy.13 = 56c50b701634b937969010c3ac5053ee6c7ea690aa652d6b
+ReseedAdditionalInput.13 = cdbc8731a1e39a36ac03790277fa02ee09d835d6cd7370f93d78fb184c6cd79c
+AdditionalInputA.13 = e0c2bb2dc1872f856f7f1594b9f652b638a0f780855ce499a7cf2628e1b1763c
+AdditionalInputB.13 = 0eec40f486ffbda83efca889b5f8e8436fbae0cf89c5a401286b81913aaf95d1
+Output.13 = 91cc030972e6c2856f490311b74c23adf05d8791e58fff2b0348016348c6c99fa96863e630fafe105a81c34c2f93e7f0ff09fa74233e6f8802ceb9cf04409ca3
+Entropy.14 = a71b17c7428f2b3e675a0c46cfd17d891590046202df4a3e
+Nonce.14 = 558c6ec09d4833bd1eb289a58d9a80e6
+PersonalisationString.14 = ee6d71f0bd0664ea86e4b04ff6e47510e9c4293247cefb9fea3b5cc1c8edecf7
+ReseedEntropy.14 = 1180c575b99d09c750e44fed756e755fd8b010bc7511bfde
+ReseedAdditionalInput.14 = 857565dfefedbebc2b9307795d8342dd374ccfec43bd454f7b922431e9368307
+AdditionalInputA.14 = c266019bef294faec287d149276c9bef20258c3ef06851c50b630f7681a687ed
+AdditionalInputB.14 = 8d8b34c301866213579e2d4a0ded89502c68373ea23453ba896f183c3537610f
+Output.14 = e53633d49fa56428c0812ed0e2ecbb8c973b91b930959aae4f1854e25b52fb10230b580d7fd01c0e54ec25dc4fc4415124ab5b22a00712d3d1dd01c093466f9b
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 8516a8788f6a58ddadedf8175aa289a2bc310c07ef0d0d82
+Nonce.0 = 5db7be3e068300b25bd94974475e58f5
+ReseedEntropy.0 = 423b9912e0e6fbef38642c46df7dbaee2197173352f15267
+Output.0 = c612ffdb9ea6e20901e8f58c180dc4d79b9a25bb51ffb75d7b4076f8f6791c232eeaabb2e43f309155e53810ae795eba667124a9f697f6bb356785edd9ff3959
+Entropy.1 = 8893593a21e2df41ddbd7fcee30018a69ffb2335860d18da
+Nonce.1 = fd1dc585cc195c10d7e27418ff2ddd35
+ReseedEntropy.1 = 3c236be2707e388022e7307e1ef4de387b3a6eb95086b2a7
+Output.1 = 3083054ea1e27687d8696b746298b3add9f3b56d7ac83fba75c472c3d5bad1bfd5c537e4211649f72beb0dea79f097c9eb13a7cef084333d9586663e0728b290
+Entropy.2 = 0ae9a60dc1f074b2dd86ba3fa2e329b9cadf7afcd94e64d1
+Nonce.2 = 28f3bb2c48ebe5829d31283024f70a55
+ReseedEntropy.2 = d0ffbaf462afe1fc9b5c459328036e115d4fde0d0b87e287
+Output.2 = 678285fd0cba3c39272f64adafc69707cbbbcc502643063b0cdafa32c45e7aca70ddfaedc656d743cbc980a185904697c4e4dd1a1026933e42598d44f3c1c99e
+Entropy.3 = 7d0efd400fbc7ae6afb8b085291f22d9d6f41290c087bd24
+Nonce.3 = 11a6a453124adee33f8ebc6885ccafdd
+ReseedEntropy.3 = 33d555aebdc8c52933b58bbaa27c2b46bbc6c59ea9c326e0
+Output.3 = e405984862b40e21f29678c410daff864ed9e70ab41fa30782a73390fdddc3e09e0a896f12b1c85e6a6688203ba8bbdbacceb50fdf90a0d2d58e881ac94b3da6
+Entropy.4 = 7fbebdc48463e3ff813588a108c288e06ccebbbf3e0ab757
+Nonce.4 = 8492b8cf8ab3620ade2728c306e07c2d
+ReseedEntropy.4 = 226d45b7d77cf74e9de74cb24749b926675dd8f9b3869455
+Output.4 = c56f7040ef814f244991bfb431ab18e1ceb6c7ab20cddb6e9cdb1d7740d6a14343d5e8dcca2c70f5cae2576ba575795bcba73679099cc03cc501dba6c97583a9
+Entropy.5 = e2e695343bcb5d7cbdedc3763d951551b54861558a8f3211
+Nonce.5 = 418739cd69cae50ec9c10357bf6ce08c
+ReseedEntropy.5 = d9362fce7bc48be437c9e9b670db331d682418f61d772500
+Output.5 = 013942701901bd4dde2e383a5f998f66f20f9ad575bcd572903a9d8ee30e22acfbe0f263bd0db02d38a99473fd7dc89544cec1c4dbca81bf2d739b2148f1afd7
+Entropy.6 = 1cd89cfc5597e809edf9e68a25f4411c9df3c3f57d7d7218
+Nonce.6 = 86dc6a4333fb03a89993cf5d369578d6
+ReseedEntropy.6 = b65e35a579bfc37081938d696327a92f02a28a1b60865521
+Output.6 = 2105537940b64a57021d435a1acf035cb307d24181c09d6fc67a73d6e36fba8a62870e726443524478a18d790cdebaf123f5ea882d3470c8ae3a1eb1dfdb4734
+Entropy.7 = 1cc3e8f1c33760c4a0fdda9da7dabaecab10d570c6dd6400
+Nonce.7 = 1b73adb66783bee024272b695b0e19c3
+ReseedEntropy.7 = 3bc148c43b54cb126a16e75da54f53897ec0a28ae589ac64
+Output.7 = 5ed9d651921f35118a6fd8ac3484f9deee2d025e0ba4800efcf48e5a8e6322fe4b49361801c77e0268e1c5e55be53c8fb5668c7a289670cb26b5a85bc53361f9
+Entropy.8 = 7219739f3e1f8c239cf07df899c87c79cb4d59e7b9ec8c64
+Nonce.8 = 4fb943b62bb2374ebee50b6967a3ac46
+ReseedEntropy.8 = 7557d7ddef0a0fa1d7b8ee1219f0a1be84dd0cab71d85b90
+Output.8 = 8b4ae1df4e76bc754dee8e64a0ae0d0cd67a628e604f8e285bcf0e081b6b3dc11c4f43e85aaaea193562e135cf061a71fbfc469b7f2c03833748de3285bf9c2c
+Entropy.9 = 6268c243d1c9094f63b1c45f4bb1c44f43ca28495494fd46
+Nonce.9 = 9fcdcb372d375441925d7d275b582d73
+ReseedEntropy.9 = ecf4a3162aba1295a335d5e002109c95ce2010dcbbd1f8a8
+Output.9 = 08a2aa608f79b3f5ee1713accde39149efb15041021fadc5ad2be4ca3b2ad824b32767c2eb35857bbf14ce9fdbdc301bd6ab51ec16e308d35ba94195fa51ee58
+Entropy.10 = c905f960654bc6317cc5bd6b32ae7961b0fe5eebb4e9e5cf
+Nonce.10 = c72baa07ffa45eb5666bbb01109a4f5f
+ReseedEntropy.10 = ee91c518f4da928b36a5289d350d419702857e243e62a9b4
+Output.10 = 0d742f74dc8f09c61c363a187948811e9a504afcb13d5e6f18e9f1905a05cc754008ac57e2fcdd4c3bdc536850831e7d1b2d499d95729ed57373caf0b41a559c
+Entropy.11 = 7f0af19f0947d3bcc2270ad8864232750e3a79073e54aa5e
+Nonce.11 = d0fe40374598d5ad63468aa06f92c503
+ReseedEntropy.11 = 658e55215a906334e6b8026f6fc36575995001c9dbb8f890
+Output.11 = a8ddbbef58ddeb3bdb923b64ae8f43f0aa3ffec303c04d0aca8ecf0d4525fed842155dfe4638bb0892087f8f7d28b128296d62e98a51f64932462acb6b841a82
+Entropy.12 = 0b8a7f72c3ddc63767d3368059853b2cc3d8309534d44c31
+Nonce.12 = c5279d2522cb770a8207ec2d384f7ccc
+ReseedEntropy.12 = c1104427c197bfaf5d4a1769fda012eaa2f54e94177a5ad5
+Output.12 = 567d3c406e827e5c0f438a30417659d227f3ad1020a5ccfdaa3e64cc9fcf6b0eedf83b9f1fbc525140bc60434c0c02a3ce5482f1aff85f30c6f98dea4a22edf4
+Entropy.13 = 0097b544374041cfb45727bfca769c7586cae52c8b945c18
+Nonce.13 = 0e9059b8655056f9c824180fe107ab55
+ReseedEntropy.13 = 03ddb3e6f27342538d210b02ce2bbd420a52d3142a69b0ca
+Output.13 = 7aab29b7c40c29c4fc71566b3f9f6ebc37ea8cd9266d0c8b4d50d81b07959c228e0d96761aaa916568ecfebe6c7af3e9c02c5564004f225da91811c5b761419e
+Entropy.14 = 02e103c5dcb55e065e50f7f2660283b0e30872433cd36620
+Nonce.14 = b2f21f7a101195d4a2e7dd7353773ae2
+ReseedEntropy.14 = 95e4c2f976931cb5036fae1d4d58384744c4ba3006fab366
+Output.14 = f04955bf052cd18899a448a25079bc03e3619c44448fc55b6e6f04c9872480378130d8d2ae353ef255b4a9f536c962e2da01fa44b7d9d34c3faf14b7257a62eb
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = f0e217214a4b7f8585d5244263859e645ce01e76eb7c5553
+Nonce.0 = d1d4dbb0cba2f0b0396c4138e4321e61
+ReseedEntropy.0 = e3c7493ddef25d62818c85619c3b383c5b7e968fb6043cb1
+ReseedAdditionalInput.0 = a97463fb3037ceee5ed22fda8f59c370739089e89fddc24e79f03822032e1993
+AdditionalInputA.0 = fc62d7cd9ac13977181120cde57c93a683922843c309343c9aa8c6761710b411
+AdditionalInputB.0 = f6b9b01724daea70f2ced24bed572f611008eb9e0c21d90286971713821c75e6
+Output.0 = 9597e69f09d57785bf83b5db3d042ea767604244190a65765dea8983415fe8842046b9ab90008ec68a3e4c8bd3c7a4ccbf7dc688ecf0d12e53760dcc9df2664b
+Entropy.1 = b15a2ac54b2b7c0371af00cafc27d8e1501dba2fe8a26f40
+Nonce.1 = 1eee881de437cbcf27738d7c167d123d
+ReseedEntropy.1 = b47e4299526b93f05f321432be034599fcbc12d4654a97b8
+ReseedAdditionalInput.1 = 365634711576c7c8707b26a3675d84db8d79a9fda6995da20dfa1afae0cfe4c0
+AdditionalInputA.1 = d4e645e2aaadbcbf972f552288a36be9daed48833795e82b8dbec45a84681d7a
+AdditionalInputB.1 = d6ca414b2790593323e1b1f175c60ef214fe6b045c9c059c99a4f71bcb6fc331
+Output.1 = acbbb48228c9fac4ab9946ecb77f830c0c38dafe95ba64a237d786bd144635c81f5207c0a5b20d56b559aefe53a4bfb8b23083e7fa4f5bb1ddb5097755b599ed
+Entropy.2 = 8ef456812c1dd664f5d6e68d333416283d07fa726fb7aa11
+Nonce.2 = 41a4e49b5297216ede17283ab158f6fb
+ReseedEntropy.2 = 595e6ea06672aabff89867c266e138840ead1f8a3eae74b9
+ReseedAdditionalInput.2 = d0efd9f75f21d2a3f4e93f5efe4f285b6e33456b3781f08095f8855f1a43a46a
+AdditionalInputA.2 = 440cb68e0c9d6db8b91e8a3e32e4b47dd1bdeae240fa6c1812acb5814e2468b4
+AdditionalInputB.2 = 5b27881c735ea7322db03975054b955a2e995cc0d3ea3a982a03b8f84f6b9767
+Output.2 = 77f903a40beef1f92abebb58f5e1fb508239103aa863e0300591e5c58a9680b57e4668150d553d390be059a2c6dbc9f7e25442c6abd11768b1178df9934ef6d9
+Entropy.3 = c9568142404f28a2b2ffe183decee1bed566785aed71420e
+Nonce.3 = 14ef70093327884117c0183a4bd54558
+ReseedEntropy.3 = 673a9f7a68ee4201c2c4e4507b23c50363ade2c037063c40
+ReseedAdditionalInput.3 = f341c1c55a40471cf252396fc65a90afa664d993eec4c03b4e54bc0b12fe00f5
+AdditionalInputA.3 = ea209140d930083242fe4a2f7cbacc0a73ebdd5e73771b9d9e1bccf7a30923f1
+AdditionalInputB.3 = 05eacd560d537f910ea2d9c77f169efe75a06c06e435dc3cd9c64d50eedaa9dd
+Output.3 = 6b40ab76f10b30383b2c98394f2695ba4d2ecf96148112ca5e3a2b2e00c6b0cd051a447fe19d32b48e2e1a89b86b48d52f05bd26d28c2426b0e57a761da831e6
+Entropy.4 = 5b3e48456cad2bf7882ff69bdc2c3b38e2a9858fcc375877
+Nonce.4 = 124ef0afb66b6e4197ad8714808980f0
+ReseedEntropy.4 = 55b852c8eef9fab4f0b2dbf23ae72a7c24c97ac76f802fc6
+ReseedAdditionalInput.4 = f70aef2e5b2a95fa78d5a4f545c341b54832c9d9c91abf33f946eab8649e2ac3
+AdditionalInputA.4 = 78252eacb9815e933051f5251c0739b85973924b1734188a9a59cdd48a7b7d8a
+AdditionalInputB.4 = 8e391f33d6bbca154288c69c95d8a55a18a4e00d773c88f5044c184d7e160bcf
+Output.4 = 592077a6bdeb539a7ff9681eb860b8a39c53d5a41204a8e01a5a8ac31a4088efeb15a165a5d9be5bb01a0ab83d5d46d3987137a63bda382114bfd1502eeb25ab
+Entropy.5 = 1255642a14c222a908c7d6672f8cb6045870231be7dd6cf3
+Nonce.5 = 32707c7dc9d0f81754ddfbb3970f5b9f
+ReseedEntropy.5 = 08c8682adb948ab0b73b3e7f1aeb72afb77c594ac4e03a17
+ReseedAdditionalInput.5 = d09ea03b81ca3f393748b1b086380970dafd79a36449c226f7d97d8831f56b96
+AdditionalInputA.5 = cb085f55a5e5746ca1241fab16b545c537b8f5e0fe8db7432e1083da0707e143
+AdditionalInputB.5 = 83ce1cd0bfa5384ee87472fd88fe87bfe1cfd20f695e0dac035af84775f9fcc6
+Output.5 = 8101d98b42af973ceee81f8ef36af9aa41d7aa93a9fd0e3c91cb9a8e6baae5d073596e1be2b92bd302f2501aed36af2e4b2ef46ce22a16cf8894045d892f6f1d
+Entropy.6 = fbc5793478afe0522e2f90879ba8cd0c2b2f2d4efa4e9474
+Nonce.6 = 6cc1cc67325b900d0624e2793ec35e96
+ReseedEntropy.6 = 508e1ab755b026faabe73d354507b3495a1d6de1bbf49911
+ReseedAdditionalInput.6 = cbd2f61a84c5f085ee5bf34e1ff751bcf33a047838998e0eb04af0ff30285c45
+AdditionalInputA.6 = 4cae131d3e366185b8b1e4caa34faf28e359f46ed4f36bd9072aa5be936bc4a1
+AdditionalInputB.6 = 437f31f2a4b3f546469df7260a3e5f05129516a84af758e759e44831ed132e36
+Output.6 = 656da512323fa8261708cfc971cf7cf7afa8cb419ffa31076967c5e6629a2490297aeebb582a05b2b6678a82d8a41f24672d35db2ecac4866d78118a2421283b
+Entropy.7 = ee379f3cc9908429446bf22b7ce1b5b946eb2b16dce509d8
+Nonce.7 = c396d83d90b42a67e4ffea011c379d26
+ReseedEntropy.7 = 524c96989ff430b14241ecbf5d237bb0d9c561076eeba421
+ReseedAdditionalInput.7 = 4d0eb18cbcc7883a07b99997adcaa5c1320a24050b4407d7550c9ce6bbbfbf56
+AdditionalInputA.7 = c9e85f42d72b2f348e723ff267ca8a37ecf50706a75b36b7c645852c0d002e71
+AdditionalInputB.7 = 3ff6d957ddb1ed2713cf3d40698fe88a62f536b3f8fd684fe01da3c32319c1d6
+Output.7 = bb1c04561064f8c729fd62098a32516bc47298869e426f49d52a269b744d823977eaa0a0ea802fb08edac6f1304c4dbe5e1712d2bb88b6af99579dd4bad47837
+Entropy.8 = 5c0d92a3a3c7e310422175090c749973c30f83ec2de79a98
+Nonce.8 = f48e7ff74b318f6583beba9aa8bcb79e
+ReseedEntropy.8 = 37f91fc9431eccb2a062bf78d314aaddfd2ce25f32d37e32
+ReseedAdditionalInput.8 = 77f81befdffdccf983783a6b70a8d8fa6e640a7476db2f283f42e049855005e3
+AdditionalInputA.8 = d0bc32865e0475d0bd77a38c2d9aa7bffafdfd44bcc133ff1ebd56dfae897884
+AdditionalInputB.8 = 2270a5d71d584f3aa0fb2eaf6999877996aa1d03c0e88fa2ec63813be6391ab6
+Output.8 = 2f4dca3e8e580e5333dae904436baa80b7a9b95f024a48ac8a3f0fec2b38c10805a38e84292720bfb8adbca77e9ccb7abbd68e7010fffa351452d337ba421f61
+Entropy.9 = 4f43ad1bad3bf928eeb01ff9956cb689bbd6ae70dd5a0849
+Nonce.9 = 8e11ecb98928075c77857fd44848c300
+ReseedEntropy.9 = abee57c4f5c8e3750864fd56d153928ff162140e6a4a3ef0
+ReseedAdditionalInput.9 = 75593a0045b2508360a904be270e381b439f5c58e5d6dc80a45fb176f8be2e9e
+AdditionalInputA.9 = ad68adcc9fe681d2e5ea02bc025be792885073403f79b32a15b9e9a3ca619f89
+AdditionalInputB.9 = 203409af2d63c0898d8aad3e541571cb36316ee2806d262b2dfea63e65e9e5f1
+Output.9 = 4dc0e68c07b2cef2450883672bd5716de88ce94b5f72400fb749ade2f4a5c6dabd01c3d326c7a8ec4ba5bcb33cc45c206498e145ca2aeafc5b426dc165af33fb
+Entropy.10 = a44a50f5303a770f1b5873334e7c7d42ecfd8377782355b2
+Nonce.10 = ab866925757537a18b57557fdecffd30
+ReseedEntropy.10 = fc81c0abef73ef4b7bfa3873f0dbaeb9ea72ce6fbd235f22
+ReseedAdditionalInput.10 = ee7bd667b38e2dfd799620478ed858a321eba28d2342c27e5afbd5a6ac89635a
+AdditionalInputA.10 = 5611fd323952599240eb28c51c4ef0f3fd508eb459dc652adf17fd19e7c2be66
+AdditionalInputB.10 = e1ac2abd693ef6f1e584a5a793fcb3d23a388efe75025a8652c54f99f6e3fb5f
+Output.10 = 0e11bc63c86a9396fe206a73ab7d6ddd83be9b67a94527092924f1f8b22954b9a4b42854a1e9581614004620577d687775657a8d33ffb3ebd6f7542f421a757a
+Entropy.11 = 5b91580f90c706ba39c3845e26cc7e3979356cbefb1166c5
+Nonce.11 = 04faa19a8a1406eda3e2280ae2d1c78f
+ReseedEntropy.11 = daf14493f42f75b70cfeccc76b9554bc7c5a9d8116e88db5
+ReseedAdditionalInput.11 = 93c629bbb98dfd26eb016ac4c4d5c2dd1b37db626c2161ada7fc47ab77089ba8
+AdditionalInputA.11 = 96c601d4824b37e76cfc1a7179c65e8c96fa42f3c1ab6a56469a18423efa45c0
+AdditionalInputB.11 = e833c47ff98b521b2b1bf623794b95fea73b81b3de0b178c5d1dd316d564a0ac
+Output.11 = 39b27f3536b93adf14785443797b9c1c5929f0d7920ca2932580e2ff0dcae3981dfc86c155f138ac2b9c638a093b65e9e3de715535cf729e4fce4658fe350c6b
+Entropy.12 = 268578f14df320002e79d1174d281ceb14349e0da1e72356
+Nonce.12 = 75cf7e7b84a11ecfce106468adc28796
+ReseedEntropy.12 = 28c5642a8923e737eadd24f0aec08977201d08caa0c24327
+ReseedAdditionalInput.12 = af7b0e351d2ca795592b1cad167ae3f699cf01f0f1d0cc8cfdc91482d3042f57
+AdditionalInputA.12 = 4726eb119ca62effe205990b943e8bc9cfd493dbf317ab70ab966b8d2257aef7
+AdditionalInputB.12 = 8e35ac0431b9ea89df698fad94573cf6aa962aca44091ab73f6ab0c15f9f72b1
+Output.12 = bd97f149f8b60fcafd1648587f65623ab9e8c7e5f43c965f695ed730543a6efa58bb25387072a5251a7cd3cb9210b2a798573935c74154a9a77f418b066a6adb
+Entropy.13 = 06650e55f21436ceea530615e143575ef59e0fb6e13e1b48
+Nonce.13 = 870b65af36df39cc204cd32bd0962420
+ReseedEntropy.13 = 7b2c199cae21e4a328ecee6b8f2b8c28630e3c390f401ae1
+ReseedAdditionalInput.13 = 29ba0b55a4f2ee63c858615fe393e6d704d04588f51901d575f6247cf52d69a5
+AdditionalInputA.13 = 7c34329a91b1d15e8a2f3352f7cc1876ecbdd66ead5c6d9dfb6b9048bc7e20f1
+AdditionalInputB.13 = 4e75788492aa55f632d59bdf96b64cede3cf1e9f976c43ec7a3258c68c0e0308
+Output.13 = 8ace58ad55df744d2d19dd8d68f29674c30baa5aaf4dd6748624acd63ab0a8dcd626fd94e131a100c15815ebc056972f80b338e5a9f622cfb159c9f9e3160046
+Entropy.14 = 46b5b273b4464d53aa43baca413cc9daa305e9d9889cc28f
+Nonce.14 = 23d3ddcb8ad9890cf4480e84cb7a1bf1
+ReseedEntropy.14 = 437a213dd1a06c1ac5069d55c0b21aabd723f1fd84e45a92
+ReseedAdditionalInput.14 = cb242d02dbdb8f93673735ddbe4513c3af98010f82729b2ceed08fe02d390a39
+AdditionalInputA.14 = 73113a6bed92935e4b6c58bb788ea62003383741508ccfe9fff14322870f198f
+AdditionalInputB.14 = 129ca535a8a9eced5aa8c0c96a018aa1a860648a5fc2c5657a49dab7793154dc
+Output.14 = 037a2b9ba13be212dbe8ae28f4aaff9c9b3635edebe0ad29bd13ff6420f97904324549ba247ec3d5764f662367d9494977e2f9eff2a3aaa484395a9e9e5b776c
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b4b05ce9ce074183a306bf07eed684bf065ebffad9758451
+Nonce.0 = 733a68b1d276f154e79b3dd083d2278f
+PersonalisationString.0 = 9e884facfb9e9d4003471d762be01247fbcb18d9084973a2b833764d715c0cf8
+ReseedEntropy.0 = be9003b06e75265c4fa54c31f6f5bfd21325e124fd541769
+Output.0 = 38bf4694717062ef51121bcdf1dc700ecc1a018a2da407417a8f6311f197e7da9c7b4a300546a68c4a393576d1512e277375a0e05c537577867c937062d70fd7
+Entropy.1 = a4f6fc1a3dfecb1377699826b8f4b5129e584bf8d26b3a82
+Nonce.1 = 47f7a55a783870c5cb621d67387d6fdd
+PersonalisationString.1 = b016db1c111f203d108496dfdc799ee2ece6d7f56c8b73c9f5eb24e188a4882f
+ReseedEntropy.1 = 35b7e715ceb26be75c230d442ccead39c9ab941038d474cc
+Output.1 = e475262f8f34b0d23eaa753b0cdfe5f49bb54216f89c7b73cbd5b4cd8c882cf9f25b4059e39872c3a79020fe44bef20a39e3df165e0b6e169ad46d89ee3afa0b
+Entropy.2 = 2c84f1a79a2cf4fac8740ed980c65732c5b257bb1c2cea36
+Nonce.2 = 40f1fdf6fa5ff03766ead7b71bcb44d2
+PersonalisationString.2 = 4f8c7b89317a92fae18b6d68f7facd601c4d4dd539c3a9c3ebe289186ffb2f22
+ReseedEntropy.2 = a65ba690cf9ba574d010552b7b3dfd388b5652f3233dbcd3
+Output.2 = ea068fb62d2f78b1b4b1925181a9f613964a17c3e1f8a9ced2a96fa377123c01b7f784774e940831c1f52dc15aca3bad24ace3422edf56dfc8952db861388322
+Entropy.3 = 263cb0780082abf9f3b37ff2b8f810db35f970f4749e1e4b
+Nonce.3 = 436558425d3a4326aada7eef7b13c1ba
+PersonalisationString.3 = 30c82be25ebacba224aad9c8b7d4993e7bae908205ebd11c19f1b35b09d06af8
+ReseedEntropy.3 = 63d560f8a0eeab76ce62a16d125d392a36ff342b034ce8a5
+Output.3 = bbb39eaa24a98417b6afdcd56d1541e30545a9444cb7bc6649e9bb8b4b52bf3a10a7a20b5bda1e7640fa15ce0905d76ec492dbf3b3746589694acc2ede36b296
+Entropy.4 = 54255d158832501721af074f1a053f04c717c938c3226d7e
+Nonce.4 = c8b9451433a29e92099982fe6ba9955a
+PersonalisationString.4 = c26c8dadf21051bf82bbd09d5a4550da1e90fc8d3b3bfc0ec2ca55efc5ce66ae
+ReseedEntropy.4 = 30035fa0ddf9bdbf2e09c69260ec318ca3e44d6080a28b7e
+Output.4 = 84d15784b02087e26226c663c5c86d5f0617a1503010920cd029f7ca91bb82b6633050139eb423b86f2924d50da7787e1e47da02b8348591b7c7a7c61dbbb8f5
+Entropy.5 = 253ffdfad4165e6e3f00b9735350a9e17ef2fa1a048308e6
+Nonce.5 = 77b959982f91a2f521e7e8c25550675d
+PersonalisationString.5 = 16435f2ab0ef6ee1a16f9ba15ab5cf2641ab076b37e6421aef73380b4b896991
+ReseedEntropy.5 = c069cf7c199146baa67e5d8023b562bde6185d3dab781211
+Output.5 = a58d58c99043c0e257fee38efd78281296d468bca2a91918d817d31b00bb52930879141de24bde701d8376e8ab07e843cd6c4e334e5bd0c36f92e38a19581992
+Entropy.6 = cfd16ee953aa4989a208b9fa8e0044ce2e4ed6d672d182fe
+Nonce.6 = de8e91e65814569ff04767aa75db6bf5
+PersonalisationString.6 = de223d6643e233190ee0218fef6305c142d2feaaa0abd6ac7c8bd895a00e9172
+ReseedEntropy.6 = ad5a4fb9e03f8a51ab238235ed272798be43db4217a5b363
+Output.6 = 1d59821954c5c4ad2248e0593eab775cb208a1887becf9cf93ea2b0258af6e3705b1d7227a1401cbcd3272edc4cf985a05c345492d1bb9e9047bbeec7aba2436
+Entropy.7 = 36d2236948400dea19142dd1c53c3e7db7c3bc7ef3b9e275
+Nonce.7 = 90a5b91030cb2537d4bcbbcec6cd4386
+PersonalisationString.7 = 7cc51d67304005b5231c3a3ad3bf144eb6a174bf1a0d29ed97b887cf7c00c3f6
+ReseedEntropy.7 = 8307c028001269452b72b4134d853416365766b8b8c27eea
+Output.7 = b64ccba08e5d9700a6c7be681485f67cf1b2eaa7a79fcc0cab39d3b268e366147c9542d4446fa072614fdeb50e748c2fdd85f4d516863aa8820f69c070761c72
+Entropy.8 = 7eb189f1bcb547d837b7553231325b4ddae1ea87b938b0c4
+Nonce.8 = 9d2dc96e33373f89e4da9f5ba17eb1b7
+PersonalisationString.8 = 1c56b2a0253409cca57383c95712bbabd5a55b329987d1bee5ff8237e7bd9e70
+ReseedEntropy.8 = cd9b86c1b8b82c72f7cb2bb940ee3189a2554187dfa8fdd4
+Output.8 = e95dbf39d1482bd03a57735776ddb318e0f9ffb0ccb513607de3863b4fd0fb405e74d28b2ded6ee1972e2ee89a09b6641761fa18a2f6c123aee9f7191efe528c
+Entropy.9 = e061799eb8a570f6de95ba5f108fcc1d2c9ea16ccfc2bece
+Nonce.9 = 87710326b978b2f4343e2670b451ed31
+PersonalisationString.9 = 27a3a92910368da0984aaf3c7e315bed2b6b193415d438a37def8f2ce542a323
+ReseedEntropy.9 = 3f3c153dcab7a008566c25d3fa71bc7104767c1d4ae5ca02
+Output.9 = 6b75481f70da166f3055391c705ff6ec675dc912253a5de9f661f68adc097c64334616839c67f298aec4104b513f4970e61dcf3040877331c24d87eb091b9d91
+Entropy.10 = ba8ca361ab65b9f156e8dc5d4e50c8ac4c7876cbeaae09ae
+Nonce.10 = c216c9af4dd9440ae5191541b40b1d6b
+PersonalisationString.10 = 25adc273f5d83be27023352b7a78bf0cbdaefa76725a45aa9bee06137351d24d
+ReseedEntropy.10 = c7e36ae23efe974b763ee423f214555923d66feb9aa174ed
+Output.10 = 1fa1ced6b2f209e430667cc111f2978139360cd4c5267a66d90239a5378149d24783ac4277265f38d440cdacaf479bb734bb5a865b3c67c496d3642337addabd
+Entropy.11 = 0aa924d323a39246224f4a6be2b637e206c6cf2cc2872045
+Nonce.11 = 0c22c26296517bb99dc92c6d16dc058b
+PersonalisationString.11 = bb1ef0940724b5cf38ddb6cfdca86cf22504620012c27beb65c41cf790294595
+ReseedEntropy.11 = df350b7f1cc53bec3eae292dadb7569deb21eb345c2e1920
+Output.11 = 3e598667b2132e8030ce4cfc92a5b8a750b3e719a101b873a57a17951598528c1aa3a8715b638324ea00a4725ea83f946a249fba6f3620b7f1bf22ff7d092de9
+Entropy.12 = 38ae861a0dfa5fa4bdb441b1b6891a6a288e53b4ba1128b1
+Nonce.12 = ce4104741c21aec839b336bd063e5b31
+PersonalisationString.12 = 5e4a4f9bf0bd36722b456555bfc2044c4fc43ff28ecf7e4e0df3e17ad102c7ca
+ReseedEntropy.12 = 4061a0d2b11582fd4bc2a900b5f380f919d5d32af46afa13
+Output.12 = c85da524498a8b6eddff399864af027d935ec002eaec2c8dc75b1b1d849d461ea6dea80e915a75a37c5c4678074465a9955cb9f07454b6379cb1baf548e92816
+Entropy.13 = b2babc188aba0df48f9ece462bae4c20fa60bbcc76c77edb
+Nonce.13 = 39d50f4f3e9c19ca43791213d1e4abea
+PersonalisationString.13 = c01a6242d79f073e112c5ee6bd4a71a1259b2cedd75c5cfb82da2bf1c050e402
+ReseedEntropy.13 = 8bbc6d754ad55061252a2b535999f1b580578636927e9327
+Output.13 = 22da3f3c2dcce7f3a3f33129caf2271028424d72bcbd75cc81863b24f96f7501e70bcb5b254cb4d2ca480c2c649d9e8947c2537efedcecd5072d57fd36b75481
+Entropy.14 = ea1e0bd51689f2d121eb55ee5272b6fed7b9ff7dfa8c1f11
+Nonce.14 = 31aa1e8f81acaf884048fa056488902a
+PersonalisationString.14 = 2ac2e898b00a099612f685473822d2152bcd8f77820a3859b481ef1dfbedabed
+ReseedEntropy.14 = 05c7b3fcd858bf5080b7ec08b64c20fd3614d25d9b6f4d1b
+Output.14 = 4397f38e54a15839af1d7f5b190b9f122b1e8534d1d74c53293e9f3727374c2c66ba78488929ee09991598524b14ed9800217d3cb2e02edee7f8410422e36eb5
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = a9b3bbf19c1d80623297f7c50e9deb3b6cc497d18c48d244
+Nonce.0 = e0aa9a803e296e3f37001e77654e2339
+PersonalisationString.0 = ccefb2c8bc0dfaa16c14ef3c9d98546e476658ede3f35621488f1d03ad490633
+ReseedEntropy.0 = cd2a7104da1b303011817de73e83e46c6ef893952fa92145
+ReseedAdditionalInput.0 = b9edaa9d7db667066ca85a461991b781bd877cae1200a47ba089bb8165fbb95a
+AdditionalInputA.0 = 01c5aeb25cfb8f31631f6e7b69b8449845034435758b9747d3812223709a55a5
+AdditionalInputB.0 = 930ebe68b02f331fb1a9e7e5ed2fd0334b45b50313a614eddc06fd6780492de9
+Output.0 = 18bacdea0c71dbea09485ad0b9210daf6b175c8afaa7d6158fa74e5ae370d338216ca027574786d414f0ef87b418c47fc587a01e578d8d416f8020a445e20f3e
+Entropy.1 = 083531412b219d9d1b0848bca35272ca96d49afd4b0b5c8e
+Nonce.1 = 5c8ffecfd65b9ca2a4286ba44138627d
+PersonalisationString.1 = 26c9a7b2f15a590e0e92a2708bc306e68750476e9626d542f1577075f4e594ed
+ReseedEntropy.1 = 8513b32eff61740cf9d19cacc7ab0288903d3f1886f28534
+ReseedAdditionalInput.1 = 0f1f76a1928e49076be7f02f70312d0ac5224987d0098d2eb3a453e37a0d5f7b
+AdditionalInputA.1 = 1bd80db1d740223429808c1e09cef690c38faf31dc3bf29494cef34a74a68972
+AdditionalInputB.1 = 19b36f9075b10e9159a89954dbc8350a722d1b2114d0f93afb9bba0cc5a7459e
+Output.1 = f6e84c6e1653e1cf38d3ddac0c02be3cbbdc0712f7f79e159bbc5019c4196aba1333d34aeda794a86622f5b926f4ce929de9d8ee046043ae4893f67c19572bf7
+Entropy.2 = 89e582558a26fc33d4048aaca2b5ba4d7c0fcb70a25ad754
+Nonce.2 = 3fd2d191d966b0d553d14ef3c5135d35
+PersonalisationString.2 = 4b68da99c5a995f4a203a8d1c8dc85a2cd96da5dd66a8fed108d213e34720725
+ReseedEntropy.2 = 84e588a5a595ab01db9cc1d05f932cc42d623f7eff596651
+ReseedAdditionalInput.2 = 587f5266b6d72843557494decfa5f7841428f896c65046bea9468115e8ebccbe
+AdditionalInputA.2 = 731543e0d0b3a913e01383054412250a267b991741b5e83612bae7c6234da3ec
+AdditionalInputB.2 = 6faf161ba8e1d6a65a21f50620764a28db128a55eae92750f5eb0749ab2a5ef5
+Output.2 = 15913065133ab31ceb6cb6d073db1b5634792da460673109716a3f7633824f62d740bfe5059ad3a9911ee2df27cc22661eaa0081f075ea26353c634745014e0b
+Entropy.3 = 05106b71aa27411bf51dd3862c150db356c9736233d16f64
+Nonce.3 = b1960f1005f20d6ffd10db51dc289ecd
+PersonalisationString.3 = 2979474c0799b35f94da6813b2644b3a79fa83c6c3da5fffc82f4e0f661ed92d
+ReseedEntropy.3 = 52ff4430bf265932eed42c8c70ebdb130500f8111a29fb5f
+ReseedAdditionalInput.3 = ce4840a65ab3cb9742b7aa582e428f851a70d18dd916de63647fe3fa2bd92994
+AdditionalInputA.3 = 4d6dba3fe52098e4f570124197486d8cd9c606210f4f212e98b45f104acc1772
+AdditionalInputB.3 = 9429e510011bcdd1b43a8b841d9a75f14c6655a5232ef08477a54ebd144883fc
+Output.3 = 6a7fd07fd4063fd6efa3597ad8b81792c79e748e8ed6cab009e4b841d988d97257ebe025ad5619e1dd9dabf1ef1c59a4544990e0c68193e59c28647bd696a9c7
+Entropy.4 = 0c5ec7881cbf9957e109d8b976f82bff1df2a945fa6dae0c
+Nonce.4 = f18ef1250b608dbf067cb6abee216b67
+PersonalisationString.4 = c64fda600e24953f36eb53058905cc2e94a4e661e1c54af9f8b29f48a96c69fb
+ReseedEntropy.4 = 30df03d1a32db7a74c338c80331b04302ede616dfd23053e
+ReseedAdditionalInput.4 = 27409830b607cd33520666dd291c3dd20c38bed52999c16fb72877c5954e94e4
+AdditionalInputA.4 = b1f2f16deb47a7290d79251c4aec38a05db35496fc498929653db540d301f939
+AdditionalInputB.4 = 918db2c31fd40d06f074b0f92a1327f81d8cbc47d835b08a698b083e5759dedf
+Output.4 = d12239c30a44582ed058f2b435e075ba234169dbf30270d75d00ebf38ebf32f5d433ad1bb8d8ae2b153f6f3fbfed7494f5ab9a9c19256c4b10a9fccb28298287
+Entropy.5 = 133077d82c26f9448a28900fe6bade080b3816c3f8c898fd
+Nonce.5 = 68725745960d174eef8a762bc87c0b9f
+PersonalisationString.5 = 459b7a154d7a66dc787b89e5db981c690e95d311d8a168c4d26c4878902664b9
+ReseedEntropy.5 = f1ea44f020a5572ade8a843fdf1e9c4e5b0a067756670c1e
+ReseedAdditionalInput.5 = f373059638dcb7602a3088730ba00cb3179076a27952d465fb0159f46a191791
+AdditionalInputA.5 = 204c3b20ea88281b5c7668bd474fa43f61921f702ba6df17616ad6e9eb149045
+AdditionalInputB.5 = a004cd5d294a4a96b76b689cc777f4f63357858d7e512127ca9c6e9adfbc547a
+Output.5 = 705af2147b04248b0b7cd17b5b6fb891f3b1a8420e253cc70c42f8b3ccf779cc128ba009581740d80d2e4cfae6624340efe1a6a920c29afd8af63cbe0f667ce3
+Entropy.6 = 0509df0708544e7a575b3d5b9e07b49ee93519fc33e08f99
+Nonce.6 = 02c866336ffe75df647f5c5f81a1188f
+PersonalisationString.6 = 3ddad3ee67d06414b78825fb0e75778ed050db006bef2b0188d19a1562ecb415
+ReseedEntropy.6 = 5638e2a22e7b1ab20af27d83de26c3cdee625a811dc75079
+ReseedAdditionalInput.6 = 41fbd0aeed309666b073afb01411b7c462673db9202637030142327ac109256d
+AdditionalInputA.6 = 96c17e3c80b0905713b3216dd119e9c0b5a4e88e55a201b4307b0d44d1f7e24c
+AdditionalInputB.6 = 40905aced987181f0c5e3bb4df7ea9990c87ccc587370b9237cea65f80378627
+Output.6 = 7f68ae023799a328dabe2b18225b510b2dbc89d3fd8540ffc24a41906703b3212bf810090d6d2d0a5366fe64bf8ff4f876697b7bf8099767853bedc3f37a3495
+Entropy.7 = d0dd329f934dce8bf0871601409c2e21cbf0350304d3a79c
+Nonce.7 = a3a04c1644d1ba80eafdde17c44e08dc
+PersonalisationString.7 = da53b00d0af564221e37cd681cbb639a77704b376a598e164b056ca1ae4c1c50
+ReseedEntropy.7 = 2e50ffc1627593c255cc72a998edfc9067a31eee74fdf0b7
+ReseedAdditionalInput.7 = 314d8ea4096970ae48d32f402b0cd75eea72ca463da305752eba67bf23f083a2
+AdditionalInputA.7 = ac237313070a9806034be9db87994056f66ab06b000eee7d8e1dde9eac24f898
+AdditionalInputB.7 = c245ee9ac60800b8f3d13515c5102edadbf373e133ab8f81d51a3ce6e2268295
+Output.7 = b2360870ea54d6a240372b7ed82b25b497897bdc5f2374640d06f22e2ae07822f99a768fc95f508493241f573d5f865e8780a3b27963e2b45100aeb71a38332b
+Entropy.8 = 81889a65458e06f448a616353e1fcc5f82dc1bb74b5541c7
+Nonce.8 = 39043144b45feb3a3a4923ab33646a71
+PersonalisationString.8 = 3df63771f9f40479d12a1f246ef6e6591b18187ed11dbdf04f1fd450f0d21c38
+ReseedEntropy.8 = 62b140dc4b7d685d82f74cd133fc49cc0060c4ebb9f1f6dd
+ReseedAdditionalInput.8 = 0b331bd38c943ab11fd1a2eeb5635ce66d7325f261f028953c3b63026312204e
+AdditionalInputA.8 = 13fe4d0902de136278b14ed77494798444b3da6e03edde64b0df11e29b25cfcb
+AdditionalInputB.8 = e80f4a99014a520d0d4fddcbd9b73811103cd98e12e10a692d454f7c245e5ee9
+Output.8 = 142d3dc20f1778378201b3da58ac7f32a05aba7d91aec755f32ef3fdd80ba2ea3110cd76b7ad3c54c78d14eda634c74ea83b82f631f4cf01754a58334ea9316e
+Entropy.9 = 03ec84379944aff7e0adb08c9291127ed37ecb05a3ec9e39
+Nonce.9 = c691d7435431e1d811e4a743e52b7135
+PersonalisationString.9 = d97f3fd86ba412dbe6d4bae7ef32b4d106086adea3f4df74c56f65e2e48209db
+ReseedEntropy.9 = 41d886d85227786a308776ad7ca529dd1f3e9b7c4c09a212
+ReseedAdditionalInput.9 = 2f3443eec29c512a55770c4ca6a3f4637fa94152d74caea5aa4bac9d21584d22
+AdditionalInputA.9 = 3225470b5b9b5281560389de7a7e3fd53149c5aabf9407748778f6de9bb51bf2
+AdditionalInputB.9 = 4ba59a6fb87b8d977c6f92ac3c623997f78a67a6a05f0d151922da692609f521
+Output.9 = 14c693c37a433e2ca16f30b417abe565104b41898d6acb75fc3e866608cbe512acd856d0efb2cbbf82e8e93101f03366a78688e1443fafdcfd82e5857a8e51e6
+Entropy.10 = d2acf08bcc40e9dfc59a6406fc4e9c8b7e00740d589b98c9
+Nonce.10 = 6023284ffb138bc59491dd9937441dae
+PersonalisationString.10 = b9c75334669df31c8b6abd9d25c40fe315adfad4c43b2f683e0cf2673359d67f
+ReseedEntropy.10 = 4a8940b0180d216b6350b8b3ea55a1f2707fed06e6723e42
+ReseedAdditionalInput.10 = cd9de00b55ffbe8e02c831c298b3c13a4cbc4c3c6eb7b2b6258de7c2d95d4d9b
+AdditionalInputA.10 = aa3754c13dde616aa4621fe08bd2aba25087976703939c71e84832debcf39864
+AdditionalInputB.10 = 5206e71f69ac988e7092ccfdea6041ae1678ab21607760a85f4fb3c99c27a15a
+Output.10 = a27f4351f8573387c1df57f20b75c1de59f8bb42e27fba731cf608e749a76c4dd0904e2d13723fe5318d9b69f1020362ce23df7efe2c023cee72fefae04d1d82
+Entropy.11 = 1b03f6895505653de5b34c21ac40b5b9669a9db138887900
+Nonce.11 = 3c76d7a2ae122050886d23b6f53f6d86
+PersonalisationString.11 = 234ade4d967af7df54d501270cbfd658d1c96dee79bcbd4ce5552553b113ef05
+ReseedEntropy.11 = 0e240b436e48ebfd50b2e00fa2d5b4e04976f7f894a1df4a
+ReseedAdditionalInput.11 = 9b43b734d711985f69900f6a0b09dc9f8eb00af4e54f7f5b64ee095bcadd2c89
+AdditionalInputA.11 = f91d3ab7caeead5e2f29adfa0fa970c37a96d633d9dc42e427197d121e345805
+AdditionalInputB.11 = 3e97025915a516b221f627983245c28a6aa662ad78ca82b295fdbc916e062f02
+Output.11 = 1863ad4e4da5ee1131dc40c2a08781177fa8f34519884ab1af436a4ea69d0aca1b9710862b700d5c47bbd48b56000ccfb3d24467afc5d1d6ad5811ee0a45dcec
+Entropy.12 = faff695a255dbb2fa67e64af834c95acc272a975842bcd35
+Nonce.12 = 8339a7d49dbb6b36a8469af740c87f27
+PersonalisationString.12 = bbbaf27249f30e1212980284b837de12010249efba78a3f8c7657539ea7080c7
+ReseedEntropy.12 = 13b2be945b68b98571ac82f591819538c441c4556c5815e2
+ReseedAdditionalInput.12 = 7b6c0c3ddfd4813f4e8aea819943067f25a4b8939a43e3cdf32fad5d159d69ad
+AdditionalInputA.12 = bfee5752379d9fe8cce55b197f3c46debc66c933e5f9ba374b9dd6f184202dd7
+AdditionalInputB.12 = a608479433bcef517e81448c912f257e6687747c9924b8f88a0ec1442d90e19e
+Output.12 = 7cc65e6383aa891934e5cf1e6d29692ea5f278f35f4d5e48fc21f604e4f42eedad07d2b1ad70fa7462ec0ed6686b27365fa0a7b34ec84ef3aa9bb08e027d6ca0
+Entropy.13 = d098df2d5d7a8e96d479f6ac30a1771500ecac0e2b829d22
+Nonce.13 = 8da4d62331edecf828eb5852ed92010c
+PersonalisationString.13 = c61d8a1418c0e0eb3d0652e55b770f8710c84aed5e24d3c631485b15bc037090
+ReseedEntropy.13 = 812296b1fcd47bbf5d3dec6625fc85d1e141ab26655fb188
+ReseedAdditionalInput.13 = b1328165610bef7a3238690c03549f06faf872d642827c385d6ce039465cbe56
+AdditionalInputA.13 = 41034ba9ac78987f21ebcddc7e228985b71833453e14eb7129261b5fdca5faf7
+AdditionalInputB.13 = 398fbe1dca9a361f276864b0cde0e5f25cc37b294bb0c0483b109d7b36878a5b
+Output.13 = c6d544dddebe427b73e75d9d659d4998e72304ca64c56d07f68b70125e90feb9ff70afd2b8598667cb6b0843655769855ef3a7832b86055543acfe4d377c018a
+Entropy.14 = 17b7bb5b076a5f4c5b87b9cb11383ddb38c494b7b89eed83
+Nonce.14 = 2dd928dd7eee5f039779e7cd05044937
+PersonalisationString.14 = 77e9d3bc69ed06c4d9709971dfac2ab77532350c2a860de7b01147756d594131
+ReseedEntropy.14 = 42ef85737b472bae820215f1a7f00ce6805026563c703d87
+ReseedAdditionalInput.14 = b228a3113abc0e1e450339cbf61b74b1386716f8674e737cdf3845cb672b3807
+AdditionalInputA.14 = 1336ba38c04d6f3a2d43b19f6570befc0506a3d02b0b6296f4d51221665b8f45
+AdditionalInputB.14 = bf2b086499558c15c1d60ad7a2cc90b2b9ac411fa213a20144aca386483f50df
+Output.14 = 0ecec0e34a4d319c1e4134aef633bf5d2ae09e9311b29b74fc7651c6a42953cfc047f6f68927626a6ffcc9a205fd3a3346a1105804fc1b4d6076bdd11ba37190
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b71d3e35697b6a1cf5ca4f0992dae0afd91d6d59fa673440
+Nonce.0 = 400b0de03670409c92798535858e5488
+ReseedEntropy.0 = 56e31eb4a1c8bae796207aa520d66161cf06be2d5b46a7aa
+Output.0 = 3dce2aceaaec3fcf59d72ad8cae9267537b0d965b970846d2ca3c52ccc28fe7862ea144074d719e18a7c50a9a188ef289f36d11d20e176c0020d0dbf2c94c282
+Entropy.1 = 04a2b8adf83488643d5e6712d09fdb4b0da60e3ebd0e6427
+Nonce.1 = c70ffc3967416d4af2e3f5ef20d7d402
+ReseedEntropy.1 = b3f248a4ca6f65893e613eaca4e24c99d1ffbb373395a8e8
+Output.1 = 3c7a50f0215cd9b4cf60ea77c06ad209b24df93c9d7a9d288cc4978c18e08835671c9f7a5415de66bbbfaa5c9c2e709998988d86122f985b86fdb502edf1b928
+Entropy.2 = 73d68d22b4b6b98cf4ee1a4f6b8f6a035893f03d34eb82a2
+Nonce.2 = 76d83338ff6e6571e9597f34a804626d
+ReseedEntropy.2 = dce7c7238d22e63db2edd8f9a48684699f9494b469825166
+Output.2 = 296efd1a98edf4542d34f6938bd8826e525e4661aac5efd02169f552ab12dd0193b6f766b41da0553006cbbaf5b729377eb2c930b71ab8621731a063bb1113b9
+Entropy.3 = bee5bfc00f67079585f1159c37e5c2dacaf19a20574b9ae6
+Nonce.3 = 8df0c9b5bb7b18df823fe56cf1153d53
+ReseedEntropy.3 = c1a53cfa7da44eb9420b3eb722daab61858f5efa573f12c1
+Output.3 = dac250492abf78bf7c433736974f73bb2cb3d3e01cfdf2726d31590863b296451d5b5127507f6d4c50067272faea3aa5790670568948c617af11612496b76ee1
+Entropy.4 = be06744b7cc633132086b2d5a1e9b62c26bde56bd9c0d7d0
+Nonce.4 = 705767eeb9b97ce717d7272e75b621b8
+ReseedEntropy.4 = c9384987518ea2d029ea7c1d41657c55d7793882c8e08ccc
+Output.4 = ef10c86d134ba16257ad2fa48396134917795724f7ed5257a28788d729ae1393f442bc5f5a5d39884b3b9df56e262be429881a7201695acd21fc2cefdb91ffa7
+Entropy.5 = 0f06dfb407dc8579617613e5f71654a6adb9b27aef95d8a6
+Nonce.5 = 4cd415dd1a32c7e28b8635e54de9287d
+ReseedEntropy.5 = acfa2cbc60e6cd273d649977e567590d05d15e6b5294dd2b
+Output.5 = 93678a280fad7add11776e033588d757540e45144486b3c75d87d2f03ff364ef6dee2c8778d435a4d6975b3cb2530b071b65939703fa017bb52c2c0c3520af20
+Entropy.6 = 7e8bef91211ef73daa9eb7d32af79fbe74120b5c183e30a0
+Nonce.6 = e9eb7d6ba6eeb45b67736919de782f15
+ReseedEntropy.6 = 43452ba909077855b2124a5ef90f849ef4f019ce16902a46
+Output.6 = b1e19cf55da5c1cb0f3646e74bd2df96f6887c779b5474e47faed22e6867dbb2843323c2a329042a155057d242f3fe6f590ae3825138022769bc6e141da51bd9
+Entropy.7 = 63bc100a116e1482aa5f6d66c18b69f9e3deea25203dd7ae
+Nonce.7 = cf9b2179e3e8d651fddae5ca8b220c0d
+ReseedEntropy.7 = 2e7bac4585deea2a93f4069f9896544aefc4a218c141a25e
+Output.7 = 9624977f135c298afffcd60b5be0ff62dd29a2d891389b6b5080e9d88bac609de4c716f06b47c1b7cc92f66cb5f7a4d9da906f084d5d45aee9bbef2624309ada
+Entropy.8 = 4378bc78e40b931889ce78510ee527fd96a5751ea77cd877
+Nonce.8 = f4bff2f1da886321eb94f6ba34ef0cb9
+ReseedEntropy.8 = 0f25a2c8d40a040b2bfdae68c567194325c94d8aa57393cb
+Output.8 = 160dbe0b5f8aab91b99ee58224e31eb5e8007d43e0eaee13862a26a1bbaf099f8d93ed4d2112114dc952a0cd8c266f82d5ccd80a5b35f5ffb3b211d0cba51103
+Entropy.9 = 8cc5c101ece3cadcce50ad2b805a4c79c51c6795af716680
+Nonce.9 = 3a166815aa0c217c0c147eeca8ef1dbb
+ReseedEntropy.9 = e945678b0333a0b4ded648679d73900942ebe7bb9ad1efaf
+Output.9 = 4ac17acf725fa2c5decf3596cc859bedbc1446746b3940e6d28a3759c798f59162f176b8591b70ac58ea83283f3739ff825fc1c53ef3d91b84832c162a4ceb5c
+Entropy.10 = 36284ddcea07dcab15d5ca8c6c6ecaa7d1918a383e65a15e
+Nonce.10 = 8a20929064fd5f29e698ae1347c7d755
+ReseedEntropy.10 = de970d724526e068c8a42674bf99905a3e1615bc03631225
+Output.10 = 67e27a41900db00670799b61de771e03742582e8a582256862890d332c858eaee4ed310100bb4323a306b1de9bde3f782219e3e79660444a4cbc44a5c48b07ef
+Entropy.11 = a6281505d016f45227cb86ffb329499a89449d7e7d1f96ae
+Nonce.11 = 44ed900e03be20998d0de6a4c8a647ca
+ReseedEntropy.11 = 3ce102767f579dd9e099529ab6480596c38adb22e922c1bf
+Output.11 = e3be72f6c8cee6ae1702fc106011500872bd43a233587cdd2745f69d12148f33bd56098a706d95fa7531b78332ad76d1b7a7a1e16b6904ed5364b3d1b3230a74
+Entropy.12 = d436c3b46a8f2a04b07ebe213b3d6e464138f8015dafd079
+Nonce.12 = f6dfa2e69075ff6765c4a3ef9d7f8f83
+ReseedEntropy.12 = 195c37c4e2f8c06e40c79cd4bcd55f1d82ec2daefa1a5f83
+Output.12 = 29c9204070d4c255ef0e1b52fba7450ee0e5ae0d268bd8aa9d1738161f22fb95505c1fa6a6b330918e75c4bb8f96fa2b9ac02b5ddb2551bd497e561ae1ec845d
+Entropy.13 = b69f6caea2d9cb3515acd99d2456426b79950594f5d7be45
+Nonce.13 = 76d66fbf25f418d8b39a14251917a597
+ReseedEntropy.13 = fc3a32e809589e3358b798b1b5d642d0f9c1dbe8952f8032
+Output.13 = 7ccfe74c243da01c74381d64e7b2acd37fb4f3d24412e7573abdd9db91e2797013a1d672e909298e5165f29a53096ddd5b90220548b2173c75a0834395d12ead
+Entropy.14 = e8d801574677199bd866197946d2accf3cd1c61730553cbd
+Nonce.14 = afb32d283ca1546dbd5075a903828275
+ReseedEntropy.14 = 34f8c96c52c6c48aa0f39d20502f5b031930667af293bbaa
+Output.14 = 5b8a8cc554a70e64d1e8f080fa20bee126b439147c6c56fdf698e96c5c3e89f20fefed6863669fb8f58ea42e2fcbfa9a40a4fca77a7ebde43956649022c6f475
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 2c09490dc86710a6bcdb450d07fa52aa6bbd5ee15590140a
+Nonce.0 = 1d407120f3b6835d0df0866d0ecd05f8
+ReseedEntropy.0 = 2e52a068bd4d9c4279b183f1a45f1d2ce503105a428cee9e
+ReseedAdditionalInput.0 = 31cfc68ccbe680f18075e21605024faa3979ee70c6ffaafaef170b57c57f4c14
+AdditionalInputA.0 = 2626ab5a06508b34fd64904e756ffc52a1c6af2829c9eec008f21b284043fb67
+AdditionalInputB.0 = ce4126da757e5d88cb8627721b5491c2866ed0d1d6738a68be1b49839d4bf6c2
+Output.0 = a7a92c0ff5dff9241e2f0f876ae4c1a319e8fb00fd39151e727736a1dda7be1b9fdcaa82c88bfa5b149dbc246bd672034a9f70ac2ebe72f70b83418173ccbd04
+Entropy.1 = f95cd38c3e18fa19c365022fba6cb197c3aa31e3482349e4
+Nonce.1 = ab14f6e3ac82ffefa1b20cb127145b54
+ReseedEntropy.1 = 7904442f0871db6727fbf2cc3426fd5c3053d1f93f574b27
+ReseedAdditionalInput.1 = 74ced249be05cc23d0c18ff96199d866454a52c962d6aac40a4293603f2c97a2
+AdditionalInputA.1 = ad3391c8a810619e504dab12fd1baa1d43343246865319c6a70308282ff60326
+AdditionalInputB.1 = 6cf4f2a9ba561160cc0f9102d77f56634a867d4f4aa0afce175d994a407445dc
+Output.1 = 89cbbd15b4f0d1aca84a447313e9bc83a64a87c7075b1c74de184bda6c6ab669c8ef7b8c6bca3de328a5d324bfa27952a83424bbd40cac99510330e959b02dc7
+Entropy.2 = c4f088cc369b2c227667e82978f34d2678d1a53de1f05655
+Nonce.2 = 6195e02670bae3bedb2ff0ca0f7a0549
+ReseedEntropy.2 = 1f37e780fb27d743c52de9bb71d4ddca743900154a8d4622
+ReseedAdditionalInput.2 = 5f059ab2c47e54f7735d850d49230696d52238c6ab28f2b11994545389350f78
+AdditionalInputA.2 = cc3e9ebcf2add463177bc18addc330600d42431f7788f762cd69cee21e141b9e
+AdditionalInputB.2 = ec292f2e19d9510dc3993c796093f7e23726d2ae1c4fa76b95f118ce390610c5
+Output.2 = ece8af0e89f0ad9dd210e8b32826c15d153e579d260446bdf10812cae3d68755618ae3c2efe329387e0904aec15410b30100bfd5d2b3e4df8791f673dc05e493
+Entropy.3 = 7358d43739e2d31d553ea4842c38f8b9446f722421ebb002
+Nonce.3 = efc26b24505bc457a233982b8abf64a0
+ReseedEntropy.3 = 8fa789ddc0a5314d8e9fad3ef9a9f83600e5b0190168c548
+ReseedAdditionalInput.3 = ce6b37646401f7806c6c9f9a4bec98f70ccc5c1ef1f4eea1ce8afd092f31626d
+AdditionalInputA.3 = f0315b4cdb0c92d346144bdbc35732f4e3ebeca5f39074bf9b849170b6a3144b
+AdditionalInputB.3 = 91c28961eb16da3715e95446238eddf34602b369f7f807bdb74b97f1e1a1c8b8
+Output.3 = 8150caed3608ad8ba10a605a9cca688d2a1d97d4f652d3b35cd6c5ebae3f62dfbcabeba8e113877b281b70d23d5ae9a205fc46d9e6383291b0b54e132410915e
+Entropy.4 = 599be501c1fdd8aac4df294f32c0159b00c661645955938e
+Nonce.4 = dc4abfa86c4b7a474668a564d5621e17
+ReseedEntropy.4 = e0b7a400b23ab2cecc2af1ed4c803913087a9af85a7dc508
+ReseedAdditionalInput.4 = dd24c897576002bc665fd5a2c57a439345acd04690ba7bfa1cfd655c736767f1
+AdditionalInputA.4 = 87eb59a19bf8726b413ce8ffd859c0bf9639f0013d4a58a0ab8ee93aa5b3f79e
+AdditionalInputB.4 = 8c12fc58833fae3ef2f0876beb2deaf6cad95cf49b048121e0593acf64c92299
+Output.4 = f3434fdb75f2e21efee261fe9afbeb7b71e210f16e3b612340e2f587d958df6d8a83f1916e7577b89c7cd3b01c604e92b0dac3a04a3c58d7377bb205cec1a523
+Entropy.5 = e7a63969853b21c8a41f9cbd1125bac66abc8771f349c5b5
+Nonce.5 = 45e5898e4cd7f6ee15eeccaa204376af
+ReseedEntropy.5 = 4681c0dc6435483abe87711fd2d1292a3dbba7ee13a18b79
+ReseedAdditionalInput.5 = 43790f50882ef2cc65b3736adc17052c2f659904579c48fbbc8bf896c00dddb6
+AdditionalInputA.5 = 68666c2a3911c6ef220b6765b437a5f69931d5c54763b642e4c384d8af76c0ac
+AdditionalInputB.5 = 3121d71c5d3d56442c17c37fbf7e5bf67982da1dbebc0c9cd511ec81059ff701
+Output.5 = d2979bec6923cd21065e7be34fa18d3e591ced669b0293b3cd0dbfcd79d0a706273842d3792f77ad67853a411aa28d7682ff37de2b4f36ffbf7f4003b279627d
+Entropy.6 = c6ee4ed1611b36197c29e72e27af2e5b50476c853188d715
+Nonce.6 = 873a275e5aa1e9de62a18c25b146c236
+ReseedEntropy.6 = c0e1e5d4a73ab1eb78fad23a81d5f72bea2fecd5ac2d877e
+ReseedAdditionalInput.6 = 3cbc7ea5e634ca5ff0fb8229955d860e1bacb2ea41d0f8f782c8b02e0016cec9
+AdditionalInputA.6 = beeb148ca471842021defc365cbb5709bbbf70e1213ce6ffe60db0ceaf9eacec
+AdditionalInputB.6 = 8e81c7ecafc365a320c4adea72943e1bb0eeab84ee0e37d2a49e6bf0a52db1a4
+Output.6 = 9b4dfc6835a9f64d7780f474d2b6e1dcfc77423c4ab03f3eb5fd2a5052df3f719d1d548e3e5a2cd50b8a49a180a3b3a2fe26a1feae15a9f75a81d7a18aa774e4
+Entropy.7 = a7c90401ead7cd9784f605197d5ed8bdae93f35d390ed4f9
+Nonce.7 = e0bd52a2cca3ba7c6cf8f65fe6521fb6
+ReseedEntropy.7 = cf4b11d8276162c2f3c63d386f9faa34e3420070c7a10945
+ReseedAdditionalInput.7 = 21eb57525a88df1b5af4f5f18a2e5f2a4c8a1879d76de9b92ac753ec924c0240
+AdditionalInputA.7 = c545361ddee8150ae98a9de9ff46965fb42616ea85fe258a34dc2626732abf73
+AdditionalInputB.7 = 374c4d9663981b1fcff22fb2bffaf2a5766f7fb73ae76b1f4a49e76c41bfe0ef
+Output.7 = 7aff3bbcad25d1c68b3ba0dfd4c34095d5d656374cb0d669cb3242c610a697a7e2f36ce9416af2c85fe021f4a5eb24ec72e9cda1459cb912eab06a0dbef3a501
+Entropy.8 = 53814b3e9645f177bfb2ccf758f12ec145f679ed856221eb
+Nonce.8 = 76bd9b8ed536d38df7cb496db5b15623
+ReseedEntropy.8 = 7ab20adbd82752b2292d9f17aecb01dbb27c3149aba6c6df
+ReseedAdditionalInput.8 = 82eaed42fd77e6ad8f81e7bf1821691c2c00bab94c857a6ec02c2ebcd3fca2ee
+AdditionalInputA.8 = 1b52b0270442fe5b87de640fa860747fb30194a9e9d18895002a3d378f54335c
+AdditionalInputB.8 = 9354ed258f0e5995b4ae1382671fe065924b5477668d88e4ebce362b2d9493ec
+Output.8 = 3b24613228820885345ec8eb703b34c19bab1503b424d65ea372e83f2abde7bc74b03bdd43a90265a179c434ac7d9369ed0b5e8adea684047974aa8947ddea88
+Entropy.9 = b7dbea9d0a65430695f45c58adc6689677d3b3f32469b94a
+Nonce.9 = 125e6485ef1d71d49c64176f5fbe13f6
+ReseedEntropy.9 = 860c031647a2e022c345745a84ef63603414e11e64b3ed32
+ReseedAdditionalInput.9 = 7e00caaafd46464534725c0d99b5265456a5d659b763ddf6798134341fa6a4bb
+AdditionalInputA.9 = fdd913fcac4d32b231303a65368424855dcbba49c1e5f51813a6253653d99447
+AdditionalInputB.9 = 14dd4b3bbf476cc770dc3aa001d5473cc99a77b4cb13d51f6efc370adf4b902b
+Output.9 = a2b15d9984dd5cb00a3339ed0afb3cf3b90dfcca4cdf878a6efacc9ee548b8318c20fbc6144a0fa8db23008cb2fcfb0948f04b17c65cc684de927245ffedd55a
+Entropy.10 = 06a9bcdd5bd871339bb8f036eeb1a32e1c6553c990c626d6
+Nonce.10 = 43b30d3c04d87deaa623718add57d8c6
+ReseedEntropy.10 = 310a0648fa838131e8bcbbed29de0f397da2981137e1f14d
+ReseedAdditionalInput.10 = 230debdf54935213ae5b3c19758df92b8d635969cb3ccb802938ccf93b3bcb92
+AdditionalInputA.10 = b5bb93ab9da9cc5b57712c649e46e99dc92b634b1828f909e98eb238bdd461c8
+AdditionalInputB.10 = 4895709c29d402df999e4301fcee4abe5ac5c6ab13bf31ab5de0946e75039702
+Output.10 = 5ef5161ca1a5a9ac4f9e930f3bce13d4122ce27e0db9339e05e1038e3589e300bf723d50370161b75d5af0490c74ba3cb94e4acf1050d4775da96cfa9d108986
+Entropy.11 = e32cce1d9622f8f04508e3661e635c46626e0070f6560799
+Nonce.11 = d489ae9d83011e3239b1d111ff89c20b
+ReseedEntropy.11 = 8491cb654e464b0ebcf0372971dcb08762a7df8284daf90e
+ReseedAdditionalInput.11 = 69462c9f148628df54324ec854de816e5fa6366f8f5e0a3ade9c125e2d88c12b
+AdditionalInputA.11 = 535b2cc4726521b0a66fb80fcecc8c0c6aa7ab30b9356181ebbdcedfd9b75f76
+AdditionalInputB.11 = 4e081399a2b7784d9e85dfdf488b6ac906518d71d1439337a50b6be9370964d8
+Output.11 = ab2e87a3d65f422ffd67715c985bb5bc77dc150551e242eb9df098bc6b8354e0b3b4698be9b1946bf0eee758177b6e51070b24bba007936223cafe981f3c64d8
+Entropy.12 = dc0d1249fe31364f9b7c9613d9d7180d5982968af8ab6085
+Nonce.12 = 4d44aaf179b43544259bd4d31df3c382
+ReseedEntropy.12 = 541961c1cf4cbc0428c3c93fda65a837432bf8a4bbc9cdd9
+ReseedAdditionalInput.12 = 3957b3ac7ed35b46875fc579c5fd5e915052024816f912b71f7de9b0b31eda38
+AdditionalInputA.12 = 20cc95b4d7b18789ad6cab1f7a444d7ecd1a3306700d0846e352eff15aedb7c9
+AdditionalInputB.12 = b40a26da42e3d66a8e02ff16bc91e525c8299026be41d468a44bf93d74bcaba3
+Output.12 = 288996d01d282f1cc2806f857be669d911a6bf9ac4cc59ab58acbe7cd9713deacffb7a2cb390c8f2dff442792b5d63089a334bf43d2d1f4625f50994813542a9
+Entropy.13 = e42d177d30f06321d1ae1798993f2480584b4a6d3dded354
+Nonce.13 = 109f5155c6d2ac7b8c9663836139e7e4
+ReseedEntropy.13 = cb4d71b6d6c35b91ff4c50fd88d8f4e8dd51c0c13325aed5
+ReseedAdditionalInput.13 = d7f730cc17f70ae64775fd593be43b9eeb41db8c58804d4faf8b4a57e8e9a165
+AdditionalInputA.13 = 03c0d2f72ab66a18db4109df3fccd6a6174174a453de17931c87854fd12e4ab5
+AdditionalInputB.13 = 9dfad6a1b158a1ad24b466999e169b320b4724f58d80ed89ade8d26b67a01567
+Output.13 = be7d618ea4773e3ef5ee2a9d9ab2652fbe5c8cc7657abe111816085ac35d7f0907409e0041377e87f9e58cf6f15aaa583f84e77d7481d51284a359e231df7767
+Entropy.14 = b57eac6d167dca493cf1bd581726580bbc142caee0a9312a
+Nonce.14 = 5d6f1f44438a312c194de740e5e72cc4
+ReseedEntropy.14 = c9b3f4740e5076278b2302100739c9aa1ab3a2ac82f46287
+ReseedAdditionalInput.14 = 27f6b71ba60b62ff29d2baaf5bbfbe345ac5955c80ce1c21355c256f692663a3
+AdditionalInputA.14 = afdeaa87965c4ea33aff1c32ce370652d43e89f2ff4b63215d84d0f76ac097c7
+AdditionalInputB.14 = 5c7ead30d442c957fbdeb5c1e3e93c094d9647b00844b1239786c88484d2fbe5
+Output.14 = 951bd358bc1457011b34317478eb82a6bf618e342c4505030559baf2ee2af8a26b4ea20bb54ec257847e05e5615ef418ff8b88fb681b36a4e5ebcb817ebd6eb6
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = f4936a732fdf5668577db79e7f93e91c4cda1d10b5781b5e
+Nonce.0 = c60b0b05600152f033f056dce7af7915
+PersonalisationString.0 = 6f0cf012d0e495051fd6c2c96e581925960271b359a705a65075bc5ec16ddc6e
+ReseedEntropy.0 = bf21ff3630b16acef87602badb5ac2d640241eb481a0c8d9
+Output.0 = 18931fb1dc255ddea2e6d4351eb6f329c234e1d4962060aceddf0c9fa99509cbc64c042258f8daf57c120d7a2daca95f40734f59206e6994aa6395cd80a1fd54
+Entropy.1 = 3d185c3029d1292e8dc0748afd681c9e8c41077774217b9c
+Nonce.1 = ec68b8b7da238edc37824f55ebff29f8
+PersonalisationString.1 = 805cc941c1ddc1a4ae3a1ff9da0145e5c256fd63dfecc5948e0e24a92d8adbcb
+ReseedEntropy.1 = b45d6e410335da94a17841676579de67781ecba257131385
+Output.1 = fb952f3f623ef2833a4d8113019174b9127f84fa593c380d03ad11643d5a35735848d93009b458ef41643c2666da6deb9432398c4e7ec2480b9c7b879c099fd1
+Entropy.2 = c336f7c8121c4f6df206a94efc5dc130e8ef83dd487ecd56
+Nonce.2 = 615b079c738012a3da7fe8e90c4d8ac5
+PersonalisationString.2 = 8bca6f65edd74f3c88eb568e2fadcd1c7d3d717abf80a265db3590e0fe50f5f7
+ReseedEntropy.2 = 1a02bd0cc158c9186cfcd4cb15328624d37be1e896f0bd0f
+Output.2 = b446311649e616fdf4088d4f9fd509722b3d9975f9396582258b9892a6cb5f5ab4e261a8156b3522910efc20645428ff3c0f6523284e5c5629f974613d4942b7
+Entropy.3 = 78ca16d77c8f037592dd30f5e3e0df30cbb8b5c425f843a2
+Nonce.3 = f7e80ed276af5fa1cb967f331f129826
+PersonalisationString.3 = 7cf5342f371d56b31e70b6c552aa96eb00009c15a5e0e3eb8f6b9cea4c96eb5f
+ReseedEntropy.3 = 4d582b73b54f07e3b5982f12b7e938889a720ed0389c76a1
+Output.3 = 912a9fa85beff2ecd1b8d52780d5a5674e2bf22da5f9f260432691ebbd432c82751968d225bd06c681af89acd2ba483a37214abfdbe4aa8819c64632e3b40408
+Entropy.4 = ff5115ccbc5fc415dd57aba3102d23f6f119aac14dc95d1b
+Nonce.4 = d8a0c6e2cbd0c0b3979d9afaa32362a3
+PersonalisationString.4 = 4117457f1256db46943166c8cfe03ccb40a433369f0bd3bb2eeee28dcce44b65
+ReseedEntropy.4 = 11bf85b6348bceb863b6a752cb651572a4e750b1d1010780
+Output.4 = abbba83d02fa0bad5ff6ace6a92aab07b3aa2faac6c5fecb46af4cb43904227fd9f34322b3ac902982b23b55804658bad3f975674051baf554065785ec5bad80
+Entropy.5 = 9eb4249f7060d6c3ee574b63f84d4dd7759038d32d15b24b
+Nonce.5 = 6491e9d14fa7edd40249fb5592ad8ebc
+PersonalisationString.5 = ca3044f43913be0345a74a998873332ca3623282fd03b00bce0cfd978e0d9b1d
+ReseedEntropy.5 = f658346da825957f1d1429dc32d7251846febe1c3ae6cc3b
+Output.5 = 027f5cbe588dd39c52691e5205039813a574d4543413d092af0d0b7542fb2552a7f583d19600b897cce9e8ac1c744fa499fe0d704e897d76d87aebf4fdc94d19
+Entropy.6 = f418d3a2d3a104a325f82ea17e2b03e3dc471faae783413a
+Nonce.6 = 41fddacc56c81807b42e441288da6578
+PersonalisationString.6 = 955f188023da79f94f3cfde71edff2ec5a6bab24925f526fc02d820871ce4d9e
+ReseedEntropy.6 = 3924cde43683614eb4396fce38d65a498f87e6c374fc2308
+Output.6 = 975cb8c817ac9027e54ab9effcb6f821f4688f9cfcdf5cf9c0f584a5b512236001681bb985d913d5236bed8d536af05eebee87cdc7756af98b2299012640897e
+Entropy.7 = b97a78cc2488614dedcc621706ae8096a08a27ed232372ea
+Nonce.7 = 685b6c16e3d3f72568644450c811cafa
+PersonalisationString.7 = 4ace80d8c0bbb9ef5e1a6bc24a7b7f66fd86c93f95fc7cf14308383c8272ee6a
+ReseedEntropy.7 = 9aacfaf811cdcda8655c6af2eefb24caed4a9068d1f6f558
+Output.7 = 40ef287ac7537cf3701b75bc670add6eb941e9358be849d4b7fbdf4c2d4ca94c03c5a801b30a9e9a7441c467183db818fd9eeaca9b978bfc1793c191427da281
+Entropy.8 = f207c8a0c27c3e3f22c6bb8a5bead3576140dd7d8b603246
+Nonce.8 = 6480607508afa5a0d4cfc0912fb9f715
+PersonalisationString.8 = 541c21c0f85f0f4c58fd04452a7ae4117230ef2fea316ed5e00b74223129156e
+ReseedEntropy.8 = aedf55e5cdcc129e7a6df93463680059a0f73bf91176f69f
+Output.8 = 7f88330fa0e6803922f9c850abe5a83bc1d7c9d5e47d175cc0db2271cd72fce9ccc205df331b8f39858f778f733a4b7092d7805d27ad5f491cb2a34d7982c809
+Entropy.9 = 6279a3a52124465e506a00166b318520884625f3d1f5cefd
+Nonce.9 = 59a0c8eb4dcf7c54ffaa399dac761365
+PersonalisationString.9 = af79294e87c6df705ec4cbd0f4acc05befc406ae7a52daca1cd4a5f7ec56a989
+ReseedEntropy.9 = 5320e0c824b92e9db922f28ded30936bb1a0f671702bdacd
+Output.9 = 152743c5d4a7f9c5726d5d5a9fde8c1e638f2fe6409728f2a6e8a95f307cd2a88e22d10f512cf3ea4b3845396359e181ccfb0272f91bf0795a85639ae5cef014
+Entropy.10 = af2be0eec2c10ba57ff2efeca5e5a6350d6b734bc219f260
+Nonce.10 = 99eda95f1bbd4c0793bc34b7fc1e2397
+PersonalisationString.10 = 4d616364d52a6f94df53e95c5504f1c5f56d1b4d030dabaedcb4bcf1c81ee5dc
+ReseedEntropy.10 = 63efa89965db281caac52c1de62d1f53d99de880e65ab62e
+Output.10 = e978da1f4149e4309f43213e313e5860e1f1683afa9749a938ae08252bf8489eb30d24723d19e491fcd2e0844b1697dec3823e1fb6fe807c7f66f6e803e7fec3
+Entropy.11 = d397a9d80f77caf5becb65b124f3788ebbec7c3adfa6a8bf
+Nonce.11 = 060b856fa8db257b163ffa8e1c1ad2ed
+PersonalisationString.11 = 0453332dfdfd39a974b95d8491ba57c034762d63dc0a46e65e066c7df6d9ef91
+ReseedEntropy.11 = 5bf4455ef30862d8c242ba07b12c7a9cf255e1673c5c3b98
+Output.11 = 4113acc3c155e96da28dc1c5aa369ad5d1bc4a839312d6f79d6e1514696f9a2c5231577dce79e8cc9d949cbbd30339c4e525d017106c4b2f64b548c55374af6c
+Entropy.12 = bda88e805570fbbe77b9d53fe5bc443972a0094e54362c6d
+Nonce.12 = 83ac35ef07af291d6e46d8a9e4a2f40a
+PersonalisationString.12 = b5ff036854fe4b3f674b1131733b8aaf11eca1dbb2bf6834f3d236e6e0ffaf43
+ReseedEntropy.12 = edd2f0db20f4313ce36dec00a85ff6f70e00d506f8dbad68
+Output.12 = 97b45bc56e89d40d8346e8fe3c3e3c9b230f19256e01c40364090e3081db192230465b8ef13b9d58e2d6218aaadbc4afd6f91b83573e6cf7f057299d75826d66
+Entropy.13 = 2880d806b5dca22e2ceb0e242bd0a5d64758f98b7032fa5d
+Nonce.13 = 0f4811c8f4942e69be1e7d154c730672
+PersonalisationString.13 = 632a70fdf2b9cee1f45a3d18a9672ddff9b22a01b825262e641e7cc6e0c9ca46
+ReseedEntropy.13 = 3b4f705e1f4704b219b265e8359c167d1712b83e5600006a
+Output.13 = 2538ebdd9c7392193aa2df2efe8a9ce1c591b1e65e1b8d0837a6c1826dd986001cd169a85d66fc6cb672d4daa3d2ab98c3dcde71047ce73db4b690ea29d320db
+Entropy.14 = 2046344904a1d3adbe32476679f6b45ba987eb1f9af7a968
+Nonce.14 = cfbb7761deed18fe83250fd128b7d56a
+PersonalisationString.14 = 2030067246e0fc3310b411195c5fba128aa1ec823051081af0ad3a433244b4b1
+ReseedEntropy.14 = fcd07114a56039f5ce591e907b3af1472b0f07c8f9ad082c
+Output.14 = 25fc78ce65a56f4bbc1bf3ad32716ed1bc917cc21f519084c5ff17587a377f2ef7830c1e4f7cf381be260f5cb9397c4ccaea42efc499363edcc14bfbe54120f2
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = a6013786b2e78af97a4ccce8fc711b538869b78009803ac3
+Nonce.0 = 8b974d923ae096a61f2c063a1bfa20c4
+PersonalisationString.0 = 4afe7d39b36850b8b14003f3930fd68ad32dc6c469b8185dba213c77086093f7
+ReseedEntropy.0 = 5b751bb1150f672a47c212807beb2b2daaf5a19c4b94cfc7
+ReseedAdditionalInput.0 = b111d82ae4b61c4e21d27beed00511014f4cffac62d96878115cd41f83a7dbe5
+AdditionalInputA.0 = 5a307a087f9c09ed8e667d1c3cbefa772222d09011f00f80b6f6306e24ef6747
+AdditionalInputB.0 = ee9419fed145a9fcf4ae567186ccc4ffedf8bc00008b00b606ccfcb8f4f3fb99
+Output.0 = 60a077b6b5c3a4f59c6a9fce46ee8eb16f1433b24f99290f17b2fbe1890a33b98cd01cd37350130c301177df0a6f0c44aef63082e6a13cc74a2a51f896aa27f6
+Entropy.1 = f47150c1b3c4e1ea7f195c81d2a4a3ee9b7b59b7ad553695
+Nonce.1 = 849cf70bcb231df7a8673003d65db5f0
+PersonalisationString.1 = 84b363ef90b38afc042b3f81796b0fcf0513739ccc337872f16cdb7ba8125147
+ReseedEntropy.1 = b6a931ea34ee8b2b4ff43c5c3a325eff1afc74b263c454db
+ReseedAdditionalInput.1 = 1ee9a056362fdce4718870e170d504f0e67d9d4f02813a9bc0f174d9106ecbfe
+AdditionalInputA.1 = 3dd221da19d47b0d2bb8197b0706a59ec95099a884c30ae06feae68c3f175aed
+AdditionalInputB.1 = e53fcbf8ab850f160bfca684da911f44727c7cd124faed956fcbf0832deb4141
+Output.1 = 1b6c7923037a87f7a6d3322cb0ac73bcaad5ea5b2426796c105c6d6c759e34a4d6bb8a064989fac7b11930b3772dc04fea902354bd4c81755fad6e880199313b
+Entropy.2 = d93ffdb351c64e5dead18a253d518561370f7b388f6c14b3
+Nonce.2 = 0b8aabbfb50c34e2b4cef355cce02d16
+PersonalisationString.2 = ea2846142ef9e5e9151564e7e480da1c53fd7f716ab47c86ff77d2c7e48d0a31
+ReseedEntropy.2 = 6907691bf822892682a287a548b0214401f0e285eee235d6
+ReseedAdditionalInput.2 = 388e4709e24f8cfc33fc4eb6200030c8e33b756efd63517a549582aeb7abfc3c
+AdditionalInputA.2 = b31f056e610bc0552ecc3039e8bcbd3a948edaff21fa089f69d2d59655ef5a5e
+AdditionalInputB.2 = 78f1f02d50a88417adc9572c4472a86d2ef42b37571031ceb4a6d6a9d48afb78
+Output.2 = cd8791495abe44465ad1f2f7866d183db8375f1c325bceaff2a5df279ac262e34b589eb37c496cdd1d17f5fe4fd91feea46e03bbc76b94137e128bcef302ae4b
+Entropy.3 = 5e260db362dc6ca67ceed06189c48c6b565a5a97652bffa2
+Nonce.3 = 938c4e17ae2d58a0eaba1cb0fb171f5c
+PersonalisationString.3 = 4d077d2db8c1c07137a1f0186ddeacb9ad410313b889f92213e3cbe6bcb51533
+ReseedEntropy.3 = 1c06f799ed96d72f1a3bc6431199f813385651353a580bc2
+ReseedAdditionalInput.3 = c52fa7aa5300b7f904c8a0414bb952f631155af17405ef95b77c6ffdda769478
+AdditionalInputA.3 = 7dc86dd23c8a0f39858b6b04217f908ffc8070b506de369a7690850799cd510f
+AdditionalInputB.3 = b4b01bf46819bfb70c6962643cee8e720510b11f546509f009cfb36a2a5964fc
+Output.3 = fbb50d0dd0f45ca907ffc728556b2b8057077edef038236a30a35bf23c3b02475eda2a76fe9afcb9d38d4e9115ce4e3285a1723580d7c7cf310d45ed282f7212
+Entropy.4 = ece48be49e9796610bd183a99e8785955acee48cedcbcd1f
+Nonce.4 = 8af5ce393c241dcb993b4e2bd141ff0d
+PersonalisationString.4 = 592b01bfc748db7ba6fdc517f871ed9621abf38b183c7b92e73a87b66cecb02c
+ReseedEntropy.4 = 925e83e853ed17b9a51c3a5dc1a558ad469c729abf33c364
+ReseedAdditionalInput.4 = b9c515e379d427b3b52649a4f4e79aa1f8d7e3320db1f9537e860eb6ce9fa30c
+AdditionalInputA.4 = 4d77bc15f77eefac578bffb45ab773792a4b8815198118e4de50fc5763fd491c
+AdditionalInputB.4 = ba5a18499332d27b1470abf05265a25aa97e542d3562298e8ca1803bd3d5f2e7
+Output.4 = 86eccf869bb133e0570a8021e1589afea2f4bb880ac84ddeffd59628d6771d2d0c1a03bb752b2daa2c28d048570e0f493cef76650f4c83f88d079b3fc68fb447
+Entropy.5 = 697d5785300204cadb612034d3e098651ff1019412cf3718
+Nonce.5 = b43042d9dbce8ef4962889ea3aec2160
+PersonalisationString.5 = fd40e04013f5430cec9356abcc5a3d71fdd70c5ef298c38d559182aad1f15fa4
+ReseedEntropy.5 = c65217192526ba93681fd153394c32ba4a78cb9224ab5765
+ReseedAdditionalInput.5 = 9e1c823201943632e3b5e9dc15a600c995460c0471d8c892b1d6e0b6cda69adf
+AdditionalInputA.5 = ee911fc353cad8511b97a3fae495c70728229b2b79596a6d6574f5476aa384d5
+AdditionalInputB.5 = eb466dd84506b3fdc3cfcbac869ca04770266c80689a0ebb2af0d2e6fadd0c2e
+Output.5 = 5f667ef0e3e589dde349963c464b1680ae7c3064b11bf2cda92e0407037591d2a4782c89172dcebac396453688d786aa6d61bf80e83f3ac3963a07153ebb77f2
+Entropy.6 = 201a2293317a8d5bd740c0e871b3526bb8aa4dbb042cdb9f
+Nonce.6 = cfba928a4897fab8bf01e195b9beb7f5
+PersonalisationString.6 = 8906596cfda68eb499d5c84ebb044d2310f39c16565a4a6db127090b0c15a162
+ReseedEntropy.6 = 3858a9995404c5cca0a04ac590dbc79e7f21e042ec237993
+ReseedAdditionalInput.6 = f9ca9677b1dd89486afd2a521f7212c41daab368505178be494b779618b615f4
+AdditionalInputA.6 = f66037b8b577d4b866b0171ce16bed3b904794a09ef02a4138e7be472688b8b4
+AdditionalInputB.6 = b54eb93fb6653f7a571f3e0792398424d50b75fb6aae6f457fdc0b2dcdae38f4
+Output.6 = 3e94657c6c08c04a2a56f63072197c72e1244286675be35d8657a92fb1573cffc7e876631284501d076457f0745179162d903ff42e8a2919ec5f326c936dfaf7
+Entropy.7 = 823349050bed4f8059715fcf8de4570cf37e454f833b59bf
+Nonce.7 = 23e778be62177fbd73563640767cd7ad
+PersonalisationString.7 = 76554fef6feb95973912d4af33d5380ec13e17eb9c0720c52ef0110deef427a0
+ReseedEntropy.7 = 29f40aa88b68ea61ecdc0fc60ded69580423fd4a1943117e
+ReseedAdditionalInput.7 = 5b326236ce66274cc98f3453db137eb3a394ba6b1fa72aff98269026a470fde6
+AdditionalInputA.7 = 18ef72d235852de3f1877c5d67aaffda71d0e20ae313acca5eeca5d02e0d7a81
+AdditionalInputB.7 = d428de121a20f710c82b04784b420f3fc132cbd6fbe4c1c8b24173a70c279751
+Output.7 = 730a7b365d8e38c30d6fc88e1c875cfef7146cac3a14e5bbbb922d0e03ae6ba5e119848487293dd04cec93439989b2dd9b4b8e6110e1ead04de81c212a010655
+Entropy.8 = 78852ab6f6b97fd33d0af296feb8201b84c0698e94d87149
+Nonce.8 = 2eecbe98c10ddce7b3dc43d821b96514
+PersonalisationString.8 = 22ae687bbd32903d7816d2476e14528fbe12e99fa62fbf616bd08f66152dbaa2
+ReseedEntropy.8 = cbf0654eaa4e2481f32ab74ba019577c52c2eb4511bbff26
+ReseedAdditionalInput.8 = 750e5d393e18beb3238145779ce1265bd473c9d313037b1e3f3433ed47f0955b
+AdditionalInputA.8 = 4a63211a209d5b076bde3a43e4ebc551e4b696857acf6b2be92a7362b7046d1b
+AdditionalInputB.8 = dad1952cf6c4db6315c7b47c53741dc02d66c336d708af18cfff9edfec8822bf
+Output.8 = d1290b3dfd54b00e0639d96b171c5711efd7a769ab532c09631434a10b6b336ac37aaddb5d0394963cedea3f919ad5f6ea106e81cecf7f0105326388eab74533
+Entropy.9 = 52266e3d432c327b879d69707a26ccd82f1c71369913c997
+Nonce.9 = 7e774e992eb9fc629d20bb968f1139a9
+PersonalisationString.9 = d74f4aa6949b4c4ca728abfe122f641511087b85686f79328556cff8bbcb1158
+ReseedEntropy.9 = d480d86efb6c9efcd7412e1f3782fd5a87b54198a30fca6f
+ReseedAdditionalInput.9 = f205a6751d2325c79dbb3143795367475d2c8d3248c1bbeec889ce2cc4fdd692
+AdditionalInputA.9 = e68b67be2e8b184f193b3754b029b96bdad8d1d1cafda0603705813cecad75d7
+AdditionalInputB.9 = 8b83bff6536e4b3cb1c1d425f02e07b9d88ca61541d259324210ee488b59baf7
+Output.9 = 197545ab717f4b156bae393c7e86cb2f3da753a2e78c331793d9f2b6767dbf07d7aca1228e452e3968a04b48cb9d7f941c53462f988cbd12c0adc7c716085d69
+Entropy.10 = 5023d526991c0ba4d7809347c43d9900425b59967cb97619
+Nonce.10 = eae2912f806d1bed45a0d83c025cc3f9
+PersonalisationString.10 = a48bd5fb24e675b7d47c662b7c57ae1cdc43e645c7b39e1c5b5497be55c31edf
+ReseedEntropy.10 = c01237cca41cc77f9686fed078f567cafbcbca2316e9c5d9
+ReseedAdditionalInput.10 = bd59b890806b0f67308292c67327c47ff439bd76b050fb87d955d11481e28f95
+AdditionalInputA.10 = c1eb4e0eb4088cdb9feed0bb19e15a1e48e0c06c60e86a4a0c77998e8d600456
+AdditionalInputB.10 = bf841c1b1fc55c2f01f96a3c2fe4ce503ffd4099bd884fc620a15d4527fd1e21
+Output.10 = bf7a3a2a430efcf4eb9b30d2c76d3c2db3dc670bccd514b4bcb50c56d342d9a9fe1d4589e0b8cc0d4226f10d518b36c115d8e4a29106c3a072423f1f3c09c7fd
+Entropy.11 = 36dd90ad3a99ef0f039d30d2c99f2b07bf8b1ab7a4efdb01
+Nonce.11 = 1790210b263d0f66d199df75907483ba
+PersonalisationString.11 = 771004b454c3c2c418cd7e39bcf8b3349d8dd0165fb9c5f56f7249f7258a4304
+ReseedEntropy.11 = 3103dded1e53b3ae63a4207ebaefcb86271ffe9d737118af
+ReseedAdditionalInput.11 = 0350cbee80aaad1bcdc9453bdb12af36d5a0337af365d46705305b5dbc8d0d4b
+AdditionalInputA.11 = a3357c6e97b7f2eaedd45d8b17b187eaa58cea7f6b90cd711109337ac6401b38
+AdditionalInputB.11 = f1a8787b45430128ecf1608abf7df539753e59b742f1400beae35f87f76e600a
+Output.11 = 03b0e5103b44cc72b3a76c6e3fe53b2a216de6a6a257144deb7475c8c917c203174cf5d2593516ee1316cff5c10a133a3bd80e067140ad9e7caf39a706ddb471
+Entropy.12 = 32a4bc55fe00933411bc1463c004b7ddb6affba185df625f
+Nonce.12 = 4f936c59f1dd36aed04044020e6064ab
+PersonalisationString.12 = 31cb2a446633bb01b9d9024d16bfc3872ffa2d1c8f9592c472657a925d6ec314
+ReseedEntropy.12 = de9e648bf15406ca398d6b1c68b70b3ead20b46690b99c26
+ReseedAdditionalInput.12 = 133c9879411612bc049251987f202613020453a618acba0f45d505e2b6c1b945
+AdditionalInputA.12 = 9b6c103339ede700564185cd26d6a72a0b2b559ec901a0da1a68c75fc6ad949b
+AdditionalInputB.12 = d1c602294b4a1e6606fad11c53887e90470a0500ef54be0b569f8f48aad9e1aa
+Output.12 = 6aec608942d400868d4a490a708a77196c56cf0140e250e3fd7e1ee5cd904925ed7fbdfcbb8ac3899e6329030efac6b7aec3fe4c172ffc3c7837b9695fec58de
+Entropy.13 = fa45678e548eca6f7d552d03fef9f500a41e63a9af5f6de7
+Nonce.13 = e214b4230cb2ae428e317c5211283f47
+PersonalisationString.13 = f32a3262ca7a6b52372a86a720b1e3b3eed9f228a966e3e9ebc594723b83139d
+ReseedEntropy.13 = 4b4f7a51df6739e8839ea111b8098348629f8996cfce8adf
+ReseedAdditionalInput.13 = 21dfbcee16b0581a4eaa7f22a7c1156266de871467f327e805397841189bef6e
+AdditionalInputA.13 = cdd8366b0e7be77b00e847f6898cfedd5013321d151e6a4a01f8e1e4451e7318
+AdditionalInputB.13 = 3666e9f27c2be75d707fdf0e08230c5e22ee30729ffd70cfce62ca82ca976a3b
+Output.13 = ea8b6ec1ddc498d59c976921a8746aef37c41a1ffae27d514fc9db9d75a0ce181c94b1229c09d2e484c81abfaf2fdc23124e518502f7dbc7967198a5dd0eef71
+Entropy.14 = 66c1b0ef8bacf016366d2d9ae1aa167591d8607485f16a9a
+Nonce.14 = cea9902a8ec1acbca4b10e1325ca6fff
+PersonalisationString.14 = eedcc9ba4ea501ca23af2f411852b4bafdd92f3d4bb0817c3c47b74577fbd163
+ReseedEntropy.14 = d497e55556a1119c02a0e12dab8c1f8f77a41717a1fe4aa6
+ReseedAdditionalInput.14 = 81da6af97d93abfc11a7040a2a88a16765ef29b6bab5260a6c2c4bab1fa5df3c
+AdditionalInputA.14 = 32130c14e592cafb1da746ae4634c5ebfef08f3184639a447b96ef12b4802df5
+AdditionalInputB.14 = 429b9f442c75c76615492582d6dcc007c91406abfa88208f8b06e80ef2290cc5
+Output.14 = 5c37de235a55d3747744e84eb4416b6e2da0da09f32c29f72cba6343b327b488dfa0d8a603666d8ba33b417c717951ddeec47d549d0f6e091e1bb7daeb9e2e20
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 2d4c9f46b981c6a0b2b5d8c69391e569ff13851437ebc0fc00d616340252fed5
+Nonce.0 = 0bf814b411f65ec4866be1abb59d3c32
+ReseedEntropy.0 = 93500fae4fa32b86033b7a7bac9d37e710dcc67ca266bc8607d665937766d207
+Output.0 = 322dd28670e75c0ea638f3cb68d6a9d6e50ddfd052b772a7b1d78263a7b8978b6740c2b65a9550c3a76325866fa97e16d74006bc96f26249b9f0a90d076f08e5
+Entropy.1 = 200f096b76e3bf2f40133ae6649221084f0afb11f96fe86a4987ae7b1159d032
+Nonce.1 = 3be56f6c0ae289dfc636f96cff5daaa1
+ReseedEntropy.1 = 895133f4f2d1be25ec929d42e904dbc7749939ad7022a90360a743fd2c3f483c
+Output.1 = bf12bf4d8eb6bbbd9f91a2ef48c6bc6524a133dde3c8d4f13d4b5cdae3b9e041b98c8650ada9e1f2b5df01d875470b220cacad0ee887080c271929f695204b66
+Entropy.2 = 1cc5a086831fac6ba046b7f56c4ea5ba7bcf9d851b5051254c4683bfed7a26f9
+Nonce.2 = a8d42ca3b08c9c974fa2c2eceb5a71e7
+ReseedEntropy.2 = e8c174c621af92c5012fc4caca8d1fb72ea7998f5f78a6cd5f3f250f330f0c74
+Output.2 = 6654d831403693591476213bee7bea644c5058f93454e89ea5b348bc5354e2d8abac00d53b3879e2c89bc8f490969e42d738ba37432822df859d631cfc86cd40
+Entropy.3 = 6ba5e815274e5cf4b2467743a8333c5c5292329a96f0aea4fdc9a1808b312c62
+Nonce.3 = 2abe3c2f11c90ec9b684e1cb3fb0bde6
+ReseedEntropy.3 = bc7257f625cc1095366d7eddb793ea75ad2c5a475514d53056659423e54cd001
+Output.3 = b95f8d6258515a67c51f96f8201c0b5445142cde38dab3cff2b527a4e5dca5eee15f79cf073345f3438b1cd507b2fe6ce1569707fe0c288b76bf85e1bf1a0419
+Entropy.4 = 14598d23e61d003bf321a2b4816f0a7ea3ef6de1ad6983f93f26b1c1630d588b
+Nonce.4 = 2fcefe8c6a93cef35a925eb023179f02
+ReseedEntropy.4 = 42edae478f8ba6d45e97a43906aa2a623ab60403f5f60a4c40548f0dededba4b
+Output.4 = 766ae36c6e9c482c6fa2e7fc1e251dc35b2e2ae645a79c2b8d5c0bd7f520b0f4de1b68419c4dcea07516e255e6cbe96007a25396f93f781b36c9d2ca32361433
+Entropy.5 = b553899082c7835484a2cb1114ceb18fcb26a7b01db8d7cbfcea9c35a64e111f
+Nonce.5 = 2e814d7171736aee9a47f994e7639edf
+ReseedEntropy.5 = 53ff45e728979cbb9054dca930da5a54f1c603375621b5c8be0652132f587f0e
+Output.5 = 0693d0a13fb4848dcfb5bfe4a9a02227d3984103ce39bb8c40d7cb224bc9281087d797a5333375052bfc352ea88da1c9368c3e250e095b12091f6b6f12605f46
+Entropy.6 = cb15c90bc72df4a4aded92e9a85f0a23019fbf867b5b027a614a0025f9f3ccfe
+Nonce.6 = 3b426df8fc90b5bac1f20e8d32487d1a
+ReseedEntropy.6 = 277098c4c04f2e3f47a461e70258d629fdac97e040f13d4ba015160ad7b537b9
+Output.6 = 75328778fe7a63dce1b7c8cedea9d6a9d767dc81791df0481983abfa2d215ae536bf76b5992a10c4a5cb06858b5a4e3c2d8ba4ba9912aebe960393e81e28aa69
+Entropy.7 = a02de2e53e9b72853511acafa59028c358e8dc4a1c70834d4350658b8999acf9
+Nonce.7 = 2da017fbfc2b13f21bda1e70de06744b
+ReseedEntropy.7 = 14e7c1af8760d64c74668dd50950835d9881e040ecd625e0025d8c1363bfd764
+Output.7 = 09e04791c2f9bef5297854065212cf1be44c2a5e28e8f90dc184d4e76c6dd09449859e66f45b7e1f4cb22ae51b8d0c537445b7d438b054ef9c7cc7f5a2ba2e19
+Entropy.8 = c9ced65013ee88a54ee90d95ca6189207c22d7fd93f569ec11bf694243b7aa19
+Nonce.8 = 4b3b124b7e7f83a88d83645633d7a86a
+ReseedEntropy.8 = 69c08576b88d957abdcbbf038ecb6db865d12b0b0a7d420b64fdb03a26190828
+Output.8 = b24af1379b88da5fba9785d8ac5fc9fb53cc3db5c71ad8002a3f0862f48487addcf42ddc193bc9088271073026c33cb1b8efd77203d5e9bcd88394e443dbd573
+Entropy.9 = 959ad6bcd9f6b2a107199d9593b7f633ecb030246cc9860a41558834070d0a0b
+Nonce.9 = 77841f79562da4e48a665645410e1569
+ReseedEntropy.9 = 213da24906da06ff2b9beb1fe504149636a8acd67001fe326bfabd038a7148f3
+Output.9 = 335748e390ea7c23193cdf672f3182656b9e44e73aff8f38239b0657d8258c2b1d40458a0fe201010b36ede62206ce67c198323b7cd1d81b61aa25a0f5211e95
+Entropy.10 = b9ffca2a28b4b535c2ad53447a2b537c5fd673d2eb2a6e980e8434ec7bec21a2
+Nonce.10 = d23a376451fc7e0a6a0d20159704e9fe
+ReseedEntropy.10 = 27de4e53ba25e74e08a98dc2b96df439fffa0cf211a522c0a92ef1b60830c308
+Output.10 = ebb300303bf8bcb9771a2fbc755359cc8a8de2d8245bf4acb2b516e2a8bc7191ea477dd84a4c5a19c2c4cd09b8233d58015e4fe9c0f0c601768de0af3f1636ac
+Entropy.11 = 4ce24a78795507a537b32c127d949c7df90322a8d5038e259d4cad7d21889e09
+Nonce.11 = 1ec7848691ce551876028d24c4d974e0
+ReseedEntropy.11 = 4042584f1c000059c2a1d73c6028567b12d5ef2adac3754f32f41a61ea65fe06
+Output.11 = b5cbd3ad01d216eb4873ae66244cc6137fa7b46cfea2dd603b4eb7e2ca0a92cfff78c469c4088c623dc2722b187fb8783b4ec10d0c93037dc213d414d936cccc
+Entropy.12 = ce8dafddf08f0321b0f07a825282b4534011786f04288678cbd9f340752a9ac6
+Nonce.12 = d92ae02e9b540b68128419bb628b9074
+ReseedEntropy.12 = eed6947973735b05dd5468a662802151b30fbde6c956c8f068546c9462cea787
+Output.12 = 496f69fa8565558bfde8b67e990d5f446a7cd668ba0aa10d1eb1710ef64798d7d8c7e08db654409e4c626c0503f3779f14a9b2be22905fbf0c49c30570024953
+Entropy.13 = f3ab5125ec2dbb3dd98e4f0253af3cd23a85f4f0cb01c745f421032b4f0c8633
+Nonce.13 = 85204376c77ca3a99a6621354991f05a
+ReseedEntropy.13 = 69167e80478389ce33426502a6f7dd96d31e2cf7864bc8e08caf41a0bcb6e774
+Output.13 = e6adcd3529afd0557c1951b63256c6b7b423b12710b5f4f87715a8ff2156c07cbea53f29a67c60b010dc4c457504dd8ae4ae3f92dab3c2c46310f4616290cab0
+Entropy.14 = 67de0f88bd02179381c03be6295adba3c102f5ee74f85a96eebead925d0e80e0
+Nonce.14 = 9ec1ef1fe9ee308ea9c4d2447b9eabea
+ReseedEntropy.14 = 1251331a10f9fbe938485858352470c58c4729a9d9c47c645d0626152ddb2121
+Output.14 = d669b7d6dc83b16e2f8191d216ab0be3523981b4cca4020d589f4d79b8926838334fbb7ef48265daa1091ef285fec2786c81e71be4392c8244e436598d0af391
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 6f60f0f9d486bc23e1223b934e61c0c78ae9232fa2e9a87c6dacd447c3f10e9e
+Nonce.0 = 401e3f87762fa8a14ab232ccb8480a2f
+ReseedEntropy.0 = 350be52552a65a804a106543ebb7dd046cffae104e4e8b2f18936d564d3c1950
+ReseedAdditionalInput.0 = 7a3688adb1cfb6c03264e2762ece96bfe4daf9558fabf74d7fff203c08b4dd9f
+AdditionalInputA.0 = 67cf4a56d081c53670f257c25557014cd5e8b0e919aa58f23d6861b10b00ea80
+AdditionalInputB.0 = 648d4a229198b43f33dd7dd8426650be11c5656adcdf913bb3ee5eb49a2a3892
+Output.0 = 2d819fb9fee38bfc3f15a07ef0e183ff36db5d3184cea1d24e796ba103687415abe6d9f2c59a11931439a3d14f45fc3f4345f331a0675a3477eaf7cd89107e37
+Entropy.1 = fce31ff0d84b134959c8a3631668dd8126eb2ff9f40a0d1d74a371b1d2bc523e
+Nonce.1 = 2e18419b16aa23d2230ef878371981b9
+ReseedEntropy.1 = 75fe1b33ea930b2573c491fa892c15e09911e3479e127cd6f86ecb89568e6ddd
+ReseedAdditionalInput.1 = ae1552906d13a34fadd1e3daccc1e9075dae64bfe80dcbf6921c96df8897929c
+AdditionalInputA.1 = c9bddd01237a8c4610c61622ec28a80b811c288c2dbfbab496b49ac15e2e540f
+AdditionalInputB.1 = 899fd8d36215cb4ecba7df3337ce5060fefd63fb7d6381cd0db7fb9ad49293cd
+Output.1 = 88fb20e47ee63865fa9ee19a7d4f8c1b48948af176b5783a28541eba3ac67c58b933b5937e486e1fc1827e27e36bd8f86f22adaed794cc571cf625442f82a89b
+Entropy.2 = 944df34ca49cadbe78d507ad48ddead903a43f6c2b7fd7f76980754458ef9121
+Nonce.2 = 55c02c461be38ac2919f96f31142ec61
+ReseedEntropy.2 = 689a4f4d06e249db862399e58af510d80967fa7c07bf1bce0dbc786306273b57
+ReseedAdditionalInput.2 = 90caddd0c97fea34ed6dd9676771c918053d88b1809d5634d5c5cb8935b4075e
+AdditionalInputA.2 = a4f05fdb448d8c2ab7e4c165a315351086aeb194833808b20eaffd55d119a2d2
+AdditionalInputB.2 = b18355c75f0dd40920a04ddc229140abe22181d12c8661948153e9c69281da58
+Output.2 = 3d7ea8046f78493ca776537755451e5e7f063fcb4d53f6a622764048c25bc48f05c39f8c8d79338cf93ead21b455cfa59c9b1bdd81eea23d75cfd63ca1fda9bf
+Entropy.3 = 3bb3b5112e2fa8c37b22e499ad910d2a7cfece4ec114ada1e52ee545be0ce0bb
+Nonce.3 = 54b5d6431b84aa207b550acdbaf4e0f1
+ReseedEntropy.3 = 0da082edb7d7ee0349c90ed3f4d4cd5975fa38a1e795dbef9a92af71118cc867
+ReseedAdditionalInput.3 = 4496e579c086e6590ae5e086331fc5b8d6854feb94b649bbf8e212ddf1cfc527
+AdditionalInputA.3 = 58522d812241563fc16796d793586b1f7fdcbcbe2d807865df4a20e9f50430ea
+AdditionalInputB.3 = 848a24b8452fd6792378df382217bf72392e9435375d27b3e70e88c79c9050c9
+Output.3 = 3c644fdd0764250c7dc7e8f02d559bbcbef8e7f5391626d563054e6c0cdc11408cca6dbc06e573e6d5719ea77a19913ae12753c28ffce872b13f484377e2339c
+Entropy.4 = 1d602aec1601e2ff65f16628bddeac6697713d2f5d4335c7013507885b0d50c9
+Nonce.4 = 03a5bca1bfd385ac0e14f1dc9da417bd
+ReseedEntropy.4 = 7c5ed5898a5ff49b36f7aa8d38600d33109035750384fab2be26adc85909402d
+ReseedAdditionalInput.4 = 3f1164df7265fd56e701d51ef1fb3996d2cfc7c355873653d127b9e2dccc1da3
+AdditionalInputA.4 = 02a7d68d2e6f4de2a35c97e7aadf25a2f14a9b4076940050ffe64482e62718a7
+AdditionalInputB.4 = 40b4ff19609f6266e450e1cdb184f1aa0b551a05b912a1251b9caf7ee15a7184
+Output.4 = 5bc4e4c09a19d5f394ee6003437843974dfe4430684d394d6c7cc8eb4d7a722c615707d0ede88ef1fbba81e45fdd93d2096632cf21b630dd933f52a052aa9be4
+Entropy.5 = 57548bee6b453da6b0e650aa0445ddfb13238a3c647c4f410ecc522748d8a5e8
+Nonce.5 = 01019daf8aa3bd7279d0952bc7a30c1c
+ReseedEntropy.5 = 80bcb9b9506c8117e84cd8ae22c4d9070a950e049b597ff482c6f90809f4ff22
+ReseedAdditionalInput.5 = 174a42c248dd176e65d9374870bd78cccf3f3b1b5ca222b0fa3cb128242723b3
+AdditionalInputA.5 = 86d885e924646eade6a2d90af3185f11776c409001f19b04283ea6f21a25ff9f
+AdditionalInputB.5 = 22d90581a8550f0f3cb2966bf18c046710797d5654904652aca27d1c73d75ff0
+Output.5 = 67c326663c1231a3f5d6be9422300bfca1641c3a3ddd1b07b85191caa134af4cfd61e47b732044fcca0d45fc632377168574639b684d3d58751bc302bb2037d2
+Entropy.6 = 488f11f5215e5a3d2dd3a6b8996242df86638a9c20d80bd94fc1f6da1d9a6550
+Nonce.6 = c0f331d022e80fa21ae0ee815937d2aa
+ReseedEntropy.6 = c7326a104c33ccdc06f6139355468aff1fb543e3e9675e1dc2c7ae0b42ce4ab7
+ReseedAdditionalInput.6 = bf61d5694681108d735d4d15f0ae34588238f946b33ff3fc140da26759bc03dd
+AdditionalInputA.6 = 5ca247c681b0008a4d4c2aa0c0f582c519e1b513494305aeb1265be94cde3f5e
+AdditionalInputB.6 = eb5f567883ece6efc4234f8ef35c26c45b56909b96e47fd21fc61ed56ebbb3cd
+Output.6 = a6e6c9989be3e19b08b2a23a25c15face61aea671a1904bb7614bc2fc51291d101b737eb3287f7b0e686d6e8b38099853cd8c20ebcd82b1be67356911c62d894
+Entropy.7 = 3b1266f1afc07a3cb212a779f32976e3334a3432ceec46b9d9d0f0f7b1ad5b1a
+Nonce.7 = 87e0b3c27cc5573e6cec5e3bddda943c
+ReseedEntropy.7 = 65cc6c454a0341e15fffb5b405c40e7774980654c62b06012f60c2c3a784b029
+ReseedAdditionalInput.7 = 3cb75a6762be008d71ad48577672f2ccab0a3f6884e661f4270edf8ecd8ffa1e
+AdditionalInputA.7 = 3791e55dacf027c828e76eabe25ccad33b74278db85fd273232c733623017c8a
+AdditionalInputB.7 = 01ea3c8c6663dedceccf311d3af3c279e400de3d7bddcdbda40d786af1d96c7b
+Output.7 = d46648fa06db61d4d070cd92f4202110ff076722e5fbb49592c0203116ce8d38733e44a8c48ae7b7e762f26714968f15e6e43373bef1a7a672be70fa437f5fed
+Entropy.8 = 0204774158e7454935f3f9ade7c6f046cc2db526cf38249de03b23538b9f88f7
+Nonce.8 = d0912dc4922aac887026a238b9413d7e
+ReseedEntropy.8 = 1898a3701c360e173d873799ac6ab02d52dc1a45ccfe1c69cd9e8a66a28012b9
+ReseedAdditionalInput.8 = 26721f70f3516f48245f053392d32f48ef7c50ab6c050c92f671068d79f78375
+AdditionalInputA.8 = fa106c6bc9cab8035d64a2a18bcec3435d5fb32340c8367d5f2c1dd18f818abf
+AdditionalInputB.8 = b781b4f52da6e701f4af17d6c96b3e7d867ac7012c43356a5afeeec48ff48637
+Output.8 = f9ba4c30d33d85eb8b99eacdadb1c1459466b9c9cf24e4c0e0c4b6b058e93b88250d31896b738a95ebd3c81c3a1f9cd09228fdb3aca30c25adec990c53fc53a3
+Entropy.9 = 428e20b96dbbfebee79ab1db8c0cc1fb40d0009be9dbd58f3f9b37a74e1e56ec
+Nonce.9 = c93a22c9437f022becdd12ffaebb0fc4
+ReseedEntropy.9 = eaaae4be7121c8f5c073c791a9a18393d9ad66153bfc98a0d645697a463928a1
+ReseedAdditionalInput.9 = 823e71bb843c54009e8d02d2ec0e5d7b49f0d53bc0f0c383f6c9273a25a6f312
+AdditionalInputA.9 = f0d5ad129999d710f8e5504c955b78d052a1cc6337d4632eaa85bdb985759ea6
+AdditionalInputB.9 = dd1078198db2dd5e7e6325256236eb2be2620ee0ee85970129808fd1640bdf41
+Output.9 = 993a6a73fc63bd506293ba73b76cb2cdc8b056d2f87e21079125624399c2fbec291697718793db1ffdd876d27a689ecd49e7c9f5bba1910691e56f8176eb844b
+Entropy.10 = 72e7735c3b8b44ca9557b2939034ef4c383d23bc68cea0fe3552b5ebd4885a9f
+Nonce.10 = 35f4112d4de39705b6ad6d422ec1d59a
+ReseedEntropy.10 = 7159184bb4628e7ec795f94f054f7bbde9c364c60ba3f07670dbf615d1faf512
+ReseedAdditionalInput.10 = 896898b9a47ebefe20cb20141a167648ac0aa8151f491bd1d13a00f5cf6f17b4
+AdditionalInputA.10 = 9cfbbf1bd7b6f55243672759177fa906016791d45d1ea502af2cc569e6d7c882
+AdditionalInputB.10 = 4d9add7b30f3a855038bcbbb9a3cf637be18ddd1c6721f4cb2dd654e8ef2571c
+Output.10 = 11afdc0fe15c215130648b3dcabd8b7625ad20fc65985a70ee0561401bb0af02d5c428276512347a3f4b76ca997caad178a7f8cdaddfd77d5fe735755e7d37ac
+Entropy.11 = fd0692716b92abbc87534e70d0fc5ad07bab29682e33f43001ecdad7ab92b326
+Nonce.11 = 4f3cd8b42ab890c77eda4afe96c53574
+ReseedEntropy.11 = c551f57927680d8eb78908701f34d8ca7e031b7a252245ee53b83dc9382ea52d
+ReseedAdditionalInput.11 = a84119f773b3d3bed28dae7c791369f9e9ba333ba6037370db64c0b6557c1137
+AdditionalInputA.11 = 6b0c619f00e04ea91e2e7cd37a1f4d5ae72efb552af55d273722c371d968ebc3
+AdditionalInputB.11 = b58ffd71fc2166d386c94275bd97e436177dd0b5c6fa9e809760c84910b8e6f8
+Output.11 = ddb767ecd3b3d2cdc925e70b9019d551185fad94285655c2cb96dca7feded81dc61a5981a445965f59f9862e9a63da20e3b2894861d62ee99ecc5f90467cff69
+Entropy.12 = 8e1b9f2828c2a798672c6cb603396bd4b73dbce819487ce8155448f026ef1607
+Nonce.12 = 60f4a076cdd0a2a3f332ea1867db0277
+ReseedEntropy.12 = 07582e14ea30d8660881425f9d56fa005c4fe2f4282ecefe74c9d9fe5954211d
+ReseedAdditionalInput.12 = a24c19bf7263fa8b5264ad71360cf5866af43b638b3904b8fa32188e4c157840
+AdditionalInputA.12 = b25007d2d4e5f81c3b7c8d49388b8cd013aebf00e92d904f0d129797ed6535d6
+AdditionalInputB.12 = 3f1160a6770f7141eee7590db2d2f74126e728b80a3a5ead5aa3675000637ec0
+Output.12 = 7b9158c978ea13ef7adfda03fa2a011b780e485bc9bbce327a958b980c7338df222a792aabea0f7465b4386e1c5108cafb728bbb660f8534c6252134323c39fc
+Entropy.13 = a6e3c038c033b31bc92d32c09296f7facefe1e4aaca03c197d1c0354b49758f5
+Nonce.13 = e725a5a81a7b4778ea1ccaec7777231b
+ReseedEntropy.13 = 091fe53d98c7ff8e64179145027ac6bef455a8f4d16730f3123531de4cfb3259
+ReseedAdditionalInput.13 = 959b30406479118431a2653d0f0d08f8fccc68141166fb19db716ee2d78ef012
+AdditionalInputA.13 = 9a0b0de5f8f825e758b9fb28e2a06f9fac290a1611976ca9980925089f5ee6f7
+AdditionalInputB.13 = b3e422e0ba29e8823696cd82982258ce936a51e80e6408700a2bd5ca512949bb
+Output.13 = 7b8ab6d879aa2907e441db2ff60c840b684a981f8d0867c0f7cfc30323ee321e7fb1adee16adb6c314b00ed4115d9cb57608d50f2980c3a1fa9a242d1a5ce409
+Entropy.14 = 8b605635138ab196a96192ab3aa695857ffd197a5520ec65e2ad44d050bd97c4
+Nonce.14 = c0a259d4cd872b351ac60182a67c4faa
+ReseedEntropy.14 = de78f45fbf92dd2e8a1f19e6cc9cafcddd93617d3a1da401534507f52d63f51a
+ReseedAdditionalInput.14 = 155febedef2354b44e86eb66d5730c6d6c9c7d49977882dbb6515b836747fa34
+AdditionalInputA.14 = ae78dcb812845e9f42e4fc867581181dd846c4fe98b5b2805f551b6c407bcf5f
+AdditionalInputB.14 = 5f0762172dcdc6407375559ac8b286f4afcf5202a3e7164d72fd5e353f90a141
+Output.14 = 2696baa67d11fa125a8dfd4ef889e6b31620ef6fdde583506c4c9c7f93c4eea0552c08ff8f00988ef6124ad226cdcc043606c54b3858ef6220091eaf45906f82
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 5bb14bec3a2e435acab8b891f075107df387902cb2cd996021b1a1245d4ea2b5
+Nonce.0 = 12ac7f444e247f770d2f4d0a65fdab4e
+PersonalisationString.0 = 2e957d53cba5a6b9b8a2ce4369bb885c0931788015b9fe5ac3c01a7ec5eacd70
+ReseedEntropy.0 = 19f30c84f6dbf1caf68cbec3d4bb90e5e8f5716eae8c1bbadaba99a2a2bd4eb2
+Output.0 = b7dd8ac2c5eaa97c779fe46cc793b9b1e7b940c318d3b531744b42856f298264e45f9a0aca5da93e7f34f0ebc0ed0ea32c009e3e03cf01320c9a839807575405
+Entropy.1 = 5e1a564a70f593c1c0b07c9906455bd9f5ce7ad92eb344a9cceb12f5576d7d9c
+Nonce.1 = 45e093e587341f6cb8f3deffddc4dc4d
+PersonalisationString.1 = b61714ba7ed339a24635c0bd4f4db496b74631ebbcd14f648de71bd6d7c197ff
+ReseedEntropy.1 = 4fcf7ab9daa808ae81eaf728dc74bdf4c123a1e2444e5118c8040142fea50a0b
+Output.1 = 4d56fa065a3b98f9ce21701c00c833bcd439276fc70aaa14185b39f34d80232565c992e2f0fbd9519175751b4057c21ea69d4c553e30e3dc5533d4abd97ab19f
+Entropy.2 = c32238773de8dfdf3bc319a64631c3caf67ab0716e8946eee2fff1fdda96d2ff
+Nonce.2 = ae2b3a16b031c784b80b94b45c8cfaea
+PersonalisationString.2 = b29400e49e0fe24c6418c4da38417f857d53ed61070d467e34049f613568978f
+ReseedEntropy.2 = 91c36b0c87587b663583f636a26303f308b7a5dc235cb18086d4e350bd3fb631
+Output.2 = a1d5a059e6f3c25a1b10613efbfc483095cc257fd98ed2914379bcd8a2ffca2b3d745c32dffdb721ae7a9dea85e0b7a993dbdfec01acaf1097dd9f52ee223a0d
+Entropy.3 = ce80e5656090e097bafc210370213d46f358f77903fcdfb877a0e57f453b4f7a
+Nonce.3 = 4515c86448eda28ee63817f36a282ba3
+PersonalisationString.3 = c7875ccf1e5ef1f6d7594296024a71caca6cf53cc86e4e02f86fbb03506fa9a8
+ReseedEntropy.3 = 8ce6f56cd5b26de59e01ea11509a23e598aff809dfe07df7e4994c99885eb94f
+Output.3 = 41cc565ec349c978bf7c4af28a6ca9b1a59924b23a581a7f3b43ae089690d6ac262c024fc16d56d1b436c8004522f87f5e8ec3851903ea1ec874505a206d1659
+Entropy.4 = 417b1a5aa4694acc25ae2fb18ebee5055d691f8908888e608862c831b9936eae
+Nonce.4 = 53a227b0468602f6d5ed623b6b552f48
+PersonalisationString.4 = ecbe55cde21a7d74f03408e5fc8b4c162ee06651552fd32a6d40e06c667f95e2
+ReseedEntropy.4 = d1a00e5bf56519c127a17ffca848a2276b02604eb01b9283de5857fa8d19b437
+Output.4 = ad11375cd7db354fd67302d7065c9ef36dea373f744114ceafeafe6b91479837ec6fd9cdfc29220e84608fb8c1a59bde7022a8f1e31bef034895cf06a8085188
+Entropy.5 = f7f9bc798994317ecaaf3054af3f65494aeb2a235a6e7668afefc4317757abbf
+Nonce.5 = 5d9789c2774b8586dcbad413460b7cb1
+PersonalisationString.5 = 8c188fe310bd4200bf84b57617ac0daf2c373ab21df7b0e561aabbd2e3ac19ef
+ReseedEntropy.5 = ed53ec2bd6ed5458a5762c38b5c59282f6e5565c3babdde661bf602a33d6f08d
+Output.5 = 27e7cbebd67c9d82bc5e796710b570e499e0bf9ba39054bb0c989a045b275f5f0c089e5a01ec0bb74cf29e553dc2b52c0b53a3037b6292a413299c9d03aedff3
+Entropy.6 = 3a670102a446db0567742d42eecda30469c96211f8e7fdf8bb7201cc5e602481
+Nonce.6 = 9bf138ee6af50a1bc22749da1f36e6fe
+PersonalisationString.6 = 16b8e84e249eeb2d26f89f4797f3ff38a068718cc03d14c6556c255e1cc6f66d
+ReseedEntropy.6 = 13d8160e0670aca840d95e0c396115192ff8418cfa459734b6e35c4a4144efb1
+Output.6 = 5ad8d437d21a11c37f9e950aab0e741b7ba1798a9fb8eb166d40eec42f9c07d272fe7d95b155611fc6e5a45d9e355a55261a28db17eaad373c46b4eff6a14b59
+Entropy.7 = 05eee5cf3a148a84f14dbe86cbb0104e40893bb0b4a712247b8dd52e4a66ccb9
+Nonce.7 = e1e5c4830fd73e87e6346c55e216d075
+PersonalisationString.7 = bc41aafbcc7e63c02d7e9c3fb95518b0188867567c65735c12f13f5ab90e788b
+ReseedEntropy.7 = 702a6a0588e72b9c952743645e3d00b35a0c8b0c2c39da09a2e43e91b4dacb6d
+Output.7 = f7de81c26c2f78b42c336a8e0cddde2581d4d06d4090750eff3e43816f6ea33f56beab6f78793ac45dd4bc0a1d34f49060f72fab0f8f31ac5b7e980e346e2f93
+Entropy.8 = 6c2aaeac3012fc4acc8d35c671f5d88fa25f50d8c80c031ac5e894220bcf6fbf
+Nonce.8 = baac5cc170847c815a76fe6e7f9a3da8
+PersonalisationString.8 = 8db29b7ca6684a13ede4025f6000482a379f745604a7d5bcbf60a48ef6cd8db2
+ReseedEntropy.8 = 64e9862f9e663661b32a8e27a70b2a3c0ecd3f1ca3c6e199995b1b587ba31e0c
+Output.8 = fa74549270c648472263e0a79efb8239f0369679cd461fc68734f10432cd266b5bd2df0b50cd307bf479ac63d5d33dd65017ad51b8b8577eb42a45acad373fc7
+Entropy.9 = 23881618de81ab18a1e31596ae03632a500ee8d751c4bd30972277e3abddb48d
+Nonce.9 = 88cd130a12f92aad96e16b13dadcd9dd
+PersonalisationString.9 = 2d9dae1dcd0b7b57108880c322514165240140d875f2fc829d9b2ef99dd371c8
+ReseedEntropy.9 = 8575f16ac42dce0de11323905354991f1b2e85d75c2c89302f5a634cb0da2437
+Output.9 = 66308b40e12dcb286839f24d88cd19eb46c4490dcafa92d8ea19d0b26f73e15150e92c9e7918a2f18c9b26599c9f19a813b4f01ed566174127feaefc5d151ff4
+Entropy.10 = cbde0b364db22d5107fcb29b0662847015062fbe180f9dd13f8b6a0fa79ce7db
+Nonce.10 = f1294dd5526d94972eb08fb3fab783ff
+PersonalisationString.10 = 7b1d46976d6d18f0ad0c39286b9a9d5549c6aaabdf1df0f0285d2eece4a29a58
+ReseedEntropy.10 = 3d71f3c4f5eae778333e65315664d44d3a0a58865bddfd62d22f019dcf2bcbdb
+Output.10 = 56f71f0d48804e0f2eac77f5d34f7bdc5e73b4e6421d30623a50860a4efb449b4bdab3918ba94a898d013f1513a40145067310744e9a4198c5d3150fbdcab5ba
+Entropy.11 = 8bc68fd8e3e4254dd1cc178cad2271961967331f3a9bf3a4b440407ff0cd5747
+Nonce.11 = f6d92f1633a1c415cba8d13597965f4d
+PersonalisationString.11 = 7f5de45bd123b5f835071d51be22e512c86690df17ac9d2109ddf8e2d7d4a65e
+ReseedEntropy.11 = 2203afda11d39aca507939b0cdc1b71a46ec50c8fc75cad87e8664c143913d07
+Output.11 = 5e921322aaf8030122a6814c9e33a2b67c02056eafd7fca457dfbdf5527d3ef7bb9505d969dc353155c7c9234caa5004c3fa6c8e6380b9e25cd6c2c36c840fc6
+Entropy.12 = 22e2db91efbe30b53fa643d89e607a1b7eeb1171caf9a50af5ba5d8610bec9b2
+Nonce.12 = 7e7d51f89c10aea9c13ad03a17a6f208
+PersonalisationString.12 = 8a7bc17552a552db2d6c96bdfe93f4ed61f1b11bf9f6903b4fe306638fe0357f
+ReseedEntropy.12 = ec219ccf1f5655a2481c6af35d8866f354472bf25744731141bef7463687fd28
+Output.12 = 19c42f82f8ffba0db3587dbddacb95376be4ef5546f33124ffc34da499bbdcb15a17727b5f414d010c22728e8f9c721ea0e0ba5dc68f7b29247bfd04946b9dad
+Entropy.13 = 4f5673ce798b07ee691b0c426d529eb6c938f16ff330472fc6f60680a3549fd3
+Nonce.13 = a07df7d8762412dc61a9d78ba0244d5d
+PersonalisationString.13 = 9fdcb17da44192caad6b570dd5e75be66c3b303ca7c14bf720c94a2def34ddc3
+ReseedEntropy.13 = 4548efd4fdc06df54580f1426e1be1455f1e6d724b07480974a4c6f16b16a190
+Output.13 = a172fdf2cd1ad46da5a90c00fe392bbb5b3b4405a077108a1949b54c052364ebdcdad34eb9eac93ff91e5e13cc67f084331021f8db723b46fcdc1378157a6d0a
+Entropy.14 = abc9f9d53810de8e38bad119d5234017c66ecbd41021861fa28256e73d3f701b
+Nonce.14 = 194d4d4c8e64bdd96cab79e23d2126e8
+PersonalisationString.14 = 21dc8141c892ea173637525753c11f1158fe74975ee55ffe76c8a439a369fd25
+ReseedEntropy.14 = e999c9d8b6ecae35a4e0741eb944123b9bfb82424dcae184ee36bab4cedd5470
+Output.14 = 30c328b6f8cd1ed86d106d40b724f942bdbcd903811f4b8c9dd0d2546638750e51427ecdb517a916f8ae11900c4ad73db1bd1f235cf8cef81c60c75cfc4ee323
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 174b46250051a9e3d80c56ae7163dafe7e54481a56cafd3b8625f99bbb29c442
+Nonce.0 = 98ffd99c466e0e94a45da7e0e82dbc6b
+PersonalisationString.0 = 7095268e99938b3e042734b9176c9aa051f00a5f8d2a89ada214b89beef18ebf
+ReseedEntropy.0 = e88be1967c5503f65d23867bbc891bd679db03b4878663f6c877592df25f0d9a
+ReseedAdditionalInput.0 = cdf6ad549e45b6aa5cd67d024931c33cd133d52d5ae500c3015020beb30da063
+AdditionalInputA.0 = c7228e90c62f896a09e11684530102f926ec90a3255f6c21b857883c75800143
+AdditionalInputB.0 = 76a94f224178fe4cbf9e2b8acc53c9dc3e50bb613aac8936601453cda3293b17
+Output.0 = 1a6d8dbd642076d13916e5e23038b60b26061f13dd4e006277e0268698ffb2c87e453bae1251631ac90c701a9849d933995e8b0221fe9aca1985c546c2079027
+Entropy.1 = 4a92748137f999160a6a75a2a14bc87863f7d27aef0d535c72c7f6c2e96da245
+Nonce.1 = 3f1af8a23af9e13095a0ada3a96218db
+PersonalisationString.1 = f7fcfc356cda3a71c4c4729a2ca63a0be6b7178612e643ead78a44efa35d1100
+ReseedEntropy.1 = efa6fda84b4d01b116b39dc514baef49ff51f01841b1949e94fdee2ec746bdd4
+ReseedAdditionalInput.1 = 5d20bf1e3a06193ab9e1e025c30059149030b1996b727ce65d07649b62fa1bc7
+AdditionalInputA.1 = b53f780806a9ad5903acdd1f851f0b0fe72a3390663b40682075b25ac92c0fd5
+AdditionalInputB.1 = 46e84839a10ebb41694e55fd06424e494be580c5e18e4744df8a6463ff734a40
+Output.1 = dc676285e8dcfccffbb1c2bf414f4b20fecd3e99e7a9f4d90bc86506054dbd444a7c740f48e71f12931e864ee63c690374b14d1820eaefc1bf5f0d8b57150b5b
+Entropy.2 = 0ab7995cb7936f22fea03240fd87866ed39075eed94bbfc6be785ad052552ab4
+Nonce.2 = 5f1b0e417d867a38ee0994f96ed6e8e1
+PersonalisationString.2 = 4305a7e01f931e2dd76830cfc38bd166b235934d250584884f9b6a4d7837838f
+ReseedEntropy.2 = 5cc48cd4c19e8c17cd9fccf67fb4aa8008a745f922f3e7e51fd29cc1c1490ae7
+ReseedAdditionalInput.2 = 89632c6a52e92573214f50289ac743165ec7b22e6c9ef95be8ee4a8d3ad968ab
+AdditionalInputA.2 = 9bad67ae472d901d3eb044c5394e4968b2c2bfed1fa65103aa35b121d7eadaf1
+AdditionalInputB.2 = af715eb5889f22fb63d004b3d7ed485c60b0342d4af737ac32e07ca5546e74a3
+Output.2 = 9237d5a404f7eba157f1d9b8bc82f6ed1f829925c2c690f905b1030ff4b3a592f5e221e99d76c1421a41e8f74bc1f78ab4a77001e39d87d42f4260cbaf4a40c1
+Entropy.3 = 5f04399165a2392f61c588fe646e9d8cdc9b2c356f7b00502716dc433ecf913d
+Nonce.3 = d3c9b9336bcdef76be6da42d67b77c73
+PersonalisationString.3 = f31cb8ec30e087c6f932500877b9d7b3c47566cd919e79d187340baa4d389ced
+ReseedEntropy.3 = 7362fd81355adb2d4221fd66a85ecd20e949b912c4aef9c12851b7916d441867
+ReseedAdditionalInput.3 = f811563823d046625642e052aadb89bd6414673be1419d342a7e3dc3bb1add17
+AdditionalInputA.3 = 6a06f30779569b7d561ee16bd52eb8fa7ce60d236e8192f8018310d901adb654
+AdditionalInputB.3 = 9bf489bd45e4dd75207dbe7339b9e0466f5371822f8e90dccaa2a31b3c788a2b
+Output.3 = 00d88e7fa528f830be3ead61ddba1298dcad366c0ab1a4e90f49f13587b9326932d8e1972c4e7b335ceedd2fb17d334647ef6f406e3082a1c33ff4de986a5557
+Entropy.4 = a7a05361d428af23a0d4f132768a4b24fbd78e1f42fb46205d7b52891b2297a8
+Nonce.4 = 8177600cb1ffea161277a839ad5d05fa
+PersonalisationString.4 = 79ce51a1c295c9a38d11db5023c349fba347e193961c90af9e2e7326420d9028
+ReseedEntropy.4 = 664038f3e8bfd6b0ba6552e83698b3f4945f182c400bffab74b46f07ad42764e
+ReseedAdditionalInput.4 = a582b450eff21dc5c0bbde225cf902a4858891ff42b2cdc5208091106448582e
+AdditionalInputA.4 = 1fa8be0676ba5b09b84d43ac44c78432858efa4bda7b4aad8d6a7e64d155cc89
+AdditionalInputB.4 = b7368a0e32ea9e176163679219580fd050f7566a318f1b6c5faf1e84e2e9070f
+Output.4 = 56ebc22bd25e87233e27448f3d78d027fd9ab606f00ad17d9c427c7ad88a297b940f044a7e6dc548a9ec12074ac9cb87148b6b2d48d70b24cfd6e20344e7b85b
+Entropy.5 = 2d0666507cc6e1e6ab6d8744833538056722d6720af88d0109d0ef563ec1d13e
+Nonce.5 = cb71964e05721fc4e6fd2279df81ee45
+PersonalisationString.5 = 0d07efdd5a8e152526b7bd5921774ce504f0c4ff8ccaca1d8615e074f8c9931b
+ReseedEntropy.5 = c9218f42a2a5631e757e6e92ccdb848b51b0c9bac8945888cb9fda7ee10956b8
+ReseedAdditionalInput.5 = f8305247d7cca7b065db7eaeeb13abc31871e7a8cd7663c291083c87d9cbc184
+AdditionalInputA.5 = b9c48f3381f9cc54975f9bd46d00386644183f1716b2e04cf1072c0e53f5a4eb
+AdditionalInputB.5 = ef190e7eb3b60f614665638fb3bae566d25e77902170423854601840849e6288
+Output.5 = e62e6a4788657ba4e9b9371d1e72e7b070e58857318f4d3a7f0ef370214a2f4eb4b45d32976af79c7cfdc449447b51714892be31c99230996fa6a18f23658076
+Entropy.6 = 491cc31291ac33e369ded4e7aeb07ee5777f3e183e30a8327b4e564980928258
+Nonce.6 = 4d380f5ae877cecf4d70c6560e9226ba
+PersonalisationString.6 = a32205ba78253d5421fe61be3c8ba8990311fddca181503b2a85b98274506f90
+ReseedEntropy.6 = 57c84abf8e4180a68d843206369a6a5db13e02f99f65751f9222e74b06a7dcab
+ReseedAdditionalInput.6 = b2792641d5422b276a56b9972124375275b0bb2e52d2ea652e53d8bed5fce8b6
+AdditionalInputA.6 = 17a69c862fffd1b0f355716fb10c9fc9fa8dc7e29ec746ed3af262085303a895
+AdditionalInputB.6 = 0beb0af41fa79ec539261c8561176ceda3888b569024fd44caddc7d7b99a9a6c
+Output.6 = 2781006597c92ee68fd5b1791301a564307125de30dfe3830c0bff4827f74be3a11c21fda39e4cffd292cfe74d691e00e91f431560d32fcdf5e6e5a3aeada90b
+Entropy.7 = 44c9d4361c639ee350882203e08f81a5ffec044c35d84e3b60117d45dafb33fd
+Nonce.7 = 42b302faf1981a5c90c684c6d4ae1c66
+PersonalisationString.7 = 6561d6f298205a0bf052edf73dfdd1d58eef8ab6df9393545e1fc7691e23de88
+ReseedEntropy.7 = 9f0efee86b426762f1d65e2c702efe93942930c3f368fd17bb3aafa03e472e77
+ReseedAdditionalInput.7 = 1faf3b762a40ad815c67be4efec9ac0f2ac294c7226fe7ac8a9d68a34609911d
+AdditionalInputA.7 = 7dbad157b098141773f9630cfa4e71eedf36329b92500b65551cecab57ae9944
+AdditionalInputB.7 = 0314f5ea3aabadbc0c3db25f7fd145610ba350b2b278d405d00a3689b6750af3
+Output.7 = de136a0f97447d24ea5160ec1ab93ba7fe8044fe3b8ae869f5c448cc9e27a48e1844d8fae068705b6cd7867ea1aeb5a3f0d49e79ea9f5137694eca286596404d
+Entropy.8 = b5430c9622ac2ddef303eeac62db0575ba071ffb73ecb019f7f3c5b8d73f8a05
+Nonce.8 = d3a30722d6b430bc9e9ae61347744691
+PersonalisationString.8 = 3fb28f0a48d56d8713c859d2fc050cc28ec3a6a10e2060db250f73b21e7983b4
+ReseedEntropy.8 = dda822a696851571aa5b1e0726616ce1122e71dce33d54fb75f23ff2b91af955
+ReseedAdditionalInput.8 = 076335d23db40231634d4c90d2191bbb25a52e2f20f277eaec90e2c06c9fde82
+AdditionalInputA.8 = 5f34c61b82f5516b67bed510209807ade3a6687a3c5f03b294ad1164a4d7a152
+AdditionalInputB.8 = 83d40fd55b12fc4085653330e67361b086bb003a2d002d4f1ac919108e317f1a
+Output.8 = f8d4abc5b48fba894a6e96fb21d2b81c1afca1ed0b0f027c05c3a837e05fe6359a314f34c505413142356d33ba4fbd2271673408813a487c68f6f4560883c475
+Entropy.9 = da0a38a4638f1b7dbda590abb5a37d5935f1e2e724f50cd3fe9ab131d10fdcd9
+Nonce.9 = 7d1173ea9d0c565129e362c39b5414d1
+PersonalisationString.9 = 939238533e73aac1f24670a586368bc54be248136529f86abc6b50791474ff8c
+ReseedEntropy.9 = f5f91227852b78ad755a284a3f43f38e88d3e93f78d44a0d348f1013561ba29c
+ReseedAdditionalInput.9 = 3df6c03d2f09cc64ca133908347cedd611062bf69ea6912686e4244bd5cf421b
+AdditionalInputA.9 = 54af874c0d142ab90777974c1c9c7fce24d43bd56c9437f5c774bff5f5446124
+AdditionalInputB.9 = 4f264561d6f3ccdbebcf3ff5862e4dbaa3aef67ff4bd66e3f25c3af1f41cfec8
+Output.9 = fa04d2d72d5bd04e6b6a585f848547cd84cb185f1882505fa8c5d4add1c8f5475e83e256d8d6e415083c065f8b06440fa1474ef4e84969363dbdb39645407375
+Entropy.10 = 5af6b65908b5461c07d40ec4c98f7c261c082a4fb85c1f040cf3c18f78979691
+Nonce.10 = 55d33b62b425fa0e109f2433777cd937
+PersonalisationString.10 = 63a058bd4c6c72691061d21ac169d2b33d02ddc7b1de1c2ca1e5f610dc287682
+ReseedEntropy.10 = b078b3af068d7e1328ed8f00a0e42a658c292a475043996b10b7056e1e497102
+ReseedAdditionalInput.10 = 2a2afe6e45f1f48b7ab0433120b2b8a37b79b2e6f2ab921f12a5bca9c67364ce
+AdditionalInputA.10 = 072f69d00dff6f5ab5950cc954dc3637bd68555a180b89f1c52a1d47201c02f3
+AdditionalInputB.10 = f8d06bdd5410fd6692da7e23c64b30d1de240b345918653b845b2bf9eac167be
+Output.10 = 8feb4e9d8a899500763f24c57ca1052a4403c2ceaa1796bbc1eb1e26e87fbe0521e7a34d005f9d1e5e2c976abe71aca8bdfa434e803049b759ae717cac67721a
+Entropy.11 = f2e0471870fe34f9b6b59f929ec2c092449fa08771881311c0e81f7af137905b
+Nonce.11 = 3437456db35a5bda24ae47bf87c5be30
+PersonalisationString.11 = 1f8ed16fa86a2484a72b35c1f9701ac694aba07188f69a645182cde488ca1138
+ReseedEntropy.11 = 7ea6cc5ca19b0ee8df42a30101871d35bbc0c3dfecd47865571579b1a8962282
+ReseedAdditionalInput.11 = ab49733ee06c08f8827ad4f83b5b438ec443e138906ca6794cd861c0c028951a
+AdditionalInputA.11 = f78cc7e90dcd9ca2808b85946b686f5021b899413b7e344c3857c009135b832a
+AdditionalInputB.11 = 3d8e21e42c5c0ec988c9d9c590c0ffbe24700abec7bbe9000f3b46aea7132d2c
+Output.11 = 807e473bbeec288e1e7bf5803e56ea91b8a752f4c9e9694dfb869a13344873f379c6b685e582385b6950523c2e93c0335a9f845667eb990ccf0ffde16f929918
+Entropy.12 = 5bde92bbc83a68e82cef67cb60d47d9351c233f3fc6460c8fb61ef557882ee26
+Nonce.12 = f5c072c05d074460305e89f8cecb5b9c
+PersonalisationString.12 = ab1b199978e57f14b9e19d81636bddef53bae42aa78e96c7b3f857578a4c6c3e
+ReseedEntropy.12 = 50d90ce47412cab98e4221efa1ac7cdb788e033fdda4ffcc6272e1b897cc4412
+ReseedAdditionalInput.12 = 46839ec6c103df722e856e1a106bad55cd6601d188d41031e175da097c019a39
+AdditionalInputA.12 = c3a3efb695b68278c63510e079d97406d9f573e21d7b35dd446a14ce68fa0dea
+AdditionalInputB.12 = b0427c4f4d9085144162bd6c1df97c07445ff2afcb186756f34c1f1924dd403a
+Output.12 = 238435bfb26f014c7652b5e6708809435ca058f4f3b6a030ed83aa4152b52ce0bb03c0ec49fc0326cf5caba296b4c918b18e0bdd89ef338179b72b6cc0ad6de8
+Entropy.13 = 480bd3973dc04dfaac134035fa45f2bb92200df8ec468c23c5b954d0693eea88
+Nonce.13 = d4f013d58773e76ef52197a68fba4a31
+PersonalisationString.13 = d704f9e2fc2b24a0be98a6eb443a7f99cf8c1baf62970ccd0f1e929a8d2e475b
+ReseedEntropy.13 = 1dd9139e18c3b8d541ff47a5495f13a72a3534a9ee4a122542ee33065128d57b
+ReseedAdditionalInput.13 = 1b1dde5e7064891acd5ce80eb87264a3915340d225bbda81fa3d79cb25027d0c
+AdditionalInputA.13 = 7119226cd5f2cf7a00746149335c567e88634a0b8286fddbd12ab76c3f05e77a
+AdditionalInputB.13 = 2ff3838824fb0320a83323358b3a0b501b060f6eb168d0dd56eed403f361f31b
+Output.13 = 4802d4fa854793f9eff02fca1d7768759886cfaf807e694318352f8461f478c4c983a6f605a32182b5bc010346614a5fb2b80cead47ac7540a8f913e53d054bb
+Entropy.14 = 7f7264a57c9851cbc7d017107e0edbd554aefd5a98483ee76fa5ef17745eecb4
+Nonce.14 = e624be628f27817c1806ad40640b5770
+PersonalisationString.14 = 8c769b0724b3813e71573d506698897d4de7e6c96c1fb3b103de29a00b3d5f32
+ReseedEntropy.14 = f13e8bc2c19f0ab73987ce587c666401e1c3d01a76de6685b700638f4860bb7d
+ReseedAdditionalInput.14 = 02922d34eb8613d5c88041f446b1b876ef534545b8748b8a4cb8e10c3d9a2ab9
+AdditionalInputA.14 = d6b761c83513405c3b25149d477b35b3cd9b2839dcaaa07174ba9488f00ddd89
+AdditionalInputB.14 = 50886c503fd4864ce32710f83bd675b67037c45e68ca8e541166caee957969a4
+Output.14 = 5f079ffbdeca18da7b13cc710ebcd4aedf7f475c2a7d969b4a1eff3a3348b577cc2ba8d92611370970c9bf022dcf09dbdbc0a442a0acdfd31ad9257c62cea1ab
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = a89d08185b539a830b1e9b74c01f59e2b75bd2e2cbcf95c185a83a8069439e42
+Nonce.0 = c675e3b634b075db09789e5d8a39c5e8
+ReseedEntropy.0 = 0ed8e63b823af5476dcb9702daf46185d3f4953df704749d3dea2fbe0c7a46dd
+Output.0 = 61f1fb64c0668747d270d4fab17c34db3a69829ea08fe43ec359ae174ffb0caae8bcba3a4fffb5b29b900f0e2ef2394c39292bf295623f894617ce9500228bb4
+Entropy.1 = 00c312cba2ec5d72f9549e2a1414c973f4e9ed70407971f58ccbcc85720f1fa5
+Nonce.1 = 031e82c60be96498705e6dabf4c550b7
+ReseedEntropy.1 = 084b11ecaefe51dbb7a2651f45b0e181928c65cec575f7630dbf9f49c084a584
+Output.1 = eb2c76ed3e9467ecf9fa642b872cbdf340a2e1f7116f5ba59eccef7be82765620fa3507a3f870bfc8574041dbb9e7b8a0db6906bdee0bc5dc144922d670ceed4
+Entropy.2 = 42cf0a3b9f081f46945c37822c4cfa65cb6fb624fbc56fd7120c159fc5585283
+Nonce.2 = 96e4b7f661f0e1aa7e3561d06bac1430
+ReseedEntropy.2 = 293e309dbc4b90f805ad2e7dd406291002c28384cb29bfc72c305a93db6c502a
+Output.2 = 9485208c002e4e27f80bdfed3c1bf327e3c0f4f074fa8f60eed40752c288c5398a77643dd9a7ed508100b047b82d429f3b1806f050e0ad57f97141bb7a5d99c7
+Entropy.3 = 4d53cca2565779f6cf962367bb3793b0fca3feafee09dfd7d3b4d9bf0ba5aafd
+Nonce.3 = 9a51814c357ee87441fe027760931033
+ReseedEntropy.3 = da0de5a7a54dc3a6c874d8e5b31c7cd2c6d2b58344321ecfb1f98d42807d6447
+Output.3 = 7274b227d024475d5248cbf56791c9bef918e25e28659e6bcc7d0450e9c25b81c5b6442661d59f972ee9594528979a0d92c14dc93f4adddb03ea48b15dc61cf3
+Entropy.4 = 1597c35f95f94f12bb94a1a47a0696f468a8725a6793d4d9848aa06f2ca08682
+Nonce.4 = 44dd56839ea193e5a1fc34e9c611756b
+ReseedEntropy.4 = ae7e1793dbfec60862c0bc91293d6922159313084810cc5069b75df1cb87832a
+Output.4 = 4f7ca39c8e906d126fdcebaa89a28ceb638b3dd5b9a2af0e2708b4bc5ffb8c28eba3d42b3bc7498e4cd371672049dd9b83472e1e47b98df77f15d144ada6788d
+Entropy.5 = b87daa167294e273ead3150928c7583cf808f334adbe8c56b181fcf0325d8fc5
+Nonce.5 = 98c039bc4218a3cd763e40b7b65e8aa5
+ReseedEntropy.5 = 7cd899b6d3762fa4ce273b81114b085d6f108cecd01e7606b64046807e6344e6
+Output.5 = 68c3a61438c00096c15917e7941fda04945ec549479142e84c7f29a1476c37207ced72f8600c1c64613c30a9165781a2d2ef17606cd5cdb6fe590a2cbf992243
+Entropy.6 = 8161eb935ea90cccecfced72a10d41eebdc75e5b1ecc1f0d8a08326635d05f11
+Nonce.6 = 1f9cdac6aec9e74272f40a5287488978
+ReseedEntropy.6 = d13414ac422e7c359703065100d06e64c71daa4998e65ba4ca7170b31418815e
+Output.6 = 63a31cdbcd3d10f9a3667fd57a281df523ac6fdfdca93f3aa57b0471622401e203d5b0f2846e5eae9ad01ef6ec8c5b6cb0afa1bd244806d0630b1a2342f36054
+Entropy.7 = b8fde0b3bc4608477829f22ef3ec37e665e6ea7535fadbbc6591fcae02431feb
+Nonce.7 = 20d596ab902a880476032416b2e80c35
+ReseedEntropy.7 = 47fb3379e4f0d46fe82faf1acfe055a57f63f91870c13fbe16c40de41368477c
+Output.7 = fb59eaf7e23b7def451f21a3e1a7dc02a48dfb2909332ae949d717d1264f86e9cf9ac476a15679259174d4a77b50525e030345fb9b04a7101ead5f8bd755749c
+Entropy.8 = b772f663ad91c0f72f835bb0cdc9ab22a390c057500d2cdcdd0b29f9abcd01d7
+Nonce.8 = 9731681cf560d60c2b9786a6618995b9
+ReseedEntropy.8 = 2c93cebe266c4891220f490179b040e41d4174248c900f2dd2bb32fbce0435c6
+Output.8 = ef87f820566cd82b664c3d40a1186ac80513535c3a2b6e258f6a764dd7b292a017ecbb9d7bdf3409998ae6b3bc31c1e4d4eb876b6b0c5ceb9704e957493572c0
+Entropy.9 = 7e313c2cab1c49ea71412236055988ea958a29f1c66ead5daf91ff47cc5e8436
+Nonce.9 = c2b8520efba1ca9785d19ee058cf23e0
+ReseedEntropy.9 = 2a375183426c044e84d7163c0674df324889c3bea2baf057ea93a47ef775a8bf
+Output.9 = 5e6cc25cd2a20b89a8fe894f2f1e726b665441f73c6e45eb41af9901ca6ae62e63e082ef49a1bdc9d113e99abff748467add4c6905b88c4d2c2586733f4b33dd
+Entropy.10 = b27e9c0fb494c09e2a960a5f03491a461cc3304c92ebede9e3ccc748f502a8bb
+Nonce.10 = d0b6a2940d436f09e0e1bd903cc4463d
+ReseedEntropy.10 = f10b9428d0d6009c8a6da2483a147246e20210a3ae82789e9e32d3d8ac5c4f87
+Output.10 = d0b5946a21551d8408ea54ebcde893ebbbd5ad9eaabdddd2e7601fcecec9a7939182cadbe2ef7ba70bee966a22454549e9d5c13444e442addad8ba4e55f5d749
+Entropy.11 = 9875fef6d8b0699145ce20387ed09ecdfcba5dd9bde9267de3a55e038fc64ac7
+Nonce.11 = f3e744f438717b812d02ed4596410ddf
+ReseedEntropy.11 = a6a1115f2e8b8df21cad820bfc5fe3077bdc6bf88abe07c52f1fbc4c353c2237
+Output.11 = 8908935dc530284984aa1c55def56d7b07c740aa1b208646180f9080f9bac3ced4b9cce30c4a820984c69591c97de703d062df19e211dc203406e188f2122a65
+Entropy.12 = 1e8f79f30416f808ec317e40b15dcd935e10e2914b9d83413e2185d0099ffed6
+Nonce.12 = 24b6758f5e31b325dc736e6cfb2c36e4
+ReseedEntropy.12 = 20d59d0bbff22f2e991a8b45cdab525dbcae36919193233ca9b08bf10d41f6d1
+Output.12 = cef29871306da0afa00f6d6343057c2d8993ebe3e0abe0f5a8caafbd672a63862fe6bad69453121ad8a757ea4e5c482ca14729b6e2ce01b3996d4d34a1d832b1
+Entropy.13 = aadc2cce3acf398c8c11bf8e205d6157f9903e8f195246a7bb810adfab0a7628
+Nonce.13 = 8f66f880d0796f8ee55545a2268c4652
+ReseedEntropy.13 = 2502ca2af97079a387dfdf2547217f84c3932fcba49177c2a95281f3a289e83e
+Output.13 = d57dddf87243de2db9a5bae495cc20ebe819e6a4674606199aaab3b55931c1bfa1d133357815b394ff9e810b8373daecd859269871eaf6f56be4a743b1c1997a
+Entropy.14 = 4eeb688f8aa860047496421617266abee3eef3f88682a79251116bf78016a8f1
+Nonce.14 = bc38d83e891815597c408b0a50a2948d
+ReseedEntropy.14 = aee4a6655f817412f27f4ca686f1476ff38be06abc2dfafed950fd46df03865e
+Output.14 = 2dbec5648c608da2f195f86a41d26a9887a7f75f38ed8d5dc51b8ce67edb10e968c1b054a78d1298cc3e6d8ad361086a0fee9d24cb36fc8434bbaa1442e28287
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 44a690d590f443bca7abe4c20c70ddb0df0ee29ed23edfc1cbe923ae7a4eb6c7
+Nonce.0 = 334fc355f9f07459d8f014ebde24bcb6
+ReseedEntropy.0 = 1bb49e9bad9fc94d363df01c02388af391f4564abd8cce10298875d2934df891
+ReseedAdditionalInput.0 = 0092b99efa09a6b30bb6f0d9fd5fded490e745c4be3fa5615b318444b5593db5
+AdditionalInputA.0 = f5f698f0dd171c38d24a5bb3c5bf6115bf1af23c38517292e94dd7f576597db5
+AdditionalInputB.0 = 2da719aa44a96910e73fcf27e46d8dbb1c7b5d82f5713a2980aada6cf2a45104
+Output.0 = 27a2fb7704a714e207fd31a796c4c053b0355a1599d47d201b1b5bb37f79cf32f9289bd263ac6bdd8e83cc451b3a3baa8f27cf3b5ba6a9a4a7d2d6ae607dbc22
+Entropy.1 = 649db3cd3989a3b6c773d72b16723de903ac457640f2a970b9fce2f5bf24a1f2
+Nonce.1 = 0283f0db14bd729f96842e35baa9c82f
+ReseedEntropy.1 = 422ab53672d67d4ec19de8d0a189f8100e77de8f79d9528ee5adcc4ffdb49a9a
+ReseedAdditionalInput.1 = 56b527e78f33e2ba91a6f54911576eb9dc15b9da407c28c8131d7a5f33ef6fd8
+AdditionalInputA.1 = 7d5838fc84cfcef3bd11d27f3d8c791503add838dfe695c9489a5b3c9ccd327a
+AdditionalInputB.1 = 199b5164bfcb0e9158a19a2fdfcedc8f00c39b9704246253697c8ee01fc08e2c
+Output.1 = 8227edc60f95c789eb190082199b1ad430bb8a83f1c40912fdf73ca9979a2b52df52b5e6521c86a79d681e0105a11b485a474d09ff774e5730df10c744198e15
+Entropy.2 = 3e7d7c8797dc0164fc3adb595badd0d8eb26f3a82879e54a1046af140be737b4
+Nonce.2 = 62993dd2fc88ccaa2438e21483aba244
+ReseedEntropy.2 = c7311f9f1e1b6189fa0510ec9693b8f5de6c2ab900c93fb0e38eb09e83135d22
+ReseedAdditionalInput.2 = 7d0ddaced921bd0187a2b58669e46e072cd0151c90513dc81cff206ea4b1f3d9
+AdditionalInputA.2 = b000107d1a93c5bdbb486a4b7edc5fbdec1ec1abd71fcdc6b248333207422779
+AdditionalInputB.2 = fbf8ac5f689bbdb36c9cf4ffc884e32af9a600ca7928f87ca32240bfbd9c89dd
+Output.2 = 4dc22ea72ebe04fe6e0bbbc485a21d24964998b8948e5d08f15857c60e7e25428accf24dacec40ad7d7d39b34d2153dd95f4e6b72d2d35d1d95ef6d099886e4c
+Entropy.3 = c76339f1e09ba2e8a47be1bef7bab49a222ba9a1c8492e7164ab36ebcea7ea5d
+Nonce.3 = d4657333ca9fba1ed33164d8b3bbe4d7
+ReseedEntropy.3 = 64c25b2fd33ddc3ec65e84c1ac14c9d3e8645cd1f5fe85222c5bfb8c5901a247
+ReseedAdditionalInput.3 = fca600411fd3fba554ada76f90972f818acd57431a48d81000f1dea2e2830002
+AdditionalInputA.3 = ac98cf17064b933cb5d7182130f10b0f72117fcd2c914c0dbd461ddb7ec1a1d0
+AdditionalInputB.3 = e822109e3baa54a0bfb54b9a52aa7c945cdc48b41d1a5e544fbceac1147a36ca
+Output.3 = b48b4c1d9db071c7df5ed9f78f48ffb376c392c51d2d0e764247b794a762d08574311bc3e61c84c812d83f5ab17a2b47467f84c0a4d4e85ab990989c561aa20c
+Entropy.4 = 1012601e1360247c8fc248cb1d6b761e78e623cdfe857939db98b4c157b73dad
+Nonce.4 = 0d6fcf7c63c20a41dddff5e001ad0de3
+ReseedEntropy.4 = 089120c478d334b397cbafa7ad1cf2a9b3aafb65b79b0e0ad1c4d86272f0c296
+ReseedAdditionalInput.4 = d2ed4cf90d3fb8a07c96522eff6fda6be4511150fa8bf327e43c859861abcb02
+AdditionalInputA.4 = 95220e367895985fa9a5a0ba2b1084ae96ca37bd7b90976e636dafe59993c4f9
+AdditionalInputB.4 = ccb2bf64a7e706a8a7c86d30d72f89a7a87cb98569242a72a1d3285877238037
+Output.4 = 6e251047fd4f9d1044de50d5f3da3a9de27560f2c2efbbfaaaef1a0306087569f5a82d8bde094c0c451b5e5238111493d5ee6ea65e7d39977bed45ddb7f0eaf8
+Entropy.5 = 8acecd8986caeeddcda8b7e18ba284440557f8d4eb741930d9c964c628a5b027
+Nonce.5 = b3bc9f793d6a8bd3c67d986e7db3349d
+ReseedEntropy.5 = 1b7f8af00c7dc7bc89c25225b157365a66c01d5159691d66e479fa9e6c164679
+ReseedAdditionalInput.5 = ec9a53bdb4b514409ba1a4a1415e84da6223197a97c2f9d89a9cd027bae67a93
+AdditionalInputA.5 = 87b96aeb33f615bc91baf8b09fbb179cd336424f4b5e6371df55be6687f94b1e
+AdditionalInputB.5 = f3622de5dd4097a0dbc71bc7ac01cf70d8837ec296cb844c7a66206885c71e80
+Output.5 = c5c749a80ace0d8334bc8558320578916780d59ac6a81742ab0faf0f3d1ace4f33d2ed6fb4e147e1dd157e348566354d249cf25f36cc46ae3615e32d517ab64c
+Entropy.6 = 665bb9cef9e93b943aaf7f7534367d88113bde7996fc922b26b934536f4e4780
+Nonce.6 = 80a57f450d8163dde1aeffc174245519
+ReseedEntropy.6 = 7a24a2bd4f5e2010f600cdf033031dbd20e1c95d2b31db824e6616d315b14867
+ReseedAdditionalInput.6 = d6d1911b53b434224531f8eab56f0ad4f46cdb389224affec3bf61bbcc843e51
+AdditionalInputA.6 = a1d04200ea02112948e0a9b0229d63697d6896cbcd1a9b97953817bdd00fe661
+AdditionalInputB.6 = 8934bc9a6229bd257879f6d84d753bd7b151e616fffda330502b2d7ef203531c
+Output.6 = d950cfe323ef9f24dcef3e8765a9909ccdd60a5d6359b51ca2937e11ca38c9d8ca89dc4ddf3e7a5b27320f18e96dc18a3799cb228d5906c93ef1380f10a66aee
+Entropy.7 = 722bccd6f55fe0bae6998707911efb591cd4b48efd95d69317bf2bcc50f1c1bc
+Nonce.7 = 53e39a2991dcaefcca3dbe53ca3b6c4d
+ReseedEntropy.7 = d7fc5afef403b9305ec3cab0bfd8479119666ad08fe244c65aa1b835962e598f
+ReseedAdditionalInput.7 = ee1ad1322b4f23d6bc1a58d0a32673eb8942b6e53c9ec22569f3fcafd2db3397
+AdditionalInputA.7 = d516aeaef68b7077d4314eb694bc0b4ca661ec26431459a44d15e9df27333bbe
+AdditionalInputB.7 = f6c3723adb8eff9600b84a452adb00719777c952329afe7dc2f4129175247ab0
+Output.7 = c95b757549931f030f70796eaf0383d980362794cf24fdacf5a6101f968d099c194cc70607a6f86ba0404addd2ac04d25e4a0d51ceb45e2f9ffc2da49913ea5b
+Entropy.8 = 647fa5680869a08f9fb19d6af62747852688f5870a5b5d80926c69d08503cc12
+Nonce.8 = 66a1c152b8db5456d917637bf33486ac
+ReseedEntropy.8 = a658b2559313f16181af98000d058b20c7c1223b2258d68de543fa8347568855
+ReseedAdditionalInput.8 = 4460ddd3bde8532853d3c867c4edcc32ebac9b04086095e181f4248418688a85
+AdditionalInputA.8 = 79364bafbe6ceb9ee5f6b9ee932a467a50e1aa1d5fdbf40380e67d6602f833cf
+AdditionalInputB.8 = 4233a11aea168c43ebcf8d2d3ee003f7cc0f3b68b859cd81c721447c0577308e
+Output.8 = 81406745e997b73d6ca314e0acfa087618e967ec934878a5a7e008f4c3b3a7e02d9e759293a4a488fff48ef9693767e17e07a089211ecaee1bddbe546e95b5c2
+Entropy.9 = b2b6fe286e934e1edb9169dba314ea1364d5972ae45a343fa3a29ec7d22e630b
+Nonce.9 = 6de0b61fb0852711c0b78eacca490108
+ReseedEntropy.9 = e74074cffe004db90f2485220dddb0bf81ddd9ec2fb83ebd4249ba39ab1b2a20
+ReseedAdditionalInput.9 = 72aa7bd3f4c32994ceebd374ba559644148e55c14bbabea5536af8cacdb2ce34
+AdditionalInputA.9 = c1ff35de77f0713ab35265420d0bcde113c185bcbd147522b4b64998451b3895
+AdditionalInputB.9 = 77abb29a421b8bd48cefe47cff730be66ab9f5b5224f3f69399afe813e2a24fb
+Output.9 = b396a29c98318e0f1bb2279fbac677eca06342287e6d4aec0cef36e87ec433337d004a5a0ec6d8f35af70558f5dc6cdff9144836a6705e0d3159e6904213903c
+Entropy.10 = 2297aa406e589fe630faf8e57c75f0843b0307a4ef46a5a353e0d5c219efd5da
+Nonce.10 = 921825e5ecbc1951cbfba8bb05cfda30
+ReseedEntropy.10 = ff27dcdd3cb7476fa77401fdd25ea042a3f3b6dca75d7a6be0d3938432eb7ca5
+ReseedAdditionalInput.10 = bd65c11d7e421e17de4619656ac9ab7d5d112b28c95d5117963a198965fc75cb
+AdditionalInputA.10 = bf1c52e81127a53be231346d9d827541221de0994a23f8d5d57f7b168af59fd9
+AdditionalInputB.10 = 6bf300fc6505ebdeb70d961bf5b8897a4ff4288d12f4f3f7f791d0a7c533b6d2
+Output.10 = 277beb9511df115f448bbf373a73fb8e835b30a28781ed8ec320bc775a46c0600890533ec60567a1c50570d4cdecdeba52432ddc758ea86cc34b3d83cd9e3c81
+Entropy.11 = ac7205c81f9b2f869a85fd092403a79f821ee984ec54529bd38adc7a625b428b
+Nonce.11 = 568f2b58e84de057bf00630c125e384b
+ReseedEntropy.11 = 14674dc6203e9319fa810f480737daa347990e8303b59cb8e4763dabb10ba2ae
+ReseedAdditionalInput.11 = 9096ef0dc538c514d78550660b424c7b95f03dbd1390eea41885c3f0a59bf357
+AdditionalInputA.11 = 35743199bdb956d269cddc55a8af52e49816882956ebe317fd7e095a6f1830d8
+AdditionalInputB.11 = 29845f688d6f7c00a14a72b0a4bc5e6c3195d0b0436ea67c098c0abe05850b90
+Output.11 = c6c6d6db9ae3fc25bc5b17cc448b95e8c7f1a07bb3d02647bc88cc8e8ed10758416ac0a76c5565e38fa5d69be65284405f517a846c3e4311a6f382583cf89646
+Entropy.12 = 267d9056dbf86031eb8c5a9828f7991c67a8e041aa62afd0f65b514bfcd6a4f9
+Nonce.12 = 4397da37ff90731f2723482a2bdc9911
+ReseedEntropy.12 = ba2a7241bbf3b5c6fcfd20600f69314f2906978575b120a759ea4fc834d07010
+ReseedAdditionalInput.12 = 7eced65d87c55a81fa01c46bfd80958a87e671f86a628a3ad0a1c5b0639ce4b3
+AdditionalInputA.12 = 09b5de1681b5526efde58fe9d3abe4cd4e74f5dfd48392a851f885596fd5b8bd
+AdditionalInputB.12 = 48ee8611aa8c0e75a2d45a65826a49f0d21dfb4af3fd1d17cd649f52bfe26a9a
+Output.12 = ffe8bdbefd0cf821da1e0a3cd8e812e29b2c10fb00b5ccbd35810b74a0c96d5488fc6cd20d4a3635af1428216a754c32aa0c4a2edfb8bda371a25ae77f6b050c
+Entropy.13 = 1226887cecc5eef47392745cf929ffff4dd6e9c0da8bbe5e32aa0abdaaf42884
+Nonce.13 = 67975b45eef894aa8d404fa298b0aaa1
+ReseedEntropy.13 = e7aff46f2b771899238fa6c09c094821664611c66a578c25bb3ef5e53db4bd8b
+ReseedAdditionalInput.13 = cfbdad53ab7cc8cb78512c7f195d955448fa80cc08e1b50281a7e98b0eddd780
+AdditionalInputA.13 = 3d83a60149487cd44f1269c4a2becb2620939645e689868551286c70f37f61c4
+AdditionalInputB.13 = 7a20bc5e65a9bf88669de626a57bfffdf67ffb311054191126ce18819ac707cb
+Output.13 = 6805b315c0bc3edd65748592b5b2dea16783c201fc4693d40c1e2b9cba533453024f07d8a70bcde4bf8d1f62f358b9bf53372706e924062a16037462538300cd
+Entropy.14 = 5eaf7544a832c9c9ea6d44feb9323f5fad6be9dd7eb3583e37d26d0a113968a4
+Nonce.14 = c82d1ba5b21f0063ca686706be556472
+ReseedEntropy.14 = 3cbd807ae5a1283e8cd8bc36f89dbc747434e58721d8387f3d3fef48c66e2595
+ReseedAdditionalInput.14 = 3550198be99e1084ad87f13fab4121333c389961ef48919d9bb837b246df5611
+AdditionalInputA.14 = bd20f72663ccaeb086328a3c59d3ee4a2db2d8b010ff8f4146af45058b2af62b
+AdditionalInputB.14 = c6b19e4cd3d8df2c953e0addacbff6f447441fe2309bd8c437137bec1bb9b819
+Output.14 = 019d322a41a6cd1f4f7a06eddb64af1f84170970b938f427e24b7caa3f821704ba6b73ac67c298fc09c076e56cda065de3d0682abe6e55841f685e4ab327702d
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 4cfb218673346d9d50c922e49b0dfcd090adf04f5c3ba47327dfcd6fa63a785c
+Nonce.0 = 016962a7fd2787a24bf6be47ef3783f1
+PersonalisationString.0 = 88eeb8e0e83bf3294bdacd6099ebe4bf55ecd9113f71e5ebcb4575f3d6a68a6b
+ReseedEntropy.0 = b7ec46072363834a1b0133f2c23891db4f11a68651f23e3a8b1fdc03b192c7e7
+Output.0 = a55180a190bef3adaf28f6b795e9f1f3d6dfa1b27dd0467b0c75f5fa931e971475b27cae03a29654e2f40966ea33643040d1400fe677873af8097c1fe9f00298
+Entropy.1 = 29cea31e473208a552ad826d25503ebc065d887ddaa83ef9cff83044f2e49bc0
+Nonce.1 = 454c1c318f74b332c898f02e951f4fc5
+PersonalisationString.1 = 678daeda93305c64c0fd056c9ef42695f40e5af6130821b4a4d706e7013fc523
+ReseedEntropy.1 = 2342d3d62acb6d402af757359631b53029ed18d97ef7d6ae9cf7ffc340202808
+Output.1 = 651467aca6454e175f857924e1483294c7bfd3bc2263a1dee903b7eb9bb0899503bf61ec2a9db58e69aac09ac44631e4c7d4c05dc704198706eae2d1a1ef766e
+Entropy.2 = 239ea14c16900173fbed0806a3465df483ce981606d9a36880d1ca8db24fc298
+Nonce.2 = 3af404ff3262200c22b646ba80bbf538
+PersonalisationString.2 = 635737220106b084c641bba005731febb6eae458f0fe38777b2f85b049a171b7
+ReseedEntropy.2 = 34519e5f5a23700d3b62cb3f0f362214a88742cc5d112d474f8cfd81a93ace1f
+Output.2 = d75542ca926444d0ab13d42097fab594c50233e21b5d4639e32c5bc204d3fbe78b583494692e720b0714b5dd647f5ebbba76f1e27028b979c2de7b62f7578768
+Entropy.3 = d8ff66e0e9c26a7985dade71e9f61ba4353b887a09fbc89d77fa9dc739ffc7f8
+Nonce.3 = 4ae30b047f6741393e8d7725992c5c44
+PersonalisationString.3 = 517e7d941379d25c82c129c10f3ee4dd7eafad1753d7383eaf819702ea93f1ea
+ReseedEntropy.3 = b088ea2cc930d1677fc69d9e605947c598ff674b52742fc6db01775a62d257fd
+Output.3 = 5044f68a7a7b26cfedc06378ba9ea16d47152542934564bcee627824f5b72b595ef3c3d8fdbaeb296c8e1066401ff438d3b3d1d25aecf779034323a2605f9ea8
+Entropy.4 = 9173c44abaf926ae00b771bd72c497cd583d8b3c116f32044d6ace54f29af59a
+Nonce.4 = 726dabbe474651da7606b65a2bbe0a6f
+PersonalisationString.4 = 7a66dd4b42f90a05575cab4608c94d69e74c968d697f66a2ead40d4dc0d53efa
+ReseedEntropy.4 = 09f2294f43b68a992509dcfaaf82b30ec473667be779f22b0353d901d21a7047
+Output.4 = f36d59c8e328ba45b15074bc596962ece0484efc7335932d8d492ecde2552c6df3b52da8baa05dd418cb39b29f8468bde9e882bc11e07a037eccd2047c0b32ae
+Entropy.5 = de5a2a512931c0719332ceb514605f89b305cae62624e6f8b4e59844c461f2bc
+Nonce.5 = 742815b8fe399e5f2df45811f654c60e
+PersonalisationString.5 = f869d930288961e43e112ec026deaf76cf5d0012c245eaec571b30c13bb534c4
+ReseedEntropy.5 = aa1c493e8657ab3dc2d778b5845c1610a6d07971e4366666d246c7aa15578b01
+Output.5 = 7df6ede450facd51ddb931f7a817b6c1ff27a3094cf7dd4e25c390bed838ad47b8c03de0a6bcbad37b0d1cb55aab58f6f0357187b2ec22d9e88aa980b6e54d75
+Entropy.6 = 77531f8ad007aad31fc105e0eec024d502cf76fd8faacd8b46eb834dfcf8d5ae
+Nonce.6 = 37de8baa4b96689793ae6ad99ad3445c
+PersonalisationString.6 = 67dda2db559ebc638e182cc5290ccc1bbfc7017af2da6b998b85120529618742
+ReseedEntropy.6 = 6cedc868a200edcafc34dbff2bb4bc7851aa08a9f9238b3f2b31a04d66ab5767
+Output.6 = 0feb6cb4bd7774913d1752ec477a43e4cfc1147e8264daa33d907b5f3c2de74460bc7d45d3f174bb7b241256aef2461931b35160f793e98640b4e107e3585dcf
+Entropy.7 = eef297f88d13ed4ca5fce56acb436c3877d7b94d0adb90a37744397e9e846847
+Nonce.7 = 6431677c9b85220d1c6b1f786419facd
+PersonalisationString.7 = 1476d4b916a8694a45fcd0089f3b6152ed6e92064b1f6b6fb0a313c7aa8efada
+ReseedEntropy.7 = 93825a2828662690424b8c6cf8ddbe9cd14b14af8d91984b6676fa6a9242845e
+Output.7 = a45fbb996a1c35e7c672b16869023c7d1ce81a1e107a4607d2f756f7904526b729858515553e39a7c7f44912a27d8fc7fc61120a6362543398a2b58ccd7a67d3
+Entropy.8 = 6f7768480701da57ffb6f65fde52b3076d0d54df325a815ba0089cf966766e69
+Nonce.8 = 7f979d876def96d803b1d211173ce499
+PersonalisationString.8 = a48d8cc12457ade11515ec9ddba1274d05a6b34070f04ee427cbd26afc2edf3b
+ReseedEntropy.8 = 3dfe53a61bb795537c65fed8ffe09c3f8bb62ffa5e9e26cb2907401c4b8dcc1c
+Output.8 = e5eb353cf0adbef2e6c62d745876a835659a3a94cdd2328bcca6abf96ad9637be2ff68e27b8e7cc45a3b79d2573661819ec684eab34aba07c1fae6ab81c988cd
+Entropy.9 = 2c077bd78a8867c627c856d8f04d7d6f1d2162232b33916a946997f4fb0fcf55
+Nonce.9 = f01236e45755d721d575c4e9304170b0
+PersonalisationString.9 = 57efc60e693151fbaf6051de84fa0429b4eaff35feb7e824c2fbbd692fb8d68f
+ReseedEntropy.9 = 151febacbf949e1293710a1250d229ec02ba4df10b50abc2742f083e3f923abf
+Output.9 = a6cc431fb626a926210ff7d3084e133dbf00b22d9877a07c82221b1a5ebd77ea671950160eb298184afc623731a2225b6c67104b85b91022ad9d33e8495acfad
+Entropy.10 = 685de1f040678f2e86111f7abf2f7596493baac932dd9ed01fb70aefab40fe03
+Nonce.10 = 5ccde240d7ff2293091a58de55602ca9
+PersonalisationString.10 = 3b18892feab083b530371d6eb599828a58a76a346f2a25a412f5d4606f2f0baa
+ReseedEntropy.10 = 3e7a1cb8bcc4f2c2c6262b1b8fa7bdc20aac98e3f425f781c7d685bb43fe383b
+Output.10 = d87b0ef23e09b1c6f1267268029528c76b3e3a6648c674fe92486869a47f7892e5660f885d0fd2e6b2a2288561d07575c6606899a6551c4f3e2f14ca75c435c5
+Entropy.11 = eb4b9c2e641880e857a2baebc8cbf91824ba35d26399a7caedc11ea42d7c858d
+Nonce.11 = f4819053ac388f6344e8d06fc94067a3
+PersonalisationString.11 = 10be74844506566a1db552932c9affb314b89c83434307b873a0126f4cf28a77
+ReseedEntropy.11 = 66826d4b8ec8038f7199d96c8495961a0a74e391bd2899f0458059ea4d2edde3
+Output.11 = 83b738bdb863cc7712eabce93fb935a0c01834baa118ae99a6163b5dc05a71b02b93e8ebfd6a20deb3d54e1850f82d96afbab2c13b1faa27c5bb01281802e2f1
+Entropy.12 = 6ee0c875d08ce12cb10ffa824be2b75713901dfad2d94309a1ecc4b51adc37cb
+Nonce.12 = c03e8ef10c253943a05801b7c0d04e70
+PersonalisationString.12 = 0e717db96ebcf894c0182807eb491a8719cfd433ec02dadab7ba2fbdeab1085c
+ReseedEntropy.12 = cd6d2a324cd38f3aae6ef8e93de701f0725c3c08f07d3570d6c8c01b6525c18c
+Output.12 = dc5e7aa22a722c62d68391e1a59793ab4f27ef9f1cb2c3247bbf94c339176ae81010c30c75572971be8f78a6cf8cb4c3ff13bdf00c0e3a259ea70306bc0b4b02
+Entropy.13 = 600bab60158002dbae0865775713cb02453fb525d5cdaebd8ad32303ab9cf86b
+Nonce.13 = 661a0b680f2b7682c157e01c99d83fa9
+PersonalisationString.13 = 1c16a811080be74b862f9f64d4ba0ac8964439bda0e560584b7fe8e5d67e9d62
+ReseedEntropy.13 = aa15f26c205d46c20fbcc5e8883df0a2b91ac3139a3c1fb58f1fff17b1ce0d95
+Output.13 = ab59d0636045cc3463478450df2e6e9e08c209041544fc15d32dedb641756f15207ac7a4dd56dc006ef9e5205466904a47b5e511667c7d141e1b9ae9d9d6a861
+Entropy.14 = ffec8a7f170fff952668728c9c9390e71ba4138fde684053351376d7ab54864e
+Nonce.14 = a27070b710e5aee5fad9c605df1c34d5
+PersonalisationString.14 = dbc5113ef0d4c4e61a274cf6661819fc41bf2f91f2e44f39df43a76cce0c84de
+ReseedEntropy.14 = ede152730475080f4b8cafdd33efd0e7d03529c06834fd5c62cf0708dc961d31
+Output.14 = 0c5098b7bbc8b8e2045dd6ac82508f836c9e059c070e0499bcbe58b20d9843f258a6cbebdc0554686cc04507dc589caff460f0e9b8dbd9d9e6a84a36549e77eb
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 6c0ff37351e787d35805810750394854dfc7b3704cadea32593458e1ef67f2dc
+Nonce.0 = f0d342f2cb1270ed3cc935b1d3059d0f
+PersonalisationString.0 = e1b95c7069bb22475d5a7a99fc8beedced73bbed785c73ce5663740c46568884
+ReseedEntropy.0 = 1140a47dbe3b89362922b375502300c7e7566224accac3ebdb99c8fa776594dd
+ReseedAdditionalInput.0 = 66ccb8ddaf0201a7f2f7fef04939f2c802e480e4acc1c3177571f34248bbfce1
+AdditionalInputA.0 = 53f74ba9d0eb69010cc4eda1da037c8e6056c1154248bcf4632b44d6a59811f1
+AdditionalInputB.0 = 1cdbb531803e7bcac8de8aaf9c3534184cf737c9ceda1a7a16056b0c53a828ff
+Output.0 = 743e9cb60389d649113a93e9ba3500adcff05193934602797c5a36084dc1b3f2db7c65d7b6425dbf3bb572239e8845a05b3ee5366b538a1010d4fe2a0919c1a9
+Entropy.1 = 0c029bad3e7f1ddf542d544882fe1a0092edb6cf2a3a2202d88486904eef7859
+Nonce.1 = 9e6ee02c4b520d4fc1262e2833d8e246
+PersonalisationString.1 = 2f24a5d9bf8893a0f2d33a665b1b18729e96330e22f6e5a29bbbb4a9e889ec30
+ReseedEntropy.1 = 7ec45063b877f49738ac8020c0a764efbfc1667c7dba37a652f0fc6a03d0b153
+ReseedAdditionalInput.1 = 74b71d1d5b8b5d8c24f44b757ba87989d3ea757ccfc5b7f4c426e7d72cbde9f8
+AdditionalInputA.1 = ec30eb4c56b8f61f5d61526bf1830745fde9f07a4dbd50fb502b27087f42f42f
+AdditionalInputB.1 = b40b2e8f9d517e64356fd89817601961d22196fdbe749279b321baa61e72d628
+Output.1 = 70db969c96755d28a13adfff666c0aa62f0dbe13205222b64ec497031e734aa957bdf87b72b2be5653e1051ab5551931007978e87f6bda215f4358dc08427746
+Entropy.2 = 68c4f136b5c4e23d676ca241b90132d830d8f3c4478a9bc0639600e9c062dda7
+Nonce.2 = 4f35042bc418d6cd9b1b1ff6676bb8f3
+PersonalisationString.2 = 7d9ee589159990f126db66b0ee594758b752037c06084cae354f02130f0fce05
+ReseedEntropy.2 = b7e683d1797fe364dd95e84f47d216e04de2ef9dfc51db887c568a16221c8cbe
+ReseedAdditionalInput.2 = e4488b565419707a4614785fe7de4318a18abf7bdaee54bd609c173987a26a2d
+AdditionalInputA.2 = 4ed5cb9b2b7e2bb7a966cacb9e7c7ee7c58cb6de45e6f7d91da43de0c625c43b
+AdditionalInputB.2 = 4548140cf5fc7902edee67340f38ed2ed8301cc35cd4a6bf271efa897b1eba6b
+Output.2 = 8b91dbf2a5679f9587ebc3514a3645a68810dc87746c66a22cea599a90f34dde9d4c130baec35edc0c2f104637b6d40a4b695a11bb55e86a36175e63124a4e5d
+Entropy.3 = a9363e0b2b0997e11c5df68ccd5bc53d10d9b9c684e069761141dcf771ac6476
+Nonce.3 = b8f8dffe03481c632115ec4e95d20622
+PersonalisationString.3 = 134f93f5ee3c5d88416ac0f4eea905d4ba2bfce31bc40412e8a3b902a9feb649
+ReseedEntropy.3 = d0cc63e9ced82924de6a8e91724cc39136bc2ae39289b439ad90277ddcfd28cf
+ReseedAdditionalInput.3 = 8c176a3da66216f0f347640e34f6979eb521c8db3e4475b81390ad8fd89bf2ae
+AdditionalInputA.3 = e647756500cafe3eafdb934169c836841039263f90a44c1d78977b794fbc4b01
+AdditionalInputB.3 = 56e75d3aa5f9b4d434f53d1863470903dd71bd127e301a7e59b353c229c2aee0
+Output.3 = 83423125595fa9d020b235918db928ef5de2b7b57a2ab394071e5777d252cd136918d9f433920f09dad13dbf36449e2c9c2686599a2094657116797492be7327
+Entropy.4 = f2e65a05b75c8750c179bf07715daf3508c08cdc04acaa223c93cfaebad20015
+Nonce.4 = a3340ac88fca360a728b5c9a73537cac
+PersonalisationString.4 = 13646fbac9383056091cad95f8c6d877b0916f3bb9c2acb1aff6a6e97fc3f539
+ReseedEntropy.4 = 34d69777cb993a4be66583309ce0bc2a6766dff05a26ef4183f11f7ee654e436
+ReseedAdditionalInput.4 = 8031ea879209691a6824068034311d7c9153bb26634b4f7285dadb9bbddf895f
+AdditionalInputA.4 = fb68416c48542721a20f2edc1ee3ad210dafb6b5291838c2171b79c7e84578fa
+AdditionalInputB.4 = ee2066a210d96d2ae2de62c3b7cd8f62a282006d6fc0d69fa4035704909b981b
+Output.4 = 44f33450ff56593e77fc5116bdbba5a17083edaf0dd0d2070796c555f3ea2d3589a55d541dcd834b5e3df281454e84f81fdae941358b5752a366eeee0a565ad0
+Entropy.5 = 5d48062e6dbeb69d090929d89d127ce54ef2c3373e222c3ced1f1da233d0f6a9
+Nonce.5 = 9701395320dbd4437e67876f978342d8
+PersonalisationString.5 = b976fa12841dc6314efdc9b3b4d2e3cc1e5d8df4345f33adc047a8e8135ebda0
+ReseedEntropy.5 = d9ef5e9a534ae320f17058df52c0bb3aa02260bdd51919e0d68c7b6d58e1ca43
+ReseedAdditionalInput.5 = 120bd1c3c21be3465203e2912e9ad5ef2f8336a20e5dbf87353da565322b1852
+AdditionalInputA.5 = db2d4a5cff0ef5ab757526fc0466631085adbb88208687c10a7281b5a25d5838
+AdditionalInputB.5 = 0f3fc916b1f660466e0adcf2c42df0762cc6ac4a1e07d1420e04486c593e40ab
+Output.5 = 200f5de466cf4ad57427543d95502b5042a8c23e0dc9d8af459f2776bd3c78a76a91aac48fa349b3e02833f1b7e19774f351dbf81c2a66f0e9a0c01689d388a8
+Entropy.6 = d259f3fd16feeb67d17667fe82ea291761918fc294766269ba2cb56a3676edd2
+Nonce.6 = 582c05838e16381e6dc1046d784ffdf8
+PersonalisationString.6 = 94ca52da424cc07172c20750df5feddb68f28fe794461e51c92cc6451ff58c0f
+ReseedEntropy.6 = 1b98e4a8620ca5f9520583b753c222eda5540a8736d8a3e784d01b75fc8ae35d
+ReseedAdditionalInput.6 = e6e1fb6be907c843c99b5a85e621afd22eb1ac18b541a6959c2aef14aa8eb854
+AdditionalInputA.6 = 436bfcb80f974d5e2815e21ec0925c8e0e4146dabeb2ad6ae76d118bf4d9fa9a
+AdditionalInputB.6 = 11d4153cf77fa5b1b58ace5ca01d737099b4c2adb57fc2fbf28fb58e5fd3ea50
+Output.6 = 1c39ba5ed96328ec66568d3ceb77894f12240f0fdcf065119cd841151cb860caa64f74bb1b19983225254b3b58fe97bffbd20b57a9492389d62c2b542d53fb64
+Entropy.7 = f36e6ab16a4dc1a68ead3c8fb5fd4a9b22eb15e243964657895d02ceb5ca9b75
+Nonce.7 = cb55561e35c4418b6c2275b50de57df1
+PersonalisationString.7 = 9c604ba9910366685798f0c21044789eb8fa3a51f99a7ed451ca3a6e223ec34a
+ReseedEntropy.7 = 9ff79aeab2498fdee09a35557998e800ecc162ffe0d56291e576011e236809dc
+ReseedAdditionalInput.7 = 0b865e50b619821f53e63e0684d1cea27abac0be27f1206ab1a6e47ff03ecf47
+AdditionalInputA.7 = 4e2b142f77db9ea7f29f6a9385a4ae22bfcccf811f7fdf8a5e5f4a0f6f325c99
+AdditionalInputB.7 = 46922ad38771549011fc80e746334e15853c044619aed6847fc7c62e6004f298
+Output.7 = e13d046e9da6a60366ee3c7ce20b59cf555e41faf58bab051aa40c35a207a316634d17951f8c1751a26413ca25ea2e9462cd3d9ce8fff3b353f91076a32ad6e2
+Entropy.8 = f9b29d40982ea273a6b35bec953c6e9b77ab904fef3b55408eb4de517319b792
+Nonce.8 = 765c542bc6fada9f6872faaf63e7b953
+PersonalisationString.8 = 9cefad9c60511e2f67a169560f7d4e5ec531afa74e83a569e839edcd47ef46aa
+ReseedEntropy.8 = 977e45dff878ecec24be759ffe703732f61673db626f07c00e9464c69b2e0824
+ReseedAdditionalInput.8 = a4b150288623bb82216a96ef1fb6734fda3224bea565a565dee41e5b7cec9500
+AdditionalInputA.8 = 6a165ab041c12c31b98a4078d8ca907c2a084120604f859c630943ef25131c6f
+AdditionalInputB.8 = 5e5918cc9439637a96fb3cb3b17e468bdacd8b874e2cf14b564034ddb47d1e20
+Output.8 = e397c6104655592cbc9b8e14ab5d0822866de431488f452eacfe423e6941109c47ea4a4388a6723b4073c0e896377b0d2f352d6fb9601d7fb5bc73c04c524de8
+Entropy.9 = 3ddfa0f57809be7456fc8fb8c4ebbc2040496aef792758eebb7284e23699c20c
+Nonce.9 = a1839a77561ff3e4061978f8f422708c
+PersonalisationString.9 = 889b72246e71333945c7cf9f4d706d6ddd7b1cf09a59c57ce882dbf3ab3c88c7
+ReseedEntropy.9 = 6d26d61aec8f122b50f9022bda1f0973b14c5c3e5d16be2c88398e3528654b6b
+ReseedAdditionalInput.9 = 50138a1c118b36c75a052aad170cda2cd4c01136d62b884097d64b8be2a88760
+AdditionalInputA.9 = 45e5702461dd9bc726158e6c96c696f519f807a58eddfec79e50f38a03b65a29
+AdditionalInputB.9 = 348f61370ca804e64d4219aec7b7a9610de4431905107b2ab93362f4bc19d8f1
+Output.9 = fcc0dc7aed0e5694058ed3c621346d5cb5cfef49d3c046738023456f17577bc0861594ec018149b366b402dd64303d4b0e36fcb895f3c6a5083fd28980355bc1
+Entropy.10 = 77828efce82dfc955f7784997a70dff8fe11ccc725cd1ba2d6a11ed673a06b38
+Nonce.10 = 5e2de9fe7eeceb0a5bd7c1fe5fb6301e
+PersonalisationString.10 = 2678115152d3a5d25a8630312987565509fd85cbc0accc262c14030e5ed448a8
+ReseedEntropy.10 = af7749415de1b553fa6b20a1923ef348f7ef60190d0288155d5794cd8fff4e45
+ReseedAdditionalInput.10 = 97e81174b50769bdb0b43dc744b1fabe085505c354b2f6a7de38a530c106069b
+AdditionalInputA.10 = 6fc02bbcc3075946dd5cd810e677188cf69118665d04f15ce6671e5bb5bbe7a3
+AdditionalInputB.10 = e7674e18ae38aa10f44a0e241c9c74f8d6e570666bf53e023ce11e5c1c2c0a02
+Output.10 = 1389c904cac5908ac57285bc5fa5befe12f8100d0e50d09f01d137a97d6cf62114a6bd18a4d8bc8123ae4cbc6303e29830e6b301ac294fcd0fd41d1739bb280d
+Entropy.11 = 5557edbd85349f616b8b5259c955d67e198f96a9e36c2366024648538f11d9da
+Nonce.11 = 33ce4059e8bde08d74a0259c14109467
+PersonalisationString.11 = 81d26ac87852ec428101bb00e4cfd3f0c3bb46f2e9f05fc789fb589693fe6616
+ReseedEntropy.11 = 6afc5003b7c196c5e5c686207655385f55f7e207f7ab28b53a94b0ab5b2adf8c
+ReseedAdditionalInput.11 = 661f9d57131b7889d65df4e444ecd41b325c112285eab136739f117e6ecca4b4
+AdditionalInputA.11 = 03983095b312f815e01d0c2403cda2bb222fccd5b5a6a5f16c8596f556fa8070
+AdditionalInputB.11 = 14b844644687776022ae0d4e5cc35ba9b77feb700d17ac5bdb7e5c6274477cfa
+Output.11 = 5cd94c38b34a1318468864394c5a0e8f3bbe99a5bc7627e60571ed0f0eb59d2fa589afb2dca4726306b09c11e079e1d6009b6e5203368b239dd5931d8a3ea857
+Entropy.12 = b7a48379bb3760eaa61a733c9b13d0079bc762ecaf7cb33adc47fdabe160b6ed
+Nonce.12 = 90cee09275cc0da2955cbdc817c9269d
+PersonalisationString.12 = 3a933b4764074afbd75f080b7e6d7ea7ad28837f14bcae1873bde7a7ab7b085b
+ReseedEntropy.12 = e1bd1f8120c8dc418c5cca4e767e4ab7748337cef988b2598800d609a02ba145
+ReseedAdditionalInput.12 = 04ed95647976ce36e0bbb32ebdafa7d32d011fc6f13f098e70dc10f51a2b411d
+AdditionalInputA.12 = 4e4312c69f4156dcd633481cf82d9f777d402ffe17584e6da77214476f00116e
+AdditionalInputB.12 = cedbaf297dc8c83820db6147d4ad9cc806cf632689b81f02dbc95a1e74eaac81
+Output.12 = 7461df9d634fd47385677090c478d0a4d967cd9cec61600883d700a5d5f8d2a547fb3aae9c2b6417aaef1c5c3fa628fd25b012600b78bb88eddd8c809c77cbfc
+Entropy.13 = 1b4bc04168f21afa76e65a7f80bace5e1a285309ac936e665b9a3f45d090e342
+Nonce.13 = 8fb3f4a6c8ef5725d0b9efdf17f2d02f
+PersonalisationString.13 = 5e7c4b723bc8fe19c2e249ba3e3ace3e441bccdd33ce353cbddfc2e26e81d8e8
+ReseedEntropy.13 = 1d8fbfa1e832d30a9c9cf78f6e0146cd5dc7ec01c445ada432c76a79a303d370
+ReseedAdditionalInput.13 = 519e20102d0310d77d2aca93b8b92037056cbc0a9eb25fd3d0f23a9479ba441c
+AdditionalInputA.13 = 94633dd0c6f337debfc218c5960f716d5d42cf01b7968d7d9e50d83cc35bdc71
+AdditionalInputB.13 = f1e70c2124ec84f1e3222944177dd7ee7414294c35456ec44ef0ae9b03044f63
+Output.13 = 58e9e683d1bc064c836e362015d0e82b8cd12eb05c5c3f94832f81dfd7c07197a3a5e1d3c5b8be3311c7349e05d468042e74bb51a4a30dff9431d27d77b56e6c
+Entropy.14 = c168c7c4ec2aab2a43eb9106cc7b015b51f963bea75055bddf309ce4c4bddd35
+Nonce.14 = 78455e6437ea206529ec02ca1031e3a8
+PersonalisationString.14 = 2d1f735d27a98685594ebd7d1f338519b03981b4e91c20a669df5b066853d3a7
+ReseedEntropy.14 = 3f3853d3d1d69f43c1f331cc0610a6d34e524b151fbd074a2f924e4fb717bd62
+ReseedAdditionalInput.14 = dbf6a2e038cc1820e87683a8ad6ed005a48b3f460868343776dc76f1d7748e00
+AdditionalInputA.14 = 4cc22a0b233f3170e01902ca804a45162b73f550c19caf2c9741cc25854587d1
+AdditionalInputB.14 = 48238c9be5cef57d5b1c45a0456cce1e42bd459a7ab3e3483bcdafae90941e64
+Output.14 = f2da418906191b76b3c5e2921a17e5cbf4820369e8c8b1c2a2663c3fdf9d73095be4c541add9b8dca44a486c31368b1c64b1c3d2c5bf14f33558411cca1f2ce7
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 830bdfd33486f26f4af9f2a699db1e49652635aed6984e04a0cea2c9a87e43d2
+Nonce.0 = 21ede5be36404c34b1b85c2d2369bf09
+ReseedEntropy.0 = 8c721957a6300794862a004574f98af9bbc074ecdde22becb081f360535f3f1f
+Output.0 = 3f63eb5de3a13a3097e25399c3d9ed7d5e6591931461a851ba645bcffdd0c07f2b71cfbb8329bb1934971d1403dc68cafb0bd6ca4e4a6c28976ad5e8bb13a35f
+Entropy.1 = 068ce29e91fa6ebe9d39b01e288fbb5c64d5306eeae703d3b74dcdcd64757d8f
+Nonce.1 = c96064d619d4ee605deb0cac78029e0c
+ReseedEntropy.1 = a5f0c736bac2f1e7c7554f51e87279abf01d39213f20e310ab45d0e0262270fd
+Output.1 = 241c13c5f180e17382b03229cb6037a2238e658b0bc7927342833ef0b4511bf80d8d04042a7114485b6aec347da89c64ea5f7d80e8f4abb4b054f2f07ac6e2ee
+Entropy.2 = f22cf7cff5c8f25c3b15d9e64b728ee8d15cc90637e27b64c4643e46e19afb76
+Nonce.2 = aef366b3955f78f1cc43ee008fc88b7d
+ReseedEntropy.2 = 17c1950c8f339c8493d2298bb53e147c1bf8ce8cd2d54762253f90f43fb1c254
+Output.2 = d6bb1964e69c5612e58bff4660a5836704d7f14a3dd83bac427a464c8dcce60822c857f280c2540a5c4319b8f137f8cd5c9fb8bfa7f8ea75587695ada3b799bd
+Entropy.3 = 9aa2275145e252f9471fa1399eeaf84a7dac1590b6c12e7133843935587ee814
+Nonce.3 = e50efcb1a4fac702f24df5047ef49d8c
+ReseedEntropy.3 = e05b0597bdde1998effb9702a20c792e8093c2896007f8777dc5933a6de49b10
+Output.3 = 5ba6f7b65ec4c95d17cd029ad56a4fe29dd703c93313ac065974155964a7b9b0fe252bc2e865352e6a4caee090721a0eee0d6a7a0fd83c74feb728fdcbca4e94
+Entropy.4 = f65ecbb21205f1486fd95f77a9acd61a392d9c9d80b8010c9989bb84ae31f064
+Nonce.4 = 32b04352bd345b8e46a5b77b308064b6
+ReseedEntropy.4 = 32d861ef5bccc90d393cc99b5c4550a41e2f0c2d234828235f06243d6126d15b
+Output.4 = 524630ad63df6294b975d1fcf86b79506697c4b79668d382e7d83e30da06acbd97e16e256df73d680c5044e8343d6b88123c7c89482e93ef1a6c67f814cb998b
+Entropy.5 = 3cade52468ee033f340cedf266f60e5dc4f446ce1c537509c3a25e776e2d054c
+Nonce.5 = 325e3c6bc90dab20178380bc97a92ea3
+ReseedEntropy.5 = 6c3a927d9f0620926f354f2b91298632bc526b0c99f215056f631e079726ad98
+Output.5 = 1d2b132516354e9b0cbcf78812dda8fdd044af161c2ed5219df1a4e643dafabad1f2321ed09d680c278a2a6dadfb5a5c9cd3284c7e56262bb7077ef7751cc9bf
+Entropy.6 = 82bcbaf43005233f535ab04bdd9eb08f5524fb6999e9bb60c4b9501bb58faae5
+Nonce.6 = b634f119617533242bc4e10cdc73c8cc
+ReseedEntropy.6 = e0ea050554d4b7ab4faa51e384eb4a3dfcec08048a6eaa6d51e0fc956043ecb5
+Output.6 = 17aef28a45c1ebeccfed991f526e560035d1c9e73de1217c2690e4e01b363c5148ccd80071143fc34df0eec73542d9937a226b13f16c2fcec968a41eb6a520d9
+Entropy.7 = dc19df9e97759b8267a550eddb19c9ac936e881fe5f807d81bcc914b3c5f6389
+Nonce.7 = 1121d9752e5f882a707560bd0a449c59
+ReseedEntropy.7 = 1c615cd59622edf0e1a5bfdabd4c392e5dfde87de056ab833fe23854b26f3ae4
+Output.7 = 62d466ee590a6c77279fd81c637d0c13b6ca886e7dd5380d5586428b40a636581752458adac6024cc63d5124b7f5400b3d254e4ddbbd48d2048789ca0e464f9c
+Entropy.8 = 0062443385cdb8bcaed27ac3ef50a98d9346ff59f5e2242a2d0165d3a78aab58
+Nonce.8 = 448c174e316638eafa0bcc35fd5c599d
+ReseedEntropy.8 = ece3f65e9ee3875bac852cc68a8172bd02f3d70cf78607edd3c0686906dfbf7c
+Output.8 = d6e0cb062ca6f8ceaf3280d918062168df79c3a2a92817be76573f19b2d51515ee2070a78701ac41419c7af1f6d3b5cc3f7bc0f3c0cbe37c9c68258abf2b2b2c
+Entropy.9 = f9a0992037170cb0fca169742b0c7de2ee807b13701b29d4e49da04a00f204be
+Nonce.9 = 97869ed796b03cf4aef000ff750a17aa
+ReseedEntropy.9 = 3a221b7cda67d64afcdbb163f20db4584a39a0da8a70756fb249fd16fe960aee
+Output.9 = 923b15e4f63d084c5993ca7202f0754da829a0ea426377197a4cbdfff49eff86515ebba839dc3fa7a72be79fdfe182c7c08aa83fc026f88e206c7b194d2f3ec5
+Entropy.10 = 2c9d3934fd01418857c69aa5e650e66c2778c8e3c0d61801465285072a6c9628
+Nonce.10 = c5b5065f97971e1f8d8f9070c6c18cbf
+ReseedEntropy.10 = 8550dea08a70965ddbac46d12f3445d1fbf3fcce233f540b23494b24b878ad03
+Output.10 = da8c3b43dcd7d393b69e4d023ef0ee57a49752cb16ef4faf8448ac674aac9cc3c438b98a8a6add54f509bd763e47d7a2eb5254009f6952d38e2bb6e05dc5a972
+Entropy.11 = e6a5843f49e0a837bdf216e0644c8902effd8c6922d30eba8da3fd4537578e8c
+Nonce.11 = d87b4ce9489aa9b6d1837d9c72ae9869
+ReseedEntropy.11 = a90e89fd52d974d86c39e8d504a61a17eb08d3d89d97bc4f18de4ae28795757f
+Output.11 = 9519154b87b2c9ac7be1e1ea12d5525d8e00e25b0528bfa0852e45e890197dcf3aba65e2812a42e3e925e2d8750ce59654c043cdd3a6c92d0914d030ce87a439
+Entropy.12 = aad6e713433a4cce72958b1c69e22e67ebf0dee502abb5ce6b2a5ab35c0cef2c
+Nonce.12 = 6301b41a2c28b30cd357f08900d6ca75
+ReseedEntropy.12 = a9dddaa088289241f65fa80ac6115979602798568956f1bb09340d78786ce3e8
+Output.12 = e8d49dbad6e089ad08441a105ad89016fb0361ad1b6dfb835b22836e5131e8a2c4bb2cee2a45e8181772194c29a82a89054df70d9701d277beafc8553c210258
+Entropy.13 = 749fad3edf120a72681e678b5d6836a73ed73612ad1b3757bb0054f761f211e9
+Nonce.13 = cc84acb7c687636c1eb7701e6d45691c
+ReseedEntropy.13 = 468ece0720449193fdbee23dc5b24632770c44485b2bc19a2dc4e2ed3a45c935
+Output.13 = d50e347e74598ee3b279eb7f6be7834946e54496ce0c091af1501a30c6073ffdfd42c55f2094c816071af663daf38cf4515c4bb9a0d15a0f957709ad84086169
+Entropy.14 = ae8da96f3d66243a89ff454676d9bda5a39dadc723b119b48a03b7cd9da5b02e
+Nonce.14 = bcd1d643680b50f1920513bbafd38b01
+ReseedEntropy.14 = d296a0ab1df88a37542a5121a47409d5e20c48f48e3ac408d8a492f7cc21f282
+Output.14 = 5fc1dbe67e396aed1d041eed15732a80cb3f50829bdc549c7959f26ed66ad407fa9398a58c7bf3257104e169ae6fb5dc18f0a185a8baa744dac4a114e16f111a
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 9f073580368ab5edea6d6d667bfcf36a0105982d53c7b7b05575964b9f32fdd6
+Nonce.0 = 4a08d6e7b53d7829266fd849aa2d576e
+ReseedEntropy.0 = 09c11834d1a273d5c5d12ac71c11ff0daed3b520d62b8041cd608ba7853ac1a3
+ReseedAdditionalInput.0 = e24426c159bde6e1f0c1ed20af189f155260a8f20a02da693df33ada4aba5c32
+AdditionalInputA.0 = 9055b015aeed80a3edd5226c64331fd0a65f82e781dedc03453f5dcbb1a27032
+AdditionalInputB.0 = b634353f5b713e1ce0778a6a19325a1a1deb02bcf1ccf1de5c2c2cb6d469e42f
+Output.0 = 43e7e62ffa98f436efa34b1fe0e4e633bdfe10fd20a2ab1c6f7d8f5ca551dcd14a8b9696e549b4e6fee4c6d69a890c6aa42468dad9c566aaaf164a9c81983f11
+Entropy.1 = 748b9bd22e6e7c58b3bc018fa2aee9ee3445aa054b2a509dcaede5139b3fb8d6
+Nonce.1 = e204ffc9bc514c9c5566086117590e4c
+ReseedEntropy.1 = 05585a0c8eb3c7061d24e09afc8440ced5fd6e748aff0b5e38d7d5eb74f0dc6a
+ReseedAdditionalInput.1 = 8352d0bbcbb02627c7115ec7889e342f6c6dd43aa56509c6337b2d882df6abc4
+AdditionalInputA.1 = d8a98a4d9df5a79d17968dbe37eac89729d492a49374f7eaf6e03f53ceaec0b7
+AdditionalInputB.1 = 5269e1187ff582a5e3f6417d9e1abd689fb2a9d828ec3058d8dc1c444cfdf224
+Output.1 = e4a1ec1fa573337bca649bbfcde2eb52e0bd6170c5b12968e3046074aad8a5e33d120468b86a0764a103d848d5a5adf630315cc9141ddc071ede8696c4ae0c9b
+Entropy.2 = 950af3e5e53982027c70bea55340026b14deb046b7b562fc2a704e8744885844
+Nonce.2 = e9e1e5cf21ca35b5bdf09d52e8a20a67
+ReseedEntropy.2 = 4fe13c82f3fb4e9fe765c2afc77dc76012e1514f90c82e83d48ac0a93bbcacdf
+ReseedAdditionalInput.2 = 86e82b150496ca2f7d10266e93c5344c7bc27e3d94a6e230dba8044005445a59
+AdditionalInputA.2 = 2a48d7a7b6515352468196a88c4b015c57544cb83310bdecf1a8be5b53a4875e
+AdditionalInputB.2 = e2f20cf70c849659b19f034b46239635f76c2d0c929d2dcfaa1e31d945f02baa
+Output.2 = f12aa1756bdd090b64aebf99f8628440dcab1591d51ca10f71acf4a6079eebe3ec500526be2dbfb0fbb0d25f61d15fccccbacd143561914fb921d434daaa023f
+Entropy.3 = 842b5dcc519c45e78019c0c8d0ff9f1f89e13b103395c4db67e656c798009655
+Nonce.3 = 59876af458614e4c71e72e1632c2bf2e
+ReseedEntropy.3 = 5ea5bafb705ffb0a051238f780ab027793b64a2d9db4ef15c6503097f8b317a8
+ReseedAdditionalInput.3 = 1f6fce9f01005bfc9ac55c2820c326f5ba8a1027aa492a11306d35671bd15a96
+AdditionalInputA.3 = fdbabb5ee136488271fb8604506c59b2b1b1b0a5cba4241fe9c33d59ffbee7c6
+AdditionalInputB.3 = bc6c2dca4ceb0145d968c554fc9de7f0882c9272be9bbe76cbedd3d72292db96
+Output.3 = 540da0c1d1da6d0e7c3d1e5c649743923ee924a2a854c22c034ff53b6c8666863fc639ebe9f4de4c48618591bc46ce693aaecb6e9c32e8635b2583285bd79185
+Entropy.4 = 96cd1ac93fbde2ce8433992df6410813897fdd93a26db8e6955360045cd55470
+Nonce.4 = 1f258261baa39aa3aebd7e8b167dd6e8
+ReseedEntropy.4 = b765d4dd23adcd9c5b92ae10e5f7d72c6f2874ad0805de3d12d318d08c70b298
+ReseedAdditionalInput.4 = 7b6e37909dfdcce4b15356aa4b5cca649215705fff00a230a94aedf16fba858c
+AdditionalInputA.4 = eac77cd7e6cabc397109a6669328bb78896041c83b6cc6e3f6eaa6c48b3ffbca
+AdditionalInputB.4 = 7b08a256540de3ede2a68a882299d5bf7b55dcf66b021a442e110a1bc0688acf
+Output.4 = 39ae15fd0e416792259c75e15d305f77b0920d9913ab17d34f6b025a78c9d14c25f7bbcc11ae8f9cbdbea413c332d0fa53b5016d62f5925163d1f9f3ebc37316
+Entropy.5 = bbe7caee69afdedca4d565e352bf4a51f1d3a5ae2a2d721b6ea481d8c25e1182
+Nonce.5 = c9e5c075b289b58cbc920feb999da9cb
+ReseedEntropy.5 = a751bc7373e19cac00c7206f065d70f6a3cf4ac2bd8f19a956ed816805404259
+ReseedAdditionalInput.5 = df894e68f61d34ae10a2dcc0ca7ae04b41afd7ba58aac9b2b081216d214177c4
+AdditionalInputA.5 = 2c43a2e1aa4779994b1b74b4510915daa7eb0f90bbae83b5fdceb67fac1e2376
+AdditionalInputB.5 = 6a77a68f3d079237bc777cf41c38ad49c7c0053cdadd0bb1aa41b5d8b81dde48
+Output.5 = 34b5e22a8624734b7d5f6b35930799eceb7dbfc46914f479e34bf64eaa154309d85ceca6241e17fda04f0970457ecfd8a9f7003046c1bdfce3b311ba2efa97a9
+Entropy.6 = fb337b69c9ace8defac7f68535cc6fee72b80bf91d226a3477b90a0da02c3e71
+Nonce.6 = 581d7f09c11e7c408a993684e516a307
+ReseedEntropy.6 = b0cb88e07ac0a00ae7af469cb976c16cbc3e9311b6927a5374d49a9ab76eb8e3
+ReseedAdditionalInput.6 = c1efdf70b216ab0fb7814d0c923d26699749f62a720b9bbcdbd147170364504c
+AdditionalInputA.6 = 4f86ec3b4c3b48896717275b746be20fcf593f3979f4be3b8e16da5039cf796e
+AdditionalInputB.6 = 868204de4b0dce601b59fb692b0891f44fa08b44090248109f5012fd21056364
+Output.6 = 7aee747a7d70d26e942e564289c8403dce2e707daaedf2794603c3bef035d0ff14e8f61d1235e8f8362d18f2c4f1e7dcf557777d4442c5d5eb46e39756db986d
+Entropy.7 = 15b74090b362e9b5c8ba9fb7f9841d608851a9f6d70cd071d346a27f5e1a8f95
+Nonce.7 = ca94433a651a873c10c2bc4626846a29
+ReseedEntropy.7 = c864b786b4f7da6ce9e1154044768210f6ff3e6fb67e9c1c05997fac3d6aed6b
+ReseedAdditionalInput.7 = ed7d933474ebcf2d246194b8d9e281a2b65c1d4c63a44a6b3ddf868e052bdb1e
+AdditionalInputA.7 = 58d85c1f697651d7e18e902f716bc3eb7cbc31b127cd85d706d699c4a42a2d62
+AdditionalInputB.7 = e916429ed3822ab6c884c2cdd5d71613eb41037d18e3d6a893356481a14513f8
+Output.7 = e97f838eef0fb6d03cd6510e47171692f463a69ed5621f7c4248399ea7705148ea6e7c4bf34500da895046e171e514941c43030ca5dbfcc26a3c7e5c305646a4
+Entropy.8 = 65e3db8d0a6e3dc12842f055c80eae31f818b1a14d75c8711b8c181d0d18747b
+Nonce.8 = b79f9cf855e0cb6a841c080bae634976
+ReseedEntropy.8 = d4cf1166b338c642d9ac013891352013034fb8e71b19f46a5e6bb8de034477b0
+ReseedAdditionalInput.8 = c44307387c1ff4eea194169b00624210522dfc9a156624e8225dc49576dfc1f1
+AdditionalInputA.8 = e8b10c6e30e4a2f406d5e65c397df0de25199a148fe316266869e9fedc711587
+AdditionalInputB.8 = b60551596747b7f14391acce63c7f1de7aa596f643a36c97c82fbd8f343ef71a
+Output.8 = 886cc06f8841b2ece389422ca88bc156d396a7e62c018180840ab09b2c8b084c0cd063cc2756755c6e350d42a7ea85ae047f4d8629becd702d35cf2ee4039c4e
+Entropy.9 = c57b697925a2b2ca7ee124252ad75d451a3331cde2078cc349d73e55cec50b86
+Nonce.9 = 5f593158794c514c7d3447871c8ec9ef
+ReseedEntropy.9 = 71653ebc9e18ba5d3e5f0a7ae5b3802ec69615a50f3ae8704a8c3dace06d146b
+ReseedAdditionalInput.9 = 79d9322a06e4c66406b37666d7714c24997db007557f4907a1809cc788326978
+AdditionalInputA.9 = 8f53c1c6a11dfee652132b864e4707b2236d315c464fcf5e8458721266d15368
+AdditionalInputB.9 = 84c784637cdef2053a2dd5dcd6a75ed2119209e7da454b1d9022fd7ef7d41675
+Output.9 = 990d41421f545a758ee415938a05077f56ab3e96f03db62b6c885a987b70dd2d72ccb1882633ab8fbab70021041ea94cced7205b6550156a3d7371a237e9016f
+Entropy.10 = 3e473c909e54ca0bef5de853664f311382ed00522601dfea2ca03acd10593fa1
+Nonce.10 = 5e415a9141dab4df171adad3997952d8
+ReseedEntropy.10 = 2e76a186771e1d7059c9d6df5aab3e30421d34dd318b5e1edd59c0c2f21036ce
+ReseedAdditionalInput.10 = 1810e5b963dffb7fa77b761b6d3cc9cafda7b77510e4445785268910b995c788
+AdditionalInputA.10 = 0abcce8553e1570da07ad5165c95a71ef0a9cee746963995dc7abb2c9b4dc560
+AdditionalInputB.10 = d39b08ed9b49921c7ec735d17723d7c847e061cfd8c3db4fb914e09bc3989265
+Output.10 = 21d77a3706df282892373003954e953cf9091b3502b8028559919d615b7453395e1203c9858c236ff4a39d264dbefab48dc7b3e083a1a2134c1bf70543b81859
+Entropy.11 = d535a09b2405e4388ccbd1f61a5518cfe9d0b311f641a1f2def7394e7ee38943
+Nonce.11 = 8b079843b53f415f4849b60f6c4b6f5b
+ReseedEntropy.11 = 40e4ad890e3ae38b0ef0bb458ab579d7d98904c3f0f1f32bd27205355f2a0a18
+ReseedAdditionalInput.11 = 46f05c8f15bccf47fea0991380fc407e367f1b11dddfd4b3dd0ea8614454998a
+AdditionalInputA.11 = 97881bf63cf3e9cbefa8999621dd8f6f19be231b12e266b77479d715e76566f2
+AdditionalInputB.11 = 20b320d272e02c04c4502a094e22462e1ea76a8126878715ba17415a3b5a1116
+Output.11 = 3dc47d6786c2cc418b6ece22dad21a8d759ce7c4b1982a78d8b326ee7262c64a189f5985e7974f6f7c2dfc43ba37a112637bb9bac1f8b4e6c62452d453f8a2e6
+Entropy.12 = 5414aa61c99a61a837957d4e4834af5a1fa1af06473b2a0092e864377ba60b37
+Nonce.12 = 21dc0ac48c7cbb7497010835fcc6fa0e
+ReseedEntropy.12 = 88072af8d067fc9f63731a62413c3aaf44b4b6801206156075dfc90b0ac9fe91
+ReseedAdditionalInput.12 = 96651fd4555162494926bd865afc186b4e9a93852f7c9ab4f7599627aa963774
+AdditionalInputA.12 = b31b152f877bfd3dbe5516567d78e14881948a60560ef7c3dd6c48e45af61763
+AdditionalInputB.12 = aafab7769b57805fef548d32ed95e70a94190cca0cb990f6bcb5be520f8ad7dd
+Output.12 = 4315ad179d6a54efa9a2438d46029f9df522090bdb69a35191561de0005fc7f074edc45d544ba361cf37ac94a9f9eddb9e5c24e2e41677e5da2ac964913be202
+Entropy.13 = e8fc2fb6f92473ef5cbebee638d58bdd07e5860d87a26670de5e8305a21ba82b
+Nonce.13 = c03c340bb377e036d2f1b9ed018330df
+ReseedEntropy.13 = 6b1e3a62e77c814c22cddeaf6310b751771bf0a86f5f557fe1318ea0fe2ed7dc
+ReseedAdditionalInput.13 = abd7ebbcae2e268804ab4b98ad33fe6cc2129d7f17b3c714185ff2406096b922
+AdditionalInputA.13 = 65669e7db614527536cbf932ad42e4395ccbef38873bd55d1813d80159e1fff4
+AdditionalInputB.13 = b843fae8f8dc655d8421733a6204346884ac335a05e3b29a8adf036deb808855
+Output.13 = a3044087465c1426f454bacc2dad1f9d9e23539aebd8036dd7f58f16d6f2f5556970e75d7283e1ef912542f20896aa98c5cbb1ac1f76ce64d53c7e36761de29b
+Entropy.14 = 8dca78c7874b3cc305c56a4779501badb71c292774e9d1d893b4390cf132c26a
+Nonce.14 = 43ff3aacccee9e4a112a3470ffa6770f
+ReseedEntropy.14 = da524715b45de99391ebb34a1a70621553aab245044a6523b73881c00cb1b2c7
+ReseedAdditionalInput.14 = 8db7dab58df1c438f56a722c148c4a02b394d1d7866b6154fd02f0bb2669e604
+AdditionalInputA.14 = 43e70ef3d472e2cdd737e8a0bbb75a550f6079e2a5026271ccc3dcbf568b84b1
+AdditionalInputB.14 = 94f44259b1a3d3b465571960c6d88b9fa40c7c0beb30de5f8f6df5c374f4b348
+Output.14 = 2b46adfc92d22277111aba056032d79e9c1f857d2a94c627efa3327d6f19e8c900f20eb9e0cb1643016c03efb96618d270e15e4a7e91522f0e1e8144032564da
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 7fc5c67c1e8eaebf19be6463c9ee13825b1c63bd38e58ce73a776887d95ff920
+Nonce.0 = 36b6aac81c45458d48e3a1a342ff667c
+PersonalisationString.0 = 2196680672e2c4e164059cde6d2fe91ba3c396cf4b61b5e23fb1667816f9bda4
+ReseedEntropy.0 = 114475d8eeb771a0d9bad451245f3633e709592442e5005845d0ebafed5f680d
+Output.0 = cc7c9020a9b11501440464e3c306d38262c45838da3a0dd26552ee7a9edd9fc382d3f7b187e9fb370be97d9bf43466a551e9738929f38697c738bf267b664984
+Entropy.1 = 3af4df4e101056d22e9386a4f7d47a975a8e7b44e202e7a3d60a0c920c070f59
+Nonce.1 = 4fdbb787ede1f7041cd6c5a180c23726
+PersonalisationString.1 = f8519898a7173c7beee3406265243c0b06139c3cbcb47a6c4525c41f5cd079e9
+ReseedEntropy.1 = 8172999c005b5ea60ce12bfe0413d7c7974e55f1b8e0552139085e1ec9ae79fb
+Output.1 = fca17ab323f44a1f7bee2ac8400066eee2b02bfc434f63cc9fa3699b083b34ac7a9aa909b411c769cde12cab39b31d7077d41fa0dab0ab1abe8e7ee775511e3b
+Entropy.2 = e8ba22bc9d746b6a4ecf610bcaf197130cf62269dea684920bf1bbcf17660324
+Nonce.2 = 54afff3ab29557aaefbf4f2d7d34e94e
+PersonalisationString.2 = e021d4426537dd91590e354be4d96107a78db80ac4802fff384b529a3f8fa925
+ReseedEntropy.2 = cceab6a26c170b689addc962be4c11a4fcfb472600e7a3e5c5e78f0ce8fa97f7
+Output.2 = d20454549422fbdc7708b047e2ecbd13bb4712e38ab2b0efc6800ce2d632acb2ac1436fc813d551134947d142d8421a91d1eb32150cbf99b266c552b215c20a7
+Entropy.3 = cc0283b56b01af29df83617f12969e05bc95151bd6ea04337825891ac94798e9
+Nonce.3 = 825976f832796602d9afac19f9a45972
+PersonalisationString.3 = 75aec9c32f40bda33902f1a21075775970f6a27844ae2a3429b5e186119ce917
+ReseedEntropy.3 = 7b273415d5bcacc9beba66599235b780a077f4a7ebba6aeddcdde583c20589cf
+Output.3 = e83757b19dc244f48dbf6aba22a8b24ade44dee959d017ffb4fe9771c2a6d28cc56e9449c9050f52b5a315ff7e45354352fc4b44621944dc7ca3a93fba7aa71c
+Entropy.4 = d4c9fa57d211f53dcd16b2f1812141ec3efe2d0bd425d5c1fd7e6d96a146db37
+Nonce.4 = 6473758b32848f04b86ccbcbd017f14b
+PersonalisationString.4 = a2698b2b6e58c23c3e82cc195e155164f4d8865392469a30874e549b0171a490
+ReseedEntropy.4 = 96b59a209fe54ce75a3f0d6f62f7e492aabc41584e1607463d161f99e98cbd88
+Output.4 = 1b5bf3cfee33f7fd4b9a07f9bb98255b0bd47a3e8d6472af57602ab8b6abebd078df5aae7610533ae31738956c3e4ccd41104585655dab4cfcb32d37c81fb792
+Entropy.5 = 751be4104740cd52a1a515e43b80efda1738558de89e6f049ea194d7d8487f29
+Nonce.5 = eec60a2978a490b2e6be71765e69c361
+PersonalisationString.5 = 6c7a39822f61f4f17d0ae39099fdc820c635c69005bf04e4d13b18a188382140
+ReseedEntropy.5 = 3961b24f6427352d52f2dc45ee9d22814e7226567adcff950bf73d431ab8cb4a
+Output.5 = de87a4a765c5040d89743146696a6702d5cde905ebf2dd0f6540d53f5c8bd4fa1c3aa83b9c2b0edd72f857d59571ba508bd63d5f7ae30118e3e9688c606fd1cb
+Entropy.6 = d401f6fc6daf7c003ccdfedeacd011e2c049963f662bfe185c631568a83c9eed
+Nonce.6 = 03735156236476104928df85c30774f0
+PersonalisationString.6 = 175048786aa83e4dc8500b0118fcdace9174bb77ed8eaee4c55feba04534b09d
+ReseedEntropy.6 = d54f61e2f153d3422f748706a4f407914b8478997518cd5f24f07b523bec5ce2
+Output.6 = a3a6910c6ffc121bdcfa6d29b7ee7872b537b3a3ab84a8c8a6d743b83de98dcf9be9dd506e51c5a5569e40eeffdb5789a05315aef595cf4401cdcd3116fe24fa
+Entropy.7 = 77230544aaa99a910369a2ef6798e2106246ab47296485c8f65a75303cf90b18
+Nonce.7 = 4937bc2c211ad7137797a0c4d0cd073a
+PersonalisationString.7 = 1d2463a3266cac9840ed6b7c35f145654189e1e083222a4a281dab501e9923f9
+ReseedEntropy.7 = 2e1d69e466800fe9feab872b3e3d410459dc1791f2924241a00a585a6f94dce1
+Output.7 = 2fed41010752d77f323c4bfbfa09b95296bcbe565b84b4a65d7eca938ed64e30f7e48e0c71b2ca0b6c08a0fe52d8a0cfd8558e58dc15e7d5610cc66c24225031
+Entropy.8 = 5009d818cc0384bfbc9c5dd81579c74f56e5490c56e5311152231e8a71720a13
+Nonce.8 = 1b164d66073467a8fcb1722c671b408e
+PersonalisationString.8 = 1e56a2cdae5911d0d60baed7d49d3b3cb062c4cbfbbe31a56713beb37fb19fd4
+ReseedEntropy.8 = 2d754eda6de487a5b28284867557accd432c6386924b24d32263f607291737ec
+Output.8 = 89fdece40ef81821bbb7beba79f1c1d68cb9bee9e9cf2f6c2b0bf42e0ca3a3c6659b2acbb5eee85ebacfdccf352022088b995ebc84cd24d3a19b832e4617cdad
+Entropy.9 = d4dffe9c0d22f9e96cd2953c6104d79432848893b750eb2c2d738c157f2ad672
+Nonce.9 = 119f1204c0ab086229735c03cfaad1e7
+PersonalisationString.9 = 811c7480afe7d9acfd5d46d85d01c2af4ec7802948a04d3f2d6c2be8ed80f2fb
+ReseedEntropy.9 = 59c7e94becdf5234b602903152eab24eed5f841759fd13a9b0da4ddf14821170
+Output.9 = 8a2bdac0e3b9ecab36f495cdc92bfd0eb1978aa62604da0cf5884a0262123004958f07e70f3380de03a83868f431f8cefad7a14b5a3d9c4254e52f0ce991c0f1
+Entropy.10 = 0ea475261cad88913c57c98aaccc0369ba00e8b0676d1bfb5b30fc36b38a4a1d
+Nonce.10 = 3dd18e05b763fa1ca3881e7d92855c8e
+PersonalisationString.10 = 1b95a4ba8393e52c9498279e8a0099013428c291d70cce70bea7f901a9b92828
+ReseedEntropy.10 = e8ed162de3b51a68e2cd8df591b9c62259d24e31012b7938cd368c1a536ba9b3
+Output.10 = 2c6cf1747bdac8f33351d6392daf4a2b32f5424b12f1fd8096b65b6a76398917c434ffedacdc6b2be1aa4ad6dcdad18932b638e3cb56deb72efd3b69cfd1b0bc
+Entropy.11 = 21893799016cfbe544d663800d6eaabc1d49fbe3e5bc4b958459cbe301ac678b
+Nonce.11 = 60059854b234f18be18c6e6e32c60d69
+PersonalisationString.11 = ab61e44f7aa31c1241a2a48c334d3fa95203a2f2102afc2909b627f83bd0eb0b
+ReseedEntropy.11 = 456a7d566bb488af9a8084e1961b610d05cd7ea57354b20f74c30818abdf011d
+Output.11 = 6401c6afe7342ad95745269580fd3fb1a56c3c7d7f7d747d35e09501c0ef359e1dbbe1e0f5113421f889ad64ab6ee3bff21e38668f7ea16a800dd02179485bb4
+Entropy.12 = ad02f7d257da2a693bb3c544c066cdd77029fedf757f424ce212103e8349cd4f
+Nonce.12 = 6ee3dd909cbbcdc04623fd63e9154287
+PersonalisationString.12 = 7f9b521d357ef486e36827fd0dc030bc5b485e7b44244555fbb924b20a88bc49
+ReseedEntropy.12 = f5d103a7b483cffea2e09e5a5e849c436df08cb41e179e7d2c8537053ed5e71a
+Output.12 = 6c212703a2783580f2fcb4dc48561352cf4bf23cf1ca3f42762923b9fad352d2ef63836760756721a3cd9153d5dc3e96a2d72acd5e6bd9d7a360f9ca05103c3f
+Entropy.13 = a5cbff0d435897ecc9a787f805bbdb26b7ae8740f6b84a46513efb2cc97204ce
+Nonce.13 = 76a06ed1ede264a2ac16a58050e191f9
+PersonalisationString.13 = 6f5cd73855fa56966d62d504e3211664edaaff51818e7a30904c3ae4b1a04a51
+ReseedEntropy.13 = 42e6b157ab34190f8260da9969a6fa35ec313d044fe5ef96f6ec497fe1e526d8
+Output.13 = 6d5df4dec997c59a3630efdfa9d747ca8c82a86305612d40439162ad485d47c93ef44b884f69df3c4ab40a2e4ea63a455156415f31a31fddb6b18d9ae1f3cc1a
+Entropy.14 = 9252178c52d11248a056912f5100a3d7583ba41c91e531b755a93ac5e0c61bde
+Nonce.14 = 9ee982dfbd236075359a6f196bc0039f
+PersonalisationString.14 = 58625e96e03c789f00659ec4cc7a13b31404b9916d8bb76f909f60c085fed9a4
+ReseedEntropy.14 = deaa876e0c1bbdfd5dd7acf88b5320bf9bd1cc0a95c74616e6066cffd913dd7a
+Output.14 = 340afc3154deffc2d8e2b9f9bb1d1c69576c6b355773e279f07e23267eea72d3cd7067f0c2dfa584f0fd1fe8e640058795bb24eab4e5da36148348703802b5fb
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = fafa5b9d43aefb062aff960c01d1f7439f8f00e5de1b2328c8ddf1dfc6cc5f33
+Nonce.0 = 6cf9c5925efd886cab50ce85bb078bd3
+PersonalisationString.0 = bfc8c5eb0e41077eb9fbb0aa82bed7a7692a3abf897f00a021897a0183d85901
+ReseedEntropy.0 = 234761b58f9f7935ed4e4201a876cf796465f90b94d885e8b724894a19a6723f
+ReseedAdditionalInput.0 = 43a4e484d147a9255299ebb89345f2a2b9f38bb58fd295d737e8ac2f4f02a676
+AdditionalInputA.0 = 0ce18400ccf510a38fe7e2da4af7d93874b1282d8aa49074b7de924adb40dc3e
+AdditionalInputB.0 = 68742f4543d1a2506600f2ae8fb718decb2fa30b24cc5bd6d3daf0511a9d91e8
+Output.0 = 966db3b1c92715cb59ac23860d2b134b54112a99b116b8d498366c2926f1ccda76ba3f7d7c282d5edc1f664d22738a45d4bb2440e55b6fd92be89ca7c1ce875d
+Entropy.1 = 282f3f1ef12e70537ea53f17705799fdcc0048a88e2dcc7df223251a709ef9f5
+Nonce.1 = 7012a2a5d01412095744ed5306815d57
+PersonalisationString.1 = 4de79831903f0e24b95962054eed0616a3a7a945ff2b9de8fd631ea08baef3d0
+ReseedEntropy.1 = ace329d79af481c1ca9dc2881d734a10567948b596b7beeb0fc513840e5c583d
+ReseedAdditionalInput.1 = 7321a3305273694eba15a9ca8109b909981627f693a6f1a9616e63f8dbe4cb50
+AdditionalInputA.1 = 3bd434981f58faf82122e612ae8a925f6abb6a2c950a4861107efa699227c66d
+AdditionalInputB.1 = 6836965c8875278ca78ead9e596289b07153f5c42d9973f1b8b530244ad1aa3d
+Output.1 = c4ce3a78f6be467a08ed783a957f6397fcc905ee836dcfe047e28aa7e92d66986f41f86bfcc7ceef9323e0053977276814278c3d3b606ae1195defdbab7141ac
+Entropy.2 = 97b902f2888929aa89b87514b1221eeba8eda12d6c5a60d64ad12d185767fa51
+Nonce.2 = 8f075105edf86da40db76f5cc977695a
+PersonalisationString.2 = 1b0517ee640f1ec6bbfc4fac4373e4c5ee2c8e1f4a721b41487a968c5c058c99
+ReseedEntropy.2 = 4b440899f98b9b71d0fc14a100308f1e74b8bbe61f60e47f887e6043405397a2
+ReseedAdditionalInput.2 = 05d33103390bfba03eeffc140379a81cfc843d27a625b523b40e3dfdfde9ddfd
+AdditionalInputA.2 = de7a2f05700c70712908b2c745b4fb885b2ae8791f9a177ddf98ab8934266c6e
+AdditionalInputB.2 = 62335d94b4673526db732f1237de72308b32e7cfc7a138716c4baa6117b8fc99
+Output.2 = efcd4fd2232a484eee5447a11ee2acfc452377534d453f320ba73be4c4a15ea12dda1149d85f8050c7a20ff681b996ea786480d82e885dfcb64aba558aaacdba
+Entropy.3 = 150a91b63c28a2374c06f70a08db874e587e172f36d2c8044f0858c61b1aa9fd
+Nonce.3 = 349b8228c22dd762aa86080809deda5f
+PersonalisationString.3 = 8f32a77da1af4ad141960f1a69f4efc9905073d4243d9b0ea0996ff45f24c720
+ReseedEntropy.3 = 358b5edb24c9a94d3b4b91d925162c52432803fb90268aeff85e027e47fee949
+ReseedAdditionalInput.3 = 0e2eb11e8f712bb5f6227a589788f8911c838021866fb93a875044130d549bae
+AdditionalInputA.3 = d0d3d602b9e43d8a4bbde73ee93eecbe78dfa534f1f74bade7eb386690f5b303
+AdditionalInputB.3 = 2de24b4917b9d6420e646c3141310c45e493c31d5325a85c1a6f56dd873aba20
+Output.3 = b5298889758bcfec3183875b4d73f84a28a78393be7ebd4ba3d42efba74ed6f5a585d9e6775685862dc45d37e132200855f8f8644b9359d846d74d00082afddd
+Entropy.4 = ce3c0974583f1aa6d24ca012857344694a010dfc4acc2605d3d73b12cf228ae7
+Nonce.4 = f82bc8ab0a5564e3de71263a8a5f943b
+PersonalisationString.4 = de0bde27604019724435795efd204cb4c93999527c5b11c15d11e11d3aa482b7
+ReseedEntropy.4 = 1ef1c0f6f50024cddacbed96f2909ca0a2946b7c9b87417ed5f68c4f9c20f367
+ReseedAdditionalInput.4 = 5c4441f11b37995c9a6ed17101c3cd1f4b473fb0dc9c1388fac6a145ab0bb7d2
+AdditionalInputA.4 = 5cd74aa3c2c94064187b00808c18cb6ee43958b9f8caab17e77352e730c101af
+AdditionalInputB.4 = de68a7f75ef18abbb246543984a278a11a6a37de685a715b08a8a3e079bb9ea8
+Output.4 = 1b3456825faa798f770318687ba62df861a10781b850d3254b5281502039cc0e73eeb85a9c7931734174eb3e086b70491fd735c39f55e67f928ddfb4e8ece3d0
+Entropy.5 = f34560ff22fe4c0919cae7399bb8fc99228edeb6524bbc6207edc6368aada0fc
+Nonce.5 = 394b73da65ab35ccbad61aa3010d7ae0
+PersonalisationString.5 = 4cb42f764081415f1c3468f925f5e3c01c3162d552017d9b4ccc49a3ac9a1931
+ReseedEntropy.5 = 2cdf1e131fec0de653b784e892388986b2f28177c4f5a7135017bf17da30d6f8
+ReseedAdditionalInput.5 = 37c03b055428778efe9e2a49781b02ca66aa0dc4c274800109203eda12a34273
+AdditionalInputA.5 = 2b381252d6ad419356e7d778aaf40d0c1b7e7ba8862f90756723e6ab84baf0c8
+AdditionalInputB.5 = d036ef8e089c5352f8007dedbf493dc3662dbd4751529d95a6755d3e5a27ed80
+Output.5 = a28369dbdee9a84bd0e5997ac15058115a22c9a3119d2438ca86a717b3e160fe6750d288ca73f3bb4a93dcd537502628de0dcb75aefd19c7ecff0444f19f7874
+Entropy.6 = cc20f67eef219f30e5108c0a14af055a53b4a0e8805c0afbb7965467d5581eef
+Nonce.6 = 60bbca8abb5380e62da26f8eec80212a
+PersonalisationString.6 = f98d537e64d3263ee41a2f1c93dd7617d457e08a0d49046bc17410ece7b1427c
+ReseedEntropy.6 = 614587086cec146fd15c1c45602396174135960696bf7854660f504ddeb1fc03
+ReseedAdditionalInput.6 = 432aedc093e9a3f5cff34337f9d1f0b6b2f4d9e955156a55fffc591703873aa7
+AdditionalInputA.6 = 13c3850d8a13e205a8e816d3eea31b96c471b8c29ad037d68cdaf05372f98266
+AdditionalInputB.6 = fe4311ce3a9bf6e105a07a9f6ebdaec81fab968205cef64156db09f6fdce6284
+Output.6 = 98e0dca20d956b4be80e62cdc03d5ea545057061e72bf606057dfcea0e0f485b95552638d44beecc5cc6db876dff0ba95a0d151aa0b72f799bfe49a93d86ddb9
+Entropy.7 = 09e4c1e0bc54013baa0f5f697cda897a0fa47c9a9185e2d0348a756695769143
+Nonce.7 = c592fae4aacc3e2f6a417c5af6c5c030
+PersonalisationString.7 = 6602680dd937f7ac34bccc7ba779329e37ab46ef70b381dc6571e025e0ea3a2e
+ReseedEntropy.7 = 45f2bd8ebc9b2f5774e93de001ed97f25f76515d7482a55e1812941f795e97b7
+ReseedAdditionalInput.7 = 58ba0eda15dbf5b90def6dcaddbff875da07892d2bc3cc4befb5608926283182
+AdditionalInputA.7 = a90eb4ece1a10a5b3eb444770b9fae2db95b524d722a61fb681c8de9c888f3d2
+AdditionalInputB.7 = 77ac3ae246c418ba00fbf1110aac883782fe899b697b830f72904949a231c712
+Output.7 = 6a9c6e15551994774de094270460248807efeeb1b16b7dff102ebc33f043dca3a68d46ec55ccbd891bf4099599c195fe386807f64e612d5cd56496195a1bede7
+Entropy.8 = 62cf2b159e287215e963a289f363c410de2e19ddce44fac9e26b7ed44ad1f971
+Nonce.8 = c4e5b221ae8bcaeccc3481f1c50638f5
+PersonalisationString.8 = 147f1524bee0b05126611100f778e22307ca5893c5868e13c3415d08c3f2d998
+ReseedEntropy.8 = ba3705c6aeb66dd12786b8e35d6e5aacd4c2030a95093a8eb08ecb06d5ab876f
+ReseedAdditionalInput.8 = 327e5580f4c9b36f99949274b391ff1ac465f1ff305d044b0c2e9d4ffc09f9f8
+AdditionalInputA.8 = cd1b4935869894fee3ca2e183416e44bf098239462f9a5a43595ae5927c40d2d
+AdditionalInputB.8 = a4e7b47c9de1f9d36355e2fc992001a37297a7cae7352c272af0191a6f54bb2c
+Output.8 = 89aae170abce1e86ea5275dd8c960dfe29bab54992ea013e82dc89d81caee92e720cad6f261af2b20ba7fbfba1fc2f6843db82f91a404c08b265df06f95b6d4e
+Entropy.9 = 8b61ac65fe61a62d1c142dd443a2a93911b5e35c6626f8c4d0c91b81dd2fe559
+Nonce.9 = 05c2a2119adbc096951a35d922cb7ed0
+PersonalisationString.9 = 12f1c2d9debeb89ab640bd0fdd0bfb3e9f356c22e9925176d00d3b1d79f59e41
+ReseedEntropy.9 = 987630fe622190d0993e79dc0a694d358adf0975993cc16e7bde35cb9baad842
+ReseedAdditionalInput.9 = 3d6864d4d07652feab9269adadf1a759e3f8723ac0cf3b05b846398eb21babac
+AdditionalInputA.9 = d890614d33be07df3780644ee479389a7ae7887e28c25d14f766f289c75f2c22
+AdditionalInputB.9 = d2b029a2dd166fc175c67df9c98b4e16900b1dc020fa113933aba6c77209e330
+Output.9 = 1462b79be25cc48b7be81f44df5fbb21baff037ea86e2a344409cb483157ef84859d346f5c9250ba4539a8d59834b15673d4303652f5c6d273106e053c578d02
+Entropy.10 = 139916e74a7405a70c09e31b6511e85fb5f387bcdbfc1c5e4d93b783da94984a
+Nonce.10 = 709dba3de6f799ed20a8fcc71ca7eb47
+PersonalisationString.10 = 082ff0b52f79f28f635686bf9ad0415a94ea2a4039144c7e3dcef8e3a8d6cb4e
+ReseedEntropy.10 = 72097ff83c0466c18dc664bca1f217bfd467bd38a8aac1949f4996e19670b87f
+ReseedAdditionalInput.10 = 92eaf348c820cc30d00b9dd6b402d076158ee957b19e27e5dee3ea482bce0a77
+AdditionalInputA.10 = 6b9af27cf794bae56e69d0e879cbdb82fac1e372d00a3158ff73d4cc7659014a
+AdditionalInputB.10 = dd18c8139fe9bd59efd536022416f0e0380f5f1dfd5e3e6a1954a730f00708c7
+Output.10 = ddf3e7ae967dd3a1eefb828af420170598d464d3c2f78dbabf10176e90bfdac2d00d9aea4247db053581d0b540a1fce0929c6f24dd647a6e86cb8c422b569029
+Entropy.11 = d25d0a118d9d3f6237b6e56f5eacff1bb9d5df8cb0945c14f09c4b6d778be39a
+Nonce.11 = 745573c0917934cdd615a6a21dd68bb9
+PersonalisationString.11 = bec1bce132aa26ae4b44c9dbb91af4b9bdc6a0c90e4a7a978f36dca0ff1727dd
+ReseedEntropy.11 = 7ee565be81b5b6ba0d60f2d333902b45b435581c5bb4a819030c151b51b61c35
+ReseedAdditionalInput.11 = b1bfd9ef0b5401107fcafc1a5f15ac63fc5886efaebb1dea9c8eaec4a4ca2714
+AdditionalInputA.11 = d87d6833815e5aafdac71791b2827953527672d3c692b42c6a2240d8471a5c95
+AdditionalInputB.11 = ef92f46e53ea61bde175e666e97c62f5a4b1f376f901a798411ef90559460079
+Output.11 = 27fa85c2ebd431025b1e1b6698b5f08f059a65c093fc3cc96e49ac74390404dce00c3456d597d3c59599fb7d856ae55a04b5c8b28200847bb953c33ef556eb1c
+Entropy.12 = 05746b55ef8970e35f379c58f6ba8f8c21d3c4e241f9a8880f811dfad085dccf
+Nonce.12 = c52f6cc43119b08fdca995c715cbee15
+PersonalisationString.12 = bfc139cdc8b46c4cefc1383a9f4289bd4f79c16a46a64c87fb991e9102d41dd2
+ReseedEntropy.12 = 78fe981dd959e9dd5573a69da8d638c44fd8e9a37c346327d6db1aed04287a17
+ReseedAdditionalInput.12 = f16683a7fa56fe77fe2ec5e0fcfc8c7306ac9640e90e12d0f890188435980766
+AdditionalInputA.12 = fc5a69e0798962c72297f018fc6a85161e97a8029b664c789eb995048ff30206
+AdditionalInputB.12 = e269aa7916f548445209a875da37842ec9eaa46b3013f6ee087bf11307923129
+Output.12 = bf53fe5c0d485e2cb84daaad94991f3c1a1c7e5fcdda3cfee97a632f44439710e83d15800ab35d6d6c2205b3f423a4d68a2b36c32497f248e5be80efd72fb1c1
+Entropy.13 = 7882b2a44394f373c240f15982592cc5144ea099d69a6da3ddd531f49844d0c7
+Nonce.13 = bf39eea31493f35655a7b475e75f4ab8
+PersonalisationString.13 = 76c60c2f171d5d3567dcf439778ce3aa920c04462370dab27ed1175b17dc3b1c
+ReseedEntropy.13 = 9b04f2a8cd91f045344404c1389b73c17284fb80e3d23280b407a33bef91a8af
+ReseedAdditionalInput.13 = 6afd74bbaa0620638d49b68631db751e6120b1171edf8a4bb329decdca3505b0
+AdditionalInputA.13 = 01059b5ef0faa01d1e7a8d04a2028fe0b9307bb1dc19ff0549a1acaa69d49897
+AdditionalInputB.13 = 06e86c7f79a2cb16e636cf4d778c10f61f9ed7e24cd7fe9213447f0190c3080e
+Output.13 = 9abdc06e5a7abfb7451cc26ae47df14d33dec8f7923a9d3573e5d3fc1f354b480d8383dbe2e9b7b7346038b9a5bd3307f8b56d9dd6197b92c80e11e3c16b4a84
+Entropy.14 = 4c4ebf43e21c24299475818abc84fdd534ebd9e65b6108428db8f9a549d50d9d
+Nonce.14 = 50fa19039429d957d34742366c8a07fe
+PersonalisationString.14 = 6de83c16f91070e6e301da2e18d55ba2ad77ec054b2706fcea032cf49b0da9e5
+ReseedEntropy.14 = 3e42752a39d1551864f0187f35e3033018498984e496f8e4ffa91bde1c355e81
+ReseedAdditionalInput.14 = 9a11109a3327b3eb22c20c74cad74647bed3d0220fab4f6f2c13c9ac378abddf
+AdditionalInputA.14 = 308ea9fd629b0194aff155ea406d68047e7da4005592857cb8ade404478071a3
+AdditionalInputB.14 = 891a8b0abf78eb7eae64690e48857cde9da4af415dff59fded6305c57ef3d833
+Output.14 = 8597c5c2e5d63dbaed95acef7bb41536fc362b0fbd18780fdfb6f125a97db0a0ed94a8934317d80c93b14cb3601f4511a2d8dbdcbb324f9e9075978d5c9a4f21
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = d5559102cf8f234a89b6c48cbf473b1572a7d0c342d7b61adde3d6a0124d3991
+Nonce.0 = 5be948d054bb66e176b93fa848da0f51
+ReseedEntropy.0 = 8bd544ef239be98ff315261ad3a3e23a8400f1ebdcca65e0f46c7c661fc421a6
+Output.0 = e1bdd0bdb4d51b010b111e9088df562d216ca7371409d729f95250e8100f9753a60099a49408bb0065f99d59dce5081bd67cebd54c2b21fbf35184f26d1c4706
+Entropy.1 = 6b9dadcd05b1f2b4493355ec621bdbb0ebb67952337f3d372396319777477a70
+Nonce.1 = 34e62e1c2e741b4fd74b799c3f6fd9c1
+ReseedEntropy.1 = 24a9fc6393c8c3af6ba2ece51187d72980f40ad601f0395435c54edac642681f
+Output.1 = d2baa45967617b7d9a5056fa8b843d9f5c72b77ed951a1a4e43f2e88a63232bcf1cfb22718868a6d142af20d234a0b4a29f5f152d72ae60b9eb868953c0d46ad
+Entropy.2 = 55c465f279860ae0a30b374e5420b58f5c2fbb557928155bc049404c717d0148
+Nonce.2 = d4137d0c64fd932057c99e9c488bc9e9
+ReseedEntropy.2 = d0976462802628c6ed6320f6d88521228cc62eafd4a8e14984aacd0a30b21b1c
+Output.2 = c1406812252b57e793ce57132f0bf4b7e786a2b96ba284d76917288f0c79b5f52c591bef9b1231f982e142aae6e0cf63bff0e54a1c89345f591fe56d5a795f95
+Entropy.3 = 4071952b5c08ada347c7ad5eca7310963d0886c4f3076769c5ceb732985861c6
+Nonce.3 = cc2dd3393509b4bb2542d2b69610d49e
+ReseedEntropy.3 = bf9c1a5b5d9b7ce8f9e50c62daefef1904190552ae4abc222f8de865d3e3ee0d
+Output.3 = 24fb483fb7c9ff58e2dc900d6334d3a3b62d26ea74e606b6dc7a9b1eb5079ffa0200d4f94795e1b2aeb58a481148f24832a8299216ea9c1724274ecfe2ed8d2f
+Entropy.4 = 8b1dbf309e22d7a792fa898b23db77c07338c5b5a90b89de5414b3d85bac8581
+Nonce.4 = df1cc9e00dae202af131e81010443273
+ReseedEntropy.4 = fa1fc8ff6aecf7ca00f3180e94fccbb055e3a2af28c27f66eaabb81351430b08
+Output.4 = 5d34785040d4fdeb858ab1ca7c4bff23601fdfd91fe003e579e114a2e2a8f290e6c42b20c82322dca0f4c9abb634954d596d1d1bd1193734198352152e4eb817
+Entropy.5 = a946beb38c95b63bb711f043b049ed94cb7d1e08018544a8fafd275313872a75
+Nonce.5 = c858206dca843b65ad9e50a63ebc32bd
+ReseedEntropy.5 = 2d0fc4583542c4e9231482f66a522846bcdcb281d16eb07950a8a8595b200b9f
+Output.5 = 2bbea16d110e8535fba89f4a9cec482c87d999982f6b05c15c4f4bcb740d1d43b90fb762aa8b506afa6d4c8b9676e3bceeb63db92245227c7366aa96970ce8ee
+Entropy.6 = a7fda196a70f5bce96154f88d7a5137b17833a435f042a166d55504ec598b2a5
+Nonce.6 = ff4e6e41b0720aa72c3493b3f207c258
+ReseedEntropy.6 = ea04e60fc4ff309d0534b7ffb5b1a05499326baf5e0d57fcebd32be6ee508ccc
+Output.6 = b624e0594936ecc576aed106facf684012580b5cd7502c1625ad6e0323f64eff8b9176cebdd1f6ab7f399a4b71b8a910f912e12e7145bbb0bb47941066cc7ad5
+Entropy.7 = 59701152798c85d20eda963c032b3d9efef8d7c714203ad44a3971e3a6efddd2
+Nonce.7 = 37963cf44dfe0387747e23fd2cd1256e
+ReseedEntropy.7 = 9c61d2946202c40e78370c46c3dbb4ece293099d88089788592cca1b4c49f79c
+Output.7 = 14c142605f725bb594f200fbc709af892f0a324d41811fca6b81ec71c6a2ff1ee423de7e1421337760847e862670637546cf170735412fa262075219e102c240
+Entropy.8 = 9e4a3124f5c56e8369d51fa42bf66255130a3a30053427e0bb5d0366f18bdf47
+Nonce.8 = 55ddd182b956aaceaf92ed50c7ea7781
+ReseedEntropy.8 = 558f4ecf21687859935f9a25c2acdfc0099c693a86f1cefe62ef3b97334a3fdd
+Output.8 = 02a7bfda634849ff49ceadb4ba679465cc457ff10735bba72b138c2127b5306b5af08fbbfa8fd417a67339bcaf93fdf417a26da6fe3295ddfafd0cb81a8eff3a
+Entropy.9 = 762daf87b7a26de0bab5dba91101f898d1925a517a525339475dfb43a05a970d
+Nonce.9 = f4c983088d46c475d49466ddf3356cd5
+ReseedEntropy.9 = d392d2bd137acd801694fcedcfd7cb5cc8f5adf4b1cbf5e5a446c24e3692a260
+Output.9 = 2b38ebe7a4b0ba7bc977d1e3852678f9a9ec78d99ee5c2e241dfdcd363dee1589fb66d8906eff7b492e2326931a6ea1159664978122ba6e208e49166f4811fa0
+Entropy.10 = 6ac8e3504024bd11aedea1fc286eb2ead9719837b1fb9568bca01c3ec9cc74d1
+Nonce.10 = 3b90c5c9dff9b052e4217b278aa64c3b
+ReseedEntropy.10 = c4ccfacbf294b56e41f6b5d691ec36d9b69d70ed67829a8d2856da8593f2d068
+Output.10 = 3b2860ce55e680fd964787e5d2bbf6fbdb7d5d8bc8dddf6629c588776004beb98314d1501d0e235beaff947627dd695d77b11b19e4feee86030e20479f3212df
+Entropy.11 = a4f11dae4a6d515a7dbbc624dffa3dc16eefbf3be7207d9c1bfa2327e7889844
+Nonce.11 = 58a2e7a6f9cc543de0d7bbe82357d185
+ReseedEntropy.11 = 528c206ec59345ce4a8ffa8f5c85dcfa7847c1184a7984397869a1bd4ef6c146
+Output.11 = 2097b57c802d2585ec192098eea7ad73ae11db7d284f75d2c31ff4b6cdbd3f42e2525a6518383d8d892a578af948425e1e60803afd8835c6f73b587aa78ac03b
+Entropy.12 = db544f7678e8e2f6c845e424414684d3cb6f2f67050df5af3ca5e41d5d834b42
+Nonce.12 = c96c735705bec13ec9348e8f5db4555d
+ReseedEntropy.12 = 8374984b539263faf121459109e0f53a0303fa0f820b9bea4e35c5644a42bdd2
+Output.12 = d6b543a95c184b96583e9e5d477ed19e2dcdb84dba6921587fb14bc6dc1da5a7bf9f2aa4145d3d4f773f5393ec8b76c307f3f72ff1b5e0b03b322dda409a88b4
+Entropy.13 = 8681547745ec3c9bdce97528798ff35e259f0e649b525f492daef3a596fca9eb
+Nonce.13 = 927d4b92a9fd2d8a78a05f73c904a7c8
+ReseedEntropy.13 = 8ee9e576632b2f5a549e3dd0d99d0b267e07936e97223a49edf386bac7fdcdc4
+Output.13 = d1616f145a4efd1cdc6e688266d20da116ad9044ce4e4e42d7e6e78b65bb4ff15c8936df9f2ac65f43b5111750ece51412847ab3c0d63053545546fa66f57718
+Entropy.14 = 734f99b0abc61ae231db7fb19ab2bc4bb903567d6b35dbaf76274c4a689ea2ae
+Nonce.14 = 3cbcda1dc5f77e82111125ac8c9d30b3
+ReseedEntropy.14 = a3756fff9903f323e573872104a1f4a2035dbd3a464ee5a5ee8db4f48ed0f1b7
+Output.14 = bfe7e205ac689d21ae2a2685e2eaf1ae0ad3e139881891c1d11b50594ddd22cf3d7ee4d5d4010b44c9b7a86f9b86d665a1b28ae21ac1d119ddb54e144ee8cb64
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = a6e860414e2fe8d4740ea204b877c76b50280722c3b91863257434c75304dafe
+Nonce.0 = 8f12c9327d28e2c2741e4ad7e27bb124
+ReseedEntropy.0 = c32e3b4cf97c06fab41b545870add8c3f98fa6751aab02988d2d34c95d199965
+ReseedAdditionalInput.0 = f0d9a64fabbf346c871d7731e71586bcce748b08ff0726d68d54bfed27b10b27
+AdditionalInputA.0 = c72f45581a7973cb4148fb9e8eacfca0e513c40ab8925313b499b1b83a99e372
+AdditionalInputB.0 = 7dfacd72c084c324f721f03addbe72b646a4a723e78b5e401aef844cf2b91333
+Output.0 = db2529862011f45d95918d843b7ef0d7ab18a6d6e3f0bcec109497502b68b5ed9ceae85514af51597e8479196d59190cda414e566ad638d39156351afbaeafd9
+Entropy.1 = ddbfecb88df6627552b913e636a2dfcc8a0093f4c5d6ec3b0a3007cfce1b08f2
+Nonce.1 = b862f9d492d93d736201b5cef15b5c5c
+ReseedEntropy.1 = 2ae9d19f0aaf6688d78ab91b11f0668c1616e81a6279abaf911b4686e046d1db
+ReseedAdditionalInput.1 = 404c84943637c22fced49555839dababa0d6df25c7a049aa2bb7114bea93ff67
+AdditionalInputA.1 = 79539a1fe56c5e1d7201292d507c5edb554cde37968105c3865df9f7dc36d1e7
+AdditionalInputB.1 = 8f3319f843e08244e8d27d7eb5db681e9ffd83657ddb40659fde20b2b4376c01
+Output.1 = 87b7a3e5bfd7a5f8ba93fb020f213cefb0b2afc6a733d99b53e56e51ca06068f1a37ff8d88b7c77c23487bdf63b098761040f5f3d49489c38fb6fd3a7eb33ff1
+Entropy.2 = ca44841ba83accac8a90e8e7ede86a9bcc1e42a736f317be3ec25dd8c015e0e0
+Nonce.2 = d159a415b81bf26e13b6ce3798631f7c
+ReseedEntropy.2 = dbdfb6757148704b56a16c4017e4daa20c1a403b790bd6483d3f4c1ab4cc96a8
+ReseedAdditionalInput.2 = 8e222523a93e06117dd2be55ed5130ce590dcbccb705a423867a56a6c78751ca
+AdditionalInputA.2 = 9f0d6ca9f4d3b79f369f3763254fe80a7703df5a96dd2ff53d57820b70095c1f
+AdditionalInputB.2 = c9019927c40ce12c1bd596c22c72654ccea3ee5291cce11ce550e60eb7f03931
+Output.2 = cfdb90641288c8571748c9ea5934acb3230a847d1deed48014cc1b2578e40539dfab2bc6118057b18608399edf198dadb487aa4af20bc5f44d8c4fbbc96056b6
+Entropy.3 = 10e26c674e99f1866778e316507f7a15cf5d82fbcab3b91ff7f66b9261467bb8
+Nonce.3 = 1276fa826b68f385f23a43786d62be18
+ReseedEntropy.3 = eca2bfae3fa6b271fb51ef89a641f89230ad3efb23a250534a342dbfffc43bdf
+ReseedAdditionalInput.3 = 8c1c673b3a06bd9b10c787e609442d7f6dba9def1d596c031d393c9165674114
+AdditionalInputA.3 = 12ce47002f815700e79ac66f69ba65874427a520e5a033a09605ded1ace9b0d2
+AdditionalInputB.3 = 0580ae03359c94d3276e67878a01fc99cbdc83bb832dbd85a61a116038d6284e
+Output.3 = c65a716f716e12e8884b685fbd612f8adfc02b0d1753786208802aca3fe697031f514a470c09635030f0397381bc6195e99ff24bcf20f516a0b4c655a6451305
+Entropy.4 = 52998a71ea17fc993f67d8bbb177d7e1939b585c2136ff16112a89a89d36ad6d
+Nonce.4 = 4dd676a42415b48187ecbb8f27057a2c
+ReseedEntropy.4 = f7673a0f9b2150ee9567cdf4814a409941a1760cbfc369e8c7dfc71b02c27838
+ReseedAdditionalInput.4 = d161c18abb23d0840bd377bf7bf4d6e6aa2febe4542bc53807afd50dd32e711e
+AdditionalInputA.4 = 92c180e77c48f9b4a0fa85f3812e0b2a19ceaf56890b5782af2cc91f738fc665
+AdditionalInputB.4 = 505067be2250e083f32ebb38feab5fd1af1b7179cc4b73a4ea75f3adf3e7fc5b
+Output.4 = 9c3db70621f2e9b66d94a72cf9652727bd76e16fb98e3f780b218a3f84c4d5d38604ac8571fb7076aea0d669206b37b978787767dcb4e8f2cb64092e1cfb9739
+Entropy.5 = 71037df5d1852fa6d5852692b364bf74d8913e4bcc015ec97b8cb45d4562e851
+Nonce.5 = f7aed4631bfa3de4a0f028edc9baaee0
+ReseedEntropy.5 = d6ce6095eb531c5ec94220978fb4293c8f627e970b0d34cd2f44bdb38eb9edd4
+ReseedAdditionalInput.5 = 99a6e1f00cc4b9c4f77957d4f83a0241cf4ec14c59df8def35dfde2b5b441d75
+AdditionalInputA.5 = def6f79603de4466cd17c0a93b582ea2bc2d94ded24d74bde57e8108566730c5
+AdditionalInputB.5 = 8805f093a67f02b208fa3744511158f3fac07a7884fdbd2e5a96eec9645764f0
+Output.5 = 870335d83576cf60b974ef6b2dd1e2a973901667a6905e181e5a049a7af0f483bed1ff1165d5ff094e8856bd7f93342dbea5e4a5407e7a5e2041a96c943a2554
+Entropy.6 = 4e40ed65deafbe08d81aca6607518fa9e558ba83235cb923ae5ec2d4819e4fb2
+Nonce.6 = ecd1c0863892cd096ec000d1f8295886
+ReseedEntropy.6 = 381bc24ef1fea404c685eb7b06c40db6972af2f99804dfa88759147aad41a862
+ReseedAdditionalInput.6 = 2d28445ea881ec3a423741b170b5ef8529e5dc53a26f2d63452af428613d56d5
+AdditionalInputA.6 = b7ca5fb6d8a7ce2a5d25bcbac246978a2601832fcd9ea2350bbb7bb834fca785
+AdditionalInputB.6 = c5dd4328a110d69aa1fe1b24281b8bbf7a15e78621d62a6656f3a03c87dd92a7
+Output.6 = b97b220c2c447029c158759f0a5e944e353c15f03d3a745552f8d5415335e8c84b8038e630bd82183b0c1a3c4f75c4e208e27576373653eea7b84b1ec704f496
+Entropy.7 = c7a8479e9a97a04cb31a75b1cc8c12897383d4b358d630806793931d67e29f2e
+Nonce.7 = 6952336695e2f51842e50d47ac031e3a
+ReseedEntropy.7 = 4dbef96013f0b035dccefb03362074e425e4a74916be7c9c8add3768359f6310
+ReseedAdditionalInput.7 = dda0cd22f24cff552ab96381986782bbdf4fa91d17bb25265b8f30cca931b3f6
+AdditionalInputA.7 = 8a0898e1eaa5ca96cbffd0aef4aafb59e55300990ff4e4d2a557449a9f452b0b
+AdditionalInputB.7 = c0b48ae5e4cff60d9d8092104105a485d400c4e62a2087b6eefb8c45c7251a15
+Output.7 = 8ea61e740080edcd50d8536edf1fb09cab9514afd3f5d70c61e06253cfe29c357f58dcccc7a9478cb911d8b078d028fc28449678a47e12c1ef80edbd6828055b
+Entropy.8 = df2fc41f0bd9d185dc15c6eab6b9e9e7267e8cce272281afa5d6545a75ea7a18
+Nonce.8 = 2865dc91bdf6bb25bdf9ecae6810be24
+ReseedEntropy.8 = 2101febe4904befdcef6089453ac1b3c82cbee725d969f0977cb574cd2a4412e
+ReseedAdditionalInput.8 = 31b8d29848a04f8159b802d6ec982749e7fa4aa0b872291d2cc9da0310344d43
+AdditionalInputA.8 = b0aad9d5685788fe821bb2bb81d3420f49a51aec118f5487f4155284788576e8
+AdditionalInputB.8 = ba68cc2ede4838a834938dcea694fa6341b0732860c0eda9cd0fd3c6e687c988
+Output.8 = 4dcf23ca7fa98721651c0ccf5f7ae8cdfa512cba1a90f4cb31ac8d1316c1d3672ed846554cd62eb85cbd0ed9b28f6e2aac87a1b29076d3278abe1dc4d9813795
+Entropy.9 = 79864cd2d69fc5b75faca2a93503ecf21b60176754c7e6c028ecbb674f2bbaac
+Nonce.9 = 619b1f7ed28f451cee9ba73f614b0590
+ReseedEntropy.9 = a618dbbf6acb2e29b273ee89ce866ea293b28b4b11b47cef8c48bec293397cf1
+ReseedAdditionalInput.9 = d22db190f2a71745a7bde0723fdef05880f8e373865c6e8b9333aa9333b0db55
+AdditionalInputA.9 = 760ce12b9a1f09ed4c0b9ae5cf4785ad0a8e6f4e69923dccf82138bf2c575273
+AdditionalInputB.9 = e61761dc83fdf94e910b25b1c16b836530be7cd3306b4f2981ba1a054332e78d
+Output.9 = ef45a0e11a2ec4008945bbf2e2a39ff26bf4ce1262401293326486412e77e7135fc3bcba60c2613b4893d3755bd22537ab347585931216151910cbf96876b300
+Entropy.10 = 23f32fd6a80979d004ddeba2fbcea7306594206807e66ed05e8aa464ec91b714
+Nonce.10 = 753114f03f8fa514b7d309adc90aa549
+ReseedEntropy.10 = e03291ac01958946c9688eaa3ae793357e9f75b47153d71b26375f6a10070add
+ReseedAdditionalInput.10 = 7ad9398a3137a1d522e0e2229502059bedc0b4854959809eef19adaf9f593a70
+AdditionalInputA.10 = b0d4e896b9a0bea073d429c9628c2375aa8966fb3ef44cf4e4010297635babd8
+AdditionalInputB.10 = 08b1f2d69c90007caf10bb988baf3f7ed9edc5fa49f91ea682675960958826c0
+Output.10 = 0b24d8fadde949b8ce0a44a55cff2afd20358be7579932b3a5bbc41cc9cce2bc107847dd14e334da5c8eb3fe0397604627a93f8791d64a416c6f832242af05de
+Entropy.11 = 7ff49d51b6bc7301d2d33a1376782c9510f2b16e839ce2d28563fc2878f62e16
+Nonce.11 = 88b7489ab9754503e98058c4cd9a18f4
+ReseedEntropy.11 = 17cbc9236b1a435d17ed3e7f4384833940b874bc26dd64abda0183f2f14b7aa4
+ReseedAdditionalInput.11 = 55780b471628cbcca5bb716c42c8083e1d455ebe569d39fa656b0bee1bbae1fd
+AdditionalInputA.11 = a5f94dfa7988bcf88bde68f7311248e4df8be9af8df3f4814e976b751c23113a
+AdditionalInputB.11 = 5987bfb27d2fe8f5ca95539a8535a8cc3da26770c73ff34ee8d376474483f32a
+Output.11 = 63071a08f1c255ad8987e834882da0ebffe5ee72fdf4b4bfcdc4b78082eecc5e3a59b218b9d9084defdf061fe6af5dd570cb932ef44ff641d474aa04587fd712
+Entropy.12 = 59c624972540133029e91562332ccf40f7b556286407a73ea7c9df4304d2f325
+Nonce.12 = c0e47a74bb19d6b16096364c37ba0ce5
+ReseedEntropy.12 = cca8c1bb4482a4833439197657b11d64a5e656e0e61ae71d905158c0d9bfa3af
+ReseedAdditionalInput.12 = 412878f568083161e5c8608ba61280773396730f791600390103395c7e80c600
+AdditionalInputA.12 = 048eccc929ef23bb414d3d1a4e6ec703b032f21a23d5940815efdb060be59542
+AdditionalInputB.12 = 4330d5487d7170f55edb3a50936c75bbf5230f247b295245ca1078d8b646e52d
+Output.12 = 6c581277556d56a33d1548cae0320c5e40a79a8131bfe564604d5e05b10cce0a9f69cf324ba3d52a04a856358df5ef720ca25af4d66a8d5bf9162176fac7f170
+Entropy.13 = 4360d1f92ca7600f954eab310aa1b4e584f32794a27cb4a4998fc516973262af
+Nonce.13 = acd8b947d3f3252cc11f22d47ce728f3
+ReseedEntropy.13 = 815c19406b7f659b6561c7232ce30e719fca7004c66ed6f0596472340c24ed13
+ReseedAdditionalInput.13 = b4e5c9b9d454cb1098bb949614a84c36cee8fb57c627ea8631f5c0b6303a2137
+AdditionalInputA.13 = abefd6a5f2e88a697906d74b23b39af97a195a30b8c63d226bae6b2ddf2956be
+AdditionalInputB.13 = d3f2277e1e89dc6cd975e7d77dca4b74bf67c68b4e8dbbc2bb1cd0298b3df075
+Output.13 = 1af3586299e7fb069d13cf8e1697cd3d24fd1b1c656b64c2c56cfb5f321568c435ae1524f57a86097abdf088fd355db98a1bd24ce82af7fb0bd3fe5e0b263615
+Entropy.14 = 181421b5ee17841e2392df0be3bebcb4e905bb5cdf7cdda6b9604f81450bfa23
+Nonce.14 = 7e9de5b37241f1c4ea910700d8f86094
+ReseedEntropy.14 = c3e2e38de2b26b359962abf56bbfe4cb73634f79c121469d4544688d65e9cec9
+ReseedAdditionalInput.14 = cf24f34cc1d765e88293a7707cf522c298ea335bfcc9d9a6e80bce3d5755582c
+AdditionalInputA.14 = 1be24010850f9aa3aa0f50c98be815709d5e7a3dcff9758b1ac51b5a66641c68
+AdditionalInputB.14 = 3908250e9ac3b3a8823f6d6156348e55c35dab681b4851c39ad6393e42a3469e
+Output.14 = d47663de213d5a15dcf37674d713c850c14cfd7b1efd62f0e3dd1cdb51dcaed43fc0b660aeef3858ee5e911e17c0bd748c3b762ebd595a0275902b69e753c111
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = fbae3ee02105a8a2353bbe9d806829cf78c8c312c782abf1554c6646cc37a1e5
+Nonce.0 = b0479900a404e8e79c5f2fd7819232b9
+PersonalisationString.0 = 54909fafc8f70428892f8d32ed51e95672892192d3955409e89c53dc6980d0af
+ReseedEntropy.0 = aab36c9fab8bea6b9deb701fdf565d51e7a18b389808f8b938375d76f8657842
+Output.0 = 8d1700f1f632df3400af0cc91c4d3d11da034993df5043cefa49fbc01784ed78099eec91d09395084df325ba02cdbd5b1abc64f9e347d81ae091ec081fe27d4c
+Entropy.1 = 7d4f1135a52bc86c13750fcc1e02d31d51af0573405e7ee1b61a5aec6f969ac9
+Nonce.1 = c2b995988a6fdcbe043a415abb20f6d9
+PersonalisationString.1 = c81a7c88169f1ce64f5b8edd1eccfaa1ab853e487996c24d1368af364ffe8cb8
+ReseedEntropy.1 = 98772db6c038a6bfe328c9db0593bb12c71cb14d12ff5c5e6aa11201bd7e0658
+Output.1 = d5e5cf6a1d6728c50a958cfa9e3853a378f4b47d2a8bb841aef6bc55835143fe411860e4b3afbfc948ff87cf6e653336422dcc36b606560df66bcafd8302d7c5
+Entropy.2 = 03cd4e03108959a587a209765412c2deb88585369aa7280ad95abde3bc5e6b61
+Nonce.2 = 499c1512bc86f1b0eb1a0627dce2cc39
+PersonalisationString.2 = 3356afd60365388538c277b87cc82f4d10a2fa6184ba36cac3f712d584d65dc2
+ReseedEntropy.2 = 61e05c8b87a35d5be47fed54ebf7543ddda13bcbb942d080718cceb07ed71808
+Output.2 = 2efabe7f944ce49e27b86fda4e0dd9c46f119ca2541c8781dbec6be2cc74ce9ac208b24be5758375720f1c42e04187623d2ccdce7343d7c8c1244a66926e2866
+Entropy.3 = e9a33feef5455be57a876a4eafd4febb02a313c77c64217ffb8c6fdb2c46fd9b
+Nonce.3 = b0a2561d86f4127871dc6c0917fe01de
+PersonalisationString.3 = 6231a999d00e07962d9826095ed0c249817d8647ae02d17c25057438eac5b506
+ReseedEntropy.3 = 7121a38b59f80a53641b0cebe2a6d1aeebf6e36696482d54a5b5bf0ad4490293
+Output.3 = 165f56a01e61944eee87ce0c752a8a31117d6ead60c37beaa05d8a39ec6f42b6b9c90e471c840a6172facd9a1bd3db7d47709d665b49407a23020dafb897e853
+Entropy.4 = 05bdd4e143180e1be2d2a561b90559268e462ad56869f5f5d3480fc4bdd1e682
+Nonce.4 = 747d40d20f46a7f39ae52bab17ca61ce
+PersonalisationString.4 = 403e35af4ffae9e3ee2d5f277e69b29d3f4a8dac36691ddb31507dda6fbe6650
+ReseedEntropy.4 = 5e4e32e94ed5e1dc894b7cf2857bf5e2218e46f2b69f8bf4555bcca61568af33
+Output.4 = a36846c720118736d0992a0afeb08530a2a3b68bed0c76076ea652509117943cee2f8f888f82c8c0405cffec84b2145821ca33686435afe145c04a49dfe1cd7a
+Entropy.5 = a635e43f3d97dc3511932aef96649862b46830df9ac0ebbc31b932ef51ada05b
+Nonce.5 = b38d9926191b49eb995981bbfececba3
+PersonalisationString.5 = cd9838b07d041be31357fe9ebc01faf54731ccb90584d6c19523df3989cd866b
+ReseedEntropy.5 = b8d111bacdf01b76b1482da9df8976ac34bfff06e10184065a339adab85a9ba5
+Output.5 = 6e0fc3de87a9928477905b9b621f3f9f86fec7643007e4b560854fb2099c7caa58b862c7ff21980ed6f91f7867a6ec4870e2c32b34592809b8af1795807ca34b
+Entropy.6 = 1ff0239922872d42ccb595f7bbdbe6ad86cb3952251e6e110b360fbdf419591e
+Nonce.6 = a007416d48312457ffe08b438b54d929
+PersonalisationString.6 = 70a3f7362745ba47a9d5d593817f096d881848f077e81f4339e79effa9919d82
+ReseedEntropy.6 = 56c968dc6d1703fb429355a0033b5b61e87a226167bb36017c70c4b177bb7ad8
+Output.6 = d037e0fa29bb5e48bb0e914c095a118cbdc46a81b8a5b68a84cf828ec39ca4909455cd002126ae1c3dad1279bf33fcc7d7475905d3b5f4b981c8fb158fe67c8d
+Entropy.7 = e4c6e4010c7f5b79d067e035eae4d0f7e4c6b313c5d0f4dda3f07f770e637819
+Nonce.7 = 982ddfcbe5b655dbbf1f6e428c6ea216
+PersonalisationString.7 = d6117048bec591f90a4681d8e667707f9afcfe92f2eab86ef04b68a41de17f31
+ReseedEntropy.7 = 02939cd4004ae891b3bfcd210075c1a97876c0cef86d3ecfebe2c8caf80fe211
+Output.7 = a4182c34c1df827ec93ebfa0d515cc7d6f8ee22f3a769a30af0cd5ee7488ab68f70c4ce62ee314a047268c0045fb1b7d2584bdb646c3ed49c88510b4c54a676b
+Entropy.8 = 652db40eda989032ae1ed5ee901cbf950c31833a9d6f36e5159c2cc8245df3d6
+Nonce.8 = 728039b672c1149b9b48a118e67f738f
+PersonalisationString.8 = 14a92992fcb0157780f8199af56ed1caec8ee624d9232da4a149c3d2a6e53494
+ReseedEntropy.8 = 8d6a04513dd5bdd3ee04dd9dc0d48edac041348bf69523a82b25860ec171add4
+Output.8 = 6a7721ac74feae95b295883330e00de94280cd666c7391c7108667d1292dc88015f99130e561551b7241c9e5a06b476be944215b2366e664eb28e5c25b2fa984
+Entropy.9 = 983fb9e29d7cf7406e031a501a04f5efbae21d89d1ff7e3744c6251b1c6e51ec
+Nonce.9 = d479f803128d7a87dc5f1880e9d182c5
+PersonalisationString.9 = 0d58ac5ae040a369aa370c40deee131636097a1c7d2c262edf63bf939f342616
+ReseedEntropy.9 = 35aecbdd244a41972be4509a98ddc4d6467fa633e9353d9dd2c3442a30875039
+Output.9 = fc7b2cf9206a83b2a8d7edb178632a0c0c0bd3aa28b19a963fda7fab9d09928adedee6c37d3dd4b9f386529c6802d9a4f5f639dfa492bfad22d683b6c9fbbe6a
+Entropy.10 = bd9e23eb4bb4dc2c3b58a7f4d32c8e932108fc7a2dc7a9f40dce671fc3fea1db
+Nonce.10 = 14732ec751a55666de4f16bac77d20ab
+PersonalisationString.10 = bf7e5c3fe8e3af805e61b2a2be73b237e95c5b93cf1e26d0435ab63414964740
+ReseedEntropy.10 = 62f6d8065fdb7279bf58a4008095f448519a21231c9b96d59272a9b5382b726e
+Output.10 = 51f4374e6804ce989b4bf41e48de6bfd371f02343a07da6a7a651163f8a84d4ea7c705e0c5491dfe5eb8730dbe38d69d688b6d8351e9600c231cb7276d69dcee
+Entropy.11 = ba06ca204754972a26ac9625c85c5c8094d8edb07f6f473ebb941b5771187a17
+Nonce.11 = 200980cc1668af5a4e54079619470be3
+PersonalisationString.11 = 57d807d0a619f895ac683779e6c1f89baeebc93e17db5b5e80bddce5f85b002d
+ReseedEntropy.11 = fa0e8f2a77c6c06a586809f3eae93aa7eac0a3d09c262a72a1886651ba25296e
+Output.11 = e022dbdfcd0188ed16413014f1707577c6af5b59ec41a46b983638c6a7e055b9fade91528c9e5c46d84a71d733a47cdde62f3fb47d3356029c4ec779fc885691
+Entropy.12 = a7942a0d3b075461a29bb99343b10e1f10014f53097c3402744759d24baf439a
+Nonce.12 = f268eb70dbdfa7ec611419eeb94bf884
+PersonalisationString.12 = f947754a3135bc1907f86f77f6f5224594b2c587193f7d86e343dbe8ae940af0
+ReseedEntropy.12 = 1f5725653a01fd3d3870a5874bb97e0910d48039589ceb80a0d41c2d3b07240c
+Output.12 = 7248faac73e778281885473b0ad2ed56dc3c4ecb505a29c080c57dd507e56a50bfe9ce04c724ac7130cbfcf5227c8df51ad108fc5875ed13cfdd3eed7b95ed60
+Entropy.13 = c17b592351ce97c2b9397d1d35f7849361ce0fbcc89d64ea24ee234489c87848
+Nonce.13 = d02207b533ddfc79fd54e24747254268
+PersonalisationString.13 = 6b8860de89dc493459c3e8221db10d601677eca93c86a43607c0ff558d26b704
+ReseedEntropy.13 = 267225f3a9aa0867a4be8e3e53015451cf58796ace50a36c657811e51bd52170
+Output.13 = 2c075efcca1a603e609f35bdebf57556e87c1d418bbf2298788000b8254f70a44e98172e41c6ba51dc3521dc1969bc386c625ec0ef1289c42c3e27c52b4a2487
+Entropy.14 = f883b4bbea89cac2fd378559fe5790d7ad64dc6f5acc61ceecbc13bd971f6afb
+Nonce.14 = 3ab08948f01416317cebab29eb211d7b
+PersonalisationString.14 = d086057493500d75d93d9327b09c108ed9e62701794951c9b9fc77ef3872a555
+ReseedEntropy.14 = 2149693ad3bb60d8750e9f21ffc16b7178310afac1e2fa63334302cffa1c0a47
+Output.14 = e0598a33114cc183edb843415d697acadc91c39ba54100c7b14f79e67e47eb7f8d21cc1c5e4d744b329f717c88239035b91fd4b70e415f2697e9f9d436f3b001
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e2f75cf553035b3cb4d21e567ca5c203623d4a4b5885326f63ea61a020a4984e
+Nonce.0 = a666ee4b26dae5897fc5e85c643fc630
+PersonalisationString.0 = 19275bbd7a0109d8179334c55337bc0a3f5ac48cb8c4959c888c0b65f7ac9a84
+ReseedEntropy.0 = f6672d022226b05db5d3c59c0da5b20a1be05ecabbd1744483ca4ce5571d93f4
+ReseedAdditionalInput.0 = 8c8f940af45aec864c8aa8be60b100f82bb9670c7e2a392a4ab6f4b20eefbbaa
+AdditionalInputA.0 = 26b5f0dadc891e0b1b78878e7ae75aee843376c0968c54c12759c18def21d363
+AdditionalInputB.0 = ff6791f4d4b29996b0399d95a14a28b8e2e20787531d916e7ed2ec040bbd7c84
+Output.0 = eb8f289bb05be84084840c3d2c9deea0245487a98d7e1a4017b860e48635213d622a4a4eae91efdd5342ade94093f199c16deb1e58d0088b9b4a0f24a5d15775
+Entropy.1 = 0babcecc5d90f7e5dfde2c3c24a07669e0f719aa4ff5bfcc02edddc55f2c48f7
+Nonce.1 = 2c3e8afcaaeff94ab339e39aa5cf1abe
+PersonalisationString.1 = 94d95ddfb02feff3950c03a28545bffba98400f9cad004cb22b8a77b67ed6180
+ReseedEntropy.1 = 1782e8626909686c379cfca78b939f7c0cb589ea0bd316f3aec8dc5a0493799b
+ReseedAdditionalInput.1 = 7b5f37adbad31d71cadd3d32b57284b5f9d7d67221f451df258193a140d4a138
+AdditionalInputA.1 = 750c2c67d1a3d5b0417527450fded204a5aa9ff6e9726a33dfe8db52f85cf29a
+AdditionalInputB.1 = 6242c00a5c732f38008791870973be60b83c043a1bb3f0bedb4e46170fda5be2
+Output.1 = c0b7acdff7a33628fbb68bb399693d0edfb22623fbcb1fe64cb503cc527f81c705a57de8e7ed656ce328e99cbba0decd253cc9468bc8042f49d3a48c51ebabd2
+Entropy.2 = 02e0c4bed4ff5a3a01a2573cb1344a55a8edd68c83e111da83eaee2217b7b0f9
+Nonce.2 = 606a909c1eb426e86f6564cbe0177273
+PersonalisationString.2 = 519758933d0c75ad844ac8b7b98c314522dcb5b8082af368cb489bcacb5dfaa9
+ReseedEntropy.2 = 81b0923997a786f91ed0c2783a372c87fe0fee2b8305238efff957566451f712
+ReseedAdditionalInput.2 = 576e8dc36e4cc8afe80edfb94f192274bc904b8659f3e727284fd377e9f9fb38
+AdditionalInputA.2 = 8c6563bd4a5fdb598100355810d3af0e0e07b209b78cd56ce533aba38ab75b02
+AdditionalInputB.2 = ebecb4613457150d8a285a354251cff094a635c3e18563c800b5f5ea71032efd
+Output.2 = dfdb7f53424560b5fa21bfbcfb6a17dc6cd693681bb978c2d04cf88c4678b68af84fe541913e633fdedc21a87fb5cd1ffe74251d45ac15d8e4ecb30798d06951
+Entropy.3 = c074a9e5ac43390437d12d7162853aa9abd76ec7ecb417417b304e164b60cb6f
+Nonce.3 = 59e303f0be5c528e45258d52614b8518
+PersonalisationString.3 = 4cd74f78461d879a90c26e16d7333ef459c2d632e089497a891a9ee6184e981d
+ReseedEntropy.3 = 3161ef4f92bfc32faf7fc1d70b195cc1b051f7f0afc5902f4f28d046203182f1
+ReseedAdditionalInput.3 = ab16c417442b01f3372508c172c7f237e28f2b01fa1394e393a871ee508bd5b2
+AdditionalInputA.3 = 81c73b8780e87169494230f04fed33bb5b251b6a42bc60a0ddfe3fce78a1eb5c
+AdditionalInputB.3 = 29df724164ffa38269183d55e05b22deb8defc0d40fe9c23297be0b69261f653
+Output.3 = d4bc09c391f5ae449369d9267e76448d6493a260adb9c3870cd50bccbf236b6bcff21334c693929c83938fc9d67a7d96a17e754a8b68829a135d6fb63bfc7a26
+Entropy.4 = 9f06ca93ae6af2ab0fbf6af0eb1eb583b8f6f8b50ae9e168ed6a85e6ca5609c5
+Nonce.4 = 1c3fe6424b3a6d4ea41edf35f977b385
+PersonalisationString.4 = 1164b2c03299b68dceb2107a616e1efe4d111d59688b6e24812f65715fc98023
+ReseedEntropy.4 = cda65fa8c4e0bf37f3aaa9c2538d8107fc1cbc0725f38ebeb4b8741e23b6a632
+ReseedAdditionalInput.4 = 44d6f14be3aa7a46854baa839c82dde239c6fdf237c61890e132a54822842136
+AdditionalInputA.4 = e50e5192f4ebd5770b17df642070a94e7ab8e364fbfd42b5f4f0f6c3f3120b5c
+AdditionalInputB.4 = ad9626e58bdcd430cdf817245d04f8be6edfba8a6cda9d1c44b86648996308ef
+Output.4 = ac1e0cf228c14a827a7d817d3993b503bfb7530524e6a603f89318128e5b0892d8e2beb705978b5c255c868ef0c4789312d9d0a22307bec2042247f3df60126a
+Entropy.5 = ecd138bbf1d55495f07921b4fb586078505be5f6586eba7fe1adf574f163d35a
+Nonce.5 = e5aef8e641c92b0a05e3ca178bcec877
+PersonalisationString.5 = d3e26573b896bc3284c04c786d3fb5eb299dada03fda129e93d118c13c469bca
+ReseedEntropy.5 = 3bce4b4e9cd3baf9e0b0cc7fc79a48a3265525d74315d3666e018e06c8e8df84
+ReseedAdditionalInput.5 = f685cb185ccf41dd928e90f8675c27f52c7b6b90ff6c8c9f40125118c5827949
+AdditionalInputA.5 = 03803868d59f85df25af5300f99210b5a95f88483ce6b97768c5532976592c2b
+AdditionalInputB.5 = 2c9032cbfe8bafc94880bac991b469531afe0619d71dd3841e14c7244578ae95
+Output.5 = a0fdbc3d3628479f47ea6694efad2ba9bec2f5e7d1552331870c036af10192ff0d0ce8a4f100dde2b22ebdacb889ec1dc6bf8c34b41e42c06cd968e2d062312c
+Entropy.6 = ee7f43065d9481d23c4ec56ec42dfbeac20cd36a748541d1ad50526d3947b4e7
+Nonce.6 = 659e135871af57780067c216f272b4e7
+PersonalisationString.6 = 4ab0cb88781aa9c1a69c7daaf5394b482c1f2a13f409a0f0aa35ab84897ff89a
+ReseedEntropy.6 = fcaf456baee38132dc4304c5c1798c76c4ea2626aa6a912332ae2e0486c1b548
+ReseedAdditionalInput.6 = e9c8f1544b2e49e9498106f64305a1e099883bc23f000c26cfeb7b4dca50b2c4
+AdditionalInputA.6 = a5679bf8c297ac086bee3ac6c25ffb895d17ebae81d56053c88f2dca4f705ef8
+AdditionalInputB.6 = 0c0eae3c9b02242bd86d38733d028e490ee7cfb6f07c9bc1d7618f6daa2056c1
+Output.6 = 29c09fa19795a7ab052ac55684e68357539c80a428f71931ef4cef5f9099f752a844f21c546622d8a44bf6d46f9ec496720dfee61188dcab6868be18c826d230
+Entropy.7 = d6c4953a45716f3216bed8be446cd3dfce251d7fad76e7264e7283f97bd561d6
+Nonce.7 = e876f3f57df4f6c69dedd5b772e7a480
+PersonalisationString.7 = 4c1a21f8061c95d322aadf4a4c5dbc090dd0697ec3f2028aeaaa00937604027a
+ReseedEntropy.7 = d8bcf4d161ea13f6f5d52a04998ef7daef4179c405832dd6e3e1c37fbf2d2f53
+ReseedAdditionalInput.7 = 01f6465095712d5d1be32d24bad47a1ddea1dff9f72897a0546e18799c51c1fb
+AdditionalInputA.7 = 0f845ce1cd1039f40054f06e05c954dddb0d92978557c7aadac49048517db9e2
+AdditionalInputB.7 = 59fb2f133caad5c95d428ff8b5d596f643bce664ba134f921abdaaa487768a93
+Output.7 = 11927f5041613a7192be58697d66a43e30247101730b944ceb1e35bc1cfe4da40e4070783aff20142f73c4c3a8e797ebbaba9e639d28119c8c67731d61091dd9
+Entropy.8 = 2b08ea1885cd66804684868446fd795c94105e72f8b4a0997ed178e0cd6959b2
+Nonce.8 = 306b93b93b2ab7e94c2a7f0b401d18ea
+PersonalisationString.8 = 7a491aae8a65eb0240262f604bb00239ea8ad4c14068a46106ff684d0f5e9cc4
+ReseedEntropy.8 = 38390f357d7770ef3ea7df82371e7ecf1ed176fdba0d776f112723e3d338f0d6
+ReseedAdditionalInput.8 = 75ce688028177aabe8e95f0f50494cf2b13b218b1b71526ced0977bc6b6e47a9
+AdditionalInputA.8 = 807092a74623f463e5ff4d4ab84a1b539c346bf4798b4c661a7817838b41fde7
+AdditionalInputB.8 = dbcb02357c44b770e6753fbbb1622ca2893e7ca404d793c54cf402ffb78dec6c
+Output.8 = a60bc75307f68334510ec3224a8a1eb1c989251455a8aa89ff1f9143537b4edd35ceb0a9cefd7b4f715ee1709fc7dae719fdfae8b20279097cf86b7f485d34cd
+Entropy.9 = 836f18d7e0a91e3726dd8330a23d096a7ee5f81ad276750a53e872fffe36d28a
+Nonce.9 = 32019ff29bfc4729c7639f74bad7224b
+PersonalisationString.9 = feb78bd629eeecf4fc0400d58c4c8715fda965bf76905d146d58f89f90f40052
+ReseedEntropy.9 = 7a963348b1ddd69ca374adba0c8b5776c9b98c293a67a0bd9b76328513c75d4b
+ReseedAdditionalInput.9 = 8a91078ef7085e8e6a1427aeac3fc7931deba0a78ac18662216ac9a6aaffd7ea
+AdditionalInputA.9 = b0723393419e29fcbc029743ce53d0d6d1905ad19c0d80e6ed681a3bb1aa71a0
+AdditionalInputB.9 = a2d3e96cd66ce77d7276d8819235abcb00df30f3b9b8188e89507c97811ae770
+Output.9 = 03457127523ce25ae9a7ddedd657cc2e3620d2c3ec18637a00394b1a072c04dfb805b5b7ac917ffa474a7a5ec4721d29abecdc9841d35750c6e3fcaa8fc54fd3
+Entropy.10 = 99dde897b5a3c45c307f68921aed2c5805ef3b2ee2fe6dbdf0f58f677cac5f34
+Nonce.10 = d376d5b1bcd41ea1611371d57213119b
+PersonalisationString.10 = ce0fa43eb5729529ceaf3e7c6d63196c7108daec1a302d38fd6f5235a3cb593a
+ReseedEntropy.10 = 498d106084169b38f9db61e10c876739264e0d35a3314cf16bc72dfb67bfbb36
+ReseedAdditionalInput.10 = c1959dbbac36efcaf190154810cd765be4ac050db93bc767b0a4efbad6841b05
+AdditionalInputA.10 = 07c948e68792fe9cb89db93fed75a941a91e552c8026204e90307e360cc30440
+AdditionalInputB.10 = 36d3deb7a321eef9c19fad4d79b31bdf40845356db3a3fcce9f2147ffbe0cc8a
+Output.10 = 911d89a65cc14b71dbae07587dc0e4238c9713a5d776acab916f099e23f3d78de617c5f697c95e70c7a0ec784a4192adce1efc90c336ef6c21a519a6295dc6b6
+Entropy.11 = e141d45d2bafcb32d727c52d0079188adb4e140b0abbb257fa4b76cb14b56b48
+Nonce.11 = d014021d82d71e7da07db67c751b6a13
+PersonalisationString.11 = 23b49839c82213fccf8e82114db3819cfdd8c0440d64bdeae46e798bedcaff4d
+ReseedEntropy.11 = 6832cdf2ab897707534666fd47126c07efa3c5383535ac85cfeec8c6ba1e172b
+ReseedAdditionalInput.11 = cc229c81a1c0bb7c5e6326c612f6f30d1a544fb8bfdf55d060dad6ae014d9433
+AdditionalInputA.11 = 6807bd4a3ce849c72d02215f970e8e2aca54fed1630e910707b301d63be98762
+AdditionalInputB.11 = 0ad142dcebfdf22a2d2eb5e758bc79c5af8ed64039028ee8a5c3e8c24d4f4713
+Output.11 = fb5ba7a18f1222201dc0bfa54cbae4c5ee42dfe48f58d62c50b3dadf5dca021aa8484921f45d89962b5a828e4bed53cab67ae28cf8f0654a3c38eb0bc36a13f0
+Entropy.12 = ec78d9f385fcd46df1b01dc0568cbf23afe0a7196a1c083f05a53c5bee610048
+Nonce.12 = 1e183f9d7024cbc85ec698491c890b56
+PersonalisationString.12 = 5d090b15e489723121bfdc9c2b8f8287718dcad06544f065902de6869c5f22e6
+ReseedEntropy.12 = 3a3911415f45d3f9f665ab3d28c5e95ca0d7f86a5e5bc9c76dc1e35a5ac6fe06
+ReseedAdditionalInput.12 = baca0fb13ef45e9c1dde22f56acf048d5301cfa92784a1e957316b9337da2515
+AdditionalInputA.12 = cfa00bdc20dab77df9becd0e219cec4e2661e2e015a50aa6469125a3d09ffda8
+AdditionalInputB.12 = 113796927f70aa34a827afb892abaa38af1615da0da13434f5be6ce448e43fe2
+Output.12 = 79201954e9b5544195bac5462ebf5c502300458524533fdfd7c8e4cc1a6d1b284f12a003ed494b67169cb17d0fcd9eb57c93b80f5fc3f6d4fa983c63bda595a6
+Entropy.13 = 3b4c1f225175862c15f566f6e840a52c71ad241976288b95211351441f55edb0
+Nonce.13 = c210674f9322b5d1ecd3b57065e6bbe8
+PersonalisationString.13 = fc4639e3971bba34ae3adaf88cb3c1007c98613f573958ea748c3d01a11d0dac
+ReseedEntropy.13 = bb42e191b617e01de83434f13975c03ae1d11df34704637815fe71b6876d9d7b
+ReseedAdditionalInput.13 = b65bb9ac14eeac53aab6856f3f904b353b6db911d5e1a405414bd69b8ef82f8b
+AdditionalInputA.13 = 3c1e5fe0212b72ab2a8dc5d8a12e38e97fcb0c3dafb7d87935c46785e4c17cb0
+AdditionalInputB.13 = b6791eae5c22059965472b7a7c7199e5c637a53f92b0a710290a9ddeecb76ec6
+Output.13 = d7745b5d74aeee1f90e5d92b3f7252ae55bc03b2db0c073d4358a397e3972b6e8688448485e22631bfe2f0e156523aca163ebe392ddcb1e524a8398f754b4c4d
+Entropy.14 = be6923ef05eaae729b5b761b8668ab9c72083804df8796a300419474dd663387
+Nonce.14 = 7806458ffe9f206eea8a966b1b23eac2
+PersonalisationString.14 = 8b44c7f2e1f6b1ba3798e51f9b048c8c8b08df3c83584578712b9f8b737ba11b
+ReseedEntropy.14 = 40f0fe736e7c94c694eb8539ec8162661f73a5df5cf3d696b19fa3facf3e32d1
+ReseedAdditionalInput.14 = 86677096cd2fc19fb2b7431cb25f8b3f0cc1dda2783af6d49e0f02de44d91958
+AdditionalInputA.14 = 639824768081b8f8d09b9b4eb51c0bd1ea5666067ade2628d45e72721384b1dd
+AdditionalInputB.14 = 7492ada1c96f7b2de329cd54651bde17b4fc69471280931180bbdecaa2889435
+Output.14 = 5c37c829eee0a9acf2ec0af816c7974a09994e744c070f58d4fcc216491a35be0d32854cc4bf6956ea5c43370c02084dd30a66fda089f5c47b4975d59a01a022
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ed1e7f21ef66ea5d8e2a85b9337245445b71d6393a4eecb0e63c193d0f72f9a9
+ReseedEntropy.0 = 303fb519f0a4e17d6df0b6426aa0ecb2a36079bd48be47ad2a8dbfe48da3efad
+Output.0 = f80111d08e874672f32f42997133a5210f7a9375e22cea70587f9cfafebe0f6a6aa2eb68e7dd9164536d53fa020fcab20f54caddfab7d6d91e5ffec1dfd8deaa
+Entropy.1 = eab5a9f23ceac9e4195e185c8cea549d6d97d03276225a7452763c396a7f70bf
+ReseedEntropy.1 = 4258765c65a03af92fc5816f966f1a6644a6134633aad2d5d19bd192e4c1196a
+Output.1 = 2915c9fabfbf7c62d68d83b4e65a239885e809ceac97eb8ef4b64df59881c277d3a15e0e15b01d167c49038fad2f54785ea714366d17bb2f8239fd217d7e1cba
+Entropy.2 = 4465bf169297819160b8ef406ce768f70d094588322e8a214a8d67d55704931c
+ReseedEntropy.2 = a461f049fca9349c29f4aa4909a4d15d11e4ce72747ad5b0a7b1ca6d83f88ff1
+Output.2 = 1ed1079763fbe2dcfc65532d2f1db0e1ccd271a9c73b3479f16b0d3d993bc0516f4caf6f0185ecba912ebb8e42437e2016a6121459e64e82b414ba7f994a53bd
+Entropy.3 = 67566494c6a170e65d5277b827264da11de1bdef345e593f7a420580be8e3f7b
+ReseedEntropy.3 = 737652b3a4cea2e68f28fed839994170b701aaa0fdc015a945e8ee00577a7f6e
+Output.3 = e0ee86950de55281d861dc656f80bc4bbeaf8b5303e07df353f67aa63183333a437aabc400643e648f21e63809d688632e4fc8a25aa740637d812abe9eb17b5a
+Entropy.4 = 9ba928f88bc924a1e19ea804d7096dd6c55d9497d889fb87eafb179380f7d7a5
+ReseedEntropy.4 = 76337f55d07c33c21129aa694912703e4fef8e5401185c7e7d47784e963c87a4
+Output.4 = 510b18ec20120da8798ca944dfc97c63ae62266d122c70ce5cf472d5ba717dfc80a1cce0c29a8cf3d221583c7223b331727b41a0cd56d4ca425e7678441784fc
+Entropy.5 = eb20968b85cdabe87c6400d8b01d93c0240ace20a40bbb4996a0de6ed3c49326
+ReseedEntropy.5 = c46e67b8027db6b5bac40906ad0be62759524a2f3d90a5025b188e7a850c73be
+Output.5 = bd158d21c0172d5058f74d69865c98b61025683807df930bf5fc3c500c8c10c71d8804fa67db413a4a5c53d57a52aaac469698b4a42fda0eedf7b45d36078639
+Entropy.6 = 7b3292fed22226315b52c12e0a493eb4eda9a79498cc71985a3bd07d29e5ae04
+ReseedEntropy.6 = 21317bba5c805b6e05a1137c90b6559bf1027c2a80b95d176e31a87f6ddd48b9
+Output.6 = eb68b9985db9fc8654e7219c8599f42ec0164b42b5e95a087c4ee8bd8898fa69548b8c5da1af2a785f5a0149dd30c88922123d449e324c399df4b524a33e5a9d
+Entropy.7 = 477baac730e534f2e2525e83719802764b954acf9732e8724d856dcd124aeac7
+ReseedEntropy.7 = 4461fa9e6fb6d4829c8b16cbccb14dedee9f0d6f5883748d7a90f14fef54d8cc
+Output.7 = 61e5d9056d27691f4258e8844a516e979aeb49c5d9482682f914cb9b310172ed1ae1b01b241b317a59adcc9444cdd8204e49b8d917892d23725866cd31eff534
+Entropy.8 = 94c77ec6e22b85eeb1d2877b69eeb564258c214e9ea57cef69a829bbd8b7ca09
+ReseedEntropy.8 = c22677c570fc95918809429c240802f6b5896c48a130cb19bf1c1ad4387622df
+Output.8 = 525d69e6839a242a901179bc2e239ec37226319a3464b2aa421c9b5ff4c9d6717e5b4ad42c913c532905698dee3b8209f2e227ae4f748deb3ce8d21746b585bd
+Entropy.9 = 0e5585e10cedd896792e2b918b2cb0a37844b64c862c283d76c97055c88d702b
+ReseedEntropy.9 = 87445a1ade002d1f0f49d64bda4c8ca427225ff56f371a20bd8a5a3bd35fc568
+Output.9 = 83067b4a57a5f6ba418a98996eb102329d6bdc4e1dfb125468f1f8ab36d00732597de568c17cae3412c9ebfae08377ca19406b1abc5e10be5dbeacf3839bcf43
+Entropy.10 = 01d9f6246936ee6682e5cb840a394628c79d0d74c898c73cac2515ed9e05303b
+ReseedEntropy.10 = e2ae7e8d2e3a182936891c066751d40dd6c92ebe146dd13d4e076591d7d63f8d
+Output.10 = 1ce04a78ac2d53db46a1bb9240d47f37134ca7a2826c09ceb48d533d645bb087bfb77b18f9aafd1cf1727ad48aede207f490bf53e1e19f9f06615dd937073c11
+Entropy.11 = c91189669aab973c92c9a71fd68db253d2adee1cbf25bd6a4a1fa669f7d06e35
+ReseedEntropy.11 = b76f3931100b658fc064a1cd21cb751d57708f71e903bf7908a80616fa7e5bcf
+Output.11 = 86a59707f43f09df04d060e9ad080f2d9584dc33c8f2de9733751de4ae17da5ac93ad9f7e304390137325216f37c77a712b6756e6ffa382b63495eeb80332456
+Entropy.12 = b0c35bba01043398443d68dfe2c8898933ce58b98a598064b76d095c30074bf6
+ReseedEntropy.12 = 02fdeb64d0973996a8a8a0629026f56cbbb91fca34b8f50ec059e746d4b20b1a
+Output.12 = a3dcfd3547814b5439dd5cc6178c6632cccd81fcc34b8f9c9ceb52c23efdd18bb4873b97ade53c54824c8768df0e9987ecfa9635e1ba3944d8694f7ca8c51fac
+Entropy.13 = 569f3b21f1b80c6c517030f51cb81866cda24ac168a99b4e5e9634d0b16ac0a1
+ReseedEntropy.13 = 0d6625c6e5102216d4e0e5e6171d8ee260cacde6bdb5b082cb9bcfe96b67986e
+Output.13 = 006be6cbd866e275d97cc499813f462587f938054d733ff209d3035fde3e2d6915cf6ca3342d9064df7ac8075b3f54f87b35cd9b4ebc56835a9ea2557d8e154b
+Entropy.14 = 8ecdbf1cba26eae45f70ccfec0e42d6139be57f131ff60898a3b63968acf28ac
+ReseedEntropy.14 = 8d860dcf67fbee47f33ed5273ff81956335d9152085f184f8427ad4234f95661
+Output.14 = 8049f3fe2e62883f71cc43873b9775bf60a97c070370f9757c51488b050c00959d085ddd8f8e3702aa4cd6ff19b6c62685afb7792eb003c07bbcc9f4a026d138
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 6bc709aa4c975b0eccb922ce2110fa9b572403f9013dfd10f06a88d54d380002
+ReseedEntropy.0 = cf1af84eddd5bef666ea42bea6067a23e52742e24661f944ba2514fe052abf31
+ReseedAdditionalInput.0 = a46988bad49b78c613c94e06a53b080bf6d20b7385bf4c782ad7cd145ddc9053
+AdditionalInputA.0 = 139d6f72bf1d0ec5bfdd245e013f5cdac85e3eca716196018b92133c00a07436
+AdditionalInputB.0 = 240f1a5af7fc2e4d32ace635acba5947f3564ecbfd7516c479c0adda20747f26
+Output.0 = e727268a546c0c891cf53a70a92820ee9bbf728ad52f30625b2e28f0f6c906f60ffd02f7d81623295950c04b63a48634eb41a5b4d649bdabff335ac3200690b0
+Entropy.1 = 7b8f4557e78f175c2a82b562c8595aead75e6d6eaea87be0965aac1f92347306
+ReseedEntropy.1 = 2b6af98e7e95096fc3b8d2e226ed4b1be777c31b8106a90027052ecdec17bc94
+ReseedAdditionalInput.1 = 64dfaaa71978759fc2a0ee73aeb44895ef09c93638abf99cd4ec99ffa0fb9406
+AdditionalInputA.1 = c0e5aa51f05495fc7438aeb953b61627fabbd148a9959bf873bb87ea005f055c
+AdditionalInputB.1 = 69200263798a7d174c1e3669abef914b8663e3f9998c711f0dc06678918e8063
+Output.1 = 45397a1d05d6c2c082f736ae77f116d7bf543b78ad3ba4bf39abeab7a964ef9da31d6e8c5dec8e9e5247766559b03fb98c619890d40968b9ab3c9951dd6bf48f
+Entropy.2 = aa4740e75b0b7142a17cbe32e0f9f823c5c3eacb7ac8fcbdcbbfb3460c5bff92
+ReseedEntropy.2 = 1f346509f76419ad21f4812ef38b66eb1ab2277338db56f3e307adf4ee55f02f
+ReseedAdditionalInput.2 = 51bfe58dcb4408d5db8b8c0cf97d8cfbb08da2da4a6e11e90232adf6a938ba9d
+AdditionalInputA.2 = 4640aed419d80757151428dfd18c6d2a1191f0aba9e5a1d9ab629ac0035c1ed0
+AdditionalInputB.2 = 388fcd2d7127792a87756eb3fd7b313a7e41c2f87543f3ce2315e34f2d9e4c5a
+Output.2 = ba448869c105294cf91ba739349b74fbc29d021da147662fa136d8897eb86421b53facfc709f7bc2a19237eaec53b2d448b94f96c37dc697349dc9a39017eb2e
+Entropy.3 = 826c951464511470d1560df8088a0496a96fae1bc717154580fbbb63bd06ea92
+ReseedEntropy.3 = a0cb044258784e9070cf17fbc9dab600649152b9ca866f24447cb92c2901f5d2
+ReseedAdditionalInput.3 = 656f0bb03f2c75d8a9beb049effde2032bbbf0b50865c52cf05fb4f4b3c18d92
+AdditionalInputA.3 = 0fcfe18397056b1c98a9903011683da12e51717cd813e8b6f0ed88f377bd5e0f
+AdditionalInputB.3 = 0d6dc835a716a869d73c1cf780c025c26a7786f8372b01570e89587acefa4535
+Output.3 = 77251661200dc4cb7396d46455c14582bbc1c6cf613aa413e4069bf8fc4f01f4efeecf1121e0a5041ef4785d73fac32b0ef08a0c13f9164d7d74c0d696b71d18
+Entropy.4 = f502ec7c3e462173867db82822047125dc7bde93132734c1f0f2dcec6bb74e33
+ReseedEntropy.4 = 149c7ac740fa5d05a7bdbb980086a9da1eef541beece75ceae4181bab36b8f84
+ReseedAdditionalInput.4 = 43edd5a293a36ad077b90a0f72f4d1661fdc1262b5293feb9dade56510ea23bf
+AdditionalInputA.4 = 121495ce1c78f205e243e5f508c9db04574dc687820fe2e1f87010f23c2b42fb
+AdditionalInputB.4 = f035e4976c99732e115bb4527d6422c647bb0323c0121f1a4d4208fabdd56f9d
+Output.4 = 6b07a2988a03698591e00663371041706e7200e1a819aea7f64e34a77ded2504965167b8804e6e77e900f1b78c0b8d5945bab0c1ecc3532293215fa40507d457
+Entropy.5 = e31d0f4fc1a2b5bfa6da7dfad1a8df6f9094a565e0273bc636be460c9638e76f
+ReseedEntropy.5 = e06817055474ecfbd8e303ffac1018da76fe470a55725afdf81eb471bf6e7593
+ReseedAdditionalInput.5 = ec0c8182a04074035f287470f49741adf10ececc698c380db67bd2ed2335f29b
+AdditionalInputA.5 = 23143ef30785da8a4078d7173549f42dc53fa7a6cc12e775361d16ca9d8bfac8
+AdditionalInputB.5 = 615bfb9c0651102326ef1c1eb6ced7b3f87d4026835e796adabc05a04e0550b6
+Output.5 = cdfbcbf06994fc9aa1fb5ebbb8ba4740c86ff6ce7adde73589bde88006daf24f36b982dfc068a1347837745769a767e4bd41417568e896e1b69b63ff8ff25923
+Entropy.6 = 1b5651ab236bae7061247d666c1e27f73f13e14accc153d08af19eacb9de3f9e
+ReseedEntropy.6 = fff26bc1d4801348ab5d2b747bc523f3b5c9ae5ae39db6b281ed67d17f5098a4
+ReseedAdditionalInput.6 = c383999f1c14e07b16fce124c047a01a62f8df5ca0aab230fbec71353cf63204
+AdditionalInputA.6 = 20781ee43cded07c461aedbc3d0fb946f7d70b6f5e8cccbe435d6ed37158bd13
+AdditionalInputB.6 = 1aae1a19d653c076eab14753981183beb93ca5bb7ca52e3dd500cea0f30c3106
+Output.6 = 070302b43d7cede1d9191f8fd1d2711366cd1c2db56a61e8ad3d39ca78a53d0545a1d3f3ee7916d92c6f6dfe4c52a5eb8765ea6fe71409442bd9dd0ab655de7a
+Entropy.7 = fb5f8c3b6ac3e47e1906efffcd44a6758c98d51a14c6ef7bf4708c1b4ae92a0e
+ReseedEntropy.7 = 86fa40124b30390d63451e3ca1cba4b7ce5d25a82e046179bae5a48423de67d0
+ReseedAdditionalInput.7 = 218eedf5120132e928397f358de65a5d195dff3aedf510289fc51390b0ec73d9
+AdditionalInputA.7 = 3a9577561dc280afad33d571a628cfa1a104d3b935439bad8cb6a8b5f65e837b
+AdditionalInputB.7 = a100f083293b2ae176fadc82fc33c97e03fed2ebcbdc0b28aa9caa07545e2b6d
+Output.7 = 96296e9badd3c4bb2bb35a324c04cbefc23950609d65118d36aae6010f79066c15d61211f25b84cb399e78fb43bb876be9172630e250069f0c7145bc909ac213
+Entropy.8 = f1ce42d78e25c8c08efa1f85fb01ee4911e6396a4c1cd24b8869c45aa674afff
+ReseedEntropy.8 = 196b3ddce4e9dd5d00c01fa932942a4816c0a284cd44dbcb265d779855024db7
+ReseedAdditionalInput.8 = 5554c7a0e9ef6b599eff13d0662c1edd12707a358cbcd39ce806c5297a8f2d47
+AdditionalInputA.8 = fccc8ee251f841e101fd58bee54e7db4de15698a13185143577fdc3a51f1db53
+AdditionalInputB.8 = bb3aa7799cec1823ffc202e30c485f44f3ebaeccaf6f3a84d4dc79df4ecc3c09
+Output.8 = a5d3083032f06e9a04ca8199d18e7e7b0f6ca29428dca59be4a40fe7e72f6212cb95f358d3084a29086ad364b2f860a87bb787e89f37d915f2d8413c58047d42
+Entropy.9 = 170b011aee09923c77ac05de0183a870ea7f9a23ef401c507a98c95cb4b6d18b
+ReseedEntropy.9 = 930a77016587f508a48489e90b0c7e27c79162413b4b946f52459d561beada6e
+ReseedAdditionalInput.9 = c2e60b86c1bb851e27ecafd06a9a44003a9836851fd725077307be28dfa32e30
+AdditionalInputA.9 = ee67ded1368da02f545ffb6d3fb13c10549e88f073a6a6b2ad121dcd995bb938
+AdditionalInputB.9 = 7ba0287d9d12f47420740a8ec6f1f33b9f399c03e9a9931296ecb9331c4df825
+Output.9 = 3d13c453d5f3d305677b9532b57dc16fc68c7db6bbaea6be8a3567451b221e990d8b2771c9e28aee1c0cd084ead9346f97bed2c3b5823baf57e0d27b783ba86f
+Entropy.10 = 7786841f3e875f8d92c5b4ab382e6538fd6f0fff265fac5ffdcc8a3a24c5e3b6
+ReseedEntropy.10 = b5c90a31931afb23fbc7ad09d5f5c8df4612caf149cdb7d2ddc9ba4d7d4e48a6
+ReseedAdditionalInput.10 = fe6c701232e9c67489f666c05762275ae03c65e18dfb2fd5edc5bff7fae5019f
+AdditionalInputA.10 = 57a898477d90c687cd03b4b0d0f4b5a4d3e0037b3504cdc8367a26ee93383708
+AdditionalInputB.10 = 2dacb0992d67cc6b29671a95149b8bd930daf04b6cb528983c7a2ce1b072c8c2
+Output.10 = 1b1b16928af19a714f2607391839db428ddb49fd99eda0fd2b0c05b00a3d45af6524c5bf04c9cc04e341f23fefbbea1075d9e04630adcae2c8dd12ffcf882bc8
+Entropy.11 = f65913ee8086f9c2547ee138240f926188e7f7bbaf8e9bd23b5821bcd1e3f448
+ReseedEntropy.11 = 93d826eb69380d196db476063b1d753f843442a7ce8e0bb1b2094bbd252f49f2
+ReseedAdditionalInput.11 = a17fc90c1f146857dd68af9707337493b110a6ed87853e0bf85c058135a880a0
+AdditionalInputA.11 = 8b802d97257d131a8dde3983d818d0eb833e782b2c470baeb398143882840a97
+AdditionalInputB.11 = 86bbb6c45ef8655fa151a1e2ff5a9e48a9c70dd8d793c1ffda80aa680066c8be
+Output.11 = 38464e12415b76ec9a7544c955187e58bbb3a5a05bbcee222af588e015298c6227ec94bcb37cea30285b2d767a60259c12e96f3b153c02e8fdac6d456629362a
+Entropy.12 = f1c19b9455fd726216434fa8ad322e7efe5aae549088d3fa7e98f01c90eb71f9
+ReseedEntropy.12 = d44697cf7c3b9ac26c998946315724830470a3130a42f0defaf6380ca81a0e72
+ReseedAdditionalInput.12 = 466f63680ae4dfd936ae509fc012aeae02300e128940da448c6ba75afa42eff4
+AdditionalInputA.12 = d262c4191c2ac19c9edd1c2c9328299fa0641bc80c08f36c63e3f30e468b8965
+AdditionalInputB.12 = 6c943c5ac4061368d2cf2e8184d96e444284a6dbdcc8b969b0e2d560bce9c62d
+Output.12 = 09660dfef87d4f5e1992ffb493ed8c0099e71a50daa6af0aa210012125dd632ac873faa8e46b11d4aed7edef5dfbbf9966c314b7ea5cf989b664e35648404b5d
+Entropy.13 = 781126148a819eda73bc90a2c14aa3bab81bda816a7ca644b315d48c4368705c
+ReseedEntropy.13 = dc6c73cf47824a26b120a983da417451877d5559492f0854178e1a218cf4b82e
+ReseedAdditionalInput.13 = 11577ccbe103000bcb32ead5efc32b1455ef5e37a10753ab8ff8a8eae57ad42b
+AdditionalInputA.13 = 9fbf8256113a7942c05eed10fba1eeeb7d4ca7808accbf540a497ea1a370172e
+AdditionalInputB.13 = 24d6d222064f34a0abe63336ddc63fdb21272d9ffc10923ee2683a11d4ece712
+Output.13 = dfdae1a948b1c1d3adc7e2fcc7c658919a82e10dd65dfe3451a2c592c0a64606b331c5aeb9549d4c3611139f3d7d359c1970fd38885efa33dc749173994cded0
+Entropy.14 = 4815c5380ae2de562b552bc18f4277bb29ca89c6daade84af4e5b1aa994c5e4f
+ReseedEntropy.14 = cbcf3c89b2aeff5ba28142fdb9f0e1eda835ebe9189e72bdb6cc2a59126c853c
+ReseedAdditionalInput.14 = 8250fb5553b1dd692c98d651eba50d6e73d251231f836c39045b456f52737681
+AdditionalInputA.14 = 9e0abd6fee611320de52bc48e56f5f17bf180e596d258031e3666066bcc1e369
+AdditionalInputB.14 = 5612694e4260dc91ba87ee97656f1436cec1f711536bdbf61064026673bb398b
+Output.14 = 02bb0c1e3abb2993383cc9cf2f32c148d785dde27df3a8dbd3ecc73ea4e884cd427061423e0736a95dd3202e6336cfac40311b8f08aaa88a90baa2f93999694b
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 34cbc2b217f3d907fa2ad6a0d7a813b0fda1e17fbeed94b0e0a0abfbec947146
+PersonalisationString.0 = e8fa4c5de825791e68180f2ba107e829c48299cb01be939cd0be76da120a91f2
+ReseedEntropy.0 = 8326f8e9cfbd02eb076bbb9819d96a02386f80bf913c8e4a80361d82cafad52e
+Output.0 = 52f5e718bf48d99e498775c00378e545799bb2059aef0b74be573d8283f02b5293917913bc8f26fc23760a1c86c3f5c844857419868eafeb17c9248227d026b8
+Entropy.1 = ba811bf491ac4597d79d0f4473208011c5d48575a156d969f071cd5ae5aa4558
+PersonalisationString.1 = 0909e7809f076ed3747625cd2b80615875407a133e77d677fdf8d9d378de4fd9
+ReseedEntropy.1 = f556c3afea212ff060ed01b7f7f5dbb73f960ea6a3a93f248ae4d2df2bf49948
+Output.1 = 96eee34e4cfc905be64cf1dc64c6e07f1ceb3bdb745f42332568873b80b11f1a1ac6d0d576afefcdd7c70ce6a882ee940463323b51c1633998a809003b947210
+Entropy.2 = e9d164ce4bf52a73e73945e3fde2d599df02d68540165ce912e20d29e3da172f
+PersonalisationString.2 = 0910b0158f03382912b96aab0c3565b2b95c7abe823df44eadb27d86d156a9b8
+ReseedEntropy.2 = 973c8725047e71cfe9d28d10c40849fae844c932398422ac0d80a5ef2fef5b9c
+Output.2 = 547ae8f11d186cc285f82b3854e4a5eb88d0218df646f54b1fd7fe33508fe6a140f0c517356d192fdd961a29f47fdcc9e398375eafe786d97c69d0ac5c86c9e4
+Entropy.3 = 6511766613fe8509396f2c0af743b7fe81f2834be8a7fc399f84b35c1e89a274
+PersonalisationString.3 = 62784e10e5490b157988af06660d42d8aa56782b6d5f881e5e0988e8e347bf08
+ReseedEntropy.3 = 52c1bf537f4da3be0317a48814df6dac9e66444000e5b0226ab904c8f0efa44b
+Output.3 = 2d04dc4e84e02b079bca0df8fee53510fecc582775183d279d614aefd9f55d05675a657f87c7e6fda45d991483ba787ac57d3e22eda29a86dc094bc033279b98
+Entropy.4 = f84a1ba8021ee1b1be01f15d47ac98cc91b5d11561c9ce6ad313af694d87061d
+PersonalisationString.4 = 46de12c17a42e04e4977e3d2bf6894bf97ce9e6c287629ecf8fc84f8adbad8b3
+ReseedEntropy.4 = c05c30f8994c38688bf1c8fdeaab3f04dd7bcae1f3f1e8539b0535789c8c490f
+Output.4 = af00782c6fba9439d61f637d736153c945673c73a5a1d6465fed97f2d7cc38fc0719218db5b20a65ba6ec0ec7afd47dc40f4ec61940c9b116f820098ae53c93d
+Entropy.5 = 26af70075dfa4f60f34f4063eaaf74779e584cfccda72a612578f8458301ae7d
+PersonalisationString.5 = 048b9f8f06c286c1303f587a802701bba005338bb952a66b30e40a153c9c0766
+ReseedEntropy.5 = dbea9ad4234472ee5a1594d52e3b43d94f23762ed19809dea6cacedb9304a3cd
+Output.5 = 32a79aab3f2c04ca330fdb606c437cb8dd581470bce880c72807c56e3565c2a226928c8715213db1550e3d4412632fcbcdedd95fdcef93bd03ccf7c110d206af
+Entropy.6 = e90fe07362574f81edaea541c525d6f9906a5c4fd7f8f28e101073aacb88d1e7
+PersonalisationString.6 = ef64e8f66b9f81fb2cc9ecaae208e5a908f84e7ba1e8ac273db2f8ef11b55b34
+ReseedEntropy.6 = d4b763db6b461e75d3be8f01b08970da4d88c7dfa9f3e5c07c58ff21f5a3c5e0
+Output.6 = 91acb387a192f40f3c2933cae94d3d29d2b9ad12de193f20f71da594390dd53aa4d0a667347eb61ad0fb09201e2598fc99b4abde5f80458eb7ec47666ae26543
+Entropy.7 = 826823d354dc97d45507aea1ad8142e704754b9fac6adab2e3523bcaeaa08a9c
+PersonalisationString.7 = 3334cea871279e90e1f3fad08c5f1cb54958d75f28c7a1882289dad5bfa0464d
+ReseedEntropy.7 = bec5aa6e755bf3514f3520e7a92cfab42cdf35c9b59a15e781ec82ff7adc88dd
+Output.7 = 38821cdc34e3d764f877f760b51e18646aa6ab9871e8ef22b43c3428d7cb664e932d969b342d519648cffdef6624ee14e4f136800de11ccec1621e3b16beea7d
+Entropy.8 = 300b945e8e0dffcbfc0435e6ac1085efd93307e711f1ad609f7b92970416b079
+PersonalisationString.8 = 9a0ff752cd2171fe59a27a68e9cdce81aea2b408e027bdd60998244821586534
+ReseedEntropy.8 = e076f4ae6fe8f66d716bffc6c4e10daab35491804a59e6e57909433483f3f421
+Output.8 = 485026dd2d2ae20c90c8b43f4184270bb156156ef88bb8f15e6fcaf07368e50b7516c603f3f69b2d20bd84bccc02df62e6e82ecfe016e7483fc02a400fe46ad6
+Entropy.9 = 64ec017109b95ccb6acac7af3ddb0bb09ce538b1afe131f0899f1fb0023b21f8
+PersonalisationString.9 = db2c8fb78801d73c83f79edeb76e87682471dc0beecf135101339f7cc321ed6b
+ReseedEntropy.9 = 751838ce4340f8f8dad229b3d95a24de3e45f0396e4436b27fdd5130d69b55b7
+Output.9 = 51854529219444bb65999e63adfe88b5124c2d60af214bf02b638e47864450012e791e737c5b57a8d733dc07ca59435eaa3c0e50d31c730efbe964a1668f60a4
+Entropy.10 = 940beab88d26f3475a2b650790cbdb89f74837291c059959d9c419e9afa9be7c
+PersonalisationString.10 = 4e81c42d27a5d0bf54a4c8e1ee4453a1804f63813769137c9a5005f258b2a14d
+ReseedEntropy.10 = 1783411b3faeefe2af9255872b2b602fc160cdbc2b0340d1a0558c4450dde6ca
+Output.10 = e7fa2ff98af3e82bbe8ed832b926917e30036bc1d2faa0b6827c38d5374559be301d276b4057924992ede111b02d64a486bc3ec8b09ffd15139a21d41fcc85fb
+Entropy.11 = 591203e202f4f32dc71a000a4fa3ea9230f39a2042fc50bb7253a93fd0b1ce01
+PersonalisationString.11 = 37a4d462f6530b5fc44fd01b24669c68ae042f0f0e84bfc18174ff4cd45dd123
+ReseedEntropy.11 = 8a7388d739cd2ef542d5cb622607fd92284666d52ed97884469ecbad1daef6f6
+Output.11 = 9d348b5d6f7126031e79aca167097e2f8dd1c10773064818662c408dc0f243735effc6ebc33553f25ac929491ff7b7713e056c21492a877e471ad12798a966cb
+Entropy.12 = 4e169db1f4555124f953b72716df0ae976f954f31982e0a794848f9b12ec1a44
+PersonalisationString.12 = c1a34b76581f1e7fbd5206bc88ea4d05a76148b6170c91231f356c04f6903ab5
+ReseedEntropy.12 = cbcdf496093b84699417060b1ce76f56b2879b14102a5858d0743545ca01961f
+Output.12 = 3d1fa7d8047144deafe5cf9ab34e41a81dea90020335c3680230a3adebb8efb23911eb4fa4fa3b505be21ce84ce035e8c44c11cbdc1f0e7b4c7e9130e2fc575d
+Entropy.13 = 1557a1aed545e97c1a84c493647535f65de5be29478a4c9ff6047956003b195f
+PersonalisationString.13 = 6bef51a14da3dce30f20bc418a1db99010721ed565a2b85d15d690ee80d538d5
+ReseedEntropy.13 = 10e9ff17592091c9bf2136ddf8f8023f9aa6ce256e6e93640df5f4d7a7c3646c
+Output.13 = 339197ff48499c093a1b7318e10916fa2cb44cf82d441f9ba334dc73d625b614033b3fd898c179a05ed81be88d7fb5f3a4429739848abed590404f42654b2687
+Entropy.14 = f3ca53475eab617258e397151ab3c10a6356d18efa225a4342da13fa62aff99c
+PersonalisationString.14 = 48882b0a263582f0c6bb8288ba894d7141e665aa0c084c7d99eaa0c1f07e23c0
+ReseedEntropy.14 = 34cc10a3d71398efec3c5854ef82a77a0b6bfcaf841ad9a1d5c7bf05aeed9082
+Output.14 = cac26b07204eea9a41e4289302d0da8f36ea200dacd2435f1bb1c1235cb362497eeb87aea2889aa1093d13d2cee25eb11e28229c39acdf894122425b5948cae2
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 289e5c8283cbd7dbe707255cb3cf2907d8a5ce5b347314966f9b2bebb1a1e200
+PersonalisationString.0 = 7f7b59f23510b976fe155d047525c94e2dacb30d77ac8b09281544dd815d5293
+ReseedEntropy.0 = 98c522028f36fc6b85a8f3c003efd4b130dd90180ec81cf7c67d4c53d10f0022
+ReseedAdditionalInput.0 = f7a0378328d939f0f8521e39409d7175d87319c7597a9050414f7adc392a328d
+AdditionalInputA.0 = 19c286f5b36194d1cc62c0188140bc9d61d2a9c5d88bb5aebc224bfb04dfca83
+AdditionalInputB.0 = 820650c3201d347f5b20d3d25d1c8c7bef4d9f66a5a04c7dd9d669e95182a0c4
+Output.0 = 79a79d44edada58e3fc12a4e36ae900eeace290265f01262f40f2958a70dcbd4d4185f708c088ede7ff8c8375f44f4012f2512d38328a5df171a17029d90f185
+Entropy.1 = a8ccbbf5a8ba78a93fc7f30133689e2cee403c422f1171c0b65c38f090416422
+PersonalisationString.1 = 5c65611dafa5fc06adb36c709a85a9376ce5b26b243b8922e25472deee0191f3
+ReseedEntropy.1 = b17ff227acfa21bc2d37e5ba23a8539bc6e4e6ff0a4837222a7ca98bde86f864
+ReseedAdditionalInput.1 = 2b8f75b760688b41aae73847fba56e43274b321fe7d8da6f734595ccf21da342
+AdditionalInputA.1 = 66f8a4d58248b50e9a58240f724ec3e1063c47951f7d2b54466dcca72fc7bbe1
+AdditionalInputB.1 = 0a29dacbbebc8c456d5e944a4d81ab964de1ceb3bba87f91bb7887fc71456e8e
+Output.1 = 49da2716e4dcfb225b9b183f98f922d568c5594a76f1bb4daae6c101b494854a0a11d2447c20b5578a92d84765fd76d0df16ba38ddeb110db7cd99d7aa71e874
+Entropy.2 = 897c097d815cb98e90d01d792ea4b36afa9037469512f03b3927b8952e908500
+PersonalisationString.2 = 761a0ea7d619f3ebc072bb799d7efbaafb54e8689d95f7ee57345607ae61a9c6
+ReseedEntropy.2 = 868d7ffbe51bd12eb88b0b5dfb25df5d5dcb94764f054a3ae07680888bbf5e26
+ReseedAdditionalInput.2 = 59f8bb8b05abcbc25a404095055bac55d0dbd3ca41ecce177402dfd07404c38e
+AdditionalInputA.2 = a79802f985a1d1cd0d4ed8c6394ae53cab35423ebee2bc536a3866ed4965687a
+AdditionalInputB.2 = 21b6ccaf45ae2e8d51d9636818a84680b38f9c2deb7a82040fd8f8b290316e4f
+Output.2 = 99938411a854edfae36831f8870de39a170f236072c08fec936b7f7d7bd3abc3995616de965958c00c36030d57f6665632473b07ae78add2210f9561192e6994
+Entropy.3 = 46a1cbb4cfec94992b0c06e6cd58e1043fef1c34e884042865845d83dfd52cb3
+PersonalisationString.3 = 5c862dc6894a3689755b2325a92ef79ace4a2c25d1d8716b1aceebcb71b972f9
+ReseedEntropy.3 = 02d4bcf96095c02069d6932d62703964c2bd09fedfd98788da20be5d8986da40
+ReseedAdditionalInput.3 = 3dc2f2e1ea19d670ff669ee73a45cbd069012282631af6f916b9d119dfd3b3f4
+AdditionalInputA.3 = 0840af824f94139dad12b501a27e24e27d91ede1cdbb15470d987e98b0243e5d
+AdditionalInputB.3 = 1d4e1e4bb49ecf8c582bba6582a5989d204729c3a801182066a67155896c48c0
+Output.3 = 5322ed1f50af42c13b2f36a4fa041dc18466baea55801d41dac54946556fd0e02847a23d4e8939ce1d3c87bd9e61c4f67a6604972e273b30d0e3655ebcf76de0
+Entropy.4 = 9608081fa3dfa9d50f0e77aef30759cc5dc1a64236a8f09c64b689e69df2c395
+PersonalisationString.4 = a55eb6a801c6e4c9f187adc8659160181f214bd26a932e16c3b4c142a267dbae
+ReseedEntropy.4 = 4a64d71ce739d14b490376964f50c506cba0bedf51bd79c2861959c672247a1f
+ReseedAdditionalInput.4 = a6ae54c42d7ee1dd6e919651ed6d6d8e03403827c613753ecc51776cdcd24f9f
+AdditionalInputA.4 = f4011b9bed89757eace1514c03184b76c0af7897b17073280a40e7aa8f39ebc1
+AdditionalInputB.4 = 595fa0d48173ec95150c3c622baeb153fbca880fc683d8e5c14d6ab253869432
+Output.4 = 22f5fc796c8795b9c8296f0f31369203d5167b43560d503f20cba62cf5bb1d4add491acf44cc11ff4090af7df10ea7b9b609e1e8a7904605628740a2a6a1d6f4
+Entropy.5 = 1349c7f3d52b8f92a0fef2d8c6a677c3af42cdf076026e0f27ec4497ed866f5f
+PersonalisationString.5 = 471e893976373d2b6c345afda8cfd2fb908bdf70462c3145bf88788b31c123be
+ReseedEntropy.5 = 503cc8c9b5ece0a88cc1e06225edfd469d6ffdd593db3013db3861576c5ff75b
+ReseedAdditionalInput.5 = 2c948a70387b4eb5642ad92f657a7e5a65f2c43372f330ef27344f8a65c0530f
+AdditionalInputA.5 = 1bc8133ee04b9a4cae32300cbb04832fb4b78f6c87d651affcb1b522585bc6cd
+AdditionalInputB.5 = f9d11e59a97c90f0baa300a2730b3e18df83043303bcbb31686ee33c24da08a9
+Output.5 = 63c3692d71ee48879d0d8d1c9a9d6c7819e3b61fadb97bb8dd5c6bdd8788819d59b617f058ea4c21dec6e1b703a6317a487c65c2c7f19ea99e9a50d5ccdc9e9e
+Entropy.6 = 260f99f0a98505fda89eadd2024faa8463c32a62453006fd19e88b34f5389a77
+PersonalisationString.6 = 1bf7cf55383dbac26fc183f50652cf03a8de204232cee0242a1abfd43e7a381f
+ReseedEntropy.6 = abe2bd8e54492c0cb317f836faa0850e708d788957f1e23a33c1132a48c5d84e
+ReseedAdditionalInput.6 = c0fb4b84445f37e260bcbae456576b4f7c39f0dcf3122e18d60c314ed4d7b31e
+AdditionalInputA.6 = 9fdd1119657cb31598fca9eee9600c1eae26dab68d8fe7b8a3f26f4ae292b3c0
+AdditionalInputB.6 = 9fd9d742a675f2725c4967c76f1c797c07aeaacf20985ab9d88e6e084dde2056
+Output.6 = 22267c1dfb3ae0f46bfc930e9d02e405028f0ab8380780dca00340c9e7e030e01cbad1adaff07905e3436070ba658d8326353ef47dc06c55089c2daa5e396e8c
+Entropy.7 = a74aa2a7ce50a871fb82a8b7179d25606fb00f4dcd6a1e8c2d6dfee11b58dca1
+PersonalisationString.7 = 95cf5c2512c798cc23aa5d3db1b82b14d20d32cb8b7aae6bc2630e9c7a9239b3
+ReseedEntropy.7 = e2de02b84801bdc4f49480055d54c4fd58d7f1242bfbfa8fa35c99211f27113d
+ReseedAdditionalInput.7 = 434d467150decd49536ab97f1a7df26f9f353112dec5a63bc0a9ee789d3aa0d6
+AdditionalInputA.7 = 4b0879b09f7bfd83d49f68508768541e6a5c9c7ae6d021dd746395370f1c50e2
+AdditionalInputB.7 = 7bf0a7597c684dced6ff032a584070144038ce4dc33765a67b92fd5b5631df04
+Output.7 = d83eaeaf16df26fb1a58d4520147fc0504b29741567b75eaa579df310be3b1ec5d950813070f5434462cea3a2b05afc002a511801dd73f8264641df11619bcc9
+Entropy.8 = 1b6810816043ca326a4417b957682b20ceaf532cfdd329e619faa2726c031556
+PersonalisationString.8 = 56ee0d8cb54c5a8d97be4ec5117418611c18241322fd12bbb50dbd5d6001a7dd
+ReseedEntropy.8 = 1a88c899ee1c5c6f2964aa6b36f6159895d2860696e3d6e3e92f7231bf6e4789
+ReseedAdditionalInput.8 = 66a07560c51d440977a8db1b5fb1cf8d71530fa8579d4367123c82c38a2e4387
+AdditionalInputA.8 = bc64ebb2053511b5b5ba2e998791283d9b5dd8eb9d39b7d1a2c31562a0eac12a
+AdditionalInputB.8 = 1d8d76c106bd275c39d21db2a1fe1a2642bdaffc9212e84145a224cdfc6a7e2f
+Output.8 = 3135933b86d98031a97ff13828c63f43780c8176856c6fc8d4f2d32afcc6e84f71ee0fe6de9a7b75968bcffe9fae9df7a53e8dfb46acec168d1ca4c59bd44b93
+Entropy.9 = a440efa3c7e89663e371e41ba5e192b95b2d14942bfdfd03786860ee33f796b4
+PersonalisationString.9 = 3289aeb3ceda9deff2f65ea894176f131c412f699560fb21d87be5af99ba18af
+ReseedEntropy.9 = 9339f1ffc3320fb4d51c2434f5e51ed56a12011273a45f64002d1e3f9190bf3b
+ReseedAdditionalInput.9 = 7acdc7967aa686ae37ebe9f3ae6f531130bdb6c484ae9381e962db3701f66c4e
+AdditionalInputA.9 = bf85647e6ccee6d78dbf625a4659acb8cc503cfd1cf9fdd5468d51da1eba39df
+AdditionalInputB.9 = 60da399d9272eb90878e3a24f1ab03d257e567aa1ebaa41e00b4c87cadda463b
+Output.9 = 28ac3ae1fb852a3d9ab1761849302c2515a0a8912bbbb3724805460b327e34cc7810d0b4608c9c25a0bdbdd3420883059dc77f59d6960b271513d5267d96c9c2
+Entropy.10 = c8a32e5ff06bc20f076b3bbabd68eb21b65f9536d780271afb13f79eeb210c1f
+PersonalisationString.10 = ce90e1af81ea8f9c587620623dee3ef889ab610b4d1827701c7392162eab923d
+ReseedEntropy.10 = d1ccf4fbd8e0709b4cf8d2044ee3c89fcbbc1c6cf10d634e44605cc676b750ad
+ReseedAdditionalInput.10 = 3cdaec08d7670b80c68b8ca4723d62f1a23d7d83d82687bccc10c38e894d812a
+AdditionalInputA.10 = fb0b4698d6622c8f5f1d680bceb7f394eb1372921434f17c1ae6109ece795d96
+AdditionalInputB.10 = 1ec9cbf369aa80162b1248a250e42fddd132b12fa6f8ca2de2eda4b78e7f2ed2
+Output.10 = 58df4e602f85bd94a9bf7dd375bac182e893c7a34acc62a456d3624ccbc54e9b082f4f04406a6c815e26a5138c29372372fa2c1f00e286b3f442172394f4da07
+Entropy.11 = d01e66a9237a87ac7b34be3ab46ac9e5ef86b63fb8150f2d473dc805af32c6e4
+PersonalisationString.11 = ead353edb0e4e9c363202d49cd74621e806cc3f7919f7cb4bfdae9944ef66062
+ReseedEntropy.11 = 8c1986aebb336932d8d75eb559f4748f61506e8308d8164a6342f797bc1364a2
+ReseedAdditionalInput.11 = 05f9b149cb48e90e02861e8cefe4d5b4c56198de51abc07dcdc3047d6e6879a0
+AdditionalInputA.11 = a3e1577e87a472f1f2cf6656de5737b17afdc2eec472acee84e7950986889091
+AdditionalInputB.11 = cbc817954c2f69cd630fa88d363f3878a53762d3a98625f1baab9da8393e3e0b
+Output.11 = 59ad551721e35f0ac2c37567d2d31364fae7397f66e8a454e32787e86df30c262dd6f0ac583a5f88d53d444ef464cf6640f3d16da736c08e2f328b53ee2284ef
+Entropy.12 = 6b098f314b9f95c3a7bb2597182b30483f2194fa4d2142b11d3f46cd94a0fed4
+PersonalisationString.12 = 5536b0e31db780144ab7f5e6c2255884a84b6df99477039939e26c77bf28470d
+ReseedEntropy.12 = e0f9b63175c79309269dd13c13423400fadec2b9a4ed20ff1c71d642b95bcde8
+ReseedAdditionalInput.12 = 227437313dc0931382804f8a2d7c14c847e1cc4ce28c5a589ec8e51d3a813c33
+AdditionalInputA.12 = 09c7eed8f0b6775f027745ab1a6f9fcd6a26691fbbd477ff23e06443a63914a4
+AdditionalInputB.12 = 70acab5cab1c7058c377bf2baef66d526a77d37516b849e52f22c1045d3f8a5d
+Output.12 = 74299de35ffab551132ee3a57b2d1968c7b21df968fe21ec697b936c61ad4a36ff462f7515594d3db77cc9af7350edc25724a754a69dcb9472df5b6f0868f55d
+Entropy.13 = 376df69ac3df60367eaae914a5bb600f6a3d2d1885eab4f8ba9d8727d099f1d9
+PersonalisationString.13 = b7be85c0b46f0f750502c03dbb824cf5082a297e6e7632c9454f029b4bac5b5a
+ReseedEntropy.13 = f5619daef4dbf63820e67fbffe7b577d1069993f91fb07e5399554d73fe192a1
+ReseedAdditionalInput.13 = 088699ed1958fa6c3319e6f6d35ea42cc14ba6596c4847216a74a7f9cbd31e35
+AdditionalInputA.13 = 5073e2e2450b182fb42901280826f34b0aeb1b0dcf26bcde62b1d04f8b965899
+AdditionalInputB.13 = bf58e86f9dfa0c0a2cd441c6640f8f46a272a50513266ab290e24c4f21c6f638
+Output.13 = f80f79e69f99f6d7cd2484c679a974bdfa2364218e1bf64453222bc8b5b4ea339bd05697b461cc49ed33847451e8766ff76a8714cc9256188e596ff44eccab10
+Entropy.14 = 253de0a4f552f27e2ae615343ddcf841dd28003084b07a635dd7195a336a2052
+PersonalisationString.14 = bd13b26eac1841ee90dc84a4c456e3975a3ff8178fa54d9d591c1c681d490c35
+ReseedEntropy.14 = 6600bc9f59ae8808b282b6e48d7bbc0d11120bb4d73ae6068f01dfe0c2196276
+ReseedAdditionalInput.14 = 0dc935303eeff16939ab83d4601e7728993a7edb57e60474f8a1a5feef9f4140
+AdditionalInputA.14 = 1550ac6da1742834c705b4dad61c37fc33e7d786f76b553ab324bf543f8a1b17
+AdditionalInputB.14 = 77ef7c3f819de78c243351a71bbb460936064738fcb75acfc214c884ff172311
+Output.14 = 1030bfc7cc645d6e2d6b2a3f2e97979ab999d70252c15504d71d02c5842c34cf63b94c512e162726acfb1492ccb525ea56e4ca1b54daaac2284e558cb4936931
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b2b3298306471bfcae61438a3a79e2355efa0b6ede4cbcd3e66de5140b3ae680
+ReseedEntropy.0 = 26f0d1e44be575ee6f3eda89c1e7e4fbd1428f8852604871c7a4f4c707a39328
+Output.0 = b71b6d7322453a612c34a91c1e5c3f8c30486a692b1ad13a4c08caccd123a639fd2e0a7c389cfa1a97cb78b438dff57b0b5ec4d569a8b2810a15f85c8c9226bf
+Entropy.1 = 66f41dc791e155127b7fc680842021296ffd9f5e11d1094eb446af24375f7f79
+ReseedEntropy.1 = 044eb12db05c2f4574b9b1628c6589177072e8607afed27e4a8faa1adbdd96f0
+Output.1 = f272682d392fe707ff8faae471b7fab6851460edeb207d9e7db96d2c27b66c5c45f98a445defd0895e8c3f47fe85f8de3c62d4028f4fcc891e288fcd780f212d
+Entropy.2 = c6506dd8b9b74ca16bd4119b690fc30da5fced3b8d315e957b12f1cd9bf95f94
+ReseedEntropy.2 = 0c80ff54c49ab89782716b1d515da24c3031f3ef7179e599edc8d865a03c799f
+Output.2 = e1696cdb476b24b513c1e87e68c74b1f3842f4294abf2a1a810073a6a5c8c43993a56507442db36a38228b9c25252993dd8865096fedb5858924f079d56c30d1
+Entropy.3 = 6b2e86d5fc5469da4ed332f4d123a611f60d96491c0a45088104768712314377
+ReseedEntropy.3 = 762c53608f075ba1926337a61c35dbfe024427d290260785b43b39f32d282fc1
+Output.3 = 7a6e193ce1eeb6a543d2ed0c4dbbe42e9b1aee2f3c990916e213f0761399464301c22e87907d3c1b20b1987260157dbc66fb860d6896add9abd5ed256c763563
+Entropy.4 = 4fbead74782fdcd2b3318c71e78aceb23a4d0399fc5c0342545b9980dcd85d53
+ReseedEntropy.4 = 53a455121596b49dfa3a97932c715f926de40e6fc930a8dd5736159c7493189c
+Output.4 = c912bfc93b9478bf98f54d5854bb7d9f4eb5d464891cd0c5e84cbc4b44695f7420bc21c6fa7fb57d9cbdc2e58a35d001c5162983ae7f9035bd81dcd1eec09997
+Entropy.5 = 711bf34f33844b1101690aab9a91cf42da10dc6fa281bf0650bc2b21272c02f5
+ReseedEntropy.5 = 4c5a8aa82421cd101e534813764b6c514de6301826dde3b92124b335ebbf6f92
+Output.5 = 6035a0ff6b26d2b9386e893a704f208b67d5b3550ded606c6d5fdb3f6177f3a5d70bf0844cef252b3b38ecc683a8670a9235143137d3e44514598c4486eb7345
+Entropy.6 = 8c006c19f2da7ae88218fcd50d5c6d5102992b4762b1475e122a30ed13292d02
+ReseedEntropy.6 = 5ce98d2a582b95bda230b7482ff800a82891d6b1df75fececae5d7067ddf5b46
+Output.6 = 2a19d7b35833eabfbc43cbc3dde14392d82f3283efbbd33f134b32040402c71326cd31d37e25722ce73bf3640e5e2b00d7dd278f28a0f4e43f8935377ca1a60b
+Entropy.7 = 9deefa779337ef1ff7f47c4819d175024df349f8a5cfe857c9b5e822d8dafc56
+ReseedEntropy.7 = 558d79c83d81d3fd07d6eb739ad30e298345bc4b906d2f6f87ceeb793aaae8d6
+Output.7 = 13da72e2a48e5893ae78644057f7d344cf5b56cfc9c49b7e0979c575350718588e73bd130ede3b845131452b820e41e8c99bb7e582e6e8a2e452c09004ade40d
+Entropy.8 = b8d82f15c3e0df02d2dcd5a1995cbf478845426ff9e4fd7cbac494a2b750a6db
+ReseedEntropy.8 = a34cd689589e4f6f97356f95fcc8ddfd48401043a6f0a0bb4c8359ca97e3e4ca
+Output.8 = 29c90817b65f08f92bd568cf40553d998d0f4548276dba089a029625619fc2af85fb64d92a7c0c3337e58d05c34bfae1b999d62e500ce75cb33dec5dcb4d96c7
+Entropy.9 = 10d5d638f70d4b37c91be44c182129264957610184cd9de238745b10579a93de
+ReseedEntropy.9 = 3697340c478373a3b229157e99dd9546fb0fd0370b3739382d384990c2b85b5e
+Output.9 = a31bba6f7b203e056fff4510250616c8d67e0eb9ac2d11d7f4888846c197971bdb8edb2aaeda12023c4a0d199a892914ef22af691389fe56e9acf31fb58b63e6
+Entropy.10 = e1f67702ec10c75ca3e9d30816c479bf4d04dbd1f664738b21d529e5460e92dd
+ReseedEntropy.10 = 00c8ac1971096ae2a8d288a962e5ab331ebd4ede7dd0723b0a92f9869ab7ea31
+Output.10 = a1580a82cdc08611f86b0f1be48810e32f084828e6156cde1a2b204b5d30636f1f06324e215d1c0de88d6034a8e7369ea845f8d4afcbe93bb2470df12a993fe3
+Entropy.11 = c96da7204df69347b91dec743dcbc86ca6690eba8193d1434b1b87c4af03cc1d
+ReseedEntropy.11 = 429674cb12e355884c33f29b46e257f0fb0c38fac9039c0ffc2a77b29acdf1c6
+Output.11 = 286f173772d9423e8a49a2a677366ffe2125e116646e799d1c377b330f5a17b82adb652ba9f14a570d3cd3b5e2fbb8df03119dac219d872b11e750fdb326a62d
+Entropy.12 = 5d31f81a37c9b5d84b876d8c3825b00edc9f4a51fe82141ddc58b65d5f9a37cd
+ReseedEntropy.12 = 41da0230bb94f2601447e490b0220e7a1f4b2c420ec6de0d675f6343f34f1b6d
+Output.12 = b618afef1132935ae9ed83e13cc707833219ffbd885ed7aa279b6df4ef62864b3fa3cc7ecbe7d7e1f3b0d5354706973a8594e4124357caf31ffc1d04d49df69b
+Entropy.13 = c50ceace05b9aac3407c91fc401e1778d2d7aa44b7a42af6774fd80a139b4e3c
+ReseedEntropy.13 = 15fe0dba967be9c76687c82d74b0a018cd96a81cfbd02e600f99f1d3e965fae3
+Output.13 = c0d80e37d20228b9e07ba8da2178bf18ea8d497cdae27ab37d17ebf9baee9a4b88953301c3642de5965a6ca7f90e9f48f8e62e338c77eb859c696088679fb0a4
+Entropy.14 = ac5668ac054f732d2bcd88561642c5a7ca98c68e341cf0cf18873fea93ef33fe
+ReseedEntropy.14 = 4a4d088beb9843e4622cdb0c5a6851587f2b472dc5d734211409bacec7b2ac06
+Output.14 = b2013a363f3ee01ab8573f3e3eed32285108c3ed3bf231c066176ed901e4d6ffaaf0cfd12d63d7c19f6c460baf434a1d6a552c62274bcb7469f7009c0beab972
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = f817edc33537af62b7e8c08745a59ab045a4991f6489ed48168bad055a70424b
+ReseedEntropy.0 = d52baa3624c263304c096a48356f065519c7a7470891f6ce3a20a4f47efd21c4
+ReseedAdditionalInput.0 = 63265becdeaadb76a674221db1d841bad56bbc5d2ac1a54ec44deac5f7f28368
+AdditionalInputA.0 = f78d6cb6ea0945e8ff9bc6f0c203d06bf2787835ef4a94f10b904592eed31ad7
+AdditionalInputB.0 = 8811ee4cad917475de9a7ca107498067d3944b14e203c3cf4c338766f06d00f7
+Output.0 = bb71bc49794dfe83cf07f42eeb6e41a49610f1a1e57459764a40611b1b1447c2843940a4760cf33b41f5f10251a8e83aeafabaed1c28091ab552bc7622f6eac3
+Entropy.1 = 853f0b57156cc085fe4cd2d9b944f8e85fd981cff28fcfac092a281627c48a96
+ReseedEntropy.1 = 0c3992e1c6c86f774f1f9511da98afefcd780a11c5dd000e59743bdceccb431c
+ReseedAdditionalInput.1 = 598cf4baba27c14268a89f663b26271b287a4cc197cbcaecf1db6879204d3841
+AdditionalInputA.1 = 649a28e60b851f054140bfa75c370855fe496b175f925ec4c5654475adcf1210
+AdditionalInputB.1 = 83b92fa5028d74228407ee6542df481d35b9c9774b0eab68607a516dea993c5d
+Output.1 = 9677abdaa302b27464541b0355a31707eb3fe90dcba3e195223f419da2d17438f4c5e3e192cdcf4897a14b27eea6352511b7a953f7f4d1298b400e03b67aa11a
+Entropy.2 = 966564ca87822fe840972df9bbdb4c5437fead0b04b35eebe321e49cdc480139
+ReseedEntropy.2 = b7b9a1dfa4ac435bc43f405ac532fb8b9954b95a0017b90eb6a7dc49ed5f716f
+ReseedAdditionalInput.2 = 202867f86bcfe0d2e884a0564a9b37fdbf705bc3b449dea0d9553ce0893da9c1
+AdditionalInputA.2 = 1a57a3a635680fdccb04899654d28b01dbcb61c5e6d70800e0fc8b694ac1ebf9
+AdditionalInputB.2 = 5b07dcaa294a81f4121a76e9dd25ab6de01528761e2a61d87d630786e59c165d
+Output.2 = 42cc3f565516bd9c08d91359cd03628b91b4cc11446cbad6eae1f9b6c9ce2c9b57bed0950283e8ef2f788f362b32ee35d16370c23a033efe39bc897dd67dc2e3
+Entropy.3 = 5f25ed0a49a95c856302420f8e37b2b812c47e140ef954aee46749776b0528ff
+ReseedEntropy.3 = b1f131a60b60c81017559dab4f696a1af435106904e29795ad78a81b27fe9eb3
+ReseedAdditionalInput.3 = 9d9aad6743de48c9d865b611a01da39646469346e15650fdc9cb084f35c2ed8d
+AdditionalInputA.3 = c447882f6c4a3f920db5f0f53ef1a496032380f334e4692888a37de93b39e7b0
+AdditionalInputB.3 = 5b4a50386a7a2ba12caf2fb1989e50e76dfbee2f31cad2881e6efb75cf5f9193
+Output.3 = b44f0b165d9e6216ffecf486d3786a78bf5939d550966e88cad2d39cf175f7e92cf1e18f11ce110889405db739e40a5d185f02b12bdfa5b4b923b8486f0ac540
+Entropy.4 = d98b88d957d49adb789cf7dae57736b2ad50b2cea362f0548aa0fafbb7027e92
+ReseedEntropy.4 = bc964bbb80532ffd6afaf3a0c6dc3692ff5113e742f47dcc0e336949bf6d7af2
+ReseedAdditionalInput.4 = 7da55d04603967c5266c1380470f19dcf453d27f660d088393085ca4a34f792e
+AdditionalInputA.4 = d749737b22c237471b9d785e4ff752951b4999be82bea92cf5d3623eb287400f
+AdditionalInputB.4 = 9723d0e72ee9650db15f79f5be1fc78cd7825ea102b44a4bd96c51f451ff5ced
+Output.4 = 895966cba17b7f6f0afa161ffa23c97d7bb980bd2ff98ec2255007c5e2fb82b861ce0a82480b0c06afb1b4ed622622982e8060169a36b143a82013befb37f6ea
+Entropy.5 = b0e1c0504fc2eee39bb6107dea06990a9b2eae04242663bcb5f4192d15052c13
+ReseedEntropy.5 = 4fd5250793476517847db8f4e806c340244bc244db15e74f7e0ab1af9cb3faf9
+ReseedAdditionalInput.5 = d160bb1fccc7afd6ea81873cd7ba7a0938d3d7ba4aef6bc1c7db631f0771114e
+AdditionalInputA.5 = 750678d7fe8882f3daf710d795efdde427cde09d2b9e596af9835b7c7c0b286e
+AdditionalInputB.5 = 570a229ed5cd24e657a20c0e009b786fd1a30bc80b6d49174b4cbacf6783cc5b
+Output.5 = 072a9e3a66f29c335fa091af47233c4a9aeb431cdb5e8cdf7ba5a56448d633c1a26385eb88907f13941ab16fe80c5f288f3e789a634fa0796c3080fe2f435a88
+Entropy.6 = 7c9dca70b3ba24e3172a89a9f17fe5cc757e0fc054948bfd1a1b80a6936eadcf
+ReseedEntropy.6 = 847fca3103b6b11148514670ba383dbd104612019dc635b449e08802d65ea488
+ReseedAdditionalInput.6 = ca084ecb4dc20d176d504a9a95a9cf666dd12a63598f7e3206e7673cbd3128a0
+AdditionalInputA.6 = f41046ab858e688546a12c2ce955e3c3a2b98bf0d3861a2090340a592cee36c9
+AdditionalInputB.6 = 6e61060ecfe6d567f35f7acceb07497203ea8ba917b56f81edef024a849e8c84
+Output.6 = 3a1e1eec459c90fcee4c1241f2a49e5a2aa31ce16983057ad8d43d3a887ce301f0d7a4558a072be3198db73106ee3cf630d4e4c13ab3767e81af1568ef7a251d
+Entropy.7 = 0b1bd61c9cd2c1aa26b68d2e0e409ce87afa40e03a8dfae614853c1f3e5033a7
+ReseedEntropy.7 = 960e3ed2466602c3a456e0161d8924828298eb5d3d4a0e2897d3c230fb12adf6
+ReseedAdditionalInput.7 = fbb3f16d70ecd0f581914a1ff8b1e536aae6054f3d6888ee8436b2e600da2ebd
+AdditionalInputA.7 = 4fd30a71f786ae9660e42175e643bb99023a6631c52f51c5b35ea056e9fd3952
+AdditionalInputB.7 = dea9a094290b68a790ea1a8be7089ae15228f68da0cb5faa70258f513c19e161
+Output.7 = 6a123702dffe38d552c63b1ca9ba01d0de1b8cc064aed95296da454469ad28e2b794eafc04c46778fa9e24e5c3866840c291c851482cd3788b2a5eb17f236390
+Entropy.8 = b77ffbdb00586f8034cffb58e2c459f773ce204d413d4b7a6fc31c0f970cab2c
+ReseedEntropy.8 = a900a2b9405f6b07cdf44eb495b62d35ca66a1362bd96b6231043990264699f1
+ReseedAdditionalInput.8 = 758d5c4d93434b02c6f6964eb7a931bd331d5a4e290b3291ab5174714821753f
+AdditionalInputA.8 = 5852be3ef7361dc7696c0a358f30bab059feebb77a6bcaa11d3c3583fb6a4e5f
+AdditionalInputB.8 = e517828483ee9c1c1c6520bc9bb69324fa2e24c3566ed5cf0db8c58417c3d99b
+Output.8 = 5f01759b2a748b40f8109d5f78cbfb7ba245b36558858b821ec443c7ca4147903ae2bdc2b1008959fbe8a6605a7e4f9a22adf43138bf96c6ff1df100dcbcb0b4
+Entropy.9 = 67f1fd05f2ebd321fcdf411655c555945ef8a5e868ad388a686efe88ecd154c1
+ReseedEntropy.9 = a0db5092dfdfef42444d46c4e33442a33f714c05624d24a922cd3dd28f2b2e07
+ReseedAdditionalInput.9 = bf0e3db31b0e3c1994e731e47876ebfd62fb4d3c620719f9f086f17d51bbfc15
+AdditionalInputA.9 = 1a2814054345deb9234b6837d03e6de9ec5cd32d17627f182c633cc5c4ca334b
+AdditionalInputB.9 = e6c77782b14306ff6882e297da10cc9e47733ed1f7c8592d46c36d9df07751ae
+Output.9 = 737451d956e51846f6fac88bc3313ff49b26411279042fa266cf5589d2ff8a691d22558bffb36cdc23f06da0b5a3dfd798403e9d486b8e41a72cf1473feddac1
+Entropy.10 = 4165e4adb37afc2ae435a9671147b983102279f79b9a0188c6fa4e5a22ff55f4
+ReseedEntropy.10 = 2d32ed1d2e3a52179d0779ef09d120a92b3a4daa09a30065d63bd11a97c4d6c7
+ReseedAdditionalInput.10 = 4ac1992ed95f9f8d207f29f6a2039b511ffa8233f46bb48de66477044dc67dd2
+AdditionalInputA.10 = f20d781d0ccb630d72622e5d653c323db5f652fc7baaa8009ac1c3ad2d0f3832
+AdditionalInputB.10 = 1562801a0aaa415b9d7a194db424c18a731ea248a3252c3a701e9f5d24ce8d2d
+Output.10 = 1f027bd80e6ee8797534bb4441ad167f26cc4e4215610511fdace75e251f2dedb967a35f6bdc1f8953b9cc2852c816a5c3c8bc22d2f88474ea964abccb9b1968
+Entropy.11 = b260db47853ca37f00b69ea75f6540d1e8155151577fee6835746487dcef615a
+ReseedEntropy.11 = 901323de859f3b5ad3e81e33b87f53a8fea35a1a8b3ff3fbd8e966ecfc6c72ce
+ReseedAdditionalInput.11 = 584bf29e79e1950ef12bc77d355d39e34de3bad0e582fdfa628e97403f59f406
+AdditionalInputA.11 = c5426483aa282f44afd6462e24eca465328539b465b1b97d673b05d91950a37e
+AdditionalInputB.11 = 073bb1c00694f65ab12880b94e24210866ed272ea6e206e0ae7e5007dcf4ed4d
+Output.11 = e662b9c0dd94e0e897f6479ca23a5de745e434d8d9d41e22fd89aca793fabe6d5734553415b692b3ce7608e8714a4bc7c225ecbcc7bb5b9f55c053b51cee2c49
+Entropy.12 = a96e952094314350c61c974c0a76d62da6ebf25dc633b77188aeee4348977ddf
+ReseedEntropy.12 = ea2d91108a9ef2ccd6a15bae97606574f643c5c4895ddf608a04f0c3a2f3eedf
+ReseedAdditionalInput.12 = ed875da45209f7473e8c37a81c198ebaac89bb2da235f11ed623e4d9a2707c31
+AdditionalInputA.12 = 7b8413065495ab865cf1ab078b6103c1a81a0a8bc5c996c2a5d46c4e37ab2695
+AdditionalInputB.12 = 26057df212bb78040aef36a1cd4fbd093d5d9be775c61b93a905ca0ebbb9ed49
+Output.12 = dbc5fe05c193e101b9a313435b9f3771588c168a15df08467a4d3c81acd4ffd17798d200469aa76aab3420e99e1a68acda0235b1597d4ab925e61ee9ee57b52d
+Entropy.13 = 2aaa69cc440e474b6b9940574c036b82f724ac97dfa82c71f492349bb7a8f9e5
+ReseedEntropy.13 = 2131866c960262f404ad535967c518f3f2e364c4bb6daeb0c4d744bfc8fc83a0
+ReseedAdditionalInput.13 = 33f7d10bb1c66ae0771ba4fe6193ac271201d681e8e58082df1632e5baee67a9
+AdditionalInputA.13 = cf75d202c5f36a4d7a40ce0889b7920b57cf9e55e9bed39c0688790ddf3ba739
+AdditionalInputB.13 = 345eea83405940c2ce5f32beba445706e3d2d912961e0fc869ee46ed2f5d81b6
+Output.13 = e389197c83f432eae5afbe2dd461ddf7eac09bc8f92aba0f726dd6d85796f3477f2b1eaf501d7f37b17389cae95c09e5d4f240a277c9c96956500caa30eaae28
+Entropy.14 = 9dd2b84f4ba3bc67f590eefd75d56babf33727405a38a2d1cd2a5bafbb0db27c
+ReseedEntropy.14 = 4f21f5607632c2868e5848a6bc9c6e17a1f62822f91a9a77cf83fbe0f812c6c7
+ReseedAdditionalInput.14 = f9084e1fd6ae346c89204b22a77a879ddaadb42a1dcf5da018c6b306dfef1169
+AdditionalInputA.14 = cc92f09a3b12f29d9e73253c261e828196fa540a9024632665c6c25a419b1f86
+AdditionalInputB.14 = 53113703a3362b3eefb0c12587fa25a620e09e0cb63acb3f7b74471618cc0d05
+Output.14 = eef4850d91b63508bdf3257c4b66c8c022a6869cc8d9473e5f579d103c67225c04e3994f14c31ff0e328c1adddc8d8f6b1f2e70409325a353eec19c420352b7c
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 5cd1df6db58ea507838d7426b3fb48402cd14ab75abbdef33ce30fb97c530998
+PersonalisationString.0 = 351420c0263ce11ee8b683f6106130c67ff1c655c4e678825293f004d27c5424
+ReseedEntropy.0 = 99e6850fa29131bfc748b2e74e0fd62acc4be4e9b5f06447dc26f772c0241561
+Output.0 = f6040af8ae7ab04cde02be25af95dedada3b10321c418c7af4ed5bc82e28ebf778ae4248c565292e4cb8eccd40f18a382848b40d7441a291cc9ee8465cbe5fd6
+Entropy.1 = 5a6db1b1ec99b81505a67f8c22e4869dd22feb9eb942c269edbd5c9a8517a683
+PersonalisationString.1 = b741a4c1ebfa693af8ce1d2ab165badacdc9a8be61e2944eaee5b1b0dbd7a1a3
+ReseedEntropy.1 = 510b0cec9b8e182aa4ed96dcd774c241ad98fc45d2d817928a1b6013fba6c9d4
+Output.1 = c0135285ada6de393fccf25e20aeb9d1065d5671f5462d15f59e54c158fdd4829120a2a678ed79f610d4be3062bc37ba5a329b6b1f256e3062de3323ca50ce13
+Entropy.2 = 9bddb62c4bdb8427248f719c49701eb2278d724085f6c7d3fef2623a83dbced4
+PersonalisationString.2 = c0b7993747ee003efcc97fff0940c44462d46562851c2b94b067b899c9f76c85
+ReseedEntropy.2 = 76025aa88b1ab2b2ac51ee5e4b8aaada34172e8265e03187598214ff35a28112
+Output.2 = c906b732f11bae67a18d6a25b8a650c781cea484848dfb3a7e888fc95078359f2a080b24490f84fef172bea8cb0d0b33ea15713be9427a09a88f92071af007e4
+Entropy.3 = 6705f142d53806411dafb8974b9e04ea96bd7eacdf3ca98678b81baef9b794a4
+PersonalisationString.3 = db70c6a67535683d89abda1fbefc149673de4ced6761227894ffb527c159b5f8
+ReseedEntropy.3 = 8da042d050c718cda4252dd0080f0f46399215350fa51e077c5b13f0b73aaaa0
+Output.3 = 770c82804c7b56ab524fd78c47d6769fc808285a41057c1ee322e46bc8653b2c806f3a279ca00281f8a7ee69111eb40b98c65b2031d962ef4f792bda005338e9
+Entropy.4 = 9b5ffae4158fc35d95b0572bf7c9a672ce2b60e60aedff83aa4e0625cca3b159
+PersonalisationString.4 = 1a7c4a9fed2624ff83d0142a601b8872f438ce20c1dfb210b5a082af2b2ab4c9
+ReseedEntropy.4 = 0969f895d862db1041e53ae2c994d2ceb6e9470a58a6df2940ae1b2249ce32a1
+Output.4 = 8fb552d84b11196eb64d043adf8913116f66d28a41725bc1fb9143e3f8fd92d8d5b5a86936e0e835ff932c5247fbc48e94648c10cb9c90dad354cd425e0ae9ff
+Entropy.5 = f9d40e137fbedbbafd71f97c2205f432527e7a72d452ff45ebc311e21c1a71ad
+PersonalisationString.5 = cc376a45b3703a58c5560b1be14a53c0e91a900a14bb88a8770d8da3ec2758e9
+ReseedEntropy.5 = 2f336b893296b78c8aa9c38ea2f917e116a03bb7f7a45c1420d7fc980e2c10d9
+Output.5 = a844992ce60687d5b1ed2353bd5bfad0247ed3e7ada67d4d4170ff412ea86d72abb8e7a50f8f146cc2cda0c220094fd8074c118271eabee7a27cb53cbf7a1a18
+Entropy.6 = a90072ab3611cb02c1e70e112606d7bdfd49457774e4f3db23b2fb6bcddd1fd7
+PersonalisationString.6 = 940cf97c25eb524969e04a470445881a3940c04d648f41802b5588e4fe74492e
+ReseedEntropy.6 = 05002640b643a07ef9971e3807aa118f40a357317568dad1119f00f6100acc41
+Output.6 = 55800becd40c19b7a115a0cbbf964b2b591890c49e1fc98a65a6471a51f6bd9a2ebd177a65b5cc0ef72234080f648c938ae4a20278764c669456bacf7140f2be
+Entropy.7 = 8db02f21f260e46e9e76721a6dfbd9422efc871f4f9b1062294c5c59e76db99d
+PersonalisationString.7 = b1b990c29109b8724e316f19b89b4ad7960eb84c884db059bc6788e2499b5159
+ReseedEntropy.7 = b7dadbd53ed46073f20bab202a559bc57046cc8f5483e268dd88d9bd3865c242
+Output.7 = 78e6389de4a632ea5aafcd2b31e0f04920b224d866a9763cd6ce33ea679d11c3f5c361b9dd7c895e45108db2ad039e42d6cfd1f8db6409ed8bde1ea2b63e9b5c
+Entropy.8 = e9291a800ea90c069b5260f000c94b146d95d3d64cf4ae7b9748c5a85e0a089f
+PersonalisationString.8 = f787515ade3a3884d73d8572ef110f6448153bf1e052e76d7936c3bb107cc1a4
+ReseedEntropy.8 = e81bc70f7d116d9c2aab9fd9900a938591f725c1881f391f93f1e84c67edbfba
+Output.8 = 83f986a5f83a59126dc861e0a65a9f454462b8f5afa6f4dc724d11936ae1a14942238c7ce85aa27b80ed7119d4c3d384b9124ae5d664d9a1d0093cf69fa12f80
+Entropy.9 = 1353d6861c034f22097d5cf4c675275ddb588dbc5ac315b72562b64aaf84cd24
+PersonalisationString.9 = 5632417e2680241967bf727d6fb8a74604dc635b3d05ea70dab6b0fdacb0bebe
+ReseedEntropy.9 = c90f5e4866f6c76f9d7541882e386178ada3e29c7aa4329639b8e6167b1a2d20
+Output.9 = 49679c5f861afad35ff1d2d1a52353fbd75c761ba0b9b8fdc83f7ce26cb648957d74f8588f623ec4ba244d9707c13b07eb6fa1acf37cc1341f5955778deeb746
+Entropy.10 = 85c508f00b6285e4cef2187b28169ce72dc569ebc1d288bfb337fdd36a523285
+PersonalisationString.10 = 9cc8fb6ecc2c19653986315940db552360a25b5d8fe4b9142e15dc62c5be19f0
+ReseedEntropy.10 = 050af1108967af926fcaf4df0787c9e0399a07204452866094646a4ee7ff692c
+Output.10 = 71232dff0b887e914421dde7d3d907a7425e95e599794608120b6fa33ae8751ff31d0199699244644fe1e7517120be8b28e835336f94c79cc94bf8dc82a102fb
+Entropy.11 = 4fe0d8990901bd60d78fdce5bbfafbb8247378a08a83e6f5fba79589812254e7
+PersonalisationString.11 = 240b77760a8083dc5e1ab62c4b70450a2841e24fc3c3ec7402d557dbe1f2f6a2
+ReseedEntropy.11 = 152c8861dd1f1d1f6ab4e565a4e87cb7460dbe72e3438a769ebccff3388c2c29
+Output.11 = aa475760e501972fe04e42d90c62108728b42ffb9ecd5fc057c6c4d190c16d83c42ef0f4eb96557afddb1bc76a319a81fdf5e316e4f925254839945fdd21323a
+Entropy.12 = 76d97522d288a5786310fb49d358a40ac9cd59dac200d179ca42af3174b95814
+PersonalisationString.12 = e39b94d696bd9d5ae2d27a1c232e2ca4faa813fa1b34f793ed7ba5d931dcec34
+ReseedEntropy.12 = 8ae2cfb44c9202034245e8aa889a60383a1f3499172f467b23cc13d148600b4b
+Output.12 = 1a04be8e86c1591f0b5386c8d92ddf7a29b905e863ae967a48157fb6b08b89305160dc72d1207152e79987c08e9e73224194fc5f198e034bc212208228e2ceb6
+Entropy.13 = 51169fe19ec2cc924f6654aea77a9c1890f8a64b34071a694eb4df88a0ba6aec
+PersonalisationString.13 = 6b34c9fe6b146fe9342d4b1dec10a58b64c3f38b126fbec4c3b9a3774fd66a3e
+ReseedEntropy.13 = 0cd446699c1bf3fe9826d7fbd077ac3b73d3436503bc3d9a4cba9cdbde7ce0f9
+Output.13 = 379e2abdfdf6764cb2ac8cebdf577bdfb582da5ed507d96bbd2784ac6e18d4b3a524d2f9226c21572a544d592f4903b1a56cd1651b0d0f0e2f13bec3114c9357
+Entropy.14 = 85d2a6ec8be012ea4a505051ed87a0a74ebf60bfbac0ed577ddccfb112fed63e
+PersonalisationString.14 = a48f64c672f37649b12630157e15b9364ee7548984d94171b2a291292e54e13e
+ReseedEntropy.14 = c4933f8a2af99389732cbd0120b697b9ad99e4821f4610b66c18d9da0e28bd00
+Output.14 = 77dc9c1b636acd5b76a3453b168479ce947f4fc1401ccad4dc61d4630370ce21d29017244cee50644e3654e702b623e20ff49861890781a6bdb68e5cf3a7216b
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 82aabd901b21bd5f54544755ba1fb4c6a3f59959e59a205667dfcb5e760bd4a5
+PersonalisationString.0 = 337881b16c89b8f49f55a6e82bf1ae9824779b4015f3044c780b23816bb399d6
+ReseedEntropy.0 = 2ed533a7fa6bf1965711b12a9d9937139f52b639f9405b4a40c8fc2febf63b21
+ReseedAdditionalInput.0 = 5444c8a3d8170a640a1619c87dfca660d6d2a7935eb21fb0988a126c5f16ef41
+AdditionalInputA.0 = f7d847a4c18f863f55fba405d899f858091c3a8e6e974bdcba58cd3563ec63f1
+AdditionalInputB.0 = 35c8393b03674d9b896b2130e1069d53778fe57a063bcfcd051f7de036c927bf
+Output.0 = b21861bbef51da17347d720961375e244a34c31c36f1a7568503b2db6a335b3cae2db4130d4a1f353d6085e39fddb8bea2a04140f44481f07993a93c8ed0d1c1
+Entropy.1 = e01a0c42bf15d0ac593cd8f9eb757249018d97cd026a61bc342d1efa22360461
+PersonalisationString.1 = 1271b8194e1316f8d9b8a0c911502b6f9eee1a3473ae0d6fda0e43fd066831c0
+ReseedEntropy.1 = b87a5f9cb585d333c702376cd543b00624d9312e2f64b6722c95028eede00d98
+ReseedAdditionalInput.1 = 4c6b4271d78a3e4d99512ae6a0ca7f8ad59ef67e284c8d2a40916f5e83d155de
+AdditionalInputA.1 = bb4e5bd8deb2d2de494f9d56041d4f56f16fa629d17b54de6c2c2018dfa0d8f2
+AdditionalInputB.1 = c6d3aef9b3bf45756d0b017edaff4e2162609e47b7954f5ef9b41b8fc67e1b7a
+Output.1 = 5eb2512020d1c1b7e8951b206696fc76f83e39c18aac682e359658689af70c4862e1b83663fd246cac02fc0455babd6cc3abc206a30a4059ab484a9da0ff3d84
+Entropy.2 = 65cdfa76a8a8b903342ca610bc3392a0cc8c7a95e4d06e32bc114b1e4e654afa
+PersonalisationString.2 = 2139e015600347dbd60c2ecd2203138e13d2ea2dd67bc44b0e00d315cfa9d055
+ReseedEntropy.2 = 72066f1f42f4602518ade08bd815d22125e246376d0cddfef3bbc885c4ec05e7
+ReseedAdditionalInput.2 = a388761cc35dd45c73768fca9b4856efdfc9822d85830a651a92ae7eddc48d2c
+AdditionalInputA.2 = 479650b8235f72850d5f09504ea69f4f81f88214ce6457bbaa8b5b6fdd03a57a
+AdditionalInputB.2 = 7eba6b994f4afc2c75860a71b8bddb41abab0291951168343102820c45734108
+Output.2 = fdf91cbb5414af194b107f68be0b6bb2bbda8615755040b13b817c9c9296352a2cd1e95b728c916471122c86559bc161bfe7c760584d34ea9d5e1c645b65f102
+Entropy.3 = 0e91b73328682808321ef713ffd8135a6a8b621bccdd7ce97ff4b0b940c55c67
+PersonalisationString.3 = cbd5ffde8c60dd65c66bebfced0a473668050a753e3b5fbec2000f4d21fe24ef
+ReseedEntropy.3 = f53a72710834744a52e29394459e311dcecc37f3c27014dc3c9d8500f4b4becd
+ReseedAdditionalInput.3 = 215f2655ae42464b4aca80627e53f92d0278a8660593628c96ee048bc44f8faa
+AdditionalInputA.3 = 006275ae93df89734f53b62d5fd4b149ae0ea4caa90d2ee126854d365262e015
+AdditionalInputB.3 = 206baf1b614c39c0c986d3918acb586195a3721582acec961c83070e09a281ec
+Output.3 = aeb8335f71174bf65225a909ee497226d66ea683998f0be5f34d7c1d88e0e46d96bec6438030a7c1da3b7fb3ba9161506f78160d40cea5f74dae985bc6b2e805
+Entropy.4 = efe6b036c6fe4af1cd49f4a05f0b0711639c4abd23d1484bdc380bbd70ac52ea
+PersonalisationString.4 = 900ed9639b549eba0bac4eb125da62b4145deb48f817eed6c3bcb6ec78229404
+ReseedEntropy.4 = e7669bff42345852c57a2ac4099c43f88cf25dd9ff6f75e1c926bb911451d384
+ReseedAdditionalInput.4 = 858c94ec1d953fe733842c49b78589b19bc0f6e8b34668e048897654385a02de
+AdditionalInputA.4 = a1792a91c7d972dfe7fe45d4829d6358f109220a43c73e634f2fb6c5586798ec
+AdditionalInputB.4 = d5cc94ddac9f2d2b883938fd8c4adae146ebc51506112350d9512a3e0b7a6105
+Output.4 = 0796489e8169fe32a5c999f70a2e1b1e0655a4190f042e1c6da27139b0ddd22f1b1505ff1058b343005b810510939d53f4972ea110499feb34f2114e9068aa0d
+Entropy.5 = a5ec529d89e08e9e440767f721960b6c6bac49afb212c7439d11df2cdad0f33e
+PersonalisationString.5 = 395bd2e919638e428d6155ffebc90089c07fbe012ac5bdb1229355824e145a26
+ReseedEntropy.5 = ee2c97e6d5b54a291d0415a03079f2d68837fe9e424907f7ce398e730eb37017
+ReseedAdditionalInput.5 = 5b86d0d7f0fa8b1483e2758fc09ff76bf00dac3143fc4b44cc2ce93b1926c1c1
+AdditionalInputA.5 = 5bc446c523386e7dca9a8b3bf40fb5e86689fc4d175a51e22a79a6eaed79ea43
+AdditionalInputB.5 = 88798e308f081cdd87e6bcec5ab23f7319ea4e38ab967b23a6b9d2ac9cd3dbec
+Output.5 = 5a4259f52755c74a91f2577dd0f473217e62e88561cffa625e0367293ffb1999a3c6da37c0bd6e62a742536632c85b40962e7249bde07defb95b9e3a72d2762f
+Entropy.6 = e5c684d703550bf65026463a89492441f2971cb1aee394d1621c05343c92455e
+PersonalisationString.6 = 8f2a8578b450010df7b50c92c31316cd76f28e4a95602ede95770b02695297d7
+ReseedEntropy.6 = c260ed27923b69422a1961e4bfbde3a475289991cd31b5dbad43a650ed29c03c
+ReseedAdditionalInput.6 = a9db1a29943707b1c3fa6d6b1d2fa80841b2f26e2be931a8db5865b5e36a1bb8
+AdditionalInputA.6 = bbb11f77fdc9bd49db0eb19d05b1653dcdb01b032b2b53a2a79c74c55a7f5e4a
+AdditionalInputB.6 = 2ca91403d277f7ef52d7752fc4738b0a5e4c27f34ec5bd90ac1c70d38f7f5580
+Output.6 = d078dd65c7187b337c81bcd03e0e5451398187b01464b5b10d85d85bfd206245ca758eb6e7ed570184e9cd2fe596f1eefe691910e1087a74ba7304a03eed6d4f
+Entropy.7 = 6302fb5f99254496a7c829370e43fcc8d68e41097a3575d30b41477ec534640b
+PersonalisationString.7 = 544e22686451c401a9dcf0f24ed922d88e8220be4503111b580c052d397bc15d
+ReseedEntropy.7 = 0edc85bca4826ae9ea618cc5f735ccf9748ce8b9b47bac67e9f473c2d291d991
+ReseedAdditionalInput.7 = 00d573c9b89d4f3bd60cdeb4d40a8af41e2eb2f9397faf0de049b50cb5638627
+AdditionalInputA.7 = 3987d11bfacf5614ef0e28e26006d66ea03c3b0141e677018be10e30f0b2538a
+AdditionalInputB.7 = 2338a68b5faca8d6be8981549ef2f6f30569a2d25f7c51f62cec5e126aebdf8d
+Output.7 = eef8d22d0140cf78a29e40398af3d1c88dbc9eaef8c6e5a3f8e341bc729e47c0353f5168de2080df8700bcd68d6b8515efd87bb10f4597ec5b5264cc4765fcec
+Entropy.8 = c41294fc54dbb8b36fa1433934c6d8c51719c30fd6371d830c632f6c10533021
+PersonalisationString.8 = 8c43b00a1beefbae61281c853fc27aadc6eac60ea00987590d9676bf28725b7a
+ReseedEntropy.8 = 6099d2716d1e5ba46b0b37d08b9ae2f6b7d39583c5e1158f77e268a77bd92a84
+ReseedAdditionalInput.8 = ca4888124943d6741e09deed6ff5aef0f05d322790fe792586a0fadb7f9b27e0
+AdditionalInputA.8 = 268e4a9fe0092335636a86b48f54849a6e4aedbd8d8844b0fd1902a6d2886f56
+AdditionalInputB.8 = 797a964b3ff0b038a4cb7138f9804e616f4f4f31e5b4067f35a53a9d73958c1f
+Output.8 = 7dfb471b39112a02e425ca7912fae100dbf02515382df308d1426207d78d7a56f4bc849156b51377f8e31bff5aac7c2d4e1817c891322f48d5e1bd8d4fd6c7c6
+Entropy.9 = 368432ce049f1a0754dc42608fd2664861f2ad0f0ac3cc265e7499c8c20ec8a8
+PersonalisationString.9 = e342f4c0c93e10ae15c7f4db193dbda6747f61eb22cd342e641faeb163f83f2f
+ReseedEntropy.9 = d62bbe9a62561a22743f73e0d6647ffc9b8d5ba0cb414fbfa4fba63371e7912a
+ReseedAdditionalInput.9 = ff09787987aaa15859075fcffb02d049222e2bec690bfacdec2ee7d3164bdf99
+AdditionalInputA.9 = 2dc1d8ae52a26cdf75ba413238b1cb776327dc9d836ab2333ecaf7604c91105c
+AdditionalInputB.9 = e91e110e7b9372530853c4ab316150eac5fe6240f3ef7175c2ca71b889e5484f
+Output.9 = 4930fae17edc90a69fa2a3c35368945b56556d561551c3bd0474a88a10a052cdbd70a6a22a9dec017b23160ca4700d797ff590921e3ef456e11be1c0fe08cc35
+Entropy.10 = b205cde0fca4121af7d07b44c919bf513db0900c3f292aff8ed29a7cc1cd7a5d
+PersonalisationString.10 = 1e7787ca3ac86fbfa3ffdea33fd050fbe026a4ce3a8e8161d4c213adb4f6a149
+ReseedEntropy.10 = 49c52f33a6ed01c55de9cd02803fac0264b6702bac6af0aa0924c6462dc217c1
+ReseedAdditionalInput.10 = 29255f9f7b39beb03efdcd5ae2432358b616f1c089b24b7bd653d7cc34c8f449
+AdditionalInputA.10 = 35e9c14032f0e0049906136c71cf7f1397950b4292a39d16a490959d13015df2
+AdditionalInputB.10 = cf6607735320dd4bce82aa15d157078065b7d11e72321d0d315aa253f74148dc
+Output.10 = 673e6d3abe0c79916470f06a94ea612e8ae02920c6a5edfabef861b289d378f67a0718d668a1a443326d94baa387b6299d499e0e835d2cbdcbbe3fdeba5e0032
+Entropy.11 = aad00f0ed2722074781e102b65f323fb358665f2c9e05a17756d721bae037539
+PersonalisationString.11 = 530568805986e60d9e966bf20df097d9c587571786c02e070fadd751ac1c88a5
+ReseedEntropy.11 = cebec2b5c7f40ddf0068a94a175f0ecdee43b6ace8e2869715f920da409b8ebf
+ReseedAdditionalInput.11 = 8cc5225079fefdcc7332d05c6d570ca614a0fa53f446d38bb71aac4b3329d2e6
+AdditionalInputA.11 = 97bd3ecbc27eebfb560ba0464dd9c21e17a9152cf8608e8a8f3a9f59089d7b2e
+AdditionalInputB.11 = a24f46c9f207efacef81096dc76cf293ddb5057746303ff6ef34fb83d1760d33
+Output.11 = f57c5d13495b101b8b0a03a9cce01d43eff7b99d87da650be3f657e90f577c0b40968dcf18114486b4b1888435f880696dc9c0286db7a41e90072d55ac8a2dc6
+Entropy.12 = 96b084a6ac523b5784b6335b1eab7d3148a05d0f8af8a5ac4ac3193d2816ffe5
+PersonalisationString.12 = 9366ab60a2634db037049bd37b3314bb3fa701f4d6c3aa3a2200d98d28cc3d6e
+ReseedEntropy.12 = bab20d66ede0001504c8bc73dd1721669eefba79f3990532d3c5437665c3299f
+ReseedAdditionalInput.12 = 4f0792a826f974bfd92aa4a09b8b51aa912e93778ad14a73790eec3a256cf44b
+AdditionalInputA.12 = 7dc521a5e506e8ec3eabcb28cf30f2e9081c29fa47e7f8893499a2a2ff8744bd
+AdditionalInputB.12 = 86d01d82e8162354aa613041cef5c02723ab4d6b41fdb5ddcb81cd81610dabdc
+Output.12 = 4d21bb5b318a2ad79fb65a7b74b1d8761b3d256b54875b7b5c57b76e3e2fb18251ddfb55093a34ed3052770224146af652d5c3e0ae348dc6a13411214e706a2e
+Entropy.13 = aa3b6a15203fdad89799697a0a6f1466d177b73231c380d08bf4fde54dd995c4
+PersonalisationString.13 = 9c174a21e90752fe8cf3185fa06a9fd063513543f17060b3eb37d8632025dbce
+ReseedEntropy.13 = 1204c8d8192528c1e7286b81168fef2a3116cf79594626ec4533aba8ffb0a568
+ReseedAdditionalInput.13 = b5a7ce555d630acf700935137d6920e31962aad939e764e565543a38c7660b14
+AdditionalInputA.13 = c1612632f8b3bdd4424aa552159912ab82a21f30064c5f6f00b9121b7b74cac7
+AdditionalInputB.13 = 7afb7b99bc9194e5da2cbea1e6c223a56c99ea62917c9b7dc62a44ccbb78f581
+Output.13 = 112dfe6325998ab03a8c56fe4e0fb45614157b2635e84c8ab8fa0e98e0d0ad0a827423098f5fa87f1038e0018efd038f385501ecc9538d7629329b81731f716d
+Entropy.14 = 85f2b83843cfca2adf4810312205e944b5ef5fa79a1e00dbda0df71be7756181
+PersonalisationString.14 = 8137d6d09a04e587be5082b85a0de6aa6581941fda24971d9dd12170e55bdc75
+ReseedEntropy.14 = 13f5f066a86c21ee11fb40776ded017f1152e9beca96602c4e6e0a1e822a9be3
+ReseedAdditionalInput.14 = b9f8abd590bbe1751f1c410a42ddf93c24e7f49a5fd4b1644820759a2aa293b1
+AdditionalInputA.14 = 2537ee73b566f7febc51963ea96691994fdb150d42db58204f95be45b4b4ae32
+AdditionalInputB.14 = 2f4dd1698f26af2a921d4f4aceda1c15ac71fff62ff7bb5ea6a993a29a8dc199
+Output.14 = f1b46b0276bbd75eec0792e9998ce83022c8ff2f00ee9947760c6b2bed3f6a19bff58a0a92093a57b5ac949cc4028fe31e2a6262125994e6e30dbb4b7faa6d4a
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 858204f27e93e872a1ce6208ef6de39868ddad55eac899ca0581b9bb697d4417
+ReseedEntropy.0 = 1e822008aecf6e67cc47f2b98b04687b121ea4036b6cabb0c36efbe15146380b
+Output.0 = 49ce84963df864aae36bec3f3ed223f95df4956c7c01b620d5f210e638659d5e1886700c04e79e579ca7c9b05454b525c2ea7348032b3ab8d91b4c47002204af
+Entropy.1 = 04ca8b70f0d95b2a9f31daa666ac57d2bf7c02fb65122ab8190c567855debab6
+ReseedEntropy.1 = 0b4093ae0f4c7fec06ecb05da516e22371dc8abd557217903bc5e319c50a0b51
+Output.1 = d7713270e7bc2221de929d9622eefe35a4285c27616e2d0ddcf65ec4e79ac518097eacf2a5ca3d207c2017ccbc3a9343587e34ca12a97afaea678bba86b65ca8
+Entropy.2 = 8226acffba923fa4632d9d52bd8263ffe608a72b65559f66e28323bce09ca28d
+ReseedEntropy.2 = f93eee497ae3f066cce46684eb30beff68e8f5738cefdbd519f9a35b2ab2a6ac
+Output.2 = 14c38f2c21740df8c2f2870cd1fc6c536c1900b3dae634c28ba955b135ebf1ac8e6302dc80f89af982653d2914dff10ec72c09f0d80c918fb5ff96bae888eed5
+Entropy.3 = 1c1db7b9c12c06582fca5304c5da9b14589f52f784e63d2fd6590e042329b950
+ReseedEntropy.3 = d4bf05755419efc283c0ec0177d15cc44a6384da6ff067f2b9ce5a19f61f082f
+Output.3 = 91cbd4ea474ed13d2db18be2cb0866160fed17f21b9828333717ccd8cea5129a407aa23d9e9c1b72eadf18ab3cb9d5c2fa0a031cbe3dbc0bb67b2dcb014b98c1
+Entropy.4 = b75e038271398c6e0aee806599c8c088ae926ee714b0e6efa250cf1ce4f9f714
+ReseedEntropy.4 = b988b167f975975b65b2e0ea2e69c50fb34e69a05bc78cc26e4095f1cf67eb21
+Output.4 = 5e1fdbc3633ebe8799f6ca4db5301aff0660ead7825cbc48194aa38770c898f7415a8a6b9307f09ccbf5fce386eab33a973cc46e59bc49ac90d5bc4a47fd3d39
+Entropy.5 = c061cf7b1804d7e79fb38532c9d0d6edebc5c4b1a47d99bfad506ab1c4e020ca
+ReseedEntropy.5 = a2e860023ba15c23215dfb317a99b23868c551fc5ecd1f9571ab9f779200de0c
+Output.5 = ca4ca61ac87f7aaee3edf69ed95afe4386c7eb0ed20cf0d6fecd89453270c1b1e7ac4facc2f73eb694e350fa12ae82b15c70e2789508d77464ff4fb91bf60fa2
+Entropy.6 = fccc1936326f01a31abaeb6182c99460dd0c923d8fbe55bdc958b128753a3c29
+ReseedEntropy.6 = dc814a96dbcdc333a94d665483b11fd07a7b5feaaa49a23ee77cca7407548254
+Output.6 = e6ba274168825d39e9be80cc6901ae41d8114502c0a10fc495626aa64974c0065eb0e753f669d174a0813aaddec0c7209d19794c9aa14c410abc13f3dd8eba3f
+Entropy.7 = a033079ade6fdeb42f91207ca48a4686d962abd65f590d0d8ec58d3ad351fe49
+ReseedEntropy.7 = 1df48c8facaaaedd6cb895c5aac7bc61b085cb29e3daf5716b55b8958278ceb0
+Output.7 = b75a092d2a9154c33042cbd8bb960ed742dc7a002c16e5e747dd58d310577dd0780d4e39fdb897ef37570250714e7468e687d572919ca94a273603464d3e91ad
+Entropy.8 = aa83d51123e9dfbdd08f8a0e1b46bff9657d07e22f4bc82c1eba649c78d21a2b
+ReseedEntropy.8 = 80fdcb159f1eb641d72da1d92740ee37a3b1f5ea7ec3695095a5679a8d673449
+Output.8 = 6c6523398f06297c9e834d102260c18014f2493b068f6583a8436fc7964e99bbc9315b7dc8015dc4e0548942b024e7c1ab5c2d3750967d7eb6a17837ae948289
+Entropy.9 = 9b237c7a8cae3912a8686e84088ac3b65890d70ed5d20f55e2168c12966bdcf4
+ReseedEntropy.9 = 5230038a3dd71a1587aa0eb559646601a796dc6947eee286da40bb6df1faecb2
+Output.9 = bd22a65b536ca99183a71452ddf6927e6bd6876125076db76134f4b52c359f4644faed46454bc2f72ebf698c86603bcc3b575cfd939cd0861073b32a0c73ecf4
+Entropy.10 = 4bf2b62635adb5d6a0133aed5f19f3368b94f9cb1adbf2ab0b144e618139e831
+ReseedEntropy.10 = 7d52bac3d0ff5f2bf78f630907222b6ce51ff431c99509beef160d327e3bc8e9
+Output.10 = 11abad1fb1325ee33231f390e95065022dea2a57e00b105078df01de3d59adb828f54ce7e9d909b9757146de17a743cc2e57ed14b8541a1a0d8f577f83d75c1a
+Entropy.11 = fdce5aeb11f925075b89f95efeeb5c0ade47c5d35f476f78f51450aa1c5d6b40
+ReseedEntropy.11 = 997384943e5593d616803726b7e80fa8dd785ab2f330b9ae26f65d70a780dbf3
+Output.11 = b3f2ecd171b6afbe1bd22cf881ba0a38d7f94b688b4237d3b6e73764854112e9c7c24d8c7e8efbfd9d903b9bceb8e675436680b482ca48ae594985ae16266740
+Entropy.12 = 2ad99598325003579bfd0cf057ca8d287194ffa0d4ade2f9ec5b7a671499a765
+ReseedEntropy.12 = 9eb02dc8bf74303c542c6da4bff72cb8a28593875a7e9ba0da73bc7b47399576
+Output.12 = 65bd86707d0276cd6f079555b8192710ab28b9eb0dcf3c1b01c2f46830477609b41e70ab364b48a89f622416c3c114ea990de74b24c67e2618d1c49f1d169eb3
+Entropy.13 = 4972641ea24232631a5d80832e98ebb1aa1856ef0899920a5b50aa06d205184a
+ReseedEntropy.13 = f5e91c154d6d0cce6b15cca44ba64b670134f6dc869d01057e20c0e027520b4c
+Output.13 = 3f8a145d9ad6ce2ab88cd863da34a3e5a3d767039769677f5c532dbeb416d39dec4c291ce50ce5377580fe97c193144d79b959f0dc342493daa819eb6012fa9f
+Entropy.14 = d083e222d8159740044707c76bd9ec4436202ac778f63646e5b1e88f21ddc13f
+ReseedEntropy.14 = b7b714550798c888a5026b0b7801c0923ae60a2858cabb6d6972d66115f40eda
+Output.14 = 227a88583bb137f082967af04c27cb464a6332720b759b435d4a7e26349f56f4bb447695c06295e838a6c86fc3867006217c94bb5cc99b3c44bfe541fc77503c
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 3f63e606dcc38fe15ccb4b988b29d39f10bddebd295e1f235baf4f079739909a
+ReseedEntropy.0 = 74f610c09fdd9498ffbd7e9569f142fdb33456c6931ff88d4acf1ffc5d42482b
+ReseedAdditionalInput.0 = 84e8796b054bd9902845528b0385a878b0f6c98a933ec378a879ad365394c8e8
+AdditionalInputA.0 = 80995e23f6664d2bb23e22310d0e40d3fdae890d64c01c3727a7576a6c3cf8e5
+AdditionalInputB.0 = 53b8abef45d02e53a63976626c60436dfdbe9a48bf5f88fc05317f636847193f
+Output.0 = 0b924de3ca2a9dcce9ae4cd09a36463ec3348eefbd531151e5531b4d2ec6cd27674f26e84240a2af9d37c79c2045d945112dafa942d3df53a0e25220e0defa3f
+Entropy.1 = 052eff35d05174155436d83b50dfc0bc45ef81513cbb3ee63c48e8dc3bbc6d74
+ReseedEntropy.1 = 2856a0fb49447b2858df74d281ffae23fb94f040f7633aa4c8478445042e2ac4
+ReseedAdditionalInput.1 = bcd4ab136b67e75ed0409aa2caca94268b97a268f96a291e38738bd7b3b39d56
+AdditionalInputA.1 = 087d248961890b84028efe6a0797bc21e97a4dfcce5f3c362f029a629fd44c4f
+AdditionalInputB.1 = dd3f9c56d6feebe93ce9ada80826377997c5b63b7a3a0035bee2b69622d92ddc
+Output.1 = e37740d3de49581f9a1bc8faa1956d9e57c87501d9d7d18c7b9e3a141f3f1c1def05f5f36c601807736eb92d89a72cbe01596f2152610fa509fe75f9ab000b6d
+Entropy.2 = cc834e097c3dd4c62c1b938d663ff18b20bd12552572b327d240017c52d28f18
+ReseedEntropy.2 = 15c1e0f0273757bf18ab0f425067a7f3ea3287e067d8614daf4d667868f8ff6e
+ReseedAdditionalInput.2 = 5fa4e79ca20ecc7cbc6b11263f7a07feae7efaceb73abab566294c3f784d8362
+AdditionalInputA.2 = 3e882f8b3504a1e0ded406af62be3ba16299914978e27d283409f79bc6b1407d
+AdditionalInputB.2 = 32176555bcbb433f4f99d3709c8f9d113e4e84df1dd68d93953fb323172973f2
+Output.2 = 74b647e21d40705b7d8417f8ec754340c2027f53a397c5cb1bad3e3b6342bb6533883d68833c0f0f666693ae66decc9ce576196bca208299142cd22777974767
+Entropy.3 = c8109d211029e9186785b94caa1f04bc429be4ec448df6d376f91c61c3632dac
+ReseedEntropy.3 = 48c027b9287eecb853ddb7781a4c6008d031b12071aa0f36000b76ed693cf6a0
+ReseedAdditionalInput.3 = d3d27fa525d4f70fae0d8675a9a6bf17ff2e317dafbd62c77ec999cfe0b1f1f7
+AdditionalInputA.3 = 708b9d5c5b962993e5ef1edf4bbba38ae71b3fd31bd7670d7236b7b0de9805f1
+AdditionalInputB.3 = fb9ddf9d0483cee378b86aba5a3bd016108019c07e5f2c85c0d980ced905d7a2
+Output.3 = cf69e0ecad27c66e1ec094495ba30d7f3a3e2da5766c4dbaa8217ebeab77fa4d88fa9c67314ba607647095fa33ad318ba66111167b2e8879d21cc7e9b167767a
+Entropy.4 = dc36b20493ef9407528aadd6b7b37fd60045f6697345a269b20dd9cb0651e630
+ReseedEntropy.4 = 6dbc7f8a60a3c4505f1224f84e2942571fe9635e6bd3a98e677647d73f454780
+ReseedAdditionalInput.4 = 480972b4393f0041e04b19354098758599158813cd2a8ed71b05746bfd286766
+AdditionalInputA.4 = c0972b8bd5407fb7adac4d95529209efb59ad9dc4bbff7293c1e6e41f7f5ef9f
+AdditionalInputB.4 = 325786e4fcbacc9ba6504b818749cd0178d4c3a78e178ec7b22d27aa06710183
+Output.4 = bda1f7d3861ebfc5d6ee4d4e94f3f4ba97f18e2c5af7667265cc3203f002a0f79e7b510cde5310b3592c129ae7105ab975add825ce78d346bf9563aa50139c13
+Entropy.5 = aa185b6366149e18ab0b822c17b52ce9940cc1c6067eff3ce1aa9a79891935d7
+ReseedEntropy.5 = 104731f46893aa96e58f091f870c25015d917dce7b6e177996838353dc0c324c
+ReseedAdditionalInput.5 = c0ef974fe0adad82088ac644bc702db609caf2a8f57861a6b31c9cf65c194288
+AdditionalInputA.5 = a7078425ecb87e04bbda85af2aa8c644525fc09109aeafb1d5dc95f163ebfce3
+AdditionalInputB.5 = 84764f406a50aea871a532686507c8288eac5edf951dfc7794c671e86c1f3d91
+Output.5 = 7e8cc16de3e3b780fd516514e0454003f629388f6a8538f36dfae94bdb856329dceed1cdbc9724b09efa3f3ba17b7236d97e95cfe4b33782a2de73617a0d1d84
+Entropy.6 = fdc6958a4f3d101fa99ecf6ac602bfa676a1e1fd56d5acf4e533996db17463bf
+ReseedEntropy.6 = c5fb57990a544e365e94318be025b8001da4653f309961bcbf58e61a337db412
+ReseedAdditionalInput.6 = 390ddd2fc171afa0c519cf1292331023ca3dc93f6371e322d10bcd4b9b4286d5
+AdditionalInputA.6 = 3ba26a9fe0569fa21dfcc8237d7d9ee10db38ad7f728223ab64294df6a83cabf
+AdditionalInputB.6 = 92fbb9e3c25c5e6ef96d4a349f176a91dc9f3856c36f13c4584aead0c9231f7c
+Output.6 = eae47563257a2c6b73059e3252ff6011f6c748ffdc0a3029ad4c1b7b6a27797beccbda1efe0d9764a5910a171f351571190b2ee11ba904a4545317efc9436c61
+Entropy.7 = 8feba337af2225a6883bed91edb2614b905d3c240de1663bdc2315ad724e76a8
+ReseedEntropy.7 = 4583d0af8a4c0ba141dca8501b36b04066ac80f6abec11fd59d8d0dbee809deb
+ReseedAdditionalInput.7 = 8ced0fef5786413d2a7e5ab3c1836caa1e147efc424c4f3653bbd18bcedf1ef8
+AdditionalInputA.7 = cf5ba322477f5ab637e110bbaf784f05aaf8bc0980769d16a77f69fc90b06607
+AdditionalInputB.7 = c30f6a2d12184bfde9601ba26183ed8e0d81d7929c72101c5fef56b0da7238df
+Output.7 = 4d3de30cf02e8ec2e04f52f3b74d10618095a927feb0b1f1a04e652d31ed4ca2a480a74cfeb3cb2aff9cfad53aaf9b95fb1ef5018331ebf73205ac98889fdf02
+Entropy.8 = 7946a11e2752a48b28f0a3bb229b41aa2e380e3754276e438916babfff3f0bbe
+ReseedEntropy.8 = becd22f30860a5125a28454f9b68c6839c7440c65bca8b8f537be5fc0aace55b
+ReseedAdditionalInput.8 = 48a9b51e852c1e3352e4e15e8a0aff7576c7680f1a6ace48440017a3b0a628cf
+AdditionalInputA.8 = 0786fa8c78a4265988c7e8ec14c259c31e103f7931c09150e96171a2efe3ae09
+AdditionalInputB.8 = 54e4a8f62923597de4cdd6567e2d7fceabf5aff88b4adb9ae272e4c5d5fdbe28
+Output.8 = fa1211a44ec4966a63904b03cda2e268f84a0091a2a81b87cc695b0d05bba8af18ee292f46e1daf15dadd3ef12d9d79cdf32a0e73c9a6f57b2ac14dbc3cdaf37
+Entropy.9 = e745d15074dd1e53163e1a0fb8ce15f930d800104aef4bc106fcb8af1508cabd
+ReseedEntropy.9 = 39e01385b2d4b97d5a3382f28d02a4bbf41eab3110869673e5c37f4d081686b3
+ReseedAdditionalInput.9 = 91efc41991229ddabeb0e0cd945b6cecef92d7456b22a9e79402961610c057a1
+AdditionalInputA.9 = c819e391e1d78f881d7ac779cde2e8d353c2f8e75255b8052ef5fc336ad81565
+AdditionalInputB.9 = f0cfbb7628208dc382e780df02371e1c61a328b33d955497509ed4d3f3172caf
+Output.9 = eb8ac868f47c41eeb1f7136514a688395b862cc07c269c3ceebfc9a69e918ea83e30c98168e27686ae3ab153f9b5ac5a456b579670fb4af51b34c71d73cc36cf
+Entropy.10 = ac24190f833944f8aeed0395f75abfd08536876829934519214f37204820bd8c
+ReseedEntropy.10 = c7e68f6c90878dff52fcd52378b7155c0868fd8493adcf9de7da7547db8cbbe8
+ReseedAdditionalInput.10 = 6eb214cc648ad0aaf9e36db87e698c3acb1f794d2ce46472b515ca386fc3aaed
+AdditionalInputA.10 = 18ea816f906b9b642db0a1def319b71e709925a6ff54a2512f45af1b9a95651e
+AdditionalInputB.10 = 143e682a7d2f14a925822bf0d8e51d5205c41acec4a48fec9841081c6f56aa5b
+Output.10 = c8c2d6091c27965198b30027d21c6e267a0073fe94b093675353185f77b89c02074593d8fc5bc233e59cdbef80b93361bd8b5038e0b24c8a963ab5952c87d6bc
+Entropy.11 = b8f9e9975ca01d4b55738ba5991e0b8ce6c48f9e5e24e2080c9426fa46bffc7a
+ReseedEntropy.11 = b0144ab4b9edabf8bc3167974d42accb3c37730429519b6569ca7e7f68b51b31
+ReseedAdditionalInput.11 = 18c9af5d8747a55234822376b211fd2fc0c5c139cd53d3f930ea4fd800233388
+AdditionalInputA.11 = d691c58e10c6b37bcab6f04256c4c1eae2daae79afb629dfeaab6cd061f0db95
+AdditionalInputB.11 = 2b65f6d59ea4a34c1e7ea45eca57b9725e974d3c444da5552f01fa3de9ef5936
+Output.11 = 1e3c830fbe43894c4f3c4c65f7e668e68c5041f20cb5b805605e0c50cb4516c0ef627bbe364c29f98ea9edd5483f789402ce27fb1780bacf069ba8231fe1ba7f
+Entropy.12 = d8075b36c25f8212a48d55b8b01028b2053532a319e89c644331f2b61d6902e2
+ReseedEntropy.12 = b3909a055a25d07978b0b4201b9a84b2d7f2a991e49e882d858967d2061d530c
+ReseedAdditionalInput.12 = 8cae69cb63fd81f056e986cc31bddd01e4a913934c4d6a348bc40480000fd19e
+AdditionalInputA.12 = a9f632eb7216ca912c9227fe24d1bd38b95ab8ff939464528b21b469273c9370
+AdditionalInputB.12 = c188c571b1a7080817d415c3e7d9e57cf2426255e25a3276537fd4c9b5257203
+Output.12 = b8116da055983b12d562fae9cc475bb94f8808bd8606c9fa025562ad898fb56d02607a5a88f9bbf4efc4089da85405d731e800d36138be4e01c8aacc79c3c90d
+Entropy.13 = 9fb3e488f3219da51d66dd6d741f61c1796277ce5035e7221182fbff6c920be5
+ReseedEntropy.13 = 806dc8f988ecfcf63da63c0cb2130e11c27331426bc9c82cfc1adef5b9b79ff1
+ReseedAdditionalInput.13 = 463d3ff4b022a27cb537c4d93a00127a22f0a8e6cf11b417b11290aa4c766694
+AdditionalInputA.13 = 293e26622146249766555b00fd6ae37ba81c7db75bf9d01eda27d43705420839
+AdditionalInputB.13 = 1099b788a1f5a3a8bdea7f647482337d45149f362ebb077dba240339e32c7804
+Output.13 = ea0b2fb34a68013a546824b42678dbb7b772f85e2ada34e174770aadd105a643e6aa58d53aaeb92cfae7fb5b312ea6b1d31eee598df146a3f292763b05afaa63
+Entropy.14 = 52da7e177fcaeda27f0a5bcbbc0873b9eaa2d33bfaa25cbdbc04cd58e36ab4d2
+ReseedEntropy.14 = 1fbea42fcecb3073fe2580c22ce64c87cd239943d41bc75facaedd3939a9a0ce
+ReseedAdditionalInput.14 = 281ead1b2694fc143b2e14897bd03beab954e3243f58ac1c0919fbace767a5e3
+AdditionalInputA.14 = ee0d3e9c178d53f9957ec0877ac719694197e8bdffedf8fe59c57a0cf6a8ff84
+AdditionalInputB.14 = 2545d30f8b974a21fa54146a14a566bc0156a015bdde60f3f2b9e186f6181f5d
+Output.14 = 7cd2003034f235e209cb0d73ab442234016a04c830752721998146c2f6f27d92300b47fa3ee72b46378092feb175583894b6f7004362f724ef145fe03c941d42
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 8764bf9c12ff37e23afe28a45c4304c05d54654ba14cf58d7ae371347e1e7035
+PersonalisationString.0 = a6cfbdd05eee36a3d101c3d0301cb6ff21687d9f89cfc860d05dfa1a957f56bd
+ReseedEntropy.0 = 190933f07a1d448dab650716a1b30714cada5cd0fbc43b9d2dde791c4ad8522d
+Output.0 = 5cbd9b5cf1883330b30b1da917e62d6682115f0e9752396c32c597b90a9572a7e9c61389f5ec979a72f71fe03d0cd2f34b3d9170cc961a7942c652ec42651bd3
+Entropy.1 = df7bb7217c72c3f9661bce37e118da03f9f68b63df6266107e87cd6b1617ff74
+PersonalisationString.1 = d860af517e2b096f094bd900432ec6ad0da9ee6eb5a14a9dbdf32bc9fd6bca3c
+ReseedEntropy.1 = 414871a9c330879392797336952453f3cb5fb75218bfe724606b1ae7c107d384
+Output.1 = 00660635146287ae14dd6e87fee44088ed4ddaeebb246685ed95c3bcabc9e72aaa23b27d7462e32ae78f171a739f8b30409a50cedbca39a4a89effac38459751
+Entropy.2 = 16d648e767b9d7cf6367b9dc19e2d0b3be204b70268869ff0728b9ec2132e2af
+PersonalisationString.2 = 2d81204a429950556f894a219e455ae8016a8c3833abe053c1c18f53c936c899
+ReseedEntropy.2 = a4bb15be3145149aead127adf382b92cddd67c898dd95ea8b282a4bc83f9fbfc
+Output.2 = 012309a4c79dbc7b546d550cf548873ee17e4371896da29b9b93deae14d8a8941cb3ca3bcc47e703eaff031e135ca46e22c917e0ab31685a7d8434ca44ff4c70
+Entropy.3 = dbdda4f6c6f01ace438777dd951cf92ad5148f1f0df640b03793ee9af8829c05
+PersonalisationString.3 = af641ba2c2d8ce09f426455a84d32d27143a7d83f33e22276344e6cd11f68694
+ReseedEntropy.3 = da44e23d1b6115032fd316cdad47524b15f9e348f16081a626121f68ac213b7e
+Output.3 = 4b2c9c7ffd588b13df415c55c1fda15c1efe22345f7d72710b0cce2e5ca5e5dda403d86329591e8a5abd58ac9faa09933ff388c3deeb8ec8efb5cada3c66ce8f
+Entropy.4 = 2bacf69bc8b5c1ba18a627d2e83a98de11c853a3375e3c22ed8af9d01c91eaa0
+PersonalisationString.4 = cdc30e356412c308239af2962ceac825cb595c60eff0bebb74ed52e2c88036d0
+ReseedEntropy.4 = d5f71f709e0e271ceb6a45eb9ca6b75f6b17be227f2bf5cb6d47755ff40e5ae3
+Output.4 = f3f8b8da42b0eb2d1e5a16b583e7c02310a9aaa97ac31f4681268508a754f5d3d8d158b45c54d56a2cb85c6382a3dce97515dccf0c5234a6a3696300023254ca
+Entropy.5 = bdb272eb566367c8e030e8b11470364189204067ab3ee6f2f54c74617ef373ec
+PersonalisationString.5 = a9583561860552ad92617621f0c015bd09b6c03c5e24a6f0fe9263aef5d81de0
+ReseedEntropy.5 = 6d024efff1084fea38a264db2aa1f2780df3c729c12b34479026d275efec97ee
+Output.5 = 5070982851cdd827722bac4b56e6385a94bacd3ed3a0dc23033bf60fbb71c7cba31f7fc0399d17f241304946040b527bdcf86315ac890e43766351ddb9ba9eb4
+Entropy.6 = 8e3d85c91def9ab08af1aee1db87b1db7b8c3dbf493b8b625e6c87ee4a05e177
+PersonalisationString.6 = 3bc3d52ca8086f8cb375df487b41ef1d5bef5e4b01058ceefbc2a8e8b682694a
+ReseedEntropy.6 = 9dbf4c8d187c9972d0d226ce2bd2098d706602e5d8fe638797aa969ee4b6b473
+Output.6 = e0ce2504b19cdf7e7d4d509b264aade83448c048c34773b69eb14b71b0b1a8899bdac83524d5f7433dfc65a16419f81ba418a4ab3de0fec50757a41a4d009ac1
+Entropy.7 = b55be084873894579cf1da2d863a4c36e15005065b64570578b1f460e9f7a5c7
+PersonalisationString.7 = d30dd74bbff714b90a12e421e38e75ffa809b0e9c8692a4a0bb9ffc6ece1138f
+ReseedEntropy.7 = 264b4bae249e78b626747149dd6dd5d239608f8c10e60ee840e0bc0ab6b914eb
+Output.7 = d2d4a4e33ff5951bc3457b4be2a8a8cb1c7d4657d66675824bc0e42ce6a1b9e04f0f27e67daf6bbb11cc9e80913476b6d1db788796dc60ea7d8759c2e1603a85
+Entropy.8 = 7ba15c76d5ec7c8e349fb3683b2b396c613bbf6959fb49abe3f2abc346937ba1
+PersonalisationString.8 = c4ce04342c7c74316eb1e11c5a103009a3f6ce1fa27007d54dd145574f71ef8b
+ReseedEntropy.8 = 661bb5ed9320b4b82fed066b652d82893cecf2d691026ad6f1b45e0b4b57caf5
+Output.8 = 0bf6e528fcc8589da492dec057b4de8363483f596f7bf8ea8bab5a5822a0d602125adca68193ee5e2c642c5ea894f9cda982cfbb416c9e439edea5ec2b0429d5
+Entropy.9 = 7f07c82957fc850090abb4e06feae9a6eb9e90517f7e024f7bb78440c481b10a
+PersonalisationString.9 = 449bca7c348144e07b3ec33c33cf9977b11be31afc491e0a09a532a167fcee4a
+ReseedEntropy.9 = 5017d758f3c9085b9d5585fcf558bd3515feaba49cd0491efb2024c08b74e9f4
+Output.9 = b6d74bbd2cbe4de636af1ef12078580e4e72855d7ffe433312daaded3c817f77b6c403d94094bff3c0edb1232d5962f747e5cab2dec329f19b32ee1db6a678b1
+Entropy.10 = 5415a736a189b580b62faff818045a98104d31907222e2d4bb76452e69ec9348
+PersonalisationString.10 = a9d3eb2f85119f6252fad8ac325ca15fcc463ee51fb0b57c1d7246c8ba28eddd
+ReseedEntropy.10 = 1108f987ff50087cb583d210d2cc07c658f52928332fad8f2ca217b43838654e
+Output.10 = e92d7cbcb1eabb42c929acf31f7389230aafa8e0242816deaad39e16ec740b1aaeaa714da20738b61ed2bce19ed94363df69e198bed55c1e96bb884db567c8c6
+Entropy.11 = 3ef0b09ecf9d32508bb3d312044ec11bc2cbff65b7da5bb0888965854bb7a319
+PersonalisationString.11 = 3cf0d23c97c3be617faabb44daae96c4612c6819e652a5264d7980991a5d2a91
+ReseedEntropy.11 = c3236b2a1ee78919b2103b0ef0c52c8653152278dba23eeff3a70650b66be15d
+Output.11 = 7af74e3d8f8a6fb42e2e3774b30cbf16794fc35bd330f2cd785a0dc64e8fc835113b59491b113fafed0e60ca0cd0b00b220b5c6d7350a191b5d3188a74c5952b
+Entropy.12 = 9dac11b1825b546c07297fce1cdebfad39ef2700336031097dfa861596d49015
+PersonalisationString.12 = 373cff2b149ba7cbb0f7ab5a8c57e140ca5320f7b5ddbf9e8d566c5643faba71
+ReseedEntropy.12 = dcb204c7b0592f2f38a5818aa0e1dcc2c82553874098bce40104888829d76afd
+Output.12 = e3f88260a364d673e89f8a67141aca4f0a4e9fd733163e84ab7ba940e4f0ca41b090adb393dc446a0dc04f11377e1af41dbc07454db8e9577796094692e4e595
+Entropy.13 = 5cf5a31aac56984453c0116380a146227f14f00d85035580e6e3ca73140030ab
+PersonalisationString.13 = 52df315f006ab6ae7242bd0dcefd9f0e7e6f18b2f57b804eaacf90075f3d394f
+ReseedEntropy.13 = 81d13e9cda012d2535a1df99af72f643caffb3776b977a3d3f81405945470986
+Output.13 = c50eda2da368f0908c9c1ffe35e75f02e2b864a31a529e6204ad282a3a95a4bf50bdae43837789f284f3eccbf342b1cf9d35af47a3597cba1106933e3769d290
+Entropy.14 = c8a4e73942019fa4aee88e012140e565b5ed9eb8345a37bd0dd50a58c0c3bb7d
+PersonalisationString.14 = 41b9b8e2d9a7945ffcf2631bf7d668648993c0f4859ea22de4279c02a739ba2f
+ReseedEntropy.14 = cecd9d0ac5cb7ea4cda4566b873bcefc2db068ee41774a6861a21bc69cbe1814
+Output.14 = 9d7209b625d5df31a949fbf15bf6e4515e42e6eb03909dd6d7ff4e001a8408c704901ca2b2121c079e36c28aed7a786aa356b6f3c75b87d4c78a2d06371de356
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 7727b11358cfa12d2209d9d3d6942c62296f681593a5fc7d15d92442f5ec757e
+PersonalisationString.0 = c1d280fc9cedadb94864122e873989d7080a0a34c625204f04e714160c1cd962
+ReseedEntropy.0 = eb851ca6647cff70d912d1e760abdb6b75281e3cfb21693fea83065901301411
+ReseedAdditionalInput.0 = 28ccec628ac9fd74251bdcfae5e3b36305d58d45f28da7a71eb2aa710b997179
+AdditionalInputA.0 = 794578a679ba82f1ce61109726538c0e8dc94089f01ee81e88dab2752986a5a8
+AdditionalInputB.0 = bfd05681f9917e999efe25c19a943649880a7a7981915434f5d17298426a236b
+Output.0 = 1aab46365a150bd2281fa49555301016bcd2265d19b8fb83deecc63ab32503ce6b696e157640f7878a74a16dd87ce729947a2563abce4dc9d53e536bf6f93cd5
+Entropy.1 = 802ecb747f0113097861df03de1811a354d9b18ba98f2caff4283f3305ca9d82
+PersonalisationString.1 = 38b390f8052cd890549f7e5e973e318ec5cbbd022928025cf2136e21d9b064a2
+ReseedEntropy.1 = 5959aa5d35487ed462dfc3d9816f63da1726c5ab65d8f1b672991ad1fe8a3c57
+ReseedAdditionalInput.1 = 57628dc4f1b48c9d8e2484b061cd2fc8b29ee1394c3f7074ac0b0149b998e07d
+AdditionalInputA.1 = afcf945bf208a190ff1cf3a3d3554dca0da1c5bf21c96fc283677de19722e678
+AdditionalInputB.1 = 22c94ab504a6fa3d00ce685db6c26529494f2e86110f8b4ef3550e62a9385060
+Output.1 = 694e8b4bb5607e89423c10b271732ba4014a8a21d1e695c6545792ee3077b9ce90da162ac75bb5152f7bf3fa07ba9dfd7a55077e693822da1134b7c81fb88ccc
+Entropy.2 = 292455cb526e838c2ae91b2e16e081eb63a1c04669fdddcdcf80284c35322dbe
+PersonalisationString.2 = 1fa36feb20f408803e68f6895e618432536f5ebe1d9dbd72804f3ea9720e274b
+ReseedEntropy.2 = 59b063f47ef696dd244377d8e22bbf035cf50546ac0e7ba76e3d18cb78ee68cd
+ReseedAdditionalInput.2 = 2d5f7401fcc7d7bf6bf861be0887ebb776adebcc118dc85015b84c663322f6c6
+AdditionalInputA.2 = 596c6dde7b82b4850bc73b340b34d68983d56f3aa859211ccb92e67577dd735d
+AdditionalInputB.2 = 858da066934d2a5215ecf3d2e890e73d7f389c75328007b6cd91e63fec5f5e0c
+Output.2 = 8d30c1e9656b81c3c4766b24550959164ae8c6a3f63aa61334a637f34da939a847b44d6ac038109c6573f7e7b516f78b1c9dd6598d118c6815d8ea2c5f892348
+Entropy.3 = 7173a8ab13a1b382f73549a97a9cb1ec2b648dabfa0c7e54b7cc6f51c4aceb5f
+PersonalisationString.3 = 9246dcd48383d0f5847de85dcf0e1a0bd36b8d8e84cee7d37a608be9a2dd2d1f
+ReseedEntropy.3 = fe80c588f5754b98986ddb47787ab6c06731c9c5b7ea01828021ee964b260d1a
+ReseedAdditionalInput.3 = 8202b460b0dc4906673e883cd28d8eb7cf303c8ed31e37692b0f5a5fcf687ea5
+AdditionalInputA.3 = 204dd41d44adf8eb97758bc64effa32f4266174686ebc02bb6bcb93d5003c2f2
+AdditionalInputB.3 = ddf6b64b8bcb959b9eb344916170a9aea9e947d3342acc3de8e47ba9a4e89bbc
+Output.3 = 52983b6e7c3fc91e7ec9877830ad1d3c67bcd80b061e2c50d8289f26f5915f9b3e201482b2faa9802a5a4158e2475988d469804a529aca9d41f10c5a7f30077f
+Entropy.4 = 500d45ce65b0fe2ad5f9b962c064b0950ee95b09d4d7d7952801ed0959782b9d
+PersonalisationString.4 = 9f2337bab31d989a8eddcb3c05753f228bff22ffed2b729d81a093e90a4c21b8
+ReseedEntropy.4 = 3bee44669e4e9be01a2795ef64ded28f9c43024f9bcbc7dc033a76466fe60747
+ReseedAdditionalInput.4 = 1a7a245ce2b8b00a57629cab9daeaae8a2e31590bc3fd3ba1838df54ce019a29
+AdditionalInputA.4 = b5f190c98913c007d41a310f45ecb9f670ac058458ec02ab5ac562f7948450ef
+AdditionalInputB.4 = 88381987d3bad583e08db2847a6e877279c51fa3b1a7e1a9e859e2c4f423ec21
+Output.4 = fff04be4af791adf61faefe2bb7145fe2f0238de8add473f7fcc7f9d820394f7e0ee92d17807586cde4b11a50968b0ef7a11db1ee357cccced69b1c4b01ecd53
+Entropy.5 = 0e1a749cdf3855ff8ca65109b5c41c519fa7493432d6bbc1f2fc085753a4f30d
+PersonalisationString.5 = 14bca93ce8ec9426a16a7595dcf0ba0c69c7fd76a75a1ca865f53ad2fabb3fdd
+ReseedEntropy.5 = 77bdbe9ff408eae55355ebaaf4779bdd533971ebd59b9b7db5eec17aa4078fae
+ReseedAdditionalInput.5 = 1d89cbd3239f8f6a0f20c1c13722ccf1d5ac10b636267670b4762e0dcf9599eb
+AdditionalInputA.5 = 6ca4a4c5574e96a12ac740156d74ab5ef47c87addfe793a97a563241770ac0ab
+AdditionalInputB.5 = 926c3767dd1e75ad60ef12dfdfddd47638ac682548764be257618ce157834a52
+Output.5 = 7140e4698ccc789d8a91324fe3355949930d00a7e582595110547f3e284a2c087ec32751852b8226294cf1d1a048fd9480d4e529e0ba1781d4b12120d4448d19
+Entropy.6 = f55dd29aa487d883935a66d4aba24bf1171746aa6830b6c102a039354c69048c
+PersonalisationString.6 = 556ec242e552643f3bbace99952e5e2f123e5b55a7fde5c75075050c689250cd
+ReseedEntropy.6 = ec61bfb07fe2d30b8f7bf9e39c7beb0de9671932264fc817a4249f848c641d40
+ReseedAdditionalInput.6 = 16f693db6024b70f0c9955416cfeb07abe411f64fe670495e65699879c1d751b
+AdditionalInputA.6 = f6775b3d1377e8f016a44bbd53dfb7c54b200f19a406bbf46cf019672bb100b5
+AdditionalInputB.6 = 00941dc2cd41caf081813b440fd90c0d1fbbe671b851b7e747df89878df5611e
+Output.6 = dfd9190ed322a84aa30bff07db07b785d6633c39f8ef12fae0e2a45bc38ec10984a86d39e96f81fd7dda323122c6a2f8b5ff1dd0c95c8b92a086a8ed79fe900b
+Entropy.7 = 768273dae788829ee9d1c0b4a5871d878a77060925851def18952250911d59f3
+PersonalisationString.7 = 5b9f968df5d297a1863d57c8e122a0acb23d4d53ef8c465046323082075de4c6
+ReseedEntropy.7 = fe47c7ea3c95d120613a5784616b68ae2530fad5dc160419deed6e3dc9a1bfe1
+ReseedAdditionalInput.7 = af65c79eb9a5f86af7c0960d5918dca95d0c5738f5174ba911043e328d043d62
+AdditionalInputA.7 = cfbcb209a5bd18bd07225358d0c3c1036a2b20d2e715bcd42646d972fc2884ac
+AdditionalInputB.7 = bafbe82a935ed03c828f55fea7541fcd36de29e7dca105d09585516d9bf91731
+Output.7 = 20ba4546cfd502771632133bf9fb59a5e13db5d2f4d0b3777e1141ecf410aff1b4347a29bcc2d68ad463291c9f499a06ed0b7951bd411e92e1b9ce403bd06c5d
+Entropy.8 = 33636a4dcb87c501a99f119d968a3182f6786b3d23cadbd50ceedf9c9dc8da84
+PersonalisationString.8 = f590eaf73319ec9e907f9725b51a166fe8a8dc6d2384ee72bf7f55f8378c29e8
+ReseedEntropy.8 = f9a6a63cf94149b85f892c8c59fe20e78084c2811316b3d943219d2ce11632e5
+ReseedAdditionalInput.8 = dadd67a3fe255f488fdce41b28bf74ccd6bf49a7f85d528875bc5e6be559d413
+AdditionalInputA.8 = 33d634cee045453b13e1b189355c0c993967805169bef72be50737e322f67cc4
+AdditionalInputB.8 = 4e528a7193016c54a0b1041cf26cbce963643481998ea1f884b463372358e5b2
+Output.8 = c00707ab1472cfc3ee0aed1b8d866b909c158b272052a75f9fa96e248fd45449007d03f0e14d2e5d544c3796261659e3072e7c09583652e4bc5bd7d9b8acc1bd
+Entropy.9 = 5e0ce9db9e5197c939bb857b6db496c23f3f4ff41c27ae9d9d910ba29d77ee81
+PersonalisationString.9 = 0190e7ae551e04b686e7ec5fe95dbdee68eabb5b53ba9a66316c111e8bc9bbf6
+ReseedEntropy.9 = 016a84a13aa8e01d8604964edd7fcf5fcd19d6e3b1763a19518ed1e96d32d9d0
+ReseedAdditionalInput.9 = 96245e8d1f8fe068a74b48a47437b3cd02b94505cdcc7e5a6779ddfc82eee416
+AdditionalInputA.9 = 092b6e51727f4b8d143c5a67074497a638e964a60a9161fb89d9e2d3583ece4f
+AdditionalInputB.9 = 9a869687730e0a99d0bde40c96a3648524d35ff2f7e56b4ccbd6f4bc68600eeb
+Output.9 = 8f4ccc8734985dd7d84ee9ee14c5223fba16276f4455832cb10f84e4a56f7d328539f3a3f7170c8468a434f006f374fcf6dec271a9b482703b25663edc33e113
+Entropy.10 = ac96567a9bbb676e07461a1e50f65df73d3ba703b5ee0f105b03f2f9213bde26
+PersonalisationString.10 = f2821d6b19a18d9b95b37f9eb476eb12fa77fde731b8d7f7e7265208f2d2048a
+ReseedEntropy.10 = 74d5dba9957dc740afa01993575fa9be6bbd892e252047ad072f51396befd58f
+ReseedAdditionalInput.10 = 9c2e8bd634f28c81390e0154ebf89eebb61a8f42b3156ea5686398ab0bbca81c
+AdditionalInputA.10 = 9bd81cb79671a3d89e050f1f4c0e7dfdcfc1e2bd47d19ad7d7fdcb2b1436a8d4
+AdditionalInputB.10 = 93b5ad9a6c08d3b789f09e9a567a227f94f45376f68c82e75e804a78f675fe32
+Output.10 = d31d8e04a4c12abacd4457fa45504e9d7e53e96f72ce432be5616b3983a13b3bd2bec2df3d1a41bef298e9d821207359a501ea904ba2cad948e112064c4a8018
+Entropy.11 = 5e9be43d43aeeff19a56740ad95dcd3cd4326aafe0fb4a160944f7d79983795e
+PersonalisationString.11 = e56d5450d6d0d3bd452affce743c42154a4a0324d796570f574e28487af43fdf
+ReseedEntropy.11 = 1c45cdf55aaa027653b2e33b7762f68d29b5e348feea04c596f7c8660f7b36a6
+ReseedAdditionalInput.11 = f57c21bc4a2a37f5ace9c6192cb249a8ff16e3e0611f030c97d13e730d84edd7
+AdditionalInputA.11 = e5eb6778c2bbab077d1fc0f42a42e463ecf06d2ad604b5a63e1ebc92d0e2df75
+AdditionalInputB.11 = a41d7324b7ba5c9d098dbda89c25a237b032cbb3084a687b7e2c3330cc09e5a2
+Output.11 = 295e750d3b11d4fb018c3de8e49a2405c71c3058f101055d36efc5d4c5183b3277d98f0aab8b4d3b0b9dd99abcfb95bcb3506ad1da442c39dac9a13f1bbc15fe
+Entropy.12 = 478d325a9dccd87e747d4964329f257b7c3f589d9178367dc4c27adf2959b394
+PersonalisationString.12 = 683d80babc93b6980bfc228fae25ac1f2dd6edb7b19ee5359a62464aece4e553
+ReseedEntropy.12 = 6e85c183738f60992ca59ef3736240ca36ca8791349664184e5dfa8dcc8c0b0f
+ReseedAdditionalInput.12 = 53a54324b57b2040b939c149308ed2ff39f5dca619a738b000f8e35618291361
+AdditionalInputA.12 = 2ad23c2e673e0b454960274b434fe5fdaef871d085634babcbad0f5b0371042c
+AdditionalInputB.12 = cc8b6b86c62eb3199c492190655725880350acc8253769b526b719140e448084
+Output.12 = 3542c619f14e2392d92f0b7597d7d031da62bc28373fbf9f0747e97f739249355721476cbca5be8ebdb4e9e568d863f3b2d6ba1fc23d359737a92a1bdd9e5a6a
+Entropy.13 = 67fec77218499415aa7de0a1be221589b513fd8c578d6db9d48ff855b0aa1a22
+PersonalisationString.13 = 989af82f6f41fb5ea5141fef7d89cfee1b5c3c6b9d4105dcdcc9a8f103dadffa
+ReseedEntropy.13 = d97dcf93285f4b67db6d7d5faaf2d4b0f9ad660dbd260db7c4d3c3c3d3a59a19
+ReseedAdditionalInput.13 = 82623edc2503970832d9566eb342e1db9b8a0a2fdf847f21e38313b2b9ef8432
+AdditionalInputA.13 = 4ec19eb00095439d878bdc9ae25430cd8a701a707792c9aecce717ea3cfc8be6
+AdditionalInputB.13 = e5c53c5d4d9843da5cee1c200d91c71bd049499c0158b93029f0f7c8832cfb25
+Output.13 = a7a8ee50454eae4ff8a9bf71d519d09c39e14c0b467206d3a85d92f504b3305999d40eae7282642fb523bb2035e4502a1bdbdf4f2096e027b07376e6b75c61e8
+Entropy.14 = b01a63e1eb4ecf7eea9d078e6e90855022da743938848af57897bbbcd63396d9
+PersonalisationString.14 = 32dba1b9981b32074efa88dc3eb2de1640f997b9f4b659f5c518b6079098eee3
+ReseedEntropy.14 = d1deecd928c4269ecabc75599d76864d9990dbac390ec85af30b710d64b2b95e
+ReseedAdditionalInput.14 = f9381950a124bc44ef8118bcd42b6bd1c66f60c99ef5479b04cc1baeae4ce950
+AdditionalInputA.14 = adc0707f3a06e767ea80f0882ebc015b79f0228547d22eb5a635b244a7d1c657
+AdditionalInputB.14 = 8372a1277f0eb84cadd53df4a6cc619cfca029f84d9bea48beca8cc8060528cc
+Output.14 = 86cde22dae3a1af947d76cd15e4df0c83a11769d34610d1991945350acd4f0aaef9ef70b5bbd57fab74fac6be8cbc028b9bab63aa5de62d9f1f95d949e9d093e
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 6eb2e533b902545c31cdd09a062cf59346594f34b563b090dfbd632aeadbd191
+ReseedEntropy.0 = 2cd1cec6242ac25e7518b98da8a22bd13acfaf5fa45fee6021ba283926de1922
+Output.0 = ba5cab62fddf8c6ed16733c5bf0e39336c189d80a9669043ac892cea63d7e70d390e91741840bf7ee14c078cbbe97d114992ae781d9966a5f6c704e5c01811b5
+Entropy.1 = be72de2b1cdbf0c8fbcd4cfe0b0f8dc5d93d035d9faf884bfba2ef19723f196e
+ReseedEntropy.1 = 89c4f4357f799b658e9d1ca53402bc60264b4cedeb553a0d8afc9046391a043d
+Output.1 = 0de19571b5f54c8b134933d76b2fa21826394c3bfc06dbdb08c078a158fbc38aac3fcaf6913d1c588a6e369b12b1cd946dce24d96c4ca1746ed1e90ab2620df5
+Entropy.2 = 5b3ea39aaff5c04009eea65cad7c3a02d4f8807255a4f48e60e362e0e4177585
+ReseedEntropy.2 = f1906910179d2d64ac131075ee60aa690ca4345c187505547db4f43958f6e1c6
+Output.2 = 3c5ab25397e02a8c57d24997e51081aed09eb8fc68612cd19c9d560f3597c9db6aaf5f6222778d8184c83ff166f0591ac2a8b4bbe9edfc4fd4ddb3aadcabd324
+Entropy.3 = b1d87c20b18ef4d79bc034e52e69e07f0d1c224d49cfe77c5df5ff7f2605eef5
+ReseedEntropy.3 = 0bad85806063a7c6f50c7ec498cada912c6167bd6ee2cd3be8d2de94c17dcfa8
+Output.3 = 4953c4706fb27457bef8bb4fc4929fe227eb7beb90e66edab9e26ab7671f28a4f5b65d1edf3fc267b4f3e51f4ca7f07f476289ca0ae3a86919705d2dad0e48b7
+Entropy.4 = 082a0f42b54b524eaf14a952197594a1947cffc289716776d52d02d00c7630e0
+ReseedEntropy.4 = 5e798f69fcd017ceea3c1434ea597dac6847a63a8093309dcbe54fc2a0272b7d
+Output.4 = 0946b91dc3f19cf08a2af86ba65ab9d162de8f645c2f531dd16a22f615f0562f79a128432e23953dc3f615612218edbee5c9d062ae009d4a2d2416718d593b94
+Entropy.5 = 5f41de01517a0d31a7d53535b858257c9d80e8123cca98ad199ae53e776db9e3
+ReseedEntropy.5 = b857f6328145fedfd71d2dc3d4c99068bd4648d33103415b9fe114826af66a84
+Output.5 = e24446ec149f6f16e4069b27f45b0db293f5ff4b6a0cb465fbef9709a6d9af20a3be609cbf1c647bcda77fdfe30379583f67ad73b9d62a4f5187f21dbb89bb36
+Entropy.6 = d4fe09372d8bbaf39f8388f193310ee63c4ada308a58783f4bfa580806f01bc6
+ReseedEntropy.6 = 1e46de02dfd2a9f11d2d683f4ab79c2588627872ab14fbcc0bb619d31687d572
+Output.6 = 20d87a94ba7af20e41e3848ec31fcbd0b8e51aae70a25eb2d53203a77aacd53240b911585f115d8b8a07e38c4e101cd2ac46d7c9f32505b8564ebf7acd97a799
+Entropy.7 = 5488cd2fb7a002ea1ed7eb6f585c23ddd73cd56c14d39bd780b3069984da0020
+ReseedEntropy.7 = 24fdcceb766fcbf23c8954625f759d343dd31703a0039e95968b482a33583efa
+Output.7 = b6d58552bde595fe3eb0ae54531e984510e545bfc45769930a1fef2f96c5d47ea1ff8d3ea417917b8c9a00aa32e4891f3bfe5d6121bb404828866accd5ac769f
+Entropy.8 = 0f1e7470944e377d00e87f0920fe60ed4734f6fa4034d1d1a9ad0e67499e3b56
+ReseedEntropy.8 = b0bbd0b3206825e484118b9ac4a9c7b9bf6983983cb4180d5ce278475e2e85e1
+Output.8 = 7e659290503df5ce1762ba721e9f50a0d98710998d75e1fde92829106f1007458574fb1cc73f69427d106d318f1c1690cf748eabad72f870c6056613990f1db9
+Entropy.9 = 30d6adf9b8451390ca566ff199c01db214b9f9e2b147bf5806b7055457930c78
+ReseedEntropy.9 = 8260eb48acc59ec946905c56eaab34cafa412dadbca02b30c293bff0e6437569
+Output.9 = 29aef17c9992e7314aca59626d250820def81be802421ac7ba373905e9f549dfacdede4ef751e447149750148370b8a547c7041495d945985726f897e9ddd3e1
+Entropy.10 = 7172ba994b2eb0c9316e874d2a5c975cfd7e43775912b29436fa7510585a7dc5
+ReseedEntropy.10 = 9ac9e5144cfd52d3df334736099d2cd9693c97edc7c41c1e173009148549ce8e
+Output.10 = 6df1de2ddd713f9bc01688366a44d121686812041f0032bc11a8fbbf7f5a225dcc06b5fd12c1911edcecb8065e6295a0b8aa838f3e82f4dce8882ebaeb80276e
+Entropy.11 = 33c49e742bb3d9033612f3235e8402904da8bec443393124eabf0ffd92c7fd3a
+ReseedEntropy.11 = 705bb429e7cabdee771655b3a85d4ee3271c9f0571ead34f5d7d1df3918d3caf
+Output.11 = 19c54ecb76924ff930ada1aa6f35b42c225a0e7264534177e0791cffda4267763429788028eacf9b987766f53a066fa6918958e92e66bf0fac606376c857a078
+Entropy.12 = 0bde8403f4effc3f588d4eaeb9412309ed703d889d118123d5ad55d4b6ad0482
+ReseedEntropy.12 = 9fd60f0eafedfc8573db6d114f8733c369aa7a449d58642846ed8c049ece928d
+Output.12 = 86653c0ac3261874a399e4965a12bb98626764fcfa546899cb22e47a4d5ce2121929772ad72e8b6988be1077de4510ff0d4f204a92fa1ead4c1b82a224fb74bd
+Entropy.13 = 64591d27dbfb756fa882399d93e24604bbbaa5320238c36d8b66554cb342fc23
+ReseedEntropy.13 = e28b909ecbbf0c5faf80bd2caea14f55dca08f97206c0e0a44c54725544dd4ac
+Output.13 = 0f5b8f9e65af247ec6e64a99e7c0a19d9a757b88895db9cf015e6177ec2464dec78e42f19a0fe52f90795b3fdd331223348d4328c1840507881db7a19f168adf
+Entropy.14 = e3d8fcb8c049e442d2bd07104c46f0602a1f60f87bdc02dbecdcfcf4006b5b0a
+ReseedEntropy.14 = e25327867ff27456eff9f4ae4375c7a85788b400dcae03ae8c892472c8a05221
+Output.14 = 754063c679269931fdab8f90deaa967969f20b1805d93fe5b1928512cd2fe98984974b0bb1d7494d81f53e073f1a3a9378ea27307a154dc8a1fb1d3e17998f85
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 11092143253347106df7a1c4572a2d2c0144280b26970b30e744d8e1427032b3
+ReseedEntropy.0 = 4c56b84e97a375d832e9d7413ba3c620ebfd0e6b1061ed2b5936e6e6da9dae99
+ReseedAdditionalInput.0 = a4e9433bf4b948d3603b5dacb15a66d1a249104d392055392553f48e9267b3e8
+AdditionalInputA.0 = 624cc386d7204a70ab4227748ce206b0adee59b19e42df52e8c8ca06b881ce60
+AdditionalInputB.0 = b024f8a609e4a0e0214a229dcf65cffdc2508b4d192c6f3cb1641760faf81131
+Output.0 = a50e1643264893ec49bdb0b1d9fd7b532561f83256fb3421b13030dfdb3ff2e0abb68282f5757418cd1ffb16932455ed038a8565c380c581eb5d90b08f06bb13
+Entropy.1 = f190fc84713f16337e9b96df5b1f8a6587da6b0fcf07f5efeeede00403214762
+ReseedEntropy.1 = b9b58594839f117b7b4b40136911501a603c782071a6bb0571f44e84fd5b7d1b
+ReseedAdditionalInput.1 = e5c290910d48411af22923c68b1ac611d64f8d889201536922a2e229e6be27e3
+AdditionalInputA.1 = c7a3ee13e28ef71ea5b21c513fdb5701cca6cd55bf3c2ec85c90d1ea6eba5b28
+AdditionalInputB.1 = ced4bad6c4b2ffd22c1ad16a314c6588692afe2abfff20fae5a9deb7aa9f03b3
+Output.1 = f3ada6bc288cbc98e41542fec989f2c262d568d9198ab629644771cd1302fe285619b580c9fd42c5f0581787c902bc07da1b5f3dbf34d8550b8a71739d4afa9d
+Entropy.2 = d8adbbd79335ed6798d2b66a2ed1bd068bfb69e2fcc1c02073f60a092008c880
+ReseedEntropy.2 = 1390343042b1ffa4ab4eb5fcfb8bc7247ec561c52e4737afd755ba06428db216
+ReseedAdditionalInput.2 = a108097aa72cf2f67b72558a83dca486250d265e748ae680815cbaea9b0435b7
+AdditionalInputA.2 = 65154561ffe950e1bfb3adc11ebe732f6608e0bd79df4c384f8f04a2865bc7ed
+AdditionalInputB.2 = e172bc2a934122ec9db55667f4d4474fc667fb56b343c06f13d833006acbbe38
+Output.2 = 8b29b11b59b490ec84a2553cef2689f14febb7a2819041f51fb82b24652a4bd5ec80d0d09c9831a73d033f8ce435ee72cd226195d77ee0b22b51295bb44a17d1
+Entropy.3 = 69e1ff29acba36e19ea1893cfac889d1890222bf0c84c15b9fee6252393d0cbe
+ReseedEntropy.3 = c1e5a21d4a52459c085260177b0eee8713df058d706f45f9b616f49026169e0a
+ReseedAdditionalInput.3 = e930a2a101de4fda42878fd191f73374c120546a88c842fdf645c3eb11c04bec
+AdditionalInputA.3 = d8dd0e749f6cc49a6049e9514c5ce609302f56040e383ff58b8b31869ab6a4e4
+AdditionalInputB.3 = 0786f9e0ad87764ea669aa8b1b7685feb77e3094343602c73f68b84e48fc4daf
+Output.3 = 4e6a7134f49572fd08cec85c8b90136848824cd3142b361ae70dbb80a33a54498812e734a87c4d2db9b8c1776d6da7593f98a5fb1df9892a3fdd6f12b553a5e7
+Entropy.4 = e5667c09013240d7ded3eda9ce15777e0a1d08e2fa13800ec2ab175e35129e2a
+ReseedEntropy.4 = dde36596caf07baeb42c6a73c7b721a637132cdc78e068f70f47c7702857a96c
+ReseedAdditionalInput.4 = d53aea103a3760040915d8684fcfffc7d777a87b0c23169c4deac0b686ec665a
+AdditionalInputA.4 = 8bd67a30a8c37b956d20ae76199087ee4b9a7f5e56f5e631c9c5170a9b2c51d0
+AdditionalInputB.4 = 325bc3386fcb93c38a2088b04be8bdc0080c51ba7ec18793fcc46e0d41c7a5c9
+Output.4 = 0691a71b347f20094881f0f17f0ef644876b75cf8c41da01524c6362c41bec53b7479eb391dbe63386a3ab4d38f744bb26cd6f25750640b741ed1b8bcf571088
+Entropy.5 = de4411d7472a276dde6fc3e1bfbb662fd04d1be1fd7be591bcf629486bcd3d32
+ReseedEntropy.5 = 25fb6ae49ae3a7125efdf4c5ed92f787bac2bedd88595bd7b55faeb7b95ec7f8
+ReseedAdditionalInput.5 = 16f39882d948293a7429ae1ff20b519f28f7e02215026b96a2c04e3cef56004d
+AdditionalInputA.5 = da632eeb6f326b0ae55e18c69db5c7971bf96739faf1a73c152392d5a6eeffc5
+AdditionalInputB.5 = 0055b4cdd1093b1be3209eb65619379d58c2f2e918b053f2c07ce647a6797820
+Output.5 = c0232b72087844cf62d3004a59ae3685af715657547b91bdd5411657caab20eb766b04506106bc4b9f7a5540ddc0a38377af0c28c7f40e84b768114317279ade
+Entropy.6 = 61ef80e8372b80195a4a16d05a737312a7d567680a834ef70a7d6adb9d0164a4
+ReseedEntropy.6 = d79f8cbb3ffda9583151b99507eb856b049113359e3be00d4f677c61c27d7729
+ReseedAdditionalInput.6 = b9571077cd2ae00fb1c3215d0917c83f8fa8aa471bd6e04adc612787ac5e05c8
+AdditionalInputA.6 = dc6e9e7f586ab631d291b347407430d889147d2732d017ffb5bafd3e6f449d96
+AdditionalInputB.6 = 7fe5922e85e51990efa6d3990e59d82e1580cdec91b5550c1053fd61417d44f4
+Output.6 = 615cbe150cb85db0426142bd0884a67447eb4ffaa759d4c30ca5bed2dd1cad869cb01e578577c4a064d59d550ef47f7ee594fac2bd02f87b933017a98b159dab
+Entropy.7 = 9274716279d0c6067b955f30627ba184276202170268305ace8466f93bde9e35
+ReseedEntropy.7 = 71086eed403d6c221be2c5eb0641ecac4f787f1447ad908641cf37e4015341ad
+ReseedAdditionalInput.7 = 99de606c0afa6239a3e37b8c37ea37e2cebcea7c0bee317c63836f3a855fb848
+AdditionalInputA.7 = 26add2a6868933ac40212fad03ee33561bd11212ab93414a8e57c172138e5718
+AdditionalInputB.7 = 8334feec63765e7a23175f6bba6f3e77e158a7331c379af96ba9c07b35a7b864
+Output.7 = 9123d41375b1c784f5cb67160c816721dbd05cebfde1aeea5be24cedc49bf35018a253f7236c362d92929096dca95a07a4d01dfb159b8f2805567d57a06904ff
+Entropy.8 = 87bc9e07b00c202f00264f4ed09a41a87f3bc79a467cf6746b0a792d3de1f3d2
+ReseedEntropy.8 = 5d06e51dcd292bf5c6197b7271a447fb5d8ffbc84a896114c142d20412f114df
+ReseedAdditionalInput.8 = 2dd53c781560da3f01a13ca7b073f088d1e754b9e8cc97bd4de2a1d68a340b6f
+AdditionalInputA.8 = 7b5af254befead4f531bdae09e7f3c98e7a66a2dd243f9ba55670cd5f483d89b
+AdditionalInputB.8 = 7a7b44ec9006bfe402782596d5a500d45812d209651c3e260d8049270cc9ed51
+Output.8 = 972c6e2919bcc5827be7435dbfe86be25744661def51347ec67547f3d87489687b79fc7daefd9bb8253c4f8f5886ca933a03825f8db6ca7f078c6bfdaa77e8c4
+Entropy.9 = ddfeb887c7eee3bb4e9e3479bdaa099ad584ce4df4fc2c68c19f3eb98f60bd62
+ReseedEntropy.9 = 14893d5642b8c4ef2789ee62bbc7efa1c7c824b852e5e3201911b1228b1ec534
+ReseedAdditionalInput.9 = cc6c7cf7966c718b0fc98a7730bdfdecefef4712ed4bb0c5cc3d59234436ab8f
+AdditionalInputA.9 = 982da5a419b9456a66f3a7603b42260a9c4c90b7b96c20f898d13ae64a1bc3a6
+AdditionalInputB.9 = a973b852c135df7264453648f098bcde470a84d19f641b5beff07ca631b9a7c8
+Output.9 = 8c3054a69ee90039b7cd6bb80a14608a366a3db7ce49aa9bdff1d063c54d9d6be11fe7b213ce3ba20443efd384ccf00feccc58ef992882c6656985a31f300969
+Entropy.10 = fdb27fa5d76bff49b204f4c883493d48936eb12e272054d56fbf53755baf0808
+ReseedEntropy.10 = 598804e3b0b26e0bd4d8292ee51506e020c4230b9d8eb18dee33bc6ac4d11db3
+ReseedAdditionalInput.10 = ae4d636dacb26e89b57772d10c2bef88a4a9be8d6c98d659729a120b00ebda5f
+AdditionalInputA.10 = 8eca0750cc306a3014825394a5802b527337ef6f4c52c1679a82c97b60a1b593
+AdditionalInputB.10 = b184d92eb2955592b1277ebccfb33bbc776b46f300c6f23bdaf18cab9bd33cc4
+Output.10 = 57ed416d116c644fac2f9ddb54d3c640aed6f60dc60d30c0d8d7aaa406448822518211fff82c094c4714e1d717c933e2d05054757e5d8b1a5e979e6e7a97aa2f
+Entropy.11 = 843a90179eb6e95b37104a2211f0d779ff4a244b35b3cab1710eef7c2072d65a
+ReseedEntropy.11 = c78dd1f626e64e849f63f18fd686a6f0387fd2d8039782627bcce36e121d6816
+ReseedAdditionalInput.11 = bdb6175cc8eca6215790df0e010742c16dbcd843031990d30cded567d15970cb
+AdditionalInputA.11 = a8d360717177f603bdc4c50db679eb97114cc556c7220025fc05d9fb2ebef13c
+AdditionalInputB.11 = cf952cc4adaeda8e5a330ffea86d1e1c4b4d3c953dafb35853bb30e8f0b2bc34
+Output.11 = 7c6efb2aef7491ca5011e5657812c5f06b6795cdc5b613ffc4183aeb7c8bfd10ada46bc5396e24d83e7817d7d904d8d5b7fb5807b42fb3a3dbfebc75b509f5dd
+Entropy.12 = b0818ef75b9d0ee5ac6d723aeedce2ac4733be08ae89b471215099b304609a7d
+ReseedEntropy.12 = b54d13803105a76f4b4f67329e6355d2cc48af86673790c5c17b03f85b1c2e32
+ReseedAdditionalInput.12 = 9a8abf499503633a7b35be824c37c1a5d0202914fe5cd2d851a2eda0be7b7c6f
+AdditionalInputA.12 = 6c60f5a67b2622c8f52ac1835a3f490d6a899e5c8ddd4bdbe28a32d046be7f1b
+AdditionalInputB.12 = c6c8bcaa538aa5783db25e63000c2ad2944b6285ed8d3380862860c715272843
+Output.12 = 6c69250d63553228f9af401986c637d01b97ca9a4ef9815b709d15897175bb64d0da5583bf0e43a61a2831095d30aa906033c54afba21d7f38f2273964489447
+Entropy.13 = cef03d76606e57aca278cff0051a8388cbe7299f8ad3f70643a857918fee2260
+ReseedEntropy.13 = 517b4273096648afd6623f49fc40f18debfeaefef1e95898df156efff2f22beb
+ReseedAdditionalInput.13 = 8e8612e1af62b51d04e76cd9d41c83d6b6126ea541f5db64870e07bf0a8fd65b
+AdditionalInputA.13 = 7d2d1a93faac61b9425bfb8259a418e255df2979e792b4b36904f82ffc1b3d86
+AdditionalInputB.13 = 3b707106cc8a03bb37a8106e97a7bcfb2c81f8ba0832489cf6a1fb49285409cd
+Output.13 = 25aef9e7ee8a972e9e641cbd797d0492b38ce6b432a35fe3950e65ba74a7e22e2626bd59dc36ac0f9831a455555b40246e2973e34a7bf2ac98d584f7f4ce9c02
+Entropy.14 = 561300b8b3cc8381ad4c2832d9f9e8bade8c720b56ed4726a211fbf7eea285ec
+ReseedEntropy.14 = c23daaa38eb8a039c9617bf18b6120f7e97e705db413d822e2d8b0f2b5fc5ba7
+ReseedAdditionalInput.14 = 6cff3da810734789c7605d13cc6b3912619962572eb91b9f9f27f94a40bfeb08
+AdditionalInputA.14 = ff296cd83f439529d436254c490013f26fac4ab407e158a06b3c9d4e9e7d04a7
+AdditionalInputB.14 = 63dee758f80f00738dee68e5f8a361cbbb371bcfa1b67ffb073c45e3c84b85fb
+Output.14 = 295446b08f879c3e46f0c57dac85767d94805fcdf7beb1eee75d40f643254691adef0e8300cf27deb90a72805cce91a4433d263ecacee0583b222b81c0bbe401
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 9680b338563c37df37d9b87c39a9f7d16e580e031063995123837ca7c5bb9a16
+PersonalisationString.0 = 7bd84c5397f2b0ddd4a63a359949f1966806d903885690c49f2a7032e3888bb8
+ReseedEntropy.0 = ba53153340c58900d4e4cec74707a1fb32c93108e26615b0e0096db62ec1999b
+Output.0 = 2856d079fe2539db400e4289306bf0420c4cbce326b38b8cac7ac44954f6509000b4af2f50f22c8f2c0a897e9896681ae4c47a83688c7cfac86d6a1637e498ad
+Entropy.1 = 2e16b1f1167ed7040bd71b6d809f65d4c194df9499df26ec297d5ba728cedda4
+PersonalisationString.1 = f98151e990f568842bd47e0b1167a61957a46bbb254fc56915c270717d560720
+ReseedEntropy.1 = c1c282b0d36f56e64e348961e0eacac228376fbd4705c17322780c423006cdf7
+Output.1 = 1f25ff8ba6e96d41b34d70ed7af0a2d4462b3f495914a65c7c8618d93c7f98ccaa4f812b7bb4e18753afdc8afb536ecf340280055fe81da1e0322c44c0df8e59
+Entropy.2 = ba84f7a71d2c919a11f08b7c28d8ec96580671c109046222c7b0c7505b5073cf
+PersonalisationString.2 = 20b129c99d002d9496f14b317774390e555400ebf04ffae55d92957038fe01cf
+ReseedEntropy.2 = 6b087b3f90430a24f216f070bd7c368fc501ca643f2511732bcb34588d7d8290
+Output.2 = 95ad8e777a32166ab7c39f2d794993a9100f0bbc71727599e227bf029b2e85b7d67269f485c30f822d21b9dc11506b39e00e0e0eb7f832213cb82f7d6af06734
+Entropy.3 = b50bf46c1d31789680c57c06a335682ff4856e73e5bb7552fbb3b6d3303f79f2
+PersonalisationString.3 = 9838816deb65b9fade3cffc6c7c55c5832b2e7755a25a1e66d3b6b7378c522a1
+ReseedEntropy.3 = feb1a15afe4ee88299c16d5fb2c71e1b28adec08780481763a0493c2b6189985
+Output.3 = 6f839b3f40dc6774f7a05fab5ad1c0ed05ff26dae2f65bd89cc2d57b7ec96930069456b109d9fa50f86e62f275c1dd9fef5094c4870d1894e4b50dad6df6feda
+Entropy.4 = 73b06fc7c1d181d7457a9d2724433a305df2ee29ab861a874e089f864a22a492
+PersonalisationString.4 = f9e7693954b25f9f4ce5f4cb5248706218bfcc81842ac0ebccae08e074e2d0f2
+ReseedEntropy.4 = 681fb7ffb293173ed0f358195d6e329a6f79af2c1a8e734b5abfa818144b3d51
+Output.4 = 95d620f69df2fe74e0514dfb1e0e6a74e2ac05a512a0c07638bb8e9d971df6c06e1367a34d3ffcaa5d6f56d382feabeb497872677df00a9ec7119b76bb085d1e
+Entropy.5 = c38a074e9dd0723f3b6197656cb4a0d3fa75deb2cf67f2da633beac50ae14144
+PersonalisationString.5 = d58ca88dea40636f2843e70574e764a4fb3c327c453d935495a46ee505836302
+ReseedEntropy.5 = 8b400e5efa1506bcc73acf467c2739f4add4ee236623bc78070d0d1b16a78ad5
+Output.5 = 2e2ae6fe543b58c6dafe55a5628e1f709a4a848f66721cf7e69214b084cc71a6d8029431890157191f3ef2ca45b414191658dbeedaeac7e05524ec1b39c20a4f
+Entropy.6 = d314a080b01f071c2c7207e61bf5a316d7b768c85816d9c92dd8637960966ed4
+PersonalisationString.6 = 2fed857b2dd418c11c399db3c7168876d2d4ccda32f28c876ca258507578f867
+ReseedEntropy.6 = 16b89e8e0e1f589650da309304c1d7d325a5b61ec456f579e24cb7d8c6a09c09
+Output.6 = f2eb919942a14316a73304a6dc0ae5a9f92f7c60e86f231463cc9147f1cb60d6ae8625b690612190d3df62964f9551d14b11a0af435d4020c58732b6a909c904
+Entropy.7 = bda45a211b41ca5a499dd206f93d4e1fc416eaadc466e228ba31d70e2983c751
+PersonalisationString.7 = 2f6443eeddbdee4965f6fd9f24243201d66e7a6255794f4c13a6b0274122c3f2
+ReseedEntropy.7 = 2ade9240de8fc4fbdbd4f24582d1240ce2d84dd8752d1b50822f72f6be776f7d
+Output.7 = abff61b3df53d698b531d34ee4bc097c058b932bfe29019531ce0860c27a967cc1886d1384aae44d0d4f0d196beeb94a6211361a898ebdda316c337ffeb3827a
+Entropy.8 = 709d423bcfeb14d3fd3e3721e7473e1b3f9d4d872446fa2e36ffebb3f25ff65b
+PersonalisationString.8 = 63887bc19b1eec948f06ba14145dd95df8209d925c8119950e075368970d7bb0
+ReseedEntropy.8 = 4efc9c7b337f00b27b482d8332ff0bb41e776e6af5bd4741bd22978bf19e3344
+Output.8 = b1db4e8daf642a7dc507d012bcffa9c19243ed974f08af7babe365c88b794be05f1a5ed678c5cc130ef058dcdb31299aa402be1761c3da815a6151d104c2c54d
+Entropy.9 = 66671aa2656166a174bb85c0c5575a4d16942fb57b254cc303e5954e70bd4f97
+PersonalisationString.9 = 409ea468fd7e7b80dd494339dec8252c1db72790afad997ded0f9d77dd31901a
+ReseedEntropy.9 = 36d4842136d8343aefdbbab4a18aab9b68615b974a9faf42a935e40c6f87f12b
+Output.9 = 98c1325dbf9c190aba522fc07f9d209fffa8240fbface83a1e016c8a51c283b0c8b852673c3c72afc65fbe193d673212f46e8a2843b1507a2520b0159c3eba01
+Entropy.10 = 19c5013e12237e582001a23563eae2c18c4009e5d15838c345425e82b70d8b30
+PersonalisationString.10 = 90226b0dbff545e35f0efa35bf92f4d65173099fefdefe886efee0921d16025e
+ReseedEntropy.10 = 9faa13bbe114c1642880d6b91f4e394399169d7857e191aacd6d6f6ab479badb
+Output.10 = 37072831bae4d4db940afc8e8940c0e03daaee3811c6ea9239ce885a8263b8d8e81ae839732b11a6a5a5d2ed02d238d8b3fb4d8d59429a302a07e99b841e274d
+Entropy.11 = 6a8eddc0c7c57e37deceaa3e0b13922d6a63f05c2ef64a8d7c648085a62ed925
+PersonalisationString.11 = 521669654b98c565b929dd001ea41d458120cc30036ffcf5c90fac6af6ace9cd
+ReseedEntropy.11 = e6d58703e3a9fa3e76085bd10f1875f5b51bfb0a0e4a6dbb1c0552bd29851196
+Output.11 = 9ecf367a00ab5445f831e4f15be927fb0e6cf85087698d734588259ea1a85412ff9252b65f279c17ba0c99dc21e5517479c89d685e79748f35e287b72ce6dd2b
+Entropy.12 = 26e6071eaf6f0cfe64d2fbf39b655e165313bb96176da07b3a2d075890a577ea
+PersonalisationString.12 = 1ad406c9b27e9ed0e4f114875a9b40a47200d92e94e284b898f91e3b61169787
+ReseedEntropy.12 = 1c7744829d36977b4f024ea99d82a0ad8f873dc978acfeb10d30e99cdd36208c
+Output.12 = c250cd44625ef27d1bf196796465e5d4b45a7f0c6133f3ca40b36354eeac6b990aa2673d58ffaa63156efd2adc6d88bc1d407013d1a1e52749126517b6789521
+Entropy.13 = 4a9c90ded4e8e48cd67da593fde8eb9efc33a27efcaad36231eba602a4fcad23
+PersonalisationString.13 = 66f493f5135dcd08c58a8c92758a3d9e20ccb32a44f5974d68cb76f530520f3b
+ReseedEntropy.13 = 0379d0c64557c09cd5717a1215298942d602a60d3df26f34966476c5a2c16022
+Output.13 = 1ed6a4fcfef1d960328a31f282c60f4f6628c2061fe114141658b5517c5d0f0479b5fa11ebb5704b07b58b158274406db85dc44571fa70ee6fb9b20e958f5a65
+Entropy.14 = 9d45bbae1356c67ba83136e8ef04d52cc58d1ba39d987a80a572e62a11e09152
+PersonalisationString.14 = 345b74cf00947dc1eedbbacd5e4030d5639f5e3c0b9fb986fdc0c3c6cbacb58b
+ReseedEntropy.14 = 3150b6ab1fb005ceb8323c6982fc3af3092077241dcf4993fe91696bd5b8b747
+Output.14 = bff83f45e0a4223489b08409497471427e7b82f834082137497bc552127446a8a3f52a730914650cd753098162f7d253bbd625983430d1f16fcdb0f78a1348a8
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = d422edef416236b5fc6e34058c2588a0c7aaa0d01fadcf80e9d4d6ef3c5157ef
+PersonalisationString.0 = c33a829fc50c46bc7129e0c28d260c4517b28ba32e5be7c318f7f1820a8c760c
+ReseedEntropy.0 = a2412808f138fb7d7724ea2bcabed6a65e710c365da8a2f23956efeb965d4d2e
+ReseedAdditionalInput.0 = 24733e6acecc849f127ab16ad7545a14835c010619dec18aef96220bca095bb5
+AdditionalInputA.0 = 8bbde63675da645a252111c54e3c61f27bd2c03397845b59e1f22abd81b42cec
+AdditionalInputB.0 = 622013fd3e2df79fe34c273af8427780486878aa90d0c2368dde1d7520b6ab55
+Output.0 = eb1b8551d1062b907efe53023cde83d88b4d1db2891b8dbb8d10d696cb32ea0bed5d70d7857bf2990c022be677ad75a3c804263a7756d26f629054e052dafebf
+Entropy.1 = e476b87efcccb88dfdbb6e34273e0a67c6af69978bed0c24eb300880da531bb0
+PersonalisationString.1 = eb9054f2abbdfb778cb9f4244d8df213e13ccd3d0e395151d9bd1eb5d8c82d54
+ReseedEntropy.1 = 329adceee76f1b9dd4e2096947fdfd0cf2f37e7802ae7ba6f6f4a64f594e139e
+ReseedAdditionalInput.1 = b8af7d0d514ef588b05313ddca65ddb2830c0400f0b7ac95fac3b8c7a52ae016
+AdditionalInputA.1 = 0b60efcda148b06d11ac61064c53494869e9df53b21a62bb52d28095d4c656e4
+AdditionalInputB.1 = f8b6293c609ef89b239dc7fcd2c404806743c87e28788b2c45fda27e536fbec3
+Output.1 = ec7527ece6f3881602a185c663036b22821915347cbeed6fa51bc938e2088cca6b87eb82d8f11bcab2e1cb11a4b1cd635ff7b80b81f40983ca035cd3036df5df
+Entropy.2 = 67486cd0f38913bd080c08d798fa0d8287893fd8d4783055c773a39543b67d8c
+PersonalisationString.2 = dadb519f85934d83e959ffaa2f78a0084d2776caf37d7899ea73e01bcd5653fc
+ReseedEntropy.2 = df239e6877c1c3e48ee380629fde10563441f8eff06b169882a276a85bfaffd8
+ReseedAdditionalInput.2 = f0a9d62d6dd41b7a4d038e7f9e705518bb08e34794ffdc8012463b124cc46ecd
+AdditionalInputA.2 = a1ff4ebd04779338884a060ad6970e73aa54816373b7a50defc1f01792f6b67f
+AdditionalInputB.2 = 6a8257fe090433771b5ccd718aafa28755f7946adefde869402feba3ba81e254
+Output.2 = 9dd94dd859483f5e56b7e1d131166da91a17893599cd8529fda4f3108ca13e307760161c409390cb887ffd1803184bc47a58f1fa8837cae01e2808ccc961f47d
+Entropy.3 = cfb9f80dc905a4bdba94b06cc41976164c1e2af2be5830fcb7f4eb3e74db2405
+PersonalisationString.3 = dc76f5faf9c5781c8bcf81e4dead883ec00c0b59553ff957dafcc74405131493
+ReseedEntropy.3 = a851c568e5ecf9e6c840f7b329471d381a91116ea226ddf967ab43478b8a199f
+ReseedAdditionalInput.3 = 0efa4003cd563343d461c05b85a3c326fb6805646d7469199f45e2a1e20bef00
+AdditionalInputA.3 = b57b476e20d185d9d2a3f931bed0463f19c673bb49c3a681c1b6c812571cfc7b
+AdditionalInputB.3 = 3c295f47e534331df2f6707122f07f9837e902e3794e35dd6e6d1b06c40f2c0c
+Output.3 = 777e5e33d6fff55283767e1c7addf3769211983af612f1a8b9371631080772103fba8dff4ebc40476fa7a219e6416172ba8f3cd366bdad487ebb2fa78df0f3d1
+Entropy.4 = db552d5f75d1707467e6286eff26475ea47fbfe7c64b12ed34b361f150cda03f
+PersonalisationString.4 = 5408ac0a26061e09899065c1ddde78439dbd5ffaabf762c035e71796a4645d28
+ReseedEntropy.4 = eb084472ba66c920d8bc087effc30ebe7db5ba56e975490ac2d355239388093f
+ReseedAdditionalInput.4 = 255e8639cc74b77eb15afeb61f90926a2d4347787b54f5d3861e66a05f85d5c6
+AdditionalInputA.4 = 54fe7d9dc40b8d186fdd55250051419d9c2b25add4c7b32bccf6009a3d938831
+AdditionalInputB.4 = 206ae30d2d6f7ee5dd0cdf2e40359a31838fae94fd08179af23316021bcaf904
+Output.4 = a72fcf9100016cc46456fc2949806512e1d346289557322be19b2e2b8163bf69ab738d3070077bb355c6a8901e75f4c6067831a0dba957d6d87faae6bf0f95eb
+Entropy.5 = 3a1c78a56d5b7d0126abc62259c042038a3aac448f93ab44ef611222439e0c2b
+PersonalisationString.5 = 1e682f42e2bc17de5155a3f3fd934575906e19bb45e3d010faf9623982bbbb0f
+ReseedEntropy.5 = 8dc5a783ae1addc4b73d39dc5727a8bcc2d0d8c60364dde65bd9a0efbf504275
+ReseedAdditionalInput.5 = 7339e7108772e65c29b8b7471570844a815cc638a0c2c8fa688ba6377ffae556
+AdditionalInputA.5 = d463faf4e058525d4ac2575053f85cd4216df7d5effd3dcc5267d681b894c804
+AdditionalInputB.5 = 39427b84c235430114fcd46c8b071c3e8431f54026a4b95a0ac586d4ce49c7cd
+Output.5 = 3ac8b4a215f9a47e97a7e0150e8ed27ab59bb57efbeb1383f5db39b7edecee9205f5ccf4d66a9c2847b2c359660cacebb8c852af5d174591740e8cf9e0f29a12
+Entropy.6 = 15f1b62b39af3423e3f77bcfae9f5e898caedd6cde04a514f3bab8b4bc5ff2b5
+PersonalisationString.6 = 7b31df6d1dd9c8da22105fd2a615ec67cd4d963928c23b61a958352b97aa2f29
+ReseedEntropy.6 = 47db12eab84200c99029cca112155b46829a09cbf3bb8d0c534983320b08664b
+ReseedAdditionalInput.6 = 2ac10a72b1e96caec0c9fc04367688a62df2e83989e7d7b5816bf82aa7b5d55c
+AdditionalInputA.6 = 882408b63edb85ee3060c0c0234646522a3c3c9a9adc238034fc3a3f8f3dd3f0
+AdditionalInputB.6 = 3d5cbef0d5bfca58ef823f2bb3b071e3a6938b61f3de58cd18d0ffe71e87a158
+Output.6 = 51ba7f020cb315fad6bdf1014da8d150032b873b0932cf158172f0a5d923822bd326ff7cab77b75769a62d45183956f9e5a7584203dd19ac818df590ef5eedf7
+Entropy.7 = 36c39dae57d99afd30fd4ebafd1c8343a785fe26bdb12eb3be90b5daccd2a345
+PersonalisationString.7 = 18853c18699a7b64f136ce24a8192052d74e799dc06d2d8e53bef747d6da42db
+ReseedEntropy.7 = f7ab54752202c9cefac367e37b28fa2f304cc178fc8c179e76dce11e3dc7a526
+ReseedAdditionalInput.7 = 61b9a2e8c1328553423ec0ed718f532ed9d510363b82590ccfb51aca8594b4ef
+AdditionalInputA.7 = 9dc483dac4072048c4ec5a3beb217ebfa410365945a7c249e135ae55c79eede8
+AdditionalInputB.7 = 842811601859fd739754a6ed725039becf0be04c172cac5c97fa2e4ae71609b4
+Output.7 = 481514023830f43b09282cf0fd98987d1bfee3d1ba71a91eb80658350fa9139b95671f1f492ce37eee4c6372ec73a26addd3508e28ed4eb0ed8348fd28fe569c
+Entropy.8 = 77d8b976475a2da09afe53eb6375147c47c14ae3e80b56ce90cdbe103989d41d
+PersonalisationString.8 = 58a0546ae7fb83d35e9b8be9e5acabdd075040789e4a9b054e321a926831495d
+ReseedEntropy.8 = f231bf21655de014cd1b06e07d8d11ea7fe0328e6700d9e6289eb8df1c635208
+ReseedAdditionalInput.8 = 7398480cf9cd0ee4d48d5e04bd4603f1c6d9847b8ebc37f0145b50e6648a8da5
+AdditionalInputA.8 = 5d404836eb957f47216957fdff9adc1d805beb1d74de37decaf18d1638ab7df2
+AdditionalInputB.8 = 0d05e84f22d24f814cf3acc6ce9adcd5a1e6c1a119aba1c941a27ca72c8946bf
+Output.8 = 1e50e391d80389808cfea2adf3c5ba78a4ef355ea359b8dbaa0ffc8b544f5574c88c0fc71dbcfd714c3b613effc0e5c2585577f231d8124f47e1fd7c3ab416e1
+Entropy.9 = 0b8bbae72bb6d5e59398497a0c7e900ee84690469c07e72704c3f9f79cf8fa47
+PersonalisationString.9 = b7331dfeef1bb7b76015f181a30f566cf2e2616a73ed494653218f43040b5fb1
+ReseedEntropy.9 = 3c5a05df76bae62c6feae1b7305a52f206b696fd31cf6106ce899c14c6ba4138
+ReseedAdditionalInput.9 = bdb3c0b0a50d7f622852a011f67da21b117015ea6e89bf46f0e8f44841b4733e
+AdditionalInputA.9 = ecc1f3d43982a854504244273ae757e9256967d11924cbfb1d99c23c20a4c14c
+AdditionalInputB.9 = c6d244a0bbd69d5a7a22b456425e97c43d1d90660036ead44c16c86f43a075d4
+Output.9 = 740f54710db87d0866b1bf323bbad808ef10b1a04b5bbca3ae0374b2fb8b0f03d58c2ef039f80485d1e9c740b5f01e2d36c463ea07bd100a876b1cda60ae7969
+Entropy.10 = 1c575352092530f990b771186977bdd6845bd34b47aad8d9817783b04ebfbcc6
+PersonalisationString.10 = 4e74ebc36d1e97c5765a20b78972c05f34f41306823c738d6279b585777aa7f3
+ReseedEntropy.10 = 934e50794cc90406eb2fbd8a46a9a09ebdc3f9802604c6608be08ca27109e5e3
+ReseedAdditionalInput.10 = 5867c2373d3a6da7bc6bd50a4b2555587f44cf131d0adf91260da9e032fc3680
+AdditionalInputA.10 = 861ba9a0095d818f8511fc56bf3fdfa900328c388e9ed80f3d8e40dea0788a80
+AdditionalInputB.10 = a515433a73bcd03a4f6561717b446e8eb7ecac2b29cc87ec9ca5a44e6fadca8a
+Output.10 = 57d9513ab6bc4e5a40dd231a3e9ba55aa92644fa6e0c6be4f962fd8788204caf94837e907431815a150e7d722e2daa4ee05e647c9ae0fa75a0a6ef4204d74c16
+Entropy.11 = 186771fb18b7b75dc1ab2b51ab0e5242dcb11285cdc61b112fb239f579fb5cd2
+PersonalisationString.11 = c80840a42b9992b288d42cc96a8ea5f93e4285cb533e29e8a4bf5a92a55fa6f8
+ReseedEntropy.11 = a3197ef68c1d6edc7edecff7c0c8561a9c33de2c65a21fa226ce5992e1c7aa68
+ReseedAdditionalInput.11 = dbd9cac049bf735c11fa86914fd1395990f749de8f3857ac2ac1f23d57270c30
+AdditionalInputA.11 = 5a4b6d829043621c5d46531381305859dfcdb86d0845dac78feac072305b63e4
+AdditionalInputB.11 = eaecc289f6db7c0e150dff9da11884b48ebef47a5060cdd7428391892a4c9969
+Output.11 = c034bfd6d17806df4b45f7844ae6a7c9b68a615ddbce4ef40b964e0297236d429c3ae0b9954fca08b4dc72809c0d5a145a51fa302d0f1b251bc6db8b4b815a4a
+Entropy.12 = 05e33fbfcc362f65df5fb170bc735284a40bd70588ca3ea69003c2439fa030bd
+PersonalisationString.12 = a98d934148ac824d16f94542f35a20bb9e2959fcff2a432e8c03fb0c189ec6d3
+ReseedEntropy.12 = de2b7bb53ea6ea0ae6d96cb32dc5c6dbb3fcad7ff116c8b2be53c13585c53e41
+ReseedAdditionalInput.12 = bfef2dbf7e8dace5645c4e53ae1021ca7f931fc92e39759e96b09a5a90ac608f
+AdditionalInputA.12 = fe39d1671670d05b73d45b020db305409edc114658ba40d7dc6e7fba6008f7c3
+AdditionalInputB.12 = 4587fcf7ef2a8498eeef897249c9fb968028a381b9f34c442f9e885756ce6862
+Output.12 = 365a5b953da1f0f36f42b049c194a5150e2d44af2eeb4825f5865fe0aff149904e4fc073e719369f32950712352711b57305beee636aa81176fbd0d08ceb6267
+Entropy.13 = 9c5ae106f2f0b0696b77b51fcdb95dae3de9e6683a0ced8aeed27194ece3350b
+PersonalisationString.13 = 032ad20bd1f66f713bc1467899a04aa1ebc2d307cf33a4beadb7d6eb1227c0e3
+ReseedEntropy.13 = 572d0971050e4d17930fc35385be7c2791136083977065923fd112a589e29d26
+ReseedAdditionalInput.13 = e6fbaaf4b34b7c7c936366fb2356ae9f8b3d50ab6036a2c57e01ef130421b9ce
+AdditionalInputA.13 = bfa9284fe2023d5b33457f805594539440e8878b4432ea828ef678349f4e0ea4
+AdditionalInputB.13 = abc96a6b4ac603471c514de802a00e2ddd090c68d686bc3a543b53af69bcfd0e
+Output.13 = 9bfdf7e10baee4039040ee0ea21769844616c3e2e787c97427514335aa2c3ca4e7bbfaea6fe930d184df7bda95e07655ee9e4e1020866f8cff422a8fc2b3b0e9
+Entropy.14 = 2442a267b43899bfdfada98cca3948ba3620661eecfd7928733d2567f5baac21
+PersonalisationString.14 = 7376099ef76e4cb057809bd90a70e909bfd979ad85b87f08e76694b158fd177e
+ReseedEntropy.14 = d3d6f98649b70e7e497e6436a63a6f96913f7deff3441c1d28758835737e6619
+ReseedAdditionalInput.14 = fa20706a43391a74d87f4669276e1f8ac4cb54a521e1521afa93e4185038856a
+AdditionalInputA.14 = b643013474a37b208a6f6c44cc56b1caea69e1289d8897d53f40423d9a6a40aa
+AdditionalInputB.14 = b1e07a0f9740c49335ab5244e3b7aa567c7234e01253fa1c31372ac43b1d6519
+Output.14 = 6e5fb213d4bef40b3f274f956960a1e0d28e5399bfcf2709fe98de2b54ff26766835b6ed538b887cc617529d057f6005db0227dae7627728504cb8cf3530eb2e
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = d6e18f4565fdf2826d0d56419647c020413b963299d8de2c6510277f8ce988a7f0b3bc1df85b153f
+ReseedEntropy.0 = a823d6311f9f66df329e3d7065e24fe2507e6b9dbcc22838483fa729ca5116d03a91028139d7130a
+Output.0 = 4bf806690af13dbcfd448c79a3532e000bcabcef36f2643f3e1c9de607104282f81cd6cdcf8da8429c94108245114d3da17b9f48bb07094c073a94f5d2ef9e30
+Entropy.1 = 80fffbe610d6d404be2a712aae847b0e6a0c48da11430fe17e1a749f95beaf0c5f6c0c77c9420846
+ReseedEntropy.1 = 27f5d5b384572c8f2019a663ca1998ab803bf2ffa128738737e79fea89da2470a3436f82cb3bfd37
+Output.1 = 48672c4bd01fe97e859a13f5a7372ebddb2aa0c65a35a71ba35cd30dc261df08acb26f7a632cc229d9d0ad74228e2c54ed3b53f1256645be1bc1fed94dad282c
+Entropy.2 = 547d4fc5cb4150b4af1c10a381eed864f2884f935bbb55b8322cf779a35a6e4d139396a1b8d71af8
+ReseedEntropy.2 = 498c4a9769a8649e61593a13c31b64b0d38c3ad6dccd95562ea1e935c79cfad5d8accf82679c5b33
+Output.2 = c9dcf999bd23c0e3d63bf7a1e8e4ff6f493984f5780f29485d11cc9056d9a7b1f0b0c414c176ec8637c602aba10320fcbe82647743ee41c9c5291164a07c2e2e
+Entropy.3 = 0d1da37b22ec35f987578531462f526f52bb55fdeda02c784be17e98b70b05cb4486e0c203eb76f3
+ReseedEntropy.3 = 7fa5b8f7d87e1cb5ee99dbff9151a40dd36df57a7df0d5bfddca6083fa018cdd8f01f164c30a32c2
+Output.3 = 31820fb5538d9852665bcc3b03370c3d37c17a1e149b22c30634140a30cc1d527619adf6c527f5be0fe10e8b42e07e8bab8d9ab3f317d032eb3818caae7e5e3f
+Entropy.4 = 562482c2b6629914f1194cb7ef7cc0ac8c2c878dd6824ef78ce636aba899021ae0dcc278206124df
+ReseedEntropy.4 = a00d0e31ab3d9965c1f88e79c7340ca801eccf13128467d3091cc0f95984f28d22e5dea34d5ba197
+Output.4 = bf980fa5d2618f349cc2e0e679df40008713b2fe9ec4f4523b113f624dfcc5f7ba32cece7df553db87bed9abc9ddad81a18ee2cf95921cda3a35f9fc1a69b4b7
+Entropy.5 = a667c8aa4c4e10067e1df14574cb7f84db6b49fc730d233292a68e12fffc803032d939499e17aed8
+ReseedEntropy.5 = c535e936fae2f2e865b3be046c86c5678b1e6f3da97690b652e129133198ebca07477a2a1155d1fb
+Output.5 = 079888faa377b0ce0a7b994744eaf9d7024bc88049966a845a8485270f5ff384df0575d32dc97c798133af994d53b1840940b513733229308c49743adf588c1c
+Entropy.6 = 5423543feec72f5d56eff2d426c8b3975ee6b1c7ca8867994b2d8dd65c4c44920ae94cb7db0f81c7
+ReseedEntropy.6 = 770f68abe62188a17abf4b560b61078b5e86fc830d88870ce3b73a734498985a51397999ad0890a7
+Output.6 = d87c922cf54a018ded13cc61a807c6cadc4354ebbf4d99ae389fa8efb1e6d22d021f3efca677f8ed8d6ce9c630d305b5e4c075a321cc7ee2253c7a2726f8f408
+Entropy.7 = c6e4e17d3ed827c57ce85dc43b6f25727b36913e2894ab838a0ceee6a6b4ea5fe880a47b1ae31352
+ReseedEntropy.7 = 8733126958705f9a7a97c6952c4051a4ebbc5ad3b0ed185aead6c44c122b71083be90de72b8d331b
+Output.7 = 5261127c8a5aa52fcff59d04cf032453df5a9e0c8af5e84603b15c775a8e1967b016307281b352e89504f2f5f8be4580a1706e7b163baafbd0b89c7f5ff94c6d
+Entropy.8 = 21a1826f929a45408c26a2529f93cbd31e81327dce2a2147ef1c5474756a622f47823ab9954fa1bb
+ReseedEntropy.8 = fc45431e4b2b16ccab1bbdc2628cff345697cae72485b1dcb2580b70cee80d2c58212adc43ba4c10
+Output.8 = 9e83a66990735a4ecccc2cb59aca9719d03468bc9b379d860ad1d9c09881111acec2295268a67badf45f4bc21896a17f26d24df5535e4eff144afa17b0ed8733
+Entropy.9 = 6e22ce3e724ba293e99efd669f65d99b78dac4962009beb0ed6b8d2b9943aeff45dc0a331e3f53d0
+ReseedEntropy.9 = 6d2fc9aab9be7ed84850104d19d80f8b19cee6e46760e4985204b23557f7f413193c80f1a596bdd4
+Output.9 = 0d5883afeac77081ec25053909f22e981be92a54c38cd363b2da333a151951b648ecc1d6b56a0d87625f0806220ab1f0c73586ed187fcc4117e82376b0baec69
+Entropy.10 = cda1abfe948875acc789b3f26bcff5054b9fa2439ebf5ca98aa2facd51818576b169137843f5bb51
+ReseedEntropy.10 = 39c5646520616740aec55652bd679efa7b21d05e71033c3257493faded9a0fa145e5c0af11ba2ed8
+Output.10 = 533f6dffa2261e7d3e351676152feb2655a7fc88cd5bfa3ff54c4872372113f28ca69c0e57e41ae6ae81408a7c645546868290d94ae366d5b64dffebdc27cbf7
+Entropy.11 = 0562a5097a7353490a9525a2e5a805ed4db3145e943172aecbf840c271f4caeff32cdc51e8303279
+ReseedEntropy.11 = 529e85686d64ebddff61ef1d7c1350075d515a888183715379b1a2c9f271c8ff6c8e5e47fffe8553
+Output.11 = 5284baf915fb792509d50f182c3c40b7fed775b3a8c91cd782702a88fd295a1d17cb7a9970b0fda774360c6bf79577d32260dc2a997fc3a9f3d4f78e4879df96
+Entropy.12 = c4834aaa7f33d4a443c26c944d8e9127502365d33e5227082111e1438ca3d2129a42c92899eac2cc
+ReseedEntropy.12 = d90c1b69b8a280f31c66fb0cbd53eddb124441a88a9e4130103ecdd5357361b000ea5f801ca8ab38
+Output.12 = c714603eb1852c0bb21f224a2552b83f74c8a66637cc87077435a32e74fd79f42623d4da11d64cac5a4ac7a133d56a10764c9543ba229729eee58fcb247347fb
+Entropy.13 = 5da850ea7c9c21b8728e9e975ac8465ce16818fa824f9b783b0ec3db7efdbd7070317d64e623ebe1
+ReseedEntropy.13 = 27f2b446f55223a13dcb3b3c8661a52be0118eb55d9ac17a007128f322068df777b27f05e1c878d0
+Output.13 = 11e15b10f83d083e7e7d4ca13a46c5338267f93c03802ae6af14b3dd5aca5ea87da349dcd9d54be5736b28671665db49c48552ca3f21ef4f3cec4a5ab7bea9ae
+Entropy.14 = ac8e24b8704e2011076ff9175fa1c12d9beeed66c9a975037ef6f1f519efa2230ca01482975c9908
+ReseedEntropy.14 = cbe05b235ab45735f0fa0ed945ec38ec3801f2caed0bd8f96dfb34cc75ef1a6a4122f5a8305f915e
+Output.14 = 91c49803af71477a06a6a493b75aa36817aa15b58afe7598750b2fe4d663f05ecf0b8c1b5737cd611e2d56ce95a029bc4fbc307f5478f0b796b259e01a48920b
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 658a2df4d2e371a9a97192869f77ca77abc80e3f6d2e1e295d4d228de2ac90d54d6cbefa2e9ba3da
+ReseedEntropy.0 = 79fba3e14d225b26e6365bd1ae1649ae93d716dc09ed509bbe338e2c78883c77aa0f43aed3c2bb2d
+ReseedAdditionalInput.0 = def5512314c47a6bb7cacb3529a66164ea48826650a54a6d9be9f5ee4fbb8c7d742d3deb005e8996
+AdditionalInputA.0 = 54e3ad6f72c1f740a019572b7e446ad158e0a29bb0efbea60ff6f16596afbbcecfd35e65635f9f77
+AdditionalInputB.0 = 6516e17a295d2fc141d2e8706e73822efd7b597fc576a97f43816cd1a9df4b9ff691324e2b581777
+Output.0 = 932e59d41455f89ac8903019a683d5356894f4ad608f046f635779d3ae12e552aa75575c7bbfdeb59d253893b96f71538fec6047582eb9388379ad939c85c956
+Entropy.1 = a44b6c8e841cfe7b83c5f7a9d358d5ffcf2d4cf0f351c99988ba1665698ef2818514c77b7e1dc5bc
+ReseedEntropy.1 = 2a9b738d3bee43535608839913273b7bd53d1c562ede1537d4fa0e2d846d01207a00b4983166a2b0
+ReseedAdditionalInput.1 = b9ff9b9189608100a3c4bfedcd05e908d97e2d2484a92e9b318a0f22317ca80ec59a4306943e6a62
+AdditionalInputA.1 = a2acf3c46b6c30b1e89855a8f00fecb8cb7ffe4b2c7baaecee589634eadfc271386a7a317fbb2a98
+AdditionalInputB.1 = 416584b17c8ecc4e535c0c847879829aa7fcd4ecc691a36288d29d208b0daae9c8a1b53f5b6ecc30
+Output.1 = 8ab2e71e5c96dc8f57d2c1117a3df0f8c8b00f206fcb94e1dd0470337d66f0f8ed2f5c605797d7df6e2f70cf38e842c4afabc9a5fb2a7c7651a5c48a894009a5
+Entropy.2 = 91572d61aa510adf20a0d75dbab5c9796d4488d684d67a33a867ea2ab6e4395c059d894ccd5751b8
+ReseedEntropy.2 = da82dff8f43f6ec862b6f29397efd2c0d2d1645bf18b56c5c95f230baa16688a8109a8be2e26b4fa
+ReseedAdditionalInput.2 = 145e7554c342b8c0bc8ec4f71dcf586c2b67ec12aeaf9bd1e4bf7f9b9320fd0bd91d8c38850267f9
+AdditionalInputA.2 = 9220919909cdf0482f7b88ca2ebb387983f00343536460a66a220a3bccf1389ba859b7b9b3ebff59
+AdditionalInputB.2 = 4747977bfff80cbaa1764777a4665972d36b214559590567b46cbc71a2e82309b6e3e8f71e6750d2
+Output.2 = f00615af99a9f99d2cdfdb16c78873d9311329ee700558cbbe40a53dcce6cab3bfb7ec497ce73ba726922c968529f664ddf322bc1cce69ae79ad626e2db2c7a9
+Entropy.3 = 9d490aa1650164568073dd40e7967e813554417926cfbb74f70f6e4beeb02cd39ff5f3e278fe4b0c
+ReseedEntropy.3 = 9ebf64927ed260d90a8a9ad77915aa9b40e754388725c349f59ba2bb43e6b361d0b0584ce0266161
+ReseedAdditionalInput.3 = 64772139eae5e6604549792dd029191efa8e5e97c0feff9ead2de19a2d4c92f930d32015899fe684
+AdditionalInputA.3 = 583abb1d1d0f632179bddc6889bc1c2a0979b0f3ebd383d5f00d18bdc0b277f40af7b5c46a1f8936
+AdditionalInputB.3 = f2e24fbbd626aa8edcc2bd77dc3569c5b961fc8648c2460a78ab4d1f2917a6cba3466aae45db2c5c
+Output.3 = 62a598b9a7f40771c65cdc99851b22a753f92adb026acfdd925724425db3b6ea7b28d13a898a2da63e190946b0ab1adb67f052640ff7e5af7a53cf1bb39aee69
+Entropy.4 = dc0f0ca32137c696706fdada6d0f6c24ee0b68f4091f8d2b109c24e474685070c387f21b0c15f1c5
+ReseedEntropy.4 = 0d09b26d4b712257714248fc78eacac814a76bf444508911852f4992e8415738b4f477ca8e4f01c7
+ReseedAdditionalInput.4 = bbc0047a8c57d5f96f717d06c22e84c13be69f5ff7b67f51d174e6cadedb181f7f8e9511d14edbc6
+AdditionalInputA.4 = cc0d7b3214b53dc5e0f4c891418b658543d8a9f66e3bf5827ed9efc2cf25f7fc8b0b56fa2b3bbbbe
+AdditionalInputB.4 = a6d3c7270e531718416cd87e0d8cb8a1ecb1f1de6ebf339e229cdab2539952fb75dcc7e4e4d88ab3
+Output.4 = 0e84d7c39b049dc7689b609b052d1d24cbd6d4a83affb87996f016e59fc9c65ef2bc4cca0a950672f31ab3722763be5e444cc65ac33b9f0e6175559c6568778b
+Entropy.5 = 3b5b2130cc3b2a600c91054a662ddaa4225f694a2613d868075f634a45df57496d843b3cd09f568a
+ReseedEntropy.5 = 33e86326002f71b79d67824ae4b7dd18610d3f2a911cee7fdf24af515f306270e9150febd80e5bc0
+ReseedAdditionalInput.5 = 4e1dac0d8e47c7b06651fb7666ab9f4db3a1ad416b44fa095c3f8511c2fc849f0807e146638dd2a2
+AdditionalInputA.5 = 38dd29ff7f167b521b30191524b1eb3eda0341e47823872b1775c1768798f0c4e757c5fd1514045b
+AdditionalInputB.5 = a7c999806d382ef8e91ecf58615986021350dd26b8d04aa57d8d69845ee923a136947be41d13a254
+Output.5 = 64eb6cea5d7eec48be1c63a76fa8df5a183296121089f89c322eee916e70f838925709e2dbb05fff613790e8bd4a6289e96a83aec6cff46aef91cef13e61be60
+Entropy.6 = 5859f921724df522f348a36f237804ddbb71c7bcf6273ef461dcf74dcbc21f0c347c628dc5e373d3
+ReseedEntropy.6 = c0d30cf0ed046a7887c7684ad88d1a25b4e8ae3035f2ad6ade05ccb3cb42410e2790c97dab36d658
+ReseedAdditionalInput.6 = 5c40ef84f870a60f180ea27d10b0fa9fcbb9c5381395d1d004ab2b25366ac7efb4e4914a44e6868f
+AdditionalInputA.6 = d47e7c586e8746a87e1c5c0f2429a0f761569be5e3a753f453b75bd09d5212693f39d33a6f49c3b0
+AdditionalInputB.6 = 867072ebb2ad2d87a79bd6ce4eb9fcd717428824b56d2fe8327992bcfb792494d7596bd972770a83
+Output.6 = 246914318b6bb9936885cb1975a528109cf7464484db700ecb2d69919e4a7d6b2ed470de92a2c648995beff82cc13033c8dbec4dc777e8b7bb579bd7ddb2dcf7
+Entropy.7 = 3599c3f17ae105fd8c46aa0c338da75f6bdff7064912ada1d9b8a0fefdf2ae5dd848ed94c8aa80e9
+ReseedEntropy.7 = ebc855004594b5d1caaa956498b7834cb28bbc703b9cedb19d18bc4bf36bbc224b404722a8a19b21
+ReseedAdditionalInput.7 = 692d168d7ca6693fb9f41c61a53c27d1482a75f3ded520e31a53a5e3b284355c2f6cff83515b183a
+AdditionalInputA.7 = 796fddef51ad8ffe792d11781ef6bcad53d91f4b2134be53a959abb99f1b870583c7fc3a3ec464cd
+AdditionalInputB.7 = 427d4421e6981cad4c0abca0b9146c184bfa6f0fdef1cd1222a1442aedeb75628423a8326fc6ddc6
+Output.7 = 9270fea3fe71cbe954ac4b79e2cb31af0daf1fe7329904bbffd88cc0c9a0033032b061f6a825f3c56d78e102d10428433e1c19ca84a0f1d7a56c52eb11d84e2a
+Entropy.8 = 4312d076aa8f719c3340d830e73e1761c755f60fd31443141092e9f9814206eaf5db712da0546476
+ReseedEntropy.8 = 178267c66e6587643737502361e65294808059de012872af50e3fc22a77b1d897f891e1737b9cefb
+ReseedAdditionalInput.8 = dc8ef5cb2fe6582290b786663811f0c413cd3a7bb0cc9edb712b3331c1d95dedb3d01974f8b39b62
+AdditionalInputA.8 = 63143a7c7fa166fbacd61574491d9bbc782e08f59997cca6335dff95b01e80e0820fbafbd5df7c34
+AdditionalInputB.8 = cfdba4c378c5f6fb52a4dbd303e197172d4df88f681704361761c80e3fb2cf678ca8687ffbc919f6
+Output.8 = 21979a039a04ba6589b56d563d2863e0a444f73d3771ae536b50ffd59ee82cb1275723d6b77efc44bf673fd3ddf14c160e59ce549cd51f4671e6a5cf7ee6305e
+Entropy.9 = 18488a34ee9de4ff27905f19739604ff5b1183914855a2e4b05e078edc6f4e45a2e50e9006661fd4
+ReseedEntropy.9 = ac53bc313a1815345ca9ad9c9b4e28fe1d0173d0147fd07830a57e67ee67ca7650a26238c45e41f8
+ReseedAdditionalInput.9 = e71f6d8166aafe207b804cb2b51a84f3bd79bd88bbb523244d47cfec05c5c4583e0b0f5a5831bb5a
+AdditionalInputA.9 = 7089cee3d8f66cece6e053f48016f1f99dfce73356a6bbf6d905864e97029b4a9343008628310dc6
+AdditionalInputB.9 = 1235d6febec66dea03e444195de54a4294835d7a2313f8fd1fc84dde0e074675033592d821a99f68
+Output.9 = 4749c7415bd58e7a2119f50cfd673e738986e41e4e9b38c433766e4aa1e8694e7b9372832d8e70121d999e8bd0937b79e488daf1873eb8fafa16b9345748f551
+Entropy.10 = e0b9b48edf873ebcb646b090ecc9c6d7b1f4a5e87c0b2570f7ecc459aba85523ded204f5fec8d27a
+ReseedEntropy.10 = 213181af9f4b08908e08b54abb5db09da67608789379788ef4c3d96cca41db9e5e3c4256903d6862
+ReseedAdditionalInput.10 = d666d0142153d4bc3b508e5c155e840376a6c6ec3cf5453c38cc7031abd001414f6ff55675ac3a26
+AdditionalInputA.10 = e2822230e10c9411281667abad677dd70bbcf814c34e0e8f1900df7878c87ce63063881dca1de13e
+AdditionalInputB.10 = f8506bfb85f0c89c3c609892e7e9b74316bbc26d058c8025dba9a69679cc55090e270514a065a551
+Output.10 = 25a46bddfa9aa7968c80c2035d9ad641ec1b98c551f3d0bb0b576cec9dc63e28ffd0d08a1539cf005232d420d6ea0e502141f4a730636f41ea844ea0dc4231ee
+Entropy.11 = f40c546e81ce4b2ce687ce85759cabf36fd4b90f67768c99e18a525d3d11c3d86d1db8cb49cc881d
+ReseedEntropy.11 = e8cc4f3180904b3d06168cb7d47b21252acc72899263aee1946b37b9b546628f1f182630726d6162
+ReseedAdditionalInput.11 = 753e59ea0100b51a1f013a6f0d9183e8d54edd448e93b518a70dcc7b328e64e114be5bfb1fb29174
+AdditionalInputA.11 = 3675a8641a090d665ecd6ab5508bd65240f3a2c828da701e1e5907fbb59b8d6fadca7aef53e89ee8
+AdditionalInputB.11 = 8aaf08b0ca7e9d028f830e4574991093f9ff0caebf890bb8c00f2f181f3542d18423a2e62179361d
+Output.11 = 98f6f5359b55e8ad37f74c2336343297b9bc01bee4e8f98a10a1e86d562990dfd1b3a659198b2bf26155130c15a683e0d5f1ecfbdc9fbf91e1bec1d900f30664
+Entropy.12 = 8ef12c3e89a2cd21b3b19b7e38bd59d5222612e9f7e3313c853baa891575c84077d01f5e3714cf2c
+ReseedEntropy.12 = 4704705b43da7b668ae1865d421f6de2c054c6988f93d9f1ce1f3142347f20b5f407705e765da449
+ReseedAdditionalInput.12 = 6f6a2fa0b325e854f33eb7b2e303ce24967cbe21812a7a24485347a0b4da159beefe039abb25d821
+AdditionalInputA.12 = dfa65709eac6dcd7d8ce09646b78f1e277fde9feaf52ec3d194842e3e4174e79038ae14bab651212
+AdditionalInputB.12 = 58e82af1b8947438db11d13e436d4afc51967e303426515f4ff8f0448083f9c728dd5b171405907b
+Output.12 = ec66194d98cd6b1c6e3ed6bd5b83c2664f875f2a08ebc6b95e1c8fd0bd50765ed1315e329b35655765bb7081576390b64d52b1c24762fe7d65e4a81331cd610a
+Entropy.13 = 9ddc931b651d3ac57dcb00dcc3b4b064dffff47ee235ee06f629fc116dd156e45ef721898586fba4
+ReseedEntropy.13 = 4597dc095c243492977a6c84d356eb675dd6ae97bc96ac8d93933aaf914de1e423ce92372849bcfb
+ReseedAdditionalInput.13 = 66525b69092c0a89bf4ee6fbccc31853421021dbfded18dffcef919cc14f4d7fd65c25ecd36feab0
+AdditionalInputA.13 = 79841030cf70468a491e4463d714226781a27a2635a49a29386dd6dbd36c9a5d82f047270bff29c1
+AdditionalInputB.13 = ac63f17c8c46e0996dc696161c359d4052320777fc7bae0afb456bcf9c8dbad6ab10d40948f7ccf8
+Output.13 = bfaf2273f82961a920514cda2d486c9ded312878cf8a5c7c8d6539f33415a0a02aa7907c35a57628765b46e14bafbef2fcb30476e161e1efa87f4c5d7fee6675
+Entropy.14 = 15cfa0f56d670d19979dd562f9f53d6fa248198269475002dd9e6bb5c305bf650226093032e0e0ac
+ReseedEntropy.14 = 47782af4e213302932d52b5776ee847446bfb6dac358dafcdadebff12e014e01d5c18d5cf2d42b11
+ReseedAdditionalInput.14 = f69d8da68bb7c118aab8a27867a0591f7c3973550d3bec19099d46d3abc30a309b405e51a92d1c2a
+AdditionalInputA.14 = a491fa45d161efa71ccdb405d6ef3153700b28966582e1052cea992218e5c061d7ddb083f7eaa116
+AdditionalInputB.14 = 4a0cd52d005056df60803fb353728f3b3fd27964e5c96965ac472ff8bb4dedc4dd7d1ca04b124f0a
+Output.14 = 0f78e45be38a6a46c2914449beb9df52394067b720f390225f930c3313916f00293c7f7f173cd89d2c30c72bc07482f066708bda7a29af420490821c98c995f4
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e0e03d4a9e4de362e6bb9ba635b847912a3f9e1d83b4363fc258cdea2928a87823186f1c47c4175f
+PersonalisationString.0 = 2eca97478d606b0bca56f055a1e8394b44f5e3028da59a3900d5d7bd341b0621b5f6d2309e36b4ae
+ReseedEntropy.0 = 66aa3db4bea8f2e1b2469751578f24f1b4d0df971cf2281712149812c20e804b90f3aac12d7c9832
+Output.0 = 0e02f344b1159ccd7795974e7bb9df9e8cc381a130b98b43462285fe3ed8587811abdef471bbcfe830e516b78f781a05b52e44d54122775084170ff6d80627e9
+Entropy.1 = 7a6c5d428c1f0ad57a82fdb8e9fd395c844a8be56d5542e9171017f0728fcb0c15c0d9921a638842
+PersonalisationString.1 = 33389056637ffbaf97f1161c8dbc33e38a5cc5233c798f358edb76cda08b994e70ce95955085e0b4
+ReseedEntropy.1 = b6ea69b11de08600312babe88457c44bcc6ecb5a56f3e23168db0089ed2b047a53378831f47771ef
+Output.1 = d1a275211701719304e4a65e4091b1f3ff9696cc863c7aa96d340c62765b7a2245c19a120c988d406840c0839274d89ab8d6820f85e9b3b4dcb97d28eb589593
+Entropy.2 = c7547cd2180f8abf45529aef857b48f5945c93edd9c1b3ad11f3ca39051a401ab1dcc2de69b99fb2
+PersonalisationString.2 = 73557fb6e0bbe78a028e812498924e520137624f58fb2ad296b71450d56a760cae6746162f2a64b3
+ReseedEntropy.2 = 80122c1f5552949f197cd92b8af0579a73f7d5cc1eaac97acbd8fbf28df12f10a91546a2c3fe8f7a
+Output.2 = 8e680e9fe75f83c11d40302b965727b3714c8f0ee1a22cae7414eb053631a7709b3be2f6ace623454a4499867a3d86d3209a3c2a128ea4851cb0816774dc158e
+Entropy.3 = e6428c4dc3d9a5f5a2bb9a749f14cf573da80583af8b9aa14a7883988c9f2018a3eb9e3ded91a022
+PersonalisationString.3 = 9e5c06b5ce45cda9f2b2a7977556e6b39f0ced58ce6c28d8d99dba4583c35d78371fcf60857035e9
+ReseedEntropy.3 = cb6af34e70b380e05eb439c12a733c0070f17971816ffd2c959d9d376c4b493827cfda84d4bee4d4
+Output.3 = 5df440ba578f1eaa1e91d04826c33ecd33d4f6955d87092901698d9872fcc2f4979caad36b2d5f04cf18e0d1a42749d2ceddb575b008ddd9c19eab86e0d69923
+Entropy.4 = fe8a4e18b6e8a501c61ba8cc5dc0c561ebba8e7f915b2042060ed5f61386894def3384d6b9369d9a
+PersonalisationString.4 = 51139516735a7877d00e874a41b7ef6aee8ad550c9d3adefdfc60c47eab27f3e6cbf9f253805b934
+ReseedEntropy.4 = e2092cba77d108df45dd921f6b294f88cd25feb70662451aa7c01b7625b29560b239a9ad6cfcd082
+Output.4 = cddbfe209be62b2fab1e792f5071cfdaf6c9b5491db2afbe9710b7406d649960f41ee385d65f50e76a40644f66befba8835c75bbe35c9ca7a7438cf36a0c7400
+Entropy.5 = bf585efcf2285a1a4f29d54a78bab135fb84fd716d4e76863a9b01592c8908e36d28f28cfa5f02e1
+PersonalisationString.5 = b3f08bb0ec1006a0f94b2c49f2cf020973324c6db4b0a283c2a3ed39b92e5f81743b778c52bf51bc
+ReseedEntropy.5 = abb437fb426c7d00dc802c1a23b5a3f41d0fd22a98d329d959c4fb205ab98e40a813497eeaa5285e
+Output.5 = fca07bf5d72d19e4ab99ae0203110a871af27909f441d3e821d2dd8e57846b993b355c419d9c67263ca07fd3b0a98f68178018737ec25db1a3e741e9e930606f
+Entropy.6 = 2ea3af0f4ba313d1b6ec7bae3c4ca7ba8d5f2e3f90ff1014c9ad8a12257946c7994cad9ebba6e0a3
+PersonalisationString.6 = cfadd1ab1119ec7d6ecde0a3a006cea049b7d0ff168d7544e0b92cb9131937b1c6cd548caaa3d8eb
+ReseedEntropy.6 = 85601545da1df4457b3e94711098c4fdedc992c275a8349c67c20aee9f61762e38bc97001e0e3ce5
+Output.6 = db7072fb587b7cf0a6483ec9e80c6d6c8236b27333204fba1c7b6f39c8387d7331a547a00098b96d4c578fb2db25439fd262bc2800b84a804e4af81a056511ea
+Entropy.7 = a4856d1fd452633bd3c34b9bcb0d6b87289ae7377670cd70c0739f4e33e8e1d55b5d3f5d8e1a25d9
+PersonalisationString.7 = bbfabebec895ac0b3b0c23fe2b21525f140c263af54ba67482ba3b20c77ec14a8e5870131ed39535
+ReseedEntropy.7 = 94ea81c8a7623a7bc20f9d57c6f5a414e3ac588bcf1ba9dc484314fda78b23b192bc2e825fdbcadd
+Output.7 = 0c87b05908833cfae562db9bf99075a2fbbd10aee3ee18e870471bfa9b48ac3bd95acf7ab3037a8a7b6a6901bdcce9974294b044f2b5c6005cdeaf8adcdda96d
+Entropy.8 = f02c4ac229275480100fa1b9ffc6bcf82eebe46aabd891af11250e4f5f44acb2fffd9ac0833060b9
+PersonalisationString.8 = 27d5d52da397c05ea35b82325a6aecd89913bd7221b38679b927d45566f4e0633eeabfea4e5409c1
+ReseedEntropy.8 = 8c45aab2b2fb11ec21010fd025b2a5ac7aa4c1d6bb7ee3958d43b7ea91a764102323ac60aa746b29
+Output.8 = 8ec22e310f0ba3c5c08623a7d774d79a988ebc5121deed7ac5be26d0d14469bae27803d6fd0b4e31280d169f5e16135888047026f2aea739992de171b217baa9
+Entropy.9 = 459d35a66591108a83d428ad0a6a6f669c6e4c006a0453659a7bc493c44a26c66fef240ca13b009f
+PersonalisationString.9 = 9539f492930d91f3946d51793b9d27077296de3e4c64f7431d607bd117beca983d34069ae6b725a6
+ReseedEntropy.9 = 2b2dfbdf49c4d79562bbd800bf936139cd22a10e8b207a32a559721178d9a3bf16cf2493332fe195
+Output.9 = 26b650495f8764e984a57a43cdfe834200a0c3839647f7f73e8f90bee697c117b664fa9f73b04900212bc58e7d574eb95830c475e775a5926a3beb53781dbd24
+Entropy.10 = d1e88fb19af8090a562b19a7b967ae563c009f97bb245ef6cf679b5f115b5e2dbe7f288d1932a764
+PersonalisationString.10 = 98dcbf39c3c58c9d1dc616a6d90ba887710e021a389675672f798bfd56b2f22c47be31fdcc1e9442
+ReseedEntropy.10 = 357312ab531683860d7a3c6845fbedb9d48c9770dd8c745defa3edc8ed525fbfc18b7cc2f64c4dab
+Output.10 = 497a71033bfd1bb32bccc894f7dd53980f6ae484d6c1666d595b5564a9ca7e5136d1b15b20f763083d513ec851b5183bca151203c6df416d0a92d5e7add175bd
+Entropy.11 = db37587400e2ec6c97131abbca1348b9e1cd4adbfb01be0c859830f5a4756aac162076229047316b
+PersonalisationString.11 = 55b68457f3cb70e26afad674ceb3f710fcdfb143d237818cd34c39374fa1bad68d53e9509459bf1e
+ReseedEntropy.11 = e16b6416a9b557141bcda208135cd3ff003c1d7e0ad4495b4160e5875c3e0193caea6f1770a93d38
+Output.11 = 4be7448629064c37b9d226bed127950996b615ebec36f98c2d81bfd97c2e51b686b98b80f69e801fae6d8a6c40aaf88e956d953cea61968d9cf85190847eefd0
+Entropy.12 = 2412c2e2e0064b2bb5ca05c1a11c35efb1a517bb0050334442061ecfc4ce559ea6b5b31183915fd6
+PersonalisationString.12 = 1f292d3cebc2595c656eaf30d46cf48537f8ad7fd65073269d3f057d22dccdae9eedc82d9b2900e5
+ReseedEntropy.12 = 520414665d70427d9a9f026bb4648c52c9ab3ecd3187f7d18fd3813214522b8fc8017b189aebc694
+Output.12 = ff1c4c7371a655342f41dc4d417c08d6bd556ad2f61649285ec4c0c442cecf26bcf7a0975a9c41305d618d9616f10d1faf5d379fdbfc97d8efa6cefb5abe7c2b
+Entropy.13 = ba8d3529f690f60984922fca43dd02180db288d1d45de9381fa89a3d4865963b4fd7b8bbc8be8e35
+PersonalisationString.13 = 57348e59244cfa191d4e4d1541354e62289101ca38ebe7aa9862cac5858af125c86cb0731304bc7d
+ReseedEntropy.13 = 1515d32a6eb7bc8edc5e8dc8944d3ff45e12426ae0aef423eee5a354f7b539d1eac3d9fb71837b53
+Output.13 = ee7f2acbe6a1f276a03851285d1613fa7ecbd23f85ea96e3650041682f2f437630f417413dc23f2806f48ee42365f46fb1cbba5c95342c8649897dc3c881cf20
+Entropy.14 = 4470648949948725323aeb566df11765a1c59221cd8aa4460e534b21d8f2f1bace6e4c8a9a787454
+PersonalisationString.14 = a35f706fe78dab179bdb83495408764805175744bc020388a8a60c201b648ca569b4c3197ae38934
+ReseedEntropy.14 = 4d632ef30482e6d5949cf52407d42caea7cd745e70d76d3449852a7ddb3f92e19840cd0217e1112f
+Output.14 = 3340cd5e74c52918b391156702851b25327072f075e16b8c9378972b081b2ca8cfa7665b7052cc44f480f0c188342357cc6c8cb616a0dadefc4e1ed40ba42b0a
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 4b58271b116237eedd4e9ff9360382a59f3e2a173d860f2bbd8b2bace142b2395c67cf5a513f06f3
+PersonalisationString.0 = cf76c16cd5d270707ea9acc39744db69bfac63e566256fd6917bf9819679840f3fea2aa535d8df01
+ReseedEntropy.0 = 1867f371a345eef98b2d70fc1960397892645b7b29a4ead252e8835e0b600618a9bd6ff99785d890
+ReseedAdditionalInput.0 = 6d44839aff8b7165deebd489ad088ecb7dcec11c32b1e747dba8f0e8a0b89f74a84ea8a05586fe9e
+AdditionalInputA.0 = 42248fce0994e0e63504209d629a6943eb3e2ad512f03f79cbd5102928392bce1cacbba056ac6ca9
+AdditionalInputB.0 = bd529b600273329423a58d6f8a12be0f17989a02e73e347bc7d49d9169337a6cff7c07e8a807a80a
+Output.0 = 02486d32cd55954f406ba55705f1460d384439592dede81a84fda221fd45c0d651d67ec4a81a8b404151a643f331ad051cb004352289de37bca71e8cc0a6aeab
+Entropy.1 = 602e53de42469180c5de722e300b1e59cf740c1d06e820a9e8101f0113afa7b7d6f764c0184ad9b4
+PersonalisationString.1 = 6183d33b2a3ab3778e354b83586eba701b79a5582d579a4815fa347873ea7f214be0bd23f77696cf
+ReseedEntropy.1 = 44fd22d2b5ae55ddf622f0d23b87967f6b60da2695d8c2dbcce2b3165d406946480cb70e39213ec1
+ReseedAdditionalInput.1 = 749c0d838037119f17daa62605fac196e7727629960f51396257f91c4edc19e15c4ed29902aeef6b
+AdditionalInputA.1 = 02a947c11f12f4e0d6a82ac6667cd936dda2b43ddb4052b68ba5c517e7b33ac281088a0d6f4a22cb
+AdditionalInputB.1 = 40018393959e2b80986316279e7c42d4bd675a3fc231218d795a6ea41a46ca2c2ce2ef87c91d5282
+Output.1 = e799f01774019d592dcb8d8df94ed63cd37e6dcb5a21f58bd16a6b9a62b67c2628b1fb95c40d923212793914a23037a92cd1078d88907e3b771f4db543ef58b3
+Entropy.2 = 96e04125fcc32aa5c5d121e8fb782c0d7cbcd77668a4c5205f31464f8a6971195759ea6089e45998
+PersonalisationString.2 = f9331807db0bf1668700651bfca015e71722c467498244f6d635040a3ef6c11663a9464282e63b17
+ReseedEntropy.2 = 14cde64dd6877b1d4eaf13478893562eda081038b4209417534c17097d7ec3b598c6df3b8923bf73
+ReseedAdditionalInput.2 = 845b98219857f52b99fc7519cd9f0d9c6fb34f3931c204ef4f303d908d3f1cd3112910d0e1a41ca5
+AdditionalInputA.2 = f2885e8a180e395df0cc770a83062b9631783a9962f36ce05ef197f989f1aadbe8db549d9b791340
+AdditionalInputB.2 = bdee38f9b3526d824fbb085620299d5bca0c07bad488cc8e6136c7723d4413e3e738c311fbbb3977
+Output.2 = cf3e3dcb4c2091b3ebe7e1c05b839d3a9014841c085b355892038f7fc2bb32c687306cedf053fbaea16429246069bfd0f0cdf6ccd82ccb0f792acb8775a5c678
+Entropy.3 = 423cc98bbec906516cf0772ff8961eb3edd13ca929295d4cdba32abbb601a220e0a4460bea6a6dff
+PersonalisationString.3 = 08dc2152a14c818721e4e83e1685dd0c38f233b5aedb6c69c574c823beb0ec6f192d4d991de69401
+ReseedEntropy.3 = 4413d5ae8212f0fee0d2e6dc99437b540943a9af33ad6863bac427ecf73dfb8f09a10088fa1ae109
+ReseedAdditionalInput.3 = 5fc5fee3504e9834a6959418db6b1066126f86d08eab760feb12fd56aabb797e2125b06a276a9bef
+AdditionalInputA.3 = 481c407bdf314c991e3b378936f8145120a31dafdee21e1e3af5aa617a9ad559ca1e5bfba38b29d0
+AdditionalInputB.3 = a26e6c492354d604dca5373ff647f206ed1907025c032c28d565c8117dc996555c9c2ae83093863b
+Output.3 = 412649dd9839e7c1854156ef0296b1245229955fb1960278790af7f798c7eed171f4edc94c7e86abba14cf301975516d7b68f61b6ee4579e611bdd57dddb9d9c
+Entropy.4 = e8fd1450e421367a2bfc0f3600abc783a18e87b981ee981da5489f452f31162350536d03c2999f0d
+PersonalisationString.4 = cfcd4514877599e0a98ab9f25582cfb5ef7b31e0ede926dd230c4a738533f38f539fece01cd8fdd5
+ReseedEntropy.4 = 7512e4c50cdf8ddbc79817822fbb19330461caf8e99ef886c376fc3fa04090159c9dc7295eafd4eb
+ReseedAdditionalInput.4 = 3ee3fd207c04c3aaf3b0d92777f2bba9d9dd20088bb64a5eab7bcdd454f7c5dd14ebe91ebec75cdf
+AdditionalInputA.4 = 9276003a3b8c57c569eea73c8f03991f16ec57b8d74cb907747e69954d4d233f97e16ed82f5250d7
+AdditionalInputB.4 = 34f76489db8fd0ecc0a8c9f457df0a757fe0934adb1c92bb323fcd97f8246983e1e07dde71273e45
+Output.4 = 3d3f89954b4e8199d5be84860cfb70fb8f00fb6bb9619d274b9c8ca9b6c524235eca9c0115284e8bbdb396c63838ba8e6af745bb5dd1daff214581398016b413
+Entropy.5 = 67628a4e763b14ee13335e070ea46113090abadf52a17017c4f9b9eff78350d58817cb353dd6a398
+PersonalisationString.5 = ba223e2eb4f80d1aff5623e1c7a63c9fc47b63a2db56a9eaaa83007f5140f7edc802f1f97c6fb532
+ReseedEntropy.5 = aed42a16e0357c38a9344fed60bcac6fc0ac02ccc3336cf1464cda26351a3bdf9d7c62266216eb44
+ReseedAdditionalInput.5 = 9d01ea58505d40b3f03ceb40adaa6401c91eb0c1e3d722ef026cac66a00068c9cd1bd12fc86b6e7d
+AdditionalInputA.5 = f37afee228cca5469d9e774ff33ab2e47782f65f1cb068fe48e1f1519d06e00d58f526f72c22bb9d
+AdditionalInputB.5 = a36ca3ab10c83d6e589b2d94830a174575ca6505ce46bf23e01022151f9f7a354aa5f1c0d76aab48
+Output.5 = 3bee8da215710e0b6039a768212e626dafdd3776cf71b6856d6c0e542f942a336486e75891241e4b741fbab23a7bbe5708041bb97508ec4e60ea3e2b7463b9d2
+Entropy.6 = 48e60a52a8718ca18b3efd01cb0efeefaf33b5bf244a6f78f3d8677f573f3398ea28fd4b9178172e
+PersonalisationString.6 = 0cc95d75c182c6b41e4e0e58318f9a7641795b636f9bf82501352d1e3886759eb16f4e20206e4de0
+ReseedEntropy.6 = 3d7fa5c5e0fd6d019cdda0ac27d07e88d14972ba2ecceeb9a23954c83881e37c23180e6fdb4f7bab
+ReseedAdditionalInput.6 = 3c37a214d0d1c2aba67525aacba4077bd16a77c8dc1c069d4b1018ca6153ff983fbbbfa1e1064d19
+AdditionalInputA.6 = 1bdf68479460270d0b05818d80b4c60f9bf3a5e6285627c8af689e67c71883ac2ccfe72ac55e86aa
+AdditionalInputB.6 = 66b250ddc3ee23b9796a8333cca68bf5aba41164c0d3d39a082563b15fdf28f635fa1e19bd886bf9
+Output.6 = 9ad0e2443c2ca928e24f1ad4f7303934043acc4e6e9f03eb8ce371e4e12cee3c7cb979132090c7d230af21f9b5134798363e6e4cc89727ac75ce2960180db430
+Entropy.7 = c66f6cde3d8377a803ca22f38ef3379bfa3a8ab77edd2cf38ae05406ed948df9e0c1bfdd5d6d99cf
+PersonalisationString.7 = d08224be28fd1fdb5c6e3a65ebd19f4f0eba133f7f8618af0ecba9df8498d387af7af90bd356833d
+ReseedEntropy.7 = fea8716ff02540dd2ea395e0ce19b762355fbb5e7f39d525022407a62896b3a094fc0ecaccb77f21
+ReseedAdditionalInput.7 = 64e16c0a3498b2693e359a272346efd128be5a5ae738068a9e9f267ce9dd7e8bcb36dd2e5427e36d
+AdditionalInputA.7 = c47fa9275584bccd85d5a84c0ab3a13a7630567dc969e04cdf3cb2a1b3d9cc79d45b8320269a380a
+AdditionalInputB.7 = ad2e7988664c31d1e5f9c03d8b5ba6afd3bb4e239d63fce8e67a59ad92ee79569e7c409bbfaf3d0c
+Output.7 = bdd9f5de8fdfa111271bf4044457dbd2a730f874b6878159acf1e7cd87960cbe3a437b0d76df37801b02346acc0e25d02f7ed36ec6125bc3c40015ea87cc4157
+Entropy.8 = 163923818097281f326f1e6aea731946bed596af7d27f05b1e10bb999daaf6b8aa3b682c01a0da22
+PersonalisationString.8 = 09be1aef561a9572274d5ff4a011f1398fb89c417cc697fe4026eeec87cf2b9186af547ad5f564ba
+ReseedEntropy.8 = 6b16094e7528eec7102b66b3c24dc8fda3f08d504c60ec689a9e1d2b6cf1a0015b9b9140d1bc6d0b
+ReseedAdditionalInput.8 = dc0c5a4f38c5727a3faa66dee837d0a7b8a5175322f509e3920bf8e3c39806f1d99842ddfa440e93
+AdditionalInputA.8 = 7432ee1167531c70910f8cae72b9b09af19185776e588a1ba502656ef9d752e84a977f24ee2e8625
+AdditionalInputB.8 = 0c66930644c2d3680c1098799304d1236ca4006ba060a839837e68423e6246e4d3f851259cbb206b
+Output.8 = 8bcac93f84516891e660e8e83f552e38cea204f6b5c4aa179d0483acaed20e8c135bf8df3257c3dfdad3475986cd58b05929aac0e402c3abcccf0c1de22b9730
+Entropy.9 = 0f910680196d5d1c457dd01efacfbe4da9826ce94401da109519244fcbc9ec0b847853819dd77554
+PersonalisationString.9 = cf32ccd9f92ac3b3c03870ec3bfbbcf7afabb9ab777876a8c0c9a7fe528ede33382441f3e477c949
+ReseedEntropy.9 = 949a919f1361f46d0bc56ee54177ff6fb0a27be627dbc025ee6bf2ee35c92f8715fbddb4557c3170
+ReseedAdditionalInput.9 = 0005d3a74501de95773c1caa760ba153402ea7b0b6cb42dbc453300c5ea618c09a6c5726431aa525
+AdditionalInputA.9 = 5ebda5991f11540ef47abc3e853c74707a06f56c07d19e9d7259efb4ac2c3c740d7b4f17c5769b51
+AdditionalInputB.9 = 0bc41c705c7ac013fe21aebbf94c05ade129cf9358d618130ef8e3819970bcbf62368638c5b3b538
+Output.9 = 01712c8708deb10b960439a4777972e64b99e1889f9bc1ec90acad5090b83d85507d998391501425524b77ccbb08d62673631b161808ad021ddbab2d8f9e2ee9
+Entropy.10 = c94fdd119106b110a2a578ec24c24ac41b755581cd53d8e1941868429448fec7f5f1c8968be6527a
+PersonalisationString.10 = 374ad5f2f74ac56c6f6f836ec21af96ff24834014644443abf9c8a84a284f805001a6f1141237737
+ReseedEntropy.10 = 3a1cb72dc54daca48c75b7064552e37a6fc0a701d145792f56e0bf2b3adae7ed8a298f3b657f22ca
+ReseedAdditionalInput.10 = edcebf4d5f42a593f335960f77853b1e833ba9c245a13fe9a640b78f1d8325e9204ce7cb48703d2c
+AdditionalInputA.10 = 0784b4e83a6ad227b79afa86c2f39b98e92d50fb6856f12744c4dca71bb332dd159d6a000507f45d
+AdditionalInputB.10 = 83eb92e0db4a2538ff8b1d890cd90f17b3a88ab405629c3c3631a6c3afc5b71d172037e9c3711d9f
+Output.10 = acf483567235ea3544a09aab423d747f8415f0c90e762a6a28551ca936f3285cb3190e1011ea43b8e5d17d022687f9d039d77b0a113962ef3eb0e91a47dc216c
+Entropy.11 = 24d8f5dc4c681c1255c16b27a4511e26cd1a8f32ecb831cb0123be0901e9ed6530dcd724a02d5e35
+PersonalisationString.11 = 299a250555e2820be1bcfbb5d6385fab294a4abd31c550df8805388e238fe306faa01ef1e7bdf0fa
+ReseedEntropy.11 = 026ea6d7cb2a3d49d4e4cdbe0b805ad7b4e8bcf6c55d53f34e07721ac2f5d591a3e3f46fe39d99b6
+ReseedAdditionalInput.11 = 08c7c8458c03d228fc83276722c0d6004ff7570b6340e51837b806c0a12c0b563f407ba0ae45c5a7
+AdditionalInputA.11 = af516e36cf507500487e92495b674e4d8cf08cb197f5db3623238ca63e4ccf746db569494d0291a5
+AdditionalInputB.11 = ecaf4f7f2c573eb3adde259c25ed2e8dc3aa08863c78965caa26bc866fad1f2f3d4d0a72eaf01726
+Output.11 = 7080205a64378975cf2d81159c2f48ac7ed3ecf366e4ef42e2647a1bc0598c9ee4a40968f3d34ccfc553b97482cc27668760d521d09bf40dbb4ed8db80f0c640
+Entropy.12 = cefae9a61baa69a4d4c70ba121670b164546e3cfe2624f70a2e77e00f62d4431a269f57269b87337
+PersonalisationString.12 = 15b7e8e911b2241a9d3001c7f649ca0ace3b62dd0ec26a11ad8676f613b2f6882e4657893430bd5a
+ReseedEntropy.12 = ec20183b603aace20a57e704ea5f8efe06bbb09477ca305f3cd85dfe30cbd2ec8172b7d5208579cb
+ReseedAdditionalInput.12 = 3cabd37c7bf1021bbc0b83cea56e18f6b5f99f9557d48b626f0ab71034d7478e08a68b721daec858
+AdditionalInputA.12 = 8234df65897631ff8c139378d802d84a1db73c1a2f2e1bb5e6bf0562aa2c1e91d20da97e638d7820
+AdditionalInputB.12 = 14eb87a5bbae319b63d7f4601945763e47df63db18a0d87d7ff3fc6cba87f26caa7f7d5febeefe15
+Output.12 = 7b0eaf2974509082000731e25aa442745b88e41bb554c9e84cf8f9bf63717ea556876f74666ce5368a2f3024149e7c5574cffcb6cdf8982d11c6d7c2a13d7ee9
+Entropy.13 = c877ab5d0072918181942d3cf1b32d2f6214b59a35a720a09cf69ac1d9dba8ca4b0d14da8ef7be2c
+PersonalisationString.13 = ce318e6f05b2b1031f2f908282cf3610e6066eb0ac86a2929dd4c0d3db47eba8fecec90ffa693bfc
+ReseedEntropy.13 = 112abc168f5be2fb044c7e4f014cd58dd3a6c7bf21fb9d41e0092d390157cd0498e5400dcd6c2816
+ReseedAdditionalInput.13 = 4c7fe1b1f1b896fefb2db8cdb331f8e91255474ccc2511a30d046c2de3581442e6d1793381c1b1e6
+AdditionalInputA.13 = fec1ce62c8f8bf13e21c20fd6452663498f8f80813b0f8f5f6bdd1df3fc1ad894c86fa987a58bf2c
+AdditionalInputB.13 = cd0770ca924a00f7e103ab07dfd3d04dc1a88a7a2e434386f79d7729781fb1978450dc371a0b00f1
+Output.13 = 7418bdcb44c45cbe14c2b3a4009199b5a869426241c5e9b3a282d6196cd6671f0b4c3201135936ebfb7930a3fb54fb6af15c2d15268e2535d7e0157b7a7e34de
+Entropy.14 = 59c1ec4d0abe87cc1f1c0caddd94b06697b170d06b2c157562c43ad10a3cbd5c3b4be335bc2b50cc
+PersonalisationString.14 = fbec1b408978e67ee075a7b77b9f36d0e622ae3e658ad09e09ad2d481ef31e4727a3bfc8e225664a
+ReseedEntropy.14 = aefcc47d5e119e328195a1f322654ec0ff4c9a74e2dbd3031816fca0118bf22098db30933b9c09a7
+ReseedAdditionalInput.14 = 1380e20a639d38f2f72b7b00400f24fbc27159fb52f89023429b45c3d822c33634b19d4ba9b6204c
+AdditionalInputA.14 = 5f7205d87d0a9868234eeb8c4ae42cd47c03983b77dfaa84637b4080df134443889aa042c77b7f78
+AdditionalInputB.14 = fb6d486fd7586036003ffce8865e479498fe530f9ae29e01f98d4a2f7b665b6a9329450b0fb6ffb1
+Output.14 = 0d3d8c9ff86fb56bf362787f474f838066fa7483a958c23f752be6e21cb42fee11d8dc53396508f9fd5122d04e41d0e0c949d50c46d51d0ac824b6f46b5df088
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 21a53c17661aed92950ff4fdf4ab8fa5dc44e99f88aa953e19b4be78ba75f267f67034a1566e833e
+ReseedEntropy.0 = 1ecb61a5dd70b167d65577415c2fb812ea20b325d2b53158697cf97c81d79e8499f74540137fd1e1
+Output.0 = 11a07b2231916f99c3f7a07d1451ab940d2d663c9729c1857170a31655078a8274ec4a9031bcfd2abb1ae5813f4970a716e3d14287e4f21e01323fdfffb76187
+Entropy.1 = 851a849e0ab6c00d147188d2e8cf01bc50d34adf22ec810ca968060281f8faa643064281e3fa97cb
+ReseedEntropy.1 = 9bf4c8d0a898865cc1cb0de278fccb756283e6aba020a484876d279e41310558159fdb0a3c88f7ac
+Output.1 = f7d70ad6776785497f7df3acfc2421b14e4e76b64585afddeff3dc739b851caf73b85503399b08153e6df73bdb0aa3a845e2cdfedd724093b9478f54afd1adfb
+Entropy.2 = 648f7effb331ec30ced40398ccf2343eaac885c458ba7ab70b9f0faa9180a9a0e34a130b422c5697
+ReseedEntropy.2 = cd13b1c9d95f2584f85501adbf5dcf1e78c2d3434ad6245d3bae2aa4d15200e6f34babe763415849
+Output.2 = 67823e4a9fc6ff5f2a7985341baef16da46ec335445da19fcee9650fc02cb7512ecf47f8911975a4a9d39fe8499838862305f1e554ff8021abe50d9b66088c9b
+Entropy.3 = 9745700e522acac8002f7d1830842aee788de5f1612dcf2bf8ffe94e02b1d8a354a5528f7e011407
+ReseedEntropy.3 = 59c8a3cf8e09b47f6edbae251972fd225862672732d1a7c06785c584f739545ffb65fbd39365cc4e
+Output.3 = 9259ed9bd844cb401c8e55459e51e160126dd2dbe64a07606101861f1dc9ff20be87ebc63a0df0884f4b39cb1d4ac6ba26df50d983862e4d27e570b2d503becf
+Entropy.4 = 4aa7e82f47feb49a464f68978c8f0a8c2fc408496ba9ff60b2a230abea8b90b94e55179b73d9e235
+ReseedEntropy.4 = 429a77d15c1841b8e6d6510799c41189531b749fffc4c11e90efb8f37b718e25e3460c4bdac6e2c9
+Output.4 = e4d58c5caa32fd90d1d6c25ae14f3e568c51a6ea6f050c1e575089694dc32d7ae69fc027a1f3d46e1880ecc9aaae5722da47969dfc67d4e02dc250adf2a3fc2b
+Entropy.5 = 7d69a79f3cca619d4679e73f6ec76a728458ee24bdcead4f2673206770393045dfb132582d517da4
+ReseedEntropy.5 = f7a7624eb8f9a17147b6616442f35c55ba3b1ecacc4a9a5167eba1e72ca7dfcb43cdb3e1458f4063
+Output.5 = 20d6904e050ecc44bf9b76f12c2038c57ae8b404168b5119fc72ade0e82a0c97a6c17cda3a3d5c3ef8540c17df5e41a98057055fea2210609d48e1a805c0c11a
+Entropy.6 = 1fce32e3bbf1bd9edc5a8e2e6f6efbe6b552adee98fead0500f31be85a0a04eb9f5221358ecfcceb
+ReseedEntropy.6 = 4cd4d5fc1a9a9133c46004c1aec7d88e702673eff07b681907bfa643736dd02e6309fbca1dc7611a
+Output.6 = c5333e4b92d9700a44548a02dc8393b3eb65d7f768b3299fa0378b7462086f6478049d924753c6c166de6011a7fe1a2d84bcf3d0579f98652b96c84c57209d44
+Entropy.7 = caa60c6ab965d1771fdd26be454a9a32f76fe38fdd8fe4dde878e94ec2a389e7200138d40a2ab4b7
+ReseedEntropy.7 = 94009a73623fd0b5312858bbbd30baabfc4f1fc115bae0e8ef2cb7ba82b31afdb73d1ea2f635a4df
+Output.7 = f9bf2ccc842c0572d418e838f98a9898f926a17d6a90703e01109251b564ef8692fd339f7897867abb236d8694b2404a56c812d822632a7f4d53867524e84f13
+Entropy.8 = 815de165ea4d090bc2668516a02a55cbf7de82fc2415edb6961f4470bfd28cedf6ce293bf93b9929
+ReseedEntropy.8 = bdde9f2aeb37529e9531792f7500f4c024600d5aee8d11f9a07eb64c3cfe51b876ddd68c17649c82
+Output.8 = 840d9c6f290036c7c5fbc5a635fd478e009d0c366509f4f516c78c036e47cb4f8fab4bb3f86597de669bd1c9112d34f334e6108c3fc8ec5f9974fe281aceea76
+Entropy.9 = 1b4dd0a25eba837f1cfe032d7fe69e7690b2a6f5a772ffb72dca9f3d36444efccad4363cadff439d
+ReseedEntropy.9 = fe05868358620c88247681ef9ea9d17ffcc8a7f9b6f6e19fb3f5346920eb401573d9a8d31201fc5c
+Output.9 = 9e4b60a3a351d22d20cb9b11e63c84b13acb1184c93dba630f1ec71dafe72fa505b910e72b521090b4fcc469352987b30f479d08807d55b2f20aed6f91d9d3cd
+Entropy.10 = 6dab722a73b797c2d53f40da0e76e6f676b950c2de82291a6f570bcfe8b620145242302da3ec432e
+ReseedEntropy.10 = ef7ed560311946ce557de39b5fd490253f43078c3f826e191d979eec82bbfe0e5cf2072f90e3add9
+Output.10 = 0b55e6390705620d4e1d1820559e739ad54cf4f0ae7b3bed52f39500e06a693ad55e42d3e179bc670ccbbcfdfa2fbb3f2174321999bfdc8e43948a25015338bb
+Entropy.11 = abd724324325a1e0c2ec0fb653986c0c8f92ef220de56db4f89258e15892fd6f2cc1bdf3b9ff8aa2
+ReseedEntropy.11 = d39a8484cfec4369bf823a6b461ea0fd18002211ac001ff09124e9e82cafd5543ad13ccc1403a39d
+Output.11 = 28a87fc2161c6dfaf982aa5e3e88bd4c1e18993719dc3e629105d0b8530ec3a2a29358316dfe2dc15b2c46c120dc3b8570a28567d4ad339744fa4c0661602d06
+Entropy.12 = 575ad8249e9811497fe8063414693081126b1afe2317ae22d15b9d732c9e147132b198ef23ed5b21
+ReseedEntropy.12 = b3a1f6cde3cfb6328e172121fd431cdc3e0e80aa637cee208c7e45c9ef65265a8181ea42b2667ad0
+Output.12 = 12315fec266a4bb255e759193b95233ab180ee06d2e95abd8d51421d614eed6a9c0f34d140020439b9cb1c844cf9c28ab32458a9f09685906ac9c99883ca3605
+Entropy.13 = 55e77725c4551d5c54ce5676ba03e8221a840db8be568c508ad36899ce8f568d781f65d0c0bf6e8d
+ReseedEntropy.13 = 9333b07ca2c1b8f2aa0da62bc514cef0d536cd118c837cc4092d9a95f2bd6d5b698b938d53d1b20d
+Output.13 = 030dd4ded2b2340852e7dca1aa5aa18ec047962cba9d8664280e82e66f25936e54f7c2edb5e801dcfe60e77b552e96dfd16753d85416c11b837f7e388f01192e
+Entropy.14 = 0e681f881afa243f5de75a046205f733a32a1bb39e2abd057c07d8d5e81589d537e12d71981b57a3
+ReseedEntropy.14 = cb16a4907b39f647eec2b388704d6a2b89836cdd8d1c0c7ff27cddbbb0d01e306dbd01ec58334700
+Output.14 = e48aab2c01335ba4f6d377c3c993932d4fe2ef60254eff315491b81acd1c22b3a33c59b8b78c479b7cd4fdd31f7d15864a48ac706e32174de36f9239aba4b6ad
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 6da670b6da135f77b7fb548e796471573146ee58c207b3879f8d9f50332346cb008a18afec30e4d5
+ReseedEntropy.0 = 6359ab8727784fe133554be87b364e9e26184250fee2d99662c45b41b6da2729caa61a1f7b1f4ae2
+ReseedAdditionalInput.0 = 1a194e6f49955f018447882a48bcb20beb411f886a9bc3c5a8833ce6f88c3739d79f54a4cf4c620a
+AdditionalInputA.0 = 0c887848a46c45719b0365ca6f2b1b800c39a7d8ab15f4613fc5a9143e425a331fec686ecaace5e8
+AdditionalInputB.0 = ca9c53a0eeb521e8389b9e95cc17321d3df1ff774aae6a112bbeb70bbd4111252b65387d20380971
+Output.0 = 3ae80130214971bc7290440ef05278ffc6f01234ba935a742a48c6e710a755782a1ceb347e0a14a2a391b5e37aa7c14c20e6d1baf1441fa50346e33f7a2d0941
+Entropy.1 = 0ccc21280b7c1398435f6aace99addaec7f87a927bca4417893ed8054e76efe35055b2b5387db52f
+ReseedEntropy.1 = 3e8527c8d77ed8a4f52f31bf0edcf9a31c4f1de5e4e3cb5c78ab8d636d0dd8bcbfd2b64126f83feb
+ReseedAdditionalInput.1 = c3bb4b5e8f2df5cc88b138b178f935a1bdcabd64b46eda01dc009b13d058f614e03b4f70d72c1345
+AdditionalInputA.1 = da268724b024429ae2281b5f18b040398d09c850e22b2ab1ea759b4ccf5d5b6246f3f8b7857e2e14
+AdditionalInputB.1 = 027bfb02319d2bd03334e0da36e1167736b6d94405a5d56865dc95cae9bf930ba2da12925bddb82e
+Output.1 = 9dac78ad7ecf990587d70504ca5ac2ffbc48726cb816a7072575e7a881469abc7043123b7be1e787e1955b1d7e56ac766f25d4efeec218a52f5cfdcbc66b7a02
+Entropy.2 = 5cf7ea69739d540ccede0771c97c6cf8e1abb96ad390f307d983b0388e8f692608f15122a812c065
+ReseedEntropy.2 = 25269469020e6a838b865da5d5e77664b0cfa359c5abc4fa4d85c11e806c94c23baaa16f10571c38
+ReseedAdditionalInput.2 = a63498bbe0990569ff439652d7e2f8a38b09cf717d7505aa2b2624264e81419f19572d77c1794e84
+AdditionalInputA.2 = 97e75e123ea37f725a1981c8113845cc6ca85e00e050763d9d81a774068a02d791bae7bf6561e602
+AdditionalInputB.2 = beeeb3fa5554609eb482b85ef5c71247e2e5af2db44f51519455a94f3541215e65cf1a752436241b
+Output.2 = acb4953837854ac4065cbcb73cfdc10485382daea491dca8e861dc033ab9cdaf832ca657608a2a7ca6ac009a4a12308e42a06591100d981d56657167124ca59f
+Entropy.3 = c808188a673fefb04b5bd6345dcc645f1ea98fbca5bbd7e4c93010210a248dc138bbb9938118700d
+ReseedEntropy.3 = ad1d2d49f45a70a1a5b9b364dddc1cdaedfa1b331ec9206d12fe33efc313abc680a94e404caf365e
+ReseedAdditionalInput.3 = aeb5d95888d36be69ec8caf83058f289d4877d54ea2910dc777ad58abc2982d634f20545c4bf453e
+AdditionalInputA.3 = b1c9b5d04aa692f3e01e14f31888061e040af03991923683923acc1a2d718434e245c11d3af2fc7d
+AdditionalInputB.3 = 3f6f599e76fe68cc20622973873a0768cb81363bcd1554acf5b1e2d3bf9eda3efc5db3bca120f89c
+Output.3 = 447e798b8b16658e07ca04def63a72a2bb27926c8e49e4464d82783c69ca4467d1f599a982a7bb3698c0a02446bd3ab42e1f97dc287641b1cb614ded2bf97f83
+Entropy.4 = 71f96f3221eea6f0288f78308a142ca2d84da6dd9f9f4af72b22bfd72e1902866625a88b493edf0d
+ReseedEntropy.4 = 3ab0129955b5fa5ba4369487d1cad50b2bef646000e4e8ac5bf83fd8df54c572f7a8901e7aead763
+ReseedAdditionalInput.4 = 8ade694e5c68c13fe06282a89831bd77bb68cd55b6cf03dd133836bcec4a4de8ecf7b8f943e755be
+AdditionalInputA.4 = 9c42e9181df5f1ff0b51f03a56ca3bf697a6e2bd15f2c3421f8244c821a55a17fbd45260836cf4d7
+AdditionalInputB.4 = aae4b0edcde2fe4e31b426abaadeb3e6cb5d55bfb12744243caacac7ce50cadc84d9605ce43a7f2b
+Output.4 = 57312a0f7d0a6fc89f9bc2efaca3f58d718beb779160b5d5eddad23a13765fb3685028da92b1eba73a2e7155cb7b35fb124a908abd2861761315cd38e83ab91f
+Entropy.5 = b30ae44cf6772cb8fbc57d0403311fd025848c78a0757b193ca67745e331823ed80eace3ef8789b1
+ReseedEntropy.5 = 9e024c5fb916251235abfc41c0cea79f86c1a8e1caa84be867a24b8ecbe2fa6fdd51fdaaac295686
+ReseedAdditionalInput.5 = b87c08dda7d6fae65adf873d9e570740551fe1b9925888f3ebc1ce09fa82d40649f9791f34b2f1ef
+AdditionalInputA.5 = 5d0524e9f003b2dd450647ab1b1fea6671792ea2d1d4d2a9eff901031b846c465e9d97c5a2e5eef0
+AdditionalInputB.5 = d62255cd5eb09911a1ba2ca774c45f96bb4cfb982cd0f1e988362e3f2eb98118cf0b3290e37170df
+Output.5 = 66b4a2d9814d75e57782f2378806dd5dde799ffda4e3e8214889c5c51cc67a357cfa07c347db5118110941aa0a6633b6a3f22ba6f4e83f3444081e037f216aed
+Entropy.6 = af195e63fc06b01a27372b7c668feb678d54d1ff09219d1545f9f05557aab2c6c81dd87a3fc86b5a
+ReseedEntropy.6 = 560110c7b03aa07d8635abfe69f0eed67f5818c549574384444c919cf84261575037a7c703681b19
+ReseedAdditionalInput.6 = 6571c535b31720e908ba48845662c73ab335902cb4d20003d56a3288b98b55e4ee63ff386d557ce8
+AdditionalInputA.6 = b0c4f8c3313ef80623fe2199180edccc7d0b15b30422faf309fd291db667f36a22642e145a2139d3
+AdditionalInputB.6 = 44ba0584f51dd4c493dd220fe02d9c8756d396f65db2f56c2f2ad23435746e08c2e8869cb76cf879
+Output.6 = 6edbc87a9da4a00e81d74cbacfaa1debd1222c530d3916f042e19467d2d527cc908e74c8762906ac5ba5bf5d757391a921433f080b61c4da6ab3abb62f3bd59c
+Entropy.7 = 29c8cb5446587d84e6721f13a12609d497bca686982e585eee824d160152a3ecf67a578eb3700217
+ReseedEntropy.7 = a8d4e81e5f8a5e47920f67f5df347eb3b8e93b67381b2816d304b919a8d5b61e1e2bc755520185c4
+ReseedAdditionalInput.7 = 13deb00bbe24d3975bf0c5b19a160296b7fcdeaf804c784f623f172c0dbfe680eac6cddec5f6b32b
+AdditionalInputA.7 = 60d921a3a35323b8e2cdf11a30ecc620d5ac92ee036d37fda83ac6215cae5847cecd463425bc7ef9
+AdditionalInputB.7 = 3b46aeea56795e270524fa9b2f52aa4a5ad7cdde18279feb6cdec9e388a74f8e9f069e6739933316
+Output.7 = 84feaf90f9f0329938ad17e67d876cf9cd7e83c0cac795aabf311fbd090e37654d503ae38b8f5a47981bf78daabba07505ae878b3d5e6153fadbdad82a3fbe46
+Entropy.8 = fede3dd749e6a43ebef037c47241f6bbdcf8f5bda6f81b2fe988e1cf7b1c466a9f944503d2ab4c70
+ReseedEntropy.8 = 5ae4956320d742cb5b733ae13dcfcbcbafee3046f7bb9fe20961fcf3a37e9b40f211c618c7f7f4c9
+ReseedAdditionalInput.8 = 96a27b0759a3b8a98c1723deced5ebb75b3dea78bbd45665543807451d60a3038dd3a64bbb15570d
+AdditionalInputA.8 = 251fd847996adf576573976a959e7ec2b27c43a64f02296af595d0674fc4cdcefe9d2b99e9ed794a
+AdditionalInputB.8 = 79bd72d961cd47bda4360b07101c11dfffeff5f7ed98af23c07a4a1b528a5b5f63064c16e2fd299c
+Output.8 = 37172d1363ef96f0ab422e6df0e3160f6cfb202c982d5f1f1438b699f2529610c232cbbc26fce9d1fd534e2467ff79bc16203ad51b8851e37c54feb3ec471c02
+Entropy.9 = 43febbb0e255fc22487e42e9c8e99f39a12647122a6bccac8a1f9c1392d0c1318a3c88075db90c5f
+ReseedEntropy.9 = 949fe12548e2238111664f87bc82f059c4b44d89c4526f7b4dc433aa7daede680192e6f0e7e5e4a5
+ReseedAdditionalInput.9 = 5d637e1b0bfd8ce144b8a2abb77f2375696cd849d9958ac320e9f3b8821d7f82660a179da23d78dc
+AdditionalInputA.9 = 72b54be08ef3f2b669b16af35f78032f9bac62ea9ee81469574caa785bb172e4a6c0426300acecbb
+AdditionalInputB.9 = 8946be1f4566ff649e72e758599bcc93b0828dc08566f46974efe3ff16e81e179631f58fea176f76
+Output.9 = 6ce817a6da4f993ee682ca8b5b7a3acf92ad260cf7c65c3a49a8877164fe6a3fda642600e46d114149850c6905bb88e9c216d904fcb4cc81e0ecc341fc8ca14c
+Entropy.10 = 3c80fd7d57dd2f477448951893d2da131f69913f3b8fb9bec994884f3bb1b2a641412c39f6f96220
+ReseedEntropy.10 = 19c121d7345b6241634871568fc55a896def1a4948a6d596aac4ef8748b03f296fabff7bc98884af
+ReseedAdditionalInput.10 = 8bf2dbbe53f2293042a4d12b584bccee01a838f4dd56eafb1427ed3ea590e708a84e70787ce091b2
+AdditionalInputA.10 = a89d029b51aec56463e1ba11740c192b1d6fa69ebc49068f5bebc644721970b9bf054f9dbfbba442
+AdditionalInputB.10 = 11cbb12b2466d24f5c17126eb8110e99efc663bfde920e518bcbf8d58f218db8e9b2f3c07e9dbb35
+Output.10 = 953235193f7d3ae17672a8596051a4e3c3af542989a4878796bd5cbed7abfc6b7b67683d3b9234e2d724732765635b0e3c35f0f0ba067ba442d6734d3bf781cb
+Entropy.11 = ae2108ea13173db84e13352373448da4bba9fcdd9c2f877316ad6f292596850a1536a04c3de9637b
+ReseedEntropy.11 = c7f37342a10e3dea83eca49f460581131aaf260949a68841a790ec827386ac0cf94e75dacd38c201
+ReseedAdditionalInput.11 = 7ec1693fd66ed9f74ffdcc623da08cfb17861fbded9768208e914a9fa6fca79ec8743a6ea33f3f17
+AdditionalInputA.11 = b01f35a9c7e4d4617742629db69bffc3e2365604f0bad498462b25ff2d10878edc15e26a7151bb89
+AdditionalInputB.11 = 3dd210dbb483134adf4140749e1c622dcc7b564f54b9820ce863bf3f2480490b71a5a81f526c1432
+Output.11 = 32f800f4e5ccb830a939ad74b590d9b618ba89a5ac42a6923a02bc2479d61b7e4731e82cf0914f428b2d7759d91097af70b1f89dcab5a0652ba6ead5af8b883a
+Entropy.12 = 7a16df57893dba058d866d2bafa98f6046342580df4a9cac9d32ae57445f7b74d69a959c2b08baf9
+ReseedEntropy.12 = 265fbd8cc98dee9b513bb0a2133e1e1a25a2b2024a717d67b862de2ab6c13a0f2a180022c3bc67f2
+ReseedAdditionalInput.12 = 6c91d57bef429cc955a6e02c27e7cc3b0a3bdc74757a65b8ddb0d73eba21741c63d244f62cf67d31
+AdditionalInputA.12 = 0de0ff92fe536a527b7a47527562f57ffe6baf68d3d1980e83c6d44f3659ba86a4d4e2ea84a02281
+AdditionalInputB.12 = 5046713541dd47be93b2040e2bc8345e27dee56d1ee60361f735b55d52fccf3ba2bc9ea6dfbb571b
+Output.12 = 8121a5fc3c26d113d6a61badb46ae14c72bfd9c989efc7e632d05d56bcfeb0b3f5939826f844460152933bf595f3c6c5d46dc3ceaf88fd7272fd1f8507f47f1f
+Entropy.13 = 906c6a9a68018bc179560992fa9a34aa6e098fad1fd15b762987a7de36b7836f3ee9e3bce990fa6f
+ReseedEntropy.13 = c8c2e129123a91a7a21b4ccbde61d7698faad26378e42dd7ba5f5252debe43b2f940718fbbc0d65e
+ReseedAdditionalInput.13 = 58a7a4cd2b1f08761a99f3843263693bab12c176442f7359070d07b8adf147ea41d33393c19724f6
+AdditionalInputA.13 = e14a9e16f1550817b752133e0d97e163d227ac503b0eece5baa1edf281d1ca1fec18e7ca9cf9da18
+AdditionalInputB.13 = e4af55e58095b690fec87b178f50b77ac6876e82e6cad2126d94825582b172a868e1439e0343fac6
+Output.13 = cb7bf71dd3987fb0d97430ca484c8b00735aa59313409cc41e818ff8bb4a17c90242eecff33f30f02cb31d5d06678b1a0dc5b721cd5f18c93b925a4f84625f6e
+Entropy.14 = a09f6798861a55122ba4c8cab018423233181e32b5334298428b01aae3055a713c311f6da349c4b0
+ReseedEntropy.14 = 68372405405f21af3dd781f19bd54d5e275cc865e6bb014c7c509450db5690e2873ce63175c44f3b
+ReseedAdditionalInput.14 = 35001a8ff2457de5313f058e851929684f04023691777b73aac77f724a8a1858c07714c6c3e30075
+AdditionalInputA.14 = 37ab678301ab45deca791b4c5b1a792c5422f2e3be57bcf77d92468e254d2d5104fc762cfa342269
+AdditionalInputB.14 = cb7a6611c7fd8ffb884ab41766bf4a57878f187dbb09d7b0e77db4ed2ccfbcf3c640a9348dec4e1f
+Output.14 = b194fd786cfab66885cfe7b03daf642dc60efd7399f6c48d3df50337b40c40349b94ca509053451c34d6b838ce1905b5cddbcf5df1be2a9783404bd0b72b523d
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 9dda175d9f26e56b9449bb0c9d022c47138ae78ba38c35d15f2d2c555d69d4d6945a57ae39696252
+PersonalisationString.0 = 089430cf996e06a0dc3132c8aa6e3edc7651ff4f01e7113ca3ce2a215e10ec88ad7236b8307c8569
+ReseedEntropy.0 = d75aae1b7bb49b81ff43a8e89f7b0ccbf6f6af4647a557f76ed73f09254d67ffd7e3562986862300
+Output.0 = bc80627671bca267bae1a0de9eb9e481d83b5cade6e3c5082434b0b700f315439c2ca2e9def43b1bf20584577cef5b61c0681e4bd440e88da379a0214cf5f5cf
+Entropy.1 = 173c24d2f5c41957e416b6c066a5add4acd1fac3a9b55d945260f5908cd5a136486392b69037cb48
+PersonalisationString.1 = e62431eefcd2b57c7439e4db4d3d644de79e56c52a7fa9ff1dc0901090a4c4a37fa82fae4e3200ed
+ReseedEntropy.1 = d07db80b046495ce436c4aba6c6aaabb47e7610963930a18477f4f5d26cdcff8213b7fec69cbea2b
+Output.1 = 09732dff5d8354e58b8778fe1ba1328299b106eb7d9f363dc1f6f13030dfcc068b900aabbe4f0eeffafd14f83a18333e61cbacba338742e4e6814e920b875df4
+Entropy.2 = 684b47f03f357aad28b305fc9ea1902b45016e3970897d5eab8dd1cc3e9d49d7b8d6fdc3a1074c2e
+PersonalisationString.2 = 3b2bc555281c7e4c9b9cc61b468f2795a67048c44e078b90bab8252077087fa2d2ab61a446ae3d8c
+ReseedEntropy.2 = 481ba2f9646523472b7575bb8143ebcf87dda97e68c0377edf24bf6ffc7d9337a1a33c74b65a4439
+Output.2 = 84e42479f396b39ad3b9c91b5ce591d34c6179f06ef3e7d4022d6468f4c4b6c80ca6f8d20dfc2c74474445ecc14f995b080321fd2406909a6ec5608c21867852
+Entropy.3 = 1056eeb9a8ea891ab8634d859e59a03232236ea40a6f424baa47d040e95eab9c2fc7adf73989afc6
+PersonalisationString.3 = 9f0280db13a803c11cac66484eb5e7312bfabecc0b80ece7318ab4939e769ff0dc15f267ad2b4a20
+ReseedEntropy.3 = 8313d7e7dee95047d7cc78bea6835a5fd834f66a5c75faba80b5a755233b03f7f68e35d4a209c8d0
+Output.3 = 33d54c4f5b5045438dfb1ea6016f3967ef1f62df2b4171ad745598ea13386ca2f1e7b155c492c9ae78247cd0bc1ca8fc3bdc18b7a3d82a60f2779e569c998826
+Entropy.4 = 3beb2f4628ab569980e227432f6d0899836ddc276a67bdd4c74092f61468c09a82c82a79b61fb724
+PersonalisationString.4 = fddd8a678cffad03c6885c33873cc4f6d0fc83ee4536ca873fa31dc10a1aef8f95f20e05cd25fd2a
+ReseedEntropy.4 = b772d2647018574d8833b4feb2ecb6d38d09e455718bf6cda830eb19ba6bc0e7516733dc2ca64929
+Output.4 = 9436c34bcbd74fe3d6a89b3551cf569cd83479eb10af3192a314f838fa773cc57ea042fd9cecb2923d74b4d0ec20b0a9d40a2ac1d73ac141f5651d102b4b92fe
+Entropy.5 = 975f1b2829532ce372f1944a94e648474c424d366128d6bb683c7e80cea8ca489cfb606eef282bcc
+PersonalisationString.5 = ec2205dab44cf2210180b1a1ead99fbf4d500a61ad64781c1a7f46e0a3abe909d3cf5a11b0d7f762
+ReseedEntropy.5 = b286fe71323ef28f928a99685221f8217d89e80a3836c740ae03a75db816e9761fc376fce5e99840
+Output.5 = f8b985b483c9f896936dae05822f99605bd485fe36d406ea4a5f001b1b67be083e92500af189a406720ea872754e2edbbcbf955e48a6f057be54b776100edd07
+Entropy.6 = 8a67741d38a3e766f5614d2f70dc0b6a0e65bc2613dc5bc7c095372e3f1bec5558b9497b5b0b1bf5
+PersonalisationString.6 = 0acc8a38bfe2184d002fe5b2119005b0ca4340a1369f05d6f646daca0caf72c753ce7e90ce7c30ca
+ReseedEntropy.6 = cf928da0eb64e5273f2e1e443b3d55173ef09b9608487d3045f5e4da5e2d515a5bc2c24e3e76e673
+Output.6 = aad67f684468105b48bda10e34d86c90c853f34cd593f9d87b3b7b612a567d8712f06aa3f7a50d4eb6ec399a7037e5749338dadc74364b0ae7398b3dd4088f37
+Entropy.7 = 38e4f9d395667a3eb1f867d7fd2d5958e57d04903fc52a260a1dc5e16c09fd3337454941f38b68c9
+PersonalisationString.7 = d5c716a67c4c41d532de026db3e648512a8a53ae7754b22e7bb90f86a499dee42e6e3cd4184fda7a
+ReseedEntropy.7 = 8ff89cf9b4b53f1227eeebbaa2bf7b65880a10405d86758a5a15f39a98c0809279c29a15aaef835c
+Output.7 = 0cd2a6d081cb819bb3b7b4ee5cce2fcbbd6e2d0bc2ac7ddf1b74eb515413fbdb6b97eb03f71f2f1079a59f158d0c05832fdecdf40948fe2fd724e2c290d60f3b
+Entropy.8 = f95d714d5da51e994f718f4b434be5c5a26580988ecbf157bc2f21b887eef969d8628d13fcb53732
+PersonalisationString.8 = 2db9c5f6a12cfaf16940658a99572f9c6f687060a1440aa5cd31bf6f219f6980ceabced2f3621331
+ReseedEntropy.8 = 577f4bf680c0b0f444fcf27d4993204cd16a072691288f7f5cbf3247db32d1c43e8aa1d55d159ed1
+Output.8 = 15b7562847083ee8f429f17ac807c60043689dd9008288bab1bc3b00d96a6f77f3cd696cfe1c4228d0da631945a065d8925f0519dd4108256fa7515835aa98bc
+Entropy.9 = e8a784d951dd71af6db0c2b9aecc11883234919ed8fee7e9cb4548e2cc38e47553655f7b3e0a096a
+PersonalisationString.9 = 01c1a2dc29f87e6e57cae5ecf538004ac0842c6350ba6b5f84584272fe7550de11da08dfd5c549eb
+ReseedEntropy.9 = 34b2e89626513d370b809f972e08f661036e19b06024a40b667fafe5a5dda8d65559b9a05615f750
+Output.9 = 6214552b58455876a58724558114c5544fe0475860e16a015131590058f22d6cd56ae9817a5384370b86cfcc24a388b6f248d1084bc76550819352915233182c
+Entropy.10 = 6a43edcc64805dc78e49749c857f1f569eb98ff3be7a6e3fe907b95277032fa8c1377a6e91f3c33f
+PersonalisationString.10 = 34431dbe6e8f42f0e6826715d3016ddb58266ae786f4af60edd1c9a21e3e69fcf0111e2f7c8d4606
+ReseedEntropy.10 = 9444160569d4e6a3d432116928a9438b7fdc7ababe36a23445fee9603277f07fafee45f6de6eda78
+Output.10 = 976e6e5b4e57d205cb0600f6adaac513b80330334d5538a2e0c47ac424007dc5d446f109daae0da75eb724e5cb595ec80f50609f8c6a93bee561bd16aaa3f5ff
+Entropy.11 = f2bdb401efe8c30161cf1ceb6aaf40672e37836d05ca4aa5eb3893f07036738f2a94946d829f043a
+PersonalisationString.11 = 2dfa04bc88eb8016b841c6b5b4f02e6d680c0f9446ca238da1de96f58a1e779fbdf2f0a998334ccf
+ReseedEntropy.11 = e27e0d99e384eef6469bc34f742ef97bbc62a03a2e1b4a02f88383f0380fdb77e6fdb54c9f3e6f0e
+Output.11 = 34c73a18c78258abc45414f06d8c2fd6f6f27c20a01f40c53ac7c1c702f208c68f353faead3bc585ca18f934f6819419dba09ca717ef10ee5afdb4c9a994ab09
+Entropy.12 = 5135d6b3757664bd62ed615e89d55c31cbc7c02d802c69760425572bdd109ade87fe92c43069b105
+PersonalisationString.12 = b184cb3910ca937678ca32b7178be8ff5148e3d905b219de7209326de1c429d9b70dfba50792e1db
+ReseedEntropy.12 = 2e1c3a0c36328483ddd070d23fbe277798f1db7525368a93ae9199adc8abfb99692d99b7045e1b36
+Output.12 = c25f242aa9ca3c3a490253c527c91d139424e71045239f63858b0a92f44cad547458d54072934cabf04e8c3bfefe67f98aeda71ad65218114ccf68d86fba8fc3
+Entropy.13 = e3bd626949de1472b1da8117e92eb52b4fa05b050dac40cddfc93d853f5e5003e4b6c9a8be7279cb
+PersonalisationString.13 = aac34345ed2f468b62e165962ba3931d7b8215526e4132c02835aad220d340f318836ac4f52857ea
+ReseedEntropy.13 = 1f064fe59cd268ab33323b306aa9156e13f63ec1959422b00dcbb55222f0a28c702b2acc13443a94
+Output.13 = bcf7f756371b9a4eaf9a644d9c67db2e188cf70a12871cf9cc54eada5cd530e60b015b4d8c2811f7b0099aac102658b9ceef3d896c6db11ea5bfc7d0dc1a263c
+Entropy.14 = e4ffff5c4c2e1e03725a9be4a9100957d10103d02901bfeaba3e26851d1b4037071986c049283084
+PersonalisationString.14 = 003b5e534bb565f4e1eacb22f2a2a65093dd0c782a27805f0c4c4b46c72791987fc07bd248138808
+ReseedEntropy.14 = f2c16713da96ef435d96c63fbbc57d49c44d99c679c1af53a12cadea98d31981a7d06991efeec73f
+Output.14 = 67c409157d60f8703da237c4c8b4f124298bc95f68cd5510304c2167145fb7c4beeadbc6d7ff9b261b420e93cf9fb135d9946d5f4c4829557e7dcd713143115b
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 5348166bb511af51da93a4221d87071cd3442b7e9591443623c7a7491c13ea647f2083ba85518bc2
+PersonalisationString.0 = c7b9fc167f7655ddce82fcfa91073f839001bb8bf08f5bebeca577e6bc1bd88382d30e0cd9384ec1
+ReseedEntropy.0 = cdbb99335a947e0a6fc435f34b1a72ee2ea0301f0c579cc83cd2200dac5405f54a32d9d053b41a25
+ReseedAdditionalInput.0 = 1b3831916ee561322acf6e1fc5204cf70c7758989df508148bc3ce0311316723d8fc50cbdd4e3651
+AdditionalInputA.0 = b0befccffd69f90b7c9971f59a6da18cad4b9223d78c0757d2edcbc4c10e4bf599744990692f8e4c
+AdditionalInputB.0 = b8e023e964b4287cfe96d0666db1ae60b395f869edc8920560adfcb45d442c035d75a01562211d17
+Output.0 = ecff7d89fbebfdb10baa849977a9e551b90a70c46dd3f1686eb3f1c767882a5ef68d385018f07d84f76b69fa2724c4b3f134b6c04293f2573f3e9b28c91c462f
+Entropy.1 = 1d9aa6382dba7630a88cfb642f4bb99182a3b5ab0994fbc151c377d998252b546dca183569ce3974
+PersonalisationString.1 = c84fa83558cdbacd6ddb6cb01ef49a8c5277ac47cf53be9e0ce81a809e0f28137044c05d48eb0fac
+ReseedEntropy.1 = da5c24c18f595001c3e9cc4e4dcfe9efd1f39c7ac5402fcac549200482a09041a4239ec9681aeb15
+ReseedAdditionalInput.1 = a60cb6442585c87a615ebc3ce8d0450cd14ca750d34196c3912bdf56f55e5b10fee01008dc607176
+AdditionalInputA.1 = 41a23966315751df80470ee1d9528a775cbed52e15b279709548049b02516d6adc67e319f62cb48a
+AdditionalInputB.1 = 9dab1d10fe9ce96e9a0c254f4958a15f7d3b688a4406f5b466148b6afb1cb41e9478c917526cc22a
+Output.1 = c7d50ec62d1f4cbd3265ece8cf9f4e0786ef736c5774b58cd60a2e8c64ee9c91b2dbfbfa6e6856c87a52913059c521ecf48fb69dc36ae21704aaebd838f5050e
+Entropy.2 = c636c3deeafc9d56338f71a228fdab537d5aa78034309b71eecf0574ab09a57908736bfa1e6bab48
+PersonalisationString.2 = 2aaf5e25942f1552fb01a691ded67905d6e3438a1e21e52508f7c55585a9bb6c650ba8f9777d2f59
+ReseedEntropy.2 = f7d1bc0a3f7180ce7271064ff7c4cda89d76de049a98062583c39a6dea6e88b5b12cfb91b0c1ea42
+ReseedAdditionalInput.2 = 2cdddaa6459d904af74ce043df41137c370ceaceebb1bb33ca7ab289fa87d30f0ae6e12ffa7f4ffc
+AdditionalInputA.2 = f9f4701cd3b0069fa8716a5f9d13b8a76cd65d7a32ddbfe5a66d6269e17b5a0b4f4847227d29e559
+AdditionalInputB.2 = 23eb8ba925880e2804d89975f1a77aef4ba616e366f48e3751f28041a3c09708a4f711ef7762b907
+Output.2 = a9b483f30f614afb40b04a80aa31f0497b4664a252edf5df6bb42a4fc4a8b9f40c201610590a781cf56b82f5f17ded2d1840d21d32a69801a4a4bc51f49e5aa3
+Entropy.3 = 5b05de111c19c4613d0dd3cf35813abb866c4d470c53f2e92e45fc737ca5a5a3380f6c9a81e0a1d9
+PersonalisationString.3 = cfd1f422261e47d5929fb4b7356ad321ddad2d5d343b4fb494e8a907484f2c2a962da799091438c9
+ReseedEntropy.3 = 8a718b9dc3255450fe29f8c364bdd1954d642126b864b3877c17dc18e358d0b92075ef0fbb165ce3
+ReseedAdditionalInput.3 = 8da8edf928f117622ba7c6c58e2e5e5d30184fa111cf02b3614633fa6c18644003a61e4f49110ceb
+AdditionalInputA.3 = 57c8c6fa5b4afe592ad0157a8b39a8365ce7f36f7954e9a4deafccd5212a44c731df152b6eacd332
+AdditionalInputB.3 = 34f134fc42f40ce80139caa3af6b32dbeb5034d21bfdd066af1105e55a714cdefb760532f54ae351
+Output.3 = 4c044601c970131b2ecbb329ea41198ea5f0f8c914a7ac55aa18ba0414217fcc11d0f7cf9b671cf75d489831599cb2e628b82d467711ecbb2271320e4a6beb25
+Entropy.4 = e7de2c5a3d5b929fd77f37777566905252563559663bd7b4fab221975861cf0d2c11b0eb460a58af
+PersonalisationString.4 = b05bec0e2d430262c82625cb745bfce1008be4d263c32b506d04af6c46f0834cbe536ea7b0a0f1a7
+ReseedEntropy.4 = 18e34de99a3ad1b4eaebc14a7268cbabddc8e224b7eca62ccd3c1e0065536ed626a86524ab7a658d
+ReseedAdditionalInput.4 = 29c97f38a85149b7231171757c646600d725b9f7feca30386a913bb37b11cecba6456965afb81c22
+AdditionalInputA.4 = fd256783b09a66657636af53ea3016af6cecf85a13096059a875d903bb24a118e66ad5e7d030c465
+AdditionalInputB.4 = 1b227fe89dff88c270c01e9f5b332d9062fa420230a0abcf4ca7172ca2a01e959fef54bd98eeabac
+Output.4 = 052abd8fffb51d8fbd69c00aa21c194bf6bf43a02138ce352eb93ca9c9e5986df3e8626882a4066660f49dd38d0782b868d1b2a98e84975dbd53b69a8e76c879
+Entropy.5 = 1288173314f752d02b4fc64422f1c29c0e6068d34d108ea222b7eec3bb65a8cae514b98b130fc584
+PersonalisationString.5 = afc1a8ba27c9b9279794cabe5b2ee72b24373a2c99499e1497c2de23a0cb9b5fd901dfe035e697ff
+ReseedEntropy.5 = 86dd99856176eb389ce16592ac3deed37a05f23afa15d5e796c3cd38af33021f94a13030dd755030
+ReseedAdditionalInput.5 = e43f444e8e88ee4a4f5c12982c1d8e8d1b11be78c0cebc5a5ff67ecfd480dd9ad2dc731d2098fea2
+AdditionalInputA.5 = 44fb6913c1f79b348af5b39483b68d9b9dfc3be886d845872a369a8a16375ba36ced34b90c375d54
+AdditionalInputB.5 = 983945870b05ee4a48879b5c16256f7888148b74aa3c89f1f58c1aafcfba2aff697c8216889bbfd5
+Output.5 = e0efd2e842c3ff7c8134c5ddf1b16acfa4c38b9f4f48d7233e2e9e8d9ab02caa2e8e5a3ed9dd267fb071015e04abe16f1c56a21c88381916556c9c43dcd019d1
+Entropy.6 = ee588c71416f5798132290cb88479c3c2945e62863f443a8789637ee45d763983445eb78a803670f
+PersonalisationString.6 = b40cc96e4b9239c139e840fb7a17a4396b242653e0f8a158d283aa7b20013085f10b909b04d1c28d
+ReseedEntropy.6 = 6d70a12775fd33575732bb668f34f903a30a5c1c33b91b507d75067e8624c590c6ee24f4c7a22814
+ReseedAdditionalInput.6 = df500313a44f3fb2223168e00dd9e0edf01947e6ff635507245df09d76cd626f02d0c21fe4886200
+AdditionalInputA.6 = ac3e89426f3d7a2b3bf3f28ac4470eefb926c0140693d2b8192d67a33ae3fc89507cc19cc1c9c1f3
+AdditionalInputB.6 = fdeb2105da79e4a4f8011ea62a3e5174ffac30e59cd17ab74c56d5c8505578e73c9e2e23b74a6a42
+Output.6 = 3d5f8c8fcea3b7f679e184065db74fc9cb2deb92c6b88cb9b544957631efad44592a699ab4a581ad9da811fdfc53de35268d7f94b9cd4a0826261699b0b8ad9c
+Entropy.7 = 4c5bc62ae86e4966b30af2412271b06a73d80cd5a3feee49896d7ae7a83f0214f970863706d91b39
+PersonalisationString.7 = 6caf8b7057adb47a2a290cb63930b98fff5fae62116a2ac66e259b7972e8fcc3f8aec71eb6a811d0
+ReseedEntropy.7 = c73e7508a1f10169690216acb76848b4f28c03af9aa18263b6341b1fa72a613a4f82778dafed54a7
+ReseedAdditionalInput.7 = 1fadbf638e29eff1ca4057bc76130b3c113be34fbd81cf731d075c9786c0b42801094eadff131743
+AdditionalInputA.7 = 68b0c9764de86462b6d3f5abc2ceb6f8adea42ba472c4db794bce2cd952b77dabde1541c95d3e7e9
+AdditionalInputB.7 = c52e8a374c05b123f17f7bfca510f32ad5aac12ac4c566f1d2a81d55c28f1bc3e9e06afe410b4f15
+Output.7 = ef4a8774282d1803b8fbce90a217eb26a2c46de23ec8bc0ccda795b3f261129824f3633639073c39c39ca4690d4676adc21628431ec536ab6d4f78809fc8ceb8
+Entropy.8 = aca4fb3f4c6f56a4126d4fc7a879b483a72e49bf7f3538e2b5a5a02f3584a9f71a773cf0927c0f33
+PersonalisationString.8 = 6a62f12a352a35ccd1a53e3dd99c74f2e5ebf0d4579416322f4ba7b99557b55659e0be670f62f8dc
+ReseedEntropy.8 = 895df42082a5f64baedcebd5e00b9a939ac8fac43e13210d5432178ff4d09f6ad625ab0be017391e
+ReseedAdditionalInput.8 = 5785ee0fd89ae5bfa876fca18611d202bd10acfe18611ba84d98b61cecd07cd0e40912397b08875b
+AdditionalInputA.8 = 62dc529198b9e83f7678ab67b84159504eacde8dbdbc7850357923da6372701ec9b481673da934c2
+AdditionalInputB.8 = 8c46e8c69489bd576a527c0f4e07dcb1e7f0802d0b2cdf3bc9e2f82f957e5f235516c0dfebc6626f
+Output.8 = dd13432a9b4e96ee1535dc9b57207e1cf3183f034e90b45aeef515f4f46117ed090e2638be662ca85cc73a1644f71f12cb380504e33e075147f952dcdae6b5e0
+Entropy.9 = d8a5a1ca801db7f7df8fd8f070342cb96614fe6ff3f0066b4718bfc7823dbf60a6143c1221a5b8ce
+PersonalisationString.9 = dbea8c71a41bfcac5da759a1c69c1a1a1af59775393abf0fe9cb780943662ec3ce0664ef6ee7ec05
+ReseedEntropy.9 = 9d7a88fb58d592477bef880a4ec17372affb6d9012a86bfdae3fc9a8d7c5a8cbfd831b26e115d961
+ReseedAdditionalInput.9 = 7bd9aa0143859b16cb7bad107bd4353a95934debc0f88b081942793b66ce0976756c6dbe763c1ea9
+AdditionalInputA.9 = baf34df3c42e3a63e387dbf9ad35827a7744c295b0b5b055041dca1300c2b26a03c235fb9e3701d7
+AdditionalInputB.9 = 27a3ae0bc37c1e8aadde39342c5bdc5cab21ddf63d2d2dc207c627b964bbab9ed567c5b00c759bed
+Output.9 = c7f0fbfb044086b4de2126e21058155a38ca2b3a537a832a40f6959a9db0d1d2e0ea58f111179199af2125f31bb630535ff51a6a08daa8213a9425d0a9628c9e
+Entropy.10 = c18c5cb07fac06407aa9ddf3b12ee26a19f18a9ebbc241f729be30a12739a5611735a7ca8e3a3d2a
+PersonalisationString.10 = ffbc0dd099fe14a2b0c6fd46000441c201628e106c4dbc294983e404043c73c7964a224f552938b8
+ReseedEntropy.10 = ad17f79913223cf2f7f775b2afb30b24e6774c03c6f631b9af19dd751ea990f4e72242445863d664
+ReseedAdditionalInput.10 = 2fd28826c4e023f56ee4c872c68f7ca62b9223acfe9cee923ab0fe6f4b271728e588a1d41b89a56e
+AdditionalInputA.10 = 8990d575daeeb308ffcdd1c862cd2342399dd34404ff8ebcfb490d5b372d90a597120d2bd91c7f19
+AdditionalInputB.10 = 357557d8974d5fa30d9154c85a5ca8e1457e24c1484590a45944bb8f4aacd168cac4537dce99e64c
+Output.10 = 07e415374054f955a15f24a2376b345c77479a72638e4846ed2248234984320ec889768e6ab1686d70d6740b50b8c1db6e9226b833495850c63fc6909d19b3ea
+Entropy.11 = d84720669e4f05c26d092f6944608f039a9c7d741dc3cca573c179f801f1a0d9749e4cfe04c08b3c
+PersonalisationString.11 = e309d37de7da0abeff540b5b64736407f16835b88b4bddcc41d88a55c9b18ffdb18a754dd096e85c
+ReseedEntropy.11 = c40ce54bbcab56afaa503c5500dba4f30a921811a24efe46cf4db2f3c21c25600632ddf665b07ffa
+ReseedAdditionalInput.11 = 1c04b4704d8698c1731621aa87519f392f1391d36d2a40f15894ec5035b537b7ec0d4adf6d1bb4a0
+AdditionalInputA.11 = bbb42b0b0298050393556e41098d140a69765c85bc2794194920fabc91ad5fb77e8422c62bc3c25d
+AdditionalInputB.11 = 206cad3c4ba7b5dffb17d6a939b6f3b09b2965d5b40d2e13a66ed89fea6ade435b5443a42b3a1eb5
+Output.11 = 9d71154b79da6c9120972a4d251691c1053442df435764587c892bc11c800858edd4dd19c36d1b997d70366f0b0c5ce59c5634eb8cba50e546e07da01d9e7b96
+Entropy.12 = 5dcb4be49438210aa2682f7d784aaee50d29efaa63fa63adc89e3cd7d701710f8fd2d44cd51a2d7f
+PersonalisationString.12 = f8f79cf6951e840f228d9d28771185bcde72923ace20c3079f855afa0a1e61a57eaa2323f34ccd61
+ReseedEntropy.12 = bd596016288a02fdae291216f8b5c3135b96eeddede69cd1c5f307d758981f164b5b631ae15523f3
+ReseedAdditionalInput.12 = 3e2cd8c5973b302f7536636da17f5bb2a593e591c3ecc8ec371f72765204618c0d6590e9f62b2ded
+AdditionalInputA.12 = 9b74bf2098cefdef3ae16c4c7a764ca89c72b6d5e83e8517be761acd4c1add40306c3caf41e21c51
+AdditionalInputB.12 = 9487a6a1ac800a07ae948ccb40ef712c8b23794864c924b4f4e79ce0e5b476a36f609674fe5303fe
+Output.12 = 4ef22801d15c147a267172048944353493567fb9fee854de3ee18fe46455e141ad526632c4afbc1464d637e59421e96d8a3e0983583fe4152acc7fb2dc0dbd89
+Entropy.13 = 15d9b2ac3983553e1670337d7c8a2d03a7a70c6511ce55d462afe14792f852a113862eb5ed398065
+PersonalisationString.13 = edbd08e6ca63831e6907f4a69f4b954370e5a445367d92b4aacbae1c0a0c483e1c97ee0c7f2f4084
+ReseedEntropy.13 = a9158b7602da3126bb4294cdcb47198e366d7b71f7d1144d9905649aaf5671ac7c3b7777e174f04b
+ReseedAdditionalInput.13 = d7e07db768fc0e499e9a6f3150a3ff9f4663bd4bb86ff75ac787716a7288c31133cad9dc26db2ce1
+AdditionalInputA.13 = 76e6a18764fa75da82163a59edb8cc0461504406eb9be3712a21ad24e495d7890246c44d9684b064
+AdditionalInputB.13 = 82d8a397060e1a948ef2a70f48c32cd56ec935801a5a65422aae185ee057cfd587a3facfc0feac4b
+Output.13 = 18f53b7b2f17dc1428851d3658f9cc3e859bf6c91ac94e449d03b88f92d2f06c8fa11509988aa28a322c3f8e1d826d7cc37e2cff8cea20340a09f4a35fc4890f
+Entropy.14 = a45e35e0ad0306225cf6e68db1ada9fdc5be20f967ed74e0fa42b184beed56faa347ed4c6a17c9f2
+PersonalisationString.14 = 562919281126b70b46e6f42f92c8fa1ecc1ce9e3b3d55d1d77138e4b81727800e7cc0fea5ab9f185
+ReseedEntropy.14 = 59ae2e14614a27eaa3b8de7f3777214ca4fa206eb868f02d724c18549fe77dc8d9a465f1cf56849a
+ReseedAdditionalInput.14 = 0484644b3507330e45e3933ec342d5ee4af1f784a53c4ef638c68f7fab03aaeb411febf9dc5194c5
+AdditionalInputA.14 = 6f6d6ab0d0c02ecfbaa3ba6d8f38a8acb08699d08f3035ce7fd03343b7ef2d961ddec5812a30a045
+AdditionalInputB.14 = fba0d6f6ca8f1a587782c5319766209059a23cb3e7476b2d060ad06f2db9e09728cdbe0f8a86c14c
+Output.14 = 9e88544b8486d3445c0bf47d0f55bb8d3f2abf5d5b2816df7abcf3f419dc37ca332bc00fb8c40152750b4c46054e8a281190f6e3007b844c63f6cbd1dd9acb01
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 3bb9b2662a255df8f8808847188406960ec003351cab3ad2027871f1302956aa31abc8d39c3629d9
+ReseedEntropy.0 = 7bc863da2b9fde008b610079f8bd804180a7e8653ca6e91a5a90619c23e02ce4d607b00c792436fe
+Output.0 = 506c7451e5ee0fdca48632942f2ba47304eb0210f1fac66c620365f753ef70989c40fe9fd54d54a9e4aa0b3f1ab700aa6e9d45bc7ce32b88bbed537ecbc4f377
+Entropy.1 = ab12f3f9410c55c760ae88ce173d7c78a6b10aea55967076affce36765f046a61ddc3b5143a39f65
+ReseedEntropy.1 = 482a319573d0926a2eba770f988567e16aa1779a313826fed466783ca79ee3b5f82b1df005e0beb8
+Output.1 = 051b4ca140f45ede153a74a66bd904a00da631aeb0d92d2382e351b13d63adbe4ae7a28f83a124fb077b12ad55e2f994ade22103209fcd9767ef9ac616ad537c
+Entropy.2 = 79ae74b9d0e55f2ffbfaef21f27eb051f1cc5c49ed19a1ff29c4fe637c7abd8c342ee2ec7c8c4d1c
+ReseedEntropy.2 = eebc7f67507751204df30da3504f27ef2de890cd509dccc6e7e8b85dd09b851bc42a72969c5021de
+Output.2 = a2c6063864c263e0073fa85e36b09ce71ac6ba3e967cb7391fb043469bab85807b58af53027187ac993fea5bc5c64e4ffc4f0870b2c338f8dfbb7ac8350ab18b
+Entropy.3 = 062d77e68e01747553e55434756ea3d51af399b4f3f58ba8bd8ea9bf7ea4decbadc3ea2ff53f6c0f
+ReseedEntropy.3 = ba111e600a45f233676e720496efcd0d566ec6c18260f4d39eed3f7ec154ebdfd9948ecb16a0b1e6
+Output.3 = c84e51837969bbfb160f639e62ccf3da56dcd6e37ffa4623c403339cca2da3742fb933b4af7b649c39276ad27c376c8f134d578a1643d55015f995f9ea82d29a
+Entropy.4 = 8b469344073ce6b36fff0c14fef1cb49b6e87280c27ce91cddef8e3f91dea3b91477e4467125ca95
+ReseedEntropy.4 = 078e4c46cce4289a5bcfc03949b088dd1eda9ee8b734df783a13eeb27aeea95dab3aa51856ccbb7e
+Output.4 = 1fe85a0f699c957e6acf106a28b3c76a0010b7e33e7f03200bf9b386eb8ae4e7ae94159ec4ccc0dcb323d9d61be0b0b19bd12b2fe571ffe55490d9198d9ebc20
+Entropy.5 = 4744c9d152da9e98e15aa6f9ae20a6c30a204b9fbe09ade5156026151c7a0a6089e1c7d744d7ba6d
+ReseedEntropy.5 = dd06433c128192c97af249613915e9acc7db694bb4e8cca74c2161fd9e173f734e96252a47b2e299
+Output.5 = 1f873b2881700108bda3f588b3441e6f7b3bd5eac93a16f6c6e49b924775d119b0673bb305cb72882dd02083e161b06adec9f2bf9d0b635c80289ac6e6f77eeb
+Entropy.6 = b2fe59bee09db99b5ffaece5ccae91479d2147adf58847e46223c279913dfe253b0e44f3305ed32d
+ReseedEntropy.6 = ca34abc277f38b0f72614b4e1d179b1a12135a0b0d07da1862d4d9095bc2014b5a0f206b1c2fca9a
+Output.6 = 4149f8be52cfb51e2bee05e07ba30581ca20ef1bcce8cface8bb4d91da3b193ec0a805d91e779af4c7e4db9983f12550f3740f4f55658c1ca24e36d84f7310b6
+Entropy.7 = 0d1b44ff12ce161124d0e87f82327033d22883c79cc52cc3432a9884dbd6c9ca88ae359f141cbd72
+ReseedEntropy.7 = 90b7f78b37b639c95706edeb1893d1f81e08548912532a46ef8c1b90868b894b95481b2ae4c17e66
+Output.7 = 295d3a4b7a0dbc3616598a140348854433e12fb06913295db3a420445b3aba876c9394bc2e8cb2934efc028b7899a7187c364044d2de48670b3cd0a3587556c4
+Entropy.8 = ca348bed64f8adbfc3e275ef9139b6f359e4209b356e149f53bbe25dd68f1b63e6550825f8a0872a
+ReseedEntropy.8 = 762f854a614b2af674f22563528c842952d633dab3fc44331dc33511a7f769e29588ed640b2570c7
+Output.8 = 4b7e869616deb80589e118ac06e27e40e445351f93fcc84502b170ff83a00fbad003e549d6f7d07e0ed82de6649293933eb2ebcf0899cc27c914c239ad1ebf12
+Entropy.9 = 04d3c84528ef14f037768951ad8c11fd576732145d946f9ac73cfccf7b498c9a1dfc8b216d328227
+ReseedEntropy.9 = 63a8e9196ba01b6e60cc018f77569c42f2434bcdbbeff19f441bf024075c273ef860fdf23a310b3e
+Output.9 = 2aa2a65b1ce57cb3c7801d2e675effdb546f612fb73483622a8dbe4b1d3163bc9303bc9e9b7fe6d866c1906b1ebba5418b0069118517587ddcff480f04b932e9
+Entropy.10 = 051d3de5148c917cf19da7d6b9b4a50be615ce3574e74488d6075d6ad56c05672fc4a2fecc1ae90d
+ReseedEntropy.10 = b8c41830f3bff0773581f88c4e686ab25681ac0b8218b1b900bc012fe6c43cbd88e681bf85afa6d9
+Output.10 = 3d013ecde7fea999997c89d4e675d6f4841f61293e21c6a252aedf04b57809d47bd8716e7794790559a4d7ba5c6868e3594b3db8080d506cf4f63fe7028f6fac
+Entropy.11 = 7a067784b0c4e24178bf7de6732e2f2c345f9e938ccbfb7c80407b267a305469ac08f737028c0f83
+ReseedEntropy.11 = 452ef0dcade2816f27aa2ecf991237ec9526d4156492ea10e37a3e89cd94d276ab1aee878ccfe1fd
+Output.11 = 781324c889480704648cb865896d4f3b45232ade004969d46c71e2542856ab412e35ff112803d13227ce037941d1f7f1fbcbd093d1f2ca90635c0f320a908099
+Entropy.12 = 03c23f2018e68da964ae77bdb631eea29473ea762c8abf8fb5418fe2681f62c990d39d2e58c6137e
+ReseedEntropy.12 = 2c17c1dfe4ba635d4c361f217c25af2061912ef6c781f1528a8da2bd21b083c435332f3062bb4f8c
+Output.12 = a52d854203c3dad07a3caf089131caa01f4a19e0f68bd70c4a11cac4b476ec64647a5b3afefa377d3d16525ab5c639c9702ddb1440b50dd2a80597aae3bfced0
+Entropy.13 = c534c44f2c40f3ab41143102d973b7e98890f10d633aaf5354af6bb63a01c29b51466a21292eb3aa
+ReseedEntropy.13 = 27a3434265a1d4ff62046bbb294095cac6424aa12d2c20895c69eede912df0e6c5b488648490ebf2
+Output.13 = 01b405cb89a31403f01add2a4f854fd26dfdd842d0dec85d949f46a0fc808070c75ac9e9716eba341d4476b9ef2caa32e837f6738900f18322dd5b84a386657b
+Entropy.14 = 8f5235da708cb15781db85ddc141eacc654d93f8c211ae718df22ed7bae7ba5f2d5e9b006ec36a21
+ReseedEntropy.14 = e6cf01b0cf9931ded0ae50bd0e1092cf79221397f2850d31390db33ae05072ad0e67cde6f3c438ba
+Output.14 = 7a00675e1a9b524dadc1b356b22c46c6747147ed736639739bbf761ed9b917670238ec001387b7cf3c91a58a81ec09c1487313058b6c26ce61d5785269a1d8e3
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 468f1aab11004462b9b10ae9ac99fd611caf2789b6f82f4b6079467c01e5702880371a30714e49db
+ReseedEntropy.0 = 35d07a1b487c5aae9390e922179eac602af20b9766cc7fdf9c11256a6fbbc6e98e50e781da063f08
+ReseedAdditionalInput.0 = aff8f326a772bda7a2bc3d94c058d0eedf945a9ae2d909280ba411c31640315467db6019bb06e046
+AdditionalInputA.0 = d60c0ec8395b7ae94fd361f88953ede3aefcebc3aa6ab703b8e6df2b8bbda54193137bd3cb45a227
+AdditionalInputB.0 = c029d14e0d0b580b967c9943b5d7022d564514bc57ed641e49419593a9cc02f7f09c32d4411051b3
+Output.0 = 877386a5264c46d3d5be4a47d9c22d7222ce46d2d6f4e95999ce35a18a1a03113b7b36c529d74c577bde27c700d75148af99a488f71e40009b944c95b8871c4a
+Entropy.1 = ef796a2f0f8c53fb7f47484bf25f477840250cf1cdf0e94edef341efecc9d9a6fc7d7ca93b4bda22
+ReseedEntropy.1 = 35415751f3d0570dac1e12d8370caab68e079e7daae55f1743d037c7e3f3f717d442364eeb0fecfa
+ReseedAdditionalInput.1 = cf4e418119103bbcec9401d6d485c4fbe4600ca5ca09bb1963dbcb6998140e6acb48396e41262bc0
+AdditionalInputA.1 = b1a816a6f1ea50e4f1cfe8e4b032a9e2fa8a6d135b689f9a2f2e623c357a2de444bcc6b8acb1cd46
+AdditionalInputB.1 = bad2ba372d511b850c449bf3be9d43e2e748ab08385a03898e3c44831bf18c5678c07698ae9fea33
+Output.1 = 6812cb6a734d0a0ef5571a28b2e01ecab0f65a187f9e251e1620890e43ff04751ed5b32ebb5bb65ef093fee9a08b4558af1bef862ababa690f411026235110a1
+Entropy.2 = 0d3dcd9132936927861fa011f41e9655354ecfd4b08fb7a919a9eb68d80570d292cb68c99bddf393
+ReseedEntropy.2 = 529b66c2b30449dac1476fc171e1e8a741e9191d2658a92911b678f24e01043a6ebd47997fd36dfb
+ReseedAdditionalInput.2 = 9d1175e005d636e9988449f563873c0e7465590c83a360d2b1b7e4d553ef8dec11229fb02074ad54
+AdditionalInputA.2 = f2c11e04779d4f0d0c1edf71b6f5b35cbe608eb0227311b778559a0f4f8d787ffa30297442726e8e
+AdditionalInputB.2 = 9598fde786f38315f8a4e7b073ed5d9fa5de96ead5c581a21614ad9902878f3ce29ec1a80180b706
+Output.2 = fa699f7bc4c80f3ae30ede8423dd1b8e51ac64377b780c575ec60422ed6962fa28f59d3d76d7c99cd5a4e1c8f98108906f0e18a7d322da94c3278ffdc9388065
+Entropy.3 = 1016b794811ad911523ecf6787bc732e076d282f24fda43f3e555a522c8309f33318ee7f8eb17bf1
+ReseedEntropy.3 = 17b257de3a39ed8ff9eee51d82167c5979afa611c9e68766af0958e40b0a683b820d86bb7db06ec7
+ReseedAdditionalInput.3 = c6a4bc11709c170ae138fd20afd817096045df3b27e6706151cf28353c525989f8eec4b593ac02c0
+AdditionalInputA.3 = 22ff28b8304fd7222417ab5e77f319364c1232b81f7337422e7e346a47a812e7a4dddee7c9540c3b
+AdditionalInputB.3 = ae68f64669bbf690c52fbfdf00b94bec7cd56d347c12b195620515ee2866244fc27b77728cc55d0c
+Output.3 = 6d26a7c1f5c95796b55587314911af73f38d041dd2facb6cb10b9af655fa3266d31baaf967a3810b7bbebbbc55313c9b15df81d6f2d63624a8501fb936a84023
+Entropy.4 = 05f773723cb30a2fa214aa5f33e7b8fa20d733054c41ddeab3f3da99428721ab06726df07c499613
+ReseedEntropy.4 = 7184c3b924a3487232f71d03dc9334deee5c3be70913173e208d07e2e026c372b8770ecd79f4a541
+ReseedAdditionalInput.4 = 3d1b6fc6a82f3692abd4fbaade89dc3de9a8b5a61167bee14c9ab01b3c2c362c9de5d830b8cce7cc
+AdditionalInputA.4 = 3d48d296783d123bdb96ee19fe3135c9f99235e56c49bc6aab2905d81f5396b46206639db12944ba
+AdditionalInputB.4 = 430cb53307559407ed1b3cc28497b7f40c363495ffd7056dc5d8544321a795ca301384d8ea283d66
+Output.4 = e843f8862206b62edd51ebf2801788701cf8470a95ce469390154cb04e25a04314a82327a6f653993096d6d24b5d5edf8e170131c7b4e7e05e5d4c6b29ace35a
+Entropy.5 = 8a945a8507c3d6127b48787d1a6d89905c7c2625b57eed6c92c68d3152a933e029649bb6d5bf6eee
+ReseedEntropy.5 = cf62ae9113dc68537f6172dc2cc22a1cb9fcaa432913b3f68bce25aa9702724bf290c11a0c5a01ea
+ReseedAdditionalInput.5 = 7aa4bf30661f50bde8862e598fbe74d09716212a132dbb9f7970390dce600e77e521580c630a2aa2
+AdditionalInputA.5 = 21b124469592fae13e87caa42d51b5c5d54679492720c19aa465c388c0e2112e3dee53b1e82eae1c
+AdditionalInputB.5 = 745aa1cd0fbd667da21b57edcc4b09103a90a91012040384103ce74088c302022270dfd95e4d4b66
+Output.5 = e7d4bc9aa52547919b2c5bc24e5acab3a36d0ea08bc64433eabb7dd97df9b7634d6fd00ab41f392111c8b9da2011da3e56872b4bc269327837d4ac1f55c758f7
+Entropy.6 = e0e52e6781d129e5358f86ae7e50879b61acbac8bebdf3ab331ce49491f3b959cfb454c1db9502ca
+ReseedEntropy.6 = 81a9947716d5455a30d81a99069fb2a2905ddc21044e05d6bd42931a938096863a3b4a4edd0ebda0
+ReseedAdditionalInput.6 = ed143df937fa1a74e115cb8d5c7efe0298952ac0a445b7b449031d63a141175259cf70b0c7ac0658
+AdditionalInputA.6 = 1e05576b2d63e15f775bb826d4612c522211b384f814d14ee21ea33994183b64a6ab1ee921d5a698
+AdditionalInputB.6 = 39c5cda1b999ffb6392959d1b9403ab5ef658414ac3efcce707f957c5e75fe6d4b6956f44d012666
+Output.6 = 59adda5d2d89423a00cd77bd854c724853e3ffe6e2f666175f30aba78d240599ade77a025a3f5709282cdff95af739e42e4d35aab0ab0023d1f2908206b8a99b
+Entropy.7 = 86655d0b84c71f323e201be6fa8f10a00179a4f8b6838a58b1568875954281189708acdcb16fe21d
+ReseedEntropy.7 = 7580a81aa2e8b2dfde70d26901309b023bc30d94d7ad812a1ff73a5cc0f52fed3558d0379b7616f4
+ReseedAdditionalInput.7 = 53b051ca5d0150eddb14182310580f975e462cd7cedfb24140ef2db0a3e68970cc63e6a96a619509
+AdditionalInputA.7 = d6290384cef6be6cf17e2202a6f187ec7740a3906be9ad4bbdcb04c1bdf61273eeed9a07c2020678
+AdditionalInputB.7 = 88f3e84afbf4b9f044b6ddbea7b776c165afa55479c3d073edc423008b9b1bfe8759c9511859f0e2
+Output.7 = 17f145e8b07d9f61e90cc597b13be84b1a4e3b7885331a4052577d2333caca761e8eeb6ab55cc03f2bac94a23c944d2f6ebac248651f92b16f9e0f7a7855a723
+Entropy.8 = 84a7481bf678beac12154c615db0f574ebc39a5ea83abf9a77f7b8e1fab27a9fbc6a9d5f5a4f2199
+ReseedEntropy.8 = ea22904a82ae9928e19106c48ce479b1a82395f310d1b2aaa2cf56359d822d79b54d82cd6cd55b90
+ReseedAdditionalInput.8 = f437eaed6e0f8b469de0e255b495fcfe6c6d6104002f103562b787d2b99af6f08d73646c230c1421
+AdditionalInputA.8 = 09db7db6309cdd4ef2feacf5702fc68a79271aeefe910043b8f4b6da464375411be60bb4aefac852
+AdditionalInputB.8 = 55f055f0bce74dee2d92897675e35227dbcd90ad02dfbb3fdd53293d1350d6f38e5d0f613f957813
+Output.8 = e789f09f379e056a9b29f263e607b22014c1da000c55d23a2b4a32873b099e9ee8d58af64c115a75c864a89b22edffde9f8a88c153e0573fa795932c6e59cd5e
+Entropy.9 = d1058327962235253d581bc9bc68176084778c0db220c5a4a9f73704260431087b138a1543d43c13
+ReseedEntropy.9 = 9bdc0e51e8821ccbf8e14494e751b51b5b1c3d3fd0d0b719353ea9c46a0bd0408e0081be267ed31b
+ReseedAdditionalInput.9 = af014ef2dda23c2acd2d08855b3a17b3fad84b3291e530a1920bc49d00522737846c3fcb4c92d6ab
+AdditionalInputA.9 = 617bf052672490fa690cfecd8a18a4f95a980824b73d9229b14fa0ba77e55df984358b3ffed6355e
+AdditionalInputB.9 = 2cb3909572cae98900d1f29633b291ea02db9a2e75226e0d68ff9b5923f311227aa8851abddf2254
+Output.9 = 05bfd8a3a10e6d9ba9f541388d6cfc31256b9caa5ac2fd45c2e896f3fc7c9537b4bac464ffa5f62de566ff1f47abbb0eb50fb522fdfda9ea4845a0ee2e01085d
+Entropy.10 = 931fc7c1fc6f648ec853afad8c160ba8e00cc378fd46c5d8a05413ead5a3560b74b2a45a4f023e67
+ReseedEntropy.10 = 9a77ec8031c2b2e6ce1fae2634d0e69c5c7a7bd731db545c12311e52054e738a81cbfff8fe069bd0
+ReseedAdditionalInput.10 = 1b1bb1a95cb5382d9679bc2c1a2e7b50cb2a88523c6724370b22e184c9bcc62e635727bb0e976f4d
+AdditionalInputA.10 = c96f85d07507af3b0720c17081435f57e7268293855de4e8a3ffad925eeb7289d207f8580b069fbb
+AdditionalInputB.10 = 4f95db08454f55c81c79854b2f39459a08dfdbb233e3d4c2bff5d7e35c93a464d916b32bc57fc7e9
+Output.10 = 270bc7cb3ab17b52e635330cc1842da6296cf5432d11d6abc37eddca996f749e8e97ceafdd842f1474f6664d87a820c9162ea7cfe9b6b8c098ef51fe4c26d7e2
+Entropy.11 = 14b61e3ca2f9301ea243055023917852adbdce4eccd09743d2aba06e2628883ed8600e4a09973d59
+ReseedEntropy.11 = 1a66c3985d3cff2d1493aee892d8dec8a966fb4b7212d256c29923bb0f29cdf822240e7ddaf6ace6
+ReseedAdditionalInput.11 = 9747af46ff6bf6959c266be2dcb0087c7e7090ee4d7ae811c4b8ce7391dab557178d85420fd41776
+AdditionalInputA.11 = 8f9a93dff9ed76f59392a69f4db60997d6bb12cd676c5fe5eb5cca4e1fe7bdea3131391e0cd2b2bc
+AdditionalInputB.11 = 1b1e87c1b9ea94453b36ca074a569d95b3000da3b710807133b46d3c77bbe997c9df2439d51d1469
+Output.11 = 6a89df0b01c85d862de9f5a3d3a0c74db6f9b4f99c3307f5c4915a2dafef4d1e72bf14171ab40c427af6007226e36f3b4820e4f0f74d7248cc8e709b2a7d814e
+Entropy.12 = 84fdb0e44057e5f5da02bd4ace0ecd5445e372e8438fccff77409ecaeb29217ad75856e3fc2c8f4c
+ReseedEntropy.12 = 665942d0d15f765383bc7a4bc529e4b57d0f0c23524923e02e323400f8119d1f1e4e495f83afd5db
+ReseedAdditionalInput.12 = 03b01e1acb7413c3ab978f0fdda1515224d702558bf1c67ff0d6c0ad470975f82dc53f75338b0396
+AdditionalInputA.12 = fc5535188af0435e5288df5da06aa2dfe16d93b310a6b18f20e3ba81647359ddc44d52e3093bb7f3
+AdditionalInputB.12 = 37f853f98849ad636e57a6dcf7ab223d50ed103f434b49de36bf876dd9b21ef338612cc37b9e01a8
+Output.12 = dc614f104bc99b4ba459d280c98c6ee69ac62bcd0c37ca488f5bd30b2068932a9f7652b3fea92649875fc95be0ffb45e23618b34b4003b7323df4dffe9cf6ff9
+Entropy.13 = a58a67d91819eaceb3440c5e8b811623ec423b8ef306e652da28a1700567ebded4236f11d4e0674c
+ReseedEntropy.13 = 4833672b9739d4470b5d7a5a43f6fa30ecc66ae696533387bafaddd62faee137f961af965b473c1a
+ReseedAdditionalInput.13 = b2c2ab06582c20a748737f8390c013a03d8d6200e630e2a2f059eb7d3f8f89b08ce97fd3603ee31d
+AdditionalInputA.13 = 305093f3994d3e3c41c0014cca4d707480667c2aef1ef03afae1f0272e73d0aee43daef1c1e0bdfe
+AdditionalInputB.13 = 8250d98f0f9372b74c6c577c5e663f1221369ac67e1830ae91043e583f9a850ca16b0efc6613d5a8
+Output.13 = 747a67e685bebcc425717daa755be9c3042136237b1d0ae9a22c90b9674eaaf989044d1bb470bcb36378a9c651b62db3f7536b51840182a10f9bd76cf13a55ce
+Entropy.14 = 4a78cbbb0f88a4dce7aafbdab0d650e808f999022f2af162011e21aff65968f78f0f61096f8a160e
+ReseedEntropy.14 = fd5e4e50a7c00b45be31f40f5ae5dc0a5440a298676b4aa91001fb5e5c2c7f379534f057dd729b35
+ReseedAdditionalInput.14 = b552dcd98ef23298ed3a2593568d3fa3cb961d89660bbd93301f821bdad7ef0b9cd071abc1e182e3
+AdditionalInputA.14 = 18a09894ed824809e66ee447f9413505035c8e85db5b9c6e597bf6a2e38386d8af26784f8f29780c
+AdditionalInputB.14 = 75ec329e54639306dc853b73498dbc002abceadb355e12ae69fea16cc3ae892272544990d2938be9
+Output.14 = 4c08126a7fe978f25982672ee2044a9dfe31919a2003853a74d9132b46a2278547af5980d037401275ff86528bff41fa80180e823bb88cda6029e06d2b009e81
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 7aa60c5a25360d8a0a9d41e34c76c4f18071b56ac673d4baacbee77549dd361db6496f9034513888
+PersonalisationString.0 = e7b5cc99dde312318ecb2a3bc4ee8c1476345ad3e81b5d6dc0b747b590c0d21be731398f823aad02
+ReseedEntropy.0 = 310e8e8dbc6ae586625d750f5a1cee764a7e47a2eb355c5c94dde950065fb75546ff347f7f1724eb
+Output.0 = 21460bda25dcad96d29144c912c654e307a0b559d726c0513e2f07a4e6ca0c444ecb4ff6a977880cba4bb993b2d2873dabd359a8c493dc2838abb10f63d3a8e7
+Entropy.1 = 9f5c4161872a8eed8de0d7a40e4c8330a06d444be67aecdc22141b168c5e5607e3d7f2f0b206dcd7
+PersonalisationString.1 = ab9ee1b4974e9e628a75c35f59a905ec1cf6cd8b2927cf5eeb4bf3529c40e2b4f647a3e52da366ce
+ReseedEntropy.1 = 5967eeee36acfefa191d335c625a433b1a935298991384cd67a4212fadedfbdd0ce0846174c226e7
+Output.1 = 166a0a73abab05a94c5ef78cee8e211f6b79a77aa4d46d9a13ec97ad3b64bfa30fcb2a3c25c1a42ab52fa6305dfc059cbe459a674914c2258ec684309441692e
+Entropy.2 = 5d93354c4a620e829a7cc5de8c0ccd0bb0af655aea622943c2176835add5cee5bce92a6a3c972903
+PersonalisationString.2 = 864e83c6e5172ad9a64f2d3c8c50278c1859996d6513fc40ace19992a0dda010cf371d660721b26f
+ReseedEntropy.2 = 390d5e0dbe184f939bef7c64b6e68a3530f926d43ebf644d6cbf776c6d2689a59fecd9516bc61fb5
+Output.2 = 35dd5255946004c986ca0358e9c3adc7fefd15196f4adaa2db147290829cf44cfb0d536ef1340962480d96607b2d533dc6c0c7a9cae6af07f2555684ce6a2317
+Entropy.3 = faf4e0b02ee9d6bcd3071d08aa09fdacf165a106412fb628a3af5d9681a69411dcf57532d89eb772
+PersonalisationString.3 = 2926202740b7d5ffcbdb22f823d3e47f3b9224382277f07c956d25fa0b18124c28e96f04dc1baa43
+ReseedEntropy.3 = 632a9ee71fc6be34cc0a4ff212d15f4827d174489f2d4c9363e055625aa368bd7258782517458f3d
+Output.3 = 9173e1a68a708f1456fd19d34c539787b8ca9c8e2c3c0ab7ad73ac06a131a5f1c1b0bd64aa28e1ddb8f711b4c013f32547c8a63701b835d385182a69761bf853
+Entropy.4 = 07c53c6c511ce7ad81a09d3b12545b59204b02878ea481e0c16ea51f169b1cd78243037aeaf9dbef
+PersonalisationString.4 = a906ff51ad03432426d026c3eb573ff668c9b46f1d48ac2d51b21afe6502250da0cc2e1e9fb46872
+ReseedEntropy.4 = e105c29c7259e6c4f4ad2ed932d0e124751dd69270d3f0ea3d826673b806bc52673866b7268e91bf
+Output.4 = f01875113352ca1cc75f617867f92a14a964fa2e2a07c43adcc049635b78c92e5c717470186b9467390db9810dc3c3f7667127e826314fda7a01b8897b05d274
+Entropy.5 = c7584326f295ce20c6ffc9a5319e70554f96cc24ab23d844d14bfaf532b2b95df77c5f4e571b755c
+PersonalisationString.5 = d91ba3bd0097cc53253aa16749d4d2b9fdd325f4d989e35b428e16456be3230864cb2ed13df5f1fd
+ReseedEntropy.5 = a4ab7cba17cc5a211e75cf6edf5f42f2e6adb297c8a8a71b0b10d479454ec9e51ab14c679468f5a6
+Output.5 = 12232f1f47a8fdc6af93111570b92a305f6994bba3db06ea1c617e4a2f45f0b95c3f3f4a811b97770231f2edcc149b0e6b13657c754b69f9d78282491bd030f7
+Entropy.6 = fd86c77c64fc5b21931a98f34ae2303f64f49cc6a582ff8e44b8eca0acd7c2ee7b151814c7468823
+PersonalisationString.6 = 07258668a74922c6583b88f5e8dfa5c628100acd2f7e8aaf810027f6b0fcbe89d8de16fab6559892
+ReseedEntropy.6 = 6d8c53d3affead61e6ddfc26d4b891742f9a7e5d59ef511ab88a44aac3421d0355d3739832e34c4e
+Output.6 = faa3d65edaac98d3316dcb13445eaad0cdfc69a4a578b81a792a49479f15ed0ab3c60613a689bc79ac380807b1b7d502ba887457968ebb2210b8d2e97bdfdcb1
+Entropy.7 = 6cac4b3128618c27c2a3a27354ab6a629994f679db201521d8679cd03afdbb717ed92efb025f8c45
+PersonalisationString.7 = d0ef6ab5c7147547834b5297c51e45b61130ac0d7d8d7da9fbee0a2ae59a093fe934abc7194e5723
+ReseedEntropy.7 = 0976364641118f8f1f022056a84541731cb4a616be617607600664230449bbb03be34d2d31c829f8
+Output.7 = 8748f90eefe84fdfd8c2338a5f7cd7dfa06097e77df99e7e5e7d170285d1ce6a77099df75e47bfe09ea5cbc689efc79ab4125511589ed26c1e67a7a3c6673698
+Entropy.8 = 78bcfe65d43652cbc176c11df12d80d08586cdff694aff782b72e29b737d38a710949227898e98ab
+PersonalisationString.8 = aad3caca9f6e34cbf15092dd29854893f6338df77c79659920ec9fa8cb9a92c2a58c4d1e0e199c41
+ReseedEntropy.8 = 55eb2d71016df060286e20313de66adeee612158fd57a685181c82d0b91131dfb2aeb0edff73da20
+Output.8 = a3434d9eb1af5e68c5fe25a5365f8d6721bf61495e8174aa018ce7354daec8daaa559112ad6c8e6e40290404cea224e2f660f1c245e25f175bdb18249ab0cc54
+Entropy.9 = b8a884e048945155104e51c1ac9ed5245fc0dd692208f325aada39012754b4cb8a0e57ed0fae1fb9
+PersonalisationString.9 = b9454b50abd77757ea0cc8692bc64d3d8bf556c9d62f7a6fc061922b4d15e5c3ada7140ce8568276
+ReseedEntropy.9 = 0f36ab0c3757e9e53f071b23f86a3f98af4c8153870d3c7d3f345459c288ab65c16820f662a15769
+Output.9 = 9683b263522d8db7cbb032b1941b9d2f9183e50121e8f7001c5376bb8bfcf76b7d4e4493a9799dbf87d17c127b77a359645835978980d0facbedfdfba8c4188e
+Entropy.10 = 269365f7df508e36314553ee0435b2423723e5af6ae2803410b01882ed86b4b0751705b01298c745
+PersonalisationString.10 = 332795850516f0a8fafc2db06f263522a474b21ebbd5deef68c7dbbe898bce1dd0bf9c588917966d
+ReseedEntropy.10 = 1885464aba81f8b6a01d71155271adcd2c0b30a6334d1d0cd7367cd1fd14292840a9d71324d0567d
+Output.10 = b3879750b48816bd71bf8d3121fb977858ef81f2a915fe09284d89e9332ce4374d5bf6529c9ff8b293b24e67ed5e479234dbad737789ed3dfded641be64c0fe7
+Entropy.11 = 9377febe577bf563012f0968ae6d8556f504b56d29b0ad1e785f82eb6a788408d1c469acbe57c5e1
+PersonalisationString.11 = 98eb2215fd931fea2cdf97a7dcfd085c0123ea7585a91c704e2f4404d896774e7acde9558e264420
+ReseedEntropy.11 = 0bda0c7bb23a45b1066d8381ee56a69be996756c1846986c4c25ccf0908adaccfef6e3a502c0b867
+Output.11 = cae39e0f3eca42101960b36c208bf422c0f3b4e83519e88c102c705e28a660ff8f861b12ffdc9ae51ee56eb9287ea2a30e3515d7f2119218a7995f6b670d31f2
+Entropy.12 = 4532bd9ed28cf991f0742137d9e36a618235e612c698f03aff4778b917d11a3d61c2981425279bb8
+PersonalisationString.12 = d68a3d3a5b4b09f6afaccfc7da3485929a60b7b2c10ba04d7b82abbc56a8fe8874d7874dca35db30
+ReseedEntropy.12 = 91dc2e079bc12610670495725199bef12fff85a26886110d11925bc9f14e2c08191817337a7bd647
+Output.12 = e79f16b32013d7433ccb41dcde0956c6e7fd8525c7466c6dfe8c28a16be070006c98cf0c07e8211a5daadcf8ba5c36cb14753f344f3467564d64e50b7fe6b7bb
+Entropy.13 = 38f689cba9017be3726acc5ab4a149a8562b44dfb744ebd803c1f9972af74e421e5a7d268a2f58fb
+PersonalisationString.13 = 6b433b63afe6294f63402620ebd86d3509ba6c62d6ab9d844f59906d19d624d912c11f9b0a5c9fae
+ReseedEntropy.13 = 2ca0b302b2e291b6a3fb6d78d5b95813ed254905253a99f9fda256157abb68475cf440d80fb8fb2b
+Output.13 = ac6f9eb69baae9d331cb8a7ca76f889ed337d6f3dbb5e3b9e4b684623df6c797c5b5bc2a1417a375efdcfb0226f551fd9301f0aa54f0d43c924ba2c8dc2f095d
+Entropy.14 = 8f001f3277b7155d21e6ab8038b5ced762737e2de84dcf07a8f4bbe0f02814e8a60843a143eeef1d
+PersonalisationString.14 = d811d476960f2d5032cc3fb7002be155c6314e03ae7788dc886d0e18c76ee4fff3008982cea43ea2
+ReseedEntropy.14 = 8fad4aec11507a394be8bf8cf24c4f2442c45948b5ddf28ebe33f9643ae5d21337ec8dedc9b23e1a
+Output.14 = 6d353a66b4cd16ffc5469b1c16951ba00b075db4f1282df1cba7267b9e191e21f604dda9eb48921f927f1d7b4548d5bcc580829c422ef0d5b2127d5eff4b020c
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ff9e275ed0ed21e8d9087a2ae0ab2b26fd6e3e22c3661d16ddcbfd109609920ed24931b8e4c913d9
+PersonalisationString.0 = c2af00b6fdeae015391954963075fbdedc67f67498dcf1e217325cd02d6cd94235067aafefbd65fd
+ReseedEntropy.0 = 58bb40bde2d0b54648b0e64973a8531f643ed171af3ab265d382fe5277c6a33d3390be15272636f6
+ReseedAdditionalInput.0 = 461bdfba363d1275ade59e9b9b73d45a4d9abfadcc733106bc2fa46974c4024765cd40dff1ff9491
+AdditionalInputA.0 = 389c8b0d7a4345cbfa602363be3d3e3106f4e5fd4bd7bd8bd9f9121d12e53a09ab4a00c545fa18a4
+AdditionalInputB.0 = e0682ccdf0da0f4b9c039e6ed4ff278fd1a29ab80a32b2072a0281f3e9b528293adffd606467d214
+Output.0 = 701b1b9a14042837960d4f428a565861c8f720ddce6a53ab8259e3dcbac4598bfdc0a5ad9550de310b10fa5c39feef74e9574e2080477b5b82b9eef0bbd5c34d
+Entropy.1 = 0ae83c3e1fc974718b83a1a849371f4f983cdbb87fec822ade856fb127ba91e8de71d1d9578619f9
+PersonalisationString.1 = 31555b815b91e29eb30b9c7275df4f14d2e31c5e0a394d4433b3a44834db2735c6e15901f2a25e9f
+ReseedEntropy.1 = 865adac3ce8ed56bfe1902c6a7752e3bf0b6372b9cdb31f7e223677bf878a171b7171c666c28cb77
+ReseedAdditionalInput.1 = b44f2a10dd22335a48f80775be2f5e710a92128b07d844b0f3c9f780afe40d8857ce35eeb70f7d5a
+AdditionalInputA.1 = 064433efd9e79eb06ca498a9ff3635b01e27797e16cf5594d55b90d58a2b2c581cd84c2d93c5f6a9
+AdditionalInputB.1 = 66304ec57976356b51b927f929abfacf801b5259d6aad2c698cc5318f05faf7da528eade5e36e859
+Output.1 = 6642b95b92b4b758ac069d5e0afcd2a20a365963f1b7c4cd54a2a367e981a2eb325b471ad83585e12aa5166db1f72e76e0db26bc30580ed34a2daaf6b084b783
+Entropy.2 = b1a8bb8d2dcfdfd81ac54d7144891c377347dca9641eff748699f806dc78e75bb7c9cffd38afa8d2
+PersonalisationString.2 = 82ffbd38fb7e75620d7531026bcfeede58f2a7c7316cd3adcfd576e53e267a79e387ed31101ab849
+ReseedEntropy.2 = ac9139950d564e0c4eb33e21315a4cf5a26753463711e9bd41244dfa90b09d6b575493a329c6a54c
+ReseedAdditionalInput.2 = 12167b099dfaa357acf49c7609ebeee2c4ea25020dc48b06ce994740778ea8ffff1fc730ae929520
+AdditionalInputA.2 = 87e306506760f2571e07f049747586dd913b3656121df1f5ae2ee28885b8d65db4f18e9e8a5ba871
+AdditionalInputB.2 = a3b300696d04853e8339ed0ed05bbe23d0443bf963915b6223f2a50b0e79e6b018a94b9b5125831c
+Output.2 = 9f3e349ec794fafaadcb09e372fd39948a85aa7eb5814f8cf4cfa2df59ea2f698aa99d8fb2cd1cefc4b89d4d6102b287413b6a69d81e13e48878da829082fef2
+Entropy.3 = 5c49afdf8bf596669e8aed621bea0fd3784b670ca42f850d41a229ac9f77242551d6b0e067a1d460
+PersonalisationString.3 = 481bf6c7b66907ba485c7bba4d668a0deaea5ddbb8416bc5a853d7a5db41d48a94c635b1b2e0084e
+ReseedEntropy.3 = 2b7cec046f5e14dbb159899102fc9b53861156a2528a891fa29b6e824b5f5403b25c9f103a584c91
+ReseedAdditionalInput.3 = d310335b0655acf85d3f0d75b10052739fac966ab3e7bbd00154cfa145c45de0a74e299a2df7d852
+AdditionalInputA.3 = 3f2f2925ebfc447e7a29f842b09b022ea6a7ce7d69a82318fa5aa1bc87e6087d15a0bc226fee328c
+AdditionalInputB.3 = c84be91008f15b1830878ac7bee785b04d38c1211b6ecd723ac13bd2afee496723e4578c2cf270d4
+Output.3 = 6ac88ee28b60ecefc887c9dc4979993a2109b8eccc3709af70b94fd2472f7e4c1729d8be4a46aa2360840adabdceda31251903c7389d89437afd07df2cedb709
+Entropy.4 = c8f2ec6b16b4b27cad067c22a4bdc8d97aaebaf4199136c07e433926827f66842be0be1b4bbbf4b2
+PersonalisationString.4 = 610039fb0100c170c62893eb6edb0bc2d6c3dfe788d998938e462641e0e23c0768c74fc5abe13c16
+ReseedEntropy.4 = 3c399aa06cee38b65d8349a182227a57a0c299c74a635fe0adda899290e5ba0cc33c59696ec4c8e2
+ReseedAdditionalInput.4 = 13a313318a44c74111790aec4540a3aa66cdccd1b4912380ddb1670c342435301d7ceacc240ad903
+AdditionalInputA.4 = 31877875f4b6713c13823905012ee409909ccc9dc53751b8971c093dca78c523dbaa619e7a5d46e2
+AdditionalInputB.4 = 76b51b2c5ee03e8fba8eef276173ffc354b184144345959963fc2f0ebda9246a8a1afb7a4573e3ca
+Output.4 = 4a8ba9450201fd425b7a7bbcee084193554d39af87775692135840106a1d64c7f1743d4097874c6f30d801ab62a6b72b34153742e90ca452911f479a12c23861
+Entropy.5 = 60ac946f4be9df8ddbce3c7764435f6faa9998560280dd91e23666a927435c9c8fad49625bd422d5
+PersonalisationString.5 = 37fb24e8fd6a8c3ca8c0d94c36584f8b7065b4019acfdc335f98b58665ff39cc9255e7ae342ce628
+ReseedEntropy.5 = fae9371ccc517e024c6638eb177019217a8abf833fc61c29b691c0943e2027b3dbbd678cbbe178e1
+ReseedAdditionalInput.5 = d6d5e3f43b2b6c8661e9c8e2d91ae8102f61835424e347d49b1484d11d3f5f315599578d57ca538b
+AdditionalInputA.5 = 474bef43e9e2ba2fdac470f816ba49c8335e7120ba389e223382d091a47d2d87e1cb9913fdcb29ad
+AdditionalInputB.5 = b891ddc16d98897bcb8d3db931d7abe217dbb91495736477beb6b971c5c8df2e46800415c52e7c28
+Output.5 = 1a4020cea2de8a1d3b3fa9a2f681b966a3f7b8419e0d9fc033467ea1678281a4f4e368c64bd1cefefaa51b260d11ca2df9f80d991244185f5920184a75215a68
+Entropy.6 = ddc99297beb07933c1ad17ab6574d3e276d5e183e8a8658f95c69d738945ce9542f8c8ac79f9fdc6
+PersonalisationString.6 = 1dbd1dfb7efea7a62379ba1ff1171e51db2ed49d54ffbbf550887901d50462d98feb786e1f0969bb
+ReseedEntropy.6 = d26180448a8c34d0552d9f3b16afb08fb9c9059bd62b6b874ec62ada232c7f50027dd359f9407db2
+ReseedAdditionalInput.6 = 1641925c63c2c6d6b06ff26483c7eca340ffed1fb7f6542434775bafa2c8ed862da673d8f0fd157f
+AdditionalInputA.6 = 35996dc43bc44696abed94ef74c097f1b0e8d14ffa8412d6f77dba98fe9fab8857aef82fb8232bb1
+AdditionalInputB.6 = 712485b786ce3b47ca6bb43485a483a1e8d745b8aebc1302d1fe84c4a3115bc70b76c2a178c8f6cc
+Output.6 = 26b5f25009304e6bbe8367c5bfb587d463df6a27e3de30b6ddc1090e5b8ced13a0f01dfe4c810d6e5ec24d6e0bc8b4edc290a4f7bbc2327836b7768a3df5ed3c
+Entropy.7 = a9045afa9dee7073c814d60e269cb0196564b6260ca368984bfbda40fcf6787fa01382fd1bcd5cb0
+PersonalisationString.7 = fe7bfd090bb1e49326efc38c281e4e36e206144c4a6dc34f215a2d58522b172f337eb7745fa63bec
+ReseedEntropy.7 = 6e799f65d9412b40767229e83d53e886775984d4e9e90058a31c88a0a27714269653b57503487c3c
+ReseedAdditionalInput.7 = 8a2dc5fe6437e25c20726fc43f886cb0194632beb4855ec5dbf3b3815c900d1a38a311e75b213599
+AdditionalInputA.7 = 084455982031bd467480225225c450c27a629d771bbe07d9a78af06e4b40ff8ed7129e2c0ee7f69a
+AdditionalInputB.7 = 9f3dee85623e81ce868e97c54f36d05e3e765ac94ad192f63df9ad0af3777efd1f3dfee2a180a9a6
+Output.7 = aade92a4f78bd4b66322e341c641eb4a575cf2e9f96c46243c5de5ecab0e047c9c3254a1115bac0c9e80ae6ee5dff24e816a0a78c592490be8c0b2b5ebcc4b65
+Entropy.8 = 442a8156374c2f82779cb316b091aafd4295271365925248c6bbe5ae4dd75552e10493c45bead8a0
+PersonalisationString.8 = 844a79a6dbfc608b899b40e8ef733d3eee9b6385604d733c467cfb0c3b61c1f7ad7bd5b17801a259
+ReseedEntropy.8 = f29047950b53ca740a81204c890a4a825b709ed05ce79d09d43d5d2f1162630539dec23bfeb09e7d
+ReseedAdditionalInput.8 = 02626ca73b243b5b20a320e68507d5cd9171556b3d337eb408a2e6b41212b2703242eadd9e27e78c
+AdditionalInputA.8 = a8770ac0e465b0e156254f5c1a965c05fef6765314d3968711eaee7006739f9f0091f016ca420a79
+AdditionalInputB.8 = d303b302b51dfeee5f55505c155afb79cf8f0a36aab302231492461ae53d15982ad452fd2efd7dc7
+Output.8 = d6a131b2bb36f70155b9ca85ab35801e4a004985fe80bbfb5a20f77a1f737dc18db702f24f2287b3336ecd6a216424a320ce468d2dc344f48a45767ea2abd1cd
+Entropy.9 = c96f5d166c808ca6a1ae901477ad03de00722397b30b52aace06258826c9d6f8909783ff52e31af5
+PersonalisationString.9 = 4725b791d3f6d03fcd074bba54ab7c92a78166e7cbbd73d027a390f7490d2b37162f1a95182be431
+ReseedEntropy.9 = eed3c4c78f96b2ce75c008c10cf153346f1177e2ded8d6ca85689b04e1a305ff9ea9aacc84d7e445
+ReseedAdditionalInput.9 = b88b8901e398d5e1769f62d208e77ae699c722e55f7d86a01ba9996c6ce55af4c0acc20d10217d97
+AdditionalInputA.9 = 1aa071afa40dddb3ad6655435ab05aed1858bdb8a265b7da299893edf9c91e87a2401bc0523387b5
+AdditionalInputB.9 = 02f6daf6b848c33ecf63d30d50aa2283e950b0f8486cd6043f62629100de8e253c6900350bff1f3d
+Output.9 = 88cc645b038009fccdf0a176f87b86c4d67a958b30833080e5841c844b08af07d3e2ca10fd2e2a29521304de70256cf9598296acddd32c8f06552daec748b44f
+Entropy.10 = fe88ca22f568e959e3e939e39c7c811760385e499995d87f393f1481bd3578a6f16730a8c334e1e4
+PersonalisationString.10 = e4a47e7f8b5517bbe3dfe4eeb8aa018320de95fe8dbd74551f498e4ae33562ebb79be448afdd11f9
+ReseedEntropy.10 = cbc8f672513ed1366ba3df0afdba626fe84f4faac94d135f0f71bd38590c2a164aa30344ebb0da68
+ReseedAdditionalInput.10 = 88cd4b98c5eae51b078433205061dfbe7eca1e0f0e52b167d6985168250490a15082c0c16b8ff2eb
+AdditionalInputA.10 = fb8f52d81cad186e7b9e974400fceb4b1b78bfd8b5a6b0b11c8365b8dd40a2b135da7208d3a4a383
+AdditionalInputB.10 = 3d3fd666020dc127126c462be2d628f277373d240bcd46d48f167d3332b63298630828b5196e6f5e
+Output.10 = 3162da5c345ca3f86deb345f627cb2c8d8aa03475b5ae27e114c567e7a1ab9267cc71e1fa826cc4df8b7984d7213eb218fd5ab73fe6c2c7526e2041fbf456f96
+Entropy.11 = 39665ac9d896611e0e4cfe2d5f0db82a5c160d1bf466a6aa211b876908ee09371456b8498084efc1
+PersonalisationString.11 = 7b0836c9a05bd34e2f925c488fb49da7a448996364201f07efa904fdd4f913de971f04a258797fd0
+ReseedEntropy.11 = feddd07264c3bc840e3f974e37b5fd4cc5705a9a6cdd406e92011bfec6110fed476446e89e28aca2
+ReseedAdditionalInput.11 = 6e53310df1f2c798116b1eca82e4a1b525f5996bf69b71693df23b5983cbb2230f4b03bd98b6e719
+AdditionalInputA.11 = eea9987da8e76275ed4887f147b8fa15cb59cb26c60a3979b0b335fcdbd35a0c8e1d83742cc3f0bf
+AdditionalInputB.11 = 1fe4bd9c1bbc031eded48a0d43a41410a1b4042b59d212671124d18df5d8b12bd855a1680e6a49d5
+Output.11 = fe639aeb66703209279c405d99169e570d96e57dfe940d126cfc42e73c3b1c65b7803b7f66bc7435f3a5ccc70c9467c4352c8956865a3e5aee36146183c9592b
+Entropy.12 = 374986acbbfaf762adbdd82c842030a31dc7e65554d8cdf3a5319795218cbc1bf295c259b88ecd16
+PersonalisationString.12 = 9ac0bc5c87e11e4402b7b2dc59e526314f27b41ea0289838e750372a0f38c3406ab3c57ab8a8ed58
+ReseedEntropy.12 = f9d9382ba019ffd3e3a9d863009cec1941fd7a266f24d3a57e190376685a939c048cdb7d7ed1956b
+ReseedAdditionalInput.12 = ff60d2a49e1ca178b442a4267d03f2583fa08345b5f2ee51539599ac945e133baff25693a609d824
+AdditionalInputA.12 = d5e505aadbde83fe2dff009cb1f5a3eb606e4fe14c6d34c59355fec1579b3ef2fba867469a92afb9
+AdditionalInputB.12 = 16216baec793ac9b8bbc6928d6f804cfac631136c3b12eeec64ee4784ffcee5764ef66378e7dd17e
+Output.12 = f9a75e5af126f61096b3691dd14b053851215b2ba33d59bf4c6f2fbdcd3eea281e748706398cf7edf0938ed8924d8f935cd70c132acc6c666ede6bd6d4d711e7
+Entropy.13 = 3d5a03f6d12504b09e9e474822e54a608cc625589d9ff2fcee96f3b61914af68d82e367f151b13b1
+PersonalisationString.13 = 205f0155cd5c00310ba10f9307f4ac9f956d07312f047bf1de4640c80bf785c62f601dae652c44c1
+ReseedEntropy.13 = 80dc2aad567a434500a29cff1c5ef3ea01d26d541de2eea16b65c33e94f40383618328771e274442
+ReseedAdditionalInput.13 = 797d7ef26e18b78d0ff21404a2e8858882e20c977bbe046297518273661384e4da22e06e6f91fa2d
+AdditionalInputA.13 = b67cacea64cbb35ce4cce09bfee195f51690735a1881d969d04ad8a3e7995f9c8008a76303c62848
+AdditionalInputB.13 = 4d8b9cad9c933253316d46e1d2b997cfd7d5480919b5be40ba0da2bfe1c7ec1ef229b213b5a2039a
+Output.13 = fe7e7875099fac19d4cfd05f2f79195f9529df6cd17de0dda6f7d219cd4c8d11a27a6afe252c508aa905a3945858b1122bec2a4bc330cf97514b9792369eda0d
+Entropy.14 = 04af410ce390f29b89af36bf87be365cff569f24067f242d15a81678378d4316081c34e09200ca52
+PersonalisationString.14 = cd0596aa896d5eb99b3f57df89d7cda650c6e6ebc1391e1686744498adee30aabbfcad86188e725f
+ReseedEntropy.14 = 726bce2518387aa2521e1e8961234bd48bc5aff970e4db3de51c6705af428e820351f084ce6454bf
+ReseedAdditionalInput.14 = 4f420a1595c88987afee6f7051ecead3f2e17414be73a9da107dfc0be8182d41a31d7a175c4574f3
+AdditionalInputA.14 = eb4fa0ae2bd5ff9ab19545d30350fab09719db12f428ccc3fea36da4a02e8bec1f9d940e2e62d4c3
+AdditionalInputB.14 = f1d0853fc6fecca6730079b5e64840bdcbc2ccf4a9e20aa08e8ee2e48c785838b154c66845e2423b
+Output.14 = a29949eb92716b0682cd27f62ca00cfbad717fc976c55dddd854ded44a53ea2cd0dc0a97db8b6011d583f8fcb522b7f8c3d2fdd68ebdc083e23d5f5737dfb572
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 4143f14949a4c102ed08e4e24388d0ef7f66baac161a6e6af1a358d478745b6ee79634b8fb7a94e4
+ReseedEntropy.0 = 43810bb8f94e76cfe7f6f983bd83e3e216b630431757e2bf64a78331802f6276dd8d8f3d7688c30d
+Output.0 = a5e6fdc2b9eecf4dd78a31f26485bbd5b17bad6cd315fd448970f374b4f1c3a6054fee5450735fba049745a7a66752735802b19569de2a017c5475a25ae99d2b
+Entropy.1 = a1e8127d485c22c2691b342a429d05dbed200f4111dec8c1906ed33fd057eab36cffb095f7e764fb
+ReseedEntropy.1 = 12a7e9464f4758b789cb32f2b025ba1206794324636b2ea1da3e120f97c216ee14bf332f79d3395c
+Output.1 = 09a37b3d3146e0d41b93bf0decf45121afd30d307b8afb4b1a6e4af918369c80d3049f757083fbacb3b6bff85e01e39362fecab5427d33005bd83eac1aba6dba
+Entropy.2 = e9bb16372ab02b3d0c1244a5f3a6fa6e760c9ad599cbcd17011ddfc6cb851f018543a4e82c3cd1c6
+ReseedEntropy.2 = 24312089774e118ffb3eca0d2818141f1718c102c998b7594aa5578af96bc5899520ab364667a9ef
+Output.2 = 71e305d91a0974f3f4f92f3a498ec1f3a58024c9997f737070183829a04850258d94f8fb531469b931177e847ded109f0f54239e8e984fe96df353c4486d1550
+Entropy.3 = 25ab267fbacb411e5f2d389e842b4e665c06446e657b00ed377f7534e56afe92ee3f07c1d3aa02e2
+ReseedEntropy.3 = 1868be408bbd4cdf903798ebe4c89b9b5aecc3c88e018d77b2cf58133788e929ae90545a3dc76af8
+Output.3 = 352563f93073697eab3cfb4d97bcca1f27da4fd871771654ee4790286ad7032c7735e87a3fe480899492f68a73ea3be3bca36bb0997ff08b2c72421567c8871c
+Entropy.4 = 7bf776389109d752d7ca8d29f15191da3c437758bab4a8900d39d263f4a878d4bc1915f63046edfe
+ReseedEntropy.4 = d9fa771d121fda648c9802fed58b259b57ff99b01d45218f226d89685dda4f4dee0e543ada9b181f
+Output.4 = 9be553c294a5c89394d9eb0b430d05c9bec0f7b75ce183ef0604859519a7e505aae4416c9872982858dd2751673c31aaeb1515cd957c11f4e01d49318a94817e
+Entropy.5 = 8efb09a25e6851781e6144987c57c8184681f7320a86d4952c18daaa7b96b38b2c1e13881a8995a3
+ReseedEntropy.5 = 5f413a407692d8e53176b190af27dae17b08b3f708b6ac3c5722e435fe00897e256dc7ebe5cf3800
+Output.5 = e846622236eb1e51eee58a3fae3d653c05820dcb3288a558cd698c449a9bc402c7996cf0e0b24c001586209e8a57c454f727af381722e48b4cedf27e23b086a6
+Entropy.6 = 43597c42cdb2ec6ccdd37caaa267341b515b7d50d77fba1459e910718f76bc1100d6874335f33e67
+ReseedEntropy.6 = 3a1b97d4b6a2e9b584eeeb90a349e7b21171e6a70df353f0eb8e3ad41a4c157c0c4fe51b1731b3d0
+Output.6 = 3d67c0f14251b7c18228cb1ede2475a357135af27a178818e61ff8c06c0a59fad9ba12cc2f2dcdedb61af56497225b1adb1bd15a8137964a43a75d525f2cbf6b
+Entropy.7 = 8bcc87f4d63d0ec178442dd35ed25fc064404821477fb49ef2168bc730255d979a5d599a42b3763d
+ReseedEntropy.7 = 7d4ffeaed03ac406377b87a13f3516ac6eff95f2192f37973ff230a879d35fb2424f3ff86f1cfa77
+Output.7 = 6a028d7e73d11b35724649980aa8f5a68137209bd2c98865656650ff4f10c0745523224632bb02442e75777d1ed882b25f1837219772729b2285935c6f535ea9
+Entropy.8 = 0b0ba13361b6b36e932869c30b9e88e7f9dc2bdf9d9e0dac487b0c1c8925e1dfc4ec4ebbca50a64f
+ReseedEntropy.8 = 8eeb7d773ea5a5e1ba66ee64fb4f8047d95f3a2086079fd631b2a17be8b928b4e0dbd50a7e6eb2a1
+Output.8 = 0ee5631cff99aaf7bba4e1718d3c3d873ee8e7c41c6c1c553201c78299677bca172f85ab7c6cb5265862d8a6afa823f5bbeff141d689f623128c159fb5d4de7d
+Entropy.9 = c9bbd27e207f1b229c25a2bb37fdff34d8c565d17acbadd9dfe46118b2afd97236f30e12934a24ea
+ReseedEntropy.9 = efcaa4527430b8c5c26b8b11da23d5ca05c4db14b1c82cdb7d2004fc9bd0fda1b8f323424d035347
+Output.9 = 140c020bb41391ff2ddc1b48e773554a616651a5e03823e3a6fa5312dd652779245738f4e0d4cfb4631e7e70bbba908fde87f95c0055bd7fd0aed95ff7eb990b
+Entropy.10 = a3ca9fb89707f0d562f1d0f707b770cc2b2d5d038e8905dd02b0e286dc954ec2a9e04b128372e567
+ReseedEntropy.10 = 70f0d7528b59853bbb0465f2e5e0beefd7fa3335f8e656c311cc074b8c15a8a5ed3eced8c48a2f25
+Output.10 = 1bb0e50a0c1381ce3a722bb4f7a0da28009a4c24063503b91b4b7b8771cea3f888aefa14e956cc43b8a7dd38d21a2b88fc0b3a11ca3a4b0ea52b53bb3ad3e262
+Entropy.11 = b92108b6ea0c1a2414c204903e7c8071f5ddc8f7e3221d6d0b4cbc2fb5617be6c1da960063f9a21a
+ReseedEntropy.11 = edc96df8a70d2ee1ab5fc7dc11008aa3c6dfd24048ebeb8995144940444a89d503940fb3696bec29
+Output.11 = f1b0c10a6736760ad81711fa1e84b1084a06f70eed3f0807b5992bfb595fefa27741bbc638be1cf1d4576eecf2ef82f12ee249a247910330d9593e374192f9f5
+Entropy.12 = 544d7339090742476ca8a326574e52029bd5e9309cc91338601e24d464e0cfcba3e72e3678a2a8a4
+ReseedEntropy.12 = 41fa1add1ca91b3d4d2df9df78bc7de41b00fbcbdf7932dda0952a41151379b7c098012f860f0af7
+Output.12 = 28bb3f53514aa1acc1581af7cc317b00a4d6a03f4a669f784891ef21a07ffecd3d7a40f9db6059d6bf90e695445bd5e24f2efac0af49e752c0df8c98c80b3985
+Entropy.13 = 8506b2220bc2f452d640685d068aeab31d5c665702a5f42da6856aa825884a08b613b27be4e85717
+ReseedEntropy.13 = ab289bac2c6aeab37441894571edf91e87e43b9dd3a502e7a53cb06b082374044f11b9009cd19592
+Output.13 = e1a7d5c127741b903e56cbd03fe9207953e21dd1a9750b0ec54843d212fbb2ae0208cbeb1d6c7b348cc02620f0430d242bff65f75b8a1ad4362409b5aea0e38d
+Entropy.14 = 963fe575c96b319a3418cc7548484ab827df1f7ba56b0da8131fd19f7712add1d29a03ed0a20cc90
+ReseedEntropy.14 = e1470ee367e55bd8dd82dea6f7fbd905b98d596306807f8aae529807b36aa0655bd260e1e2bab75c
+Output.14 = a1e6286529fab40e3db9b57741bf6e5b4904590d05569a7d571baf77842065be742e2c26c14e8599e46a520fa39b81ebe32dd857556d9f55e4bd37c1952afc0d
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = f5762c0a6d0a2ff4da58a9685aeab4e60cc1affca629936f91dcc2b6532bb153211ca14678e3ab82
+ReseedEntropy.0 = fdf003b13886ec04240a4d2f9448f773e00f2b5b9e21034b723d9bddc2f079654947a1122c7d9adb
+ReseedAdditionalInput.0 = 3951736badd2a43dc2e8a847c3e163cbc0f352327e8889bf400715c7249bc721f08abf8582b29d9c
+AdditionalInputA.0 = ce6b785c04ac275cd47d2517b086f209c15c79638c31b40db85823f6c9f9f77a6333ddadc57924f8
+AdditionalInputB.0 = 44700ef16d914b3b92978cf4ca2dd4ae79a914ee55649775b320ee700eb14033abb8ba7306ce75d6
+Output.0 = 17a392a8a58d2b65090312eb9f0ff7f300a105a342ae7b53751ba656d1127a02f9da4ac3b4bb7b2954adda54a4add6c95b5a09b010878b04578b6095d701e225
+Entropy.1 = ade73a2fd59b2194e78097e2be43c9a6af6598a63c51077d8a4cd8e3b3a5e9086bc4e369990d7dc2
+ReseedEntropy.1 = 38acf4bc97c1cccc252ca50eb2338d8154688496ee06b9ca4825a59f63bc5783e8b736e8ee5c74a2
+ReseedAdditionalInput.1 = 3c37fe0d996d26bd93c590ae89a8890046fa616dedefe27bcdbf9c4180135ea429d65048039b80eb
+AdditionalInputA.1 = dc28423f4579b91b40977aa124c3e5d43dfa7ea5b0ff1f62d66bf89a2263dcba28d9d3a9826bd481
+AdditionalInputB.1 = 1916ea19d683aca2d06841c77f30fe8327611229a2f403c7ce63dea6b97eeb1a8555131ca70ba54d
+Output.1 = 205720914bda38428b81853dec0602f12ae3f3200aaf6ed1e7bf32c7c69e5b2d8f3f753e0887a49b1933e153f651a2c91e081de6c25c248c21b3174233ed9cf8
+Entropy.2 = 243d216d2db26ed1b3c6d1d297b47dfa5a37a3a8bad00abefc67e92a93cd008733c92653f8e6fbe2
+ReseedEntropy.2 = 93d9406f16ed0f1d8f614ac889d33d427874e00720ab7733378a1360088fb81347392b97b09c56c6
+ReseedAdditionalInput.2 = 470b4deda8e711c023d4354210712480af042ca5a5a20df7ef30750a45f659ef138795b12fc55965
+AdditionalInputA.2 = 284850e5885b2800093b076eab548d7a23ab421e19b13d535f335fafc857f1073b3849857f061f24
+AdditionalInputB.2 = 4abad0b3c4e7f26c43b8bd914a0877fbfd0da455192d6d1f821aedca5ef617ca7eaa4d056aec65a2
+Output.2 = 59a2a37a6c42d35c32b393ca0adda36f2beae885d75232e1c369775709f873b49af83a3b0e2cf79abbcf4e16d46d6dd26fec8bbe65dd72e82f705655d88e2149
+Entropy.3 = e1d7b3f4e8bf148f7742951987c5ef32480bdf4f347de6704311da8f1c9631359137240ba5a9ed8f
+ReseedEntropy.3 = 018eea7b45bd7a39a639a1164bf3f475382c9f2dc84fc068f04a6f71710c589309e975c08ac152fa
+ReseedAdditionalInput.3 = 6352432e6c58263233ad9587e1ea7643f8af17a28f153137be03056c6a98c80920e48c05a0574f87
+AdditionalInputA.3 = 14f9df22e950e4f0cd57c59a0ec78c1f5c1d8b78a39b6e7abf5a66b61e5d74ffe7e046fec4cb834f
+AdditionalInputB.3 = 32d0ff812a6f6ea93c9b3489cbaefd1e25692b113dac79c48ed5129bf14420ad52c3aef2b23f9c0b
+Output.3 = 1016d53dcb2f291fd042c7ebb7925ae9b938cd59d2c3b372f4b2aa6cbfcd47171ac952fdc116a630eb379058bc6c90c4c9604269723852e8211ebb261669504a
+Entropy.4 = fca639842dfa245affe02aed08c0884634082c40af9e29608b28291132ec487c6b5c760f8f1e4c92
+ReseedEntropy.4 = 2d565b401fc0b0772f6297f3fc178bb98160c98bcb432156c0a20c2ebc2ce47884c521f24f6b3a61
+ReseedAdditionalInput.4 = dd7fa0ed97983c64e05f4503bfb385e07aa3f9d773870299b93c46330bac7ab4312ed2b800f71a99
+AdditionalInputA.4 = 8a55e72de72749f904fa992eaa6f4fd286e3075ce734f41327afebdefb18a93bc0437ff4a60e0b46
+AdditionalInputB.4 = f1e403db1f19986ad5efd45e95fe4eb872e1974ebb55ca981f97e68845586e509bc4805fa05eb3a3
+Output.4 = 7990fa66ca6a81cf9a49b58b33be63a779c70420b0bc8ad78f4bd18940bed0906b520ec5a5e7705c0b89ba206a718c37603c781bea5105642f4e750f7bec637f
+Entropy.5 = 9221ef9dda3e34aa94a7348e6c85206cfbf4ba5f0ca7d87ff0e90d9cf0e9aafe310edc48fe162314
+ReseedEntropy.5 = da4bd51ed4aeef2f54c618a8764b28d3ef43730d5b52c0e1fca74412c47dcfd76c64fc04b6b25aeb
+ReseedAdditionalInput.5 = 8890d7604e2c7b5220ecf94d0e01c47a57467d6798d4ba377bf0de203165e2660ec12e79e2914eb2
+AdditionalInputA.5 = f78128073c681f1b27b75400129af2ce42fc10e179f0d4045308ce43f5bc29b59e17c8cae0cebdad
+AdditionalInputB.5 = 06f75c13e4a90c5699a653b42dc25a03518185f6361244c18034563b969c9ba079e02ff000ce3209
+Output.5 = 61010df7cb9d7226a331283007fb3104569ae13da827b0e15591de9124b55f8ee0c8fdc0f34b9b817e261764fe1a1794bee13804e611ba546e62359550d08007
+Entropy.6 = 20d8af17f8aa4a7948378b423f10dfd0168e2174b0dd23d3794ef2ad5a28429e6fa4ecc8ea7186f9
+ReseedEntropy.6 = e57255ab5955f1aea4f55798f546eec200996f5ca37c50f8076c38ff2b8b8d93f15a38b4391b349e
+ReseedAdditionalInput.6 = 4bfdb340fbc9726cf4422c0a3bf6994c4be399695c1b97226c9cc015c068c59d9449cc1b26871977
+AdditionalInputA.6 = 6625a91684d497610eddc23cdd29370320921b572caa38db383fafeb6ddbb9caddfddb9da13c595b
+AdditionalInputB.6 = e8bdd11c9668d15e6c51edd92e0ccbe80bd174a6d4e00a9c475703ffa882e7137ea983bf941ce72f
+Output.6 = e6f9dadc5e127b4f96e2918417cec9c35e0c75b6bbe6f3d95c5272631e99ea2089eaf6c14d20f77f8070a93a7549599e11119aaa1e04438005659c02c404d870
+Entropy.7 = ee30049fc11ae15ce09761648974f0aa4fa6e6c7db372c1d832096bb24e402dd6a6830233ab9b4bb
+ReseedEntropy.7 = 459cd0f49f8a4e8b652110c0b148539461e6e7d966d1ba68fe11175b778e189bd1bcb08403098749
+ReseedAdditionalInput.7 = b2f3fe99855725702941436c2af8766c397caaade70958f56e9ac5d7f282ff9264453b134d21fe03
+AdditionalInputA.7 = 2fb46fa20e0ec2e45500247a916575ab2712f3520b7634dd29307f1760cf102b9aff9a48150972f4
+AdditionalInputB.7 = 996e03a4d7c6afda5dbb7f52f6e016612bc5e881e0e1ab0938295c663e4bc28468bfcfdfefb90ded
+Output.7 = 07f52dbc718c6e8bd84c6b7da48a225fd1ebaa7ec391603e9fedead92234865470e561112ae322a1e1aac661bbb1ba6bf0656915696b9b1a08449834b26ce735
+Entropy.8 = f0f5bfcb50cec005da118fed8837a02db1ecc0417e88ec4585773f3c20b9f90d5e5a9e03d05d0d11
+ReseedEntropy.8 = b173a155e325ee6811ecf95bd1b67f3cedc726561e081446d9b4a67e9275407ceb07685c032ff70e
+ReseedAdditionalInput.8 = e9bcdb16029403b15234dfbb5d280c50b01f10539e767cfe227202ce0660caa584c359d07258971b
+AdditionalInputA.8 = e847c8ffa153fb9b00fbb2c68e9f677ee481d26342c1d401d246244c70ba049618f51648ac98cfcc
+AdditionalInputB.8 = b4a46d6a5a66c722ef75a5ec0f46dbf26db7906a500131bfcab6622ed3b65401d6cd35672db0f0e1
+Output.8 = 2d65007614ef03d598dbf0f78fd55d56528612d7c21246f0ddd4a90d4f6661e287d7aa909488e2f6b914bf2847bd83db4c0af564b7353eba3542f78f36c69cf4
+Entropy.9 = a313f86d26e37d1cd12bbb298018d5113e77281c9441b581f17d82f85b58ca9d5306ed8af6a870fe
+ReseedEntropy.9 = 9926607cdba525e790b4a3c7d0a499f19c63a825722c6442a88cf840141db1d85c9d8e2c0db8d981
+ReseedAdditionalInput.9 = f029803f4d5cda3ce618b17afea12f148ea348e6b26dc047ee4278e40e39a39f27f13d0306e70d1b
+AdditionalInputA.9 = d1dd47ba886d215d8dc444b451f154f5a66f383f6ce1e3588668f8bb8cd4feae9695c01a37566560
+AdditionalInputB.9 = f6a8b5239d854c59b144365f89d47374b380c85c3bcb43fc34bd4ad558b5d4dac9e49b31dcee363a
+Output.9 = b2477253da7f7f364b14410a6ee6c1cd7841f47ef152d90e4b811ecbbf5f6082bc67a07cf0a00f304a157e4b9557531b4bf4f2f94fd7537e000c8d5379432469
+Entropy.10 = bea7d635775badfcef7da70ca4e44fc17ce8308791ee1a89d1a60d90f29a59dcb7e3e2562d92c7d2
+ReseedEntropy.10 = 3bed5254296e8af239a95f9d3c2bbba75200d19c5d84823a3d5c9dcd8b596152acf22ce4c3a8b6a8
+ReseedAdditionalInput.10 = 8b3bf1b660685e08cdb3ee0d902c0f8069363c5dac0c3d322b68935cd26b99a0280bf2432607859e
+AdditionalInputA.10 = 7118c9cd79da6752b74a7cfc3390ce949bfbf139803638799be9bc69155f2c4ca098d9d8aa132582
+AdditionalInputB.10 = d527bb2291873b58e23a9fde22b17b42c748d35e1e8278ef6fd5f3c56f4064e99b3a57c8d2cb0166
+Output.10 = 6ed8c3e86f9cb162dce0d4ad8d5fa8e2ef5323b8e70d5d547391c84663e30e1fc3e78993fabdaa6ca5449e37964c87c2f7944ef94711612604c576e6c3d71a19
+Entropy.11 = 150f8c5656d472692895ca108e6877afab5c8e37f4c4d9fccc6ee6e9465371e329a171d01b6d7e71
+ReseedEntropy.11 = 4f63c50e653ebf1c98c033bc22f2ababca5c85a7f3bce00f6736eb20e11a8c52038209c33ad2ff67
+ReseedAdditionalInput.11 = ad4b09c5825c4c44909558ae12627d528287f91952f389882e620ca8d42057e794ce5c19498e0876
+AdditionalInputA.11 = e8ed8077465150b5ae54209ca230c54a79fe0396e38d4a2717d6bef959995bf690b9b4c51193c79c
+AdditionalInputB.11 = 9cceac68a4a4c6e1115dadff7aa777296af22fde48c8d725a07056eecc220c3a407e2cd8f4019347
+Output.11 = 2c71cbdf0c7cf3c47713abe593228c4233e380580f05807631ec1e497295c28a553fe55bc434cd76d9db10c307caa4c2a48255b2e8d7bf301366ab40eb9573ef
+Entropy.12 = fa5ea6bd7f8a4d059057822cb6dadbfb51ed0adc927771e0130effa6dc6383ba048ea522bc38eb6c
+ReseedEntropy.12 = 32bf4ff5d96f2e738e1dca1fa6fdc6841b085760b2330c44a510317c33a30cd0ea67491259c0ecb3
+ReseedAdditionalInput.12 = b1bc3ade5f8e28eed41fca48b5f3c1ede57b1e87955e10f471c644c47ab1dbf5d92098cc23716829
+AdditionalInputA.12 = 78e9b99189e36046992bf82f588bb8145b16f35e6537f76205f1b99b9ae92a84c29b65b9d07c1c4c
+AdditionalInputB.12 = 5cffda30ab0d71fe821199ae88218b8230345c94f667b6642db654214f3a15a7c6f1609533bc6e52
+Output.12 = 3e3263c6ff3f2861fe59fa764dd203489917dd55e007e1ac28eda850053a94ef3c54008d06d9dcd278171ce69269b47e7ef8c04d5ad17cdaf5afec021acae16e
+Entropy.13 = 8de5814b668387418809cceec4667f7b67db3c8755d7f0450b65068f846c341cd1c45afa4acb3964
+ReseedEntropy.13 = 486400e96134c7fc678a9d5d7bd22e8af0927a090636029b613afd1b1b8c6b97ddf57eefbaf41ae8
+ReseedAdditionalInput.13 = 77306ab197aa946caf000446854d9a0b44bf6d4822b227c42756e3b7351ed6284ca14b07b1648138
+AdditionalInputA.13 = 440be6648fb253cac8b4fa2ff0644c305415c71753108eae2007348389f5ba83a8712879f5d90215
+AdditionalInputB.13 = bc005a5ab11b11441c1d7b696e231dfe74fc4ca0689de4a4c26c6555cd19c1d98d88a8aec478498b
+Output.13 = 00349bcdf0c4db17342fdba2df3451dc07958a23df82c8907396a32bd54e8bb2cb246e31e0a2fbfe80d1ad438692db162de94df7bc4939bff7343613cf4006b2
+Entropy.14 = c4763f91728f957006da20a81fae7dfcda649be1a641df44d7ce126fdc0d13d9eee64ecc1e0eeaf0
+ReseedEntropy.14 = c5d8fe8f0e54c523861e80146a0d445a4fa0e9aa55675e7c942c06601eb98258fa549ff41ea6af38
+ReseedAdditionalInput.14 = 96256ec32a076f5cc035c63d9d2d6232699d3c9a2bfcbe8d7d1101b92c8758e751fbb9c944f24c57
+AdditionalInputA.14 = bf76973791b52d9387e2a36f3ab3620bb983dcd2399fef3cc6bf4cf86cf7889964300fd4f9851aa6
+AdditionalInputB.14 = 2089acf7aca43a77d8459d4f384919575ed88c7c4759b9dd7033a132a85c2ec6c71025c166083bc7
+Output.14 = 81309a10ac3f02d3fee049a5ddb9f02f64dff3d6b75259d561921a8349b30054059b2af81c6f7d50189a0bb6d360da06bcbdc944997d6f8b051f23998c8c36ae
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = c1805acd7fbd1a8e598a5d6b718e62a9a804017bea2156a576d0c79ac1b65de8b9a9f16b2d39f517
+PersonalisationString.0 = 364a2d14aeaa9effa3da108d886c8bb1277d3c79e47d444ed93cb67fe282f8d0162be262ec435c24
+ReseedEntropy.0 = 6bd43af18c4558a43d85501274fb96b09708e121a74d444a14886c471f8dd0e1b60cdfd6cdcba99f
+Output.0 = 5993402f0e1fbcef2b315928e26e14ae8d9e6dc418e9cbc986623e1300d2cc789854ed7c5df93ebd42dedcdec703153f12783243a234464c00360ce5405100aa
+Entropy.1 = fbe62f353519eda741da260c97289ca566e5424495cc6591b9be7ded77d49074766b64394edae2ff
+PersonalisationString.1 = 6e475668d4d71944d8e73ee293b1c58fe47a7303d81cce68655da85b59423fb7cbdcb2dd719f48b6
+ReseedEntropy.1 = 4b25a96e854bde023e1b9cee72abc1d639a84efa876bd763b092cb936037415e16aca45d22ae822b
+Output.1 = 258a9ab14b16cb18ebe80b4f4a749e4fa1894a43d8b6ab624627af1db857c1fdd0f60fc34550722dbeccad4de7b063161baa45049be3abdf286892c27287b67a
+Entropy.2 = e3d0304440105de36177446d97e37c2eb29bd0d0d4070ee18f3af1424349d860a9c4ba9f32e2bc1d
+PersonalisationString.2 = 7b7bbe07f3672a3bf266ae2dcd503b942abbd6d6379d59caac34eed96beab8cc2e51c531f477ee1c
+ReseedEntropy.2 = 2a62d06dfb47b2834e099fc66ef50c3490e734242545e50ad8c6527487fca4b7bc1520936dd36d0b
+Output.2 = eda9fda6ade228133244b591fc63a7f9abf0b68579af45d4456b00a39082dcf6d3029865b203f1d044f4b30f4f67394766c1add57048ba45748e9dfc6e5901da
+Entropy.3 = 6408287f3397cb4ebca2b531ef99b1fc187a68a4047ee907561204682c7147e9b563b10aff8988b5
+PersonalisationString.3 = ea02e2326b5e8e3f2c80e3cdd01b78984731ae13802ad0bd72ea5ee3d352d73182cf4a9f5b459d81
+ReseedEntropy.3 = 84a95ee2d35974710a7fc6c4833c831c0600019f25cb6254fe8869109e81e08667517bbfa9e81af0
+Output.3 = ebab51b046cc1577d0e932e5683a069b07be286fee086443d01fd300025a62b70634956e8c37a7bd1809dba49e1144217591f28c9da9c3fd2141bddce42ac8b4
+Entropy.4 = 899aca60a3076211e2e2987b55b90aa001fbae82487aa11f3cbcaddd49bbd132c746ddde61d4321d
+PersonalisationString.4 = b1797ff684cc5e4c7eb4a779c859e3f1de79f8a567efe1e868945c67dc6fdb91fcfb98e340e69857
+ReseedEntropy.4 = af9d3c7d7a4d23bae1e2ea1d38284d1ba9c87fb91f16f22499dd6131636ccb84e85b2026955cba4a
+Output.4 = 320d59b9336281a3ec59253f36dec48c1c686895e8bad8f701d76721852748cf70b338563c7f4fb8199896aa2d37cb2af3e4140290e4752852c642e07d5a6096
+Entropy.5 = 3552d6ad42440b564627fb40f8e5ba60fb955d3340c42309d4b2f52ee9c516f26d946a353352ba82
+PersonalisationString.5 = eb5c00d6ce44ff83759f5c657c55810ac13c8df1756033c0209fb6beaa7e1cb086231dbd75c0de3d
+ReseedEntropy.5 = 300d3ef9952461723ec09ea50e417c133f6d003294199a6992d50d55d3ca273e7b1d054f18c5357b
+Output.5 = ba59eb9f444def7b228fcf0486ba25a6b26dc63402c6ae7cfc80f4614d331ef4782194a7d6c5818869cd5b63bc2777be77e7de8ef3795ea86fb363d80994b004
+Entropy.6 = c3d29dfa16f9a0609102f0bccf17e62d02c2626f7b31538697350ce3160392f77c0d301e89cc2281
+PersonalisationString.6 = b241d49bcaaad0c428e06d3a28201b7b7ec806e6030ce43d6d6b55b82e8399b75d8f9c0e77086d84
+ReseedEntropy.6 = ff766d8bb9e81ff8f65cc690a004daad66b10c1377768e7b915a598f1c620ca8a39a5b8914051a80
+Output.6 = 284dde49fceffe95cd551a735335d107677fcfb337e49f58c8ebd454997adb809f66623fc3af1cd216f28848e2d2f8d614eef55b3fa9b721bff603f66d708fab
+Entropy.7 = 4d788bd926d783b1049e249f6b5993d6e8451632fafee2974edc143be09c3c51ddd6b60ab308486e
+PersonalisationString.7 = 4caf47ffe9226c25a208431e93a8b7a9a64b3d8dee8d210c9ade3256472fd0b4e2f22cac21455fea
+ReseedEntropy.7 = ab800dc2ed83ff7752f65cecceb3f8e5ee69e34bca6c52c0bfe0b5bea59bcbee380cab8310360004
+Output.7 = aba5d0bc19a28abbf4674f3dff8fc638a479918afba6a19ca17bfe57f222e1b90bfaf2778e33a4ade147389ef5ada48d483236a12b4036c7f77fbcaea0f91cd8
+Entropy.8 = 65bbf5440953ce0a76b8dd2e8cd42d6d89713d70aaa806b6162e524bfcbc5dfe3612fc75db359e30
+PersonalisationString.8 = 0dd3451dbea74e0cbebd2aac22f593a1627e70d9d1da58c73d242859a240e27820923f332709f274
+ReseedEntropy.8 = bc1d06c0b2a5367696416b456a64af7bbfdc223209003381651c4198f81fe120e57039bb53869a79
+Output.8 = 3a0d620e3ec9ef179e8780ae429cb218abe7923bf808da98e172fef72f79f7cb0ec47a61627a5b7d60a129c84492bef433f1f44c4ea3ef4c53e099eda5b06628
+Entropy.9 = 53426ed46b9b568c692f2cb3ffdf4919c80e41bd15cb54a01f640b0f0da64eea2203112be9fe4dd0
+PersonalisationString.9 = 86a243eabc0039f6c47d85ed07c64bae29f9821b86654a5e1dfe7bff2f92eb4a8f9945bf64bdba29
+ReseedEntropy.9 = 5c8bd615dca2e8249c8271cc024f91b06941e3cc89715e7da3b93f70bfb8acbf6cca924342c902e3
+Output.9 = f8ef774fbec5051d3f6bf9cba3df3cb545742abec4a4ceebcd9460d64b6bfc19a84a070a6b8e7b563e882b1da01ae50bdaa013dcd6bb2a25a383acb3eb23bdea
+Entropy.10 = 2e045730c918782fb748dc80baa773407cabec74d78c30b3026f4682d6a9d127168e779142f9c6d9
+PersonalisationString.10 = f30714759a274bd7514cb19142fa42076e25197f6845b0b9a996150dff249e790ca27a9e8c46f40e
+ReseedEntropy.10 = a361a73446e8f953910eb6810a130d9f9b2bf4631c539c5c0cdbf1f247bb85da23099e044d119136
+Output.10 = 6b94d7e3b42999a25be4e49e1e6bc3af0deadb9dbd05d0cb3bae6528f99d7956d0018f98f442b9e1cd5cccd78054151e58efe6e4c97be947be0811cfd9de0894
+Entropy.11 = 63325651044cb9b428836e034f3e6a27144e35c1846afbbd49bda1fb42f3c4e55337285498b44780
+PersonalisationString.11 = ed9daf17f485f6d56aab27e99af0f6bac45ac4a4234ad708d3d3e3db4890f6acec7f3fc15e06b583
+ReseedEntropy.11 = 87b80a16ec61934f60a5c7a937f2f7636fde1e06bf1b89e23976a67dae4d3e31a2da6db44d502066
+Output.11 = 73d2f35375f172d8f987b8a26ede87006fd51872f6b5d1e4ae1e9bf2eedf756d597efc1f932f8cdc4c1a5df6c67e66af1b725c0b638d91e71729b1caac473b43
+Entropy.12 = 7d390fbfa7d525c84ab741c39c31bfd6d10590951fbb8bbab85e939b3d655527765b766b0f193a7f
+PersonalisationString.12 = b0721b935d8cc60eb1df041c8a0849b0e1f2f1180aeebc7b035c180e9e02c4441b7eaa0db900083e
+ReseedEntropy.12 = 0b2949d4085f748002a51f2fed767f76fd20f2ae1199fce62b0fce5a88bd9b7ec4f1d553d09a4858
+Output.12 = f4b5b76bbba496246a6ab0a0d67b6f63c475d72cf6028761f256c2fbac405fee4acb226b6d6d6d816500ed373ea35560e7324221733c4a05b2871f10fcf504ef
+Entropy.13 = ea331fa8990cdcdb98ab3e5bdedfe69b9776784def614b5562f43a4a5cfedbd3157ea0bd1194a99e
+PersonalisationString.13 = c016b0d65d68cd0a81eee6562e20b9f59ef68427679b72ae461d296fcdac5510471dfbaf0d43e3c7
+ReseedEntropy.13 = 8ffe2e9f2b23a09749fc2907626375659ad00480a0027f7d6baf5a750deb8aed3d1928f6a53341d8
+Output.13 = 38edd9f3a42192432ac704f484f332710a48ac5c65a2e99df2803fbd81c9a578bdb79ff94119729e6ae10f3c36c84f3c76aabe37f47512dc8d03c024d7477bf8
+Entropy.14 = d1497e396a2e1b482246ca8aa778cbc98a2008627ffd014c10772df38f9ac389082e0427779e1f6b
+PersonalisationString.14 = a477a42a221cd2cbcf790ca70fb6a5f18a91c297617561acd1bc5090573540b3fa410ff5ab41aec7
+ReseedEntropy.14 = 108f6f37621ace418e2155f70dda4c2b5d6aafa9269f6aa98a5455e3a1d188e64ec022c454c68620
+Output.14 = 05e4896494b02861a51357463f705e812a14f57eb8630cf1fb025c42ec9dd54de3f5fa1b38d1f3d890aad74d5ad1683d0b5981da4d3a939d05fd5435b1d50f38
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = dec08a9eafc4a838112554730e4fc4c6719802aa3c42f983562d07915fad7e3191e645ab5a610845
+PersonalisationString.0 = 56958bd48ed6bb2708e577fddd009e8371ad334b674f8b859e7a23bea46aea5390d92ae0809a2944
+ReseedEntropy.0 = 968d72e42d8e95f1106574c5dd03528d9e89b8ee7d22bda621d06d05fb2d67d9945234381fde49ee
+ReseedAdditionalInput.0 = aca47c2b4f33fdfc24cfc54feb9cd2b47e776f59aa9fe1a02467a458abd21d340b3cf4bdf8b46b66
+AdditionalInputA.0 = 98791e95249c6a06be4ef0aebfb8af3f0fce39eb9d95c4ec536ce7867ca6fb26ec2886a57aed8085
+AdditionalInputB.0 = a7c276e84e5291e9603d2c7e552a2ce29a74b9054605704ae5873b0d0931e27611e3e79262edcb89
+Output.0 = 34ac66e236da0fac7653f0e01d5ea535b8b1f5f5b092ae27faa8a3b333c8e5866ec3b31cef9290ab52ccfee630094daf23f8247d98ba20217d7470de775f9541
+Entropy.1 = fd0be4d7b3a7531d01b786f349ef9387b984f38eb5326a1e09c37e955a3b880fff1de8c3d113b8c2
+PersonalisationString.1 = 1ddead5b3a39df02c60d1e9f93a7e24b7513ec4e470de56880f6f7abbc96ea7e9967960176234237
+ReseedEntropy.1 = ac53b19dffbfd0ef02455cd9bb198ead378c0256e7cbe40782e01aff5290f5d040fea2367c58fb34
+ReseedAdditionalInput.1 = 899ffc010bbd6c1e0e070b81c9e9626028202ab2b983670f31ff0f7975c63d1134f69a4986eabc99
+AdditionalInputA.1 = 1a92003e60f5d5f72279f023e72e5dc5f95b2bc754bf884af8d082d01dc397c4c5cd964b3176c51a
+AdditionalInputB.1 = 9ff267a1c96ce43a7c8af9e9dbd3b87664bb57d24e4d71ff4b4361da9c808485e1780fb21b425204
+Output.1 = 503e4d5ebfa7671c3ff370975888ab38cbb58ab2b71f20b3a6f284831a84e0e8dfc39f8feb114bfc83a5f065c4bbe5af8b4a7c5b4c1350be9c3cc9b34eca4a7e
+Entropy.2 = aeddee12c01a13434242d7378c8b26e83e67ca4ca924e2ba47263294427f160480204da33ad8354c
+PersonalisationString.2 = 3941127a2d8b43e9c4299bbbdb90172e936e0e7a185ccadf1bc50a34d2e2e014cd05152ab2e70954
+ReseedEntropy.2 = 5f1d6ff59294da894d8d2176d4198d6c25a722fc571a6f6338654898ed419afeb95d48ff82264089
+ReseedAdditionalInput.2 = 058effdcd3b8ab7c75e138a2f27d2b7a6165144da965c4aa80504d48a2ee835bc53f5af37227d95b
+AdditionalInputA.2 = 5b2086ec74ff248df7e1726b93cc915ad1276a1387efeb585fe6157bc820dd93f507694aa2abfd53
+AdditionalInputB.2 = 1f2b4799f49323aef89649d62f22a3937452eea10c1d296549a20562d522f1ab91cf8a4181ea008e
+Output.2 = 11f2cfdb29549a0fa26954bff5c36a4d50ba39ec1dcc8543b09c180b168c85a4b417725b54132cdadae88d3cdff841da819b117c036bdbb7ed595fe79e48d9d2
+Entropy.3 = d069df5975aa84a86abf8ef33ebac61282c0b5d7f4a94eb12e9e871556165554fc1b752b17d6ef6e
+PersonalisationString.3 = 63214ea627d8f6cbb6853700b9ad43de7248c168e15ed084764f4d244bf51f0861e9435a17406c96
+ReseedEntropy.3 = 09f98d5fbfda0ceb76f784a54c8499eb793aba71806b31216e77eb2520e797c931acf059180e1ec8
+ReseedAdditionalInput.3 = 0f9914990fba6d6910ca7ca9d0e5c2ca1e3c62f39c5d71fed46d699f408b1c2c1efd457dc3e0d38d
+AdditionalInputA.3 = 2048ce70ca503c1c9775604b845ff22f91b9a8376cd1c01468c6b11e47fa62201cab40a551f39e0e
+AdditionalInputB.3 = 96cac730377dc45f5516e855310230eef1d5c15692bb9fe556d4db53cbcea810ebe2ecfd7d648b1c
+Output.3 = 712053f9027110a9b48c685a608c1691e124656de8b9cfe9454687c390432d3c81cbbadd9b66a5dcd222225c65c819667dbaf3dffa9fca2a098ca76cac82354e
+Entropy.4 = 11c65000d96bb2e1db99f07bdc7b620e0298a03583307bd152916de1957e43af1bffdeca1c38364a
+PersonalisationString.4 = a9073071bfc18d38550a16884b267cc14ab62eb7064e29c2ba9e440398cf84af30db57783fca0e90
+ReseedEntropy.4 = 144734ce497cf278cf580c72b3a58ed8dd47a3243d4a1cd44bc15c944af3b0d4111365f08c48f3ea
+ReseedAdditionalInput.4 = 4aa60376bc606957dbbcba3193d50b8dd5719c0f88a18d5fac2919600fbbcec648c82cff6540effe
+AdditionalInputA.4 = f97002f03a25eb4f3b8f829076e665e20ebb790462a65da7dcacb8a5e6e14ea98eb56ff3eb974808
+AdditionalInputB.4 = f2238ecb9b3d0c3218d92f9a50205686ebd15d3828b3c9c63812e3c278f74506943b05a5cced5b2b
+Output.4 = 45b957055b897bc7f8306b9384b47f23fac57db93643716c7f9d44701e7dd5877138c205ed61992d6e7bd6ad601bc72b7baf65deef839d28b434e18d7cf8cbfd
+Entropy.5 = 5551560cbcef9984d70e62732bb5ebcac05328da6c70189ac449bcb8129915bc15d58c9cf3265c9b
+PersonalisationString.5 = ac69ee98a3bcb019c186c10d8dd8b11ec8b7908a20e15d77dca8ea51e2cc27d739fe8f42ec4b4c7f
+ReseedEntropy.5 = f680da37ce8dbade3d41489f8ebe5ace49f76d995a2abf4b23b164ca357a07d55c772a4641a1037b
+ReseedAdditionalInput.5 = 0cc6ab5b5579b6c34653c4a32a6adf4375723eb2d9a84078b483ff5d68c5f36fa8ab1a046891aff7
+AdditionalInputA.5 = 05cbe81016ed81dfc5f2566fb7cdad39f5f13383fcf4a76d652dff3624655caaa84caa5ac8180aa3
+AdditionalInputB.5 = ff51b192f73e0e5ce58b79b0e11b6ea52e4dfdcdc8149da5eef146e57a15b09bcd1f39d8da07378a
+Output.5 = 63e73b6bc6abcc44f2d281a289ec1ce22c49ec393113b66ab59d21b2ece0fd892f091bd8b1063e78b5945930e91c74f48b5bec7eaca9ccacebebeb7841103c23
+Entropy.6 = 48296009fd60d6040023014cce63c6bc0010c79d152c7776ad535c2c7581754ef66635555052d237
+PersonalisationString.6 = f8069459921f6919113c48763e2c1c3cf8923bc69a192dcd07d06b51e070b464781f197c77767881
+ReseedEntropy.6 = 480e602e1a3042562c0680f131aa61cbe01b117b582d8f98121a5057c7ad1360e51df64f8cc7906d
+ReseedAdditionalInput.6 = f0de8cf5491bd83d2001031c349f8871a3ddd0dc6a6f3cc1e37491aa2bfe76e9f553650310fdf16a
+AdditionalInputA.6 = 32d44d8be9e9c230bf1a19511f6eab4bb2b1aeadbaaaa65c6c82604dba9df59020d1b7000af77f62
+AdditionalInputB.6 = 074d03e61a8bffa9e0da64814da2239e6ed356a940cf9acaba2a4a36acf233d2dff183f4e4fe0f32
+Output.6 = 0b58fdf21dbe6ee8a3c9b6f29bf5be0f5045527f9c27288b656db4e49c895cf8aae35a6fc93394ca54a533af3597ece7ad62d2e29f313e1afb3f81cf6dff5c6b
+Entropy.7 = a07fdd2a4e21d913bba2a6eb10b35836ed80f48825cb76618746063acdb265b716cb91689b580c41
+PersonalisationString.7 = a99c671e4a726ae07fa708df8023bd20765397d8aecb85ec569e9901dba6de3e4df1c8ee464c96d6
+ReseedEntropy.7 = b51b3c5b271699a0b91ee1956e994e4a6a63be4c66a36b20799e75bb3f11cbdb9c54e64a97770299
+ReseedAdditionalInput.7 = c35951430697717ba1e12b057f2a2a2a5f87cb157828894068b0d1f43640dd8674d69b1342142fec
+AdditionalInputA.7 = e8a83c9142ee88479fa16556b97026fb3574390bc03b1823ce0e9160ced7e14bdb43282afcb3869b
+AdditionalInputB.7 = 9df3a77eec551762442f08d51529c1f502507faaf3d3f9485c75bf1e0279ea7e055f51f6c41a39f6
+Output.7 = c721cb5c654bafbeee5f611c73cfa26a3b8f10c0625f5a89f9285566c95a12c95ad2979e04376f25b047ce42ebdca0ca152bcd6ca80fe93ed35047e230758190
+Entropy.8 = 352de6d47017de06659b134485a1541eb334c87f1f74c094e5ef9da531cf7a701c5773e343a6f92f
+PersonalisationString.8 = b60a38231d7496f47161a5cc86ff7dbe3fa91ee88f2d23018fe21ed85b084c81fff6524becba40ea
+ReseedEntropy.8 = 078aebf76d37b37d7b24ce4fc3be770e27b6c6b614145ff58558d86eea6c46ec435128e1d5695962
+ReseedAdditionalInput.8 = c44245515662c72cbe1a50d3ed3e78cdce966b119328002254adc289eeda351ccb867f7529eaf9d5
+AdditionalInputA.8 = 2310205e41474dc714e02c5b674b2d25f850372031cf1a10958c2d1410afa3a2fdca47a0b3b3c818
+AdditionalInputB.8 = b5a3a8593038aa264991714ea984dba9ff76a49f69c75fa9d2164bc17a0ba41273990367bcd6a49d
+Output.8 = 348a41b231b33c4e45964fa8906cc9f76de323257dbb9d683f6cb4b8a67b5dcf598a2e15bf4982c83f6136e5ffb06d52909278b683695f945a9ac3c7ac003bb6
+Entropy.9 = 9261ac1964a0f11a479e9f8b236f4a0d1bc6924b0fd3b38987efa41925c479c37cdd63dd8667884e
+PersonalisationString.9 = 73610e5fb99069d7e9dcd614a63f53113e8d8fea7b68866c4a1844e868f0a5655ed7db74b86128c3
+ReseedEntropy.9 = 75744d635a71d5b63f1b396134369b03c9691d071ff2a716ef8d093ac2dab23b2bd5dc1b972947f1
+ReseedAdditionalInput.9 = e53bf252218a02edad675a2277a279cbabc95188e9e1b016a393c2ad37f89cadb0303a58f485b594
+AdditionalInputA.9 = cbe3cd60a42c246845a61f8f69a7b39e16ad6777b72dc7ea96f6f76930a47ec1f2c05bc4c6e1b5ba
+AdditionalInputB.9 = d0ba1496ae382ab4cc47fd82b5cf30b88ab8f3c9d72d68c13fe5e51335a62fc5503a5219874e647d
+Output.9 = dfb6a027594cfeab6d5aa85250d797c6c72f552977e3d308758ac6efa4179d651f6357dff7be9009566b041cbf229f4e9f26a38235559aac35b264daa37763e2
+Entropy.10 = be5a99789745432f37eff1532d2f08edbbac019e9fd2a688d9ca4892ac4c928fae2a4ddf9595d449
+PersonalisationString.10 = 0126c2478d7b4194e1fd66e1ff6632f42b820136c3a6871524da7dcf0ba27332293f257e52dae1f3
+ReseedEntropy.10 = bfd503a582d6ec5a7f843a9722edf6f99de2697fd514d10b78691dd803c38cc629e1161b933d42dd
+ReseedAdditionalInput.10 = 009e0b92631c7d3a13d9af5e917e5bbb92d01d52b71b767b8e16f4c0906c9643fe0eda529126cced
+AdditionalInputA.10 = 51dcff3b18bbc6beb0f2d45b09904801b548882514037a30445d888695c613692a5aefff5d95ddde
+AdditionalInputB.10 = 22829c4e7c1b3ce20ce98589ff98be88ee983e502b0a90a35826201843ea82dff570da7e9a741267
+Output.10 = 5c66ca9b13dfd3f6dfb5047c5ab479277c040492a0e7ea6582f16babe64278d18c373bf91726597143b01084417b057ebfb610dd86ee56ff3dbbadd258708ec7
+Entropy.11 = 1fafe7023597e02975ea232341931bbda0ddf11806f576679825ddaff69f21dc3ee771fe379865df
+PersonalisationString.11 = 746783d00ac778c106ef72f9961a78829799e75e42f6a7270bc4ad3309a91a50582518996a60ecf4
+ReseedEntropy.11 = 62631b756052c48186a88db35fb1fef9c658721c51651884175652ed66d24aa1b20423fae2b558f4
+ReseedAdditionalInput.11 = 66ea5c41089963577ae04d1cd1e4c5dcd201a5a1c652bded837b06626a55705c10b5be03237358fd
+AdditionalInputA.11 = 6bf8100ceb828076ed583d56a2d2333a75ff9af99e87af15e45e46316b2c8fe155181f2f63ccd7f6
+AdditionalInputB.11 = 393bd4cc234c4b88fafd485a81b34ea530c51dc5cc8785465ddad6c4897b7143179a03ff3068b2b9
+Output.11 = 1497da85001bf95b2a08ac161165b11770e30653c68a8848d5e0a055789f029e2f9b80b5f809dd8b75aaafd8fe5095ba08cf7e409b20a137ab3f88950d7a05a3
+Entropy.12 = f3370556460614e66bc8e289f5f0d98e8b06290f822def77738aaa333d0dfe68890846e069349387
+PersonalisationString.12 = e25637dcc4ae0e8d9bbd40234574fc76e54e02e1664fb46455c8660e33b496cbbba1bb98db1ec3f8
+ReseedEntropy.12 = b9c1e034a00be650ba3f22517ca7ba349ef46f7fdddb5c49e19bbe2a974597d06d5fd1c999dc3121
+ReseedAdditionalInput.12 = 91d09cb6bf47330ca71dadd68b283b6bc23cbe8b63e3717c3f57e69a06f8cf2365aabdf18260b9eb
+AdditionalInputA.12 = 7799f7486f8808fe8f77eeb62216c34769fd66005f328016d6715c2f538795267a71de47c97e9187
+AdditionalInputB.12 = 1f8e44e829656f5de2bf988dcff0aac987ae67618c4976824dba401a830e945a321d9d5c2f0766ad
+Output.12 = a45b6c0dca56b04b039e5e97b3221f9f1cdae5de69547153430feea9395e2c31355e6052cab089b339d08dba26ad3d5349c5fc8e9268f113d0ab00b59622b1bd
+Entropy.13 = 82977d0fcdf8372ac1c54bbd562db04a93f99711f97b68503fd28333f67eaa65710eb9adb885adeb
+PersonalisationString.13 = e64895f05eee655d185f72aea79bdc332372e5bae7e4f0aeaf80d906708b6e14e98ef7b6d9ce6357
+ReseedEntropy.13 = 062b41ab5cf7dcdcac34313d60f0069d3f4861e97b92a121879ba306770a61310011286d911c0f13
+ReseedAdditionalInput.13 = b1883f92307c9243d0bd868fb247c3fa0e21c8ba432b003afe9f3c001046de43280b696547d1f7f3
+AdditionalInputA.13 = e94ca902433a4df3816cae0ae6d43fecc24d3c6f6e1436c788bae6534da0f1afe0a87142a084d956
+AdditionalInputB.13 = e278d15e1d5db244f726f7209eca4c95589418549bb02c6e7fb50fb3a6a176032662414b231fe42f
+Output.13 = 4c30af812c12e9bb12b6b2263532cf2ee50b94075bc74338b0bf7bdabfd34d08b56fc27168dd775b9d37718eb21bbe60c8e2f907cfdbc6ca26e7a5851b0ab833
+Entropy.14 = 6a93391a44c30db386a073571b0e5bb36a6d7369b6b5cd7dd0f384deb9bfc69587867bd7e1982fa7
+PersonalisationString.14 = 099608cdb2ceaed0d074fe924b483f8b7b74b1654ed8ead4f4d49008e6d852cebcacf74851e48a5b
+ReseedEntropy.14 = 3b954a58d7cbfcb0b5ad0b58515ce93f523802fe94725e25fda97b26cf162e0003b1d088d8eac39f
+ReseedAdditionalInput.14 = 247da8b5d0e161f15944356a46562385cdf98de332aed8ce250bbce37fd3c27c53b1aec264734a1a
+AdditionalInputA.14 = 6aec5f8c3dc54924104e04635ab80b1f782869bc5c1557f7d89daa1e1b3bfb3cab96338922705a78
+AdditionalInputB.14 = 668d732a98f7ae8cdc9235d63e705955c09600a490021a19a34c1befba8cb613ee7d8e4c5774aba4
+Output.14 = 1dfb0a6bf411580aa55044f26c598d2620965fc94a769001f10b1909228616146bc9d02f749d094786805e3db859da9e6a572833af5cefdb147873ec6023b028
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e4bc23c5089a19d86f4119cb3fa08c0a4991e0a1def17e101e4c14d9c323460a7c2fb58e0b086c6c57b55f56cae25bad
+ReseedEntropy.0 = fd85a836bba85019881e8c6bad23c9061adc75477659acaea8e4a01dfe07a1832dad1c136f59d70f8653a5dc118663d6
+Output.0 = b2cb8905c05e5950ca31895096be29ea3d5a3b82b269495554eb80fe07de43e193b9e7c3ece73b80e062b1c1f68202fbb1c52a040ea2478864295282234aaada
+Entropy.1 = edfdb55e77d418a63e4414dfd42225ed257cf74e99325fba26e8f3a4524a71bc80a731af23256908cb4675a9c253ea6f
+ReseedEntropy.1 = a9372fea93d607fbbc75a97b7f65f2d4ae8c06bd184981572e888a35c5794d2bb380a4ae04bba27f2efcc9e7914b96dc
+Output.1 = 11b1a0f0bb935ec0c54e089e0cd20832d1f00e7069f30e9ea2e35b7f15ecf0577d0e90035bf0f91ffd9e8a1fa8a507503739afbec19393e02c9b7c230cdea36f
+Entropy.2 = f253fd442b105434c0f47ba9b6798bc20c8832a142a2a6d965678485a3ac52393528a5e092341d60ad74429f4005f8bb
+ReseedEntropy.2 = 600c822b198dbdcd9d13ee25bd4b846e5d8665725eac5347b4cfe7512c1f3fbdc4c51c85d977ca58e9e6485a17c533bb
+Output.2 = 076419bdd354d6a1f1415a0a71bed94db29cad22f0205d983c841874497875a4857404e573545366850fe6eb5286e0deb87ddd63bb3317b4556a82920412aeef
+Entropy.3 = 8dbf2c37dbbf3862f05af4b32e98edd3d8cd7bd34d8a23daa2d15200daed6e9d238387ba85ddfd35a2986bdf5790e1a7
+ReseedEntropy.3 = f67aed05dea08baa16cbb669ae310a0b8e019da0a7fe2762abf684121292186a50bc13d568576ce5d7aeb080e4604a1e
+Output.3 = 69666e65c5623140da35927ec39189fcfda0891674efdcd2a7d6f2628921a37bd49a164590413c04f6090a50336f040b015dd8c45452991bcdd96994c5ecc6bd
+Entropy.4 = 2fac25dcea5274a7dbd6af112d757b59a4447f5dcbda972666af071c5d8f71583ec6914a1e685f610b8a43ffada0b411
+ReseedEntropy.4 = 52f5b1f927c0873ae375d6a6e140fe594fd474a63bcdcd6a98109e32ad980ce534714ec626dad7acd43101415e5817d2
+Output.4 = 3096cf20137eb6f94d9d26a4871eddf10285c6984776847105ca9294aafc68925ad8bd7f36bb68fe371476114649ead11b926f9f0fc1d21c744342ff5c44c8e3
+Entropy.5 = 4133a0e6ce837125f46f2a44e05c4f64d76879156ea16a1d16db1d3ec460cc53609fa9e4b3081f9dde0b79f00c93ac5a
+ReseedEntropy.5 = 4613b2327dc9054f34faf933d62bf7b12ec8b34626c07ef7512cecd8aedcbd4023f26b859a941c5af77ec1e2e02a1d9c
+Output.5 = be02e94fd18c488741fd90b6980118dffba1cda5bd25aa23d44414392201c5a78c3ea68252f92afaaf540b298d3f80a94818f1d1ca84c2be5f66a46191a7548b
+Entropy.6 = e312fd67b5009ab1c896ba8f85d53fb29517ed2a26d20a4b9d09505ec004bef5739cc94e7f368989c675eee1f40501a2
+ReseedEntropy.6 = 176ec11c0d4462ea26b1bdee41208e3ff3b430de11f12567ebe982c16d709f681fcd9f5bd5309f3f2a9d80b3a426929a
+Output.6 = 07cb9f51e34be38fe1d1c18858ee44db227c1e6a6c2f7d09e9143e87e9e09df0af9a5cb7a183e5d26359509fe619e52e59e3333d3620373d3ae5a008b51ef786
+Entropy.7 = 3eaf30117135d9167c829e35bd8da227a6302471b649381858085e67c65496058ded0ab176a38b3888f4e3c2e65269dd
+ReseedEntropy.7 = df60a1b9fb2f8501756edd09e489fc98a60ed08646f5a2e018f55b71c76b9b7718ac4ae61b41241593829108ddeb0ef0
+Output.7 = 29c4d540354e97f50f3fb1de84eef471192cd76a670de34176c6465523ff249ed5eafe2c09f091f5ed101cf8a971d782f150a2642ed291e850906e29328d6b8a
+Entropy.8 = 99d5543c192c6a1069bf548d80d678bc42c1f020f0b29a0ceeba424c03f8a8aa38df1c0fe100ee4c1b0bc870b4afa3d2
+ReseedEntropy.8 = a0fddd29c792f6f411b5d532fff2564d492ca15ac8b7fe1b4575e9b59806823665ad7ac4e2adcd2803ccaabe87ab75ed
+Output.8 = 3d58e98a1f4beda50f84f773c405d106b28f4be6da2a2942098403843bffa3323c53661a7f072a020c68f55ea2b3a9cf9157b7c4cdff5e642ee9be1f436f9c18
+Entropy.9 = 2151ba6cf2ed6a7366991e516443162b6ed4e7f8ef2d6c81ec5e5feb0061e20ced65da27847956194dc6177b5e0befa9
+ReseedEntropy.9 = 73418efab1c6039145dc6ce09b84abde4ef4f8eaccbac250213bdd75e2a5e8b42ffb1367bd8d1281e3b0051651f78a05
+Output.9 = 5b219cb285c820f3bce52b9eff15afa042de3036f1a52896eab34e4476c28c60127cf8daddce0809efafab03c9269cd220a49f79220e14db9d208311d2a22a1b
+Entropy.10 = 7c7321b69fdefdece32c45e47cce07a0d599e83ea8ee5781e2f2ff341f292c0bdb848e5ab379771639e811fed45f63d7
+ReseedEntropy.10 = 4b04652d3d0515b305f4da346754c0d398c8cfefe8e5c1edacb79cb8396018bda12ad7d42bf86e801159bb62c34fff68
+Output.10 = 379c12dc2c8a884c6f40df5353047d74efbd9c626795b86256abec4a6f42ba26529f19e4b043f53776180c7ab16a3817b4a50c09bb3355234786e714edb9e2b4
+Entropy.11 = 3a56329b07dffb8bc7761c0c2b4ec4ec3b7ed2513f0cc3d9be3eb9a153e8e1605d9392dbb951e4b0989ef473301f6f57
+ReseedEntropy.11 = ff6efb9b946748af0992bdc38eeb15d4991bb610692e1fe53ff828405924a544ee0e4da70aa1d0ae55e7925a58cf5597
+Output.11 = 9f32e40391217833176ca768beedd2839892c6fc17dec5c250f0820c576e4ed615729653515ae13292a2e4aedaa2df74c6535d8c625dd1cab479d3c5ae7bf955
+Entropy.12 = d550f48af436ae42ea48a8cb0cd615be8db51691b365ef20ed826b28561fbacc9deb28cd3d83655033068948c55683da
+ReseedEntropy.12 = 76ea2e732f77b337ddd402e367c158dacc3433feb40d7b4376fb8dc449891336b00841580ea189583ada95cef783d540
+Output.12 = 8433b2ac45da6fdcbeaf3e6f76e66beb5b90a89a9cb197cfbe405ed53b1dd51a42cfc9aec5fe7cf778f88031fb7b15b0874d4d1ea87ef3895848721b34fb1a35
+Entropy.13 = ce6137f720affd106396d9b66540580ae216d5d7dab48ed2729cdb3e587c7d8da13ce39ea8d9d8c22220a96b74e7ee9d
+ReseedEntropy.13 = af9f12fddeef001b08a5993f62da5e7c3aff23f882ae874b9f66f28eca1106e6386dd82f07ae1fb6868f186e2ec4f449
+Output.13 = 219fc160dbc136cdc9a7c3407eafde4639602cc58101c512dfbd85cc26b61fc9a94cdf76f15a1de7a46e36ab64aca3eeae36acd6e3d0b3fe59b75958b3eddd24
+Entropy.14 = 1accff5a19861164c5d2cf542cf41a789f143c7956518ae158d4449ff0c257a00966faa862ccbb363bcf4aeb31089134
+ReseedEntropy.14 = f2fa58209759d84bf38a1656bae655669767a902ade22a830df56b32ef9e1c992335eb4cb27eeb142bfd21b5d31451de
+Output.14 = f214b4055d182cb258d9e9b61251bebc9bf090db662c4e36023cc156964fbbe1cedf691cd0c3d7db4262fb65a5d34b942f909b0f31fc18009766413523dcaf40
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 99903165903fea49c2db26ed675e44cc14cb2c1f28b836b203240b02771e831146ffc4335373bb344688c5c950670291
+ReseedEntropy.0 = b4ee99fa9e0eddaf4a3612013cd636c4af69177b43eebb3c58a305b9979b68b5cc820504f6c029aad78a5d29c66e84a0
+ReseedAdditionalInput.0 = 2d8c5c28b05696e74774eb69a10f01c5fabc62691ddf7848a8004bb5eeb4d2c5febe1aa01f4d557b23d7e9a0e4e90655
+AdditionalInputA.0 = 0dc9cde42ac6e856f01a55f219c614de90c659260948db5053d414bab0ec2e13e995120c3eb5aafc25dc4bdcef8ace24
+AdditionalInputB.0 = 711be6c035013189f362211889248ca8a3268e63a7eb26836d915810a680ac4a33cd1180811a31a0f44f08db3dd64f91
+Output.0 = 11c7a0326ea737baa7a993d510fafee5374e7bbe17ef0e3e29f50fa68aac2124b017d449768491cac06d136d691a4e80785739f9aaedf311bba752a3268cc531
+Entropy.1 = f963096540d0023d6703e18248755ad16aea91852a2db0dd0f6a414d2a5822f3224ac8b1d47b01aaecc93ae299081d7d
+ReseedEntropy.1 = 399ed54bd846de00d42fb1f92d1ade93e81e32cd6ce73825f0bf86179dd46fd79bc8cbbd3b8834e58cc86619e19b08b4
+ReseedAdditionalInput.1 = ee073f9f6145d0a7c09a5e4a12d65baeba360bc9b5d7cadf93e7d2454dfde507af37e49782cf8550dd3a548e8cf98563
+AdditionalInputA.1 = 6a42ffe56dac0b4dc5d84b49698859b3645c920151565bf29f56b6322244bcaa7cd1ebb8ee9936d8ee1d280f547ae245
+AdditionalInputB.1 = d057c418a758d99a8ee855093da9bc1734a5168a6df9d9c9924e8bb472b5945563d86350dcf3e11aebcbd06a22b9ef78
+Output.1 = a0cd72e63f49ce4c1d64e21e92546afced2af268549ef48d3ca88afe4d4097f91a52ecd0e7ad12ec0a1f67dd8c5325b78ee507c0a63cf90d64e9c47862acedf3
+Entropy.2 = 333a0269eb0fb1d9d1e92f55de9e13cd7e24de64f5f276382d3eb2ff356a66679a9a75d2da31d39a940a09cc85d9d531
+ReseedEntropy.2 = cbf504cc473c9a6e66493b71b9684e8df458e65d2cc676e4e6ad43eb59172932c0956d0623134a6a3bba23906ec9da0a
+ReseedAdditionalInput.2 = abc86c71ae0585827ffe0d19a9fe97f23cdc4afd67978e553e0669d4635ca1df30250843fefd4d1288f6fbc3bfe04a72
+AdditionalInputA.2 = 15d15fbe7c060e6811bf47c21e93639c00cdcc562f4e02c88f7e347ec14a2c8410fdb2ddc3dfa62ba9ed1758f12017df
+AdditionalInputB.2 = fff311ea4c5cbd8ce53c45fe8d8106c28eb06d01ec9d8245c29f95b50b13085a0ec28803d733bd0d8a75193e63e21d5d
+Output.2 = fcdb52bb6e2ba8d896973b9284b32af6364a34a2b80b3e3c7684c200c9e0a02f7bc6c3cd32b159df9b98da07a17baab9b0b07eab214544d5c562e454ec643de1
+Entropy.3 = 86e4c30c5a7dfcca86eda7723930ab3272635f0ad9e2fd70a2d7a69b6a07dc0cddeabffa9c411198e3cb7589cb29d3f2
+ReseedEntropy.3 = e1af1c42cd29dd002e10e5839e8b679d3c5192da5e1b655123132ff1ade22b35651ac6df66fa14f36e1832be7a176895
+ReseedAdditionalInput.3 = 5f619073fa2e98b9f06bb4676bb972379ceb727e1e8768ef09e532cf3d8fed5ce92a7528eb55ae552959d74f75dd0324
+AdditionalInputA.3 = 330e316bec4955d907d7d7bf2b7149f0aaf4285ed1a2b7e387376ea1a4e0858c114ec3ddddf7a1edd7c8a29b1f12b998
+AdditionalInputB.3 = 405911cf7c6779e02e4740fa9737f189370292494c80621cfaa9f7d16d68219e72d474f8d5a54aa8ea8020dff9c36650
+Output.3 = e359c3e23315c9c1d69ab2ec96ec3c6c5aad868e58709e101b0fa08c4041248e4d538d038993250d395d9651513514fca5760dcb9970dce53d2d1c2712bc56d0
+Entropy.4 = d8cc5d13badedbdc2fd41852247a9f2879b0103b4a8186f0a08da7d55453b7484f642a9e5a5182340584d2ca7cd5ed10
+ReseedEntropy.4 = 35788b8369fdc3dfd206efb873b5c5215f5b8ecb0541fc0a0e027e868a91053b5d58cc8ca0751e0c0893c868e2322471
+ReseedAdditionalInput.4 = 6afcdc760fe62b080f141886b516623971f8014ede86e50d62d307a90cf3512da5fefd37b3932d3d9d86ad0c03447be4
+AdditionalInputA.4 = 72105702fbf1da4c10ff087b02db764804963fd986de933b757b8fe5a6016e0f2700573925aced85c09e2ad9f9f7b2c2
+AdditionalInputB.4 = 65f9a3fe4e1953b7d538f6d6ca3c0a73bda2276fe8f80860c07b7ed139d748c3c45db5d96598f77ff863a43977ba390c
+Output.4 = 7c2b600c3f550671215b03ad7aebf71086ec59aa4f45cf6b3bac9bba2e108f801f6478b098fcc4e063454cd3f64a951ed70f619866c1a4e70b5c47458c09e083
+Entropy.5 = 07d14a0d9fbc76a155047a93bc0bb2b578fa7dd75cfe9a44bb8709fe3cc2302fdcc06a9c6751f4602a3a4955c0f38c7e
+ReseedEntropy.5 = 8babab6b9f8429f554156da3905122cb48c0b901fb6eaad8df771e8d583ba885dfbad02e47524b1981768593bde88260
+ReseedAdditionalInput.5 = c185c45cb07e8c8ba8eb31d3bd48a7c864137c689214c2fb3b1d6d6abcda84f2922a862a0955e67695391d60d6f2d1bf
+AdditionalInputA.5 = 326a5c9c4a1a2b6fdc369fe2a171bf625dc26e23d1a34faacf59bd33be98ff7ac7f16e485b6da3145ea4db37ee4ffefa
+AdditionalInputB.5 = de096ad13dcc1ee1449c3a0661edee028603590f087474161a7ab8fcfac896a924e14b0a57aeac17fed676f4b9c7168c
+Output.5 = 60911e6e6455bf4d85a4f76378390f6cd537d7cce88228cf34e4a4889adf62a9cc1070dfc39c254e81a8557bb2c350fe3f462199e377d3796ed139117b6b0f45
+Entropy.6 = b3458c6b38ca70c44fc6c601e088863fafc953c6b5d3ee57fb1a07f3f65dd5e6dc19aed17aa5530913aca598b26a40c0
+ReseedEntropy.6 = faa8d3feabf972e482e5a0b3821c23ba067c45267e3715a4c10f65716a348030d7fa5637e9f000b3e47d786c013fc035
+ReseedAdditionalInput.6 = 901ef89ea38203b83249a34a1a8cbd0da4773ccd503d60a395be3a3db113613e6c571a49960a4e99d302b6f237f64d54
+AdditionalInputA.6 = f2f87693d1f28f95b0a6459c538e82be99a8cefe8a2c7ca037822072e63670dd141873f3dc9e309c6ead40783f46794e
+AdditionalInputB.6 = 93cfefbb7624a137cbd7b177918823893e77251fc5660a76ab0cfaa3b340ae822a8a75365056f06b0a7e76afc39f6819
+Output.6 = 5bbcdeb5d7d1ae19e4ef7878abd1ca4f2641d42c765b94a7689172a4e90baae46ebcfa5427a882c1614cab36f186a98dd3a15febc4b23add955f69dbfd5e5d2e
+Entropy.7 = 6dbcf6f2f3997ed55471f779039982bc84a1c052fbf5883d6f62c0a61db108386e74759d7237bb0efca030aac76bc7e6
+ReseedEntropy.7 = 1a16753c195fed27a1abbe067b2b22aff4c49ae7832d18d01cef5ea5c7d5833008036f71e9c77c1629b6f61370b57f7b
+ReseedAdditionalInput.7 = ec54395931ac0aea2a8739d4c51e33c8425906005c341db373247e73b968c2c79257cf7ac74353c00fd81a80f4c95b8c
+AdditionalInputA.7 = dbd6bb5579a10e395b534431f3ab7c8025527bf99e4f7c162d681f8d35a56f6a03729f07ab43897ad0e80146044b1614
+AdditionalInputB.7 = 5d35742c25620bb795eae41178d7fc86d9cbe050ea702573ae6adb61e16c411b7445548dc535d57371bb11e2cdd59597
+Output.7 = ba3905bfddcabf6dae311d1fc19fff1f6fc1ce779e38f864b7ccd2aeb1b3d6ec1845305c29d39b8736b3977277ecaf5735d0e4acefccf7778ac3542af815fd41
+Entropy.8 = 3a9e8099007c67f6e5f98525cc4295a68c5d5135d01f5f66305c7048ca02525caa3f790b2d12a8520e9963a9cdd597a8
+ReseedEntropy.8 = 15993dba9775db8a5bf79778a316f2910d4dc0be59c3b21c650e3aa89c8c89b33fc69e9e5d642e7fee16d61b691de2bf
+ReseedAdditionalInput.8 = 946121bae27e5804daeba0d7dc7ae0c1c397bfab106e13b8b7c5462b540d147119af5b7c4f9c198161e5aa9be34e2d28
+AdditionalInputA.8 = e9799421e75bae7086731a21242dc101c93b768fc747734a357454fc0f7c082cfdb79b8bbcea2d1122d89316a7bfbd3d
+AdditionalInputB.8 = caa04f94b4b9d694e2c4bfa1e8e708b9c00d9c3d645243acfcb879d2e2ba723d9e48908738114eab7d15f8cf36b043ae
+Output.8 = 9bd50f3c5384eb28d931f03a64eb97ef140e1e81f4c1d9c910cd7d79a40494e1fcc53d82cd32df35d53b05a450e54b7ec71e28359c1273848e5ab117d5ded88f
+Entropy.9 = 7f2a0213de6738ec62bedab769a5f01732dad2d35dd4cad7a765dbbb6f9101f57b65ec8fc4e23fb3479ce6211ca3d84e
+ReseedEntropy.9 = aeb097e9ddc4dfe87874ddb1a856ec3d00fff1b38c8f954681c11e61bac8b6b2e2d8d010e6820f9c4d807b295acb8ab0
+ReseedAdditionalInput.9 = b33ad3dec7d529b71e39d59147f79b4884039d1112804fe8c70e174fdd9828c06a4d44d20aa5fc1918c3ee8082a2bf93
+AdditionalInputA.9 = 8632d221757132bb7b883b7dc26755f62ec2ffab0876168d11ea7b92774c15c553b11320393d64a2262133608ca92a18
+AdditionalInputB.9 = ccaf3bc3ae9cdbfa885aa8414c1f823c6a3ecc020b619201a52ce0b7516ba1f49755c450c532bfe11c06b9d0e049ccae
+Output.9 = 4b1c065a288e5eec56b67fb341e25fc7521b794b52b94f9570bdb16583bb6f7a780aea5297496355ffb4bf5a444c277c96394619cc33cbb5a3b2a9f49b00f9df
+Entropy.10 = 80773d0272ff48ba84b98c817365b097f21258624d0de8529381977950a5e49ff2b79d0f2522269970ea6d484198922c
+ReseedEntropy.10 = 9b101ac018be88da3611a236dfb1300c0049947e9f6ebef7a3ad6e1499efeca0b142826fa06f427e271865232a18dd29
+ReseedAdditionalInput.10 = a67ee22453dcaa5e4726e3084872145ab60489bcb6e83346c108f3efcce5b3d988b84d58786658d87c2dc3b9035e9d88
+AdditionalInputA.10 = 546515bf86e48dfb2b4dd21c2b46f10c1e797ab799b51822e8e7cd99ccebcca00b8899ef6af5cb395168aada9056a6c9
+AdditionalInputB.10 = 57bedda63fc5f792a608be111141a12e522496c086194515909bddcd868be997e718e7c5899e28dd6b123cbcc3f2a8f2
+Output.10 = 4075461e459f15cd32030551be47528223693c2f44e32443cbe9271eefe74fa0a6e1ec04f4b8f41d7ed6c5f455281a3cba56d952b08b7753f6a3d7da3517317a
+Entropy.11 = dc132c15af0e214d1b56eb88849e96b81dc17f238eb3d1bb9a659219dbd77eba38ca2796a8011e29cfad76f8cbbf099d
+ReseedEntropy.11 = cba23d4fdbb6c11e38012b71ca264bff9d1264bb20a39bb27d86dcdf7d72ce7a4f5c124cdf2aca6aaee20832495181e6
+ReseedAdditionalInput.11 = 07e043add7cc14612a82926c09934dea092f4618cce25674972b1f50b2907c7e3d40a25722ea49b0c7ceb6b57ff2d870
+AdditionalInputA.11 = 0017ff834967cff8827598ff6c00a9c97f0347c34f2523a85dd7d18ff5575756c1f5383de50338d0ab0505841d70a193
+AdditionalInputB.11 = c404dbc3cb0851b08530f96500f5a2c10d8985c82dec2ba31d4199fd07687ccf124382fbee3fa119938f0c72ac586102
+Output.11 = 1935cce86bde7087fcab30b5dce0e072ad741c2f281902e1801e56c08ae8b256d27514de92dd48a838ca426820002c1206f86cad37cfd99d3a935e05f56a7507
+Entropy.12 = e48495930a7fc86ecbfad807d40ca84ba35e346c812090def8f44d9e48b0a40704ac67ec80ae15b12e858ae85a7ed9cf
+ReseedEntropy.12 = f4735954d17e99077061c9604e8f1734d61dd662e54e37256c0f8bf276e025d59d21cacc0869ededb44a2aac9fcf2ccc
+ReseedAdditionalInput.12 = e796322fc0ef503251f6d4bd72dc5ea8100c5a59f1a4fe4837fa8eb2623bc650a0cd48c306f139e0ecd169a51deb2cd0
+AdditionalInputA.12 = 1c844d24b7cd9512e5035bc457612ebf6d3df6867aa909038bcbc1f474f7d0783ed474e34525a817bea1fbc883961e31
+AdditionalInputB.12 = 5c5671ba79bd0b83f74d0ed98e9c8b369a2de34188d8b7cada20b3363738d1252ece1e6a26d007acdfc5b6108412766a
+Output.12 = 40f17e2bf6084a6447f2c40d601e16a43098dadd9f9614d518874623e8e684438c02e127e582b000dfd46df03dd5435edc4f0f47098320fd311afdbb8542c4db
+Entropy.13 = df4a888ec7363fadd99ce2223ed39577a41bc220d20b253f98dbfc617aff8fe4ac66e5da1b5097228422cf8242baaf53
+ReseedEntropy.13 = e16dca80b2061706e8180dce8f59e888f150836a0bbceac179a4b8d882eead78709ed9951102728abbbbf9226a2d913e
+ReseedAdditionalInput.13 = febc9f6b9f2b90b4320d5d41e5c5506fa32b164d86d5e7f91d4a360fe179c127bd2bdeb78fe760174e856a5e04ed898b
+AdditionalInputA.13 = 0aba74cd299e75886c9e7e5293e5915d720da2c8c1cca7f0e1d6f2b672b4014eb4582e97a877121c87956185736ba0e9
+AdditionalInputB.13 = e451eac802660ac843fc72b66d59f1e1ca831f22d6a361929043f7626f1d82133f512fb1f2d8ca51004f80ed600609e4
+Output.13 = 968b708ed6b54d2e5a66d46f22998748dfb5cf47e817732a40938bf3593fb251ccf8f2076837715d14b316bfb52560135602ff98338593696bf80a462b214c4b
+Entropy.14 = 43bc561c4dd1b904a5333a092a670d0d1b61128a13be2e538a329094574819284e414b938dc8b1860b385c293c03010d
+ReseedEntropy.14 = eb362136f4ccc9e302505d525befbfa99d8c3336187d5902b03ed75641913ce973743757f97dae9366874ba62bd87013
+ReseedAdditionalInput.14 = a901f4daaa638804177a0b263e8cbc81688df3beb218b02316da83b729230a9e5112fb3896b727298755bb9ac6b6250a
+AdditionalInputA.14 = e33d181f3159fb0874eff5ef8ddd2b51a60b13ccf046f7e637ed27bed81bb604277f7345e6b8f0e09f925793ce417fff
+AdditionalInputB.14 = 3ecf6233820e6cceddac7b024c490c5ee14c73d5b598c92cda30940471b6ed450019120689aaf157fd87b71b13afea25
+Output.14 = 9d793dd96b870dfa0267623bd1c2d8bd3e2c63e9f211340f630fea01358011394154145a10659c4d98274a525c48a90da0126a99b85ed5b4b903195f0dddc762
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ffad10100025a879672ff50374b286712f457dd01441d76ac1a1cd15c7390dd93179a2f5920d198bf34a1b76fbc21289
+PersonalisationString.0 = 1d2be6f25e88fa30c4ef42e4d54efd957dec231fa00143ca47580be666a8c143a916c90b3819a0a7ea914e3c9a2e7a3f
+ReseedEntropy.0 = 6c1a089cae313363bc76a780139eb4f2f2048b1f6b07896c5c412bff0385440fc43b73facbb79e3a252fa01fe17ab391
+Output.0 = e053c7d4bd9099ef6a99f190a5fd80219437d642006672338da6e0fe73ca4d24ffa51151bfbdac78d8a2f6255046edf57a04626e9977139c6933274299f3bdff
+Entropy.1 = f1e0d7b1ac7e4e155bb588500f57d0c59969267ea5427e2d7fde1f9c54e67b7f6562bfc1019b8b5799d2a833fdccac79
+PersonalisationString.1 = 86da37245d9bd1fb59a4bc7abd289ea2999258042c5fa696f2da7344bb6ebc5b770ca284bfe642570b52ef47b780d5c9
+ReseedEntropy.1 = 9c2c9c07cab12cf50f8846148034a416c83366c1e20776073751553cae69da8d1f6bce6bde27087659d69a62e2ba7c3c
+Output.1 = e0ac06d7eae89469b6c14a31e7f0464ee21f7b30d2264c2de3e435cb40d0e5043ee13dfbc0342156750880b2d5dddb3bebb43b162a8478235c8b87f96d0284fd
+Entropy.2 = 1dbee767e9916ab322ba461fbf9f7515cfbcb45944a7b471577da087690d94d967018b631e0c1f64da3c805d049f449a
+PersonalisationString.2 = 966b5cd94019d4d90b48ea7f540a698cfe30d7eb25f5f7e5fe42d9f53ebed6e94e733b0794fc6bf30627911e20cc18e8
+ReseedEntropy.2 = 96e828128f183c76c90ec8341a43561368b77114048ccb05db66128d54c9539d1adc1d72f7fb0950e41b1343a9e4df76
+Output.2 = c4d3f5c55d3979b174020650ad7a46b423ec446dff2a9e9fe0a782bf65a72d5fcb1896bc1092a8c73f41295e2e7044434f88aa0aca78f7eac40e322cb7c25563
+Entropy.3 = df588bff3a1fc97a908067da6a7fef08c889ac29ad7d639bd047157bacab4dbdee3dffe575f37d071af94cbd7628d398
+PersonalisationString.3 = 548715cfb28c1bc56453b8c39e24cfd64077c0f6e9d959d51b9f0667b97d3c4e1a179d1a554df845b24c26daec85845a
+ReseedEntropy.3 = f8c165b5ebd8347a2ffef2218f993877027e977598b4fdac2f65d8d994c7432900f8407ab5aed1885dee5aa2458f5998
+Output.3 = deed18220bd8f72a34559924f3cad925ee717690f76bc223d5ffeebbb554b61b9d9eb6ac5697b06331e236672677e2e01d6e3fd581a4fa1ebad289797b68955f
+Entropy.4 = 98555093e443fe8e2bc8d2eb4d3a7abb8eba00b25683a6b31191fff7c043665ec2cad3e99e55bbc241b8edc699dbc9ed
+PersonalisationString.4 = 5627a0a55457db05e3903d4b69ce15f55f933168d6eb374c044e8f1040f61ed7eb24f87f91c68cde050f504b8965dd81
+ReseedEntropy.4 = 18d17e1b68378801f83e7aa9a6d4b84d3960022c740e6c845869a5db553d2e02479cd92f3c0d8abd3e92fc9c9fbc6a3f
+Output.4 = 7a7f0ab07a540b4e9a3eda3f8bd1262015d8ea6d512dbea05942421f5a73242ac236009ef083bf2e51b19c40d1a019367a6b96fb52d254e4d881550aef0549ed
+Entropy.5 = 07793bac6461f23e5eb0d1bc60b5f735515458d1530540df1c8e6fc5c3ebfb06b9db60a8947eb629ff7a375fe680d696
+PersonalisationString.5 = c1e2132b77b6c15742e06e856c1549c4ccebd1b2eda93e2c43391b52cad51490fe34157f57be9eb4eff463b059986680
+ReseedEntropy.5 = 23e47e0c41462f7c619bbcd5b73f9ab1c68c7cdf1ec92c4c37126402958e110e329107742e70db611b93974c393936a6
+Output.5 = e6dab4a887f48ec33cb293ffdab5fc69595f94c72c5a9bb43f468f75490190b7e0f14f5c04550cb62a6d0ee0c3d834be3434c8229c124087bb985a06b9a37267
+Entropy.6 = 25cefa0512921fd4a3a4e5e7c48c6201185a6968419ae5bcc6667bb74c35de4f91988a33f25ea88a8443c65643cc73dd
+PersonalisationString.6 = 07ddf125960c346680b4b361c0a9c6dc1008a85ce1861b45ff18907e6e7db41b046e5f016617e6c5b0ceb5575ac278a8
+ReseedEntropy.6 = 8cf41e5413b0c8ffacbc4dfc119f10b47569359b911448f45c7ad63dd58e872410c25176b986fee8b83966d0098d996a
+Output.6 = ab58ec5c35600566dd2ee187a5b67dfa65bebe13333670d2a198fa5af0c20294c6cb69d37564d2b2587ea5587e12341e77f47f173d6cc9f9b9e5dedf0ee1a8d0
+Entropy.7 = 929f1dec0a6d14de483a2fe114a430796d0b449fca56a4ddbbe661bdc26a8df85cafad7b677ccbf1fe4cb0d5e8cb57a9
+PersonalisationString.7 = 0bf8c590a66653c0494750d10274b583d86e540b517bfc23bb3b0c9fde373e456558468603c2115c97d3662e6825f4f2
+ReseedEntropy.7 = 84030628534b7525dbd4023aed1ab08c4f2b86a7c2fa3bc9559b425cce07c34fac14e963256aea03f74f1122a7a30483
+Output.7 = 199f2dce5bbe32c693151a216fb36ccea7996c313f6b78fa30ad812a0e603965023fc29706a71b753d79244cb9e8fdaff467e0f963426b10ad89a98e987af316
+Entropy.8 = 7bc5d970186b9e1b0052b7564dbabf61c89cb3d64ff42f9a62d625112aca0486cdf0336c3612254b40cbfba83ab65b42
+PersonalisationString.8 = a25326fef30f9c94423d99759a1ee575536a9715df9526de9a0b8dbcc3a2234cd835615f5dfe7823927355f569ec6f02
+ReseedEntropy.8 = ef8a0137013be212402e42b28c03ed6420881aa38b3a3e6e90a861116516df1ef732a19e8935ffcd9be7a2fc236783b7
+Output.8 = 29f81ecf3f41d278c01bba9af9bc0fe6009539682f46723ce5b0ff75fed217ad71580b5dac46289e324d824094c332c3955c528257701a14ec2bfecce4f62a6c
+Entropy.9 = 0c841a245a19295281163b07541590376d31d86a9be99e66cc22352dabb29f95e113ee233d74d3f2b7f2f608830525f0
+PersonalisationString.9 = 28d3581054d87f153aee12edca47bad80bfc9b066ad1e8b9d96c851dc7b8ed768cad007b891d1c9447d43065b483d085
+ReseedEntropy.9 = 587a1dae75c2a1f2dea7fb42ef7bf38646b76a964ecd7043d8b62fdd9e6a5c007882f02f78fd040561d15a337e59f257
+Output.9 = ba7bce080963fe2b4e8f0e1aa700e92b3908e18dc78728666904b0220e4077fef2cd18bbea29a2755a3499798cca445bb75269a5adca2f291dd3875457c69a89
+Entropy.10 = f4afddabe515ca3e776730e7d44461b27e8f72407ca398d3fb578365e09ea8c24d6c4b09724907a610d755407d38667f
+PersonalisationString.10 = 846bcbc7014ca8c6fb042a80d4a8c3aa50b6c5eff15e4b12f966ab17e6514cbb22fb2eed628ee5c2a8acde821a956078
+ReseedEntropy.10 = b2aeab1165b150908c9bb52c2b7167c149ea4fb4710edc8acfbc63f7652bb552d636a7e6fc3d1e74d3f65461baaac087
+Output.10 = 2a0335c3caeeec7c797f99fbc145654d3985c3c71025c8e4bd4b098801f15d21c272420417d805b0ad1ce68f904502a46130246315957bc07a5db4f3447a84e7
+Entropy.11 = 6942413e05ac487cf539bc61aa6866ef8cbd9d0f15e1385f37bba5a951a29fc956d46f8740603af7c71800048c8312ad
+PersonalisationString.11 = 47ebb16c24bc17ad179e6730407526187cf9332c172ae56037aee471a0dcfa766fe51808c0a47fd06b9e34bded006c8b
+ReseedEntropy.11 = d8275ad1545bc24e77213ce1dfa480d3b7a56a2d5f26c1ab345f9f0ac712ad004b0f6f033b6014c0f78069f92840f62b
+Output.11 = 1b74cfa6344d294ec3ac8002c510b86c0b459cf7823aeb05336a20c1355a3193966fdc8ba8f7cc1371c9c70a9f7ff553c4c6dadf23f2cb08e4040af51f172ac0
+Entropy.12 = 9c14646d104785546c4cf47396ff1ccdd26cc0cde8c20b5aa64aa0baeae87b58f348914081a1b31d9ae083a0b3588aa2
+PersonalisationString.12 = 2476edda7543edfdd3970ae9b27924424955b9588011bf7eabd96456ffffc4c9a08e6b814b7da32d680c2575f9b89e66
+ReseedEntropy.12 = 04154128284836621bbe445148f71e60dd8421327a0fbf7fce07d6f40a88cf098d4f775fb78155e7e9095a1f635d265f
+Output.12 = df70ff84c416964cec9231c308657f918124b75ac93eec8083e76aca89f92a1c6b54df3977003175484bcd6fd5ab5b4a902d775c32ddd8bcf2359b660df1691f
+Entropy.13 = d20464faf411c7d84e673cdb7058d0451be60a4c54b419ec60cceca757fb97dfc4f0b91e66b35295d68e867463496944
+PersonalisationString.13 = bdd2842555cb7a3ff2ce2743b6c7e3cb465ccbbc044fc5c2faf35ee99413fd1f87915704cb82fcd62c500cf4fd5a430c
+ReseedEntropy.13 = ce02ee2c647dc9a455322a142b9226f96eb53c2a99513a7ab349db702cdc55c88125f4ee5aa82a214796b2dae6209138
+Output.13 = acc5fd672fa83b2daae703bacf218c98ac29d0751d9d5c9b7bc68582fbd593b1a691acb125bef3c2edc125f9b73ca3391958b3bdd8007fc50422cbf89b00ca05
+Entropy.14 = 44927d98e9c275ad4d07bda6b4c62b29fe562927fb1ee718473b3c74b9b2189a133c11aec3607d39d623ef35096a055f
+PersonalisationString.14 = 8c40c5317f29b64da7f4025cda90ae3e99ba1ed350482048f8411af8b694a99272625031716c090f68c0fddc7a701e0d
+ReseedEntropy.14 = cb7933c3c803644d4ab7c35b941319bebf6784f98c04754c69359e10c9693b57ae12e38b08ca8a9f0f15142c4476f0bc
+Output.14 = e95d375c7b3354190721d598e8fde7aef16fb2a9dc963ed76eef6a12abe2001622725a8e1545c73c9a85995e6b07806e2ac39b179b595bcfd96b2189b5d10497
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ae7ebe062971f5eb32e5b21444750785de816595ad2cbe80a209c8f8ab04b5468166de8c6ae522d8f10b56386a3b424f
+PersonalisationString.0 = 55860dae57fcac297087c137efb796878a75868f6e7681114e9b73ed0c67e3c62bfc9f5d77e8caa59bcdb223f4ffd247
+ReseedEntropy.0 = a42407931bfeca70e6ee5dd197021a129525051c07468e8b25587c5ad50abe9204e882fe847b8fd47cf7b4360e5aa034
+ReseedAdditionalInput.0 = ee4c88d1eb05f4853663eada501d2fc4b4984b283a88db579af2113031e03d9bc570de943dd168918f3ba8065581fea7
+AdditionalInputA.0 = 4b4b03ef19b0f259dca2b3ee3ae4cd86c3895a784b3d8eee043a2003c08289f8fffdad141e6b1ab2174d8d5d79c1e581
+AdditionalInputB.0 = 3062b33f116b46e20fe3c354726ae9b2a3a4c51922c8107863cb86f1f0bdad7554075659d91c371e2b11b1e8106a1ed5
+Output.0 = 0d270518baeafac160ff1cb28c11ef68712c764c0c01674e6c9ca2cc9c7e0e8accfd3c753635ee070081eee7628af6187fbc2854b3c204461a796cf3f3fcb092
+Entropy.1 = cc1f1e4f22c7d78bc7a459834522e85a09bbf6cddcd3737ef98ff0de950bf2899f6c27b55a050baab0302c0144c432f4
+PersonalisationString.1 = 49d895ca0db6837af2faa650884475e800e72005365dd8c97ac55bbb824c4209903ba440b0129c9efc420b4dd74e56cb
+ReseedEntropy.1 = 001cdf1483bf3fa17dcab30e40fa900a4ddd78012a62c69d847c51090e0898f15f9a3e7efd5f5fbf380c95791db9fcce
+ReseedAdditionalInput.1 = f87d37599cc79460554affb532dfad3393a3f925cc119ec3c7fef178b49adc838a38f395091add5e78a9733b38347168
+AdditionalInputA.1 = 9f0db48e5a148570d15232f568216216eba4fccc1c52a1e73f197a5e1625e45da8369bb29afcdbb6cb3188a9004bb47b
+AdditionalInputB.1 = e7bb505a8196428faa5c40c6dd9b8740c2469ea5eba1b507227833a16e96fb2e8d2eb227368c817ccf3ce785ed3275f0
+Output.1 = a3eca2adeb14d306df139f280604980207229f7d72806e9e2f7b916078de0e09f1a7b2cac41bf01812bf80c1b13cd22744adce23e1e2000146c6236fb67a923c
+Entropy.2 = e43943df12f899fe7fbe1e657d1b3d22f6371b96e07ac89a82c156c1e28bf33922f8d1316d524cdcb9af349c14fa2308
+PersonalisationString.2 = 0e2c55b023d45361c4e7c50aad6b0b97a19fe703661cbce3a74d29f1319f048ddf00e01b6617a3ab643c1c6e39d7420e
+ReseedEntropy.2 = 35b7f479071271b61d075b0c0be3e0d10cff77d975492a93a53cac28c5dd6e9ffd390a1e651f0bb3ee688b77b8203553
+ReseedAdditionalInput.2 = 45045c97d7118f75429c1426a4e16a435988e334e4e066bd8e2fdb8bfcfc783e32f7ce81972926b3e1b42e5b7dfe8eb9
+AdditionalInputA.2 = 56bfee26285152a11483f7ae951cae3b80eb11a13a1370fd10d6a5e259d84bac37aa2cbb3c7577f392d31876c3ea1051
+AdditionalInputB.2 = 8ff69acb968b1bc3bebb71fac820b0ed44513022a30af46465dbd0285aabf1c51f9d80acebd3467989dddc9ba3c1c491
+Output.2 = 1e77b4ccd61c11732f2c6f0f060e0fd03c9e1734c1ea1ec980490a1d9f5b003629aaaf05405207394765ba420994ea694ffb3fb1e5d1194f5e2ceafa3fc4e3bd
+Entropy.3 = 0d94c5624352e44f8426c77a96aae94094ad1498c43a501121f7788a356b1b02a16abc9248375a9974eb7b3caf3cb309
+PersonalisationString.3 = b665eb6b67f213968a35b2c006ec99a4fd935c79bcf5a7e0286793c113ed18d475e2904672ff709a4226f2ab451f20d6
+ReseedEntropy.3 = 3847e83734d3ba20b9036ced968267c91965e3b4bf6a95298aeafc771cd72040ba5fa8de47e170374eedeac3619e3970
+ReseedAdditionalInput.3 = 8aab0554d39c30ddbe8421c0cbbd2924e5c5841e9194dcb41297ea54abbc49153f10a7aeeb878c01659f4073124bae25
+AdditionalInputA.3 = 4a6b0e63f6cbebf0636145c9424af07d1b36276d214592f825965ce80521966a8a6a7d1a58074772131d6b528a7454d0
+AdditionalInputB.3 = 25cff55c776047583586901c1f730de3d86fb912c40694b0926cfb6ece1996578af6f15c35f6b2cf82adbd4bf6e0b3ab
+Output.3 = ec7d74074d8183a0df885c28c1001f80fe00977584c8667ded0bd3630f554489990a94ab40ee2f01d9fdb4e2d0f7bb0e00d41c6b6c568ade2c2394a2b32a1f14
+Entropy.4 = 86b4437092cd13f427431ff7b55d3b9fd87326415fbacbd66eeb6c43a490c0fe3398837776788f67727d632a603bdf2a
+PersonalisationString.4 = e236ba93937034ae24f18f4ebd134179a35d2569cf2baf0af430547bc5e2ec4f6db336bfa88d181970675875e5fbe1ab
+ReseedEntropy.4 = 164084c70f3bbb159b82f13ed3d813fa7a07756a96037be06b55611d98fce609872e65507b99b503b0959cad84372aa9
+ReseedAdditionalInput.4 = aa7ee7fec74223dda7304e43aefa8ceb5144db04d98b7392ab097005a3a12387ee1bbe3662a0bd277878855ac892dc94
+AdditionalInputA.4 = ec19a5d7d66a6034ef83ffdb24ac54e9d3d38f0517ed7edbb9a3acb648e4c4b02f974875cd3149b37432ae5d3b0d90ee
+AdditionalInputB.4 = 98ea0624bfc95d0c0f7b810c464ef22e94c12392df5414cf6e6201c2d7db2e8570f09541334db0f1358b5c0fa2cf6d77
+Output.4 = a27facdbdbf49e64b55390beb35260a0713ab913d7e5a08aaf01e83cc94503e32d6a44a770f7a9ef6d3a9f96d3a33859d568dbf3e856fd91177a05fbf99dc4fb
+Entropy.5 = 1a77f33bfceeadf68b79dd40ee856e9e0668059179783fa73d91f588eff242bce11dc66ccb90310b291f4a963f2a96b4
+PersonalisationString.5 = 98435fc821606772894e46c55356fa883f0afb1b1f4ee40fa56cac09ccbdc38b7d3a3fb2571d2fcb9eb5918b60c0ba3e
+ReseedEntropy.5 = 6b0a37515249ab5e26605bd08cbc7f5523f4e552f006faa7c2433132c0a45feb875c8801ec35454a1eb13604efdb3325
+ReseedAdditionalInput.5 = c6ba05b7197e06f11b35a7824f6b8f51afe1d6cd80640697567b934daa62acbe731ad8ba2fc78217decec4cebd46d522
+AdditionalInputA.5 = 2eba463e52ff2a180aad3493e9476a4b972bf32c9ccb13efabf0624f1c44df8048c8c6472f73fdaa60127e669a432294
+AdditionalInputB.5 = 25110798e06af473013a2a04f359e15fdfdd0306b8b928985f67872bbaa44cef5793ac14d6a99d05d2c2692d08d5e396
+Output.5 = 927902f75f10c5880f0d930ca6c36a20c7e4f2535672714f96bef72d77b0f8718e4546e4e3fa2e7b245e4dedb7425ea678a18edadc90ade86bc261992b02bd9a
+Entropy.6 = 4fada58a9fca48a9572cb9fd1de380a2d9e039971487ad53a5f8c8641350d05432dcfb683131380d35cf1c6d474e4f3d
+PersonalisationString.6 = a0b453b3f86b455c02d27df347775366ae01466c9aba27d51c75928ad1f31b278bc0e4052ef702d995f302c31394f943
+ReseedEntropy.6 = 6cd3b9ec6e0dfcfc3caa90ad2812d09513310ebd9506064d05a59d68a94405388afa313518a7055e29b2e2fc52a9a988
+ReseedAdditionalInput.6 = 39aa041c27cd50f6d4356d7bf90243ba4f6964348a882ca50330c6f398f0b8992bc3c6da90e0cd57077aa0a9da48016b
+AdditionalInputA.6 = c6e342a2365afaf61da40a91fe6ba950b0a10a05cc68f5ffde7cb12ca4650ffab8178b1fd6eb07c6e369b2ea41dc2adb
+AdditionalInputB.6 = 755c6210636079ab966fa29568975de980b0e5dbe4ea1fc1d3a86e217ff6b57dc04d7a713779e929d4227757161e1dfd
+Output.6 = 02a600e072873e396ae4df5d7119dcf00c256bdba76808419a50d41036bee15fcd3d6fbe03f225a4870386d44e735af51ce414f5c703ee9db516b562b412bbc9
+Entropy.7 = 8598996f8b6adcb8ac644d7384eb95bf6f9529ac0f3dabd238855e6d4545c43b85bff29976d67cf1c97b4b33301767b1
+PersonalisationString.7 = ff207a4f36eb9daedce0acd99e63913c16c368b467562a92ea2c47cc4dd6b5c9b637691d6d07f61c05f4b86954a2bd26
+ReseedEntropy.7 = 5a748c44bee475862db1e0d1d49679e934b03a5a4b199dddcb5e6a91acc01263fdc8eaabdf7ae0fb7b752b20731b03d1
+ReseedAdditionalInput.7 = 9498d3a665f78745d65a04141420cb5ca1389c154782fa10174e484cf7bf27f8292bad48956e2a16dc80ad135379c2a8
+AdditionalInputA.7 = a1f1b6815799ed98f3056247c71c17485ec61583922116cdf4ceb8fba24b80f087cf919f3aae6962ae2a353305469151
+AdditionalInputB.7 = b6f256ef1c62d4d7b06057cc93968eeb18c5474d0bb8c218d36d89097a89d75991ad80c9e39537515c5aec3e55b32051
+Output.7 = 2b69dfb0eb743eaf892689117a3017a62de63f653ea7440fb29c473d0b729e649a416fee202b2de94e19e0915c38fcbb8139da4076caca865f0124ae8b6bacd2
+Entropy.8 = 77a9549d33e350a7183956bb94746d32d3649ccde8a58f7b8e78d54dc20cb18a6758f454b8727cb347ebfb543056f951
+PersonalisationString.8 = f449339c1eaef6e656325039baaf4bec9e12541777e99b2bf3b3c8077d8f9570f959cc18e50bcc01dafa91f80a8f9d6e
+ReseedEntropy.8 = 0812e9b471136b0b11dabe902e76f6ef0782faf065506f2d21ef7d4bba85c9536a10dfbfbf0d4fb05c6747e9a632aeba
+ReseedAdditionalInput.8 = 56f2783773f8ebcb0428d1252b6a467249cf9a2fabc5ef084a3562ac57665c05f8214eb6a1af29a2ab673fc1a70de177
+AdditionalInputA.8 = 368c3091d70d55cfb09a97a6c79cae156a45fb1d53a12615f0f1f463be075273a311ad9e414291cd51cf82aa81a2db42
+AdditionalInputB.8 = 31a6b734e6f9b12eafb2ea23d0d8dfcf74677fd37f83c9e949f4b46df56f5c1e15de91308c43848fb0e12bda36be13fd
+Output.8 = c468579291e3906a13ad7475a056eebe940adc2f06d195cc686bc425206eba21717cdfc79fb63f6b0f1b78205d99429b5574630670f9abdac1527ede9efeb0ed
+Entropy.9 = 614d942269485164739eb19b28ef1630c69d0ef4e9a432bd82240c0760f2fd0812a66eac75f0bd71f185ad06d06cab4e
+PersonalisationString.9 = c25d67676e2938fb261406bd65f1fbe7f992979a655bdaba40fdd8fe788717328cf4fdaa22f386e5341677313baced1f
+ReseedEntropy.9 = 534dba01adbf78e67cbc5082ab0c0895d22a7c9634483afbb949c09a4638fa28e33b4ad78b024bc639f38f7710ff004f
+ReseedAdditionalInput.9 = aa83ad17b8ca4c9826aeba8b34e25e988c3335d653f12749b2195e7343fd66831343203a7f45be2b54c4b2e6d94f6f09
+AdditionalInputA.9 = 6b8e07fe59f911ce5e342bcec2ea7e3fa89b21b83ff75514a8bf178b3628a883b8282bc4e1fccb63d6db0b0a2d462d5a
+AdditionalInputB.9 = 56c25835927f85a36a9ad5ce311999976d649b2542426f103b9c4396284d0fb85c62a25206d20bc485f76a63962d2a98
+Output.9 = 67c675cd166d68ba4a9ed07ac6ecde44d98f80ca9b6d58dcb2e8cf4a6c92d948b705c448c8240599245ac87674b6beee01f20b93b721eaf01794c59d6630ddab
+Entropy.10 = 73a0a9e3a187cf980af3970b404c8585d78c4e1c06f88b9110d4b1f27fedfeab5c9458bb5d227de58e703a8d40aecdfa
+PersonalisationString.10 = bef4beac0a3b085c626014d368fa531b42d781873656ec384fb19674f88a9ea4ab349a5a8c0685ab23ec89b4ab35718b
+ReseedEntropy.10 = 416ef85f8f201b2b00b95f2ed8477c1b61e6043bfc4a075a479da6381413ccb248c667af2e2bbc776af38a61c9e4ef56
+ReseedAdditionalInput.10 = 43326592d4d674dec7d7c18f76e1006af18e461000c495c56d25f40b180a6cc512b991cb7a5b8e81ad53a1a3307a2f32
+AdditionalInputA.10 = f8776c1d1a2600ee34386c293da3831cd0fa37df3ef37ab8d8f84bbdc15595b5e733adb6a86326e8a4dc77cf03c3be97
+AdditionalInputB.10 = 2b369b921653e1aaf66af65b066f710d6c5da4abd19184ef84956260db343615846edd856f7fa5a1726643203b8a8cd3
+Output.10 = be598f181cc3ef73f9dca41bae4e9ab776d84473c16ced605d4e1aaebc58ca1b868bbcd139a1d4e65ca1628e413b7f1d061e569028f1ebbcfebaf279820f0900
+Entropy.11 = 7cafced429930e197f8e092eb71908986bfafd7f07c5298e6f4f88ed94085ed92f6af768437ff8bdc8f44e17ccbb83e9
+PersonalisationString.11 = c0b435a51c08532beb1264dc51c3271a5120e005ca1ff209031905d370c9509213b90c7e620cf0ad55fdbf15b2ff341f
+ReseedEntropy.11 = f59efd8d253142a0346310b1467eea0f49f9e039cb0c6954516a5228896cb0edb5e46c863575842cdccf556ac1ba3ede
+ReseedAdditionalInput.11 = b64c2dc0573f0d8740a5f934e3ccc2e3bb1dd01a9a50efb516dbbe581566cfade2b521b885295b535aadb05a76b7ccec
+AdditionalInputA.11 = 418a232934120f0fd34fb4a84e820fb62408921677e971d7f339497362e3eaa1dead14d2cdf1e2f0e3fccbcec3e740b2
+AdditionalInputB.11 = c4ce8b89a8d99614fc9442bc647f5398ea20c02d5b7eaea6ce26bda4a957b289d8ee4a771ac2ede61aea9a9be5b685cf
+Output.11 = 1bed88ce25c4bd7ccc2ac9813c32ee7f128f560971944ce9a0d028c4706875482d3f648e5bc58edfc4e490ff754575501f605d5efc716fcc44bc5c6905a83d93
+Entropy.12 = 16fa7055914debfde643da6938a927004b2d773f99507c6de1bc661d914bc2d633d3c274fc6239b3e48440c03d808521
+PersonalisationString.12 = e295e16af5d41f8ff3ac89cf3b8bb5bb542f6b3473642cc93448fa3ab78e20677f88dde226955852f07e3f32e0812cbc
+ReseedEntropy.12 = 0071bcc9e440b177aa6ddcef178e728f49239e58c762a1448168fec7156bedf106f79790cc69616484a48f93ac086882
+ReseedAdditionalInput.12 = 0b508ccf331f0dc69e63b548a90970d6a1d5d0e4941a70571ac13dc904ed19e6e0a3a582bd6d979d45934de92987eb53
+AdditionalInputA.12 = b496749710efa71e6ab4e3ed2f3755fdec00ec51e85bbdb9f62fa5c67fe3882ee91f404ff003e0e162280deb6bf648af
+AdditionalInputB.12 = 755341c4628a60b7af20e4842b2912d083b5db8bb0b14ddf3cde54f6fa10f1381b0d07e69a87a6f015616bed966edd49
+Output.12 = 5fda954f37f7f02e37805c7888f9cf46ae8f3aca9843d0e8fdc7614bc889a20659b3eb2884286ce0e4b7edff9114ee4bd8cfa173b31b2dff3daeddf19fbf88e4
+Entropy.13 = 4499770617476fe6b1c48a31431a3049f42af931c28b4860fe0dae138e70b5d2f643ff9271934fb1c9d6ccde839fd55f
+PersonalisationString.13 = 164aab76bf813313936e2a022c07fd74908e5790f0bdb92addf029de6e5f7d09b01080a4abc9542ea49fc88545d15334
+ReseedEntropy.13 = 0d6ec2b81fa56f5b0d0bab648a8b7b686e0b6fefb4a517f8726638a1c9dac7d333ebdd7d71c06db5136b930e5c776ef9
+ReseedAdditionalInput.13 = 78088587926aecfa25081cd811f91795c60fc18862eec5a90b0b38e8197684623450cec1b444dd2afbbb1e52ee184f4e
+AdditionalInputA.13 = 3c32bb43f80bdeceafdbc46a6fd43300bf99f26e8775ff31281e0ab0b3592eabe7eb2ebfe75cc461b2d804edb409b2f6
+AdditionalInputB.13 = 2ae54d1e993bbcadeef2e8349fb7e64f19e042ba3ab4e9582bfd87c9e188469ff3a9cce3ab914a59dc466962f0fd9a52
+Output.13 = b2393143e2f7c86a6bb82b5c40945f949e6eccc05f8ae53cd5c6d8321c01df715a294f2f7871c0e418f047579327db151d3cb0b0d3868ac962012c2b06f594a3
+Entropy.14 = 7083275a4e52de2a4a96b2bff5e9abd976810ed6bc0ecdaeedaceb90e07eefddfa52ef326e22b508806044199b274027
+PersonalisationString.14 = 3b9fb593266fc548421752a705dfe11de5cf1e1a3f6d17c2a9a879bc9dbe2e254f79e73ddea446994f68b318bfaab979
+ReseedEntropy.14 = bcbf9b7af08ce504aa7c087d6f22b9e47b40cf7bdc81f332beb9446c33d26bf47460cf70ff1625128ca92f5b0af73a9a
+ReseedAdditionalInput.14 = f9c016d2a00c572f8c0c9deaa23db135e738ed704cc637bf4991c125afe7328a6a74e67c0bf365446b583b3a6451c2bc
+AdditionalInputA.14 = 588eb722d4066ce1e9148d2e7a6d43d1d8b4886bd97f36f24599dcdedb638d2e7cfc4b5ea46a45e1474bc18b21b07f14
+AdditionalInputB.14 = 1b4e904a6b861201028506075d7d7fecb81158ea3749421d4d4710ba0fcb157b5019dbca199c8302d34745cb0c2330b1
+Output.14 = d155941b54ab48dc1866641c034b117d6dd8a7d068d29201105d845315dbc747afd8fb1f9ba5c976c75ff8c7052aff7b342c1489bc0c9f8a7d898b88ed0d5746
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = fca0b6e557f51430dd787ab4d33f18d9aec219629d1b839a35caafc825ab55be6a880321be58c16eacb945b7bb7cadb7
+ReseedEntropy.0 = 7b684923ae50866f710d3b5b2edf2445593fe66d15f2dc735e2b0c278f1cc9735075dd268b91408ef73d550423545adc
+Output.0 = 29375671407b1a45b9fd8b4f507dda234822d557e48b9a52997b13757e0c2f796c8741f94bc2bd0d8c98e5e25e4cee65e4dd634c98bc3b66fb6279f9468ac841
+Entropy.1 = f60f7773f21a719e98c10d1963f40690af58c38c815ba6507f768346f8957e4c2e9c94932cb8aec544c1dc7765912f7a
+ReseedEntropy.1 = 3a4f75ac9b19c45fba3ead79165ade8ca56d33d0bfb2d9e0bc2e4a9faa2d86a774c737d23a33a860bd4bc42c1571c160
+Output.1 = 10f386267bdb885ddb55fcb506851ef14f598dacf15bc81195e37f3facde8b65291d0355818a75d96d4a6505789729cc2c5d199a232cb9d1173e90da71ccb8ac
+Entropy.2 = f375d3d9f856f3313fbbb2ecda7972e7cfe2476618005395a365165a2d755a26d04452d4f9ab1b6fb4d4e31356057036
+ReseedEntropy.2 = ffb9bb892f95fe3c95cc78990e8d9caba04d613fa5f34899a592bdf5de197098ca4b6efdcbbc237a344c66520c11112e
+Output.2 = f8f6921d96dfb65f038ca993c017b228a2283b3b8fcb5b22a3d6c0f82d7cf2a68bc721f113bf376b256bf7389f31a1975b3040cdea9e11b83b23cc26ed15a781
+Entropy.3 = 401dd50c9596e92db41165ba0edd6389773d8096cca1fc596e4a58b78f0ccf721696f2baf2ad874687b5d6b1d960bf15
+ReseedEntropy.3 = 8c4df6fc9b35815d9d5a2ddd8a62434c8992ce1c21add1b96fe1e17486b77ae338fc655b327686bba011991b85b2fa0d
+Output.3 = 29b9b2127d14165bbfbd0755a96506b8cbdf9416f37616beeca44d94d52f132118dc5a93a9494b058275788ed20835374181128af62e0d862051115f0399636e
+Entropy.4 = d3ff8f5590ecc63f1dad8a15a5d245db5138a49d2af8ef8901dfaa3a6aede3b3c8b805dfdae73f622ef608de433c417c
+ReseedEntropy.4 = d7908ac9d3b4b7c46600c47f1647ddcc621b71b75530fd9bcfe05e26f82dbfa65a60a9614f0a09d0366419023ed9f4db
+Output.4 = b83d06fc0e5bd3399d716c7e3cd8029f79da4e03a177ddf4250c400aa4f4f9408333813c9cee371a4d9f4246aa7fe4b20fa936a916b3e1fa73901ce28df567cc
+Entropy.5 = 114bb346cf39f2b19a0c003e978095b6a5448b739b6bedba1d41053f792d0a34c62eb9ff08c0d161d369e8aea9f68182
+ReseedEntropy.5 = 7359d23ff081a776c2c9c3bced8e01b2c2c6dcb412a337066f4cf5c6c34994fc0f6da97012c982b15440ea0d6ac321ff
+Output.5 = 84840c712ba01824f85c23524024c2277ee69fe97eeb4429947ccedb3d29cc20417757625410f4f30a689badab5037668736f8be50f13adb7b8cd2e2b9761f39
+Entropy.6 = 1d7ae2fedc12d7e746d259fd1786592220d5293d974bd8f0c39529c8417e04de1e44f8074fcb90734a5c648f5fbab787
+ReseedEntropy.6 = 8273c6ee3a82131464ee67591319f460ef13303a363167fb7b6c2b5489c7cd3436bb117bfd92a9e451cc3019adbe8fe4
+Output.6 = 05ada0ce82206c9d97f660f33e6b0c22bd263dab58c438f3a900f9b3062915ed2f272ce5110d85a7e554be3595e0ad0c05846fc3f07f35aafd32427f1b96b466
+Entropy.7 = 10e75fc16aa860cc85b44e1d62bf05dd1954165944f5afcee8b714778f0e2c46e6709cb9ee7dca65d27c58db322d8556
+ReseedEntropy.7 = 677c9181aa6c596117255f46b69fbc2d644557bb8cf7275ecf15d258e0559b6a55e316f77c88d4470ef55d9b4d015f9e
+Output.7 = 6dabd2c41d073e32bdc26af05964619450482d74c6a53b5f29e5669b0379de221f31727d530365db2716066bde883e07aa679e8011be1d5013140a7f97d73ffc
+Entropy.8 = 00e48717e8ea0f203dcc3a60aca98f1af8bbde961311dda24bb8c414512c2698fe085954979d7615bf20a7bcb73ea7a5
+ReseedEntropy.8 = 41b3bd282dc0d96abc61dbdd1e3d614b664c9363fd0a5444084f46eb10d8f76c02a0c60cb821706b65335f04c55f24d7
+Output.8 = 216b0bb73fa63040c44b451f8b8dd79d2e6e9b27aa51be43a6319641e55301956dd7feb145a8e5058e83a55445cdb48e50a709d0d2f7f1f34ea1646b66218481
+Entropy.9 = 52740d9061b0960f627fc8c698b7bbdb80d599bc32b6b8c50745c9bf19415e8ff7ec792d416589322e50ea0142601fd7
+ReseedEntropy.9 = bb232ba5a35848d324dfe295697421250469185508cc79fcbc79535d0a43dd4f1640c43251a2b2c290f0ae82e5f4e7bc
+Output.9 = 1c93d4dbd97254eeda5bc25a362db4b8b678afb01700e37df532fd394d9b7955368a286bd2832873bb01ec1cc3093a10c1c223fb0bf20472342707247ca4e3c8
+Entropy.10 = 00a9489b6eaaa9d781e5b3a6aa7a877980cdcd43f9989da4ded7edca9a7055dbdeb453668e9b2aff3df6279abf2f41d1
+ReseedEntropy.10 = 491ad63bbdaf1a3cecc20a94a02354d3f9e05dbab9be9b9fab21b74b44c1d7490331c36bb85325117c9fa98802a58f77
+Output.10 = ec0e9bf5c3d20cabfeff7948851f5d51ffaee6345d90480e5601ea1cf7dc4d04bda3ea0cee4387cf922c07df820fc82b8d0385a7df530c977797831f6bc36583
+Entropy.11 = 1694aba5887e90e8621394229c3d58ec20b6fe24896d84397282845041a5519b32a8cba40510d97db6ea33eb934f11c2
+ReseedEntropy.11 = 6b01bbcfc83229948ef247817410beca2de237cedd569e47edd0e30d57fb2ab1b7b4e0ebace0916f72660e9d458f1db6
+Output.11 = 8dd46400dae35daa5f894df7a72d6f545abd1b6a56418719c9ef87692decc20e2c7bd92f2ce5acf5a62cd0dbed861a884cc2d30dd2b5227393ce1476a2c4224b
+Entropy.12 = 43f4708876ba0294d22bd1bfc9a5e5c25069bcc0f46479b041ce1af49bce5cdc2455849bc34e6412c1036921ab430a05
+ReseedEntropy.12 = 53f20c82d1c0334845190d28f9f7caea7683ef4c6f76028bd68d1eefa17459a6f241c8f181907c1223c81d5f829751ca
+Output.12 = dbaed592b10853da9fe816d2c70107ef55b678dbf145b2b37499740d56f188e1d0b7c8613503539a622cc06674bcd10c18f40969273bd3397db8689b7fafcad6
+Entropy.13 = d3870857b486c2844051e9e5d937b1ff7c8c90a378a9ed766ec5e0a83e4311b83b92a8e8bd591d5b9af537158e34b3d7
+ReseedEntropy.13 = f48c355124c34e020fde83532c626766c71b85e3214d37aa63b4f30015969524281873a6ec9e47c2b0a61e23d7823ac1
+Output.13 = 62fe61cc6be713293231979df124258066dd3bc56f44333889783da7fd8075d8be6239bed1becdfbe6bd71352bc77c38d9511be5df7a7dbdc40d7f236d0e8d20
+Entropy.14 = 68e91e73623fa6a3ce22f424e9db971459dfbe06601ccff96f1726fa18e61d5cdc1df97519c8e7190ab6aabf95bd1ee8
+ReseedEntropy.14 = 249b56dcdc4c5c8eaf796c8685a740fd4ea2455c135e0d7b8e50532fd87c95b781c8f3775c213c2714eecef140125b78
+Output.14 = a15d3d61408ddea3b9753c854c693ca1a91cf49d172160bf15f512f345bb1bda9aa7bc4fcce177fdfebb3fea4cc6404c6024527ea662669a5eb78753822bfdd3
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 791fa5e81f80e8b141e228a0d623436f3bb523d8a03e98b0234705cd8b9d94be9794a2f6ffe029a853a627f9260fbc7e
+ReseedEntropy.0 = fe04245537637cef4c8c5cd33ba941d5aa03ca9f1deb586979123521aa811598f81c0c443469b029bad0bb7fb0c99f82
+ReseedAdditionalInput.0 = efc127b013c34b70a9f284fd1df3be0f2885d3cabe0667762f0ea807340e29d65cc2c0f962f54357706ca0b6fc1f2e22
+AdditionalInputA.0 = 6c68a2f1e5955dc83829a7e5acbb9e110287524032f0ee914a783c561a1f444aeae68a35567d443c0c918e38c565067a
+AdditionalInputB.0 = 8a6825420531f924935cf338d68df99f0f7cfa32eb9d002468e6b2621f0955a82b2c4ac754ba0c8eed24c5d8e90363c6
+Output.0 = 658dd97b30a6432690c62322ee933b44dbe54d64644a59d9b944bff47c3dbc1c9f123a53b899d9b86dcfa1ed1d5fbfeeb9033dfdf291f9e843568309464d23d1
+Entropy.1 = 67938e50e2d690cbd3b6e157f7d5ee7f0d540095c558e0560bef484abd67d7b0985adca78389aa467c63066f5f83053d
+ReseedEntropy.1 = 3dbf9aaadd0dc4db5d5e36fa770317c4ec2e573ab90f09dc1027a7ea241a9b23b70848e692ff3117d6519c258d58ea73
+ReseedAdditionalInput.1 = 046adc954297659c952885ffe568c0ad2b7b16041658841651b808167d99639f4ea32441848d03e148c4affc4beced13
+AdditionalInputA.1 = c3622ca849dc7093dcea24a146ae231d8a03f904a50c2187085bb76557b5e5babbb78f502e240c0379f4e6c72eaf3382
+AdditionalInputB.1 = f43785361012a3b7c6f0864a3cd382800c450be0e2f09c7737f5a4c3a198aaacc7879f9242e18334c94366051aa5f74f
+Output.1 = 2e958abbee0a85579b35b08a07e60bea67a472340b78dc3c3f5a2731828c3f4d8aef3fbb6fe622133c1504849dfa8f04621b5b3fe5d9ea64db70931dfdd622e3
+Entropy.2 = 39c4026c129911586004fb5b48cb3d0eab465d1aed16a47199d7405137ff142829c507a66e7023f938d5cf03646f55c0
+ReseedEntropy.2 = 847630083543d0b331ffbddf0599530db94e378fdc172de2781a28f74d9437be2cb45232d9c68923922742dcf2acefd5
+ReseedAdditionalInput.2 = fc5a55d828af7ec6e6ce68d660c8fa2b85210167e012316b7c41588052b6d324414db3c477c07ddfb7e0b7fc76c59354
+AdditionalInputA.2 = 019db190c9b35fb0d35e2a921f2bf3576f1a1ff2c58957dd2ac4c745283ba917eddb5dea4079ef9a43ad0c5ea9fbddc2
+AdditionalInputB.2 = 51f1493eaf5647c3da74314dffa1f0af279b3b931aa040353331d90ec79d1c01ebd2f201457b7bb096ef80c7c94ef97a
+Output.2 = e8e221edb441470c5f0020f916b95b9ea818c828e3d36e67d463ddd135bef91387f569f2f2d7d0d91e4928696ec2fa9f5555bf9dbd022d1797a62f3e0b12926d
+Entropy.3 = d44d6e6bc742c99460033a1028f51da38284a3a42244903db383cb2ce754df468ed07cfa4096d29532d13414de8101b3
+ReseedEntropy.3 = 90c63b624e22be43a599f5c5b066525b3dbcf16ae74baa9c84d0e56a6ba04b713f9d1b345292526fc8e8f6d82f4934d1
+ReseedAdditionalInput.3 = 91b21dc23b63992ee46dd09e35adf417bc3692aaa605ae0db0001f9e8b3ca3353da38308de5ad328f1363a334e880e09
+AdditionalInputA.3 = 969d8070e5a53551cbaa6c86924ff58c720fa4ee5a81f0224b64b0a0a1e4a64a3cdc695222c6f384e0bc5e3df1d76122
+AdditionalInputB.3 = 1e888983b398d0a5ff8f25b8dc692a8a6215a490b042c26ec1d6cbd0be24e7dbfb3fd910bf22a9fb78156dfa942d0ad8
+Output.3 = 0eed7d0b13b08694559d7438a7771c3127bfc0a351cffc1f5b328bdf7f6ffbdec66bfaa3d3f060399099126d4bf588b8c67b9f2ec509cf111befeda7ebfc5ad8
+Entropy.4 = a526f4714b368303b46f213ca03f431c6d3f7ae0b0c6bae40ace63f27023fd6a8963b740deb4d12e924f8bde93191e1f
+ReseedEntropy.4 = b8f1454e8353e23ff3614fd855cbcc178b3c953455e70a981685e47bcee9b1b6d4462a4b1c490703273ee1a733e9a344
+ReseedAdditionalInput.4 = 4b51f0af1442cdab2497f35b581796dd5bf76997c3282f842fe288407ec983818e52d18ddc27d5a0ef16141c289b8f44
+AdditionalInputA.4 = 6c37cd5aa6db94a17ba3980067f25e03f65473b8f2dbe56a0f12452ac27099909e20332b394ab2364d5e803c9b05ceea
+AdditionalInputB.4 = 162a95c2b77ee5bb3012cf0c1831a7ee2ed3e07a350f3b065577791cef78c1afd49ba11780aaa1c44943d62d0fcd5bc9
+Output.4 = df894835e07073ba4f0f75c480f86878d1fbca27f7b4f9a826839d76ef172991df4fcc868b75408eca2a6eafb62f9ca6ad9a9335e363c627dfc8f232cf254a1e
+Entropy.5 = e7cf1741478a81e4090ce208c5b8300ceb5487e06c83dee08605109cb00cb52d1c3a72187122c965f68c5e7e54a8ea10
+ReseedEntropy.5 = 0809aa013110fcd6e703cd5f474036f7ee4cd191c5227cee6c509e86324e7b2f9668bdb40629e51704ed166426be483e
+ReseedAdditionalInput.5 = d653eaed493ff4c2791d5f186c442dd48b7ee4666c90426b8293f82130b246f59085fa2b82c2597d907b35cd3f2900e5
+AdditionalInputA.5 = 4390649973c34e1a368b554d912397f425adb3d96ae79829eb64f3c3fb2756692e6612dbcced4b3cd334bb7880c34cb9
+AdditionalInputB.5 = b09e0dfd270672ea553790163750d0073fe156799d23be5dcf78d784c7ecb4d4ec054f309c704ba4e153ae3fcc60d3b5
+Output.5 = 9e2fb5e669c49f12ab989aae822e129134bf5b1119c69c92dafcf53a7dd1f7055c6b2e57bb59259d2c486e33a2ec41be3fd967997be9b0c7b11cd790f3b30c7c
+Entropy.6 = 809f1f12374609f0111c347fb88935ac53d473f5f7e093898001e9c4a81ed078cdf5eefa0b166826c632d13b1a0d937c
+ReseedEntropy.6 = f2d01828e4ae757d90c36fe5ad183378ac442c07b4741c85cc340c8626f56472f0eac7bf4848fa18efba8d37d1998c4a
+ReseedAdditionalInput.6 = 80a346bd1c05f00c08d9e6c10ac0fc386806cc22d62ec9dbc2eb30131ae7d89aa91a67a848d01bb8d9eb8a9326c4cc81
+AdditionalInputA.6 = 0fc7cb589cbc141111f557d852c5cf47633f4430bafde14725420610f6c22777ca9394d44dc1701aaae0a6f2362789b9
+AdditionalInputB.6 = ed60a2a96cef442ecb1b0b8311d5470f425fb60cd1ca81d4846be2d45ebbf857cdd58cb22a72578703759fcfe697a3cc
+Output.6 = a0a7d16bd83e64afaf0ad5c1378f341a6acefddb15a10566bd231ed7437961c50a47ef8b032389fd8a5273cf926c70b1cebfcfb93176fec64da8810e93eec53c
+Entropy.7 = b89c724262f8ebe3c29e8c8bf992959e3b7f42a5abf0d336b827f6b68482bf9a75b5f11574affe929bae0cfdf213bd3d
+ReseedEntropy.7 = 7a131fe412b25a66d40ecb9ed7c5cd5d0e85c33c72ec7796fd6320f3fdfe9c710996973d7af3af539aebb4e687d16af6
+ReseedAdditionalInput.7 = 3a3b2a07c58770ef94cd0fa6348acd060df2fde26e67473d43de7a929b0df7ae359ee3b36a3707d27d2936a56e53f7e0
+AdditionalInputA.7 = 5f9be21ee124776b931c1884f4760396cd041604803ac8631479e0b0dd900d1866d8b0b441db82bc66d5c0da79b4f8a7
+AdditionalInputB.7 = 6820aba25b1af7fd7a0879dfdd6ed132ee5d0ba892f75e31ffb0ad0eea6f3ea37a421e06bb7465c3259e59c4a7e07833
+Output.7 = 2a44d6854ebe709e264b253ff1e0a7e45e6c996f5ee5c371ece0acc7bcfd5593fc2a0dcd4fad29820ddb9d610557b4e3619009a15c853a5e46f0661b727d41e8
+Entropy.8 = 2b1fe5b6d42a712ae659aa1b622333920e3b08255ad408803301f8cb9f82b95a691f66922173affbeb9da35d40cf2d1c
+ReseedEntropy.8 = 2ff29776ef48c0d20308d07fa0269513866a59db42a1daf8ee75d8f563388cb57cc663ff2570c2fe4a40752531e0c779
+ReseedAdditionalInput.8 = a2c6d344decbbefab1764c424001442455c9e87c06d62bee63d6d18b87ced4ece28d6c0fec4140409922915f0744d3ae
+AdditionalInputA.8 = 01cc142d20a20187c3c72cdfc3002e4da99a09964af9a00d0001f348383373c43fbece5946a9da9e5083321db905e0ef
+AdditionalInputB.8 = 38a60806c08f0d0affcf1d3045a209cde97c89af7dc7c0bb1e160e4783ce5defd651767406faf65f15b0c5f6ea191a6e
+Output.8 = 335dada20ad687460882b64061994b860e74d053f5397e0b700c9db610f9b4650141f25dc24e69ff1eb63612cb2b3b905d2922ac88b091ccce523b1c62cd14f3
+Entropy.9 = 5453008743d1d5da6acf27e8c36164b2fc13fca4e283bd8734f0f5b27fcbbc4d622a8fa21add0403fb70e15f8d7ad228
+ReseedEntropy.9 = d6f8ce10dd87f31b35d2a080cb1ad3482d1b3bf594d5fa7050dccdfe786797508a83b2aee185120f9a4c8393af87c97e
+ReseedAdditionalInput.9 = 4113be0717591bec73cbfd3c4c3c5742d20c5e9b48b6ec7000f112cec4693dcfc193bb949dca2fd1ac9d67f08ba71407
+AdditionalInputA.9 = 87c949f59d225b253ec616a2827c28197fff5105a123d96e8bacdd2883b8cd570f20f6d5d64b3fdd6bc88ee227e28bab
+AdditionalInputB.9 = 5e8a1aab2cf9724466d298943cbbbcc0f2763929ff7cbfb4215ff67cb54c0581d93c952c82012bd704bf66e76a9b78e6
+Output.9 = de38c173137520044713377ce2b4e672ab7f1aae1a88c4a3b78a2adf76d958b5aa6c9345cdeb00c35f099cf05ae85f7affb32aa4e5be43ecc406f71c779e0207
+Entropy.10 = 1db147affb57d3ee431f1799ecd2a18bc45ad735d1409c9b709e1f2a2b20752d04167d7939d91536769b61c2299b4aeb
+ReseedEntropy.10 = 449a7536197b2356380bb442fe26fb846fddea8be76ec6dee463837d2e2b5511830907158d4f84de5bbac1374d1320c8
+ReseedAdditionalInput.10 = ce2177555560a5439381e087f5abef9a1bcef28d62d1b5bb801761d9db9a81c6270b9eed793fe5b88365f935419ce485
+AdditionalInputA.10 = 4d3c0b970f3f337456400731e8ac667ab517343f0bd03260066a73afde92c9d5676a595dd943837e12e9cb5c9ba19bf8
+AdditionalInputB.10 = e0690ee6a3dab9a0064b9f662465f3bd64ef5817e1576d1a0314cd5310050e9eecce9af2ab25d0bc75d52a7fe5c8b83d
+Output.10 = e2b0d8a44e3f8ba7fa4dfebd5345a90996cea8df80cec9a728910d7fc5c094f53268fcee40251f6f47ba66192e3b8f3a627010ea35f111607c44758203c8395f
+Entropy.11 = a4f060385b0850d47d0c0b0ac0ecda014b1fc6f937c29a07131a069a8e92c2cb6ccf7ec4020e66ffd5437c9e5d4cafce
+ReseedEntropy.11 = ef464980f1ce99630cdcbdcc21e8117e592fd7404d8232f6cfbb2c851b93c77a0c594b22b8cdc5b0ae94d448e8218c4f
+ReseedAdditionalInput.11 = 4f2f1b1589f613c23cbc066b1cbc89146c4709580a76dace352e9056b911063137d420f20818d10f2c4af5ffe3fbf013
+AdditionalInputA.11 = a98ed1989a0226f8a2ae30d03bb8270d486800fb7a3f9245d8fa5ee3ef7b7321cc1a7a4bdffb076f67e3cccaaf55af53
+AdditionalInputB.11 = 2ce165d56b2706b84b8d3d85baf9eb003199bcf8d9b162312182bc94e96fbb236e7a6cd25a1d676898085aad9eab5363
+Output.11 = a344fd1c8b3b8b315cc71f7ea08d7f7b672851856cce863f468e22c70f46ff1e6054cbbddbb9111c436df3dff2100b8379cad9bd4495067ab48a0f3a1b7b8013
+Entropy.12 = 87c9a62efa5b0210148f2129958eb8486e444ab799d86c045262a07ca05f644003b5ce88fa05170f3b653c9b3fc2fbfd
+ReseedEntropy.12 = e89f2827fe7b200ca176043527b2ad8b31743495bb61f5fcd59fdd54a529803bd31ed38f51849ea42202d840f5a5d869
+ReseedAdditionalInput.12 = 21254ec3b1ad3abfc3c237bc6eac8fb173bbd996d9abcbce9c78dae649ce1c2acd9eae88a2e117aaa7337648377b2db7
+AdditionalInputA.12 = d813192893266cfdad9b9cd59aba0cc0d07d2ac884877cf9033b08e4e9877e708d2533cdeb604073ca1c921b696355c0
+AdditionalInputB.12 = fe1e3c460d8802743af6d88b1b2f0aacec8468037835af56e25a8a1cb48f6c3517a9e4d404d30c34186395da1729a67d
+Output.12 = 8e6d98a2f864ca795f5750e1404ec22414f8cbf270fd655450422c979597b6ea5df979d213da7e038cab9e2500d4cc8c4dec89bf7783aba6bc3b2bb280f4e194
+Entropy.13 = d94860047179b75b27bff1657164f49e6da67d265aeb4826feaad524ea87acc5b8895eeee008d067234c46da14726544
+ReseedEntropy.13 = c4a34713f67c2f973bdd8f6ed58257aaa1ca049f413937660cc1a90deef075c7253a084d334423d5e8b8199cfebac2dd
+ReseedAdditionalInput.13 = cba120eabde18332c47d025be35520e8af7dfd95159910be86cafb747f17a92a5e66774c4cdbd905a2984c40e88fd7a5
+AdditionalInputA.13 = efa2f6eab2bfcf0527b2056716fb0a45c7c5df00f20caf0ab7c851511445cd78400dfa031856978f4323a377cff0b485
+AdditionalInputB.13 = 8ae9ecdecf2243b826bfb952c55c2eae59a449420e7bb8c046a5b03f76fda90ce5b13d5a21c74b0d961b2d1cb50df90b
+Output.13 = eba9165bc19b8316d6154756f9a8d7aede3aa424df4d425b4b9a1dd9d632f83b9488163b73e0e06a1fbcf9ffef3b5c8f6ba991ec94c57efc06b948f1e0724120
+Entropy.14 = 2cb0d6e27de04e6a6e95af5c5e4cbf3f99788515a4e086baeaf09416eef5efcf04bd72e66f3b9b0f8cc0875865950e9d
+ReseedEntropy.14 = 700d72c6787eee748cf356e052954439bdc41e2c4e51f1ef3b7bf37c219f111e7c21f7072eede617c212cbcf541a33ba
+ReseedAdditionalInput.14 = 4594326335f47b935b2b669667cde02449f72b4dfd86d5a7d1aae3cc44b08e9411827066029dfe7d9c9e154ce21467d5
+AdditionalInputA.14 = ed3f47e59a12b36a42616b338c7a77a18e333d38abb9da4e36914b69f3c3476880705525170a320da26dc402c6afdf49
+AdditionalInputB.14 = 6e39b249f1b8111ff12fa24f9f2320df2dc8752e1541f556b5cedfff409b6a858490c27e052a63504c7131b438f44356
+Output.14 = 650bee69393d5d7793c8a5a40cae79bd470d15fdacab7b51b251f51dc5d3e383d28d808c7f9e018c71eccc80371a9e0267ba4053ec0e4c071d110942c43149c0
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 91e15b57886156d0eae2eda3687cc4b617725647fc3423fb548f180338064ab66898005009c2c9c5f7c420d99e4f351a
+PersonalisationString.0 = 7100bee1f8ca38f4f07b9910b12baece715222663a1d5c1699b5d4022c0e0b1a49c94b898e5318f6861b43a8f1a4a882
+ReseedEntropy.0 = 25da9700e7988a46b2fb44358fc3b140af96b9f85cfc747978e85afcca0bcc02e807af830b3c0e6960a60bbc2ded891b
+Output.0 = eaa80c6f590f28cc7b5edbd3d8643a68f7e6de873b0b9d839b0ab96ca248bb4b9234b1c065857d936ce6dd0fc92d6b3cf98f3a29c16bb549f6dea4221226e550
+Entropy.1 = 6e3b472fea5f25a79c5de859c0ff7e637f4cfac575878bf2016da2db6aff49de4589a59b266d50f5434f3ec4a3f218d3
+PersonalisationString.1 = 7497e76bdd5df3dfecdff61a139bcde7da45d8e88f7bf120ca78ebd1f642b09d6eac78ce16ca05275bfadaa2e13ceaec
+ReseedEntropy.1 = 2be8a657b7f5dfd99e4c9378c4192e450a48e9152b5a6ed1219428a05a698f4229f549b50f06bdc1085006ec698826f7
+Output.1 = f8a11ffdc1d3e06780071040f613bbbb40eb3dd47a2e6278779d25ed3356438a44aa4510bd2cd386c745996e156949bc5d7a1f2d8ab79892a605ff2c8a8019cc
+Entropy.2 = 82f5ddd3a5422d536695190ab21473ff7c14a7f1f1a0cea9025b37bedb056ae9abd71e559e6c5cf0af69e6ed4af39876
+PersonalisationString.2 = 5604279f9d3062f2c66f31148b2c14622469b595d02da1f1ad49a573bbb7a3cd5d50dc4af9d0e0f1bdd7079041b00d46
+ReseedEntropy.2 = c2ab5c98a6770bedff18baeaaff9c4656e9afa23caf9bfcadd9871c99ab4f933d4ce81d05fd1e58a903add27c3b9930f
+Output.2 = 698db7100c3df535c75587ca2342c70518f3a5ecb67a742f7c835d5913e0ca728ee94923e87fc9d5cc2160f70e699a3287da4265db0edefff8b19ae20e527de2
+Entropy.3 = 9f71ab8537b7c4793dde60c6fee3d454f0e7065fe6c2c0844ff6cd838ba5ae9e77e87240f470f7251165a3316083083d
+PersonalisationString.3 = 2977d0fdf366ffc139187bf74312451dc0ba0106efbcf23db1468da379edff5d2b06ca017fdb7b1c1d3edc0aa3cde848
+ReseedEntropy.3 = 122cbf6bc8e2b5dd7ed375e0d54f5f8d9391734fc34808af7367cb486d025822b8aae74de376b47586cdad374f0599e6
+Output.3 = 03de463685037aa94a5b83521a369e8cf7af62ec228e7c9615def0824a8e4711686695e03e339018cf70cea9c9590ac4e95694f09ee7d7d1b70eab65e1a034c1
+Entropy.4 = ec2cb7fd1687eeb768e0aa90e50237f6f6b69460bb907a26b032f2e72bc20d9ae31c39440fee4637b3b9c609b0793b8a
+PersonalisationString.4 = e36b7f06004829a89b97f840e41a1903ea858cce5d4b5b5c20f72d613b8bf319bf4745343e2c51b4ec0701938ad7ebdb
+ReseedEntropy.4 = 1ced71aa0db6a7dd04ab977ab33a9ec97de3934b1994516b48b1937777a917ae793d83b3dd50305dd236f277bcab922e
+Output.4 = b9c83e1ff779bd79d296a5fa5ccad53c87df26ed364bc8b5c9f9a3eea548faa34149b68ca65f6f3947246c93f0bb4e4307e53f8626f176360896608135738f75
+Entropy.5 = 3762819eb555277d06ed9323ab989cf5101887f594e83e4e6acb79c6e98f414a99a76e6de244e3e60ce0a2d7e8a99aef
+PersonalisationString.5 = dc31a85491585c0e1c6a7fa4094540f77deedd92456e5e58a35f3066206d7ebbd6b9351d4f7e0ae23867c4d6e89e3c50
+ReseedEntropy.5 = aa86ce8363cec655cf3e617b5c1ff683478b15534c43f2967e64b25f97220d0a550102b9c81a243469d7f6ec3691586f
+Output.5 = 47f678be2f2306902cc4d1c3e612af029ba735105f2d631aa55e774d7127b8d86376724eb67f3f19867d6c57a61a2bc72fd2171df2c3b9e05e62faa8bcf6f5e2
+Entropy.6 = ae978afd237a85e4de2cd31a18b9b38817d7f91882285c94dfc0905f46e484063e7aab1fde07eb63424d079a92b3c6d8
+PersonalisationString.6 = 48f6c75b8b2dc01864b2ca28833a64a5462a4a3b5162bbf6d9bb48d46e96529b67f8651cd782ba7bbe2b5ff3fd8b204a
+ReseedEntropy.6 = 5e3d63b519f1ed0ddf0f16df034060e6c653436c79dff1a6e7832007287db394fbca527b57048f0086f8aeeb5c016f70
+Output.6 = c3a5f9a7f2219e8ede06f2e601b2923e7c6b71c56f029e47d00d1dc1076753f0a725511f57d0f72c8c1c716f4eabcb8f978b23d3be572d8672a3eb58e4db4e54
+Entropy.7 = 0a57f09c0623673fc5ca4db9816ccb021ffe39e7d83b4448c894ce8f4814903a3d9211819384374a2efb7b2e53f4eb0a
+PersonalisationString.7 = f1ab27d8d7f7a4a4802c0dbae516454e385d5efbb84b652fae49caebc1f28e5cd3de4f7e9ab859d71e9df532ce3ff5d9
+ReseedEntropy.7 = 1ecfb8019fdfb96ff476337c1ed5b53c58d5101c0bd381a915c3553ee00c52f122b594bb2c6082fbc8b474e0ad870233
+Output.7 = e3d7d1057450f9d8c67aed69fd4d5a22c5e7a3fd0e67679dcbed90d6c443517fdae20aa013cb9bff3f2806d4731430c427f3d2b2f5f46450af8b045940a459dc
+Entropy.8 = 425955fdfa0f37f1ef8ff36ca9013520daee7fea30d7810b3fedcec31ba37f38fe510c91aa3a29795e474a851d3a515d
+PersonalisationString.8 = 723d973aeeeb21bdb1450a39903348bf222e86d323dae0435f5eb82df9a0cec56c1ad483f9ebe9d19764ffe25579c6e5
+ReseedEntropy.8 = 1aa49cc9b8fc0cae63ac667a5fccc77757eec01ba2b6a96547dfbae1f0a78b9accf0d54495475476cba472d50638e718
+Output.8 = 7672606ba0e94b3333432a5b6a3ae1601848c151456be3c98617f5c7377aba1cfabe239573fbbccbf0a63af5b1f67b152e7e84bfd76e5483fd0799d879f1e3bb
+Entropy.9 = 8bce33cd4324fa53e5ba9779049ec68a58f6ec840d4e23617602a6ca1125aa184f6d6cc3461fd4b73f53213fff2a6dab
+PersonalisationString.9 = 4eec7db6d498ef2d80c0fdabe286b4a7d251748b740a458784c834e3311c8944149db6ae7c4b3ce00982a9058281216b
+ReseedEntropy.9 = 055aee6640882c700facaa894ee61a487f824ec68c1fc0d8fb10584810f44a5d8266550d9393c9145553c367ca568185
+Output.9 = a7088e0b15c12b188718855550d04af73278002d632d1a341ab6b3a5700f04f84d3c4ca64972ced43e9f76143ea2074644ceef7f5c8aa5795e8f692074ac95c1
+Entropy.10 = 09741de47f5377fb94f99a0de876127aad00f88e5989e5eabcec2e75f3cf9e8c7265da02c80261db4dbeea466a80a6f4
+PersonalisationString.10 = b65bc8fd77e2e3e3443d73a30c09dd085c0bd6564ac0ececb4fdab5accb722286ad840286c48221af5abd5551b58e83a
+ReseedEntropy.10 = 65900106567be790babae0b81f2877a9c1642af3c58282e134cdd3b0920099f936cbbf141502ccb5860ea10bce394c0b
+Output.10 = 1ace19b725a9deb13bcfcc1e4d39b604b26556927f60c367936cbe0e76127d3ddecb73f52ef39883a9def235566d01dd4f734028ce82bc5fb9ca300f3f5dd080
+Entropy.11 = 5ed4b6e453a31c0b04f960b739f4ac061cb719a70919709bd5dbfea910eb4e4dc34031e0298a12c7d68e65a38e6eaae9
+PersonalisationString.11 = 458d214a18fe1fd2c762c77cb98a5619d7e48aafa83110c8578d1072d577b93e53a13ac700612101b7862ca94eb87ca4
+ReseedEntropy.11 = aa829f4ea15bec4a9ddd933cf6c47de60f7e2cd172287eb502b9c7beda32661e1ca27be26c1fb2e7a667ca1e0466aad4
+Output.11 = ef4026144d7dba42bca258a0b0cfe881e621f65e19c267179c0088b7829d9ddfee39fc8f9cdfecf0d451dc7df173d679bc503190795d4be67909acc17bb20470
+Entropy.12 = 938602d75ea11e8b1eb037381b8e7643b12967aae4982a4b4eed054babc78fe4dbfa832a0b3dde8d2d1ed423d807c13a
+PersonalisationString.12 = c09424e77901b1f021c96124c8b2e8708e3dea339d15d7554dbe19760a99a8c60b2e8f208804eb6f6bef43d5b7db623f
+ReseedEntropy.12 = ef6364ff1c3d9b0c240ebf62fc52768b748f16581007649ad9ef4b6c72176255508f6e2015aab2f95421ac7a582c6205
+Output.12 = faa48f2fdbf31ea257e010cc74ef2d50d336b2aafd4fe8b3ce8fcf803a435e57eafa18938e35fe9c3a01d92f2b7b1bbe7e055dc630c701e288c1fded75e5b0e0
+Entropy.13 = b8f2028ca74f8a0592c99d0ae497438562ce1b7a491fb6db73c4f8cda285a934777b17e472707f2217079b9d8d65562b
+PersonalisationString.13 = 21def8c9fc10cee6fce22401c4ef13b17d33a604aaa70f924136f6635b2e59e0099c778e4cb27b093baef94d5ac10770
+ReseedEntropy.13 = 80e96e6b971d1436861f85f1b23cd7f47974a06b17570c337d6f5e98ac42d0c30e23f74d78978501cd990c930af4f8e8
+Output.13 = 7720212b0189ce42e969a9bc598a179491d393483fd7456047f81a708076f88d34a71546eafdc3556e312138a33108c91fd8e81a963dd37e03c895b630448698
+Entropy.14 = d1757e3687b57ab3b16ef6f43ab456e7d2c6cc182c0b8376cf847798a0217707e57bce5cb326cc7d1b5bb36f213cc621
+PersonalisationString.14 = 531b64be5d25937f30bed886f2021855db1b63777febe6695eb4f2a5e3bbfe6ce80fafeb8e7f811e06cb87e520a7036f
+ReseedEntropy.14 = 350112071b8315afa26fa3d9be6b6dec59ba7fed2387556cdec43ab8def92050d2f0fd34ef0c837c022c337f227b2169
+Output.14 = 47ad3d7ef4e7bc4696d039b6e424669200b5f6c687f813c270483793518adf6698aa40a781208878017bf77afeb2f98794d21578623888eb98135ef0e5121c57
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = eed2cf41ef920a298aa71c28c46377392b95cf75182cb47ff2539ac9df5db7b2b14c3c99900cc7389effb719bacb581f
+PersonalisationString.0 = 88cb735f569879f24d958b54d4a5544bd728971ec531f82e02c113b783446afbec857b505e00a1b5c8b2749e1eb19b03
+ReseedEntropy.0 = f03301f27e7f9519ad947d8b16862b47008bc03e55d2f0ce9bf83232d3b0c816580fa58b5bc3fe6301f2cc8d03c9f85e
+ReseedAdditionalInput.0 = ffc23a43f85aef5d29cff5cdf327517777f68c0174220fbc825c70eba3525f579b10dd367d163c740c57db0b6d88b37c
+AdditionalInputA.0 = c5f108eb450dd628429a321af43a9dfaaec6bef2d1caad89bcd86cc35ca95ed85f796bb3bafb071ad2d708230bf1be84
+AdditionalInputB.0 = da2a98b2298e3f4f691e91fb6c719d67d3c37a916e50bd2aec09263c8e7616b75619472f4dcfd97be135c09f0b825f0a
+Output.0 = 4eb6caaccc317dadc89037642e6216fa3a4832915133e736d6a5c1006139076b4d8bb44b605e1d6bf414e200529d5fd9d95c76a9714fd91d4e56fc7d90d660a3
+Entropy.1 = 7eee671f998ae5a3a3e1a471eefa109b3b1acca33071ec2071c6b0b79edd100c4ec66db88e0fabcd630d3b1129f5652a
+PersonalisationString.1 = 243297161268c4dd27012e77e9e80ee8aa3cd72e0242e5c0c3d21668344908613a1e4e3b658585eda4de66390580c5fc
+ReseedEntropy.1 = e7ba06cb5dad2ce73dd07c7939581b1362727ecde7567efbb1483fba1f8cc702d425544ad952f3442de70c8b5cce53fd
+ReseedAdditionalInput.1 = 4a2cbea021aee0dbae40d7577783b8a75cfd9d5f31c0463ebe9817c11c6de0dda15424a10455b3f4dc7f2bb1e2b7d928
+AdditionalInputA.1 = 2df757dc576c6263e70c3c693a0f963ce61472f82f7f4d9c9051e5c443bd63e1870d832d41bb091fe8f01bde07088c93
+AdditionalInputB.1 = 28eb9a03b4e91d2feb960366e7d8d571e0232573378615325185c0eaa609f5526b06377eac6b4094973d01404adaa42c
+Output.1 = d677c5a72c23b589fd15a65516b4a5c3bfe4b003e424c6a9104f4a2337eb36111ed6d15174f497d06b12985429ab01294f508f6987959f784e4fefd73d5a37f5
+Entropy.2 = 14579ce1a2b1096ff932dc3c6e382965f612cedaeff27e90c96e32f87a26a861565a1d4d16fc8bc351b50bf11886efa4
+PersonalisationString.2 = c359dc157407a57a3eab7b6e9c96b1f0f632d533b2fca8415f43421dd17ffb25370f6d5b647f460d78761d54a510038e
+ReseedEntropy.2 = 27d3d9450109d02d52f090b509501f2a6d5cca3fecec1b8f2017494dc61480a5b9faae6a3c662290ce80bccb4b3c3a62
+ReseedAdditionalInput.2 = 469a5da3a1443d03f92b37d0693ab72f7857c5b83b47cb57c3ab88011a56266e2513c386df7f604fba73c54c2dcb8a9b
+AdditionalInputA.2 = ff257f91eddde25101b29f4f7753707eee7bfd33c9cc3d7c2ac4f2fa442e9ed87da43e1642d1601cef6f629acdf18f54
+AdditionalInputB.2 = 84db1fcd484c63e4915bd5680d96b8313cdf82eb1d04c12b1c40d8bbceeb23cbc4d05c638912c7c70b5143fc1eb79970
+Output.2 = 2604c2ef6914a33e0ff7f4d4e81da8b5acb74601a59da17d646a77935f15bd3406144c6b987bd8d446969791128bf720342e5a489bf1f5495b92c1df275f77ba
+Entropy.3 = 83831370dbdbce5f2f08805ecee48a56fef7b85737512258aef97896574e3bded7a876bb70d29d88aadf15f940ff4241
+PersonalisationString.3 = ea51227d7760fff9d860a002f0de373dc9b8ab862272c71d0a6556ab6db99e900b113a792457b8905760e377dd158346
+ReseedEntropy.3 = 868b21adaaf58a8391794fd259985742169db47c2730eb786ca28f80e3f16a2ebba6bfd00f37814f938000c6fa82af1d
+ReseedAdditionalInput.3 = a1a38cf26e0c3f85a042856c7ce9ec2c113b094e5ad5e662254692d2724357c92b177229b8fe25944515dccd469278b1
+AdditionalInputA.3 = 021af36650e7acc3c5f526abe7243258c5182001d64ce80d4bf0a633725c1dcc38f3f2b706771122bba5026c3dac6040
+AdditionalInputB.3 = 6bb52da34c8a4528a2585b9f42c04fc4487ff355e3b7a42c37c833ffac636de545aba156f516efa0bba52b9116986f8e
+Output.3 = 770cfbdae652c3bcf5096f4a6004a260cf61e84606cfd60ac6719d72eaf463da135dea671c00258e77d49d72c30cb2a5b66f79f33172581d95ade3f7d695cb61
+Entropy.4 = 3a56e4585b56af93b4a205c30186c58fe9ed185810d9267f734f3990b91e366184e0b46f5f8bc7c364cf8ac5df643cd7
+PersonalisationString.4 = c8725d49ec89b76b9c292cee1bfc22f7a6593c7fd37a9633f0341b68905f16ca25dd096aafd39884a2301cfe178c63b3
+ReseedEntropy.4 = 3e5a814ee09aaad366c20212d49f186e7e30d7bf7eb470958b1b356b6fdb1114c6ecaa8b18f39e78caa9c29726394241
+ReseedAdditionalInput.4 = c17a4fd0371f5050c3ff3579d2e6809a8e5dbe62f2be359f91faff5731031c6c2ad9ea8fdab10561f1fb9cb85dcb9c91
+AdditionalInputA.4 = b3428ef301e891022eabb4af0592d918ac6ee15de29c12a05097e9f5c0ec7f936ef5331c633a399c3f90aa47f24fd9ad
+AdditionalInputB.4 = bf0b17e658cb49d2eab681ca348ffc7663570a5596c884d96d1d91d5cb856cc9a72a7cf8c35913525b5e0194c5f83d8d
+Output.4 = 9321a8460ad453d346606d0fa88e44e4c0a3a32d43d84d4cbfa7adfe411ed4da44e458c168439279c9acd7287ef4201e7dcb60087aa80d0574cbadec2feb2e41
+Entropy.5 = 4fe67bec0f343200570be31e93bb93ff5d1a2954d6ee3954fad31f2219e181645d95991eaad95cc203c2974b4f8f9299
+PersonalisationString.5 = 84ebb999114cd10e2f3f9e8b231635cd9a5b1f894e5ae72e886367d1bc65303fa092f8aab9023077fb60e98f1a77beb1
+ReseedEntropy.5 = dc5ed24212fcf417b2646e2a23ad21363e78f7ea286417830b853f4f69298a260fcd54feec558d3847f16a7139151d42
+ReseedAdditionalInput.5 = a48cbba2165242a824b8817c712315f6cc63642549cb86f37ad5121007c5719b558554352d51ba444dea5a58ccdf5f7f
+AdditionalInputA.5 = 2d0188ea685a72b15555bfdda26107dae14665b2fbd9694eca5aee9f4c0b2122af518115c385b166ee21d63d20d8f280
+AdditionalInputB.5 = 31056e76fab196d34b794e2890536fd2227a49661b59ac240ccde597e41b1d038cb1be271e18dcfe4a58586532f6c7d0
+Output.5 = 512a2c24c7b1709cba34a7ef97cb16032a99282ffd3e80c3072821bbc88d0d4e236c17b99aff7bf590e4dbaaba3cef0bc4796f20117615c97356f4a745d12fa0
+Entropy.6 = e1f2a326f4f59d685272c47f1a18b76c1e831da6aef5432e363fdc7e1cced7dafacf44b7763e24661bc92a7dce8ef513
+PersonalisationString.6 = d1d0f298539eebc0a45432e40d3f82c0a42da5a9f71986d1e46c0d8f02d0518db5f7d4c9d4b7637c08283737f3d3de53
+ReseedEntropy.6 = dcdc9836abc8cd434989f337fc1ed1fc88e4b5c67eeae33c1591b956de15710ddaed7d5edb2686637970131dbd8f7ebf
+ReseedAdditionalInput.6 = a5b9655d688be8ff55616461b6dc7c8a63fffbe8509269a3bcdcf3d9625b8a1efd7f7e7e196c2df094cc27b6f43d4ce4
+AdditionalInputA.6 = 87ebddbad4cdc4c73b061e047ac0cfa77b9c01996a16caaef1ea9cd957953777afa781ac005eb5859d88cc878056f1ec
+AdditionalInputB.6 = 4f3d5b856e154fcc18ba7989f362c5f15c5fcc3d933f3de7e0a76a57561bad2337e7ba2235c4e44c5b8354323f560b02
+Output.6 = f5db634b5906f3aa68ef1ab78bdba4ddfbd53cc6043fd3ecc6df2e9c7a47bdf54080a46b689e9e5f96c85fff5b78d12702d0a2053bdf6839ffbb1c92075dd189
+Entropy.7 = e201faec2d5f4530f1affa1889f1eae9809a8ae7d32a0414dcfddfa373ebf242b8c108cd6ceb555ad312188fb16511b5
+PersonalisationString.7 = 3c33d15c59a59b0b3c39b008c17dbaa2e4137ab473caac6b00fdfbafa73f68f2e244a3151fe129ea47345d1bcbba4407
+ReseedEntropy.7 = aa3bec504ed8837779903a625dab0f6b6e2508df5c7ae5375a54259a3d7f35a41571668fe27a368d201106519ff401bb
+ReseedAdditionalInput.7 = d75bc721d3b2ef788f2ee4cadb7756e061c6ec786f7c8e37888795663098176fc74affa49ffdcb22d03e0bc597dacaef
+AdditionalInputA.7 = a624db91dc18349aef339678d75640cb5f9868b1bc77f9c40bcffdc7119f512fc9a9a4f53f88c1f2da76777bab87f073
+AdditionalInputB.7 = 4d947ecc8f47be6ee6fcab952bf3ad0f8fccd87e840ba931cd5a3b4cab650a5d86f84abd83e8866587c66ff93f37ecbc
+Output.7 = 7831e953ddccc19d5d31cae32bb63766b3123f3dc7bfd27f0fa49f9a615601a871b57109c2692306663905481f9df46b81a7adbec5ef14cc12fa68bdeff56a12
+Entropy.8 = aa55939554523129c2ce9fc43182cbcf2ad88bb510a0e64960a4998187cd71e6b35917dea2fd1b1d77ed211b0bf49280
+PersonalisationString.8 = 3f751fcc460760c60a52e2093ab0a8a6502e2f3e63b6ac4f0cf8c4bcf11c054c878c500c7da640333c36705b33e847e9
+ReseedEntropy.8 = ed4110727a643851e226b7bb0d07d35e54565d726beb6138b538227d94f32145f32aefb7a0a75d2139ccae41c4813dca
+ReseedAdditionalInput.8 = bde5690588c7f3a343f741f2b835edbead444859f46c5504feaca048ebff1b3786027760da9c21e5c1cb54369efa4500
+AdditionalInputA.8 = 2d448f2d9cbe1533e4fd50facce3a199f91d888824a0fecda74b16900da7b125507fca2eb7b39bdfd5a2ed680823278f
+AdditionalInputB.8 = ad4d127db0e78b80ee18adef40aa78aebe09f202b5e71496d2e0ac8d214c01fa6e98612c03a0741ae0d7b18bb90ba3ef
+Output.8 = cfba8daab4c996c125102c46fd1de2afb75d89a3caa83e965215d23291925873d7d53a8181a92fea3347c282da5fb1c0f0018aafbe672b9cd7c7a81ce0ae4956
+Entropy.9 = 83ffd36b1d8c06a989e98cbe9048d8068550a51a903be288ef26b60641343160abf6adac16e89ab252647ff9e7e9fb00
+PersonalisationString.9 = 49b3780beaddd3d25667c8e3825d49a4211bc9a05c18f8d4ed061be8bf529dbea68193bdbc7adf924e2796805b970f2c
+ReseedEntropy.9 = 7abcd3b3644fd4040eae481968da7e719533334d43f046e92f40ceaeb47f782bec6fb93ea8b821235a24c07f4e4d2395
+ReseedAdditionalInput.9 = 325b2ea7cdf22f969b0eaac570f9f391365a0cf6cf467d5f1eacc5c4f2f42e11753893ef92d906e359554351dbc87055
+AdditionalInputA.9 = cbf5246702df6d97e2d8e76bad1c928903abec591c3393defe1846bba02a0d7f56c4aa0bed78850f944322ae1de03913
+AdditionalInputB.9 = 8096f52962cb85ca4d59774634b0ec4dc91656e14c0c6f39f1cf003c04ff4f1d960a0c1e75a2d4dee7acd3938567c76f
+Output.9 = 18ba0571ab637e0d0bdb7d8c2e4e4a7b357a82649a1016aa0a1066c891ef54bdcfe39d72d0c4b9c1a8430302a66df9aa88c2d291c5390513478780044537dccf
+Entropy.10 = c677fd96fef5cd092e02f0653ec726bf9c0e6b079a007e78ab7ce0cf76fef5fda2e96edf7dbeeea7614fc3e5976e3a6d
+PersonalisationString.10 = 5952a661c3802d16e3e2446acc89324b3eab96a632bf72c1d15be71bd1269f0394cf107c28118fb6078227d640414e9d
+ReseedEntropy.10 = bb24e6a57996f75f02100c4fc88d2f635948d4322a778f05b91af465a9d7f65fe0470f187f6192a63032438da8f344b2
+ReseedAdditionalInput.10 = d69535eb84bef4ebc54bebe837512ca736d14851b03aa95a5243ff370ca82256d1a1bb4050fda61e2159769a0eac65ef
+AdditionalInputA.10 = 3a1b3dfc0cf19ca5f19f0aedbe443b7748a12a104df6659a4612006daaf1a3f567772249596487cc66550cc9a5a7e421
+AdditionalInputB.10 = cc764000320f3371709e92442badbee12beb7caff2efc730780b3eca22afe43ee70d5ec4c76c091af0896f471651dded
+Output.10 = 094d5299cf69ee54624b1808645379667da9d2ccf517644f9be021379b0bbff85f0e661cc4649bfbafe67e20b927b4346e5fa4ab86bf9f1dd5ef75971df8dfba
+Entropy.11 = 4a07947252aab1a141f93601509b6a5f442f5e0fd455e6d69cf5d582a3961597c1f101a2bd25b3dcbb471ddd7099f843
+PersonalisationString.11 = af96f1ec13d05d57409e9c06fc7c1d3000ed44b354932297629f288de229424ac3b01ec8af7bcab44a5450d7125ba47a
+ReseedEntropy.11 = 45a2833a536cecc4bb1f36a2efa369c46f471c7080c0d8230da21f61908bb403e11a38efcd7792bb81e1ec64c61a6973
+ReseedAdditionalInput.11 = 86a6db8b6f89c92f33c20d9c7f1f35e6eea25f3e62c7a7cefaab071b58e4dc72a996609040233cebc071210136064114
+AdditionalInputA.11 = 9195352ccf0fa004c3ea45cc3f3635519dc8f5a76f2a600863d8864518cfc7e4adc700af90504e5ceb8ec2f9795ca845
+AdditionalInputB.11 = 9e3c6656442c70979362b9cbc9760c59587449443f53bf4e8e7a52038f3cd4baa2715749fa9f21469c52761f1bed4fe9
+Output.11 = 35d26bf94f67fca762a4f4e7da4cd87d1239d2454b01ddc8f7c5db9449f55c5687c48c6483deccd29110e62421212197659015d7a7f2f48d6ddbff09916b641d
+Entropy.12 = cd03d0a593cb6003e6009a75689ea7c71d28b7bea6b74b68e93092bc140b37b352ca8b1c396694405f94b0f6fe39a46a
+PersonalisationString.12 = 263d10ef973fc877a3cebf512dc1abe5fd189f1c42b74f071843b6cde7b025bef4266f8f312b42f9258aa74fe0ede089
+ReseedEntropy.12 = 9a01b25f8d8bf3fdf0673c3d0b5a299b185ff42e80d223166908e4fa09c063a3fe7d335f526d2d7f7aa5fac44dac6d84
+ReseedAdditionalInput.12 = e712afbdac4fbd71de6f4ff5ab044baed9c7a04f7bd4bb142dd1d341cfd9c411fa19da5c19bff27d1b6ec283db0de9d1
+AdditionalInputA.12 = a4f3b9d8b86fa46d8c26f3ead6f8eb47cfa6ca448f1659d6d22542c3dd983ce2f270701c0651b6c0a10779cc6247a81e
+AdditionalInputB.12 = 1aa96f73fb1a8546dcbc309d3224986e0a4ae3520d2fe84b5495162b1e9d23eb08507206db3669162886ba48f7bf1f29
+Output.12 = 09d1eb9bac2b9ed71f6096ebc8d658b26f4a7f52edd49c2ad3bd9d00e57b05bd96496c0d63f53268a8f34cd3c3fd7543846a9bb2d85c377981f6e9b4c1e4406d
+Entropy.13 = e7108a71402032f8be94fd182887768b5234b867e72dbcb582a2bcd3e480974d9c87809220c9cbf11867e974a7c75fdd
+PersonalisationString.13 = 6924145a851ad22ab73e662117e867cb6a9f0915f22ce83213a7b6cea6d1ade79d67eae31352dcc1874e1e3fb928f0fb
+ReseedEntropy.13 = 44381fbe2a5f253ab0b37cb7982401e2b6174452ea66673c1262d5984605e5db4fc278e86110fdddabeb6a3916862674
+ReseedAdditionalInput.13 = e5d94f809a805d0418c44a84be93d904f24d0a57ebb4924adc7359761ab6d73d5b1702dea17f8c01877ee5f44fb5c5fb
+AdditionalInputA.13 = 1d971bf8b364379323d6972bf0dc8641a229875921b39738ea8dadbdfa0ad35118169b4a14b0cab605bb18c50265db06
+AdditionalInputB.13 = ed85705969091f43e323dbccacadf7a3ec7d06d69b2b500e334295a6874e415dcf115b99e22abac78b4adfa10c780695
+Output.13 = 663d9ca9850d48dc4d950505b3cb2cc06866d933a8b87bc58914f9b8e959d434064bc60008b57f7f1929637a6ff778bb8828e55631b4ac28522296d65496934c
+Entropy.14 = 1fc39d0e57522b52d0506817c82422cc7c15dec0d275f8f94a4156c8ec3b698dbede1e15804b822df6433d0afadf1a50
+PersonalisationString.14 = eebd8b078b8004f1617bff5934179f81463f43fee8d043762345bc084da2b7e97011cac6f488e31da5dc00a7af5b97d7
+ReseedEntropy.14 = 60bfd2529b391204ee817055c8baf5d4a470f43377394640140ec122657787344a9d5d2d65d112ae203fc78e7109872c
+ReseedAdditionalInput.14 = 86ff4f5942d3411751ef6375f8c65016d43c132007cc95835b104b44f9733dc5caae17d3da663369bf4ff82adb830443
+AdditionalInputA.14 = 02a4bfd4a825e4d811770127c6f5a568deff4d7989300a0bd23220a58631e03e138c55b565032b8a7c6f3abdd34a0c30
+AdditionalInputB.14 = f9775f8fb1b767c4639e2c3fe9f0820e03e28780641ecbf832451baea5e1ef83cf9e078cc325b1fc7a8a14bf07cc4ff5
+Output.14 = ba473979f23358b95ff49610a7b91936b7d1da44bf8891cc19ac6ceb9f0241a8c3771a2efb403275bf599aad30b9e4604e90729241763801387ab239ae543625
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 3fa904747034cc3093deaac497e3c143fa4400accfc55885717fa943f43cbad1a89168aa76961e150e2649ec1ed67361
+ReseedEntropy.0 = c60c5b415bad715493486b7a123ba6c046089e9549ea8bb22a7ad4108bec98117f751a2e4cc20b02510d2a3d02605b4d
+Output.0 = ab2d709de881164b6c2149b21eae1517f87561649e0dd9ca5ce551c5bd12fdf7091e081d307123aec5ae7c30afd2a64c8d136ea07f7ec5edb4400b9a64456642
+Entropy.1 = 0912b0bdba55ffab83d8e932b2c1438003324ecc2e59933d6e20bcca9b5c342c077e75f47e1d3359dc3cb69bece4a1c8
+ReseedEntropy.1 = 02e503bd3f3485988d5e0e6af4589fffda797093e6fa77a4a84021269fb8e2b58ef70ee9b60f79455bc9c361b7e43029
+Output.1 = b16a7e86b1436f13aae41576df303abd131fd45886f02f48ef8e9f570685ffcd0dcc1f5f1d3bedc2de3782290f36bcfd4684d76e3e56a32b7509f67f50dfb14c
+Entropy.2 = fd5efcfa986060504db921095638cbf70c78b7fdb1b33d77d4a557ef47a365308539844be41603e97a78fa9f5504a498
+ReseedEntropy.2 = c99489738767ca8b22022e8ff1aa5aa6289f2a822e4a8c9337ed393db4ff5870b9952af53e88bdaedbbc0026256f9f6d
+Output.2 = 607b455eb30193400251612d1f967afb7a7d0f4eeefd690411b32b560bed69ad745690f98fa58fb0998c063e526d124c4035f565ee9133a86184d6c01350a5d9
+Entropy.3 = fddf8a151266a550ee2c728fa25dc592c6d55c644ab0d3cd7047248b31e2dfade4acaa8c40fa2cc5b714bed1777b3d3d
+ReseedEntropy.3 = 50818e85d856059a8ce29ec9c8c0b854ce04199d128165355dc99c258047ce733a324ead4d334f07aa4cd33e2fb5f277
+Output.3 = 3a4fe07962ac269b4f40cf5ec02150c15b076e8dff3478dfbec9bcc7049eb846b86b2e0dbd2c1e4c387b77c2196ae1df7921ef6655700d9cffcd93df24eee4d0
+Entropy.4 = 9f9a5202a542525b107bbbf2ad34ed1f9a3d6a27f206695f8def3c2190b037bf332ce3e2dfd65ccf74efaebd518fd345
+ReseedEntropy.4 = 7e962cc7cab231cf76c27022c01a796b76cd97748173553314fdb5bb67cf56346e35bbbe47f36f989aa16074975b6b5e
+Output.4 = 4162fb10e25b3754bdfb913a9edd01567e897b2a1b37aea8cb7af069f333a52ae15bd2c897160db034bfb54d53481eac1151064daa3ce88579838efb1d36e077
+Entropy.5 = 8f5ffa820103b8545c4812ae70cd77f53917daf97e79c1961492ee1f6a72d67f4f9c4bf848a3a0b094182afdaeb83e78
+ReseedEntropy.5 = fbb08a78bab992fc76a5702c20ac2765a090d2d4b8be5a312912bb66576bd152e706bf8080d4f239680df91ac2201608
+Output.5 = 811ec725c9a7b3abff962bf7c28b8fb83bbf394e100a56a1e40281e37221e8b03661567cdb2ec57b95bdd5f4ce89adae3d43e3ba4acc46faab26a3d5c7a973a8
+Entropy.6 = 981d97c7750e5b758d490a768dc449dd6e1221903a7065acb29dd24d63f56442e89dee90a6f476cad8e82a129b5e894a
+ReseedEntropy.6 = 62397c5d203afe8d29a2044f21dd8c102bb87d36fd67d5c3c22ad6116fb3f3f862d3cacfe18b851e81b5bb3eb074f970
+Output.6 = 0a58da0e42ac1186ef8e1ce6f851e230edfb91ae3ec09fc374955445afc8fc59713d055180bcd56c3ca51b71eb6edaf43eead80930360d09300e16b551c3015d
+Entropy.7 = 31d50ce8e925a6838f0834d75ad61c21d29db48a8339f11adb2a29deb460d2a3f6ad86a27bb008c85925c540fc9e3398
+ReseedEntropy.7 = 520da253daaf681409a82aaa2fe16d6b10dac5649daf4f1de673d1ed7c6a6b8e45d07752f81775c9d0034545d6535a8e
+Output.7 = 7212da3707f4dea6828a1e7e84ee7bba2b8816c111a7f6643d492bcff5f4ba5b10af6b25edc567a8280dad557c429085f5bce76ecb8f7def376e85ea999e815b
+Entropy.8 = 1052e52bcffa8d9bcf241662af4b281c81db5baa8a499c1a113255ebedaa2953888d39c80e50cfb477e8a2aeb1b7e432
+ReseedEntropy.8 = 23e2d6cc4ea030e334e1a1de4fe71e10ed0affe7aca2b42e97b9149936910b93d950706083ad261d51a17bdfcc7aac23
+Output.8 = ec6f01e39f26fa63d438f1aa82564d7e0bfcd0c3c4671ef107704cfb6ec32af5259ce14f36049388891dd2d236b2073deace8e55c3cf4b98490a6fa4342e004e
+Entropy.9 = fc5bdb0953cb88e240bca583eb79a39d61e765683449e15e7e6c3fe4f2e46f023d7c27f35ca9c4288d2f1af9a11699cc
+ReseedEntropy.9 = 48f5d652158aa1b63181654aae4fa35e107866b2748147d666141a60287119ef7edf19c2ee527a9610af885400e3f83c
+Output.9 = 2c03106ba0d39d44ff6a45c312c525e99f1f96680face83e12755ec60c22895575a0980b338967e6ca390abf8bc3d4efe24d2fb7ea83c2919f986ec7ebfce52e
+Entropy.10 = ae2c5d1a8d8b813f40d3e26563fec0e4062093ddb63df4bee7d102c13c1026f3cd0c818e2af5c7dc3d3e3e1fa6d566c2
+ReseedEntropy.10 = 6d8d60ef2f87f941b100f3c1214a751b23cf341b30f7f7ebb183050fd0aa5d222e876241840202a9337aff17d702682e
+Output.10 = b7b9f0bd7954c0e045bed86c3c2e23ce3af17dcc855ec5aa4f04f0929351ae6698bea4f25ecff4f52c2f6d758eeb9412e583914d33e914744d49dafb2740010a
+Entropy.11 = 730611580fe7a08da679f864654fde5a8d564d68dd41d2a188d79002f8939543fb7dfac8a656760fa0f66dcc2116176c
+ReseedEntropy.11 = dac5d0bb45262153d71cd330dff522446816ad5e28e3866626f6e7fe5b6d3170d9442e7261a5ce0299155cae74ea5e08
+Output.11 = 470212b1900fb4b1f49ceaf8c0333faff0d2a79fd5e913d52d66970ab31f64c297b55ee812826ce7ad358fe55e48b896dc4442877a05c2526da0e5188f6fd5ee
+Entropy.12 = cdd463977bc88b0e660f3cece4fcf4097fc79f1e20dba96c819644c370043ac39d4997ea9f634969a80e6da6d9dd9e9a
+ReseedEntropy.12 = c7dbc97c209064a4a663c865e9d4af0da3f709b6c17fdd66a969054856aadfaaa1b97361d5a6d2ed8e68ccb203aba8c9
+Output.12 = 8262e79752c9e3036e00f36c5b3d06ee49555c599193ac35ae2a3a2a6bd07c1967e7c0fb4ebcb14e422f662fe9cef08be746bf27f3ceabb7ff3d7168eba0471b
+Entropy.13 = f47ce5663ea72ce3f42b00838b0e8e90adf6746d355b5cdbbfc0bb80e335b049ed28011c7c0be7acbede87b57192b1c3
+ReseedEntropy.13 = 61cf9447c7c024e0a8ee046355e3924373e79fea7efe1c3c8b1f7bf3aebae246887939894338e304e53d0141b4c22c87
+Output.13 = d1ac84903a9bbdcdca45bb7cee7a5f49e14a68f0d8467da68adcc22c9d0bb02118b3bb7f2d4e11c698bcf421edca5338adb0a29b291fea9f65a480d45159da95
+Entropy.14 = e23a7f95c3cf3fddddec66cb16e1fbc38495ebe98b3e14d8f351e58bc457cd38b7975984998ca99e9c2d14b34068c3a4
+ReseedEntropy.14 = 36410abe456d7a51948098897ec205f75f22ee09cfcc94ca88fbaff8d159fc779a8e420d11fc1ac09518237bfdb74462
+Output.14 = 3c14a63a9c74dd02051c0147637401649a68452c28af90e9628f1ac87df1d27671397ba34f493997ef634284b74b3b28b2e7d4171eb025e470f39dfd12636a5f
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 696cbd64f07b112155e7fdf5c6f4f305ff0e82f9d91cc012e225f05afe8bce3114347696b63c46ca0308adecc0d6c908
+ReseedEntropy.0 = 23f7a55ae9bd6d13e4999b1dedf4c08897c41e12a51991ba40a4f53f19afdf514a77a5808c65abbdbb22cc70c2e41bd9
+ReseedAdditionalInput.0 = beb4213efc8b9f23b7e207061beac40e0095e4d7636d97504b16ea972ecea6fc074145d31847441a310ea3d09d2c2e86
+AdditionalInputA.0 = afe68249563b6dc7abe5a1f691d92f378678721478bd452003a8f72db0262e40c55e9e56561a50916675903a3110ca6e
+AdditionalInputB.0 = 5f21d784fa3314bd386fe08286c5c903c3f77005425c6331bf903233839aa2306e34077c91dc5783b8b946410b1785fd
+Output.0 = 975c38fb3191d3e15a808442a6da6e2727c373aa64a9b16fa469c23cc4c22ff8c1c33949fa6188e319d6d66b0c3caaab7395b38cd54979aa18d505259d8d2352
+Entropy.1 = e6dafe8ad4626db2374c09e9863d4e68bc5ace27a78f1adb3de72bf69d29161f6f153637eedba35cbfc678b4c47154f7
+ReseedEntropy.1 = 59709d21325a5de09be908d330b7101d1746698717ffcb53c31b44c2bd5e5fd2747ab3d131d9004d402870c779a3e307
+ReseedAdditionalInput.1 = 882ea58eb50306a7fa6148c415e4022d0a0778987a35dcf0f670cca8ab528fea2e9791e322397312d7cdb6ebf0390d7a
+AdditionalInputA.1 = 1800ec4678b31320a592d8a7cf8f4ef4f7aba3f557162524ba6963dfb1632cae34e8d9f6a11e46204a3b912aec2a9e54
+AdditionalInputB.1 = 0fea4f0f327dc8384d51f3601601277eff9da6dedba17789dcf6a0979351ffbf5764a61e5ad34bcb12a2228644348357
+Output.1 = a463eb0cc9a7d24f986eab26ef86a542d82969f6ac993b8df0cb74ae1857e717b8bc36297f3fd4b56dcc305483889ee1140f2543b74f3b152adf1ccc2b3f7dbf
+Entropy.2 = 24a5f6f936a1f433a727ffff1d15cf440dd0781da36ca7918f0eee0c2699ad820488d96cf27ac0689c258d37c7ff343b
+ReseedEntropy.2 = da9cacae8a7c86a1bc5598cd1e7e08f25cfd69aa6f931f7b3207ed004203ff7a6a673dde6624fb3f79057975e0767f50
+ReseedAdditionalInput.2 = 6954e7a17056b7be8ad3e2b5060b1bd47c5181bf15c561a62e3917cc739bef24c40068a28abdf0f15770ed6c26f40e40
+AdditionalInputA.2 = 997a08350845e10b259076adc7b60a94091b0ac76f643c432d9cfa700335ed5a6ebc4069f86dcfa1e8b7348eb6a77382
+AdditionalInputB.2 = 5522a7e0da07955027d9b4f31c434909879ad363ac17a46daeb0a81e6ba2e3820699944758c43ff16bcd5f9858bef9c9
+Output.2 = 7f7d10dba2324d251c5554717139a620f5eb788097c14d929329a0dbf02a1d88579cd070faf796d0b689c9ea7c576cf8276b1b2aadf0e560a7acdb3069ec4bec
+Entropy.3 = 9cefa1ee090dfbfda933ecaede9d864b8d2f1e4176afd5446e6e3e07b8aebdfbf1dfeb5c30afb02c80f6d844a0721e16
+ReseedEntropy.3 = 24be2a8e42f170fd93de159775098618f6511f05b677efd246dce58eee5ee9894d681abe5b718f2def41b52fe3347376
+ReseedAdditionalInput.3 = 5ec66739bb2d02902cbe54dce7247adcd9a7139a230c7aaf3ebe83dfe47040849f86350ec1f12efcfe31332140b0fb49
+AdditionalInputA.3 = 82e905cc9fc61f33bd3b76d33132692bb182dce8ffda7b5f9f13ffec9e9eb170de967c4a3bd66dfbe66c38fe2d63454d
+AdditionalInputB.3 = d65c7ad438b6b27eddc7b6b7497be3f5f3e888b07cdd86fe3d81ac0aa0a2d53197f3bea5968b41ad58701fc435f34cad
+Output.3 = ba66e163d35ce7d2d2878fbc9e7b49328eb70a3b06dfe9aa1e9d789fd67aaa563c4692a98655b7ae77042f4605ce99575dcdfa2c96d93d76eff44cfff79f34e8
+Entropy.4 = 538deee0c59fe71b6c67ea8b0ff5fdc1f3c94abdb1237dafd6e9c986a445429aa098a6bc55519025c36f253ae1cedcce
+ReseedEntropy.4 = 9d1639bb40ebf02a270f49205a4f5da3c14583b45d7064f97f552282833e7338fddcee59e91fa8089ea95eb6da493c31
+ReseedAdditionalInput.4 = e702bb3d959cc168796a8e210b805e00167d2f4d3282d47235d029597f8a90772e904e8a581999db0ce010b3005790dd
+AdditionalInputA.4 = 3193b378390351a8396eed93bf1f41d748bc3db178442d7e76f4aae057612861ae27a3cf71b2a1785d96d59ce02e1c6a
+AdditionalInputB.4 = 238956e0d206d4e992ab9c45877d9953c1e48e76e0fb46d8717a0a6412cc9e9c161894979506694c63c8eb8c5d106767
+Output.4 = 7a54f50af3a59293781ae8438c6fb0ffddde2a3300e605545cf302d97b81fc5e495ce382572dc76fc9874cdfb31722822bff15bfedcdce2f70e5f89de5b41c6c
+Entropy.5 = c087c716567683bc3880be56e322be85f6dfc236d34cc627f7e3cbc0f1ee1f0bbd2aa75bab3f4a96d85cd3d597c4d20b
+ReseedEntropy.5 = 4631d87a5e5e8628fdfa55cffcb58667ef4cf8e4b1f5eaf0d5fdb7e2bffcc805b74aa3c0f1ec95fd1ac0a0be1c1f8669
+ReseedAdditionalInput.5 = 6be58d5297f9c187ca97ab5b662a295fce4c279bd66f737c70b760dad0db4cd59c277aba7fded780ed878a871fb8650e
+AdditionalInputA.5 = 654369dcce049648425567279bf08079a9a55b172b609507799aee7d85997075292f8e988ed0ca596598820495346357
+AdditionalInputB.5 = 761d17aa9eecfdf873f07fc216ca0f785f334e4fdb874ffea87d6009ef47e233cdcf46d3baf6ec645693f2c9cc4b6d2f
+Output.5 = e25a8b5918ec0db4dbf7217abbd22694641a9696a0585acb117791ea04e0aedfaa78a24b086b2f7fcbcea2e4e7d8d1ab06a4a483008e19de51aa1ec007bf4957
+Entropy.6 = 239f0a583c5ea02cd5edb9571a81dd47bf50e614615464522c1e6a053361e782b548db78aa5b7064dde3c13fc40f6099
+ReseedEntropy.6 = a8b9f994e207451b8421ff5559f75a4a4fc227bc865b67faf1a05f2e87dd5e059b76d67a14f68451143f3b6e1dd7a4a4
+ReseedAdditionalInput.6 = ecc955996b08c3a27d1dd77c6ad2762a0033ac1d5986d590cc087054e6ad3bc68841f334d3d2051c406c5c7687a32bc1
+AdditionalInputA.6 = ad2055d4304236818520e1a9d086b341768bd9bedc35d3b816576efdbd13aa2d5f3c34d5bdad99344eedf0481493f528
+AdditionalInputB.6 = 2ad6950cc9335b6cc37e4fee05a3dc6ccf8c72a7e6fef9e9bc7e5a24ab824e7072ed8f0a7513c51c2ca38d562675e3fd
+Output.6 = 26c555adbe8f156f5c9eded8397aa3eeae2b43e303ff5f9226f4f59180cb4d562ba2ed4827fc2bd94df6f5c689280f4c7f3cd6f36e406eeddc386db6c474d9b9
+Entropy.7 = bae4b76ba2691f2b947489b463ad9d954e38dc48c94b8ad117fb0c10e1a9141b54bb49275e3be6c89c6cade6c44a179b
+ReseedEntropy.7 = 09b4280c60a3c1116fe92623b5ecd59b2bf148a298b0daad7c85440df94c20eda126bd52363006ccee2ea22ea3e3691a
+ReseedAdditionalInput.7 = a8fd5f95e64dd4811b97123d1708e9450a766cad88c39ee063cfce64bab2a17eeea6640abd701a345a588587047db9d1
+AdditionalInputA.7 = 9bd0c929014b8f036e2bde9935d6f8f93ce6c511400e72a5e20c21eee7eacd6b8f22bb1c12f5392b475503b03bd0bc30
+AdditionalInputB.7 = c56f4b4b85854d4ec3a10f3ff3e9008f5bcd6d81f8d79357e65f4c7ef1ece3dd7622cb4bf6761f18888cd79f1f8b7aff
+Output.7 = 29579a8fe754eeaafc6b620a2e50ceb18392d757f20bcc679ad0ad61441d5448eb15b3acfc972f99b5d0f856091c52174c5d6b2f3906253d9f1a6865aa06c8ae
+Entropy.8 = 99eb1b06dd877c3132f4f2a78dbd0cbd74f3653af0cd9e45cbd23c2f8b431a68d95b365977225c351b3bc1e93da8e726
+ReseedEntropy.8 = fa48fe933527d763cae6605d04cba02b5b4b0ce85122011a28789bee1f10507044a021ccd92460284fbf14486c3397c3
+ReseedAdditionalInput.8 = d96d043c93229dcf3a939ee2484ba9f9cdaa3c8488dfc1d371375320be951cc3336da48ea2f5b2c08f6664579160bc01
+AdditionalInputA.8 = 68dc3b3ceea6f4703f80030481aa81b9ebe8fa5d003734719a042d755c14554af6de547e6beb3d9e8a6e675ed15181a6
+AdditionalInputB.8 = 95783ace4b7ea450e042d65b7a4df3fa5058d5c9c2eb94fff88fb30cb1b9132bcd07abca6426aac48047e72baaeb2b77
+Output.8 = e47c11f7bc387be3fe4b70ec354870a1d735c45637baa13d2740fb4b265e485a6b5b2debad2e35fb5ce877b7c608a7af0e762a7dfe95ee74dbb3eb67b01fa125
+Entropy.9 = 3a319150f3a66831790654961a617eaab9e520aa43214e2fb7807993c9057e9f89a1a94b9540c849759889d853ae9915
+ReseedEntropy.9 = 926844488d834209ed8336f67027424bd38581c07403542e70049980f081ef055f95a20f5a9688a2fa00b213f41fed1e
+ReseedAdditionalInput.9 = 37a730e1d3e6c0ebba1cea9dddacd308d95cee6045cf4bbc8f822013942d22fbfc8fb02bfa90dcd0f659a00cac1f3367
+AdditionalInputA.9 = 11f33a6b9d0e37fefac04c43f5fe1e053dbbf3ddc657fbe1f4cf95f28c62b10f41888a530b083cbf3ca783c864ee76c7
+AdditionalInputB.9 = ef8370eed1e26d668f8e136ec1159b11bbbfd771bc5bb76a37beafaee87a077140d8a4e40cc6213e0ead81b51471e60c
+Output.9 = 455499d161a9e26c8bb1b70de54758d06a41647858a0a68f3d064de623d70c4ff7c92a5dde2938a9768345fec96b4339b3faff2928e200f889f838576fe9e795
+Entropy.10 = e1a78f0625158be30cfbc27ce1598f1ee8dffd8e9747e9fd0520a372b0e36106b78f221085f6b69d19148adcdd6bbcd0
+ReseedEntropy.10 = 0cffe9c0c062f24e8e67965895960cd6d09d35342df5199bf845ac06479545f63ad62ceae27ad73379cc15d100d6c887
+ReseedAdditionalInput.10 = 2b82e687ab86690a56e3ae92cf87aff518c27e7b8cc24e77b57ed40bc432259c0b5f0a7950b028f698ad7384be2e1229
+AdditionalInputA.10 = 464b2ba2823f1fef3ee8a6958ae1fd1589e55d60891e7be6c36c66d26c090bf3d4ec68f91485eb4c9b86894f1dfed962
+AdditionalInputB.10 = c9039d29517629427da78938835f63b370cd3502fa4f7251e9ca38d0af246285c4abd5e3ae18a3e77efe446475b75e0b
+Output.10 = ae710c09cb0f567751ff11e6520603bebc1ffb6c0a1f8515f2bbee1aa9e1cc7f7467256151e1d89a305e0fd582f2df0994710df1341eee987bfbeba19efcb0fc
+Entropy.11 = 6ee41ac596ed7b3373b541149910ea49a4d3a96cac508ecbfff7468e601d15dc524cd1d736c7fa67e6cd8bf673c4acc4
+ReseedEntropy.11 = f5106b8e7eae15729fe79dbcdfc7c9a70bd50193e5eb96234d91e5eff4d339083f1e6a29da9f8e497cf22b8bd66ce608
+ReseedAdditionalInput.11 = 22b8e2d1f65b7bf2eecec1e9286949a26e51ff12bb5a4086e0218f41427ef3609c479f2f20717d010b431adb53e1c603
+AdditionalInputA.11 = af62071a469fc914125bdf0131ed548dd183745deb5e78ba70f5475c3c63d24216a031b83d53eb2d62c947fab1d519dc
+AdditionalInputB.11 = 8c5db258adb34eebf8d21af1aa63081651b3b4f76c079b075cc56d785505d4c6bb2b75646030902c88085214e5af2e65
+Output.11 = 21ddfa8077fefa535453b7aafeb73ca1adf340913afad50512b81568863fac6333fb777a21180976a69c42c389709c0a98dbeea33b74dd22593bdec1cba8696a
+Entropy.12 = 2eb1b2c3dbb0a601b9701db0f3f634d3455c81528c5569653df92f77434d478561ce8860a1cca685a95c82154c05774a
+ReseedEntropy.12 = c3c6411cb7cac3cfaa3ac687d192fb7edfdffc615119e0b3d1076693e72faee5dbb248afcdd7d8e509920e6957fefc55
+ReseedAdditionalInput.12 = d83e03b9148d445eca62181692a36622f1d1972a5c988181d03a93f76554e9e7fedaeeb02683d00ac539189bcd0650b5
+AdditionalInputA.12 = 9e98f715326be4bfec64da9c7d6c584440976dca41c3f2aaa3c59ce3be9c3c958d167b41516fc4c2dbdd0ce7f70154da
+AdditionalInputB.12 = 24b6d487a69f1fd551f3eee4fcfff0d52fe963b918aad7a66c146f922b851ad4640bac3588b46a7e55c41bcc27f7f112
+Output.12 = aa5f42043d1e39c039b6ba8fae240efb2aad26c50dc766b000e64a083cf474051db2ed497f3db68f9ea6a2961a3ee17be58129de443c0878678a021de0d23e18
+Entropy.13 = 48a77352e7024eda47bf94ebff6cb61c787e1e4afa223c254f1fdc8b710b27b44c2e8dbd321d12a6f5459ed49566761b
+ReseedEntropy.13 = 4cec0ab21a20c8192c1297cf6488094e779323cd78e17f05fcf0db637293fb81c8f23525e67baefec952c34ea23a7a6f
+ReseedAdditionalInput.13 = f7ef5f553bd34d53159b8a438b9ae41947ab4f452f8ecfa61bc09c7d974b53936a14b500bb90e8e9d3d5cf7341a60da0
+AdditionalInputA.13 = 5ec1773485779c3d6229f89dc6c16099e7561ad6b9823659c1bfe39576a46fe3be9127cbc4e78782fb09db281b76bd1c
+AdditionalInputB.13 = 53991f7e6ee6e71b0450ae2e9ae7c2130c890a167bd8b35e1f5f8bcaf99bf1d6cb1b359bf6ebe93a32fbbab581139fb8
+Output.13 = 697b34f542778621d1621137571571610ac54c2e325267c1224388dba9952bcf0984f6228002b8e1fead000a69767b953c7622620355066f788a796f0aded662
+Entropy.14 = a28d23155b97250a9ba13c23f2e91cbd3994ee8997d305b1b57b2d911755c62584dbe238348d75fd9abe4a06ae78b59a
+ReseedEntropy.14 = 4b64fce21664dd54d0532ce92958d276d4cadfe534940a4cafcff711c3758d23ce1c141663083b6f2a477b9f25b70f22
+ReseedAdditionalInput.14 = aeea3d5569b13ec42c1f624673665ded1f7d5dce6e7157954f7c513e179a92d4e4bc72278ab8616206fb5b7fa1d35a8c
+AdditionalInputA.14 = aff406d3d514ec118c9a8f470db34922b8bb262f78c1ee6ecbc647eaa2c0e4d7fd33d81b3c9067ee4c57dd36d4023860
+AdditionalInputB.14 = 50d8e7887df0785c331a381b6f11057ed720abaece80b7f8358386fabf5da24a912b8f1563301fbcd7ad240c03a5e444
+Output.14 = be0045c0bee70daf5a57e5b449fde2e9320a0e0d429950ec3b8ec14ca2acdd7ca2a365bebf11f45f356c34f7e52a8c39ac2e141815134bab3b79ce3dc1d2a44f
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = a3687375129c9886ea48a2f49be328dd2bcf46689a59de69a929dcb01e6b79ac96f98dded9e13811c25c55597bbd3f8b
+PersonalisationString.0 = da7c742b408deb1b026ec5dfeb00dd075f48069c185e5d355b09eff88fccf289ef045226c2e2991e20b0976433994c0d
+ReseedEntropy.0 = 40ca114f31a545b929c4225d0d2199743a5df36a8361892d5cdf35218eed6354a65caf04d861f61475625b215ac6383c
+Output.0 = 47a4521dd45c7b72e39b7bb6be14bfb4029f33ea87bf11f1841e01d3372d7a0c6d1289e0ec60599c28c40f382f7dce33cf81575520bff5580087f3010880bdbc
+Entropy.1 = dce0fd6c4acff8f509f0deab6906ecd92216d26e24f80750613f19a0571683a6808165e334b9128f8b0caa365dd9254c
+PersonalisationString.1 = 550d79ef8033168cfeed3158c828b88a09e99b62ed10ac65b3353454774137bbbb3d05da17628238b7200b6b5765f9d8
+ReseedEntropy.1 = 738c00378b798a8ae8202febd23b0349fdb1b27d0dac458a017a56b394033818f9aa5067cff49af5e03e266c65fcfb5d
+Output.1 = 6f06b1f8736a25639033526a84b1215cfef49b1da048f403fa7b34a147c65469ac396f20dd6892980451daeba1b87c3d471f32f2d09b4f340c3e35fbfc1b9969
+Entropy.2 = 181c55914e457253d466a562211632eb164c832b6177f6141e46fa9f2c883159fe2331f9f3367f30cd2d8ba1e8935055
+PersonalisationString.2 = 154b2afe462af65b12dbe287265fa5a6c256c00d9b7e4c3e2208cb696a7361e9bfb67c8ad4e8a062f9d1d4bc4a083b47
+ReseedEntropy.2 = 03f7fbb8fa8e99d735dfd0641265db188962a6d7238cc87ac6250f1a53897d0741b1b017340cba4267c510a812b22a94
+Output.2 = 0e8d007497033901b3be460d6c545b820f51035ba33a4726deed2dcd2405e3106a8c79de929f79ee92a55e2e65c0dd63b82bcd19a0859921531e063a07dd0f8c
+Entropy.3 = 1fa741e73b3b75e9977eec90205c34dc57b8cfc170840792e0daf70f3a1189b17b689923c8487c26846595148775a8a9
+PersonalisationString.3 = d59732b5a15dcf62c865b52fabce9306b2c156888f8430f816d07a2c15f215e7e96089945c71a60d11260cf2999a9bf7
+ReseedEntropy.3 = e2aa12842d2d5dadcbbc1501172447e00862630414cdb22117dce2cd3deefc0da218ae267496664e3b7601b4d6e7ffa0
+Output.3 = 9d63f1584b41c0a3393b88f144f25e74496f38a62dc4c870b8a285fa08196c2d65f9d92efcdedb4a4151897d7998d498a062c4533dffa5701c78dd5746864f42
+Entropy.4 = 1cd1a07393d6fb0e28d120a579d49c6278ce5f08a952cba86c58ce712c94488ea80585b8049109caf79179c8ee307ba7
+PersonalisationString.4 = cf7dc609b10ca13dd9ff5eebf46c7b877730ba200126d466847a79e85e0985ce86ec4d102fe514d3256950d069b40a43
+ReseedEntropy.4 = a2a5fe3407510eb82dc9cbc3a4811f9c92832b6995b678411baede9deab68c5d7b1213c139f2e01439d76853d0496477
+Output.4 = 14382bdc4e430b2c896c2c597d2fe85f524e908ab23539158cfdef481a69409181f0594fe6c54db7a052b001c4cb03d6a707b59239e7d5f1c6e08aa625740c2d
+Entropy.5 = 14f5c77d7fc64b04d3c73268bf936e6c075b3269462dc6185884421331b7a840fbc7c3c31e269b2bfc8cbca53f854c98
+PersonalisationString.5 = e4b396ca9ff4e407900284084aef7aa479ead22aa672565d81010f1d4a70283676bdc20cba71f8f0ab8d1e024a0d2e66
+ReseedEntropy.5 = b632afd8481f67352d534e240cfa4f5e7405707df5ba17a41cfa17c574b7097558b08c361c6f0465c7351bc2cb96d7d3
+Output.5 = ddbf4c5dc322202718d0b48a16f18c14fceeb9d178e0fb038b0ae6b01d6b0d6dd06649e8189726f12b50f7ec53f250ec18078da67b56fd7ba8cdb3cad1a602ec
+Entropy.6 = 45329bc74685c7b29a1e9bb9e6c19eacf9a1ecd168be3b5a2e2ff437b5e6cdd56e89a4b2b8b6abb52713a48a51ccb302
+PersonalisationString.6 = d6b1955d30db953a4009c7664b96aef47cc30d33db74986b171eb199c39225e0ebd25c7abacc06ed6c27921c2f9d7e10
+ReseedEntropy.6 = 6e5c464cc465801887c57291d47475ac481c98d033a8963053f2f614e995d1435a4b2d5249cbf83f620d74370d48c581
+Output.6 = 96c6583b98f2d75c9b6c87aaa788ca6dd9da10b02732001b55ab1ce7323cb4d60c6059e1ed95c0561302d2ce4381bfae8c2b7c49183ab72b42f80b7ad1587b75
+Entropy.7 = 633ad6f4cf503c71746c19ba663d33c44b117f5fe182904059f19ea93a8695cf8d919da9e26f5885305294ea251f8118
+PersonalisationString.7 = 2cb14794de9ed71b4c72ab22190a18581c1ce5dc4f29690bd5825faf8f067b11a06590dcd7476fffaf89c97d86b42d96
+ReseedEntropy.7 = 55c49d46f10d0854a804bbf2cc69914195af227afc5ea2b235f49d7558f74d0269c4fa96e9e1623cc85813eea228eb43
+Output.7 = 471ff70df171535368f196bb266100dbe1bc3f2b1ce1e2d6055f40976762188abdcfacb52b8080bd241b88feff2e1c1674a1b7c44a9f6028c9fd6a412fc44318
+Entropy.8 = 751e977d7758c7502528bbce7ada64c1ba335a339d9485fa91c65d4e6697eefa46ebd3834d80db42bdf950f6e006a55e
+PersonalisationString.8 = 5b42eb479187fac0972e5828f27a5f73daec306e06aa649f5d5ba53bc1a6484c2ca35bed946fa1a43ed34065579e3fc0
+ReseedEntropy.8 = d55d4a2fc2964ba03e0a303abab5dd8f38102606f00192923aa314de9fa40f62a4a5d0d162e7174ec5ec6e4d2b24f0ff
+Output.8 = 3bb47edc5be1049228022c593bdd6c84c66796b5ceaaba1d9198a47a4c35cf18e26e33bf4642e9cc2d918a6b6f957d183a561afd595f38b78de054c477632691
+Entropy.9 = 0b51135d3da2432fcf11dda087f7d16fa5eba2eba0e1648d20d9e9454c20bfe7cf4520564539d6af4c508a3eff21a07d
+PersonalisationString.9 = 1f167def62fd06158b63e46f6270012ca98f5bee3f53465ec75460e6f1461c40a17e06f9a198a589b176c51beb129541
+ReseedEntropy.9 = edd8a470ef55fe2168ce5559a6b49b70f8c103afbca8abff760cf753dc54b9daddc0109d33f73b5cb41ac35ad17497fe
+Output.9 = 7f3730cd13399922476499cd42a4759ac212d28601a3497b22333ebcc678f6d805f66cd1b982bcbe9f4b3638487189045efe55ba19064c9f075dec9e55320098
+Entropy.10 = 27d1b659d83006bdb21f96e92b92802a56cb96d80319528b243d1aa5dbb26abf66ba9b6035e0d9f174623ad033df2ba1
+PersonalisationString.10 = e7535703c11048c4fd1931526b2dcc5f6f26aa97247ea8bb1831dcd7c3f5a4d65bddd50f4fa3593afd30586e863b9006
+ReseedEntropy.10 = 5ca1908ae5277c17f1b2ffc4016e7b1c81bfb23eb0fa9b1fbabac1f58de6969157c069451d88cd41183ae6bf9b092466
+Output.10 = 3d4e16cce16ab16e813afe2020bdfe9f48f251e6934f2db3d3d2d520390d78d2ea84e3de56e38f444fce89baa1c212ae15973ba1e9f5db1aec06ec4e4b56f644
+Entropy.11 = d57127112c44d1f4e94c0c785f5c66f9234a805910f8845c20865a79031b74edf0c8f110333c398fd32f0ee10a5a7a2a
+PersonalisationString.11 = d1ca7e7e0740391c4a951570ee0560e038bbc2f520753f058ed969e1bd0fd6d5a2a1b24fdee5e3739ea2eeb1240f3e65
+ReseedEntropy.11 = 2a319061611e70df56516572af290512b3dc1bee0a0faf62dfbae03f2624895e53d89fd0b880c97d82b4aec0883828a3
+Output.11 = 55ac408cea1fe3b1bad3e5127e42fcc8489c19166a86bab212bf067b8b05820999899f422f7b375b595bebbc786a94ec14e3e3149c9df167ecdc635db5bcfbbb
+Entropy.12 = 672aaf340238381ba8d31beb22bdc263e8018cfb9402aba769e440af29efe27fa79bcc91cccbae53106a64d65c07505b
+PersonalisationString.12 = 654fb58b7cb249610461a41cce27402142603ff38795ec6b1a98666dbf9538ebe1564013037451bd337e8142db56767b
+ReseedEntropy.12 = 3a4f731de829f0029fa99b2499122ab7b4b15999930ba370417c8753966e40273f3d02a2b16a3ba5f49ba2bfa0c1f600
+Output.12 = b66496d411c2b2993e6e47f15115e158c937279968c7d7d9efc0a6b12de66600d09308eebb4ca318a38e49f0912361f5f886f7ff21ee54ff112f8302cb1ad63f
+Entropy.13 = f3be4e377015301079d180ca280454e34f6064040e359bdf0983a09939429d5262e6e5d86664fe929445fe34abd9794d
+PersonalisationString.13 = 2aa1e491952232d335c6737f478871f5bf07f967b86f10a0103cfa2c31ef5f5ad2e4db4824cb0ac3c29ada3ab028cb96
+ReseedEntropy.13 = 9a6be29c4411d7de2e9321b0d8c1ee06d7998a1934ece5345ed3fb4969a68112c0051ede82a19afd76c419e469603679
+Output.13 = 3c58550151aa02fc5598eff921d2a0636345955bb03e6c8a39e7c9a95655de297c6199c0f9e6c5e2280e9e83e85306958d5d37d70bd80091f0c51f96ed74d420
+Entropy.14 = ec975b46294711a8ac5b1d19b60a6981bb0675c5e202fae93fb7ca8adfbc2907db923c786c403fc514f0dc46b002fdfd
+PersonalisationString.14 = cfbbe01cda290c89b2841f37952cfc1d9a4222fb425e9453de307ba9f82bc57382684484801ed68b6151fc7dbb7a17ba
+ReseedEntropy.14 = dc9c22b1006462af08615eca5998ea81a81411be226a241c38d480e7ae0ab5bb34721f0ab9226633d655675ffd953420
+Output.14 = e544668dbca5b35bb59ab04945649cead8d822a1d8ce125e3ae5db8b23e3bcc05bf6921ce95b85766b92c13c59ae83d908471e03e020fdeb59e5cea817a48802
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ed64cf25e9ca81e5572ebccbf892c8ac9d88c256b7ddd3f7f477579f80ea8fec7c452159b1a6ac9c59767504c0573b29
+PersonalisationString.0 = f19cf2f821440adfa1f7f634a26925dc63e29b7993f7860558afc4d7c61f0d83145cdb13102e513edddfcf48bef17464
+ReseedEntropy.0 = d91c7a31dc11edf5c778bb1bc92067b6df2b5b5e90c04df5172562bbd38937ad62715c287651ce8ad4bf4c80b14c8c1e
+ReseedAdditionalInput.0 = 02bac94171c112c3774769148f137e6b72fd4bf9a74464cd24a7dfc6f75cab82a15e3847afe86999d0f665577bba6c20
+AdditionalInputA.0 = ffb738e975f48c5a5a7d8a63c418abb0604efe3cecac611bdf292e2ab47a4d33099ebdcb0d6c89c5849c1ed9693c435e
+AdditionalInputB.0 = 459f3d979eda0f8f8c273768df1f92344abfba4eaedf00356f02461e449da18843a44b08a46413dd3a1eb1ab5bd146ec
+Output.0 = 2a6a38fb6575f55cddb774ef51ca9db72e729065d102e866877798651f1850cf3be808f6378f860fcde6fc631b955fa07b5b7f5dd1ad1d1f32837ffa07311383
+Entropy.1 = c4a815682b8ec783976c7aecfb71201e5c25ab4d2099ff7f0800a91efdbd884659258b1db9a10d518b0e11285efb9866
+PersonalisationString.1 = 6d3b2347a61b373504d8557acd1b86e8c49d3c1c2f9759264a73f964d19bbeb7d5490bd04864733f9fd6c140d0475d9a
+ReseedEntropy.1 = f76c5bfbedfe08a00a7274ed2a70ccd79df3a62a1c3bbd89ea4ef8505b95410eb677369d2633cf6c964305c3a3e8f62b
+ReseedAdditionalInput.1 = c819d5ec126f00df73ef40c4ca1d1de8b6e9388b1bef50835bbe880ae4a0f201f2febfdd4167bb47bf24b782e07bdc1b
+AdditionalInputA.1 = 89770a03e8ec7a8c39d4a185f5a457a91fdb149fefc9e7daf041fef3e232e8101741d86cabc0af59ab8c3e2cc3f71a9f
+AdditionalInputB.1 = 6e243b506b470cf3209ec2f44f505cc74ff7a0146d94f1b4b0e6419bb419c4c1634a82fcd622da522b5d27c161846683
+Output.1 = 4b6bef575a555218469c8f7934565ee8232cdb511e25e4cfe4bede0de0254ac8005c0615854d5aad5305e0cd06b61d276973907741b4b1e4b44ef975468b2dc9
+Entropy.2 = 3ecd19f79b77942ef82c120b5d6b3e7a84262298d18d35140b559236e8d465394339e7937b60bf96d75b150b997be706
+PersonalisationString.2 = a2501964f9b233384fa2839ee5950738f0a39d5eb92b9f978c22cf02371444b3118f0d6d2e369708942e63e0e40061cc
+ReseedEntropy.2 = ab5eac9506384ad8ae49b1112eeb9a2483768ee6b3f0c2231e4565545baa94d5d02bc28a3eb335eea33cc100e2e4a0d6
+ReseedAdditionalInput.2 = 425eb96af35fb2fe786993f0b4db3395fe08fd002d8e294bd6d24250917c92fe455686b5a29c44910a85e3a36cd7b07c
+AdditionalInputA.2 = 18da79904acf7c74b2bb48e2f1730038bac5df654815fac888826cffc8581e963457e26e906c86b6cb862133240f49e4
+AdditionalInputB.2 = 3eb1ab2af18cadaeab7b8e5ca454adc55e67eed68eb860adec3b9abcafdabb3befe0229a611698873add422e596c8400
+Output.2 = e54b610804a2f9412fa154b885faba9bddc1f4e37e714a501992b0b89328926bc50217a7f47b140d41dffad74e343e917291ba5b89dcf00070a159fe222a688b
+Entropy.3 = ac59f26284b8e802e1afa6bb7a2f979159d2c3ab903b62ec9014c12adb3d1f1262a435fc16bfd3014812eef8a451c4e3
+PersonalisationString.3 = 5d498123556a0526c6aafdc33616cda01eda9d8fd42da7da4be9877f0b404310de76dc48b544438caecf25632978261a
+ReseedEntropy.3 = d565bff03c617497acb58fbe012497cdbf6ec277b22e1c21e65aea0f684962747075bd2c4a1b184ce423f1a5ee9e762f
+ReseedAdditionalInput.3 = b95710000d08552fff162fdff905c3682490be388adaedabade8824b38bb4729127b26f49686c74c3e83d2f37ee670bf
+AdditionalInputA.3 = d5c301976a5ce6349fa29b30d5ed761d9fb2e5e9f7624b613a198b40cc107ecfb3d7721131ea19b401751d85fb11be90
+AdditionalInputB.3 = 86a00e4ca6e2c1932df0248c31ccb2ab8d5fdd991a2db7cd27e824b2107ff00bf46e5df93d41d578e61236aa4f7b0274
+Output.3 = db29ecefa87169fd87b533ddea1ec00f50d288e7fff4729349a812dd20b192969d1c3f3b8711fdd0d26812dfbca6a919089be283bbfc9466f00e1d1a6394fb72
+Entropy.4 = beef8f0ed9d77161dcb7b2da5f033e546e7c1d3d4c4ed5a423e9a6e70697edc842235a08f9f68f27907c9736f4efc4c6
+PersonalisationString.4 = 2d5edcd634501c4b1d1236cf9f864193cf2ce7a7457e6b9aebfbc8b6685b79bc81b94304640ec0afa701f6db06854a62
+ReseedEntropy.4 = e53e04423771fedf9ece3fdf04ee8b66766c979f7ea3aae258eb9472e1aa99b817847fc022f6bb0ca28c0d6e6c6381a5
+ReseedAdditionalInput.4 = 387fedd127600d3b9a1e40d47b61aa0725b8829b8177ee6651086d1501878d59793bee23ae217203c2e2565d83b8d625
+AdditionalInputA.4 = 94c343014fff90b668d7bfd0d72dfde1adffef715957e0aeabfaa9f37cb85f5d0108dff094a064bc6fac052564f2615d
+AdditionalInputB.4 = 4663ff1f64bbc351b1646fcf1caeeff5a2d5796ce7bdbc393c1df62ca0445fa30dd00f7385569b9e9bf6490260b23432
+Output.4 = 06d60487a5317b289e68a171a0097ed4a30d6991c5e8f5af2e882c1109ea3e362a6c115d1ffea069a09f501bd6f03c66e8afd52a1147fecb216336e2382e1805
+Entropy.5 = a8157b1dd29f1ed95a70922accbb14e683a10d5d22ca2311948d4ef091c37338d6965a08f942e33730e636dc04ade118
+PersonalisationString.5 = 15069fbb16c0d9cac671c9ef238c5e8966f9f262758d9a7cb0c196d937c3c5a79067b9e64e74d306321ad58dda6d2ba8
+ReseedEntropy.5 = cbd6f2599416702c1815fa8270b54905998330e8b2dba6f9d234b65176dbfc8579fb899aeb4abb7a9d19d3268d7ca1c8
+ReseedAdditionalInput.5 = 5c960852e05b9dee8ab4b49481def6036734b39cb9bc99366c5c55a5d2ea1279eadf73d3105784736a30d8d05dd59ae5
+AdditionalInputA.5 = 7569e6db52e1478e3cbed54171a416ef69b6e6dc9b88fb3f52c95e0b682d44bf5da27f63929d4ec467bb32aa1c1dbf4c
+AdditionalInputB.5 = b3b9ae19c36ece8623fa47aa820f7c94bf20664fea1e544c45cb55695b21b39c62e851f7a3e9174e662d8e979a16f119
+Output.5 = 0e4594b734e7fa15ff6c08032de7ce3ddc47ef3a020b76b3c95fda71499def818af8d625bb81eb89257d28dc68dc4c9550e35c090a49cff16a65948ea2057497
+Entropy.6 = 2e28e458a1d335f74a1fb2e22ea5be7783f78c721e7e687bba6ab9a5c93e4114b425ba74978c2e68b498fb53a760d4e0
+PersonalisationString.6 = 89cd5a82953f8839b61350a8684e928c7df74493562b5c7c4b2f2f3eef74ce5db88c2bc3f0e5ed03fa1bea84014c3f9a
+ReseedEntropy.6 = c16a676937240e0523c5664fe37da9243b6e915042007c5ac5af4c334519a5195dd6419d0e1fcc86c9b96a272211accd
+ReseedAdditionalInput.6 = c392df2a338e1681a04dd162860ddb3b2d55566ba4e514a371fc31a356b9b5d44f71a3949abbfbc4b3337939e2a91dd6
+AdditionalInputA.6 = 0342c122b88473b951a27ba4544bc30a1044cfa522aff34ea127c01950a076edd97a4a2e0f1933a743ae7b9a17cc7ebd
+AdditionalInputB.6 = 21398020e37205c96cc5956eb62f284b15ea5e73c2c65df70fddeecca79b857b298aa21f67fb2042a0b18ab6ca9369b6
+Output.6 = 6cd82dacda43cc6638bf6b17a56351c00c580f5ab0f5b652c90f3e77a63753d783751a4c29afe8286e48f3e573d5fa50b5125b4c71892e7f09781e8b9c0f45f7
+Entropy.7 = cb05e1ee85ac6e9f6e2089d135c7d43a6bb1581b7373366be86019fcbf9278b784e0ed786661430730e6b02041035ee0
+PersonalisationString.7 = 19a4f5ce1e9a9f8a5a1618b235490ff22fc7b3a8116d144359676a4386063b1bd02309130b8d6c8a4ba3b412f36a488b
+ReseedEntropy.7 = ecc29402fbfb7e8194b1f4452973cf27488619d3ecc9ad6c25ece75bd597e0e866cb53324ba5f9b78fafe5698c560ae9
+ReseedAdditionalInput.7 = f754c60d68ce5fcdc7df8cde147af6d3191ba47f6a02926deea2e5fc5588b0c28d580652438e18c7b8d57837e805f439
+AdditionalInputA.7 = c709cad8785e54f3dea0ddd44a46384a1e594abf9d9db7eba013153cb9c77737011fd139197cf967f515445cc082e5e8
+AdditionalInputB.7 = 2d95868285ebd3124e8d40d5ba0f53d5311ade0f707f225fc47a0a5f0e7948878eb8ab985dac3d3a378b2cf9155239c6
+Output.7 = 34516422c33315f6a52c131965e305e697488f0104ddb71936c27dc6012a6c4181338979c238d99820f4fbbc0bb12f54ed391a31d74a4f1c899caeb5fa25de3e
+Entropy.8 = 855ab54214dc0a64f6699f4f3fc1bf1ba64cbce42d322b86b427d8864e8f86ef85435578fa2032ce7c6b2da4044c789f
+PersonalisationString.8 = 7b7125859daae96449a3997b4997113017775e6d48767e2c89baf98e77d18917343f722b410c62fb694c2e5d24a25909
+ReseedEntropy.8 = dacfd66033c75f3d875a23be63198a6724fb1430b2c3b88d7be8a983a318d064b80c6398f1ec351685945557ccad8471
+ReseedAdditionalInput.8 = 1a1ca1dd4fa30f5850d7bc7da7d84a8e160eba1bb8d7c71fdc0bf0e04d99953f30bc51c0f4720aad3d359638c13551ac
+AdditionalInputA.8 = 934b52e86c938f09c00562ac219347cea8b4892776bf1b460b3d07e4af2c13c6458be10807b5a6cba2ce0067d3949948
+AdditionalInputB.8 = 2d991038c3c86a633d42c17db0ad47ac453719fec3e319888b777eb03d433dd306e3870a32972ef92e0e05b7efe6e554
+Output.8 = f622de890ea30789574ef1bdbe47b011e8ca5380c7c86c8fe82ac0831a003b20af8f39339697600ac475ff97f40736339ae34da7fa42180d444afe8ffd486296
+Entropy.9 = 554a4dbd10bd99ccaf1e950eacc038ef518262c9d3c30eaf421bee22e78356f6c345822adb5889acd960dbc622e1307b
+PersonalisationString.9 = eb10ac136ed6bc9101818bbc1e27f6f4453e9088cf5aa4a89db933ea00c8ce2155fc060938da0aa068ddfb4e44b9ae8e
+ReseedEntropy.9 = 5dcad80c27492f34f68743bb07691b352f537f022a1b63d96a91da391ddc530809d874ae118876985ad2dca917ad8b6d
+ReseedAdditionalInput.9 = 63242c7ef2235812056ed15cbf68be9173dbe11ac733131ec7e392da9d275be2591c95f3d8f671ab21507474a59eca18
+AdditionalInputA.9 = 2586a1af832376b526679cce9d0dc575108d64cbf540167ea321d14ec672e4e9d981f9f3b37a52b0bd42b66669cce140
+AdditionalInputB.9 = 6bc0888746c12f945812d5fa382b252c4e5c894a8f65add71e9c9d0ffd5b22f537c440870f0a0b70faa51af771db849e
+Output.9 = ce627ee4c9f2096166af58ec0329218469120f7f303f7d12b5d9b0eef35c664865fe85170fbbf51060aad0e6f7f64fba86fd4c71ee57bb07b9613a858611c8e3
+Entropy.10 = d199bbd51ceba0323ac491ff145208eff3fb45f17bd499d00c79b5cd429286ad9e33d10059223489acbc2796880407ee
+PersonalisationString.10 = 670d1083e6e0a83b8ac6f258a6004aed9b9117b6f9902b4fa8a14fc5580f3e9d40413c72c8ce8d7c53628495ce2924f4
+ReseedEntropy.10 = d6a33a4fba1e8839bc5fca6c7ba6317177c5c9a2986b03978c9a43a82f6b1f6cee443e762728399376dd866d8a99ba60
+ReseedAdditionalInput.10 = 6fada66ccea9e95277ce1de35fcb5d1b42ea35a00eb588abd4062c2316566d0ef6ae9fe3b4e49dd1d86f07c9695505fc
+AdditionalInputA.10 = 2d78cb131661c55aeed68c225e97107ac666c84ccaa7770c498ea9edaf38e5c3e241a54fa93105effcf864dd0d74e313
+AdditionalInputB.10 = 06b16d026aca610af5e084f7589f8c2966f8ceceed4d2d560ed6aa5294503587c899b0e2ef0f222df0e7abbe89371282
+Output.10 = d4f0441b303a6327c7fb75113ee6746cfff5d2fedf63e8c8de8e2af0f6a5948a12a94ca92e08be8eb9bf5da8fd4b45efadc9327f8e3a458b0a3b74dade4a3359
+Entropy.11 = ee953ecefab555913aefbff24a588bcc380660759e1891f68e602ef7b090bd33026c2e346f67d34151b6e69a40d6d8d5
+PersonalisationString.11 = e077d42dfe697620f21a9f8ad5eae6c87589d9c1c37d30dddef2ab81cfbae9797500795ce5a00d79b3518feecb1ed8eb
+ReseedEntropy.11 = 4ee2c46cd99e8b5d8fab2f0d27200e2992f15acbe2f13a8f405877edf4ff7eb2373ccaf402fa8adf97e806f55fde210c
+ReseedAdditionalInput.11 = 944a1ee031967bd9d352606f970a3e522f03b9385d7351887e7482c262ee884bdab3c7cfd0259075931033c4bc199f80
+AdditionalInputA.11 = c8fd4759c1277051b6841ae71efcadc4f0978c42266d1fd4872b0051a48845b8dfc5d2aaba692e08fe5f9181f0cddd85
+AdditionalInputB.11 = 2de6be848de7a03befd8fab5228f2354b58762fd42438cdb7ce550ef0637ee30d7aa13ed01a790acd42feb84adc8fa09
+Output.11 = a8ed5bd83c15ecdb7df0f6ed186fb899c98a154fee0475916fe11089d48f21740f7ceaa83fc53f91c6b03b167b697cf09053509f100f6998c950ecc634f266ee
+Entropy.12 = 0a34b82b54645f46e74e4161498e75f5fe35531738b9ee002eecb3fd83c217b1e0f958897a3e8800d8c5882189cf2f95
+PersonalisationString.12 = 9a251b28cdfd57fa1f58a00ed423d521d6e0a4036e5a549abd81e53f1793cfa3162ceccf010049a5c9dd5550ff3fdd80
+ReseedEntropy.12 = 9e4b5d5ec7032c09de00c7faf6515b05e57646092a3df2083ed06b61f9632aa70285a43ab0b569fa429684dfd29bc405
+ReseedAdditionalInput.12 = fd44060a04df78e555b9456fbc840a5f4a29d0edb3596b793c39f1a7d7ecd7b755f698672eeeef14f42825540aa4558c
+AdditionalInputA.12 = dd065094e40c6cece19ba12aee2d37c615a789edbecac70255d2606aba6fffeeae98272285cbb375e7bb4d0b8c8b8cff
+AdditionalInputB.12 = b45166e7f755571c72d406e73a4ae6b3d37541177410abf2faef93d30b4c679cc9b346f1006b24cfc467e378f176296d
+Output.12 = d7ddecf1cf61841e65e650843eb157e2cbfc099fae94365ab950794f911a8f8b227cf73489fd7831bf410fab026d90ed9d031206a759b12c49a958402363ed7d
+Entropy.13 = b5809957b179e55b2bfe55f48d24f1fe8156a36df7a9ed5feca01c7aea019be774820933b7ec5e56913d96eb672fc065
+PersonalisationString.13 = a15d7ee83b1157b9a5198d201efc466082072430c484375aefc857ec235f988cfb2873aa6d4331f810a0c388358bb52f
+ReseedEntropy.13 = d989c2e2c35a89ca3142844d8a9bc09df2b1bc525dec29e4538afa6a7cae5aff97f96d970311226069ed8768679d2d1f
+ReseedAdditionalInput.13 = 577f1f4818bd6e4fe0afcd8348b9f374c98eecf4ba4af55c3d17ede2a64bbfee6703ffe68bdfd23a78c0cd79a63eccca
+AdditionalInputA.13 = dd6b7e68e80c0bf351e50e4efc66151e0843df821d11f5c2aecdade8289d7a5175d487a8dd24813c6bf97cf73aa14f33
+AdditionalInputB.13 = 3a29c7bcd43879034ff04a9b1927d38dcc176fdbb58e9cc23e00a14cf56fb26c32a338344ea97aaf410107801393f077
+Output.13 = fe26309dcc58cdb641cda53fe4433c25067919e55525a4a26c742830dae22c1be3e7e96f6fa502a6cabf6c79f3438db80d580c26e675f939a95183272cc816c9
+Entropy.14 = a19f8cfa223ad1b25d109d901a1061e8fb0237598690654c83f1271ca7db6a0c8a0e093b7e80314fa68014397c12edea
+PersonalisationString.14 = ef6b17ca95a74a72f1035006c0b99406f6e2e7dcc90892d0f31ed0aba7fa3694459cd3de632fef04afdc31fa326e424a
+ReseedEntropy.14 = 1296227fec4c2bac914416dd33e30dcf3e964d64d2ea6c9dd397e83c1c2dd173bceac904df233098ff7b5319e89b748b
+ReseedAdditionalInput.14 = a4fa86d5d2dd1368a93bdf19e4071ecf2d4fc3cbed04f544fdb96183ea5a55b9c293636fe098e2710d952a511a36a66d
+AdditionalInputA.14 = bd203cdd94307bab1a53734a3a451f0b038614892186b26877b2c1c8492b03986e2ec4aeeb09d2e906e78c1c234fa675
+AdditionalInputB.14 = 631cf0317b713d07ce74f7b05ff4e7a158c769993d357325f8e9d16b25076bc9b0febbbd66bf23fbc9c27286dc1663e7
+Output.14 = 401176185d33ef08d0b65a5b853d57583250dd2efaf44ca0f987b45f89eafeb52d2f4346bf9b9d0b7dd4f7126e7d89dd32f53b737cef79ab5dd0794fb8a4c89d
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = f52b9e211605277c7720c9a6e252846e54d9f1ce442ed891c58dba70c58a8a3b59bbac22fa78dc2683be964a7b3349f3
+ReseedEntropy.0 = a16ae58c900fd2c89445d6b1775b4ed879b918a577622687e5e76685f05d04265058286a1a42794abe44ca798e32eda1
+Output.0 = 5d2544951b74e09b8601c19c99301784938c595b4db3b2df474b10caad9e4930e1f0107662408ec374ddee05d84521e3e9ea7d2114f03f9a9a92ada6253cc3e5
+Entropy.1 = cf1de61cffd8ed4e6ebe7246ef185557039792ebcb75081ba3f47fe4ee442b733274f42024d24d2e19940d88abcffe40
+ReseedEntropy.1 = a54d64421dab046606e167c862e557a4d4a8d5b4e86f2b269f8336af20d33d5ac531229279049e404c74956b753747b0
+Output.1 = 692165d99365ee683b7148f7050a0abf2c3693b77725d2babea71fb7165bf7498e03ea8200e5c50fbc6bbcdc77499f5421385a09bbc6923827a328ee491431e6
+Entropy.2 = bdf7429260ef6fc8a3817368fb72ca1bcc0574bd5361d6f30431187bec83c52c667f12fee192c2fd911b6f9deee38f30
+ReseedEntropy.2 = b6698f9646312ccab30344f8b5e835aa47abd83bf1c40c3ec48834eba68e50baf52e4177a215dc90f9e8761562befbac
+Output.2 = 7db86c35f0a694aaca6c097b1816424d1833eec200d18a1ef6cfc49ab5ff444e3bb6064ff1cb6b1d63ddab2a2b8c18a11c4ccc3c419e106a03ff57c907f7a769
+Entropy.3 = f1c71c385ef4c9b155de46a8852ad896223372ef8db06c1a5ac4c87a561331e9232996b548a7e797e34dfc0a0639834a
+ReseedEntropy.3 = 4c275fc8ce30104b6b4e4c16e21199d3cbbbf7393c054c89cb9c3b85e5af5ab25a26502309202e8d78c1d30740973d0a
+Output.3 = c7a92dfd519488b5f4aacc42d704146c7219f33ff3b930d4fed22827ef7df287e71e0c72cadd8fae20ff0e058308f488fc451c3bec0d85488d2b81f2ecd32e2f
+Entropy.4 = 29a100a29a002c98f3f5e8170d731cc3fd2d8fdb4a3c6879057f88f96ff7f66f085bb2d30957aa0db78a4ed247a939c9
+ReseedEntropy.4 = 5e98af56d5066c99f185015eb8e36cc435690e965fea9d2eca10bff147c18a2c06755d7e0ceb9c2203d6d48ee53ec0c4
+Output.4 = 9245cb558f4dd7dd7cb448fc1310cf58cbd18ea6d9c58953e3a82221cb49a9a5afd02dfcc86fc42584fb9cc1e23c2483bbc61a4b146b1c7193705bfa50fd67a0
+Entropy.5 = a8070ce6e769ff82e90b9ae0ae91420ef1c4618937fe006d179981ffce04afeb7f98820912512ae48d7e3cd2be80da46
+ReseedEntropy.5 = 3b14197c3eaf4f3c7fd1d75caccffca207083dab30cf31e014056174083ae2bf3ca83195fde7d2ed47a4bc77e90b4204
+Output.5 = bdc7462f1bcd82e405022a5ee58345effd90e49a8f15bc1cb1f7f567ab26dc0577cea1a9c7e463a81acdbf62906b2565e8bcb16e195030aef3d2cd60fa987a60
+Entropy.6 = 4c0d4989e284ffe38f1a0458186e007876daf40c2ee755ecccb09cb0db7f497f9b3a80ba78426b049c0cf7766e1bd129
+ReseedEntropy.6 = f4cb5700145e3370011f5d1b0c104ec36f1240ab5871226ce4de0e3862d9432c749e6f04b5708cdf24c0caf4919e1520
+Output.6 = a936e1179ba75b2f3fab6903ec1161c87b6e1244852fb061324299645105bf5e38b67c5941200ea5e6ef2962ecccfe0516e20314f83ee5815a925d7026965e00
+Entropy.7 = 621663b9aa2f9f7ff61e8db0d99007ea9819b50ad4876439d66fdfc54bf174fa740fd6e1d2292b1195b37d584a7b4606
+ReseedEntropy.7 = f2473fd74186f13d6d599bf232680f4dae2e8ce69dafd2dd2a6b2b2b13dd0b2f6dc8cd436136215efb27bdd530f92810
+Output.7 = 9bbe30868c8d86d008c4f1bf18052c73a5c36c062c0557f6ee4176bcf308b77411421cef0c4c24a740ca31a4921a86944da2b54d9d29c2d3b53ad17bfa9c808c
+Entropy.8 = 3e9c7aa2bb18213933c7c6f22323bc29bb94aed24fa2faa7caa572c86c109f2247de3173479893fea325dc12c8363244
+ReseedEntropy.8 = 4356acee8a2f6d5bae662d5ed8957bae47de31a9061cd95e8e567b74e58680622986142fd299bf15a5076a07365bfe00
+Output.8 = 95a85a176afad06e245c50e596641e15fd5d9dfa02428bf8ddb2a449106ee0f928155343a6ea69dcede14a711c0c74b0ab232db7f4e67114514a2fbe34a1ce38
+Entropy.9 = fa3ccdae461578a289eddb413cc87a89dc67648cd52445563a7b3b47a87c89337503271511c75035d939bc50098ed1cf
+ReseedEntropy.9 = 357a52867450cadedefcc93b2e730034a643b9fdd099b9849e815a7437dbe33e19b6a2826fa7ffb5d7b9e51222484e44
+Output.9 = d097062ee806dce8b24cdb36a17e7c387d4f781339ce87cbb89164af15eed22089f83ae0a371d3662eab2bddca6ba0595db163326d971a363dffef053b357fcf
+Entropy.10 = d54e0e096bffa6121eeca0f81532eaa0d3d1d98361883ccd516ab0dccf7b0bfaa1b43839a1484d15d2706296e2ad8036
+ReseedEntropy.10 = 43276e93b3fc7cfb4962d7b6465096affd5c1fe1228fbeccb32e93c2704624ab7d4d88f80f04b81d2e4482df6d4f94be
+Output.10 = 54d28fe068be42e880fe2f0d60a52f9f9e6ab1d22f1161ea55892732e19252e48aec600a95af17ceed15aaf1c993726e1ab02d8215184ce8de00c138a79f672c
+Entropy.11 = 055eda658019be5847baaad87fe290c37c050be4dbef1b07083449c9c84dfd6df4b667ea92883be5e71637a72418c5b9
+ReseedEntropy.11 = c8da537fdc88c0202c6d58d3f7fc0f005ef5a5b351758265a529c55067cf0dd3d3308e7a5c43b683eebff01fb91347a7
+Output.11 = d918e205318696621a8671a8f42236a5230830bb61feb7146d22d8b89d29715a5ac1774537aa9a50e5709914d13342d768fe86a9bcef353c30ac88aa16ae1969
+Entropy.12 = 09a1d28857224e96d7b22cab8f185438c0e8764788582a79ede70d78b2287a9aea829e25406172a908dc5a15fb8a8e20
+ReseedEntropy.12 = 26859027ff5b5097f41e66b52f3689dd829f139bf5ed79a5c4052795d1b8676d0bb7019a551dd59a65ac0298e71c1c1f
+Output.12 = e4da2f0af600c78665268882ea07ed6322d7369d04148a7cd7847952ed7e6a894e3f1f4c2d4d768f5a7fd40332dabdd88afb2384573afbb6d79e0b3c3e8d4f9a
+Entropy.13 = a4446788f243691cda9ad6920e4430f9469e58e837b801cebe0f8d5c518fac535051f3ebd3579e1fcb908dc989a790e2
+ReseedEntropy.13 = c5bbc33a3abbe355f38dc8f030540bd7e423bc42c526ea766d9f10d1613b0028b55b99efa574d509fde92a1ec3678683
+Output.13 = a131b551c8f31d4b4a9e33b0e54f7c6f142d126da738d79d31176cf5ae7c040c235f2ca0fd7a69077c096ac300f7445985f2ed39cd22e2cf8d146665f6b81e9e
+Entropy.14 = 91fa80b727040295b850119e9fb7e4cce4551ae234f29616af15572557d1555de0424ac3928e39ca0ee3978d956f3258
+ReseedEntropy.14 = 9937f776ddae1dd4a6ed76cc1795d450e14d1e462c30a9e1a85334b3ca148451b94e00055b3ed227f0a2fc247db4db6d
+Output.14 = e659a7de7a1b1b15a56170a1d6334dec91b6fffc47fb7ae1f2b3af03cbc25f7bec0cb6afadb76af9d36216825ee0e13aa3915bc515325c27270858654175a81d
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 20a8e7e47108cd4f283e5b169855bda83899516e51825bb52248ba8c405da44964502c9fc74da0e2ad4ca1f493134243
+ReseedEntropy.0 = 98ba67c7e057a5a328bc9b223796b36947b1fca1ab6b20c1dd25142e949df27e8122c8a6792d8a1156a60b1170a3b5c4
+ReseedAdditionalInput.0 = 648fa229f5ea25ee6c7453ed577c70f755a2cb90f852b72b282d30bedebaf74af461a2a8a3456e653e7de9ef3740bc44
+AdditionalInputA.0 = daf5b64ba409b524c211a300465c631bd900453221023a41927b3d144da0131d89f74c0f18b029994ce84ec9b3684293
+AdditionalInputB.0 = 6138156ccc58e759d762fb5db2c0926ade760ff531582f1bd8ef430f7f7ab623f82082ad58c2d629340945546bf94e2d
+Output.0 = db51c68e5dc6dc500dafa4d07836749df4fc54d0c8e78a3a01ad3162c2438d8aa1698c4ab6b448c3ebd37d23fae3c9ba6aad0912cd15475e9478d4793617a3ce
+Entropy.1 = a781015e066eaee18f30135e518b87cebbb79c5f0afaa4ab21bb5ab808f09ffd8ccd2ad02606f8cdab95bf897e2bbb1b
+ReseedEntropy.1 = 287e14ff5446a2eefd023f208bc8f583c80ddf84fa88e0a55c5a41414ffd1a7297d41017b3a37ef1290aed629e74376e
+ReseedAdditionalInput.1 = a7a3d011fb2d7494e023d5de0c32642e0ebb765e0ce5e79dab2dcb7637480ba6110d7a07a3ad7c130139048f80a1c16b
+AdditionalInputA.1 = 1786eb125d51cfff9164449ba2bacf9a216f4c45a685c07502bf074ce4a61a6ac640e2c1836f2e204598d51428839269
+AdditionalInputB.1 = d2fee3f2e3a00ee4bc3dbcd19c313cf74d5d34ab6219407efa16db64f726cdaa68692f8edd2abc871b08a33d2a9c922d
+Output.1 = 94b2f16610cb7e300bd1bea6b4c3a8d671f2b87ef419d758dfd0217a3d3e462b5e3f5ec054d0934d701748d70fc891c487f715c881416a87240371e9532848fe
+Entropy.2 = e744b498e9a6f2f1844fd234e024d4fce34cac87bc7137b207cd29c910c77fb949e2a78a397fb03e665544091385cdc5
+ReseedEntropy.2 = 807df385e0b02526303ae24426cf4ca77df319c64a145cdbc86540422cca77edc5727190719b5b22743c44524357e1a5
+ReseedAdditionalInput.2 = b0cfa699d908b03f80b5352f5f926013bb54fa95724239f32b9facf94e80d0c636124ce042d7a2af62f55ca7a320fc83
+AdditionalInputA.2 = a45ef12dc13ed4f86ebb70811346173ca4709d6d229bbb815c6d5538366701aee390e1e72dcc7b064f524a2537e1b420
+AdditionalInputB.2 = f80f9eedc0c0636477985006b3baee45a0f08c365b1cacfc9d6498417c3d51bfdddfa819b7a896f569b113ac9bfff844
+Output.2 = 12f570a2d2a341e5b34bfc98d1c72361b8454fe55727a6a36d7716c8cbab2ca785d310065fcf882de21a7bb5749ee8afd367aabff898a31621e06ec5135f04e8
+Entropy.3 = 3c2d811b1e8d2f1351d35a4dff670fccb227fa44caccc0d0b71c1654ae09601927f271ab0c9683ad5faf4a3c3b80beb3
+ReseedEntropy.3 = bfd0a13b0e2bb9040bafff295d0b08c451715ef0f9e30db50c38a135c56ad9f58724bfaf268006f557969f1433b63426
+ReseedAdditionalInput.3 = 9bca5a77a81bf97d699fbee6cb2222c47bbefcd81b6e6c693b72ace0f4668e5ef8d3afa825b21419f501a6f7e39c3fc1
+AdditionalInputA.3 = 4b9a7eb941dfbef05df206354386a3c3b136a9de21ea307a96d83bdfd1c2cca8bdfd608d3765880f0eb05d6f88136821
+AdditionalInputB.3 = c211fa5ecadcac40fee7533aba6ef65f93a2276ec1023951c674dfeacad39ac0d3736fb6d916e9d46e6caa7857538f02
+Output.3 = 673fded4f9428dd5fcc16e8dd14c69cfbcc1a6ab5a4cd47679ba12d96e4a069d292268c5ad6c431c7e911998b419dd0e9997755940e6aae0768a86b7fbf557da
+Entropy.4 = 2b3fce2c05533fa1349a7544a080d1eff84d78008c69e41462c659ec3c139313dc3ef23178c57646ce0e4cf6c3465e22
+ReseedEntropy.4 = 736c35c46e6c8acfe301ec58070c548c5530fd8494f9c586f451a132c70a9115fa2842f164e5c10a0ae528ee209a4f32
+ReseedAdditionalInput.4 = 03c028dfc095eb49b4ae76576ee7fc56b76a1baf14cf30a83d65d4c97140008a06f03c1ca33c4b93d24c366c922cd9bd
+AdditionalInputA.4 = bf7d34c4cc7bed84559ede042ab39911022a5988350c55c382cc8d78dca657fc163aba716b4feefd2dd3a1eb883bd0ed
+AdditionalInputB.4 = d3b7aea7fe27a1687662792f8a2a62487500b273fbdfae74214478891d3e061870615d9cc03f0073c72748b448bb7f82
+Output.4 = d95e14ec1870b8f6e9eb9ef6ccc0d6be943fed07c4cb960919e82cbadb92b43f114811765be1aad748f7361515a965dc8e4ac233fa02465361212403c80d3f67
+Entropy.5 = 81b0b1ecfd3c1920022c8a73b77465a798bc4c29b448d88353054434abbd21c285c4269e8621c7fcae1849e3d34f93e2
+ReseedEntropy.5 = fb807fd0622a626f2c8f36496715a890944d501c4b4022b48736347a3018b0aa0f6157ee6018da87139555a5cccbe679
+ReseedAdditionalInput.5 = 271f482a812e679a2cc875450822b9caf4d6db61f3d20263e19047656348c7b0539ee34287911a0bf6a7a27e637adbbb
+AdditionalInputA.5 = cda474067d78a394319705a6174823a29b1bcccb93e4f1c03277001f4c52fe7c65e46da14b32a5183b07570db8c91d4a
+AdditionalInputB.5 = cdb048f3607f31ff5aab419d69f8cd2569886282b259fbd49a7cdd8e7d861fc6624d3f55b4aeafbb8542ebce1cd87618
+Output.5 = 4c0e553ada4e6fe6f1d3dd84a991856b551fe72098e3a008a753716afe0628861cd83ce2e0ea645b24b8408360f6d9e11003ee203e01fb26aa4afe21ccfd0391
+Entropy.6 = b52dcfa7f85a0383266590b58fc2d19525aecd9d226fcad4cf9e15c3751198c4feb93559db7dd8ac67a0c6b8d37170c8
+ReseedEntropy.6 = 40d6413ddb8624d98373341a46391351d848c9d8e80668d023e73544ccd3f0bd341145a5d1c1a0c7d409b83d5aa396b9
+ReseedAdditionalInput.6 = 04e340bab1e1e18e96b5ef84f9cf3e40b58737d9a9d0f8a448cda6affaf46fcb4c25100e5de0f6d8d4b872e3de77ab77
+AdditionalInputA.6 = 0a70b0b0d9b3f1b196f92c68e7926297873e98973b2eee4f2a48c34c9a10a47da066d4faf4a3f0a80ea3f34dc29bcf67
+AdditionalInputB.6 = 179b17e306c29e4600506dedeb941509f76e528d886462c5ee71f7fea9e2bedbb9aa3107cba55a484e3675f775f72863
+Output.6 = f390b947e7837c91fcb9774b1dfd4dda305965a8a5bc06d6a1082d97a9050d13ae4333bead8e8907b57c6df0ba658abb35fdfd595b6d68dd4b0693758e186a65
+Entropy.7 = c337a3e78d7d2e11c849870006f2e76e7fee30ec076d377bdc879f2583241e3b3b7b863dd9c2e1379aed93f2f8dae522
+ReseedEntropy.7 = ad410791ad781f70d6bb8b883d1724f6cecb3245141f789c1a8a9a1d45706493baab5b2b3d1cbe5d2ba41e4123e05b95
+ReseedAdditionalInput.7 = 13d425b36bcd17801b077e71b00ae3c90e8b6bf9b520c006f68cbc238e5a9592227013276e559a72e1b952f61e8a4c62
+AdditionalInputA.7 = 9c49419e869018268c9db5fcc0f7a935d17cb9ff04ea4d56a6555cebb89a6f4cd0d1eb832342c42264dbae1d335225b3
+AdditionalInputB.7 = ee2049b4c36292a451aaaa87e7f7eb918e8e0a492ebe71fc3b24499f921a23d2a01b7bd8e75851c892ccf124cc298876
+Output.7 = fa1ac7ad59924d7ab57c0186def694645805f895f6b045dde12933371f9601c6c9133205093445620d2acfeab44b133bf93f27e5daaf7453e98e6e477813d3ca
+Entropy.8 = 7cd68d979a01244c08eac6bd20c076919918dbc7f09ef502727dbf50bbf25762f6c06e0e6c55455f542891572cc5d75e
+ReseedEntropy.8 = a0de6b1d841631d370c35ed229769eeab425e144ce5bbe98505af5381fed45aab711afa059624d05f0f732fce3997e71
+ReseedAdditionalInput.8 = 92c27d005fc497886958085ae5a243fe28cc6d3142b3817b201a067e45f6b85b8a7d67d2b57bea167cc7b53153f96456
+AdditionalInputA.8 = 502ba386881fa8167c9ac144275630e7cb6b83f0b09dbca29b60f434b663af1f3c73dc50e64eeaa86aa66cb7aba365e9
+AdditionalInputB.8 = 1d737c092bc0867d935c0a869539476358f3cde932d07d949b26cc190d450fa7595f162b29c9c96e9a84239173c93942
+Output.8 = 979cb9eb1e30e40085f07c23c20f349381fff833d3868ad98d36c7f8961ce73bb3dc995136eb472e4bff71fa1c2938a78cbbde6427f2110fb6d64c6d3277cadd
+Entropy.9 = 1387d53ea472d70198698ea597b146b5b4010334d141f745436cd4c1e0f612b20e668a0a7a6c8e7dd6e47c0c0f02d45a
+ReseedEntropy.9 = a79e5d181f955a4640f15e7bb5a32788f5415deab98c09524f630ba73459a5f70504626702054b3bcad37739dec33bb1
+ReseedAdditionalInput.9 = 1f6abaa424bade0d26198544aed64eff7a372d16ade19c8fdde4d8338ded29bb107660492e0bfbbd0eec7679a69184f9
+AdditionalInputA.9 = c1ca5cd0fb1b6a3f468f9d9efeab54641836aefaa4f6f2f6d8cfca3ead7f736fb2a04bb17a9d64f2d1e8fb12ef06917b
+AdditionalInputB.9 = 5dc9499690cb78fbf3df333026ab0477d800eefe9973dc5f33c463474b84465a9556c8abbdde3f7e86be57f7368e6d63
+Output.9 = 5cef6ec53c22448b5280ade051dbbe332398a8581c9f41885872a5dc54ea95df6c82fa8c10c2f3e1f0dfd788e4616b97389603a700098029d07dc6ee8c38dd41
+Entropy.10 = 30ccdea131c468d1c180bd536899f6a550d25c31cee10ce0f82859158b5ffd3ee771e4502d24b5e269b527ba6d2ec587
+ReseedEntropy.10 = 4bbe5fe0d0cf2668d1d2c69671e38c3213e59c74ed06c8fe5a534ee83a37f549f1a683d995b60785be7135638082f706
+ReseedAdditionalInput.10 = 4471092a771a150bcde99005cb676cdff4d5b478ccdd53b619e19dfd4bec325fe98f72d0320a36a64db40b53558d1379
+AdditionalInputA.10 = 7d159895ecc245e4912df0a21775347e1c1a16601bc7f0a15a7592a4e57c2d6b9fedae13653906316cca0d15e1a5eb65
+AdditionalInputB.10 = 5ebae32449546ecce203fcb58feb403e7bf84594a7fdcbe9767bdae6cb090da38b9fd2bda4b1015831479d830423652c
+Output.10 = 9bb50d63fafbc26565e1d6d2147d99e5acb0a6237e23a1bda06db8ed35a5de9db1042060cd46e4420d401633c3331a6cfd62dd20d4ae8fc1500f7e28dd2ec406
+Entropy.11 = 94b635e206c621c41d39e504837af38757b9e04747d157f9515278214ff2499caed155c6cd5cbe333bd7fd3b952168eb
+ReseedEntropy.11 = d3c59c86fdf1c0e64c68734b0e79183cb69654e3ea884b9275b16e5134ba88ec683cada5c7e0b844cf5665520d21d495
+ReseedAdditionalInput.11 = 3e0b17a83a2e99e3319b5e33d029af66169b83214074f6220784edf665eb3b2282a022ff3ba1727b0be98dc3a4abb7ce
+AdditionalInputA.11 = f6c288428deb32de2fdf95c85222c5a920d62dee1321c6b3264004917ae76517005beb3ebfbeabceca844fe789e3dc1b
+AdditionalInputB.11 = c08a896fc0bae05a44ca97071ecc0b71754687b079bb950d7f7b9d3dcf205704268d0fa2f9b0343065c89aa85909a760
+Output.11 = 575a0dc1790b09fd562d88afba385a20c127adc4594823eb59cc08282187fcae14c8c783492b8df173fcc61089c08d0e421b6d7d15b0c00a771e9dac8bb6bff9
+Entropy.12 = 3840a4aec352a641a9fac77bb265031f807c26a54a561d5f8a27533452c357f2b451fb93872f4a03d827fdc179573db9
+ReseedEntropy.12 = d55d27768ae2beeb6801a1b1d440c981c603df06fbe9bdee32fe97a4b204417856486b4a340f16c02f67245c2923dbc2
+ReseedAdditionalInput.12 = 08aed0dff1e14c4f1190e913549a95370057c79f9ab2005e1d9d01a3ba1f0f4378cabdca0b379322b28696df4a2dd503
+AdditionalInputA.12 = c962128b63be959410f99867cfce8ef78bedfd4aa3fc6bbe92ace950f66a9dc18235908ccf189e5840f58460348fd5a3
+AdditionalInputB.12 = 04c115c2871165e9213590c15c03451c728bb6e281918a37cee350d59e06266d65ff8ceea5f9b3c5793b1c6645fb86d4
+Output.12 = a8561d30e2fb9eaa7e3081385c82b3ba5afe9918595d55afc4402e886a6c2fe0a004b0d9ad2b7b2ae3ff75af3961e690d7ec94847dc32e2c4a896851e6dd0670
+Entropy.13 = 07f0e0d4b9cb7d6ddbde41c3f2eb3425682276850dfa1afff6390a58d0471fd756d0ddee3b079e0ddb59b525ca45beae
+ReseedEntropy.13 = 055cd020ddd6f53295bc199a637021c01f27e323e65d7bef36ece3fb4e11a917fd41e73aef00ac38bd2b4075236adb7a
+ReseedAdditionalInput.13 = 748cbd4b23f1e73bc178b090a88a706ef4237fd70cb6bb2f05ba890686fdb9863ed40a883189719c12df6071bdfd65ed
+AdditionalInputA.13 = 43171a090219891ac2dedec623b72209be58f6ca367de9e23fe71c439d5c66d2fb5c3c9b6da5fee4e7f5e0737d217f2f
+AdditionalInputB.13 = d53ac118a6c1b81946eed05ccc6ffaf993464072b86b6895f734b664f68264bb351a824e0752d1b19161f71ccfcf93fc
+Output.13 = bdfea38e7ff37ed47d7a450ada63be5fa26eb1fe80325e57a3cd391bdaf074022bee4a0f6c806cf3b3648a4edd68226376a955668281eb3e0eddfba02dfecae8
+Entropy.14 = 54d6fccc173c92e939bfaaabbf0b67b362e5e28ef19bb22804dc4d0830784c6534376db0fb57953de71da483947f2f86
+ReseedEntropy.14 = a97de59624f18f7a94a6d48129e1988de1248b1ba6c81ecd3882daf0313343d5bb74e162e2e463a6c1e5def389e24e10
+ReseedAdditionalInput.14 = 86050f8c9a0df812e6c44d83ea9c9ffc479534a6c4087e912a63092e189cc16ec048931eb7af6460d67cc274154ee914
+AdditionalInputA.14 = 54dd28543c859fd4dc1e4f0a44ec9aa2b758d51379c0a9c758053567939db6a906320d83693a0a591fe99c3e24d1293d
+AdditionalInputB.14 = 3803a58e41fb766847b9f568ecd7f1993091c4689fcf70f754d345ec7a3f45d1fecbfcc52cd60b47b5a486acb155e213
+Output.14 = 3cfb2eda22c4f01893b4760b785d330cb771938ed6f2f929030fe625780fb91fc2f9952409b99f011cb5e7e0b4a7d461be80e94e91111ace0604a7a41719f3b3
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b5e2af38591a9743e5d3e458848a3998536d3b625e1694be847f95c3bfbda267f08624be4bb6aa496e1b596be523e7c4
+PersonalisationString.0 = 0a9a59e7605c0e12fae317bb004aecf1427bda4dca7718801895c38179fd36cd922634c3789a99b9d9c556fe50a41de4
+ReseedEntropy.0 = 942ee972a599f346be15299d347823028469fc883c5e45479e9243df8710d1dc5c3073031e62f605f297479c5bcff993
+Output.0 = 1f818218f06c9833f084c2b0ecd058d377b2d08c2943f4d24d2b5d7cad2ba49697dc3ad8d6c5c5af6372f02c1868756ca7b39b548cbf0d2bc5da2d11ed5c8f7f
+Entropy.1 = 60e9823004e29524138c8f8661657d1f04ccc418c5e2c677d26078bee024e7169063b147b7e09946468f4b9e34819748
+PersonalisationString.1 = 13aa6b6ca5e94d0f2a5b3f505f8eb3aac22fc393715cde101963ec87206912607d74a11f3c09a55afa18c5cc8ae11917
+ReseedEntropy.1 = 4a16f67d280b34628597c6953ab5af3902b91b05c2c0c7c95366b99c7e6a9c30e876d1e3c634bd0377dc969ea119247d
+Output.1 = 1b809bde832e7ab5f37273d7f1ccb4d7bbb1a11053cc72271c44f4d21a3efb9a06a54813911dc99ed01611f75757677ba892719cb6ce9dde262290453e4f00c3
+Entropy.2 = f4d2dbd7c0f52189e329415d9690c8615663c86f5c097529e68c9a7eca0ad0bc2eaecf911887622204ca9edc1eae410d
+PersonalisationString.2 = 9962caa35f06bc276a2361e4029b1bf02184024c52cbbff2d8fd1eebfaa231ab4913680c2fca1afdd22979241a291db2
+ReseedEntropy.2 = 4307ea695c2ad7d80b36476a5e3527ca13ff8fdd7c5cc712bb0a4071c008fd5adeff70e5de94390f58e1fe884b4196eb
+Output.2 = d9d0def9800dde19e12405b920a680602715cc91c74088f4197b2c1d60f0b33d34cd05016fcb699139402cf4fd5b7fa2d3d744ad5675ec061adbfc9379a4cadb
+Entropy.3 = d442895e5f7b2a33de8cabe30ea2aaca3bd413e62f6514d0e6509aba81aa58f9fc7fa9deb5b10dc275df6383fc549024
+PersonalisationString.3 = e432be1ea04e11e5ef9d39892bbd38ae2ea8991438181a3428348530ec377fb0d8a83fbfe0fb34ec0eb1e694d91a5da2
+ReseedEntropy.3 = b5c6201ad5059ff661c27367c560029f06cb936c970a744ea1aca464b903c06988b4800046208cf36594d06ca3977735
+Output.3 = 8edbafd551fd28ea37190c6a99b54831894ac54c934d01b6fc3e43484c87cd78195472ab3044ec99cc1974be04e90c233e02c837bc5eaf427a0fc0fd38d35f5e
+Entropy.4 = e11e6a3f6a33e020cf04965aa42994dd9c6d30cdec758a2e02ca014a6c48d5b65fc03a0c2554a0303fd6085df78d54de
+PersonalisationString.4 = 5a4cad89f2d9b40db9cfe12d45ed7f4c63e765e26c84ae3ce5fac844fe6b03a738890f21fbb7f2d09a56e0252f52c599
+ReseedEntropy.4 = b8961521b678c4e2737c6c62a319510190fee14b793adb0b4fe113ca9bf8c86d28366df0fe5f36131b7dc1b0637a7046
+Output.4 = 1404fbbe62e03463c435c2b675f76dbd22af1b2fce2b6e949e2df9efb8a3ffe738c3f78f9c852a3cb1f413122d4276d185f1599ee6cb7f218c23b1a9c9e0e80c
+Entropy.5 = 0430e11d664ad3cf63ee3ebdf55c27e7b3deb7fbe7a974e40e89437b7ffd30c23ae3e0045a53681b828991a6904886fa
+PersonalisationString.5 = ec0ff952dd6926a4e858e813c489c9cd13cdbcc3092ecb30054af78c2974f3e8a19a2d13e822def7fa66dc777b072d2e
+ReseedEntropy.5 = 3a02e381d379c9de624eb53a8baed2d9fe00a5e0d0bfba5b8d75436ec72c5636b0900b52500cb244088c97754510dd8a
+Output.5 = 851689ef8cd60800e550c69a9f1adec31d75208ff4b3950aa0fd8b49656a54ceeff9250752b564cc8e923975db08eb0479b15d2ad77ec9331f89d7e7621851e9
+Entropy.6 = 55488d3883e37a2fd116af224ba4fbf5448969ac05e556bb8772306dcaea5184be73df5545c256c177038d9b7248924a
+PersonalisationString.6 = 5f01f66a7e6987f9018197096404e74e29a9285731c3586af4f30ed5f1488e6ca61af49c46b800a64ae0c459b8fff57a
+ReseedEntropy.6 = 6f412c138b0014b8bc93c28e287a61111beaa8bf0bc187a3401022083ba3d8c01b8798daacbd8dfdb1a6ffc22bf052ff
+Output.6 = 194251ba611a8c567e1a1b1ee5f94984e2b1bd4758a68817536b1c21aea3035517ca2b6f61a00186d3ee3c7230fc393a8d4000524b508543125198c9e8464bd4
+Entropy.7 = 909058c537b86e3480396e1799fa9bdbb4273b7123d6ba3d79c85b9871952368631c85c9b3d17e75e3e6b23bfad66658
+PersonalisationString.7 = d02448c06118ec9a2b0cc686114afdba9b3041e4b92ab97964cb6d30f0bf8c13e2b71d6a043e646d413444056964ff7a
+ReseedEntropy.7 = 96919c4aef8d3181dc518437969109a50ad6e761c8693061ffa71c45bc12bd9686d78441598ed454183e5de12d9d235a
+Output.7 = 7b97740bebdd216d43603440d0a399f836f580cc8d1329cd653c5a7ac787366d980d7ad5b736b867325680e2f8fa7135308e73e185d47623a3fc4683557bee8e
+Entropy.8 = 2bdb7d32eb81db9d9cf1e4bdc4e02de277f74efdec241b2f287bc82362be4533e4151758bd737d575a226840fe48d837
+PersonalisationString.8 = ad07fa56a9c365bf4f16aa9033f71b4cf210d7d83ccfa7485d4cca105aa01462450613a7a9e2600a1872b292c0e6f4b3
+ReseedEntropy.8 = 0729f2a2f84ea902cb6e84a8fa6aa40e24c64a1b67a060dd47a117cc854d5ca006bad5218e64005b1bcb8880a0207d7c
+Output.8 = 58f56e078b05ae565668009ec2715b9a6f14531c2b965b7ceabb4478cce2db9bbc861e70d0f80373ebf3f0fa8a2e90ea6366b025a141d9c7bdfaeda109cabb90
+Entropy.9 = 5e42e2375fc572e14f86309c7246a17eeaa5b72ce05387b042673e75b5540669627aaa8f4306d3050930f8b0dc727d55
+PersonalisationString.9 = 90b2480969b1bf805a2c8c751bd76229caf5b67bf055f4a519badcb8e88eb0058f672f6cd07eed9d406c1709f93a8a4c
+ReseedEntropy.9 = 61b4fc67fcce7d68c4ac4c5f54ea8cfa9667f58375fdc474a0d7640ac538d6cbe2517ec0997dec62669c1985b84c4578
+Output.9 = 9605d5380160c754e43ed8caa5b5bd2d9cd954ea0c1c10eb02c649b0aa8463badaf35a9ef4b2341b1a16d413224fe803fe997d8ba4fc58ea5254b4d28d116e3f
+Entropy.10 = 3a51edf5f690b0824a0ab3b874b38472dc7279af5f54875a4973355c1f37a988e67c26c6daf28ea43e700174fae54d2e
+PersonalisationString.10 = fca8e0f6e2ab70685cc0ca05a6fba7e666870c9863ace0a5d5011a287e9276c072bb810bf3cd8653d2b5c8345df22cfa
+ReseedEntropy.10 = 7d0803607d7ad2bfdabcd85fa26532a09a15ec34e7a459cd2e39b94526a0909493f2a6b1cb5bdec6c8a8e229ac69d591
+Output.10 = 21b93551a12757b43f384192d24ee64eb599779c2988a00be92e31de79862343ce1aa9cc074de62d4383848bb5261ccb8d73a2f7ba914cbefad8f092a8dbf9db
+Entropy.11 = dab7a3aa53f85273a90015d32fb3993fabd8244f12357f04f2ac16fcccd353c5e2d1c7028eff322a8b808634dbc683b8
+PersonalisationString.11 = b74d00ce346d1ab729d543d82c3317f4dd3c6f6fee39d474e39b79d6c1e0e15ff2421df20f0267729eed341a8d068d67
+ReseedEntropy.11 = 4da794ec635dbd72ca897c4a5c3a4b08ee0bdfed89fc6e52b695f32f8ac5b978c1edd4b0432b77a20fb9125032530457
+Output.11 = 2238adc11363a4b033ed403cca9916293de654a20bfa29f63e1458240bba6212ff91c50a3fd027533f45240ce312d75d335faa2eba68778ce987d78e0dbe8cdc
+Entropy.12 = 56b2a2bc4ccd942f9b7394215dbb642b8d3637bf43fe9d4429f8eee1297689e18a7d65ff1aed2aa5729d0d7b3c255741
+PersonalisationString.12 = 8faee0acde0e51aa62fca5ae4c1e131e928ed1dcc183d0057e34054556e52d2dcc609b3f24304eb8fb6d8a28d1b51fb1
+ReseedEntropy.12 = 810b746ac71445d29fec21341f868fa83f77b4f26abaf60af457ca7a37b239ca7a71cf287cecbf2cc14654cdf7ae3ed2
+Output.12 = 0bd21c8de7b455c229942c5d64765c2e6d7043359e065324338dc74b21a8bc163110d9a71db871a1aa2ea1f38737d01a398b7c9bd7612a5dd1c0657c21ede8e1
+Entropy.13 = 8912b0ee4e8dca39701f1066e68fdfaab1bfe5e76638c079121c7a833b4c380e4fb986a3a6051ee0d11c6afe85397eae
+PersonalisationString.13 = b3f96e51882eefcbec184ef9a4297d5d5bb0a00e8735b863305659d52d0e9d69c1c8f2894b3bce84bd994b7a4da1a752
+ReseedEntropy.13 = 935aa45b8ab830f6db7b41e0ee8145540c594dc4c50efcdfa07fbe9158162d77a5d3dde9282d4a0f63c3cf5cbbb39a4a
+Output.13 = 2e1996d9e332ef870172ea5980e0382014bf016005ed5ab4689663cd019409fde4ee4c8026a0fd19079fcbdbffd12c213561dfcebb66e247a9f3ce1eafa9f4bb
+Entropy.14 = de1e4da1b1755d0a9d4e8c9d4271d0e21c1e4730ebd431676ef5753e9e4d877937c78936a6f0e0a9e5e84d87f1ac8fea
+PersonalisationString.14 = e7a492e06f2079eb6428f4d39fb18aa0ece5d1edc5f2e1403737bf6a1334ff7f46ccb57690ed5b06e07b1090efde505d
+ReseedEntropy.14 = 17837fdc7d5600fa487fa07331c4db6e3d65d522537aae0715a5936f5cb81953965fdda82e5f2b0a1f20dc8beb76beca
+Output.14 = 2cf0d9cfb60234b23086dc1649e6fa99c4104de9853d19508105535c960468777a936543f6b31ed0d3c52d135671a23d3ea08fb7f29c9dcb3f151163587c39db
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = fa207b20ecb0c64851516ee83ed33caaf871315d781eb04be4abde3bef91a3c1f837cbe5fb9494f4865386fe53e85f5f
+PersonalisationString.0 = 136c23eda52225168b3617107af57467d1661a5e3ff30fd14048202c535dfb681e8eb5ccc4353a919d0149df94abb1d3
+ReseedEntropy.0 = 3fa812a3f8d90425381117a9360b7a3fc67e3405e5a2b584dc7e8668da098461b3035c0458fed25e293a5a676640cfe3
+ReseedAdditionalInput.0 = 814793c9a4d6e27ae4b661017f994a7960bec9b3ef9390ecb266a93acb091445c9368f942d51bdb01b94be1fc3f89cdd
+AdditionalInputA.0 = 1f764ef9d091e635f9e919746683d2d6e9e02d04756b1c3ba8861531f88ee89c60aa3482f9a1fcf60293cdf5b64328b9
+AdditionalInputB.0 = 3553e3ca834e2c25caa1f143d5958259a491d83af4ef4170b3bc2fe36d256a355689d84b8114bc993dc3bb3a925f13ae
+Output.0 = 507628cba7e3fffaf4935713f32c09c3047e90588302c038add821b24b76047c72d43df031018030cc0a4a53e7c8b08b033f0077b100ae7839543cff96348c99
+Entropy.1 = 36eb608b1c34c0f1e36a3bfdaea896cf81a2bb49b7c0069eb4fb65129fe6377104ba906a91c76fc7d83d4d233e73b53e
+PersonalisationString.1 = a1594ddca40b36619863ba2b1047fd8edd35703028a93c833b74b49ee7598b6e7f891886cdcf60a678800a478a019c49
+ReseedEntropy.1 = 914e91af79ff82a0ce0b73fa76b76fde2e4a96e9de164819e5f26b36e54eeb0cfde0ad9288983e6225a7342925ac40ff
+ReseedAdditionalInput.1 = c6dbf4d673850dc2c8f3e92c90f57251b4edfae96082ec3a76ff24077af4c1f9964f51a1413f58429e0a70ff0879980d
+AdditionalInputA.1 = e8d17ebfd26bb473aa508af659546b004f816a3ee1b0d058757d40c5b4c45b85e9b56eda243821cea4fcb6a9eb6afcd7
+AdditionalInputB.1 = a85f5d8015f01416bbfe83a0dbe37eb37dc8e90be3aa72363aaf1fb6612a7d1d2b835149400cbee62d53313c67abf3f9
+Output.1 = 89127b8b99e1e42fd71897698f22833409cb67496c33973c838b57089e9375b1a3f628fe60e6b05a4b97417d68418adb0131fc882b73232a013e04bb040544f0
+Entropy.2 = aead9c1f4f338493b46332635e812ff97a9c16f7df09f3570b5fb532de883bf4f3eeaa277bc5ec14fb6bea842cdbee88
+PersonalisationString.2 = 426fe9acfc02f8183f0ee8bbedd8cb6460677184a8cc4233d6208c38a7f37bc576473a60ed3e9335b7f9e25f481b15cc
+ReseedEntropy.2 = 57a258439dd972b6d5770aace377784bf78595cd230e16e4b1055591c29d3a7c32cba6a835346d70d380c84be2db99d0
+ReseedAdditionalInput.2 = 508deca25785f11961ad77ce62be806aeaed80b720c7d3a97d3f314724af76aadb3bf1047c2f3a7cafd2dd469626416f
+AdditionalInputA.2 = 4b93760cfcd27270eebe3cb8891b25142151c43562f09df81aaa60f0cf0728246aec580177fe32aea1e64c3303e1717c
+AdditionalInputB.2 = 2f58d036173efcf40766bf41735e6d06ffa97e79bec138e05ec0f55fbc44c7922342a10b2295da7ba5b91a3c42936cb0
+Output.2 = 89bfd07eb00c324626b4089464f1a2f4175a065abbde950a3b5852f53169c6a64fa42f17412520a5262d64a7ba13e85c52aad707f46bcb81a44efb2234d26d9e
+Entropy.3 = 272cb79c574fa7941da817bc5b9614c003ec0be30cdd384792291b98c8811d3423e11679647f887f426e025f0960a770
+PersonalisationString.3 = b7989b2532d46dec8a6022b26874437bc8176fd219948cb995cb003064eacf1271ef17269a07d2c2ae99f3f830878a37
+ReseedEntropy.3 = 78af0b8b0eb3cabd919cafd06b1fabfdcb63fe29f5b68e67530b396200887d92419e3c839b8b1dc43c6507026f1f851e
+ReseedAdditionalInput.3 = 857848c62203307b39728acf11ac8462302d3a41d186778b3f112a86270252f058fbe5767496e47662186b8d0817de02
+AdditionalInputA.3 = 9a08df0de742fd2e2d55121a58b700dfbff250a4881b02fc3b8952b48ecd4d034d6e7c757cdf91bf7c31dfaf70b1da22
+AdditionalInputB.3 = 3bf0e4f1291a8bc272cc985878335882c75831510f27963c7c01a879c60c5b67a9a14a656a746a80a091adf6ffb1adf6
+Output.3 = 69361d61f4cf5ed489888934f320a9acc5383e719f09a1e30b6029bf71d4b4cb54859798ace2d8ee5e681d4acb223b9c119dab2dd07e6db3f7f844c2b46b9c47
+Entropy.4 = 6f45b55ac62d5ffd452d36b1e4b18cc6abd6ad93e87558b79fbe99b4f4a962b74bad00821019bd126d6f9dd73912acf7
+PersonalisationString.4 = 913a783046baefe428346085fd640caa1874d4aa6974832cacc5b51e78514bcfedd174606bef1721df7a1194a0ccd1e3
+ReseedEntropy.4 = d9e19ce3197004ab3a4bf995a481149b6d8e59a3970161cb0d3917374c0c86bb5e9bc509bd01b6796fa1e77e5fdddb16
+ReseedAdditionalInput.4 = fd31068c90614e04463acdf856b034293a079a816f1c5f3de63b870a9876f7397d2f93bd3f6776b56a78f7178e1fbb87
+AdditionalInputA.4 = 068e3791b91adb820b27c45a5d8544eed3133486a7d2d0bc503d8abad8b7093f3df214f1e0ac4ff2d347c760b2a605d5
+AdditionalInputB.4 = 6c55927a349d321d1a2141aeccc3543e9726ffcf3d8fdfe1aed63c61972a213c12ea65d648e476268611e9b08486a648
+Output.4 = 552b4c4035d964b5eb26e3036445793df67b7321d36e8d2362fe284503b587c961a33b816b40b93d4b006769177c6593c553b6e669076f25a3e2a7214156c249
+Entropy.5 = 8d492df46257a62e717302992682e28494f84d0f3237c16439efbbd16a94b3356eb7f7c2a0206892045a0d7d36d69f03
+PersonalisationString.5 = b915f3311feadf6676df2389baacccdafc74cf200ed7b99167b33dafa875ce4aac1a61ce54972ec54f9b0901a3b050ee
+ReseedEntropy.5 = 2e345fe3a471c5066b20f4aaeaaf73921426ac1bc0509e93671535a8fbc016f5967403d6d13b4760491bf973c47a8ed5
+ReseedAdditionalInput.5 = 2e8f1f01a7664890feef93152f7b7f05032b4c70c58b5f261ef0a9c2aef23f2a14ee57c3d3465af24289b1c850e52ef8
+AdditionalInputA.5 = f8c218c996284f757c491cba025fd84cc701f9f83a16f03c314712c2354fee39214ed5994ab24641826bc15ed1bb5f61
+AdditionalInputB.5 = 146c53dc4af90f26d8c85822810d9bde2949495c23ca2c7c13ceee8221cbe8105491d560e0044c8d50d7e365da41890b
+Output.5 = b19dd18494235abdcb3b4e99c9355d19d543c7fb7e1048d63d9e25abcc12dcb31549cec2818667713ad1dc35142072ca8daa511927aca71303493e500503be8b
+Entropy.6 = 2a595f08947d0056ed19ecc8a547867834c125cf1740230a1325b93bf29951cbedcaa6a8f5cbe69801fb9a197ad576c6
+PersonalisationString.6 = c0fb9dbea13863dfbfdb2c0dd864887413794a07a4dd228836f0f6afab901496486a2d508a3f4b784d83382629cddbc1
+ReseedEntropy.6 = a3ddfc3aefc94dcaf656f4d8eef0065a6d233a76e0a4c26e2d8bbb86459c9e4a173ff8cbec85ebc14712640741427668
+ReseedAdditionalInput.6 = d4eb9b12fc2a6fc75a69701c8b5ece02e47f813effb705dbdef0294e38907f5aadf40bdbcc067d0ebc0bf3661a2e0990
+AdditionalInputA.6 = d3c4bf4f8a3f61413fe1953523ba83bc02ae6d7eea1c8ba288f8e06f0d0276e61667a410f90548d283c4f1ae79483961
+AdditionalInputB.6 = e6fc29680eef141e1372e17729c9f4407b3f7a57057be1081ce46c78693334bf56867791072d9d18a7b4835bf251712d
+Output.6 = 08475bfb8e621e12e212f4960e737023f7a3de3b204b6ffeeb929f424ca78c6ae2e0d726237915e5e244616713e88a39df302208e3a324f5444213b70b2e9c09
+Entropy.7 = 3d5332b91dcaad893df504c7c675b69890b28055dfd3ec7d0ba56990dcda175096ff8f8f9f9ecd6dddeb96b829b98c3e
+PersonalisationString.7 = 34753432b3c6bedc4d2296dffce8a66591b400867f7edf10cee447046f5f767036da9f3f4a02f7b8cba7bdd4365c1fef
+ReseedEntropy.7 = 1a69af0ff696f9a2fe0fddd26ccf6fae215faf91804461928c884eec13b1dd1501862a738373454e1b449c6026cebceb
+ReseedAdditionalInput.7 = dc47e104175f3c9812feed9e143da5cd7e553e3423db5bc8be3b652f577100267ff795804aaf42c3991589e7688a977b
+AdditionalInputA.7 = e64c0cad3dfc0bf0eba3317cf37b7779b91bf3de3e0ba36d3e16feb0014286596edd364c197847e8732925f971294dfa
+AdditionalInputB.7 = 1ff3a6bdb7e319a86b35d062cf017ed270c6b5511bc3d63083272e76bf4db9d90e836f18d98f1f79c2e91eeb0bc635e2
+Output.7 = fdef7e67c3d19f5f74784bdc64d2c23d0a3f027846da2b2afba940fdc2f066d89b63d27e55d3d0a88bddb97e29676894ec8a18268e4bc27d181a867c5a80fe2c
+Entropy.8 = 156c8c0f44f4a8f17044957b572ed16d54b73a9510d2b260a036ad6ef223f45e124c4ae9dae0fdf5684792da0ff5ea0a
+PersonalisationString.8 = 1472f56d5498564a5b53d2eae27103f41f565d7873b37c37c30472075f1d84d69a8d68c92636ae06aa61678358cc47d4
+ReseedEntropy.8 = 6bc2bfd44f72982b23b6d22c85f7d601d5941ebe6e9ee9d06a8efe652539ec00b1136adbc4e43aaab76c3ad6a57a267e
+ReseedAdditionalInput.8 = a83b1547fadb97e491ef0bdb8b0d006ab16638fdb211613051f0f57586c146882f1062b7f71a8c15bb27200fa83ffcaf
+AdditionalInputA.8 = ac188da8a895e0807bab61b1ebd73acbe43f99f375c7d29174f675e1667237cedf1d41fc50da277a0db21ee2891a5abf
+AdditionalInputB.8 = adf9a30b6cd9dac23f193f66df9d606a5765b96cc42c099530c53c26a6d6bcf0779ae060d188e1cc5bdab6c312892267
+Output.8 = fcc79828bf2c9d3d799d7a0e83583c70aeb156e25df0b2fde030c2775c9986c8054e848128ba38ff5e5b0b1e5b72f9e41726b960008408f5152b1a47072fbdf7
+Entropy.9 = 5e0dd8e37aa23d0fe79efcb8e5538ee90ffb5733decc83f7677488c4f64c2e0d2a918968a5c7351de9360f23fe606a4a
+PersonalisationString.9 = 5161b794e4a13371b320ae4b2b6b698e4df507402a7582555598089dd9484358d37f891294948512e4198a79de8ca3d9
+ReseedEntropy.9 = 850ffb89bc23562f3ea03947c1afa7309a0ccdc0b714bc94ff45d66884b74fba0bffce97887f2efc178388f36f0ea95e
+ReseedAdditionalInput.9 = 50f605cb940f573c4ef3ddff8caa9a3f544f40fdf583b82cd79338523d896f72f86be1f9bb37d9aca02a2856f713c812
+AdditionalInputA.9 = da7bcf6810a6b3820548065edbec0fa2fd4bc03e5d50666f98a8bea6b744e04aafa0714582f11b6608852c45ee51df6b
+AdditionalInputB.9 = 4e9c0c770699656217a0b2dbb466a0fcb0cdb5d4a4a05da40fa2eb546f2f0f28aea575a0bdf6e89352d519db44f47dc5
+Output.9 = 40ec0e8e3e54cd4fd78f5e006bf3134c378ba619ccf9e7530c79217da631458b5f9135bc8b0d6f2e742c53b58d0ebc18263f9d2ef37a2fa0fb086d2193857863
+Entropy.10 = 219a364ad362fd8a1d69c1284fd64cc9ec05e6bfbdd133ac9170594b5d95946d3dda2ebcc58deeace86f9dca5ad99c18
+PersonalisationString.10 = b0b27b03fc65effe4610e61916f2e9bd252d47efcc08b84aa505b1befd3a7e9295ca764ac88f099bbecc28301f0f298e
+ReseedEntropy.10 = 1bccdb4b2ce863fbee104d7a56f2cd88a44a088392883a6db30e6fc7bf5611759c71d53a61fe62b6314d7426e510a722
+ReseedAdditionalInput.10 = a06eab3b05eb3649a01be82a356030effdbf45fd71f49b1862ecf33fdb28a7191a34f104b9eda1da4ba48daf9da381b6
+AdditionalInputA.10 = 88b17e13e02a7e9a3f8263946fae0b6a9052692c3c5cbe858369c4d0b198b9c6a8f4c87ff5e6b2835a7944b911266aa9
+AdditionalInputB.10 = 828222c8a275427a5f8a963d0d65e92f6170d5089c9a162429c093a28dd69f71135342f16b3baea9a4764e2cc3762267
+Output.10 = a739f9fee9a40049e42b00b381a1f663877abb776ec655e3a7870bd94bea1a25d3c6d380eced435e498044daf78b349bc1868e4bff6257cf2711ed08e2357201
+Entropy.11 = f8513c2f6e46f75fce3671ccb3c69158583a873b0dda83d8b1cd548f4e5efd75642f2c23cf8792d51023f31d795f6f5b
+PersonalisationString.11 = e94f7212257885511b15a873d0158fa5ea648846afbcf9d62a7abc4e6909dd43c671fa18bc289f47e2301e9aa69c3e88
+ReseedEntropy.11 = 487b9c1866ffdaaf6760cdee3df5a930196d30b0ac8db780656577ddfc1ff3508c451ef2b0b478a2cf0c73027597b2ae
+ReseedAdditionalInput.11 = 7387b59f8c78e79d36edacbb428fd515ef9e58086059bf7fd642053b0f5706cfe86eb3c35ca0b6f02e5d1304e476e3cf
+AdditionalInputA.11 = bafc59ef40e59d8c28851212e1c357cce0d06f02c69d14585170ca8eb18396a331d635cf0651319842cee2f7c87285c2
+AdditionalInputB.11 = 82d905ba69b6c45ca28107beb6698a152631ab48614235f6a9f12e019f66bf326151d9ee84e0cd42b6566dbffb46ec35
+Output.11 = 163f48d09f3e9ebf9f8647766a0b2e189a2f3a21a5a4e31c8a4f3bd138cc50030ac8bea1c4d9e9aa0b67f34926239fbcedfd1992da165b941cf03b56737737b2
+Entropy.12 = 0a8f092764d473d48215e947ea8a32b5da8ea86d8ed0d83bce31b1b5a21e7c5f1af2186a39caf9afa61644caef02ef9b
+PersonalisationString.12 = 84637faba756917b0f44ba2e0e26546f5239782e4d9f952ee251367081629e71c20a7459995a7563810daeab74220664
+ReseedEntropy.12 = eacaded3d89a63b94a5c14c3087306e670fc4ee7d56cafef4c5aa7d553ca89ed34418056a44f5447e2b07dd541ac4645
+ReseedAdditionalInput.12 = 104a1541313fc4be9d34bced288c1c1b6fa793e9096f8be5673a2c6825dabef91fd88e45a061b2d897f9b5e8a8ae0ad3
+AdditionalInputA.12 = e30c9d8aba0bd5dc63d911897e4dcadbeacc3ed9392d8e361b356e02a81d65bdab91f7e9f8dd2b2bf9af0da5100e77d4
+AdditionalInputB.12 = 2bed42b8c05461ba2756a5f38393d5538d20eb9cf1c06775e7fef7284341f61ccd34b0148d1e870c1992dfd065560ed6
+Output.12 = 855a6af3e6dddf194ceaafcef6f7ee91f489a61a73b759d41be4d5298510b9902f5b78b1162cba417684519634b578afda9802bd782f04b3a25106f3586ad8a4
+Entropy.13 = ed63e3b88a2f0d6a40b7b36a06cd8d40ec10158ab6c4f8dabdb879e45d22db573320d2641bfd7db31eb6bbf4c6330b9f
+PersonalisationString.13 = f82a5ee81f349a69dfa6a6e53b406bb560cb0339f61b3886237023ae4582b9725b8774a8044ec5134ebd4d7606f18188
+ReseedEntropy.13 = 7104522c2a69bec7e010d9670d7ab92dd817ac7ff05d63ab0e12d431d4c9aef4d715421c1fb5d05d3aecba36859a6038
+ReseedAdditionalInput.13 = 3b83034ea440604d0b7d04857623e9adc0eb9aad4a45b2079863eed3d72e65abf67d255673e769a2e2584eea59f1ebaa
+AdditionalInputA.13 = 8678e4f831887e96a27c3a8ce0963f4b34bbca25791b06526cb6c55624c33d98a0356be624238cecacba3535e872c4c7
+AdditionalInputB.13 = ec3452ea2722984bbe6a5b7c22ad58df37a854abc8630b9e21bcd0469eb207e5f44e044f5f666920dd55e81a393500de
+Output.13 = c340765fe7a3479bef2d7d59e321066f8ad0db53aed4c517bf8339566bf877d53921e6de2650d0080529004a5fd32124ce8e58a040e2d55656b37d9ea827cb91
+Entropy.14 = 882ed05487dce4b4f9e58ec4f2da1fa5d8ebb4ef9fcbf7b0a0e15c4dccb8e19788f86dcf2885e71a20cbd9ac10a6648e
+PersonalisationString.14 = 05f5bc41687ea1e4c34a69944fbae283cfee4c42b1bbd78fddb0973d0fca948539b6843658b67c30b73191b9a0bf2921
+ReseedEntropy.14 = ca1603d4c8711404c7bdc12c7c75b2943a4b042ea1d2eb54506a6876952157caf3b152dc75f27f2213645a141577e8ba
+ReseedAdditionalInput.14 = 83cda53380888d53515e58154f89d5528ab69f31fbcfca34988cf03c4cae5f60aa6291f32d99ab2a726b6e08d2502cf5
+AdditionalInputA.14 = 5bf5ca9f964edd91e8ef491fd3cd32faf9cb9d1993d8221914d1751fb0d4252a5ca950e213f088050900b2bd74f5e336
+AdditionalInputB.14 = dba28dc1d8d615651547867d4ef42519045ee16378143685101da47a27b55498078e8a8f4854052f7cc6f5b02e571ae8
+Output.14 = 01f11971835819c1148aa079eea09fd5b1aa3ac6ba557ae3317b1a33f4505174cf9d7e940821c9b0e5527a1d3e186a7a83f187c62d3223cf5964ff9526d8484c
+
+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 = bfb0077e995f49c403dc38297ee47b41938864d734b2e7b794e9bbf461a2a4a45f364d82a66b3730bc5c9902d7b5999f74554e59e454d658a86d4813b5e7609e03bc750c38cd52b36676057ed80bfd41
+Entropy.5 = 7dd2fffc51456dd47260395ddca60c8f
+Nonce.5 = 631e5b0ce84e3652
+AdditionalInputA.5 = cfc3ab0a51c3b0adb320fba6112ac856
+AdditionalInputB.5 = f5aaae47c823c04e6960dcc205fd77a3
+Output.5 = c6118f4689c7fccd5aeb468775807d39631f5b315f0c83b5d96fa6c2ebc0f95ef4414efe1c99ce71e62c4617dd1cc95777dddaa8258d065bf3af2adc679dd3d19d23ced6e2b4b47c856576f9697a5f42
+Entropy.6 = 7491cd165de84be1ce94f0bc28b7a01c
+Nonce.6 = 7de5f37fbd777526
+AdditionalInputA.6 = 2c2eb193197be11fd96c6b4f8a56748e
+AdditionalInputB.6 = 411d9f71e0f97e940650f4ca999fde5c
+Output.6 = dfd15d00e3693e89efffedd287af2f6f33004cb42b16b38b41a393548190f841dbcaddf67c410b79a9cf104ad1805e89e2c1a41a24053614d67e9567c1ac989db33d792d802455b17b174adbc9ded7b4
+Entropy.7 = 14986734e419b647da59bad386a16cf9
+Nonce.7 = c37c9bf5a4365123
+AdditionalInputA.7 = 58bb485852a867eb556c53e904c55939
+AdditionalInputB.7 = 92fd0b39db4f98260399d5c12d744ad3
+Output.7 = 81c7509fd3aa29f79e6ce6037ed4800317b74a6eab5c8ee15205d292bdab76d7bae62cb2c26c6bb95d66bc8d3b270e89f9e61b62818ebe27ffe49f3eb86ee5fcd492b7ee03ddca6dd333a3d9334fe2da
+Entropy.8 = 29872460a7f13c18e68067a0fb8dd6c2
+Nonce.8 = 7d62e20aa71a945b
+AdditionalInputA.8 = ebd987bd551b354bddc17414a26e1f08
+AdditionalInputB.8 = c2c0e53e61451ae17ff6a90c49b466d7
+Output.8 = 95609822203263f92a40955a5619240e7409136334e31b956368b49bb855065172de3718c40483871b455d8e25f43423b991b3aa9bcf0e27b4509b45d8f7983bc054ed5ff1999fbb75f9e91bfeab8a6e
+Entropy.9 = bb0a1f9b84741b55384b89c055d50272
+Nonce.9 = 2586dfe6306db73d
+AdditionalInputA.9 = bcf6ee1eac1d2d3a7b960500f80c5328
+AdditionalInputB.9 = 543fea5515ec0ea5d25d019bce973909
+Output.9 = 9d88970a8076401fc132ecff782a2f6817e4829f6e874172ab3b991f46ff5319987dd6ae539fc2a3657f00480c7bb5e7dd6d1a12969e81a387a9ae43ab9c0d2826448c6ca9e9bf9ae0821a35c4e2f0bd
+Entropy.10 = b9de6531312e4c7c6f492f943d74c2c3
+Nonce.10 = ae15bdf3cd2086dc
+AdditionalInputA.10 = f40354918f5878ccb02e3829893035f5
+AdditionalInputB.10 = df587b0822e64918c2f4903a0f3e2e3b
+Output.10 = a7ab93cd9ffe246dd4e3dc55ba946eb2151d03d0dd2b6a812f8e3a2db19c7810fbf2b9513413141562aad7e57f8ddf7425702f6c1976dfcd821a715868cb6d436acf9708481bfa095454c8c6b81de62b
+Entropy.11 = 70fdd37d3864be6992fbdb7855649fcc
+Nonce.11 = 9f6d994d1cdd270b
+AdditionalInputA.11 = 9e5a48c9b34289dcce947c37cf1a8db7
+AdditionalInputB.11 = a23dd58bf5fd187fc2a0636224388a3f
+Output.11 = bb89ab5854ede92ab6766db2db04a78cd03192ba64f957779d6a23221edbe86c1ab76ddd1af7406688fbebb8ad377bb499f66ec9672705d2fe30e8a2d5eed9b5da5c2c2fd1e059d06c84e3a4d046fc66
+Entropy.12 = 0e1834ca718e2ec89df66f767e31018b
+Nonce.12 = b97757adf5158e82
+AdditionalInputA.12 = 1b8f115dc9375400212e503376a90f6b
+AdditionalInputB.12 = b7b8a74d1db1ecb66c8a7f82ec55ec13
+Output.12 = a55d54fa57aa36456c64edf2a4bfc3a0458d20c00bd19b5dc971647eb46d282466c5ade26403f37af1906e57550bd41ed4e8848b485a122050c71ec1c59a28399ff07097ab2849cb0165fe6fa577f032
+Entropy.13 = 49666d8b26cf630f37eab9089eabbae2
+Nonce.13 = 85ead758fa67a29a
+AdditionalInputA.13 = 7702e397a447472df6aba9b322368aee
+AdditionalInputB.13 = d1afea4c22369333a7b08299ae3d44b1
+Output.13 = 63854c32a58054e7ddb0c0c39b8e54a9de6df4a9d8b6324452cf9d022319f6b7e30c7f6c75019a0f37b74b8d1cb19b0dd2814de6b3668fc79c34222fffafbaca9489413d0e29f8b62d7594274371dd90
+Entropy.14 = a3a0cfee0a1fcc885583615d2d4b5952
+Nonce.14 = e7de2c6ffbf1fca0
+AdditionalInputA.14 = 93dc424bd0d266879601745a23317141
+AdditionalInputB.14 = a17321015d327c5dc0bc1e130aad81ee
+Output.14 = f682834b5b492e09ff8e0f2c80683b032a3b262d16bc609c550dc0e74a4b7d8ebc0e3b8f2c9970d90aec9a82497dded20422b17b9e3cc3bca771cbe717ddaed5a7a6ae2601c7f765eaa719b71624e83b
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = f7e316b13117dcc18c4407b6a5cdc5d8
+Nonce.0 = b80ddee75cf39a48
+PersonalisationString.0 = 816cb137ef64f9df71a3b3a0b3aaf9b1
+Output.0 = be888585d95d95269f002abd8b1e33b2cb667a96d3be6d20d784b1bbc6639347837d01d4b95eed8137cf29fe724cfedf8b23f9258480be350c3407973c59a9d7f3a6585b3c0e36a36c6234d68852acaf
+Entropy.1 = 033f1e32612fd11974c6992be28b009d
+Nonce.1 = 6b528c9d2accd0af
+PersonalisationString.1 = 1b1defb546206d555c55bf23a7fefd10
+Output.1 = f1e012c33a6f2a5f06f00ecae997e4d6c48b3e5b769c058951e3cb3cd1ae0794165b54d90f0df66a40025956eb76a6150a850cec48c2497d2d5861296877e627df2f064d3d7c12f9692d657f4eea7086
+Entropy.2 = b207ab840b357ae0f84d84fd91fe9db2
+Nonce.2 = 6ad6f67b654f8c1d
+PersonalisationString.2 = 80e0290e51b67e7a5f26b151717c11c4
+Output.2 = b1500533483e007f9221663f00e3745b151b8085229df05e90ad6e1b4f286c11656bcd13ec280cb92075b50c17f4cc9bf4a07d661cfe17518ec5d2649318b9587db88e093e981fc51674c9893044ac7d
+Entropy.3 = d88957fbca97ba8a2e73eb64a38ef31c
+Nonce.3 = 3e07a917c111c5f4
+PersonalisationString.3 = 70860be005c1dd2bf322744040e2b702
+Output.3 = d7a9f9c6ac7b5ab8e06ef707626888628a3fa9cc86385ab56e39901e8b720b932c5c77980a967f38edb95f19b3c0f8e95e0bfdc8fb404771f053da5f96e79d52945cb4277981a978cee80d84b286e1b6
+Entropy.4 = 0a4c590ebcef0556af9811b6462b92d6
+Nonce.4 = 238d395f8d295205
+PersonalisationString.4 = 3df3ddb4cb22e2a6ccd685f094078a12
+Output.4 = 22dfbc9462cff94c26d6073ce10949fb5cd53c6055d727b1be798c5b1d018f732139e74fd7df604224423a2cba88dfe98af88f9977b7d79fff08fc6cdefcad3ac74084bab8af04c5fdabc943d51eda0a
+Entropy.5 = f8d9705829d4908e43d0fb62f72b120a
+Nonce.5 = 349618dce551e7c3
+PersonalisationString.5 = 054d18ec3b0f5afc46f97bbc0c5821e1
+Output.5 = a43c01fe30b01dd1468e4c81f9a6b04f8c34f904b21e5dbe1890778c13f5b36a664837b98a1bb0f533653d6ac7e537a6a0c5c879baf45815ecaee6b03a677b2dc5cc12042f7ca161bf90b2a73cf41d23
+Entropy.6 = 53e093055d912f7fe96f0bccc46165c8
+Nonce.6 = 80f5977f22a096b1
+PersonalisationString.6 = 92ad83187b24748ed77b36313917e980
+Output.6 = e95937e34e5e0c547aeb0e8dbe3cb9ba5f823978e3a42255a0803d096bea9cd22f387b4d967ec6c6d5a66d62f45a837673c586351d7533472d3bd4fa149d26e15ebae9107146b99219d4faed1380a81b
+Entropy.7 = cacb0bf934e427bccd07a6ed85d551e1
+Nonce.7 = bc16676c4386ffa4
+PersonalisationString.7 = 5fd3b05beaab79953709ed3c60e71230
+Output.7 = 60ecf6d89ae63b0ca3c395ecba93fa167776dd46fa2018f11b5d4cfb29ce1fb19d14ca7ce8887c5b195bd1bc0df473505d4b0e69a7bb54ff31c4b48fd06bbc783bfa85c8715aef86fdeeca5212a12bac
+Entropy.8 = b9b66aea1e07b60b30fd32ff2cdcba61
+Nonce.8 = 9b497bed54945c93
+PersonalisationString.8 = edde3ae39578ea819f67b38e552be3b8
+Output.8 = 7dfb2cfa0747071c97f11a4dda3780f3cad20b1c598d3e74b2a90fd39ff6b659012cacbf604b270762bf5008a9f779acbfb2c4b160d42285d63e5a9019626361bbd98bfad148cc81426cecbc076e926f
+Entropy.9 = 811bd64fa915fadf72c114b7b9a3cd40
+Nonce.9 = 8870420e78b33af8
+PersonalisationString.9 = e0dcc2804ed07b8f4eeea4e40268443b
+Output.9 = 7f4dbdaacedcce576bdfa03a80c3861cb52d8b14a6f63e034868dc3fdebb5f2cd1ae5790b755ca617c91714be92902d0088a60d2501123945d533ebc8b9a13fc81b6cf22cc0dca1c86f28aa5bf38a6fa
+Entropy.10 = 375ade012aaefb480dd9e01dcac6b09d
+Nonce.10 = 4b5218c585464fa1
+PersonalisationString.10 = 1d04beeaf792cf336013f6dfecf8bf37
+Output.10 = eabfcdfc396b5e9c10e09b45aa0fe978558aaf8a13c4ce7cdcbab0216882d39555b369c68e62484d1ccd51fdcc4cb61b22a0120147e6686c263c32f66233273a3011dad2428d4d6f5e9e20b9ef6474e4
+Entropy.11 = 86e59a0469837c69ffeca566656f0254
+Nonce.11 = 677e6cb313a34a19
+PersonalisationString.11 = 3809013d72fc559901ca1b06be5878f8
+Output.11 = 8fa62314bf1a1ff584317996a13a648006958fe8cd5263c61a2c689419358dc356f34e1b1981aa8f4d1899a51fed1a9cfc8db7e84b73506377cd12366bbc1440321ef1d64a0a6eb0ffe25400eb82a7ac
+Entropy.12 = 66d1ab7b3115249361db41482538d142
+Nonce.12 = a17cbbde7200d2be
+PersonalisationString.12 = aad7b6a9de717acc17fa7cedc2858ea9
+Output.12 = 18e3fa3d861ab810e4fcd05206b3ec4987c16000f6a84a28e2e89387b4010c840f796484d4730c5b3a46e37c99e5e1ea02a6d153d50e9719e0419e58e9f6254ba3b9ca80bb1b27f70a05c944cbbf9e89
+Entropy.13 = 6149060c71c6d6fac0d3088369a9628e
+Nonce.13 = 6a97f8199b36b3ca
+PersonalisationString.13 = 231c6f78388fb63cfe9422ded41caa7a
+Output.13 = 9d7cea9927e5e9552de9da9a8c291b9400e38fb32c30dc334f572bace072815bcc4806fc077b7ae6e4c82ed9a80b281fe186818c38bc1d0f16ce05ee644450d20de5ecdba575e436acb8526230cd8bce
+Entropy.14 = f368b81501338a3cca948353fe16970d
+Nonce.14 = fa9adae924417150
+PersonalisationString.14 = dbad22c389c527715d21a5bdf38c1fad
+Output.14 = a18d57e672218956e6c8cb9901d02888f3587177c3e11e1a99ea72370347b953a9f122c9446dfa109723b27f36fbf15edf103a56741c24968592479cfe30bc0053fa7b9818e9debcc494db64d15d038b
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 6466e1799a68012379631b3aae41f59b
+Nonce.0 = 6b0c61269f67c576
+PersonalisationString.0 = cc936b87c8c8c1ab85dde0ad2e9242b4
+AdditionalInputA.0 = d1033ac553ef08f22fd38f12b49b45bc
+AdditionalInputB.0 = f004ba01f51455430d84362e376eb775
+Output.0 = 5d675d1e92490952703c194194e1b061b6ec4e219dc2e1edaa891ef2d1b7ed050a06342d3c095011eb339f198519779b01ab1a580bd2e34d6cf4e47c1befe0c7dc37b4aafb31128fa396267f3732095a
+Entropy.1 = 7ed284c8596b6f0107de3b4b95cd9114
+Nonce.1 = 69116c8a073bf4f4
+PersonalisationString.1 = af668eb65b0f4df2ed49b37c842b272e
+AdditionalInputA.1 = f0ddc45922363f40271e7a01ed67ba84
+AdditionalInputB.1 = c2da95cbfefd2ac7395cf989711c1350
+Output.1 = 306f553077034ec2a86a64cdf34387c59769aae149d8cdb0041a5c2e6df9dd1e00ef0898179d6c6bf02b2c42b4a898f48cdd9ba4ad2b99fb133c5ace4249a67bc30e6452495c186244dc5ac6928b1ff3
+Entropy.2 = 48fefe997cef3ba2b73e76aaf003590a
+Nonce.2 = 19db21e0d05d99b9
+PersonalisationString.2 = d81759f6a2892c5b2d51b85f94d89872
+AdditionalInputA.2 = 700842841573e6aefc1fcf20aa877416
+AdditionalInputB.2 = a91efe1415ecfee71df068a16baf034d
+Output.2 = e6bed78be09215d9d1beb0b8b0889e677962a61bf901df09ad8e36ceec052588b57cdd445ce5a2c57fd40b7432860fa3c1c97847d790abd5d704eefc12ff1636a6c999c4dae9400a7c968e84bc7ec3e6
+Entropy.3 = 31c4900e6e37250a80db3b59cbaa10ee
+Nonce.3 = 8e194c494a419d9e
+PersonalisationString.3 = 121674898e64775d344f022ea692d9e7
+AdditionalInputA.3 = 06620c1998de3331b92f2409e8635861
+AdditionalInputB.3 = e0bc045344e45927364b27d9fca2c53f
+Output.3 = 1b6e68ec91ba9708562aaf2ce6e3b499f42a1b72b14e5c20a88e373b85cbffc924da24b4c08836b7a84927064eb0cc824f2dfa0f5aa8d480cbbf7ca7508d96370d92a59f8137ea39167a37da7f75c89b
+Entropy.4 = e8b41a5af5c4515282f3078688be48a2
+Nonce.4 = 4c3b5a559ceca51d
+PersonalisationString.4 = cf1ad8f0839817061ba534e004f61311
+AdditionalInputA.4 = 3c783aa5e096f5305d84aaef0de0865e
+AdditionalInputB.4 = 62271e8341725fadfc41ef136492c6b3
+Output.4 = 48a11729d198f908269065bc852d062b9332047535c04d8c0ad0b6b99e9a90e686dfca344df68c7bb72ecbc739634519077fa6f1f00e8df4e3712cfa79ef4d2d7e950085994bd553502f673f8ffec17a
+Entropy.5 = e900d8f9803f7fdeb4fe5222d99ce8b5
+Nonce.5 = a5412a73d59ffd2f
+PersonalisationString.5 = 10523f20a690465f7339f66f8d91f9af
+AdditionalInputA.5 = 754fb2b62ce1791c0a1731eca8d006dc
+AdditionalInputB.5 = 66a8fa0727f4f880afd4006574a51bd8
+Output.5 = a72c09f23de8cdab9d6067b8ee0dbcbba97306ad711860f7958d4c5889e61549e30fea415abcb6211d0ebddd27da0ca1104a4c585486ea495edea87257d2b75462504538f21d1803f2679128f8fdab7a
+Entropy.6 = 395b1da917188371adbb0d5027dfc2d8
+Nonce.6 = 7739dd160f53bf02
+PersonalisationString.6 = 3e864c1287dc15ee2c585faed12226c5
+AdditionalInputA.6 = b406d8b89f3d602560257fa4760316e1
+AdditionalInputB.6 = 94b72e355fd12a0834cd2448f4343d16
+Output.6 = e0a3a7c36b9461a03f75356e588b6434c1ea08d9168358c8287e7a3d99fc15530e1561d312c741df9e8fac58299ebde18fc90ad8a952c8984ef31dcdc9a6023d5edb4bc393b379feb9a918898d8c468e
+Entropy.7 = 0acd1da3cfebd6c66d4f2ac36aec6dee
+Nonce.7 = fba4c200ff691bcc
+PersonalisationString.7 = 6afca0034dbcf632c815e33e69f73340
+AdditionalInputA.7 = 0f3deadddf2c53bfeedb47fed10cf4e3
+AdditionalInputB.7 = 326ed610fe038f5f168cf7ee4a1ef38e
+Output.7 = a65ef722c91721baf5e609ea129a3211d05c53677a576ac5552e0d032ca17228a1a6cedc41a06e5add7d9c44c41110afdf5fa27f9cd4b4fd1b65c7a346c39fc3c22d1e042e396ae19628b2ee4f3cb5d9
+Entropy.8 = e9492967a06e84c80bd049fe9f2d08a7
+Nonce.8 = 287d30dc972ffc8c
+PersonalisationString.8 = fa60a894d9955fd14d368aefcbe50e67
+AdditionalInputA.8 = bae9d792a1d667fadbeefe98d645780e
+AdditionalInputB.8 = 418202160d92cb59d1e7378838643c1e
+Output.8 = a6dbefeaf6f859d7ac4137af798caa8fbb4fa2fbe496986cdc8c86babc72b1655e98e52c40f66681c4d4cb1319b3cfa97da73333109ce414ce41c93b1e62767fd26a757eb82dce2d4454f8e9dffb791f
+Entropy.9 = 3a655b77527c1524aa13c71a3d9e1916
+Nonce.9 = 6612c746e4bcc0ef
+PersonalisationString.9 = 8a1c402e8abc71ff11d7e4738f14b00f
+AdditionalInputA.9 = 39af3ce99eb8e9ea5964310c27c50673
+AdditionalInputB.9 = b3353bf522fdf8ca87e840665db73a1e
+Output.9 = 2be29338c915bd42397d73907d70f5d95ba9bff499d11f7a27399db66470e26598cdacb5ab06d1d13757043c8dbf56a05d30392cc3b21f4210cc141652ea42b02e4b957c846efd214a4be0f015b514d0
+Entropy.10 = 12420eb02fd4383263814968dcf60791
+Nonce.10 = 377a3fcaa2670b8b
+PersonalisationString.10 = 4efc5926bd999ad46c30e9bc7296b2ba
+AdditionalInputA.10 = 5c68c0f079110476c14877c5fded2b7f
+AdditionalInputB.10 = 3f1747b2a64bb371eb566a0204c82e7b
+Output.10 = 1d73392928438da9e9f7a28fff3332746f7ff90558c987383305c8db8175c9012debdaf73659fdb4c40417b5d8daa4fef8b42696359f05584542d14721d68f8ca7807b751d649ef24eb42946c1c5003c
+Entropy.11 = 847b94cbbff8bce709530aa019d10281
+Nonce.11 = f1266d652c327aa5
+PersonalisationString.11 = af28af297ab298a838616f1fdde1ceed
+AdditionalInputA.11 = 09334ce23df4cf7629794ac016d4ab61
+AdditionalInputB.11 = 592f2a1f075ae69f310827d15eb2d6c9
+Output.11 = 0035684b66bd9e73cb23fb04fd47c4e1f35467031acf05dcd9771a8193180d7c69bf87521a1df19bf847c659a6c4cdbc0c21e2b9cb26034cccb902563d16c63f39314d8cb5950487bc378f775b8cfd8f
+Entropy.12 = 3daf9f110bfe02bb4b1cadb61f79da85
+Nonce.12 = 1a0e5f88d50fd86e
+PersonalisationString.12 = 16b320d8bf28c72642aa32d4d9798c4b
+AdditionalInputA.12 = 153ab430f0750659fdffa6f98c6ea9f6
+AdditionalInputB.12 = 7eb0d6259b237b7c38728fe7649e643f
+Output.12 = 92d066eb16cb8753630888e44018592880c6253576531d90d042d1be9671c1b78cb84261b5ce0b12f3fc1e12a88f9799cba1a8a05b1cb0c58925a7913ab274f875cc71c47403fb242f85ae858ec58505
+Entropy.13 = dd71993ab8d7f4de58f4a94aecb0962a
+Nonce.13 = b617be934450431b
+PersonalisationString.13 = 84c695d83bc7d5ef902a583bd799f2b8
+AdditionalInputA.13 = 13ee6cced402ef8c8543ec3ac16a38c6
+AdditionalInputB.13 = 9d0a0fc678849860320568f9b19053f9
+Output.13 = fbda060bd0d00b0c31c8cd13507c36579e6af5e156c96bd860646b83e81c2437f636deba7b2ef6e5958fb3dae265934476a654990d08926deedecf1e43a41ffb61bcad560dcbce858c6ac3f748955660
+Entropy.14 = d77ff86d653f38975322d0b7f1c02b6b
+Nonce.14 = 4b2d2a31b1367c86
+PersonalisationString.14 = 842108e074fdea387cfe71526eaac9b4
+AdditionalInputA.14 = e488e16f48c61dd2152afe925eceee92
+AdditionalInputB.14 = 12c692abd90ab485f4d9499680a6893f
+Output.14 = 8ba04617a135d8abe0c3c0a170e7472e7ed750eac706e5c3ed8305d6f6f8a1a53e0c52d4853b21ab8951e80970b426008ae11952ff364817b6856ef0810860dc65faea487b5d7c3f3d63fd443756d2a8
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 66b3c78fa8c86dd891aab0e53f3606de
+Nonce.0 = 84142c2d1f1cda88
+Output.0 = e60d83ed6bbe75351f2fbd356a4bc8904b970d45982edeb898d0f2e6f4707faf497471c3df7460783e4beff0015d23d8c7ba270b6f562c4a7b76c0690b2609ade3fe372b53f1c5ff4d5f0dd9a3966825
+Entropy.1 = 22bf7d4b28e0b0cd263c114e594ce5a1
+Nonce.1 = 209eab8979e7b59a
+Output.1 = 4ca3bb37cf63c589edfd062abd77116542b5b753c3cdca97497eb6e13beaedde8c43beedbcf9a72cc8715070cbddf0f6ddc6146971b22ccdb1e3c9ee730da1b2126bff2c3cb0efabc871fea49470a7cb
+Entropy.2 = 20807f2c0e865514f6fcdbbbaac59895
+Nonce.2 = e60baa003c2c18d5
+Output.2 = ff897d957d8be86391546129ce6c98ddc43806784c24a0d3cb3080e9eac3c20605ff6d1caa24bd038d8b683f07b24f3846aca8236581b4c4d04eb8b87020c07b55888347a26382d62f9d10d4121a21c9
+Entropy.3 = be8d9fec6b80914c70a9c28ea6bfe7c4
+Nonce.3 = d6f7da93c2693341
+Output.3 = 7aab1f408b871a494b9df42208d83bfef1ba6476a51cc2f3b70896816b1c1e410d506aacd3e1f8916dc8be0bce42f986f67bd2f9f02395fba1ffe499e5eef70b3bf743f519fd8ca1db694f8970f82421
+Entropy.4 = 2958128df4649e1ae1f0dd5dd3740ce9
+Nonce.4 = 181ce194bb3aa4ec
+Output.4 = b7cda6ec47ed3ff8dafb78ed04fc5c0ec2d6ccb1869422665dc4bdf9842596eee00fd5934dc17cbb17c57fb970ce9a9bdfdca75aaaa4263a875a2ed012b6d56049f13b51e2a44acb37f922f8d13a4d19
+Entropy.5 = 91eaffb7b63f5dba7824d562f863b053
+Nonce.5 = fe530ca5b6e3243f
+Output.5 = ea3708f56e3a515b5eef9e361c4e0a8c385f38c17e8216f42a2db58e4ce5b48c7521b2ffdfe2e0be55d430150b6a2121de11ca7197167ec0d3bd6383be4b3b47d9c57fc224088d050114757115eee002
+Entropy.6 = 22c89c671b478015cae3da530356852d
+Nonce.6 = 9632ebd13ac406d6
+Output.6 = 861aec2488df56ea7f0bc4bd142c9162ce6a64b73912d94981b715aa14dd1fd649ad1d86fc4a5365c2307d9f6771ddfdb72d6d89d98a10341e440562c761c9ab1190529bf721db2ac0d00cfb618e34a5
+Entropy.7 = eda4dd917fd7765a8b102e831c39384b
+Nonce.7 = 255d248cdba3cf78
+Output.7 = 83263fec6c1c70cbc088e13dde4de31f142d7d2042457d79f0c033f0d790621f75823c55e41e9a4461ad7ccddf52377340d51f727b0f9b812d151036cfa686bc28afeaae995e130a1ee0dd11104e5ab1
+Entropy.8 = 4ef4978078ec29820636bb177ffb4b2f
+Nonce.8 = e4c9c345cedfc123
+Output.8 = 22c7eca633dab483688139397a2cd8c426506f60dde1bfe5e4e799999087f7f2046f7d8e0406179d4859ff619d70ce6db7573ec4a2085c4824d7e82d4fefa6fa43cfe23b245dab95c624866a72c167a0
+Entropy.9 = a2680750d8731cd093d6284f570466ad
+Nonce.9 = 7658f300666b66d2
+Output.9 = da6cdf3548ef1ae5955814e36c73b7aeaf5b4d533b037afce49bf72bf0416c911825ae05fd97cc5fed2301cbfb20545a20d56096aa474a39b3dabfc888a8a65ef3230e69f2ce5b0d7d30738f708d5f58
+Entropy.10 = 238f4a64db2cd8d140f9fbfdea102338
+Nonce.10 = b19af3bc12552fbb
+Output.10 = 27ce1efb77df4a848f0eb72451c0771f08b80f45e290091f8c3852fda0b71b281d01a070b380daf7efa94697806d3d138e945113002a628483dd7e341c7a9a6f836d99577b39fb0f9a732f14459595fc
+Entropy.11 = 1a3a0333340f1d67dda715285bbfb617
+Nonce.11 = 374b8f8be9f2820e
+Output.11 = f28cd91365d02d204fa71fe86ee40fb05f477864be556f2e8e0f212dcb1ed98ef59adde485cb28afee97ac44a789626550d533e6cb8a13e0cd039a7d56f270b892df742c499f5c609ef74454f1a8cbf5
+Entropy.12 = d622c47e9838e0fcd8bfb209f42a3c29
+Nonce.12 = b29bba7cfeba90cc
+Output.12 = 9340bb4692e52792693e8edc0c2883f54f8b93942ae36f06d5532964f1f9b581c02a86b9520566f5f796e3cb2194853ed9ec18b693bc7ac9a83c0f8db896d93fa20953d459afe443b63d1241d0b47cc1
+Entropy.13 = b54fa4fbefc63f96a45070dba669c3fa
+Nonce.13 = dc9bb5e014df5f2b
+Output.13 = 07452aa85d2416bb091b9cc8f49add2dc897465998782a01e628e9fed6f0f185fd5d412dc40625dec710ebf26729d0346c344ef2b1d3d42a9ad60f05386413e40978d206cf3fc8ecf40950a280e4477c
+Entropy.14 = ceb354444d1a29c0c3e8a1cc24d02846
+Nonce.14 = 86d3fd9fc51f8b19
+Output.14 = 6f90ad611987a37bac54bea0782ac78215b7d17ecdd3991a81a36d0e263c6f0dda2c102cfba56b26c7b74b5dd2548be9bc81c7958e9d19821583c6f388132b9e19ae7609add9a296c1e92d66a2ef5464
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ea97cecbcaa4ed7da13becfeda6205b4
+Nonce.0 = 59315cd461663fe0
+AdditionalInputA.0 = 2b4bc495eb171e88bd9f63427080fa75
+AdditionalInputB.0 = dac97bb5116f63bdb72f29f46d38e57c
+Output.0 = d7536dab2b3b6c7186443de2a7c69e6965a09ca8c70f5da069eaa9d1b9ffb2714bda751e479d837f7de4c8c97bc8c14925795ff1983af71f042df3c873e8c40081b9a42053d42153dd1680bb2e8a4556
+Entropy.1 = be8bb186bd76c6e3c2aa016785ef0c94
+Nonce.1 = 0cdf980a9249180d
+AdditionalInputA.1 = 5762c6478f213df44118a872a761623a
+AdditionalInputB.1 = 984475db5403d4acf71bad13567228c6
+Output.1 = 1519c0132bec9881f803fee16fccf04db11da71057a883fe268d3c120e41b6ef8630a191adc2c9a4183303966f6f815a1cbcfdc22edc1f95bc82076ab5261e8ea749660dd3a8f1077201284a752970a5
+Entropy.2 = 8c3f3c3ad85d8dbf0b755714477b456c
+Nonce.2 = 69628bcc65bb1328
+AdditionalInputA.2 = 5d85f4408624692f0d0258dadeb70e16
+AdditionalInputB.2 = 4f943e043dd224db1a144ff74fe913ad
+Output.2 = 1e39687f18b08f56bce6c2022e5a7de1b04ced771630efeb32b6c4a125ba83eced08084c9ad179c626ce930704a060b25d15be032e15ee67695280dac2e2b3864ad308bb54f9b60b0f1bd9212e0321e1
+Entropy.3 = 5f5a57c0e78390ba0e9aa6073102a563
+Nonce.3 = 4678275a8b8dfcbd
+AdditionalInputA.3 = 1e457cd70484f764fd44921edd931a93
+AdditionalInputB.3 = c3dc45c220b7bc21b318053f3629f56d
+Output.3 = 1f582cec88d71acdc1544a89918628e9abb9f58b8ff8b96259df55bb1fa2b5a7529c0e790eaceaa8f4a81f8622698ebfb2db9da255a3f2b45156a4219f6dea2498d8dfff599a2d0c0bc8f0fb220dc6d5
+Entropy.4 = 90ada55bf6def39bf8f61699e7c45834
+Nonce.4 = f034db6d3251b3ea
+AdditionalInputA.4 = e5f15880935ae775fac2c15de20a32a9
+AdditionalInputB.4 = bff526e108b7818d5a30e9b0626a8794
+Output.4 = 78793871b3d29667cedd4396389070c8aedf115a0cbf3a4ad2eba1c3bca058f8c3dec4e23c6353ff501614ea376783e9ecd8396910f04fb7005fb9f279eabd1b2620626499cd7702f41e781fd3413d7a
+Entropy.5 = 467d32153d4503255bfabbbbe445b388
+Nonce.5 = 182b13922fa86d97
+AdditionalInputA.5 = 84e961472125df37396be2d8f4187a9d
+AdditionalInputB.5 = 1232644aaab0b9a661fa2aef5976dee7
+Output.5 = 204ab49a983dbdda27bcd1a0b83dcd2333877d6db67d6c310d492c1827274e34226efa028870c5c125656dddaa77babc47db6bdafa3c2fade12d8ec5f3c8b81f81b1e9eef38f33cd840234d39767a97e
+Entropy.6 = 1d22fa6cda79053b68bb6ba98b985a52
+Nonce.6 = 2f7d01a0fb26145a
+AdditionalInputA.6 = 6b786ce43da77a58a531fbac7493ec2e
+AdditionalInputB.6 = 917b220b809793a4193827e4fbf0db70
+Output.6 = bfdc3c800681acb5337bd3ad904e26fae6174c3e576579c495ccce73ecabd54a5e14e6a8980f6e8fb2cee621343092d04559451ee5e16deecbaf57d1bc4cb5087b3291941ef7e6c6f511a869ee2d57ee
+Entropy.7 = 54b5fdd7dd2e7e1c4f09a6118e4e60eb
+Nonce.7 = 8162379c2b3dd97f
+AdditionalInputA.7 = b2ed5078e176447a17986e98f9827a43
+AdditionalInputB.7 = 5e6a483cc9f23e5c9d96952ba7cf105e
+Output.7 = 867ec6f925c5227c7483678b4b0985f902f1fd87f22edae2a5adaf85cc771b16408ed646778d8724370bdb0137a872b76994e874de7fc2e724de16f5a07dc949d1c3bc9e73a4a0c29905c2b1cd99df48
+Entropy.8 = bb20617cc0f7ed8ef129a7a0e4784c58
+Nonce.8 = cb3b83d613cc85dc
+AdditionalInputA.8 = b1419e3dbf91e155cd3207ead528b23d
+AdditionalInputB.8 = 9d5488ca664c2b1979489a4cf7420e8d
+Output.8 = 97ee02e386b01b929bde522e5f198c85ed031025f4fd3f805c8aceab9d43286f7ec71422828b427006d035df494b86fb9e710901651897187e1cdea5a649418c8724f0e641269a03127252b29d79494e
+Entropy.9 = e9ae7fab36e16442fc6f88b7d890d73d
+Nonce.9 = 37f721f2b227f172
+AdditionalInputA.9 = 63f92ec70f47458ca0388acb1dc551d2
+AdditionalInputB.9 = 853311c75063ada99d25baa6484fc953
+Output.9 = 2ca79459fa301219881213cd3e0c14cb004d12e1b0c776fd4f0632f91673cb67a66522fb724be121f8b46cfbd122cfd2b16d36f27d1735e5f1732acae85bf20fb4b55c53bdc9309062a6649fb50fbcb2
+Entropy.10 = ef8b69c2113d3e8387500b8e91e6d077
+Nonce.10 = a4b25bcbe92a9e5a
+AdditionalInputA.10 = 3a426211e76c0246cf2582a07e5ca681
+AdditionalInputB.10 = d8721b09b240486761ee0c670e5af473
+Output.10 = 055e5f058b054377830ba4c731617f9acf164fc5e25174234e052095410b91243666ef57335329908943c6d88cfc00ee3f0dc00023ec32cfc490e82cfbf435e388949815dfc005fc0393d1d5eff7fdcf
+Entropy.11 = 1c98412f62d9220ebd841b379128b189
+Nonce.11 = e1be2432431e83eb
+AdditionalInputA.11 = 6b43fe770e72497c13685aa558727f2d
+AdditionalInputB.11 = 9682fa8b498d853f3b436498aa68358b
+Output.11 = ca1079d686754c553882ab963dbd43a953bc76bc779b945cf380ac6d38d21244a1bc146320214041bbb5560439fab99721ccdca64f79b557f6cd1e051c6b41d3a3bb867caedb4575749c5cd451b695e3
+Entropy.12 = d7f75f8896cecbd64927320dbbe7a71c
+Nonce.12 = bb0e49ae3b40e28b
+AdditionalInputA.12 = cdd35d76e4dceceae918a3f58dc11ae2
+AdditionalInputB.12 = efddd6121e3f27665e0e585b035f771f
+Output.12 = 236bf72559c48ba0ea7d0d8a6c76e06dbf966af7cc29b168fd798aecbb00ddda6e82cf03d430e083cb4fe42a9eb547e2c82ad0dd62882c1731de37e8874419e896a4a53e448e98a0b30887a7fc8e50b5
+Entropy.13 = 4084b05fd62da1890245ed6bcce6cd72
+Nonce.13 = cfc362ec0dbf23e0
+AdditionalInputA.13 = a5292a172339a4291fb30b9a3325aa97
+AdditionalInputB.13 = eae3dd073edcf84caac2f6161973ddaa
+Output.13 = b030974cd3f0a21251821be65a0a2c9d8baacaaa06804b6e74bfe00ba0691a055211acbdeb2fa7da9641ab4f8bbf74ab3032a98f2417697fbdf80d74887752072659f817f168175341ddef5b6efd9fb6
+Entropy.14 = 46ebaf3fb0583fc5b8013e14584ce717
+Nonce.14 = d5d68f69567cb290
+AdditionalInputA.14 = 32d09b604a65dc8daa35cdc34141b751
+AdditionalInputB.14 = b8186a294c7824b7c550c1054badec00
+Output.14 = ae9a091cfafbf0e74c2be8ad4b984e824a24e65ba7610b0f3ab1750e2f12de1620db6bb8c493b3d8b06ab78e69cf2dffd73d4322a67ee7725aad84fb458b8f26cf04846850202e53c874213221e761e5
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = f0fd2199c6252628639976628cb71c39
+Nonce.0 = e2daebbc0ce7a183
+PersonalisationString.0 = 5fa5eee4f36f5d42f593c57de87543ab
+Output.0 = 3e1a75df8612b40eceade7a8c73f0c11ca4046a3a13e159af3fb9b969f38994fd1bf6896a268125555934aeea0145a8a83a780f2d71c12689caa9faec6d0d198758d4a0664250bd4d89fe9614adca3e3
+Entropy.1 = 75b8f66db02e8a39d48ff6bdb864392a
+Nonce.1 = 19883bc681293991
+PersonalisationString.1 = 1c5f890dcf7c4c81fbe59f12dfa487bf
+Output.1 = 9a4d78b6ee54bc200488fbc522d967c6e397b12f29dedd2a44b4c2d2a5e0c5de7d19a5cd778fb0a0cbe1d9893865a378380d12b0582c35befebaa135da44dc08403165a001bb3180cfa5644992112f26
+Entropy.2 = 8ddc1d1aa73c797502f971bbd59efec6
+Nonce.2 = e5b54a7af76fb120
+PersonalisationString.2 = 37ec2725347b4908abe8f69e22836d4b
+Output.2 = bd96549ed8c094bb043870424d38a71479e44a3f47e92ec010a1018ad5eeafe832fda541553948c975540ad8e73acb364868149504df3574a04b1c34fe7bd7009211c27f30cd34c1fdd410b83201947a
+Entropy.3 = 3c03464129b13d93e4bc07f5731a59b6
+Nonce.3 = 5ffea12fd5f62dcc
+PersonalisationString.3 = 588204a022727afa3f94ceb7bb8edfbb
+Output.3 = 17a2fb65d66d8a7f31924638a9445136ca6e5bdc3599a5501ffe976289297be9ee0028215901b4dfe66430fca4b0e4c8f0e0c74d9869b58c7b67b5fac560349f2c60318c79a7f3c143c5f61caa3714e5
+Entropy.4 = 05b17d9962ee6ba8cfd6f5e849b8457b
+Nonce.4 = f6d7a5aea88a24be
+PersonalisationString.4 = 13d9c60de4b04fc63d07485d0eb2337b
+Output.4 = 80a296e2082324e1d7a850abb5eec23694ae695345d57f07f3bc46c42e5d8012b37dadadaca5f1fcb0088c590050589e5b10f8bfd96722ec0c567b90bea565edbedd415bab2fa630d94738c444db14dc
+Entropy.5 = e536cf0138566d88525565c6b6cd2f86
+Nonce.5 = d048a518569027f9
+PersonalisationString.5 = 68e2286ed468333ee27c573453569994
+Output.5 = 615384d1982f75f8e8c008fd656b3be095dc6a1b15725cdc2206abb5b0e7d72514ee4f477d120a4b1fa81c40ec88bc7cb4048df83c94c7b2b6f7fd916ffc176781517d4decb9b8abe53c2289db4b41ef
+Entropy.6 = 0f48eecd9913b7104ff8b8800a2b1316
+Nonce.6 = 6de036fe5a201b5f
+PersonalisationString.6 = d00c237030adba874e1e6bcbcf2a47bf
+Output.6 = 36b76562ae5dc30545e6ce14ddbce12330f1cfea88227b8ec11654e62b4e81063a5574758163f4478a2838af2583ece2e69bfbf1450f12ac6e37a6948e7ec36716db22c40565b1a16a4b06e26659c34f
+Entropy.7 = 662930e8bae14d3be87d9654635a2022
+Nonce.7 = 3836f4d7a508595d
+PersonalisationString.7 = 7460d16da01dfe504870de63bd4cf60c
+Output.7 = c99b9cea7f7610d54632d39b457525dff4f01c57989f50949d1857998f4aae14aac57a1cc7ad5138e970ca678a7d4cbd42c9d961f15b45665dda08ab2cb1eaff6890c7b62684e294f6b37f89f1119835
+Entropy.8 = 3ef096ac9e72a961f56890f4b523f95f
+Nonce.8 = 1c100401a49402cb
+PersonalisationString.8 = e22d6f4b7fa50463db12138044ccfd37
+Output.8 = 4138091774bbf394d90b33c1b66017d842c7c5e7221f57f55ef0d60da4398c50c7d2ec9813177673b9f336a0b85a25f88e2156ea5fb2250b95ebc879a5ac58584af8094c31d771835e2624d11db50118
+Entropy.9 = a30092b4f481c74efa85a2836a92dc2b
+Nonce.9 = cd22e3e3e7021c08
+PersonalisationString.9 = 8602bf589cf670e6ba787b32153b2d3a
+Output.9 = 678f1bcedbc85c2002e04cf78ba8a89e7b1d56fee420d215a0fbf33e301de3f075acdeb3363b3c6c5d73ed1d5a284375fc3b8b4c73a27405d75703ea6bd9b295148ba9b703639cffee9b378082318940
+Entropy.10 = 2516c22aa5aecfb06594db8039fbab26
+Nonce.10 = 2b52ac3399c0d7b4
+PersonalisationString.10 = ed8cdbd10a1fc7c4280f399a93b8e47a
+Output.10 = b926bdf438c6e306a9ac0084294c1a97ef1368e106244edd4066248a20d4f8d601e43583b682afed5189f51b6f06ae004414cc668c082f8845a7075e5d3923158fdd8377d17351b9d924c8b8f38bea4d
+Entropy.11 = 35edf013d80eec2d3b785726629ee074
+Nonce.11 = 149c1260bd2b1d9c
+PersonalisationString.11 = 9212a95a4cf0855e3ee8c5257914ea36
+Output.11 = 910bfa602583b1fa5c05918d3453ac7efc163040cd345fdd2b5b342d0dd6f42eb2f847932712cf1219ae29766532ab16e6d8112cd6feac569f3e9942c0450b9fcca22cb9504b289094c96d5d1a7f7c3b
+Entropy.12 = 88ebea4ad88d9e35187cc70503d773f5
+Nonce.12 = 53ad0f40facc3f98
+PersonalisationString.12 = 8095d8ab6b617fa1d115d1bfe517f4ef
+Output.12 = 256c837781fa60cd1f775db1d4d7b765adbb3bb5dacc1716d39efd718f8e999566f09cebc1d8d038c63a3192d6ababf5b3eb38f8795662be594e63589d7adce57884ab62dc4099c49c1d25e88a99283f
+Entropy.13 = 7e9d7f2d749fd44674714d0f6b098b47
+Nonce.13 = 2970b716b2116895
+PersonalisationString.13 = 57acd2520d9ebfb762b759b998fe5f36
+Output.13 = ea846303d9e1ac8469fed0163deb49c6d6f69da2443dd31b66c72855ac30e7c02e06558d78e733d9f5a0f6e52763639cc2b8c4c0e05b8c69f6a3dd84063997663ed5f4e690ddbb8642380f8e8c9aa8a2
+Entropy.14 = d20b5ed70118ecfeb2dcfe8cfd7e6b6e
+Nonce.14 = 8368ee0e29d35c67
+PersonalisationString.14 = f189a80d5619f53cce878ed57522a468
+Output.14 = aeac5933065c33ce2ace2531a193e367f73c83fc328f61ee2627f6f3841914c6b8a3ff767f96b3c3b685bac931af9ec10c6f3efe25b5109bb647b120e3a3f6971a4ec41f4ef0c7a900fdb09d7ff3b247
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ef3eb1e63f9878d62984876712e76e56
+Nonce.0 = f959d31650364e70
+PersonalisationString.0 = fcfe42c0c65bbdc4a29eb0b598353e17
+AdditionalInputA.0 = d218da501fa09b43ed8e2fb8c3ecc564
+AdditionalInputB.0 = 2479f4330af9910d7408404690d8eb93
+Output.0 = 5de81d92cdddb3ec236037f4dc80d6c778ca72e128411a64689f26a243fb2b6fc54411ee9f417b1e113760139ae4b2f80d7475b666af16f87badc58e53046ee605ae9606ba9743c5e57a6959bebeb3a8
+Entropy.1 = 7480afff274e3188c6c68628fc315c0b
+Nonce.1 = fd5ebbedaadb6ae4
+PersonalisationString.1 = 1cab5735b249e550ff3609efe89dbc9e
+AdditionalInputA.1 = 834ea3f15f773e6d9c27fa787aa65886
+AdditionalInputB.1 = 85cb35d2e7ccef7d22e1638554228912
+Output.1 = f8b050224ee890defaf9aa7dc50b0e3adacc51f5d2b54fbd1cf99525681876d21e5c45271f8a8e9ef89870e52142a7f990afd486895912c3d456dbc13e89b28638e9a3130e808ddbae96de74b3dc1617
+Entropy.2 = 7266e7e0a7ad0252d27b82a0289858d4
+Nonce.2 = b02aa92033b4045b
+PersonalisationString.2 = d0d22478c069deda197e7351edfd6a0c
+AdditionalInputA.2 = 36991264cbc2171d2e3fc956c2d81f57
+AdditionalInputB.2 = e4e2e976bf833695e0bbaea1d92bed7b
+Output.2 = 06c9ff2a148a9b5f080fd0fd7742dee91e5f1b4bff6fc4ad274638aca07e9eebc22d484733c827b61f47c6d0c44b33ddbbec1f2ab3ad0042dd501aeee2c919af266351e2f070cee6e7288c306b8f84d3
+Entropy.3 = 7c6c0d591b81bd601602f1f3be60a053
+Nonce.3 = 84e2d7b9d80af9e2
+PersonalisationString.3 = e96d183121239ba35056264e73edbe79
+AdditionalInputA.3 = 673f409a0e133c6f37f2f3c3a30ef0dc
+AdditionalInputB.3 = c26810121161f3e08c854c299a3c5b45
+Output.3 = 7b1c784cce238da765184c6fc03f2bf582d2652c5b763d425b5be932bd3d7565aad01eb90213d00fd1d38c59dfb3d5cd92cf8a0b676de1c113d7c567ac92b852851210b6207e484fdf4a3a6244a2ffae
+Entropy.4 = 5f6ad5aefcc39b3319aa7edabd5c3b5b
+Nonce.4 = dcbee75db307b6f5
+PersonalisationString.4 = 6bc3fb023c6fd9ceb65eacceaa5c4e76
+AdditionalInputA.4 = 8e9ba1a1f6a7315b7b5c557ab00c68d7
+AdditionalInputB.4 = e54bfbf4415104e476cc9f37c50edea7
+Output.4 = 3371866666c2cabf028f888ab12b6aece43a7b2021d8098ecc423c3e72600bf49aedc71d24da4c7d992a7ce15896f7ae11b324fec93d76150b13892b00e911026ac8e3543bbbd0caf1996d9e07b049b4
+Entropy.5 = 7f267c4cb07d85bac0614dddd4d89d80
+Nonce.5 = d819ac8c6b43fd61
+PersonalisationString.5 = 617d258740d8ab7cb2c632b6372ef3ae
+AdditionalInputA.5 = 3a299fd07e8611e1c3bbffac001adb2c
+AdditionalInputB.5 = 94f5bfb53e3203b212bffd88695cfb58
+Output.5 = 468bedcbb2f9c6deb8141888a758bd7931ef128de4e678be9985298c2664d33999d68342a0747acf18dffcabc32a0c09ce7c6522673b6739efe66cc25b28c06e8677ab3c6f1e3840852d245e0553ca47
+Entropy.6 = 858923f05c1a1a9370c495fc8402589d
+Nonce.6 = a88f688f22e8bd53
+PersonalisationString.6 = 4cc68f42206afd82608ddf9f18507398
+AdditionalInputA.6 = 4670631a5d2fbd86f58487603b880065
+AdditionalInputB.6 = 34f7b4c92ba1aa900f7bc676c28f4283
+Output.6 = a391bb3c2f2cbde7dabd18a72b4e29b3b5c11d07c5c77a6b34e930f2804d3abd5af45f4102ad1e41da512572ed94d9d3317ac9c76bd56a0f10ff10ca7a8beb592dc3c8a017030b0b190a7abd506ea59b
+Entropy.7 = 317ddfb1a01bb0e147eaaed375999730
+Nonce.7 = d7c5a27ebd9209ee
+PersonalisationString.7 = 8d535a8d76042233e4b2bcf6ae3a7142
+AdditionalInputA.7 = b986568460caf36f3e83cd27d79fcb69
+AdditionalInputB.7 = 1a4be6766a5899a21bea3287fa21cd88
+Output.7 = 3e1c688bb6b680502061514b59ae90809dfc72182f54f0e8377ff50db2a86082f99e9f4c9eac9e3c5f06eec49d9e51434028be4e08f70634b1339db703bfc848ebc660a06ab8440409ed1ef4175584cc
+Entropy.8 = e3dd2e767f5205b6d0c4908d465cd2a0
+Nonce.8 = 4e356c171709cefe
+PersonalisationString.8 = eb84e2e5b2208882d372f266bd1b5ba1
+AdditionalInputA.8 = 831868d30c12ad5a81e39f74eda9f87e
+AdditionalInputB.8 = 0e34960f9469e23ed4fa285edd6b8371
+Output.8 = e47b96a306a4079a1a79e7e8e93d8a5e2f96fd995a02be29c4c36f980f2342aa949967a3a4f312a702081ef7bd959125287411f96ce647b91b56ee932e5554d455703faa6abe4109436335c4d2312b77
+Entropy.9 = cbff42d1361fa6cf283ea30f49f85abd
+Nonce.9 = 82418a778aeafccc
+PersonalisationString.9 = 93de9731c0c71807984681699a782798
+AdditionalInputA.9 = 7d11ebedcc74e249b27ab30987539792
+AdditionalInputB.9 = dd2c3632f573ebdbbdb5622c04b31ddc
+Output.9 = 12afcb023c29795c6b3deeb6558d59c7a0739d499c4135c37ff3dcd0022c7515b1f8777c1f2ebb49322f5dfdf9ea14151d20869b5ca145feec0dcff84293ed31557744cc74eac3b15cf450d19d1136f8
+Entropy.10 = 9c501a2207d416c084f8c6ba022a7a35
+Nonce.10 = cb44767de7042909
+PersonalisationString.10 = f3232ca9def83fbb545e2cbaf80bc806
+AdditionalInputA.10 = f4f676890634e131d03750e93b25fae8
+AdditionalInputB.10 = 48bbaad191bdc777937444bd2334dacf
+Output.10 = 200217f9151c702840d9fcd13dc30b993f1ddab2291791a92ee562e52abcd5358aff1ab24e63f7dd1af270fd1e3e58c4d400252253a80d7eb0501e4a4113c06d945bce640b775ad657bad105af60280d
+Entropy.11 = a8c68826ec8254bef24517adc8962f0b
+Nonce.11 = bd514bfa52bcf849
+PersonalisationString.11 = 00072c1d2e7670bd38f7e4093d894b51
+AdditionalInputA.11 = 351af55b61249dbae60adee7156cfe40
+AdditionalInputB.11 = 02d997aae48047eead333c640a10958d
+Output.11 = 9e3dcea0562a8c76a569abcfc805a178825d8de5d7ebccaf48747a68d5e5480706ef6acc5fe5e0e24ca9362ab23df84ca629876b23bf4bbbe9eefe58c93676b47c582c1a7181f5057495e83d30ef9844
+Entropy.12 = 0e579bc11f69b1d106e92c0a31833aac
+Nonce.12 = 8557f80c6f1ea349
+PersonalisationString.12 = c6f3848b26fdb4b4402b4f9516e71145
+AdditionalInputA.12 = 1a068f37e9c4a7a155b8b73eb31a726f
+AdditionalInputB.12 = 8c3597d23da6cd672b6ec873aac9502f
+Output.12 = dd605d5f8b193196ad843072768f8727594c2c4e741d220cb5d4e7d7001b93ced734f1a3ad263bdbf203fe5fbb07e62af456f9ef4bfd93d0c4f6a7523ac84b8088da6c5786c52c648902b972d0781c15
+Entropy.13 = 06ddcfcd7c11f7cad49e83290ccfe320
+Nonce.13 = bdd6f8b19ddaee6c
+PersonalisationString.13 = c473d3e0778927665f2e36187bd8e8a0
+AdditionalInputA.13 = d6463160605f3d40344ae8fe8d5b7c5e
+AdditionalInputB.13 = ebbab9e5e4d84227e8cabe8bcaac7711
+Output.13 = 0e57836e98299c4680bd28fb26ca848070ad83e9991f7d934c31e0ae17f32cd591d4f2eef14b2eaf95b27e3b1c75e9a0496a6deceae8fed5982d03a0baf861ee9324fc6e75093c7953461918a608450b
+Entropy.14 = 03d389e9a0fc110d173adb2ceb3358ba
+Nonce.14 = 8b325599297c0d47
+PersonalisationString.14 = ab25bef8d0097bbd42d55316af321bac
+AdditionalInputA.14 = af578fbbb8a830947e9b4e2c9e729336
+AdditionalInputB.14 = 5a69864ca39da1ba4719dfe1dc850a4a
+Output.14 = 8b846f03cb66f7e49fdddf7cc449a5f3f6ccdc17ae7e2265a5d0e39ea10fc3e6cffefc04147b773a1584e429fe99e885f278aff74a49d8c842e7ccd870f1330692fc9c4836dac5046c544be74652da26
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ac1f51d43fafea519453eaca3ebb2f95
+Nonce.0 = a6666fe26d8702c1
+Output.0 = 3ea69dff9d5633699d27fb4bab4ca972536daef15de584427384d66f00312c31a21ef02d88ec9ca79583b69fca776e2f67fc6a9a1ca2c519317d2523793dec48e11cdee28b1fc610024b03bc234619ba
+Entropy.1 = bd6768788f02e84a2fc3580a87b469fa
+Nonce.1 = e26b8c9c4bc6128a
+Output.1 = d4e900b0a6ed2c88ca0b28ee9212faf0657d28d7a53d393f0475c43ce5f0f2207a3f18cdea08d96a2a533647a69005b675758c9318a8340979c4e1d0bb46040e3f656a4862d4dbfd0780cae9baa4ab5a
+Entropy.2 = 514cb05af192b0b04435e21a13de0a2b
+Nonce.2 = 278c9a83acbddaff
+Output.2 = 31f864417ac27992788bcd5e07fff7886e969d06e747fa5c73a48a194a54f612327aecc3127b1e410a5d3f564aa56b978350e93e2b988b99a6d31cb0fd8b7406aaa2daaa5a9ed66fb746e3a58cc3614c
+Entropy.3 = 8a0899c465949b4999619c06086997e6
+Nonce.3 = e1ad18e17645df1c
+Output.3 = 39de5b2b5dff4aad99cdfabcac9d7b3c0d0f9fedb1c1f03704b3b5bbd8c8ea2cbd759b4e668d12708550bad5d5d315acec8c0ab952bf2ac869586aaa27863d68d9183960d508133e4adb9c8af3e41f53
+Entropy.4 = 5dd1da788775b4a30669b92a1c992eba
+Nonce.4 = b43aa41b02eb42cf
+Output.4 = 8a4562f76621610004f401fe72f5d1406dbe6adaebd926c2065f57466bd788306b20d13c16d1e7627cdb200c2581eb23b02d588dc4e5251d610562a084c18940f2f4d5ec306c6eee83ee257b93a749d8
+Entropy.5 = 7c4637dc79e29f7b857f65700d6fa891
+Nonce.5 = 8ab36789a68a4a94
+Output.5 = 4dfd7bdee8966c260331adc8a1763bd4d15ba713d5ce7e291d274387d59a98028b3675c5a58c237d8f40638bfe4892a16c6f76e92e8b4335f28a93ef41018e6022a9072eef6cf0aa833d80f056a8898a
+Entropy.6 = 46f15e711ddd172ed99469a9d1758011
+Nonce.6 = b22c685bd5463521
+Output.6 = b2b00d3ef6a9ec8a8ccd827f828fd56556ea3dbdc47a73a315f07253d66e14f8fa020e5bf025c7adc5f0b81b2cd992930e43e4b4e2d8dfb926fc387f9fa98c58f29f267de1a8235c5327ae85486fa3ba
+Entropy.7 = 89486609b21f4a77d44903309238cd10
+Nonce.7 = 2c65e57dc62b7182
+Output.7 = 044eb722caf85f4aa4586459925f7768a595674092f559f04d78ef6d94db382bb1ebbb7b9e10ba28896e84fa54b100715f6de5d9c313832338307cd480e7caa5b958d39f4899ef8f1e0926e9f9de9642
+Entropy.8 = f1322328dff8c7330d7408315f7476ad
+Nonce.8 = 3026a9607bc8d5a7
+Output.8 = b5fc472a4a35d59a0f298ea5fc1446d150820f8c78088511a45397f47fce79bdf5fd62af96e7d97a83ef505459aadd81c244bbe4704196bd1f3124f6d421f7a82bcf8be40e5460f0f74e6ca8ec39d7a3
+Entropy.9 = 0cadd9c27360ad9cf3de96b62056f6c4
+Nonce.9 = b2eb6a839574c019
+Output.9 = d28a38ebc8aebfc41d58116df36a3533c48c877bb8992c30ea17b46ba2945967c8178a500f271197c67e8766bb552df5970f07a76a4d8e57fd6467b4148439dc163cf700781c7bd81c1d1b2fc3848510
+Entropy.10 = 12c2b495cfa55a4482dcee035923e85e
+Nonce.10 = cb5b88622d933589
+Output.10 = 7075312c4dc21e54a2a83346ee8d3710a2eceb34c02dcdab3817f8a682cc0b1bf7b1c777cbd2af1e454ff471129a94059a253c82955b5ad9196372d1c93416500a65f962151a32c63bc6bc6b8443ac9f
+Entropy.11 = 2fea9691d8258763d5d0e86954cfd8da
+Nonce.11 = 3ef71a3017eef25a
+Output.11 = 5956ec9a16bc61b84bc0014eee2f5615cc259008bab23ad6a00ff7e36687e0f6ee90ea4b90b3c7a9e90c8f9d844c915b4caaea7c158b0e9164d98d2e9531f02f5dcb36a84bebcdbd7b7a91a7f8e13538
+Entropy.12 = 624ab76f3291da22fa54d49031fe02fc
+Nonce.12 = d401ec34a7e4ff2f
+Output.12 = 8b862d9ba4adafd17a458c585d8706f1132aeed8aa119ddaf4412a4a5716ad442c974f6fb367bae76fe0f33f84d3117887ac4592dfbc8599839b8e436fb22632fe43a8aa77ffd86d09b4b378a39c6137
+Entropy.13 = 1da2ef227cb78db77ffa872e407624c3
+Nonce.13 = 3c17de55283fe66a
+Output.13 = 682a991fe836c32b611340e698c48301c4c0b14a221f2f75e37e68b4db4cf9a26a465a8bbe55589a8a5d006093917ce859f93b0f016d43e2eeb4ed739a77e65fa5c08806ce7a89d305405a720e296d25
+Entropy.14 = b7ddb82f5664834b4fb17778d22e62f2
+Nonce.14 = 52461924becab175
+Output.14 = 8735d06e26814ee54b5daca4e1da3e321a5a19b062ec0c3afbe3b16f23332a687fadb29e65208130c3d667c075660ff70aea96430fee254c472686b8e82ca359a57bbdc3004bb3eb641c1f97e4b19e02
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 21b6808c0fc59ecd925ebe35ddfece08
+Nonce.0 = 09dd03ccac5485df
+AdditionalInputA.0 = 2272f1976f1465a07ffd72ae250e200d
+AdditionalInputB.0 = 0b2e0090a21ac372c94ce89a2cfbc5f0
+Output.0 = 165915d1ba81eb3f0b0213b058e528265d290c14d30b532a7f3cf1c3941a73ef5fe37c872d7241b1544548a23e9230cc7f2115d3bb44a30d1a34ea93bb5fed305f95ad7d4c3be5efede5a89edf97557e
+Entropy.1 = 3813f376f4fd1c6d73f3e160d4f998e9
+Nonce.1 = 95428569742d387a
+AdditionalInputA.1 = 64a733e774596ff48ded129b04d9285a
+AdditionalInputB.1 = 5b12c6915e0b86998b00ed290b901a30
+Output.1 = 6224b1ea5d097290a603b72fdb2a94dcd855fc702f9e7f0c1f4d57fa1b64e20f660beb6120f6d6ee24765b50674f1e612bb29159d09934ba18403328edf82f3530291e6172bc4b7e76e7da5db0e6cfcd
+Entropy.2 = e75004f41ae07db8ecefca47888ec114
+Nonce.2 = 1c1d86980d1dad6c
+AdditionalInputA.2 = fe3a341a5c8faff31559793f3dd9b43f
+AdditionalInputB.2 = 95ee782ac0ac3ea4d2c5148f3b37747f
+Output.2 = bf506dd70b76c9541a063b8cc4aa6f93b5549d71df899823c9b69c47d30a77c4cd6f4e50654c4955a8e5581e43be2cf46a5289560acf000bf54430a1949b5243e9a799db3cb086f08e6e1e34e54d3208
+Entropy.3 = 786471928ff558a293f4a36686611872
+Nonce.3 = dc41930c5163bc77
+AdditionalInputA.3 = fcfc99f05fe9a058c047dc03c0171c6f
+AdditionalInputB.3 = eba3d9774243a273eed091d5444a7ba2
+Output.3 = 5eb133f8f1ef9d764ce450d6d2bedab3dbc82f5a956be57ac408d6ba9251e642bda0bbcd920efee32bbe77c3abe845b4aa0cb2dd450e97108ca2a9a0e8fa9b3c4addc20bdb2ab5d76a5a4eee3e015793
+Entropy.4 = 51359dd92bf3b8c432d328aa4a6ce8da
+Nonce.4 = f844b34babf2bc9b
+AdditionalInputA.4 = 593b025d3278c32b2697076195888ebf
+AdditionalInputB.4 = ae23f51ebb06f517cd5ccd2b86cafd28
+Output.4 = 1d9fe28a9d695d14200d193636933c94ac118f2ec33c16a8a671f9c1ef474b5bcfb18e99d29ba6d55c1a07ea42958b5ff64685172cd7de24faf06510d5b9f7c84cf8955af6707b9321692336dfedf2ec
+Entropy.5 = 5672ab20f667e5918a8087681c187dac
+Nonce.5 = a9b42cfb74ccceaa
+AdditionalInputA.5 = 6f4d34dd4cc41d015d002630a57b5da5
+AdditionalInputB.5 = d571f6f4c1200b619483b69166a59cdc
+Output.5 = 6c4369290d517d4097260f88618c366a855351bf5e78abcbb23321f5f0f2da592b21024fc7e9b27d768e841e8d778d4367a0faca959a2c9b96bd2f256fbdd345ab9cdd5b035bdd7ac3c5d356bc1ed8e4
+Entropy.6 = b65bc4cfa115bcdd15730ef5f7b3d7b1
+Nonce.6 = 577f9be90f625ede
+AdditionalInputA.6 = 9e76dae1d2f68f6993e531e613f62263
+AdditionalInputB.6 = 16a5fc599f9d94e2d3717cf77551d47e
+Output.6 = 33e09a710ab41034d16bb1369e2bc157f333a3ba6dfc7300f6fe600c5245b043c5918dba6bd3bca6afcfff3325adabe550884f80b07239684bd2d8f9d558f58b520828067ee90f47b30954a2676c5cec
+Entropy.7 = 5639fff8a23ae7c51bce0744cc69e534
+Nonce.7 = c6d5632fd6899da2
+AdditionalInputA.7 = abce9c7fb00d7e4801651f89d5bd47ea
+AdditionalInputB.7 = 1da0833202c82da971e8198ee7aa0b90
+Output.7 = 7c0a2305e5233edeeda421906d8528426ccc455ccdc28f30df3b31ad8bec990bfc283fe5ffbaba93b880f9a01724684ce8e7242a26c3e9b1a9d23a14a481e5d3c75612c6be2763361a749e8ece57f7f5
+Entropy.8 = b039d4adad57680ad2a0f743a50633a0
+Nonce.8 = 0a472bdd9f6e2bea
+AdditionalInputA.8 = c539241ee05944ed0874eaf3aabf342a
+AdditionalInputB.8 = e97f92e56cde350d1901206903605f66
+Output.8 = 228361a8b6113eed3d84ed46a0573134c70d2d5a187a35b4599f2bf1820309e7211dea34d33a62dfa742a216752a9e57f33a604be3e88ea0f15f5d916d72664673d886104a7b6c3904af6d6563e05761
+Entropy.9 = 71e7d5b1845707ebbed471bc663b8517
+Nonce.9 = 42503fc9496864a8
+AdditionalInputA.9 = 59ea5dc55e22e034f1ed46d1739f1d33
+AdditionalInputB.9 = d97af01277043395dbef3a0eacd6163d
+Output.9 = d6c5cad4af95483428497f0ff0d8a30f673787f44ffcb9bf55c1ed39fa41e3f53849da76faa5377eaa832c835eea200226f5f3f0575d67514820024339e248b09111195c0bb7148facf310b593947256
+Entropy.10 = ef325265d5af25d255784e109b20b761
+Nonce.10 = 52f6faa7f37c7df2
+AdditionalInputA.10 = 7709e220f067ba161cd361639580c42e
+AdditionalInputB.10 = ed6acb902f1d0266c14f2993bdb77ff9
+Output.10 = 3b8bc3e1cab67f41841f74b0d20b87b95483be53da229fe34b47151d2ac2808ceb6e50da6cfffb14b55d0f3b846676612130a7011915b946df67189514b69c11514c06ce271dc370f136f6c5089f8c6d
+Entropy.11 = 80da5b7e5316c99ae6a21ecfe2e013b0
+Nonce.11 = 28dcd71591a764b5
+AdditionalInputA.11 = 39a165630c5dbf4ecc53f8dd825d982a
+AdditionalInputB.11 = 576afbba4f9408050938b8d204a8b1f6
+Output.11 = 9d0b9b54b9a2cb6186d43b1282fd214a00cb413904023b4820084f36a0f0e50888cb8b33f6731555595ea5b20521f18d1e94aa8eabafcf1686cdc850965911166f94115013e78d85804a634cf07a3d55
+Entropy.12 = d74921d6dfa69d7a73861016cf155cbb
+Nonce.12 = 3e49483902086004
+AdditionalInputA.12 = 4839cd9386e68298aa274b83f5ae9134
+AdditionalInputB.12 = c08d03f65eeabde5c9bf7230a5a3bf91
+Output.12 = 172b29d46e9acd26c0a38271adaf926e4ece4803f213abd6a1065b8fe31427f1f5bcac78f2f2156e7811e9c5c984f97aeffaa4519daed067ffa1975945897460548f78b67370d332af3af1f9a12ddc22
+Entropy.13 = d4a2f2ded01ae7a5c33b09f638f9ae5c
+Nonce.13 = eeab2ac971bc8f6b
+AdditionalInputA.13 = c3e727b3ce8cf2200dfc067d13c80218
+AdditionalInputB.13 = 6d4c889b91603890458277b9fcc57aa8
+Output.13 = 9defb23c7cbf32e2f895d8be3ccd9b0c6f2d6cdd3db0aad9a3a5f2f6189a441758bf1a622313a9ad7da7d295364ef857901e2229e7315b06c75598c9ce6db26a966c3dfa49df45514bdf46125c622866
+Entropy.14 = bf764151136597eef9c1a7ccff0f345f
+Nonce.14 = 29f9059f90816c57
+AdditionalInputA.14 = 7725ef70592c362d70b088ed639f9d9b
+AdditionalInputB.14 = 5ab2e0067c3b384e55a78492f0f6ed44
+Output.14 = ca095da39d9c21d7da073d9c95d2e415503b33c327d739f1838bbea4fc6f0254fdaf8ef6152e9263f46b864f39c7104d1d337d99fee588061152e623d7e00a27e03b5d16fe6e543453a31d4dafeda3b5
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 91d99c511c2f1967d31d20b313e5382d
+Nonce.0 = 1eaf7f1d0aa36a19
+PersonalisationString.0 = 31e6b04d73b1a970fd3dcd8f089e4402
+Output.0 = 1c95fb985cf17cb9cf0bcd53959972c8fd4bbc725b2ecc8ee843d55e494bc7684d1765931c173a838dc7b4344cdc14586409066d4f1d54ac214ecbe5bd139c65abe199525fa8ffbef59304e47baac9a9
+Entropy.1 = e677281e871c28d631b2361107240c22
+Nonce.1 = 87468967e455d2da
+PersonalisationString.1 = 114ba92f794518015c067f7c358c4041
+Output.1 = 59584ff00c44a0dbd15c1f35e050c184e8d587e8859cb061c8409c454b953924f5e6ee1fee4d763462dd6a29a6cbe4a373974c01d688ee5728cf712bcdc82cb0ad15419229b8cd114ac7851e37a3d7b2
+Entropy.2 = bd4831a85279fd767caff44ba26053ae
+Nonce.2 = 9e56a808711827f6
+PersonalisationString.2 = 69e0fe7b804c65bb8c7ba89a8b4c7c6a
+Output.2 = 7d1fe8c9de79611d57b51297cf1b2304591504a04694e60e21fdd70f3d782d17aea35173efa30ef2f235894d696f1a150bfe0396271fd8cba062823580a9e1de8e32d962bdcb4b4f47b942fc39849abf
+Entropy.3 = 46bdab811f76b752551a2b11b708963e
+Nonce.3 = 8be4fc159fdb7515
+PersonalisationString.3 = bc4f4d95927b1aa666791c4aa818700f
+Output.3 = c535859cef074916f7a3785537285be385893822a953fd41aba600f56d80e6efe2952f92ece5cbec15b2b03a229080de98c6ebda741f19d3557015a90ee0b2a0de9c0eb64c8b8af6dccf8f74e7ca1c1f
+Entropy.4 = 6701138a46b148a2688879989ab4da96
+Nonce.4 = 1bbd5c7f095534cc
+PersonalisationString.4 = ced04a25a8bdedbdbb28534376bb2414
+Output.4 = b4c2f0e989bd858ed16037f8344557b0cb35d044191d680cb1afcd2d8563686a92fdff5e1331fd3fc87d14f3ba10eb14ee6b16d648181392335c0ee4c2ab275881bba36c553d34810b8c689aad017343
+Entropy.5 = 9df820297bc0016d246a93cb64192073
+Nonce.5 = f2dcff78c90a15a7
+PersonalisationString.5 = 7059433f58646f5794ccf171ca188a95
+Output.5 = 06a5c61c664503469af0ff6714ae87e8a76996c35d80d45b0208bb26735b9e4630eacf50cf62ff3530214e8dedbe4240848638eb41783f8d1d3efa6399bc1d9554f5b5a386082498a33f8ea4fa5309f1
+Entropy.6 = 244cc3baa000afa7d547511770165f70
+Nonce.6 = c583942d888828ff
+PersonalisationString.6 = 53ab8f3e392696ffb6b06f45af125656
+Output.6 = 67d1735a4cd37be67e682ee5a3c99aba138b74887b90c8291e9e4e7156c786ef5626ecb2420e47d64b6a044fac951ddb302d184c5ae01f03c42ecf633a1e539fcdb4f926a472c48dd8ce30914cc229d4
+Entropy.7 = d8997d36ed9d8d50a190ed4ff8160acf
+Nonce.7 = d9b4add5ce5a28b9
+PersonalisationString.7 = fd9f0cfdb80ee581e83676cfc4fa09d7
+Output.7 = 6850db84a868eb1f0de75a3881a4ec79a1156f30b8618ca16e55175ab6f840932d21a340d9465fa12a587cff1f878627aad2e9c82784f650dfcabd12b36cdb1b10a2d1751d9756b5e289e8aa7d2302eb
+Entropy.8 = 0285da431ed1c618078e1b4ed9effca4
+Nonce.8 = f10a22cf4adb6c3f
+PersonalisationString.8 = 073b537b35c6a497e478516ed79783ee
+Output.8 = 12f8f357633b5c769665c333b975a81ed97f940f50094bdab1e278126356f9f9dab21a2fea61a0f491143978894238c04cf4956ae8ffabadb6abf0ac4efef76d5a581ed797948c6672008a8973e97567
+Entropy.9 = d6b735fda7419f43231d9051d73541f6
+Nonce.9 = 7e095b38be8ec549
+PersonalisationString.9 = 27872af730f3ab90a3a520e324c908a0
+Output.9 = f684248e039a9919773e178086deb5581052ee66ec06236a4972e4459ae16f7d5de66c7423189f12e1c9a105d1fb1500010eb280f346b45d96ac90389ff5174cc00911ec3a8972ed028f74eba8347732
+Entropy.10 = 8706dece8a595f0c4885c14695ff29d9
+Nonce.10 = 96587c6f34d29e6f
+PersonalisationString.10 = bd770a8f31f78482b2ca2e1e4b24b33b
+Output.10 = 4d30523fc574d6352bada3d2567178c702805adeef69bd6820ed97146bb30d09c16fff502089a90f9c993686c72c401825a83f094e8152af221d71d55e6882a10f4d17aa08dfbe54b263d2baae0b83d4
+Entropy.11 = 32526f30f361bcd4df5802724442b01d
+Nonce.11 = 1929dfb17d500442
+PersonalisationString.11 = f945c1e2eabc435193134628bc8c03e1
+Output.11 = e896265457d9251f4062a14f08d16ae5c4ff370b4675f20fed9511ead999a5e4ab7094ba6678e69abc7a95916676280c7f78cfbed7dfcea46493f57634e93dd18700607e1e19b78a57d1e47ba079e405
+Entropy.12 = 874b0dd42d1ddfb3d3835271f5731629
+Nonce.12 = 87b6c89eda28478a
+PersonalisationString.12 = 7d5b80247411c067797dfc10c1668775
+Output.12 = 699723859d25ab759a9b8b3728a67bf639e02b805d5ea7b6e6d614ec29728b68d6d9ed29a93ab1f1c624d3f2d5ca1826cd09cc1c5555604537567fa6fdb1f6622d29f2d81d1dd7c23179d75c43d72f06
+Entropy.13 = 5162636e7b1a5cf9b1c14d723bb3eeb9
+Nonce.13 = 21e5b177f119c477
+PersonalisationString.13 = 6513318d80218546385c2afc56e4116d
+Output.13 = c295e6515abf2598122752b24b4bb1493d821e6bb19561c2690dfbc06119c86539c0d21002d2448474762d60751ba8a58165f66fcaf6342dcd4e468363462f94149da6636c548fe5b9f2aad138a54a43
+Entropy.14 = f8a1566d14fff92e8de379d168ff3cfa
+Nonce.14 = 4e838a124e4b53df
+PersonalisationString.14 = 163e393b290a4d390ab0beb392f52d26
+Output.14 = 76234afc296ea36a44254f999ac31fca258a24427cf4bfe2c54495fc41478ec4a00b540659b3b9461cc6188bc1f57c19ae414bd18aa81eca7b9d765a784f0ef24335e46c2c77b8dc915f5d12c26bc653
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 5e0566b660631b94bfa096b3225d59e3
+Nonce.0 = 812bba142937562d
+PersonalisationString.0 = 08e83a8e3d50e50db2b0be92f236f786
+AdditionalInputA.0 = 496b30ceb7ef9ebe9d449d124d2202a6
+AdditionalInputB.0 = 2df0b03dd0ececd20552fbfd33188d4f
+Output.0 = 481e3558c50cb669164448001daa1d563c52afe14a92b58dbfa612f0ecd94e2e642340a3907028fecc214087abefe3b65c8fc2e0255f520c85bf62f02a7e18796950f4fdd4a408bec6924ea502360590
+Entropy.1 = f9bd510f8ab89ee8451069f3f9c01cb0
+Nonce.1 = a422dfa0b0621ea0
+PersonalisationString.1 = 94b4b3cf1453457fd58edcf4aeaf4c4c
+AdditionalInputA.1 = 3066bde4e26c14da649fc0cb714b7e20
+AdditionalInputB.1 = 40544e972e9a7bc227c87feb193a85eb
+Output.1 = 44f971347abb13b45030ef6003ac154e076e6ef49ec5849d80f092650701559c41cf6eeb02e8d8e319a5b75695014db895de56db1121798f8e681e6f4a3ec66e853f013b017859d1c76d348c0ee72665
+Entropy.2 = 105d33d2362b87ad3ee51fd7ac74b756
+Nonce.2 = cfa20f0e566dc5c7
+PersonalisationString.2 = 764c28ee81336aedca872ce266d56313
+AdditionalInputA.2 = 12cca70dcf8bee7fcb198949839b1440
+AdditionalInputB.2 = 114bc17e4391cc4fe8cd4515c2eb05a9
+Output.2 = 00db8005e9c9191c5cb1c89f79fe13a0e9b5b4e10b4cc772c8ad9f86d57bb0f43ec8a4b875a5d42575b91d6e5277b18275ac769325af3faffbff6a9d66f68500a07faee822d08ed8de790bc51cea80a9
+Entropy.3 = 5f21e96d25a54ec1dba73e67b2202dab
+Nonce.3 = b8fd4345dc8eb083
+PersonalisationString.3 = 4092d35fe74609eb540bfbc18f0788c6
+AdditionalInputA.3 = 2bcbc4a021884db410b7d23a35162924
+AdditionalInputB.3 = 7420ff1fbcf833db6afffa4c0f8bd0f8
+Output.3 = 6f433e459b9adca5c73693c586e9d37183b9f8c4463805cf2b784fcd8b9e6771f53b6f8dd8a98e047617333cd26ea7b76b2c7efdc1cc2ccb8858777f6467b222c51eab14bc0d74c62af735820eca54ce
+Entropy.4 = db01942b1e189b2981407ddfb84b3081
+Nonce.4 = 3fbe7768dcd64870
+PersonalisationString.4 = eba9f4974b3ce7bf67577fdbb69160ad
+AdditionalInputA.4 = f9f85dc7362a009510955f9000423556
+AdditionalInputB.4 = 7bd4f4d130a5d61be19edca07078e28d
+Output.4 = 57a4b0e981762f6bc6a980b693a6e1dac85ce344e98f63de345d3427d98c4ccc00892c6b3ef735bc273f6857021a1f2b81be7d60c22e60042fad8750894f77fe64bf25312f150ffee6121b13451aebed
+Entropy.5 = 3375f034069c2569e64d718a4deb9874
+Nonce.5 = 58cf63122c30c5f5
+PersonalisationString.5 = 4765142da01613784583cfe59c5b9ddf
+AdditionalInputA.5 = 47dc6757cbce9386867808b24f3278fa
+AdditionalInputB.5 = 20496311bfad06ccd3460c931107ad87
+Output.5 = f599cbbbf0d93c9e30151dd08689838d4132e4d83bd38063da1d845766f4c37b00bbd560b78362687cdf7d674337d203a33467226d35cbdb6fc924c9b966f9df19966f59f5f57c9f3b46e3065ec8b652
+Entropy.6 = 629b62131d5af04fe2e1f377c6fe7d01
+Nonce.6 = caeb888184526f97
+PersonalisationString.6 = e96e5ca5455d7a26941bd993e480e64e
+AdditionalInputA.6 = 0dd70e0d02984767293758485619a318
+AdditionalInputB.6 = 1b3405eaa98408014e6b14f080b4b740
+Output.6 = 9cf202d4d49e744ae4cff504904991e4d8ad9612d64da8ea03ba023f54f4cc49598d2f8015b2c8be8400b4a3d9b44dda532b3e724e27dd5744f8f3c7d99a33670999b11d403d694c95cb7e06a8a0e0b4
+Entropy.7 = 1e46ccc7b62a7a19958d65cb6d20c106
+Nonce.7 = 680bb7fa43b0db4a
+PersonalisationString.7 = 2e38eb083fc5db4598576dae95a093b2
+AdditionalInputA.7 = 95b3649acfe5158ef80906c41ae7487f
+AdditionalInputB.7 = 03a90dc938650d30be53cd72c2690714
+Output.7 = 05495f39993c97e1f84faee2058264b1c25b3ef61f59eba1832fa6af8c11e21ba3d4d38c257a46efaac7942a582b17277fec6b3a9a954e3f323c9a2a9f8fa9f90b1f47fbeec6d10698337c187e5b82c8
+Entropy.8 = 21952db33ebdf9ae6a785f6af9809154
+Nonce.8 = 722ee382e4a04ae5
+PersonalisationString.8 = b991bf9eb7cca76f25f45e1d0e0e96ff
+AdditionalInputA.8 = a8d8b6ee7be52cb0414c55a38f6ad74c
+AdditionalInputB.8 = 7f5c64ce3373c154376f4f189b11e6fe
+Output.8 = 33bc2a7599b4a2db6f0dd1896e40dcf612b6269195e81b20c4842cda27227fd9e74911d5504fc34ca0d858412b5082cce2c07d377ea4eaa7e878229460ac2fb5adf241b292dec31aebfa4434eeff3808
+Entropy.9 = f081dd932d9f5e53d9eee9807db58fcd
+Nonce.9 = 92f027b15ca5866f
+PersonalisationString.9 = 3cabd9fd3de7e196e1803f3619a3d048
+AdditionalInputA.9 = 5aea804f5250075d5427de0e73df42da
+AdditionalInputB.9 = eddc6c242813841ed7ac483eb6cbab67
+Output.9 = be5036d8f79fc9c1029c3f9e42f1045343dfca9eff6b74f6ac0b9666b4df7151ebd13fd052cc8bb9bc7b1ce6fce0f2749f313df7b9d06cebf3f6aa936270032e8e0dec3405ee246b80826850a1228900
+Entropy.10 = 9eb908f509c77c0ac953560493f4dc28
+Nonce.10 = 1aebf69b03de5cf8
+PersonalisationString.10 = a7f01f55fe0e6b6d731f387caf95d045
+AdditionalInputA.10 = 5dca6d75183f3092a18c8dfd950fdf98
+AdditionalInputB.10 = 50eb0cc76aa38e31b87e7cd8df950f08
+Output.10 = ba52cbdb845f5ee864fc1c17c6bd0a68439a7eee7027fef5a8083b2e0146c60464246527d52ae59ff5580f336b94594f5aa933c3f75744c76784df9783bdc91d130e29658fb272045e953794ae9bb316
+Entropy.11 = f8cf962f6e583970027d4263f3f8b936
+Nonce.11 = 0cc239a1fe9750c7
+PersonalisationString.11 = c9251c519d5526d6882f1b235fb9b944
+AdditionalInputA.11 = 9752b7e44c67da390d4ed5e8b95817cb
+AdditionalInputB.11 = d18d460512747b638652fd4d457bbce9
+Output.11 = 5a7e2ac66b5fb12b3eee1b6aad4b34e2439c53229e6f2a10a92069f8034562d1125a707766936b6e9c6551d7c8c02775a5721881f12a28e1d63c18e4a7869232511989c79c5a8d3cb1d4cb36ea921c78
+Entropy.12 = 55e311a23e872ba906bf060388e60ae5
+Nonce.12 = 5972e7aeb9f75344
+PersonalisationString.12 = be3f6e932339c5b9f71b87e72ff4dab1
+AdditionalInputA.12 = fab46e391e2c5f30b37298643bc55d50
+AdditionalInputB.12 = cf4e5483cfd794f03269e289f2b4c08c
+Output.12 = 648ec7773f8c664f3d7fb279b51c5b9a3d9b067d6aa54e93c9bb9a892da91fad4a30e8e4c5866ddabd2bb44b243d7a3a00affec9efb725c951862ff9184392dfd626e711e0a3840db849b1e3b01b4fa4
+Entropy.13 = 4a989e6bc37b9157fefe6789aff230f3
+Nonce.13 = 7e5ee246798dd7bd
+PersonalisationString.13 = a7f5af48da677d6721d11e284fb1ffef
+AdditionalInputA.13 = 3351002030eea100c84840748b0a3d4d
+AdditionalInputB.13 = acd32c8d515109e90dfe1bd9e6b326bd
+Output.13 = a77bd7dc3986b43136606a209d600ad90068b567a5e3a2f75e61b2748e265e500fc7ed492b8cdde39a6b0a87ad4dd00529fa7feb4635e315b7116e1ce6251a806c7c871f7ccc4475e332054ef812c631
+Entropy.14 = 75ddc6b58a06a0feb20b703ab6dd6da0
+Nonce.14 = 527130cde5214f55
+PersonalisationString.14 = 3a2fa9c3b13397ed8ebdf57d1efc1c97
+AdditionalInputA.14 = 27486f8dae1b36462639ff7eee869a29
+AdditionalInputB.14 = d1bfc7eabd8eddf622297012169f351b
+Output.14 = 4c893c3d1ed3a190fa88e159d6c99f26a02fb5fccb98bdef9fe43f1f492f490109224ba6c317db9569f618984409f2fb3db0b1e2cd4b95746f159cca76f1204f6d2a4c455c547a39a5f79fec95c8f4cd
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 4c2fbea166f7920af0f0521e22487266
+Nonce.0 = ef58d39807d588d8
+Output.0 = 54d8c2266c0fa6613e76768856883da0bdcd0d6621407e8599451e2859b5d0b56e588089e39e229ddf84f3267ba5acde539e5c0e4d33aa51e18e0758e7b52a240d3994a77edc4bd8d3c254bedbbe27f1
+Entropy.1 = 5d839ad9eda931021901b262e48ffc81
+Nonce.1 = efbee0dcb5601086
+Output.1 = de5d1198d1da55806056d79579409fe72415d181148db8273b0cba1e9ff0a8f4552047ded2f565e6ff7035ed420478ebbd8e4f0e301de8a5b558f2373a57708e05f0017748c40f7bbda2d297be23cfdb
+Entropy.2 = 803171f06759503e5aca87ee10d37fbe
+Nonce.2 = df19527df6da466b
+Output.2 = 8f71d35e91480b1931174d080c905abba4e1179476a35eaffb18df538b397d45decc4a4c9fbee8e8b74911e7e379d67cad77873671248c65c21c7f93d9c2116284e795e941c8efaf2de0d1474e81e70d
+Entropy.3 = beb33d42e9be573bd9e1c9e1d6aff44d
+Nonce.3 = e42f6b8177fc417d
+Output.3 = dfcac439738b84d03818568b2bb9d71a0f52f0b962d93d913e2b909ab464a378e003640ca3addb46f1f4607543f2985f561fc4def408b47fcaf838e25468fc97dbcf057edd51d88c342c81d6ce92b020
+Entropy.4 = 6bd49cb7c8ac1d6a04db642d8b462ee7
+Nonce.4 = 73e7cadf29be5f35
+Output.4 = aa5157bde2c8332f7ede49b6fd590d90dcb637aa2c62272d721f0f80ba8fa83f616b901dffe3b9e236003ad01a959d95bffb1e24f18cb4445d4b64ae2b5d1e78fd0b5830fa4aec73ee189f17bed79b80
+Entropy.5 = 9306eb88e8a62744ff5dd01d92e5fc4e
+Nonce.5 = 582de62d3c45e9c6
+Output.5 = b73714fb42e91620d1b81a80a416f5239ed3856e4f7320fc5726a63207707710803ea3fe11813e6bb7d5c2b9565eaf059d8f3384f6dd1d83f6917ff3efcf9290e34752923e54774a103d0a5135ef2fdf
+Entropy.6 = 0283592b01b7d932dd79be815a325841
+Nonce.6 = 4fcf02c7764c5a3b
+Output.6 = 2470de1ff90fd84c4e17eac1dcff65634799716aa0d027a3a9abdf92ae956a18abe8b23742bbf8317aece6a6d1ad2e0041fb112b7c857150f337a15927095f0a9e8caa42b347c65e750b0737b0a70241
+Entropy.7 = d1b81fb414d0c070ee8469b190c33279
+Nonce.7 = 43f72e66358b29e1
+Output.7 = caad4638fb82e619665a300cfa2f88234eb65d414b9d1ec9f9cbee9429626393366c8148be55b238c08ff48935738ca6e840cce024a5805de92146408993547380cf53be7c6e455daced820fc8fb34e4
+Entropy.8 = 6123ec40c42f3bed9cd178d4004ee91f
+Nonce.8 = 0264712f52edb23d
+Output.8 = d58b3f091a967ca13b55463e8529045d60a60b9602f43ee7bee075471eef83823b2d540b3ece6d637e1153579e2c179ec155250a18c3ae46490c61e4643143464dcee94c88c2afb41b7d516f65f215fc
+Entropy.9 = b1e632849427bec02897718c3df8865b
+Nonce.9 = c8c1c64bfd80be1f
+Output.9 = 4985777745c4fb29d01967570937da62a6c644881a4fd03e1403992a6a86dbeb98442852728844429dadbab434a0b03594c8d6ae41fc2b4a9ced5f63b4ecd8d4064f80acd3ef50910c9d84a0290c2615
+Entropy.10 = f6b732cd0aa7200aee6784552d0c38af
+Nonce.10 = 2d69a600a42674ac
+Output.10 = 47e9738a0d0e09ba786d5c9d0a14472679432aaa363bceb12bca2d85248d61cfb2e4b712ea4ccefa14820227db3a31f063e98c40ac21bbbfae3d6326c2fd59046d8864976bcd517827503362429748bb
+Entropy.11 = 49c494013bbe3320859fcc0cf73cd472
+Nonce.11 = 83f14a32419cdae2
+Output.11 = b1f3aa9a90440b35ccb797f7e0b7b4b70715796f320439937b5e7cc69ceac6691d3cc262bab35708ac845d9c44c50a0d45e29401e52be422460e0c0f6b983dad6d5e61f7f6929d881f430348bf16de94
+Entropy.12 = 498c61223bfaa533da307e7fd79b776e
+Nonce.12 = b362d90663b1c921
+Output.12 = 80a2a0f2822985428471bac8c5c46cd5dbee0f9fb91d08b9ed69a557700134738752310eefc23ace021fbcb82cc67096b58aae14463607a5077072ea74af4bfde68ee91f89231bd3bafaeaaad1406b39
+Entropy.13 = 33f724717aeff485543ad0d5c7703356
+Nonce.13 = ac4558a22aaefc9d
+Output.13 = 810be2ed84cb7bc205f6ba6dd691186e454da073955ce6e54f9b945445ae698a3d4747c973052aa1cc7e212208ecd4cc58b2f30ff6c4f2acdcabc3727e8665f55de7962f6fcbbeb406869924c6166ac2
+Entropy.14 = f484b922f492d19b58407c242ab90e76
+Nonce.14 = 8952a0a4b666b0c8
+Output.14 = 2d77235fa273cab3c1bb176d44817cc25300b3f0172a0b5aaa66b282c015d426edec5f1ebbfc0269956b85994167992a71002586923ea234be6c5df09f47d89132e440827b89f7ff97e032b3f74fe32f
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 9e13a57fb43ddcd069fc8380b818f2ae
+Nonce.0 = fd09586067e5d92c
+AdditionalInputA.0 = b2257ba77d8af75d23b80c9a9ce74630
+AdditionalInputB.0 = 79775210d749662d6a5ea2b2bbbf3530
+Output.0 = 78a4957978450a7f8ad00f3c3b4e21876f5a828cc60cd8eaf488eaeb1b9640bf493a9ceda1d3c768434deb20183b7c0ec8e7d751ba9011e3489563c795b678be5ea13618bcc3ba54fe594453c95c888b
+Entropy.1 = a4e86218fbebac79a31b3acf2ad3c6ea
+Nonce.1 = ea2aec423f4dcf62
+AdditionalInputA.1 = 00277c54a49f8d71d324c4f6d753ab8b
+AdditionalInputB.1 = 8b56dd32e14fe606898f8feb4b5e05d6
+Output.1 = c9310694bbea399211ec91d41c60f32313fca28ae5eddc772e98d8f5927864ad69f71800d9331ea4e531e3bb8356c6ba9365ac76b78c40ff28d0bad4a144b8d74fe4566e8dcff046dccaa938aedbb290
+Entropy.2 = b13f2409b5bc4151ca7037f7de835261
+Nonce.2 = 2f7ae458deda5e41
+AdditionalInputA.2 = b24f349c357a53b342ebe531e1a04013
+AdditionalInputB.2 = e8a5c65474a27d2fd50f6e6bd03cc27a
+Output.2 = b7d3337834f2e223570300f16b9b5a1d1d7fda5eb5be14b89066dd9be39babdae41afdf57589e4c9ec062dc0ab0d6295458fe083dfa6c55147a13565628d596c913e28a82700d89a8bbe226d33e08e8b
+Entropy.3 = 70c73c776232d14f09dc1f84afadeab4
+Nonce.3 = 39d459b1a361740d
+AdditionalInputA.3 = 679f2ff0aaf51a1e69ac27480d576932
+AdditionalInputB.3 = 27d4920dfd2683b66a42ad3d32071547
+Output.3 = bb8e5008c11c4d6e4c63996f1e50edf480bd155fd04668652eeed6a871de7c8605f217fa7942e03f3cc2b8bd1ca18d6ddef73ed9ec0072036a3416102c60f83debebacffe9fdebe2a478c2c7ca68abb6
+Entropy.4 = b838bb136ad9b6f2b7913ff41af9af40
+Nonce.4 = 43ccad7a4227ad7c
+AdditionalInputA.4 = 09db57817051cc2e19806d18b0a9084f
+AdditionalInputB.4 = f8ebc3544a5cd56e0b6136c9c3428499
+Output.4 = 2060e3922728703c947e0d7d94374e9741f433ca244c6cd396db884aa41f6a75d834fe763c8c873a960ff301586c87012721d8be1bc0226884c235321b818ec195940dcb5c21bfe95936ec2fe4a5deef
+Entropy.5 = e4f69f558dbbcf15768e21e276c7381c
+Nonce.5 = 6d14d8cdc6bbe6bb
+AdditionalInputA.5 = dbf765ff204ee32c5382a39dd6aff870
+AdditionalInputB.5 = 4fa90168a5a0073090e4d4af432c39a4
+Output.5 = e65401ce0ec9f0d247d50cff3ad070bb1f3c9f9e81e7237ca0539b82e4c4d362983bb5adc3d2d98dbc9a21a3351e17fd7890ef8fef7268f5c0031fd49df563ab6771939dd2bcd6d65c307485c0ce1af5
+Entropy.6 = d7a32b5597d9994fcadd9d94565523a8
+Nonce.6 = 5f47254c88b71055
+AdditionalInputA.6 = 1ebfd0d0a13ffb06dd3bc3192f55b2c6
+AdditionalInputB.6 = 804fc1772ab393c74d7cca2e566ef70f
+Output.6 = eb269c0f2d02ab4448f51e0421df9701f27e9da77e75b2e7603cf42152a8edc5fc292fa9d4046b22f7842bfa80d4a0334c79e0c8389a9ccd94f34b9c6a188b09996bd6d1e0ebe72539f6a25a5cc706f5
+Entropy.7 = b6801ab728562acbd71a2e2157eaa5b1
+Nonce.7 = 2ef69d68e40b3d82
+AdditionalInputA.7 = 9bab4de8295a5ee6e15cc4962f089631
+AdditionalInputB.7 = aaaa367701552819c4a2331665bbf061
+Output.7 = 091edfd88948e749b6aba6dd70077c88f1ea297bcedcd9e1f0da80e53ec1517f08786f2e864517a2754c5cd15008d6c03ab9ff2d058880869d8b8247be79a01133c556a515fde2b2119269c7de06b473
+Entropy.8 = ee5affe5e315db84f71a220b315888bb
+Nonce.8 = f5e5f7aa35eae629
+AdditionalInputA.8 = 6d3e8fd6870d2fcb22381c1958e3875e
+AdditionalInputB.8 = 8a3a4093fe500feaa1f7e2de9fc56bc0
+Output.8 = 27e79a6de3b99971182eab73e321683e2a601dee46314531ef8a0400037b1a660e2cf0759df0f6d2afca9a0dec502b466d95afec52b89741242dada5202806ece73996df88f35bf7c686a0f69732fa9e
+Entropy.9 = 28f15b1ecf1e8fbeb4ebb243e86e510e
+Nonce.9 = a149011ca0962b79
+AdditionalInputA.9 = c54425d43b1e6635467c5158ab570596
+AdditionalInputB.9 = 794c9b2604ba2402a47638dc7360ac29
+Output.9 = 487119e5db7e5b6e5792ac25ebc055e91ba827cd695b5b0f959185d9bb62e27a8f6c814afc39b26f94878707ae2d67d01877ea267fcc55d5df83b2d8099a093e952a43c5d8de9925e5a0bbdafd813700
+Entropy.10 = ae23ada45ba1c1c491185311aa994b18
+Nonce.10 = 03a157c7a74a20d2
+AdditionalInputA.10 = 09f37d8e0ce23d2ed9a820c41c9c06ee
+AdditionalInputB.10 = f38dd16e2fa8d52c1708fc3869bd9a09
+Output.10 = d45f27d91e077b9fa060c6a7d707c07c0ea3cbdb80194f08fea64d317715cef76dc88fef48356c1cf9f99e5644e6c5872e7937dc1e2c9ffe0dfaa87e425108d97f65166ac2c110ed0cd07facba773673
+Entropy.11 = b0050cbc412b3122d8915b795321614c
+Nonce.11 = a098bfa017d5eeb4
+AdditionalInputA.11 = 75816d4ad2581f92bce5e679bbcfff53
+AdditionalInputB.11 = 7d40de162b812131915408f979bf1ac8
+Output.11 = 74cf8c5d35dcfcf472f0842b465fdd136f12b405ee356ef480943e704cbb12a8f568d7e1c131e291a4e82a018b667bb5c812745514c902e713c9352653696ee07df6a552598d0473460bb38fe1d602c8
+Entropy.12 = faab57f31239c22e8808c246596c1f5b
+Nonce.12 = 0387f1636543a661
+AdditionalInputA.12 = d1b1eac58101b56082f6cf3f03ba3e6b
+AdditionalInputB.12 = 13b0b5baad299e76c732dd79878b7e4a
+Output.12 = 1a7230d14eda7f2f96e30e9b60137ba33aa4c5be0472880437bcc61ca82d1e0828918b4062ff7dee89128a48ed87ac60657051e0eeb4cbf372a24befff4d6e22e73d3dfb34d59d213e05cc099d48bbda
+Entropy.13 = 93d771d07ae98d787fdb787f30abd7d4
+Nonce.13 = 380d743dcf70a78f
+AdditionalInputA.13 = e8b4b833d8657364b8ea4a6704fb732f
+AdditionalInputB.13 = 615853a9e6e59be8353cb23ed9b068c0
+Output.13 = 2aea2555d25835ceb3425f584ba11f20f237e0a6af2f554b382411ecb0ffa8d6d5504b654467ba34a0436dae4a9d483f6f58a52d73844586bce2d1406f4d5f9b878c4d1460ef9c974cac1ce0ebe8627d
+Entropy.14 = 7d7b1c325e9843c3d2770efd5e134fe7
+Nonce.14 = 9dac46a2da81030f
+AdditionalInputA.14 = 9e3ea6eac120d663e330d282ca9b9d7c
+AdditionalInputB.14 = b8d71fce7779a9906b9790cd1d4e48d5
+Output.14 = 63d28a300a329ca202b98498c9f46912620bc85c246f034dca4186cd9b0e0810a363785878effde90aec8cb584862524eebf940c44fed21cb580d4115f3e0dda07e0e4a66689c2ff3e9b87edfaa4d051
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = e4bac955a3e820e5895194e2c13ef9ac
+Nonce.0 = 8f4d177da65ed48e
+PersonalisationString.0 = 06c4c601145a9d137a490c7bcd22f41e
+Output.0 = e967d2fa2478775342ec5ca153e5cb13c66134d4e17a89cf629d7845f8ce268332a04f0d7e2282368f4033994f20bcbc7d4397d5facc448842b1e9246c24a68e029fff99e90853bb19b7e6fc9f29e4b0
+Entropy.1 = 2e9518f753f59a4a53fdac88af187dac
+Nonce.1 = 9b926c223ad3efb0
+PersonalisationString.1 = bca05ffdbc7d8b928c7979c083d65784
+Output.1 = 055fbe1d5e276068f7883094c3df679da1bfcf38562ebbff64456c2ed4fb03985bddfb352122adbb0bdd92672d454f7db516209cfafe289bd28bdbc50bc22f03912ea694ad2fe1c9f2d57ed39893e801
+Entropy.2 = 299fb649ae002b0bd29f23fbeb221f08
+Nonce.2 = 6140ec1a5899ebab
+PersonalisationString.2 = acd2160d088532e0588a888c5dba863b
+Output.2 = 1630fcb482956b0f9a1f2c248d06d8069669ab2c90aa390da636954945312607d645a6ae864c3e3f823e2aac900075728548d784aca351f1f098fb401fd7e4141e2a374c8f252bd72aa8f55dc014a68c
+Entropy.3 = bf9508828a6df39ce1957ac53a216ae8
+Nonce.3 = 6cf30f3288512f8c
+PersonalisationString.3 = 133f95816e48f9c57b5edbb22c6ff97e
+Output.3 = 478399dbad14a599027c8dc6bfd79d26ed36997de488de51b56671d1c1a3fed83075fe3b5c930c5a0feb42575317e8c64956207b62414896f599164e5da7afa69d07874bf168992bba0a9f9842fd1d21
+Entropy.4 = 15ff59f07c18ab878336dee54dcb47a4
+Nonce.4 = 396376c48a1ce343
+PersonalisationString.4 = 924ddac14f9611ca3f81712021c7f7da
+Output.4 = 76be3c7f886ab38c1f982cd68e0a2c4485cf69627d670159673b9f3185de190fb8df92e51643c661ee84faf91e4ae7ec26788df47672a1e3c483dd28dcf48841c9f910fb0d46ddda6f16791afba73a83
+Entropy.5 = dc5fd0fcab490b8aec8db121543e750c
+Nonce.5 = b0ae04cce14b1d5d
+PersonalisationString.5 = 159d87275dde2e356fa81d693c5171d7
+Output.5 = bac7c6c0fcde7784f561f66b07a12422a3c745d0ef4d17433ae0e16a02e08d8cdbe0ed5a968964ff0aa9dddd9abd5c55904ad7da95f9ca6f745f0ffe4be0a0a880dcee0a631d3492c99f6cc5e05457c9
+Entropy.6 = eca59ee314b9598f2b9a79b22bb791d4
+Nonce.6 = 8382ba70ecce359f
+PersonalisationString.6 = 821de63abd7ccf3f74dc9e99a5f6e398
+Output.6 = 1f35097f7c0806a6fa9399da1c45e8eaa07c6b1c8fc3dad96667de01a313938e376490e214207f79e10c2434380287b5f72c67b9147a8f5682cdaa041abb7bf324464f589c06afe1aadbd474aa51497d
+Entropy.7 = 243dec1c74b6daf75c9481de3accb394
+Nonce.7 = 63a8361f5b8c9c0e
+PersonalisationString.7 = 79c60f83c9266b48e351648c991cf4d5
+Output.7 = a85f1e42f6b73b34fb63e5623047d2a16e9e03b9ab8b2bd035669b7edf18a71f7ee96de85f8b2ceafbe1347e9194b3a62df8ee5e069b8d1f619c2050fcf9d2db1010a493e9c0d36f46fb98406083f335
+Entropy.8 = 7fb905a5598e3133d3c47489b11eaa17
+Nonce.8 = 918cf0f9152b6294
+PersonalisationString.8 = 2815187728790a95bb6d22d7b092d2c4
+Output.8 = 1556a182045706d3c860f2432ec0bbe968955ebd528c2e8fbcc5c104be889c7b76ff91350ee5ba6908c7fc18f8b11afd9bb9057281e462f5350fd678e5d872df1991017717197c21b1374b79f6f7febb
+Entropy.9 = 01fb28bfa403a719e1ae11f61aae035e
+Nonce.9 = 27036cd4158f1b7b
+PersonalisationString.9 = 6e181755168169ba43c269af58ec40fe
+Output.9 = 1de83d60a0e36f7f4f7edce03077bc9268da4d64edd24859d21a190c06a09aa3a5c791116ba12e2a13ffa5e190d1338b8f655a8d9822b84d8650958bba819bf9b41292bf5d66b49ac6ccc02b9dfd39a8
+Entropy.10 = 9649465c60879b3725b92aad1fa41077
+Nonce.10 = 8e35b287bc32c273
+PersonalisationString.10 = 361ff99634ed9541e710b951b0105cd3
+Output.10 = 0211e8083c4576a815ab2d68f1c4ae8979198d8e44a5d14f80987695a397cf71d257edec3a32bccb2e293c59173fce4a1f975e4e9111cadfab18cfa0bf5f392e4e144c48279da563bac9d03ddf0c7357
+Entropy.11 = b33dca3fc104ae072a781ecc2dc4aa35
+Nonce.11 = 92d974f0278111a6
+PersonalisationString.11 = f271500a57f6d0fa653e2a9761a5118e
+Output.11 = c471044678d3bfca70b7c0979d82d0d3d7c7efacf878ff6e1d30f0f8ff48aff4d639fb189acdab5b3c31826c960f444073147d8a6c8ed508188f48c95f401d002ee5dd866f0c4b05d0acc4840c6becf2
+Entropy.12 = bf2d50d29b7337e71ce129ae8f8611f1
+Nonce.12 = 3cffbf94c8462df7
+PersonalisationString.12 = 5263f5b6eaf9122c2b57c563aac6583c
+Output.12 = 1ace79cb19719f58f320bb68e5aa531ebf5956bb2307dc09cf9ab544bfae36301a908445e4195f334e6287c90ff8a8c579f4337f88ccf9095ce23168702959a821ca7a92efb0aa748cd252298a59ee96
+Entropy.13 = a2c76004f52292ae30744b3bb7b9746a
+Nonce.13 = a26e98090c9c4e16
+PersonalisationString.13 = dfffada152ebc2c6e2dd7121d5844ea0
+Output.13 = 675ed1b8a28f8f00c3b6efd9276daf5cfbff95fd592ce8c94c4b5dc9793b67eb2d9ca37aa9c0b60ec5c9a2a56839708809594894cb7adcf6c9cee794471dba01d6eba2d1a631624b6d0c36804faf6a60
+Entropy.14 = 4a1b6e50d2854866e1c1ddb65377baca
+Nonce.14 = 7239f92b63fb3dbe
+PersonalisationString.14 = 8d2e2ca3985bd2538a71f02cc3eb5568
+Output.14 = 0e4cb328c03faaedbec7215725851069bceae4332de6a70e3521dd065f2f7923485969571ebd7f24be460fd901c6b3e356da6ee5262ef2d76ad14eb0f697f8fb92af2f46630198c5f7018860886147b3
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 1b2827ae51824e1f68a48116dfb2e343
+Nonce.0 = b9eac1b947ad0f4c
+PersonalisationString.0 = 51fc5e485d8cd08209c9894821a2a6b6
+AdditionalInputA.0 = 39a52748bdbc7fe0ff4545f0179949e6
+AdditionalInputB.0 = 4d1a774a707438bf46e6909aff874189
+Output.0 = 900d585848388e452fde7771408c5292645df462389bbdbb29cd1e2ab4f2287468eefa08b7b3bb69c26453bd47abdb91ba582ae27bb9d5243f983fefc62bc186584799963314d0f564ef36be638b1a64
+Entropy.1 = 0f3b65bb13f1acb3172be72edea5247c
+Nonce.1 = 3522f2cbac34238b
+PersonalisationString.1 = d892f65f1949d280eecb295276b9c69f
+AdditionalInputA.1 = 372c1f00a462a535c47a771b8e265358
+AdditionalInputB.1 = 3062268c6109e92e964a655bbe3f9380
+Output.1 = b7bb52384ca0e607a986abac175ec272ddaf0530f241bda6ea7b54b42456569eccc025ca66936f2bacaee6df8c93f7c13a89bf3032b817464425f324ba1763ada71d2d83466c4f6931626482238ff21b
+Entropy.2 = d79c74c23e2e016f64bfa3ad5b351972
+Nonce.2 = 5efc54f323f2083c
+PersonalisationString.2 = 08e31c36e9296c6cc2a96f2fd539ae5f
+AdditionalInputA.2 = 80540491eb6a5b39b079726a2d2e6ed7
+AdditionalInputB.2 = 57d492f0b098ccd5810f9a6bc9f79213
+Output.2 = 40a1a6f13f9e2c2b20e4be32e5162155165403e92ab8e4d5517b44ad6d24e0f7e51a970b469adb6ddb9870c11955746e280667185c5a5eb1c721863c22b260c2c00780020e6a66e6531dc714e883bc01
+Entropy.3 = da8b8c8a285dedce252e10eb803e9b90
+Nonce.3 = 477b9d7bb8f076af
+PersonalisationString.3 = b7a6edb7ad251007c28b2d3330e7c66b
+AdditionalInputA.3 = 2671081c7cf3b20a65444c3ed495a8d4
+AdditionalInputB.3 = e31b868cfe2824135d1532f8823122e4
+Output.3 = 602599edeeb4c86baf9479d4b745bd0f39299d2b8084f1f6df9f48eecd08dea98a8137732f08ae83c61b73ae5af095edf7caf112d98901622432b4f8d88f2e6561245652ef94b327faf9ce090f79068f
+Entropy.4 = 4c49cff551db41e601bd14005c9090a6
+Nonce.4 = 7e9bf1339d18cb6c
+PersonalisationString.4 = b834ac33cd97a9b506593ed59709e213
+AdditionalInputA.4 = 85649837db269104ef6a976738a171a8
+AdditionalInputB.4 = 598238e90189d1e923ae39ee5e7ec2d8
+Output.4 = 4c28991d91984941d126add74b463a8c31c8e0b66d12e664021671234d4946cd3e55f14d22506623165ba9d22c6a7f11ff2a12c626746f739d70c971d4d47f22976a0e8d06b93661350b43c6b2754a89
+Entropy.5 = 65a08a98f1b632beda761c078d4a195b
+Nonce.5 = b93a7d1a2f859cc9
+PersonalisationString.5 = 38bf8e9db845fb9ee4a4a50f6a14eb9e
+AdditionalInputA.5 = 865a17d8b9f7f95a4b08bf94bda268a7
+AdditionalInputB.5 = 7f18182a36a6cf7240337c4fbb5e4e72
+Output.5 = 30e24271f413596f8cb0f3d37cb5d33fa5f1abeb08e5331ce6901bdbc1b8de42ac12e49bc050ebcff00b42b394cde6bef0993f002f18c0e68aedff969670f312b9cdd8359faf3e0c4de24ef9db613c98
+Entropy.6 = 70827084cc1f48317e1c95f255837a3c
+Nonce.6 = 765fbaf6d035abb7
+PersonalisationString.6 = a5b804296206cf3a7893780865643330
+AdditionalInputA.6 = bd67fbd0cea225282dbbde85f9d85324
+AdditionalInputB.6 = 55b5b415ccb031f6ca34c9d7713bced6
+Output.6 = 2b8540e37c318afa95fc1e8d08b8d9ebf9e2b910f22ddeb5fbae4327d37cd98724dc95bf367e6e90196639bd21323d111278ca1666658ac1e55c7c930f85e773d37dcfaf591151ffec2729e36ec5fc4e
+Entropy.7 = 39e794b3b956574adc9fa54001b2bad5
+Nonce.7 = fc251a9ca81c029b
+PersonalisationString.7 = 7b564f1515461fa9ef7352a89ffcb98e
+AdditionalInputA.7 = 249b0afda23f95f45cb51116923359e7
+AdditionalInputB.7 = 18b4255845cd8b2f3ecd84f2708d6a91
+Output.7 = d5367e186259b8900a4cc2d08de8bb86503d23d8264252dd73ff9d21ce9cb5b465676269808b477b4b24a7231e5c8e31bf3a5d1d96444e8fe128cc7140213da67062660ba490b8e6abeeeb3381018f0b
+Entropy.8 = 0e54fd9317324539b5f87dda8c5feee2
+Nonce.8 = f66ceba0134d1392
+PersonalisationString.8 = 83ca3099c4fd956d69de1da9dd2dae70
+AdditionalInputA.8 = 604460201adba7560a9b7fcbb2dab345
+AdditionalInputB.8 = 911ee9cfbab9d8ab26131593b9a974b8
+Output.8 = 5598424e63e74429431ad9a07df02704754ffb9b304d2893d02ec6b45f335cf0663e865203cf2f106c1a9472e60c0c0631a96fd3856255ac01ddb94c7d0a235da604e46c19decfd00834a463ea270657
+Entropy.9 = 6b95ce60fbde0b7a1c084ee9c4c0ef3a
+Nonce.9 = bc55d0d73df2016c
+PersonalisationString.9 = 54d5952c46fccb8bdda8dec9fe0f4420
+AdditionalInputA.9 = eefa1d450f09445e372f30c8e7d0f306
+AdditionalInputB.9 = 160ade5d9d4dfdce0e044567a8bac002
+Output.9 = 2a7d8d1d248edd67b80b636c22b5ca69e904cefca340bd8586d17955c82d7729bb243b2c1715074d856597406b86b925818724237041127e6728fe3080a43f6955019e10a0e9b4b65e1de655d2621160
+Entropy.10 = 83998366ce3e12202f20af4c355679f5
+Nonce.10 = 4db83f885fcd6819
+PersonalisationString.10 = 6e69e4ad38719f5a36f624e3766ffea0
+AdditionalInputA.10 = 4ed8ecc9a49fdee286355b494af86d9b
+AdditionalInputB.10 = c1e79feacb7575244342e0183d25456c
+Output.10 = ba1b0c908e3015bbd805dffc803bfa93f1306d30dc7f05d2d4e75d3063371b947ed7ec98c24c9e2de43b37220f85af7d4ad26388948693358da23bdee6f225e8776905da1c24b0f96125c081a90ce7cb
+Entropy.11 = 2a400808e03ced3842ba1eb3f1575fe6
+Nonce.11 = c6b9b8c333063c4e
+PersonalisationString.11 = 4424f53b70a4f48730f812b3cfcf539c
+AdditionalInputA.11 = 665c1718a488186e3f7d0bb696762aa6
+AdditionalInputB.11 = b6d13ebd7209437ea5faba33814b2c74
+Output.11 = 2dc7a954ff439ec8108b0649acd3c5d8b2e28c8804cc9d249acafedc0ef81aab1caec356cc50c43b70c1fe4dc117290bb0648588bfe84c9b839640c1503438765cedb0e589cd13fc8cd80bd96ad19c6f
+Entropy.12 = 6f7a7d94dce02590e790b971af9d4295
+Nonce.12 = d742b2e7e6100044
+PersonalisationString.12 = b9db42702623c750b8a56f87e9b86ce3
+AdditionalInputA.12 = d8aa1660026346b64c73042ccd7be911
+AdditionalInputB.12 = b842d8105b29dcdd493b371bfe5fd9d9
+Output.12 = 5eb008c4e9bdab611628ff587411a8262c2758958103bd266aa1af386ebc70482481dc8dd6a253222e34444be45a6aa231119987379bd7ffc43f7a4ab793d1fe90855264f1f94733e424dd97387a180a
+Entropy.13 = 5c6aed6f74cc302e86c504f0586cdcbd
+Nonce.13 = e7cc8cd44f6dace7
+PersonalisationString.13 = 771141d942658fe4d658f4a8af0dc471
+AdditionalInputA.13 = 5d7a91e18f88bd509a6a0d590e71c761
+AdditionalInputB.13 = d46b57fa51a421e25aedf111157db8b9
+Output.13 = ad1ada8ce79045cb24748378b4c4629dd908058377502436e6de51b8dbbd70d721e804955a1ecb02f8b11d1d44d9f5011808c56a6afe94c77c15319d8e1f48c50234d13228fbc84e13b4440eacf4cd21
+Entropy.14 = b30ed321b4609c2c1b51235963958ea5
+Nonce.14 = 5bf9bc2fee575eb4
+PersonalisationString.14 = 8fbd86da0724355a4059f6ac78fe6342
+AdditionalInputA.14 = fc54b5339b37eb6889cfd7c185070bd0
+AdditionalInputB.14 = f6a783d6d42e5ad5abb0a996bddfa04c
+Output.14 = 683faa732c4551604c8865b5f777571c7d3cf1a60124c59b91283da0cda9b21761d1c17c81856958c6d590436c73594bb36f46c2f89237d8c7a7ddd2c58394c983f8f6c000d77566f2a1d89bac054bdb
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 39af3b5438eef3242073aa3aa7a3cf1b713cd38e230fc782
+Nonce.0 = 45fadab7fd239df2b9a4783f
+Output.0 = d86792dca80f167184fad6eba188a08160b14c324c5e279d98e5de1047402e3de71fe92aefdfe5c8aecb416757a67dcce3d0523a50ecdc381a98da93a511ac95f4a6b7a9c3192ebe21bbc27fe005bc413c1c10a1995b24078dd05727d55da602ba93a392769349993552a157f5699f16
+Entropy.1 = b596a90d7dcd893bdadfc2036fc9c69836506f1a3e7c70e7
+Nonce.1 = 651cb16aeaf9514db4210a5c
+Output.1 = 828c322f7de418314f16dc4b3935ece4151c7e124afcece08c49c4c12cdca6eeee36ab524a4896055afe4fb06c5ce2a5bcbde6e8e368b60e82592fd3b50dc2d4fac70911fde5bedbb6f0c68f7cc3a0cd5c4fa1018158830d5ede3e2115ebbbb9c38a11e8aae5696ef7e9d02b9808a01e
+Entropy.2 = 5d3e0111bf4634adc2d5a34accb2dd366231664c7c6a31ab
+Nonce.2 = bbab567ae9b2eaeb83497b40
+Output.2 = 8de1b396ae524f4ae9f98a835d5951b342760bab11628a13a7a4dfd033ea8206c5e27c39066cdb18f82ffca68ac2829911394d71817fc7e35d17bbfc67b3bd2e9e40f68277323faf11b9559fdc0d25ef447718e6f923891d65f342506079d7fe22a33bbd5e57b1038d2348f936449d3d
+Entropy.3 = 10662fcce8c1c629bc829e8d03e55ad681b6c64b84133b03
+Nonce.3 = 78b0848a2169e9fd9e1436fb
+Output.3 = ce1391c86b679604972e97123703fe4946777533c319ef1aa9ea7fbcb5a4f26e70cb92c7cd9a65e5151d88e56d741a8c208487f33d93bfcc7aa817acb7b239111e36a80d0b17102400c1894e896d7e1ee5dee8663c651813ce938b749fdb2f80a1b5d09fde101b1ba72c1ce56ca35bd3
+Entropy.4 = 7de89e0492545ceb3b6b1bce17996746747da2cd6e1480ae
+Nonce.4 = 353c23b65d82f445161f2ac0
+Output.4 = c7a6cc4ad4a983d548e09cafd45abcddd037f4dcd6835ab80f4af6922309eaeeae6f8ba5c7e0190806bf00ec749b5daf2fd2ee09e5f2095320bda0c1e26113153d207f5e5469a3979d2a7c0aa518db394643b42795799bf890d78414b1eaeb1c481f14035864a56f425d6bf38d6b67bb
+Entropy.5 = 2411daf4e0ef271c26d7bfe46e25277b13244be8bbcf9445
+Nonce.5 = 7fd5297678093b80876badcb
+Output.5 = 8cc0db0f68355fea00a6dc1361a3f9c44bb87f3ce288c35d0e5769b7890c0774ced8bf5cacfa7cc4b774f83d6465128c23adfef61974ebf8981d6b48587604f9ad8fa943ed52302cf6e83a9c7b34ba9433c00f8d779ffdcff133abc9438ea5fa3eb0bcf9a2cd8fe39f947352f94d5bac
+Entropy.6 = 99048602ebf1ddfdb73d95d0d8e212b04d7c4170e0b5d574
+Nonce.6 = b1dfe61f43696313b7411954
+Output.6 = fd3fb94bc19b82c15f4bb79768b5101be90b5c40813a3eb9e199b539b91df298749b7736eeafbf6000bf5ca1d65eb5cd642acaffd1e1315d8324b54a7c6fc6988108979ac1bb5646fed02f72fd4d3dde3a90a317fd853c771465110fc7049625f2ad9b54c0a04d78d0e584e74a7ade70
+Entropy.7 = d97b3e0a52771dad4581175a169a51a70ebe877e506781ac
+Nonce.7 = f31e0f4ae9109c1c128ddec7
+Output.7 = ebe9286c56e9323670c12510b912150ecd95f9f13ec5a1151df0fe060322144e81f68c24135dc0450d88cc370bbbb539437829da659622b27e1eb8645249518591182e126c8b1da02e511f59340eba10dab125569e56d51c41f61cd0e1c359dcd0aece6cde268b941a7681b1c78da57a
+Entropy.8 = 74d9e68b256193fd4abd18f6a3ed0c48558039a1a611320e
+Nonce.8 = 986fbf89ea3f65aa491bdff4
+Output.8 = 79a3ed8db4ae607601dbbe2690fb01e19aea95f30ce563d0cd39b9fd537f4c048b5136645cd43ed9e60d77b21203a70085bd8f6bd16ae33fefda796b11cad5173c0af42ec369eb9422a4453187871a0f5be7b381fca79d4aa05d50c0d59ebddbe7974ac6a387eb27f70ce4f679fa3ebf
+Entropy.9 = cdb221e409443cebc91f9ee083796595aaaccb0dce24da0e
+Nonce.9 = 925ebd02da9e4e3be1bcaa6d
+Output.9 = 826005339522db9c7c7399c390bbf4f6bbb5c552cad487b443a3ad1e5db3622a98ef61f712b03c5c5e975fd4979ed9fb6d057340855ceedd8d45a6468762d2726f313ea23a1dabf101bab8cbbc31eb67dfca58711aa16f07e553269c380266e04face8bea52dcc6f4c3b7f901df01bc8
+Entropy.10 = a961eebabb968499c010a92e71f0222119efcd4056961bea
+Nonce.10 = daac098a7a136c8a847a8e25
+Output.10 = 5584363551b2f93f31df0796d72449778e5e9b4f02eddfa06426d6857818d385343a553b55924ec848cabd6a1a6ce3b6bd1e0844e1b7d55d5b8e631cb24cdacaf7c2ee5452ad41ef419d08b53336783f93f108be30a0d9db24dfc7e5197adb2d53ee0537078bf946bea1b6174dcb06f4
+Entropy.11 = 2e66c4cabd72b8c2f8094370d7b118fc63fa9d24e9a40299
+Nonce.11 = 7342a6af50601e3fa9d20921
+Output.11 = a55517be119c37c3605d3b1aa4680abdb8698d9ceba46e66f702b204c21c8cc980ced84759dad161a3a84d130aeb4c37ab41ac83ee696a8ab3c9656c5e4f7ca51fc9830d3841d29e2f38cace9d22195242626a7b60ad89acc32b11aedd82eac3401e246361b61c05da5226645cd6592d
+Entropy.12 = ee960f5e2de2b565c4c7c4cd8b0aeff9bd0fa294ef2dd19d
+Nonce.12 = 6aaffa9d66fc3545752b167e
+Output.12 = bdd50169fd9a819f429fc7ad947394ee155cde628469df339fb479155e6b232aab084709aeede7564e1aa0cce6061760b1a3cb36730964d9060b970856009d0c6701fd61243e7c86f09000c2d91a9a429517737174fe99a9442967218bf8d9701bf4e37736ae467cffc343f0f2f5cae0
+Entropy.13 = 10aaabbcae9df8a6e9b45d93872e08d470a5b143fb349e60
+Nonce.13 = 2f2e4a64cc4ea0f25675c5d5
+Output.13 = 7bc574e9a6e0cf6271fd7fbf6f8878373763e4f925239339bfba8cdbcca600213ca667b6d75e8ffff84ef6963b3023b0fbee76d890af3ca4c552585219197faaf963d6007d23522d579d2e874ab1dc517c0c2092faad19e8e10f7c417adf02391c6da6e27be0f60af99d2e3b4e0904eb
+Entropy.14 = 08a325accfe119fa807a95e8cc2cd8ff041ccad8e2c4cf49
+Nonce.14 = c85baec1c2d1f3f189eecad5
+Output.14 = 2567712d6fd3b52364b508bb2e4ae18e34b155dbe99fef9acbe21346715d36c538dc380a5e5900e0ebde76c779006fabe2b3f171fa63fa0f5ba264748278549c9beb26db701c8fab7adfdf48eb63e48ca6f3be8f17131c5e9145f5dadb00fe666a651d2b1b9e785fd444b05d4efa8ccc
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 57ec3fe9533e71f46cb381364c7e7bb3be15c16b8a484a80
+Nonce.0 = 0588d36a9b96207b3c169500
+AdditionalInputA.0 = e557d72e18467da1256c35ff5f04ad049ace3a71b8149b55
+AdditionalInputB.0 = ff296d65a9733440c2970f2eb0f98b52500d5d87819200e4
+Output.0 = b8110a77cf2a6d5bff616f13d203c58b1c3fc982c2e6d1717cda266be36bfbddc4680e6881244a92b2a9eb2fedde45e70c8236b20ffc507c8b34e6b45147f85505f9237c23d5b6bd9ce2e69ef559fb0a42e26c42bbf64cdf4d8ae02b9e7e033abe49bde1a49f857565b1b65d66dc8bfe
+Entropy.1 = 3fff3ced5bbdd110846671b7c2bc239e9dbfd08a78906564
+Nonce.1 = d4009d747d5e191d91c710eb
+AdditionalInputA.1 = 4964ce869e7a9a0e8be86da8999313401308b979c2ca07c1
+AdditionalInputB.1 = a35e6c2fd6dcd49cef38f8023255822f82a825bf5d4cbdc2
+Output.1 = e4feda7a2d3a3bc9a63b16dd48ebef84503656a5a712312f8cd18484d89ffe2e2db35b6da23ffc6fdb885a37fb594d40a5952916d909caaf4baa422be7f604769d70d9134f09ac76666f90897e390882001f4a5dba98fd6e3c5d6ab4cf259be6380b11be2f64158650cd03d28c343f0f
+Entropy.2 = 546d1ddf61bae1b0d070dfdf14b9842296136b9905db5f7a
+Nonce.2 = 9b567c2c99647072a2f36f9f
+AdditionalInputA.2 = b47ea851859a5359a4016557d3e400b2989d31adead62642
+AdditionalInputB.2 = 5c7e7e774dc0bf68e5fa5e8961b1dbb88f48be925e29c524
+Output.2 = 63478e622e9ec86597f757a0453d0d79f3328dfff8606635afbd48d0930c44cbe067eeff10cfd56029236328685a7a3d96c8a84145a648719130239db0425f21845669b9cb1a114f3fc532e73818d0e832ce28c945c45d9dd7463b76696115c3afad89946e7bb6096d61c77ca2d0caf2
+Entropy.3 = 6bdae2c75a1b00bc5577054d425835f2104c57f73bef9c75
+Nonce.3 = 208ffc58c5562e8fedfc6405
+AdditionalInputA.3 = b9c029bd7716c56b1d15c34de531344b80467abf2a3ac1d7
+AdditionalInputB.3 = 8ddfad16dea80d45620f58b791b0e4efb6b06fa707103fdc
+Output.3 = e42b3c5de8bf00430e57948a515f59db11f534c5c680b9ac0c6a960c9c9a4b6c2ecd3dcf28bc5e421ae7c0dd00e5b917420d4960cc4dedadc2ba576bcd4626ce08439f747b7e192f167e3a814a59ebf78898c2e5fc2d8ae2618f0f36778a9793dd120130423f09e7a51ddffcd3ba7083
+Entropy.4 = a7050ed64ca3be6100c29d7412be192e2328bb4a428f9817
+Nonce.4 = 87f1be6e98a5fce717865a5a
+AdditionalInputA.4 = 62782544d2586a307e8a93815d3d0c0f37bc130fe6a617cf
+AdditionalInputB.4 = 4fae0a45436047f36bd6871873995e569f4f51f8bd78223d
+Output.4 = 837b99c913c8c876d251c81541254c5d9955c8df693a9a09ff485ec1c5edcc9eb58bec7fb70bf01ba15437d4fd6514fbdef0551bdc2862166231c349574094542145df5afb2394d46f089cb6971213322526339b7a9b82d2b42ed53f9415319a6255bf7c6a9f973fef0c598599cc0e4b
+Entropy.5 = 6cdf34bfa839e52c08ccfe7dc67e28b1b6a6eba76af69d1e
+Nonce.5 = 6881cac7d7bbe9d5e5cc506e
+AdditionalInputA.5 = 3a4e7355f1edda2ec1f04c20360720aa98e092c85d0d1497
+AdditionalInputB.5 = 7c669b1ac5529d08bdbe63420fb7b3c4f57b2c489a92562f
+Output.5 = 4dad4488f235c6f3764bbddfa9584ebf3a8f9532b32fa2cb7ad84a65aed9fef6883688e8d4a404e1b6e59053de30dd65c3b1afd12bda2e2c81a8cc18d13d927499e6e471b730ad366f1b135fd4d97cf8f2132f7b966233894cb6397a435e516ec2ae26829839c0ed5e58960cc13a886c
+Entropy.6 = faeb44374a731c82fb796f679c137d360e905978b4ced587
+Nonce.6 = 0167ca06d311d149d6ed2f30
+AdditionalInputA.6 = f8481def8df17524980aff55d653a1c221baf18206edbc70
+AdditionalInputB.6 = 16d5448307898425cb1014d6a14e641e25184ed2d2d3dd3b
+Output.6 = 7a942785235544df844c6c3033e28a0298d0e64709efb36d3d8e9d3da4b1997dde9cbc58f6f0463e3425836d301960096eb0fdf6ea523be33ba35cedf9851955eb337dc06ac2bc67939da433912262f10670fb75583d07e848d8ed7ad9509b40b88b4fab9b1a4a70858b62f9618d42d8
+Entropy.7 = 509d37f3cf2d564ca35083a8c823dd498f36de4858c9cc30
+Nonce.7 = 0921aa137edf66b88398788e
+AdditionalInputA.7 = 949d1399d8852a6ec8edfd205b5c8dd8b5560306b3299bdb
+AdditionalInputB.7 = 49c7c7774b4edd529d3012b25aec554c26f7247ef62b9f41
+Output.7 = 374fac9f78c78e0a9a00c9ef630aa725d7f4b663549ee32a91317a66762032e6bc2e65c8f121f9ddf85276d1205b4c0bdd3c9c672ae287127f15a5294905fc508f18eed03e2bb0a7deb87cf6def9e558ee83c909b348457582877098cec55f32f8996cb97a7cb477db51c48f75f93b2c
+Entropy.8 = f0233dab01ca210375e0691d710e278bc094e0da74e28a11
+Nonce.8 = 22a3e5f5cbbdc0f02fdde2dd
+AdditionalInputA.8 = f32e29e5416591ef1b0793d90931284733965d13c10604eb
+AdditionalInputB.8 = 1f319ecceb9da477a063f53415e477217af5426d2081e0a4
+Output.8 = ffb6abac49d5222c54f7445e7c2f96ded4a9b33ed082e6b4eb29098af75faeaec618c08ed4b1b8e9851707e5bd74d626aa0c7a473c6b225597fb986c0a84d1b4db05b2eff7574e7f8daf9165621408fc3c70ff143a1d30bfdfa6846a9430f46c8122fc61925bc4d3389203f8c9d49677
+Entropy.9 = 371141411acb60ce353a99001a34ef64ecd08d9c1a3d94fa
+Nonce.9 = 20e31c5f4642f3419aa6572a
+AdditionalInputA.9 = e7bf563c7481567cdf750b9594bec27a23d9ca1a2afaf121
+AdditionalInputB.9 = ef60f08d130484bed0259c3afa1ff13ff8560fa9209bbb55
+Output.9 = 670eac12513e54bfe7e972b98376e3f3af484e74ab9c8b254562b4d80ddccb749e429f13cd2d2f891c0da0d7ca82ca0c3e73e23f9c445b2243f0392690591e399f7a6ac93ef811122e0ef143ff712e518ff48b2ef10752e5c0351346f7eccf431de77f2da8024c03bec3e7ae2d6249ab
+Entropy.10 = 96e47d26fbe063fa5672e45d85beddfad1bc8400927595cf
+Nonce.10 = cee03bd6ccf68cb43339edc5
+AdditionalInputA.10 = ed1b0cf1cbcbb1db11325d0d2c42bb4cafacf52d48a90bb9
+AdditionalInputB.10 = 5eeaa3791e518ad39d49d6feda6ed8dc8b745b1dba128c25
+Output.10 = 0e9e53b9a3755455b75002797ae1715bbd593ed3b0aac423916da5048ab3766ca3274e715cc739e1d8dff93d3eb5eb41006b362528f38eed8d65ccbc48c13e4bbe8501d36cf89caec78f306442b4c84032fe2688dc453fa3a5fd5ee388495164694e5af82548d2f35c82e21509408faf
+Entropy.11 = 39089d3faf3c4f562ba15c8a87b533b792edfda4b70c35b3
+Nonce.11 = 6ca12a4ac1957a25bd2d72b1
+AdditionalInputA.11 = f1325d8cc54a4bd472e47a7f298d8f87b5d21522b733e85f
+AdditionalInputB.11 = cd3e29872c0ad0ca42e988a1e7b2dc1dcaa969de8a1e7612
+Output.11 = 18f69df6dcd8e5a13c55c779f78381e501a7a59e1add9cccefd95866ae464e441c16cc538a8519ae39373b476a90796c6fa0f31d9789a857c2c2db02e27197f28571aed511c97f2fed2871105c2ac76b7382c563caa78177f8b9ef481aa04773ae0705ee1f71bcba2c58db671f77acb6
+Entropy.12 = 29273551e60c507b97ee3321dffa92b05e47e282bcd47bd4
+Nonce.12 = 684db0cc7665a4f1f64168fb
+AdditionalInputA.12 = 878a46b06144e8a32afc3f31e8c5718cc6601504b5580053
+AdditionalInputB.12 = f7dfb4c5acfc5310a6c50e7f2ba088b71f1cdfba13331219
+Output.12 = 2a31df52695d478083c5dea78b0ae1bff652c751eba47a48cf921b54993d469b1a31d96abdc3d63907b4cce9b76ea6a5322b1e4bf6c10956cc104a950cb1991390374bb8c6e4eb4c370300a59138602768654c2f98f3419cc76c95253a1e4fea1b92a1a57806c492553f6d9344e16767
+Entropy.13 = a688e1931165bfa1a3abe9a05808770a5794eb418ca09127
+Nonce.13 = 8484f1229a5ddc11d3db57d6
+AdditionalInputA.13 = cd41c2ab3a6927b0e69f603769d76b42ba4ce0a5c91e989c
+AdditionalInputB.13 = 3505ebea09a6d420186202e06bfe1bebdd642cc7bf22234d
+Output.13 = d37da943810b389e6675179f960b1c1d6f59ea87f3f14568fe53ce0885e8ef34f3384fa840742a9164092dcfa719e0372f20c905694a15b97667e16c9bb88c66e3b94cd0b41e9010730a60d6eb48ef61e287e71128d7e05e22c4bd3480f861bef7221468638502a4ce26f2cf5a015ca1
+Entropy.14 = 2a9ed97cbbbc782ff8578faf135881d22ee08aea73b3d920
+Nonce.14 = 024d6781b3bd41c5f468876e
+AdditionalInputA.14 = ae701404440c584e27266a12318c1793b6a112d96e6a6749
+AdditionalInputB.14 = 53861747c9627e9244679d58e2dc8cfd8a72d1bab611dfd1
+Output.14 = 665481033912ca7d87caa56af2612338768b044953b02b9a50e0244bb805ca007648f71ccf923030e56baa13a88111fe211091a54744aa5d82abe97775878059dedc6272e7c7a5392d1fb443b770ee7f5dd05a3f2bba4cab1cf473d02648d4f8acce91ef167e3ac00c1c9324ca074486
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 9e7e20ab14485f3638d7c21057ba5014b64bc6b555c0c07f
+Nonce.0 = a5123d9e723137f2f735d16f
+PersonalisationString.0 = fab61ef10db3d14a61ee7c4923fd1dce1b0de0c74f3b1b5a
+Output.0 = 1d5adbf9a0dcbc7754b669d49c4b36ad5cdf12b8a1ed0854797d11636f9c901a4be0fb295c459cfc36293fabd40e90419b6908f41fbacc4d8569731f376c35d78634530827173dd7db7eccf616783576133d6019b869ebae4f21524092fffd9b0909dec7e49fa3e465d07ae5103f0892
+Entropy.1 = 48f5b0e478ef1381ba5736a31ee174450b4f8c5a7ba4ffc0
+Nonce.1 = b26b2667562dab396fb38979
+PersonalisationString.1 = 602dab661d8e8b90b39d12819f147360519a27aeddca9bd6
+Output.1 = 32b06226ba0ed1ac99b2717841f7a32f1f749eb89b8aa0314db53fb6ece27b7261d1d84e3b942b65cfec767e158bb5260720b4958e2dc632f6703578fae0d97d60c944b373d6070fd276a442063f91157951c7461f25e05e024bf44c0deb5feb34828b930437985e0f627ac5f4643db6
+Entropy.2 = 595a904e81b8f0e78a9af3cdea59c1e4f1e8d1828c04c3dc
+Nonce.2 = 7b5ac38c3aa063227adadfa0
+PersonalisationString.2 = e499452d048bb04eea2e19ea236e6c114e0684d886dba38f
+Output.2 = 4bf95e071060bf536a681beecc5caba6c8cf0eb71e7c9647eaa953a3ddc8ff3ab4f8d8d76cd119cf339c491e54e010c7825a74d7658a8ce1924e1f24ab60a354414aa7109a69aaa3a50dfe187f7f562e30e1dbf7c9de546094192615646885841d55199d0606d698fe4b7342704882fa
+Entropy.3 = bcf847f45abc8eff6f7a0e158e1d27a4663e06d1cdf4705a
+Nonce.3 = 6887396363601d522026b579
+PersonalisationString.3 = 7c86288e9f3fc1b6f7433f020e231ae7d88dc23bd4b1924c
+Output.3 = 696c8477989bcce357e6297a49ef021d5fa87add4b5eebabff8d5e9614c3be39dc432d0fb9168d7fe30c8aa6532c7499cbca5fb6de898ef785cb1ef1387d5e15cb07d699af4eb3bf4a2b70a300c625edc89e78e2539cbb4931df82cd5814ee2a2dd17829171d1b52ea850bdb79052be0
+Entropy.4 = 1b2b172021f45e443242a0f4be9843a94ddd558118373558
+Nonce.4 = a53e39d64c49013038ef6bd4
+PersonalisationString.4 = 94f9b7f659d945105e07882bfb1910fe37b524e22145177a
+Output.4 = 39c8a23b7fb65e08574eebc2a13a337bfab83fe86c4357cb8b70b542f20b6326bb9dda38f872e1ac12af4b69ba2192ca791b8bf0dce95789356ccea93ac1f8eb2a8a8016a76cb11e24054af33d3bbd873d6668c25386204d75efe45841865c6ebd8e659eb3fe7b35a2f530c21660e377
+Entropy.5 = 98974198980fb7aeb80c1236888aeff4f3dbf3077ec9721b
+Nonce.5 = b0bc98b7862d920714d45e0b
+PersonalisationString.5 = d42f9cae63146b60778af96bca786400e39922907d72750a
+Output.5 = 0ff30be6aa0ae9c5f88fd185775539ae3cc2f758e3e3ea8973421f1e80f326552308c3365a0c515ee402a70eeea86a9a6e1d0324e7af59c983ea0f55f74991aa86aad89faae5f4dff40e3ac5050d465323ad34586e9328dc6a8949c6d96d74ee1a266eb6f21593a43f7875289e6e6002
+Entropy.6 = 93f74a2657f77af265ff2bfe239dbf791b95c393741925d3
+Nonce.6 = fb6b25507a03dab25e16e90d
+PersonalisationString.6 = a7469a28f62717f55d37942a1b5b1e0b8826615946230e98
+Output.6 = 3263b77752e82b44c1d50c89587ba17d065b75ed74060d3b6c8a7da560abf9477a807c415f927b501b323e83534817f2908e468c1381de28003fe84840eb0c00d38e4508651113cd718128ed139e1d73392a8680e3c6bd48c1bdef53fce3c7caf869e80d451b1ecdf9376ea8af013618
+Entropy.7 = 3ab557b366e5db028976cb6a10b93fa1ecf15ed083035932
+Nonce.7 = f2a593ec45593a1c5f3df02f
+PersonalisationString.7 = b5ee3645bf2e69d19db24ceb4108bd1744581006d3cf40e3
+Output.7 = 0b54712d4cc97cf575141cec2da8f0f454ea1b1e2160991f433f976132f3022045bb6d9f1adcb693a72fe7c7a73463c7eaf805fc1782bac89593b9fe313d1bdc4b46531a385d5885206c3b45a663beb8cef069c1fe5748cb595a23f146e8eb964ae312a53ab0edc870585bee280c0bdc
+Entropy.8 = 5d37382677f0f018dfdfe2fe52ab8889fe66632ebef3b3a9
+Nonce.8 = 23ac3092d1d655aa549235b1
+PersonalisationString.8 = fc0287a70afa3b32f2976aebaa9180d2f75a0cba5d60bea1
+Output.8 = 50203b0d1790105742988c2d522c2aea0f214ea7838bfe74133f088673a443d861ab61286843ca8872827df9ee911feb6d1fefe207ef1207c469c8d782a1d8a3592feeeadc69e889db030ff56bb1dd867542aee785d00ef3052b846906d554be510db992400e58e8353b8343dc672eb9
+Entropy.9 = 08af5f91562cc16d21de2e752239c08968688e24b789f254
+Nonce.9 = 1c14e7e904d5d1a07a79f97a
+PersonalisationString.9 = ec3736f64db617371be06196aebcb684d3fa9ac6ce1354ca
+Output.9 = 7b78c3f9be80926f962d9fd68c53428a6de1472574691e88ccee58ac6c1de0bee933e701785fa97740cfa3e8ca305a2ff9ee08d8a496551336696e6cfdc9b1a543017461518401e5db39619d005626421d3b6b005c2cecbd36044e49388e5f8715341e60e9ffe241165519474f21664c
+Entropy.10 = 018714fb60f53fb1963cb015a48c34fa7dba0054292dd8bb
+Nonce.10 = 98a2df9ae9be1ee7d55263a9
+PersonalisationString.10 = acb8b85f7b2d82035d6394fd5aa55e4c75d0f801c4033e25
+Output.10 = a4e60d42cb81c787e51fc988e184fbade8f66253988823e9d48d9bb1ffb971e5fd4ed5dd2587d957303dfac5d7615160790d0345d9ff5654dbfe2d67a6477c210d27578eb66ccae918d6bc1898e00e943617acbe4c3e7d7513157a63d40684da25a6a53fbc0dc5765ff14f961728fa77
+Entropy.11 = 73faa419e45b495c279958ce1711f05dc0c08d2c2f4c4e9d
+Nonce.11 = b251cc83a727a5487d8538ed
+PersonalisationString.11 = 7896475d8edfa394f97b99dfa997353e4c5b3ae77b683288
+Output.11 = e4cbab42a9ceb0c61bd63ae1a5dbe79338a32a98874883acd69b9ce7f5360ee04f7fd18096dc4f03255b8f282ed648a4e6ede977fa648f658fd1f3f191d8e72022a65b14d7fd8ec98564117e98f123db1e9187a6d553dd576dea6ebc00401d8424fe3d0532f8178231e7ce3b6b9f668c
+Entropy.12 = 10176715b5690e976b4f24f2f2602a8ccc2be365c7627a7a
+Nonce.12 = 5f3c085a00995e66377decce
+PersonalisationString.12 = 737bd459570a832e5714024ab2bf23c82221aaeef17a67db
+Output.12 = 6ab86eb8b59124591708a327c621781003b5d02b1ffef62746be109dea8d14eb6fd19787eb10f00b4c49eb444596019a7298260b58f0d4cb7f78f2b38ce5ed5ed7c8fe434a9352e43d16e0fcb7de0a4bfebdf3ad178e692a87407c99e7615ee578cb48e8cfddeecd779e795640797ed3
+Entropy.13 = 38fe230e10f88c866e6a24da2dfb2b673c089e35e0121165
+Nonce.13 = f8c136acb3462ed183bd6160
+PersonalisationString.13 = 8cef1f8bc7a7fe65bc73497ae9cf14ce9b19aa89f0d7a21f
+Output.13 = f52a7ef834d1b1fee9ea9537aa9a8ce7ae1568501c03c865dcf1a9539bd90da4a0baa9696c27b55cf00a4012345bb86df73f6f735f50809261da19f737a2dfdf8f37d8cbc7fb1a37b4f07f47abd40c6c2941e1599875f3ccb73cb50d440b5ef8282bd7ea7accffe5ae23092e462c2664
+Entropy.14 = f7c0487018b79c81579d97ce58732c2be599c043bf8d5709
+Nonce.14 = e41f19a969494a2293ad0542
+PersonalisationString.14 = f67bda6553b5e4b89e309cb48a336b78460aff498846c2e9
+Output.14 = 44d544ac910b7668ba9c5524e388957520fdbf11383808a5a8008d119aff7e1e2bbe63b4cbff19455f20f3dc79ab0a83dcf0e403728f2a2b2a9f3b98930d9f285641da3b6b9a9467b2701ce1ecac82bad8214bb618c40999f5023dc2d97dc1a53a0296d44f6fc9d49db00959c89e9f5e
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 1bab3002107d7de482ddbd21bd1ce935167214236c92e43a
+Nonce.0 = 4a7b14930f5df7b3bdf07054
+PersonalisationString.0 = 4b1a3411df2fba9949d7b700f3eb75beb34262aafd674e9c
+AdditionalInputA.0 = 7f1eb4bd7ec9b4e59a0fc53a02a95170021b5776f7285d8c
+AdditionalInputB.0 = 6473fef885a0da4788045f51cd66abc76ee052f1dbe5a30b
+Output.0 = e0a42484d556ad6b20bb2dad3511e66aa2805af76174a70632ffbf6d52f157039dc678698ee72aecdbcfe4fede4fee9d60dc38c6ae8ec97966dc88051499cc3a9ed58bd18d61f7cc64c095a2b49a956625c507a04888fcc2e19ea2c285be0b821c3862914bd620193f5e26eb81e6f2ca
+Entropy.1 = 30eec7225472ef50584745c4d676b61200ee836795f017cc
+Nonce.1 = d761bf03df1cadd9bea7be70
+PersonalisationString.1 = 002a1e6b9b5ce9815f73e982394e59c950bbb24d206a6c24
+AdditionalInputA.1 = e7f188e48df3b5ca50b708b5c84719ab27b1581252fccf27
+AdditionalInputB.1 = f88d3d90d63cc742d910f99f5ecd667d6015b85bfe221eb0
+Output.1 = e15b37d524a96b80df3760f34292ecaf61058ef149e07f703da7149400aa6d99c782fc763bad6c49e30c6979d759f91440dba1caf411a691de73514919e9e6102a3dc766c470181b10c3d4345bc1325cca41aa784456f2fa78d5861c591b4adb749a6d97be96433aca16a0e603aa3530
+Entropy.2 = 72e7883fcfccfd62d3f2150fa08ee829c9c52356aec67541
+Nonce.2 = 001df146cf34d5e2e595a710
+PersonalisationString.2 = 865cfe82eb7c484811ff8ca0788689dd7bed895da4df4150
+AdditionalInputA.2 = 1e7ef4aedcba893a3a064427fd2510a2d959648997ce0834
+AdditionalInputB.2 = 940d31590fc49c73a386d8d0f3f1eb6c0eb2f27071982612
+Output.2 = 29125118f209ced4edce132adf6c303924751ece992e4d69fdea39f41e2ab70d8fac68c6d97dfc2a85a63bad2e224e1f2862533a69dd0991b322a8380be33a3bcad0b7e157d794922e107a8fde5951642b05f6872409aaf7c33647e0efd8d3e413247ea2e1814cb90802d244894a7d9c
+Entropy.3 = 61bd2985abde8125847f20bec4aa48a5db010dd7a30df85c
+Nonce.3 = e2e2f42a84a539be984d2943
+PersonalisationString.3 = 3028581d08ce2ece9f3aed84f39e74f91c6fcd255302e8bd
+AdditionalInputA.3 = 7166e72914bc5e7e604a4e0676efbda668053ecf17ee0c28
+AdditionalInputB.3 = f7ca28589b5a3d8c4b951858c252b9982bc7db1e2d0d7692
+Output.3 = ba9ab80afd33c4ff09192a41bad9bb631c3906e80516a291beb9ff3e094473a7f67cd3b24494c3b8a27b5418948802d091f591400ad95223fed1fe74ef0047b25da08a1a6a292213fd669a801f732cc1b3a3e37c948d12746e2efcec25eed880ad1284283d82b996da95907d137f63d5
+Entropy.4 = 63f006ddd4457b36ad98266c409843bc887909e91a08cbe4
+Nonce.4 = 78befcbb0f4b40c7f8e05e26
+PersonalisationString.4 = 9421617640fcbc98a0c3af2ccecc47f17a7a25d215404c0c
+AdditionalInputA.4 = 6690de079871e452b0faf6d4bc2b60ca0e94402a15d81407
+AdditionalInputB.4 = 910976d3fb6a72a9ba8e762ababca95f7e2dedc4722f1b2e
+Output.4 = 0c127ca482e866e0002de04b89dfa4da737758e2f86e59d8e38562515b366b8150c4c9aa760f7a990f498283a8376ea9864e1c12700748f3aa7db8a58ffc2968e4e3b6db7a30a0cfc400ea1fec45bb3ed47e63aa757b16bb3d83c51094847ecf9986b600f8f8e6c8f2d71c09bd8c0c5a
+Entropy.5 = 919ce30cee5673cd5e370193c82ef302042e6a086ce3e417
+Nonce.5 = 2c5a8c562f49ca60ea2b8a08
+PersonalisationString.5 = 2e40eefddaa7264bb7862ff29749b30dc08dd0a6dea87aef
+AdditionalInputA.5 = 5a291bfe3f658ffe92cea07cacb7da014d9a1abc6dee4f8f
+AdditionalInputB.5 = d1a0305d91ecb9e475ebdd79456c918cc42078b2ffc8d1a9
+Output.5 = ba9f67613f729a4c439f7f3d8ec243aa6a93f0d24a5193790aaafccb5884492e97c659c639fcb9c1645139b9ff59ccb5e6547d5ef6d0e9677a2783a4b92fa908393a899acb10140c127da125368f5d2d33db02da4f7853d893c0d796b9610b581244f8970493308dadd393b4dda24201
+Entropy.6 = 2e1812a26b9f528507703f924c4e90e0177d0b840d8d7895
+Nonce.6 = f5f4941005232e4e81a5924c
+PersonalisationString.6 = 982d33bebaa6dbcbe340fc9491900bf630db8623f5e9018c
+AdditionalInputA.6 = 726c5209a537bec66a88633821fa9ed20c1513343f138219
+AdditionalInputB.6 = 16708e9315e047dfba2a09cb6e470d427c30364a57f0adfe
+Output.6 = bd8085cab7335324cb5020fecdca1ae30959f9ceca2cc165591e699450cb28fa31130a3055658dff122f8b51c571eb5b32b9c6e3950ab93c9f8d25c83dd591e31dd73c3fa874abb6942c450d95b352214e480943ae6d51376b8fe08c9a6af0d231548085fd883a35a5c5ceb81a5068b9
+Entropy.7 = edf886248c36776c68f61ad1c503ea221cdfd5f5b46c0aae
+Nonce.7 = 86de752e8a66db374cf4dd21
+PersonalisationString.7 = b1ee07f1b27c5095020761e95b5797136b8e4007ea34289c
+AdditionalInputA.7 = c0e37683ffa869f741d7780d3b91f6581053a3f776abcb1a
+AdditionalInputB.7 = cc5c7eafd69ebb7f53b95a9c4898bda0a806e33fa7a8199c
+Output.7 = f8364516bd1caf2756d3fe58d28c63aa5fc938aa5c81cf5a391fc0534777b177bfc81234fda0f8c48329c8abbad50934d239774ef578af162a1ab8521a05fb946faa8d00c7d0aee59d20514bf0bf2f34a2e8bd8af00e41485cb980b93f3b23fd3ff369e73a9a7e8e5c51bd5ddfd6a3c9
+Entropy.8 = 1bb6659bb07dd8f917d116c7fd8f70b9690900478dbfaee6
+Nonce.8 = 6fe8a574a9c3b861cca7237e
+PersonalisationString.8 = feb686a43fab38860c78782b7af6d6f84a5c0605746858cd
+AdditionalInputA.8 = bc345708d16a151117e727245a77aa7876950fbbb93c191d
+AdditionalInputB.8 = aee40ac3ea5092a0e5175bd88394c8a7ecb918e2388fd392
+Output.8 = a2940c974731dc62f488da42e13d393b7245cc9b2421de67f1bd50cd369507f157095c6a93753771aee9a97963319ff00fbaeece28a18aac7e66f697957d37a74cdcdfdfa0c55900980224ae59486b3d14b9c5ef0c9932c78aeeccd883d4fb2b7287fc4220423f635b3455e6bcad9f82
+Entropy.9 = 19cd3546e81906f47be220bc0e61a4a3ee2649e2892ed9e9
+Nonce.9 = 0fc41524fdb61c7446c31d06
+PersonalisationString.9 = e4debd11929e7100f9717d07499b3d2b42294b4e1aec4615
+AdditionalInputA.9 = d18658bcfcddde258981445127414ada98f41c9a88cab369
+AdditionalInputB.9 = b88b9ad3d560d9ba8d46d1a75c1c7a1d5a849bd8b60e5864
+Output.9 = e2629e998c4abaa06414918ff0291704f7be337583e925bc157d109fd414ef1872bcb581946715d6fc5f8e7589075856cb14bd6e3fbf3f22655102d567e95011697912a1e64221db9bcc6ece8e4d3c835d56fe95246a499a96495ebf1f10f30261f50228cd7e0f7190de8bb8c25cc4fd
+Entropy.10 = 570832676dde2571c29d228aa10194b98fff4d22113ac6bd
+Nonce.10 = cb20bf3ead7dee58f872d72b
+PersonalisationString.10 = 0ff90aed77f3aef768f662a7f178502c797a1e84bf724144
+AdditionalInputA.10 = 0d33b4e282e686b1d3c892d5d5899909aa2b4332b76a57ed
+AdditionalInputB.10 = b499be360808a6651cf393389c6035a18e300d2caf80af63
+Output.10 = 5ef31ceee8f12bc07a2f121c52260b2686e79e4f617bb9a8569f672cf569c45680ad360bd49443cebbbe0bbac5ba9107e5056d62050a9c6f1000d0b1ba3c70e2379c276e11aae99d425c61330d7994812e6e3f242511de45715df5f41e92a2a4b9de3296b77e0e2f94ac06f81d59900f
+Entropy.11 = 420014f2d7fe3e8f0e18853aa883d5a3790ad462e8991041
+Nonce.11 = fb3c1a7dc0d5d5e466d79f47
+PersonalisationString.11 = c25b761a0368b5b157cb3de8717e7a49b548da3c286695b5
+AdditionalInputA.11 = 1cb26c9ee6a57408e1e97c44f7f5d7ad6df1fe72720e95e8
+AdditionalInputB.11 = 230df1b947f49a4af8d50b6476676863391c388d37ce8250
+Output.11 = ec50603a77e6dd71131eb84f1aa27d767344627ffb2fc372570cbba13b3dc5c9d1a4273ca27aeb58a685268da846b0e48cddecb48e52e659d6b30330cbf18cacd7e95ce9bdaeb95cf39b57fb7100bfbd56117e4c8525a62540c309a51b0d3ed407c4450baff058ff3bb482e17deb166c
+Entropy.12 = 0157720fd6d573a9da653b99af202f9f8e28e386aaa3044f
+Nonce.12 = 84c575d3bb195163f003d739
+PersonalisationString.12 = c9f419dd3684262d3746012a42419e3d3024dc78d3d2779b
+AdditionalInputA.12 = dafe211b9a53b7ea473c235e5dca0022d10d7afa6bab46fd
+AdditionalInputB.12 = 71366d7acec1b4d80ef81ba514ac572f897f45a0e729ae27
+Output.12 = cd9b74d1c8f1101e88621f9df4bf4d2b41d06db74af8bb221d1a5054cc296b3c2293301e32bd20db4697784129308d366f210adb46f451ab720ef729f140cc712d98e4c07e23f25fa4255f11f840037db870dde814d002f35a5232412370c28b28ea001428550d836ae0999676370eb7
+Entropy.13 = 4f9ff2ebf2a5493ab6bcc882d662108c4eb7e23ea2aa9bf3
+Nonce.13 = 3ecb528e7757a8dea6a69f49
+PersonalisationString.13 = e9806c7050d4eb3e23df8301598e848e5784b365e39ccc42
+AdditionalInputA.13 = d0c111ba31c992775d870796e9f7cdb1dc84cd8264f21467
+AdditionalInputB.13 = 5ce7aeddaff0fc56490cf5e167d6d5e936d1dd1f2691058a
+Output.13 = 2cac8f376d0e0bdc23f150a3d7970142eabf2a5096c3b2578946997ba66bcdaf9b5fe0d0b907d49ee86855a27c9c8c8ec0d5a630ae2b2f35ebd9f0031d497b3655da00494b93da98f82b43c4b8ba223060c577f27d488c48a496cdc5827c106d116a8d291a2462493ec45eafcc68b810
+Entropy.14 = 0d2514fc19a6be4bcb424115f4a4f7e0601b11042b535dad
+Nonce.14 = b84f6a9f408d87d6b932b127
+PersonalisationString.14 = 316764260e00d8e4b0a08969b0e9ed8478fc85e26f3b8e9c
+AdditionalInputA.14 = 6a7418d4ffc40e11859f33189d5a8327042ec268b004ade8
+AdditionalInputB.14 = 97beb8c47434a23efe536287d776edda7ed7cae84c0c7e35
+Output.14 = 1fe94acb5f5cb7e4a8edf5be61673bdc066288538dbd0ac29ce2d43f7b890028e48131e6b3a7cfbb42772b63f2fac8c0472418653ee2ebcdfa5ec08683e7d4a9cb2c67cf7e22c2ddc779c6d9971b29347e6688113294c902a5d62c1fc35595e091cb10e5a895d7c3697056659ae457d1
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 9c65020f706e8c75fbdd78ea563f84cfc6b9050dce27e4ba
+Nonce.0 = 9f1c43b205b36fe351b65c55
+Output.0 = 99f53667646f88b47df606644c02f1c61adec7c89d50258c4f8a918d06a8e1a043a23b083012ccc86b3939e05dd97a4540e4e3eb9f9dde191a3187455c8804dc80142d2567abc93f8db756d03d16683ef754caeff10f58665aaa9663e5b17b06ed8cb7338532380613908eba86b763e3
+Entropy.1 = 9d68decc71bd587f078feda4375446dd17615396a44f127a
+Nonce.1 = e67844f498d87e8bbb8f57a3
+Output.1 = e34545e29a6436b38bbb55d40f1570731816ce159c1154bbc9b872046e5a9035a7cd55f42c0cae7ff36388b8a25b0ce89daac4ecdb15dcf31b8ecaddf7cbf54a39916c829dd4ce9efe89d7e500d09fa31d641c01a6cb69da78d365f0b802ac1ecc4454d38caa02d4b42dfc8cabd75423
+Entropy.2 = 4c1b729c232d90a41634350b6bf66ccbb95658a325a53253
+Nonce.2 = 1e4763e6a25dcefa047031d2
+Output.2 = 61eb52fe649811b66dec63a356a3678e7cb207c36e58ad8ea8d91a58b94428f2d4e69ad49e24935da38efb2338070d8ac72b0cfb8ccf0add461b33ca9c5a9f6075fd06cd3aaa129c1983136c6a3cf220ae5db8cc6bba70b5092cc1cf8a679e01cc3fa76df54a96c36ffa684ca465515f
+Entropy.3 = a633333cc2827486dfe3a5d321f2f4b6b52661cac187c28a
+Nonce.3 = 1441e4d26478d9ecb0392802
+Output.3 = 0d5f4c53a2ad1422490b29479614d864cbc533b8bea9eb6517aff19754f4399c29b536c7f114e41f4c477fb366c19242da40116e6d690717ebad47afb7903ee83537fab189e0f866c12b2d3029528e89d67d557e16b79ef18faa946900a45b863e7de3e3b33f899fe4fc6881b72b6670
+Entropy.4 = 6109f13048e43c82a8808c4d946e6724619a25d7314bd6b9
+Nonce.4 = 492ab3e85d4fc964f97d53a3
+Output.4 = 2f9049109702d4a7e36396268a05531c43c2d129cb12096163d777d916a8c81c9495387e3d74d78e63e20670890bb47cf1ff08c760e2964a66ca22bde0ccf8c6cfed80f69a53ccb1cfdf7fc26d928cec7e6df29c9e96d71d9471e25290dc267247096ab90840566435655f793baeb0f2
+Entropy.5 = a7a8706c6aefd2ef52761c6e121b43e4819ee7a8e554b401
+Nonce.5 = 531f90167a768935c3ab9ee3
+Output.5 = 7c010a60a29fdce26bf05299ebec4237d0b003318e556f65283d00dfc95253d93d18da301d7546dcc89634c1eb7f68439aecf48d2bb43f38125cf8be191414861269df59066f2f6257b6df2e36c2dce63348a68c778bcbb62e8328d8383d0c3c197aabf858787462f737c34ce99abc43
+Entropy.6 = 7c240d7bd377145dcba9299c3f2566f0661c09a21ba7424c
+Nonce.6 = 48e79c69684578e3759d9020
+Output.6 = 2a9bd64b633a397cd0d5f3154fc049da73a2db8c58b46c26d8d7eccb0c92e2979e959ecfa6abb8c8a967f80b7c530e879f93933acf230bc056755324d9521453643b99b6f8d6403d65e75934bf905cc6b55d629237a3c12d8e8c3ba9c75e66773d1b755f6020ba0cef47964138bfe8f3
+Entropy.7 = a14bd07bb34467ff2e0bd383e8a0dc270c60b9306ad644cc
+Nonce.7 = e33f6bfc74044cf7c222cd40
+Output.7 = 61d7e0d36ec226d6e6873cf1e06fde37ea126b217decef90d4a33e4141e3647b09cd80845c3efc701df4f374f91b5aee0548534999903640fed0ae12c1101d1d999b0357c4ce2daac8f7632e6c3f176edd4b5a2fae1798efb488795bfd39b53a881b4b53768d123d05c159726242849a
+Entropy.8 = e727491d18e47a6a0729896d98355f62ca4a36ad73eba327
+Nonce.8 = 05f43e9a8a1eb0bcd450d51d
+Output.8 = 253429a4ea44ba84ca5985779956bf7763fc0b60c3c93d51fe9d514b9aac7a8ccb80f798dfbd0581650cd84d4c23c6367c9e5078fc7739f19b7e2c1850ce694e80df4a7c639d9167de53132905abdab64311571d437c3d985f794748bfa78ce5452c1714eae0c125efaecd8339eb71c1
+Entropy.9 = ac963e16bbb33458253e166033ed0bc4924899e1e4aee9f6
+Nonce.9 = fa04ef8bd29881239220c38e
+Output.9 = 8495d2df82bb3794ffc19e43dbd3097f181fbf4c5d801907b9c74a9be5f2b5ccc43aef7c137cc367a98bb58577c748c9780db7926af184db912c3fba177cfc64dd28dc22f1d423c1df3e92c5485a0d6883c828491766010201756a6f46184fc9bf65bf377710a483144ec82b83eab26b
+Entropy.10 = a822fac1fc504878de7d02eae642fc803df432dba16f7a27
+Nonce.10 = fe6bab4221b751687b3f8714
+Output.10 = 77de4777faa5fa60ec7aa8fc1803fe8e63adcbfd3edbe67325c6eea9f7e1ab0ae572562aa6a4707319c8d3324d6eb240545264258f6caa309778c44dccda298ae7a5cc973562696d7eb07a21a019631a839fff3e7b65f4ca6b1e4f336494d5f58cd738d7a2e515b9ca771d96301ec58a
+Entropy.11 = d5bda6bb1db8610502b3c38aff5f68758e0cae2bbf948014
+Nonce.11 = 388ca55b9b21b61edb225b13
+Output.11 = abf73fdbe8330272be77a28ebab485b9e32d368b38589b62bfd24e2b18b95eec681810de939b9c297a520c2938460083c86d3a63b86e1f2dc6f2b27e73c6825ca780b4d80d1d7b46aad53047ef73b325bf80aba04567320cebb9b69411d3d4858079cea3df45ad8ed77ac0ed4abf7fd5
+Entropy.12 = 8404ae2e83a8acf41b4bba86cc32400a2721f0de90150473
+Nonce.12 = 66dda22b74aa8abe9d70b62b
+Output.12 = 0edecc03b6368917de3877ab5478f8b52d211e9460ca8ccfd3c84d5f3764997fc15ddfe77452e7d1fcf3169215cc76a949d0a1487127604cfd7114330c7de19b958e0d70a4c2f1bb051a4afa444bbce831f9453399bb14ee241e58685af5d981f43d3d0b3e7d823d4771ba3bea93f82e
+Entropy.13 = f33d76bd0a5f52f3e8bcc23a3ee312dd2665ad2a5352fd7c
+Nonce.13 = 0b1a57561b83783b52efed0a
+Output.13 = 7faeffe318d1838a13fef2c6385a89b6a59095d9113fe70a49b83f89e4c87abd47e427185d6b2e6e58da388ef903fb932429dbf918190e3039f4e8a105e589a45f9f26a48db4caa13a7b8dec6c34351e08ed538353330256535daca6cb917988e7a3285100d5b4d3fc0681d9afe51a29
+Entropy.14 = a71c303bf17e128c8e0aa07fb61ccc1f40fdb487a955fd95
+Nonce.14 = d3ca16fb12ae4709d411e5c5
+Output.14 = 61a51fe1eca4cf947bbf2a77d643e7963ca2c587e0eacc8f7fab3b3f0e166197a4d15184cec4f0858de2773d8becb339bbb18ab2c10c8b246ca66dce48e2a0938fe1ab122b4930d603b937491ddd3d10abac731957f2e1e030eef33f7f311ed782b06697914145e266d0b967914d638a
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 938caabfdc9309495fcdfc44cbe9842767c0ee5f46008c8e
+Nonce.0 = 611843a74d8dc052379b5b7e
+AdditionalInputA.0 = 87b5ee416834f5ecef4c44e2f793c5d57fff283b7abe939c
+AdditionalInputB.0 = b12d12ae51eb9b13b6ed70b5ab2bb66b4e37e423d7656a91
+Output.0 = a67ed0ca435774a863d01e01d85a12d5bc5c0974f13a1435d06b1cc47af47039f36cbd19a0e34b441729c4190796ff70deba9d6f02c1c6972178584c7638e0004bfb2f76d70d9aa69cd34c6ac70a5b71fa2dcf9830e50aff7d30f828acc7736fe70528be85a8e38313504b0277cbedb6
+Entropy.1 = 5da96699db3f427d93a7ecc7071de112639b3c931cddc43d
+Nonce.1 = 7915faf89645da8c5767f564
+AdditionalInputA.1 = eb37fa58900ada7428d21b515be543c1f619ceb6bbe5d28b
+AdditionalInputB.1 = 82432e8cd090dba93d57986f1a02b20c8c11dbb51135566e
+Output.1 = db9235843239b85b7cf1e956022e4c2203b7e44070c72500866ac3d5c9e140c6aa0a397403207444adeb58cd0cbeac1abe815c858537c3f09a0305e0aac599818d70efb3e20068af159d902a1ce9f191b91bd5cfb532f718095fefd09701089d73e7aac3ecb58a5d1a0cf07396ed906b
+Entropy.2 = 8afff5cce17d445a3be8b01b9a32ac7b7f68db301785684d
+Nonce.2 = f766c18b867a77f5902d32ad
+AdditionalInputA.2 = fbef49b8d9eb99b7f1a70f8e5aabe341d9f0a8ef026eb1d0
+AdditionalInputB.2 = dd46cc6eb0bc8c9b26a895e8ec4d042db035d0f38cfd81c5
+Output.2 = 0a2680918a97591d11fdf5f4b268487696ecba630d52b13db834a4a15f9debe46dded68cb4056e8ebf31b334b8e22f8ddde4eeb23971c21144c929a5a3cfbf920f586eca7d3a0bcc6d889acd894da3a82f8ba5c93e2c5832bf6fe120eace55b8fd3a632e99dfe8286f8faabca2ddd362
+Entropy.3 = 69f89bae7ba220ce4611288a90b4aea5b0475715f1c757ad
+Nonce.3 = 19e4dd98f33b3e9e23d9b0ca
+AdditionalInputA.3 = d440c43db22b6c0dc8604379ade4e74f87b23ef40e7aef0f
+AdditionalInputB.3 = e7f81b34383d6c22d5a419695444177e11afbf7312c84f5b
+Output.3 = 8723b8252043c6556382257872461771c583f1874b74735207b4ced3ff66f9e12efec90693fcc6e50121dd0a5fca9ce490e2f5be6c61679d24db892b28cef2acb73f7e3d696fadbd02c87a476e4c10b46b7d5d5c8fcce53e1148f88da5cc47a5641478915296f62f05969f039e3289b0
+Entropy.4 = 47808d81119c7a2d2c299c50080d7dae57c599145553087d
+Nonce.4 = b1d1064765de807691be89c9
+AdditionalInputA.4 = bbcc725e6131b463e93d1b00d240b15c022da5c8d3395970
+AdditionalInputB.4 = 6479122c6ce7da9e736bc58f69b132140586d16b4ec9ac42
+Output.4 = 9c6ae442048ad9d8dc62c40840f7dd7db8d4ddd43ade18b9f6b0b83ae7bb3a6bbe8f5073a15e95298ae683a823fdcc466773e725d05c327ea334d96c9ea57a883b6e46356f6552a9c2d941d2af497d175f551b764fd5833de092c66e58cf2cca07879d768851abaf2df8ffb3995042b8
+Entropy.5 = aa5121e4b43e8dab0fcd714cf8bc8ff4fc99bf472f077478
+Nonce.5 = dc8bbbec75d23286dfe68162
+AdditionalInputA.5 = ad667b7251c0fcb2270d92df2853580d4e2f7e05adcb3add
+AdditionalInputB.5 = 3a9e35c51e134cee45aae7307bd9413e3c622d7750a58231
+Output.5 = ae2f72ff6a30cd9b823f618493b25e7eb9a0d986f0bf722e79c0a798d2edbe51fd30a1114788afb477a72d946eda35000bc918e8588b37d1a334398c57bcdf3000f7bc0aec42bac791e786a8926f64b6624d753216fdb9d5e6557083e221d3d777002c72236a9f732c119a76dfa422af
+Entropy.6 = db0f7af8b2ac81e74489eda4684c44b9fc64b8a93f6edfa2
+Nonce.6 = e6e00ce5bb343024a42da740
+AdditionalInputA.6 = 92468d0ff72e178452b3cb8dd41afe032193180b1fa32aea
+AdditionalInputB.6 = 350f5a101f6a739b987cbe87a7654e911094b8a76de05059
+Output.6 = a6dc5dfd703c5c82181d5f7c06ed42db88b0d91fa27cdc59632b9e44811e73ea0dae9cd3e2349278fb1023a97358e87da5a33fd1f5b63877a3c6482d1e24e59219261c7c35af6fad75fd7e19659b90e9aea18e30502bae9e3ba72b3b07dd58c12ea109de754e6ed4a4d84d9ee722d99e
+Entropy.7 = bfe94ae6fd97503cb9d25fee8a578f4c25ec69a2501c0e11
+Nonce.7 = c0db5a14ca6cd3311b11f0b8
+AdditionalInputA.7 = 54a43dadb1d9a4455a7c092822d53f8fe0aa66b722ca2a41
+AdditionalInputB.7 = a7f7cfb7580e8b88f8ba61f09e92c96e9a0280b7b5b4fbd6
+Output.7 = 4bd989753aaada62cdef8714eeaaa42eebac9b5bc5172868549541d50f1dfb37e04340cf9dc766915c600b6d9e6e96b8fd5696bc44642c1fb053c3ea2b43047cf3d97f3684431063d72a1d805f7b9f7f6f46ec2ad3acab9ba1c753b0eea9349140cb1c3a1df81be781c018706ddd87e0
+Entropy.8 = 3e8c1d5ba26f71b63de7517a78bdc74be1ba3d3e3dbbe1f0
+Nonce.8 = 4557d172729d217b15986c6e
+AdditionalInputA.8 = 1db74b668f64922d426b6d2f678368ac2c4d9f8702f1a82d
+AdditionalInputB.8 = 7e6b01dfeb46c2466633f0f80a4ed6c5ceb84eb421b49be2
+Output.8 = 78e4caa69663107a4e062561872ed5429e76b116b2952440d9e943f97fe26b607cc852d2834573cc64b306df19d1ff4e94e1ae3743dfa9194975a1edac840ed59f5897a0e244c48eea6f83ad6b2557ce9af8af866d010c6b414795b7fc520e2e20777aea7036cfed6255e30187c5752b
+Entropy.9 = cfcb605fb2bcdf037cbe0f882af18cd8af470b3e8207682f
+Nonce.9 = 3aef12e590829834b6557f34
+AdditionalInputA.9 = 20eea72865c3a32d903b2a763756adbffa1d42b1a61c91e7
+AdditionalInputB.9 = 9c1990f7f2176904d9ea99bf974dacd039fd8c25531e8c3a
+Output.9 = 1a1bc626c61f4f4c9a87342f590a2b9d1f09c16edb68202ac1986a11512dcf30b7be7af95373185e1d2561f75abb8c7926f76d00f8d66b59c11fa3ecbf7726c143a82079e55202799ddba02b2c7345f4c96c41dc785d5fc113ed7e50b38e86aeb63e586ed1f6d02ecb3c6348c91d6a26
+Entropy.10 = 47a8cfaea7ec9f0a2d674e34e7c643b61b45df907a2ff4eb
+Nonce.10 = 9a4da5f34cbfb9792dfdb636
+AdditionalInputA.10 = d504bd2d3ebef9e51d15e0f3993243099ca83e984ad5ac29
+AdditionalInputB.10 = d37523e672ac67b03e2da915675bda621755057fad998254
+Output.10 = 94784791d9a903d3a073f22cc5d148f2b04af03bcb1e9dec2a24703df9dcf8fdbb6cb954564320039b6b9222801c95965bd244faec947fef5358116cf3c1dd4638eebadfd50b3ef38ac4185bd9ab6ff3a51ac0b1c198c04c91582e42e413497ef8ec8741f2af7d1f86d54130ef67342d
+Entropy.11 = bf684f270948765b3a404ac189bfa3b1919ca6df8ce3f8f0
+Nonce.11 = 885d7169185c0c7a07f66496
+AdditionalInputA.11 = 50e9cafe7d7d6ed864afd568aa5d7de2d0db5f5a681f2e83
+AdditionalInputB.11 = 4b5ba83a92cd16ee0656663aacc93699a1002a4454119eef
+Output.11 = 84823c7a826106426e3b5e3ed356a2a1b95acec9179fae4988956ee2fbef3be9ddf3acbe0e72e091d31c115ece372f209ed6e26a5d85e5ea2fb1737612d5d24e7ae210eb90dd670b9f84129b6ab6a96e85191d6b71b5393d62aed703f02238ffd7da9e3e42aea388ac1dd1625be76d78
+Entropy.12 = 56d5f5e2ba0f288f8775432986f8969968ef6691de1838a1
+Nonce.12 = 96ad6dd5293404bba074e007
+AdditionalInputA.12 = f03afbeec8ada1aad046e28923f0ca7d83710bcc75c05512
+AdditionalInputB.12 = a96034cbcb0c93268cfbb83efff8683e50c5cc1cda357eee
+Output.12 = 5d0220dec7261725586627a1ef9e41956e57a158a2b9fb1189d5e402e3e11e32cba47409cfaa9c3cba943c3a1ce23b9885cfcbb55ca8e633d632c0229b967d02ec0adf4cc94754ffc130d55295471c17a416fde7a0136a579feebd1d01a85223e595db4ab50104e0426d816cdc6baf94
+Entropy.13 = 1c87802746f255241d8398f12acfdc09084b8998ed37831c
+Nonce.13 = 55ef213bd0399b008855e787
+AdditionalInputA.13 = 83d7f0a1666112ec78df40b5d349095d53e70333808dc8a1
+AdditionalInputB.13 = 721c9df9f5f61c1d0fa767f65f3276211e91f8214c5ec733
+Output.13 = cfc278e4bc12cc3ab515e00afc24c315adc3db92b7b74266ca1cf05d887a8c7ab8f068eaf6044d3e5ab7ffa341bd4f2b163c4691d51ac58163013b514262781277a5206090b8fb659481a6370767cf57d6535fc9954e936fe720de862baad11b6276955c75c5397502f281ec67a68fda
+Entropy.14 = 8a0fea72b780967d1d582bf62c2857b4d49d5063c4a40e7b
+Nonce.14 = 87f95440746ac4e00622b200
+AdditionalInputA.14 = e098f0e076a3f40fd970f5d221944f0040ef4a18d88dbe6c
+AdditionalInputB.14 = d7eb01dfd7c13fece92d35133c3be71efba145d7353c6d69
+Output.14 = f03074a219ef31d395451ebc8534e4f2cd2dbfebbd9257507979ecec79a5f76359f2d6b4653b31704ae5a49f884db91ac335ddc6d11768cac7850734e76734b63b71ff12f3f8d42cd404009e7f4b66bc0a639a9354ebd754c17f3cc65704e698d9bc0640919c386e96760f3c36d8789e
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = bf6003e9570026651e8cf7e8ac75b68291380303d65c7b23
+Nonce.0 = 7780ada8e5577a0fc81f8ead
+PersonalisationString.0 = 961c0e8f9723d8065452be8fa8a4f87cd7759110a5e97aad
+Output.0 = b2fa39f5c5527462831f0eeefd39bb9eb42966199addcdb3df94c1a7410e464efdfb06e057826e7f1b03bfde277ef84954a9ecfd5b83ff8a39b77a7ce2d98e257d2903732ae6605bb624923250c91926243354f134e006a43f653a80c0809f4d53828b9fc0113ac2265c1f1cbd6ec6fa
+Entropy.1 = 6d405a2430af83447de6bb4eb49d0f2a734320b6c8dc01d2
+Nonce.1 = 25fd9e8673e6a1660a2ed76a
+PersonalisationString.1 = cc5054d440c96bc2a367ed15e3a8cf0813ba92435ec682e1
+Output.1 = c4af166057f60236d28ac0ac707edaf0bc71b380146c8ac3e7ccb8739d78309e853bbb69e6b9b6fff954d292b79e6f7b0b2c7dec071c289819306a2097b3a12c637f8c5a46391485c92173d4c446d75d7a7e886a13cec8d8d0accc724f6962fc6759194f5b51ae978368c46232913de6
+Entropy.2 = fc56dbec9fe303db2046e838ebdb1a86dfd2e8ea2163433b
+Nonce.2 = cc8ced973c8d6dbd314de957
+PersonalisationString.2 = c23dfc21deae8c28e0ce302f0a40e835e0f6418e42f062ff
+Output.2 = 1e652571eab5c7fe644d492f594bbb65f2cec1cc709f59c914f8d5839292d71e3e9dbb7a30f7536097211a2db3d54bb4821cd6e19867cdd35d5022e1be5ff0baae0d3b29a640f0c4e3ec1fe8bb684ef042b5f2fd569054e4273ae5090345e1e919163a29a1a85540c25885ab7b86c060
+Entropy.3 = 13182a94147ae4d3003d849793c8565766b6e5983e7b4e24
+Nonce.3 = a46fe731649397ac3fde715e
+PersonalisationString.3 = b9ff01eddb2d0a4bbf93c7d39bbeee0eb2b819ceda280efc
+Output.3 = 47c31300337c2cd60fa6a335f8facc96a801c180ba6802188cd180b1d9f0240eaa6f93246ba07734475859c0d2cb480b17bdbed437ec1135bc0cf4440abbfac52d6e973a8f38eadfec8aab3e7828873e9bb9d98fda0daf7f20bf588f2fcd11b9cd5b35e63a8762f7719bb76e33d30b01
+Entropy.4 = 41a22ae37622c9e569165bf8e49f343f0aaddd1e95428ff2
+Nonce.4 = 03959dccb3997763b67a493b
+PersonalisationString.4 = bbd24c4ec6973f8bafb9480f387dcff2e0597409d3c52897
+Output.4 = 2a233dbffdca2341db0f8d3a34d9e4370d4e9ee329f4a12853eb0a1792369965f1e70500b02e4a3f92a9c4fe7df8ed7c94082c40db6fe098f7dca1e4a84e3c93fcdfb8f053ec20ea09f94805a51ba657bfde5364cc049caf8bbdfc20fc0a47ba4a753785adc3f91d262c03eb38f67cae
+Entropy.5 = e206413826911ca6f48a356f19f7f68c721a3bf61583bbb1
+Nonce.5 = 093b4311281b519f803ba9e4
+PersonalisationString.5 = d26a88780806f78f739ac7a7ed7d0c24bef62f4b72df63b0
+Output.5 = 4bd1a7832e7acfd81d413b2d1d6eba8bc20547d3a956b11231317a3d31cc062952023e7eb65410c1da56150befaea9846180a850ced118c01d251b1baa271aa695a420edb2d24bb96a0d7fdb75bd35aa384a36262ec139a9db6b46a5a770bfda54306341f0eebd693bba2f0f73761fe5
+Entropy.6 = ffe3b136da099d974145c3e1f287121c57bb3bac337b5000
+Nonce.6 = 630f2dcaae56d5f80bd98996
+PersonalisationString.6 = abc9a770e6f2c789270693ab1914e1a07eda7532c1bfbd3d
+Output.6 = 8ca7d3f48f15df2c2297a3624f193752f806fb44e0b8addd14cb83d7e68b4798b9a5c291f3c909e9fa2beb780da20213d2e0a5d86385ef268a6ae8614454e9ae53c23e20adb444336376fa2f512e169272cd8ab4b47999d6f9cac52c20464f2b433c9b92838bb71a45d1e676253911aa
+Entropy.7 = 0fa18417968db22fc28f3bb8a1c2ab94114b97164ca354a9
+Nonce.7 = 486bd6ba73fe4c9c160db841
+PersonalisationString.7 = 47b1f40ab253c3d8861b6e3ef53f4565a14021c00362ca08
+Output.7 = 18b1e0f40ce697f5a889b514eb6c2b2c2886d3c566c5ee90733e7105bad4f10a05a115c164112019f4d8413b218ac3cfa13b7adfb0bc629f440617678b0951613bb660068df8c74f416c6e329123ebc60f0d6971f03f0d932948f93d7cb42a2aca4644e712194b0723817c38757543b9
+Entropy.8 = fe57ec71c62d1915b4f0cc7fd55fbabe922b6ac434d16649
+Nonce.8 = 9085bcb0074fb874bd645063
+PersonalisationString.8 = c9519a97b7986f966f5da687d147b3bae7567fa87142aa1d
+Output.8 = 1b4a7a400a666f49a01394038fd1ac43efdb32fbbff5a3dbbbe9a100cb640f3eb72fd0f23d647972ce7aa6fc7a1beadbb0d2db154ee023ce4931b9fb3f9b7d10f6686482a0dc68899769e5ae6733972c3bda40fbe0cd009c671083b6a92aedd9727d8281f45926bcb1f5c35764ebd50f
+Entropy.9 = e3dd8f02b72c2ba4fd7c2975fce4f7fc8ec84eaf2afba222
+Nonce.9 = 10373bf894dd7ffd03824d3b
+PersonalisationString.9 = b9b6fdb5d5c9aa4b4d3df3049dfd4afc57161fbdae5b9db2
+Output.9 = 429c6f96b04987a320a5d176875df21ef0ecf76da2eb829f9dded0ae8ec50964237e0beabcd25f6d79dada7925c3108efe1b800170504083dea192b2b67754c5dd8ab3cd4a8f7597fa49795d6568a2e935d4a7e823c9bfbc7f8a72fa7304dab208885a7b0932ff4fe1c7a9e5b1934c93
+Entropy.10 = dfc61f3477fd2877399d37785a63e16b2eb111b38cc2dfd3
+Nonce.10 = d67ea41ab522165d1b07563e
+PersonalisationString.10 = f72b1f8b77f1a6c6e9268920cde5b2c8136c5e6b7233fb36
+Output.10 = a671c514bfca26220cfc979fb13e05b4a59007d2bc96d3626afa46f68b443f003672a557de10fca5dfdedff67f1e9a3f4cf0957d8d2f6c1274854b4c54822ac4b94606a175dce53decc5702c94d4bbb35c7175dc28cc0a0ca8278b9abd8b056ead8af721e4a20492e40706ee71e7b497
+Entropy.11 = b97a5b9989f450dcf32018d7a1441de61612fc6462ea0b6b
+Nonce.11 = 1966ef1b54cfad93852dc7e3
+PersonalisationString.11 = b64c98d70757172f168eb76bb2868409442ea80404a50a89
+Output.11 = 4dade80f03040c7c89e5ca7d8c601de677bee101376e6a7978c31f88623aa8bb5c7084318c23e38be77e747b8b328da520bd5f1a3b2626d71e2963f59691ac448c507cb9ab4acaa3c4e52628f6c9fb0bab576a615fb0af942ec32a50de682fedbb60fb5f1d1a00ac018be7d1c4647dcd
+Entropy.12 = f4bd151844b44bc43d10133fc27ce1cac4f5c3cb71ec16f1
+Nonce.12 = 16035452d515d67fc4115673
+PersonalisationString.12 = ed9707c88d5900915e278cc673ae1d4a0c5b62049150437e
+Output.12 = 1f6c2ba5223668f4e01da36b763f9cb633798ca06891f37a6c42f2a70b2cdb32c5d96b46a9f8e29ab132d90e3ba7f63849ae513b063778fd92f936838faef6bb66d78f13ede5a4c46476f71b0766b2127f64351e5949b40b47953b06430dafddc9fa838d2bf9f90653b975497f609107
+Entropy.13 = 79c9e1064e67d917ea72eaeef13d7a98318d948f8fe06d45
+Nonce.13 = 6af7a5efbda335d0276bd740
+PersonalisationString.13 = eb08a942b8a0a278dac3e3f0cb0b1a1829157dd9cbd093b4
+Output.13 = 98c0c192010ae52d41b0fa86dd5e77029200491eb876976b9f72b860e17646365b2a31894f44daace5ecc70ed85a892b6792f458687dbd72eb5a6d1a8daefe73f4f4e0743e41bd8eb26f7cd8c2888f636a77a38ecb243e89cbe3deefb76d0b10ce266e68fc6b6548323f3394c13d4550
+Entropy.14 = bc74e505f0d4db45bf15edd7950b4a54bbf99ae04e8c4e04
+Nonce.14 = 838d1c69d8408cf0134f54e1
+PersonalisationString.14 = f08a964b386eeadc4bbe57164d3b3a0c7c0068c49c9bc5ad
+Output.14 = d8af077476875fca2ef9f04013976c3c278d30592361b923bab2f7e3c8af4affac5408c390b4989da254eeb97ccdabf32f5e246739d0e532a6ea317e7dda02bae5051ca97a445f5e0696a041e5f9f2c077b26e575d749cae344859864aa00f262c1c41b2964b78f72f9cb98abce103f9
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 0e8efb12bd55fc07c34ef9682ff8a804c3d454dede06f249
+Nonce.0 = 8f3a9b2dd9627c09f761a8ac
+PersonalisationString.0 = 2cb8fb48d1da52810db7f1b771f2399fe4c8bdbfadac49d0
+AdditionalInputA.0 = c72e717b30c6954227576e99685b38e7562c4b1107e6028c
+AdditionalInputB.0 = d3e1dde19a4cfd7bbcccc1b323153dca4b59208161ac1518
+Output.0 = 2952cf5b4ec9f46691a855575edcf629f6a0f8138b8d4a1f62d3229e1c852b7e7e8815377c16b582a27406701e3f5395acf0bcaf7dedf161efe853ed6856dff173fac149d2cc783dc1ae77781103f1c9656e3a6adf3cffbc1185c9b943f5baea907e41d3c8bf64cc8f15b22ba96d59c4
+Entropy.1 = bef4134cfe6e952ef4954f0b43779c27731aa7ee1fc472d8
+Nonce.1 = 9fb0510d794281d606324ed1
+PersonalisationString.1 = 70b141ce833db247d2fcbfb1ef84c9f7c77e80124491697e
+AdditionalInputA.1 = efb3d5af5bfb4908c39fede9cd3463502bb4831357aa9007
+AdditionalInputB.1 = f7b2fe8f57f076d95678dea798c412db611a2a0f459ec15d
+Output.1 = 49be64e83a506b8cc3f0d801fd7c7a502d63090a8087ac471e7af1a7b31e78a0caa014b0e4899ecd83fa12022661f19c1fb17884c25a1d3681c921a465dea99bd48990fba31b42c75794f3f4535c1f6aa3bfb97bc1fa195fb024067d7b34fef241629b58fac1bb5c05de4dcea8e79b20
+Entropy.2 = b2e3d9a234e65876dfd1e945307c5c13dba9a23bb5a778c5
+Nonce.2 = d984c7113a3a7ee0690fc4bf
+PersonalisationString.2 = fa9332ce5fb875c8e9f773276a04c1ee56bc0d5b0efe4aff
+AdditionalInputA.2 = af1e9b36e7f93f35a10c18d5176f81c96227eb9ee362803b
+AdditionalInputB.2 = df5e1f0268abcde9da54d855a6e9f50e6f44c8731cb48043
+Output.2 = d51d635f45051a842e6fd418c01ef3c7b7363e63f84dcd0676b19dbd60df2ee0420bd82e59a6714302198ba9ea08c9f0f3de3ccf5f8a20cab378a772d082d4b94d21ffb695c7df6056ce8dafef38d4a0a33aa2af47feb73b704fc6df4df42bff4042c80615785a74df9088b25c60bc12
+Entropy.3 = 274000a2ca67257e92f123f669e505437e2a391bd828e151
+Nonce.3 = bd5abdff6e5d8c3345ce2325
+PersonalisationString.3 = 9dcad23fe569e5b75fa485eccba734fdbc00f874e1fbfbc7
+AdditionalInputA.3 = 1558e022437bd96a04496c937b662b262cf8ec03ee7cb11e
+AdditionalInputB.3 = 044928a106985ee2223c3df9d7df2a67813bde19906c59c5
+Output.3 = ead500db29ebf8d9432f9f53d8ea4def1dd92b79b296251b0385abe653070ac95a4db9768fe34a5226785b51148942325b76c1e4017dc0921e11fb548279e69840ea6d01e5de078ed23569b67f8e1f3165ceb173328ab9fb7b7a9f3245c6c07c640605972b281036f3749c885432feaa
+Entropy.4 = b3aae8e63a9bf9e766e36f351c82f095433d94216ff3db33
+Nonce.4 = 6b91c9dda6ff6996ebb8eb65
+PersonalisationString.4 = 9957de3dfcd3e00f5c376083011aecc97600d78e4354752e
+AdditionalInputA.4 = 02373d44d4d8ccf12139b869778344ff1048ff9dfc5a7530
+AdditionalInputB.4 = d996a59e3b203bbc0f97bf3a5abe22b442dc5e21b2ada571
+Output.4 = 9866105bec3087104d36e345514a19d857b15299d352c48075113b34b73823362c5ef47bb93e7fba2930b61ccbe9d73f0f5b284b9bc8b272aaad4229d9dc1ec4ef17f6d6bc428bf7053b4faa5a388f095b82e5bbfabf4ca8bdfbca725f384af8a78d2fc00527c5604fea07d990cd0d00
+Entropy.5 = 56909e95490f7d0d2c1b24c97006f05c9607d8111df52682
+Nonce.5 = 7aa9e95304def7b9224d315a
+PersonalisationString.5 = ffac409a9f1663710d1a042e9264df312c68d347d2eac97d
+AdditionalInputA.5 = 2a28e7d1755646737f5a3d3e22d2b34e9d2964c8913d3afd
+AdditionalInputB.5 = 9108ad8bbbb814d9196143185563f2684fbe84c1120eafcb
+Output.5 = 5b89b41311a53d8b7871f4905308f34a63df857230069bac66c5876d5efeab50854a0f5b94410aa187d2d34c2068add565721e1d1e2b22a43b23c8c2a2d7f2504c66f45a51600729b4dd639b93c2f55d67158cbee93483add30cacfe634a9f307663485c69f98f221dd0a28d144eea0d
+Entropy.6 = a3d5e7563a9c087250dba95c13e3dd5555b1671212ae4a48
+Nonce.6 = af8c7de0e94721f98ccca348
+PersonalisationString.6 = ed18f2b927d3dc023d1fba05ac6038869bc8eac0c0c5ae4e
+AdditionalInputA.6 = 7717361e23ee3e154a49627db0f13eccebccfb25774da9a0
+AdditionalInputB.6 = 107af893df1fd36bead4f53ef69f0d7e17263eee8aaa0923
+Output.6 = dd945e4f0179cc65ab7d841f61b122cde1df3651f405ccabab7162b66ad4a4855aefb267092c4989eb3d38c93042808710f1976b66131537018d42fd2609735e187d1c75b98765859f8ace0ae21ec198d2390826e5e9a36a03b2edb270705a44cf7d32435d2bd430ff6e34bf4b8af9cc
+Entropy.7 = cdb1376cb00d50572fbedbd45296743064ab739053ad9434
+Nonce.7 = cce908f55c50c4e05adb622b
+PersonalisationString.7 = 0b8e5b5496e99bc1ced351cc235b02f766182c24902e92cf
+AdditionalInputA.7 = c72f68725a3be4b3533b6de78c138365a82b6a24deb0d1d1
+AdditionalInputB.7 = a47d05afd1feb32bdebd4e6abb9c61d14db53d42cf9575d5
+Output.7 = f92d14de4be09f5a865ec4337015b36043f3286c92ed27c4f61ddcd9ffb8efb109b01637fc65ab13bd9ed9d70a0f737f44dfb6f9dbc8ab4bcc001341b238d65137d4498c2ffee062ad166f95e4e61f4b14643e6e1a41883c9811d21a32b795a8508f09a7653b4b00d430db03446f3b74
+Entropy.8 = 577eb580f7fb24351328950558d36510226f9228fe1e9ba6
+Nonce.8 = 2b7a15b342e96edb2b30076a
+PersonalisationString.8 = 072a22f1622a275bb47b4c67cea53ec0ac04ad464df7a3dc
+AdditionalInputA.8 = cad80dd8af88defe6568559c42d74e0f36fe003de9e0c8b7
+AdditionalInputB.8 = 15fbb51b940ff28cdd201ecde47141cdd2d939e0f03224c5
+Output.8 = d3c3616942892257cd8f55d56abfa6cdbc3db4c23739865bf696f626d5feb6ae5d255fe1301396c02b493243a3c366ddafe8207997b281e74de2dad91601893c56817f3a6f6a77908b2ac61a868ad035b5e6d54e10972713a8789f4878d0c6a1ce5a154f30c88d48f3cf52ad352d4c32
+Entropy.9 = cfdc5653ab06d78239fb6cec4e60c3241f980cb7b95fe05f
+Nonce.9 = 0613b0d3745613752a0119ab
+PersonalisationString.9 = 257de719c9b27931d39da3b95cf4480a1d84773ee77d0ed8
+AdditionalInputA.9 = 97733b171ab2b6f11e87d26048c7a8b9739df361a4885807
+AdditionalInputB.9 = 2f77f09c6a301e5b0b044fa7cfcaf63e907299199071146a
+Output.9 = d4aed48bab03c936eed8d08e50bca8e0762784dc930bdabb93e8c8191eeee4c5685e059db66b4a654e4cabf69a1e436e7436f608efe938a26164ecde7eb3196491315414edbf91aa036ab1db8a34f4ecd8654e5b327a68b55ddb9d3e74b340d0058b1fed8a2f55e24724d9360bf92502
+Entropy.10 = 800beb831b1e3ee733ac369238244cdd6062e5d1a5e2d29d
+Nonce.10 = 346ac541842a8103b9015980
+PersonalisationString.10 = 50a04b367e96822ea2f57d3487c73fc77de775e7aa7fb438
+AdditionalInputA.10 = ece3847b1e906aeb3d803c094b185f39fac052e31fd6f8ac
+AdditionalInputB.10 = 605cf7b158fa8655c81990c7a9acee96644c762191026953
+Output.10 = 76efa82867c3c7e7d6a9cfe08223b60f48dbea8410bb0ac6126f834759397de473d5644e409b26e05cad49cf0a4dac01da5150f746f2a85e899fc575f408e8ac6c9885c5ac6942da805b1738d4fb59ffd54f4da6b07068c07b2113eae2f64bc5c735a0b5298982e7e658a38c191fb3d5
+Entropy.11 = 246373f4e0f1e7c8e6ced8fccc86e83124f156bf7dee64c1
+Nonce.11 = 4ca6d0f9d5dcb88ac8f4a10f
+PersonalisationString.11 = 0b718f380c2802ff9276d3b89a7e0cde41d66eda99ddebad
+AdditionalInputA.11 = b5b3889a2987040c4013bde5bf3ba82060d32e6cb24e16fd
+AdditionalInputB.11 = 2dd07ade930289fb29486362f1a906d2630a27d126402af6
+Output.11 = 2faeeb7669909f31316712364b143cdf8bc96c4738e98a364116e84772c54b438a3eab37aa427ddc3d39411610294f4343c13442ebb6c4971207451f0f716af1ec592e5392cb8a6b0f7514bc11b1497ede1372d85ea3a72f18014d7dddc96d741a807ad8881173503207f7c5682d73dc
+Entropy.12 = 4464f4ab7210871eaf00e6b8928654d1f5b6edef2a6a33da
+Nonce.12 = 46fd0422d575d125b72aed67
+PersonalisationString.12 = 184d12502fbe8d37c43cdcb35152e3b3c37e9054dc1d3585
+AdditionalInputA.12 = 7ab983c20f1d8a6b004dc58f0f48af590dbb08832bb7bb10
+AdditionalInputB.12 = d07a2a1fec3b82462fc1460f064bacf5922e2ef0c4ed76ea
+Output.12 = e2afd0ac3774eb85cdfbbe4c98b8f18999b868a8faa24265ef28126f59a1cce496ba0747bb316290796d301bb6665e56beeb5c13c9965190bfe660e41ff9dc89a8ee2a6b0ea3067de1c5e091ffd75037566bf7848ba6e69479519b3e987a4adc2da8372e2f7153e6f0b622791f585645
+Entropy.13 = 5213a1f2263a3e9530acb8f5b9bacd4ac96951fc397005bb
+Nonce.13 = 03d1901dfdb49f92b6baa118
+PersonalisationString.13 = 3c736791ea6d1bc5d848029512053c20ef7dadc20e0ee70c
+AdditionalInputA.13 = e951c13d3dccb9559921cd205928ff68fc06d1eb59de1971
+AdditionalInputB.13 = e7007c806db5d1f31fde06715e46f27816df74a2022830d7
+Output.13 = 4f259149fe3d999daa93ceec96b789c765396075a1f82eaa9b8a33b5518cc746b346ab6ce488f97051349a2d6d1135f93cf4074d0f19216bd6ada4338f3fa20bc52dfe8c7749a93b38018894473c7236beb036a63c6f307999a106557c76d6f258ec2f9dda5789a69828b5d658806884
+Entropy.14 = f04bd923480d383ede25ae2d72687980cad91d008ce30e59
+Nonce.14 = ad9b67d7d3d71583bad67abd
+PersonalisationString.14 = 80326f5777366dce4f91f54cdcb6abc4d676174fc2a0e0ef
+AdditionalInputA.14 = fa0823db6808a3de1a7dcc081c01cca840f68b005d473bfe
+AdditionalInputB.14 = d3054fa2bdec7c63dc009ecccf25c1116380ac25f82a9085
+Output.14 = 556e90c95c1abcdde027fb2b88cf191f0686830ecf3fbf89de51c9bd735726131472a17f307263d57c03bd5ecd9ceba6cd5759b06594bf901418e2421fcef4b72678614079cdf4d25fa0b74985380552d2bbf478290445066e3f4a40a2e2b0792a685b769ffdb27721b1faa484e9c783
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 4359f7e431da8a2d30c6e0a53fc233d09b5f2aeb010f91b1
+Nonce.0 = ef430d7678c1a5efd64a1473
+Output.0 = a45f79ea40f5032fa17fc43bbe41eeeb44067e389771ec66e5491d0aba88f28d1ecf415b852296f53f18c1ebbebb03c5e5a69421bc1aac4afe90b7a7978111c41bc80c12152b641d5482e4feec1b751ae781055cec4e28e675a44984f9799be3499e28877db87c127ddd388b80fb044c
+Entropy.1 = a9858542925dc08bcb69d3e114191483dd93428b761fdb64
+Nonce.1 = f6a387906d68ae5116ef345e
+Output.1 = a9b88c7af4e02648956e3ad8ce26c67a7157436134686b4124b0fad82d08a29eaa90dff650255a0cb7a2f228151d01e1c9ec46c5528980f51695f35bcaa249bd9992ffeee5523d062201d5eec73602290fe883ad629d4b5df6acbcc9b5075b2025a07a782de9c0b3a1b04c6bef8070f1
+Entropy.2 = 144e6b7499db6fd3aaddd9d373c8154ffd2c0755762070db
+Nonce.2 = bab79a27bab306e2d23ebf95
+Output.2 = f6253496835bb5af6488b00987c332296b2ae545d3e528b4680a020a705c12e5ba02264d0aeca53dcd575baa35eb56ed8a0f04a2b48ed5339072c7b37acc0568e59cf03c5dea832a96a980eb3a1519121545c8d089ea0cc91cf17f1bf97f0970b57402f7e01b4f6dc1409c9a0155a048
+Entropy.3 = f576df3cd49a7fb3ebc99caa21d022d0472bdad51d54b0ea
+Nonce.3 = 5fb61a2c347bb89d74ac36d2
+Output.3 = 8face2b28607b247f82107dd616ecd23a51cffa2a2800207dd60da0d5e1e793b39e438a284690578a911bd42a33fdc4f25ff47dd93dcca05a8e5d5ab9c07dbca211dd0f4dac999223233e5d7aac490282dcd981012aa8228c14417ef5cdff331e47c3714a930b6224e024e5aaefc195b
+Entropy.4 = 194639e5abdb1af8fb1c69a58a8b9082706a1994f5e7692f
+Nonce.4 = fbcfa94a79ffbee32237fd48
+Output.4 = e5fdf2167e86ca9c25acd3e23815ee202241f1e848538c9dd271a2b4ddc958e2d32aeaed437fb9623504874676b35d242edf2f1afbcd29544dde8238bc611127b234ff6dedf7138f19a214d3d9f3a42738737e71e6afd0d06ca8752d91ee6a41940edc2ab14764a32e00ceea20a6996e
+Entropy.5 = 80dec8a6b5f61419ecd68ad8f85d6541983e661c876babad
+Nonce.5 = 5d36cc4fc35f703228585159
+Output.5 = d5768005ce952b9a92bde19a65665f672353b3f1ad9fccdc0504a421e7c7d6339e562f6419d1ff8ce08042866bcd1e482b83df49a6db756aa1a2b00557275540e910a7aadb70db4a570c8cefde394a712adfb292c93907fededc26540cedc10d75516f8232722457e56af1ba1b15cea3
+Entropy.6 = 105406056b36b6aef7ead09062234afd92ed1bc0a193dbb8
+Nonce.6 = d11bfb602b2a0ad2c084ffe8
+Output.6 = 2633b64c11e6a22a8aefd5156397c9fcf55fe3e29e3bb972d20f25c9232fd6261ba029260608a820b23e5df227fdf1b8f2c6246cf510e60ddb18d5ba52a510dba8c65f98c6dc6f42043fc8e8364237480a9a7ae3b0eddc23648297a6842e9c1f7c4d7ae69f7623dcf76a96c5b9531eaa
+Entropy.7 = 752371b36fbab5be9e34310c523af45c7dc3942129a0e975
+Nonce.7 = 0e89683eb12924f48863acb0
+Output.7 = 42a537d7d66a4ab65ec60f937c763d038d7a27b74219379ce12c2896dfc62903ea6bfb3e22bcc90004a7cca83dab8dae1c643c87f3fd4829e2236f4e1df25a71caf4baea73417d9ed0de7e52b13b3c4b8dd200a95c8ad77b4855796f67f5e5928a729657878900dcd85fa0c168a4bd07
+Entropy.8 = 78b2e69e1b9df3bbd9e91c5c1637ec8d4f8ff397a2eeca25
+Nonce.8 = 45b7fe4f558c74e873517a4d
+Output.8 = f8d8e42a247f040b9e68a91efcac3fa2bdb0a3f800bc4bb2dd3dba7c30256722b8f4b809b4d7a8aa0fa3a594e2c6731eee1d3f3c2b08f2e85cab116a13d2691a88cd6541492014cc07955c5f8a587e4653ca1b46f9c55a9a1cd3f64d1a84798872cbab3d410d076108cd44f2f059af35
+Entropy.9 = 716b62ac333a62e01309364e1fd997c0330d5b7cbd98573b
+Nonce.9 = f4c50be56f2ae092fdd4037e
+Output.9 = 4275d4cf2fc6a66d287a6dcac96c37f200e772a124e6e60ffe1c24d830e574950e3b8157d824ad2b574975df2b78503326a7b924597def7ed4b6aeb64bf1a6af7cee3b5eebc3ef5ba496a676724201fe818a4320bf97ca48dd8caa63909b66eb7f51dc793f613f107037567143d1cf55
+Entropy.10 = 1125b7287f4b0faeda7d738d5ebada5aae877cf81f752286
+Nonce.10 = 22f0897a5bc208af54221e85
+Output.10 = c028912701d511c09541b222c49b7d86266af6a809848b6603a4e93d199f1ab610c2a674fbcb7e1d9beec910fffa82195f999a201f4d27bc3a30918ea155b7bfea4046d5227ea216a431ec2c5abcb99469e825495da6347de11d6c479928e456d4c23c367b6c2cfd848d540c8a0819a9
+Entropy.11 = fc78fd63632c2fb6ce6b2324d99e11e6cf83a33b6e88ac9e
+Nonce.11 = 2165a244df8d1a3bb1d94e8b
+Output.11 = b7949cf6c67964fff1487a06168422e87b755e0385a68bd862089f59d76b0681b920389c5a9dfcc41bc95524fa5e040ec24f0b817c2830c111d233bfd3013ee09d3e54c10271399dd8f42eceadee0058abd26aed92ab9755e8bbc3eaf93998a7ab163cd607921f220c232ed32bbd78c4
+Entropy.12 = 91c1b3ef048b9427d6bc49af4333721882f36febfca0bb00
+Nonce.12 = b58377ace58be8dda71b8f5a
+Output.12 = 25c113c302faddfe001699270f83d242a00d49ec346ed0a97bdc503cd945f3073dceef5adddb4eed0084bb5ee18a07a8c6236f5f4232f47d0016965ffb9333757ca778fb7b3d003a77c26923798aa00c0bca1293c32490727f358a5b548f1fc83bf8e62c8e023449c9c20a9c93a5f04a
+Entropy.13 = 6789002d8743ba72ee8ee2b30489e5b60ee0d9d7222be0ee
+Nonce.13 = da4590b325550d0723683e50
+Output.13 = 01c4946ea5df3f1d2d8b7a04cf9056fd1b31b2c874e5cb2046af258fce4161162ce9898de21e2228f66c29cbf318bf97080d476dd501b95df1a0f9bd100ae492fa9861136d39121493ae3d1940d2045f248dde99e4b0e741d1ec8fc816b29e3c360efc27a4c24a578334b18ec793ee80
+Entropy.14 = 2a55ddbf673f4e12538e61cd2bfda6f0316277661f553c38
+Nonce.14 = a0c71049f5c75c23cc11c7ca
+Output.14 = a88e6cc37617929bee1e14f74ee363d1e05fee618fc1eb1f8abaff42c571048032c84ef0ec7a6d8ad7e6c5a4a6e90d714d76643eca063287929032fe75a2b63fb1f83ab36a7fa12a12d7332459bba56b017654bc0fc29beae1897863a63276208f9d11a32780a627135b271efda4f4f0
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 4cd821f06021e05a4fb3dc2634c405e9acf84c0fc59ed546
+Nonce.0 = e4efaac03361296616c3ad77
+AdditionalInputA.0 = 166d8115e78c87dfb715beaede2b5d63565c5bf52d8ac61f
+AdditionalInputB.0 = ba4e92236fd2a5a362673d464dd5f5b4fc0a5ad2c0fdeb62
+Output.0 = 5de3a9e43e4448e72c4e42ec32942185a4f58f8dd3fc1e1be4337baa5aab3315c3d537dff954ae43e8d79e218acbfc6f970559eaa41e4666df14817ec706837726df717e54aaaf5980c096c5ea91788f824a2d729ec8c11c30179811424bd9dddb24ac100b2474e22a7d822daf4dd938
+Entropy.1 = 5d1733d64c95628bc65b3dfc297751addd74228f98a9ae68
+Nonce.1 = afac53f1ff1eca8ab6994c3a
+AdditionalInputA.1 = 1a20ba633b7504c3d6e5d09f34ee81db5202285e83fef53f
+AdditionalInputB.1 = 13227640103fe093e830040674d53fea9ace7dd4f664ec49
+Output.1 = 419e5623bff172121c6ba2dff5699d053c6d9d86f2c2abb4eb305a2cdddf666069476c8ba58ae9f6b0b8414c0b698d5f4b151cdeccf338267d7e33101f2463a9396a1aeeaa467016ef0f53c3799492ea0768f849a7ef9e795d6ea9e0a81ea95ef69671c8dac68d51ad221547c61a5545
+Entropy.2 = fe3a4e53ae825eb82e278a317df56b9221a79489e11b93ef
+Nonce.2 = 1ac17b5202826a273d483386
+AdditionalInputA.2 = f21cbde7d9020de82f37e79dbdca1121d0a042a0b975b430
+AdditionalInputB.2 = ea04a666edf06b829ea91dbb84b484b19edc23b16bb53eac
+Output.2 = a8f60f803ce8eb612f7d1c1a698c95fc97451e0789ea2be634b2465d8bffbfa960aeaed937296a68794889b5af1522deabd64a1be9a215d709bb6a3d226bc499f4e5438c812e018b2247c133d94bb224d978a962a6287d01d85a238d904f5e297b2d6e729d85c5252203be431fc7869f
+Entropy.3 = a52c8e6f027701c1fcbd76722f921e301c3fd9dd7149b4bf
+Nonce.3 = 9a357a1452c5971d9b45dc4d
+AdditionalInputA.3 = a4bad1136595353bbd3b01cdda8c56928ed6f130503766e0
+AdditionalInputB.3 = 8f37092c5f54ffbd51f58b8023c72fc6bcea5a625b0ffa70
+Output.3 = 437fcd666beb67fd00f0137c75c27e234415e24028e07f7e5e884258fc8bebb177d74728f5a27dfb17a66ff60c1685fbd48f2d3c1c80db688cf7fa0dfdf8be9cf637a3a30a5ad43e98b6e80ab7c02a7f78635a9c6623ae1ab1be40f2a2a4c471cc78240fc10b3bf6856bc987f09fc105
+Entropy.4 = f9564d418c8fd789ff48314dea505185af276aba322c0622
+Nonce.4 = a1b7ae87bdccde885218741a
+AdditionalInputA.4 = 18a32ef711846c7716269ac04ae257501f4e09ebdad8a555
+AdditionalInputB.4 = 6c39dbc8050310ea67e70b3d007c5a8fb094f581a0ca6977
+Output.4 = 28c96c56cd76adc7b1c8e960e08974c4d75db4851068b6f9f1d2dbf922554a726e84528224c3638d39d9833f4a038f328a515b3da486804cbf82c4f083a8d2854acc06b97c5d957a39b216e55a8694d6b550aa0f322cca773e1dceabd84f381df06eb898c76dd296e4d67a0db63554fe
+Entropy.5 = c9406228b7220dff834f28c3e4c3abf0ff04bccd7786977a
+Nonce.5 = 46e5e4c9877d7468cc733911
+AdditionalInputA.5 = 339593a6cff7530fc2c310505dd9be6f701b3c72f26d6207
+AdditionalInputB.5 = 55de0b922ad1763fbf875f835d37d01419715fb1638a8cd5
+Output.5 = d2c9a62b6f62c4f95c1ff34d759fbfd9ad76bd3710ba5ddb3b6a942230126c8d8ae1ed25bc38ea42efaa604975fad55260edc832ce4652a22fc2a769b3a5c8846bd5bce2310db85bb0576543cb677ef5b26f8a3f01b123c868f638622f550025825180762df043efbface399e2b11a31
+Entropy.6 = eed7dfbfbd982f35f19ca1916de883db1a21363ff16d1716
+Nonce.6 = 6e78bdff2ea6dd8e8e865fd4
+AdditionalInputA.6 = c0e564b5f793e98d4b708df37e9b832bd11bd69f210b9546
+AdditionalInputB.6 = 73cae8da3674ff00bdae141bf13aa6372b81dd78a149aa10
+Output.6 = 951185132d67120a238cc4da1f79eded6c1171a109f0a65b489fc0d7a88b6cb003b2e14596783189b3566a614f392307440794dee4d95973df8abaea5601353e99173261252b1ba41d70df1c5e8ae184d66ee6a2c6896b076bacafe99218a16c3fe9efebead542bf3f7130b934096b61
+Entropy.7 = b6a05e14e60c752b4c307850d7661183d598fd522ab41f61
+Nonce.7 = 8c5264b568d376be822c843a
+AdditionalInputA.7 = d68702d4eea9219745d4a26aec5ebbe2651ccceffb6e8952
+AdditionalInputB.7 = d8ce1a1350fb9b34c63bdd82009d35eff4fb493b402554c3
+Output.7 = 2374474b62a52202eb178f82d5b4e1aa529e7a062e00329fda1a22f89a2ebacc955afdec457d5a84d159d94e94f112d04ae606e9afcd47fb9caca95c63885fa18ced924495fb5360836c70bbf06322e5d34a0e9c72c9a8c5ed0abe1eb920bb8c9c46b7478d88af57be13a60057f53385
+Entropy.8 = ea985af279f8c2391223e5bd31c0ab1db25d5e3f08d8c323
+Nonce.8 = 401d027ba90697c72b1735d2
+AdditionalInputA.8 = 285a68a8b4fa92cd671798b8d34040a795da82b1d24caa6a
+AdditionalInputB.8 = 5c66cf1e80cd8d039934d1f3c2898e9682320d4b2b460326
+Output.8 = 0418dbc1cbfbc79f4da20e56f4f80cbe2e4eb40ebeabe45ee6e8c3979cc982fc527fe9c2d7808e0b1c3369b57e118c88ee4eff1aa4b88b35de9a72760e923a44b29e7be4e379e78db3d10f4bf60c59af1f9c86f052d07a60496aee7d2c99b4167989e21e39b53f5d4d47027d299320ae
+Entropy.9 = fca365c5621af51099f6ca78d835420c5b9761a558f8e3a5
+Nonce.9 = a00c1fa36d37469bf62ebec8
+AdditionalInputA.9 = 891e5403d20ff0a902446aede74ffcc93135a847fdcd862b
+AdditionalInputB.9 = a044ff5ea904f54ae35832e4697a6d5b543cf843ec9b0966
+Output.9 = a27c2c3ea8ce9b892c2868521730371ae68f32174efe0d67bae63e4cab720eca6cb2597a6c391833865ab3c98f57ff507a3ee5602e88be441767d75ed97af9a36512183c2313e9defdd2b174f784ec962eee13da71a4cae2ef8b9f615c285d8fe5bc8704bf3462f46010ab512c99a5f3
+Entropy.10 = 506180b944d400028d3b4a43e4a553001c3b89b41c62fdb4
+Nonce.10 = 7743de27fa7d4af082a947fe
+AdditionalInputA.10 = cc2d5629cdec0dac130e73546791f29713dec64fff7bc0d8
+AdditionalInputB.10 = 46419305e58cb2e6d761dd23e67722012d9c83e552fccc3f
+Output.10 = 8d901f6fd77a489786ffe9df84d1bf8690a34ca5e5c3895309651d967032316b8d1965474e18051d00f47128cfae379762262e9e4da3594c0e93494e3da922e9fd6e63720beb14f8618bf6d94d7f3e105f9b51fe6bfefce1a925b133360cb3f48383118e3b8fd09f1f7cfa2770cc40ee
+Entropy.11 = cb3a0ccb89d85dc1fdf9397f6eb8bd1f28f8939b08a7563d
+Nonce.11 = 7be548412365a33260841966
+AdditionalInputA.11 = 77fbec5631f027758edc94f0cea95712147755519b1170bf
+AdditionalInputB.11 = a55a54ba72f9fb1e3e5fec8bb1b599ead10705319280dc3d
+Output.11 = d022253f3a832a58bf287b9d2d774ddaf72db6cff7bac1d62dff318f26b01be9ada7dc95af3ac6896898b5eaa96fb05ce097e6ef58efd90c6c68bacf75921f3fb36f3bd906dcca8eb478d6b29143237e752946731d03c695f4eb5cb86f978072f77384fd853bfaae60219e165c2f1529
+Entropy.12 = bd3c57df249fdfe7a12356df12689c927041fbd1f33774c4
+Nonce.12 = c4cf057afcb8ae81f811f414
+AdditionalInputA.12 = 4013eb9f96639a06325f381e6f7cd270daebb6999bfd0cd4
+AdditionalInputB.12 = 5773619ed73ab37b7002efa1102530d8385740b8aac81569
+Output.12 = 4c8154a08a21be50e9a8f8e1d4b0cfa5275e72b26433efebfd303d90e9fcbf0be8ed01cbed5cdc4b4fa0a27025e36668515a8ad1a31e4f4b0697b8ef6447b821721bf04131ae105456ca92a45a3193ba15be07347b9e99660a9e45ba88267c2010e0a0f4f47cca488f828344e353a7da
+Entropy.13 = 59f155ac90041456b095e61308181d14fb5a07c69981a0e9
+Nonce.13 = 2cbe51b9ebb4077266b5a952
+AdditionalInputA.13 = 3f9cfe88753e67b682fd496dfc1d43fb001549090855ff5e
+AdditionalInputB.13 = 17f6d34e5b1a5c2604f6641a2e09d1fb4e711747f2ec50fa
+Output.13 = ac6830003eaa94eb5a68252fea2a17b046d3684340181ca39930cbf2eb75686672556103d81c127d140506da6c183145628b8a2b53e8b855f8da0681f1af90f6f5ed0a4de7fb6006e0ed2f91e018646fcccb4f271d6f560cf76b40407159172592f48d45ff9959041db35cbddb75435d
+Entropy.14 = 598774dbbe13282b79c80e67efc9982c7750f18bf737f733
+Nonce.14 = cd1f12bd2899329b39c3253c
+AdditionalInputA.14 = 65e70309f7386d1a0aaa53da65263d5263bc5eaff0d5f3d8
+AdditionalInputB.14 = abb8cd0ce0560309d2424d2f3fdce7af085e6c14699b4799
+Output.14 = 8188a498ef9e0fd52a77c3a44f1c7edccf9248590aebc52cb9ba7b5cddffe867b26309f032a78c0ab751741fdd9bd77d4bd17be90dd045f6f8b45826c9900028f68138cf1ca8e18b253b8eb73ae04f2e156d51a792abdc6524e4f45e4ed0b06ab3b0c94bc5e1ed58f917c17f72161d31
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a26e9537dbdfdbe2c16ce370e309def06d088db2f3642230
+Nonce.0 = 4618dc0cb490dafdf5ba6147
+PersonalisationString.0 = 7c26b15ff60b195aadb5a9a4d25f70aeaa84265b27d73542
+Output.0 = 9f0a324c3ce414ba2e966d3312fbc52536241ccf9bce590f15dea7e45d8e7806d715a4a62b541a8c55366d96583ad052ab2f748e47eac850ebaa2e891db60f8a7544e7d6fee7bf506421eb899c11d827842385473e88830ef8fd068e32e5752caa8b2b63b1be888dc561c2a553d42c42
+Entropy.1 = 0d92b4e01fa4394d802b79ea8f4c73006287367df2155d7c
+Nonce.1 = 71050e82b95bf8f5d21687e1
+PersonalisationString.1 = e74a641fbe4ceba851456904ec9e8ca4218e670a18019098
+Output.1 = 49a66c2431185f175a2b881a0daa796e0f66df9bc96e446647769f5ebb6627a4ef09d299ed4deda1fe99b4c8cf7022dff28fce6b3de3124f92480d8f83cfc49e4b9ce114a922d66e96d1401aa6203e1655dc0b17f0412b61dcd4fb07f35d0c8ebceec459a4af86fbacab1541d82d6e7b
+Entropy.2 = f08d21c58984d116c239b6ce7f0f072c4d41b2eb32484df9
+Nonce.2 = a54d4972c87520aa415b7e25
+PersonalisationString.2 = 70934927388e99fbc9b861517909b910d242b6231a8bc790
+Output.2 = c4fcf36a963bf3ef0830b08931960dd0fd62840610249884f89ef2897ba8896ff09639fd7cc136d2d814bae0ea8932a83dd24c1efb730d41f4ca10744de802f4a055dfbfea225722781a9ae821e437865146c6639e87d91737057de0882c270ac6f262cd2c478fed91135a4eaa81164f
+Entropy.3 = 7a9f4ec4675e3db725e6f0cad3fe524d1e02d8180bb273b4
+Nonce.3 = 9529558fc7776ada7490f295
+PersonalisationString.3 = 054b2054c4ee9d9fe813ae63675fb998ac4fe0180fd13492
+Output.3 = c15cac5ecce3b57bcf5eea6d1d3ec4988d3c97b6d5cda287df44c2867e632db3eece965d3294eed71f8158653061b8ffee0ee8dae87d29474729451c0296597187c714d6897b3f1bcd1bda05418163ca557697277e9ee6b2c1a3c47ef5b261dd82d4f881c97de1485d0db26146ff9415
+Entropy.4 = 3f87d110b5896071c058c809b0ca5008f09a9056e0630c1d
+Nonce.4 = fc22430c4dbf9d4afcde32a0
+PersonalisationString.4 = 3dfd0c683bfdb483fc9d6ee7eb787a79ef910eb55b5f0405
+Output.4 = ff9bfc1d1e80d7f3eb4435c8df3e582eab3d12ccb9d7dfa33965d23e5728200eeb555e39c7ce00c964287a24a7c600dab589287ff82e12cac3534bd9e4d0a1d261f67a8e644101f990112d8389753761324447e78c6cdf4c447e59be5c16ff6d886a296805e904350fa62b498866c583
+Entropy.5 = 46aeebd8df9bfa3431b183cc1d4e39929fb52d3090deec25
+Nonce.5 = 6b3ce40b7f3fa7448a938e04
+PersonalisationString.5 = 46878a6a01cef1c4a30ea47066eba37b0ab9c5b7b76f190d
+Output.5 = 674fafa55cb6a977872b12dc3c426f4ded58e51f176cf5f591b7d84352910f7f39d66f7f85e33e30158cf4e6243f458298467e01f9df3a9723eaf685f4643c4051b76b85f4dc153b1ce9d163e49e85929f9f95b9fba3c0d96b0ff990ffc6376488a86a990af180992128fa7f8d542d2a
+Entropy.6 = 9861f6f037a71ca9c86164eb5c4eec91bce74ce6e72101a2
+Nonce.6 = c2af429929d4829b4b94974f
+PersonalisationString.6 = 37f023fabe12c0fff44aa961f5412cbd0ca34f0828038543
+Output.6 = 105a15364d15aebe50903e138cd32465b8b3a5fa2da47802d32d7a8cb75c89b5ba621c3d4ddb4ac9133c653a6cb2ccb971e9125b38634a400b8ace6eb4e99b109d160234ab4cafe83a1320354b55c89e3cd073a263d411482845d96fe1e032e43db88885871a8c27fe13e8514067dbf3
+Entropy.7 = e22a7f109f9a975a80820edfde25597b1778b821338cdf91
+Nonce.7 = 9c1a3b79b0bb3edd2bb1d118
+PersonalisationString.7 = 3f7bbe12073c941c1f6ed31fb12e255ac01b393e973dceac
+Output.7 = 536aff6c0cd2e4bb32f11170edb87f7ff7e2e5e6dbb2cffefed60e4d5b6cd6f8f5df013f5e13aa800a8c7d291e659e17f935065c481bc852c5fd65c88c9d40fcf3473048cbcda84e3f279ae1e8d33e9d106cc894cd2c549d2f0d6476dd8e783c3e9be2e116915498370ce0d2b77d14c2
+Entropy.8 = cc934eb554741f1579572a1e145c5c752eaa5fa64789def1
+Nonce.8 = d099e1fff20fccb16208d507
+PersonalisationString.8 = 82883f10a78958c6d5b8c92dec9110893e77ff09bdc997ba
+Output.8 = e56b85b3f9bf7b9e74425a4488cc087f6ce99dcd9f45f501321dcfae27618dea4916083b9ccc8f3384095408dbb2d02ee8690527b2374ae5c37b699ec7f3c313289c771ec82866fe79ea025405c15b5ea154e09319a075f71a49ad6d638d99b83ccd29f47e054146240bf0870aa89c2f
+Entropy.9 = f67452b2e842973883350d8866997e5e2c1feee6bb7685e2
+Nonce.9 = 9c0b03805dad87ca333db255
+PersonalisationString.9 = 0984d59b7d4a95bcf7f0f10f9245aa1651a3e3cca35f8e0c
+Output.9 = 36cf230211dc74b6297c07b0bbfa542681c57c4bf41c5658af20ffc0ee985c892369a40629a6e713f5b4cabc3c38d2a0189174e9f5f1af10dee459f4419a4caea3613370ccaeeb9d2da810cc05064df3b4e5349f50ae5d2120216f435195432db4544f4aa3f72d22bc2286a312206184
+Entropy.10 = f69fb91ad26201a137d9358ed6a37c1601abc7fa2c4b55ca
+Nonce.10 = df47344ea318139384b1cf3a
+PersonalisationString.10 = 517949f5451e9a4c9e38802f0e841ed51447bb634447fd7c
+Output.10 = 9982b4fb5c7784d5564e6175bdb4b11238a3d2fca5ef396a6bc2459930e56a01baff452b5c422161a5257639f175648b6ff95612fb7a2a4ab933ea0dcba04ff6bdf36b84f09a094d234945d0e4248c0a4ca5805a72e374be263778e5f7b32d004d6690bacebfc7aa3df31af8c081f6e4
+Entropy.11 = f4e9a343c49283a26de114e6583bfb6f2107b375678df18f
+Nonce.11 = f1e57f308d3626c8f4a9b743
+PersonalisationString.11 = 9007875be95be3b8f77e805204565649a817d2013b249958
+Output.11 = 2a6a06189aeb79cf666aca755fb68db130714efaa27df3a6f0c87cf2b2dbad6d93d0a5c44dc146ab484c47e8814072fa9fda814bd6391cfa809631ca896ba762a104b601a05266eaaa80daa3458897d7f5038e433e171ddd15f1ae6c5d89d2b97b5b6513e1870c931553aab08860c51e
+Entropy.12 = 9c9a3402aaa5d4726e8c236b94f9f6f85132ef650b8f0fbb
+Nonce.12 = 136c3e41a55f46428031ca1c
+PersonalisationString.12 = c2090b993dc33ea85ed255d213100dc0f9352bf9ede57a75
+Output.12 = 44989fc040f82db3963fb5a8dbdc6630f30e7809f0eb660675fdd906b87277961ecfe3291f6c70f59a41e0990fbce70d8b8c2c50b19812056cbf168020eb9e7debe996f7bc54a744b49e79f43acfa362b90217eca65d1a70c6f57c85e589a52b57364bb666b28313e78b998e30831d11
+Entropy.13 = 39ded30a35e0c0e02dc11b8fbcb9f01d54dbef143e27f0b6
+Nonce.13 = 92b92837b8c53bce250f4356
+PersonalisationString.13 = 628d19f1c82d07a6a03de095626dc93e298624c07d95277f
+Output.13 = 61234e866121741a10a65b027797703c29cb7cf7347348aac1e600e460243be86b494102d1a8704afcc49c5eceb566cf5a0dee57cb60926ae46ed46724d1e4a2628370ea5b6258c0c187f4c385b8ccf9625a0fee3f9d11de23315a09d8090c7ef16f52afe605e4dea661900014d4bb7e
+Entropy.14 = 2a053d72f043eb480f1bae697a59f17cdd44b9f2ca9112fa
+Nonce.14 = 1ffb77244697c3d67a564d06
+PersonalisationString.14 = 62865bf0f5af2146440d74e5ac8787cbedc544de16db24f1
+Output.14 = 1a74f62cc6bb05ff956d1af526926b937a84352830a78c7ecd2ad9c39a796f29f640d188ded8bda0e66ba81c941fed5e82f3c78543d9fca14335459ad9d573362f6b5d69861cb94c0bb055723ba5416b1fe08e74f27f23cdec9db05b50b01a20f0337cafec896f5f7412e1dbe7307e0c
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 86a1b85b447ed6047efd9d941076f8e2574a59825d823471
+Nonce.0 = ae0b9731774f400b41984dbf
+PersonalisationString.0 = 530ee91ea4d80431b54a3af8e6576f01aed5f3896c4aa732
+AdditionalInputA.0 = ac82066b7fd4d4c700084653dbafbcc2b37842febf08fa04
+AdditionalInputB.0 = 57b7737a97247423b83971cfbe1d1a77a61535b8922a4e90
+Output.0 = ba15fb11668d1a84785f5edf8b9054647fb702623a1140de9109ccbe1e14eec643fba1f4fc9debbe35d8a1fae3895cdbdc4a1e13f463955c3ccb16469817bae97c028f327c71386873dbf0da9fcda200a474d2e74ffffc867cd7e25f40158c4d5711c63af48e5e2590e787f0db84fae6
+Entropy.1 = 9fa2311cfbdd52a3133f50799390d6d670c28e6a6aee1047
+Nonce.1 = c7c811332cd0923de0f21868
+PersonalisationString.1 = 2a6da1f72de610e1d3322d33941d4091ca2a72452f1ee330
+AdditionalInputA.1 = 7a632b14f1607625575d89b86610aad7915503c2ca140866
+AdditionalInputB.1 = c7956c39600ce8361de289de2cfb36875e2f0460e2f3a904
+Output.1 = b17c449e66fe2950ec28d8e82c9a744fd89d91a4b4ce45f96b69ef98ce13704949f5b883f5c409483ba9d915d911c341855f4684f5d015b9039055689b7fe28adcf75e7159f05bdf0ae6e3cf37b07fe7583ca3169ac6ed96af336eafda91bd86731a38dcb655a048e4a7121749a2126b
+Entropy.2 = 211e39be0bab7a81c555d13981a12696e590fe65e5170fcc
+Nonce.2 = 16b7dbda910cc80202edc3a2
+PersonalisationString.2 = 8dbfc18b5fbfb523a79859decda92afd103e2fed12211b10
+AdditionalInputA.2 = ea753210ef86579deaf11bb431ae68c364e964b868160f84
+AdditionalInputB.2 = 5c3e93fe188b9b535a10dff33e5af1b4dd0d650068f808eb
+Output.2 = 7a7fd347a9d7a51aac53675a5f61810f1e7f1531ccd40d46e0d34b9084cf5b347b10098d3bade378c9190eda9bea755800b723331d182e1a693d76db0f73ccc3a209afb65a7aa713b3b9364c48c70a4656c7d3cffc404c07277669403145c595469006353b77574cf2d565e2033cff1e
+Entropy.3 = acc90c5fde8d56a80447cd97ccb88f72b2104956166d3d99
+Nonce.3 = e45efd3ecd788ba826f7d51d
+PersonalisationString.3 = b75c900d8e94e3926bff49bb55b1a3679dd9ab2970122939
+AdditionalInputA.3 = e52ee85ddd31155e77931f1ad6e9c994f28ffc10e5e15b09
+AdditionalInputB.3 = 3c90340045534f3ba3f4c9d4e427fb912434ec1304073b5a
+Output.3 = 9e5566edea3ca7048a602012617bd16fbd230aac183db50d161b36d02ae19afc1b734090bc2c064ef4e9662bf45618fd649c0794ecee55fb440f24c8a4105a77a7b512c5701ad7417e52997a1e27edd9dcfa45884b2f5c8e3d8a20ae8913b0a6915d3c1dda085a61dafb30392b41b4f7
+Entropy.4 = 7f5156a1c615c0f8f9e964363ec7584eb8ef40d27b9388dc
+Nonce.4 = 74563632edf1100fb1c33c81
+PersonalisationString.4 = b4884c6c63d03fbe824d4ae6b3c23cb4c5471b06604ba511
+AdditionalInputA.4 = 2488044d437698280452c0e1d368fd989377ec94f7a3b8cb
+AdditionalInputB.4 = df94bbc38c787272f64364eae04f92333439a546a6f80e97
+Output.4 = 0928230871ab46a44138fc00748a667ad6b1a72584625d6cb5b00e675ce505dd5db08883c1db0ac86646f2a39879694e16bad7b7592c50f0ddf3cefb00620c8500a353e27b1d233662295f1f17e08cfa4417afabb5678475dc55bc8e614fffb6c44b80ad4aabac18f389c1a9fdd61b53
+Entropy.5 = 24d7995747256a94f9d817003f64a9fe06cb158db616f584
+Nonce.5 = 9f54e37fe84d8a0c94523de4
+PersonalisationString.5 = 8924f0c493f87a8cd8ee710eb80831c106de5553041e9e9c
+AdditionalInputA.5 = 7ec5f3134edc34995e03ceb25045ec8f9230e53f25310247
+AdditionalInputB.5 = 2f4eda92e7f69499f8684395001d8c02e2a28c8a62d946b1
+Output.5 = eb9e6c934bea04b91056db81e56fe91109e3b85b8ce32cecdadf7b37d7939d2686c08c5e0ff11007d54af4e36694cfcd1448b0ebea99caeca8c98547128cd9e78a5541f291d1249f1cf281a7e555fdc24567d287326683b7ba9b458f7ae980773afec8d8650808ef7433a5273c06292f
+Entropy.6 = aec9f1cc9c78f32a518e7c442ad709ae4f79c2ba51bab92c
+Nonce.6 = 66a2175c4a34f0c483035f84
+PersonalisationString.6 = bc5f1615325ca6c968f7c1777a4f026fafebf802918b54eb
+AdditionalInputA.6 = c46a3fd414081ff3c88bb7d5b266399281da880f91d9d4c2
+AdditionalInputB.6 = ad063400d0fdc9a7174b3fb6b42304c763739f3152ee99a6
+Output.6 = 12a5c705873fc8d4ccb2594a61df026cf0e60433bb6bab16e98242671a8ae9d97bb6a5bd033464b30d26eda6bb05290fb8b7dd0c5b0062f25adfc3f5343c570322856b80bdbf4d9c65e25823291998ca46e34f3ee9fecb112df2cf3ad3455eee204c64a39838814f40d39a5c62ad5153
+Entropy.7 = 1b7313a4bfd08e69e356efd3cd89b03aa574b08346d4db5d
+Nonce.7 = 7560c73a2a82cd6633dc2097
+PersonalisationString.7 = d5a9a27d17deff4ed2d7bd2310aa19fe9351ecf6b308dde0
+AdditionalInputA.7 = 9557d12b235921a46abcb1e71252742459a45194df8d4fbf
+AdditionalInputB.7 = a0f7264952fcdeb12d065d80cbe988b9d295d70e0285b0a5
+Output.7 = f3e7cbe2f69fcc53e40bc62e89539b7231dc1ccb4699a1e7e512c75a7ca93820ec8459a1e12510ce112c6e0c2465aa76fffb9cdb9598c5b95bdf1eedd2d3e8eca5887781a06895eaccd9e465c9af03c65d046c5f45cff0f07a10a5908b949bc2a7b1469db1fe3aadf4babf4057ceb4e8
+Entropy.8 = 16f52fab801fc54345b49168884c5f06e1992bf6f3cb705b
+Nonce.8 = 7a5100a4247ceef1044f2355
+PersonalisationString.8 = 32ca8d5a042d4b744ad5e59379801254ea92ad6e9adabff0
+AdditionalInputA.8 = 479fc760afefb2991f9164245eccab65d3e370eecc3916e4
+AdditionalInputB.8 = 992aa7758aa7b962103296c997ee0254b7717d9254d2491d
+Output.8 = ec2ba51eef719223d8df5809516c51f4079ebcd0ce85c57c53587533a49c798396b026c564aea04c5bfffeaf4f9fd8eaa7ecf50d2f3cf0c14eb99dc461649f7740a93b40446dfcf2a68a85d78294bfa79b7586ab3ac3b5e31412c972dfbfb174615e56e18de4facf659d7ae25355b59a
+Entropy.9 = 3e33049c4af4b3876cb43f67ac8f8d5a8ac97806fa6d1508
+Nonce.9 = 22c2d8c3b59e99ab926b77a3
+PersonalisationString.9 = 7516be26f052af032b28e5f3e7d36139d584c3bcc14235bb
+AdditionalInputA.9 = 0d39b1348286ed5d5a1cc52a9358da88eec1e963a6eb0772
+AdditionalInputB.9 = 03248c2f296f87035626f743ff970691935bbf62d6eef9b6
+Output.9 = 24be53c262f5181a02359f73e97f6474c2433f77b4ba4fc7444ddd0e00982815945d180d860aa5e403c4fe4562b48b2583c5d51cca3a24a59f05a93c9744f436650af562b94d75d95c44625e85a0d6a161bb7130395c75cc3e067a2aed3c7f69adadc9dfa7e10015d030abaf80432a4a
+Entropy.10 = d883e6934565e0bf22c092233843736c1e7becde906366dc
+Nonce.10 = c73a7fa276796d45d16f36f4
+PersonalisationString.10 = 829c8d4fcfa8e520d0ba7114abead1940b23763abc4aa67a
+AdditionalInputA.10 = 2a8d92c1fe4e8f5ca89a277319e7ef4fdf9869bddb816307
+AdditionalInputB.10 = 76b8e1f0ac6572b1af383f99e3dfddc7a6e4ddfa69034016
+Output.10 = 073257ad0dc09fe074e8feadca8b38d884e355638d27ad27b1d473cbb5853ce552cb4e5f1bb3f4b074554825e5bea5c9c68c075706ca7bca6e094ac48c1fb1684f5fecf1acde94c71842628bbc8dcfec5cc2aac19dad22e75314dc69d902571f07226dbe75ab761a33bdc8a474c354eb
+Entropy.11 = 7a94944be2d18a2aa15ce5ee67f4c0343c4ff36a953d7328
+Nonce.11 = c218a8219257216a97cb037f
+PersonalisationString.11 = 8a31d2b549c488913eb64d0eac57a78c43a699ea168085e2
+AdditionalInputA.11 = 00fbd9fd9922029a48a6293958ed90cca72d97ef27f758ec
+AdditionalInputB.11 = 2f17c557b5b475fced2fd433577ebc7384e5a59aeebbc3f4
+Output.11 = 73d09e22031cc800b50a6e2bb189a69bb06dbdf03c32c042c94e407dc3047738eba7c265d815c3609f75144207b60f866e230aa9a43128d6a52544d5e220a8782865cd56aa3e2fdafab705db3eff96d6f2123ed932a447ba3e7d3db01b240e20a68846008e4c9e51d78d337cddea8ae4
+Entropy.12 = 87557273860b5d01c48d8196908649c4b88328809590e675
+Nonce.12 = 56833473f22dc22d14170a55
+PersonalisationString.12 = 998435cf6d83dcaa8e4bb70a1139817d223ddfec2adf7838
+AdditionalInputA.12 = 16708c9a59592f37f6d94f5937c4adb1707f93be28154d82
+AdditionalInputB.12 = 829a67d0b1814dd03f466f37ffb9c5131f7d74438a685f8a
+Output.12 = d1fa4436d881a25a10e5120c2935c46e03a3578a21efb382a68e22eda8c9c52adbaf611dfa14291e86ad62b77ed8d5fd5305f82fab0c0f8315a2bf6790d45fb4f0a9d3b704e4a52cff215526bc2b5b2427c51e117373edc7b254335914f19430c56a56dff1e199a8f727b0543e3c4149
+Entropy.13 = e26a797b9bc023f5fe87c7586165df6eaa17ffd60d6be21f
+Nonce.13 = bcd47b2bc34eff92a68baaa6
+PersonalisationString.13 = 9b51cd536ccf30091302e654758fe1b2d2ff820b3c42436f
+AdditionalInputA.13 = 58aac703a592da10ab6462bcc2ec2d67ce31a747a9098662
+AdditionalInputB.13 = 5a40bb66161a7c1e1664d2ad911f323727198d5f8dd41986
+Output.13 = 7f0b2349248371a7b4d07888919d214d94de1b3ee1e3b9f87ba84c9ae6f14617398920e632e34e6c03361b9ef0a5c96c7baab811fb3f0f6ae3a034ecb604b59ecb274e847239cfa1dde2bd238891b5c9c8e4fd8d8783f18f46a18e2277fdef293ad56abe9517e5c15e3f83cd6f458155
+Entropy.14 = 9e7b96155105119e84d8bc01d157e096b55d8fe43beadd3a
+Nonce.14 = 84e628d6411c355793266da6
+PersonalisationString.14 = dccbb94a69a73d5428753bbe29a53657060345b9db3298a8
+AdditionalInputA.14 = 1a6853817be281e26796430dc90f014f6fde64cbef16e58d
+AdditionalInputB.14 = bdfa703974a758cd4eb00661e0f4663f4e574cc7be6906e9
+Output.14 = 23c9f591ec9abea9f9eb89ab8d705a1e570fd2888772db5d6fc6e418a34e32d78fe49be8d4d8288fa397b57afd49c07b715e276c68a2eb8f3e63f67de21d8ad23fbbdcfa03b201952fae49928ce4da66cb70638398bfdba4db7635c8c726a3cdac22c98ae776e881edd60b69f0b38e4c
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = d51bfa907234595dbd898908e3e90e00791e275223ff7770
+Nonce.0 = f3813570a475aac3b7fbe345
+Output.0 = c2e1c50b8a0d0a0a76b0a41b3f3b46f3edf1c81918d20ded790426c58a2643ac72ef1bac86579bd93de0b8426a30a1c297b54f8a01f80e96bae7f4f1fa03e2edc31b0e44c82f338a4c2aab4905a6e231e0e04f0829450c88d17177f3305742def23f6b20a1fbd8eaad8c0f4aae0420a3
+Entropy.1 = c16de117afb858ea09eebeede6c98959cc7d23e7d76e60aa
+Nonce.1 = 3a5cd5294eb7148fe0bf49e6
+Output.1 = ddd1c2dbc679a1b8daf403cf549bb19b8e88610df4ad5583cf32c5d7b223e564d365e5aff9a1c358a8f22938cb7fd8be6f4c187cd32c2956460d7b27dd883c5b5548529e757a7b89eb8c629414dd6d05c93b362de92f5e59f546a94f8677e117f62cc01755bfeee85fa1ed34dcc83c79
+Entropy.2 = d4c80c96d8c77c32143b0910404d24c5c60aa6c4beeee7d1
+Nonce.2 = 0fe1715a585315e7dc190e8f
+Output.2 = 8c39007e62a24a425b607a918484664ce901530372dcb62240b2b23b7701e0fabcd27211b137c428443bd7b4f082c82d60e1b882d16d603062f8170f309dbf4ab42f243a6f3f53d131a33cb0dbb4b7bd256432756878c4b791ecc1b850218a018a0aa9e85131f34400592ee859ad00e3
+Entropy.3 = a79ce1a08f37ee3f37d6f8ab435b94cf28749da73eedb41b
+Nonce.3 = 0988b6bb35ce37d3f1624887
+Output.3 = 6f048662784d28bd3c3129f0feaf7b50b862a5e02b0daf428bf90e97ac3501f378f342d987cc11a0ac1faa1550c2f2c78468cc6ad47f8c9d047f849dcb2c9b2cf6f7dbfa398ae3033ae02d39e492b8ec20e2283ada6864b3ae2057620887a369ee08cf1c812b23a31715be7f5af7d6d1
+Entropy.4 = f766e51848fed6b6758a8a74fa792f86e7ba840d9a9a5ba3
+Nonce.4 = 72210ebe17918750526f6b55
+Output.4 = 70215dc0057e036ff584af502fc3aa1c6c7563a87fecee315c1d42d6dcb5acca0d858b3042ee8accb28306cfa2bb5d3e6e355ffb2419214f7be6465b34a0062538d6898c81feff31657480f67bd986cb1b196383b19cbb8f91a8d0c72ef9b0e884c98f6ba46ab9cd03533df2381884d6
+Entropy.5 = 163dca82234c9a423748bd5e607b90af327f1cb32f64bf97
+Nonce.5 = 9504c77f0e342d14557157bf
+Output.5 = c295cabc4d521a9da9458718fcacd74bf07cc142d3d09260482100faabde35e329fe46e4dc1c36308199eeceaf4f8208a55e74cc4b98bedb9f63568d9f855d8a54db3c30fb0690096c0f5c3ae819110d000283f3bd8575dc532ad4b66b7efc67eaad32018967b43b4c9304122c11a863
+Entropy.6 = 1ca226fe84594d89cf82967429052f6d1788623fad8fa0d9
+Nonce.6 = f45f05d64f558ec02141fd3a
+Output.6 = b3fc16f281290a7d7a2c3afabd44f717170f6355c1453d19498427216c7e270bfa7f5d1e699881f1f105bd52dc41d0790be4dc0ae7e1d73e13c34e7f892f658cd8bc2e811bfa1fedad6070b33a8b90d53e2b40d1763584a59a688d3f887f9005919e5604ecf4261cc283da76677f8989
+Entropy.7 = d576a4fc84fd78a40a40b521075afe5e261c048cbb9d511b
+Nonce.7 = 17fdcffdf7eb1ae65cb95b1b
+Output.7 = bad25947cdb63f878491fcfe8580f1fd18ef0e83e853877090e8aa4782713205810b1736e9d71cb775ce9664c056fa94ddc62566072e04acb1e4def924b209f9a097ebddbdfb8f8cdc3c7f1f28ee2526ba36674430398bb2de13fc622c83025d2ac61c7028d6a113c3b6ad98e67e895c
+Entropy.8 = 2e98287a92bd9a5503ab95f4cb4a554cc0bae99784b44c26
+Nonce.8 = cbf0010846e067fe1a6a3560
+Output.8 = 81f7dd83421637be81f9e5de165e71b6a09d7c0a6ee26f6d9408dd88988c160f1f179bc730d43b96be2e7e14072ef13531717e65600a3953c40f62362f2c457e57b2dae9c759bc4af38c65d50e6f72760fe07f8dcec219d033d7e06980fb9ac4e65843b370cd8300aef092252208a07b
+Entropy.9 = ed4e03b2b75ffccabeaee1ecc37ae454123dfca7bf852d1e
+Nonce.9 = ad93779cf99817b01412d49e
+Output.9 = da2cbf5d47a4df44b3b7bb80134af2c19c0f5e628aadbf4c0fac5d0e6ca2babcca83a2396922d02c58cdc2771de74c82fbb48af8aaff04181076019d8041341c3274dd2242ee768c6bcd1b0aa542ae1caf4209819a30df44bfdeb7a485ff1a02672580b8a8042b0e7d4425286842f994
+Entropy.10 = 1ff763c25d909bae4442e148129fe050eeac7ee2f08d1dd4
+Nonce.10 = 3bbbceb8183547518df61ddf
+Output.10 = 763a7f1da652e50fd8aec81b81d70b58eb054e5b0d79dbfca87f1cd44600606dfb0b3e4199d2ab56a99dcd01d23b154428e5b8586a4d56031e0e82d303915ead070c2e77b5b328a3c6de274f25b57eb60fa1dc53de84fdc9449a9bc8e2d85c6ef5dc96f83690c06cef3ebbd0a28ae64a
+Entropy.11 = 52ce78ea0da6c9e4d5c47dc011fb6a0445b039898e97c961
+Nonce.11 = 9446829e092993fe6c009f0c
+Output.11 = c79890800b6c62b38b9fb12e8d07e74d7903c130e006cd28c138167e8851ab938cfaebb54db84829bfbb5a972a2755b99e051738b6d22f916d77ddd123e28103cb868545b5a0f316d488cac8bef473dfbd66846d57dfaa906aafdd557e65f2fdba750f9237523df5d60cc43290eef572
+Entropy.12 = 939f7ca40e30cc2fc4a1bc8ccc7e274a55f9249e31d9aca1
+Nonce.12 = 9f3589315f1d5851e52e0736
+Output.12 = 9aa1eccedc69e688941c876b17589ed757d8601da125bf4d81ccfb3dbe3a8776839839426f6f434155ddb82118e36f10242dab580fe588e6396f2a9931b0d9bc4f13dc38fc85a990f8b9f4968110a5dbdc8aec5d5eac0c084c3320e757117b1c9b6ac1553fc23c291bfe39f41ebc8605
+Entropy.13 = 20247aa9598553f13234e8d8fe89ab145644293de871aaac
+Nonce.13 = 31a04e9b534bba701eab1093
+Output.13 = bd955300e06403ec6f27654fac1aa5ae176f911c8a90103e5d2b5001b37e0cb3f22b4a8c0f772f706bb954428283ef2dc341c143c1e1522f97a1a711e4c7a56d67f1384471db8eff43fd58f1fe5b61332707a08bb5624580b1ef102d774feeee046764b63e80792d871f61aeafecf90d
+Entropy.14 = 7c8a961f01c1888456ae6042caf338c3ab8b5be28b34d15b
+Nonce.14 = 61edc22b49e518eaa9e4e04d
+Output.14 = 9d2eb0a41f7b03ccae8e4e3c61628e6710f5999f3991f04ba90fb3007275d07ff169d325ab26f3446e585c2d454ff8f6cd4a520190afbc06f30ec9b49668b09de45a116b171c210f5f888cf3c273c803044b17a16b06b44bc39344f2b2acb2f21f4b0a7abafec8c8d406d26477db9b7b
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a8dbb0592dcf5173471de8818a20bcfe1a5d556b60dc3087
+Nonce.0 = b84edec829fc7262aba706c5
+AdditionalInputA.0 = d97f4bfc7c27073b4101c7c5dccf7819d3266a031d31cf90
+AdditionalInputB.0 = 0edcf2e8d86f9ffced03d2bd6505cd9c16d3097ad2b9d60a
+Output.0 = 7b3e67ac5f353053c73c03d80f8c070fbd2ff490bff4a577f2b97f5b5fe926d4ecf61b2d6fa290a769e6206e33e02c3355b6ea149c2ab754738260393edb3390b7ed8837c751370b116affce76cf1b62d7fe96b4d6aa0c986749828c20835ca939eca5f846bb90623bbc7adee4400409
+Entropy.1 = c4ab93b1af2574f70bcc6566f9035f1a4f78ccb4ba7ea719
+Nonce.1 = 2278891c155a1be29276334c
+AdditionalInputA.1 = f780f62b823ffd10d7473764dff5cf9492d4205b8fdac28c
+AdditionalInputB.1 = 91e8e6894bbe6558b1a5249bdcaf220f8f9bd8b33cc8953a
+Output.1 = 8921c09ac83ad49be61df6f45babb2239a1f7be9cd2dc5979abc29cd15aae8d51e93080bf28697f49a152068431c7717fec47b95a3fcf00c36671a4f3b3bd2e66b3f4f0979441b7b224ce1c0df34193cccf0ad1ff760d54c293ee9560375b344bcef715af8e511de772a0b0d6108d69c
+Entropy.2 = b56380830ea9fe95209e7d6aa4c23b71d34a58cdff979c03
+Nonce.2 = ad1698ff336da87908e6f5ce
+AdditionalInputA.2 = ec98aad65398c61bca7b7b32440bec139d646f1a9e484baf
+AdditionalInputB.2 = 8f151a3c7d292cf742621101c6e4ee7226158e441c9a012d
+Output.2 = 58eaefccbc5d04e9c8f584c4e5455797cb4e221c36b4e3867ea9f16f72294f9d0a1e6f7b0a6ab6d51a6935df1452f1cabd408974bdee9a17c52ae95068e6ecb7ec55ee39062fa795e647c7058f9e71ec01ef4f398bd11cdf88c61771982477e2478c438bf8f1591b0945c3416bfa439e
+Entropy.3 = 2c1b7b611c85df6e59907df53e5d3fc597f31f4f7539de2b
+Nonce.3 = a3c67467169a12beb63f34ef
+AdditionalInputA.3 = b84eda25bbf4f706ced37ad409e69b5564fe7403237bea6b
+AdditionalInputB.3 = 20907c3cdc7514c09f37e6f469e85944c00781a90de40037
+Output.3 = dff125381a7299be9f571980a7ab068157d05c21b37ceb400b5abe6513d4bb05136b0f1a093d8363b2d43395403fc11c2f2a1b6457db7b44dc165e918c5bb7567de7dde0fad44d47bed60a98c3dda461c36796d99ed2799e7ff5db8dad041b0c63a36f103103d699df8b555713f40e8f
+Entropy.4 = f1b9bfcd31a1fb8e6e8b6f05579674b5058edb1191edba86
+Nonce.4 = aaf079e0d66448177dd35175
+AdditionalInputA.4 = 706137c5519d877beb492556129e28481617cda963c82a67
+AdditionalInputB.4 = 06cd1a519df346e24078d435b5c2790e1d3facd3cee6087b
+Output.4 = d839b094dc03598b56f864a1077712cbeb7558209b5ed19a5f0f69653664ab89249d4ffbc80624c12cf19d7eee63f0bb9527beb5a057afdd2570f5a54b77cf64f1bcddb6e6995c997786903caf1242d808484fce6acbe85e357c9759668f5c232683b3b54083b781ea2da4e7c8bbe876
+Entropy.5 = fc4a6f6e2521d029e56bd53c430b2d8d5adcf9afe8d0b6b3
+Nonce.5 = 23bbcdff40f58cac16e0c26f
+AdditionalInputA.5 = 58b02447c1781199614a2c9779d391816ccb40908600427a
+AdditionalInputB.5 = 6b1d9257d8cf58a28905a8b308b7d433d4fd0565c1d1e8ae
+Output.5 = e625380c083be01bc4ef0123b622356bb0528e78614b18fc534123b5b7ba0127cf7cb8d0c8df89e8bcf2ce9880490d28e75b8dd8136263cd9b328b04ea469d1dd1086f11a9352fad67f78f82b945c75dee283848055f83a82897e06703a66f8b18cf1a88361a701d1c0bd738c7745b41
+Entropy.6 = 20948d554a41ff027528c1300809bcacb4780b959469d578
+Nonce.6 = 2b9367eaf432073142dcee41
+AdditionalInputA.6 = 8b7f07e8263842cfaf7d582c0927864170ae4df33f0311cc
+AdditionalInputB.6 = 73d0eeaa3206998cd7a2dd70b60d6da178c65a3a9fb215c3
+Output.6 = 40d20a3df1351bf03af3447da04a930270de48613a1b73681fa041e903385d4257a7774b8d62e726050c9a21da17af8e0ec107bfae390a37895d71f8d126ddd015b1d4e77a205b358f85372fb81107f0a5ec2fdbe37dd00877d286cecdd1991fc1638bbeaab27a3ac70e8c060747cadf
+Entropy.7 = ff41b81599810a01cca6159097feae80ab55e03dd04d333c
+Nonce.7 = fbba10f7eea1e17b95c6f4a0
+AdditionalInputA.7 = a40fc869741f62cbcdf1c6ca2faac41e40450c3624965e1f
+AdditionalInputB.7 = 7a7f5ceed2127cc6a16943ef630f07c9031326714e119df0
+Output.7 = 3a6018a00a97ccf114c3b764fef9215d6484da8ba9e085ef26d019be93f8ed1e37c4b891f88bf5ea051c1d09f4bd6851967293acc8a7ad73ce5c73366aa2404de86f9fe1c077d0434ec39757050e986a2f86f55e8a6bec27b016e0dbf4b9c9016f0a918eb417f441f7ff724d5ca8f468
+Entropy.8 = 5e7fa3002e0f5adabe9be1b79d792a16850d43705e744453
+Nonce.8 = 42b548d2a692fb79db011e43
+AdditionalInputA.8 = c1bb8ebdd77e142537f477557f190b026fbc1e0bdd1dc4b6
+AdditionalInputB.8 = a72b7c2552e9b46d3c34084a5da6c122e3cbe53f988016ad
+Output.8 = 2770b5910cde1fd5e54720d8b57e137ed77c2a7a50ece9c1c019bfbf92e279f141f71586764deab8214e83a4c9b3e61fd2563a8ed9645a2f13004b9ff3c0481dc1db497d63456103816414e4f1cf002cc24a0da861639fc847711f661b9ae91b6982ef2857eafacc8621fa4c7d66fc11
+Entropy.9 = 0db64b56c91e1d72e019da8b9829bbcac9e64dd674f64560
+Nonce.9 = d1637d39057566d9d20a1320
+AdditionalInputA.9 = 33f94abc4a8846483abc9695edbaa3479bcad3b994b80ce8
+AdditionalInputB.9 = 781e62295a01cf6513c0b917321ee9fb1ebdf2674302b48e
+Output.9 = 36043d99c14308be1fc5d518955fcf766f7b7e81812fa42ee98b367c5a5c5b46e2eac44ddffa3c21eaa48ec55f7e416cac71651540d5f29fe95b24dbd203f83c074ff2f9e6b561055121274438060450146c2c2cf21b884035c7f762dd923e3acf21ce26dc6291be66e93d74e9d3e8b2
+Entropy.10 = ddac5cd0ab9f7fd33bfca2f320c82c519ea4a65088c064bd
+Nonce.10 = 72a7a2d38467857f6d887d4a
+AdditionalInputA.10 = 7cef1f18e474b776a443980ebfe97d8ad661391c46d237d5
+AdditionalInputB.10 = b3d6f72fa5f4130b96f64cef11115aa4fee0b68fb5be5910
+Output.10 = 2f3245bcf7d45e1e22e3842857fe2b539e5938e0eae31271faf93f301e4aed4a4f4efec3a081bbdeca2c3c4e70fc0299a920261e0852543551d8de0b25bc2f543b6f6183b859e50c0162b26ca73a9ae6e504986b4ae5cd69b4abc8f6f1a12490d4f97b74a0650c8e8576aa165f453be6
+Entropy.11 = 7fd978b33986297a99ac44d269222b20828574624bc208b2
+Nonce.11 = 7cf10f8e5c1188480ab5e95a
+AdditionalInputA.11 = 65beb2e3a0fc3484e34e957ef004715762b2b9fbd68ddcff
+AdditionalInputB.11 = df6f2ddee86689f5a8592bd41e1cb59fe00374401ff7e8a1
+Output.11 = 5d9bb9b209911577b187adf0ac343a5a0545b77191d7e1cc191c2fab4e86ef6a88fb1282141d83994bc039e17f4b7d29ae8a3117586bea2afed00a41677dfb2ea9b68d6618d75da7d0afa5ec4a14ac80be6873d158f23de297ed4c0aa3b5fadeeaf189c7126c460b9044b93b87c71c69
+Entropy.12 = ccbc856e0ad43d99b8d62e6d9a3ad4c46619c738003c833a
+Nonce.12 = 49a96897c2d217859598faba
+AdditionalInputA.12 = af4eee45d2958ea81f98ed760a8a220384fc1116fe54df7f
+AdditionalInputB.12 = b5c42a81a7c83320235598bee78b2286b91f236187f5b85d
+Output.12 = 4a44fb3cc340ebbda4eb2d55312ebe2dc23ad7698d78b5556475f764003e50fe9e48dc33b6d1441b4a26f2fc5ce357dc9ff99c32ebcbb38f66c2052034bd98fb6bf638c6994b312ec5e389cd7b72f4312043c772973eac1664146bcb19dd97e142613f6aa26456bbab200ab98215a8fb
+Entropy.13 = 4b68982eb3b81c8b149603cb5176598a7b405a71186afd63
+Nonce.13 = 9b62ba7d0213555226c43b4d
+AdditionalInputA.13 = 8ecd586643a108b396694e4d30a28d32ef32551777a2d094
+AdditionalInputB.13 = f977340856dc1f6d1e90b74ee76173512ca25c59d9bd9495
+Output.13 = c117887bf34cd682114555f017a0689880ef011254023570f5f78dbf6223bf6e94ce9c2023abaeb579791249191fa1c95ba3f1bbf9278836943ea8b37aacbec8f0d0b1c42d30c373138ef078ad1533e4f17d3d87ea093dec837ae90afe8905a7f505603be966a2cdc8512f8ee8b19f84
+Entropy.14 = 7c6d9c85ccd4cfa4e9418baf144da0f635f0be86a4cadd48
+Nonce.14 = 8d574440a514427686dd0eae
+AdditionalInputA.14 = 71b5b9e9b813b5f69e8fa9fa7f588217268581b7d135fd7b
+AdditionalInputB.14 = e5b06d8f12539d36c665cf129c1c42e3b7e88edce1650870
+Output.14 = 64595391a02ff750b46418274b8366bbca0e9c52c95bbdfa65882b76395887a018faa276f3fd6c8dbccdb964755e36508897cdac977037d0978f2752d1dc68bde3ba1edc94787c1c8cfe42c2347052da30ba7f1e06b44c10805196e7bb048cf572fda62b4a28fc189702b1e575b008ef
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = ad09c736cb8dda3d7712cd5c7202f2b35aae8e300af8c791
+Nonce.0 = 2ff77f55e60ff80d39407602
+PersonalisationString.0 = f5679ce508efb1da2d956972d3b60e7de12d8c1ade1e9478
+Output.0 = 0e56df58b8807f848adfa323418993b3d7ed775241b457f11d4897920c16d477d0fa27fdde930e936d241dca0ca7b0114b52aa778b4c8e7e01b056184a164b8295884831221ee59f00076c73d4597e4682b7be34ccb25a3f33bba38cb1f92fa64812f250b992d4f7279ed42cea6f747d
+Entropy.1 = 3f35b7c4276fa70aa68003827acd417e7eabbf1d20b916bf
+Nonce.1 = 8a0be31a81791c537639e863
+PersonalisationString.1 = b5eb60eb35397c2d3cb98d1edce6a2211da99e7b9314ddfd
+Output.1 = e1692317a5014ac1b8b45018b968cd7fd536c550846a9810cc5ace69dbc6dda7131738b529379c2e8c34ad57cabf3e91083c8a5781a00991365aec36a91d465d6e88a6f2c935989a95c8d5bba947669fd35d6b45dd83bcc26548d45d27f72e0a239cc1526a8623cb162d4a082e624b64
+Entropy.2 = 4d461486b3f22d8ce8da08af84f25ec15fc10c4705110366
+Nonce.2 = fcacdff9520c5d24a11cb448
+PersonalisationString.2 = 1be95db1c7f0c8b11a5d6f3701a7141a2c65d6eda737678a
+Output.2 = 4b99ac142918528dbbaf74af8714885d674dfadf7600e82ec7aa83e37dd0da47d92b2550bf7c91d903d38f60a5e09cb0b1ba58a4175e47ebf3bc67e65a681d78282b2a1478af9d1540bc67d2bd5bb954a7e649eddac051360b5a9fafc08a24c1b77d59c467311c6803aadfc509651fc8
+Entropy.3 = db072d9325597a235926c59464ee717f8b4810de056627ff
+Nonce.3 = 4f6473ce509637b9caa79721
+PersonalisationString.3 = cae57c3640f4c61b94359d03c6353711c7fbc8f423edf99b
+Output.3 = 559d18ab0727efd3cd27d984698be9fd86ef503a299cec2432aef179a969b51b101995114587390a4d623ddcd396ffab11991732dce0ad364462d9ada9f2ac85b4a58b5bd5575b9693ae8199826916d0280601443fbaee51e9c8d73c1fc622a7e825dae538a51b03faedc2f1b973f605
+Entropy.4 = f72f4f8a6833835810b3e0cc780f5ff555d95072197a7409
+Nonce.4 = 681a5457166ca6f83ed03328
+PersonalisationString.4 = 18718eb98db1faaaeb245072245138cb6c2da969d02c81e3
+Output.4 = 07ea38d594c3cc10f98b8fea0a718814d31dcb0616354b0b4c8b6576ed7b77a086b673193d44de988ae90a5ee485ea6ee0030b79cb6532f11084c5cc7f35f3a8868ffbf5a77e3eff411129f1a70741dfb57ee017133c5c463b210cbda1f555ac25acc18bca1b119d99cf1170f4d267eb
+Entropy.5 = 9f99d3a316cb6e1580ec67e8fc5167a7759c6c6fbfe8da1d
+Nonce.5 = 9c88d540c0095e2747c100c2
+PersonalisationString.5 = a3007f783412cb79038f976a266d45809de66088cca7503a
+Output.5 = 835f099315eaca6cb518b4fd087a95f72225a08f732c9acad08f014f3aae3f5759039157d50d9a1714c614a4457ff7ae6318c7c09f9dd11936ab6488032ed675c3982237ab7cac5fcfc2f7cc1f0138ee5a2b946ef74bd807cf26f7df81048c940ed3237067023ba5a3cbdb47c6361ac5
+Entropy.6 = c80f7d2bfd86ba62a67cdf3404e8a79c881ce8217a9c4074
+Nonce.6 = 1d192883a140eb8d8a90c301
+PersonalisationString.6 = 0767e17904a4539e99ad56e85f8583980dfe16c80122e0d2
+Output.6 = f050a9ecb38a3e524b43d987649787fed31d6ec4a4020c569e43fc97c346c02d54304c8548f3be16ae608ca19ed9c343863842e11300650ae2caec61340b6f8e342a701fc9aaa88a0d6a830ae05467ac2793067ade18693843c7af8bc32ef99bdf10bc4db86b3d4a0b978cfcfab89b39
+Entropy.7 = 66d5a510a0e0b51d8b028b87f152431fe48d612bfc2ad2c0
+Nonce.7 = acec6d7148362a28e602dd97
+PersonalisationString.7 = 5001bf497d90587fb7d99bbb4ce1a4ddfe561b469e07de53
+Output.7 = 080f9e361847528f4b8c78fe332988a395ecb87475239ea5d99dbcf819c4951e55ad7a2c140e2167cc83a14c98fdb052b155612b898b5a69f14bf394bd378cbe1a87fb2704a39821b23e2fb2a7f1f17b3f6c8530eb45d2d270438352d9f8af7f63e95f98d05099e6a36e0c8ea45a5b1c
+Entropy.8 = ecca6005a5f965238a48a0ea2d18c3623f07af97adc0e48c
+Nonce.8 = 2693e9da016b14e2530304ed
+PersonalisationString.8 = cf50ca5152d134a6599a1806cffbf4567e340cad1b87bec3
+Output.8 = 3f7860118fc63c701bb883ad136e4e29c0988fa5d223819f718f54ec4f4777d8b114de6eacf0ebac1b68dec8b0ca66e0a316197508c2c3977473628335e201e8a28e9d9221a5ae11cc26aefa34024225d250e8ad2d1eead2aae05b5fd222a7c6750d908bfbe9c4fda64ccfc6b72f99df
+Entropy.9 = a173c93315fb6ef19c2e3968482c1e9fe282bfd9f6ec2f1c
+Nonce.9 = 0672a5a7f027dc327cbba66d
+PersonalisationString.9 = c163923974d37cf0073720da4fb395fc3979edfd29dfe631
+Output.9 = 7916596b3214113a3272de3b4f30105ae1157c1d4b7343422467dec2e0f8cd75d7afe7b5492a4295e9060be4c366532e3de87b88a1a5d509a3057d2115e2d5ead68970b54ebed07a330cf994a0899b5666ca3f18327c8933464d57e145a4505426be34a8f486bab0cea64eb8752984c4
+Entropy.10 = 4d3578f68331d9f93e3b0aa2c3e2dafa808975635f3cc0a0
+Nonce.10 = 504c206fe630797bebc50739
+PersonalisationString.10 = 68354010ec6e00d140dc70175a49aa6f11da22a112eb552c
+Output.10 = a38afb8c951188b43a7e8b2e5439668fa316c427bd0072f34be412d3a422e45441d19bfe4a68aa6ab346480bd3c283d32da19609e332d1c12656f20efca50141c6c65d17583c06960450fda068d11536a3cb7d4957ae54e1f564ba798072b4579254a2e91e217000878be390acdf9cde
+Entropy.11 = 8a5ea0aa66a0207bdbc6bad06491d5e6b9301758a6a776f4
+Nonce.11 = 8a038ddfd11361cb70717ca5
+PersonalisationString.11 = 5c27e921a3a1747c9a9163a41d32f96ae33012abaf46c893
+Output.11 = 34d240b19c2eb1872a0e9b1dfb9e04f1b157b1a85c712bd74eeaeee252a62f8870f9c3529016ffe8b854567d402d77fdb81938dd0bb5f87069599e09882bb30d76df8f2e16c0c075098bfd9ebd5422703461ec986a7c7b9ff4cef52b84a437f5c50a71ce01a166b0ae8df0432950c462
+Entropy.12 = b4b4575f39053a6de34b8670e564b0da6cf51bc92b918faa
+Nonce.12 = 1c5af0c009ba0eef40e13201
+PersonalisationString.12 = 88473e868b244d58965983ba2cb6b30519c46a287969a339
+Output.12 = 88ebe1bd3ffbb585d9fb77a9c07eac151e90f1f53ba4a30a000cabff625c2775f2f2512560363f950bb77c7f4f55551c21eb769a360c358551203bcf96a57755e15b91e0bf1901338da338640f9c5a4c2f8e077d7daff35344244510da18b3d0c9e97ce264c3dc6823a213f843950fba
+Entropy.13 = 0a53165a0acfe31772a6f362d1f6c690963a9ac202581722
+Nonce.13 = 77656bf507e3a5a512e4627e
+PersonalisationString.13 = f99cd75d3174aa3733e6824202e49b454b1fe86302543f57
+Output.13 = d97971a69784aeb3313e65ef2e33dac16bb86bdb10b79ad3d62f2f2f5fe2240901ce0673bb2df1bb2781c3f45e56d786a22ac774a44777809b59d0fbd5b420335e04bf4046ba90b5a3637e255b3dbb89204e4639739dade26a313e2778ef93e16e775cc003aae8653a77542633c37ff7
+Entropy.14 = 411b71a143c57ac4afcad74acb1c61f671999a0c00a9c6c9
+Nonce.14 = a16783ada78fa029ca3fe31b
+PersonalisationString.14 = b20dae78f254b07fe3eeb7c793334f3f432930353fe7f221
+Output.14 = 081803927779c7b2039681db542c965fe48dc3cfde712a361e77da9aaf9f21cf38e18b4e8e5ae5a365910ada327b05630abe87858163713fd8c2988975eca44ee3725370f1c68117e58c2164605524102f22f3ea55f21f7e8fccd9861c59973d71c0aaca574480be6ec8e1fb9a163680
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = de1fc2448e0033444984047e187b6fc2c15d638ba445493f
+Nonce.0 = a7bfe594b1e4e735a283b49a
+PersonalisationString.0 = a3985856f6cf4ad07b57f4932cfa4ad96256e3101964c4b3
+AdditionalInputA.0 = cafc4a0576ce7beecd09717b413854b4ce83ffb12a19be51
+AdditionalInputB.0 = 9dd94e1d4ceb539a59ea283596e11711576d24a51316ebef
+Output.0 = e96607fbd3379d34d505a80b2afb102e2b6ded5f587e75fdaf111a1d325e972d6afb3a4277c07d1441d74b26250f9a9d9022431569adf36833cf30922ba462fb6cfc1777473f84452d2abe498f29a7fb8acf924143d8fcec84603d7a022a0893ebbcccaf3d390f22b63097ef007f15d8
+Entropy.1 = 2f9ff6037fc3ba1d56efbfc890a0cb543d5e2c925a97b0c9
+Nonce.1 = 70f99e00b55e3cac6357b0c5
+PersonalisationString.1 = 978c1c174b077d1eca30b7048ad51c08c8eb7075356d12a7
+AdditionalInputA.1 = 3845a37b64c25844da62bbd7851976ec13815f291fcfcaa0
+AdditionalInputB.1 = 8aaec921ca08c9e9e88c1d7e2d904246b83a2de50d80902d
+Output.1 = 4cb4185632630662d984e834d0ea3c0bb1c7fcf4370979b8cfb3812387728b4dd5bca023911ba0b7b2e0c225ee2c630e1f77463eea3cc20a71c4e6da4e6590bf53171207d70d35f401c2be555b74ba67be41c4a2fc7b255d44b1d5483d33f813046263875ce52b9cb44a29392f18616b
+Entropy.2 = 0e34dfd2fcaa9b61e43f1e3d7671f67b1c740727eca8de3e
+Nonce.2 = 9e86de397cc30e25cef81e69
+PersonalisationString.2 = 591d7cadc1b4875cabdec90ea5e121432770a0add5481106
+AdditionalInputA.2 = d13e2237d7387f97d9fabf10f6d33d2f47371e95d101a97d
+AdditionalInputB.2 = 90a31e97a288a714816f061ddb62466a17e3e8e860ea6591
+Output.2 = 2a49158f8c5fe3bceeba5f43417ebc99d664f169d19579cc959607c20065498e69b5683bdac9fc02ddb7ffaba3fa3fb556dfb89e692c1f56cfd9d367d287e07d4367b10a7a35099baa5a9a645dae4178a688b0f2886d050642d5346576b3428aa6f534edc8d1b472645b0fbf1d9a84d9
+Entropy.3 = e2ffcf413362ec0e5f64cf6559587c99e90ca53e744c7c76
+Nonce.3 = 29cf38eb43688c895473e6c4
+PersonalisationString.3 = c9e9b52552287e7cdf1fba96ac9a9f933ce83122de0c2550
+AdditionalInputA.3 = 43b4c0f0f1a951bba10a3168750ebc7ba9429ca1a0d9d833
+AdditionalInputB.3 = d006395f7d47c5c54e99f7edb31711e58554a872c9628996
+Output.3 = 876d500e593fe085aca5492adf113edf3decae539493913032eebcf8630b9be8ced544a6ddfdf2248d2fb5fbcae26ea1e799fac91d49e1bd4ce13006e9e899c24eba714a7cf4fc15fd8c7d7d12682e851b32b93e45a2db1c0a797b5f03b2f25ec1ab257a7857eba257712a298deb3363
+Entropy.4 = dde4c5e0494373fd847e1cf9ca64c1192156ff072a177e73
+Nonce.4 = 957462efa059df6f56477315
+PersonalisationString.4 = 2d2f37b8e2d2788f2ce3272410585fa4cfa5e9174355503b
+AdditionalInputA.4 = 0546cbc0b8a93030e812eda71d40d514134f3f81b9b63587
+AdditionalInputB.4 = 9c7d51a9f7e0798ab67cce06717eb324288596ec6d3b57fc
+Output.4 = 55280136c9399e638dae3183afdf03b6cb91f04c85f728e65d5d683e8d551fe55e47449e782a7b8d5c133abec46d9164ba30710457a0d38ddc937d92558f768f757f6512d08f198cd5f3ebcd2bae21f0173ecdf5c1a59e8b87e9af4fd93de0a548f7294558ade7acb748b95c24184ad4
+Entropy.5 = c4123044e021a669bc67f477ee9fb0fcf8f777fd0d8d3fc4
+Nonce.5 = c152d4000ad67858256e3cc3
+PersonalisationString.5 = bc7d7de5487fed58f18ba3196938db5b1612ff8d25b273e4
+AdditionalInputA.5 = 68ff8f956bdca81fea0fcb32e564fd4d964999caf1ffa54e
+AdditionalInputB.5 = 66a47d5368654fd60dba5c85862f3d348b5482bb251970a8
+Output.5 = 70f629cd970034597c24fe00162d5c3f2c5097c685e9883cd2cd83e7b3b883224507eeb12797a98e4b4509b1ddc203c99fcba4c5ee0a7d0440f3e8e55e81a842aff210b3c7c24a73dea10f1fc3d4fff16a49094fe919c9084d2f0af39f1f66533edf90eca7cea1ae8fd676b7df0761a8
+Entropy.6 = f25e241132fb3410c8ef3f656d71dd5a3e3d6c72f0e6e9be
+Nonce.6 = 8dcc1aaeef78bb09059b2c4c
+PersonalisationString.6 = e86fd52e459d5a0452ed4e21f2875ac3079856f1faf64354
+AdditionalInputA.6 = 51a0ab662e9f592b92885c3beedc9f06e59c4a338ee70bce
+AdditionalInputB.6 = 3f9f05cd66cc7e3d83cca473dd9b859dd24905e80833fcb4
+Output.6 = 7809f1fd836a54c202befc994e47f288d0be785d794d9e52a0f56ffda32d706fd8d2d28cfeaa89a44cf514951bfedc9adf6183d297bae0e609665e4cafb5e0ecfc45cf3a760b538290ff880c1d24f031382a42d3de9639a44fe8ed15c4b79de8512e2dcdd68c38e59b58207ec1b40384
+Entropy.7 = 643a0493bf6b7ae347c63a708d4de9ea7b9536c386de6c74
+Nonce.7 = 28966cf93eb8415ec6653bc8
+PersonalisationString.7 = 6929e98df76b8d767c414a7f06227a4e88003a1dcd2d4ed2
+AdditionalInputA.7 = b6b3aa1f95e9a2eaeb51ddafe4d303f5b0165933055c25fd
+AdditionalInputB.7 = 1beb02a0183407e74fa5166808beda53feafb1d26c8b9db9
+Output.7 = eab0ea389bc66aeb0f01302ee412a7c87f300c95e45919bb9565a49fc2ed5e65d73d9517c3b4e10a1305bfef65c0dcf0142bffa715f4e041b98fe055483567a7b2f8f0e63aeaa6ec267bf7a54884ff3ecd11be6873fba7bffb7df998e80235d2360f23110c82fbcca12e08e6330b9f64
+Entropy.8 = 2145e283d674ce8061e31925d888e26b4d8bb7ab6ec162dc
+Nonce.8 = d87f3bd6b88cb1469caa4369
+PersonalisationString.8 = f9912008933b4604ddaf05b277fee26c3f8ab1696a7e0b82
+AdditionalInputA.8 = e9aa10aadefed36f4d65a034af21ac15d8ea6768785e5e9c
+AdditionalInputB.8 = 2a61ffd60625f27ef7d03f755693cf152426cb35e9e2aa48
+Output.8 = aae61efe5c21ff8b25dc39bf885a845dc1f21ad37956d63b0f419b3f7692ca037297e4fa5e3e83f6c72bdddede3fdaa9b7560877fde867da51b3769f5ae58b84441eb739a6256b09366fc7eafd1b11a4078d028e7ac328cf7e11a76b9ca3286f4df5e9e23798f2347e201630899fefff
+Entropy.9 = 7483bb2c5e9df76ff37f2d8919ffb54aa6adc0b992f1b4cc
+Nonce.9 = bf5f3b883468d1c49733fda4
+PersonalisationString.9 = 47282993db33ca2ed7fad8236063aad6313b788a6d421f59
+AdditionalInputA.9 = de49cb2490296839bd41fddaf31f3388252d41cde88aa215
+AdditionalInputB.9 = dfb03b86d8a19a2064ea289993854045284d08ffa68e309c
+Output.9 = c170e7e13ffc5a410dff29a6c6ddca5652c0f0792c09b66eec1badd7f4df967d8b15c91becd7f414019df2ed564d075d581153a2c2e0bf1294fc65386e286318523efba8728fc1e4ae030b9b001aa2ddfc48a5a7756cd60bdaa55f3bfc7bdd86091c90065f2f65e34d00e9d40d6bd2a0
+Entropy.10 = 2f42a38e99885aa203085915c1be080a6cf6e0264b0f2354
+Nonce.10 = 977a232d6aabda96cc84a4b5
+PersonalisationString.10 = 2b6fcffe888671b20cd8e12be8737e5b963f9aee1ae26ed3
+AdditionalInputA.10 = 8d727475783d45e864ef8a53aa3687edff5030525ea75b47
+AdditionalInputB.10 = 640b60cab272ab414cddea8970a12a3e6cf6885cfef7a034
+Output.10 = 4d738163a479e71f7b45dd0c2ff08eaa35a10d7e7b07192e6b88915c2780efdb7d7ca9adc239b26ee24fcff3ab419ca26aaa575a65e334347f259a0c439ec15cf2702685a6b9933da6825b9c394eed70b24fd69644b642f1fc4a0c12bc390ebfe479bdd8ff7a4bf37b03b8d6f2ac7632
+Entropy.11 = de952b5578d813ed8acf967ba93f75098d423eee2473fe1a
+Nonce.11 = 71638a0d1e6fa1e51c56bdc9
+PersonalisationString.11 = 74dcd9ae2c668f0256a601186140446eb44673399be80771
+AdditionalInputA.11 = 1259e07bf0e060137b8ab17a244ba6a34df152d34c11a2d3
+AdditionalInputB.11 = 55804e4c7029832e097cf404d6cc8a87121750e28feba0f1
+Output.11 = bece47e28e5bffe94522bf00c8564c39b1cc03b6a86a48192e8dabb74d24d0c7b3dea71d104fc6a4c9ae48ccfeaea474f4dd639f6dee9c6297d54b80adbe9d564b2b3c38d970fc836a8a8376ba5b991613df421286bffc02eb315a1db3f37ab5dde6344e25a3acd1513c313cf5fc777f
+Entropy.12 = 625e312e5d83f306dd93c5722f5624c8b6f3e5c014dc77c0
+Nonce.12 = 54f58da4c06c6525cc18a12b
+PersonalisationString.12 = 3cba7790e518323c7c415c5ff8a5d1ed959d25936cb689ea
+AdditionalInputA.12 = 9499c0165da8ade78a8616f3eb815660bcca2480b766404d
+AdditionalInputB.12 = 5942ab9dbc8464e4928a006a09a5c03141fed3ea4e9c58bb
+Output.12 = f1870634d5bec5ebce2e0bd52c1616926c79c053271bd9ae34e3cb16fd0d598d96fe8b6daebeb7977fc0e1841b8e8bbdb0bf0a2ed4c78104d4d60a5d38c79e5801538c81af945c7c3b4d8813bf2744b688577140f66f8534ee537d2dd78ea005c688ed91fcdaa74cecdb062439121f64
+Entropy.13 = 02dfde97b93b6c5bbae81b95f0d0aafdd7c0dfcd88d7ea19
+Nonce.13 = 59135b7a1abe397da4f5cf4a
+PersonalisationString.13 = 54faac09060a302f27a4986cfc14e49de181c83d6f74cfae
+AdditionalInputA.13 = 74e500a48d1b58b0175f0b18339ea02b11686d2d13f01e22
+AdditionalInputB.13 = 6aa3c0391703a47029da8f41c77f8ee78afa0b847dd771ba
+Output.13 = 8b0cc9bbd6d9f6a1a1273772a2592692921b464aaa3414ac3505a6c28e3b007ae7875088038e2f1b2902450f246346ef7f097a6f44951a63c9ff5bd136ab5925e9d5ec690cb9e990e4b1b15d38f4f209d86e38f5dd798f716cfffb6bbdee4e541351f86c0c60418a3afffabffd7d432b
+Entropy.14 = 63b6771661ab689809ccc5e5591bd1743921d6ed1e1ddd01
+Nonce.14 = b634e989ec3bd5b59777b27d
+PersonalisationString.14 = 822de3952ff36cf2d4e4027c12c4f7cd665c08d929591b21
+AdditionalInputA.14 = e5c633ca50dcd83e0a34d397df53f6d7a6f7170a3f81f0e6
+AdditionalInputB.14 = 5f0beb5a2d2968e83ba87c92bfa420fd6e8526fbbfdea128
+Output.14 = 8bec11df1022aa50d95daeaf23d78d6ee45c43c5768b90181e106c7df8ff333d7cb87ca1ab83f8742370db1c8c0c0c22f141ff4de33ae8bdb14fee7e6c069819320629c66d94c7c97ff52930a3c1dcd501b60f0f84bda4720ee187ae858a6e068326eda5809716e366d1b608c61b0100
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a65ad0f345db4e0effe875c3a2e71f42c7129d620ff5c119a9ef55f05185e0fb
+Nonce.0 = 8581f9317517276e06e9607ddbcbcc2e
+Output.0 = d3e160c35b99f340b2628264d1751060e0045da383ff57a57d73a673d2b8d80daaf6a6c35a91bb4579d73fd0c8fed111b0391306828adfed528f018121b3febdc343e797b87dbb63db1333ded9d1ece177cfa6b71fe8ab1da46624ed6415e51ccde2c7ca86e283990eeaeb91120415528b2295910281b02dd431f4c9f70427df
+Entropy.1 = 72da39d053c6e052bde22d10ace144cc74a65fa22610140168c6e01a5a987918
+Nonce.1 = c015f7a717b530cd6b3db49fdf62c494
+Output.1 = 2daae5267ee22d8488ec158086bca87f1abffa5fe76dc532516e0f93dea5ad30f6d179e977e2bba496868e535c0489227af41ae73d61909b2dba2d94f80530dd87a9292080f6bef224d1292d70a5d35c5b5b94f7bf7c0f70f4cf1475c27de210c5173875f7bbe59f9adf07a721a914afe3ad1c8729947d514d2bb33f6c298b4c
+Entropy.2 = 9d98394dc924928124f67d496aff2744a2443512d21cd9b1e4741c0bae0fbaa9
+Nonce.2 = 9cd0880276376b7e1bc904605daf79a6
+Output.2 = 2067124679ffc89649ca204db906b8f3b570e809162e3fbfc84917f60655a907e79f6e01a57c968f366c30d741a6bee959ff7617c43d29a64c159431e23958a54b5aec1f39beb42ba717bc370588ef422d04649e56c2d076b18f3625a9ac3eeaab437942e77839baee63618dfa3fa09c3a2fa12a2a3c3fa4d355050b0015db01
+Entropy.3 = 123093771f61bfbf02672d2e51669095eac503f28260650acd956d66489cc2cf
+Nonce.3 = 6be500bed696f47639b637182f35fcdb
+Output.3 = 0d2880b8ea355466c4f2aae750203e497e8cc43c949e1fe53c51943b9e712e0e6c33c85edd3421e09d7d2d15a464f94127208fbfb4c36d986aacffffb6ee95533fcbe251a822bb2870dbcb3032acde54f7b1af63bf352a84f5b1655b756b56ec7f470b23f04224456c51db772c4d21b50bc8e6133f22c00644d840e34316210d
+Entropy.4 = 8dba318b8188294b3c67d7a623e8cebf89b4b9a2e87cd318869d074502abaae2
+Nonce.4 = 3bf3fbd4a3f814e4d63b670fb2770ede
+Output.4 = 3be2b8659f989e0c2ba62d019406c893a6f69135dafeb28684b6062ba16a245e8979808f4b42d3839d6f4b1e7b8c3aa2601fa2ac5c97bfb54b7abe172b4104a449c0f10525599d1d119d36993b1cac64a8807478477d492d614096d360a024063295fb05d4d686c95eb1debd7af9e5cdaf3960ee6a673c1e211cb3b7403b3f7a
+Entropy.5 = e003fe0ce5a6943e0b195bb7824ba31ba95ff93089a502367a0ebab5c819c93d
+Nonce.5 = 0941087af48ff89f0b5fcaf3b3585c12
+Output.5 = 85b83ab2a160aa214ecd024052352ca433b444788a968f83555c8c2d4bd9f4482d34d29fb544a00a764d21fb384e36e3799d94932bbfd2b7f0e34638febc7c649e8830f773689a0cc360629db21e604700689d5b9c4b5acb2f460a1e588a38203a5d412fd17c5b561ad843fd28f7dc17a3b3d8c18872cb790803d06374cb27a8
+Entropy.6 = 590cdd82ed0ff23e5b84861734ee42c53882e10b030c05057202f2c43fa9ec71
+Nonce.6 = 95dc6706b352dd1c7bde6fa11d6a9aca
+Output.6 = c664fa13b6274143ddf17368995d0b213cbda25fea4ba4373166d294d51541b8b1a1c6391480fa7f2a37e3a0f28d182ac5f2f1e8f956f776dbb7ba72a1913fa995daca4e4ce2031c1b4c64d3676b108d0c82772ab574a53d35c2a7fc2649836ab06f883aa5c044e1018cc348b45db431489f4fc16ff3bcd3c7374d24d2100f60
+Entropy.7 = a7166b37034444c20af70f98d18b570c289d6a6869aefddd2f2377b0c5c4e5f1
+Nonce.7 = d7b8d8758add3d0013ca46f9c992a15b
+Output.7 = 0ec5a634f1878d5dddcd5cef2d6318d25b289b91b8c80cceeaeb63c27e2c3e3a0f41e21e213fb87f0ed7cb70651f5e4a9ec5ce2743bc828a25f1de8adf5d2bedbe9e02c17dc0070bf4e603bdea8cda856d64ba0b4b4e72c8c7618a3b154e759cd19b048cbb44280a67cbc985739bd325f8a349b72b5803adffe968b88b294705
+Entropy.8 = b37f0d04e8fdb956114f529ed685d810b0d8a71f3fcaabbfc798dd9e63f91c11
+Nonce.8 = dde1f4938d25f6a9308934f0eabed3d3
+Output.8 = ca2e784e37d1d468f1699bd8fffc44907f2369bcef5b17f256e4d01054e231142bec9582d15c40d858bc912196bbbf844033893aad7c84905e172d5736949cc53199beb42eba5c990e8e0b76cc4558e755ee5abaf40fcfdc6c01a43a59ae7fffbb7e54100d9734b8db7f575ff0d919c92d8eacff73d9f5136fa86d1c9f0e04c7
+Entropy.9 = 55943fa5274526031f20a0b34822a5c74702ba93c87cf21ad6ec17b99236abb0
+Nonce.9 = 95a37931988963066826e5d91c006497
+Output.9 = 575d788ca6f6388514e17c1b859d98a97b00d3d71f7ef8e620e621e2f7de4f5dd84a9bc72df70f7e65c50b49c3554d6d6288c776e51eddec155573861f87c961c6b3a78247f78db02413f17902c20b8e510834816873bfb225b667ecfb0fc947e28f66080c6f88faa289abfe821e6ae4de6d7bc4a1c36e187ecdf550ad41b9d0
+Entropy.10 = 34c06a3af1031f2c6b15baeb68ebd42162571d867713b5f572afe92226229d4e
+Nonce.10 = c92092af647d3117533f0e894a3914e2
+Output.10 = 76a85071777d64c95de7f5b6da5d98678b07988ba91e561aa47fa08535ba4dc25d22fac26dc844660a125a6913ec648676d6da0f4d9af6385b0fde771dea9f6491568356bb176f02452f2a330174ba3c9baa8949678ca94aa1fcd4d3bc7037fd0cc7872c407c2bb79a57991c328145b9a6382fe062b1f95b21eb76467529b251
+Entropy.11 = b8b93e7f1ba7d16778c2f0534f085aed65af14704f810255c52a2c2f73e286dc
+Nonce.11 = 692ab38ad1ec0732ebf1531f127f1bf0
+Output.11 = 2c3c63ecddd73ddbf468a98a16f9d1ff2c9ff51598923406b040602d874ececfae4cb412a11df96a75015171f93517c0571aa595a6b64c504626c5298c70e929ada8b3be41de2534808df4f5338595b09ca6d81da66cf7a1568faee77f7f23f5e481e0ada60422530c028332765c295a07fce0107c77a5b4aa4b34801834d178
+Entropy.12 = 13a63ca5e762aaf2a821853b87bc608e0acd52bb8167a0cd5fdfa2156c941eef
+Nonce.12 = 73d2167bcf6f89e1a548ad80afb13de3
+Output.12 = bb68646451a871898c67a312f12f6217d6047551414dab2c64dd786d308d2cfdca2082f2d4d497e7a890da3c04a5613e9efacf01417ca01f303d3419871a97e3d7cf67b53391da651b2ddb5df2ec6448b8dce0ca3e5fe78fdf7d5955b6b205dafcbb74365e3493ae2b709c4638243f1d77f5397fe7ac78baaf337b23b5faa851
+Entropy.13 = af58361acbbd1e254ce98f463d1a47f64998e4264780ea84d03ee67fba6d0a62
+Nonce.13 = 1ffe801e5c71a15d4b80375c066ec61b
+Output.13 = 02a06a8cbdfc215476d526c91a6f2bff994e6d7d40c0fc73b3fb2723fc8c6c9e669af37df33ad62827ee9da452c9c7f46d24caa1f1ca99333e26ecb6470db9522c6fe319bdb1d34ed52037e4b5b2021d8f63f388b954c7f0342394196522bdef3251ffda5efa9f4f84dfbd3dad94ebf84e7fb988e6cb631de9ab73818e6fde3b
+Entropy.14 = 1194beb668839c47c73e7516f9ba09d23dec3553b3b5532f75b260106dcc2abf
+Nonce.14 = 3c8a77351e93065d584feeb08c8424a9
+Output.14 = fabd48bfcdd07968239fe538c2d8c9bde2e257b9b244078f39287c7ee90de167fff56a693c4e64f45081635511b5fd031c0270a31b4a014e44c0516a55ae72345aa11dffcda4ccf8cda50f6948d5ae425d8d53ad5c74cef1364277990156796e1c5dfa1ef095c0d8983477eb24241135760b02c86c86d4ec3627edac8c1a7e32
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 9b6d88373841458da926cc51f83922d363f0f80f90a2f5505c04033824ef7385
+Nonce.0 = 82b21ff47bb5e1b33288b22f3856886b
+AdditionalInputA.0 = 45d21d94ae1ea460857b50b5b240d943d42160e4c12377e0f817b79e92530bc1
+AdditionalInputB.0 = ea432e31cc94c20d66fb13d1ef42a5f62b024134fc635aa1279a6179204731ca
+Output.0 = 3d23d0fc03936766a1e1330393e8ff6211149f3d0758db038da1c833ca8e5265c2a9ff6c8e0836904c5fcd3e61b1c77d613dc6bdaf6437573a618e3e75e455338a7f9a41300da8fd2da408cf095ff7eae1686d60ce9c2f547d0515da91600201c8374b7af8a5f49a6381aaca394c65d451341a0ae1546cd57e0d9167a6b5397d
+Entropy.1 = 73d3fba3945f2b5fb98ff69c8a9317ae19c34cc3d6caa32d16fc42d22dd56f56
+Nonce.1 = cc1d30ff9e063e09ce58e69a35b3a656
+AdditionalInputA.1 = f4d5983da8fcfa37b7546773c7c3dd473471025dc1a0d310c18bbdf566346fdd
+AdditionalInputB.1 = f79e6a560e73e9d97ad169e06f8c551c44d1ce6f28cca44da8c085d15a0c5940
+Output.1 = 717b93461a40aa35a4aac5e76d5b5b8aa0df397dae71585b3c7cb4f089fa4a8ca95c54c040dfbcce268134f8ba7d1ce8ad21e074cf4884301fa1d54f81422ff4db0b23f87327b81d42f84458d85b29270af86959b57844eb9ee0686f429ab05be04ecb6aaae2d2d533253ee06cc76a07a503839fe28bd11c70a8075997ebf6be
+Entropy.2 = 3c898d0b88cfde1955ca1c25d3c876c834fbf4ecaad1cfe7f2072dde4184f34a
+Nonce.2 = cf65881c53ca2b79541dae65b15ed8b4
+AdditionalInputA.2 = f5b4624b38efe5115e54937dfe654e2ba7dfe64ec88a6442e53de50780dbad54
+AdditionalInputB.2 = 64e14c43a3b2f2bb638d80eb5e57e74b07bf5005a424e0c1b5eaad6a26e9cbe5
+Output.2 = b2a5c7478dd213b82eb05a0cee3dc6fe25c8d9bb64b90ceecc17c56b0cf8fd877d330e3091cc27e6baba7961251818446eb44eafab8c6532c5fdd3d0f0331baca3d81a6f20494e524e73b21dfab347bb54f2bd211621c88aa1813c26295a80443c87fd9476616af7ac8ca83738d95dba2ff421dcabb8b5c82f445812a545fba2
+Entropy.3 = 59e6b039e5174328c4ec09933e51bd01a1de95f01df8bbe73edce41b80396b78
+Nonce.3 = c6b56372644546b6731dcfc68858e4ff
+AdditionalInputA.3 = d87ebb74220a6f15e8afa0c4bcacf1af13da5f5ac17c896ecd9de40bf88a559e
+AdditionalInputB.3 = 2974f4ce59fe9e5d605bbea8b7ca203b25dde4b76e02bf93b7f06393d7f9138e
+Output.3 = 683bb8bf39ac5513ee5d83235f53dbae4ceb1c6bce7933ac3b5885939d6c42e9939808e27a492e842330620082c716f99c75f213b9edfa059f93fa952b3968db3765c5eb8e6762810cfa2b6c8a0039834b2326710fb5e458354fa6697574f611ad50c99c13acc906df2ebcc68a040b5b11ebaf95884ca6931d95ee3756ec888a
+Entropy.4 = 3ac6fc55ea67b9735f21f597d0b9b479ff0a77995f1d8a12c2876b09b322ee75
+Nonce.4 = 4275cfee69dd2f9c4be5099ff62969bd
+AdditionalInputA.4 = f44174a0bf525241218949269a3e6003911e421a35819a98b8bf5f93aa78a091
+AdditionalInputB.4 = 331fcc1af5ce6ae7996bb8b0731575ec8d97c5fab072bb4275f2faada32509d1
+Output.4 = dd5c54bfc1a3084bcdeca594caa44e9ed7551cba4e08c945ce4d1412eae73a7fd026e2efa96e91e59e3a0f0534bec554b5826e0d75b2959242f0d3d7564fe16c3600a129f74c450bfe39b0a0030ac07e8a99862dd74d4f84c2ac83d526b0617b24f16b2789c93f375e1e760e7f7b326d0ed00b5d57fe9a1b6be441e321d8d51e
+Entropy.5 = 49767ea772dccdb46873254add3edb457d96e8e372fad8a83ef0e30f59a9c8f8
+Nonce.5 = 3a136c8903397675c5356eb5cc5c97b0
+AdditionalInputA.5 = cfa444405db381a4700f61215d38bf55d1bf16539dbfc8f4d67d43173b1da349
+AdditionalInputB.5 = b994b14265ceb89f580d7ab9837a150f0a47b53676cc9a8ee7c4a047eed9adef
+Output.5 = acccdcf505120250e5c6015ae085b90a92e35b35df3a6751cbb8d5068a8338451fe2d9b28985c4a145038d7ee3f13130d7abf63b9b67b4ade6e67d0712baf53de2edb340b4ca252f9dbc0e59008f4110d6fd841350e2da413425c97129af504c1915f25ef0db36c38a97386fa5949a2464091bd3b6f7f229777c438df5028a02
+Entropy.6 = c9ac39cf41fbea7d7063efbfa8720a98172587f7c2a75716521e58ef7d77fc32
+Nonce.6 = 3565603453aa3efcec11da7b1de53cc8
+AdditionalInputA.6 = ea0defb7a4c21ce69cdeec640285671bba779036de382bc037de24130199acf4
+AdditionalInputB.6 = 2ab1926921f686b2fd33e9fc2cef4e5d030e051f50d4adb73c3c7be90929e76b
+Output.6 = fb6eec78eed8ac3c623c2b8015df988233fd436db6855e9d3e14910f0ed0cb6c7abd34b708ce39fd2bac9837a0aaf64460b93b12673e9dfa43a65f81982f78025268cad6ccab62a9e0edb7860b2ba6780c6b7292a279799d4f5d77c01e9e4804477746728e3d834e73f4c46fa0f010b0eae1a89d655c832159ab8b86781c5de5
+Entropy.7 = 827076c54b7740f92244501069c0e3bd133b70bf737617bae2b05c42436d1a1a
+Nonce.7 = db9ea9b3eb20d8914dc7a05c17273024
+AdditionalInputA.7 = aebf4c50f089479e01736fc06e6dc8cb66ca03dd53e3ccca07e6dc6b8d6a4800
+AdditionalInputB.7 = 404c9aac98518d4b39a75019f729d271d6a7664a42c225ab211f1452d7ffb058
+Output.7 = 42fd372e3b6d47c89077e42f4634eb20ce349a33d4bee3faf1ebc0ecaf3cd98b2a2d16c8c602ba973ebb7255098bf498b4e273b54d647a6ef474891a3306007c0deb4fe6cb2288d6a08be5ed1ad96a60cf4d5cdf8ad4c9a5f831eb9dc9e3299b96bfef8dff43d774738fe81f36b2b23bfe5cf103fe36d47b94f0d24ca913d989
+Entropy.8 = c8bfc49fed3468a1c4907275181b843d7b36598c547e7593e65472eecb610929
+Nonce.8 = 0c04252eeec241ac99ddb84a30187a24
+AdditionalInputA.8 = 9fdb8ca4a7325f7b0a172d47ea493e9c41e8264a2a62cf4f5ef432735aac2b55
+AdditionalInputB.8 = f6fe7359d6993c9e6842c17b2328f01e00ea5123f4746265c160c2ba4f43c78a
+Output.8 = a4d366f0ab0d4017feb83f3bf7cc26d4b0938aac3b099dbae8a3e2e0ba06e1f089fe1f7026ec9ea86ee6ac5dd893fe8a64c9cd0a683787884b2c26082dd47b31ac09dcadb22cf6ae8e707c54e38748ab157175f7b7ed69b5d924d5cad699e1367bbb32b6762badee2e5e509fd48f6a6081e4c43061c4c111ceba5afd470d4edc
+Entropy.9 = c7d5db3d2d84d4b464c9e98ad2171599247c157a4938fa2f8ce474e940bc0a7c
+Nonce.9 = fea36dddd102ab8472653ec0232c9b7b
+AdditionalInputA.9 = 9b52dbe64ac0a770bf69db0aa0ecad599990d28f085ab409f2252a55d3b01cb0
+AdditionalInputB.9 = a403456feeb69abf91cb7422054b167725490756ccebbdf499df535fbf886007
+Output.9 = 7f61226e0ff11733b84a62be5602601cbfa728f9840199fc0c0957e9d39b4133e6936b5f97b09250e9d686b17ad80f6366cd7dffe7644e29cdaf4d07d305cb25be2b17f5ef81c190fb812b93d2be0780de4d7838933c4365db9889b6c65d61f2eda63f30947e21c4d0c6130aadb903db65518e9df3f1ecd58b8ad50100742d64
+Entropy.10 = ac1b4db7dacb4f441af73eb4b6f05d774ae4fbc980450cf1fccbff7dda78e6f7
+Nonce.10 = 2f3686096587c177076939789da6a0a0
+AdditionalInputA.10 = 0b3212fa7b2128b730c119355e76e38520c64c3c552ace52c74bce27b7b75b19
+AdditionalInputB.10 = e0290804900ffebffbc625454127118d251b2e8055ad424a0889b8173ff94d5c
+Output.10 = f16ef06ff5227da000e02c01b94350d9201013ce11200d0e3f69934cdc963fa886360d4ac2031c5c00d2c701264c5a193329dd71cba66a650d9f51dc124c7c016a7e0506b04b15513b5e30656b2c0bc12a7b266317797b57bd4d82ebb56e949cff26d6ed5083e35490bd77c8c4d088ac155d7998fc749b2974f21788db6e62da
+Entropy.11 = aa166e22cc538ee40ec2b84b110fd3355983d640d0e9aabec7f8bc0e17228a57
+Nonce.11 = dbb258a9a489fead5ae91017f96a4ca4
+AdditionalInputA.11 = 06c47d8f46743aa345d83436fc2a9760f9dfa681d75908a3df1e15f40656b73f
+AdditionalInputB.11 = 717a311e8342eeea8b369b74e25b64075add804d81f448f13515a7a71f818152
+Output.11 = 6a935a251a50a58aabee538d29d8898de9cd18d7dd7fd2465f4ecda7a35cd94579d70ec0fd96f2ea9492030d9f74c0e2a9d29d947b9880f9823973905a79a030b6995bbf6c7a7505a36601b23d7504062e8a7821df01d092b2c93579dbc2579e6c64846d5b04b62414a59be3c0cf3caae40d3b847acff3b221580f60c7a7085d
+Entropy.12 = 13e1bd42516a7193c1cbed5c54fc643623dcc0b59a4fad9aeeeefba207c8a558
+Nonce.12 = c8c41ea0dd6580ce4a2372dffee3947d
+AdditionalInputA.12 = 3bd158cb5cd9435a711293ecf4e84649164b72322bf638e0749f8afbc119c552
+AdditionalInputB.12 = cbecb4c129c1cad1bb3e478f208034ba92b19ea35941c631b29b2e7b40d719c1
+Output.12 = 0ea605fd73ca3dda32efe99b30e184973203b7a28479ef5a2b1375ef39726ed6cb8a6887710cb4d541aaef9646aec911d16606d2fbb2fb4e6e8a215f6ca5d251254b4ee5742093a5578ac74c80682f2dedd53df2c067e41052a59f84740c3a13f10472bb41d638bbc509db62d143791c2b09ee9161ff1021eb6b90c0ecb426c2
+Entropy.13 = 2101469bd69c6d5bb217ceb621c03c25270d2ca7e8298560810a94893f5ba025
+Nonce.13 = 15bef90fd6ca8fa00a8ff1cb1e75f40c
+AdditionalInputA.13 = 6d464d49a2d426d9321fe48bac2774764dec2228cfa1e9f883af39e1f06a579e
+AdditionalInputB.13 = 1462a06143d7ad6bb0f9e1c1d7c00dcca212e4f5dabd795e57881b26b5cfaeec
+Output.13 = 50b5eaf20eb7520572b214f4ff875a602e5a343ce69d0d73fe9b35d5ed43b9b9290b5f8319d1f753855c7d4cf97605862f7e3d33ea1caeb974d93ddbc93eb28664014caa87454d5773fe525f97cd29bd92fd273fbc1449340ff3e5a0fa752ddb56cdeb5221f61b35ea45cf4bfc5308f774dbb87c992e3618d3342fd2364b4912
+Entropy.14 = 0238890e5ac9ff931824bd6d660dac9979b25df92702790308b124d40d60db64
+Nonce.14 = b9b5d120774c962d946bd57615c92700
+AdditionalInputA.14 = 626385595bef7103af0af700e1df048d7572286af709289b7894d2ab09ca8608
+AdditionalInputB.14 = bfe8946dbf27d3a2127ec600351c3920d2531eb9419408233e0a888059b5eb68
+Output.14 = ee6d07661828213e6453d94faaf76345c70949eca4965714c350313b0bcd8e079e6a07f8b2f7a91bcb7ef39a61568fd1c40ab78f154b3582f830095d571de29f81f9565e46b560d34c32bff55341a991f8e863bd9242c7cdd366be12538bb6922f1abfa19e7998aac61d465fc46538ee9142acc66786f4516ef4105fe1d80372
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = dfeabab904bfe93a37bb5b1ea4a696f881ab5ab4be87ffbf2d4e8cdfaabb37fd
+Nonce.0 = a2d458b475053a0346b57fc518849ba1
+PersonalisationString.0 = d15d5d9a4a3a41877b4ea98dbda5079ee393f6ab24105dbd70f5bf145772b15c
+Output.0 = 86d8c63ed4a8a19f3429b4dd57ede5ca573e861712e631400645ceee763c37cf950bdcc4d9c886ead3f0f1bf46a63bf22bd2eb39b2dac61d2e8c8f29e26045b3db56b2265adc8152d4f736c09ee90364a1e265eb5e77b0c5988c8fa52717fd33b6da760e78f2a7c27065227c47ac2134b95b7dadbf96e4ea2dad78ef200e174b
+Entropy.1 = 2a85a98bd0da83d6adab9fbb543115951c4d499f6a15f6e415508806290ded8d
+Nonce.1 = b96f96e1839ff788da84bf4428d91daa
+PersonalisationString.1 = a880ec98309815d2c6c468f13a1cbfce6a4014eb369953da576bcea41c663dbc
+Output.1 = 2d55dec9ed0547073d04fc280f92f04dd80032470a1b1c4befd997a11767da266cfe76466fbc6d824e838a98666c01b6e664e008106fd35d90e70d72a6a7e3bb9811125623c26dd1c8a87a39f334e3b8f86600777dcf3c3efac90fafe024fae984f96a01f635db5cab2aef4eacab55b89bef9868af51d816a55eaef91ed2dbe6
+Entropy.2 = c58e3fda017dc0757c452873657d6fae6b2af071e8bb2c0e7b55df8a9ec3dd29
+Nonce.2 = ba0686d6f607c6d2dda190cd01fe0b9f
+PersonalisationString.2 = c072a6bb045d682c498b88030f9a7fffae8912ee89c8fc3c2dd672df18e03452
+Output.2 = c6ababbe424a7a6a3f3a07a6cd566fe44280a1a15b2c8a5507ab0d9516b03ca7be90158531ca6c8ff4d6ca9589b8f62754e542a47f815fe869a255792b4bb6bacb1c50a06af035b61aca966cedf45f6b7982f4382532acf62defd68db41d507b6bc261efd9c00cd0991bdf589e1de807282468ff53288e33e48725830f4f0245
+Entropy.3 = 0cc162cd3088cf13d44691eb9cda01458fb16c34d3c320d04210dc29cf1b55de
+Nonce.3 = df875475252ad6d66afaa66748d776df
+PersonalisationString.3 = 326849e67e7439fd905a66f4fec74ebdd309a0a050a2a6d3d98f015a4aa876fa
+Output.3 = f52678b368fcab4ec1126a2c3d931ba8a1f4e90890ea6be5c3acea5234d6a71c4daa96d563a9be5044562821cf31dc962435aa8c0fb3c514590e7e293ff98a5bf9df0ec5f73bf36381e0e5df5fc842de44c7b5921023404280bc223aece659138917bcd9689bd3f2fb82cf47b1db49e91b5eaa0f10491aeab3ceac78f4a2f598
+Entropy.4 = bfc6258061ff1e94930600f5ef0dd56d6565b61b99add62ffcf87bcdbdd68691
+Nonce.4 = 80b249023eb6c58d62c509ac8332964f
+PersonalisationString.4 = bc6d7c7af785c30082de5f83c999a3e418c46140ad180b6a8146bb8787a7b729
+Output.4 = d39a223384d05574896716912a33d2e113fd737786e6f25f44dbbe2df0903bccf141aebe3eba4b326f10665c57c630bcbcdc1362b9a0f244ee788199dc6d9ff99eca9f8b7ef76c4655851ccc6d652ea46ed2c3148f9cbe9ac534d888ef648580ee97a5b09ef5c86fb1cb99a4734b8dce19d225efb078826bebcc5a1712fd7519
+Entropy.5 = 31a463f2ac5e9a3a69c1c2a29bd15ebc089dc364db3596a0db6d6c6f7a599055
+Nonce.5 = 342776716c675bd0473cd104ab978cdf
+PersonalisationString.5 = fd8d04c7f277caac8d96be3f9563333fb462997471f4e2ec16932d05439e92eb
+Output.5 = b5e5a7cebd1cc522b4d00c0aa7a1c6b4d13314e208f1eee85c7e1750f145181019c2f86d7b4ce995a14bdff40571edf6ede51c4bcfa88b6a717b5bdf7138c83ccb2aeaa8bf5375c483e04ea65c8340e347e63902ac986f6837b50d5afeb6f5ded5938ceb663259b66b6ae041dde1093b1282f834c1fc6e35a318832898fb8648
+Entropy.6 = 745b09d574d1c6369eb41e4c86f281895c3e6a035c35b31b0bce032010758f9d
+Nonce.6 = 36b69a1b6633b08495a4105872d64dd2
+PersonalisationString.6 = 94129bf095d49565414f83c1cc06e0109fa416511756d9096a95da27e00c8d68
+Output.6 = e273d0698423cb0064c7d19d3298feb9a15e7684c7e8b80f0bfb88459a02dd58ef2ee8f8bb0694cbc404c459ba22d10c855ba6a5f2377a4c6fc125dee75e8da4ecd291c1716c694191964060a9f7c0699a681bfd423858d67fdf49da3a44011cb92ac61a68db3718cc5eba2cd25ec5436201b4d6a0949d86ed94c985aaedba18
+Entropy.7 = 1a13e1268eb80323e04ec0a32c8ed99ae4e2f18f2eecf29149115839f2c369e0
+Nonce.7 = ebcb8216494217a7d32b43f9b866c13f
+PersonalisationString.7 = e1380276e67134a1b2100a2239512095f2866795566dea7418d2ff95ca35477b
+Output.7 = f2bb0cfcdc7af7dc06ef410677a84b61d8774a8c2575126302751a9207ae21a5c7d76eceb6b81a438bf4247541476c0f2405e2eef136eb970eed83ba0361c2446717449b9598f5a78dd82c444594e82c13f49f34d340d2e67253c199049e1c44ccc1cbdb76f2a458e9987a8bb033bf69642865dcaa39c384930942c911eb1e13
+Entropy.8 = c1efb4a10bda29d83e46ff69b5e59de6174c34334300c7038656242fe3f6ce90
+Nonce.8 = 0baf6e6e5f7279278634a18824c4a7df
+PersonalisationString.8 = 7c234f15165216df8b7b5dad39cb860366832243bbbfe5d7d501ce9966f4fc6e
+Output.8 = 0dfc48f2a0e0f9fe8bd2066cf32cfb1b62658909d940e1a16c492eddeecc9bac2e210328203741356434c553dfe84522f97cdb351c4d67d990a74654b223c2ccfbce95253223066b6f7561bb6a348a4050329c0c2aa601bfb8398a9578b87d686884feaa7cc4a01dbb646f788d8b071ad00440606182cb3ae65180ccb0cce4c4
+Entropy.9 = 59002231818991eb8b51e07e402e29b2c5c14d29ed37d315513ad9b61b53dea8
+Nonce.9 = ffeea2ee73f3aa4791c74b4148772855
+PersonalisationString.9 = 71344e7b94d373d5fee3e28f7a3f98770b85e81ab9090b7c35077efc3bb2e744
+Output.9 = 25ee5dafe8da2302ceb60c80e9c47bde1a45be8d4b190f24a5b0c9cece4041086e4c36e721d7c65f0cad043a0877e7de748336b2b68e833decd0279702aa45efa0b904efff95878055cbb583e21e55a1645b4936bfb5d6ef7508284e7e2ba99c87c70f1ba6094258e32b7c87f32c93210c6ab2b6874473cf7adcd34d94cdf8d9
+Entropy.10 = c018badb3ddf970d34d4f229c73c5053f6e74672afdd9066e0cbd7bc3307e1c9
+Nonce.10 = 56833cf4f4fcd47999dbec236a4d1382
+PersonalisationString.10 = fb553107a28b004be536e1e15911a383c20118d3986b25686190000c894280cb
+Output.10 = cc168e495fe82793e3fe9b4ef497f09bd04bc50519598c07c7db0450482fa32d0ffae15f76777d6c047182acebe89f79f86a9e1a90a1a8c372ed8bac7adf9b03277204abceb5f8b487c437b79664628028c169f367e3508ab212ba7215105c3e01063a3a0d0db7781331e6012b5b465a417b05ebb4f548da70f83797e3753739
+Entropy.11 = f8fd7b39f1be4c6c7494bfa8b0087c90ef11f2302d36d3464a63401c0c8b5c83
+Nonce.11 = 22dc2792fcbc2a7c40ccc655cbe0fa8d
+PersonalisationString.11 = 8fccc783a77a175c1225ff4ef6e0c2733cea2bd61856e000980ef9d895ef877f
+Output.11 = 7524774e098c3dfce4da6d839ad696fce268c24525f1439517633e82d52aae315373e36797e1e3b36adc67425e9aaf7cceb1b19e13484131cd0aff9335cf48d3068d205952fe231d6dbf74c7d97077453f7ab1447f24ce4ee2f61975c17bf671ecffbe2dea4505fec87021c5f56840271b87b90caf590c95983a8440de42d54d
+Entropy.12 = dde38ed265be4426d7fa447ee70b7c811bfd0e74a2618b60e36de8dea5aa4af6
+Nonce.12 = f8dba4c31093d140acf8ca561de80e90
+PersonalisationString.12 = 971af30ffeabc6cc3330cf52108b4a6d278af52dd4bdcbfbd99494f12dc6c9aa
+Output.12 = 42d3dcd59e4a09f0781b28268031ffddacd6de651a988949854bb0958d74a91f2ab07a3b4f29eec666b516f7ac8867ba2aa915c08a27af59875a5a6673559eca0bd40688bc9ef1731e36150de1c242cdca4d734357768b2377768a8a73a627f1c7422bc985c25a763205d65ff7c3afd9e51064ce9cfb25ef37aaf902b86e96b7
+Entropy.13 = 39edf813bd7a141659a5962720c0ea8d91edb00f54f05b433252a076acf1b5dc
+Nonce.13 = d74cba7ba9f7991c7f0c5aecc4788d49
+PersonalisationString.13 = 9b546dcfe080170378bc1e833674925d0da0be2e81656d11935f29edcdde9bee
+Output.13 = ad933ba15f8b440c0c08303389a3a11f3abed7dbff640f95e4c09fdb9dedb05606cba2e4ff419c0f38471307469be4814e341f74092cf7b314bc26177a97f1806d5e69570d7a789e8310f9b1775bec2562fbc2aacbe7d9ebaf8ba4e953998cbd9ebb9902ed98dd05381f44d9b08587be13c32b5dd23a6717102e3de450b82c99
+Entropy.14 = 17176a26d4364c55020dcdf2f82d792caa013d63e6ea4610ac123ce2fbe4c6ba
+Nonce.14 = de2186bafa82b0d08a0b8215e3424512
+PersonalisationString.14 = d96db27febe22db935b117dc3068374e39c5b2119b497e3c1d858ef649e01de5
+Output.14 = d04435a8aab397cfcee5151f7aa24298ffc6eee4f577cda42d5e154b8d28cb2f0f945f11a15ed5b76486c88f03081cfd262d94a8e0b332e3c9c608461dcc8eba20d7db209810d25c226fda9fe218022a9b2c96876cb16c06c0553dd84ce57e20338c3d3e03c59ce22e668e25c2c50d5cc9afab91f50a28680964c2dacb9d2fb3
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 68c43a008fe46a823d260a9d7fa388fb9e401f0197e7e758a744b4babb3f4651
+Nonce.0 = eb6825777856331884aaf3751b3e4006
+PersonalisationString.0 = 23ce0d32cbf2d26467f0d62acff1a3acbaa6d2746dc3ee7aa9d32c880788afc8
+AdditionalInputA.0 = a31b9f13b58d4fa2f8d8ac42b62a207ff647339a146bd8b268b33d4aff57adbd
+AdditionalInputB.0 = d34fc6504eca4b568193c75357b0d3821a48c77ff80d6dbd21c6cf045ff489cf
+Output.0 = abb4ecbacd4e8fa943c7221aed433861c3b203232657ec4c417d021f905d911db1058ff1e11e272232482ec96bae7cb4efc135502dbe41724077077f6de79b713670c385d04644e1281c3e582e0016255abbe5f8c06d0de57160559f0c08f7fb5be3563c649966190f8d3261364447537de2c7371c6e8c308933d27145bf90ab
+Entropy.1 = 69ed82a9c57bbfe51d2fcb7ad3507d96b4b92b50775127743374baf130df8edf
+Nonce.1 = 871d87bc96b2c3a7ed605e614e51291a
+PersonalisationString.1 = 74a6e008f927ee1d6e3c282087ddd7543147784be56da373a965b110c1dc777c
+AdditionalInputA.1 = 74d36ddae8d6865f6301fdf27d06296d94d166f0d272674e77c53d9e03e3a578
+AdditionalInputB.1 = f6b63df07c2604c58bcd3e6a9f9c3a2edb4787e58e005e2b747fa6f680cd9b21
+Output.1 = a571243111fe13e1a82412fb37a127a5ab77a19fae8faf1393f7538591b61babd46beab6efda4c906eef5fdee1c71036d567bd14b689210cc9926564d0f323e07fd1e875c28506eacac0cb792d2982fcaa9ac6957edc8865baec0e1687eca39ed88c80ab3a64e0cb0e4598dd7c6c6c261113c8cea947a60657a266bb2d7ff3c1
+Entropy.2 = f2e0bf10cb9e688ecc98aedac6a894b0e68808c1ab424f772b3c74e92401a36e
+Nonce.2 = c8f6ca4258729201fc9a7bcd8ccc6691
+PersonalisationString.2 = 43db83d12fb72b50d0f46aa8233aa7c15df0510dfafb7bbe9f05a6a6c8cf4d4a
+AdditionalInputA.2 = be5e3c8da18585d0924a74f548164147d6d1b08e97e395fb1857add58e23a417
+AdditionalInputB.2 = 8ee379a80c68e6d3b6b45958a6f95bd9956c7c07dc7a4c89a2379202999860c2
+Output.2 = 34dc1c639cb823a36011654fc313b0d2c241fb11901f36eb388794b8aec61b64bd53362ab85a041b6480118459a4474851929d42fa1f62c4ed8ca8c43faade7d0f4c4738fffcb265d8e362d8598366261894db33dbda5636192b374291f0026f93c2f8f025e9df69d68c54a31861b88351aa1e5420f1d5a799dfcbbb291174a6
+Entropy.3 = 7d84ff603d8a8bcffe884381b729ee0b434595794922511f77bbf5a843d98549
+Nonce.3 = 006e929a53ee5fc650e48568d484fb3a
+PersonalisationString.3 = 9fbfe65a75785f7d1284f84c565354b764a6148b156fa8a327be5398d9d0c974
+AdditionalInputA.3 = 612152ed93c4429d722a44d35a09ea8fc722c39b1e8af9081f37243f44303067
+AdditionalInputB.3 = 829fbd42761ddba851ba02f6abb7bf8878422993685dae5bfd00f2c2929fe227
+Output.3 = abd6c6c163946d7239d58af9629a830ac6ebd952d506c45fd75cff8515cda1781b58ef48d54e77c33c2d979f00553a3d0c2cb1801b4b1f6e777ba568fc4fab40a19c56b1dc77f34a032c8ccac896d99297a8bd1a93736428cac23292f2f759a9897aab5eaa233d961235f34b30e632303d502a63455de5448172c3d1cf252103
+Entropy.4 = dea24d19bd79e90cdc97d34952e6956ae37d5f7b3ec14821101e82e5ebdd4e07
+Nonce.4 = 95df8697d4f8755bf60c7af5d5ae4a86
+PersonalisationString.4 = 6dab966662ed761b37f15efe3387c62ace3446295322de138757c706ac058d95
+AdditionalInputA.4 = 6a4a6d21a4800d5464a04fa10da71aa0c02c52a88ac531ebbad9a4d4b5a63185
+AdditionalInputB.4 = b6b2fb182c43a903713b907cffca85af04abcfa35fb0fa4ab66852a02ea3c311
+Output.4 = 14b83b155ed9cfcfdcf18eb96761a205cc63308e2f0c068e63b066a8085bd6936cbb8d5ba14d8973061372a5909f46ecddcf91b913b07b232e29914fed4d77f706d805fc36fbc665135ab3586024ed9390290d8999898b98b2cc0aa488561b587948c0fba9683d910e27720acf5a2f45d47894dd7fb2e93e9b0db54da736f2a0
+Entropy.5 = 4444ff211d265c17282c9fc6f2764280b9b5b4ea1858130389c403336aadfe14
+Nonce.5 = 193a1cce77e54299a3e878033d088f0b
+PersonalisationString.5 = 3dab537625e6407e9951efc7b973b1ff59ec4aaeb0c6e2b824a29f7ae8f8bc75
+AdditionalInputA.5 = a0695732cd80a797f47e976c7cd4ce16d8b5251caa760c05b8d8af708af1a694
+AdditionalInputB.5 = 19f17b170270f3a4cabad1618f0450cacb42917cf4d1419217a6574ff186a8d2
+Output.5 = fbf2936012c8699bdfdb961e97b745303324bd5bf97f6c682aa2f4fea30771dc1bda81c3a2612ec58bc56198ad7f6a7304a41b94061c62fb3299321524ecf552fbf23efdeb6ec99301cf52b830f515e8f9227f91da667ce3238a694c8fe4def4bda51e996d57734f24a7c699c59ccae867482e49aeeca6255d72e7f09a12f8be
+Entropy.6 = aeba3ed174c711b74e0213f49c02c0d1510372ca489d8628e1a55c646b2ee14f
+Nonce.6 = 6c884ad3662aba1fd335e94d1ec7b979
+PersonalisationString.6 = f781d9d51f77dda624a76ea73c0f9e23b8be8db4455672e3c1baa07823c04ba1
+AdditionalInputA.6 = 5d97ace9bea303472991913238745401790df08a586865e83fccdf052ac5fae0
+AdditionalInputB.6 = 2ed263134f95d83c4e18088b4b1ec2cb785f563b075b6992fa7e143769a821ad
+Output.6 = 3d8476a01b2ecfd01dea948d6237e1fcd7c918369b541e96fbb23b0254cceaebd90a459ae5bbb74823aa2ee5a5e1748aae604d29cfb65631f5fd405dfd66bbf76a5759afc2b13c1ca878772c1681a561e5f5a5f70a87070b4411712b4983ca8d5a68a37400d33e98e7f65af28a92385239f04e8ce43c3ce65ad234d43e331254
+Entropy.7 = a83a6346373b2f957b40a7b39f061b02fb07fac1d8096fa2cff752dd7380656a
+Nonce.7 = 4ced16a1ffd25b6d940b2b66dba5d1ff
+PersonalisationString.7 = 94e53cd05418f8f9e0bd36462bd935e6a4330c6bdcaf4a63630186c8fe7a63ca
+AdditionalInputA.7 = 61fe3257d38cb5fc1cc6f8d0c19bee3fe04a141ccabdfb64f005ed396a41d682
+AdditionalInputB.7 = e5f28fc44f462d4e704d6c07f9c7724dba3ed3205affac7a98365af4241bbe57
+Output.7 = a5bcd00ea1370743c858cc94c9f00f65229852e48df544295b2eb1e41a721f932038755e4761defe890702569c2af3ed889024cb6bae8fc056e866b73462a09797b58bc2d94bee0f0a23114946057c831f6f3b860c6b150df8f730449fbfa5b5a783796dd907926227759a4161f96ec06bd3dcd29d19c184309c6a4ac29aad4f
+Entropy.8 = c213db4e1bcf76ca0065fa2ddb46ba1b6e57965f06be127b38d1c4b4a8d7f56a
+Nonce.8 = b0f4151fc917433839cd65b761a98c87
+PersonalisationString.8 = dbcc5c472c52a98aff1eae55916c2d6116eb3387fcdecf2cb14840601ca09f8c
+AdditionalInputA.8 = f8c66edf70a4e0255d6ffe97eaf58e58b8c49ca36541c6d6fbb6f5eb49ae0b2f
+AdditionalInputB.8 = d1f6dd9b2d8f831e8a16dddf1cbd16bf82aab1183d690ce74c5a2a167ee90c0c
+Output.8 = 0a1da67b92e1df34109c9177261434fb628d34c82019f62570818c842a1b120a738f645f06889073116fda460760174be18b66566db049a06489a52d1d51881808bd338af6610dc685ca1ffe6e867bfa921de3523d7671821b59c0ae62dea7d79f31dde0ffe7f33707b1fb11e336f25cf437597744a9ebfb6df5dd795f7397b7
+Entropy.9 = 21a044e313428b929b65a998f54620e6ca26015a6110c81f530b00af0fc95287
+Nonce.9 = aabadc55cda3dcbc11bf2abd873f07c9
+PersonalisationString.9 = b797d26284ed7c8ae00deb200933e45c398de596fdc74750cc4acfdb3f12bb0c
+AdditionalInputA.9 = 2cc66c78657bfee4972d3a305cb18e0b9bb88f9efbeb0dc9d3cf278af0a90403
+AdditionalInputB.9 = f09df1f2ab01d8ec547fc493bc5b6cd20ad4335881ff5f7fb4a5b2ab5697a946
+Output.9 = 453873968e964ac0822b3f64c5badab507d037b9a66fbd0bcf830518711d93a425aa618b25971888e693180edc41306ad88f9adb0a0cde019d5c2c04ffbfb33bc7b03bddc4ff6829232fc27308c3f543fa8ece805d30b0d7e629e7e19ba7d4aa4e6c2b8fb7190918239afc6d5de1b088aa4a9a4f74c3092bcff4174f5ed46b81
+Entropy.10 = 40555cabd1d8990d9e4f082bfd6b511a9b0eff43405e82e794e512f21e37ebcd
+Nonce.10 = 822d4f55c5a11496e882a104f0a405ab
+PersonalisationString.10 = c296d39ef5e09d2572522dfcb0f877bee7eb3d5144a761c597e9dd9036e5c27e
+AdditionalInputA.10 = c621a48d502af2d475757dfca86fbdf0cdd5285beb99bfa3c7ae5682ad595413
+AdditionalInputB.10 = 9eacd5708ccaa65b3e8f3cfdeb2ce7cdb5523545fffb2a373a760212c7d48b01
+Output.10 = 4530deb1de06b127aef059bec9445cd4399e8ff1919ec4b6e42b807d68441e7c7d5518e53ec0afe4cab6df6103b99a3a6bb2b23b40bf0d826cb99e4cdbadd3b8f94266753103572b192adc4e8fc64b41ed5e8c81a9c9d02b38e9bb42676c74e4c1b7dd403b67395187b5c0041355f168e8ad2c604fa5d195c5716be43bf69668
+Entropy.11 = 57f18d806b5fd33b3ed7184d3760f5e5a1157495fae2cd94832e1c17c1a1b249
+Nonce.11 = c45022394c32b2eb630a3ed07439e6d0
+PersonalisationString.11 = 523fb8c335fee7b217dd729ee37c3cf6db2e25354763ec6d49027c1f4a3f5de1
+AdditionalInputA.11 = 67450c806290fcfc0a54541c2467d3856fe819a86ad12c0750878228b3bbc8d0
+AdditionalInputB.11 = 1d28c847c3e68667394b9104ebe83eb840c07edeec94dbc485676bfd534af985
+Output.11 = 9f3fff4be1b601b4636a3d15bdba81088781fe389c49bfb33ddfada0acc11490d707513107353496f63250e5d288b7961ad1320fa8ceb0493c2839f987a7b1118e65a77e8a3813d2be19395951a24c7b6f74e8a82436814db0dfa02b22dfc7e7d4b4568f3faeba4dffef5055a6010c50a878fad0485956f350762f2897725eef
+Entropy.12 = 99325d0905ace7ad3ae6c8edb8a634f82ea240c5603207943d7b2b2a0c5e4b78
+Nonce.12 = d3093e34b298c00a24698b808cd0bd4c
+PersonalisationString.12 = d5292bda059675853fe99c506611f5cc6a050b2568f1d96b0878859a86b7e94a
+AdditionalInputA.12 = 6d270cffe63788a0d48007ff04420d09c630f5af89d4b9a50598b0909de06559
+AdditionalInputB.12 = 5994aa92dda4498cfc2382987bb4989b4e80b96882fd9c8a56f62a7ebe91968f
+Output.12 = ddb71dfb398a9a35310a993420d82e1dbcf8ff4a5dbadcd9f70aefaa0ae576ee5a383d7c8a118c1d89268a730684a87531da5d732730b3700764589450fb4b1ddaaa31537e47748e28c69bf53beb6b2e66cfc8af1636c439971299c6a771f4b126aa1508adf8e2f6e0abb24a01adf9b1ddce28e838f8e93c977003ccccea67d5
+Entropy.13 = 21f48333f24396f8e84a408fd3a0c396d1ddb6e99e29ddc000b3b8b9879bda19
+Nonce.13 = a86258317db03497bd588f6726611667
+PersonalisationString.13 = 634b5d47bd8ffd18a07ada3d63d9ed2713bf8d330e2c17879ba51c4862c46ad4
+AdditionalInputA.13 = efdd4c50cc73ff5553c9c385325c79e27ecbffc7f96ac69d5a75d772a0be0fe2
+AdditionalInputB.13 = ebe0256bc9c42914df8c2be8bcd43b7b7c10ac28f27fd89880600f7fadae88d5
+Output.13 = bdf7581e00f22d104602b2b61240de26b97af058cd143b6919c334f2d095e2a2aa6a75670a849a156f41f7791b70d762b57f921db42ac0527165f4569b7d17a9647c1123cd8edccfaede16a40f311fb421387ebfe9a5725ea82b2f1dcc88ef886b5db0c54ba6b2213671c69070a4dd6f9b27e4cc115cb7dee935f1f481b02f70
+Entropy.14 = 2576827a528dfd324252be2a1da179bd64f1779fe56713a45b576053351b96c0
+Nonce.14 = 31a04c75f5ea01779d6b96e461fef171
+PersonalisationString.14 = 98e288b1da6983d32a11d24fd4ac447cca253d069e2388d6894054274badb783
+AdditionalInputA.14 = 5d9446eff72d59529a90b498d8f40983b3b2904f63664fc0aa1de8700dcbf81f
+AdditionalInputB.14 = e19707aafa391e8622539d52a05d930292bd0f7c17825dbed5fb7a2f8734081b
+Output.14 = 6ce2ae37349cbef9ebd1f9b85485810a22d430d94abf66912dd7b6cc751400e777be2f1cebc19d65694a456b2c6429cefd95eb934030846708d50be3b274c2f7de299f3c311038491f271448c7d02ff51de048fa1184e8ee06b7b46a9f123daecbebae4a2183dc8eb6976abf0dae7cdbea6017cd1500f37dfadcce0c1956ea87
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 8bb315fb43de660049bfe98905376379a133e2936061a58538d7a3e9f9727fc5
+Nonce.0 = 1fef1c133df5640b0248b246ed9ddf49
+Output.0 = 705e1e0dda60268015dcead1a889728ec6d079582eec9acf79e6fad850c8965cd264d3061756d196236053ff561972e231681cf89e96a4e1f6b074f5c6f0cb2742d9b5d9db3c60657db17e15b86eae41626bfb62e0d58fdafbbb3e6563407eec8f5d166d15dce3eb0386444f16ef72678d549d3c96c33b0ee89802e50e3b93a1
+Entropy.1 = 3909ccca9c088242777e7360deb0ffd08305edd8f2cc975a5766b1cca4edd23b
+Nonce.1 = ff6de7667baee1fe86b57b0197257b7b
+Output.1 = 9310fce4493058822a5502fb3f6d62568cd003f485a95d07f02cdff93750265771c0d58abf73ce024c5f8dca7e8f37818d51c6c369d03e67850c4904c5788d7923978a47a4d395d76809924b8366d50eddc740159949269f1107d3295043a0f25ac0064bec05cd868b5cab3fa55cd1f3bddc37048d4a30b05ce598dd1f9f2c58
+Entropy.2 = ff4f40e7427160c8ff9f802ac43053be76bfe72ea3f918cb1ea160956c5ff42e
+Nonce.2 = 18eb15e50b958a52fe4fcd40f259586a
+Output.2 = 57942a072f37854c09e1cb83969397c896f716a3b593c24460fdd3677e06db3d6a6e08fb38b0e9eb7f7ec3cedf29d5ed91e261c9f7f41481eef75f1b005585909ed03e5f05a8af32de5a2378c32088df022d1cb3eff1ed0bd8b9572995760456f9ec1fc21e1690948e5fa9c6d6b95072ae8c8436a781e062856748da6fab714c
+Entropy.3 = 3c9c77a0983bf33660e14dc595a39a589cf9ee93330dbacc7f9b090e62e09099
+Nonce.3 = f52b0b2a38a6c4af309b604dbd08d822
+Output.3 = 24b811821fb55cf52f18dc812453e2379842e3674b59313b3cf1c9a397e79e0bfedc60db6d2ee97c83fb3370e6c6d399106f9897b542cddd06a9071aa2746c1442b6ec7762a7110c8c2ac7d3d94a1744a685c06826e2828705e139f78e6d23c3f7508f2ba98e2f47d47ab2e3b0d85a8a4d614899178643ecd0c669ffb39ceaf7
+Entropy.4 = 773d008ee1a1b0917fc3da03c76f6e52e74748d7869a22508e3b4cf50c0015c2
+Nonce.4 = 1502e2fc204e59de9ff39933c429d154
+Output.4 = f0ddc5760e73b7fd5bc560678b006711f25af13d7d05c1f2c7e1ca462b3418158582176b848b88781a583bc7ebde955bec90d9f3585f6e7e139b4c8a7113099be4ca75f51d4479e62f34a3eff1ccace97e7b3522b7956505c5e79ea18405aa1a129f5b5650cd6d9cc1604e854a6af770df3f984e47965119299173fa39f6163a
+Entropy.5 = 193da0a769483b58b66f059072fc8885d62635825c42216c034a8febf65001f1
+Nonce.5 = f597da9635ca4f395fb99477b5447cdc
+Output.5 = 52c2a48f73a509cf78e1fe5f2eab809140c5ebcd24a356e8a6d8756c8f169d817bf1e3344e2d79ca75843263455cd861a83866b64b1ecb2caa96b775bfc8102058dbe1986d1c1a96df3873da9a64b82515ba05751b32f08f19250ea9bc96d81e8d0ea0a6f2d36ea571724f1a7d30aa0fcb098e2b79b4556f7b68553ee6b6d282
+Entropy.6 = 8b0ab289c5d2e286f8ae42ef04a4198bb10c11031f9d3ce49e3ebbcd80dc0e7b
+Nonce.6 = 67dccac1f5e4e921c9fdf450f9cdd665
+Output.6 = 0f7fe7d5d75796201ab88997fe48de8d1e7f617c68b00f3f121d5ed76052818da98f34d3d0c91bfc317e7226619692d222b88757f5520da601d50729d1467ce6f74690bcc0efb48f3bb904ab4b6f5d8268370b614a7d60ce58897f0bce02210afbb57e5699c783a8725c1974ca165e70c46d6e56cdf2d1f3acaed83768ed9c39
+Entropy.7 = 870dc6dda31e7b6b6d8c42e4662d01a9b66db626a5fc00cc16d4b70e7dfcaee2
+Nonce.7 = 9e18a3c040e3f380f3f150b383721b03
+Output.7 = bdd6083abb14ae806c4dfb3c415d0e65b081281339708fa35bc08bd7788b39683ecc597bef877823fc32afc868dcc3ea72576de3cfacf5681ca450aa8ffe32f3dd5f16136c76ed05918b3588de8465ecfdb316c5bc3271a9868653f906b976c9558c2cea41d5fc06eae8ea11cd5d5129658a047852d4d4bd6a29b7d03a1d9a30
+Entropy.8 = 6314cbed7f60bcc38ba5c68ed66a6e540acc489c64a757e8ffec995a412f66e5
+Nonce.8 = ed635d56e7a0e6ec4ef471c0809676cf
+Output.8 = b009bb2c49f06a1fa12554e5dc8d27557658512b70f3a4774594dc71b3c6fefe9c4000c9a4d604cfd1bfe54446dcf59f416382568ca7e50b0e4c1a6942ad4fbc852c363f6c8f47e19e23edf6eda5fa2e9bf33f1df10d2549cc27dffdf93acf638662bdbcbe9d3586df89c22f91d63db4a216b28fa5218edbdc8f1301421901fe
+Entropy.9 = 3a7bb4e4ca42c61b49d4f4bf5fd2309f68864f663090c47ae014c38930c9dd1f
+Nonce.9 = 368e34c93980503730aa8fa8bcbc342e
+Output.9 = ffea14c68a3121760c7c978d2e9b7f7dd2432ebc78b8e82a8e542893f4be5f9069a30eb425d51798578ee8ffe41003039fd09b58d3669c1a0cb18ba6a7f939fd62007da8401dfbb46941965ab79ba93e0feef9de42bb658aa9b1f4c2a758ebe8da978fc35f905d4f9688ed6a03c70b1fb6d76a054aa5f56572e34104e676cb1d
+Entropy.10 = 4230265fef6d8cb9ed4472e8f1a1a58bb7af6d9348a728686244c362c48f60a6
+Nonce.10 = d709d06ae6a992c14b18353cb5ecfc45
+Output.10 = 4982902068289b598cfb64efa3f5f3f1edd06cb14c4d636c633af56b16f8fd1c4a285517c7d6b4e9a894ce9013a8c8f92fb951a335dd464200f0734968d286c8e111ae946067a7d840b98fc99ae17cd314bad538079898e55ec7d77a6d53c99b313745d16b7f60ba36eadde1c1bec39359e275d18a345d9562751991e28d34e0
+Entropy.11 = 1b1b02ab5ebe5500732893112e792c4633e61c5e20d8f437394b8e82c35e0ce5
+Nonce.11 = cc7579c3164a92f56ad93bd6091e644b
+Output.11 = 392ea89da64cb6effde107c6ad12be67189979a145d03bca6ad7dd23b8dc48837ba3719a297141839295e3d41bf6d5eeb54da403e1451d402497649a9a98d66b5fbc0e7e38d9304b5e1ccc1204e465ab0634e1f4a5b3a6b11794df8e96c4c260acee65379e73644845c150679fa178ff8fe5557562ee2a94cd0fbf965cdd0995
+Entropy.12 = eceea48f2056736e94b43bff65c091b119d9c2b34a78e8bf4f3de9a44cd6bdaa
+Nonce.12 = 554ae80ed94a3294851b89fc20e73ba9
+Output.12 = 490b1f1e861d4eb98c282edcc6bcc7b0eeaa8892c6c44ecee0dd3fb5bc0ce0e4b8b24a927e256f8fa092720009c90ff2d2b684eaada7316d0b4ef83cdb8e22a3725796a2b4f557e9db98c2f0b29e30315241dd68d3fe889358c427c510871c797cc263f18b1b931c03a2af2ad315603d2c53b3d62ce0e1e1b4bcd6cea2655a10
+Entropy.13 = e610dafc442915f0c59bc9b5f6a05e297b67d6ae410cff56c4a39a8f2517299c
+Nonce.13 = 44a14f823bfdfab85bcc4a941cf9a4ec
+Output.13 = 65b3fbb62ff2ccf8a65ed9881e07f1d2d0c734aca7f203ee301bfccc4c4669ef4bf2b8491289457ea618196c2465a2310baf410835f94979dbbb93a42040f36ed162777664b475d6df38b00be98110002d74614322586a69112bfbbf52f31aaa417e5e729052db13e3328d97ab1bf2fca3bcfef581c55692fa17e0090d7e1a07
+Entropy.14 = a7a1dbf7f828555610197e71e0ad563b8691589c5289ced03e9ef83b6f9ff938
+Nonce.14 = 4274788c5d80e26ec1ac3a57b9c7c0df
+Output.14 = 5a907a26c1ef588219d4c69fcf4c5c283ab148a77588a40b323bd24e6dfb29551c4b6116c4d61349f5f8bd9ed497f38b239c37283902beb3c9700c768fa289ee4573f92316efb860a5ca4267b328f03c13138b774b4b9f7516003a699f7a0854a0efb045a5932753a771c2cc6119202b33336f10edb715bcce1d20ff503dda01
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 63aeb1416480639ecd17cb6ceec14cc78b3660b48e028bef7d1bf2941ba088d1
+Nonce.0 = 068cb2383db7997a69f5e0b30a09e402
+AdditionalInputA.0 = 35ad8aaa5845bfa226659044ca9abf6cbe02abf03df7b897f4ecfe70821e66e6
+AdditionalInputB.0 = 4d4065a69b30be27febcc97fd5299bbbab34fbe48e1cf392561c0a3ef9852f1f
+Output.0 = bd325ad3673c1d9530692c4454e0f66ff6a767f7b198e17c6f00e92a073e023745fe9cad7d7eb3bda115ff7c11517475e933f8dba00282c3b0d62a3831033bfc123f8370d21b08ea21e33566ab3e6f3f0111fdb9b4db8f7a0617fa7c803e776d97830c911f3483c2c55700d1f71c21e03f563394208b2a03508c5e9103c93c4e
+Entropy.1 = 734ceb9a6f45a559c05cc1ab095c4f561fb2ad0ce25999016c5e8874dbad72ab
+Nonce.1 = 647b6d99ede2c06b3a1a1c8ea280856b
+AdditionalInputA.1 = e45a22c77574ec407f3dcc31b60124b87cc3b78407a0c0dd25f25c5387e9deb1
+AdditionalInputB.1 = 6603bbe82700d219137f64a6ccf165f169dfd6508a33cd23a08201cfcf20ade8
+Output.1 = 634ffb5ad2fabd33da3910b8b7a748cfbd91c29704fae6bd85bc4d73f01165c1af97393257efe33d326673a26a7a448e725b4ec17ea63b260df6968e6431c98e3a72df8b1e64eed0ae04adcd8c4d817d2ad363ad47407891e962ed2fc0a4f3aab7c222197859a791c3d3453e5884563cf74b771e8cab0560c88de34179989e5c
+Entropy.2 = e2e0e3cb832263fa1bb2e95dc7bcd371dc6f2aab8abc493c95f402ce2cee6656
+Nonce.2 = 60e767ea37623a30133c0ce7549e6d12
+AdditionalInputA.2 = f641397d38cde556f4dc902707ab44c65b4c0590c1367adee548ab2d87c45865
+AdditionalInputB.2 = 6d2e2b9496d966f7fcba0cec8475c1dd58379cadb326e84c2925cb536ca543e2
+Output.2 = d58ed53651d081c8c56ddfd6265956e954af3a43c7d0c17926335dff7a0ceec231a5a9251ec7ace919f9d5584439b007424d2adf67664582722dcdec60ab67601f780a1cc4952ecf00477cd93eaddf94bddd0feb3f60786d2e4eeaeec91975897b0517d78a1497ad614abc0bf88b3e856b4e07fba8de5871f79f8a212c3c911c
+Entropy.3 = 3e4312079b57f5161781ed08a5d7e5a373b89c848807fcddd95391ed67c332bb
+Nonce.3 = 823bd17bc73e233cbd61bd06f27c850e
+AdditionalInputA.3 = bd001f6a383003d56ae28def7dc9b6d9f0a0636f3f0044ff6cd31e4568cb8d40
+AdditionalInputB.3 = 92f25bdfbb8dbee577000edf6af0e107182c815aeb95ba1d76e87ee57130a908
+Output.3 = e4f46e23f87c1160e066bf68968856b7da50029445ec56b6057d2fb99ea58d8a13129c54f45c60b3e4390e52cdc301b4fde169971034f56b4ceae8d4b4f32f5a45e75b7650cf2f53118ab0494720320fa0a39af585523feb45019890fa30507806b868f04f3be1722c44b0d8a5b1de558bec795de71a8534a84f0592ef68d7b0
+Entropy.4 = 5b59736e2ff2fecac4e3fe6ca38c1d156cdb1e436b684eff3b18ee3adf6b1863
+Nonce.4 = 0ea312ff6e274cfa87eb65550342ccca
+AdditionalInputA.4 = 61dad6d9c004dcabe17f434ea6dcb2ee9042b3f7a2418016a6eeffb2742a170b
+AdditionalInputB.4 = 633ed383277b3fd3a87a33229b7b8b6d9f309e2812e92cd21ef406e000bb7597
+Output.4 = 8554e104170c5a24b0c6befbda4abd4832f449433dbc597fbea375d887aa968cd44611103842c84f427878bda0aa13b0802a6b062d3900c7a1e56c113fd0d7627036708436191bcbcae76bea72fba68d912a5e365fe00a7d0a49f3fa282f12da7534233a25eb148ef270cb8a6256090a633d90e90739ba81f21dbe513e0eab45
+Entropy.5 = bef87a4bca98a155ccb67988ebc885aa56489fd074d13f517a17cecd8cb04cb7
+Nonce.5 = 3f81624d79b7f0cc4b69c5fd3663474d
+AdditionalInputA.5 = 06f0ef0c8635be4d159a17415699d36ff082a9c469ed566241bb2aa5de01ac8d
+AdditionalInputB.5 = 4650561c2130ade440e3ac3301b295ee58e89501e19989a6dd76ce4951d1b1f7
+Output.5 = 4b13b45a6b3bbb76724f8b04495e96a07fd31b9815f85d25666d9f8200fecc29a5e63c58af7e157a1eaf31537eb043de493487299711ffe5ceb26b2e3d76dded3f71240b36068ff7513ab39989f7bdf04b0aa589a91bb62b0acf240e92c2a680b25b207bed4ac1f348a893e262bcf469b01c72436e72394a1ba809638573d5a8
+Entropy.6 = 159e8f04a0b5bfc54b95dc2dc95d06fb329db7ff1a7263e549796ccd5534b2c2
+Nonce.6 = 515911b912cbbbf8f152e9625b49061c
+AdditionalInputA.6 = cb4045faaa85bd0981c5c1a4f51163d5523efe3e1e6e821e82a71eef515f80e1
+AdditionalInputB.6 = 3ce43a880c49bae46419212dea9e0c807b9b8ca216643d8899aee8a850541c7c
+Output.6 = 37a3cd5b60ea5bcdb39ef1f3b4b595ec0c609aad55e27053dee44aea6ae42f1ee5de247eb0324307848d988f6d042b9e7dce2db732be28b172202e82303543f52698cd164b2314a0dfdf032695b8dd98c83532ee104749308506ee8938a0fb316cbaf2c337fa581c951558143caa9ebf094d973c7ea774e11e8bda9a36e749e5
+Entropy.7 = 5457daab7b5a0254a1700359e45b093972242c967c76696b2019df59b5b209b4
+Nonce.7 = 3e579bec2c1b263d010e51b7a92c3079
+AdditionalInputA.7 = e0cbdbb2fa88963ce02fc8d585a08926c7bebc803f1ceec4fc1604ce01bbf530
+AdditionalInputB.7 = 1920881620aa877047bba5850dce86a17c4b0ab2dee5904922b4ac5ba4973e87
+Output.7 = ba062bebc757ddb62c5f21d262c44417ec834dba37e81f33ec755de184f73d7f922c6ab378cff9ea412c5c0bd003ccc280299860bff326d2d47996914d1751b4379a43b6891ca578034d5ce5c726f2a6bb6401de67b26f465ef8a9de0c15d5d861742e48bbcd22df2bce14c6b831040633dc8437b9b6a317431ff412eb689483
+Entropy.8 = 2f53d66ab1acf5f53d845c0adce99707e2f9819847ce07bc303dfa5eddc83de0
+Nonce.8 = 4a512b024a947cd5b5ec13da59f08881
+AdditionalInputA.8 = 47030202d5078bc2e99a8c48ca835bb41393db3cca68310f58d63c8e26beb5e3
+AdditionalInputB.8 = 2774c7b6e2ae784fbe756e067d59d5a493d9983a10704b6a6ab938b6d4a2e390
+Output.8 = e2d647dcf1af9bcb59a3dc9a9b94c7b0f1d7635db0af00263b2b545359ec445d1c6a1d5e968b7be9cbdfada681bfc442f65392805949b49d8b9d1d90f710abd15891e2f9863569f7654d9205466accad45dbb2a08fbd9e449bb1ce3ecf3fb214106e651582a5d7ff80fa9fe4635b79ce6b33688fe26f161d2441ae0a41996fd3
+Entropy.9 = ffff1bcf83a3e162ad10ac026caeedbf5438db6932bc0d0aea62c919cb98d289
+Nonce.9 = 2d54df18a916e1b118a8f0da749b4c42
+AdditionalInputA.9 = d26a700d5ccc8618504f59c0bd100515f6036fb34926a5d0f0c226f2cf9795ba
+AdditionalInputB.9 = 787e1f5b8ddd6bed24dbb7508ec3a92110eaad45d883e546ee46c62bc0cf9888
+Output.9 = 9d941f943a3aa0ccc342b134e6f5914c76b2b21a589280639cae9bd52c7919120d9c74b5df9b99bebbe63ff8b0d6b20664c3eb00523dacb90968bbf0bc5b6a9ed53e024a97c63499a7a73c1b509975beda5a3528663071d6c97a45ef796f187aa8d83c41ce7e5d687a25ced9818d31b2103a72bf6404eea253b2342ccd193218
+Entropy.10 = 524650bcf012792ca955ec312001ff8d453af7e556984bcc44707d5577641b0d
+Nonce.10 = 30f93f55a89806747171bfb2d4da347b
+AdditionalInputA.10 = ae68e720e75337ef6b2eb086f3dde3dabb854992091d44d2e5f414cba6d8b0b3
+AdditionalInputB.10 = 0e0f9371007aee353a9f2324b43578fdc4324ad0241b63400e03460d66eb0cdc
+Output.10 = 862a9f86597a1a930f317de9415088087763de830009b4b30695aa58b04b46db17c1cc816ef5c70437e0d925a52139ea483cd7d0b2119454be5abeac9565150858ac5504a9d3b49ad7085f720944a704f000e26bffbd7ac09b15e9aa2eecf56003d452bf832c032e77584d99043322016e2f4fd9e3db61a74318821ead14a132
+Entropy.11 = 4d0f84bfc6f3c7a8ac3dbe37f599309f6df1380cfd70b6accfd28290142a8a6c
+Nonce.11 = c335a2858b0db8d12c2545234180c0da
+AdditionalInputA.11 = 324a329c2df9cc02117f05cfd8e8943300fdbbccff400a2b8acbc3565232ae12
+AdditionalInputB.11 = 937e2c9c139d9a79a3e1b573ecdcb51ccba3ecf1ca56047067646a19345ed883
+Output.11 = 79e2595ed3b0e146e7dc750e4b8c4747560b715708a7d4d254f92cff581e70a5a9caa897b9317357e27ed7d4901a3974951d88024560e1c2f2bcb8a3b407ebdae8d149afd4958b941eaf1a0456856c2fd7cdd89d4e556633dab095e089441dc46cf0df676908b04fbc450957fb91e2b005fd3529a2b82cacbbf129e7ca573564
+Entropy.12 = a2aea6ee39285bd1aa410c1a4d019cbb91e408c5c597c0de88f780b543660069
+Nonce.12 = 8f77489159b279b406c5a3ce7b0cccfd
+AdditionalInputA.12 = e1342c6aa402b4f1d3ae7e51a86ed3ca72738e1ff6874ca58548162023096303
+AdditionalInputB.12 = d77efe99511bb301506a34e69bf726eba4f1aaddbf87d1af2fc55ebac73f45f9
+Output.12 = 238dee65f3e1a111a5b9030d1fbf2b900b632d2e3e28684a1352978b2939bf863d2e5091dbced8297234bb8f49e59e34b3bf38b4f3f2b2f61bb5989bc1e0f425857d684a843286fc8c302976f2f237c01c3794a10ef786fb7649f0a0aab523cfdb8de755ab4f4a397ce541cd718dd3fe10db428b00d3acdcb80b0c1cb17c7c88
+Entropy.13 = a18c44693042f527c948315e2be58edf552727cf44aefe76debef2c83d19950e
+Nonce.13 = 4c6c6903a482457a7bb5be08a4727de9
+AdditionalInputA.13 = 1886624786e1a2cde983ec9286f0f3999b55d778257436393d19cc25abbd14ed
+AdditionalInputB.13 = ff4c7080453d152a36b1284a8eb1854dff5f29f277f36a9ea8169b0282091a65
+Output.13 = c00f3b2d3e62b2f7fb082ea4e074980931a4abd84970842474da319b496aa2f6568b4bf1616ceab1de1469434b528f2d621a29052dcb92e9537ea266a9a41c52141ca6a16734f592cf99dd4ff652a8f0800927b9632d01bda8e02544ed978ff6dac3034116d787e54bd58a9a653459b14d9c27966886097fe925141f3b188f4f
+Entropy.14 = 23e264d1c47ef7670a3f95f4b17d8ffa06fdfaafdbc5190e75c55debd6cf805a
+Nonce.14 = 71fcf2bad21c4f472d1d50521372de2a
+AdditionalInputA.14 = de1bbca12357943b4489cc7209b3f063b51b91acc168ec5e0ad88048b65d1b06
+AdditionalInputB.14 = 6ddd9aba4f100ef902ba50adee53ef44a4f45564c13e774e69557e36a357e7cf
+Output.14 = 544ec80a966644454886fb97a0f05eb6a4a25fcbce795b5e5b27ee06ba14b7de18dbf54f80a670b87c76c336ac9af16c8958ad6c1bde9a97aa4c1ab5823d24a53c64f6766ce6eb9b7085cf7282499c37fc1e2e825f53bc357bf36d5901e0ae93cd3bd821fa18b5aa17548560f7ad6ef38124814fccf9b2b89de61cfc27c7269b
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a4857cf33fd496f9e7171d3ad64b6a35c5ae44af7b87912bc1fd540722796137
+Nonce.0 = 1a9c73962f2f3f2d4790a58eaa3d9096
+PersonalisationString.0 = 5e3677e8e9a43ac8181622b42e91c448280896f55cef2a9734e5e5527bc530ae
+Output.0 = fa82f560fb8bb4ba24ec563fb03be58792bf3a11c9c60c025fad0aa4dfa68fbf318ab0b6594be18b07bce52d227f50a44a650ac4df479b969d5b46ae60a66421dbf3ebfef0737c71b5d76b7b616bb9764b2edbd87ef52a5185fcda3c6a6dbc4270bd61c1bd50e606556343017001a3dde98a265f36ac3d124cb18a5dcfb37940
+Entropy.1 = 983d05878c13076379d2d4a0b5712256a7ee1c9fc9865d0023fbaac065077929
+Nonce.1 = 68379638e3ad024573e711065178ca7c
+PersonalisationString.1 = b4c34d7bb19f2b4e7d1a3c33f3f036ec27a874f0d24fe4f2c33dbd3a85d5596f
+Output.1 = 5e258d2f9270c6daa80434c98cd1f05dc26330b8dfa6d53d490bad58a96ada5b8098bdae39f4d97fce8f561a242358b832df3d2a352fc5ede95f6d041bb2f8ecc00d62bd358d3df2d8fa6e2841ed515b96c013d3fb321aba54c497c29422cb54bcbc09bb8906a03d63bfb9784c0fd04072d895c019c1d69ea5346d754601d069
+Entropy.2 = 43dc8c77c621519733c71184fdbe44c7ebd4bce8786c8f4cea5844c29610231f
+Nonce.2 = c606c535e068a6a79eb87e25c6efe068
+PersonalisationString.2 = bb15d65d180c4b5de14457bd6454b31c8a15047460b153976eaf65104c9b1e04
+Output.2 = bd4a55395f1f8ad37a7a7f3476b5ddb569ad42ed57d678f1e8af97905e4d151d3511d2db6b8bcf313bb58675768f472ae96171a0c362c4b2e8548cb3b4c9129721e2c3e0ec8d576935f150fd8c79eeea7d6cb25b54c86a975546edb32df6198b2d47138943f0379391ce8b5c7a20faf0d268f21652d25187afc04763156feaf4
+Entropy.3 = 56754c7b7825c717212481de3dbe1f11c71332eb01f395ed8d2dfc681ac95181
+Nonce.3 = 102bb5e8ecfb2cbabd0ccde543763853
+PersonalisationString.3 = 0cbed991d2abb392cfdb311ea5ec9c9d01a48839e5b216e58c3a67b749220982
+Output.3 = b4e382281c2f937287e622f27ed8de73cb67d99227265c191ab488573ebdd779e8466e9cbf26be26fc838c3398ca8fed126f755398b93303dbaee84ddb6746ef1cc1d8c75a38ee2e43927d9e295ab3dbf070528d17642b4c9fa439a814b41d122591156715cd0fe54e9bbfe03ef3974965415976f20a345f456e14dae8848b84
+Entropy.4 = bed1f25fc400357a1d25c2a54d65b9d128f3ea5c63cf46fa4b0328ec31a4a8ef
+Nonce.4 = 1462b598c9415f991e755d586929e325
+PersonalisationString.4 = 4f6b1ec3f487f7341088abec343c51aef8cfb60d8d46a0e9c68d187da02f14d1
+Output.4 = 0f9162d9f5321552f080f9453203c3d589554c6232f04de0e3868a2adc2d288b4f4f03d118e9f7fdfc96271f77894eed97aaccb613da415206bf2ef4036ab882964095eb1e246e78890651659a5104753652deb54e822543e5c4c6bdd8164a49d5478436f1e74677d5112bdfd59dfabe21a8d973368f738c512aa66d0f87071a
+Entropy.5 = 1dfbe58785ee77f0ef206a25466cb27834f314ddec65c1eafe19aee1bd86c623
+Nonce.5 = ac5d723fa5faf45b114cbdfc42e2211f
+PersonalisationString.5 = 40e715a969293a45afb1eeeab4e8b11d5c043cf58a8a596e1fdb626d7f8fc008
+Output.5 = bd6bc74b7a0fd49fec46cb4fcd5940a77a1ec93705ce356ffdfa40225fc728f3cc8e3918dee65fd21dc94b6926407e7903a17856ef1bd761e6d089988ea5b0a449c09ee0de8fd4489dda793b96639bb35188029a79e8c8b337c0c40c59122c47313903068da8b77b21318b59bdb34310d7c16ec91cf46a69a567099d29afabe5
+Entropy.6 = 7edbfcc031bb2f1b6915c4a7829959547410c2d9ae72bcd807905c7cf6ef3bad
+Nonce.6 = ebde9ff05b417e6285b88eb4714ed97b
+PersonalisationString.6 = 3514eefe53e06b85cfc7c9e56ac4aad000000557420b79c5c17f54498244af86
+Output.6 = c8e418b8ade328deeda4e595662f4f18edab051f799df6d48641357035cf90147b2b63b452f6531649cc80b27da7d1b25a89979498232cb1695cd6e563c50cc9b7895e8bfbef2d6a098670d630c8b96d7e29e376e1723a617436a65cf9ed730448c251438025964a01dbf6221b9aaa1327add8f4544e6fa15f7f410def8861f3
+Entropy.7 = 1909e66624d0581dcb233e385509d6be6ad3babef2383869df05b8d4ea6470e0
+Nonce.7 = 901d6f4340b6a62c9cd6e4416579b1e8
+PersonalisationString.7 = 87e0df2f0382030b9c075a7c9904cd2373c23d9b91e1a3fbcea1390fb2d3b94c
+Output.7 = 4cd933385c35765ae534e6856b27db712bbd3929bcbbf1a178279712e495dfd0dce8badd62e2e29ac17f00b2bd2319aa9e46f43b819c48af364011543bdb3f96b19687dbe5ad3afd04ccdc888089c3ef2e5b7ee9e17520e36409b24007633a09f9cc1cb34ba5a403db103e987148c24f6d62629ba82dd8ed5ecd189a238e09a5
+Entropy.8 = a5f94511ff07b6bbc622f0f3fa2c6b60f285b51122f8bb314be2af0c947b54c6
+Nonce.8 = b05459791bba70d4889369f43567911f
+PersonalisationString.8 = aa196426a45d6f5aebc5792876e55beeb2e54d2a828952b5ce925a3b6d0c8cd7
+Output.8 = 874e0417b59921fa32983c7bc3bf68a1efa3d954d1fe479bffc35f57e919581dce3d219707fd7a5e5cd236997cc57fce7d305172864228c23ac8873a2b282ac90d2c0f32bb900c047370f086ed06d3cf0469c3b82d37dcfbda0b1beeaa9c62329555ee9a5367221ecdcad623a778055e5c0a1ebb1d8b454346bfd1a78572cf17
+Entropy.9 = 95c199afd85fc1981ec2aa6fede6436c28c32eae52e6a44edddf1f5b4cf7642f
+Nonce.9 = 8dedd5c32085a23c1c6180f453cb4dfd
+PersonalisationString.9 = 3a162000c4097360c4ab4137ca5631c1c8e025341d1b62efae92fafd59a48e85
+Output.9 = c6227f19d479cd1fc49dc13dbdeeb0df06fc9f6ce11c6c1f3c6708675140463f2133c8bc6ab6ebd8e9461e14f75d2939df0df46e0c331c3043aa04d23ab93fb0cda15923e071087b22b5ba63f9484e7e496b2a9a9e8823b9a8276ab846b4c9a9de2dcd6691fbef71100ce82ebea79418b870eb3f8fde931bfdc6258f74b72025
+Entropy.10 = fcbcef50028bdc7ad212751633a02914372c6129a08a006a6018e4a347236a87
+Nonce.10 = 01f3250094b99f81778642d3be752d10
+PersonalisationString.10 = 45508dce23e691f9e70c6b2e1b2d3ede36b70e7ad23ea78db232666856d2339e
+Output.10 = ba7f0b27f7ff1af636b284e964c4cffc8ea96e5d8bafde594fa95b3508af6901cadbe73898200265a4aa7fc4401767da4395b83bfa1cc331161f13a976946eb5dc6fbee959ca7db4374a4a9456939abf1865a41b16c146ddcd655878011182a8d244c6e2b36acc47b3c2e72f9c03015463ab9afb56c5e169d27a8fd61dd2dff8
+Entropy.11 = 6dee1a672ad15390a3aa8726f010069c9b7fe9478f14e18ec3f4c342ab133190
+Nonce.11 = 313177543441c2ff222d912ee95334d6
+PersonalisationString.11 = 898c40045cedd2c82de0b0f83802aeb3ef575ad9635405a95c8fbeba921c1491
+Output.11 = 131b74ff3efb83e60c5222715eadec6e0e75e6467eb45a31f253b63c01dfd5029339a5312889aa038cd0fbd16212324db31556fbbb06f86ce99383f237a194368e3540bf8cd4c6d3dce85dbe1d13f6a3aca30f93093d9d0c9e73122d1fa718b2a8d245fcbb8db13e89e417fbe95474dee914a4746acfda507403b9c222070fd0
+Entropy.12 = df6c135f471686d1af5ef05f297f25595c5f05e4fd502a1f693d9ec44df1191c
+Nonce.12 = f6ac42f54beedf4643e4423892b52e8a
+PersonalisationString.12 = 2d8d07894bb0256782f300054d95cfb51a9d19fbfec922108a50cc2995aa705c
+Output.12 = 34ae97069cfa8629b801b8db03f1ba0db19d9322b817a7eba89c3cfd909cf8f07ecc0402ca9bf2c894c4d3807bf3b9b4d674ce169b2a26eea3ce9ba64994dcd393be35eae7c8ec640185aa290d8152bdb854bbadb33521f897553b46297e4b2af2d0a9b1743ceff7648d60a73b4f5805d5f06fe5296ebdf0d14f430e7b2f2f3e
+Entropy.13 = b92b652bd6bbe5b5dec2e1d736f9c90f1b1df723952638cc6aaa8023c029a49f
+Nonce.13 = 37ec9e6c51a7bc6bae0f526c83c86bcc
+PersonalisationString.13 = 529cda96958ff83d39a5fd469834a0c140b3efb8e4cfe663e2d5d2ced7fa7616
+Output.13 = 052bfa2f45ab5459f2911c0a606f90b91124eb6bd1d9af30e56299127129c464bfc66c816264c8a71f6f1fdf4f2395bf00942cc23b99d05e07e92ed8c172de7d608db41b35154dbefd625d06172dcefcc0235dd567d1fda69d255aff1fa5b698abf60aea6c0e7b13ae3898609ecbfe3c90b737ecd7d2b9a3dcedd647bbf04181
+Entropy.14 = 46d644ff515f49a39b743bd15469d7f96b2737037120a2a9279f564850027a3d
+Nonce.14 = ab7843b73ecb4858f2cc5e9dfca803ef
+PersonalisationString.14 = dee559515084d8ac49c3803f09f3d5fed3b307946a2752c267677f22786a0125
+Output.14 = a12f5e8ea3bb174934c15e5d114ba615da33210c98c38d7fde4b5aef9aecdeaef311d929d7fece7fee11db67134c3326b413b8dc17766ba4fb881105db68688b148fd95d812f6538b14f25afaae84d39025336136d270bd643f2a6c7164930372fb1c8f4f0dab60283e9d8d3440ce8dc66761c5d5c4c13cc3a367feb4869b559
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = bf4dab346966f86b5163b0f2afc02998549f4f4210b5191a2d27400da12686d5
+Nonce.0 = 328531648f5ce509bc011f65f76270ca
+PersonalisationString.0 = d6b55b157655a82d9afcef78ca2201388ea1793012007feb778959b8731325a3
+AdditionalInputA.0 = a12e7e89437b5a7db04934a84a2d8d678c836d5a2b8a990a69831829a71a677d
+AdditionalInputB.0 = be03bad20228f7cd4003e902cd9ebbad3161fd264372aa69b16b662ff9d66f51
+Output.0 = 44c05784091d0407dbec91a9d0439fdae627eda462a775e4074a80bcf33fa7cca1d2942d1dab232aaf5b83070c83009f4e6291876cdb7a28777f8cbfd305367c5e93455e8b9ed520f48d35dcb28c5f15df8dcd168dbcb963f9e9f8451117206a2b775cf1f00e4480b85e60f9158ce6bf6fdfb0a21879e8b83d4b371fef1bda67
+Entropy.1 = 4681c3fc821372f81b7e450fdd4df1454d1cd607430406dc62f310dcb808d2c9
+Nonce.1 = 95551c07a7bb908caae996f5315afd98
+PersonalisationString.1 = bb9f353d9c286f07fbd21c9e5880b5d2fd6d704dd78ac98fd7eae231cfbbb49e
+AdditionalInputA.1 = 8a41773b12d07115e1ed177ab6048c6505ced1d763bafc3665201af79a5dcacc
+AdditionalInputB.1 = f7158a12bff554b1a517d92cfa5f6f6ce7a5e60a14a059ec1f91c6dc5a17d6fc
+Output.1 = 077f92e9c43e1db80af239ac32ace4ea1151a29d50fd24512ca82fef323abcfcdde436bfcd4f9c16b6d290982d92481ab2666abc96a380a8bd29eaa5fbd88cc230772a75220bf8962c9b49e129b677018f859ca5af234d47e6c5ac69f410438d6e6c87d8587f3421f6458ec3b4ed693744ae63a189d0f6e309025580e7910793
+Entropy.2 = aef83ba870cc3cd21caba2f67b37e7baff19588a012844d84eaa0ccc4bf1484a
+Nonce.2 = 1f669e6a3e1820065aa55a7ec6132f88
+PersonalisationString.2 = 31eb4cef3c6087600b0e248769440b003bc3250611a90b228797eaf4420464bc
+AdditionalInputA.2 = 2129382690e63c03cdf6a08d51271d823e1964c3720bda5716847a0a0f750169
+AdditionalInputB.2 = 127053dc46722a42d7d333691ae9aa6edaf3acd0e1546d414f4b11e3dd70080c
+Output.2 = 5400017c4f7ee8067b328d575c84807c9c597cb1c9211c1655c9b4d2c0f0bd7b688ee8b3f6b26db138f7175f382f28821cba9fc383d7949585bf3ac00412c53a03cbe2fd4868353b83d409dd2149e372b2102c3ce4f6f083946af834eb09d9ead0af65e2f32569bde1d476765a3325ceb1c26128f08e931f73cd6efc49396a33
+Entropy.3 = 1457b500bf68716f376c804bf42b2db445763efb6d58fca870e299683dfca095
+Nonce.3 = 987e1d205b40b5f3bb43cfbcea1ee19f
+PersonalisationString.3 = 7552ae50ade95bfc7226cb9f890ffacfbe8edd5db2d717c26b14e92414a2789f
+AdditionalInputA.3 = 80d6c93068ca7d1623aa88e0ecccb140c578b4578b72805dfdf4dd6ea4f96ee2
+AdditionalInputB.3 = ffca4be8e551d5635d52b7cb1161c214275daa27c49135f9f6c5015049e88f97
+Output.3 = 33d161d75d7555ce16446264e2f424f15750eae0060e123362bd15a69608ab82e3c9b269737e74c864b40c9afb052ac756f75356bc4a648d4ed1ee4365f82389981fccded063029e1a60a763bc0a0b748d02eff0fe0581c7f795b0df67631ddede8ba240b97ebacb99a6f1baf500552a467c1cc9b01e4e9a71ce4c914a7222bf
+Entropy.4 = eacd2f167c5402a308c1c282678dd2d46b92497dbacedde6a0f700ae5a5d2be4
+Nonce.4 = 480cf5dfd1749fb9611ae1f1c46a2d86
+PersonalisationString.4 = 87684df9b557496b22130c57fd82bcfca30b0eca281911027971cad60e913590
+AdditionalInputA.4 = 6642da6d01d7134dd14ae87ef27e613bcd5b0440cf903a58bcc99411f02692b1
+AdditionalInputB.4 = 1ba71824d224fb3a81bdf43f516e6e070473c5a305706fb648f113fc1c5ae0e3
+Output.4 = fb1627b50e153a752fdf09bebff3d180a1705c99d9ea7cf35a6a466d06571919ad2ad598f6a9cdd482bc28f8b5e4cd2f6adf5027f42eb2c4fadbfb9aa9e7c77690ffe04335b53911733b40a86d51f520301ece0e88b38c08e6110214c5130aa23638acb3913afaeece5bdb347e05c83649d8f7597ff3cdd3617738b112e33b59
+Entropy.5 = 5a95b90f0a12a9709862f0b5b62df3321739ed2ced7f7e0ad06f92c0c5b8cf87
+Nonce.5 = 955de565bee3b8a798790d6b9b2f99b2
+PersonalisationString.5 = 4aa1cee36350d5825521a1c01144847e73e16bd1dcf1a424ffaab8e2b3cfb6cc
+AdditionalInputA.5 = 168fc301b28761d918f34f0a1fe7340bf39904d153a3dee4ecb232c7959a839f
+AdditionalInputB.5 = d90af4d5aa0ff6f6788cf8eb485ec70d1d396a3d561c5e1783c54d435dacf08d
+Output.5 = ab8f97f616a1be46b75832f9599f6258adc24eda0e6233b99a78140ab06ae68e385762fc564880eca8e3a6e26a1baa829fc380c21301c10b6d0772ef55ffad6a3e0b8ae514bcee33d39f8405fc2520a14f128bffe4fb4e193b617f0e21c3653ad1634febc27465612d853d43f2652c4966f38dc14ff487359f9c920e213100e4
+Entropy.6 = 1501b2734f2b5a12d037e36c05d70c72b7525cc226b9d0b99a5ed75730b4055c
+Nonce.6 = 1e97ad09e8c8ce00643220306e7c2b1a
+PersonalisationString.6 = 980089fbcf2be84bbedf1f70be0e7e1b759558734864db3b61d36ec8c5bea5d5
+AdditionalInputA.6 = 1cabfbbcf982e634a61bc97c10c65bd66e7914100aff52993ae6523aeeed92a2
+AdditionalInputB.6 = c7569da40ad37cb121132e86bb019f7d8456610fee981491279ed85652ba91f7
+Output.6 = 6a6e1b875d116e3440ef1906659c11ff6d25cf11ae9c6f79148357c8164db9ec5845eb9f53b6d85e6cf5632679431debb1ac433cceccf8491167866c30203eb12d9fd51292ab49872a961e27d253439eee0bd8d50ec915809c8e2a9b3a1b205b8593b5e3d809adcd3c29038a4768bbb6fefaae7a69b594f5acde75bcdfbf1a9c
+Entropy.7 = 8cb5f92d948a3b3733759b1c8c671c38a072a826ad3a421d4c01eb9625178de2
+Nonce.7 = ded2146932ce5bbf623dfc526e9d25dd
+PersonalisationString.7 = 346e870dfca20293e230edf222b79aa09f88485fa7ff2d76b1e65e26faedbd96
+AdditionalInputA.7 = 4aff0273664abbc33da9609439c4c4071f1d19cf743f7e7d87bb3065278dd4ae
+AdditionalInputB.7 = c7fe6180c505612ece7738d0145e6c80723cd5005da952b73e6b14c6241b18d1
+Output.7 = 3dd20a98949196c7ff3e68d9c7fa5b1b62a2bd65d12583ec7bed6d19d7d2e6fbd024e30651477ee8dcd5817f27a5fad6c6434862a5117ecd43b0934fec64f9060ed8ba6dcb240470038adf085d69151dc8c207666b2ed8ef7c1bd871039ed02e414f0e8a7ba3ae6a2cc1652689f96a62110ae8a0a45a0d213a89307b282f02a4
+Entropy.8 = 9072aeac1f8145cc4935bbab510ebced1380690b125c85142696d923d0576ced
+Nonce.8 = b3d5610767d3847cef3b93cb973944f6
+PersonalisationString.8 = f9eb0e7870a8a85a3052ce9d07674a7c77df4203a0fc6dd3ebe5ba397932cc55
+AdditionalInputA.8 = 21ee27230c10def9d7124274f4a0d8db2401762e9863d5806107490d1439f82a
+AdditionalInputB.8 = 122e466a41db172101ed95267761f8ed4a12774ce7520b9fb2d90bf7558998f9
+Output.8 = 9e97fb32a86b6515026c0f7e6b269c1049deeb140d55d184ddea1e34a01fb3432ccc79f0c9acb131e74e8d7c71e4c91b9937669fa0dbc1ee553ad031b2839efe7d112fea1e192ece3f31a4229a247e94b2a5346c0c8ffc4bce6ad8a8729936e72cc42734c56b6cb7356b7beae6d644a7c48f12b1debcb6d686b4049e7e12b07e
+Entropy.9 = fe9ff50ad33173cce2a5ce25f375497d6a5d7c43b2a9caea455b1ffac9135642
+Nonce.9 = 8fd27c24fb0a2ab14c2c0ea18ce5e230
+PersonalisationString.9 = ce916e34e5f55436c34b1067f8ecb89131c458bc1d49c65e7c677f64a3e77452
+AdditionalInputA.9 = dd006f41ecd84df573375bd0fc8115337282d4b2999416324e8f3e4ef92a96b3
+AdditionalInputB.9 = 56d7491938ff04a76957b2bf373c89803f82b5b6ac96c049c3dcd3d21926f722
+Output.9 = 441738781a055916e0df8bab44206da6646d1fa61a3bf5279ab78258ba2faa6aded2aea37b9627ab2ccc3a45ed52fd2653344854356e80ec4a22d7ff650c1a3ca9bab1da1cd198a5fbb5590cd525031989c4eefb19aa93c699b4ed8de7d6c1a57d7039438b970c1da6726044cb18f232375f22f7d4f94291b378b43c8e32d59a
+Entropy.10 = 2a5cdad2a51bc22eb42541524e63d047147c2b9999cd5bc588d976b033a49cf8
+Nonce.10 = b5b89b35470ffa02980da08b1474ef10
+PersonalisationString.10 = 5b99bb7bce03b2d301f9287268a2a7a8d1925d783dc895e71bfd525650db12de
+AdditionalInputA.10 = 95f30b42c8459b3fffaff9654cddec1ca7178047647884d601eabf5e0fa1913f
+AdditionalInputB.10 = 2cac6c504b2276ae297bb9b35925e66148f44c11e4af8af881bbd90978eab9b4
+Output.10 = 8729e536e7c8171083140681269ce1546056118f4854c65b6ba132d5023e3513cbd28ed661926dd8aea2de60984a8cbc6e7988e1f0147ec636e77785591d45fa925b9fb619786c7d225713f82aa332f858a0fd55803b9c7f11323efaf2a7ab480e628defecace0135b661106df1799516b2349428a8ff3a611f0c4c936d0aece
+Entropy.11 = 604510e4fbafecd10eff25ea275f079a93014c9b177565d011527916b67401cb
+Nonce.11 = d9d1685cd5fed8b234834963d673ccd7
+PersonalisationString.11 = 5581cc0672f840160517ba3832c280326abb20a02132381ca7ba988a2a75455d
+AdditionalInputA.11 = 20bb83e3bf457f06f40ca4e951df626acb3f6a44aa4129616953707bc3a7ce9f
+AdditionalInputB.11 = 48b106aaff970622537ae5ddde1437605a11c1a8bc7c01886bef0acdd4fdaafc
+Output.11 = 32774e5526e3ebebeccbd372ce2400e591656cccbde5904ca0263e5088ee7044571134cb29b09b6deb222f1ad1980fb60601795507a16f26227aa09f1c56d056825438a05a38c4404e23f42703b007aa2280030bc83fa6fa1cab7ccb1031232e380fa849c56a989563254eed0c3e6f0d4ea28a76f1e91f4b2d34a139f80a6c71
+Entropy.12 = eeb334175126f50ee83446966e73d349cb5a09da9cfd577fa01f424175fa611a
+Nonce.12 = 9563c77fc27d1d71eed0df7b8ea1dae1
+PersonalisationString.12 = 373887452f3c3a4d081afab548c4b190b75aa883893c91184f9fbf45a1eacac9
+AdditionalInputA.12 = 96797f861d3cd72fe2926b16e2b08182b8c957a8e98b2ace8b7a3dc6d80e655e
+AdditionalInputB.12 = 02156d4cbcf8ef9805ad73f67bd5e77bdb60e7484fb056b313131fe9ce0c6e86
+Output.12 = a9a089f9acc276c0412f0603e72e82392c06886541969e036fefd7e9ce5017f4887a9a0c54a5fb7216be36567f438a9651696f235722dd6630f6f2a1bad465861bd8474f8a783a85c4ed9b6d8341f99800cc36d6627374f072253b68181cc96b84e8a54095562c41f10285bfe770f68d0294d9dc18ef742286f362ac85936ecc
+Entropy.13 = 97cf46058b89537c97da8f9cf3ce36b666defa680bb36e6636b4500586756fd2
+Nonce.13 = 8e3c0413783ad9cc7e8915322af518e7
+PersonalisationString.13 = 1d846168da367975f77e58daf5a2f0fdd682637fa96702bd6055c4a899b16b42
+AdditionalInputA.13 = 7d7407eb173f12df15cea9fbdf3eabd963709fabd8b395c9ba3d4ae2ef62664a
+AdditionalInputB.13 = 250f31f1f3370cd9751c8b025053147f307d65cdf6ea0833cbd7b8b5b8252d1e
+Output.13 = d760c25a167e3a7ec8189f06eb51d36c6421ccdef7ea5b4f8cdfc9b6e228e6bfc8244855f83ab232d01cb64e20cf6cc02418827dc4514299e5896e494f45452b102a2ba4db1747d9f53a9f7e11043249deabfa0357d07ac9548d9dc200b38ea3501e9a4e90ce402d2844b8da1c5bf9cc91a8b74f532a3ddbc69c91ef75c3c5d5
+Entropy.14 = b6e25e76bb40fd7edadfb03c7793dc3f63f9b0068beacc1baab2f15865cce448
+Nonce.14 = a27a691d8629bc963e7e06ddd115881d
+PersonalisationString.14 = df596e76d8d7c4a74001ccfb2fa9e8e28703c6e2d584062edc485955e1488316
+AdditionalInputA.14 = ead8c0dcf4ddc909aab96eadab509a46908ee5f090983af609f08d8a8b28ffdf
+AdditionalInputB.14 = f357bda8f2048929a4e31969ec978cc333d58b4fc09a8aa1b73ec9bdfaa1a8f6
+Output.14 = 901aabb3f065be08e2f8072d5d3ffcb28ab291420644e407e7a6a3346b75a5be535bdbdd5a8245998689450292df877233ef0783e0bd1765413193790995d884ffcb2c8dc35fe4cfc12def2f091866d735b1dcfc9d8d8c26903d50e9397b1bbd674bb81fc908361b2bddb68f02031d87588cc3e94210422674e93fea6a5329af
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 7cbc54c2e6a7f023a8f8999a5f1acdaf7507cd5d77114cc9b4ac7299dc1be328
+Nonce.0 = 3da78de7b8f5e46ae8d906702d5a4bab
+Output.0 = 13d4bd6089a740b85a8e90683adb29bc8ede7b21c2a96c96b79573b2367fdffd00de609b786f751020f8d9f94b7052f0a14c1c4ab54cfa093b1e7237f3c72d95aed30f79b501d2e2616ee51f124e656e9ec94ba64e399c88089233928fa3fc0399bdbe145a275be1787d73ab22fdd54e142f312d4050645c2a45884506f3fdff
+Entropy.1 = d60129547fb2f419089a6dab653274ae805eac0affd7b94250a258b56524fbfc
+Nonce.1 = 95ca595db46dabb4c2fbd72585b96850
+Output.1 = 849069b5c73b05db92cd63a035624fe247e9d84f6d489ec767ecc70d14ae87e23a097ec145103a85728e8c85a8c8b3ffca8d7c8ff080e8b6a8fb41697d5c9ce10ebd69ce9e57917ac488bd1bd2ca9ab97adcc9c769a6ba45a2a812b15c740577fd13d20a4257220e3436c3e517a3c49fb16a7d17d48aa7a32b49279c6c5ba06c
+Entropy.2 = 97d2211c473eee50c5de5cebc764c096bf5e3553cfad251e1025d8bfe7629263
+Nonce.2 = e44bf914f9c6678bf6dc14dc37d3c7cf
+Output.2 = c079e2405ace7085f70a35120826babe44989f559765ef368475e643ccd09fe1ba61ee7a3fef478fddc44914877860658ecf0c00b5c32944841bebbf73ab716b113e4f55cfc55f974c3bed717255ff5632d29f66594d72c15425fb7525dc814e28af2dbb0f3f2435becad4f1ff67b6b6758a7cb280670a3b33328de6959a997f
+Entropy.3 = e4054f80f7b7713e5969d74bd5947366e6b6c91904fc6b0833b2a9215bf16098
+Nonce.3 = 560a78b9d9d918182ff199cd979d4d00
+Output.3 = f546d5d35a4d82f2741e9619afbb746c36843a486dd9932a4add1ba92ac58e7da6174f3c7168d30009823a946140d9f7cc027c4070870b9e8775da22f8b7d46e94eeadf89ab17932ab9fb05da08ead3b011575d50ac991d51f5dc46515e9fda09cd8e1fb24cbb70a9d412c111bac94b27845986106db3ec3523374c83ab0b366
+Entropy.4 = 445adb190686c6f01267f85a9417a07891964db6d4912ca0104d8b1913c2d417
+Nonce.4 = 629f5ad6ab4c9a53b855a89ef9131b6f
+Output.4 = 025d2c8da422f0cc95863cb879da114311c00c0bdfddcf5b7a7fdae89aaf116d5dbfc97e0a610bd5883c57d2e07668730566e6e0605a1810e6ee818246588f12a965c0db4b639e2ff8d3a8085b3f1736c46a86e1c7752a7538bf240f33b817470e69ded4d223911538e6fce9e39a215ac1c70e978a1b82c6a85066cf0e341b2e
+Entropy.5 = 663442555b663b23c27815574b8d6ea4181baf870a5325b22364efdf27acb811
+Nonce.5 = 13059175b7f5a2990691f8b6ead2f9b1
+Output.5 = 159ac7471027dc356b90dc757ba922d84f2e393d528bb851a91c46bcf82e3b08f73a3fe6177cf5548b542b4061facb28e936f153169c0e0148284367cbc21ed8eb577a31581c94c69c7c8245213c53168f268b817667860122c5c2e1e06695b7f2db2ee8254fe3c3c121232f4000c2ab5218b4ceb1eb129c93d821616586ab8b
+Entropy.6 = 0471b2c922386cd7ecc4f58a69ade3837118a3ff31c2baecc0761231cdcd1dd4
+Nonce.6 = 21cc4f15f288ac2e391802d9c25d2989
+Output.6 = c528cdcfc606beecd15152e89e564acb9dfb44d760d557aba44cd8c2d7c1918abb49aa4ef4184a189672811247e828ae5ecd0ee1afbc03831e7725767da12b61b4173afe68aa71ab34bdc69dcd9e744194f3f9d5b3664548972df82ce61bf1ece49b61d973d153c286f510ea6dd165921cffeec2ed4a3867b7fa23ee933e0342
+Entropy.7 = 5fd39bb79825e10cfcd9c836059672484d68caf7572f03c7dc7c87cec3b09157
+Nonce.7 = 11e932c81d29873a46836836cdec4a93
+Output.7 = 3aada5139ed24c194427f0e2102f16da7fa20faf88bc0fe2a91799566217212314ef60e3adbf7fe3fd0f25737cc0c6d1c469b99759c6672904c5faa3214ceac0bfb9115322e2f277e8a7d963a5fc9bb1be05105375a50b9dc7468b91ef8d39cb04e1d80d756d7b4260e3edd22c94fddbfdcb9f74f47e4dd4368045194893a4cd
+Entropy.8 = fb1af2b3a8e063696a0c98a69bf3185a60b81c5ab631fed390780c4c777ebb3b
+Nonce.8 = 09656fa3bee0b69678e11caa1ecda431
+Output.8 = 2aef0263d44bd904d62ec386b43320f6bada030699d1e5a1b418364b9159b24db47be608447f4b313bdff6365ce8b07775b94c30a03e7a73fc06156580a2fa35b83e62bd502d3a48cd518911c05611a7b3e7787bd4c15e8f51f52bcf1bf748225704b7fd463c74ee34f86485a82e495455e84b67f2859e227c90a0f1e8abd2c7
+Entropy.9 = 9ad917a384303e4eb02a5ad4d4655123441d015be4c79de9b75252f4966eee2e
+Nonce.9 = 7cae69ae330b83357d52a0c60db51dd6
+Output.9 = 4715b2e627ce240b670868fa0d2c2db6fddf79d349debd8d1638e96d4fc75367e216d5c1bbc24e7f04bb9b4018799a5857286bb048670de20112cf19fbc1078fbc0494f867f73080663a86d020faef2ad639000e8f469157b07b56aa24cfd9de96503d5a497c36a76bb5f1315fbc0368ffa63c086eec9f3c2a2f05f39ec4b730
+Entropy.10 = 63b10164fad0f77497172f863e0dbf7b832ec44b130013f88a036cf35ba00787
+Nonce.10 = 42dfcf70ca6d0f748086b035893044b1
+Output.10 = c174c81bedc81793110fe8afac7549475ea85a5ef44ab286a44ee5b886d5432b6c47c1eb37ef6df908a26f10fb36a8f7956c0651c2ed14a730456062d1f1b99d2048cf61e76270e1dff2262d69dff741f5e1785659a90ea81595ae0aeaa1b69f8653675d39e50423976523894557853c396b8d36b82e31cb9696a50ddbd51e78
+Entropy.11 = 4e5d44e9aa525bed9b454072ba8ce8716a5bffbfa0048998d83de5f3a9d91d37
+Nonce.11 = 57ddcd4ab6b80fd437826cb65c86b257
+Output.11 = 9b0869731cb7008c93284ba8bdc6d13502f4b702b3dadeec8adc49bd7c6b120ec05f1cd817b7a91c01976642c96efaf9a28513361f8bc91e6abf0937661eab6ae2da72dfe6b1010739f4bc649ee31c326ccbd8142add4a67cb7ad4ea43aa464611bf42d0ea566d5123526f13ac4be3be1f2d0c63e2019525b51b7de24c34a6f6
+Entropy.12 = 0234b735e8ffbea694599073e9180ecdd4ca98ba58c75b9f67ba81d19db07db9
+Nonce.12 = dd0b80deaf176186c758f3587b741d42
+Output.12 = 7584d6ce09b80b66fb2da0300cda78bf4e8f6c7b9069fafe59279184ec53efed9433e12bf0107a28a5e6f570ea7b103060203af7cc275a846305e30e67204a4c09375cfa74c2ae96ab0eb5b81eb51c6c95d09ac5be8f1312834d47d1883253bcda11517f22138ce72fe6256ee21b62bef368cca98c1eb8804ef7d75ad9ed2a88
+Entropy.13 = e9377e9319cfbb35462c4a68e31efdfcf812a678dc4a6b09561d1f8d7cf83e53
+Nonce.13 = f10fe7569a02299e548b2a374eaf0320
+Output.13 = eeb4cb39f9a7099ca43fea36969d8ffc6035107f7f442eb93f47e9ce739c45c23d9080b00c5824f702a8b4a79a43963e31075c974a021db55e2e419ba7e76fb568d8d24a6fca1df0fe286802f0b51d0ce35b6dc2d105da2ad3a36d14743fa22eac0b2316933dc0c3bd56fbefb4239fead21e42a065eb222460d0c711ea2ed1b0
+Entropy.14 = dfa94c198483c5daa046f1dd1e4e83f854fd6c5cbc3465f671bdfd36837779ab
+Nonce.14 = 298de64bbd817d009a71c1424ae839f9
+Output.14 = bfb9a54ce31406a82608aebc826441f8f633813a0c3bad723b802f3e905a6ee3512ff3513062aea51f93be17aebf1cfcd81868e85db3db9aa98680f974001fda8fe6a644f5efbb9d6e52e99ff606ef1ed7cd3b17fa6c6844790ed58da6df61aba0c200d7dff943588f4520891798098bddc65797b2f99c05efa090c60dc48a4e
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 8ad4599f8ede0ffb061bec6128c9f1786158f0f1f4473efbd562998fcff49629
+Nonce.0 = caba97e9cba4cfa0078cdfe4dd402ab1
+AdditionalInputA.0 = 4e004fc65b9679ce99bf5b52095b4faad01b5b2b8e4a539cc8b85fd2dde3c053
+AdditionalInputB.0 = 5690a64642b64ca0673dd65a4af898536758de741b685a4d8a160721385b72d6
+Output.0 = db766b26234330a21385b454beec705227010909593f117bab2fee95b5aaa10c19fa417e51a0d99a3d1cde3e9cbd235bf75a4f3162b0072f51bfd27999d3a902aec303b5f9f3e24930eb0f15b9d8c9005b601e3e67fd030e0c2b714a1e651201c97b9978823beb7c4769d98ba5b7c0c33384bb2083b49283fcdfb5c9ec8eb7f9
+Entropy.1 = 95f53e2ccbbcaea435c381f31ca04a2dc5d611f6bed5b7f7888da0c9b662932b
+Nonce.1 = fa9b946858d7547eec559927dbaa8df8
+AdditionalInputA.1 = 11949a77612333c5e6ddfc368ca9428e76d87575f01238a321bd22aa604f6660
+AdditionalInputB.1 = 4d56fbc716951ca2809bd2e6e48a724c3c2533f233a3edc475de7659e310583d
+Output.1 = a36235c717d1cd4d2108109a468584b930ac564d909c4c69c0d494943306234f1322abf78a5e49695d3912331795264aae02874914e747deffbbaac834f60d4cbbb157f0407748a30a6d949de5f848e366b870967505107e4db8ce3d8758ae80c2e83b8ebf5abe155c184b9045aaa17044ebe97567f22bf4aa4c1d33425e6efd
+Entropy.2 = 4a0a0b52a6b4923b0705a4f676662bf6898202985b76dea7e7d892909b1f70af
+Nonce.2 = d34add9dacf77c317874e921d0a4a50b
+AdditionalInputA.2 = 575b394d41caf41da40eca2d1c534afcd74b2df67b03b66e3f93c31240a728ab
+AdditionalInputB.2 = 9fb2b4faa33e748a94b01fc3d5aa931f71f23709001fcecac637b143faba10cd
+Output.2 = 85cfa124db69026339ca03af0df44398b5711c3fd7ea7eaffe05f82c1bd049fb7e688d7b98e3aac80c8c562dc25125577768bd8b766555ae8be74b139f105b97f19a8745e429178f767a2efd0fa91b1e91938e8b9828c5b2e66eba09d403e385f2e32c6eb8b667a31a061c9fe2dd811a23290e2555557336f39d95c29146d6f6
+Entropy.3 = f6742c2483ed572d63908ad501372ed18c05ec8b85f4d896f39db46f1c70cfb9
+Nonce.3 = fea41783c5d30b10db03a2a0e71400c8
+AdditionalInputA.3 = c946c84dd66d43fcd3f502bf616cea154fce51ac12484d3467bb8d719afd4250
+AdditionalInputB.3 = b043067557e0b7efe6e2c1cc6e9412a19bad509454d19c1888b975824d281dfb
+Output.3 = 0352a32a0c62dffeae34e503d0a127e50d71f8275d92ecb000be8ba074d3aaca26fbd9e11b03f317073b0683230e162a2ab4efa521cce0867f7fb61b69dbe31f67a8d42216629b2ff039e5a1a499b47181910c5790f1eb4cad7d07862fb8672a2b81e5d8c62ffa055e97f9411043f7da0c655b2567c56903cfaf1e7d256ede2b
+Entropy.4 = 650a1cc6927648e074fa9f6b0e411ba80d7a8bde7f41cdd40f145818e24d3f76
+Nonce.4 = 3098850b25334a27d0de3b106beb6dc1
+AdditionalInputA.4 = 8017e0a4c1d22060e56afde6357ffe9200ad1ec3beb9c2bb381d661c2eff4395
+AdditionalInputB.4 = ecbf1580f1b80856c384a9321a48a78d2ebe4eb413a314e5c4414db132f831a7
+Output.4 = e7ded56decca9a5d59e81b933008bf52a5ed40de1c99c98b846d1a104ec25a69e6248fcfea2295d78419a9293db247dbabc3d688fdddd58d9305fce64209b41fe5bb56e6bbf13447c7e96728a6e71518619e2c93aa9d56797c5436dd1562239da1eef524ddb9c4bae9ad6cc3bd497d71344a39419eacc784b039a4a72cdcac44
+Entropy.5 = e904f170a6bc1fb658f6bd0ae5b3b75aff1c7277fbf576247226250fb23424e3
+Nonce.5 = 323fccd0c9edaf325e38aa789f3c0172
+AdditionalInputA.5 = a5c257bba6418564858990b1cdcda34f79b48d2ac3ebe25e23219542566981b1
+AdditionalInputB.5 = 4c91b2f0e17726b653e4b142b4a319ec952fe4d2b71de31ff14460c3f4f55991
+Output.5 = 4334ec672d6a9c69a5203126a9db2ce35e19ec0a4ac3c0713062792a8c0a16934b8ed85df80890550265614625a5145eacc20df8137046b53ff4fbbf9d50607c731e3b82a41a1b74c8ab25f54a1955105aaedacc5d7759a8b60a70623a37f4de7c18c7605e99e3f532ad8c277a7fc44dd38de2caec60310ef7f1544e34a49bca
+Entropy.6 = a342e20ec138de7d9abf4e52830ba788306c54c137f9b6d8e9cc1b16563d7403
+Nonce.6 = fe1b14ef184c19c39e124118ed5b5e57
+AdditionalInputA.6 = 870ade2f3209ccf92e3f473a8ed0a312067f1afac0d57cf0c316a56c13280dbe
+AdditionalInputB.6 = 4d9e9a304272c9dbc109486522b4d60ae52beeb87671e893a83d372a14d2a949
+Output.6 = 83ea469ce91234c7a1d4589565220fc80c81cc7facc12801589051e9e18e42858b9ee397599a276de205a9b1ee7b44fe8c6d20c371c104119d371550d825b6acad530121b2046471dd8261b95492ad7b58ace823bec2c14384096b261161efa5cf69b8c92a4a699ea8d8df7b04cc24a5a12f4c6978ea50fe0edb7216e35753cb
+Entropy.7 = d6c4bc8f069e09e2cf0eff6241dca6e169c6c928c6049f6aa33141b459cc08c7
+Nonce.7 = 81509d1be3aad60707c156a7439029d3
+AdditionalInputA.7 = 877606701c8bfc7174a6ed8b8e07b2a7af902ce25923f91170e3115504ac95ef
+AdditionalInputB.7 = 17f92164ba8187f74a5d3cca30dbfcc9bf8da5405c808d86e69ec0cf34b6ed3b
+Output.7 = 566392354a817eb021e4a3a13ea276194879cb0cd72428e3b216aede311b5a4137321e6d2c44ea15e14015707a240389f0d44794d081d049f45405fc52b326b3f6d5d1271cf0cf219fe1141fb3404265bc77e4457ecd86288f67a2edf0e57cb43947c9c12ea41cb89dee94e6bda39833ee5cdb77a0732daa43d8cf2b0b95fb77
+Entropy.8 = 15aa5fb1bb743e06b63cfb87926d26a62ab0352b362f5cb14e0951860eca9dd3
+Nonce.8 = 81ffc56e38a7b4e25a22c12101d77cdd
+AdditionalInputA.8 = 48cf244e0840d885e32a6ca3a779f8aa85d1b85ccf963fdbec676cd6cb2d1ec9
+AdditionalInputB.8 = 16e545c23ae386c1b7e21338f0837f51c38a3a283c57f0a3aa97b11f8d684450
+Output.8 = e5eca8b0dba87ca8c2c7b8c2be1c8e8009a6440256d84d35a1d7e032e054366400dfe19bad435b119f4f5337944da5154d2d5b3b0b6324bfbeadef8a33c9d8f1e4e2fd6b7ebb939b8504bb002333fa73029f1c7c2bb9fba93c65a391aae2bb985b576c2026a41d1d56b6a33caf3fed8a75bc392de872710ac94bfdb558543a5a
+Entropy.9 = 991541686e31ca1b376aaba2e0fec39a211e45d6d5cd653e721fa8bcfeb6262c
+Nonce.9 = 465996218ddf25598a39db7fbbfb24d9
+AdditionalInputA.9 = 5066003a10d0c836aede4934cf5482f7124d49aff46da0298f0107077f6a385a
+AdditionalInputB.9 = 64e9478e3e0802273717f862d3551a22454aab44c19fa4e4c3aa16d2efecd447
+Output.9 = 1441ca96dc3ec8f9c7624d8f81dbfef698eae0ce9035b7bee89bed4d412762279cd2fe8bff51b629d136e5a80b0dd748c629d81ed84ff9a3812a27555aa78c00fb80731cda6d167fec9b22c3e48a673a00c039922f3b6c3c2caccd31d898840c0ae1f245b1e8f2ae82453280255ccc2c4cdd9585f0d2ea2040c4c59e673b3e6a
+Entropy.10 = d37d1b441184a5c18d519c3e3a18ec8df0682a0be062e909ed45605d2b538625
+Nonce.10 = 773501f19012e827cb6bceb2f4e8c0f2
+AdditionalInputA.10 = 07244b2920c9311b5b84b67f37bcccc4522614658ccb131665eed288f20deeb2
+AdditionalInputB.10 = 090f46ebabdbd29da8f871ba586811e8764d2445422082a41d150e2f00bc382d
+Output.10 = eea85ef6e9a0912cdc5ba42016b5814a7b48f6113e629f3b73eea46bfc77871f0c73cefead3ccfc373d87928f4e20594dcc4046b6ef79ba36930b793f34707297e3a8ab3696578197e21a515e8d940b44f625e684dde7939fed3d2c422dfade2b277ce631acb3b616c700d401a5fe7009b09da04d190a4422e76b013af1b6691
+Entropy.11 = 98f6d51abe3da3fd83239406d2e184a589c0046039bc94853660796c7667fb62
+Nonce.11 = d7d45de8d622d502db4b3d5147aeef79
+AdditionalInputA.11 = cf46d251b282e5242c84a83facf25209d840a7ef21ee8626c2c82ce9ad709b41
+AdditionalInputB.11 = fa655c1c925811b53074ecef18c3eb3fadabaf931c421653f29c01ce506992d0
+Output.11 = 6ae9ca31e2e885e519132aab97a36a87f676d84a94fa41f1a18eccaa0777e3fc494f934ff6d8625373aa8a949cbb3abddfca2606fd8bb8c7d333f423a05beeb3835e413db9758ae382d4484a09c59432cbe0db0d6d1d32598b0acee7a902e76f47865b9a3d666cab7321a1d7cbf3aefd49257972088fd45caf3b4e46a49485f2
+Entropy.12 = 4a9950eb71baba3ac0b25e5149a208571d8cfdeb443901936e850dcfee59ca66
+Nonce.12 = e6708320ae2071c2296e02d27deba664
+AdditionalInputA.12 = 831049a05f536feb8794e1589e47bc67ac697e3395a5b5ff85f9151feaa8f1c9
+AdditionalInputB.12 = c6fa8a6fa23a94f15a91b69ca106cd96a1527217e24a2f3eb54a52817b91c31f
+Output.12 = 59e02e5499cf7c0cfe286044e5f9f15cc4a4ecab02e88208ffd80758c8863c0a226e6e54c85c0a8e79bb2e5d262b4fc9f66ffe031693eb6f04e2ca1e3af5b611ee4de26f9e2bd2735c8d746bc0aceaeeaef7c6d8c881e7bd57cfed134f2742b4af9b2451d77588e17e2cfc8b8f8eb644e4c8073b5812ab4d70aa2a9a42330567
+Entropy.13 = 31edde9cb9e9ae2ff997b925ec5e42588a7d023c124083190aac093c5b961a5e
+Nonce.13 = 220d2b712f7e2bf38e70783d82d6969b
+AdditionalInputA.13 = 9e65e620d96a304a62ace2c3e5ff05cc5e6b7cb5fd714f758e76e43137cba685
+AdditionalInputB.13 = 8c779a51462f3aa70b60f90d3aada08994c5dce7efaef6bbecdf34b3c1613405
+Output.13 = 2a80233fa1ddd3f0e9a7257283e3ace1d9569c4bbd3a7f6ec8d272f64c1ab39dac19af57490e19706b3cd293db04a6320a825a854b16c9d066d6da2745682272d6c4f75b3e5801652d563beabba31cb8f1b3e643c90d91f173fc01d729d7108e9cc7cdd89765cb8d4894de54774dc3f5e8aca3d77aded01cf264d770b9007eaa
+Entropy.14 = b4e09a55671ef9ddd3aad256efdc6347e881f49c38aadb2a03bea89c48d3c08a
+Nonce.14 = e1a14d523eee40240fb5ef16b0d86915
+AdditionalInputA.14 = 066b072d48f6cc6bb00273e0bc0ebc086235fe79af1fbdb46318f56c62709f87
+AdditionalInputB.14 = cfb58f59c6d56993b9f0b5ba1643554072cf4ae8013c236120044ae909083f5f
+Output.14 = d5dd7f55ffa7d53fc0f679cddadeb869f39b29a6d394c9f1185b11ebefbcb43419c6a26ae3c9ab9d456e2cdba1aead05e67eabd3596526ee431ba7cab7f94838062fcec2363cf0e19849ffef30064263b3a059ce38aa02c2729bff5af9450e035161816724163906112205196c642bfd70f36abb4639fd6e4f7f6a879ebbcc62
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = b1cf2861d5076eb18612c3f82930cc4ba6b9550736f741c0cd0534b87d86fa3c
+Nonce.0 = cea21378eee439c51109b3f79c910c45
+PersonalisationString.0 = 24c0a8516faa85e14808e89aa0a2d71975cd68e0dd31b6c43b309deaeeef058e
+Output.0 = 9ffc823cf7dcdf286bc53d8adb84f2d12e5925c660f365aff1faa13bd3ba78e65a457f1daa93e4e5eac8d75299455d4fe4ae00e801fc49a70be1ec8e8ccd63537ca176b2d37b5f60bf558afb5fb5073261dd488d10fd1478361549485e9a38e9e94c2f0a2afe5c9de2a8a33969e19ba5c23e617412cfa5acc8cf3782ed9aa883
+Entropy.1 = b2fbb673ebcc69fa3c0030973f6638b3c180336c13a54ac3b6e3346bb7efd7f5
+Nonce.1 = f373aebed57ac427e23e2ebbc35d19b8
+PersonalisationString.1 = d3303fb23acc24e13b28fa6fa333a1b7be244bf5ab3cfc4b13680c08a4ffaa95
+Output.1 = 1eb240532d54a759d0607ffa55b59f01c6deb83ebe4f0c5e72a86876463e2386e33b7dcdecd7bb21ddd3af56602a2e7566a88d5a27dea795a81f6e765cab3c071e25ea3e33202a9ebe31ed2a4857dc902107449b6c69c7d929ff35bb44ccf22064bf382c0d405f08aa73cdc312cabe4c49beaee3d7726b77ee0a24394a4f8162
+Entropy.2 = 80cc1236257b9f5e35c5598b33eb0161bbbf23ec7d9a90793191be7c7475d770
+Nonce.2 = aedaa60739ca728db6aed8bbca4c9316
+PersonalisationString.2 = ecb8cbdcaf00649e9bfe53f6a06c7d004f2660f2b54f514dd9d2c9dce81eb249
+Output.2 = 801627b51c768103363fe4bf5525a96fa396b32d76864a8dd81a35eb20034b870759735d7248d40f023ba59ec6de827468fb7610e8312a78474724d1812683479537981da2b2b17eccec2158b18731806be9d58dbada2214d810db05ab358dbeedb101e9d957b15bb1388e4a3916d13f4c901ef9c06aa034dd87f05ab1012850
+Entropy.3 = d20d511eabb09c81a79f3ba6f6d281af2a55aa20733d66c633adfccc3c634be0
+Nonce.3 = 7420ca6931c91336f864c5c8f8ffec88
+PersonalisationString.3 = 9fc3b3b3f6d39e533fcf1bf0b3144f481e52a7924406f7433bfdf244e96fd94e
+Output.3 = 765e248b0db5920307b4be960e057142b3366b590d96c2e9924386a707eed69ca983c5cc60440f402239a1cee2cc221c314803d35c8a5dc49ddfd339f10943744fd3b7b8ceef2cc8d9cf902a8710ef794140eda8b66d4c91bca7546681b4eff9d3e44dae601ba5f64c4ace842e10d865bd42238a13be3d60f08c4d64195568fa
+Entropy.4 = 8cad67aee7daa30e2a3278db86031dca6c49b33a475ba679151378bd60465201
+Nonce.4 = 386f929e5d599de61b93f49d7b2ea208
+PersonalisationString.4 = 7609160f2e21c410db396f68218702fbd8269058ca2c210b8992c7b89f8d4b69
+Output.4 = 0db79419874923766f12b77fdd961b4384fad24e836b5ffc99382dc0832f5eb6e306b635ef220441e2c5331c9a22a3ac73ea487615112c9ce247bde7926bed0b17ec920f44ba6283289e9ec938da4ef559b44986001773e89d63934e15c467e8fd03924b12004df1390c267c29bb2084d06cff48913cebfd6cab5771011ff6ce
+Entropy.5 = 7aec24d543632b4b17e6c8282bf780ae4823baa9d302025ff1c0a4212433371d
+Nonce.5 = 148bc4071939c0df24a0ee1403a91cbd
+PersonalisationString.5 = dfc5432fdb048a77eb3489331063144a67119f5c9e9b81292e695603fbf36f33
+Output.5 = 60e502787163b2cd2713f717bad799753de94875e423949b1f00d5ea607f62b25cf40266f05486ec0230340fb66fbcbc7825ee86e2f6aafb5852f8581e7ba6c1901d63352d60ad8266e6f4caed56941222726ae1035f66f380c1636c4b627694ee57e2e6986cfab21c6d78d4f073eb7e367df8adf4b7aed4e0a50df0237b03f2
+Entropy.6 = 2b0f60802f16954e86360bb30f57235c6ae602abaae59890d4586943f7cbc6f0
+Nonce.6 = da6409a4a3aadc73f4313da03f8ac920
+PersonalisationString.6 = 98080ac454e0947dfb872df6491abb45c361d58ddea368d98f9e6bd2a74ef816
+Output.6 = 2b0be9b692b3a28891d635566b6358d5c17eeddc5e1795b879adb4655df7c2a241c8eee6b8f7b6168d55367c3a2899bfb530b67586e9f2b8940019d10dfad986abcf103b787fa982e009aebd24eb52cecfb916a1e2de8dbd8168c2f6a159c6fe0ef18892573c28b141812bde837d2c749951cae490b491d26f39f7e17a3ed7e0
+Entropy.7 = 0b2f3490a83576f730ed04bd570e4dc2513a739a282b4a5f843dc42d7db3b60b
+Nonce.7 = d4c38f01cacdff71be37c02ed68b4186
+PersonalisationString.7 = 170a9ba375aa92d5252586eb08f04658e7fed3a6820e5e2d3df7db4b29740989
+Output.7 = 46778c8804b6e5ecb7cda8c0535c6257b80bba1d362b45bc1ff67d181c2a02ebd0f3cff63d04f6c4c4db5b0b5954d3c2037c6eef94ce36b7f24a0cfa0b00905d8ddabdc201007b6bcd0d7c60e219fe1ca9995a3527b1dba50caceb5e0eb7120eefd1e9625891edce039c4d7ebc7f6bfd3839b4f608b18ebf3e004d913e029078
+Entropy.8 = 2e9ecbbfa3fad5e53c4321a800b5297af95f1471256b2a09453ba7934d02cb46
+Nonce.8 = 9d0e03e36ce2410a125d0b5173b4edce
+PersonalisationString.8 = 6bfd6bd8e4461f827a206aaad604904fe9b90f209a9e2337394971cc9cbf19f7
+Output.8 = 085a72dbfab649bf383ac75b6a044eb694b02371cd880e372c42cd0ffa265ce3d9b5253f2782b3ba701175f8c4b81f280f9996c3ed652b1e409a3740c5a176a5624784c3f03aaaf2b0f721428fcb55c9aebed4b0a13ad2c1bb2170adfe64a25130a41b18066017fa6e5595bb5d1d4f6c7355e0a97046d892cb255b91a03d5f1f
+Entropy.9 = c9e0346eebd8b4e63974f7bbcb54c85f8290afa61432cca40a5bb2486c116f5f
+Nonce.9 = 28421ed541358dd585abf9e3415f3260
+PersonalisationString.9 = 297a6461f314d04a9a30cb4606e1a31f4eb5cf89fdb2c4c716e83d21588e4573
+Output.9 = 2829cdb58fa9d47b5518ea8b34d67935ffd1b9d753ed340f7f6d0d76883ccfe0998dfb07f0d3431902cb1681de34dcc78637a34d3450c600af0bf67fe86674d5dd8b667e5aa5f1dd9e78039b2e634857a97bb2fcb566f695e678af10b5bce17d30876a63e11d6a4053d159095ee0bd6f5f872050cf9ef712ee600fd05865550a
+Entropy.10 = a438e51dfd58079f0cbf7d0722965f95ec21ebde892d4c36d3d95b5f5e8e9dd7
+Nonce.10 = c9195a85b4748684a50238890b00d373
+PersonalisationString.10 = c99f46288fe839c63bd1bc21e3211901dd8393fe3bd18c5567ffbba90eccf747
+Output.10 = e1ba377f1966c66329b6b0a3997d6fb62e06afa00cecc41f3dd532e6b0427d89c89bfa38cdc92abb90a512040d6ecc99bccfdfd9ef7f59c46ebf0aa63b45bca6e45eee02d0389e283c144ffadbcbaaaccf60ed958eba454ec31a026f0d397c5c5c451e8a301537e7e2569ec791b68f868e7e374a590b56381b6350dd5ab217f9
+Entropy.11 = c39b9c88b3bee8eb346bf86bd4435e738b450149d1bbdc0fb9c16ba9ef3a02dd
+Nonce.11 = 12918b5e939878686facf9264338b73b
+PersonalisationString.11 = 16da91970406d5cd9c29ecc18cd3d189e0f6cf65d86612b26bf6f2bd88dbbecc
+Output.11 = ea21806f4f2202cc00216f88299bc6681c3e0fd0c5608e8f4b6ee4522d59c43588f769fac9b48631eecd415c643665a83bb4b6d39a26d81de07eb3a296bdc406f7916b412264bff596ba85ee6866bdd64a56b6f15776c41b063b89a9a80a7abc3c54cafb7e7db65b5e3f781e770b5880041e484335165fb7d859158403d18470
+Entropy.12 = 6dcbbe3731f95f1fbd6576433f97890b52a498a022ee4931fca4478061ec5bfd
+Nonce.12 = 44abbc3bd9db8c992cc7d3cbd5978610
+PersonalisationString.12 = a4902e4d2530596e087584d55cb1175ba700fc66b1cba3cc9025a1c5fd984098
+Output.12 = a4f8dea1d06fa88c2eff31fc04c18f0611b63fcd6639b26a884d0dbf58f880d498bf2adf172ba9b3898ddc710b19a9f9f7cd57aecf588bf131418daf73f728e33f94348ee5d3d8b935e6461f9b30b33f83b1459e17792463c2b4527a1837daa05a976b62cacbb81ca9e826e7179a118ceb2096f3f5f6d8371ae67e6b91dd274d
+Entropy.13 = 5b44870f8a759e080d05b26502d930e3014857c25c0112f46869244f7e3124a2
+Nonce.13 = 930524dc57d8c1666a375ba95a99e97f
+PersonalisationString.13 = d880eb9e2df605d87b070c5fcdac39d18da0674d2ace57753c09cda63e0ad896
+Output.13 = 89eec24a8954a252b43271c3226f3a3bf814d8f7d14d7ea53b215333e42df4441d646ae967055d29ddd127bd7c96bd30b21e4d379ca75a831a97d516b1f9141814b654dc55f99522af8a92c72c78f5207d49afd3bf1eb52e26f89b7d6fa3504341e6e627771c925990b87070867e9eb972a29e3da7fe944bb486a19c41d1462f
+Entropy.14 = 88f77e49e275f9db1ee419e3629c942623becfa50072eb2aabc98730ffe5977f
+Nonce.14 = ea7d3c3b8f6da0667d7f0d543c68d7d1
+PersonalisationString.14 = 86c20a7e794c887898d5bc00e98398276a4e3ad8d674fb808a63a44330490d2b
+Output.14 = ee8e21ff48af611a17d33e130f4e4224330efcc1402b6d55aaf1f514553b880f18df68c0e4279854eb2e9b904c552f69f0e1badc347ebe336b70456f221e07a2fc78df72551d99df3755997029ee1461e2b6e396370096d7e8c2dfceb73214a72ae2b25ccc60b92dd71988eda811ceac4b7c335528249aaf82826a14c142007c
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 01e809719a3ce9027940128c4f86a0ed0ce29b5706741419c79da0d20cf29bc5
+Nonce.0 = 6c330857c50137dcbdbc6f684ea866b6
+PersonalisationString.0 = 5b36a0584b687a996e6d2d30715492a50380ba09c5b0fa68a4968a5e155f1c3a
+AdditionalInputA.0 = 2a74b5a9451f6e7e607d7b79a3f5228979399f48d71ef8a6dcb2f853536bc404
+AdditionalInputB.0 = 92ef06f35ddfa17675286e81d755f443d0249879cd777086d43681cd9d43e338
+Output.0 = c509d76427e6c352f2d5fe44c9b245ece37cac9eed48dc8392e0b793da558e35c59876fb6990b2afb6321b8feeca8370b64ef97335aec7d5e0619be85f13964fbf6b736960925e9adc2c5b1bfd31eb9f1a0b457e915c5a3843d411d95738fe6d99e4ff9658646658ea5165f8a1e5c3777192b4fab92f683a3af03f9622e152b3
+Entropy.1 = ff9959921f3b0f311af7165f90f69b0b677c2ed1a6e2f92844b6c805a4a7020e
+Nonce.1 = 4051880ab2d0db4542a40589dfc49a04
+PersonalisationString.1 = 1953a947629fbc79ce4323c727466723fc4184195f9bb1018af15fcfa22aee6a
+AdditionalInputA.1 = 8db0de6a5418df8c1bf002d190853f4f88f01384eb791e8c377130353d586d59
+AdditionalInputB.1 = 5fc6d23ca5e8f7cb6f2fc33f3c0041e49b0d41fe9f1f1292cf0405e14135d099
+Output.1 = 3025684ea6661fd1696beb6df0585b647438522d9c712c0dbbe9b356139e03c8957f6d3268f447320568b20caea135df9b97115ea7bc91e7f3563a9c80562283a0667409323739801628f965488e5a1e83087a779dba53390a961534901da7b67f968618d76909ff18b30b5c3906e0bb59d6876eac561899b7e9fabe74d69641
+Entropy.2 = f126f51d9c04ea06556a96ec6ad8ed12dcd2bc832acf4d653711dc4f391369e3
+Nonce.2 = b29d96d615b25eeeb1a2070d84b90258
+PersonalisationString.2 = bcf7cbc8e73c0927e66e00afc3b43a24c70fff1e92a6d6bb2c37f5fc246ca8f4
+AdditionalInputA.2 = 16514ee7a0bf9c2fb784de90fc5a52ac72cb7d7e6a0635f4c01683d6538995de
+AdditionalInputB.2 = 8b8f41c3e4015e3f2703a0f2f034eb1503984b593f1e5e8b0e0ba7ed17f2577d
+Output.2 = 8632eff5a138313f3505cd6ed20e59ce2c4843b560f876041171efe5c13a1286fb00f54b41a2c70ab92ddc18810e4a81d69e1693057bd7bdeab55f42486d7c4ceb588d6ba133d5cdc9a5df24bc1eb1ee62073a5de06c522da65b2d524798aa2eb6f56256930d31d72ac981bffcacd5c06f33ed1f1873009b70dac04d5eb79c08
+Entropy.3 = 162a6a17e07c17c1917f8a42c256113031fbcb00a131b34ad3becd1953bafce0
+Nonce.3 = af05a340ab1088ad42615cdc28e27e1a
+PersonalisationString.3 = 91b5ccf739aba6ce49653bef8e67aa0171b5f7763adc881a13324d284a937c6b
+AdditionalInputA.3 = 0882e2475bf8bfb5c4581256cc99256f92261d493704602daba7ff6ce1dc718c
+AdditionalInputB.3 = ef71a7b29ad2c6ae7ced171a2a6f5d39e67e460ae806336421389f99c8ef5183
+Output.3 = c2ef477cc7f3563c9a2f310c6917160ca9cb17fa31b8163ebb71959472b9a070c219205148ac472eee736778cf14aab8fae0a0c8ef48cec8c5c8f51a17aa79651304e33976e6f62d23494d0991e9566dc0b07b70bb855868f07e175bac2b293da46c74b1dc0cff7aa322fba4ab03a1aa2029ea739de40fdd6e507ac5836f76a7
+Entropy.4 = 241646d8af39e2256e4d031fcf7e2fb654b492bea8b5856796da6454c35e11ee
+Nonce.4 = 0d3339bd543f500c688c36b777a46e33
+PersonalisationString.4 = 15118c191fe254393333003fc85ce6d6c659857593a1c6b185bfd405ad6a7b9d
+AdditionalInputA.4 = d5391da6acc380ec75c5e99f177acdc34b13e05339afa5c49bf6869a797f1908
+AdditionalInputB.4 = 9a1248121aa18874ef9bd2b2f1f80678e108f17af3f70b4ebb951ba5cc46fa25
+Output.4 = 8349a0fa7b9a805c2604ab51ef2a993c6bc98a250c0d4dfdae704516a40bb1c3c199a1fdbb887a750fcff07550798183aa6507f5d24e6db53f92b55f29082bc62203da3e4e0bc279be58f7a7eeb7b8622d5f8aa0af3781a8b22fb21cd3527917aabf8101bbd3f427520ad40575999ac1f116d8b3c77f2941f6e8b60f5baad571
+Entropy.5 = ad198f51da004a3fe11e648b56a95fc0b839cc75497dc6f80c7595334b6fd0ef
+Nonce.5 = 1829727d4e2f51813a7f17aad62258fa
+PersonalisationString.5 = 7f0d878a5b774954f525d8d2607972a8c0ce934aa237bcb677e8d0a47b14da84
+AdditionalInputA.5 = baa453fe5d536da109a55dc4ff6fd2707a89f787f03060c1e974071b9ee40bd1
+AdditionalInputB.5 = 7cbb581d62e0838cfc8b97647e7b04db1b78c8703a4587747f653c65ac4a09d0
+Output.5 = c66586515942f7eb5a809ef9d07ebebf55862b2e1ee1fd31e1f3c54f39bfbbfd7a28879f4bea55d48eed2f1f867420d9ea06b1be01b56588c923e473e72f8d18d4ac7e6120885e21c8eea32c3ae0cccdc3129ae0b92756a94a78d9af7c8bb0d3830fd332e7ce08ee2472625449edafa001a068b6e1b572c089e472d0660650a7
+Entropy.6 = f74411625306c229c827b9122c9d4191c59932d98d17a360a6c4efd21d000b4b
+Nonce.6 = a21b091e3a76e201ac6e7c3c7472784a
+PersonalisationString.6 = 69741345b60abe7f78fe30fdab9d7cac15eb5281e2fee8dbc6042971520b4e40
+AdditionalInputA.6 = a472e06c1ef17c091e26681e081c2093f1553a563e513b19e7f51726ab665a78
+AdditionalInputB.6 = 2882a7b34d9cd9455401afa4b9e6770af410c0cdfb0070650699872d89a052e0
+Output.6 = 53969b2d1669d2a9d74a617a2cdc443dce8f5e5b78df5bd1341aecf49c6fd1818738ca90a60650ad3b25bd3a85d6fd539d399fd0eb89732ce30aec0bc046b674ebb8f7f42a3a40c013e316b2e437dfccccc5a3407688d68a7954754b316cb0a27817418092bf181dcdffb662345c4afc70bc106e1a1009c62e4c02ac68bea160
+Entropy.7 = 04912d87d697225c1c06236752d9965d461bbc4b6f2bfeaacf7fa4dfe4845b7c
+Nonce.7 = 9876c69ab89ba243bf526d7e56fcf17d
+PersonalisationString.7 = 50766199d4eda1a22ad50520e2b15efe1d557198d0dce24256b316da3b676904
+AdditionalInputA.7 = 1fc4ba8d936c8d923218b0c5373f59ddaa87026ea9138270199b67c3aea60c19
+AdditionalInputB.7 = da9745b63be291cdd7bdc7592c72639f4b1ac555ad4722fad01de4d3139d611c
+Output.7 = 233f2eb59e53a468d5c939e2cd8ff0f53c84a358a1f568f0dabe8a6da1f05fefcab09084721e04e94dd6ad5499b27f58c3623f38a058626e36c199df9d0c4f7d43b7aaa91694e8fa005c20ba1185f562c766afdc46f5e0b21ee8f99f1b5d74d2a5c3761712686360457ee5f39e401cf13a7860465266885c852c7e0047ff10ad
+Entropy.8 = 62be631f13d81b1e541266db7e6f700d20e57507286194f9df24ae1206b194bb
+Nonce.8 = 7c96ef19f0a493ab125a6ad652907f49
+PersonalisationString.8 = c5e7158a2f998a0d7a86fa200095658f06bfdface259e4d834d6c1527d77a005
+AdditionalInputA.8 = 7bffae3849642f4e4c11e2c9d0661af728da444e84e9443cf08e16901fa6db5f
+AdditionalInputB.8 = 2002702e7dbc7f9c6de15c8278b45fbfb4d49d4380e9449dd7954e85354968e5
+Output.8 = 3206ceecea52e28e6d9d03394dcbb911c24550863b296213083c6c8378341c4e249a74fb6cc5076cda6ba3ea7ef4986fa11ab85dfbb0f0d1e482264a198e0d5d2237a6c8133f162df2ea903c77aea9869199a72b2b832b50702d2c56d2acd89721ab1030a7717d6013f1094094932776eb37bf4bb312c0d5890058035354f4dd
+Entropy.9 = 04373d0851b92846756c9afaff843434e6dcd239e30b004be5e028c3b2f980d8
+Nonce.9 = e4500e5872e8172297637eab7c397a0a
+PersonalisationString.9 = 335ac62faf112760a094defd1816063fc6fb9737eba95eaf6958afa58791e987
+AdditionalInputA.9 = 23e90c1e4d86371d1a18dad03b65e773939c1acfd348d5560440c8423ca9c187
+AdditionalInputB.9 = b7bf74b8e469f17684975ef1505074c31111cc8bf1cb383e983488b55d2ab652
+Output.9 = a57c021e65c874f93073566d8c7236ec4e4052bed18dc16adf4932c1bce124fc23db979af66feb3bf195d9037f0cc2f8d4c548453046881aaf36429fefc1177b8646306a257ffe402371b0d246f8c498f5e64fbdc41a3829c8e8c3b885e0ca373a634889f7adae7f320aefb129159ee448b1b31ba1cb7f4ed0abd8dc52029350
+Entropy.10 = 1b3d9c778d104ce50cb8a355015e0f844a24da6d8f87f411df25b125f3023654
+Nonce.10 = 42dc85ba551339bbab7acc35d05ca12a
+PersonalisationString.10 = 9007cb64fe8c835f896f7c627d0c8c629a3eb498b914da68a6ece90bb8603708
+AdditionalInputA.10 = 959613514456db6b097a3da7f2013b20838d3f9e33b93b420ab9708faea7ff55
+AdditionalInputB.10 = 545c76712a388957b402beefafcac4af90c4415a5b25af0deff0c399b75926bf
+Output.10 = 0418769773d2c54d1e949960758b979ab5821db817f923ad7f4e30db99ddfe256af450d25226ce59dc089a42a3ec14d4852e67c62dcdf49aa1533f8d764771e24ea67cf3a891ac173727598e5aa7838e72c2a2cb1a880ec07d8e85c3b4c36afd263ab5697c777a90ec1505275d19b0902ba02373b1892473b79005c5564f84ac
+Entropy.11 = 3d6ef5c299ef4e48f9d6062692202843517883fcfbd8f04a5b1d8827f03e8341
+Nonce.11 = da32122de317e8139ddfbf04bccee593
+PersonalisationString.11 = 0e17a64f24ffa899e7d1187311d1d15bdbb188efafa2747a961db871b2a6814c
+AdditionalInputA.11 = bdfe3217d22d26c594e1c9f294dc9bbd0524a4b986ebb0b961a8ba776c90696d
+AdditionalInputB.11 = 833d96a820995207045e7be63024668cd06974a8e5cf0b5e51ac786954dc077d
+Output.11 = 1a60dc419f613f8dd6ce5c1ebecd57f94c0c2d7d4a76b0eaf14f06c77056f4d85ed6bb91f93d007f73cb1628113abc7a34c6a2cdd7dd80ec14104073e6eb72e61dcc972b4bde93d298bfe12460c64dd83738fd2a39bd02dd52c910a4192fcfcd392d96f8fec83ab935d5b4bc53fa8e03ad080aa279956d9cf3a5baedb7bf46fc
+Entropy.12 = 307095d3988a6784c0de8b62bfba14e76d0837497608e3ca09f40855d776ce40
+Nonce.12 = bad3299ad3c9f0b421f3920156f84d43
+PersonalisationString.12 = a29a09d32283d14ab219a9ddb9e16b0b1ab1d0388d20e4c67bcf0cfec09c412f
+AdditionalInputA.12 = 0d0256993bd88c8c8bbd46c2d57a1e691aa8d63fc52469f7d8309e984312d2c2
+AdditionalInputB.12 = c35129927df9da0114f9f4bee2cb0bf3f40703c4ae373c2d5b365e4d9ca47f07
+Output.12 = 45a5acbb705603659ad55439707c31309ba29235c7394309de2fce87fefde33eca5cdf6eb2d552774d5a3567e69de17336d906891b50768b9a05200dcaab488fb626a64fb95ae13928971db3d4d5ec98cf89e72c2b8e0bdc833e316c93e06559e72d12343ff9e6340f6c6eaebb8f4bdc9756d24b25e6e18f0bb71440aa60c36f
+Entropy.13 = bc8ba446c68b2fd3fdbeb8e477344258a2ef2255c3f14dba02542bf51cc33a85
+Nonce.13 = 5d04e33def6b5ed8732dc93bdeb5000a
+PersonalisationString.13 = 26f7c629dc1c44dcc3833474bbfd76ed047b863a20d809c0b5f00eccad3ffe30
+AdditionalInputA.13 = 2eea882d53ba94dd7ec57591240c8742d4c0201de62ced053f197aaf97b9a44b
+AdditionalInputB.13 = 850a641c6a528478e9d21e4c1122159658b9925118c20b1f08daff3d1ddc6163
+Output.13 = c6f69853b30a92c617e2a048df8644d15eb4d4405f4c2f9eb532e8e012e57408b5390e2b71c6e1c67584817270cb981358c8ce4e211e313b5f98b9940b6b7b803a5c9eb7a5487d2f2d67fea38b45bd5d9a01d22fa0364594d21c1cb8a8f74a042dbb30ba31d5d9c4e085deb09868944cd1ec19d3e4dc9c2f1cf113eb9b116160
+Entropy.14 = afe8f1aed0e9117f195e425b7315f05f8635297dedec8b41d13e53b2d852a924
+Nonce.14 = e4d356f3e11f31d3e4e6e295d15f042e
+PersonalisationString.14 = 0806cd80140302b264ac5812b74d718d60d8b3a9b279c592716a6a3d3f7ab79b
+AdditionalInputA.14 = ea12ddcafa4f578b8b43337508dd8627844d185b10af7de7e907d113c6d1fac1
+AdditionalInputB.14 = 0cc670275cd2b0eac5df123eb1fd73c2f2b093b76806943918cf49930fa97515
+Output.14 = 88dc727007c0e03c8d27d00c87876f8990b271964a5275f636ecd7f18cac9c869e5f9df5fb2d34e7f89c2e9819af562a706a03d9be9318896f5ab16573aebbfd94a681cbf27e7202b8674437667893246c267785d0deca5033de88a61bf5158177391c2e3232ea6f812c468d5629ed9f89ad0bec0f6c7a469f56331f9eba1cd2
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 10fcf8146dae3b9128b9602fd61a2a6bb009978bc9722a85bd60f8d30b83f552
+Nonce.0 = 6baea5c15e9250c9db5c09435c4ffa73
+Output.0 = 24ae5313ea0103b4b333ba25e22457259a41f85bac9db81b6b55f1caa621557ede088d6a0c4819a253c58bc562e00c6447499c091f93077dccbe8e911f9475da659ab9ae2a931f66065f67d8c24047be1481e706ea73ca69765a65f9dcb591e1b73a8bcf8a475ec946477b8cef12723c2742304578f0bccd7e513b78ac94136e
+Entropy.1 = d77be0a5a4fe465537546e994851fcab484262f4c697a2adcce15539eff5e675
+Nonce.1 = 8c752466ee270cd4870f5b4d3e6567e1
+Output.1 = 227673c200cb5d2b60c44d7bb90c43a8b06cedcbd93c3000651f8fd0b075d56f824aafac1c6cb892e75db3be1ce0cd65eb2069fb58adc875f098d8224cf62d4c04609f4571abbdcefad66c461a0c3b893f2140333ee4b8a89cc8468f41748fc565fb65798aa11e030df73a285407e6db30dc4a62f9bae2a7b42203bc8a6a4917
+Entropy.2 = c162e8a2cdd60c3c63145741dba3976d08793c2a9eefe422ed2790f0388a7a9d
+Nonce.2 = f5e38686bd46f8841253465bfffacfda
+Output.2 = 63701fad5563373bd6c3ff38a1bb7c8e5bd3a88b4cd182af534c3a120317fed5303efd8002709da280a17b39b506c4188f0eca9219db90868e3780f462b95902cbbd339543e41b8a98eabfa31399a0bcea9e8201efa961aca14a888d99556da529e72bb8158f855fd8c161cde32d130afd8c8691cd81a785e85ebe212dfac0d8
+Entropy.3 = d44e4e3e5347e90b4d2ee05888af66da3c26e1aaa53ffe764168c53f4e8c4777
+Nonce.3 = ca8495549e2bc06e444e559ee0c2e259
+Output.3 = 77356279c3c7cac6f804f32c496078604db25290aebd9014fb54b2c6854134f11f8dba3290725c97a6908bfc266563652ba59404611351c4b010bf2ed2d53e0cb5bc9812a27919e0db208b7897ba426b2b0f7c6982a6c3d3d9343093a689038d9e695449ef5a5db0786cbcb9f738bbecba27bc9310c62955a99c2a079b3f0d64
+Entropy.4 = 164eddf7e5ac3a97f12fd9dcec6a2c28299fe438b2f2e528b85a5570273c49d2
+Nonce.4 = 6e8ffb04f424e4a44cf9ef1d23976056
+Output.4 = ad381ec5b480bcb139067d5c6fc34fca074e7582bbcc2950de130fbf5a71ffd66c79a5366bed8749a2fcca8aec48738024b59af4f50a8ea435daab467bcaf8be0b340022bbacba80fd6ce5dc31e83f86435acb4af5ac6bfd7ea55ad66e99c5d77332efaf734560def68562f44530a4006d4d861daf290a10e22305b4e629e716
+Entropy.5 = c08325886f63c7468875930cdde822f98bcc5a8bcc9c3d3ddcc93b87778dcb8e
+Nonce.5 = 91b70fec62c55f130b605687773d1ec9
+Output.5 = b87be3fe492519398921db91d60ae31c99ee62069fd1b36d8e5f2e18f832ebca16e72b88c5898b27d8713718cc240b4517dd2cba73cc00fbdfd6cd94eb9ab2cfbd4c276b68881cfc9c612fd39599d73570a4614353795a9357f12450bb1c9efa096dc45a203c11291aadd765eefcbd20d2af70c51327453b4e8c3d67f13557b4
+Entropy.6 = e5e81b2d7aca827c8afdabf6d1aa2fd0e83ea5e14f44bca8210f70a5ba4a6efc
+Nonce.6 = 0a48b9ffba4ec92d4394aa47b3b5e76f
+Output.6 = 2f9b61ec113842913bccfed32b6b49ac99da8ed983d66757044b7d8ff01953a444527b111f78af5e2be174772008084f17c4ec950e1fe050dcd59c8e67f83338587e134149b363d46bbdc71fb5ca402a0499c72782795b128a2622d8c4934f0c4d9a59c5c71f28d6da1daacdb4b5a7e9fa7cc57ab9ea0bac9fb53af8d03bd906
+Entropy.7 = 2a0e188c8c89586dfe41d99664ca7742a6351bb359d9f6acd1aef946f08d442b
+Nonce.7 = ed97b1b9ac5d5d9dcdba2f83d6571c8c
+Output.7 = 1e242848fd1ec106dba9ddf8df21712872c1e6b99308f49ff48edb51e5d3af5f2d7f2347cdbef284a1b5377ebb06ec0d1318d2cb21185a0892db0dae9614a0e8886986ed9d3fdc2a666c7f853def036fb0d4ee3e4a0ce5a716dccb486acde448aab6b11789440c72902ba4a8951b486575d8d643a9137f44d92ad499fc2133c8
+Entropy.8 = d994f45a7cc96c251231be52fb9a0ee71598bcd9ea238d5e3bb0d9024b109790
+Nonce.8 = 960e6914924980f39ef4467995e7acb5
+Output.8 = 1e79ee0fb78196863e08ca886b756dd527bb26ffd8742517ec5b2a2db2cca7ff3d0141843b31500803d93d3081f6cff618d85a68b87eaa6467f3a5d4a8faee15494bc67d0e20ecdf0c045df362754d1eac229ac08db652421590481482c95469a6ff0d33c82680bd24879cbaa3422ebe2c21053e90ce3da7387f1a8ee2386520
+Entropy.9 = cc1b4aaaf4bb4e6f780c01387d1dc96052b9d31df08ba65ffe03a3b81d266a7a
+Nonce.9 = 6e3efc6d37a59c41b722c44ff63228b4
+Output.9 = 9dcc10acecae8b398c336fee4a041d5ff8a17b814625ae8425e7c0544864985d63479fb89306f9b10a2dc6b3d125729b5be30d7657203b869205193507f495128f456e167d8ba6d61471e5306faeaa2377c8b5ec2d02a2e78e3980b5a980d3c3d775908cd7e22c84beaeca68271df7f5b9a165fa5c00ff1d1eb9719c6c5b480b
+Entropy.10 = 309d4fb899d41e6ade625394ffdabd2eff54a8894e5d72440c2132d51efeb9f3
+Nonce.10 = 9963ca2c47c1373151d4aceea538e81d
+Output.10 = d8e507a090a690bf6dd264ddcf8440202d6f824d43ba695124a9bbae11486661fab6e47ca402d50d56307ded294c94ec0f3ac9f77f194fa3a0568c8729bac5a2af5687d0900cf8f173cf1e6b06bf1a1b319e0f8674ddfc97089119474a76bfe7f1d8607d667ac786de8f4f582b29deb9b984f0a3e07ea16a266532bea581e0be
+Entropy.11 = dc50dffd0059b869f4c5c1c26eb84e7952ec88acc30981c22bdb3eaeba78573e
+Nonce.11 = deb4925ecafedce0a2b22d34cb2c4db4
+Output.11 = d439604e338e75bdf6913fb60bfaf55f351f59e6c053dc0f5b2d511f810f1a92c2c419253e8b3916f50c5e9c0eb562f78df2ec853b8ae11b5a13c08eaeaea511b2881232504df077ee85b401c81f472aa1f11c7d039eb1a94ac3637a23ac2930b8fa8147f907868b94eac0141869da3c87931735bb5c52f420af6babdc5f7270
+Entropy.12 = 92fc3bf974984f9319909b012857495678e321005b3719b20a29bcb66aa0d8fd
+Nonce.12 = c7b8a5b55120c311a7ce4d246d55b3ff
+Output.12 = bd6dc280a58e046bb49d05ed62b3569d958b8d8a3578ff341f142c6903f1f927820c3ef4973abe202fcc720e8b672d68c49be711bb21bbc63703e62f91ccc496134a660e7f70e3d105b9f51a75b3c7e0b029749eb6f58acbd905abe6fd38dfa7d1a3bbba234313278265d2c5268641ef76e920ab413b8c2011a94755cf809e97
+Entropy.13 = 5b1bf9aa49da3f434e5b0335866131e3539bdfa57e039a2e788d9144dfda66f4
+Nonce.13 = 3e30ce4bc1b60bb53d0bd4ca23a2f638
+Output.13 = 885f089848ae891ae62153773b0ccf4711563956e50b6f3bd4f35d3b55ca64b528146f28704bd2a81b11b644cfe83709c3aa038a062f4946121d5a71c39735ccdea64f50358ffe71cb015674c351af290971c7e2cbb8e8fc4e1d24132c1547e83ccc3dc64f4991fd5e317b771eeb7045835db0fda85c719b03828ccf1d001ee9
+Entropy.14 = 6b9f904ac4b16d36e06a1bddc501d7ef98d5685c1ceadd0a6e1622e0c1e73716
+Nonce.14 = 4a42f39e5a241a2b96db29055159c91f
+Output.14 = 785014b0460831b7b67346c6997217b0f6c8e7313687ea6ff4d0b09a0786bd6ac362a0b1ddc6ab8c9c624625a379cbec7f11cf30ddab23cdec054b986175cdae0ca4ba4610e0711bc94e9ab706539d5fa2c1a4fd3cd49042696b58dce465f8e09a200e7d214cda357021c62248a01aeb95f8ffa8bd49d354fdccf4c71eec3491
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = d655b2dce5be6c88242c85aef1155b8b8a191de6565ead972f6199f370116296
+Nonce.0 = 4aef212c45fc6e4fcbafb655a909a153
+AdditionalInputA.0 = cb28b3e5ff3b6f72444c1c1df2f6a288bd3d8c77d26ea641af9e733b5231630b
+AdditionalInputB.0 = a2eb20f07b2514c782f71d9a3b9c5a41420d7a8bf172c06738c8d2a6b86b8bf4
+Output.0 = 2990b9c15396e07ea7b03b7904df85e1a0115c55a6db7d710147ddb4fd88a0d45cfb87f77ec51f58ae5b7659fa62b1a7e29697e8b77b6f3d5e56e0cb16edbea0e7a4157fac157a57263e96806df0c095d7e1a52a29d941bfa8934f1346a3747e8ba4ac48564bad03abc9c67a418954d9658212192f456aafff6ba7802d4c7c76
+Entropy.1 = e5075419dc3e8ef44b2f70de3cc4754448cf310ce7611b5e22664ccf7f76a45f
+Nonce.1 = 459551c770cb5738d6a0c9dff5a885c8
+AdditionalInputA.1 = 3fcca6b0a9d76038dcdf653fbdb9ea1c974772cf502cad722b0e9586e7095fa9
+AdditionalInputB.1 = 12813e4f10c6b9c4c336b925acee74bf8f6898985cf2ad344f966f36dbaef5c1
+Output.1 = 4ada3d40b220d74b49cb06e4a521fb9c8842df180df35c7305ae90cdac41092818fbaf4a7009061d7a47d9b59a7fa0ef571516bcc1a6e3696e22d75db0303fb60cf9b7f6cfcb433cf7066640557e755aa8acf44752b694aa6482550f00454c7c38baf071f52af82723b72ae32d5cb1db9f08b8cc9938cb41a01b572e1dfd2031
+Entropy.2 = fe4e8ef17eedfeab58afc8408657b157d237dd5a3032c3384451c645d2e1f032
+Nonce.2 = 04f259b71a64f449a96ce8bf4aaf6640
+AdditionalInputA.2 = f0c0a62b9457a43ac2055ad05534c0e588559e97042daada79ce544145cab762
+AdditionalInputB.2 = f3fb563d2743fff9be92724f07b36db36ca315b46aa58cc6e852fad274ac2882
+Output.2 = 5431db2c241a02f4052065e3d9660d78b80e17d87bf4bbe1a2607bda5066a019c31ca77c5de700345ab85d7e7721fc225bba3af19a211f3d7dacf9c8636b0cd4d7cfedce80ebda6a3172fac658145c09f84324d42f40b0d9646297e8b05adddf016cf99c82cb10570e3009de92b7ac0033e0d9442d597a8a12ad9a540a6ad8a3
+Entropy.3 = acc8cce03d6331eee00e2f92afd0e57af6d334dc09f1f12b09531aedf1ff97af
+Nonce.3 = 0490c0ece0001c457c37a6ac2aaa9c84
+AdditionalInputA.3 = 7a279958ff7353a86d21b1ed8da13e82dbaad5b6ba9d575d2438ff78681e78d9
+AdditionalInputB.3 = 45fb4909381329cd115e20de635c17c8aca86660d8261c8c484726c6b7a528e7
+Output.3 = c70252129ebb4eea5d8f16d74cb1bc9158410a6a21f9d531ca72753724bf65a8524aedd2e52e415a94da0bd935e8a70b411e54ca27c589bc39a7500113d693274e7ed63c1efb5d0e6ad0534587ac465bc27650457b76acb1b5edfb8e84f4879d65a96d560578a6a470f51e746a0b6ef16e905f523ee75c6dee7558042a5b5344
+Entropy.4 = b4c0cc8b22ff8b0964cf0bcbb346698a55ea7919a46bc3f8b3c1d15ac8f4a2e7
+Nonce.4 = a7a37ad52402287f358ad4ba0fe5f65c
+AdditionalInputA.4 = bd3fd666290c62f6a983165e0a9b0b6c2c8eb6c103f0f3ae81182daa0e23ac09
+AdditionalInputB.4 = d57fcaf6e2ace0ce6d593130c3981ce85b9e6028bed032d161b724526209c930
+Output.4 = d2517b96327b4254eb58ebc81d39ab86812a8e44ef791b03db3da09cda50235483708f7c8a43a2242b90a31b0a46cb3a156731d7df131ea98ccb34ff2e8c31ed1d50735cbcead7b897e68d85327c88355216cb0e9f5464e9e31d6f19e3c65354092de3ce7305f37bf6dcfda024856b4e40ca5363db69de046a0744633c7174ef
+Entropy.5 = 33397b807ba729011829cb675eb78e0f242760e4d23be6346cc4a848c8652264
+Nonce.5 = df486ddf24880a5f4e215b300b6a78f2
+AdditionalInputA.5 = d0bc65dda5f4cb52a3f29a0d5795f9ff625dfa99bb18224ebcb1942409afa073
+AdditionalInputB.5 = 05c67b270f38894b0be81004cac9da1e63fc5926e984a1e9ba74f683941b5494
+Output.5 = 01989d154481cac57e014d92dddfe8090c408f4b429b1e7ac516ae3eaa1f82b5edad323a438b6411b7ce1387fb3b5cfb8e0c362bc7a9b3f415f3c70ddfd85bc70c9c7b206920e298d83d9926e5d499bac651761187bce386d07775941e535708bd567f394412caa57142ece8a6467d9c2c6f92ff70eb8581b6da36e047621f8f
+Entropy.6 = 8acf2e4ae9db6969555b4bdffddb23ebd57e95ef12e1fbc601560b95c33df434
+Nonce.6 = ba6fbc2f089305fe03043853aac64402
+AdditionalInputA.6 = 175e6b4b49e4aecd13c597210eb134231807d59df4166a08b65c993539e49275
+AdditionalInputB.6 = dd14a03bb1c5fdd814dd26427cdec4374b6c9fc33961a825d5fc806171418d76
+Output.6 = 5ea601cfcd6ae2be5416536c090fa84f890f7ebdddd25aa4e2a6310134cd14651ce733a4d51a0fe272683474e0910fd1802f1c1e1a0d5e1a4cadfcc4a1ecf125ed48bc8ae751c07b8aa6052d6ac4112c3f9845ca554087a8b33ebe999743a9e02d2904a2f309783eeb78f639846214d95805e69531617fca284c911937bafcfc
+Entropy.7 = 7e4bc7f6ce0e75a2c1a9ac2816fbc72fb47d36516d116e753cbedeb3098474e6
+Nonce.7 = b5a7315add24016885430c4dc66db469
+AdditionalInputA.7 = e32bbf798ecf281397138c0948070a7f84b99b700bc37e0767515768bc172a94
+AdditionalInputB.7 = 343c58ed4dc4eb6b9d4b2955b9a9c0af8b2cf150861b75544e59aee5b288a6ee
+Output.7 = 517eae10ef91051ef43eedd77347777358bcaf7b7851a74e1ba1fc42471ec1a4aaee4e0cde41fb0cd89b1b30aabb146b8f267dde63e875ff1a2cf3414b5fe3f3b22bc7dbdfebaae3432a620f1ed7353970553748e2188f99e0d081eb6910009a6404701bbba1955bd33caf6f8cd6a117d55b4202180994866f6e91bda647a512
+Entropy.8 = b467e6551dab99051d2273b89a5167df8ae9a85d7c8c038a1c9c36e8f72547af
+Nonce.8 = 82e5429a03e76b1b51eccbac296232f6
+AdditionalInputA.8 = f0fb787b91336de9bed6ce86398fa84e0c3a640fe904efbc4b80bb28f77b656d
+AdditionalInputB.8 = 36d776f40a725de32a94bc516e9aebcb1058440020829d32a96a4fde1b8c02be
+Output.8 = 82eed6652c2b374ca8827fc0772c0bd7ad22913dbf84f5808dfb1cfa717d996d9638cbbf93f5d6b8c8b71186efdc8f0aa8a7d2c7afc3b29a0b4790b317742e40c5584842929843219b5504f4d8af002518fee33fed858615b3151601c4f6206545e257045b1cfa7a8d6f22097a734918d0f8774e4cb87fac1b93e071e5edc393
+Entropy.9 = 7b87eb8c272b101223ae3b6f2e7195a88e37a85136fc7a9f7057826ebe604e3c
+Nonce.9 = 71766afe4ab1a1aa178854f5b5b683c3
+AdditionalInputA.9 = 0ba1674cdefebe59a2d33c06105dfabfad70ad76153988b69b2bc10cef7d1a50
+AdditionalInputB.9 = 78e45ebf6e2032c437fe7f9e3310b5ede1b0547cae5b1372cbc69a1744c85930
+Output.9 = e442973e8f6b9daeb2740c5878ecffcd1ec1afa28a32b76c5d93a0257713e3e198dfcd4488b17c54c2fe4b014846abdcf2c4f881af2bafa7cbd16e17f89ce9f3bdf8a5810fde977760159e254ec5ff098df410a5f27e35fba25532add23227a5cdedae75b0f08420568086812fac85d2bbe055b4c0847e644ad227e4d5f1d719
+Entropy.10 = e465ead60ef17fe195a6bfff3c852d7d5dc0ce0397c8e3fcaf16c042fcc52503
+Nonce.10 = 78d40b9b261f53adf952b9b38c2a46c7
+AdditionalInputA.10 = 0d0f507da569735731a31c722818699bf682258afacee50a4b0dd6e5be24a868
+AdditionalInputB.10 = 69157422c69d110ca6f34592dfe3096f5fba3c5a06ddcdf86eadc34bcce5d427
+Output.10 = acb0d6ec609f8bfbe92fc5ad23bf23bc2ddf625374c09fa3ceb1cf162b4952a696d9cf899e1e3622820f374d7e1d33f61109c9bf57ad999a9d55db02be669d999975b19c29c34f22951dc922954253d18126e7aca1e6105ceef1b3ced0afdfb196a87e8aa8a8eefcbfc7082702bba3e3562b183d1ca776f219497ffde29e702b
+Entropy.11 = ecdb60558a727c176cac1394fe81333b6a01d73bee0ff98575670a9146961532
+Nonce.11 = d9b2933300f20e5755a15b8f53ae0f84
+AdditionalInputA.11 = 77ca4365ae20c488297a08fdb134137ae4048a4f1769c873375bde2984aeafd4
+AdditionalInputB.11 = f72c33140e7f95c1257dd5cc7150d0383e23c70afc44ca0985741ff1c5d7bd69
+Output.11 = 283657e6d2effde0b190509c70b649ab3185db1c0e305dc796c215ac06baeaeb4df94c903a6eed2bb713fdb129ce3638a2d4364401aa3c79bddb1017bdc5f452eb469e6780a87733207bb2f0ef6df431d8143c0310e374c3e3df59f233648d43b0d954f0cb8b40b733bda65d07a4b6e94fbcbcf409c422208a208343d8709250
+Entropy.12 = 911929c3ffc14a8ecb5b26586edae6ff282bcbdaf9c4d4907f6846a2562a0c3c
+Nonce.12 = 4d7a46dbc5b6ffd0481a3e070d5664ee
+AdditionalInputA.12 = 4ed9f3b31507637e0692f2f0c705b41b0ddfeae0498622517c03682cac40d7cf
+AdditionalInputB.12 = 3c529fe88e7863a78cd4f0e893b56d8b780723f2b579dfb855b7135dfc04090d
+Output.12 = c6b33017129a5fa1ae98855377447cbb51274780ea819f322e3180cce3b92abd0ecd188bd45ecbd7f2457b49fc560159f70ca07a26f6ef199f5f05673a2a153a4c2d05b2db11cbba731a8cae0074434f743eacd8de46ca73a70a105b5a902c47e6a5c94b55184993ab4a11a9cb9b0914c3e0cc022663c517fc0ed8bdfd91a435
+Entropy.13 = 8663a4934a27f7ce257aa05f3e7c64ac4478481f0c822e2e5a7ab17208f16965
+Nonce.13 = 1a26322dfdb96fe4a881eb32efa4e8af
+AdditionalInputA.13 = 43a3a82254715ff38223b1bdaba44167a475915782313bc3a6403cf470f53158
+AdditionalInputB.13 = 03b74c720e937417684628992ae20f9058109bec1c40ed42fc782c83745ab16c
+Output.13 = 38ac18a7b3e8b4c7ab345281031584c8ae55997bc99b3bb16b9b822acd2da7e07b82b6bbbf1aff01a091252658f641de11706fd00939335f0fbd841b7cc8229aebf0abb5ae1ef08ccd9f9d28c3e11246e8ff56b2254d32c5a8f961d17109edb44e4b8f057bd64672b231e5b6a7617f34602174bac27ee405a4815b17ee9006a3
+Entropy.14 = 614eea0aad7d0c66200092a0f8303aa21b3349ccf05ec5590272f890578176fa
+Nonce.14 = 4c4fff769cb2196ad57c9a674db91bae
+AdditionalInputA.14 = 147d51711ae8a420f165db0000d9d0cb9e9cd5447311eed43d7cc9217df97a3d
+AdditionalInputB.14 = 2910968bb1976a1b8ced116e673f408da6fc563695c918ac0a230b0bb800c707
+Output.14 = 357a7269b30ca744e213d894f5c45d0db9fba897e0c863a56062f5018ad9be9f37b8d550014ed68f2c34bf5195c0b7460df171ff3bd4a590578670c92470d876c8de19d48a6d7fa15fc7996be78d3cc8a5c657439f4bb9865bd56e187d5df2531a405e3e0f4b87c611aa8e226b8b0266290f06f8062456a7a4bf0896e4ddd948
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 1d867f5035bc9283f28d1c73c0694f9845ab8cf0183d88675f8f7c554161dda1
+Nonce.0 = 62cf61dff15053a91ffca7e72d5fc123
+PersonalisationString.0 = 549acbdbdcdf94e8494685f00b9845f3de370334602aa41f8180e198a35cab26
+Output.0 = 9bf8bd71725c751cd6e82a288f50d9b710fda83903093efb49b06098fb904d08339a0ba0f489517c0cdfc12e1eaa3ab4caf00374e1fb5c776cb75589b1600b33c60e2d6f8ed29dba28ed08a183257c8b7635f987c037b29377d4c5348a46e0845ef7e13cb682345f99be900b3cfc7fc4e746a21d06754c14ebb5853f8cc8dd66
+Entropy.1 = 28b9d9578a541a44f581a0a4057e0f7150d495ff29d3e8f8fc34bf689bba5b4c
+Nonce.1 = f960a9afcacc864451ddaf6a8b503acd
+PersonalisationString.1 = 68cc3f6f753574432091f165230d96c20797a61f2bf17419bb39251400d980b1
+Output.1 = 1006fd00b5818f28eed75ec1649a28ed20781898fff9c162cebd4e84d3363a1c140c7a110a315ba1f300422542f191ab5239b658048dc701321d8e94dbd12ee985e317d680708801fddaa27737c32e511b496e9ee260e030c64618d40180117faac4a1f0a68359f361d3d3c6cf163246554856c176fcc6642e3b2596ebc59768
+Entropy.2 = 680a780fb5cdb70f9589612d22ee4e4120a073041d36e48ab2e68a71d37cd247
+Nonce.2 = ca385301faed38577c2f378f1aa7f661
+PersonalisationString.2 = eec481b1191d2899498a0cdb771d1315ca8037a562526a92a13cd3713fbacd08
+Output.2 = a23f2ae78157f70dd684b8a553dc3bc16bcbb561037d1d39313ea7e3bdec13c1c7f98091bb0dc8825a1f743696639b6a3a9facc0b06f2a4de50878b1295ab2ba8ac7c38714dceb9d7a3220a3bae3f4c58079e3cdd302f4d333d42ab11fef3b93e40deb44579508232c1028b36001e3e19d3f9d7ba01c149e8c91c773012efd76
+Entropy.3 = 5b0c1030a67d25ad814be77ee43246aaa507583543d0af127af72701ce096697
+Nonce.3 = 4f4bf66ea5dd80e2f8a74e07f283d82c
+PersonalisationString.3 = a6509051d055cd1511437a23c4c4ad604d77f30c7fe9576015a9d7d0b7aace3b
+Output.3 = 80d95ba8500a378bcca272b2d062dbc9203a5e977724bbe4a743612becf097b00db35d08dfb151abe8928f8644bbbc74080136bb209d02a8f5fdc7c1341e60d4dc3f451ffbc05936e201a03281a4a2fab279b664142aa94019b75fb30a2954a877e327728bd8f1aa10fe675037a33138857b173ae96ad2bfbb9efbecc4710faa
+Entropy.4 = 87c8ce027600444466242819326a0965f807a39faf3a0b48021a65ff13ab266a
+Nonce.4 = 136b1cedfdfd4d603d8fc83309eb67ee
+PersonalisationString.4 = 0fcf8547b441ab422f0cf2d95c47cc28e428cf12d9a9ea2ff0eb42b0f7fd1bd2
+Output.4 = fc1155c5af51a61e86ab99c9f7cd56adf24f58445e3fb698e843b949b4662aac552443519dd7ea9d22208287190ae3228f089e32fe4f5f5d1151708dc3993e4ca645e9743b4b2f7f8180417b5645b77a066c114c3c742c3ac7a93b6b34e8209404c54c349f9128d474a0f2cbe311bc94880cc96a071ec1d0dd1effad9a315b31
+Entropy.5 = ad907f38567e95322ed5b3c2a215be0f7194b132e80619e35fcf57b3586b816b
+Nonce.5 = 8631ea64725c6ccc082c3d0af5d81f5c
+PersonalisationString.5 = 05553e60f6063389263229903834ea47dc81aad5347fec7e8ef9876fc37bf2ae
+Output.5 = b03cd5a6df9082f1e6dc342c435ec792119affde694cae8f5b37eafacf973c270344f1d729bc3d9e4c7baaf6438475a57614489253ed7125bb80ebec8672135e8b7372c457d6a0cbead529069872f470367db15d591293321dd1d6e90885c094e0b30761fdc33c0e6537b56a88d1de9d9525aa655c9466e0ee9e1945218f7aaa
+Entropy.6 = 795769b8351dd888aa92f07d6e8f9a04fed7296c15ab6d235e8a8316680fd786
+Nonce.6 = ee62b4927f4c1ccc96e4c76e014afe13
+PersonalisationString.6 = 04c749682fc9b1cc67c679fdbed9632c29f18225873e4e6107661f6d6eb12757
+Output.6 = 662395d3e6b7f213b8b4b59c97be6663da654193376ac232df472354e551edf83ed2737f935dfac99e025ae0fdefa2859d53197cd13d654eacba97b0e13f06c4541e9091c4a52362260a8015a7eece8b7f54f875dec083c16b38ab591372e4dab931171467a12be970e77131be76ad179aa9eee7b29856b2a60037cca58ea579
+Entropy.7 = 4a5e73475c94f15b6d3e2f3a17925077a0f278f84254f2499a4730864e9fa5a4
+Nonce.7 = 6d585a87e829c62df7a844eafe7dab29
+PersonalisationString.7 = 628f527dddae90cbe378425f45c6c2838550687a3eabc00962e74f673578667a
+Output.7 = 45a45ba2ecb6022043258fd8c9802fde9bfb96834e78597dfad861eb0686672de521e2f73956fada2112731dd4d4681c878248997b97cfe5ef41af7ff0d6b1aa235dd815ec7e907840b4d324ce144d6008d76fe9d750095bfcaef07b9b61252c9c2d8d925e950394636232a21595bdd9ac72a4e288884b3c9400b8f282f59789
+Entropy.8 = b54f138047988aa6444e39f1d6f6d678ee76959c8a60dcfbf326bdec982ad6f0
+Nonce.8 = 07d1124bf91d521a748da933eb2e84c6
+PersonalisationString.8 = d5c439bea73527337a3c286475e0e1843a9eaf4c37f2924a802ef0063a6e0b22
+Output.8 = 67aa568db726709a5cc6d5e157a50338bc898eb47ba8cc4b6fde07bda95bde5543f2e2773b0a557f91aa19e450db0b937516af6e80245d3cf60c3030fe8e3924d26f722c17442b534d7bf1a72ac8e0d426d36875e5d6d9e39c0bd607f3f041cd6c80c5a4625a8c3ba92189c8c35ba27a8647d09783aea4c69fa50654eae83aa8
+Entropy.9 = 598db9f9c8e94758ed16901120b063894e3c8c9b49f09084ef5d5b6ba4f95941
+Nonce.9 = e6efac7fd9a7547b465765505359e8da
+PersonalisationString.9 = 1bc2ee7e72244c607173c82de730983a7f919980c3c9ea9220b13c008d21259d
+Output.9 = 21a946737912de5069cd01dddc9fb261e42ac76d69c7c0d583dea9fdb7d464bbd1c4238ff21df42e8079a5ff33fe96a47e4f0767c3b91a1c1b3f415f257ab08d76fa8ffcaac09859625184eb29900637b812c2fee97d996f4910c7651bc587cee8483f1fc699466a30580ae91c5ebf7a75e20262c20538c855c154f82231da6d
+Entropy.10 = f34c4e31d24427b4baf883d84c332922be2d998b8cf44c7ab037730ac50f2f10
+Nonce.10 = 6de71410f79ea1e45f5e48c97f3bffee
+PersonalisationString.10 = 0007d483ccf2b8fb72e7d1d01b087d192acdf644366461af5356e13bffd041cf
+Output.10 = c517a99856ec0dd95556a0f7674deb0263d1fcfa09dec8e3448697e17bee0946d94cfb6979b429fd318a33750e61eb4649c0eb6b77e25884725c74bd0cdf08a204de6bfeca7b259fe0215175f5b7b8b8750eef9a6066238aac5d4144d1ed8e03710cc69d6a87d25ac00bcd0d783e07e819d05cc2cdb593ba535225d3c05b8c54
+Entropy.11 = f086b40e1a22e54642765b231fca1398b52df50232a513f2c6f88838785bb962
+Nonce.11 = 40b44a20f4f3d848d2b8309d70fb9a16
+PersonalisationString.11 = 4f3e71366ef7b27524834ff83baeffa8f736b38135d3f467e7a7afe65c640b9d
+Output.11 = db909bdb459091fd42334d1c59a89087b155f5ac97b02c3249a05d98c16e861b4368b5c82995139b608b7fc836358ccac44d9caed7a38a76c0a3d8462cf714cb3341c7ff21513bfdd0205d0230042004f6262ebd6e33607c9e7540d72e4e37ebdf4057d277031d217cbdc5f0eec0dfa9befd4473bdc046735e39ee8cb99e81aa
+Entropy.12 = fbc3e284684fc31743e16443ad93bccaced82b9959a2aaed7aaa2f9c2e71e89d
+Nonce.12 = b2a22ee90257c40d14f2a3409e7385e5
+PersonalisationString.12 = 318d3a036f26aa3abb7de9a028f74c8e3268197ed0ac9dbbc54d093435230e2f
+Output.12 = 3256410afa0fb106c00a00e1c306c8bd9b8ad77b8b90512a5a7d0c6465417d93466c77408bdbd6272a7ef9b772291bf5d9c7af12a57301bb9bc3a765648d574ec0f3d51b13ceff5b7bfb03f5eca9f320acf107f9c755b45d914ad6beeb3436a1817bd39717c601dba9a715daabc28f35dce70199f432dd35cbeb36be1317ebf8
+Entropy.13 = 306c6de3fbc4696fc0e76b022883f7e076cfdd900a1d34840084633567ed5f4d
+Nonce.13 = 2f7d1ab58b6851661e2073619bdaf613
+PersonalisationString.13 = adb09590e12e09dfcf790763f5a11ad8e9756d60e05272c6b294f58346c8b1ba
+Output.13 = 9a92b93500a7285b299c50f54270a2e0039e6a90ce6cd67bee14a00e3965961b313f6ae16932bdca6da66abc350323b2f8b72a5362869fe2e46a725844b984a060de718538dd0f245e2f2c7e99f4730fc2061dbaf4833a9bd7a61981d8cbe0283080db13d6c4613369837c72f6a2504c731ca9ff4c7d63bdb491a0a7795153f0
+Entropy.14 = f6c327302f4c09fdf6a622d304f5ba778020b00fb31321193d9c3feed76edc61
+Nonce.14 = 66ad2a0d5de624f3d709cc95e5c99220
+PersonalisationString.14 = 6f7f8f1ffdcf859adcf6020d5cffdd8e3e1bdcaef0b22e9e61384b888f1b3537
+Output.14 = 1bc4cd76787f031df8e4f592f56a845f7d8aa200aca0b910e68f149cde112d0f1e127faa7fae25ca4299eacf9e49e132f3e4083f1c5fb0304b714f06cea122bc1392cbe18289d2411ae08642a9196b654a8b177c127b9215f9df815eceb254b8d9b4f632d25d123ceec686124e58b3606ff1ce51fce0752f42232c03694a1d8a
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = b1a1a0a1f13a67d9d35441c96f8662e499f78a75b1c0a5c2e26dbde74cfa8489
+Nonce.0 = e0c8a8ad309488f2043ba4afde664d10
+PersonalisationString.0 = b54c1b191e08d33957b9e42712df4e64c8ee9ccc5c2e21a64748b36bb82315ed
+AdditionalInputA.0 = 7a57a675c9df3ec61a20194a34fbd9f75944b36ac33f755b5a4546830011f3f6
+AdditionalInputB.0 = 83e57b2d0f045d63f01cf2b43ca38b2b2f043fb2335f1bb1b571a813d561ede1
+Output.0 = 884328b4186f195800c5896fabe2a0cee49151678508c71b7ac394981168535baf1d6cb5bd6e6a1bb32af4ebbd8ad74cdfb5a6339b20c3cdc671fdca118156735979da11ed1e4a3fda76b4611407f6b8e80a3ed25802a4d431c01be668c52d37cd5b4f1cb61f57e3ff5ce0c374e2554e9ce311426a053299c3c846594e4bf536
+Entropy.1 = 3a12416992753074ff1459c565803a9dd38f733b1e609a0d8529717edf9967af
+Nonce.1 = 3a9eff839b5a3e16ad9754b4ca9fc888
+PersonalisationString.1 = ae8fae6429488ce9cbc42f6ed589107a28a93f47c4f76a4ea3c0d8cb62530a50
+AdditionalInputA.1 = 258634c87d0990169b2d36f418ab810fc03728406581c2f5d0baaeb9e4443ed3
+AdditionalInputB.1 = 4111d6bf8b9b9e3bbe9f9c3c412c846ca2628249cd1923a233e10ed08bf81872
+Output.1 = 4869bc773ac8a485aaeeee27ac7c3b6ddb4671951020de82d31005efe399d5e42eb4b6681e860bf7a75cec554bb93c20379fe61cd618aec52b934f5673b48c0dd79ace33854c30adcfe254921c63b7092636873248f004fa8136c6724d480e5a30786f281610ab29820f0c83d47e70b8f67620090bcede7e185ca11a75765847
+Entropy.2 = 3f6dfbf0dddb435f4918f8589a307a13b18b5266c968d16e1c25deee80dbf27a
+Nonce.2 = 6136d723b92eb98e77691fb67de701b8
+PersonalisationString.2 = 90048b185cc1d7432b1221520bdef6dc4156ae35920e3abb541875d7249b6c06
+AdditionalInputA.2 = 8ede7c3f39be4edd57d351c30be8998cb38d7686eb6cc1bd070f35d792a2fea6
+AdditionalInputB.2 = f6a8f40c943d3c40e8915738fb702f862cc105f94831b794bdb606e86235f394
+Output.2 = c19b388646174a0156f3ec227e42664737c735fa69b587a0534f261eaa65d7c533407f071e8fcc81f42d085fe9f9543aaadfe060340bbcf4223220d0683a4fcb89a7c69426d1806d04cdc2489643e7e133579002aa48fae5792841119065a4f8fd7209074298ebf7fb467ba52cff2842a36a85fde71ac4b129fcd109d9d3e967
+Entropy.3 = 997d371ea177188463c9ecaf63ae2ba867d8d448c91df1977dbe70ccb1f6cb6b
+Nonce.3 = 20ea48799426051ba13939653d9668ae
+PersonalisationString.3 = dfa25a85675adc25db3570ec790dd7eac9e92b64a5879371e6c67fb3be630dc1
+AdditionalInputA.3 = f68a5656436c9f739c72bf831da09512d79814445bdd9c1801ea367ce2928e0a
+AdditionalInputB.3 = a0ff3a93a1626935749fce8c63216492123a96fce53098787e2ad4bfc3b883d4
+Output.3 = c27f8dd3df5ae2131dd6cc7e673ab0edc84eedf3dfbab0e0c871fc0b8050eae21cfd437656095b25e89fdd35fb29d684e342a0e882d4967db8feab6c60c2aa8488045be63332610b0b5779825eecc6283b066ecc1df976c283ce8864276e7560e53167721b4aebfc95441717f7469cbb2cc0d7e082116e201278252602026ea0
+Entropy.4 = abd3ab8031c50746da7504c8d6e004ffb9bed74ced3365423cb76149376817a6
+Nonce.4 = db56167358e4bcc8dd261f2129879d6a
+PersonalisationString.4 = faaf7dfa866a726e635750e7fbeadc268f2213e70fc59082b7c451feaf902fc0
+AdditionalInputA.4 = f10a641ddb688473c47ac20baf6ddefdbcd9805776333481acca26c61bd7ed2d
+AdditionalInputB.4 = 5b849bde9a82cdbe65ed6efe5b49cdd0579b40c53d3014eab041f7cc645db05f
+Output.4 = d0c6b5cf0ab7434f9e6a9b7ceed29ed9ced755385c8a66fa9d448bd7e5b6fcea32fc6e1fee34b6ba49c727d228b84f192ba29c8e8c30effe59105a81f7059ea94573c00b83c58c9d0e0c2ae080d94a52c71f95bab28f7634984732dbb19a756c378279b48ef6aa7ec32145e395352c1dc0c856727bcb857dc0a8e1b935848dfd
+Entropy.5 = 39cc6cff94a582f5bd8f0a963f185211d121d84f20082ac45f079fb8078aa024
+Nonce.5 = 0a195896ffa44dc3d33a9dfc1e3ace72
+PersonalisationString.5 = a4f2dbfd33237f628d40c7abd0de84d8327727ca2c7ed3c203dcb437717f51a4
+AdditionalInputA.5 = e4ab130c1453ae6400bb2f27f8dd5b0d96fdf46f50964bff5f11f00c3c3c8431
+AdditionalInputB.5 = 86884795ac9c045ed5eecce236f9194d801707907e40c867ec1760e170304e31
+Output.5 = c5073fd20fb16fd9afcd5e15221371d5e066cafc80f2ce559e2f814ebbec6ff2f4c07c11de5bbeef9d6cfc92cc6bac904a3c5c1055fdd7094d805d38f0ac6c5467b28acb7680ea836d616c0a5e3468da5022d6a382abeb8b81210f7fe84e8048cbf112e8e6d6fcbc65bd67b344888265ad295dff7664699b35433b5b3ec13e7e
+Entropy.6 = 3e8579f74c8d91b38b03a190f5cd17f6eaccb2e77cff28011175509096cff146
+Nonce.6 = c6402322de78227a783751c4b1fe28cd
+PersonalisationString.6 = fdb70c3c22d04d7ab2e442183ed0b2e090b0bcf2187f0d2a87152631753bac4c
+AdditionalInputA.6 = 5879107cc1629ffebd599b9c11f61e89fe8b73c427ca67a5643e3856eaa778a1
+AdditionalInputB.6 = 0623d12e4106cb37e516236b90ba0baa6eeb6ae4428d64b6986b4daeeb0ca814
+Output.6 = 390df2130922b7cc05978855a3b5c8a4412b86ed6450bc43ab99bc3a4d7621f818b9db1c79bf2cc0ea496a5dbd33001b9645fffa7301e9342337406f56804ca8176fc2919357294b5b9301780a8388188c4fbd894008185b4ca58d424061961380e80f771a81fc31dc0ce17abba9bf0527aed5668df5299cd568d9d86f7cdc00
+Entropy.7 = d53b6acd4850470025257fb4ceb30991e2670f1cc6015a071446d40c8b2c956e
+Nonce.7 = 94ce72ca1d7d450a3aa0737bb8e5fdf8
+PersonalisationString.7 = 13e3eae54ab017d88353b6e71403d8153974658d0d63adc823bc6748e6c4465c
+AdditionalInputA.7 = 364a3967aa3828df17918077555e7b4330bfd6db87e38a41813a0f289a351033
+AdditionalInputB.7 = 5fc5a13e7174d56fb8f706c3786be94e345afbf87fe436602ed525f6db29bad3
+Output.7 = edc776718183149e3e2b2ae74bfd586d288264fdd888c71a184fd310197ee6d01edd10c9e4a985409ac0033989552b61209ce02aa40f8abaa48e58277c6967bfdc5871eae4df83479aa935ad1b9c0216ea12776df676c7d1e6b804e76140ea044d98a1f1729a773f8123fd7dff0e9ef801cdd0c53ba4f0564b499669e9d973cd
+Entropy.8 = 14d1e6a1896f2e2d5c3c9f52fdb0a38c153adefb2b721ba1c7e5bb0845b08eab
+Nonce.8 = 6facbae25c11e8944f8810b57fed4fc2
+PersonalisationString.8 = bf740e44536271b254e9a65a0418585ce49efbbdfa3ae5868809b3a9cf1c3148
+AdditionalInputA.8 = 1a2e1486550f5857defadde82a341e3437a3cf27c6bf4fc1cd8a5be6661e6d14
+AdditionalInputB.8 = e054ad9b1aeeb46b9ab9effe96cf44e8d9a8c1f6a2099d0c0ffcc8f2e171bfd4
+Output.8 = 91eff4f9d61ebd4993431628cfe473d8dc106cb69ece1cd060930804f93766b2d5c49a0de45d89b022651a26094c4cd07812bcbea7fe546d942eddbcc1bbcbb954d5bd84b0db9366fb353e24d34a4cfc37cc002f2b5baef7b79674a4d63330ada487f7bd269c13cb723331018a0afab0fdede8f2ac6ea93e84571d7112e78263
+Entropy.9 = f57c1dcdf515c3c663f4e0cc90674cf6678e7e84bc36d54027a87813ff366be9
+Nonce.9 = 7c750b805493eef74cf1756242ba1b12
+PersonalisationString.9 = 816deaa6c27d0a2f6caf8df8b7a222554b4fb6fc50350bbb82c99c82814628cd
+AdditionalInputA.9 = 1045d2c2bee045362968da8d54ea42fef4cdc4b0b8f32fc05eead7401d4aa04b
+AdditionalInputB.9 = 40e33c65d62342748014e179cd08d8a3c5d7d7e212cd75fe7522c79ac88533bb
+Output.9 = f0fd07ee4406f2be3ea26dd81d27567af67fbad791a22154e878d388da66d8138a77b559401cddd950eda9d4e8fcd7d3441ba52efa9d373a75300c7d2da993bab5edc1a73dcbb954da090e3d171660229e8674ea72076506210ace9841f292245668e42c6ae666d803de03a91fb969907aced7b2ea99ba09132096a056861846
+Entropy.10 = c913a05682edbb93d3893e433716d6ee85d714472b8787e8da9c9cdc5ad47520
+Nonce.10 = 10723ef0d3156cb3ea73462117b9043e
+PersonalisationString.10 = 3bf67a5ea55fecb3f53fd95e9a0869e5f3d0ecb26f4e427d5f38388ea041b5cc
+AdditionalInputA.10 = 9c17b2c6048db20efa260c491e5105dea2f7c6253008d0feaeaf099ccd43e9bd
+AdditionalInputB.10 = 5a739729baea3994f4c57ea0f5141a9869de011c88ae3d262b2e744624f44de1
+Output.10 = c567a512a21e53e687b63c51bff9144ddb902939fb5e7507e1d954b3122820dbd7d693edca18f825bb65efb122a86c02ff418065a5068fac80faeb9846f8db5aee39c3f20b60afec484f53510c47740dfa7a8c9fd606b0d50d20d6c07cedd47c22f9985e363554fb567c8294c864b5d9488c3ee0e483a775e9e668dfe73a1afd
+Entropy.11 = f1917e59978b897e41b41356f83e19ed1e07d5b02a13dd512507dafe16b38280
+Nonce.11 = 4e417a1f441a4a3b0ec19f31e944bde1
+PersonalisationString.11 = 1d0627e94172c9d02d3d71ba39e35c79393c55b797575a6e4249bbff8618d5e7
+AdditionalInputA.11 = d07ac1b2a33fe514e04941c244ca1755a59adaebd6880331728dab83f978bb4e
+AdditionalInputB.11 = 74f46be664a44b27dec26cb0c889fe87d5f0e43cd790616fa0a79f875629a57d
+Output.11 = 5752817dff8a947aa14d632862f2b83bd6dc862815e461b4bed109e49419912cd0a129e15646d9ea18be1ea9564930cbd499ec7bbc1526d73350117ea036e97482e31ea189da754e9a3248fd0657885b1bb9fa3c8e9095130e7173d41728defed97438597fde676623bd1d4fddd30cf5e5b2054dd2031300694e6a05d5adfdd1
+Entropy.12 = 3c4022358cbffdf5f462bbe4bac6cd55f544a4738aa7efcb5c0ffb11e759a3b1
+Nonce.12 = 53651bd2bd2bb9041846457c47e0ca53
+PersonalisationString.12 = 45416521e2e852298c341b02ffc9e7ecaf0ef5a1548dfe56f33e6b6300edadd2
+AdditionalInputA.12 = d3b202d046f032ff11cbcfa59a549920f3a673f73b1fd1de8a4143f73922fed5
+AdditionalInputB.12 = 10c480b05092b16bcbb354cfc0933ca36f281880d5d10b58a9679b5d3853f0aa
+Output.12 = 02f4e3c8c123438863d569a91257e9aaa67eca364ce32fde7ebbb3e810caddd76b205aec1f067842f54536fa61328c6d4341985a1cfac6151f63c47c198c5065e615ccaf33b712305c78876d2af1cdc0fa552dad953f67e25a975d8889977b1befccc4cff20061f76bf023fcf578bb2dcb1ea044bd53826d11838c3500d29790
+Entropy.13 = 8f2654e05afd29355a758443de6140fd3eebddbcb4bd09c85c83c8a737d2963d
+Nonce.13 = f2d38dadd537090a398a811e8534713b
+PersonalisationString.13 = f8eaf956faf312265e85b66ddd9741254f2ac3437690b4e583201d93565771e8
+AdditionalInputA.13 = 5250dcc23357fe76b2e7995926545350a8b9c95787b498c98762b0cccfa84a64
+AdditionalInputB.13 = bd67d109db303aec39cc14f6133359c89035991bf43a3e97b1ad0a3c7dc63190
+Output.13 = c02bf26819037d80eddd5749aba29c9de7d05891f541239c14f935a49ac56a3d3280291d3726ab471841ab8f7e3f5e785a94b23e057dae900508da24f6e007c6f783c08f6ab7de49ef637d1812ac822a4c0c84616e509121d902bec2e3c4f6626979724f2b0cd2ec3f7b44522345e56699ca3ba701a6b9c4bb0a7836fe161845
+Entropy.14 = 708f5c7e10d56c30456e9e3f5869a95a051cf7cf107708c40cccb801a3a7636d
+Nonce.14 = bac755e701b1fdd170dc92eb0f12bd4b
+PersonalisationString.14 = f1db3acd73914a62bca9a5ce3497b1b4da12b29cee7dc4781d7caddf67e45f2c
+AdditionalInputA.14 = 228522e58e65d50dfd176e8ff1749faa70fc2c82eda25b0748ddc5d41fd71be5
+AdditionalInputB.14 = 7af60c47b4cd146a39887c9b812a1dd814d74c398609bbbfb57e73da9caff57a
+Output.14 = 9528c88f0aea3fc03bb8a9061e159a06d78a2a654408808aa4d0e73ab1a51e5aa85e8bcae72d34784ff6f513193e183d556ddac5675314f2b5cfe392d1526056afe32d7c03e09ba2bdf3b10e228b0f600a61cccd9e7bf14dccf13b16a838e60909785307e6905d510d9888eaab169fa601558fc952aa8559d270ecd386d7fbd7
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 9ef0b00381d6c8c54d08fcadc6f5ef331134bb986373f65c6a14f553bcb6c55d
+Nonce.0 = 9fce26ada7b1de39590312bd9d81c4f5
+Output.0 = 663ffb625e62c4eb67d7177a6abb808a9f68c2d5840f19992c11ea3a635d05b537fae1f1746c1314e1a75e141c2e094187d17b9daae1442e41d3a0d1fea94d8ef9d840111379a52e6c7ffafa7ee83b244ced129613d5b8bb089e7ea25de1c29897735cf95695043a648a2ef6fd4aa74ce8328a5550da8ddb51f98adcdc108e455603f6f18f5a50016f3e8ebcb244a16bc6b6e554a7546153c12f522c75ca5f1017e01da36650e6203f30ed5c3da3b6078736465eecb400eeaaa2c876e37564d8
+Entropy.1 = 3435d2929787173084e16310a1c407699b08d8c68760d2662ed844c98c2ce66e
+Nonce.1 = e3ed52b47254ab2624de1c200a261eb2
+Output.1 = 7c8474fb0192b64c6b113d38d277a6825440bc2b484714c3a35d9bc3d35fc652b61741771e5d3abd7a1bea0263e35ba2ed4589a07363c1337895c40228ed6dcc36e02faf519919876b652f24cb80cdb044db786b240adf946ec0dcefcc2b406c7073db0f88024cfbad5a39ea53236f232d1251d640adb47c176cee0941bdb15e785344cd3753a7d77cf2a1b4a7048d00a94224de6822588e91cf3a1f2e966564a93bca54637724a4fcfdee95fb1f74550593f8367665eeb84625deb46307c21b
+Entropy.2 = caccd506e5e63ed46c19edd7474132d14ede0855dc64069316b4ca85a2943d53
+Nonce.2 = c26ae8b85baae65e669aabd4373b9f27
+Output.2 = 09d8cadaae97213ca801776fba9c58f2aadf19b8272911f7912905d030045fb77cfcf75c13eefd7a0bafe57b8c23852ca2f016beb5700b924f25cb123a5f527bd8cf2a34653446477c5a53f8dee827eab2eb6a2a43705abf22e1ac023ca92226493cc0a192f945cbfa62e84fbdb1afc3ecb31dcf6992d376bed81a9a3e426e770b12eacdeb32d9f3ac4d39a7bed6263c1422145b2ab84206b9c5da60cd5b5cf940be909033a3dd17246307fa428c6eacef705023d61538e781bf5d436c61d290
+Entropy.3 = 57b92173647a1bbfd7f490ac965739c76c2977ee2e5912d882c7125fd91aeda8
+Nonce.3 = b5dcd934cd05ef2c4e80450abedec058
+Output.3 = f0ef1c21a8e3615df65275fe61c11457e1ea15089ae80efb72c55da4a2845d8b265efc9e7dec770857e6553f48da64fb05c0d381eca7452bb05c6126ca897c97d4440d28be66300bb1377ad9ef8884b077753865e8769343b498f5f4d6a0dcd9bb0d03733ae8522c0d9226ed079205448efd4f2f752fd7e80b5c01a5ef525be5285fe1af113a355b8512d0efa256eb4cf2b957e4fbff861bcf04d13c51a3fb586265df2c7ce6adbfd3d91e943944333619a16e6dea782392dabc0635e960c793
+Entropy.4 = a146876f3c486fa6d06880ce232379cb929a0b8b8dba3f9c0196c39325ebfcbf
+Nonce.4 = c25a3bdcfd83770bd5041ab44bd0addb
+Output.4 = 12168702864f57ffdd8234a4d2b163e5e010bbe1f8049e08bb59e834dc04ac057a6cbfbfcea30fd93c7313193af0f017989b872f1159b5eb7c331571b10089a1f8ac3fd68626af7cd615d7bbccc7a47a0c325a20804a8c3c0bbba23d139506ca61d52a651a79133c2c3b1fd1b54f3f96791c6923025d7a2ade36c4b3efaca78fdad3185437ad7a41e42ff53f6096419b5fd3bdaf2d292175aed4d067c85c7f9257a91a319e9ed29cd4d5c728a11032f0b355f31dc3a9e030d4cafd98b7e99381
+Entropy.5 = 97f4d4103ba98184ae39a50470843b72d11f815a1563ff06fb8d7e5518a180d2
+Nonce.5 = d9b5a03e919666d1290fc42abde8f075
+Output.5 = 85b668b85d7f329e940c3f45fb0ea192c0d44f4d3a983af4685045f8bd23810e6c79644bde6870e83691392816dfecfbfb3e73434381c834d5a3a801109572f3a720d082866d8dd8845e4a11e4ff8542b26afe2ae78d5debc37c81295f89b1f1066d0d17af8795b011e854aa7f511285686db7b8dba0020cf62f9f33a141faa39ac5c6b62ec4a7353bf47d25d71facc5ed566cc3a83f52a5f03c1be283daa1edfeac3c2562a2c96931f5e833839502701389a934460550665e5fe0ac498e4148
+Entropy.6 = 72415fe7e91b29586157394464b95153664a3c44e3744d523e875cffa477e1d0
+Nonce.6 = e189caf1cd88569844a8eb1ac41fbccb
+Output.6 = f5316b3a02e9e4cc1aa16c1f686109122f2b3eb0e098233e1e2600913815075d922d038a57d9294cd7ccb7e888f7c186cad94228d62f33795878801362ae194cafddf39a2ef565378009f14b7fc5a17ef274dbf537d931dd3ff2563cbd01193ac77404b7c01f204a3ab63622c86ebf00ec5ccdf72f82b8c0bf75fd2385536ff4f73250a987fd557b52db57c4c4d7d110cd118d6df6b3b8579acd36382fbd8bf3ce84f0df2761717c8d2f9f199cbb67847bf6921e648873065c727cf7a4acb693
+Entropy.7 = 1fa6bd2bddc62da7be0ccc4b42fdb0607d9004dfd64bc588d7e35d74b17138f7
+Nonce.7 = 49a6f6162647c60f8043fe6b2321bb75
+Output.7 = 5aedbc8507377df3b171fa7665f12fcc76f5078a55ea0699323d67a1d6b22ace8023e20d00c57c707172bdb6d6989f03ed0c80a3098e07ee0c8974edd7b95205b01dd5fe41b4ef52a55fc947429381a91cafa8e8e0327a94846a21973da06d97d6ec271d1761f3d98319fd1067305d83a70cf61be3891309e1c8f4c60311492fd80177dd40040f6e4575132bc2e57cec17ecd849daef92b4f359689a70dac01d1a66248256c0dc9413256c70612356669ac12da3a41f5f66e3026af6bbaa0097
+Entropy.8 = b5065f850e8cf5dd50cce69848431785493a0aef850d46f5fd5588432cbbd0a3
+Nonce.8 = 750aa066e5cb008037f9c0787024102d
+Output.8 = f481d7bb452b065ca03b142ef53352ae8685acd6983566e9f8bb5a9bd4aca77476eb8f4ea85cadd7b4cf653058926311a49d160e9f1e70936543a6865f793333c7342f379e261e63b2c5c4d2ff0d3a80809074de2c3ae240b0214738476080ec0edda729a0235e561894cf09f3a8d7fb542471e293147a7dcd8085e80e3d7295436002c8870ac2bd3bd6a8197a1e8fbbc438d5b56ec8809941fc98393a9510c8f2330f2e724477ce117d499fe94d20f81a9dcdd062379adf101a07b32a4f42a6
+Entropy.9 = bc3c1154386f35b46813087587635c870eb94bb8f7e3d4fde740c05fb45fa8e8
+Nonce.9 = c78502e2d0dc1f2c571dd7d2980ba9a8
+Output.9 = ff7e33d7811a78e24a9d0d928619f4e0272cb0635e32e4919a55130aa1182019b713e54a5cc20fdb9b6f4233399db5d5311530503a82c6708600ac6fd3a69f01a0345e012e54002b6c9057b8d404d4e031e52965f4599c1aa65934a8453dd5f23bb158cc79cf6450c5024205eadf94ade87775f97526605b994c5a4208b6028d94a777ec909362eea4135d1dc6a8ea69196327ceadc8460ca134c54a377a373d641c97842606856bf8ea2038066705696ef61a2cdbe3dd355e14450a6e35360d
+Entropy.10 = 1ff952239e146246fd4690675930aef07de1ad5bc8005c312b329be044a41fcf
+Nonce.10 = 03bbfc86b7997955e2bcbde229050589
+Output.10 = 03c0613f0563a15efeb8aa262150f024e55fc0bf887266f2d283741c1f70991106cef811af091cb8e7b6af56d1c1965700d4d5e33c2536ed20f1bb782901cebcc56226e8dad0194c816980dffdd29ab28fdb3f6dd9b1594b5f904e8978d100192ebb627dbb99a9a3fda6bfaaaac69d6c27a17ed4d262a641a0ffad042ceb4123b7505afe32567b544fe4154e3bc805d171cd707da2916b0647487b18c0f2782c2a6c1c187d809dc5124f5af19fe6effd01e0b507f5adb65d5a4eeade5e6fcf23
+Entropy.11 = 57f2c0ad254729619876820e3844bff93b2958b100a6d825a65088c1eda38650
+Nonce.11 = b6a49e7c0822ce5b7e9c7155163cc5c9
+Output.11 = 0988429e260a33fe96f6151378effca8fb70d87744afb067264ea67717c5a55bb8ca7a02aff494eb3b64f90499f1ea75bd94a100e241be77ac81dd615b9a7e128bb4bd4093b0d82e3051ae36319df64b907523425acda58a2cea448c75f3f955c485a0955bdaa122001dcfe898cea2ee641bd3b92b98d203b0fb30b0798eb482c164305280d6559fb4947363e2d247fb7a74e63bb8f72a6019f32bc445760022f51d71313a974faabd6856deca0e5a465a00fb48583ac59c785e21e318adf36e
+Entropy.12 = 3f43daa8ce5c8bc35dfcb7e1cefe5956cbf4c3f37a4aefc4547eb58502390d12
+Nonce.12 = 0b66b696c61848e76bbbb50b875aff0f
+Output.12 = 6160184556703fa73f49098c9db27d2fcd1ce717fb2cc537c205c5da96b9c346db63225c83d35c7ba3ba248d068eeb5e266dfdc9a95814d2637b6ed7af6fbc3f6caf21d210ed7ab71b48275321e3145efa9cb54ef5e37989bd6762dd412b55403f2da6f6a9deba87d90c01f5cdb4beb118e191753c19d5df7e3aa117bf6ba623125ef5565eb60d2d0b17fdc154579b71842941316104d3414743e484957e41a8fb3e697bb7ecaf6409f895e144d36a6fc204520c6d3b5216aefa31f101977cac
+Entropy.13 = e0ec2dae2f4ebcb630ae1ff2f52bc119a60f39fa233379df4d7d6ac3d9650bff
+Nonce.13 = bad9acaf0c5b0854005501457c6fc470
+Output.13 = dba059ecbdbd45c9712fb704b063a624e883f6619b5e55831a172ce5797a78bb72c236a968437524b1008fc82202deab247015bd2adac38803fa38204a2f3595e14d8e39c19c1d6e64001a9f64761c1eb4fd874edf3b1f138f7249a9da5b74deffa8d17627348b9dab419a59f5d3c7464f7b9826aeee32de66c905082784ed39b34e7d3be4b03d7c211aef6e22b07ee73b11c4034e01d2e64a3555a7e1d844170a79a82667163c6a4334bc5c561b73d4a1620235a49e0d6de64ee61d0f978875
+Entropy.14 = c0509068d88167921812103b67e734698d68718ecf42cd99e0f55836c162d450
+Nonce.14 = 71a50d2db258ea35ba69b5716bf68a14
+Output.14 = f66c05713ebe804b4273103997d260adbe8a7d0f6b2bb862b867ca59874ab9e0898102664af2a8db24a7ccb4637269ac67d5e834941303acab9076ebfa04cef64f73480afb6808f11e6ab1a9deae514f5db1c90c59ce988cc1d04012640a40173362de2689f88647268c665ca44f57534c9ad9b8316b9cd1d5a14942e94e90607acf6ad37a2398979e56e9c227c1803f90844d6140f10d0baf20dd789d808a647b4df54d2136d967461383dd4db9dc154dd89cd282a2766dd6086bf3825d095c
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 88e60bdc0216ffda724d75a78929a362e6d15ec340f4cb52822660da777e5420
+Nonce.0 = 38643e37dd376ba886262ae8b7130d93
+AdditionalInputA.0 = 78860ac12d6f1779bd54383ec65f2594ae87f290a3fa3df29f11aba212ef469f
+AdditionalInputB.0 = a074df12db9ecb372949dc73a02a7cafca80440824b8e6ccdb0cfa817c89fe23
+Output.0 = 56b45cdf36fb6d47cd26b8e6f02677ba42cf43dea896ddb9e9e724a741e4112df6d396dbcd47672c6f85f9b2aa672645f6e0cb01ea13609fbbcd16978d741357f3e7211c07ca90e42b5639cb5e3227b549972a6a7ae5602f5b400de64c0a578ac59a133b7ebd97febf50002b3317b7b7d02f664d1e1254ef3c5c7043fe0bb7cc0ec20fec6b908ce697dd084a4c21fd1327014f95ce5f1842e07f69691c6d978a0a10c645827553045c7b54e22d38a17b5b0ed491b1b65505ab2be58940cc0d6a
+Entropy.1 = 039742435f3781b50364bbb02f1d5be7a943aeb672fea3086f64981e03ee9914
+Nonce.1 = cae0b79fb64a8fe3762e1959d1926a61
+AdditionalInputA.1 = f65ef033dec80726a302f5131a2062fe521dd1f2e78c77c68409cda3637e428e
+AdditionalInputB.1 = ee22d109cbd742cfc29bf70e24a4a4654e011728e72d5bc6a208986448cf8510
+Output.1 = 619e0cc67d3caff375b4686f913178dc49a357f632b383b020ddf3e3bee64e1869678284e24b15cd367d0d0f3803b131cb5b3fdedbabafd65487e026e6557cb6e3e0269dfa1fedf5f84acda609defa95309fba8d43c9b68b9bb4cdcb52f8ceb1533a4125282ed69df3913529682a402bf4f896b890c5f13e9cfd9de36aa0d3914f50ac1445f3c0cb491978443a9d64c00f582d4879fdca89a1958e6fa6ff49ee0ce3070b25202de9a482a871abfbb579eb33367c78a3b7c2f643246e01042764
+Entropy.2 = 61ff07cdda8bd6aa9b3c7c16c9a3e1cbcd17511096853c7c982b433879517ce7
+Nonce.2 = 8b017ca23dcfd6ec887b7a4a25bf56ac
+AdditionalInputA.2 = 280967d19ba7a145e9954fd7a95c71745e6915dc0193351b213db508b864f210
+AdditionalInputB.2 = 9740369c9166c6c8a37dd78f15cbdd1caefdaff34c11bad2c4fca926f349e513
+Output.2 = c0c980b883af16003f9713ff2f362059fd213bd9c39998e0fc3c2327c6c8bb89aea75e8830ca8f379156824650de3731a9942dcfbe46b65985e52aba8798ba6eb1ea85cc559f2a106a6f8aa82d4bbfe2d37cdd0a1a5dc22cd9267029b00eca99dc20129b6faaaa7b066d3e06d66993f91091117552a41fe615c3ce025aed44a8bbc994de6eaec33f6b3f62b343d3c27b54ad78ba833d92c0c376117e4900f97bda6037c445ebdc370d78e335cda3884d1b78663f172610880f56bcb4021bce65
+Entropy.3 = 133897c5d21d1486736de5a9ea7c56cb9657baa215bb7485d5762ba114d13252
+Nonce.3 = ca46dc46d97577e4b105a4c3d9e2cc3b
+AdditionalInputA.3 = 2c2315115ae67ca3734a4709ffbe6dea36644f07a5c3108f22f2c9ed00d0037c
+AdditionalInputB.3 = 1a267eac7ea6c2419b5fb175254a307e388aed2d91d26086dac65edbd4ef3edc
+Output.3 = 787937789e810e5bb3bf99274dfaeba0155f6671fe9aa6d7044f8d8e6d2e1ca71c3ea087412c7566f56240d34ead516c222d0f07e0b8922a3614ddd4307d29d76e05340c86934db19982c29bce0196c7ebdd7824827df114cfb0ccafe884d4fe4e5d4dd6b5bc50dfeaa95cc3db7e20bd6823aac27b7cd329daa149eead3443878030453ba15e992da7146a04dcd0707cea0449ad6fdd5110c71e68ccc639d92308b3fca5c32fb5ac8ac74f0e895e703ff5036955805b4b64bfc3064a13d3cc13
+Entropy.4 = cc4017a405dad4a7a8dfec1fca936e216eaf449284a21030720dd9dbdd11a829
+Nonce.4 = cb23d09e086ea3388c18b99fc0942b09
+AdditionalInputA.4 = 1dc3f63073d70e2712b59a8ffd341a949ffa834c8d5bd504a70cc159dda7cdca
+AdditionalInputB.4 = 3d7cc17df61bdbddaf7f7370d8d0e27b4ed7fe01c29fbe4cb356a453cb86bd80
+Output.4 = 2e0193b4efa8599c01493712126e9858538fd094e063e775020a0b9f0b8863a048ed9a5bc31fe0504ae8ccd4c69b2fa74619e19cad595817dd8599b4cc59f586e4bd6a1b09b7500690348a002277877a43e1b240837f89b12cb2a8e630375a18af8571dbe8ea61f5261f747b5ce10ba48582943f60facfc37bd2b30d00f1fa9482d793da6119c2740c12f9954dcb93edf97e0c759f600d4ee30bf66bbfdd58831a882d871f2e0f75bb387e0466cc5960f349cf842b1f74d055025546dd3646aa
+Entropy.5 = d7faa4176cbbfe084fb4a621f7dc5833a5822e5e91357bcd271f42a12b40bf00
+Nonce.5 = 95c3bcc58d1e8d6343271ac68ab83133
+AdditionalInputA.5 = cb9fd2644cb3592492bc41b9cafa676f1ae2ba415f782beba264f4c5f7929885
+AdditionalInputB.5 = c3612a530b3c6dec171c065a5c9e8733640d2d89b57cdb881727d0ada35df35e
+Output.5 = a4fa57a5ec0bd703ca2d2331096595f5950908060b78173c882c7a075cd9f55eca67df781bfc8916be366c9110f1394f47b573c6febdd652c69aab60b651d9ac2f466544f8e463d14f9b727f81f23a5adb83c9aa92da30bb620e0238a56188a42bc4d06c07d9fa3a0a0f123f808247416bd326c42b7414b615eae907119763c4aab18e130741447747964b6d0d72e881597901dc9b4fe08f3e7700dfc243dc9633765f85b088c1e71fbea816b523905003bdf5a4e4aacb6f3454c07d7ee63b6a
+Entropy.6 = affa831c6d28648f3c3b8920be71f02326b089bf1872bacb2955bb81e900791d
+Nonce.6 = 6fb415aab2bc9ab49239180d06f88350
+AdditionalInputA.6 = 22afeb7c0744e21e6272c38025502de4c767077b12616b5803e77ca3a61e9810
+AdditionalInputB.6 = 5eeafbe50d479be20ddecff20225b5c82dc4db3b64bafbd0f7e473decc81471f
+Output.6 = 76911a7de8ebc80c8047a902362191ab8a2d63e3e022e318db7279377653009ed9c6addc0bfde08245d4f10c5fc25b58223b7dd6b951ef83aaf259b353c1537e2aa3c49d3ea5e9c8431c091e19294eaafcf91164e61d5d06944b3e14ec3fb9560722f5e6708152355abc4268eaf77f13155d3bce2360e6c8dca56df85c2f90fb3699b86c3e10782dddb0fb658366355aaccee6c70d1a49240fd3a7bb0d74d47a8caba3e508535e6424dcba812b3ca2ee09f91fc74af7b22a877369843c2526bf
+Entropy.7 = 14e71204bf09aee3e2e588d6d34f4302a4942a67e3b4f92d86401813839bcabd
+Nonce.7 = 94e6df08a79317fb7c7744a5e56b983f
+AdditionalInputA.7 = ff0527ac23da576c37a5669b91198c6b553998b17da665e424060f6c4908cc4d
+AdditionalInputB.7 = c72a465515451bf1a45adf1e7c772aebb62f718c4ac5203f68499518d607032c
+Output.7 = 9259e4b645b3323d6045e25684349c0fb09c5abe48c9ca7d847dfc3f38930c55e68fd580951921c6322ccee36030ba32b3f72e118d54d28551fc7cb4a88da6158bfc4838ba96dc6e491b1023a7171fd9798a8b507bc615d2f7c3f99f27693ab777e05cc98518095625eae58930936e1423d3076e38eebeddaeb9c643905ba3ec3c20ad7fe7f7bfe821912180b1924d0a05f7dee45ab4a3bdd334eacbd27e6d8dc96db706d6bc593f9ed16d111c86060028f9ddfe692f2d4152be33db7e2e01d3
+Entropy.8 = 0b2a266c50a0c6454bee0f46cd186906809bf0c4cc753369bf31a57ada6c0a8c
+Nonce.8 = 4bf252fc2a6c71f47bd6d8fe5558fd49
+AdditionalInputA.8 = 94adffa25a5deeaf363622be8dcf228586d91a221d71a933d7121eaf639f58d0
+AdditionalInputB.8 = f7247ff324010fdb00c8ae78e4127dfc6e9f4c2fdec670560d269b9f5e0ba91c
+Output.8 = 4158fd28933a76e4b33bded70b1183988c6fd4a7eda1bbe9010c2c65d286c17c4576853d7bc05549e5fab44dd1c139c2483cc1217bcc717091161552e1e7656268f62fe5772a3f20133d89fdeaa6f235fdf6add1f91cccace65ab0e053c1016546addac1659993983f527bd5f99e246ed46fe9bceb669ec80e786c22fd2c0b79b3ea2218bafa09011120491d2eaa61896d80ae856ed5b1d880251fad58e7d0a3643a7c903931d736eed3a91a4af8b1c2eecc3351a3eade3f8d65df762b97f631
+Entropy.9 = 30587705218a4f096c22e07b68b4bc87b59809a11805df1559063684711cdb60
+Nonce.9 = 8ce54736359b9ffed924fceea9268a2e
+AdditionalInputA.9 = 9dad957eb776d28017d624353546c6a83471abf8e7e4a7f0564d4bcadabfd50c
+AdditionalInputB.9 = 7aee53efc446c7c50b4fafec9eccea1d74d39dbc43f8a803e963e92dd80b1f55
+Output.9 = 227d7243267b50a739cff7eb482e0ca9bad3d51dc6f340ba9babdd1b62bfac3681caa81c50209b7efad8b3dd00d687200b4c8794f0ba484d1a1eb153190e2cc10cf05531aad40ed7407d9dc64b6af32f7effbf09e837cca892e81b9ba2c03b631693005d98dba3db367cdb1b46bc07afa179afad5d6dff705d2d7a6878a998603e91dcc23f634994464292682eb8e06d6089068a0e4c265cbb2fb437eedca92acd3ea823c6c29d37314f126eb9dd54269d9020c7591f6cd53b2108d19c535c9a
+Entropy.10 = d759c8de12fd5e45793bf14603249a9f4d57ccb356e335986528fe46a9c084eb
+Nonce.10 = 0f476e3015befa6ea741b15291b62ece
+AdditionalInputA.10 = 14272338e0cf017bd43565a9bd4437e2c9f2881dd99f97d4f9211828aa7e3daa
+AdditionalInputB.10 = dbcf24ed6f4486dcb4c536dec4efc9c2089bf505c935e31763925469a7c6de3f
+Output.10 = c508302eadd6baabd6531f8a51fed008d3a36821bbf19787debaf44327a71bc63694e30cb1dce8b21328ff170e8c902f10f754f827c59f2acd032bbc9a7427e308caeda7ed19375d7171498a7562cb5f9354b0c7b0b67d96c3ff645323b65d6720b52f48adcabc846d16e99f11339b1db6506229efd588e9ddb77df8e3c4c700d2ddbd88c02b9fb1fc9da30ebad6a7566ef8e494dce5036480bda81736dd70cb71945757e3e0a557be25e2c61a091388ee373000f86d20f62bf3f6d73f70baab
+Entropy.11 = a6d633b526904a14a768167eaa43878f3e90c0bcdd8b29f533fc1e022808b550
+Nonce.11 = fee06f56bc7eb905bea1a88b70a70533
+AdditionalInputA.11 = 1de361bfa968b6153d6bb4bf74a91fce6170cbf0147c6ab8d8dddb30f585e542
+AdditionalInputB.11 = e3351eda060f18fa13a561b117e95cf6a6c614d8ccd2a75593f1b452ac04cd03
+Output.11 = a02459823e3848982ddc13580f6bb232095d4f1d333c307ea642185ee4b08ec362dde9f091ffbabd16563ab71cb726f5c14357fd28ff82e17121c9ec5bfe652d0abaadfdc04e087e986f0788484e810a3847e3b4583ac6b1c83526dfc2002d3a8a9b3ca40fb032a4e6c0e90f846192107104c01191bf071092f07c98078e916fad6e6167d2abf465e300b555eacb7c0b461e57dc6d28ccad40788ea884104b9c491a086e482dfa9ce635d5a055acd459bbd5541e12f44913fb75548f51c4f179
+Entropy.12 = e1a0e3963cabc7bc2d060a9fefcd18d4807df4ea44576e509a7407197b2e7d6a
+Nonce.12 = ff3c19e05bba77254c651add6ff6a684
+AdditionalInputA.12 = 2bb78f1d58462bb8bca712c6318e45ab0795f50af86032f849b829a1f5589846
+AdditionalInputB.12 = 343524b558f80f05f1dde3b56cc0b1480e5eb2be09414d95550b6e6deb87111f
+Output.12 = 2dfb951274800f418e9f9ce49eba3158bae66419598e6de45f8c0c7ad9d209a4d9c62b981ad67a89f86d9944845c416aaf097437fee3488e0b270174786985c67075bc11c02ba6631fed1005b291fa468aba902f131558c64516b6b85b3f56dc1835b5939ca194d9e808f30bd4c59502bd7a03609d7d5d52c8e266f25597dda0a73ef3180ac4eaf9ce3d9c95181cde3e7b88b064ff28c423219540eaed1a97dd88a91dae7d9e4419f695155c3da4819e92347559d0744697eb9f711ef83c4e2b
+Entropy.13 = 93e60c6b2f81642e04080231cb60f5a82dda1d2c29abec3d24c16aca31c3e7c5
+Nonce.13 = 627e420471fcd82c381e4eeea2b3b15b
+AdditionalInputA.13 = 59bce0170d87db5046f4b325f9afe2d4f68a8ca75d724cba772ef8379be25337
+AdditionalInputB.13 = c52e68493a8fd1b206a89728fb35bd37859b1d6a413b35513b07456c7c74e6e5
+Output.13 = f5d662bfbd1ec6e7ebb7c14b628e0aec1b814da4be26d48e5f390f20b0dc3c87b7189c3d8a5a417f3d00f7df891d86c904cbb7090cc02ba034e2e7fc5aa0d264a12e9bf8d9268efef72acedb1dc24ea59e6393f1a249a9f90e70ab94a9d810e92d93c726eaad2d1fb44fc583acdd0f9ad1bc615498451a130bca5e65a43d7da5ca15252587f3b7552b29f9fe4e101923c697fbe8e8a7c697fa00dfa9b701019281252413a8b00c4045ecc3c4bc48074c2603361493ad09c2fdb1aa9c4b500fdb
+Entropy.14 = 0d9baf7e4622d9637d858d5a31d9de2cb23b7b06101f7d881a6278d526495f18
+Nonce.14 = 1ba76b79471a3f330931e4e67a066cde
+AdditionalInputA.14 = 25d2ad9eecd3bb8bb60769942abd16edf0ba777f2541a4b0e80fdd70fc2d26c4
+AdditionalInputB.14 = 608c5789b5a2a6c11c7df095be8c81968c0bdbc6296026ab65195bdc5a297366
+Output.14 = e1c600294a86393b7067b6e77ca83e68d28a6b76f6f81007183be65a50fd2f1adf6eec5a64cc753c5bd0ebc12387bde8c6ec10e6ec7e603f09d4ae624cc5423b5bd53da4f0af064e14a7d176369f1726fdcf6468ee15ffd7db3be48d196601506c71e2f443a768e03ebc35245d254bb87a392508ab07c95bce84ba81058ca1545289c9d8142aa0858c9cd5ba54ee2bb75cebb5b74e0d099ee458752d11ed70122aed1254609a715ddf2720798c9194ae4a7424e2c518ce7a8277ec79da86263a
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = d1b31487d6de11389313b9fcb6d47a80068e27e7dd4f5d19bcdbb5ba7737e433
+Nonce.0 = 97c18a1c1bd7ef912be91521be7309dd
+PersonalisationString.0 = a7a2a558852c4b63be3502e8e636ee918d6d4689a647c91d50e3bf0b219f71ce
+Output.0 = e28462f6504456bfb2e6b96dd6a6a4d07feecb3eeb2ae93f6f12e0edc476caa9407d0ea113553038ee14077d368a589a20328a9ca3900c5b7b55fcbbfee5955e66aab957ecda339bc06372e152f7a150069404c20ac3829ac83559eec8c47e4cd297d091611b9c836d143c228726a8a9db34183c5a88ce18ea0f26c0aa166aa3f0d20e2612217d6d1088b28e09e4560970206a381bfcb1fcb2d623b0adc6e4090b3f85631281a37e755cb8b0f03eb9e0b6436034885919933d24cf8987b03d1c
+Entropy.1 = 6ad32284947f5537ff84e54fb0b1a06565aa3ad9a0631bd92b6134896a867e38
+Nonce.1 = b425d4cb33cb9b2f164b18a1858fa26e
+PersonalisationString.1 = ffd4a433802560050af263470dfd4f3d21420e3cdbae3b0dfab206a6ca477006
+Output.1 = 103adeafbea45fc3803e0632e8c1168d6a573126324a1d8805d225445f3de561215cebf6535edfc209ca34abb11b3e52de76a89aa4f83f6a3f6926e4bbf57d727312951e1d6ba41be3779cb868d954205f1806e230a77d5ae670008cfcb19f086ee704ced10a6441b887f155a7f0e67b6fad397668d5e35ed418110c56c1bf48264e5f3eeb0cfb2e3d95c6dff07edf106643867207d26a6faabc230fc871313240eede78b66019a039b9671f634908be7998c8122c63c92abaaf04c60cd56bdf
+Entropy.2 = 20f05b7de796da9c719b1ca95aaec82bcde16d4d6a12cbf838217dc35e64cd6f
+Nonce.2 = b4bc248b81ecf604c46217a1f4c885a3
+PersonalisationString.2 = 5565ef9e4917df80bef6ec0e0f640c9c74cd196701382e3b4ab51abc4c4c0514
+Output.2 = 07d464b783cc66f8333b800c0d0962d965fc0380c7fa013334a95bd5c43731493202aceadccf13b954548fc2962343ef5d0cf5b53811a13aed0edba9f89edfdb2f138d299b559cfa0447c57e8a68da97af4d04ec55f5195f3e4a0f62a54ca5ed2540d0c9440444908bb9417a60bdd946c409003a7890782c28524a4a1a3f7ae129b4c84282891ccd6726a7c8b87e94bc61680d8d147c3c753081aafb529308b1efef3ac701409767eaf17a7f4b08fcf31697728ecaf5dd9d797e3389323d4a4a
+Entropy.3 = 46e4ae18d4b4b0820eb45c0993e1da164544574eb0253d17c1e8b5b7ff172bec
+Nonce.3 = ddab598c043ee6e39c2407c2d8ca5377
+PersonalisationString.3 = e6fe2a7c315e586d3ea7cfe9e33003c8808373c82648849132a9b603169fee45
+Output.3 = a37393f43d3fa32cdaafbc30f2e28efcc0c099a429b49fd9e89e17367a45f0bd818dba8aa5e87e1b9b04f298253c5424628612a86646b27b4a763bc63e79d8bc9b27f84244dc8e5354f742b27563b14f3ab35abb8fbbff748788847c67042e09cede1e07ad03440b0d4711ba762a5ca7954d31ddaab26fc57ef07db7a3a4af18e9416c31e9a205651a669ca105035b5e35f54bd129eb766b7fa98b9dc9e543b2b5aa6598635351e3fd279c4970cdc639eade7bb302d1d6514614fdd1c65a517c
+Entropy.4 = 2311845ad0e4bd78126d71360e01a8b15b032607f008e8c35a6cdd6d145993c5
+Nonce.4 = 4ad8c6d9fbabf571ec4561c2aefa8202
+PersonalisationString.4 = 8d3f2aa391a053b6855766742914bf04067369e03414e3d68439e07f4e7ee26b
+Output.4 = 356fd204d7124d3eb0794f4563218446d1c781106d4da8d7763f1c849743ebbf5d01234b5f1ae93338616b9c581356cb2ff46299a8a5f4558e3cc53f631b340bd7af7a86337e4cab890c55c1a3c97e92a1ce15ce6aa2e32daf6d8c00f33b8abf1c05affacfe492d8ec9165390ccd264763ba3479ad83371befce8b40e36d0a8daae47c4f65963ba01aec198478cc99e7036491121b684aaad6b24d44ad2824c7a0175f0e8f5f86c04018aeec6751b0f0db07f8d75a9e30407d9afd573d8d4c90
+Entropy.5 = 7f8e103246a2b0f2849410ccb45a82214d1aae70a31ec2e830bea88763a864f4
+Nonce.5 = 4d7799fcec689da7b9ac2de78b9ce699
+PersonalisationString.5 = 34103f676b7c6bee8916bdfc5a74fa5d3bd5a7844176978d4d0cca1d77bac99e
+Output.5 = cab956dfef85d06c81e7da03fc40e043263fe212d78ae13bfb487dec6488b584b575868b607b252ee5c27af701f1b670152879bd413c46b47cba2bc37d8d9a51b71dca801bb2f79c12cba61674db0a22817035e74403d85b9f8ff751d86d1ba0ddacf969ad12009370237078719c56e17489505bbf5382793268b75344dcce85b53882c0c7d47f671f6fbaa811add4b461dc73daf17c6ee58854035cee29dcc49526b603b7c8f95d54517113b4b506dd716ced88e93c9cc20cb702206a769792
+Entropy.6 = 8806cd8adc9560774806f3743bcff600bade3e4f83a894c4a3040493e41d9b50
+Nonce.6 = d53ef5a1e8dc12be1ace6fd4e57ee0ab
+PersonalisationString.6 = a1491b48414f827d5c98ae16f301e12dc73c4dead9e6c7c0d7196431c3ae518b
+Output.6 = 2785f18188143fb138091b1e4e87753d647d549b9c35b786eb6aa6f760173a872a18e883c4139b1e906852bf6eb0f036c302726cc34c562debb13dc908f52ca7bef533b591604964a34a802218b940434584da29efba25d76d12b06216aa1dc41f03281ceee0ee8431c14a7f2205e4b6712d090404a06b7607c7a2b2f83a0106c05aba701f1992611e90cf5727176d87a42c1775acb90d643c4f37a0a9af55c8426686019b0a9f6383dfcc70c6a7f68afe7cdc4d4de84c756b53003cde73dda0
+Entropy.7 = edd1eb05c38dc7c1277ad85ea3099571b53514768ee71ad63259d10d58b28d5a
+Nonce.7 = 2fc0c76a3d624967c69bd2047a6c2961
+PersonalisationString.7 = c73ed0a632db7a800d0cf2d309298685ae3bc82ffc6e32fa4af44315e2979779
+Output.7 = 7d76f8730148d8257000a841227cb9f264ace803a580683858033fce9284f958380f416e0bcf72ab4966d74e2984f4f7944e4d72ba59d54fc8e84480487719d7c85c68f51f7119934d70d35f372e1c410390f7613e101cf1dcd5d748d9254fda42c073d46c8e834daf8b898bd53bbd8a99a6206fad1715931ad0de7f04743cb776f9c22db58acb21da72ef046cc9040c36f178c098ad60ac62e372b40c9dd6c781169863831c1608fe170ac4729913461a4ce7cd5f98710b1850497fc59b4620
+Entropy.8 = c70c64e47c76f021327116f283f1b8027d95ad71e927f1b3ff56094890befd1a
+Nonce.8 = 5f15c6adabfb9b9e715e58b4e531460b
+PersonalisationString.8 = 49e5e6186ed6d33611c300942e10797fb106fe057beb87206cad1f5e91e7970f
+Output.8 = 0f4f6ed160d861bfc9636d13e756d508314f7a94adf247f73bd6b35fee25473d7cd8e7f970e1e1b74c1dc4bde70cce4bc10ea2bb9c3ad35133f820478d3b1010f314219cce19f1849dab890dbe2f22280eb0769c41f2e8326cb698fff45559b4b1c05fac2f5c1da8347659750388810f93ff6111a2e2b24e59c2b2930fd3d49b17d095ded0a8028e142be72edd9d60f17cb87c0cd3b600710779ff1695b9a366104e8a3844731ba3e995d6dd9de0eec34adb06c0ef5f197d23004e5edd514f5b
+Entropy.9 = 920167ac2f1e7875430f6ede151e6e1ef55e021816713d8f507d293755298b61
+Nonce.9 = 8923f7863865bc27e20525ef13f712c3
+PersonalisationString.9 = 31be01d9533aa6d5731cf0ed3ba80cf47e232ae931a6e24f0dbc0140cf83c723
+Output.9 = b20569b73ac501e1c17ff898d676a658e96bb0d3a69b9d62e0f11a50b04cf018bdf610a8d2efb5322ed23c4644ecf683a971e52cadb318523bb9680f6e6209ec6f1e68962fb3691207898cf60ab2fb423eaed082a5686a78ef00e2a9bbde6c4ac48506d78393a2914d00db2e3cf0b293362c54dfe78e123ed8439f37a93ffeda9a96aa1de1e9323072579fcb289a726a4b66c8e69a541c458d263fc9767655c3c5ec0b687f9e5b0878458f07c255ef709025225d30fd4f54bffd942fced1ac10
+Entropy.10 = 5d7a94bddbdfc566f019d5df9f2bb6004d17bfd17f78ef55b0707200d1a5cb2b
+Nonce.10 = b32410dd50ff9be1c397267d292fbc51
+PersonalisationString.10 = 6432eee53cc19589f1502d86f51faddd59b800e973c860c4ca251d86c84d54b0
+Output.10 = 4639b0a8e9f1da8dc49b0d84701712a3d0f47bb98d57803df7d4f7b0aabf99af7dc78d38dcadbefc2e570c2c7c51c2cbb37d50070c6b6857ad75b605ea006d29737d6819cfbfa4824088c70eb51777fc7ff884613d2a9f7989ea75e3bdd51e0ac3139faa934bb9ef6d8a0b25035fee2acf2ef783538e7be8e4416430dd058a58c712a41ed6051b283aff5e644b9cdb89433a414b5fe5f1dc172040bacf145d8ee19cc75cb6c2aceda689d3226c9039e95669e11dd4085ea104444c0bc4e9af3a
+Entropy.11 = bdaa691810d9aae1175a5a4f90505efe05b3cfc57d4497e7bfbe31227a6b7b33
+Nonce.11 = 14d732ea6bfc01fa7d6b865c9b764964
+PersonalisationString.11 = fa1cad909364487bb524391afef23df89abe9f5a830ab86e1989ed44a02a1b0d
+Output.11 = 57de79efc2ebf40829ca43a8e2e0c9bc402c3dc0f12fe27fe49aae94f9ffe31cafe897ec47b95fa2541036c5db941dfcbcf17f7d0c10c492189cf7c12bf03e8fc9334df9dd6484657638f8faa697db696480ffba3447f333fa6d3b8d71df9a4404e9671f6415f9701bb73b23accf5bf4ffc3ef8c04db8784067fffccb8adca7704c6c8a7392ad3ffc278707527ccfb670f5d2ea8a914b369b18419bfce64f605a48fb7b3c6f0bf68207fc601bfbc75c5d58094b9bfffdac5225a8e55a5a28411
+Entropy.12 = 472b189a407b5b8ba02b893f74201a93c6d432e3593126d3c6e0d8f44d445d4c
+Nonce.12 = 3f9332a1d6531aa582eabe1c0de0836a
+PersonalisationString.12 = 78f2eb71d0310d05b547fba63e57fd66bdbb705c9d9bd0aa957b8439e616f078
+Output.12 = f52fadf02cc573205fd654284387219c83ff8636997392397fa45544b4da3e757cdbdf1b58cddce1c418b24c8c89454244132acaf1e53f472713a925102d2e313eb850e4cbff7b282c6eb1b959643cb1f72e76dd12a6c8aef62b56773e7dba3a43f67cee488d4f608f8124b9629963b19983876e099bf1e5b8de90d651a3a001eb7234a96bc7a7d0d4d9d07e2bab8a841b44a6215752b9a8625c2490ec8cd8542a22f62f24a3d1f6682272002f78cd96d4ba1d5edba25ac616b33f9e6c95c589
+Entropy.13 = 7f254388dc53c8011d891b24d4fd310f579cf4cf390212dd375bcb5eea787924
+Nonce.13 = c7155c12d487753b7a3b25a23b6c208f
+PersonalisationString.13 = 522744097cee423dd9af5ed4e939eeee69ccb888f3b9d41049946085533f7cde
+Output.13 = 332a6c0a3cf911342c54a6e9acd59d76a5b1175268208a45be86f265d7719220b2a73151bce99d83657303e9c010cf083f9bffbac065adde660a896548e7e443e219d6dfbadb57244b8718cd417ef01126c969f2219479e39694f67c310c785b6af9cc4ff8ecc9bf74244c97b91be77cc2812c897fd110d120da3d4ff8d1bc18381ec1daf3f1d434853c8852303790cb11aab0847b578d1b33be0d4ad1e0def891f883dc6cb5efb9a7cf9735bdf58d666b4c55abcfe342856d43afc019f092c1
+Entropy.14 = f43136a4ebdb1cf771055e2df4fd26f5a83beead0d407e3137ec35cd95668e73
+Nonce.14 = aadd62dbd7b34bf2021ea74a2788b17b
+PersonalisationString.14 = cc3308e380672a955620fba59999ec4fcabf1b7f63089a124cc1f65d58b691e3
+Output.14 = 6c39f49bb51765dbae1de8325e7a6f8f8aec031dbdd94b83d5c4e062848eb4e01e3912784f817ee16f9c2dd0129eacd3f7b8d5bb4cf9a4a2ef823b0505c2ac8e4a1ec30812e98564aebaec14ff710a77c1904ab1fa3fef3c3d09f2d55b047a8db860322fab6d939093385838ec6d11667ca843f69268ba1fb7edc462fcc285adc9b4b97f0f717c28ac1b6f371d90baa86e8728051dfe9b68f15dd31a6da35194253545a5d667df6a1322f6b73ba661c7407608fa42e1b894bd1b6e7641749977
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 2e154070573312bc5ea0fa00e589b85dd559797a47c7e5ac731fea50531771a1
+Nonce.0 = 8443504d05af55a2c5091f077b1edf22
+PersonalisationString.0 = 35679c78e75c78bd6eff67b7d62a9fef1fad39a049debd1efb09be9acc62260d
+AdditionalInputA.0 = f4bf0561b3e91f0eab5a801388b04b43eee57887d43516a1f332c7c503ab53d6
+AdditionalInputB.0 = 77371fdee3485a12e55d5029d70b9536aabbb28ac1ef9ca761633bec9058bc04
+Output.0 = c6a7ee27596c28ed32d6d0a3dc5b7255448c873b2246d2bd5dbecb1a3d32de95ecd780e3e61974a84b374a1c0b32258ef8dd41371c5af762aaec6555fd1359efa5051f24bfdbadf9be8c101198fbf6fa97ef58c1ab2865a913f1b1e08019bb25f0e17ff5f7543cc1fd35e7baa042916d12d29ac6a52202082f4224a45932772dec149a34da4b3912c30903b7681e89e1530c7d8569eef281d165ea99da653df0728c74c809dc4a0ec8b754193ccfef2ab725db8890f84b1aa19bed96ed1c6927
+Entropy.1 = 56aa34e25431cb55b28b35d5d2171dcbf5109948748e69dfa8832987f43b73b9
+Nonce.1 = 5336e88c494dfe9674e304e12350ee34
+PersonalisationString.1 = f73605cf71020175a225019df4525f7f11d130087a4e19cdda01c80c55928db8
+AdditionalInputA.1 = 8f694bf8a86e3dba03cda34dc7bbdfa372d576ac4c6d19c79f8c49e122403a6d
+AdditionalInputB.1 = 7f78f38a570313528857ac213f56cf7afa8fb42f282ca57646c1a4764f7ac28c
+Output.1 = 50618916906cfed37d51ea1fc6c6f31f8e7c2390bc7fd0f6c55f4421435fe23b81c1f08e401cea7b1c9432cc592bf6161119ef278d4e3f629a76c4c4a5722a0a813c6d47dbadb431299372a38ffe35eb413097fde80a8786b4e875871784f533162335875432451538b0132c4b0dfb557d9aa4d9504c667014aaf0cda557b462b46fdcb6fafc90c01ff4f216630f22976b9ede9f7cfc31e124929571147d842363b5dfe4c3876504178200f48e8cd549abd90520baabda136c3cf76936ac8b8f
+Entropy.2 = 9df99ed4bbf654ee42718bfdf5d756b59096275a8407fec46d212c844068d9c2
+Nonce.2 = 24f3efba4c5dd500ba7b346071cbd588
+PersonalisationString.2 = d8192cd5da58cd2ce7eb2a871fea1bb725c889bd4a0dd2d4ad9871ddd53335e9
+AdditionalInputA.2 = 771d33e918623c8519df44680f8357c4c12622cf02c1dd5b00721aa22e4b65b7
+AdditionalInputB.2 = 4b8c08f8b829afdfa9fcf3109fab4a0fa3c32f13b3f19fb60c6087f73eee802c
+Output.2 = 127a9dd1892b185e9fe850883e9d4e1288c8e3450b27e8ee217de51130046bc86a2c73a72c3f3fb325a85292e844d9d9a9fba380553ee18f451897d6ff898398d1b7223e187864813e117c8bd07b788d6ca3d0a9cad0ce3473d6ffa65612ce0e75dbe5f26484bd7839c80d404dac15bd204e8ab26a3bfdd0c7989e028aab9998c31cbbe238b4681cc6461c6941dfa32bebbbf0869f1f3922f2b1c453a2d0ad8316bc41c9eb5305b7a8fcaa287dd4e6875a248e5969aa84d29fd9ff5ce0477712
+Entropy.3 = 81360c806d49db96f2c53347efe920fda660f47c42a505478374b880181f79ab
+Nonce.3 = f4fcd0443aa830028d028b9a4e1958d2
+PersonalisationString.3 = a89a326ef0794e50f751d630da7a20c3462d73fab81b0d59a9a3f93397a367f9
+AdditionalInputA.3 = a29fbb07b42e6ce50b38851b703e61e5852df006859f64a5b80703c519b97513
+AdditionalInputB.3 = 1ffd978e3f471d853bad3f20b4e65e50dc33bccfc29c990eb1e19024bf352af0
+Output.3 = 9343cbc5f389ee33e2ef49962ea461a3fae44771774e4663ca8aacfc2df341cf3c2de3b7ce9e1820ae0aa3100c0fcc80fd04efd729f87ec0c2835c547906f6605c8653ab8435165601c0bed7d5442bd434d1dfcec9e99bf7a1820cc9ec01372e548fc6d5a11aa4229382ecab6e537792cf8292291f903c1e3f115a837fa15dda971a116989eb6ca049bbe5fdad94e2f4575ac09ee65823b7f659dacfb8d6c1801ec1529961b1774205996ca89be7dd6c8599ad47a09bc2b0e340ad64a6653b39
+Entropy.4 = b438ee94e419abf4a9b26171654b8acf3f023f1902df040e1ff868b3ebec9cf9
+Nonce.4 = a1e665d173905eb64654d3fe4a4a8a39
+PersonalisationString.4 = 28e523314338cbd3341a69deacd32220ff10ee1693cb4f548c9b58d2366591b8
+AdditionalInputA.4 = 781fd50e7ce600e3cc2bbe5e39ee3e625819752de5150d2655500701ebbd3cf0
+AdditionalInputB.4 = 3d1fd74618631f5d2ce8a36f92fca951f68dddc7dcbaeb557e15a85c5de19342
+Output.4 = 205920cbec20c34acc1d3c7e37c27de9a525d08528be14b3081e2fe5faa8e8ce0b96b3869f967e1c22c1bf66ea29971dec903b26a8ff6f1d72bff095bdc2d44d8964128af4ea8c5a3a45cb82b04e984f2a25160715e5d90b22ca19c06f4299f564263e35fe4d4e0829341c85b70cf8928e09810fd1007af84df5cf719348427b0903de0ebf83a9a0d70b657bfe22dac66abbae44d7012f9ed94a7fa09db9b465898e322c30a91bc428ea2a8a34ef8ee037831fbbf8bfe54cdbd0ba8f469cd0e7
+Entropy.5 = 573791109e5b80f450996f5c043878ce92e6850028759569f80a685c5c36b8ff
+Nonce.5 = 69589107861c79db2ce75a44a992fe8e
+PersonalisationString.5 = 2a5300534308cebfccdf895813e5abda83d744f98f14a89fb98c0e5d72132167
+AdditionalInputA.5 = 3b7f239900f508fce28dabd192aaae0c1c0c24b44f392cd562636d54c569d5ff
+AdditionalInputB.5 = 62860d4da851a1049c3b5765e0e69febbcc43b4cd70c91cade3ab85f17df608f
+Output.5 = 81ba3e144d8b6fc7c451cbde078a59b5d8a467bc37db6b9426568a58fffd7abf87d574921519c8600fae27ef8b76a15b8ddcb5e97a828e1063c317646e463ed37fd1057ad0b395c4d9e6f3d3dcabaf9fa78826df6f906a88d85bd6f2a87879dd2351cab1abf1d5978c713751a0c2223177a1f8ca255297c71126c9ec81aaac49034499b6acd230385c944aaab76dcf58d76d602c1d5ce5fd96d6d8c332140eb7d764e5345fe95d40186b15a0e1bf1af89b396f56b571a19b988fbfcc61f764e6
+Entropy.6 = 5082ac80cd3af3ccaaed9d107162fe84454519d4bce78cf34af410ebfee2ef3f
+Nonce.6 = 36b63e1c771cd2e5af376eb2161fd374
+PersonalisationString.6 = 2f094d73456b3831f8b87a4da447996131fc8e1dfc57177badbd2dd6ccfbb3a7
+AdditionalInputA.6 = a243f0204f0a8856967d59fb345598b63bf04eaddb1d11ef37d1241562f6933d
+AdditionalInputB.6 = 3080f43610f9d3543cd7326b23b5a156406eada28ba975e534d39f89b9d70478
+Output.6 = 2fd543b2dbd38cec3507c18f07515d07d67be9c0b52fe5b5710ff3d7e7be8fb79386c93cc0030847e813ab7ee8c7c3d95228bf903f6fbfd8efd428bb84b2d1f4ee038ec208c2474a63b3ab9f26afd11d5b10cfe8e6ee1abd43329aae940668c680953842b4943a69e4271ebc991575058178cc137c3035d1211d815859781b5065b8687c4ff0430c40dacedf7777d4433a6bebd3ddb6ee3967511186fa108fdad428d98274388babfea5c44d241c7a2acb9aadc5cafbbcc9a302d76bd86d6c14
+Entropy.7 = 1be0d9f203502eeec2ba0eab43afa0772c08538a27f25a1072c522e7cd5924c9
+Nonce.7 = b5cb88da2dd02fac6019532608e078b0
+PersonalisationString.7 = 4ed471e5ca7930e9d5bfe3260a3090183c87fbd083c81c85b27912039d8177e7
+AdditionalInputA.7 = 42cf078e22f1bd0096c9f246e8cd2208a3175d2ff95b478691c05d97b2793a29
+AdditionalInputB.7 = 7fa2610dfe9cc13ebf33b05e8131ed132f4f461885d141848f5c5cb0f3182296
+Output.7 = e4e9363ac7bc2d89459b9b396fbe5a76ec1718b7492932163d37cf343ed6e76dd36ecc24c18e061ad66a20c7b701ecbe5ae2786944887aeeba344768caeff8c913c8100d5bec0ac28d6c820bcab2727c4981d8214896ec8656642db09968b26a465c283bd68f592fcbc76b9cf25d5df57fb050a7e13ffced7354abb9c9807fe9955894b2200f97aa9aae645ae16f4e971efba4302157b073ffc2f127027e0fe8e7f9e7bf3f141fad60a1b23a584b8315eea13242f27f8727aed8c48b90de8278
+Entropy.8 = 1bd9b187964cffe0655f1eaf6fcc324b5d14a33411a82f2c3140c68efcec5451
+Nonce.8 = 29c20377bb7d252c690dec0c909a054d
+PersonalisationString.8 = bbf4bab9dc99aec01423f0bdb5d166e34fed5aafa78ebc5b1b8d4b4f994ba169
+AdditionalInputA.8 = 77db5cbf6576699ffe42e4eb5ec799acdf9bfdd9232aaf8819c2832b2aa0add9
+AdditionalInputB.8 = 23be6002c22f6f0b8d0a4f0c0f36b939e7d4cfdcfb68ce5ec8f2b929c32a85cd
+Output.8 = 59e5c468ce27d689f56d99f528765b38932706d0c858ed9efc4d4e4d4e159ea42b230b5537d39723c3b650b15afc20d80eec152b3911dde83bd2da7cf806415b7ead8b7d39573e07fa6c41a60c9f2ece70e71da8e0b8e88ebf951bf04f058973739360f0b56f9a723dc72a36efef2efa5cc2d2cbbf1d5839b8a64569132ec41cfd6eb10508e6e32eda400141b966008e4badca0db252ebbb8da0074ba27b01166e2d79b96ec20b117d2e25115b4ae90ab2fa6af6cd16cd880a2c35e308790e46
+Entropy.9 = 658b37da967f57c093f07ef201b433b5606204e6cb12b843a1f30f2495357b7e
+Nonce.9 = 0bf0d51ab3318fd208609ff11036ee6a
+PersonalisationString.9 = ecab60ddd0c61d2579c2fff0f67aca10d3cc45cffdc256134a504b668c2ff81f
+AdditionalInputA.9 = ff38fa79a7a410a992388b6b94c37bffb6349362bbe399467f1774b2e81fc176
+AdditionalInputB.9 = d5d4a4491ca00893f1d4a8d3ef3067de4b5299c68bdcc9eda341804801157a9f
+Output.9 = ca0343e7b1924562c56fddc5c29d126017a7213f6d8fc30c5fa97a4672187425f1639660da96f29d0c33ecce1735b95eaeedb54219fc1ca028d31fde7c1cd40bf88dc41ec6a549dc0c08d86d2ac553ecc9f3c6aa1a1b8e4f1313197c14bdb33e53b6fdb4301171520021dc2c9818f4388ee5cb82ce1e4de847ee7ba263bdf78d8d9ee7a55f301b2277ab846bba7897dfd632d17125edad4329d52b0d6bcad53c654aa2424601c604be69dca7f6c8585ad56c9c3c35ccb2e015022b7c11b63e72
+Entropy.10 = 6e40520c653ac0b72294ff90e30bc026f5e0e5e322a33820177d3834697d8803
+Nonce.10 = 4b18ee04649d5134fa426a5bb453053a
+PersonalisationString.10 = dad9b3448fab084661daf4a775dec7c3b4199fcab85108056d862e4d0b04e955
+AdditionalInputA.10 = c56b5f7cbc33cdd88969b6146e0feade007b22eefcc6dc63ac60b7ea3770e6b0
+AdditionalInputB.10 = 966836832a93c8ad45cf032d525a6706bdd7c48715948ae0055672b885e34bed
+Output.10 = d9a4a53b5be1838297f8ad604dd18cb660ee1b724d1e7a4ab3ba4b1d669cbe02f1d55b6623d9116499e4a64d3ce40eac2ef009f60df52eacd5c5b9378b4191d92b4f9efdbfaf14033fded7efc64ba7418791e86b76c56ce768f041f9cbaea360584631dd72a453cf79ce07f72478bc51bb7024e6b60610076928d4c992ec073420e7ec6a3dc7436a27ceb3bd981cb176b4b77888070cd203227a459c97ebf79b514be290cc8f174d7d62041a3b602fdf86c8c45160dcfe661713104a12a0a43a
+Entropy.11 = 09244932ecc3befaaf0bbd5c5997419ce657b15870778508a8f8ae8b73bde52e
+Nonce.11 = 9157244f767efd95f6a3359eee1291e0
+PersonalisationString.11 = db358320a8fbe8f021e8b1d6e7538c31ca0a8b1d82405b800f92fe17c08877a5
+AdditionalInputA.11 = a17ea8d6bf91d97e590578e20223a130b3b2fcbebb85d4cc3325da882c009ff8
+AdditionalInputB.11 = ed9670361a39daf1163f8dba4f47d07ed5dd77e341901994b829814942a0c04a
+Output.11 = e89fb75235c0528a58429a00a56ab0d9e072a8b909d35c01ecb2c37ee0f969d4edd3d6ef009ec0e56aa3922ad615e28bd1c2217d16d7e50742af212b99a7909d9249df4d822d0489ed2115c3b8c44087b85f848fb0b62de4e53ea81e12c8f4afeb2c503f6d7816c594f00263cbf83f98ca0677e1ad99d93e57433f0e774ce1bdf4bdd41bfde44614d1f9eb7f42bd125470b3f9c8b0a498a65dfd0d076ced8ff6c3a2ff412076ca3392d94d250cbedc849af19e450ca4aa07beb8a9d14c47153a
+Entropy.12 = d0379fa4eeae6c42e1f88627c96814df67257676734a8bbdafa90102a36a7893
+Nonce.12 = 3bdabed423e71d7667c08c699bc13e73
+PersonalisationString.12 = 3d4059d31c5fb99017cd60bb7cc33e012eb78b854667c3099e82034455a25e49
+AdditionalInputA.12 = 0ef949be1899fafa522942480321712450546354ea74fe7a2aa711846a3dc9ec
+AdditionalInputB.12 = c0012dc814f413de90a2963cffaaf8a15443ea21f539af12b0970277c6c906cc
+Output.12 = 4491950b4b0cd996aa6be99c7516b7ce2b1261d7603b8b0fbe18607c5aec09f957884ae5f31da8eff1d19c4d7a22e2e3f02649e69464e788e898b4345d8e9c2ae3a1441cdbe678034dbc2a6254b4a01edf0563275db80feb638e05c2cb7374af732ca6ec426f1e5bc7fb73611a42321c5d811958e2ad75ee8bb49588af35991c646396f8d322525a354728a1b93dccb507fe6fc68fd2e35660ca18faad7e30e8878b019830a05dd3b8fb3ac7da288fae8343fcf22593a10146f91a55e6d8c9f3
+Entropy.13 = 2636f178a386017608f098c7fd3d8baa39c7174bc566bf9d5424abfe5e50332f
+Nonce.13 = 0db8ea2daa6d04fc79778832f414a860
+PersonalisationString.13 = a97e80d4eb0facc482498bc0af7159a39c00eb0bb59bab969f109277a0173936
+AdditionalInputA.13 = 718c2b3a8b8ec53bd2d3a7693e110ef86881270c96635b3946e7b2794da96251
+AdditionalInputB.13 = 94a197e66302e871d2fcc5ef3a9e4c1118dcdf1f12de3d3ae22cc8f1749cb286
+Output.13 = 6976bb84ceda5248cb5702cb9c6c0d3706b7961e9932ca37646ea3fde76e8eec760ca17c89c640f1956ae9b7d06357a2c2fee21dda0592215a0060832e99f5593f8e30b47719673fcf870a2f5c09dd034bc890795905266221b85dc17e54a2e06be6af322e9017198a6bfedcae3924d140001036f3020c04a0799c4599c76b83a6ad6fa110d2d4b6c4d64d57aa9dbd55811dc531f65f21f331bd51d7f3508df1095db9ac9aa2d84deb97566748064ffec59b9eb89716369fa56255474359aacb
+Entropy.14 = fb1a0b4091757e86f201ca94aaee4dc80c8d1f0653b8f94c6375d4d3e5ef16f8
+Nonce.14 = 717570cb86547c1b5c0b719ad04a1aab
+PersonalisationString.14 = 5793999a1a395eb5acc1bb16c1259cef3244f584a98129709a4e9c5bcee9001c
+AdditionalInputA.14 = 0d81d8c5af9885d1b30d2174429bcc6979bdb2b82e6fd3ccdfe93f36fabf45e3
+AdditionalInputB.14 = c63866629ed771e53d2fe2d5c21e98ebde295c3fc3896fb67279427c61a89eb7
+Output.14 = b369b226dd535dbdab45ff8f13735214f9abe6d11463a44804b838d2932112ce6799341505b7b5bab423a3794c37f383b06be1fe21f5c7da97b333a41fb67908dbeeb2450a3581ef71870c964c976f039ee856fa507e9de948c4c097a64070b23cfa09ab7506a8ec4fc38a38ce21fbee3f3c1ef3ab598f5da202f35b90f422af31688402509c38ac25359409d2b61958390d28ca2d8b5dea99ae26c90978f01d7a482c12e134a81de0bf6c9f39e32a8b597ec7b7a05a805ebc7ce260c381f189
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = d6e0c22a71a37faf7f8cb744370a51b66fe2c89b42d50de1f8022fb32f96e483
+Nonce.0 = e755e976530fd24517fd4bbbc890ceec
+Output.0 = 16372a83494157b62c4941864831dbd05d46224240e821a87f66f530ef89bd4087f2a50d2399d109303f03821ae62d6566163bfa94a23b64198f9b4dc1db5aa924ea06841509bc3258007834b44f3be34a7f9c7125af1794945bbfa78e02a87c15101bc3a079f932c4691f1e5e1b9639ea74af07c7f026da30712fb4f9f9de6947a27b71d7995a494d83b480a284db2d287e75bc9a813241ea1d480a0a44033663bed21adbbfe89fb2d27cbb35ce878bb4883399602519b387bdaef42a1f2ecf
+Entropy.1 = 7d2e345d75538d97f3ecc1aa8083028cdd0fcf8418eae999c53f74e5c440cc0f
+Nonce.1 = 9f103a26cec74bf2a128fbe921e435ba
+Output.1 = 6cf2c0dc869761d64600d643dd5ef745af81b4b4c6efa431a2f2e4d63f362447e64a405604a1e598674c0bb1524797d42ef08609b7ed70feddf4e09209b01e4a88c447ccbb8c2888e94fa99c2d47ee540d0e14430eca74e8b1cb95de9683886d7f01910633bc52dd38007deeeab8057d669de681adf2661dbc5c89c3703abe3aa948fd970aef87b69ac88d6fe92e4380873bf380ebcd3d8552501900e60a4bea791bc66043e1415f93abdc06d512a4d890f9465eb5b235dcb34ecf976093e634
+Entropy.2 = 8bb875478eb91d564fbcfffe66fc6c20f6511898ea00bb830042d78ce633e0ac
+Nonce.2 = 04729420a565164a204ec7a38f16ab12
+Output.2 = 41e6abd28b73f030a3e48652d149e619e73898ecdad64691e0e683bd9088e7c3203bc46a49a23b5ded69e35d4d1a8f910f9fdbf80028c101eff30cfbf40ac1328a97a90bb31aae52383617b556217ec28a84ba3ee538ae81336fdc969ca7d50b1835d013671a5872c84dbdcfeafede20682f6f3dbabb66ef13e3585978a82a578e6de52fb940ca9b53003a40c15af2467b02de84882506afe2f40fee47cc5469caacd47b7b4456ab432d922320f320a02ec18e4b11a264219dc8c3ba0e9288cf
+Entropy.3 = 3a612d8a0b7cfedd97b4f703428d763ee29ea921078a17cc3e48aa458934909a
+Nonce.3 = 3c7ce412400fff61d0eff60dd832b0ec
+Output.3 = 805d75ea3dc1043883bbe6f35a269342ef16135a4a38caaa9e6ab270bdaf76b5c2ada5852c083e1446c5e52ea0060cbd29223ae6f66643f5a20763a265252aa71bee6bec068f9b74a128e70dcf5d8ca5b1a4250d6545c5191db80097f50a3050e992dd29bda521dd226f4a9f57c888b616671d9892535f647c34ad51d089bd5c0766c9ec4f8557640245937bb63f030e8e9aecd718357b34235710c7741bd2531ddc06a3d2fa27f47e8cfecb5cfc226fea92df329e6c0a64072711ea21026067
+Entropy.4 = 4dcef4b9b65c0bc00e19f802488d9cddc9e81f1b037325f3e3bf06d0ed003430
+Nonce.4 = 4e2f76d7fda5c7b10157569152d9d807
+Output.4 = ca3bd705171d8aeeb8ac1b6d2bf44fbf3429ad01f665be63be51607178b239409882b762113b9c927a01bd727bc12d8e60635c4b81bfed9b551647dc98070de799cae9b2b1c124d3e9a23f4ce39e83b76566ef2b752c6d7f9d68c1dcae984cbb1166605e19319046e19750e7f2810e60152ee5854d775df557b699f0b5c082b619df57244d865daaeadb113bf5e810c967512f5902e5b645ef5daf349e548b8647832008ad4770a8d59f327550e2c137e6d51288db79e7c2cec28e9c3a2c23be
+Entropy.5 = 68c0ed82a8f7d6cae4e8cc561b68494007c97ba71a7b8db070f6ea70efde8ff2
+Nonce.5 = 43a5e1a85c58613ad2e5864f471a8ca1
+Output.5 = 55a4ce97d98c266bfb6de5e5d309e95d10ef5e0b37d581b16f8bd8b973e91d9288b17ec45d7b12872fcceeefbd9128b3395f9238fa8726eeed2a8144571a64728b6f8f79dbb926c7e638f753453493672a2da55e7fe819525ba7672ab4b74220c3cf80c7001fd8969bef48e2f3f3d4af8d9839b688172a8a672ba6ad9c356f2d185ea0ee180857b0f2f12d729f2dff8ec907231f8082d0f0b37b4a25ede5ee53bdf2925df51226b5b2b1fa10f7cea53996572a9ae8615617de53428516a63d8c
+Entropy.6 = c6acc1d7e37b5c60eeb5cfcecb59ac587e63089fa00735a3b6aace2c1c8e068a
+Nonce.6 = a6129d1e7b6522735859e952c20f3d65
+Output.6 = a3679089cdada405d4ba1ab74ee6bf62780ac5f35259064c17d9429258dde96a5249c4656b25df32f3b263d33897f1b770a8248eaa3317fb2ba506c2a127c878762c0f14b25a0575fba8f2f38824213c62fe753e0ab1682cb5f63b2d0b1b9e2b13bf5039f54b15265d2d3b06e64aa3ab777742e746c944666b9ae1079c820575b7fd44e69e89fd89feb24ba911738a1d4e88c8ba7b1bbe144ed92382d0f46cf5ba743ce78908c61de2ee14fa077c5aad9f74e879a200159b21f5c1442226df6f
+Entropy.7 = c0a1360bca46d67702442ce5f87f902469c7bd73c4ff66e0683d523e139bde38
+Nonce.7 = 0d582cd3341b9989b6368e434765ab41
+Output.7 = 5b008b5596c448d003fbe0f603cc322e4fc482680d9fa05719d39ab120a2eef03879afc3be01005f00ef1d2d44583b2a882305589dc854bf1a718689094ea9ef52bf6065b593b35eb7252cc9543bb64326e49b56b993e8ca5881936a87395bde6781e3db6d491cda72d1240b5ca30b3796394cb170b25a07a5a7c2b78f4c133009d19b95a910f025fe5940e1bcab86a9401b58c748af5d3bfdd632fbd3d992cbe3cd3be326532f4c0c49620199f860f92d8b3de61f671288c2c3a1c6dbe3c663
+Entropy.8 = 8b6d99b6135b7ec97a4f3c360c9946761f66307bc8b975a7efea3fab625e34b8
+Nonce.8 = 00c7703abfe7768fba80a98e7e5914e6
+Output.8 = fb5b0e2d676407ecab27604ca92e2dc8d4e1bc65813abe801952acf0841b3c588ab87a0ceca68d5e402c6b8e029ee6b6181568a99c247e2fae1f65726e4992c52ff22191ea50e2d72017eda7f0a2c9be4537513d9243be6d2af9b8f0d12e6bf93054ac34c448c9fd85e0e0d86f83fdb794721662eec37673714cfa7e10daf1f939dd8af9c2bf43e5a9d423f68e16a7ad4458a6ccaa39564bc3e3822a6acd1141ce1c6fa8029f7f752702b6e3f9e565864e99fc088646c4c893b37062d2e40136
+Entropy.9 = eba5c7d36e345db4720d4b4911ee8918e6c87bf7a119e157b4a2984f3ec8acdd
+Nonce.9 = 32663a93c5cf65c628be04e578b5d037
+Output.9 = b23cf638f7245e309330a4743ce70f991b8ee317fda128dcebb3ce9e320be53fa89376b9842b8265ee0989993306aab234bd8912adcee5e0c25b5302fc52a06d19caa705825d414e9c456ef1d6585f530ccd2dc51659f3b1549efdd5debad83ca48bf55ef989aa362613691ee321667f5e480cedbd8376f033eb0250b6de795281e7d08f79a92e74f5063770937f4998cb27bffd86a6891298729a99a566bf63f80b5fb1582db22abffbe0e14606fafedf5546c2fc2cbb24e0f97432c3104716
+Entropy.10 = 9594c8a4bddd9b3f31f915001691f189cd877cf75c637e322ea28e0fe749dbad
+Nonce.10 = 65fa788422a6bffdb3c078f8fa210811
+Output.10 = 3a8e824da1646ecea7dca609165d9d5a0de86e635dc3e15def45437e6d486ee65f232179a7320b57a0c2556c0b3f2dd61d1788c40c893c01bd3407de2db57aa247fda07bf9f31dab68e906dea52853d5fa21bf33445348f4f1017c04f1c2b19292f6e60969242640b1fceb39cc86a86b36ff261c242f791108f8a62dcc2a641375370add670170d25614e7ace84c456a03a189164e93bd3b9f770dda15f9dc80f3e03ffe4e28b3b9f3622789d50d789903d0d69deeee07d9946732911fb4bf47
+Entropy.11 = e74104e5509896eb533e308c16dcbfca3676ce05dda54ccd729bf816d766cc4e
+Nonce.11 = 718e3b194e34782f288eccb8557820a4
+Output.11 = 320f8c6e6c744ab73dd0d3aef9cd4bcea31a68aa76f8426a08cb78846674ea20db0ec1f8e4f581ac1b8032b6552b32a6eef95f8a80d738032354776f590d642676078a0e51277040249ab50e94ab11fbab1ef049f7ee5a156c2f220aa97af300cf8cc50e774e54c5da30dd42102916c47d00f465045cfa97e01e31c266347496214758c5eb76c31ac0008027521e0341c751be8ff9ab7b4113127076ec746425d1f1c4d1f541713efc8c85ee29428316e69a4f7face139b372ee040d53178891
+Entropy.12 = 565886b248aec5fa1f84ae53bb59c23ee62e944a3e6fbef5020df88fca96a5b2
+Nonce.12 = 43f4f2ac29055c105622c341abf7159e
+Output.12 = 287ec9bfc3d229745529a68c8cd0b090298613ac2502a5f2ddc8902686a6cb367e2f3d2af3224acfa6f162464ffc670300cfe982cab3c236e8bdb0e3dc42f0e764004b6d2d26053912f9a80869dc012822ec3da13ffc611805100f4cfff1579e9ee8e6d9235fe8b272a2c0ba2428a4e7a974dfbb107c51643da50c6890e49ff5384668820ff8f330b42f6da796c47b2e113c4fe9136f4adfec36e063999a7a319a138c70d9c610f2b7625e0c1d13686152efe779ceabb4e1afe13ce464f6800d
+Entropy.13 = 20d35d6b462d216df8636a0843199a237036d645c6443ee404916205b34a8bc2
+Nonce.13 = 052f65db73c9f250c315a26a1b5ac123
+Output.13 = 5127e4982babb89f73c65c9c0c09e36071a8f59395af06d569ac8487aab7de071c7b5c620f6d74debbeba1bac7c7a692d99ca2357e8efe8fab61531f6a3932f7f7c57e8f184cf957dfedf0aaf0b0b138acc47b0cc697337a704785b8288d594a2d1618f74ed8d27b9be60168413edbb0e68c2130605f3a373e345eb1413decef8af2ce05cb641c2052098787596a81238948889f07c366b29d18a9055ae898957d86e380e53627859aa7df8cb16bab8ceaa914050ec467f14cf33b4811b53984
+Entropy.14 = 5b50064163ae6238f462461472ad2ac9acc300316e140abd9cd6edb87b8ffa09
+Nonce.14 = 581d145675384210801d9c75d4d19624
+Output.14 = de0ace4f4a728c681a0b326298142fe79cbff2ce5230e6c1ca3e2808692d02e4845867763cb9e93acb983aa54659be6f9baf210048baf7ea4f062bd7e3d9a6d5e7dccf427422b9dd93d392ffc810dfe185bbee253c3208e22a83c9804501321c6cc0357d22859487a3eaba53444f4027843699d5a78214c431ea741bba73bd29550925443cfa5f494372bd0e482e3ab4eace1b60187b6db588c0d252c8da3e0d6dd3e475040817ca2c85b1149d8447a52c111f05d7c14a0f6b7b6ea4f60aed3e
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 9c92ab8084ce412bd4a5c763b5f4c3365ad5bfbe1c8092fb6da3c8652393882b
+Nonce.0 = d2195e1f57c899b67a6fe60b8b44fde0
+AdditionalInputA.0 = 2c554956d68cdf327f9dfa3fc4485e552077f9ef24a69dcd009e4769ad4716e9
+AdditionalInputB.0 = 65ca4e0b75c823f13985f0f9b5a5b4958e6462326c05e2187a09575d71c3606e
+Output.0 = 4e909782c00a98ac54089005d1c097bb63ea3ac1fb496a21b6a3cbaf671dbf382d30d3f9d764c84f5cb727ff822e75c555937cab416e9777f53e9d2e70312d007aacfb23b562129d3a1d813192bd39987722c21fa4183494edde0c35ab30f0e0f606afb51f8920f7885641ff61f87c3ca0bd972a37726cebdde6006869955ca84042a69b7091672d6ff7c413819c50d8ae1bb3936723a0a84ec48886739acc7e05885290ba8fa966fb120bc8b5cff0d6fa672bf561c093102de085dd8856f290
+Entropy.1 = 419688851d8975ff61be12acc0e4f1b40b63b8b925948196444b49a50020b24d
+Nonce.1 = 423b885d9c19a5ea9485e8ae21107eb3
+AdditionalInputA.1 = 2dfb5083605f674b39ea91089dc5a94bf44d9510e31fa1e75de253049cc7f48a
+AdditionalInputB.1 = f50a59deb68db0f9c1d230558ff4f8e9619c92d56803c63de90ffcf3e6a094b3
+Output.1 = f85fb91e6827ded04a080ff6b198350d0b3e173bb05f6975ceeffe2fcce9ca7fd02022bfbbaa904ea3f23c15723018a3d31804768c87fea70f68ff7869b127ba231667dd304b8ce15984f47c37fc45b1ea17e634f76e4382fb0d5b49b4b4cdb64602df4c1e91b063728da6efd3b056a40ec2d0cbfecb21068a86d02dbc7fe4bc000050dc3702d7cbb4c7544608194047dbcd3ad076dc48b921b633df641c658f2fd14ffac65f28b20cc1755330948eb47d59a5b1c6b43f167846ac191cfd2e18
+Entropy.2 = 056e4326d5e8238d2ca40396a987107cccf6d2e178b93e03387114caea9729b2
+Nonce.2 = d674aca5cb260a52570ba1456e3e67ad
+AdditionalInputA.2 = c65f0703585665f9d911130fbb4e2007d089cfee3b349704306e16fc62f396e9
+AdditionalInputB.2 = 1c29bd4ac2e279bb09826a8fa1170538ff6335587d7d13744841722b21af28b0
+Output.2 = 23de91bf8195e5dcab43dc75ed4c30f8742a391b3abf1a00cec0752e9d92b70645b0c9998ff4b4a0f087fdced4daf48005e25b897b2e730d5191163faee672b31418b40bc99d84b688dbdb076e23983ecda347940ec877e8930620998416204c691cc65a46e879f3183505cb65e486f4a5a8f244bbac42f3ae4dc705fd1255e2fca12cc3050d1156a13f036e49dea77b6b9888e200d9276cd0b4267ef583144dbace60dd02ca139522ca13d75217fa9e1f041cc57e5eb05c82edfc4b8444267e
+Entropy.3 = 62434fe9c36ed3a7d5cbd3c01c019575da3013eca715ff2e371628672231e816
+Nonce.3 = e7ce6dac29c8ec7021c076c7c81de966
+AdditionalInputA.3 = 46266c8a159c53c69cdf84d6fe725ba29a9039020625cb2e6b03f1e660082de5
+AdditionalInputB.3 = 936116f23970e8874424bc3f4d88ef2c16b165decfd814320dbacd10babdfddc
+Output.3 = a21fb58d30926ae8f8f61639528bc0bd8e6ece00d031692c4f5c7cd31556d4854efd278260268fdd27e610579c01a28777ce183eb855b4e0ffdb59c6b4e5d223d5cfa3e48c6ec64a0c6f415544f3191f59d7f171237e75604e65a0c9b5a3341252da3067a85626170aaed23a5596a7391ffae4f9c3cd9ea8b8fb2097223ed225d8d5b335ed016341a53ff31e727d0015a7f2e76b7d6cd4600eff8bc4c6a40c6452ff336c229528f494686f0cd53a8d08d0ebfb482f730b600ead59000e57d65e
+Entropy.4 = a70a1c62ea656d332ae88954662a8f3598f92ef2b2ead334feed6923d6423940
+Nonce.4 = df356a7da8e81dae6dd97ded66487c7f
+AdditionalInputA.4 = ee9778138589f49fbc301d2bd04bbc5cf16edcc58ea6520cc83cfb1cecfebcb8
+AdditionalInputB.4 = 1623dfe328ab24b9fc11b6fbc47ba1f41a65b3ae9c1920279f557adb63f2da49
+Output.4 = 1535f4f76ca442d06f883b4c57a64d92662833cc74dc6bca95cdc6958b7632c2b19400c8c9baf27571f346a0021abb3232aed0bb018eeaa2d8803b84c1a3f3957727b04cb9eb988365521fd8aae14bb2ba797be1dfe5a3a0a57bd610785a9a14954e86fed25a354dee0a77e6b9f6ee35be27b66a45236c33cae6101086e593b6b44b44f79881fd674e4ddb638455855b2ca9096ad13d288f02797f1a2ceadaa1760d99d2d348fb6c77a3a0ab26e865f7a25a691d2171bec0f9554cf08cb10cc1
+Entropy.5 = b9e8a6f7ebaba074850bc8b75f4ba991956a1c7ffef4d9233c47f3a984cf6e08
+Nonce.5 = dd3085a721fbf3a59b49885decccadd1
+AdditionalInputA.5 = 41b3f7a531fddda2e3e9b46fefc1f8ef0cc5e2a7eb3330f70c51369379f537fe
+AdditionalInputB.5 = c7db86a2de326f8476ae906be92f13783d238a4bd81f7e460ebb92df925d7de6
+Output.5 = 639390ee12a46e9ee8f520a4a74ec0a2dfdca9d6250186c49efcb58f6aa9174189fe73bd222162529036a7c612ff7d8afc755359d65bf420d191758c4f0ce6728c4748ab703413ab70145d2fcbace4b1a5783d46a9a9c51dfc172127f668102e3695d5861b76fed157529d6948345ece071d8dd32cdd66805edf15cc7f8a03fab38811deaadf5010f75e73cfb3cb80972d1d0c557419f489b3331ba413cf0bca9c84132fe0a06692d7f54006926457535fecae9ee7d4d1851526cd87c342fe8d
+Entropy.6 = 0e72fae2c0d72c2ffde1f047e4e3c751582301e621b941ae6b1729d3e10367d4
+Nonce.6 = a47f175a22a9dd5c9324e0b2c3359a14
+AdditionalInputA.6 = d2ec23eebd97f62245f237a8d46ccb8346482ecfb8d20ddba22abbafb1cdae1a
+AdditionalInputB.6 = 2d4b97d1109d273d3917f237dcce2e68a7a047e9f163a0cdf02d35c61bd86d35
+Output.6 = b63966464df830fb1420ca5a3eae048f7cf6f47b1f7181b16adca2bc6cd27a2b50e900ae4c9d8b5f6f6d2a76080a02303149329acb3f1c15c3e236c9d5fdbc3026bcb1353e3d32d91950b87144845d526dcf93248cf9080aa4fd89aaf500f8603bf52317d56ea773693c64ad840fd8d7915a26c507dc72cfce822a42030514ab7921814a404df9086363ba353bc2b1270b40540178771693b710718b5e8980f224bb0c94c79d5914b43a404da064b8687cd9fa517f9d634b148c776598b483e6
+Entropy.7 = 9c9ae156bdf2c5e0191559f71c2075aa13ddf830da77b9ed823a00b105c4a769
+Nonce.7 = 98f7ec8ec236d76b01beca6d2367dd55
+AdditionalInputA.7 = c04fcd4fc4ffec31fa410682efb6ac2bf3011faa86dd80fb8edc88725dcbf30a
+AdditionalInputB.7 = ce614aa457287fdeecfaed756b937f59aaa312e7a3d730c8c2f122749db4a7bd
+Output.7 = a4c71c976aefbef24763d712460917f4ffb39d5df4cd1e062eb25a91e332c4ab32f77527262a8708e55ddd40be624dedba49205206412d9b1a5f2ab4ab64dd33dff2135ec27b1f5dc877835f777183e0573fdbb8efb99c437e9b022dc9304dd937cfd368ca5cee9cce373c19acdbf5ac594da8fe2c5b6f5346ee58d81897b3cb430687b6d1fb01911a47f4de60eaf71568f80eea983a1a4fce2c2324a1d417d5439e752ecda1a309a1a7c97c0c41a8384f412b7cbae5d61dae9b94192eca5029
+Entropy.8 = a8e3298143a6a06b5be4f7e30ff40ff51f65af40d575082e0342d0aa0393f55f
+Nonce.8 = 93c445374a3d7e3e65dc28deab89ca46
+AdditionalInputA.8 = 2c6bd3beb51734118e7633d0da17146a00c408ed678a23fc39f98320800a4470
+AdditionalInputB.8 = 8a9fdaa38777f31a65791fc3b0787394538eb04640d4467a4ebdd517b129be0e
+Output.8 = 4a1ecb32c35f71c2c7c9438e232a11a353f1e674e4c589855c04f0006cced932d61cb696e864be0d12b2e7f3bef0e9caec18fd27e4a7d0dce9b4aa81d084a4cee2985c415d2619834c724a6bbaf4ad3337907cf37fc37d221a0987861fad588a3c11a7a962466aaf4093c7a828a5a2897afd7b0c2f2c7237c952caa95e33ad6d70f793549674168b675db9440c8af702023d0fa2e4c15a75bbaa1ac0168888792d8af4d458e2f5227d46bacfc8a56ff31fdca36e4004948ae422759d5d69268c
+Entropy.9 = da0521494a14b82937012cf47bcc0735cfcf42147bf3907d8e4dbe23dbe470b1
+Nonce.9 = 41eff6b9b0c2312422063c1418830754
+AdditionalInputA.9 = d88235ecdea2d0c8ddc0adbd60cb7706378d05ae69fbf2d25b576136f427360a
+AdditionalInputB.9 = 28d7c1a7e7bee1b49b268e4c67bed13cab26fbcdf10f54eca239c15ef195d9c7
+Output.9 = 401500b8a9a85a812e45ad14494dc0d4756bad54ba0ce6e77a72db21cdedd64a121867e833e3c2a21501cc9d695d73ac478fb880fd600c227feb08d77daa40ce0f78a5f7f6bb008d3810fb3e5a00c30031e5a26995754e25b6889a66625379890937d5f1b3d1476f9ce436e84f905954392de14f919099e13018530d8eb5eef2ca78f35a9138974bdf761fa6c19435cf27a6994da80577474896d1b975d23ac231bc4fb0e26dc9b1a83856eac5cf1fe9d4400b6d3ab99c99c737e5b7b3910126
+Entropy.10 = 4ef0eb84fde6b6437e3a56352b978377608810840393fc68a1eb9eb75d58ecf5
+Nonce.10 = b87c5f8289ec92b6e2a2b5356b47df19
+AdditionalInputA.10 = 36fa25cc7b32dfd23d578c7d47fc495df20e7304fa839d2c4b0bd8bf7a022059
+AdditionalInputB.10 = d72b7e5876809766048542869e47c6efa6d1e4c43665677281a0842569eec754
+Output.10 = d502bc88cd8b862dcbe940d15125883657e1e5ebba4a16ad4090cf5183371dcb1ac2fad5f5ad1e347b90565c073925ac70c088cfaedbb8f1ad08027c9a08ce5a939a2b8368d8b75c2f0a7b32fdfc2b3ba13207bf558dddbba1a2769075946a44181e38e0796bf0e8c0ddf40037294a3ae331e412ffa2dd3f7971a7314aa8e3006245f7dcd3342da8292453b03af3f3f9d1fbad1959815e227e39a1ebf7d2828437d61f4173dbe19fa48a7d6df0c204ab18010fea46269c1896672627a85d11a9
+Entropy.11 = 3da7692320d19bc3ae58ae5f26e0d9beeca3e15003d55ad02762d5135b6e5fc4
+Nonce.11 = 58781992a8b9147c48a1d2fb3b5a6d53
+AdditionalInputA.11 = 9231ae680ae9320b5edd550993c0a6ae47c684b4546059f484005027a512a6a4
+AdditionalInputB.11 = 9eb5b5dd0847ccb1e996317a22a9a607f8339d073bcf6c2e967b49ffe2e01bed
+Output.11 = 1d8bbcb653e61bf2ea1601f4cde346fce963977f38477d74a4b4887fd0684ad1f7babc8fd15e197c5c77d0de545838313adbc03e91f9553b3dc1e124115cc31f3700ee2f94975d19ade55952480c6b29aee2f38555cf9dc87782f915b1f4e4b7318269a88bcaffd1e987c711bf7187fb2df85d4ae4648846ca4fbab420b04739c6a1e56af022ef830f21044c95ec76d6e70fb2e0581d47c3f5ccbde05fc0b9b631e338b3bc846c4ca0dbf0d39f88372c1788bff8df035a2e296edd17b53f45ea
+Entropy.12 = f52fd8a98c584e12d5542f9b693ba547cd03ace419a57d296e199608977851dd
+Nonce.12 = fa974668497f72f265d8b3f6d571bec8
+AdditionalInputA.12 = ddda31a89347f7ec8bc10a4635e803580a7e88baa32fbfffdadfb0f731bb3f45
+AdditionalInputB.12 = b46ede7d4885ef59856752767fe4fdcba935d1af82237a526697f02ba6f0bc43
+Output.12 = 01b9d2abee6c4213e3774925b0596e44838f3edce85b2c68309637012018c1a9ce1138e5f298cd0a249be681bb5677b667c0989f9aa165db4992cea51dd349de340d95aabd49071bf18e5df3855e7416beaa07803b9007d91ca44776feaa27b3afa6869e9ba7be9ff3de136ce60b93dd0bb3ff15d5b1cee6b751014bcd8bf335e7e6ec4cae6d2811861fb07998c124ade2cfe2716548f392a8366476ff991c631f6460e41d8fc91a36f5193187df3920f0469b2f24f054e397ce0bf4547a327d
+Entropy.13 = 2f703d506f0223a0773b3a7ca5b46619e86ba8a026a7666e60897e28c1d978a4
+Nonce.13 = 5f350c592f781cf7063fb68db563c3e6
+AdditionalInputA.13 = 76c2a197fcdc3ef743028e91aa94c2dd7ce934d0ffef1fd344a82f4e6408a91a
+AdditionalInputB.13 = 2ce9c93b579b9a5c4aee0997416a580e8e8bfd5b8c7347c23de454f5ae2f7b74
+Output.13 = 369e9f330bea22ec0927e12f74a3c94c87083ad3a69df792851497900b5bca3a9a20ac2ae64c35e7ccf90f707e767370b46636652603f8410fe8ce3496d6cd3240e73130f3df59cc6121389dde78d7c71ea85ff898521d52b21585661b808b70532494d27d9c39daeda64979c6383c31c40cacb9931faa4570258c15a7fd2bf72453175f798b8b2c765f2771a045fb5da3d1f702d627a3f708f5755753a320e5d1b0c00a61341c7ac50f55c5988103092f4a2a6f90c555874c77d4589b1dee93
+Entropy.14 = 222b09b67be3cf48846336aaa0e76c8587edbb0cdc5123fb9319924e452d49c8
+Nonce.14 = 1dc18a8c2637c16759c67bdff0600365
+AdditionalInputA.14 = 80bb70930ef2015949b53d787630f5de93d93f98c577ca4632266e1bb1f6f33e
+AdditionalInputB.14 = b6afd2c00be2eaed5c1991909e89029db0b04598115fae5118cc215298e0528b
+Output.14 = c20bd78d9c396fc8fb408361e1dd4827ed3231617a73cd8848e493927207ea23e6efecd4fae36aff74b5235067543c7eb44c290122f9167a0ec4c6a530ecb0936fd683fbd866b73afb712b2f20ccc981b3f70faec4f4fda62e956c7d04cf578b06259b0f3c044e6dc68baf91e6149efa70b2ad2b81c8e14d1a994887193e53bdb5986a23d0412e989c447689a71b283934e50c25e10bdef0b22ce7368840cf761e32aebc07d7b51da16dad4c332926a4cc9853ac8db36b4b01bb36746a28f527
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = a591f47c35f3190df0dc5a050fd6688b46dd5ed8bd05b64e7d42715e47d601a8
+Nonce.0 = 274e2aa59f62afaa52ece2a08245e628
+PersonalisationString.0 = 801822d1fb033db1e122470d04cf21462cfbdfe98c0ef63dadac8aa12dc44f1c
+Output.0 = 4d88a45ffad0f6982306f61e7f99ba170675cdd9abdec8e0e8a7378d849cebd37c632605a36bc1d54fa1c96897f043d7e54d9dd30769c939d65eccd09578cd60fcd340d02cd6388fa96e6243ba6fe1a26bed000c8ea7c3973ce74603c00335a182024dc22a02da4e364e76582902cfc314e6b501578b5d822cf14b6f4769d576dd64aa1c43c3a624d5227fe6bbc35b35d19bb34c22d0ccf025dfa19f9b5f8234bd9a852574f94b7d09b36fc541b72510b2a0ee4a429a82b4b00b42aeaecb527e
+Entropy.1 = d5b431386e583e5068b10483cd96590325732b8a1632fb2a3255833cd0a81715
+Nonce.1 = 25eae1c35de2ed75ef0d3cc5fb1038e0
+PersonalisationString.1 = 644f86121ac6309069d35bdc7c69d40cb5cbbd30e853ff1d18dbf20bb057bf40
+Output.1 = 061f8dd15ced1bd4644b765683d3264fccd5b31666e3973d8ad6aea95fb4fa9bc1760e69856e56529fd9ad17a86b0065bf436ed6ce668703d423185fa06a55bb1a450da95f9a9ddf454b02f2a8f00e3b302fd80b195b102136786610948a4a7f84be326f62e88d6ffab4b76b611bfed716340de11c64d6588a54bb8c016e8990be363ad582ac0d79cd071aa97f7d4c1aff94cc5496045f28afcd85ac22736bd521c5fd9ab0016be3d1d3f8f553fde82f0cc718d4d0d213262f71d99eabb36a47
+Entropy.2 = 1110ed21313ebfd146e3b6dd92bcaa35c2150c7c5d74bf1d0147ca4fea6dc15a
+Nonce.2 = 3067c7c896397f37336986a763e4984a
+PersonalisationString.2 = e7a6a485a05e39d1214140bff403a779c39b60260f29f2d1c91df91554fcd340
+Output.2 = 98a3abd3929f1962d024c93ba45e357d637d53697e43e3c662acf0446431ec4493e1da539532b5fa6bb4dcf5e80309a83e7d76ad917fed80b7cf62b52f25f14a2cae01749d7e28e4e6a5b65c2735474cf19c4d3e2b4c495586bca0c592ee11ebe3f1d4c7fac16e1f4474ff65d95fb45c919b77bae8f8b533358b5c1cc806b0a250053792238df745461513bda2186a274086f0115a3c63917a4c30fb345cf944ce749e0765ac3b163bb35ce1788b0e2724aba458f6082980263912d7ce8a455e
+Entropy.3 = 1e2380287dd296d984586d87e8558484c45d3dd626eea6a0beea898063aa3551
+Nonce.3 = c2c10c2b5f33a915c1dbbdc91b5d2912
+PersonalisationString.3 = 07df0d10a9eee870cdaf53682adf44de9435d5cfec2591eeead2020314189765
+Output.3 = 8bf2d1bd01506d78f79a8d08974bea54fff47169467e02fa7bdab00ce3150e4f216dc636a1e323e50446b6547044a5e1f727ab5badca1c0b3722ba4c26306f247507842c68f97d063a15e2268ce48a497aa891fed3c5437a9f1833fa064af4b3af8239608720623ad955f84219dcbfef6a6f9de46e591448fba67900f7fad9d684ccfc1cb78a8c93fab3c354ff5190ebff024ebec283a02295f123a9a24ba644c14422d829a9905ead3d9ceb66f42f48cca5a51dfd5368a5fbeccaf7dec5ff4b
+Entropy.4 = 3b31507e411888b65eb1d417c65db0422ab1b1d89686217dfc523699f9da757c
+Nonce.4 = 177ff5164eea1202ce6a19a2bf20bef4
+PersonalisationString.4 = 78c1e87ce1cacc654f7152d47e02b650b28d66a75f1d397e5e0832d13bc3163b
+Output.4 = f8df7f6c419e22ad6c87c46023b6fe190353f8eefe7cbc3dc3e203343134bf9fe963f2cfa029536bae9ff501018a39d5e962aca1c0f802e25bec0329af4806fcb76debb6734cefc25966cbb4b723d701ab17bcf227004a2bf907db1c1c3d9b39fd99a74497350cf4663ac19b712388625a45be24009afe54e8ff5952c7eb753da8a87dc00f7e8237a67332ae56848e825cb68f09e818399d5604e212fd72a7d5a698f902fadb1fa4464ed9c2b077c97f16f67cd54516ff29e043cf25f204ebea
+Entropy.5 = 909ceb355e5651e5df02c2e28791cd01dd45f3a97d79ddec63be9dc8889f5582
+Nonce.5 = 0bfe518565ce04138328c9cd305143ab
+PersonalisationString.5 = 69b6f1b31726c9dffd667b080555fa57d2a76a4139683e712d4b883f8b4d9c7a
+Output.5 = a9482cf7d0d9de7b291f7368786e930146bc139c311eda6c51c2a8e47a64a3892d7166cc271eb3a3cdce9b640429675434236a14d19a985d8d4f0c690f8f39e31552a9e4577a93b1383ca345ed1c0259b72bd9ea6a61bc18682dcb9c59f97ce7841bf247127df75c6d246ec0b4dc1ff87f94b2d3aa922e5c2c6f0cb468c60bc538e3c7843cf79ba1c42d449d2a8db4c15ab386ce0816601120935f8122b31fad93e7429cb30fb00ba7dfd8f37b131b9b7ce648e5d4cc2b12bfad1483d918ef52
+Entropy.6 = daf64055f2f675748a46eba5cc3b87a9e0fefd092dd1385c628b5e58fd900911
+Nonce.6 = 7ea7b0b1839bd451a61d21258f67cf64
+PersonalisationString.6 = 6c81e5048cc7f4dd6119d2559b559c76ee664490fd2231eb6782722eaf547ef3
+Output.6 = 38d0730d2ad1925e2bfb6880ed2e4a4b0a540696524fd75ad089cfa71ce5558e0d22b8b3eee6a1c3a80de84ab689e614f73b8e44862b46709553c02bd674b6915296fef49c01d7c6289345f212adcb69dd66d7e1b871ea31701f4ee618a722e00c441c271ac05d078bbe14c1d74c0589aec34b053ae0c53a06bfa9b1e5720b8b8a3c2a319961a3e439dfa74d48fe77e6df9e2594c8288d56a88dd1563397eca440656f5cb428a66a102bcc8fa8869d5f40d6df15b33ed6fc7b9335f7b8314c07
+Entropy.7 = 8c313ac7ccc78a2a37800654e5c4c9e219d1c4066829d9ee9af7cab1a5f76702
+Nonce.7 = f6c7031cb31e3dadd45301932a721288
+PersonalisationString.7 = c198bae21397263a4fce1a253f418803ade06edd961c7656287333d93d369dbc
+Output.7 = 7cba65a1f7424bbd3054cd681d9c6a89fd64c67da5eadab49d2d688113f79eed721acaff2a282eaf02b823d928d28b8e500c2450ed07e6e1bc6c5f9023f91df2fed7063e32c4c8264e6904bde1e85cd3ddfc6d7db385b9834d36d1127f3be9dc197f3f2df26f11a4f33298d9af5d89ebc2648b2d4c8c15dce8e535103d36c19a4f48af8a740b89150c93cff5dd4c244519908e54079b2a1aacddfd6ea1dbdec6dd6f142ed284ed868fe451b5da7bc773b4b0af0fa1c1992661eb1f89fc0f6f54
+Entropy.8 = 2d914f23c9c337d6c9075676eb69ee9117653c3f240801dc93f630e880bd7c73
+Nonce.8 = 7fc5e341c5839e2eb16bad31692280bb
+PersonalisationString.8 = 4853b817b858f6d0301233ae99660742960f3cf45db20ba1741373b4ea4aa8f2
+Output.8 = 0939234892e77964590b4a37eb11bb286f6ff63db2840d3fe6e527e7f00246eec418b3d79c2d41685841ecee9979bdb732feaa424ff5e51b4e2117d9d2dcafcdc6e890de6215581ad10549c84fd332ba4cad847abefe253863152ce3233152cef672437d686146a123667f3bf621e7a251471a26a695f091045cd8e8133b0670086092c33bcc8304ccf704d875deb7a359a38e4f7453e732ebe1f6519a7f1c31f59abdd7eff68743dff31b4f625f9cc315579fd472583c918a72a7ffa018b6f4
+Entropy.9 = 78d96495678401fd9b8a7bb09ce5eb7b5a82064669542fb6903768fcbb939490
+Nonce.9 = d652398df43d1c1b56f4ebc5b98a600e
+PersonalisationString.9 = 9d7e3515e98af6e36501ddec8ffdd055452d508ba27d0ec9d06ddef2746d6a60
+Output.9 = 80044c300c94b51a3c5e84600537c33c2d3e696ce6ed4ad38505ade4b14c65fd6af38cb7d9f104e9f4b5f3c53f9323fec9c3cadbed0bcf09075d45a5c10f8cf40fa70588d5bab1c2ad2609dfdb216c20cc409ac7baad103fd3065bf2349d3ee59aa96a420e6f627d9b5dc602ba4af8c8ced0f455a27ccc45be32dff01342c432c358196621c672ae1af55e218d82d0f692ed7e40bfd57d6f9ac243048d4085e24bc38287ce1aafb1bd8ca754ac33d6640519ab5480b724c5dff69c8ce5a67310
+Entropy.10 = b5334d2c3d504ea556e377d68e9b712b6d961153e671fdec6221b2d54e21b32e
+Nonce.10 = 49f105e0321ba1b39bb4d315560bd2de
+PersonalisationString.10 = 216d9ebf2006991e8540bfdfd430926ae922a8c12759797dd8c684ec26f49dbb
+Output.10 = 6849b8bcc155899625db6a4a7ad347125c99c61f2600da0c1b28c2a7b6f1be83967ccb1e40a1f89fea7e8341c30acae8b1e46c7a332f9f5785547712f7c930bc846efd7e6fe74d1c2954baeac284baf896ff51a688eb6a6eb50bac7eccdec2e9fad688135884a2bf8e0e5ccd2bf27c771806190102055eb07eedb749b0d96f99d34fa64c8254f375cfee6515d4eedd4a44b3597a7f6367013cd9412738fa8868a5cf13be772a2c6dabfd7e707c76f31d7880e91fe2afc5748f3b88fd06f1cbbd
+Entropy.11 = 28f183e74f140dd8ac8734d189241287e1a04355ace6f304c515392b0bb7699d
+Nonce.11 = a403cad967a07bdb585063ef1c9fbdbc
+PersonalisationString.11 = 972a837632cc67c264845e308270660abb9bd4b1262efc05f884c463388c6de2
+Output.11 = 6b56d50a4100e6daf006c581a65f4f97bcabbc8d102fe80d72853a88d7c69148f2e4eff6db1263b6ce92c92366255fb4ba937dc3847964433a8e63f70bbd758a6132d6b0390a8582bbe372b137b329bd92307fae48b6a16bb094fb00494aa574ba9e143b49a46c25bb1fd0d6968c1c24585a697fd88d331b0e9076755a7ec9106e0ff34c428f0e39f48b3034eba14dc5740a22541e07d61d2e99f5007592875ff479eae65d42d65e648d573f5ffe23013550072fa55dfe9f5fcbd9cd5aea9590
+Entropy.12 = 2dd6b3e58ff00dbce6255c452d1eb3aeb211e2fd936d5d0f855518ff2c1c099b
+Nonce.12 = 61156de8a16776022afe3c6e6b26ff39
+PersonalisationString.12 = 674a4dcc09eab1cd4bb4f21a70f3ef511de6aefe317509ebd9bc477ba792636c
+Output.12 = add0b4f31a396bef6c75ee4f6feda4909f6d1838a5e7d707c6362d56c62ba84f1a9093ed6c141b9a50b0d6a319b6ff3490eafa848628be4d84b822cd4b1735e52948714b6e0cf96e71d27c3b713ef4f22bf29e198eba2840cb01975247cf08208942747907779e591e1ae526b71e2a943f0a84b0044209de531ac3d4b2005818237c60a03e03918aeaa7045480315d2ee29957c709cbf50c98a87d9d194f4b00d6baad6446f40caf11fee232062e1df92bc57bc7c4dcb46f2ed175c21249d037
+Entropy.13 = b6a5b50f57d8ebf8a619615c9b91c1642fb0525fcf4d8d3733c944e3221471b5
+Nonce.13 = 8c37ba49cf56b9dcbab0cb4d238b4b86
+PersonalisationString.13 = a94b6b839fd0c30318b189391fb30877f17208f9401033aad4bb0332656b3b23
+Output.13 = 17c954b37811b89cf00b823a0c5f0a07418131200f8cd88d321a0dd48aa3853c4332f0c32a9bc039142790be11b69ad69c7463b166924182e07d7fc1e1427e42e6815c0161b45b6f6f53d1ef12c139c035fffd997711a94ac6b82ce25a5d6c7d7b465467ab30c66eae498870ce6b7dd5dfecd6cd40b9897d17298073f82b588965b6761566ef868365cfcad26a75ddce316e420faeffda45439ecf5d39775c471c683999cfe93be718b1c8b32a5d1d3a5c5d48a06ef7d4d7d9c8684e4a165bcf
+Entropy.14 = 09758e8217802f40ba0d6e9c71c142de1b40022ec1af3354e69048ef3be6077d
+Nonce.14 = 3432a2e2263728e375ab973bb5842d40
+PersonalisationString.14 = ccfee35071757d5141f55a481b7c44a584c5e537c636d4d0ba10dc3c88adf6a2
+Output.14 = 72a77d1c5dea9d00c349d4e5a9e6dff63ef6cb80b7998ef62e7a1fdc2267057d07fafb993e8df868821c6cf76430f3b7ff24a527f7e41fda6d560a773d05bc003f7e1ed5085f6da3785dd999a4763894455febf7618750bad4e30d8f52f3a072af30d57df5afda08ae7cebdcb659e6cdeaff52b47d4dc571e28315ff0e38538baf436e02d157b64afc6d50e6a4c5842aff1e7573888c6ff9beaf4f91aed988f03032388940c4f54afda05bf55ef6fc8c673f01ab545838574f3bd4f22865cfd6
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = a5825e0855cfcd4221837b493718a380740d53a21870837671664196ccc54d9e
+Nonce.0 = 361d804f9865631a0c929edaf560eba0
+PersonalisationString.0 = c337212fd68d23d15415bff96d8e8fbb4dc9b79b5044c213f513f6917487d772
+AdditionalInputA.0 = 5987f21b584c2107b445f06be605eb00d62acc379f7f24ec55b65c5467aedb19
+AdditionalInputB.0 = 74132b412a58461aa41e2db743daeb6d809b0043fbfde801815aa2984a47b59c
+Output.0 = a1876c53450ea07a97d260ef23f3520baba8b6942535db0ace5f2538c0c2418403c50d1f5fb10b9757a7e7ad7344b5e564be357271c007bb03b6964a891e29fdf17b7520e905804272dc3a692adc20136cebe7e14cce28c39bf509267bb4ecb8c036c3413acf0ce7aa4c2b0955825a00afa1ee6ea655d1cf5acccb66f52eb643b117e3c92feca13e190c517987074dd4464e44b3156383e6481ed743634c6eceefc336212b9d52e67af8dc60bab9feedd57a27c5eb97835bc9a3690801aa8c7f
+Entropy.1 = 6fe04ac2198c0a2c386b0beb4030b3037dad41fa62f88a8428aa94f7c83e9df9
+Nonce.1 = 2eca61bd42ccdc2b9673b093cb9cd4c5
+PersonalisationString.1 = a4d77e5d47af90366d947ec0bb67768ea4e868979045b68702842077e21d1c20
+AdditionalInputA.1 = 054e9f11cbd49e916fd7e6a14534aee0c456dc97ec0043e4cbec9626a381ccff
+AdditionalInputB.1 = 6a3ad6f6716a302677f597e790778421bac683cee0b840b2e9a0d86c2e326a67
+Output.1 = 4daf3f82f38a9ec3f2bf8a471da37aabe2a7d27c0bab3de118d66b1c1c8e137d0258aaad8ea36031de8c16cba7829544e8268a0674696a0a56262a05d0ef5ebce44b31ab6f234334e3aa20984696aaf37aeed7650677ca5a46727b73867be491619f55614af2a47a6b7e7faa3f57cf04b757a43319c59c0784f0a069131d962d6a155a8f69fe4dee911cc130a2a9d67db554b5789fd7ca66a71963c091242f44b402f80d9e8f0b6cc47620e9f1898ecd87bfa80dcbb31ee225229231a57bebb0
+Entropy.2 = c85ae79239ea7f32597ca927dd42a9d992016828464a5df8318f7ced398c0a48
+Nonce.2 = c384b12989ab5a7dad84e73085dac1ff
+PersonalisationString.2 = 06bc07e3728ec33aa92c2904fa89e4465aeffb4717fccf36eba7920cd1c73fe8
+AdditionalInputA.2 = 78f8a518a5657e9816b9befe8f216ed47152bb9eecb5cc36042314c0504a5fe7
+AdditionalInputB.2 = 6e4f0c9be8d4da198dbafe8abdb5d2bb5097d5ccbb697a7d1a668cde0890e155
+Output.2 = c02e1eaa1bb6fbad9c6ad2d7661dbba8600fc8d403e80b0542b22e499ce055bc7453ff11050b0320be3d0852020c95fe80538918a4b4d6871a6f159bfdfa671d2a3739eebf8fcd68cd2997f0de63fa8c9ce89fe663e2195b1d19340a9429fd4936a2289ad97ce1bd83bc95978aa4a5bf2720fd91568269659e43d8bc88e10d5b806968eb0bcc33570d4396881e59ed92c3c07f4765515d77ddacb6003cca95731b27dd5c48ddaa346a0cc313154f2d42dfa62d9ec65d8d5c9005cde2d0ae02fc
+Entropy.3 = e3f2f42dd8e41d8f252b3e77c3fe7025b48b416f49f634df469850f22c4aacdc
+Nonce.3 = ab60bfc89badfcc16ad53f991d2b3b54
+PersonalisationString.3 = 008b552e005c78568f8b865f3857b0b37f8f28a7fe277ff63dd64c5d44f376cf
+AdditionalInputA.3 = cb634698375959c4fca74026ee8606d76051c1903579acb3bb28772db7d289a5
+AdditionalInputB.3 = fa7f8bd37a442c09b7ac8256aea83bb88b05fe288e1655e79b2f56541738b639
+Output.3 = 2d301f5701673f080ba68fbe3da99a389efc9d6e4aa3995825a3f2f7cfcd24164c6a2db4cf507531577dbd8ef6618321f8bbebacdfb6da028dac51965bd10d0eddcdc7f34e0e03695a2e24ef852800fbf7085ba6d8d605e88659e3dc7e9944c712a4713cbac6d35b03965eb2a4890ff3e01bc6cbf625049aa139f042abdc50b17a187bf3bc23d40756a7e017fc875db1532e2e8c20d5e895f2a7e36c066e4f1fdfeb62a5eb00eb2ef06561cc97ad6eeabe5b536a314eb369fb4ff702939e0d10
+Entropy.4 = c2bb31d49db727c52800d589bbebd2ed6a9279034fe573defe4a3fc8181c6ba5
+Nonce.4 = d3f1992a0c9f2c9000ab8866b59fa28c
+PersonalisationString.4 = 3fb63ef00ad27975477091c18afebcef0fd815eed6387acdd1bf69a2563da5f7
+AdditionalInputA.4 = 37ff14bec69d47f767b1b7d877396ac6eba2381ad1e526d96621a98c921dff5b
+AdditionalInputB.4 = d6b53f08b72158dc971f53be13cd2dacd41de11d6dbb82b518f8d09f63b0b3b2
+Output.4 = 192c2cfcae91a6c130b8fddc321690dfa797606c45ba5016c29fe92cd59e1537097d4c0d5fb1bacc795010984d2d5235c2ebae16c0f36ff5f6d3ec2059bce03cb3f8e002499611490c994d74e678bcd87b610adc07dac492ea429127dfbc66399b150b7a89364a6bbfac8f18ded63dd544f1ca63e59e87bed39565230ca47c1bfbdd7a7554d3dc434ac01216d6bf173fd3fff5f378e487ac4078774e1432195f0ac30e8448c3d9b5394ff472afb345e725eb6b8ce1e98c5daeb0dd66665d41ff
+Entropy.5 = a356eeaf651bdd92ffab32abcf9b98155e71f7fac0f0e4adefa815e1d6c5636b
+Nonce.5 = 5841b7c7f014ac05ac65174255d1ee4e
+PersonalisationString.5 = 23685d20bc0302ddb7671f9b6986ded41fc6cf5059023ef3cb72680fdc030b6c
+AdditionalInputA.5 = 72470c86828d6bf03dcd3d23d0076712169a313ca3eaf32dcc513825beb2baae
+AdditionalInputB.5 = f1ed0e127c984b2289e28661620237336e030c43dc5f0677d784c3b325a75679
+Output.5 = 65bc2efa1ad4b2384228300a98761caa2ae97d8c0ccd6e4e445fd8de0a2e59ff25076de563913e0870458e8f9c70fdddbac3fc8d513f3f17669a1133a3fa87cff6ac447d7638a64d1f9609bbf1fc178e1e712a69f61d208e9747a2c834816a99ddddc8be9e35d70114a9db3d9b55e134898940adef320b4686770ba00d56bd7eb26ddfaabe168ce903704dbf0a7136b025737ea54159046d3cee11692c7f57e98e16f4442d0cf773a668fd709ce49935dae67f46bb58f96636e71c185f1a3870
+Entropy.6 = 9ff397614ad95ed8b6ac225ba32fc4224b8deb5dff0e73dddb670bbacd74e571
+Nonce.6 = 61c0b59489b8d6bb16bfad0fb2e4f0d5
+PersonalisationString.6 = 04b6f3a762a89f61990efec287674b816f7b12199067f350dc2bdc36648e9946
+AdditionalInputA.6 = 99faf59f88fb098b094a9514eebe0222d3670a7b91282b9a4f4b624d221eece1
+AdditionalInputB.6 = b3b94a78978bf27e3b44593dbfa8db5e9436cd23baa42453c3a39b6c80ac70b7
+Output.6 = 2750644b55acae6e32dbfc9c36b11af369e5fa190afe98b1eb0d12a96ebb2af43e49b8ea2b4347d0cf264f873d0fef08fd030b14c5cb8ad95bcc3a74ef78ae81346ce4f1ae48d98ca9d8a7d19272c475239173c169014e75304d4f737b7ac2e33ee621ea7aed7cf06e6c0a5dbc26cdcd9e425480e34428f7699458b571c116846e39ed7e720cd9dbfc9c6783cb92649cc8ef05077db319fd42a1c2e958bfea2148f19219487c57927a7f9feb568cfc7395989f7847e1cb90c6a7ec04439bf92a
+Entropy.7 = 1c6c04a77a4e7ba9fe80e6a181e033ab6f5bba8b9f3a4d8196748312c4a815f7
+Nonce.7 = 989de5c9845754012f1a22bec65468a5
+PersonalisationString.7 = ff4bff05cdfc71ae321ad58299185112bfc9356dc346e86e907fca645cbb9b0c
+AdditionalInputA.7 = 07315e2a0c7900ce7fb89de89d79bba2b8e6b56d99c8223a154472f25d11f4a2
+AdditionalInputB.7 = eb5b307b7ba293ba2ad700f2e829a6dd34e258013560068648ec3c89d2c89496
+Output.7 = 512c3d7c71e1e57bbe451e79e47f5c6fc07ad8acc3e93ef7324cb6f24b108a8487422704b82e5cb66001f4a2c523602093ee6a29905c143f838603702d4f61c522d8184755e57776e615b4967af9bbb5b29144d683ea9d8ab6fac3ac7e1a5c0579294b4d72e475a03e1f1b82db6868fb2bd361f3ca42f48d4443d51d593efe5a12ed8b34eb664e61c7c0b7da453f5e66891c91f0859dbed4dc1fd7d4a5969172309b5aaa55eef5871ea68047a58961afa761c5cd3c5805a8a7e7f0edb6ee4eb2
+Entropy.8 = 815e69bd8935f67f12239b4382bca5913aae0725b93e757d93974ecd6744306a
+Nonce.8 = c1b5d24c068435355f3affaab90099bc
+PersonalisationString.8 = 136e4bc9ce2d6217e74348a6b33199bb39ecc6ecd9553b9a94de75f3bd886bfd
+AdditionalInputA.8 = ec4c6dcce484736c22dffed8488d6bfb95867db71ad53eece69ea09f6d38562d
+AdditionalInputB.8 = cd23eb8437f35af8c0a0cee068a3f93fc9e830828338462eaab55e158a647a3a
+Output.8 = 561330156d2a91169db6bc0c885a99dddfe8af40fbe969fb22a079654ff6141110697923dd7f6c9d12a27797310b66d05bfbe9d4fab16c34cb1bc715fa4fbe41b9d90bc3b5f0958bccd2d968abe62734ac8b4c66a375c249a71b33a9170b192b9a60951ed2c2170456c5a69b6ec41898cfadd5aa1e198df642e0498454daf567c009ea750cdf452dd4a8d0e6f95d1be72fd24d0b90241e7b5843280bffe502d22722763c3d9a865210d32c0defc7dae395a4080430807c2d36863e1a27ed2eb6
+Entropy.9 = eb4f2e37c052b6e67beaafb75c575ac7146db34eced5c24dc6d4eb1fbf50dcf3
+Nonce.9 = 828dff1d8bbc85840e7b18e801e69ddb
+PersonalisationString.9 = e68223a3274661aa668de15765f8c334503dd41843cbbf743de5ec5d5958544b
+AdditionalInputA.9 = 7ca640279006e71bb906b5e8c1debe3cdb82d843e5b945959fbb22e597d35406
+AdditionalInputB.9 = 772b1cf18e4de1793f1426b707111380eacd9876289d593b79ba4ed8d54382c3
+Output.9 = 7a86197194aabfabb7aa94615ea71b2312015003c82337676adb69cffa1f4dc04b36573570d461233b38e03a702e0a0be9359385d56725b05b3bc2876f6c83c48f1cbe0857a079bff4bac98fdf58dbc3dc420699c74710083be78276314fd7fbb066dcbaf5a0d4bad3d7f09763c080c5d189f75bbfa7e2f25a332343c08a83975314d62e6628eae5ced4496d04e39ab7b70ea2ceb0e998e5a23de7d2a06a8f60bdbe60501dabc3816e33cac5890c95b0e2c388d0950b4d939590140f0d01d0f6
+Entropy.10 = 12f626801d2bf16595dc860b5c2ab1d7698eea16d0a9f0ad1062857713ba66d6
+Nonce.10 = 21fd329fa9a4d08cbe47784fddaf6f9c
+PersonalisationString.10 = 13570610ba985eb5fa7f4012d1b24620c09f371ae777ace6b31084fdd817bd88
+AdditionalInputA.10 = e0c52c099d2649cc9b207acd2c161cc9a8ee8bdca44c797c79e29ff86a41f980
+AdditionalInputB.10 = b76d430600ff1634b4cdb59daf52cdeebf8474ff88be984d3db900bd347ab640
+Output.10 = a73da8ab954385d12b87086c35af4b64968bbaeb720d5487ba579cc831f8053c2120cd609d25647fecbcdfa967c788e1393913c18f4362194c4b87be4aa1098952288a6312880b3823ed3784487a744ff6ece81da4177e5967642a755a22916b578926308e12139ade9a291df3779665a5214834c44e469c7cd39542d1cb535d16d92a439c43afbcf4551531abd8c2b69cb8901152410fe26236e0fcc0aa3dec898531befb1422a9e6b226739ef9a9ad3bb6f223bad19febc7b2e4afa0fd45d7
+Entropy.11 = 10b67c9740aac7c965c644e4f1743855dfeecec5ab2b8da4c3127dafa8488716
+Nonce.11 = a52df195d047859c9b6883b641204109
+PersonalisationString.11 = 5e37bd9c2fa7f6e257f19b30b4e82076ef6a9c96323e8d1e82b545dc937c617d
+AdditionalInputA.11 = a8ed5e5dec946576b43719992985c59defe7f87a2babd834909cb0b9c589dcdc
+AdditionalInputB.11 = 7d2325ef88c40ce2e1e4495b80f3c38c955024b760e945ca51002d0ae3006024
+Output.11 = 0cfb605afe8fd756d5bcb94bd6f240a1801b834640d14b5f10aef6b7aecc35fa1abc88496ec84a64eb3bd7e629622b4a38a11220613d0e50391a5de16e0aa8d6a126a7e8ac41e820ce56c9d3890fbffcb3f7322cafdd74e078b2f75acb71de440deaa0431183934d5404753211771bfbd605e3d6c0ec6d5b6f2c9b18da0927977b9d72a0a035fe0e272c21c94a4916aea5bf264ddff0c76b239a459a28b973c6fdf2c456fc04b3bffac4af071b6c4193a96f7eded304a500967bc78afb2c4e5e
+Entropy.12 = 92bc198252e5515648e06afeecbaecec614882b38a66a0c9111567d36b2a97fb
+Nonce.12 = 234003e9e6ccf82894b89ec20b53aaa6
+PersonalisationString.12 = cc55b057b68e8ee1e334f5c7610d4b0627f95febdaa8d5667d3b453c9f6baa57
+AdditionalInputA.12 = e17c2d2172fdafe61ce30ddae5632372f1116925f4e157a3a4fe020110ca3d54
+AdditionalInputB.12 = ba5ce9e893f63b356a5af078284a02aee9db5f108872a3bf3c439d5b435c1d01
+Output.12 = a8aa68af678e8e340b21cf7a595a3ba72daad1dcf124ba7f3ed22e070aef517d08baaf6fb5d522f209f85ea4c4d5357a91a5511bd6dea955b66399f7f3a86952a89a489f5f2e4fb814c0c25c3d7368bf1759fcc0e1b34d527ecd4bf767b96761436434ef537937bc4141e7edbc24faeecd94c93f60e6b6d50d92370571cbe4118022cbb2091098b953db16d5424a32f4a28bab2f4e2380bf5e8d96d1a4f4ab5a94581cdedf59ac7e7b123d47789e1270e9c0bbb43d9ed04e6c42d27f1a8b7455
+Entropy.13 = 3af3ce7c2de63bff37a8a40e7d5a510ba3941bb4d037f377496a68b82c527fed
+Nonce.13 = a968f6c45707f8d73938cdbfe04d1f17
+PersonalisationString.13 = 9c7d4d8266cd5da031f7bcf5c2aca5f4db1c6d8fed8411e5cde4af8f62a052f6
+AdditionalInputA.13 = 70a8bc04b426969c55599b66f797c20c88cf646f819d6b1d3cf9512556e1cf82
+AdditionalInputB.13 = bc33476d9491665ea2f5b7108c8b554c99c8a20787bd12ca689ca62dca0b8254
+Output.13 = 07450117a5b116d7d7e0df5f1a420141887f39f16852dd5b3ed4badf061f684767ebccd6656b4a838db4d8e4efe3284b85b02c4b7076c056f3255f7ca9947d7988507b665b653d0a531c6e60aa677eacf53aa380eaaa4741bf2bf9634e9c4a90ede8d20522217b8a7c2e458cc8b002341aa72aaf93263736b56166c3c9c4d230ff96fc3d51fdb8ea2125facced58e1c94cc4405ac9dfa1212b55e0d37a524d14684d476b5b1842844a9bceab02d5b6e1b01cfad88aaf045a9d9b3974e265567b
+Entropy.14 = f676e6f82d90414cd0cc23f83c112e6126436b962c454ea4b9eb0598621a27f2
+Nonce.14 = 78c9137a3ac268dcccbe19ba0a7580b8
+PersonalisationString.14 = 2952af91d73d96d41a9b6d4d1217de595f72979b9024e8c94912470ad29acdab
+AdditionalInputA.14 = 0facad642bc0004f946e3fdd149a4c0e52475c9e832c85b228bff6f2a4af3af1
+AdditionalInputB.14 = 19d477a7dd45a0b733e6c301a4fd44ddf65d4fe0a0435b57e319e31de4797427
+Output.14 = 2a48844f6919ed43a2b0b64a1d28707fd3265b418e0673190b49a606358062c1a54a6071c845adc6ad74193d746668f890423ebb971a63cedae3241005432c8f3fa3fe7f98d5912da34dabcfeb17c03ee8881de7b2ef04fa2147b78532eb0ce7d9244d717697138f116341c7b9e99f15728207f6a73c651b8940582f9f926253420a853ae18132093183a6073e3bc85633b75e1c6cec9323ed4142d0c8ca0dd5ab2ff2e6b304ab8cfe4aa98ac64951d836e074169d375ebeae8498f11bd02c05
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 6ef7df0c0b9181fbff0d97b87caf9882c5af2a5ef9b51e987a9e83d1f2deafc5
+Nonce.0 = aa26b2f2536bc7adaddf6573aab6dd5b
+Output.0 = 38c2ce0f928bf7a737b681360397036568719ca0d956292c0dcefea6183af0b68cc2bcaa4f00847980d21476f07a8c2ec4c11a8b63af03e62f7c2047d26a331db4fe9501a6f5007fc7702823954ccb8761a2fbd5c9f699ce260ef24ac6b080c5b5806dadfddba4d509d92f1cf387ee09e7474deae77f575ae4eb630226b7d738e8543f4cbc862fb87541c3d201fc2f1cd8509cbfd3f756ea0990ad8ef2105313eb3caabae0281b8088d0931110ef635d4d380b98d220635ef01cb2c345f5bc22
+Entropy.1 = b328bee870ca03a6d14e1f209addcac9b3751b22eb99c6e4a2a3b4a9e80e8683
+Nonce.1 = ce4bf7c799f3c7b0bb803a787ad28b26
+Output.1 = 8d0bf7fe6ae18a1d7c897429a373a98e8fa5f15c464427b8a1a36b3338ff746b7a90404148fe767f6f093a36481c95cd6f51a6efd9c6fff0d014d3b080f5233a6ab7fadb19d0b31bf789c1412b5d0440b720aac605a57ff517d7037e3bc4fd94207304751af0a5ec111b98923ffa4574da4d80de45f45ba5ec7d006681390ee014c026f7e0e355e610677377ea2348526fe723b7ec56726955fa95787e2d48cb9ea729fefb889b68568589a3c6e5450ccdadc38d027736777f32f69aeb74e2c9
+Entropy.2 = e29f20b139d71b3f6956366a4e735a91b29630fad720f56d62fcd4e98745cb55
+Nonce.2 = 9204c396863fdadce6ee46abbe655df8
+Output.2 = a882e81a9c6e10aa87ebea482efe66c6d95c6965a18b5c929b07157f79c7158e20a013e63effd24eae52c594a838297ba18c0f5c4df21193df16f9cdcc88532b423be880d328eadc531c1640b886e211b23f60d95507764c4320e0ceda4a4aa70ae4a5889faae167f59723378a0e14166f813dc4187d5f36641a98092e68e8bccc6b28da2f1ac60ee60eb74e6c2acc5036f12ea0532c32deabeec2c4b00c212201cc4945f1b32b0b445b4bfa2d1fd1f7108ec74c602538651bc6dac2ee025fbe
+Entropy.3 = 2c8bf920b79657639a86aa5cd7e48e70d8651b33686c7a3142c9448477074d95
+Nonce.3 = ee54fda4225a04499f170f680214961e
+Output.3 = cfb7f884ff3b36fa4db5eeeb296f4f0319485a2bf1de8d2ac5dbe98cee9abf24937ebb8d4af9cae3534990f2b0b866e2e6e866ded378ff7ae7b3772d7c013c7f5f91e070fcca8da7b94f372971e0c6ac3f2fa2612d7faeec8fd57b6c0ed038ae368ac8bdfd1a13aa0cc46ed1a2fbfd135950a90de13cb56eba982a7d9ebe9c64a59ace8b154d342966849edec062754be2bc86faf80f3fb87001611ab90b36672150c5f11930fd31bddb5675778e7430571fab26c04eb86689b12a48bfe32e40
+Entropy.4 = a2b35e243bf41155ec95b89ca8c02a14aa6cd3f3469d1cde5de53142e00b8b9e
+Nonce.4 = 5ac28918d35ad33dc28d346cf1186690
+Output.4 = 4c4745be14071078b55427ef5fb5297286b9d83b69396c2d2f24716ab4cac2fba4231d525b5c972bdb7fda75a3dec15d35885fda6471f39c6868b74c478886640c4012eea52fe5d919737b2c7ce47294549eea8f6ffb6a149f888dcaf3cc8dc1bc3d6fe48a7cea610cd00b9103712f05325d3f3ed2220972bce4cf92a9d86a6d10748a1172b2bd0fdcb9b159efbd0e0b2e8434b1e7b1a78220c96935d3f6989f4fd4b0d6722137fb67823034cd7b3f5a230148a0fba339b060f9e7b8dc024797
+Entropy.5 = 5e711d2210345876355dd9e09616e041e84fcb26d7d65cb522050040feaf0dbc
+Nonce.5 = d4ef1bd75e85b4901d8c005a684970bf
+Output.5 = ae839e7fa091788e8e11f29c14411569a2b4437719d7411436357f7034eee223c7acfead356f07119da87cca1b787207907d6f1484d8b85a3de58beda9f5fa913fe66ae347582c87564d13b47eace00b64ac08863d6e5e1304f70251280b86a6ec0301677e3cffe2429e865da116ccbfbf9dbb6c15454c7df23b66ded8972d8dd0d95ca154bfb4dec53d57d220882a26effe456201c37895ad7d94f1f18c9d97526c32cb206da2b52603f4c699093c7447d38ef9f49b5f000f1e6832e01efdb9
+Entropy.6 = ca71fd984698d4a801adde55a12e1d3dbf947beaa12fefa27116a542f83cd353
+Nonce.6 = 841355c447a8909c1b763ff0f99bcf95
+Output.6 = 6ca4163d630a00e9a19b9a8db91ceea4a9853cc816fca57d8c87c56d3071ca069c15855902c5105a577a6262101a2302741facf85b111de0b6b6dc052dd2e9b566e0fc53e2aee7e876cad9a5a257f544d4f0b3adb5b2720b4a96c32258c699ae449ead389609ed48452bd2e7bb2478c3436314f8c700bf57c5b3b1214a0b7ca89d2dbfd197e652c508b16b0098b46c08ac04168545c7f496d5b7381ee05c587687d0c473a05584d9e1fd8d6a8c650fba986f3b87bb69548be13006cb450973cd
+Entropy.7 = 2e2f77a265443252a51f674940f3d22e7471146663051e7b3c8d9d6294f2e533
+Nonce.7 = 0eedba6cf1248acd00895b7b731b8a5e
+Output.7 = bb580a32c2274aefa39c7f396d12bc2e4806201319daa402a4bfda6d6e112d977c0f699843cf0fdc488ab2bc6067d9b28f45a51842bc23cd1e2a658d09913b0548576105bb688c9f4859a280fb1829b5a73eb7b1e56bc2531598fc0b78abd5eeb9fa700d35f8d66cd534d868ccd803802e92447c2482c69307e52e687537c2670603014ba26ae7ee5306141270e7490f747d7fb6f10f988e7f59abb95ec698b467424e8717f5fde81a82da5bcebfd9ed0bc2202e04d3f05500dc160507b29bae
+Entropy.8 = cbdc84de78841d6eba2d14afe71d38a1c82e07165d69505034d8a287d8f5b26e
+Nonce.8 = 970d3c34193f81bf1fe70634e915645d
+Output.8 = 47f0ae073c8a605be62b79d0cec7b4909bb55d1315e13f22197b0735489c06a47a3c5c209522b7c21b551bc0782017a5a9e79e18fa75e167617000ef5f28cf9d464b76f66e20d2ea5ef98220ee92874b046891a7838965e818ad58e837240970270ed576e545d9746ccf0bf2c20c30299cd4cd3a5b5c038d622c376d3ec08344fe695a01987c5e1c298edcf7a42ae7473cdacf4b9d775d480af2d162b6d6b1d139bd0c208bd5dca83c5d4bbfe2ea64d5ef94da813cce88ca18825d47d740a1d0
+Entropy.9 = b917e2a2a8365f097649682aed69a177b2dd468aaba7b73d9bb66245d851538f
+Nonce.9 = 89e6729035344e3d82652b0bcc024db3
+Output.9 = 8bd97d4299911a92dec3fad5c198403eeefd3be981b25898eafc6b652da6cdfdfa223db37eaaa03e30c5054584f9025e1704e8e20f53ef4534c13bd714726fe765ff63645910c926de05c067ac20cd974b44704fd457c35359d4520610f4b51d041031a81435dc17a43cf0e4426d88643da33b82cc71635723bf5d959c546a8ec479dd7741852227fd5a9d4e9bcf2b7faf2084c67f776bd9ce2f208de44c8d2c03ae9a7cd7ba4fcd6a6ffa274333bb28b6abba2afd2dbfb9fe0486b378122001
+Entropy.10 = 208307e4ad35ab0be593d0c3f9a85819ed05c521519b493056d0a53f1ecda414
+Nonce.10 = d980460023bb998eb0d858791d5ff895
+Output.10 = 11be42b4a95f07a68b66340157575056269854617608a13b249dd69f8f29d2c191b9dcdb1b1777a28d55540cb1926b2a5cbb8adb558ace37feb280d4563c4201733c9008202db5d611713c66b70cbb81889136329f90e9aac3daba22c8e200b68a72621707229205dcd35f4abfa79a7c38cd5ccf21e71f3dcf769130273849bb58e90a4881e85dc7ee92f4dbb613f10e2acbff67a5c99429a9221aaa2dc73e714f735ca4a758a85ebf7eada7e37ccd9a6f7005276086c4e19a9469e88cb47434
+Entropy.11 = 92b42d45f93e85403bb49d9aaabc9d7b80eaa544f79dae4659820a0b08ace8f4
+Nonce.11 = b818f47e3225bb3f2e742c4fc3d241a3
+Output.11 = 39e1e1cbbc02111fd07009e694adff48c35def11fedc24eaddcc82ecee8d389f3afc8619392b49559036f3eab823fdd2ffa8555dd60d2fc3c51db0a46b0cd346d7213f931a186a967f15265f7825b65edcd5240f3522713eb867843294016907f9ad3b3858324482444310e28fae521e154c31b10c268d87e1bbc7641731f8705a1f0509ed4570162f6af1c2700e82f56846920238a9fb878d45e35598c43a269a8ed33df361d4749c0f67eac9b94b63fbc54d0a314c8c59b3315895fe6d643b
+Entropy.12 = fd96da186fc0247e6e7d05d98fd1db570b748372a5c17698d1367990c7429c5f
+Nonce.12 = 2dda1c20be855abd248ddacd2fc9b4c5
+Output.12 = f8abf96caa8d6b7356cf2b20ab810726fc170bd46e9d2b0817d9b8d818af28d9d7de4e7d1d379535173f84230d77444b5781b41abce6046f19df985e83409072c710d0dfcaf70b4fed4b54b9f53b233488a8c6ca01effc36784267667d58058e8be544a17ce1fa5af1729ca9a0ff1c5657e659228e15f246c3c3bbe56d6f55f59a14b421c759a7f5a310c9c5e590d8b80532dcfb6449664c7dbd29b998420a443d79bb433624f03c1843f23883827f42d755ed663714530e3dc5545c7c38e76a
+Entropy.13 = cfdb054dab9f892968fabec8e00730ba4d33cb161e4f9912f6e740a16f2e4763
+Nonce.13 = e3de0b0263c5560b98e2d9df0beec8dd
+Output.13 = 9530a7a287bd21829b2fba080f52fa63f688b9cbacc0ae4c13f9cbd692d318364a3d2f62e043a2c096ecbdcf5b33b47543d45c84b762f2c1ead80e979415f2428741cbb8ae79ac44c8261c4e9d561d9884a4a9946d826b5f1538e73c8a20414a0b1878a396e1181c2eaa8da3e666863704cc0892d1b96030f9624f864b01f787ecec03e237bc85f5431ea058a28a9b3bd4608563a2018d9150094ca007a7c7a5fa641875559cc85ac54986f92c34ffb4f23fe1456b35f1358f025c31054b36f4
+Entropy.14 = 3b6dde5f550d482d30eee2288bff802241ef20ec15696e614b7268f7c574eb1f
+Nonce.14 = b8d8984703ca7f942951fca97129135a
+Output.14 = 36d0cce70eb5aaccf9b172fccf68e01eb8ac8b1f2652cdd238f4b070c8f2d9a128418badb38d5d5fabe28b59d15cd432010716fa6a48071114b2168cd29028386171594291118e54fbf5b61ae3fbbf9a21ebe73a4aba482c7cdc5ea1a4f21a0f1b38812cefff9bae78c2b95f417dc0cda010079b637f825dcba059d154f5a53050db773250013a1f051de9f7882433d2054ef2adf9b7b57c67173c06ad16cac6bdf74a10bcc666f7d4a091a78131c5ed76fb733791278b6ee0f55302c4b122a4
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 211aef52ebfa8b8ab712d6734f6d2403cba5ed8ee1aca4bceb8358215b526cc4
+Nonce.0 = d24fd710c1773744b7af045a23e2b359
+AdditionalInputA.0 = cfee12401a1b8c02f02ee485c0eeffbd7a6983a620d357953e4eec75c486b43b
+AdditionalInputB.0 = 9609829d8bc02dde14cab4f9264dc61798513c9e3ca977f735116a0cf553c065
+Output.0 = a6dc3d779f35be2209eccb4fcb5ebf15bacb10a8cdd0bf3cd28b54cf750c6ecaadc755ad48dcfa06420ef52cc93959984116d54d5f243ee5422acdf46448fcf47e33032cee872ee4c3245b5feaeecab94766ef0027fc9e1df5e99ed3252b1236c3d6459a43dfe9b30e8c3069351f57a0f650112c0be658856e43b3643c26e640ac966f9a1aefc541b37d0534ad20bc6889055d98b5d398deda10bfbc62842b992b8a10d46eb9c5348f1ded1ec46c1d124204e4175b24ffe97adc7692d3f20e2d
+Entropy.1 = d559e3a0489a0cfbd5b8f5aeac9fc0bd5a082f580fb16b4e79391dfe27fe824b
+Nonce.1 = ebd227125a5b9c502e1611c7fa68e557
+AdditionalInputA.1 = 406b3d5cee034080e84e3ca2ebe480aaf057b636f52a6878fd0a4530b379b85b
+AdditionalInputB.1 = 96b9e8baa5c839a713b38a921bc69c17c9ec5fb1556f4c2139757dcfaf0a6eee
+Output.1 = 8562e5da6c7d5b3e9e74ad6e6f5e684b4f04ca9e99a0df4bf514e2ccab93bdba59559b64a28f4d1ffef2b14e0394747cb74964b5b1139457014dedc674ebaac25214de7e13cf45ac37d502f69a92d13aa633e0edd25ec9ec04a8a40ef1613b4c53e9672e5d7d2267493b34a5a08f9ac7752e9adff76b00337d7649f3c57e7c7a71347a59cdfe41f8f3fa6b2dc701408caedfb46b08b8abf46cc93e237ee8279e83203be7dbc4694579889a1cebd034a86f13ddc7d316df2e0ba0d7ba23d8f2f7
+Entropy.2 = 84bdcc44f1554efba8de2f3ddfb87c4fce23c8b97c1b0e70c42e2c1683675bce
+Nonce.2 = 7066b1fde6841ab4e7c9437d791dfdc8
+AdditionalInputA.2 = 31f4abe175e228cf53af8b3eca037a59a2126860eeb8ee69f1f88140da589d31
+AdditionalInputB.2 = e54f99458a3bfb6fc44f32527d01268cc7b8de06017050d0fd47764e005280da
+Output.2 = 8dce21f6599b66704b3d718bc351eb8435f3a00ce80393810e85b799b526c9c4883eba9e4661484375d5bf3087fe22915ee41018a4f30764a9bbdf35897f64a82f840c67ec8c3c62e96d9a59a9c54e03f0cec78258a138a9e5370bcb0a2aee4842e9e1a29cf1425a74cf89fa48d4551487f41620b1073114637624c5f5d3b512e9326b85c84566c3c8ba51b8bfbf716ecef1d04262c4025638ba225e181e2566c6466054e56f20838517902ad90acd9333aba3c2296a6ddddda6ffda50221645
+Entropy.3 = 7cf7a280292a7c3d15231003fb97cfdb93e722644436ba72a7975002e52581c6
+Nonce.3 = edbb6d2cde1321234e2131856f9accb7
+AdditionalInputA.3 = eb88a12d7562281162fd29222e7d01202503d97fea2a7e3aae0d6ba88e5c90f0
+AdditionalInputB.3 = 8455c1a90b23ac3129e0e79246fee41b4cca6b885860f62aaa039dce21a3c21c
+Output.3 = 145dacb9ff3e45a6e5a409d501c1316bac87d9ed5c4198db804b59bd752bf0100221963d497b83d047ff67b25f93c86c4fe9a9c3b2bec814a87a9dd56b87dc95f392c3282e98c53ed880f2fcf44aa48b5221f75f71e130f379f7911fff5c3ae54ff88f28ac1e82a7d6a6f674a92436503d1a99b179a53fed9591857d5515499c1f7f05a8daa6117cac680279104a081eff4de28fa6bb17fab7c1f0041c6fc10a38eaa4102318cbc859ab13993bfedd423d4d9f24dcc7c1366bab14daf5957632
+Entropy.4 = 9155d2e19cbeec98860722bef799c2f3332f1408e6afb32baccf1392507d6bf5
+Nonce.4 = b6b4ae01a586efde1d00255454a4170a
+AdditionalInputA.4 = 3af3a72a85bc795ed5f9ddda56229ddc462b32f92ba5b791f1be647009311f0e
+AdditionalInputB.4 = 5491ae4f73534fcb6fc328ed1cb0b4f4e57ca3cc792203eb47c708580ea630ae
+Output.4 = 6de2d0e3c5fbb6644ee11039bed584e909d974b8f569f60e12ecce8563e1dd280532bbc07a6fabb76bccca5a9d06cb01e817421492200f830efd1e995e8750c15aa2da8cf0d6f38c5cbe92f2ac221b1036b8376f92c129bf1b5fd0a2951041e0f6125c31a00bbd537be944d41cc46ca352d612e5c748671d61e5fb122444dacf57a80a3f22cb3e05bc36e444edbdce1c9ea1a1eacfe69ac7256d3d7bf7ec4037eed2fe7e8de50cca38f470657876dd98da5a7aa666dc5dbe64534f6cc6aca40f
+Entropy.5 = f8851337b20f05c86ae5cf6e7c417d4771c8e3e5d2339a5d2ff9c21386e0ec7b
+Nonce.5 = f361a2aeea782462b403004d8f85e7bb
+AdditionalInputA.5 = 6b3f59d3a5b8074d041a6c00f8d9cc01abf42de97bd04cf1b23a306dbff77373
+AdditionalInputB.5 = e475d94bd54d2d0f50aef24e77bdabcb84335eaadf20686b867dd66a1dc777fa
+Output.5 = d5dc0999ee0a31b756b2c84ffd4828feee1c0b97190fdd0c51e98ae23930d4b9a2dbfd720e4d9b786fa32991ec0bd2595153b9297438e5f32b18000bede539f504cee1d0b5848006f6d79668e48ddfc494715d66fa339a6d0ac3976c1e331acd70e498e1e8f122a4b121366d90896ce2fdad09296a0e44ebf074e4fcb555e252f11abe1a3b4809bb092ba35220274e71c046852c97f27dc030764963536e9c434640db8cc287ffe639830d891b57b8904a845c29967bb2332584d49fc14dc1bf
+Entropy.6 = 38084c1e381ac23b82ebc85a7f86ba3093ba8d535e137a139a9fa12d7ef908d3
+Nonce.6 = 1c58efd1a23f32caf94d9c400919a0db
+AdditionalInputA.6 = 194888df78f5ad2a96fa0f01aed22c6652e66f450fc586889e5fbdc22596584b
+AdditionalInputB.6 = 733888da96ada32c0c2ce72275efd118621224fba68557afa07a91fd6858f421
+Output.6 = cfd92af709819d97fd24f7dd0a1268e0946a3155911b2be0b4cfec2fa81aab610dfb2cae05b1dd4e8daa01e42b911e52093bc0dd3333d71fdc108c2616281df9c90669c68e72bbea98ce1ae8ce8ac0ef47a721085e66ba470cf2bf66dfd78acd1c6d8691bc43b0b950e8a717546482ae654e4f762a1ed7dc0a7c13a906964ed55262933dba034575465b14633b32a8391c78b626f64a13e0bc4bd68f36c63712dbda3e95c2567c093a694756f11e817948d4c225dd3b754b0b02a70a16cd527d
+Entropy.7 = a9e25cc2e9b737b19a009c35bc6dfef47fe2b27490c3076daeb3da0a8a1650fc
+Nonce.7 = 3421e2b231823a613dad2f851734daa5
+AdditionalInputA.7 = c788311524aff96920b30692939980d366c70955587c853793ae73c16e9d596b
+AdditionalInputB.7 = 10f12eece4f19fcb9c78bdee94732902a42a5854dcfe407d19d0fdc7a03c4f3e
+Output.7 = 83a4bf357b8268379e3ed4767b1acc503178ae9c47b5d3a8566a5932763d318138b186fdd760332516ec3ae3a560373479e75285662609757d04f2ac51fabe61b1d0a635e1d198d0883934480b9ace1cc0c096734f4a906ebdbadfbd039c191f45c3c6bcd642970c4346a9a6b8017081d6f58ac07ab68c2a1c085c902388bd0c425adcca80e73822d3305836c224168426c397aedd43ef9aac8c860dc3ce8e24d067774bebff3194f2c0164db2a074a6262ff379003b53bb0530cb4707eb0b6c
+Entropy.8 = 29240d738e28bfca0b228abf30f966ed25c49ef40767424393b449e7a6103798
+Nonce.8 = 29c23e30beda91e31499d2a303effc4d
+AdditionalInputA.8 = 11b3964aebac9f8e83d8d382987def28c62ef2baca63a546371cf10c44abcb54
+AdditionalInputB.8 = 06940635371bfae8f7a66dc47b56801d929feeb29a09e130085a1e6a98ac78c5
+Output.8 = dd60a097c02b8d810af0616971749539ddad3cc95defb3a1901b9e53dcc32eaf5e7ba348a5eec01d5821cb1fa674959ef6999aa02a8bd096c659d3a5ed4b66c84aebdd51e154c95a830e41cefcb1e7f088370b87bd28fac2aaf67bb94cc612c610bfaeebc050bb972dab69b1997d045d1b4c6c80beb70f61874dd4b06645c928c624af578fba39dc255fd789041fd8b68be1580a86598f696a24d445bf0e67b557f220d72e33e61c6b39fb2e5bbb3f803ddb2857c3add88a1c26cbb0ac5085fb
+Entropy.9 = 899829f7c7c8b2fd0de58862019278b0d8ff9c9cffc905604b5fa2f5cd48d995
+Nonce.9 = 16a57264e2eb3db6af150382dbe4b5cc
+AdditionalInputA.9 = a148ac240727d0a4ef4d7c091f1c47a8d307c880c97ee792e47b8380975d518c
+AdditionalInputB.9 = d0d9ae85ac486f93410bb128e2dab6e54e6fc71ca5b6bf4c58eaa21c7da6d387
+Output.9 = 2daf5b28c358333bd65aeaeab18d2e4329edfc1541173eea15e1c9057bd3e11c9035aef374ba9e8568bba5645b018b384bb189e1dfe774a9051bcb655a65ab2abde6ed3e51dc92353b7a113c74ebbba352debdd74af163337419e6bb5fdb167f1f1e278198c0856348cf1e46a68e29228b3cf4f977557e1dd502f3a155841b24841e642af62c985cb23c5e14622d843e7491f3db9c1019c511de0c089667dbf64c92107f99c107ee30ebde531732e02f19958a06c81e61777e785a9905bddcdf
+Entropy.10 = 0a4e66d19092c36fd8fe2722e769ec81b5fc21564488959620c5c841d37d08f9
+Nonce.10 = 362ab0fac130deb87047d69e81c20e33
+AdditionalInputA.10 = b8c044329a928212631d19fb7e6c0eb34f32c42f8d6aaecfd84072d3aaed4938
+AdditionalInputB.10 = cbd5e50781aad8b7ca73edbbaf5c803e338144a9f0fcb7ad457d87def2c5962c
+Output.10 = 41f849c0e0c2926f591ad257c4802e7552e078f0f6bcfc108d8e4e5f78ad6630a6bd02a3e2373d4c80e1fae46c6fc6306db3029d8cb199f110e20ac5ed0a82c275ed943d4fffd43ebc1fcdde7bc08e7190911eaa98cc493c290546755af7846575c3ca96175ab4cc1ffbc741b11d246fe056e5849ec5ea264c81061c2b54281f5e3d45aba4ae1bdb9645554bab59543d7bc0bd6e9ba3cfd01ee97f67e65f3a6dcecc02e507e420aab8a05151bf1d7351cace4758dccbdd4c34234b28d18a3654
+Entropy.11 = 294e4f34a6e82f7d82870148945a52da13daae4a1961ab558e64d64bdb164a93
+Nonce.11 = 7b33da99b4650057465e01498dd71879
+AdditionalInputA.11 = 30927229807d278b9753514a9b762b62a5468eeb8874af4ae8e3d00b8eeb77fa
+AdditionalInputB.11 = eaa065cbee6f7ed92f391f3fe6badfd84e62765df9ba11fa5a12b8bbe11b87d5
+Output.11 = fe50f4780b107b519887148a3a95754456c6ddc63f603eeb4405a676e67bfccc83c8f1ca5babc79aade63825b64c0cd695bf01cf0889729551be22103d79a8009140a2d3fa97e4a607d11681a7088d13b8dc44f926dc952325bae51c830352177759055d7bb1ce02cdac368c7c8f9b3f03d3e916f52b3e73c9e3a7b4160f0d18d4ef6073ced56f057eb9177b87b7e1931ae562ab07adc6ac5442ff519f8a18ce0486572f62870a250f1871d67e4bee9ba84815c6f8987f729315d55b3ad9f710
+Entropy.12 = 678348fca7958da9c6c9824f8e41f99cf9e5679aedf23e36efee944659931f0b
+Nonce.12 = 091632d69910829b3752f2ffcf7d7d90
+AdditionalInputA.12 = 5c90b6ae2ca748e1457a47881c51686e526faae7efaf615fe7b1e0faed5abe93
+AdditionalInputB.12 = 3ea63094d37b5ac8b70780f6cb068a06754c34232cc4a510a67496d6df5c8125
+Output.12 = def000cebc30b3ca76ac26f65d8e91e6fa8f16983221ee5c8691961dc3a26d3b78ad2ad2f1e861c642d85a5bc4c6e4963bedd68011144c184ec6c4e0484e404ff8743b32e6124ee35c894f118eec2afd215d4fc04d834b08566ab4e50b8d710822895752645c07b5d0d3a25b69df294130b9ed16dfa8a4717a59cb9d1ebb16610b0f68c6e2b4c9f3cd11c77da6c1ca3dfeb1a9c50333ad53c25aa3f8dcbe9061f14a1b7beb7520c58ecdbb0ea2050951b00befe5d78a35b269969ae03e0b91ca
+Entropy.13 = 4c562b473c4a1dce0d7a3f1fc037660225404bbd59b346ced01cd9c1a392aef3
+Nonce.13 = ab44014749ec64303cfadb70e07c2c2d
+AdditionalInputA.13 = 8f4f213671befdbaaf10f4a5177ac25f5505c82a194cf5255b0cfdd7d0f9f096
+AdditionalInputB.13 = 490246159761af5ad163c02d8beaec64130bcb6fb44d85b56e999844b148a81a
+Output.13 = 17face71c9cae2b898ed56a44b3634559d3ab58ed3806e1c0a88906ca1ee18a8825faa34c5be021177f2c642561a7e99132dd92c3ec3b47ef6d3f67225b644f431cd0bc6df12332ee910755aab48dce9da3775b21e7ae88135a2b074133b433a3b8bfbf21444e5d8dcb8615fbe3729bc5483d84ecb4c87fc73e187b361a81cd051ca65053da4dab05dae7f1a1963cc70e78ac6345fee5262cd34da4e1c42e2344602288bcefd8ae7cb3e87b0ec446e64e5033883f97b6ddcd279a772d660330c
+Entropy.14 = 4ddffdcb19672ad540a056a61d38d5a5f9d3649ad96bc8db0c81993a8615e0f8
+Nonce.14 = c4885909d8dfcb6d7e567623afcf47f6
+AdditionalInputA.14 = c6a3bc83220c7708eb7fff5787ecba27e48c894e15302e0ee7f4e5f09b3d6b76
+AdditionalInputB.14 = 39b854a1c487e24e1ed58916d8012277fafd6e7b6175c4be43927cfac9958404
+Output.14 = f7d2f39a513f6c4eab993fa440b769ce09a15476e06ceda47969be05f53ec7f8409de284749cdcfac07fe7df66b1b6bd39389401909f3a84538d041e1c038a289869e51bce8bac13a0f786cb091628f0a3a7f7f9a2f620c98889688d46a2a037fbc1b2a4fff40800eaccf98a0bc1452ff1f53f040daa94e17dcd6acef97192c74075d064be5a97205ad97f693257d96c04e78654a694e90b80a5234a25d1c7ceef360d53e768067335097c4aa8f126a31882eff8e55cee05eba4b4325c203f4b
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 705386dd8a706d0774b65941ce63c71f6424c4c91b0fca6213f2e6f23315f761
+Nonce.0 = 737cd32701fef49041fb80cd03077513
+PersonalisationString.0 = de8e15f6d310fea562341ec51e474455047cad287259928fc3c94cb3b153b241
+Output.0 = 88d333e5b81fa6738de0b1bc50b2309368c70ddcfcb5d2b268540ed506cd2d897dbad3069ca0577fe639f965963a07886c27539d48c7f6ef79aadff5c5a9865aaf3e781c0ec48556625a2b9d0a11a71a65b96a4b49d30a8178eb0e345b9c92084137d7bb95c2440640e8af22dd8061eb474f956446ada61cd8f0fd538cb8287ce33bf508b3b40b1346a42bec6e16a05b09f3c8a7e7e4c488a29f43c8ac77cde3fc0f3a17bfbe11c3848ead351d28487dc9469c537d210f0f01ffcb0fdadadd98
+Entropy.1 = fd72e20fe3bc974a33ddb71df40a6d8933dc7ba71b8069e0184ec25f17208a77
+Nonce.1 = e231684bf93354be1b95c7e485c8cb0e
+PersonalisationString.1 = 3076b2c4ef5e2942738a86eb1ea2c16c29d50d8ab2651bfa193a96c1b29be27b
+Output.1 = d4d5597cde675f700ffc4f45386f5dde0040788e9b4af8f6a8fdfbab3d9ac755fe99e3906e37fe67bbb323f32a264bd5a137217d6cf986a60070fa4389dbd476719a88cfad84920702fa8c6e8cd820a59be4f1c7a04bc2e89c7deb9ac4b8a8471a560fedefe360ae8594bdea4a8508f1052f165f5e774d362a6a57c5d89bd7ffcedebb9db1e76fe50e3db62c7958749d8498573bc4c0b7e04e7111534b333555b6a836a745b2ef793bcda23966e66bc177af74e04d07df6e4c05364fc6c5cfb0
+Entropy.2 = 36bc1f2d997c7e90489baaaea0e3a26f1c25e630ab76fe469d3a2be6f6f6f4a2
+Nonce.2 = f81e1e8299c4ce15b86fdf17bf480b51
+PersonalisationString.2 = 8ddc2e0d4dc14de4f335f7ce32d2ca9aed9c9c2cb8b7246b8be42df2b61f4fc9
+Output.2 = e06007b997f2ea6a48b4f01cacb89b35b3f67e13e99a3369070a720afff12b2da06b0d724d67ac18b1589dabd3267aa868d0f3f2836a115cc1e4af6b3a45bc8326f116a310cb92efca5785c387e6fceaa00188387e93c05dd45b71da23839ecee8d40b63191debc65b6e2632480d1747f581dd9d15b90df0272182a778f47b761147a749e9ef0ac0e59d4b40f7f360857e09de551d186f64d92d7e1f11a3da321b87ecd1c36a411f5a12e8e8b31406b7183265c9ef471a966810d10ed3652ee1
+Entropy.3 = a8b61446a8440fefb294e6beefc40d7c49640fb7b2d1f326f48f8dbc3647fd87
+Nonce.3 = 0505e5311530d5078407355eb1b7e6c4
+PersonalisationString.3 = 02e7e187f276a181c3b4f1fc39bfb09f16ae58f81c24c976645847c2e16b0260
+Output.3 = 22253f2904cea40099a0b24d92995094436563f933fa005019d7bfadd7ab6783c4e7e0881a5acf46e6db6da5272f768f23fbba6cfd3fae6c76a6896c1e0a80bbdc0ecc7cb88cdb554236c9157dc157fc10f199c22fc18cacf675008b371b381e484d2d854151b9bea555bd533945e6427ed4cc9cc74cfa0aa92ebc412e56cfd951181e376f0f900d0326e10876dcf2a880ea2830c0632631da09ce2caaaabf96d56f9d8eb25404c77e46d9c20e788cd1abc84c73e380a7e8dbeb5e4ce1f1f97f
+Entropy.4 = debb0f618a1a660f9a720440b775542862c150512d6e2d713fe61d0a090355b2
+Nonce.4 = c8cb776647df80f1b2dfe3e96d07ecf2
+PersonalisationString.4 = 588b837cfdf6e18b4d700d8a7903177231a36a41338048de302c9c3cdbcd0f32
+Output.4 = 4991f9fe4b6a0b791e9aafdc117add0e350fb2e25791a4eb3a3f9b5d05f619af797ac6d65c1bf1a5db175115c9dda209c0c0295eb5e4217ed8522a623a8166ea23b6799955360de7866cf41e9329d98fc7f29e04d6d5120ba541e5c01e6b250b7094ac035535be80b2597397b0644d6a3147060944459b2678e89cee3d38ae5c9a8c608ad3f20f2bc45ca2934e5175791eba4d650449392cfcabe4591f21cd44c96abdc2d71bdca80ec1fd92c47a02ebc996090ff58351e6ef7a050be12e56b2
+Entropy.5 = 4bf21213d980252f5dc3518b867b15b2899755e91fa461eac27c71477849dd8b
+Nonce.5 = 25647b2d71a8f3a6310a0e04a3e4f08c
+PersonalisationString.5 = f64157717d1ff1bcd6737216e1643adeece3025cff83297cf8113d6505de2df9
+Output.5 = 91d8d74d1c708edbaed3b47d47255969b52c34d3296c16ab803263c25e82996ffee23972e763b8305f01426217ed4b3fd2dce2250da3519550dd5e278cdf501c22dc97b582abfb237672ba695cf561f190a66744299dfafa764d7ccda05a36b250c68a21a491ba132b91f56eca7411dcaf023514c65ec6e8d13bf1f3b86c827d61aa223de5d92c20afc531de3a1d7e2769d494a33e7ca3badcaa7bc9547b48dba1706c68920c0472f5128ee3cc205ff63e6e7fd2ee60c12f2c7336361e81bfa4
+Entropy.6 = 91e9323c47847ca546d94fb870e112dd03f756ffd1037ee766bed618c49f6056
+Nonce.6 = ff42d9add486f711de89352075bfaf5b
+PersonalisationString.6 = f9ae90cea69c9987483268ced4240b5740319470f37a4db14ae090e4d5f35a5a
+Output.6 = 3b90cd426385b80c697bcef30f2fda44194aac38c726a1a6079b430d1b6c8fc2639836bb11abc40d7eb3037f26dc794b075437e080fa21da6e2b0b7c2c15c4f4f6ec9e27578d65b66edbe3f24d9ab5c4864b3f5dc2949e85484a958e68af6d5cc45a21662d4fe4dc8131501cf6faf4e3016b5a4fabd02fec24ef03b1dd1ccb5efde85430aeb4298d947150c6eea220b09e2177d9df19c6ff8b54c0168215fa6a3aa08886ea9036ea14d92ac817f903ef4f1c2eb8d79e9e920ea42273e53f5d0b
+Entropy.7 = 910b3ad9e38f603112e94fd39aa04a171c66bbb51804870568c11367dc8d4145
+Nonce.7 = 9ad5b632d6b69716bf89875b041db5d8
+PersonalisationString.7 = 98177a8f3e6a507a3b5b1b7f7870eb9c104c9aa4734398df3fd53af397078ce3
+Output.7 = 38d5d1cfad5004302a35ab1db30a3d1e5b372416a538fd2ac89aebd886fd1e4fea179c8fa2c020475b6ca3689c0bd9165553e559d4e69e9994a2805fe72740cc5c0361757565e8e6ce822ea6705e8babc9c7a435852f3dca8ba69fb0aafff13f9a5af520bb07cdcb294a731e089fa0ff34a90af31bc369fc6206608aca2d00c8f9f13ea6798e481e0aafee906539a715546a54a8a9bdff14a3f318c542f7442554be15dbfa56053ddec14320de8a2f0bbadce69324428e4f6dc4071329bb4d03
+Entropy.8 = eb5cdd42ed4773b75c2f4150ae05a22f912761ba6432eefae73bc51befcca0c5
+Nonce.8 = 000c53ac6e933508af6ff52eea37b551
+PersonalisationString.8 = 8e43ecffbab808b752d3c45c0581f7bf765ae2bb385ababb200ec157d1cacf8e
+Output.8 = d7e00ef43fa63f7663704f50ed7720dd84948937782876a88bf1fb393670d6e65ec27a0bc6a9301c17231d673cdc4d7083cb634703732012a4812ccca0e1f76886801d2113b3210c6e3bf15a7ee3c429d4cefa4c0fc87cf453fc7422939c29764f8d0b685a52dbd231410b890f5187d5e77fd645d7757f10e79ebef6ab52d1f4aa385d60440b4b9c4fc9c4db8880e5f57a743644c1e47a15d9b5a219bbe98495c900e248933c556a37c381274452a1a20282e17ddeaebc1ccf4d186ff3042946
+Entropy.9 = 59a0a9b8209a18b98133e9a7c4969122296e3ff2828f7b3524df4f1c132e0331
+Nonce.9 = 05b93b55f2a2b597be5bf578e1aaa517
+PersonalisationString.9 = 6b056e5c0d3820976ce478aa422fe508998b73b07d8a0e39b8d977f9c4883843
+Output.9 = 560f7c7cd24f94fb71cf128fe6b80592c1a9a68892bc06dcd872818a267c9a71acb613c6c8ffc916e7b3b17ffbbbead1954686e410d22c9959deff6d57935d8fe378de7a7ed5306118a5204eec12b3cd42ddcef213b676161e77e1c6b815c7241655ffdd63d6df99df3b446ade23293f6d71d33832127525ee133c8b4d9739d1f09ca51a860326d7819ce458e453b6156e8f78e4fd0674fd0c1c13509732e7fe00600ea2bbba6a1c8176430a2d5ceb75dbf42fba35ff21aa94f3b28e6fb226bd
+Entropy.10 = 4a347a7f16af01da9dead84ed59f4cf5ee88a80b0a1f1adc2a3950af9d225054
+Nonce.10 = 4ac8f9b859a19190043e552d8462ff30
+PersonalisationString.10 = e3dea246be6832fc4bfa5d33f51f25fdf4bd3413c69f3203747db51ea51ef9b2
+Output.10 = dbe0b8417996f8096bb3fc4634f673eb748e0fa66d50fb4f2af703080c8d214b35d302852ebc37b1b94615dfa22ff2daa50a7ac4b3026ac9a12dc77585142ae66520ba66642dc95a6adc5a1443c3a5e043009dbb3470d1b32abc77c035e1069c4807553f10ff6b148505ea4aeafd2e37adb2068d69bc5229425f8114a693413d8b5f545424fa04cdae9bb02adffa1af6999b7b67fec536c70c1880426a387efb67193c3173315fa9156898d9e24ab71a0000ab1b1ab3475ac2607aafec922f55
+Entropy.11 = 451b3d6e11a8f91912517e8a665a7c9fcfa9ad540ca57778280c50ace87c7dad
+Nonce.11 = 148cfd56c82348bee96a572d3ebff728
+PersonalisationString.11 = 862533cb4031e95b7ef8a05763f2566bbd51bd2019e2cca9c2016672fc6bf2b7
+Output.11 = 63103b4698327d4dc418388e5f2216899b2e46fac2adb002beeb940d0ec25b1362d6b4013a0507c2d8c9d68b8af61e3d53674722a4ad111950c6ec59d03a9bbd025b61d8c0a39c2a01a7d19cf26c1cd4c724831dc8f61ec77fba616e6f2fd336a39fc823788b96a89e219e4186367e91720db0cc165207b92db064c71c8c14dbe8d1135cea6c60f8fbde17b44c8416875551fa616a3290a8d0ed4590f0993534d223e882d74815e0facb0859af394d566d944bf220655b978fd155c6a6b3b3d4
+Entropy.12 = 77149d1581e379f92cb5aa34096a4f15ac25967e35419d4a5e91fd416930e791
+Nonce.12 = 7912098288b0bda5d195d0c389097d61
+PersonalisationString.12 = 861b9a1a2907805253ec3b2d3e87bf3fafa6deff2ba86be3877d3225e63a73d4
+Output.12 = edb878d87d903b9ded63158a3ae7e271d3f6cb454de15abad12ba082768123770e510709de531dd473f2b9bc4165a6946b91e5cddd15e7cb4c4e8d635b3e75494e4046913d8f08ce36b9468b003226190811470827ef5efbc4a90b4817a6f4767846a8516066feaf63c95bb9db8a67a744b7046a1e73e32ba62526375b5997d305082675ea0164a25df2808b70b98bd1a5393cdee448a400e3e6a066fd566035fa2926cbd2f044714e87bec4ce7273faa31d68a30f09eaddbfae14e45e1f2264
+Entropy.13 = 86aabec349d1c0f2ab21048228c940f5a06db0e5b7a6c8e2ebb3f2c607afc2de
+Nonce.13 = 1f952b9665ed8568e555aeca2e5dd84e
+PersonalisationString.13 = d80a0fd76fc5de2e674c4cb012ff479efb79b419167fb741585c2e38d4972780
+Output.13 = 8cafdd5141f593062496f7c9f401c84cbda10e5498cbaacfeb3a25acce4427f8fb0335b9439ab9e954b6773594b9976a70b1d2234b7a67093a3d75d0adef3b7cf192c775b850b978fa52cac4d2d9412b22cfb8dd25b03ffd7fffedd503c320847f934db95d680daf77ce351d473304c2b29d6083ae854fe6d9db87d412d780d007c3e72ed84fe2f43f00543d76a679bacbffdf21e3f1cd779a603d6940c892cbb27c1afcdead292b1b0f0943fc72e60f60aa4ebb007d3b62d81611e5f9179d53
+Entropy.14 = c0b522f46a82a6968e16c28d2dfd4c425411914fa4ddb7402612489624860f16
+Nonce.14 = a684932ea2337296cc3d150174a47ce0
+PersonalisationString.14 = b2c0af9038c2ef79ca8263a047bb9293a44ecdb457fb45945996157dcd199cec
+Output.14 = 316fbc32ecc1dfa778b13921b1d624f9231c0ecca03e17fde750b1e31e76b1c330ea5bd62ca76150f231ac4aa96b06f845db2d03b65cdaba4c160b288a121eb144058f65a751e22151f91b90131e6756356e7f90d880ce754cf965f439189eb8bedf86c58e1fc2751e65637930c42552fdf81acfa1d4515ad49dc532b2a10b2b11209425ed1cf43c991b4a7c49bf6e701990fddc420608d74c3636829e4683c4e77a8151708d82ef8fb81b3655670fd4d242e357831bc091f30e6d139d5e5ba5
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 8d94e04ee26aa9ec7381eceff9dadf9163645c4f7c8692df7a3263f23754d315
+Nonce.0 = 90cbf3689ccbc2340920946316995252
+PersonalisationString.0 = 8227179c9134175c478821175bd8a5651a82c38c31cef5d2e49396194cf569c5
+AdditionalInputA.0 = 3da647dd626a59ff5c6039e044438f0539755948975f2ba97278a439f4d0d69d
+AdditionalInputB.0 = db975d66964fc83fa4b9a5b2531c2320d6215c4eabe8543dbd7ce91753e3f25e
+Output.0 = 03e97b7f175b8dd135c46dda67ded1b2548670523885d541bd79aaa44aea3fc95a197b9753b529320557dc2c9ca9073c952691ed423d12e9aac6f74e5055331cf9ce27a067da06eddeef444f9abffe49b0b3ce97e616409a18e8aee5255cb68addfdcd558676b476febd4a9ccefbaa8f55f69271aab0feb2fffeb5a4b563eec046524a07aa239c83da5615bd16494920268ac8a7ebb4bf8760eb872c3190ca692a8518cf6a8777d37a3ce3bf5a15128b7200820222eee0d31ab7f062c461c48c
+Entropy.1 = eba56435837cffd42ea2207c506df663675242879bec4ef87f8930f422475349
+Nonce.1 = 3777c3b8f9c6e090f8bfa8293655c80c
+PersonalisationString.1 = 8c2166f2d67e5b10211ec2717519174cdc5964281570325d0dedb450e5b68c8b
+AdditionalInputA.1 = 8ab7647bd61d94c2505c542574cfa587f92a532b0687a9389f37d426a344b1b0
+AdditionalInputB.1 = 4edd5708217b45669d85e5ca9dd1710c79108c2d42035ed7e5c65c084d6b1ff4
+Output.1 = f8d2c53d8f59a53c2e35c57f09a299fb698f43096e3eb5f7a9fc24aa9ccb2c0fd577cf6a55cd9fa5d76a9868b716457ebea58091c09bb4b111723771b8d9d8c8750a13b0af4ee5185a69fb12c0c79bdcbfd10ee23454fc5fe9bc667cbdd24d7e02a9641c5058de33cfc6782010d39733a796a166da98dd7c6ad9e353d72d2937b65bc9ddada85a16218b5fed05dd00b7df8e78c8b2bd5021c5f7ea9cd3d4caf1920616145374220283ce279dbe4474b1c5476d943975f4e673430fc0996d0a92
+Entropy.2 = f2f1f7659497a8305f35a8493a5d776067d3a9735d2acbcb7ac565807073c6df
+Nonce.2 = 70d09abdaa9442f9f503b77d14d25fbb
+PersonalisationString.2 = 0c2575f457bf117fb620a9ab2ac19d23e1f65f16c4948aee441ce970f8643086
+AdditionalInputA.2 = a086eea1b4e71120d1137816dbdac96faf0e013b23b0b467a8fb16ae4887f8af
+AdditionalInputB.2 = b18e4342246fbfbc2ff5fa0e949f0c497feb60627c53873a3a6ede850de15f53
+Output.2 = 840d3b8e9d7ba5eed72a0ee853d281307f813077ef32e8a3979ecbc249ea21381bdd203cfbd91a932570274fa46698534958bd4e0a83818b08d43dac55ab85fcb1e27c571fb8ab8638bd66af9d3c1aea9b1755362da194c2b3c9076746e54d16b07f29afe76358fd8bf9dc8498b3e2558d2a4cbe06c20473c82773a586c3adf2fe747ef2aa1febc6254a2b5e5bbe422c93d93c14684f8e119dd1c0215b49b5ede11115742fc5785f455227f4b68869862ce1787af3771a3fff7a406fac55f3a7
+Entropy.3 = a292ceef569f185d60624e0602a0f78733a24f4e84bd52f83e38769ce3727336
+Nonce.3 = 01b0a5c0b7cd47554933603d8219ecef
+PersonalisationString.3 = dbbb16c8fa840502888e141ad82f13a22d95780aa32915f2045554b29f3e1f1e
+AdditionalInputA.3 = 67cea8f68935466233a17e27994ba5dbec679e69d9f5de89b62ab5b56c3e2d1a
+AdditionalInputB.3 = 981094dfeadf088f477a2955c0b597a7cc55d17b7e133dbcd06192a7e70db4e3
+Output.3 = 8bd1d3d2d24fc79506d92a3f55a972346422ab86dccbc9c5c6e66cc925ee12721bf71a47809f41755b4cacf005b37bdd2821be33d44771119652fb43817c1d90f6b01e3ecb2e0b5920a0ee30676e0ac074975b73f01bfe2d7cf07a278b75978f1b05033f9ca9fd5bf99b73831f7b6a9087145caddf35e54e23704013a8de64d36cc572be3de435a3377aeb077295b5e1059823953784aad9f0c2e33abaf9250cfc798e38be4dbf7237fc232e27569a97a6223b2c8f0b67d2e770781aed87e5db
+Entropy.4 = eff6e452706343f00434e8e72dcc922f2e56d1bb97515e220d2a698e4aefa42d
+Nonce.4 = 95529017b166e0766c2587908e30a8b0
+PersonalisationString.4 = 5ef174a49fedeb83841be9a638ad4231ab840d217b052ed7b655ee9cdf42efb7
+AdditionalInputA.4 = be111b2165eb0acd6487d9b9004fbcadd09741acaefa5540461b842cacdae425
+AdditionalInputB.4 = a33d190998c427aa599a5ddb3bcd26e5397ad1f0a59f38278013e37e67449767
+Output.4 = 6174cd69e59ef2f720728fc83c085ffc9623775664f53de26bc6ca12fdb391aa3ebf7a638413402f0ffce994b2cf3d23fea0db31f1be94c0a7f277b3a3f4a35fbbbaf8a1aaa30a044a2f66dc748e7fc44f374ea4802288f2ede3a9931770050ea9920ff8b9811bc5b75a77bbad2ecb9915bf2b20647e8d11e237c538727c96318683544383884d1fe0df7c93656b4a27f51d2cdb3acef1d1a590cb013a8521d0173633194eeb1629da4de90eeeac12417b7b25e204ec5b53984dc233485010c5
+Entropy.5 = d40168bceadfeee0513543da1c9ae57ff427e21bc2a8c5def2c0bd0a94d11dd1
+Nonce.5 = 2902d6db86bea33255d165ffede91564
+PersonalisationString.5 = 5d4077ea9f43ecfd30f03d548d8563dd5e13cce00ec525c008ae000848f84314
+AdditionalInputA.5 = 91caa77ddba8304dc282324a706000ca31dea9f52ddf51cc943f222466859856
+AdditionalInputB.5 = 9f9fdcd790dba268c4b92054029c4c9a9a040fe0e3e674226687dfe2f6af348a
+Output.5 = eb8169d05935de5e5f382b31fc710a619dd0a7d572e170c6ffbdc15eed5be2609630f8b9f852f12dfbf46e0dee9badf48cfa8adc545e13d897d593d26a7033ac71ba5cce2c575d541b27aa692c6d2a2d51f5beb95ca75804571a8a4d0c1b25b1ac752b6a817bdf987342f21afad47145b9cc66a13f8bc523e8b5f5d0653c6502f004a6d7ecf5cbc96458054041eb846b9c089939aec1bda4913bce79fa7ced1f36ca7e84bff89490136b19d32d2b7932449c792fbbf6057ab2dbea5a57672377
+Entropy.6 = cfcae9e5c273119db4c4060400ee98d99b9c8fecb486c1e4be259eaf04826c13
+Nonce.6 = cc1f73e20584132668df526b5649c844
+PersonalisationString.6 = 48b13013cee0c51a08792d4d057e093905eb93e8880cef5bc7f6b94d88f04cbc
+AdditionalInputA.6 = ae81edf9c7c8ba49f70a4e2faf3bd7e06b443202f185d07cae00b0d2b5840e71
+AdditionalInputB.6 = d6fdec894b6478edfd196e085af5cbd89bca403b6eda394b1c98f77371449211
+Output.6 = 734ab88603d7c3daf500b25cfce81ad6d34e12204758c4bcf34a9edaf459290701110b7c2d5ffc8358f54632ec15b65031b599d643c876c5acceb8156bc79e16393e61fc0166f4fe8d97f2bb64fbcc927af6f75ea69ff3cc6ece185e87c28a6ab3ecd1cfc9a03b69c6ee76d8b7631f1ccb51691ff3fd3d4cf359a74b217f23bdd11549cf42a8637333ac92d2d4ba95fd5bbd0f4181e5af92f533987cc50867675a1ea2dd250aa3f30c100df6ac6e3fa991595863bbbd7fb1df32efc7ff6202d0
+Entropy.7 = 596fe2dbb26711a790e8feed790597f67a27877538aeb5f8d70a938608dae6d1
+Nonce.7 = d211741ca6dfd385e29f04cc4f9b18f8
+PersonalisationString.7 = 36eef365489d9440b98c6519a95160894e582d2537fe5f34b2367c873af225d9
+AdditionalInputA.7 = f745c63afe49b4452cf4e9d68dd5efc4e46e0a0ec61f6e18438316819add6d1a
+AdditionalInputB.7 = 6159be82b4f11bdf504a6992d0a57ab1d8fedafa1cc5d43a4bae2a1d85c08fb4
+Output.7 = 6dac3928f926236148a6276b7f0ae75f498866ac9cf5995bffe6fbfd8fd7138b16d9f782e84115833801d0995e15f98a1133e70631e1dbfd513ab7f8ae28df5b27512bcee1984e8ac0943bd04cabb5a6d5bbee16dd17887f36d5204172316b35b82262104eff5117d36c04f5bae34e622932eec1b1f1fd09d40cefbd34a2ebf74a6d2b59b9c2f17ff2df640dfda5d9c4a7d4b0bb35d4da05e3d48df0af68c57ec89fd91e8e7149a26a795bd93f6265844b1f3d57c76be6f369d91f15a58ee14e
+Entropy.8 = f3eaa2913258e0130f608f374be741acd8e546f2190d99caa15b7061b1e04c4d
+Nonce.8 = 081e8f87e462f2ad4073dc1cc3beb993
+PersonalisationString.8 = dbc1512f971801a814d59b40cb8c3bba8699719412a317181fb8abe5a32357b3
+AdditionalInputA.8 = ee55a9905a0e77cc25a670484b72018843eb0dad7cf77b05f941af663ba8c15b
+AdditionalInputB.8 = d935e8d13f0c32b6fdae7850d4f050aa2772e5502c7631c11f7bad0e5d1d181e
+Output.8 = 6feb6ca54d169de79de3a3a077b1a0b665cf9d4197b737e025891a0f743532ac88728b4c2c9f54e6e8fbbac29fdf7d448166a382cfb3097183e1b7c2508793713ba0430f660b58564a0c6ae1c408861a5dcba1422baed032b792f3f36ca3ef9ded9bf8f9e019dfceb5a2d2e875c26c7f2cae8da63ec009eaecc55204c58b6bbd0374e9ba7d10522edc52f6ba2dfee359bc947ebd7fefb28109a7481a327ce0d01d838fdb5818b9a47902c6687f393494a11f3b2cc8232de5c9ba69074facacc7
+Entropy.9 = b9b962a5ddd44b4941041b1ea74485e249897dd88c0355d8303a57ebcf577209
+Nonce.9 = d83a4e5373bee5a9cbdc560f5171d1f4
+PersonalisationString.9 = 682dacff9c2eb2f300173c4f13118be59affcede0099780e843e894e4ab5cf16
+AdditionalInputA.9 = 93b3e104230bb246b527b671edf8d8d9553e78729533823839d59ec84470ce56
+AdditionalInputB.9 = 010b9610d7d10a4503b309287fad7b06cc16f9a03505c3454debeec9f7f06559
+Output.9 = 2ebf81a2608c2e9a0abb9de9acd1d4c02d3a03a0128f0b5cb757c4b189c8c93d63ee515bf1c625582371ad0a557af695ba72f7e88175bb71eeb96a75371b401a83df8e9873ee9002dedf352ef48403dd7035c7dd2b41906286f6d98eea99a142f50cf3eda184c0e54ca2735cb68427dc1c02072ed3c4a8558be39fa2c35399b2283743549d0dbcc0df370a486edc76aff8ce5592903e447e6662d1185d61e11db98daf5fc0a779cded256bb6c3620ef5f3ade3e1e5892c72fe98643345484984
+Entropy.10 = 561c3c79a72e42f1522caecf2af1873ad554b57d18c2c4f6c44648e8e6a48531
+Nonce.10 = 42ae3285a5102e0ff262ee8c9544b6d7
+PersonalisationString.10 = 84b6393ff308f55f803e33e36cb18f2ad515faaf0acd961a541dfec1efe6b75e
+AdditionalInputA.10 = e3bc52ff5d1c85f3f2e5d459a2e475836e028ff1f764d7797b310f52d2f95743
+AdditionalInputB.10 = 2aea6c35e008e671a5071b08967e7b5d1809f154dc71073e3c271bad6d354e83
+Output.10 = 67e0ca620571236717abad4346155adee7f699e6cf8034ea19ecdcd83a0548b9afe354d9c4cc75d691acf5b0da98da343ed1069cbdc76895b95f951f5c12ae98fbab55fb210defd128ee8bfc2799c6f1e10cca8c5c7c7b605419f701ab03af687bd3e3a02f0ed7333b376f46a6ec2e27d87ab0128d7ac12887eac26fb7c323458f58b85a1c132ef1a47e1e0d2dcc7f26655a11add6b83c167fc3a0a7587ddf8fb0b7ddc1f1e0d838fbfaa0155e969d513c4554229d47313a19fde80ab61ef5cf
+Entropy.11 = cc16f7c25b9622d7cf01aec7f9b591ca7c7cc632d406ef91274ade219169863f
+Nonce.11 = 554538c7cfb05406142b17614b3534f6
+PersonalisationString.11 = 18a5eb7fdbe463e62188e7f101ded716a6f931c98feb0c591ff46c484ab37498
+AdditionalInputA.11 = 072073aa01a786bef9e8683d459ca1ff801a783079e7b84c8873f88fbd98dc97
+AdditionalInputB.11 = 6784e0a93ab55e76df32eae827a7761b07b67d0816c04874eac024527ee5fce8
+Output.11 = c8eff9f699bc3393cbe96f4c0b16f4101647e0b04d8342b45fabb372e503f7f757032b3383ef3ebd135c934d9fb5bc9725d624fbb749485b4a5153259e85f66ad32fd780d7100c085086e105d2cca9e60de6f78747ce459ffcd1c607f68bc884bf910cf95e2abd960b635d2661d89a13e37745c10db7f4040d20bf36719b58cf89c7bb4e53b4392ab890c8745f6b26201ed341494cc398b9652096f69fcf512dfced15088842549e14851922e874521b2dae77275261a94c7ff096ce93598fb3
+Entropy.12 = 85d542f5f5d5671a1f9bb22a9d95b6eaf56556ed6130f4f5cd301420397a8286
+Nonce.12 = 8434d2197f7cc2635de79cd20588d10c
+PersonalisationString.12 = 1cc81c3a8170b34f9f4a562749f677044dc6e9f5e1c717326a47169f91559362
+AdditionalInputA.12 = 8e0fa487fe56900a3fffdf212030506d4e4eeb2d033ba660a656f10a9f3db146
+AdditionalInputB.12 = 2d5532072c4d5740802472193b51cc282add5f191b0464349401863d28ec4ea6
+Output.12 = b11270c27b2b9e709bb64bb5bdacea40d8cc15d4ef38a9bae293d4b521d32661203b2188c131dfce2d8135cd79ae4f5c08f1e5a40cb7ad078936e2437f17d3de86bc6e3402a0c63f660766ef5b7e7b06e4fb05feaf01d15be98f002b7c9a9dc88733b1e9bc84d2e74af30ac855b78e105c325355845dd5a9548a7ee7f8afcc37907864bc586cd1a3635840b5a6ebe071d34d7d0688905e5a791920b8f66f257d3cdc4999bbfc6c0df5b4e259bb3cb0795e005cbdb35d1637534dca076b5cbb27
+Entropy.13 = 253faed3a47cdc300773d76fcf43ba1d932639b6db6f0780f77631e6a70ad36f
+Nonce.13 = 97e289fa6c6511fef80c7644d0abaf6a
+PersonalisationString.13 = 4ddda6f3e6d726ea0329a011c0313b6683979a7ba8446e85981d454d3ed900c2
+AdditionalInputA.13 = 330d6b5ed6e0fb830d5270234904564f2920f1d2a60476dc79ef2295e43e1a70
+AdditionalInputB.13 = 8f1f018f1164c4e8b05386294ac97eae52824abe0388ad1bd4f4dafc2eb05fd7
+Output.13 = a53301d45f17bc6c89017c1bf97587ab31f4916d0056a2961705eb8d0d6024b8366a88e604d1883f9f530a9f4f187e1d3e523cd7a03ad86e2abceaf59c8eb279044a60307bb13c1660594835396fd3852deeab551b20dc572df37e0689b176812aef1126a3807fa313014a1d24e7a456bded4b343c24ee5a3a01557f27e7d030e182a0a285d1498a577c5e6b12bdec1e9836e3692c228f513e86d7e95e3dc1065d08a0d2bda698be78ea0b2b7f6a3497c0d5ee6b81c94586beb0fa027a8669b7
+Entropy.14 = b2e7ec92eefef5d32b32892d3aa2b65e01d305fd4bc1da9a37604693529fbbb0
+Nonce.14 = 1c2c282e101c24cb7a95d017a03ca680
+PersonalisationString.14 = efbb618c2b16d52e4e47f557888e6e035717e71b1deeec604eddf56582649251
+AdditionalInputA.14 = fa32817ad83c85b594976eafab28fe25c45aa74d0ab4750b33dbfd88361f9dcd
+AdditionalInputB.14 = 2e5cb3c7c9503e019b3383eb6264d6000160c3c99ee5700e7a92433da1c01f56
+Output.14 = a7571c1afd3d1dc1d3b28dbab54fe3514a0ec74ccf999376a963a3820474cdd67b190551ad5b24f4376633b4964490f79a94059a55b967f8dbe58eb20d70f1fdac91565bd8daf5223abfa13b132a140acd33e36f29fe1b107f62e6c45a679247b80c0aa050f1c2d3195629baef7422b72fb3cfbb82a2e4dd1966b1cc27b8e6df1907fbd6320f25594e1eff912cd9685755473b908e06fd30c4359258be0580e6bb2f986b0450d53fdbfefc3bf06c0d80648800234100af755acec4f809c39f3e
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 8c801881eab7c4ee266eefdfe4542c577ed822b8d287f9b505158b57aa4fcd45
+Nonce.0 = dd30c873d352d24610b55fd3469bbd27
+Output.0 = a12284431482d6dc016df53984647576a2ae619026786936e8e8644da80a2b4a81dd49e4562ba0e3435c199967ae9084fdfda4978759803d60f3eea6a88e32d3152f02a6f026f6c5be231bc352c381600c3a9c98fe371b460128724beac130a57b19d4f5b68d34054fe4fea076ed5c598f78f503b1cb31d445c93e12458f9fc31e6732a1b212105e438c8700eba68768b084eb3bd1760aabe5cd8b31175b0bdb09038da6a166c8f93552add13ed047b65c54d47b4b5568dfff2a3bf3daaf0fab
+Entropy.1 = 4227d1d20f16951377c275cf7ab4598328045c736b43514e39cca65741a37165
+Nonce.1 = 058acf3c8846fcbe63c25f497082b127
+Output.1 = 08b00d950dcf31df0f82d8831917fbe5bf2342753ff1d0bf0988cd9c9103d607967c525b11822f65616b1d5c9db40dbd67e87eef6a02575f7597332cca37e0ba63aa98e1a42e26fd84cb910259bd758d4e5350abf6764f6c2fcb58c3a9c33523b4d4920162393203529e221b25f0e1efa64abc09e1c647af55ee29fe57e744c206868b13124e7377ee201cb6847399bb2c2a209a050a1954a7ec43a8397ac82d586230b8cbd2c58072eb4a626aab866f39d4be2abecb9d2e8bffc696ced23fc4
+Entropy.2 = 979283d921c012117037d6c450e2ac3dbf47fc5ff8ec935aa2b2ca44c5191c26
+Nonce.2 = 255dc3a53398c95a36ff5ffc63404653
+Output.2 = 1e7ba5bf07492bd8647b0192566e3614213888b895ccca23fd55b398fcddbd8da06b2adf6a7772eaf053124b8ac6a88f48e2e6e9680cb1015436c4930390b1f0ecfba2bfabddfff9b550251194562512f0ea9f6d589857195d55e44aa4f8bede27a7304403222a9eedf9eec7e9927defb1f1338175afd9d7d1b2a4339262997f05b58bf589faed4555102633dbae9010de91844f532d4d944ec19a33e68afddd77a81617476d7cc6fb91e65306373f369a44107974ee7fe522d3e81f61442fa0
+Entropy.3 = 77dd9f622715bfe6d98eb9f71a999589df32fda44abba1ab3d94aea5bd01d1c4
+Nonce.3 = 526097f9e7ca8c1300bd4c68641d18b7
+Output.3 = 4873dcc448595c5be71a566deeb53c83696765eac2ff61843a00f9cad83ffe062632788d879b30a99539a60535fbfed447378f9ed14daaf5e3b2e8a35e539d263810d5f3d6b2f3d21769aa1b338069e26ef91c4e8024cff2c502341764b5f3fd3c2f6c86f30c2a8b528258b81cac6c3a6a1410e9abe633944ae3467512f84cf7ac2c4fc76992dda5e2bb87cc7e9136bed5d16df4178778f21956733df3775453098ce3ced544935b4ac8d5fc7808c1ebd18cad0362fa6b8b421f4d32415995dc
+Entropy.4 = d84eb51f6f165941a8bf40ba46cd1ad5fbb785b051fe4c338e29843517dca6f1
+Nonce.4 = b1915f5effd8bdc4af8800e15beb6f7a
+Output.4 = e35734999749f558bd177695b2694ca8870f4dea23e05b167af5ded6c832c6b79e3275eb81f84e60fe493f175bb45291818e7e74ea7c6f18c6f442f75b6365be04781e3fb0979ca35d04fb12d4484c95ea4edcff739ca22010766eff7bc61e465028fd61f7ab7279f2affe55d3a06b04c9da5f10ae940d3eba56e8b0086d15c69ca4a20fc1a3a7a4c46941e3e750e6219e87ab956b1d9194dd0c61f22868b6452ffcd9c555337f8e5e515e52de90937f1b523edcedb1b0102e6dd0ec649fb116
+Entropy.5 = 51b37bd315ac0678725c9139a78ce7ad7d23359f31d015add589f91b61f39781
+Nonce.5 = 2809ebddb9fb5798398560a9dfa1fc51
+Output.5 = 93420bcc789c6e870ad5f924fa3b358817b78ee883ebefa6fd106d74a363f908cf9e60e24f958a7cde96d0cec8000ef78d056300404f1e02c10f1d2471fe3dd6c103f5dadeeaba37e88bfbb4f033c5aca2b2dec35b10c8d34d56bd86459db87ed45f0ddc85b2f52e4f44f0ce81ca77830ffcf5694e3a0d481a83f41147808b30c6f2a05b013f0db1d4e8c9faa8e8ba1d68402966f2e650fa613b3aaf6dfb07afbe436a527a7744e7215fcccf0b3b6ebae0b4196ba8a7541fe44573c8172b0fed
+Entropy.6 = 203b742d2fbd8ddb86b4cb9375dbda0c8ed21a8ff8b20c37f0f337d1c714d662
+Nonce.6 = 4d1469ef82e38b7e8c53a2d288fa8c8f
+Output.6 = b612b61051530714138bf287ace0d00d922add8e74e74daff67ae281915a8b0f74df894f8b3f577d84fbdddd268f4e47bb7c51378da7a59d46883c0229b220f5469c0718b39fbe99f7cedf93a0b03d3e14481422f1b3785e670e963046d017c1013f09ef94f39dd4cad753f861ff2f0b330c751e2143ab207c0b646638cebd951b4eeab42eaf43486106176496311aa4e1a2e10f3718ecc4615a94aade44e735976a79c1c75eb1b4dd899927f8db44dfc163da8a47c0c5f6517a016a0b42389b
+Entropy.7 = 8d4053c62e4560aa5eaff157ce25439fc719811cd8057a72cd14bc0359e1efe8
+Nonce.7 = ae0b87643123e790a82ae9f89966e0d9
+Output.7 = 86ac147e7d0f32d9b242a838460c863f4786dcb116024c836007af4e322c21726806314c82a14d2a9ec396d4ab30cd3fcdb5df21c68af1ad702d6885a977b73e38628d391f4b313a2941e26ffbc38e4196c7ddf8f7e3afa3f2b062dfcd8485e98f87a3943b9baeef17be6ae9787032ed466ee00919b60c288d02c6ca42300cfd8df6cd10d8d6a7eaba6fb4d4b7d74f9e2df747fdbc28020716755bfbc1a431ff8ff01e2564e9ca06a422a7fafaa87456243f967665ab28cbead6d07c9da0fa2b
+Entropy.8 = aa674aeb1b5da4b7c726b83bfeb4b1a4bde1a52a087ccbdb4e0fdaf87f484460
+Nonce.8 = 973fe67fc1b2b8877d1083a555ca651b
+Output.8 = 0c8195756f630eb5d3d98a35b72431b57e070fb1f4eee8e97f884c2dfee0e5645611dfdd2663085870b18ac7d59caf727bae7a8eb70ba0920ae89c1d826aef98b30e5dfd79bb9fd6f02237ee8f60e43dded18d79e27e4bbdb08685b2bd8c179b2e121f636063a911f01e4be98feced5207c2d665cc7478ae0afcc29690c3084011a050ec3829e32a7bba89424f2e2210feb082c74d5e4eca516f220163acca8422ea3db37d8b543c3726091a3211e8c57baadd18c12993e4ab05eddf2d76970d
+Entropy.9 = 6d8188fe3de5e2a5b04af343731bbbd2e3735cbd4ddb440a4c676498567b08e8
+Nonce.9 = 3f16ad4eea9e9b8e0c9923fc915ca4a0
+Output.9 = 9e6f6b2d7a1eab7178442820bc3fa72e8a3fe412c99b5f05b7394d866ee0fb1d264caeba7ba178bcf6c3742917a2435cd89863fda6774ce49c3949568022f2129de240294786ecdc6cd2ccd4758bb2e2614177baa8402d110f8056f22a4275aa1c72b7df820b8a33f13e21c7c1d3799c115dfabc1cca757d2d7903583025d75c4f233584b4d71ade533f426ce45b007d0aa7f92260f3f88436d42bd7e798a574ebf3aa42124a6e0fc1d46519c642f8e50018843067b7a986cab6bb2eeaa983a7
+Entropy.10 = c17f5c6544320dd01aab91b17e756c828c5e003cfb2afae7ddb91785bb4da3af
+Nonce.10 = 84b440fe338967162e348e7dc30d56de
+Output.10 = dd5f09c47e45da8da6c8e7237cbd0a7cfbec482017d9ffc3f9a6b78f0adeaa5b82152302584d51cd25836732b8a1027ca804847bc9268248f3ba772424896a0dcfaf1b1db5326fed41517a0a60a8034b0182d8acb21f819921790eb9942e8af0a4b4a8d91eb6ad9eff795a35bc9d3c37cb3fa6b484d207867301fad80b685d3e0d0a1ea55a3c41d46d5de62e39c725c31b331410d94392f8d9669564ab97cd79ed69be64695d8298602d64f3dd2e32b1bbdd5f845e617782fed2b4fb4975961a
+Entropy.11 = ab40718cc20345ca62b5b15b3d868decead7139f616db6629e7f16aa12162295
+Nonce.11 = ecf873875a825dcd78ed858f09bf2726
+Output.11 = 92283cb0871966ceb9bff4573b3f4600d87f6427882f4e47967ffcad8cbcd3aca7e5bd0b2c5fbd7286ebf26161322417ab932b063b8847139acec642b9b1cd0c8174b25eec9f8749d338d4dfba6c8b73b0926ec5e2f0547da7c57ead4ddb237a204053cb55cea76b2e30a103883bcd0f7886c4c27461a4a38dece4734cc70973d25059731dbad506a8007a1e05259b9882a0060ae86a274cc2a71a87fff7a583a3fb6a3ed3797c37d88b00578780f1ef8864a05f15f640dd9807a9a78ceca5b6
+Entropy.12 = f6445b4f2c2d4afb4e9945d88f32555bf58bb4f1d9677cd955830c5c888fb503
+Nonce.12 = 66549dcbd3f07c92b6848766aab11f46
+Output.12 = a4699e29b2e509247366a6ea8f3784b03c10da3216a59675a2820101b51d4a3551fd5ecec7514091024117d6bddb8c3fd5fd499baa941ce1059f846f5ce5dcdb276d234521144fbcc14b9d7b457a13c860758aae61cdc2c92c520c93b0fecdf5e8f329b44c6dc3cd3e2522f5f514f18897d52562621bab6f93c93c74c55b4bc98105120dcd80d0247779595a1862c52d7cd701f203433e04c6052fc30f6620eb1a4ef9b63461f80367174accf8db1ab416687b0aada0da7c8b9ef954779f55dd
+Entropy.13 = fbaa77fddaa6f0b737902459f117ab739494b165136ebf8d75c00a12384d363a
+Nonce.13 = 1cce6f7b6dbe8e0902f6790c782216ae
+Output.13 = a47c6f2e3699f5f89700a0b0908f40b6a6135a8041d133e244d968953651f7f70c1b2c1a1fd93b1de3f863c1f97067716a60c0d418b10f70e21d641f9d5857d949819ac9a5dbefe5095e8eaeffb36b1e6d96d2d53d7eb11a60eefe6b3de99034b7f9ff58258ce1a9164bd5e928c7e1832cce094b7fbc431144cf042d2a1aef7101a18e52d68cdcd3f46f9e4239e0b312033d8baf5316183ce1899fff4b51078fab6e721c4e23f911ab58fb68b6bee28a23a44fef2742788448612dd77c8a4b96
+Entropy.14 = 1e1cde834393e00a2136b8924be5600c8bf59dc2d8a9eeae467ede71ee7b75af
+Nonce.14 = b6035e96adcb7e8f2e17022e2e4f39ad
+Output.14 = 9dde9f29034b6e784be24fe600c39b091568afb4c40c8e05b8b7dc36ca74a1bed38ab15643ca8c6da2f5aa4b7a6a5d5c9920cc31129c84e2fc9b865b3f30b698a143189a3f3b692b3e5641499c949e53e3619cb112f42046a18d5d12dfb3c6932a6a829d07deb17b799519b81e961ff293c0b2d24b629fe906166e330135e4ffd00609462f0f9b89a110084945243972486a0e1aedb2eceec02d402696c89abbc950dcaa72d7b0e00ed8e65c3e9eb1af7535de2da728f901650633242b3368c6
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 5f085635d4af1d4216f8f7475699380378affa49cb7c66ae95061c2ca1f53b85
+Nonce.0 = b1317464462811438bc59ff5be27c06b
+AdditionalInputA.0 = 0f3f41382fe8f99ea64ffb2edd5c826be69898a519458ecba98623f2e2400edb
+AdditionalInputB.0 = 41c6f4a8cc860a22e1545555cc50d8f8ed132b3385f7b8c1321cefdfe446051d
+Output.0 = d7dd1e0d38a8e52b988b7e208f01c3ab4f9887ac645df9b8c140c3e63cbaf6aff412057bd5c3e1544beacff77c3546085e24b30b27cbfca573394088be592df7ce4fe7918839476e802c97430833501a533ae69bfc58c5810a5691d7a14b0398d92817e24881dc6dcbf255801b629dbbd7ea3ee2440a0ebf1e762b71f44af8c0081a711818f246f1e0144416ef5cf56369c8b96f20b1ce3f2da20622d7fbec28b29fd09d24a2a2d2d2d56aca643340329a2bed795a9adbbccd40829661c301a6
+Entropy.1 = 5fe0188f578f6900174af80a2161d1a572c470a147d2441e4fa99dbc2178e8a6
+Nonce.1 = 06ae3907f4f7d47311e00fada6575d3b
+AdditionalInputA.1 = d6f0387df3fb9d121a7e6ca908851bc1d43a3020ab8ee04bcdf57880f857fe26
+AdditionalInputB.1 = c10ae00ed2e53c045f3115ac10a796d3419109d8a0e5530413c179814925dae3
+Output.1 = 86e0234d7d7e783d39d472425e770f62e9b3cfade4afc770bf1844b8914735a2115bf670af0f6dca2ce045eea63b951ab7e0763237cd1f98ce14a68d2fb653c33d6ddde96a65fcddda94b738c411a73b4e976b57abc9c1a77de67242f5ce00fcb23fe7fc6699ca250596d3e80757c5ce588d90118e9622b37d20e9dd259840dfd0826aaa61958d8df5cedb4fe2beffccfc42c465630341464320bb7a61c77a6e51b6b7f9f0e4fe0e518a5aabb84167dc31403113edbc8a0aa89c5a49fdff249c
+Entropy.2 = 04e8408191c64461062e513951dc77be457b1bc273e214e00dd3fecf853658d3
+Nonce.2 = c911660eb58098f1bc08bdba56e911ad
+AdditionalInputA.2 = 976e9987da9a03ff06e1de2e94ce4d777a09a7eb3afc0c46fa357e1ae7c26a80
+AdditionalInputB.2 = c21d79a86561879b21e01d33e94a71e230eadcdb49779a574e3c76598d2aaac6
+Output.2 = d3f33737fd112a8c2b6d674183f34317a7ff2ca4196982f9cba04aca0cdc3a3d2fce3a93c6ffee8439a7238c833572f06521c74471b31590d5a7cdeb6d2fbab57bb3798713900d67936bb265bf9caa5bb833dc652897d8ad052b06356ba9da97f37edc396fcadbb1b47632af0261b4df287e801388b43133d64a93fada91d4eba88635bb00548d24be99f2f480c3375378279b16762ed10b5453e2724a8beb298681dc90413e706bdb152d08d2ab633e9dd8dd0e63f5d47075dd4533dbd5abfc
+Entropy.3 = add2fbd036fd0916cdc65e0ddeb1d99556e09a8b0980e79119c088377668769e
+Nonce.3 = 09b3d33f8b126cd00efa559476401f10
+AdditionalInputA.3 = 0cf2c8210a45194c20f2068a6b1be73ff278418cb6f3ab85079e147b1a2e3ea2
+AdditionalInputB.3 = a610f86fd389413acf796457d2c7e285393feecbf4e18285cf25f4adbc839732
+Output.3 = 7241bce7a3de33fb091d01804888d245396072d8f8ecdb6ddcf535a745494260a5462ef9fe59002b7326c47d0cddedcf2d7f959b790a8ba4d4c4948d2c1c2a95f10c55beeeae785e863a252e9616bfda5c0c3ba3a5f3bdcecd4e3a4ec7488e76f7937797277f1f4076db53d35f01f52f864d319a504f3b6402865836758410b29b68b08f1564e83130f799cc1ea5df3c06d9744e4b78ef8386d4bf03d24037054652faea3fba22d018b868243b47de682105b004e2c6b5e3b21c6a0729ec6cdc
+Entropy.4 = 87d5f880f80b99890342e59d3b85f80393ed0775a8d4b8ae7a5bf8db9aaddaaa
+Nonce.4 = c0feaccb3fcdb3054f3a6edaed14202f
+AdditionalInputA.4 = eb93ee435cf552c75f0a0b86bdfdcb3170e1163fe433fcce0eda1a8fe2dbab80
+AdditionalInputB.4 = 6f57145a1b51b26fe1ccf12697fd7d23c4d88d25d9fb3f5cad111bc75541d6cd
+Output.4 = 29bfe06b883f6755510bd5a3d0dff03b738b6e9b6ed8404eb414d216b764b80cd4188e2b2464fc38988bfaaab14a9b1f2a606c5f08acd65afc998689c507e8ed2ea9be294076a6b10e9d265e816a4cfa696af39ae21800b8e09f36b767564cf734ae707e5baf665a21f48469b46b8b538e977ca3e9f18b30ccfcd59146826c54c0668f33310f8d698f2d4a4654a9dec2ca84d5039794472c252a45be06b321c013c8d527ec5c49f15894808dc337806e2c283637b7e6276c6f4f5675de54366a
+Entropy.5 = 09e3acb7d872891027598067a5814755c4af34308df758da89913938fd298024
+Nonce.5 = 0f23249457b52b73fbe00f9a77ef1117
+AdditionalInputA.5 = a54d0108d940df646b44b06a73781d370d62785393a25befbe8312d117465d3e
+AdditionalInputB.5 = 6cf2ee872895735082301bba9e45a0dcfcab202fefcdc1f0a88bf0e825078139
+Output.5 = 978c96e8615c0d595bc521c6e59ba1895dd83f8e62b3a689798d7840c4b904e6cedba7f9d7996c20189ca1d5490b2ac49021a7fef21715fc1c2f71e9f31897d4151b5a9692238dd3d2e802b201ce72e2ea6af7464063b2222eb618660167f15ff2f781371e2dc4ef7aad1e78163bd69125cbdd300d001e3e6d64c2e8528fabe32becc906929692f6971db3f9f987df7066f25a440aec2c9e0019a2e1298a279fb20748517be723c19c613192dfc4e390dd49f1f31985208460357dee01738475
+Entropy.6 = 8d82faa2471301c176a49034a3223363e5891be7bc3c35fdca216279f2b9ca5c
+Nonce.6 = f8187460d3724d6233a3506b36e8c7c1
+AdditionalInputA.6 = 007f8ac83c3208948b0011d70f95db6378a3ba7597d92856a75794d4db2a119c
+AdditionalInputB.6 = 3b914adb57d88bed5cb70f9788a5fd8f4694d0fb977bfebe60176c51e1f70246
+Output.6 = 6c771ec00fa60496cc3684729b7054b2e539e285671bc5ab3f6e3f8b80bbbf178926b36d94cc6824506e9d920cb9988bfd025d4b122548609c9d9b306b7ffa0f6edcc2278cd8c536abf544ae2d21df23483765f8931e2065a3a450ee718a32e15150041d8dadbc1c756948d102176e486b9e7516e3eed1d201a63de0a9a3e3f2e5c4751f8d77c3be7275b1c8aff401e3f45c78b9c1fd6347c349b530861a8f6abc8570cb10179843e422e0e1e8961af24107fd6052526096997b9609499e499c
+Entropy.7 = f933b5a23efa112d1e0e93d391aae55015beb2468786929d9d1d45c2b20ed6b9
+Nonce.7 = 7846542f383c388356fc4fa1d915d337
+AdditionalInputA.7 = 2defa8187afeec70d0a254f34f75e180eeb107f9401739789fa57adc7cc211ac
+AdditionalInputB.7 = 194469e824ffd7db69262cb3a064d8862f82abc54f6bb10b874ae6b0893d0baa
+Output.7 = 81c5edd27c390ea387550e98c73c8ec9af0f433ace2cee681f340dca16cf3014db120b5064974aa0aa916091259d4c2422c1be79bf599df4adb5478c5e27816c4b7b3ba16590748083c1f26b00a732ff1df704fa2d07aff4746aeba53145ddb6078fb91734a4f1716d1bb91a4f1dddc27f0d3ab7cc310a90efa7fc39e8ede8f4143052c503731f4f1cdf825e3f1ed9c457e38a5473808d3a03e237c68764dd32a6d9667201a4e004fe072be3de158d332314487c2c619a483cc7a900119d8f4a
+Entropy.8 = f4c916fb51e2fbf5237b4ad80b8fabdd86de22a4c7fac26f53b6082a62230f96
+Nonce.8 = 48fc31900aa0163f4a22ebf64d31912e
+AdditionalInputA.8 = dfabec14fc04c54c3654e08bbdf9eedab70078fafec610082bd800ff038b62e7
+AdditionalInputB.8 = 5c5ddce832d692e3bdea8c72eef7276e3f99bfdcabf5388f4d3fc709bca1320d
+Output.8 = 1c65ac44cd9c19e50e467649fc280903f176f37f3a870b9f7bb30f173e0acc736e8f3322cc1b1540189ced5a82b8b3e716012fba421ef39918de623f50bfc697abb56a034ccbe465d3b39cc6d305ed58eee98c539d7e77e6fdef520ed54b933ebde3c028e36156bdb9b3612fdff6bccc0c4524e3d8fc12439ee4f05de67c65ba35031f07100425778e9b9bee56e32d66f880cbe95e4af3050a5f61dfb86db936c58df7b2b737a80ffa253adf4456801f2ecacaf7f15068a685743be67f86ef29
+Entropy.9 = 460fe13f8904f0e13caac6d00ee0605a74f4f8d58f8c9c6cc95fb94d4e181e4e
+Nonce.9 = 32ea29d7fcb4562e69e07a8b5c8be146
+AdditionalInputA.9 = 1cfd579a0a37f5c1a5555f4604353c57f6e10a125d2aca12ff0185a884512cf5
+AdditionalInputB.9 = ae1f19a9c43af40edfe61fbb778c13e72bdb2005d819c6d906d643393039b260
+Output.9 = 79c4e16ea48251f6738d657b537585712aa4d882b483010b9f92dab4aa749ae29db2081e6d04a5bbdd9a4c5fe61cc4617d9a16fa815adcf530be39d1d3ad843f3fef9b6299fc58c88514521635cd9dc8cfc26a7973369cb090da50b6a1d6cb8c50e2e0fb90e96585a974edcee90c4c7c6792ab7dc5d10404ce31fe55fe0a0377ea13574e9ea8e9cba7547abc2432126d013bfbc27dd7de1a46241e2e15a85b7776e082b0c5cf76171a8f4a08dc395695feedb8d46eabeebbc2e3da07a405fe6a
+Entropy.10 = 725d56ede85e1f1239df7adee388edbf0c69af3df69b60a250684b6b4801689a
+Nonce.10 = c156af45d6c551212eea7fb6223a9c15
+AdditionalInputA.10 = 3c95dd25d31357eacd11117e3a44abdf6f0d3283ef16a4bdaecd124776230919
+AdditionalInputB.10 = 7d7028f8a4bd307d1cf9e113bbac18bdf45772953190cc310080580d9f402d82
+Output.10 = 31a724c055ff1668215946ed5a4b492aab198851280ced1de4f57871db31af69447086eb0b9ed1ffe77b771f08f67daf1c9526edcd4d4294759d80da8aae559590df5e49e0e54e53cfb2cf57316c7187af624fb86bf6fe44014b0579dc5f7f6ac3c5b4c95710e3e61882e8289e17a7081d0710e90c6c00fb2a295e1d6a1678d45ba12d4e5a039860e6d22c20328f4485bbf7737d57667acb15df6f3e010401b6ac64707ef6732b60cbea347a9b229547312ae90d701966e359b7980e9e2405ab
+Entropy.11 = 708dc47c4af4ccd27d82bc7ab1da9a76f2daec1bcfd3fc2398daa0d6bd93611a
+Nonce.11 = 638ea30a5e5faea1ac2c959bd3c63f2e
+AdditionalInputA.11 = 5312decf4e3057949bc97e2d159ba6a6ca94aad01b6368b821a1e0708fcb88c5
+AdditionalInputB.11 = a05b03f26a49cd5e5ccf72e18b1542c7409c70f89b171e0cbecb260fbfeaac4b
+Output.11 = 1f8d39a247712188d1f7fecf29897c5c4c4ea6a13f1098ad7def578490e1051613aacfe216805b63a5164bf34b67b4580391825b3200ac500b344d10030a965df6df064df95b0c1313acfce73a1b93a6994c833414b4b3b8071b96988121cfcf4c89a03ac16c5bb189dd12a9d1a42d4463dac8ce0296bbffcef917b8403b85b6dc5b94bc1bee9a865283ac02afeb20fa73da4ef9f3716ac6d558f76aa8515a0980e75c189cb836e02c3a0b2fb7dfd9ecd525bc4bad0498d2076ce94882dabfaa
+Entropy.12 = a342fba3f7a2df8a8d25130c5706bd478998aaf8f02646824f0481035874568c
+Nonce.12 = 1a637cf494acb59084f600c18233d230
+AdditionalInputA.12 = 0cf52f8ec7f53445200308ef04d24152ade65f8bed4bbcb4927d64cf2a0e78bd
+AdditionalInputB.12 = 76be4a79c72ebe2d51dced9254f3cdd52ac20f571d323f1dfe6bbac829fdd740
+Output.12 = 9b631cb56d5b8e07b1e14111c8a6d2485e442ab39af4b22f4b55ba1a7210b90682ac6d552531e35af6d8f4d659eab41cb89b581756bf12173eca35c3b2324be8230778fbd51f1b5f42f2c1ec8d3e38ee13b60418b0c82a8690822b62f73b1fc689214e9a33a90fff4a8a2e8cdfe84866baecb6bd19984752f8f72cb5346d8a68b6eb0bd2e19d698ca6016e6819317f23a3038416df7e72ce35532aef2f1428dc6127213dc68c06b26ebfe1d7bc0c96fc89f7e75a8353a279f5377bfb2669a085
+Entropy.13 = db08f992d8ecb7037f7631342da4cf771f540d4c50a0c09d3675ba670ffca750
+Nonce.13 = c7972b4e81f028ad5d640f9e0995e830
+AdditionalInputA.13 = 4a2d43e01405bc9734a70e2f6fd343289c33ebbbe68ba59554d6f16344b2b419
+AdditionalInputB.13 = c580567053d8a0eaa818cb611adfc1b571308c0fb437cd84d11a4eb80fe752ac
+Output.13 = 20e716b020bf03816f6bd2585b03529c8c258bb583450d8c47b89a3706ee488e8e3d73429be19798c69222784533239b973942d19d048378a58c6e076d9e223beccc32722e097b3df774018400bcb963a3319cb4889975755c422fae5b9bf504e59c341354276e5decbf3c279a4cceeae6eb41f0abb6c1355938e5d0d865c27bedf1f33a1accb70c7c6fcdc97be324ee3a86b93685f640d92eb9458d3e888e273a66e30cd98f8c58bb88c1bb1c541a525e62970875e5637a59ef24ce71d8b403
+Entropy.14 = 0ba5abb25413c57b2d4a6d673bc03360c5ce1df9cc9fc8cd26f8ec0f4ec87ecc
+Nonce.14 = 35bcd2d6a138d4f3989b98b60632b7c9
+AdditionalInputA.14 = 7112823304b16377182ff9aba920c97ec4d4f23cd472fa9954ded16495d23f7e
+AdditionalInputB.14 = ba183a035635d9617bd71b59fccd561f1c78a7589c7fb3fedf41dc2e6d5015c9
+Output.14 = 94e577e5c4f66be345c6be7038b02fcfb4070d5bf74f8004b59c279cce961dcf5bfdce2f01e007790cf770587a68d0d24ef0fcd1a148fca6920e707289e58b81fa4a58b5a018a358d336a20daef30b2881844838e51c56f11533b25c77b9c6c6bb2c0657350f011b24db6c60a84232dbcd218a816563737585c1ca6152ff13304ca86dff20f9f9596aaa21448f2c6e620eee58f69338e3b675d29b478f34f0e60dfe7f12f02e6181d19185f7dc945210d86d31e85eae03161e947fec0f0fc91d
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 70de81d127c681561c6b493c8cadc8414e8cee05483f55536c9ca85870bca0ca
+Nonce.0 = 9b0100814f2583b7238bfb1fd0ba667c
+PersonalisationString.0 = aaa228c9acc8f8d349f96509ed5d2908baa5a3df28fe4e286b7f555dc7080117
+Output.0 = daef45c681b71075a8ab3493f872a27a5889201f89d965b01e3a57ddeeab7fa9fa132187d1862dc51fab0ad807b81cc7d00bebbe72ec6b1f223f901bf959f66d8bc9c27fe4a8549272446d000b32ae9e33db96e71695643e1a612414e850e4c3345b0ae0b8a30ad1badab20b06d4f6200923aae94a856727b0e95d10f55efc3c2f456580b4db9e0318836e4e513ef7fba11c87c1cbd879a87ead4fb0afd28aa6e0fbd2583566f77c658fa6a153feb00b4b6a834e42f50cc1591fbd2564fa117f
+Entropy.1 = 7815eca31f6cb0d691feb6ea67bf2f1f7d18c663a009406c32cade57826b2383
+Nonce.1 = f7d59e72891fc864183031865fbf2494
+PersonalisationString.1 = 80db21b0ce635e1fd1e32ac1269681dfebb60d91993872a0bd90a792a455469f
+Output.1 = f1947411a357d7e6906530c81b424210327aaf43a9e8072b55f3360d86e6aa7c5f16d1563be36c57189f1bc5d83eaf95b33ee23871c5fa79b5a97baaaf6de395a7edd3b2f0dd0e45f8e5bdcfadfea6d369f1ab47851110cc39552dfcc4da755b7ca485dff07c51aeb6da71d2b4f9fc65c332abeace27327d4eb4658bb9c1bb5c6d27347be882b8c9642d91f08876fb9ded6ba78c2bd52ad9494bf494221f5861242574f32602a052f8946d320c552e265a0c6212d052c66ddfef1feff6a81d6d
+Entropy.2 = 07c630984fd7902054ccce7f2628e288815eb6ba9eab2aeb601e994773c308e5
+Nonce.2 = fd945debd0724f4070bfa831cd805322
+PersonalisationString.2 = 7e5491051d49b1c6b96928a2e8b0c5f59baa3be90d60104e22ff72d9fbcc0b24
+Output.2 = 8e6d633d282ba33e96a08eb6189aeb405237be9c841937d15a811536cef8165287261def7a63127fc4204f6643900f44829230ccc7de2685f41b50bb7502147b38d20b4fa67738de2e8bde5acbd249d1dcd748b39870d8abe49d3e0228099269f33ce7a4dc0dab1cd74b1ee9376768302dd48e5c7cbb967403c02a3e5eea40170ec5f6b3ab519016df3cf065cfb2c5791d0edd7dd53a9d483c469b4b37748e35325e4c66fa91ed693ef72f275a94341155083b8338b5a9f0be85dc71ad7230b2
+Entropy.3 = 99f5690a9b572caf0946163879e8e76f350edfef7e5f832ba3c970f2aec9b60e
+Nonce.3 = a2daf8ff525d7193bcbf6387cb07b31a
+PersonalisationString.3 = 263944e089bb9e05ef88a683d8393eb603567917e7f1dedddb7b69c487e1d703
+Output.3 = 0d1bf25551ef211926382b3fd4ac107229e528b6e653f3284eb77b77a089a0777c54794f35ef77a9a99a42cbad5e0e057c5857acd1b9c127f092d83b09ede142a425a01898253b3d5cce91f3e9105ffb3e6327bdd9ec7a75b221283a559d42a53c7e47bf3a8282e3f5a6612c0f53b728f626e580ab02f3a7a81b5c4b770aebaa4466d0e12c8771f9c40c8c1e6da1b18b440c767b10656af633ca304f5f9dabe26c9c0699bc886985a624b6f9a823122451eef6a16723b0504ca4ccf33390cc38
+Entropy.4 = a159ae0bcb55d0b4989662a5f5a95da1be050a5373c4aa5713bf1db7b2d84bf7
+Nonce.4 = e60db02a03f866aad3081cace521d148
+PersonalisationString.4 = d150b2067a427e4e05d474b365c89db93c11ba124116f68b0b028c2b8ade8f65
+Output.4 = 7a3e407bc1166263f6c7528bef56e5da21cc170c9eb6781643bfd772fb5b1c274552bff9de0dc964e5ddb3ce3833a5a0e83ff84c15f7d288a9b054a7b94229f92d00b05ddf7419ec73d8c567c1a2170a40223428ee2f879bb84592d4b36fdc622ec5d7d615f794b323d211588d1805181fb0e33fcb963142af52977f0ddd9c9f60e84cb202dec3d1b0e8c26135bc1f51c1cbe4b36a996dabb7ee1a11927b705909bcb0f13e2b7d6a1ea51c2134cf48a1fc9f34556257602e87ba68a73a6554ba
+Entropy.5 = 494f20f6b24bb5b0b422a07473e9f771a6fb0590e7599f6be557de35ecf1e7d4
+Nonce.5 = 87b2204760911cdfa00811e7c7a8698a
+PersonalisationString.5 = 141df457de2fe1ac041ff60c670eb7f5cbe90c2a8a7c17d9606791b66c2553d7
+Output.5 = 383021db6e4f1d414726e20e063f10e71a48fe90cf5bcf7c9e8a0650db622e98e72026e24901f446928f59669b03a1db535390d29b1a87c23bacfa0fc0ba01755f22ccf84600d49cd20c705dc4f6ac1c8b7343f97ea87841075d089755d022001f3ef8df4c06fd057b654bb46349ad5792d1b408491dd82d35a6f09a60831ec8d9f17832a690c32f73eabe604570bdcffa88155aa0509664cd0662da4e75a192e4662fd82222ddd6304523425eba02dad98d0b28692b43d61ba44127ed545957
+Entropy.6 = 74ac530e95e14ec86f990260c234845a163030ce2ca86a24f0459630fdb629db
+Nonce.6 = 66040001c1fa6528f678c4c0d9061f46
+PersonalisationString.6 = 946d491549cb1f1761836d2c594f32b16e6736afd8460c0ecb1bfda1a7d7dca7
+Output.6 = a497a45f83669ef44a4a08db6aa2f69b5bd0c8a5a7fbe0ea70d2e9f996334659c2ce6ad3d5f5dc733c5e44b506d0610c0a251cf315cbdb8e0735d3f23da38d3e14354d932ab3ed99b3d4b6f1048d28d79ef36f910b6d211a5098b78b2a0dff215a7d64c9a26e201c9cd2dbccd03c19ef5f831dc4cfaef2bda854a540b69452d6e1e0b82c08a4bb861f24626a7e8c9b17fe7cf1ec0d3a6dae71ad20b1ff5629ed09f59b060622088a042abc62b2eb7aeed4ee4f9ef821e438ce4c8cb0c5724501
+Entropy.7 = 506c04817286c07ddebd09ff08ed68914db54c1b7c73c819fdaf23d1e48b2f08
+Nonce.7 = 329f92547b4d42764c2deef18b06161c
+PersonalisationString.7 = 97ca09edac4a17df2f6d65c0e4958f760c8416f2bce656d9eb3919faf0b918fa
+Output.7 = 7494c76a946c6fa4c79044b566b49f41637695cfa8e933f13be301dc11d6f5e703720ad344a92edd2d1de07e07c7595da8f03054c05ad01886d2cb5f4f6c4c5f0cfb29a371ec65ddcdda744f2e8015d813fcd9190eff3f6512c587a8e503f3e0d4299bd6a5eeb530a9dced480abef3e05ba1df1a7e04bd24d6b9cc052172a00e96ea3edfa41952786b157f6a124dbc7fbcc6732a8df256b979ef8492188f2f50a8f36490fcac63245d82687f0c502abca7ec7dd1982f5beb662215262a1759f9
+Entropy.8 = 6c7bedf7b1c554e344b26782bb7269a453f7fbc5aabf42f09e3033b58630f0ae
+Nonce.8 = 564f4f9c541b3107596cd3e8292b7a23
+PersonalisationString.8 = 9f05ef7646b4be65741c55c65a5ae569615d257434595b35afa2e4415024c972
+Output.8 = 4d08e9668fedbc387adc4f170f8b656f826f9f62801407853801d3c238705080cbbeab1860354cb60e765207b04bb3630da109b9b0d8857339172224729fc5420c47f844509d63a3d70325b0952753b41545eb8f87a837ddc78854ff04c3ae67736284589ebbc017b0e9e6ef9e8b6de43e1de0d80d4fe303795b99c2a87f02932681cfde9d75b2d2052ad74eeb7654c7dde25d541bb09bad52fb1f232a81f1af740db999ba8a88fce9c024911f080ab6021ec7cff968b48e7b22b96499cea5ac
+Entropy.9 = 2fb7776f60596cc045c2c92e05d0baeaed6021fcc0a66c3751817d6d5c72f665
+Nonce.9 = feeee4984161db20ac810d441e3fc3e1
+PersonalisationString.9 = 2e8f0b6f22b86cd484d7cad65089b1430ee4051c83d3e560d81c02b539c29a8c
+Output.9 = c508658e64534c789f930bae1ad77966d05a2d556447e5c7407a806e7af4bb626d4a010902cae02a2692e91a18a5a136d48c0cedacccf04883fc2d3b5d1720e184691aa726d0a47a0a74f6b2039af4ea3ee5756746a9984748b1dda81cd4185b8b71f014fae6e15154d276ee9f7562dab242c95eff1c69b4000f964a243b681d060b292166ff4b2e54be84ac576194bb96b511fb510ae6d19e783cf632efee03ea22a0d3a1f60b3a2571ed7d5a6ccb1c3286219f0c3f992d865a7707129f45a5
+Entropy.10 = 778e9175d3e502548ef4b5c7fc0698e7557e7f8903b86951ded11b90320c517f
+Nonce.10 = c9da53d66f5be160d9d4587e6fc4601c
+PersonalisationString.10 = 8221e6b8c882560efe8fae9bd849f0bbdd93b8ed84a3dbcb00e342600384f946
+Output.10 = 2e95d3bd5ab51a03d89feafd4b2ff60e2df83737cc78714dcbcd93837113819fd7b0e2d4257345aeec923ee51ea306deea04c31729e692d577731dbaa43a5ba14a67153776a2ee9064774a2590f2bd37a77372266f7455d856f61d902acf10cb0f8403a2fa050acb58cd0c044e9b8ce079b9f28da5271f961c39fba814f818f006cadbe31f55ae88f47748a5c34e8d6fe0324eafd8e3e1398eb0983455f38089dd46c5ee0f2abaeb582ddf8f0ed910e3111b0106da5dd1b83efd40f01577aa1b
+Entropy.11 = 9abe6eadd8df7fc85e4f414feb36fe06b587e1b4a29909062940def816045ff9
+Nonce.11 = 07bee03f9779b86260e73338aa509243
+PersonalisationString.11 = e24084f08e30990410592879c20e7b661a0cd1ffac997173631d68bdc8e9489b
+Output.11 = 74f1ce1b87f539012c3d69ab217c4b1fdb8f656cfd455a2e328a2e8d6eb16800b1a6f1810a34cedfe80439166cf7e4c06411d5a872859082170b84e19a9c71b5ab0417e4ed923b190d44263ba3dfc89c8167118cdfad4053c93d90cfaa23125a64a19fff17124e085f129508835fb9e8bdb4e6bfd40089113fbfb05c0cd6cb774f5368255dbadaab3136a49aa0bc8eef0ee25a0e61dcdfb5ac8b09a4c5381d649a05c4474d1952e95fa4597f9947a8ea0bcf7f68be6bb194dc1eba442ac5aab1
+Entropy.12 = 3dea25021f90e1651008ad4c589f789cf93e43fa30770f3b1b6d513335d01f1e
+Nonce.12 = 691b22cb58210e7b277595d1bd2a6c3e
+PersonalisationString.12 = a7fde42c12f8767851d1d0ed0c0b97efb9f1aaf837e0f5c2173ebd73f31f8b80
+Output.12 = c61743c144ea662c459d947a22a57565eb5da0774a6e1ab29cbb9052e72fe45a4223e31226cb65465fd6a0a0ee94f81d7c5ed07d5395dba87ead2222dc235b33ee1fdf561060eacc9b661985698d7c34f28743fd8f78b3c87391895761d19489abcb7e97ae3dc6246b6164b18d41d996446c6d5da6b64474eacb99520401c0abe21bf7545e3e75ab0fc8d1813a4cdb8cc0a3572f8d386cc166e4a516dc4f6a84109fec2a0e1648c630c245bd61214b36b42462226a451c8dc4bd80d823c51eb1
+Entropy.13 = 5241cced127c6d4ade1c8c26a34aa330e8453f22c3ef07ba712ac3bca4e3e29b
+Nonce.13 = 0c2c26095bc35ae5ecbb261a9fca3f52
+PersonalisationString.13 = 743a783fba241267380acf9157f3a5066ff7b29cbd74d1452c9b6db3b4b819ab
+Output.13 = dff087e2fcac155933af6b0f610141ee4c62ea5e32cd101a84aec4d8ef186d322899c88ca4f361fc0caf1f9758ef4a9eb696babe0eb16d4d36d1b020e8a3bc6938042dd63db602d729eddf17851d79b5465f33e809a8a998197afdac882d2f791bd6e9fd8aca8fd3ebe776c257509f2c9eb135c1df8a2b56207e0c9b98f46fe37502eccfba54a8525486a38cfb94f56e9f18efb166881354292cf33ec2de3c846f4c162050c901055b8b41d1202b1c65be475f3671e6bde85211729132e08a7b
+Entropy.14 = fc2fd0bf5fd34e2a04100ac16ad994b7538f90db4094e00bb477af5fc223da61
+Nonce.14 = 67f50628067bc401648926d7567711cb
+PersonalisationString.14 = 5f8cb19e3c86b179ffb8812db791e8bbe6b0caff958715dd9e3368a2d48f65d7
+Output.14 = f178a20d27725759c839e7fabb63bd101c3352f582524ff088ccaf6f0546ecbd3d5165f1e3cacbb49ede115b8f6c8db3aa9720692efda124138d29eac17637b84977384fb88e81289ed5ec960e6e98fdc71d03ef0bbc05ac7682acdc62888b49fdbb442080687f902b5a313ac88d364b13871b20f684cf1acbfa229fa203607a0a37b4e1685d13a508da9f48dcd83f26751a2284044f93e18b2a206a1887d77c4b76e821952b376f19fcf53d83f704e3ec3b5c3cb4c390b213d57dbe4852914b
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 3367cba0b8f854e4d070ab8c7aade94fa952211c24b0bd593a6ed039296fc8ee
+Nonce.0 = 522ff5bad7c6cc6b3b75c217fa02451d
+PersonalisationString.0 = 160987249e693f453e084592fd889fe4af2881c888922e7f655f9980a2e42b0c
+AdditionalInputA.0 = 0bb082e1aa49086fcfaf99626560610a296f56072ac2129761d4dc8e7fd16616
+AdditionalInputB.0 = f92c004f6ba57517dbc7fa0ff0f21b89fc429240407b2f9196773ffded8847a4
+Output.0 = 6b0a99904c5c172c56ad8bf9e3c08d28245ddc8934e3e494219c8387ab9b895d46f031e50a3b200892ae6a2fb0876fb60e57cc30989eae21da130a381fdefa9afd3ff78bf68a9ee8ac6c3619f2343532060ce7c7560f88da75170914f3b45913324fa8aa8ee85107ab61833325ca4aaa9caaa8f0e98b8c18da6739faacfb55dccc344191f94b58293fd1454cc8986588457dfb63f7e53206c09e07f423d06b6d77928d426426b318b34eba140b0a1e962b36871d9190a0fd9e7b39bd6684f52b
+Entropy.1 = b0b77fd8105556f7d2ba75ec05a1c572b5abbc8041b2e0c2f39fc2675227e653
+Nonce.1 = de9e21eba0b8761f3b39d338dea7e62b
+PersonalisationString.1 = cc6466b6ced020b7eec5899fdb4e9ba942cd54c0c41ebdbff769c39f235f350c
+AdditionalInputA.1 = 07e18f9f5172dbc2e135b97d57a7da9a2adb0401327976b516a79b8e5f21c19e
+AdditionalInputB.1 = 9c4dee11861ac4c4dfbdbedb9a8e150dd3c9ce3477c1ed31d4637a5b542e2734
+Output.1 = 0b844db9a742ddb41c755d872ae421331e7e38f960be8a1a9d3a294bac5868d9e60cfaa7591523c9a353d409f9c75cfcd197bf3d7626db8333e4ee15195e6bbbb92c18a2b89e6c2d1419c85c3abdcedfb995dc73d87c5005a842a7d8a8e3a9306690f289de2d4124be6a7992579642e707461d344b3e62cc7fcb8a38147ac55a8bf39c3a4483168e6e3a068fb8720755e9117354cf9f42be654508dbeb7c626678091be07ba9a69c375f76cf6a81658176615a7b08a3f759ca4d8aada9cc06b7
+Entropy.2 = 719e042c520c191cd66904eb45a6a31bc35823243a87d6aa694f46977556755d
+Nonce.2 = 0e7a1f3ccacf2d809e3b785b0cddb726
+PersonalisationString.2 = 9dec818051541fa05260656422e45801f216122f402d512b2bc073f9de847c2f
+AdditionalInputA.2 = 7faf1236fe5861e3eb3a60119e8b3c385ba0b758e56f5a833d0a2682c00b3eb0
+AdditionalInputB.2 = 7cdc6f00a150165b23ccb1dcb278e34ac915a21d5a7ffa4a7ef1fd19307edc97
+Output.2 = b616ca393de06d6a7265e179dff284e2cffe8d460f97eba744293723e96dc78f2ba4518aa6a8259eec8f119fcafdddd3ed220079a5a121e571a7339f9a4d91b114bb29ad409ec2d99cb7849a2c5ab1f3a6d12e8a59f994b8b050e1539f4f69258bb87aaea49a1b90d011fe3585ea2c337511f3848a54f8ce6ff0aba6d37ef1f80596024660408ee779866adb75b2502fd59342c1c8ad074216fe0e72489cdc0d0a1b6893b6b55831fd93ddf7c7f65da27e9c878313a6639e18553ba5d912a01a
+Entropy.3 = 53e1f9ac699031b33b16d55bb021e648ed8a28fdc3fa85322fd9502d2a84d518
+Nonce.3 = 59a039426593e41f396728576a8aca70
+PersonalisationString.3 = ce18a5c3d2c6b59ecd716fd5f265ea8b4da4289d7e01cb1df34f772e3caa4327
+AdditionalInputA.3 = 721894371f14a98d6d86ab96862784e291d1a9e1308ac4deed9bc6f86425a83f
+AdditionalInputB.3 = c118a1a94ef21cb55db1a4402ef742dd71ecdecff420c0f11560ebe5e7104669
+Output.3 = 6de0328425a72e2609f602e26b34324c11eee4fbf71f0e8a6b975c6f28828faabda27c45f905a769b199c16e64a98e82eed115980c2bc51eb3a61edf86e25e177e397c4665e65b3c3524010204c500cf3ce4a7280340a2ed4a57707c9c826c0f19aee2b3bf372d60cfec73b448bae063df55f8984d482e083a75c9b351d58a8e22c35409826902182926b645cf6a31243983ac9c7a274bebb44df8750ecb6574cce2484635b9dcb4a4e376a74c6ccc7260c283c148e9653144c6015ac05422e6
+Entropy.4 = 6438ac32e88b88649bfea19571d7ba060261ec79026b05b816677fdb67398bf0
+Nonce.4 = 344b242d90e019934088688b776485fb
+PersonalisationString.4 = c4f6966dda5fa6d4db09514926ba854e5a6c1d6b993c755730245bccadb5852b
+AdditionalInputA.4 = 6ff7bf01fbe5a8e2e37b1b3b5a48797db4b7437a018feff8c8a362b68e253d81
+AdditionalInputB.4 = 91e119ac3172d26dc7f6766a032c278c76a2115370e27da299ff4e4c9c1ed4ce
+Output.4 = 7f9238ed1578762e2c9eb70209f429e8b9d4ac874101aad11bdfea76fc9c10a89d63ddafc02bdad6da82478102fcde4dcb75c869350ce82863e4b0c6a97c58dd19ca44d3e1a681e6ff9860f210f01eb786559c2cb96b196e1f56bf44ae2e0c995a1f339ec64404b060966ab86b0153708e5420e76a77edde266f17bf8931c6213d7ce678243fc8e9384df82546b5f00e6bd473c0089d44eec8f6fbff0fdb373df4a15f0d5a6006d9bc8b3f266418a5424af2d515d79926da9ce92a0414f6557b
+Entropy.5 = 10b838c9514802f9755a3268e48bd5b5ae658f281b1a09b7f991b70f621ad90e
+Nonce.5 = e35a4496b07dfa0f60c3bc7f6482f86a
+PersonalisationString.5 = d960b9a4af9b5a3ae7f5ef89743248398886739da826f3f016cabf4f917c0226
+AdditionalInputA.5 = 0101a6605137fd0144e3a337f9abc2d345f474c429b4ad8ff02a831b61c7cab1
+AdditionalInputB.5 = 9828206bbf49e20be0c59d6dc15bf41eadb9207b65ba09bc5f8b3f91a26406a1
+Output.5 = aefdfd6ec7f193c144c87a01e28bea811e29c809fdbde5d3105f8f6b42bfdd20986d3fba93e3b93761edc708d434865c6e0734c09984727048d3a22f2a91233a8282f6cdfe02181ed422ada52efc9eb83a78185f1c20f70a0df37277d6908b9a8d25e1651bb7e75a6c79f3bb556a18217bb2e2f9bd820672698b4da00afbbd7f4d8539ad935b9292991cc95fc2cc0d8f5cd9c4e46dbf0866ca6f9172959afff2ebabe01554baf93ea228fe8915e3ced5908e11227a13be93e806490a0c54ee2d
+Entropy.6 = e11ec151187fa63eb594726f36639c151ff6838b48f594ac9a213cf44c8fb88e
+Nonce.6 = 85d98d8fdd7e1ec7aed2a0f388662467
+PersonalisationString.6 = 59298aa898ca587ef9c12c0210541dc84564f04cff157747a7638d64cfc859f5
+AdditionalInputA.6 = 8570c3a713f75e1441c6569c64dfff22c3d7cd4c5c0e3e20a52b6479e43d78c1
+AdditionalInputB.6 = c4befca8e4ca28bee4baa041c568b6d61afe88871ff31568684c319143c3e994
+Output.6 = 80f4357149ada605dae89e177da4150f1aeb8850887551140e2bfa43491f4ceb0b0521f44a6c6938ec9b18b903438b7b7ff260831f28cedfca51c67bac0ccd40036c1cfccebaabbe93194bb6dbfac7e496e1da870e1d42ece5edec338d8e27ec9a884edc5176448c453c0aedb4dc5de7a707dab7259a31f2eece410be6e4caafec619c445c743702d14a6935b472ea7033e5b11237c819e9c6543e0816fc662f79d84e2cf47a2d6cf6dad74326da745ebd0a51800e9a6a47d3423013859360ff
+Entropy.7 = 597dcf0f4f85dc1bb4b3cafb22de583cac96ca661e4f06d8784f695b965de45e
+Nonce.7 = 0b72e52811d44a40746bcd804e1ace8d
+PersonalisationString.7 = 36c78d2c4839a1fcba7364a1a6baaa89c493417b021d576682bdbf1a02b69b56
+AdditionalInputA.7 = ea94293cbc27dab524c070e30ec4eb0be646f09feb77ecd2bc702d518420e1ad
+AdditionalInputB.7 = 7f64490bb0ae24c93b901106362dc086a494c3f11f9d29bdc48d407a0ded757f
+Output.7 = b7c6d10f36ef924886827954850cc292ab2979323ff1f7cedb3b49222355e2404062db45a739b264bf94b85f15bff29adbb17bb4ea24bc3eb3dda163dee4a267dff1168aa30cd288159636c15c783941fd2e81699a8440469add2eb492de6a5fad7654b111328d0e9bf320a067873f948312bf69a532471aa0cc7335cb313bf49226aabc47b27f5dab9fdbd33b52ba3b7917dff009665a5b190eddd376312970e583d38f287fcfb6e535a745beb9747f6752c722b17a464097cddd0c17d7fb34
+Entropy.8 = a84fb1a153b2fb6dfd6c8c01050028ed6ffcfda7438fa463dfcb6088424031ee
+Nonce.8 = e8ab86143a21f103d2379ad2afdabaa7
+PersonalisationString.8 = a061161d44625d4bc00c369eac66fd3690c7c6468c3584ec272db8e54fb09229
+AdditionalInputA.8 = b0f2fc219591ad6f67d3c43e04de22740fd63ce367a2685b1c591574b53b1811
+AdditionalInputB.8 = 08c623db0ca9d92d493d306aa9c3c952ce2e15540c8921e9747aa3a36e5548f3
+Output.8 = df8dd6d322da1b88432dce878f10445f86efc23afb3c5200b392f5175f9d474cfd38005da15a2f701fe6fc8a7c9d69c9e3aa08e59e6c9fa414708bf0d40bad1917f1352915669f1a2ed8fd1af2c9edc75ddb66b568a8b8b44acefdcdad531832f452bc7e38259f7ad8f7dff1121ad0aaf97921c6b5dd8281ff21066513dd82718e8643fcca8ac51e3afd643d1f964a32bef160e44696de970022000a56d7154c0243dfc4c93ae79e17e3ddde4d885414d38def6dc16a4effe71167b3c1e4c1a5
+Entropy.9 = a9b7db709f62ea96c92bcf593e08a67eef7123657aa60ee0db4fcb8ca35b01d8
+Nonce.9 = 3a6b2e969eb854705fbe64c40566346d
+PersonalisationString.9 = 1ff077215892c088e02f40e314b6cb8c3c1bce0d221acb447bdb7a27cde438f0
+AdditionalInputA.9 = 6aaac8aa93b3e7e18ddea7f7137a2b150e68007c4f7e49a71af05f9a11bb46da
+AdditionalInputB.9 = a31e16dc94023a66d5cac7abbd99e12910b348cd86a4534ba89b6cbcfdeef9e2
+Output.9 = fefa6160da2ef6f934afd80507c05d4630addcdb325431e17a34b77262b6cd0614968078c3c757ac8c3ac7a013bee5f88cefd5820f02fbede8043a75695c4e3c9e087f32ae8e3cb0335e97f8983f4fb82d19d8b6372e0230401fd4e4a07712139a8ce1c57e72d8a734ee272120102a033dc5f5f656a034aed999e4cb2f4f592e1d7f2e4d4583937d7caf634b6e0507b1b4ad10e0ba16d44c1ccdbcee8784a6b65f58dd4ed768e9ce42e1dfc7d9bfd9d1528099f22e221d95695616320216d2be
+Entropy.10 = f386e0016584a36ba37014c68095ffe800d40e7b670721112a61624a791bdbce
+Nonce.10 = a967ec6cb6fe0aeb03472482a937d01e
+PersonalisationString.10 = 0cd17ac981337a77ee1a476e747380a6702d8d5cdc9a4bf3ac433cf19dcca887
+AdditionalInputA.10 = 001a0f2652ad16e0bf515facc33e440906b7866f13310377ce76b7158fa2cde4
+AdditionalInputB.10 = a06a08311bfa08be609dee9ce0cef830bd7ad917af6b825be35256b0caef5f77
+Output.10 = 50f6d93f2909fabdd9a4d7ad2c1eba8d970cef68dd00b3ae537d31476bfbf4fe046912465c546a8bf10da18dadd9835a10da49560742d0425d87c61a2d6133e857c70d11d0f54152ba91d9462a2c60dc79f65927e56dd7f9ad77dcde97704dedf253189e066deee70ba4d938e9c31f68dbe5b5bafd4c00ce72f78ffb714f6a9490507a09102fb32cd8aa40a4869324142f1cf5b01661b8bfe442111767cddb7d9e601fb1df7f510f2820930776253805646948932e72bc2a4e69fea690d2977e
+Entropy.11 = a6379c0799535e100d1092c675df9ec321b8e5490bd9410c3f7449a3547615d9
+Nonce.11 = 5d32a5226624a29329471de262112b93
+PersonalisationString.11 = b7221d9819e0711d77c885aef71cc4204c730f441116c3893ceafa8e72d83b72
+AdditionalInputA.11 = b222c369619ef10ddb6d5530770416408d22901b13c3fa3c4b381e6b05e79862
+AdditionalInputB.11 = 85458492e9ea23e9fa7834874d032127f9c86f0e7784d7eddf9d6adcb9cf88b4
+Output.11 = 0509dfd32fe93c7c26a8550a79e6bd294cbdfd12e5c7c1691be541cf5d86419392955480b23d27ca6270cd7576009dcd3a229a6e3c4af5e48733e71b741a5d9eb1e25cc94558115d27e35ef04157d6a6bf840dec1114cbe6654eb3d08903fc0ef09636f3254b2a58c7eea8723eace3b13c5ce9b0432741b33efec2ae2fc78dc64d2a6937ee2f10fb4433af43f5c7356c5615cfcb4cc0e8fee95be59c485fc170bd1c6ad9aa15e2d93ac3f07e41c47ca3d490d5524a806dd10409d416811c455e
+Entropy.12 = 5611226d073719a6af19c98cee4933de42bf513682df50ae94fa906f1da49327
+Nonce.12 = 2efa79466faab2214ba0725d1bb37191
+PersonalisationString.12 = 42277298e322e8d9e7959a29ad4d5adc0e79c5ba85b17f29e1370acc00228bcf
+AdditionalInputA.12 = 263fa2502697af15129db52814752693e8461d327bbac88caa3b583862bdd845
+AdditionalInputB.12 = 0c66e1b8ca1bcfb909a104fb582c8c9ba85db1792b98799a3e6292c95dedf205
+Output.12 = 16973645325b777c6da555e9654b58c6555ed0c6f9054da814f53f363ec9c3d28130a2e558d1352ab26e3b205f20d5f77d7f3efc93a355d346eb4e192650c905947cf6ae166b6fe203ef41a366909a7e57a131109e4a29f9229a8004a8aa55d1c9a20236a4ea95bb8042bd0d15988963029f5ffbd3b5bb2ce433e26582c0ef89a9b7ac13df7051fdf1bf4b3031aad7fc8214cc233b7d4000596cf47a2e986a5d72c2ed3e005a7fc0e70ce77b93891bcabba208845fc9f9cd45dbb5e1a79a6cdd
+Entropy.13 = 2d69eab46d8b77c84aaca91169774793c3e46f508a4b6445d9549eb531ec3a71
+Nonce.13 = 10dd5a1a07ffb2d71214626cc5182cd9
+PersonalisationString.13 = d2f3e69da5dba1e14a218cd4030d8994bd10a96539e67e6968595bccc649e310
+AdditionalInputA.13 = 3ec61275d4b1ec9366aec719fe46dfc075d860e61f75340dc4cc4f790a9c5b0f
+AdditionalInputB.13 = 83e7f1447c53d1520d5fc9b855b61aa8d4078e85b78f8e088b5a6de026f2fc86
+Output.13 = cadd0cff161e9f787dc90d2dd1a5d3bbae6a771edd657209dd67f61d618ffee286c031247ff3d921fb24b16f3b4091bd0e1246745eefd1f79bb06ada715774bb79ef0379f37c868ddf768b85a279531badc51f9114c68a1e6c89a54dacd0b45a61ddcdb58d79ac9a5930f413a463b6bf12d52866a4bde5460bef6707f5f6b5f1e2f74e1363d93c6cdad99773b2bb2ba8a30c208112a67f7d0c0f1ccd09e554525b63d3bd16c3527ec07cfe30db3237425f899143ab7053b6d6f962be1212619b
+Entropy.14 = 161bef119af736fd23e188a227aae76edd0fe654f9f583d75d77a3764bb8479f
+Nonce.14 = c6e14c68309ca84788ad9f15d5f0a90a
+PersonalisationString.14 = 8b2039a6d4b909906a8794df5995fe9ea977c5a1a30982015aadf937c863cfac
+AdditionalInputA.14 = 23e4e6b0e0c1b28a6f9731f8b09960ce7adac17527b3bbaca7c811daea4b1cf5
+AdditionalInputB.14 = dc7fac6aeded9e17b5bb5e2bcad9424d42dc07e809da59d52caecba6e75ca457
+Output.14 = 5a42b35cf1b72d2520d92719a94ef1a7ca5b6d6c7eef2de25c8ea44c1fc3a9a5ff2128f47bbe58084a0c7a3fc790626eff5666b4c1e68fb2f53de3370b29c398d5067b255f5f7f29fdb0f8bc256ee3afbe78a33981626837c55f981e56eb2e1bdd89ca081e48f6da7ce6576fbd37dbd57a3f41cf410cb375614af239f2e10218e777fb97a55d9cc73243882b8d8d2a2c812fbdeaaed90b5bd71a274b4b171cd7e661912c9b3de1714a3fe4931d8fc7cb1c9f64f4e37d4e5dbc31602d2f8699e0
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 6b50a7d8f8a55d7a3df8bb40bcc3b722d8708de67fda010b03c4c84d72096f8c
+Nonce.0 = 3ec649cc6256d9fa31db7a2904aaf025
+Output.0 = 95b7f17e9802d3577392c6a9c08083b67dd1292265b5f42d237f1c55bb9b10bfcfd82c77a378b8266a0099143b3c2d64611eeeb69acdc055957c139e8b190c7a06955f2c797c2778de940396a501f40e91396acf8d7e45ebdbb53bbf8c975230d2f0ff9106c76119ae498e7fbc03d90f8e4c51627aed5c8d4263d5d2b978873a0de596ee6dc7f7c29e37eee8b34c90dd1cf6a9ddb22b4cbd086b14b35de93da2d5cb1806698cbd7bbb67bfe3d31fd2d1dbd2a1e058a3eb99d7e51f1a938eed5e1c1de23a6b4345d3191409f92f39b3670d8dbfb635d8e6a36932d81033d1448d63b403ddf88e121b6e819ac381226c1321e4b08644f6727c368c5a9f7a4b3ee2
+Entropy.1 = 22342fe603f975ea26c7ed7ddddb38b504e43c689176016c8a56b7af47b8459a
+Nonce.1 = ea8633f25650d21dcc79734a9ad41d3f
+Output.1 = 0aaf02a611b4d461e493e3532ce8ab0155811d3f0676fda82a64daf16c1f8ed1730887ce9f9b2ba38495e5360a44cc3efc4ca8c83f8a64e6e0f1922123505ebfa9d30412e5c4884aa1e067efafbbf8a560574646fea79bb89399477cad3a142957789fa78972d5680d3165cf2cb6eaa2cbd4201c76bd6263840cc745a43f647d8f3b6d674fc654ee71d8e6196cbfb341dcd0eb98bf126756d67a6a42afb8d24d3edbaf288af6ac09503f4d4794b4872b36a72c3387024e3647447fa767136ca3dc247cfd6ca22b169d3dac9808d85cc193e9bbf3658b6b4f6ab39445a2b127f46a1a8aee1cc19b44fa85848a7814aedde84ec1b1cff69bcb6107c7647b3a90ae
+Entropy.2 = b29e584555b8f7721368a042bd6e173e250126ea5b848544c63e8588c45f7456
+Nonce.2 = 58035791f0e93f5ee3b5087a13004e16
+Output.2 = 5afb6fd3253b8cf132fcb6f2cac2f5ab9470f9123d861353aac795569eebbee38487c0888bd9df77a45cc9fa8c584d8e534f2cdff13fed96f3caf377feabb346cc0f27733f68a68a92f8c0686d469b2453df75b7b2b75b5cb4153d0f5997890c986ade6652eaf1b12ce6ba9ae642c5646ec40791e74ebabd4e122d5113f34a97942fbc9a968eade54d2a3017335537c61118a855598b866a4017fd683da336eede2c2c435aecd838b01b166ba61cf93f6ef0a5930f1b54fba1237f92bccbaa2a30ce44fbcb9d74a9d031c02d63d374b20d3c1dcfe9ff6a554afdb81215ecc1032d8c8ed64af0cbbfd82af5fbc4da62328ecb2f559368daaf9b8c1bdea2eb2b0c
+Entropy.3 = 0ba19a623ce2ebff98f6a8c5868c89aaf061fb664ac01b59c8ee649691a99fed
+Nonce.3 = 71219f471964d6d88aa3576910b03f44
+Output.3 = 8f05c6dd8cded901daaf2078ea4b03e890251f298847a81bd826b61a3613c29671bf720cdf1262f0f3d2d7f502e527c1b0c7147c93d6bae619a64fb2ca7d9d8b0267781c9bac6755a25fed3e729c7baf3e8a477c329d56a1332874e4be626ff05f00df8f75dfeb2d06a391bd75c4e1ca89b858a214464d4d1f24a9e379c563f48fdcc93d92f0be5c115c7a10551a1ba1da08e519f4a4c815c3cad1eb21ffffc5c8fabe690b97e4077fffbe87b36d0e09da0fad2b55e0f812bf67714909cffabfa97e083dce8180323caf68ff9eb20368fe444f00d1d711ab683ec35235e31c82d56b523437a0ab90154b9f2d6a8695d9620f4c41ab5be48b5a6118a242ec785b
+Entropy.4 = 01ad79f5be89f5191da48a44d56ca5071e99f15a3714eb92174749ac0da9c53e
+Nonce.4 = 774995740ad00048ee2996ed7e1c603a
+Output.4 = d228d36033738b3b82f2840b46b5f0fe1bb06cb204ab3b68fa80725966f3674490ec6748e48db9a00285d63a29ef905cae5fb1552409f89fd6541b307e4b1231d46556af591023474bc2c07c821c745ffd7c24d311c4ff6bb5d346e15e4b617faef14a51bc3820270fd010d064daac2257df088bc65242656e7e8645989c0884b2dfcb6d725073150ae0c3d00c89b118d0dd1a424919aa8e9ba6e0aa3a8c4f13d2dca4f339b220356dd27f9df153e9c2ab86c03c1075c54583c95b64f42eb2b5b4f8797964d10f5f5d4b01899d81c53b86e11b6633ea2265aa2bb4b7a231b68eab232fd222a73c109530d1ec5649c2e0f596f5e37f340f84be9330d6979c2655
+Entropy.5 = aa82ceec0eb83402fb324471c806b95a4638d983dc2a9760f1147b6caad6cb3e
+Nonce.5 = 0de90f870d610034803f19ac72ee076e
+Output.5 = 69176ef1b1ca271ebbc18e438abdb58da73e8973da0d8f09db50394e648aeab12f236261e29bc95e39a230abeb63b2baede8d5760f5935103034d2d3163ef70cf86ddb1eeb51b0785b6c4d0790b8a9aff1a93965ff2ec0619d78f2986078a7dbed21420b1c768e59b4f65017f392aa7f72b47c7129f7ea55717be1f924766643aabad143ac153525a7f8196bd689d5543b9c1f5b6fdc50c9ced379cb6e979fb68c162abc89681b6255baebd7e125a5bd0da884454d225e621d4c0ef9f68d48eecff271e7e1845ed0a32b3998d114c6f57a53d1230e9976472fa0c51a4d77329d833f9061fc0301626eb11dc9c701358576e9a6a104bd86f222e6a0f9d0b4597a
+Entropy.6 = a6ea179c5b95eb59011f0975ce9752fcab7fd245e16c9ed5a211c822162d2ee6
+Nonce.6 = 54a833261bb18d895d11f517a6541c28
+Output.6 = 79292869d53048446d1ab4c5e4ad360aa4fbaad9b11c084a05884527393f877edb6565717afe88be6ff1a5562d2d94f5932b65fb3412891d47985b8499947675278e4a2980c5c2bf45f41c3d9c411927530a599f8592e83cd03b2baf47a60d2bb62e1c9b176a82f62bba15413464a338bb90e8e3524a8cca13395aa81e19c82d58e26d8ecf9099b9d1e879ba60dcac907bc74f8669f9fca4db4d7272aa57ff77c376e89bb696f3db16ae1b22a89a072f8909678a2e2ce370a33c53d65ecba52f6312d6f66d3c000b3ee6d58c8896b207e707933f4ef764330cf5d9a8a6ee6271f034c78bf9f7bfc9135590ba44f61fe89db440eb6d4aba5fe553a628ea466ee6
+Entropy.7 = 6fbddfa9c6d79513644acf22143108ef8808387055f7eb94538ac7ee2dbff197
+Nonce.7 = 7612a515530deefe1696f0838166820f
+Output.7 = 4741b139d81ec6aa6c56b365f4505df51651558a43236f0e05daeb36a0f2520172979402f7ef9e88d729cec885093b6687ff42918f162c97acd02968601af0c58f0be3f0c744741caf9e8096625b11441bd28c48d3b5deed47afb5cc57c7e2b4bd6c9fa400d5637b4cafdf406370c519a5ea1de8c38cbe40473dba8ed7d50d6524e37be7a0287dc21c4cf1f5d3a0b2f03ae2c349b76d3c2d3921307c15839247ebbda381b97976a15f7175cb6aa3b65324e7086f2affda903cc3ee3584a9c4807ac3555c1bcdf8f28a0daad1a55267baecd7da76837b455556fe2a03dc4f8f7dffd69da0164812e55a455418d34868372f5e0f292dfc08abee2e4a458f9c539e
+Entropy.8 = e11dbb2fdf96b61b60171eac2ddd71731457a61d750325413eaf0d631565ae27
+Nonce.8 = 48bef2b3617ada8a3bab0851ea3b2491
+Output.8 = 9b31fed9016a5de5d22186e88362a951e00f33eac66148d84276ce22021f71b5af99bc7439b610d347a6b1414c4c50a911f4e14a8997600686289320568996d26170f10454995d6f81ac4baecdbbf7411e04a767ac11416dda24db4e55be7c1d10d4da23d7b35c9226fb2d9c146b928d2339275433aff0b5527b29036c12173befcaacd5e9d7118d1dbd994c96b6602e86b537fd00b3191fd1abac4ccc4f6ddae7c59abe0cb3602930d9eb6294a9e053a415c1bc62a6b5f2aad89fa6c3cf4ca03d9cd150c2f252154bc46f524e8ecf90e819d97822e698a487bb92d7780532261cae81fc309679231ba6bdcc1087e71159169b41534b9af31f566a92a14cb492
+Entropy.9 = 31113275ab562f8b1704e21b7905df530d5b0f81f044844a0db06071587510b4
+Nonce.9 = 35fc721e174e3b372c304f0b3c0b1a42
+Output.9 = 967c10c259c5ed4d98a91f16454c452deafecd63f685c3bef917e55acb6dd955b690f730f968c5a888650c2562bd23c1d5ba6598e11d9389afe12d6178cc8a2c77447f8acdedd028c01f6ee81022729ecb88b837e54f27babfb785023a6e596ebee6df3caf1e8975cf040def89e742b907c3e51ba0afc36ce3e7fd85b25a5550f4ab01e1db76419f8a732a6cf8af141b8d9923607ba185be6ef60908667ae0ee0b7d293012fe52dbe6550f3eee6867a8a37f88aedd2da962dfaefdc5d5cac5e8e7456f709848bbdd508cc5f5cd706e7b5ae9af57fd994d3f2e61bca98dc3069967e56f1f30ba0cce2bbf390b1f02dedfceba56158009cbc23c2c4e9e646bdbc9
+Entropy.10 = 027bd3dbfada2497ad20782a28101ea5c9390f7371cd3245fa537ef932920bde
+Nonce.10 = cbcd6d23d8ab4b66a83545536930f557
+Output.10 = 290f47f88b75d2ee16030bd9836a5ffdee9eed568fdf300ae7f99ea28c9c4751fa46c1ba5d367f1c6e334f10f61cbe3ae81268826b6025396e73f6a3de2c835a15f57ac8e1992f1a46ef6aa9e96d77b37aaa24ebaafb3f1d211d2204562af188492c537b314dbd7a8c47ccecf1b2b692aabcd53040d19c329fc1e856057dcec0fba97beade1beaf9f253280e519d05f98bbd31e87170a7e186d824966710620ff1b3b66155ee34b42f4e4a97f12248c8a1fa1fada70f95f7d41348caa00ad2c56162909a1092b4e69adfcde429a02109b4dfc91aed1174efc16e79c72c98906747aa18f0ea877bd7ecbee871987e1f6aa8192b3e63ce4dc14f5e596492c74419
+Entropy.11 = 307480b232f51a42fa3a342eb8af69657ac0ebd1552585aaec8b3e88b0165263
+Nonce.11 = 71cd330614b1e942393c58e3bb65c2a2
+Output.11 = 545c5d384388091030791a107c52f615cfbcad977123c426de51e990617744be456952bbdec541f03fc5ba1ce745d2545108089492a8154ea700f71ff6b5dce1ff718368bb28e3c4df7c904dc9d11a10732675bf3aba0c1119ee56c3ad2ae3e67b75748ef0e4ba5c9102f0c7fcc83afe78ca19afa8446aa41172e1e2978923d14d7027f80eb1b325b99bf4fe3318b8f5ce41ff7687f075902a0ac5fb672b6bf05a90ac5dbf15832cdeaac4c562b7dcc58dacc40c5b859cf47c9ba74034cb18fb589babc40c2b4cf62eaebdf0c0f6143d6a6271f4b0637f15ffa18943c1c97b14061de36fa52f1237b0ee868ffe8615d9084437948ca0aed845c2b7e9d7700bdb
+Entropy.12 = 285278848f83eb2976183e15c93c2f8b9f99b35cc99f213bba0c7d772499cdb4
+Nonce.12 = f5278af81d428e5f86eb8c8bb430c468
+Output.12 = ff6eeb98c17f76b293dfe58b2f3ecd9cacfdedc9656459fbdefe21c528332ca2622caa102a24bce8c5a1d86e4c2c186de72519c6e0249cc153ac57a196a3eba5e38c7f1a5251dda339554460b0edd7e6688ec4b2bac7615623a85b2dd980f51c50182058ef28daa38ca819e7f6bcdea908b899934bf9717ffddb85e0a992787e30a920d6c1d01d5ffa6af5ac0b4cc9be59f3537352d92552903971888b0eb32100dd8e4a3192fc180ac0c49f274c8f52061fe42d2f3db5135cd5771cf20cb0abe50512559f7a775072fda463c82b51bbcd79e1e518860fed4c463a7ddc3fc0f5c29e8f82ef58001a1afbd73c404e7f93a5266c26cc8dec0445482e6d24d2f340
+Entropy.13 = 7badb80300f7b88022a593cabc5f857877e4544cd8aeefcb86b5d35e524e6e9f
+Nonce.13 = d5374c5187e21547541d27c67722f497
+Output.13 = b1791685a44eabdd6f1f65e428e2b943f0e5f1a9f926be96d8b30c089971dec6c5ee3431ea654fb5645d2e8f54b6dcee3d829d6f27b11ddc98d4337e1420d85ae6f82971a5fd6e4bede7d2a211da0a88e7f95e30347aa8f824dd7a7bb08f19bccf1f3b2cfccb37022344aca75900c868da52d251b17d9160755ba26ac5029e4706cba96c9c30199635116916c508095b4f55e6612386eb3740dbebedb085d1d513cee5eeff03d8e2da492d2c5a5016fd6af571013a59c4895769530cbdf820c88618b59153cd839049d0a587af9f2ac5f96bc6c0b3bad00bfc83e164d6d54e86585cc3c292d2e588b4217739107eeea6150efa2aee98565451eeddcc80027e60
+Entropy.14 = 471746177fa3ebbc1f1e06fa42d61d5d491abc82eb7d66e749b87d562a7eff34
+Nonce.14 = 42f8a1ee9b09940e9e1dc64f51a78b4b
+Output.14 = 238c9889284139945e657d2c4312ee3ca2013de69be10bdc8b90d54867889f2c15c6cc933913457d4f5a00bd52b0216d90c56bcb341dde7496218861b083f80d8c933627e19b7bd8b73d6dda1bb0b2b0f1f90e2b453cd063938cec3a08f34e5581c1322329d87709e552a97e8a8c8e8e598a5c5cd6623ad1eb9f7ddd12739b1d157b1020cb8cef19402938d31b74e490c0ce75a9f57a17476df1cffa55de73bb8151071edf396c3b9e4607b07c7e2b45c249f5a8194cca1e97af78be47cec0ab0096cf588f3d4432393a8f5423a165d585e2e5f98fe47510d9415418aba28aab1193261036214c35d8ba04650b4539be6b9f7377e3c75ed236d0e69cce004906
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 9c96a34f68689b8aa8d9c1f6cd0fa7c6f96071caf1bf5556f45bdbf48c6cf0c6
+Nonce.0 = 885c2539046afb1401eb7a5c84dbd9c2
+AdditionalInputA.0 = cb61c4f75c01b578aa233a0bae4881c0a11527c22fe7b34fb6ae62eebcfe6085
+AdditionalInputB.0 = c066fd2eb8e4aea2e7145eda0cfc8bef5eedcc367b1cb4de7eb2c2759fa75bf7
+Output.0 = 782c208ed58044e78b5bbbd8772a3caf25b47d36afeb0d3493c43e01cc66a0ca2faced2ab186bc46825d989cf8ee7c95f8c0b0d2b76e6c8590e72834d4c52445aeceeb7bf5f5d9ac44a12cbd3fa7f4462f856452dc4a929182d2388aa7635b9698a912585df7f560adc5080d53b82bbd7e9e480b00d1da5bb2d480cae2ba8c67d4bf3bfd146a91d6aab39faae1600af2ce3204cabf4c1caee4cfd5e6f8db1902033f7f8d33bc6e0e5d32a320ba735d091f30867b7cb7880c2e3ce6aada79664191df360d35fe9ae7babca41485b06ab49dff528782fbe6f2b0e74996e9ce9272d1ef392be5c17cc62c74be504e6a8731dd9548b0db27e0b7db4886f537883623
+Entropy.1 = 52ebc799bc7b658e84fb2f6760d403821c2350a4fd751d407c456532b16b0987
+Nonce.1 = fc734458c02c5317cd2e38ec1e64f37f
+AdditionalInputA.1 = 50b0b7659b736a300d9938433ee8bcffccaee9761dada3462207ec11d00572cb
+AdditionalInputB.1 = 711f06be74cbc8de412a7addb0855211fc0c20d2f955c5cd0d70c2834b0c1f42
+Output.1 = bd45e9f0591371a72c8d338b1f71894e7a3d9577a7b07b1a065942aa59455a0e41afc58e657debf2a8be99c2b2d3fa6f3f9852a5100cbb687811384d995539787a4dc49830f1bc7184d58f1b9f300b19733de1b6287b6a7a445dcea1f7d4fdea838ab2039ac2bd62813e4b65618af25555b18c8fb9d591e51e902e7b658eec9fe4870052b1b07fd1fcc17d5bd18e09576993ba08dee87600af7134b6facf1e53a0cd5ea027b1eaf7bba679ec4b790d7dcb875b24414a8ab647ec759e3128fe31d8e115241189d5399b6349dadefb24597e14f75e58397578a8d2b409588a630656543ba6984ce8083a7bdf0c74661baa0807d644efafb3fbeb3a98d1c09d70a7
+Entropy.2 = 3d0a38151851da5410908381af03801f73e07426d149f1822d6904b6d5fcc839
+Nonce.2 = 3603d5a8171a2e1a0adc81cf82044ac0
+AdditionalInputA.2 = 6933feb91c17f882725f5f79eceb855d34bf82e01eb9079194b53007bf3408d7
+AdditionalInputB.2 = 6c1701825040b577c9f91247a8d797ae5d3fae28e07a6540a76c92623acabff1
+Output.2 = 7e4cacf28872c3c322a5f614b097d766b806762e652e0fbb697112972f0cb626a9ac2e847479519b92116f7c4dc8e1884cc4a37e8041f5e18a906c97e7c239faccfb8b41d0f6b2fb196b42991cc8b4f4c35e45963182196d7f51eaf08f7a69bbe43227e3768c13527d83aea146d0e1f77d5d1c2217cd6383f7bc2bc574078d9a20754857027885eb65b63b8d51f430f7b431314b96f7eee3966474247ce91a95b2be40b2f08dae914df6a65e01027ad9240ff416479a997135bc1762b3b30b80f7d36ec82c1c0451ead1d8773dd93324141a396290a4dc5c684db96a375fd82c2de9989e4bb2d710e63c4533e62dc673f50358b41b07afb63885447feb1660ec
+Entropy.3 = 44f4d2d9b078320725d5ab9d41648ad8b52f76e1f1160ae6a4956ae7d4459ed9
+Nonce.3 = 29dc8dc0acf8891a6b9bb651a39dd909
+AdditionalInputA.3 = 0cb4e347fee636a60e1fe51fc0d8f1974c4455445ad0a0f009a386b2f23f184f
+AdditionalInputB.3 = f37028b7c6f5fb7dbce83e22b6ba38a1150f239ca495285cc14d8f68978b3f8a
+Output.3 = ab66f5b9283b3a6068b6d8b3f3286951221aa8c860a1995068ce2d0126b8576da410874b8b41fdf9e75171eedee86c9b58cfc8dbbfc4a1df6acb3532b6098439616a04a010e9151a9c41c67e5670705c00024d0509917da47d1d36e4c6a3fe64d62c49e90e4f2b4ddc7f691180bcb4824546351dc796d75a19aba6538b26ea99f3d681965935da7ac5205824503aa3d19ee0419a1046cf9f527621a748a5d5c3860227d7789346cc79a777a2b82917a7d100c8ef5afbc43620bca5d509f35dcaa7eb245534b214a478b73e2743c4e8818059a9e5ee72acdcc2ce8dd44180fd34bed41aaa587bdf7cd093c0e2e3d08793593e8fe2c291386c52ea773240329922
+Entropy.4 = 17051ddf920da86a7f9c4ed3ee7a346b3b58ce19dfa2364ca6fd5a9021931f05
+Nonce.4 = aec5cdd0d86d6345d06623465b6c7a21
+AdditionalInputA.4 = b5320cbcd949fc9534c173f36028c5ea68f921e348674472c6511df59a9cf045
+AdditionalInputB.4 = 93bf72dc74518bee957273b296d756b26a699e397262f53c071475d971a73624
+Output.4 = 03d2f3326a467f5c09a51ef4999b9de9631138a6b68f6f4d95bf49f7ac898c3658904764c2e2bb9146369b73f6e83706b83e59e53b7af21c53652a5c3c0cf0ee4fae56ae223d431895618a09157144a653f4c6febef566766b19fc9042292762f0324ff89cbc22bdac0ada6efa2809f8b1cc5733a42a25386a7f37bb90c1397b882fa7c17ab64f65a6b9ec063ca5ee8c1b82cc520e737e600d3b41cba59f5d5a6f5eaf6d42adffd2e84620d3276fe27159b6e01a47400288695c55073f7d6f27c314f539a4982129e3afa28a33ba0b81bf9c9a9877150ef19696b10d898d888b618fb5f7a4d9709acca57b23e355c140deab44faa97cf1267f29fac85f9dbc21
+Entropy.5 = 12d1f373ee85a3de0fd9e089177bdd6cfe4a9e96d4b455914adba312c62cdbcb
+Nonce.5 = e00da64eefd872ffa483c3ae184c6af1
+AdditionalInputA.5 = 05ba1f27821a05b87d5fa56ad1ddd330b943f62f6dd4f9a749e074db5489d2c5
+AdditionalInputB.5 = a0501b855a9acc67eb9f65cd4c5bedbe47ce7b967940798255ce86dbb9d4fd3e
+Output.5 = b8744ae9f2422e43746466c68ca9d9f43d32a1fd497defeca329697b4aece6f93609564b9afadf3605832c8705dab5eb8ff02a3006b2a7a91609aabaa4807b252a1a7e641c438bd5963b3307ac65231399edc841c3c43cfc23de8a180ca337500ea402fed377d10cc451ca85a6dd2a5d4354d0edf6191668b9ee8e2e9638b47e984fbfe0fc9e46d21e57e3029a2cefb739b0dab91a450e51aecb8c3eea5e9e0a7f699ada48406df6180d8fe1f03b0be0611bb39d91fb927547270327da75a0cf66230e35e27a1f382cc29ff283369cf5a0318ec3b5c71335f5823875b241415b40458b57149e98e2f47fdc948c08316b308c0c137057c6101cb0de490723137f
+Entropy.6 = 820cfc585965e1c605005de29785b2cdc0c4e19b738a70f353ff4e7f9774a9dc
+Nonce.6 = c8d6b9fad0a5a6da250678fbd536e254
+AdditionalInputA.6 = 0fecd9bdc519db21f071f98d36a4050d3a432919f4db8e1136e38e0018e7adbd
+AdditionalInputB.6 = 57411adc70853aa1915ae42708f670fb45eb413a5d1c663abb797e0342b42242
+Output.6 = e71c2ad46f888acf5620faa02c9f37c03dc841966794f4335e378e4872766cb33de96865e7c32fdcbb2cc2c940f44cefa623e1d3a68be8d10d125afa52ba45e27fe463dc32b92ad81b9e6f5945347b53df65dff542f575a58447720f274b25a6596c3e3833a297ad4f31a0ea1032de024f1ca426d2fd410700294978ce87f1b3d8f462f31ffc365b305a93750682ef058692e5131decf7ce540823d516794be16273c375b4afec3b9516fe7b6ddf4246d371de9ca6ae8c9c811818a5f98471647d24cdc074d46f0cd93c1bf01206d8a4a56adff5f801f25bc1ac85125485be9130e48e4aec90bf98f716e77685faed8c3d4ef2fc9ad7ac3bbe7a576c89c82291
+Entropy.7 = 49a8859f1a16f4d17ca84648eb560051b7c4b3afb10d3537bfd58be0e1fb6b50
+Nonce.7 = 107510f7e7c13fb1381c968376740708
+AdditionalInputA.7 = 5ee96d4b5bb691b8cbcc233263bb9968584a9af81b017fedd76c29a9ea140d84
+AdditionalInputB.7 = 5deecad0bb4252453db4d5dd0ba8d4c4b03a6bd3cc627bcbd77eb3a6b25d1732
+Output.7 = 0f901a7323136deeaf06c9788a1489988795f0ffd00f6a636847e6f71fab27a8087e730057acf24cb407c768b4a736882c427e4c8c15e69a8483f6af89d9b7007ce17fb8481f31f0fed3c88e41d8fac36aeade3e8c6831171b2977d0109977a002c04012f62af906c1495a09f1ad63852a05a77a54f0ff1ce35f72faa5b5ebbd366fb07646fa69eb153ccff92a7a9003f953e3707b2af97b6d4b7f3a7fe6d809c4c249478a0151c3aaf3783587fdd8117b28026867452abc8ac5c2c81ff6b5733111c316a6fdc75bc3db89066a5d527c2ef6429b7f6d35a9813dd78a2fe0869459bed16f2bc29d4d0c4f7b9af5b1a2a2a0edd79d2feebe92bfe5ca46500f7315
+Entropy.8 = fcc5a24d87a92eae2414e981da7a979379945782e177c558febcbf8e10aa37b1
+Nonce.8 = 1a0031e5951a961ddbd97505c33a20c1
+AdditionalInputA.8 = 35c92dcef12f587a2a40b5694e9bcadc21add32bb20802555167f154e7174b7b
+AdditionalInputB.8 = 8a88955f8b72bfe8ce5a89a61a58783a0973a143cf89b3a1d6ed779dd2919e01
+Output.8 = b98e6289d3f4ab10f6492e018a4eb3596eacc4bdaa68d2befc821594794390aa4ec4c59baa7560fa069f1ee527b5d774a6e0f3f009b710bf3471302826ff1fbff226291ac779a601c9fde3068ab31e03ca9894ede2ffcd724c3df84c78c83e6d0943815ee1ba44596c6fd06de3c8c615ee5055c6e4b7a9aed1710243d71c7027e45a04f139036bed07ec527bf6df39688d380aa2eaba8828515ff88e9c1ddf81e05185a654a5a44882a721af79b2f6903ad4a7f82666313713d0bc526b7df2a36b7b417a35ff9a85518f5279ffd540dd187211ba5b723f2d85577febf200d1a17b063343757b754bdc27daaf08fee194f5a2d94033491fa09185cf75e4ed5b88
+Entropy.9 = 4a96a3641b34aa30dc6abce810bbc2bc33656111408da0fc30f3886c3df48447
+Nonce.9 = 8497e189704dcc920e6e5c84eb502584
+AdditionalInputA.9 = 9f87cc8980bd29d83c50c57736d8351162df19122933bb14b1dda2968d74dfb7
+AdditionalInputB.9 = f91feb3fdb4acf57164b169e1307902e5e58f6fe4df614b737951e49ad617001
+Output.9 = 21558bba6e1db78e86ede32f3dee1487b5a849f08e1452b3ed338e87f83bebfb5f46f86f89705622c7f4ed5a2aca3da3cd958369a3258cbbe90825ab9c06279f8c79f6a439bf0c969ceb6a423bdbeae55f29dc6664c415e2dee884b089f3486fbfef2bf52a71707665231fdd7e7ad7a9e12c9cd28123e83c882f90b527c909dd2475cdfd155da8e1bcc16dd05206c7d66add9b64f72a683fca04ccd1e2fb86d235f132c900241835d350168f740a6428299ac4b6a4f3f8ebdf298f8dc3f3dd9c1b3c3cfc990ce299a232af0b3904ee858a59d05dff6fa4eef2d65b5877acb229519290871bb09ce4234e25a0e16e255d1c32095cc6710530692c1ab4c0f21608
+Entropy.10 = e6470fd79c149f2c59053d669639f58a66e5f4554b806e0a006e46b428263850
+Nonce.10 = c77f87f88014c409b4bd929425537e28
+AdditionalInputA.10 = cd8e2bbbeaf5be685b8c8b0b86f9eb99fcdd2017d4e39a5648ea57e9ad6280ea
+AdditionalInputB.10 = 6f5230cc7edab284cbc07a320782fc7900a82e36fa20a3e8ceefc82a3ab27e21
+Output.10 = ab9178160a25b4bc6e8b54323db41e0fd016c3ab6d07b0f8108c2ca8388c35ea344b1b919a493f2cb1803ed3a1b8cda434bb5663ec8c690da24bdf40f2740ce2abe7c7a92066312986a9a9836a60c889d87ba3194477d2620409f7d7a77ef874b72145332ca145098e2b9bb56f9e65b2bffb242b4651665eaa856babd26fc6d428b1174ed4d384621791f40babda141a48e35b17f281a6e9b93157b9230c4c774da8d15e8d10a9909f205eb49794e57977b2efdd97682f6353d4afd2c14d6ffde15103f97b48340a68b867b57e00cf39dd20cad29bc7d8724a3efbd3bc5c768ceb22567e2dbd6d1b89a1f342e2d39e6836e28b61a3176938090e1927af0ce0ee
+Entropy.11 = fe903cbad5c25d8e8b8d609eb10af84fe5f59fc0c12d14ecbd2a7b42f76a6101
+Nonce.11 = 0f607f8310695d76b484ad8bb00b1266
+AdditionalInputA.11 = 0706e7908e1dd6769d6e0af00654ba8ad7b528c55f54822135ce8c584ce79c5e
+AdditionalInputB.11 = 57a0e7c596cd4a459ef449b35ece7f802383d678f6e30f2c5f019dd74e1ff4a9
+Output.11 = 469d2ff5091b318b183fa5f78b6c3245d713e5df96d9f05169c9f3cf60d628637e1f3eed9e369af9b1c26ba6a1c221279dbd1d123c8dd910110dab7a2d3eeab995f04b3d5ba646f821971a3f81ac684336b37ec5b73bd5bdb64132d7d61c72d872f775af4ec3fe599b22380242b4bf1e64c694a061937ceb20cf4ca4ec4b6325d2367790170bec3e6c9780635ee1140d55cd1711cbf1448bb19db26f8747025826bf4df0eeca18ecda9b0062b26922e9ae6ba8e379bbda7ab00774591eead3be7cf0adab7802625aac0e438cd8e122d21ec89c8e4753f5b689718d7da631d0df7d76b78d7383cd6a17f456462190cf45932f00c1e26b29ef826f9a8cd2f043cc
+Entropy.12 = 747c41c808449dde40c5d1d62140a625c36c3f7590def00f8ce14088a81fbeb9
+Nonce.12 = 618d12d4b5c2b2f8e7487fe135bd31c6
+AdditionalInputA.12 = 626783eb913b63f6adc5a4fda8841f16ee08ff559130dc7ce948ac439e0a5a15
+AdditionalInputB.12 = c89cb3dfa26989799ed6dd59205630b44a1ed55bf1c261ac28b0d31f5f90cf3b
+Output.12 = ee956b27918f1b94c876fdc5a53a5bc39599bfc101a35363c41a917023652ceb797fe9208cc277a9c864374b3a708d63e2c48d9a5e1bf07a1c11645433eea36583f58ae44291286247e0dfd8ee6e7327010b666c6e079c46bd5a73cbd31e69e9a618bb199fb905ca81a2d3d678e7c7dbab236a6de260a2260f3c244483b6310d96190a7243d4ef847b0f1b02e25d09ff55fd025181d8f3e0fa02709a984cf6bedf67578d8daf113f31cf6371dcb4e170bf6ef45b2416ea4e7f67c66879cda2279f491e677b38c0a3c9025c31139d731a16f93fd61bf4c2da4e442240da8c5575e5c3089fa72d9cb6471256955f668c7cd4a3e7f33427133cc555c196d7f79b4d
+Entropy.13 = dccb23c10b786158d2c6559266677b23c2fb844a2cff749519571c9866b76c3e
+Nonce.13 = 986dbdd32d7d5fbf70602b3c0f6de064
+AdditionalInputA.13 = 4287f47eef5a9651e67f11958a210914382939a31459a3885d598d96cfa6e115
+AdditionalInputB.13 = 8f60356493515f80076717b82c4b6fd753709680826c27917fb716747e45b213
+Output.13 = d59d0efd58992786f0879a26a2da0bdc077d376d459b1eaf8835f6eb958a19017c235b294d23053c5645ab897b9994bd627671f35fd039dd03eddedced1f9b7965f7040ba2677a3d6074e2d4bb8b7a7c9804e4c18d76daa08c19f0ac098bb165a52a89a82b3e18770d7c86e15f147486c7e80345b0daaa57a4affb2e30684cea9273d5f190650d9a8410fb2638bea8c72e33d0eb4c8bc36dc1a61ced57d5791d5868f164f414e5172239955c0cb50733ff5a9bb6e6ad1ec08237cab8188a797f764eb898d9390f3013ef61ab7bb8241b382513a93afa63e40a1544a3c9dd9871f772649d87c4808089467275b182c00df64ca7272b4224af0793a51ca09fdf58
+Entropy.14 = 85bc56f0224c1340634c5c9a3375e6b8ab8c30975e94e0279862017141957217
+Nonce.14 = 5fea742395b8a7b8344fad63b0659bda
+AdditionalInputA.14 = 4b69404b80b6f2fec36a7dff1b194a228761694129efa6c6b9a044f55330ee3f
+AdditionalInputB.14 = 519c4cf1b30500f729e5426d76373c291e26cafceb594c10c96bdb9aef4b42fa
+Output.14 = 53568141a5c09b6b02ac4ab674d341aa6300f8be93c0f36a7376a6850abfce068927510a1b98301aaa29252cfadfe5a2f241abc677e9e70fbca287c579acd276c2eec5c8b508f2b119a40164c6a12c0e0ca1d3d53595bbebe32fda2eef2b613329a614a28d3b374a7b031b49dba74b465a7db60a8dbdcc9e952ea143e9d5a3a651c1b0d6dad79341a7c3fd5816933f2579cc005f3c5655eb8d3f9d1e4562a756ecca3fc1d688c9824391ec8444c6024774a295c44c17fe592694dcf41f305f50a16e07fc28e247bb3d9dd0c52c6fde79df84c8d521606cec9a55f909691f5cfd797b69304dff5b60ac816b0d5046a47c2434127da1fbaa86d2844f5164a9dbdd
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 67d492360c69fd41aca0ac52f5e2ba1820a5e73fb5fe5dbcd00bb9ea05af0523
+Nonce.0 = 5e7d69e187577b0433eee8eab9f77731
+PersonalisationString.0 = 22e4e18124ef50ae514d5146479d83f0be23c5c4df4ba208e5e5b3506d3e104e
+Output.0 = f7aa49abb823c6c41e99e782d098821b9f4029790c701d015b356a1b7c655ff1553180e20cdda09c82864933a079cb81ef033d356ed011ad2777dcca17666127c230198c89f1f372fddb307614d062187f0b4099101617d5c2e1b4792b1d91bf5eec60ba1dbf20e7b070379c3a097a98a043a583718101c052f29dc281d1f666494e11d5f80cded4e6a9385143d0bf33e7d687f8204cc97f57d9f0ddfc205a8efe2787e8f49575ebf83fabf585840212dc6fce1c54df92608b01e7d36538d9ef2b8a6b8910daa3c8ccc72f284cc2f2573412085d232e29eabbe61b27eaa2ed485059198d0ae57bb35a7fa66492c12e782c5774e1abeb202e0744e9d766f2f133
+Entropy.1 = fbf07f5125ca55031fda59f0c0709c58db66e58ec199bab56ab0642366225993
+Nonce.1 = 4a5c510b0831afe7de48dc135df7b01f
+PersonalisationString.1 = f9abdd2ae83f55daad43f94f3294b5c3e3e4a94a0a46dc37876c83a327e6897d
+Output.1 = 223fb23049250be1785a7d89fd0d472214d560528bb98d9e65fa3de2d5bad182f6c960b478562e74408755c4586f9448ed5a4802d0b33d42bb5362008880a82ff662535aa5855f1f0b82009251086a9e0c555cb0ab279c3ebb8c3afa2b2e674cd122c605856f9a2f404c225119c4e46e890afd3ba54548f102bff18fe4590e68c509c137096da4375ddebe8c57ef34150d536d24aa34402a2a17a10b1e06d300cfcad63d3bd788c3e13734ede9c6311f1a03b5bff3d2412de8e4fd116783d8af69cf481a64f461f9d2f80169f2504c1597af0066c4273277a26d11e58fdef365f902c14b72f426c97b97be16d744679636d943ce319fddfd15eda8886bfc46b9
+Entropy.2 = 909f726634f77ca65889f92331c3d3f5a8fb677dddb8447995d7a0d0ea8bcd33
+Nonce.2 = 0f95ca1a3a1dbd5110640b07fc3188b5
+PersonalisationString.2 = dc7c673317e8074c4400a4b23b7cd617fcaa14c3e2c577da0445c888f74c1f65
+Output.2 = 328e94f4af0c77914adde912afc2e7149b438dffadbe65f2b9b5d951b790ac616633d5fa98324631d542ec52129c6cc3cc3c90bf76f8dc916c3f5849d459036f98699d86d4395bc435c5e64c51a1bdaad35bacd9aed2748fc201358efa6aad0c42d675fa00b42553c134109faca026697080a9cd8c47a34aad8df0b70257d6705b91e5237d6ba29a19f17ae358a38faa28e0f6315bb9102f67e2c66330808b97e46b98c3d4f0d74b8fecb66acfc19974588e67e089a0a7f81933e8427b17db4fd3cf44d04b6251131330be52e2f924beed7a3aed905178732a5bff28fb7387b438cc61fc47cb6a7f143475f12d06c80066178d1d27882fc20e90e579fb30a19c
+Entropy.3 = 1cf9663b23982e38ff659f30f152f4fff812d21c565de45d1ae0ccc4473a36e2
+Nonce.3 = 21ed13b5925fd53b016a08337516157f
+PersonalisationString.3 = 923a425b4b1f9c1f7406ef300d09ff05d9a52befa2a2f55067ea541816a1016a
+Output.3 = 9e2dc48e266427a81d4bd74b802030748e53b8a0a76010fb76bb6b612cb6bcb76902ddebed71fec51caaef13146455b01d1e6e4bde4fd1d57ae9945374e0e4bd7ef78dcdf9e23abd86c6dfc013c49a211878ce1d3840a0263aeed12266542eb74df2a13542b681d768eff64e1725e209ce85e9148b47d50b7435065d760bde93fb6b6762bf8b260aab6ec38dc43a24f9816052d23f669c84ce8b6cb323949a4ea2d1ff9f4d4a356df45cd0235883d30068837f3fca8ce0430c0ea7e97e873a8c7d6b0894d6d8e20c0f52e4106d19af83a7b3540a9b20c099f3896b8b009e89f76cca8127c04c3c34371c04501fd03adad0f81b7e742705039332fad327ea0eac
+Entropy.4 = adc00d4f536f383b7df5ace4eb9548a5febc3e9c2903b53f88ba0be65ae6204b
+Nonce.4 = 6a39430795557e5188c0d1306614cf71
+PersonalisationString.4 = a332597b684c8fa2b5973fd526ffd55c99fc7e3416395794fb92aeb6aa3cf878
+Output.4 = 0c28bbc89dde0e01a853433536a54891e6b0f9e4066ee5eeff40d48c69d49280072302982aaab83a98e486e68888472207d51bb4dc3b28408ed04996045c27e0371ed0d09b197ea733fa32e67bfcbdc537d8e576f1811e9a44b63e400e06024cab6c42ffe77ffb9691f42871e7fed672de1ace37c241d49b38ed2bd53a6718d9ce385737f22e245146781ba0d6d4ec0198ce963072dd4aa085065f27965d899ebc10674f82bed0a4863441aadbcb9dff6020fabafd3dcb147f20814933a7f7ab22fc375d7030b2ffee2ce3298737bbc2c549ccb9c10dd9c9decf58896e3d8367882c89b90738923f8524004b7ed5433c28a9546ceb7e34864510f46f1bcb5550
+Entropy.5 = 8d67d1d0a85764dc1534a1177cfd14e6711171682c9ef5f037d2318bdc02d55d
+Nonce.5 = 4485e5ec300e024d7434ac8012291e82
+PersonalisationString.5 = c2fbb8c66e89908561af60bd468c39d2bd5ad4a66f9a8dd08185fab68644862e
+Output.5 = edfd24b72b3865e61915e79f3338ede16cc8e46cc8a694c52c491b981ca97bb11be78d3c30ccf03c1b03a7f7335b9c4214f362d437573362273d15240579ce2aa8745ef8fa4dda78cb3e939793e2fef43083bc699e56c9a7352ef14f12633e4fadd1a948afa08902ba6d09c494616f27e1b80575ec8720dded7a4bf4bb1fd0d9552caec2b033fcaab937ce7cfdee8497c7a0d3eee81969832cc8eb3fc8b9da97ebda4aae4a85ab99a0a9a09982c2c26f67d81dfd6216a76f06f50dc7286b83b9b54b79b5210aaff61bb8dec5cf670bc2d647fc3a126a4283d724d8a64c919628d1b97278bdd5de6dcc5baa6879ea9645b6b7720239eabd9a71df1b57cea0bc2c
+Entropy.6 = eebca3dd0a97fd507b9041e08a23a07390e009a4a2551dabfac0378704937f3c
+Nonce.6 = 727db88630875d690eb62030399672e4
+PersonalisationString.6 = 55c4f548879f4ddd11d44804732bb0a18c7cea3862f0ec7678eba8c751d75cf5
+Output.6 = 753723803f7005d26b1bcea4078bebdfc5b97dbcc62386f6c79e5b51df4b6902455ebe8b5f12e1220341c0dacc3e07b6b8355c3f372abbbc04e6a5ac72ddc0da1a32031b3178e6332f24eb0a98ff12a550a3bb8ea052574984e19b5a60a6dd7575e263be1ce9c26ad7251df75e4d49acdf9ad7ba21a75e156b7c8eef7cd77559200e22f573858b8485ab1ef991ba7764155da74b96f36157a23a3019527e96c8312dba922cf5779f23aa64f1860dd17ecfd82f37689f6fc618d204325cf4305ca5da09ad2eeba06884ec1919fbadd6eccfbc17dbc2337fceb88579368e0f305d70469f8e4794f513c88a096d3012dd43fdc1179dc27b8c1569ecceb3a0f5d44c
+Entropy.7 = 8268ec3826db5adbf921e9739a05c988df9a28e3621a68f584c9fc4292754275
+Nonce.7 = ed90c6b8824a0617f3b325c3e3900def
+PersonalisationString.7 = 9ce84503c8ef7e8f238c98d6bc9278c83e1f00d0d6db677874878d711f3662f8
+Output.7 = 7f761255e03be3b9fe8cfb2485ec0df22b954bec934f5b48fa64d63622d4a80197e9d8bcbafb181296e569f0ffdee8fddf44546a5ecde0d6812c9800903249cd23781769b1d2477d1afeb47ef07dcde6b9505ac3ab0ea7bc62220cec17f2594c9922b4704d7e1054251667c283622d5ff67446a3176a39bf5dcbc229dd45b71d7e71cfcb04dd1aa009fb5c4e4eb11c20b9ebb6963d37790d079c51c05ae169a9df659ac2547dfa1988ef9cd7def2b8cf5c32d8ea47dfe900fa97c40bff96ff4b7d1a3b2b51b34ab0075d32dc9e8692f9e735f0193a54d598879a311f066b0aeacbc0e4bcd709a3123de58ed71e6db6fbe4af3d9beca6fd4c018cf5cc1baa3533
+Entropy.8 = 6ba76df39a3fba79b29ead091c7b7bb0066d71b497b58a59d4c93eb3c8db902b
+Nonce.8 = cd24098e11d97aee427110bb29fde68b
+PersonalisationString.8 = ab091ecbe6b462a79e11bf0efdfcbfbab0604baa1a4d1dba1cd2e0a1b691313e
+Output.8 = 17f40c6a90ea77d29c6ce0ae5575baffcfb79d5ca15d70b2b1fcdb0a88666335b674ac5fcd48becf72be1f8a73c55ba60264c2169b68fc3a1f2dcf99d9b5176200fc66ad498ede17290f562a0aa397997a0cdb72b4936f1a58b335fa1ab0ae9362e0cc11e6adfb4d41aa4df6e2a8da87bfee28b7bcb7deec686f54d5b20087dae8d995e065c7d3c1da4c5c7b99fda3a7fd0a5e2cf6f471fa8cbcc700aaad3463640e9abe9d4465fe66023ce80b183cd1647f4ef527ce26305d43d480bbca239fd8210f09df21aee1ba40c07f05861b23cf971c0a056b4326479d0ae03479ab5ef19c3b735602360fa1b5df07385a1c1e5c509c3b4f55b398981ac62080595637
+Entropy.9 = e048a1fb7d64b7217fda281cb41776a2d4b46de489b90d5f9772dac5477956bc
+Nonce.9 = 5353abb44215646a8f7c05eb53c94a2a
+PersonalisationString.9 = ce0cb9f85badc9cd5f15e573a99f00a4060b66d5ea00dd77139b95468e8ea82f
+Output.9 = ea23957103cdecdb012b42012c1b10afd88a028b9559be9e7e3f1897dafeaf4f8e5f927b93b5718a3127b89ac84544bea9424acb4f06395def1ee054fe944c6339a8484941aaa5c92beede9cec976fc4167b1d0d0a29a63f59f54c7b5ab8c87b6ae91475ca57bb11c0dbdae426681e2c1261983252fad76c51acaaef65b95c9854778812f0bfb6e6abd7b8d17e99cb63a8ab4e6c2498fd12ec11fa7baccfd9a6f1241d65d79c2db7070b3a5c781a4fa119c1a88592c8995aca893b18ad43bff40c1515d18407f34e1eec70547fa0b0d25e1a2bb7c31ce253b2fec2771c62ca35936a39be7063be5ef934d4e2e7982b66ad8ea6ed7bccb664ae2494f795170cec
+Entropy.10 = 25409ba4ab52a0e452e799229cd057bf06704578a490c5d1e6835fcf542a7768
+Nonce.10 = eb75bbb6f4578a1152c0fcf919f77625
+PersonalisationString.10 = 1fb58175e5d8cc325bba59fdba58fc8c2a3f81a178e606f381c32a54e5c94765
+Output.10 = c156c12387a228b4d71db7f4be9d58b0ef09a7989cf0cf4f3b0945cb872c45e07b8129c18bd407bf27e83b2dfc24058c83f96bcd2ddd482f678102bf17ed0632c7321b66d3f1d27364d99db713f5d9e7e1347096eafcc46efac0acd96bf0c3971bd862c94af3e25cda255bd604872f565374dd03a37105e26a5b7f456cd36f22af3cb979689745c72bc1eda048912afa2b13346a819bc9809d80b4b1288ef8ade5d2db60617d89a66d63db70cd66e7581594670a2c60d591c578f6683e7b952047943795ec3501fdbaab4ddc3c075cde070b5eae9d0cbe76c039ee69ac691a35153122dc03b3657fedba475d3261d8a989d7fd4498e0e47d54d091c83d11308e
+Entropy.11 = d819597700d01af57ab5bb0d684cd587315da065a308dfb0819a297bcca33a5c
+Nonce.11 = 2a350973b91e7fc46fe8dc948e04b1e9
+PersonalisationString.11 = d644aeea2ef1aa8a84b44140b1f293fb6dee3e786acdaaa0639ce5d55ac90970
+Output.11 = c9f229c3a02de30395f9b55416cc4b81ca6ef2668e1d611ab58b1c8254f0091d57a808da88aa816b0901684689347fd4eb2da833a48be4140ad303735210f21937c59fe4b5601a5df8dfc48e3bc2a2e1330438646a946edaa60aaaa6bf942efdf03977e48cc6c24e095242bb9ce8e10521fc1847f57df099ab5d13901e4230a4f35c0d6c02b851607d5f9f9908884c5348eb64817dbcc32b0ecb9887fd94272ca5d8ba9e7d3730fe1457fcc8ee00b4ffdb0a184be8db8aa3ab97803ed95a2014133e5e0d00fa5420668810c4a90966ac63e0d780474f6adae9049d9446ad2a7eb1bca57e8a5f47649dca17d29939c8862e0a2ca63298744069cd1b410a0d5bd4
+Entropy.12 = cda7b628ed5b62786f6931c1194ef7dfa888a3b81991c7f5f140f1c39118a801
+Nonce.12 = 2061ad369e7cc487dcf0ae6192dc5b42
+PersonalisationString.12 = 7e915dd5000824059f6165d02811fc38fad6b954f8b168d4822a45302f356615
+Output.12 = c3a0296844d24b4f0e43120713a4cfb272b40f01d2548f296645c0ce3d8c5644077c3051cd882aff85e692ec111008f46473abfa461dfc52ca5e0ef79cf5489fdd16a26d9f1b9cbc00201720ea3dd32afda2b09777e5bc78f8b345f66d317bd9edbd0d836c8bc1e8cd5d793d0702f7eac2cb51562c2ea2babfb220234139e3ece41e9000212285fedd4863a9c4851cecd4e1c17a5c364dc650411aeba5089b88ca63d35ca4bc4e4f1d0ba31b3f4c890a6e49f90ec7e203ac84d627361e5b6c4e31f23e72b93cd4e40a7d284442e52f0d8b1444c48c70703f12cfe733240667aa2c77958783490df8b84a0eeef0a12885c0765e36af6677635ea30542c2f5f43f
+Entropy.13 = 8e3f8c69a382e524c4ed5ae465cd077b2541ab17efbcbbd726e3a93cd7be34d8
+Nonce.13 = dd87a12de5a73084da6760bbfd1aa5ba
+PersonalisationString.13 = 5ac9d0b995f41bb75cb0356e54fe2ea21d65db45f19b2a0f5135b6b533cbc34b
+Output.13 = 123f7e607e4f02ea8eb5dd74660a9536056550377b46bfe0815aafba7578c3d30e750339d7f20f240b5e6e2e2cd4eec10983f20e09772e904dcbab56306eb99f7be4f57b64c3eec9a78be8149663096e9d6f7946a1a5f32f2eb13c580dd6d52c7428d4c4aca1ed77f8c9f303111961d0e2d61af6bb76920101995b2c633eca98affac8686ad66d37d1af91fb6cae8132857eccaf56f6e87179279306cdf33260383d39fa19872d8385057bc386ad8d3599a7cce183997418e7e249eb71e3c0d11fbd048f88bf1d997560df21eae81f35486481ec58414b2f7acfd0a6a03531e3533ed67e705894797c1cc4be841d578876ddd7287e0ab10f8e0790f07e078efb
+Entropy.14 = c88a94c68f5c6560d90559173f8b9fd04a83a0f6578b22f057c781408dc1f6d2
+Nonce.14 = 8680d7b3f0a8ae576bb0f75364b463ea
+PersonalisationString.14 = c0bf8f2ca4efb48b8dca73ca7148da3cd5981c5a459be32db5a14fc7762c68d6
+Output.14 = 269b3b656e58f9aeed32c80700d9d1b863b0253b3b33155cc0849efbedfa51cff82262c9342cff7f1a7a58a5954fe66547baa1831fee55ae0d322674c6c784095f43b30c1887fb9fa5e7e7f1905da2808ab810ecd224ab403b6f562bac54e65cf7f0473991ce7d7cbc1a669a022fde3141a9880d974b7ede2fad24a3263570443cab0e8017d242fb4c2032dc8be56d8fc1e0e8f92254c7480e4941259ecc29ea47a1d11e074148b259ff95a94711d767f0655f1e0574dfdc4ae4f27b12015af86aefd36f6c10056c3d83e639e3641cdd8ba178f7779dcf502bab3d7588cffb72f6489981aaa7139c255df0e76bf6bba32e4f547327da4597745b15042869b2c2
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 31e8d6fbdc9026b0708405c20b558fcc0a107f3fdc836fe056f020df30d9dc57
+Nonce.0 = 2b8bbab9b486abb659c4ae8ff5978e22
+PersonalisationString.0 = 949eb753762869aa5ea0ce725523595f9bc9b219735113e71feab228d0872c38
+AdditionalInputA.0 = 88f1180d4ef564315280a9692f107ed9c0639d79bb7040dfc3b7d58bf24ef8f5
+AdditionalInputB.0 = f4fc8a26e0ad181838f1399fe5b8a4b86670e92ab92b2c4daf3913470724d3f2
+Output.0 = 10509641332a4d72a3c5936512c37cb9ab9874693902ee4c76e963675627ef86aa2e7d7029a152b800072fc53eeb6b41d12f481cde99b467dac3486836f6e146e9a79d3fb90d9b26f213ddbfac590ca083ed83fde4924395d25b645b96a6983e65fd662cae66112ebfa990f09b86b01270b7f0ef35f183eb01ffcbd7d5ec6adc4839cf3814dac858e013c6d79528ef273dd83724ccdc82b73dc63698fcf8ef0924f27b6a49d6d38f0ce261aa5a0a88779e47a413c29e1d7d20e4ab914bbabd5e6e0241cf53263a8efa321b4a632eb062b255c0ce5a0833114161dd073dd037967a1f03daf2dd7e927b801b40e62f26c0872ea100132807650232126aa8f29d70
+Entropy.1 = 2da0fc2bfa2be0783bb0c2dd7715a9eb9f6d242c410c94cbc3d0e9a3fca51833
+Nonce.1 = 06cc9be12a59a27227b4c17176e120d3
+PersonalisationString.1 = 8af60799a6550e35b9716abba2ac41b4b83d7d6356b46430018f7b539cb73289
+AdditionalInputA.1 = 104a667e2ca3d224ba0621f3f88a8c4b3209455c70e9d290129fa5938368f8b9
+AdditionalInputB.1 = 405fbb0f4395c202c2c1d2998a661b105152b9022b25f09bf9e9d72d1f098785
+Output.1 = f27ec9f8757be0de04c52bfa3065b472cb299293937b0af7717ad7183a614a093915f6301c7c470c4377b8ea07b946bbba032f056bb75a461aff3c3b7788ff650da96d60421b12b7039377d1d49ff12b30573d507827adb19d5e7b147721c8a07e5a697e69b04427e86bd250f129bb6b1e66946b7f3cbcb3af6e9ea76141d85e3819f1abe9ee1d7aa255956b6429892fbc918ca1968725f07d57983d5d1751c2281e3715ecc24a20c6f81d0affea22efb98af0aeb51e28894835a8d1de57140c6cd5e4dcfbe4d75f55ce1723b4bdd3c6f1e888c5b4eacf6adf0a1d3c2557a192fc5f5d6b315e6dbfaeea98c8a20c7372551936e93a02b835842109938a21d508
+Entropy.2 = 8bd067ccdb7b20356f4b69579a0d94ae74e8fa03ec51f23c9926f6ce183640d6
+Nonce.2 = 72d8095713f90db89f79394350f230ee
+PersonalisationString.2 = c97e413f1f6e95c35a4cde25c12c536ef79953a48e9bf2aa7a35dfdf5b810f85
+AdditionalInputA.2 = 15f793339b41124cef9dc41fefcf8ac1c593ee1ad6d4a4969156b1d8eead4a7e
+AdditionalInputB.2 = 30b86ca9b7d78adab135984ed7be67aa85e3abf4379756ab5f775f986ecb339f
+Output.2 = cb2f56f407197e0479a093eb4beaf92883275c70f7571477a6c3beeb71035b711a888aeaa8bb186782875dda6b05f3ad3df502b55f6b5eacf486447ba641c8688dd84727267d8ac91b04f192308567295537f12aac36aaf8f5c436a683463cb4bac86affcd653b5e1960abd94cca25064135f0c2bead0007917191cef1cf2d3207682e73714e7f7e3e1c2efae6b8d1c7fa46f0e1f75a6e8ac84659787ff0cd70d02311015c2dd926324d82cf38489ae450a01fd09a4dc411d62cde553947e30a6ddd6153fae1575e3e5222993584311b45cb091ad35484b8b75a90b6994faffec4820187b7b6ed20e1db84b0e6bc1fee1117b86b422b32787dff56b7a7923192
+Entropy.3 = 0e18475cc467fa2d74121b23d255f883dc98cf089d8293c90d27b9abd46ce5b7
+Nonce.3 = b5efdaecde8aee390772a53a242b1a04
+PersonalisationString.3 = a6fc0bbfa739da1a63b3cd421f08796a5973b60e9a4a047dedfc5cc50370d9b5
+AdditionalInputA.3 = aae86525c81ea75a989d2a4abc1e0abc2dd884d9d56c06cf57741295b2f6c8f3
+AdditionalInputB.3 = ffa8562e213fafef3c44058fa2273060ff7269335e14ae8e749e6c077912aba4
+Output.3 = 6b305c9721936264c1c67fc487703eb61b226f053532527b466c2d3079652347da3b91cd829054d75bdacedf744be63526f7e49de08008fda4ea71732e60568eea31f1b4ecfcbfeb9bfe876470dfffe1ca9347862392602145c4f300ee8a38bbfc6eca65f4064ae8a8066bbbf174cda392467a1706790ec8863d2cf52ea3d8f206c4a873e412a49c1591e30196ddfc49f17df7b082f90fe7b39af699fe5b1d99e3a371d3e5b14fc64dd67c788d8220ca1f381cd6ab6c5cf139400bd9993d0526bc2fcc4be5d50f90765fe533fc5475031f526e24cf9cfba075b7ca4d2016cea733aa63910df56d21942f3ed7f2306cd668ea6df522240af8fae9d5cc659782db
+Entropy.4 = 6b16be85b90e3505ea941adb6311223460d8fccff7f6a4c9aacdd65ae59e45aa
+Nonce.4 = a8ecc0ec169130c03d5e0fac59ec2ab8
+PersonalisationString.4 = eacca2a0e501afe855db355548811ac6252f6ae7b585d27eaa4d96b0f84e841c
+AdditionalInputA.4 = 9227378b4ffdf15e31abb003647624ccb297384969fce30b4e823e3e0a121f57
+AdditionalInputB.4 = d2ad216c4a649be4a4afab984e6b421025ef06c824517117060df6602b9447bb
+Output.4 = 40da3a7999c6969eb06d1d632a8ccbca514ec947bae07c2436d34477348b84fb996804cc1d7ae1d2b7ebd9bd16a7516cb703581312a290b3b8e3a999381149fc4f38218471591716e25a192a72fc9888eb4b22ab377a783d9939ada6eeb1c2c8da33dbd5562ba5ff0016a5da8aa3550862930ebec3d2f8c24c3b4de0926e835101c1668ad3afa73cb937c05456aa8be3572b07ab2ef8c342c33852989a15de2a2ded0c5eb0cdfcbef5c06ffcb308f6b8e20083b45f5924fde6efc8c3169be57f3c0ba0ac72ee4be386fb8e489fc36c01187ee40292c5f58ca9f7a3673abcc22577e009b92826a59b48465d77171aabd8238bcefce704bc7890d132fb80e3dd6e
+Entropy.5 = 9f942face5b5f3e682a9cf379636ff8acca12c337bf1c88d28e0b5c4cdb18975
+Nonce.5 = ed8a2a285ae5001b0c1f9827128fddf3
+PersonalisationString.5 = d1d855326c6d51d80e935c6b57bc1abd679404706070c6aaa7180cfc1cc2a70c
+AdditionalInputA.5 = 2ae71cf92ad651ae3ac7879a67d348609401422d44a7d2e1e9170c3e4ff24efd
+AdditionalInputB.5 = cebe3f8785219b9a60c2640151fb43dd1c81b21630c38526016f9ef7508d87e4
+Output.5 = 3bd29f037621d985e6e42de47ab6f7bb79893a7c5e532ca914afe871cd3d63313cec5e9bc8a2c5d1c5d87d7b016f7b15c4e0c843f37b0f57e3e76503f085f5ba659228b31727418c0b8e5d5cd505b140345557ae5de1bce4adcfc960a575d44363be73f568dcdf0d91c0f380f6e164cb1864a8739aa6711e376966d7d2767e926f3cf353e0b6f3fbba99f999e4ae3f8856d45a7d273db353b8edb00bab99261095d2b1cc3cdc3d25e3e1ef27505972f7f3334a6e954622169fa28a9e19217d96ab329150aa6d585d7698ffc22d581cd6cf68e11d98d259c2797a664dd12f5e8796609963ece539803e325e54a8b57f93fc547ffeb2ce7ca610391b58459e77f6
+Entropy.6 = 9a08a378fb535b1a8ffc730398f4071242c6954c248282ade345a50fcee38c42
+Nonce.6 = 006d8c510f406634360bed0fdb7dc12c
+PersonalisationString.6 = 0025cb801101a8d9d4647c02a0915c6b9639722b90e7ef88aab9dba3c18d80bc
+AdditionalInputA.6 = 99bac0346fac6b765bcc9caf8e2276fd75db65d2c182e272fd7dc66de3006482
+AdditionalInputB.6 = 349bfe2d3728eaab69761b461e6bd96206dedd6540ac510ad2b65f198a1400d1
+Output.6 = 0e383143abc652bd1e12e3a85c46c8acd1f97821543cfda5d9a05417def21b59821a174b58ddd1f1a8e2ada4e28d7806b43b693ea70fef21ec63fbf5cf11cfbd2075f3d242830fd708ff05e9fefeffb23c393b25ca503ac84046c7f020435c914238f18c35f7d3c293740caa7bf2eaa2a21a6028faccc13869bb734e41a515683acf08c223b9f8aaf3372369702a23eb6010b375ee7bbeac5c40c209db6369133d5026b97d4ccf588ec09a0427b8d50411bdc867f668dcdfd6b881ceb91820c24e79dac53aece4d3253c189203aa191e31fa1fdbf80ae6a8165a094b574c123bf7bdd15ff001049851a702f793871fcffb491ca38def8bdef9f1f5d48a9188ba
+Entropy.7 = 7e745954ba8fe961c0093c552de15a469763640677b53628ff46a3062ca8fc92
+Nonce.7 = a89bde60e20c10f33bc195221c184d72
+PersonalisationString.7 = 3127891b40deadefe09e9fb727fa91e1111f77133cfe306babd4dd3089043e53
+AdditionalInputA.7 = 6bf082cb8861f45272f9ffba27adef92d2b210838e9a619e1ab055e2c310a558
+AdditionalInputB.7 = 999adc41ddebd8cfc328212a267d111cb9bfdf4dd165dbf5dbc9ccfa1376b1f7
+Output.7 = edcc91b47943c29bdcad2718bdfb61b42fd998436b0e2608123857b21ed9ee2831b6da585b63ef872f9604385b05f6d2082c7c81c6eae7bf4238bb2b4db6168854368a17e4f62ce48d4ee8bc18ca5598c16f8b3b03d1927483ce918877e388d4c5364818d357e409f4d8eb6a6fab102d682e8477b6d523bad31c4e96ab529fc987d87bf4f78ca186dc7d3d9f60a2210b73f6e12419f847ee6987f5cbf3e69d43625a048387da06f392d861dcfb2e24cc5db300ac74350aed4e3bd93c62002602ba0798bedb1cc03a92a939534aab0242d4d624503580ebe899c6822d3ab14b3b52755d3826a05d81ad12eaf55dd4c2e660519900629418dbdee42ba85d82d129
+Entropy.8 = d209666b09eadb34238b15eb97ebee268f095ccf8de068e45187eb691aedbe25
+Nonce.8 = 24633a170a9b3b9cedfcde94dc8545f3
+PersonalisationString.8 = 298a8b306373a4c6065b9309b1c7e0f6fbe4ea23b8e0b16608e7b30c0d84ea11
+AdditionalInputA.8 = f60ca1359b5dbf63404e306e073361ecb9ff9b9396388fc7a3e7b3b3224c86e7
+AdditionalInputB.8 = 49a4b2bc9afc34a77894cc2c39f5f632389a369e70cd6338845676fcd6e838ac
+Output.8 = 7c40b03b7b1aea5526ea092d9129ef4ce2319864624aa70eea4207ac5703ed90cbe9e274d445e65a8ae1f8c0961db98c3a8df6b687c1771fb936a18ca764b20eadd6eb84b8c9b617b51d2a61cb6ae62d07741b5b03033da15ee8194f155227a5dd2c34c251fd4986e1c32937e6a7e040d843b2de983ae272cc25049061a6f5cd85dc04ce33b23a3af8527331a0874227f2f72a2882b55c31a3751a8dd0ee569cf254ea9d0cccb8bf3358bff46a9e370b7b21c75a96ce2e393d37fe0c2630a29d4daad9aa4479aeaf8bbbaba3dff12cbdea796827b80189d531562d89e3b13b3d5bdcad13710846d2b68b3dfee11e3143eb4b207cd03b924ce5cbfadb6111f0e3
+Entropy.9 = 4be833d06b234ae76f76f4a7f5f6dca13fbf5fa96fbbdcf4413143c1dadf4aa9
+Nonce.9 = b474266a8a849772728daa323cd39f01
+PersonalisationString.9 = a8416550b7e8ae43e7d23ac458d3e9a6f519124dcca4af19d9cdc3da491d1df4
+AdditionalInputA.9 = 9a2dc8a1ff7206518d04daa198291eca617badfda54bd22237f9a173e9cdf312
+AdditionalInputB.9 = 7822e3112bdb3b625ccea19f509b332879658c03079f3e70423a9911427d5d57
+Output.9 = 96d24630f653584ce05b24587f2d93cf6bf579abe0b6e2de96a12f706e2942b6329d5601b36b00026c8da2b4659150c4e1b47adae5b1d83cdffb841a0c5dc95c5ca7dbf92f8f6a6f2e849443bd3fe997660856556df7b7fbda85ac8fe7c367c228d7c616a3719027fc4e35819ed0e64c0a4705fbdf9990c1108805a347a2f02d9098f2710b0225bb0293aa093a6c1823959f2a6bb9334b7c84c3477a5edbf87f3b379a5655fc443bef0e71b1beb5f4ef4aeb5568b20994e8e895c40867b09eb105779bf6b2a751e14d06a7eaaceab83881ce70b69ec7785289839f72fba20e8212c61f7f9b6398c901daa6e4ac49e1567388f834798dca2406ed974ce0bbec1a
+Entropy.10 = de3371b2318c14c018d7a956b6be9e48cc8527fbd32a00bec1332cc59254ba90
+Nonce.10 = c9bb8570480ee0bd7ce2320280ccc8da
+PersonalisationString.10 = 01a0375aff8275bd7e03ba2ad4eb1f1e1d76fd13e328166d0e79522e4d3e3aa8
+AdditionalInputA.10 = eb2faef54c850df27a0d441b2cfafc980c7d041b56fc23e237d83e2cb303180a
+AdditionalInputB.10 = 509182b16622938ccfb82685e78a8b38c0ac5c36874031bcbb76f9a71430d4f5
+Output.10 = cba7cd4e19320e1cd00c6a7e20bd543cfe3fe08fe6b9a47803da640ed3bcd4376ccd142bca574c3be77e444ec008476c654922ca0a4aa582fc7fc0f45b69fcf24512872b21192e89fe8fc020076b370b98de505c88a06b00aaa7ed0ec7ee478ee779d2abe95e4052ea2d9968bc16d2fb8c01c9dbb1f2ec2d6d55c133d32a229cf948a0b2f812a7859a897f00277e83cf2a394faa0b85e2003cd1f54ec3ad1f53f03cdda8b726407175f0888e7ab923248ad6d92184bc3a8971f92e6e1e09dda19f3db72ddee8f3188b6100cde7272c740c74c16ac159b62087bf00ee1319e225be2a4d2d49a41c79646eb0e3bb338398b5b459ec5dec4f75f0dcba50ffbfa19c
+Entropy.11 = 3c0d31c4b26c7b82e5bbbe8a6f2c016f61cd7e9988a3f025f4cd0273d64b6c3e
+Nonce.11 = b8faa8fda84f68331db3734c0a5c8d22
+PersonalisationString.11 = 1a7cd41cecb03bfb8d3e9b1fa50c19e77062ebd019e2d4f7f078afc64ae1fe73
+AdditionalInputA.11 = f9f4162c3866486932d8976adaed4aace7f4c7f103395bc7adba35caae20cda2
+AdditionalInputB.11 = 4f33cbd20b4422a5285336d63b0ae4ff1f38176e1373702347ea39812bb9365d
+Output.11 = a6fe9127f85cdd8758c05c64896375a06e2f4198a3e98555de0cd3bbba0d834ad54defa2b6740d34151c7ff12a4fc361673dfc75e7e9296320460b7c907a8ebfb86953646188222c7834704936c3bd635c5ef7aa7a80d0f59d581292c906333c8bd35d9382fb4db237e992d4b8cb82e6acae241cb5a97e43cc2a3f877885e3cc83bc25bfc900088c746f2fc6566a74bc2966429c1ce6e2790a0116930c41be92dd2c0c579c31bb3955ecbd4d3bbe436ca939959d2def816185f2262110b8ecbd57003d6ad86cfaa6b776c74f77409a5333e57e8b416cc5f0f6c2bdc16344003f0eeb2b87a2db01a85ebf4677b87e75d69e8f6743aff5ea9ca6da4f7776afaaec
+Entropy.12 = ba63b08d942ebfe09327bf80106744393d980061e15f387dc23ab452f2b35646
+Nonce.12 = f60b6bf40766be9d9f9bbedb6205175b
+PersonalisationString.12 = 0e87ff3741d7377f840a7b5ac45c2d146ac0cd88c7e715746ac3e6d0cd0867a2
+AdditionalInputA.12 = 286593d37c6cf3c9154b256f82338cd3d72722d54eeebf945a9f152ee1243829
+AdditionalInputB.12 = 437815fad750af17566c43e04403bcd5dae177111effcc4766cc5e618332f398
+Output.12 = 9a438c0f075f6dadc1b68776e1c3651896110e6a03fd1d7fd95412caf21f945752de261742a6d3af8f171d34158fdace6f2f30d97d076e1de893a93e56a43efa46d5a3eeb1166dcec5936e89a911c48c3af61a82456d563eace8c0d3e7988937331219f30aaf7352f347df73eaade6c1831c20b9dbb622ac786b4a6b58ea09dc884806bed493b42477d47c8b6f06e73b070306374d506d48108ce8941368a455054e45f0409daa9f7dd2f3073ae8285615d990f905aedd9f8af0a9587136792107d4ef67683ee1be64a68ebc206c7ad0d5644e15b64af9825312a75c2ad56907930f9d957ca36044a3308e5167c8072292b010c8235c7500ee1f3283d837ce8b
+Entropy.13 = de2d8369fa5ce79a177da7d9e8961876f39d266ada2836bd7703a7fad2874e1c
+Nonce.13 = d81c2f1bdd28c47cf29c01e4d98a7af2
+PersonalisationString.13 = 0abc4e24e778ee25901eae2a8efc99314ae9433462cfbf2e0b9eb864c0c6e0fa
+AdditionalInputA.13 = 69cab36f38ae07babf50c3b1a39df5cbdb3c89ba7e1e60c0da8cff10547cb078
+AdditionalInputB.13 = 819603ce2fa8188e13a43f12d40de27d38b5653d0b91b8625d8a837ea7bdcee8
+Output.13 = 49d569422a284f6d2d2d08e50d005a3be90c6b559e78637935fde60f6ab6725ef8f2b95694b91fd9073b315a30153079c2bfd26a346234e3f3ee8692df35c603411005417d2cfd1a15125a7a42e291c58481419558503e6d8f54a3464befd6d13ca91e534115d2d1cff137ab3dc281e0c28f9c090bc66ccefd6e6cb6337ff2ce7ea22410cf548a0aaf77ed3f4082dce69409e140f4653088be2909fa96ec48a1dd9f02a187883b96eaeffc50523a6467a691b5cf8c0f20d6d658402cdbee3b5bbce602f922b1319b50fe45d60c1758b9f721c919b38a32c118e55dc4e79f7bce966869b502cec92f0e6c5a514b04f87339f368ceb1ae4a870958f6aa56ce8717
+Entropy.14 = d1922372f788d6b1285df63bb3e05d8a77b7055b3a31a3310ea51524bfbc36d3
+Nonce.14 = 247717665b4d71ef9e2855d40cb962bd
+PersonalisationString.14 = 7593c7841c5bc0d0a68a49ef0e4fd311e84d16652a8f15ef56ef10b00021f255
+AdditionalInputA.14 = 64278bb6b8224b93c0b5339726fb752f6d81e85b204d76376d99779ff1f86cae
+AdditionalInputB.14 = 4995815c060c80e9bead55dfe823b869862bd0e5b4357afe810a53c68d4b0e7b
+Output.14 = 9b4249e1e692153ecd20e968f86eb31bf9a22d3671d0ce9d3eea243bfc70890644a95d551cb9956cc3770e95c2f14ff154760cba1b24c51c41f7a961a4502aa053068751618eaaf743e0d37fd41ab4969444519c22c8fd96f9eb1be6ff3ae01a25abba84a259dad8bbc78f47dcab3ac2242e6974a56454999b4c59243102b731fc4bb4e01c92d36f232ca8cfe00fcbc0ac200c2e403d17d5d1dd3d6c2095ddd15ad58a070f18b69a5f5d3f240435d298bd48bd9be028ccaeb10997f88857a848882f51a193522bb0b979b37b5508775fe150cab8ce97c0760b7418b5bbe496562fe639540e77c1025c0e191fe000aa5d1e49bf02a5a3c6f46b40dd2c47786d45
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = e8347c69f4cc4d35b03fe0f74d38a8fa1dd57dd7a2a4272684a4823703f9dfc1
+Nonce.0 = bf28460d47c2457b173c46d5853a8d54
+Output.0 = aef43abba93dc266185516f1ed9ae5267016ab2502a0d1c42c602d1f12df539d042e2f5cdd52e4eff95b8a34be363bd49cbd3bce2a42187a2ee8d1af5f77b29748f1ad692de2f28f57cd312bf0d2a1b7701ce14ebc11aa56367cf6ea4855c4ae4a3d8e686c748d5c9e9e62926e1165375935605566b4d98b378ec42bad973a002f063c700930a737e8333227f0e612ef84989186c9859ee2e669fb259c30778c6d92d1e8ba0883ddddf0517bb98144a481d8016567866f91847bfa964367d28930ff3a84c27dc7fbdf8e449122e6d071be26777280a48d362e35b364cd816d91b281caec0000e7ea76a87bf3e1227d068f1fc3fef2ecee337d970cb08847ea13
+Entropy.1 = becdef2a9133c89941bb031628a42315247b63bcf47d0deb982a75df98a17ead
+Nonce.1 = 43c77151d200f0988c040d4665268f93
+Output.1 = cf13657fa184a2bf7747728e66813c3e795fd9ceb80483d6a2cbe25577eccb937b195059df92a0e5613263167e3ddf097a5bf77b223b2a63e0563adce0fc1af09cea497cc6717f098a6f85c6a8154ea3855477ece71ebf723b466f1c8bf3f56f2e28f4456750689a8dd73e73c8fba35f1d1d3dae80d67a2ddfdb7c6ac7e3a91f439eeede14cf79198354d9ff47845bf684da9a7a47f51a5ed3232708c0d78ead7be463a5d2c35e0b7b74aa3043d6673c5d09c98f91cfb1c8d3f9bc609d40fb8084d77c128d5abc55e2cfc5c1280a612d220af2b6871555c2c5290dcbadd96a01c67e1c953eceb6d305e48354f28efd21a1a7eaccb68825ef2ad1249b573bf39b
+Entropy.2 = 5591084e26463aa51e9c8b3bb653ff3868e2a2d89589abc93a2e09a9c2a065bd
+Nonce.2 = 39e3dac5749bd0a8046e2f0e32d50ae3
+Output.2 = 1d2dbc3cd00c8daa226746f500d2465feb8fa97566630b2d9a9e021b97cf1924e8137c64d5311bf82bf1d0ebdf909445151ca627497237b9f121f265b2ab304a5b2724355f63556a66b3a5bc9407c8bddfece164c38df52a29f656ea6c8e417aa752e6ea5c37163bec602a40446e41f138752d4562b5426fe5f85efd76f3b16e271de6ed2d52f05d3a896b7e490f5d1a98f8cf9816c5173efcd48db8c8573c59738ca6fd48950cd421ffdebf32b86683daab770d88cc059a6cf857c401e29561594e85e5a3191cbd95b61815a934fb0f0103d4ca7a176488780cbf100a473bf94a80a8e40fa65c92db33706f0f2838aa418ee72617a3efa902b2988483dcc876
+Entropy.3 = 070a1b7af0d37c6a26a7bef39a44fd37b736f665a9623fb1fe208e52e2bf23ff
+Nonce.3 = 0c3b6a5c15ef557e5a9272e7b5aabcca
+Output.3 = 62ed333f27cb9928f5bae6631be85d4ecff4c893bfc38880ddaca7cde714d0c203c2ae162aa8e0fdad445e4e81c34b96398a0fc46c6f5d94c61d2ae3632411540c1689eb0fe919f5e6c82a9892ac03ca55e2c192897f676c1fc1d1a4cb65b3d4bb957ef2f7aea1bb2ccb7951904bee6c3f6eedb99f02921e08e62c7ccde1ceb7a5b20735a3233ea1cf09eb8b2704d630028f81bd711baacb4b09e6193d65f11a3dd9e5c536a231d6366c03431305f790b121845038ed6c762e41841b938e21738e7f0fab5a189eeb34adac6de4bdbe9ab9348d4d5c2cb61406a31c224dd8aec8570c87cf4c75911f3316f95a921d9c6a90ad3c494dde5028eb9d66177b0d3658
+Entropy.4 = 28e996e15aa02541f781cfd86ab9ce74724a3000a22a70d101b900303848692d
+Nonce.4 = d5c4ba58065f6343cc51d9c598de26ad
+Output.4 = fc684639d41093580a3d31b4fea1d92ce92cf67a231c16c634028ddceebca4a754fc19a150ba618cd8c77c98e0b107ebe8402068c14779ac184ca7d506679b2a48291785a47c9a07a09f8bef24afb8875452ff15c96351a07ad7a5539a14d578cd7e4be6b9ad5c2bb8fb8087fe82b13b0ff93be8847c4790c7899203baac4050c8be7936783cd5e7dd3cb0068b8b41ecd246b909fb80083f0cc378bdbb39cff96611d51b3e94df7dfbc8afc4224af1594a536f277e0d3c34e8f08003989fb8f2d18c0db3d7f8ab08d1c351ebd24d39f9be002980b88f3917e68891e1d26f775ebcf960d1d9ec0348d8404cd86838c76bd691ca0160b57dfe75cc717cbb9c0195
+Entropy.5 = 21bcc39dd3e90e5a95b4056e385a1e7644b96e629f51b1e5f030857a9bf3c523
+Nonce.5 = 0090eeead56651d1f4acb93a2640d9c1
+Output.5 = 7bcf06841db1169aac8d0101240b4face1c11ec4dde6307df08de7b3d817c36b550fc86635d6921f93e2a39f395da6bf09f3b4ebae9272bf8e85c4e564c410aa09a4904bd17ba7200165672d64b1e6cf49cc4ab8483edfcb60e898f01584917368d380e00d5a3482a0a68ec673f20c03c72ebd53027cfd367df0b00d513dadb70da739a8d28ae4800fcf129b5edd33a87c0bba39c22ae192c2b19529f74ad6ad00e39e5bb58a09cba331115d538a70f09d1b1c95a0cade85dd4b61d224edbf7f26ba347010174cf244cb2700999d65cf8394357b3ca70e323c7e1509bef4b97019db32be0d91bad8ac2b4684462d3a6f6022bb30e4df1b299bd0bb24af338f73
+Entropy.6 = 53773445ce198107882c7714d361ac0484fac8d5aad4be7f1b415189beae6777
+Nonce.6 = d0349f351ed59b8b1625adda05f99c62
+Output.6 = 97443cf87445d4b7b36da5efa232b21b293c59546fdac531f98a1d76c219aeb046b7f190ed5ff5971ed7a62117287effdc4e1a692a9bb5067a733013d0527fcf5c85731aa61dda10a7d231ccf01c2fee79bf511dc01f5561b3f98298662ff3a74ea1d57170f322a40caaaebba287bbe150a22087cdd902a741efa527a372610f3bd7a0f2c59878c4e95b57b5b8615d4eec128ef009de7a5db2ac6177eafdc1f153b70a0ff60168d185b626acf4ff4ae8ff47c88eeb1fa41eafa36d9dce7d782a7528d1d676f9ee7848ce19dfabe5b24f395184112f6bd5c50e451ed6b6dbb7165aeb82d5100d26e220b7eae2df912aedb69990c3603df39f362aa9302982b980
+Entropy.7 = ff37fa0b66c83c3a2e2452068d13bebe869f7488968b518a2cb2f4836ce39f05
+Nonce.7 = 4304b9a6a5eaae133b2d42e3c70deecb
+Output.7 = 240b7b7baec7ad9cbd2884b27885484f4ae28778f8b746701eae2217697d5fd2eccf5ba78c59c76f75e33b2f93d84019fced311cbf153e843c9c1aa257bfd67fedc5682f912f64aa53bf95807f1024225542c661370457003b748529ad4a7f352535cb81632bfe4deb1781c94feb943294bec498a4f69ed12937bc751d135a937b2cac9f946bfa5025f4b6749ba412bb4e80c7ac07e2c66a1465e8895d40f26533dd2c0677a2bfb4f140eae18f95b789bc5dbf8634e2077a4c6ffa02f4d1757951b04ffb85bc405414317565efbf0a17aee32315688084ad72a6efeeaf2c793821359604aba2225ce7b5f9074d4842b0971cb6385be332f74d6f403ba14c0cdc
+Entropy.8 = 8cef16d1b9840107449d2c00d44dc14012d0dea61e7c8cb04ef5ff8d0c9be9cd
+Nonce.8 = f65e96812c6b43723777fdb77434232c
+Output.8 = de1aa00b946a9490c9313df6d3921d2ce4b86d5130742a8c0bf5763e81a562972d9c213f3b91c2b02ac06fb706817e642d6766d644d907dfd0fe09c8bbe760fbd8decca95208904dc6bff68b757d1fa1ff850eaf1447a7592ddb5e81f295f5f944e18dc620aeb96eddfb7938f8a3531d74a78df3e8db6cbd6fdc4365fdde3f2b9839e020098467f7be7a22e78f322265a3e01b80b97d2829aa2a17c56ce45006fff89677bc7c9c6520eb7568e1a96e3473d7d60ec2657a640df820ba63a9319c8c09da22a01000ebfb7cc1aa106704b2178e9423036378e125b2af7238ae06a0907e0c2ccc7f0c053e3ee72c79b2e6ddf470de452a2f4297e7a7f3582ee818d3
+Entropy.9 = 0b8b66c4a6fee647cac32bad5a11d98a86239059082cbf4369f8266288f1c169
+Nonce.9 = 73eca8a8a3bc1847bc198dcffd17425d
+Output.9 = c39a83bcc27acb6a436d7ed496dbb7ea17bd7d2daa3f4f7d5228ecf6f17fedb4d1c425128606b9188bbdeb80a10b9e4df8453bbe1d9c193b6785dcbde3a552bf0affc92f57427d8995c5d03b6f71feb2357634e93e85cc9907bd5528258d54db8fbfa8ecd5af5a3a675916977d6bef69bd2b25f9ef320684c3c0fa49754933e84fe496f61f9efe0770e3e3d893ae081ce347bb7bd3540402864c31305fed1ca8db00dc2a2ff820fd131a7cdbbce1aca08f9ca08edafea299b3abea97ab4f46a76ad3feb34a8ce72de0f0ef64ed7fa255ec92b12bec61621ca6492b63e76a975b72e59d2c8a070a15e7641d0a0db40772ee005a7987798dc59d34c7615b38c3ce
+Entropy.10 = 8faf72bd73374b5bf519417ced57dee0bb01c571d1548f7e2bc46195e21d768c
+Nonce.10 = 59ab29dbed76070b9258fc4222b181c4
+Output.10 = e946b4bee41de29082548275ab4209246c2d07508da801725f9daea8fbf9b3384c535be59c6e92a3c582f95a33cc9558255243169d0498c6ec2131e2c2be93ff9d8e0a9591d76bcecdda03b40aff3d5a001f4a61147294c4192e4a7cc90f1f57d1797271857f5c5820ca89d71c485c7b78ba1c9335d35f2c0eb74ad94085344df073b6bb4a950937bbdb85a33d3339d0b014117974c0e546ac0d36a13789edb31fbbad1eb0f36cce6203faa5e5f2aa8e15cc32fc473e4dabddcab3b856533eb45bcc7e3ad2ab4cbbc08f15ebce24f4f4ee0b7e096b6a27b59165584ec362578c319aa66e8a824956f5f9401c0c026d8412649be75c48d5a9d9d7af47a6f3f293
+Entropy.11 = 651779d201cbca886d6162cf5a4454fda9dd98918fc7c42aeece0847fb51c608
+Nonce.11 = 1dc96c75c0a1730062d1eb4f6bd19f06
+Output.11 = ad9ae444f5fb779d3336322f2af2956b851498e71877c506f8124c772dfa27f86a9fdab8b5e88b39c204bebe6d706bccf205a8524a7304f2a982341b26240719cbefca0adf09a118d447c173622189fe710dd272d9b10cb89c4e3b04f8729f664ef657beb1f6c3b35c580caa1ab96d3cfdc774633f29009cb2880f7370dbfc23c56729a4da86615e70bf378fa140512c056ceb417e5d8f0dfd498fb6b2eca31eae755bf0b67d30e132ebc22fc9e499aef98ce64dfe18580112d7fb16fd21b74f579d082c8f11bc10c3ba4471266eca17620398b81341cb8f6e9362afd012d94a8fe5a40838f5177d6990dfc236dec5aa6fe3fc9504d3e35ea9cfe62a5e296db6
+Entropy.12 = 3927db9cd0fe4551cc89c5f4503e7d3238ce1cd674b9614f5ca5166eae69521c
+Nonce.12 = d5e7c45dc3108368a22c1d449e89b084
+Output.12 = 953d87a53e3291608727b17a9a4408615a12958133ed6ccf0dc35b4c27f7c64441e795c08b2e379851a95bab9d83338dcff384011ba6de3a61b62eae465d589b705482d5fe8697bc68bd061f49ae07749e2b259f6d96d40c763181c6c6bf71d89ac22f59fbedc82e63925a2068e9a1ce3243899a980c8650ebda07cd681fc99d0e46919fa379eb84443427208a5f173ead9cb75be4e2a89a16f25c632ef4ae3f1c7819ff0d6b3cd204fc98ae489a31625194e30a4edb5a57aea04187823fdbbfcfa9d5d4cb0ccec5a10985bf2cba6fd245b5cbbf4c8fde250d02b3a7ccb7ea2bd043ebe654eaab650c97c8394f07088037c9ac12d666b7686b2f470eaa690216
+Entropy.13 = c7710ca435d5fe4b980e2aeb847b8073368a1e41ae2fe51dc5c76a12aebf22e4
+Nonce.13 = 10db159ade08e39ec81ee8ecb87c3332
+Output.13 = 7129640f6dc744cae4ab716689bafbc55d198c8e49e53b22eafe7eef106e29dcf9500192f6dfb9a709a448ba391d46d127028ab01a7bbc614f93621c10277ad86aa2e1d9c77b34849c3a082b9a28aaf27f13894f7472cffacfc33b5e0f9f60e58b191ea710bff020533a60fbd110808af1422afad9d35fe75cdee60368920cd27a2667e94d334a56ce0ad9cd726a9e7af237b5fdda0c457d42f5400ae94d0199cd84bbe54cfa709661b5714c2f7f19393bf0ef66c17fb29ed2f4c2bafd1bf1a13121c0d43747d9f549939e286f7c67ab8f9c13f140dab49bcd402fd107327340246365341c4672a5534863676ea058d8206c25645424b688d8fa9ed6f8092c8a
+Entropy.14 = 337373a24fe76f025575b3dbd7eeedd03d3459d6ef44cd53335a9c4963cc45de
+Nonce.14 = ebbea7e8e1a3a45c58044b65ab7688b9
+Output.14 = 21ae4510a133fa0906c873eb73e00d777b68a45a1de8759b1497f5146f0c45cf612b02e972ec93ebccbb85c9adaf0f5942fcfbb3b808482f05497f2f4734dd6d42c8413e1bd1bad10463dd4b4cf29f1662c15efc6d24955b1e54a60508d9ed008c9d29f8a6bddfe564c21473271350137452f4601179af37e19d553ec738539cfd7a8df17f07e1f9db5df776256e3c00199997307de394a8ba41be2829defbd8105fcb3cda215219fecb607eb1e7137a29eef188ca7eb349d2d1fe27edc2526ccc6d8f1af7eec9c06910f3909907f966d5904b32577f2715cc32ac08f1b5e25a734716ffddf60c57d422b515ce817b605ead2f875db7a789e351b660704f0cbc
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 65004ce396e18c5271a336b04fe843d35507d2d26a461792e19c57861aca8e36
+Nonce.0 = 238745ee7e7f3f4fb1b077a946791214
+AdditionalInputA.0 = 0dc48dd1c82edb83d2273efa04025902e67469b1c2eaa3b69209a3d0970b7629
+AdditionalInputB.0 = a632c8a7089a05b6dbfe610e4e1dddadf539098d878017f0cb5fe8debeca0cc7
+Output.0 = b2b33bbea1cfbd663cf04869a4add52835754f52aa341d32754141ece3e396546745dfe0cf2871b3aac8b997ae3b4e04b0cdda4d9bf78c6a41819687be18c27fdbe95e170bb96e3813193a8e9bff55f75fcbf3174a74d97a529b933214b91c8512cd4645ce9f0e3164a1e15fef337a78d512e60db3c91190d96bc9ef62188102626380f130b6b1536a3450604552c46e0a5bb2fcb0c0b70a98bbe238b8fae9d74d100fe789503e53d3db7699d9ba39a0b8ccb76354e54c90753a9cc5f5ddb19bb6b388e9f4d6f01fdda589c89e08764dd735aa4d4ea31db17d5fc83755684b77142928cfc370358bbcc65cb1412b2ec9be5d52b84fb389330a68bc9cf2a03379
+Entropy.1 = 4bb1834280b0f17bf106094792f29e519987c8b82517cf4c7a6ad43712ce33bf
+Nonce.1 = a1a798d536bcfd05c6de26d790936e1a
+AdditionalInputA.1 = a4f4af98af2c1452cfdf2c85a7b09325967258ebc3f97ab031575ff4148f970b
+AdditionalInputB.1 = 6f37aceac37cc913addea0f52b71b1faca2445043a6446bcf1d1a7769adc6d16
+Output.1 = 8b7df4d489426784b8fd50db864fc580a7637b6693510345a2901b4d7482ce272386e2e52ecdee0bd5c678c383fc16bb4685024158879e8609f1fd93c2c2d236aec05cc70dddb6a9f5472596eb1eacea173a5fca3cc62846a57899fc0c9787e7a9d70b5c0809c56de846b9e43ebc69b42376f59b5428a043650b400a438ed2bf3e1a1952d7e96a4d653da7fd5fedfa914c1fb92c7d3c41477b512cd117a29f78a1c7b2b41fbd7d7d56e58d489d5683ed6643f88b9346bf541a69f1ef1dc67069569acd9fefbc005d0b8158dc573bdfbf8dd0799ad1090b6649085d61bf0a4ade98a3a114346c5c9d357e126b90fc745e8ea707d9d69dc2e7bac3801e7ba18426
+Entropy.2 = b7871ef8cf6a585a2d61206b3d86cf6d8fec7bd1780c9f221eb5b8626a59dc5d
+Nonce.2 = 275e760275885a5e66d7ca03308a3e0c
+AdditionalInputA.2 = 2fb7c9f6326516189584c8b3c290a8c50c480dbab6fe37935c7d5c0a996ea68f
+AdditionalInputB.2 = 60c409d342067d2b36e01b9c8d0b08d55c5b1e9da615916b5d44e8882d86254c
+Output.2 = 637b4d6d51b148c81c0963317b60ed72e69507aaf7a3622c98052e2526a69170e216d6c71bca8db1b07ecc7d52f0d841522741c59e8fc51d60c3d248b2f13b631c6b4e50c72ac872d57784b19720b290b078585c294704b707f301458323cf29045cd0b38018479829b208eb80c1d4cdb12c8da3cf3b141cdf26f9da21c40a588cc70ae4a70975be60ba399abc7b719d40e36c6ae0bf62acd2ee676aa81d7006307375c9553ce1de7e0915e2ae034f0e3270cdf78fdf28c2955af4f7665caae274abf11cebd6de12be719704a4865879e7002d5dce75cdf34eabec219c5f635f05023b6f45e8e837c48d56722eeaf09926b316fed39f5e632c29ef0d32140bf5
+Entropy.3 = c5a84d5e827a17bba96a1f3c2bc1f71e234143d7deab8499d5d96d21952708c8
+Nonce.3 = ec028c6f19e44b5139856115b125917d
+AdditionalInputA.3 = a2cb9280a6f5466b37af0da2b78cd6ee19645d20965b7163216401d4d59f961e
+AdditionalInputB.3 = 7ecd7efe261b4676e93d92bf867ab872989185947af12f9c68cb8de432ccab56
+Output.3 = 9551c9ec17d1bbeac3d6f04f2d8a8d2e7643e3339956dcf51eeb2875aeaafef0604f529cae938204f5d58df042ba9c4a0d135a09e5512f3cd9e04c8087c58b9caef0f6a46a6b0ccd1688b77134487447e0625ce4414c768527b8f89b3dfb71c3e5ca34b653c9b5e506d514789afbbb38c63c55155b3489e5dfb6e1e2d4750432510ec050b82faadb3b52727a00fbab39717dcbae41895f093d0b27e47592bb6ec287da1a4c2fe1cf8ee407545885af0e58dcc5a50e3c48a792a87e0ba347266fdab8825dcbb323a62ac602eae8a5f7bc6616f6be459c7ba928b3e311964c97f1d3a56e317bce5c37306a6b9dd1cfffea1369f948b4af9ffb5e959183fbcf2966
+Entropy.4 = d24d5c090aad7cd498c8b11869fd512c7a0e5340520c8523128202a1a04013a3
+Nonce.4 = 88a4bf3203001c04eb1b7b78519656b6
+AdditionalInputA.4 = cf75784d2cf9de1df3a07886fb21e6b14ef822ed38341e0a2805460c1ab0725d
+AdditionalInputB.4 = 65e36f63766d717c445845f1e6d48c3f8f79c9fd991a26303398fdf404b4b429
+Output.4 = eaec99b17173d5028bdaed59c931ceea295a76172d2dc4db609368d2a76426d4ac14e4cf4960de1b449aa6fe0a6d1a682784f28388ace97c7f2bc7afda185417bd13cfc26fb9f068c58d74da0d38afb70d591e770fe7a79184ab47c8c70f4a3099752b4c48bc2d4a7598adac36f9e6c792d76b696c51a7514fd2a8d757417b8f1bf01500a0082c874c462640434e6ca3fe6fef52f338c01d6fe92ae90672c61b0c3d0e2e5b7bdf95bb87a112060f22ed4f7ce84751432d6564548ea153aef2afdfdd12bd4e92215b49e71fed404b12452dbaaeae4690a15bd14e303c6bf5b99cddc409d88d5a49621fdfe776c487a5ca3d3a9601fd8dd2e6838846a4cf5cf1a7
+Entropy.5 = 9305179466eb9200f276768512ce7aab3abb38fb3e1907dc300c80a89619a17a
+Nonce.5 = f8ec3bf1e181c40d45120aebc73e1b20
+AdditionalInputA.5 = 566d651a48b4cc08fedbb51ad7b04f05737ceeba64fb6651fd55e4bdcbaa7e58
+AdditionalInputB.5 = ce5dcda71a958623a719ab9451b1c6871e55264e97cfad09779afb919d62f9e5
+Output.5 = e8f6a6070d94dc1d38d33af76e8e9f80c0f0e1c323f2b649f0459c4dd414eafa1c10d20b45b5e7b423cb3f830ee9b9d6018af5aa46148aff30bd93b234dd7280f639c88ebbd5dd4ac27792b1f93fb83f71218d9597cc8c670912c766aee486b56750b0fbc48c496289d8626c7754e21578139430596ffa0b9cba28495adde43f26ef041765058d0b4934efdb0cf1095658c53f2dad5e6495445d7f5c4568972172f611242f67271aba9482c3bb8c8424bc2b18d1cd6f707abaa504ef3d0da9971247f4b09c082129700e91fe4730744f80708c86bfd00488d51c459cbe8475ba98a4e0352f93353b787fb7486a65607e0dab9b8b349fadbfe9c66d8302cfb1f9
+Entropy.6 = 5323118856f8ced58f32533d806c07c8a93746ccf8a94654d527c12975827e31
+Nonce.6 = d00a0aefe3b648daf24aa0db74953abb
+AdditionalInputA.6 = b2dee42019a3d6f3379fb8fbea31db7b776380cc3ad19f0e834512466a6e6a13
+AdditionalInputB.6 = 4ca59a3bb1cb96db8b18da8c44d1374ffce065741df3283fe9d19eab6e8a83d4
+Output.6 = 9b719b95bb115a0b590bd0621577eda821cd76aa4f8617cbdfcc05f9d5208eeef558a0ad6078349ca8f14527962aaf319f66c8d35b2f9087385efe07b30b0e08263aae970f9f09567579ae1fa6e981146ae47c481d503799518e8ab2ad08ebb47c67bdceb4f724570c2405d1a953f73821bfeb91bb40ba138906f09f0529dd635a35118f48c6cb47c581bdffdf6540a3695e2809f4a370bd0dedd65575498cd1a5737c5a0941dbdbe8ca28d6d60e46cbe5b21fc7712f66fe1771a51f25befc4854072062e6db75100292d5b34e3ec83b29504f769cf3b69a33b27dd77eed1822613b3d31f84a8647be629bae7538572dd6af6d3f6f6834425d34069afee97ce0
+Entropy.7 = ef27aa55ef8bcd299df83a948c4f8ffe21f9919420070c638a6da652b66e4669
+Nonce.7 = 5249def699dc3f59cabab112c0968963
+AdditionalInputA.7 = b5b3a2b1e674a618b1409023b7d96a885784e5d1957f4de0118f7d18d8f80215
+AdditionalInputB.7 = 6c58c210a477d269a1b2f95d496293605767ca8da5d5663271a31dd3a2f608c6
+Output.7 = d9e8c02677edfc17620fc244268f77f51caee50edec6d3cec04fab592b3609a6e93c7d43f98d67e55832337c919615d7f4004bf329295f0345ca087e0fd0a09ef8b1385aa1ca053708823e60c9ac056014eb8189819ee458d42983bcdef5954c8eefda5e65fcb8f100585ee734c1bf9c8a531397d0a798d39bb194a3cd064e1903674b1c2aaa7009326385226c9c1175ce8f6c4890d54e5b351db33a8f0895222a6ef9df1f2a539972f44534f6dde0ec7e4209a20aca0b93a9684bade19a1f787847dcf394840bb8a126f87cef5b2ab6db2846842e8da68f20ce4f6711f93cae55a7f9b5c249f807260981ec56a31b209ea2c3d434273ca5504d3ad3c9570147
+Entropy.8 = e064ea6c41b85a7f34985c41515c78ed3db807781f66bc4626243617ef57eb3a
+Nonce.8 = 59fb66314abe71ecbfe2e790168b49d8
+AdditionalInputA.8 = 82f23e1bf1e454b0118a2f8a888073bcd7914bd9da765a1b1aa047ebc5ee0967
+AdditionalInputB.8 = fd2da0b38e810a533d537faa1896e549eee244880e2aca61a5771e7171897406
+Output.8 = ed8df37d9d73e402a04a317a58127354492ae5f949a3b3269b595f25990e5403e88aa5624b86132f564ee75db9e63cd7c6b53adbe58487e17ab3afe0db70ef5e36a7b338974227f8cbaabe253a1455da9f7a54adf238546fe687a60bb272a34f97368412f9dd1b2b9ec5a65be9711574be4a3ad4ec64ed6279946366359545e4e5e8698cf300d361ded6af055255c3640843f4085ffd0b1c3ada6bcef1a790eb03ec468df621f64e0d12ba9d27ff7a4949bcabcb96eff46a76d11b3279943cf63b9dddc4706e4689225b9954ab17f5a60b8d111442763a3ac39698f7869d4e20fca3096ebc2613887aaa3ecfb626aade5ee3ad4974221052c0cef0f8ef2caf40
+Entropy.9 = 3b43c5876255ec8f831783e11befe2d92f18ea507cb41fabd5d41ac3f17be66b
+Nonce.9 = 53d0654ffd0a34abaf4c8a79662c82f1
+AdditionalInputA.9 = ee9535846d8c405908b5f232f4320644e2d9bcc8a53fe7774a92749274c7e550
+AdditionalInputB.9 = 2a692a1dc9a652fd559305c9ab07c9344fd7769dca6a7cfa29190bacc78bb2d2
+Output.9 = 1a9cb111016c210b9c7b95f82d2e34a3472b41f3b92063c85edbeca182800ff8df40a92d11e3a23b85d097acd073986e77f2790ef38c13babc9f04cf861c01af85492016c44fc117587b6813ab0b1f634657e1c689d1b9f375c5972bad3abb3726e574caec0e098c93c18aaf7221a6d8edc2bc3d89f44adf09d8995efa26b16b481a44b3de122ed32d5ffcbfd55cd4c840c745fbe5161aa6ebddca12ac855955ba06a46e37ec42f530a9d413e41c19043c315999131d76f25873d5686dac77d008c9546dc86bea12ee2c79fb3cee8d240dbe6a10e10a8a968be143803ec6787ad55ef79b6f06504bf368b2e296584a1ca1ea6f92338df240bde539edcb0d62a8
+Entropy.10 = 5db87abb653ccac39269f9ae8cc9034bd6224141f8118277736e4f95efca5ee4
+Nonce.10 = ca2b95330836140b72793faca3ab2424
+AdditionalInputA.10 = 0391c29dc29ec9fe2c1eb383d67b23a6656cf915b3604f1f0fb624fd57a95d1a
+AdditionalInputB.10 = 24fa10b718565f97d95551dc79125601da8fd9a14067e6f29b747bed5cf7a90b
+Output.10 = 8d03b1085a5a69f6c3a381a635bf6fc2399c0280b531a6e64768bda5b1257aade71dfe87518256a8f3ea75629018b1d95047b29b7f3ea0f01144b9dfa30b3eb463d5738e41b7f763f9e00a9c3bf80e55aaee362953a98220e6d980b6dc162c5d9a19375105571b53e1a5e264085abdb8e726210a3b7a9ca92c8cf1fe00db067dc7b3eeb950e570b796be4d9cef7984a3794e79c88a6e20b70f9db3682badfdf62cf2404f84b4e7460ab72f59de57db4afcea16be99d9c81134f0e9b15debbede3615ffe7825ec76bc19c1ba62681ce98f46f504a445d2fc29313446b3aa5a221a0ce5a8eed30a9e0f66127edbccd752d826844f110215cb98b05c0ce54da3f86
+Entropy.11 = 66184f9c658c76916ed6dc55020d39aecbc96bd688dc6baf167bb3d5f43df21b
+Nonce.11 = 1431b714e69d44e67614d8b5048ee0ef
+AdditionalInputA.11 = b255c59043cbb66cc8b728e0ce6353df7fc68ce02db7c7b8fbed55f8945ba9cd
+AdditionalInputB.11 = f21d925824bda64017c42ff0661a67c2c19959aaab81ef24bc1a9014ac823a36
+Output.11 = 4c86b7b0728754530e727168fc18af962e1c6db4586f9beeaf42996a24909f353397b27e0458f2a3af81dd5e51a636da139c89a802ba69875cca95caa491d2254a8047a85087e92ad34d9029ef2d8c62ab1ebeba4aa66a52a895987cd5812b39663e5e020974e6380dd100ca9ad68162cfc9921516e8b8e6ea2bcfe51cc90544a86cef0f64c0780c4a30635928f35e58e28628ebde6a3f3ab9cde64633afb32fcd6fbd2cc2a6f6a5435f509517f694df2e07d95b03aa977ad3ca8b477c0320a295bda792cdd7094817972ec69a5c13d72163387fa41665c1d65112e74fa51829bbef3725fcadd38a018198b7662c7c570a2665ef711a3731242ad106610d77da
+Entropy.12 = d3ca7216ef039be1fb5a30d1de5cdb047aa649da4e8a3397332a53df3886a31a
+Nonce.12 = 622a8e801a52963b468ec4b115f4beef
+AdditionalInputA.12 = 156d7675581a8384dc98f460970e79d92aeb23544f248531a3b4a25858a06f19
+AdditionalInputB.12 = 6a856d92123f7df0c86041dd3b102f7fe5b8b7ebc99003fa83598254a04ea762
+Output.12 = 3c041b78052f73efa2ddc80c7d10381527c8267743bf7d82d312c260cadbf3703df340f01db4ecd91985c444ad0ae73d87fc9d98f988f8e1041896991c3eb347f8bc8932e9ef785a4d002b9ea7fb03d9b6ae0e89bb829f70e6e7924aaa50256995c32b2b0551d1b6c1494167662b2c529076d6766fdba86b9924eaa2f7e5463fe09ffab3118e50c1d8bf70b65225322323bcdc427e4c62ae154981863eebab05fce8bf38242c4ba5c27ad8debcbc1b0f7b00323c8fa075f796067af0c19de875ee2a5083a3696d2e57044c658d396a69918e762cb0a672d56ce5badf8279d33575e010e5e671b773a2beb4608ad7758e4856d2305f60482fceb1736eebca23dd
+Entropy.13 = 44a57d527b5613552d7375b36f2a9e8abab4103266c1dc19926e8a98cb5b24da
+Nonce.13 = ed00d22df412b47787849e6a72a2360d
+AdditionalInputA.13 = 42f3d3865efbafedfad494be062e2eba3057c4503674d40a1ea0a8003606a21f
+AdditionalInputB.13 = 2d1eb96bed9c7da9843b9d6d26aa7081e76cc2cbb0fea9c63f3d271948162918
+Output.13 = 324258daf569cedda8d25fc6316c76be91e6e7a886d0866882a3a3260f7d485513fe8b54d0efbaf64c2cecbc35c68b399268df9b5de166a51b4ade63120b231050175a6c3006dc55ac1b4d49a856242155d6f091860dd74186a1978a9a966802787a5a1ae6f6258b50cb998593a9469ec631a0728b2f6cc1031ce88304d39b5393d614bb4cd18174576da66b3f8be72538e38e5d47500308ecf0fbf14994e32db460de082a25c328d11419869f2c9f3fec70e4ea675e79dbdedc9bd9ee493f16740f88ed7d56e43decddde2ce1befb96d4b11bdeeff6231a5606484c4c6f072764e23a47df225de192aecbdf1a6b3c5447212c0b35855304c54e0a9536c2c1cf
+Entropy.14 = b0653a76c3fb3837d347c979b9b6d1434021c7ddaabc5eec85393c30d98d64fa
+Nonce.14 = 836c9e8b7fc418ec0554a0a21f48f30a
+AdditionalInputA.14 = 771e91743429c40a2e3ececc9a3d73a92336c9c988c5d9dde47563b6317c6f7b
+AdditionalInputB.14 = ae1a58611aa54df3c655a1f20985552ed9e3610e92170a0de1a4573a5a1f93d7
+Output.14 = b2534bf690444513bdfecb35bd616b0de47b7cca7f8ab9c5e823b468da62855601b59c6bb75cf34fe3dbc7f795536b9619d243c0f6960895d6710130fbfda2a0bff803e856f1cf21a63e86e59be0d6da7516b697e9ff95c341913ff27c8abe10e6af1b7ad8dec9f7aab46b8d35c103f9bff3016b39ec24026a7b582f6e95261031f734e29a1b64c65639cf238381e5f7e31da624ad24290930501132c860118b6c59052aaa7cf982486219431311453a431a1cf50deaf068e2f9993c0ab851c9aec72be8f7c5c57ed03c488befe6ffc256efe6db52b7734c042b69a5ed74e2593c4788c5fa8a03a5017b927bb8f1c8262925d734c5604639a9b441187b0d95e3
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 817aeb8122d0917c53e8418ac6eee6c99dc3b481c9fc7626bed01285aa54ef5e
+Nonce.0 = 90e1381793a3b028c0c5e449e21bf95e
+PersonalisationString.0 = a955157f807bcb16ba6f213ecff5079081b361877db855d6e3063482307f7ed2
+Output.0 = a5eee0d85f5b5e3dbe452549e2dee5c74f56488d4c64562407818c70ddba651a4600bb83d3ff8df38f7e862e86a6d7461f1e5e422042b9b88ff954710d6848df69b568ea50f24fb3f8d4cc1e31aa8e6662b8a0a147557122aa771bde792c4e40d9f850252ef9fe36d273298d1936a64377a24ccfc9f4dc26967fd7f91479193ccfac2a5486fbada7db2beafd8fd516d800bdb2d88e18770064757fe1e14a65ffc9577d5fb262c8d2e394a27d9686e1d353f12da21e65a41a4076275d5a9beaf875f516e6f27aad0e85cc3315371efb33fc3f10cfc97861700bcf3f8b2b561463e443994f7ee1b2a29aec92a0e0def2fa397e6b6f04634d18d93570abc2dd0a5a
+Entropy.1 = 361bc3f1939172d5a0e3f20eec7d26fb8966ce4bde21cb07fd2eb00b0b9a6169
+Nonce.1 = e331cb224e5afd8e7af80bdcf66d24fd
+PersonalisationString.1 = b045395a04c8c66daa3a64dd7427e3ac7551df67083bca9c6e8ccec5de93d746
+Output.1 = 5a75fe2e7277b2b82273321f9a94b6c5e0ec72a216f7dedb67dd78a1a4428dd083f48c4929ce7861641191b00f91a1a56a2c280b3da234173377401b1650d3b92b6799c5e73236c7630b30421a694448aadfb7a2541c514e061f60e11814e81f982486e26b14b5280a620434802c8c0e725f18316c8416d9a77e682111a1c6c0d3ed8341b13fc3f35e22e4e8686cc870f61af68d650acaee8a4d5e85293cfc2385dcc70667c753deef62c17ff1a69931b5f8431bdd3ac22e04746b380dc78bf3642dfb9cc6e67b82c3bbc9160e77cb0556515451b4ad1a212c93724f4eee95429f60918e4ed8710b94ab63f2c4b106aa2fba439ed484e7ae8b36cd8c3b0bcac3
+Entropy.2 = c22d5e0d0b90201476f12ad0a5c4a6f825354f20bdaa5a0b0fd66cb21ebbcece
+Nonce.2 = 9bce3473f1b59d0f2d9c330e897d043b
+PersonalisationString.2 = 7e750fc176910b54649685c2fb32ac230477d841798976439a4818632ae27723
+Output.2 = 016c4a3de0558ab9ecec3e5c5ffa2c006d2ff2ab05304a7c7ad2acacae941d005e78bebfff592cc21e3cf6b190085835530950bd2b66225bbfb926f696223b8e8e0c78f317b927786fb5902965f6ec1753e56356c5c08966a670a34233f7481a4c15fa68fa79d4d6869287e0c1d3f53682d78c4c077a440694bd9d4c328d37ce794cb207222b1a70cb8c1a56c72b362ca91f78e91feced6b899fb56031e11095eed8c13817df532a06b5177566e1776b77503099473e21a3672dc6a29b959379c6ead06e0394790d72fac35954d81b9c5ea16a04125aceb1daf85f3a21e0b6eed54fbe641c700934575b0be11c7257a7a80d66ff50ad6d610e5a39d37ace782e
+Entropy.3 = 66665a56b7c7fc57851475903a28eba6294c8cfeb267164d53895f167e0868cf
+Nonce.3 = bea9c55fa782318c31209649338066f0
+PersonalisationString.3 = cb105533e41126fb2a824c036b3cfb66dc114be8b409ee511c9ffed0b45da084
+Output.3 = 6df8890f9ffe35015b3b4351a0520c266499fd08bdefd474a2fd77bc8483382ac46b49d3cc7cc88aaf728756651b0d4d8ca7eebd2f1d9c9c2159f62781882042c9258c59e7e50bffb58bdcd1b7b3f218efabbcb9f2f76c19fecc2fb3487c8f675a0e3b297c3ebd007c478baa815443cbdcd67ee1fd6d16b746387b9193fc5530157c0bb5bc34205db53084f0af81dec6024acea4c445584e8c432231f224a6ce0d659b25a887e068eef35e69497faae09dd554b323f417a3392799618f524dcad8b75a30fbf8ad131aebb8abe383ae77fbd91b15aac7719119fa4aaf9a091735a8688b96a6d3bc683313bd749e4a3d7dac3a1b4d68bf446b74bb73584a13008a
+Entropy.4 = 7154d7c79e3c5d084f35a935d75d4aed9f9bcb2e38b48502cc6aa12966fd62a0
+Nonce.4 = 4eb3709e8ddf142c64aae00a6cddef64
+PersonalisationString.4 = b0a0eb6a778f3b8a244de21607362d441127c80146c12fbfc52f71f71cc37193
+Output.4 = 159c424308885870464bca92fd917fbfb96c0e7c8e8d1f6f6f658272d6749bcb315bc7c15e20f601f9ae4110b153bf011b28de19aaddd3186b6aa2b9c0975486dc534ab06e19276cf92fa3ac8919fe4344b0e02967b2ec6130965daf4700f9eada02733df2c4e0ead926f3f69c6c8019b1eec72674a617195a8fefc769cf96e7576134cb26d8023a5b6ab96d58da2313699a75e2e1fb17386e5cb1b38fe435c2768cdd799fbbcce67d0dabfbe42ea12d50dba80f20c1de1ea8abbe66d9d3bbfddbed6db7dff72e2c596f8f70a5d0206fd041ed5a20161bd8c7550a0929b5e35cdf22871c25ee0b92e284f4598f92e348ea35ac9e4a9a93d67619cb1628c149b7
+Entropy.5 = 633a7564cbc72526d5e71718216d07768be27580711fb84ef32e6d7b06f47549
+Nonce.5 = ab841d51f3ab6a5242027e823c5c7038
+PersonalisationString.5 = be890eb2e33801fa2ef030d719376d69fb57ed165a176b743853538037e57c74
+Output.5 = b8740ec92271e2730aadf58fa3f0a42a1e9b1bd131cae290c882a7cf27762e0208ad3e21963b7622b9329e68ce1fd2db7c634b51a165601630957042e3795704834cc64223215c5ddd877b9be7a6cd1a63c9c15fab52018bff5c9c9e5c1181314c0e3318b98b6caf828cdffb2af6997ce62a598e12d4e7bbb3fd5f40a2a6ad84e4d10e7d0f68cd85e231d2c21a65588b571ff272bed2fcde15566caad4a76e4c273815f7dc883d4bdc16a311156d1f948f69684bd5fce7781439c28cce3e6fb40f9c9681a484f0d5a072b486b85b3a0ed5670b0d83dbfa4350a3e9422e2527789bf6f1df2c4cfaed345fee21b6e003c61097946506fe7e8318a9b12be6aba2d1
+Entropy.6 = 2ad728895a8e9a65a17f4c6bc49205353188f771ae113028a60292a7937bf7a9
+Nonce.6 = b67ac3e318d1ededd77c50c9543b23fa
+PersonalisationString.6 = 96a4faf4462a176345e48ddbde783052a733c1fa15cc42f9cf6b84a3cb8f3c92
+Output.6 = 6680b2e8b1e88ab0e00eb80c3dda0b14d7f02ba8e4daebc698642623ae4699cf5a4b9e428b165ef90026d33a71d1cd513a5252d600b0dea3f436e2263663fcdcbf36e685cea6b9f684530780ed3657f9af4e3e1ffc81c1ce76dc731e9b3c1e5a88a36c9e95c3efb2a204637b3d2ed94a3bdaf9155230f6287227bcb743fb360c33d059b39f978fe94216a54e39d5e0f0490a42107390271bb6d10015278bc6b50e79b95b76bbf27a2f37b2afd5da61fceec5b484ea74d6cddb34ba5c2736ca9b7ad0d334e3ba596611d224a7c51ab4777cacd4a9bbb66c46b6988ae03c1fbe8f60c8fa23ac1689a85a19307c98d149f65b856f2d760453bf7a1c8041b948affb
+Entropy.7 = ae6ef33071077fb24135ebf9120f795ef6aaa3c8505b8d3984b22880e385f49a
+Nonce.7 = 715658156bc021a4bcd193e5a2ac71a5
+PersonalisationString.7 = 8ab53e1458fb557964f0f2402da861e632393c1affc3ed324d4b6dd8e65c584d
+Output.7 = fc8781ba00efe3bf57d7beb9c1f25a604bdf45c15361ea7f742dd976781a9cd422a7346e5c9bcec222f53eaa53230c63c10a5ce2daf5a7069d1fd2b9dccb4c57387f6f38c705a3bfd3f117f9ee97079f44cf5f01d64065f5fdd9c4a3a524d3fbad99b67ba5f8f99cf91f93a662d67267f3c63ad9f0831b9a74eb7dcf50b0ab8c1a29c4573eb38ab556ed76f5304dc96373b9785bce9b30d81135dbcd9bcb5ec67fd72806334602124a2cff24921e2cf3a499922ede97a15eb066eefd2c447f5dbed7f193567ad4c8e109d236d01909291e118c938aa853e0292dec054bd40194ae603857355807c2e73372f38a2d6f7175850a807e798daf164c9a668316a6ba
+Entropy.8 = 84418e25f9d919c1e4b2e599346c4c0e6d56baf450d297863457a6659f40f8c7
+Nonce.8 = 3101341550b803c626559bc5ad77b629
+PersonalisationString.8 = 0f876d2e02da0970dcf0673795862666a4915c0190cd7dcd5e30182aa3640872
+Output.8 = 8aad39bbcb00432b9beb63a88d2ac3046286980a079ba0141fc875a837c120734c50f15e7e7248c14e13c5c8daa2dbd9a03de205ea0c00492a48cebe8a995c60d051f396447c3ee4c74f5a67fad6eca4d34896be95bb28149c293939b9b86e734e12ae18f22acdae026a9686aa4e7ad373c93cb5f9fa9950cf0a70a870fa49f79885554d015e603bdfd87a0a5f6a9cbe3c719d692d10f8c8d2dd10d23fd94866ce2b2016acc22b08e16d4ff0af5727a1d4fa29dc0bfa53d506de7def8f140c5c8a0922415207f4d21ffd2c13da38e21c7071beb5fe340492c545ec6e6d942403cf32d32b3b17f5c966453a9df28597ff3a8594a37a17929d2c759879aa905fbc
+Entropy.9 = 298dc1e39e49d3b43da34126df0542194516c00e4be461cf43d946e057c70df1
+Nonce.9 = 9118a385d2a8d788be53ad4621c42554
+PersonalisationString.9 = 147cd977a6e77928fbfdc29a6ad3ca1baab50c84efd592498465346d5673ee62
+Output.9 = 3a1d7fb2f86ff8921aea91310c61a1613d441402cfb71e3b78da7f811cf249f280742972fadd78f37719e37be78ebdebff95e2568951a4b8eda6819673c4872996f1fa9fcbb8bd99ad31cadd795b7e8100179666be0975116630ff55bed336fcee8aba1f2eb8b559f2a96734bdee9474e66ef1f655e4e08b736903e9256b104251bfcf3de7d9c3399b3db824f4452baa487dcbd8d05e80a5501682c1f2936fccd6c500f1d646b470260bb59acc37df03040999f3be8aa705f480a65efbf4282c786df4571cba381389b5c1732367b4c8292f009653cf2039dcd6e0c1de4286f70f821477cef404b8d9a14f65585b8cc177191577c5243434b02e37c753cd6971
+Entropy.10 = 4b72ce006313008e8174f1681fe10322bf185f31a8db8736bdef94e035e43050
+Nonce.10 = 5967fa9c75a93c0e079ffc562e5fbb6d
+PersonalisationString.10 = f3cdaa0a7ee5bbb944fadfeb32f151f76fb666b87879146af06110a2463b9b79
+Output.10 = 4a763a13ea5f1f61fbaeacd3cd0f7df564d88aaae84cac8b342eaf739f0f1ec49c382ee27b5ce07bfd0794f95c015d796852b8f2645bcc25d70a1f4fb8c1f2e042ec97c120d26a89c71b6d2123076afb82978f59c57d333e5a5710581d8695ecbb8734c902b3a0050cdeff4f59316fa3201a23c56d38d4339c635372353105000062259a9700217fa70165de95794bf8d3081f4c7b47948000a77cc787f39502c2ff2cfabba0b6ef7f52f6e6eda41d7646578bb93e5753c1541b6eeda7460acc1c5be3fe959ce709aee31e025bb5fb7517ddab28be4a725af6c94a3bf06f2039a8e3beeb224e5aa50d068a9dbcdf0cd461c65da1fedb1949832f3fa1bfbb6efe
+Entropy.11 = 2b525261b3c1978ddfa0bcc4ce9e825778f6ab04563c3a013c1e38e69aba21fe
+Nonce.11 = f294648a4acbec0ad48e2efd66c55a58
+PersonalisationString.11 = fea7926f3aa3338ee68a9e6db66ece6657bb35a274d79a65fe51e2be3b87b37e
+Output.11 = 60a2de6d286227c08602d2d0bc76b4d6b12a5d5acda5862cbff2443b63ad9bc1320d0864b2d3b63933ff323f8ea9f815a28728c7effa585a8f3a33739941f1ead91b1f045c2ef200140c317e8e6c6df67d951b607ebea239d5c7c2a9d436aec9b571d6bff5132a78e4c915a25448c1aa12335e80f9c1a34eddc696b408996c6f436e7f641d2ff391cfc85d395ed3f183c506c0bab8083e6ed8e704e1cd8eae8a990930dce1e5d728d98cdd034884390e521f42c164b784ea031132f5153e3ebf04b82823441688bfb05cbf8370fe25265abe08d088a9235c7657a53de6dc5142c0cd422deabcc6eb79377c733142e686cfe7be4337ef75067c8d191d0f950e57
+Entropy.12 = 5580b093f694f090bf77306ec904c026b66579f3c51102d3b19babc68e157ece
+Nonce.12 = ab7257bd6e808ef2474a487b628ce94a
+PersonalisationString.12 = a79c6b1e57b7512b5c178003eefa6d03f3916dbefd9a39a2e1c5a564d0bf18d5
+Output.12 = 8d7a771fc0a8ea899f1ef41f03feb7ebe947f30165467f9a5ed8e5ac803f7f51cd05d9168ee95d516585cd6d6b943a2093fef4f7a863bd25efbaf6dc33d2a484157452b68cca3a4f50221864905243bfd0f027801167a05244bc61cf263bae21283acd89954800f433c38f3a90e768d1425260eac41f0128807f750fb3fad302b4d1a052c542f28ca04440aa05311b48f4796e09917e3907a984ffb0dfe58ba1a9227999f6fab97280b44e3e951cd32ad49760e83dbf46d28ab7770980feb177c8ccabc8cd1646aa1893000ef3d3cd5d8b7a3080d9b9aeb19378f5a905497794842d103c48957434238d8da01fa89d4bcde7fa3af48b8db062243049d58fbc65
+Entropy.13 = ab21771485af32348fae88e1cf038cd60e2c875a8ef7857f5fc1bb5a432673a8
+Nonce.13 = ba5432bb86fb476f8b70533f304c94b6
+PersonalisationString.13 = c0bf62619671a60389e72da333e230a2af34d5594bc844d3b470fe3e747ce9c5
+Output.13 = a326ae9b147b2094fe07651f32021c5668f234e062a5b90a96a225b2ab0e0fb92645db0ddf087c920d829c06449e2cc497d7570408d80614e7d60bc44aef6f3bf89b850db6e796b72ba4d8586493028b064cb80094911e4151a57634468f1e7055957d40b9520a0d27fd7f99bf679f31e7c94f0d25de533862071b48f84b63879801d6f6ce2e2fdff1ccfdc17a8e0d97d38568999230f716b8b66d00a6adeecf1c72518dd66ef054df6e57d28d1cac28b8bb3544342a1397f89107b25f0668d2f733a288d52bf877e5ec0c807b9cab3f924f48d90e399e7d35ede45db2210a06f38c26f81505c5284ae38757aec9db48868bf9daa7cf784a7b09767464a6dc1a
+Entropy.14 = 155c57577074e6bbbc350223b66f64bd6fd4781d3feef2e6811339664f59b9ee
+Nonce.14 = 78e7f6e9e8e1511bc0ba7f230b65fe47
+PersonalisationString.14 = 37544eb1992fc569ff259946d639a00230ec1196c5565b8f9da62d9ce552e09a
+Output.14 = 0ddbb84e21d4d7110b933bbeaddb35ad81dc1f331ac8293695b30924f2713eca6f93a13d520da4486f32a12412a927d00e3f27009a944056a5805b0e050f5bf6c6bd32c523c1d607d6e3e97b59fd059a610d664396f69961599ce7f0a0cbd1dcff15474ac267e36c0b871c559fd13b7ff0c3fcc11ff8dac26761a42697c3744981cc5c5ac10cd0f3b285c4ceb4a550ecead095f90fb6f53aa302218ede7ed5ae5deac91a83f957d15ee901746d11777b23c327ee811966690f5f253c7c314a2bf2bea73ca46c6c8cc332c3493f9d023029d762fc90e5dddbb838f2225c521f196332812570a17455b3db45306aa9100ca83185395435137a0b961531cbcafc03
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 3a0b3706134d89aff6236423306e3d0bcaaa3bc1c33591aaef33808e67feed08
+Nonce.0 = 6b76a9b7a537dae85f7a23434c3c444e
+PersonalisationString.0 = f1b75afb882dc42969b6deaa9ce5a4f99ae6942aea213c01eb79e4ad87fd10cc
+AdditionalInputA.0 = 1e74d532b1bb937ad9c7f4d40cd7ce8dd7548adb99258e4b7652bb4f540e4289
+AdditionalInputB.0 = f8fa9374086dbbe84b50651cae672219a26dc6a789d35db27bdf6dd2653f8390
+Output.0 = 674404d08561a75d1dd50d47e234afa0d32b0fef15788cafb72a7747924616b8d31a3364ecfc3948e4c129801b3fb40f7c7d689f1f3c11d40cd7b6d94a58b4a8bfdb665cd55c2c2c4682c80f8fe3b292fb2cee32b5f5b1ce9a169fe61787b4a7fc19d27e08b77af6ad617532e92eb0b1671f87a793b8540a02a596e31bffa7c6ea546e35ce962a5d9d97c86ef86fb2d8c7cc7e6c70cb206cfec80c0230ef72b51884cfedccd8547445914f56c1834f3ad3b715bb1c234bdcb0482491d81adc67c020ac11ead0657e461cc53282722c38fac1f025de035e42153f5f56ab81ce34663fe4be62db94f11eff427cbcf17b43b0029b6b8b7d38916c1d4824c7f627f8
+Entropy.1 = 08ef8f495d14708affae3e4c57c21ae39d7bee3e4f9316e0daa8960a145c7d8e
+Nonce.1 = 95c23f6f3ebe662d28df27651110a733
+PersonalisationString.1 = c81056d8c1e97de17d591a99e5c61753bbf5a75e184c36cd85e1969d491f9b9c
+AdditionalInputA.1 = 6739d846dee917b5cd99c48c339fde318a15acfda9d1491974baba8805cc4b26
+AdditionalInputB.1 = 87d458ed9dd19f136aee879ad433aa57226f5124670738839b61d96a71efb2dc
+Output.1 = 463f161eeb198ff1b548915d18f7b7a16f776aa2b968db62a3ffecd55587a2e09540f3c1f7e5c4c2726f224778aa515ef24817b40c678ce7f53aab7672e26c223d898ce8fbab86354b5a5bb1b5c78002039a6dc19125a58ffd810899aa732e2199a41f2ed585a72dfa7346c22dc67ae529ddb871b57b8efefbc2b52f4b4652f7dee1d56d6aec6592edf7a207d3b2b4ce8993194f157175f499c7c354d4c275e01e7e7c38e0398657d651b70b428b307a07bba2c0ac741bb8d36e52d8b7747464eeea73366de1344bdeb44605ec19404c2eef60c4d49ca99c17a6a5f326537597fc539fe7b9ae3171a70afcfb3798d7d608179df9a88aa47aa254d21f85c73fda
+Entropy.2 = 3c65fa29cfd8e881f5a98cb11ab4a97f7e404f52f7d5843d0dfe020fb78d9f65
+Nonce.2 = 1cef291e0ad29c5e30c226947e6fcb1d
+PersonalisationString.2 = f9a452ec430a2541e2b6f77af9d886da1a342aa42fc31bf05e38375cb7a98baa
+AdditionalInputA.2 = e72be2c8e42039bb28638f8a05ab9035640f312d07112a3eae77674f90e5d025
+AdditionalInputB.2 = cedd97d41dfd9902cf9f89bd11727685f9caa0a7fddaa5619a989034500acbba
+Output.2 = b81ee53f99665311cbfb764db209f730318253c3b2e66f93c9a318520aa8e5d7371142969b25467d392f508806664e67d2d53885dcbc5d8e019b961e3d34a991962e9b771a91fd51956f7f039c3110749429adb9635696a48a3955ad183b50c53323ca36ee2cddde5a426ea5db5a63ce0fc57f91fb0a11c468d74fec78a62bf5fcf2b4093a2c4db72e6159ca5a295261458a3c59cc8b0ef83436d8abfe10653eefa1e1eca341ebc8d874497d20149574badebf40ffb4baa7c34ba690afae7c4316603d3541e72841e19513e47e6dc11b790749e0afcad653ea437f15db10118cd79a136b1cad437fabc4ef9914376c3db6a4f264a2443717b399092bf2512767
+Entropy.3 = 37e5a04641af4da6511d1e350ef93b0f84e93d6b3c15e1ea8c266eaeab4aaded
+Nonce.3 = ff51dde6c327b334e1ef1bc3b939dc7c
+PersonalisationString.3 = a36e25ef460ca1db447749948846ca67163f495fe82b05f7f33a5a259a7b5325
+AdditionalInputA.3 = 926c37bf1ef359d6685840a6430bec86f7b65977b968dfc3179f41e938c19277
+AdditionalInputB.3 = 8e6c606c94743ded5cc78a6b35524a1b45c6786c29b0e0280fa54217a65c9649
+Output.3 = 36b3b417121c83f1a38a4809c851358e7cb3422e703b8b9a49afa9f838d8df8ee691a0c12c3fe1fded9838793d62c8b2d416a5ca94aba8e082533b1d1e331784638cc9acfc26733c8c9cdf8c8c028d7188b4616f5151a3ee1205c620060c2e8c2699da3e7aeea2db873598d2dc1838ab67cce4c8c5e373ab10fbdab07245edb1596c6d788b799c08ca25b91145c646610f5d9dbbbee1a1e2e9bc605a7fd457dc3afa786bba753775ad0a0a25eacb2a7080dad269526bce4d1c6c5b6fbc1ab97fa173576bd6ad1fcc24267f68e208926d508b2267581831495892df850e8d49ebcc364475f017ecef7e4dd18b1e484ee6d0ddd08a9563024e4f31147446ec9ec3
+Entropy.4 = eb940118848eb9f6f4cb5590523b16f247d7ec7f1b697189d5ac586011f1d603
+Nonce.4 = 930143847c86887c18f86f412b2de61c
+PersonalisationString.4 = ced1786d55cdc25e60c88aad425c2564e1a27c6f6d8b65eeea5f4c76779036db
+AdditionalInputA.4 = 634fe5fe9e2f8fd44afe0f9ca59be58ba3ade4cd76c021bdc93cd8f3e620729e
+AdditionalInputB.4 = 40ee701a56cfd622d0cbf5059909dcfd1f29c316f653b778948efffd06023e87
+Output.4 = afa20073acbeaaa624e3adde20a3850543d6fe998214afa792753821d0929bc4f9e2db8f03b9ecac7b2103c97eda0448bd2c17529679128916f4c10113d7435c80975cde9e8a45f205ec97e1180a7f7f7e7c84b71e836be3a3914201645f55063c6f707d33aac37ad0658706b59a742604783947fd442eaf688bc5e0219134533b197302b05b087b35d4d74812bdcc780de4a9b9b2df4150667f4fdeaa0afef67a1f9d614984c1ea1ec42712575ebd10d6b3df75fca345772c8e7ce6308eee3e8b54c2b050575f713fcce6f10a846e3513b48a208674128ddc9b2d173133cce34cc363aa55048683020fda9c038b37e73f199d58f201a59aee400bb80f709499
+Entropy.5 = 51d7364e6faa505a510ce9a6ac4739428d6fccd3b7a7c841edc2333e6122fad2
+Nonce.5 = f33f5c64f591d1786a4d1039776b7db7
+PersonalisationString.5 = 1fefc65641e9abc4b9befa284e514aa395cadf1b2f848c0fe0a11d7544305369
+AdditionalInputA.5 = f0e5a98d1bf0c45c761264b660bc74e648d44b1a542bc68549e948e8ceba1dbb
+AdditionalInputB.5 = 658ef0048affdd317daae554d769f4c9c529d5ab6cb11665b04cc6f409731fc6
+Output.5 = 2423e225a6439240761a2179005acb6e1824367a33ef0da147fc197f5e38bc9034986e0f3f45aa0d6b1cc80f6e1746c2c8a1daddc165edb58b9604c5f13c287d6b56fe6e2675f5ef60d2d811076cece5984207e5c9026e26d43c40934f4178e64188b12e7d6fcbc37da3265bf59edfc7067b8c42dfb6dd16246d60113d1f57498ec91289cf4465895666dde042ea3d60c88d1b2a70e534e937cfe078cb196dfdaa3015a3d5f0c1c3f47f521376d4b0c48566b79bbbd619f959a24906118a819ef755ef6feafcf4a1ae6ee62baa4c402b61b73347f703ca4fbc35f83cc7698168222900676c8d7fb3c2c6bdb137b5a3b8fc5c1cf7869a55179a3a411329b0ef8c
+Entropy.6 = 58a3f397b3a5139685781f7358251ebdd22ef1f86833014f2910302b0c691b3c
+Nonce.6 = 4e620a29d315b9415300c913d9cb4e35
+PersonalisationString.6 = f5c74d111e39cf4664a7e5c6be148dd53dcd34684db0abc9fc01bf07af705370
+AdditionalInputA.6 = d0aa25c38c6a26716d2d2dc700a3358eb17dcb2168a1d7612af7027f66cf3187
+AdditionalInputB.6 = 19fdf2b40f59b32964a16ce77ad48f413aa875d541d2ad6e9e8d530c0a14d430
+Output.6 = 92fe033a889367df0c034fda8029c815d5f505207eff0b190fca5cca46517ee2051364621f53ab65aa3d23b7c50c50328aa97883909efd73d86207c13afef6f3ac559de12e6c7b277e8648dadee399f9b97092420c862b835744cd433243c64daa9409edbdd35988938a1ef251c4c821f399ead09709a131de03ae18a72f76b799a9bf9770b23bec3291b57cf99b5e3ad21f7b7ddbad9a90add400928a5e383e3fbe7b8cdf14665ea46fc3b199dcf1751dbeb79ad2de31287afa7105b99b1a49df41dce4d81dd6fab1d52b1f3549942b0922d16e943b180dfacb2ec9286bc413257c99c99a8f993438878b436d7f1af97380f1d5b9fc2c45d14f3d4cc05fbe10
+Entropy.7 = 1362e23afb6f89456f7f2f69f8f24575aedefc274fc5fee134fb5288f8709a5b
+Nonce.7 = a9a939ffccd4ce48c727ebf7eafe840b
+PersonalisationString.7 = b4212e43b1e0e1c442cd62e4ec3b560ea3de20a753d710371662d522b62ce859
+AdditionalInputA.7 = 827c9370783c53637d964642540b2ea8efbc08b5b5bb76c72b1d288de4a3b993
+AdditionalInputB.7 = 984bc571607190030fc278a5e77a872ca43094f00a18ae904a621161d764e939
+Output.7 = 5f844333935828907bd210484d9414f3639a669fc7ff5938b1d5c4b1291d316c6b0a6efcc80473bb21887608ee519a0b32fab5d1b2764ee5e7627d9abdd8118545775a0d564e37ff194c7d4e1b5f1f898b287e7317d04a61faa60d58587c604f470ba77414134c798d48bbfc0f948c7c95c13f771b27c0c7f067779f312d8bfd380533cb600e8b9610e68502bae5d7e61616574d2eea0257b8b1dbb4ee998890503ada086adc843ad5558141b8f4c0ef84711a8fe27f709081dbbab825c9112a166a823585e75add664ecdcfd65c0ec1dff6b22362eb8d5e864cacf78ecb765a320f772ecb74d6c72ef3dadde0944209c0099b7935dbe5bdc030d758a3905563
+Entropy.8 = f7001dcae15ba566e36b1f344a4688251594e966232272e355ecf5686c6c6844
+Nonce.8 = 594bf38379b0c480b318330c32ddb8fb
+PersonalisationString.8 = a2f5243e82297d29fde60051aa89a94a500b0097bd3ae8fafd54304d1341c761
+AdditionalInputA.8 = cfc794fb9ea04fa24becdfdc905eaa14749dccd0e1f8d2ac26ac13406542447e
+AdditionalInputB.8 = f820c1b28cb37d06f714c24f569c206e20f251decaad18b297c1e606af6ac90e
+Output.8 = b48c01352a87d48cdd15a3d45e8b2f1f76414c8583b11d3cbb74e8f9acc495997741468fd557776f5be8c14f526ce2cb8c4436fad2e954255cc06b3471b700038acc3b2fc9a7669f1f81a3988eefa5fffe84adf28daff56a23f0ac8b28ad7353a6817ba46f646ed82a0ef76ea577c68ece2946e92d146b9369b668b675592b74e6d298817983e901da7b9c122d2e7e86dc8896203058ecdbb49cb25e11e355e1bb80a636ce1eb3bcbef77af28a1ba08731dedafbe360dd0599e3b66d50e577156934a85046ad1c2a6fb2acdf17b2c4573c45f6b9a9245726210d12d9b0f04abc2e21d37f26a555a48fadaac303869db4198da105b68357e11f1765b02528eaa3
+Entropy.9 = fe4fa2ed2fce276d03b9ffd9b6b0f8b04173b3195d14cdd4190af99ab015e234
+Nonce.9 = e026427bdf89bffdf15c1325eeb2f292
+PersonalisationString.9 = 30734cabfb174c5969e6d2597b78cf66144a2fda03d5652bc9e12ccc59f4b1c6
+AdditionalInputA.9 = 6b2b5c92357ee522c3c462157396d011e3663a6f4eaa209914338e0ecfaced26
+AdditionalInputB.9 = 13af0126d29bc72ad64a512e43e8849d5526e5b698f02705492889797a1af2b8
+Output.9 = 19e5d5fb0a9d10ee2c485f5cbd4f5199daa36d6dec9b4f9ec5026d6bbed88f19b10101dca033283250016117619040f83183f3b904ef218f566439386edc34d6ff3c408ab57d3c1b3789a5e1dc0356c37c4437329e17b19159b7b5316a52d5264c065dc2588c468d9c573b2cad9398854ccb01839eb540ad3d2f620d63a45d8186ea86beb07d8e6e1592706c34e8bf20c1796f493c9b54cd3ea8c677a2ca601bb28cdfb5232ac61cfb54c468b4ea71b4b28d10d9ee70a91311e6c82ca1d3a2e222caaa6bf3395924d9a2ca6c82c317c8b92a1d57456f8ec95bb9c6aaaf16ac8b0436e9bdab337ec3ed50608b52fb62332fd2f0fecc218290131359fb070a38aa
+Entropy.10 = 83c40c76f49ccc74f46fd4b5c9a2c3ae0cdd50c6a9db02373652e809ef5f1413
+Nonce.10 = ff50f2c0fa12f5d776b65e748e33baa5
+PersonalisationString.10 = 9f84294805592053461f03cb2a975c7b5ac1768f5699818181da7972649e6600
+AdditionalInputA.10 = 659bbcccb2eb7b29453af3ec50519f9c4c6347a43fbda504cd04cc5a53985513
+AdditionalInputB.10 = 39814933558bdef6313af6957fa69ab5f97d7a1343b866a81786061f1cff89cf
+Output.10 = 433400b05cf98c7c69f93744a66f3e6d41e9ae7f72c9aad4f7f6b4e39ba83de9c22ebd89f54fa0fbe73839288a19185a24f3b68b42281516f14e416e8511df0cbfeab723fd55c5b26f07c7452960da9b1c7bab5236cfc0794689188c82b9150bf83072ef7b85e8842ddc3a9548d8162cd908f7126e1c96fd697f4c2ee6a53850447373a9058331b69006d72db638ee6fc9e2228492bb3455d991579eb87b198fd3ae5b4f6151b317d1155a2e5c24cf10d46688de98428f89bb713df8ce0d63544cae1c6c3b7f49022209224962d30653a95e338e130c3dea8bc6f8696cf399028513ac878c9f6cd06887f359c69dfd3ebdafd75fe6a0dd9c08c20a258ff1f10d
+Entropy.11 = 66cfe30c8c9c7191de5407f667f39963e6349caf7e7a9cd1856de291a8a06677
+Nonce.11 = 0fd8c9b7adc1fb95c2618894f7309c0f
+PersonalisationString.11 = fc16896c106017b51bc402fe5aa26662d2226a9b459fab00e44b32ef6d95ad1b
+AdditionalInputA.11 = 3ebc9d4ac1b48beb8644cc9e20384a2496e1931b2a39b9224a614d6504ffddbd
+AdditionalInputB.11 = 01aed38466bf2cfcbc412708ac90502bd81b022dca321e441ca05c8e0151cf86
+Output.11 = ee00b9b160b918f1dd42887cc7be0979a700f89e84cfccc0349b4168c578d4a7d53cfc144911a9b900a3acf6cb74e06b52c6353331b9e8a071dd89ca6174eb75e7636fd1dbe94627e89a6101a62cfc8c19eb1e21fbf6d428c44ab1b0b8745fb2a70ef8899502c37f07a285193834f832f3053678ab819f8f791bab1c2369b879ae319f84f0fea72ff2829eaac1a1a32d2aa74c01f24a945d8df100b4a537f64b495bcb8bc12857ffa359b1added6072e07ba4c50c72c7bbd3bd14082aaa3f3a240dca0ebf9ddb3041c7dfd97e13dc39d59b95d4cc9e847786b758f03d61331cbcf98564e586526ef35d81ba64142924b78a9b07500b9279e4f2ef15afe8b9085
+Entropy.12 = b41c47f7e5fa562793637a07efece07ab8f8f6e687c707a35734841c43cd695f
+Nonce.12 = cfeb8ca4c4f390017317c091166de472
+PersonalisationString.12 = 35b11d5c52a3ea0265e37150a3d36ebb7957dff52f7e9bf7893dac60a6176b06
+AdditionalInputA.12 = 99617abba37108c7f4e3439d437cb46ce3d42918a8e7359eefdb057393ed43ae
+AdditionalInputB.12 = a5ea5eafc4f928ecf420b7235ef7002289957fe14ef47c2fc2dffd8f0da6f20a
+Output.12 = 475c2cb2214206b5308a9d555c8b4f907717c79668b98be367cc84fe11369134fc03aacc7341dfe75569f6f72b167d7bf7e5b380648d8a219ac79f5d0a0b49e96f8ed94ecb2c7dbf8ea8e17e793f77e698a44d842bdb8b501a8c8706457dee4034ab234b64c8b8656115817bf574de6ee94039d55d4bbb93f93bea7d961db524ad56b635fa60faceb45d6094bcc6428cf5cf92ec86f79784ab899aae3eebf8790c7bd86b6e688fd616e345a2378dd8e29256d7b91824782629d0e638f7331005ecc11645502bd7213e3face35a5a38c8c86f9aea008131dcef71c882c9256bed724cd327d3b6d05b35222ebd6c06a52833314d3d905e7ba65b045af5c43f6660
+Entropy.13 = 8dce05b8520b51970313d0e3f06028a21a5efcde248e36e274e8ee8b874182d4
+Nonce.13 = 370c40acb4479075960ca1e2d4ebee57
+PersonalisationString.13 = c9cd41da22c36d99ac4b77c44b0692dd1b04fd8b2235b262da09d77b1261d774
+AdditionalInputA.13 = 5166ddefe0db8d4e95b2fd81e07b529e102fb5cf95abe1c5e4da717630e26c46
+AdditionalInputB.13 = b2d566cb0d0e49c38201ae12bbe49b9700ab419a4cd084b0f67ebfe276e60845
+Output.13 = 03296ffd55200be23ecfc44f926e2bde32cf535bd67102d8df6116e3eaa04bddd6b7139e61c8571c976c82f8db5d045bd4ad436b91174c4330a947611d65a44ad32fc6f1c62b085c6a3aa9f64751b8401df8664cdc2b99aa6048d04d58dc52724e70904118b86d718b079cffad38437530ebac791cdbe4ab748635781784f1a4f337228e33f0af928ae5613c0c525217be21ba4d9668112da88f129a63c3343d68ab43265c00c6950ba69c80a4494dda646d5e01c9ffdaa4064f55924a2639c14f865fccbe8148efd2b9e9223d6e8c53043004e4dc3da1d8a02fa7480d60ccbe8e6fd532c720f9f4517bd2a203847ccbfd3f7b6cba6316ef9c719d636d115fdc
+Entropy.14 = 9e8fcb613facffb5f2608253327dac1d943da7879e7aa3333126473291ea6494
+Nonce.14 = a1ccbf3b0eae6d235285da6cded02909
+PersonalisationString.14 = f5da0f5fbdc2306a08eead8a57a4baa692f5e37cbf7e711ef7a963734fba91a9
+AdditionalInputA.14 = 8dab17e96142c890eb16981b97364223e815130bdb0c0c284e50dd3349c0c82b
+AdditionalInputB.14 = 1439e2d19a99703fc35607b5bde55331eca67b2b9a9f7587ddba0dd1fe690ab2
+Output.14 = aa088ba4682bd2285e90c7967a7b8a518e0ec45afd490d367022893e3822c09d967d06ff28748b5de3fb33b071b73c581bd893b6641a72cd5db35540b904eae19765cc121ca4dc9404530114c3369fa80d20dd63c8c09559c4be48aa26ca77b47579dc52fdf0eb2f2db84ab688b87f63097140aef65410fcd7a81c2bddb2c92f9d67b2e46647aadd9b85c9e17ff8b579cd672708282981ba54d854e7c9a1de66621845ae2d337a90025ccbdd1b0d695790b1f977b1e944bbc04d16a9a399628bfb33f98b40e13567514d8ce0b23340803718ea3da44fa84c923f2a85ba21495c2f9541cbe8cadc0b230b1b942e934eb4fe95c3754a77a09641ad730a550fc24e
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 0f025f0a0226f2157269122d07a77a57ad00e0880c1b300ce0ccaeec1050ee45
+Nonce.0 = 4ef3654c08e3ce4510e771ea7d031afb
+Output.0 = 46c8a4a0802b7636e92c51376d3b8c028804d6e296cbdc01841f3c3f753c12b52fac5a079e58171c1b5764b4f7036c2c13ad66c2feb8e66e9a3526bb838a7ece35701e075265333f7391c01132633088d686d3fe6e8d432d26d0bacef5bd8c66c9543c9b3633c5413343458129f6074ec937de6a27b7f3ec9b17ffaef9549f071888304cd0d8d103b922ab835acae44a4f9fff00465344f214e21bdeeca836858c9c38f651d24ebc60c2aaed83046ab1660f0ebbeafd955b681cedc3b77c89954d8f3f6950f614a6db70a4fc3a06c262cc18d47481dc1a0cf3178be2a2173eb565f9a054cc14f27fa436ff4f0fbc94a0dc013f0a358f55a0bfe4cc223ea4db47
+Entropy.1 = c5c141e969c34cbe958f7f7d9265dfa8fa7f1d4c861b059b317a078077bb8687
+Nonce.1 = fffe17bc7a56ee1a19a19a0b12d7e5d7
+Output.1 = 1655f23d48cdbb733e14cc69c1da950fd14406d92ce41bf6056f83cd5503e5dff368c58991365223e202e0523696c67bb985d94d161ca124e7fe27230b36fa580c9177cef6b0725ede59068264e68b9826c32b2c8c7e442a55b78b4ee9809de0e391ed7fa60af03c96fd6868d307e6c61d90ccf6a6814c02f8641fef75008b727d73fcea92c9fece1f553d8936f51b8dc6d6736e6907b74ace32fca7963fc11541fe978173629b4aea86bb84624b5d4ded151fd64856226ffc4d37dd254263d7a8fb4689273066a153686852fc0b0d1f6781d1ba209d5238e0109b899c0efc75668f94c71dc9e68771ab11d3e352625680a3f5c8aaf7a144854c7623d6fd7275
+Entropy.2 = fea87fefe9eaac7ebe0d77cde87fd40e84354c06188d5e077058c685bc7a23e1
+Nonce.2 = e4ee2c0d6078eb436a063662130eac45
+Output.2 = 5c80cea857b936bfbb882e3a58e7df17b65a49c6bfcb1f183ce96b74eb53319be82afb8371beb9458167186228f1b5cfff856b1d5648693a0b99f5d7cff61866be763154d489d60e0c7dcbbb4343e7c36130cff9f787ccc7c813556e6c5ad7fd42ed2bdcde950af5c6a4e7d1d9d1918cfd28f0863c8163a044485e29bfa40078844a321d46b4ebbab2cfa7447a6d9bdc819bff3d8aaeb99e9adc55fae6e3fc89660926f1e37084dd94107ae7bd6a256851fc2a351ef2aaec1a4a709ff48f52715b74efe37149cf98055ea2dfc0a3185fb7ba0d24adfdc00dd13106edd78590b80ea47e865d17926c228cba1c5fa3a188b7dd892c8947ca335cc56d42d564cecb
+Entropy.3 = 9bd21ef53f195507c8efac8bb42c22c808159bb2d504c0eb38b6664fad9c7f4e
+Nonce.3 = 39baf025d0a74e580bb28f3853fe0c8f
+Output.3 = 13198fadcdd9487dcfadbcbd1c53d9b5313170d1d2a4596f1c1b945ac7381a71c7aef8573ba5d2d5d282b3e1b9e3f272d704e17655665e34d14df14388604e6f30d92faf9ca51ce2422f028004e720b62c4f700052a387ca96a16b053236940d6a1842dde5df8fe68595d1038b82ec00743c4f31539514dacf58a8ed2aea0e0414b7875aa6fe591cf76e14653385c674872300441cb30a27bed8b036a0ce9139ecf995cd66dda412f4f8053e48d475651872f9ae89b161cbc99fa3dbf6cbaa2708b02afa2cd69737562fe86458d78821df77e6f82741f9dc56d7c0c806578f2459048b890278382763292eb5b07aba1eea365afb704d762057154a551f0736dc
+Entropy.4 = a2903152c9c4308b8c1a52b3d19594872ae56ecdef67c6aea5a54897c3862e5c
+Nonce.4 = ca79f1cd283a142c7d69f845ec4686fc
+Output.4 = a5f63d837a35bce8285e26f239a636bdcd220a9558f6ab809328df034c28cee1904cc1aba40418027ed2e579f84077eccd3bfa5ddc303b9f29dcf2afb138b17768d3b0356c23496de614108f54d6a8dd38d060f69800cd5ec5746f7249316f84a5c8324a33035e3d585871bd2908dcd5f34288a8fedc8ba6b5fe89386de39e8d186a71203b7e5b3b2a7a95348630e61473d01cb38a36a57ff7b1d7518ec9cb37edcbef4d81f4b2a75ca75ef79abfe1377fe678c53a151cde9edbad14230f5e0b17be4b253c473c9f69170982ca8489d1439732f0a912c24ed0445f9ee9da76820ac7c95855c6c4ebd668d684768bb9e411a2cd6658afc50ab5ced87799ed3727
+Entropy.5 = 81df6214fcd7c04e1a5df60114bdacd850fd9f08ab6da2663c49c18c3f3c2b19
+Nonce.5 = e64c4fbc5a8dccc87f7a16ca23fa24f5
+Output.5 = dffcb91c73ffe1ee0864224faa30ed8698a3e98783366dd7292c9208abf7ae0d0ac5253fb1e604cc5d6ddb80f3e2020f594025168d968be6c623a46d7a2830d8f7a12b505180a4556ae7c0119d87e3b71d75458afabf0d5aadbfa48f6dbcad3ff27904fd4c258ac0c0640d283d3b73361d1dcf69783384dc1a771fb586a7a8cc5a879d36bc4bbff7380494c0f8269cb8f02217463255d19181353e13bc971d1ec53a19f3be339cb17498ad24289cfba76daf1fc48f2d10aecc110352b940e947e445a332ff3f2aa10661b708987e7fe6037a864e4b30c03cd2c3d8a1265de30b823d9da470f900e0ae67ed4c4172e0c6f2de34345f43976c521fc84974d8c616
+Entropy.6 = 34d6a4b0707359ad99f66be8fe5c6ef3667ae02c4dc8424ba032c477528d34de
+Nonce.6 = e0ad85fd0473022ba066300963c0d6e8
+Output.6 = 4c356339929f1ff03ab48f19d926e8bb58fb594cb0c8e7f309c21fef97b36f3c435167ceef664eaedaec74bd3665e007ce9d9a13e1196f8c28b67d98f447937ca776b66b9adac014ca159d55a99e0607195ee97c140775e7e0321737072142f9caba600725c6b4eddf7013e71ffd5371972be82638a3041ff3bad3c75c7db30cf4b6383dcb5f8287d31864d8964f23e5011d75f6af46f83735209fe564f7ff16853855ed773f0584b658ef94b8ecd61c7da95ca8f2f755401048f795b6fb13e2baada159a07457739b0810938e306c88c28833492435b09c3707e21a07909d7fd05dbb903013f1a85300aa6ddfce2ddb99e2222ab64fb86b466b6ea55b3302fa
+Entropy.7 = 6c8a323e45d62c399e4bb39d7ec415da5462320550352b58d750a08eacd0e0c7
+Nonce.7 = a3777d95021e0ec49284264d8aec2841
+Output.7 = d7c0d66f844dbf8279033d55e909f1d31c9f6e6fd58347c7145d8e5930db54bdfb42c89177165d54f079d4fe16ea5f5111fcecded389c450a8fad22cda5afde70d24935dcdc76fbdf161bf24f8cdf6f2408d0790972d1df2173c641fa534a345b6f234abc0aa1281e2531442c3941cca77466721bf6178262cf0a97bdecfc61fcd14a8de7efb9ecc14718aaf345d809c8bd39b0746b6b63a556d27d0a56d8fd0d8edb36288ef92bf89709a36d1fbf0228066b67b5a9991edfd75d47fd6135dfbeddb2ca36dfe27a5ca31bfd24e3e4828c876c8721d81bd2ef2291061e3c9419b3121d557ce3a34c429ebd070279264f853ad256d09723613d1b21d26615c5dc8
+Entropy.8 = bd16765357555b8bcad0bcb3e7510f064a0682c2763b35235e453c3e03f1cd90
+Nonce.8 = f8444e16c867bd6d0c99689b5fd33c6d
+Output.8 = e19f0a6cfffe8f1dab321e63650288aafcc689d730065d2aeafa2db661d66a319d9ef454d87b7e3d9df89537cf20d735d6cf9812b0db8db219a1abc1c8a40ac60e38e3e0a2de494dd962d74d612c003ce333e63a40c429201c373c75e7abc505cadaf13274e3e9b1cd3f0bfa5b3167598b24733ea6199ebead46bc6f0e1ed2bc3e246482ea141ab2cebf4c4ff1faa5c30da19a60c3c9b11e2b0f6259e793120c2166d5826e2819ac8d5f31b5a2574263201e21f5c82fec2b6f396212721c0d9ebdcd75b0b1f2a85bf9d9098a1db35fec6b46ace45a7674c272fcb7d33da9d857eae0ba8c5aef8232c3b877847eb8da6ed363e93cbc20f906aaed7d3b402651ad
+Entropy.9 = 63245db20f9ed7e9971d11411d8bec7dd8c619c186aa773bd1c212688f63f1a4
+Nonce.9 = 8eb298afd828a37621dfcebc3953207e
+Output.9 = b39dbd68fc00d55e6ea223f3859f657f4bdcf7485172620e9ed64945228cfe4d2045b141372921c6ff60db2c368a953cf28225ff9e9a2adaabbdd08bdf8e1fa3f66586b46568062eb1c4ca38e16ea89ed4357ec2d62396ac71537ec19095046769d84d15e5f8551ae94769e023f5053e5fb47672b8ca87192327dd21b7610d90cb534e3eed32d6517102a6c97e70a63a3342ad6728db1d6aecff81982f9a3eebb905b1cc47d597b393934ee2ae4f78ad081321fc702477a0e0d003b2eb46ed8f1d5fb934139267b0dba609c45334275c88f7c3d38cd601a42f3c7e79ab7a65614214b1980b53ff54ebf845430d80ead61cb31836de61984d0213d6a4f7e58d02
+Entropy.10 = 4b28b3e591bf4de102f6059750fbc3b257013a5ee9acac70150e3e69f8c3e8a7
+Nonce.10 = d48010157a266089207cdbb9f33417dd
+Output.10 = 8db6436c2222efc43f8e654376a997b545518ebed313d56e41ae2c2106479d67c92312ac1932a2fd34e35f21f3334b3af34b82234f7a7f8edaa4b21c2d91ca62d01333e55bab9a6c57fef029be043a1700851c4d41e35d667e4ff828086fc0db7ba7be7119c563189078c5d44e779a6439b1e03eb99da3ceef0b251b7c0d9b7656c4f31298a8927c36bf86d2692cd3da393fd6c05461c392f32a20f904fa667007770cbe34c2308883819006f8cb4d94e802a7d48d7c4921c33b713b049019b412df375e9c1fc73b52fd2f4142f41bb6f4d081f11c51221588a44640d0991bc0f2d8f0c1934080d0c3b22815f2a8346567aad97c2e90448f496e25178bbdb095
+Entropy.11 = 46bfee256f59babf082172c127bad6c765abdfe7697bb0c5f2fccfacae6683ad
+Nonce.11 = 58a5ae0bce251f0bf90a8842dd492c76
+Output.11 = 6d0fe78c5b2520222cfd07b407f6a009316735d845a2091a2dbab1881085f45a45111ddcc9c5533b26dc40fb357d5937866f834df38890a00f986d6f4438114fc1a922f0f5a4555596257a76a14aeba3b04350cf96f511f9d95d3fad0340e87c9aa1497a54e76a831de3569b8c75a343e81846549d4cf9b22060d3634c23563a11acb1002a926d236a8b2b0987711a1dccf5c9db17992379937e162d60586749a1fa30ba55e98990dd2de252a7b5fdb69fec6f0f275f409e11fa36a39eee404e19f60cc2308834d83e031e0936833f001d4e0ee8afd6a95b575675a63209054780ebdf0e6a9975a417c256577538a960cc9a65ebd4fd05550c28ddb82283cdbb
+Entropy.12 = e6d74ed56c614d4f7ad84a483712f2950d1707f22fbd17ba007574efda1bb907
+Nonce.12 = 597476f8c2399506ffc8a4c4a8cd6c35
+Output.12 = bdcd77917724d8343827fac4df8f6bab525d32ff935fb8d907cde66a1d75469c9095b8227b1ca1e32242e5330184ee4dc3a26d654e4282cbc3f60a6a9a0926467deddcece4b4bcac8c3cd4ffe21c1a9613dc985b09bb36e14defeec022b5c067ef37fc94fb4179b598eb5e96ac302e17832a6539c1d5fba1a229bc88ef02758cb7f644654f3860f70965af024037320a1c4839fc267c54b10c1a4aa91d0c04fc6122ed28f6ee4d20eba4af2512c898ef9ab35e09f754d1fb9baf9256961b1814abca124e439b44245d3558a3ca6bbdb7a01df7875a9553428006feb85a7194029d578315f1b2764e6586e5800cbf214a9eb1237c183882671dc1d545945d68eb
+Entropy.13 = 62ed680cb940790fa4e83c5bbe1143b8b8fbc1e5f1325adb1c58071ebc5d5061
+Nonce.13 = 963694cc9244a17afe30497a06e3432a
+Output.13 = 8396f1eaabd07b55c64ae1b70ac585fdeac582956894192d08291e97441eb1e7508b00caa5e75a4d29118e3d9d45313335fcdefac07953402b28c887a0250ab47a85e07368a1468347d4d678e2ec7eebcfdad9133d86d76e7253e85bc9fd873eb3f09a8e77df0f0de753d05eb0b51c36cfdc9c2c42737655719820570884f77d6d35ba232538870333ae3c3f3bb9a9f072e6532081bdb9574bf539dc2a8f7475c4871f082b501ad686b66f4f5b5557479cdbe829e16138d4c4f3633078a59c05984eebc74822ff7750242ae1e27dd43f73073700af07c63d85c8213645243d82614a5f7f7ff2d478c384b3cb6d9c967fdecb0d2dbb5b9e7130b351ddeb64c647
+Entropy.14 = 5f72e390aa960846a0004d266e3741b6fe0aaac98d9d87b4cbaaa7a2af0d0bdf
+Nonce.14 = 2074991cf0c22cd34b2de48ea1f9ec66
+Output.14 = 7bf54b69e455c7941e8e24ef59b5525dc1ed3b7f934333713b9dc305dcae2cd1b74648149e04bb4f4e00b110926a6bfead7adef954b6d7e180ff820192677efa3c0c8af6a3e201d8d555cc599cdd2626d8778ea2c7a2a8e0c99e719929ae9ac4fb9a7e5176da8987508d1152909f456a4ce9461188e264cda1c879af1a8cca6c182e73c164986cbf07f441756791fa1fae40b784800335d94b0b54135831044bf0cb5dbb5c0c71de6b6ae33d6b87782d34be3cbc2991ad109d6c0440916d91baf96c4375ecdc9f09dca79671a45309c408062cd08ee623c8de007cda3b3d110425d7e8fee13b2a14215033d9ea2397cc6b5c995f37273a00dbcdf9437bc77857
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = ce6658eec19c7f3871198fcd4bb39ccd808962969678503a64f1f0a2dd73e917
+Nonce.0 = 63eb7bedde814392544cf9929200afb8
+AdditionalInputA.0 = 08f75f9f43c59b46b8f432fbe88ff8435f98aabb0427e64376a0835022dfe7ac
+AdditionalInputB.0 = d0c1ff150a241b5a40c5984dc0a38846865c7bce547fdc3f4d711970583ace9d
+Output.0 = bb9b3d88564df2ce454c06d408fa6b6819cf5b847f1569831c6d2915877dd5b2ec6fc6df6c7eb226813a2792b2c33f274324452be2fe931966880474a1d7424a39302d803c5d1c2b537ea0194436758476aad1da667b2bd17de53ff8eb79a63316a9b7a3375c1b4f96aee67fc4479b2cbbe705b4d8e8bef85c0b1351ded321db540f91dff14bd625def3346c7460e92ee310c29b2ddfe361164536be9e1a0dc0578df95c3bd39ad261f5b653a72a7576d33542fd29086bdfb8ca9a97135c9868f42197c3dc68b6a7b9b1989b0e0bac6c094cb16cc8b2985b3567ec1b385bf09a78635652d830f06c818b3ffab8d898a50a9baa3191634f245e4d0279e14df134
+Entropy.1 = ff29e97738c57d4378e7ac2106eeac3edfec70d237a4f4a0a25ed696e40a4f48
+Nonce.1 = c40bcfdf12f53f44022d7d1af0fc7a36
+AdditionalInputA.1 = 308352e11732bb0d6daeccc0d8e833904ecd69af399e36984062318514e232b9
+AdditionalInputB.1 = 044685b8235a36a6ca5324accaa111dec84b5a0ee8ab7b5d90e181fd2ee2226d
+Output.1 = 463ce56c03da9698df7a73d81e4b65e4875c0a873a4650ae2dde18bce0c6e11216b25e8372f2d518d95cadd8ece67435a5ac495be999915ba33f556fe7785721bc27ed5580456fe44a8646798be94344f76a737fe67f7475f0c072e2a1fa17aeb8abf4bc490f3051e8930a911768bed2a2e44af818ee4cb87b43f58698d559cb7a4695b7d30dd51aa000b04bb32fa9d64e97d523ffd2f2778f372c7028bae0285375e2bd8d776e7e4dc96ee6ed6f95a8ce8e314479517fc6908da7c8e3124854088b7aa5e6440ebf415ad7d1b5584203ecddba360c3190e5e1970d3be323e69535ecb03d85e30e915cb4fafe8a10b28eda1eee396542afa2b2bdb9a1b16c324e
+Entropy.2 = 9bd2004cd65872ef6c6a77630b11c1281de1bebc32416e6f8605d3a7ae1ba7f0
+Nonce.2 = cec537e762ac381f6643e316ea9f234c
+AdditionalInputA.2 = 2ad84d7fccb80113042f708a9660a3866c4caa5436f35a42f699f648a9050191
+AdditionalInputB.2 = a6865e03384aee4251ebb79ab878c0656bf1e5d96991b1703b9ff6d8da151f53
+Output.2 = b1a2fadf88d4409ddfdd7de34f6cf275df2f063fbbaf36b52507a27e94f6378bca267ce616e83783a4bb503d341a6677d6b76ace231d70f2f8f6890861fde4e13960ef392a0f9fd6a248bb366ba80a0607d8bd2c8a0ba8f507271a24b20a3dc4e96ca5168f02dc6e7c6c6ae82d2ea13614fb65869ce8d0e93bfb03fd2b43bf72ecaa524144b3a7827488f8c00de1ba45cf8992c6315742d9749ec16f89310932b182ea4526b0ddcf45c7258cb4e473d51bc0576d1c48487d2db822b2730590c8d8a9dc9f55b19f455f2bd422fc25ceed04c1a4910db260e1bea23e8e3721833ac23974134e2211928d777f1e2f8f6867b6870b1dd8a90b3c7dfb3313c0982f69
+Entropy.3 = a3e55acdd8a6c386cd462c49cd1f58fae95462fc2cf721a5aa0299793cd59ff8
+Nonce.3 = ba858eb3d4a691588b133c724aee62e3
+AdditionalInputA.3 = 4c9d80d64061c857ea1d20ef1c2794885e03325e404ab6bd7ec3e8b5866567a6
+AdditionalInputB.3 = 2b6f74d6e20d0d6d68acff4c3bd188eeff4bf0c710f5366e68a35e23eaef4450
+Output.3 = 36dd36fbc96d728e218b89740a32ddbe7ecdcf0480ad06cef54f3c56f054c32e58c4f8f0389235501820bfcddafb9ba13188074876abc5b3ef521f3164353c073b241e8bbcbeef5872512300f766fefab0d0f55fd740731d5bda4854feb27ac834e0657ab94458e01b88d6291e97fa1324f62ac0450b07306dc134e639f6eb53290766c37087d999a22b74865c6b56ac9d81a5e29afd59e68a46b620d621af700be523fd5f2dbe789797371370521cd4d6b5b0b8d642af968d89ab6f94ce11b5b403e71b5c243a6ce875c056ee9254a53a55d5e3b597d57c4829fcc6f40c6264e82549e462876eebe4288a701afa31e7b0defda64d39dbe777592b399a689904
+Entropy.4 = 2d1e5fedc9f6e3e9219900a5fe7db1625c12fbd2fe630f6d722bfeb38c22a9e1
+Nonce.4 = 18213f57dec5d7118e29c86849f7ec5d
+AdditionalInputA.4 = 07eaa9c0376a479a6b304b7e83f7f0c653b576d80ee0d71be99488d0150dd6a5
+AdditionalInputB.4 = 52b1937488673c6304e24ae6b877e6f1be228a827a9b2db7368472c153baa6c9
+Output.4 = 04d011cb111bdf15c40defa89370f076f9e21ed4073c82e1704a43ff009a4478e8549e96ae9358f68e6c6e7e49c3c79ce738a3ccfb55520b6f6ac24de29411a5c232a6bc001e495bc80b986d2b701ca601c7edb29c06be2a46635d4cc97f999762919c221145ae987e14908d62af35c14040630610f2e0041412a2dad1883308664f1daa039a5a7b3393a4e69b85db74a6ad0f7439edc3414de797f05d4cb45ab765788527a5404aaeb88cca750666ccddc7eb85eebb206a1031d6c7eb058455874e0722205263462510880e8d3540394c35a7e1f8efc99d80e2772740c327db22ae8e84d07f7ad56dc33747767516c3ba804466bc860d6b466084651a462c41
+Entropy.5 = 5ad5354b55207a48bc7eb2564cfed6089c3f7a89851e8200146e84005cd3f85e
+Nonce.5 = b40ebc660b795ad35c9981202d1e62d5
+AdditionalInputA.5 = e4bb01a98bd3a20abbc9f9b348fc0bd9eedda7708419d28d41fd1382516d0a4f
+AdditionalInputB.5 = f8ef214e1702b0006fe65df9addf6bbb1d3ddf73ae6605ac30d885a1af32b7d4
+Output.5 = f8813fd53bba71c562c5443991644b64c0647eb1c13278cfd6afce46d1361cb46d7ea5108a6a39c90c698b3a159859ad8e93c07b4c8962ec20b429cd943ae977099e9009b3ba2a1fe9dd2a03db94a62c4d35c0030b6db24dde3462ef975fe689f07f1b8ee503d826ea0c97655dc7c1a3821806d8050b47e5ff516864209b383fa1b96f9e621a04f8288606ca6229a78776e52bc27436fc4180bcc6b7529de43151ceb8dd1e47b91188f669f7a7df3b5dce14641dfcf90e4223c9521fcbd6db92eff80f45162fd209bfbe8d26db68a54e4b9fe01a87f5de3ddf3174d2f7fa892746308d2e470aeac026908af531eb6aa33aa3e608a5a2b7f17bc12a91ad809057
+Entropy.6 = 98345771d2b2478cf7e8f29bc819aaf44b162405390951d1b2c1400759b1393b
+Nonce.6 = e95e5fa513290b0cbfc6c2103ef6701c
+AdditionalInputA.6 = 5227291236a97f27ca7c70b8a888d5429b331acae8fb0b062e306f168305f10d
+AdditionalInputB.6 = b9c1eff4efaf8681d92eb1f609b150ea30c5bb062b2a6de2c68fa992b38d338e
+Output.6 = 0bdd142c6a5e3e2f7c7ce72ae8bc0b1e73a33cca21d0fc4798f668ea7994a26daf473e563cd2a67c2b47ad4ef855fc6995d5375bff84fa8976a51b98a6e9257b412d5191aa6934776cc1a5e34c983620c1750203813030784b4564378fa46dad7f19926a840523762012d713841336702091400cccf80b80e77b10b017ee4b183b6f464b76072b838654e3af56c8d9b382bae9c577ccf71b93fd77f14b3245662ee0e6538e5ce67475988d2ea5035878a715db8245ac9f332be2a8429ad414423f1d7cc030e21762ed905d93572764d86e5fd85f32330aaebb4b7d7a6e0bf8eec7c8fdd6f1adf192555a36b0b3fbf03112172991bf9eb9ce4d3d4b5eef4c1b62
+Entropy.7 = c295e93470b0fc6980acb2a0793167eba4569f4923cdf606c066439d97f0964c
+Nonce.7 = 6b891e1e72e28eaef95c737bb9221379
+AdditionalInputA.7 = b44fc5845a252c16f661fda42722eee8e488ac5e2fa9fd9a368ea9455f426e4c
+AdditionalInputB.7 = 402633fc22b7df8611928685bb7e8b76362484dc3da9dc55a7f7c34f173e784f
+Output.7 = 3e86cf6e5df58441b7b26ab084f1e9a574180bf0e54131dc55f5a819fba4a6b4b6e9172ecdcd05342ecb709774f6bf9f0c7bb95430abe72f976157b73ec716830e1df472709364861349b19202fa865d46ae26004e990bf8f2c6e76034e595e03aab7fdce6c86eeae10572a838a97e6e43cb6b87d32a32d259f11d7a10c0948cbbdccd38cd0c27c15585883adea5c9c140513b55accafd24f1f55c1d06461e28efffa8f2a0f7366e0bf8825a67ea619046aa4e1bd56fccb8e150070da979c49206748b27530b9f3d8f1c31888c4d4a0ad752635b42dc2f911a0ca89936738cf9761806138678b1390547cea5ec73e61ef0a36d8477ee5323176dbcaa352f22df
+Entropy.8 = 7f7677a910fc28c0550ffd8dfdfaffedcf0676efa4536f715f5ecb6b3db371fa
+Nonce.8 = bd1dbbfdb160e914514d0bca5e90d5da
+AdditionalInputA.8 = c2cde242f8cc3d03d4b58b264d8beb985b480e7442969c205fc7d667fd42b4c6
+AdditionalInputB.8 = faf740d0d61f8fa31557f385ae1aa011e8ce9e7f08e93a913b828192b04a50a3
+Output.8 = 09a7e2731a28f7e9a6a87a9c911c64b15b9f500bbc0094411aff0d63ef71716c60eb0b9c67115634e5032030a35511051457cfef0ae1c45855a3dbcfd0e77fece846f65e43f1216e9275e9d1c33b7758ad7edbcd50735a33d3603fd5c24e914196b3eeb4347e6896f5fe47472960e71e8af2ff0e1491779dd202d2677b40bba84da88e51980824cebafcb9bf768107e4731a45d21220e7b8c9a419d5c688bd9893c1bd7798780ade2b4c557010162499b119b5934b8d1b4ec32aa1e1b7c14def8b90b322070c6fa765ce43fe97bc642093504948b9d538a8b048760fa5bcdfa37fd50c3fda3030971c1fbad7f8bc5d0ebb2321aafa4a4619b8de5d1b8b8a3302
+Entropy.9 = 6eb8e3e6943ca3171fe562384ea45a4e4142646e291079b7e9070d0f4132a1e0
+Nonce.9 = 2334d60b3bf0aa66c6f238cd2377d5f3
+AdditionalInputA.9 = e75b95efcd8ae16b4b4c77f1953fe2610142d4b9aac5c33403f37410b0b99d0d
+AdditionalInputB.9 = b2f8c41469e89e87bb6b6f108faa5a491258221dcd50090e2a75c8c0c3867cf7
+Output.9 = 617a6d9f85809cacb216947a16da57aa7ed8ce2138487ecbb16eeaf568e4ad90308a323a90e9af2aba3345770bfdc31c306320d92390aaa8253a4212bf39d8228d379bebf4441f7b46526bc9c5f065740c6358f48b73765d3a9237a2bfa58d6cae11f907b48a2ad4873d6816e60282728238ccc8ad9c114dffac10721570989b45f7501e18c4a2154a4bf31227dc854ca03a0add8ebc64949458ae8e67661afa01c782a3af8446a002a5a01dfe5ebefcc3a0bac807012496cee79111099692079b53f32239adedc3aac0395bfe2a5845f03c837802bc0c221517198637be893c164d2179f987061f6af68a5dcfe7a10c66d65f108374a493095adbf59af7cd98
+Entropy.10 = 75627693d9adb284fb756f6a98f50941f09ccbc9c4e1a4ae3720638fd69c6dd4
+Nonce.10 = d911a61721a1956114b1d932a9d8a77a
+AdditionalInputA.10 = 230eefecb10d43277ee4712843bb2d06aacd6a5fdf19edbfbe3ee407736884e8
+AdditionalInputB.10 = 53d1d8df1bf778e331c5119648fa9b40450bf05c3dc294739e208808a3e2ee00
+Output.10 = 66056c70705032729c87d4b78f7810028f583033c08532941e3903e5c40c35070d717c4eab02af86cc9090e76ea56ab01784e92f9e87e33f471f744a97e9290349d9e2b54192da5a065359492c4973d3ba679a3c9c890a42173150aedbf6a9c476b82fba53a628ba938369ac3c00905bcc7ecb00206bcc6b75d0c1f972f202c835b4ed2da8090d89977c997cb5d3d3c7c07588ae7a927b3dedcff2307fbf79b224a95fe27d3c0475480820e52df5e8e580ba5c558a4914137264ee2dc36b6deeda7c31cbe26a12222cf7820bbe7b090af56853bc23ad5fd741b934735b01e6b4fdc60081d6a1c72559fad11066affd29c8b51aae1570629aa7a42649c86ec481
+Entropy.11 = 5e819b5e81917ac851ec948402470ae7e72b28dd86b3d9376f0c105e65950deb
+Nonce.11 = b245b92c74dcc67ad92b6b1e9b57610a
+AdditionalInputA.11 = efb4b21d5ef42e0c0016d165eb8e3da3d39cd906da05e39b988c1b7be2decd98
+AdditionalInputB.11 = 92e7324f8a72bea5fc1ab36d362af82247ada40320acd5c634334b1126ecbf8d
+Output.11 = c4a872ac1ef01d981a9ca6b16e0983a7e9ff4b333f3af6b3fd114b827aa2a530d48e4ee80a0de15d577c68d2e2105e05b4c59e3c51507d40a334318666c09a54153f2b82b997d956168225633e21549b1b855ae29d3583fa977e2e748827592ccfc6d1baadacce5eea5641e1fb867bb964bc9c6b8c595cbe01f3936075e46afdf011586205a8984de5e92644f0aa64c93009cafe55ebec17b3480aa03ea855c4e2fdfb7f2d5ccb618f41b76d7d18ac474b8dae2ceba0060963b4ca5c5009472de540acce000020d81822fb448962086f09f574e57fbb7745f0cd89d19518a07d6b470cc0703ff56703f132a0dfdd56ccf7c9e1df5a6b51b0a7faf3fd624a0e22
+Entropy.12 = a7eefd038a4d362258cfb9f9aaf7120faf42b621fcdeca647660420230a785b7
+Nonce.12 = 4748586f617e22de6e599890da84224e
+AdditionalInputA.12 = 441fa009ba911da02fb2e746eab4565c5f9a5e25287a2c02f089b7e837de1a8d
+AdditionalInputB.12 = 2d8d6ccb723e8db36b85fa0ddadba3cc7862eb719780342d925a2940b065c2bd
+Output.12 = 4c5562026542121f82e9b0b03ad082ed7387b9ceb54cc13da3948be25f45161a59be97620b6d6692bdc93a5679bfa5614d5aa5d79e635c12cbad1366b59be166d7c70f1c99078e55dcbc538d73abb78ac5cf85a5499951a8e1663641a4a7f26367268a1436936e77a720d81ceebf4ca8d1016c1c85c51c08fc25dd0ab85f884e8a553cfd042e02403fa6b5300504885522cf1f5512854bd08ae606735a987c8d824c16608b5d500c6a513da57694173fae346aa4b6e483473e28faf6568bb9802818098a7d03b10bec298674509b85daf504b89d2d09579130188617461e729beb2296ada9c42c18f8b5fe85ff53de4176da51d578bc8de74c7b89b36dadc834
+Entropy.13 = 256aa1a9904ca011410252a16816bcfda72bf9c981cf8c2fb60fd6547a1f0aa7
+Nonce.13 = ddbedd613bea76951bcd03228f1959c5
+AdditionalInputA.13 = ee6803f2202480f5b72a628cdb67b43a1ead8399d2ec1967b4011f0c88cffefc
+AdditionalInputB.13 = 945462dc7e91507a5f8776d2eaa109d1f432cad59edf4da8181a8a7072077b2f
+Output.13 = e3ac2c7128a91af3fd5a0db99b75fbb04597d05b651ae5ff2016b8ce098de54cacc9d7a571749af17dde954ae276c09b719a5b3284ae1d281a2c5b520fc67d32207058d6ca140a4d5fe0522298c71ab2a03d1e50ee0af3990fd5963b7115313b85aa9ec4763cbaf6b75665e5f4aaf4d69e1219f45eb7922d57ce809814656763a152a53ebf1de1806f6e37e15bf35e8aaaa300d6545f595da4f0b108ac97a7ab261f1be4967031b80e27129f22561b2314d3ff72fe0d00e562d5edcf661a0354d08a7deb900a90edada2c9aa5a7aa25ef9c5b7d2cd28b80fbe10284284737026fdee531016fd5b9edfad43fb334b68ea7940c75238264e36ac66c3e7b31cfd53
+Entropy.14 = 869e764d3c4d3a7f0e99e9099619884489a15159a0fbe5e2a2f46cb262e4b262
+Nonce.14 = 0b99e432471f12ca1f549499ab24050b
+AdditionalInputA.14 = 97f8c1e98fd25289be846d80f667341a095dfbabd610c691ad6b2b901c59de78
+AdditionalInputB.14 = 136912d2805ab8ffcb4e7d6a81e37e14b7f7bb65dd0241d56f11d7c72dd5de1d
+Output.14 = 2e1f4954107f3654f51024f032518ba91512c9d8005265ff35248487b8c87d8862b8caaae27898a22f9ba7a0297fc071ceb6a1612bb99c0f15210a11f5a0725158832996f15106a7c43a216f90501c0dfb36933be940a875d4f6b0e5c29edb01614a26cb3ff7b906762fd6435eb7cec8c88f5fd7c4d76fcb018c08987108117c95d4d35c1c59efc06358c7abe7a73012ae4440b2ec86c3664e5549b8b0a30d6c8538d6e5151f9c17f9ce026556508b8b3d926e4364839bb526a94c7d8abf4c1241cd844bc6227a01d024affaedd4701129fb0f9b5ae853c7085ca13ec78ffa3476ddb1c1e71942c351c3ce9a855ccfa4c3c7f92b59d5b67e8eab16b699b7ed5b
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 1bfd7f07f367098d36af5b8bbffee873c007dc0bd48f5cf7c91f8b9e5cef2c8d
+Nonce.0 = 2d857c6bd75cb4714b7d4fe7d4d594fd
+PersonalisationString.0 = d192f006b0f877fdb711220c5cda3c8e20ea9542901f45be9dfee0f32523141a
+Output.0 = 291a924fb5fc8151c9e94664dbe2f2cdd67716268cbb4a8b04185b09feeaffae5f95ce43b6dced5274e09656b78c73a4cbf20728b23d926908abcd437d121a3fbe1ce98f601b5ef82f4c7ab43750b4824ebe3ef61abb424e1be5ee81b8ae2423f89d91c2066a199d411f22038b44e93ac7691f7d5890b6e8be650e8f00f2bfff54041050a949b52d018c40b92e1d41a1908604a6aedad1c412b6e23f519b3104cc8bc8485069cee56d85bc422d39f6e64828f63b4a15cc8dcc186d2109d8da3758e941d9e69b032593cbfea06b336d24e3f694db5efb1f75a131c8ede6d85904030ad550e3e711a448299df867c28d9cedc00f7a6af858941f739d0318a04240
+Entropy.1 = add7259c467713fc7cdb2d2c75c222c087c91e6324178a5f0643c59ed353533d
+Nonce.1 = 7d6c4365b04d1e5775e6d28201b484b3
+PersonalisationString.1 = 9d03b16fb608c1dcb6b152df2eac6bc9cb06b4992fb7a6c3ff23b16175e64a96
+Output.1 = 0e480db2cba1b1251bacec61ddfbc13edeebd9ee7aed408482c90d49041dbeac08dbaaedd44d93e5695b741a2968cadbf6547491aa9ba1b254353bb7adcb39ad8b037009400e2a7091d03e3752646cc1f1dbfbb0c32f5dbac693533eb8fcb4a0ac4a3ef022859a08497511134300d27c2ae96ae67c4ec2e0930d3f4bd8062bf03018f74e72734ff18d295db4339de172774b6f795507ed5f3c54914b1e561e9d4de15ff2109bec9ed9d6d909e79c32285e63675022bb86b7f797c9b8b4f82b127f3e078539ffcaae5d3707505351e0776696667aaecd2c175605b180deda7f6fef8e89943a6bc6d2d0edd69d64dc82d1c4bb91a7aef9e7dd6b92b5647e29503b
+Entropy.2 = b253f84edd98a84c546c19344f7fe406c106e5275cd34fc54f5c716e975258b6
+Nonce.2 = 7066dd73e116f98f1c8610cf799f8ed2
+PersonalisationString.2 = 7f0970f71af66801d6b2c0192bfa3edc3dc7fc3d1ce70060015d322637c4418d
+Output.2 = fc53724ca146ed88d58a5933a6a5a8a1bc05f0cda68dcfedfb43aace70066c7fb51242934313334f4c68c63aaf0a7c128e0bc72fa1a9b87b0b07dee4d3215e546f72fad5dd8ffa7310a2b944407c962e240829d7c7bc84add1a1639a439786bce6e5e2d35d8692559ccf4dda107f9c8c4ce1ba204489a4af4d3f6151176d45b365433f0523b9f07144c8f5bd62f8927e2eddeb050b1f94bc659a4b23d7bcdd4b84eeb7fb6e5614503c13540e90084b5cdafe5ddfc57d4f85b87c39a01224724287d567d30c2fcd6dd89b026e969e301027e3f1b80a81cc9fc105c6487760e7ccdd4fa4c386dc08b854445653b70452e66e7d36e44c1a3b6dbcf690f0d621c351
+Entropy.3 = 780985ea184a51700b88638f1864f8c4f0547718bf1e6fd2126ee168dcfdfa26
+Nonce.3 = c4f5e33004b3ae055d2661a4b85db863
+PersonalisationString.3 = b01c2f6daf9c3def73f437fbd52fc45ea0f230d9f0325598bdd15e81b34ee668
+Output.3 = b926314f2bf2c1dacc40e1c545b9a7d00e54884c2ed42e4bf6b2d96c17a3932b5d909059f21e3048d40379c44bbb6c6bebc264d169a59aac4165c10b735f3616df0236ef3b68dcaa5eb54155d3a58bc1831a22d55dd2fd46ece154f8e59cafc3008a4a9455a2eed024854bae4d4073147a21abfc0981213aa70ae408406d9f23e8da353fbcaed67709f4ebdb8c1cfb20dc3bc63ae70a1fd89a5f8592b1d2cfab27ae69d626fe93a9c0d3ce2a41b033ecc155afb4a96be6185ae4e5701acb1db1116dae3f41b241e60d378b34c0cdbd1ffb44550308cadc6e418da0ba3e1a356d06dad6d61e07f24e2f885b37f5d587a31f1658f7d2d8e572b9003342803a2332
+Entropy.4 = d1f50d07a46ba5b8b595efd66acabc6b70198f1b65ec4a739f2f89fc0d6743f2
+Nonce.4 = 8683889ab82b349f74656c4056f7d07b
+PersonalisationString.4 = 1788efb9a2619e0242639d39380ba1eccd7f9af6101f217204da17ad4cc0a0b5
+Output.4 = cc3a655585bbbaa957ef336dddcd63e45cbb56c197c6675e795c9de383d74bade00330599606b9fa63bec1f46ec3e92848b745201ccdc25fca84956e07132de002d8297e7917fe8fc2b2d5693b6c9c47c718de6eab306142be185ce6d08df089046c443827c045c8302d9c0eeec74d519d926f7d64c1fd2f9aed283595be1d4d3949ac1c1af8490f9d219941a16ba5812a8478319462601995c90618ac70873838ed3d4f5897d0763881115162d3061fe7788751736a2e01fa89d3be440f980c60b061e81fccea6a8d3c4317eae0e021f8b146dea15aed73670538a8885dd5049290596475a915664b3bc16f447c4ccf0a5d7d1769c9d1159055af40012aecf1
+Entropy.5 = 2e03ac55686f056f06f3e90f4eca2d92dea91e789c09b199651408e121f817a2
+Nonce.5 = d5af61ea5dacb0842ce832d36462b8a7
+PersonalisationString.5 = 9b3567f32cf3df72af5c44f0a75a176eb7a49e436476e3e8a6c4d2d8630cf1cc
+Output.5 = e72c1145666da3744344dbee03bf30120fd9ea7e77e587873bf55fa6e40d2ff0e0ae7fadd0ac79ab7543d566a35b022cbf3e2f63da0fd967e09ae0a5c6d32d8a8cecaad57888984fd82a196406048bd0fdbdd4b7bc9e0ee08ea8263924fe0ee4447e0a9de019092b12258a159f20a32c62f5d6456d4cbde3f4d46d60326b4a68a922b23b2a55e7a0d90fedbd171482e7b293150da2ea6e1303934cc09c6d8d5d39f34475d866f449b82586040926c589f1db594a5f94e93b1540798eab92b1771a9acdd92038229386a3fe944ea2166a27c06f1b9978bdb3c6a1796c82f4eca35f54d356b8d6518b3567f63362f73db1f95f9198ddd41f88024a4105598fa111
+Entropy.6 = b08d614babaaeff7b60f30bfdb767cd1ef2117e744ebb40bb0e26ebd780a2f85
+Nonce.6 = f7c44a92685cb9982eb2b303ab423a6a
+PersonalisationString.6 = 4daf05558ff18c380695d6e488aba4e278b079830fcdf553bad05bba94817102
+Output.6 = 554da4fb08e93dd5568ebdbdd31f22241892e5af438a57e64e494f780174909126c7294118c20d7bae25dc2f9084ac35517f36dfd4dcee58af25a95fdafd2a6ed998c7c41e21191df73548fcc63e61c01107c24c786030ab817005989fa0e7509246b9005ce6bdd4e26d545a9cb89f4175af7ff8c0a1046b0291504bf82d78da3aae30809b402e549f2a1c3a246f927241d045e8589d973888a47dfe2574dd0c9a9e9dfea377937e0fc69e4bf40b6a86b612cea29cce7d41dd15f76bb93eafefc43bfa9237de1167395474d42669f05daaaf4034ff97c410440ba175f4b431d16d702c9718e1ceefe4236c608e61f66cc378251bfacc36606f47f364df48f143
+Entropy.7 = daf400bd2c2f4ec2eb1b5ad2942df95ee1630f89bec55512297c73336b20747d
+Nonce.7 = e1036a0cb21f0316460d607dd43cab3e
+PersonalisationString.7 = c5b771c4d77dc827fe0c8fba95e2572871d202628606bf2f9762be02e018c6b7
+Output.7 = 85a0b64015dcb79df5943f856007f1dc38c561675e75721f0c7525dbb94c68cb8187d80ab92e1b318234e3dab273e97db5591713910da80b5222216883dc848eb51e2223552ef0c72147b445b497270355868b9e299c5f647b144e4e270a5478a67b86f220d1b83b1ed4262c4f341bd0b79d8f276396c87639a270ec6378c4d4046512461931a2234b72c70421a5ff8ae234f02a40bb0149ca6229e8708381b8d3b1ed321dc92d586770972849becfdcdd2d44bee53ae4dafcb36f37f2f68670ab266466d7975c1c660b9bce2c616bd06b0fb37e85f988cd21548ee2261e5d659004e12fce1ad46f065999cbe5cf7244b7ee79371fd51d7aa305c4716ca1d03f
+Entropy.8 = c47c748c91179ef923096cbfd0a514089b3aaaae521adef2ccf4e001a70d7a35
+Nonce.8 = fe0756615d0c7cf7da577b211990ef35
+PersonalisationString.8 = 9f676d607442a3eeb812146e5e61b23e860c567d388130498d109912c444e58d
+Output.8 = 8af06bf08fef7dda378002f9e40ed424110f9316fb1bf2b1bfde0b8d11f5d58c9a38a2afd9e9554b12e3d32e1745f38c6a3c753d7b30d9503c47d914acfd54207dee165903230a8de58b5e9f52f92ab08bc6f343a6176ef45c9d1b22c16521e2e08102db80e3ca1dead0c0216f70505efe869b1b1b441a69b83795847bb454f42235cbbb3e93db43b062d64b6b61adeb0ac8f08cbd3bdbd3c8f41120a2cde082ada4684831c35343bfbbbf33650cc17835246ce2536da3fdea5d90e569175f01f56134f614253029c928c7e6291fc5d96a14ad74a13a2531152994e6044a0ec501d8c301dd3eace89fd876742816985da1cb5d406ae7c3fc576072b0dacdde72
+Entropy.9 = c6f1e5decdaa6d12bb0a89a4f57d2ab2bc4a5acdfd7a0142bac9da1b90d9d29f
+Nonce.9 = 5cd1c356950d1ffadfcf6f6b70090ee9
+PersonalisationString.9 = db319328e8644fb9bf6645e8eff5181511e93c9b711316744a81ddce4cef695f
+Output.9 = b948b02d0f6c9a48fc9ebc1dcc399969e0470a2bfe5fc4c977eb4dc4efe25a2a3f78b044679ed25c0ff22c27d55198d6ae674d4647863cafd60ec8cb3a48dc4dd1aac9c71c6cdcfac43836a3a44a2048f4d76a35f2a10fb02ded6e6bd2ce23bc4f759c391becfc5e5d853ba67d27a197ebe5ae254c5af417a9da29b95decb3ca7c6969e68dce0b9b1560274ebf16a69be07b8c4b3f13f62cc86ff69fc1b734f4b0f6e0575eb0c485a65e8a7aca45f9ec35ceb620a39be1f438d994684c0028955cc89d0e4d1ff972a7acfcbf684acde9a2257067f2f3bf74758238812c99cd83b1a3005fb3b179639c2c9a7ed35942696d488e5811a7db3c9b2056ca1adb6ab3
+Entropy.10 = 03742b9f381090cef732fb774b73e3a10ddd99f45ddcb5724020b9b63d18b6eb
+Nonce.10 = bb80c667f0a4b2eb8bd51b0008737c3b
+PersonalisationString.10 = c00f0fc8c9a15ab7c066bf77e264f1e5b747b91fe6824905caccbb17edddfbb4
+Output.10 = ff587ca07631eb2ea9712dc7f7db74a0e008afd77804f4016df2efe649dc23bb1fa64059e0be09bf803d5110a027bdaeaa926992402fc5c523ae3409bc99173aecfdf34b03bba173f985d505f8b5ace8df2f8d30524316c7467b9c02b424160e3e1e99972628b0396c24d48665454e44baec91a867d400f9ca4a7da19bcffe1383cac3796aeaac49303821a7bc121dc7cc780b5e90d7f0292efb4e9c9c366ba37f6d857b2f56a395b7a34a07bdc1b6023763d04ddae07a6fc5b5081eaf6dc7e369e9349b5ddd150e29c693dd6ed513305039199b7313d5002d7fffe8d32f1f58883ccab59a48bcb4d25eeb29b540f1face3b3c4dba2731835c105d80edd45d23
+Entropy.11 = 5c9714d0458f6bdc3b57956436db01a91cec80cfec267daf62834c16c0600b7b
+Nonce.11 = cabb734b5011dda60f0772d415cdeb32
+PersonalisationString.11 = ca5abbcdf8578fb58619f4dab1f065c8a7a69e6173ea893f16c5cb9a27e6a054
+Output.11 = b3df6dee7fe5d5cea49d88587da12776b0c9928019829cdb7f8fb761973a24ed9be245e57ee39e73b994121b3cdb902bb9d36bbb5e1b77e4b5c9fbcff14d7f1d2c1c7913ced5fc99a6e8b98168e9b3564682ddcbdf714bdbd020e01611644aeb2d32192caa7abb7b320c34714ee6e817fbeb8f7a265e2ce12503dcb811b09b752de4dce1d28dd558e859aa89288fdce3cc8de2b3e20c7fd802ab506e7587cb5ead79fcfa836923d0b2a0e7b5b9c8f4dcd32a14ca495c52d2317c895d8d3b5ee184f4886a6776fe7e4da5d24bdad322b975ecd16f26f5edf1dccd42acd9c01e132d325773981047f49cc65687e2b631ce4c57b1680d35c01acd8360e66af6f906
+Entropy.12 = e2253a35a6439e8d3c0f2d79bfab941f517739a23f7965f3a4b164129ca7491e
+Nonce.12 = 4d8438248515909bc48d85c62e597b43
+PersonalisationString.12 = bf19a8dba2b174fa7a16151c17faf3689b97281868e9b49c749e7df255383872
+Output.12 = 91fc2f02c0a5748253f87d2a661264e128d9b919a51e149cf1a922d49a8b891ff937b809f2791d477d824b999a7b9d7573c86971e92fccde9798ea935cc1ad03e0cde00e9fddd481d0e33433824dc1253b6a144955a735fb4303accc3325b23fbf7e99affc7f95cca2c585b2dee3762765db7a1ce93229933d0ebe39edf985e84f5fb671c86f2a5d6d660bb7933f204cbcadb0eb829d9397d15184af6b7891e91fa1f82bd342b8d88b9748cbcd66c2a75ea1bb8546a088e0b29bf2f74f55f8842abe2d3214b1f4a37f2477d744747209d2c516d1d284c5828320c29abb331d32febe6199d37b3cc6bd89c4e9c9dcf5c55c7ca2f4a0b233c7154a946f54205663
+Entropy.13 = 288d9d6c23ccbde96cc3ed1df7ed35a56ee768805ee8fb529e7e00a62fb3955e
+Nonce.13 = 388145778b16d54b3029c40758081c06
+PersonalisationString.13 = 793655b5ce3ab8bee33ee590eec8de5b09b459e9875b9f99aef8a2ea8573a395
+Output.13 = 186995df846c1c5a02c1170239c3165938acd5dc9d3999a72f8a27f0abcb880ce9214f7e4dadd91bc116210cd110643e1f5a13f558f1efc46aa42155084bfc2de536f4435ef48ac85b167943c9b0323f9f6dcdd4ef6d8a0a665ecb467c0bfc523d439d50b7b164c4d54c0cbd51a7ae7c53941a09ab5c9d8fe77f5277014349ff79ec2b1d1ad94642b28be4dcb1d081880d11b6a0bae19e3192b3cf50badc9ec01439b193c5a76c29da92d269ceeedd39b3ccf7cafa8d85ce32c59b3f63e272418c3c62446c41e41ced3f45f5972ef9e31f5b7fcb3779bc6627fdb093f66da9f382e2b722a9f928910f5c209d18488f46ee56f5f6822dcedce604aae79f4698d0
+Entropy.14 = a6f5450b36f9b76e6bea00769bd7586d30f7633312fdceb82de3106940c6c96f
+Nonce.14 = fe9dfa1b683fa9cc70b7c7f8c81185b2
+PersonalisationString.14 = 7e86cf4111fbea8fa9b180a1bd9ff3e9d233304b1d293adffa49ce8e77f400ab
+Output.14 = ca0a6268d034f6817edcb6875b4754b5e9b2061ce0bc2bcd27c28065d8258b40ae63bf6d1e15521196da0afea8139c10d7bf3b54694a82d24476c578991fce1371e40b78087d95b1117650af7134567513a017353bb4af85cdc98db757cec9f92df42b7323b1e5d05387debb02750683a5553bdfb5f9fa34e14d29e09ad18bc6ef2380c173a19631abde085369ff47fa8b4fdfebe13b95b90c6f5841fe5aa6334edcfae26c13cc5d14d17a02d684b64bd55841831bde4c75de7d49bdc1a405d4e3e0d327bec44644e972349a49cbd48a4d3b8e984f5847ffeba950fff55bba9b287d51d8475f7799752208da31d91853fe6d04d97ea2a33d53b07a4fc787be2a
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = adc9f3637c769fbd1b96486dfc11e6f411c4019479bca1da72b84ed3357800a3
+Nonce.0 = ead88984f93f6cca5429f15f3c463522
+PersonalisationString.0 = b979f764ce2238cf8bc7ca065c7b237969ca0c1315dd04cfb0e8c76596cde541
+AdditionalInputA.0 = 70ea3cedecde3ad71313fb69d08a7eae49c57fd95cccf8ad01df06b77a34457c
+AdditionalInputB.0 = 3acb8005cc40184b2eed70bdd7a9e467dc71da1b366ba68544ca54301ff821f0
+Output.0 = 8ef8a9f36469d47e00763e2994e81f57d633d67b272d6eb04ce7caa8e80d23708454cf281f31df602e743fc6a37f47808a2fbba2e29a78bb7670d8d518585d1015d7efda9eb362d8f115301133dad020faf736107ebc3c951a0faeaeb2cbde54888744e5aebbd57789889ee91d6118aab00eec15936500dc2df48a45ef789bc681eafcd894ab817bd7efb0035f16db03ee6db8f0d48a89a3274d042350d4580fd74c8eff34fd29675ad3dbc4f12f0d375aa2d8a59e94d345204d4c2074e77565e24a28f432406c21db21de4fdef675f85c7e11620025c891f4a712b84585a69805adfc60f9c58dc239ea397f39e375ad40b945dafd7f360ff69602b634e01237
+Entropy.1 = 8bf9fcb308633bd96047d26e74996a371b84877f8cc2693fe6d35a2d58635728
+Nonce.1 = 0c34c1320bb44b52940580151d6b66df
+PersonalisationString.1 = 40bec9875b7600817f2747fbc7e57b602243d54b3f904ad43a11300e8bf8db68
+AdditionalInputA.1 = 8035ed0545b4d13a9568df1729a0bddb79351166cc783623d709d8e988e16a54
+AdditionalInputB.1 = e6f28695f5eea4846b473b89d361ccbe61b9aca654c05ff4e3033fcbb7827bc5
+Output.1 = 4671530a87d9dbd1da101fcc974b336ffefd7bcd7958b88f34c1910abdac0a255430289d39e3d3fcca865d4376c598e140cc820177a5a25dd4a4ec3b8742a4183c397d4818b3fd7599be4c3826b1d2087963dd21e99537a97946557c6a76ae6be47dd3af20b41d600219484b55fafde0f3a24166df136fbeb1554e2cce2d03179b3d10411f6367faa95dbab36465ee05f6c1be90b1177f4d9d8f99a72a1905251419aa0a6027697c14719970fba8f8029f2c87492dc4d1247c4d8c2ddcf7c0e9adbda2a6cbcafa3a829f1ab33bbbd2fcfe13b330b6e00f4758548a48cd58d255224275b82daf678c936ad5bebaad7a382a19c463b616a9e7e8253e286eed97bd
+Entropy.2 = 7a162b16d30474891713d040a2c687ddf2fac963bc66c7d4a9af587a36037e78
+Nonce.2 = 14cced220a1fa5eb84d055c425d62b2b
+PersonalisationString.2 = e684d7c4118cfcf7efaef2de71b4a1267ff675dc0e17a0d1a1f46d6fc52c2ae9
+AdditionalInputA.2 = f0f761b08204e3b71f10c0d3c97f4ce19354bbb931881f230497ef7c8067feb3
+AdditionalInputB.2 = bcf31047a99f3377e807cd4a9341ecaebfbf68fe5afec30b02cf4f77511b64f7
+Output.2 = 780d58db9ac60f70b6e3dc067ac6840e98cc21b24f048c2168219acbfbac6377a0f039cd59f76691e2c08988b52ab2d5056cd927bfa4d7e1749034a170ba9ce658a2beec30aad312404afb4e70fc22fd575f0548bdc76790d483c249595be4f95faad9f820517f2dd7fa2fcb9e1d08e3692e6f4435fd6c21f113640e45efba137efd62ad6b8e5caec1df450951c2b05bcf00e2f1827519c7ca3ff9db787a5885e5ea08f45bd90496301ce9243c5ef83184845e549f985a1bba557605db679740e6d909b80ad2faf642fa9ea6a0ff228f4df80eb2be1189c460f09cc4a62da2b82015cc7e3c864ec69f4c9e395babf7286fa587f6fcc9897d4d32aab050c5d3d4
+Entropy.3 = 7d5fa01c2eaaeb3c6cbb18f835ba3f298090a18ae60f41bab419e4797a222656
+Nonce.3 = 7c0acd7387200420af4f7f5485e06b89
+PersonalisationString.3 = 508bc1e1ed5aef30009011750c2f3610559bb6da419f0977c839fb38aae5aa95
+AdditionalInputA.3 = 097495adcf5b32861d065ba96bef0d6c413ea223f8252e6135d0d729701fd439
+AdditionalInputB.3 = 7de9b9af78bff2e2c097046fbbe873f7cb59b33d5fd6f46ae4c4862bacbcddc3
+Output.3 = aadb53fdf415fe6dceb1ccdaf4755a107b4dc54dcf2be35e366b8ab1bd4205879e3e2fdc58932acb3c94e2aaf4a2b4b8f8b1c4dc96ee73807fab85445573a1a7d74a4963b9858fa995e73f2985f860a227855914dd3c1f5f4408cfb4cff6f91ed36c8f07cd8bf87f6904056caf744f5d6169b1c75189f8f8c4175f9b2e922b90ad977b9b9be4ef71644d8ce44e24eca989ab52d457f1f49565e0eea684e4d92987473b0605a6e540b38b96de509306279731f8153aac68abdc5e5a3f48ef877b48f36e9f70414697869eae7a6bad58ca4ec0042bbd32260f4d84664a17a7eba3d1397d91bd55a18c22dc7f123ba201512e0533c01dfecdc5abe0e753a0034f60
+Entropy.4 = 1c9aea7199b3b982e0ad74b973364367d980a2ea7cf8d52f3c24e24e814e6b9c
+Nonce.4 = dbf67885a34bc3ef74d7341a35f46718
+PersonalisationString.4 = cfd9bc3b05c96255f8f04390236fe09a6aa41bcbe5257ea6b3d0994e8ecae5f6
+AdditionalInputA.4 = d97743c28758f9a9e76c17cff74981a82fab10c26d18cc56c4f49942ba4e04ed
+AdditionalInputB.4 = 3eebff61a6fdc3c79b7e3017f5067ebbf737e5375845ee70b97beab2f6cd7c81
+Output.4 = 86f241afbfb90fc6f5014d518b6bac9938d1cbabd5a53278d29d9f0a65b768663e6149b4f4ec9a1f702b7db271dc844d0b1af32f707f8f98fe69a2c58e61d5c77719a7082f0281abb3aaf8bd498aeed29547dd5475a0564f46bbb480365edfbe61cfeb9f4305c488d249752ecd687007db51fe61153648ac48e45ab70b707ff4152ef56c095f000cbdbca632863ee91d36fba7b2a42f82819003b205d4f443d812610e322669560b1f4214777f483ccd1256b6e93ec5c658c2027a4b96a380d3b969f79c1d6bb90d40a71ae43f934a1946f136fe9a8233213f0803ffe5340636cc5a5a9d20d654bd8fc09c10ea09956e36ccf6c630ddceefbf8216a26e71ce57
+Entropy.5 = 6178fdc27e7ca595e9ec586bdc976db694cefceb7f42943d2ab1dc6347c89b18
+Nonce.5 = 328313c7f131fff1040768946ab1a6e3
+PersonalisationString.5 = 2b7b70a80a8b8a7206d3d0fd8855a41878a4e109c7a4769c5216a6f5b6460750
+AdditionalInputA.5 = dbf13a53a448ab282160650054a66161fb9df6a88f63295059c96320f2b25812
+AdditionalInputB.5 = 9bb3bd1a28aa4c453c5ed113799b6dd08e671fb9c75428f042358515d1c212c0
+Output.5 = 1c8301f16b3800c53b1902070b40a5b2bbeb20c4a695b4f58e3f6e6b5deab9f6e3e6c699e51d4af5697e5044aeaddd8cdd4c47f6069801bd16d795e52ff8fe26df3136e0ae0eee57b10478965bbe654d4cd576f4813a350994f3e69c1f0257544f07e4f2f8332e05960edbcb77740f790ed88d722e8fc53abcb461dee973b60d6b109d40fc52881d860f251ea406ddb7153b00b268345cc0d1b1e5041597fa1df92fa72397e4dd3203dba88a41bfbb46fd537e164e1d68dd77951bafdf2b92c44e1105f30a11cacdb986c5cd82974d55a4eff89b021a23d0a8adf001921456f4bf2bcd8d3533f44cc679dbdfb1a04e6b0c588700c97ed72149142dd301ff0b28
+Entropy.6 = 9890952dc9e590c3f943e2345074a5583b220d03f000db3003225568930a9c56
+Nonce.6 = 1b7b8672bed5fc6489b7dd7d7881f399
+PersonalisationString.6 = 26a572534ea88c1b2ab6ba8fbf22cac200715351861201f74e43a27d3a742065
+AdditionalInputA.6 = 12e70f853aae568d7d06deb8d9d751db12ba7a0832ffa4e10a43de5e79c91d4e
+AdditionalInputB.6 = 016617fbde7e0bfeff10576508984c6448b3d1f7b4ec1eb5dfd8923d21e3c833
+Output.6 = b1b52bce27470ee1884e6795ed462d6f53b016fc43687fe7fd2ef113f806ca91a7d5f8d4c6289e3fd162aaffcb3ca8466e8b599128ae8a96bf825fbd582543e325bf1fb5a9a4bb8a6c67bb8724f8f0c41b3eb93576e78bd6c2d2006e942baac1a5ba6c4c872d24d6ea06738306b5297420274e564f05f19a49498728f728bcb1511e181707fad77a5df95f17251d3d5e78203edfa3782a3bb39fa96a5922b62799da862292f834ecba913987f516891e567166c040c22c1424b7a76022bd65cb0776eac68c1125b3bdd52761ca0bc92a9f93304ac4bc90aea9a339e8e91bc83008867a48dcaa715f42ef0d0d2a83002ea39f36029ed7f63e9c6a406d5dc980b1
+Entropy.7 = 26db7d60f4d79b892611dfcb52730c91172d63c0e47ef763460e47bd9d193125
+Nonce.7 = cff01edd427fe442935b2f7b24b5229c
+PersonalisationString.7 = c34f4c0d32467a88fe701d48283458bf9d34c5d10a4bf3b32f73676ee8b8ceb4
+AdditionalInputA.7 = 024a1d0cd380c595c916ea4f56bc59c93c33539d38e072d1535e703f1e80b9b4
+AdditionalInputB.7 = f11180f424b38340193136ce9a1ab7e6a64d3b49626189cd346ccde6e6cbaccf
+Output.7 = cb17590345e5479b0bb5b52d1f3650d027f993484c6c154b5686eade3772fb4f1891c19c4f990ac3324eafb122819ce22645e21e2fd8f3da54dfa605da7d0082d0f48b8887c5abc59e0b9321a9aac9a6e4e762a43abd7a3ab5d480db22d58708c343df2cd2058523b423eb52e6e8ea3e916c9c87eaebe7ed92892ee0a851f10f262354119514c9f23ced124be8cbafc629897b2aef5eec8bd370d0bf928d2b40e702a2a38def64287617928f21a1a3c54de63f7705ae837e2d983649fad1fbf8bde83a9f1750c66d8225891bac94139758a22e748fdd1463ca539e0f0b12ac7704bb425def93f0af786fc10fa5964ebdff589bd1e6daeca3e681c3fcfe83dd4a
+Entropy.8 = 46d9e13128472cf2224663487f41232925ac1e6c53ea1592966a29cf37a10af0
+Nonce.8 = 42da6f186ca7bc9f745120aa635f66ad
+PersonalisationString.8 = de13cc3b418cb8149a2f4349605d2cafd2ad321756363e854ea7a1e3b45817c0
+AdditionalInputA.8 = eff70e7b84b1d09d4854d9e4fe56693c130198ca6c5684b99883ffe51c73bd85
+AdditionalInputB.8 = f92328045cbc9635c011d3740b4c97a948ee12d07600790ade4469cff3ce9ba0
+Output.8 = 4113258781cbca60aa66606271ecd9e4410ce9829c4c0c1ba1a40d62f6ceb14b294390805856c8966328f5a06dc3c00196f5ff8909114f1b6e05829516728a2d2cb96a93311c488f62578b25edb0654f3f57504861e998cdd60e77fe82b07b288aaeb65a2f35a658754e028cbfb147985f1bb89cda645d7d6f8b38f8190f49da45eb9f70044bd140b18fcbd7d02e2886ccc843d820fe6a77645497b97724427198b1444dee7cf99d8d3a9151eb419fb7231faa3bc361a87b1c7d5f09d54eb2cba39dd06dcc7a2415593b980395b7f8d552190e0a1993e06223666573d3d6dd16a0e591da1329130425d0b8de294635fa038c61817fe94ce15cbd7199219c023d
+Entropy.9 = 1acc3422d89abf02ac5c8df5b89299f6db378fd232d5433c490db306e5aa6d4c
+Nonce.9 = e02fba6df060b4d64b8ee9428f49331a
+PersonalisationString.9 = 67fd27d89eb8d3f9d4ba2dce6554579ebf5965f52876824f42e17f846b00c615
+AdditionalInputA.9 = ecf7a642a70119c0920b06934e6bde4f55c9c3e1f6370a95df33ed408d135f1f
+AdditionalInputB.9 = 86d1324006f562e330b94489e3567dffcbb6f331b95ab608bc8d2f3efe1ab52d
+Output.9 = e431486499a7bc5360d5f2c475ca5b24e4776b4354b388222940f781b18dd5b1e3fb4929ce704fbe8d7b71c608f5a02e19ad7dd6e2f4d25f2c262b745733b4223394a34f66553ca9731f3c1b2ad31393acfae2b13c6192265d2968504ec0aea69a689121d5d7a137fdcc651cc46def9b651b5b330810fa070079845bb442a5e998cc886a36703bf74df94cc107b031dd33df85ef2fa5a3cdf0051f32208c703a0b5e377dd49cd1c0edb6f153988f740b344254e54bfce3d3222617aba7424eeef105732b8124e1ba40777757d7670b60868c7a3a5e61ba9579cb3af4556357780a5ab883eb2623893ddf8a8681729f321f07eb7454f6f2226c84e32bec6215ba
+Entropy.10 = 0fee6b365bb3fe32212491527b6acf06ef4a6e0ad44da2d606bea5d92fd1584e
+Nonce.10 = 0fc2ab565b599ed269d71fec6fdbc878
+PersonalisationString.10 = 303cd364a259f6396597be4fbb6b4cf3ff1c3cffd07c8fab452dd4f7e055df0e
+AdditionalInputA.10 = 8ff9bf93e680824243115c29613a41789ac1a8b55f1103dfd6f43edbdbbbc227
+AdditionalInputB.10 = 37244d52b35197aaaaa7a6790ad3d009b661a67e07249f75ae00f4c3dcc22edd
+Output.10 = 788cc299a32b71b90c735d00862e9b3bb46b5fffd2108eec93bdf4868ca554b298741fa6ab07c1c829eadffabd0224c0b11c43f745a347913612edbfe40e8180e1e95a89a3ae097450d2a708c59d36a2b145ee48f66c24d9c6e1098b48a3ec68cd2810c8a54ea07d7c281c3b4273f70a020a1ccdf79b07fe6c01cc4f2637f3b6c2f998a38950fa6edff818d448dc0b80075051a78a80237a5ec2c509d6c227eb36f91a3457ca8b62feee2211ee394808061ec920f332d685dcd3bda8633d27e0105d5dcb186ba9fb5da53bc6dc7634bbda0e3dc415353be9e6efb5063bb3b93771513315ca0e4d72ef047f21b26426adf5d9915e0534d1b22f230c5442264ec5
+Entropy.11 = 8b3bb4f24f21ab90c62aa39b0ad2f2ec95ba11c60ff7ea42d51a5a51c1d76ba2
+Nonce.11 = f9b14adec03b96ac277216b44c349125
+PersonalisationString.11 = 4889fb580373fab64f3ccdb16ae090ff64bfaf57e6c67158b49c7c504fb6c70c
+AdditionalInputA.11 = a3305f70dc430edf2460ec326c797aa16e14ce2a4407f504b2af8a02b2262692
+AdditionalInputB.11 = 028efc38a43e4a9ca921a052b88259621d13ca436602c23349f0ad97e22b6426
+Output.11 = 0cb259fb3f3fff8727c6184dd781fd653a8f39912fcd689e1cb13f616f5413850d5eb9013025d45f6f959ca87bc5a426a43c43283e1c81558597ad68526e6d4808c64755dcf22e8aec3f23b70c2bc908f6af38c1efb02bb77de6755460eac0fffdef3d8a93cc804198b68f87ec97918d6fa599f2a926de619cd728852696abd9bbd7d33858614e8e36d74fa3260027f428fb1941339b01e9d9f9545df13c128d044f98ec042de11af74bee70f35bd3e8ff7f13a5d59e25390b9ab76c83e78b36dca199f319d0b06e902194dbabff1da93f3dfcc3b4c0a673e4196881cb32181c9ad1600e20fe4d087c8beca7f6b66be3008f37b8cf3c79a8ecca557ad6c3e49e
+Entropy.12 = e85fada7870dd47d268b2c4f425fe62e73b5ca13bf73f357863e69747ac92e75
+Nonce.12 = ee92435d8a4284725305b0d5c668ae2d
+PersonalisationString.12 = 09dd8b6fdad45aa8cd42605534560c6d690420110af119e9ec1a4c32b9b228a6
+AdditionalInputA.12 = 1f1d272c662e8a46c2f6ce293a073a8bb281dc15247c22eed706690201c4ad99
+AdditionalInputB.12 = d334abc673f4b5c6311f5ee4c039efb92c61781c8b47b19e134af0fe821f7a78
+Output.12 = 5138e5b94c0046cd8498be8e3caea8a006f6a26fe56818be5a0587d3b2bc97a4a4beddecb86f5f731a30ab5fada8d245808a1b704b696b4759d7483451980ba4972629acf370c99dbf864e7b6ab0253dce6f42e290f806fdb6321f26b5fe042f72ed54734773f45e548bb7859ac9faefd3eb27fb6040aa8fe192e23efb1c80f78cac1e4a7731a338f44080137902c64cf4cd78dc862f7a6c1d241cd92ae384f31b149e59dbd73a5c2326bd341a38583e853eb5242f4174d27f517dc816e136b80d51af56b28933767db8cefa0638cc3f5d52e5a86bca1418a278ef5539877432d2cd5deeed24b5e60b9295ef04a698aa9f151528e3064d0a19838902b480ee7a
+Entropy.13 = f4d2ce30279264e30e503e12cd4a3860012b318eb3fbd2d35d052e7df79efd33
+Nonce.13 = dabf5ddb6960e828f2773512eb8c13bd
+PersonalisationString.13 = 0150441b3517417945f69f04c1aad32fe00579d8ece73694955c692158e0d6c5
+AdditionalInputA.13 = 2a5aebe3030cd6e618c1f854857fb3da477754f6950886a03a8f579594ae400c
+AdditionalInputB.13 = 387ab3af6c1df1f6218407c6c84d1ead4de220955fd57d9dfdf2e11b6b9100a2
+Output.13 = 38457da4da7b5487732a4424dd2f81ce7e62b35c4915224771764e5b6ff657d02e31f0a0984415b46fc014b858d946d42c05e33a7f4ed245126acb4f9a26ed68acb409c463ef453e6f1d2afed572c425ed63668989cbf28409d735e3e317eb7c8958493e292e5a11c67f3be64d28a9f89539411564951beb965220400c8547330932de78294192c6f208be9a6136c83b8a9699310889cc3b6894d23b966ff6e7b0466c841c6ba8728ebfdd1d59883e0511f1d49ad4e2db2e573acf558eb9cdb38bd8cb7a6b5bb5704a1db4faa524aed0cbc9f426bbf1b602f8a46237ae6e0eaecf2ac2fa8638c4f0cca2500efd9f06d14cbafac5b396838a4203f284f47bc808
+Entropy.14 = 7f900aeb8edc449047bd7421789f1354c5aca3d660fc7a0b7cebb99153c38b15
+Nonce.14 = 0ec35740b4ccaf128f692ee0222df247
+PersonalisationString.14 = 5414f7bab101d1ba72184a6596625823b9bcee8ad29cfa26753c21710cefefb1
+AdditionalInputA.14 = 91e14e178a033e26e6f6a0b0f3890fa46f83731a14cf31445c51a92166965f67
+AdditionalInputB.14 = 20299371a1de6f994260d1c59c1d3f731d8f70fea6e9389b3ede54d47594414d
+Output.14 = 1b4efcce136b40bdc792d1607d4ab4fadc10d5e2b22eacca6f412d3aa1c60320bf825778e7ff8296db9ea360e068350f90d7d4947dc9a2e2a4074653458784059ceebf2a97db0e4a29f7c6107783fa3683b6846b8c8ce7161082405643bb84d602c6c36ca79b2b6562417f0d15f46a4fbdc445d50935f49eedf01bb131d104385369fdf88d91518618134a37c5bf73140400cced73795910ad0d2a89db2d79355ecedbcdabf135219d2afd7ac28cd7e45c6fd4e913ce5d464fd6de6e4c62b76ff86c28b0ab27a3c2622cacec075c790a7ff2f57f99ccb89c590a1dfb5a1862200c9cdf97f94eef18ddc85cf9830be662cec1885a629a6603add9396fb26341d9
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 9bbd1324f894dcca51a32242e73bae6450f70574c39762966c5e273e5a2bd6bd
+Nonce.0 = b5d6bceacadde8b9084f9e513b3f9a4e
+Output.0 = 951d7e7b3e00a588d4d7db7f1ad9340e6405e653b06616d276f9110f9ac92a0d01f054bac3f360b3c8a0546595372502203efae87c6c34f1a8ffc60affd246917d289d6dc864aa4d4ad43300b2e37555de3453e20ec33707bc8e3b43f196db1f728d294111ec438200030a2896cc2705ae0b4de0648fbd35eabbcab9306f97984cb6b41c966cf247bd0bdda4bf2295f9c801d02b94cad22d553dabacd6f7c0f5aec91648ea9c3790553fee7e3594ccc5300b234d22df110de392a05af9fea978391e6405a34de26ceed8787a4a042ce4cb05d11d43dfa7757b75f18235d7d14b87fdd0d4ed758c93fb8ca249f63d54891509bf884a63cbf3f0fef92a7ede8d72
+Entropy.1 = 9b064fec39a980af5ad1802e451573c00a628c9b0f0220a132eb35efb75c8006
+Nonce.1 = d0b7183b91055191f09d9d23caf4a4e1
+Output.1 = 459ee4ea91b9b8d4092bb0eb0324ded2e22ff9c058766d0877472e867840d578465e5d6a8b6992b9d67802a0ebc24a7f2cee48e78a296652479a63d9a8d64e3f0da8205fed8b52618f28511a8029153ee633370ea4d54b8d0afeded37ac8f083299df7f15612a2a918f06b65a620327bb0d44dc8cb4a8dd6a327c1a891b2126ee395598d263cc2d8c08eac61bbcfc93036f4ffea495db5500aa13c25c570de95834134a253a2ca2c960f1cdc947ddeeb7127107ae4927e831b9dbf07220c1b71e4576132d49652f54a4b106f216dd6070bf0258b9b58ae84359d0145a775f42d8d54f9969bf95342c8bb15e75710f0f5c48d216b78af297c4476fc4c888ce022
+Entropy.2 = 2380f4b2a43c3cef6b8f70628f90fb7456d08dd8bbc83943f3936d9c2b1bbe87
+Nonce.2 = 41dff48bd7e3903160ee27870ace09a1
+Output.2 = ebd1ab440ab8252d07aba0770db62a9d9e84f2cd7db61c0cef74c1d508b4627d9e4572c147f8c3a3b594a6be90f7b8a6ff3f0a9fa4fa4940923541f763146b83545cd3155110d41b779f6c24aec8346cc1d0a809bfe5f51112b3864a6663cec439fac9d34aa23f25e7f8e8c220422f80bb7c90b420a0deacd3db4789dca47dda971e7d2a1bf37084097ee328f4d9732f236d9c157e3d04c089c3ab6183e783144f40a841eaf0a1229fb01ebb2e9d162104ff51ad6ca0d388d488a9c29ef877f5945c01852a4bd45db1092859a1556c59d82befe203fa1818ab499c6d48c4e4d773357d8c9614b30197dd5c1665f6ebd9ffdf4bc39523b33a264cb2ff3eba361a
+Entropy.3 = 84e7dba652be17c1c0cca87d9a969b9af18282202842ad14c2531fe76f83e875
+Nonce.3 = 4896f2ddf35c6401740e8480bf163565
+Output.3 = fe34c3145de3aa378fcafe1ecbd30d003eb9e68765ff8ce2d6cb998694c6f7aeb1d8be429a56d9c20243f56406e69e6aa88a4d57ebc49583b7fa440b32e891232d01f7deabac95d2611fd9d235822c562fae741420824b3792ff368e0177aedaf5e2e934e626a887a93da6fe6ed13e2b427b81972644a62e18ad1f8f876a06b30aac3227c0954b9ff442dcf87c638262fbb04d3e1fb246c9500121d90045e146afbb3f925cdce3752a941b8a0487a7b3192294a47011ff99ea9744792a01a8ff7694d0df491750d3fa1daf3d16a9cd3b05dec2c8970b179d46ea293dd6e6d0ff7202c71d3252f0afa6206b17eb3f289d388e3a9c29df8147ed57024e1187c7ac
+Entropy.4 = 4d28b4f412affb229b3385b79f99a65dc363058c6314e2d47556598a428cb3bf
+Nonce.4 = 69ab35a35eb5600c31b54effcab74075
+Output.4 = 0c206078d2d03fa13c60daaa827c7021e15a0290dd77b24bd018e008c0178bfa38eb1c0fe466f135c8e8b2e9e6eceeb2af31a6a16fc5507ddf777265710789ac248fbf9403e3716a3232566429c00e3cc5dcdea4f2437f2ff2a1f31ac0964a0346a6c6c293e1a3265237132cccaaf8780a58d8f324adb39ff2bb70ddb5132723315f8eb3384fd7d254e6551066a7a91adfb0ae9add781303695807eca55a588045f0caec82907b3a3d4ed0f1419c844de59596bc1b5f740632079502f6de79420736917776b1ee1d11a2f59bd9ce2b6e2b3906f2d38f4d96bbb449a29501655797ca990b85437245434a84756123113f20bafae1c2be0f0ed899dba4e116bc93
+Entropy.5 = 24448a568f6912661a26c34627fac21f2a67e798a2290cde17150ac593b179ed
+Nonce.5 = 9c2350726dceb1e3b2f5a07889e52d57
+Output.5 = d000492bf88878adaf7af6453ed1c45010d4fbfffa45213f7aac603e60c3fb575ae49f7db997b1d952d4840b6d82fcf0a4b00eb1ae153eb90f7b165cd7525edfa8bcdd86592d651f0afb40b635fbf391eb60146894e271e96e49138a4e145495406743a9385fdc68f23ff5e86c69916ee7d3a41691f9722ecb82e5791b81e11af3926d1c324d70bf63df39b3ada3e90f010326c2ee0d0580e7987b34ec03f5f5ba630c1e9290f8333b84bab99024bbb0cc81706f99f218d9d0a132d8b2fcf91e2906ce816b21913c20235616317d78bfcbf6c60900fa61570c28649809eef49c4e105793b0e08bd77947bebd9332ab5336b11d81c6b33bf984b2b355359e10db
+Entropy.6 = 3a0da00487148ca4e561f0b95faadceeeb35fc591661c76fcc7935ad78a5650d
+Nonce.6 = e3bf035deea32c0a36b5f2059fb5c877
+Output.6 = 5a2dd8c26bd0a3b565c135342d74b99142429355d51a3a4b139a2cdbc3d64eb4f478600b847388aa722a9bb25fe89ee7d0a60131490e083e76cac916154e39521c3be699174fa92e71ca98130b7dbffd01b54c2621b3525b0386b5861b540cc7c02a879a41789163447ddad8e3ac732d05fb6446eb4eff85970cc9c5797e6b1a3b507248cd2e242dfff48db1eaca77f5001f424d208247d8ca8d1998e7ae7d33eb293da86609c17effa828fc27a52014c6688b235d5b89aab5d7702acc446913fb50a160830450b2733eba77dd297006b33f55677c2400e09942a5dbc75703e09903f4c31369d582057dfadb98358a9d39e3545b793bab0ed8dcdff253cef3c9
+Entropy.7 = 1ceb646925c3e7c1c81eb2342008819010d49e0d11dcb6d972a85a007870fdf1
+Nonce.7 = e298763219629e8901e9365ff3f56367
+Output.7 = 6b50e633a4b2d6feaff1dc328f074f0978913abc373a557d8ca2adcb922aaf94d20e79f1346b6b85c843e2b69bfbb7dfa16f9debb8234141be1df06217b685703020d3ddd3a7f74793ecb56a88723c1ce81ab29f9f7ef56b3eb0b24142285a667a3b1f2e2b50aaf2accd89144ac3abccbdc16f3b68b1d61987aab373e47fe57e7621e328c0544febb987c599a434a1e10a91ad8f096764f51588e4c0eca548c66351348e728f144a7e585a0f81fdda645c7ed8541f967ad8f60968f09993ebd9a4c2ad63862857cd8fe5aafc78afef0ef03cc47ee88d912d37618ee59e0fd2ebfce9a7a4af6211cf23fca88aa134b80e22cf93dc8e15fd8bc30ca1a5775e1157
+Entropy.8 = 62851d19bd8146cd9829e252154734642a1b39d03392b7f138b0bbb7813c3262
+Nonce.8 = bf47c30f8f05e8dc84c5983747ce9730
+Output.8 = 4c619f0ec161fda03583ed4328ded5fbc84fc854c30f5cc777c47ab118fc15d56ce1713d64b75dd6c168225459cc7137c5f324338b57a954b839a461e38c407f6d4be935be264875a6cd693ec98b90125629edbf3c29c7a0b3c57f7e6542d2ad32899e56a496c3675773f794e08cab7ad8bfe95769a13ab43cc99d7ee7d68dd5a35cb57a668db468a99f1831972e4d7cff59f75fc1ac4c6a3c08eb01d94f0e7f1f940c801d960a6a85eb2f3f4578911e9222dd2f62cc18611e3bcb879443f91dad2d0d0e2f9603b09ba400fb6af4b7b73c97db42178c27765ba5df01b3b7b42e80560dadd73433d82073fdb09f93a381150ce8046014b5bd50c25e214e98734a
+Entropy.9 = 3b7964ddada8f16b495d277e57c7dd721bb098a49bcc0f116050596c8b88b94c
+Nonce.9 = 6f63d3239a7415859d302e78bb082dad
+Output.9 = 60df463f43c0340e5c63c1df2659eccd9f79266eebc88f5169d3a972904932c02758404e840002716add87208043766c94138f7bc162eeb754f050aab0e92df079589a46522b26ae33615923380de81a63e45181aee673e4b3ebef3c1f312ca922300f49edf85f5f7416bd2af9daa9ff729fbd01047a87c2788e842628d0221660df566d5921a7095977dfa9441c3e0c8b89d3cdf8b3575d13c4c4bfadd382703b9948fb0f767d468400a206a5f8eecb06575ca1d9d6d737bf3b7c80e42a233d4e5875fc46eb59db81542d91e9cc56aa71451160c38bc06e056cdc981e4b8c54d23330dae67f75fa3528345efa71ef5b0c51e601cc43dbb4a5968583e0304306
+Entropy.10 = 69bcc1be3917a3a035ec29eaeaf961e74954eb2126986f27e703b2813536e91e
+Nonce.10 = adf874cea249a301d88be68d97a7cdcf
+Output.10 = 1c59daef4f22a035f4f30c1791cd6aa73b5a939f27b2cef241df70c70bd3e324ca0b6f1b439c923c96acca5cb106002c5f73f3f6a6a8335dd7353f2dc1d9b2c10cff71f27d9b564e187e97cdc289df66de95aa7f2d39594abdcc4c123376110e6c09e19dd84ccadee35e4bd3fbb38b80623ba781c268958661ac31dc234cce44e29bc4644426eab0d1587aed15bd145838bcaa97819f61811f87a9d4ba14510ece56309ea88af8914b9b3d45b1fac3882e5fc0cdd2ba67a309f0bb278d170cf06c22589acd6fef645cdcb5fbe8bfe3b020fae2db4472b324e4ecb1d7bfa6d1317a9f649378eab952ad988f220ae12cc823f5ab8a2441927014dc74086bb64dbc
+Entropy.11 = ed0bcf14ad870c697972952ccf028a0200d5292028b0d3c0895830f316b674e4
+Nonce.11 = 92658caa52c652b04e1f87ea3923679c
+Output.11 = acd2e85b622993f76008b25c676a4354c56f3603a9311d7041d37e1fb44c5bbdb488d1b4a06b03155225b81f09ac25a7c6998effdc1a7803ed13af96d69f31f2872afa3e181c3dcf07aa338837a193451a715c02c75511bb63d7cfec5659f2bfd4b906761339b8e0d4a2f2cd2b4377a6449bdc877b59bb403074b4b3190f52c74a4d0672fed5070da1550edbfe75fe15bb2be3b8dfc632ae166f86ee8271d066592f76473df3eb645e97f12e1e519affe4f38941a4e9acdfeae336c9d83132981c4a1ae9eb3ab7eb1577a942b2522c3eb4c2dce453c59fc9bd46562520893bf9082e89fcd2d418afdc2ecead17bc292edd4830db798b6c2f00192340be018da2
+Entropy.12 = 6c652fb18bdc0a9ceb6a4a64a91b47bde1f14bda9e4cb2aee4bf7a1b5614642f
+Nonce.12 = 494cae47efb1609d8a042e6167ba16a8
+Output.12 = cc64d8334817fe22d79e4d03c8e20e732c6ca4bd04d10688593a42cf06cd044951c068f7396118a78ad6475b39285d12cb225438db9bccbfda6e0ae385eda77333c8e8237cdbb6a0500c1ebb8f8e9fdc065e35fc73a6c3e4630b79172e965f6d6183f91528b331f075a788a8fff1e1a410bc44b5b06bb5ade7fc59b7aedec39c0453a3249badbea0fc60bb38f4a132c3e0bb786e63a26f8ef29720f4fbe4834bd114e20679c8fbd2a20f8350d602e5e46a0a826376e98fd5e65fb3b44339cc00234cc033011f56dd25e1a84cc2be53e2fc52ef482432fa571148fa7c8ce27c04b0e16f7bb44e02b123099a9c1f9f8f8511f0699a646bbac2595acffd3c0f9815
+Entropy.13 = 1a41e673f9dcd36f8d875f2de629d2d8781cffa2ad7fc330700c766e5f864fd7
+Nonce.13 = 490c0d75948be3dc5659e1f71dea4859
+Output.13 = 423b41674ccab8ecb7084d77d69b2f3e6edcaecc1472959a836d8268e512af76acb32d7c891e78128ce7332df464c9bb0647e4c7634c2d03a4af2a9cf07cb59c01bab64485d3c419c210fff1bb77700bf6ff7d38848d677ab2fe032a2d246b49cb88c0e5b67334362f986d06ce7a832f15252a2c4a7cfee05f3dace252b2fdf797560c9fc8deb7186853a4fa3a228d1a2cf26114e2b7d5769300d5d5331ca0b7455d6ca341f32548de5e31005f8654112528fc9ce09ec7779504d90901dcafc77b3c2ff174203b38055fc5d3d271aa349722880569186604d4d290a70eaf3950b4b1adf5951d731b6c63839870667f12690c834455b27a8b838be7fe83b7b9e8
+Entropy.14 = c5ebb2ae08a03815e496c2db1e2a650b40893ea78fbd7ca8434edcde4432a43e
+Nonce.14 = 0cede46aca7d2a60f2e98eb3c7d1dba7
+Output.14 = 6d8eeb5ba130de7dca993b44b46e08894fd84ab8c347992aeeac56ce5fb5f435bba92f1129aaf9b3035aa117301a1289acc222cdac043dac58b62567102dd5a57483d79fd703e188a0fe47254bb20b361281b5b8cedded86ba9b6d86deb30e539eb7ee007131ab2af99408f38ec7fd66bec4f1ed71251c149dbf8393b6dbe96cdeb9a3b5ee065ec8636444e72339ed2cb27fbbe5421f7f141940d6fa1cf570b8dd0393625ae16b10df2f1f6fe35dba15a732357dcdf4f56abcbb47a4640dcef618e27d049e27f2af7b8634faad00280e004cfe3f52d63185eccd6c4937a026830c38e1ed6aa9bfeaf739416706f63bb8b1475ac25d734db28e39163aa0c69c52
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = fc5e63b0dc2d941dcb44c0aea465f55a0b472715f4a4de42fc9bd59b1a9e747b
+Nonce.0 = 923737a338790a844fd71127f4ca7c89
+AdditionalInputA.0 = 51f1587b438bf6153ffc13485171b1f246de4f32493d1928896334608671aba6
+AdditionalInputB.0 = 2ebe000fac78c1ebc66a109ab7f8a5427671193204c52ca1b9361cc282cf1e03
+Output.0 = 43e78c0a68edf406725fda0fa7bf6ef41a9d13792a8f3e0d68bff7e113e1ad2106aed5473445b7c5aa3bad570b7060b5ab9375af46ce5b2abeac2ebb3bcd6fb483136a47741a5f6b25b41e22589fd5405dc28be782d0e35abd3caf5ed57f57f2d081f1d320dbb0dde378d8e6cdc964fd4c4d8ed0e954cbeabc0c50861d6e5da784282a5e5734a6df860312b13ba0b89ca93ff31c4c25f3aa89a08a0f2d90da6cddd45ee9b9899e39a0443cfc5d1c2715a40d4cfbd10b9e0cd007e45fd36111688655c62de7de5a115dba4c4f503026bf24fab22f471870a99b4747b180bc19425ef3f9009715e79d1a65d986e17f0e913570cbe9dbe9068633b817ac7ab12496
+Entropy.1 = 6a413d4a578cb306798e443b5d39f2bffed09023e7cc424ffd3c64d339cee088
+Nonce.1 = 5303d062ec8ff198c7296079896aaa38
+AdditionalInputA.1 = fce9105459531647cf4768b77f5354a53557efe6f3175c578f63d3ed2d40aec8
+AdditionalInputB.1 = 046df2492fd9c7bb89e0c3e2c54d2ac94e235c8273b8d54c8de1ed16c178d635
+Output.1 = 475134752ca9a837509bcecb9bf575231d1b7945fdf3bfec6ebe87ed26779a040fc3b85d3d3e0584940f92ff3f79fe24fd26d222cd951c4b76022e6e82eecf78099759f9546113d8d52cb53d0361658c9ac3f53d124a3158e0d3647e911ee749a22723c6627d06f38335ea3cd35a9eef8e53f03f048575db8b6661216f978aee3df5c98ba04adc1a65ce0b6516c9d90382fdf489a07a28a38bf6dfdc13d750ad474a1f2dddc04f7465b88d420c6a6a0bc76499a57a1b5f4662a83278e73475a07c3de37ddc7648600ade8dfab40d0e40cb7e3014d22ad920050b7546075043ff09f945ee5b5ed84692c0f68829cad5cad3811539edd6a5d7210bf7adc1d5339c
+Entropy.2 = 299ffdeb87210a9e1baf88b1af27e65ad981c216059d86085d4953ab8b3810c1
+Nonce.2 = 7f9f5c3306b7353aac83a2817e6c106f
+AdditionalInputA.2 = 4484175233a7cc7567ce4c63410e216ad6f3b37f280d9f01b5de9a98890cd50e
+AdditionalInputB.2 = 0a2a2e87749f5b655a70f0022b03ff07b7f2932de1238d4c0d6fd5ba274cef98
+Output.2 = f868ecbd2192993f5a45b730ba2b0b36fdbbc0d3ef948b03c1bfff5f604ddcdfb4a218fbd10f317bf15f49c836e45f8e57c771a6536619dfa160ffa1f3522f228b1aff6e5b570d4dace125c76cf5539a3d7a95296f33b0d6387fde055dbbd1d7a0858184076f0c545f29c5779f272befe23d3dd7f7daaabdf1036c076227598129f48a73dfa46c668c6eb7b4ac4b968cd24b12e1d18245177d1215d8925aad60a13c51855d6f1bced0e60e92eb3a17145dbdd1127d1b73c876ef58723408799c93b5b3896def5036f205a0f19e0721b7cf57b997599dc7ed35d288cb5910c964df82e0841ca42f1681138b829e29b1c82ccb2580260a7cfc354ed5b98ee45e50
+Entropy.3 = 67c2cbb5f27cbcc410abdff68ac6ac8d306361889416ef8fcc6d9bcde0896ac1
+Nonce.3 = 4da3edaf07d4cd9a95c2cd54a074fcb5
+AdditionalInputA.3 = 86152e556ec04c92c5bdb40bd7ac8726561637ee8f2956c515ed3d5bf9484a28
+AdditionalInputB.3 = f7110dbaf70769d6aae8badf7f8c423c6940db38ce88a4ff59fc90c948246c72
+Output.3 = 9d1e03ba9f9196158500dfe62303c32dc0f26afaba9d9e840e01d70b598811ea32fbdc7085d1718420493b93a57a79d987fb3810dd9def9799b0e3b068418b02f95cb4fa8671dd9ad3bf55bc690669a02d315b9e4d004026df6b38a7281170da427d863d281ef32bad89465748a6c17ba3e125d5b10a1f3d7c8979c255f413b42c7ff4de9164d7fd7944634e52005dbd74f415c15cb990ea2cda447647dd6cd44ee7151e9782381500a7468c21d67809871a5d3bfab1617cea9cba443b828a6ac30b697f9aea0f99c0e32cd5f5c36a2573ddcf8fbb0b1ebc8e28f321303b1e1ee2edb0286d7096969fe9c1af9cfe300beacbc91b4b1bbed634aa7920ed2425cb
+Entropy.4 = d39e4a4bd47facfa52fd06c264d3aa17699bfe5bfcf44ee42a4b6faf1639bb77
+Nonce.4 = 591d0f0dd46830694eb9d402f6c28503
+AdditionalInputA.4 = 412ff1a13377455970bff12cafecbad13cbe6d08953fe8d4cbd582a185815d79
+AdditionalInputB.4 = 65795a6b1167476b0d4461adf135f86458204f694444bbbebf583b7689df047a
+Output.4 = 291b542d51f5cbfa3f7e781e6805745384cd9b1585da99c80aacfb216395d2439984b316f520b8dda86fd0e480726266506beb19271935015d66694350e412e7678e16e1e91ecc1bbb99b3b0c86d05113c987621b41950199bb5084e36c83a6c50ade9edf31a7dcb1f3901adf22569429bfc045d56fc53a776fb9d4024b5a1c040685471c2c58b3036641f1b6b3713886c426ffd348e5cd0efe00909c3d4b44f0c968f029bd64036609e34ff538787bf913cb466d6bf22f0c3f505aa92dc6582a8b6cae76ad151ddf9a59c065257f691cebb5fa329e22cbf55d9f92d489ab2db0096cc6741fc3fbf372620219c89370fe230d439c2c5386f6ee02c2669238bd3
+Entropy.5 = 17aefbaa9c04039f05d0204f7351f7e6df8d5f86102c31eb68d810ef105b3a4a
+Nonce.5 = 166991006dadd7703d7c8901635dac75
+AdditionalInputA.5 = 87fdf4e12ce8366ebb634fc5887f41d4897ee39e1f32b42528fee0ae75c35d4e
+AdditionalInputB.5 = b18605e0ddfe0f718d6be6756233dfaa8b1c22aa292617ffb4db04b9435db406
+Output.5 = 63d96eaeadee2532502854f052c95e066c09cb1c3c76bbbf8b709e15b0f292020b1d3973de95479af5236602179f3315836a9ed6598ce85008dd6bb593912b8d357b48f3096a2d72986690ee86ece53520272b25ba31238d569352740a1141cad49759cc655bc6066c2d61fba56ce85f68db764b374188de7e2de77b02e82f39ce618426d30534985c8fbb6460035a30de96cf88a97f4891c3a33ecc26e962709370c9c1724371a9d689a41f5e54470a99e7b1af9484ed21d5c9032d30d1b4f2feb1a063fe7aa09fc45c706f8d67af70666b2fe8c33b4c2c84bf850b0553f565fa312245fe45465c553da6c47160592bbc18213719542bc7052e4fdeca27fa29
+Entropy.6 = 04122b8273763101a8a0fc46b8fb78cf7a576f6058c54329b0b1c11f3748df63
+Nonce.6 = 674e51f28432b6e376c8e88c4efcb72d
+AdditionalInputA.6 = 4cd6a1b760358116b74eea410bc78f8fd66d01120fc73011a78584105b00974d
+AdditionalInputB.6 = 1d67e0ca340837fbcb841677174a22adf63f65c4b81af3e5167f02204735b58e
+Output.6 = b86548c55f4ae8f7911a63579b90caf5c9ad23b67fcfcf2cc82a4abf4ad3f4a9525be26047469ffb7d9e4683af04e104d31755ab59e0991fc70238f6e3f56ee394f0345f576e3ec7ada2a6ac3d34e2f988db6e9987566609890b9b11e07adddd46b35343ebb55fa03524d1a1d86bcffcaf04caa70df2e864cbcc5b9ba090cf71263a0f77dcc34c3b0ac0bd5ff36e17c919498138a4d6ea2c7955d09152accc92369a7add7707c11e17b50843052553a8df04939923eebe64e9da686ffa7776c9e803c38a277dac48e4d82624c21491ea6fcc46bf9505ccb28868765154f19c7f890efa19cd829d1a852cd8b48df81b52f069ccb452751d36f555fd8ea3e4f47a
+Entropy.7 = 6eb7781b14003275072627f2d7ebf7f772b0b8d77bfae088b12f08005364542d
+Nonce.7 = 1f739a58f7c3875b3b954ea69327fd57
+AdditionalInputA.7 = 8cbb38dfdb35ca7ad26878bb3175ddb4d3dc5cca629a1005250314c7743e0173
+AdditionalInputB.7 = c1a93b677374270fe68191ce935446effff7560cc8afa2616282486d1c0258de
+Output.7 = 0669f0f7d9b6453132e7c35241c95ce1c4702f67df6501a426b1ab42d52bcf7350f23d1e3667841c955a711932aa70bf968d347b810655f59947f25fe0af0bc482b4fc9770d1a98daf0114c2757d4da69ce53ff91ed2b643fc4b2c55816247c052366a6a738cdd8b285a10c49afe5b3728a850069959c379a97728c8cfdb5a76de8831d786b238d9973bfc477d3301e483a5ebc77e8655ca19bfd51aed0de8096794aca033a2b227ac7e62b3b96593dc5993f309236e273712fe4fc78067ed932d3e687f183d445267b40c852bd7f0c18f61bfa5c318129ce7dcf469cbcbe85c7372943824ffd6b1a46feeb65341b57c2c06e6e7c8d12dabbebcd296b8b8b902
+Entropy.8 = dd4eddad48a638eccd1a1948a9710893b1967854d541231f3899ca5f212c554f
+Nonce.8 = 126eb1e72c177d87e798cf8684e3644d
+AdditionalInputA.8 = bf683dd25ab6081f04d45a39d12ff74a3e584e89a4ee5d55d368c02fdaf13376
+AdditionalInputB.8 = b91c5e5c57c42891e10aa49be7fbf33901a43328fd818f0ffec700bdb182ece9
+Output.8 = e3f55e3222ae34a5ae63c25a5ea4e0dbfa7c8582610ac62af6934bf5a1a207ae635230a192cd958f2d2350c127b785cf61a67daf33a0d96304d445c65cad05c4f0b5737f3a62ed8cc5a791aa6b5e576b4582a9f8681a4f7d1cf169fcfa1d2526f2b225a13e0d56c2c8acbfece4e3352981f3e21f262b840dd4a24e1649e4e7299d23af11a9452fc703c3cd3a5b48c98efa0ad059c37ef95d1f2577dea4828da22371b7b40ade001d7ef8e2097ecaf9df2075bc52946ed5bb155fe6bec59667e59628b84f3878a7e00ac36f54450faadcdfcc9c0c300dccca5c3c6ae894970a13b135013daab0ca9f40dfc5e08560829b5fd0c11486bf7f4afa3afe1da8cdf02a
+Entropy.9 = 844158976f567eb43f4bc38de289ad523dad828095d0d3881496619e75f52e15
+Nonce.9 = 5862f8c0079328ce2a1453b37de4c650
+AdditionalInputA.9 = 94ba2076313891f1eff8d85dba77a5f0639ed46694d0ed3dc27bc9819e2b51aa
+AdditionalInputB.9 = 72f02328f1ebdc08d5eb7c64ea4a2d1697275359342f1d3b1734c7c339521a62
+Output.9 = 78e08b7a1e130690e4f3854cc21c2542368f5b8f68c833ae94f15dffce6e46bbc0dc9babb948f4e2ed3fdb41154a0ed289d1c44c7b5b70b87ac9f2af579e1a59b415e7444ffc4d5b4d5837963769bf9b186c3d46e512c42c1eaf17b39c0d755bd28081a0342c6cba303ce2fc2240bb9943224a80a5f11c77d876387c8e2385d527109e4d7e69c7fad30c904c27bd89ac85277f8c65f81b3d30806faf98b8ec6745cec07ef14de726a49c4606d9ee48a8572ba41daa7b1146c436895fc35964132c40c6aac34be49446418275b7fc72f50226a2e36fa70c0d6597566d26d58c753eac896ad6f2917ccef273d085d0abda36fa84ad73e69ff0ee91db78ceeab989
+Entropy.10 = fc55392bc807482650d2a37bd7ca04ad610e9acd27fb63ec72d9959e527abb69
+Nonce.10 = e71aa61209611477c5da3211c9069f3d
+AdditionalInputA.10 = 19751887241263f7c5eb4f5328aa397dbdedc8e0116348fff6fd0d6b86a9661a
+AdditionalInputB.10 = aef61b491bc598aefec94e48a7ae4a69f982f7841d0e0161d7125a40d74c75cf
+Output.10 = 4f10364d29c47e743c06949056891ec355f5739d151ef675849fa970cd0dd6eaa29813e834eb92193c479a0ae1ad8ab53484f9819daf1b818157c19a7fe4b284f063772515a3498c55a49e0e98de0518814f38e8b5923a704b30eb29958270bfdc639ffe5d94b1a7ce925adb984e93ca0f6d4b2883f15984374d43d2d51813bfc83f51c34743866e9171ddb72eb17ff2701c61c9b036fbecbab75e9cfdf3c4ed193b6f10f3c6241777ae5d265303d34f0b41f24395cd3dcd44461375818140789b4ce42ebeafdccf818aab895b8efd2edeecda1aa8aa18a3ab3d8da90176a7240ae4c664cf7a7cd91db54d293b9241227177b42a4535393894573ac67842e4fe
+Entropy.11 = f1567681fe1cfe63fdcd93675420a28040cea5a8ab5d9865b5c34fcd1cafa9d3
+Nonce.11 = 5e914c8121d6f13c8f663814f5ff39c4
+AdditionalInputA.11 = 4eea4d4ae99d5afde3bc134634e9ad3adbd05108e0dabdb3131c4f806c2eb3dd
+AdditionalInputB.11 = 38d6238af84944d244234f7f2f9d8e6e0e934c913502df091f033d0a1f542da3
+Output.11 = 3ec2b61ed468b6134e9919c70a3da52c533bd4880287db7826701f17789519a2ca8c91f606640e6ea8cfe38e88a618757f100a301cca9de18ff25b472caafed8176865cae64ce64a510fb82681b59b2b19d24db72a76ad3c33969a4426149be70f65f1f6bed66da7f5607bd5d07f023ebe6ccc598f9f3197ed43dbb7d40b2daa72df33acd5c3be0e8d4f7b91e0ed615a6c0bdc2a10128b756ef6d7216b96f1e7a7c9806fa6b654c23ca804420ee3522775eced6d9546863300344773f6442a391cfe58f392e94f35a7257ff493947f217a30b93d8300d5de891af979a7a738bd100e3a59b8a530a52851d74f713117ebc2210b330e390a01f4d3f030444e101a
+Entropy.12 = e9123e980cee2a56632640f33879698cf6aabd564c249a8d4d028d88c7547553
+Nonce.12 = 7ddd1e779f2c36cf5953d397c0639e07
+AdditionalInputA.12 = 2d3d24b67c8457f3504fb9f07f997906ae1bcd64e4665cfdf71ab7ede4ee4f7a
+AdditionalInputB.12 = 0caf0f8ad4c6eaad237f9fdaa565c1581cf8043b82f092e97858a2e9cab1eb09
+Output.12 = 4208f1f35b13c16369313c3b10da2420b439b6b6644fc55b2181b7ca249235c1d4dfd8d70bdf70e4a46d3a3bbd073a7053aed72d4de0579f3cf69409d70023fd9a1eb807f549318a3a8429fb1110da76f0d28ff2e13b7e6e1dcbee63819386ebf65854af2ecf0968ca405c6a9649fe8ed6e2b27e53a7a06f8af48cbfa87065c91c37f1aeab92f726df192e222a7f6df3c6dd4259c9c08b578772ca9ff4519e804ea73327fb43f524688c9145d2992e795fa3292541ebe9876730ccd8ac153e5943265a0e2650eafc19a69e2cfaf45bd4f330ee36a5835b577623fe3d160ce1266019c315c9f52add1fc0cac870e4ef63e23140d133f278f9bab5ece59a5942f1
+Entropy.13 = 62203c7bf8c4e9ba4442d6bc682092c3f321e2bf956b5d687579769d79efdc3d
+Nonce.13 = 42aa4989597df15216d59ec78394661d
+AdditionalInputA.13 = da8f27657156b4a0b9a6bba89e6142933006480d8bfba9f9d9a67ca890c0ee8a
+AdditionalInputB.13 = 2993169ff4ab448d9eee82ff0b02c18f5eaf3d222497a07d888daa8ff8ef0037
+Output.13 = 5f7feadbbe5ffd8813edd6de55d72d46ae817c17aa606ce97ca4e04e5a20c875a255500c6170dca69c81cdb31180c376f37e774ea9d4eaa8012c73e820ba258a2cb99aab21887b6522c713603e7835f1219314eff8aaa158d774f0447b59795c202d4929107d6b5da827a2889bfba8810b33fae693b82de682c0be19454b58da072bc785fcbf9e68fc46f45c5ad794324a92b5b8636edc9ac9e3e51777b6944ca61b00a2f50f263db65e900fbec52d6d736d00db4caf055fd30ba68054b68ef600191985483069e69f301d0dc2ffcc60acd82b5c0273a6fdd1908f53ea19aea642200e5169d2b91364bb2ed66326178ab3a17f15e1b87558d48305ea1cafe120
+Entropy.14 = 4756ee6155b4bbba6a3ca94c3c88d15e6bda5205e46ddae32e83051743c91bb6
+Nonce.14 = ae1e2f15e559e6da9fd33f60e76bb572
+AdditionalInputA.14 = def9d8f7b18023b69c6cd4121c0adbc2a89b3ca37333d4523261d5eb20595d01
+AdditionalInputB.14 = 06051dec796525094018b436605bd2ddd66359a2836a5996e8262bb7763fadc0
+Output.14 = 29e8184e37a5c26670bdc95c842c602ed8b0cf102ca144133e8cc841e1dc32fd038a72c26b8be8a568db60a4cfbd52b0d8b74cdf180a4931d6dd19a255104db105b3366d75e8f6afd0e5fab4dc14f6deac82e7703eb6a61f22b79bdad8ac7fab95a58a71f80fa510542615c305f7cbf84790060f17e7d78ab5d4b0ca34fad47133a0627b803c1caee3b97fe47626a8590672e2211f39cbe1b79d1999fb772b884122c8e50c59fdd3de13a53e805f40f8aa35501571a4c4cce79a8f738e60a43a11afdbed94e26f474ba5cd6ff5cdaf00d0fb84109aeb3510f1ea576c70ae78cdd0415a0521f3ff4083f9160011dcd6e2802cfbbbdfe9c4a3b114dd47b3a6cddb
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = b510a60a5a19007ba808e60b1628ed9907d1bef992d4fc0abe51500131cb4cf8
+Nonce.0 = eb1bd783accc855eb320cde10b1be6d0
+PersonalisationString.0 = 7ea10e96af900c25d3be3b50a0cc71a79fe414bd4c3739803f02ffe5b260bfbb
+Output.0 = 5f03ab529b9edab55e75e489bceb0ab6cb9ec6255c6196cd075397b091c3eb598e3162320c71e389e1d9d62a2de5990c2097561084e13ab4b2977f99c23daf214bbfeb162167c933860fb2cc9f80079e17893962ff03a26b2b4b838e6de9ff5e9dcfba73acc6ee76c477d1f7002265e693850a260e68617f13b24716d8db42c9a8f2e0bd5002289a86b02a845d9886d3fd05d8d85ac77ea60192a29047303a03b51e0e708fa00205b5c03b67b77874052ce56d5cf38e726d608bc0ef8fc2a7d27778f47c6891637b631ccc6e36eb893fe08a5b9f5571bd432c826d99698fd4179bc5cfb0d8ea2d555c36b70568c2206b18f3bea14b398d2b6a00122d7a447ea3
+Entropy.1 = 437eb8bb624742b377a03156a2bd868425c25bc01fd2d7d766ebaa4a0fe7b204
+Nonce.1 = 5b88ce5733490661afa2634097d95e77
+PersonalisationString.1 = a34be0d37e0149d78601bb796bdec7035c4c18c71d386fa5675b0e9f4217515e
+Output.1 = 24c4647c869efbd691ce8818f943db07d819862fa91afa55035ad86c4c33f4fe165246306a551c7fadac73595346154c7653499125964eb4e81789384efe2c16af8ffcb0900492c032e83fa26077a58b59668eb873036fbcfa8ed45ee7aa267e5e476a3955d22ba4a173eca18d5ac828de5edd5547a9671b90317804d30a5f9725642aa0b4f7fff3226814888efd515d81f07f15b00c67249cb1f42296f10b27a97059e2ba10681b4232acac8af616b71707e01a5632d0549f5c19c00940f6b9009f683e64cae69e72a62ac7b714c2f21ff199e601ee989883a3a8db0c85793bd994bc22f364e0c96bec4166427188aa08317cba5b5414b001462054cb003fc6
+Entropy.2 = 41b7ccf06fc6eaa85970896d34bc45a09ca8c2d688fda7fc1d9fc699204cb352
+Nonce.2 = ac7cc04dcfc4659c2f08dcd6b09bcac8
+PersonalisationString.2 = 9cda5c090ed1e6ec9f7d31f5073955c4c7d8c3011c8419ae91e4a829d4b3ed30
+Output.2 = 58921de02e81855122c17ae22e8400ca14a4fb17c2d16aefcef4cd5c59cf30f7c9a35e89b567a2f9ccf87e1b2c7dc86544d36e25b111ad3cdd0693f563fb9fd25bea8b61293c8fcda4d71c28a3f6b86881e5e0821f011bb94df2ecba6e04ba97a962082328cd10d8a06a150d86e59ca1e542b85dbffc9018e800dddaffc82aeea8b4b9099a3de939e5940459d17fb2265820545546252228a938b657c98efdb22f2fef35d24c6317dd6fc01910b6e4d3522dae3360a8e72ea50c01bf14bd06a713d1feba12c738008347985f133a43d4b8289cf709a5687a19f755d7891ba4b0e4bb5ebd4739411630eacbbee4d7d56352ee2f2505e516806ca7f54d7ef2842d
+Entropy.3 = f851e2ffc4e36ec323788fda250e712f08cdf832d13126d723e75a9c47c9e974
+Nonce.3 = eacf73975cf3ba5cfd4fe76e86ecc732
+PersonalisationString.3 = 39128755ccc6116548f90b53775c7fcae46a7c22b13d807e0314561c2e3e3b98
+Output.3 = a07dc1182a42dfaf31d99e3585e5d8c5bb77e43ea23e3bf5605ee22ffb453a9e1061b9692ebff369e8a91daeea4681d672e516143a0e63c684613ed7559701e2411ff94a8d23d816d30b9e5eb5c029e6f2ae419a076bb2b049ade66fed50b1f6c31978631b66ce8e9365e75c113278788a3779f4ae3547cd308eb99a57bf12079afa098d2b1f596bf6775ed38a4519924d4e0f7362755ae414ad1b5d1f534d45ef84f194e5e7a99b259fb09376164ba7c44489444f24e77dcc77189b450528447ae4a7b85724ad8cd379c7ce8dfe42722f596b3124da4d42c090b6c1060b29e33176e4462efafa3438c8a20a3d41c758edba313789271ee15a6770694a2cab16
+Entropy.4 = 99a179a403dfc5a28c515e62b3299d8deee64125f064b7563d9221eb2099931b
+Nonce.4 = f1219ad014e02fcc007d657726493060
+PersonalisationString.4 = 13dbe49995e1aa08edea3565456c97d65868d475ea48cfdd25fb52e76b33730c
+Output.4 = 7d46ce1bdd8a080de2f9a276b3ddccdcf2aeb51afcda9e3c7e4f21f8a4446087c7f61c600684b9ef6955a3f547a923086116dd634f40f6261950a9da0015d1f79c220fd36ec0decb7d3d6e65562c087e395f719051f21bc43283d217aec39b8e059b3b9222209b71a76c91d183fa791514a6f7386fcd7244674a54f0327acbdd1c2d8be494f82903f7710b1e2139d4174b736c5935c9b23da43ef25baf8125bbb7095881c21b7beed0df96f2979a8b981efc75eb4cfaa89c76bb7d14c9763ffb9c16173e556d57cbdc7f8a2397790f7b7b99650a4bf75d044cd1faa925d129f51ff9a1d5688769cfda7d4572378d99120d37f627271c40d4f847c311049a24ad
+Entropy.5 = 08f9bbbce05bb88a664fbc00b109148b8019917b29299594a3223cb9353cf06b
+Nonce.5 = d88e0b2604170d8f96f939063c868440
+PersonalisationString.5 = f5e65b38d925a8143669046aa129447019dbd4326856892d3cf8cdbb63ebc80a
+Output.5 = f16920529a5a7a841ffc8533ccaced4d7259857462445bb7be98de303f9f7ed243f58668a172092109ad4825cfc96b24ff6341db70b50a06fd508143e9e0ede67f32c6673dda34ef66f74fae2f940b52716e50453fcc021d3a72746b6ded4c1b19c50b8f6d21c5c7c1a96cbd05b393790ce18ffa737c45b9c1b2e7cf05b110026fc401937493f94b4d8464638e03d19485e642cdf38f6729e0c3dfdecb1c8559dfb62987ff629f1f57b4eeffbf9943caa2b12e0d77e51ec09507cdbbaf40666756f32a7810cdf69452e46d75f2d1fb7437d1ef75d13486d97b384f030d713f2b502e3287bc014e6bb6e373821c4756828e71b4c2e08ef3501ef12caa82c0e02f
+Entropy.6 = 33a4d88a408ce2450fc303c3ce2b397d97afa2c29e1fa9f27cf98bec60fdf007
+Nonce.6 = f870245d7194575faf70e9e63a417bae
+PersonalisationString.6 = af2966f37b4b080d4ae4da52a5e247252c7e0dad65e180fa2e1ecb05992b6691
+Output.6 = 84b2825630c86859c5ba59324b292dd1f4923df5b2e664ca4a3d6a5eeca62f5157dff1ad0c7bbc785fc7eb15091f25ae31b7da54658e4ff0fcdf7c1a3a4734f7a9647db50c3c45c48fc334b7ae1a725f0eb57cf1c078683aa50a7b3cd4c051ad3d59daae5e2409321dc8433f439cedf9129b1aa3e2d1ce5e659080762bfa8db259eaccfbb1f704a76f59e5878044df9fb08e65fdfeac65185603b0904561aced4ad32b6bb52cca180944c62d9102480cd0d59413fab6268f92224df1fef21c11c984ae263f24de504e6a52869066014ca230e33a9d7f64c7100ae286378c44bcfa15b1c5f43d55b79afd69bbcbe6ee3255b78cb59a0f7ae1bb9b4be239301c81
+Entropy.7 = 7c796db5544d37174068161145e2e3675e705dc54cc82d1e3486cdf59bb7f82b
+Nonce.7 = da2de425e5a735f9f799705c54e88640
+PersonalisationString.7 = 67f98ddc76c61b93270f3fab40a09eadbebde1aa252efb937d6cecf5f3a9e48d
+Output.7 = 3c3688bf7410f545073813eba8e58d89efa56564c50475648821c048fdff3369d188b61a3a40b7a75df7883aeabaa400252e2247e5553aa6050c2b0703ea79d85de06c7c18d650389b4d30c1735bd0452798a12d428acee1800a4d9b3666f247cf9f8dd2b611e3a0aac763886fcf49bceb66af8ddef6ed4e5bb39512dc27f29e14cb4ebe2f675ee28f2069e09ff9e87c7b43fd89ac710ae2dc49d49140079ba999c19391e8d7220c176f9912b011b799332ea545c666283ccc1455deea01eebfd4ced590e3454ed34ab80f4e2f7f7336f86bd295779948f8f982c5a4223873dd7c2ff87b5ee73a2472d86817d39a9b8a37daf0935a1ac7340679ead86f9e4139
+Entropy.8 = 0b8ecf86967f9f654f5b4fec1af177761caf138ff5b40dff36183a01a630c5dc
+Nonce.8 = 564ff097b9842c8539d8c255198057d9
+PersonalisationString.8 = 30320137d43b37d7a17c15f9763bcb37790ace97d88eddc92f3ee1d60ca1a929
+Output.8 = 9338ab01620bb5c9fd698ad49a18bebf4d1613254b1bd619cdcf746fb850481d44ddc88538eed16c29540337374e901f1e8d667bdee99e40237c086569a0be686489724a58b72012281d9241afaf27f16cabe5f41c2b3652708907c63d782e67fb58ec4442e71c02f98882950fa96f58cd19783f7106159adcda38416863bcb7fd6844394733263d96590d0cdc8065118555b2a524ba3c1327ffff2d2a894163a64525584df8ee65e315a472ee9752214e06a2b6c0e72c4c12a5008a8fbcabfa7b6289043448b65c077b64863653f6c11b70ff701296631a307bdb0019214379ffb70c0eb8c3563b1eddad3359401894522819f5f82b25d0753b154bb8d278e1
+Entropy.9 = 8a1c324d7c5d79f4cb89b5b24d447cfd2737a1cc166db3d34acaa50054a0ef66
+Nonce.9 = 19c7f7bd9c27a80b01722d3fb71565d7
+PersonalisationString.9 = e81d9c0f169a6f536369e4ceca14b2828057d7574b34a535bb39ea2929e193aa
+Output.9 = 33953f7192160d854d0fb54467382c0d8229c1331639c15a7067727b6af0fb0cc5551ad9fc7e0253441a4e54df8f7471f94e1dac4971c710d1cf4b4f37672681bec6c85caddfdfbe247855cdc4cf423805f4dfc681aa95958c804214c45e93c2620f298faf7685567d26d2de5185a591b0c0057eebcb715cf01743c6716484133024be4dbc05321d7ceaad7fdcb854f31b4858549c7a1cf296c16c3a39c5026c97471bc9034fd056950037c37dbc538e1dee56c566bd911f08e6c4e7fd0efb9e55bb4b1025b2a8b76014a19ba4c418285f177ab19308620fc4197204f0222429791dd0b88dd66d65af0ee681cf01bb7b77af0ec827ce72ab7530f1b2c0a54d9d
+Entropy.10 = bdd5ca5f0746ec225150cd85e7d8acfad14c329b478d9f069aff030380cecdec
+Nonce.10 = 31227b1d0e935db6aaa63578f1cff0b2
+PersonalisationString.10 = 13e4bbb57e9dfe1c22fd410859b25f587be324755cb8902c9f67424796c808ec
+Output.10 = cc312a20d41da4fb965668c719257b1d85f8d83d667c124655581d10b84afda46b637c5bce4f02ecb538661e9cba650a35d2b802eab3f8f12c38c92518579d500e077257869b82940b280fda6af390104d78d958d5da66afbd4cfa57b1158bb9730a521fc3e8f694213bc19b974983b34a8b912aef8306be0a622007b120e9e883e966a8d469b48c9cfde72410ac6795d0eb7ce1fe76f502940845a7d3170e2c8adbd522237bc25ce04c431424b4d98b692e36b2ef1d08491319d367f0d6f25afeca22ae65926f99376495b2747664079532ff4fcac4437120d54d720cfe3e41834df5857ddd34eac2a127bb14406794d3f07e36ae7e4d1279ee347d8004a167
+Entropy.11 = aadaccf8b08461e106ae1c8f7f1f73bb44fc7cb27cace17b9a78b4fa39a0a3fb
+Nonce.11 = 3f09fbc98dd8d90a3367364e13bfac0e
+PersonalisationString.11 = f089ae100801d5ee126c1de1dc84977b162e55a644a09e628876a411ffc8a3a5
+Output.11 = 7205d5cfce7d15bbe9cff1494660de9d7946160bb692b5e610e6c63cae2f4f273fd6ee3a3d2998a8be7b55557c6d591fe301f70754a4bfd00f07037a12d26dcbd9bf29b69254431f75b2c68ea7d7b42a1db0fba3fb411196388a19eedeea96a6418745bbd4c3dcb97a88eb952b4306273dc6f1b1c5f8da92bfcc34db99efe52b31cfd3585219735dc86aaf132bc9dd25d0e228a31393b6ea306b7de6c40ce0ecf31d3f69d478780b6cf54d4c5def99d1cbf36e785fa70a41f4f528acd89e9aa453f92f071915b9efe6b3170850d3870cb93da9960c1557148a1d8259f1740758790013c2e9b2fb929c953595d4c1eb54964c1d1aa31d8f886a713b86508195fb
+Entropy.12 = 3ceb5f4355f3a8d026842f45513ab83e3ce2d28b55ada2767effb313ad3c2e1d
+Nonce.12 = a87a2f032cfdaa979d11bbe96fc79485
+PersonalisationString.12 = d7f3aed96ca0719dfc4abc445a5d5e284fa46dbc3ad180f51792c7e1f4c701df
+Output.12 = 900cbcd97a61a8c00af8e9179259527ce85cda82b44d2fc2a71a3452795048745995d51ef2771e4feb80ffd3084029d2e6f83c99bd6496de6940b54e38041540e3effbbd89ce71871b28ff99ff9d62ee533c85ec50c116dae9fe555ef1fb444a2f8f593609a4e767a03024d6a61191bb14f59c5b95c28df537d411e6a55f89d0d7d04fe4ed2b917e966c12e9ee21af0705e6e7b09cc553c2a772f421b07a88621cb2ed5b62b8fdeadad1e1c5b3fdc875dfe8c32266078a9c30d088f6e9429877d1964b39efa7ee99008d19931f733516b2dd83aafca1bebe8c63e638169fc55c2b6cc98ff89e61566472f1713021d84c7138143b2ecf03b0cc2e77b5e001d98e
+Entropy.13 = bab81ccb0e7325ae4efb2844013e64b321d5df0bdd6c70a5e5f5c093f246fd7a
+Nonce.13 = 4fe74a45ca5175bc0b3e1bb3c9ac0799
+PersonalisationString.13 = 27e6945dc80dd525c33c7111b17899453218ba38df9802477881d013ca7add2d
+Output.13 = 9a44b46739ee75788dec7d182491e58796c308ab1d27a4eef0151cac65c31f7e5806b9ad7aa9636688a67c1a9f18298061a8d33b8d708adb9f05935e729dc977b9584af8a5c1ac3107d58bd4e3c751585259dfc39950ead6b47fdc0c3db5c9f8809881f4f9fbbbf2bc5299900745c0cd826993e2e3cb96df22e1b5da18a8c1b2037ef65b999cb0a7ed16b1ca92a31aeb7216723cf20c070143c1298e5f5bc344c5252ab966bc477327ad1cc52192a69baf181d07293acb00416b7e86ef9ae871a8d750c3653d8c27c2da99eb1fea14aed21f247d31aa817830489b11e2104d2d978b7dbbfd2167d599c252350f122b130838bff709bfa879a909cab5ddff12d7
+Entropy.14 = e5f5eaa9d45ab64e902b5444ac7084b776521f36ce76bb504d8e719be4a401ee
+Nonce.14 = 7b9a876017e5e14bd6a19719c73035da
+PersonalisationString.14 = eb97028b093f820b182384baafa56ecf196dc11ebc515a405ac24f73e465ae9a
+Output.14 = 3791ee66e505257b0bebc4319897e80ea8a70577b8a85d809cc7e4c77a458e8517368e2eaa7c0623b91ab3ebc4de3240e00e5f0cd20524d73b8000f00a3cecf869bee26763db9689dfaad9b5f21e3975f750e0c6b694d7df35fea26b2ff3c2bc679b5ecaf129320dde8245677aab9fb54b8faa97d394adae687a35b00f026430ef29bc7226957dac5edbc4a70dc82fcac00bf89d97e11d2a3e6ecfc4af4536c329ed3f4dda201db47236b03f30daf71e6368a18ab6224a023fca2ead589d9ea165d66fbce2b37a630d18ef1c97a619cd8949f16f44a9bc0f5837737d7fa4355587af5ab452f53fb82dd8b8b4706cf04e77938d7e0c3a9744c353edd0c6931591
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = c019421dd76ebe61dc590819ab0385af04786718e1ec13c20995ae183ddb4938
+Nonce.0 = 3ceb9453616e12561ea0cbbd3da6e342
+PersonalisationString.0 = 5907582bf298edc00bc62952e1cf64c9d2d31ab704886ce075f5b7b8fdee0478
+AdditionalInputA.0 = 27c88dcd607e7de8afbb5fc3e810d75e0a88a81909d4007113d1f59d209f9494
+AdditionalInputB.0 = 9988b422743304739966101678f5b80cbcdabc14daa7da3a1ff798906ac293ec
+Output.0 = 6cda9aedc71a4c483f8f006f7f2342af7395115a4c162a75e8b54fa4226bf6f129ddacf93c5e86785434f660f82bfb3eff116a2a691e1f14603c605dbbe9a14a7e3bf725089f200ae91ef1ceb542bdfeefe8a7d9b746e7d0960eb745f40e11c5c51ec29bd5d6a5ebe676ac86bc07431128f24221273856a281ae21a8f520aa8177288a34d15b1a58a47c72af7477bcbcdea92a547d3235d01ca99a8ea9805624f39083be75e654a552fd8e6615c086caa131909f2f49423179acbcd315d0a16657079ee144e01ff75540654feddf37ad1cc5b070d7058e7f250c5b17d9f47d8941663e8addd50419699ef338b3deb1092ef76a8dd463d9b88c57a9db48415b7a
+Entropy.1 = 98ed3a2e252fc138174a1d2a46b0b7c8875f3647e23dca839ccd2133665416bb
+Nonce.1 = c33412ba47d024528eefc17f04fd91ee
+PersonalisationString.1 = ef9e0566b3ad06c9613c348214e6b2d4827762a7202460de73a82b4b80d1483e
+AdditionalInputA.1 = 899a036346379a9fba5462aea59b8a54fff21301f3f634f5c5b9e0be8fc478dc
+AdditionalInputB.1 = 6d3223234953dde90edb7bcc08cad81f2584c1897efd4f377ac5acb6295525fd
+Output.1 = 4214c86c463d77307109d60303af4471441567b80caf4046b8e208aebbf11243ee735e8586358b2d9dfb3a98b5bf823a73e225fc0e6c3278aaca9d1c3fbbdab6270952eec081e3b05fac74dfc70cfddba3f96593b713f8060d2c26ad4c1be581e9f987fab3c1b986fafd57121adbb22aed6df8de1c52641b12651b7fb261536d6c894e9d9c31af2dffbe572e5a130879610c070c0f265d9a9ad63959bcd7853206e85c2c32e4141a9f89769763b9d81ae2f100779e9625aa6ecbd89d0f1e2c5d966678cb00858a0be5f9b9403da82da294754ba8ab32d78519d1356efe97fa93bc32e2767f954f51b73c85f566213585228aab6b418ea2dfcb31968b1892e300
+Entropy.2 = 417efe68345a8661c31a32172e6514e8aef20501d110681b6d42abc37da7e538
+Nonce.2 = 1409cf37a4a9202cd9b181b7795072f0
+PersonalisationString.2 = 76ab1ad7507af9dfb5457024dac2e26e9aeede5fd974f51379dd1fedca1de0bf
+AdditionalInputA.2 = 9439dfaa867bc4bb259ea4735ceb6071566b7646eeeed4106f4ea8e44d013c3a
+AdditionalInputB.2 = 50a6c2c4fa03904663a42a8cbd275f0fca0b931577f52cb49e395e705ec769ba
+Output.2 = a6f53d9182e4217f4bea6d940d35c9997af5cd5b8ecad8b6a5191b624ace37645b6fcf449647c258026fb4ea9f0c0c41f887c99200446558187a5f6c42a14b4483f8adbc62a5a5d0dbeb5555dc9eb7c57badecdfb72b28e70afcc45a2cbb56efedfaf5a95e9abafdf9a4e4efdae7f4162b9d3d92af08bb92e4e41e6f97d7ac0f3acacd68dc2afb1ef9ba379cf5d8e7b66f33f0ed3fb0e831384d447e5bf69d7cbfb0c788ffabf5400ebd5124e910c9da4edfba298b481ed044f61e629c5df428620d82ebe3d9ec68444ddca6be7a6a4d576792929c9395321a2dcd3dd2ea950039fe26809c14d7191d4fb0de9eaafbc0bd3bda9b8d6c18b464685b2339304d3c
+Entropy.3 = 0d2b9992666d72637da22e7da373763e6f75f42bea5e8603b881d6b6f16f74c7
+Nonce.3 = 1e294f3623513ddb233181946d2faaa6
+PersonalisationString.3 = 4f309b8cec06fa3e22a884a11b8f8e2eb0933236782249dec7901e499e32e674
+AdditionalInputA.3 = da447d8c99cc4515812100efbd301b2a5e8a8dc6aa9a3390b3d2d9a870d99ddf
+AdditionalInputB.3 = 0feb97c7df13585e3c6f8fc5c56a7a6c28786a22d950d37688de52be51c9cd93
+Output.3 = 02a27559a3db82206385a701785c6b171f60c5955213b3bb32947512f22af52a5abdaff6991e0d61d2cf7aebdd80e58a4df3584a6fe5fa2180bea156f3b6fe3a669d8c801d0773eb72776c89c7a763f46c35dc7f926d0391d0d8c3bc93935d96f86190fbbf00ab7eb0dd528aae8d68eb5ed8f908260b15dc0071990623964a379fafb69c6beeb470e279293d229e815cfc812a20e5cfb1dfa6507ef524702d47817ad1c31e923404104b676393c42d7f901bc7083f6fca932d6938ef16ce3e89c3731523b111b6fddbd74c45071e307a0f52a0065c9949190565a4132bb4bc3e39a2efda15dbd0da6d8522c1a67b3ef6684941f7a02a3c11a5de15db0a8cbd10
+Entropy.4 = 70657b0fa0580af281788522ec04d2a6980d1181177e89d9e00cc7d66ef37fbd
+Nonce.4 = 8c0df7bb0cdc4999ce71e0ec2c7b87d1
+PersonalisationString.4 = 96ca21e9b6c03712e5f112b2312a4a36a2e3904279568da9f0697e698c9e60c1
+AdditionalInputA.4 = 0737beddfe4e507b0d5bb352a07f8321e6c6a472cd8b389a1e77c01024bc58b7
+AdditionalInputB.4 = 14ca247927ad6026dfc40f4a456a03b2c1b204c3922a974e3db5225d4950915c
+Output.4 = eb8d934496dad16628f56ad87b5a6ca2ad66ec927594f5da74b75b2224361d94f8af30ab750d2bf07120735df04d2ae5a16d24c810ed22fc01e7bd5cd2f69159f232d7ebb611df6a6c4189d75099d2c79b462cc6725c1747dccc7be197d8928400bb802e3fd5dd04e8e5737cac7cc2c4e1ebe477941d586c28dcfc5bf5789d81b4e678bed28723e36b45ab226ba98fd351a734fede3b9e963cdfef80c4d6b27e5997d0300238a6729d10616fa8bc411228a01bc1a512702c2d1e4143521c9105c0e08dcb55e64f790cc52c8fc167db2ccf3ad2430373b5dae868dff163ec5a4d564f5c33349183b973b4551f9aa102c532dc750d45236c7feccfcbfaae589fd7
+Entropy.5 = f22fc6df383c42fe997aed905b7742217f58df9e898f7229a37caeab708a25bb
+Nonce.5 = 3b9d182d4afff9a41166e5e995332a37
+PersonalisationString.5 = 3d6db5e8adee495849e7d36af18818e6dc0d8140ed516d424bc8f1d348e105bb
+AdditionalInputA.5 = 3a8ca1fdd98d6c941bb4cf04f119abd38d194efa428146432765550ce87b5a7e
+AdditionalInputB.5 = 239edfb349a3384bf4d80ae9a1e07973d4e4c0f884147608094768b2702bcfeb
+Output.5 = 565b7c314d03c39e929f7526ebbcb8b70e143fd60efffa77dd4475fc60339a16eba8a4b93e840ff3a45bf09360d0c6aa3fe56c38ebdb8f65c38e3c8b1fe853178d8d5276cb3088496f991be7a2f2ef8c09d3ee0fb1f5b86b3dd7fafb2b244900064e68a48e5f1fd3093f8f1e63417fa970353c8f8d4b9129a55ac4c6b395385b6a74e1356556c27366a58b44e11a030063609b93b5517e12daabd6ebfc78e7044986f92b1da40990f060c206f4ee1b4e76d0ac619d16955e39be3b01b79f1602546b833a76582e0fb4a7704147d8763da3d02945342bec5c10eb85967a9069649be151452fab34f3c75610d0c679d1afa9b5856e772e448483c4c9740cb6a292
+Entropy.6 = 17d0c905f1f330287316e22eb85b1e0001cdd21f88592af248d2cfb12086c00e
+Nonce.6 = 2257cc7a1f5b8cb85fdc76ffdeda8667
+PersonalisationString.6 = d46cc814d7587e15297dc10ccd565775577aa4ec23fe7a61c736600edee11bb2
+AdditionalInputA.6 = 4be737628fc81e811e53110db183dee46c3b5402c733e45da9d8736faac143a1
+AdditionalInputB.6 = 5824fece34f2c6d85315c11104cc26f23fde2380cf6b07ad6085a12d64fe3860
+Output.6 = f9b25d5f4dc7a09165fcbc3b0be5a9e70347cac1a87c7105ce0b1e0cb59d4651ea8386e8424efa6c9c173f9cfdd5595f5ca84a16dda33562cfbe85f26016468381da01d9d019094cc8aa108e1ba907f14a934c19fcfa9e811b16c4e07e403ec18b2d686cf9f68674c7fa598266a317fa54e0ac0df11c1686e94d440cefbed98c95a3b4f3036d1c1b6d43f855cb86c75e20b6c9eac3ec9017d78e2b753627f4f965b4ac8152df6af1af3aff883529f6725a2cf23cbda3fa9b8fedbe38981c75923381b58d3d19409816c489c729da39bf8fec43436b8c256118283e1241b6201d46f823713ca5f35dcf140c3baa0f7ebe8e32807c1ef9b9e59ff1258820f5ba45
+Entropy.7 = 0612f3cf8d441b0fd34d34a5fe1e0b122ee91137e18cc6e7164a3dce286b39a8
+Nonce.7 = c235456348e9992185ceca978af477fc
+PersonalisationString.7 = a23cf118b190327dcce97500bd46dc6c48e0af8a93c6f204a6d56d26cd80ff9a
+AdditionalInputA.7 = c3339994707bd198e382beadfb144ed7cdd9a034df9722f8d8e18d96ebc061f8
+AdditionalInputB.7 = 28b4d1ac3334fb398e407b3fed12a43cb1a89403fdd188e194a2a48da074651f
+Output.7 = f42869964dd52db8e1d470a2c7d54ff3d03abdf39b26b6b715adaa1d8d5fb5b985d03aa44f23fe5e608475091e42adbed861f2e0ee153e56ccf0a51c744658a436c128f44075cc74f3f8ca5c716f89a4e20f424b7d7095285bfafaed89ae6c18e2f0f78af76525bbefd942a49b08e03fae2344701aa1574aa08c1b5a8764d7c47fa1b9e8d66756780f1006bef8e92ae8a678393e4ae028426896eff7c7b10ea9c426409481e7d2df3e0352d4bd066c88c17ade7d2ca1b73a7605425e14f3c697fe01f6c2d5e9304f53d9d1054ecd26d1c5bd8697c4bfeaf1a57c0d3792f926eef76da38a4e5969e5cf29815be920460cb8454bb168811ed38cf7a1503376be1b
+Entropy.8 = d9ccbf184c6579aadc9333f2112767daf22b10ffc25145dc00e243ef45c31f11
+Nonce.8 = 232d0075a9a6ab16e8bc506f27a0813c
+PersonalisationString.8 = c7dc766edc0c8a1b91f29da8bb0428a5c178ed885af5eb1ebfe7143f1fb2c3e6
+AdditionalInputA.8 = 32b043f0f2f36ecab1e8dd14851955ec10ab1074b84bb401ecb6cbef718c3e28
+AdditionalInputB.8 = f0341066b42b23a6a98bb341cd7f736ee8d3f51d95795857607b55d3426a1655
+Output.8 = 8a9ccc445878ab44c766fc84fc19f77d7b512c09cee269c9079352d8a40dbf9bd9c37839aa946e7179532b74df2f8ff62ffe3c93053ddbc5d66a97e97e9bdbcc993af2a5f92cf3c11f10ed8b01e219c89c063f19c8879ae0bd4f35eda9cfce673e6f5f4a4226bb4daafecc2b38c045c954a2d6e27b30a30f9f5810e6f8ee8026a52e89062f1cc47399f44785106f541fcbc059f90f8f41c78ab8bceee776b5446bbce0bb24e2c396814303b3174e40c8af60d23aabce1e541d1087ec8750023c8518d81d12e57da5da198233d783911dd826b45d64ceab2d41143c54318c01c2ed52d25f4abc11dc681d15543213fa9d78e3a35ffed598f6a494f9b89f6d9d24
+Entropy.9 = 6828d746558f104a2b74d4a90d45236bc52e0b776856cb4ef578165c57bf7000
+Nonce.9 = 58c798292768a3feea28bfa7e7e373be
+PersonalisationString.9 = 4306f114141a671c01f5dbe7ac99267898ee44e30045414259c354d7e7511eb8
+AdditionalInputA.9 = ef9b4871ad9b5f378eb34538557d7f0424ef0541354d1cd549c56af59879e842
+AdditionalInputB.9 = f3cdd8e4987d9263e9701dcb51f43227fdd0316a78bd90e7b60acd349aa08132
+Output.9 = f2873c2ff351579cee1ed36247680b57c542c7d9eb969f8d0d537386ec362d9fcab1b54de5c429013a858bfad66c09920a37e15ce7b3402117e1a307e8014e9f9d9db65e59c87869fb9d915b85277f2bfbd59d178e02e9b8a76133e707ca2f82d4dd6d0f18fd97569190c0ce4b5449b215e36da63d4e0652e5a4ee615f5f42d8ceb0eaf4ae983a1b676d5b553da40514a4f0e4d5d4a2a7e48c34de944e0e960abc81cda5d2bae6d25213086f7895a2f1bdbe436ed55956d9965667a96fa1e3c7c63a6b0d6eae05a918c11b80d91241fa19f85ea0b88416a74190e5b60b32e4f1ea1d8a9af016e255c15df02c4263860fa77910d28e673d2339bc12eb7c154590
+Entropy.10 = 326633f5c9927130e63a1722f4ecfbded95ad71e7a6ae93669d3170cfca8a72c
+Nonce.10 = b074eee47fe64fba2adf509f50ffd773
+PersonalisationString.10 = 29eb795e9c01ceb5470e874dcb7261f55b5a9e5b08a3a86031d335da464fd951
+AdditionalInputA.10 = 1c55dab111d49b09628f3e7a9a4794b881045df4145aac551ae69dc1c66ebc14
+AdditionalInputB.10 = 6b5dc65a69884036426d49ff6aa0230307b650beef241a1271b23b075ad2a70e
+Output.10 = 470e25bf2d87e7f8e7a4b2984e19923c1fbc97030818d9bee4115f14851542e0664b0e81990be32706f728ad09b22d2ddf90bb462c161d1c2fa0b6fa751c9c7a510a3f6118d781fdcec82a00be705934d86c87b336747f0a37203e337c0e4f308ad3e30bf13f26925590cd3b153300c2b7e6c99903d0d971fef71ef2f11ac0d3e546d095b71df2a4e033ccabef4704de9edeaadf51df55a7c73bb29cd6ac575314c8a073ab1f3cbf1055e99a86d2b006c4a23438302401917a753e45a5ab327487004402e110edbe6855369574d132307a5dad24f88aab37caaf9d1aa81a298a55fce6cc439d6c940861223800a3aa86fbc601abd53c6afac3bf3743434f926c
+Entropy.11 = 700edb601ee2a466d6d434afe14567fd99dd2be30107da851cff244b13423799
+Nonce.11 = e08da5f8f8aee5c37cbebbc0df72a723
+PersonalisationString.11 = 7b6e7d823f84221158525547a5d8abc64ad2e71b672f569c51bb2d3720ecf5aa
+AdditionalInputA.11 = 30edc33ed40927abd62f108ade73734ea72034183ffd7a69c2f09e1389a1f10b
+AdditionalInputB.11 = a2d137d1dcde4410833f746aae52d2da161aea1812ae722d46a3a977c2e2d844
+Output.11 = 930fc28408876ed64e03948eaf1b8159ab04445a1e1793625350577ca92cf75671a55df0517b6eb965d0f0e88a43863ede7f443d102d3b691ea42146a044ca06cf7a12b3ce0e82975dad6c1e94e7493d97a1d609d07a43179f56d7d741ca023a4d0de8d5ffc14901fc1a3bb0dd5e0532c0b021e07f7c886566387dd67d669026900e3213733b78b36c2076cb56cfa130eb0a5dfb1d6ba89e4ff0ab535a9bbb75f72fccbe2934d12588a589362eaa048e8963565250d4c16bf84b83a45a3ced2d27c01d01b24ba0608cd21cc00209c6df5f3053e14eb024d1bd30ea69b2a36e692bdc354fb4e095f90adb9b5e6dc0bff6017dbb7d00690ecf00cedfc3198e74a4
+Entropy.12 = ee2803b0e9106e30ad1911d830475a5c622b54a9e4fbbf5235ae59ef5b55feca
+Nonce.12 = f44352de645fbf7688dc47a99955a9ae
+PersonalisationString.12 = cf1e33dfff0f3babbcbafdc30c95ee4804ab81ef402ef55a92bd47f07a774bb9
+AdditionalInputA.12 = 04835b5b5bc1a933e743993414db67e8960f16efcda8ca7b614ad831d049e13e
+AdditionalInputB.12 = 7b23a049ee3ef38f6c4d03a7a04ee239b57037a9d4589152e068816b8a2d4b2e
+Output.12 = 407d89cc346d33c10238c2327213178e20ef9ac6508ee61881896d2c6bf176326e3850368ef53427e0c950042c2e17f9ce4b2b3fbf529f4ca71440f43522bd029fc08fc23f534e3446b098384bb4d0882b25f4ac8e8757c1f1ddc9a8f2991f69a4e8eea4fbab70929283deaef3c53e32a2655b24ee209fd4afd4f558f40efe6affff2e88d0981e155ab0d78e5170b11e4fa84d0772ece236d064e79b977c91899e053b80b26a9417175d308e8135b9171043536318ef2b58ca60203d729972b469b41acaabb1d4179c50c8a9e3eb934bfbec4834eeda418abaef23907f1267b686df17f179b8ca52aa1b2e424cf5ef862fb08ba30c76e082681c81489acb5f35
+Entropy.13 = 8845a9a3f7d7fe95ce6f6648a7fe143e216c6f922ba8725de32743d4996dcbcc
+Nonce.13 = 6b5b4a986babde808118d29f0437c610
+PersonalisationString.13 = 7ed80aa920d147c542e42b605aab9c7b92a3c65ece17bc72a4680df6e16cf86b
+AdditionalInputA.13 = a7deab3a6c01539fced6110fe3579bdc19cc9594e587b89a5cfdd358c5793852
+AdditionalInputB.13 = a946a020b4b3d2fc452eac9df0a646b34778e2b3f455121a67d6c47ce947632e
+Output.13 = fa85f06074bce30e122de1d723ca36fb2759e619777b4b555933adbe5e31d9190355d831426f640362dc797180ef9d95727d37c03f499a2d97bbe56c23ad3be8d1f022c0aa40f7be92c0f3853a9607ecf1721e24d1f944ff437cd300b6c36954a0b0edc270383215ee61039dfbc5bee9f0f31cce5597126a5296e06342a9b95f44bc83501e3c91dbb572b42f120991903e5e2bc7d970ce25f3a8e55e554d82242eba3305706d26e54c5095948240ac3806a9a24c7420097d0902ccf362a433c0a5f87a838f025c67e110edc569157216f455f51dc87622cbffc9cfd4f925c967bc0f70144319f555070823dec3b1a34b310c79ced174af4f08f12eefb51f9627
+Entropy.14 = b148b317a268628f04c9a87a0ac5f91498b8020f4e4835720c1a3cc07b050fa2
+Nonce.14 = 2f35e5b622aeefe75605c2274ec8c696
+PersonalisationString.14 = fc527a2f16b53c513f94855b35cea6090c303dcc642e98ed5f323aba0f35fa27
+AdditionalInputA.14 = 2cc9f137fcd8c2d526d70093fe11f90a0a36bc9764a4c5609072e181a2494516
+AdditionalInputB.14 = e40361245b91880e308fb777c28bbfaea5982e45fecb7757bb1c9de2df9dc612
+Output.14 = 66ad048b4d2d003223c64dd9827cc22ed3ec8fcb61209d199619177592e9b89226be30b1930bdd749f30ed09da52abaa2e599afaf91903e7a2b59ffb8fd470e6604485a27c200d375feff621118595a7a3057b7e31eadc0687b1008c3cb2c7435a5704b1a1a6a3487d60fd14793c31486af765ce2ce182de88112445dd5ff11b256cfda07018b95f97edbab4e4c39ca097c42f9dce80cd3f32677f3c224a86b315d02e377dca8f3785e9748ffdbe3fcaa3b0c6bf001b63b57426836358e9b315c6718e0b74fb82b9bf3df700a641ab9411d1b9fba42309a84bef67a14204f3160ed16a5497fe211aa1f5d3ae4b858b6d445f1d094543d0107ce04ef1d1ba33ab
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 65568162700f22ac868a504110fa466c70cfe0e7c32f1451
+Nonce.0 = 69545e871b89c7b3f95885eb
+Output.0 = 588572c2e4f0d6c7077d2b9eb593687ca92c86e5a9729505fcff52adfcf8a5eb850b910b985df10299bfe7434f3b6b7af92a3edaed732751cdb421c38431e2763afc6799eb61e176f9f20945870680ff8b62484378d3a7fd7d29202e5d371785d68fe399d5f600f34517fcccadf58937
+Entropy.1 = 6d8db826a6f0ed60070b934ee06e8bccf3f9c6cdc8a293d1
+Nonce.1 = 20f2e84ef04067e356118b8e
+Output.1 = efac8a6fa5372ac76a9f3dd3f6e39ff442c3efeaf85fbc446a4421d2b7c09f4fee0e7d74883cb0b9b95e810818506cbf4f553f6f8485756b823e10fd78f1704adc546243346a2148a3dba769b826002ffa74dd1f0bf2da571ca65838a582801c7b407b73526532c4dd4c01916c6ff7ab
+Entropy.2 = 41d983db9c26d36697da9ab03389b5ac45defae909956590
+Nonce.2 = 9ce16c8ba7e65d061b3cd4e2
+Output.2 = 1108c6cbc9227cfe9f1bc71d5e5a62df032a8bc8f96afd34ad4348254263f9528b3a564cce8cc3773841e25652d415c8c723013e392490ad8b8a4af7b052a537114afa5b7b34d067fac674f8d9fefaea7626ca04dc4025d49a55ff3821502bad6ae644e96d6c16beed3a209ee4f81371
+Entropy.3 = c711979849f2ac221e09a8d583fc8aea14cbed3bc3610ea2
+Nonce.3 = 662b94e01e557db42d04163c
+Output.3 = 8ef303d36fd31070f836af719fc36c34df0de52ee760261a909bd6a1ff80f4be8be5b9ac8f6c5cdf2f8cd9624d92461bd8c9306931c537162d4bcd81632b5d9d611c7b5eaa4c422249940bd7daac90c2a5fef9e2b7198583a85fe521740049a2a900f836c5086b131630938b71389103
+Entropy.4 = 9e32307f0307ddba166b20e1adadd1d9209678a84c0cc42d
+Nonce.4 = d5672f24c209be66d596e110
+Output.4 = 7929d9a6a925693f1c363930e600b41e21af13c58b3e7bd4badaec4e4563563a3788165ca4c2965242c8212fe90a62948e727349acb4131f60b66e9c9a965ffe72e82df4d74c49b23c7224535535bdff4fd42bf341204fb3f5acf617f3185be4a9e49185eacc44c0b290fd2b5155dfb4
+Entropy.5 = e548d22a097e1d2c32633f2fbc3b42d4fd8218f1d5f973da
+Nonce.5 = edbee16768a4b4e54c0cfec6
+Output.5 = a1927d0652ab1ffccccac434b5d22dba891622c75f4e383336ad180416adfbd68722ed6f63c0f6b34a2a427a87dd62f1df139abe2a0f48e80dd9aca0c6a6eaaf746a89bf965522c6f91b7e653a2c0cbf12fec6a1288abd4997c85682a500db0a6f7ebe98c9f0e8a5b7a00811edded092
+Entropy.6 = 34912165f33d3b3c63dddcd17d0bf5a0c789b54cc5abfaa2
+Nonce.6 = a1fdc19ec11766bce95221a6
+Output.6 = 3f96e8dd99851979743c0caf99e40c9eb604803b45a2457e331d4a688950912888abfa23ae15f233b5648180d7d89eefe49a0ee8e6caeb7c21fef7615bea2640c48d5441acfd6c883d8bd0bc47dd5a5f1a1b9e4ab1b1c2e963418b35bc4bc994d1edbd40719094800847f4e7407c89d9
+Entropy.7 = 00eaae3aab4866a4198aafc76d7822bbe92563770df281db
+Nonce.7 = 7e2257ebb3294ce85410a7ba
+Output.7 = 72e97d7dab6afe13df5c66822a57b80fa651721c83efb97ebaba112ac7c632a9239fc19f707a2a8871671eb60df465afc495d099bdda21ec117ed3c7e46316b0d9d9fd443f8b2bb3ddb2753338b7627ed9ee5c9f0ad02174dfd7e1c704577214ba1103d3ad97c40bb34458cd10c11b5a
+Entropy.8 = a87af23ab0a9e5b9d85b467eaf313a6fd264120f9c46e4e5
+Nonce.8 = 39ef754427d169b779cf926a
+Output.8 = f1bf2596fe551f4370a0adc27855a784bdd953746b892ec1053ea1615b304ad2bd2e57b150f167b0edfef2aeeb0b821107588e6fac002e664b71cafb79ae5e30d0f9fcfb22d96e5d205ae485fa6ebc6d3892fd9617c71f1b028787524b3e528c0c9e6b7e157f91585513fe061fdef7fa
+Entropy.9 = e767b88e1f3309b52d786742fa9158f34883ef6995051eb7
+Nonce.9 = 679fe80305cd357589106435
+Output.9 = 4f94f91f14844aa0f06d1126bd3e54ca7e0e353970c0fc77f39391b9400aed70471bd0bf9f458914658792c26c923d045d85b1618bc70155e665d23f441f2e01cf64094f3564a8893a07c5f1f9d1f7a904ed059d554c8561e869f59a0d89e25c770e2623b5ad793dc040a7760abae6a9
+Entropy.10 = 627a82e304483ce645b59717deabb782f03115ce7513539d
+Nonce.10 = 50360b296b8493afa8550710
+Output.10 = 034be2b6b71aa11d39e52970dae6ca3fbe6076d5915039e660f4def6da51bfbfe22864c88fc4e86e5f1a4b0d4628de7659f4238ec93d301b3d1cbde172bf675fb6479a463782e5691abacb4c9c1bde65a525d44ac986cbc94f0b229e76e524fb8c1790583a41f3ff8cdc59e414cdfcc7
+Entropy.11 = 0dd73d1481466f7f6feb9fa43aa2f9c53e1a102056072830
+Nonce.11 = 6c0a28a9866f0fe64bcc6aa0
+Output.11 = e9a42f4c90c3f190c41dd90cd26abf226c1da39529b8fb2680f2b65340b375c6753eab97ac42f65e71a5a92a8f08857bba3b13b06cb0686e4e62a3a80080867bbef67fde793de451adfff6e60434ebad8272d2d14cfe4f178d811e62eb45e53e5caade08c1db8c6f2d9133b5bd8aad9d
+Entropy.12 = e239c344ee1bddf16d0e01b644e35729a88aec9330c37563
+Nonce.12 = 82760380668b3e1d1b0f5536
+Output.12 = 1b349479778dc46eb4511acb435a31344e4a62d596b61f5127bf93be7f1fe83db61907e4f692305c6b9bd45717e63c7bdc787f2153171c261787f980ef310bd122e68f2ecbf57aa07fc13f5f97771a05d71d98af6167471a9fe55f58bbbff0e019d683fbd9aabaa987ba5256c857b770
+Entropy.13 = b67ad5d53b269f1ffbd6cb0f0c2e10dbd71ea4ffd5cc02dc
+Nonce.13 = 7b18284cbad366d4023e0e5a
+Output.13 = d632a5f015ceb58e7e56985f6367043828ba0422070d9a7a1ad8b5738576356f998351b571b260965d79c2dec654024152452656788ce6cb5fa79acf86deab8966f7abe500c6667ba9b514a8918524854138af5f1c2383cb70ddddb0461561076ec93c02bd1f464e93d2e188a5048084
+Entropy.14 = 42623115c0a43edeab391ee8ac84c2b3b1bebba8a6040cd1
+Nonce.14 = b79f5c377be52381210c1c2c
+Output.14 = a59dcfa9585b1080cee51ee493fabc22394ccd0949e3a4d4e5b8d60e1137288d20f65e7f1ddc1345869e1af62562d6c11044bb65d11dc0071a04a2cd0eab76718ec9a67d4482acbc82ac27685b98c50064b41e120a35e5ca57ed1bed6963fdd03e26865ddd3217d67cdddbc990c5833c
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = b55e3470142e762ff71ab8fc6b89a0215549a6795f89e748
+Nonce.0 = e933397c8f8c79625e841866
+AdditionalInputA.0 = 631fc318e5253b9209c0ab0407cf4cd9fe3e860e90b8572b
+AdditionalInputB.0 = cdc57096d1496ab33535f3bbde4e4986b362c8fabed73e99
+Output.0 = 02a22fe1f67b1924249b5bef0ce52878e69e90184d3a1a85d82cb99eaf59d9289b3238bf7522ac8b0ff2b7bcfe154dddc30d0a89976a97af2338f6faf67ca4c5d289ea631a9fb407a951b64fcb7e9fb18663fe7ed41a78b4f99b53b84c403caf2adff130807ee7d9794fcec29f5e2754
+Entropy.1 = bc9814e09d2e06ea98d6c0862ccf77e72fa53f3f18024990
+Nonce.1 = 2e50de236077b8b05ef4a18f
+AdditionalInputA.1 = 8eb7fb4022d2967ccc71ab7dc1b3df165e9bfb281d49afeb
+AdditionalInputB.1 = 756a83929b4ca38ad8df0547a6ca35ee491f2b4eb0c73e86
+Output.1 = 8c42c74c4514ee3db2138c667b542044cb1f1eb3953214396788882381bca385063f8094ce0a63b72b6d3f5e6fe0cf3c15700bbba97c118320ff914f874aaa99616111e44156041a233547d5641ab0b179e525ddd34c4559206c0720262217fe00f8a463d5bf578b10b232f4c1be81e1
+Entropy.2 = 9d9edb3e9095c40e9d9e366d4c91191d4140ccd51f9bf1b2
+Nonce.2 = 4e641bdca5709c4feb796651
+AdditionalInputA.2 = 492d9261f80bcc25cb136d1a64c1d5926e22b7833ab05b51
+AdditionalInputB.2 = 67f33cdb597cd3a4f0e4e6c3a089d2ed7cea0fdf62939413
+Output.2 = 61b483ec28add6398f831c1974d758dc6f2302ccc902cf60b3c78c31f9b299c26b267ec6d62434d57fef382db20603b2587ee2e3ec8f198945a973e1f5549fabbd17490f85f3a6e12e91c1c5a7e2d445a75f06864d845e09ae7dec761d55ff04050e839e6e99df065cc63959c3406aee
+Entropy.3 = 42618edd49528c5112fe084d5d18caeb497e7b0e80f8a2af
+Nonce.3 = 5eef8fe50058d324e9ffbbfb
+AdditionalInputA.3 = 227e3bac9a8cb304ece74d082c8c917fe6182402172bb257
+AdditionalInputB.3 = 9f2e9590288b9eeb9c8d947004ba552ca848e77973d46edf
+Output.3 = 1187ddbada9c20d2d03cb3f934300640db0dac05ce7e374921ded35a6cbc32c3f561ae5d86d68fa2b0d3c17aa5c4c1fc6b4290ecb287f8b7f0b8f7dffb02b3004931c50afdaa6e2d74c0493c8a8a9404be2b3bc8162026a969366e9d9c00b11c733a848fb307a4865b079bc536a6ec41
+Entropy.4 = 54f4c766566187862b8afbcbcc5d93d6de222ec42b4549c1
+Nonce.4 = 7928cb7432fb030624f36592
+AdditionalInputA.4 = 24ca482d7d8c041cfc0a86dd76300b3086b24e7b42d3c3ec
+AdditionalInputB.4 = d89729f3b5c2a3f7ee7e338e7c419c435bfcb1165258fe8c
+Output.4 = 6728aa895b04ccb81506c2fc499878fd99868731997b3c6511dc14cd8dac8354159d9dfaf84e3397978e8d70a8c0bb4ac1d8c552f1efd6412bba7630dc9321ca0c59f6ff8c8016bb60737fbf09e380aad086486ed781288af3c405f77fa6f5ef36787532b6f2562a5a713575902c30de
+Entropy.5 = 71a54f95b42285685135182f24ef5825cb428270b2891611
+Nonce.5 = ef52023107e1f8a156ece40f
+AdditionalInputA.5 = eba552b12d50fe79d6e3d626b6ac081569560936139dd2e2
+AdditionalInputB.5 = 94b2fd736cef340fc301dfb4e38d2566bc3abf615f5658b7
+Output.5 = b5e8c92a1fa4c514088a69b6713b5403d4e8ef3de251e34fdc480e1df8b518a66d8dd0aaaa883836bb1dd9fdeec4fa39fb90ed3b24aa0d2629cddd0d496a3dfa8361861ceeb1f94971e0b69b618016f5272bb5aa9b782520852f4c0429df844d582e88563b2dc7bdcdf84c34920875a0
+Entropy.6 = e73656be01a680ca8df3fbd5a49048fcfc132f3a6140f3a0
+Nonce.6 = 4bef14e0e7f9017d287bbe29
+AdditionalInputA.6 = e6b052eee311c8489af2ace4f288ccb9d94f521f39efd058
+AdditionalInputB.6 = 2d6676f23d37b3175600c17096de8f13a56b87c8a9521433
+Output.6 = a108278523eb0fb1658b88e71e79045fc939e06093c6045c6adad51794ba36ed450b766a30ed7f94badff13c4ed6e309f0bc4cca9d8a3e889d814737a0e7538c97e537775b211f6b8697b99900e6d4ccbba0c95859203c068812a6047d2bb8cfd5c5fbc594f1dc1fc6b9d3aed56116c8
+Entropy.7 = fd1b1b4716558c3f2feccd9f8b7218f856df024d93cfce91
+Nonce.7 = 272092313b6d263b457696cc
+AdditionalInputA.7 = 8d70f911e9f2dcca2c486ec262fc6f951b332dc5f887a67c
+AdditionalInputB.7 = 02aec2b3625743c943a4403ef38165503c71cde08f92d622
+Output.7 = 91aea12037d2053d0a400c16ef315c56cfa8c1a0fb23e930b0ea394ca79d408d260001def0f28706deae206f22f0cfb2420f82156c583506898c40eea7a2ea982adc3507283bfc144d4c8f98bf599cad0d865870fa22c20d754bf15cee54f005f0f99e90aabd0ff32e20ca41ec62d966
+Entropy.8 = 8e78c43c92dc84a8d09237c1918f4235ebb5b505087f77a4
+Nonce.8 = 1560cd40c4e4fc3a3f43f844
+AdditionalInputA.8 = acd7dcaef11a82b3ac1ed2c90c6fe2be152ac658e6007233
+AdditionalInputB.8 = 6122757537de9332f3b11ecfe79540b0b7d70c299023b51f
+Output.8 = 0b33705c872cf1ed03fb593c6c619386e1a0def84e3530fba3381c57acb8e1a9121ad4a9bd440e0ad5b3b65a178faf7d4f61c07013a433bf58177bc90cfb79d6c39ef05395cc504605cd756a4c4685975ce9467c387c8393d97c38c6542df9acbfa72b190fa3de3c72df8676ed02ca5c
+Entropy.9 = 84b437cc8142231114ea6a48a25dbcea6f225595c9493572
+Nonce.9 = dc914e4fd5a050cd2140cb1b
+AdditionalInputA.9 = f102c1f4039f488b87e54e58630ebf74225774bf09a24e3e
+AdditionalInputB.9 = 32e86479c34048921de1fa65745736ab235907693f16070e
+Output.9 = 1a77469f769034a462a604c695a806daba0764ecc121e4f3af6cab63eac9a4baca1bd4d01459f91ed5e83450a60e209dfc87f00b755f82c7122e766b96ed834f73d9ee03eb3236b7900a309b23ee19e1fd848b354c90dc78cd801b2ff9dcf08e204b51c879e211602e1cc0bf1aabd565
+Entropy.10 = 0a95b55c4e044a4fff1e446cac4517d150fb5f0ca4985f5a
+Nonce.10 = 8c216bdd76cb93e2ec8919f3
+AdditionalInputA.10 = dc2cba72c596062c8d5f633d9c4a0022292e7e72521de379
+AdditionalInputB.10 = aceff54c3683d1afac85b7110b71434110ac45bb3d42bc01
+Output.10 = ed09fb81d6a685a4b2999a18601aa6aa1818fd87efc768ef9eee05ab74f5db6e2f06bc051e9761960e3d6d48803fb70657fbce16640b963db614889c9d37dceb625d5ddfc3c5e23a5897a26c0c868053399bddedccdd6c77b12e245c5e48501d0c5c01cd4e81971e05e55042a1c94508
+Entropy.11 = 9ba456c2abf79c4eef4dede5142cdf58125601ff19d94ee9
+Nonce.11 = cb2c3d3ad6b21a06daa1f34c
+AdditionalInputA.11 = 8b4e394185a98dba41c2705dc3cde92d24fd01610e31e0fa
+AdditionalInputB.11 = f369c32e59d29c553ccb3a787a8842cb2562a3707e08af0d
+Output.11 = 0105878f5a465186ef059664470d62c333fa7aa3fe989d0f566f8cbbec0d4ca826d3c705c6237eb4d19559bd50df9c05de653c6b00af0be19acdd28429afb34709a86b67d6bd4ca63f293a41afa0acfba9d9af5536b84abda813adba8415e4e976e8feaa2859fbb24976e745a2650885
+Entropy.12 = 5854c32b8e6f88aa3e976f1b4eb1f94096ff30302d8bdc60
+Nonce.12 = 5cd9268b9f3d7c64c7787e06
+AdditionalInputA.12 = d5c9ed503f84c9946cb8f3df3c5205145d4ae6151a7db8fa
+AdditionalInputB.12 = 2e5791e204f65f9ea242843805da376ec67db17442a5d55a
+Output.12 = 65dae33b88a5fb3d0ea7f87df6b5f4ea8bfe41ee384d6708483bb0d28ab96539a5b2b031221cf5277616672772c993582a08c728d82d521fc126b5c12cc45e77f2613fcd7992b2e88d8e656d0920a23213568a91e400b52b1d992f9e1b6bd34120c2919882d9fd8b8e328c9e85a14d80
+Entropy.13 = 9e57e91ebc17ef7c42d954f8f6582176390e092e929d89f1
+Nonce.13 = e2931e8389dfc7ea35d32d60
+AdditionalInputA.13 = 8f8fde3f8cd18ec59bcff6b84a4974f1f021496f63289d92
+AdditionalInputB.13 = fcf8852764ba91a78cdb36de3e3a73e4b726bbc4665e208b
+Output.13 = 8902f1c4ac2db8d9d7db8aa089bb991acbb791845c4bb89d5fe994c75818a2a86360e251480fda2fef8584e935814a2c2de90d6cc421a8199b688b7209344aa1e5eb61a8b14a712dbd3fa4a63a09d3da7ec72507aa1297947a74f1e28e4fb5628ae848fbb05c096634d59f1498fbd8a6
+Entropy.14 = a02d9c0659ec1472f6a1e47df04cd12b8e8eb9a1e877686f
+Nonce.14 = 81ad7db03a1305fe7992796a
+AdditionalInputA.14 = 450a2109e7d83a3ab2e628ab35af4dce8ce7205de7c5f365
+AdditionalInputB.14 = 60d0ce5e11413c321535d849da56c3d9bf6222a3d2cf77e9
+Output.14 = 27397574a1ad91ef6f332c954c0d5802cb9c90926ab05c116586995bd795a2f1b4706487da86282e33d0b44dcb7a58c8c4a2874ed4646a1e963b7d26b62e0a5e0a5bb60ec6e07ea6b7b7fe1194c3ca4371736e595707ca7fb56bc924089e66b137c47f9dde74b5de3687aebc2f5c2a39
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 2f0af7cdf5e627402e65fa67975754b54b02ffe18ac2bfdc
+Nonce.0 = a77bf219dc5379a37a99c715
+PersonalisationString.0 = ed3b70e30ba4e29c14c6f5d0b14e898173ed519f38a8f76c
+Output.0 = ddbd262c7cb9c049d12057801e21a32408db3978d1b88bce0dbdd205bdb89da0293960d243047796884ac28514d523c5d07210567a351366639f79f9ddeabfc06630a14ed6df9dfdff62e82a79a59ec619598559053df328bf5921aa3e21f87400612cbb52a6c3cc56d3e0c36c784a58
+Entropy.1 = 72f987de64d4e20f09a599b180e1513c8488e21c7499c610
+Nonce.1 = 77ec128a5eae089e9d10eb74
+PersonalisationString.1 = ca9060a3a37665c26274537d270e4bb8affd076ab64f48c4
+Output.1 = 6bff81ece61034e05b84ee46518c0cdf3f6cbe4d6e10d1834cb0def74c9528b15acdb03f8749ac9b76886fef8c2f8b4f01818ae217d66dce7855b3785ba479a591b93e81c4456f6ab7f198159541211d8391f7e437c8867c247e98c27a349807213327ac0ebc79ff6ca5b720ba3c655d
+Entropy.2 = bb684cc81ae4bc31ed11a7c137e36edde3841ee8332099b4
+Nonce.2 = a95a1834cca4759176498163
+PersonalisationString.2 = 6ece01ad5600c194873294b82601526425e38b0d2e41abc0
+Output.2 = fbae71283f422550f0f567d6ee6850ed1a394f4e6870707fbca4ec24449d4b8be9fe72a5e0b1d87be1c8b4c89b8d056a04d6b196504b61d470892e294339531dcb65b0c8b7c85e55f9654ea01b3bb6f9d46cf70375988dd9a292999104b7848b9490ab5da31a4a1bdac248c4ff239e25
+Entropy.3 = 724317287fc41a2c6ef20eb466fbd707cd0018ddee71c95d
+Nonce.3 = 283561a4b7e8aa80f83351af
+PersonalisationString.3 = dec43db3496be4765f5a0e305a880c846b0a9e699a7d198a
+Output.3 = 45e20c24122aba282bcf342a2fa42dc272ba3fa90aa8c7342118ebd0bd59dba2001d79f4f49574cc807e51fe6bf59bdd0b81191d122dbe521055e11e4729430d14553d0390176edac67a15a4cda0d2164063fe5570560e2c1d8099a255afbe77b218ad2172d53e0b7f9af3991120f9e7
+Entropy.4 = 9e5a9a30661dee3b312c6239b68fe33c00348d169aa101ab
+Nonce.4 = b7c24e79f475ae0ac0682ab8
+PersonalisationString.4 = 42be159ead7265245de53b7bca0c1592bdd8927448eba930
+Output.4 = fc6fa5b9f0aecf616f59645652626b3057841605264e2f34de81d771b44f47b6e943aae80412f2d3732bb4fdf09cc1a935669d92714fe0a2ac3fc05581724ab9bfe8f5a5b505413ea6d48a7bc1f7efc3064c1752e32d149f05b56a81d4a0065a997a98377c772cf3e7d097829bfb358a
+Entropy.5 = f2fafffafbe4147b41a25026638cb7c2551a19b95c37a1c5
+Nonce.5 = 3caf68f7be4c8d177cc12c7b
+PersonalisationString.5 = 1bacac297e2cb2dc292247c038e30f1c62714c35c33b6c23
+Output.5 = 89088f1b2c2c2bd4375455a8a395ad657515d7ca8172ee2e5eaa3b02a86fd39fba00daf2906ea83485c8b21e6776f8cf379a70ea1cd83090e6257baf34a4d2580cce4f884b49e5fdf5d1c43713e42a3afc40971108ddc9b83d217bd9fcb7ac99e1f002285ee6c438e71420f75c45f444
+Entropy.6 = 933fad2d86855f427949b567231b0718001375e08a774df7
+Nonce.6 = fb878fc9bb993a44aefb211a
+PersonalisationString.6 = bf76e3e3097433f46348ef46bbc74d1629870884a7cbd905
+Output.6 = df59e6ca711d1b9ae21523058b3a0d59aa8aebf3d233d615d7e2eb85bf015936b3970f7037714af092e7310c25bae280784c51d11be2c29909041139aef75e1fde2df87879b11a62214011f967a1cfb44abe4bd47bb0cb18fd54673d3ff52e6a2fd480367e6123dce2af3e55f1c04041
+Entropy.7 = 186d0b34e0bcbb0413a5b6bec4fba5e9de5972289e978af1
+Nonce.7 = 8fc32990df17fe63d69d5dc2
+PersonalisationString.7 = a56e6121891194848aec57e05e2d03552fcf497d688da69a
+Output.7 = 5e2c291a793e5e2f4fd9305b104f41379f30600dd4c536a0b4aff9d0d7d5e98587a5f042e44d396c8e002b89bbf263ad6844b967da48490a566486d2fb07f6086384ca3e4116fc3b279571fabeb3c6de5489d2421540ce3702d84c6f390519149b2ec29c8a98f501f5838872671b871b
+Entropy.8 = ed30a0ff85b7850e00bd50b10cb25322ae463fe08916158a
+Nonce.8 = 9aa741c4faa9bd8150d12614
+PersonalisationString.8 = e138f0bff72f7e1192dddb3e5f0bb36c49cf1335941df9fc
+Output.8 = bb1546b07894dbdb7eedac4487a84c08ffed37d1183e8f9f18616609a1c0aefae244f740249e930c9f66f8c16ee3f5a58c323df5bf0b58bb020c7e903d06a6c1af96066da1b3e744bcfa3445c99bb3c3edc6e832001a70773dffc5dbe001bfdaf3b3987a6dbe905acf7f15c9228188d5
+Entropy.9 = eafb4ead0744a60ec5349c4f6c997afd9410a3510513b821
+Nonce.9 = 6b236aa2e650229561cba5f4
+PersonalisationString.9 = c6d3a51e61733a124d4580515cbfe48214f6538862f3cee4
+Output.9 = 0282a5b8cf8a2895bee135ded99ecd62f9f82badc61cf5d1b98850693e920caff4aaac69667d2c2d705cc818fb0ce7c7a87b289eab60d7a1f75dc963b6f0b2badea43b75f1df470dd540a7eee5edb082320a9799b3863e873eca71287c50f01743dd46a3cbb8bd50b292e0e48e1e33d0
+Entropy.10 = 3251085c799a617933c43263559d4079bab2066c12c175ac
+Nonce.10 = f876fc6367bb50e29a65ae27
+PersonalisationString.10 = 4ea8910480e2f10f01322173d4bf56e78fd28e5a5ea76dce
+Output.10 = 0db26f82dc278cdfe28018720a21b08f054205022819cf509bcab48726eabf2333208d06604b0ec58e75c0019cc0db64dfd51d42e4652b062f97402c5c9e97be30258ac93cce34f5eb72b46b8ac0e1463a4f91354ef3a0e728e2553bba05f483652ca09f3cc760afdd32887d8281e4c2
+Entropy.11 = bffe08de3c6ada50493bf7710c4f76901b29d4f5085e75d8
+Nonce.11 = 9fe7b08be59ea8f984f7bb22
+PersonalisationString.11 = 50c5baeb68259df26e9393376015446fa64f13e53ef99802
+Output.11 = 0405a18d3c876fb3d492096e55ab18f2c2d871f6cf877d6aaac4f0b10f7ec94d1f0fde299b1fe20a93b7bf5b5cee8afb8311c7af0f590f9210dc93ab2ffd5be8afb6917bdd54fc8bb829c68065b02394b3e14c91cb6d45727d09225156d4d74aed091d349784193b26504977baf8968a
+Entropy.12 = baedf1669fb2adad3cf4dc057f165445f88dc2ad8d10b0fc
+Nonce.12 = a06e451ab4aa19365f6593ac
+PersonalisationString.12 = 96ddb2bafaaff6992a320c37ba30e6775cb4968791f0da2d
+Output.12 = 0b4bcd441f192f1497a435b12153a52d3d3a27adcffd87bf366de3d1f7fc2909091eeacbcd8b3bd7b110a410cdd24e70eb7b993b72fe69e606c9e67ea7fe1e75ddf4f2d8833e79914d1cfc4b2f9d75e4f251980b2e99460bb9026b8c1021dca83f7396aca5be746515ee8476aedddf33
+Entropy.13 = 7d829378240e77befd623cc191b42c0353dbad49556b6868
+Nonce.13 = ff36e29ff50e871aa2c219d6
+PersonalisationString.13 = 418df77501e64240b3af94b01e623d3c1dbc04cfe89ef1bc
+Output.13 = 57743e47cc9d88534cbf28dfa195f6080d73b5fb202382cb2ada100f3522fa89f8b0b1639ca7229fa7c44ab0dda3a064ab217f0793027bc88d119ff056d66558c7bc63db483703056c01bc73986ef5854c265f5d2894aa12cb684773008f51ddf761119dbcb8376fb1f3540200fb0916
+Entropy.14 = 65b70b238a1a7107b83c1b9f1270bf1ab4ab454690f3333f
+Nonce.14 = f2435f70e075f8044d4235cb
+PersonalisationString.14 = 80fa0ec5a3a1b46cd639ae19c137239ba8113db33984c593
+Output.14 = e547f6d8cd665204f8ebf6d64ecaa23fcc59c1682eab3190bc76ad4981d68810833f1212965def4868883529c0bae4a2345da6a0e6a7e766d16022c6f371db8ad089d9227e3a85168d080c3ff2bdd604e7f8404a16268bd66d70f5fb164cee60f1af97bdb6e1d72059d7028a13ec83f5
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 70ea93c46d246261c8366308c94287b93389c605bdb2c5fa
+Nonce.0 = d5d72ffa9a6a5f38e93161f5
+PersonalisationString.0 = 765da1cef5942bba3bd579a2db5bc213a501742de91d3d3c
+AdditionalInputA.0 = 3160991497bd6c5316bace61d657f37e1c6d103a81913203
+AdditionalInputB.0 = 81d443646e46fa55f989aca376096483ec90362a2c90eabd
+Output.0 = ed197b67f433ccfc6edcd35202d923f3843291ab8b061843bee6af02e3e29d6fc923b12da4810254ac8057a85a976488f805f7c3e46f7964a7aee89e77fca18f9c98d3fc0f4fb2a64d187f2e822f0e380d5e4acd2add9e261564f2822b8880c1c0ef196d8eeeaeb56fddd46467fc751b
+Entropy.1 = 191722a32fe5636431da95d41bb792208bbba46d715d8be8
+Nonce.1 = 97c0bd36f3358421f22801d7
+PersonalisationString.1 = ce647b5b3aee4ec33c7583e22479856648a1fbc1bcf86289
+AdditionalInputA.1 = 0332e1a8f84ed7015365c26563638d2bb4c47161a6deae02
+AdditionalInputB.1 = bbc790be9694ff64fcf5b10dbed5bc6b03060917f7020a0c
+Output.1 = 1960ae5703637c23d052b73d389e25f1490423bace59c8e0416cf39fabd2370ab973c8dc379a20577c8348be0d98d55031a896a38eeb94a01aa253b9f0d7b91b00bb411615380ae19a3e662de599e49f195994a63e78fdc5f6e38cc8152a847a4224e6da14c576a585bd719cd284b417
+Entropy.2 = c31060b4557ee77406e4072d35725d82bd47158271975bf0
+Nonce.2 = 9f96a7c91a4e08382147ede4
+PersonalisationString.2 = 9cac48c65deb8f4ac3e45dcbeb5e096b296b341ae0ab8818
+AdditionalInputA.2 = db7841b95c43a7aa16960dd1d5d2bb29bed28e5e96a24d88
+AdditionalInputB.2 = e4c6e328bff28c3b7c65167fc46cd9460dac1286f4d4f712
+Output.2 = a9ec99ece87762e3548c23d98157bfb424e32519bb01752e3e520b226462dfb8d848c4784c97e5e227b4ee63fed4805ceb0ab75e1c31c41b0d012cdd8047da548f8a2977cb31f031929ce55f70b2b3d6cd6df5f3662bf5c9a76d82111dd8b22122386fcc7bf9f72f39e5417cd16616dd
+Entropy.3 = 429b62cffa82e27ab7802278a499a2a50c8f1c9575766538
+Nonce.3 = da3569ad5a22189668b51f12
+PersonalisationString.3 = bc56e97493efa939c391971758c3f01264a9385d7b6a070d
+AdditionalInputA.3 = ea52392b9a6b5504d689a9ae8ce1cea907248eeb3c2c9291
+AdditionalInputB.3 = c7f1935eab7fc756ab2b35b5d60bf1efe5ffaaea76f587b7
+Output.3 = c5dbae5d9c88bf1546be5794abb88b7612519a7449fd9e62cdd408f108ec48a716b6f8a4cc2d1d08afb538fb47693af8086b1e4ff3221e8d92810677e768ad4698d21acf0d3a1c06370a4e14387b5d19284d71cbce056a0949b0ad36a4539aa600732628eac8e4bdf19a9e6cd8c9a5f5
+Entropy.4 = 9ae60697d0fa8af9f2fc4bff94d1db77a9dd509bf5c59055
+Nonce.4 = cd33fdd2a73139107fd25dd2
+PersonalisationString.4 = 91b0dab516cefeb8dee71d2247873ee53e8d6ac37c1e0a83
+AdditionalInputA.4 = 5d6db98bece27d9a0e5141904ec872789dd9cfb10ac8d6e4
+AdditionalInputB.4 = 1e15c4628514275e94f889d7e2509e71b09d0e0cb0a50719
+Output.4 = 7d508737e0fc573616d71fc98f1ed389850f85c9720af22294fb51426202191e5cc54c801f32924689abbbae69b9e422570518e3a1b1c50205de3484644ee5ea5a1eacac33f54361af89332bbcaee6440dc844f0b40e8e6f964e66b838e9a2d56cd1cf1a878308b731224e5bb986231c
+Entropy.5 = d28aa86734ea726aad6b5d983ea99d3ec486ea11f7c0eb6e
+Nonce.5 = aff80a364132cff620fc917c
+PersonalisationString.5 = f395b1330bfdc1a65e6079bd283e4d64174be8787cda3968
+AdditionalInputA.5 = e473b3d157ad7101a8c613e4d05eb96f8a1a1062a04eaacb
+AdditionalInputB.5 = e6a9ad3e8f7d5e3949bc199aa245244d77417caaaecedc05
+Output.5 = 1b927787032769b1abef2ce19fe862b6193b21178f35e38840d9c0198be37f9be0b72be101eed761c276014781360c3f35336c1bfffa1db7b500b2c7201ba951f96ea38dd6397b8dd7203ad0439ee6df23ae2bf5d42c7788226807fda66584c61db861504033dae3a2af10fd3c0d5a15
+Entropy.6 = 85f68033e8fd65070307984d6941679d6bea191b11238210
+Nonce.6 = 027ca24431bffc575db4cb77
+PersonalisationString.6 = 2a51ce42f382d9bb2f42ea29769c636cdba77a62abecbbba
+AdditionalInputA.6 = 99a33f4f604bd8a4ef6a3373edc466e0346b25797a1310e5
+AdditionalInputB.6 = 31c7ed8358cfd9bd388e6d5d401fcce34692b9f5103f3c77
+Output.6 = e14a1d7d2ed32f90d4229bc168a3603ca7d56e8ba222095f5982d23d59be4947fe153219ce8251f30a902cf4bbbe4a5ae6f401fd4009b7f4e4610485269e12dcd11f5eeb0f8e15bab9b39fe8776eb7156528b866fea9b4a0e2e3fd9a90cc3d93d0ca07696916b158ffc7951d60b80bb6
+Entropy.7 = 1d19e11ca043905694f44f964b108684adaa80326028b95a
+Nonce.7 = 61d40e4d62dde85aca9f390f
+PersonalisationString.7 = 534e16cbbc4f3804315fe18f1165fffc3e4a818475639d23
+AdditionalInputA.7 = 40c2b580ac1df81aefd1df8f9a89e3a392eff777b4ea6707
+AdditionalInputB.7 = 9d060cb1bc45dc68fe167deb75a882c2b4c247af95c781a6
+Output.7 = f4fd01a277ab29a820cef853b278a4f79a3442e633ad3a748061e1020b70310ad4f4f77b2d44244453bfd69ffe9799971dd03fd3fa23317b577d1f484a733ab9b13fcd135d20da2717c800a4e150d530a9862d1adb058ed91c7f7ff86597929c60376739880868ac7d53c3d06cfdc421
+Entropy.8 = c5ffeee448e760f02ab0ed79f142695ca1ad9c52bfe9434a
+Nonce.8 = 0057a62335383d523d0c901e
+PersonalisationString.8 = edef123de50121b701673f8f41cb62aab17f0f9bb1248f10
+AdditionalInputA.8 = 71b6ad9e6203c9e4cd68850c86d86fb00a53f149f8cc1ab9
+AdditionalInputB.8 = bd7419b89d6e5455efde4599efd622d9bef12e69f87f38a7
+Output.8 = 5a04175330c7e7d1d610c7f10e08c7e031ab513f5d707a601d0cd580d144f99dfbea8ff634d574b4dc057d1a0926a5ee4178a2d8be59900072664a6d3d6a1b057236fc7220a5c1b980d49f35d9a9b49dae12f8e8cbad22983b9bbf82f89e5f07e369d001b25477fa22926b8834a6f286
+Entropy.9 = 53190559e83f41773411e75053fcd3fe632b80d28f3bbecc
+Nonce.9 = 32656f46682074f5d349b92a
+PersonalisationString.9 = fb65ef291b630d306131d4e3df3af71d727b1172d44c9ee3
+AdditionalInputA.9 = 8dca31c7299602bdecee106818c1c41d07f1dbb3c2c8252d
+AdditionalInputB.9 = 1cd0d5e5ff4e4a25fe0627e096b8c2c9ea06cdb8f451e84a
+Output.9 = 9628958deb7c95bb63bb1cfe6f6104bb816dec6e476c7993abb8d7e0cb15cbcb9e8299454390c4ba72307cb96ae08fd2c2062ae28ee835fba1a53a6eee531e480a434c10ee884675b6a4a58adeaf5ae75a95e49d161f42a3678c0c0c459cbf314edf329171b6822206c01d02e79f02d2
+Entropy.10 = 105663368ca3d3ca4d6676fb2972fb42aff40eae8929752b
+Nonce.10 = 5b333239203454e5fd35f3d3
+PersonalisationString.10 = 78fe1843c8575d8563be46579ce035416d196d2411d6f58a
+AdditionalInputA.10 = 1ef05bc2a19c3185e6592933d413c4c34028227e29145996
+AdditionalInputB.10 = 30a4d8734c9f48f7167e5a1fd877e2e210387aa515c2df80
+Output.10 = aab80ce4cc4f6425e87fe17b4b8c3e35419bb989586e98f20c2bf3ab9e83b57e0d734ec712cd84b3ab7135213a0d1f2300aca106aab4f3ab26947ebf642d871233abc5c4c7a2f241fb1d96d7844ddf446088d1d315d838855cefd8e0f83530ce9509df84f4398a432325cebff1669c62
+Entropy.11 = c12c51aefa27b6a528211ec51c82f753d38d01b70a9bad13
+Nonce.11 = 1d809d62f75dbe9d816475ce
+PersonalisationString.11 = 7536c910f6c8bfa3d1d51b67a4a767c21bdbc08911e893b4
+AdditionalInputA.11 = 74454e36fd57dc587415c49772b64e36eb0f918eb902fd65
+AdditionalInputB.11 = 1162e2e5d4609e1f2e79e54d69a2d6da9dd0ac691bda88a7
+Output.11 = 5385e6d950593f9f2b4d93291fabe0e4b519188e201cc9eb57c57e7cfe7604a0e263a2fd73d4359190f301f12eb28fa4960c68bd2532ee33e7800a5e791de0709524d971a92ec90df341606001a99af60b1ffe70e190b9d1c1b196503bb69735e0a8955e62b5a9c99f9841b1fc141d25
+Entropy.12 = e1e8808d4a54b0d257b6d83d920f41fb2eb874ae92a7081b
+Nonce.12 = 0363fb9ca9a667dc4a63a39f
+PersonalisationString.12 = ceb33739b5891006369bb9db99e8e509cf52e35b919457d7
+AdditionalInputA.12 = 1ea06da460285d80380adf45243c5d1e0605b25ddc320701
+AdditionalInputB.12 = 846abb105ad3bc773a6b385ee575c17ef515420602d6082a
+Output.12 = cf3d9b4b66c83a7901c4c35cf8d9d5c525962f6da3d793c2faca59fb9c79711bad8ebdedcb64e5148d6acf1e5b384f051b193358efa743bcc2754f10d99053e6cbe34b2cddad7e8e287c603869cfab6ed4df28b26a0a00f70877d094393eb721000566c61dccb15eb58d2dd65f0b5fc4
+Entropy.13 = 31f74101e7fed5cda30b13d34dda43093a06b8f04ca0eae4
+Nonce.13 = eb00477a3f425f588875d7dd
+PersonalisationString.13 = 66bf7e650e2abd76195336c95e5c373814fa23c1abded5ac
+AdditionalInputA.13 = d8c7711e465da516f63edd7c6dc0043b3cbb80f22e15d69a
+AdditionalInputB.13 = da09a438f8e5bac4105b168a956497c1eb920225f2148d2e
+Output.13 = 586a0dd5f9096abbae7a0ac9f022f3ff3f7db5e68a498d2acbd777f5b2cbbcf5284afe2b16c46f7f5b14fae14f8d6fcb10c3ad99544b5de31b031217ad21054914ef93772bbc7561ff92f4b680e0404845c7aab07a80c59ab1e23fa386f323b584937c930808fc67f978d43980348f1c
+Entropy.14 = adc23efdfbdb1e6282bf5d744d73e4b401de9f0ce5734ed0
+Nonce.14 = 78950e481e8ff5c8916fbaf4
+PersonalisationString.14 = 85c36732053af8a4aa04fd6d71b5c8d5092cd4529e2a8507
+AdditionalInputA.14 = 81356bf7d3122bd65b5d96d2ca68875e1d77b36edb8e92b3
+AdditionalInputB.14 = 1f185d4aeca1d95ba4c8e7867df64296525e00db7da61e88
+Output.14 = 8032e92efc35ace508d8a10f36a6e7110cd0b087cf853409e83dbc554633380e9793b7657a23a931e34347fe0ba34c2abdef6a8505e44da62fee97a9543b9e6dd6538726ec2cc6f6d19382562a4a438a2b0756fa66b48628af292e2f53e49edfae3ccc48a95f24c940a90d1abfdd6d0b
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 9adba4f888747eb59b4754790ad681ef015fe6707acc4740
+Nonce.0 = 042ca5d6914bda92b9cae9ad
+Output.0 = ee99b96d6babe910dd8e042cc028dc0c76fd63929463569687669b47b22f8472a3da67b6bfd48320970cd61d2a7a06dc62e0cf496aa4e75bee83eda197f164fa275f2d9043c2bde8c87fd1b0c8673f8793e66c7ff26ecaa22c1b79ec5fa8f525474247e80bde3690d48d0381d6a484e1
+Entropy.1 = 16697879a21c21091bddfa6c27aacdf456af7949607d19a1
+Nonce.1 = d96f230702adaa8dd09ca95f
+Output.1 = c82a5a60a240858db67812df34bf1e5b5c7ae6d9d1d2d9cbd0aad4d50eaf1ac4029215ab2081fa802b359e87dcebc7517e61a5ab239bd8e9e82a670b9fdf101cb04c2d40f9743324aecc5e83d26cbbcd1d4d6262135f34eecd17c2093b9614eb52d77c1d57b6ad51956af395c4d7a05f
+Entropy.2 = acb035ec4597de66d5b298ade97e01094dd21cbbd1b2eb14
+Nonce.2 = b5129b90c1f942a078d07186
+Output.2 = b51a58d7d8fa7bb83fd1c871c954a141555e1e01f73b67c13a613a8a7b65736ab6205bb63bd3c95c8d94a29883b4d1349307baa781a3e2e1346537aafe98d040538609831d86424067eb3515f4d34c1d7c8ecfd48b7e1d00b71c370697f2870bd3e2c9ee65beef855f5e1520dbee119d
+Entropy.3 = dbf353cc5d0522f8fbe08752c7d6c9f67f8def3720837aec
+Nonce.3 = 922f28b3c7f11cb1bfc2151a
+Output.3 = bc720a1a5a27beb5963992537ab2434da6547867b8a6fdf2bcc902fc54e5ad282f4277964536973f9c080226b6ac6333b216dd60ae015e0af1b8081cdf4782df65aaaf138e1c02322bb4a14900cb624c887b453a9607e79b8d9c8b630f4f8f9f5915c4159931f9c4252d92db3bb7a0e8
+Entropy.4 = 3ade8164ddc5518c56b8e27dd12d729808441543093d2071
+Nonce.4 = fc55f735f052a912d8d844d1
+Output.4 = bc305a5dbe0de0c96540f3392f06120457aa12001fb1090d2871ed682196d63333c68767dddd760c5aa033d802573166ee5af4b8449b93dee686632a771070dc7767ad4feb798080951a1f5de6847843dd4a5e81f8f6c7ec17725f2bf1375508b4b1b9a2e74b8f7ec52251cbf855a866
+Entropy.5 = 075804484a8e276ae130d319724f6902ce63916e2bfd8ca6
+Nonce.5 = 22390f15a33ad072e6317986
+Output.5 = 19c343c0b156f023de9dd804335220cd0132ae69471fed0327a678a5ab1199f7a9492a2295f69a6e1ce7b7771c1dcc6d2ac7f10108104aa22b8e413883f59cd8b4fce06e17ee767a9d35a7b4a3bf415c926e39c0a4a3a151630b06a6277700b24c7644587e126966a0ec401452bb2805
+Entropy.6 = c48b3edd0eaa59b5b597e33d06686d45ebd07558ed706cd8
+Nonce.6 = a674b554357ecbf7f11b8224
+Output.6 = 9e7dc7c3a48c6da3f2e48f6e4ce8d19843f384b2dddc99ea78e8a79780d37a2f04cefe31c106b593c5b8ce5fb63314488feeeb2dc6bf0b46ef62456bc0c8717e5873c8ee78788f8892f10a62de78ffe63491dfdcc7069cc81e9c2a5b70bcc807d9797f926d5aef5c42c53b7608bb5b87
+Entropy.7 = 5783bc44e7581781a6a7a91a251b277b3aa9bdfdf79fcaf7
+Nonce.7 = 1262f4e9c5df985b33359de6
+Output.7 = 0985885ac635d9361f1d3f8a08d0c3222713e689186ed6d761618a8843bb3f2c4d8831eacc70926cdc2c125603ca4c9190f387e0da5e72565b7530259f58d85e24765ea4059a26a0f3136ac03811166b57c876c529deb268e031a2b49405b695ad1165d66dddebecf9a96737f184ce63
+Entropy.8 = 729e8de3d5f8a92856d9f537c1ac4f06f4806f79bb795e5d
+Nonce.8 = 48e8bcb81b45d6b2a5402df1
+Output.8 = d8af0382834c7a2f22a40831c827135f1ec801cbc2f5fea3575695a585bf12a0ee7f09b9a0143181493f9ccf027d8be81b99077f035e7d26ea78a83456fa208a1fe70a7239c40607e946ff00094c867ac9db36182c25cd7717202c0f71a20c486816d5ae628aa89c181894468dbb81d5
+Entropy.9 = 7b8b66ad077aa353bccea7c2053591e08f961a1c13dd757c
+Nonce.9 = d96a36123fec868284ffa6e2
+Output.9 = 2cb858bbcc3722b3839d7c179375e43a30198a1528942135ea8c3aa36560635b80379f96a17154853bf75731cca14cc506d5e547d5e1d7b5af972507a4392580ee59f5b1c9ced155c0ff61c9d4790d03e870d52125c29f9827baebdeff34b1c8d8b586439e3dc42990787350428cb0ae
+Entropy.10 = a5961a00f82563e89384310d53fbafd2ff3b1c8d729b5c3b
+Nonce.10 = 8ea1871eb02020da39751fc2
+Output.10 = 59b33b69aaf52948cdcd0a408788a0eadeba9d40198d43b815897a71adb441ddcd09276795250b527427c72d15acfd7c1e9bca417b1f079b4b25ff0876f051322dded8b39aefebdb24b11baac8659ea83afc363d9f1eda7dfb5e973e5736467c551089db74b796437afbd5e6f0248bef
+Entropy.11 = a961b933a1c9ad696659e5e87f5b2d92bc470666fa3ae13c
+Nonce.11 = 81ee1293cdc958aa629cbb3e
+Output.11 = f9138e627879ef1dd36acbbaaf8c7a23cd52a4f0adae38cd47a8082458a085da585fa87402c9ae333a28f50bf33865737a8db85ee9dd2a4c86a7bb4d0d4c47c5bb57ace31df78b11cb2835a6ff7187a0a322883b28215a532306fd8c380bae23e13605052f737fb5bd8a5ab0327931c8
+Entropy.12 = 8db9ff5b00e13418a902135f279e268ab923d1554008b29b
+Nonce.12 = fc8c8af3aee6b77c4a8eebf1
+Output.12 = 2a5389db0f0c697d32ae0cc477bae8c92a670e19b7e431783ad6c4e7fa6572aecb40d04ee87a23491ed38a2207e90c44fd3cd1271b470690aa5f4eafcc834aef64a1f8d98c4b4b8592f17ce95badaa4e75fc95c32ff52fe66bc611d312eb008e7d22c7eea53894b955030d4b842e7680
+Entropy.13 = f859ceded81b96ab234189739ad6454bdaed399822d14fcd
+Nonce.13 = 42b14df0f8f9a1690f3bee46
+Output.13 = 8835761208b138ca1720296e1849e32e1a02859d9ea76298eac19cccc3663ec9308a2b68ebd4d18024d4f39ce560a0bd3aed9c52d53db1b53baded8b2d24f1ed5807caac9ceb6595cfa024815d32cb871ddb71a03b116906be43b5c7890729abf5d6379333e24e78192659774b2e3165
+Entropy.14 = 3879ca720aaebb2a29c99c0aa21d63308b44677f2bbe6056
+Nonce.14 = 2642dd7030605b3608f4513e
+Output.14 = b7ddc2d0295a550e44103ffe7e6e1771cd488fa2ea32b091076085284edb870220e02ba6facdf27d8b34209048d0aa4cce4556c074fc7ec2c3691b95aac3f47c3b42bee3c2e35da17b040188d47b7effef8ac471a669f29e6c4b97ff6836cb9fd8954f57309a97e9a697e061010525a1
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 53aff72a034b35c9531b01cd4bd533269a2c437abcdb13d9
+Nonce.0 = d9f1ccaf486d8fbb1649e18e
+AdditionalInputA.0 = c0d787528a4864d75d114683ba9f79245ed481d18dd0ab0f
+AdditionalInputB.0 = 6ef8c44727dc9195da01bd49406790305d4f4c45fece6d89
+Output.0 = e8ac2faa97f487544341a6457425fc9da03b79d1cb377cc7f66416d28e50540f7c7f359e3c876ef41b16a3dd77e6d73d8572a9f3587317b1c07be701d81537f69973031f18906600edcbab8328a1c5568f8407a961b989fdca0be2dcda4f7f9bc4789f5f56ba281fe0f5508590992255
+Entropy.1 = d5fd2f7f2ac76b1056094154705da15af9bf1275616d6858
+Nonce.1 = 0a1958e7a3a2ec7d34452da6
+AdditionalInputA.1 = 04bc6079cf2c42e8edf207e80680b03030f268d3ab2ed8c2
+AdditionalInputB.1 = 921b413ae8d44cfb52c889af877bd35e5ceb246dcea6fb96
+Output.1 = 929a3c7f936e87f4ca391c9325bb86b57389527f4245dc43f465691a3e80024063a3bc0386115852742594e6fd1ce035af8e90003df34f5b7fe0b7e1559362d3ea84a6fceaf3d51fb40d3c2252ac5c7ad4cac34a32722293f5a2fb65580c542a9f0f55b77b672336887dd4007851ce5c
+Entropy.2 = 841009350a7a85f7de5af9382c29c71224f4370c6ca12745
+Nonce.2 = 3d0ee6172e91d14f1cfecec8
+AdditionalInputA.2 = a1023dcc66ec0594d9b43e4e87b9cc47bd975af98cd1468a
+AdditionalInputB.2 = d0f024c039633808250ea0d455b7a9e2e62b5e65ef887d43
+Output.2 = 8376d1a22e76a7087114805bae931bea61f3c66aa74cb1e4bd35b4b4332e9557d1e5f90914d2949ecba8b258e8474d9846e93e454d2706ac33a3526d7083790664aef0634441de14911de9b447bf778ef72800d423031635f8a198fc155818515af38a221246be78a9ed136129e33f39
+Entropy.3 = edb82f2ff7eaa5807bef88b7ae2ad9e3d7c316747c2c6bc8
+Nonce.3 = 8f917ef6a0b7a6a76d27a1f8
+AdditionalInputA.3 = bf7f035bc39309d8c73463ea3cdf14b0a08d43c87eb8d198
+AdditionalInputB.3 = d7b41d97587c820727730f3ec91f1c54171609f991ee85f1
+Output.3 = 58a04c67cf6c79e7b8de492d35b8179c0fc45c86b9fd639ee053bc8eb7231bbffcadcc742b990f63f5edb8deb1ee7ca2095bf83291daec0e0f82df4ec58650401ab92f1e779119b4696a8c82c5da18ccd657c8cd60c07811a283653d72a92506fc85405efef0ce84cb4f7009b8776fe9
+Entropy.4 = 12c52451cbf115747fdd5a45ba3f864157a6d144f21adbce
+Nonce.4 = 0ed023b13f02e2d572d7b164
+AdditionalInputA.4 = aae7a7b00082b983d0b7b8293787c3f58a951478cfab2441
+AdditionalInputB.4 = 168e6f4887bbf5291596a93593f58e0f8973cf737ab1884d
+Output.4 = e259fc5921dde6398987e92366cdf059b3659d7f3f7dcbea3e4bcd482d2e70c0ffb15990f382cdc6364d31c4105386d0f259e2f7a5727df7c89217549f3d3c38410de246757d5f672665373872146fadcf93d65d8079d8f6ea49fbc1403e0fb2e6037fd1047526ee28ddfe940d630bbe
+Entropy.5 = 3a426d53895b3e46d97787dfe79ac48d3addf64b088d6c52
+Nonce.5 = 43a45ded0084ee3b2cf5914a
+AdditionalInputA.5 = df4f52d86893939d83c1fde14d90b4e85c4a68a2dddf5ad2
+AdditionalInputB.5 = 4205c5a9fc403572c4446670ef4ac7f5fb9938910fd0b33c
+Output.5 = 406fb613800bfa05ff713d736106958c1126be3d9c48f9cbdb9ddb73c7353242a6fae9979ab3dffa96648c05f8abf3ab784405ed263e0558631897bba78ad1566dd43085a20ba23e1b8f329a9121afbaf8e2f830d1c4069f44ff125277453bb4694e0bb2c01e7a3fd2ac4441c5241ab3
+Entropy.6 = 3c759443c83813a7deb06cfff7fc0814128d416f455f4df7
+Nonce.6 = a73af062f4ea0140d693e716
+AdditionalInputA.6 = 94309b66c8eb3b700852db9e1170a158604e5e043c5cb47c
+AdditionalInputB.6 = b4105cb2af73ca583e88fb3eabc35209a0a06452aed4cace
+Output.6 = 508d4d7a1ffdd032b40e526c93a93b1a5e965e4890767a0e495412b005dbf0e86685208a327905bf4610c6094ab7257a32e14b5bda9cc15c6333d404bc5e2fd9f554ad7a7c4cdb861b2b951dd28f02343b9ce6abec6a66681b4c064390041455ba514e1eacdb5edeed95b99672588101
+Entropy.7 = 494f4c733131ebe8493c783883577136c9990616b0caf069
+Nonce.7 = ef61c7230fd74072b85dd3c4
+AdditionalInputA.7 = c2488f2d5052c367364e925367d7ee42e5b7773c4db05d2e
+AdditionalInputB.7 = 79713c9faedb3ee6eb0fecf0876ee4ecd84691e00b96faec
+Output.7 = 4100051ac949d3a1cc5d45e9894df6bb2cff88bf647379fd7065bd8f50a8ad4aa3a084971349d7e2141081036ed8d5bbf043fd87308b53cf94407644b7a7508ca46064f71f56405be76072edf2475b6dfa805de80af43ef91932d62b45ededcf2b82a17d226137af9c2970869ce906d8
+Entropy.8 = 60c687bb49a3d1854d5798fe7cfde286e081e3fd09648ecc
+Nonce.8 = 583324cb7ecfb8f82c5eb67a
+AdditionalInputA.8 = d6aa6d3ec08ae9a035937ce3d1be94abd5c473a3cc5bbd8c
+AdditionalInputB.8 = ec5f9cf09e2b403bb1fc26ea87630347b5e4ae5709018bac
+Output.8 = 02b5d69c58848f5d144062fd9714e1166a133ca28440e9a80778602d1f7c35885970755847916b57c316072cbbc61ba90f5e063d048731b331b790b2045f4a9a447c1af818e3e7f156feb4c6e93c17e489b03358584ff83e84a6e9eaf5ec8213f06b209615edd9fdf9d773d2c2b194a8
+Entropy.9 = aac14133237444a1f625d438d4927ac2c616e5c7613ca8e8
+Nonce.9 = c7c662e78fbf37071ca15f4b
+AdditionalInputA.9 = aa125ccba1798b5d0d426d7508260da20c4bee5e0665aaef
+AdditionalInputB.9 = 473a728188c0655169dd024995a3db21b0b2f262c28bed2c
+Output.9 = d4f21a5754eda602c4fc20426adef10c49352b9bcbcce6f69da506be951cc582ed8ade9ede8ffdd4aca311134e2fa45c00692c9ed20661514ba867e9e5206e2585ed11c0d779d85a1d2dc9f1795b25116bf6593086135e4ebc1d9ad7bab414d4100a93bd299d83b19e5bdc9830f30a87
+Entropy.10 = 0a1f74c0db59187d3f20184ad5e7ccba77505351895436ca
+Nonce.10 = 89916fc0502667e5f06d039a
+AdditionalInputA.10 = f68260e1422eed3d09307b30204d92d44c5f84ee0ec15cf2
+AdditionalInputB.10 = 555a5725d5435f5cdd4941c5b8d840f357613b17f123cff5
+Output.10 = 0dad9bfcad83cf8189b0212a888870a8a4cd4302e5913eb27b451513dac8c5e007b4ba9ee148c60945fd5262f6964ef8caa3168c25b2c61a7ed8b4e38a88b610c266d5958bd105f43f0650dd4848a15446e294f325a4c7bf7ca77f51bd910d24566e5411982cfbc7a544ed03a6a641c8
+Entropy.11 = 96646048d50c5596e5ad91a8fa13d3e3e9ae4ee59a274a9d
+Nonce.11 = b114f953802390254efe4664
+AdditionalInputA.11 = e2d11ade8e55b8e3542687b5711497f78c79057eb0fbc29f
+AdditionalInputB.11 = ff94fea1dbfba2c2138f4930332bf03b12a952eabd0d9f6a
+Output.11 = adce9b6066b742c5eb294a66cee2c51c8335641a1ec849e36f721d96b8bd5cecb0a40dd11f3b2636bc5e89943967fe75c2c9ad77f068df8064f208a1da6d7066d7f539ea6548ad57f7306f4ab58d844ddde62a866c3ca58b6e78262d6e45909a9b6276dca45c773e468fe5500132a7a0
+Entropy.12 = 6bb582adbfdddafb38d1115a2eac2ffe3745ce63f93b4efa
+Nonce.12 = 4bca4f918bd3fd8cb78825b9
+AdditionalInputA.12 = 788b95a42ba57cc011479ea079f7b818cb42e2a3693dccfc
+AdditionalInputB.12 = 9e24b638b83586ce95338ac995ba8527086cad0205df5121
+Output.12 = e51693526744def29254b7fefa3287efe752538f25026b821375cefe55fe3f6f8c70543cc97078a096e3393060bb41205335e74d7d5f686497d4d0ef2e2709700b4cad5148d2919d42d84d611197c4dc4e2368c4f0e45e61c375efa356127dfa5860d071e46e7daf79bf380150c10dae
+Entropy.13 = c48499ec94cc528fd842074b3b34b624a6886b1266a01cc7
+Nonce.13 = 8cec818ef3bdee8dad4eb056
+AdditionalInputA.13 = e54c01d8dde55280f2665ad6b075436a61a8ca9b88b5a831
+AdditionalInputB.13 = e5bd1ed7e505346795622b52c2595405e59a84deef50d61a
+Output.13 = b76a9ecf3caea53d06e9bf24391075f3d2ad1187bd2a23dff4f642490511055b5e77749bbc886d85de330f554abdc35adb51c1de5fdfb1322939ea0ed85739c0e22c063e155e029d3549894b3427fcf3e263fb616f788434a09235a1fabe64d8f59f5a382e1c3c3222f3e5accf25faa4
+Entropy.14 = 131273679f11ab131bd40675b8f53dafc9416c3acc09bcc6
+Nonce.14 = aecfeb199abb733d2bfdac2a
+AdditionalInputA.14 = 13998df6bfa51c2708775384f01cfe8f4755b6fe4b3c2fd8
+AdditionalInputB.14 = 8d25383b6d04285fb699c644bfc9b7fc72de41c733f35b27
+Output.14 = 3f408ca372917703ecb3449ea55de7a969a5ba184eee8f30fb19b99ae827c66b13f29d4d3a0236aefdaca63c28bb71595d3dc1fc20f1e7ba1b1c9bdb7c2122bd8e443b00b5339508c315ebbfc9bc3c7bebaaf83312325bae696a576b3c92931eef6b4eab6bd90c140295f47994ec6e34
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 6e6710c92a30ecc014c1aa6f22b0951cc0430ca16255accf
+Nonce.0 = 45b5b13de6920a077b2810cd
+PersonalisationString.0 = 007f8d3fed0d3ca512ddbd457fdda84b8fa4aadb64ccf03b
+Output.0 = fd5ac10678a82e72b59b4b980d43e3113f27bd37982974477f700d73996c04d357c3e56f9e62c4d1c78d921efbde081d6ad0ff62e3a5816084d7206cb4bbc95b8f7f6fa2e73e5644f7a6801b603b730564b523c9b078c36cfb2ab6cbf05a0777f4ea99be0b75d02277a577032dfa6c16
+Entropy.1 = af06de911970172cae8fbdba5d68a704d45a2b66fa10a64a
+Nonce.1 = 9c150019343b6121c7ecadc9
+PersonalisationString.1 = fd2d79e8d237b56c423496e093f3c0eec3d42d6d495f5867
+Output.1 = 58c46b3be593b27bd9a291a2f0bb2fbaefc50f4713dabcb30696d5bcb088d042697ac2b3209b5eeca580ed218ea277edd9fc79323f891d471a84e6c45bfb161594b8be949eb7502d3815ec88b164ce1469bd78a1a733aa3549258e64a5856b0faadaf084f9e69f0a437f47a9bb363ad6
+Entropy.2 = 4436c8a1af7823cd4a7a45ee0e69d711d403e74ec6c69c96
+Nonce.2 = 55df37296d72605af0bef1cb
+PersonalisationString.2 = 24d2cb8ac193a62ab79e06221871a6f0c01e8ecf4dcda0fa
+Output.2 = af29c84946f492f67d6f7f8772c12745a1683d48692b7b76108c4f1b5f64acf9aa7c6cdbd11dcb5247bf7f3914a147d845ede06afd4861dab3fbbd3245107adca4c4f462674b05dd5ba6264b5606b5a4fc1c1775024b38b86025706db7927d2525a2277b06e0fffe92c141e452cc39b3
+Entropy.3 = 785124d2a657d0d9c7aced67d052af7ef3ed276e99f3a134
+Nonce.3 = 8580660681ccc094d999e906
+PersonalisationString.3 = 1d05ee577ead88fac87d5e5d6fecb3e995acf859d01bf923
+Output.3 = 46ca8576b7667fed06438c9cdf248eac2b4dec8f8b8ddd301b907a0498e754095aa3afb8199bc1fec276e93289c3fa3a976bb84cf41bf0cc243ac9b9513bce3a65abbfe8d8c338fad7e889d3ecc4a036d188efbad6da1fa8fa63e6d861aaa2d752f123df6a8ad56fd3e113ac15970c49
+Entropy.4 = 5e3c0551e9f8b7ade059965154ddfba00cd29ba005c30e4c
+Nonce.4 = 4bc4b1b444f4456a689d1d79
+PersonalisationString.4 = d11f62673361a7118820e1b9e64ed62432b56e31bc6bd4aa
+Output.4 = e4219a090ede86c2a34b8565d09364a1015a979221ae2df30a835df57de44a2ff32971f9878566597366c4201387f7fea93589b910bb82d99227ef64f7af6294ac5a434794ca1f0432c92677d171fa5d870c77d2108dc38508fb580577da77bcac39cdfd64187e2779bb59807392b809
+Entropy.5 = daff5ef6e2c193348c5ea64796a7e6788b8654a8309d200f
+Nonce.5 = 62c6606f4ae3a6fc4aac397b
+PersonalisationString.5 = 41178dc742ff695cbab25da273a5aff44d0499133a3b2246
+Output.5 = 36c11234660c94260a06c6f7bcf2d9bb655656e5a383759d15f5c5dd4b6e48f7168bef004efffc3ae365652964a7ee7a885ac29f6f6b9ccb51ac77e35078040dc6cff7ec03d01d8ac5a2ed16058af9cbe5740cef6073cf43f88daeb6504af3c8e6511ec2036d2e353f034614e32b19a8
+Entropy.6 = a9c1318ff59a561728c9f26924acef51ecf46e75b2d9a7e9
+Nonce.6 = 8582f0d6eb3e3f465a5ad313
+PersonalisationString.6 = cbb5a1319fcc9d0a9b96da31f626c2ae533aecc93f35faba
+Output.6 = a7d61a982c64fa7674f97172be791ce0b364a2e32e364b8df1cfec75291ecec19d599bf5c4ab9735240817d7c52b46c6a2e2ba05f9ffff9b19d742e056c3aa82e7be015d7b86dc99036a3dfa729cf078fa5ccb9e2bccd79142a4607f4fc94ff78d951581be4e9935f0861623bd06eb0c
+Entropy.7 = 2eb43ca2539335eedca293dbcb9d5bdab627a66afbe7c108
+Nonce.7 = 06b3aa48769d3d8d2dc8bfbd
+PersonalisationString.7 = a052b0dbd0df209714085f49d786b6033871296ef64b85dd
+Output.7 = 81d156ff0d3c8575f406f890d81f409ca8aa128b56e73ad890dc1f36a0b466d4af3e78747e106cff7b17f27ae95b73ba8aa09aa3608b3be5877641fbeddbd5aa26ad0bc9152a57a4f75bdcbad8dc74f5ecc8cea6852c078cd9639515a9333e3e426ccfcf452eebbd4b7ff399ad58afb5
+Entropy.8 = 0de760c9c3d76e864339b5490db818e4e6db41c63a41665f
+Nonce.8 = bb1a29370c6e57eac8f646c7
+PersonalisationString.8 = e6b33288a0f6413bc826f398f8bd6c12201a60c16c2c26ef
+Output.8 = 655ad7daacd83cb1890ebbd6ef5095d8a4faaf5f6583609fbd9d9cb59204148c6b732109028cc1ca56a1708938fd835b3f841aabff5179590612671ed7ac48b48c87defa49811d95b5bb88246e9f8c1b246be6066d94865cf29e228a8a686b820cd7d762752cf9da15adc8066b161274
+Entropy.9 = 8313933bbb67aca8534cacf25dac26e9be0150ebf7e74d91
+Nonce.9 = 3d9627615e1ea6d5d74afc0d
+PersonalisationString.9 = 11a3c0b1c19cb1d81d4ac4a99132ef87ed2ea757463ead56
+Output.9 = ab5b3171983d19ffad762c932fe89640d5c4fc0dd27f87f85240a80ac59a08b55a62b4b4ecf4d3cd11232a2435d4b8c803df6b70cb801671dc45b5fec76d48bb4f55ba91aa942fda880cb2bd8c3dea412b0c3f872b35299fb80298ef5b81d22e84c4b60479b5421b5f9f2d2b9a8c6f8c
+Entropy.10 = 7eb8a42a6d3b773856fdd615fa8f0faaf265d09ddd831d9f
+Nonce.10 = 3ebc730446b23afab85fd0cf
+PersonalisationString.10 = 8d2883a3a40a4a849b79b9cef7da2fcc1e5ffe2b4e8e10ad
+Output.10 = 50a43bf5120962bb141fa7d9dd669112aceb00b5ae6adacc6047f7fe1693bd11b1f915219c023061867bf1bec19c2d3849ea3c566d1c3c491540c5c84b4727e73b12c9e1bc4cca577f6b2cd3c9b626fe91672f0ab624f76a1e13cffe1e2daa513c75982a8e7c6b2f3044c21c6159c924
+Entropy.11 = 75d715ed43edc2506564c06e7dcd3ee6c6f111ad999b2488
+Nonce.11 = c00a2e3c32ed1e0b2e435dc8
+PersonalisationString.11 = 0b906a36230c92785838d09a03cb8a0ece30138d61cc11c4
+Output.11 = 51328103fd7e7ed67aeda05059570892d775205282ea925292e8febe64c01bdfe16e2f6afbf7de7323c337f7faca3f253485430c8d3e5f7086a647cad2e307cb80b9725d57ad60c8046b16de0c29d310085465baf966041b6065d72519f92a637a486e43a39199545a8b1ebd097986ae
+Entropy.12 = 54891fc89ab7805b3129c70ecad75c5331bb821b8f1c3b1f
+Nonce.12 = 69187d8c108c876b1c283aa5
+PersonalisationString.12 = 62d69ea0f81954352f554587533838e6193165f36b7ee737
+Output.12 = ad82de4dad4beb78281d29a0e34e369c4f35de269eadffe95fcd4a44e6dfbd311587f80acc869cb84eebbc48b75d7cd83e3a790cac2f5b92e97c0ffe4bc08a5c5ec38460f79736d978dc53758b6598ea6debda6068121ac1804b2ea6e684b9cda6e8786b6432632ede5fb40dad7e0f20
+Entropy.13 = 7dc68690b5a7cbc776c59419326d3fd8dc343dcd91d922f7
+Nonce.13 = 6d72bc54cd426fe51815d88c
+PersonalisationString.13 = 665f6e331d0a7bf0bef0cefb47bbb41485618b97f116c7d2
+Output.13 = f502a71908f9396591cf21b2f3cbad59f7253af8964cedeab7d307140dc4baabc3831015e9498aa5657b11b22953a0b24da5e4e53ce9db4125ba325d270339c34e50af89df0e1370ab2c40a3989cc222d68ab14c443ddeee929b78841b02c82b922d5a88ded6c9b5a7d8a47d4b4fc397
+Entropy.14 = 23c19b9ac1ae1ce4bba0c0262fffb615d010b317f7013ff5
+Nonce.14 = ddb5c0cd2b4b640898c2fd1a
+PersonalisationString.14 = a096d62f947314691cfb647cc2f331af834cbcdd5918f099
+Output.14 = dc9175fb05854708739c3da005592ada29d408ed6162dd278ee457bd3304e4f7011355da2302df1d0d190ef846cadaccfa5325d3f71c407ab2434d65d815dafa6ca15f7e701a104225a839f2fa9874ad49bbdbee576b1bc71ace28c825095510890861c851bb79e2e2e922c3ac22fcde
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = dd613a088187ea115d9419db1f3e36c9334c0388359bce67
+Nonce.0 = 2a31352007a20166a6acc648
+PersonalisationString.0 = f93e011aa0a74e2bf5145eeba9fc551535736efc8e602c25
+AdditionalInputA.0 = 9c2da85e0eb2ce03bac0b51b2d686770ee4491c15e76c14c
+AdditionalInputB.0 = fc4a5a59f46e417c857ffc6b34fba2a51254cbe41d66ae24
+Output.0 = d79a79f9ea5604399ea5151c2a61d33b69c35afebb67f246a371aeaea8f1e75763cde1907a5ca30c439d60b71b72429a66fc10d3c853e4552dc501ffadee6733e1c8d61efa1843c5e16cd832cf4b3d5bc04bef18d845a014ae2982fb26dce6bd24b455184d9bb1ac8ac324590b1a0c51
+Entropy.1 = d7e9f3d8f13b03a092b760d7fa1916bb7aff5d5a47fd2248
+Nonce.1 = 8ae94b692bd0746727d051b3
+PersonalisationString.1 = 185da67e83276a817a807a65632d3fca2d0a36e8ad8ddad1
+AdditionalInputA.1 = ec4dd4a3a64da4175142b9564fa0a6ea1818f815c8a84916
+AdditionalInputB.1 = 0d46aa655247fe22428b0914e2d69a4981e2ac55fc7130d4
+Output.1 = 8d897f548aaf86e277df2e0bce8a6944d399874b208c649a5a31c73057087a804feed87ea76ef670eeb27e57c37a08bebac9c957a3a853a420f4011f3f11d8c7fd061563d33ea1a0cd2c7a3c720a3a39a353dea3180d862300c44c481e948710d89c98138f3852dbbca23e4139cbba9d
+Entropy.2 = 97335ca16552fc5ba58b79d9a9c63a81ff338843856bee32
+Nonce.2 = bec64bef3f272cab252e838d
+PersonalisationString.2 = 62376851b9d15496bfb8496cc886440b0afdfcad746ab9a0
+AdditionalInputA.2 = 69fe8ac686efd13aecdaac4d1fa5e7c01da41f3066d4b668
+AdditionalInputB.2 = 5702049e811acd52d96d9191a4d03c31f3e5f28df5464ad2
+Output.2 = acb21b4829a7387a4994e3eee1ed7fd51a027866b76a48c21e09551e68951b98c25681fcef1b2753a539e07f82039db4c29656a213e95e9531ea67dd8f20da549f71a91fd2872c6efa1ce10f99e4b33b2b9c4149b95e1d9b9ffd4c9bdfd8c91aff0fcb02537b2928d91d29ce53a8c738
+Entropy.3 = 68f9d6bf1c3fc81a6a1a8a6802cf351fb0db7979845680a1
+Nonce.3 = 321e220398be80e0f358b85e
+PersonalisationString.3 = 6a142b88d0a53529fdd8dea74170185726c1efb6dfd3e73a
+AdditionalInputA.3 = f3e761fdc1defc199e7fa3f3ea595459ba7f36823fe5cbe6
+AdditionalInputB.3 = c7debb6fc65d592816a6f42f1e3914f8fa35d4bfe55271ea
+Output.3 = 9cd7c36c9364589549af7fe78a0732d6aa36bea12228fff2e528f5e5f9418599032eab2b67054f417834045a656358fe9774009adda5ed3b6c6cd299e151851cdb630c4a4834940f3fa4f29784dc99f7ef0f1e071fd8476af5f01d9cae7735ede2128db5c16df1a0b816aa10cd6dc83c
+Entropy.4 = ba06a17e6afa8d4e9884f63cbfbc64d163f2f579ca7ed598
+Nonce.4 = 21aa776100c0ddaee24634c5
+PersonalisationString.4 = 0749561f59c8ce7bb970d1773a9a8c6e554177ce0194ebc6
+AdditionalInputA.4 = b60c89ae622970d651c8473d6ad42c9a6015defc56a0db3a
+AdditionalInputB.4 = 607ec2c21022555dc67903849342674676c56608556cced3
+Output.4 = 3c44f1fd7d507f9662619c4ffc419b48a9bfa55a533b605d88d3bfc91c208c460dc2bd3c63ff30ea8807fc2817114e77cf7fe09f5a8c70182fe29cf41a76113f7229ef074d204c3cef444f63b3ac1af85cac9e09e9d92c78940074d39309cc45d1bf9a35a3a7b85f3e17897b3a4d6beb
+Entropy.5 = 8f27b7ee2a618fdebbeb58f516729a481f978b3d420821f5
+Nonce.5 = fd9d4f0a75107c64c7864f03
+PersonalisationString.5 = 06e854809260f623db93eeca50cc46d89547d29536dfc77d
+AdditionalInputA.5 = 98f108299f590d9ff866d97239517fcdbe2ea171505c07e5
+AdditionalInputB.5 = 3e3d83ee0f24036983bab3e7c4aa1c4070e17e1fcbefdd13
+Output.5 = d6e693a33e9f56106af0e5ff07348eb25ea7b0c41c40e0c0aa3e9382f1352e51b0c10e5756e455a24fb81af96fc58683f843c17aebe1376a65a16802807ea4f14bd8791fc182a93143fdc52d416f49d4578eda36a4e95646910ed18b906d00c7a135118183c828357c19a17a0812f8c0
+Entropy.6 = 4e668aaa6d1bdb94742401c43bba27ca169fcac91162c03a
+Nonce.6 = 16f96f2e75d712725137bf8a
+PersonalisationString.6 = 37944296e9607d7af30c34d99eb4f851c4690c53e3e25fa6
+AdditionalInputA.6 = a53d387cf1369c0d6f276c0d6e23b747658aa7e3c476a798
+AdditionalInputB.6 = fabd93aae74f8f8d84009644028e72bb2c97dc1064adbc59
+Output.6 = 1e1eb9d443a5aa4d86706099dd1d23f562aa6bc5307922c711aecaffeadd14f36f85738cdfb749b55b700b2b4a2a399fdf59b33faf1b0f6142cf7abf375f49412ab92a619848b761f691bb51dd95cc64c7e6fa104ae4fbb63ab0fd2a38e3c5cefbd39455df4cd5883a057ae4ded25061
+Entropy.7 = da9ac3575de73b7ba307fb8884004e4eafbfe2569f6d6cb0
+Nonce.7 = d25c0101ead9c54ba8863549
+PersonalisationString.7 = cfe05c5b187d62367ba3a7de834317c109e0b6da0da4aa68
+AdditionalInputA.7 = c655e7fb546efa9180b590cd6e51e8ae351c6c3d537bfd5d
+AdditionalInputB.7 = 676d6b386e495263bf970a7d63686e936b3115fcb6446056
+Output.7 = 2db72f96223b7b35963f1beff6ebdd3b08165e8701f8a8b55a7add13601761764b6a3a361a569e589c628875e5ed489448ff22ee02807997609e8fc0b97a35901fbf4fe7b2a7499589c632e93f9a7bdc854c6e269e66090eb3764854457c3e3ea9af902896ad5a5284fa63015a0161de
+Entropy.8 = 74cf7ac52ddd96410e0ba39f455bdacef239dbaf88fb4758
+Nonce.8 = ed4e1cd8b9323d32e688d3a6
+PersonalisationString.8 = 8ee3733c61ea0ad3ecab12cff88c4af119325a9d8b15fdd8
+AdditionalInputA.8 = f717b045e0061b0455ceddb624ad0bee50fb2501c69aafc8
+AdditionalInputB.8 = 21657e2d42a4fce1fce1aeda2f57844a32fd3bcc30ac7d84
+Output.8 = 0b0ceaac8868b359cf8c74c6fb3a4daf59dbd68552ef4531141a2a833cb2fdc9771576fa2dff8ec3ee49e1b687b19875a36bbbb66973cb075348c4f2daeb58a04012c08e7061e91e140118e7620b008087b400d4ca7171bce410ddd4426f6514af7fb604234d39890aee4e34475ce31c
+Entropy.9 = b1d73ec30299e5d754da31a37ed73f2dbe492847b796563e
+Nonce.9 = e118b64a81f6817d5f3cff8b
+PersonalisationString.9 = 319636c5b2edbf1ffb0f28ea5c1fc483e0c3ca8802801ee0
+AdditionalInputA.9 = 99d9fa824de3625643cd95002017626fdd0c2a29249b3fcc
+AdditionalInputB.9 = cb339d0f6d3e830eb316342d9f16027292c0be539d3afae9
+Output.9 = a3298689fb722453aa2d6e25a01e8e048a2339b3a08442ad02c611accdb7c813e0251e01b35e4a72c86cc51c6c064cc4d13c50cc428bc4172cb4649b51c69773da699821fc2883a80763cd96561b5cb99c2219479bc459c54e651c4f22c6df87408e3722cbe01494249818816c38549e
+Entropy.10 = 07115199075865a61c101375d4373f61f2f137fba7030860
+Nonce.10 = 4ab8ed6ced5d0896e5aa4e6c
+PersonalisationString.10 = ada2703b079e1525b203767e8ecb0f12bbb81530b5f83c45
+AdditionalInputA.10 = 92938d2ca56ddc997913ba669dd2a68f1150e971f994489e
+AdditionalInputB.10 = 9ab4e1a982b0fd473e9f5c44667b650e192f954461701843
+Output.10 = 36bd15e37cebc2a684bf1d9f971b700e34444d0e8e9c80b3a0d2c9aa320ce42c5bff316a2df6ccc32a5fc2a7cb00f8a6a5c7d3fa36dff53724c2d1a075fb7a71b66400f005e8f682b83421191c93a31e826e75e3629401ff95c4439eb846558d9a0087f5c47b2b8ebfc36d9f7535f342
+Entropy.11 = 1e7cc92e0aef60ce8a8f40c0bfc7bbf57c03a051ce0ec3e7
+Nonce.11 = 06be5dd7818edbbb0514c409
+PersonalisationString.11 = f8c1bf41d4109726a85865b3d4dfa4dcf729c2c634f18fa8
+AdditionalInputA.11 = 3ae2e5773982ef9f95eca6dd9bf8ec4208d8b4c595aa4538
+AdditionalInputB.11 = a137005a49d9fe3bd2d67dbadd4604aa19ef49dd4cc52664
+Output.11 = 4de76555a538b58f0dcdf6c56b6482976c692c7a8f1ced393bb5789a1cc57318887a70e0f581616052090c041e3cbbddd08065de1e1cfd548acb89b678e9e06302a5c3edc0873e69d7431e850d0fb84ba081259b1e98d6190581cc71131101594732c1f2b625746c9d4cadaa22f3d13d
+Entropy.12 = fc2083c98cb0b14e83d7a0d5394590351e11e195339ced76
+Nonce.12 = efc6f146a738fccf37386f91
+PersonalisationString.12 = dd0cfd5954feff1f95ee3bc54df0a55652374965eb2cb72a
+AdditionalInputA.12 = e841f20642062e7d486fa8bca1712720195278c9b3d69d20
+AdditionalInputB.12 = 0c6f9ae62c170c87a7dad1107ffeb0ec7a15953188b3aa73
+Output.12 = 151b8ef3c9cb616db975e9833862279f31585842bc0725f91b0d2ea96ab1587e520a6c9bc339974cff523255c68a05fee093773a9857a5f3923c002c2eb30a860c2129272baf62ac4e37befb6dc98810fb1c2ea1fb572a5ef37efac78306edc8ac8133353a6986edb99704a1baa84458
+Entropy.13 = ab0cbc1b4b9cae4d8036746ce9f44660022afae8ab1ca1e1
+Nonce.13 = 4dde1ab0dedbc4b0b77d6f9d
+PersonalisationString.13 = 32d8f6c25be41d2bd09417e8f3ba6792868033945b9d7650
+AdditionalInputA.13 = 92f399671e0c5db89310d880545366bc356197c99e2aff72
+AdditionalInputB.13 = f1f822581045ca7dfe2ef9c054b602a91e164253064ee82e
+Output.13 = e87757e04b704eca996703afa63fab787833df6131615a6de7ef9c325edccc52da099ac00082e83fde400753bc759fcd71e91f308e1e58f8b0d3c942b2f51acce15e631f1ab16793b67a32948fff4656959ac1fde49f92cb673185c3c469ad017574066fd689e2fcd202b438a858e35a
+Entropy.14 = aa9365f9c94d1454e34358290b219785c7f1bf114d7d728a
+Nonce.14 = bb3e73c7142054351a7510af
+PersonalisationString.14 = 054b4a59f963a0a6487a059ffc646cd8380bdb04847114e8
+AdditionalInputA.14 = 2bc060710fe3d92760adc274b878de0df82804e840cd098d
+AdditionalInputB.14 = de879de9c03efe5a68a12da7a06003ffbbea0a9c53f5e0bb
+Output.14 = 4968c67d2f830b591531d620b6c40de4e9a15dc97c70b8b059023033bea376953cc5fb415d823d55d5b02b17c2ac60a1c8ee7473d25e94888fae15c6a7770b75565fe505a117c734d0c7d0386cff907a893da3a83d45f51bec9d95670374524b4f59e45a04c88d1756ed854fa9f65693
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a1eea5996a5a9bc30ef4d3a83a07aaf3e29bfc5070835d69
+Nonce.0 = dd272151121d5c5a851173ba
+Output.0 = 340a081e6a7b044485ddb306c8aa26133a6d88dbd068bb622fc9c627f3d5b92cb783a6720907c50518963c911d836ebfbfb530e85b7ddc00dc9e262922b5354841ee4ce13c67cebbf768131d189c4093577b31ce136839c60052a4a57109cac049d7057764fe9c63d8f13ae2201bcb3a
+Entropy.1 = 90b6ee9f10d340cc43ae5edf72a9219c96ac7d9efd91648d
+Nonce.1 = da5032b93360b0cf804d90e8
+Output.1 = 5a1daf8c44000fc7a21f3868411b5f0a0366669a3620e0566dbd10f5b43f7b8d827fea6ad97361a0c8c5d90f1eddc9642107451e0aee275e30d9cee80bee182fbf4cfcfb647eb32de8cd3dbdde58ed4eac8b74cdd391e16f26885bd049a889341a37e8bc5e6fa56bcaa4bd81597534ca
+Entropy.2 = d8de4335819ef3e045145887e3ee56390171764276e82280
+Nonce.2 = 89ec41b62c811bcaf403257c
+Output.2 = 7377c76bfe76fd807582e066e629386980398fd2dd93a3bfcd476a626e1a46b7f72da48603a0800702debe1e50ebf4fbb2583854b179c242eab345f156cd1050c136cc5a59fa1a8ba160e793623ca665bd9b22488ff018713315a0e5fe0e6f86321fcff5ef753002e8a3253e849de9c5
+Entropy.3 = 4a0f5b66c344f6a603f90073d1aebe5ac69fb88af67a27b5
+Nonce.3 = 8ffdd2352cbcb4408c8b4fe1
+Output.3 = eb3b6f7bf9f4431e44a7265f562968d762a298513110066b226f3f7c8c7821eb00d3caf950ae9002301ed3ce20bb473f76160251017830e7605c3160e2b83dfdd516e20b00f9f34070af76b8efdd23019fb976a3daacad8bcf158c82b3f2519907156ab978d15beccaae43b807ea60e3
+Entropy.4 = 2bfcd1971a175e5a6e21920ec52791753eb1089875fab23a
+Nonce.4 = 81921e9cd6d27afab41e57ab
+Output.4 = a2bee41f3f38e2f356c82e461edb05218585eeb3325016d4d2bddd538e585aaeaf9b09dc652317b47f961a6ac424b28f4600f525e73689ee871d016e78c5d49e1a250409eae07a29371c43357b95d0bd9a02ffeb9541790344dfc91fe204bee47a8faf70dc2f885590f2a1a18d5a534b
+Entropy.5 = 9f09d96326362aa176874095dba668ec83deb995c17eceda
+Nonce.5 = 6e17699a0d655f4752d25f69
+Output.5 = 7bed096952b285b372f208a300b142c479d89a22b6098eb4b90d6a3b299977e2429a9461c71e7b9926a0774125475dbc8f0c1c127c916b2ca32bee8e8c28bb6a8390915763346b29a01fdb313c617ca91f382467befb89f5e58a63b1e3f826c1fda9d953709e0d91109309ba07bcc2ae
+Entropy.6 = b244d85a21073232c82c821823f196d292bad5295c922423
+Nonce.6 = 4ade801e3750dd91dbbe4173
+Output.6 = 44cbe6ea80ca8c9107de7733fdccafa6aa285ea82fd26b778cc2b93c652b3173bf9eb7988fb872e82794fbcc83ef0b83644d0c8f84012174cd1accff643fb57dd9ba992cba911081ceb3f67e654a4a2044195f16ad1092c095d52c1ba5b04964e2fc46f30a59ee8a5aff41cbf00ddef6
+Entropy.7 = 261495e2cce8181f414ae5f02a5dc80332b06424b5d23676
+Nonce.7 = c995ae783f33905a315030ce
+Output.7 = c5ac2bab9d7a3e0e016f3400b5878826b85df58988a03969ee3ee240a717215050518ab17f276d8bead20d2591ed6fe4b98d00e74e264c2924ef5fef18fe39d7443f94edaf831736b52e8eebd89afc2331e1d5411c59216b310c99ae1219dc3375a87ac7820cd590f162f766df21361f
+Entropy.8 = 60198ce36d280b35c8a944d36ca19297e980ca5241b35056
+Nonce.8 = ea5d96bad5525bff0db96ec8
+Output.8 = 62402bacf66838c7fd7f69eb9af3bd6c7c6c88a346338fa340d1245af69a935e1d0a8ddd98e38958cdac357bfd1ce65652db99416d6e0a9ed1757b5167ad23bc14629fdf0422598df93c3996298e7dff16a0c02b75a6dae1b459d5398424ea930b016a538b14cf05f3509479af9d4f4b
+Entropy.9 = c1e02fd43b86dcdcb40e454e1630f44d673974165e67f3ff
+Nonce.9 = b2b3a26dcd32751d517f81ea
+Output.9 = b884469b1b9f63b73499ec814685df4c794ef0db26864bced7ee6cb7206882a44d230e5fd6ff3a539397d3d099ab1116307ac94f7b16a041699838985c89dfc60eab5016055b0605aea3779d00918f0ebb8eb575f50b46061ad578fcd785e3ed639a3bae07533eaf6b0baba2db1438af
+Entropy.10 = f07143d93991f1f2a320505309c15cb2732e84cfa76ca1c4
+Nonce.10 = 228282541a29052f64617903
+Output.10 = 6bd0cafac285894ad2d2d4399eebb2d44a133d1cc65832e674b7b601e75527611e5d7f9716c624cb026936d7f9aef9300245e061407345ca0da411ab3e21104738c32afc62f8944ae2040db6eef6d5caf57a36b1baa48458a064616f21c6dca5757ad5f880350dec8f5707a27cbd5b7b
+Entropy.11 = c41f4eb1d82e66940ed38e18dd372907ed1c579a5a92ad63
+Nonce.11 = a0d3a5c0f8db3d6cfb9bc4fb
+Output.11 = f2b2872a29ac51f4c5522408af7c7d66d909a557a79a027e7171a8714167776b5a372604371fedae1b173269fe7d8139b7f4093599736f8d9cb315820ac2061bef6869e97f3d33f7fb79ba57bcea537cbf0a96869dac4a69cda5ddad47ed5d96880c222e461e5ec2b1f4813749a94372
+Entropy.12 = 970c52538b1d5ccf06c66de93301cc139bdd90307c05d357
+Nonce.12 = 6fcbc09b40f49f502e3bb557
+Output.12 = f509589df9d4734a333e04b2a920703b9daddc16da84bb798f77a26500d584d99099042ce5cd784c57135a26470864873b83707ea9e0adc7bb8e930d5184184985348c44a23ba2a81a4188909d80a88b611322fe621f53e0c2a0c0312bddfdd793d1eff95e4a3e620f83a3e41fa8a7cc
+Entropy.13 = cfaaa279e934c56f0f5be56aeed7d634aa1d4d3b423a2027
+Nonce.13 = efa4ec5a62f2d9eebac36340
+Output.13 = cc15948050d2b54c4275155a37930aeec88c9e023c07bb7d2bac4c1368f11fb171fa39c4cfdd16d1bdb20530897e379072179686afa8f32c2837920fe6d4bd62d23da391dceb5b3e46accf7d51a621d550f5648b857bd0f8b91e89a3ad887f8fdb64cf943982f2ed718c29ec7343d3c6
+Entropy.14 = 7ce7dd98c93953a8b60d395a68f03b8919931031e8f68bb9
+Nonce.14 = 1c217188f9c7980b8b03b41b
+Output.14 = 58884a4316fe8104459bb339a4bac08d95461ad8e58f333eae5ceeecbf2d375e8fbb82eb1d29890ee0c56037bbbac8cd8e202d7ef05ed7126a15064699b9dfd4523782aabc6eaf21f1727d02c1311f5812c4b4294827a75f1cd6e6dcc73ba45ea8fc5f2647dff725f5fd9bc64d7b21ec
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 430139af14830cebc8535fabe057ef9ec0a3b7cb47106c79
+Nonce.0 = c6f2576782dff27296a2a296
+AdditionalInputA.0 = b319a1e8553eedeb9b0d5d80f849347b9c7284891bed80c0
+AdditionalInputB.0 = 5228537d742c8258ba5ce48ad6e64abd5a1a14dd112acb90
+Output.0 = 56aab8ad28bed8464370f88758392a62b38f855251a84c2da53de74cb9f8e10587dcd06f947ea43e7c6b74245a09b36e6fcab5ddf128f86725b761537dee9fd5c3275ecc82a0fd9560f241a3c090d9ce51fdea471d2b25eaf721cc28571c727e6f113deab9f8dc07a947597a99ca5810
+Entropy.1 = 49382c010e9a8860c6c69fff10769772bc477eec81a93e18
+Nonce.1 = 8ff285a0a9f2e09e98a5adba
+AdditionalInputA.1 = 746b3ef3eb4e349d29edf3b7760b7c9c21b9d866603e646d
+AdditionalInputB.1 = 9b101e1c311bcab2846bdf3b210a8f1dd1d9fe6d5f8a0533
+Output.1 = 933e7f90201ac2f3ebdae180cf263cfaf3f60fcdd444be2b72c802c70661abcb2e11a5e7ff7eaf148d5431ed9c653ebe7b74f1dec611b1fa13b0dc07fc7922f082e2671e72bafd7720c9f12897fcd97b238ccd3e172206c444f0846e1205e103752b986bad3e0f203a28b90842db151c
+Entropy.2 = fa92d942dadb58fa5782c5c7dc7eac7fae284374a34499ac
+Nonce.2 = 8961a2dbf2bc76f2051e8e68
+AdditionalInputA.2 = 853a4a89574b7495259bdcdb0b2fe2e675549ba9a4dcce89
+AdditionalInputB.2 = 15a7a2fe401781ee9690f54931b7fbf0fbe4219dd0a44eaf
+Output.2 = b81dfc35331a50fcf057c003f9fef898018497d76a45b2b0526f8c95c84654aac9c3d5fe54ab04cf9395f411ddc329605dda3b3c1218861124862ec2936d4e66b4d2695aae77d1e3d9d2e47fe3b8d69869755f5f71890d0b2d4bdec23b280af78664ef764951e2309ba52a408678933a
+Entropy.3 = 880306ff24a048b5c3b6b3d55718f17095de78a63fb676c1
+Nonce.3 = a9202a0873a99eee6f89bc49
+AdditionalInputA.3 = c3221d29928aaaa39e7b1ad9d0843c8b8d4ece6a8c34beeb
+AdditionalInputB.3 = c724b25df7eb92b160e119060fc4fd2fc95f603c0e395413
+Output.3 = d7150810c935509a5264731f9c5f573ae471ad9b9cebf758dc1cf4b3cf46a3a456345bf7e7a3a6ab190ecc8c9f52739217a0954e3e903b5c940bc874dbdaed2d71d635faf57a265a26c79fd345de3e941d5edbfc0aa0f60a942e78870eb2168d489c9453da3b297866af7384a6f102e9
+Entropy.4 = f8d93d2bab63073e9896a6fd0e2954614a62f8afdcd54577
+Nonce.4 = 00dd57b62fd0b4668f64313e
+AdditionalInputA.4 = ec775671f95aa03f2ae104b9bcfd2f2a5428c05d6d4e48ab
+AdditionalInputB.4 = 2bd5c7e40a9a6e0c5c5b56b1da1f49aaf629278d5983fb4c
+Output.4 = 48b6447769f6303dd3da7574e3286d9812a862a971b67667661727445d66b67741c185ba78e3af2a628e0ab56715d2416c0bad1f7410532146a3cddf413fc3de300dc2907844a70084d6c5b826e3fe1558e386571625d52208f089a7504d38525f71dffdebf6e170f88dc2ab454f8fa9
+Entropy.5 = c5345b4937d9f864b2eaa4224889d5eca16949aa17de73b0
+Nonce.5 = 61021a8feee8ca0b43830f70
+AdditionalInputA.5 = 2b44e417cc1414189ebf39a43acb03e17985ac4708019f8e
+AdditionalInputB.5 = 055d7a8fc1be9dde91593d35b4cd879b8e10c9a5c384cca5
+Output.5 = 1432351d0101bed2d4f9ac25d5177e7c68a9a4cbebfdb18e6737e5088fabe22527f1588d6b912fd8eccc0036180c024d9c41da28d19f1629cd51ba1a7eb17831b0b044117c42406b3ba1200edf09be8a6d2f60170ec910cd59103daf711527457b8cc1137e6f42b5805d5361303a0594
+Entropy.6 = 587d0620ac0b9567030f746673bccdaa3bb5cdac5daa8921
+Nonce.6 = 7e7f089b27b994b4e719d411
+AdditionalInputA.6 = ad7a7efcba76a864320b2e90b4092add56973cff3ec79119
+AdditionalInputB.6 = b1aef916929de5478592cecb1c7667b48c3e96ab444bc362
+Output.6 = d44045ae17277e2bb0bff4d9eeb5986412ce0149b2229f112a89954377296fd51763b495e39fc079a7f2793f6d17a02b91d5a3b77c9f4f8e785d4d1cb9adc92632ef7118ca0e216c3fe6dc6570a897475db079227129589a5898a3ecc2f2a1ef2174d10a8d0d651d00d25ff6c276a41a
+Entropy.7 = 022185265b17db2b976e91f41a0b3a951a68c4f92c36dc49
+Nonce.7 = dae4e594c80772163450b21a
+AdditionalInputA.7 = 78ae0e48a3297aebd280ea65666bb3461c6fb9e54a7e3a1f
+AdditionalInputB.7 = cdf6968e1a567f8dfa520f9fe25159d1a725d9fb4f1722a7
+Output.7 = 4349225a5de8113ffe22d481627d8c78b8b68def1a5659ddb1db206eecf016cd3a4cf8c38e76ee5864136b6b97f2d033e5564b828353eb09ce5db37e088f4ec09c909e61723c9b91f903892b744a4c40d6ce61c9749b06ed747adeb64157b3b0185ed7b5954e8fb98e1fb52aae333c55
+Entropy.8 = ac55e154b3311a2c7be4a0c408cbba78f3a48630835fa7be
+Nonce.8 = 34c6e762464e2384201a6ea8
+AdditionalInputA.8 = 6ad9b936c9ab33055b64830e724bb0d16d290fc13e01c425
+AdditionalInputB.8 = b7a31d8e7dbe17c18d050cbfa75a6073ff035cc627bf6da9
+Output.8 = 286831705b2925e20eafde0b6874ddd45e07d018a60ef1334d23517404f160bd1964615aa74d62932da0f0931ab1a69aecc424411f4e6e8a97dca1ae9d6a2fff7afa581d60343df4017cda7252ae84dcadb2d00b394706b37bae65f1e2d84295060a9ddcf36a501fa49abf42955b9e11
+Entropy.9 = d776dc58e33ea42ce4185ca05e0d90a14cafcf2799742a27
+Nonce.9 = bbb8c671158d7ed82b5166d3
+AdditionalInputA.9 = 5b847d0672e9e95aa343afebedf54f0ee6e33cfad7930284
+AdditionalInputB.9 = 1724f6a622b9f0d7aac5b6e19b98e2d8090099451d688173
+Output.9 = 14a47165883051d29948f128eb1cf77299e8f058b24000c405f17f24465c896e6b61bb36e7acc10670f593902469b44b7f40b2eb0d347b5d48fec25d2e0cb2678ae8bbf00a2390a0ce3aff785cc7fb13857e501860c35904183a491a47542bcc39183b884d52c21fe13f0c25ee873fe6
+Entropy.10 = 3cc646a8d0ccde65e89555cd2c48b7f2e5919b2f41a8235e
+Nonce.10 = 57485fb5a8f3a0c09fc8e7d6
+AdditionalInputA.10 = feb5fc30cea5a5db9c25706bfd545d0a75df3478ab19652b
+AdditionalInputB.10 = f59b59f2a7ffb0d783c4ab7015c9abf80f48b079857b7544
+Output.10 = d9b7a10463f0902d2dd9a99af80001b391fc921a089f3839704b55c4e4f86e0bbadbb54269d97df19976ef5b7dcb50637318402ab292ceae5138923128cb75f0f865e69d41a6ecab75a1150b3c2659e4abf1e4875df507f18a262842d664ec7f8d71aa04f791c4c31b3f3c6eae209bf3
+Entropy.11 = f9214a2de98cbd59b244ca46c0c511ef616ffee2c3f41261
+Nonce.11 = 57c83bc36fb105bb19b7bafc
+AdditionalInputA.11 = a01076c3a475016ae8e46513623e537b057813764551cef8
+AdditionalInputB.11 = 3e7b09e576f932933e9b14045d11f4b88c39921e12f1bbc9
+Output.11 = 252e68c1bff523d188258ae1d9d5f44d280f589421f1652b5b888c62c6704dbec0759c7f2f071f1cd7cf083fd2b9dd0e8cfe6fd9556d6f620fd8466f3e1ed6c31ef6466c8e99684c00b02ac6997a6cc108c470f5a0c6fc7d70433e1c39b6730e2b5b13422abe2e3160a57a70e0e8a344
+Entropy.12 = ee0e3d3cacb18ec69645fa3279985c716488ee1d1fec9bd4
+Nonce.12 = a5f85ab349962935fe4c2608
+AdditionalInputA.12 = a18f6f60cb7cef4278e1e9d835728e2ade674ebc9e6e5bc5
+AdditionalInputB.12 = 22295318f4800fcd6d163d56a7171be86e57b3ef1680f36a
+Output.12 = fbd04567c37789c3301d91a48dca6a8fce4d6b829b2600f5fbff63e3477667aa1e098482983de8454b3d5f63ca9361f9554ade7046fac240b3c1528e6a1923f5e248e597f41766d79f30a69f05f98ba503c4439b5b024590917dcb8dd0fee81d3dde60a9622800810f9d2465d2190e8c
+Entropy.13 = 765df0f66a47d18d50d0bf3237a146402647e19860a16d44
+Nonce.13 = 50ecd13f3df706b5367d0a17
+AdditionalInputA.13 = 18cfeec15b0b18df9838463326f881fd800a2d0bea797640
+AdditionalInputB.13 = 103d383871d01d7655280890bf365fd02bd9995f09884e33
+Output.13 = 5230d26fd9d2cc4fb4c7a821c8793a344758cfcfd7a8047746f534d3785a777de056b23dfddc7a5e1b2d75741eb98a5f9ad4b9d9a3a5fe975d9362770a7782603dd93ef5c422a02646ee7416ea9d205394ec01c94ed3cd4b185da1dcd09733fdeb18f28049eb12ce8e5fe9b957e9690a
+Entropy.14 = d08a80d2900213d521d677c7ac09ea9f9bb0eb83af28a278
+Nonce.14 = 1e57f0956160918bf50af159
+AdditionalInputA.14 = e73890b772747a356ee1527501410eb5cddef015a8d6fbd7
+AdditionalInputB.14 = 9145caf79d0b85bb7874c2dc82d52bcca68225a18de258cb
+Output.14 = 4ce4c45336ed4bdf4004f326a049c195c26ff11aadde90d7d035ce277a5b158577a7e9971063ee9c0b5063ab1f20c90f619137c2f4713831d18f2237e1a3d522af9a585e5f43f07d911b8b977f6c644784c9c02238b9fcd0f663c8bc1913f783c200b388b4ecf30246c7120adf3db79b
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = d2c3aecd6b8e486cb76eab38e5ebc37b5070f6a790e092b0
+Nonce.0 = 0f64a8baea52bd3afc8b5dcb
+PersonalisationString.0 = 858ef40692b7f7e62f3169fa8a13c98d8f6933e50ebc8c75
+Output.0 = d12a8f8f008459664f44c573591dac13151f862af5577578e3e38289743b8a080b907806cc44f9c47332b1003da2c21486395bfa81ff6187cf8ad8810d35606376e099a1933ab6852209573c8d8a0e4352dea51caf95052e5f6486ea14789e4d2c05c9472f1183686340ce301f4fb6c9
+Entropy.1 = 91bcbadfff067f44a0cb9a1b4f8f438e03c9b0843e27ac3e
+Nonce.1 = c291985430f9c5b07fa1eeeb
+PersonalisationString.1 = c641e0b1ec8f43159bad85cfd577ce65ff567ba7d00f20bc
+Output.1 = 3a511c4bb4f326ac0ce253c4c34051bad1b06fc6b7bb047af3fa49be2c2786390d513aa787de6dc249d3cb6c8559774f477af2cb0046d2e0d75fbff5be4e7d31bf148df55339e1c1c08e96529eea8cb931a17625605c0e4d52c4c8360f33149e5baeac5aacd9b7515ea53035ba15fe31
+Entropy.2 = bae11100f3b038d02df5504ec3586710b453b141d03ea2b3
+Nonce.2 = 24f397b2eaa88a79b4c3f5e9
+PersonalisationString.2 = 1f83c3423b5e0cf93f47c5c9f6cbd572868c3eee4598a631
+Output.2 = bdf0c385401bff132bfc64bcf6f61bb337450f5e3e7c74b062c2ddaa657e5b29ff1bc65a9052b1cf9d620d999dc9031ced8b301f09dcaa0a830ff5f93f837dd118126e89f7c1f589f65de29bae3eea425f4e7409b79885f7724d21ceb52677e4c823e37632a03b9ae46fba675ce4a02a
+Entropy.3 = c2db152b8262365b4bf4aa660b3e070f12e6a14661224adb
+Nonce.3 = a5b7010cf753eff0d8a2c1cc
+PersonalisationString.3 = 723f791c5149d19889df6a7fd26e6f3515e929c573f4ee9d
+Output.3 = 4f83a33fe344b532956bc1b8434b013245e125493748f6e607c5169fc05e2474c703f688e896cb518d2c97d732de8f9d71b1d21e83483875f81069ca46d276e0f205079006d8589b70792abf143e141cc9b806c5209f4b531c6638393d61194e5d0525aac52372aefba937dfb4cf6b8f
+Entropy.4 = 7c4c298c6f162ef881e9efaf353c1919d2ff61c663e799ef
+Nonce.4 = a8de0d8f94afa79c44743eb3
+PersonalisationString.4 = c9950f64970dffdbe517d6223402230c46cd2f1e56a3dc7d
+Output.4 = 190f43d2b90ef83a1aeb14d400e6ccf549ef524bb4e3497a7b3e3cd013091049da732ce906f038cf8b44ca9a2c4ec932af1713e225a5a0d4e0263a04258cf205e94826cc855bda050e45ca63d0f77011b0f8b8f4d3a6ed13b3192f1c1bf77a0b640c038821f11d41b4f88b91d068ee1f
+Entropy.5 = 946d612a20f4faaf16e3426e903da5a6aac3c3f5d2929684
+Nonce.5 = 87a348f5273c351adcee6d84
+PersonalisationString.5 = 473125a5f41e02787ac3aed779d82879767bc0b99e9d229e
+Output.5 = 269a92f3f76485d79ac532157b1db86857e47d06d31a9baed10f77ac14535ec3755f0d62d5ac7a319afed2c97e80f763d1a34d9081c930a51e0ecca69de5993603c8fecf48d2724daf0beee1a2121b46a722184201a1e1d458f546ac2ad7efac9f6b1dc04b86d6fd3f338b73e51c0dac
+Entropy.6 = a2195db288fcf466dcfdd2dfa28eb5f179523432c44a8d9e
+Nonce.6 = 9c646dda740c309373503d49
+PersonalisationString.6 = b653612c7c4c76f2a4280ba9b7bcd7a9ca4b457734429e95
+Output.6 = 0c0304e64f89c28a21312d33e41852d66dd0fa0b3182d72a7700218f733f9800919c5c797f0954b06225e98b1141b3195c65ed24b2a6803d8fb61ffe122101844b452ba5393abb4761c958a048a62632648a5fbd814e42b1085fcb90b73671066ea0469b50b8ccb26ab8ef248b6e7f9d
+Entropy.7 = 09f28af22f2c439fff5c6af171b86d9201c7dce8b2405570
+Nonce.7 = 27c07db1c3e3678af7382b3d
+PersonalisationString.7 = 6df87edc7dfdf3083d217487b89aa47447ca9affbe5e5592
+Output.7 = 002be4fe83c41eb3049a9f1557047862e041bd60cd35b294c7482de1c91461dd533fe4e214f2df61010785d468f73e1f869197a4d88a630ef6d2a5d3c0b50b4b7fec387010f6343676f6a04bc6e508d8433fd3fc4312584c8b7199866cac5ba3e7284f5bb7da65d7cc88e8d3d49b82a7
+Entropy.8 = d8a0bc2b9ce7d23d94d6ee904a0dff1473b11316f851cd16
+Nonce.8 = ff15280c224aa6aae3066f65
+PersonalisationString.8 = 1e3022cab1cbe04de0ab9c8ad2998db3553b8b608c3d3c1a
+Output.8 = 20d424dc6924a19008a710de4665193bf83faebd4f239731a3bab01fd4b990c9770ca8d361cca9af6125fef5f5043717b3647e74a44258365cd729b958b17ea92ff7cb5f4c87c131dc6bdb67dbd85bb7c663738e1ea9b4b94f169488b1f4fc1bbaedcd259909b85ce5c7d5531bc8c65b
+Entropy.9 = bdba37524b555c142daa35562079fcbf08166f09a439f69e
+Nonce.9 = 3aa829e7919f1c9eb09a63e1
+PersonalisationString.9 = f3649eb1152ced76f287fb5415dab4930fd29e84e05b1186
+Output.9 = 3bad1871d40135e270f1378381e09301b3411e5a4a8d3347724e5189c1e92ab74414541ab8e3ac140133534611200332a05020163b77f757a4ffdeff7e3b85a50eeeb42689b3476bf63ec6b904a4c2a60be64e5f934e0de23f86261e2a5b8fd2c4d2657711fdf3c4fb59051a6d8e639a
+Entropy.10 = 0d889f0d95587ded8068472717b617c8ceb69298db344b6f
+Nonce.10 = fa8bffc02a360841b4d3fc46
+PersonalisationString.10 = 19d290761d2856e9c1e1dd2b35679d0cc1a0757c1a21408d
+Output.10 = d655db972f521ccc3055c4887093f7321fc21cd0f035020f4c15be34fbc64ab68a2bde5294f6e5e3f64b6f38e1b49e05d7c0c4972e8c9a6331ce1c6db742d6be2447306f47ffd2ae1df9389a150f0961be5077fc0362995b6fe0ba36693b6a41cc79c25ea0f75bb45a8ef54160e0f47a
+Entropy.11 = 5405f8b990b109536745533c43bd0126be9dfe88c17d50b2
+Nonce.11 = 29f019f96913ff7ea46ccef3
+PersonalisationString.11 = 991e58db922e1cd06211a35b393fef2ff78f114e70e33cec
+Output.11 = b8688fbb263c38db01dac9d67051fce737fb6acb6ccadd44e56d40a2d1d20e84b895021ef44c45c04175bc8f11ab3620d685c65b24bafcd1b064929c87b465266b99b6c038c912b4aedb237f2a7eadeeb096fa2399156bc2da6d4375683753f81fe18fc8ac0fc2472a20ed6f243a6a04
+Entropy.12 = 388955e39a1d0c84effd224f8637ddeb2dc6250fd2aa3237
+Nonce.12 = 43df01675b45d6af47f02901
+PersonalisationString.12 = 536d92cfd3cc5ba79ad4717d04a694bcc4ed6d911ac715c7
+Output.12 = aee2949fc76d80fc2faf4d8afee1d3be3a131d6c106601e7f43b22a28983320a8ee0880f72efae6c172bdf208d06231a2d17a497207bb922210e850d2d1a03037f5a71c058fb170d91eb96dd9f31ed5970382c7b7929f5a8abe495ae57562683faf889fcfec8074c574224de29e7d5f2
+Entropy.13 = dbc97c6aab6ae3674b4f962adc755265dfb525364477b160
+Nonce.13 = e7cfab7d59f5dff3d69d04be
+PersonalisationString.13 = 102ce2c09246c041187d63a17fc7bf25463903b27b5af110
+Output.13 = c58d25782af2737c8ff81b9b98d63e1f7ce58afdee6ec032450669dd1ed9f0878fd31471f937a6af7fb81c1a81fce4bd8b4523c369798b1cd8b6477d5bedfbcfbf7fc35cfa2db9ba0e22837aa8f71bca9f5c41613d839175739c1d1384fb615a0364ae5a6ef8bed781944e0dfca6a6e9
+Entropy.14 = 3a32dc87d05cf806884f2ee71e881d8d2bdb4f3f07784ae3
+Nonce.14 = 2b884a75ff571f92ba1eb965
+PersonalisationString.14 = 273f3885354c0a8296b0862e19157fbad69578ec121cecbb
+Output.14 = b60362ddfbb4fc41f4f5ef353fc0fd8f31e139876a3af0e69f9049aca46a5989ee3a1ebb6cf14f525c3d8a944f4e88e030e020ef6551289c93f5c6ca2f6bc495cdf49ac91bb86e4766ccbace5f7aba008390d2b6dfd416d63ebfe07f5d583b8f9916ebb54620953d0b73c136de06f520
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 0241d63cf22045db2d6aa18bad9bec76d43fc55dbe8e6c22
+Nonce.0 = 4081b2431f5ce123946feaf6
+PersonalisationString.0 = 2c3a641b37bae6a3260ed0510402ca6931455cb90aace7f7
+AdditionalInputA.0 = 84644c1ae70a6478d6afbbbad5d88ab111c1f22b2312b6db
+AdditionalInputB.0 = 725998f3eb67c7b9bdafddedcce3706deee41a2acedc1904
+Output.0 = c7075fef6eb1b4d561859c4480a13414c17a5bd22d83b83fd500d0ca287dcf7d7aef8145deb9d9f897ae0bda9c8b1a3af3953dfae963c31c6d2a6bb9f11b27e484a35a4e1cdc3f1f5085374bd3165257b8be5cbbf3410516ce4e50a5a06c57deb88e2a76e55d964f0c985e6961e6eb65
+Entropy.1 = da578abf4773283d09843bf757c6876dfc8bad170b6a45b9
+Nonce.1 = c265ec44bd847004853ccdf2
+PersonalisationString.1 = 4e5e5f01789833a9612f3da02482d738e7fa1231f1705f86
+AdditionalInputA.1 = 19d214d3f9b0088d67b0c0dbbb775c3e59277fe70fad4b1d
+AdditionalInputB.1 = e0bfd2e0d0d2f16c8989c4a0715f65e9f9bc8ebf63816a4f
+Output.1 = 6421fb3e06eb575d32edb1e86a1039fd57e82044f84578ef68da31f69aeb4f3c86051dc3a48b46962692846d71ad980069143381d21512e1dc8c41b8a7eedf0118c2761608f85efae95586a2cb2ec04a14c64d2816015c0bf014a02ccec86a5180bba4b945d29805e109bd95ebcc4037
+Entropy.2 = e1a37319a3dca29441f7f26bb6822cafcb5a09b7115b6ed0
+Nonce.2 = a2f066886fbb964b059d2b91
+PersonalisationString.2 = 2d310b2bf573f6b09d3c8b18bdb3237b43b4e28d82a14e87
+AdditionalInputA.2 = 5abc4eb0a77210760d8a5c3075f0327a6d38ed5f5d7e3d52
+AdditionalInputB.2 = 4bc482a3da0384743acce6f18b61ca3b689979649c33ce2a
+Output.2 = b1f3cd09568b6cfbff0849ebdd2ec96c569a7db2356cc7697f610b112f4e518c12dec6f8bcc4156fa3e40bcbf7969212b2cf287ab283fdfeed7ae39c1b433b26990bb4436329092ff3613289dae01390ff116c11db84ec85e92c5b2c9acd14f34d50de3a73a6ed66ad919f1124b81296
+Entropy.3 = 7a4f581af92c248f398f43f044af0bfb41de6e203d54b7ac
+Nonce.3 = 6637145979fed702de86cea7
+PersonalisationString.3 = 2888dd51726850fb20e5b8c75d99ed3f9e92068dce839119
+AdditionalInputA.3 = 3c4150870b101e882fb6602e053e08d099e6de9299245473
+AdditionalInputB.3 = ced202e9d680493dfc3650976467e9822c43e37981c28f3a
+Output.3 = e5eec038e2acab496ed13df71e15146d4c24f99d6fefe760585fcec5454b4d05898c60fbc0acf461ed792bea4c1fe38ec8a021d571f94321c854e1330481af0a36ce6cb4b1798bd9ebc835e8da72104443eb469d58c91508412112e3987b1bb06fa1c1aa205a68c302712877d5293780
+Entropy.4 = 2db0d2ae18cc07aa8ee46b91659383bf54869b74d400fcb9
+Nonce.4 = 8d116faabaa71362e30dd157
+PersonalisationString.4 = b2e94d8feff21126b4a03d08972ae0ecd22d67d9540fa3e5
+AdditionalInputA.4 = f6c5ac82537cdf7db56d06fbe05956596f757b8615bd0e33
+AdditionalInputB.4 = cf62d8e970fab9100a625696aa5607928d578a3676378df2
+Output.4 = 9b152ee43ca64dca2333026f6f3b6ce5154560251f2bc6adb4fb607d70c342bc1865cf0931869c2cf3da644d8776e8a23c2b45695baeeaac289a7c1e60c07cc49cf6e13935705411edaca4a8d62ad2f70f3a2e44523db22c31725a5d33ad9d49a134b1e273f62dc25c1ea78b42cecd66
+Entropy.5 = 7229e975b28980c469a0ff2c3ef3e451d7e953ed02902978
+Nonce.5 = aae67b87c06fb82404d43d2a
+PersonalisationString.5 = b10a561c1bab3579c73d0d9addc09524b09adf59e2ae5513
+AdditionalInputA.5 = 44aad47c5c47bd42d49e1e4caa71f37e65e132028ce9aa0a
+AdditionalInputB.5 = b5319d958dc4fcd35d486b66b5404772298d3977c43836f8
+Output.5 = c0f9d2147a4e1fe67c2dcc539cae68b71b7506443794b187b354c5b79088b2a7668fa283745fa72c678baffc4a85a5df25f36b90fd51131270e1e060a980b77e73eae8ba0ab3906ad8b8f68802a4c0f0a224c61c7d25686c008971b02ac64d79b712255d9ae2e101bacda80dfbb86368
+Entropy.6 = 3cc5a6f7cd819d1ec704549504faf7193436bec660c5c69f
+Nonce.6 = 46aa461ef2f388d96c2eea12
+PersonalisationString.6 = bfd06b09238375936906c0d77641d14e1314ccecfe9f6250
+AdditionalInputA.6 = b6a6d541100a8c75ba1a32c7ae4fcdbae35b93e0a8cfb338
+AdditionalInputB.6 = 5312857c11926becbb30a79d65a561031b4af9e82f5899b7
+Output.6 = 00abb1109e8a3a4c63f4d84d10d458461c8d84a503bf310854733bc75d8f88c002fad10375c9262760602088e74d481a63bf0b7d8cb30775f5feba5184f24f1d4dbfb26a9808955cf9fc076ab8780d7daf5ce8f2276ae5fb0b198ad0e138edeeac9152fa17b88530db1547777d4d7a40
+Entropy.7 = 2aa779757c7bee97711302922618f38d472566ac1809aec4
+Nonce.7 = fa7158354e9eb586fd883a70
+PersonalisationString.7 = 978aed038578af79355d2fa2e01860f586c49aa8feec0e04
+AdditionalInputA.7 = 832ff8d776a44d4f96d050d1f43e829592176aa9efc47927
+AdditionalInputB.7 = 145bdf6bfdbea3ff4f11a423f5db62f1c9bc492e6ca86b94
+Output.7 = 23d87eb9943a92ecf15b7aa77c9858e410319b096bf408adaebe9f044deed5beb32488b1eb6f7f46ea16b2bb93a018cc945c785b279e7eab82077e51db2100df44974c5338f06c8ef9992b324707c2f9efbf5e738966e62222fa2f71b5dcf9b375914145f7066c4429ade18ee648f987
+Entropy.8 = be05af7bef569ccd23529216809dabc58a4890b05fbe5ed6
+Nonce.8 = 8f00a651b8887b9dd2f1233f
+PersonalisationString.8 = 67357bb357785a8d53da2af35ccf61dc4820608fc3adaf9a
+AdditionalInputA.8 = 5ce79faf02293c87add7c63de609528082d74691e4eea8d0
+AdditionalInputB.8 = 4975e65fabd309a6cbb80170bc05ab5ba313ff13775bedd4
+Output.8 = 6fb057c696b4c8a47e1de3f345148c0714442ffdbfdc6b328ee72c2e82f0da2a22a872566b57c03b1f0cb41b70e38f0d4abef72bd77fa04de8635a459ad5420ed0f1dea6fccc7571427dec89624f6e5f12705c929a02610236dea50ff5bf179a299cec73a41b5ae965d32c8ca9c055c5
+Entropy.9 = d69ea00a8560b148a74fa063aee732866093d7876b709ab0
+Nonce.9 = 42dd2d9b70c0e17555f9793e
+PersonalisationString.9 = e04c16d8d6f086a2cc528222574c69488088d76a9a12df75
+AdditionalInputA.9 = fe68d478fa1ff0c0a8853b517796e952e1a5830a76b56c2e
+AdditionalInputB.9 = 5f0912ba2d7f59b98a94bb95eb16f9982fc88fc3dad5debf
+Output.9 = 929ced08c42433146df7e957aa6f67079f1c7f330d828987f743169c0f587111c2d7217109a4b2d39b30598b7ff63cd82aa6c48df775dfc75f4d24ffb23b6ed81620a9ee41c7cba0c044e6042ad5fefef68e0ff14b8699a37afe1ae19027a14922225670a76d9e4075ee48feadd44ea8
+Entropy.10 = cd8667a51aa1fac667c4054df4d14fa897f4cb33fa10f6f4
+Nonce.10 = e9b2dffa974a3fb7636d3610
+PersonalisationString.10 = 89335a54141b74a4bfcdb1f51d3a37dfdc0fa0630d8a8a33
+AdditionalInputA.10 = f6ed975836ae8301b9dbb0de788d3b035dde764ed1f8bb5f
+AdditionalInputB.10 = b0cf5fa3043cf9d059eb90c4e575a8f188cfa5c02715b643
+Output.10 = 1520ce4c27aa4717bdc136be975faed28222e60af8de42c3f3694f6af93beceb7356140ac4bb604b8a9d8768233c13f9e7e03240196bc743f86842fe093b195a847e2d55a8b760bcb2aa6747663545cb0f42a49485372f3d2fcd9eb0e5fc0de4c05153963b8753fe4bf4cf7487b7dd87
+Entropy.11 = 479d6438ac864ce7239302ee9acd3bd15e392eb171a2a78d
+Nonce.11 = 5667a25cdb29f88061ee2552
+PersonalisationString.11 = ec0b576e6c9afd8664c783ef7b187b7eb4f034f6a219a1ca
+AdditionalInputA.11 = 3f4055aa6bddf9ef08c215328ea8ddef66db064f2a2c7017
+AdditionalInputB.11 = d102ddd02b14b95608c4c814975fae3b6fca57fb66da542d
+Output.11 = 3b945012f9b35fef79b52b9da4d9ef3b2b25127ce2d8bfcfb64bc07d729f99724502c254c6e4b02c0c0b7c8f8aeee9b2dfe8a651d1c2a098cda4164ebbf68933f0250d52c8b7fb9619eafa039ac7d2a51b0284ababa7c477d4e0aabff365b59c7b80ce4ebc081d41ac5c839709a5823e
+Entropy.12 = e0ba67211aca6d78810010642e73f4e30d67bf25d48074fb
+Nonce.12 = 9f07e64c1787938ea66c1735
+PersonalisationString.12 = e97c45bf9edfaa6ad88016fa376cc2f43f5fc44b0244617a
+AdditionalInputA.12 = 23e2148fa6d8ee5ef4d876788e37cbe7ea19cd83c1814ca9
+AdditionalInputB.12 = b34f2653541958b6a2877d448a04dc83be817389e4a9b68f
+Output.12 = 336eb3c3b4fccc3c2c8a455348d6faa393599f9190467731fd3e0e1338716ed9a45a150675964f40107869df5de8774dd0c52a094354c06e9f06b483828f3e7c1db51f4af8be54d969ed832387622283ead5520e404167d594dbb4ba143fee7ec166535df49bd43a1b9696722b97ad48
+Entropy.13 = b7a302a9291b09a0bea88e2bf215d38028dc9ceec4f044b9
+Nonce.13 = 18669a5360a5e238a30ef20e
+PersonalisationString.13 = aa10ec4ca4feca7fb443a3316db113b80d8e8d629e7952ab
+AdditionalInputA.13 = 576321395c959c1f417480659dbf4f09c4360e2cfbb5c0e4
+AdditionalInputB.13 = a6cea8017225b5e7254712b41f5cf1ec7f14f87da34fe6b7
+Output.13 = 43d9b18c335e549fbeb6664e2a2832303792143f166d38a9070e3f0b1b46f01ac88f8f06ff64d0d9c110632dfb81151b4a3a4816d40b97d32ba2c07647dbc7e5f07fb2134be939b8eb7fae0026afedfcb1d68213abbe6dc879b2b69d705369cc19f59895e4217a680d5b8c16dae3a856
+Entropy.14 = 9ef357d601bcf7f14df95ef542fcf28780754698aae5918b
+Nonce.14 = 146b75a29814266bb20f6825
+PersonalisationString.14 = 4c0391c33892d336bc615296033cc62e522bfdd09d8a94f3
+AdditionalInputA.14 = 69720682d68b7043c331b889ce6d3d83aa3d33846e9ddc86
+AdditionalInputB.14 = 350c63e7b01ecff4aa171f157c71f89a55637c2cac0253e8
+Output.14 = 63fc9293971bc8dc151bcc2df20e4b5c7604138e4df49fed323c9f1cdeade3d5d1c8bc89e507e5da1f38c1f76d968ee45ba53a3da35e693e00afd683817ee7da5cd2b0a657ac6cf95913c859c6b4a15449fe9045a3af03cc198cf10b2deb67c5c3e9cf9a40b8251de19c6cf3114bfe22
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 71fc858e73ed787eadaa38733cb5ffeb072eea80b09c9e7e
+Nonce.0 = f848717a0473168fc4371814
+Output.0 = a52ce6f1b31d66992e2dd6c5e57894f764a088564f6891b24d5ac7c8521b735e6728cb95b7c23f1ed03ebe39644fd3006f2e2da22311b0923f024eed0af5e359a27d6b59044b14f394f19a68d221971c6e9143753a85fcef5f245ce9acc971972f3c67336c5ea6c34a61fefdd9962ea7
+Entropy.1 = 587028c1e8f76ce745e9689ccc118674be36c7204d41d21f
+Nonce.1 = e925267d28e1dd4e6fe4514d
+Output.1 = 296eab44fab0bf62c413e5296fcf1f07d454d7df9e925f42b05c6b648012262fb04eb8920538515ce6bcf2504982c0fcb63db4bcf63ca8eadd58bedf89b59abfe6242ed7cfea2c3fb4d12b4d84be4b5849e71a8269cd03facf61bc27aa2d4cd99bb91265aa54dd03d134bfb9cf832a7c
+Entropy.2 = bb03984a46eee7f2a41530b4a96af56aca2e04dbf1dcba4b
+Nonce.2 = ecc5aeb62fb194c02c9677a7
+Output.2 = 83000ef8474b2b642bdde0ab1063d229e74931ec2d053041ef1fb84cd3ecbf07a5c4069455592387d7437ca8fdc7549f763c7a18e5caf76ddcc7e17e0c9dcd4530307a5f3d38ca33d331370b4605a9fd1e1295ec0c5d7bb6c1c70aa1a63b6da8a5fbedef0c572ef18056ddf536a391db
+Entropy.3 = 57dbdea7bb92a12135c8c4001f1efcf7c54cb12d44451dd8
+Nonce.3 = db4eda7e3e6aa1f69c84fe6c
+Output.3 = a232d6906f05acba7cdcb03084ffcdf4e56a7bf7e654d42e07ae7710f6dae9d1f92df02f249ad5f8e7313e93fa14fad64d17f0143c5035e5715606131dd1e1f6dce0128af84eb707ac64601a0de966dd0a64b370206dd00cba6aab2f7e3cad5bc6522030bece4596706fa142e95e1afb
+Entropy.4 = 906af4f88938fc8fbda3319724ec2cc413b5ac17290f3401
+Nonce.4 = b2aeca9df80294d337480dd6
+Output.4 = a2ee18e606e12f92accf27ff587a8655bd2ff6afd2b9d0e53693deaa7086911ae6c5895cc794953323bdc70e383b33571bcfb67d9aca27f2cf63b2243e31f7c5cbe848b22b5f90eaf1f5a5d92eff4304f42d5b3d4799dc24e47b0030adcb468a497f8b688989160d4f5005d9809a5aaf
+Entropy.5 = dd1e5493cf766a4b496452f2116cba41ccc8f57f6cb95a14
+Nonce.5 = bff415595d30532918ad8ba8
+Output.5 = 7babe6d85ac651a036074cc31a14b9b37409544a6ced441b4c473e97c5c91443ad68910762f5faf3ca9fa3a258d7e24a779eec41397d34c106baf31cc709a5b043f0ea90962b388d5746806669c6e93b999a96d23a9c87a8eddab6eee46cd546b868fbf8cb101ebfe7d5fe36b557b4af
+Entropy.6 = 758e40e00995ad2876689112071d646986533b2ab411b3a3
+Nonce.6 = 525ec489a9567c31cd4ce1c6
+Output.6 = 9fa00f4eb8b1cce59bb7949429ad926eeea463014ca69fd7ba1ab2dbe181fb535bfa3a891844dc4075c3638f8503a18144a6697e6b097027e1e06fbf0a652c55fca4abad84f5184da6a5377d37d29d7f8c938fa2fc9d0ae187d46e2b1b2ca64ccc568a6c551cabb490977932427fdc90
+Entropy.7 = 39926ef11aa90d6b9f65c298313f27ce31bf845d721bbda4
+Nonce.7 = 5d6d2d9c6393365b811065ad
+Output.7 = 188a62988ead6121186fe2f44203de6ee5de2f52335bc003587cfdc676b8e86acf84a3538de7c81471e20efcd1cc0e14169b71d5288e4664718ab6c2d04037447e7178a3ce6f28ecf8bcb411e3d3ff6be89ab28291838325872435aad78f3856e25bbf33854fdc7a973c08106d6fbe00
+Entropy.8 = dbc63ed9d56330ac6bd00ed75929ac14c4a59d8a0aee93cb
+Nonce.8 = eaf3f72ddc566e85377d5f98
+Output.8 = 9bf07006aab508c74ddf9dbd56f98f961568a84d7704f08caa32f1ef7c40647166bf77b25f036a0e59d7d5898b461fdff9b343094b8fa5ea697632fb71906cfb36fccce0e62b1afa59832375a09bac40ae79d762b4bc6a912599d93a6d1cbe4a577bc8d0f734dc21b992c7dee5c8516c
+Entropy.9 = 64127714968ddc1027b41e5d6dab51459aa682134b228c5c
+Nonce.9 = bd4dd19ddfbfb63269b657bd
+Output.9 = b90349b768786c8563211362410aaabeb969c0780955b50d7eeab669eaa7c86871ae777121c1fa6ba3dcb9474fafe41ad1e573b86310fc86e09abcaa6ecc89d8b0bef1c57981f4b673fef68473e9a2fa14c3e5cb42d0d37407bc99a661197469648e6706005d347d5e5dd905a6d698ab
+Entropy.10 = c2f31a71e59f642244b2739e4cedc85a94f4027b743d7e98
+Nonce.10 = b73f789e070f663b13f304dd
+Output.10 = dca57d85851119dabf202831440511b3d162760ce0c6f0613ef16ed5c92babcc989b42e7b4ea5f9c374e81f5803e2febeea8b19df3de2041a80f1887c335f93a6710334ed47bea388629447e12c9d58fb1274fbe9476a1448f2bd92f2b7cf11dc8c55949774adeed4796cf40239d6e1b
+Entropy.11 = 84896a00a3e8174deeab5dd358266d58c59586490b6267ca
+Nonce.11 = ee0bf931d1e7572f1f25338a
+Output.11 = 5feb955aa6720e98353eb0e59786857c8bf5a04e63610d975e74aa4304c5dabc9c0d2d2aa93e44b23751c1814d164cfe6e816aa3f6212e42c5316edd2fe85f60640656e5233a54dfb287efea2d78666c9ba7cbbe45147ccce53813dc0ff449292e7f83e069b827a241c07e8bed4289d4
+Entropy.12 = 409025abc3da1f7b1583e66a0d5bd971b2ff583cfbd036c2
+Nonce.12 = d00af7fc331768ffd71fb90e
+Output.12 = 757f23e57616b0bf3fd7be2d2f339c056052b43ef537fc925cff33d7112f1e2e6c244f2a7dc441f9b22249c39ad21b9ad41d3b8789b5a0f1d307a0178ca89afc2dabd08e6809246d48bd251fbf830b67036d94c0bcb395ec03a9f454e2d34e4445b2286e69876b2b2cc822030ecfb52b
+Entropy.13 = f8ffee199676bdf335d2effa3a407dbd79ac61c42c7cf3fc
+Nonce.13 = a75aee976130194789ba4478
+Output.13 = ea9a1cdfe63628be6fed5de00024130c5c4a5047081f8805e23a5ab3cd7f18d2f874a1da2dcb6dfcac7e7c170ec6884a80f50bc9aa792774c7f076868ea0809fb9e843de4ef5a7654777c4ab4b99e234a0bd4b76cba943a4dd70a8d045b9f6913f9ac57eaa105f29e5b8395c60292b29
+Entropy.14 = e03af342db03da30e2b0e5b8ed76c2562194417fbf6be645
+Nonce.14 = 6a9a5188dabd510894073f76
+Output.14 = 7963276f1054db251369a0b91d854fabaa3dd5b2343ef4306cf897bf964fc8b885908c4ada163b929a19c948ac89c8480170eb59b9a8d7d2d30ddfd1248e2c1795c69da81fe72d6361d34754f88eeffca2c31859bc8940d6662abe2622fdfcc28a1764355aaf46a2e00e50606af2b6be
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 65aa6a5872a8e1108802c99f211462fe7adeb1e348a8d6fc
+Nonce.0 = ecc22bd1aa782b3d6d130f4e
+AdditionalInputA.0 = ee53ecd96e15fdf69b5a2edb0a36c24824011611f433a7fa
+AdditionalInputB.0 = f64c72fffd55e3ad838c058f3a466910e561600007411b2d
+Output.0 = 8ac5a2975f2dba1078ffa3e69466187dfbf06efbfa4681ddfa3168610942b9dd08d966dc68e70d7d17b80701d86ee9fea734ad31cb6c210feb6cf69b31e0102f2f6e0e79af2846692839f19e82cffd1de596cc0875e20301f70b11b4ad6a96f58c51d0ef343afed72c4cb2b3a175972e
+Entropy.1 = f586533d6374faa99fcbe9d91cb784452e3830b250a212a8
+Nonce.1 = f956444f10f121cce327f877
+AdditionalInputA.1 = 8458e0de3709c4ddb8cd854c0bc2401b21bf394a1496f60a
+AdditionalInputB.1 = 4fe0d84807b34e14e85c1074250cb4e7e008b6719b5e4606
+Output.1 = efdcd9d452ef1467bab77046a628f719251a3b39c9337f1900cd14619ae39ca813faab5b5821647b13d3c4112ba946956cef41caf212e5693ffcc85af393790e14fa9f7f7a983728d9042f48184bc2b1dcc6571ec6d064925a0d6f1b8d90636e5bc2808e9348f85cd8c17c4c472a4fa9
+Entropy.2 = 58840a220de5982145beaf05e64c61ed8d3972873f143bef
+Nonce.2 = a247036f140d25a48a357b0a
+AdditionalInputA.2 = f8412d60164f333d7bfa233f3de9f65cb0682945bb88c1b7
+AdditionalInputB.2 = 9a959cabd4640f3fa9155b6adbaa190eb14fc1334e6e9a65
+Output.2 = 3d8085751a7dabeea14547ca92715184742a93eaa265df7eed43ce7f8ec9cd727240626755a9f188d92163dcffc543aebab964b31becba3e6d0f93bf7aab1c3dcd145ef2243cdc26aafb15904becaf3eb6954025513caacff75d565df395e09d0cf0da6fe8cff83358ba2eaf4ea4e23d
+Entropy.3 = a085701b2b400dd410643b978a01f102614a1a89b6655027
+Nonce.3 = b66ee045db56a35bb7dbe1d8
+AdditionalInputA.3 = c252a8784fb11d10b0327dfc63af720ea8c0772f930794b2
+AdditionalInputB.3 = d45aea79fb2545fc884fdaf43fcd602b399f12abe0f12b73
+Output.3 = b3e956aa3d60f0d773c38b8ff4057923cc56c03085b5e0257933a0e60c484872543f37ce0d72fcb49aa1db4dfb663eb81698e1125e8747cf4bf092d9f1db342e4923ecc0d2cf4cdb87fd5c3fa6bcd2537c5600dda3473de3f6726b12ccf0d014ccac5c8b4b5144d78b3b06eb711ed5da
+Entropy.4 = fd33c7a17b3ba0f2396ad812d33b67ebc7a9b6eebbd6a35b
+Nonce.4 = 9142ee33906c41749bd93828
+AdditionalInputA.4 = 70a76a263f87afec96e77576c272307058fd46eca409d5f7
+AdditionalInputB.4 = be7501299de2ba69cc6288139710bcae9d9b141730d2534e
+Output.4 = a620c69f20f5a418441b58b1cd46f7184abdaf698a3636d9a8d17342c150dbc6a23211b0abb11403928c29176aed880e4798773ec7d0ec88bf9da04cf72ad155a73c72ad24538f4604de18d03502394455cf71a1a50df13f6f0d269dc78a88a77a843ef01121122583e740b4db3d7a33
+Entropy.5 = f58229a0ba3a66bb237970fb71bedcc286cbbeda4f5d3f01
+Nonce.5 = cd0c9ab20c7ba472ddb4daa0
+AdditionalInputA.5 = 0610b1e755e09c3daed93b2865618a95288842376f4b1b2e
+AdditionalInputB.5 = 80f9038ab8f8c5c5c57e8eea9ee47ea304609412f1c27042
+Output.5 = f881957f68798e50085cf8e6686c3f2ba0e22a1a0e55bae9696b846eded49e9d69052b8100fc79b8ea6e42bb5d5faff0dc42e91b70223a21ee37dc7c78a66b2bf4b735fcbffcc65a6a9112774f34b7cf2cd61f394d9ebd12bd79cfc1f90fad98790458952e3f08443292a51fe23dcc45
+Entropy.6 = 3f67c314b303c394b11199a366bf29f49422dc0d8c2e745c
+Nonce.6 = 0f77c08648c96d2f9ee4e52b
+AdditionalInputA.6 = ed685ea2aa60765766be26fc9684de4e60a1938f5b9767f0
+AdditionalInputB.6 = 84f0341e1783a19ad77f82012a8aa435b424420adad4c9a2
+Output.6 = 5c67d72cdd9f696b4953c090cae72a7699d8ab3aa7ea5e5f940683521838415b853eaa23f4451a7762711a24b92fa67b7eaecc2df32b997135f995f51ea3287c3951e10376360b900bdf223763c2c6182ef557ae075ff826df2f0a13c3e10653143c7fbc446d0120f9d4934ea9750180
+Entropy.7 = 4e2f85e0e30d4b77a81fe03f0072a63e14fb56d91d841a31
+Nonce.7 = b4254543c0402772b11f2b33
+AdditionalInputA.7 = 7eb4cfcffb33bc5c3e32db92a8873494e1f4b3ea9f24f315
+AdditionalInputB.7 = 68400bf6c7d1a25ef679bd47a561fe23edf62ed08c456c47
+Output.7 = 4e55d17a5f4ebae007e0c063e0d2f784a7b90c98f4babbe02ca35c136c694e1ed728339f09dc0a037449baa343b76d5ffa9727e1e71923b3fd9f379606e5dcf48142835cba7c0454eec01b75ffdcd54e06d870200616a4199927613eea35d57580d59cb106e72868f16620a9c3a7e846
+Entropy.8 = 8e00284b79522163a48d08458395c037759d8d3cd5d9856d
+Nonce.8 = 6002a78c5b84ba504186c0df
+AdditionalInputA.8 = 77460217b43ac295e28696069b50052fd63330ea0fb3b729
+AdditionalInputB.8 = 16efa694e5238480cf8b396bd3fff50153b36698f34d24f9
+Output.8 = 63b0973c54b74abcd4279007de0542cd7e9cee7b7349ac2ee1fa011858713b8a0f7d0b8f87ce0917f062dc64efc526100e1dec5a9573f91c3c9bc6e9efdc0e89ba2a41fdaaccaba9cf05e8afbc5b9ed968a350e4755dc2051cc90f7a0bfac9f4f780f25bbac226be0f6535913dab31bb
+Entropy.9 = 144dd54c8a1496d4fa8b1bbb1a96dd79b0fb717ffb47e9c1
+Nonce.9 = 810046aae72f65d9064a428f
+AdditionalInputA.9 = 0700d7161587fb706398bf4419a7a8fa25638107dc36f618
+AdditionalInputB.9 = a5a924bdc512ab017844849aa171553150e95bfce83303dd
+Output.9 = f385b334700fcc0e600e15597381e87b384e84daff8fc4a814ced3d783be712524f8476afa5970a4aeaa3f244c56aac3d5a43cde5cabc15b0f8d158e5a270b8f3565f1e40e909044dd64a64202cc566c8e16ee763b6a0b089b66b3110903e24759bba8816b7487254a10e62b5168dbe3
+Entropy.10 = 941ed4526f9c1b0c70204874012547423154979fe611688e
+Nonce.10 = 79b842e98729ea5b57d798d6
+AdditionalInputA.10 = 3a738164f72142ff69c398eed60f5dcef2e1141716bdfa9c
+AdditionalInputB.10 = 6aebb655a33a336e2c2fcc0b98818a0eda0d631ece3cd461
+Output.10 = 62be719e892cdee6536ff7eb77dc2531fa46668da978133dcec91cd869e0f994f6d2dd54ebebb3e848f8223d4517f399d447db2f20f0e3377c28f6a0cd61b1de3a9574ab2c17d3d94f6acdba42bb1c11d3ddf208da0f29fa4c9ca1b14901f8c656e026c8d50203b52a4e4012b43aaf69
+Entropy.11 = d793374feb6e4fa1294d399767807b8e2ffd6be4fb715dab
+Nonce.11 = 4e42459836441bd7913b29aa
+AdditionalInputA.11 = e4aee54ca6aa9b8896b520de8bce08455f30f70ddb84c5b6
+AdditionalInputB.11 = 4a7df785f01ba74cd1941b61631109722e24dee8b63630fc
+Output.11 = e4c5da863bcb51832590d36149a7983ccc729aa221a1edf9c7d189b09ae6826bbf2c1a6083ed6d7a569f5820a2215537432481571d6cea83853bd6fb6fb5449eec5010022962997ddbeb6bb18ccd82f752d5a578ac23141898519de20b55cfab16b7a2468a149ec8bd77b327d4a47cc1
+Entropy.12 = f647a6e9429f55bf8ac8b2341517e86508bef8fc965df362
+Nonce.12 = 06a9eefb20422685246deea1
+AdditionalInputA.12 = cfa6870cf6998256855bffa6fe90bee3920dca2295e7e0f4
+AdditionalInputB.12 = b2f5cef072c18e657f55995471ee8f5ffaea95a91ee21062
+Output.12 = 877bf989e9a560f52f7ea099e472c91a0adb3fb67c4ca3ea042d8355978dee05dda365deb6b8b6bf1608b6a2e8debe8428f452fdaac7cb5c6079e604b907f73090c8da4b844e58a55ee427fbcebca1cb29091389cefb77147fb94d27412fa3349bf66bc6ab9bb70a6b7eb0a6a81fa101
+Entropy.13 = 16f7cae9c2c2e2c1803091d15ebb1a06d1968602a121a152
+Nonce.13 = 2e727ee6652a0a0b3bb1d0c0
+AdditionalInputA.13 = 55a44fd8a9538a4cb2fcaf06a5ea1d8e6999b7d3aa993e8c
+AdditionalInputB.13 = 27fe6ccb8fd9f20e567c6a733ec02d664e76b0e85a1661e7
+Output.13 = f9c5f9421207e5f18066a35deaa492da10861718aa7c4fe42d671e2ef1553b2bf617b990ad8931b6988406744030a00702cfad172daf5afcafd1d9b73c733924ebbdb3415145904485ae89cfcbba740bc181694012da333792ee72c83cd9025a82fc82f1d062a8b8545e33d1e87e0997
+Entropy.14 = 69fa4745f5f7c337984e593bbc765e26ef05ff226e0c875e
+Nonce.14 = d1d28100e997b21d1db76283
+AdditionalInputA.14 = 9b6c491387a2394b94bfa8b077cd43bac49117e94afb9616
+AdditionalInputB.14 = 7c04bea824d8aa7b19facfeb3a676eb51c31d7b92f0ca1ac
+Output.14 = 332b884c8edcb260c535a218001d421e190d8b9c6b856fbc5a4ab45f92149487f8563138312a42487969370440675f5bc9b21a75d2a8386867fdf861c8650e26af47c5efd81d9fc39cbcd44ab0f4cb10325fed6f5b7ce5d8111ff71e5d78c7d1f53410e5ba492b9f68ca55325ea8b318
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 82f80722b82936a3a90f7371f92ed1d8a17521598653b38d
+Nonce.0 = b67742c5943422e7b6e74dd5
+PersonalisationString.0 = 207e1f982da78ae5f0612517efac3a13f024aef04f20509e
+Output.0 = 91de62aab4ba484d0b419e7211a44d2665f4800a166d8621a33452506c3753aae6142b27cef8247a7170ad9a3b777e175b852e3b493fe100c5cec89c819d6dd59b42d7deb411b5d4a9b9538a1dd051e195098ef4b0a23b55351276e2adc88395140514c6a9266ff32de25b911d7e18cc
+Entropy.1 = 4d6d79e80207e6f7bc2f34be3b701b84b0ef3c778629a46f
+Nonce.1 = 9e0e534a3f9a2afe7bf48896
+PersonalisationString.1 = 55abdb0275ba50f84b63a96bff7938e999a4f2087c2c0768
+Output.1 = a404ed0511d6046f84cf8c6e97cfd335ab4d28d0a1880da9a15b523ce5ed3edff6f2371134f55ac29c4f1c730ea0bc6566edcd3c5a848fc85f7b8bef501f055f254af6bd1361b7d0ee0397d60db1135956750669f891d993760bc38715932f36207c9caff81601aecbf68c1da3104adc
+Entropy.2 = 2e71accf7079a2544a44abc2b92441b73da66aac771be4ad
+Nonce.2 = 12f5d93b63e468e3b3307cea
+PersonalisationString.2 = 76d40812c4a48bc75fb234d6eaaa5ab2ba8fff7f04f78ff7
+Output.2 = 0e28a5c44e4e7c979f34af183cbe6bdf95376064db25198f0990d45a4ff50ddefb0f248257bbb3199e9f046081b9f55abf68f3c7703e4de4ec0750c2a7fc934b0ad13ad7412936bb907a33f65cf0b25e06cd6b23486feff09afd1cbea3115d210ef6fcd01e8ac2924c8a658fb40d50b3
+Entropy.3 = 8c199b3019a1dedeb9bf42d55fa6349b378878f33f8c9074
+Nonce.3 = 5251ee36a7b5f8d676a19eb3
+PersonalisationString.3 = cdea66ba0ce12cd4f98c2127c048ae8701aa7641e09f4cf5
+Output.3 = 2ecc11dd488d9e1f7eb4c50f501abb9702abba33e2727dec27f3baa2117bf793da57cb3304102549d5f405fd72af1a9bb557d34cea00dfec681dd4ee4673807af4774616894762ff8e9634246b5dd6147398b7640e86e00993245d9575368c841c94b83a9d8aa8ad87bd7ff20f1a01d5
+Entropy.4 = 03a6b9b143701e2b668accb182d2326319173b4a911856da
+Nonce.4 = b2c5cc00d378472f661e9aeb
+PersonalisationString.4 = d00bcda132b614d8025214bef489fcfeec9a532f16a9873c
+Output.4 = b65c54cc7aceb322190c7228075e3811321168a8063fb0081dfb0c7bb52b4d83f81906f18f90b946de23af0871b9afbfa4cb749d5c7b2818d4a753a57cd270145671071704f6d3aced07864a3a443c11b232390bd8959476243526de19408fd3e96a598d1ed40230f8c8a3aafa48a0ab
+Entropy.5 = 8785e1954572dd3ba178144856f7c3a8f6c2d9ec4c903941
+Nonce.5 = 06c4e1c7eebe745b0c045e95
+PersonalisationString.5 = 7d500869fe79ee995b47701d0027a8439907b7a67c31259c
+Output.5 = 943431f66d874d8cbb1eb93b14fb10506e16f7eaf7cc5c09b60011fe4491796a16ccbcae76a4a31e16c13ea661036246017dd52fe32afc5ab0b688bedea23c02c30d02bdd1d086cd4a5c843b54908f5eeb7a11f1a29c6d31dfa4d004a66ccc8520c3f016077c4904836df207b924cca7
+Entropy.6 = 3d744caadf5e12dac7ee05b2716485ce3d6ffe74be1e61d1
+Nonce.6 = d68ac7fbd4608bdd8d60808f
+PersonalisationString.6 = 6153c6eec875c7336c05ae17caa9aee71e74de74ce6d8760
+Output.6 = ddc959d5cc7b9bf9cc50de20d450b2b91fee5ac90c416218933a90d453bf448e391d0df88021032db82ac82a79ae218aef0d622a370ab69140b79896b27de188aa6563dd7e8ed9dc7ace1b15860e3ae944bcc249a4ba9353a2512a55abad2cea26cb6c3811d835960764d143eb21cacc
+Entropy.7 = 7b2dc2121cc9f905afae63d19c012b37589aa5a1959ac85f
+Nonce.7 = bcdfff8bc3171a2c708437f9
+PersonalisationString.7 = 22bb071709a9dd5a91ad11c8aab5c8d33ec6ad362486330f
+Output.7 = f4a63180ba722f70204c9f65058863a56761fc76c9078fc28f5a5bb945d878c61dfac1af2598ec333113aa4301fe652b13a80f7e39c1cad0f9ea3a555888f0b942517cfc576e2c1d08b64a0f18258a1692d3f24376147847700c15d3690daa4b1fb76290be325ccc1445a0ce1bab5050
+Entropy.8 = 87301c8c4755737f7d4b53402f0aa6dde672f73335e388e6
+Nonce.8 = 8fac88676f79916cb94e7edc
+PersonalisationString.8 = 4822054e5b777ef1c84c22e9a64a902b50c3c792dbc54fbb
+Output.8 = 15fdba37887729e1b41fc9476abb8091ce43d3bb695d50a949a889394d1a8afa81d28b18e748d630d5b685b655a06abd82c23e2e8e82b3de3e7dfdd0b065536917d649fa9b69805be4c4c53c6855ba98a9f4194e7fdc63cf1dcd08b2991dd9d417dfb5e245cc7b1fa4a432a3311e73a0
+Entropy.9 = c3066b5b1740731e553444ebd46109e1eab2f88f4e6ae6bd
+Nonce.9 = 01e9f3ef450b23f624304b41
+PersonalisationString.9 = f395a173b9fe3598d7fe48606682a2147a7fc59c5cb84572
+Output.9 = 9a7aa949fceb393736655a43c27a138d0ea49eb6be7ff4076444bf9d3d36d8cad49506a90c347270cc00cd915087e55a683c3f1e0841561ef3cf923855eed9d61622cf08f906e026eddede5d025b6e7862539136f1e9823cb0bf20d43c023a70130c0d73fd352e9e7e24f7b224038105
+Entropy.10 = e3aba0ed7bf3629d7ca5d39113c152841c19fe057704de63
+Nonce.10 = 9f60ce4f30f99d30459f5811
+PersonalisationString.10 = 8f1bb66a0f1c5138baed9c37158c0e04a6ecf7e5344c3c49
+Output.10 = e1cbba70b4dc058de330f33a7b9ee76656c72b4b102cd2a38b428216e708c7d8a403e9045407de2de7f1db07aad1000e69f6969d21b71b83f7502ed4e638563bb212db5be6daf94e645430dadf0b08d72ea726f6a1bb3eced96c75cb1c9202ade822e386c1f6024a2b5ad02f132971f4
+Entropy.11 = 3e84bc6241f9af681846ec2937fd34c6353833048f548628
+Nonce.11 = bd2e9b42fe60087ba3b00fc2
+PersonalisationString.11 = 76a6f3cf8da4ec437d4c2ac4433c0c5ea9e777702238642e
+Output.11 = bdb5d00d8ae3f94d931886023393aab4ef42967be2c67bd59c9b549f215e086809a6fefa6692f3ca56375acf5798ec7a400938ed34da2cbff1b3284446b42536844242061b4551e005b3e83e63b61494f87148699f149608745bf0a9df5296675e0026a1255365ba8f33adff8894a332
+Entropy.12 = 1cbab75221a9c1cd75af7e6949b43eb3ceb07dc2895379fc
+Nonce.12 = 33764191bfe1e1085c3eb069
+PersonalisationString.12 = 8642a444814f7086d3271a1728ea6a4e6ad54a062fdcad2c
+Output.12 = 7818e2068120a003279975ea5132d2e6b2477bcfe528052203d8f114537959eb45e6f64a71cd9bcc53e99213f1c6ed16d1fc874419cdb46ab32ddaf7219855fc54e8583f1502fcee1b6362ce40a46802e14745982c068b39b881d3aab21629e9fad97241dac2c1a13f07ed9dd3d1dddf
+Entropy.13 = cc38ffbe80111dbda46003b743864f93ef26b297d95b20b4
+Nonce.13 = 5b25836b5ba143123661c6ff
+PersonalisationString.13 = f1126463017cfde28aca230aacf02544f3e5b6815765e6f8
+Output.13 = c036c23671f7f3ebfe9e4c34afce5b892a668572223f86815867f423a9c2cc704b1428036e45913e029d621f9a5f8478dff2a57a87cba21c19fe969898c2cb97e267bb6fbca6cf86da2dd437ae46a54f1d0b094f476715b425b35bbe988b1b28e54e6ffea2d74b85fe3bf1c208ce34fe
+Entropy.14 = 19970d8a70d136a19088c975ab0262e51d2cdc41792d402f
+Nonce.14 = 9dcc6c4317ff492d0d7dec5b
+PersonalisationString.14 = 7d30c5a4aa169c6dce156a8eaf000f9be0f8681e3282dbae
+Output.14 = 550a9ad9e45ba359d463c1e084777bfb2ee25ff791070a87f01adc04cd1a7e9e6ef334e477fb5cadd82381e0add8a39ffc222150f17b8bb0d3b1cd80948c0a5ee09a84ccfff6c9ac33e6831d1a84182edac6bcc25fe357a708f78db9a88daf553914cdf0bc7a9b0527597f73707fec8e
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 71aad2885a565b570c4176bd3d37ddae4b1035e979632f38
+Nonce.0 = 1326c93a95ad7b56f9b46cd3
+PersonalisationString.0 = 3905e4dada3336cc9a91b9c3d5907626a6d890828d451766
+AdditionalInputA.0 = ea3a7a2197b528cea118e13217ef578e9b7e7f475499ca8c
+AdditionalInputB.0 = 15e3a90e20cfcb1dcd2b2ea97b7f89f65a0278d1cab82e1f
+Output.0 = ffd25749c559506429f708e1a170337d21517b9a98321b8f5a22cec9a17d9fa6cac217747a37ebfc00e054f57e837205b6fee567474d93efd295d44c47eb8275332e8dfb5bf1536b1c6ef4e589a07ed3524e4b9bd6a6abef1fd4b9b4cb5b4f8796a7a76d1912ce7f80fd63e0b91bdfb7
+Entropy.1 = f3240ee9d4c06c9885fe055d951e5938e39ff56a2e0068c9
+Nonce.1 = 6ac015a92282a6e87b7414f0
+PersonalisationString.1 = 5831f91eb9e7279a66398a8ea6f43efd3ad379d6b951d327
+AdditionalInputA.1 = a4f6fdfe4cc132cd57ed4b3f674b2220ca0c1196d344cd96
+AdditionalInputB.1 = 85dbdb01edfe331d4e8e40c52c3a28e9d52aeda347ed2648
+Output.1 = c4b967554913bf365a7adc7497f646878c6cce9b1d3b36ff2492275bea44659aa33df69404a3a2957dae94bde7b095542fd8aca3f3519b6feb71e825c0b64a820d56a63b8492a6301998f99533c22193ec09607152af43b96c6afb4490ec110fb27a957c0ab6de3a6312a22a1680d5a0
+Entropy.2 = 39bbe3300816ec9eeecd8f81429031a1b17d24cbba723ebf
+Nonce.2 = ce22945857c81e05c5f52cc6
+PersonalisationString.2 = 1e14d7ef323eb8e88b011cfce216ebe20dfb92ab925a22c5
+AdditionalInputA.2 = 344aa4079ebd79d2288cced93f8fa333217944b4e9e1dba6
+AdditionalInputB.2 = 20fae2a861c0a4834fb8b44db1fb415765973556f97108fe
+Output.2 = 1f2c30eda5715a76a28824f2c1c216bb5eb20724eee4a944cc01f8fe841cd4622cffc338280b019762e410a32e0e4b7f6a19e76c2246fdb269be659d1cef747d480a0cea33b7fafba1d4afa9fd78e8f49333ffdb0a70ea30cf918344167809c0bb93a89e06049ddc52ec0d53ec8fc80f
+Entropy.3 = 8c9b12dbd81fd4ab1d0665a71e10241e655558728ed5b7c9
+Nonce.3 = faa23fb3916affe38b6c55b2
+PersonalisationString.3 = 19193fd5c1adfa3faf2fe584732bc8538120ac0d0f243fed
+AdditionalInputA.3 = ef5999f1b84b22431641312c590e5a0b189285f74f729639
+AdditionalInputB.3 = 807b35be920b6869b78ecab63add9ffef1905d226d67de89
+Output.3 = 14dc7e57331d5ac76399c303df7072701993fa421dbc78051499cd5556c8ac69b1aa6e68e0c08b65c95342c589d2cc163c435eb637bbcda64ae174bc6cb7d604011f7392396238963f92535ed11d6a15a268310123b5e01663ad9ee1bdb15f05e174b8edacb9437fa064cac7d5f35ef5
+Entropy.4 = 7c6e8ceb57421268d2c28ab2e37e05f8cafc6d7882a74e80
+Nonce.4 = 342c8eb099686b2ad2b8a04d
+PersonalisationString.4 = 29b812867dbc955b73f4f46cb488878ea001229627466c64
+AdditionalInputA.4 = a00db37e1e20d36218213f789b9bdcc276b4b4d130a3aad0
+AdditionalInputB.4 = 1a951f3ec9c0efc7f87fb923972a6037a7d69e39ec1415fe
+Output.4 = 1a26322877750fd40a60f896fbb5cdfabcc39bb70d28100a125d4ae24bbf4abc6cf9e30e107bb6e9bb499e54423e220b51764296fcf5b20a1b131ebbdadbdfa4371186918ca4c49cb2b3be37e3f472b3fad4bd05dc5402b35146e68bc025e5e708e54b5fa26d07e34d4d961b4a35b79f
+Entropy.5 = 31f53497694c1be05b3abc9715bd5a92a040a6fa5c100eaa
+Nonce.5 = f9d772d0e69acbe50fb5b937
+PersonalisationString.5 = 989c7384d25ea30e6ec9900f155db75039602455645473cd
+AdditionalInputA.5 = 4de1de19afb424bb0ef45b84a68140f5d835b4f2779e7ef0
+AdditionalInputB.5 = be3850b00cf2b2331e4060f23df3d62d05165523d3363eab
+Output.5 = a0dc1ec87fd5bc91489abb55aa06ace6d5ff6ba2407d81463203efc25d38ab8ab5fd0ac89668b857afd07b4ad2ccaf62d718d44dcacfbe7b7e614b0b8fb342e8b614c9bc04a4d73e1bde463ab7346c1edd80b04e87d5dfbeb0e082d0742e35136c7d7bea5bd7f33e2357a7400c4456b2
+Entropy.6 = e4d14ee44b0853fad4e29d866db2a7e9bf035448f23bd4ff
+Nonce.6 = b2dc11eeefb0d44925067354
+PersonalisationString.6 = 1175b2f067ed0912e9e7cd4bd6fa11e73598a46dc27e1099
+AdditionalInputA.6 = 8051fa04a09ccf1cdc2b41cb4799b3f1318f7d79ceb1292e
+AdditionalInputB.6 = b75e05f9a62967a57b8e0b3af53b4ac5b7a9c9f9c96b6e0c
+Output.6 = cbfcc750a474249966500493ab5239f68afcd7ebcf613f7998c74b3b7cf0afdbb1d29b9b07f00e5e0c38102558f34e2172734c19a663c7f0206ed856657da0b73d5de0168fe28e47681279e9d7f3c72aa49ab0f8306881c0f684ce8a6f75b1e5b87fea58de78ea3b14565ed6b97c41c5
+Entropy.7 = 097b51a223801e567bd235a113c4a711c6a5b0a20dc44d6a
+Nonce.7 = 4ca440511c94f058063f2b7a
+PersonalisationString.7 = 91b839a777fbc2f12b1a5dcd72cd4500449174cd217d967e
+AdditionalInputA.7 = 2f0390a94b16702734b3ad8f08f91cae9012fc1e5281f129
+AdditionalInputB.7 = 21be091dd429ad8ff2ba1609b2eb4a99bc654c23433acd24
+Output.7 = a116b26f9a9429ba9894f37f9b0b388bcf34de7092743ce338d1fddfebb3ed855d3f17bb2fde486c1a7789f60998bab09d62b87bcb157badf644dd1f4fd4451ebbc6fee984605c259246c9aa8e0750f585248e9dac0e7d935d6de7479cc1362b59443c876f55d60ff0b698de1cfee61f
+Entropy.8 = 9c0e0890d95ef33842c657b1311edad3b4ea0f1fcd30a77a
+Nonce.8 = 79a62f9cea1c924fd736c4da
+PersonalisationString.8 = 7f63c222d598bd3dd7a59c8b8e4c37d2fbfbfeaff3319f60
+AdditionalInputA.8 = 89a60778310484079eee02ba66f983860b29aa18180bbc5b
+AdditionalInputB.8 = ee8adb31d6d21546a89d52e2eaea8f33c836e345d046395b
+Output.8 = 0e3c314968b31a01a0fc81314ed89fd253be80692e4e6e55405f889f304cbfe4c688be60b81ab09f752d9820d139c07e7653dddd1afbfaac5282405ca96077da102415a18137a569ba9b655204a3805e6692f8bb095580d169c91c5aa8eb09ad0fc3bd65f304d8975679c70d6fabe3a0
+Entropy.9 = e6a2928b4a18e8daca7a562878124c0af34ab51701dc5ea0
+Nonce.9 = fea9ed86d8693e2cc6beff65
+PersonalisationString.9 = ce0d8cae530701ebe5cea88019addaf80b94a6890ba141c1
+AdditionalInputA.9 = b17761fccb5866696e0f98f6f62330b12eb4be94ebf40f1b
+AdditionalInputB.9 = c5b0ae9b5807d9232382e34d6a0b5deea585f9782da34bea
+Output.9 = 48acd3f395ac7602ae7b840a62e419a48c28ce038bc33cb819248c422a2c204e277ddd52c4a94cb8ff53d63fb6c6f744a0363871d99cf6bef8fdc411af04af8b1f7a218e99ca4145ef15bbbbf46c4cc3ab1dacc84b113e889807c6e01c7e862116b37b89fb8434a7e5ffc2fb4324ce98
+Entropy.10 = 38ffe6458065939c01749e67b152c655ced53918f674c656
+Nonce.10 = 5b7bb10697c8f073fe335823
+PersonalisationString.10 = 0df5ade12b46f18cd2e512d84d8167e053dfea1f483f5716
+AdditionalInputA.10 = 43fdd1841910ace583719b7b9f32824bf6a80c52048b4925
+AdditionalInputB.10 = 0a117835ec5f6a8d9ca511333288d3ef7e2c02fb38529304
+Output.10 = eebae18396c6f818e20053ea19470fc8481c466e222a6af0a095e70088f47e79ba41fd8c633da751b03b5a9bdcee8e25853219f4efd73d1834f0719bfaac8bdd0c8051dc5455613b5d8306bafcaf21a3115120b7026f1c2ac0ac90688f5c256abf9a8992b664aad16c610ab17a413213
+Entropy.11 = 4b3cf57127fd60c496f9ff730d4dad87b47f2ff3b29c8c50
+Nonce.11 = 51b0e321e13768574caf7000
+PersonalisationString.11 = 88bd90779866d8ab9e4ffa98ea65980c9bf1a245770fe63a
+AdditionalInputA.11 = 94808ddeda5e1b55fa92c19ea223fae136df2c57d9121824
+AdditionalInputB.11 = 8e822717f48a08aacfe7025352bfad8bd102cf5b19ed852b
+Output.11 = 14a095faf1c241df1adb3d01174fa81c6910e6a2bd959b547269b5b5b769d11f3c9f7d5543f551dcaa120742ba5fdfadd271ab5f99a3983ec39e79ef353eb9fdfd395425b311d184bb42ac7a06ff4d90eba47b11618b6850810afb783c0f7b7e6876fa64cf23c2fb72387f5253e516cb
+Entropy.12 = 8b46ed6be54268f358605cdf767d2051bbf6cfdc594f8f63
+Nonce.12 = 2ff298a082d052f82c35228b
+PersonalisationString.12 = 53a419d0ab450d06a9a1a2151fa0a9732007e648cad54b13
+AdditionalInputA.12 = 8a39943a68607f13be4a5c68423486332e245477b4003e75
+AdditionalInputB.12 = a169e4d1ff3d60d51fb67f25321721e7c3184991f5bc846f
+Output.12 = c6835da498d59443175965d53f16a2d9fbcde43a430e4649f722fc15947641d008ccc3d3e4f5b10b8ad988466e09df6ba4121a6ca7f0df69f141f8262a68e9768b151aa05f76a1858609f227bdb5562e2e9c74e59cd5c01a8a4a95932649fb63f2beb7ef4fc059a1015fa25b18cbad93
+Entropy.13 = 7e9ce1e73ef64c50c2d9168a5f63359e4e00fa68dafb091f
+Nonce.13 = 786f10ef3169fa51ecb28b30
+PersonalisationString.13 = 2ef5c1bbf9d54aa09061147f9ce2944f5bc83a66d43ddd96
+AdditionalInputA.13 = 861422295fc96bc5507b84b27f9ffa1df2f06eb61ce76d56
+AdditionalInputB.13 = c5f124b884aa25ca6f891fba4bd82de45f884aaa518cfb1a
+Output.13 = 0e3866922f4ba6fbd89798c96d20a01176edc76c1982da1617658ad162e607df6710aea1788969016321fb5b29afb30e13b061ed35cdcf118e7ed9a211aa466986c80d464d531a9b36ab4d1d0d1f9fe3e3426e7e5edf397bc1598a17adbec1cbe5e889e2de0d77ac9e452dfc0427ee33
+Entropy.14 = 5586a1843e058e0964b76445f61ae4be6971cffacc05edfa
+Nonce.14 = 3143324d2f3c14f6069db0dd
+PersonalisationString.14 = 57d8bf22e41c7ba6e7bcbbeff5774511445f070da4083b14
+AdditionalInputA.14 = 1b8725447ec539ea4a13c47b323f1d6f435ba7e624dcf5af
+AdditionalInputB.14 = 86d30af40a7a395764b8b69f2656954c7c3f1c30b2b703b0
+Output.14 = 2fb2f24b2c38f217232dc22ecc7380b8240b05d2c7bc0e3dfdad268c8c10912a92595d70dd98e7ecdbdc6d7bce6c72cdebd7e121d75de8b6795b660be9096a1f24a97e9c5344c35f04451dbd8d9808c7a84c6fbafab6d060026490d492060f052fbf21a3bfa2a8e4a40db58672ca52ce
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 44ce0a55dd28a430bc87627f2a06a391269c4294f10d65cc674b47a12cc9d6f6
+Nonce.0 = c289eaa7eb8c0ec54d1a1d380f16def5
+Output.0 = c294640085507dee07b3a9e14c89a9d246370314b88ad7f22f5143132f953bbef8aeeef29dac7907c5f6da5f79f5e0cf89e9d63adc9f4eea7bef098d68389e681e9ff31dff03b26d6183bbcabad590cbdece476dc0cab3e6fcf85ac7c12149640e272cf85571aa2c638165df5553519116393a3c0ee3aed718d42380201d2c35
+Entropy.1 = 81db6e036142ee644359d026d3722abd944ef4f801091b7dac913b193df72743
+Nonce.1 = 194b73a2374a8f06ca8defafa55da78b
+Output.1 = 698fe521f8d37410bcc2f084d5a4fd704440d0c9ce1dad1f06f2e8fd79107457a2f604f1f0b35c4579fd2da01cec3327b6f5c99ed3a64f9f972218cbbf0070e73d7f12eb67bf18b43a3291f3979f36188a201f7638e3bed7749abaca34b65a23a5ff4525097172ca397d718b0ca13aaad7c97295a466da743dafa035ca1481fb
+Entropy.2 = c819743d44b0c5154d1d448d3e7e0e02efa80dccea6f9843b15a668888da3d44
+Nonce.2 = 50e36ddc82ac6a685e8810ed0beab583
+Output.2 = 02be729982a0d8f619267b2d574c1b45e648d46fffca0068664f835e272c89a53b470f6dc2cce5b743b447a5a7be0d4c5a3246d648dd729dc181043025aa5b5f8c6f603e3d921460e1f1ae90b618c9522a63fba1b28c2766a504908faf091b2731a6ab04d2770a1dacb2de12f48449b7b9a720939efd83cfa07e2ed98e9dc919
+Entropy.3 = 85128e5cbacc89aaeb6351bd06044ea4672791007514d2c9e8a65d1174e2f483
+Nonce.3 = a32f0d51f9ac809154bd794d913e3998
+Output.3 = 1825f282561b15bae06e5b874fe809d7dab530dda79c024608453da8351a21315c2f32a226a4f3e50a6a7803eb6c7d1c0ef034af809965d9da39942b1688c45f5ec88ce2c80343710ae52906c0d864781e493ab70ef8bda30f513a912e98efa64e40cb6c8936bffe196f02bab50987d6777eb8812e930228777978735feee0ed
+Entropy.4 = 69a947c4df683cae4f7d0880ddd1b1ecf162ade97360711e75615fdbbe54a54e
+Nonce.4 = a8a4136f9828abe10e9014555b092079
+Output.4 = 0fc08cc068b5d4a3f90bf6cd7f6f5c9d5bd8101b46bd618b80ff62d524d00bde3bb115bf3f8b819ff0d898579d8eb2d3f94b0ad1ab39a5ec784ea47a480ddb1a34d7bc472194b28a6df40d3098e7b3a47218d487d50b3c648b71fd4d3ef6f09c1cdd6c60d3de6e34583e8c664ad3c84128b16124b962fc519fb5a0a3fe071a81
+Entropy.5 = b03e1c29ccc69746a5b4ce0d0900c98f471711b9bfe00a3f6496fd290f619e63
+Nonce.5 = c1ebca6465ee352d159e489593de1b1b
+Output.5 = 1f0c7c8b4c182f1ce3a686b719439ccfee663f6f90bce5983b35d0680ad4d87ea865bba548f2e37f7670a8d2860f988372d3781386977819b9adf97c020655dece66bb88c027cd619b24e680f254571a2801544fa2d8b1207a8d431eff5fb32672c4df8fc143c6d4ba2614a3d601fa05730aa49b513389f01dcfd17b2541f597
+Entropy.6 = d89e696eda1436eab85b43264b484ed00614890ffa6db1890ee93e39c8b6c192
+Nonce.6 = 38a098244fbbcb2c1fde4b84a6c623ac
+Output.6 = e7aca2411dc9d15fe008864e1a8fad4a1c5d4d70ae324e102a35ffe798767948650fc34f23a42c1d2a779c7f6b44deb06144bab6ab1ef8664dabac9e86103233ad97164784ed23b878a223652da3ccb7d60396f1df945b6152233708c7ed22e8cc272709f33b4e21404b13dd33066f5557ced5415f3c860c55d1cf6ed32fe047
+Entropy.7 = e57a58fca96ad41884d89ef1433232bcb75f137747819959684081d754fe52dc
+Nonce.7 = fc3de0c440a955bd19d1d0e3feb1582a
+Output.7 = 7955e398bbe54f70bf430eedac37d5e8767a19088d5b41d4180e64f41b15dfcdc74d77b573030ad3ab29824b8bac5172d575e2fd035e7a8640a51536f26a3d8b0dcfbc92fd47e2f90cf9a125c9e11a002debec0bb08e27790dd2977f11c67355b435d70bcd84ee0cb672850b65cdf75ead392c49740942b865a16ab501d36c0a
+Entropy.8 = d5f809f10e0fd0ad3ff770006734320d4894d790bd21b1b7536fdac5efb5ce58
+Nonce.8 = 03fe039e7e942a7728a11367a73f7a32
+Output.8 = 596420d1cf1296081f985bbc8d39bf7693890fb0995043ba548054e4a161c0cbf807f8ad7187cbb424302f4e41a33b9ddec8a8dc07bccc511519116e29958fbd2c842c528536bfd6cadf6e77f97112fb30b370d1312eef66a127d1de5ed85db0f56f8bcd9bdc7c1d0fdcfd578b4e17f34b63188cd74808847ef7c72b9289ce85
+Entropy.9 = a6c7c911cdb55e30a4378a9bc822a2addef16f8bf95cc8ecc23461fb22da0d83
+Nonce.9 = 3b3885f628e8ccdc6653b2100a626001
+Output.9 = dd26f2bd84bdd8545893359c9f97ab81f98a0b70d56a8c0f0f54f16cf7e9f5a3eaa18f326637ccd44111008d9c8fa028f2e9a2b65dd0f06fa07bf4f90231657158f901003b42e07db224bc2db5dfcbc64ea6c394e76bdb82e1f4747b2d8bd1908169c2938c9a4bae8de37110daaae12ea3b974f7c5637f68c9007442af04d791
+Entropy.10 = 2d4602c7055b2fd556d342570611c679a3b0511f05a6fb548dec3a68abf39e8b
+Nonce.10 = 2abd4e48ae6216fb0d7c57149ad65c36
+Output.10 = ab8e4f28b147addd5a0a8b89f385b26d35c38e1e8d7956561c974197bebec46e9e1ff63ed57cda3037edc88a3ad1b891c4276f6c5ffb052def2cad96a274d68c9d63db2d9f3fdb367b0e79aa7bd631478b4d1c15d4d3a6aca9a4957fc15ff5cd7770955e6d58afe1cad201ab87248178d88b8d15d410790ec89600d551159f19
+Entropy.11 = 5660c5540607a5e4e4f425b6ccb5e21a0d5ce831287250c0ec09530e6015a9ea
+Nonce.11 = c7acad8bdd4aaf7c32920228e7f1292a
+Output.11 = 00904c4dd19ae62eaf31ed2b15b90f158e5d6e5368e6e8b55580c95d9b6ce91b902d7bedcaa39d6741b7e0e01db3f2f713118a4534284bfc1d6f72e3e22443fbbdbffe869c3700352071f4926a58957f5bfcd0970585feedda6dfd0297a17375b43d5c27b5a3b2c9049ee9e825bb14e653235f710e01eed8decb792488646e2e
+Entropy.12 = a59be6b1032007ea49513ccf13989d3494bdf927b1d3f8be0b66611e7e65c08d
+Nonce.12 = 0f6777475ec852294ba42fb74dc97760
+Output.12 = fe0e0248a9e9097689f39b043918db834011e15949ff5960898bbee0822a22556e84cb2098161e7ff5e8a4957a404bf704ac59fecb2d99acd0727400696fc1977f28bb702392614e79cb0820682215741058d6b2a7c96cf3d35b357c7361ed5e614193b781d81ad1e0c081947a13d30adf4710750c2535d82047d609701a81fd
+Entropy.13 = 476c950159ac9772eb7c477a3a5266c0e3b55c8f94a293268b53c3d4cb2d5490
+Nonce.13 = 369f60012a316ee36a0febfc0c8c508f
+Output.13 = bc433937b71f65d261167977afaf152ed57cd834c1367797e14c22277b4317d2478ee3ab2755d4ffe3a63f9325a21a5be13fde2d9a8521b5e8f3477d62160a42145dc368fd5e24f24b2e33aeccf4debeedae10c77606130b0c575c41147246ccf851d489e030c8f6795e25462450711c59839a4708984a0d7443149ff0a492bd
+Entropy.14 = 9021c403eada5eac222dc48e1437b6de48ca31b9e7e76fc5f60653a3d901308a
+Nonce.14 = 503b4bbc0ca538983285857a573f6166
+Output.14 = bca7456257568a178877bca602d331161828a4ed0758d1ec3febcc21717cc4142e5481dc9756c56099cb043130345689156cb96e1664ad007c461ef8b5b0fa7d18508541f528a43fe8c719f3a269ff2821ca655980579dfc2c794da673b8c9234d561b833855efc91b4747ea5135a1a05017543f5780f2cde8b472787173ec50
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 7350612ad286d0ffd637cfdf7c86402e51ceafce1f246f79c24db94b4ba92360
+Nonce.0 = 0e35c59815abc8c8662e27c87a3f6a87
+AdditionalInputA.0 = 86a2a7faa08f5cbb52143a34ee3e66a6fb234e11ead462b94b264f25af6fcfd3
+AdditionalInputB.0 = 4d748d317c3734890b77946f3dce111e7378203100de5f36e4d65cc4a85a2635
+Output.0 = 9b43ff0c4fc6e82cfbd9920839a7a4f5cb0d584419621eff4fdbc64b09a29ef225c1df78b981d415782dcf03a47274a3efb35ada443a024a524634ab831f206a53c1c0c0c8c9f46d409a0b0daa62364636dbe27ee2ba8cb4cbc4b5f82f64c40dd7fce1616b0c91eea1eea657e855e6042470d5fe35bdd02133c3edf1c73d6234
+Entropy.1 = e043970a06db063de678647767995302b7dcc3a62a86a41bcf758803cb580233
+Nonce.1 = 493941e49c54632091416031aa619ce5
+AdditionalInputA.1 = 14ef3d89754ecd20c4f45dfe336d505cb2d603854e69f7a961c6793c68c264dd
+AdditionalInputB.1 = ad3068bf86f8a39b26c884821676bd5e474a18af03e36231925a8f194d5ec9df
+Output.1 = 3fb5ab8f960192f7661a0e5ad16246557b3bd076eb236c88adb0b73a8be1eca0e7e469864e224721ab691332eb0cf8c001f4f5ef17e46e98af5ebea2fc058da7b745ccf407f4a13169b1f35c416ddf7b4c42ac41c35722c68c5e89f83de8bdc303eb44117082a52e2c852ea4859552a07a2a3a3d51dd15e3dc6bbf4991876a15
+Entropy.2 = f5656dc9c46acec0a22868cf2e91c85484a38d39c770de86e4234ad2d338a797
+Nonce.2 = 922b016bd1d80ecbf1134ab9fc20314b
+AdditionalInputA.2 = 9d160d63376bd4412fda64182f7637314a8fc95cb1917d3760948e81e3fb1080
+AdditionalInputB.2 = 91ef6e854fa188999bca9862faef791cf142abf1f5b33ff0fcf368876d673fdb
+Output.2 = 45258f1ec68c8cb9c4ab62d08d493dfc2fb0a93e7eb28f9d5fb0795290ac9fb0454f61ba4a72e89a1aa22132b28101bf60755931388e000bb628eaeaa1a30b93978c632336fd8598cec0348c570cf56b2569f530c12758551803d602e47972a31a1a3befdcfd78161f65973d978d1d33607d0cf404b30773eb28de0fe04dfd08
+Entropy.3 = 1caa8f2ef330484a0009447a646e18924b40fc8ed6a67d6b1e484b1e26d67cfd
+Nonce.3 = b5989b33675b3212f64722d4bc8fb9df
+AdditionalInputA.3 = 3f55ad7eac730e1b5e96f7780e28f9a42b23c1e93671f3ead77fe93b35f5fb50
+AdditionalInputB.3 = fd9cf7bc6f3751d8a28f8b9c6db953fcc20500e01f923722d0b7b09d65aefe39
+Output.3 = 29b6e72b5228a4e67c40d0d618214b16bd8c008e58bb8f65ad91067d2de6a42e4c8b4f393d2323a9b8219d7c32461a6062f46657f6903752cd9050c0d6d4ee6eee5adc30aaf540e4777562e9847522d4db31daf747fb1ba979f14c4dac4c50a3afb2bcf651b048195de8593ce8949738c2e657cabafa85699858e0b52d62f085
+Entropy.4 = eb331037e2ff46f70214308a3e1be1695853c864d1ee92c659b8c4f0dc9e65e3
+Nonce.4 = cc2f6273d208c7a7e49ce09ab9792162
+AdditionalInputA.4 = fd6b20be7750acad0024cb7408bc8cd23a43fe5c15d92888f7b96aa383e24a9f
+AdditionalInputB.4 = 44f1bcc19eb55ffcc588b9c2507cb98e103f2bba0e818032b2238a168ceb87f4
+Output.4 = ee1eeee317978fd1645cb4ab0325c640893d35b3b57fbdc7811788d681b964ddcda519c94c7a6be344758483de4d95d04268b20bacea0f1343d5ea6e5eebc6d9ed9433a0d181461acf7f3d8c6da4b6b47226f1d92eea75a6262608d8a5cbfdd0b54896faa7d78036822e3cdeb8e286a1012f16a067d67b61e95ffcc1f945a3a9
+Entropy.5 = cc00738d8b4dd553bb844eae3e658a36eece7ba2ef4fde53a2a88f329b8def70
+Nonce.5 = 86f1844007812341159718c6076e2928
+AdditionalInputA.5 = 33e85335e836e65e0a3a4d5e19c419e6208f349c6e4e307e7d0f21b0717fac5d
+AdditionalInputB.5 = a013d7ca37cfca37ff970068a17b57c9549f4d7bf9c6c175e0bbf5b0868d3f4f
+Output.5 = 2bae26756053c76a902a01797d05a765a3eff54f8a2882f654db8cd8ae502839dacea05d3416e513d97430d99329981b241ee83652da94c677bf5114ff243a53c5adcae98628d016c447667ddf7cc94d1af06c9020ad4c9f096135d053d08d73aaf0db6c9fb4b22484b8c2240a8d3572b1ff1420849a705522856a8159523dca
+Entropy.6 = e92c8a50a82efb4d5e86792aac348f7abc26631f25fccd6bfb39dfec8ca5efaf
+Nonce.6 = 2894fce530841f583249f0e3d0f9c95f
+AdditionalInputA.6 = 8ad4526b62392af830ad46a7e0a09c0d814eb19b950a89a2ccc3b46b47a53410
+AdditionalInputB.6 = da84b91b065df02e1d8050142ee01a28b750d7bd55b70f65c36e4ebddcd42e78
+Output.6 = 10d3791b8b3c1e86911eaa964f070fa5d19af00307972541379b7087f2c1cadf0eb142c469365e1a8c657c32535a12044b287cf05151662b96da4e8b6103a04a002d6a77dd7b269cc786c483c39e6c76b400239bdef538855127ea110ac4a43ddf38b34e17d58a6e297f75bc634f1f6f7c732c60eb710f6091dc40d0b04f63c8
+Entropy.7 = 26aea94a8944ae443e993ea8e1ba1470af8875b58e8052ec96386ca566d6caeb
+Nonce.7 = 5bddbb188fe0015c2be386bd2ffd0836
+AdditionalInputA.7 = aba1c3f534921059c65987a25636d9f652bb0ce6cfa4505ab0ccc99c6ccd08cd
+AdditionalInputB.7 = 546f6f9aa5b3c290bbbb6c148e299afba9c24f86c85bb83d4c11edcb12e7a136
+Output.7 = dbf46d64460388558a74b977f62fb2de4aef60c0845339c139a99876dcea1f501302099a150603efb7e3c7840f9d9c47208ed82f8814de6f88fe46eee381825ff4803948ecd3b49843805e0785658f6f681f527c9ef326d1ed8ff08c190a993d42fe7b06e5c413e6c1952a3db002601a436f6ea7c9cf0a119cda6477cc707835
+Entropy.8 = 8e2c0cc512e3b12038ed2cb280a3645ede5f405a9ce4f471bed4dea8340ed185
+Nonce.8 = 84850f530aabf1990b5871153f088434
+AdditionalInputA.8 = 0dc428894939a055deda52282d833d16ceb74292c627cfd1038317a9dd357d9e
+AdditionalInputB.8 = 3f0368df732f5f716ff738649fa34e3464f64f957ac93068bceb6368a80f9736
+Output.8 = 31f4a51f2625ec04bf1c77eb2de6944d17dc4a26635a586868acdb59496d8f8fbede047f2d813cac683890cc0a7aac09e52ffe3b2ee9f3f727c513e9cdc3f8bf870801b68be87919c6be8d32727ce9187b8fcf50506b48ee15061133331c541da4cce256527efe455c8a1624c07547899520bef7504be324ce39333fa932ce66
+Entropy.9 = 07fe3d8691b62a2c15ce304a7298694707458fa117cffd2334983581c935c931
+Nonce.9 = 0e95e2cef814077355b6d5498184f327
+AdditionalInputA.9 = 8eabf1bb24d65f02af41695c7947375ee8598b677f006f834f9618c42abac9ee
+AdditionalInputB.9 = da1bd2d85aa482f3bdfb91df1f87111a8e8e6effe955678e273730e593728e3c
+Output.9 = f5778bf8230ce869213d94f2d5841c899445dd97bd9c28e02b9e31f529495d0d8e3b6bf3f76dcf9e20cb1f0c7738e01a32e60fdf51dd1d8c4cd6199215ae011b0bdf930119535060da2781f02b758d661ad9f25aeec63477a261adc2b43edadba4d19898a52da1a7aa534ff90fc8d281a9198052c4713e538ae8ceaa19bd4ed1
+Entropy.10 = aca36e39522d614ee3834afdadb69779f2b5486d1c57ed54a2abe289ce0acdd2
+Nonce.10 = 6605f3b7520e76a681ce0e0e4ab3357a
+AdditionalInputA.10 = 8f712d523154512a4d6797fbeebe6b3c02f4cf5cd74470d5884c5bc52d55cb38
+AdditionalInputB.10 = 92fc6e44a5b2eef79d302af221cedb04626f198b88c59f52ed2371077db5e7cd
+Output.10 = 11012de2908fbb7bffdeda04c6dbe94e271937bb4f7450dcc1b7bbc730f18a680d06744b0079ae35f112b1f51e551318f876e1936862a8e03e620095a49ae0bee2276e16a92177c60f357ede15acd99e5aee40631547ee9ac2d4131c211ac8bb66ddfcbdb7a1e4436f7fd496a51693a6d53e91552025e30ee5e88fdcd82d3885
+Entropy.11 = b9306e6e764a2bc12715ba8b8de5b97bd6504093442320620f7939427773aa10
+Nonce.11 = 0a11f196903e61785f507733f1d60b0f
+AdditionalInputA.11 = 92e3744fa732ca7e31b0a383447f7b723efb9fc86b4a4a23dcb9efb1d79bca51
+AdditionalInputB.11 = a7503dfdc5917851b2f0e01ebd3976c40f3d0fd5ba82c653dd0f7dca854221fc
+Output.11 = 04d1525f9e975c87555adb0dc38ce68f95a173bc9a56d18e93f389b498033fbd0de73d45e31f5bb0a3e2efdf37340a67f59ed4e82a2e34c63022b1f1dd08bac6fd9c61fe08c7bf91e7d81fc3e6a6eea938f59123f80564c4e7ba6711a9e46333e906f6249a4739371d8dc6c5d7e50feb1d3086ef34a143db616a91c4222c24b6
+Entropy.12 = 284479852d7e26ae13c77f674cd9593d81a0aec1928d4fbc048eff11fc1b08a7
+Nonce.12 = c89c16f79e8b4537aa4257d7f6ee9916
+AdditionalInputA.12 = 5d91d857e78d441f3ccd535ecd2b4d2d5450f049c86088592b190f784a64cbcc
+AdditionalInputB.12 = 0cf631a01ea5a7322f49f728fb854a7606f36d6bce2c99f2b65cd819a2cc0c0e
+Output.12 = 1cee85c41c2c4eb1f4f8a23b69a03682dc5330b1b78d9655bc510e8c7693c569333b4529965ccb121a70c01f1caf2ac323ac0bb4cc16f55c40a453d222d798bf7661523b56689e710fadf33469b5b5bb87ebaa1b5b44acc0e50d30f63c770a83c70e591953e99826579ea77938a7a5946f578e16ef9d17f215148727f53b6c08
+Entropy.13 = 699c46f1714fafba8d271f9e033e1d967330da66cdb8fa5360230ce2768a241b
+Nonce.13 = e79d9722318e117a86639e26e85dc04f
+AdditionalInputA.13 = f655f76beebc03277483ba619acc2cfe65fa7d08fc5568fedfe3488247ceaa31
+AdditionalInputB.13 = 26228b541cc7d8620ce1bf9a073940dd369324203366b1420d1774f34f472e0b
+Output.13 = effd4321a4351edb2aa597a1c7c8d9022360078958a46e22326f87efc331a4e5ebf787da2cd1b929a94a70c4a2fdea94d323ab87a125b8b69db51c4d19074c540bc9ab6c1c27310adb465f52ce8084d397dcbf9eec12e8d806368c4beef10fd1c05510604b0c2f0b2810723e72b4a414ffcd4d87493f9de651237e45e8f48ee3
+Entropy.14 = af6143012d0a1026a5b7148e796e1d767814512ca4cd294c6ef6749faa04c13d
+Nonce.14 = 209924e1846340b3f574222c2b1290f9
+AdditionalInputA.14 = 439ba9ee252edb11b09fd765266b220077ab641cd7ed42b7cedc96b3997f9a31
+AdditionalInputB.14 = 18e1dab1f2af82b8912be6791b003d7b0d66ce76a78cc17b753055b7b48cd2e9
+Output.14 = 5af9e042af202c9584bb69cb54738c0352ef2c9b9483d6fc8efd525ca38e62f535f2ed5658770e8cc5d53d9f1964b8a55d871c78250851491441c924701a52175410f52b162ebfe3991a72472d8842248402a666d726ea71437fc4a521543a323d501a6942ec4b7fb77ce462face53a2ab9b1b9fcccfe2346adf36027c48293e
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = e724ab61bd5e236354310c8e3b1c1cef587eacc99ea3411cd61e1e033c834e5d
+Nonce.0 = 2951ffc5d08e47040572ff1ba43493c0
+PersonalisationString.0 = 59bfffefbc2c23df1f33f6b6dd852039daa82ef64d219ba4ff2ab243652eb9a2
+Output.0 = d640ceacaf7a7fea51dcb22704cc6d93d042e4fc667189e891ce5a221b7911041240498c11a51ccfae98dbce4e7b0ee1b63db44b04f8349631dd935dd18b205a7197e4de79086902a2a85594213a95cf37cff5068b51f23bb6e99c2853ce57869d1032071459471d8a2103a620a76826749bed5428eb197176202e9bcfbb3ca2
+Entropy.1 = 08fb48fbca8c66b084be402d80196ddb171f70be1a0ef209139af642e98751ed
+Nonce.1 = 8b2e95f175103ebcb419531deedc47b0
+PersonalisationString.1 = ebeb41167e04ece3f0ba908671174ae50a4c6e2f38ca97c8b45a89726c48776a
+Output.1 = 35a47ade8f180524a3a2da52a1b41e196fd5fe2d7e8f4456383a459c8682b501fcea1a21b730c70f7f5979a1d15c22446131fbd41e661446ddc02090b90c37816345384eab418c7a9266b16a76df8eccd665211ec7a06cd276c1164442f23518f51196ab76486d2891d6fdde918ae66b84224d42c07936b4a00b92453f3ce633
+Entropy.2 = e1a456bf6ac6f942a82dde80ee33814d30cb920d3bc94126e583cd870caf15cf
+Nonce.2 = 76ebdb506909457b308be76e5a62a54f
+PersonalisationString.2 = 3ceee1ebc781a9cab0e04300c972ef69dc548ade6fd731ffd8c343d93d08d185
+Output.2 = 57e56d0d7bd6f7197c7504f7a390603ead14ec6f13a4a744bdb9b296f08380dce9e0772f43de2009040da2506ec44b9dcd455c352515d17234333aca348c488242079b63dbaca2a6863f6b821c5840eebfd682c98619eeab05dad517584e0864d6be51df43da43f4ec1c95cf8164f8ee97f2c3776e99f2a3a21e6070f9b4ec60
+Entropy.3 = e25523d7266a5dd737b1e4ca76aaabffef4fc6fea945984e1c627b7eebc999fe
+Nonce.3 = 371c38983c6e99eddf211cf5d46e8355
+PersonalisationString.3 = 03ad49a7cf8a2df45f762af8d826d436a7f27c1840d53026a5ae3dfa00cd1346
+Output.3 = 32d68a82bfca15f8f1ec6f237601fb3bdd2d0078269c863898c6494b7ded5cc3eb110e0c25836721cc22a105817029df725bb65482e8776c2619e9bb97a2dcf7ac6e30c3fcfe15afdc7ffb9eca24fa41ec8d076065521bbff417c670aceae43267785caec7e978d1d0705d32e5375da93c41b7cb68af3592ed6957f225da8cb1
+Entropy.4 = a81b323ec47b3112d08d51d3abcfd967b36380f0f9d233d9675309b8455c792e
+Nonce.4 = 8ef18e08c3f6f957f026296c61dd8077
+PersonalisationString.4 = 91c526dea9e0f80e46cc2a07f793fcf36397bf528e63a7fe4891becad029bb31
+Output.4 = ca8f58eb28693eafc2f1d2c111f87e864d2a59f7966420d5df510639b0af39cbb577969de697c0bd14c36dc946c60ca257cd365bacc740e09746c1c73264bec0370d4f9b9fdc7b8db7f38514c020993386153115c19f0bfe211151fb482934f3f226ddfee8a392a3feb7e8f3c8fd707fdd8b260dc34e0f6165f5f4c6d0ecb1aa
+Entropy.5 = f26f12b72b13316624c0981d40c8c9b21cd570c5bd7dcc2ed0d8d63e1bbd7dee
+Nonce.5 = dddcaf5eca7cdc074325a6090f59259d
+PersonalisationString.5 = 464a49c5b2a999a791ca83107ac10ddd294c5ec8efdbf645072e4258f0ef2025
+Output.5 = 71ef604646c91a59471f87d7f7e968f06b079008e7713189d75a0e5dfeca5c95a8b2612525ecae1233073fdca57f68a58ead71cc0c9830cae1eb4e6f136e850657b507e00d3abd1caba6c7b36d2dfd562872dfe1695e3283bf3759421d0f00c50c43712c33ad6e65089572b33402c8a75374009d934af66b6dc93390a037e3db
+Entropy.6 = 8bfa430c3d068c53d4585dc8ec918ab63233e0f77a6b8515fcb34f6b0f4b6367
+Nonce.6 = f00c91f2b479bc03426ba64975e1a3c7
+PersonalisationString.6 = 3377a98ebccd45729efe0c12ce23ddf7f6ecb91241b5b355fbc005ab1e2e9c9d
+Output.6 = cfac175dfe794093c1abc24e74718c5cfb08b6ffb542aacf4dc966aaed2d52cae48f85022977339edcbfccde88f6eb03c3f4dc789fb0401ac63257783740168b789159b2ab4bb56fa00d0365edc3208e70e6b0cdd535a403c12b54919095500c0267d9cc69ed1c354f34d5f8bbd4e1282f7f07b6b233dd3d11b04920f503d597
+Entropy.7 = e0b146dccdb2e37ff596a5091185833eb7fba5ef5524bde1ee0bc9158ef651dc
+Nonce.7 = c07559a3718465d5c0f4a99eefb62324
+PersonalisationString.7 = 649f74cdb5f0301a7914d6535d3df548930c7e1427c75978508fed0471d39d45
+Output.7 = 9e8bc8ad94a1c5b4d2b46c5f2c2055cbc896d34bcbae9fc05c9f5e03ae2749110b50b4539a91cbf57ac62ed0cf3f50e76623a869b519f5a3e4293d4950d6c2d77dc7a546413c8725d2e666e54c381d6d5f45a43672c480110c503a7bc388bcbaa0aa431db2e54159fa7790f71bed2a78cd9cd3795a37bc7eefde6b442f39ebc1
+Entropy.8 = 845fd8931c77e4bf47596f06e89c215254a399f1495c49945fad2c5cb36d330e
+Nonce.8 = bfd5379edf92ded08630f328af6d8dd2
+PersonalisationString.8 = d560adb65f7b844d95ffa0616add4354d3c6acb5853efdffea71f8f0fb883293
+Output.8 = c57fb3411dcb917b6ee4a1f77b38de618bc454f650952d59c9acfcab49933d2b034414c8ea8da47d77bb3d8594ac60595f63b9fb3e43c21257fc3cae7b47cd1b37171abc54602312dd1513bb43dadc84a6b37bf0c916e8ef51da7cf6d051b0c1290dcfc7c9791828b6d588e470729f4da568f30e739b327e64b1ea4cc6fae034
+Entropy.9 = cbd7f084473c6168d48683b7944d4556ec2fa28742170586e75511af9180827f
+Nonce.9 = 74f44a86c386d27d9af962232348db03
+PersonalisationString.9 = d513dca6b39458c8b1b9f2d2f74098f2efb1417fa7f73073f9a34fe13cb1fe9f
+Output.9 = d1cf18a8232761dd30370c31253e5daf1be13ca524591948e0059c4e13e4ddc292df631d5dc8249accf981a4b1fa62dabc456ff6e3f4a972d587f6751155564664004ad8d957fd5231302b79e3243f72a3e01a611696d347ce3ad9a5e18312b71334294ebf1305c5d67266583e3fc9b06992a9077470cdfb74807e44351b8970
+Entropy.10 = aeb1ce335e02ac888506cdb89f484dceaf8e9a57b521d3dc47f03a82372a383e
+Nonce.10 = 70f20f150c35224dba780ea65657500e
+PersonalisationString.10 = e53a56519c5bccdb4326510b314faf0954f5bee1aed96a3126f3b38a2a79e69b
+Output.10 = 4ddf00587d70d1e9e35f252503e5e4a4b60ca6fd3de4fa4fc6f1dde8bffbcf60ee331bdae6fbf9d6ca9656e681cdcff243b66644e4808d71572b081760498604e32259c4a9d438c8134dbb8dfbb4ceb8913244e4516a36e8cf808ae4c91d65d56e5bd618db7a3ab438f3f6fb75136958a4a62b2e60d38545b177f90b9316087f
+Entropy.11 = eb94dbfaffab3c835efca8f6a2622a20287dcad7bae8b479bc9b4eaab2728525
+Nonce.11 = c3e3ca60398229280b765e0d0b53c3cc
+PersonalisationString.11 = a2268c8f7bb66f717e5e5a5682cd31901a192848578f0ca41867231cb7b26594
+Output.11 = 98be7dca4d36b878fdb708d367ccf9cbdc6075e06e3cc8c96d29e1ec5e01dd89d3a03e630b40bd1b4937fcea7386604bb64f4ac4effaff5f3037617a1ab52f3e0b89fd33d5b0e765f7234bce8f3efdff0c9c7000706ab96b22c673d9524fa6357d230fd12c77b490274641eeeefb6bc6aefb66a08d7522132250ceac3e8506b1
+Entropy.12 = 62a3be65cd40f626fa593c77f7fb098394f8d987e747691573fd170dc2863b37
+Nonce.12 = 38cbe852b48ebd1f07be7a2eee40ff62
+PersonalisationString.12 = 9f110af9f88ec6d2e0244b5a939aa8fef180c0dcf3aa53f4b31dae88595304df
+Output.12 = ab11fb7ff24f0fc05b13f6fc26dbecda3daf9157704c76a94a47ec9d4510a127dc60f9311306a0c02bb29d1bf7e01171743381774194728d9d0ba28ea8bb04d19eed67b205a7e511e71e3175c574d9dccae046ee9de2f38d360ba7816ba32f70ec2f7023e1b49de108483df1accae257e59b66b876cd5c2e590389ccd54e9b0e
+Entropy.13 = f7cd72cf750d99b41b08d1e88552119e9105cfa27c3038d1def40e919c63218e
+Nonce.13 = 3ef0bc4710cd8599dd342df67c4a6e74
+PersonalisationString.13 = 89550defa381aa25dfd1f60333c8a4d08acf784b538e13ec4718349fa7ba34d7
+Output.13 = e1bb1e2f3d4efb3378469779e538e1e1762c996361d14c400b198648a8d0ebb8700f73acc9d916c62f8ce74cc72357caf9d9d601c279de562c4e9e37b1b7cd45032ad93276bf785ca6022e3347a065811b2d34721d66bbe477aafa9d98dc3f5b34061d740434fdd682caff77934f4e00802c464bf645aff920d36a297e1f0474
+Entropy.14 = 7282abdbf2244658abe14be954a66476d48b06436c3fd7144a56d80a0f7df290
+Nonce.14 = ef68efad369ca5fe791ad438cf9dbbd2
+PersonalisationString.14 = 012ff5b08fe14fad65ebad5f15d74fd72d8577115e5e91262043e85a13a3043b
+Output.14 = 1779c05411254dc5ff714eb56332cdf9a378a160bf0a20ca2da9e4c3b4e3c425d2f08dc969bd4924560c8caf9686b27720307af8246e6cef20fcbc00cb1f137b6efe9902f9944c1384bf917675a52b7b816795327afc4896182a78d4664b98196f89c466d5fe1e2a54122035863c8bd61461b2ef9e7b469492ff63364b013dfb
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = f0bc27b45894b8dd8df1ede041521947680238ac91235d513dffc8edc208433d
+Nonce.0 = e395bf2eb1247d7a8f1bf0eb93999563
+PersonalisationString.0 = 30fafec33e0a81f029f5d2a49c3f2c9b64ebe5d864cf59d3a0a3f7ed23b9f6be
+AdditionalInputA.0 = a7ea8a0ce5b21697a01fb74f99823c7bea304c800b6c10053d3e7b8f63f59e10
+AdditionalInputB.0 = c8c491bd3580973fe6b7369ebb9eafbeb48cc1ad2d468c3f93672f51c12e3bd1
+Output.0 = d00e5bcbb7c9032c88564ac84b7453b07da60b189b768a24c4cf0160d6227f79f69bc62e5a7bcf551c386d3423a9cc77fd229a2b5f14d39af6dc965b77262f9d03e181552a5e2011aa7447a5e7aea97c9c56ef5b40fc4000d06a36672818e3e0ea894840ec066d1c38a1e32e2667bfe16147094f37f57da718432641f74fea56
+Entropy.1 = f75392fa224e1613b988ae2c3ebc2de35969e3b2b98e72fa1adf88ecfc2e7c69
+Nonce.1 = 2684df2b1a63c9fbf32cb7f2403cc789
+PersonalisationString.1 = d0851421b6414257390533042be842a319800420360bddf01936996e9ff413a7
+AdditionalInputA.1 = 58f4c582df6579c70dc8dffe57386c342922a67a9ee9ef28cbb8be649fdcb98d
+AdditionalInputB.1 = 0cd63280610d60b5ee1af92c2a3521126a2d9dac1c8b59b55f3acb43ffb6c64c
+Output.1 = a03997ed6d1d66fba5902610288a27ac5765fffdc5991e0131667211a8f5bc89c0f76dd80ef3ae9f35abe063c16fe3309567fb8d491c575bfac359f5fc0b9bd4083e2359dff3807261a7538e76332690608d400851cfc8da2b9bf8728419020e472d81d1790764f3de223f6aa2d33a1ccf01b2579124e311c0e42e60e2b77747
+Entropy.2 = df0fb5c0daf3d6a33f110f1366fd06b62d71f847257ef01a872ef271dddb3255
+Nonce.2 = 52dc78206a7c7b0b690d6822c56f09fc
+PersonalisationString.2 = cd6fe0153bf8958b8c647ddc3156762a33965f12ee8e70d0680222a079244fdf
+AdditionalInputA.2 = 21c99ce6a8949f4c8152594dac07cab3abc465c42ac6926c6d8ebfe223093cce
+AdditionalInputB.2 = b8a9b1e464ef4f7224eb4ff0daa7adbe857ecbb967f0570dbac11b8c78649b5a
+Output.2 = 55fed9acb61eb506b5fb69c4610eef6397672a1a4e268bdef30a7fcbe450f09f36647c52a45895cf32f83f13e961db96b1a452612b8c011642fee67e8132ce9023ea471c2ff064037053ac5866480f2e45adef8d35e4d497141309d0742a60d0fd8e525a54712ba73eb918858ba3341ad6b992367b32bdc1c2a01ea5611350f7
+Entropy.3 = 3f27e312b036c472581a941cd05c02f79fdb14f0e05d992232ae16c334967155
+Nonce.3 = fc08cd0cd3d9b542714f11137a8ca9f0
+PersonalisationString.3 = 73f1d71c8be4ae0eb2c6f380daa250020115ca8286d0e9340f76fa5cf3062fa7
+AdditionalInputA.3 = b8c91371e7e3d17494c9450092a5050a963369cb1b004519ae439a99edc04e01
+AdditionalInputB.3 = 5c29a67d1663d8e388287fbdd9fbfbd0e0be6a570af8866cbca11c76616a1811
+Output.3 = eb86f71184b2b2c31352f8d55a9d7fd04227e76d835d62e0f2452bbdadae22ed80c26d3196de984b52636ccff16db0a4abb4194d291f159ffeafd2f1dae997d04ee71c8a11cb37605a42e1b130e2c47dec5b632e40b53429435d73562b23c08c60d3648c386f9971b8c7ef5615b033dfaff2b18a7abebba1d9d11caafb59c6e6
+Entropy.4 = 4cdde683f4b7e1fd3d7e4d46e04024d4e7db1e4eb433faee7966ac011439eb43
+Nonce.4 = e74bb425c8bd6cf83b4d75f5bdec23ba
+PersonalisationString.4 = 21c1d4914c3d343232027d78e670f42d6a28c1c61acf9d52b44625f63c5f306c
+AdditionalInputA.4 = c7556c8da1f2e124c28a086b932d2598b4305161e429efe85d34494c84d998ff
+AdditionalInputB.4 = 7876cc1ff3757e4a86446bc453b083b34c48386785ca9d329bcd040a2efcf44f
+Output.4 = affd39d6b9ab6af3083a70f799dc50400dd62691344b529beeac79b8fabf20b8b51790c19ef9df300ee8b07bc6323cd93a6e449ebddfd1d477098ef1bda21b7e107edc7023d0311115fd02cd3f9b2436a21220bc39cb0cad519d15580459b013f98fd0a36dad709a544a387922667b462a1292f609e09d3cf40849a30fd468ed
+Entropy.5 = a20d2b47641f919ae2d3534a72a82e321819400cede1eef508e8126f142c5a48
+Nonce.5 = 8d20e8f0fcb0530898d1df71a5d9468e
+PersonalisationString.5 = b80352fe2d148b76ab9f6e336cb23942f2e984fe03efc7e490ab0f96b7136f26
+AdditionalInputA.5 = 264c077437ee2cc7fb669190a888f0da9f4bc7d009878b7759a63fd73e6c7072
+AdditionalInputB.5 = fd4e6dba392d83962d4da2848e38825a6c6e569638aa21fe00a6a4d4cb64f06a
+Output.5 = bb6d1a3fa71485a53e9c0e36ec0f295deb5eadbe5dff7837d0eb172c43a1a36466cdcd2e353fe9727d0562a143e82d6d472abbee3b1fceeed9cfe88a9a63c9888f3f60407e28182ffd071fd0cc15444ec74b5d6c46ee6853fc8229e5fdd24fa8151a55d44d717a64049e34497e4cb65f24cde8cf80e2021bd7a67ed1ea76b445
+Entropy.6 = 8d6cc0229f43084ab1b0f696664f098558d2282012f9c4ac01e03090cd085e89
+Nonce.6 = d2a3d8d77c664191c90461ffbbbf26ae
+PersonalisationString.6 = 4022d135a66a3972091fca3bfd32e56062b5a30710857c22a0948515d046b9dd
+AdditionalInputA.6 = 114b4d0a09b3df8ca4623a8f39216f59ddc197ebc14e144498c8fa6e1c091265
+AdditionalInputB.6 = 6df519590768d96f3d01af65d59ac0662e6c2a7c3291a63a46c6f932ae55eaa3
+Output.6 = f0045a024e513ecd3cec8fa440e16d97ed19d3d1994b3095cc35d11cfd8c222a2ce6f131d43a83940f1d15fcc0e5504de84493faddfa269f3ea2730db232eaf4de0568b409bcb8aea89ffc92272768a2ecf18d51ec26fd17b60c33b7cbdacd08982780fa0f6c542c9c9ccc318df9ece05df44f2fb106ea7b66e0803369e50f62
+Entropy.7 = 928824c871cbd0334c1fe1b0feb36dbe135cf2c15e56053b7ecd6644148ad88f
+Nonce.7 = 990d6c331c8a99664bad11c0235ba933
+PersonalisationString.7 = 10b52fc30a820aaa237e45d7797a4d1468c7e28e0f68408a649a588ae4b627e3
+AdditionalInputA.7 = 913bccd03d6528ea4fb6d091803bc30e454ee0b4a35bfee685e555dbe7c9794a
+AdditionalInputB.7 = 5de7b5f2c69e73e6a95cba27107490b00d8eafc1fbefa8b083c505cf74dd7de0
+Output.7 = 75189eb4b8ec27c07f21e62296480df944fbfda29f3ccb405b136cdcdedf4e3e75ba9f88279c6168fb1e194a9728c8834bc2982a9d0a45257899283f04ab95990d16b3c489602e603dbc67b8db756349b8dfa625b1f0abfe1c16be727e233c136b102a51681f6523385aaf96133d54299ef8f85ac6ece079fd55176d69d1d415
+Entropy.8 = d907f5aec9cc5ff472a08aee177887d231f2776f84398dfcfad3caa111b7f0c6
+Nonce.8 = 269d69b60a7f4d395c2e8c9c5847f7b0
+PersonalisationString.8 = f4be92cdee66bf95ba88f9d47ad92db7cb54e035e46b438ec60e5910aefb98f3
+AdditionalInputA.8 = b4cac4a29c31d7e55ada995cd67da7d3ff17830074cdb2e209780304a5d08d4b
+AdditionalInputB.8 = 1a131d13ae5b08414b8fbcbe1056621f6ada54ff90e058cda8218501419ef35e
+Output.8 = 0944ef17d253f5727008bd2bb78faed72471a1235342a6c17c80a6c62e197d8217f1825cf0750cd73d60fbdf55a41181eb316ed07d68e797f698f0046ec954ebd3a515154bd7a3d4a8ecf150a30aac1698250b8ff68d078b3688fd0687c36dd71b04da63feb41eb3bc73d67c464203995097d1c5c85067a5d786947addb568bd
+Entropy.9 = a8cc4c975595854253382485bb16ab271e1e1814fff59b147c8ca30c63dcb01f
+Nonce.9 = 0cab1460cee52a6fcb603b30bea38ac1
+PersonalisationString.9 = 11fb2ca962dadcf491ecaed9943286335b9ea25d7f78226399303e17e4511125
+AdditionalInputA.9 = 437bf2c671f855f39d3fdfc7bb5d3cdcf3481ade801f17150c907e2263f23667
+AdditionalInputB.9 = 126ed919d93f9e9cbc38f55ec38221dbad0d0fbdf83ebca8d5550fac89d94d55
+Output.9 = 234c8210b2f6543bee301c9d969efd9f5e0ce5594b7dca14ae0e604ad97e34cfa5ccb3cfbd2d1732193237e6d937c59c9589933632cca6701424565ee0dec9ac84f86ba3079fd470d1481b624a7424d3da2fbc4a0556c61b6f78107d4fae856f10636bdb8d534c2abaa63ce312e7a39985264cbf29535a639daf82d32b7e26ec
+Entropy.10 = 289f634be275ee54b8cda92cfae2b91d2b651651b02acc6a2234d590de47aeae
+Nonce.10 = a9c4d7ca11537d6d63030252205195c2
+PersonalisationString.10 = 4f3114016c87783088a126eb6a0f95e1e3a7d19fa421f421ab7bca99983efdaf
+AdditionalInputA.10 = cc60f01ebee620ac071e516e94065603f4ab92c93a1f965c030dc2beadf715a7
+AdditionalInputB.10 = 712d501d331fe0651d5429109f494e6d1db7423798e634c41e60642358f1bb5b
+Output.10 = 17d6e31fc8faad7263b3fef90923c257fd81364a3e57ca23abf1a6b02059a755d63bb59bed325d8d5301a9701efb27032f0e2a4274f11214cc103c8a5a3d6a00f4e3cc67bc73f66755b87779fd1f3dba16b7452c2b9cc30921ec0523664b771deaaa4d1e0bcecb38ff5f647e8de382909e49932b60bb403da8ba5145af3ada0d
+Entropy.11 = 7bd8dbcc115aa13ada7c2aaf8416b6091863e8e53cfa89557970af4f5f50ab95
+Nonce.11 = f7db40dcc52fb369a8d1d187c129334a
+PersonalisationString.11 = ae15b82f6155d059d2f21336a61229c10b459503e7557517fecca281a969b054
+AdditionalInputA.11 = 9c64b927e9d01b13c219dabb3157b803a88943e81ddca85cddc2ae20d10768dc
+AdditionalInputB.11 = 1886ea6b7e7bd81f1d2055b1b64fbeb2ad691c720f50fda3b54583a5daad38ae
+Output.11 = 9c0fc0cac3c1785a868be8ede990d1546fa9def993e4c27444cd02580339ad6d80ca95ce46a32ff21bbe5bfbaa5e8971b480c2d27b5fae63405b9c58145d60399b47ba4d9982a40f63e4eacbb011d034f50fbdaa78e8df72098f01ac1271d6ce60b1b81aaeaf2af63305b07973de44d92d742e7fc04382ba99d05c3037471c86
+Entropy.12 = 067aee31d2fbb808bb7af34c0cd54f1c22be6bfb54a809ae8ab83c0a068a11a5
+Nonce.12 = af9276a296ff30215daf2527b199ed9c
+PersonalisationString.12 = 42507df0b55177901f21649527098d5f727da59af570cba64cbe0b890f833982
+AdditionalInputA.12 = 830870a04f92696f6cad4ba20e00a764982ca29df05c828d938114a1c265c51f
+AdditionalInputB.12 = 2e262c618163fb20d878b1bdb8dc1fac96f020fef082340a130dc503e9986bbe
+Output.12 = fd33689cf54d1a59b7efa6bcccb70705d2b0c3888d2ec956f967b337dbfe88da9856eef3509fd92e58b893b42d37266993444b2f1d1c41d0546ed6d7e06e60259c4788f46b5f2303634f54c3ca2a5b52a3b06aedf43645c36743bf1122384d1c9dfc1fcf79133da93d75b4d3edafdbbc0ffd7c22a0e758636e2a99eab52db64e
+Entropy.13 = 3e8505eb06503cabc096e937381ab756f980124b86fa2c1bb80917a387254f14
+Nonce.13 = 286e3635acee4058942d65d4c2994184
+PersonalisationString.13 = 0f85ce96c2cd91a4aa1573dffcb1c77bbc0666152227e53f8bedbf38771382ba
+AdditionalInputA.13 = 4cea3bbbe673de595a21129463579d3c3c0d228f65b319a1c524cc55cc94e9b4
+AdditionalInputB.13 = 4dbc2ecf09129a471044201da98c9adc9916ae8ddecae73beb9641bbc7dacb80
+Output.13 = 2f729b2b58487f5149f7f5033a7c1183e9c2d993b08c7f33d0822aa3ecc528189faed459a639f32ee400edaad9bfeba8244b9afaf290571b83a47a9dcd21827149a9cf68f63bbdefda94f5172f01bede9fcc62c827767fc56958ea24626e47c3817d201f66abb0abe1899684655e3a1db9a9b8c7e8b0b0127e363452ce858c7c
+Entropy.14 = 54be888a09fff21a8295b05adaf384adac63ab5b48a9d74622b97272deb78a87
+Nonce.14 = bd58968d97d87faf1c483f026e5a75cf
+PersonalisationString.14 = 72bc28b4561017694de89af07e2aff548d900a5dd612c968f44bdf7a5c41c08f
+AdditionalInputA.14 = 77d998ddfd7ab7577ca9f51d6cfbec955aaf9f88cbb3ae32db7f7c460928823d
+AdditionalInputB.14 = 9ebaa09e7057ad7cfbf02e8f3143ef7b7c1dd6158f641815ecdf8e4a65c17f19
+Output.14 = 161efdc30cdd124d4d6b3d43798dd79bac70f494c3ebaca111cfa3d9343bdb73ac0def00776486584f932cab74ee12a391cbf4890b10044f7de6c73f973e43837a43b7c47a1a9a36d7e62f9b7ce40064994a610b92d68c6d37aa5d9d92c3d858770ffb8fbd87324b49101bade3f2014bcae7deffc1e4f6a1a91ddfe7e6aa33cd
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 6b8959a8cddd935015cbeceb995c5418ddfa7611dbd75671d2dd1b5747936049
+Nonce.0 = 8273a47d99dfd7f6397e198551c1b065
+Output.0 = d2b00bb883798f8b4db72f53ea28a6c87019085d858dead160cd7d7f59ebba333ad59542f1351998a1a5ee93d7bfc5a11c30898a7ae60a2a98a5b4c0421d86306c5357422362791eaa22d913a91f88805c34e97c5ccb0dce5182a68b429f46c9eab04a134e16af7967630dc53091269765a806f285192866d8b44b4910dd3134
+Entropy.1 = 5c87b92d5bfdc04b6e7ea8c424588a0384797d71546be7772a8a1eb856742c5c
+Nonce.1 = b6022d20ea5bb6873a66ae5b2ff35b4a
+Output.1 = 5274aacf6dafc0352e1362e0751ad929d789370e97c066c5c538b574666c5fc96a3d40682cd461929c9cb334e525c23a3ac64101c5ea992e94ee744a4ade3ea57e6ecb1a99ecd42a406ca5f9de7e57e6539955a80fed2a094d45095114427d2b156b390f9613845332067f49ddae05eb75977fadda554d65b229d390ba6a714c
+Entropy.2 = c7713c833739b3f814ca26478a80b4226c000311afce895b2d57ea1b2be62a2d
+Nonce.2 = eabde28b11e5a74bea96bffbbff23372
+Output.2 = 081d6e1f6b07d7c1059e9d2dd94c7d05be33c197c476a6834c96e588341a363016468113f4cdc34b3192cafbff1dabddffc3e611db4f23dd5ae866521397f4f570f7bccd15b318eaee7f24981fc51d2eecfdd2cabca6cc24c38b97012517338c3b9ec9c19a2ec97b30a03cade30e941f351c4c18c05005376bba014168942c6a
+Entropy.3 = 5288e404f724ac7c46decefc0abe0025a499b3c40b6205bf75188b56edb4080a
+Nonce.3 = 999fe785ca96a292c10ce6bf04c65fb3
+Output.3 = abcdf9ee977cc5028d86c7fa3fbd5338a6223644e8083808f30e49c5f335d5654923fd26d84b972405d06bd4601c845a0b98cabeb87e25c8d24e063748b3e3fbf0c161faaf2f339efe54395509f1a5a04f698aca4010438cd3caa1648e84e934b067e0c9f1a9b5489d30edc160cc9633598f949e96bfdfefccacbdf104b0550a
+Entropy.4 = bddca3bea89caad07d4738a9102e37db9eda2b6bbf49a26fbefafe1e489efec8
+Nonce.4 = 283b34d93edeccab93c19a64d1b6dc6c
+Output.4 = f98dd65a3f940062ef8c17ae1ccb0e592a7488913269450fdbfbce024b59fff234667ee811a73e8022c70bf4dfb70f02e334e1c5945e63e6164318f0cf64344fe8bc1107628a9335f718f0a4a8968054fe7311b2ffff9e25c0db8de396107f7d54acb8453aaf16a99dfa435e0fd2cd5e2e40011f5fc4ad335523ac0c530ccb90
+Entropy.5 = a65a81f933e09ff147e99539819ee8d9ccf0cef5c40c61d01355670161e5a21e
+Nonce.5 = 2c97bd8b2b1ca680bd30e5510178d389
+Output.5 = caba65a5c56aa4bd9de518494d83dec8e0e7cf81edd57013be3ab8370dac3f5118f568a460dca8e126f3e197cffcfd88270e80de2630a8e0c8b921d8d4b49b59e2c69b0d84180920436bf53a6e87883986216c82e76a41ce1f0091007aa95ac98e1b24c86a945844d0024d22e66c5553d11ae09d72d7fe1e71634b3a18015f8b
+Entropy.6 = 4ef4884ccaca2c0d21a0449945e4c4830cffb670de3230a94166b9aea851167f
+Nonce.6 = 7076c9ac76169ef2c86de3d57c310a37
+Output.6 = 321a73d3b018d1e7d56703ad895e83f95fe527c89e27aca2ab8880f27b93acef790698c3d8f03c463f5fc1424ebd83992bddbbd05da00d05ce8ae90122981d3df71d7a81f70ac6faf3b15d7e46d86182dca46d9708839696778fcc345a4d7b01b88a92f3592b7ed4f12be26e4046c3af82a5c369e98e085d6d30cd549801a63a
+Entropy.7 = ed0f1e9b57791a225f2f30bf3b6b23b5b7e3522891221f4104a3de50e64f253d
+Nonce.7 = 3b1511eac28053ba0e617ebe9e3a855d
+Output.7 = cbc2df37fd9c3ea926c75b516d1a23fe69e720903246e79035ddae60530bf21758246dbb404d4685c4cfcd4f678a9c30e59be13a3b4149a2de84d74daab47cadeb43eae79c2a40f5b30cc12450872f320087c5621ccfd94deb397be150ef69db4e8f8fc12899aa174d11b9223013ca887c427ac03f7c78419df940fd86b407fa
+Entropy.8 = f17065ca3d67cdc96ad35875bfb0c5ebc0a3b9a0b1229fac931b3b2bb94bdb8c
+Nonce.8 = 1bb5fb90d6bc99d68a121a506651e0a0
+Output.8 = 0e49c041f17a7e9efce3a648635ec94b21e85ba0926705a46ad1ed9a6429ecbd75d846cd8aa493c70ee16b4064b4829ed71bd3ac43aa39c83aa4b083467510ecfda55c58c86aea9e96f346c8c1d2c24704d36d11a6e9a8ef4cd523d3f6a5a3c58f63fab379a539d7ec0e2f2e74e24c39b4457a7994240a3aa9b675a199fdd738
+Entropy.9 = 2329c54d4ff27ccf43911dfce4d7089bc7e1dbd097b8e54ea58000d1ab075917
+Nonce.9 = f2ec3e850028ee960871dc25c3cb0230
+Output.9 = 16245b7f998e714cfe8388088e00d17796e4fb77b520d70103e8af876005a1afc48b382e2c05b72c4e8b1ba1d918ac2303a02f33e02383ec53ee7ca1ceedcea50963d8d57ab5e4061d6b1e8afd73bdf9d064b5d4c977bb27e2b79320077a0d368f727aa3ef95d70d5333dbfabb9ba5cf958e7be79d7eeeb8c83d3b2e63060673
+Entropy.10 = 20b3a9c78aa533afb888486dd4c4a25a236205724fe4e4a5f769974be2089b8b
+Nonce.10 = e96d564dd0b12ff8d2872495608b21e5
+Output.10 = 01930849a07748b0c2469160afcbfcccc4bf909df5a4c2eae684cc08e28883142e760e7884bf10873cb3700fcedafec4f2dc4429fa712546ee750bda0174e94e35f4cc04de4c79055ab457d9629168b6337969f6f2128a7a7e2a4651bf99512825b851217df9ca15905df4ba516119f84d0c8aaa3f6cb3b5fcd3a29dc55f940a
+Entropy.11 = 902c4bef72d4140d8c7a31406880f8e8a9e2f3e6a9b8b130a8f9a9e7422b70b4
+Nonce.11 = 25cb3fd05429899977bb62077b55341c
+Output.11 = 34bb5610fdc5a9668cbdf35158bbfe8854ac2fd82dcb2dce70f549cf9152fb3380ce054bb12f4e4e9a1e3d507f8fa3b7e63790f5d5fa4fb987ed6c67bc1ad0c9dfa3cbf987bab4392088d97d76a12cfebea471ebe49b11f9e125b78b49ce01d1d932fde99cf482f902f2f5ea444261eb25cd7c6e9ddabf296ce05a0e2e01dad0
+Entropy.12 = 590e6c0cfdb6858bd8820664684bad3f2c6e599b2864ca497f2dc9a6d2bc4237
+Nonce.12 = 025b0b96dc76e414ee0364f851f2bca4
+Output.12 = 5bd5ef1b1d58b77f86f6b33e7afa14617622672a27f599dcf938dd0585cef44e41b736fca01ca13d773f6117a9000ce6cddc0119f60da8e2d07a0f23df8cc623c3a597f86c1b6b234448b8e056433e1ced41e6c9b909449876ed0ece18ad7371ebb86cd765dcc65af13ea4cb35e82d3a437649373fac9abe4099d15d2547ef3d
+Entropy.13 = 4a90c6acd54292dbcd698f061143b3f41331008d8749da24034c77433d9ca735
+Nonce.13 = b2ca57227002eb0ada32630938b908bb
+Output.13 = 880876ee68e2d0dcf07951479e1002eee41dbdc5c4713e818f7cd8c6928ab600bd92155fe52a2f8518dfbe430c3f81bbd5ea093d012e8cbf8c010ba3628677a547791a804b5037a95c51f33196435e7235573c1fa173b6f28bc1cdf60944b8a2b6754c693a3b9ab1a59791118988357b0a4f95f353ee7e0dc4f3bb42998222cd
+Entropy.14 = 0653c409e957302f6eb62bbc4f42b30942ff7860e7c38dfb2fd26b164e83a713
+Nonce.14 = 273f7eab3dc9bf11216d5216bd12478d
+Output.14 = 51dfe9851da8d7d5add3dae413d8bab8bc7d1fcecea00795ffadce047d5243ae36f29f3611fb8cb66e98717a98735384aa6a310696356cb48f4672b2ddccf86eb44777c1616338792629b6cc6ec2b66dbacc1a6b66bd9364914f1f43277f6f43e13145fcdb73a4aca6b784f9084d22c967033651da610e9a85b1eb7513683dc9
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 24cc653fe80df97e75ad1cc6fb9e6dad7d66f39090256e264ec795de1eca00ee
+Nonce.0 = 4b9c30bf6c8787ef8c27ba141918b22a
+AdditionalInputA.0 = 31ccb681524efdac6580982cd1963070b6c4490acd9715a1fa344e27c3ee110f
+AdditionalInputB.0 = 9ad57d0c1c21803b2daf82118881a45df160d2141e819d60765d95d500d236e4
+Output.0 = 0d10df6b85789ad7a7a624def83353a90518fa0f8702c6105ce1457f29396c58d1922d31f35d729bdb54769655b3fc40c3fb770f3159ff42ab02dd2db481f9c7179351d772ca68de52cff51261138cdfd5101fdb2500f8d5eae73c3edafef37c1aa79e7ca14ab81a8f6d8f19098028df20ebedbae39c96b5e5751015ca265bd6
+Entropy.1 = 5cdef119ba5619a65a293543c246388586074583ee20e05d4d480e3986f1f987
+Nonce.1 = 388e9e48ff345a8b72277c5fafae97e0
+AdditionalInputA.1 = ff06feff16be98a6464e3f3c42e9e4e936d4ca2f3443884e4a1fc99ca1006f16
+AdditionalInputB.1 = dc25b55658a946fe0a020805e1ab8eaf89abb2a242baff7f9c9e61a018351ece
+Output.1 = 072eaaa7d7cd687c2b93e6ca5ee41be57e3dadf9141cfb96a2adfab5278d85bc8a04a0793ac1700abcdb35d779cd4de28aebd4d2d6a038e4efe4ff90b4f3e76ee579860e2744806b2baea333fe1b7b0ccbf53e83094206ddf5bf8c0f0bfe83fe1a3969211c01ce5cdf21dec623181d94a1e12db15bf9a8976645e935e99d7752
+Entropy.2 = 9116f7ac6a9b8f390a14eda3ee038dd59eb2c81210498af3d5e6da03f6a53afc
+Nonce.2 = 107135e675892626e8d76acc11c5fede
+AdditionalInputA.2 = fb59b7c31d5332c62b34daba52c8c10a6e88168a8db5efe767307decf5ef25b0
+AdditionalInputB.2 = 3a59f7f4d81692159ef061269403051f939c455e3de536d7c6f2f5469a839dbe
+Output.2 = 2711f36494ac072d6804993de3c4a697aa876d7028905772ffeff8fc117874539a6dc6384c478c13356b3bb00b1d0dacc057dc519bf49013039034ff77df965f2e624876d532976ad4c91523b793ebed07819a32ef4262c044df6e72e69c609bc18298e93c7e83d0fd2166b110e1ba620b6bc4c868e58de1b56a19e6ce3975d4
+Entropy.3 = f0e87b8a61b7642d8260d5e392aa117245851eb0e959626f9b509fea2b3ee6c2
+Nonce.3 = e7a0714347143a6b805936a05c518e64
+AdditionalInputA.3 = 6c03e7c903d8318a764c1c6533b222844eba023b3f0edd0633ae260752302eb5
+AdditionalInputB.3 = af70bb17fb6976a6cc40c2a08caa917f9ae9a05059d08044fd6519fdd3da9cff
+Output.3 = 62d08a5dbc67e9495d5b6754822800d0b91a4b44ed0e85647fb2500136dda299d2637bd0b2b639308dd562693d991e4c8a03682e514799f8e16ca6d96526003236ddc5d201bb480bc9b8cc08c36df82f823d6b390215328d57b6224b5ec9d09fc2ea45b61fa03c08096292d81e99d1ab58ed6348ec7198b15553e276513df2f2
+Entropy.4 = da74c824adfc5d172c57b504001f01d98745e1a26da82ac7e3253f8402daa7c7
+Nonce.4 = ffd6994eb71ce46783f7804fd89ba314
+AdditionalInputA.4 = ebab19b8af5e502e12cf27cb0a5be4876d72d851b03df41502cf0589a6b692f8
+AdditionalInputB.4 = aac6d6bbb99b2dec9f2ea0cad7b92aacd3a9a47da73ca606cef6333cc505ae93
+Output.4 = 3a115859d79bf8c03bcc9b87d82b9745cc34c99666d940233a2d1839e2a35d9d4b59404301e558a9c00ba99ecacae80f205dc16f0e82a641de15600b67dc721ec280c48f42260b079a5f15c09647426ae3c85ed47ce28b67c4f3e70e5ebe9e7e9e968ef45ab5d1501fa5f3c037e561b36527c0c3ec0db16ac4041f3bab96b34c
+Entropy.5 = d3328adf624620c72d9371a9717281ef69de5e45d61f3d6e712f0806b1093774
+Nonce.5 = ed9732dcf4291e121adcf1e1fdf33f1d
+AdditionalInputA.5 = da6d9e2b7d6fd59001f117696d15b992552a372b0b1cb65b88f021fb087f16f1
+AdditionalInputB.5 = 4dc6df885c25f176c14b25205d7c8d8381562a1fae9d68ddd18c54b28183d947
+Output.5 = b3605fac5833319aa7839b71c6bab5437bd0032c951a7641e1b4f26652ad9abc8a40efe2a3f1199629312cd803d485636331170701cfec8533e70f8290e1b2113c47694a5a489431c34e485b869bad03ad36e23bcfa434a316cf2d545fb6a13386ff70fc342251499a736ac9dbf0dbf25e9b071969ad8f2dd4c7606725f5e7b9
+Entropy.6 = 4c2a3fd749debec779518cce4c20356ae719791cffe49c3dcb56bd784bda783e
+Nonce.6 = ea3e3b7d9315dce93fe28f741308cb04
+AdditionalInputA.6 = 3f7006990170a8155f7f1835e44146e399a2c3d24124f089550438b8ea063f4b
+AdditionalInputB.6 = b9b8ebe09afa27cb3a4c67ec6c6968e9dfc8cfebe616a04e6f304668562de33d
+Output.6 = ef106e726b04a5ce96e875902938de91121dfdc1640f94cebb9f6bf73688ed0e1475581fe0121019fce7cad2da4f35fac5864cfe167fab3b1914e80008b5bebe9adbaaaa1083e94f8765c6a911358b1878b2b20d0dc3de9e72e63fbfa97a40fce035131c8d43e28a96e33233fa58b04d67b6568946697c0d934cb3fb3fbd1300
+Entropy.7 = 8e0fdd1f3391c9b4f4a88f051f498e4a5da7b82f6e2c2d5114bf4e40b8c6bdf2
+Nonce.7 = fc182e1bcca3ae17faa929f2c1f0f691
+AdditionalInputA.7 = b644f90b63ee94a005ff41563a859a32b848b1d52c6e1e9604f9e6ee04f444d6
+AdditionalInputB.7 = 148c1e8ea041827279de4853834df0eecd680f0b493adaa19793909a405ff02e
+Output.7 = 323b9ab6367e37ea1ca4daadb7c3906634d6c254826c29d2308fc33885576cd104d4ef05716ed68f32813d134391027b0b5b55065952f09eebc7f19cb041880ef0c206f078a4ced92ad248ed335b64206db8fe78842393cccae580f510a361b1b225198c2f0befac6039ac6d0dfa1d482adb6f0058aeb7aed3e8dfdfaaf6cc7a
+Entropy.8 = e8bd0911534bf0b9f21252a38871dc1a417f65d64dbab3db20cadf66704205ca
+Nonce.8 = d116be0be1d771c3ade746a0ff04eabf
+AdditionalInputA.8 = 0353a134b28c09f3995c9442ccf8b12863a6a3b1e0a0c854c2ac20b59788caa7
+AdditionalInputB.8 = 459b27f02004ba211bfc7c545ada007c6ee16aef24bd55f728d83439175881b2
+Output.8 = 031fae8c5ba4e15e500ad4129437f5af91b30d28d71a1f8569a815f22c2b4c1311378936f51eb5599221c630bf860c3fd4c116caecdc74cd8a36a90bcb4109045680ea588dda941ee140513e47d7b544f3ac78a780962a9e9ccad48905004ee441ef24cfb1b233717bd4041120b5f4e2ea80ab43fa28af26da4037d09021b487
+Entropy.9 = 64a90f18674367b4e78fb000f037fcd15fca064516acccfbacc69cf7aec6768f
+Nonce.9 = cf16cf470c20b2239721e784c15f776e
+AdditionalInputA.9 = 7b488587e5cb12d96d78bb1a50769a561ca4bdbb4be4afe80951aeda08f63488
+AdditionalInputB.9 = 8d4cef8c01c2c137fa015da5e854e979ed99ea92dd55f384764f9c8553ea78e1
+Output.9 = 1f492d12a7fb13acc24c44e74e2d18955f152b58e4575c15dcbd434ebc53efeb7937e42785a376be7c5e4a57586dece56d25511b5a1a134069e20182af583677a237e22c8d7651999221b348044cc54a67e8afd1b9cc38fb8290684d303dc1b69fcd61faf603945986b02e391ba9d0980333ad8d1596d46c52b27cb159432ff5
+Entropy.10 = debac482eed6ae3bfae7a11c846f3ef4e06aa5c84a1f079f33491a3d4bca52bd
+Nonce.10 = dbc4ef8868703f753c42a9d2eb5d66c7
+AdditionalInputA.10 = 6344e67575c5b96e2f02c91729fa7581f9be59969d458bf0bb6eeefb979eb9bd
+AdditionalInputB.10 = ac81edf0c682ac989a8067579da42dbc84c882aa3d638c88a595f9654d8d16ef
+Output.10 = 034b76cbc41281b31c5cc1bd955766af5f002a341dce5764e928326c785d93701793f4bcfcee528910de798cadf4f4f6411030376821e7492131f45b84d341fe8c4a78d9e701c50a5d276a9bcfb9e166ae9101e63f238af9809052167d9248489dfbcbd5e9a82ce2288ef439b532c65ef71c949bc0f6ff861f404650e2ef5c90
+Entropy.11 = 0c9a680da50dc2182bcfe5f6503856c2e905c2e9712d22ff65196a21546668a5
+Nonce.11 = 0c2542d05197ba5a8f99dde44aab15e2
+AdditionalInputA.11 = 8347cd578dd1f0b9afaff05e0d46eb526ca3bcde2ad8ee4c0091a80b11f65584
+AdditionalInputB.11 = 21d57232ae5f80a0200c1d36dfed1146efff6366a57fcca1b13f70bbdd0d69cc
+Output.11 = ef35db17311bfd3d61d3e2e8c3a2f81057030fdf4478e416732f02160305829fb5eb75b25f1a87c796e6795f8422a56b8efd4fcc05707654b7daa62b3973fec31478c5bffdfecf48be0f9ffd006a08516a1fbf41b769f7129fe698c177650e2b62b71da3c03443e02c0e8bc5d8e2d51885d3147b0bbead22c4accb599b006f76
+Entropy.12 = 2de9d4773d9cc00c037cdeb8303d3099ab03d3a8aeb62b92f6ea197dc6b34f45
+Nonce.12 = 8b8b68a9aeabb1e9219c04a59e271c99
+AdditionalInputA.12 = 8fa6d8854395e88e809c63f6dcb8c48b717bdd421f494c5540e3d807ed8ea385
+AdditionalInputB.12 = 6c0917b0b69ccb1724365e5a6337b754b0a896dbd31b60d9c3664d48e43449a3
+Output.12 = 343499dcc813c56ee45a07895d1e4100d9d58e7bce6f1e8a8692a2889c4f3ad52ee20962382e4881fe7fef5bf93da6c4c8dd788c9254cbead5af793af1617000ad6df60a6ba593412b51391dd0b94d2e4b7c5ae73e1df9026eb7cb64fd89f1617bc2e6f4ed4dd0145b3ef50dcecc90030574786f0e3934d5e018089be5188c92
+Entropy.13 = a445242950877ac93887ff76426bfb577bdc7c3717b602c15596eb953ad37ace
+Nonce.13 = 9e0a3d2ffd0f10d47750442dd7326758
+AdditionalInputA.13 = b9303057f92f0af07753605c2001a703bfcc7d4dd0963e567a44615d19bb5849
+AdditionalInputB.13 = 07dafba56b357101f909e959ba6b7d88415196c9967f57f6c424615ee02a9fc4
+Output.13 = 5b880cf453302d5428f8afd5ad4d84d02a3039c8b8ff0458d48fd29d237934bf6df76563f56ece3684f74bfdf7bbd15679a19a3c1fdf9581b42d7b8f98d0d814ee71f74b1ab65ba70c6eaa6370dd3da3228149441f7f14672ecacc74d3e2e2d3b6e2ec20b415e5abe814488e78c3cab3290b7f98368ebec09886d7e53b0af39c
+Entropy.14 = fa808f4aeb1b31fcfd519450bb1f0a91fdc4a441c9574665cb53e123d801b7fc
+Nonce.14 = f9675292f5616b1b7db50cfb451c2dbf
+AdditionalInputA.14 = ca73cf447f2fc3984a9de0290fd9a984a8460ac715cddd9e8ed99aafd6f752b5
+AdditionalInputB.14 = 21dd9cb8e146954a9745fabe039f6f52ba8200f575e9bbe19c703b8864f34e93
+Output.14 = f1b153ae274a380c28668f1ee2c8c3a91f5380d41bd611d974e4e419a37debe664d0b706722184fd3e805f2ff05554bde7219023d1f62a52970aedf4d77e7b4604cac2a804e7b9353c087752f7f185991b10910724d0fd06dc6526d6102c8d0ee8c32f6692c2786d3b715bf3860539689e3f415855ddc37bbb6750972f3a45ca
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a2b29309b2f92b994cca9341763711f410de0809864222725b0a6788c93c4edf
+Nonce.0 = 9ce6dda51f41070595a1e46ff04a9946
+PersonalisationString.0 = 7a76798b54541f1e467d8c9b3abfb0fa4aa8d0198dfdaf8f76018a44b39ff01e
+Output.0 = ebe18d74e532f6b2fd39cc67578a201846b071455399e28817f88d821b83a7241d67b3339e668590fe7095a777e91e648d535acfbbe6dbed8da2a4a372afb6665a450252758a311a26a90c59a31b2b231d7d23b5b96c85d505fd00b8181a92b71a33c7d01bd4f9d99a304fb5ee5201a8d252fb56cc41e631f489f153037765f1
+Entropy.1 = df32286b47c0ef2e1c970a7c3dfc467b91ca44f6d7a1f0445b42ea0d837bc950
+Nonce.1 = 7546e66191cf9e9161232119d7e13c69
+PersonalisationString.1 = c931524ba9e0e2b2f3f6022feaf919e26747dc6844fbc5ba3860aaf54bcaa0bf
+Output.1 = 922dbec1d4cbb4db10f0e820df95fc89dd8621ca5594d5805d15d705cd37cb36a62c381ef769e7af533af4093840bb2831f49d280a8861d82b2730ef9ad99c219554d8975743d68e8690137fbfc2e5533395c2399782e914f1d79f6dae6f2f2b9baabc9f6554955dc21f07aa9adb322253298b0beed2ff5f7a4531b53e64393d
+Entropy.2 = 6fce9964b6bb05281bbd8311590012e1108271c8ad097db0699f7ac3d67f3a29
+Nonce.2 = 2e045d1cc4eb81ae38413fa6659014fc
+PersonalisationString.2 = bea5d64a6baad14fc071bd6762a5c12479453924d5aa5e323d21221abe198dae
+Output.2 = 212445f37cc2a1ff5cb25e8a2af91bd27fe35c51785ce1cec4153cf948cc11b306cdcc0d51987f966f4158ce0fe7d220da97a15e673013d935cfc2fd02387ab33bae792855a1293e7693347d247201d9197bbcd4aa62e8eddfd0a451471d9b87a2fa364fc5ff26d3282628284b0920faac064279ca14115193a3b34446987a6b
+Entropy.3 = 9f8b0f7624abb0a45e80b90c5b3553f8d959aff3f815800e25e5240a3600bf62
+Nonce.3 = 10c7fc760070664da80fdb1ac11e2d68
+PersonalisationString.3 = 281bd732a5178359bd5a41d12f4dc2d98fb765e770ec0246e027e0111f936482
+Output.3 = a7ca3f6d2627c8206ec0c2b2384a280704e13e25438e1d0b3fc8adb5007ba878d1af2252f931065e199a01067961f4126b68f7f2e57b704dadbf9e088a5e46414ad2e8e5c737c84076f9b278b263aca7cd47fae99e67e4165f0cbe4188f07a96f9642050c5f4cbe85ae6ad3f4d07ec16466af69016f4e4991f1d73bad6ccbdae
+Entropy.4 = bf54e9b65e42afc599b1a12c8e2d375c6bee191b726f3233251cf7d54b81042c
+Nonce.4 = ba8ce550953593d132ceb2a745e3c389
+PersonalisationString.4 = 49e27487fab5d22994ceb07e334374258e77dfc044aa233be3a3671ed4d49444
+Output.4 = f1ade51fc3b79e8a2a800ba853a28e1575a89fddda009f2539c8c33a5e7262e337b4a72ed687963936d39da22295a71c30f80c4712ce4f32e09450559e72e1b1189ccdf54b1b13a3452716d48a2104c6855a89c4fbf1f0544d3a16e7f8b5e5bb65130f78b75e648bf19f70548c48d42e9267c5afe31ab45204679748046fc692
+Entropy.5 = 4735955e851914d0d4d9af22e10edcf09e9f27435c29227e4dc2b7fe83081a0d
+Nonce.5 = bd9b292dcbcbf64e11d402c30a76b086
+PersonalisationString.5 = 6c69a375f34ea77f015324b2638db8078d005d2ed6e719d3275e02fbe277bd78
+Output.5 = b1b0bc1e3170d66293e5eae853477cb0d0124359d39c03e7797d0756a696e6ab432e2e30296897b065ff2d0ed352a06fed9960e25c562bdd16a9e06befa4c71d97c6a386f8d9dc15fc8510dce6066e9deafcae0854e6919255b4fb58e74ca74346b898b33ae6c67a43d3a4d9ff0c733ae037430892a890959d22ad8402ccc789
+Entropy.6 = b3a2333c8bdfff01ce14a548c449ee740373a4cc5230d8b98942aee21f37c850
+Nonce.6 = f5fec1553d0f592a169e29fd589ce3c6
+PersonalisationString.6 = 1f6917764a67b698377791dc5a485afbbe61d9a31c5a51467ac626d4dac4cdf8
+Output.6 = 7c4acaeabe4a2286a99a69a79140090c274c8c77b17743caa20df2fa1a53278ffe89ea16011058ea42fe34513b77334b702efdcd10ca177ae6142f8b2659e9d798933dcaad33c4c461dd22114ceb33c419aa3a6cd39e924ad7d67c4473c9e2c7c0c5a8527be4df29dce0acf7aeba64c0361c6ba00593acc913c225b201ea6d3c
+Entropy.7 = 7b002015b18111df35257b166fbdb5164bc6a7c40d5ba772ec156e0e743652c8
+Nonce.7 = 19c0a51144fb8075ea7940d4f5052726
+PersonalisationString.7 = 7b60ffba6c8ea841bc142ea2a5f0712ec5a388e66c782a27c24948184ac14d6b
+Output.7 = b6fc6ef2cfd4d6eaa83d8519456eebc0e4252f63f94596868a4221f41f82f58c1971b1fdfd164ab9f537b491c823608eeb2ca0a099762d8eee4ceff82067fb7bf6cfd41b60cbeed82c3a971fc00b7f119d08c8ab1d69ce9ec63639116964cf29d2bdbf22213241493e6a2a08975e76335ac454a892052ce973a557cbcf73c3af
+Entropy.8 = 1903fc982cc88bcf375bce7b64e493ba9733a728e81caed82a0e3a86d98b7530
+Nonce.8 = 592c7e7a4aa8d34cc21afce08f230249
+PersonalisationString.8 = aed355a1a441126913c093b512532afebd9d9a847162534654bbde9681c1486e
+Output.8 = 7e912023704f16153c4536fd54b7f04233ad944f5d844605eb804d26f1ca9b67fe7eda2f92d0dbec79532739d82d10bbba01ff4a54a1d2924423dfe55c279ed734e34d40123ff85cfaad3057ee0700940c6aa0ecd6fb0eb19b1e65e687315d59d18cf713fbc21dda8dd810b1df9b82dabc045b3122fc15311ddc07a6f13a6d3e
+Entropy.9 = c934043116ae190c4ad878b68baa55a105ea3d1cd1a23e8666a3c1b3e02ba71b
+Nonce.9 = f08277c2711222d21e3318ab9248f8de
+PersonalisationString.9 = b35121b4542add788df00c652c248532fa7c7f13b8d00f15b6d688bc0248dc52
+Output.9 = 472ea39833518026a07fb3e27902eb45c67526f097c35411bee82e57321dfd19cc1cd5bf0c34df829130a6cb54f4393354edc2c403d3060650e86b284fb62220771dde26c151495486e4b6b3f08fcae2477ebef222dcad87e637aa8caaf965ea116452c2b3e633a1ad91d0a8ed53c13778901e83de77517ebd9c64011c131f5e
+Entropy.10 = a206aa10c2456110318e3e76cec80fee80496e1f595f26afd100f2a531131699
+Nonce.10 = 9c332bef31e05c6ec0c0c2f2c6562cd3
+PersonalisationString.10 = 2391dab997a7f4563a5f5ea03835293645ec700b922d1d722e3a1a4885c165f7
+Output.10 = ff6947374b3d0658da07923ffe4d1f5c014061ef906b02ed82c1c59321c4776a5b4b43f203d94a86f309fbfbc9c1ff7384778a5b35c74f5b6c4ed1dfe23ffe1cea0435effbb7faef75e9bf83fc8493319b8279130c1d0373d04e8f1906ad03bc0563ca2551cc314d7a160982740a0212208a46ceb1ecc738a1b49987fed632db
+Entropy.11 = c9632fc29a38d4f1b72654e1502544e786fccd7fa34ae513cb5c96680c4214d8
+Nonce.11 = 4d99af0e49407764159aaa3928d6cd1f
+PersonalisationString.11 = 75ae0ec81469e7f2c902fa4c328f9eb9ffdf277f656b82ecb637db898aed5dc8
+Output.11 = b0654f50e28ed708484952510dd4a04c631fe420025fa006b937a5046d5726803961ed5474e07005c6b3b6e391ed5eb89f1ad1e23fade6247bf14417087e62d27320c75a1eb5b842a4722b9cf6ff9f79911f747ec25709b8ef643cc76bf6006b3ba237ed9ebb18d0f98e9f7f6fbc6e5591da1e51956ee961bacb51a1037b25fc
+Entropy.12 = c0819e94b28e3ad495edc492d65e0d58cf83ced02e31bba09516c5be06c87476
+Nonce.12 = afc45eba87e9542f12c85287cc79c880
+PersonalisationString.12 = f64a0309ec12b8b38433d3e22870a8efd95a9cb891a706ef0815720a7f79bcba
+Output.12 = 03b81d0734664b3154c1c1b6a354a5a5c5990596a141a5153f0dda4a91d02e79cb2aa1c442f1f34d65852100e3b6522da2921820c791d3db0447a31698e967d24989fc9071b0571ba4484a7e87966f85a99b0b7f1f13bdc156c546dd5eff2bd8e62419390291f4a6d8b4706cda3dcac5382150ee68f6f41896daf60692458040
+Entropy.13 = 2d44aa9db2cca111cff20727708b96ec48aa270b9711dd4f3a7e41c7c91627b6
+Nonce.13 = d9ffef52eda7a37a2ac55e170c8287a0
+PersonalisationString.13 = eee6408c66e3853730d50bac7ef6964dbb6e0180b75de7aff2102e178209f1f0
+Output.13 = a4f7e08a321a50417d71076d08f86b71e644303a4366fa39e3cb27b8b2cc0dfc2903ca54cccb019463e0cd6c7cb29ce024820c2fb5d2d40d56c158117710a80018a6440b19396f025d069d32a59364e758f13bf05f406bb8ecc6dea73c8da68cc36306d7e66a1af6909ac3fbab7b9d515e881547da0b9cececed22c3ed8b01b5
+Entropy.14 = 708525ab7b7b2027fe3d5024e81a14e828ea85a78633618486938a4460c601b1
+Nonce.14 = 10818cc50b58ccb660d65ff705041a37
+PersonalisationString.14 = 2756a89e79266d6d86bbd865708321f529b023d0cb5ee5d9888c37db33dd5164
+Output.14 = 7b3d778ee1623b08875305d5761ce2cf44ef1bab87c7d0f29c862c40d3da31240e7450d827909b6b131a9b0e9ad68d5c02caebf4f3b0b7d7ac1cc58e353ba68e7ac9eefc3de1310cf9bf5f4b854ef3fc36e940d4fc50072845a83c38a7d4372c191b900d11d11a907a50607c348951ccfeba4efc30377e4a965056e4e84eeb02
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a05a68a8c08b38fcfa7891efdd733284a7d2c4bb9f0ae2eeafa41b88a06a2737
+Nonce.0 = 6acc7f9255dd26980333bdb60f33b714
+PersonalisationString.0 = 3b9ce45b351de38f6703d966340c30e17f196e5666efca130a3dc124c9386cdf
+AdditionalInputA.0 = abe4faabfc51e29fdd2190758e90efeea7a80f0540ef7bdfe914412b78dacba1
+AdditionalInputB.0 = cd5b8bb6929003b8ed80fa852762327a3a15b6e28829447bc3f4280b549d7067
+Output.0 = dc0e392ed6fa6c8da21d7898db54637c82e73d4acc6533d2b7beb7f3be57b5e89c20add7a92b2d9aa06efb56a9bb3e79984657df957dde373a67d6d6315b87efa0bea64bc4c72b14c84b75d0b4c1dd9d8b8cfc29feefa89e14c8e14af86549fa83606d7bfc23862195e24b765d6c05dc6aeac4173bff4612f5464031ed8d0bbf
+Entropy.1 = 93a571e822a0fad9812cd3443dbf66f93fcd6004d634496ec45546e2b4937ec2
+Nonce.1 = 47bcb9d31b67d394084b1edb4339fa84
+PersonalisationString.1 = e617903181afbd1713a9a25fbf71bd388b6767a7c25a729d72b4461ed34d9f08
+AdditionalInputA.1 = 5cffd6b4d50b0e279f917c42e54f449fc1768e088d2853168d0794fbc8077987
+AdditionalInputB.1 = 726cebb2c02f1fe79c2eaea863aa8624ac7e2c4d4ca113136aef023a160e073e
+Output.1 = d7b2bcb6a101a2bc272a8e55a97bf14b852ab233d075f612dcc2be58c46e7e67c94e218161ecc56fa9e1dfe254b8194e4e521ab7f694b019346899f8f1f0d46f814e53f9121d0d723a2d65aca687f7f79a2fc8f639af86db8b6c946abfd1f101eb491a495f307491c2e6f06d084edab182069e8a34c4c37afa46983a945fb3ef
+Entropy.2 = 34e25eac8e69b5ea03de942f71d3f04fa63af72d4f26f1e705be13a2fe349f0f
+Nonce.2 = d51b022a70e72dc3e208e95b101c5a9d
+PersonalisationString.2 = 81e9414808e7a951dcd53f1f208914a3f302fdd98cdf9f9cf857b0fcbee29897
+AdditionalInputA.2 = 3933b41c42bbdb3fa04f64c0076d5f92a02f476c194117ce399df215ae9459c8
+AdditionalInputB.2 = 94635fc96fa8080fa35ea41aa6cbf4c36a2208ad00d57656f837eeec6236eb92
+Output.2 = 3bcb95d0f72edd2f944e3572b94d60317cf03d4eb7d0d88b4a159011ad7617710210a596685f897fa2380837f84e355d42f3b43a35b605dde79b94618ed01229860d4dff1371040ab05528de9e99d818de9490a9c7e19a4088e710561af01fef260233ba017848facafdd9e3ec221f396f1f082791c70ea7465e49c1b7b1195a
+Entropy.3 = 29765e1ce687fff3db813678c37465d46d8234506152af4b2cafa32e986bd126
+Nonce.3 = 528be30fc81c3766cf46dbd3b16c48be
+PersonalisationString.3 = b528dae3996d2cc2b699e341bb73e1dc85a8cac5aae5203475eb98015a0a0c5a
+AdditionalInputA.3 = 3474622ed44ff1c4c0e5f221851bfd5f323eed2395fa16c096913d54bb85f043
+AdditionalInputB.3 = cdab31b9ad6083d72493c4f605a14b293530c70907891e0f51af0869a5451fd9
+Output.3 = 88f35a8528c135ff339084e4e3df0781f73debb34a2b9ca1bc87d3156d082797ea462cb74c70b1cd2a4b71955894f35d2e41ecf2bf5ef7203215f7b327fc2a33e1ade0dbcab934ad32c7698cd2d2ff480b531051236b503c72565fcfb1547e3a94f8458ddcc960b9d4c3813e7b31b9f807e4a173e2d108eef2069b71f7a59e6b
+Entropy.4 = 455fe46cae82e99f1ebd8ee1c03b9ff98ce17186db12bc8dc9ba31a303380a7f
+Nonce.4 = 91bc22dcc2175068405507192e3565ac
+PersonalisationString.4 = c4799b4df79f5542c085caaf240c5efcca3185aac5901a874a354f07d229cf93
+AdditionalInputA.4 = 82c17ea70dbf45249a2a47c9edf27f51db46ff24fa10fb37d4737812a6523c35
+AdditionalInputB.4 = ef55a79f4efefdb76695e065b257aacc23ece92d7351aa9c9dd2f4974df5040b
+Output.4 = 321f1657bd19b8369fc601d76bdeae5896790fa3154bbc3ca88019104da98fb4cb423b79d995d28a7d981df585b24e04b96b9100ecb3a40e47f161b4e35e079fd9d895db4eff2eff4c08ae73ae39435d73ec0dc9abdca4afcc90cd582516b465bffab172f1dd518d72694ae32b2f154041643ee452da80f5f85c8c2c4ac295a5
+Entropy.5 = 3c1fb423e65ba0984f66ae300cf60a34be48e62e2f8df0aec2b14b2c7e15a0c7
+Nonce.5 = 5d4002882ed27ea5ddf1ac221c7dfc76
+PersonalisationString.5 = 9431095b002e735089879fec2abbe52edc382d464c741a21647b823e16bbe1e2
+AdditionalInputA.5 = 51277ac436b7163b07e0df0dca03f533c9322d6a597ea68549115ac4f45b8af2
+AdditionalInputB.5 = 24771c02c1b804d11ef2fdf0231956de92fb0033dc08894322c9bd60757fe1bd
+Output.5 = cd011dde7042f973325afd1711d089beb236a2b9f1da5d6cdb0d93dbb139f31acdfb7643ef7d5aa0518ee0a84f6defed4a9751695773473dbb819897e76a22de3f6f2e9bc2d0a2b3cd5888c95d76aac30c711a544df9dd3deda1836e681dc2ed0a02210e2c2a430f3329fc9ed354fd86b411412489debbdd4b105460c1e0dae4
+Entropy.6 = 49680571f7a111c34094198031a3c0687e65becbe110d2002682a893b3d11210
+Nonce.6 = 60689ea420c104a1796e4fdd4eb0fa7d
+PersonalisationString.6 = 250cc81d2f52c2ab38f336cd60e682858af378edf5183cb08ad35ca236657d53
+AdditionalInputA.6 = 0add5184145e1741a9d274e3833eb2ad12c553a40a86cfd0d55db87f926d9f39
+AdditionalInputB.6 = 611380eaa4e1eb0b8e86ec6d73d2f82f86ac55aa5327b1eb95e79d0ad7f498ac
+Output.6 = 7508867f99822d5c81c9bacc662ec9371ac354b2e53ed5c566db48204cc0a50a6c5e799759d8ac98f995317f450f64e6952c2fe97dc270e910c06294483449eb3f2ec020be93ffb3eec5b74096b2ffa8de84033c8312964f33c6c9641874b664f4c538dc44837edc0666f4cc8aaa4144ea468b91018b222c97e94b05365de985
+Entropy.7 = 70b5d94214b567a9a9be4644d320fd8260c903f8be21eaf68311866ebbd83fcf
+Nonce.7 = 26e5dff4fee192d413ad71e370d551b1
+PersonalisationString.7 = 837014395a963ea27ab2d3f2ba37667d49dd21a8d9e86156dd667a45c4998ac9
+AdditionalInputA.7 = 70e16a291f44dc715d7bd642f9465ff1ce91a6e65d71ff472528d6985d4fc334
+AdditionalInputB.7 = 1f56ba398239f7fa7b070df36c897f6538c1a4563831b82fbd198215d20de9d5
+Output.7 = d54ff1bfe767595b198841c933b15f94c8ac589dfb7f7923c4216884ba26b38aa0d7a7ef7e3b930af6c360b87401b07f42ca570d385e6d7b221e1acabdad44774d9c4b6e072ad68548aa770456d59fcef049cfda7686f1cffe9de69e66f6409002932f04f612c338268a8ec38ffd7bedc9649c0a62403b63befceea6a0d9a4f2
+Entropy.8 = 3e075ee0f982ecbbaef7ec5ad3c349984c1a8a5374752994a9cc9ff9ae54e72c
+Nonce.8 = 626d4072632b13b1b61fc3bd0fdee7db
+PersonalisationString.8 = 9466286a642715be18b68e9030cf1388e81bce10378b4f4c70b249434f2cf540
+AdditionalInputA.8 = 526e5df09c03e04d845d526291a67221307d0942487b30ba18e6b66076740d07
+AdditionalInputB.8 = 07b16490c14b349f0c8135d26ac8d320688aa208be8152a6d47aeb37fe93952e
+Output.8 = f7d8be58fd50aa64b8dfa88c04c18e07130887b88eb87036ce613c5c7a5fd1aa814ba3f4504c86e6e4477f8636dbc189487b172d5a1c39cdedb2de59c7626119d8818c32c456cff5b4693ac47cc48e4785e741dda953a06f4ffedbc67e016e9926ac3a435eae8ae05dd7a7d5ea353d6feaf1c956718cb57ef79944b8c648065a
+Entropy.9 = d374e5eca8156c8f7bc147541b8f612c6e75d16b35af18f2f23f8535ba873db4
+Nonce.9 = e5c8ec3ec276ff968fa3d8e883e79c60
+PersonalisationString.9 = 9a7bc0d6e96ca535066a93746c91933d41604eefc7f61de72c220704c9332626
+AdditionalInputA.9 = 179e7e09172ec4fec2309aa2c3c7aa45a2eb6d09176a1b5a4171787b589ed48b
+AdditionalInputB.9 = a470506f702498100c8a9396081ae4cf558b383c28ba49e46ddb9e0e9fc7417e
+Output.9 = 30f3b8273ad6a190d44dd32698a13537e236c9be889644cbb2bcf4185728abf3cc39d9cccfab163e604993936cf32deb74b064887d4966f3377361e161ce8217a21ffd117a098c906a203e398642cea072ce86b05a0f555a19b885ded8a0c247589c30940f0cd8b4f152e041abceea635b4e8c9cf1b71933b9b0fc545bee821b
+Entropy.10 = 01822f1e8e132960ff685b90adaaaeb776b65a9e44808eb1775288b6e37d2599
+Nonce.10 = bcfa4bbe9c2ead1770f0c9e958905207
+PersonalisationString.10 = dc5f55ba94e6771103d2cd54605dc8766b95db748309c17f40657f61b1e963cf
+AdditionalInputA.10 = a5b5ba4a7366b7efced0c4a12bea29d4351473cc23c5ba1a6473b9cf434d2ddf
+AdditionalInputB.10 = 2462cebf6193756357738a405a5161cb5667b7e728e9d6e4b88bb10b137cc16e
+Output.10 = c003a5779cc658ab5a8f99535fefba8480a9b5c73e1824379eef1bef4b46c7bdfe1edc3ec5decde12f5142f518c848e6187a8b4761278dbe75689d67c41b0471df4b4026c346587b6c6266001ef5c5c4590f0a8292d68b568a378c1af10b1a197c159587aaff1de691114c7c0210a7b24d7b15e64a7a14007d89db9b8643082e
+Entropy.11 = e2c583e2bfb46475ab107222d35be7c1b9a75655e774c585e3ea147208eebc2b
+Nonce.11 = 37556239f4598163b7ac6658716666cb
+PersonalisationString.11 = 8bf6326005766f97c95cf8715d52a9ae9e199179d93f362c1e57f3c08e2353ad
+AdditionalInputA.11 = 6d0520bbefc8a7da9fc1c8bfa0ca32c28d358d9030bc4ef2a476702919e273ef
+AdditionalInputB.11 = f08f7b1fc1c8a7c5d428bd4ec0fca411e8e3e5477fafd5f3892fe07768257f50
+Output.11 = ed5f399cbe7448a0abb713cac3f2ed492b0864ff597d18ebcbc56cf66c846327d69d1f024e7565064c1900c8ea5abf152f65c0c8e85303966498a14a9a10a5209cae042f8508d033bbc9b62f9ae0a4f8d25f2cc2c6ff6105ba0e81ae2d2facb54abfa1a2fb072d3ba10d60864fdb416ae54558cdf5a39e2825a228588456daba
+Entropy.12 = d5c1571bd698d040ff605f11e0b934f4e11237c3effa1c3d037142af7ed382e4
+Nonce.12 = 2a8a311bf44e2cebf20b1fae8b935b3d
+PersonalisationString.12 = 15df66513dd00f3ba3174e1a8645c189b493a5590f0df47a5d85fc18bdfe7351
+AdditionalInputA.12 = 54440e082a92a386e502393e609919e2b2816a57157ae3c8d2f2a2dd25dec347
+AdditionalInputB.12 = bc281bcca29989a31699af26675c9e724942cac1ffaab380ae05574a8bfd0b21
+Output.12 = aed06907de4d895ffbf5ed194efe967b59ed23b31fbc0c4ef3286ae7ff9699934e156a97830ffef69b4aa747cc5ec664d7127ec5ed300b3511f16224b24633c6a4b677e13363a6036514bad39b55e1eea12d82b239acbdf268900dca3cfb0cc9e73c3f42a1d1d4ab8ec83538701384db24a6a8e2971d35fd6822b9536e686673
+Entropy.13 = e63b290be3d6235e090ef2decb3140980843c295d91f826ab2a44a1db300b1e3
+Nonce.13 = 19c8428ef1c5f37a5a83784be829f831
+PersonalisationString.13 = 9ec83b160bb3eeafb257d2fd7ed5b3f7b897f5d30f037f07761606f7cb3dc798
+AdditionalInputA.13 = 9003fa204ba1fe16fee24c616bf4f9b47ddde433b5325e789e70493196daf967
+AdditionalInputB.13 = f64d3df45dbfa0b313766e8e9ec314aa615848f0239f5666706e296a648a1e69
+Output.13 = 0891fbf7f92a5b24af2c2f81ce3ae10447c029061d12485574a6333a0637a34a2f75750ddb9155aa83a43584f1e3f7d15e4130c0a959e0b986920dbf1753defc6985a226f19b839111c07766c2f2d38cc922507f0c2272a1c54542acb7d1d4311028a55690d5a7362795d8f33e8eaef0517fb733531debb43cf1f32db4dbbd4e
+Entropy.14 = d56f9104c7faeadd6bbfd73c3d4063336221d9125e6d784a9444ad31c5f575b7
+Nonce.14 = 022c0ab0860a63ddc0ab734e0e96fba5
+PersonalisationString.14 = 1b5ed7471f45584232f05cfddec666c4733954cead8151642d64aff268f2c3a5
+AdditionalInputA.14 = 764b81871036cf65802c4e9659e25b8039be84bad1b121b536d2ffc26989285d
+AdditionalInputB.14 = 28d46df3c254e5cc199e14b45bb1e2f85a5da03f49dd76b5a16b76723d5b9855
+Output.14 = 94e1fa76f879eb9840cd50853565f43cd7b0545705bd9a35494668bef7d7e7085b48a455b38fcf10f145f28a599c58e2f88c2855f2437a17d7333d243a1c25b76bebc6a94f7abc3fabe4c78041d9b3eaf675c11970b14cfc6ff20c8b23852b2733ef8d8416a920617a9b271beeabdb0462e5d23fd68b56f58e3554e81493c5a5
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = db6dfba414ef49f895955df1945d700563af82c139d2bcf6c01b95adbfe77f00
+Nonce.0 = 69ea910066446cd8ba291faa094db8a7
+Output.0 = 1533fafabfa93fd946de67a35b7c26a9a143c59bae9338e226a2ac46984b7d2d674d8adbcbaa9795c3b2ad64540207a6f6131f549cffeb6e39522a1f23fdc8f347f23a51489889badfed38b3ae3742bf4779229aea54c5e844ee84479a8786e61755d610fa3ce6e687ba18ed5d174d823b15ccef9880111e02db9315b8515352
+Entropy.1 = 9699a65f2df69a8b3ababe4a7227608ac30f63d5487e7b3b05f28ed941803bc1
+Nonce.1 = 7d42534a62ba99f267dc52feced0edff
+Output.1 = 5206df57c834ba53c50b116f9a0cec6add0c9541deb030b39c217a5598fbc6372dfaed871162af6c99c36ed86d8c08d819fa56b1fa2a203fb54628a8d348c8fc65cf21a021b85b8b8650d6178042d75124557e55334a7759307900c42e0442dcb090a931d4dd817ee1dda05f7886529315e940695a8ed56b2006bfc61b2e85f5
+Entropy.2 = d5b674e58f5f8f21e0d8da8703ee62dc1286de9af95ee7421b34a951ce5db6a7
+Nonce.2 = 19c2ba4373b0e0c7c20a281ac8d3c438
+Output.2 = 991c8007d8632e34001bdc6283190c2a43d89a56176708247c74a24ed65cb1f544d1abadfef80133015af9bfe9502834c13f1ad0d5259a61f19e378c970fe7eddf9bb5750359d54fa30febe7fd3768db08d8ee3772dab65f3d78417cf13747af2bfae448b3ca4e0a02ece5eb04195c6c635f95b99782e42b74a07815936cb064
+Entropy.3 = 4ce06c20df676af7fa851e9be2b4ea2a86be64d8188c7da6353df113b4f000ca
+Nonce.3 = c7542cfb2456650d2ccefcad9c7964d8
+Output.3 = e0b6d8f203e6ac81a4bf4a751530c2f09fea755bb0a972bbb2dd30d413a43678ac90315ecf05e624d10e1a5db7fe89daeb2a4ce455197f4f490c4ebcf8866587764b77f48be58f88949e7af6e759fa99d3663fff8106c0352350a24a78564212c6da2d6772d1d0d038cdc509dfe1f066e8714ee230366727958570e1a6e4abe8
+Entropy.4 = f15833c6350257237e8307a32b4db1d638639d8b473810493ecb6d62ac0c1094
+Nonce.4 = f562941b78e840493f81760a83e47209
+Output.4 = 760a9b1b06ef0e409efc635e5a86da02718a84927de5b51d30474984b018e466eb176d3cd548bc3dd6b776fa102dab67ad1be00e5754387ba80921a90ea5ba9299cccb8a2e3eb72b3f04a5c6ae4aaf62ab04c5660421582a305e1a54f34d9dff34c3e33f47928ac780afadecfe50a905a672a7fac476a7c12716b2e0d5de92a3
+Entropy.5 = f33f1c74da1ca7000bb8c4dba59a79f3bc8a11c3fdd3e73196a54b0c93732946
+Nonce.5 = 543b324f3807f63e749c3629c4a5ea0a
+Output.5 = 8d2b1c2c2835c21c7d1ec1c382e717738a2a8eeee716146fd23f12d0ce42c320fd935b97710702639628592f4dbfc83334bc921cb27adc8bd704affe1616af16aae655f4026a7d931f8092bfaa60df8bb750e4aac86505df154cdc68d5be3bcf64f09297df172808efa2baed0ac6159db3ee4d887c74140803f0927c56e225ea
+Entropy.6 = d1f72d93915eb1dbdc5e0783078c64b7fc1ff3f746eba67f07260641bb4ae597
+Nonce.6 = 820759cae8c50a47f349acc059d8970b
+Output.6 = 4255a149e758b54ce159c7a627d5b0ae5ba89822094d7d5e8ae5ec4b8149ca04655d7ee953a78200358f95880434aab6b3dd5b5d90440dccf7acd8001728adf857610de53c98e9717536dec368e9cdb4db2e683db30b2269a485fa5087be25bf4f845f2301b858a9b32e1cfb09b8bfeb7e4e2b38cd3140f016e4a17457efc1ac
+Entropy.7 = 89af1c3421ddee1b8abd1a3dc386f10c0d02b9efa1defb30f6bfa02faad51492
+Nonce.7 = f723457ce9aa2a3aa439711829a15a70
+Output.7 = 508685fa0696b2d5d2aac8f6987b4c83a0118efd349ab72d3ba13363a4ccae18f41ff1c05cb5be59b3b45de85c332212d8cc827ce4ca00630581bd15f47551848557494d0040bafd02193971802db5483727eb00d1f7ea620648c92760de8780e5d70487085b215f3a67f130c633bd7e6e4a963c57d0b35232cc16f332933890
+Entropy.8 = 9c2749813fa1d0475abb8fa34d2ace6340d3693801f506448f89284693380d98
+Nonce.8 = 2c2fe7f4ec934b5f7d51dbd1410c9308
+Output.8 = 6ddd7cc110272e0fbf8aea493e5319435d3d2446ff51ce89c84ee2cfa4dd42c0a10e1bebfc92977f6c898ab65a2bd59a7170e8c83a0b349399026bb8a656f8f9f27d167042f43fa367d407d460a44d1f6776f5420afae894f76fb6b960a2d76b2a7ac4ba2653e8753fcd54dc36ef5907373ba20db4fed72a078eec3d99687bce
+Entropy.9 = 1de3b3eac4ac1b5981a60b929fe054b81780889919cecc4d06304b5efd1128e7
+Nonce.9 = d46cf622a5ba659a3a53a6e3aa02abed
+Output.9 = 58363af7e61ea5f8bd8313abd508bda4bdb4c89f26fe3f2f4ed0d56b5e22bc24f28ff17fbd03aa842032cc0f780407dc9a67588f31634d28ad6cad773a36e58dac33243c2e25a9c72cc91fba36a6c0ccbb504f1b64f76c69ea857c9a58ac396a054095464a69ea916df9eb178872d1162ec3b857fb69d5fb0b28ee98ea309fbd
+Entropy.10 = 5ec6edc2bdca4fa7e3b885e70a43045b4088ee07eb79ed563cab5716e9843d9b
+Nonce.10 = fea3bdb647c22649fec9a30cd1d44bfb
+Output.10 = 1aa2d21d79e82e6382423101eafbbb905513930beb78864a023c0ba81f9bebc99f74e9f97dc8f68c5701fceb6991a7b65e3978e17e24bdb898fdb96037fbd1d6820caf2ef786d2825d95fc3ea031597f4e286c48d036d49194c3da219cf7b9d90ae72f161ba2ceb642d622cc3256689ebb2cc8a4e46051ecbf6a6304ec36c54a
+Entropy.11 = 59d17c36e4eceb4de7c23c104a3cc94572a7297c8cd83735a9e0184e74dbaaa7
+Nonce.11 = 1147202d56aec98b784c2703f8b66474
+Output.11 = 72624e2c6f1bb62079e3e3b74d60869a7d63d49426f51e4bc6da2c171247779dc3370c3ec48aa2c64f5d712d0d41ef040410f5056fb08894392dfd576f2df410947b54c4bf3540187120d4301b51fc11014b7f6c1a03867a81eccbdd6e0d73f8e758c3ae0b935df40771a0f0c890c9f3d2f46c1eb9e66c1688c14427a6b58da1
+Entropy.12 = ca9f514aba48a854c94f9973f69994262411da1728585322a71691507895b3a8
+Nonce.12 = b04944da2bc79245a96a015d9f2673da
+Output.12 = bcbe1625a4e0e6417c13b0a615102934333d942dac85ef3ed0289b6f7a318f80addd5b1e9382165d5a3ddf11a171979d855c7bd5a8fc2e3976029f3dcacdb14e04178d4bd84483856be2f988af694d8e482eb1282d7730b288b7dd7c3eabbc60f673d3e229628b5f6ab4af9f173f7aeefd249d2bd73a78403cfdbbae6cb2a053
+Entropy.13 = d31ae8d557811d17f12d1e8d98e897499e6cea5ad51afa654f3ab2c43b633597
+Nonce.13 = 8478c766f94b48f94aa2b67f8963b52d
+Output.13 = 6ce2058f4dd4d7c2aadf03a0424a33c439b641de320ec2e8fcb33f8fdab0410cb015a76d4931892ea0a188e55d3a9790692731648be5e3ae36be3b9d3eeba21a2c62a0ec7af9f8c2e3eff2792e7bfafb4d346a4fe5077f6b3c2e34d059104072137576721a113e981e47480635e5d0da90143f2c960ee3f34f5e50cc22b15b75
+Entropy.14 = 3bb1f6cabc56a02643eb767cc6e5bb3a5bd765555e4e27159ec905012f58de22
+Nonce.14 = cc37cc9b20a2e4de0bdf8ccc3261eb90
+Output.14 = 28f20b9a94340aaa6ca98174b5929ce3329d81bebd67faf5e30d12f775748c34c848bcda26cac8b4a9b34c7c92c9984a6f5a85269583358e985c2b372a887f9e3f0f3920dd512def27d818522ed1a49e96d00a5aeb41bafd152144a8b6f93426e73d6e8ef7a8a5381bc464b24061080af02aac51fdc52f404e1349b7d04daef8
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 8ac4497cf49fbe453ac4663b1e1c53d2ad6add0f63f56313a437801d298b47a1
+Nonce.0 = 8510f1a9aa56747878f2c66eaccb23bf
+AdditionalInputA.0 = 41d94d876248b34deb2dbe2e1b9852547a9302cebb13b1f0fe99d7e907ac4e22
+AdditionalInputB.0 = f2d69751363e5ee9fd0c0a9cd1ad5734c9d5a6e599ddcc16a86aa9ed80730187
+Output.0 = 21fd8d48e42f0037a3a69db14cda039ba4e08c4c17cd26f9867dffeb3f22a7ddfc919298bf4c3e1a154fba617842eff44e91df94d06f58f44824982d05b6ff608e9727e56751f7180bd1d829e44fb355ebb69a8fbdfec99219e4df8fd47e4d59a8f1375921c02ec1a030383ff8b3a3dba9369cf275a783346751d20582653ca2
+Entropy.1 = b615d6ec1025e148df17e8f18ca8b34265d561b5420a8b53e9723f8e13ae065c
+Nonce.1 = a3c52ecd92e3a9e83dbb747d2ff3cc58
+AdditionalInputA.1 = 413591cc34326a1e9bdcbe44e3ec7c096ec5ceb3cf737fc25ee53627a14dadbb
+AdditionalInputB.1 = 74978fb169df7d7c29aae8af4c8c02ebd292e6e6634b0f6e56c0d267b163641c
+Output.1 = 1ea225119d66ee0530f9b92a60bc7d8dc10b16fdeb1d21f2d1f2d9c4d114c508335cec6bf157e1c7379c4fc42a38b28d88d2701a7b6462022c75f57915a1fb794b572cf2a39bd8740102ed1738d79178d154ae9fee88a8d2a845e192a6df69efde473b0d31e58d854d39aa2d6d230eabaf67ce684f8f471062bfc7ee53978768
+Entropy.2 = 4045ea2ae7758290a7e2835a4b126a9a7942cd5e3e0b4993856554110c8ecdb3
+Nonce.2 = 6a80fd9cbb289e15e68e6c66e6018557
+AdditionalInputA.2 = 4bcebe218578fbbe092ed01487052bb9d2882b9b32770ed46198eb47a82ec2f9
+AdditionalInputB.2 = 4fc425a919b1feaa55048f8f0a5e8503f6941af0af05f0e1c1cfb31ea39a3064
+Output.2 = 0833cc8bfaff9543bb099c2f96ed252fafbb30063a8866e143559a68c579ca4cbe59a5c24245c8c5ec5e421fad9830c85d72666d5d6c8a177ca6cb6573bb668e47ac11aae50f9c79392c75d856e6e808bad57f210b45431ef390d78784cb05f7bf572261c7c28ec290be028a8fcb2c200c6dea97449adf9e0e1c93f398460b52
+Entropy.3 = b3134cbea6c62a43463bcbf065aca184dc51125054626762103e5218b20a2339
+Nonce.3 = d9fd0dc2d5fd21c3ae9550dd0a5d971a
+AdditionalInputA.3 = 57cbcbe6f85dcdade76b74852f832692a682d1a8044fef6add7ebed86dc5fa93
+AdditionalInputB.3 = c7d86acffbe4228546bff7e156a6b8d45c0d108099f155762ff49ef6f2a3caac
+Output.3 = e155bd9b069f6ac59430343be7fea5534620de806a963b143ea7afaa5402d5e2233b606e7d321576b833ef5992a005c63da1a7fb8ca538ba06537e40a1f9499eb04ae83a0522ca5ce5a69d2e30ce3245900c5d86fc554d0ee44b74ec548e86313a9d6837bfb6e441496bc868103fd07d333f73c7f19e9838743cc25694e178e4
+Entropy.4 = 6c93a3fb792f55d8641abf9c8de9253757cadd451b550aa377c2905710101089
+Nonce.4 = 6c5d731b0aa78754bee533a260c5cd3e
+AdditionalInputA.4 = b51de8b31db492f0b0521702facf637b731f60e876266ce68a9e51f46e673b87
+AdditionalInputB.4 = ac50abaeb46dd349fd9c823548728da598cf1730e8b7c8bc05fe778f26d7c5e3
+Output.4 = 441e951b80c8c7ac422c0e722095213f895a731c233da6b36b50eecd8d6a5617a66f8ffb020c4f10e2fe041ab1b212fa06ff79046f79f1558dcf9c8dabcd7fdf1b5215be465eee630f1b1fefbabbcfb9e0558c5d31c589c8e3acf61f8cf28c429139f95a6321b8e78e58599e5d09f3553178ba55d4273ed8f5b93aa4cb5afe85
+Entropy.5 = 97f7bb185acddbeec46dc7a962789e68701218cbc0958f1c4006d88218e0be4c
+Nonce.5 = b6286255768c7821825fe51d60ffafea
+AdditionalInputA.5 = 35d8cf0ee86ec23782588befc8a4c8aca9722a179f1d7f66a336d41d00897790
+AdditionalInputB.5 = 6bb6c0b42829f95b364557054919882e7ac1a9b38f845c5eb76aef1b10a601a1
+Output.5 = e9147ddd76b8a94abde2154c472ee3c797b6eebf4f58c6709256edd2091823ad59510933ccbee75ba7ca7669ca5f293cac663f33e5371e7a4605848a0f9b7a2cfc55c02d45cf2bc9ae0eebac2bbd22db750452c925e66597d8a5663c438a1e6c36f939a1ed3415180e878ef5c6b58f0163664b0ebd40ca2a41801b84c61c682d
+Entropy.6 = dab48eab3269b3a0876692c4c29707afe3d0f9eb326267f0c23dddce432b75e1
+Nonce.6 = ea91a9cd0272bd4bece9060d0d221f07
+AdditionalInputA.6 = 9cea5a04c2314e016704d971a1fe3fd90d3c9610012f9092506adfa37752cf1a
+AdditionalInputB.6 = 81eb8936cf9c62db818194051e735d269fa28b18b94c90c90f2789fe9834e803
+Output.6 = 3263313489a986016d571cefbdd2ad0f403224918038f8516f98e7755b1db3c66577fb8ace65ab7f26db2f143b1ad5b41a8c46a74c8b819d8eba34a8b3ea50d1026f5e70082a4270a344834a9263a4e36b03e393823c2a8031416d7b73a4360f349dcfcfe457636b555967753053a36af555598248ff74a274ee15e62a8084c6
+Entropy.7 = fe775a08961321d6ecc543435341178f66f444a6b6f08caee226f830ea7fe362
+Nonce.7 = 835d186118215d6dedcf28f8ce1730cd
+AdditionalInputA.7 = abd17e63a0b6899b055d68d3df8c96425520d506d45e049ac83a23ed9b321c97
+AdditionalInputB.7 = 92af9acbf65be3345d97e49d8602f8be465644d854d30222274a15024edc3afb
+Output.7 = be45b9e43ddbf6f6164f6bdbcbbb4c50c6bd8374b6435ae83f793477c9348e2bdb6245685056611c6e7802ceb4387e8019bd2dc4e9a824dad501fe6bbce4d834d995922de308a25e551f94dcb7b04d828da966172323e20a32cb4ddd0f4b028748bb37e368a16092317d498a5b501d7f2438b49c62e94c2f32e5bac15ea911f7
+Entropy.8 = a05792cf43db185c729ac261305dfbcd8d5ec59fda608be0157316ce8929d9e3
+Nonce.8 = 058f25520f3053cd99f3e31f2ae2c0e6
+AdditionalInputA.8 = 0010388e0a66f52a135db41dfa61cc72c448dc218f4ffc6b368d41c9e1f85cee
+AdditionalInputB.8 = e217ce83882938cf38d588c1439a44941dddc229b4fcceaa5a4f8fe5189ed660
+Output.8 = 240980ce5faf0b0de10cf3526c7eb0a8bc80d45983ad50b4214d6c55a3c720206aa5cf3486caddec8a605f28ea71bfe7109b4faa2de938d240741ce0fcbf9a6d41610e0611bf6c4c5b6ecea9db4852c0bcae39d5b6d597940166e8af619220ddeae40dc51f83383dc94b38b9666391a9b62d6906162c0ff9c8627027611aa00c
+Entropy.9 = 830f4001b1abbc338a643001456a8a805b3c9b925139d6b1c1bb461d6bd031d7
+Nonce.9 = 7ef3f37a33db5deff7d5f1c98c54211a
+AdditionalInputA.9 = 00bb94e8bdee763a278f802da1ed1f7fe0577718a055eebbbf120111d4a5b2a2
+AdditionalInputB.9 = e8e871d4812894160b70e7cb44bd1aab226dbf8e4fdabf7b34a4511e5342d1b2
+Output.9 = e80cee53dadbe53bfdcbd9616720e407b4e3c4b4bf92023e7d0299b5864bdd4345d7d5aca22dbd105505c3085c0198a7fa0538557a3035d5bbf4d7d8da23c3c645b5db78277a4db5922ceac4b8076162c916228bcb6826e3c0e3e7024d6eafdf1a7933676c58d355708d07466416226fe8fdf655de8119a8dba17817f0dff3b4
+Entropy.10 = b701bf9feebb980e3a9aed469861a46e2dfc5d9f11bca9ebcb8e5bcc3f62a7eb
+Nonce.10 = 2f392974104fa9410b1401c61b56afde
+AdditionalInputA.10 = f2664dcfe959a84cb384cb88de145d27c2b53a6d2483bf547501b4b22ef6fbe2
+AdditionalInputB.10 = 62bdd4fc510d7c4985cfebcba6baab7a93e9302a8427ecf2592fee3b09a0256a
+Output.10 = a12a8713870b336bcab3ca6ee581a6c9d3a20366cb24b104ffd062d7a76dc3b68b7aa31cc3d00720590434a13db547d9ac5aec2c0cd87f4aa7fa2c81f449b4b916c9d224e0b1ca8e201cdf3637ad26cd8136e5823d38763a19d3e517530b9f27cc38024a2f5fb8620aee989c151d2ba72675d60e9140655a185caea70aeea685
+Entropy.11 = 8f663b3a2df227e03bd383c27bde459b8b5726359fb9262e990db47c60772074
+Nonce.11 = 8c38e1211c37f38bc4ff92401801cb77
+AdditionalInputA.11 = 9a5152240c9a6f601216ee59cd3bb014a4b6785f53e402f13c68ab690e995a22
+AdditionalInputB.11 = 62bfb4426b3f345c82c08f73ce67edb97fbd1c75486d9f9cafe9351884242de1
+Output.11 = b93bb913743785404ded848a1a0c75e105f186fabab702192a0da367c348441d0d98e31e2e4218e69b20fb3ac822419ed6683210e797fa2e9e09591c0aa510cd0c45a4959192fb6c71e8b5ccb0339e2f4a08ec64dc16cf6073244090f658377e2d28a0996421c0fd126e82ff43ad21cc5873aea02cfd53807c85240b3e37d6ee
+Entropy.12 = 4b88fa497e1a2143cdfb7a12f6e3f11e4ca6a402efec54aa9575987b82d30e37
+Nonce.12 = 918d0238640c98b22c3083164e22937d
+AdditionalInputA.12 = 0d9815f3fb74c255e6c21f8ce165bd0e3584db0bead50fc18e18a86e49406e24
+AdditionalInputB.12 = 31a200326295d8dc676ec3a99e6c90b9709b287dcd2ba85582071daad684d34a
+Output.12 = 982a26cd58de5d0ee6c12a76e536c2f7f9e84ef4801401d7845d5d81d979b2e3e70e32648fab8cdac84b884b79c4ad8824d32587ca155b779bf5661fe5fcf697320e8043ad99fb2df9c3c08c1b2394a750e91cb98091ae020b167b0051349041e281305015f679f40154d9ccfa19e1b5f4713e9e20f84c970754a45971ec2af0
+Entropy.13 = 99630ec3f20e7711e5f9b4f1d3383d4b708077f50cbc637030209aedf0c9a38f
+Nonce.13 = 9e5ade896b0f6341e2df29f79d7dd683
+AdditionalInputA.13 = c04753735d995425cc6e462ee6834d804f01ed258ec7ca291f31abbff1403243
+AdditionalInputB.13 = 61dd0c5b1c47fa60b79f562270ea46510378b6a350123f75a33a451f39c7f28d
+Output.13 = 933f1e235bfafb809c878776d02943f8f5f4b306e3e3045b0f2c2018aece9c035c83aec1a000bbbae666eeb24aea145a367795addfb26d1ed29727525818a3edb7d9a068167ccad317afa1ed091d3c81ae761d212939a134d833801149507eae1f0294f561ce683ed38d75fbf44acba1d06431b6cee4035b96bef6a29dd8c345
+Entropy.14 = b3e0ca896a303a02dee471608c750ebc8072af67489a0c07b6ceda197838fc69
+Nonce.14 = f5213609ef951c186e87826db5bea191
+AdditionalInputA.14 = 2be009fb81ff22c5c2e15c988cdac8f21a6f17a4277fb1df773bbbcc39b24752
+AdditionalInputB.14 = 0c869f061049dbaea48af93272c5b321977659a79f8bf0a5c6d68b982ef44b88
+Output.14 = cd9e8213591ed7e30743ba0dbae5f08a4021845d961040c5188093d518c3135048ea8ff052fd66fa83bf98c06d39c6cb522dbc938b6824f51488197159666369e7a9444e04b7ce5832bd6db1b3cebf8c0f7bf865bfc3cf60d2a2c0ef06abf7737590fba097c29fed234369cf9f064b142ca30e3941093904945021372c20d90e
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 6ae74ea53cf8de98a48987c0791031a3788fc6f1a3a9fa3c2ca98456fae413f2
+Nonce.0 = 77128adb2bb9ee72aa11b510c92aa39b
+PersonalisationString.0 = d309529d43091c81bff08bcbfc643a1d46121be49fbb503cd8401d86a5f585d9
+Output.0 = 7f7a9cf087d098d8f437304c5ac8896b16d8190b618bccccc5b6e15a83e9a178abf78c176f8d43c80451f15fdd1af1e247d00475c759f269e5d3c30d279c90152292c3bb850fbed2c59bbff1d4ea15aa57e97aa35204e1831a35ff53e5f4669733db3629f213a1a1efe3c758c6f9c23dd7d99685a4b19f1a3c3f2e0596019e7c
+Entropy.1 = b2192e2f41f611db8fd6578c4db7b622e1356747b49a63277815ba90113336e4
+Nonce.1 = a9879ba05c4b012f9a371fcdc37d6b4c
+PersonalisationString.1 = 5bd87f3a4a6f3b5f901382397af83ac3e6cfac953ae1b35b257341e0e8ee4bc8
+Output.1 = 814e44b745382415fc4978094c77dfa29ff6b2beaa09d89ff1301355f72535cd35b45a3766acb81715d7e71defd76a73488ca327c4633bdda604d4b3a5e7311e85b828debcd56ee1cd306b69eb09293aa3bd4ff79d857b5dd1ceee89ba47e7142bdf786a3724ef6ea9486e1f3d49b634e3ee1f9684eab8b8f0fb447b9cb0ad63
+Entropy.2 = de2bfb9cb335e6bc20ec4996ee55ea9fcbb5332d0f5609dd08b9a8e6c3a764d6
+Nonce.2 = d002e99b429afc604c2fad8be38eabd7
+PersonalisationString.2 = cddcf4bc93b29b5f80d3007bffede16937aab58c86ebe57268c9887c8dbf809d
+Output.2 = f79d24aca980c80d4e446a1b52ab36e9f5cde9726890be621a2609e3888fd6c4d7a263ba045603b28dd2059398986387129d08cdbbd667606d83c561bd7e024813656834643adf5507101275bf99c9f3f706c06c031a03fd34b10d05df736d819d720265f7c6833e7291150f93c19ee3a563e969aaa7c7ab993d2e995fc4cead
+Entropy.3 = 608a851046e8a59c9cbef11357552d67e4dbe386b164ba0972939f11343f6427
+Nonce.3 = 17f976167e4cc80effd01d7e63635a51
+PersonalisationString.3 = 31296aaedc99cf580cd06278f024f6c64ad1497195396f303dba4ea0757bb631
+Output.3 = 782f444c80b8d9fc17120795fa5873414f6a3bac01a6f4dc3152aaaba22d3b6c592c5745a1f6d51c42887933d7077cdb648c4adebbeaf14f7eb43a001e2d6350c7c4bb4912ec75de5383610704d76f4c7e8da45f03b337a7fac87dda64b896b9b3cd1c4530402539871bf974c69d3d26eb11c0fb8ba159a723aa06dc0fb7b262
+Entropy.4 = d34d85e13a4a8b2b22818984da7b1025554a9a5340aee24002e8cd6504fcff28
+Nonce.4 = 61fa36db1ca8950aa4862abb44b50600
+PersonalisationString.4 = 76e9f9bfc30cf06b1212d0df29660f1454b877a83a4f90b5718b2fde18d73224
+Output.4 = 3df907621663d94d48613ef08d1663249a4b148989fee50d44795337b6edcd9f7dd22d626524cd90f725e2c26ea5269b5cd10ca341186c4bb0f488c0a91011bf960bf535dcedcf6c2d0021beb24a2466929bb3da14ae417612ec609d09e563dc5dd29fde5b9fa84c24aee995380da430b381c2c8bca77a66e3c589497f0cda8f
+Entropy.5 = f8dabe8985be5e7d44394353b116a05f04639a9af63cb86c5d7869c52a1c081d
+Nonce.5 = 492f6e8c76b8f44dee078c05faecfb06
+PersonalisationString.5 = 82b9e30283d501574db8be220af52b91537f3c4642ca187f47e04c3f18094136
+Output.5 = d161b0aa71e697bcc4c5c66573c9d4256b8320aeba913b41b84ab5626db7bfce534dcf655bafbf518586e68fdbc86026a60626b96f4c0b021fbcfb03ff39cbe537acf30af98a81e1756577fa4a99a0f0d92fd5f05d654e53f7b50de81befcb2d78338f7af6d2b7522cc2d709797662d2b6e75020c21a327d03d92437cc95351d
+Entropy.6 = 8b7c9af20937836cec75d7b500dbec1249815da50471950b721473203cb32045
+Nonce.6 = f587727b11ceaec028b58695724896e5
+PersonalisationString.6 = 92caff644278f146b70b5c07239b4759f76c7a7491fe810699bf632b95931568
+Output.6 = 63f7946fa19b086ae9c0dfafe4222a5f71aa1de2ad00fc16f1a4cdbc428b1dc5e33bc0512c3bc2bab4f38847eceeabf45ec49310cdf27809125aade4cae5922043ef63f5218e08dbb09c04551615e8766efcd77d7d7ee532cc8abb730917aeed6b9afb33e7fa7d659e1f11d6cb1ad178dc1c55a9771fa08597e615e2868e3d87
+Entropy.7 = fd95873c6328ea01bbd080bc83c6dc6396da15484e6458fe7af7c43ac0bc52a8
+Nonce.7 = bed78eb94bd44d8d542067cd04c68fc4
+PersonalisationString.7 = 5db74cc6cadd8b18dbc31fddfb8d22af93dd63cf7c1070bb377d97b2c18c8475
+Output.7 = 7636443dbf0aa1ac9fc49532b62c74cf307df234b84c2b90e24dfeab7de95334adf2b3304fc549a27c45f915219cb3b305942a902ac08f6975dd5d607ffbb0a7d75d0373d647d5ab49f35651a53e18ce3c7f8a3355368199095965b7cf79c4e6cb030d5813ca83b1f6fa353245bc2a269cc4c905c51f5944e0e0336f263848bf
+Entropy.8 = 9db7bbd5d511a3c605c4aeb5d7815af5fea38f3750cb01f8f8ae74a2071a3ea9
+Nonce.8 = b1d9f4c7b1f2dfa17d892b341c55e8ae
+PersonalisationString.8 = e89a556721874b6939a8dbcab703f416380bc054d88bf50783260cff144379a5
+Output.8 = ad1b0813e743524d0aa4ee845ceba906ea66347a4d285b06cf84707a9ae6bcc36fb0db52141020bccc846b0847b633f3d5f24046dcdaae2dc456ee2f67655f1152a36383448d835fdd1333c832ccf96cf96f394a5830a3909010eb647d4366d63cc710433ddce17310e82c49aa56dded4e0f5f9df213a1dcdf3e456334bcb404
+Entropy.9 = b516efeecffd7bcec3bd16f39dc3aadfcb230385153112df9ca3a3413563916f
+Nonce.9 = 9ba212a4d73bda328199b5bb7252d84a
+PersonalisationString.9 = 7e2343b0525373c968cc752a66345c30b74cc7fe95d558f86d96fcb67b9ae3d2
+Output.9 = 3112e7dfba7f5571bf806c49c384dc025ddf537f3c37f5d7af7b98c5b809b5cdc9300816c25ef7dbda98856f08c8aff7db12d62d4f4dfc2cff3b7f7f043feebbf09751848b01dfba36d26f33162c0f57c15dba334093bc9b7a36a6a023c5a29100b2bd3406bf83e56d4e68896d70467db38228c82fdea9aeff1574c34a99e134
+Entropy.10 = b0a0e3d75f5d91dcea7e53f283f0f613075878c654925948c15531fb97016e8b
+Nonce.10 = 2eaa61a0624b32c1ad8b0ab1f6d9b96e
+PersonalisationString.10 = f3b8d9d83f8b212c84442cc604fb4e6475a8e92e2ea1cc38fb8990da9d8af148
+Output.10 = 4434a9db8500c93fa9bb921733c6f2dcd5489830411af3e00a2374e958ec759608ff0c72cabe91dad49c6a8f3d89cf426e42dcb74a279064fa8747eb387fcdf513f658d91b4a9ef103fe02c35d879c9a07cbad40b0dd26ac29c67416492f8711bd391d34cef8f242f0a3ca9c421cc2129d609dbadcbb9a6870aaa5079870ab34
+Entropy.11 = 9a54bc2e5a90360029b9fea13a5336f61c437a939318d0006f07269f0276f86f
+Nonce.11 = 76abe2c9ef42157a84657584e86ac70e
+PersonalisationString.11 = 556f13f8ab3f6650a67625118cfe5eae4c0a341c06ea923172eacc779896b18e
+Output.11 = 1c972c4979ea6f14f39c8539a1ba71e37fe8fa37af64a415bf7d67f55125a4ffab8c7e89643299d71298c1737252e670a898af1c687cec44ff6a224b9ad5718deed65f1ea30a59ce3b7495e7e93f3d7abe9c137cb48f848acea34cd72573a44fac2889027aa4b055f73e40a0aa1a5935990770ba1b69c450deaa9c811df5a6e3
+Entropy.12 = 42710e2a84f8f1d6a31e37e0bbdbcedded32384b6b4d375ea1cf83c77364b983
+Nonce.12 = 1a79de4edc07936df71a9bd75b03a680
+PersonalisationString.12 = e61d835e4f11b75c98918f21b9055a5bbc03e30cf61bb155f9d8b5671f16152e
+Output.12 = 61dc4d2b522e1c1b5183896910302c43f3233d0f4d615250865ae13ddb525e4d32091e832e8ac9c3b21ad0829b7d22a092c9660f437542ac0f5d677ac7c70712a8073696f96264daa0d600f9c1c49edf79c03f2c7a2279ffa1efb1e05603df367ab435791af7ae2b15ba3531540c5a57e00bc5d20f699251cca26acfa2c10e1f
+Entropy.13 = d242a4324a6769c5a0e4877166fd8fec89a5cf2707bb6556cb30805f003927cb
+Nonce.13 = dee5f4c2e66d90f90217cd138d5946ab
+PersonalisationString.13 = bb95bb17629b0611cf2ca41b8762f0efcf3795401bca5b5770598982f2218812
+Output.13 = bd331c3416fabc12e29d69fa497d42038c42b17c1a2eb717cffc6bed960ba03fe156b0cdc83d5bc97cd4013e8e04d2a2588fa5064449aa9829abd64ccb5c798f597991e9d04feb5c80c09feb48247f421cc3953247662a98a4cc9b48250da4c4eea6fbfc8a5ca664c94c4a37445863787ceeb112b25fe17ddea6822464475632
+Entropy.14 = 38c054fd0b1218674700518ddd07985cc9bc7586bb7453daf0e4c0a1e5b90dd5
+Nonce.14 = 704e8e29c7aac1d8cbe97bd7305f8cb3
+PersonalisationString.14 = 631c5d0240b8d9800211ee6c97a5ae77405a354ac25705f22d405e17a52109cb
+Output.14 = 9ee855e661d4293fdd7353492c711b39625ead90849ae5808b1f67c55cabe17ae13f0f18c0954341d6a2d24b899785642c0b29bb1b81fe098a17f8701e8820cacf6c00a8dab2e96e7f8593e188aae48385ede7bb5ed5ffa3f19053663383d666d38eea377d121e0b55ee58ee8fbf1e49c42a4d3d48fb0c9247c6b94c6539f4cf
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 787c48779085a05d6231d2591592c314f6d02c5464bc09a1a93a6702fab01f96
+Nonce.0 = dcd3194eb9a2afc84d9c7c9f52afa40d
+PersonalisationString.0 = 6fd50a9e2da23475d56f6b7a2448190f7f2774daec7f5958c6a1c651a041f3d8
+AdditionalInputA.0 = 06678110a57db40ef01c41380005dc5450792440a5588c49e46468367a908c19
+AdditionalInputB.0 = 88f8ea0d2170e0abd6db21f3292cfe299efae6f14f32588d9b857a4109f8faca
+Output.0 = 9826ca55548efef61cacb0727a7c46336f4d9ecde2548730f6c495e03b04f3ab849d9bcff5b92895558fbc24912c88b3226b1c693668e28a2096bd6871920229e637d8ad81a58dd9068bf2721b1c7c99cd8d54a13d7d2a47f9ab3b5a05321b889b73880ee6fe402ff1dcb4a4bb4a10d2671c8726cd51fc798e29e782312b42ee
+Entropy.1 = 8419d978ff6545564b6b839953450421958fe8e14a9465be9f6bc266c8436a9e
+Nonce.1 = c33466b6e5ea840bb1e865c401a36cbe
+PersonalisationString.1 = 78f45022f965d0cc3c08c45a9d496defe44acf645a363df9d3a04436f05dc24c
+AdditionalInputA.1 = 0492c567dfb909f96c855960ecc92c89c52b7958a65c1271998e999e67c1b2e0
+AdditionalInputB.1 = ada1cd7e1bf76e83c2f558166df077965dbeee6e33d11eee56f1cdd18a580a85
+Output.1 = e3eb9e3f61141654980e1229e1f0abc758dcc4ed3993a7b135e168345a1227c6abd171e32d7d2d629eed40904b1966f5862fd0cc616b90e1b21441478cf169a89d8a81018b734d141722b0ca7531c7ea4148b67bd30ae763825954c33b800c260356bc7a03496ad9d095c8c88a57ff9718a676d3e6d75e7e178df55ab16fd509
+Entropy.2 = f4501d68428b8225733cdd04405de609984a45d68b6c2763c96afc0beae6ddc8
+Nonce.2 = 501167667dcf754073ca65d068fb8cdd
+PersonalisationString.2 = 0f0846a752e97d4e5d6ca160281b23e8aaac87ef40a509f9b66c6000e1b7951e
+AdditionalInputA.2 = 24055ddcb920530f4c766f8ec1d9364b64186c699e0248b09fd1e649d51aad8c
+AdditionalInputB.2 = d99b2ba13c7b61cf2e37cd7fbd731e44d07ae7f351f22534e7a59d7552bc78fd
+Output.2 = 9f08db4c787cf75d6de9044088cd1448ce729db616048a44262aadd71971e9bfb89c4ad7c5ef51036afa4dcd24c186145e19e60b0da7db074146c0822db8d546c8be4a253c12cb9249a2785c83653b8373415724ce8623197a098281840e75a2fb10292cf91698bba9e94e28adfc80bdac688fc5500f2262f5969898422f998d
+Entropy.3 = ca0acbb8240b6a6d7ecbf6c55be3d06f18b014be52cba699466a232be0136d24
+Nonce.3 = 76d75219922f60dad511b3c0ef182819
+PersonalisationString.3 = 3582b0b1729f835b0691e4f983559d5a238573798ad1548a352853db26d032a0
+AdditionalInputA.3 = 67e6f9ff1a82ae840936f811a73307e670f2d66392be598643a7308bb0a5f6db
+AdditionalInputB.3 = 35c43ba8a676c181a84b8221674df353e1e931dd9eed60a5de2e2cf43fb70816
+Output.3 = f6378139eca211985b2ef75fdbf4eea1cf54ffdcd7e1a4a72a73d95fdf71eb89bfbe724c4dd48ab9d5597f27f4575108bde89981c29513ee885566a985d03a87e354fbbe0136c9b06c9b6d4aa59e7d2a279cf17d532f669213b225992541327fc4ecba79dcf7d3cec3cde00c777a82562c7b4cce65122db6ba0203b494e08b88
+Entropy.4 = e83ae0ed1943eb9c2809f3b9eaec39ff5f500f3132f604f298416858728eb358
+Nonce.4 = 0367a08f5c1e0a54beb42a970c7e2dd3
+PersonalisationString.4 = 7c94613ee30a132d23a9b84566b2a9e1bfcc79299d44b731e95814dbe0b759bd
+AdditionalInputA.4 = e8419fcb0879e0d71015bd1a633b16d2a487d4bd000cd417550f0e8cbb3afcfe
+AdditionalInputB.4 = 57acd6d9a9e8068959983352b2946bf9705b0eb78dfd7b101cfa283d8ead1964
+Output.4 = e953667addffc7400139226cf2d67b1fb42cdef09d3d0b0adefd187ba5f305a27bd434ef111ddf3acf083bfcf4839f4ef14f920414138771f3df3cf0a95453fcfe241fd2513a9a4596f60594ed3c53d898eed2bfebe8dd86529d8274078ec3cd863b16008bbfe1fc54e2ccf20971071dcb857060cddaee639968f99e5c1b82ac
+Entropy.5 = 8e53d83a04aaf00dcc566a75ccff8aefd3f61ea666ccc8013609349dadb565c9
+Nonce.5 = 651bd9b0a4299307f37a82e75a7b2a44
+PersonalisationString.5 = c0f8073e1efb565acf9ed8b72117f21b48e5446243fbfe01256cfc35468c4a78
+AdditionalInputA.5 = a679686fba48afe9a2478c00b4ff31ac3265b01e5f3db39e239fc84458d3af13
+AdditionalInputB.5 = f63cd2d881417c3867c51f4ebc6684614ed5f4c323925682c983bc9d5a9d1864
+Output.5 = 1a165a16982c6f3ff3a751edf32c64de810be8efc19ea938c5586eb06030351e7ebdb619a8c306c8f06efbcc45af7dd757b84061e286ad8fec70a04a7f07e335b3cc6df25452581c3cb6fb4b41725af43cdb3e284195897f6b79338a5c1d38c5da6fabc2955338f3e0afb38c354ccb2cde8a0ee4d75b32d250ea97c2e31fb8a2
+Entropy.6 = 4a319ea174000a86ea3c206788356a24f39b6b1d45dac45b2b2780e0da9d5235
+Nonce.6 = c78acaa506ce24a39c3a329082228ddc
+PersonalisationString.6 = cbeeb7409f7344e1f5dfb063772e0f1a18895ac6d518cdf9e17c40e7b7f6edbb
+AdditionalInputA.6 = d5c04a32ad65d11052af3c4c85e7ffadbce9eb4452320c7621f492371bc6419d
+AdditionalInputB.6 = 3a88370fb54310f6438f938592b9bcd77ebb34bdb37e7fde5bdb3e2562889127
+Output.6 = 19ecf6190bb39b324dd0f42224954ff30896abbbcffe8ed1722a1fb3f07c5ee1fcc18ea427eba324e47380d9ca449d929893f8c5059aa766db63c8ae5b81d5334c3c099a1fc51fe667367b9c63695c194377f8f7360cb96f4bcbe3af48a48cdec47279597c68f2d154920d257dca0732e12446e544f23c71be0cade7226d1570
+Entropy.7 = de1c59568428ef983c6a90c567681d29ed17cc0af4cdf2464aa5c9fdd8987cfe
+Nonce.7 = 055455dcdb95f23380f6183dd4b387b0
+PersonalisationString.7 = d6439b6910cb7481c6410786eb36c34928b9866d10883feceebf4fdf8b919ccc
+AdditionalInputA.7 = e448c47cc32b54cfc974ab323bd1285bd3e8263b86e26fa651dd2e75b83f4773
+AdditionalInputB.7 = 632dff833d94261c2e06f68afbbb7c269d625a258909dca1ad7045234c04ebd2
+Output.7 = 746746968203f6303185521804bb95aebb6aca97fc75756f0b69aac27cfbda34852fc01156a819114508fe1d7ef5c768c5b3a06f460aa493321ad3ada6c55baf0c1dea628c7739cb94a129e685a5dd26c6779ce38624c47378784c046afaebafc72f52313b2ac5e083718f22c3c2ceba5ce908e07d4381758d9a8b3cf440660e
+Entropy.8 = 51ed5271ba5fe49044067a6fd6a3549f7ccdb9b1cc777febe7e2d7ad526a0888
+Nonce.8 = 9e63e687657d4810c9ecff60545b49dd
+PersonalisationString.8 = 677d3fd349e811cef125bfb744f3d375b1da5ed6377508f402f51f75d4d11394
+AdditionalInputA.8 = a8892f9e83ff65ebe94db299d6d5142054a956ceedf01499584c2b6635ca4a03
+AdditionalInputB.8 = 36c6e19a77fac3f94c545ae8a1005e794631131ce1a84b05bae82e2d6d770842
+Output.8 = fd793800ee78e5882e8624ad9b5aed75e0812369914372af82ba862504ae124f28233e6679df927979b380a5b24c90660b70b3545b435817c69f521b48a9f5b0e4de336bbbdff3287ffda87c5ef1616ffd3aa946d53bf2e85d3aaf935b56637549882683c93aae768cca00d3957b2f64a07e57d1ddb9f664edc61cd56ced86ce
+Entropy.9 = bac6a7ae5a9b3e9629cfb6ca94fc29e4c20be0d0f105db3db1ff13e5c856e1db
+Nonce.9 = 2d0b5b5052a1bb0837484fff457fe088
+PersonalisationString.9 = d5d69ec6bc1f2d60dca680e5d0ef40d6bfa6c3437ba069b177783092f6dabeb0
+AdditionalInputA.9 = 00297a1384274b1c127b96353f2719ef2c1dce5d47e7a4e6accb56e629533960
+AdditionalInputB.9 = 52ef349adc5cf067343a202a26806a3d216bda0699c3706aedc4d7adabbf2d81
+Output.9 = df73e17dc405884ba0b2c63d3f63a13200c6e7f3271386b3cc5433ab47ff0da54f6bab436efa258c9aac39a8c9b952dc32bda50b21d70edad0f882b0dcb48f7164881360f7f22b13ffb67bb660e2440ab6502dac4b7e97b7d89754f41fa60187d74075da14329369e44f68bd984667f27fe05f937ea3b3ae065397f29ee52e7d
+Entropy.10 = a16990706c5ef1957bd9e18fa57b842471b75716839674398374d47edc03227b
+Nonce.10 = f12b99443b8d23b0c688a568faaeb176
+PersonalisationString.10 = deb8909840063ac0e3febbb239efc1995cdee34aba6ce5f008bb479a04501b2d
+AdditionalInputA.10 = 923d59bee650d236df875a299312a10149e12a050a8cc75e2063a2a8e8ca282f
+AdditionalInputB.10 = add1359827f94de55e8843d12d2b4e442ca533ebf6d21e62ad36c31115d9f27a
+Output.10 = 82aa4bc73ebfd97f709048066cf8622d467a017bd77b94ff83cb19fb317b4466e953684c4c85b45b210992c234cf42171b59d7eeaac6efb0741612fb10b9d79169b6dd6674662a48476972cb2fc3baaddc63ad000465f013b711bbee1d2ed9c3729939ae30f72af5105406cacdca8726727d36e978d432b45167ced25f0018e9
+Entropy.11 = 64c66c0990ae8dcd8dd1d865f1971a231734a61d4764568e42cde2cf0ebeb666
+Nonce.11 = a3d1e7779fe1b2f3f04a56784056f605
+PersonalisationString.11 = 210e12cb24d0104469be92278501a407c431ec2ccefc819913306f10a1734f83
+AdditionalInputA.11 = 598579c0de0354b5143b792849fd5faff95b71a5c426f58a29d0ce7570c3ba7b
+AdditionalInputB.11 = bd95ecb2eb2b1ea883405a076f2dd6b300c76f982b23ee84f908926ba7f706aa
+Output.11 = 0800743cc3603f8a815f5426915d036969bcaabcc2febc1c3c985ece7471bfeb524d9e3aa17c552b6cb911b7c91acdd5f743917d3f959aa56fd176fa8554ff48641f206b9cfccfbc1f203c39e9c4273a8cff087dcaa519ef3a325bb85425ad871ba11840635c5864f08fc5932b8fc47bba71f22c7af3e1df4606e55df2b2c58b
+Entropy.12 = b1bfdb68de4e646ae5b549563f2b5a126d701fc2add3789d45a69cc59b1ecdfd
+Nonce.12 = b7596e47dba4fb94210262d914161cf3
+PersonalisationString.12 = 294cf4536b0589729b16c7cf2faa03651882099579351fba40408d09e7b9fed8
+AdditionalInputA.12 = b5f383dc3044b20b2871ba535d6a3ffceb02c120fce00eb076708ef683dcb320
+AdditionalInputB.12 = 9f31e368487bd9900b6ef60f213df9edb75bb4b3958194a4eac7eb217ff7d489
+Output.12 = 92f4f409aa4499889db37c5b9e317614cc0663019f6273e0aab1a9278beedc845107f342b0249726ae3d31387d2d6a43e5ccefcb164225f9626857f2d20abd1a428ea324a0b4a56b65b0473a003c9e83d1113512e5aede99903af9bafc31b290063821e0edb0d2eb66ed4bca6329f8c0bfa76cdc11b084712ca429ad4ae7b4ac
+Entropy.13 = f23296e9f6b4fe0d39478f5bd3836df6876ca143c71cf338bc56590b8d8f4b45
+Nonce.13 = 1671cb02a09e1cce4f4f5bca9ff46558
+PersonalisationString.13 = de2a5842623793527f1d8a9920b49d6dbd57e81e5b1832a028a45a2e60218e77
+AdditionalInputA.13 = 9794e6c7f13f59632bacc55354044261a0a3e9fd00ebb583f19983f8770aebf7
+AdditionalInputB.13 = 6843d1d2642d6d311b8d3a8c07a082ad9fc7a64578e7fc21637d40ede03a35e5
+Output.13 = 0a0f0e17827b2d90ed0beb105267708d21dcc1d6f736b6edf4ac102cf3e727b7000dada9c515a30a303103b9db763417740589e3a9716946f9c77cc999a984b0d0b74d702b2a3105be6cdec7a0e13ff6d61c3883e43653c6ad8b70a49f1640d66613c941a849f34da8327844750dfe3786ed5836c0275d991b7828681f767507
+Entropy.14 = 0ddd1ec822682f9d3e48ba216777831d51a2fd2a829859c44c410c55745b1426
+Nonce.14 = e87f5807cc22d08355de7ee7432e38c4
+PersonalisationString.14 = 416cfd40dc3d7ecbcdab031cdc6e109a897fb34fef4de26c06865abac16b47bb
+AdditionalInputA.14 = cf6884bb4cf7c08ea954cc2d2389eaaaaaa3bf9ab1dd74372c20bb3e1235a326
+AdditionalInputB.14 = 2b30cc597b280e704632ed1cd2bbbbba7a9953deaa809848eb937b6b1a44b91f
+Output.14 = 4de8e3c529bda0753a9ba237633be4c844308c233d6e58995c339cc006c7d4789b5f1a6314637b9749621fae3982c5a748d58c080e12118d4442bb55732da53daeca71d3d033b10a2a807848babb822a346524b4a41e9d85941730b21c0e80a9871c9d9aab0e6d0269258b57fcbf7d703794bd2e5f3d7b3da9d3cf2dc2073653
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 977bad794d6a66f653391048a93fd5487ae87d5786eb3660b3242f9745196945
+Nonce.0 = 2da69e3c2ad6113fb856e64a9952f59b
+Output.0 = 3b668c087681b0754e11cf961586916a33d94241e30590c54cff103eb8d5249305b4f5d5f2caca1f2917d76dbc88b6b7c5d7fdf81c4d2335e4bec48ab762dc6071a445bdce662723f9163162719892626ea64db5e5a679eae9e7ead61a4ee68548476807e274e916b78e31b3f24358d0f85b55d3799cd004c52b3f072fe513e6
+Entropy.1 = 6ff27c10e8a5d50a44635f2c8523d5be10119ba9ca91138812da510dc53c3df9
+Nonce.1 = 4f9e28d517e4c9fe2d80ef045415a5db
+Output.1 = dd4683e3a61712a3f9a5022fd85fa721047461c3f14594cb26e582159c5da63b6a1feb35bc2d5ad0e91d6753afb88872b0a7452a794324bce76caec058b49dcd1bcff66650ab4351d28bc9f27470f49ff0624cb887307a73a53b36ac538efe7ccbf668452d554f5bf29b5eecfb239f65b4f93f7ec170b1bdd4d702819d1bb08d
+Entropy.2 = e281e4ca50cef54b78023f0216811c8e496c283f8129b67b0138a721ab9d4c29
+Nonce.2 = 3aafb1ecd651aa6af196a5027889dfb0
+Output.2 = dfbc79df8f637f2a5700ad6b909ce181d57d5a77ea6dc57345bd81c2c3abe17698ba449756648d0374f3eaba4330061a9c0fcae19c0cefae6c4117f17c4b4905dd21b279c927fd98eff97a2fc4d8c17b2ff161f0bccb8dab8b8886068d17aec68ffd8dea073ec13564e20c405a15fee13623adfd27cdd7aaf2a445e636785052
+Entropy.3 = 97e7a9d8590a7f6d2091bd6572d47114dea68c15210d696425ba7ca6a8a0befb
+Nonce.3 = 592c5ec696188a36c377709e9f403979
+Output.3 = 5846dc2fd66a0d8c90d0d539c175019eff89c13e8a13924f71db344196a4ae1f42d86ffe9ba8b6919b68608ea89a8a2dca19d2d0ff27fc35e5210d0dde04fdfad4cb5d3d9910312df4daac2b9a072d1002e95b0c062bb7b9423c4402bf7b2a2872b50abf2e1e9a2341645ab18ee60290d3b8ef309fb43aee97ac1a791dc49ebe
+Entropy.4 = fe2f9a2dcf2d3676f9182343ca2bc9778d391d9fd4dba746bef150a3c64d0312
+Nonce.4 = 1c17ff1e271f7ec1dd46a027eb762c24
+Output.4 = 9007fab4989a4e950c746ec716dd16df19ed62530d3926a363660bf3ee321d86ee698510383bdd65a5e8e0572c41e3f439ece3e8d9188469e086afb260cdd835aac531b449729eb05c4b333060ce2ace0b7db464fd6e6227b4d0e2b0458b8cc64e4a4c60e1c9976cd2ab4bff3427f3d4da8ca3e79f6f02262a48bc6b2d0e241f
+Entropy.5 = 0659dfd417ff136896c1bb6b2adc25eebc70913754f764cd1fd5d6d00403cf1b
+Nonce.5 = 4d85548cbb9f647b60dcb8d28c57a0a2
+Output.5 = 123a082d2228a4371bfd8666d83cd5d4d2d3d140dde50c8e0a81c725ea38145d4cbe27d96abe618594812fcd291523ba4e15f60a19d7e19296076a0ea082ea082639579270b2751d87d1636df08b38f542891024a166b2927335ed5d98c468fee4957867bccf2e5b03d631a7c30d67e4730503a87010608a4b76d10f0c789719
+Entropy.6 = c56e1588c753cbbd1f7b4ea9caab01e9e2326b194f73a2da7a50eb1006ec9cf4
+Nonce.6 = b7d1a7edf25ad51ec8806d85152aaa21
+Output.6 = e76e079021c9403d2dc1e1d1c116948b34aeb08ce8a11fd50ec698e0925570170956febc0a50be7f08fc175e27d989e11802403ddfd9d5354391fa716cc83fab6a26b364aef36d810b8822e76d4474722df58590148a0ee798082a7c22f3a8e25f8e30d3f5b8189f1e93ba8493f395ab2fcb42fdc6450af3865d23f734004c51
+Entropy.7 = 8491ecb34bb773da280dcc16a53d1ad06ec448b1cb07989e7391ce231941309a
+Nonce.7 = 5ea5d2bcda790c24e14e8974fb4dfcbd
+Output.7 = 19038826a6ccd215b4a65e99ae00449d5591313e9fb0232c071aefa2967ba057ffb593dc1017b18c80cca3a0e11d9f380181e0d9639cb353a668d53ad090eefdd7b7d1f6957c18ec53f4d790c6c30903a8a3b6d7be0e113fb068a15c089d6178374d5f624aa85b9033f15decd454be569ced0b6e660240d70bc75bbfd6908c13
+Entropy.8 = 48badb5d8130d9bcef7d56f70213455887fbbd9b6fc52eff7f1fce3e1686b342
+Nonce.8 = 9d43bb414ce755be3dcc04016a8c9870
+Output.8 = a64b5f39f00ee23fd9d95613993ce5f69c1f55c466e0434537b2c3829653f59f0a35742084f7fef22f24f642b2912fe2285eb50add5fa76e9cb96d09a482776ea8f82886d547864a0cf5e397481192a3fdf11a8a1bce892db86b7e9d15a7ae8a12607410203fc787c92b9273fa522ea7191af0593815debc41bfcbe465df0790
+Entropy.9 = 46be19b1b70166e32c2b1704387586c3c50a79749e4f9bf3f2966403190156f8
+Nonce.9 = 4e706f2158e038b19dab6c3bd8137868
+Output.9 = 3c96cd98e0beb49b8b88dea365cf70af8fdcf9c1080d5212fedd1cdda17c9d008425acd60254c21c411075164bf50d0432f3b984e5be6cac47dfa4efa802f15432ccc2c2630cb0a126c33d6a2610c6631e6dd1f1745139ecdfec8563fffed93afe2f35b5435fb600d451830d391c924ebdb7eb233b1ea8df38a658e3e3fb1f14
+Entropy.10 = d48b7cad74849bec068e7743af6cf710685cb4e1f2a8b7d7267a12ccbf3c3706
+Nonce.10 = e61fac110b7beddf3d9b6a0956991600
+Output.10 = 755835306c0c0b799cdfb7a6daee20d560ce3b5baf7bc6d92d60eae60f653fe820ab6896bf18aaa52b9308c9afd940ed447cdb7e52248597eab7cdcc3bf9b03b078874067a4a4c58e548797691f687db6b12aa61b85d70eb6293d6e7d0b12f906e85051183152427a8f6aeb3f4f27fbc77dfbc6b27939e4b94663f0f120ba091
+Entropy.11 = e71e6ef37a8a6b5b56941634ed456c1a36f0168dbb4e13c21f89e7ab1eb843e4
+Nonce.11 = 2bdf609ba15aa5ee348c3a18253546dd
+Output.11 = 21caf52eea10dd1d5182f003b2161e5608677721dc926ec45a5c3a13640b2459809a5eadd7f10f314a0b1380d5cfd18bec41fb9a6f3082e6be19f0ec36acd640d1013f62ddb74af2e4af37c7b6c50a1d993612dcd1c1a3b008dbf7efd80a2987050a33b0c5e0eeb51d9bd42c3782a7f541a4d228b55a2f2ecf54bc72d2cac46d
+Entropy.12 = a6ded3a009274d1aede6412ab7a2383bc11dc302a82309fa6e4a25159635e4e7
+Nonce.12 = 42ba80e06774c7355d245b103abd8dff
+Output.12 = 14e43d4cf7fc8efc26c36bf74b42381a5f6410fde51e3d37c8dcaa7d2cb8fa1402ed73b7f3b938c7cfdb13741557e3fa45851fe54e35a594ba0c07bae01aa2bd3a667813682d4b7a1855c48d8ac7ec0a1129463e8659744fe16196af806a305bec9e8c26682f3d4c4e710f380fc6b998a0de036b042058eb49b51da561245e1a
+Entropy.13 = 01097e91d496e7154abfafb70c4a1813d5a4c761fbdba36f097448f6c1920b12
+Nonce.13 = e3a1b6a347bbe21c7204ac04e5499866
+Output.13 = ab4336414fa90466d90b7e62b6d1aa8da7b590b6e95a1ed298d3300bd1f1fa5221225d34145b2eedd00ecc25813661d8ad43665d9f32d11a4ab287db83618006ce7936f559c9376fcd168d3c7cab6a719d1fdb2857747a9173bf3e644049d4e8cc82d49a38957d5b6e84c316784197507b883b91ec60b2bced85c53d8de4af17
+Entropy.14 = 043872fa9f0c4d97e2c6824b778a4fb0debae214d3358a5aa01c0092c9dab6a1
+Nonce.14 = 0fc8d529a37083c2efe84aba8c8abbc0
+Output.14 = 22e8eb6b4d11657a66cba93f89b519bcce87a9bfa5ee22cd3cfef6180cb8ca842e8d408257b8140fabbf1dd65085ae62fb8b1d2a679dc0bb0a82ecd3b8bbc05782a20a6345554a1f5467e9811e0fce41a786c805ce2882f8b4d972b9a37eedbf828a381d34bab95efc47233846f8b5c701563033253323eda41effad5fe37d3a
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 53bed7c2d56f54b8a7d7da4c218684d5f4cca7fe7f5232a7360a4ba2e94deff6
+Nonce.0 = a1c969fc148e0264b4ca94a54cf9ed81
+AdditionalInputA.0 = 503dd23f5f5f7b29cee03bd11febe1b5762be2a526807a8a3f2373dd861fc92d
+AdditionalInputB.0 = 733f4c9420087cd9efc5184223c1aabb5cc8432949b9dc5fa717854cbb7abea9
+Output.0 = 8d8e9840291dd82ca3b81bbe67b951bcb8080a5bea13b6f226fac5a9ced6c58745b17fb50f5cb8c38e060f84c5e2c87dbf8ae339a75b0843f99cf37088848b2a2a9c5439d1ca78d4074328d5b3a6919eb8c95f6ede709ea2fc184525e5a875a337004474ce11d28b84285b8a9c43410a766942cbfb037510b049ab68bb485f6f
+Entropy.1 = 1663a0e53c1f285ecfac1da43bed9ef0df072bc8df1e19eacdc5a08c8b2b3a50
+Nonce.1 = 7084d27cb1be8839c3b71c119b227c71
+AdditionalInputA.1 = 512d27dfc0ae38dfc3c7d78ee192e75c3c1b9a0cf76128746983d5b9f1af4fb2
+AdditionalInputB.1 = 349fa0f24ebab5b267a8324687f2a78ae9af7ca61e0d3cf8eb16bf33bcfe3f91
+Output.1 = ecf94d83c640a382bf68727f23301925225ff8919bb897e0d46f27d5832979c11a90e924c842bf89d552d52e1aca427a88ec5893389a376af85d11ee806dfad4fb76398f86c07a54294fc1587f7896fcc90e6ff109537c3c47e95d076d33eb349f251e814ab31d9bee7f1fa0695fda471901e8adc913f1dfaaf0ea2dd6b73ea9
+Entropy.2 = c643990214c2d24438bff1d8e410cd46ebfd5d65cd7f8f00f906a1eacbcf87eb
+Nonce.2 = d4bd6fbca5e9fd2037b1d028ee9aa106
+AdditionalInputA.2 = e95eb1cdce75651534556c0b2ab0a823368d98543483f6aa53eab49ed33794be
+AdditionalInputB.2 = 94f8e4f2193d78c76ec179f5c18349133879cf3143547f23d055a3fa8fd1fb01
+Output.2 = e94713d1a909a94f5a990ef29bdf09b05ae401e5d8df178b96c4f74b00c19dfab4747abd18b423c25c16e50f424b955256db76cf70ffd5d40ec948bf50f6aa0741be6840e2612657e11a5b35c32a39350276e96b04d6796421d0cf82902c6ac3129104c083a51de3321addeda6965fe9cb786e11093cf58397965cd1f2f319f2
+Entropy.3 = 77b9049d963536b980ea63af4af1fb832197df50cee8f51c7817800d90a700b8
+Nonce.3 = c844537f07888ef94e1a6895629b439e
+AdditionalInputA.3 = dbdb062c21f5929605c0a96c7e5d44c9b75b91e5ee99fcfa4f88c4372f852182
+AdditionalInputB.3 = b09e0a49fca41eb6e9b92eba93c6bcc333e6c9418fd30b27c5fef8b403a1271b
+Output.3 = eb172638ba539a1f0ff50770e13ecd8e3c8d14d4edbc42811807d4b300e5ffb283254f32041e04d217f6317b550a18ca39d50a3b90993a12c49e049d5b71da6df922154227e5cacfd2e7eae861a2643b6e5f9f822360b1ae37184c768d96c68c186fa27d943ed98a2e253b6be89b02918a76c2e93cd7741650c40f4d68888789
+Entropy.4 = deb3fe5793c1a2483048c85c4afcac7e13b528bc3bd692d40d48489eb9cacb35
+Nonce.4 = df4e1d9b52514f27f5e89024ff71fdae
+AdditionalInputA.4 = c7ad9febfc8614cd7c1023e836128b92f36dc3b06ebcabb2ffab1bf3bbaa3465
+AdditionalInputB.4 = 79b9fa0be961ba70b0cb1a1a5e1122e9437fda8b738319fddce8304dd00efa7f
+Output.4 = 1bdb7eac9d696380f252b10a010470f5e95ecf590a9f1c117f6d119b5eb9cb00a1f38512b577416cc66073a6e62e309f22401d0da411e20ab0c9c8b33584b96b11fdb8912b637eaa5622df504a0775fd1245b708a4f20c24ee449f86ae6c8ccb6fbf0f46898401fd3c9a6590cc5816ce069a43b1ddee62fe886299488a145cc4
+Entropy.5 = 818a0cdf80f40ea32b6961c9af1b4e31e598536eab8fda19353091c6d19fdb17
+Nonce.5 = fdab476f4380baaf75fb1d982fbfb488
+AdditionalInputA.5 = 7101f89fddbb25ece886405b7a46d2c74e6a7847d32980bc8ff754e7ce92b415
+AdditionalInputB.5 = c88ef1acb3361500da3f9db2e085def49eb09c8e2a783c9db53c3ce70245e813
+Output.5 = 2b2ee30632575980b343f9984ec2bddb606d9356d7667f5849ea3690e58468376eb0b893668636e972cf1342e8292d7057ad1096b0c5611a0e13ed019d5b19db6fce1a9897a251f7a956ef67a6ead90b3389e060995e36341c73766bb4746b6e05f8ca295ddf521e0cd654a854e078d724d789fc427a8b09b11be64c6df13194
+Entropy.6 = 3d5035c8faa2cf1e40eef78e04179e0a69e2abaef1bec7defa52c6b6f9aed63f
+Nonce.6 = 83cb8087ff8c16e7040d859139f5810e
+AdditionalInputA.6 = 4e5112b1348ad1565ff4979b8702771a61cc2abb45f332a2405cd02937c637bf
+AdditionalInputB.6 = a73f2175f7b6e818dc80d6d7d3422424e14887b6987856715ab6202a5d954c91
+Output.6 = 01b678ef0c4b19b4db98568e8c4ec3b3ed35e56a23738004ef10b3d1239672a4ff4187a607169b0c10ce6ad50f8f9f9ce4b79b51617004a9f6c2590e0501f87fb0435d4003e9c3a806e8411a7578139e33e97507d8249c71596d3a6a77b5e31faac0ccf27c848a8f13f90250fffc65492009e4627b46f18b114465c514ca3436
+Entropy.7 = 033041515201ce1a874c70e3d05c756cd8fab846de898a40ee0760e1814622bf
+Nonce.7 = dd95eb79542a287f9a255c29419bc074
+AdditionalInputA.7 = ca3bcd61e5b19522ddc6aaa7ca47e81b7441ada830ae9ec947f382d343d7452f
+AdditionalInputB.7 = 91f0a8d7a8f10f18102fede3dee9b87bede797db283e947084064c73b99b1bdf
+Output.7 = b006ac6104025ccc871e10fbc61757912f120338072ff56aaf3131970330d9ea87088aee89c044a291f31d60eb86270ad21cb3d63d5fc3b7e351d2d778076a354c1795e2d150a40ab250df9b27f0c71d317f9048eb583635bfcd8fbd5d6e91d874a439d2efecea448a227e89270c5bb41d89ab44ef9a81f8373bb6b41469a827
+Entropy.8 = 13d2d8514398f3736640a71a3b7e0f852835dc612d52e75b7754eae492fc0f4f
+Nonce.8 = 7de4e31e1f4dc988412f08c392fc022a
+AdditionalInputA.8 = dacc45511407511b96e81dd6c2730b2407908dc2e459a35ab15af87296676ade
+AdditionalInputB.8 = c9dd61835086ad085f168416167d5f5cb4b3ae21d4c3fc37ec3de01e1c74e10a
+Output.8 = 305797a5b259274bfe0f2207201f8243285d93bd4efe82f2121025fe2c1822de625bc979b5f0e1ef510d9e5e49274e8385b36f94deb200c36f1e344718030417cbb32ad7dd536ae05d5a89abc41d02efd13b090f3367f6b4b721a4c2f9526a7f3609ca0a7862dc8689efaa56dde7b6d644acc3945ef1c5ba7711549e5162e2c7
+Entropy.9 = 1784e2e2ead34b92f572b9615569d0670b551b3007f4d9be1bbd1049868672d8
+Nonce.9 = 009800ae1537cd56f51096a48259c09e
+AdditionalInputA.9 = a4c6f1ca33b8e8d8b2db08a102a15081c3152018fd1183b2107bf90102303498
+AdditionalInputB.9 = 59dce95705a6a5ff512a06e83756b0f3a78a9f830dfff86c0d9940dd3a002d34
+Output.9 = f920f8053860afa83254a8845f9337f9a96f92eec05ce08d752fd140bb859f8b7ffd1e6e557b784b6fda8e2dd47bc75848b347eb0b7f4d278f372bb98b3840a691e099e361379f6f51a8550760aa442a55734cbe3896de6c8d2a2683b7f9e581a39a56a12646371342576dbcf14cc69458b73bb6eea6f9e3773e0b47cc0086c0
+Entropy.10 = 5c194c98095b4eb0f4ae1fc80c5b369544103df2f2ca3d40b1b7779703c39dd0
+Nonce.10 = 78dbc82051f2b1a3442fe1c38f0d374d
+AdditionalInputA.10 = 0af314ebac96e155c097b72ad8f99513653b52792abe10c26c4f503d14b167a3
+AdditionalInputB.10 = b2dc3591fafc18678ad5a4b1c39d148d97b57388e96e920a7ed9fac0a941cb49
+Output.10 = 8330ca306d4589e11e8b55d54a8c7ccbdae499a15fca1e2d8cfda9353e8a6206915a4f30b70c3c271223145aa2837eb0d10dd1c63e92948b643ef5cca0c9131eb29dd951778300d4778a3a3f70df88510bfaf0166177b11bb30c9533e95433b74de04821dddcc8d42e5eb8d20490fac142af5c07dff00ded2fa1a47e7d41e6d5
+Entropy.11 = 137bdb80886869f593a01ebaf099629dae8d782eaf5723abee0196afea1ebcca
+Nonce.11 = 118063ad3eaafb1637169b38baf7c2c9
+AdditionalInputA.11 = 6b46e2d7916693d3aff0eae6868a6da0ea7a8cfe6632b25a114e36bd4a5d6229
+AdditionalInputB.11 = 5702b6873a0a8b4c32455ec5093b045296fb45bfb594db54263241c8759c774c
+Output.11 = 0b4e0d523d4c91dba446dc62ad2e4ac5f96ec2e94c1d3810fca8d5a6bfd0c21a69063c9d1116bab1e3bad3441dcd3ce016e0178c0404e6b79821d78a7b2ae14cae202ec6c3a3778049ddfbd2ab485807f4055e07b373515fdecc514e8fbbda6b01524e47fe3015f36f4b7aa1af80614cd26e019f347538d54c516f6131854dd6
+Entropy.12 = 7a5597180a8373613c5907d94c43c1a2cd11c64ff0e6a295493cf04e7f9132df
+Nonce.12 = ebf87235d8801bedef1ff4a481bfb146
+AdditionalInputA.12 = b013efaf34ce479f34bd2a84d131da339c4c365cee4aeedc69ca8b64d94ce42b
+AdditionalInputB.12 = c0b6b756b3fc84867df1ff288b46372bb18d9edbf8b5a31483206eaddd9737eb
+Output.12 = 835e4e76fbdaf4699ab0fa007172e0c44bec9fea82d49e626134a854738feed48c6cb71cde5c043c37085344b73bc1c9736df67837ea8cf9065432ac5c7688772ae9124dfc57d8f04eff2e63f7489fef1f65feef74817d6bcfdb10be2c6e995d95f36a2df260bc4a2ce290f31e1788a2f7ecc58ddab5f116877e7c2f0ed8e621
+Entropy.13 = 89aaf790b4056daa37e210ec61b90fa93029fbaf5a8efcddf81eb4d7092606b9
+Nonce.13 = a4afa4870d4e79b57f6e7de1de1ff2d4
+AdditionalInputA.13 = 20ddb6bc3434f6ae523520fff328efd3168272cdb36a26928fa8c17fdbd03516
+AdditionalInputB.13 = e05d9a9cf75248f42226f35c471aa30c8f83a71e476fd11d4c910f4210e39313
+Output.13 = 3dc9a4985cc68a6bb8f7bafbe1c0e01085eb9510cbbcb02c2138213807a7101db5fbb6d1b4e45cc2250f83e703bd4846cba9d9cd5f3430f4c634173d23eda6c863ea4fb52ab8cc4edf8a870b8db7d224be58843c38537c479153db76e3bd1fc3d9c3929ed858a45343b9c801aaf1a2fce1a51870248582d5989171e804155fca
+Entropy.14 = b35501793bffce28236d8e784598bc33c674cdb11dca4a6343ba7bed270c6607
+Nonce.14 = 8dbaef5ac377ef9f873c20ab8505add2
+AdditionalInputA.14 = 585a4b6736338ba663522b438ab9255782c39b36e6b253186e821ae969b8cd3b
+AdditionalInputB.14 = 2581ca0314c9a224b09c0c2e677e1df1c215cae0760d3ba03d1053156e9c3155
+Output.14 = e244109b937e9a71caa70d627ec8280210c86676b4ea842c6a4569e5da0b25c1ab3794ade3344e2185641c77df4d3011962e8312aa7c2013e4373204d861e27e88ede82873d5d45ae5700ddf0ae7d523e96df236a249ffc6e009e231b77d64f07f395e57b19a4d2961a6046c910d0b8ac3d882129ec3e337be4cf2d9ef041a8f
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 36bdafb62d8d85c6c1dfc1e74e618967379d8b2894cc91cec2d63e59eea27454
+Nonce.0 = 0e917bee109086aec697e039a2649da0
+PersonalisationString.0 = 7934847193396c925e3527a3be05f8f847cbdd6a97450c421af61e214590f433
+Output.0 = c89c518bf530228c5286c0e8080c54d3800848b6fce01c5ff5e48123c5da6470b54597f08c215d27622f0e3c141088b4dea13042a22ee9f56f9cecb44077b651da382d996f7822878b57124938879cf5f95dd0ca277d132a74b1f0fc4d3264cc2883fad8d2dc5525b1e13538dbc7dd159e56b445ee8edb307adb7be2fbc80aa1
+Entropy.1 = 6a59054b7ac00a84cb8a7b6a2c94f2392602be03a964d46084786e59e3c39351
+Nonce.1 = 2e46a12ecb7377212e7af1f6dfd0a5af
+PersonalisationString.1 = d2fe3aa0e0835ea3d35fdac43990a9996f6a90a3d672d5210b798b96620fdffd
+Output.1 = 67c78059d7da65a67642d78c8a78066ef6429b9410f9c6225a10d59f35d0355dc1d0b278f36e54654bc39d0264284338e11e0f4d2f320e02d18c79f4c12e5f6c06d0123312ce031657308baeaf370aa6eb0706bb75de2d40f10eb3667d13f874ad30bfbac42120ed319e78056b202b19e002ef5e07861bc9dae8f22f606ad5d0
+Entropy.2 = e39eeee22c0cf449605bb65f595a230a93081fe2e9c1c5dbbc9c76ffda60d469
+Nonce.2 = e438292cc51a948e95de47b2b900c04c
+PersonalisationString.2 = 408f5fd16a3f69e173f8bb03b769bdca5da2c7ea23523de2a1fd3181af028ee2
+Output.2 = 64f34c811fdbe73192a8c4e176423e05d8003e7727566917b5fe51e32174ce3ba9ced9aad03720905688501b640ff4b74aa6d59e50fb69f73b31c23ff86d237d16b3550c8b96f426125406d7e551b8e9dc7d5cf3de62851c17931429b83893dd1dc1601eb1a75f977e3913fcfc093743a65dc953685d63d3a9f0aa565735ffbf
+Entropy.3 = 878b3976dd608df84e9f052d4334e8c8509d2216bb700029a99a96d169be21a7
+Nonce.3 = bca9170bf78e85805fc6ea2d3b98c227
+PersonalisationString.3 = 209da5e2d50581d0a52aca020a2f55b63c693801de19e43c7c181761ffbc16bd
+Output.3 = 6a5c5178b56f9c4c7c183f32ba6ea8981d575beb7fdc71ac19697ce58bceecb72fe25428be950adde5ce468d16c459dd7a0f1dc646cf5f53d193df030e5abeddc807b2e888c1adaf74f2a7ee469b82235772c6dc0e737da07779046064d0edfc21891d365afd1c6f0a797907d319f48797a69ca45310e888862e1a4efc36819e
+Entropy.4 = a703f570ffb78938dd155b0cd100afee6c26ed97c2675125c7cbb7dee598af79
+Nonce.4 = ea5e00c45ffcc23ae5afedc3e7c1894b
+PersonalisationString.4 = bdaf2d9baa9b8d80aad7afae5eb38232ffc7a726900b4f33d7e4e31f7bfd5018
+Output.4 = 46c088ca13d596069732cf233a625e9541a98df14d08f2f58b9365817335698a287edcf26db955d096ba43cefd37b4de4fea1b2bbf9c4fd0dd9c34d9d5c7bb2029453a455031bc69142186151524ae8e8c1114c5074a4751dea96c7bdffe4747c63ccf0eeed6732981fac6b28288d414b4ffa08ffbbeace515251e5cee0a6b7f
+Entropy.5 = d2a8d2a92b5e98080e38fc5c86e3e8950a71993dcf8b1c893e0adb64abf2e505
+Nonce.5 = ddd08bf7aa7a03d0af0d08a0f6a91d55
+PersonalisationString.5 = a6a3697a569825871d1681ca5d6c7e3ef7eb927c49738358bc116e2d0b65fe61
+Output.5 = 347e66e4ed7cfa5255275d5d23312489562f7d83e024e921344223945c1135621e09f52cab7a6425474c40c4cce594257451140d31f09fa3e740cdc17884aa01d251976e7c8f9671e26f8a9de27d163c951a970e2ec471324a77d433303b5192ecb5776d2f93f3741c0911be509e7c868933e1494e68e997f0758cf364b5a8d0
+Entropy.6 = 4c22707f97a09ddbda3ffc43e2dc41e2d8a91ea751c327107b9addb62a2f692f
+Nonce.6 = 3cb7afa9053bf6bb6dc98b7b31618405
+PersonalisationString.6 = b1dd737b2c437ba426810c0263d10992ca9dfb0efc8fe5f64a2ccd8f2831c25c
+Output.6 = 2f0712ed85a3a7ee5f940e37ef1bb571bd6701c98c45ae652be0f88895c9372001eac4ae4c728da07573b7cfd3443ff18ca0e2d7f9798457b5133fed02f25526accf90ea69eb57eb582461106a04b2f9175ec301ffb5eeaa392d45e250016b1c64a466c6215febe159bcb15ef702a98514d92a80f4b8a9f8b5835ce1d07ce240
+Entropy.7 = c5990752da659ae294056723ba56ea93a82bd152530d018b5b58b65c65628605
+Nonce.7 = b068f59c108526820c5d490b312a4686
+PersonalisationString.7 = 7d032fad9355aa9c73ad6d80b2a24ff293d9bc7419189088a60fdfe57df59f6d
+Output.7 = e4f4d01ab06caa4430628fd227b24581b3c0f33ae51eb6a5b4ac42aeaed548d5e44c286f1ee54a45cda80dc3a16e8ef739861d40711e5526191dffcfd6082fd38392c8ad5525dd3c4bd00db00086b48b459c1188cdfdbd4fe5f0ce8dec7dc11ee0238a813db043e1c73de82abe21396f86d4d11495302e64a487da654013b62f
+Entropy.8 = aaf44678e88d8e7a98da178d806d543dfb77593f2097c1aeb254cf742c59b765
+Nonce.8 = 0a971c8bb64fcb80edd392656d322beb
+PersonalisationString.8 = 88fcf865da483f1feae2299ba3783ed417ef14671d4163d5c85652ebe44d1f29
+Output.8 = 45d1acf678c646e15a9277a453b77afdeeb7214c49c29aa8e6e8b849498880028f7e764ce1713e6771b633c3753cdff943b96366d5b0f88d8c41369b352f6e0f8939b37b90fa79195677c555ad48aa0d40050ab35fd797758bfb20757d26f44d5b610ef0c0172546d6365f7a861c629dc8fd9316b04654ce5e309bbbb5578627
+Entropy.9 = 7f8cf3f0c0ba8c3a8b72c6442f486df6121431f9622f2359377ba05329d61c18
+Nonce.9 = 0768cea6f0fffa07bf57a9d99edb900e
+PersonalisationString.9 = 80e5a3f74e89a75196069f8b90254b3809e8e9695c70624aa6fd2b65bc7932aa
+Output.9 = 0e793e7a940a7d5ec3168b7eec9712197fba8d330cf4e0327ee77009d9ba6c60f3b75586ed07fc56f4b2e56834012791a9f34cab2d9284644a635026244f3dc6798414f3f9ba743ebd3eebe8f5e7a2b4339730e52cb001a48015398a89f5cd802e8da1bed1b93135bba8f0b1f71ba4e1ed3fcb6d8be05102e2c53fc0e8f0daa5
+Entropy.10 = 5f483698dfeae3d00e4dd1a8c5d1055f9faa9c37b76c7f6b427d4ce1504e8970
+Nonce.10 = fd6abb49f9982d7462c1a52231820301
+PersonalisationString.10 = 24308ba52c488b388cd3ed49277fe3ed7f4023f1ab2d4e839da7e3e2a7595c23
+Output.10 = b341031f9e030db833489f45c065c9a106abff89b43eb0112cd8ce2825b6cf25a9e8d58c969310c1bf9d6c849e133e44419c5d23d673b897dfb7efdc688fdbc779b56f714d8434b5cd12ca5a657e3c0450908425612e230a9235eadeb31d4202f02b38f8eda36b4135bb8a869eafe9ca77410adba8089ba2b305735e262633b2
+Entropy.11 = 023a4f36a435e33b4b6b6d3c484a165ebc61e9090245ff07fa59a363c29d5115
+Nonce.11 = 07309a34c4749f791e2f17ddf711ea93
+PersonalisationString.11 = 0d20c4c4be9883e1e251f3075193497d55c9bea63db4d1b87502e037a99abe61
+Output.11 = 97e85682a9a3260f958d457d6adda086902d65415dc9716f1c8f54c029e5608c15e0efdc5729cba64b373c4dd811b156f7730439a4bb3564bf64c9d5ab170d4503dddc82b5572489898e9d5230ac318676327a983b58a36cc28cf7fd082d63dbb4bce99ce3e949488a98a3aac576d83844abb41089be54056b41e2872bedd0bf
+Entropy.12 = 156a743c0ae8e39ce81b7dbc3c756256aab68d488e74c857e630b6ecae78c853
+Nonce.12 = e9ea051ab34490e29779b79991981464
+PersonalisationString.12 = 4ed22791055df7800f153f2f0c9187629d6bb1df4cd5c5ae738427a40238241b
+Output.12 = ae7aa0c1fb0b2c44775bfb5eb357104e308fe3e4ac21c8b0dbcf0810c815bf59473f3d252f4b469607398421ffd96bc116fdb09aa3116678d344f53b44230198cd1d87cbf3f82e68a3f7890487f93a7c8058d2611f5b952ef869fafa542b3006b833bbd27fc5a6115702778d0c87e7f76d96fe2164d95c1bb29e15360920480a
+Entropy.13 = 924140b7374a855269956d3300dfdaa74f7427815fe8930d2699ad9717f12615
+Nonce.13 = 1a320adc8d60f29ea9debffc2d4337ee
+PersonalisationString.13 = a1005683468a9e0443df0fc9170f80c950831d5c7d41f3161b60be684248dff8
+Output.13 = 6e6d4af61a5c67b7265c74e2da280ce8617adaa90fbc64fd886de42a5107dadc6eb81f76fe02e8bdd2aec2c6cae4ccd11954b5033f20303cc0a301ead5b33e94ef1d95173bf1598db7aea0087a92f838b1e18fe95e738b4da7f81e91a0060fdf2201aaf4c9fe2679943773602a0abdeb784c38538b3a47f47414086b3d299ce7
+Entropy.14 = 5c8a9f7e1416be2aec921eb7e0534453ac6689deb0e569011ae6ccf4375acbce
+Nonce.14 = b2328815495d926dc8ff075d5834bc20
+PersonalisationString.14 = 4c539b94823c6c7883b071ac395203bfb5117b6f9d5db7cf4063132e6a2a3cb8
+Output.14 = 4f6035946d4305290485c7aea10bbceb99b841770dbf5529e31ad51b0ce138344ac0b193a5074234adab8887a51d9448a2cc637a543372ed93885975b8de342c6a12a1ca8f3d053ced1dd2c7d6a3fabf6ea7860071c035f0fd54ee5775ae3a5d457d4af9e034ed337d79e9fd52c2ad051388dda50aa78d37403f33d52d30f6be
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = d19e82a4e2c2b36a505783ad251a1071eee4865322ef2610905f76995f37605e
+Nonce.0 = 1ad142f81d7fdbd9a64b3ce309626c57
+PersonalisationString.0 = 2c59345e9e1d887228a03ed83befe1985a8a8cc655af7dd208b66bfa9778ffb4
+AdditionalInputA.0 = 35703a613a2d8d8f5369e10772f5829c533e9e04ad6e7110cc94b4c60fc823f9
+AdditionalInputB.0 = 7751c478f25880bd986e763f7855ac6ec9fe00d4509ea48e3272766e2623528a
+Output.0 = b2e4ae060c3feb6de19ea848bcda053f34576b917ae63efc8016b8c6e6b843a34adcc6ed74ef17fb914df9a3e252f538e33e21b80a721f1dba4a3170e3c9c4d35074ca014f375aa0cace0845fbda7f0c9c75bfc47d1e012b85da16597568e666f96ab3054c52c13feb953d46b91b8b9fe90f292978661b1a61db9fe01a7e9c31
+Entropy.1 = 15f593886acd66c07f5d865357997fe347839ae7a3db83ff582110d8f39381e9
+Nonce.1 = b5d1e47b999c97d605f7496c476b8020
+PersonalisationString.1 = 16e3533318db21a3f9c46abf694c9622b76d552f5de62246eac8c4744fc6859e
+AdditionalInputA.1 = c1892d246475f79ac3287a9274980022efff11d1b4d50edad5afe96d732e537b
+AdditionalInputB.1 = 6bd330e5a775e9bed13096a690cf069b1a38616dff116ba48f0bc15e319678ca
+Output.1 = 81cf6bec1f9a2d4e39e0b1ed642a9c439b43677ab7865e39e03380f290cf6bc96fb50e98a48a1c1af96a705cc8d5fee58afea6459598589367ea75a02ca86a41335beea72c6d215e9eb5ad2635dc152eb4c27aab8976137ed562466db07ce4276dbda8588ac8192ae93e719a5bce0f1daa83c65bd272fcd7aaa7d405baf768bf
+Entropy.2 = 461704ded9c83e010aa8d73e4ca3f2511ac1e3e05838b471d339e5bae3873a32
+Nonce.2 = c9eb680ebeae3d9b469e7c559c5281bd
+PersonalisationString.2 = 16d6208bb7aeda26df9f566626b00fb14279124b6c7055be8ebec6f6fb8d1269
+AdditionalInputA.2 = b3a17140c2a9bf6d1bef8306c658693743e467bddd428229c299efd998bc7e09
+AdditionalInputB.2 = 6054cdae20567e46a081a55f15ebe5ff754e21de0b727c361e0355fe1b2582cb
+Output.2 = cae06dd7050936f4ccf9f614b54779a06fb3e780099884af4e4de9f612c4e8f6dd9fb46aebfb35e2933494414411f923b982faf330f2ec6d96ae021f18f718f647d3c1e3e40ac42758cf84a30ec2c1f86e1ae0ffead7a9de27222c2431991422ad723bac9a89d951a3e4f4c96e4560f90fd3d10e0032a6a4ee4b452747c5f997
+Entropy.3 = 11ebda61ad081bf2ee5aaa20003ee951bbe28c83beb46935f0c72306c9de9504
+Nonce.3 = 4d03f6deffae5fd793f00dd6e5eb82f4
+PersonalisationString.3 = 5bc1a27851efcb22dd767457ce0c2282b39f3d52849754511f507f31e6745f8d
+AdditionalInputA.3 = 2fcc405b2c6c634b7ce251bb7e5a35ae412a1cd35f357a40fc96073a026ab65d
+AdditionalInputB.3 = f127e9435866fc53fac707c8ea671aa849a0818252c5695ce37c13cd090d9b78
+Output.3 = 12c0d5dc580e8c061384f04f4b77e7127def4ee3a02657b7f7b8d386b40fc9bfc6efc92baf05d34a91ef6526f8e73d3d96746231396a57222f3b56d3606e197bc432069ede15791a0390ad0f0b3e47044fbb98d944e9972e88235d11f2251d2add7b5e0214a5c4755d37dc166f15197f33a4e837d1e84a46a0f0065472d066af
+Entropy.4 = 9a2d32fef1e20dc727be0e0a829dc920f5243ca69b398a3f1fb6040beeb6250b
+Nonce.4 = 2b3785395b404c827a639174a09f22e0
+PersonalisationString.4 = 9b30dcb792fe5160620608f3a1e3e8aa2891b95450816b8d9ed8ec682880e78c
+AdditionalInputA.4 = c6afd869dd2e5898ee4f1117d0784f55d21570a2adbd7a2ae31a99c9b2da383d
+AdditionalInputB.4 = 479c9ef7b5e80e3e7d239885ce16d64f4bc319780c147a3826fd7b676fd40a7e
+Output.4 = 91453bc7f3080cfa1d05fca4e8c786ef87eed1d3adddad3b0d0e7768867d86de1631dd09a0c5546bce783d9a7d83554c1420e837d43059e095f9e0770a4daa48bae983777a03f2808923b053d0a2c4d52b8f89048883799d757a685a09fa3b4292cec4b0b95bb5225539513964337670f88c0ced065283c66f1d9ad231c35161
+Entropy.5 = a401c7f698176237e9fdae6d6c0e53af28067a5538a6cbe64a3b88be8404eb49
+Nonce.5 = d96e8c6a441164930c8d1dcedb04ad83
+PersonalisationString.5 = 57a5da1b3bb42f0b8f685ff32f0554eab2a69e4c1ca3c4738ed4c0571103776e
+AdditionalInputA.5 = 764be59a216181ebe2a8c1a7d3354116745966d163db17afcc6fab3cffc91dc5
+AdditionalInputB.5 = 81af9b7e9237fe872870b8445227d92e0c5ec8b68ae5804fbffb35562e01087c
+Output.5 = b05729cf7846f25ff9229430873303fd6a5333665dfe3cb6c09229e7b6689d778cef0c5e8afda636be2869f3583c200eb47ba57c3c546b0b8c3ddfc0cc053228af14fc395225e616cc20036878fcdb28c3eb08a139bf29bb3d39688b484a976aab0449816ff24716c4e5dd5188383f1de683432df2cfa32af95617f4ef2980fd
+Entropy.6 = 508e78a7f545dc7eaa985b829d787b57fb3fdf4730919530ed3e8633c52c4712
+Nonce.6 = e77db514352e240088b56761d928ff60
+PersonalisationString.6 = 2d1dddefca2080aa853900834243e8de050ce2f1418242381fe4f0515a1f9da0
+AdditionalInputA.6 = 47e904412c505656eb3b3a093207cf042681550b3a1ed4a3c5daab996d214c26
+AdditionalInputB.6 = 5e3dfc3f176cddc39063ac839519a105cce664f2bb202857ae4d568999efc634
+Output.6 = b16a11949f510fbe62f88624c9fd89aad352623aa4a4d9d7a90f0fbd4baad71fd47c2524915d3371bbd38ec51926dd394517dc526a9e4fdfeb6f8e21e98486302d9472ff3a12ea4850aad19b926d76812f7cd45b9aa788a5cb6d7004e8aebe27a0fd249fd660bd67b5b4eb51c5c89e8d3d8234858139520259108a5f9297ba60
+Entropy.7 = 98b6aaba321a8a635e92367860d615a35036328b813d336c4f7412c73717234d
+Nonce.7 = 219825e6171553b299132f93ca2e78ac
+PersonalisationString.7 = 7f374e6eb48adaddd977ba213fbf9e1abf0343bdf344f5ca281f45242a279d63
+AdditionalInputA.7 = 4f9927afe85dde88d48ac6ddf7162e98d2b4b73ba19c769efa143fe06a972eb6
+AdditionalInputB.7 = cef13363f31de861db7d8af29a64aead7650ba514cd279e3ccd23b55eab719e2
+Output.7 = e28665a7262d78d9ea3b8b2c9920403fca82fc18c8905eae4c2fb64ccea43a3c67685b40eac09aeccabdaee78d50b912d6bcdb256b11669e298eabd61a1f588cba6ae3dfad21bd839101c142df6394a0309fdae7d9e0c5d9ef85a8063f5b8a8f1fab89c9a7297231ba7e41553bc39d972c511a2771925831f47cefb04d00e18b
+Entropy.8 = 6205db6529515e568f2bfc47870145c38e85b944ef17eca9cb9656a6df83695e
+Nonce.8 = 3924352f4be5b57cc8bf16e63874347d
+PersonalisationString.8 = e2822d33aceae8bcbfe21cd366be89e7b8d6d0863efe86e47f0d32402808ab66
+AdditionalInputA.8 = d81b01ddd6ad9e9e4056a41b9ac50d3bf4916e942b5e50f8190dba50e78208b0
+AdditionalInputB.8 = a28d3a383dc7faa76b4d240cc472100d43fde377f8236d0f85f9cac8dc62ca13
+Output.8 = f9ae1e368f2137fd467248482b7d3d04d16794afdfdc65b557c47a41da60b5b02ca4220a63b28397249651162d48b165b80953e4bba6c027f986eb836712928dc9b61c52e064182576c4170f8c01e3555b27486e5336e7d9bb62f60a12208d5c2c853cb42c1237192e7a5a6f889c3f13c910ed96c69c507546d2df35a1e92c47
+Entropy.9 = e80059eda9e1602a846c5b257c8fab7d5a874496cdc43f59a0255700233dcbf2
+Nonce.9 = e2711178e5628f5defc52d80718d7422
+PersonalisationString.9 = 6943811553e20af5dc611b09a810a9fbe1d169f4d74d00095f4765d61b737d99
+AdditionalInputA.9 = 25501eab7fb3cc9922f0b1e478a8d433e50e992896ffbe2a03887cebe226fc93
+AdditionalInputB.9 = d215cd98765c79659034a18b8a0118a8504c0f6772bcf3dbcd6ec95ec3d62c92
+Output.9 = d4d19debb670d7e0aab58deb86587f36f65bbc2e8488d005afc69342ca4fe2ae21c3c8f95915f8ce58db8532401270b6bb17816b3adb9e5eb553227de5f832b7015719bbc9236dd9155376c644f161240f4facec851488d71b6df6344c980156fa05d5e8bc15aa697ab104d03ca4e6f5fc8cfb9730bc0dc19ca122d47c7e0ce2
+Entropy.10 = fd3cbb5bf8cb2cb3517078a68663eb410b4c1e6534c6917cc1d410619b1b9c39
+Nonce.10 = 37442270189e8f592cd244703e618997
+PersonalisationString.10 = 93fb77ea1e487a1ea93477c86de6a665dca99621836a72290e926b5404471785
+AdditionalInputA.10 = ac77bea26e86fb7797291e075543c689fe0274e943ac19522bd351411b8847b5
+AdditionalInputB.10 = afcb73389281d91c832a7b31633edf9b92159660dc64fd0ae21d87144be52cd9
+Output.10 = dd560d65ac3d76a1e674e2361a3fea702c4e60b0a41e12a76f4eed4de63d90af7d2678f77eeb1c27959d1c3f05d4eae36b6f27c8ce72282606c7502a78f72e92dd6704c77c8c9b5bdee065801783de3f42e1a4fc1e8ea16784254738f8ac7681a98254cbff176cf9012b72d00a14304804321e556b704c9f8bbd8ba4bb939cb7
+Entropy.11 = 52d3ba44099cb6ef2d1f5382e1ded6c2b38f23efe1814dec957e50d318e1818d
+Nonce.11 = 49c643b9bcab90615e55d92ae404287d
+PersonalisationString.11 = c9e9843b562182b1633d99b75d9f073314c1316b83b07e1c62495d07724f72bc
+AdditionalInputA.11 = 39b7d50832d82c62e7f0b89ebd2be9a89eb7e6b08f254144b9a372bb2011ad12
+AdditionalInputB.11 = 2302018d8e0b4e943c702a00b55de9758297ca1829fb5372cb02ee19ead7e3f5
+Output.11 = 8db291de676981e57260e83eac296046396ebe718cbd9ef83cf0bff852fa074cbdd188f82a438b1b291587e011e35763a478752fa85c749b8361bec6e597a6a516bf24cf1cd39d085b677ada70a25cda686605956276bb505b9875babc43e2b4234abfe474c292cff1fac39a2c1cabefc5e88c9c2b3484988a8aacfce12a6584
+Entropy.12 = 45243c1599a5023b37267897df1619609b6548acdea2e92dcd253693a780540a
+Nonce.12 = 2c94230db5bcb992318ece108e79d2ba
+PersonalisationString.12 = 0b406bb75659d6ba936c7aac8bfdd46ca3b948c9dbc9d262d21759c1bc2d875e
+AdditionalInputA.12 = 7134cebb34fcf6d9721319295813cf49a792590e241185f1c69dcc1f69561d5c
+AdditionalInputB.12 = 2949161eb6e5f096efe506b07e2f4d2714696cdd1d1789f1ed73bc77389f4c35
+Output.12 = dace9aa854974bb55ea025080b017677d964b83593ec904e3c99dc0a9778c7db408d79775f0d027ea461a1eb7be785f2eb5717e829066a0f5ab3f7e60daed7e7a8a5e1689b229442b4e311c95eb16ea1351e14de2d1881f29bf86d0fc2fd9f9fa96901c98941a3742962074dba8896a0f162b32b9d24be502085c4aa21c1c78c
+Entropy.13 = c4330e4b48485166dd91071a97b8c752c235ea17be0d5e33ad46c361792d7e18
+Nonce.13 = 75a187fa344d9ca79a438dc120938cb7
+PersonalisationString.13 = a5823f2ea0dd84d959ea4c49646939b3799be6a19f0bb14eefcd14afa324cff0
+AdditionalInputA.13 = 5daf6e279fb7f0b04deae9326690ec124a8b663632e81c6f908078e4891e828f
+AdditionalInputB.13 = ea656d8d833090fd324dbfeffa771bf542f5180ccc38cf4dd26c450c9e7806c0
+Output.13 = 5e32b80f1970119daa27ee416e055e6c6e2fa712fd35f0b29c3cc1f4b0391d36247c215961532a098709e52018f6cd4165886a4e8e1a0584f9645925b50ce147f6814246b60c66d509d66c7410a3cfe8018d161953cf4a46146c0fef92c8359c90d8206ad2631b15fab3b6c812456b7cab017163b037b4eaff55fbc769d77703
+Entropy.14 = 1bebff7d1450b3bba8eb89ee198f5383a5e9d9fc7b35c082137f44b1523fdade
+Nonce.14 = 96a4101857a3904dd6ebd101e73c9d5f
+PersonalisationString.14 = 3278e5a6fd03d3f7bb315116b7d1720106e77defa3a82a2c681d6d91a6eb172c
+AdditionalInputA.14 = 95f4b7871a641c5cc4f8ddb8cbd987d3b0935cb2f55c77ce34035633c85c85cc
+AdditionalInputB.14 = b494e2af5b708ac30672b8ce57e72040e8233c538001a348e2cba98a8cd12acb
+Output.14 = c731cc7b21c42730bd3cca61fc5250b507ad08b24ac471d526f2217f15dc4d1fea85b57ea9cf6b3de9f650df8226326f8da0a766c6d3d9ab7713938d29d9d33ae2ffad658210751286896527504ea23d6e4dafa10f6e626a8b1e4b386d2a27ae12cd8ceb1f5024418b70c005b35f2c898a0faef74eb56044407930dc1cf73f70
+
+Title = HMAC DRBG No Reseed Tests (from NIST test vectors)
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = e91b63309e93d1d08e30e8d556906875
+Nonce.0 = f59747c468b0d0da
+Output.0 = b7928f9503a417110788f9d0c2585f8aee6fb73b220a626b3ab9825b7a9facc79723d7e1ba9255e40e65c249b6082a7bc5e3f129d3d8f69b04ed1183419d6c4f2a13b304d2c5743f41c8b0ee73225347
+Entropy.1 = d0c57f7dc0308115b1ea30e2ea2f7702
+Nonce.1 = 89cebdda617d132c
+Output.1 = b797615a78d1afe74ebedb9d8948d82cf2bb586ed80146b96d41a709f689178b772dd342d29af5449694bf8eaf33a664a24c0ad29a12529eeaba478a799917ab4666de1b6eb2c7332017d67eea6fabd8
+Entropy.2 = 286e9d9e39e4024dea0c885fd6f7f107
+Nonce.2 = 586b6a1a8ac3ac0e
+Output.2 = ca25aa9ef286a3cd52d101db01cdf0ce14c7add124f1b6a9a8b3a48c74989baf01f6ff704da7c5d5785b6e9c21914892102313e7a15cb2f9977a513ada0d3f242819aef2c1699b72cbd358c59435101f
+Entropy.3 = 6b20dda65a96f564fc0253d38dbc290b
+Nonce.3 = 813e538d040d8dd9
+Output.3 = 66b6ef57a3282838dea05d122ccdfa842dda19333ded2015d381394da38c8309a6e9703ec065335b116efb97daaac9c53ceb7a218ed0db61c3ba969dc629b95f5418eadfa43c58714fb02176bc0b17ec
+Entropy.4 = 32339fc82b655051042e3038e3161c4f
+Nonce.4 = b252e495ff396be2
+Output.4 = e95e4551a37e338faae4419e3a70e4c1e3d516be7e554cabb00007c591ba7cb6c3247889a9b08e46c6619f166d996e4e34bbf6cd8a354de9964de906041f73f2ade2eb82c6e82627d3257738c2821fcb
+Entropy.5 = deaa9d0c2ca7a05cba12eeb7db24277e
+Nonce.5 = 1605e1d030d76ddc
+Output.5 = bab5be6001da5951c1e7873f4e2be318e879370eae8a51ed8424ed6f12b2d294b45d006b1c2cd8c1ce047fd16f2fbbc09954a8b464cc986f23e86e1d9398d20780190aa5be0505cdfc826c7a01dcab99
+Entropy.6 = 589766be3c03b0a351a81b1203f944e2
+Nonce.6 = 928e95f8a3bc7452
+Output.6 = 5bee2482667220462ac6d3c234f7333703c5abced2ff2ad91d52193e86a61cfa43be0b4f7e831e1e563e260178f23976b2f3e132356ab54567b37580bf9d751223fad7793f0ac11fc450817536116b1f
+Entropy.7 = 07cc4d22b010335045cca142d91494bf
+Nonce.7 = 4d5e842af4155d17
+Output.7 = 8e13a574d17dc8b44382d3b263e857f50816755917603a07ca4987fd40340042a1e6a82a227647130304d73d8704fd9ad4db3ae42daaa55b1f93948e70c451a12724fed870e02a1a8ec4eeab716c6854
+Entropy.8 = 6425624a98ab3018eb4ef827f5a4fbba
+Nonce.8 = c1022d70155ef375
+Output.8 = 16fd6abb10dba1659ed56d4296b65fe3f2449996bdb8eee5c94b249f04808cdd9563569a4152bd99a32592d35d6a4cc806c228284487fc1e088b178d4c8ecb6b0e3cfaacd7d39d754d8bd4e6662f44a4
+Entropy.9 = 01d11d2b631be240de2f41d10bdce47c
+Nonce.9 = 89fa32427410cc61
+Output.9 = 4640a063e65ef0c0de97f98a39297219e2a1eceed7e6426199719911edbb3d06fbde6fbab83878e9ba9fa8e1d044f7a40f3627d7cfc49d17f101ee64f6b8c6e6154a01b4d39fb9ba6b33ca2c27f9fd52
+Entropy.10 = 5e0a89b3aba1cf5ed94756083726de8d
+Nonce.10 = b5d79162f73a5031
+Output.10 = cae7b2c25dce1c12e2c4f61b3e53155b9177e92bfb8faefc425d1cbb507713921378ed880986709bfbd7cda66d18dbe0732137a86d47b7e8223e345af0cd9a0219ba290040bc6ff44c1de5b16f32b933
+Entropy.11 = 3b76d32d5982daf6e2164340941a1707
+Nonce.11 = 441bbb99a2668ba4
+Output.11 = 63640e406e16b3b82723a6cb3830657b756fe61cf2ada96f667e0f2df0c9d33c6f164ee78d4976281a84d3024ff67074acecd65391a84aafaec9d6b088bc33616543b61a4c603e5a21bd39e2a72401c8
+Entropy.12 = 45fcafba2278bf8e6d437396f60f0e84
+Nonce.12 = 654de44e0bd6cb8a
+Output.12 = 7e2325cb2ced372b640c2496a3970cb7771fd494e40ae17239bfffd9ea2ab0ee74c2d3c369328a3b465e67bcbea86f50a32f9ff820505df5adbc032d3adb83581443877f85c60b3b701f59b1fc38c063
+Entropy.13 = 4201db977ef90d08f017c8e38204c299
+Nonce.13 = 5bbb47efe9fa4cad
+Output.13 = 101c7318e26693bc11d64b780e9b32d4d958c7475ab99fdd6fe86554dcef54ccdc2ca9f4ec355eb25d7b3f570ff95ec7abc2e9e2fb879bb045debf6c8a98ff46668c0de21bd8d4d18fb9e11550878e32
+Entropy.14 = 5d80883ce24feb3911fdeb8e730f9588
+Nonce.14 = 6a63c01478ecd62b
+Output.14 = 9e351b853091add2047e9ea2da07d41fa4ace03db3d4a43217e802352f1c97382ed7afee5cb2cf5848a93ce0a25a28cdc8e96ccdf14875cb9f845790800d542bac81d0be53376385baa5e7cbe2c3b469
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 32c1ca125223de8de569697f92a37c67
+Nonce.0 = 72d4cc4f0544d409
+AdditionalInputA.0 = 9e98cc8e0f8eb84d1911c1775a5703bb
+AdditionalInputB.0 = 593aa3a300e5c907a011dd5a3dcd77e2
+Output.0 = 942909a9d380aa5d4e3af69093a8fa513ee545b9bf9e1b81c5f30966db3e5cb52f8b1b6fe440d592e5fe4a972c36aa498035e2442f82910c5cd095c7f4b4c7e7555c4669cca481cdfbfda167b5d6f8d5
+Entropy.1 = 172a2d24ef128dadc93e0b74f277e7c3
+Nonce.1 = 692f86e6ca5e1117
+AdditionalInputA.1 = 93b4a1fdbf9dd30996298804dd86c0f7
+AdditionalInputB.1 = 69d792dc9b6fe1601f31a68e4d007187
+Output.1 = 13f30b4698d6e973556c3f92dff6241bbfbde300ed58d07fd5f64efdcd0c1b62ca3de6358d505dcf972fdce20f7b891c4cab493721d80cb108fcee915835b02dea33041b38e28252c30a71fad85878e6
+Entropy.2 = 4a17b8069ae3a74d77c9c94514ba90cd
+Nonce.2 = 2abfac0002d2c5da
+AdditionalInputA.2 = cc39d1a2a425f00e220d721fbfd5b6e5
+AdditionalInputB.2 = 1ccee25f5868e863a05b72d744e64aeb
+Output.2 = d787b355629779ff2916397d6094f44dec06337571ccb0abf5a17b6cfabe00557894e9ddab8caafef467faa4514582b5073e7d1d9fdd6fa34c565d1aca23742ed4e87133253a9664ec085bc6c76965f4
+Entropy.3 = d60c4860d9ba3ebb64e2095231e07792
+Nonce.3 = ba6b5e9e22e14043
+AdditionalInputA.3 = 776273bb22f5e62a793692127bcbd785
+AdditionalInputB.3 = 8795e45f82160cb1096a509fd3572f92
+Output.3 = 3122c1d3a6de8b25fd180b159731f975f78601360155e43f694b289822a25948d2c20a673f181be06b59c566960339f25015d2acbf5c7d3f68a2bade779e00faa24623c1313da888dc8cee901fa05573
+Entropy.4 = 494983c04581b811e0b2b846c54bd318
+Nonce.4 = 24bd70fd182558f1
+AdditionalInputA.4 = 935200a7edf1e2903581fedb7c04533d
+AdditionalInputB.4 = 49c0133cca2457fa7cbbd4c68cc5e78f
+Output.4 = 0fd2ec47fa2e31326ee9b894fdd6224818190168640d91a2a0c247b1e27ccfa343e9370d182d95b2b5bd74b4b09c44d04094364a6fd02ba70ee2c55e04d65ad9c6da65b9c0742f9fb5ca95daafa48df1
+Entropy.5 = 77ea86ce59f2466e55ce2057e7855035
+Nonce.5 = c09295c02f1c51cb
+AdditionalInputA.5 = f36d65f22b5afd3f51e13ea38dcff555
+AdditionalInputB.5 = 6b613b56e470b5c2c30c30aab9a772e1
+Output.5 = 41cd8ef82609012d33b4e5b51a39ec17eda4317962627796f7845045920becd7caef56d4a2c3a8e849e299babe92367ef34a8910bebd498248ccc2b3f5f63920b31cfe856973e15e48b060871a9cf9a7
+Entropy.6 = 2dffb03703023f65b757b7ee87899a14
+Nonce.6 = a9c8ce788fb2bddc
+AdditionalInputA.6 = da42b213071252adb755a6cb24094c17
+AdditionalInputB.6 = c83fc2beb60a7ee9b374f3fb7bfc8900
+Output.6 = 8f54271e3578e60e8989e49f5b426e1a0296afbfcc7da0ffbdd5dea71ec6b339b6d866bd3756ba745e42c8cddf997cac5fed72b33ac81e5f4d6f2d15f030a41c684552fc94d48c0d97323ef7eb656857
+Entropy.7 = 890e7323502313bc7d617805360d5968
+Nonce.7 = b6c68c0280cef5ed
+AdditionalInputA.7 = 257f1f60cf2d36924c3e7b6e4cc35135
+AdditionalInputB.7 = 89235cc472c6e2e1e92c70324459a9d3
+Output.7 = 55283453e82662c8d92f54cb4a5d784e83b1b3527bc5e71a53f04508172eb5156ba2a9ba92116cdaceed17118c7637af4b574d364187a52cf0c20d768da518021c3d95cb5ce6bc108b1bef19bad66677
+Entropy.8 = 167ce6bad165eb640eebfece7ca6690e
+Nonce.8 = c5c6b5f8c7fa9304
+AdditionalInputA.8 = c0e7ef13138ec4a7d52baf8592484ca0
+AdditionalInputB.8 = 472a47e3fc098c7cb92fb953a26e25c6
+Output.8 = e2aa2650c84be79ec410ff9bac93e5caff8a46a8c39495856ff64c8c5399e81654ba90c8a8b26cdca2810ce68e4ab646e50a1f6fa7a829cfd72c9a61e1a0b415c031067dcd417baac9553cf7d84a7742
+Entropy.9 = 6b8aeaf70460e83a124899d705dc0900
+Nonce.9 = acd811698669fcee
+AdditionalInputA.9 = 94a53808df5ebaa7693934d7fda92b95
+AdditionalInputB.9 = 4d4e7d88f44fe556c5ccdc56f8b2f098
+Output.9 = 165aae6bcdd799fe325ddafce3b645900eabc87552c0bb47ee2eb6ad51462a8a4f4498c4bd24fcfc46de5d12351143d5a838060f617258c218035a4f29fb34a54673205b2e1b362991693d7b99972954
+Entropy.10 = 00f30f92bd44a9b2b04a6cae67533ed8
+Nonce.10 = 5b4ae1335b98109a
+AdditionalInputA.10 = 77ec4274fe5f8f22dbb4a1ed6050811e
+AdditionalInputB.10 = ef041b6516825d51bf76d2f651a55576
+Output.10 = 8c664357b01425668ea5daf07a2b5b8c50dbbd71d9f48c50f275a02b6cfc4717eb7db286fa49f17d05d44230f7d82c251a6f0fe0a2add5d2cc9a92a527f63a9bd3c8ec93e9a404e0829629c5eeb997b0
+Entropy.11 = 2eafeebb58a2fb54474280112c5668d6
+Nonce.11 = 1be2aa4df98598af
+AdditionalInputA.11 = 389a36ecd687080a5d2cace8a326f03a
+AdditionalInputB.11 = 495965bdbbb1bb01ba61191e9dd4b038
+Output.11 = f17db045b0af4913d79f99e018c1f726f4fe02f08477cccc0d6a068a808bfc6ccb797e6022dc3b99ea18086a56428884110c49128a51e10c15f6ecbfe0a5a1e97e72a578fefea6c66c436c91a2b6395b
+Entropy.12 = b6497197b783d1f493a6430748b45932
+Nonce.12 = 895ea2a9d8204f5d
+AdditionalInputA.12 = ac26665e796d1b00951c725da88d992f
+AdditionalInputB.12 = 5f08c7951106dfec5096d90097449cc2
+Output.12 = 170b58ac3342a968c96aa29f1ce820debe7934d9db46216c03ae3afd304188cd38b6208e1cad5fce5c26179a30a8771015a99d2902d51899ab0c42e0b400d18f1e89411248db96f9d62b466f828de150
+Entropy.13 = 4ffafd1f20dd38699bfca029c0558483
+Nonce.13 = fbeed3cb29aa0eb8
+AdditionalInputA.13 = 96abfcee883d8dcad967c071c12dde19
+AdditionalInputB.13 = 9fd7cc292cd55d8364862f5fd675c08b
+Output.13 = 5e8612c6ce8f5b6838a1e4fb9e14370fb2d66bc885f6fe8a3ff232f16340c2af58eb2734494e0ce920f36046b7a807f4b55caf3a45bdcaefa4bb23f352601c0769749f0257428918b931606c7b395135
+Entropy.14 = 89a6f070afad5ccf4d117c4e44baa2c7
+Nonce.14 = b28941fa7e828c04
+AdditionalInputA.14 = 7206a271499fb2ef9087fb8843b1ed64
+AdditionalInputB.14 = f14b17febd813294b3c4b22b7bae71b0
+Output.14 = 49c35814f44b54bf13f0db52bd8a7651d060ddae0b6dde8edbeb003dbc30a7ffea1ea5b08ebe1d50b52410b972bec51fd174190671eecae201568b73deb0454194ef5c7b57b13320a0ac4dd60c04ae3b
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 49058e6773ed2b7ab309c0949fdf9c9e
+Nonce.0 = a457cb8ec0e7fd01
+PersonalisationString.0 = dc477641d89c7fc4a30f1430197dd159
+Output.0 = 4e891f4e281100453b70788929ec743a3c5edd9b81dc798bc93771368c39b612037b6f42f60c5d8924b646848151b0c295be491d4a28d1927deed523fd04d3d2dda95ed42166312e5c3392d22893b0dc
+Entropy.1 = 4ccc7d83009a28db14e839176774d45d
+Nonce.1 = 9345358f336a1622
+PersonalisationString.1 = e6db32976d9262b1d3dc487f22e1f5b3
+Output.1 = 5a171e9f0065ece37ba53df81ac3d88054d53d0cb695a901e1a1ca91352420b508c461ac91095ccea81621b800ddcff905020f96dad2a50377d3945047420c3b902e8e361f4525c1d4bfa8af164925d2
+Entropy.2 = fc7d0c3ef1c404ada968dae35581b6cd
+Nonce.2 = 31e0a46c39ce49dc
+PersonalisationString.2 = 14158a65fc9b3bc1ac04c7854493852d
+Output.2 = 918494f47dadda22667dc1d066f44f3ccbb61d3f84b2eeab7d26f4e999aab94e79d282287ab76d4e3eeeef2ef79c2ad571382abdea55d5d8642f604f8f27f3f73a5bc1413dc87bfdf91da1c6045ec223
+Entropy.3 = 1f0df7933dc99eaf7b284b02ee773ec4
+Nonce.3 = 6461fd762c595408
+PersonalisationString.3 = abd1d8af4ae46d7e5f1f4e0b71b54edc
+Output.3 = f1eba7596c6c20118f86017ff86514d745ce7ea02c49719094e5c2a96d3dfa1dd5079b8eff8078ba9793900dba145a260e672837422c351c3f231c201dfaa21e48d3f7ee28bcd08dac680e80bf87ec20
+Entropy.4 = 09988a36abad74c3cf377db9c9200baf
+Nonce.4 = 6c27be4e21932166
+PersonalisationString.4 = 17b7a40f4c37894bc948456e37ad482a
+Output.4 = 091e5fb9c6c218f2460c514fa215061460ca90cfb35c1a9f5ea125fc49aa0b2beb42dcb0fed865f8510c3141cd51d1b33216e2e72cebcabd3e1bc0eab201d8e72a0d1de1c2b7915a0cf242708092f211
+Entropy.5 = ce1934b6561ebaaa851accf8ceae5b0d
+Nonce.5 = c587922ff68836aa
+PersonalisationString.5 = 602e9086f44d03ce61039c2e81fed620
+Output.5 = 441da7552b2d45533fc924ea985fd4b0b95942fc7997a37128d3e96d4c2792b241dbe921d61f3898852d4f93740cc3649cb5279a7f0f09be3990e9ee599fb0717c308e7a939a441b5c3ba0cb8aa19647
+Entropy.6 = 58f1a9eb935fd08a4c3c894a06ad00ca
+Nonce.6 = 0576589700a4d50c
+PersonalisationString.6 = b14f2a74cbe3881069f30507919c6870
+Output.6 = ae9c6b40d951aab9c2d9cb920a05f3e154898c83e392dfbd7ffcbe2283eb2b75842fa5e7bd9626ad12e814874f1966fea1eb817793d2eb0a9cb9270cc9aa4267118fba0c7b6fcf487a97ebcbadc67496
+Entropy.7 = 0abf2f845295bb1dd283daa24e75fa08
+Nonce.7 = c9e9202793c479b3
+PersonalisationString.7 = f8742f44932bae2d65a032ada2b76382
+Output.7 = 8847696e8edd2c7b751b780a6fc69d8434a3144593936943217465362b3c3f7b25b75149f7c69d10ecd169f00ed98b53e0e498af6d9f600441ee2c01a9e74ed845d24cdab4543dff7d1f7800a278671d
+Entropy.8 = 0f9bc6935e7baf17d560931ec3e75d9f
+Nonce.8 = da7b19214e0ffb9c
+PersonalisationString.8 = c13bb26e9349a56866f821c10a2ae28c
+Output.8 = 12a849651f310fbae04c4da4680a21a50a9889806194be470b8b111a32ea741794cbe725d98ae9d40c0d60c04c8b7b32917f9dc18c27dfb8c64579a176a2c4b23cc32e5237fa5f904ab1249aafa7cd88
+Entropy.9 = 79d96ff5ec92af9fee0af7effdc15ce5
+Nonce.9 = 6b9cbdfbbbe5b49a
+PersonalisationString.9 = 23d1288ae41e65e56e7b783f85ae8b47
+Output.9 = 206c2564950995ac6ca6d2ad51e9cacd7540f254a335d6d7eed7ef17956949cb5d7d3f4e197e82aa4442d08d1d0f933e641f703be1be4a9ca5747e524687a7a034761493dcf2e1101789f135de5d3f49
+Entropy.10 = 94e852ffbff4f20078181221b5fbb804
+Nonce.10 = 8f3e95de313a52c1
+PersonalisationString.10 = 1841dcabae24c156a17a1d0eda6f8bb2
+Output.10 = 15319b06c05d47deeaeab540e649cc6e2989843de07dcaa966d799a36902f72943585e2773912040185ac1efa060c6edecef800e3116c66ccfeeec9fe7ee70f3dae2ac1c0210310ea164f4c4402d2f77
+Entropy.11 = 473c743205bb375fad15f537dfeb402d
+Nonce.11 = 879754b2b4987cbd
+PersonalisationString.11 = 4f88f4db50a6806d6899f71981beec49
+Output.11 = 46b0694bc8afc6d86dcb8b80cf8815104007ebedb06050ae625b890060c4dad3d9e2661042d26a3cfded0383829ddcf616ec84d3f32d307480caf0f87ba9b00e88812f5cb2a4e94e354092d0c50b9bc7
+Entropy.12 = 20208c9ac4830512786fce7ebde344a8
+Nonce.12 = 2cee0d7d7a5607d6
+PersonalisationString.12 = 2602c5f52c7ee2620486ce56366cc8eb
+Output.12 = b0bd2c0739ed1608848dd0e9c1db9f547c64268754af09716da40b2682fbc45f56de954cbce0d8a3f53eb2c3afac9e3afeab4038fe042c897786fd3da70f2d6b62b12981630bf30d76dd879e2926ab40
+Entropy.13 = 3011c31a44ccfd1260ae9e431da41e88
+Nonce.13 = 3b1a6ac9060f2fa4
+PersonalisationString.13 = 6b36a1fcb2a2173fc7e0c120c2627a6f
+Output.13 = a781d9970c7272e98d941438d311cf7e80d2d56b29eb0b4b1c76d00908401ec5b4bb1c5f159dbf42ab30100933b1628faa92d2e25bd37ead4c3354c823013cd9e331bdf5e2c5c7d11d5bd9f50fd110fc
+Entropy.14 = ee6d57635e5ab4b3d73a2652c1443b32
+Nonce.14 = 296bfe331b6578e6
+PersonalisationString.14 = 4fccbf2d3c73a8e1e92273a33e648eaa
+Output.14 = 90dc6e1532022a9fe2161604fc79536b4afd9af06ab8adbb77f7490b355d0db3368d102d723a0d0f70d10475f9e99771fb774f7ad0ba7b5fe22a50bfda89e0215a014dc1f1605939590aa783360eb52e
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = c27f80b1d085dd15cb163f0336d07745
+Nonce.0 = 7ecb3f32a90242f7
+PersonalisationString.0 = 4deb622a31b4c530348b5f08008fb7ee
+AdditionalInputA.0 = 5a84f94804e2d04ead773d2a324b34d6
+AdditionalInputB.0 = 226d9f4d720f580c2be44d4eaf2ec8db
+Output.0 = 6db76a0a003a64dec6801dd3271fae8a43aa8ce2e0d205e3830e267072abe28d2a6f707494d15638559fa4282843760daa90eec5d2865ea11e836e60345160d5112445ab1754b578b55471a1d9caf275
+Entropy.1 = 517dadbd6e20fd83aeaced197732b1d5
+Nonce.1 = ce221a60f8210685
+PersonalisationString.1 = bd9911bc192da45c00c47d5ee079473d
+AdditionalInputA.1 = 33254154ffeb4983d27ac08980ec4943
+AdditionalInputB.1 = 349db52f09422883536d11ac4aaaf7ba
+Output.1 = dd7be811d3a9fdd194e8f8f18b35e1d9f1788844c371d811cb898ebc561d000cc285afc8f486dabe37d6c85e614d3d196c544ca560ac6e0337b0700e1ded8fb28903e66329afdd589308d56c50d73803
+Entropy.2 = c763149ba95e7d054da52e4d3d062872
+Nonce.2 = 53bc2f43ae7c9da0
+PersonalisationString.2 = 305d6aa3c6148a0eb2e91b9385de5903
+AdditionalInputA.2 = a36918edaf5add6f0f81d3f991ee30a1
+AdditionalInputB.2 = 5c65b09e744317db86d78aaefa66af44
+Output.2 = 5560d27fc55b885a29a449a1f8835966549c4956ebb0393ba9fe748e74a5a303f1478bb3e507a9daa1159dd8dd6d171bff2e3830581d7f6fdbccd91a8748d20c1d981cf909c31db6eedf5587722ac257
+Entropy.3 = b479a14d125fe4601053989439f85200
+Nonce.3 = e198df756aff7543
+PersonalisationString.3 = 8f590670f88d8c2c713d63643f93ba55
+AdditionalInputA.3 = cda7c7ee77e667b96ef0ba330c9ca6ac
+AdditionalInputB.3 = a60fd147f6cdfb408d160e388c20d8d8
+Output.3 = 5f088bcebd816551c4b22c3024aeab2f75c906dc8fd0ab0c80055e0445c1dc151a06df81bd39b8535261a7a5dcedc7f9b17c062ee6f120f2099f2ab5aa93f27a08d7b5cf1027e26adf54a520916c2cb4
+Entropy.4 = bd46fc253e9334d4aa8bdff5e21c12e2
+Nonce.4 = 61515159b01a4516
+PersonalisationString.4 = 1735486e5ea8be74fa158b2fea8e5cad
+AdditionalInputA.4 = c3517d58cdbd0262655174cc1d1eb324
+AdditionalInputB.4 = 404f7b8eb461d077368e2ff06ddb4189
+Output.4 = 7f1cf172b67ec7c566c9e24c071b79b5a4a135a369ded5e78b8cd2467749e30c401bf176d88cc0e05a587bb2b8ed09206bb314df59009e88a01ef007e61eba2e40093aa003dada48314869c0f3b99d50
+Entropy.5 = 600a31b8f55c85ce27ece4705e6fe8cd
+Nonce.5 = 17a01e7827ec2383
+PersonalisationString.5 = 6deef06a079ad2062e77dba21fef6441
+AdditionalInputA.5 = ca5512ab329ee941b22f327fe0dad499
+AdditionalInputB.5 = c1ffc97289d8d363729daa1628a2c735
+Output.5 = a81cf5563940ffbbee9dbdcaf7db1e7e53b427fd3a0e795c35a1b8eb6f6316e43b804690a44897e0f42fbdfa8c9f1777024d2a530eda994ed038de60b90602545cef99b69f371f79619babda9360c665
+Entropy.6 = f38b0cd16e9434da916b63e8b7ce1a91
+Nonce.6 = 883ec208c3baf76d
+PersonalisationString.6 = 534799e3fe51bc370af6568072e2e579
+AdditionalInputA.6 = 9520ad24a61d29716342d2b7bd35dd45
+AdditionalInputB.6 = c4e92d6da37a9f6236a396f352c53c86
+Output.6 = 5dc0b3bebde5bac6d4d24ec08f1510dc88e1e06c97c3031dc9519f3392e83a09e1a7db99b2148d992a928bb5c1f68265086f7a84e697a7a0aeda4b41590606ed139063def46fa2a625657b17f18845cb
+Entropy.7 = 06a5e76d0ee90ed0206a07a914dc2079
+Nonce.7 = 6a8a2fb2c0ebbf14
+PersonalisationString.7 = 2a49312af91926a37b5f7c009e8047ef
+AdditionalInputA.7 = 0cda72090ebb007ab27156957e64e7bf
+AdditionalInputB.7 = 24695b221f42a5be6d4399c6444c4aa3
+Output.7 = 2b0aeca45ed44ca34a2fc741c5e4e2091e115a4148e71bd8fa90588e32253ffcf360df213b48a19f6f45186b67dcef6327729ac8f3c08d658de89e71539783fb66ae834455407e7827114317299835bb
+Entropy.8 = 6c12df5d2ba1f6a6e1e733baae42daaf
+Nonce.8 = eb47cc188d1b0be0
+PersonalisationString.8 = f510139561b292a7a1a0292b7de4b162
+AdditionalInputA.8 = f57a0c1dc69eae7473394ad1b950dc61
+AdditionalInputB.8 = 9dded4779fab0c8843fa693146837689
+Output.8 = 2be15d2ea87099a8c0430ba8e9451208a898379da075169568196f656eadbab59637c1f949b4506a851ae0394e135542137bd0daf1c188decfce92f6ef2396aa5bb125cf3187230ac81c3864632d9234
+Entropy.9 = 0e6a7843e29e5f16d2bbb4021d6389ae
+Nonce.9 = 692298b9f62ad22d
+PersonalisationString.9 = f0434f112699d116cfa7eddad486c544
+AdditionalInputA.9 = 146eb042377cdf6a0831558ac17ad971
+AdditionalInputB.9 = b29c26d483fde8489263accafc10d698
+Output.9 = ecf0812aebee7a452339071d9906709fe00fccbb0d94cc101b507646f554ebf3602459a4f20b82325b0e083ca189f59d68c5753dbe942643f07c7afcde99f9d0cc2883923cb80456fcedc535bfa7d647
+Entropy.10 = b6bc57d663b671868265fdb756e142fe
+Nonce.10 = 6da9c07dd0821c6e
+PersonalisationString.10 = f43c5223bfe726a3164afdcabe931eb7
+AdditionalInputA.10 = ddf419d8e074a4ff2daf06a1adad4bed
+AdditionalInputB.10 = e0862e71c4ac52194cd320d196e446a2
+Output.10 = 4f9b9e9aab493571160c732881dc358f73a08450a152124775e559889a9298d034ce1882dd2116f4863f1524393e1a3f1aceadcd9c4163dab7c543cd375c3f4b61ed72475d1812017ac83bf22846d14c
+Entropy.11 = f5649fc184f33c63cf8484011fa27578
+Nonce.11 = c1651fcd1a0780c6
+PersonalisationString.11 = 153f7b2c9bc9494a20ed0bf16b97ffdc
+AdditionalInputA.11 = 6106fd4fe0e1d894837ba8624cebbe2f
+AdditionalInputB.11 = fdc2988e6b358929645d27594fa98df8
+Output.11 = 49130a750b4758e7e8dec8d82bf66ae771d51181c33cbba9d84093ee4f83f6e3aadd3f40fbcc441fcf90ed83b83c9d9671b9092907a36231ec3e2c56775c5699fce16abad104b291dd13f67ad4e1ff4d
+Entropy.12 = fc3dfb2f29b649391437aff692076067
+Nonce.12 = 1e470ebf09e8fd68
+PersonalisationString.12 = 4e7d48fe49ecefebed749979b965d8f6
+AdditionalInputA.12 = ae7405de4957947dc09fb1be2227c763
+AdditionalInputB.12 = 3fa22158d9bb1948c64102f3ac00bfed
+Output.12 = ffb49be8c714b502595da9248248fb009eace24ff77d298dfe8b05efe6441352213bd236bdf4b3de34fee35b051747f4e549f69bbad8c729f3b5cf2db29a0ab6aeb590857e0f48babff3a9ea3e4079b6
+Entropy.13 = 32018afb07a6141e9a6badda9b647f65
+Nonce.13 = 0090ba3475d0149b
+PersonalisationString.13 = fa92f66bb7a06a1652d4084c15d2f778
+AdditionalInputA.13 = 13c32c456c799cf0808e00c6de7efce0
+AdditionalInputB.13 = 693728213798dde84176dabfb50434d5
+Output.13 = 12c9d6683e6ebb5136253db60b39b3203f52607e44d13ae80709cdf2fa61ff5befb0838f544e39e135830b573ac5a31b7535c0a2502370400906658e6b1e9a0f5755f360d9bff68fa55ad628b49a8937
+Entropy.14 = 3e325daab3301856044f416f250b6161
+Nonce.14 = e447e63d85ca084f
+PersonalisationString.14 = a9d2a53dbd7ef4b9150dd0ed4d002e56
+AdditionalInputA.14 = 4de6c923346d7adc16bbe89b9a184a79
+AdditionalInputB.14 = 9e9e3412635aec6fcfb9d00da0c49fb3
+Output.14 = 48ac8646b334e7434e5f73d60a8f6741e472baabe525257b78151c20872f331c169abe25faf800991f3d0a45c65e71261be0c8e14a1a8a6df9c6a80834a4f2237e23abd750f845ccbb4a46250ab1bb63
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 60fa9faa3d94146dde1d8a38a5173642
+Nonce.0 = c5bc78e089d37797
+Output.0 = 4952f3fac75b96410c1b44d902f7ef49596493754547f32168e4f1115d86b9e0fa4fe328bef656434e72f6c1e19cd8b6b4663423a903ad437fbe8e5636b295d7aea7b3066598e47ac0462a46b20d04ed
+Entropy.1 = 30be5f89a4ef4775248cb897c260f289
+Nonce.1 = e44518d129b80fa4
+Output.1 = 96b145ab45556c4d682470afa33ca50363f8c2d380e827d871e9a6ef9e9d94e86e49bf6318c9a97d73a205be12dc337b3000f468659ef50120a3a4115a0c117cdfb5701df5be06287a36049fa9d54683
+Entropy.2 = b6f8c09d68dd03b86f5ddf8893edd20d
+Nonce.2 = 930d5310b6612df5
+Output.2 = 3675f24bd39baae5dc858bf5084bb768e57be852ab511138383c0a02aca88f8e4fc64a479d913b8c7267e54e3303bb054407b4f25f76ae2b72632af5d21c996b286eeb03ee814b1ba4125e62e5f3f5e0
+Entropy.3 = 24edba742c3766e8a0578e950235b843
+Nonce.3 = 6ae1244c39d80ec6
+Output.3 = 347a45833fe7f4c1efd252c0fc14e3ed1157155d8c740dd2e14037e5aaa6b1689d47eba89ffe6e0bb3f9941f62ac50fda20189fe381230351ac4f59b0828ea09ab3f5d215cec85296dea99d9502b9502
+Entropy.4 = 70564c873184a8dd7c7206abf391b61f
+Nonce.4 = e986a1034e3c8d1f
+Output.4 = ec4b9a050c7da7ce0718e2ab4c9841b40355f281c1a76d6c0678af8250a8164ff211573673e721a4f76100a695eb5a311d24cfed2a1ca3e773b11b5895a4176542c32b89cf32bff77481c10af961a3ac
+Entropy.5 = 64842e7c7e87c7350c9ba5854aa63119
+Nonce.5 = 3bfa1412e1022148
+Output.5 = 453745b31b89a58946f9bc07e70fd62e5df72d795239ca303881b7184c015270324d78f3609d92268554d2e0151838bc176705e2a28aa225aa4132fe6601f2a5d4a583e9212164cc4bdd388d057b2bbe
+Entropy.6 = eb4b7b585d73140e61b217f99fb875f4
+Nonce.6 = 389176e8dea28165
+Output.6 = 14c6cd926596737b2077a5f395ba2ee846499b64477945d3c6c303c8a08de66fb98035499fd6c35a180141a503f20368b4e8900a8f2f2fe14925c1861997ee2c0f4a9c8d38ee065dfe73812aea43356b
+Entropy.7 = 72a4289a8ee982fdef0bd7b54664f318
+Nonce.7 = 40ea4ac22ab6064b
+Output.7 = 94f424038d90c186284df40bf1417c07070b045fd004a629f742019be0be9a1c8b36374acff5459188f26483026d472bbb679446ed2c1b6c5c4c65ecd67e90f3152450732db2e715a74495a2755664f1
+Entropy.8 = c3965e33a23b263405b2ed5e568872fc
+Nonce.8 = 403d8aa6c3e6ebdc
+Output.8 = 0631607bd3ba6687b6d8812dd4cb11e063c8ac83728f7e81aaf11e80bf044e05ac9b4f19492e3e02d0b0c15ddb036301b61e7a06b05c690a3892964ee87ea40ba937c7c7f6c5fe56f46e72d51d51c59a
+Entropy.9 = c957695bf87d6857d745adc436023945
+Nonce.9 = 8ea5c27e4611f76e
+Output.9 = 7aad79598f035e6b6cd7fcd1e56107d30e28e43dcc310348856c85eedd4aad0b252b6c57caf0301f0e6f56d5bc46b9c138483c0b837f3921deea001b238817fde421e60044f4c1958de1e53b43f6dd21
+Entropy.10 = 09fdaec5bb25fe9e1ae8df3f41947d4c
+Nonce.10 = 627d75c0d6519876
+Output.10 = 00e5e7791478fe28275b10f72ef3b76ed75f63218794b9838a6b276e9ed41d86363774dfb067980e7b89820905bc5cc4cced95f4b0f9f4ae3ef2ad8d925939d813dc1d461ceed5adc855306288793f5e
+Entropy.11 = d2325425101b1174d6d48c37fdd28568
+Nonce.11 = beb06a1a2089717b
+Output.11 = 77ecba51d4e396041ffd209739f4fecba7c33ea8ac3637dd8d19b05d59c2ffea67bdeb8d7770f4df1f7944bb7e60bd67a88f559dca42b85de8b451f5aab8bd57af5d42560869ea1ec4e0efb87ae968b9
+Entropy.12 = 1c381cd09bd8bf1804a831af9fd4890d
+Nonce.12 = ef6b1725ce5c687a
+Output.12 = 34394bd281562940d2b00895f3614e5845b682515c203442590c7be350439c0124b3256cd2f3e6248e47e1f12483f79fe0925edb53c250605f75b640e41d6e64767ae31658efd54cef6ac67ec4234b41
+Entropy.13 = 0bfdac88b626b8195de7b78a602a19b5
+Nonce.13 = e6508fa2eadda030
+Output.13 = 83a8eaa1dd0fadf4bbe3e3a95a35d00dd7e7873c1853cee64ddec2c24ecb3b67ec1f0d179193ad11e9993807fe5057423fdd8b5bb1a076506cbba573c981cbbfad3c3e644624cc80534926577fb2b2e6
+Entropy.14 = f41d60edb7749acb68111045000ccef2
+Nonce.14 = bb5fb8962ca3002f
+Output.14 = 262821119be1ee0bceedc1bcfd04f7fa2e199b2a7522c4a3a98c4174e0ac4ddcf7323dee2fcf9fbd2fe26c4fad347f7199be105730441f042865aeef50b89c00aa661361b6a1f20849bc7c70aa294543
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 84971398a188485e5b7cc7e6edaeb2d9
+Nonce.0 = a59f89be8be20996
+AdditionalInputA.0 = 4bc60fdfc7c3a681bbea21a19032f4ce
+AdditionalInputB.0 = 5ab2a1abf2afd8f8d83821b35d082cd4
+Output.0 = 39025bb3d8f2340a86938121fcf4f1e9ade448fb8ec99374f0071c8831d7be9f5fdc53098db5beb2dcbd9c96adb2ea2eddb0433cbe4d8786e91624917ec8588d5bf33c91dabf378e9a470410ecb6a51a
+Entropy.1 = 12b32ee74192c2bc8078e5984ae7a1bd
+Nonce.1 = 08d8504a65bae895
+AdditionalInputA.1 = 2c8d38b4d3965a26930d4986d3c7b21b
+AdditionalInputB.1 = a6d2d727b4075fe3176360b40115c31b
+Output.1 = 1b200b444739f85ac0db8a2bebeb19ddded23d59acf0489281c4730fc48eac1beef189fe148600355dcd4138c71d3b89b1126249be6e851fd70995b9dead88b5d9df08aa7544964ecbd2dc12267a25c0
+Entropy.2 = 27ec9e41e4e109db196ecdaadeed9fa4
+Nonce.2 = d4aa732c88c78a4e
+AdditionalInputA.2 = dd4d1a94affc29b358c60c73a2ec4149
+AdditionalInputB.2 = 5aba178b3078646eb594b800ef5d2a69
+Output.2 = fee36418c7cc1f48dafcb76149fb36d54541f73977c5f1b3431c1f3be1ae433b72bfcebe96ae054ce2f73185a3e44e98ae968e02e235775a04e4349c03ec7a4f910c3213a0dc4be26e7065cf5787d3aa
+Entropy.3 = ac8c43cc931afaeb75f541771b6dc7f7
+Nonce.3 = 9e0dabc22624a0bd
+AdditionalInputA.3 = 1976326c21cfea84d91d13cbca0373a2
+AdditionalInputB.3 = becb97721e7d6cd382af066bff11831d
+Output.3 = 82640e81f53ee842182d62f4f38d8622ec69f9ec4feb9af26cb81f5ceb027b979402c5e5fecdafa2eb7b8bc08c8e895684f4bc319c8758701f3835d58fbe5a31cd7b4bdba9970fb0b17ea37d3e693fd8
+Entropy.4 = 70953edfd1f48092f958b28d86bb1790
+Nonce.4 = 0ead495965341fa0
+AdditionalInputA.4 = 5357e6f2a3cd2861c44462cf89b7a347
+AdditionalInputB.4 = 8d97d48dd9cf537c1ca1532b554f0021
+Output.4 = 1ffa8f5b68e29c3da306ea98faa4efdf5199005aa8584bfee4252534d509f883320ebaeeabd74511766ea485874b499ce539255129acc039f59cf1116a101bdc733ebf50c2d31108b3c6610e86cba975
+Entropy.5 = 9eaca437bd80412cdce32f446e6fb284
+Nonce.5 = e61d9d24d7054d2d
+AdditionalInputA.5 = 86283863fa1047db98aceea176631a5d
+AdditionalInputB.5 = a8d0245c143ec7f5f1f1d09a57f48335
+Output.5 = a92b842fb7441ad1b398528a732ddab7bb15754db43efd1fed23b95100e8956785f1f7d730c87067212d87b11ee17fced34c9e69081f8a8d9a706fb16de866231284fd0be6df95320e1aa69feb98418d
+Entropy.6 = a3031414cf6d26ebe5de67fb2ef7923f
+Nonce.6 = 1fc9c1220f6e31cd
+AdditionalInputA.6 = ca8cc025cea2c5331a83ecb3bce6d7c7
+AdditionalInputB.6 = d8d64e55886b34f2cd727e4a37759be1
+Output.6 = d480ffa034cdcf73e863c64dae95d2b3c49f5b449d6ce3da0758f3fcbd7aa5b4d632a74dccced921c08fd39b2df12d5b29f8d02ca3ab471de1cd5aad664892e93cc2826cf46e2d8a944d3ecd26cec814
+Entropy.7 = 729e2ff2cca01f2578e4b52c0c6fe3d3
+Nonce.7 = 4e1f920fc2c97823
+AdditionalInputA.7 = 9e59487da8c1725ebf3e6501196ffe63
+AdditionalInputB.7 = 782f02945567c9383703607a6bb484be
+Output.7 = cbf5d87829f87a12a261da9a9aef54c493fc0471fd2bc57064af3bfd0657cf0e82541b88822a993af4cf377bd4f2f7a9d0eebf0ad7b8786434f322cda6688c4dd254dd4a450ada1a6e25c0890672384f
+Entropy.8 = 37c767d4db84fe8c88508ae9c4ab6a0b
+Nonce.8 = b5c893789185da94
+AdditionalInputA.8 = d37210842bd501e2082f2fc318b716eb
+AdditionalInputB.8 = 173992ad99c21c954e9d5299b6e53e13
+Output.8 = 5e113e6668e356f07431e329922fe872511465b6442d200eb70792c8d0b75f70043f3be94bb147744cfc6a8a39df27e4892303021afa2df27bef3a63202b91c6a3854c98511c7496663fa83d32eea34b
+Entropy.9 = 17c19b32a8b2aaaaaead5b0f4c8c6304
+Nonce.9 = 1d4d16b8f8821a80
+AdditionalInputA.9 = 2a5c3e50b8ab093eec5a01561434a14e
+AdditionalInputB.9 = aea9183348a707ae27f91f48a1df9cb1
+Output.9 = fcfd5181eb4d1abd5b7ef55be72fabd82ebf3c8b6f2543d8f2a843c46b9981c502add61eb90c14a905e0cc4ae4e39e9a9f354647f440ac73751d47273f67083f7c1308596fbe0865fed3819a0452024f
+Entropy.10 = f85f8411b1bce47aa600d1eb6cae91e7
+Nonce.10 = 243d5d8b79feb8b1
+AdditionalInputA.10 = d3ec04f5ebcb3c19599dd38014e38b88
+AdditionalInputB.10 = 67f2c2f1103632c70c41d89024ddc2cb
+Output.10 = 666746eb52de69630249d484fc1cf7dfff944ba9ce4c53b637e0bbe5abda3ede79e7e9d638e0464b4e7c5f937ee26bb968aaa8f99eec60fea9dbe088e510beb1b4f2debb388e81e8e0ac4dc085ec3e4a
+Entropy.11 = b1d64019e69e9b3d31be5fe1cc2feaac
+Nonce.11 = d091d095f6383cce
+AdditionalInputA.11 = 56c1c22ff63b2306a5d3ae30efdb020d
+AdditionalInputB.11 = 09bbe719b03a8cb1183d5a5dae9fba7e
+Output.11 = d06dbd3ef365531af05b59cc63a182d41b5211d7f831635961456a8c6c6bda76651fd3aaa7c52d0167981d88e680fd08814072fec146f9d67ad415d085074dad1ab51b3254c48b08fb5f44b3641ddbc0
+Entropy.12 = 79d85a22febb793162910b9b9df5d2b1
+Nonce.12 = 2ed972839ac5eb88
+AdditionalInputA.12 = f0eedb8bb43657e4690f4f1a80d19300
+AdditionalInputB.12 = 3f4f8cd7d1c92136129f463bb6e28ff1
+Output.12 = 70f58a7155c36dfe0b3ff75cd004415bed6ebf58b0f5945914c4a30b4a03db1bb5ec2da66c49f3dbb3519eee2e15699c340e4ff6f555ed53c278730b49e95f6141bb0ca6d54176e816b8b0da264ef9a3
+Entropy.13 = 0796e15cbc696f3677b86e88b224da53
+Nonce.13 = b257ec44739e378f
+AdditionalInputA.13 = 8adaae564b20644317f1fa9b263f92c5
+AdditionalInputB.13 = 3218c4a32b9dd73e865eabf014026497
+Output.13 = d4d042d00815694e28ce7aec58af1d5d7bbee38a64b1b5be258fa7495c3f8e1ecb356f0d71f3f4a064e54b718361ec773b094b0c473331d91c8e9429d66a2234fb66a2365e299d61a0c48497e8f4fbb4
+Entropy.14 = 7a41f0155e6562e5775c72f3c4d5d7d3
+Nonce.14 = 525b6641b2641cfe
+AdditionalInputA.14 = b4894bbb6435ffeb710bf5ae440bd744
+AdditionalInputB.14 = 689fb48c27983ededdd56d5a6b2c0345
+Output.14 = dfe8a9e17b938a1782fc3dba4f234dd9c9e36b67b28e1d901ca6b3628689aa4d2ae6b005ae3ce97e0d1e645da2710162294606ce51638b91e9c46d8f7f4f1a217e44c36b560f78b0541fececcf49b9b9
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ccd5c563cf7a63377a50c1613c916f0a
+Nonce.0 = 4a10bc36ae0dc7a1
+PersonalisationString.0 = 4dffb8b3662deb1ce7615badaa31db29
+Output.0 = cc2e9782fe2b2fbc869014032ac90984406cf8a90d51c8a540bd5fea0a7b87fb1f74e309e6012f81314736a9a284e740fd7d95540967b7c8b3c00db08e224bf49166f0c7855aa66a4c37f008ec85f556
+Entropy.1 = 29c3ecf108e961484ff8d70ac31727ff
+Nonce.1 = cb6d67c43fefa178
+PersonalisationString.1 = ef3de896e861a90665dab631a28d2660
+Output.1 = 7b7306d5fc8dc8b99d51546d22a09346bfa273969db066a2c9a249d8a9ee1d6a5af7b65267eaa12b297882b10b4b74ca41cfcefb89bc727663df339e7c8509e7f330b96711b5e063ff06efeb6b3bd976
+Entropy.2 = 1ac8ad13adde0db4639730bc990be05a
+Nonce.2 = 0cfbd5fe2b072303
+PersonalisationString.2 = 77a689c50945a03e809c942dc8260226
+Output.2 = 3ac0bc009b7390a25a42cae20d931996324a02158ee7923c81d411ee086b799d023b4269d5e773284fcc88408c9a6e41e977f610f8f405d919613fa617bd04048eb8c0ac1663ba9eed9b5590b084110b
+Entropy.3 = f50f07ddccffd7db928183a88a3e6faf
+Nonce.3 = bf3a5c486a87c89e
+PersonalisationString.3 = 58bd67add7fa081c3034c1d6e05af8ce
+Output.3 = 76eabf6d4cde433854233cd2600b5dfabf34871d71c2c25582792170545613f53d8c5c0ac6859c7470431e2599139f902ef66ca09b017573e9fe71311e65eceebd705bdd1f04395062d9bf9a30876bfa
+Entropy.4 = 85548c8caa37dad152905b18d541ce6c
+Nonce.4 = 8b9537a556c8e31a
+PersonalisationString.4 = a91111a11d81ffa5eb07de47456b5a25
+Output.4 = c77d8471e030334cea1c4f5efe314e7d354bace881b84147face9c60bcf0fef7f056a9aadc2692ec03d1c8c70b00d20b4044d19706869c212bd1e47db69ad1c4c27c525df0aa13ce4c6ad7853ceca104
+Entropy.5 = 43b7c1ddb10a2d1fb9c564be23be474a
+Nonce.5 = fddb39943d1cb8a3
+PersonalisationString.5 = 36e732d9437557cf4bc2910492b7a17d
+Output.5 = e5576e48fd1cec1257068eb41b1f1a42efa21caa25d90526f553fadb28d65fb92215d2ccc3dec5be675730c92872d5a82e80ea76662c7dbbf52561c449aadd0e485f8e30cd0c3e5cc7bf857c75cc1236
+Entropy.6 = 94d3fa379fb01b342669fdfbff7831b1
+Nonce.6 = af1310b01e6ba647
+PersonalisationString.6 = 203ba869bd4b3166887cb38e845e8003
+Output.6 = a46908d8fa56d12ff54531aea8cf011edfe567d90c396b40c8001b19b6a2e28055becdc8e6b89fb084f01d147285c3d7d1677d0f65ba1fd8c06ebc4b69c6456e16d13a9394ff166ca8f113b0d35bb94a
+Entropy.7 = 614ebbd4af2300f8ba40a525d5239165
+Nonce.7 = 0f1e54196c7d8e23
+PersonalisationString.7 = 2906741ed4d07ac73fb85e474e7da600
+Output.7 = cf472147a08866ba54c5291ae637a00dcadf484efa53142175caf67d476cbbfb29cfb096a34fffeaa4a69ef0fbfcbcdd0124989df4ccc4d4fe0d501f4cd91da531c49ef3f9b97cc4f5c30b6be3288bee
+Entropy.8 = 8af695ef704e1cd1faa552d345e76e52
+Nonce.8 = a304311bcabceaea
+PersonalisationString.8 = 94ad0cd4d4f60e42edfe7d0eb499208c
+Output.8 = edc832cbe218a1aba14aca5aa9a659367c94e5f8c98840eb1b713a683df9dcb8657751c73ca6091c482febb05c964d5079f1ea3b719da1dfc4c971200181e64e7b7e122514f23d7e9c1f8739fb992008
+Entropy.9 = 2836f6474ec4d0e1ea15be3a60d6ce13
+Nonce.9 = 544da2336ab1453a
+PersonalisationString.9 = 334d9ac9dd4490a8e766baf167d12966
+Output.9 = 66d0950b03741760622af56924e529298454e7b22d8d3a6b09d23e5e49380304c97e5ba4484b1bf8d49d58766594a5af997eed57b050e49d48a3d92f6b00027700bf2d198b4565c7b0c0cdbb376315bd
+Entropy.10 = b7fe628056bf891304a628c6dbfd5c1b
+Nonce.10 = cb435893f644c63d
+PersonalisationString.10 = b53b230221acb4ef9383bce5974649e8
+Output.10 = 9b6a546349510864bee318e3b6d37a4164fd83f8eafc76048a94c65509360f22e4629bf916fca047bf6395fb6a8fa3c0ede74d5180d4942c83bffdfedacce46f3a0e12cc3ee8f7b36511cb5f1da6f035
+Entropy.11 = 0a37c75bc808a90bc6b358b1df6be5ae
+Nonce.11 = 52bf5df812897d1f
+PersonalisationString.11 = e43daccecb6c15f011c51cf293912994
+Output.11 = 3ff419c6d50891bfc44c2f8e00532cfa74234d0427ea5537c4a1622b290a74f1c3170730bbe8f358cfb237e7dd50c03747ca9c56c6ac503fea6acf6338078d301397128e3d27839cc0f7054393144ae5
+Entropy.12 = 9149a3fdb043cf4a58a0a6682cd0211a
+Nonce.12 = 6c6a87fd2a0873f4
+PersonalisationString.12 = 19c0436e4318e74789800fd985b8c096
+Output.12 = f01392ed90222a4beea745b0aae255bf78eaa226ff0a6c276bd835abd1d397680074e0035bef3667225ab22517381d38830b47337ee9ddf843481bfc867ef44df4e3c152eee85dd0f6377e451b513536
+Entropy.13 = a3e40c12c6eb6cf0f8b93dd45f02dd07
+Nonce.13 = c697c1c060c90bf2
+PersonalisationString.13 = 1cf43d5e6cb74b0e5d70f9377eb4ea03
+Output.13 = cc002d549d5813efc10d16d3132fb5b394bea03109c9f11ab01a3178dc3350d9e1e9896846db60007ffdaa3ad530089fe4bee9380b807a19adf594466723ac98dcb540986ec6307f2b0b37d79366d0f4
+Entropy.14 = cb89ced16e360d7a417f4c165cfe3e1f
+Nonce.14 = 3c9434b7d7e18472
+PersonalisationString.14 = 55bfc33da17f712877829b7f8a134e55
+Output.14 = 705950e4790ada95b99ace57e31115610ebc65d755fe587eae8fb1aeae463bea8b50a278f45e61d3433272ec31b0d48afcf219f5f4a0adb20537be9c7cb65911df28976aed4b4278cc524639a1ca5f40
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 2e46d1465016ed9c8e97ad09b64135b9
+Nonce.0 = 1f767a37dbe161d2
+PersonalisationString.0 = 9cf5328f3c83d9106633ef72969db870
+AdditionalInputA.0 = 2cf2385a1c08820f116110ece73d5c38
+AdditionalInputB.0 = e276ba7a39aabaf7b6ac06b3e625f228
+Output.0 = a34e465c7cec4a4425e74ee9ff00afd03c38ec23cc42275a45e2b9b1688e0346c831db4e876b26ec8a0941d8822ea2493345b647f47d62f5a4a1175a68c931938c504b10bf510e84e1d1b7575ce60392
+Entropy.1 = 57a0130495639fe36ea031a4712d6f8d
+Nonce.1 = 1511d09f3c4423db
+PersonalisationString.1 = 06c68391122a4cfccfd3213e1ddd0217
+AdditionalInputA.1 = f40e72070d55cc04837b00620ea049d2
+AdditionalInputB.1 = 1370babced8c74778fda2b7196a3e3be
+Output.1 = f83977567a81ba5ab9183ae22b8f74dc56600c9ceb0c356bfa538da363cd4cbd23df38209ee318a824d555627e4d92ab67f419908ce874863bd3a14175404b59ec024eb23953241d057044366ef5c92f
+Entropy.2 = 22f1aabcc1dc1bdd3ca4d543052f1ecf
+Nonce.2 = 0991d99eefc2e214
+PersonalisationString.2 = b1da6e0615faa3a3332986e3110d7bb5
+AdditionalInputA.2 = 1cfae24633f47b1be98f613de4aae9b4
+AdditionalInputB.2 = acc5e271f1effb59954c59ae3c48371d
+Output.2 = 9c39b50e672525f5f55cdcc5a6db5c12e0a2659b6066a0e5206c8355e5ea050e3d25d7758e4295cbbb7407ad8cafe6b18248100a7b44cf46789a8204b89e0ce61863b8f668ea1a85bb17d1fe784163b4
+Entropy.3 = b1c1c8b29339f45baa8844a836e1744a
+Nonce.3 = 330bdb95c9a75071
+PersonalisationString.3 = 005db9cba44937b96c2dd8fc2ede4f19
+AdditionalInputA.3 = e7c66f46e635ba70e13ec802eb680600
+AdditionalInputB.3 = e042426aecc7b6dacdcef259ff1cb974
+Output.3 = 6268591ba5a4ea9264f2fc084ae0fcf29cc8510cdf13d1cdd6dedea38fd1233cfcab9a516fb1ea87d2be3663cccc7be45459e7250236c27b4c2ba2ad93f9b162d7a217c90d0e72367aceb2b68fef6972
+Entropy.4 = 869f7dc29af9b337707c9ba6b53c096f
+Nonce.4 = a591976c911e9b93
+PersonalisationString.4 = 7ffe89547e750bc81c58bacc420a3d01
+AdditionalInputA.4 = d2bbfd8e2746021fb96e6f193f60d5a5
+AdditionalInputB.4 = f7e90688db62f547f9a663d0bc36a881
+Output.4 = c5131771deeeeae61e527ef451c31268ca81be89876626b7c939c5853f73bc4563c5990157baa59cbbf9bc90966ef5dff107d9dab2c728490195742e7870f9355b7f6b34e222b026ebc6f66b1cc08b2a
+Entropy.5 = 0ed5f3590bdf23d6bbda155607512a46
+Nonce.5 = 0fac870d3d0d10a6
+PersonalisationString.5 = 7779c7095f0e3217148433212b514ad7
+AdditionalInputA.5 = b4cf127f7694c84882a7a2bf2ad82f86
+AdditionalInputB.5 = 9812e2fa754d8d84216bd8ec8590e070
+Output.5 = 49c672a8b8ada4637c85ad3cc8f34ccf65ee8a52080b40ffdbe123974667716f220a6b8d4325a2233c920df62c6af9332b5fe0fb4927096fdc5fcb0582561c6a5f2c2c02a21b7f00114e37eb841fc2e0
+Entropy.6 = 45b88571f1f6a5078e8f55a64fd65cfc
+Nonce.6 = 21b460e9d18d8b0a
+PersonalisationString.6 = 5f8e745b4cfe2b389ae793dc549651c7
+AdditionalInputA.6 = 60807d1ed62addf0b3b99aa193b2ae69
+AdditionalInputB.6 = 7bd3ebc62ed27255e890eab9bdf1f48f
+Output.6 = f276e92a70dc952274e97b4a6f21033fe9ca3c8f6b3351e5b9bd7bdfee10fe48fdec4207ab0ba2daf748546a1b41f1885b2f5c72fe8bfebabc2070630eb4510f56155e9f56cd28f34d2a7bbd1537fd35
+Entropy.7 = 644ecaf5aa69da3b77b193e98ef39a04
+Nonce.7 = da34725b826a7658
+PersonalisationString.7 = b5eb33eda5ed33589fb10140d7fee099
+AdditionalInputA.7 = 09e5f533ddd905216fe33fb7c56b61d1
+AdditionalInputB.7 = 81b42cfea57b3b23e42f9a76693fe3e9
+Output.7 = 97e86cc710f4f5cb03e5647aac699fe9470daa8f466020e68aa6b6650d1e5087e60ce0327b76810baaa6b1e5588d7b64fc4601951877e6026d1f193073bef1366cf3c8e70a8dd8b4f8008c92a5dec8a9
+Entropy.8 = dada9abb0f4971c5c1729f770ea65c5b
+Nonce.8 = a71b797960511bf1
+PersonalisationString.8 = e2084322989327d6c7cee24debf5ec6a
+AdditionalInputA.8 = 5258eb6b1ac6e0d7fec82311fa25203d
+AdditionalInputB.8 = 98830de1787e18f24b5ca2c06710ba88
+Output.8 = 6d1f6ff3ca5784dfa4fe330a6b34176a6568d2dadb61487afd1b95e8b074804550d4fb68cd5b2a3fa418cdbe1ee4969653f30fbd535b96cdf84ea8fcdbb4eac328a046a4d31d2e1aaff732bb0a081702
+Entropy.9 = 409b34c37f4d2e5dfe0a05074c386087
+Nonce.9 = 7f73cfe2adb07794
+PersonalisationString.9 = 5de4a53e8aca5cbbab1b3066d715dcbd
+AdditionalInputA.9 = 9a7edf9398b24c1d31f2666b9b9d779a
+AdditionalInputB.9 = 0f155315784d676aefb7f5eeb62a0949
+Output.9 = 03f0404283d046fd43a2febfae41b2611fbd27676917d22bdc688d77917998175eb1d14ad63adef5aa8f5bc94a7e0cc50c31e2edff8899c8ee34abdbadc4a9472b093efa5c0414681965e52a802a0f93
+Entropy.10 = 494fdeee3c3a1cea15a6f6143ab89e7d
+Nonce.10 = 4a93f9e8a360c74e
+PersonalisationString.10 = 2b473062164ac8c4a86a6f59c476666f
+AdditionalInputA.10 = dedcf5e809deb64f31f4d3fbd8076518
+AdditionalInputB.10 = 1c9726d1393c3aaf1742fb4e5fbbc869
+Output.10 = 905a4f69d059fdc164a699deced281fe946aa55f7dad003e2230ac913d7deb2aef87ee37d14aa32713f4d3a080bcad96aaab08aa2a7dc4d028d9783b0e1bba64bc5a01e34e6caa52f4bb2e7652adfd6f
+Entropy.11 = c37b632eba47b37068dd1468f882a805
+Nonce.11 = 73fb2c8c738d5dce
+PersonalisationString.11 = e8e74095cc1ae4bd3caed78c884322a3
+AdditionalInputA.11 = 327d9a42a643908553dfce12419a52b4
+AdditionalInputB.11 = 87cbd71021cb4a019b0ae3b069aaa860
+Output.11 = c0ffbaf2331fe683caca2dbd984c1c3d0bdebadc0d4156c85290c9fc8cd4578a6c4637ed0c7952ad0155e59c8adb824a2d9dc76410c2722f134846b31da96444973eeed9a07f6a1205dfea448bf44752
+Entropy.12 = 804d2a4a5795145a38f7a9d692b35b96
+Nonce.12 = 053f8cfb46065585
+PersonalisationString.12 = 8d57d0622ee09b751bfa6ff2c724d887
+AdditionalInputA.12 = 7aa24affa982e7506b48299c566d84bd
+AdditionalInputB.12 = 8f0705827ae4704cdc4519b4159d2231
+Output.12 = 2a2e0e2a5567ee6aab61a6bfb17d29de3f406c3235bda1073e5ee061d0b9fc5e24a085ed5724813cfd7594730aeff3e64a2b8b0a9d40ec62f2b461b34385827fb14b8355b9fb9939d0e046e3b9824e9c
+Entropy.13 = a1a878881fe14aebf0200de12a35d42a
+Nonce.13 = 7c82be726a835f7f
+PersonalisationString.13 = a94a268dffb62c4c2dad1f6b40bc4e52
+AdditionalInputA.13 = 9a8d19dceae983564041ca7b0585ecab
+AdditionalInputB.13 = 133c0dfc3586e405a0000e0ba3bbe7b6
+Output.13 = b06db3a831f7b86e423b4de951c477fee22f8cfb539362084b8aa5c1da9cd23479678f40e9419fa21e4391dc8f616907ee1851addec517fcefae47dea07b364c9d2a6592a3b43439e17d2621fd6da02f
+Entropy.14 = ce9057867cc50a1169569761d70aa88a
+Nonce.14 = 372c31f9ba8a99ec
+PersonalisationString.14 = 86acb354abad884d85c37bf8fb1c6a82
+AdditionalInputA.14 = 7ee4f3670c4671f128cbd743c408bdd1
+AdditionalInputB.14 = 38f8003e8fb8c119534a2c3400a87f8d
+Output.14 = fedbb1636b83c5cc5379c9aa4d1319df6d30770e469c2f7bd65b4b74d9bc880d520e11b2c3642a7c4cb6d6138d1d92f716317dd762c0a841e56e7e0226971a7f470e918d44b4f374f9e7e3b5209516d3
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = bfa766e525d824db96ca32b4fe92d793
+Nonce.0 = 9a72e7b810b29762
+Output.0 = cdc76a2e0242f5618c69335e7a7cb82b3fbac60cbb8c76eb9d8ede01105a5a507aa13bd23454dd5faab287dbc1a7edc0162983936d8532e0131a1e80f59e3dfeaf75e6c28e8d049c95a3974047382b3f
+Entropy.1 = 92ce11514fbab1cc4ef748469ba3f6c9
+Nonce.1 = 3cc37ae299c2bf9b
+Output.1 = 05e19153e1b8aa4c032abb176226c7b8d6f7638ca120dd755300d2fbc0c48a980c076f9f9c00224aa0b4d7a271c88cfab9a41e6a57afb2abe58d97ff7b229a7c4bdb4dc00bee87377742ecd508e40ee1
+Entropy.2 = 7fa77653474a847f037422577f9682b9
+Nonce.2 = 41e1eba1cc019344
+Output.2 = 514a71380a77d4ecc664fefd584c70fb69e5873dcbd8f198f2aeedf0c80c85dd1bae49b2a2bef1d5e80458b2f26711f1bcf627363560b59ec848898c94060c829c3f3d8073cb73988d769899368f187c
+Entropy.3 = 09fcba90dd5d55421963620faf9f0c91
+Nonce.3 = 7b1a05f1e9ce9079
+Output.3 = 76c29f559fc06c3b924441a45e195c6a217151f21b809de36801e260e0c4be3f6ed45e7315ad7526cbead47b70274f5dce9ffae78a8fb535409820c58e89d8d83ce562d0c970bfb15f680f357986a286
+Entropy.4 = 218d7cbc38ade0cd245ed1d2a3c634a6
+Nonce.4 = 23d8d1ee77fb2a64
+Output.4 = 2648b3639e9131f0b57a7bd8087d7d08cd7769c607be1940fbe99929124ef2721794b18212a5e5c2a4b8b3421e091b0a845f5b5752d668510ac2596b7c93a91f382f94a747a4e1d71bf7b3f3a3986e78
+Entropy.5 = e39498bfa4d98ca9b22b698aa1f63ddf
+Nonce.5 = 6476ff7308958104
+Output.5 = 5ebb29a28822c2e7c7dffade16560af4be4b0138864a9d3f73b0833e10773c0c86d7e44166db49ec5d2ede42cb875990d5d7b4430dfc6df7a7bb4506b6e73446a14bc60dc6b19b51f73314eb08b000dc
+Entropy.6 = acba480a9559ff9c61cb9ec7e8abb6e8
+Nonce.6 = 7fd83151ed1d2373
+Output.6 = 58b6519828e5668ea7b874429c1e54b261069f3e5674bf61a99c36fe088c7fc9447bd9775d5434dd75daa8066f0c621dcbf043a05e2774d377e31606ae982fce03d81a20969e71a16568bfbee0116e54
+Entropy.7 = 6a1496d59769fd65bb498278d3baac6c
+Nonce.7 = 8de8ead8cedadbda
+Output.7 = c88e74a0177a5393e216980fe5d89350af0ec099a78543f30fef40a22d843cd0c3f1399c15231129bc2fdf27fb82ac4743ca8631161a886bb8f15b5f5183ed73956f29ef5a3151c14ed0b5d281b2d345
+Entropy.8 = 68ac7cd82f0c42f2759b646350891457
+Nonce.8 = e17540c06311ea2c
+Output.8 = 27302d645b6b4318e8f739b397b9acbeabdbc01bc68382972529ace95a27bd848e51286cf8fc87cff57280cbbe20584962d2bd757ccf60145c72f0de932c68277b7907a56f67b399c93a65f4780f6553
+Entropy.9 = 2f14d50ac42f37fefa881d6f34c09175
+Nonce.9 = ec7bf5fba3c94496
+Output.9 = ca9da0d8ba870c599ddadb8083d3ca7d13cc4567a997321b85d97a32c13c248c520a27cf01999050a4cfd7410f9948fbdfc9d588b2c864690e4ee0820f7dd9ac558702578f7d39ea059a7840fcd8cd27
+Entropy.10 = ec842160e9877dff8448a25fd19a8e00
+Nonce.10 = 5d46b4fc7108d5a1
+Output.10 = dda69460e6ee719256562b53c9d2301b41245452dc27994b6455a1ad10e3e712d0f689b858fcd832910dc27accbbc5a5d5c0219c3fa265aaa1139815d5b4a75f2852e74c75c7d6b75b60a459902ed003
+Entropy.11 = eee3c4cb2459c382680e40a6135d4564
+Nonce.11 = 7fbdf557e97030e7
+Output.11 = 5a64d31283b8db2abaadf7870f83177d8dc638da08b640f7f3b8faa134942d3d6001647a202a25c55289fbf68fea9f5b57e32da221e580ea5f3b2ac60114640de1ee4523bfc6457cbf271f9c55c0fffc
+Entropy.12 = 84ff66d74434cab61f40a73ce992cd88
+Nonce.12 = 64c3e72ab8e677ec
+Output.12 = 9fc91387318f67c9687e31050eff3bf0518df31b2315f682d47771a93608db74c8c567f2a8da7e2fc06e00b8a1cd2b89d1592fb29a4925e63828e6d22acf5a36587d50d02593bd8431026684ded816c0
+Entropy.13 = 78725941aad0cad65da5d0b7dc9057a0
+Nonce.13 = 577147770612020e
+Output.13 = f9ce02ce66fe9f370e97eed7d86b01e0701d1b9ff21531f0f899dac067ff48c6d6d11790c2b0e6c6e8d3c993564a09b05a7f135751f11d72452238868db2f7c08c170ef7b918911556e13f5405bb9969
+Entropy.14 = 5b6aaaf5c4e5acdacd2c0c14648eeb3f
+Nonce.14 = 353cc1174da7f766
+Output.14 = f7664dd99fb870dad1a45a4ddb870c9936fb42b3a063336e447f15703c5a95dd79eacd9f41cd0c1b4f2e1a45229aca140f463c1beab47aa0525e5bd6e1accf360bc8525430ba05fd14d1f008009fd586
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 9e66c1fc6886f1a84237d721be6c92b4
+Nonce.0 = e0db993d92e0c85a
+AdditionalInputA.0 = 978a1a8a9d6c6498d3536c7b41353fc8
+AdditionalInputB.0 = 24826f2c58425ddddc71d796c6a57314
+Output.0 = 94a0cfacf2989cdb19873989f8e86739d5bf3afc392b7211ade4cb127e6e18a6398132bd38d5c327211a3554d24a8036cd99d50005087779c67276196578b4e35ffe11931077aede78869d1b9ff72561
+Entropy.1 = b8565f257fad8812578cd2990dfdd8c5
+Nonce.1 = f51c7a9029855727
+AdditionalInputA.1 = 3fd4c7015e0b7b306a3fba2ae8d0608e
+AdditionalInputB.1 = 7e8dc861242e508b0d77f37498ee8cec
+Output.1 = 14c233eb1cd922174f6cb1b82481079b8ce6d8893c3c16e7ff75c2c05e246acf45fafce47165759fdf22e88a497f3a7ae9490d0ddb70ae2a84e366bcd02ea844bf4a6e47432025326a04fea07a6a0a63
+Entropy.2 = 68d5425a0e31b17d6a9c0a86f9531aa8
+Nonce.2 = cc68d1be9927216b
+AdditionalInputA.2 = 61443cd0eade23310f8f5baf711eec1e
+AdditionalInputB.2 = c5bf53fe4c02f92bf4407272a24d4b49
+Output.2 = d5262498e9fc05359bfabede33c4f6bbe694b660568f643763e7c1b3f5a4dbddace7cf8c79bb0fb39b3c042a266c999ef5ef993bd12d20992eef2125363dc4c9277e5fe12ce58a6b371f20bb565ebe39
+Entropy.3 = 0667638a456f0e259ae466b6717d9fc7
+Nonce.3 = a56f17dc6d536a0e
+AdditionalInputA.3 = 9f9bf58fbddc2a46225049b3073a04bd
+AdditionalInputB.3 = 6c18eddc0893e73e70656851dfc7b83f
+Output.3 = 04437fb577a897b5093794845b74b29079a9ad5de13736495860d57b3a677ee228013db9f8360cdae829411a2b4b6dacb6afb74808c2409b3732e7cbf94367b2cbf02bc2f7d8808a03edc5ec08de2d6b
+Entropy.4 = 501533f7849cf3a9087ad9ffdf331490
+Nonce.4 = aadb2ace7e079e02
+AdditionalInputA.4 = a3800ef525b3b5b3559d11ab3ae63738
+AdditionalInputB.4 = c3699b14a20e1a24cf4b4778cf3f30ba
+Output.4 = 6a18c13785be673be7f08ff46ad79c13f824bf23988fc028d03d739e09ac16dc8d91fb1b242b5c610e8abb2def1d8c22cde1b70e7f59c5392d544bc0600f890835ccb58db841bad89fa8e0236fe01be6
+Entropy.5 = 486cec72c53f9cf14493ebf4e5b94bad
+Nonce.5 = 07c1fbbd5669b51e
+AdditionalInputA.5 = a543305abf590408c163420e4b82044d
+AdditionalInputB.5 = 5fa086f52cd1cfa6e7c791025ae3c8f3
+Output.5 = 3849b7dd20676d7c994a807a5a90eea088859387632f8a9753c2fc1ce1dfa9f4f1c088898b731a29c54d571f034b96e37d8f65bae67c117213dc943cba3405d84290055b2f2d6f67d0ad60097a5c2556
+Entropy.6 = 59864fc6051992871c3cbff05df5fb78
+Nonce.6 = adb94619e96fcaa5
+AdditionalInputA.6 = cf3c0c8aca346a6726ade353d3c27ec0
+AdditionalInputB.6 = c9e780c2d9af4f14c1189ea1ddf32f6f
+Output.6 = 72c02fa3609040bd97a220ee02a0431d421e28fc62ab49436e28a9d6644177f06d005047a186d29962134fb677b2efced14140da676d7175b8d66c231de87e3d7bc98ad6221b27dd228a1ffd37d4c3fd
+Entropy.7 = a7320c2a974506a8f6668f7df465d5ab
+Nonce.7 = 92c5d91db0c0ecab
+AdditionalInputA.7 = fb57906891f92d0a28ccaeb989c1a605
+AdditionalInputB.7 = d193e3199c9cf3c9a06aeebbcb916039
+Output.7 = f137664231ea31fb33387e0d85d414e1162944ad7655e3892bad7e1392270defcd9326a37dbd49a2212f4efd6d8209b190ed3323cddbcdd32700b688ba785eca0b397e699ab9b38484ec27899668517e
+Entropy.8 = aa832d6d61b476d84b305c62d70295a1
+Nonce.8 = 43fca3d2bd71625c
+AdditionalInputA.8 = 03a0cd32aa84d6c0e27f534072aaaba0
+AdditionalInputB.8 = 29bddfbd93bfdcfa360f2b265ca4cd33
+Output.8 = 08f0a32e483f905f1d7c0e4a5379f801fc09eea908aa343cbf65092ca038a2a18fdc2e28a251af4b176904a6f6681fe90c60c7efdb9bfb2f07a18f4a8fe1d29b11e50c61e3e77cb63897f72768b70a1e
+Entropy.9 = b16199af13f67d2e1d7116d5439cbc24
+Nonce.9 = e457f39562bf2879
+AdditionalInputA.9 = 0ad042679b50df22db3524f305844eee
+AdditionalInputB.9 = db8a6bfcb4bbbcc237c2910cabf857ff
+Output.9 = 081f6bb91a12784e505b6b70bbedb94d31dd1e6a536dd438507af07078fbd52a7ebc7cbb234b1d36d97fbb232c19a029b834a3bd744052a9b0684b3f54550464985a03d7b1a869cff4c4214a4eddf69c
+Entropy.10 = 1a87ce827097fb2cf7f647e9d4f7e1b9
+Nonce.10 = 6653fddc19852c6c
+AdditionalInputA.10 = 1516c1e51382a92e4c50f79e8d15e00b
+AdditionalInputB.10 = 484858b3063cfcaa96eb0a35bcd0aa5f
+Output.10 = 33976057f1cee34c47b99b34f4f0c603acbd55afeb1a2af4057424084305f40ae3e66edff18a0b9c78732f0a4e75c6316145a2f6432217ed89d5c758a64d7c94c21b0ab4daf293b4bdc1c657c2a21ef7
+Entropy.11 = 816de0fa49585cc03b3dd872dd4b5e9a
+Nonce.11 = 2ec77b957f041fbd
+AdditionalInputA.11 = 278b7035cbe66cbb62f6f889169b90bf
+AdditionalInputB.11 = 3179734240b94ddb4ea9408c3b881634
+Output.11 = 47f4293beedfee7646296823898803f64e75c1903d4adad302f52828f78f377a11197c203556a8bddcaf07052346f2f63821b4fefccd5586edb3e42c3e440d1c1d771c455b4a87387327835a90f58d29
+Entropy.12 = dfa7b352a12272e4e73e695821684529
+Nonce.12 = 03064231e58dd00a
+AdditionalInputA.12 = c5068492e672a25807d99feb92c7efff
+AdditionalInputB.12 = b17b041a785c9d5d7758954df5b8eaaa
+Output.12 = 039f06a342d27607b94bf72a1cb7bfc06eaf4acd27a2822105544fd4fc5611c62b93cca5f7e43de59fb1890dd7b90ec115ee6a003a316a2e320d7d67c4a2ce7767561ad0affaa5c7e43493bb96c14145
+Entropy.13 = 973b3fd4d03b1b31977850f55e0fa2bf
+Nonce.13 = 49c927702f726b90
+AdditionalInputA.13 = 0a7985ff1ad019aeb2c4177399bd8ca0
+AdditionalInputB.13 = 05d5f836c929ab7840b01e97d3637aa3
+Output.13 = 02467667e66aef03a95114d3c97880f0d64ee98600e2332e60ecd58dd9e06844971bca4bfe65fc06e91103cf802f3a6fe6499a19696797896db585a32c1bdb5e1ade83914e6799ea41245b3162723031
+Entropy.14 = a6f43539adfab40674ecc38a4a3cb7f7
+Nonce.14 = 2563816402e9a386
+AdditionalInputA.14 = 4eb5c1192fa86b355237b5a8bd43ebf9
+AdditionalInputB.14 = 7323d1a6f983b7d16df6b0aa9d14adb4
+Output.14 = cd41a0d7371b2eeb790fa8335660385c418ba84507ba94d1d1015b3353cdcad556993c19388461fd2cce38cc9fbc00e707b18dea9d712ac0616b443b23aee8131c295a1a741ffde36b2032bdb8ae2f6f
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 042c8e1c6782d8f73d009068a75ab2e9
+Nonce.0 = 677b47c76e4fcb87
+PersonalisationString.0 = 14ed0ba096a31c15d23e4960989d188f
+Output.0 = 9e1aa2125ec8f2198d5125fc84ddcf2aae63bd5f2b82d1d04e8e38068519fa15f711424e1597f4d3fd5d883539eb38b2df9d2404f5c4c2b2cd7161fc6b16661857fcbf7f495282cd3eefb733a3428f63
+Entropy.1 = 012e549615f628bdaff1accf34e67aa5
+Nonce.1 = 4ec7216881e013d4
+PersonalisationString.1 = 1917cec767e585d21f2c87fb8ecf8998
+Output.1 = 0ef48d6825eb2eb7b5cf2fd27d04e75876e57989dd590a9670e96d53436f07e5ed6b3ff31b0c2855cfee5e633536cce00fb1d58213225ec604f1e6337ea50b7fd830c5c219ac6195683fca437f8c360d
+Entropy.2 = f6182e3bd5af9db1168c1169065c2e9c
+Nonce.2 = c7d77e5617ea216b
+PersonalisationString.2 = cb4c573b948f9c42bd159510850f3c0e
+Output.2 = 2c0c8451b2906a4645d8fbd5e5d114eb6a8648881fd6e6283fbeea07f8adeaaee0be053f25e4c8611039b47d2243fd515f22341fd5b9a32f7eae4c93617b958dc52cff027b8e6571a9c77b3fc6e3d38a
+Entropy.3 = c53c031d335047819ba2d91848cedc2e
+Nonce.3 = 68a91905d2eaf2f7
+PersonalisationString.3 = c1651f5931d0b1f0ef1a6a5247d6a7e7
+Output.3 = ba234a775d77b5eab1f86b34b24e12519e3021e6c4aa0660d09ed78c18969d90d148d073014ec162bfa3c4c2f1ae44ed3259b5d21f962accb659b9811650bde00d6ae213849ab38745e7457df3e41827
+Entropy.4 = 92d5f92b4d7ed319175b898bf7265ce4
+Nonce.4 = 02ba3243ea8ccf33
+PersonalisationString.4 = a7ea09d20435fb095bea129439891737
+Output.4 = 3f9e757dbf6fcd15ade10a025d39b5cbd95d0d95ad4ff83a771f3d1c5ced8e7c9b878d0a0ee7b7e4083a2c20af93eec52914ecbfbad346676717719bbbaeadbc9e7b546994c39eb365de83ce6a08bb4d
+Entropy.5 = b26878d986cb7a9a24ad23e114c23796
+Nonce.5 = 2c0736af4cc7a493
+PersonalisationString.5 = c4b853b830723cc305bdccdc54c52b33
+Output.5 = 39d24e7112a6d61e9c8bee3e81114d6562ef1253069a7f5f395f57230ca243a9cab966c0429d8ef9aaaf42ad99f7f1eed705ff0938c7c9bced04398d04518e387820b059995f23b1f0021240e3ad37f5
+Entropy.6 = 1eb80342278e65a93bbab11e9ce4f335
+Nonce.6 = 8c1ad3cba58ee175
+PersonalisationString.6 = 68b626801dc8e98beb6fadf1bfb5e21b
+Output.6 = 7d1eff0e42435bbfb69924231bd839eff608ca112079726ed280eb0760b05574a0962a9dc08937fd3cb6348a171022b1bb5f6ff0d1899ffd5b41d7d802eca0f5ab338b51ba23b63030568d9231861709
+Entropy.7 = 97d536a5b1473c0095e7bdca428cbcad
+Nonce.7 = 0429afa5f99a14ae
+PersonalisationString.7 = 5a5178b8b767570857f8ed35ddd54d1b
+Output.7 = 9a5361931a1d6f327c47fc47320dbc21b0ddb149630877e2e190853c7bc61893152995225f3ea86bdd5be605a96d029f496575f08aa5fa6ca8348f0718253ecdbb689a779d3f16bbfeddb97c6419b615
+Entropy.8 = 1215644d686cba97f1be48493cd18a14
+Nonce.8 = ffc386c7b611ec22
+PersonalisationString.8 = cdd3a57725dba43d8ccc2c0bef1d4d99
+Output.8 = ec30fd9087521b3e890a212329a5a85570e0723c352c16239fec39877393211a4ab913f76eb9f03178717e40b0f3f7cc6fc8da291d62ab4d9152992bc32949df0280874d455d47d257ee62aaaaf5f7e9
+Entropy.9 = 178bdeda669c11953434cae40f74a3b6
+Nonce.9 = f6c34238fe691384
+PersonalisationString.9 = f3da7f228d4a8ac7183a68e81f8aca53
+Output.9 = 278e1015773790d2aa42b2c4ecc19ddfade99816e48b661b1ae74719817fdd24a21149494a5c2b3aea02c71b7f124184579efcbfee678b83afe5d7feedaf4612e26ce646730fd0828260a261787674c6
+Entropy.10 = 7fee0519cda3f1893a6e6ec597d5245d
+Nonce.10 = 3e40b0ac46e758ca
+PersonalisationString.10 = 69f3db79a89e62370e583282a6dce5c1
+Output.10 = 1478ec02c5b50f2d26260f00e01996208a1b92e19e7df9cbe265436344ffef4dc1a5390256d0e995b49cb16f2b6050b6d72b3744f98465ef277b2e1062d0c91636e5d3f4fa1cd872e18948926eb090cb
+Entropy.11 = 22582e33b126817172f564c942218e69
+Nonce.11 = 9541c0c884d445db
+PersonalisationString.11 = 8a9161291feca7b619dda96f1f95d1d4
+Output.11 = 1d3047675d69bf0f4ce0edc6973c5026ae079fc4476767d230ee5ba70eb1e35f0d75587d994c3a2be9c8d4116fa0051b70eb16342831838d0e4607db0ddb41341488462e5661dfedad87c99bf71cf1ae
+Entropy.12 = ca085646c0a62e89b7234efd1bf44218
+Nonce.12 = 05d59e3c6db4078d
+PersonalisationString.12 = 1c5658b01974a5a7257f827244739636
+Output.12 = 65daa28df559584a0e93486abd9252b6da3377a4a664e940e3f8c425ea5a3f6587db7a208e388e2ea39f8a82b0876e517d0a3b46156b70090cec0499fc9fe67ddf3787d2bbf038ad73edf135a6976322
+Entropy.13 = 1c98e8206b14aba60d99e1c50f59385f
+Nonce.13 = 3bbf085009fee036
+PersonalisationString.13 = 39fc2e475db746dd67c15ccb522fb842
+Output.13 = 9830a027cae50a265d8a7ce4d155be3bf12b828bcb594af7de85f7094f17c21494bd15e51e3d0b498c3ef4f8c4713f9c2feed42b1da4b9d08d1030a8cde51c3c7b90ae0e53023537b1adb8dc7481bcb8
+Entropy.14 = a6608d593372e785fa76a572b9621e42
+Nonce.14 = 9bee7502db25ae7f
+PersonalisationString.14 = d0e8fa47aed6b67ca4e8e521f733921c
+Output.14 = 3c649d295fd9b98082706f3f841f5275834143698c202da4c881c7d0a3c9995329a54d440fc4d21ab596e95e5b6651c6e7138b332c97ef771bc6e3b0b3fa09090ffb402ed1116d8395e5f1cfea3eae6b
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 395781cc8e4f9edb23827e941890bf96
+Nonce.0 = 1130d2546d7d7f90
+PersonalisationString.0 = 9b44ac5e40c0588cc281d3eacd48db0a
+AdditionalInputA.0 = f5cbce8c4aefed405abbc2c230082972
+AdditionalInputB.0 = ac6eb276b884027fcf1ff10c7c1606a3
+Output.0 = be1bf64388be36f069eb5f88eb587a7a91ae6d7b2c74dfa777ab7589196110577f12ebc73c2050528befb468db93bdb4c1020068c81162154550720b8d12918ab7a37e3b371349a2e3455704070d1bf4
+Entropy.1 = 51251ac73a86df514e0c971c3e3a1fc4
+Nonce.1 = 66d581f9d0306725
+PersonalisationString.1 = b9c4a558d71bfa722481e0c0d01c7b5a
+AdditionalInputA.1 = 4a38cc49b0b49c70bd7c6dc847dc536d
+AdditionalInputB.1 = 4bd1dbe9d8f783eeda0bcc2de942cef8
+Output.1 = db53e4ef8c0f07fce0427e8b2a3c3189cf8de8fa9a614dd07773474b512b390df3821f7ca9eb855047cd832e35e7043560aa9d208093725f85cda4f0f011924d2fb7ba8909a4e9d1e5cc270626f7c90c
+Entropy.2 = 6d4b93974bc805ff68eb614d360a04c9
+Nonce.2 = 8891f9e7a0e66398
+PersonalisationString.2 = 07c90bb88817427849cffa336a007673
+AdditionalInputA.2 = 97d40b4dfc4d3c2dae4745bf806c5a2a
+AdditionalInputB.2 = b6325ae18ab95627c1ca62a7bc9bd201
+Output.2 = 27dac72aa66bbc55cedd8e60ef0abb091dbc8994f3dac856d0a53ed9cd37587227003d76a288a4c18e5c617b0310a3865a9bfa28b91ded5f513a833001653cda0e7e2286327bf7908f5b69370a94c021
+Entropy.3 = 09ed2b11320062b64f5efd5a32adcda5
+Nonce.3 = a1096303faa72334
+PersonalisationString.3 = e7fd5c4f07b9a2140aa0dc38e40433fc
+AdditionalInputA.3 = 8530e77b80d4fe108339503477e9db05
+AdditionalInputB.3 = 1c050b08664b731c2af0a94d1885fef7
+Output.3 = de13d0810b89ad9335e99e693c5b60f7745d24755cd6686e1e8dbfe43c2fd1c92cc22afe5dd0009c07a4f2c75b669222069f2b380f24b75e3f67ede5b145956d345a00e623ca89b5148ecff5b32ac54b
+Entropy.4 = 7c6ffa1a98dc40895449a2e1b52aee99
+Nonce.4 = 502fcd0d65fbc300
+PersonalisationString.4 = da37ded34f1d122cd5f84d96e94a5743
+AdditionalInputA.4 = 9bf0c256f0a6da19ceffe7fcc19bc483
+AdditionalInputB.4 = 766f33235868a866a8715766ce18c2b7
+Output.4 = 400b225604d672aa52bb10de6b5891418ce04f03552179a5eb9c3b715acee26d7291f3884762fc4c7e286f8fe9c88a3934e97b4d63da432b4b64dc1ed3c7990f423421b86139848a7f41b2a074de732a
+Entropy.5 = 37cfad7c080aacb7b8b128b604875c8e
+Nonce.5 = 7258f12b264dc52c
+PersonalisationString.5 = 7f4860c5c2e8cf85fd222fd94f3f62a3
+AdditionalInputA.5 = 657a660856ba3fb4a4c9bc4d4ebde43b
+AdditionalInputB.5 = ebbb0370723861eb7a30ca54f66391d6
+Output.5 = 39427b5d8bf7d7edb76639f44c4f7891a173d5b3733cfb18055108a7dd1616abf2e1fcaed08e905073c5561f6f1a652ab073d51c48733ab1897b82231e49068f827a239d5420c0db93603fe5b25b47bd
+Entropy.6 = 7cb29063e19682699f43e0692706ee6f
+Nonce.6 = 5eed287eaba2a9ed
+PersonalisationString.6 = c7bf51ea250d877be79ee40a2b307da0
+AdditionalInputA.6 = 72bb22bd9c69291a2f4c808ae932990a
+AdditionalInputB.6 = 99927fa92f19b363eace031005fd5ac1
+Output.6 = c356ad9937bf66cf1f89964ebb7ee56ce2b6b2485d01762f5cafd10dbcee20470991d5b71797459e74e39a7429f8e7662ae9428f6ff0c1569a478a2f8b792e3da4ae5efcfd39b5ae5c3036aa6bf33751
+Entropy.7 = 1429a31cca0e5208f7f5f137970c77ef
+Nonce.7 = 58b2e384bb27eb26
+PersonalisationString.7 = 102c8946a835168f063cfabbcd9cbdbb
+AdditionalInputA.7 = 955c8883d259660f51eea217c7a5644f
+AdditionalInputB.7 = 699dd0c00f8115de647a0cd9622cf8f2
+Output.7 = 9582eaab608ec13f000c8446e9beb4ee8afd740b5e1c84760ee66f03867f92545ec3cd4e363e3b9e7775790f9d4c827e6095a1569d55ce744e654da3c4257dd518bd5b362fcd119827a10ee893f92530
+Entropy.8 = 851e7b2cfee37e3aab673d4783fbd34d
+Nonce.8 = b68ec7489b72f146
+PersonalisationString.8 = a508efaa12a0852bc2ee6ff247445fdc
+AdditionalInputA.8 = c014eea6b2a6f6cb3c95a5a3d750909f
+AdditionalInputB.8 = fa1f383fa97e4fbc7149f41cbb8b322e
+Output.8 = 3bd8d7f5eeacb31423bcd15165783b065eb5ed222cd2b949836d08cf3315b31bdfbf88044d55a2bd201e6b55c3518c16bf5f50c31fd4f5d2292927816dc40cb07796508c41142d9d13ebe924154f0b23
+Entropy.9 = 493f87823d37b2de87999a6f8d81e624
+Nonce.9 = bfb6fcee09aa1056
+PersonalisationString.9 = 70f7bd3167c5e5146050ee5d2cc2037e
+AdditionalInputA.9 = 07ca42e34252d6ada280eb2e97d7fd93
+AdditionalInputB.9 = 1df64e42fe23b9c04721757425bb4670
+Output.9 = f62e9c9486d469181951fca12454ad31a691fc8d0efb8857787be2cfa619dd161fffa204b5a56638c6751a32f56fe874f8e97ce268daff078fbafb3b5aa324f117d8f4866a91ff25a0729d4d98a7838e
+Entropy.10 = d8f78f44dab7ad3ba201244355622a4b
+Nonce.10 = 088cc74e5a96cc2b
+PersonalisationString.10 = 8589f76f13989e12871aebe6e781b377
+AdditionalInputA.10 = 4de39d14e5c2155c0f5edd635819049c
+AdditionalInputB.10 = 8668158ff1d7d950435a42cf93216a8d
+Output.10 = 46f450014b594168eac0a023252525d8b3d04275b5b8c32eb764a094a339aeda594993a96803bde46161ab79c72278b01b63b687de2ef15b1cb7030caf5255e0a3635b50e3e966649e80fc6bcda7a3e4
+Entropy.11 = 86922b8bb0b3a05c39585114f99b0ac4
+Nonce.11 = 0d9a57a72bf85bb6
+PersonalisationString.11 = 75d62935b7ea694429fb34a5cc493889
+AdditionalInputA.11 = 8e387a9195b09a62fc5274478594d989
+AdditionalInputB.11 = 32b7b72e48d31db05f063fe70753fa2e
+Output.11 = 4bc46578da450e26f0125500f9798ad50509820e8e534ea61089062c3c8f6026048ffda5677546549ee218f86d2a4bc0ea0ceacf21e0f090144f412c36f70acbe785f38f5a80078dbca1410a0a180c50
+Entropy.12 = 5fdd8bbe36190c6b0dbc1299ac97ebdf
+Nonce.12 = b81e2cc176e4dc49
+PersonalisationString.12 = f629c8f6f55820ba33deefae6c155ccb
+AdditionalInputA.12 = 87a216dc0dc9e4e976272d045e2a0150
+AdditionalInputB.12 = 6115f3da6224d53b35bd0ce21974cf75
+Output.12 = 7634ffdc8fe0b0e474506fc16c7c04e0dbaa72557082a40b2a13b2cd371a2d288ab09de3a9db5dac4b3a86d854db4811d1e9403bd5ee17ad64d4327964ac4eddbb3ccd3ac98e46f0aeef618da11cac87
+Entropy.13 = a618e67dd74626b8009054f325839902
+Nonce.13 = fed41d27a6e16b0c
+PersonalisationString.13 = ca0ae9a874b49faf09cdc1a061e76105
+AdditionalInputA.13 = 8dbf94e1a5537658cdb89fe0fc64738a
+AdditionalInputB.13 = 24e28c7c07398a04a356bb2c3b51ec34
+Output.13 = d198c5c3f2698cc86204f0fe160b1a125275f0af472c3161c79a523dd86f585baf2acbed3be454780697a2eac6370b173ade6363735541dbb5e9e318504668f2bc7c09f467988cad5fbc88ab657f963d
+Entropy.14 = cb4556568f9f296ba5eab8ec24144a6b
+Nonce.14 = f906b9309da2dca3
+PersonalisationString.14 = dce3e4ba41a0827085a6956f66e389e7
+AdditionalInputA.14 = d56ade0d74ea34577eb12a899d18d382
+AdditionalInputB.14 = ea83bdba8490ffd136def5f7d9240c59
+Output.14 = cd3d8174d8af97387ff02707d2757ce685ffb5d8dd91d95b8af4a3a757f9321b0e908096cd1321de0599640b7d81f43606b12e029ae158ed568ce1db429be75285c655e15f88da859f09b4cd843a0b61
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 5ec7bd88120cb0ad77244b19274dacfb
+Nonce.0 = c7a50a3d59ec51c8
+Output.0 = b4f1bf1cc25784b7108e0a7062988baa39f5906e145f6035295fc29f574777de196a42091523832157830d88f89685b630e4fa187040d5a472b0a16ce1cbc41e753fd1d28c37036e065bf9051d6d0862
+Entropy.1 = c163707712457ca60c65b9e5618fec7c
+Nonce.1 = 5fb5b84a82ffeb63
+Output.1 = 6df04dfe768cb4dcc29309b05041da2c6c141c22942c7884f2d900967d015a7873319e61e2ded42ee9df2607e13c0e9840322b8454cd9da874d1fe6c258b810adf83cdb7512d1f5642d5d992945b5259
+Entropy.2 = 88a5ef064182cc40df5a3b6d8bb34376
+Nonce.2 = 16900a58a910730f
+Output.2 = 3e44cdfb6d20d910463ef5df4f050fa91bd5c7a6a886650729978e9bf484a4bf7f2697109bbb78445cd4257b320aba2f26223906190282a4229c8631effe42dd2b2083a7b097e36a57aa0880431440fb
+Entropy.3 = 64ea885ed16a502511881beeceac0f2e
+Nonce.3 = 25a0cac3cf54d3cb
+Output.3 = ad4cf605dad01c13cb54e0cd20e307d6941620a580d98ea653b60a8ba2dc2c11f000b52da5987030aaeaf6bf880f4ddf4fc73d6daba8751869148b72948db9a56122d9c76da9bee8b35e2dae2f6ad8f7
+Entropy.4 = 2bb7251b9c609d7778a97a69ba2c5116
+Nonce.4 = 9bb22a4476821c70
+Output.4 = 80acba419686dcbcb80137c38ac2239487561a53d0e7b0a820514caaf2705d3306477b2627d54519f18dcdb53b807194b69ef4fd728a498114f44860465ce53bb428fbe0180c7faadc5f53bd195d549c
+Entropy.5 = fc6fc4bed4600bfa12108d5b4c29e50c
+Nonce.5 = d63a38c3d75afdc1
+Output.5 = 88b2c0d43eb53965943f90819510fe9f72c8865faab25500492f21dd74b28eb68b12227445f4d57c3b1f64538c4dc9f71c9da5d06457e4f932b2a1fe1b4176b4884cfd1512d2707d538790495eccd509
+Entropy.6 = 7028dd8a558b2e8ef1b31a99c7cbd922
+Nonce.6 = 41673e6aed43790e
+Output.6 = c161310c687f23259d521ff1c8dcfb58ed5c219e2fb97708f627ca06d56eae38f6da079280accbe9b758917b8e064a2169884b1c106da6b5204baf819587ff63de1b14ff0b6e8a67e7bf074eb7c98b1f
+Entropy.7 = 5256b720d1aaa7006ed9777bf748bebf
+Nonce.7 = c396a5da5d3efb97
+Output.7 = 08cf26b11f0bd8fe27887a661a3f258ac963e83e4353a500529b89ea630b9a27bf54bc3ffb1f70a5c9d407e9ff1d708c96f52e56cf5c55521862d76357550d83f0fd529cfafeeb140d4108bf4395fc85
+Entropy.8 = fea8ce85ec3d016e529f6fa8c9fc9aa2
+Nonce.8 = eebb74bd7352eba1
+Output.8 = 51bb34c212fd748795cacd926559ea4531aa97084246d74fafdde8055c360df20c8f45907afcc34e637702810201bc441071e707baa90f28a342ee9f6291497df6a1fff88b93794785b00bb4678da9f0
+Entropy.9 = eed4b9a341c4f1b234e30160ad692ddd
+Nonce.9 = 136ee68226c4acdb
+Output.9 = cd4dd8da7b9218a7076e9cba47f3752eaba8b0ed168142c565e25bd30669a90e2e9e7b5dc7c398df147edd6f34fdd9a1b53de1538c01f4a81472bac8c0748d5a96ae3d9b3859ec8a0ab3ee9f07f57243
+Entropy.10 = f7480c8ec4a24aa42bc1b5842895262f
+Nonce.10 = 85dd29845e457646
+Output.10 = c0210b77f76c309c0963f62beda4e161bba95689b22be0517b2335ed71b5b9170cd1ae7ffb33494ca222a422dd4b0dc933fb379ca270e42bc362119fb262f4c116cc49fb91cd9dfa094f487bd8f19f5e
+Entropy.11 = d6eab3988d4dede3b15a7efe0525be38
+Nonce.11 = 3f80483a12d206ff
+Output.11 = 315380dec9c6fe0f1c777e85ebd265db19227b3b34351eec0e72cd85bd631c72ae3a22cfa973fec74c67af5bbfbe7ac60d7fa219bb91c1fa627edc9682ec30c10d5f8c1be460f6b974d53939d3762a89
+Entropy.12 = bb334043d219c0dca576c41732c170dc
+Nonce.12 = c8950b84272fc33e
+Output.12 = afd8e538ffe6b892b595da45cdffe799835a1bde1117fd17a9c7194880f1aae8fafcea80a49ea72ac8b2600430fd2c896c214762b04aa3e329812aa7a9cd19f2bf7d8b6c3df022117c4b8f13c9240e01
+Entropy.13 = 67c3f334ab77b6cb276861c01da995c6
+Nonce.13 = 0f7105d28757f1cf
+Output.13 = c8f8a34ab2b49e102cfd88675cc1609d305e0db5eb3dd9e31fe4401b3d3862d7c6c26ccedfa94c5a396e1e135f449d2cbba19b0ffb3dadbf1714c665e05cfb68901eaa67f37b5e27d95eac0e4cbf3e84
+Entropy.14 = 1c3fc8de26ddc78651c9c2e4ba874ee0
+Nonce.14 = ca6a2d3cc5495dd0
+Output.14 = d00ff8d3b8ca273cf7c3650e36c892018c0f765da45ab5b902c5accb30ffe01a99d3b86752195dc9aa1232fc852790ef51860fd114bdc78ae02acb5ab2021ec726829591d623b0b66329e641c1f915ce
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 1d4ff3bddee2a714e2a360cdeb64bb81
+Nonce.0 = 70eb607f343c614c
+AdditionalInputA.0 = 85b2444cef46740218775311718b3bc4
+AdditionalInputB.0 = 03af762e2412050770648c20535a413e
+Output.0 = 7061cebe3a4628b9ed38b87d5e693c7e7edf3e275a47f302f09dc8e1f04431fe44a386066eef4bce5b21caefd28f572f8cceeefd288514e7691f6507ab2641984763b08a24b4635f58682f4490d8acc6
+Entropy.1 = d732557a454b388415b9a9bcc97ea588
+Nonce.1 = 241255a5fd2c4e19
+AdditionalInputA.1 = 03d8f3bd8d1969b1ff66d2d648f03cfc
+AdditionalInputB.1 = b758cef73f14363647aaadce56c13cbe
+Output.1 = 0e99118cdcf7b2ac91f4f2fe09bf9dc067b3a3c1d7353afd903d7918930b4bbc45101bb9852384388b86c14032e26b9bb5831e303664836c6301119748faed7b6cd55a7f88da95ac65d385d956de4301
+Entropy.2 = f23f9cec6dc5a4460ce9c8ac25726bfe
+Nonce.2 = 160659bfe9c598b3
+AdditionalInputA.2 = a24e4bfb8a46c466bccdc832c98587d3
+AdditionalInputB.2 = 0fdd6412f7131f0f1e5d1d352d788876
+Output.2 = ebe388231f9b7808269810919c6cbabda7daebecf25d23ce931b68a51612a489ec5549783cbc321b302edfd2fc5788f2c334ed6281929bc8206d4f2717b427a3cb2b409c19c9ce3884f6d50086bba7a9
+Entropy.3 = 94188299f1039810c304cf0a549d1e70
+Nonce.3 = c1da4789a61ea63d
+AdditionalInputA.3 = 17a3d30cf18a4c0e8f6211fc27e056b5
+AdditionalInputB.3 = 3f06d3496243b3bc8c776fbcd6285d5e
+Output.3 = f01f922b83266f8b1c96121df16c39d80b55e9e7d5308fb714a6d600b26ebec69c642ba019ec163603b0010e0ee1ab1bb4a30085dde7917c7f07ffb5a844faa6de7939e58f844becb4dc4716e32eeb3f
+Entropy.4 = 89d9ecdd493901d7700b70f4fba5c817
+Nonce.4 = 93116eb0f3df7247
+AdditionalInputA.4 = 7dd119c797812c5085d7092f0167b6d7
+AdditionalInputB.4 = 29d0ea4b1b9301e192586282bbec3f03
+Output.4 = 94c588f3d4aa3f2453f0a9e63a7edf0a94ce46d12127e1e27dc166eedf21150b4cfbaf80407d2ab935374a3acb6e5f75de2e04bddce90ff225b2fcd373f4f6b4d076bdd552eaf3a96fab871fb526a4c4
+Entropy.5 = d020eb4b0478746c5804c68227b60814
+Nonce.5 = 844dd4f7ac813181
+AdditionalInputA.5 = a8d4605e66ce047b44f0a76d919ab5bf
+AdditionalInputB.5 = 06d226f23ac745ab70be56e74bf16b89
+Output.5 = 4ccea9f3451410865736c8f39de05962c0885184b4c71440a1e100d30eba1a925a6ddd1704c386bccb2f0aa1f77e5c0b2e9699a3b53bce23adb3021336a2072fce0e474a10f2cb830bf4dc233296fff0
+Entropy.6 = 87311cd6d41577311776791af27dc2ba
+Nonce.6 = eccaad0013620831
+AdditionalInputA.6 = cdf6407aad1625c62b065aed10ebcc29
+AdditionalInputB.6 = a5141fb50a2e115a2a2686fdfc5b25ed
+Output.6 = e601d837d8cf49023bcacc62f634f21bcb55550c9b8d55f15393c35204f4595ac2e3d260f20e134502bcf302ad47e4d8403688331eb6c521e899fd74692ee898dc8cbf69fa51630908198e09acff2f0d
+Entropy.7 = 04fa2f6a61d05de96dad12574b087146
+Nonce.7 = de7f002889d01f48
+AdditionalInputA.7 = d6597fc82de2ecd3380caca446d7e3d2
+AdditionalInputB.7 = 47e9a32664362d236869a12476572b43
+Output.7 = ff4a17a93948653b824349d62497b8ad72f67c5739a83e2ec0172e3d45fa5abad453107fc6b9c1ba7e4bd4e1ef463515bbccc713401df29b59163b452a6467d0a5fc74cd36b7e49a74d1544705cf4b0d
+Entropy.8 = 88ff89c822ad204be55f50929dabeefd
+Nonce.8 = c571e9d7a8a8137e
+AdditionalInputA.8 = cb80c92547056ffb54dab764078b0929
+AdditionalInputB.8 = b41b013e9df8aa75d473509f12767bd6
+Output.8 = c0164827454fd6a46e2877365cb5b192f1a3b2620d0ac4651921f826c99b7ef1e4559bf7210fdd23c278f13f8796de7c2991336bc1beb66278b93a76927a283eef4096cfb326493f7bee4d61f2906e8c
+Entropy.9 = 7082d4d2d49d5efe4c9e8fc04d3bdb42
+Nonce.9 = 2a091022cfe39827
+AdditionalInputA.9 = 1893242827d291f3ea31cee285881aea
+AdditionalInputB.9 = cea09fb6617b651665969773bc5ae2f7
+Output.9 = 6a7e1e8dca50262bb55902cbaac9ad59d4b48da16cc19b21a2263d997b907dbfc40982037da336ca28cf0a688b954c49bfd7671562a9e96a2aa38d8bf5a0cdb36fdc2fac5a665fc43ae1ce6beedef783
+Entropy.10 = eacbfb8680be1198807a5bf035b477d8
+Nonce.10 = d8618a289b4c1787
+AdditionalInputA.10 = a262ae1dc1dbcc02911966c1566a3ceb
+AdditionalInputB.10 = ed8af1b6720b9ae9b986ce20ea8de984
+Output.10 = 0c89041374d951a0f1dc8b9250e746077e385f667cfee92beba7f5e4bb212d046180359738e1a22c095f89cc978e33d9ffcd5ff496c2a45123c47a092ff4c8528d693a78e0c7bf551bc0bb7bb7b686ef
+Entropy.11 = 8013306edc8c1d6ce26f6ce87956549c
+Nonce.11 = dc4425101b785a46
+AdditionalInputA.11 = b717ce62a16e4d6d7c90c1229b9ba46e
+AdditionalInputB.11 = fca6f456fe7ebe27dcebabde41578f93
+Output.11 = 6635f4cf9b477e962efd6d2fcfc89ca0f99c964fdc179b3df576afdf4699fdbd67d420fe3729f31d91da4c75c42ae95ef0acd64be3e62e9efd3587b546d7c6af9a766698d899abb0afc2bd1526856214
+Entropy.12 = f8e7e522ad80fcd885d96ffbdedd340e
+Nonce.12 = b42c724936e6a73c
+AdditionalInputA.12 = 8d935a10ac6cb721195989cc1c2275f3
+AdditionalInputB.12 = 49c840a81aebd952abd28074f0391bc3
+Output.12 = 5dc34245a9dfe5352e8558c6b5ee8981d944c099cdd7a390287679e55d77a0855ea3977a63471c25a085b84663bcbffc646f723185d22a59cc19ae1f5a0eebcb57244bad8086af5e00c2f64b2d0f9b12
+Entropy.13 = c086baf5e2e28621e14bdcf66455f4f7
+Nonce.13 = 73b45761be4c62d5
+AdditionalInputA.13 = f99b75aabfee784ad4ead7ba30fc3339
+AdditionalInputB.13 = 7f61cc8a39a51e8c13df50933875a117
+Output.13 = 402ccd84d20d1d5feeaa9f0c0a216751d1d1633a986537e557bdfbd0125443c22c9a5acda5373e8c14d2c918c591259fb1bf35145bcb55135fe8ffb3fb21d5bbfa8dc4434fce3b3a676aa57a5f949f0c
+Entropy.14 = f4462d503ad505e0f39fc5faf4243d03
+Nonce.14 = b0a135635aa32174
+AdditionalInputA.14 = b180d77e0ef217268d2d4dc9d4a9532f
+AdditionalInputB.14 = b192957f3e98f7595768d00834eee1d9
+Output.14 = 7d4791ccae7980ad19e5d8eb8932ea8ea1756710349ab8b771558cfe471a278dcc263b737486179a4ffad12d5311d23912c3a46f07152808d288be2dfd2b315fc4f6df6418029be52daed643dd3c6110
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 5e49a74886345e9b117f9614bbe51834
+Nonce.0 = 0f426b79ea3c7495
+PersonalisationString.0 = 67d609de0b54fa9a92f9251d9726948a
+Output.0 = b63513680a45c0dffee048e0b848cf974d5f761e5ee6703ea56eaca8bd301c6c293eb294248bbb1ce4c9b38e91afb76a72497bcd7699f700688f28ccccca4c9be0dddffa0037b8545864b8ac3d783b29
+Entropy.1 = 6b1f7e4651cc692dadd3551f387ec5b2
+Nonce.1 = 98ab6ae4378c2de9
+PersonalisationString.1 = d2265947f751952cbf7b2ec548466cf7
+Output.1 = 24b722f9fcf5b86068898550886505b7b5997f6add8418e9e2d53f79f9f5f2d1ae590119b26f5aa60b4f27450fd0d355819a13f8d3db3385d9487e37f52b65e4cd77efd1c00d4a5a07660681737c685c
+Entropy.2 = 50ea9be56fdba8e1eb1a231e937494f5
+Nonce.2 = e49c8d0e27102d0b
+PersonalisationString.2 = 35e02c00f76e70db54c62d9e59695640
+Output.2 = 887e40a6535a39ecfd43232b0fa1654c10996dc2c68a90e5a5e7f4c064e253ce22bc4a0674b27e58f233bc3268381185702b64c35b9fd946461d4e630322f15c15751cd3be2e11d617cc4c374dd4cfec
+Entropy.3 = 24cb5ab8b0ef45cfd12a47689f547bce
+Nonce.3 = a27c36776e84f9b3
+PersonalisationString.3 = 12067dfc22ca9fd7a417bb7b1ce74bac
+Output.3 = fb1bc7a75bb2c665c4e16d54f6662d3ca8a2c7522e2307a026963bc8c1cb675f3003a515d6692bc778d6d06d730c1f4c2b329d0b1a97d509d810ea04e93f24e9260aa0e3ca458ff203df50b216d5d070
+Entropy.4 = 6024862593338c32104e15cb9b3e7f3c
+Nonce.4 = e69835ef6a4b9b76
+PersonalisationString.4 = 33646094468a6aeb6ffdb0ed51fa816d
+Output.4 = 910b888451135677f489a92e74386d9105c3e3ee0a237cacbfc7593513343f7191b8bf3ac024e8b08339f48d851af412f69d99ca79ec3f77ef515f1c50a3e8c76a68020eb7cae42f0b5c85f2d7867483
+Entropy.5 = 97ff32ce46d7b677ce0ced4328ac7380
+Nonce.5 = 5caaded67b7fc4b1
+PersonalisationString.5 = 52a347f8a748f6cdf00bd35c06cc9938
+Output.5 = 6780be92c063e33829dbe1967e57259e874e1257b68c124d281830ed4bf701d04196e4ca5aeb4b9de3495563e10ef74dbe89700065852081634873159bb07b79a466798bdfd3991c1dd8f44229644246
+Entropy.6 = 10c5b4a8ba0ade3525deabe099cf8a93
+Nonce.6 = 8c5d4bce78945c61
+PersonalisationString.6 = a71e5244ed23212e9a823889dec45311
+Output.6 = c39d0bf6772d31e6cbaed8784055441f26bab0e22e2e20e496182bc06603b0c625b199aa08ecfab23f525b8833e18e519a73edeb4eb95fac1597e950cf775e877ab6d5c4bdb3e68a8ef52ae4940266fd
+Entropy.7 = 6267b5221bb5d4bf9175088b2b614813
+Nonce.7 = 44d4c8b9f43a289f
+PersonalisationString.7 = 3942ee8267758df82064dd072aa4b031
+Output.7 = 67dc72ebbe5e277d382714734b6a76953ecf872b62e1715aed38540f8515e38e98a91ef6691abfd802c3ad419a3051686b503d5bf58e0bc9dc9cacd2a4972d5759eccb96337a4289a0b8af79804d0f95
+Entropy.8 = fe17ad7b3253557a3753e18e2817a6ac
+Nonce.8 = 3cfca92eb552914c
+PersonalisationString.8 = 542c51c478d007182487d5316aaaa728
+Output.8 = 4a7383a685cbeeaebfa9cb93a71b5fbd264aab74444a048d89bdd001e2d6fab33de0a2840a9f43b32ca0469e1b6d769332d1279929aa0f4aa2323689009166afa34c93c5f71f7c68801efa919b2b1831
+Entropy.9 = bb67d6bd268cf10f8ef5cd032a3e0337
+Nonce.9 = 95841be3247b1613
+PersonalisationString.9 = 2470df0fdd1bb5061e77f15fb4501b6d
+Output.9 = 4a569282a106bd2c1a7c7a268c0a9bfbc63234d923b221239bb4359aca36fbc4892da7812b8fe0be8359f766b0fd5068242873c7f3660b6694e73a3c86264d1ece9f3607f7a0b8209045561472c89c39
+Entropy.10 = 10102cac1368c5b822b4a547392d14d4
+Nonce.10 = a9597155cfbe324d
+PersonalisationString.10 = 153b8cb80f01c8f34d4b6e7a3491ae0d
+Output.10 = f2ea8f4897d24880bed508749ca4db5a14c78181020a77038113e96f1ebdcd76d57bcf94f7e88426f204ea591e44d090f269dd1c2daf529f73a5c1fd1c2c718bd3cac431111524ff875217927455a80b
+Entropy.11 = 7cdc836a14679df8bea5fd69e8622aa7
+Nonce.11 = 913462dbb0232f40
+PersonalisationString.11 = e77de726e424ddc68c24684e82909718
+Output.11 = 41adf58187f1fb944653aad1e0bf32c27d19b1843f43298509e09d99b1c4e0d4b2656bde1fb4de43b0037c528b6c433d85bbee310c289d963e38cee2e4b7dc063959286a94e5e433af610fde78666665
+Entropy.12 = 38b2bb6b2c4ffd6d32ed8e44c29152a3
+Nonce.12 = f7e32604ddee8265
+PersonalisationString.12 = 671e0039164d3f4763894ef7e0a6ae9b
+Output.12 = 13c539e208831abecb6144f51cb34c3991be24b85d460ddb869a3cc4096e3a7ba89246b57a4b66678df2329d58c32dd9996fa7611d0faeced9ec361e22dcf8466ff8e7bf44139b6e68b04a8930b2de70
+Entropy.13 = cdc703b17db7b05d14e751ae8a88ac64
+Nonce.13 = a3e4f21b083fbba9
+PersonalisationString.13 = 97acb1789f970d21d417d4754909b431
+Output.13 = 35671517954ea541f6d75a3b38da1e39014fd1a6dbcee4b5bfd723030734dc73387d771b22fda0b2a6d19980d1c7cec6ed69f6006519c1fb5aa8c2033b357a83a738771f3f5518f297f8cb6d1982684b
+Entropy.14 = d5029bcd6cdd778fd24c53edaad4cefd
+Nonce.14 = 84f7310a7ab653e6
+PersonalisationString.14 = 0fb2233c2cea27d17b6dd93bc4621285
+Output.14 = a2f373a523ac9f2524b059d0c23bcaa905e15948c7ebf71b6e82150aef562dae4003c1a8a3748cfd553d9a51a8f9450b9d569d96d897fed50eee23978e49b364c64db63fac9dc0fe9e8b58836aa04a74
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = ecdf8b8636add7acec544cd3ed61449d
+Nonce.0 = fd08166fb3edaa55
+PersonalisationString.0 = c6cfae798639034096d373fb05e7ea66
+AdditionalInputA.0 = 3ced5b730332278cdffe927b09fa8386
+AdditionalInputB.0 = 5f957a87c8945af77daccf356cf1183f
+Output.0 = 2ff3e68a48fdb0a5384287a0cc4e6efb6568309ddd9411838c5fb61cbf916cc881b1cf0461fd7631d313225fa42c70d529b59319767cb50f794f4c790da2e188fc252c16ee0ff72fd35d2392cda0163a
+Entropy.1 = f08fc58f52ea05607dac4fab29c03faa
+Nonce.1 = f81b8500f163bc87
+PersonalisationString.1 = 2019786852dde5df70af52ef4ae45adb
+AdditionalInputA.1 = ff0b7bf79fe5215f8cd77b53425e8a73
+AdditionalInputB.1 = ae98464126b1d6fcb005b9c302653a00
+Output.1 = 3ad0f37b5bb09fae80e7aaca91b92a37c04a177c5ff35593812567193c7615f65db70bf48d4dcb067c80532df8b91db8ceb7f956acc69c499ddfed76ca28e0612936975a3db82877f531a496740b4463
+Entropy.2 = 55a0511c439c7d2bf57f24e72631bac0
+Nonce.2 = a1902df77b611e46
+PersonalisationString.2 = b5ff703e5ee561ade96d6ec9cb852399
+AdditionalInputA.2 = 2c46d91c9174927f3910cc2a6bf7b136
+AdditionalInputB.2 = c342c914786b86985d06f97eca1b09eb
+Output.2 = 995acb5a585073cac82d5397c2dc6f32864a4a55284f57acd0aa008fcdfc533859a34fdca12b5eadf0ebb88692045521a4b003be7d382e9c2df8ef5cd6f7b86c75f6bda74c99c07d2bbf8255eb018953
+Entropy.3 = f0e444a5c5bccd92b7a4447d0b7a8f33
+Nonce.3 = 6ad11519797af228
+PersonalisationString.3 = 31ec61272a7de660fbe54b3d813ab02a
+AdditionalInputA.3 = 84f648d11fdd386dbb9f356d5ff6396d
+AdditionalInputB.3 = 7bac281eecd8ea9fc440520fcfac3d6c
+Output.3 = 21f5863c744843eae2582e2496e8187d2a1283553f4ec2af652af79fcdd46eeb559b82e0b8aa8e1ca482d20d7875473a90417d1a1331f7ec2ae61c7e51369c48833bfc3c42c48acc84c92bb49fcd9c6f
+Entropy.4 = c9bcfae1f6183ef17bd28430ddf76f7b
+Nonce.4 = c4c17b0222afce01
+PersonalisationString.4 = 623a8f3be2ab7af2a27a1731e6d78c29
+AdditionalInputA.4 = b9ca73212f96d6530e276f773cd9ddc4
+AdditionalInputB.4 = 1fa9dbcf819c2000556786452999d3f0
+Output.4 = ef2483673e7fa559e948f68c7ee44010f915d2ab416f62caba7ea7032091ad5ac52164039ad95517202e3451007c39f73b457cbac320cc1f23cdd247301f02163366de26b32932606d346057fe20a917
+Entropy.5 = 581594493c98a498afd58188a8dccce7
+Nonce.5 = ff37dbee91e5833a
+PersonalisationString.5 = 105f07329f1be889302ce0ab97e2359f
+AdditionalInputA.5 = fe21bb1d9100ea6e5c7f86019ce933a6
+AdditionalInputB.5 = a9d96cbd83d7d2252da3db8b58747396
+Output.5 = 008c173739751c8a06e4ddd0dafd5b39feb7942e24a0331b4dbfe598dff251636f49d92017e67badefc308a16f319803a1e4567cb55f92f6bb28d3b7a50f289f6c2a46b548821b6891fab108a3ca3109
+Entropy.6 = 50173e83a2a00f28ab36a062e11279c6
+Nonce.6 = 37a896dc2ce1ea66
+PersonalisationString.6 = 0cef11cf404712fc16d3ceef337082cd
+AdditionalInputA.6 = 6b385190658328bdc12bde2ca1a58669
+AdditionalInputB.6 = 67e68c79b41343075aabc236ad81d13e
+Output.6 = 98d4ac286364d8b0065d85884a92abbec558accd791c1508899f99da1d810833e1de6db45a638996fb0f4b74628fefd7544c5d032fcd459509092543c4986f4b47ee9c3aba4ccca7d146d9407c13301b
+Entropy.7 = 44b537973561a17adf0704ccfd896b8b
+Nonce.7 = 12118c2a2a398be3
+PersonalisationString.7 = 1964328cc10a307a3a841a916ef8a14b
+AdditionalInputA.7 = 814873646eaf96fb3fb8b41fda381c79
+AdditionalInputB.7 = 5b81c9a952f49b753890889c9c41917f
+Output.7 = 58ddf616ac8d74e9e476e2232d2a4f1d20d3c1fe805fc9ddfc86b69189b505797e9c376221e9f4754fd18e45c27a291747513b6867565048d47ac9180ee4aa0695a2309bde567578d4c28cc2fd2a1db8
+Entropy.8 = f43834731514c5f2c376092325d2775a
+Nonce.8 = dec7fa004bf80241
+PersonalisationString.8 = 79c27089f8b37eea234ae0520a9132bc
+AdditionalInputA.8 = 5b6ee749feba913358c399f1f8892f75
+AdditionalInputB.8 = 03c9f312da912ac95336867614978cb1
+Output.8 = 4d02077441e5d123e279ea243aa8b38dea676280d30400dac7eaaebd0affd2b7380046e8db3b0ce68f5f2ab4f90cf3b476039e4063911e3e2e7046ee64175d919d729edacffe30cae6237948546ae4a8
+Entropy.9 = 024254d5e87006bf6950699b2d4890a8
+Nonce.9 = 06bd45e54f2b997f
+PersonalisationString.9 = 05d97e092abf630c1caee2efd85cf0c5
+AdditionalInputA.9 = d16a5458f1adaf690b45c828904c2b6a
+AdditionalInputB.9 = ce4976405ef50a48b89b6f43985220f0
+Output.9 = 4eacd1c4c49b44e6116e027fe47eebb840f1602782449b57b111ed937c763f7a782ae1350140614df4ac6c53e9aca11897220d4c297df616c4825dc58f157866d0caf6e56886e5707f69d0e9000f1091
+Entropy.10 = 8c5454259ca8aef362e8efa35c9f3b11
+Nonce.10 = 728a4ee0d2128440
+PersonalisationString.10 = 2667a9d636da6351e40948668673f4c1
+AdditionalInputA.10 = 203012453323970b3b91444d6c7102ca
+AdditionalInputB.10 = 4efadb9ae54fbba80cf2efb590d810ab
+Output.10 = 6f2df271c1c1949e9fe6b7ecab9efe02ee816fa3b09e93bdbf7ff4a8a19b98f4bf91c5aa483ccadd69347c5c582ca7e24b533d0bc40df5b831b9ef0b211317c6574f7943e713ba262649e7561e6c6386
+Entropy.11 = 4010ede8d2e7d59cf74716df74616054
+Nonce.11 = ac406a56911da77e
+PersonalisationString.11 = 0af27561cce5f5f1550b7075a6342ead
+AdditionalInputA.11 = 145981d2453db5b43ab3624865099307
+AdditionalInputB.11 = f9fb41d07ef241b1aaad338698413116
+Output.11 = 22689fc95dc99c3204c9c78470c6db6817ce7e0f868ba59f787fa6d599d592e1b171bea843802931902c537ecd2df73c3dfd0e73435d702284a8da1e82d15c79c06d421c99bc2e309f237249dad8065a
+Entropy.12 = 0bfd37c2065b641164f4336580653ab1
+Nonce.12 = 9450667d44ecf118
+PersonalisationString.12 = 94ed9615c421287d3ea4df7fa35b53f7
+AdditionalInputA.12 = d7a3b4ade238820a17ac17dd0605b85c
+AdditionalInputB.12 = 92b78f69065b1378c6995d5108361c21
+Output.12 = e78e815006a80ad1ff8b30fa0da3fba6a44c1dacf37ccec85f930379882589a327b041bb794238356b791492f2ccf13c3d266984dcfd49bb1957bf3fd247aae6815094115ad195056289f1e6d1566bf9
+Entropy.13 = 086a5ed9fb52ec937c8d811a6d628ed6
+Nonce.13 = da42ea961c3122f4
+PersonalisationString.13 = 24068772d8c4e0448dd4709cd65125dc
+AdditionalInputA.13 = 5da50f9d3b7bd02faf4a6dfc909f36ab
+AdditionalInputB.13 = 7fb0214a9b6646c07283091d41cbd730
+Output.13 = 47b6bcf1cc3e206096cff1d4def748aaa803c0910602dba2bdd19afaf1d2a9c49e9e464fb36864d67802caaa470685bcecc229bb0402b99122005cdf28acdab4bdef9e1d23f97d6da6c88ddecf037c70
+Entropy.14 = 3f87d9e1951d8d9df7733a6cf1b3471a
+Nonce.14 = 5dfe594ad6c10325
+PersonalisationString.14 = 673abaf005b0ca394f8de8d040aa4728
+AdditionalInputA.14 = c9a1481cd25c537ba57750d594afd25f
+AdditionalInputB.14 = 51e29804f9d079f3074ec398320b2a70
+Output.14 = cb3cd4510de88f8081d8989c2679f76387b7d2cda286b75d659a3ab7c3b2ac77ea00366e7531c1c9f4f8e60c845c5d2a5e05fc999621d011deac3f28cb447a37c2ee815f7f5be3a571d153475d6497a3
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a76e77a969ab92645181f0157802523746c34bf321867641
+Nonce.0 = 051ed6ba39368033adc93d4e
+Output.0 = 8925987db5566e60520f09bdddab488292bed92cd385e5b6fc223e1919640b4e34e34575033e56c0a8f608be21d3d221c67d39abec98d81312f3a2653d55ffbf44c337c82bed314c211be23ec394399ba351c4687dce649e7c2a1ba7b0b5dab125671b1bcf9008da65cad612d95ddc92
+Entropy.1 = 65cdaa5ab147d0c79fdd02b24fc94d0e427f59ef9a31f447
+Nonce.1 = 458c6befe0c2cde5a58c6b7d
+Output.1 = 0d164682b5bb552a53a2a942373639d98576450ca632faebc15060691a4219467c5aa106034cd19a214a0a4f31d402e68c4c565f49b33b680d522ef25f541e8202be779730376fdcf5b7b58fd6ac959204a88f91008651d2c02ada82505f914d4d9b9aea7967784e5320e185e1248270
+Entropy.2 = 650996f1477112af7604386be5ace78232904315d99d87d7
+Nonce.2 = 2a06709d331a6f930b447cf5
+Output.2 = d3341d7767cfd95640a107b3abaed7b4e1855b348e3ae5bcc53a0b0d49d4b4976837ec8f376f38327135578eca7ee583215bd5c79ebf499816f79afcc402ff1e9ffc4ad0f896761c9cff75050bf84baa194c355763b16b5d2648d480a2b48f22662685de39c7cee90aa0b6edf8062e42
+Entropy.3 = 898640ce467201a53e7731bdfb572977f7eb3e49050bc1e3
+Nonce.3 = 67ca74bf0a27376d339d09f4
+Output.3 = 4f5eea927023b4abab5d4d9944e84ca001ee081cbc21d4080e1534ee6d1d8a6f60361029ffa983bcc79b5d65d4aaaaaf98983de13ddde39a739f9d95878fb31f57f96184e5f2f3adf654a468c616237fcbc6b2c194e247178cb90294f631c449a01f1fe09c02587c460305be9fc71b5a
+Entropy.4 = fe405dd73956bf6ec875515eebd8c5ecd60553643da75091
+Nonce.4 = 4c83dfc93611d57390af7324
+Output.4 = d8ae0eb81913a190c439f8ffa56c06155a73f84b20608b2b2e9eab3061202cebad18ab8b3eba81672152c1c02ef573cd6e8623c392facb6a857425c6795cd7999c1e7f56f3fa9accca018076e0bfc106d075df98f5fb66f28933215e9276777dfc479e71a8d506a66197918d9b0f7a8f
+Entropy.5 = b06892f6f455afddc8eb60aae35b35a64f63b2aa85a2dae4
+Nonce.5 = ef489266f7bc354f72d68b71
+Output.5 = fc10c03fc37d3bd5fba6591a97f6354a9ed8ba2b6806744432851f43a3ce6418e39ccb417b8539e349acea588e2abe5da06147c9825c6e50a31f8589a57ca3bfb10f0da9c8e89fe2e372b5af1cf96e0fbeec5d99228770c41a76e587da7d8764d5f235f5d1d6188d84ae61c52c2164fb
+Entropy.6 = 9174e174e9e031f62b2e19ae5c0bef22eed7d5598e6e7350
+Nonce.6 = 4759a2c15b05c2473a721d26
+Output.6 = 1962f2d473b31a2576dbd78022f4eeb974641fa2e9cb582f03ab741929f51f0f4663129e68ddc242e1c2ceafacec3dccb97e09527aff46b948f0abcea1451699dc3ae4d3fb5e04c84337e17b504af2fb5f1aa6ec0033ddf138a188ee162c497526563a67da8015275d89f0e1e902b2ef
+Entropy.7 = eb1d45ba0d8951b7b1d7ce922b7d1f6e94da8b821940126c
+Nonce.7 = 9da5b0b4382425930743a051
+Output.7 = 306b1f733e6f69b6f26b7baa5441af4967a5cad8faad18029440aa989aef6024dbf3ba02dfc2c694dad6496ff760d72ae6914a4dcd5e3a443f4bcb14bf2b64986f35c32449f15e3084d46fadfa2ae213da6b26f787cef89b6a23084a929608a9f6acd8315808c29f8ae435a40202a012
+Entropy.8 = 78cdc1567caf2ff529ef8e3475c0fbb09a48b687a544f739
+Nonce.8 = 9f503948621f29686fb15216
+Output.8 = 2367067d8ec189b0819eda34602768a0698b4b545c7d5214fad58c9787b89809b97f3af5f9349907d2954f8c0dccbdbe63cc019bde3a6fae10497ae57f33e91ed55b6fc4a83fe8a2463552796d5120da8066f7285a8388958817b1218e006d7fc617f453ad0f9217966a0731ba99f093
+Entropy.9 = 25f9ee24ee25ad3d29a974f8f552b178cb292b847a6be806
+Nonce.9 = 94213a6c0b33e25e29fd3ecc
+Output.9 = 32fe251a619d164c217365b12a313a942b6a9c3df007751a5fa9f356412d1142c785c292e3dc9d0b1d77e080892e5d39b91c58fd142458c71182061920a0721db453a32fe7ffc8b2c20bf11894fa37d8f0e9463edd43a97f65362295119be03d5e06f617fdff6accaab8c4da72ac8f81
+Entropy.10 = 0b644221788c266aae00a3b63a87f32ca96a6c32b116cd37
+Nonce.10 = caa4f75ff5d7e56be3b4e20f
+Output.10 = dc9245da77502cadd1a8ac4d1cf6a199c8e529deda10c87ab6c69ceea6fdef36d45f4d036021b93fe5b342c52fe1e71d81e617bebc58804af3109bab93dbb2e5c546e108bd0891710128b5e8e4a4f01df2003d038fec8cef426fad7f72dd5e091b4850e9bf4932d60deacb6e9ea3c5e6
+Entropy.11 = a6677badff70966a3cd2febaad7de7aa5849ba763789b20d
+Nonce.11 = 0a39b6c569261b826cdb15e8
+Output.11 = e04838c970f5d7208a2a7310da893d65391666a5dc62d9ede71fc30816cfc3e8064ac59cc9aaf30283356078c812676ca20beb044a6d78db6c5ef9718a88559607f225002452c01459944433013cfffea84d6fe404fbbbc2d66bb50a2fa01d8a5d6e4ea9b402dc5256752461bf6fcb7f
+Entropy.12 = 2301d8c053312db04882f4284cf8b47966c1c9b8c49de847
+Nonce.12 = d0c11f14c5f70ce19346562b
+Output.12 = b46246526b28f3ad7f6d8732ca3bfc40f005d97a519640a4ce728486d8bf830d661be5a97b11113e89096d9bf15cbef73ec28ac13e3fbeadc9bca500918bbe92ea23e131cc622dbffe2272db16ec5d4ca30e9bd986d1709ae22d10180514bcd11bd6218ea1fbaba101444945a17a4c4b
+Entropy.13 = 78644ea1b0c4c55c4addeb476fc34471ea2c4393697aa4f1
+Nonce.13 = 70726010c443b8e1c4a6b3ea
+Output.13 = ef1b41bd03ee8460d55759db65a4c97758f48e3a09127be04c7ed08bbee5fa5cf119929df42c187e2a347a8df99c502b693a7ae41946f4918d84686880ae29d6d8fbbc4fccc9e295876a249cfa59effd331994e84717b4c76637df36beb960761880daab3d43376341439af2ce8e33cc
+Entropy.14 = 71acb71235e88e3aa6d8bbf27ccef8ef28043ebe8663f7bc
+Nonce.14 = f49cb642b3d915cf03b90e65
+Output.14 = 144aeb56a11cb648b5ec7d40c2816e368426690db55b559f5633f856b79efe5f784944144756825b8fd7bf98beb758efe2ac1f650d54fc436a4bcd7dfaf3a66c192a7629eea8a357eef24b117a6e7d578797980eaefcf9a961452c4c1315119ca960ad08764fe76e2462ae1a191baeca
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = c5c89c26ac4ca8b1106ba90a8ef4d6d687dfd88743caa5fb
+Nonce.0 = afa4745d9c1f8371120b10c8
+AdditionalInputA.0 = d3483ae5f9ed97efd3f852e4a6f20f25c947a03f39a4b75c
+AdditionalInputB.0 = 2cd523c5958cdf403caa61abe5c4739cdb9d40152f0e769a
+Output.0 = 1fef4e6abc2778d1c3e3ce00fdb5eae1ebebdd5cff0a7087644c8565d1e8b876b2c05264ca81498468851fc7b9e5a2163a06f377d2ed754c095adc59dc015a77edd69e4eecbe48d9dc127eedfff5cc73ae38127ae3a518fe7fa5abd1a9c53eeaf144420873341e2efa3d81493c69b04e
+Entropy.1 = 6860e44bf582db9818ffbe4c699d4218965c29f463d7a02f
+Nonce.1 = e1f36c8442b0a5d103def7a2
+AdditionalInputA.1 = e9f598357109e2a532dc980388b8a5991256166d67c3bc01
+AdditionalInputB.1 = 58ebbf7402be041724701e5c0132abe604c11a62a9de1d2f
+Output.1 = 52fad34b27113c146595a6740f505bc2d3edf6618975cb9c4a5155788eaf08b96d232610d9b4ee06264fd92f319df5a52b8f9e31b016a6c21d27d31d9d42bbb7588a7142f26ece3ddf211c8cf4530947adee302aa71c0d7fe9060c1b25f1c1f2e053598a7fb72c4db55fb1b02352d60a
+Entropy.2 = 27b9f78ae07821f2b5625c8fc3a03ceec4fc8062be860c2d
+Nonce.2 = b20403dd88a8751dcad56158
+AdditionalInputA.2 = 1b6c848fce706abd73612dd3fd421c1c7ce9f4c2d0ecc670
+AdditionalInputB.2 = 14a43645c1b6ae394f795af6ca2e9084e7e707f3f2cedd7a
+Output.2 = 33c592017af545b3a9cf3419ce1c604e9c7c687ebf6418fbef47ec96e61f1951068eec9b60005d24574313f04ffc16c30872ec83e41e248e3d5c6951930d6a88b8931d5502d1142ce50676b3adf48453d1a008189658db8511d19a06ac97b4d5cfac19b54e8e6b899d501715f401ef85
+Entropy.3 = 8d7cf5c2e360ef755c1e9f5b7a44a1e29f09cee7ca44e159
+Nonce.3 = 25ffe9a47b2d55fd7750b356
+AdditionalInputA.3 = 0e691c9a435939c615f0686eae88e090ba5c4b3f5e6e00c0
+AdditionalInputB.3 = 1e3a452295617e5a9e6f78256d2781feeb3812753b4aad9a
+Output.3 = a307569d8adf3f7e6ee4567a5b2bd338badb9234e7b27c92429ffa75e4c56c0529fdc6c15df5d47c46e3d2eeadcf1b9e93a5dd6cde99a82f04b0d97f7a3bfd05c0e1d8370987222310ab18c980ce48b2679361c3d9011dd355a9b06337c054ee37913d5f4dd30d1fc942cd733a0fa5f8
+Entropy.4 = 1a0d2c734918c539c1b306a464eb6b54f92e958e8636032a
+Nonce.4 = ec23ba8ae817bec48384461f
+AdditionalInputA.4 = b8ad9e613a891fd0db89571fddda77827382e406cd3cdf7e
+AdditionalInputB.4 = 1e172a708aa4ffa3618ff0d7b1f9ba341f4811507851dfb4
+Output.4 = 674df1f3095d6c87bc54dd9b2aaa2c786bd50e4ddc02493745d820dad8552131fb3e389e99b0709478b65d4268f2a3b468a8447dc572a6ee024be6be9be9d428c12cc92894d15dd1c959d6222dc9ec30478c7a0b57f5bd8bd53868b98d7674738b54cf74100ae215693babb6db3b3890
+Entropy.5 = 95a30a0ca779a4038ea920cccfa4cdd814ca17d560d53a75
+Nonce.5 = cf170f4712994f9bcb2efb74
+AdditionalInputA.5 = 1da6c8726bbfa3c8bee6dcff6f76f2d55d60527c4f0db26b
+AdditionalInputB.5 = 595ebd903a596a1f12175080185bd94c2336eb8dd29a387d
+Output.5 = 317c19cf4a45b8cf3f645da084ada54d1b1f81379152424fddad22a6dc9bd22841e0c4c5a36bfb7879eafbd1a939121905a938ae034c7fc01afb56607e35f895f46f13e91ce4e8e75b6a87a1e5544e18eb194fd6754b06885ac05e332a05ed436e889965e405e0f2069b04b40ea0f635
+Entropy.6 = 8af8930562510231a592a72587fa6ad7c234e13304696590
+Nonce.6 = 7642fbc785c0b86cba844f0f
+AdditionalInputA.6 = 9ee7b221064966582dc836437b82386f5204a302a4179079
+AdditionalInputB.6 = 473d917f5b66f0f6e3fb4670ba08c2cbd2ea765b46b10838
+Output.6 = 5c2fc9cc7148dbe40a692b3636778eb80188949d198bba3e8355386b78b54bfb963f5f2d9202988da20ccbf336a7c737a66c90149b9e8e306477151c4d912f7c61e872de0d0e47701cbe765864de536d599946b8bd65e4d89d4e61deb53de9974fbbe634501800feea100fea573e2e50
+Entropy.7 = 2b9554ecf94c7d647a4e117f43326cab54466eba56a09a52
+Nonce.7 = 741b2445057c491935c067d2
+AdditionalInputA.7 = 0144be6978dba85aa645d793c1881dc2deb1bd210811ec9e
+AdditionalInputB.7 = 1cd265f3812568274b643954c70923a76dfcc9f123360111
+Output.7 = f7459b0c23966dc1a53e0c6406c9e78ebe728e3484224cd88b6b2ea554522e75eb4a1c8a3fdc66561426464f50b8d0ff95b266677d91776b344a820eb4fd7d554678300558011a7cd85d22e92dc8ec2c2fa15c6330ba157c3e71728304447c1ad4d64f3da4fbf26d92e1e7c58a1b289c
+Entropy.8 = 335ede8603fcde78ea9869da2dbcab4a6e72f1b53439f308
+Nonce.8 = 5d06b856e627411a9ce1c297
+AdditionalInputA.8 = ededc73fe268935c10832c463549f8204a29cf0fe00a4d87
+AdditionalInputB.8 = ef1b8a80dd49d2c263999ddc0d5a1d9205c1b1c66239fd80
+Output.8 = 05bfe97c398b1e33ee1c547c0edb5b654b7060b76604195440d06dd2f614a398c6c43f1803893c4c8888bedecdf998367cf992301a25f24c263f5d36bbfc6fe8b839cad293b3617c1d2c60a814bda0359e3f717fa80fc7324af8827d438c88642754b39b10d18cf5bf42f11177a0bc6b
+Entropy.9 = 9b0275d861117553ecd3c4d7cfe762f88df22c4c4190dac8
+Nonce.9 = e0be5872818e2dd765261d58
+AdditionalInputA.9 = cfc0b07082d514425b17ce3cb334ec62bc1b3be0be58ca4b
+AdditionalInputB.9 = d3c70ab5ff7a364a9e6dc75132ac67e0d373fa2df301afb5
+Output.9 = 09fb41bcceb016e754795e1cce582f0cae91d7bb50245975eb75274819e1e4dcdfbc5e2f13fd26b9a9f9e945cd807ffec4e275681ea7bd33eae13efd8a01edbe02562e77b44b6312f416c3dd0be64f2bae0ba4b9bb36fc3a44841d21d8b3571c0ef644d88cf3cc3c851b256a15f4d716
+Entropy.10 = 1981c3f9ca58fd10e8377a8d0eb3cf02102aab6f7a033af3
+Nonce.10 = 135533d9fd850e29ecb8dc9b
+AdditionalInputA.10 = f9978ba41df22894ad5f3849c1bdf21f7bbc0128c782e79b
+AdditionalInputB.10 = b4d57de5e18d393273ee9f3ef9736599c6d639f437239219
+Output.10 = fee23db2fcc71624fb39f573e33a1490efc7230c27e9278188251634f9c045bcb26e79ece6a173491475ae44a957c4269570f5469234ca8b6873cc973c8d97178c58cec658a352bad0d4c6001cae5664258db59ad76eb6304d166267eafb46f4dd536a914fa6d1ac58317e7c557d4653
+Entropy.11 = c10d4e521350f7cd1853576d03c4bece3e58c8c740859e4e
+Nonce.11 = 16979499ec1365fc073736a3
+AdditionalInputA.11 = 78b245520153baacc66846e7a83a2a925f892d4c2ee63c0f
+AdditionalInputB.11 = c8ca7a33de5991d44d7ef7da2d3368cc2cdb93895c394d41
+Output.11 = f92c15f5833800b28dba2d134d4dcfc41abf72f5a700469551e8ccb83bdb0772d14d6b26ba6978169e3ddbe5f214d57930dfcad719bf10d306749246d2624bedd4a18d327b8ae6bee67cf0bfb5f649824bbd0440f042146b95a83e5845ced69a55ba055d5dfc7183c3bb28d61312d274
+Entropy.12 = 7608b5617785995a1f7144ee5229e4f9c138e418bcc3b5e0
+Nonce.12 = 61a422e8cf875f58650e996d
+AdditionalInputA.12 = 961c2d33039e60a2871e1f5b82097f6b1cb03836dba5f440
+AdditionalInputB.12 = b18cb52d3858ac5bf59f216a28c0ad49f3dc88c67b5870e0
+Output.12 = 4b0313ae873ce5ebf08aec160416492e4c4c797a5017061ea42aefa0685ab19b74a7af11f019b9fb63072b797f7ea3354efd32c4abd1e866405a319ed2fa13fc81019d61326e70e503141b9c77b4879a45e9f36f101dbfff4359147282ef814888fee81640def25f551cee41d12609aa
+Entropy.13 = fef7a43fea2ff1a0f624086985e535778d7a73dbc47bc23e
+Nonce.13 = 9da92edd5d2f273cdbbc0251
+AdditionalInputA.13 = 836731a57497a69e31f8db4f729774ad65f31d968dbc55a8
+AdditionalInputB.13 = bcca96d808ba98bb50e90afe58fc88e95dc14c3e90c56004
+Output.13 = 4f2c64ecd146689064fbf4fcffce2a2ab3910e72ec4faec277f7b9e9ed510381312b01f21650e175ebe9c45c11e977276f13be015243a0cd16a191abbac6462ba96e4e4a1120b28083da933419e8c8f03099906eb1ee012ae291104c6530f51b5e32e6631cab8ef5aad68c0045255ba9
+Entropy.14 = 00197c70b2f0d3e98e4b387ec42a65c4106a1689ab5de611
+Nonce.14 = 01ee76f4b5e530e7efeaf964
+AdditionalInputA.14 = 03015311cddd0961ec7a74cb84d835c058a69b964f18a1c1
+AdditionalInputB.14 = 5e0d99e0e7c57769a43ea771c467fb5e2df6d06dae035fd6
+Output.14 = 72e8ca7666e440ac6a84ab6f7be7e00a536d77315b119b49e5544bf3ead564bd06740f09f6e20564542e0d597ac15a43b5fb5a0239a3362bc3a9efe1ce358ddd9d4f30b72e12ed9d78340c66b194beb4b12e973213931b9cfd0ccbdf540d2c36ce074e2beac7a4ddac59e06e4c7178d3
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = f6e68bb0585c84d7b9f17579ad9b9a8aa2666abf4e8b44a3
+Nonce.0 = a43311d57842ef096b66fa5e
+PersonalisationString.0 = 2f507e12d68a880fa70d6e5e54391538173297814e06d7fd
+Output.0 = 10c2f93ca99a8e8ecf225400c804a7b368d93cee3bfa6f445920a6a912d268d691f1788baf013fb168501ca156b571ba047d8d029dc1c1ee07fca50af699c5bc2f790acf278041518141e7dc9164c3e571b265fb8954261d92dbf20ae02fc2b780c018b6b54b4320f2b89d343307fbb2
+Entropy.1 = 85c2a5ca453e477b5ced164a6cdfc7dff9c2fc349dbba685
+Nonce.1 = e4a5e79066e121b8e7bd5a8f
+PersonalisationString.1 = 68e0dfc8145a32d83cd41d76fc19901d0cdc7543755586a7
+Output.1 = fbd2ff764ba0214371e8e0604584368ab0e5e7887ea456965b62986f41d7cd2a969035b5d282bd59ee013b730c01ba419f5e553407041106df164187febe1e42e128a298a572f812f5cd5c67c3095b31a2b86c0f64c7b04823ca4ddd5e775e5bc1132de636d4f5ebbf319ff81a815fe5
+Entropy.2 = e7f28c80e8259b43f19ca54a01704a35f8498ef4f2634289
+Nonce.2 = 33ef9a168c0131db69e95108
+PersonalisationString.2 = 60593dbc4e031268eb06bcebe83b9c04b8c5fca69e787eab
+Output.2 = dde91517435ec8a37bb5bdf117ecebb41ad013830c04977c93ab0bb58ed069480fd75ec3957395f0d6f3ec4f524a24f66940ca3b43d7e91272803a56cfcae22b2a345765573f861d14840cc35f1e6b911a4b831caeaa4a9bba798c82a803dee10de853e6532463b359d07f8cc8ae2770
+Entropy.3 = 1593a81d8c7c2fd04930b7549e1ce0b0aad740d686e7b972
+Nonce.3 = 304144f81754fb0a9924b5c6
+PersonalisationString.3 = 07b6ad022234b1c7647724df1646fd0f037fc60be15fc24e
+Output.3 = ea8071c8d8e32db997cab20ecf42ce4ea102cea5979a2569f6d60ea8b0cb1e252be78f6c78007e4a0e42ee7c8f91e12e1e394b8bf94de08b8fe6dd77ee8e7bf932c8d7c91a879d34c635c8b4ccd3b564bdb01bbd79f9648a0de72e732ac33fa04a6b283b4cab36780906bdcd208c8ea9
+Entropy.4 = 33b9aec94a326b9de5f111418d2a30900d2a9d1ca60ca10c
+Nonce.4 = ee3213ee1270075b54dda450
+PersonalisationString.4 = cb55e3ed03539bfe2b60f06a5d9b8a0dfc252632d94f0498
+Output.4 = 910dec9bef9cd59c4eaab2e8a4e1f3ff796c230836de21dee4d7fcacb733c516149ae07b6908998139a454eac06899910fe80369cfaa397b6283d9a1e1dacda11dd6dbd819bf9937f1d675b1921583fd37438becaeb66801576e462f4cc14458d54801b63e3e07e1d454a321909e8e79
+Entropy.5 = ccea05506f38f222efeb575b55b1427f24462ce893503b85
+Nonce.5 = 8f259640b14a0740b4261701
+PersonalisationString.5 = c1b85c8c907abc597fd0193deaa93d0d128e6dadf1547392
+Output.5 = 7b75c82104d086490eec75aea3a548e2f09e72e87262842f976373ca3643d028bd0d39711e783605d65a0a75a126efb67ddc18a57c704c16c6193b168fd89c99a5653b033da90730920454d5549e2e5bd76c0cd8822f101a50996e91fe9d3efee8d7daaed50634936ef9d5825a4d08ca
+Entropy.6 = 10aca922f6daf58bfe2aaa25ccc266cce780d9316fc514e3
+Nonce.6 = abfd6e8fb7db495635aa12be
+PersonalisationString.6 = b64e51f0f2b0a2e36a68f0235621e9b1f44ad46003c911fb
+Output.6 = a2c002c29f2aaf575d16a0892a0c05b1065af44104876d571cdf7b1193dba7c810d216d4f1be1444a56f2137e08dca99e765df4df9c5997735b60845627d290f24110c260a0b3d26d813acbf196438dca33e8af84223e6e37b562b368ee0e88482619e534269b71972a88bc74aca7a04
+Entropy.7 = 43acd2920393eafeecf55f8b9fdb2ca607e677bd7a5966cf
+Nonce.7 = 02d25c09c3f44fddba39e18c
+PersonalisationString.7 = f3aa9e7883ac3a29c8b0b585340ac7e94223fa549c3e3257
+Output.7 = 69f44057771a92b0019f7f6e5d94d226d9cb144f084b5d3304e9cfe5c98cebe2655f0765cfce9d1cb00e3dc29c7f25731d9da33e9537fd58a8f310446d03fe2ebaf2db71a6fc96dd30276afd5b6627c3912e9b82dfaab899c83785bcbab0a24c6534991ef0dff4d076cd03b17c83c05f
+Entropy.8 = 4ed7fcc29708b42d67d68c63ac8b25a90ca779dbf0c7a68c
+Nonce.8 = ee8e62054d236ca19b20eb25
+PersonalisationString.8 = 271c11420f431cf629c82b6fbe67a7746c73ede5447611e1
+Output.8 = c4801020b3568c78db7a56eaa21d8c0af43cca2aa576d04e7d91073e5ec4fb26bc915101fd2e88727af43d9217ed2aaa84a400cadb94ace9d80989b9cd323e5923abe46dbbc37e59be9c88079c0bd79c950638a212f78a2b15e0e60b746628ac9454375de26cf5f4f6dd5f13ef2b0d4b
+Entropy.9 = fe355ae98956ecdc547fd874c44d10f6446640abe51b7f7d
+Nonce.9 = fd94dbbb09eb0174b9803b86
+PersonalisationString.9 = 4ed22949f8454d2de680aca77317bfd60e7b4cabcc6d7a1a
+Output.9 = 50a093814d2708355174ac293ff6bb3ff49db74178b0cd9e8b96185fed816f174a86a8fddfe7a9430876783c652f8d9bd1fdb39b6150a25a4e5752002784d09f40982acf67fc27e98503138f9bdd76740c8111198d6279138f04bd8de187113f5b72bc09164b8cdecca60bc002d73324
+Entropy.10 = 2f51374b44ec63290afb879b82b9601903213ddf84856eb9
+Nonce.10 = b58be25c11bb61f4beda20c2
+PersonalisationString.10 = 29e20d31c37eae481532c04bfb635fc370702c37bce02749
+Output.10 = 8d962a05b45b9640eb8c3fec53c42356576f226f1105a99f440377cfdd393d9ad603c5882311a8f4433dde920580418b6de917b1def9ef0340d5495ff1df4cef4d32193d0f39f65f79790ebbe122f63531354c0e765cbac7ce5e185e73bdcd43a2dae95adb5ac10b34bcee909ae504d4
+Entropy.11 = e9ce04369bb6aa98e676ecc7adbb291f1d88062b0632a977
+Nonce.11 = 40590644da6089f1ddd0900f
+PersonalisationString.11 = 47eb87b07bc34ad3094a8ac55bd2f5543f6d83d864924dfa
+Output.11 = d9865e8edc0d19dc4c68305c85795fdda2e78342b29673dc4341f901569509d9fc9f9579feadb5576cb050e18cb617845049004007186f8d5e6e9f19655e15fd218f5c346055ea668e94736b1fb4a1f759dbeb4817a1c1cde4a6606edb929ed57179284da743f08836369743babf4d16
+Entropy.12 = b3b7f12ec69d825d366a473be79d49d52e33e1e578c85db5
+Nonce.12 = e9ac6bedb660c46667d70ebe
+PersonalisationString.12 = 60b409a04c48179b4da05696ee5351b501f26a74337bba4b
+Output.12 = 09fbe28bdd81a2f4c4fe2d44eb31f3b654fc0439333b12d7b6a839e9c0047dffb35f5e04fdeb9364cf11b6b435145e8435086641efd43082b3525252197dc4cf6b1cee744bef9171ea67e42d5f4c4551aae4da8e062b25ea0724355c72ae090b43e4613311530938528d015a449d26fa
+Entropy.13 = 616e5b7bab53e0f03a7e74d334767a927ce4bc0075525dd6
+Nonce.13 = 19a473a020da1c915dcd3b09
+PersonalisationString.13 = 059253c54f664cd68682db12ea6ea2bbf57b5ffa76b0a11e
+Output.13 = b0e456d5fddb763ca46103a4c63f3dfd9b0362293c57b1bbac9a4cecf0717d8a14a9c23a4d8907a2eb4dfe3d1355018dbed5e4ed7675db5db007d233a2f78287ec75210f708f8a169b6bd6825050122a21fd3d4274587fbf28be83993f66f143372c1d5eb1df9c63247b21f0886933ca
+Entropy.14 = 5560084df2bb17f0c54b951d826f5027169503c6175be517
+Nonce.14 = e8c5220ae48b0ca1412e9c74
+PersonalisationString.14 = a0a1d6d3887f7ff9f13c85d6ae5af2c840fd85989b7e50b3
+Output.14 = 14f629aee43f71b61d467ccc37de8eb6110ccdc65fff57ddd2e66707bb768e5de5df5467ccd55002815d306adc7b7d6b5d87c20d2922bf5fd3790282608457b69720be7d7affcdfecd173a741c7fc99f5f30f981b1bc102977a61f1515b923ba53cd87a37faaac12e0af613ba0972a0c
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = e4547261c9dda6bafe9fddf435a80ebc96354c7c2c8847c5
+Nonce.0 = d26c6e73a967bfc4ebaf8613
+PersonalisationString.0 = 42849dc8eec611eaa49252067fa60d7d7267d711dc35b576
+AdditionalInputA.0 = 815f50fc233f157f96ad0627c355bce407b269dca91af661
+AdditionalInputB.0 = 775a1c9da6f58d4eb95b27935ecc01dde31ff17ce2e4e65d
+Output.0 = 25adb777523a80a6dbb6ac1fd08e02bfc4b4686cec5efe3ae9aa2d4469eae8c9c3693fdc8e0fc107720b7789ef7331e23fe3799412ec86857ffbba515a5af4d91013b2f17669421c822005b4747942790a11a24c4974f27d54de69727b0ed507b6a48a9d6c53f93e2f3d33df73dd643f
+Entropy.1 = 06d677001d9b3c97fda4d09778aee3de131b4123696b109f
+Nonce.1 = 81bb6b0d7fbcab3c5842bb83
+PersonalisationString.1 = f99638d2d4365b662cd83ab4e6a7bbb624e6c72b7b38e81b
+AdditionalInputA.1 = 20b7d56f6222bafeeeee59dbca1933d8086218891f3a9bfe
+AdditionalInputB.1 = 9de4f2847fe239cb1a3df4b8ff64c25d7b0870f3c9ebe3a3
+Output.1 = e18ff19837ce21e68944659321311b8584dd515ed8a6a1f2b0ac06e69009c3d0cf0489af876201efad962cfd1ba54f540b94131d788d3fea797c4bc079593bc7932baa70abb145a355741a98c584f0fa3298b8310b01e1a6debf5359d7d02b1a6c663100acb56975450bec20e91b736b
+Entropy.2 = abd38c0465cdfe018f36ffbb7a0ee51d67675ab4f0f1d1e9
+Nonce.2 = 3418bb4cdf6499a371af4d3a
+PersonalisationString.2 = 9a07d5571d841e3c1a9eb3fb48cde3b3e080e1c2e0db6a6d
+AdditionalInputA.2 = a392f79022aebbec0c82b981293627d139dfb5232eb490b4
+AdditionalInputB.2 = f5ce1f6b1e6715c49bea42ff439fdecd9b3b7f2e578133cc
+Output.2 = 885c54ad25992fc38260498d6f4d8c73d6159af5f7efef06174da03afcd8384cb28690fd9ded1d26e2dff74aee4dd0c47a0d99c6fc1ec8d8faccbdcf6fdb12a528564ad0d8131bcf5222d7e6c69c52da1acba01b721c98ac5a33725111f12f6d8100009d7cc9efb7ad8d7d95ea4e620d
+Entropy.3 = b52620e58e0b52b8eed0d6a6c5f4ff6c1483c61fc41dacf7
+Nonce.3 = 2bf475b37d068d061d1edcea
+PersonalisationString.3 = ef0d233de00d24622b7d4ff4215aa720787fe80aaeb65d7a
+AdditionalInputA.3 = 81b735acd3dcb13e65231c2d980fb40ca850370581f230d2
+AdditionalInputB.3 = b2302d024d92cdaed4b12f79b0aeb20c98b2321710fefab2
+Output.3 = ae94204670196baf740768f97b3a095134b384afea667fd90a77a16c8ae390a732ff49a3073a27db0f7a2c8ad5d7cb527d334a37abf0472f292a20f2a28e667d7c9e9f7b8fbdd177f36bf92d66223aee3f712b6c9b064e07ab96f6a77613ea55008fb4f8fbcb2f1ccbb0da75316c1faa
+Entropy.4 = 2592a5ed86ff64b9b4c1fbb81222d1bfbc53f3a639571ecc
+Nonce.4 = 356084058b8855237da15c50
+PersonalisationString.4 = a626c51ec99e72431485d2ba027ed9cabcae7b86116abe4f
+AdditionalInputA.4 = c430876552d28776570923c6b74e42c3210f01104006bf11
+AdditionalInputB.4 = fe2ebc239690a4eb18a0b5e75d08831cc2eb07c982c63973
+Output.4 = 005045ade7cc15467b5ea784649d9804540a842ffba4db8d44df4f44c69480bd4fe965b645aed09d62190daeb2693a2192aec3d71453a8218e4700201ab922ac35d241d95150b47cc7a051897be4d958f2da5c2ebbfceb1c550cb67b32ff83ce4fd845fd826a0d2469b506f5158765fa
+Entropy.5 = 376785f5ff8a82ceb0aaeb010533cc1089059ec583c302b1
+Nonce.5 = 4bc47e2cb8c2711839ce7f68
+PersonalisationString.5 = 6d345e248339e893f75696c039ac47e5678696fd489a393c
+AdditionalInputA.5 = b0f3fa1131c3fdd5c7fd2de93931e45a66fa030422ac65db
+AdditionalInputB.5 = c66341e3f9fb82e3ba85f229fcb7d34457e4a6ba8396b548
+Output.5 = b92d17e1be94b0385a8cc3e16189811fef7b284a1b0b6b2520fde79af7826c745e746486a70cd8dd9930b163da75f7eea7c216e758d9ed6c745dcd7bde19bb9382c1f7c37cd15b703b884d7d452c255b25048a836844c5ff28aaacf733a52c28904b36e1b51729d7aed81d601c0872dd
+Entropy.6 = 2cc2557582c5a90cd2ad0c4a5578eb0bbc9bde41b126e46d
+Nonce.6 = 8e9c3563341ba238414eb628
+PersonalisationString.6 = 9d2fbb9153e3ffefae0770c79de10db069a5ff9f50e31787
+AdditionalInputA.6 = 2e54e32539e27ef76ac1eeae2e30c2385647652e20903b39
+AdditionalInputB.6 = 1f4e01255908c3c8049521f8972c01ede7dc76c425c59640
+Output.6 = 7d6ccdfab33f322898c470be02d8257e0e952dd10f407b3a8eaeeba47c541d968d79eca29e15541c1505fe4f19a41797c9ca2280c06261fe9d0c58bab65d16f5794b57566b8795c38c7b43d4761c8fd107beb95147a0fe61ae8dc31e25eb2957e44c0463ca7c1b589ea587f0cae1428c
+Entropy.7 = e670f896326b76034e43cd85f6f6f11fe6582d3471a8eb88
+Nonce.7 = d37a2302de010aac0e556860
+PersonalisationString.7 = 5e218091abee1960ef81f4d5a80415e388bd0cc79bed70cf
+AdditionalInputA.7 = 7cf84b9ff30dbd0f608fb21646d7c5b542fba50adb38d5df
+AdditionalInputB.7 = c1c4aabe7616a4c97a4dbdadb08a9b63c6e10cef8d463fd8
+Output.7 = d8fbd557fccf31829b5ee11b05d0353e725bff15fdaac94d21ce95d40eff55edd852b264b515ec6384e2d28d014e47a2df0d4f56a4ec79309b06affc62915e231d62d02bfc60220c72b7ca7ba5671f882839b791ef534e707a04e5274c1011f7941fe1075a5d06a47af9fb2f65c1f211
+Entropy.8 = 0576bb2d4c663b781193509251e2f76b0a8bb792e7944960
+Nonce.8 = 0c2c154feb70cf33ca942508
+PersonalisationString.8 = ad15e4fce9f4dea43c12ff9f9d50c963b335a01332541154
+AdditionalInputA.8 = 3c8a4d6ab96cebf9d02b5663dcb0e0db23699623455cd4b5
+AdditionalInputB.8 = 43d2d3a8d023fa1785ce4781a15eb20ad787685a47da08f0
+Output.8 = a68e648cb07da2eb795a8c898c8631e565f33c2fe9c35e686d6f85fef145446cb79bb6d17bdc8224bfe437468a9630ed03c517caf1226c278ae510c869d67d50b6bf1cb378a34035041f290d8dbc123650ab4fbe5cf6074ed0ba90e45d9a8ae08566ea3d3a00ee3741c8ec8f56dcc78c
+Entropy.9 = f597ce05b9a5b1cf3847bbd4171e5085384cc256f77ac615
+Nonce.9 = 73b435726cbd538b93de9f55
+PersonalisationString.9 = 573cf859f8fea05f16c6d03cb4e524b91e917f39eeeb1d68
+AdditionalInputA.9 = 2a842454870c3f7936f8036b453d219557ca341f261d2519
+AdditionalInputB.9 = 7afd8cc269899acd88f5c55af29fb0c4ce678a0d8ebf924f
+Output.9 = 8162c16c1ce3d5c6b7c96f0281f4220569a882277935752b86e7d3f54646b276cb77ed96da73799911fca3d19d34c1f0b21068a472afcb77410412eff2abd03c753a009ce02b0e995477546366020294eff0ef0da66f31a413313e2774ca04f09a4d5076e0e85ca97d5bb6faac4c0c27
+Entropy.10 = d5b5374fe143035c4fea41667bc8bc7d46000998cc82ab32
+Nonce.10 = a0040c705e01f9b354e8f16e
+PersonalisationString.10 = ed8bb219e67515874c5b9e3f6ae6e4dfa9c42d1e69204e8b
+AdditionalInputA.10 = 70f03fe6e78cc34ec1678b2708fcd8ae3300183ea15ccfc7
+AdditionalInputB.10 = 9c641d7e73d1a2b819e113747d74a979b74c444ed36b7391
+Output.10 = d50df8e3e17c0f5e19673ba2097d1d0c4cf7a9def7465a5b91ac8d49ae1b6a821fe9efde841ec9064555c0e2d6cdfa41f1089f22a5c27090c5a136660d1af586a1e131a853f19bc3c8f4c79aa09e39c2f22b4456c667ec907e2a4124218665e7cce50399ae1e19ba9c2399f470444839
+Entropy.11 = 74d7c8c9b170e59e4f128c8df1955838df5c8071a5e85439
+Nonce.11 = d71e785c68b37e10efb39c9a
+PersonalisationString.11 = be3d54203a1078d051519137774d5d851e81be026155eb78
+AdditionalInputA.11 = 23f7b6758d79de580ed3eb995fc173da74939837aa8d9eb4
+AdditionalInputB.11 = 6f0d5a333ddea0d38362df0dc3ebaa2be2fe5825ddb0ce84
+Output.11 = 4462fc32110b25b3797c5cafaad830e8a4346d9270fed98b30f1345a7a8dde19bf5365d6f3788e7f715feb2762af263839c8c8188908c61120743d977d71c51f6324d887bbda380fc07eff09a31c2332e7b1aa1692c59c3379db95fc21cf711c004c4d385fe14f48f2f2a31bcce6aaec
+Entropy.12 = eaf27c3f69279fd523c0c3a1da5fc4f01ed64c27ffcfe3c1
+Nonce.12 = c596482f5baae1434e8c687c
+PersonalisationString.12 = b038829fc95dcba8645ce40a306491c893f48139ae30a071
+AdditionalInputA.12 = fbbf7abb8cc2612eeea6d9463efd55c47245e01713332bd6
+AdditionalInputB.12 = ccd7e81f529de1ff4e65fc63d34c262ffde7ee49e6707197
+Output.12 = 96dfb7445057633b2f0deb69135d10d0a2dc53faa9cded55ddfb8edc63f5424f8fec7627597a30328177dde7963f76f9e5412b5b440256c6a3f0c7c7fa02ca49e19ea176abac013696e9d529f65e51d4a7348e42dd254bbf19d9632d6c875b8ecd7a4139f1bf020a159d2a30af8d645f
+Entropy.13 = 319cbf2b11b37c831c654b6cec2570dc6d7abeeab185272a
+Nonce.13 = 518eaef30faa5acf5c8b254d
+PersonalisationString.13 = 9effa141f7466b659eaa50c32c8e683c2640f54027ab6aa5
+AdditionalInputA.13 = 63b3acc237588cdf41c0d4bef16c4890cf3d458fcf1de8ea
+AdditionalInputB.13 = 573d6a7960aeccc3280a8aee4d72e587e9d196b7b270e329
+Output.13 = 8a568086fdd9f01206a5aaee34d253bbc9339112d3170699b9a1392e97062d5d0f16240114dc1789269217c5b4b2974895b20903890f7dacfef46fa4a4d02891c70425ab3b42f53d72f852faf3713ac7b8207dc453279f4df345091b8bfeb54983095c2d190358293ba507bdfdc39b24
+Entropy.14 = 56f3f5b08da10ead0c986dd2ae5553e4b2eeeb47ad5d2219
+Nonce.14 = 7b12b89b4a871c51c0d85554
+PersonalisationString.14 = 96c8630a1f4187fb0794601cf51e7e333e71756a0421ff43
+AdditionalInputA.14 = 875e5bc9548917a82b6dc95200d92bf4218dba7ab316a5fe
+AdditionalInputB.14 = 4d3f5678b00d47bb9d0936486de60407eaf1282fda99f595
+Output.14 = 90969961ef9283b9e600aead7985455e692db817165189665f498f219b1e5f277e586b237851305d5205548b565faeb02bb7b5f477c80ba94b0563e24d9309d2957a675848140f5601f698459db5899b20dda68f000ccb18dcd39dfae49955b8478fd50bb59d772045beb338622efa5a
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = bba743058788f9cc91a321caca494b3ba5c72744950ec788
+Nonce.0 = 8ca27f243ad670e805814af6
+Output.0 = ddd4d2ec6e05f6876515d79fd6f1488b5aa61786a8b7ecc15f865eac437bb71b8d05d1e7e376f4857c3357bfcabb1ee3d933316dc4b67e69476c7d3fde0a26eb386e5d2864cdaf99022101aa383bf100d9d0519b6725540c5e1eaac71e4444dfe8ff8cf35eebb8fb5a804226a7044bcd
+Entropy.1 = b9850e5d7dee9ed1c6cd75c17f97a5f4547de22302442b38
+Nonce.1 = d2e59541e55d3d9effc6b1db
+Output.1 = 7ba9ea4bd21b7878067eba71ee78acf4c6d3387b97045940436eb731d534e543a5e14887af8ce33b0f6496555d8badcdf7e8d2c4d8de5489b4feb226d2716cfb90aee90fe189e67d03a923ae3f8afee786557ab1fc8386f94cac58f0986854b6cb6b2c90bce778a367eee0b15655bb13
+Entropy.2 = 7204f95f19a279305ad41b9d0cb7dad7279fd6678ee3980f
+Nonce.2 = 67746832a7420086fe591a5d
+Output.2 = 556364ff6f63208683fb53f18c0dd2db792577423745bda42437c1b33c73667cf257da823ee5080e0c103e6ec57b6e81517062c55989ce76c257808151dae8a2932cb78144207c15f6c9eb4fd57caf0101a74c1c9b42d375646997de7a035f3150433c4e912e12f975ab8494d49f91dc
+Entropy.3 = 748e2ae47a2c03365491374e7406c408958fd08e0467570d
+Nonce.3 = 3a0e87c3f6c19285981845dd
+Output.3 = e0475c909d0d13d389d0828dc50099d1258ac5382c68bba1abd2206e03bb7af7d40d1a01510f9bdf65cfac9efd047a736689296bccee5ff1a2e376cfcf44f96ed6817ca249353efa42921b0f8723d330877afa17296fae9856d628bff43bb929aca216a29a4c1d9e69df7570dbb3e5d1
+Entropy.4 = dd1bacebf057c043d76d83f86b46fc764e2290e4d68ae537
+Nonce.4 = e08d66b15f2c49f4889df2c6
+Output.4 = 09bd632fadced576c3e0351873fa9539fdc499f41220b847301a8aaea2281c1d9b317448552fe262b822bef8779a132d66f9b27a320279fc92d5c8373f9aedd20f6c2a422a9f34eeb87587a1de6a2150faeb4403912bb81128c7409bb58a2261aa7ea47294cb5f5d3601e721cc000932
+Entropy.5 = 3e894fa8f7e68a9456340088d6efa3cf3d2d80d96aaaa89e
+Nonce.5 = def642aabea32a79ee0600bd
+Output.5 = fa8c91477e50c20838c0edc8c882d4a76855b5e406665c26142bc4593a6d75998dbcc0865423345ab846da78537a915a94d60e3d2e2d1dc265c00b8c589131d82f5a2916205b42b7c0d0746f6b516357dcdd0dbea1ce7279e8879f79c0bed8c94ceedac2b028c14655c186d160ca138f
+Entropy.6 = 02e9ec23399fa27efd580a333ff8161e71a4f049f02b3655
+Nonce.6 = 8f4bb7f7e0e9f208462580a1
+Output.6 = 9ef5824559ce7832f6fa9932ee1e332f735d42a8c21224dca73205400f4e0b9a758b691956389b8ff78855084652fe29b5b77f56f22d14274e030e017f5c0d75b9b4ebd4d540d0a5f057946cf17ea6aaa94fadf6ad39c0de7a7ebef4e332a20b8f4f5ed1cf95620e41ffb6ec105a78f8
+Entropy.7 = b2480a2abbb49706d7ded682e76fafd53b8bf1f0a533590f
+Nonce.7 = ba562cdde7e35c6f9c41f1e0
+Output.7 = 723d464216a191a10cdaa96d4c9015fbd2f7ed29c8eee3280c5563353fed2c2a2b41fa51a72aa6211f3798adc271f7927e0bc31ef157d941829d43b27d008d17414c4dc2a3aed177f3cd3f7de16dc2c2e56aae74353ce2613286864f774bc2f1388c0284d964c095e7260c94bad47ce2
+Entropy.8 = 4d07b701d5614b0e96ce8e31bb8ae111b635852fd55f188e
+Nonce.8 = ef66012b0999abdf3e6fac06
+Output.8 = 53ca443e9c3a2e7b88312bb2989219b0ca73bf20167a5a68aa55622b7d3019094f3c1ac312b19c746b082fd2d74bbdbfed24526b0220ae13c3c11e66f7b2f7a0f5b3bba01c8a19d056780d49e79366cfb965690390607d7473ecfd9d48b73767e0098df0fe585b49fbeebeea121b07e7
+Entropy.9 = 573a180ee9c46067473e29a27a89e11973af9e061d80a908
+Nonce.9 = f39acf7e26a154ddec7c76c0
+Output.9 = 0013711f1a3460cead54bd7cd0a3f13e461e5321fec3971a9c7ac8eacb97d9c373a5e0922b8d0eb5fc45c728a9f00486bbdaa2b88be2a8f9ea69cfe168a0060841192c0d7457ebe350eae30819d74ab3068a8d67ac28b29d6ef48fc24f845460706812a1b2700a53b7ce69b39fc9520f
+Entropy.10 = 168a647155e7849bb6e5405fa65fa2972fd869a16970912d
+Nonce.10 = 8686d17cf524ae8e4eb937a0
+Output.10 = ff6b061a4743a2b21f1be263e0e620715e2807c507a2d6889420562bdee79da662ad40983215485bc4155e0251b449b80cc787e34ba07a172cf4de74988545aa7ef16d00b8293a60eac04d9826220f37291d83b54b912dca8c0debd470801264aeb4c2327873cef0895a76bd0644c010
+Entropy.11 = c0e50ce5a5a5c7389a19a3f24fe7232bdcb4f08542cada1a
+Nonce.11 = 3d27e3b7542e7a9f88905c8c
+Output.11 = b603a876767cc7bd88e9414a5a2f7699254aad3baf8b40c4415e468ab70e2490bf440afa0e2e307642ebadabc720ac2618091993049b6c5b90287d85c9f589d291911547ad2eaad5d31635af2d2b77eac3cf4bec600ffc4d43cf0526897564da9c10dd7a3bb17b04b19a64d3bb5697d6
+Entropy.12 = 41e85704f784e21622628ef5af301d9ab2bba7f87430d37a
+Nonce.12 = d5619a9a2b58e223f6c256a0
+Output.12 = ec42453176fa42d1b2c6778172d2df6b16f5e91e44f5cb1541dad058ae0abcb6b41da5689e649c5ab4022b4e5f56d33db70cef87adc287185bdad3400aadb294a79fd583ba26835ad58dcc640d15286352015cc61f07b875efcf7d00ba01f2302d20b7ea3014597f89b2dd9d13264fce
+Entropy.13 = f2c14695ba4bcbbaf6ceac7da25e075e47357ca5246aaa7c
+Nonce.13 = 8829afa614b4556f605a7e2d
+Output.13 = 72ee34f0ba35b3e8ea058357b6c848503b0b754204f4706c54f532c14650093c6cb993c2c3982251610a6e09c354244c0ccd8ccb6d9fb4682cbb594547a0d3e69fbf12e6151208847baa6a748e56ea7807fce18af95ce8aee77dde17a7799d62eb91ca37d4c3903191560d82b73f569c
+Entropy.14 = 30efbec33ef98a928e9441af3caabb34cdad892669e88130
+Nonce.14 = f77b7e0fcca6f8733e0bb0cc
+Output.14 = 85f5368cb9f44474af6c4a159477c5cdd05eb0c0a37847bbb07e9a9c8f633ef2c3727d017f1bbfa89dba056062202f5824b3a493ab53a2a5fcf796d944577f1393d35f2a284453b2cbd8eaf35b9bae7b87c156cdf9cd0a2fc94ddb0d4842e3ab4b6c97089cac0e32bdeb32dd8233fd6e
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 8ad37bdd28f6b39cd2d62cbb226cb52c7c9e4e7158e74354
+Nonce.0 = 8a537aa573111a710ebedb9f
+AdditionalInputA.0 = 66abc2c8559314d27f080a2b608b220c1cc3c581cada3a92
+AdditionalInputB.0 = fb193d70991547bdbc0b4b0e753412176ce727ead9bc3a6b
+Output.0 = 91a8a12810058b6a9b1e5f86753b257f6e14afd7415765458fbe131bb17a55401062c6a1253dd40c5a6df5c79bdedcd205e584eca3bdb62608976b8caa2f57ea3a6305a84d8018340ef410f1cd13c214e7c80c5da348eca06d37469758fba4a322ba7c9ba791e037067f01f4bd7d741a
+Entropy.1 = 71556baf97112569f7ce185bde939046d7c0da75256c6838
+Nonce.1 = 70f7798dcf87c5dd469188a5
+AdditionalInputA.1 = b2d8b249be357d29ecfa8846130408ba92e4c375e2a18341
+AdditionalInputB.1 = bdb135172136b8e495620fa1bf00b6dc1096743f654e0a1e
+Output.1 = b5df532fc5640df7ec27b1064cf9fd82999e9e13594c76e7b37b4879272deb5d25650ffb91f03e4207a52460a51f46810669732abba63689969726ed48b5fc911eaf2da52b4d731d3c5703fa41c83752d5121328f7bafed472bd484d13308809a80e0998d6c3504ab5b935c67e303e97
+Entropy.2 = bace0437423f99453d4bab253b7385f25cac5529a74a55d2
+Nonce.2 = e0070add2bfec0af44a5ab92
+AdditionalInputA.2 = ad0931a66c8eccb069b18794d871ad801709b10fcac63333
+AdditionalInputB.2 = 25be43136f84f69506d946b7b8cbfc14c137d65daac9f6a7
+Output.2 = cb15d0960a48246f38fec77e0bacf22461cd337ae77418742c3a5f6f745f73d9608b52b2c64b5d24f736278655d45cb975b03e8698e74e08b52f402a1828114a9256cb22c55bb21445da8c354aa8001caf14167daf4dc6093f9aded313ad6433af48a8291e9f9d529f32825a77717c54
+Entropy.3 = 98acac10c00a8a20d80234f05ed900420e092f1a52a66a3f
+Nonce.3 = 75a0856c873ceabcc3289025
+AdditionalInputA.3 = 39ef8410458ab56c92dc0a3bb4fb55ab2b6366cbd10232dd
+AdditionalInputB.3 = 3cb5cab71f8c1059e6e58ac5135ae9411a2b22e578dee61d
+Output.3 = 34d345bd8c0f32713ffac93e2ad3df5c50134876284ee3d6002a6a69dd66a903b7f05ef52c582e34259680e80b15f459bd0da3848db49422223e072ed542ac2b0d172e71b170ddcc77c355eea7e8a00789501f09ae3ea928b76bfc8329a6ac66023dcbcfb82be6ecae29472f83e2e5f2
+Entropy.4 = ee5ef00aafb26dfdbad0943029a5b82e7844d6e838252ff0
+Nonce.4 = d32ddb64875d956b1141d891
+AdditionalInputA.4 = 17642083b7135890eb32fc0d75cf3db618e84ab12b9964cc
+AdditionalInputB.4 = 8bf2232106450da94adfa30d7d6f51c712845a50ea33fe39
+Output.4 = ab35022268031ab65ce726095b2b311d1fe744e4229d6ab03cd79eac3fd93099ba00d0021a95f40ac86a46fda4041c27b0ead485ef4d91a8b3fcfab4031f762a6746516161b0f998194a4a5ca902e905e79e67b17cc70be2f8e077290a575a7504f55c47bae81dd732e036aed18f6e00
+Entropy.5 = 0ddfeac713fb4e00565c0315aaa80b54b09f8ebf8f94cdbc
+Nonce.5 = dec892f0d33775e66743b9b4
+AdditionalInputA.5 = 984b87667149b02521d1fefe9238bb843f9a9392af304b19
+AdditionalInputB.5 = 6d269fb9d218e1e932bf7a8a064b9252c8e8bd15e91928e7
+Output.5 = d8a6470420e87e87eea6508e48953268ec481f70047214c3c1049be0fd0d41d04a8fd8b25751297f6bd2a3ff74cae96bf75666e179671055443c0d487edd76f3a7dbe70bc430ded72718853496dbcc57d6dd3685593aedd2c14fb70203e9bd84ec7531de1451c95fd2bbd4bb1065cdf0
+Entropy.6 = 2c0cdd5597ec0580c57fbb70a86432a736ad44a8e0ae8f22
+Nonce.6 = 9857f254a4bd2b819b617fac
+AdditionalInputA.6 = bc662e9e8bd5c069172b688b39f74f368c44554c09fb2c12
+AdditionalInputB.6 = 0b95de4012b602c98c1767a0f0a11b4c85df71e691d7bdf7
+Output.6 = 96adc9cf7562b8fd344eeccbb91c73441f7691a9c58e7b61160f93cc142fd440b038f48831da2b6343b40ca70c620cbd6d3c5509cae8ca3be87380af58d1d271abbccb56c2ff883ab445f30914271e25b88098c412a64c15956d0ad7bab12ccff80e0a97331af5c21cd6b0018e63cf17
+Entropy.7 = 96275ad546f4706febfb4e983c56a27d742edf3f92e7177c
+Nonce.7 = d7534695bb16adc11621cbce
+AdditionalInputA.7 = 4abed05763ae67b4173e31708bef17f4b0bc0a75a6f8bf1e
+AdditionalInputB.7 = 478b6a8aef8f40de30c0b0c320140a739c914d5976540153
+Output.7 = 34ff8a4cd818b7f870895416ba60711775b10b090602717bacd8ccb94f2b751e0b2a364c9fd66ea1bdc4d57f5b3ceb3eb30512d31321b48ac41c2abc30025272904a934a3187128c95f224821db1ec657901bcba19c75b4b64906c9c12c45fc80b4694e3a94e580fdce95c9cd3254bfc
+Entropy.8 = fd72ec0a165678f3ae47b074b1ae1b056b1682b7cfbc1c68
+Nonce.8 = cc7af6fb09185c0c92e90db7
+AdditionalInputA.8 = d9da5d76ad4ed06cbf2f827455ebd12383f870d13b7434d3
+AdditionalInputB.8 = 67a85292e710ac97c19f89daa4b0c0315bfbbe71ae8e99c9
+Output.8 = ee2b927b0d53e70544475aebf23f5bf2547f5a4f013fb68b56349c76bbd26983e9c662daf6280b9fd01f979dbf2e68bdc17e17c866618b93fe0f6e05d9de6d4a97783cb6516f6338345c7153e0fef538163e1622b07c377e4ccfb0b9428cf62df2e2869ea5e94d4e1f04d81c3666329b
+Entropy.9 = 15f6299979025dd6dfdd87fe2883f449446ae9a8b013dc52
+Nonce.9 = 40e2360188f8f02055fb965d
+AdditionalInputA.9 = ce54fd58debee248473a1ba98917542adfa9523c71ebba82
+AdditionalInputB.9 = 1ee2c747db56b8388399fff174b35accabad494918dc9a3d
+Output.9 = 2caf6ba1df44f8c5525ec6b81c22e8c66926a65342069dffb8d1dfc8a39939b5667d2d24d8c715ca7cb41f83eac1263efc6ca8fd8bf8ff2387e716f154a8832f9fab9d2e3174cc1e7cc6bc06b583b75bae5a93fe063e18866d0f2cd2a418ad4b06d98ed330d5c10cf8eb0a7d2d013df5
+Entropy.10 = 73fa0c8c227664d091a6e809173b1a7fdb502dd8de877bc1
+Nonce.10 = 7d5ab4dad7976c0fe9ffaf13
+AdditionalInputA.10 = c88d5f61e9b23d6c440195fae62c4dc992be1323c7a77c1d
+AdditionalInputB.10 = 7918b3c108b6b21301625499611da496c1f6abb8b6bce9d0
+Output.10 = a0c58c212296636b7e1134aea8c9cf71fb2ff33a1266ddc8b635791a00b50ea8d9b2fb912614a3866bd0557767a23d85fa7b71b1164d2bb3b36e2b97f5ddf94a30ce29da682e5575b9bf0deed7c780349c5eeb7fb39c00a73f97dcccad748d7a98e445efa1091ae7d911dad929fc0645
+Entropy.11 = 5f6b6db4db0f5d9aa8e8f7bf5dc07bb188ba16c104979a3c
+Nonce.11 = a183ff25816a11805f761c62
+AdditionalInputA.11 = 7abd7bad51e1ade5b2da0b536c8d589c682df09ecd634c5d
+AdditionalInputB.11 = 03a31694a8e68ba1463551380717db35f43702135c74ffdc
+Output.11 = 5bd753bfd322db90ceda38f2e7e914766be456b6d774d9952448ed6ae79cc6e5490a42896fe95cce1cbafdc18c43065e35492affc776318b3e1cb7371afe9e3f98d09c0a3ef5a8ca8c893ebb0055605d3025a0bac535fa3945b0e302f7c4889c4f67c943032a387e06557155d62de880
+Entropy.12 = 0247ab3bf3e64cd450b605e07b9ca806bdf6bcdc7e5be087
+Nonce.12 = d5908c90f49903077d5ca9df
+AdditionalInputA.12 = 822829af2bc971c062e0e72e122331f67523c4fda4e6b59f
+AdditionalInputB.12 = b74dab0782913c9f6c191a4b5c8e5ff4c533d2897d9f4ff2
+Output.12 = 70a729135b2098c38aacdd074845aa66e7d8b971da5fa03d519f51a09c19848aa1d9cedebb0388eb3c2cf1ea34eabfd2cc3f96bb7d4b7f057c8daae2a8dbd81f9936eb001fc54554d4b0093a7412c370dabf0f884d6efc62826f6f50b8966445753406ae0d12f5f018243781ce4e0e46
+Entropy.13 = 154e09ce03eb313b6b37a50273f61fd829c987495f848e3c
+Nonce.13 = 6baa744eb875635fbecd1043
+AdditionalInputA.13 = c64900dd98479781a1ed32a2c3bf2de48408648ff8bbe7c2
+AdditionalInputB.13 = aa40b7eb8381ac8a70dbf84ca9e68f526d3ff10c4aa9be79
+Output.13 = 5fbbd2c5224f8ccc954869b141abbe26cf0e90d02f19d8a5a54a4fcd4a62eba01071e0970c89857f884ab1d018ee0d31bb88ddaaf9aa59d2c7b65de619b0d7b4760336fa1e926aa5697a5be474ad42017f3484a40d3b1aefaeae523f9384e58ba9924dece6685c76c05920992787acfb
+Entropy.14 = 34bc96e55d3b0f3fb83b2755b7e58363113da2fa0dca7dd5
+Nonce.14 = d6db4281d219135dec4b01c8
+AdditionalInputA.14 = 5c15fa9dc77d6fec5f7a4a3e4a315c05de2b5e46efe54934
+AdditionalInputB.14 = fb65ede490ee01a1c100ad5e23a20f91b45adf1ddc15c590
+Output.14 = 98cb3191831dc79334e8e37d5246600f822aaa40964b91f345b9df90929db1b7bdea96dae9aeb88d05fade5ae6c29aa8eeec7fdc96e654c5ea41ea01e3104ca4d287bb03005feab0bd1f85e556bb6bc46a2227b14fd94f9e6cfd0341cfce951851feb967968d6cc818f364345b715bbf
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = cc77c08df466a3f73d20f613e39ba50b5aee8cea3dd9da69
+Nonce.0 = f9637f3f581c27e8154b9359
+PersonalisationString.0 = 24befa89cf5034a5bdfa39c6a7e405cba3f3755f38d6eb40
+Output.0 = 321df4649ce0f94f53f44da95cf8912b35dbe7accfd075ef9b0e89c040d0bb4a1d41a2ff80f3e2ee099f87c4dd099725d0dcecf52bc082f9903b0cf0f1438443a9e25786aaa7e0bcea67f2b165755ff28eeb9b7803d1bee81e3f18c2685fdbc378b05b52e7a003f72a3ae8e1450b9883
+Entropy.1 = 7685572080f06c46c8242862f877d58bddf4a5fc9d553d99
+Nonce.1 = 4b3574aee84a3d07f033826c
+PersonalisationString.1 = 69b6ddfc1327bde11e24dd793ea5494296f79a6a4f88f1b5
+Output.1 = 48ff1e1d05637fa86d0ca93341f684dc94d238206f8cab1a5c6e4c32a820430eceddea0c293d5fcb613308fa230a618b690341d1ca17ae694a86666f1bf863351b8af6fb6e913293a610f5447711f0bbad01105090b2ac03d5691055dfa2fc6b5be3757ee4e2b8309f04e6ce8566f1e9
+Entropy.2 = dffdc5240aaa288dc1e47afffa775231ed1c59fc9913fbd8
+Nonce.2 = 9236964c000396c803f7d2a2
+PersonalisationString.2 = 1fceb760271c306b9fb1c1f433d24862fa8798b3628001ad
+Output.2 = c2a591f58da6b01ff2e841958e4495d07f9641ff99d8ed056ea296dca602d0ee07ae4fa33f44d4e21dc0a266e3366f20d019c75d13f98bee7f5b024ccf9aa13f2068cf74f93af9df118decdc4e073df30ee90040963ea367b2704579ee395ee1ac83ee79681a4be4f01a4626c5f7bfc4
+Entropy.3 = 9e04812cbad24f5ce80fa2b45ba880ec17b26fd10cce6020
+Nonce.3 = 3211900ffbb9045d3821c919
+PersonalisationString.3 = b01370ba341cff79f7005f892be62a84060806438ad14311
+Output.3 = bb60bd21005a3dd93bfe77584e1367547d0e3144078ef05928ba3de70eb1e6be2d066661cf1e0552b0f6125111628c30cc123feb5a3c057fb969f25fa7c8b895c36a828cd627b56f46dc7a5ccd40ab8c8d8e5ed558605019c6be6d062fe9d86fe38ffcda42bc9708a4334f43a8d9f273
+Entropy.4 = 7af6a521fdc55e303c53334a4effe014cb7ced725ace9ebc
+Nonce.4 = e5713a9faf54f31ee96e52e9
+PersonalisationString.4 = 0d1d8a87891dd47d5488c0b52df2afcc9fc3986811ba4759
+Output.4 = 8afdcc8051d4968751cce8fbcfc28b1081424d70314b836ab158576d8f1be9e6884053a5862020f1169722c8f7ca4523ab8b66a25e017673d04f0369203f6f5c7ac0ca5adabff91e97b1e43601378a4574ed6d3831fa16855df7715e8c92f458b509a51283cbf4e5ab0cda7c1306044c
+Entropy.5 = e513d483313d824143e0f2f35c4799a66b20819750faa3f5
+Nonce.5 = 479ed252b3663b51dc44fbd7
+PersonalisationString.5 = 242fe2b949d5d12b278676bf38deb79822cfa59a294b562f
+Output.5 = 8dabf70ea50f952248625652852200310caf3761a8ebf382f17a572afb6e02f2050a5351fd917ed36733af9cbbff1cda0385c3c7966a3fd1fe82f18241a17e5b043a4e5986931d69c36ecd90aa383ecaa6e5a37cde917d944e8e2e2723850ad953049bd41787398a00637e5ba351a8d2
+Entropy.6 = 85cd18858cd605bda2f66c255189c528f467d0ff9601f4dd
+Nonce.6 = 024ecddf06232859beabf989
+PersonalisationString.6 = 68ca6f72bb3cb92d876b056d4efd21cefd4fd41e88a77773
+Output.6 = ac02806acf16d16b60548c81d90002f71c01888dab7ca7cc68e2f1c1b0c5347d1cd26738388ef5dfa44fdcff534a327103948a53df708a43388104d93f94d0462bb2b2409e21102b7cf4fdad7f97465ca2702ddeddca87ac01a3bf0167b0ffc6f123f5ca5b2bea4082369d09def70746
+Entropy.7 = e9b462858798475342df2b27362174685062f577f67aac5d
+Nonce.7 = f134d4d2a09bc00ee34768a7
+PersonalisationString.7 = 7d610e3e8ad86587d205d3661f2d4054a772305df989da74
+Output.7 = 0cbc76d53828951f2da32ee550fea0e38b8e32df618eb8e5355b5f5b2bcce685452bde3ef8e257b30e6186f0cea481b33d318c7a0a7f7efcae0cc789095a7111cdf702782142c025e21a128403d2105d1f2f1e85769a92e2e7087e3b271525ae9c83273f811247c3a9fa6f0918aae299
+Entropy.8 = bfc20fb89320917d77518a8e2321db89cbb6034c3e881813
+Nonce.8 = 10842875bb240b29463dd499
+PersonalisationString.8 = 62798e770aa2e7e91e66ce2da4ff5efca2f135045d682f1a
+Output.8 = 487810965470f49f26d805bf9ac1c394a570891871f18c5929c2ac38ea49046405f032d4635dd92f4210036cd1dd80b1542333af84732d1d009c2cfe91b9a932620352f5ddbd6ccecaeefd75885c1184ffcd8ae9a11d51a664eaeda1b70962e7958f124d6d61c6d605bdf7894e3b3f99
+Entropy.9 = b6e6337e37b42b0d94366c6560f7ce1e92b9a12e8cb8920b
+Nonce.9 = 903b548fae74c2350e606816
+PersonalisationString.9 = 40a1421dd702077801c919e12652f8ce453037be618170f0
+Output.9 = 182737f299bdc8ce28a1c201e6c81e2ceb962cef3ded74c95a82fbf008832c3619c16cf85dc4283b5aaa998c53e84855e7a86dd791e72ff9f4471fdd7d011d74198bf9f55cfaeea9d91f974dbe07d3b63ef0a3fb69833f19317f7842c0711c782987067176e8d93ef9d2c92b2f4d0638
+Entropy.10 = ee35377a65ed94502397a83b6a06cc459877a64b67a7c27f
+Nonce.10 = 39361bc989edda90588dd2d7
+PersonalisationString.10 = 1d5aef06c14332225fc27ea2999e492afb0398fcd5a662bc
+Output.10 = 61c6a16349b39e3238983019da3d6d07d4fd6d55980af4167dc3894b5053aeee7cfb4c73d4b1e52dda71d49eb94ae0faec230d16fe652ce252679ffdb61557d3fc71d9448c19dbf85f2efc37722c9c4068caecb1bd7546b6c276a70ca3674b8aa975c3fa7a73b2d2068d13b33bbe441d
+Entropy.11 = 96a91f6f66cb26b19a38e1ccee4d1efa8385f12a73b91593
+Nonce.11 = cf539ad397ff8455659ee337
+PersonalisationString.11 = a83b6355b9a581b3fef4bfc35b8d414ee333929c5946f836
+Output.11 = 88d3229c004bb57a0467e4ff6b0d580f539417f2b5cdb9e1ed376035d8980c9419afc658b164adc4b5574edc3552f037c0d086c2219b8a14ef1787f734fa5055d0208fdaeff365a383a5e1ac33cb79fc85155e8c701ae6e1fafcf208ee6ec594f4ae7c491bae8ca29f671d499f279e80
+Entropy.12 = 504d354c253e43f941a1cf4e9ad187e879184330bb06b765
+Nonce.12 = 2300e7738a62472090fe83c0
+PersonalisationString.12 = 4e8a5eb99a0960463a77b093d73e1883042be5e3b93e7d93
+Output.12 = 231bf1de582a733c6fb10bb71b1f3f2d0e8e360b2b5d19e51f70cdbde9a9b11574751cb8e949508e891bf71deeb3720fdbd72fafac95630b345ebd73cc81e12ae29ad5cfb1aaf9b95e8b4bb143f4eb9141221cfb6b6756d086c770acc3b8c24e200ee985e4444004ca259553a107c3f0
+Entropy.13 = e6f8fc3993ebb29668d64f1fb471ee92c1aa1d946fa80283
+Nonce.13 = b0eed241daae8d748484d0b9
+PersonalisationString.13 = 73e1ad4ee16e5c7865d4c2bd6d843075a4ed72d48380ad1a
+Output.13 = ad4522e99f7c6c00feea0280ed6d2258777809346ee3ce52c150f3046424b9510bf17d13ae48301b7d224510ba79020e5dd2cc04959062c3bd2740c8a4239850f4b1b64c296aab8a46fe5988fd98f3ca15984f36b45ead997b813ed4032df344f081ee7879c1a83386f775028e21cf2e
+Entropy.14 = 0cdd3ff2d685c17a4211f54d45f7a85af293e9a46edeb10a
+Nonce.14 = 46f8ee037b927ec766de0aba
+PersonalisationString.14 = e6299e0eb5826e498d873ac02892f01e02f6632101fcc090
+Output.14 = d86bfd8f9d80eda3bd43850ea6edab2ba4f69ac8eea623fd6bbd5c0c920620f8cc136b0170f0310a156271981a9cf7629e1b8f0759de1e99e20a0930ce3bb7dd2d88bc9172a56108cdd736dc529a6b99862bed7d543bdceeebf450020762652d520105f5c5cc3c9a6ebb64af2a7e82b0
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = a454d24cd8ab7aff528fd2a4df6313c760aa40a5fe23b0aa
+Nonce.0 = bad23d7e66ef65668d11dcd4
+PersonalisationString.0 = 6c09c1ed75318b7e621547cd9d84d98cb27a18a4144469bc
+AdditionalInputA.0 = aaf4b7b16eba92693dfe6203260243ff531262230791c4d5
+AdditionalInputB.0 = d7fe7447c154387c582e913a82505ba381fff66008f13d5a
+Output.0 = 0b20f3849a3f0324b477f3f925bf4739c544419c225e2d5b46f4d1b625fcfed15bcbadb2661c012f2c66dd13de1aa52298473cb026c316b1c808baf72889145b1e2927048f72d7e4e8dba1a7250edfa66179b9abd4283e823fe371269971c1ace40f90b6493a6e73670b7e5503f46c89
+Entropy.1 = 3bc7f1773fe1191695b3fd9350589433ca2c617951bbefe5
+Nonce.1 = 3d4fce3431bdd8e06f5c5182
+PersonalisationString.1 = 39606af9aa0c1c455ae72393a36c55726111f5560b4af998
+AdditionalInputA.1 = 8b461996671bf413d4b898ae968777624b174aef9dc8cad4
+AdditionalInputB.1 = 087fe5dcf0a0403fdc15746950f20e393e73db916e964dfe
+Output.1 = f189481e192a67998847dfbaeba1e71517aa11b22f1d9cdd65d3e62ac44bd3a6a344c1ad4d4628c12d9fa72b29c61f8ca8e3eef37d1e4cde51d7905d6314b39e9bf513b24cd24068dc57db263480ecc7eb528de332d7c21d6cb43c7efd3a8caf48a4260968c1e33366587a64de8e254a
+Entropy.2 = 4412a6bb0840a10ea6f1fc9543226f7f26c0cbc7965a9979
+Nonce.2 = d52f7a302a957fc4c4fd6706
+PersonalisationString.2 = 064f8a9c4276339d22f31db30a00cc781bd1c0340f2721ab
+AdditionalInputA.2 = e88ae1d4a3245eadab582b21c1522d8a3d93faca3823cd44
+AdditionalInputB.2 = 4fd482fb3641e626ade6d9d94a18303c6b1a7ea629dff0ef
+Output.2 = a29b0cfe188977ca00ff72993bbf1d7cc4446d6781ae091bb32a8deebf1f546c2571968447a85ed52c019bc0fe4ab0b18b93170b295cd897200bd3f5321f51b09e7607aebac79e2342dade99a4f422949aa97872a07f317cd9d1482ef397c6354ff2019dab5f915234aec6721f556e69
+Entropy.3 = f8200b1a9d49e0a7320c05d14fa77f3528077b043b2d0f6f
+Nonce.3 = f83a3d3f55e9496d4914bc22
+PersonalisationString.3 = ae356cf25b715ec1fb158f51b21c934c22eb5495858ec019
+AdditionalInputA.3 = 7d25558e3ed1135f26b78ec98fea2c9d62e8f76dde73de67
+AdditionalInputB.3 = 4aae0d3a2f693cbd913ba68dfc3f5cda385a07662b65ec94
+Output.3 = edef6c0324f5f1c360fd0eebf6ea8906b7d378510fbce36ae5cabed186eee6efb4443dfc6b84d5a5cda22bdd24eda444073a148b66587e5951f40ea58d947d474adc7584f5b6a34ce94b6113ca71319f7f83723a0acc57e638930cff1d72fdce1eea4f8cee25bb77815553872f10fd83
+Entropy.4 = 0da057cc5f06459395c6ea651ca7baefe8887d2896a836d3
+Nonce.4 = 742f6ff826f86b169283be9d
+PersonalisationString.4 = 823532fb5b1f75a967483715f56546e254366cc774f233bc
+AdditionalInputA.4 = d8260f314d9d515936d765ffe21a959751a893efca455d06
+AdditionalInputB.4 = a5615ad8f003973b9a7605eab80439c8aa2fea56386aa396
+Output.4 = 71f5efaa35338feaeb52bd12b7961214adec8bb9c30b751453ae12f4b706b21de5c0c0701d4f5ef0cc2763fd10c10f2a856403f6c28b78ca62cb7dbfa19b7eab7351e92727382e339c7a7c44578dc0f3bbf4475fcc1d17a7bc2f6de97acd7dbade74f317923af035219d85cf2b3c3087
+Entropy.5 = 2f55b2b823ac366f4d06dfce6d081dbb3a00ac466a2bb77d
+Nonce.5 = 00642c8032c0e44418ca14bf
+PersonalisationString.5 = 6a8cd0ebbcae6ee434e37c586f7d7983d3d57ee6750503a3
+AdditionalInputA.5 = c94083c6bf2799c97144f4a8240957c4da177054d56f1b7d
+AdditionalInputB.5 = 2eb6793d47dbfe0de54ada5afe34e8f61584f5bd75094ed5
+Output.5 = 50d6b4737a9e5365cb35ac37ee157f2dbfeda1bf05cd1b6be50dfea46290f8e178215949f5f1e3b6cbd9b4fa47384a9fd58571ed2e664bee4577b6333721a72007ad563e4cd9096ae6e61a016a6910b1c832c23277730ccf246c284861ddf4c3722cc9e2872040660088c97f71c1e039
+Entropy.6 = c703a60ccebafa633b920b5de2a154b9fa4940973f3562c6
+Nonce.6 = 32b3afdc67a7092a61f13e16
+PersonalisationString.6 = 5a975900ea7ad8e778d24c6c347d09a58e8d084033010ffb
+AdditionalInputA.6 = 6275f07d22aa29f0fb4b78f545320f1a7ecab71140fa425a
+AdditionalInputB.6 = bba4afb2b69201234eacace27ee6d77a5920cbc509da66d0
+Output.6 = 779dbebdec3601f11322ea9d0857c88974f2c8ddb77e2444b46b31a7f65d3b949462bdda4aac94f689d44467b049c718b93a8451a9068dccb75f7ea9c6c60726299b5794c4746840dcb770eb3e45347dafab6980e6839c55b6f35ef87ae1e0915dd8e843bdf3f0fe38b5ce66d7bf38fb
+Entropy.7 = eef0b72f2b96523a8dce8f19fd4f2a7d041615f9dc2d30bf
+Nonce.7 = 019647a36f43d7d36183dacd
+PersonalisationString.7 = 6387a9efd6df19065a93cc64fbfb7e3e26a8966f0fcbabf7
+AdditionalInputA.7 = 76d848401dabae20bc1504c2a44c950c8ee01f76df2b57ca
+AdditionalInputB.7 = ae05a4147ed24eb84c90506310d0a231e1fa9a2fc618c503
+Output.7 = 2f95615371c773aa030fd255ad19cedf4ce6d50fe4e6d231c82e687792b35a4a10a48e4d88918baffb03bfdf137553db576b0afc99d4a370a2fbb2925f1110e72ee3b5960543af4c1141d303381650d29aaf024040cd70503fce0ea41794d8e67ba7615b0ae28a0614e26d33b063d9f7
+Entropy.8 = 68442c7db00b0d360a86709d1bdbde023724730bbbc2eaf1
+Nonce.8 = e3e3b777747fd8bd4690a9da
+PersonalisationString.8 = 184cab9e9779a367e1fa5888d6038ce5f6702a998465e9ba
+AdditionalInputA.8 = 442ba6a8567f3002d7c7f94398f23aa7b3b0647f116d9c7c
+AdditionalInputB.8 = 2d830926a4cb5683a308593db5d6034f8bc94f3bdbd88056
+Output.8 = d8257fecef134d22025eb884a8b93e67a24227a62ba8cf6a4a412317cc27d7e2c6291a42df02a82511853ada9e4b75f2f8beafbb4c788e607fd9f988e8e3feca807c35141df39ba2d692ca182c5e40861880bd6d8648a8d65722bd65d87e14d7449e0d70927ef25929a03a915c4fd806
+Entropy.9 = 328b4809643931688c48b0737969554c5a29752d8493603f
+Nonce.9 = 9010cc0138e491197b28e87f
+PersonalisationString.9 = 3451fa995bd9e975535abd0354cb4056f97c6b785057f3b7
+AdditionalInputA.9 = 4eadc6391b639be2b0a556e159a17b5731b1469766758183
+AdditionalInputB.9 = afe849042ccd9b7d24a01996a9a0a3bf5b8b723ba36b213f
+Output.9 = f6f1baa1eb00e5cace4c83296f4bc87f4214f3ae9f635d882f3d2ce7e759c04055d90728181eed28fedfad593ebb8ddc2212a8f24da13684e751f6845fec92596a4ca85c1197746c9063781498640ca152ca90f309e78c834c98814a6918033d1528983bb8b8bdb7485a3d6797d24773
+Entropy.10 = 6087021a7d6524764fc44223dc108961f90529b8c08f991a
+Nonce.10 = a532653ea4e091eb7ebafd2a
+PersonalisationString.10 = 513cfd915f4bc8fd35c90bbfc7ed2f67b21f0c73a430a402
+AdditionalInputA.10 = f0fdeb937d463ee039ae72dc536efc7946ded185abd47962
+AdditionalInputB.10 = 2e85f0a2c540af36f3803e4c90bf88118ef7df7368250345
+Output.10 = 6431c3c5a0e0adbf88a5ef1d7a618d1b10763d0dfe11dbba8058047630d30c0c40e45c116f88ba352f47d051d6ed1c6b55fdcd3ce1699e89bda7a3c29c209da9eacc7ecbb783799bd6c17d975f0cd40e1a812fdf12d46a7a4df879ee7661f3799d794c635664a466dd00a3217cdbef59
+Entropy.11 = a20e88ca7f57ca76295114c7a7521e38a427a9fb5b7a137f
+Nonce.11 = ca81453c651679646daf9e0b
+PersonalisationString.11 = 23b423fac0d765ece85f1a9282f8e97c5727205ffe667dcc
+AdditionalInputA.11 = 8e64128bbd64c06fd983272721b0069a7656874910cdaef4
+AdditionalInputB.11 = cfd615a8abe010af9b11ee2d9ff99b15558992626b15431d
+Output.11 = 390a35d348edf975dfcf2b06327e436145435fe5491dba467a0012e74172b029063ba96bc5d3f0df9ca6759ed275126ad09b5a999723a9a25f3496b0cb2a3795287da0edac6b07ceb1123d43de721ac10ae4353915d41c3b153a7a8a9acedef18eeb3f4093485a44e43cd0c51a435be3
+Entropy.12 = 5701627b7979c249837577eb75abf823984f5cd0a4c400a4
+Nonce.12 = 1e02e2426046c34959b1f23a
+PersonalisationString.12 = 4bee7c103ae40e5ad80a6ed9c8585d291c49fb40c294b31a
+AdditionalInputA.12 = 04bc2574d5beaf8711a127a6fc66115beda575d76b206d62
+AdditionalInputB.12 = 83f45f0ddd859bcee9ae599758a0b7cf9713221f9b3f7826
+Output.12 = bda8062291bc4432ea63712f305396ec06e8ad5606781710e2a8b043030c91810b06bddc53ab24b41e273232c7755a13e255f22e1e0f55d9ba62b845957bf7c9d7765b9051066ec2aa5032ebc2e627c34723b5f9245e3c88d90f28948c91bbee6a5889d4aef514d4c91803cf87092b2b
+Entropy.13 = affafc143621917b595694ecf1b9c6b7be988dd4e48db4a8
+Nonce.13 = c9bb6a309658de582eda2c99
+PersonalisationString.13 = f6e8a7d60dc77065820cfc97ce0f2f033bf2dcaf199a88ef
+AdditionalInputA.13 = c19e97bb79c8508750186932c6fb6573e4770c611cf57830
+AdditionalInputB.13 = 0ecf65a8035adb6346b9f942a4e2170c30a47d36326712eb
+Output.13 = f539cc2e2d0ae7d822edce1cc54fdef805c39f5820ce61eeb47342dafe02f383fb68c6f9e591b41107da8b27ad92b66d85ba0ad02772e199f7a8685a6ca591087cc71c7ed383b0fbcd53f63ddd5ebc7886a4d46568aea167d44e6e3b9d9fd2f831e55c2d6b4a807154b8cac6ac4f18b6
+Entropy.14 = 0142a6db5e49eb931eb3d1dda211b959e46a6c5df36fbf72
+Nonce.14 = c77bac27755936b4026d7cc1
+PersonalisationString.14 = a1de24491d19189e21e332d2f57981f00124f5b8b177f588
+AdditionalInputA.14 = 82f895626afb606f335f5f050f0fdf3b45275e0b451774f2
+AdditionalInputB.14 = d423d43240cb6461402a7755f247573f24fab496e00b2e5d
+Output.14 = b32c753900d4a0a0650d35d0fc918b3aa5f253d4381598ed475147f32c8b002bc08678e45bed1b9b519cb9729972886f85e581c75d3c2c9fd6ced929be29aa3befcd1d3fabefec590ca55612c1a0409446a01398d0e4775a548d118a32f29b0dc29530329d2a7656e5d3ef66db2b9726
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 1a4b3584ff2a80fac650b6951bfb8ee871d8c57ba2e18155
+Nonce.0 = 67b2967d4bf065e82330de27
+Output.0 = 452c1cd1a5c9d0976fd10c8b6835b28349ac99d145d1f00309b846381707122c1bfa8a36f767df992bb6d230b7ee35543085e0f9cfa2f29212ca228ca5dbd5169ac4b97f1ad270e5f993d612d12643f144a492e05f2c8773b93b6c8436417900188a5700dceafa292d3599162c3263ff
+Entropy.1 = 8d1091ff23561b8ece902f5a0b67a37fc3f2d63ccca851e5
+Nonce.1 = b035839378c9fc410cb72b1b
+Output.1 = d17c2a81342b2efb5e4cca2ba0593f9a0ce3f100f0b19f99bf195b8d4ca40ed8a03b2dfac74f225d8615b9a791e303d8ee874d278058433cb099585145a7deae70f92f173bc57a295e92da14b4f61101600593113c69fcd9ba2c184b5515eab325ac0566b2e4dd6e79a9cf1515872b6c
+Entropy.2 = 42b2a6e4b3ddae69443bf81498f8fb92a51b3f500d46b8c7
+Nonce.2 = 7147df6a69dc21bbc855b057
+Output.2 = dca346255660c7c07ac2427724551cf9e9ef7af3eb76abe3036b36a2d2de25df3425ebbe1188714ec215542fdca04ad469fbe7b12ddeaa370afc62610eebc2208efe7fe724897c175dd69ba0f000dfa4c371c5585ec80d91a26177f1947b7dee1f49ee10141691db118dfcf971d1ffc0
+Entropy.3 = f51f942cb2f700293aaadcd163eb63656f38b4cc7dcf51b2
+Nonce.3 = f827f45ab5b8add3a19158fb
+Output.3 = 59a7086f47293e334ba89e431fa5f40562f93682b516ec3c7dfa9bd775076b3657615fdf5ddcc4fd0fd859ce3b1a8faa8d98a9f47d3dbe1690b079ad85d71ee74ec16c0ab1cc87b9a242b2468237fc9d79fb36841783a1efda57d91a45ef27d5f7106bd68662bb9aad18aa70fc9dc554
+Entropy.4 = 6d90d0ec3a3043ab5a42f3bf5c0e3298251c089b050a372e
+Nonce.4 = 62c90bfbe087b7ad6b94b7ba
+Output.4 = 72ae55f27c32d2dd2c4aa6fe85d50900c73c2e0f46e8e04de4f6a5b69969c70e27ee860e09619d26d34108d826bff285f796ee18abc5561ad333d310e6a3a957d9c92a4bef663784df1212997ba3e1432720e35b663630c3c612935a5d6779876200d9e3b4d06963bcc37366b0c40251
+Entropy.5 = 5287978471d45ae1fa089b0def2d6b49b54be0708a8dfe53
+Nonce.5 = e218dfbc430d4b438ab3fdf0
+Output.5 = e38a48aa3a22c64d574c4f88cd65c6569c433c3d24454524397795030c6120a053768f0ca40958c40d6f53b07d8a43fd69eb0699c4143b7afbe297cce0562e5e881af715bc7d6d25a60cf0a94e50063836a6d91f5898b0a16bbc6739ea5307a0309800326abc2f9fc439ce2d229dce15
+Entropy.6 = 1e9f424e39ee8e2a739bae6ec16dfa30855675cb23b2553a
+Nonce.6 = 28536e945486662c2c0c8b3f
+Output.6 = 0e0df3c867fe9d932801e4c2dbee521887097a93afbc0add63431f01d33dd8cff505ca80569f254f32791b8a7b08744c25b246a35ac9b5f2c271a27e17d6c45a8a33218bff749a041ff24f4ca49af70ee0cd131d66266ba7f48aac8c873273ad41b045cc5da575a14846d770147d0ae4
+Entropy.7 = 77002974c7bb8fcb393527eecbf58e200d11a9c420004508
+Nonce.7 = f480a38a3ad62909321dad55
+Output.7 = 825902146cc12c31fce501eeff90d2a5ac5e08539c8d0e776aed57e6de0da7d781cb49abcc5f6b6a9242e892c3ea76f2a2ef02204f0b070ceb0a5c485a0e8e84b11efd0845dff3cde293c9c62c81c1118727fe698f3668611cd3846b0404c8b686e0d868b77f17ba9224bc3f58e865ce
+Entropy.8 = 2a04f83196c1ea689c8a57f8aa6648a747eb2ba1fde550fd
+Nonce.8 = cf4723d5ae1aa8a7e327fc7a
+Output.8 = 43feb5a59648af2b23b95729d5387bf045dd918d6a2bbb49205f90aab25b20f6c7eb41f40c11e2665b310caaa67afbf4f7751ed911f55038f7e4393bca3004b0a0c7252fd60dac103b9b7ac2ead22ae4271ce52d67f8f406a5752bfe5197f2f44752984e59e6221538e78c63c9837748
+Entropy.9 = 21d8df582c9a17dc0d6df2d505c675a7ca2fa37fdaa8992c
+Nonce.9 = dffd0d50506d5f4f572e825d
+Output.9 = d7bc0ba5e60c8cf7558c4bc8a3e0405a913b8910f0dc935fc5acadc12149bb2deee1a5f80a81c7d902ee0bea8dfc7a7674f9043c3b29ea41504ccc2b240c1b01f66d363b03ecf52bdd2c5cfb29ce26a63cc162ffb66bd36c3cda913491dbf96ed960d1309b9256c04cb185210b861992
+Entropy.10 = e5e28d1d4887588fc400af05f9aaccb03be29cdc4c252bc6
+Nonce.10 = 1916a7c1e10c6758a48d5036
+Output.10 = 0af6b14ea82c9b6821b7323d45a1ff3ee86f7929de4baca319a48b66e033190011e2293148b5a1b522a4c130acf983b2e87be798698cdf35fdab50629e7440594e7508f35e38a98a3f15b486b74c314b6eeb9a33eaf39e8033c0845242e07d8f1feb9fd45d32fe3195a7811057e6419a
+Entropy.11 = 79fc8f02948d201517b9946a255dd83f9b46048e38062351
+Nonce.11 = 5820501a892cd13ad820f522
+Output.11 = 8a823efea75af7a40af02a0854d59b4244221099ac247ea28557a78e1ab67002d6bd6d9a85c92bd0bd48ea007e4ff9562bf4cf039d40d0e28c868d0967ea7ba50e6b90af4755999a9968827d8e8158f2c62ad97472874076640dbfdc1d3dd227b7feeff45fb2536f0d49c8328af4def5
+Entropy.12 = df7d2599bc467eba6faf4d43c3b8034b81ef4a8ff2e5f7fc
+Nonce.12 = 879236a06a0a640064b09dc9
+Output.12 = 23c77304f505fc3d25b4af24d1941d4ce8c04f122d22e1393177e9c75e5b2e11cb3a23bb889c44e750177f9c4fd0bbcd09ff3d6b580bfcee8982d742846145e1a44725a05b5ce31815cfdd90f59db8689373b8803f87253c22f036465c85a4b556ee9f8dea177d633906af53a6032ffd
+Entropy.13 = 49cfdcc0e60d5a39d5b1dcd889da0b791483aa73f4959a0d
+Nonce.13 = 22d6a6ce73d457bf2cd78013
+Output.13 = f880c0a1942c57065129ac7b4604ee4509f141cfdfc7e90ca2390b744f8169eef4a90d90f88d7867c5e6001bf58870b4ee29b83017c956e62f0895ac28631ca8f7fc9ff1c71e7f26643a709ebd2ef30f83f612824a94d3fe9f9845b814d817d48eaa91c246c4f401d54d94903d7d45ad
+Entropy.14 = c617061099a17392c3092d27728b35e59eb45814e9df9fa5
+Nonce.14 = e1634c0d96cf91c53b063450
+Output.14 = f08234ed8621f1f551cf49ea60140313a71341f6886c484a06e74e64aba6f8ffc2cf1edd34cd93e836ab033fb0893e52e01da9b3104fe49584a45447c136222b1c1f1d3cf406a80ed9d782d2ae277790eefc5c06f954e654f7f283ddea79d2160cca1f63d0ad00eae9e882de34ba4083
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 04fe18c01c70eb0779aa73572144d0b81954768a73e70ef6
+Nonce.0 = d8d2773dcc931ec0348bf07b
+AdditionalInputA.0 = 52d9163da92b7c4fee39e39f8d310623e16ed1864e284de8
+AdditionalInputB.0 = adf9b40f7b95d919a3fa3d8d3322f305413db70045f19406
+Output.0 = 4dbd5d3e1a0cbabe3a5d6c275215e2de672436ec7215b628b4af5d4992c9fe32ccf75e812c3ead43717f553b38950ac35e68e057fb140d3e977e25eb9613b52537349b2f922a90ad9e92c67b2d3116322d9cbfd554dbf011272b0d3d9b4c1efa9c87d249e1b2e5ce152b46cdb19b8af9
+Entropy.1 = a6a2043c9d5a35edd3a87c3ef76d680fd4e0792f0d0d1029
+Nonce.1 = a74e9ce171fdcf713695ac77
+AdditionalInputA.1 = 9ce76390991b8c56a252c3e9355adfd0dc21f642701c431e
+AdditionalInputB.1 = 5b08193168e52f4565eba98f798df4ca8170fbcc47b158f9
+Output.1 = 7fefda34735500595b8bba1652d5d86ed5426707efb50631de3cedc2417f44879a641f1165fca2395577ab62a4efd3ebac3820cecaf83428ed882eddc6ad577ae0e4d29cc712e504cd015232180ce9d0b062dc554688f25bcd5e3b79e9b906a11a0ffe122c8928410f0639cc1dfe699b
+Entropy.2 = 3ceef6b6a4ca6aef15044374a5a2258f482f0d41c933a162
+Nonce.2 = e9820df285f44ebd5c0a7458
+AdditionalInputA.2 = 87f498a2c94e4a8591555a966d85aee0a186027de0334eac
+AdditionalInputB.2 = 3ec1f65ee04953e563ea5ab65ca89bd2d8337fac2a93774d
+Output.2 = 9a9b0a9f6fc51233e18cc47e2002c463bf6ece89d739071852e1b2d532bfcd7779e88d84d22e0506b57a5c032dc89d26eb4840a48ddf3a65dc5bc31383cc2c638379749cc33c826b1cbba5cf425361314db2204c47d3dc0d38b6c017fb733445b95730ad7bc557484ff29833198f64ad
+Entropy.3 = c25aaa8d76c66f0ce021a388a6dc8bc475aefbc2e18ea001
+Nonce.3 = 4e22fcd37f19f936e097dcf6
+AdditionalInputA.3 = 44dd1356503c99dffe7d8cf211643c0d629f7ad1d593656d
+AdditionalInputB.3 = 68509fc262f191ea95208c76c9b84f9ed182a168490fb1c9
+Output.3 = 8b7775c0632da15ab6c8c56203b87765625204ecae760f01ac19431ee4a58fa458ee565e5ef54d834bceab6a67d0831466e7c15e63da2adb6bdb16e469dd9f460308df80476d32e2ece0677361f07f3241f2ee93e39310a60cdad7fdecb4cae022e48bd2fed69d7937e4b200cfad478a
+Entropy.4 = aa6a6c7083031e4e4e67af56f2e9287734b1f4112088f696
+Nonce.4 = 4e9e1b17f3756c23370c6d00
+AdditionalInputA.4 = dbb5237e3d8184b077a159f8498adec1da07205f1df5a927
+AdditionalInputB.4 = ca99c2672b20e6aa37aa2d8db5650ebb2dee685614f7d43a
+Output.4 = de90ba7686bd82f034daab63f4b0ae636775a36d6b83715655f055647d365c3e5dbe6ddede8d05dabc74a5f04214399c606c26213a5167dd0060bf71fc8d7660addf442ac11546f482602b66a883011a39b23925ccfa882f2fc4af178109d056d0ca962083a2c10e5442f86976a9e828
+Entropy.5 = 0114a3d59ec9e8d2ab2ef6ac509a6ad739ca4aed1ee2d515
+Nonce.5 = 027d64d479bff5c27b100bfe
+AdditionalInputA.5 = 392a993b8e5f6d1f1dd0ab0e8a88d13cfec95c785fa0b384
+AdditionalInputB.5 = 555d0b602dcbea92b5653467b0d96cc9adf792e7555e826e
+Output.5 = 3e9a92f64afe5caf818e2df55085c7f11e87457007bd3feb5ce47d299ee9eb0688f08a1590d4f3b02f9655f683b743ecba6b601054e0f59ae68d713a17b8491387fde3d09a2c121175aa3b0647cc7af467918b876437c8bff8c1fd44e81fa968d907e1823eb31ba6acac0cbed087f7a5
+Entropy.6 = d45cc7d8ef81027104b1e477607310cab779a6e756524905
+Nonce.6 = ffc1d1c455dfbb64cfc72486
+AdditionalInputA.6 = 081da5764e197d2231d8408467001d9fc62af0864aa3b585
+AdditionalInputB.6 = 1ceb8e1ba42123046c5e985e440e2d3defa794ce8d02cbcf
+Output.6 = ee691cf740efef2619c839c0df42d54446f2d718ab1d24ab9e12d740b2d3138543141bed82442e509436e6f424cd00042b8eaae417ee84badb11fea087297d44bc4cd05cdd22cedb1b5b8e336e0bca8ce00712d573d480a81144dd19c08a71c8f5ff4fffee8b157566cf146280ad93b7
+Entropy.7 = 394316fe580f0777e846b4b9b0f320353c6279f337d52c22
+Nonce.7 = 096fa0305f4c34bfd499e6e7
+AdditionalInputA.7 = 286c0e78e078e116649cda0a60cce145eb73f0ea2157a505
+AdditionalInputB.7 = 62211e071dd9ca0b74bc31976bb0278e1e3147581f2222b5
+Output.7 = 07561a1c877000f1a5821e01fc5b4085fe12f23d6be447068aa955153bc2994ca036b8e4fcab23ab2d61296c76c53350b88b3ac0431fb30123e5cc36fdbc90aa377ea143b0c615c39c6ab1e5d1ac26a2a381fdbbb66d319095ad2a620eff824343dba67fbc83e1e2ce0725e9915f26b4
+Entropy.8 = 1c08eb8091f6699c50fb280daa9ad51779f8a1f436281747
+Nonce.8 = a84fca5456c589c805c06f66
+AdditionalInputA.8 = efcb121a2d96a8b238b16e3a9e3994e54a929ebeaa22fd3d
+AdditionalInputB.8 = 7b794fb66048297ed44d089ae7811578ab93efaae5d0c9f5
+Output.8 = 37d83fc06dea430f2a3b20397191dab5cb6845fb519dcf4a558ff6678c271dafa3ccbafb803facef82cf5f2529b5276214bc5ea0b9a1542c72fe50d97c4ad106a246363176126093af34752d148d88d9671411a34ea06fb61da15e320a3c5643fa2fa54bc56b4a5aceb0475af112946b
+Entropy.9 = 1ba96258c4e4306aa3600b9a8f0c521109a46d08dd1a8375
+Nonce.9 = 5ac982b29fb102947c51de9a
+AdditionalInputA.9 = 9f0d1c1cfab6ed13f74b814f63919b71fcdf10d1df05ae38
+AdditionalInputB.9 = 72070d604caee6225a8c907717d359dc2d02a848ddb7eeb7
+Output.9 = b08abb3405ad9594952c4cec6165f9375c9827c1cb8c58e9c79eb6b944a9c5e363db9dda5dd7b3f7c6035cccdd614dfbaa8c548560c06f4393722da3fd6ae06b483931fb508c5f95202aeeb839d94338ac17c2ef0ca82664b00621edbe9be46c9815381a5ec54a484ac11a0a88c0d21d
+Entropy.10 = d7bdc1ebf496da1eff58e5186a1d7a035e76a8ff2f83cf0b
+Nonce.10 = d54a573539d9c188ce5dd91f
+AdditionalInputA.10 = 1d7f360c6ad4d4ae2a7aba058132a0ba932ff13fee459285
+AdditionalInputB.10 = 563368ba97764aa6dfcf57ef31eb913b025f5c9c4f9f56fd
+Output.10 = 23db14b9e262aaac695bb33c48812582fcd8ae9b26bfc5e92c247c33343a778d0a1de9655df624959795a042160b46d920bc9bfbfa42c9e0d03311753cfc26e9b391e196391ac399f9bb31c03ebd7ad2c422d8dd37707d3281abe9e9485dcaf08555fafc8b304b46bcd567e88b3a03c9
+Entropy.11 = 93d14e6200b3ed2a8d4a7226490da3ba6936a2f4fcba1c70
+Nonce.11 = 2bf76ffb27bbbb020953bae0
+AdditionalInputA.11 = facc4663ff63ae7776765043497bb0dda1884f9aee4f81c9
+AdditionalInputB.11 = 55bee081a8d3e334c1b3e33a6d0a0eba93048d908b2bbb4e
+Output.11 = 159d0613e4fa05800c320f3ce188d40440f367ce7a71e3ce2b14e7a5e5a6a106bcfa46184533dc6a5aef114765845f06b2b53152ff370d1b4da09898e25000a3659452ffac0ee6efc6b0a14aa88aa5fece158c53df5778da435e850cb31c7b18372d7358b2a0d3db7c606f9d0d03f884
+Entropy.12 = 8caf36ee5a6e0c2bf1ed2666ac4d7e94cef284ac243568a3
+Nonce.12 = 1be6e893542305eed4574b77
+AdditionalInputA.12 = b3afa95380eb50ab1f8942148a9254373c7f07f1347b3c73
+AdditionalInputB.12 = dce3c8a1e10a064876d120bbf354e3cbaab455f3ddcb3a71
+Output.12 = b4cf8f0b89d6f93aaec9fffa072a04f817dec9228df08f424c22e431cb45c3836ecf5ae80982b36c4b7d7a03798344066fb4922663c6eec0771adebc5aa20abd84490733831e7b707c73778a395e7af07943cf73354736c06098a9180eba242b8b2043964c189dee9f1fb4e233eb8b3a
+Entropy.13 = 1fdba6009c876e2ebd04a907f38842468d9165406be44133
+Nonce.13 = 6293d81c807811a26ae25782
+AdditionalInputA.13 = 65806ae51630678cf1a7fa6f1091849b7678324443347dea
+AdditionalInputB.13 = 5747fdaf1d4be67e6edf9321030bb328458b62ade8a491df
+Output.13 = aa6f56f627f3a5de4f2beba08590cfc8e89ed39b87194743049b8cd66c640c7d66ec20750341776a75956d718d454e58f87c2b402bde4487d2bfdf17e25a57484d66d95dae534e3e92cf298bec64e6b772df235b2b653dbfb549256f9fc556fcceae6d9f671f524352c834d9ff997eb3
+Entropy.14 = e2370bba6e4af0791a98c2a2a5d73b2f1951bd0bb0b1a5b9
+Nonce.14 = 601da7b3cf9856a79eb24723
+AdditionalInputA.14 = 857ce19dd6e8a45be185875f1a98911062045553e8d28ac2
+AdditionalInputB.14 = b5f1998f0fa38145edb86ae4d569ef4dc2e0aac0a815d3b1
+Output.14 = 8f0d978b24bae2a0665beaddfa61e8896ed7976432bc4f7c444699e30b8da1ecbab8990bab9d0d72ef6f6b0b27ede12dc171a43a14092d57e3999cee71b1356da5f29b17fec227ca2a4887bd990fa33e1e01c8a9f900ffbeb300cc5ce9d7d2e25a44fafc07e34acd61d425e0d36fb0f4
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = e839789d37a736a88d1bd2f4c87dd401cffeb5246a9f81ee
+Nonce.0 = 42c92fc6db45d2931676b2c4
+PersonalisationString.0 = 2086264c9ff9be5c2bf5318cae970635958166422bd14fa6
+Output.0 = b058f6a5b9836edacf1f83caec4d389189464d5b443f50f17191f94a0507fd905bf498340975e897f5e4ecdd6f6158d777139928724bada3d0f5b4f671f37869d58907af0ab9c70aa911101157983992d0d56d55801af5cc13084331268ebe6c0b5556fb97007bf67c48630f4a911c7f
+Entropy.1 = 0ea2c82b18b911163b422282f9dac95b7dfaac5334d29b4a
+Nonce.1 = 6a83fea0e11425c05a24c0c0
+PersonalisationString.1 = 7532ca78cd321c48f7cbc2361c2446214970e0799e2acd51
+Output.1 = b155b82a6780d690821ed8aa2a73d058dec1b8970872625c8ee97daa47bf5af9f5e27a89a06b988afb128acc76208cc6c497270e323c740a8a20d35b712f4771787521350500872228ced8b999062c546121bfb778b4e8011bef854122fb82d6d45b9a0d3914d7ca7642d3de76c26996
+Entropy.2 = dec13a7cae49d037ab66a93030bf0616eb10f2bd6f3f136e
+Nonce.2 = fbdfa6b3fbb3d8a27f01ce19
+PersonalisationString.2 = 882a4db945637535726ab8f189541a06e9d2d8f0cd592908
+Output.2 = a0a2a590abee813c6374a01f28c4171553fa9f99167bf0d7ab01a799b4b6d8f3a2d662f08ed819367e442d5a5ada040e45d1d076a5cdedaface5f476011cb3d3ea9940733a68395188ceaf5352218c08b97b4e4ab6c912345d96684e49c2e0fa6cd3fac867c226e35301ca1f8eb112b7
+Entropy.3 = 3356b274b94d4c72eb99daf36a9f40f4f31fb5dfd8930e81
+Nonce.3 = c61996d830020a6044235817
+PersonalisationString.3 = c304ba70a1ac4295aa7a932f17d0a3334ce383c644e2f8ba
+Output.3 = 94b23e0d02aecead7adbc6dfff9243cb2a38771e919b98b9a33f9cd5dddda7b80aa5e9916fa698c72e2450b5795cd7539af03a699f91ff68dbe48423c0bb00f906da678649c1cf1af55aca64a57fd419d7a30fd8adf69a8c35c185dbaa921787d5c00187e172124ab42354bffe308431
+Entropy.4 = 19382daebb9bc8406913ca5350e8392b3bd8b283016c77d7
+Nonce.4 = d23d79e1dc3117f287d23038
+PersonalisationString.4 = b6415d575baf6a14141a36d7e9c998acf578140064d998c5
+Output.4 = 96789132c221902c8f3b7802707177dfa69f101141e3565b6863935cf3ae7d5f952f0d5a737bed690a714f3098613b622206566bb986209e1a3f00fe24670b3b92c989224cffbebba02dc0d09c162cd9a7afe25c034308bc819278dc9658a8da59fca2272baf293f8e27e186d9b932df
+Entropy.5 = 5434ad8f922c1c1c93d5fefe9bae2f8fbe12eb3396680e69
+Nonce.5 = dd340b0f6317efd7bb01390c
+PersonalisationString.5 = 1403781717b3adec9299526de1e5fe76b93381b82c267204
+Output.5 = 2e857bffc0907280cee3cbb6b9f16822147eb2cb2afcf576c9987e0d1c485bcff8fda87a371e1681d9a584fa447b4cae4e37af7429c798753d4e2acd6307faffc7db6a0b81c069c71eab5922ab6e1872cc0c0f0528605152a7835efb5325c11c0dc9ce9e00740c8f2e403943cf8bf893
+Entropy.6 = 0cc10da97f81d9cd41390743e773edea0242b0decbcadc43
+Nonce.6 = 0057c20913afad8217178dba
+PersonalisationString.6 = 56d0a8710290cdb8f41aa12980c45b5f146c705ed75058bd
+Output.6 = e3897fee70be31a5d2223ac779f22902cbe76cc2c0f337f62d039cafbf541a23e0c8a4844853a671a587cc5348775247f833888443087cd402ddbc27786297ae7de5bf14ba1d2265d024eb4c11b53045b5adb186a4523b6fed3a28e5c7eeba4f8bf41322c72630726df7f6913226ec86
+Entropy.7 = 012474a6f096a70e3511343211106543a9cb3c6be46deeaf
+Nonce.7 = 31ebc4871a83dbbc0ec9602f
+PersonalisationString.7 = fa3722640fec20fe71bfaa70bce50a6a35427b9ebef86f51
+Output.7 = 784c27824d81cc95d3a307b7e65614f446682ecf9762e06854539c3367cc09884b3c4642ebbdd7b0cefbe5b83b4f22bd52af20a60e2d9bf0ac2b9203059a7b9d3f6de40c6dd8f1a84d915bbf0164e07be5a80cc1ae13b1d6375aacda9dc469dc3f7aea02be1db0a8efa0009bf08d0a8c
+Entropy.8 = ea6de830cc196b848dc7c05babca7da34a4f266b6d6e7f78
+Nonce.8 = 2b65ac25291f8140482d73d4
+PersonalisationString.8 = 6d8c625e496022ee09fb1779d3dbc07f0e1be6cfee78108a
+Output.8 = 8e412b663a83ddd7aca7d9f118687fbba248ac0224fe4b6e1e8ab2e0e3553fb599f0c5d1f3883b178ae121dec34f27d89426f924de4f6a82ccaee6b5466bae13f14d3502e22c14215d1b71bf74feb8ab75343d228c3f083d8b3f4a355255cb286e17899a4f516a14beaf3d1e6dcbe1a9
+Entropy.9 = 20121d0ed093ddbbd1c400ec51d2c0f09488bd32db654c89
+Nonce.9 = 9a6160e20e6b1bc4fd00ad5e
+PersonalisationString.9 = 3ee55b010e4449b799626de4e78f11b1f3ba66c95c171d81
+Output.9 = bc7bf567f09e46cce33ef5013630024ceaed8d228b28577795fba73d539fa61b339faa0c3e91ee2789028016e723b82bda514f501bd585e57de94a02f31bbe7cbe160504cc28f84e96c13861fd93337d6eb61d78632044ec6f8dfaaef906d4cba9b511e8d40efb28d9c3e8962e097b9a
+Entropy.10 = 398c932ee4b1aa6503e6ab9f921f2b8340bfb208181427f3
+Nonce.10 = 029380cd030e5a2240276e61
+PersonalisationString.10 = 8908bff3d5d20051990e9419c168816e7b503a7d611cbf05
+Output.10 = 302be094ff9249e2774cd22bcce924989e85ce7a8f23f247627908bb7ee72641ff0d21cd2ea2ea89032f73d54aa7c477a994083775fadb9789d46c7048309851101fbd70adff9535c050895f6213585ca2a69bf7d7b293ea183f3e2a3c6019289e0b5aed998e246090af0e00c26c0ef5
+Entropy.11 = 5a3a85d2b93ca4bf5e37960da12b01ff5331d055a439e755
+Nonce.11 = ea3934c6d853e6b210003157
+PersonalisationString.11 = c7578c21d72479fac2ca4e09c946596dfecb4300f36a5aa3
+Output.11 = c58f3a02b2d4733d304bcfa41fd4fa420a1c063e221cf95d993a6fb941bed1b8ddfc2ee6a4d0ebdab393297b262cdda33a5723d9375be1fe6eb1bbc72360c381f2e6baf42ca72ecdfd5b63a8276c3a4b08c81de482f9e1ce9e28719548a7c32a676976f8b0a5726539527844c00daa3c
+Entropy.12 = 4257218dc21a8e500cfcbeb8fa6fb0e3a22872d257d84514
+Nonce.12 = 1760652536bd7cbb5f0a118c
+PersonalisationString.12 = dff57346d46a35df1303fe5f07dc71697d56e7363721f006
+Output.12 = f6bc7b9253f24ca334ba0c32daef8c34aec4b41b624dacddc9b8ca282be67eb0c61e992756007fb7fb7ab62de86cdb42ba8c003469ed013f3dab8dfb2569b34e69cbca52f1b562fed469f064acfbdea0ec2daa3cd8b767768f6d593c5e0cd198cc3ed6ccb8d6eac531a2e63aa5fe6e0b
+Entropy.13 = c45ee677a9b6888d24ac4cc87e88843274b34866ef7d73f2
+Nonce.13 = 4966f9a2c5de62ae383f9438
+PersonalisationString.13 = a8d68661608d4f7114a8f7fcb94db2db62f23626514faa82
+Output.13 = 0a4f8cd2ed510ddbd9ef73f6277884ababd61d60255a7f874f3559a22d137b882a7a56cb8ed471bdc82cf652ea401678ea412661a1a0637157f75b0fcb8347d073a2a5798cb7ec7843dbf480c5e9ccbbd8a2963e4a2894a9ee6aa229194859abc1119741b99230637665108b822afeb4
+Entropy.14 = 3d313cc63caba556d7601cdefa066fced1073d661a95046c
+Nonce.14 = fc382061e29c4047c6f05dde
+PersonalisationString.14 = 9b2eaa4c2a229cd2bc5de218aff95f6e5fbc7ef150bdb50a
+Output.14 = ad49119d6b4f25ba34050920fc503d3d0d331ac2535d916a58d781317fcc2b1117618e9105ce192651ea9e19fa6756975d207c662f2b464416d849cb67b9af52abeb84f80863943af99c7916e78317a091ba90714ec8620f661b41d648c15c06e822329cd7f145446c5c3630a4243281
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 022a4c6703920a5689df3afb8334e81baecb4fb8f3c6191f
+Nonce.0 = 8e686ec6b19acc2f5e669f3f
+PersonalisationString.0 = a1722895c6cfe54ff7b171298f9ba76a0e2b5ed99fdf683a
+AdditionalInputA.0 = 9f9b8a01381aa5d3723dd9c40c76b597e36eebacdc1e7e42
+AdditionalInputB.0 = 2ec442860656682e7f186aea817cdebea3bf887326cb955e
+Output.0 = cb73479eb95c8a22459a9537cb835f68d57102103ee369c8ad78d6a90f1476c420892ccb336a214dbb209a5347e427a5d680ff2181bc709f1039f8183ccb102cd275d179a807c99936832972ce652712b0fc2f3ca16c1dd941f797c1e1d81ea0792e126f4ef29726fd73e8d685cc7628
+Entropy.1 = 5cb8edf12ef46abc59dfea601102d778e076e68ad5dbe4a4
+Nonce.1 = 265792a997e7acd615426258
+PersonalisationString.1 = 360f42fbc785e003e4c242f1a97eacd4d1de88614f89ccb6
+AdditionalInputA.1 = 1121e26ddc2ef9a7a69d44cb380e8a91c4fb1f935ee59215
+AdditionalInputB.1 = cada711ac36e8ecaefa4528fde8796771e17e7cfd767c003
+Output.1 = 049e621331992cffee43fe70d1838b392687bab762f14a76786daf5dc8d6ca0b2af3f048c3bf9b2af49c89c9c7748e0fde8da42ee8d820e0d705c9c70a3c296a182454ef116b50c458cca219032e7c5928315aa401ef0afc3cf679a62aa0c031de0af094c022ee95650f7d9a69c303b9
+Entropy.2 = 50162c1feea7ab594626a8fe9711c86745106ae7e14f378c
+Nonce.2 = 631def7bff27c0e3054071a4
+PersonalisationString.2 = eb1560537c45a751136dca5c1672b006524234aae8da0302
+AdditionalInputA.2 = 7ba520e5e707043967cea95168828f0a918d05e46db7838a
+AdditionalInputB.2 = 69d548527c7f36226d339e64fe66746b0341f2c7c2a5b1d3
+Output.2 = d670c6c28adfbdfd8d5e55ccbcd2421098b3369078a9222080e737b8f6b9c0875316010f3417f9eb1e009fb9942dbd39fd7b504473063f4aeae5feae49843fcdbf15ce04cf2b0d367d925470b0051630c19ba65b2c55db39be08fe1c272f343fa95e51096e09fc20f255a8a4e8cd580e
+Entropy.3 = 9aecda215824e5d271680ef252af5224024301ec79950591
+Nonce.3 = 6318b640058df9f89218001e
+PersonalisationString.3 = 11a33b3a3c7ded4accdf7b5b8b1b10653710abd111ce4db6
+AdditionalInputA.3 = 06e4f817a340e346d084d7705de6c3c5af500dd65f65385e
+AdditionalInputB.3 = f3e26425719bd4574f29198a60d7a685bcc15e82d2be5c57
+Output.3 = ccce37199cf030ee149b04e66852ff5187942174854b41e64617c53793d679c9820855d022e0620603db0bf1a39da25c9b4ed5e6545784c0518dd0b8471090ee7d0d7f8a02d4c084291b57b82cec5d1633257a98b1bb3d4dae76405c989eeadfb32303725086d7a51b9c7ff19f274511
+Entropy.4 = b1b4f960a8229eb924b963d27b476e18592084a1dcfdd21a
+Nonce.4 = 373bc05e7b0b9a30ddba9e27
+PersonalisationString.4 = 20f41ca210bf19798181c3b9ab6e699929cc5e75eb9ef710
+AdditionalInputA.4 = 5b116d567417ffa5881b45abae9bdd2f99436bcab8dd7592
+AdditionalInputB.4 = 6ba879343166cf4c3770e3d521afc957ed6c6af1624c21fa
+Output.4 = 9eb9e267c76f449c22f9d2de68f4741d4676d269eadf60b9a8762c8e60131375b456b530bf2b4adac3976453af4e7edc6d3f50237a2774346f0c57c9ebb50979bb5147a114d55a45f375abd4bdacab53f9b5566af7aefe6e262fa1c2919b978ddc71385ad3aab88289e81dc796135ad0
+Entropy.5 = 79019616b51e0cdb2853b6037469ec5c4041c754847b90a1
+Nonce.5 = ec784efa9dfe6971c1cc8e55
+PersonalisationString.5 = 7d395c2892559b4ae1b48dafc9e5c5d3c0ada4ce5face41a
+AdditionalInputA.5 = 17c03ca3bb1c022a7d5542384eb533cd6c0348642d73fac3
+AdditionalInputB.5 = 88d1ec5ae9dbf834c2702d369c2d1e9898e46b0b6304b31c
+Output.5 = 15df85c25744fc8d7e7454f57dd09894bd31677e310ea83cf698521eb9874648225b804467e6538d99b36a3d9b9c83ee17fbc74502edaa1f7a81018226ca884868fb60239004b0923effa4f1e26b1345fd8bcc90d4c2ab6c7ec50142e493cf49d659cf90ecd54150dc0fd9703a292680
+Entropy.6 = 070a0106f92374d62f299758e69ae583f842ec72af44d970
+Nonce.6 = 0f093c2db27472a83e260826
+PersonalisationString.6 = 28f13ad3dec908373d08b33d3bde86e0a54812617ce6c09f
+AdditionalInputA.6 = c7fc449d3f11377c71d9166c04ed1b0071857ef0d9fe8fe7
+AdditionalInputB.6 = 9f6f91519e9a7c6843237797f1d227c5e9cf56a67898f3f8
+Output.6 = 419852b29cd03c1f38d5fc09bf71f45587f2efae5edf856d1c99b66c83cc7f630b9317ee2ae9659ae1958d5dfded5ebba0a8a030e7d30b4028ab95d0b2e531a86c618cca87d0275389f9a0274312fd9425e5dee6f09def20b733bba07f07b8ea08f68d88d8ba3926a485494153fa4c61
+Entropy.7 = 64dfd94b910f10e4195ebc69e9681ce3ca4dfee16692aca3
+Nonce.7 = 631f4b1026996f8cfcdcf575
+PersonalisationString.7 = 076162ff8bb0a469c61af3dffd4f74df8cbd5b708e08730b
+AdditionalInputA.7 = 3fac3ecc0c79a92dc0d4a1cbb3a9a83d16245eee47ff0efd
+AdditionalInputB.7 = 6b341ca2ef428b54a1ba9ba6fff4187884225b8c8c281c3e
+Output.7 = 2c2fb0c6a281525c0261a32b5e786574b4e4b5d6f0d56c3fd25211722f4459dcedd912beb885429ab1041f8b372c343fd85937e18be07b0b50d376a431be83cfb6d17b05a9a8051247ce9a72010b563e7855116da31406fdbedcbb673b939b19facdbe0eeb2e8a9e8ba674e4a8a6d3da
+Entropy.8 = 3d99701d332b175c838564569dcd34b939b26bc5115d38b3
+Nonce.8 = f996619e6da316ff30654a11
+PersonalisationString.8 = 624fa1183b896862b3a91d97d3d41725a0aafaab37cee49a
+AdditionalInputA.8 = 7cce65dffcf965ee145980387129bd583ea14924c6a8b485
+AdditionalInputB.8 = 32a96ba7c738919bc70ddaf7e56ede000581745cd2d03cec
+Output.8 = 710222ee9e0842e124b28c181e4516251d6f9b056153f6e99317ae923fbbd7edfecceb88f6972367f9d0b37895f8aa3b770e27bddc880cfaa684ecfecab130358589cb39580df3d02a5a6314bcff18b42189f05f18118f48a28ef6d97311cd37b7982dcfbfd23d098208cc04c726e8fc
+Entropy.9 = 09d68ab04034c996e0e5e8777650d7e2a92275d7b53a5a59
+Nonce.9 = f0f7e8cd33d58b343e80f51d
+PersonalisationString.9 = f7bf58d397bcd6bcea308aec59efa4eba816e78bfc6e6e00
+AdditionalInputA.9 = 0bc458e7a535e904327963615229f32e1e4d161ee5a169ef
+AdditionalInputB.9 = 57f2ba3ca160046f4be60a9a06435f6563df283aeb2ca20c
+Output.9 = 0691a9cc63f0f085333555830149f4cbd38c533c5f19f6da8e7cdfead5985d72995f4dfcbc2d0591e22272ea82d3771a2c0f0917ffda91615f1473675ccf8327128672853e2fba30d87ddfc35294031ff4407c3461fdb2285c08c13ab197f8cbe262a8def84832cb12d156bfe812bfd0
+Entropy.10 = 7c2563d00e707f404d1b64671cda1d682a8b0e016915c5fa
+Nonce.10 = 6cb720fe416b4936f6a558df
+PersonalisationString.10 = 79a7332689b27c25d555a4da362247da22cfc4b050891b4e
+AdditionalInputA.10 = b078de49137002c94594754fcd5e87d37dfb3ed443e0a534
+AdditionalInputB.10 = 980a9816f5054a51a6d36dcc57638fb328be2511642c2041
+Output.10 = 5da237db4ab10c582af1a414895e1123db3332641213fe2b98b6bc0fbd0bc5223d4bf9279e3c9d29cc3cfe87f2690d19f1ef1c59c81a362c1279231be9c4bc11aeec2b3850278c2de9811b450e60dc630303196bf6396f1a56ff9c253ba73af07aedcca761571e9e705d3eed8c07a77e
+Entropy.11 = fa5e2962dd0b9865309ac777b82f71908b8b26e7d64a9d58
+Nonce.11 = 7ac03535459ad4c37a4dd6a1
+PersonalisationString.11 = 7ee7f75c5406360d50a484e0236e2144011701740238f7c3
+AdditionalInputA.11 = 25cca4922fac43959104249cad6b5c70c703c760ac81350d
+AdditionalInputB.11 = 5fcca95cca560af454b26f7790c9753a448fda278b4fb650
+Output.11 = 230c6111b9e211f39f54d8d4a8c1bf0a01263654f13e8dfdcf1e7d4724e7f3232c5fa1c246eee098621d6068a794ed5579cc8c32340efb49da83c0d649ff508ce963c0ecfba1a17af432e35d95b153470fa0633ec48f7476b47a1be6f3c432209e1fab9f544cf6ce56d3dc58aae26c82
+Entropy.12 = 057fd61e010f1654f6de8e2630c9125a829089ee9cb75e08
+Nonce.12 = f302d50c96452760b2300db7
+PersonalisationString.12 = ef35cdba4133e492226f777c6549582b946a55c7f33a801a
+AdditionalInputA.12 = a2bad98d0ef95eda7854814d4125dde5cbceda380e000513
+AdditionalInputB.12 = 65c7fad6b33db5314b2a5677e08f2b82fd5b32c82dfb87d1
+Output.12 = b62867a85e60a8e56910f86cae706f601e8af19e774fbdb1fbe6fad540bba5cef4b6ed3dc30d6f1431d9b39800112c271ff96a3cacd596cb246deea7a19a70d026254ea4a741b6fab456538da412cb0de7de93d67cbeabcfcbc8cd7ae83cd97dbaa6f77be17e79be36e563fabbdacd77
+Entropy.13 = 988cbc2e52b0a36eab9706c7489fae942d2ab0f22eaf0305
+Nonce.13 = 9d1ef6c55654a18bf23a208d
+PersonalisationString.13 = 58b59b66d938016543dd33df1ca9297f9d88fb77ed6c482a
+AdditionalInputA.13 = c225736dbe448c61ea7160fe46c93b1ea1ee1e8b6ca4b3ba
+AdditionalInputB.13 = 4f641f932289a3a71df6fccc3ed27103eebbf6e350c58d9c
+Output.13 = 482b711fffd2002377d900ae25a0feae2e5e6e8e4461bd894b68a9ca9dbaaac40df905585a7e1b5da1bcddaafb71f1fc2091b9c690442f32d7aac8299cc9e982d596a160844c9294424b68772da017b2e136a40db3cd6b6261c6b57061dda5e98730803026f35c9ef2b20f230f9aa48e
+Entropy.14 = a1c84e56a24acad0287f56a89ef64c0f2e954e368394eda0
+Nonce.14 = 80a078b026818b775885dea9
+PersonalisationString.14 = 9b2df6661739c99a27e4a063a838be615b4cb5b4afd118ed
+AdditionalInputA.14 = c9aac7bd9f15385facc344dedcfa754bc9f4f30277a3555a
+AdditionalInputB.14 = 42de701acf5622b30e7672bf7115043a9912c1758c1b316f
+Output.14 = 972ccd5aa60966bac39aa9c891c7c513244efbfe3446fde6806cee991851f1e4b3d4a4a0c04b57242deb4f53d27040879562fc5b32621b46a642f3c84063c5195faf9b78ed92145821ae554d58325b03d60e11461adaa8ac87876559e1cbe47f7b5c33a8311294b0e54a44c97d4d2c9d
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 476f962c4eeb614164d362c0017c48a43fe538feeea16ea5
+Nonce.0 = 51e3de54f3f2d727aa76976f
+Output.0 = 0293a8d499efa54d6a532b3b7e3a559cab82974072a4eb0d8a07e2944fa2ad7f067893646cadcf71813f38338551c26d1ea746a7313ac42a7f86384f20f33642effbf49339302702d4c0f4d1d83eb4e75c59d2e3be3c61f02bcaa3da262a72e81a8670059a004404fd9439e40419f713
+Entropy.1 = bfe84885903801c141d5b8ed54944d3f98190a7045f0cc0f
+Nonce.1 = 8abd859c9bf0708b2931470b
+Output.1 = 1bcd70dd666931f79b4a75655f729eef2e2ae2967ac299340df8766b6b18aea96c458ff98324f10d8427966dbf32a1bdeac1bb18fb2bed59903f4c451b10ea3f6d75589563d7b2bf5ff7ba8aa8d72d262b55696c218be577aacd1c36035578f23d3f1a06e8ed0e6e396b82bf228e2c6b
+Entropy.2 = db5496a9249f4ffb57ad68cd8cd591383e776fee0ba209ab
+Nonce.2 = e0623333ca49346613f6641f
+Output.2 = 8a7df25b58ddb89a8fba79a8f81961cacd40d165fff1da1f6442ec4d9115a2f32c57db0c696b9fdf02c45040d3e06f39b3164253a8784f173f0a033bfa3c62b7285fcc43f9d748e3ca5f126b0736488b9ab978234f3c5810fda543e371c9afadf0b4a50461f1d7b4aa6c9bd5553a008f
+Entropy.3 = bc563959caa44290cb41372e9fa7a5f26700af7ddada3261
+Nonce.3 = c0a014fcae7ffaaa7f7a300d
+Output.3 = dbb3be4c1413680aef0f240b7b7f75e96fea98a39591ad44153ec332b2f13480ba4d3cfd93f0d2ab849fdc19389475a4e9462f56d85937a58813a076258470fcd0883e77e24ef8f67b0580a0ae14ed446620fea0eb71b60b1b70d6392711f0427c319295a6bf96b5cc52e4e570fefaca
+Entropy.4 = 1e8f4da6355c99108b8ad988224db84ec915e3050a9d8079
+Nonce.4 = 395656aca928e3ddf4e3a609
+Output.4 = da7831295a245a683653717735e5075e86d8fa2e2fce6c78181830e79fd1ea28cc476ae2a313ac50d5f20dfe191f3e77ca6222ddd2beb06a7429ce3f02059fd4ea6b48e12ec7b2b4a8dad880d97db892c1e070eb954953f7a4a1fd79530dd6809d2cc45a6fa91bf38568debaa2d8326c
+Entropy.5 = c179157f5943260d6ca255b347020f467b94a435f60ba699
+Nonce.5 = c5a511e14773972a65803904
+Output.5 = 1d508b40acbc6316564bb9758495100ae265f34a9b32969cac46b250d2016f65152886da59801890e1e4af0f673e5cee3755e5be09d6121679577bc0a11ecd76de3f1a8cb7a88023b8c543bde38893adb3d2d73806fbcf4a6460b8da68f6fb81d7f1939ab5f6dc8f52e9c4a30a610f63
+Entropy.6 = a67549626af635b17a9d9f876a9f609f2faaa685e1d8dfce
+Nonce.6 = a9a089e1cd938fc52d3fccdf
+Output.6 = 999af9cabf96856d33f6c76d25fb7e26aef3a7b9b7f4ee95a378be081c3112db71613a4b157fe41adc99f036e2661ba623b95a1de71f8c07144dafe46788c152419f9242b92581f23bd179e975eefe4f87a793f2643c49faeb993271efc262b08c97b67fdd507973a34b2c0a5d35f414
+Entropy.7 = 89f7c49a3b568d133c4552018ae715d0b1c8875fa8e27636
+Nonce.7 = 21f9dab09392e7fa9d3fabc5
+Output.7 = 300c2e55e78e8be8faa8904bdd1bd567a0d3531ab8daf479370d0121efdacfda8fabed4e78dfa14a42ea6d2c9677f6c7d475777731ce4f0f21bb3b1c200f843609d2b05d1a02a256c318cfb4d9aa38a8768135eaf1be100e86740e48381f98715b4ff397e2404fe833cdd21988c0cf7a
+Entropy.8 = a7bf882760aedbbf6f4e9cdd90698aad718b095e78ee940c
+Nonce.8 = fbeae860ac5ea09d878e2977
+Output.8 = a091a067ff1e9ac2576b4a449796b7e8a0870a836077b6197f30c5bfe45ffffad6df0c1466b303b8521feb80a9a6910df93548d5d841fec1194e4c3c9bc59675007becf16c2b144e3304bcc4711a059e9687d4c1b3b09154565d2d3cca7946d445551f279f0e31b6afc9d458cb203c1c
+Entropy.9 = 65112a896f101f7bdf37773f0f238a9899a82657dc67e0e4
+Nonce.9 = 111f4f73f43c7852f3679d0b
+Output.9 = e3c38940a1a53b3ba2fd18a4eb7e86e3af137863afe89b0af7015a1d6381cb994a97dec587e71576b1cab739bdc3a30d95bae3ac392fa517b4681ea1716bbbe44b40a9637e7bf83e1d2c89af1517d1e7598a4204917f6428cd49bcbda600fe2257874047c11d19a821b1bc3c0fff32e9
+Entropy.10 = 3b00c75d70cfe93077ec922fb551edaa872224eb555c8b64
+Nonce.10 = b15f67ca2af303e987256bd6
+Output.10 = 35532bfee8f3cf34a998b3b97b5d2cf2e81d7c8862c60495c8474911b555131a3869b2033e439743460cc5c0daf4c914672d6ecdb5888a89813f58f950f4c1e91a8cccd76f641ee7762152fd2e2151381a2dded48b62298eff2b2dcf50e2631224a8480aa4f2777b9be75c903ce5105d
+Entropy.11 = 9208f66adca82cf2493939e3e83e07599be808745059bc2d
+Nonce.11 = 91a6fad948f7823aeed70421
+Output.11 = 4bd4e563081f6a8c07652991ce764a472d58788f137646be0737e7204ee13c3ffb4f4a08a88b2e1ed1fdc9050fa001bb83b2bb48faf0ff4a33b571f9508df26e5d5a84a8fd90b7f5b288493d18046067c01bbb30548a52117192895e0abf996ec676e148c3d1013a3df4052fffc7b6d0
+Entropy.12 = 6616a7ac20360142476c3cd2edad8ab48e63266d18eb8472
+Nonce.12 = a203dcccbdaa50c88555476b
+Output.12 = e252d1fac3d3f356480eebb844f2cb8d2345ee0b069055cdf860142a220d820d944911ca25f9f5efc50a1a89f74d1ac078106ffcd5b073420f5049e32a8680a3e6b5d6c48703a67e0b8cf867ddef4f551447b4a02be59203b8938d88c902d38a94e67526e0a9df21c8b41ede44c640e2
+Entropy.13 = cba637ea1b6ebe05a14697e396b94df920adf1657b3fbc54
+Nonce.13 = 92ed0d7aa82507091a6de29b
+Output.13 = 3a9363e56704f53978f2b30888d9ba88034fc0acc4144ea4129035f7ffbb52e84c1847b3777182c132ba50092d15a29a7ea784eec8cffab1353194846e22355782cdb479e5df62d3a31978d01ee8fb23c76704e416bd0955e5007bd41914783b406607293577e42716e74e3fa81f9db9
+Entropy.14 = 47f141d1d0142d53c10628d2d1dd77aafc11ffe45f29b126
+Nonce.14 = a1e958e036afd40059ce9639
+Output.14 = 2096935329ffd975154c38a2c22e30ef12b7acbacd39868032d6eb31a596e617fc7e05026b3dae231f256ea94dd4ea4f05734eaa7916be6f846b0304ff0de389f3390e51641103e7dedee99e56d9455c80a7e10edfd2147a50b3864b05443a1646fccde2197af1d1d72ae3c2d4594218
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 57ed9a49fba2571876acf0dd2bc02b89c5580ce818441551
+Nonce.0 = 488bb9f803f1fe8f5bd3fdb0
+AdditionalInputA.0 = af56a27f7cb757182919b32bbe8e04476e89458122244fb6
+AdditionalInputB.0 = a4e6fb9e9849521942f6ebf0dd8be54ac527834681732820
+Output.0 = 027bd4ba165cd02c702b29a091a3a41704209da5ca6eb8289abbb6d7d7b6ee3590111c17971f7c527dd193ccee331c4e35e466f7af854fbc6d1af36c9a2e1f402c83a8baa1c481dc7702fdadd846760d5d9748c7747e6222822d322656b0787e4b0d1505d4212f302aa296588b2eee33
+Entropy.1 = f97eaf2cea50200708716bd2b231896ba0844b4e371efa72
+Nonce.1 = f10beae03ad82e7bf049837b
+AdditionalInputA.1 = e5fff751d7a3d606ffe1e0f2d9afe25c8d91b5d830dc6971
+AdditionalInputB.1 = 8f0606eeace7453bde86feb1f75de6ac185261bd892d333e
+Output.1 = a9256a7271dafc6509dd7f384469a76aba8d2f4fc72ab4da2e3925c744f96e3625e954dd27ab4050b535cdb8cf91da0811fc8b19386e850ca4ec545e3a13aca725a3af6592de9ec99c1d427d25ac044dc29b041abebe511011f6facf447355c1af072f01b4cde8509f446f2e12b91619
+Entropy.2 = 8cd5d75231ca8e4792c83d7fce6f88cf08f5ca6e5993ae84
+Nonce.2 = d14a6b389365c5cdad41f80a
+AdditionalInputA.2 = 502cdc2c3644d478d1600da8f1c5e8bb63b63baea6de1a09
+AdditionalInputB.2 = 36fcb7bcaee267608d3a8184f5c0851c7ba1d8324bb7718f
+Output.2 = b7712adf83aff24bfec8f752160fcef6c2a0b91778932c86b799dd18c1d9ddb6234c16667438f98b7ab9ab56072ef02d1beed2dc7a31a4ae75c9ff0ee8791e1783ebf121e3178dd9bb67648097bccb7225aff421369ffd96eb124fffecd03c9d2f7a435755dd3e11f5aa4d95beb9a665
+Entropy.3 = 7a8a818fb69ac1eacf63b19967e49f0b7547775f5223d248
+Nonce.3 = 8d02f1ff4e39f5f282702b71
+AdditionalInputA.3 = e21c1f74db73d31df275ce1c8052fc3976abcffb47aa5fc2
+AdditionalInputB.3 = 4f5047dad6802910e7b2d6ec22002508c611456bc758cf92
+Output.3 = 04074a749d03cb6849ae7125cc4ac98f635b283732e22a4807b0681e558f471d9757e97cd33739b49fa3634cee0a6f7475c9e4d180a576406ae1112e8e711f581743a8b8db681867afe238a61b3ed6a941e64dba255151de2ffc30febb11a5c0bf042b672948cc5b78a58af48e7655ee
+Entropy.4 = 144128dfd03a9e5710c7a87e0612d5676d85e6e698cc955d
+Nonce.4 = 8815d69679f4af3360839f63
+AdditionalInputA.4 = f46a0b8d495a26093620d31d048be723c3cd362f0822960f
+AdditionalInputB.4 = 1606abb94a27dabba952e0528cff03c53052d70988321b2a
+Output.4 = d9516de14de47c0497a615f8a2f24638464e275ff098f412f73fc76ebb856f8c38fc4ffd028882ae7a6b93f3dedcb2ff427bb37572bcf1f85975cf15da7a791def2ebb1522b96c85e2ccfdcfbdad10fb82ffd8bc255f822eb0b483d2b00ac4c61c6eae2b9fc0ccaa2599393bf9f7b762
+Entropy.5 = e7f51ad21fbdf706d26bd2103890d8ee5827545468a48c51
+Nonce.5 = f86f36d35d2d9a1690634c55
+AdditionalInputA.5 = ff6052c815247cc6414c0c1786462a3e8604d7dc73a7cef0
+AdditionalInputB.5 = 096ee77eb9ab1394e5cc1f9b9a98974256432a211dca9e51
+Output.5 = c61380c7f75081b8a3d5782a5fdd92b82a9967cd278b79153c478f73e9b88b9a6c669f02ef0e6ded7a3e4a43db39cd68cf4129c5cd8c4eab9776d90617d51cda2cf26f4884c1218552f2087b67af531c1b7f3aef5dcaa22c7bb5162ff999d81fc69e1964561ad3a07b9fa6844ed49b13
+Entropy.6 = 6e3134d888f819cf669d8c92861346b2463511e7cf7f62ad
+Nonce.6 = 4438ea59fa6152be195106ea
+AdditionalInputA.6 = e5dedd87e5e29bb24ac2e61cc5c65148fe3df609de3f342f
+AdditionalInputB.6 = 1d11f10e5fc673406a399fdf9189cbcb6751617baf4ad5cc
+Output.6 = da1d8418abbad9dededcc9332fd405e649b7238def5313c7b9a6287eda75df3fde1851ad1f4ea99e0e80958373c6c365a19ac3679e15cc07f704a925c76fc78405ad78bc2d193dff60ba57f4e2d715b3be2d7f11102751f300b7200b31e5221b489b6f736fe042e283b5cac173b9451f
+Entropy.7 = d90dc1778098c574e2fbc186b203cb8cc017ce8cbd313749
+Nonce.7 = caefb6f0b71739bfa7aec315
+AdditionalInputA.7 = 925444c097b593a33d53d08a29b5cbcf785642c43a6ec875
+AdditionalInputB.7 = eb838df62496cd815efcec2293d131fc6b77855998721613
+Output.7 = 8dc7b7567de8ff7a1a375a4c8c621dbf3ea360e63e081c66a7a86cebce2d88cee483657217b21d023e44fb1252c8c83de4a74249e00879d60c3a357bf1c13dd9a1a167c5f1c012db386646751e4c35675c4bea2bac2a7eee550cd8e759295e523279c3eb88a85e63c85e509c029152ad
+Entropy.8 = eba72f4fd8f29999f93d0407cc412760137dd5f483bc985f
+Nonce.8 = c9820bb038d062b396aaf824
+AdditionalInputA.8 = 89bf37e6a1b5500144f29798eb72f1dd4a976c855cb41c3f
+AdditionalInputB.8 = 717a3811f9e7d687a02b90fabff2c7e947d344f43e49ed2e
+Output.8 = 6bf825e0be465be76cac3d7c94c908cf9a880a955da7b0c217a1aeb3e1460e5003b5d8a815defbf8f6a896f9395b201a9bce861409e99123227da146aa1d864773481f63aba0c19e6070428ba6a5c05cb235929abf65bfb4a478643744e4afa6aa1530459f21c9cead4843cc9a330d02
+Entropy.9 = 56e2c5f09d263e60d797c30945d92df3aefa0d8ce29a273e
+Nonce.9 = 91127569f164e04c1427b2d0
+AdditionalInputA.9 = d6a0db341d30ef5988c9e6fa7b444f661aca4ff963e94645
+AdditionalInputB.9 = 43d236a9d17fb6cff6d492eb1c82d2606f9c622b1618bebe
+Output.9 = 2bda1094866b868bf8b100b3ca7a3ca043533a665ac4b1c63d13dc198d79fbc1d919729e6427a692d5b15108ed6401235ae286fce4c2c531337d378bc4a631388471ea83dc027eedfce1ce8311891636525d0104a8d76eb9df8e47b8c64c1eda0c773d8840dbc19ff51bcdc416e77002
+Entropy.10 = 8aa38e5726c98f290dd015d9087132c5e16dc98eea740ff8
+Nonce.10 = ffa02fd0693919009200b02f
+AdditionalInputA.10 = 67d976b2adb1d83e950442d729411924abdc3fbb761c7cf7
+AdditionalInputB.10 = c2d44be44bd4a4440d459ba25d767777edad914427825873
+Output.10 = 8d19b2a51412ee64a32a2233657e16715cfcfd2704c4a037c4e30efb0ee7f0c191a8239779b58d5779c342dd44462682cb06db8a09380ec188b7039b1a20441f6c505b65d4f92e31e0bdb3bed1305f1e3b4fb45fe97e68579f140fbaec6c6102058c4ac7f35b562602dfe5cdce2d3cc7
+Entropy.11 = f1b8973320e94d0f142f26c497bcff03e934b02abf151a13
+Nonce.11 = 3defcaf4a83b45bda6d73251
+AdditionalInputA.11 = 3e6c1264d8d62e3dca2e4dc3fa7407f42c68db0b81df6763
+AdditionalInputB.11 = d4195a1edde9ea61da98cdc2615fbba972f281c9987a29a8
+Output.11 = c2a184935fd1b02602a1b68b5046d894a5ad5d66535afc55ed1b10a8e716e7b777410c30517b294250d3cd8a1846bed1d097ae60a6c837210fdca052be42d6c4e4cb5b3ca6ed4f9e69861661d3346eedd9515afe7916edfe7ad9b5cf1dec4aee962d4547039d53e5e32a16463f7d7fe9
+Entropy.12 = de70f82db3356421f41b6658e0f9a7a3cac77de47b7350f6
+Nonce.12 = 815776b7591f0d222259030b
+AdditionalInputA.12 = 5a98a404604feec43818b62a5a917054915f02b2744fb942
+AdditionalInputB.12 = 42f5e90130281ef9d547da757bbaa496d15b574e170b54df
+Output.12 = 0534e51c3cb4b7a4c2936899d4be18b300e6aa28f6c7e8690f6647f8fa089e97c66dae0b37a4cc03a3aa4e292037efbe2bcd14d4204610499faf43d40d44ec9f149d66fc58d9785aafc51156abf13f34015d8d189bfc0f1a06e44fd45a3a30251a9495a096c19fa01e0252065f820872
+Entropy.13 = 3c46f1ba7201b00b9780490818edefb0de90c4f92729e064
+Nonce.13 = 57e98935fd7b1d57925632bb
+AdditionalInputA.13 = 1b305372315f9c2c97b9f55dc955e400fc192a179bc48d59
+AdditionalInputB.13 = 3f62ad9fb61380cece220ee03739a7b060f8fe64e35db483
+Output.13 = 092c0b0a9291f782fabd28b82137294d2ccb3198bdaad49b2ea34b8abcf0f5618db6baed9b821eb9fc3598ff44b57b2a0ec113f3110a36066e964f2b403135cb248dbe127625e5ee3252abe5fd2c2168fbb16436986b984f46683b68ca23bd847dd5b9d6ba875df7a92d367e00895268
+Entropy.14 = 9a92ccdb098bf070241207bd861d895a196d7ec4931c5528
+Nonce.14 = aace9acf257721de5c9ea06c
+AdditionalInputA.14 = 49a758a4e0a8ce69aa2e5f9b7940c6fbcbfc4fdc91165e4d
+AdditionalInputB.14 = 9c8ebc02c3d92d33112a15747b6367b8d6db3447cb9be2af
+Output.14 = 70cf10825dab6c1abcc1532a1b2bccd96f0638d02eedb40a7ebf97093f5d0295b6bc74d9e48290ab39260d684effcb401427a4ca62b971e5a31f06c14a9f8e3851c3e79dfe129ecf8a8e185ee58667e2b692474a0d5f0a39f9d794adf1cd71c1266563dde24dc944661acbf849fe69fa
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = ec6d04a3c5e5fe627f143eccae0df8051d130e1ebcf3f7ef
+Nonce.0 = aef3d3359581b8f21aa01856
+PersonalisationString.0 = d8ab28a3527cd2bbcf40770af6ec5546870cec6511c2d97d
+Output.0 = 8d98f91d2e9acc94c1d9cc1662a1afd58addbf0dedc13a006d2cdbaa9e0df0e98b78f9ff5d893549faf3364c68282cecd2a31252c598d3514732463b6d73e7e972fabe0ba2d8a754bdeaba3b0e5ef1035fa661f6f62e5f8b1161ac351084b50cc1f75deca2a90c9c77c458489a5e1954
+Entropy.1 = f1d31fe67dbaf10a0e4e6a97d4d643ce773be7e2a0013ac6
+Nonce.1 = 2ee61ba2a50b6db2a324e42d
+PersonalisationString.1 = 4b1f2056519b4439acca3f28e7d973c517c096c310e362db
+Output.1 = f5acd8efdf29fd6e3b0b16dbe20b71a6c5f735252c4951c06bc70d57ec21ada417ecadb1317a6fbcc074a8e3c7e2593a550b3071394048076ecedd8bd798323b2fda1a6257b39dec8aaa4ef048c96a20b79016d54037ecc8f2568c4f338f635a7e0405cb21554bd4cb8d4037c1af638d
+Entropy.2 = ac3fcb2b468aaaf59907f5e77a607c9401bb2b23fa4182ef
+Nonce.2 = be792f858062ddbab75ed0ad
+PersonalisationString.2 = 6206da440125f222c8e532b2ea4f9ff4f1188bd7154af10e
+Output.2 = aba4944582fb65ca07b36f8540d7778bafcbeccb33261122e723c4373307f4541e4ca8b6c65eb57fae6138a42579954deb515e4d3aa31ac2e64246216a15ee4b4d8691982ebfb01552a354c0b946e196406ff12cbe8d8610311979377670ab27e9f07a6fc85ef97937322a791ef014cf
+Entropy.3 = 32283a9016b6689e23fd25b7f25d6044560218555a382a2e
+Nonce.3 = a7b0d3f0554c275b17409e77
+PersonalisationString.3 = c91a407090e025d17472f9bfea67727039e807b11711f1ba
+Output.3 = 89cbd90018d8bed92e13f2f8e3553ebbc7d92ad9f9a2b522142f2d2fc9ba21d51743aac00f9ffc8600a923f241fe07a552096b20dd871ecb952d6146550deff5333f575146b98b87a86def57aa767c0de5d449a60cda8cd097d6e7ec426fbcbe6f226a7abaf4886e06cd7198465d9806
+Entropy.4 = 27aa5a89bfcbc8f45d630ef7039235a1491270b9ee12b1fd
+Nonce.4 = 25e2db1c4a48822932282d4a
+PersonalisationString.4 = a7cf93362700094d138a3480f6d346ff43857a24cd5e57e8
+Output.4 = 40d5a08d16ec7c88fa6d30045564d2dd4c34de6c9b79f5d0bf88733bcf1dbd20937d83385a4d2047c4f2667827747aeb4c9278f1bd995dcd7e9e1bf82b0b2561fb81ea5af2985a848ad585e6cf0a70d8b8be124b6428f7ded06dfe592e01d822bb594eb1914a8ab96896c21c1692eff5
+Entropy.5 = b4b85e046f08dafe63637c4850bb7948f250eb1bbd7b2d5c
+Nonce.5 = 7dd564f0a77bda9ffc15fcbd
+PersonalisationString.5 = 8913bdb42fe26b3568d402ab311201df8219071789d67f3c
+Output.5 = 1e5c96141a57e6ae1e4e38256987429d9fd66242c0163f224b2e2b4668f20a26ae7ae5429a91a2c2dfdd187b5f48fdcd193e5031f359f91e7e5966d71d8b4f69e390b5055e794d99a3713d6629fa21603a07758ebee379625e289a2cee34676ca1612b953e4e0804016ad87332a7c200
+Entropy.6 = 50868f3a44ce812f81b55d11921834474d8ccb6c566f666f
+Nonce.6 = 88c16a2e721057136deaa738
+PersonalisationString.6 = fb2ee927dcbe7e354720680ab0a2f654d37e75801c46367d
+Output.6 = 345fe914a47637aa9188b30286fe334bb4a535ff59eb3a3773c6788a8f23a7a0a327885d02e0b99c1f7c20c80f945cc267e24d21ce2f1d672dedc65efb7dbc8170f18f05ffa092f8f46981db2fdd3b09083f846baa8a42cc5507af521661d821278694ef387dc71e39f4dd6fc334f09e
+Entropy.7 = 1de742d420194d35cd22758dd9af62dd2616f922876d2815
+Nonce.7 = d815e56f7227afc5d2b8bbe5
+PersonalisationString.7 = f9cae04f2795bebfbfcf216d5bd9504e56e3708c87328106
+Output.7 = 9407f9d4c6e9c87f457f3b8358eec03fade91b2ae164c5720167bd6e2b79341a05a2bee108fe9412d2d5c2b8dcd9d8973935886ac32eb030bb937e8b4023950fabadbe14d6395df3e88181d504e9337b39e2fad7428e100758780941f216b03122522ac54468417929a8419a52e8e6c8
+Entropy.8 = 7ce6f11c25232a389a729ca6b348fe95e40b6d0d7b635a7f
+Nonce.8 = 507f510c0c4ca5b400f52ed3
+PersonalisationString.8 = 4c5f000a9bc259a30dfebf0a94cb46db36599df5f315366d
+Output.8 = 70c016d2aa32ebe0dc02470cbc9091f49e626c835e651e456590d5b012dd0ad52e12eac46ce3a7ac06995bdebe44e51a6de373f5533004ceceff34ad26ac2f3959d0580ff40076dd193c8e3ddd3abe1353dd8280b7856944437aeb7a8444ddbb8e925c23f08f35eda55a6198eaf88a34
+Entropy.9 = 6536fa13cfbb49ebc28daf8f4afe32eba911c855c7720b7c
+Nonce.9 = eb6fd6d465013e0c09fa01df
+PersonalisationString.9 = 8e97deb1da5c91712ab3fcd6b2a3d2e2cf7ad121e21b6180
+Output.9 = 348fa39ea0377d1225dfc5dbb742af1edfbb9a6bd6dfbf2a5084a351dfa04a002676931ad738ec6786ca5b1e4cef0bcbf10c6971ad8975e6929b2d9f6662e8adb95c85b8c9779276195f6a05a230ef2f1788443c959a665ef54a43142fb41449e5e4d72b7229f9635de0327354744a6c
+Entropy.10 = 098b2473b93ddbe231bfeed3189847a312bf31be93fcc133
+Nonce.10 = 42b193b577d8bfc1e0395735
+PersonalisationString.10 = 812cf649617f0fd152463cd898ebcbb9a95bff1ec387b9e4
+Output.10 = da4d2352096ea715bdf6ae24dbab334611e01153d1e0a18e6b70dd3f72bb644f00ee4f01e9616313fdeb02c9df8823d1a36e6c85b6c05383ec44cedc844c5647ef234fe67e1626831e8c3267304c2ee212383459dd9e2d091c014dab7689efa371cabcd950b13abe1b6e818122a0982b
+Entropy.11 = b6d5919c608b3fa0996f48f1051769e94519ece1375df47f
+Nonce.11 = fee339b6117011a67777f269
+PersonalisationString.11 = ed9ac05d62a4edbb359a4e80d4ab52660cf6d54f6e966745
+Output.11 = 62f982f99136763a48abe593acdfe63f485ea69e6b0d2943f2982a5eb1c874649cd39cc7fe82b1ef385d0e66236234ff3e2f584c26a7f21cfde83c32689e125e52a6a53f8cf2369bdc6a6800d731f9df627291bd312dddd9b03e02a2e73f22700ac02b91f28353c90a0a3d941f4ea623
+Entropy.12 = 48e12559a63a103b22c4a0352a419e481b7f7a91d300a4dc
+Nonce.12 = 82a08743cbe1d070c61e5af3
+PersonalisationString.12 = 65e365b9c5ea8781e4a12bd74902f3702f6efb1cfe5b25b6
+Output.12 = 6d86e32d1d7e4a7e4e87cb6970e09ac7e97ab35283b63a241378c417632aeddfa078decddeb709624f5912bf35e0cc11dde63b317f1694a9b6fd9533469a1649fd9310bdabd5faa02f8048826eb8d3fafec63a0d4c9cb221b35a92c3f1f50d9efca23afc5b5f7553e9bf6100f0ac42dc
+Entropy.13 = 6009f2c9e3252a92663cdcda8116da1404d62078a6f1a124
+Nonce.13 = 49bd6047cdf3ad23323da8ed
+PersonalisationString.13 = 26c90b6cba78c7fc2e3a64f03f280a6b6d0e5bfafcfa977b
+Output.13 = f28b4424f6f7059f1741e600b88d9b2e1fd5f2e5cad1b121b886f00af6f1e10d337cc1b5a3b3b5ef6aa755f2160a66e78d841ab193e44ab90236e59855be7cdc9b71c63702f4c2bb6f15a8050b5d731c1a67c6deb7764fe29d6825e19009ad835f95015f7559bbb0e042c3e3867c9fa4
+Entropy.14 = 337343cf9fccf15a2bd2d7c6cabf6321e1a270250cbad4d4
+Nonce.14 = 82dfae196513724ae269204e
+PersonalisationString.14 = 6e01d897ae919812b8408f82edffcfed8db6df2e2cbebd95
+Output.14 = 6e9bebf2e54d8da4e8ede97ce463239245ff1b021acf4441312ddba96d1f3d750bf2b9583a8aee76e2ee36a56d8e2fd4e11377d15ba3ad0876fd467c375a744240de0a7b38974e0e7b27c3917ce4e22f2bc78861f6f8b1fb42edbb1b0cb869fe5169527064cf2f38c0154082af5457bd
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 6e4d2940460dfbd41e1c73042d21f62d633592c44e83edce
+Nonce.0 = 365a5cc795f7dab209136655
+PersonalisationString.0 = c851f06ff7019f42a82ae6676bd40564d4f9bbdddb80a195
+AdditionalInputA.0 = 1eea9031fb42e7a502836aa6137f05d493333d6b6e3cb863
+AdditionalInputB.0 = b234cda369720bcfe49d09acf7d90f8a8d468d5f3fbd95f8
+Output.0 = 2be579cb4182fe2a6581da62357cf15d210a13c0319a19547f908ba85f4323822c877a1ab4a2db438adfb53a77ba61b56b392feaa48d3a4026fcdd4f9122da04c36844a5390f0896b637240529e8338760f50ac6a5c97e69730dc70193e9e2a587c7d0c8f60b9c3c5ca1d2a1835ccd4f
+Entropy.1 = e350ff0d2dfc7287bceeb35890a8c15d38dde52b619ad874
+Nonce.1 = 276d551d78fb5fd9ca975733
+PersonalisationString.1 = 26082fcd908f3abe2aa84d994ededf8644074f4533b0c30d
+AdditionalInputA.1 = 82deda3adf693b1fe188fee404172fe7f04e7e5006710cc6
+AdditionalInputB.1 = 30c1b7ad057fc6aa6d88b8458b108fea96fb0fbfdd40f77d
+Output.1 = 0503dc0006ccb729fa9ed9c8f126504d7b61a42a3451cbb6f5b0df877af083083f1a0caeb07d770c96be4a98fdac5dad75c2bb6ff3eef5a76268b4080b3b52666cc476170b17b96610da63dbcc8183d966fa1cb608f393f87c09ef37a0976fa88fbc2171f82631964d17722091259a8c
+Entropy.2 = 9e43d636e8546d2b308d1b8d63b8a2b4b48d792d74f75d78
+Nonce.2 = 04d72917fb0cdb3b04685aef
+PersonalisationString.2 = 0ebab05bca590442a477decdf924b72ab69a29fca394db21
+AdditionalInputA.2 = 83ff05444ed46476bd7edb540943c2d7d6da1ccbff1be85f
+AdditionalInputB.2 = 026ac29b358bd73ec4e4fd25c2ed282dd355716082136d65
+Output.2 = f4c39d38ec72d5bc8055f2987a7f9027d0a208ec54aa80db92aaac6c5c95984f34c6d546be242c4705bb61a1e9c52b45cb7aa3aa4ac9d9fc20fb37d3ae3a826761035e6becb79275126e1b85470824a1bb8857b4d54255783e80ed6dee3aa9e0417717ddfe694b79da325c53a66f4027
+Entropy.3 = e7dbc930f11c47cad1c811b43f1edb1d101c2754de24bf9d
+Nonce.3 = 5b3bdfbbf1e8cf7f14acb1b3
+PersonalisationString.3 = 4355af238b6c7bb775c5330f78c17462348ebd258d0257bd
+AdditionalInputA.3 = 5825bbee0a7289c7e1d4849f0a5c4876946daaf0a2c5828a
+AdditionalInputB.3 = d769c70dd273146606de46a518af3a8313a23b1d13efba62
+Output.3 = e2ad257cb76b72edcaa0be8bd98cb768ed88387a30acc5210ac62ffe4d655f3c1b12da9d43104a0c09c48a6410baf9744ce26291f2f66668532438cf6fd21b5fa2caf9314f452f8d0170cafadf450a8916f3f95a65997c439fc1aca0329df2793e04f3ff53e57df913329c74a2e078d0
+Entropy.4 = 7252fc8ed77209be35d42b771f5007bff64ca5fa84f8eb95
+Nonce.4 = cf279739cd16cccb67acd2bf
+PersonalisationString.4 = dc303e18ca804ab2b496bb45cf7ca9c524302d086adb3548
+AdditionalInputA.4 = 2ee0a4d9eee2a4ca197e5a43de6b8ab2f29838b980cb0a42
+AdditionalInputB.4 = 2d522785f489fa25913a5760f92551f3218c2591a8ba99a8
+Output.4 = 065453e6406da76a74064afdb6427145bfb7af78f727006fcf98935a7bd49e7abbdbb971e3003790b3813f702b9c7d2126afa2842e592bc3ae97da02d0ee65ec7388d3937d10367e46abb204dbaf132746c14146fd1795d4390edd9e861b595a7b059426a049fc554928b4e28b9cdca3
+Entropy.5 = f3b4ea208a73b1e7cd50a69eabbc0e87c9199ead23fded93
+Nonce.5 = 0de6252b958c13f09658d31a
+PersonalisationString.5 = a1486d7937f1b1689d2cdeeffe889efff4b083e31cf32cf6
+AdditionalInputA.5 = eba813f6d050984235906af01b1ef86347a8bb4ec013949a
+AdditionalInputB.5 = 94d64a4be47b0b817889033911a058f7d35486359b09831c
+Output.5 = 1dcb678bdc3fce11c7a1298fc1d5ddbb3d338280b1e8f0b769e6e2373880cd3219fa51d103ef5ab1b00027b9d82a5da47aa1cf6dbd8aff93a7835bb99ca3bf9989ac6f7f25051b6a6fc3991df95cb24c2f1011296f2793ec08a84d50d2ac9db92c0e17c13c96db3433c28b3990165a18
+Entropy.6 = 67ca2dc211e366b804a09507909e414173c5969809b6891e
+Nonce.6 = 9e02c896c54dac88bb7d203d
+PersonalisationString.6 = 2621394152ebf2b2cdad3589bce8fc6f1e1e368fdebaf33d
+AdditionalInputA.6 = 4db685115fc893e24a913f2b68a8c01ec21bcd7910f67fd1
+AdditionalInputB.6 = 1a4114929206b34d25883c88c1ab7d6aaac1a8e2143a959a
+Output.6 = 77c5b6ebdd3801e3f53344e19ef48e06e7a1be24a553c48687e943928154494c07fe4439732629115324e7d0443afd360c0578e3917a66a2534f52576662b0b7494e7620d24ec00491e79aec4f1ee1f847ddc115399504a0ab0e51213ee4c4189273d5f8969246d3f0d823e00d665ae5
+Entropy.7 = 0f00a5e8745b3a1b4f94cf750984b096d6b009b7803b7c2d
+Nonce.7 = 533a354ffe79aa47264946f4
+PersonalisationString.7 = 9111a440fdf9bf9d35112665be775f911c03bdaa88d91319
+AdditionalInputA.7 = 6f2421cc1eaa8337bb3cd46e1258ce746a36f23f3fb828b2
+AdditionalInputB.7 = 93a6e1b05e44cb09d5ba34731f9db7d813083cddb0143016
+Output.7 = 11f174162271d85eee49cbc2abfd21ccf5767d3d7c496d8ec4d05e953576948dc5d5607a92c950dbcce1cf9bee799d21fd80a79699c5f8d48d45541184da907ea8e558df51b2841f2bc6b3cbe21b408b2efa67ea46cca6b6f8d0a0004953c542127d0aeda2c30cb9846b261f07efd5c2
+Entropy.8 = 27bee9d9c7dcf0706048a9ff4e89a8a543a6176e1165f018
+Nonce.8 = b290f7fc0eca4967fd8b9b91
+PersonalisationString.8 = b827439cd5b23ee1d2a59b74338f5630ee8fce0d872e1c66
+AdditionalInputA.8 = 222157e5488f3b73773f424a243c879184fa178f35c01ddc
+AdditionalInputB.8 = ba1c25441c4c07bafea1c0a33f9a80d5dd121bc6e56fd3c0
+Output.8 = 25977ef6eef6e05db9f7fb78512d43890bb85be9567e268439cd9a296ed863c9f7cdcb9153fc0e35c5d3c135f2cb38c5247cf7fc69f1def95e4319644578492b8f10c5158e3eedeea23037d1f2043858daf7e508cf72125965f406ae8e646b663ea4173a8bbaf8bfeea829bf0d157a26
+Entropy.9 = 2834539e3fa297082059e7b26ebee3ff38fe12756f044da1
+Nonce.9 = fdf297a9bde8d2c507df4b77
+PersonalisationString.9 = 3c6602a01cae08d5eaf6847394e10112f72b723c49e47701
+AdditionalInputA.9 = 1b987eb9b82aedd4c2ae942335c13c75d6389d6f4159f7cc
+AdditionalInputB.9 = fc7ab0489cc9ebd563b262bea427b82c2da2eb754c7a0b56
+Output.9 = 03a8c8966c47075bc7d9c6859c8891b9face30d09b6f7e5c4e108391db5c271ec55fd4f3d91a9e7172bf352232c5e4f92816f13457a7ae09d1bfb1fa2c34fd229cea72707d6b74190ebb4bb1d1d076a08506d25d123257c42cca749eb613d430729daa2c8a9461495d86a6539a222e00
+Entropy.10 = 95e91b1792b10fe833b644f5235c6b90791242570e67666c
+Nonce.10 = 529b02bccff35643134915a2
+PersonalisationString.10 = 109b4317810b510ca5b318416d103b334f156c6670a16d98
+AdditionalInputA.10 = db2dc2227a211da34c58b977e6ab45877e641751287f5fc5
+AdditionalInputB.10 = 8c85677eb8b70cd69ab5f8ad7bc26025e5971d13caf92508
+Output.10 = 757643093c0956fb4e3ea5e90a0ca0ddbe1fcba6a5de312701900a1d9e34c8bee72a2029e8a5a59d25ed2105ef36dfa58fbf91dee667d31d9981d1e3bbaadd1c5a4abf40cf7e232d344bcd44d74efe79e6b23155211197c3b6cba26f4e145948ab1b8be0d999188184a0f3a275c1dce0
+Entropy.11 = 1a5884a115d4ecb53f95b044ff1e46039d9e4293f0992f4c
+Nonce.11 = 7bbf646f678a09e762649a7b
+PersonalisationString.11 = 441995088e01a80ab65449a091c053b4e0c1e48d27c88db5
+AdditionalInputA.11 = 1ec6df1a1516e666de0d83c53ca726b19823ea77459ade8f
+AdditionalInputB.11 = c3131ab7a7ad85fa9cdae86f34a79584c19a9099416d3e43
+Output.11 = 620c8ea5139338b809d6f2f5f6420e39efa2624600d4a577457365c72e7b87dcd891e7b4e73fb1c27c423511a70374b73425f25b2c86ee760ff86bb49a43b3f984a501627a0f6b751077134652ab19951073f249b3151e572ab8d65801f4a5aa88289dccf5b9933f73a8c847f7b3a86c
+Entropy.12 = 2547200c9ef949a3d50326e987162f40f7dbaa5f8d21612e
+Nonce.12 = abd90db2b48a25d576b9e773
+PersonalisationString.12 = 23c858d23feb4778c66d1e7109acca9080e9a0b08210bd49
+AdditionalInputA.12 = 4e57767fde19a96ee237bbc7e28f48c4fdd048ad735d218b
+AdditionalInputB.12 = 0a380d485a4c3accffa0d08304cf502530bbe3dca1099326
+Output.12 = e56547912d6a028e59577fdeb26c5e69243cac13a3798b21c79749607ecd255e4aa403cdd51d0d717aa8902716f7fdcb1fa0f3c382651578e5a6c6bd568a6e9ecec6de7df5f7888ca9a007ccf48dbceaf27061a8e66e65a15158c26336e311d6f5eb496781c014bdc8420dbda6661ffe
+Entropy.13 = 46c98e4b13b41118b76f59e336c71589c93bdb09fa9b2828
+Nonce.13 = fe9b134a2fd031d93d0c3084
+PersonalisationString.13 = 2b4e017f69170a987effc607b71a360e5d9ad3a7bb3583ff
+AdditionalInputA.13 = 968512e2d6612878b68e2716e7fff3d43965c8a2c7f33c7e
+AdditionalInputB.13 = d229b9445b5f07c690ea1b0e4d7fdd740d464ce501ebf47b
+Output.13 = 1a685f050da9ad94dbeb7bb94a73c42475d914ea4b3a04b23bd816c88ef50a123a361c6b1ee5a318bba7665f37566e764a5054c18014e5ffe2aa72aa34c5f41cb49e75cfa1440af9156576dcf181d95c83af8b042ea74c12a3cc6d8ca63a8fe1f71cae17ccc8768bbd2c3bee147ab460
+Entropy.14 = 73546ddd5480d1f70142ad1def9b254f04b7970d056bd160
+Nonce.14 = 08779f86558a964cd8ad3b06
+PersonalisationString.14 = e0475a33b78746e89b835a353fb294ca4c2c9d2ef861a6be
+AdditionalInputA.14 = a58757b98280d90e84d6cf4e2fa89c01a9e6aad22d6cff0d
+AdditionalInputB.14 = a3f5de1ec6d0ccd39fa153899f0c1a414106a2aa182acf31
+Output.14 = b1797707f1217d81c8463b44957df350dd139073b056c50d1c912fa111f9cb488bfb7d2ec6faebd078171cd6b71171ae33698ff96c7225d7fd36ddcfeb2630464974d12b3e03877bc73ce1a2f89aea7ff7ddc8ac85708b35dd94d3972875e2d3e7237ec33871e99301202b52e2ff89db
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = ca851911349384bffe89de1cbdc46e6831e44d34a4fb935ee285dd14b71a7488
+Nonce.0 = 659ba96c601dc69fc902940805ec0ca8
+Output.0 = e528e9abf2dece54d47c7e75e5fe302149f817ea9fb4bee6f4199697d04d5b89d54fbb978a15b5c443c9ec21036d2460b6f73ebad0dc2aba6e624abf07745bc107694bb7547bb0995f70de25d6b29e2d3011bb19d27676c07162c8b5ccde0668961df86803482cb37ed6d5c0bb8d50cf1f50d476aa0458bdaba806f48be9dcb8
+Entropy.1 = 79737479ba4e7642a221fcfd1b820b134e9e3540a35bb48ffae29c20f5418ea3
+Nonce.1 = 3593259c092bef4129bc2c6c9e19f343
+Output.1 = cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655b924159413e2293b17610f211e09f770f172b8fb693a35b85d3b9e5e63b1dc252ac0e115002e9bedfb4b5b6fd43f33b8e0eafb2d072e1a6fee1f159df9b51e6c8da737e60d5032dd30544ec51558c6f080bdbdab1de8a939e961e06b5f1aca37
+Entropy.2 = b340907445b97a8b589264de4a17c0bea11bb53ad72f9f33297f05d2879d898d
+Nonce.2 = 65cb27735d83c0708f72684ea58f7ee5
+Output.2 = 75183aaaf3574bc68003352ad655d0e9ce9dd17552723b47fab0e84ef903694a32987eeddbdc48efd24195dbdac8a46ba2d972f5808f23a869e71343140361f58b243e62722088fe10a98e43372d252b144e00c89c215a76a121734bdc485486f65c0b16b8963524a3a70e6f38f169c12f6cbdd169dd48fe4421a235847a23ff
+Entropy.3 = 8e159f60060a7d6a7e6fe7c9f769c30b98acb1240b25e7ee33f1da834c0858e7
+Nonce.3 = c39d35052201bdcce4e127a04f04d644
+Output.3 = 62910a77213967ea93d6457e255af51fc79d49629af2fccd81840cdfbb4910991f50a477cbd29edd8a47c4fec9d141f50dfde7c4d8fcab473eff3cc2ee9e7cc90871f180777a97841597b0dd7e779eff9784b9cc33689fd7d48c0dcd341515ac8fecf5c55a6327aea8d58f97220b7462373e84e3b7417a57e80ce946d6120db5
+Entropy.4 = 74755f196305f7fb6689b2fe6835dc1d81484fc481a6b8087f649a1952f4df6a
+Nonce.4 = c36387a544a5f2b78007651a7b74b749
+Output.4 = b2896f3af4375dab67e8062d82c1a005ef4ed119d13a9f18371b1b873774418684805fd659bfd69964f83a5cfe08667ddad672cafd16befffa9faed49865214f703951b443e6dca22edb636f3308380144b9333de4bcb0735710e4d9266786342fc53babe7bdbe3c01a3addb7f23c63ce2834729fabbd419b47beceb4a460236
+Entropy.5 = 4b222718f56a3260b3c2625a4cf80950b7d6c1250f170bd5c28b118abdf23b2f
+Nonce.5 = 7aed52d0016fcaef0b6492bc40bbe0e9
+Output.5 = a6da029b3665cd39fd50a54c553f99fed3626f4902ffe322dc51f0670dfe8742ed48415cf04bbad5ed3b23b18b7892d170a7dcf3ef8052d5717cb0c1a8b3010d9a9ea5de70ae5356249c0e098946030c46d9d3d209864539444374d8fbcae068e1d6548fa59e6562e6b2d1acbda8da0318c23752ebc9be0c1c1c5b3cf66dd967
+Entropy.6 = b512633f27fb182a076917e39888ba3ff35d23c3742eb8f3c635a044163768e0
+Nonce.6 = e2c39b84629a3de5c301db5643af1c21
+Output.6 = fb931d0d0194a97b48d5d4c231fdad5c61aedf1c3a55ac24983ecbf38487b1c93396c6b86ff3920cfa8c77e0146de835ea5809676e702dee6a78100da9aa43d8ec0bf5720befa71f82193205ac2ea403e8d7e0e6270b366dc4200be26afd9f63b7e79286a35c688c57cbff55ac747d4c28bb80a2b2097b3b62ea439950d75dff
+Entropy.7 = aae3ffc8605a975befefcea0a7a286642bc3b95fb37bd0eb0585a4cabf8b3d1e
+Nonce.7 = 9504c3c0c4310c1c0746a036c91d9034
+Output.7 = 2819bd3b0d216dad59ddd6c354c4518153a2b04374b07c49e64a8e4d055575dfbc9a8fcde68bd257ff1ba5c6000564b46d6dd7ecd9c5d684fd757df62d85211575d3562d7814008ab5c8bc00e7b5a649eae2318665b55d762de36eba00c2906c0e0ec8706edb493e51ca5eb4b9f015dc932f262f52a86b11c41e9a6d5b3bd431
+Entropy.8 = b9475210b79b87180e746df704b3cbc7bf8424750e416a7fbb5ce3ef25a82cc6
+Nonce.8 = 24baf03599c10df6ef44065d715a93f7
+Output.8 = ae12d784f796183c50db5a1a283aa35ed9a2b685dacea97c596ff8c294906d1b1305ba1f80254eb062b874a8dfffa3378c809ab2869aa51a4e6a489692284a25038908a347342175c38401193b8afc498077e10522bec5c70882b7f760ea5946870bd9fc72961eedbe8bff4fd58c7cc1589bb4f369ed0d3bf26c5bbc62e0b2b2
+Entropy.9 = 27838eb44ceccb4e36210703ebf38f659bc39dd3277cd76b7a9bcd6bc964b628
+Nonce.9 = 39cfe0210db2e7b0eb52a387476e7ea1
+Output.9 = e5e72a53605d2aaa67832f97536445ab774dd9bff7f13a0d11fd27bf6593bfb52309f2d4f09d147192199ea584503181de87002f4ee085c7dc18bf32ce5315647a3708e6f404d6588c92b2dda599c131aa350d18c747b33dc8eda15cf40e95263d1231e1b4b68f8d829f86054d49cfdb1b8d96ab0465110569c8583a424a099a
+Entropy.10 = d7129e4f47008ad60c9b5d081ff4ca8eb821a6e4deb91608bf4e2647835373a5
+Nonce.10 = a72882773f78c2fc4878295840a53012
+Output.10 = 0cbf48585c5de9183b7ff76557f8fc9ebcfdfde07e588a8641156f61b7952725bbee954f87e9b937513b16bba0f2e523d095114658e00f0f3772175acfcb3240a01de631c19c5a834c94cc58d04a6837f0d2782fa53d2f9f65178ee9c837222494c799e64c60406069bd319549b889fa00a0032dd7ba5b1cc9edbf58de82bfcd
+Entropy.11 = 67fe5e300c513371976c80de4b20d4473889c9f1214bce718bc32d1da3ab7532
+Nonce.11 = e256d88497738a33923aa003a8d7845c
+Output.11 = b44660d64ef7bcebc7a1ab71f8407a02285c7592d755ae6766059e894f694373ed9c776c0cfc8594413eefb400ed427e158d687e28da3ecc205e0f7370fb089676bbb0fa591ec8d916c3d5f18a3eb4a417120705f3e2198154cd60648dbfcfc901242e15711cacd501b2c2826abe870ba32da785ed6f1fdc68f203d1ab43a64f
+Entropy.12 = de8142541255c46d66efc6173b0fe3ffaf5936c897a3ce2e9d5835616aafa2cb
+Nonce.12 = d01f9002c407127bc3297a561d89b81d
+Output.12 = 64d1020929d74716446d8a4e17205d0756b5264867811aa24d0d0da8644db25d5cde474143c57d12482f6bf0f31d10af9d1da4eb6d701bdd605a8db74fb4e77f79aaa9e450afda50b18d19fae68f03db1d7b5f1738d2fdce9ad3ee9461b58ee242daf7a1d72c45c9213eca34e14810a9fca5208d5c56d8066bab1586f1513de7
+Entropy.13 = 4a8e0bd90bdb12f7748ad5f147b115d7385bb1b06aee7d8b76136a25d779bcb7
+Nonce.13 = 7f3cce4af8c8ce3c45bdf23c6b181a00
+Output.13 = 320c7ca4bbeb7af977bc054f604b5086a3f237aa5501658112f3e7a33d2231f5536d2c85c1dad9d9b0bf7f619c81be4854661626839c8c10ae7fdc0c0b571be34b58d66da553676167b00e7d8e49f416aacb2926c6eb2c66ec98bffae20864cf92496db15e3b09e530b7b9648be8d3916b3c20a3a779bec7d66da63396849aaf
+Entropy.14 = 451ed024bc4b95f1025b14ec3616f5e42e80824541dc795a2f07500f92adc665
+Nonce.14 = 2f28e6ee8de5879db1eccd58c994e5f0
+Output.14 = 3fb637085ab75f4e95655faae95885166a5fbb423bb03dbf0543be063bcd48799c4f05d4e522634d9275fe02e1edd920e26d9accd43709cb0d8f6e50aa54a5f3bdd618be23cf73ef736ed0ef7524b0d14d5bef8c8aec1cf1ed3e1c38a808b35e61a44078127c7cb3a8fd7addfa50fcf3ff3bc6d6bc355d5436fe9b71eb44f7fd
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = d3cc4d1acf3dde0c4bd2290d262337042dc632948223d3a2eaab87da44295fbd
+Nonce.0 = 0109b0e729f457328aa18569a9224921
+AdditionalInputA.0 = 3c311848183c9a212a26f27f8c6647e40375e466a0857cc39c4e47575d53f1f6
+AdditionalInputB.0 = fcb9abd19ccfbccef88c9c39bfb3dd7b1c12266c9808992e305bc3cff566e4e4
+Output.0 = 9c7b758b212cd0fcecd5daa489821712e3cdea4467b560ef5ddc24ab47749a1f1ffdbbb118f4e62fcfca3371b8fbfc5b0646b83e06bfbbab5fac30ea09ea2bc76f1ea568c9be0444b2cc90517b20ca825f2d0eccd88e7175538b85d90ab390183ca6395535d34473af6b5a5b88f5a59ee7561573337ea819da0dcc3573a22974
+Entropy.1 = f97a3cfd91faa046b9e61b9493d436c4931f604b22f1081521b3419151e8ff06
+Nonce.1 = 11f3a7d43595357d58120bd1e2dd8aed
+AdditionalInputA.1 = 517289afe444a0fe5ed1a41dbbb5eb17150079bdd31e29cf2ff30034d8268e3b
+AdditionalInputB.1 = 88028d29ef80b4e6f0fe12f91d7449fe75062682e89c571440c0c9b52c42a6e0
+Output.1 = c6871cff0824fe55ea7689a52229886730450e5d362da5bf590dcf9acd67fed4cb32107df5d03969a66b1f6494fdf5d63d5b4d0d34ea7399a07d0116126d0d518c7c55ba46e12f62efc8fe28a51c9d428e6d371d7397ab319fc73ded4722e5b4f30004032a6128df5e7497ecf82ca7b0a50e867ef6728a4f509a8c859087039c
+Entropy.2 = 0f2f23d64f481cabec7abb01db3aabf125c3173a044b9bf26844300b69dcac8b
+Nonce.2 = 9a5ae13232b43aa19cfe8d7958b4b590
+AdditionalInputA.2 = ec4c7a62acab73385f567da10e892ff395a0929f959231a5628188ce0c26e818
+AdditionalInputB.2 = 6b97b8c6b6bb8935e676c410c17caa8042aa3145f856d0a32b641e4ae5298648
+Output.2 = 7480a361058bd9afa3db82c9d7586e42269102013f6ec5c269b6d05f17987847748684766b44918fd4b65e1648622fc0e0954178b0279dfc9fa99b66c6f53e51c4860131e9e0644287a4afe4ca8e480417e070db68008a97c3397e4b320b5d1a1d7e1d18a95cfedd7d1e74997052bf649d132deb9ec53aae7dafdab55e6dae93
+Entropy.3 = 53c56660c78481be9c63284e005fcc14fbc7fb27732c9bf1366d01a426765a31
+Nonce.3 = dc7a14d0eb5b0b3534e717a0b3c64614
+AdditionalInputA.3 = 3aa848706ecb877f5bedf4ffc332d57c22e08747a47e75cff6f0fd1316861c95
+AdditionalInputB.3 = 9a401afa739b8f752fddacd291e0b854f5eff4a55b515e20cb319852189d3722
+Output.3 = 5c0eb420e0bf41ce9323e815310e4e8303cd677a8a8b023f31f0d79f0ca15aeb636099a369fd074d69889865eac1b72ab3cbfebdb8cf460b00072802e2ec648b1349a5303be4ccaadd729f1a9ea17482fd026aaeb93f1602bc1404b9853adde40d6c34b844cf148bc088941ecfc1642c8c0b9778e45f3b07e06e21ee2c9e0300
+Entropy.4 = f63c804404902db334c54bb298fc271a21d7acd9f770278e089775710bf4fdd7
+Nonce.4 = 3e45009ea9cb2a36ba1aa4bf39178200
+AdditionalInputA.4 = d165a13dc8cc43f3f0952c3f5d3de4136954d983683d4a3e6d2dc4c89bf23423
+AdditionalInputB.4 = 75106bc86d0336df85097f6af8e80e2da59046a03fa65b06706b8bbc7ffc6785
+Output.4 = 6363139bba32c22a0f5cd23ca6d437b5669b7d432f786b8af445471bee0b2d24c9d5f2f93717cbe00d1f010cc3b9c515fc9f7336d53d4d26ba5c0d76a90186663c8582eb739c7b6578a3328bf68dc2cec2cd89b3a90201f6993adcc854df0f5c6974d0f5570765a15fe03dbce28942dd2fd16ba2027e68abac83926969349af8
+Entropy.5 = 2aaca9147da66c176615726b69e3e851cc3537f5f279fe7344233d8e44cfc99d
+Nonce.5 = 4e171f080af9a6081bee9f183ac9e340
+AdditionalInputA.5 = d75a2a6eb66c3833e50f5ec3d2e434cf791448d618026d0c360806d120ded669
+AdditionalInputB.5 = b643b74c15b37612e6577ed7ca2a4c67a78d560af9eb50a4108fca742e87b8d6
+Output.5 = 501dcdc977f4ba856f24eaa4968b374bebb3166b280334cb510232c31ebffde10fa47b7840ef3fe3b77725c2272d3a1d4219baf23e0290c622271edcced58838cf428f0517425d2e19e0d8c89377eecfc378245f283236fafa466c914b99672ceafab369e8889a0c866d8bd639db9fb797254262c6fd44cfa9045ad6340a60ef
+Entropy.6 = a2e4cd48a5cf918d6f55942d95fcb4e8465cdc4f77b7c52b6fae5b16a25ca306
+Nonce.6 = bef036716440db6e6d333d9d760b7ca8
+AdditionalInputA.6 = bfa591c7287f3f931168f95e38869441d1f9a11035ad8ea625bb61b9ea17591c
+AdditionalInputB.6 = c00c735463bca215adc372cb892b05e939bf669583341c06d4e31d0e5b363a37
+Output.6 = e7d136af69926a5421d4266ee0420fd729f2a4f7c295d3c966bdfa05268180b508b8a2852d1b3a06fd2ab3e13c54005123ef319f42d0c6d3a575e6e7e1496cb28aacadbcf83740fba8f35fcee04bb2ed8a51db3d3362b01094a62fb57e33c99a432f29fce6676cffbbcc05107e794e75e44a02d5e6d9d748c5fbff00a0178d65
+Entropy.7 = 95a67771cba69011a79776e713145d309edae56fad5fd6d41d83eaff89df6e5e
+Nonce.7 = be5b5164e31ecc51ba6f7c3c5199eb33
+AdditionalInputA.7 = 065f693b229a7c4fd373cd15b3807552dd9bf98c5485cef361949d4e7d774b53
+AdditionalInputB.7 = 9afb62406f0e812c4f156d58b19a656c904813c1b4a45a0029ae7f50731f8014
+Output.7 = f61b61a6e79a41183e8ed6647899d2dc85cdaf5c3abf5c7f3bf37685946dc28f4923dc842f2d4326bd6ce0d50a84cb3ba869d72a36e246910eba6512ba36cd7ed3a5437c9245b00a344308c792b668b458d3c3e16dee2fbec41867da31084d46d8ec168de2148ef64fc5b72069abf5a6ada1ead2b7146bb793ff1c9c3690fa56
+Entropy.8 = a459e1815cbca4514ec8094d5ab2414a557ba6fe10e613c345338d0521e4bf90
+Nonce.8 = 62221392e2552e76cd0d36df6e6068eb
+AdditionalInputA.8 = 0a3642b02b23b3ef62c701a63401124022f5b896de86dab6e6c7451497aa1dcc
+AdditionalInputB.8 = c80514865901371c45ba92d9f95d50bb7c9dd1768cb3dfbc45b968da94965c6e
+Output.8 = 464e6977b8adaef307c9623e41c357013249c9ffd77f405f3925cebb69f151ce8fbb6a277164002aee7858fc224f6499042aa1e6322deee9a5d133c31d640e12a7487c731ba03ad866a24675badb1d79220c40be689f79c2a0be93cb4dada3e0eac4ab140cb91998b6f11953e68f2319b050c40f71c34de9905ae41b2de1c2f6
+Entropy.9 = 252c2cad613e002478162861880979ee4e323025eebb6fb2e0aa9f200e28e0a1
+Nonce.9 = d001bc9a8f2c8c242e4369df0c191989
+AdditionalInputA.9 = 9bcfc61cb2bc000034bb3db980eb47c76fb5ecdd40553eff113368d639b947fd
+AdditionalInputB.9 = 8b0565c767c2610ee0014582e9fbecb96e173005b60e9581503a6dca5637a26e
+Output.9 = e96c15fe8a60692b0a7d67171e0195ff6e1c87aab844221e71700d1bbee75feea695f6a740c9760bbe0e812ecf4061d8f0955bc0195e18c4fd1516ebca50ba6a6db86881737dbab8321707675479b87611db6af2c97ea361a5484555ead454defb1a64335de964fc803d40f3a6f057893d2afc25725754f4f00abc51920743dc
+Entropy.10 = 8be0ca6adc8b3870c9d69d6021bc1f1d8eb9e649073d35ee6c5aa0b7e56ad8a5
+Nonce.10 = 9d1265f7d51fdb65377f1e6edd6ae0e4
+AdditionalInputA.10 = da86167ac997c406bb7979f423986a84ec6614d6caa7afc10aff0699a9b2cf7f
+AdditionalInputB.10 = e4baa3c555950b53e2bfdba480cb4c94b59381bac1e33947e0c22e838a9534cf
+Output.10 = 64384ecc4ea6b458efc227ca697eac5510092265520c0a0d8a0ccf9ed3ca9d58074671188c6a7ad16d0b050cdc072c125d7298d3a31d9f044a9ee40da0089a84fea28cc7f05f1716db952fad29a0e779635cb7a912a959be67be2f0a4170aace2981802e2ff6467e5b46f0ffbff3b42ba5935fd553c82482ac266acf1cd247d7
+Entropy.11 = d43a75b6adf26d60322284cb12ac38327792442aa8f040f60a2f331b33ac4a8f
+Nonce.11 = 0682f8b091f811afacaacaec9b04d279
+AdditionalInputA.11 = 7fd3b8f512940da7de5d80199d9a7b42670c04a945775a3dba869546cbb9bc65
+AdditionalInputB.11 = 2575db20bc7aafc2a90a5dabab760db851d754777bc9f05616af1858b24ff3da
+Output.11 = 0da7a8dc73c163014bf0841913d3067806456bbca6d5de92b85534c6545467313648d71ef17c923d090dc92cff8d4d1a9a2bb63e001dc2e8ab1a597999be3d6cf70ff63fee9985801395fbd4f4990430c4259fcae4fa1fcd73dc3187ccc102d04af7c07532885e5a226fc42809c48f22eecf4f6ab996ae4fcb144786957d9f41
+Entropy.12 = 64352f236af5d32067a529a8fd05ba00a338c9de306371a0b00c36e610a48d18
+Nonce.12 = df99ed2c7608c870624b962a5dc68acd
+AdditionalInputA.12 = da416335e7aaf60cf3d06fb438735ce796aad09034f8969c8f8c3f81e32fef24
+AdditionalInputB.12 = a28c07c21a2297311adf172c19e83ca0a87731bdffb80548978d2d1cd82cf8a3
+Output.12 = 132b9f25868729e3853d3c51f99a3b5fae6d4204bea70890daf62e042b776a526c8fb831b80a6d5d3f153237df1fd39b6fd9137963f5516d9cdd4e3f9195c46e9972c15d3edc6606e3368bde1594977fb88d0ca6e6f5f3d057ccadc7d7dab77dfc42658a1e972aa446b20d418286386a52dfc1c714d2ac548713268b0b709729
+Entropy.13 = 282f4d2e05a2cd30e9087f5633089389449f04bac11df718c90bb351cd3653a5
+Nonce.13 = 90a7daf3c0de9ea286081efc4a684dfb
+AdditionalInputA.13 = 2630b4ccc7271cc379cb580b0aaede3d3aa8c1c7ba002cf791f0752c3d739007
+AdditionalInputB.13 = c31d69de499f1017be44e3d4fa77ecebc6a9b9934749fcf136f267b29115d2cc
+Output.13 = c899094520e0197c37b91dd50778e20a5b950decfb308d39f1db709447ae48f6101d9abe63a783fbb830eec1d359a5f61a2013728966d349213ee96382614aa4135058a967627183810c6622a2158cababe3b8ab99169c89e362108bf5955b4ffc47440f87e4bad0d36bc738e737e072e64d8842e7619f1be0af1141f05afe2d
+Entropy.14 = 13c752b9e745ce77bbc7c0dbda982313d3fe66f903e83ebd8dbe4ff0c11380e9
+Nonce.14 = f1a533095d6174164bd7c82532464ae7
+AdditionalInputA.14 = 4f53db89b9ba7fc00767bc751fb8f3c103fe0f76acd6d5c7891ab15b2b7cf67c
+AdditionalInputB.14 = 582c2a7d34679088cca6bd28723c99aac07db46c332dc0153d1673256903b446
+Output.14 = 6311f4c0c4cd1f86bd48349abb9eb930d4f63df5e5f7217d1d1b91a71d8a6938b0ad2b3e897bd7e3d8703db125fab30e03464fad41e5ddf5bf9aeeb5161b244468cfb26a9d956931a5412c97d64188b0da1bd907819c686f39af82e91cfeef0cbffb5d1e229e383bed26d06412988640706815a6e820796876f416653e464961
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 5cacc68165a2e2ee20812f35ec73a79dbf30fd475476ac0c44fc6174cdac2b55
+Nonce.0 = 6f885496c1e63af620becd9e71ecb824
+PersonalisationString.0 = e72dd8590d4ed5295515c35ed6199e9d211b8f069b3058caa6670b96ef1208d0
+Output.0 = f1012cf543f94533df27fedfbf58e5b79a3dc517a9c402bdbfc9a0c0f721f9d53faf4aafdc4b8f7a1b580fcaa52338d4bd95f58966a243cdcd3f446ed4bc546d9f607b190dd69954450d16cd0e2d6437067d8b44d19a6af7a7cfa8794e5fbd728e8fb2f2e8db5dd4ff1aa275f35886098e80ff844886060da8b1e7137846b23b
+Entropy.1 = 8df013b4d103523073917ddf6a869793059e9943fc8654549e7ab22f7c29f122
+Nonce.1 = da2625af2ddd4abcce3cf4fa4659d84e
+PersonalisationString.1 = b571e66d7c338bc07b76ad3757bb2f9452bf7e07437ae8581ce7bc7c3ac651a9
+Output.1 = b91cba4cc84fa25df8610b81b641402768a2097234932e37d590b1154cbd23f97452e310e291c45146147f0da2d81761fe90fba64f94419c0f662b28c1ed94da487bb7e73eec798fbcf981b791d1be4f177a8907aa3c401643a5b62b87b89d66b3a60e40d4a8e4e9d82af6d2700e6f535cdb51f75c321729103741030ccc3a56
+Entropy.2 = 565b2b77937ba46536b0f693b3d5e4a8a24563f9ef1f676e8b5b2ef17823832f
+Nonce.2 = 4ef3064ec29f5b7f9686d75a23d170e3
+PersonalisationString.2 = 3b722433226c9dba745087270ab3af2c909425ba6d39f5ce46f07256068319d9
+Output.2 = d144ee7f8363d128872f82c15663fe658413cd42651098e0a7c51a970de75287ec943f9061e902280a5a9e183a7817a44222d198fbfab184881431b4adf35d3d1019da5a90b3696b2349c8fba15a56d0f9d010a88e3f9eeedb67a69bcaa71281b41afa11af576b765e66858f0eb2e4ec4081609ec81da81df0a0eb06787340ea
+Entropy.3 = fc3832a91b1dcdcaa944f2d93cbceb85c267c491b7b59d017cde4add79a836b6
+Nonce.3 = d5e76ce9eabafed06e33a913e395c5e0
+PersonalisationString.3 = ffc5f6eefd51da64a0f67b5f0cf60d7ab43fc7836bca650022a0cee57a43c148
+Output.3 = 0e713c6cc9a4dbd4249201d12b7bf5c69c3e18eb504bf3252db2f43675e17d99b6a908400cea304011c2e54166dae1f20260008efe4e06a87e0ce525ca482bca223a902a14adcf2374a739a5dfeaf14cadd72efa4d55d15154c974d9521535bcb70658c5b6c944020afb04a87b223b4b8e5d89821704a9985bb010405ba8f3d4
+Entropy.4 = 8009eb2cb49fdf16403bcdfd4a9f952191062acb9cc111eca019f957fb9f4451
+Nonce.4 = 355598866952394b1eddd85d59f81c9d
+PersonalisationString.4 = 09ff1d4b97d83b223d002e05f754be480d13ba968e5aac306d71cc9fc49cc2dd
+Output.4 = 9550903c2f02cf77c8f9c9a37041d0040ee1e3ef65ba1a1fbbcf44fb7a2172bd6b3aaabe850281c3a1778277bacd09614dfefececac64338ae24a1bf150cbf9d9541173a82ecba08aa19b75abb779eb10efa4257d5252e8afcac414bc3bb5d3006b6f36fb9daea4c8c359ef6cdbeff27c1068571dd3c89dc87eda9190086888d
+Entropy.5 = a6e4c9a8bd6da23b9c2b10a7748fd08c4f782fadbac7ea501c17efdc6f6087bd
+Nonce.5 = acdc47edf1d3b21d0aec7631abb6d7d5
+PersonalisationString.5 = c16ee0908a5886dccf332fbc61de9ec7b7972d2c4c83c477409ce8a15c623294
+Output.5 = a52f93ccb363e2bdf0903622c3caedb7cffd04b726052b8d455744c71b76dee1b71db9880dc3c21850489cb29e412d7d80849cfa9151a151dcbf32a32b4a54cac01d3200200ed66a3a5e5c131a49655ffbf1a8824ff7f265690dffb4054df46a707b9213924c631c5bce379944c856c4f7846e281ac89c64fad3a49909dfb92b
+Entropy.6 = 59d6307460a9bdd392dfc0904973991d585696010a71e52d590a5039b4849fa4
+Nonce.6 = 34a0aafb95917cbf8c38fc5548373c05
+PersonalisationString.6 = 0407b7c57bc11361747c3d67526c36e228028a5d0b145d66ab9a2fe4b07507a0
+Output.6 = 299aba0661315211b09d2861855d0b4b125ab24649461341af6abd903ed6f025223b3299f2126fcad44c675166d800619cf49540946b12138989417904324b0ddad121327211a297f11259c9c34ce4c70c322a653675f78d385e4e2443f8058d141195e17e0bd1b9d44bf3e48c376e6eb44ef020b11cf03eb141c46ecb43cf3d
+Entropy.7 = 9ae3506aadbc8358696ba1ba17e876e1157b7048235921503d36d9211b430342
+Nonce.7 = 9abf7d66afee5d2b811cba358bbc527d
+PersonalisationString.7 = 0d645f6238e9ceb038e4af9772426ca110c5be052f8673b8b5a65c4e53d2f519
+Output.7 = 5f032c7fec6320fe423b6f38085cbad59d826085afe915247b3d546c4c6b174554dd4877c0d671de9554b505393a44e71f209b70f991ac8aa6e08f983fff2a4c817b0cd26c12b2c929378506489a75b2025b358cb5d0400821e7e252ac6376cd94a40c911a7ed8b6087e3de5fa39fa6b314c3ba1c593b864ce4ff281a97c325b
+Entropy.8 = 96ae3b8775b36da2a29b889ad878941f43c7d51295d47440cd0e3c4999193109
+Nonce.8 = 1fe022a6fc0237b055d4d6a7036b18d5
+PersonalisationString.8 = 1e40e97362d0a823d3964c26b81ab53825c56446c5261689011886f19b08e5c2
+Output.8 = e707cd14b06ce1e6dbcceaedbf08d88891b03f44ad6a797bd12fdeb557d0151df9346a028dec004844ca46adec3051dafb345895fa9f4604d8a13c8ff66ae093fa63c4d9c0816d55a0066d31e8404c841e87b6b2c7b5ae9d7afb6840c2f7b441bf2d3d8bd3f40349c1c014347c1979213c76103e0bece26ad7720601eff42275
+Entropy.9 = 33f5120396336e51ee3b0b619b5f873db05ca57cda86aeae2964f51480d14992
+Nonce.9 = 6f1f6e9807ba5393edcf3cb4e4bb6113
+PersonalisationString.9 = 3709605af44d90196867c927512aa8ba31837063337b4879408d91a05c8efa9f
+Output.9 = 8b8291126ded9acef12516025c99ccce225d844308b584b872c903c7bc6467599a1cead003dc4c70f6d519f5b51ce0da57f53da90dbe8f666a1a1dde297727fee2d44cebd1301fc1ca75956a3fcae0d374e0df6009b668fd21638d2b733e6902d22d5bfb4af1b455975e08eef0ebe4dc87705801e7776583c8de11672729f723
+Entropy.10 = ad300b799005f290fee7f930eebce158b98fb6cb449987fe433f955456b35300
+Nonce.10 = 06aa2514e4bd114edf7ac105cfef2772
+PersonalisationString.10 = 87ada711465e4169da2a74c931afb9b5a5b190d07b7af342aa99570401c3ee8a
+Output.10 = 80d7c606ff49415a3a92ba1f2943235c01339c8f9cd0b0511fbfdf3ef23c42ffff008524193faaa4b7f2f2eb0cfa221d9df89bd373fe4e158ec06fad3ecf1eb48b8239b0bb826ee69d773883a3e8edac66254610ff70b6609836860e39ea1f3bfa04596fee1f2baca6cebb244774c6c3eb4af1f02899eba8f4188f91776de16f
+Entropy.11 = 130b044e2c15ab89375e54b72e7baae6d4cad734b013a090f4df057e634f6ff0
+Nonce.11 = 65fd6ac602cd44107d705dbc066e52b6
+PersonalisationString.11 = f374aba16f34d54aae5e494505b67d3818ef1c08ea24967a76876d4361379aec
+Output.11 = 5d179534fb0dba3526993ed8e27ec9f915183d967336bb24352c67f4ab5d7935d3168e57008da851515efbaecb69904b6d899d3bfa6e9805659aef2942c4903875b8fcbc0d1d24d1c075f0ff667c1fc240d8b410dff582fa71fa30878955ce2ed786ef32ef852706e62439b69921f26e84e0f54f62b938f04905f05fcd7c2204
+Entropy.12 = 716430e999964b35459c17921fe5f60e09bd9ab234cb8f4ba4932bec4a60a1d5
+Nonce.12 = 9533b711e061b07d505da707cafbca03
+PersonalisationString.12 = 372ae616d1a1fc45c5aecad0939c49b9e01c93bfb40c835eebd837af747f079d
+Output.12 = a80d6a1b2d0ce01fe0d26e70fb73da20d45841cf01bfbd50b90d2751a46114c0e758cb787d281a0a9cf62f5c8ce2ee7ca74fefff330efe74926acca6d6f0646e4e3c1a1e52fce1d57b88beda4a5815896f25f38a652cc240deb582921c8b1d03a1da966dd04c2e7eee274df2cd1837096b9f7a0d89a82434076bc30173229a60
+Entropy.13 = 7679f154296e6d580854826539003a82d1c54e2e062c619d00da6c6ac820789b
+Nonce.13 = 55d12941b0896462e7d888e5322a99a3
+PersonalisationString.13 = ba4d1ed696f58ef64596c76cee87cc1ca83069a79e7982b9a06f9d62f4209faf
+Output.13 = 10dc7cd2bb68c2c28f76d1b04ae2aa287071e04c3b688e1986b05cc1209f691daa55868ebb05b633c75a40a32b49663185fe5bb8f906008347ef51590530948b87613920014802e5864e0758f012e1eae31f0c4c031ef823aecfb2f8a73aaa946fc507037f9050b277bdeaa023123f9d22da1606e82cb7e56de34bf009eccb46
+Entropy.14 = 8ca4a964e1ff68753db86753d09222e09b888b500be46f2a3830afa9172a1d6d
+Nonce.14 = a59394e0af764e2f21cf751f623ffa6c
+PersonalisationString.14 = eb8164b3bf6c1750a8de8528af16cffdf400856d82260acd5958894a98afeed5
+Output.14 = fc5701b508f0264f4fdb88414768e1afb0a5b445400dcfdeddd0eba67b4fea8c056d79a69fd050759fb3d626b29adb8438326fd583f1ba0475ce7707bd294ab01743d077605866425b1cbd0f6c7bba972b30fbe9fce0a719b044fcc1394354895a9f8304a2b5101909808ddfdf66df6237142b6566588e4e1e8949b90c27fc1f
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 5d3286bc53a258a53ba781e2c4dcd79a790e43bbe0e89fb3eed39086be34174b
+Nonce.0 = c5422294b7318952ace7055ab7570abf
+PersonalisationString.0 = 2dba094d008e150d51c4135bb2f03dcde9cbf3468a12908a1b025c120c985b9d
+AdditionalInputA.0 = 793a7ef8f6f0482beac542bb785c10f8b7b406a4de92667ab168ecc2cf7573c6
+AdditionalInputB.0 = 2238cdb4e23d629fe0c2a83dd8d5144ce1a6229ef41dabe2a99ff722e510b530
+Output.0 = d04678198ae7e1aeb435b45291458ffde0891560748b43330eaf866b5a6385e74c6fa5a5a44bdb284d436e98d244018d6acedcdfa2e9f499d8089e4db86ae89a6ab2d19cb705e2f048f97fb597f04106a1fa6a1416ad3d859118e079a0c319eb95686f4cbcce3b5101c7a0b010ef029c4ef6d06cdfac97efb9773891688c37cf
+Entropy.1 = c2a566a9a1817b15c5c3b778177ac87c24e797be0a845f11c2fe399dd37732f2
+Nonce.1 = cb1894eb2b97b3c56e628329516f86ec
+PersonalisationString.1 = 13ce4d8dd2db9796f94156c8e8f0769b0aa1c82c1323b61536603bca37c9ee29
+AdditionalInputA.1 = 413dd83fe56835abd478cb9693d67635901c40239a266462d3133b83e49c820b
+AdditionalInputB.1 = d5c4a71f9d6d95a1bedf0bd2247c277d1f84a4e57a4a8825b82a2d097de63ef1
+Output.1 = b3a3698d777699a0dd9fa3f0a9fa57832d3cefac5df24437c6d73a0fe41040f1729038aef1e926352ea59de120bfb7b073183a34106efed6278ff8ad844ba0448115dfddf3319a82de6bb11d80bd871a9acd35c73645e1270fb9fe4fa88ec0e465409ea0cba809fe2f45e04943a2e396bbb7dd2f4e0795303524cc9cc5ea54a1
+Entropy.2 = a33288a96f41dd54b945e060c8bd0c094f1e28267cc1dcbba52063c1a9d54c4d
+Nonce.2 = 36918c977e1a7276a2bb475591c367b7
+PersonalisationString.2 = 6aa528c940962638dc2201738850fd1fe6f5d0eb9f687ff1af39d9c7b36830d9
+AdditionalInputA.2 = 37ee633a635e43af59abdb1762c7ea45bfe060ec1d9077ecd2a43a658673f3c7
+AdditionalInputB.2 = 2eb96f2e28fa9f674bb03ade703b8f791ee5356e2ee85c7ed5bda96325256c61
+Output.2 = db2f91932767eb846961ce5321c7003431870508e8c6f8d432ca1f9cee5cdc1aed6e0f133d317eb6990c4b3b0a360cdfb5b43a6e712bd46bca04c414868fab22c6a49c4b89c812697c3a7fbfc8ddf10c8aa5ebf13a09fd114eb2a02a07f69786f3ce7fd30231f22779bc8db103b13fa546dbc45a89a86275281172761683d384
+Entropy.3 = 5f37b6e47e1776e735adc03d4b999879477ff4a206231924033d94c0114f911b
+Nonce.3 = 7d12d62c79c9f6234ae0314156947459
+PersonalisationString.3 = 92d4d9fab5f8bf5119f2663a9df7334f50dcde74fb9d7732f7eba56501e60d54
+AdditionalInputA.3 = c9aef0d7a9ba7345d08b6d5b5ce5645c7495b8685e6b93846ffcf470f5abd40d
+AdditionalInputB.3 = 50d9d1f5074f7d9f1a24a9c63aa47b94da5ba78db1b0f18e4d4fe45c6875813c
+Output.3 = 20d942bbd7d98700faa37e94d53bf74f2d6bd1d8c95c0b88d842c4857797d59e7c8788aeeac29740122f208f703bf35dc32b0035db0648384feb6aa17a3274bc09b2d2b746c5a06fd82f4469fb86131a49482cb7be7d9b4b95042394cfb18b13f333ec0fe5c227bf1d8f33ecb2e42e358b6c3e034cb585331bd1d27f638029b9
+Entropy.4 = 2311c5afd64c584484b2729e84db80c0b4063fe9ca7edc83350488d7e67264a0
+Nonce.4 = 6a6dfd975a0dc7b72df1f107c4b3b3a6
+PersonalisationString.4 = 2abd870ec5fe26ed14dfa57a3309f920131b70580c3639af2645cd1af93db1b1
+AdditionalInputA.4 = c6e532a3b25653b6002aed5269cc2118749306e736bde039d4d569d4f967773f
+AdditionalInputB.4 = 5e7d26c4da769c373092b2b4f72b109fe34bdb7d169ea38f78ebae5df4a15759
+Output.4 = cacaeb1b4ac2305d8714eb50cbe1c67c5a2c0bbc7938fdfdcafef7c85fc40becbf777a4cfb6f14c6eee320943a493d2b0a744a6eb3c256ee9a3763037437df9adce3e2260f0c35e958af0edb5a81debd8bdaf2b8bb2b98b9186e5a222a21609ff58df4cbe1d4898d10d6e7c46f31f5cb1041bfd83a5fb27d5c56c961e91403fc
+Entropy.5 = 362ece9d330e1172a8f9e50258476d0c79c3ee50346524ba12d970ee3a6ef8c5
+Nonce.5 = cf11bcb4d9d51311ceacfca8705e833f
+PersonalisationString.5 = abb5a8edde02e526449284ecc31bc713383df3ed085f752e3b6a32f305861eed
+AdditionalInputA.5 = 746302ab1f4a86b17546bea762e929360f2e95c7788a63545a264ef997c8c65e
+AdditionalInputB.5 = b907c5b2a8833a48e56e819228ce9a050b41b3309f5ca37bed720311d92b33af
+Output.5 = 73c7131a558350590053580873ef956ff952f2aa6ff1bea452e013d1bc2afddea2311756dbe756e63ba6258480c48f3f6c1319b5f572f67ca530af09e39413d1d432bea8f89206619618cb0e7c88e9f2033639d0eb0efc20616b64f940da99b88231984c3fb23f19e890576f555fde394dbd4351f17a7ffd5c369379001bda03
+Entropy.6 = cf614bc29946bc0095f415e8bdeda10aab05392f9cc9187a86ea6ec95ee422e1
+Nonce.6 = 77fb5ec22dc0432cc13f4693e2e3bd9a
+PersonalisationString.6 = e4ce77914ffbc5fddf1fb51edfafdc196109139b84c741354135ec8d314c7c43
+AdditionalInputA.6 = e1e83ee1205acaf6164dc287aec08e5b32789e5be818078db39e53cad589db51
+AdditionalInputB.6 = 4e20c0226d5e1e7e805679f03f72452b5bea2d0ba41e0c12329bf60eb3016dd1
+Output.6 = 838fdf1418a746aa52ae4005d90c3fd301f648c5770ffef2a9f3912e37a93850cc4b8bfcce910aead0cb75958823b1a62e283901c5e4a3980e4ea36257458e2e4953555819b8852a26489b1d74821f80c9908469b43f124ff7ea62497c36159a47353098a1b9ec32e54800d6704371cc37f357ad74aacc203e9b6db97f94d0c4
+Entropy.7 = a8da1d3e233f393fd44d204c200202f7d01896e72c5ac652940cfd15b5d4b0bd
+Nonce.7 = 0a112b4cb0890af0a495e0f49fcf6874
+PersonalisationString.7 = d2e32799bc822b8d033299bdf63dc35774f7649e935d25be5b10512c430d1bda
+AdditionalInputA.7 = 920a82d76fcd2cd106ada64bba232b7b2344f3afe6b1d1d20ee8795144571009
+AdditionalInputB.7 = eeaac5878275372025f8231febed64db6a11273c3c00d625fc80a95f18ad7d3f
+Output.7 = 5f6dae489b53d89027b2cc333c700f090152d77b3eaf01d47f56ce6eca9893ef877b4cb560fab0fbdb34e3d1c6cd8480b33c053d2661a10aa531df4961b97d659c7492584236582b3fe701055efa59c328194cd1e07fcffd910d9ee01b7b9e8c8fda7f7ac01a8e203b8b26eb8078a9b9a5021562c44af24089e3ef84c1d5a6bd
+Entropy.8 = a77b1ed4ecaa650374e1052c405f1d88881c25c87d13dbe1334d8c1a847fa76b
+Nonce.8 = 05c143e2f145db216fe7be9ed23635d0
+PersonalisationString.8 = b5c750968ff09ed251d4a1c05342ac843db5246b19045728a634fa4f6e752e54
+AdditionalInputA.8 = ff5937bcd01a363696bf8e40adc8e4ab3e56dbf7e7d09451c99e538785fe6697
+AdditionalInputB.8 = 4acb34eea8266badcf8f6557a0eecf3eb4d7a295c876d6175598cb66a388efb8
+Output.8 = ec13eadfcc84e77d2a2efa1a2cd8b1355587cb27feb3d19d75b37f0446333ddb8236e751c63b7a6e595ec24a25051a696dbe8c062dd8896d1446db228a2f10e8094ee07e7ee648ed6bebb2f5ec5aae24c9c640665c28355cc11c116795ecc070790f7fdfc4398900311b6695d5da0175091ed1828d2731085bfb4a20bd86cce0
+Entropy.9 = 491686c781e83eb4e21d9989e8d718100b0d21a2c56295888baef1a65f219651
+Nonce.9 = 499085296d21065feabf3106101c8d6f
+PersonalisationString.9 = d208a72f9ae34f0817669fb04f49239dd31700f3dc9a93db8d75fb79f9b686c1
+AdditionalInputA.9 = 9ffc61893a293a864008fdd56d3292600d9e2ec8a1ea8f34ac5931e968905a23
+AdditionalInputB.9 = 4ff3a397dfdae0912032a302a5e7a07dceca8d9013a21545689319b7c024cd07
+Output.9 = 3c258ebf2203fca3b322ad1b016e21c7f5c148425f81e4fb0a0e462dce9dfa569c37a006527768297a5b68461b08912642a341b88c85597e30e7561206886098c4e2d861f11513f0ffdbbc78d3a2dd60c105abbb33c5e05ae27081b690fb8b3610917aa9bf1a4ad74481b5ff8334f14e5ad6a6a1eb2259476078076fb7e3a992
+Entropy.10 = 36a5267eeeb5a1a7d46de0f8f9281f73cd9611f01198fdaa78c5315205e5a177
+Nonce.10 = b66b5337970df36219321badacc624eb
+PersonalisationString.10 = c2a7b164949da102bece44a423197682ff97627d1fe9654266b8527f64e5b386
+AdditionalInputA.10 = a977e2d8637b019c74063d163bb25387dc56f4eb40e502cefc5ae6ad26a6abdc
+AdditionalInputB.10 = c5c9819557b1e7d8a86fa8c60be42993edc3ef539c13d9a51fb64b0de06e145e
+Output.10 = b471711a4fc7ab7247e65d2c2fe49a50169187187b7978cd2fdb0f8318be3ec55fc68ed4577ad9b42cbb57100b5d35ac86c244c4c93a5b28c1a11c2dfe905d608ec7804dec5bb15cf8d79695534d5e13a6a7e18a887ec9cf184da0cbbc6267f3a952a769403bafcdbb559401be0d8b3300ea7258b4026fc892175efd55ba1a67
+Entropy.11 = a76b0366df89e4073a6b6b9c04da1d6817ce26f1c4825cad4097bdf4d7b9445e
+Nonce.11 = 773d3cc3290176773847869be528d1a4
+PersonalisationString.11 = 1bfd3bcfb9287a5ad055d1b2b8615fa81c94ac24bc1c219a0f8de58789e0404a
+AdditionalInputA.11 = edd879fa56f21d93029da875b683ce50f6fdc4c0da41da051d000eed2afefefa
+AdditionalInputB.11 = f528ffd29160039260133ed9654589ce60e39e7f667c34f82cda65ddcf5fff14
+Output.11 = 39d1ff8848e74dd2cdc6b818ad69823878062116fdf1679942f892c7e191be1c4b6ea268ecdff001b22af0d510f30c2c25b90fc34927f46e3f45d36b0e1848b3a5d54c36c7c65ee7287d325dfbb51b56a438feb6650ce13df88bf06b87ac4a35d2a199ea888629fb0d83f82f0ea160dc79ed220d8ef195b9e80c542f60c2d320
+Entropy.12 = 46571e1df43e5e141235e2a9ec85bb0faf1dc0566031e14d41a2fbd0315653ec
+Nonce.12 = b60ef6a3347967519aabeaf748e4e991
+PersonalisationString.12 = 759fd8593e3688b23c4a003b655311770d670789878570eb3b155a8e6c2d8c45
+AdditionalInputA.12 = 033128460b449e1accb0e9c54508759ddc2538bc64b51e6277553f0c60a02723
+AdditionalInputB.12 = a5e4a717240bdeac18a0c0e231a11dc04a47d7550f342fa9a7a5ff334eb9327d
+Output.12 = 9d222df1d530ea7f8f2297a0c79d637da570b48042ecddded75956bba0f0e70b271ffa3c9a53bada6ee1b8a4203c22bfde82a5e2eb1b150f54c6483458569422c1a34a8997d42cc09750167a78bf52a0bd158397af9f83caabe689185c099bf0a9a4853dd3cf8b8e89efebb6a27dba873e65e9927741b22968f2875789b44e01
+Entropy.13 = d63980e63bbe4ac08d2ac5646bf085b82c75995e3fdfc23bb9cc734cd85ca7d2
+Nonce.13 = d33ed1dcae13fb634ba08272d6697590
+PersonalisationString.13 = acd0da070072a5340c4f5f4395568e1a36374e074196ae87f3692ee40487e1df
+AdditionalInputA.13 = f567677b5e12e26f3544be3da9314c88fc475bf84804a89a51f12b191392c02b
+AdditionalInputB.13 = c01cc7873e93c86e2bfb8fc984cfc2eab5cc58eeef018fedb5cba5aedd386156
+Output.13 = b133446f633bcb40724bbf9fa187c39a44b9c094a0a0d40e98977e5466dc2c9adf62a5f4551eeb6406a14658de8a0ed7487c3bf6277e811101284a941745ce16176acc875f1435e14161772fa84609e8123c53dd03cbb868030835c0d11d8d6aa04a1b6f908248b028997737f54735ec4ed7a81fc868199ffb61a779d9340334
+Entropy.14 = 3d99f9b7ac3a2fbe9cf15d960bf41f5588fc4db1e0d2a5c9c0fe9059f03593fb
+Nonce.14 = 411f504bb63a9b3afa7ffa1357bb48be
+PersonalisationString.14 = 0bb5ebd55981a25ba69164da49fa92f2871fd3fc65eb30d0f0d0b8d798a4f8f2
+AdditionalInputA.14 = 288e948a551284eb3cb23e26299955c2fb8f063c132a92683c1615ecaed80f30
+AdditionalInputB.14 = d975b22f79e34acf5db25a2a167ef60a10682dd9964e15533d75f7fa9efc5dcb
+Output.14 = ee8d707eea9bc7080d58768c8c64a991606bb808600cafab834db8bc884f866941b4a7eb8d0334d876c0f1151bccc7ce8970593dad0c1809075ce6dbca54c4d4667227331eeac97f83ccb76901762f153c5e8562a8ccf12c8a1f2f480ec6f1975ac097a49770219107d4edea54fb5ee23a8403874929d073d7ef0526a647011a
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 369f0eec011db3db44971ab16371c7a8de327a4852bd34226e0f25358e296ce6
+Nonce.0 = ca6043750aa99545d1597f71d583246f
+Output.0 = b507091b56fc9e9cd90fe4c466b5a132615df2d4a18f73302f1d72a416b993c4c207388699e645f6048f595fbc7c356f85f683040a1ccc3155cfe4243f169f0f3e8b2ba5fb33b56a090e553342bd543134af325baa23e4cdd114c429253c8ff9a0239d95ded339e412e23983454dd5091822b1e2712b298b319ab3d4ddef3b2c
+Entropy.1 = 268d2f3751c52f9302296f48684ec9f2d88389bca90f78211047d723b6d32e32
+Nonce.1 = 7aad9b5479dc01a02087b6a8e12b7f1c
+Output.1 = 429082b705e7d0f2b2faa9028ecbbae792ebbd1fd877e309f5288aacd58a42c2eee866c2d79c31b01501bde6c04ce92fbb40377cef98076f2b63912d3cdeaa5b075a572264509cd3fd66124744f6fa7a3be4ea6f5fde86abf79b22344d73716004c8409a79048eb9ec4a19340e26e0a9576d3964b434118ec715c5dec02984e9
+Entropy.2 = 05ccd9244ef0f0aeae3796ce9368696b90d1c4e2056e83190350e5036d9ac31e
+Nonce.2 = deb6542edd7e754963553b70c0462133
+Output.2 = 402138cb19dd4d044293f81bad9ccaa453f6cfae406f0199d0f5c844674157752b01d6d330bf61772aa2235860387e7db28dffe437477cc7f684cbfbc3434caa366ea5ec1721a65ed8fc34b2158837f83dc7bc50acee11a3b7e21b55fe88e6aa9822c9103e6e43c974ee559245a1c7f2c2c43759ea443d62a9bbe3c5119cccd0
+Entropy.3 = 159a81340a1ad14c0e77e377c9e4da79cabc3fb8f3fea8d1fd830234d715fc7b
+Nonce.3 = 87ad56b811552f05f9839a15780b8b62
+Output.3 = 04200567248d099ed436b77b1fa29b36fa708152237ac96ce18e7b41be6f81e6106feb33527066b922356d477131b45372bb1853ccdec058733274237e2c5cce342136a7b6c1ba8ca52d55241a5a759f3f18dd24ebf37f44cd29c36f606855adc89d91cfa8c0f6909479d457cd26b7eaca3e30db3abccbd89621ffe2c0eee7f0
+Entropy.4 = cb86a35f0e8aca3af38dc4eceeea21d52d43fc03d795e507bc47da9008acb0ae
+Nonce.4 = 05a5f1a5fe29bb529b83d1bfa727e341
+Output.4 = 45b03b3e8dfdddc46cafb4d9d5765a0b5bca694a73a9bcd6d0856076772fb7d99beb199b88e16badeb2dc018b7b343ff017a6b20f6987efd85d14e54ba27b68aa040d2726b3240af3b8848fdae1ba941fba58d30685428842cfd5ac1b1935341cc76433ef100c1c97fa9f11c81622ebc08515a53b707d4f2c57bf24c3b01af32
+Entropy.5 = 680b1088d2a6fbe45e629af37221e89605d6e285f80e53a8bbcdf6dee0fbb6a6
+Nonce.5 = c61821d54b747e2c5287d086dd02e2e2
+Output.5 = 1264b7f3da4a3dc68cb09c40ac75e53488581bf4fc7647a907b381e140c20fe7c707d4bc23304ccf080272731e77bfb65a39035cde1260d58b117c8a240074d6b731f529a8ca72706f1f387e8c8d0a22726aa4c687e2c6b8bdae8204f80e6fa72b50ef2531de3d7adbef5bac4cc9056129ced057995149bd4f2d824add6cc446
+Entropy.6 = 53e83610917a79598a6f5383c2443ead0b3f35f3ec853ef81109c322bd601fd5
+Nonce.6 = 8211d8f173da228877d99f16f5f8082e
+Output.6 = 46094c468c3513e45ba28c4f4466bf5e96c81962ea2cd7bd444d90ddedb16faae7764720e4ddb8755a56bd3ce81598f79b3d135c72f33cfc7a2db67aa0f7ce550b7b6285dfc9f7d2f9a79175c6c5a6e47a9d83c2841b0f8b6ec7d6b864a885abbdf24a516310b1c4dc8d399fc01ca0be7c709f3afb2a3e60290e6ea7f3410003
+Entropy.7 = 24286f08f6960927ac1c5a24c7b75c6a02f40a095ae42c6d4df844015bf08471
+Nonce.7 = 472072af39fcc2e1af9b4eb59e7d645d
+Output.7 = a32ddffd7cb5e73739de87623aad024020a506c551228a465223affe3f43d034fcfc32130878e807c313cbb178be0a87b9f14cdab345b712305f7888aebf0c462755ba59cf6caba7b62185f9ac4b2f253954d94359752999f490b9435d9e1992c34b1ab6a4390547f3dff5517a4209da9fa5284e309b6f3f14f1cd516be3d8b0
+Entropy.8 = da21ac05cdec567d217433dbaac74e3f9e5ac8039412e38b1eedf3a703086110
+Nonce.8 = d9301860762979f2c042233fdd4db0b0
+Output.8 = 48d4111eb766c5bb15591ee9af02c803cd04f3e59db467a6f9083d40d5a916f3092abe5f68297e999bd3a31b0328925417c39cc6232bfa9e74ff9e29dd07e965f52d5127cf1fe2fd3bbb9cd33a87ad2f23e9bbc3549ca69fd25b61462ab4a8e8bd3986ebfda89aaff68e99aea2dd1dc81aeda759e80105f5459207729670300f
+Entropy.9 = 36ca7fa625f0dfd939c8cd11192d9c6a364d57af22d0be45c3e5c6deb104fe73
+Nonce.9 = b74646e6e03efe09d2648271305e8597
+Output.9 = 30edf9da91c2f9824b4c49d601b7df039481df61388766ad0967a665c8907bc57dc781cd007100339dd92c4a8e229998170d8cf3d592a89cc29a43b6b4288fae322f333bd34cc56b95015802c67e358b8d81e0e70578f4437ed4b031550bf6d5d4b58030fdff34841270476afda9b6376363100c3fd3423f5f8c1fddabbda653
+Entropy.10 = 8df532502f4b0b721aabc640bf26fce2c0e98b9ce3d1b13c2366242c839716c1
+Nonce.10 = a1250ef983c762deb1207f22b37c58cf
+Output.10 = 5764dbb364f5bdb53da80028af9aedc7373630ccd1ff8a92fe4bf7b71660d1fdb30af2de5648316fe430baf4fa38673378c3a7285f603f3264546e3bdb0ad3db5e0d41ff507bcb61cc05d9e878186c489804bc79a2cb4d105662310682c47dd4636bc96b9e84261844854bbc835fba216f2bf3a5c9cd439a5351d037c601a176
+Entropy.11 = 86e62b68da31a62d1bb04d391cda1cc1fa3a167d8017e9ca056ad41dde790807
+Nonce.11 = 72a9fca5fafb7fc4d65a7d7932d1c1df
+Output.11 = 58f260156b6c82e536b1b250cde98636a1aaf4369ded6a469c6f83d47d371e64677b4c7ce85c2aa1c3addef187bf7c0845b019ae75b53405595b24f1cafff5734918dd2e36999c5cafbb45e72400ccc53f0defd01214800e59986c85d7fea49beaf7cd1340d42931c4debda0be70e27163b4c81f10c6ca76485961282066bfb0
+Entropy.12 = 0ac25dffd09bd845ed6f213ef2e1da3bd17beb4ef00f55fbcc21448676617950
+Nonce.12 = 6a6857e0009ceb559de41cecad964265
+Output.12 = 6fb0eaada52f5dd0a4c920fced2f86b1a7a1b549649ced0ac23afc336dea4de934dc812260cfaa33a9d111ea6117964c6a6647417da263645a560885e6cc9d3c2a1e0953a525e5df86fbd12df7f87cf632c5f54db554a07805d6977f8e29552c4935e9b2a2ef67276b40756a207162f1d44c90afacecc5d89185b6be4f83d0f3
+Entropy.13 = 4bbafbbca804e6a4aafd89744558cc7758bcd01bd7954cf6d2940307dd9e0d2f
+Nonce.13 = ae5dfda1271a218ed6cc2d03cc98ad55
+Output.13 = 49fd164513dc36255c799e2b86912570a7ccb6df9ecdf14d75894d4950eee167a87f3fef796fa71732d12d8aa0d1c09eef37ebbe9131b1e6aedfcb2248ecc7a86b3305aef3d56b88826feefed19f9e6a14068016f0f5ff902431f859fa148e5412518709c0bcd3088229ba66c96d7ddf40f07c077bb265811bef8198a70f7d9b
+Entropy.14 = 17da1efd3e5250dfde3ef1683bd9cf4d4432a2f223399664f7645763bebd5ebd
+Nonce.14 = 0b160c67b97d5302972b5c517bed5a7c
+Output.14 = 859bab959dd16f2cddb05376b3d3e46cd13c191c18203bf3c0bbd5803cc559aacce48d88564166fd5f43c22d08cda1acd8004f36915739796a39ca96f8e7def14b58a8ee55ff72de7e2e2727389e027657447e32e47d4ea2f0fda48e86046d111cc334bebf4ee1019199c94fdb26169661cec0b0c47176cb5fb7aed8ad35afb1
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 8ee1df3d864bca351263fa00489d73d4a14c92f022a7cc2473695f4aa28ac496
+Nonce.0 = 7772269c9b6fa377349729a2a20bc1a6
+AdditionalInputA.0 = e60fd2e75dd0693ab0cdd0bebcf39be34aa2eef17f186e40c97426e91ddc3fbc
+AdditionalInputB.0 = 45daae78c6ff1b619460be949b6c6d02e1daddccd6839a38d5f631ac704886bd
+Output.0 = 0d44fc2c64abf7e2deb1d4796e244afcd2cbcf543b52c5756b7395eef49480da5a0dc060d7d6b0b5beb6655ed67d13e903e8731b482fff8bb8abd96323a5b4e6b342b1d665fcba0fdd146d41afe3c413fdfb90883170afa62a1fe81d0dd2ad87b2b7db73ef15c5cbdaad876e3f279a0702f6f19a5f523615557aedf62e347d5a
+Entropy.1 = 5045965f5a7792807b5000b5ddd7fb4505731c8a54fdfaa50b15cc0f8bb554d4
+Nonce.1 = f647bf05ef60f0026786cc892d995d3c
+AdditionalInputA.1 = 0135cb725e9d586f9915d2957c2314db77dc87a29da5706e79ebeca8aec414f8
+AdditionalInputB.1 = a9dc7482c99a81f802e9cf5e1e010aaa897ef6cb87136a4fb1d565b6a1e3ede6
+Output.1 = 0096cda80775920aa62f9753f364c8d644fa398a6236b294e288ea9dedf18cffd0a44633bfa01da886b4ef9e35cfd4bd046162fdadd85952e16ee277456ed1ed4d2b1e6127b331070b275933005300af629af6e311bc58771cd79872eda4c8c1ff01bb6a649b864669f1f8ef3bd48def515ac543b71f791b228f63a83d72eded
+Entropy.2 = e1c86f1381aa66d04ef5ad4bf37d616a4f6643173d1255ce9d2d2b280e32b9f3
+Nonce.2 = 8d95c6f153a33d023f16a0223fb850b6
+AdditionalInputA.2 = 5a1ac82649fe40758175ea2190388ae4c3892a77b4b6b7d3ede659ed6412d85c
+AdditionalInputB.2 = f33df558c6c9ff6725f693dae66ae82732c9533ace7a205a76204a730bc703c6
+Output.2 = 0396c538b6c78416194759be86aeec309e650fafda1a3dd3b42fd53bee870636643e74c8ad6e2dd66ed8c523773ae73c67307ad9a38ff8eafe17047a5065416ec7a7074e32ccd0614d835845d21ad8b730c3c45636e5e7076d0609d6f418f4288e543886cd873c115b173dab45cf5ed1ee571b130a5c16c5321442513adb06a3
+Entropy.3 = f6c342ee8c1ce21c48ef23b7fbb81f09db4a4ba40f9530ac91651d01157cd773
+Nonce.3 = 8e5be622de1332f4fc7809d223122793
+AdditionalInputA.3 = 786e9d9fc8a4e69d7debb4ccbf01ccd1cfc01eecbef81e33279f795f0d93704d
+AdditionalInputB.3 = 85a54090284c779d8efa30136defd6ed23313591899cf45165e5e96965e2e9f9
+Output.3 = 72d4e84f08ae57d9caab729e3023b470aeaeb6c8d46e850bb214e54a4dc6b657577b9328eea54fe3f4ae031a8b510d2f2155dcff10d0aa50f6d977c297bb3569c62c178c3cf6eeaffab9af262bbd6ede1d376bd79260b8cdc4e65c32861a08c4f6a2fbd77a21fb2e4cb01602c978464346e28020ddf06dac7bfa6c1425fefafd
+Entropy.4 = e2f4cf8d27ae6f3d13f623c86f9b89d6a4d2ec565a14cdb598cc398bee759e54
+Nonce.4 = 4c9ba98dc07febbbb0953e5255712933
+AdditionalInputA.4 = e87c78debf021b4109b9145e7aea28e37cba6dc0809c89565bf9e445ccfe7a6d
+AdditionalInputB.4 = ae6637919e509dcaa8b8988aa1a6d84748888d00880d2057d0aa3799f76ce85f
+Output.4 = 5edd979d099429df7ba93da29fd559adf961a7fed541fd6618132a2cff323eded1e4729570a690204a49286da6f22744f45bc52dd7704277fa2583ebd79eec34b2fb9ee548ba150c2cd8245380363b6af02568848b2c4d363fab81d8a50ab7a93b7a4c5ba518717947affc2a8cc7115881687fbac9e243a6a44b72d0ce07bc45
+Entropy.5 = c71741d9deb8d267439ad9b02898c8c86bb7c1086a4f849599415ed0e0ed32af
+Nonce.5 = cc01057e084bfb23c304f84b9fb74af2
+AdditionalInputA.5 = e0ae8cf8decb7cd7ce0362f3cb9745684e3c545380ae4c106e6017a6b022153a
+AdditionalInputB.5 = 691a785a96d36f47ab61a913990f8fa2c2ebd613f965585c328512e2b8875032
+Output.5 = 7ba7195b9589ee57c78bdb3c0be0b73aa60cf6ddce6203d4b71290714c034c11477f39ee3035f2c2c67b82b259a12cfdd94b25f1c9ec003071c749f9f49d6bf533046b41df288ee8a9f2c0d5141008b38736c881df2015d471952e04c0b67b1998100186e772033ff0c8e9eafe5b16ae5833691dc261b87fd9394f494af7b91e
+Entropy.6 = 113117270694c3bc4e71ddf24b247d1444102b8e59a60a881e237cd608dad285
+Nonce.6 = 3d0d8bbfab7f44da510bdc2b3bd82011
+AdditionalInputA.6 = d77151e85c753fa98da13045d3336135919f9b935f63b0c2b2329d48211c08cf
+AdditionalInputB.6 = 584f76c57a870b6a56ad16e1e352232790e95d84aa9e9d09ae90aaffbdfcc451
+Output.6 = 04ccffc354bb0a1cfb278af71b9a42f178aa766e2bee8b462e18d8a1c9498ec661137e194bd165b7113fb258ff04b11fba53406ad44057f692446cc688faea61863c35e7e962d8dc48b6facd6d94838c64450b1f7ffd49239a70bfd8de7522cd62471d4c9717ae1a501a7c7449ec1b2a8c8cb95a7e3e59fab4ad9cb9bb7bb38d
+Entropy.7 = dea80aa984bfab5870a28877c225fe071f087f82098a7678d4e20a7366a5ef32
+Nonce.7 = b80f9014c996e080662d2508dd5aa4c0
+AdditionalInputA.7 = b235f3e8666c052ad84806fb10049d17dd789e2c20772c8e6b626c5d18ce58e0
+AdditionalInputB.7 = 958e83f41081db21e38aca7915ac89504f96e62e2eb5d307ab95729194135063
+Output.7 = f70d390f57706633d37e5d9a084856fb4bc15b979303869f3e1dcda73898df876667825e85b873ebe05d56113779df1f396e36e4de1710425cc05235401e08b1e55fb07775d2ba525110cd7bb6c810e57320b79e3498da92a913fa5e85ca0a3c779095d03dcd711af791f4495f0d82366124c08482ae01105fe0ad3a030efa7a
+Entropy.8 = c54de4b970faa4b67cb09d9f3ca85e95b4130ba12789aee27ac6c428a6eca4bc
+Nonce.8 = 85cf6aa08e0415b3e9c1f305bc5a2b0a
+AdditionalInputA.8 = cc191b16b837e94f33e202ad65df8f69fe34ec204eec82cadc617c6df1af4089
+AdditionalInputB.8 = 6622b70c3fea83c21863f154a08fb186bc5ed9f9fcfe214b727f60e77a07aa72
+Output.8 = 1420839289f6be0af1ee01aa5644c85a58c7b9183062e2e40a2987aca2ec6c83dfe1fb3d3a578b644eff81ff5ee3722046681d1a5f81b72a05deca4747b4834e5fb2561027ea226db7b7eb7d8c7927219eae1b33509e94397a7ee756edbe28d203174d66db85911f81f381e15e3f4cb826dcb19af9ed214017c919a6e666cca6
+Entropy.9 = f2e16396676fa0d34d853ce0ea226c3871832a48df511c225f711efc3c46f58f
+Nonce.9 = a8bc3b444cc8396f1a08022f63be4d05
+AdditionalInputA.9 = 1edda2649c50714fbe61e15cf061c38460802230aedadbe3906b0923269e1149
+AdditionalInputB.9 = 9e43abc3d3a481f09bccdaf457da96581bc7d4a65d8af5952eda35e9d01a847b
+Output.9 = bfa514a6126212691aef3a7329f9e1e636b80d376b15758ae489df619ff612ae9d208e8c5030ccf678ab8d4aa841580556d1f91128cfe8998e43880eecd6204dac4874e04b9a359eb2f73921e1b4f0361ac1bd6cfa357e29cec4ed35716c1366608273e295a6a5b97f811c1d7db675ad8573b59b8418771d6215e2c282b1907c
+Entropy.10 = 6a04d1a90b7666e632cf1d18dbb0a6c7c1d20aec7f9c7ea42fc947a149329cdd
+Nonce.10 = 79e323dd7bc28b2bbed53a80e200f903
+AdditionalInputA.10 = 9856e5aad41e622f04f2934ab423aee79b649bc066bc9e70451cfc5e65d2d6b6
+AdditionalInputB.10 = a0a0aaf2201c2d12d803b3059d716c27da58041486d9ebe4e20dd1cca09859e1
+Output.10 = 8ab2ca3d82615dc53c1eb64f16f369819661c04d0a8bb56dbe5848d154cb8c30aa771b466c916e691e1f5d7564783bfdcbe88b8608321b6b5992291a33b05ebc0e5124efc370a5973011fffffb9905dc92bb1ccefa617f9b033f32e62a842ba7fdecd6e0e49cb858e24eb82bffcbbf63fa834bde4ba80db32bc21bf339eb58f3
+Entropy.11 = a99cbd7d274c6d3115ac939ca67d52d0f43ab38fb354df110264eb7d462be1ad
+Nonce.11 = 9dfa25936d6a1952c9a2e0bf530610bc
+AdditionalInputA.11 = 9f41713d7b6159022f093e3aace39fd3239033eb40f959be0e353388b23a8596
+AdditionalInputB.11 = e41b10f633dc719ccb209e6ad26ce3c4623dd6fa40e959fa7704280fc447dc90
+Output.11 = d7cc54165ee2d4fd1d89f9b025dba0bf6c3172aa7f756b6af2048ced3652e97c0241d0e8836b2d919ff43885362f53cd7569a51afa668b2dbb4dcaa23fffeee4dfa10f951c1ebddede97b8cdd5f207707030d16eaef87ae64a98df90fa3974d45ed6d604d3633a17ae90710a39e889eb62f448746a781e94f577f1085546d243
+Entropy.12 = 4fd0335159cbf717b8c6f4520661cc746836b661719f975647872658d160d440
+Nonce.12 = 14b6fdb19e6be030009d189fa3155eec
+AdditionalInputA.12 = fd94b41909b6e6bd5b966073411a54529abce0ca7b96d36d9d5ae0b252938f30
+AdditionalInputB.12 = c20650a1d9ded8e981335bed144373041be44c7c7b0c3681df5cf6a319c0cc0e
+Output.12 = 1653ad31fafddc0c56f0609c11d3d97100dccaf0c6421ca552cdffaa9d50d3fe325162589c5c20824002ea9f69d2585f8c7d75f7032b60c6053507f1cabef8f498a6766d7b1d0c7c1137e3b9f8dd06590cd4132f1fae40537ec6685fd67b801830781fba5a395081dc41ac29248710ec279ff7dc07428986bb6b520b4e822602
+Entropy.13 = 0a8bf98c5c06576c361fa8d2ad062fa285b449547cfd6b07683a9f1b7b5c9441
+Nonce.13 = 8198f6a486f6ace1ebefb650d4fb1cc4
+AdditionalInputA.13 = 02ee68246e71cb327a402a7c93e681e23f34cfc32ffd215fae52723610a5c19b
+AdditionalInputB.13 = fe0d83222c1ff9dbfef2921a391206ad8474b0e04b7534eeedd3a05dfc299c9b
+Output.13 = 9d222c7ac62a830f7deaa90394a73e0178f192c94e1781e8dc7588a9723f7d10939445e5d0529cecc8fc383bf9e5885eb6430706eedd7b99f918659d397387e9f71204df344230ad958c4a21aa206d2beaae2d45f1435c31d648536df00c8ef9b5f52b40700524e2728f510b2f6d8678339d23861999fc8ba2b96bd08bcf01cd
+Entropy.14 = bf25cb51fd828de8f406d2ae16de1e4e9e4c46262518564e75cd7ae55a5cf04b
+Nonce.14 = 6203d68117aa20b980b6b515ffb030e2
+AdditionalInputA.14 = 50687524beffed38fe27963340483886645153311dbd4d10d86e7d6b260e0c4b
+AdditionalInputB.14 = 1e3ebe4a54c3092d540ad2898ec3be1af84a1d515c013632402ffdeede7caa8b
+Output.14 = 007139a46072d9dbb6589b8ecf5f287d3aebb13b480ffcd6e95f0b2f916cd99e75f30a21971298257a80c17e9e41f8e0874dc9da8f6c18007a6e4cd5971df083ae62bb7b9f1bd4926f17e5574535f6009c0068b4ea3a50e2ba6c6aa6c7729fbe8ba58b4b795740ff6ae2f3d6fbe3e06828080cd1dcfb11771ec98ad9e0bac0b7
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = a8c77ba575b8468bb5f99220de43d466cdb1d91ac3253c3be27cf18f82520624
+Nonce.0 = 052b3c6dd0ee77fb8b0980c38ffa2cdf
+PersonalisationString.0 = 4f074ac6ccb7c21c9589fa223428af0e860ae31fe008ecbf520653b9be235ea4
+Output.0 = 5769beeaae2879ca0d7227d2dfc51bd3b7ac0c82c9ccaae84b2db60aecc7e06bb5989418865424cfe75f7014b389a46870e222226e6c1a90a4f16208636f635076793b2ff8c99f93588ae0f93be1086a82f45c786784f683d529157268984d7c13add196bfa0c7ddb314ce9375b2c13930209c52ddae347d064ed5d811f78065
+Entropy.1 = 911f3206aef3fa424e5333519237cc7d59b71d40f97fc793c4876103a2d05980
+Nonce.1 = ea7877e8a5b1a29a10c82ebc8f8fc3a9
+PersonalisationString.1 = 5fd33aff8724f27a9f56a2fb6d49b407e120f636279b58ce2bda77447a79826c
+Output.1 = 9bf6d3f44c48c4b600980a1e1ed36f6554c74be9c97494c77a945ebba813664bba4f75d0993a1bfed4c41dded58fc655ab5d8ac59a120323e0543bc68a6ff5cf365123a940cef7c9e393e288477d5ce9ed3ab474fabb0a5d7a93618172df738eed1aec78ad209866453de33519a63db9424090a7a4df827a25dd53b3fbe4b6f0
+Entropy.2 = 5326824ff5cc0597b46c0a162e841c5690bda10df74e483e4baca0623e43413b
+Nonce.2 = b1f4f182a5ccfe00ddd245a4c8c0485e
+PersonalisationString.2 = 2f29b4ad28f722fc884943c1c12a586ff1ddd04db3d8695392a57385fc99115f
+Output.2 = 994c14885e734fbd200df66c45a68b49451bc4b44406306452efbde9a8d411ecac912dca39593be82dff920d540495d63d10abe04b06ae778473109f39f5257d6a81bf63b7b77ab7dd7b21261aa41dddbbd1872bbec87a4534983892cafd06eaeb71db18ab5557949d6c34e63dafdd048bb4c81ccca712bdf9ad6fd70a6b48dc
+Entropy.3 = 8adf144473335a79173d3af6e50965001a34ec27ccd567313c7bebdbec9f71d2
+Nonce.3 = 7065371d51d3285d6ea653494c308863
+PersonalisationString.3 = 0fdec2ca6179623406f594af0f662c675a7cb7d6fa65030c1c5a04fa4c89fe33
+Output.3 = c4fde769d5db2b89e2e635b08a187c2f9615787705c7ec82946474281366003617f186a4ad42ef51f6833532807b4eb7653d4317f7107aac1e311750931089ded92f9af5727dc40c99bc7035f0553eb1bb6f134312239cb682935c8715bea886424accf89ecc016ef67b805df6f4ff83cf758c277b4de9809bdf7e420b47c352
+Entropy.4 = c58faf114e4cf647c3a27189acf2d6346147b9b6aad7c5d9cca18aa13f513949
+Nonce.4 = 96e1b9425401337f46dbf9cd0ae076f5
+PersonalisationString.4 = cbed9113b3b2170712a8ead60137461e72f46be14ba79fd0a70e48930d347565
+Output.4 = c5d2ce2fb4baa2cf5633634f3ccc13f1e81fddcad1c80f9d1fa3353264b03355763753ef4869766edda1f3dcb8f27d65398a5568e9a17cb5dd0e38e752b71896abc2bb6f945512b4307c0038c519641b9de9a88fce9c0b1a880e23bff0e7d1c56b5d2449bee84fcaa6ef301533bb0827d13cd14eba0a17e0a1e7820d4a98a82a
+Entropy.5 = 39723ac65fb657f3c273dabe094f9c4b69cef6cce25a2041e07e5f3d0c0c23cd
+Nonce.5 = 6906ad6afcd5390340d04dbc484b12c4
+PersonalisationString.5 = ec987d4f7da75c0c6045a11180d3619c6db996c61116167a17c632d6141dc874
+Output.5 = fd6091b2ccf111d47c7540d2ab92e67243e104b6550b2aeb7ebd89b635f5a976890a9df7ca8b719cb4833cf52eae257eea22a731f03fb85798824d9991c72aca8ba856a767804b79a3b4003c2a82c930a4b840cc9df082ab473d185aba3bfb25be5cf7904f0912b8a1320c5ace8c6142e09b282d778a80c7406256a4872f2852
+Entropy.6 = 39120774b5e76bfdcd7a1d5c94b359bbbdfa24e7ca1ba37c8786e6e7d417c363
+Nonce.6 = 81d05d26b0af3000c9506ed5d1332cb8
+PersonalisationString.6 = c36ff94e9777b742cbb6f7a1b7a25f1a64a3d1e343f153149b596f732e854d7b
+Output.6 = 9970e7ac5858f7eaedce07f2a0c50673a91dabdb48de4ccaec668c3e9db5e394984a44d3b9ffda3c874deddac6a4bf5e72b0b083afb87d3fd0139f8de12d319363009d53cef0ae285c507e1f9fec2a080969af22bd52d37868732af7fe71be681f6ecc7d92b4264f6a7c11d5d04d0de40ad9b280f26f6656b56dfda50bbaf603
+Entropy.7 = 6df7250981e3b5a74efec19f15ec73cbcb46ccdcb23519f2dcb2f9b855addf65
+Nonce.7 = e0921ea03a36ab53544f2e7815890d6e
+PersonalisationString.7 = a807fcb6dc1439fe7b4f9494e68b613e56a608a78595a466692387ab6983dc6e
+Output.7 = 6adcd591650110a0ed81d6dd8c885d73d03add2d81e4d654b6c0a7b96bb6cebf011a1778b33370711f55795ec6d2e1938659c409251653fc4c643002863ae674517c44af69c44d1358ed84800c1c9e5bc79a534e3e1c1f207e5acd653ed964a319598d1d73d3040144927712cf554bec81d4665a50e3b252beab0f511e7361ba
+Entropy.8 = 0ee55f1797b1498cf0ff8535cd3430613b6da15d1fc06a851ca8f3aac878ce84
+Nonce.8 = 220e692fe775885b919e1ad689ba6e7c
+PersonalisationString.8 = 0e849b31f01a98ad5e9245c7799f74936efe52d99427621e34dbf83c639f1dae
+Output.8 = 1e9e523c79bfe89c2dca46664e3bcdab79a0a243bdc607dc752173cf99b591757faf7ad84cecfd1af10b5dcd5d76d5a8e41a4782e685db46bd0ecd3458cbeeb11558685d25133e20e5f613dd4a622a73baad3df1a80f14f98da1077a300acb0ce02bf55eae2346af1b7df7b97901d382371632594190dc42c944094bff2862f3
+Entropy.9 = 7f90574ac55c4b3f10a9d39882a4ed1a9e922f25dee0779fd0a5839d5dec0091
+Nonce.9 = 914e40a201adbb144089f34c91786b1e
+PersonalisationString.9 = 26a55b8e95aab92a12b681bea7412f00a48d6b438f54da9c42f34ac5c31ae515
+Output.9 = 0c7f925664c6db4fe5b6eb0b20b0e0bca5a704d1724f33b0fd55ed8c47caf5b77a224872bd77de138b64a8fab6b2c6610a4670d2a8b463288fe063418a19c7b865c876b66a50e8f5620f68cdf3f2108c920023f02a8b44fbb065b1d763659cdfc360109be6813fc63a14a5acf08c4d49d98732a13c8bb71555b0dcf51deb0871
+Entropy.10 = 6da05910b7d742fbfa3296dec76d884c0591c4274b0b1ef7b8b556ab63c99a60
+Nonce.10 = 69beec7da0557e59914cecda553cb9c6
+PersonalisationString.10 = 3e1c544c43118a8115ff26152c57f43739eb5cc66f63d3172bf8732c25607cd3
+Output.10 = 78829fbf89d5f7ac217c75c3d4b36500cc454c87547b53309814496c73fc4141e88ae4d7cb21bd0627c0531402ea16e48ef829737ec84694eeecc5c72132e76fc7aae325c01d8d38b62ae117f42e3d858521fac939241493cfc04f8a1ce4f49abeee9705eb50b3ecf076ecfc464a7bcd1dace6ff61b027c5e50941af8ea01f9d
+Entropy.11 = 90d67dcac6fadf87e691b700a4b6755f388643d9d46fffa91f9ede43e9cdb72a
+Nonce.11 = b0e142d060c97f4bf4fba4663249de43
+PersonalisationString.11 = 3b1ade723ecd8a8cdb9de06e844f5bad612b90946002c8b07dbcf4cb989a7b87
+Output.11 = fecaadb4a186b178236e1ec2def4ced5f796b74bc3b0bf6f8456ae1696e267f1e10e21a27b3f1bdcb3bfa047f9206ed5c1f81195af885dfecf0ea28ba3df75a8f067164e72aa47a42c19b41f7562527eb27e99cd2381d49fa88db481183e1ca351de70526d2c6631ef50839a6775a3aa08c7f96fd1befc5cb7f20d28d031e37a
+Entropy.12 = 19daa51bfec63fe6f0d3461ad0e184bcc6231052e9b84d03d7fb80c691749e3e
+Nonce.12 = 323e269e7c69c02fbf5c8fc2ee6f7782
+PersonalisationString.12 = caf1f074076ee7692d5beb895298caf38f0b48f5c6cf971b20db2ed5628409d3
+Output.12 = c1466592a415356d40de0a4aa72dde8cb1d07529fbb6c8380d5006b36cb3cc0092a34b0c380fc41818a58c81d7feca4755b88b887562f2b478a5ffba88fed5197da8422352e5cee4b92ca91ea2a6f5b7b01b89ea0204fbff2fbb5ae3273dd4aa70514da2ab9d43c4ec85ed33dc9d3e27fabadfccd558bf3fa34209d7ed4c994f
+Entropy.13 = 3a741bafe59aceb22db401d4f26a7d746c5ed7d3f24391153448bd299a86a7d3
+Nonce.13 = 4d13731ee770540ebb919bd07df8013f
+PersonalisationString.13 = efaab02851795f0c8541233d89135412734a628cb61ecb96b427398a6739bfd7
+Output.13 = 0b34a9c51d82017ff2ba9b91baa87d5c4aef78aa51b1bb3851838e9ba1fa0e277fb533e02963a53dc1619807539e3ad0524a4db76a6be1b7b8bdec774464456edf97547bf40517cda7da00da503c133c633066420b9acd878cd3109ecc3c9995a3357ee3ca7004f70968271824c2a6f4dc2199066d9dfc3219439094bfd25d3b
+Entropy.14 = e344a3bf1eac434ca09e944efee161cc1673590fed203527bcff81a97368823a
+Nonce.14 = 2b653a89e549e3b1ee7817f5864fa684
+PersonalisationString.14 = 814146b3b340e042557b0e8482fcc496a14c02d89195782679172e99654991ed
+Output.14 = 3ea100cf50c25d7b2ef286b5fa0720f344de2d568979e7349befa23589083e835205cdf6a4670722fff04260e54618c9c00af75cc26eee665b64e7e628ec4c56a8086dcd583681170f60d565bd97d0f416e4c231e281081b0fcd16c8db63ea9029abbfcb068bf57a36364aa9e27603f447adf337baa35f049a129abdc899f808
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 191c4f0bb2853d9392dbab6defc8ca2eae6cb47d9a412d0490db7d08244cb70f
+Nonce.0 = 9044a8503b55ef8f40063fcf066994cb
+PersonalisationString.0 = 914fbe6c98771f1cec56223e4493505a31dcde5f9700a121be232c044f06a10f
+AdditionalInputA.0 = b57d926494b263f4ffec0190e73ac6699e1e40f162b5a6098d3a53a18dcb68b0
+AdditionalInputB.0 = 275e7cbb53ced5fb5f063ce257d36e8319b64c89fd728f78701cc8168fa4aaa7
+Output.0 = 2cf8b9a153666c8655aaaec79a233d4d715117d62d2ebc1902faba663717b9653a40ad4776bf492706751188c2461487e47a6567370b4946e455bf5caefb14e5d8fac20d9c54bde3235e9406705fee3eaab9a1ac4da9497f98a457d1de4bbcefdbf8d72ecafe52e481d140a360fb1a3f5404f3a2f8a361a792bc0e5ff7430bbc
+Entropy.1 = 66952a80d175c4c1c9088df2651bf38cf458fa8f6bccadb72a7d28a5634ccf05
+Nonce.1 = e1e98ef65bead7ba5a99fe28cf0b18bf
+PersonalisationString.1 = 6135d7e64f7fa25226b273e5f3ece934f67aa7c91e71c2d10206731d8cdbc789
+AdditionalInputA.1 = 0e35d508e3a21cc189fee36d60f5b7f0307e404c0f8b33d9134a10fcd3bbcb08
+AdditionalInputB.1 = cbc3ad8d3f044ac8e1eeb6bcf34a698f18c4bcea3ab66b76db92f5ec6b378398
+Output.1 = 9a2a6accdbc9e2257d7c3379d2d4c9b4814237b993cedbd71a3d1ecd36245edae35415a123ac50f6b8f9cc7ee9043caa37187a24a6e3f7864765f22031ed0f5d87707c4141589a1d837440cd3fe3ec810ce1dc590b0454c8f45ed1c5ae1aecc8cc7272710f396cf0861fbdcea112d03ec2644fd201e012095f6f08fb4a91e516
+Entropy.2 = fd2028bda30cba426093d2a4daea714793fd994175a745665ae2a4f73b8c6f1d
+Nonce.2 = 48a7d049d27b573c93d8e1337de0f3d0
+PersonalisationString.2 = 00c8167deb963270bbc42587b70c040502e62c898d9ee5703b8d06df1b33aec7
+AdditionalInputA.2 = 7ca9b267490a8e529a7c7bac1fd524973983858056ab7edebdbbe21d10380432
+AdditionalInputB.2 = 8bc8bbe8a26b6783611cc8ed2b758b9b892b0c3b8b8054927e5f5690f20350cf
+Output.2 = 0e282478de0fc1b158bf477b58f9a28590f1a5898f0449d516252fd6bf0bdfc6523eaba4497a24d37f69845ca89d25ea727971a6ba46effdd3d2af71de84af3353f092f7ee6d68e51a5da3fce18a67b12914a99126eeef8052ff438898e8c52929bf87fabca66c890abe8b28956f51a85f21a5a1dbda62dfc806a85595a6d506
+Entropy.3 = 66e593c788a9489289b73ec3a9d763b251180a995b31ba5e330a86e698208604
+Nonce.3 = 25aadd63fd7863fa353a352adb7041bb
+PersonalisationString.3 = dd994fb735c46a3173b2ccc874982c86e178c4c35b286f30940f64846ddb50a5
+AdditionalInputA.3 = 65a8fdc7be63f403e56245b5221abb40471cf6b03c9a4c9914a8647fef34dedb
+AdditionalInputB.3 = 929767a2ae876aececb1ae633f2edc928b16de16b2ba12755ced6a6addcdd95a
+Output.3 = ac67f75eab0da1c905637f87ae0c8d1acd197d26f474b4d6b6570da19d37b21ed394cc187687db391b8d9cf6046c6e4bf85f0f3d19af625b2a211bca589163d6df971ece248e10fea8ffd334fc6fd310fad256cc68323d6fe82783047b18b05f3acb46abb7eebccfa084c8f2e8eda74d25544a929eb8830cac9e34713874bb64
+Entropy.4 = 60254f58a67a400f417e849b3350f226dde79de73df115c32def3f3a0e5925a1
+Nonce.4 = 9c550f7d7adcdae3ed5bff7063a3df45
+PersonalisationString.4 = 67d1fa64675fc618b5ca7b98dc2fedfa52a426173048c06bc9a3e73c70e43299
+AdditionalInputA.4 = 750f64b0c9458bcbb991dc638802e0ec1ecdff6fb8537ea028cce9788fd1c07c
+AdditionalInputB.4 = 45967cbeb58fdea27bc77b8313169279a233a6b24c559c07c8606a3f775f1009
+Output.4 = 8c12dbba5021242725698329f5ceab818b523c8fd01c4644568495a3da06ca8d4b0c04d3219ed72020f271e465e66f1c001964aff3ac0a7156e604269fb278bbff1ba413ba2bbc88ce32c47ab085523e43473356c7892c174d18511a540111d5955421f4c090c1f6777dc2293e2f6b855be62e17b6bb6aff8a72c20f107e53a1
+Entropy.5 = 9152351bd6ee422e7cc23905a84e9df973da9b9ef6be79270b25953b2ec81543
+Nonce.5 = 52c8f3b3c1d4ce7b2e4abafe7659fe3c
+PersonalisationString.5 = ee6b13a50f5cd452ea6fae660d9601e7d016bca025ca02bf67b91427def585f7
+AdditionalInputA.5 = c526fba80085c560436416d85a55ce289fa690693c789e3cbdaefd7733d3669e
+AdditionalInputB.5 = 54b5609d580a3f8c8ece8e65c3d185185fe33de9f62dbdac5c76acbf31d4850b
+Output.5 = ae8091d02534162bc8db5c5f180234dd7f379a63c9ff8e0c6a36326beb161f889ee150f283456bd6a6d1b4337b1f988e744335bdc0fa1f29ada54abd1ee0c37c6bf9cac95965485a752fc2613f91d51eacf8ab44a6124624da5101ea1a9fd1b1d779905ed820e7ff2f848c8baef4c3e41c6f715eada4f05366bfd80a1b471fc2
+Entropy.6 = d02d4e9a40257703e5eff98648f7e533e41dca57a8eb78ea69d475e7a3b005e6
+Nonce.6 = b6716a283689b9b53a75eb8bc260e0db
+PersonalisationString.6 = 4cfff605bcdfbc934d8af8d9aee2148983ea754d3eb8946a642c8efe3dcf5bb1
+AdditionalInputA.6 = da7d751dc4de039add6ae6191375636b6800c108edbfbbb1158ae1c2d491223d
+AdditionalInputB.6 = 327497ac302dc8d156801e24fe93b3cdbd3ac805358dca693640b4dc0533c360
+Output.6 = e34f023e0daa7c3a1e556f1596594ea78ff023b6752e6362e6facf98299f2aea069b9a78ed1599cf49e29e6784bb6545b04977c7920502dc6187d63fa845ab4036a739c5c16d9efe699b7a3d016f2ec0898a837f056c63b3d4eb99bc2b4e1e5b02e55cce68d85bee1f841c6a922f052a3b1d41434f6bdb48927ed794d01850b2
+Entropy.7 = 4a479b7274d73dd187c52864333aa73ab4d8552539cc1d451ce746f41118c0e8
+Nonce.7 = da8b0333309c81271d860d00834f5667
+PersonalisationString.7 = 9106f9df83eb13f2c14b445e9a2026b5c6000b34afe2516249aa3012d5b595b7
+AdditionalInputA.7 = 1083a1771d4d035d9906245cf46e00bf07f9470f766033056501669cd9097fbf
+AdditionalInputB.7 = 7b2572fa64aed4a0790311419363056539c93ebbb7732bb407fa43e33a55e0e5
+Output.7 = 20f198b797555605e3c0607beada5e704f951f468d5ad9a2ba1a4283d688a4c26c85b6783eac4ad3ad284d6d0af75be668c027432a57dd7cefe76c8c1122e7c5ed7e72c3ccea44d5ea85e1831e1d27b461974cad2cb52f699c664d592819ddd0b90a0dd793a09468fbf7b3db64cc3819e6d9c46798f88428441980121df615c1
+Entropy.8 = 046c6e0caca05f66b7c7b0965c64429f1dd7d383b64d03d86ff0655bf41cf616
+Nonce.8 = 559d2dd8a47b0bd94e23d28c14126b5a
+PersonalisationString.8 = 7324a958348d97cb437a1799f097eb2be287558525b102f4921910ce671b0bbe
+AdditionalInputA.8 = 7fc8abf7349e5e735f72166142436591c0d4cf6379bceb2371750bcc616c2ef7
+AdditionalInputB.8 = 0e6bf7c49078d25f2873e5304c38d232a99c5a5bcf5e76d87b156fa89b750b9a
+Output.8 = cc3dfb7dce2277cbf912cedc6b0543a9fa942fe23c1c7e755724e28d51038d12718bb0d417c731b8e733059b3031e5bdb7b478ae01fc5065ddba94f32d26e9cd524501242d3a99f18c6247f7316be5ae4a03fdd01514b55a22ac821bfdcb82c6b38bd8d5278995d021e0d81d40a35c6fc483ee08c93fb12a2ecb0073f34fa22c
+Entropy.9 = a026ab58eb641ab68dff0cddf3b2e07b5cfd9b5f03388d83779add9ad1d447f4
+Nonce.9 = c830a9faf3c3c6b02031fd664633d12c
+PersonalisationString.9 = d8840fd34420044938f1bb9258cd0d3404f2d12ed06547542087b1a5bcc21754
+AdditionalInputA.9 = 94c14a30b3900aeaf3a0064f8a9cf04dfa70242f3c6aa27428f33fb778e4cd2f
+AdditionalInputB.9 = f4e4c509c219e723a6170e761d7dfda0bb78ce74b953810864c13c3bb6d939d4
+Output.9 = 569004db5e2d08287141a62483a3d7874ab668927fc87f4d864f4a92d5121fb47bcacfe09bf7f23fb181395e7d7d7e634ea221a7df5875f13ebde451c296f7c61b4ff5bdfcb2f013bce81df30c2c2f4f1e9f05a78ed90e86cc727765e4b25785ef3225757764fadf059ff3c7fc3e175e37daccd99122597eb92c4aaa6a27629a
+Entropy.10 = 22bf25fdaffeec3cf89b615f77d78a271779277ea9706b917eb4d9106bb1430a
+Nonce.10 = 4622f84512e9ae07ecdeafa56729bfe4
+PersonalisationString.10 = 2454a3b2aee313d76235c56af4de49cfccbfabe5befb3e39ea75c6c2aac564d6
+AdditionalInputA.10 = 382fba6725b8dbc099f5bfef572723a69283af910df07346b72dc8238c8c7dcb
+AdditionalInputB.10 = 98d591352b329d12eef10c23771d90ebade36f16d2b33957befb5e48d24602eb
+Output.10 = 971f8a8b9357cbc521b7fde2c16a8f03958fc6470a794dfca80a0032ef9da7c757f955198620e8941094f3b3e3491ded94375ed262f7f42dfa74b671a15c157377fc319c293808c1932b52655484477d19cdbf23e1e90453722a1d61f9f83729c13f74dc1030e1dc5401430d1397381e33efb408a6d657ac297cbd59c61d8a72
+Entropy.11 = ada68accc624c8c30c7c5a4d8442110ed7c45a8d6a645693f322d0b4a5beb2d9
+Nonce.11 = e5f2972bfcfa1122282754fc7b3348cb
+PersonalisationString.11 = 87806a8c4bc013fa85f3cba02a75eaba5f815fb7ad681c98602dd13c91965281
+AdditionalInputA.11 = 9adbd48f9bf04a815556017772d2b0a82a2558a16f2b5d9249931a3b8f17341b
+AdditionalInputB.11 = 6296a548d31454e14bfc630b4f5fba7c0801f47b16ecb5850e870ac8e9c8ea77
+Output.11 = e5511c5a8cc82892315eae52d2f25930fa03433178ef6173cd4a4128ba9baaf264bd00fe8b1a5ff1d68ae9ccd83f092078c70605c585a4dd1391cfa211ab8fa8bc21c7cad7292b56e0f6185914ebe1b9241d7b51d78952b936455d1a93234b61b4ed47bc7a63d8314f841b16a600c4f375a06deb29f8471a2aa7f7ea8eb34205
+Entropy.12 = 9779a105bc750feeeda774b832d74a045383b61969d264fccd3be63298295c36
+Nonce.12 = c5415f6853a1b3bf8aa3e15efb452421
+PersonalisationString.12 = 39cab707205a5d4a4967cb9c5b96604723df6633e3b65600560717015e529ff5
+AdditionalInputA.12 = ef1badc8726464042660724afd2a35b61342e215fc8b17549f8ed470a78489e8
+AdditionalInputB.12 = 2d2d26f781c0d3393422afd14f90aa74036b0fa585e86c68e36749cf6510ff22
+Output.12 = be0dfb331ba8fa326bd7ecaf2768d3f9efb3a329e26db3dd3b56a1f817d36b240b22ec81ba0db533a98ecba3148de7f0c23ca4f719851208ca3f11cf2380cf757271066257763aa16b804dff1433a2eca3f5b85f0898191913ae2f35212663bea731c123fa8b9697b77cf70b31f559d9c5946e7a5d5ef1f568c4e9180755e13f
+Entropy.13 = 590566793eaf2b1deea85296d189a9b9709c42f072a4eed2836bd8e73b537940
+Nonce.13 = c2ff757940d823c72f1fc5526e7c810a
+PersonalisationString.13 = dab526476eca7b485bb17c3109e5dc98d24cf605954c39385a5f813cf3c0171b
+AdditionalInputA.13 = 65d03afd4c553ed446abbed2a0dbd7c1bedef4c4d4de6dc41a59489e9fa8c61c
+AdditionalInputB.13 = 8006e5f77ac2f0613d3b4cb7a7a2eca552a7b6751cf2c23d58391a5712c22da9
+Output.13 = 637590a008a9b8d1dfaf6c95b015e57680bd611093e1c4b7dd102ac7a4918614dbee4c801447a91ba5bac589b30382b031d8c0106fb804b67fdccceb3ab45377e89422ed8b1859b8849eece53e29d4793b9a3af0a645173ce380afd99d5e4a8e922c7f6dd1ab3f5752fff2834ae8fa37ac6b221ff9e4e1d58241506180e0a325
+Entropy.14 = 8ca489bdb9c34722db712d7d63207fe78bb6ab645bf7ff7c8ccd7acebe555368
+Nonce.14 = 2419a6bc6d2e57792264091585427677
+PersonalisationString.14 = 8f8642092eacad449117d08fbeb49d312f69e3b4658c2dc94c1c0e4d913aff71
+AdditionalInputA.14 = 95f6df9905b652de6d08399f61956acf943fe412bc71de60d6b69881f8814b90
+AdditionalInputB.14 = 87b818568ed80f7c2e8f5b5d7be403f8badf9fa0e716aaf1d6409957b242aa07
+Output.14 = 45b5182f313a26008bb4ab82f68a12e7c783c243ba1ac6d8bfaed44ddddb607f964ace9c3505d59ef5a3691143a4845491661a1dff8ac4de2e56b54e263ac3aef86966fd656b5a65d4f3b89731d50fa919663bd5691678ee5f8f499e84b1822bd0b91409b62cf98c176df7e812513f3252d25d15fe13ef9f253af477d16bcfcd
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = bf834dd99be9d58e3f6eac7664be2922c5fbcc99b8337037398e72757452b5f0
+Nonce.0 = 179123b7c887982acd3b4a37f3d87283
+Output.0 = c46477fc8d4c9c2097826f24f66f65bce6888d9766ee2264661f0c32ab452a0f7b2d1705e2b22873a22fbae0ad599494970b2780881b0a89dbf237a5c5b868114ba2004fb737ba22985368ab2e1940369888f484e2d628c7426adefd35712dd52b91abe48132974cf97a545140d8820da92a6a301e3f27e6b3160b1f4c1dba91
+Entropy.1 = 9e99d33410a8b2081814714ccca9997f8efa85bf47b3f44325000e7a26885e5c
+Nonce.1 = fec5d7169c2af87b2075f8c7953a2302
+Output.1 = 9be1e7e341343bf0497ca2af665f5b2ee7935be8e8e8b10f5fe9b646bd32b1876a634207338a670fda09b750ed589c56901e7111ddaa2158574d9f0ea4a7edb84559ef406167e107b0b49ae32a1a318d038fd83a372ab8e1eb04e845fb2330b5d3dab39924016fedc5ecde3022576c4d00c790a1cbbc60ba21878c73e50921ed
+Entropy.2 = b41e761ae51064b5f1bc3d77dfb4b4ceed1bc4bba7d4f821895b84081c31f75d
+Nonce.2 = c7b8a8d8ae06daacf64cfb5da139a553
+Output.2 = aea278ea3144b9ae4d7286d48e07ce674062417743b7d6be2ff8a9ddb39b1bb0a76a3d6e76950aec4fce2376eca7056f4897d8cb8799634ac8120fd75b78e6874774d040353493312007f8ac2c85ec046f9e54d6c54e4a64f708c97ed521628ace6d4811144daa0ba734bd89adc1553bb090e5dbfde7158d3b7e04187cb26ee7
+Entropy.3 = 8d12298dea58e35585545ebb5f20d7da6a640d59c1485b38a60dc56260e9cf2a
+Nonce.3 = 81bff3acdb2c6ba76fa2cb029fa29cd0
+Output.3 = c19ab18a2e671d589a4931fda6c835dc366068fd51dbab62c842b9846f706eb27344076ce772567e3633246ddd2594188cb5aaf7520d89e29707126152b94434a1d68fde56754d78234e495921529318d20965a19878857176f1aaeb4231c2cb535a4b54dd6b245ea5306b7c03b00dbf83e927228a7bf048f34ec3eaf3b0e7f1
+Entropy.4 = e1b9f54f7b16028caf1facbbf5a09d1da61508eb23848f9d3cb961dd082e0e3d
+Nonce.4 = ed5606c8230f993a0ef8e30e4ac6f87b
+Output.4 = ea858ab66ddd7c268a4a21aa7655430353ca0f12026e6c7792d6bbbcfc84ae6d59e478075881ec39d074c60a01eaa46e2d0663b323d9dd31471cec1cf858e5c4df4f0ade660bed3eee076b0fbcc09f7429eb756a2425e2a0435b1fba221189e2b28002370cbc85d4fe8db544f80e0abc5380f309a0acbb739cc07e7ad3808108
+Entropy.5 = 49137936175ffb835e80ef48fea9354bc018a86d23596d561073cac534f4bf8d
+Nonce.5 = 753563c02f45c9af21b815eafa77fc5d
+Output.5 = 325efe5b6e98a1a0cfb52fbe5f72ff93b9026aaf908e0deb512c75535ba6f17ff446b4be926d946b559cf86d2d16960ff3407576701f7bc02d39b345877ff4ecbb463202c2bd4e32a200dcebff6b7379c954ba1a995b565fe4070bf0b181a800b07172e5a7afe1a428d2966b893ce671b3a847a38037af3066fc4c5631f39d4a
+Entropy.6 = 4849a2df18e5d528c172481958e1d1ef53a608e213698af8ecdbbb508daba39e
+Nonce.6 = c827f4b4cb07303066bc78d5521def39
+Output.6 = 00bc3d2b9bf7e56add8c25993c998ad35ad55eeae3a338a31334b60a4afadccb6cb8cd9797881bea849f8c914e1d25780e13d2e620b5e18930dfafbb2f362bdf8bf8ef040dab3b16718419ac27ca1bf7132ceddd1657d60cc63a7760cc8d463e30e3d2a9c7dc50478438a7d8289713d6934fe38865f039eba69fde55093067a2
+Entropy.7 = 7fa540133452de6005b1d79c3fe87e4c50b942ecc21739253a867d27af439043
+Nonce.7 = 84fb3e54c85c20cdbddc04a4538c8038
+Output.7 = cd1489b14b1f9e784a5d11af4502740b8f1eafe07ddc818e7b0236bf0b340acd4b8bedb37a7cc7f168701c9339a8d3ea11597cb7d04d3c74baaabf1c76a1fc4e58bdd35237322ff3dc4fa613bf537dd1198d7ed2ed91fc71f0224fb8872ca75398a64a047fdb733c320d45bd662b0a61036e017bc9f0684b3e2e9a7ff7777ad7
+Entropy.8 = a541ed73fcc5fb2125edfb514eef05c4b2e55d68b0c03a9f24da4d78c57d472f
+Nonce.8 = a81fdec163cb205cb8927020edafe7a2
+Output.8 = 6b36f4b229c6092d430fe2b413d46a577d90efafdd84cbfc9b9728cdfd5845c98f203ce507f7b618d3357217f7abd344396275cefa11bd9e572ce2d011abe66992c64b9393020c2305d45b6c4c50db4115f2f2b79f4659b976932d99fab0d3c5eda0c698ccd411ce9ea89c9f1c7970895889e0dc82b8fde4b67caf9299f1c073
+Entropy.9 = b43bff7fde71c178cbe11e7a1350c79bcbe619ac4b428ae90dc45427b962e6a7
+Nonce.9 = 1a1ec9ae03b53cb86362c6daebdc6214
+Output.9 = b358fa64b37fee910c5456767e73cba955b0768fc5d073e0c96b2072f55e1e7df71ef17ee04b6538d4045e930b65f666b7208f95800367fe74494d101d7f79388b939225cff4245d175a142caaa450ba15f407eff53e6978cc48b41ab6cadf158e94fe4a5821a8c71d2f2bc98c4f87d8d424d681924ca3615f15c1ae720c6b45
+Entropy.10 = 11603d301f43587b45021858a85ceca9ce7eec33baadd09ee073e9d12cf7dccf
+Nonce.10 = d80d5cc4dffdaa05735079dd391ae848
+Output.10 = 05ac8bfcc06b4c6114e33d93f4d49616b58814f5906e28937ebf6316fbf96f71b6dc5bb73a4966e6a10a7f065a97171780e2204da4f7e43057181612ec2bc82ead92610552fa969b1f49cec59f1ced0ba5bd2285069efd6e4e0916786047037171664ddaab2584d18bfde5364d71e1a5d0804e36ffab26208ee96917ed19bf8d
+Entropy.11 = ded63893594595036854ac58a1ba4c49e2a262bd6a5bec530b8797dc0f491be3
+Nonce.11 = 267ed02edc56cfd991a510fb6d0f69fd
+Output.11 = c8ee488d07eab1ef20504dd838c01003e6f2ea51aec3ccca927290bea289f44fa692b37766787ea91a3c5b48740f05ebe56c7cd225d8342a46b02064e321d90831384b301aab6213b010336841d09f04c9ee6ac4ecbf1cb932ec3b2fc9a15596d5b1129b67021de20077e975a4b8306d65c5adca4ba590b73483cdea53e87970
+Entropy.12 = 9e520e1d515e4bec39f2cdd032cfa9bad9ce5541b107d7e6a616833beea72a40
+Nonce.12 = 3fdfe4b121b69dc292081b0edb4e68be
+Output.12 = a3e9f73213fdecbc0f415724c41fcd0f3426def28ce4593b8358a56adf980868e01069c54f9efc679c7320c9153231c394a07421ac162db788942ea01b5351776ba5747aa8bd19ae982816937e2ea556204656c582323b19103536db68122623b53b9da6ab8da8c77081ff746f354018840f45a019f308a1d77a3c5a1397bdea
+Entropy.13 = b5ced385bb14d96498b7c8f4d11ab929b482a2e6050a5d303348aa97f5265092
+Nonce.13 = 3508f53b7825951e10a770e826b7491a
+Output.13 = 01b9191a5078fe1d330a97aff8ae937c7cb3f66c9764e200ad94696ffd70a9935ea14cb50a888548c413d8a1fa0e1511e3f20b6b87f58ee90497ef188fe6fbd4968d77c1d70129dc8f4cc83cc72bf986f4ae84656b92a50ca071400c7db3738c485151ef60e4821e0f4c5fea1c75831f5dedea51505ea2e6e327cdca133a6f53
+Entropy.14 = 32695b2c55839eb3a048fabedcae1f23bf0c7206280ba4ba0d08b9bd9f119908
+Nonce.14 = 01f2a4cf8a9311abe5ecf58d6661dc5a
+Output.14 = 4a4f44f418d585e03f508f2ff05345abffeafd75f610a957be7f3ccaae31ba28e69bf8ae441a405fdbc0ee761e39c76b69062f5a3866fc296be1ad306e6584ab2d250d717605c70a17c46a298f714e4e820c85a1fb84f4d61b9857a40c2902193ad703c78635a2791abe6abca6124229ed75827135c27f1a04d244e1d73ff059
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = f3428ae375e688496eb2fb0cd772f429a2ca9a76c032d3c9463cb50e0b5890a3
+Nonce.0 = 4cb6959e2fca6e7d20d4fac254f8a7de
+AdditionalInputA.0 = 0f5e71a5804e9405e4f8676aba4aacfa4e727e0815a80b90f581fcfba078f842
+AdditionalInputB.0 = 7f80c2e83cb9ece1648b04730a6cae9b8f7cea3fd5e2372324100f9642d26f4b
+Output.0 = 7df486701b3a8e168094531aca081818d619697bf6c52e65a507a8a100cfd3a12d6fee64707840af7d08ef76d5cc16485157887800bb1dd5193b99496dd5009c53050972ff006739f198d86f9815fd014e54d4dc0f99b364aa77b74ad98c33dc3d007229de7a9a131ea388fc838ac966fc52f4924382ec288fc80d20b046df3b
+Entropy.1 = 994a0a73b6df92186f4b1ca970cfe343729800f24047ffdc8927fc828bd522a6
+Nonce.1 = 9d85ca8f29bba4f1c01363542e183c31
+AdditionalInputA.1 = e9817932f8d67a67106bd4554c34a1a0a9e6a8daea41cfa17d94843c9b22bc33
+AdditionalInputB.1 = 2fb1acc70dff1cfdc6e9d5f5aaf54d47ba35d65bf2a753a42031933dd4831c4f
+Output.1 = 04820d0328afe9fdaa1090d8406b4da05d715cf7d109d548a8bbda5252fecd9444e1a5440f55590e3c4d9627f819a50f85f0718dc9e52a575a3b8299ae692fd85aa0012f73ac1df36425b1d3e4d2fb829c2d268492516f648968adce04670e94112dcda0a24a3b20f2afb719e0c29c0de3260a0fa4866bfee297acc9aa5f1578
+Entropy.2 = d4af86308ed748abe5d167b5e909beec78dba45b2bc843688ad306ce11b4e013
+Nonce.2 = 3c0463a033341482d9a801d48f5dae8e
+AdditionalInputA.2 = 5b76e99c5cc24ca3ca6d3a2ae00929bcebe1d447e05402aabeb655fd5d0ec317
+AdditionalInputB.2 = 9ef2a90d6a55b002a2315c7619102b22cc237f6f57ea1939558a0efdbe77862d
+Output.2 = 3e459928d4dd84b7e260b4c61ceae1cd16cd4eefc0fef1ac60a470c6ee2d42c90212dea44a991e0c9958601374b8c189fef1ccef875ae6edc7ee8acbbb9fd8e16e7911a62055e07264494a236508c44006166df0ce858b0d7048acca802ee2f4cbe9d07a4185ee6e389364dadf33cc341412d6d95d6d56c937af61b3c8efefbf
+Entropy.3 = 04644f5f4409cf4cccdbdf82fe0c18f2bc402d20639789e7b6910ec8d29a314c
+Nonce.3 = 9697c728062baceabd2a07d88afca4d7
+AdditionalInputA.3 = a0b73b5b1a0027e57b8b2b1a430eeab72eb714dc08d95077e001587cce1f82d6
+AdditionalInputB.3 = ac28cb0721f8487112a1530b09f2842f0b77381a7b48cc297f32e24363006c23
+Output.3 = 602b4925c876c3eb47da8311da030f54354d168cc3afb980ecbce27ac4d87ce85f646e649c3b3e881efa63fd3525a5e27718bc2c29efd5c4a452747e49c9815750b4bf969b4b3e85ca131eb60596b7c32c7208b293bb62708368a079af6134d6dccf6a50cffda785798b9f80146b353727cedf9e6bb9e25a0217ec55ac1b5b9c
+Entropy.4 = 6a67d9773751e7a143ac8f5a99c633f7178fb241a2269cdbb3c0b32bc649d503
+Nonce.4 = ff0ff303e0e567dd7ddd4b252eef9708
+AdditionalInputA.4 = 57257c55ca2fe1a8a50a20e635109abf7c5850067a520268efad2cb418193888
+AdditionalInputB.4 = 92cb366adb81fa8c21b665a7c5fce7b6c9f26c3b21849a38b02e90bfacb5bb56
+Output.4 = 6feb7f47c9d43ebc493adf05b8cb3fc21184e424a5b5276978d8ceb2517f872683a55e6f19cb03bbd52b75b7c532b0e9c07045f4e3f432219807a57c25e937475e2c40b4f488dda434693e122f6dddf3934aa1038bf7458cbcbfd53e8aa51ac84463d11460d860205f72fc1a1f11d9bb8b333a3d2d887388da5c4d3d99ca52d6
+Entropy.5 = 08aa05db8a9d5b1d61ccb8498dc7a5b6256f7cb07eb4b3d661de84e710dfd232
+Nonce.5 = a0fcb7f1b7c499586d6b3c68240202fd
+AdditionalInputA.5 = a80a861d9c93dcd4b3f9771f55d32737fbda4a7de39c0b7f12af1ef26167f49f
+AdditionalInputB.5 = 650bc4f4e76c8c62532fd851d775b8ec0427eb7ee47d0fa811ae43b4b8e8be58
+Output.5 = 6b4203d79b7c8e591668b0704356e32c67ad3914e1789e372f420ce6a08af752a45aaacfb8e6e1384c98528b00dbf10012c94e2df67b47ccbf8f346e7a5f8c6881bf50fea7abf6c87e27f9619e33a325c891691b735f92b4efcf47de939495e3f718b05bad728ba85d5ace789d6bfd149d472822524822a333c464a82a305b76
+Entropy.6 = 6ba11a9dd7d9d46bd77e95a199cd4cc34211cf3ef98b2a9b3338d06a9df80e65
+Nonce.6 = 6885b88743e571edcd7cb1c2062bc178
+AdditionalInputA.6 = acb78b034b56232b6251c0ef300cff4eb74913409ad9d761084b038c6e84dda9
+AdditionalInputB.6 = 961679305c08c76dfbb8f246a14814e69b0e6b1b814c52787b70b64a8ba669af
+Output.6 = 159b2530a2ed2bf561ad577b2a86bb0fe69e78ad6dc533c1da61f8ce40f3610921f2cc36edaa07673869a36676bde3ae95886e057a372843716c18fbcf2b175414b443852544d83489bc2cea194131f47e3a222478450d2a332144ea5cab1c3ef06d3e86c8a901a8ce4ce822f0d6aad20c02377500d65839460588cf455a2313
+Entropy.7 = 1643caebba4994f361aa30ebb7bfbc05269b94bfe04460ec17198d34402c3e3e
+Nonce.7 = 57d6d8dac11901483be9edd9a142829b
+AdditionalInputA.7 = e1984dfe543324ee3d01290deac012dd2cc8885defd80d50cc172eee873b2ff9
+AdditionalInputB.7 = 5d67e46e7d6333ab3a2f0fe92e8c8e544106a1d707a3b1aa7a318de3feca27bd
+Output.7 = 4b5068ba8aa425b779987af553e226168d30a8fb8c11e1f016fa11a0d481ced23d2d8d72dbd4f2371cafa7da2b6058a3b2f4b6d195b3e803015e49ae84ef4b1fb76f60009fe0a99363a99a4afa621f8d9dc88a8ac6c72421f458ee53fd555ed8175b169ccba11f37bf43402d4671b30e70a03bfbec40ee38aed7840415e82f4c
+Entropy.8 = 04f03b4059da6f27ee002be1293f9bb847e815725937a20a4b4ddc14cd205868
+Nonce.8 = caa8372e9c756eee3e866e06cd1d8635
+AdditionalInputA.8 = 7200badfd5e0b72a2a811b885c640dadc83934045abe6a75abcb4a32e4644295
+AdditionalInputB.8 = 9da5ede4dd0f7a19a18fed57682962ed280a1cc5d1f4f31ce75709f85b28874a
+Output.8 = 250c97b743594cb37645b07bf1b5cc2b647ad7e833ef409558ad6898773f1288cab24598e326bea0732cbc0ab50c7eab9f7d104a4efe726e25d04d43dea5ecbcfa1c03968a0e6b9ed38dfaeccf2aec4e7e86a99098e0d5166768af280b0dc7d70efd0a758af3dfd35fc8332edfb47c70d0d802e09ec5feff3d3dc5688f6d14ca
+Entropy.9 = d5fffc4f57c7b4e45a9b7bf5fef3553c4cc8dffe6e57d2efc0bc324f1900b7aa
+Nonce.9 = 2a29436352fda465c64c49680d0fa169
+AdditionalInputA.9 = 0f4531bb7d1e47cfbe675c85a77361fdab2a8938dc546ce60a21535590a972fc
+AdditionalInputB.9 = 147e0561311ee6787004c40028e9d00798fedd55b7a4cc68d67a9cc44537037b
+Output.9 = 0a4261eb4f92e279c13c2a598f5f1652b42893147bb56379325bf135efd275599cab58b1f5e4aeb5d6f0887812cf129a08f7295d77257057c373043a63317466418b3a7531d7c021e46e9b1228e3de2768a97b2b13e4338854ff575725a6c668d43267e27f42f3227a618c815744419da141f4d190874cf45277ad4dca5af077
+Entropy.10 = b36567bfc7f655ca65d92b623ed689cd21cc6733dafe6b4d3fe2ad51dccca2ad
+Nonce.10 = e06e4c4fa61ad7850a4effac4da4982d
+AdditionalInputA.10 = 4ebebee72c9b6f2bd24e8eba40296fda003c09664d12db55860d1f088f7c6402
+AdditionalInputB.10 = 65cb123c58f4e38d0f81d9dcd60fd29903af2a67b11df7d23097108d70211a89
+Output.10 = 4b487111edc0e1f9a4cb1afc9dcb610c8fe9d48848678bf8a96adc4c934d6111615b5fcc4c239087ce3fe54301aa1c648f3ded4eaaab4c04372f0d2082f726da8027657561ae4b2cc8d651d8099506a31b5a8638547966d69506638567ea10e795681152bcb4e9c167b77a01b9b44c41f3361d247654b295c770d427f445e363
+Entropy.11 = bbefdf9f55f4255c7b51563a21eabd43b368c14e1a931a3ed599c393f4f0f884
+Nonce.11 = 91557e5e2d7e7d10288c9a6d3eeba345
+AdditionalInputA.11 = c8f142b5ae906928f263b32eacc42dfc09e4edf7661364c621206d3cb81d52a9
+AdditionalInputB.11 = 8963c3defb02e45c4932f88d14861dd337b158f2816e19b2e8755b3a0b0aba6b
+Output.11 = 44b7f0912606cb938008500512dd286d90dd12d4419405db5ded4e617fd249cb7c1224bb9c4d11515546065f5edc5bfe7fd2d8ffdcbedf22bc30049a2d7e550650a49dc65e7e941e6429728ae5081d2ba1061b404aba6b15f713694ac653497b8a52c7bb55a415547e964d4b487f8390b151f6c5e485f426757f0d739f4aa565
+Entropy.12 = daf8f8a18cb7b0aeb4e9868352c1eeadb819411d7c06ae0c9687d76ed48b3ec1
+Nonce.12 = 489c0582257a88bde25f7f1328d16e27
+AdditionalInputA.12 = c824e701fa84122ca549f4cb07dc33efd7eb8f36a9adc449352a2d38cadc39a0
+AdditionalInputB.12 = 2efc4ec1d7e1cc02e63d7396ebf91bb624d7c743d2acd5cca7c4cd8c82d26245
+Output.12 = 62532b66b5233431874ced72210b676424bb9d4950a366e8c334c505fad419d20ad3b1996a3709ac4e165135c4c3198d3d7340d6c700658078d5182a7dd684d165fd095ae1001deef5d7eff9924ce975ae588e625b7799ef9ee437160129f54f4625761350628b56dc7a38cb04b0fbccd2fc67322228fc179d064e3599080a35
+Entropy.13 = 9cdc0c9d7e25fe80cb61e3745989498511dc4e5de76833438941c947aca3b1f3
+Nonce.13 = 3b81cd9b6082ec5a3d222c14db62f65b
+AdditionalInputA.13 = 90c13afc65a139b48374b02e91232223bd9ca319b9dd26e920d277c939e9ecfb
+AdditionalInputB.13 = a68dee224c30d58bb869b3d84aa77f7eab4d4d1e8130012a0d443f9be9a643ae
+Output.13 = c5920441447b8ca365787feb8ff92ffd18d7f28fe7a8c726172c95d642ff3d5b38c4a9f09e72b7c095e73d2ae7d01ca4d9719c318cc1311ea7cb2a40bc8a1d75e4890508bff48fe74da84e657779c94511d608154e48cd252907d4918a36f1f20ce52191cfd9c8f36d48d24b25b81636524b191b86349a5a4883bb078e4f8ef3
+Entropy.14 = 26c7b96f47802510f0a0ed22eccd26c39ae56638aaec9a52d90d1887297999c0
+Nonce.14 = 09ffbde5ef15ad645b4daf2b5bf8bbe6
+AdditionalInputA.14 = 2e51dbbfda8c92f2c838bd85ca5dfd7f35504fae1ad438431b61c2f0625d5201
+AdditionalInputB.14 = 00f507a359585778988b6bb6b91f23d4ab29d2adbe632e4cd4646c8cd5f1b76a
+Output.14 = b7adbbf07414551464711ad9a718315b0587db2782d34179b70b4c0e323a91ad9de40933023e3a6be71cd50dc58953ad1bf66354bc45dcd9ea23682d487b43903a8f426182536e170af8b04460c586d8ca56e4c307ab7116d8130634dc9a58e1c3077bbddd6bd58c8a0fb9b18c4b839aacf5fcd711c611db120e6a605745e86a
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = e50153d9d7114aa4b8535482f8c4c8f187e4bc12a59d35c51f3fae9970d1f778
+Nonce.0 = 1175f514a24b02cdbd1d90396f92c51b
+PersonalisationString.0 = 7ba1b78349569a81902cbf95b5127cfdcc5bfaa761c349f1930c62cf536abd0d
+Output.0 = 924462b8099a1019cb8837342194ad10f24b3c70b0e3b7ed8f28063ee5ad34a725a3311557ec63c3044416e785739ed4ff386d6f5e5bf53d23c45f62acf725fa548b4c564e562a458424a63dab7771e4adb68fcdde2c250413bb7e95c47f117d7bfa85ea3cf7034fe52b2611fa5deb3f7be98e27b8e5adb83f97e897d4e0cada
+Entropy.1 = a1a7dfd64b0bb565b6965c23af2ec3814714d1a7af4367d249f3ef2c28e10d70
+Nonce.1 = ace62601e397838eb0093b8bfceb04ed
+PersonalisationString.1 = 128886ac929d9c4d198cf29091ae013e3ba2aad3ed7c017f0da7dd9da478d8d3
+Output.1 = e7e3e99c793157becda566413ef21fb41e468c1192122f4f1ea6be51d946b99709235fe7a028319335120e0d60758f85fcc653c5570b7adca527be222a867e33c5fc90cc2202c43d036a25d88f0121a082fdf7d145ba95c5a675b247bdf5a3d327e67e47fb2dcf821faa9a907dab628f70a0e0c7bd211fca2606899b46c0cfac
+Entropy.2 = 8eada77fc0bf869c8077a6b3aa697d4c818e398b309c4d9e73b77e7b43958f8b
+Nonce.2 = 4ae5f1dd363ca3f0a3e8bd65311102ec
+PersonalisationString.2 = 9328cbc2233821eb0b977426c07873661549488eb7aae957e0110e3762a46864
+Output.2 = 821ac3c18dcd7bcd3059ed4bd02bb9623003a2b05d823f17d3c89394264af0a9e53ce44db9650a96498bdb21f270f854aab79c053af154c271a2ead59c74b8ef420588569a5c7828b7f3488069bafde17d60199224bbe3e40b177d40e91c4b748c4f5d43b634f2d7be50bf037b0f5385ffc54e050e89013b8a8a8a238bc5767b
+Entropy.3 = 0edc07b780c304d8145a36ef567912244ab3c49c11d0ee4e324850f580bc7f8e
+Nonce.3 = 4044447c33e8a9349774d409ea04093a
+PersonalisationString.3 = 32d1710102b28da78d2cde1ae3a14e0448603dab18786a3a43be95562161b037
+Output.3 = 9ba83f591a73bce88ea8a8cd1486d383c64af6667025b1ce4b930e389b017abab1df9691b66f7b57fd52320c3676fafa280e17fabfbdd5e567edd216fbd8cf1aab2c530ef7bfaa432305e38e3a8fb56094a4c6ea0708dd4c8b3820bf3b87e1d7381a10ac23926afd91baa45baccdfebe78822146b815db2ecc4deed0298bc8a2
+Entropy.4 = 4fc150782f8aaa6ace45fc5128b8478cd8feb34d1cc3e14caa8508d8cd252581
+Nonce.4 = fcc48fc6618359b700d2936114aea646
+PersonalisationString.4 = f7ac2f0fa50fe11d397311c0387df50567004baded7941c0ad9633654a92ea00
+Output.4 = 07e2a5d9d56680dc39f2d514a3ef48d39d3a8f024cd692d5bad864a765ca7a701016fecf9d01aa62e16ebd908c8a335f147015e1656ec1e646c12bae177797d0439794400ab7bf896577c64bdd1aa0aa3a0ffcea31891bb971e7d62a4b45c23489ab23cdd399ab6558156129029ea09b8273d0d9955054a4cee427988bb44372
+Entropy.5 = 8eed1b9eb753ce303fe8f30c4d782345f27bc4839695b8bf8b558cc8b59b9a07
+Nonce.5 = e42b1c108bfe505a5730dc69b8d2a6ad
+PersonalisationString.5 = 8e9d09e5c51a28ecce73442e47414ec907034f2dfa2f24db2c0a4f7c0424b18c
+Output.5 = 29b59ee90517aefb8fb25e60a7a59ef34ee805d03be9b9cf30288b256f3e361ce692a7221fe115d6ea3cd35a812f3fcbaac6abcaf4cbd30231ebdfad3945846e2c00ae7b85cf710ca688609dc33a21eed8276a6a70bdae857cad6073617a7391ded6f74625392be49ba781dc14ed81aa5de93f99d357d71dda1a6be503ec56cf
+Entropy.6 = 9f0bbaa33b7321608f0cb354add1cacd01ecee863282c8c30c58929f197dd877
+Nonce.6 = d4388f2404c73dfa515f309757752dcd
+PersonalisationString.6 = d6136b57bf0b8ef3d0a402b757cd87dfd8bc98af42cf6b64dc7251beeae7d3d7
+Output.6 = 3e026fdf4cbe34a6345f809cb5d3b31cfcce13e02a7e3274e8fb054b60718933053098bc329d0f65743c6523d747655869d5b56400c7ddb6d73620bfd9d41d82b6da85ac1d4703c93c074431f709896c5eaca30cb95f8aa138f88f369e23ca600ccc3e245dfb080141efc2e2fcfde1ac40120b96f8b024a8d7913b498dba390e
+Entropy.7 = abb007b472c21869d2571b412d2320cf7c0d080397d35e47c47a8ec10bd21cc7
+Nonce.7 = 59b420bf6ef70bc58d02a074e09f29fd
+PersonalisationString.7 = e836f980a188f0189be8bf130ba6136ff71e0994863cafb25bb611ea875cfa55
+Output.7 = a2abb57a18401a54c9eac07a1f4ed1cd21f525f9a5795dd9bbe7db61621073e6c150804cc2dc11f0734ed8000062df0ce7c7448499687da5d21302f507f8c225166c23fe01eabfcb0f83448aa2da9111785b0ec3e3212694225f0f80426d39ad000fe904f68f9fb7d6851e929ddd12ca9cabe97d717d5374b7d60bd4b33573a3
+Entropy.8 = 831b39f472980c2cc0ab18bc0fbbf9dc2639c0fdcbf8bf1aa7b85192bf589f57
+Nonce.8 = d3691ea3d137d7248f5592397bd1c6d5
+PersonalisationString.8 = a08affc0d4262986cab581f602f6139e959960de35b7931ccdaba450185ff290
+Output.8 = c2359652f77d03118eb570b1d3e8c2525aba84e48dec6211a6062f346614abf249052b72d5b05880c3c9d40a2d05aa4211499a06eb4a4bfd011ba1d447c7e16b6b3cc061a9c40fcd6fec9f32173d2237a49a462df4fb2e4457c0ce94c29835351e1b3c68056d5819d92fd035fde6c8b0f52e5f327a9cbc7896932b8e526ea465
+Entropy.9 = c977c3a73ff79c5d7d3fdee8ccef4713e90d0a87f0b28ff65407bf1323b70372
+Nonce.9 = 9d5d1efade50b35415d190f295886fbf
+PersonalisationString.9 = 560277ab734b3865ce5a38761099f3aa38700a05e1180d30fbaa6250b8a827fa
+Output.9 = 2dfc99d31356463ee6ef955e9382ae7b6dcf181f8b7ade07fd029ad6fea5e1f0b571c6eba513d3d8d8f804a8d723a76841e104c196e53c2939892a607e6dd02646d2f338db0380b62434c5d2d2785a173c3af5fd333a9f115a733645241056790b3ef7bd8c29f23bc9b63529b0676d0157512d74e56520bfa5fba08db56aa951
+Entropy.10 = 658565fbb879495ac5634af9f478d9f8409c9708591f802d0183a3036cf786c6
+Nonce.10 = a39383adc3c396c0509662e022152899
+PersonalisationString.10 = c60456ec7c0dc96bf947293076b5b1f8b6f7cef4289b225c3d99bd8b8ff5f134
+Output.10 = 33c6898798a7e84ee023a2c935766cfe49c8c9d23675852116c322aeafc49ca0badc1d8fe271ab6d766ad16e1dab047f11a6c6fd4b54c5b6c5c33662322e7e226479f1f940c1a7576c8f6a9a5fd5ea6c76e11f7ebb64d4540d7f69e21eaf12e35c34725e5618b3fb5bf41ae34ee315d2cdb4ebe6eb7ff6187dc37176d6b444b1
+Entropy.11 = 5f369d910ef83b28b012880db63b86d2139778c931a4fe9ed11a3cacc5630a54
+Nonce.11 = 9ccaa788611202abd00f6a230f36cb8b
+PersonalisationString.11 = 9f43246e07542b8b72a0d49648f6539cffcfdadd2bf364930003e58fd645c697
+Output.11 = 114cebdded6802545f568a8a1e20a8ea7941735ce6a85a9f1310e70344dfda961211558af1d260c0485789d3d89376a15e4666110a6ee53860dab6a46100f34c771e97623db5c3ff19bcd904c5ab626139ffc149e82f188bc14f5680735eebeae410167bbb67cdf4d9f536f0479808e01540c6b3e16e9cc5754e7533c188c0c5
+Entropy.12 = ffbd8a4cb741b9f636b5a35b00be7d174ce0bd0c6c4807ad7425b8688511ebc4
+Nonce.12 = 43bb0b0d7ca0488aabf66cfe79cd4c78
+PersonalisationString.12 = 06dd817b26cd5cfb2b53058fbb36ab2934fc1b00fb2c25903f013b909ae6ba3b
+Output.12 = 7e76c92d2973a0cd991dd65137498e86f551e57424cc655473de7cf8438a1740d1aade63e5c9b60451a8cbc1c3c6cfd520703bbe969093ee9ca2c96f699af61cfb649783c0c33d67b86451ffba9554a20c2c306c49622ee6e8e6b8681f6fa9a58a212d80d71c2d7fb998da1c4669567532287cfe67f653a678e61493d2eae1bd
+Entropy.13 = e742599c62d9baec6461daf2a28a77e354f1069e569029fd2c6ea32e56e52a54
+Nonce.13 = 231c786e778fc70846b56c7159611ad4
+PersonalisationString.13 = 41156ed56a74f98dbc311069d8edaf70a267193705c784b363af82cda9595570
+Output.13 = be34566a89229f4c9bfb43aa61403d48f59411f840d38061dd8b1331715d821b17200d2c7305196673a94eccfd99fcae5fb9e9a461032692ef5698c6634037525a661d84d6627f2052dc9a08d98643b555d4fcdfd16504bb7b441ac928dc4ebd74a4fa647bd853729ee525277b319450c104a88569eed42c2a2c1bcc3eda9aee
+Entropy.14 = 8296aaf08f44bd70b0d219306e6242dc74775cba1793bf2b41b4c1de6519fbe7
+Nonce.14 = 3f9e88b93a6e69d070328c2c570c3be9
+PersonalisationString.14 = bbe702bbd2265e73aa073f47ce55fb65902abbe51635b414df688c60868546e1
+Output.14 = 0280555ba6b2379dce7cd56615d7d86feadb8ad995e2852a0607e663a34b1e0342c7bc649adcb204e271eeb87521591fad74b3bd841971cb100ae5f21599b732d8c5f9d578c1113da7034b580013720e62b1d013e28205d5024f8b1eb3219e6cf821792713354cf1349d32a64f32ecdbd7578c55e401fbea57f21ea3ebef0f9f
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = ea4da988e6c5f0685a587bcba36eabab586a87e2d724708078bb3766a80546ec
+Nonce.0 = 9221ed63f8003b6e95f7fc8043f5b01c
+PersonalisationString.0 = 93dc2c6b8499308ddf040ccf81464f482f09ea44be246f8c09181d488c28606d
+AdditionalInputA.0 = 576cd452c79649d871d061bd8e1d7ffbac4687a72e25158c9e1dd87f7194f571
+AdditionalInputB.0 = c30f97e178b95ea29c60f9220bb23b15e9f0dcfacaedf1e825907327d732b0b6
+Output.0 = 13ac0a60c6ff5a08f580bd1c039172fced4079a0dbe984242e7b0e113ef6694cece20e53162ec533d1fbef12eed5a10a8b12829188baa15dc52883c9a8317e9c084d3e075221035241ec050b0bd498e5e27fd97df86c22fbc5776d2edc273ca930c0a95877f4201378bcc3173556e9be46b0d55b340de69612c844166c10327f
+Entropy.1 = a850b5711449f79f3468e8bdf10df2bed8467546aba6229f257d8bc01b17c051
+Nonce.1 = 4ccf750d53e8c3c41dae2201da36a948
+PersonalisationString.1 = b664f6ca0987d12db7074a892aa505369499f58fad3973416df415b87ddac56c
+AdditionalInputA.1 = f63be9c8490da4996c7d551a9de46dcd1d1bbdf37ad5883749cace9d9f6d9db8
+AdditionalInputB.1 = 752dd42b510678dbef74468c1a26558a67f271867b3bb8aaf45b98686ea70af5
+Output.1 = afbea8efd4d50447e1ece2fcb60846b72ea50cc0c46c5afebaa747afe45f03cd2070c9334ee42d10e358dfb378c898f0031f38f5cf5545916cb2dc0b318f491cf3a3d3393a87753b2512cd8163aea85ffe6082dec5ccaa6a6ef85a7b9733cc323ae8748b4c712c273336186e867504b3c7b2468c726fc77917c2280ca0791d1e
+Entropy.2 = 4d49d3e490132f9330a3b8ed731790da8480f03299e3843920086dbd173ae72f
+Nonce.2 = 4d68d064a0baf5834c72bf66472e2f6a
+PersonalisationString.2 = 4487251a3bef7e408649f03618799af364a3b47f8f804f7d60c2d3b20c53f5ac
+AdditionalInputA.2 = c3745c6eb7669599e2c89a7c6f1c295b5b7373057816a182fc78bc8ad7693a32
+AdditionalInputB.2 = dca71e4c0b76c68118f14cb026627420b27fca09e213db84298032013c285b62
+Output.2 = a93e832e4b542cdc70208e42039e5064201a2ecdc528f609bec2d2695c30c5dba25d43968ef5870d546fae739139f33bb1eb2d4d6b31bdd2d1c52e89aabb45548e1c2cbcded4f9c9069e31a08e5420b3197d9cd70ba625dae9ae41fac18b1886c442b4b5b15c7b64cf80074350bb2f02d62f88b5452133e9567966ae1a3c7331
+Entropy.3 = 604f43140ad6c4e8360395a1c5b98f7e86cb8ee78dbe5672c37f58ea24b07fe8
+Nonce.3 = 9344f2f41aee9a7741291f7b55d11e92
+PersonalisationString.3 = bb981dd8e390829577a610589c401cd41ac4f03271c1987ad30422779599a01f
+AdditionalInputA.3 = 48bc9ffc2a1d545180f01ffdbb638af85e532679dffa92b776697e8177c268d6
+AdditionalInputB.3 = 4b373c488c7b79479ccc6a4c56a3c1eb1e97356f46c3aeb5bff61b8749fa372f
+Output.3 = 767a4152683e8be55b2bbeec6f7a2dda214b7708dfb4eecd064d520e90da7682a89629f6da97e40e1f7c9e532011fa28f42396be604193f7f44221507a24991740c66258bf02f0f3d9431aec19aa76cf5ee2a5744b05c6dc343f1ed270a4b9ebd5326475362b852fe5b44694db8e4c47f847da927a09efd07c80595443fe66ce
+Entropy.4 = c90218e658ac6b41dfa4b2820a758c024b6e0cf9abe2b999aaa1e673d8ac81c7
+Nonce.4 = 5656251045f3f94c6911a0b238039587
+PersonalisationString.4 = bf315bae9e0e691138a15547a692c774a5ffd96b08fae9408bc6ebf94f2dc32b
+AdditionalInputA.4 = 2e17034a7a3197f62151a691422d66cacd84e39b8626a922f09e6c1e77fe27d7
+AdditionalInputB.4 = dfc297a291dbc6c5dd17cb3b1dfb759a21f58f8333379c8db2bf0de97cca3ab5
+Output.4 = 1a799a11b051c6a6fe6d921c41f64c56d0dd84f0c137edc770d37f9a1a787a1ad67d8f1c990776aae08af7c0b9179db8270940db11885b910a1ec502e2f5d66d6c314b7ee65f0ba4b177ff980480af28dfd3709e2d3cc6974ae4c11b9f97b9eefbf32301776422cbe3c9fcf24a19f2e2a3007946303f3700097d872e11febe26
+Entropy.5 = 8554821e05a966e51cc86d3d0312a94f125f89fff56ab97e0f9db5c746d6f5bd
+Nonce.5 = b208b9d94c4ce82c86b7e5ebbe769c0a
+PersonalisationString.5 = 4b0e5786ef6cbe46d759aa648613a922ae1c326d4cb8ce741bc1fa81b8f8ac8b
+AdditionalInputA.5 = 0cd90d16285fb69771d76e031eaabd5f7b9955f717aa00307c4c65dae4bead32
+AdditionalInputB.5 = f03bfff7cdac519ed1465e749177caeaef7308dff57ef41fbf1cd32b8d9b286a
+Output.5 = 0dbd52be12081e08c12b4147393db622132ea3deceb140aadafe702252e967c340a4a13f27c72def4b4dd68a12cf9b6b8546226ab2c57b9941c010a572eea0fba9a8749b6e876278695aa73f68cf7a8c86bb52dcbab07cacf19e3b84d2f1c14eb51ae396b6ffac4c93bdb4a3c9e486f2641a37aa0493ed07c70ad3b505468190
+Entropy.6 = 021f275f7823b872012c18aa92acb01be5cfcc6d44a4b35cc24659f2e12183c3
+Nonce.6 = ec63898f606538592702d5eca2e4ff4f
+PersonalisationString.6 = 7f94ad23ba6d54db3d587ef06bdb50dbd4354b33d3d9d03e26fb5117497847d5
+AdditionalInputA.6 = 39902b10b045cd42a42286c12bae6f3bdf57f143060c8bea80ae961d46e275d4
+AdditionalInputB.6 = fcc239dfad229994fd6d3cf35e46fb14c1381c259086b41fe719312aeafd3eec
+Output.6 = 7acfc3384ced24f616bceef72b052a99f5c2eee9d724b92ddd9a6c466e7df7faf060cc5acaff127a05b5dadad29f6eb8b79c1c07403f609a88a947c5e7d70de1021d19e33bfb68439ea106b434c756a4e687e2602e4407c712eaa4cda2154180128c3ad918b8a9eecc1fd7d52038f0496e38d1ccdedeba1c514c7169762e0038
+Entropy.7 = 477e1c8515f368946f5c8b6bb111516d4b756113f37dfe9fc3ecce2efd8b5dd2
+Nonce.7 = a1a6e54762942a4a1dc0d58fa7895bff
+PersonalisationString.7 = 52dfdde18386885d2b2fc42f98d9d718ae54d31a5a090f8866c5fbaaba90156c
+AdditionalInputA.7 = b10900a8968e7b8e117c22d9d97b1fa6c4df0f0a8884d620fcc99c64d351efd4
+AdditionalInputB.7 = 72ddcac7064ddff0225f61685af77dbf0d3c73ee335f1cec00da8824a0e03f8e
+Output.7 = 6cf275475f9258e86bc31b8c98fa4c69c602371afd32c2222697f2b60f4cf998d59e18ad7b14d44d0b90294b1f1539a912e0f17641b747b5661b5831dcb664ed643c2f4b66f46de05b5f5fa727c64986aebd7093792869e1a251088bb475d1eb6538c4021abbd39d0f774c6cbdb41917d83fa968d96e840faaeb8ed5c11e5206
+Entropy.8 = c02380281fc7b8a24e4b28b4e558106bb131efb72fc90cfa38f2c50b00162224
+Nonce.8 = b73690893ac8350e9e2f27967be1a07c
+PersonalisationString.8 = 4f40a4f971f777ebc4417b6347cc3ccc434d8c7357fae77c16e730fd78b92f86
+AdditionalInputA.8 = 8baa40a4eea9e71bdcb642881c6013db16410b6069670f80c60b6b1e8bed8b9c
+AdditionalInputB.8 = 421bc6d1fbf940beae669199dd4e9adeb7ea76692f18dd616fb847e450ba83c4
+Output.8 = 2b601faccc83c5c023c8a64de29d9065ae372de49405c6283c7cdcd70baa8c5ffd4a072615f2c476b5382b785453bdf1f494dbcb9a678e2046693ea0afb33a63f5febfeb40785daad8e9306bcca89a1399a47ffe883871f55cf0b2b86f375f0bb844234f9ddff66645037b0c8771843aa3b83193d1381faabf013a9a6b34cc05
+Entropy.9 = 44c9d13606484d13512a243105405dd124bb31aa2dce7c924acccf7d309f1b09
+Nonce.9 = d8ab01b10063d71c93e3b49244960b0f
+PersonalisationString.9 = 60a7fbd174c0b4f92fdc3469e1130ab6dcd6dc5a74228a82646ffa0349a60749
+AdditionalInputA.9 = f8515192bce0fea888b7c58d70d37082a3abbebdc7070430336acb4217eac9b1
+AdditionalInputB.9 = 068740da4e58c1797760a6790b53822057da817b8ccb99ab77ce49a570352828
+Output.9 = dea55eeec42a4dd2a881c7bdf6059621e2f1ed611b5cd716a7a0e03349c0e74fe71488e2fb272a8a56425ce4d971dc0cab2cab5e8a1e7e855aa33681dfb63b5a30d0f1844deea2ea60ccd5a351fbf1c94acaaae7feb995ce036262b344b0ce964cdad5e3c1cbb9282febc6a298c597ee4bae512861232897200d7116ed10661d
+Entropy.10 = 3d7b9004662fd21fedbf04b917c6e349c1bcd86e320e87556204bde436ef1c85
+Nonce.10 = 7d4fbb77f14977030ed74ff43ad6d6f2
+PersonalisationString.10 = d421c84dd0807921503eadbdcf326a4ce0808f342f941e24076a9446d34eb712
+AdditionalInputA.10 = bd7dfc2285ca27999f9fdf7428d59ee77b935cf7412882ec0006cc61f36f01e0
+AdditionalInputB.10 = eda136626ec38aa374b434fdd986e90025ca470fa45e0f4748375806b8dbd38b
+Output.10 = dcf27906dbff8f710a2092d9ace4ffecb9f1d1d4cb104f1d3be76b17ca18aff4db574d1053e2e3437aadb1ad3159547a77b69e4b708bbfe60942e6c2d4efe2ea1bf8150ba61c159e9de88b6b9175390df2381f58b938b83b8f71b115ddcd5471180e4dbce79e815baa6b0a4a3e137c5488b231ae396ad170fda7fbb44bab99fe
+Entropy.11 = 9a937114e00f83915386b3e66701ce6b1ec7fcde6c302d7383b1218121e38a3b
+Nonce.11 = e24546426e524e670af2188c5360be16
+PersonalisationString.11 = ba876365a4a86fdb0af9069c733d4a9a962de2ef2d04b4cc1ac2a50fdff70dd1
+AdditionalInputA.11 = bdf92fce03cd2691bc9224c9047890bd0977759189d193cf36f3e7e99e230dbe
+AdditionalInputB.11 = df6aa525733889f65a4a2debc2f08576c22750c4722cdf820b691ec101fdfc5e
+Output.11 = 02dec2be8df5d686f391373da54fd1dff7720cd39d2e3eccd85db0d4986cd316cbe0e843f4cde7a90c123dbba566880f009d04e29b51defe3cf30b12d10b8de01b3d86cdce4a16b1142f8e4aa132a18b7225be7be818a14b894608dd9e6476c87b558f3ddae530af49dc16d530e92391b00b828db9b6e49b68258a0e0cca4fef
+Entropy.12 = 76560236e3c6c548ba1fc39efc8d952f911e46a297bfb666681e836e5a5baebf
+Nonce.12 = 006cef471ce415d5ea83a95c31009194
+PersonalisationString.12 = 01f0711a8e1164cb97692552849c2a1c9443006f5d22ff2d080f083eb1020c1a
+AdditionalInputA.12 = 6796a8fe3f9414c5e495b732bd7c4b60208ecb7b318f1d14fb0a197d6a21c6e6
+AdditionalInputB.12 = e949913f3b2f545db51d38d512a0fff24a19d6fb6a2842ede621e357c8c80164
+Output.12 = 65addfdd398662599e452ff5e5e690deb62ea73b9d453ff2ca3d164f85677e0beb6ab9dcd7ee9ffa3293d7f0375bc97c87d509e650702dbea33f43961ceb49adc2ecc85d165d53e734c65bffdebcb9d881bd98f8b339c530b267f31e2f28574ba69b5ee3e91cc898dcb9492903bcdb7d08169d007b5a30b14b641d69fd9aaef8
+Entropy.13 = 7e47e637a043f06e574fe6a718267f0bb5e16bb8e342c7a2e6b2d76ef9f10299
+Nonce.13 = a7564f36c172bec0d2fb2760a7edde1e
+PersonalisationString.13 = 825e34284577c8b62a5606a9046200238c78ce32e11869ffbc83825e1989cc97
+AdditionalInputA.13 = 8ccc4e243c650f3e56bf49e8858ba5f36e0f5dda3aec49bd624b6ca7e832980b
+AdditionalInputB.13 = a2f614aa755f50b7777c354f97ab6ebb9376fe008f10923dff3bd4da6848aacc
+Output.13 = bdf43d744a41c83b45977a4edd5e701dbb913191db52c023cd4be9b03d6971561547a77021926d9f6aca5924e633b7c5503197d47dbf6d412fc28f176f53c5a50d792ecb8cc7cbb5713057bdf17d492daab67c6cb001edc86def7570d356ff83b37f643ff427aecd01133b81d43f6a15e95c4a1b04cfdb614a1724b75f73be70
+Entropy.14 = 517f160ab174f63da837f9ebe5545396f7e78a4171a73a76c6c2244b0715fdf3
+Nonce.14 = b02adc63c0c8790454a6a9d01664dd51
+PersonalisationString.14 = f21e5f51f5e119e17a5ba061fe5aad0628c3789f4df3c0d7025b43a5fb155481
+AdditionalInputA.14 = 38684dfa6edbd61e464e49f7d01932802a5a5d824db6b1df6087e84a8ecd49bd
+AdditionalInputB.14 = 4949b08a12656c497cc6760791982c0d4e674b0f8a14be730a91689ee77e981a
+Output.14 = fda39bf8dc1aa785422281dec946bad99d5ead17cac55d47bdb9bd0a80a72f3c611f92bcf29e3e45475426a7a9f139b755f332cf75035b047697f4131c9bbc9ee825ede9a743b14f02dea122194405864aa2b538ed5cdf40ecf81e02bed1556ce0e7974548f050b084b8f3626c0fb2c7272d42cdcb039af4c7d957e285b53b5b
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 0398eea9b1887385fdd440f46c475829e5a15d73e0fdc22e1d9290852a0fa0d9
+Nonce.0 = 9c7b1c1fa7491b8c7421854427ddc1c3
+Output.0 = d2bdd8ffe6d840380f7dacc3ce913f10567b7ad40d3e319880c9ace504043d5158cb0679aa374ebc4d4693620ce9ea372ed9ac7b95d90a098467cd4b6f491c41d86ae365a4c0da37690b1748fbe76f5312da9399565cb691710c15e1e3a83b4e61f7e68c6727b9a2a5bcf752d11f80736a6f1ce1553e92d3a388ac83568651c1
+Entropy.1 = 0ff19bb811df7ca0f547b5d9a6809b1a7b58d5d144426c00e924878101536924
+Nonce.1 = 9478e8b18fdc530a570852bbc3460cba
+Output.1 = 848653b4a3d65f1e1811aa6da7f91d6826dbb22f636dcafaf62d966e86f5ce67f0e2b27bdb847373f44627426cd04ef27e79274edbb727912d89662376e5e1a831155f72ee61cc5a102dcc042a2144474649adc1244539e4be23ff49333544addfb9b64a97b81060d1ea2107b6cf883d25775836a8a6560bab1b50e8b688f930
+Entropy.2 = 0236edaba4e5e27e90c96bdd78ead44fd7a2cc5796b8dd7b2bcd1dd06a287487
+Nonce.2 = f86fa888c9be09b4b9f8c02d8f851e2b
+Output.2 = 5dffab11d90d4b9782a25b41caf73c4264953bf9531d066da69e8c6f84064d547904730ecc42eb78f21e9f2bf8df012d46257541182fa43e412853392abf33b5ca50126d5d3cea6fa887ede484f2173c8a65f7eae2e8479914328c44617b2bf57af9ae128f0482b0ede00715e58f1c3cf2d043d1c1c276d50730d039807e46d1
+Entropy.3 = 55a2fea78b19b685e0fae6d9bbd14ed528342a169ad494f2e4054e30ea54a36c
+Nonce.3 = a63e8e20cbd540490639e98a3021c358
+Output.3 = aad57f77c18631d5bd8744388ae6b47b975ddcc51ef39903d16e7e6aa90e0ca3d56b97c6992c6175782f92ebc57e0b9ec4f2c9f5489f96a63bd3c2d1f3c1e82c4417c24c7620b1c37dee5a6bae7e7a4d1cc543151e3f98e49e4024cf79c516398b3a12f3b55b12ad33a690fbc3c66fdfaa471396dff727ced7ab5a2f09a73dba
+Entropy.4 = 35f938fc8bbbdade64d95c50f75aaeca356a2b9fd1ec1719a94b8239081386ab
+Nonce.4 = c8bcbe8bdf4532cc50947878d414f470
+Output.4 = f77873425fdedbf30e33b2442ff6763d2d041d3b838a66d26d469dcd6103e203ed7473a33b443fb8d2964bf9a02214bd14cf8938744c4ce28ea46e6f827c8917da407dbf2956d458281767cf0f7ddc973b16ed81c446d85d9dcc454bcffbb6f831109a1592bbfbe1556aa4727c5ec3be6a55a0282d6ee96e9e37845873d6b858
+Entropy.5 = e107669ceba4715a97d531d083f842993a4f217745387e79088b970be077d1b7
+Nonce.5 = fe44cfa21e308b55b4575b4dd3744c68
+Output.5 = 1d7870659867a1c0ebe35218e647a56252f73a1050083730aa293e9ead28149397bf5e5c7e8a6c6a336dff4442119966a0fd6502dc0de72274d04ff1acde4588ff25ac08f154e029f609dde8019ce696f83495725588f4edbcc09bc6c03d43a96a0436e1cfa0a3e2e4303d0f9fa481cf7f5b37642d7851cf5727ac41481c5c70
+Entropy.6 = e75c87acc72256b4c1eb11df060dc3fa21c858b737178dc61f907c57787b4d06
+Nonce.6 = 0487c6c9609f9de7db75b63b000c3af2
+Output.6 = a87bd43c52d4a7c9f21f53fbe2938e59dfa8df09a2cfc110174ac4a66f01e95a341d8a2d5feeb24683852b2e123522c91c4833d0fec27aafe2e774f4c1c938336e05e6c7f2f3e0806be945ff2301a44b21bb8d6ca047a9d0db1b404f38c66afdb4cd495618a5c6e132368bb950b3cbaefb2323f289918f046c8c595e7925f6ff
+Entropy.7 = b1ca7743d644438cfae752bcbc1489622376ceb0e8272b3718ab0d71165165be
+Nonce.7 = c3c5b30c0b4e599c7e710e6893248d55
+Output.7 = c08cef3165727b8d6c4cd0068501a6ec22df38c754cb0e1ada39c2f902db475fedc449c34c51229ec77c52a592553ed2ff4b55907fe16394b61f18693cca19902a692cb6737d0d3b740625ef86f0eed0b9f8129f709c8cf68374b031c887cce685d05d6e50675adddaee662d16c2e7c6a5e450f407b6c6db63d76576555849d1
+Entropy.8 = b37f987c7c36f253852ed7d07af677545364091187c0fa7111f03affe8f65bc1
+Nonce.8 = 6005e3904c94d629d161f81fa810b7cc
+Output.8 = 84a0f66555383cf133fc3e116578335685471ba8b7e6876324f29d0f991e6e3413f0b19edf69dd60ac05d4d7d7189d11f9fa2eb3be1013eb59ff32c1d576408bbb11734d3c8538327fd4f20f5d7df48cc59a3cc985d8783ee2b6b12fd991b0658fd25764360071cc96dfb696bb4baccb61bb293dd6c26c11f0939bc5a4f6e774
+Entropy.9 = 416ceb8c2ce590b5773ba8ec82fc91122c58808273d65615f8ab023cdff77692
+Nonce.9 = 3d11888f43fc72e329719c8e09852b4f
+Output.9 = 38e71d00732e20b2eda46b185e5a45647ad8cccfb987ada270079cb223cf4271618a41df6551343e093b0d5abbc079a406e2fa6cd955bb86789c4cb3fe42ff4ba82ec3f03329ff786e34e681ee26b35f7a8d764e948ec80f9f6d7cea6b939039961fd22806ae5a404febbf7e062745a0c64dd3e87922767309fbea5d1b58a7ed
+Entropy.10 = 34bbe706783662324f12047f1bdd4cdac8b09ec3e3c8a3faa48d0edc3a241042
+Nonce.10 = 1924993c64cd8395319bd45471502f5a
+Output.10 = 9ecc31d722e6764e358bb7d9aa2a278f784e2011f46df7ae633ae9427963a05e52857f11eca36b42e76a49366bfb335ebecfc61c9c0180f3d102a93472bd4564eb14ca40511d8e846f387b11a37aad97e08900431b303acaff746397bd0442eeb19af57f213c3233f3d8656f139518db4fad823ec40f2d7e637c57a0eb192d70
+Entropy.11 = 6d7bd10ada2c3b56c42de6634dce1d34270f04f0e1ae89f804c90ef4b2dc8eb0
+Nonce.11 = 247373004e17d7704484049dd649e8d9
+Output.11 = 2d8f85b73c227092d44567e23ea45b90b674c3e29e9356a33180cff0c8dbdda915ecee403524fc484889bcb3c78713bcb3642faafd75fb32009732ed7dfe352528447b57b6863609a626631a1e84eba3dcc7a23cc66717ec1225e29c9774f8180a6de671cf5ad21a2fb2387f63b9974b47cec7027889310d41fe6c802f26026f
+Entropy.12 = f86bdd78fbe954f941790c8bdd1e650929c3797afaa092346faa22a91f6a1a0e
+Nonce.12 = 9b5a2d78c91bd9e28b138f0476666be0
+Output.12 = b8083d6337ab2429b4301bc0b0e0344a63e4a11d7804b8a89ffa091b069a41664ed0e807f2a2a5afd1bc6c44b4d791c433a76a0de89bc0470365fafe11a82538e31a44c3e6e263e330873c3ce8f220dc239bef3cc06bf778d09219393957a1162bcd2e7d7c2d58fa8df2f1793b0ca773be634e5eb0d8204ee89b9c08add83050
+Entropy.13 = 675d0f1b40e76ca58a97fc167de10fde8fe12f9973584f843805c23b4ee569ce
+Nonce.13 = d5e4b9857b535e5bddd172efb6fbba5b
+Output.13 = dbdb9b0230e0e5994fdea825a92a123b18313894d83c24223758e76ef61b841062af470ad9e3de28d0a1a49731c72442df14fe3f63f4fa408cdc513dc31a8c09f68b127fdeea936231dac202cf2b63dd08083fb5a63f6f409d1e54dc055e11af8392efa83a0cbb68430286e8984aacb54c13f73f29490d7d2bcb7f956c58291f
+Entropy.14 = 1006646f977b83f4d90870f24b3b72d0b4947037f7671a64ce3b52829506a519
+Nonce.14 = 5698d50f59c42b26339d218fc985a41d
+Output.14 = 44ab1d22fd3a84f8847c33d0fb0aea66408d5181b8ea95416beddd9784d86d72d2851857b503253016036246cea11f2ad2bd18fe56508697a50b14e7c85bd9b002deadbce5ff9f72508b6ebce741dd7803a2d8633dbec235cccd37c089c9d747a52000ed4cc1dc8545ddb65e784a698bdc74a6ff4fd7b3dbed31a22f83b4fd8f
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 5643776352534d25cffa8f62c071dda1cf6635008aca89aaaa574b564536e3bf
+Nonce.0 = f79149ab6cf92a106931e51f0541c689
+AdditionalInputA.0 = 125edfcaa0cfa26f2d3ade21f3c7b273e0c4a9211b5b6c9ffafcef4ed1cc9112
+AdditionalInputB.0 = c1fc75f96f393df228685e1ae71539b7d7db0de05887bbdf6236e465b0014458
+Output.0 = 52e2a447da5e55d0116aa47e1dafa35aeacdf777c70c3bd6291af7e5a600c5190541669e344f5d2094e014149132743bd8d18c8938399cbb3ac9b99978b4e92f96d3c3a9b4c6ec90bd9eb45d1ccb7935488e490feeaf23b44c6d9d8d99f953dfb67e3897cd03050cf4d85c8c3f124a4c8b90e1bba98f7b9f12898917fccbf6cf
+Entropy.1 = c912bb219548b23346f5206f0a66f16698d70ad1997801b9b709d3428cba6d5f
+Nonce.1 = d1cd49802816d55dd41ea08aea40cba6
+AdditionalInputA.1 = 7703e37fbf2d23995b393a762c7be95315ee0a2f73d17aba55c7fe58773880ab
+AdditionalInputB.1 = e53e736d6ec5558fe50979d280fea1875870826a0cb9cea3cb23bb9b6644258e
+Output.1 = 46579bcfee4077dbe7d25255a276a0a57e18797ba395cd727e5114c5b24474b25ab0e19191071492a30bed3090862ea8e203c4a1cbf41d9c48bf5fb51dda7817cebe0cfba43fe7a0f12c24510b9b2ec318b35bedce221ad3353a22e4a5ccad12537d5e5bd77b481793a5788ba6376b751c0134f14d924744ee2c01ccb76fa33c
+Entropy.2 = df3d1d0388742b4a5c010a5a21404311e7753881ee1ec4e2652f00c30b92f520
+Nonce.2 = faafdd9e53737c2678020b95d0c3f7c1
+AdditionalInputA.2 = 0644dc5880ed92852ed37f8d87f6c6dfcafd6def4446fa0eb432c14cddf2f10a
+AdditionalInputB.2 = d40f131b0e02b1c74cc5e0ad8859cb26a47f996ecb60f2ff8a277760e526d8df
+Output.2 = 10f6d23f911b851815260eb8e3fb0ad141bb5f03c830d9d355b021514e483d5608158c4dce73471a31772b864e9250c72b1ef9545eae39acec4af0dda8519607657b5fb39818d725a4ed33c24453e8fb1e8d4e471672b346c0c20b8ed5e0cd356ae809cec1f73ae7529f6e88f321395854f61c35157bcdaf21bf52f2ab51cbef
+Entropy.3 = d788812e4e17649951c02c187b15f09fe847e123e7266f4aeaac710f6c3d1625
+Nonce.3 = 03cc7c29a190572ea7dfc48294f56878
+AdditionalInputA.3 = 2ba83c739f5893d3afe796774c4966509626fda16bee8330c247c012074ab5a7
+AdditionalInputB.3 = 47bf4d370178e2ff4880b393ff7ddeb0ee09209b191440e37c780cf4924964ad
+Output.3 = 356d211018519a4969fbd68233bf76cbd2c5abd855f2b0abdbafafc3b47f4825c1716b2fdaa1123c2ac1d4f34bd3da754b0aa48ab13823838da5b33bae7caff78ef6a66e5c0c77326dd8f54a5e0869bd2cb0d7204d63304c13d13245ada1df9a97331004d785706b1d0bbf1b6b1de68d370dd125d7951df23f0edd10ae79506f
+Entropy.4 = 2b6f323b758a84da468d1008e780bc828c8b649fe6328134cfdbc39e19eaac59
+Nonce.4 = 17bf7faaad250b6095b85811e82ab79e
+AdditionalInputA.4 = 53b4b3e55643f43475782328cbf1e916918da2c2e0c063c54e0a3183e6c3bfcf
+AdditionalInputB.4 = c05ca07aadde27c2eb484648accbf2d34e82f24d08b2ba12c316f2a8c30daa91
+Output.4 = 8859aa86fc6cc4b8e55988643f0a2a7bb346843f0d58e3755fc5db925a10a75614a9e246e649fb616d60887645313afe5d0f9c8287c765117418282da310ef1e7b8b43a482da5eb2bf7584b3dc07de022d25de9adb262be5b1f1566d7a94e357765bccfc5dc044345efaad1110b4f5a27e77c503873bf305c42f589df611c880
+Entropy.5 = de116198e5250bfd31ce835fa29f1e559ea333b14127fed0df323342a5d29b28
+Nonce.5 = d7a01a18fa49389b04b27643f2ef1fba
+AdditionalInputA.5 = d85f784b477dd8aba132cad83fd99748aff3572cb04e32530bb7daa937bca506
+AdditionalInputB.5 = 78fe739bd0e0b330eb6e98679a9068376b62f95fad49e9627d1297c9de55fe7c
+Output.5 = 0d5cc0d9659e8187202ea0bf60dd2f09c29b49598606ef5b0ac4a2f5cb7dbac334dfb56d70a676b4e2f17afd87ec9e277fa089f033616194a2628ecc7ad579f74ffad5eb1becc06e4f30b08673d9b1ba0ce9107bddcf27f44a1f92b5ad6ed6e9ab3f54f9abcfb128d404a1d267a464ec75e880a108fd49501aee99f1a2a6cc21
+Entropy.6 = 3df5c20c256be660689ba6accac5adecd5f53342e19064c73bb50c5399bfd13b
+Nonce.6 = b354dadec57e7ce6aad195e6bf3ecae2
+AdditionalInputA.6 = 3520a90f6fd4a937e59a06e8efa102e7912d0d9bf75c097013f8d7d19343bfcf
+AdditionalInputB.6 = 79e15cf2c0e4cc093ebaab800a9800a48f2a2e6f6c42cb896022f6364cd768b7
+Output.6 = 42a72ddb7f4fcdd6c881d6e80451d2e7a69abe8f526b222b62dc826b19734ab4bf59d5e79be1672b93ae761b6d63f44185a07a03538fc011d9881cfa2fbdd5069041c3b078208ff4c3e3853fe67f5637bd80df5f23ba76ef07a2655a0f188b5e073fc767fe66a4610764182abf50410ac870fc3078a1ec21e52da984e9a08d8b
+Entropy.7 = d7c7dd4af3480bd34e28366c21ccb2a03dd7015817a69de1e7e4388fe9e88523
+Nonce.7 = 3452fe913fb5177cca02e65d991a25b6
+AdditionalInputA.7 = c4b1de6ca48fc3332114ee93f1734f1ecd694cb7e40f0dc9ae770a8607b5df97
+AdditionalInputB.7 = 835df8e83f7a03573946e21e3fe58e6e7906301f4493b7f682b84e60af680c4e
+Output.7 = c0162dd685dd8e73a586332dcba95807e45a3682b8908f3f211e24243b50a34125f988eb442d52e09f003cdcd4a3caad2017541c006f0a79909cac5103d4fde05fcd2b58bf005afff016ccc310d5a85e4992beb7b8356ab4041a2de38d0981c49dc00cabdf7508d73c92bd68792bdf619e1d735bce469023eac891579e08b9f4
+Entropy.8 = 741ad501296d3f18680655d5ff88efe7db6e917af6d26df9bd20895a70381d11
+Nonce.8 = 8281033e701a290c81edee11571297ab
+AdditionalInputA.8 = 90221d164e9b0db5fcdd9e48e0515dd578a837de7897055fee7b8d83887b3ecd
+AdditionalInputB.8 = 85f8198b9258b2855286c1327d54062ff733c0e5a9c3a6f9cf2a2c85e4808779
+Output.8 = d7e7f32d8b6a82c071094879d15d12d96c3ac653fb555ba6946a11664d01a554ed82c0fd550e6b0151cc3aeba5768842878c049f2d2e2dffef1d5efeea2e27e76925e094c7091edf885c14e9700d46000f2959abb7f2f5d29886d857a18d74000f91bcadce8212835379522083ecd5a76a157bfcf9a7c822949927c3472c30d8
+Entropy.9 = 561a4330c56e459bf7fca66a3ae97be126fcd81f56b497d4f0c03d45313515fe
+Nonce.9 = 8e0e519bb591cedfb5754f10757b4a2a
+AdditionalInputA.9 = c052616877a19a2447f447bda00933695cb17ae4a983eba2455079e7505dfd54
+AdditionalInputB.9 = 1a77a9fc49455e6a7f267e3720708f2b8921dcc6b672b58bb4721b1e356510f2
+Output.9 = 50d61b225bce39edd2fe26d521fb0b7254e9055cb08dacab76dcd3f2baead3b23adf875eee062bb37216dd7e94718797ff1fc90a1015cbeed501375a48a24372a067662b280edb96386cfc53cd437c3c016a03f2dafeb4c39e7f340f991b7796b081fdef69cfdcac950f81b93a235b31713fa9ca05398c70e8811bbf5979d749
+Entropy.10 = 38434169f568fb1e1836a62c85631acd8f5be3dd64a09f6f2309c777398d4c34
+Nonce.10 = c7fe254cfc90e1913be7df63b7ef07bc
+AdditionalInputA.10 = 6a6f43cbd8d228c1e14788868b59f68deaf5f77c6416dcaf4bef267a79266a9c
+AdditionalInputB.10 = e06a05f1f4e9f29d17df2fc030a1abbf85c63530726d0f76dbac51f535f0ce67
+Output.10 = 15c039bd9a7626ca6426f763ec09e0c0ad166b56ebef62a4b4392f272610f96df95cfece3659a24ee6b1e403556e0e30e2a065986fddb111542ef49b0eb2e15f31ad14cbc4dbad5d2abadd26a7007d18bae0d916fc33ddce158e97133490c8bf6337a329e581f1992b10efb9859667b083cda53af45ca784c374197f751be856
+Entropy.11 = 8311a7cc5af8b85c0d129552cffb9ed9a172c0d9ecd6a3cbbc8b56e8f14bbd40
+Nonce.11 = 57977e3d5cc96c26c177b8a6e969362a
+AdditionalInputA.11 = 1f86c630850e2bf070255c511e4edfd0a63ddc96bd072df784e550a165f58b3c
+AdditionalInputB.11 = c1f971acbbabdf5571c90905243e579193d79c259d570671b87f71652cc85fb9
+Output.11 = 3ef4cb4fcdca24583810ae7e892b790c03e370b3fe6627cfb3c1b1096494c0d51e264e5cd278e1faa915726718fd781d961ff9d765057b8c500793602f65e01b52039b61d881686af9a47feb9425f3842ba821352b66a52c60fc4be92d6b9b20cb1d04f29bc5387f941c6f1db60986d901cb4c2a95a3822b247519afe2851fef
+Entropy.12 = 1c3d1f251f06a6d0c28e2a25e72f5c5cfcd41e18c73eac703fff701884fd9782
+Nonce.12 = ab94d19358ba74042ab5050ccf9be51a
+AdditionalInputA.12 = 5f670e2e7714f4c89242a58544e674453b695fc39d779894b9caf55d9631e063
+AdditionalInputB.12 = 827fb33374e4815e0771b07f590251c1d5ca5a69bb235ea2ad886f2956a8f751
+Output.12 = 0cb69773c7c34c9c03bc678f33ed6e74da3226b43f5e8a4f25515ef723886ccf09b1bc07d468752d846f50244d86ba25ddcf8995d645e7c2d086689bb08bcfd52a983b0973235699125b21cd85f4f1648b21b05b0e2e7eded2ec5864170de8d0b0de46611270c916673f126ce59931be6692528421415f8d4a8266714bb04559
+Entropy.13 = d6c7079504c53d5fcb5ff68d6694e6168e8ace2d6e1516f89a0bbf0483c359d7
+Nonce.13 = 011248ede6a732704a05de2388764f1a
+AdditionalInputA.13 = 4a121966c13a5bfaf4bed25120bf307010bc1bd3112b64ef0c00f3cfb2d25644
+AdditionalInputB.13 = 2a57c3cef57878a846db8858449939317f4c5767ec381836fb8c363a6e3abbec
+Output.13 = 8530e5eece0c0844a18a5f0e85cb10ccf5f706f3fe21ebf841412ee432795811def6fcce30303ee764e3411ed6398b6764431736f53c6dc5fdb627c5d6392e47d20f15ac39128c1fb93bd117f2fa13cc76351b1d01cd4f87b35a3506e0002679beda64044947ec92a1ec5e8fc761281e16ddc0cd43b48164b2eff7796fe3a499
+Entropy.14 = 7fa0633aed9d622d26ab60779879c9f3e84aea2313f996c9558f934724db2d48
+Nonce.14 = 76cd330bb81ae68860d2abd0c7bb533c
+AdditionalInputA.14 = 8d72118578abbd90ddbe6115ab10b499afa26c2360eaf6fa118ba590ac6717c3
+AdditionalInputB.14 = 6ca4d45fcbd0c7e964557b2bd7622a528b4722335b47383f7bca004b7cd5cf04
+Output.14 = 360d9ff3111c6b713fc641b571b582770991885f2fea806a485006a1b4f41ece4ce83dcabfd403edde77780c044c96e85ce5d1f1a368ad881a64be8c41e87f0a682ab67170ae05a24b08b4a9178d13ac9928ecb3b5e23e745d93aaa5f111c335c77cb9a5c3da8163cb428fef60da737b884105ae57616637b0e40bad9594bd51
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 30197171d85c81d6526474b43cb5efafeba746119ff10ef2a96d9b30f40a354b
+Nonce.0 = c634e60d27088ed0cab663af404706bf
+PersonalisationString.0 = 1f0977ef52e535260e4f5a0d749fc6b2e9752e0f10848ba939a8b1ec3320b333
+Output.0 = af1a3ad8c297300fd1a7e32a2d306f8265d287aa9fa1e3727b60200ca8786bb2e4e4a44cdd9e12ecf396fbc33d067c8167e202c5a524d0701b30be08697ec431dc497473046a61b69e3becb128c23d857c5f17442760eef220102d38be11e21fb4cbe5398267fae7de5aa3e29f79c30c70ee39a7c06e05874e7a2b8c1735d6ee
+Entropy.1 = 455f4d93e91d45a36faf6bbadceb021f446852e8a2228b5934972073a131e80b
+Nonce.1 = 49e1804270f15512d811c74ed9d5d905
+PersonalisationString.1 = 50b1bd2d3ba3be6d048e069cc8969ccbe8ba3b0dc7273ea0cdeabd5a779f446c
+Output.1 = b594d436422690f2bd83d304b5333756785c4851062f47e43f0fbaa89dfd0ab4a94faf7cbba5541bbcbcc2008aff50d88ef876c12dd8364235fd41240cb7b0908f980244ddb29194d06eb389960311396aef4e0641d95e9c26796fd793f15a51e69911109f41653e9738c00dddee21960854202743b9362a282f2216a43bdec0
+Entropy.2 = d10486ae771b1fffe1360ff70eaf5264272fb402162af835d6fbca194c4bcfbd
+Nonce.2 = a269686bbfd9a3031da2fd5421da5dfa
+PersonalisationString.2 = 2611bff5b6484e76641625a1887b4844098fdea0ca73a65bf6aa89aa0e5fd15b
+Output.2 = 6b44ef05d0650180b94783bc33c1c7c664e69ab5466bc24d6ef44ebebee15f7bfc22f42b34980aabefc737ed456fa903f651e73173d64987b7b2a54d8b25fecb69d74cba837aad4ceb6738f94a13c7eff800115b70b3e242b8ad46cc0972269239eb68d7118bfdd99bb1c4dd95f24f8956cb802a0c2cefb6b02ceea2c0a05a1b
+Entropy.3 = 76bc1536924130b36b83328f40adaa1f8fea9aa24809e2f1b1886e8421ac5a3e
+Nonce.3 = cafb00f40e590ad87c2f9f1404bce230
+PersonalisationString.3 = c6a45da5b04af67d0d1f5dfcb388e8ba51e675aeebea1a18578f51b2e7ff4fd7
+Output.3 = de051ac87331749acfa44341740bd5f67afab1dfc67ea340610a70900d049171ced410ed4d6225c706f0eae3599f399c633782957f93eca8f9b0afb94d342e8b8ee8b27fbb3467b75eb9f32239516b0a3dc0b8d0794f05abf149d7db416cf52cb73a8f97b6ed578e654812e514e6ead5a5058d8b57b704a8cb6a7c243f5f5e26
+Entropy.4 = 4a207dcf464ba938e1e9f03d3c4990702481cac85e3c831d74c0ab1e718636c6
+Nonce.4 = ac9cbd6cd10c793d450c2dec09d42c30
+PersonalisationString.4 = 7620cf6a8828eeb4369c5f3841466d06b7ad38dc9de90293307b57632bf43def
+Output.4 = c4ca1ab0ad257e3de0879b4c8f4bbee4e4b22775e0f1709b8f7b1b30c962a6c867a8e49e1a7e8639c8d1510d51911f1b6dcf5c0ae42ce7f860954c3e954dcf20d0f56378ceb43ca4949deb4b7d8b287da600c6c31ff45bacc2f75c106734a0bd810865ce5d9f5d84a15fa942d271aad26d6ea9b263911a915715b0475e151102
+Entropy.5 = df8aa843e8a06278e1ba51f529bd108e90ff710b6d8a0b957f63ec364c411ab2
+Nonce.5 = 1d20f877693716f5b2fe8bbecad9fc06
+PersonalisationString.5 = 509a42718c5d8f24ccdaa6a546eec3bce0f8fe785bf3c72146024e8e7c122e09
+Output.5 = 03233972e3378a35c76171ff5847d111ed39114455b1354aefe1011ccad284c9e8d3dbcbebe7cf86e82387c0c025682887350796f080cfab3422b0e9ded3a60f274388a0757e32358f97c13235f01c803eddbb0bc3abad143dd050bdb0086b97f57d193a44e3d6adb2f0ad0aad2a45879ce13eee25e5615a39b570ecbe673348
+Entropy.6 = aea9f1ab7f2a7b176f76a1d114688dc3a692158c2ba4fca7fc6285477fe8e6c1
+Nonce.6 = ac2a7d31a95908a556bb7c75ceaa21d9
+PersonalisationString.6 = 78bac89b1cc0c21b32c2e24394e9385028c0986d4639b34130a6983a39010240
+Output.6 = 2dbc34d5d949d830d0684c8a21049bda78aab9068f15be81551a5961e6be5c3dbfb3e8fdbfe131a72e69a2a68ecbc9b5baef8fb7c75ab1383c04aa681aeb5e170219ef60316d70d44076edb6e1f8dbd6094f4c7befad0138c6393e8f8363fd708efbc9610d6b1ec1a3d2bc458bb56b6a33960dfdfd381f1f7e4626385c7616d3
+Entropy.7 = 329cf7fb5c8905b7ed6a805eeae441318fd4f793c50c14a8aafd04d476109539
+Nonce.7 = c9ad01bf21904253b76426d94634ea74
+PersonalisationString.7 = b79f0ea558c4dd2e42bfc592634a92d51ef6c13154a6c1eb51c9d08557a1f6f1
+Output.7 = 3d23e8d902f844403f15425d8a177d7e5bd7d337279f12e8df350459936d7fc86105a5f34c573c0c9554ff9ab663aba74c36f243a8f1770f80bff3f15776aa7db7815af6e9354782c0d02375063345a58bdcf4b838124cee8e810cf75430f9ac54ac5955fb7c79ed7c6341606e82138c131e6e1cb9ac6e0437bee5da68eb2c66
+Entropy.8 = adf012e2395c2d53e3a6e3e73a1d5f83afe1ac065a75f6b20b45db14d0d12734
+Nonce.8 = d729499703a5fb90f9b1d6c6989aa8a2
+PersonalisationString.8 = e97021e3b7f72f5c6bcd82e654706e83fb409dafe4dd98f704f03c6338d6d24b
+Output.8 = cebe2a94bdc056224498fd95cd3ca676997da94839f3cd0de7a3beb0324ca13ff269db8027d0bb01daf4dbe55ceec325d34281955f425ab4edaf311fe85853130144c43ca1c42502c921d28a7b7721d32831c34d2ef9b9ba8dcd43650025a95afea2ab2731fd43fe9781835caea31a5cd178935f5a8374ce78a337725048cca8
+Entropy.9 = e29de9b2c5e069f3fc29339ac517e70d9b9309fce6076551b9e5f016567641c1
+Nonce.9 = ba666331b85bb6d8a763df9d30a6c6b6
+PersonalisationString.9 = 67abf3319b242035460fbe09bae8df4f10600632a19295131543d270ba45335b
+Output.9 = df4fc7fefe67c4b59d29cfaa6538d1d6a7acd4ed0b6710dc7a98772af519b2d563a0b4840353e987606e32e02c6af4a43f25404ff4d3c98631d73b6412cd4c4f9aa13e3ac7decee2e4a5180675e04d6b34415dc9fab1216dcdc4ba219e9424d6c935c39fe4ddb9f5b4cd9ed40315b068a02b9c20fca9b898c5136ccbf30bdc03
+Entropy.10 = b2ebee204c7165dea375e9360f308be3ccd3801a71255e0edd1f42ba3ede07e6
+Nonce.10 = 486cb1ae920d332847d7019e9fc61611
+PersonalisationString.10 = 5f3bd6d419778e63caafd45178888777efd7b484a29e9dea30d450654e01e83f
+Output.10 = 40c271a1dbd1dd069bcea65d9086b6b2723472a9e9bd6ec5e9ff479e8335e04d3cb988b0d0ed6d5b8768458a2aa1cf5d94a96b2c824a0690376b87c9dd8946f62699406e8fef8d5a997be8e3f63e815f130786cd5d4f3e500dc782263145911c6e69ffe406ceeb3e296594fce9041ad77a5b005158caf3617b8fe3bb0ae8f2e9
+Entropy.11 = bfdf29359846af38a24267ccb68bad50858b8b9ff47ed5fa8ccb99694ff9eae1
+Nonce.11 = ccafbc9dd71255d1ebfa76617642d6d2
+PersonalisationString.11 = 71e50feaf0ed045972b44d80b599a2087fe250d266f1129e821f54b57d99ea18
+Output.11 = 4988a75a728f9e89b3d68824062ba03f3bbc1fd651749ea8522de4b466f66f35dc202b2d87b8b05671cfa5dfa79347e621941bdc81329c3112bd520337ccab5cdddd2a982abaef5619d076251f5ca0b5e4550559ad0884727494105b40b968c071c3c506ebd72532585ba004db7c9eba61a0e30f2ee2aab8c5e5de1ff44a8731
+Entropy.12 = d10f709fc7674fcc37e77b3214308dce6c0433b4034edeae098564509688622c
+Nonce.12 = 63c3ab9f1b35626ce98ccb72ef3ad5fe
+PersonalisationString.12 = d9ecf8f8e9f3bcab221cb29dba385737daaa57853bedda0cde26d61edcbcef3f
+Output.12 = 3c5fe9b3caca83b59cbb33dacd55fc05021bd648dcc89c39226e0b6c81ec0053d99c4a68a627b41e62199de3041ae79c7ac46c7de92cd26643e5c472ffd1af0262d10c7f527aedd41e973f5698b9254e9883149f6041ad8b21934069543b408f2a66531d22d469144e945a11259e9e464f96d8feed8bb14badc11ac942a7dcd9
+Entropy.13 = d74f66ecb33efce890c4ee4aaca1d3438d82eb65ea46a137d0d42d5be4b13f93
+Nonce.13 = bbc9981a2959721c7b439e42e00c1aa5
+PersonalisationString.13 = 91065f0c37c28fbcab2c1a883614eb8889dac50f53248834c7d5a3c2ad24d0bc
+Output.13 = e1c36e42016a1b38418d6f93cb6816cbae186679a4259369576b2b466d66efb49c81e611550398208a793d19f082fcc0ffa2567693fc63a6534028f5f707faf029b79d6957f6aa613a2462dde735cac2046d000817eb59362302ab30cc69c658a2e975f18c1862d5d0f41e7b1171fbb8de215f176afcfbabbf8c458c444a176f
+Entropy.14 = 6cad4deb8e3c18f4f4265d845237bb0f9760b379292e363d5ce8e5bc243fb2fb
+Nonce.14 = 50f723edc4f658862758e149e7ae4f20
+PersonalisationString.14 = 39d43e627ab7c7a6d12fce4cd8c001678bfadd9d07d4086674e5d8bdef4ac62e
+Output.14 = 02e68bf3f78812aa270619b307dc0e57b05b8310084ecd1914a67d93b77127e0b3ec40e359adc451eac8788ac708fde70575fc1b9bbfd291bf5b8d7bda7bcc23a0271ba0bb0e6d617132399bd6cedf5a9a683ea98b3b0dd3bc6d811e4f66c9ec751012992cf54e3ce474e09b31ba9c01ea231d4fa8f09441e204c4d3285c78d0
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = f074a8cf417a9a4c4aade25f530567fd7a1410a074f3b0edd664bbc430ddb250
+Nonce.0 = d3c0823b6d28a42d5f0fc01496d32859
+PersonalisationString.0 = 972527fe90601de9d13a050c7e49d556d0de6b0e75e0619807ade2178eefe47d
+AdditionalInputA.0 = 0dc678372c9f24230d15acd1d36b13294c58b76f2847397fbc32dfada12b8e51
+AdditionalInputB.0 = 59874caea33944638e1e11fa3626fa2bc26d4502120c17e0e198d04f9ef0ff95
+Output.0 = 79db15ff50059ce58dcd44553f5cb6a19554cf35d2b64c869336a797cef93b24c64b716aaa11cd82dca0143279ed7cb2698d7cd726241ca17b5ce6831b08ae84dd57f95b11c07f7fef1d381eb0b7fd535b902ccede73538155f30100fd13ff007806b367f5032561338a92541f441725eab17996dd58e9870025d98b4752b547
+Entropy.1 = 9f5c9900211626b17c06b5539432f6c30d925e222fc1dcc466cdaedf1f727c31
+Nonce.1 = a1e46afccd53e814f782d147c82af202
+PersonalisationString.1 = 92d6864dfdb5a6382de645eb55c243192e828e49f5322e4a769bdef2bac063ac
+AdditionalInputA.1 = bde8ea0bdb9e9deaf5ac5b8f01f23eaaa1f6ee439d477668192e2d53427251d6
+AdditionalInputB.1 = a746193e4731f565a4b9eb0d9a9d8acc76c7f7d6838de3ab758ae8936257a485
+Output.1 = 734fda58d20881a190d29007c82d5bea9af04dca8e916182e3cf1ccd07d4aca11410a92643325d85f63ab26a791dcd3100ae814d2299c6f6afc662d246003a4975b85e0d032b0c8f485b4a3008df9579d5e2f7e0626923f46bcbe5e693590359ad67d5a45b0baa7c77bac396d66081bfda6b7bb71acd5a6b489812447ae63b78
+Entropy.2 = 79edb0af741348294208242c92b8dfcdf9e99fd20996b2b0825a35af7fcc177d
+Nonce.2 = 3a69da52b49809c566876b77b13539a3
+PersonalisationString.2 = 5f1cee7ff01c5fe1d182ab7c4bc7bf84a50f16f0fcbd4ff08eb13c2e3743965b
+AdditionalInputA.2 = e6d9361dc5093a8c5a0ae402811e166ac006f5f6408b5209c8de263cdc268db5
+AdditionalInputB.2 = ce7b94831a77ac8b37118fca378e90d786a767337289b3a83e7f797148cfe223
+Output.2 = 0b9bca1a9601da23e903891753125484532172b85d3ed22c1695349a7cded86f374b1339398208e07ca63885808c5f8f775b15a379f9efaf107ec5ffd9f763a0ddc68c54e612a89ee864158d3be45597671ba766acf2c47e8c96ccd146eae4c0ab608c4e8ad5c63b0a66e3ce6156a05ad63d599306be4831107151c2cfcf8476
+Entropy.3 = 882dcaeecf17349b31d7bbbbbeb9c85270b705b46e7a5b60519d8df30f17aff5
+Nonce.3 = 46e777807732a55950af791ca1ca5fc8
+PersonalisationString.3 = f771698092ea1cda1c6c232d0641bb76886c6df8ebda39e95c7f573186f4cce5
+AdditionalInputA.3 = 6c54bf9fd6e48c609846b8a6787e7406db2610b9838599d361be009842301c35
+AdditionalInputB.3 = 23b208e7c5319cb7b37fb8e84638f684d5323779a7f4d3518939f95b00d93705
+Output.3 = 037ab6a81bb8b468ecd17d6d09196236df1442ee8c61cd2734873fcf9a7e56d95e86ced82b1bc8d93e67e33044fbaf67fc389d4f46612d8b6ea46468aac3237607403ee3f59632c7a0fbbad6f1fa7e66463b969e6944a33c56a8522812aed5bbae582868820576d90cfc6e80c159ea1a7802e367f674d206bb950e8ecdd2baa4
+Entropy.4 = 11965cda20767ce8f8c5ab4c9b10cf589324c3a9d6a277d27d9c5c4c93c6517b
+Nonce.4 = 1798523cc23aafb99a554b24a0d5e45f
+PersonalisationString.4 = 566d51c543e9cf828a659200862f1a2a4994009a58ebfc8f303b0852e7f53343
+AdditionalInputA.4 = 6458534c476ab44c4e742a8de3bdbc576b45a880b1bd1ef97c99ce33636aafad
+AdditionalInputB.4 = feebef75b94448968acb6d79a3830c7b1eec03838bf623c50070b9a99982c83b
+Output.4 = fc6be50d4f8da8be8dba73b5e6286f9cf8fdd6fd686e84b03ec5e1bad1dbfcb190fe333db6dbf72babf0d9cdd5182201d69ded39451f8910b01a33365e37ad8a71a40f5ce10d2dab6b06d134f1f3130567ddbce3d2bc17931d60925b8542de1a0a3b1b2a4e2491dcc18ebafe4e095274c491d09cbcd90f7790274c5ec07bcb33
+Entropy.5 = 9c0693df87f400f82f61cb47cfc2d672fe41e1cd2e17418ac1d51dfa4d8bace1
+Nonce.5 = dfefe5a66bb369d1e788b72a860b41c7
+PersonalisationString.5 = cf4bbba8b2427117775663f84c77bc37160ec54e68c6aaafeecc967206a37b54
+AdditionalInputA.5 = 122ae7294c193b47c925ccccae778772355fc621be037973991b429c8466a2ce
+AdditionalInputB.5 = bf5a7c27b41bd872e5cddefb2f606aa836019d5c347950960ad9bff41f302f0a
+Output.5 = e3dad2408c98a142b27659e9c7f0ee269d8b0cd8caa62a5e6704ae2c4c908a19d3097421ae6b6d309a4009181a14fe083451ffc9bfc31ec1b5ce33a0d3f4ad311c2db315924667024b9d54e1750c2366aad08fc9dcea9c043239212bb7263fc86ffae6113aa9451fcd1be848fc781943ae014c13e28a66b824e32e8926027bf1
+Entropy.6 = 5dd98a23c155939634161903f2b3da3fc31a18fc1c5acaddeba1fd08a08f0faa
+Nonce.6 = c7ee4ea3efea01a22ceba03f86e323c8
+PersonalisationString.6 = 43501b961a81bc4458fd9dc15983f4aba6cd9a11600294a2bb8e0518d2ef5a6b
+AdditionalInputA.6 = 7d146d124643ab686e9bf2187b88769f2443d6dc16fddfe413f9b187aa2e6b8b
+AdditionalInputB.6 = 6dc7b364bdc9659e92b7b935432519bf44906fc79c3e178e688d98d7f1c78a55
+Output.6 = 48ccf3cd5a7250191a9644a76b42a56c1a44ef05e32cad5069beaa74235e6e79c279a555257c17ad939e00f813a4571839d20d14004f18ffba309195e729e51d09840df3da1590a765791c8c9b92016ae861216f61107426860235f97cda7cf390aa441e504f386d3fe6b2f0d30b11a794866ef180745e0f0f42c0e74c16edce
+Entropy.7 = 0bcd80d942263c3372f8f4257ff5d35bd564a12dec0c7e8fbe1cd1521e26875f
+Nonce.7 = 41db7a98b2be3678a76ba981e44767b8
+PersonalisationString.7 = acac5ec7e76ea7a7a770437d77ca74ca9e364b20fefb02be3a3c2811c026fed2
+AdditionalInputA.7 = 6025b0b767745acdc844877b2b1b0bd669ee857dacc9842d5735ef734060d18b
+AdditionalInputB.7 = b41bf3892a914dc493098c74059517ec5506302fbc01408c0a0f3e7486b54711
+Output.7 = fb4031b08172dc6bc1b4957e10364e622ef2b86ff16125d31f8dde69cad49fedfa5d6f45adfb8242b374e48120405fb984f6af9fb4b53dcf2a78c6d073ceaf8136dcdf0b26ab9f7f32a3dd5c87d09af57d51658fce62258324a0f7481b31b1f423621e89301c728144d3edd91b071f199a4dd9f2ea4d72c21b90e833cf848c92
+Entropy.8 = b2747fc3131b61d2c3c8e6d3e8807ee1dbbd0d0795c1b8e2253232b9dc4a4c70
+Nonce.8 = 84e66ffdf6040a2ed22e549b688f14e8
+PersonalisationString.8 = 3ff1b7307b93a2fb6fa87729159e39e63e3f1005e056ccc09a50deab679a8d23
+AdditionalInputA.8 = 70c27cb8a98da217165e5946a4c1e5764b8f77f4f3c5bef85c2d150f8afcf664
+AdditionalInputB.8 = 0dcaab2b2f2b51d74a1497da0950f40ec41eef100273519ef2d305bc1bd4c1f2
+Output.8 = 3196508c7f7fe190613022ac30266193dac214ac4dca2456f33ac717000499d4afb5a336642c79d187dde196d1cadf507506e34ff8126cc065f024bd8b2ef70e6613e55a0cb9a1edb0971eb3bd843140bd84767b582561c27ca65cdd06e6e9360b9c7a4a5cf7fa2ed2807142af0fd4e75afe124de44ef9ce7782894b47a5c53f
+Entropy.9 = 79c40f253a2265a659f7c127904df1fd4851c149df7820f6d82ca8f886f7ca82
+Nonce.9 = 2066ac2491c6f46f3f6845ad64987aaf
+PersonalisationString.9 = bb3cd677f58abb5dc58260547800a101413f6526f229b7a9bc707d4e0fdb9447
+AdditionalInputA.9 = 3ea9d3f993c25a2291d0dee81434353e97f445b8eb21af2482024ce83100a1f0
+AdditionalInputB.9 = 0498b70e31590717779f9d8faba5c86cbc6814c1c7aecdd4487249901ae43e7c
+Output.9 = b9d881038b23e35fb23bd80c7354cbc96e2be971fb38ac478702ef904789291b7b6c1002548df5749e78ab495623527967e37698b84090259ebb06bdd47848d4240591396ccecaba1ee19e3b8c9245d36eaa72a070ffa1b3f5a84071ed664d567715139974917c7929a18a12d0c14058538a38c488c9c4fe9eaa95a412301684
+Entropy.10 = a5b77a8e17178ff701a35996ed4f55d952e4418e5a348eab4ac9703c6011fa3e
+Nonce.10 = 92ddadc8c640b32f840863a5eafeec4d
+PersonalisationString.10 = 78286d39fc5180844e86a24d675e583514b7cb83ec691f537c5a3c79c73ed4a9
+AdditionalInputA.10 = 484bb51214755c3eae593ece170e6ce0149e76040833d8dd4d5a9def84bad047
+AdditionalInputB.10 = add105ee47ef06f5d5bb01013a349170aaf2d5f7f5d5ab811f3b677050dbecaf
+Output.10 = d37a8eba004f3541308646ca57c15cb75e7d0aedb56b7bf59600c1e3f6dfbea78becf175b5e0121e096de9d5654322c0af2db301bc0acca5cdfae5122ceb9c79cb9f6dfbfa37731b2100127452541c65d57313e25619b609fdde38eb502288cbad874f8356e67ab7c217b513670f600432513e234d2b4aacb44bc417f8deb857
+Entropy.11 = 1a27c3084aae1e055174e8bad8e8366cc1add1a14c74f507ce849274332b003e
+Nonce.11 = ba672516904ce5e8c975d7aba6059228
+PersonalisationString.11 = 6e28f38655ec1275a61e5cab038e3383bcfcd59674e02908daeb008213596b35
+AdditionalInputA.11 = b216ff71bd86ef02f4234a08a8eb8e75a1acd20182fe668ff7503249e7618aa1
+AdditionalInputB.11 = 2bca751093d5f73ae3097d84c08872a4c6a0d31c56d6b10b181ec21484b54021
+Output.11 = ad052424dd5139802e198b6eda26a2eb6298b567bbbc831fedb8638815d2b719d12fec0e2a24de8cdde0322ff930110b10b850f8af9d35f0883bf9fe01d14e13c660fb9868d3476fe5b110f486122daa9b93a760c75a50a92d6fe742250868eeccfdd0449bcb5dc2eebcf6859b703610b5431646f2f1420b3691528c5193d5e8
+Entropy.12 = b5019df2c59490eafc352c76418aa5d04c253427b8cab96b008d21a2dd9bf532
+Nonce.12 = b963166dda387bbe831798a8eba4368b
+PersonalisationString.12 = b0c6a491682245f21ee9ca783559bed4b499b7eda3a789bf209c9e2ca67f3388
+AdditionalInputA.12 = ea1edbcb22877f45e3a285a5d8a5890ce8768f4ce2d9ffd8c95635d4c0af50bf
+AdditionalInputB.12 = 98c93e01ce7ea9e64a604c5b55c61ee2a0e482d796bcc388355e06f0f42888d6
+Output.12 = 8755b0aeaa9a2050e4ca9cde67fc0a57ff3f6657d02dced9e9d40a7cbebd6abbcbf57895d7b821b51f9b3efbcc4b19262fe013de30d309e1d8b70995fbcdb2ee34551688e819a6d697a15894b9e29012fe477f487b28c3b4e90a76c0f976c75eb6cd1f4b4d8b839891e0cffe1c6ba51f258dd83764c0cb87b3c39802760e0467
+Entropy.13 = 0f2c30aab056b778b82676c4e862780fe31649f4d1fcb8fc0cd7fdb76b27423a
+Nonce.13 = 7e92afd284532c2966bff91f67499d10
+PersonalisationString.13 = d68fb207bf5afe47051fa40f82cecfede1ee011cb7a5d08adc21b3aacb9a6553
+AdditionalInputA.13 = 99f65d454573f1b5d3b419efcc80c29574154650e0a5abfdfabe8556c18e9245
+AdditionalInputB.13 = 23e5a72d637af785a74c8c3b96d85ed373afc7fa0468f905c497f0f47c737c4f
+Output.13 = 0b42774734a3271975049deaa9e34c3dc2a601b169252520a8f56bb663f8e1638e81cbe2dbeb8f669dfffb8a8be697b2689ce90abea735a675168ca5670a568cea3b8a1f08838a5e47c4c7c77f94f3464fa7b46a478e323279d9e4f01b82251e252ecf93faefdcecaff4052cc10ed87f95413893e350bfd692c7008a3a9076b6
+Entropy.14 = 774804cb3530deecfc477e3f47d57039aab2f1a2dc133584a358b5d73c164092
+Nonce.14 = 3bd0ae797ecb7c0780e758c64ca0d61b
+PersonalisationString.14 = 9b7ccbeec10758cd0a3a8fdaee6f3989832e44bca7763f59e838c612521d3427
+AdditionalInputA.14 = 9ba9285889d50c27bdeb4a830a5b3120931a53980b30643557444718cb2d47cb
+AdditionalInputB.14 = 0f8716df331067b8ccf0e5b90ff79dd0f962acc69fc5f89c593bbb84e3501ae2
+Output.14 = 9d2c0053a0fd3f9be1fe33db214f6f2d54aca573e0642bd269f1b1ca23c42a1e85c73449830673cca14feab4d2686814edbd90c325e0fbcd5a2d7ca75334dbb113a13a0bb4e838f6724c74dddfca8c2bfb903c362d3ea82acd60d01749f6dc01fcd6708009a58ee9cc57a0d089095efae66aaea68ac247cf6aa8808d1038a109
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = a1dc2dfeda4f3a1124e0e75ebfbe5f98cac11018221dda3fdcf8f9125d68447a
+Nonce.0 = bae5ea27166540515268a493a96b5187
+Output.0 = 228293e59b1e4545a4ff9f232616fc5108a1128debd0f7c20ace837ca105cbf24c0dac1f9847dafd0d0500721ffad3c684a992d110a549a264d14a8911c50be8cd6a7e8fac783ad95b24f64fd8cc4c8b649eac2b15b363e30df79541a6b8a1caac238949b46643694c85e1d5fcbcd9aaae6260acee660b8a79bea48e079ceb6a5eaf4993a82c3f1b758d7c53e3094eeac63dc255be6dcdcc2b51e5ca45d2b20684a5a8fa5806b96f8461ebf51bc515a7dd8c5475c0e70f2fd0faf7869a99ab6c
+Entropy.1 = 067fa0e25d71ea392671c24f38ef782ab3587a7b3c77ea756f7bd496b445b7a3
+Nonce.1 = ce6acc722768ca0e03784b2217bc60e4
+Output.1 = 16eaa49510ffad8cc21ec32858640a0d6f34cb03e8649022aa5c3f566b44e8ace7c3b056cf2a44b242de09ae21dba4275418933611875841b4f0944a8272848c5dc1aad685935e12511d5ee27e9162d4bb968afab53c4b338269c1c77da9d78617911ed4390cb20e88bf30b74fda66fe05df5537a759061d3ffd9231d811e8b34213f22ab0b0ddafff7749a40243a901c310776e09d2e529806d4d6f0655178953c16707519c3c19b9aaa0d09fb676a9d23525c8bc388053bfccfbc368e3eb04
+Entropy.2 = 9f76503e84727297bc7056c7af917a1c98baa725295457db4fcf54ed09af7f15
+Nonce.2 = f39c46142b85a67b4b323594b7e97bde
+Output.2 = 7d6a8bc5a7f057ceed6109bfac2486f80f81373b6b31d062aa1fad6d9eda5874867b9ef007ba5a92ba8f3fca624bfd9f7ee5770bbeb0391394fef783c16a7f003c06e5469bab03445bb28a2111def415d162e40472d3e5ae628c5c63170bb19f741c79a5331c883c12bca429f518bf71b14683a071b6c6e1e55d8c7a0f3942bc12a103556c49ca173e498b3b4a15027145cdaeb195bc8a7e1aa82ebdf6ecd516481a4d21f400d0d71b5894545888fee8beed80d3251647947f5abc4735b47fd0
+Entropy.3 = e242e5b3b49d87289fe02840dc742a2a6cd9490fe2cce581833dddb1edc0d103
+Nonce.3 = f987f5de5c68cd345c81b032ea55f36d
+Output.3 = 3a858345dfaf00defdf6c83114b760ef53b131fbf14bcc4052cd948820eee78a11cbbd8f4baa308e1d187fced74cbf019c1080d9efffd93fda07df051433876d9900c1f9ad36ea1cb04989bb0c55fd6d01e46923f3bc8887ac00ebd4710212114165355361e240b04232df55a81add3fb363f0d4c9c5e3d313bc7caac7d49dca8517cedacf571fde9686ae93d901fb9b17097a638bb9899cfab0ebc9d1f8a43c2eed7c9f326a711d0f5b9cfc5166c9b561824cbd7775ec601ca712b3ddaaa05b
+Entropy.4 = 42cc17365f5ea5fd22bdc4ade715e293064d6794d82bed5b77c4c107a73de1f7
+Nonce.4 = 6d759e4b191ba01e0ed5dea788ab018d
+Output.4 = de06dee8c8fe453aa03ac2546c39f5cda12412864d52ed5cbd0d4905dd226746d50d1af9fd3e1d90de0f16295cb7f6f4d3271ef00564709df4b05eb9f8adc0f8e8522b05b9f32c37d8526813898b9f71db57fc8328e3b79144482e8aa55c83934d6e097e43ec6d0bc32edaf8c0e6ca449b2e8388b32b286e2d4f85266b0605fb99d1a647565c95ff7857bcab73662b7218719189d792514edca2b1d0cdcd9b6347e132ef4c323da24ad5afd5ed6f96d27b0f879288e962fa0baca3d5b72b5c70
+Entropy.5 = d57024a230b825b241c206f7b55e2114461ecc9b75353f12ac1d9ad7e7871481
+Nonce.5 = fe401c320f74afdb07f566ea500b0628
+Output.5 = e8930bd55a0a5a6d83a9b3b2cde7085c2ae467ea4a2e65ca303697d492ca878bcb801769eb1b7ec564586ec8b36d350e192c4fbf03a98be0ddecf56d465914ba353ed7734d19a680fc4593d9234c4ac8c23b7dfa1e26b013f590cca43b9fef126121b4842496b11dea3ef5e981cb357341f03f92a546a62609236ded6f7d814456acc0596d555cbdc02cbd47dae2caa1897831ea464225922c6600a8bb92e711653067f83b21e1df054309858948c11a1399736fc8391c5b0fc35629abfa5650
+Entropy.6 = 059ded79125b2d56d9d52bcc950bf608d1a2373515dafcc81efb6588005a5722
+Nonce.6 = d8f5f4181f9f2a316c93fdfbadf50e75
+Output.6 = db65d2000632c3d7009c227e99c210e5897f4d7edae608a242b5a4f17708613f8c19a4dd65d6bc3ca57737c9bfdcca068288eea49440af768d1fc977c32b065bb71aa3d8c4d77c9e8e8a6166f332a247978a6c41ed253a1b68ad934a3416b40344a681de28638f00b0a0ffb75514c3f62253372f809906043de35e4805b8e962e5eb957f04212835f802b2c0b3e76c7cf239c89adf31909cd6224d542d929f9b20a10ab99a7c631e4e6188fe2ba8f552c9c88fdadb528679fe950431641b8f37
+Entropy.7 = 4630406b475b1263b6078e93e5d4282205958d94eb97d1e66b429fb69ec9fccd
+Nonce.7 = 0dd9982c338df935e929c42fab66adaf
+Output.7 = 5d80ec072f550981bcaac6787c0488cc470406249ec80f4bf11050630227f8b5ac6b3b369db237d7c24a0980dffe8d3abd9b64fd4efa492349bd4eb6902edb94553546110227d7de5a864ddae8b9fed8de9f0df9c596e39de903fda323ee6f788831452eb9e49c5eef3e058b5bf84f61f735a93e042bb9e458df6b25f42a6eb8fb03d437cfab757fab4990c721a757eaa5e9048208abbcce6e52f177b20dcf52f1fa551a92b68bcdb01680855b8f79131266378cd1f0c2a4141c9675f01d1e48
+Entropy.8 = 6ea9c6f784f12a9707ceac8a7162ee5381dc893ee139f8f4b4d93db266829db4
+Nonce.8 = ae92bc52ff860d8ecdc9fc16bd070130
+Output.8 = 234366f1591cfe244956f9496cdf446e0d390ba64beaa066945b1b4c5337dded2619dd2bd0133a5d612bab7c251ab79e3951cb134894c422553fc8cc7b3ccb29c20adbf52dda35af779142d7efc735342db2ee067649fda25f3e8a74f8e4f6620cf5a17cb943602609cafb85bdf482873efa4c74928cc0d69444b72aa6bc72694a3a21c6a721aa4e0fccab0a98aef375a37a3e8a15dccad13b6d70b3483581004642d879804aa00cba207b51affca43490bb98f67953265574366ec3829e67aa
+Entropy.9 = 5c13056be92a7f71236fcfef460298acc8595dd474310727f5ccb9a7acb2254a
+Nonce.9 = c7226f86349e20e2aca737068ab0f2ce
+Output.9 = 16d415eddefa4dc295a64adcbbcb8c6fe8c8f123c6b09dc08a56d723cff5978cc120fd0a68a2f4c202c220db372d3128ef52385d5786c12dfc6e60ecfc3461a09fa80453e2b1b6365eaeb4df602d192aacb25ab6b4a59689d4bf8d1c4c42a32779f62b06baca6461f154cf40901f5787c1aa2bf67cbfe7546ef5b2bdff20790d8c72d077d48c59c92d1af90a90ccfcdf643dd9d6cee0b1faf5f2f35cfd01d2077ced5e2d013ec1e09336dfab9d9e51ba9a3a2837306213bca2d79abf8dc3282c
+Entropy.10 = 38f08a099fc2d405c32d1e0f867e5450d5ee0d53783c31de9ddeae46d962999d
+Nonce.10 = a01f13a43320c715612cedb920cf12eb
+Output.10 = 079ce7a5b540cae96c2883e95acde3039048a6c45a2d259cc648639e7205392d91fa3ee080e615f1e0741a0e536c9e05844651b93461bfc547fb452fec61f853e1bd6e08eabd0cf1c5f84f85eca9d42b53d1e5bae51be5fd35189e4f1c02b843c6361fccf4ca6648bf30a23ccb8ebc16fcf158746eb39cd96f19d46707c001e11c4e0e8ccbc89fec66c69fc92843b6bb2ee1cc7595b65ba89ccaccd6130a8417faf705e8e203e90ee64ae970c409389b5cd0ca80a4e40b642689741691b20621
+Entropy.11 = 0863c868c32442a1a64095a71ab6ae2f9e61c119b58dfa4f34efd26593bbbf68
+Nonce.11 = bc407904c43300452dd4e61df47fa98f
+Output.11 = 585334828cf531828fc7127fee0c926f85b8e71e8522ea921296dc62b83a09a00397cd45e0664d0f26fa24edd3e3d8ecef8fdd77ab22431d4066f0efaf3882c97f179a7060efe9e8cba5d8145bebd502c0e09ee791231d539983c08860d7783edb58440d193ed82bc77c27723381a0da45bb1fc2a609f8b73b90446e39869a5af5038aff603b44db9771113927a5297fdc3450eaa228e313afe43c31b0a95b476c5ca312b4f589f809749481722cea9990c02b647976aa6c6f02ce1e5e6ea6df
+Entropy.12 = a41ad223e41e2bb9c131ec945ca310600ab00c51f6e4fcddd803bd9ab9be8af5
+Nonce.12 = 483373838894d32745a81ba9d6967751
+Output.12 = 95ca31a7eeebdd2348cf1d43411d2c35faffdbcaed4052d50cf92f0e9d2e757686b72d631a56ca98b68215e7014cfed943abc1e13441c1d660f13adf2188d0975154e1b42a592a62a43b57f82cc21a428873a92fda83abe420efb5233140e4d6c7852cf81e85961fa5c606c5f33e06077f414b0f814cbbe50cc606bffbd474364e608825fdaaf5e74d862795539be8697e2ce05d71446881e3f65bb54ed95e941586988f6e0c34e1beef426696e9dbd9a214013d826a8c99a2a686d8402c583f
+Entropy.13 = 62a26c1327c0ebf8b40691fb4c8f812e81f5474b0c7db70aa9424110fee3a05e
+Nonce.13 = 41c0cf2e87210e34d0c6bffc269bf2ba
+Output.13 = 6e20a00df1af37e6cc55e580ba21335111eb375395343618df7d630b9dc234496e3964cd45c5de34bda46a28964f6148704c30925feeaecae0574038434cd33c1dd943207a8dbdcd72dc9ecb76a25728b3c2a8ac13c1de3a126d7d43a46e12e0d0ca8991469e582b78ef6aa691b5a0e3e85cba7d7aea3c1e8e031674e85f5af36546eb2a0a28d4ffbaa316a9a6c944fce291cc0c235e8499882eb62b22b548ae07cf9430329e009f4443cb94f7a14e8661166b0d681dcec867205abed48145e9
+Entropy.14 = fd54cf77ed35022a3fd0dec88e58a207c8c069250066481388f12841d38ad985
+Nonce.14 = 91f9c02a1d205cdbcdf4d93054fde5f5
+Output.14 = f6d5bf594f44a1c7c9954ae498fe993f67f4e67ef4e349509719b7fd597311f2c123889203d90f147a242cfa863c691dc74cfe7027de25860c67d8ecd06bcd22dfec34f6b6c838e5aab34d89624378fb5598b9f30add2e10bdc439dcb1535878cec90a7cf7251675ccfb9ee37932b1a07cd9b523c07eff45a5e14d888be830c5ab06dcd5032278bf9627ff20dbec322e84038bac3b46229425e954283c4e061383ffe9b0558c59b1ece2a167a4ee27dd59afeeb16b38fbdb3c415f34b1c83a75
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 5e919d353357671566d2c6ab6e1acd46f47d0c878fe36114d7fea9fecb88a3a2
+Nonce.0 = 7efca9e3d1e1b09d7f16832f3af75141
+AdditionalInputA.0 = 442f17cb3cb1482a19729bfd58f46f6ef16285554892c01b0718968d6e011082
+AdditionalInputB.0 = f9557c93eb841bfd7b5d4b71da928efcbe3f55e1870493ef90d16eb238380d65
+Output.0 = 36902134f1989cfe7eb518a56c06aada98997d9bacd04aee21f879a57b515ca3b5e0c2d5fed05ca1a8b054e8c46b389d9d9186feb0abe8e2e60b3a267281cc5b4b7341116ced35a0e07bc2b0330bbfd8b07f07248fa6d8fc5c9df13445324162bdfa22a91ba71453ab123c92f91c70b8bd540b3b180b11ab45ae2c59e57c7c43dab7576594959a96eb502d182267c86576b1846ccee1a694cabdfb42e0c8214192efb502926fa3c27eed020b7cc8866a5af9d838a57e78bf7acd230e1f4d8361
+Entropy.1 = 7a5d1efc9b7043060cabd67de7fe22740bcd6a8ceb355d69f118829a2b3c9200
+Nonce.1 = 6a5633e613f8769c1114b1822ffb5408
+AdditionalInputA.1 = f2ad962d992434468681c644587639901ff74e2bbdd8761961ec34edc4a0c36d
+AdditionalInputB.1 = 75aae0d1bca9484c89fc4de3d1b34275ef0656775f3f8c96f2bbc50401aaa718
+Output.1 = 5ca21af4b399db38f8b74a406aace69f994691f2765bb9c47b240000152739e059b163cd007de5f28bba17e485fcf9ff6f41f76e93998510e302282cbdbde09fe8b1a96187e57c9a3df94e2e748f20026476ca682dfa890b478f7a21f4927f74f99aedd9ae782ba10fcda1dc34c31b4f784722e01cc4679737276f56df23c5bd8c6985797b83c0ccde2b4c7a65c652745de7fc8a235ad7ed0f456f1e7568b2dad475f0bc46f02a7f35c05cfef9d0e2c773ff895e291a2cfc2424b106096d8864
+Entropy.2 = 611586ee40cb3ca4a9238ce112a237449bba5422ac9b18ea53480875334d8fa0
+Nonce.2 = 26da9d96c4e87f94b2f9a7c261be3edb
+AdditionalInputA.2 = 2f835c336a3aa0019b0bf940c24643bc8fca58c9cfa6509aa9241de9e0e1a046
+AdditionalInputB.2 = 1911a59c5f2568860ae71e803688889dc44d14ffb0d93e324c39f32d95c1c3ea
+Output.2 = 27bf42f50476d8a2cc23f455e9ef477cb8e9c90f2e97c8a483093ebf55b2aee02e0356cff919e2ec9811b42c73498a6c2b96aa5b761ef7e715cbf66ad2e3ff8a6c92419dbf2e653ce70a87b51e26d9f607eb25b45b91f947d0026a38977143c8bbd94076e663b9cee35505b48e453e7cca83e540975ae8a53f26390aa63aaf1e2669410cc83427eea09428776a2d520eebd170602c52dd491c98042018a0372a0b39cb565cbe5e474f927f91515a6a7444fdbe1d89d8ae2c2482a0deb8ff236d
+Entropy.3 = 85b1e5da599efd4a20ffcefd4737fa3ea1d2b14be33861c2a4ac3ac2a49d3947
+Nonce.3 = b14cf18f4ff426cb6345f1a7653e9630
+AdditionalInputA.3 = cf5bbf98d8577077b0b84475dee0f0e9aa95eedd1d916507b5233b688bcc856c
+AdditionalInputB.3 = b333ec111e1e7d78c9ac916e420704832539d2db46aca3bdc4732e8ce72b5e80
+Output.3 = 4773d32a9fba37acc6900f3ac70f6978ff1e40039d6e3286c264fb7fc59f1bfe0188c7979380c8922bdd0e363c8e09a49faef59ea85a9f0e400b94c74a8a50687e4e51e25266eabb86276f22628d0d2e19c5696cd221a9b80f94045d001ca4c20dc916ca0ff22c93a41fc822912dd7e247927fd45982e94d3d1fde77cbe78beecba830b753079326ae33274f13fb7cd875e85fb5e9e703e61cbd41bc4ad47d7b4d14afc873a39dd810ad8eed95adff8dce3adb7659b7c1d4e3f62403767940b4
+Entropy.4 = 50f986f6efb413fba3e8e0beb84d4948c2db0661ab8e064d9fee8b3c2f0a910f
+Nonce.4 = c35d37512f88bdfcfde797a21a006e01
+AdditionalInputA.4 = 37c7b08222ba63f2136bb28f5ec09b9a899b56371615be41bef49a0b640590e4
+AdditionalInputB.4 = 4a1e34a5d60ca08e3e6c0f1b86547ba2d12fa293275e7d75f83a0b846daa48df
+Output.4 = e27738c6fae66125fcaf4e725a0881d5a450fb5b02a55057d6cb7babd91d502c4f4a8431a83352f47ea8e5fd7e815f5080d144318a1dcbc755e0b935785cd5397955da22e3ff633b34a64ac72b2e6b7c51e78ff553731e6e8da911d147a6e05b36b74898cac6d3171bc8650e445ffd19ede2aa8218be17671321c186465d852dd80d73290546b88ef7a978b41c4c549e9c7fc6ef86e47084778fb5aed5d41e794ee0e700b77c0314a307b10df69daba605f3fdbe2dec708ba0b20d6b650befbd
+Entropy.5 = 641dbcbf99b61437c2bf65a13dc3e0324eb940335da123870d9429636dfc8297
+Nonce.5 = 9d0cc913c73e8a6321fc3eb9e973c0aa
+AdditionalInputA.5 = 72580c11a87ce6b4207908aaf5bcaaa1bd217fce3e8bc0726568c64639b70767
+AdditionalInputB.5 = cf9f4527e074b72be735558dcaa1fc82f26ae286bf944b49649f769bf6faf49f
+Output.5 = 345395723d048c2270c0eac990498689bcb862a4996e82995b4e7169e671eb03bb2242c4669c874c1aeaffec58aa653c7d7431abd1650f0cbce8cf5db8316693f3ed501fd9b48c1a44b34f7878aa386d65afc31f94f908a322b03d06c2a1074a03bd2b579cafb0f7cee6d6934588ae1ce9e4ed37b03737c553ca19af4b46b5e43767cee2e459ab91407df6cfd13a6f186abdb148b85a5f49bf92ac6674fb055c7fe123e9355a0d33de281c03a56f91891dd496dabfd6eaa6fff6c9cfb4e67c44
+Entropy.6 = b9c305ada943a64a2b00494e869f9a640173eb1c2518dd9be93abc3c93c7e6b5
+Nonce.6 = bd0627a199d15f77b188824df00d5997
+AdditionalInputA.6 = ffc6760f9af02d35666275c074eda03f53dbcb5690580bb25768a6566b328dfb
+AdditionalInputB.6 = f26f436a820ef71597b75134b8d9dca6e9a6afd9b429222a4c9c878f3b92716e
+Output.6 = e5413a234859511cd837312bb31aac4d31962c5f7f27aec47417f367ca99b8400a4287e60412fc356cb40d96ddf5cb801285ebca42b2f6fe4a711451c1574174c58dccb2cd3342b7092a196ac7d2881a08e7f5de939ccc8f4eedc8f867c81aa88655d96ae50f618279d5009ba2ac4b1df4e63030cc0ec3541b6a94bd9a2ae5d1fcf4d847114a783c997a7c6b9d549010bf7b649abef692cdea3aa8ada14574e0f78b7fcbe17b587ac14980e40264d6de030e429586593d5ce3ae571f95454dcf
+Entropy.7 = 9875dbf59b760eab9998bf3341847910526d10071dc179f96081dd793a600193
+Nonce.7 = 6881e7f39075cd382293a1aaa8c845d2
+AdditionalInputA.7 = 1196583a99afe1d377b344585c8252a0690704b8f7a2b7582387ec91a60fd7e4
+AdditionalInputB.7 = 20147a88e0f9f1e8caa8cb14488c9b5c38e5520a36ae913b4703d15af27218dd
+Output.7 = c808f6f296683d26208359a766fe61bc70ee8b6ed9ffb94ce269578fb5568fe2358d603638324b63b29bb36ae71a542e38ee69a2b93ad7e4a887a27a2852cdcd541a5fa6d0c8b087aa1185bd5788256e7d95c2aa2d5c11407b7bf762f416b01d8e747c45298f875200a2e67679d6d5ff7a7c0e50a010690b1920df1baf0afcfaee7ab0862004e23b5aa1ff47b8273d503bd74a54e7b39ac7e6d6fb0a594d30531cab8a67b22783470a65f24faba1c231b3ba45efae9f0be04e2338529cfec008
+Entropy.8 = ac92a6c791aba0406d6ea8255c3c0901eb711a424501c2c2c847076d78bdcfc3
+Nonce.8 = 266b7c3bc578c7501daac6dda8366d4f
+AdditionalInputA.8 = 13379a77d84a0c4cec95e62ac4c8a98ceede0d89b8bd317352a95300963415ed
+AdditionalInputB.8 = 04d47ec89a3e1b7f22580167331225a00ff258da72446241a6c09c517ee4d48c
+Output.8 = c2e6528584c6dbec436ffec4075fd3aebe953fdc0b46b4b225a3c2886e60d21879e6ccce3746d881f6d80e33876afad439ab9f68fcc458492de12811fbd57ac49d868754da19279b4c0a38979201a588884def5677392dec97cafc94bccf8914d9f78575711bb6f2adf4116db91c8b54e36e9ac2f5e01caebd300acd7bd45eada69d20f1b4139013a8a614069315a1c99137a6f23e38f91c210e0c156c6fb498056e823dc41a05348ab43c2f6f4ce188d4e05a13d38f8025731ac1670949a040
+Entropy.9 = 63954ac7a0f989a458d2b4a6b7013dd66683624584b545060bd03a57b92822ef
+Nonce.9 = 422764bbbc35fa5d40d34145afe44bec
+AdditionalInputA.9 = 7b25d875dfb03333cc27b9d4286d00a85ea5921f4b8a4717b957349eb3509053
+AdditionalInputB.9 = 8b70d28c5c80086c0cbbd01337ad45297af271d4bafc764b0fc5705700cd419d
+Output.9 = 297752e61c4ebc4e1c68391335e2cdb49b0f19dafe359e451f8158fb7958d32a98455a852002d8f05169f438816ae6fccba1eae4d1fdd7a1176b04831d7ce892f711ec825062ea1c6b12144bbd3a0aca7f92520ebb87ac6045d2ac3a4a74fa559926f0daceb59d44fdb39f5fc3b877f34241531e863c153286f3f1b2ba2db4e2c8e2344be40c2a7a8cd01daf168696ce19f83ddb64d50e2313e78c5dfcf077f25e5b4d6f687279119ce856d4131a63ad133cedd020881939bf70f82eabfe46db
+Entropy.10 = d0944e0a3f3604a588271c8eb65913ad9b07ee2b29620f8106ca70ec10aeb896
+Nonce.10 = bc9b2b519c77fec5fc419e953ceb0be5
+AdditionalInputA.10 = d58593f2488f0a292ab552dac006c94b20ff500dd57af32be808921a5ee251c1
+AdditionalInputB.10 = ea9e579c9dca67f07ffd67d2483ec1fac3d2ec22fefff73c7ac9f125888d7a4b
+Output.10 = ae736da6632a7d8bdcc9e279cb7d3f9101a8f7dddeff253277d1d99b45c76a1a5c193334e912c3dfdff1bc389b209c3b29359a4ca53765a1e40cb900c6055d8a285cf63ebec79b46019efe95d5199f215f11961f3319d225bf3d60734fbfbf3593ab105cec2a17e308af469b3220ef7f055675396d289e6f4f8009881c8a2b4e9de88d53ad13e8bed8b38be6d8988f615b4590fde3d91caf50a86eac3fbf29924743145803978d261132b5975a9f108499250314e098e57c56e2f9327307cff8
+Entropy.11 = 1ef53464bc7a441227a27ea7b5c558dbb3f509aaf880213cdef7e8f6a1d287c1
+Nonce.11 = 73cd5b3148d46c48c83c5cad3ccc1f50
+AdditionalInputA.11 = b052a66992fd8a8cb02c593edfe4766fcbcd3505af29d698e1f4db398acf717d
+AdditionalInputB.11 = 37333448311c2c6edee19aadb8f1036cb60cff2a945c1a0ea087713bff31e915
+Output.11 = 4ea7054659cae1cc178ef431aebb64c2c8dda3a965ea940a84c00d9790e2e3a33521395cc4d49038994aa4c7dcaf0b52b44375d93b625ac2281991a85a5acebf3de552355e17b3528faf39d392fed981400f28540f5ca64a4d2eeb952c88856c8f7388a49611810941b46b1000ee4a8aaaadcd39944c4abca9110fd6580093f9303f86a6e129d56b5aeff5422c2261af33523cc6a174e0782e13a026c003c17430b8371bbfc3d51c3e06fbdc30769a278b109238bbe383cd5523053fe589b72e
+Entropy.12 = 14148d69d583d4c1758c307e0eb0b762511165823fc54096f9da5513e87df53b
+Nonce.12 = 96a7be8d31b8a38f24a82d846b0e13ef
+AdditionalInputA.12 = e05f81f6402c52dff5c221a2f191155bb56abe160ce7dc8a6bedfa029195a612
+AdditionalInputB.12 = 214777e3faee7d953b5c796675e106d50cdc12836b3114d14447ae91cea3c1db
+Output.12 = eb0497b32af8a91ed3959c31b079b8cc5c39db3100913332fffbb6b1d5ebbcdc97d6e67c934f3336197c9b730d80995a7d7445e36cf3047cab22895f244cac803eabd001eb1ff5d5645a803c41ea6dde6c972b47de0372ce901667d03e2e02aa0a5aea809e0bdc7430440365908418ce6066c24191ace05d6a797ef9b94409989cacbb9d9ec31f3cf0112b72e1420b47e0c184a8aacc214d55a0d5e0869d09303e4014de0430c07380006ea75984e6c32b06067d7d7b931e2b74666b4b569f71
+Entropy.13 = 27d47020acc3a80a55149fa0ef43f684843ba89fda4bff1c29d20baa2b219567
+Nonce.13 = 80569b7fa0c4078d9ff71a3790f1be3f
+AdditionalInputA.13 = c03ea0b88e2f9b53f902b22746bf4dde09439c190a7a638e3cb990d86739dbed
+AdditionalInputB.13 = 3ef05e71487cdbc209b5ab6e808e55f0a93bcc02df766b01c1c1ae5875b1023e
+Output.13 = 3ee49e2a58d800d922cfb66284da84bbb5944c85f194d95f1156b673392132a430e47ae74f1ed7c1d0e632d8cb604c88777437d8f37e7d0428b834555a96800540bf5bce6f430328fd328baf4b22b7f8e663c1d8583bc0119248588840510e11203cf47dfc4f6cdf8344170a341fbb7d93999ba86be3fb94d9c03922fd3d75e3fd5b42365aa62606e352676b2a0c51fb030d8d5605e8ac6bac2b4f8417d8e060148e3d4ba67b31e5e704d866bc87741ba877d12b10e8a9b37f3feca908fe1fc4
+Entropy.14 = 88b6550d49182ca7321d8015f780121223a93343dabaf21978ee2818e7bce659
+Nonce.14 = 1d32b48eb4642069adcaa5986224e6d3
+AdditionalInputA.14 = 809639f48ebf6756a530e1b6aad2036082b07b13ed3c13e80dc2b6ea56e70a04
+AdditionalInputB.14 = 3395902e0004e584123bb6926f89954a5d03cc13c3c3e3b70fd0cbe975c339a7
+Output.14 = 4a5a29bf725c8240ae6558641a6b8f2e584db031ef158124c4d1041fe56988fdaee91ca13925fee6d5e5748b26cc0275d45ef35abb56ad12e65aa6fe1d28a198f5aa7938fca4794c1a35f9a60a37c7360baf860efd20398c72a36b3c4805c67a185e2f099f034b80d04008c54d6a6e7ec727b1cace12e0119c171a02515ab18ea3d0a3463622dd88027b40567be96e5c301469b47d83f5a2056d1dc9341e0de101d6d5f1b78c61cc4a6bfd6f9184ebde7a97ccf53d393f26fd2afcae5ebedb7e
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 2cd968bacda2bc314d2fb41fe43354fb761134eb19eec60431e2f36755b85126
+Nonce.0 = e3dedf2af9382a1e652143e952212d39
+PersonalisationString.0 = 59fa8235108821accbd3c14eaf76856d6a07f43383db4cc6038040b18810d53c
+Output.0 = 06051ce6b2f1c34378e08caf8fe836201ff7ec2db8fc5a2519add2524d90470194b247af3a34a673298e57070b256f59fd098632768e2d55137d6c17b1a53fe45d6ed0e31d49e64820db145014e2f038b69b7220e042a8efc98985706ab9635451230a128aee801d4e3718ff59511c3f3ff1b20f109774a8ddc1fadf41afcc13d40096d997948857a894d0ef8b3235c3213ba85c50c2f3d61b0d104eccfcf36c35fe5e49e7602cb1533de12f0bec613a0ed9633821957e5b7cb32f60b7c02fa4
+Entropy.1 = 023f5673dac29f62245510d0a866629c43c64bf35a0bad30f1270050876cfb1c
+Nonce.1 = e80b615a5a47ecb51217a46079e11fd3
+PersonalisationString.1 = a6f797b155d6da01f5d155cb7291442e1b82d4190e93e279fe5b4aaa7d04ecc0
+Output.1 = 507b824443af5db28f746229e03ab00c73cc3ee4956aa14b33eda00dd2b9b645c132dab7dcdbc659c8ba0e1a3575fe7dbc7cf9691f9b714acb1b33bef96943003c992f661e04fe9e8b9f648f4af9a58a45b08b8fa7fa3704e6bdc289abbe14a8c7e1747a52ac916c31ed079de0b900672e658a201279824d0d75ae35dbdd43aeab915653765d83e46f347fcb4fe3321fc28abd2d0d26a662661582ce21b6dc4ea6d1b236e9692a83c8ba0fb299157b80623ad4f448d25d57f537b10e5e30f80b
+Entropy.2 = 96b5bc16ce0d101b90d54da6c4b3d85a70ee19d54cf4cde3d048afb5f758a6b5
+Nonce.2 = 2ea2c10c16feb71cedfab9bfa9e462f8
+PersonalisationString.2 = 2ff415e2432d2e6c4279910a5e56c0f5354a5af0099132d891943b4a8901ca6c
+Output.2 = ecebe717afe6dc08dbff3ed626bb06de0f9784283b70e378dec19d4fbb50e61b7be48ceb69851b2bb94641aec5027d53d314a96500a9bbb38a87c9aa42ebeb96a23cf29a0fbd5e48b399daa1b24dbdc85223f24b7d77332bb1a137ec709d27c008c709696cbe44bb2fc19fb10a2fad4ffd8a9d89492a939f2268d1557f44b6a64e2a57887830fd8bca1b6306aaedbd7f3f476b827995a1ed121388497edc7e639c87d092f6591a45b5647c6c091c15ed39f594b7fc4ae92331f96dd8e17be970
+Entropy.3 = 364a833a283a3e0b8a5b681daa50df96d806d4b54828f2b016de5d88597e6287
+Nonce.3 = d98cba8fda464d21aa1cfb7b26b9b226
+PersonalisationString.3 = 35b0e7534014dc2d7eb0f20ff78a69d5548d0a64122d4936a6ed177fb3ec66a6
+Output.3 = df4c799cae37173a81c545d019ffa336ef2c039a5865af425e5b60bc3d7202f4bc1aac5a84022bf4088061abd5c39d0fb047ba80163eb5dc8b9dd515948f16915832c6f76b45acc25b9c01e7f70955c0eb51bf50f00b24bb8e7ff53bd7c051b53d8b1a837a17a00355d7eb21e43b2b5b249dadced37d06e7047c2fd12012705a59d051afd26245ce3a59acb4b996b718c7dc1ae964bf12b1db02fd6c06ac2fec6ee5deb02c2c830110e9bbbd3c778a136b646ce2a0738563555a89409c56b81e
+Entropy.4 = bb4d38c775acdeed663256abb747ec25182bc16efd0de02cb4b05e4ad4749c92
+Nonce.4 = be6f1e856e423a8f3bfb0c0f27ad8210
+PersonalisationString.4 = 21591e796b7e68e7913fefbef4872af9c062f21c8023c0dbf47e040c3aed3733
+Output.4 = 12575776e1b9f54b0fbc39e85a77b6912160bace4f1e9f049e3a1c5bcb452cf9be42ea10c028c3cc249401ac236dd3baa53ff327735435f4869d3289bc9465ccf15f826e4e4fff099986bdde0d09bd12e3caddcf452eed6ca1206ae4561b84770a9cc6e962567304ef79d8d3608529a3b5e4067fa83c8c35a06f1855da5f5ea7eb106e4c60181d12ba00cfbf7eac60bda00571d95c45c9d75c43b42e27a238aa5e0f02bbd96cde59a2e572934a99d05c399ffdf15c65f173748734c51999a29e
+Entropy.5 = f9d041d24158f480600c3747cbfd868c3f7e9ac7f74b3760eae5320839e4f513
+Nonce.5 = 0f8477d88b1d914c0d8b375d089a4c83
+PersonalisationString.5 = b148049f4093f0032c7f105dae219aa9e3f70487ce3a6b6ecd99429f66be5406
+Output.5 = 84c58bf473061da92fa8d56aab3a75598428f18dca504191a51746eb5fcad8f784eafac5ea81d636d579e330baf7db95c8d706432e9f585e84da090c0eb40dcd819bf10e0d5b8600150d186f732af50b431c596c920eca742e6555129fdf5df96b44005083d7a33087b150d63529bee4b6e1ed4189ae2d93cee8dc671d47c0e74ba04218dfe273484a4bb59a57743ea56843d516ff2c72ef9841996d31b0d6c5beef367a6b44cc84cf4d403a06b40406e4c9f47da401e3cf31412694e6164dcb
+Entropy.6 = c18f511ffc3479a59357c17c2fb3d1e0e6f0edda4c8b567f2413323c2037f2fd
+Nonce.6 = 140fb0cf33eb59526d8c0dbd216939b5
+PersonalisationString.6 = 7387aa3b0b3d92afb29761d3d5ea16e32a68297b9ea6751e1d54c8612f6351c1
+Output.6 = 949bf03868563c7d1498c69c327686682656374b2efdef6342e69a388229c580ca2217a9332d3ae77c2d1223f5dedf4b34ec50b79d5baa7283168ed7cbe71c6c3c9193bbe01b76e011c39d2d462017c2c74b7e698fa2140e16886a9ec0fc6c36decbae37537638ccf17777f1cfa49d2c2c7ba3aadd0a1565d61942de94aa6fa16ecafc2dafabc9082f23e75a0e2f8f79d1c0a15ce57fef7655f1a4fc6fc4d4a694bf6ca9e333959f35ad354524f614905c6a52ef8f524cdf01c5fadadf207772
+Entropy.7 = 6b09295110384eb56726f61474bdc532fdace31ceadb5fc23d587356cfac7433
+Nonce.7 = 8ab6f9d89394b907edb646650865a3fc
+PersonalisationString.7 = 7cafcb4db31ab411c396015b8bbbc990607e08bd1cef3337dfa0e295ae024f9e
+Output.7 = e51bc5b3a6bb2a2667f5d62c2ff9902dd07b566870b4c14242627da7581449ec985739cdc2bb5ef036033fa798112ce20df06d46d61aad7121b8282fe7556bdd363cdabbf47184e55edd85ee0b7b0be17b9a7f822f4d8906465b525c16385d0899b6c27728ff2a600870aef65f58f9d3777e8987d86e59fdb69cd232e7289fc75cf2174304137f988a17b60c57af84cd8e556aaad458f511fc0b3009516435c0c60098f35fb6a4a90d90bc6071d38000703ef57cbc19d6b78a0f797f3ba044c9
+Entropy.8 = ec6d0f68240f5c47e822d9088364c6cd03ca53808162b4f06f5956da65290946
+Nonce.8 = f4d26653d079e50604f836c1d798243d
+PersonalisationString.8 = b40b5737cc76c5f6d1df0f13bfbac7e26f92aa933125705b6197d9bedb11f2e1
+Output.8 = 207833cf65599e1406ddaf3452f060c872099cbf7483f1f7f14033490f7258ca5fd7f5339f914498b6e61fa426cb872c880a9fda9b8ba590cd8006b990af7ad412f60c8b2ad969c2f9cb0e9d005943d4dd2dd7af9699046ce89d6405597716d43b9ad54641c2278b04b2bcc5b8ecbcd5e2044e4e6ec5a628605fcbd67249e813bb769d7df01b60404d030e69e9672b4fdeddf82a22042b83ca036578b69f9a0ad9702bcf95fe846705b49b0a0795dfbc4f671e0158ded6242bd8f8fbc2410c46
+Entropy.9 = df59ac224e4ba1b6dff348f17bcf9c5a94a3235a54f2799a6cae29d8654b79d1
+Nonce.9 = 8b09b444a28a7d537e1a2bc89e95abd8
+PersonalisationString.9 = 14a0a91e0cfd63ef5fcbe2e8c7a44bcf5769c9f95b6c50bbe9d3b48b82a09053
+Output.9 = 656438e7738d441b9ac116361e9f26adc0e303da7889cf559841b3e44127318edd356051bd0b3ecea78feb2b928227921a0c183c9f56bfd11ef31b28da6c78f3891d8ae1804bc158fa56e8b7a1a46be4954de493ef65a7f9beb46949a323a04e944034db30b19cebd8b70bfc155882ddfaca1bd5acb981c2c1b3e0862c6234d13093ddbcdff15129d586fc24ea2fd20946fe45b467bbbc77a6b6973eb6ea02994607c657eec29e4c4b3915cb730db056babf1779127047b401e25f97f606063b
+Entropy.10 = 8da1ad6810c1d6b7ead210e48f51c370d4520547a330a4d591e61a9847aa0434
+Nonce.10 = 63f69d1b237999fda9b5697f1e7aaa07
+PersonalisationString.10 = 291c536dac72409e31e71cafb1b5f55c14421b2c7a44d792cfdc663dc8f62692
+Output.10 = c2bff571554c26bbd4442fbb3b0f8eb4db09840337658a7425613e0fd4f96e60da39b250c3a77379a53325a56ec02248c4d67fb9154e3b0eb8972a3109aed531eccc027705b267d2b9c037da79860d76e5e980b5b30b7ea588fa221d24d973f6d4c625de65123e91613a1528cdee59993aa827f319a759412f20aad6c50fa79a3debeb346ad92809470daf228cf344e09f03c839a28d580a2b3d7050685ef51e95649aba7228a2f0c82a2dfd89cae6ce549e8b27fd46f02feb473645765018ef
+Entropy.11 = 5e8d6571f514519de6c4c0a7cc5b85df616735b8dd09c3bed2377499aaabb296
+Nonce.11 = a9b2c94642da10e8fa737cdfb3129334
+PersonalisationString.11 = 6ae29c71b76fc48f14a3d731a0f6f276f73e7672eff631dbb1d22b06463bb236
+Output.11 = 5cadc1264314fb4bc7ed7fa74bfa16aefa624bf2fd60c992d0cba10429c56e0028ebb430b1a1c6662a9b3c7f6de244ca000ae63db9570f1aa3e7ffb1e97a9d848021d8e632fedc037712a29abec4063b9d57c60738f0af0b1aab3844b03f7aacc65d38bec91a11b7c3bf8d970f01e00fed9dbbe9e2e499a21c72a7c5a22864125133ecb073a4c9f6d9fd46024f5c1ee7fa447209afa6ccef1f97ae77ca67fca5959dde209d2597f87af6e154408579cec42c69fa9b7cc075ee3e37ee3d91ad9f
+Entropy.12 = 5c9481b2642855fac8931eccd1bd6c5a05b560a55f96d37e865f057a95812d81
+Nonce.12 = fe65c84c96a990eb7a302b58de723cb4
+PersonalisationString.12 = b6a61b9a31207363d62c0b88f1632290f4f18feb41a6dedb85b7450ff9157016
+Output.12 = 9cc77b68e1ac23fdd2e2a6ff697053f816bb48b39b1162f7aa3fdd2dd1867f68b13980c9e5989d4631b7983248501731326bd7bf6e967b3dee7d2d5625d3cc2e198623af9f77f86103491ebb4aefda5c333b51557b8f643e6d6c593fd7e27e4bccca13140f6129cbd024de076e4688567fd7e41dc7b2bd0bd9b3e966d5d3c461502221b52b001a4d2102894da04172efb900171a0eabab1fd134217580cfc33a0a94edc0bc132af91d048c6f5ea4e34ebc9686a99f81d19118ba4da63ae3df7a
+Entropy.13 = c43f883d0adc2b56984d4a497a8ad76813a01df5a0ba22b53144763b65c7bf3f
+Nonce.13 = 6f722e4ceac59966a6e44ed898e6109b
+PersonalisationString.13 = 769bace2c263edb87101743673724ef67a935e1ae9cace87202b6015d20fd9ca
+Output.13 = ce61480953190453247d091838dd80117f7f85a7e9a1237c92edf10cfa26b423735788b1e89f33625480d9faae57112ee62c8e4840475a6a738018ad3fd4a77efdd8f15ffb621c429419b6adb20431fd35f9d62fb33d500b87beac4856aa4971eb89710576b609ecfe758f3682dd316e7ee9d6560b444c2446656c8941dca7d6eaa70fdf8a70f18386ee5d4c86738bc261c0e8e5f509dabffd0425a86858ea3c71de5be98570dabd80a37b4f7f954002727c0b712e58693603c23130a45e98df
+Entropy.14 = d083f7f8c65374627ddb51582b3a39e2bf074508d5f28ecce25787f386058de8
+Nonce.14 = afafaf2ad7e6449308e176be01edbc59
+PersonalisationString.14 = ddb4ced192f52bdfa17aa82391f57142ac50e77f428fa191e298c23899611aad
+Output.14 = b978826b890ce8a264bf1ad1c486aaf5a80aa407428c0201dd047fa1b26e9ea9ff25a9149215b04c2f32b65e007e0059a8efe11481926925061c748678835c0066f596352123f0b883e0c6ab027da2486244da5e6033953af9e41eec02f15bebdb4e1215d964905e67c9e3945ec8177b8c4869efc70a165719b8e1f153c41744d44d3c56a15822d522e69bd277c0c0435fa93e5e1bc49bc9d02aee058a01a04580a6cad821e9f85cf764fc70dfae494cbfa924eab0eff7842e3541bc29156f6b
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = c2feb900032f2cca98d3f60536f563d8ac9af5fb2e90dba36c371c0a1c58cf5e
+Nonce.0 = 4a60f2be0fa13b8266b715be8aad128c
+PersonalisationString.0 = 8e6f9be0c692648072d19c750804b10e2ec313c8013abd363de7a467787859f2
+AdditionalInputA.0 = 72f54ba3f8e71ad69a040bb8493283acfc8815f17dbcea220ecd68372a2dffae
+AdditionalInputB.0 = adce8157ef60482841dd2ac5ac512bf7649120c1dba81ea75f2a70b7512bb6f3
+Output.0 = e76e4326ac69ddbc6b2408c529b05a96425c65cc65671601191238e9434d2a0147f3a25ce9b6818774f5263c92459bca421d2b492f9a9c2971359baaa1426d6e2c36d8924f39d02ee2fb5502c4e0b206dbe9aeeacd508abe6c055d547b5f9f35de4fdc9c05a2c63ad699a3a7e265598b8f40a8a295d7376b88c49af9edc790b8a5ee221e19877616678e2a5135d7b3756109200439d9ec8bfe0cc5f3c334ca9c022ab9192d5d554dc7ae76af1dc06d814427f46a7cfa2dcc62f4777d07ebde7d
+Entropy.1 = ad500edbe28b9a4338b55451b81c652797eb48fba753c186ce0aa9ad02a84ea2
+Nonce.1 = c995b7ade6de0fb4ec97bcbd61b711d5
+PersonalisationString.1 = 5770c41832a4cdc4039a8c332a4b45e7a7b2dabb678ccd2e56452aabeab14925
+AdditionalInputA.1 = d8d5516d158b41cb9d66566b88064900af78183f765f2f72a19548fb797377b2
+AdditionalInputB.1 = 60a3a01a72e6b3f33a0c236db08237e7d656bdf4bab1db57ae23b7305569dea5
+Output.1 = c5ac3df66bc664e8bf84c758c7926992f0e8a03cd3f3f5fb8277c85b4da526601e8131f9d205f35594e101a86fb83ccf4c1e98c8e609062256701ff2132e337cb7287f0ee2e8fe3ef11ae703d7efe52e63cf89119ced05950c55aae6c822b6b0a8e1b91b537e5bb2de165a4b5b43a1c41fbfd65fff9bc5329d303caca84f5d1fc6acacee622623ed5dde36aeda0816749557c924d6ed26cd80e456fd0ae2146477ccb63a203fe16ac1d0eb2d12b6a2cabb21d412422e95f2df8ccdc23b4ef0dc
+Entropy.2 = 51a29bac53961792077e88ed3603d33bd1f51b3fdb2b5cd1ea131c6f643af65d
+Nonce.2 = e81eb2e260396d2a69b4184c4eb98a15
+PersonalisationString.2 = 72e5285b92c4ea4458e8a2159687cd46e7df9c1f4513d8b72cc88be41c2e1522
+AdditionalInputA.2 = 16a69f7aee34c567595f3d362ccbdbb7b9e9372c4b1729fbb80d9a089eee31a4
+AdditionalInputB.2 = 825197262a43f6523182f0a91005d70b17d81c2bb692edfd02ab988130c7d5b9
+Output.2 = f63f531c242a295d7796c3b4844fc74821af5a53e0e7ae822cd8a7f9de91e6164164f3448fd7d18feafb97c9500e0625d501dcb3927e6fb39ef65dd9586d157076436452bd3066cb30d1f47dc0a3ffa5f2e9ab4e183018b40a82b39b0d170aa21b05600eefea906838b95456e04cf046808030a56951d2502c5eb6271228905ed08549bb171d6c0408d88250785f42e349ce1d9e74a6cd0360a008ec804e7ecdcb4d1fe24aa5a18cbb65f4de1619a29c6062b409a386ea6f43e60adb9ea3dd28
+Entropy.3 = b30ff9c6e5b6bd258f1cea0fd5ef9adb81fbec233ff2fab01e79b7422878b2e9
+Nonce.3 = 50604e10ab80ddceb9d2b968d0d37ba9
+PersonalisationString.3 = e8acd4b380aace0b27572057eaa947e10e6b49516140139c74a1d4f472221dac
+AdditionalInputA.3 = 1d2ded0003521e2ba6a4a3e732e0949c1d858fdf0925fedd9cfd7f603e0e692a
+AdditionalInputB.3 = 688ac5e7b4400d962c106fd2ce712a1cda6a0b8ac5196ad727f9b882329a3d5a
+Output.3 = c5208fec1d67517311a42bec07782ceb247e9c818e4f5f3bd160c9e53d462b61884feb278cdc8f64e22f59d27dfa98d3a90da8c7c5ba28ca40bd0d18934595a376553d1a8a19de07a83e2e9db42748c982cbcbf4a975c20084ea9cc6c6a41b571faf66b364e4b7e4d32efc80c30b219da1c02a1ea02f6922adbc31a057f999605a2d827f10907835c2bdde4157d7bf2906a0ad27bb72f113c6ec4f23631a2b8517bbce91b560d90d73fbf0699bab21da23e27cfec513bb5e375f50108197d664
+Entropy.4 = 56715dcbaa4f5bdbd157bdd950d1c1b46c1f4f8d7818ab321d72c0ff3c0a9280
+Nonce.4 = 64b0439f7bf021dcdc7febf2126e5432
+PersonalisationString.4 = cd5547991b525f7795e075a59af1701375175bd760db99d316b91463f87f7f3c
+AdditionalInputA.4 = b2e4f02f1c14866f538eddab402356ff3b405abbb9154e88b98483a83be70f7c
+AdditionalInputB.4 = b8db321ab30285eee7f9e377ad62def6caada447d00a4ec882081daafe2ec009
+Output.4 = 7ed8c2be58e3553eb65508377d63d7f24518d1a7235dd4c740bd987dd8bc1c1e3ca97a69a37dc9a270ad88989e4868e6cf8e4cf01703c0b1eb6aed8c3f8af431d819e68b6947ae134d360d87e33668cdef0e45e11f5cd79329ff95ed00e4a6952750f1574f489394b5fde3c6f07311a1e5d9c4e070a0943ef9d4a130a9e4b0a80c256e96ca5042961766874898ea0f772b78d1a33e866351a4eb425b822b5ad596cf249bce8ccd6dafb334b71a503fce2c8fa3fbac9943910ce5ff02ebbedde8
+Entropy.5 = 1c60a31760019e6a571e2987e57e19adbc1accf3edd44e501061cbec331b197e
+Nonce.5 = b68d0fa8fa5e3071d6f8b7c9c0a3c35d
+PersonalisationString.5 = d4d84dc7311096791dd9c9d7f2cd291071f877afd86b9644427482d09ac9df64
+AdditionalInputA.5 = 6473f4430398d7e5a2d218bd05e6aedac1e317269df3e4705d56c22d6e7abb0f
+AdditionalInputB.5 = 379649b56a46399b9ab5f3880e1a73993a58cf52821d3cac87890aa0e6322a94
+Output.5 = d34152fa12fa341d0326a525aa838558630013857747f02634d24e9deec2da12f52fb405e7f1b973dc2d982d26eb2ddb4b49c35a9308b06809171dc990a4248e6da0c329a259f495247b9fa8c73af06604db7b629168e34081696a043977dd29a3c0362d5895f9aac24bcba58dd74078ef6f8d33eac864f2e6cdc479da3d224bad8099d011e914b6ccc3631a7369586e18c71a4087de0d47a7c29a09c12438c7de2d4b47768f47685b742c25b860e716c31e2afe4ce6d92bc2fb9f34400602f9
+Entropy.6 = eeccce7f7edc52f0e2559250be36526cd1839151a77c59d527f66fa24ea4d86b
+Nonce.6 = 3fb298c8d72b6a0a8e191b60259d1fc1
+PersonalisationString.6 = 26d35895723ba3d431991a0e6fb2154ae5bff7e58609c926ee3269afc5cd631f
+AdditionalInputA.6 = 227b9a71a6c17ecbf627161fc627f8f6f1a28ce39772b7a3d36064e2cc6dc4d5
+AdditionalInputB.6 = eb59f780c5a955e1355dfe15cc4a4e90a6ec75584e63bd0de734399f47b95070
+Output.6 = 78ac77657dc56b23e617a9b38168da945c1cf52b6062c2b10f1d7a3814d9b9efa5545da050b0db5a65a2d2d2e02fa12e97eb970fa8e83c524bc809d675e0db35c9762323f327f1edb9b534ce16d02519750b41ebe51f747e9da43fd1afc60e46c7aba72e15cc7a22fad19ed55189f287a14737483eb6b32d966c3e3969d8198f01f2ed841f20d7d2e156d6285a29e07f6d7fff42bd575806c4092522b03e0d1b8df0cc88f5b82d24a7fd0feff6ada03a60ef2541a4ab041a49aa973c7163bf94
+Entropy.7 = 86f8104a081c9565dea5652f20145a068dadff125debf818262d8931cec6ba93
+Nonce.7 = 7fd5b51affcebee952fb67f29f197267
+PersonalisationString.7 = c7ba5ff828855e6e78fa1732d63aac1f49701ff7ac1f3506e97941f998b4e9d2
+AdditionalInputA.7 = 6917bca15db53a5359e5c4d30ab4d37fc6a1bc660faaf2e74864cb4aa52e0e02
+AdditionalInputB.7 = eea8db0cfc04f8de14d6053442b5b4f8733f822df4be5966a0de8b0f7d2036f6
+Output.7 = 562b8b2fa3bb15cfc3f7e57f309e31b13c790c928ad6b32a005f5431c28576c5706c4ac0dc2c7a4435bebfa06571278f485932bd94382efcf727b300b230da9b9e9f377d2659ac75dd8247351d5ed8185effa0f255a2a2136e63717e0265d561a34c75ecee1c774c25e33fd938696825686acf9a419c1da3fa1ce8f695e231087aa0927dde6ab487dc61291ad4700c5c608fab1a418f6b30ff97b8b8f01ef8164287849a77b21be5d11d82d0c19056e07d59a30f6c576705c6cedcb9f22d3a8f
+Entropy.8 = 0db6f73ab6d31ddf8f78d76961310d68f081c9e6d5985e1883978c2dec48d9f5
+Nonce.8 = 8875ab658b3a8b795bf464af9470a90c
+PersonalisationString.8 = d886936ad36549a10b5dc5d6e21203abd75ad63f826794b4adaad45a70424c5f
+AdditionalInputA.8 = 76993d3bcc32546430efa30e3b30acc34c7672b6e18c7e2e9a1f1cc26f7f7a22
+AdditionalInputB.8 = 54c72cf3457e6f5f6b35dc14167fee9383c44c867f233ec9d81f187bce438c0f
+Output.8 = c3523894d273c85d605d39f5b89e3388afad8c20787897b903d8db7e3de7590340174be3abd7598daba7806ab934e0feca02bbe66282d469ec01476bad5ccba59fc14cd9549bf4af49641f4326b1052b179c89194d21bec0501c97ef2c24aaf045fd348b765910fe92c0039612e37baad2445b57d9db6c1e550adf6688a79b117f6b7a37e0209d89f194a1bfe1ff2e3b28f0454b383af8872f32322bd5313a3c9ca48d33eab7c3807bb98f8f402c43b99b2176f0b33be08c7e84c86b26e971ab
+Entropy.9 = 3b1ffbfae6ec54a175a80a33c8768fb60f2af9ee2b8620c4e800a17fb9241ae4
+Nonce.9 = 7f77da414f67b5d7b24dd100355d2afb
+PersonalisationString.9 = 0d50cf61e2020a909ba6e36ba4d0a394579d3e4377cd4bf0068967e8d0fe7a78
+AdditionalInputA.9 = 5d4efb3f6e6503c5d85a1c43398d0441ce8aefafaabe2f6d86988a24e033f502
+AdditionalInputB.9 = cfb6156a1b139abf21c73001240997ee1a8cad91a4bd777c0372c1e8fcfd3fac
+Output.9 = d3ef776c8d77fcc5e947bf53e0be11777e69c7dce138f24c1a3212d1b6b932580371479b7619fc82f029d92969628f810b54a8fdab8eba799e750945f3545f6a96226bc760ad736101516efff5d8581f5864b38c29885d39843a4adca17046e1e388c890542988797b576da64804eb4101638328d3f8bfa398ffaf83cb7290a2cfd39ead13290ae773a8958b33914ca02c8ff6a069aa25ac8b36f6f0f1dcd8f1c5fc838083a64ae7ae11b85be3a9fa80ed83949b622002e91776273fa32d6cfd
+Entropy.10 = 19767ce1f18aea366539642fad400a03a675b2f3c0b1cfd49925e535b2c27790
+Nonce.10 = 43c5a1c57ef550acae733729516aa62e
+PersonalisationString.10 = 6bfa882c1e895eeffbb85578182653c022a4703091529780c075cd482809b990
+AdditionalInputA.10 = 11236df1dca3de6e3e3a57d2741d1b77f15f45b05beb47cc500100b31188a42d
+AdditionalInputB.10 = 98708a88fafae56c4f6fa780c6c0e33ca8f2592983b5ae607146cd6e92204416
+Output.10 = b6514a3779dcef2c9ea0ed7ddfa808d045c5907314c358302ca32b2055987a38ef601637cdcf77b1b8f7eac479f8f18972013c2e1a6dfe612e8a586dc529ece486505534c0ff3dc0b2049a0e46d7ac504a1fdfaa9b08d9fa017c5803415fa391ba7eeb576fd6ddba4404feb46e7cde56e090dd280be5edba7d6df9c5ba7d3454bcbd4d443b08fb51a117c1d5916f225dcd6c1c3fe2b2880f4d42962befe3ab76bdc086e29381dd985206e3e00ce722c9c040af5ff4cd4a8183b446d91b310845
+Entropy.11 = f63292bab50668eb14b83975422a0c853fe55714a9edf9d8a817ba0b2f26ec40
+Nonce.11 = 063a86ee3c79c694273342a02f68ecd0
+PersonalisationString.11 = 3c525956838e26b77b8cfc37f024ec398ed825076dbb749cf49a7d868c201e6d
+AdditionalInputA.11 = d9a41b47c3bf8743099dc8fd228f77dff01ae304761eaf57d751e11cf094bef1
+AdditionalInputB.11 = b790c37dbda20fbeafe9d1339a1151144253bdfbffe17ba87240eae49c606bf3
+Output.11 = 3586b63315020b3ba1121314a0fa6c66d57de0ec44abeef7b7325e960832b7944cb0a81a747ee5c5d3163001536d3e5ad2ec869b0e5ceb14aee2e6915073619528c1421b59b80254dfc3cab0584898b0bca72c76ae25f52b7405b9dad38cb2b841e1d6a34fc5b277129db49928b2f6c0dd22900ee786ec128164ed12eb324b502499f1c5c89be2101901476b39c56034cc293e320e63a3e019186d4eaf9a098136e8c0ce7f6326f84ec95992dde2585ad3945a9534aa2954b8c15a48e3324d76
+Entropy.12 = 3df74683f298ba48648714e384989145c1b84246736dc275636809d64c75ff60
+Nonce.12 = 3056e703c435eacf21c0bb152d9fc2a0
+PersonalisationString.12 = 371217ca2337db03c4d06714624fa11f90d5dc575bdbe12a457c610be066dc2b
+AdditionalInputA.12 = f26b9cac8df57a33e4b5868c36f2b9322994a98269dcbd7956b93d147dd0aa27
+AdditionalInputB.12 = 0a6db86c3abdc39878045b8fc2d5f0f77a8e298efdacb4cb9f74762fc23b96fc
+Output.12 = ff5252b7a39460a73094b9d668b53d1932243caa885c0ecd850612fdbe7e46cb275d079bb75a6b050191282ccb11ef255d52cb763618c4b624560d79bb9a5bc99319783de43c152e7aa7c4cd879a75869285320a9b749c897bf07220cc1bef1edc494bffa6ab93dcf839dc15f6f2e508b9e216e2a1786b75abfb01bb7bdeda722b47af895f551670f9562d9f9b78e98ee7ea5c5ca4f836af5bf153925b2aec055eee8164edf3f7b72e24b1203cfae1834705f74cac8c6043a3c2abf6bdf28fc9
+Entropy.13 = 53d70692f0f4dbda23d78660f0f08c7e70ca94441f1440348f76108874d13ea1
+Nonce.13 = 4652725abd1a94d315364416c90e662a
+PersonalisationString.13 = 6deee916ad660811cf05b5652f32df4e97f544ebb57762617359159cc9a425c2
+AdditionalInputA.13 = acda427eea1c8c6791be6e4d2b60be30302abc84d5c5a13be7d510004b8710c9
+AdditionalInputB.13 = d27d7f598a14205c45788665cd062135b6b65547d3188959e38ab675401d2b62
+Output.13 = f77f9de60e95da3f1d0d67b5dde29b31df59ce980ebdbad7b5e0a0051fee39e1d6fc4311f21efa016039bb05f3b009b223be6f2c007b468388a8a19bb468c7b82cc93dab3e160b2b72fda1240fcceea01c2638e9c8bd2d1ed9ff9b55bf69fba4b6ae8e694c150896ac6233b75567993f9a9adf25ca0f0835b9991ff4b8d3f4f1a3e4c5f9866d98b7a75196804f996492a61dbab5bf72f87658e2300a1b0777ef7f43ffe8962f6b6708d2d91dcdf6b430cfaacb3289f74cb0f67370bcc9af249c
+Entropy.14 = 85186650694f742c3f5f228f943788f05602d4827518908fd09a1fb445d8333d
+Nonce.14 = b2d65f376d48c66eb9e0498999e1ff49
+PersonalisationString.14 = 499928c41841324749143be9cc769899c38d6f6e6933e56898896fabcd802931
+AdditionalInputA.14 = 9574ca51f21865c2fb0efc75cc9d90ec5e9c43104979cd64d00ea5544ea01c96
+AdditionalInputB.14 = c0df840a18d7584b62c70b2f057bf824168edb673cb517cd9dac89a0fc80c9b4
+Output.14 = b31e50202f883a8563cf129a0d5f8a33abad79d8ec8a97167ed7fca778e5892480617cdf50b5e51547f7ec1bede35020a311572c61e33e9c82968e8f69586daea3dc19063bea56503f8ca482918d229949acd6f1c52cccdc5f7f4cd43602a72a5375f3aabfd2834ee0494823beada2daeccbed8d46984d1756fe2207ca92186b506115f6de7d840c0b3b658e4d422dbf07210f620c71545f74cdf39ff82de2b0b6b53fbfa0cf58014038184d34fc9617b71ccd22031b27a8fc5c7b338eeaf0fc
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 26876e6c5336438fc1d6a42db8556b79ffb40ddf54d911204bfcf9815b6a587a
+Nonce.0 = 529c6636613073ca2834bd49ec6e9e70
+Output.0 = de4fc87a1cf14ef0d8024e50ec1644e2166e16efd4b9104457ca038df0e293e09091c9a5a4cca20eec3b4f4d9dedfcec1fad477b995ad5b75c178987ca07b827a354010fea51c2197fa395dc2763d9828cf24fc8d23dd0caaa5cce877fa7b53e964ad64a7b6f4f00a23edba52999b2d636178b458e1b32174ae53b88f01f661c225a2efdd41a747d416c2b4293e06ff0fa8819fc0a81be85bc9dad4d657d220a2fcbf1747d4403b90e8b5aca1abeb5f292f3cd56d7d52d87c1b768c1efa1f159
+Entropy.1 = f7bc822d9dbd992050bbe7ce63d75f533d563c679ba79af2319e2621bdbb3a62
+Nonce.1 = 2996479aa1eb7b1ad7ad3757ad00690c
+Output.1 = 818b7b5362bf5ecfc1a3c9cde98b6c0992c89c10e6e4db7803b855cf1684f195d3e5b688748d0784adc2c17837e7ef90fe89969900d99305b005f7d065adf32d4aa329891c47c92de7ecf212d68de1620a833aec9c25ac2e2c5cab6105899d3dbbb8d2f72188f2aa971029bfc2e35feafada371ab261eaaa0cb07ba718ddc2650927c715bb15b1a9c90e885a4601f492f42c885ab44c6c0dd55954b7776a1446d4b7156b806e4251357b8b98b965f52aa89a9d8fee3b6792e5464196fede4ef2
+Entropy.2 = 949d284af749288f9b212fa0f614be223231f23b5a808dcb4a681a6963530a59
+Nonce.2 = fee00892bf66979b20ae63aed253b276
+Output.2 = 4677563d7f97cf3e0f306c9b4d25637bde575b50f194ace05f4b4399d402b1ed509766acc0832e83aebad0fc0e3498cbdd5679b83fb144b2872531407604f069f52920a0882d543b552f076af6f1ea30850ea19adb70a258a72e8a06efd4662992c0f5f084ba3a51655e65b6a38ad7ffdd411889170c12c4f2caa32e41a88840d2be66e33a80143c9a0e4128d033bc83b005980891ee20b5564f7b376c3163160b5f3c467ceb57c1cc6b0b7db504c76bb6137997d8d8abf93658b3427c7c966f
+Entropy.3 = 35a2f9862d3c5d1854e45acc410b8af3531140bfd0ac396b5b9aad54d37d42f2
+Nonce.3 = 1ab6cd08babc134af3e387f67072ecd4
+Output.3 = 9f548d7d53d72bbccec2712dce82fb5c9004ff99d36817a2a026930574f8f767a653adf82f1013177c0acc6ac53e38ac1d8cc1869f5aff5876a0b11041d362579aa2754c0f77595e8ebfcd842a6c899c81522443516747b77a398f0eb134257cd57356db5eebd5aad023baaa0952c1cb1dc5221f9fb5ffec519bbb62b0f51e36097e442d8ffacc0306702480ae68dc79332941c72492ef1198438a291ff02e4edcab40423b14377b04c3253c3da40af9f1047efb7a6ab314f04014ebd787733d
+Entropy.4 = d263f0f194705e76f7999eae32bd273adb72cec1d6bdc5bb4f36ab71d29a0fdb
+Nonce.4 = c0883f1977acbca45ebbf125c3dfbe98
+Output.4 = 1a5b7ecebf9ffb969ce8b2d564fab9f713d9efac26e5b78e6b0e95f8270f754ade0afbcaf0352c7dadf68a42086a04aa346db4f082b06f945821deeb252f51961d161262456702c8fede5b122ce3073a64aabc617461f231b72332fc2c9fd459c99ce60064ef3f8b43b318ac9933810bc0481065c624da47af64839f1ee34b46af2cd2d6d2ffbbbad78d0076532d0e6ccf4c7c05d516bca844106831d084b4b3ffc78429c571a55657c954a81d6fa7b4ff3a8cda6d346915344bb35ad6a04f31
+Entropy.5 = 63deb4d3aaa7f72938a1e8736d2b8973aab624c8a22c313a8391318ed321c866
+Nonce.5 = 2b4bb4ad4a1732ed5ed6f8b3e7c86a4d
+Output.5 = 681571bb60bb0f420cd55335aa989a17bcdb124e25280ea74179f7179da5fb8789276ec5aacfcd1369d31ddc2bd42f3c30d9555d529ee967ca01a27ce5f16967f3fec2575803c0b5dde71e9bc9bc4c4ec68d8c4c2caad24bb00144f76b41f0563bceed75f07a7a089f6e6d01214a9ee435c6d4b12087edf0773d33e84ce82fb3b376f7bd0c537d28b659040f92e8ed126734ed9f9767e9ad08305ea1045e243f9336f8f5876aa832e10ddaa65901883afd139c4d60291e0fc25d01aec8d10173
+Entropy.6 = bf942c2dc6ea6c13114cdf0deb79647965122d158dda77643d7001bd1bd29906
+Nonce.6 = 6130041df0c0b3456836b7cdacf21489
+Output.6 = 627f48a3386b67b9b26281d25f9a63f1e31ab02b4f54f777e4efb010d5adf57a31a74e933d38039477d74a80a695200d0b59fea4277f291f4f4223ecc5cedc023136658badde9608035951884956e471bae6b93799af10273460f1cbfc4289ba6ea5245e1e9d13624bddbf24a6f3669f81eb8f8490c0eda9a7698b66f743a8f1f2e1f29b8f99be0c260a59f5f2210b57b44ba3cab90d5b983fd3608db5b5b75e935fc246523aaabf9b90d9689bf744144aa4c900b5bcd6735d7808e12959d40e
+Entropy.7 = ec994004c471addd48523971bc232c4eec91548f1a149ca3119a9c9c444d4542
+Nonce.7 = 5cb34f0f0f24caaf965ecf734c120e5a
+Output.7 = 89563d7c337798fa0bd9cab2c782658233a8cdf9ff42f1824e4d0858e8e6a02ce3c0fbc4f96519211563b934bee1a23d8848055327218646d1599775b1b03777382745e6876a35116f2dbefc5a96f0efc584887e49966b8e0dedd726cd11ace6c5a57e9fe6330d94a50ad020a4254ee5822216c4ddd122c085f0bb17c4ef680c83ee832ac9788eebbec6eed83f55e6fda1a1860db780366fb007369a0e08f594e19d104f7599c615512c5ea7fb2e736c39c959e6519288987d6e1fb17674db8b
+Entropy.8 = 6fe36237f785b1f1f423486cde5ed636f8a3f63764b3374ac78e07100ecc8f08
+Nonce.8 = 17dae741f00878fc5749c1b91467e196
+Output.8 = 9818398c6c6ecf6cf2689bf8ace75227d906139bb6445f3a290ea1280e796b2a2809eb5b73311029bbb3542902ebaffb2e778b0106683326d0f63da777d4d64533a5a3e1db014e491e8408d9c0826ba560dfc89626c9de8da1b8de7f38525e9b947f600f6ada514758c9d2f9a2c30af2fe133c29b4673087129384b5354373dd79dde1e09d9866b7db13d3b6f8936ffbb59d9e7036281d5c67a819527d85584f31e341210772d1d92d9bbd6da162512183fd9fbee285f8ab1aa3c37424635384
+Entropy.9 = b3dc10a08bf993887e6f832c863002179269053a902ddb2f8be64de85a75e2ff
+Nonce.9 = 6a73b04b74634e5402f3675e92c51fec
+Output.9 = f76d670ae68e656bf15f418fb608734d5a729e8ccab91f3e1e026b741cd4db1a146c95dd6fb40a5913cc094af37d42f9420e747ff9fb9993b554f4b4c576134e29ba167178d00051c50ec8db6ddab31849faa888d51e3172f7dfbdf5511d71a9e421c63fd328e06bf24c4488b89a8c12860b4f50dbaf4252932f4fe1d7714c79160822e6b09326e8ab0f6cebfd37b7b53aa63c74eb23f9b76b6f88445ccb2776b64517f0c4460a3b989c280c04a833e14c45b4970c692e0c11a6b9f7980d87a3
+Entropy.10 = 081804a3b207c53e2dd569fb43e8f3a1d6c8e4c7d6dd929f640f9ca404b7a392
+Nonce.10 = a95a8412e7f34bed1ee81f6d4a118774
+Output.10 = d5e4de0d78fe49c8e3524fe3e3e8f040689f40278027b677c750fbc8ca04a85d9da9ef0104e5f77a923e2bb16ebddc2e75d0ff1d5dfa7ede9d8b346e427f3b80ae3034b696563f6e2a6222567e7935cafc82b754a920a84d66855f17f07da945e9aae60c58fc8506677729874900cf90aa0887b1aa25e83855040b529c1846739e6de886c2f72542bd159812402bb5d89b0ccb2505abb97802e748a25a879a28d3c4275fe2c2e63ad88e6907f405066e60362bd5f06a45fe42549594d4e68830
+Entropy.11 = f5d86fd2539713d7e3f781b2d923ea5970ee621fffcf0cba495fff1e5ba901bd
+Nonce.11 = 7d3e11364599ed19cf455b8a450355d6
+Output.11 = 0f79515263336ec096d018ada253f63cfd5c69a4f65c3893087598ec0a2e8a569243fcb4767d9dd94a1e6cd8fab2cdc4cd7d6dc8015b14e739341a7715d8e2c699bf9b2310cb83bc16db43cdbb2ba02aeb1acd34ed0b35e29cc109d70b62d5f2ee171bd1167600c88d2a2f08379a2107778508d9ae0ca6fd5414c3bbfd02458445790354ed9429fc4307678f448bca3edd50bafc64dc48441286f14669a5c6691c889ac4f7b89fb146aa30e6747c8838d48be30fc483d74345a3de5e7100a57f
+Entropy.12 = 4e39ed4180d9f4cb5fa769f483b3b9febe6e17d98ad1b76e0ebb3289106070e2
+Nonce.12 = 26998b626c94ba599a3fe052252de22a
+Output.12 = e4586c88e74825a0906523ef8f390829620bdf3a06f14b93d6383e55d39353995f8cf5d3251cff72caad6d109eb4b0f4dc853a80ba9bc49a68586b07e9d4dd18f31d9a2c8920dd8b905ff58df378a2eb5070c417abd65169a250b35a82344978793bf072217a652b7ef419d55447ddc349f75b5f252c36378d2f4b35de0ee0cc3aa6000ca7e6fac5bbe36af85523b705a91d2efda5d114abf51e6e63bae08280ab019c6cc6a66d91c4d3c9555fb92b79709cc2f55d1cf86322c5089490bed82c
+Entropy.13 = 40dfe11932d986451b0ed314510977e47c22df026dbc3187e4c421b4c8b905a9
+Nonce.13 = 9ef4615b4e45760341286b6f3c210c72
+Output.13 = d2c4243b4165bd5e9a5c9057c1ce4c65f149f45719e07f2df87980083868eb48068573ef853a4ea84a3d18ac6fffa201d0fb7d20ad2934a80b4ef9dbe472ddbd7893cfe1fd9e947ec05e370772f865c86161ca0ba57e2fa85b6350a4e6dcad350f44cce5f3f8e0a9b53da9f9db98b2317220bce777968a05e5a31a35b6b57335090ff4d002ff384f4eb5ac9203ef0a67e3bd8004fe90817e3f2bc671b7444b768c79fed4c5cd6d0f7566681200756a0cad121d0c32341aff8787a8c621aef4d7
+Entropy.14 = 5f28c73baaabbc09e8260df3b3577c21f2f02be057bf49d2e73098ed5ff67f89
+Nonce.14 = 8c2f85b546903d8d4c10fe4549c3f673
+Output.14 = 1563c678f1b072813888970996af33c2a6b70b8dfd2e146c46df0616509382062fc9c72d223ebd555f4d8892aafd7b3b61619559fe3d3e7b5e83c07f422eeac912ca7d8858a2d25b966a8b34348b8ebcf44a4651edb9cf5a886e383b01423322ab3002edc8c936aef869d7638f38ca6688c308d2a17fea0ded21901d8e9f1ff8508762cb1dc7e700970938a0ece74c1c2d1801230ea785165d62a7ab0d6d59caf36b30be8e2e1f691210373b7a2866e32ba4b49b6a2f9cc9b80aa1340ef5c76f
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 62ebb24eca06186c05b826aaad2aa51f15af60b5f67ae495a0191f91434fa537
+Nonce.0 = f003879106f41d940f4f6f898714a097
+AdditionalInputA.0 = 6483e2d4b227201b9609ba30086405c2050aa02f36ef135739dfd3435fa93558
+AdditionalInputB.0 = 6c2089692cd0a67b498424fa54f6ad6842b5d34626ee299dfb4bb4d63f942a3d
+Output.0 = 2704c3ee59dee5d5706cb628f79a1efc140f7136bea8e86d423b40bdd9aa593f5fcf64b4af633a664f7e8ccb581819d32c202da5252cd56405b4996473d156700c99443b5d0dcb6b54c1860a8e7f5f5c7398ac6382c7699e8c3f477cbde5885bd6a9d5907923e8a4f0099c88cde1d7705a41a272ad9a38a1175efc97d3b71b84f22d3b0cce3d1e312961cbc33a24522dd8c98de65da91c0c9023934167cff68dab4c5d7f16c910e2d0b8874b3e75550284f754ca212cd7e691825ca4547da456
+Entropy.1 = f3d4c946892fdba3b23baa720c06444e34efe30d1db15581d5f45dfc59c04049
+Nonce.1 = df6b5e90b78881803b8a3df73fac0c08
+AdditionalInputA.1 = bb12247ceddca5fb0a570e0765d405d40af5ff72ea95e9a919d2fb9ce849082e
+AdditionalInputB.1 = 26e4caee61172df5fba3c3091a27d4eb3878c32b6c7bc40c78d0de7bcf40c9d6
+Output.1 = 3f8e62a0a85b13fbd024ae94c52a9cf778a5a8027cb46fa58fcb346dd71ea3b617afb5cd971da5244e96cebd31d789caae52f7d5e8efc4afb813a6950cce1705c2ead8de6f0e4e6043264b2fb958389f48382c0885f4482e140201ecdf3b678427c5ab07184505747a02b0ea53a7d917fa9ee8a7aa250c5435768815a900d1f0f3cf5ae5fb39921e9c15264a14b9124aebd62b96c354c867e590d2b04e414e3bb1e0fc88d823aeee189c10b75aa200f40817bcc8c0ea9a2537431ba32df858a7
+Entropy.2 = 893ff8048e13ec4aae35a8f261bafb6a8409dee911a2bf9ec3d6cffadf6674a9
+Nonce.2 = a994bacb9ea65c5bcd8718163c1ff927
+AdditionalInputA.2 = fcb46c16d85039fbce1140cc43caf000e07414aa9f796cea532e6811526ef9be
+AdditionalInputB.2 = d1a953139aeeda6419742e888ffb001bb0b724ef8703e5a17bf3e91eca5f1101
+Output.2 = c3d408d988b413b5378a63aa90bc5771a47e6f5668a1270eda593d30e5979352789aa71489d8b991f55a3f3ad0aa6d0c751f7c82559d0acb768f95f7e10e74d21bb54aa680849a41086fd452b0798e475ba5a20bcf13e83e7a40b4532470a677ae2e173b9bd873cf2e682d1128f00e8d26279049a2c2059d0cb87e48a50ea159c9a3fde6d8e0095da79e3e7ebae25dac67d2f5d7d668c4261ede42c0b906f445e1984badc8cda8e79f8742253e54e7ea5a71b177bb59e0df683af46464aad970
+Entropy.3 = 03c256ec2ec0f2860b511c05dad74bd8a19ed41bfd01992bddd40c2bd0c7e306
+Nonce.3 = fa7568f856e3fdd931c27cb32295060f
+AdditionalInputA.3 = b93d57cbbc837704a1fa827eae13860c99f5a678b6638302f7a87d288ce01e25
+AdditionalInputB.3 = d4c3a02ccf562abe26720dec088673844d340cf4044cf6e9df08404b1e22a860
+Output.3 = 74c05cab4d6f8b201ffd6e7639744af5c2318cb0cc7330a0f564b20f608945b6829259e053a4e9e130a9345451780906c8a273d5f21b54dd894386a318bb8accf151e957851b7a9c1ed38f7a2f2d8809abd4c6a8df47aade5bbc717237970cda18451e1eb215f4679f5d48c3f35a2017fcca89da5b8f2c9161a7c6311d5b8bc6ba8f897ba39517b5d46a6418620ef936dd9571cfdfa60f54645421ac51d9ca1c0f46c87f795e49a5a6e13dde458e7c6671166f4b445518f580a71249d251f699
+Entropy.4 = c8e1db988eb9f4d323a570b9d112b6c4797c20adc2974d69c6ebe4522d89f219
+Nonce.4 = a48fdb886617cee124f8f871768cb6ff
+AdditionalInputA.4 = e513b0e4f78a66e30fb5a58693d1ae636662ce7dd4549f059e8198fc657053c7
+AdditionalInputB.4 = cf7681d93770f28d3ecf433afb5996f1af45b317733e7ba7f8b9400147e2c5a6
+Output.4 = 24ce04bd31dd19c28b04d00c0b60eb8b0f38bf804d3727ee1d8fe55f7401960b6fb3bcb729baaa6722925c311910f186454ccca438c01fc9a744ab329819238181bd74c1696e5b0ae5a91c9109e76dda66fed6638ccb26424c12dd1041fe95e627d600f05756a9dbb5c21bc239a60b56dd4c857b826f8cb434e39841c7cef93c4bbc84514eb7ae8b1c0c0b712286c1ed105392788d97e772227428df55ddf009ecc579d12a1a3760587ffe4212e182b06099f2dd41a46625b45245dd0b90b290
+Entropy.5 = cf9485bb0722b0f7c4eea2fd0803d091aa580a94f6b381173189dd086d62eda8
+Nonce.5 = 932a4bc330290c41cd5cac29b1f377a8
+AdditionalInputA.5 = 21fb157190c749153918bdd7c109c921958d2d52f2001d28992b30f71e3ca9a2
+AdditionalInputB.5 = d21eb68721e8299d67ef2487482a78f13ffb5f7903683b6bca50e3594966c0bd
+Output.5 = e26a721c80b02f9af013665c5bfd036342b4457c2e5160e687c4e1ffea31d1137a49c1c15ae6b91df9a4736c0e0a41fdef44a7bb031f31bb041f9fcb4ab8829acbf45baece5b0a0d30a402fce6b958793209056b9f15a374cbd61e7c39f8e774a986c2929a659be9a7a4b27c38c880ed330200c8ad5e88d70dd9b67eb0971e577d2341dd56eecd6adecc59db1ae49b898dd7c88929cf3b242a2d0c23d9123503eb1254087fe64131c9747f8b4461008422a1ac0640c1c7a94295e537d34e76d1
+Entropy.6 = 36ea4a8984b22ce3c29e8e9fcb139925a8588c2d8a779d1b4a0678ede2a0307c
+Nonce.6 = 38f098d86068e3e51a1bc42792503204
+AdditionalInputA.6 = 43e2b1ed65db38caa124f8c3fa55f8d7e9233acc09a9243852847458bebb3ea1
+AdditionalInputB.6 = 0b8bae69d568a82fcfa9c3550a2c251cbe97e21a7ab46d8b21409810612230c2
+Output.6 = c01be0a9f5afc8a79b7364995c048ca91aa54b2184d596a99aec552232a3c8e14f6a472751d8e1f0142fcc2ec70916422ae7a5756cb0cd344af926417615a2f8476a09ed917e111efa3454945fa132712b4caaa0ac21c65f05e2d6abfbaefbac04959b5386d4c2fc6f817c372a057088b9379c05755c9c90d5ce0c936a89c824047f2e27703b103bd9dd4e924fa7f0fb8c17cd8a2295b2241c4e19c209785acb88e64f8de201ba6cfb7d823b7afe7762777ab5f106b64b47274815d34ddc1831
+Entropy.7 = 6b4c8418bac43ec55e67e1bd326a269f6f07ecd0e26e7ea9f8c3801693f5d140
+Nonce.7 = f17d963379dac92619b2eeba2722d402
+AdditionalInputA.7 = 6a9e1c3143e34fe108c82e3be6d77c320c8e645eebf320f0df64d5aa4be880b7
+AdditionalInputB.7 = cf2e1d8c5484acb5ac496340feb1e797d523b5036cdb07c5a2bf913fb492c3f7
+Output.7 = d9bca67a13517efeb1ef25dbba66a4780d32f16243b11a58cfb3d69b557a9463151590c7e40f8049db8df3b13d9b36560023cc40101e94a2db342e857c9a9ed879c67ce4977038744ff07cbaf7987bfd9b63f8fcb14101cbde0bb7d26132292d0d0d957ade5091dfd161d78b99110dab1c40816a30cf976ff9460d9420e3c110a82570972708ef162bfacaba62d93c424bc754fdecbf8ad95a81ccefc76a6cd943c48156decae06305e7a781f38218b0d7f7795f70d8b09fe8c0ac49335f7819
+Entropy.8 = 8b2eff17d531de72a8763d63c16027c217052ca321dd1db60deaeebae810b2c6
+Nonce.8 = 8c5a39e606fff833d4ee2d409b101efd
+AdditionalInputA.8 = db87d8bc10cd391e143e78ec5e1b51e9e33935a652d9b878adcec8a9c027a19a
+AdditionalInputB.8 = 5105f07bae116d056626642e4e2220e9cfaff7acb917ee310e0dfa18787ab83c
+Output.8 = 387f7fd397133081eb230c6b787e252a0074bd06169e86039c9443822e741b5c3740b159b5d4416ce6f262475ef8c7a8f85ae5cd1e7b49b51059ef819a7771418a8254befad60f8bd74cbe178f34621d4fb3bf4f1162cf82a2ee4dec54ab7334a0ed4fa4161883dc8a55e646ca06562f605c696b8e25086e56a3d6f2c44b2c381a0ad50f3021c7123064a62faceeb209b8d1fe0a818b54e468866cd5e5e1cbedcfb3d5a8da1c9f924cdadf7cdd6184150d902bf6260116921f51d4f175e16097
+Entropy.9 = 73572014f58acd41a507321ec56f1a1ea80f2415fb6acf1bebb0cd326c29533e
+Nonce.9 = 3f7a7ea2593ea0270e57c81d4ee8fd48
+AdditionalInputA.9 = 676845489c666b033a96640cb298e46cb63a0e00fb1bff9e8d866021d3a01259
+AdditionalInputB.9 = 4bead56cd537b9de0cb0a45b86a1e0da6524e6d0ec7a9918c22f8a79d07882e1
+Output.9 = 5a90506005b5b45b983f667d57c5946df51e27e6949ae999cdb23c6478bc9443437f91eb1b66ec36e68a593c361baa2ec0a5787b35f412167202371bcfd694f9384adb628c8356bc183dbff40e3c291e0c7c965cf66eccbf27f0174615eabd9adb4481428c1ba2fc1dfd7197eb7b99dfb4ecbb4dc23b663fae6be5c7594ff56f87f658d4aaf89aa02e7fcc59b98b0ebab14c33c73b82805b7d1582bc89822561c214896e3cbef8b5c6f693ccc5e71d7297e0a5771f7dd184af416e88bc2d2832
+Entropy.10 = f065ffc9ad34025af4ebedaec453542355798f59e38d5f2f774c9f2b2e275445
+Nonce.10 = 254ace0f50592f76b935a0c363251d13
+AdditionalInputA.10 = 6e1fe2921fe0a965c1c07542a32828ba8d33a18cf4a817be26931d11e3cf7c1e
+AdditionalInputB.10 = aaa0e94ecfedf60d871aa4eb3d7e1520acc3229701141c16af0d64d66e033185
+Output.10 = e2154a38f44222b66ebab4879e164bb83dfd44a7e4ace9ef5d269ea4b4fafe809c198c3f24dc32af488777e8e49ab1dc45e6e77136334aa1a3bb5a96193ba879d4454ac5fa236a96e252b72a0d39b896a947620ab4730d617006f24ce45198a42209491824994a3d4d477c3c9c365cc2c01e490f16030b3d27b2a3387fd69a5a8794262ffc98a00f3e2141f6e08f1749cf76bec952ea03cb90c3621cd680a47819981960f1db179aa13f314c1efec8654a92297e9e3ad7925f6d6e538581a387
+Entropy.11 = 526505d862fca5597370a98fa11a57ae6834d33e39ff2bf388d4ba0d6031b08b
+Nonce.11 = b0028d2372e811884b5cba8d93f8e75a
+AdditionalInputA.11 = 05622481ff951cdce6369a771ae1c7ac3a9a8241185cc1bb26cbdce7609a7058
+AdditionalInputB.11 = 3ca8ff7ce83ff9bd1e13f0a048bbbb07f3968193b3e842ed3b12d583b203a60a
+Output.11 = 7243fd41bb710525b1934a9a15e91bb7f48d044f449abb6bf8462a80ced8bff52febab1cf921c3624b112e56c34e09de2c8c4a0b281bf50085b2414be9a1515ee5990a430e61cd4e91c0e4c27910538aff996673d841c713461c68e66e7081dc55dde20428292198abec7f13da9990596e44882f271f239ef894ee72b056e4ecae1830a03fa49bcbc26d8ce07e80976ae7c0ec7f567d004a4047360fba84d47b82432502a685acc07cdbb487ac2d83205c84482bef7d65a121533451ff22eb41
+Entropy.12 = 70aa28a7f25d610abcf55bd2993d98ca26b3e17335a001007c3d6d3c82df5821
+Nonce.12 = 99183b198e03e79e0600da5e09485399
+AdditionalInputA.12 = dcede896405bbb26e6fef3569c894367d8878a1f092f516b568bfef6799c371a
+AdditionalInputB.12 = 3d73c345853ed5945da65e43513673f773e436be1aaa681f1678558bee65cf0a
+Output.12 = 12287cc2b1ae1e41cdcf74394fc6aa17277189a950b548f1c204df13bfb3ca3ea862cc6e145377e0a986030ac387a24580989ce8af650d3d17359649648323eccfe955d8c9c591480f27c670a00c01749c139c8307072ec484743be8dde791b0496d663cd4426bc6b6339b565be53b85b2be0bd3fdf498b61da7876c76a7d2d035c90ff7a2ed17a26e5bcdc498389fd319da44030c8a36f39d034179a5a82c3acf73d3c9ff9851ef80bb17e13f6abdb8713f04e7748b8ecf8a5af10e0f893e22
+Entropy.13 = 86038c7e900813e50d45e5280171a3a71a66405ff28608dfc4ca895c998bc04f
+Nonce.13 = ac58edbc686abde8c368b36a97690521
+AdditionalInputA.13 = 3fdd34967ac56776116576e467142c77f6bef74bcc8af8a368529f50a13e74d6
+AdditionalInputB.13 = 0f9aa920a18e305916bd0eee770a510728710dd7b78d9ff736fcdf682a1015b1
+Output.13 = a64bfbd4b9bce3773baf172cde3f68da426dd6e4ac8c806c0170e0d028913f4f55eeaf1b18ecf9748ff4f0d40fff963cdb2d4369ad4490d2222fb0991c138e117e2b6a0beb3aa7095796dcb58671772ae737ee5003b67403d6e7bbfb1f9b73e5eea81c229fb7898db28ada4314ec70ff7bf26aa5dc9d9e1fbd05698d35387386d70a9d1112e09b6f2004f645f650b97d44f7191f3cfc5d0385407d369331226754e6b17bc06dddad5aab80f20a9040f1f78ad3090de9e5315e8b59bba8302435
+Entropy.14 = 1514a977bebb10858a934df7cc34da90e283e3def25299f43e36025b92dfbd70
+Nonce.14 = 857a61b0cfa5c0fd647d6e8dd679bfb2
+AdditionalInputA.14 = b5d9cb4b3709adf297462f1aa8875c9f84bc39e323b8fe1c0df269344e5035ff
+AdditionalInputB.14 = 5e47728cc468e0d2c6b6a90a20f83a9f0565716af54844552988f1d8c3a83eb7
+Output.14 = 548c3496135ecfa1119098ea2d862d421af024a844c37a02142e2545e4ff1038f4b73c7f6b7d0fba8f92f292cf5ca8fd57dbe7ce129423e0ddeb1dffe89252dd6b50495c88f350bb77e08c8be409064f7e9cb751aeb779eae30b7c471dc41365f128d22474a7e90a9953e948642001f8e6ba8f91d250d8b4c6407892cd96b12e5d94e4d7608e6c11604357436c8d1cc07a21aeb58d396f413a31f72af1ac06864ba68c04e0c25971c1315f5a8c5c04fe252105fc822452d0cf66f86af13d613e
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 3d8c838b13b1a2ae1624200fb734273e99d7cfd1f5664ddc0219f843bb989ecd
+Nonce.0 = 86a712402f94e31a77c4ef90f62a63c1
+PersonalisationString.0 = ecf3b9deede92f0db083c357480e5aa35052f04e978a1244a7510db146d7fbc1
+Output.0 = 560c30e54c104655e740855b42ef4c1f1b4a4258b9b8848d872b983e95feaef1bf5b90d0ac269e68127296ca822f5df9db241326ebd6a7ba08c356884162551e396f2507107f1877a253d3ab772a9793e0cb568e7f0a8a66852f5085840c9df500be130dfbfeb4a5fc8b67b36511a865d4d5446a7e1dbb8e6370eefe8b3a7b19120198a423c3780608bdef537191b05cea2322eeb16b5e58e047cb647a2aec836f050f241f3135cde6d0ff9ad413c3420f13be4d410fb16f513af41e3dc7219f
+Entropy.1 = ce4ad450a33d1ed41710164acd23563a6a0bcd8aef890ddb5828537f15069e59
+Nonce.1 = cd09493ff51e749b4fe30f59fb4ad542
+PersonalisationString.1 = 0515e1a57e69ca196748176ddc4e3d2d36aa1976755fbc06d8874dd9debb36f7
+Output.1 = 41e75940f9b806fd1cccba476b0f6b9ed6197d38d5e8e1f37a9b9d2f595973381ac51764ce540dbc33223a69b8f8dec7af0ec55f073cfd938264576d92c16b1467af6ce9ca7bbfc08a017e5706beb658b921335f03d5b270decb19f51e73f4554487cca15dd4141f23c2642266798a71d6b07bc40a6bda8f1d3783f50ef5aa0b6d4ead3622c841fa01ec626982722890deca6ab049c3b2e275521af1ab59afb5c9d660fbfc03ade21f4a89403deb6de6f0e433ce2c1fc03f2d8bcef9d60127aa
+Entropy.2 = a245a692d7a3e240eee4f4ac059f213f7bb649d58ccfed3182968c62d39369e2
+Nonce.2 = 058ad8521a26ed89b55e47c737f1a4c7
+PersonalisationString.2 = 6811a882b926875a484853cdef9738c212ce0661fa63012968a14239ff411d89
+Output.2 = b3d0c6015d7c7341d324ac1a17be3ae63e9132f17c9a48db50a75a36f7562061079c716b0ba0f5ee6f82c404ebd0b6d9de0c1697ae261d7e0d4f9f43ed32665fd4e182dd813548682aafbddb92036dadac28667e474935ea5e221fa16716018c90ae60dda369b20676ff7f5bf0f130525c2b0dd8e467bd0dd4f62b0f69bd988284d539f1861d767874bb3ee2ea6211090de81f1687ada0152500474566d9abfac236535e4d6d6b2c39ebc79782c7134f56527744df5b32a44bda3432987914f2
+Entropy.3 = 9eafd49658cfd5a9873ab83282076677c8bd7ea1b3c9ca92181978824ae486d8
+Nonce.3 = cede47939738975ac2853ac07eb8a18e
+PersonalisationString.3 = 8272c97255b3dbbe53ecca41250013454b329e537b78c4af82562bcb00bc7e86
+Output.3 = 6a51b8fa6fb18fc3957c8f7f9828a216fde6f1a91b05d8030882dec9f4b37dbd5ec0f4cf9ba2ab27c9df0a65ab1e795ef830d13a1c89ea958d5dfcba302e34d72ec8435abadd874b9772ef3e53d297f63ae3f902b3df66b0aacd540207aeb772cf6a962ccc7280f90372efc036b20b829c6a6acbbc71bd078f6b2bffb37095333f551a7f6f68649c8334d7f673bd223fa00e2af7549a9289db8746ebcbaffd8bfb59b58b9455cf049a6e02a4b476ad5e6e7b8c891c6a8adc1a5a279d0f4ff5a8
+Entropy.4 = 58a28e11822bbe1a41e32a8be1d27e8de9668381c6969b4dcea864d70d7bc367
+Nonce.4 = 794a3f1067e30c754dc96102a436b9cc
+PersonalisationString.4 = 3347257112059266fb1a4359e8350479aec27b4116eb18699fd5495e4a3a166d
+Output.4 = 1f4a0091c2648cdf9d4be467edff582169a0b6b73da859015cebac9bd2200fdcc9b109b6b703b35c238ad1551ad4fb45bdc0b5dd4c4814158c1c7641b94e51539dbeb8261a818afa68fa5abdc50eb9e173472709e9686495d2072065963665df41b94a7a94ed0fbb5f9a6cb851a530e87b451ae39c59f437ed16ba324221935317f256055dd63b1631a1ca6d4e6e8915dd79b0250d83a3cfb117eb299cbe3c41f6708e27d62c8959df445453a1c8282f87cd9078104d9e2aa83d3c34b00eedc4
+Entropy.5 = 1c644ffa4e1561af95be8b59a4aff572bc345cf942f6e8c1ead6d2b35a39fe5f
+Nonce.5 = fef59f8881294588c486e6be0cd177f3
+PersonalisationString.5 = dd31fee7a712a0d422e9760dfee0b08e09bdc1a2b335620a7aa1bd520bc0ff57
+Output.5 = 4ec5f212b020ffc80182ec4c8766bb7ebe4b152c225303cb1e17ff6f3319af5bd6d78dd5c4b6a7bc3f457fc1bf73ace8a5d83d046d6964b9cd47102ca4139156595bac84043adb5b017db046504d7036f2c5430cd9a4496f60d041e1f11a08bb716dc53e861a18ac8547e5f1a93849d70d5c0098215b1b231a52f1ddd8cb1eefe6f746603caf5e9eedd35bc0c1139949039f725861a768c02708c4180c5c83d4488cb37fcfbafbda3c2764c3a9fd97280a9f2dbb285340c9001378b43df93d37
+Entropy.6 = 861ceb71a8bf4f9c972bcd4a0303c31c3839957d14f97fdfeb44ee3e8a6943ff
+Nonce.6 = ef359fa8a16d7ac5eaf8b705f8802166
+PersonalisationString.6 = 7759db318373f0b45ca5b569479be3dbbd44313bdcd1cf674dbdce501b5c5289
+Output.6 = 96b7fcdc5767af289128acaffcc46a7f0b40a2c661300563880065ec38009898d44ebfbe3dab1ded3768b5a13225b1a24f541ee5d8effae22be4df2d1c78b09fc087ce29808fb0cf3ff6638d03075e62100ce032d8e171bc742e9e67a60f4afb5e77c70376c52988cd5979ac3840bc432d63fbe8f783669c23007102bdc733b2fd39f3e26af0f9da035ffdb84d2d802a544457b7e762b490c1f2ee13b313f7861c6d666ea82425252ece54e9f82b06172fd1df73c78a37970a6ca9c5f34cef5a
+Entropy.7 = 8e6cfeb8efe01efa18f46c9cd2441f23869999ffd385470928e15f3aa00d4871
+Nonce.7 = b3a364dec4842609ce8b32ce50d66a61
+PersonalisationString.7 = 681a398b9a1b2ca78566f60bb39324cbfa82dd9194059c32f9ed3bed1e710513
+Output.7 = a6dd28b76f702ba30eeb580e753333ec6b5dc15295d7ebfd488274a07e73cb3a3c99fce2d51e84797466dcb9c8804ded9f7d1cbb912c18c2ca84ea18e2d527e6081c30460c2a6780ba09fd9721ab28a337960c9c8b923908617c8ee36baaa8cad6cde150fa31d201b164288378a221e95aa798155943d567f9e57eb0eef77c35d382c2d0453d46e9d5b8c537db0acb7fe1b0c890f9ed3248a171b8f96cf65e79e735f0abf6f63011506f0b596f89ff2de1d3a016a9aa92cbe2469304da4b4913
+Entropy.8 = 299acf476d2155f4374624a8ba35ef3103fa6e56cc3e2ed445cd90913a70da46
+Nonce.8 = 5310710dded27361c092b77cbd923a4d
+PersonalisationString.8 = 5bacb4ccfe5a822ca5e371eec873ee668427bbba80f30779c1b86b3e62a7e7df
+Output.8 = 661f5ecfaa8b55b344d7325c97d007a3b12b8a1b6d26c6ade00c1f9addd9220b6b978523bab0882c787a6cd8318d8d3a0f98a006092317f9d82a52da07eab0e1d3070c464df8d10a0d9827fb7e776e4cb2c8851a539fa44cfeb7d9c489e55107356a49c309fcbcfed9c10d084330f55d199fa9d9f9dd0d70dd4bdc0a9325351528174dbebb304c85e35a6214a261448d9000de9ee19c81e3e73715201b3880c89193bafef03cb4d7610ced9021dfdee8450e410eeb3105db27b98a8b77bcd4c9
+Entropy.9 = c7212588ee610d8a6966eeca406989c3c46ab0bac021baa07db4d2263f00fd26
+Nonce.9 = 1990f704b819461b247c77ce9b16201e
+PersonalisationString.9 = d06e1f51e9b5e6e657c44ac158039ac0629644000a460807ed5a6bb95c5cb8e5
+Output.9 = a8a625d9573e997a6bbd5cf720e23debb78943f8273460b9582e79b4243184101df5e3054c217fa3c105b0548a37f256668fcca3b4332c147891fcc9ea1f29119de2e4d1c2949c85f0fadd2bd3e8456455bf8b51d60e0d7f6464334475fc881645c10b8cfaed9f5c811e2b1d9cd2a49ae2555cbcd419b44508b569ea43f549ce9da27ade3947d3b6973653356281237311f0ce16e68935fd046c48275a7ba17de6409f6bb26678cb58fc12d8d71d47ddb6e03153eba2c063d46135ee762b27b9
+Entropy.10 = ca0e42da77a3a29b3cd9952f931ad932700df526e895389d5b25fb1147d03b05
+Nonce.10 = 8c9e53664bdd9b75330718e6379f3758
+PersonalisationString.10 = 0c25284a3f6306402bbc96f67449e0075a1437469ddf922db84df16f9be3e976
+Output.10 = 1607d57308a3c98ad91001667cbb5db626fb77eaa2dcdae8e1657e46d920d708f01d733814ca952685b18d972e62c8fc799e7a2e2e0262405505fbf5436287e125a6b19d4f7180cf5c3f96f211cbfab4627a1c7d8ff9f7534f79b22f3d3adcf4fac015974b4f982d81ead08f9d7d31d474294e8fe519d00d70c983d775ba4709fd283750c86458944435d2b8a5eaeb090995851c321939c3d8dacb69cbe374a0657817638dae1a1e950e7fd9f085cd1198900ef05607adb3f0f515417220ebe9
+Entropy.11 = c2d015ded06a0d382af18aadaaa67a91b56779e13786f530afa2a694913b5180
+Nonce.11 = 0e74ecdf06f0779e6868c7d0004ee3c4
+PersonalisationString.11 = c39d1fba53cc1e066676bbabcd1cfb941d2d9562991ae9fedad3aae98da0e61c
+Output.11 = 969e37a4609a25ff5f1cbdb98d526b47ddd966ebe5cbe94c50fcb7250db8649ebce6a9c61e9891a8935968eeefa92c7b11ee3565f672f3df8ca1c6c17fa9a0f13200775be4ce7cf76f40bb60ce2b2690901eae1ae4ab9b3c2a36039a5cd05ca8a942e44bc8c99b170f7f5cf442240dd4d59b7fd85ea6e4fbccac9cfca8a804bfcba19c9b289157550948885014bcaeb289e023b8dedae477d3a02f2d95f07a54933c0cae71c516a74c783bcc268d2bba56fc58de91ba8c834de2a075a77ef0c7
+Entropy.12 = 3d968a89b6944455c45a0edbe57e5c26a1b7cd4c1c0703b5b0fd49ca9b767255
+Nonce.12 = b402078ae154a901061d1a0ea45af2c8
+PersonalisationString.12 = eba3ff1115cbef18d89fa59a112c2e31870207201a2719edf63ad55295c10373
+Output.12 = da7f439008741250e7525f61e1e980d662fdf3c396062de34d77d08b4b8fc5beccf0584875255647e0ad95a215c1293309068a2efd9bb13245e5baa1ac5cdb2b143a94e8853972fc9de5567794d8940b01d06407700b5dd1f498a05093029c56fa62e825597d7a25d1d6fba75a3d6254d2e759a2493468b7c402cf42e0e94b5ea8ab58e30e5d1594ab00145c65ec6c0ec2b535b81e2250cfb97f51a89f8d61faf0008151204a3e7521c21fe82901f5aab457d0f1f5456dd6e0cdd4bd96968b1b
+Entropy.13 = 912ee739f45caadd545abfdcca38f8b328ed1b08e28935ffad84ebb2450c4646
+Nonce.13 = cdbff46667365d6e74e5b32004114ec6
+PersonalisationString.13 = 0c64323183aee41ece9cfb9aa5fef5767fe42242658173b339c5b8bca1b94a0d
+Output.13 = ee116564835e608ffd776fb64056ab138e5f59f36b801c3d4ca900fde853c317641d60bb693ebda975fac51f652ef4d4f2c20c059cc5466e5279a235f7018243f86fa1e6b649661c84c9e58a876d31be278a50ee9c2de361cabaa1c3a7e085e023ff3623a7a689c8bceec13324a161669d258abf728e2c557753d26697327dd827af827543e50419909a5a95e214219d1115ee4d85bea60e89c7e3c15ef2e45c417020a0a28d5b1da139edfdc238bdf473fb16d1bb03d609f8de4a93c6b96f9e
+Entropy.14 = 3a4e2cca3a98a1ae21ae00c5a2c8a68cbc11f5130fd9a88302fe9df9c4612c0c
+Nonce.14 = d28f752f6e466e3fd9595fd380fa14b6
+PersonalisationString.14 = 232727310fdaac541b182497e5240dc2623a36b4efa7a912ab3ffaf9939c2336
+Output.14 = 3bc26201261930bf3dc164d25287e41efb47c07c8c5c0adf3e86613435df202116331cfccd4e07c9ef008c62d4199d937221a17dc97be2043270ecc605d3d48c609cbce3aecba3557dddb304f440250b2c9fd78838483e2d5a2b22015b97869b891f9e42afe21df5fbb8dfc9061468c70c63a14b6dcad9ccdeced41d021dc0ff47821415e8793d34377258d9d6629b9e396b9d6b8bb7fc22e03ecfd4890d16912001cb7ed002e33a595052ddf7b991c5607ab93c220b2122783d51a8372a223d
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 9c4a7f1cee91c735a698c2ee8b32f025086a03ef762c0bf29cfcdfd290240904
+Nonce.0 = 4cc38e77f47c469ef0518c03d93a521a
+PersonalisationString.0 = 043cde6d441c20b48d8493455f3b963edb5dc42cfca9bc9dc097b0da059ac135
+AdditionalInputA.0 = 4befb6b5fd63e30baaee6d29aa0049fca44802d241044e61f25a0f9f1132b038
+AdditionalInputB.0 = 17466d9beaea6732e199fb1a2f48020f0e804a45211c200dc500db6b51f90bba
+Output.0 = f488c60714f020b01b820fd5f7b8e7b908734a17100e100daf7f3e81dea708308056aecde94ba9a9eb5303ebe45427ca928522b0bc1ca8525eacb525fdcbbb8aa7632d119f740a5a5abd77529dcd0f555bf50e59a24b855e180adb6fe382d737fc76fec081b98081106932e1f64aaae912a69f5370dc287f09ce53c3de2c0a71fdf6c3fcf0baf241b68063bc13d6ed8fb2ec1687016c68acef80b48e98be7a35b92c199685784e444ab6e7a233d611e764112ef6806be22cfafb94341e79fc15
+Entropy.1 = 8e37c709efa3a8adcc433babdcae3bddf0d3beecd933af87c66eee45386024ff
+Nonce.1 = 11f327a64d39084283bc1ad8a0376181
+PersonalisationString.1 = 8b72244a0e189cbbaa8cfc19c8a72a8285ee4e33f3a3f15fd537392fb093287a
+AdditionalInputA.1 = baef5972f9ed48597a94aae8869db4affcc34c3219e46c7f733d282a2496f00e
+AdditionalInputB.1 = e3758dd41c305049b5e272a6add3cb26b7ee9417f8d74e330095f0bb5b33928d
+Output.1 = 9fb95381bfb55c0d0585fd2e75fda22ad43bfb0996186b3a89c70c8addad4fa6b1a5bb2c4fa50bb897604d8f4ea10be851d4fed5d43765a5d68a8216d2b6d0c41b480fc415f5bf0e2adce910ab6cfdcafb8c62ce73af7827d49eda5913dbcabb502a23b025867310f426d67957aa096c8e9b97e41f0974a2ac1c5495dd1028fce7f953d12f4601a298b1923e88ba4f3eb3dd3e5212f770efec82f84bae5b7befaf00f6fad747c878d22168295569ec1dda8ca49a2ed33c6f9eddb389f8d412c8
+Entropy.2 = e33188a0ff90b430fe56051f94dfc6ee84037f82ee3c422a8f7194eba1c2926b
+Nonce.2 = b629040f73d845ab33d092e5d954a75b
+PersonalisationString.2 = 8f996ebdac1611d632643a44e2d9b5603463746ac2e678b708406f6cd96f8bd4
+AdditionalInputA.2 = 810f71490df34b6d0f4816f285e21a43e6b55f43876268603cc3812374766e36
+AdditionalInputB.2 = ed26329e514d5c8c740cf05c3bddf88608bdb7953f01ce8f00a9e9a06bc13b60
+Output.2 = f9a8b3f0e16882d7ecd7b979a85ef4f8ccfc19c2b3eec990e5b65d5610fe8efd1debcdb5b7cffc4a92aeac9c5a11dce67ed391e7ce2e9da632be84fb203bddcb63de2f1036620ffe5ec6e85b4551c366539b6e4416f7a1d44f91adcb07807df47730022a7f6d124cafbc774b300f0964eab2a9ea058285d9f9f6af16cd3a6b920f3ab85a12b48ddb42593f2cae56582edd3e3cf413192dc21a3f20d1c1fbeda89b785ac89cfe1fd10219604406f05edd07cea23ed814c75bbb91426f5599a808
+Entropy.3 = 6da45724992ba90085a0986b24d6fe1ef77f0712ee7cc830ee69ae2d733c56d2
+Nonce.3 = 04d161e1881b09a555eff91d2185beae
+PersonalisationString.3 = 9a60291fe9f320e96c873023a47a831de3984a6410295d558001889b17565cd9
+AdditionalInputA.3 = 9ec3b7ee3c743e64f0f673e54782ef59dba6a6ca52078cde70da7ace645fb01f
+AdditionalInputB.3 = 529a343cf84e2af344301e314e0e766ddcb13daafb3f7a73534996f85b5f462c
+Output.3 = f725650dc59584cd6ee04eb233d3771ff8177c2532977521de3218fb545b84b21726984b72586b00c087b79fdf9e8dc26f689354ff4f1d2dd7b42ae8d9c04d815a5fc7d8b6785e01b10b9f43750374692924783138b54a7252b9a6d741dba653235aba45674ee0dafd15b6a203aa6cfc048b5ac0b4313b3b7ec17fb9fae9bfc9bd17344c6e7b98816845fb9597bfcd6e8d40f01ca91d87e50a2cdd2e14f81f3de2ea115141fea030b47a98e21aca914068e38191389a94155d7708f6aa5f4111
+Entropy.4 = e9985ccbed72b91cbb5e1a46400ed033a7085c1c52579ffec223a768c7fbaba4
+Nonce.4 = db103f830eb174734584331f9690bf7c
+PersonalisationString.4 = d048bbd7f144d4aabff87d2cb547dbcfb5ac0ed73ec7cb017e238904ed958f3b
+AdditionalInputA.4 = 60faf7cb810a746eeaeb28ce7baddef8e0fa4954e965ceebbad5008927563f74
+AdditionalInputB.4 = 916e8c9e766df6f458f0d81b38992e490199a770795af2853449d825a18b178a
+Output.4 = 8953e8f8afbddf4c41ebcffd943375a7bd525db5bb586a1d3862e8163b6293fe267f044c887586dd031db36e4a941c6d9b4bad5e15110c488a84b8dba638456269e7a08686611ddafaf7fc1c766a4f46174c2895dfe87e594592a9edf27ab67cb781b12b2692aea11cbb150bf5496e533956e503e1293186cea536cbb3dcd4b50efed5020a6668c7f66755df83e29e83d08dd404d87576be26b8490dd681888d3ad9270e589b8fc583261b734fd16224cece0927f27d103a508354e1140ffcad
+Entropy.5 = 6ab09ff6979841bfdd77d233a6aded9581956458c0c2effea998cb3563b9e13f
+Nonce.5 = 7ec8b20fb3fbe33784d1320237718cfd
+PersonalisationString.5 = 4de40daf7a43aaf1c132529f5605f97951538c739bda59125c1902b36a7afbf2
+AdditionalInputA.5 = af4c8130e8193b4d23c0f3ef11621a285eb8ec119801282d6e455e1a485bd2f6
+AdditionalInputB.5 = 52ce2a212ab940fcaae1edf647da13872af620a1d8af9ae32f8d6603a9a11a56
+Output.5 = b4364042f2a28b353dab347bd81bee069a00e003f2159ac5e9da6c9b05d535e829fdfb3788d448757e036541686a5248b79fb04fe37c362ccc19096066804d8952357606d357712dc9a6e15c57736befa4208c41ddc1ceef236efdb06e423c020be96baf5aeb35f94f13d363e0ce936b193861d8d4bd026907835278ec86dc970e81f0c46f795599f80694d691a691fc4636a7264d38b7b65d3dd36b313345cca89a62361af1bb6c91eb71734ce572a30978f6774020bcb26dd2cae8daf15659
+Entropy.6 = 661b65402f7556733dea9b83adc0ed0c21d66f3eab84647daaeba7530f27bac7
+Nonce.6 = 31db85561ddc9a0647b2da0fb3668a80
+PersonalisationString.6 = b7afef14b800513eff5cba58038702aaf3224d75943f8fb888f74e45622dc2dc
+AdditionalInputA.6 = 13e0bebca5f99716736b6beb7523ca84f3f5ba0c405bd20d490dc7080db3afd4
+AdditionalInputB.6 = b478a3daf7687405a0e20c8280bed3c14b230f1d4dd0e9472c948ac2246c4340
+Output.6 = f4bceed43662ac668c5cbc6a9c3d0bd44d50ee9bf8fe2668c487d5e4425ffc3db0e660f891e4f9883b841cbf036d25d533dbbbbfa01ac4d190b54fe35f585d85da386ba02be022e93e71c7de875ca2e769c2b324a2d63282b9c1d6ee2d95394b11d1391dc05f1120d16d4aa262241058b7fb6c873779b4d632573b307752b984cdddf5f3e9e789a10e58b874e64da23323d7e731b41ae980f9c11ae45fb6ea317a42af759fd8fdbcff2d34d2605fbd2901af4e3fa321ef0bd53e18b849f21180
+Entropy.7 = 4b0e29719bd4223673262342caa1ea6b1e18a600f91bb39fd2e77e0d96e57b62
+Nonce.7 = d5ba0066f547e0c5363e287ecd8fba42
+PersonalisationString.7 = 9f540579b05abd904f5d75c0e8921e6dadabb5a0e44db560a7f03820d5a7eb1c
+AdditionalInputA.7 = 6bb7571dca82cfdf45a5edaffb993adebed53f206990cd898e16261c8bd95a6e
+AdditionalInputB.7 = 2510cb7fe7ef4cf7c69e9c396afa35dcfa97ab8960e3f795b91a0d8a4f8561ae
+Output.7 = 9ea14969c373ba4190f7e6a95f9b73c9a009074d4d81f82be5af6d6ad49a572a8850b86f93efa6f06c79449c1411297c17921fc95d7188beb5ce6096c8fb0a515edd7ef32a0bbc2f372484525e6c6a51045cf068a3519811f4cc7d6ee5a3bc339d2d1b2c550455538dc3afc3e9b3ef85927dde4a968212265596285a40e5160e65e08b842c3f9e82e28d0e594c33ece7455688da678d7be395df515971732e22483656fb57f30d0915542d6a99758d797471d9b1da999aadd8af26efe57389f0
+Entropy.8 = eaee806076cfe84c6c5fda80fcfcc92f09431977685027c64953ce523bedefa6
+Nonce.8 = c5eb6526b3b2e6b640370be7987c520b
+PersonalisationString.8 = 60ddf3ac0890b0180ff2924f310662c7ba73ec2051af65fca86918c15e3b2d05
+AdditionalInputA.8 = eb13346d00f34e8e8b25db172ea8efd0e7927019fb30af33d6d4b52b582a0cee
+AdditionalInputB.8 = fd44e8f382296eb8c17ccbcc2edccbf12bd162d052bc1bcbf9199332d1047b27
+Output.8 = a235e1b8ce4a8d1dfc20e148641039e389485417a0ed2d712cf901a2b578a762a2ce58af3b30073f9ecad3c813bd585c9b8888c94dd6dca085dc71d8ebccf4b7388e360bb1772b09ff380fc517ba980f40788b3725a402ee229b66b76d9c48db098bedec0410e2223549659049700e363f8612bdda67de18c58f4679f8d5af022a7bfd24449a926a3ec4e4dab532a88e3a1932804713fe00f2eda4c652d18e861cc65fe4ecd90d252e4d884650e9a3be5a75ac6953434dde523a4971f2596046
+Entropy.9 = 8005d9db2b56ed36b3dee590f01ca83d2755097f2afe47fc8e7842a74d440660
+Nonce.9 = 0920c9b95399a51261c62656c60bd782
+PersonalisationString.9 = 09aa3cc1f3a5600bd324bf452cd2a902a49094733d963ddfb78eaadb96805a73
+AdditionalInputA.9 = e26ef8542413fe828876ba76efb14134409e5f70fc76c9b4c80c0b258d3f7257
+AdditionalInputB.9 = b02e484a10b5d1ca640d64bcb07d094bb8d47efd2efea25658a12c10ef5e8dbc
+Output.9 = f81392b0795df1bc3d0955f231d3d64044bf13007ce022fd64f903d923fc1c720572f111d6cae234a19830086558e82d2e0162f6ba80f26271936bed9298228da55a25dab03a8c92db0caf38350fea839671354006ed73ab84cb6967e0935e6dd06debaec6f883927bd00e371d1e1130c9e7b380429bee2663b35435c4fcbc3695c6b06071e83537f819e1baee8f9dc3c49af49f2e2897bda7a5731a40eefc775f99a2e8e1164e4bc6b26b0f84a9f9114a5556a13bf706722f2d2ce90f469550
+Entropy.10 = e326266e50f1e304eadd0c2e3dd81db72a32fc9437ef8e0fc2b77f6058f20699
+Nonce.10 = 2ef476d1bc540ff6724fcd92ebe5d55f
+PersonalisationString.10 = a389dfa175e7531c21b211deaedca81de96de398b7b31e22781682e5f3976198
+AdditionalInputA.10 = 30ec0a026fb30795c49bea9978492b6d38af22ef0e0464dfeb2eef8579c52ec7
+AdditionalInputB.10 = 8abfcf6f0a4104e39acbbc0be07e6dccbb820812b2fdea977e033815433eabeb
+Output.10 = 2d8a21901671b78eaeadb3d876ac0408aa43a373ac49629ed82705632cfd9cae9c934fe49a658c0d83ba27b803398cc1cec7cc55c68fda6b472430ae614f3f256c8b09a904899cd8ea8dbd5d2686c28f91c904349581071f56a3d34b7f4a24fa21e9327309e96bdb6b40240bb90080a124aadaa7d63299c189bd45f0b2752c4d3dd9716ed9ed1ac33c99db39470c98b30ba36404b1248f31986411ca500257cfa8cebe6eeb1f80cff0c2f3940f86c443de1ded1f268707ebdea39bc7bf839efa
+Entropy.11 = 0a5805548a372be592deebe0ce7b2d60faaf64a881467c2c736087b0f5646d33
+Nonce.11 = daa36d9cd46c6a56e4c4e660add04f92
+PersonalisationString.11 = 9540828f07a3e41c9fe311cfaa0ce1061f2feb5d7fa26332779551051290a878
+AdditionalInputA.11 = d0aa198e0f628d12433f928f3ea098bec8d1cc1ebccebf7bfc5f5bcfa7598192
+AdditionalInputB.11 = 93e8c30b320417e8365d77f14b955a5fb66e01718b715001faa0cf2e7e20317e
+Output.11 = ca7d9cfc9bfbe3c2bd778ad41af45165b51f4df197d66935d91c87eb4f6967af68ed8f216122a5efa693c4487996a99022ca38e4cc3e5ff51381f1e9e5454dd82cb18f444bdf7230c7fbf070147e353db51db91a66e4801b1f88e7d0da3ef86083b6c488a154146b57e1c14d6e9d694f3b2729eb557ec3729c18fab731d0f06aa1004f500ae5d07405f9fd0e1ef034dd45e30f60ff651876c1a5ef6a3565e5ec8a307827c0678dfd21998373df08f403437aa1ea60a505c291b965157aff4064
+Entropy.12 = 81fa7898cbb2de53b18834ce7defa42cd33be876a67dd9a9ff7e9c94d05b16a5
+Nonce.12 = 889292012ecd0512ec6a34a0463ee256
+PersonalisationString.12 = 76e142c7e33baefab8adeeada934e33c369b518e8c1e65502b8df5e05aa5de77
+AdditionalInputA.12 = 327f07aaaf092fbc83225624f3f35efee19eabe6171a8ea6af80b405134c2d55
+AdditionalInputB.12 = e4e4678588af6440b15f37a4952761c5c8c1dd1f6028ae8bbe5c73b8f7b4e7b4
+Output.12 = b1f4cac331eb1b35e53f134b868b2ebd317df782bbb438f9d62c822914b6a51a186683fab33773054f203d8647efa86ef88a1c925fd1525f47014c02747c2e3547791343c407a85c8fdcead5687345dde7c5cf0afb1c88eb65375199e1b28758bb47eece3edd2bc8dcdfabd227b3785fd113ec7111c1787786e208f1411dbe46edc1fb9647dbd419c814c339935ebcc202bcb440864848c7d0c176f89f848c59c4f7b0e2e9ce602fc0ca9dbbfb4341425eef29c8bfe29bf6b7b1648c6b52cb2b
+Entropy.13 = 1c34b5eb2e2f4cf4907366e590f05a5c6b53c1ce978f3089c50374ee4e80c66d
+Nonce.13 = aa0a92fb97e78f86f8ed296e50439ac1
+PersonalisationString.13 = ce60f571a5a7fea463773a721814dc779d9ad5453bb4821f25ac8209dad5f733
+AdditionalInputA.13 = 46992edaec1bc3f258c6f5c905c692d5db2e09087678cd849ce3bfa13ea822cf
+AdditionalInputB.13 = ebcbec558476020faa67a7657d5311e2276dfa18c6b5e974688cc8d32634e0e7
+Output.13 = 43b5ab88a780c1b271b50dd3f01e6d2f5f48d202d2c3d327d7e43f8c8e43dcd54e75ea4e036cdb5c1fd731f680bd755a0d5a6eaeb46a53a9a376da0b9540bc309f0c420e243c1672da4e5d7afcfe19989e3877b87e86c6f470519129f582f53e70f7df0206f4f84d5295932fcb89d71c474e0c33d00afd6d15c4e87e1e307fc9095bcff1a0fd843bf9d2e9ccdf0e4a4c74b06d464f4d5d37e87da95d3162c2acf07fef59bca3016ba34eb7ba95a3ae30a16f3ea979e0533e8d3ae811230494ce
+Entropy.14 = ae4ac3569dd6295316b275c0207514b791ac1524a8def8187d38cb3a9fd57394
+Nonce.14 = fcce28e19fe0194a146a08a4585e2dc4
+PersonalisationString.14 = 2f44c809f5f7ac6ccc7d47e6f05e7bcb7e176bf5e00a5b51178d1c94b23d1415
+AdditionalInputA.14 = 50ceb01860d60ed119f101d5c573b5db00402dbb03885a09e8d326156fa180a3
+AdditionalInputB.14 = 01e09092bc892916c29f7b515823f244d147d4b16976cebd6a76a37ef6e62998
+Output.14 = 6f1379c44d8131924c9a78286e80ebb34604ad78b531e795cc30c4f0aee422e4052f201ba226bc0c2aa3ec341fcbb5a87e24b91c36be7dda62addba6960df1289372e9677ce030555a9bd1691f559b8ff787dafa35cff5dfd66a2abd83f81552a82ba6ca7d21c438483e60fd77f93bc109f5be802035412c2af2873f5cb186b77dc055c0e0b27b16b1ef37de0b81fe63c4074a7cc8c3d27f71a992b5468351ef8b84a7b3e8f12458ff670d1381d879feeb1cd3b93436580c86bc2c33f27448d4
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 1c18486f4e6dfbbb1c0957e0847fae335543ed5372e246d9b570e636eac32483
+Nonce.0 = 03b567b8344c6bf6e0eefd978f8871c1
+Output.0 = 12a3f6b00d380b795f375dc6c7b4732c1bc0e6e4936e58f4a8542c6b3fd37f3071d3741b53c3019022dddbd662deba2c6eee15c1424dc17890c872db84f44f3434574e5ce78fd5bf4eff394e3ea46a51eb10b0f70884071a740f554145032a98550491b5f947dcd28f0117a477465c1f0d678ff1ea9a1e183690937400659a6d01b6ab1feabf8e50ba88572ec16f15504272650c344ef9c55b8ef35f5212ac27c8af7fbe0cf2b54ebc277282867945d1a6b3f15e50c63dd70c724de6bc36b359
+Entropy.1 = 700f47567c8fb2d678e2f6278ee7523718ed22009fc63f45c815b5be4adb99a7
+Nonce.1 = 44f50596081eca8f134f4e6b0b9e1216
+Output.1 = e0bb2784066bf4a178149510b11a95f6e9c1e53a4e84220c81d7ed36c4e83475b145f9c4eda65c40d811200ad47bf9ae6c28388565df70761fe3d738335a1ca1839a130abdc31ca771cf76b79a17083f4eab6d36b66a54162caa810172e7d67a28d838de92eaf44f6dc41bc02b6d57b00ca9319c98397faa8912e229de7cba69011a73bfe7610e367d5fe9eb11608988c9b002f23e143b9f99e83d86aab7c3a0dacf6fa02dfa0dc397f2dd2bf7f656015b1ed10005922b36643b3d4ea2ed608e
+Entropy.2 = ea21baee5676e92d793a916b49156e0e24f4c06b1c20e754d15bd2b98b3afa13
+Nonce.2 = 984b4c6c4cced8495caf74c5866aa10e
+Output.2 = 40e3bb79f2f3f76a29cd019cd1cd3d1d44a2cbe4da25a7c06dfa3f8905e272c0ef80b0cf2430cd7c7f0b182d447449701b80f840ba09c9ce4575588575948b1be930d8e44b0979136f09424ddb4858a01c0b8845c1a26b8f7c1a1cff4e2cb0eb6eb22f6fcac07f641535481dfab9080cb9306dd80f0e1f63909e8cf23b5bdc70e93ed1be4bb5673cf71b0d830ffe4702c86c523bf51ef9a6881f9af8f606e320fc36dc73c163b6fbb52d0b094f94b38cb48578a793915828d47f2780653eaec8
+Entropy.3 = fe8b2f044f52fc0f068fe93aa6f4024b6820c29020f7ea7b1ce96e3c814b6a9c
+Nonce.3 = ca88bdebede91d024c45058a6f921445
+Output.3 = 0350b4be4eb2309e4cef8f2890b76f6a6c5e96ec53494612d0a079a52e795453761653a73cb149b08686ecf20326d185f8478ca5b5d73eb3ec495267ad7c35a78fd424b1ded656e69db2175d03edc601185876b9451c48c39417c2dfc19aaa7dff60c6a74db52ebb5960879400400451ef7d9b3406d822ed340f576f89e4c72b484161031947f284cb0c87730adea276eaa877cf0c4df3d198c20953c5c2ee9befdc51ee9817949beb339d37ab21e73ac61b4b276592ae08fad37b43c67fd785
+Entropy.4 = 8818518f921df409f6f0fa1404b988b4d883ab5837cc6b8686b8b48783b15f7c
+Nonce.4 = 6602439de339c11b7dc013ffbeccec11
+Output.4 = 98744227792c825a927a713a72caa1d94b26c6f3a52fbb9486fc39325ca021215815def57d17097b4fcd834b31ddd2cd88b38e81fef5f5ce2d57efd23043160467ed2e36a3504b1b316f6254665b5af9765e3d05ed01c2accdf573dd6bb97d193c99269da8ba7e338b0cc22a26b4725feea2411f77a13e12eb405aab939aef7681874cc02f3f024344ee6c340a6ce7357f54a76eab994de912ea25348d63104569f36ce63f1d9611824d08b7dc1191c23df88d6ab61ddf3e74fceacd13771820
+Entropy.5 = 327a439db3e8fac78c5c4dba3da6bb267d4876ab84f07b00b86e66e5107a186b
+Nonce.5 = 0249ace151b41111042dd74dfecc2f10
+Output.5 = 86c687e5bfe842bdc1ad283c3c7c1a60b3980a0e9ce9eb9980e717b19c4fbbd561b77367234698f8e1b89b098f1d602470491642ed716d3140f08e44c0bfd953e720b532ed60281b8360dc68028d70947ff25464f3bfc19b82fb3406c7c3b15c3e59e624501c5c085f80cfeb739433b8384a333fb68ed40ef6760e5a9370fbccdffe565226b9df4f59b28f277a5e40de20b51be8d4d1f3399e1764629eaee6e5b6d162780043e3d5b4f0d73bdffb11c222616e932fd80f16c359617774304e70
+Entropy.6 = 83922a8bd65ac85978008f4afa5e73451daf787d5ca34c080e6e683f0fc9f456
+Nonce.6 = e722cd83333f3741691953d7b566f4f3
+Output.6 = 0a2412287f1fc5f1b9126cb5dc82ee7d996301578b60b5cc390a2fd6ef77b09216ef42b60b2cf1d7dafb34d6ece8efa735674fbf9bf2e8ed611bc53ceec23550241514fcb5954270fd37a1b468779265a60346a7cb431cef6ce72f7ddf5c55e387aa7dc29d66bad2e26986edd4d959696a408a9986b1e53c84ca1a2fe3eb3a4e517e662eb12a3cde9325e2543842ee4f1c9cd65b07b2304e305b5c8e0c1dbd7d1c7a6bf962751b7aaf706592b9fefedbf3fbd888596cb8d50d0f04a8040a7bd3
+Entropy.7 = ea8989f5b43902e20288c438c2cd35bef2e4dd207bbec3d2015e70b9b5524ad1
+Nonce.7 = 2bf759438a5d451ff19422845735c736
+Output.7 = 44d5a315d0a0d51917335a71cc9283e36aed8d00bf944a108873d709d9dfb57efdd47d2a17f1b81530fcd871e2dd30742913c447ce95e076b64baefbbf3f9ba86399869a4fb6331ffe7d317244f6be0788dd520f0f9028b01debdef53fff9b9af2116d227c447e9dc3da1d1393741d6404c5ba7121f777bd3876b791183164acb32d8c33667b5e5bec5d987baebb28df3192859d83ed2ceffbf74ee7ab97762c90a7cd17c5c7cfc1fb22bba009e84cab3d59bc7ca9b19f467aeb12f58736bc02
+Entropy.8 = 4e38b53df75dcc50b95f36e41bd5a24dcd9aadc980c64e68386fd86294bda3a6
+Nonce.8 = 7bc745a77981fbdf7500218754d62660
+Output.8 = e10ea6a3b1bde7bc1a301c81e3d016e189dd7729780239742bbd93b3c982ba3db093d9e8335e7d5ec632c98ce0654d0071442099f8fbeaf9d0ed46e151eab5b9da788d0b89fbb348bdba41eb635c10cd6b73b2f5433708193d73d691b849b1475c7c74548b6a5de08d1456e2ad813b0ae57faec646d51609d6c486c15f0ff18090d94cf9a6999895c24aa09546422d7d2e8cd739b08bcd605fb709884e06359d72f01c47d258b975232ba2528abfe8f28f36204a0a14507b4accf57836e9a722
+Entropy.9 = b8f78540c699f13b00312eea671a91a37ed28905f3196b1ed4a1e494f3ec3693
+Nonce.9 = 6b85ef4eec4c39c65d8b90cdf0ff1960
+Output.9 = ec4bd7958166f008e197e743f5e6a831f97e402bac958ac5e40508c33a51a6463af1a76119ec82c4ba7a1689d3f7cc9544f231a4a6b034e96911a62f005deda1104619d7e96694c0ca68aa8624cc3a577f798ad8f0d20ba4842fcc8ba90ce708413e183654387e99c20172e4aec8faaa504fd53c8d8064e97187917efa51494b1a7738a135d7cffe390a31b11d78845f7871b5ff2de7f0d2c1f249a66b4fcf51db7654fe4f8393f7641d9bad2609ba6a0e7ed6212d33b92e742588db5a07cc99
+Entropy.10 = 784d53c3bc40b4338d3fdf294306e8f53170d60512aaac21a7fd67caa9369be6
+Nonce.10 = 9326d079e84cc1a48868bf8791416aa8
+Output.10 = b9e624193d5aee01d00e3a48612c75a8a51bc1c7bd1e487ab8dcc926b7683beda0ccdebfbf67542099bf88c0257292580153fa7cd4a42d680260922655307199b4f3130a2a79b5b1eae59b01b8adaa744d3f5fb21ae2edb469d58288388f31043e80b19ed16f205426397545ac88c570e795e2e88ca797283f898252dc80dd89c31f34cb08a3de620107e3d103347d25e27d0dabfc2d3a2aefa3a2481d30bedd9e3f1c92f6526a1d47faad3a3af5b4ffba9ab4113cf893461fb5d9aff730b9f3
+Entropy.11 = 7be3e68883ac15c82bc8c38bd93b79c0af39d0cd23c2095eb026c4a6d360befa
+Nonce.11 = 44bcb78f61a5e7c32706bbaf2ad6711f
+Output.11 = 1b1c30249a3b3758237e31243323f65ea7997579eea6d839b65f35797b754a34845939879c7840eec536ae328ee5e8e3876cc0b0ef412fb74ad98d6d987bc9cce8389c2e5adf5fd1f1c8f2314f9fa1ee05d6cf3232c391cd8ff8d3a08cedf1cb52988ffe58c2e7310ffa807fe97468ba9a9ca8e32d3fa0fa0adf62419a22300a3f2db66238f564457d0135d404f239752e650059177840b33b6b77a4de422320e58d195e5cca9e41c753e7be6c8b525efc447e7546bd19e91a387ccb0aa6f665
+Entropy.12 = 8c7fdf4b71829495d5de18adf6823107e0e743462e77b7cf48bdc9be0524f1d3
+Nonce.12 = 70a13ed80e2480107c2c5bced30e4d90
+Output.12 = a9990b3ab01338e03de3188a4abc84f2ebb65ac8cb1c57d263eebe5a56607e552947bc756bc036e4826f89daca5851ff7322db9e8135a1e2ebbfd206f67ba43e059a32f75358b7402ce12b4c377c750acc5598aa8721b6ef2413c2295c10c3a84cff68c6250ae0eed541e20f420d2c46fc5928efd526ce19fef408304723a54cad2f40e97c5ff93f41fa6dd8114499c0db409cb70acd58404a6f02e5a9004d6dc062db2895ed14285a3f972cc6f4f611348d434387e0e937e4b7beda8a3bbb20
+Entropy.13 = c32ac6afd0c780418d98420990bcdf63e80e5bcbd5c9f79f91695d031f9fee22
+Nonce.13 = 7d66b3d83ae22021f383d0b19d6eb52b
+Output.13 = 606e2a9b9bc568afbda558856cc305acbbc1a99d0087df4dec2d1cf8cada9596c0276b19a4e48f7ad83f45fcc995e4647de927c0002e9117e44308bd20d62275a74f2bb0d9c2f1c83fdd999039f21d073cdf0a368bb963b86d0fbc478bd860dbfc10e54d121efbe2f08853e7c7628ec7d8c97289529088fcab8404ba0c657480f7c581dea23fa172b05e389182ff3bf434b230306fa451e67fcc122b32586f0f8ff3b6e3a7cc9c060f917a96a59c6fc270f654e8500f6e5ef84c8a47c296bd42
+Entropy.14 = 57050c5fe58b2a2a0eba0d3b9c08a9b285e1180d2a297e0a9ad20740c6fa9f00
+Nonce.14 = fc309209936c569a1367d45b212a9a50
+Output.14 = 288668476b39814edbce5ed91951cec398ba2dc3bad76048df5fb1a2a680519c217ec4d57adc0251e1f8892a866b142e0953353bc2dd207aa2703f81814d26a60daedfe94d97de6043ed5f3bd957b7516681827f7a36d1b2a87b692c67aba050bc38b5e84f65f07d70cc34549f01aa390c5fc8dd01304fee7378e62549738e3f710ee6a4e32db3f472e1c2ef1e803e57a8ea992f389f0823c922bcea8b00ab844e071579170baae90839ffd5e00844ec343b02db090847cd323f8a68f0dce64e
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = b86bf722bea4cefde43ca6bfdefdb01d171282049024692f4b34d423a9f89225
+Nonce.0 = 133a73e70733a68a3be1a0035540c3d9
+AdditionalInputA.0 = 87c1d165b3978619b7de30e5b7bb85127af50ec6ecd03e7ef7f2568e83692e4a
+AdditionalInputB.0 = 509f071cae9902d6a01a0f7c69582e4b683f74fc53fee94d07901fed8af026c8
+Output.0 = 64d9821c6bd450e1f8cfef31d06b9a9c8c666b3b6ede62fb35267334d59a24da2f8ce4eb863c5119a7104443a1e9e22b1d7b37b7d672797fe87a6b228813c7faf21bc5c1cd23584d05c19c93b8ac755d5444fc5c85e37de4aecb73eda4a947261f5141253c369fa2d1a7298631ea60567a6c93ffd95b017d0be5dc4c99aa5a33be2273f8552c20dbd313ab60f53bcf17569303f6930b83fac947984dd82b23c612df58b5d62b98340d54b071d6a22b42b7fac93be3ac810db659e8110812c0b9
+Entropy.1 = e58a82e5300f366c0c56afd704f666177194632c024653a6c39fd78e14f43edd
+Nonce.1 = 7872fd68197ba366520c3a50b60f74d4
+AdditionalInputA.1 = 9494ef44d55aa8502e12cc24ef2658091bcb3a15850b25367007c7e6c04d0ee1
+AdditionalInputB.1 = 559a4b4fec44538947a45abef2b55a21ad7f5b9188681a1b308693916594f5f3
+Output.1 = 280be8ff72f15ef75de01f605c83e45a36c0cab3a8efae98453d291a297e8b26473864472e1697832d2e1129d76f6240927c747094ca2f8bc653d2988c31ace8822d3656f5e513288e874c25695237fc6fc7007d01eae56690893703ff8369e498c9671059e09306bb270b5ac54c4a7881ab27b90e92e8a57c225ba371aa7f813f2f2563b9865007080cc278d0db3ee06e95b3af26342232a2232f80041df18aba5a1fdb906cd2f4832e3e73cabfca53bef1d2ee69379d73e1f658872e7fdf3f
+Entropy.2 = 3e8c5de27d9a29562d4462f9923b09dad0f9b1953275d92d9959844804673e7a
+Nonce.2 = 54fa44767542034cdde939d2796a7adf
+AdditionalInputA.2 = 9679e7d730c110b139c42196ce1ae63b604bedd098e377130873b840a753047e
+AdditionalInputB.2 = d2d33358f1e90cd1261121e7036dba3c36cd18a6b7beb4a82d1e47c69abd8e4d
+Output.2 = e6c73af620465244ccf62f5b4151da39fe4885529b3c905243f7753d8767678aaafc7379f0074b5743425715d091fedfe33f138841d7c07195ab0d04ece6419cf89056f0477f3abfa638856abe3e740ef6a25afa319b8e56d290a385b2ea2e48c20743d850f7b7797ad80d42ac0f1f104e432d2a9e264c9e6c19908916c40c465ef9d3e57a7b311154a03da4c5cce6ff74192175027773b2c8b9950a032a7a41e9728513aec144f0ec937cc12dc2ad2a4f0e00048b54cdf81378cf7c169ff252
+Entropy.3 = 901d216a32a2cd2555833c38b175ee1f76b58ca0ee28b4d2409054840b1c9795
+Nonce.3 = 2ad40293170b525f211bc7c04476ca3b
+AdditionalInputA.3 = f91d7b74aa21580cd6bc241d720999db1d573c6df97ecf6460aced64be2353a4
+AdditionalInputB.3 = 2bfcae59d9f250e5aec2781c52153247d9ad4c44078be1195c932cc101a20c66
+Output.3 = b9dc17e4db6a48a73ef74f16f3cdee4cfd1a08fea0ef10131a4f02aa85dd24b7eefb0474bef0dbb0b738032c964ea0e710c9cd47d790e25b5d5ea2b8dcc277b4e3404beac530385b083e2265c424ebd9086e2dd3bc39cdd3a3d0e719b04e60f9d4cc567cce0d9be2a57b5d82cd5c917b578bef85d1507de6edf496c7a3d433c26b73499beaf4ff5cfb51e89b83649f90db99e58253312efd8c2a7ded3e9f97ac13eecdb4a5c2d57ae236f715b1c74ea2af7b2a19b8426a40f573a07320315cd0
+Entropy.4 = 2e27c3184e58d0e14418fde81f62773dc3aef5b60d829df57a30fa8168242dfa
+Nonce.4 = 69798e95a322ea454baf0c30c8e11379
+AdditionalInputA.4 = 89369f0fcaf68f8b5588314f396a28115f24479def507afdcc62d7fa5ec1812c
+AdditionalInputB.4 = 12434493d808760462382541a6d9333ab968c989bdf39353c5b5c396fb972980
+Output.4 = ca94ea6e77ba78c42d2e36c513f9e1ec38858e0d14017c7e0950fdd8137b3cf773b24c4e4ffc18bc4dff859081a8e4d64333fd1ac3242107cd1f08acfd4b9ace7b1eeb417fd4f1464b5c27929a1473c36393d665c83f621397bc71851af6708f90e75a711b6b482ff0580cbb36295db0db086cd081bc80caa8d37c0560a54dc9e343441b9045b95bab35a50c2d2291bde8bd0d96d63ce6b9be958f3c3f90d1be1336a2ddbd6abb997ef9218c0baa3f4f9cec03c77c7642f2b744db6a395362c7
+Entropy.5 = 76bb91e695eb0321720a517c3267b293ab311f4eaec93b6909ff0d3d99346b5c
+Nonce.5 = 8594960199b709a71157c64b084a0af8
+AdditionalInputA.5 = d20f33c405cd9606ceaea8184bc2c3a30a4180b0ab3bf24dee503834e1fce563
+AdditionalInputB.5 = 434d1c5e4f04c0f998a60e214fd9d13f10591c2cc3660e29f9455483e2b2a306
+Output.5 = 43e6fac40318590a1c9680b5e739ad821279ef551fba7509c48efaa560f109c6707a223434b9da000ae43004f0542b8a9d48bb51068aaa046998383daef71cb0c10ee5cbe1a52b64cb65c5604bd07984b6efc5c2bde92f1937e02b9467ad8b55e70001fca6b59652ea3451d3da9d31a981c27b592d674706c047588b7fe67d087e049d93de46a45f8d24f0142fac2ec140f8b3c6f2295952183928921f93ee9954b14bbeb5e2a88c87b7582824b2273ebfd4f62bda6e28db22b2fb173e133373
+Entropy.6 = dc34a49a2e4d1222edce9e87088397e625b09a16bd331bc10fa07399cebff43a
+Nonce.6 = abe6e879a99f1c467105f7fd331e92ba
+AdditionalInputA.6 = 8924c8bbf9e72d1eaab9322755982007e2fe18cc645256069bf36ab3352dd655
+AdditionalInputB.6 = d6a726312e14b9e2fb03b9720c6d966a7c5e080b6bbb4ffcb1759334ecd823e9
+Output.6 = 7b9469a5db5c11545a565b370adc239df6af835de75ff321bb991aee3fa4e98abc67873ed89b215a716e1ebc9088d9069cdea6bb8f8832c93d8beb9988f1d59b6188516a9c9df72fae420ce0443086d2e33bafcce6f8acb558c08f945c4109c6ba7e4b22a825fa9f90b15f61ae28b3aa076f2813fece691e5376bd6379e76a54384953c9ac54ff39890316881cf9afbe8cda1bc9516407ae58c6f0adac3fb706b6fe0a882facfab3d5cfdd0deac27692b14d7afd4a9f0fa771276de27551c479
+Entropy.7 = ceb82c3f876951ed4e0f2acea748e93ab37ece0d110e8df618297c8db8d184cb
+Nonce.7 = f8ed30e8c1401eb6db5be4d47ebfd4b7
+AdditionalInputA.7 = 70bed533ffa03856ee96fbee70155fe82823d3e40e940c49a5da9ef14fe95b1e
+AdditionalInputB.7 = a54c96173d3c2322f122cb0f3b13d6b2dd45f72b050d675d7e14de6eea934cbb
+Output.7 = 091cf354f4d40678b532e5397217738cd5206d6621ed55f397aaa75c599630ec9fb662283f3bbc9218aa808a4ef56a61e4fcf3be9f36287ec457198f86a37649814bf4c0cb62e25a35ee65fcb9defd0d05986981d99e5f78378aea246f532b32d3fca7599e1ab0ef561d85a93ac86934528c5f07e3db9c2701ff44b948da62e7b6e61c1212574df0c66b213f1807019535c6ee79cf4ed2902f2f5c069ed57288a2636a5e05734a041c72292388552b9dc06d646794b8437829c6c2f0a7c1f6ee
+Entropy.8 = 37290e324fc44a8bb09ecd5fe8bffed382580dfdd3c23e3a4b43d91d017598ae
+Nonce.8 = 0cc4b3e487a1d8f9da80d391f9ee8df2
+AdditionalInputA.8 = c8315083c39a6432ff119377dd3fa42d56b892b2a1cb19e90db21517db1f1003
+AdditionalInputB.8 = 61c03aaecff7e56e0724b3cc28903436493d12a7104bc6f1c8a3e4edda317596
+Output.8 = f1bcb21912fa0f73ec9a4155ac53ae6b056afa8359aa3ee563604ac820ca3b230f4207f857d1c1a018639ddfd7dcb310b28564571f5f0bdba6a1fb34c461267e59b853b99f696714a33a12f584a42199d8e62f1e3ab59560dc7778b2299c25341e66d90592540ebde6bb10d9ac3bffc43ca6a058fdfda1b7fa3d26915601bcdbd1ff19150bd428fa820332c575db788deddeb4741ff0b9f882ba3b27b11bb4e023b64e405f8d1afa96aa1783e6011669491831f89f7f3a69b7037d1e4532e6f2
+Entropy.9 = 6ec400d8311623e5ac8c1734ff7db9b97177fd105279db9820fa90f3320c84bf
+Nonce.9 = 0f4f7df9490978b72f5e2fdcf32fc331
+AdditionalInputA.9 = 1fb87fae83d388c30bf6c7fc1ac9c407bb666dfc7dfbe634b4a6a509d3f17bb3
+AdditionalInputB.9 = 334b409a84456d5e7d8e8fe8d2ef3df3d491b9fd3ef037ce7fb74ce4fa515f99
+Output.9 = 728196571ac1200d53ef168bd8c3adb6288772dac75416e390488297893190dfdc0e80e251f0e6118642af27a3e6e86630bc5f4afe930938e88e478e393599965394e6d16d75cd1785aba5401d5768ab061fb4723b67700c574e5885bc5771075007a6811520c1a91b1c853d764136c26c91e742bfd1e033b5fe40429908028e81369bacf8baa019e0b6c218b7a6d0da0372c59b40661cd41341a6b0ee97c594f301c3617c35c58e092283bb11f52754a00547b735c75b2e45a18882961bcef1
+Entropy.10 = b9a4469ce59ba2eaf1ab63b090039a1652d09fb3b794d35ce13c5130972c3d05
+Nonce.10 = 766dccac327092b5d3b78a7058da2037
+AdditionalInputA.10 = 6b49aa49bb6e08782e6ea26fd7eed0a60f40683516c1b7a388a7028dee1e50a3
+AdditionalInputB.10 = ad2dded6c6e22c34c475253f58b6ec266acd90d5ada6fb8e6b1225c2678d030a
+Output.10 = 2a8db9fd0c00f56bd85e735aedc131a91d497d2f006d22f43e61d3c3de477b30ce2b5a4c7d5b86467857ed10123a13ea63da95403a46504e662f759f3e438d576b36ba11a6158606eccb68a3ac654b418342ea0e6dac1a5449d2199ffd7c3a3cc5a7bfd1b76161dfa7f6091ab454a317abe3e42ebb146dd022aba462e70d7f033bf3ac0af586543952917fa912bcf33151bbb432aeae008aca12a4098d0a07d66ec252ee8f3876539d6718328d8e43f6794b2358bf0396359f0214e23557496c
+Entropy.11 = a49b6e419b6523481267fb89ec6c1fd4c7ca95d34dd48adfbf3ade97e2a0f684
+Nonce.11 = 426fd29a58a75d73062c39b5223de523
+AdditionalInputA.11 = 3e5d3ce245b2a7dd5342ee0df9ac54c5989a5c57e39b07708ccdfb5799b389aa
+AdditionalInputB.11 = e0a191eb18aae774234d58577436abebd9e5cf8c1a8d1c19515a66c8e5dd6f32
+Output.11 = ad5163bc5a9f444286c69deb5bf4490ecb79760e75b07f2d5841c3ed0002d01a55cb83529c5b3119e2eede1baf1f8d9489e6bfdfb7071e03d4f62d1cb1710e1125da8c275a6f076e39c7e75e662c97f23625c5dbfd7ab795da6d0cc204ed7434f2189f6bdd2036e2cdd56917086f9cb33b3707a82f848c510cefed7743e84c1154612abf8858e67173b9e4458509c8d3b8aa98e9d1939fd1ad77c0a41713d75d7e9b6512a0345f06d4da43d6cdd499682b16ca7c066fea7dfa79385d31208074
+Entropy.12 = fe6e09efe4478174e5578be98924610a3a3ddfa3a4888a3a0bea7f1d69ece799
+Nonce.12 = 6dde6c79096b4573e10ec6773607d6a7
+AdditionalInputA.12 = 8c863b6afc67d409ed2fb258192e68957fca5860f1ef11239b7a174627a4b053
+AdditionalInputB.12 = d597a278bf4288f12729e5eead1b695eb54c5aee7ac2d23c06332153dd45a823
+Output.12 = 1433af934a88673aa5fdeeb4625eb84d78e131db30bf3c1fff60f766a608e8a09f80daf10b4d960fc6b08ab22622ee8192c2265f911ec25998eeda6b6e5e1c8752aff6e5e2975c4cb909dfbf0b051bffdef58ce2c59fe0ef0f6fa26e69a7e33ea8af396fb243e712cf84514ae52eb5d9d3937038086dcb1d3fed46499d3a22e1a1c7c7e5da73f1c51fdf5a49272c5fbd1a70a6c2f9bc14d61c20090a00d1c16a349ab7d1c3c2bd1fe01974f46ce785ea373bc99bed24577e056ce5ae13d56ffc
+Entropy.13 = 74d3adf8f006a0cf4a24219af0c67ca28ecbb59da663b80773cb1a950cb21a65
+Nonce.13 = 13691948a3d6de08e972e773af602af5
+AdditionalInputA.13 = f9d03c7e2937e359d154e074bdfc7fda3a247bb788f52282ff450da1a4253762
+AdditionalInputB.13 = 5f466bb3dec44e3c14d8b4cd68ac3a826eb19bfe613bee4befb779acf6f59d85
+Output.13 = da5088f6676967bddde61d4b60211060352c2d0f20f2362d4137b9214025b30c995a299fc91717bfef5e9ab6ab2872bbd9c1e958f9178a4119385ee50574b832616948e195a0a8aba8a72eb8362f4f1560e923c50ccfd996d85547a22ca06ab799a62c816b71fe85c8b77ec3e912968479adffe5c96db340ed01225bc8ff41191dcbf743ea50bce2e29455ef39952c4193f373d95b01afd8a091aaf3416ea0e83ecc3a781188e3bdc2440d92224ee1dbad947d9e88b5138b710764bf841c51ea
+Entropy.14 = 23c4788c9b32fc0123695a499251cfba0161f3ae38e20958d006a59168163c64
+Nonce.14 = f8509371ee17ae28920718ab2ba6451c
+AdditionalInputA.14 = a633f5f05ed8b09b70683a9f9a8e998ebf843b68a039dc3aa40cf30a5f997f02
+AdditionalInputB.14 = 9a57c6be8c1d992bcbd599952bd94a755d7ad686698991d189afd11cb88b9f53
+Output.14 = ae0fd8a1bf6f2f53f9e81ecf6f40ff6a36fef58a3f157b6a435403e48da4e88cab7871bfe2233b92afd228bfe3117d7cff0798225a901663d51f0491109b9c631dd6d32c5bec2da321b8e64ebaced87a27f17f67082df944fa94acc6c557fa6816001642e38b7d776c631212b782f71aed6db760f90e0de8e81baaf4d419170362932e6c319dab948749b331aae41b4cb3267da37c9233c36d65d5482c8940387498453b226af485a37ea16bd9e4f938618f70aec97e8c1430a8d8b6aae396e9
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = ef634a2fa208c4b3d286a7a0d9c5c0cade45c18b4b80a0cc52160c3c4195a22a
+Nonce.0 = 4481bb6010534f61621be8ed36bab024
+PersonalisationString.0 = c4771aa90866ec257ed00bb4a26ebbcd0434fb480c1a1e2965bd5b7508fadba5
+Output.0 = f098fe063550997cb83ee2d782fced1bcab43b601fccf4fa127cf9dcd86df6fea36dd7aee7ba7adaf2642352d17a815090ce64ce8b23ab55f7e170655d1625ea25f46b745830c8af777ad4b5f06941459ca7cd23c84dc6dd55505e4af6e518d80cc39a1abede7a2adb7d8aaf89f0f52e7d75ad975cb256d489b4cfd0f493e99785e30f01fc0463f671f0889a086e3a768b8037a538d13c708c0f9ec5957c2aa69ceb5552e13d5754e3b8f36a582a0d2d103453c3ad6e5ae6fa0c606efbbe6fe8
+Entropy.1 = 66c7826a288db41060521a95bc955811418ff87d97d142bc5411d4d8f7e3e32d
+Nonce.1 = dfdbec93e22a3b159cdeabf30cc015d3
+PersonalisationString.1 = 3c5f09d775985c5dbd27b360e4ec15cc2433eb125d699c181ba54bac7eaeb40b
+Output.1 = 74f9087067f3ecf19b9d83cf22ef7742c9af476e73c14c8c5fca245af503545c62d071d1d5bdd028b44c3b18d2680b1a2401357a45361f1625526ce3814191580ebbceb724d099e727b71e32ed5af196fda4fd997b6f994e63dd953ba7f8dd874c0a4815b2457e16420936d795bb350a6f9de5504a81a08e4d81034e96ff9c41112f83dcd04e964ecca37bb59b23a96bd8a2db684349339432f6405834b90889a3eeaf986a312e59fc148dd85d6256b3e9f9214f0e011f9c4bfabdc84a284ac4
+Entropy.2 = 22c6ecf7f834b3d23cd974255f5e664d9e6e00ebad971e02daade9cd3e82c8e8
+Nonce.2 = 361773240099c21ea1d62dc377556432
+PersonalisationString.2 = 0e1cdefa5c99dce4638734ed9495ff4a43a9b33ffb146752c3c034605f4e58e7
+Output.2 = ff53c742ac1f0a45f9321b5b21310a6270922237ec22e39ef1299b72a3488511732cf3bf436bfc66e3c4e4e5ce171fcc1aae339d5623e9f728d3739f1c48edd087d2fc6e21f5648f81de39377230c75dd3822d8d060ca9725dda80907e3ce39544cf5b4cd48f8d1aa4900dde5e70263b044142a64dac9f42aed4833c5b861e1630268310b44826b021224b53768e5ceb6b186a4af15e494753b00c45681480360cfb260e627d17a2fc6e492a5447a6d99c87853a57c1d2ac4f2ab187d7494e94
+Entropy.3 = 1358aa2df891f990c5b4750a607071245695e9b49e9e0eb755094336282da9cb
+Nonce.3 = d7483c29db6943e3a757586b9a45fba5
+PersonalisationString.3 = 76694a8784ec67185bda5bd02ade54165ebc2c43cabe60810df08e7e6143fec5
+Output.3 = d5670f81c1acc1aaafc6f8157a6ea9f74b49c14993ef3f61396998df5ddc1efad0060c8234f69bef6c9a56485f98ad42e28e246ca7e15f352130a184fa7bdee46cc1f4598e7a39d9b31a47b47ebe9d1b3e745451176bb3361b6f502b0de34ae134c276f322c817df3ff4ade40973b7736aa2c2470f0da45e25b7a80ba187de4a02e17b0a5000bece919c01c77062dcfd21dc76adf597eb50a31018c953a0829db44a3ce577f244df490d1c47e5783d5c71805c70de5bbf540a91510d9d1a3bd9
+Entropy.4 = 01933cb95bd72dc97cd3a5fe722f17380df95e0c5fbc4091f54e96b5d70449ca
+Nonce.4 = e8d10bfce84b7ecccc94d2de813c4f8c
+PersonalisationString.4 = b07921836c827387d4afe21757f54dfac551b892f249e63b8ea6da57267a1d77
+Output.4 = 356aad872ed2097374fe24c7d4d9e754c97ef6bfde2e72cf8582b0cd0bd544511c6c2abdaf8728342297ffa197c44463973616d87400ae81a972b17b2c90baf692231db7b2224fbafca3f3e5f89bd887379e0c4f7665eaeefcaecef34c64558586623003c65d2cd53c6997db448fd178eb04c4dda35db9c2a6c2402858a8bb19bec8595c0c29e57e5a5cdd71e76f215e7415d504d89b0e9ffa9939d08815f82fdd8e8accc32441e4682f8da07d0b1516884abd64f2b5daaad14fc195943beee6
+Entropy.5 = 0eb5b221daedf44d9404bff9407d85271b3a517048b954c50ed0f7c1bf937344
+Nonce.5 = 187de3ebf99990df365ec1f0b6c48536
+PersonalisationString.5 = 63db9544f60c8b049e3525cd399b7269f5fca85d43b1c6aeb39375015792defb
+Output.5 = 5eeb2050b17895ae2c0710fb3d5770e3ac1a38eaf2e49b41c0f69baa870785b102a9305c224ff7adf0aaf8c7bd8b7a3348de3e038d2c79bf418e4d34603bdaa3647b820775e5b4e9e5a538b62799239be75ffed8bc7b8b675908b3aeecf0baf1ba7bf2b25cb8b2717f21be6a794355c300f16b24d935b312c01f56274f565b4ec0155cc50b9b6b15001874f9cee05d424df2e4910e59594b86905dd86ab04cffc5266d2513d7880c2f04cee5137d2ac58aca52d5cd96f1455b97218fc4962cf4
+Entropy.6 = 9ae14cdf2214c2e74c1f8e5e2b8cdaf0dba057c65793f9cc51f39d83f9b85133
+Nonce.6 = 622db66870ce2852cd0d08df8212688b
+PersonalisationString.6 = 6ea4afc062670c6f07714a4006b4ddea1dcfc21da7e660884a8c41c4b23644d0
+Output.6 = 682de9f80c901263a6898f269a1fff48cdaf5d52747144f9a6cdba09110a5c8c36bd78d72322012a91d7531dad52042934fa80808e0fdd4167d39dfc674c24d0ed0f98a5e45ad04417d58830a31f0c73caaec8f21c89c905a20ae7048aff5ca67a5403f8ea3ec9e53699507f1baa5cf7841cc8f1184fa092b094e99ec8f951291a7c381510ce456e7b56b0ccd39468de88346e430cf6ac6f81b2909fd867c7a10a1b51ce3da3c0ecc1a3769696c886f1bd819b393952366412b5ea5de823d2fd
+Entropy.7 = 2d855f1a04d5f65f69986e7a1ec6c58ed7dc4d3f03d67dc9293f0651d2d48275
+Nonce.7 = 25f04000c06d2953d4c254a920ec0010
+PersonalisationString.7 = 2c0a3fc5373bbc75a150a9e360ff82abcb855273d5486802966fa15d9a5463a7
+Output.7 = a0589d24d5eee689b18ae972c7d886cfee95dd50527db32de1fe43685cff3214e97be1041084aaa280d5b15af19e361cc9dbb664880128ef7945b4691dba1b8a5d228e505bc51ffcb194e0c7f2c1a1e302a72d73185961e291f9aa4fd58ec7dc4d68dfbb95d0b4291a8c17fccd641e572d9a042143fcf5ce47790736e8c9949ae2c23e685d2958a78fed2c4ac861af2e0542ee0e82779592a9e238a69169c2ae34500cdcbc20d42d36fc57031ecb60e63e44b6f81bdae3d186fc02e8b7e5d7c3
+Entropy.8 = 5230f6a45cbaf86ec55539c1e20c52e589ef93c733db397335b7bce9b3871537
+Nonce.8 = aa67dc753f0701833f0b283b2e9aabad
+PersonalisationString.8 = c62c19e84b7c5fce42c8748eb698107cbc28832b3326af798ab3c1b6d5101f15
+Output.8 = 91703c6eb85484755b70ec923ae93919a884dadec0cc7c5dd4fa64bb6513c5c187570fe85721116c5a6f421c17785d3f68d826e17826e76383357b04d72c7eeb00350eb6d39f284df65c1cda404e21745f92375f6e6734cd9d188b4cfefea738924ec5968fbf6a15ab58bdc8940683d9382e77b4dc8e7b3a7cd52bf789cb8bbc1e27373d2a803cdc051ce84f823fb0ab20e85f290e3f17d3c030b83150b135815d9f5eff9ef2c81c5ce728c2d259bbc2a3c1764f65ea0426484c2c3b0b518e37
+Entropy.9 = 90b5046853057797c2f89d73d650d9bca3ad63454aef960399742ad4e91add09
+Nonce.9 = c6181214992648ed4826e04218a3a588
+PersonalisationString.9 = 48d37716832a3d7049c66fa7db241d0a5cbfe8040ad30fdb606213b6ebcfab7e
+Output.9 = f445fc941a77b13cce20248b2b5b3ec45a8fdcb041886c5cbbb2bfdf1275e6e34ee6a76bb5ff0937f2875b76fa08bdc31df426f096827fcc56b098fa4076310bfad22c9b98b652ddb207beb4b1392d6db353adb7582b73f2bfa2bb46d7d585e11525b65cb95de2cad9869480c27a043bf17d796d05eb12d01aa0b0638cb413e4a6ae54d28c274548706d829ac5d28e0bf2dcf9903b2b987a7d2d6398c52a3f740ab47464c8e6eb93106ff7d0db419eaae38f9cb7989e7770f398420412356136
+Entropy.10 = f86c8479d39fa3bb7b3dbc4e84659fc710d16cb2183c3d3c4e1d5427f9a7556e
+Nonce.10 = 44a148f52a8efda2f54cc2988562d7fe
+PersonalisationString.10 = 2ac8374e7b10ca0ef618ab2db2001326a07fb663320d9768c8b8333e53ec13f3
+Output.10 = a4c612e877cd6cbcb8dda0a216724cb45005124fbee148a2afef7cac2430583af259e361ebf9f7d00766bcceb5b2f7507f134c724cc69b1e2abed1e361890cffa3ff2f81de8da2176503238bcd9b51b6897663552b561bc2b3719d4f7dff242218f8d0b51b74c323c698e0f52c356f09b74f2105b0304429b3d89f3cbdcb7fda2dc84ccf2d6c7ad87f75a9ef73ce407eefca8eee21895cb4914508325449fde43bc77f3fdd16d8c769f2bd36e07f8dfbbcba896b15911c4b0143a5ac6b6f4795
+Entropy.11 = 523d0904f258ab2eccf2232bd5247112bde507eb613bb29a40e92b86e2ff2797
+Nonce.11 = f4509136b780496145a5d7789e2c280c
+PersonalisationString.11 = feed7c9680fb11a17b423dfa55e26cfb367a45fb2e0d63f4dd806849181b896c
+Output.11 = 4a3d83e002acbaf108f6072ff014a2c0720b50bd8de178a6b9259361ddf351c6ce1825cd4de14bf9aba71ca04e1f276fe732dd3cfaa33f35acb32bdf868ebce6d4aa1589180365473f40e274de6ed5c46341cf51e45a70caa4f49d998561bbbcda258248de3eef656bbd07ebe90d96b9771b249e765e2d3c295c8ee8fd9faae20eba7af26e924eaa101945ed0ac839ef9b6f23cf3d03245ab8200ebd75b70d080fa8379bd3ddb7a6c3428b7ba640b6ee065a3a56b86b0802d1ff5b1880022643
+Entropy.12 = d75ffb7da2b4f46e313b1e8ea625a499c8b082f9f3c26d66899aa524d9832a4d
+Nonce.12 = f8d729306ef7649ccb14e9c3c6513e4f
+PersonalisationString.12 = 294bec06c13c3ca2f2ac34dfa7dfa8c8a8e6483358642b4d4072e314a4df1120
+Output.12 = 0594f3da2e175d8c9a83e7fc2f76dba53ae1e125a7986195479a9a19e59fed2d19bdb2544b623dae9c47394c0f57d9e9e37f811b409f4e391182b16720a460f52989c8aad9c8afd0efdab460563e4651f6fe599ef57c98db56389fd628712ef04edaf636e620ed6b5bee623d1f45ba4480424de884ef03bf1fa9f0b722f3d211534da8ffbce10765d10b7649373070e3e354810029f9c63ee7a217ac33bfb4797500edd958cb2929646ceb26cf8d8d159865ee5fdad7aa43481499dd970fc630
+Entropy.13 = c4dc5f712b53926f8f1f7b2af39d480320ba1cce56e39f722a10f0fdbb6f47e3
+Nonce.13 = 04fce136460f211fcedfe60f4a218d78
+PersonalisationString.13 = 85f7692af420b7e0c0ec1afcbb2b46b9972c3bcfc51cdb4fe84f2fd01d11376c
+Output.13 = 28a3f1bb8cba67e70acb682e49aa22f6a51f8abb7f7138dfae88fce3c9c3132732fd5bedf074301c9604aaef834c5900b90195c2e081e941fdd6f6d6d10122dbc423849ac2fc14a2cf1bcc0f4248c9bcd3fe25f34e975a4cf7b501aa4903927f836831b239000d26fcd6252e863a1dcda3eb72467e284d7b5b78bfb035d5e5226e6ca6b5a9822d0f805f1a6576f64a37cec35d539a99e9b419ceddca816e6d706bc75f72e568d7721e9019a7319b19f65c1736523e1c277f101ec9ee7677dd6c
+Entropy.14 = 446956dff7fa2b038629e16041915d58c0fc9214312878958abb87bbf3259dba
+Nonce.14 = e1609138b91637917ec170fa3c3fb278
+PersonalisationString.14 = 230db2e57b87e910cbab26fbac7fa93a65c07c1ec004c74637e346c2db63288f
+Output.14 = fa58f2e96776b4aa079dbfb49d81d8abfcc30d459caeb45dec4f1766fdc3b234d52cdc5337ea770e71a28cc42c82cbefce896d1fecea5a5290300208aa79b5ff97d2091498d749b66a9e5b2da7b774567ae9f83b87a8417b1bd089935e575b16618ffe8ec04b91fc9315968dc395fa2bb8776133d3ede95aa89ae675881b26ca831fa5fe6cba800d2fed1d509353e8cba6f007cf3c5e0b9424cc034e1c817d5f7326764f5ed1d17ddf8900977a0172dfab50bf4819a67e4c1af4704f59eda3bc
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 5d9c7c53665a68ba61f71f9fadb42f313cd10f19a69b28c2b957c92ebb6c1545
+Nonce.0 = 504a6dc7a2ef385a6681312243762e7e
+PersonalisationString.0 = 53160857089ccfda7edaa84d173b6d24b42a7eecfe9925838a55114a1d8a08d2
+AdditionalInputA.0 = f7fb90fc9a10c4cfeefccc4bea86b16216df007e51678ba9043abeb2fce23bfa
+AdditionalInputB.0 = 1121fe8826ddea6657cf0c5a99c91f00ea399057fd0f8540ab2cc0841a3f09d1
+Output.0 = aea7c37843a0bfab822cb5ea276434fcee305e066f8ce385f275f1d2d091d4addbaaa91addddb8f122c945884fd227a3657215e98fb7764e7f8e541d3fd13d214e4fcd626990a96fab2b71b64dbb46a313bddd8146c10aa3941f1b30973ad70e928cbd4ad35ea3b1e2983312a343009474609d36ad0eb0cd11558fb22c09ad9a4ab7b46b748d5854a137c6e09e1d04f6d3724d78450c9df562655c773d5cb4958ccc1d2bf3c1a48811a04617941248b7170e9dba81ba39846e5f1dfeed184890
+Entropy.1 = 8dfc0fb16e2869cb5fc140f6ddfe91837b6e80309b797b68c30d6b7a8640f292
+Nonce.1 = b254a718ee5c778bb132cf91616ab577
+PersonalisationString.1 = 8242f4ac8d4048f6d7326d22f2c64ac8d3fe74e5d8519b6aef371063fd8e12c2
+AdditionalInputA.1 = ecabfd632c829db2a894ef8ea37a86f5027bb8975c8f8b0ad05a0d129d172590
+AdditionalInputB.1 = 3c593346a485f2339b4e478af7cf94941e2b09749e7a88a728ba1054dc10ff68
+Output.1 = 5cb6b5d3da70440889809ec0099013dbdc6cad5d79ea84cd676b6a03fc6ca5c329b4dc03909286bb621dc70e5cbcd726e735eea49af2042bcc8c26f41d4de58b5a535b37d06f89c64c480baabb74d1c685c61e1ac5187617f56057b08b1bf3fcb479d4c212b6d5474587819a0c92f654568ffefa02ce74698c95c7a6ef21583c27b9beacdec4de668b4fe143d77b671d45285296bd7b68b91fdb8c81bb589d2b6a59b4cf0cc1da8fa6007989e04628bfae06fd4c3e465168354be129b3568508
+Entropy.2 = 93fb949646b69de6fd6a088792f183a27c93c60d4ee292ff2a33d24432e9fae1
+Nonce.2 = f4a62bb91323a10c82d31a1026e3d4c7
+PersonalisationString.2 = 9907b9bc86e0469896c4ae84ba62f742bf64c0740c249d466b7fa2089417600f
+AdditionalInputA.2 = a93305a129f43d39676478084f0e156b3bb1423ded3293f464fe7d4c1d59586b
+AdditionalInputB.2 = ccd11ff83be2aa88f5f856592654dae6cc84c7d6acb115e0414dd230d20776f9
+Output.2 = 0715305913f94b159611d2a1694095ac96ae54b04bb5bd73ddb5ebb29f15421d9ef81397128b9c4d8b74c924d1083e886c6ad9ce325396cee8cbdeab26ea09317184e57f5259afb812bd03b484287eae184070529f720bf4771a52e570428fcd6971e7e8e0cff6ccd669e8d6e8cd56dcc41a243ad3b64165600ca3e2de836665098e51c03bdc2f50a435ebaf0b17bbb4639b486c9ccaae4ec270b7bf7253caef62ead9dffa4fa0ffa9a5b3330228793a333c1c6648276939a3dca7ba1c9ee2b0
+Entropy.3 = 59aa99b0e4a6252c6383e799bb25a6025de181639acb1a425c4487559423b128
+Nonce.3 = 2e7cbb1c325c09068d175ab31a6066d6
+PersonalisationString.3 = 5616119af6b34c8ef543a6f70250b86f5263bd0f30838584100446ac15a96ecb
+AdditionalInputA.3 = fa7d975f1bc0239d5195f935fdcbdc14f98d80b56eba681a6e682527c36c70df
+AdditionalInputB.3 = eff019de592f4dcc731b455f097079d279fb25b8d11f0a193f90ea425a34acaa
+Output.3 = 42fbb3c28e7aa943c9f06a7da2179145a7811ae12588b8be865627a020fbf0dd99cb2fd79bbb42df6b1d91d1039a1ae7d68a7c4be02db6d24c5f63140afd010188f39eb8b74d4737360ceeb8885d4ed8a03dac5b6b2248a0d8994498554d79d28615547b0fb30fc34e8dd23f7d123585a44e2285f58181d0a4da00f19ee5af283d1564a79e03af42977e063c531efe3acd35bedb469ca94fcfb45ee66f25abfb142854a6e28f004e7eef73e2e5bea5c06c2c7e00ce5793a31f6e533bb84396d8
+Entropy.4 = 688c64470a51b1c68265fb6b0dace0a2481b4a27ea3dc7147746e33a53e8714d
+Nonce.4 = 63be1e439905100adb12a6049944dabc
+PersonalisationString.4 = 42257ee863c8229e9f9c9c82d2892930fe0a3b30e0f9a6953293a89decabaef6
+AdditionalInputA.4 = d4ecf65a968839631f651b34eaff76ac33b6b97932e8960c5f958c705052f1da
+AdditionalInputB.4 = 1023cdd5b7240582b8f68d552a95ecece66fc28052645b8873460ee493c7d6a0
+Output.4 = facdaf480300d1801e014ff7a1d9e37534c580b623b9be1ee6f24874d2ef5c695062b22b1041a7e67b26a191e39a4a75d00ff7b49a059081906b2d062f58cc019b1eb61345b7da93e68ffcf387def041dd7ec24bede8ecaff0b8e9813ce34706297e09e06755134bd242c86c378b4fcfbf55dadbd33cfb0317df267deefa8a009b7cfd7c693676e7dd818d0460ecc70b81a9085da1efb7d1c162fc86d53c9dc70fa7586f1c25d574395afbe2262dab2625a445e3216346e0dcfd4be388f7623e
+Entropy.5 = 23fa4e2f46e3cb221dd86dae48e7be4353ca762cabda028d30bde00ebb8ab51f
+Nonce.5 = 931ed9ecbce7ec9605b70a81ff15f700
+PersonalisationString.5 = f5189f0fc5eeacf22b56d3e1591bc8f9700d8df5c55ab46a405b7599c4877703
+AdditionalInputA.5 = 7457277860b1a789aef6273aa8b76d4fa78211c3183bb19d359e7b15b2a92910
+AdditionalInputB.5 = a448b76609e8a5aa826e4d856f8ab5c83da8ae09ff5e005a28bcd76012f7c4cd
+Output.5 = 11ab01bfbc67db080a1323a3c98e08a3c53ff171132798cd0dede1f3e091302689cf7252a91ac83572bc485b3c4509b69b2bbfc33b9e976f97ed337d765e9ed6e88a6f731211f9d4efab22f4b818162914bf55ee3637541d988bcf5a7e73c6ec16a5def6d37c020c5b2236e7b2ac60c7f39e16a99a6fed6102be2752182c2b92fd54321bcfa0a473cbc6e1428d015d56cc69db9df2592010578796a439cb87bfb6380c9acaeca9747cfc99ec0922a725cdd5444c52d1b7d40cbb92735f97126a
+Entropy.6 = da401bc7dd5d32fc10552a71464e69bbab5a3c078d8dfd163105095d7a8b9102
+Nonce.6 = 016de70335e530d98a67b53ca0ab21d2
+PersonalisationString.6 = a9b7138dfc2c3a0ae525b52be361ae29a34be5f565eb7767ce864de669d6c878
+AdditionalInputA.6 = f20333a35d035b1db11a9c0dee8da0616781d146a7768505c7c9d6238d425ef7
+AdditionalInputB.6 = 58d80e76efaac6196a864b0686437f8f37fce5ebbeac730def8e6d86128ea0ee
+Output.6 = 3f68928bbce71e4cc5d00aa20f6aad2fbcdbcb3758693f73b520a38ab8263cb62da057d2743d6582ab02c2ca6e0552e8ed82bf50e1256b19e73e69df72a9a0beb35a0167d52ec60d172ed32a919063ca873da14013cc2f153d44a92b05be03e9116c07b78f2997d266f9def541a03401195a54e96afd06ce63b24c3948be82976f2dbd82f87fdb68231b8ccbb401b51b7589fa39da6d23415e5b61d51edbd765c8ecefe82fe7ac4d5f3be17d04595b25ff0058735c1e28c701a53cbe610b213a
+Entropy.7 = 923104612cc5f070f1818ac997078fefa47fed6a738de0f2f0864cb408d62f7e
+Nonce.7 = 0f4ae717b33e3918a5f4012ec393a89f
+PersonalisationString.7 = f994df70505979458aa58eb16fc61144122dbb35ffe994144769c706ab1215bf
+AdditionalInputA.7 = 31cc002b31d02fefac8e4d4bed276168194a363defb6dd9eabf5c393326e5959
+AdditionalInputB.7 = 15a67594dcace6eedd0313cb3d0588246c881fec7ff1811e66828bf6ff8e1cc6
+Output.7 = 3005c8d7ec50a45669c1cc96f72ea81fd655d8217ff33aeb3dfd8e88558fe135d21176315bcab35daf059789494719f74985ec2b6b5d3a4df88bb06ee1373f3403f3b2085beade29a1adf3eb6653717119865787cf1e78d6d5aaa74f4cbc02daee0d72cf24088fbae885c26101d1aa94420d491cf7022c84ccb8531c7f5985cb3bc0ebe1d1ed6555a35b9f87d0233d175cf4510a27bd2e8aecf3a3b23835a974502d0ed968e895e8883279bed8a1c921cd53317d599531feb1909bcfe3e301a1
+Entropy.8 = a350a44a16d275555a788eb51bb26bf55728accd72c923f0fc94aeb709461361
+Nonce.8 = 7f85cbfb9ff1667d994f97ebc7a68718
+PersonalisationString.8 = 4375dcce5f24a8b83bed735df6ea8fa3c844e2e047de1ef39e1c7934f7a10e0d
+AdditionalInputA.8 = a9a95100efabf115d1539a9af5ca407a49b10eec733e8bd29d6ac3658dad2cc9
+AdditionalInputB.8 = 831c5d7c1b33a8ef19f0f9aaca3d8cd39ed407792615fb5e1b1a8a31d65ce828
+Output.8 = ae851a841531647e0a46669bb1b47989f1984a20f338c0af1ed1b6796be8a30665122601b7e494b27ef5582326d2b1c22a9b4e2d193392423226986dcad99adbcbb20c1513e4b80c7f6b2732475e5eb8a62c35b0e549da8fee0172a666aad8170a9079e368f1b41bcbc2901bfb4ef8c65d93beaf98fe75db6113c18cb111b3d8ec719b12ff74cc08c95202952a9253694f232be8307d7e13c860d318e8e20722680c1558d30fa1288435c0d94b6e63554d3af91a3e86fcb7825e97692fdaf3bb
+Entropy.9 = cfb2ffc9697daab880ff300b2d0a41c28b099b3a704fcaee1ee0ed33ed51e157
+Nonce.9 = e6646b09e52fc6a43b15346fa6919590
+PersonalisationString.9 = d6f092bd1110ff92d9d814ca793fc2b974b02e05c24588f453486f6725bccc39
+AdditionalInputA.9 = 929624cbf5c2a47f75d6d9d7610b7ca68528fd4aad2a3e87c912513af40c5d72
+AdditionalInputB.9 = c4e1cfb35bc1defad7585f72ec46d2abb1ca8725109de9d11ef7194868db0596
+Output.9 = 8d177aee91b7e512fffeadfae92c257d0e86ca70a9f7f5950463fbf624586b994ee1eb181ca18f8951eaea7d48730dd3aef54ec44a8392a256da56111cb2efefada54d40a8eb196413b434a166636bbc38d2dd10364ee30543c1801a573b2ca7cdeac3af2d283742facf280fee5abfedf407d8aded0472ab0737472068dcb4a3a1f1e0eba9beb9f4c59eb8c6233cf06c545a2ba47703969da7635813b484aa2116699d8e6580a083bbf8b1340649d6c1ed2d262d67d91c1bfa29b125ec46f5bc
+Entropy.10 = 450f27b3254d5f8fc52b388706eb184ed91770ac1ba3b10ede029efe079d2789
+Nonce.10 = 8d745aa6d6ca92faa65d4563bb8b5138
+PersonalisationString.10 = fbce615973a829e1bf32910a7588bc43151bbd28bc4bed214aac784a64cc7795
+AdditionalInputA.10 = 5584acd4db527b639779c21e4feeb5224db0e5a8d00fbabeb3515150aea1ff28
+AdditionalInputB.10 = e236d5f4397e50cc5419d63e6c546f5da4f20977f849f25e600a6f691dd69234
+Output.10 = 6c8c81fbf78c8f756f9fc6cb0557c41177bc6be6f860dbd10da4902c8e1f6d8139fdf5efda03d794bafc9daa88f0f27b6a68fc8f74798dfdb40b4f4d1b41230ad1524cdfd9fb417a9ecae336aa0061aea424c9b004daa943623b60349e4507854dc0cbd222a938c86f767ff4f6ceeabd95a1892a61fd194c53e2ba75b327a541be8724fc2cb8274d23923ecfc3bf13e9664d45894ab2cf5dc0af6728bd85f89f352479cbd4e2fc35d55ecb1f3078609e8e79c265ab36b1aa11222c0e9a9e073b
+Entropy.11 = e704e75c58530dfe375f46afff04c60b53bbf6064eb422900a30ceb7b9eab5dd
+Nonce.11 = 6d08c287c8908dffb673aae381d8f0ef
+PersonalisationString.11 = 9e10fbd7d3829947ff27c2795042c8f3de0bf2303fcdace14204f2b1a121f0d5
+AdditionalInputA.11 = cf3f1a6f76aa442e467bac41b72ad8dc9f65f72f7d819cb80368ab0cc9377d35
+AdditionalInputB.11 = 7b0b8726a4ae3e2db51722679c2c546887ed6c23c591f69ba04d3982bf310777
+Output.11 = 4d6e50d77707246a660ff4c30fba80bfd5d50a7fc6589c8ce01298a9ad41a49aaf278d6b624bd321e8e44dbd4f72810bf1751bc5c8b7c2abbe5f02ca4c89930c586956e868553c65dcefe424eed6c1c73837f38d5b723a0ed13ae9d0e683f7c67df42a8d5bbf164ebcfc9574e00f715cac1e2165d7785ed6c16dff50c52ca3ef8e4f90b6fc6f631367680cfcc528afb2fd44b36e65bdc7eac1b84e89d6926bc67f8fe597146d24ff2e11d1dd34fa194c457c150cffe32cafa58fda63e0733e59
+Entropy.12 = dc2b1d58051bcaaea2f7a244f3487abd9dd13132e48020c084391177f37090c4
+Nonce.12 = e49f14c3805b94ba08f6314eae58312a
+PersonalisationString.12 = 432a8166d184b5753d5665ff24e57724e9b420304ad1bd86d687b8b5d23fb604
+AdditionalInputA.12 = 26b43b327aad2209a2ad4b5893ff91b24384048be2c60f905183f61bb3a99f66
+AdditionalInputB.12 = 6d28a5f4dd27101c04943b1814e8f56a72bfe11c456a7361843ffc0a4c3d275b
+Output.12 = 54d2bb638335ef4d30bf03f1d87e9c356bce1db6f48954ed79c0f5f0d350b8a84d6e9d58eeed77aa371eb3838c379f815fcfc0fa94f2f6c6b656afcfc7c6a6c32556a4609f88c6717d35cdd1be5de5ec6000b3fe25ee549d8263721196ac643490cad2cc2198b7988139c2976c0fc1d4a159e0013c952394053efdeabe4b58e62af9e6729b4ef520942a0abe5ad7e1653e7fe4e128edd6f759cbe769d196de2b6b1348019bb2117813e2c096f74778cbc428a1c03fbdae977e156de1748e89d8
+Entropy.13 = b01a11fa180c8f7c4246a92f8bdef73b7b02cb94bed5d3bddc9a71fc52775b6d
+Nonce.13 = 9cc2f6606a9facf1b9f6a174fa7856a4
+PersonalisationString.13 = 1390fc090b015654ea800b2a76a51ba197364872bd572e5569a62b02e781f3a5
+AdditionalInputA.13 = 411cb153516e88ac3047d42554f130cf1f5e4584eba05b12000d57ce26092183
+AdditionalInputB.13 = 181671639b100af3c7a6a8e4c52f454f13c7842b9dc8363094a83489b0af3bd9
+Output.13 = 0fc49e77d42dd4e21547be63dce71228c5778f5846de734f7b41a736e8ea78a0f7e128dfdb56b21eff43f6bb7bfae1757815ba39a20f9b63035402c3a98833cf0624d68206d67c4aa20b89b6cf0fcefef25a8c10dd32bb4eaf80cf29221ff2cd4d2bcb7cde45a1c7068232f2db003dd391b546c2fc70d2e8ea381c9ec130ba0fbd85eae32a9eb7a1d600372babe998d80d7208914d56c6b5d078313e6b8c9df8a729efdad73fca37c68c53898bf59425460a9034fbbded5b7c738dc2310bbbb5
+Entropy.14 = 43c8625576b8f3440c13d936134ade09d6f87d3efea33a2b8df97730c8ef5687
+Nonce.14 = 4155f20d1c3dfabdca10fff13e8e8c80
+PersonalisationString.14 = bb10eea932e1189909516dbee5d579c363b2d78068dae2c87439ac6fa8717651
+AdditionalInputA.14 = 32f618446311f03a0038dae07e85e19006a55b69501d764c241f683be50f027c
+AdditionalInputB.14 = d64a97650e2f25362fd711c7abb5635672e16a02a1dd5ed8a181762e86f4f5be
+Output.14 = 54ee53e6d18e974913ec235a37a706868f217af33b25e8e5369d90071be1d01035ca331b8514f3d6186a9ec62b1e7808b7fa22859eea21e4b8113ef770772561eff7f8b6ac22125d002f6ba9f53b235f7d85dd5b601787201ee1423de5d971b2e758b3955a048b50f118c01122a8e657f69a63843bea00a46c4fc2ebbae36adaebfe3e6c9b1c82e498d3fe48d332ac1bf31ab4c80830086c8ee4b1ea190f8e269f74cd760f5a29d244064d09c1bc30832482d5205e35604a388250a7a196ec74
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = 7ec861a971e4a5171531bcb60e13109d62f91392b8b24ef9af0413bd44e3816b
+Nonce.0 = 721f6aa183b04847e45cbca9c84a4390
+Output.0 = 015cb92b0ceff3fec9dca022eb53cfed0f5c066e2bd2082801c6a5d3112a1df8ca2a9748cd190e95ccf2a5a86d0ea164c25cd612a4c4793b3f4fe17348d6db7f11b02a2a1708c6aa4b3fbececb8db1e4ebbe5231f078e9b841a768c5b5a3453c30ed3d21632bfe0caa92d8ad00c34e36eb90cefcaaf4bfd3c5d23198bccaaa224f4bf642de696660b2ca7b1425e57ae8cc30925b940b593921a0503155c586c2f4b4a9c3499dd7f977184f89a6b53bf847c08a0a8f4d5ebdc18aa2367bdd1d43
+Entropy.1 = 76ba96536c4976bf307766cafd308229adbbac3ee4bed239c83531840827ca05
+Nonce.1 = f56479f011e2c46dba76d738a5bb3d09
+Output.1 = 8b23fe629ab734b6204932ccd9ba02a20f7293c55ab271f7ebdde54af9543af9b071b27e48b83641265ed15961a35926a7830e808444eef27a9089439ed278c11af894c63184f2f8fb4923f1da2b414eeb3cf7414b99edf65afa1a02ae0c3376e525aabb7f7abd363b2cbd68ce94183455dc10e2b92b4870cfe35fe1aca83b6a916f791b9f642a20ea8ba930e2f8b565f316cddbd020ac94da9500021c3218864da7f4cf8533f3538d19902622ca7819cf725e4be5c17973cb3ac8487d2f4bfc
+Entropy.2 = b821a3684d176480f41d12c444d85ad78a76aedf6647277618d793fd03e9cb7c
+Nonce.2 = e7836140aa4039b91be35524a5accacd
+Output.2 = c943054f1319c1185ec71f1641ae7ef7d2ccd073b710dd7e85702464314d88f5d5316553a72a906f5d99897097ec87617a483971063dbfd88c495aa974aab3f633b62a73f95364f90dca491731ea87b308403821136be078de3fd88baaab9348c071bbdebf9d0a9515083613fe8e067a7d2b9bbee8a70b464878ebc95da6b7239e87ed1c5c27a06db189f05aefbbb87dbfb9978a24f4644a96bcf7f836af08447890268e8e786b4e0ce1fbdcb9e548d905d1b7fe8a3a69f95965504665bbf198
+Entropy.3 = fbf6e4827e10a380cf9d417714a1a9e4e8f33228ca56bc2e16d0b4281576ea69
+Nonce.3 = cc90c8f06c891546ae3827fe35dcd427
+Output.3 = 0819f6331d9c831ff9e9428fcc762386a4ef1cac711a29f726181abc2e2bc76b958b534e2030f80969cc277c1a02189621139eff9d9fbbf02572dc4d6a8025fc96ccc24135890f0a1b2f921ffc4ef94e2c06430d0e32769eed898eb274ac19c9aa00b41886645f55f7cd86cc42a98797538376caee380b50eae6e0398cc967a8debdafd16b8cce27773806701c5370e894a67fcd559e437c8425413466df7116b61ceb155539f26049f5e59f1f1214fe0d7111190d437168a9977e1c7ed716e9
+Entropy.4 = 69cc8d57ae9479c32dbe51ade985eb3b6e6544f32c95a7774bd83631a4cb3cce
+Nonce.4 = c27e999835c4b348f433cef33e0dc9d7
+Output.4 = 8ab9505d1c4cbac5618faf7eb0bac480417f8810069bd8413e04c0164b96c5435199cf6e40b684d7ff4dc1b7ba48634d004bce718c996aac58b8169b86899cadb8470198bef3c7f0710e641683f4e048027b4381e551c505014918e4aec94dee56bcfa08beca3adc14bfeca86ec722f2c360dc45c26ec73cbe6638b2dc49ac13a1625a66229d5327cc037b7874c9b3082a05839400c6b18f19e1edbca2e249a816dbb0979b4566d481d0d493f5281c1acb070234b9fd876e42363059d89bc4c6
+Entropy.5 = bf13f2521b5a6e715effab45554a85d5e70b059c35b1dd997daf02246ddf385b
+Nonce.5 = aa94f820b0c56ef0b1b5899955643e04
+Output.5 = cd8be0723808d583df5232df652bea57f043cdc004f8edf18ab7cd53b75b0627b1d6affbd8e7f27a8e8098cfa33a8b34f21cbb99fc2298d7f12e90155da1014e36d74781f1c48549496099b4a12b5780af05aa9cda3fb7b3641f30e2160defa2f59f1e8aa754a9fa3c0f31a1b7adff1eb3149bf6f6219e834cced5fc1ab357c0400797e969b2a11ca37af17342c77d2b4aa5e7fe49f3ab530de0041fe785216865aeff18989e9e7859174bf39ca811bc5cf8d4cfbea8683ab007ae6f58dde898
+Entropy.6 = 877a45679277a32c3dbe08285702dc3b799c344e9bf05f3621929fa48208e06f
+Nonce.6 = 4a33c7167e2800193222a29139792f31
+Output.6 = 885700296f0e10c506228e49ad393458112483d894f449f41afe8181814d06bc248f1068c0236b4326db64b9d12d302b2c5ebe57774fb5070e56b83d283c7d7a1e6045caf62e781dd5243ea75013bfdba0c2eef24b632719cf590012e6685dc8f9811370abf51c15013ca66b0e2164aa7d95ef00cdc12695313dd68534cbbb783ed37f7ca116fb3c40c79e869f9cbf13c294987c7dafb1d4eccf8934c769c487f1e593e316f91530ce3c6ae0fd9b9c7286f2d99b4262f55269b97e4654bbd575
+Entropy.7 = bddff6b625e8af75ff95d00371f098f98e7e46a9fc1c58225370c989c04790cf
+Nonce.7 = 53fb18229c3180a01b27cfe06d5ed81c
+Output.7 = 98281f2145b514dc3baa0f153c06b65d17a856096c28da6bb63a5ce72ff2a7991c1b2e56c54feaa872d203faa11b67e4746ff28f8d0720ee44eda590a235b2935a6f6eb44e4b99db7e4b06ed929d76bc3ade6d051e78f568c1da530715b2977ffe34ad73496d92e22b2adfaabc70504c5b07b254434f69fe77e2fe8e4c281159ab5ebbfa27fecf585f5e1ca8350dd8af08d614eb9c2ccfd23a528240d4c18f1e38a2f0899a7756f1c933af46a20d191aa3ac98031f46398f1d31101c8b7c5bed
+Entropy.8 = 6b9100a1a9f7794cb91a4839f0652d3d6145a560c902a65a2ed04fd64705f806
+Nonce.8 = 991cca4ff903c7c11b5aabdf3eeccceb
+Output.8 = 2a023a002385b786889ad4e90ecf4fb8feec1205ba22bea0df1186805676c89edf8816dbc74fc2c6f4f9cd99d5ed9d5d513119439706b45a4f694d765ff0258aa61ede082a0a07374a8b31a3e60059cd0554f6404d316c80ba2c1e48bddddcff7325b23eab2aff046b3d77b88cc16add5187f5c6aa21c60cde458eef4985bd458cadb7cd6e72073961267c76c4ed5210d6d3656f5212785e81e3d5dfd7f9ceb1be685051f18a942c914fff5b22eec72365158de583079594aa075e0805387919
+Entropy.9 = 0e4213f8305d5f79a03911e56f92056ca972740ed13c7c443003ea1950a752a6
+Nonce.9 = 8e9d8602dd03e0e48efa3d2262799bf5
+Output.9 = e6605936700593052d366fd6270cbe134004d7eff6b0e4d5b795dc2e592ed01529ff6454ee51c4e162d713ac58548f022ab327a7dd528c7e1a03b1fa780c6d642d18b2de50a572b5df3aac3b4ee2705e26387798a097dd1b3bfe91f171fe9e84a6bf8f40fd8e78b042dcfb84e502c1cb2fb8d90aa9160dafbba1656557cff61e9c778451e9ff608c6729b1bfce1586ddc2e02c1cd5eea75a3dbbea1edfe5c3366d731d1e8f6bd8fc6988e34904f546100e80bbb9b2e94aff5276844ff97f116c
+Entropy.10 = 800b8899668cb039c21eda997426aaad014ff6f75c31bf43fe4e6c351096b535
+Nonce.10 = 2819a2a2438a3f345d13ea74a0eb5560
+Output.10 = 7da447d31e9708332427820e939182a22fe9133d141fa92d1db3b27ac2ca062f738b54ec52b6d970bdd64791b8fd7f7311934a46926e2856963ecf28de4319ae2802259d35a8a40ca4d334fac9b434efe9e23f8d004d7375b04c2ce7bd8f18ab31f820f435a116b78a9176ced350f3dc04afb03d83e05ab877116ccc55efc80a75c9199fbb0389605d581e1a995f38211e71b892555cd5632e8a27d23db41397d0a9f9c715e5b27f784d7c20ddbcb93708f17656ec77d5fc72ca3b5e91058465
+Entropy.11 = fd1d6c0227e52fdc2bc487cf684b2103c1b67ec452424da6da6e073d4b0b14ab
+Nonce.11 = 97a121a6f769277690ae2d1584e602e6
+Output.11 = 0ae6343c01a33dd566c695fd8d89b8d940bfca8b8112fb2d217378a47e85eeaebfc95260336216538be1bae906d5c945ddf9fe4beec588d10e2b6e35cafc4956d408d67a522ea4e0ea71409b71fbf85c4aa1490e0ed60a86d9b4aa0af730671c2d5a754139b07999db03922468fc22b2773da21c3af92e9da846d53a6505095e657b45021109bd1e89ffaa243b07d7eb7f372bba7b3bbaac12cf8919a2f7acf7d2b47b16321ff9de306bbb1209fa521c5d30e9b3aadea89ce8500b2c1f04267c
+Entropy.12 = 0665e58153e45c179d7642324c07af0d8987c79b41b87e2d562c3d93a0f7124a
+Nonce.12 = 38d46ad28aeb68dc18af6d5e20248e49
+Output.12 = ce68def79d3e0526d56c97f95d415632a4df57ab187e264dd63f488a6692c65c1bff9a0315c3c5613b9efaa34bd8f778d0cc6f686a791cf95eee2fde86f197a71a352fffe6ca3d51fffdda29c9b926e95863b27491e0358c5c090ca858b876062260e459c7fb304aa28b82ff4739f2b1cae2462d0e2b65cba9b672a5d971da523b197a6c3b364343f97e40abe4a06f68c80e62ce8b49d0dc1341b2488d7471208d1c007ee17d6d8eb84cb38666e810abcf3cf94742a757b5e4a4be3d9b830d3f
+Entropy.13 = 76d73d310dd5e098a1e5b4b1fa695845742894c8af70a435cb2471c242f880e6
+Nonce.13 = 0d5df7286df0456f6e7c57a4f2b0fc06
+Output.13 = 1ba858b861bdc4eb4ccd356564fb145a49008ba0c3fb47813b11271cd65df113f9a123f0769b6a3c921ae0cecf25265256e36e287ed2cf389ebd7e29aab0bb74214304aa6ca9f10ffb7471e74bf61cbeb7ab1be1717a6daec94e5c2cadbadfc71b5dec408debb9fc228e43af3377d91dcff956cbe39cd34728e7f259f51dae4c75b13b89131056eb5380fea3ba5a8ed462553bf85722a3c5348f7d8a26caa1168776d841b6a1b2d7ffa9a36b4977fe9a50eb915c4725611534551cac5c3ea3a5
+Entropy.14 = 9168436a8600415b83062125de0ce6a998090216dea7374af08e6d3becba054b
+Nonce.14 = 94206c91dcdf9c7c3f3571c703013419
+Output.14 = ef12bd2b6dea20cd197ea9eabd98eec1a2943619cd2a96dd16a6c5485435e00c59570ff14d7d9fc09c99ade0e5ec12a84c0a8ccd5677fa9b92295eb2a620e8a0400bc9ad8a1ac1aa4969d8d04b77ad59b81d95cad75358698107dc8a2ff42adbd679ab29cc29cd6ea756f4c4e60c271c3134c48b5d5aedecf011e73c2663ad1cafe57120cc70137370760c350f4e9c0b8e9b01c9acaaeb56094434f4f87c67a5b5f674783204ab0d0598c06f0802a05ec97073c005f3c9f772fe0bb449c1cad0
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = f550a73ade2a81e2aac6c4fb3fff7591ea1b0a3b1f3729665b328322d65cad39
+Nonce.0 = 9699a10c9cd9ff305458d0dc98ae5754
+AdditionalInputA.0 = ca00085218dae0c745b6c97a71d46aba8becdbda6b3ced2c138d6cd666a83593
+AdditionalInputB.0 = 95f0300cd33da989c68e7af53e0b99b242526f6ca3ac96dc755f553204db895e
+Output.0 = 7c13c680f872b693769b80684dfea1ef9b175c18992dccf1209246d090c538b0c74cc09e8a81f24af51e03e87620b6084f948688666fc66e9e2e2ce0f74ebe404b80db2549c35574c9b5a7bb1aea8edfee08d8d711394e301fbcce81d71c051d0e6d1635a8f58f6cd397ba6986495d984e1eeba844fd1c743d920a6ea80abcd5d2367419999b17c5d7bd05fb26b6dc37620b5c56f28bb0dd8f4fd2df28ef072b23e12b4048e6e92a14bf5c99fd67cfecf8eb587d31e86cac2e96d6d65e49733c
+Entropy.1 = 4a8c46491abaee69859e568def790f61e8ef5795bbc1313c7f6a04573c4250f0
+Nonce.1 = bb91875f71c4814fbc3b74254bcaca90
+AdditionalInputA.1 = 224723394147830a34509171940557c265bc7c15012706cb7f2596d4e919bbff
+AdditionalInputB.1 = a391db8e3da2c01271d562a377b84e7b0b42f45954d6d99155b17288c81a5a12
+Output.1 = f529737e0f26492d7b56a4c08eba591ad34e433917671ef8234d05c1520b8e69023853a0639acd3641c1f461c841ae2cbe6d4f543d8053083c093797fdb79bd4608d2c78d4fd9a82deb3be23180c5a987ad9b9179e9245e384096a4a410c72e8808bea70076a468d8f18ced06a1f91051d66b683c8cb1e55ba7027245c6a8a55a67711e2cfb3f63d7d530b8308976a6492f5259a87d0b3ec9c5ac509b2c25949ba3551a2b9c8f231a092438487cac50a173039633d05c67095745e2635864498
+Entropy.2 = 907fad5abc0391eb2eb52a33a94440a25a4eaa44510e14ef693c9ec00766f422
+Nonce.2 = b9ee4f24128363519e9574bfa40194da
+AdditionalInputA.2 = b34bb91f6e63a2ac02e2d1f6fedeed3a7f5a87c84469fbc0badc14396be6db73
+AdditionalInputB.2 = b386a9db2806d42123390a899783282ebba3dd55a7722574deddbf31949a663a
+Output.2 = d48d20346fcb3fe1933090bff111ced621699782492cdef6eb4dd13d797f0b6b85c60cd4e9c54e7c3ef86e0c81f2d69155cd20455aa5fba6326b084f1b5b6dc6536f8cafe34538fd8c5dc084236cb707fe9463890abb7d3338a3a869698e9d5a2f03b12fa83fd361eb4c324c4a734336369a92b3429ab2f2463b1b1e01c61ed2fd8abe0462ec5c0d0b34521563a58d031fef357e778864d00f2bf5834db33f7c2f0ce1b39a22fb854fa2bf9125067be15f0a3779dfc9b016bf480b31698677a3
+Entropy.3 = 0e335b6733af1bb5cdbead51be3adf5d9404fae9d5c2532e18a4a75308d32510
+Nonce.3 = 523a7a194ea46c97dedf8edd4ca01c40
+AdditionalInputA.3 = 44c47974894c61a1bc5c7cea1016e3731202265d23f3a44f4c60054cfff9caef
+AdditionalInputB.3 = 086fc6c5142b1b8bba5647199b7a6c0a855efefcef7553ddcd90721af578d9b1
+Output.3 = 96cb6b4ea71d2fc2c905ce111b2464eb5fe33aaa77c15f468ba02eaaf45128051b2e972ee7e9e042039cbc6a9679ac50a2a6c277c26e6edfe9068062ef4a3ad88af7fe49da0b92547e8670402650e001b2dd966f2a8f663e97510fcc791204d0d0ec780ee3951484b74f7f455b343cee97503617af207eab2229678ae96b984388eb098411633621e6350e5d192b67a7d6a512820df34171f737c4d896016c192d42f8e5b1dee49c7144ebfeec641aee385b20b2fb3668d06fa0cdee2662c4a4
+Entropy.4 = d8f8e9ed7d147bceaafa2238fecda0549f900d2b4fe50ab4c97b1f4234cd9f05
+Nonce.4 = 801879444c78dc7c4e66008c610003f3
+AdditionalInputA.4 = 3082526b235f490feee994465d1fd59e357fadaf486afef08e9227b4b09dd80c
+AdditionalInputB.4 = 4517a7b5dda48239a92411a41a613c6b887f264b83ac9279cd49e27200823feb
+Output.4 = 82f87a256ca3d2e496d697dd52c62d8e89d55175c36dd0b25d7e7b4f58e544d5e989b4a4db9dc29ed9d9c07741f72becc532879759bf17a1e954da4ce83f573114e7cf7364d79e1e31a9825111715bff637b23a58fdc7eb6fb196386d5a8b5abf18becce3d97db59af82291ae2b647724fa97681eca62b2fa2edfc8570986a963dd4fd9d238ed8d519c1bcd14dca43bfd6ab26803ea7fd04756e65b3efa048eb892eb887f85405a0c86573167f64e62fab598a0f89431e44746a8ae9abb361f6
+Entropy.5 = 86c8225a2c1bf4da6c8a1e017cffce3e2e9be8321ab1b9322da0ecc53eb8529b
+Nonce.5 = 05258ab2e5834f2f5ae255cf828422bc
+AdditionalInputA.5 = c31f94ae4c0346c36911224f7de28923d38658a9a991954dfa616014c000629d
+AdditionalInputB.5 = 290c37203c95d9259d4d6e13f10584df40dc5261d7e2706cd0db032de7964bfd
+Output.5 = 08bf5fafd9e17aac1db7a50bb7e9080577d45de81527ac8f8aacb5e3d8971318ddda9762eddc386dcee82a4af97d6c790c4651be9950661a9b521f1fc71a92475e98202595541cc75a9863146df2bfcaf6e5effde1cf816eca3accf22918732bd768c01ea5e31a67f6b069f4f59dcec43314135bb863da9f92f11d468f5ce40bf9a72ff0251c54f42563f383fde78fd558491131e2e2fe8d9c78c56602cc0fca42ce76fe5360c273b6b30dedbf5b96afcfeb5b1afbf55c2f5cfd520c1a5d7b6c
+Entropy.6 = 676bc936e201ed7ace38d38442eec8ab8b56728732c78f50d2c5c7b651a60388
+Nonce.6 = 39671aef736140a276208c9443bbd056
+AdditionalInputA.6 = 72f9ae3bf30332e1b6655cf55113202720dba5bf69f0c9a7bb2d3fe99ca028a8
+AdditionalInputB.6 = 9c134c8b6ae178e4e72b05569e9a1805fe43393463c02e6f6ac845030317f1bb
+Output.6 = d32a85fda8427aaaa2f9f78193ef5291426963cfefe0442437779dafd35f32b91d091de472d90b6ed94eafc3940a81a68df200ce1e4a3712ab34ffcccc618970afc96f084883e56445b137033fff7113e8191c8b98a0ff24100af1587eee09f3bdd9218d6c58868be6cc7ac9ff874719d05752b91fdd4fb170ac811a3c52d7269edfe26449938e2a47b08f37ecbaa7598088c331fd45b6db2921ad0b42aacac4f95732e7ce8fc943b2676d22a509988c826a8fe0f5b200982bbb5631eb549ea6
+Entropy.7 = 83985d33fd3f7a61d418892c79e568fa62d6c7ae33cc49743062f824a387eb81
+Nonce.7 = 1e750139896873a61a22845d998d7a01
+AdditionalInputA.7 = ac2a8ab5f56e379a6d567637024d0cc59573b426264c825aa00ffd33b806abc9
+AdditionalInputB.7 = 64559d045f264318e570dd79986cbf8fea8f5311b03a83c7561d5f896ffeffe3
+Output.7 = bb3d0b1d4c8ae2d13203c3af720ced143a51c2c095d0a2a4b0b83d3886ba1f3d763514914836b5912f65dc30cc2f61fe973dc4389dc8177874677e63aa45f01ea27854c6dd0a9eb9dc9ed5a2b8e002e5de325d50308c64c7df1960d8438e732f8c436eac2444dd50d9dc0136bc589177fe1f1a9782a219800d1b8a9fa4d36e0cac9404c1e30db227a1956c3db519b0efc3d07de0fe863b46fe9b1d21683b2661de4d85e8eafed5b0fb9e899db59008850185a39d50eac34e7c187d882572e128
+Entropy.8 = b79b06ea08a86b871c3a10b70749c0a93edb753e1eb442f6243d48df55478c30
+Nonce.8 = 45ca1eceb003819b6c2c9c3c96a22846
+AdditionalInputA.8 = 8f45a1ef8745b46a258a4273838d8d22fbf3a753583255107238fdb9017004bf
+AdditionalInputB.8 = aade8a28b63cfdf042406b6326aafbf7baf88eada200ec8d807149cb9a29d876
+Output.8 = 250038ae86852681851a211915786f766792179a7a32e949261eca18af237a65cb1ec6ccb45e2c1a8e4fe213a4db7860f2143f8eba763a94b94fa30f1436851b7fb211ac26347113e673f4b7bb52a7fd1cd33c01f58a6853d83641e5bd5a7447d0b97abecfd03b55a74514ffd204d79de8086c262e9068c5c004cfd3bf6528eea9ca7ef2f6dc4ce334506edc55d4d32359f1ddbf696320fb4822ac1cf1c79ecb168f9c3781288fc304f299a7f66271c308bd3730ff7b0d380a13baa342a5ed95
+Entropy.9 = 00d626c3ca068c64dc073c1c4927085275414a06daf9a66f16ff039c4a3f2c96
+Nonce.9 = e059cde80adea5a2dfb7f6d888ffe9e1
+AdditionalInputA.9 = 384583b9652d8eac7d2c8eec19a14f8f9f7ba0bb7791ed8e026dc39eb7566c82
+AdditionalInputB.9 = 46b2bcb68a7264dadaa4d6391688117f103c0856bd9df8f825672e80391657fc
+Output.9 = ec2e0678b67c881f8fbbd892a8a513453ad8cfed5aa98f0b2e88f1b21f0b6c172329ae1651506ff442f5140c867308db9fecfb906095d9c0313e036725a15b63a0d3c6ba631722ef345b2a3bc4d870c4e3dfbfcb9cf84336cb680906225eb0a8051d7a36f573953b80502058373eb737a168a29eb68d4ae8cc9217fc62cb64c939dab72510e74e637a0741aeb554f364557f483ea3f1f2028615b3852a4b2fd6dc3fd0669682220d7e6dc73bf4a687cc7aceeb8b80860d4de7dd437618a24ac1
+Entropy.10 = c35a05e26d716baf236e8a695ae328e2788a1846a5fd2c2fa04d91f4904cc951
+Nonce.10 = b75c87f786d01ee1500c678a89218b71
+AdditionalInputA.10 = 5ebb9f8ff05744163076a401ea1f985f15e61e334f97f6bf3e7cb233ab10f2af
+AdditionalInputB.10 = 7a7860b2782fe04c0095ff2f3a0613f81c28942bf7a8460c1c6a832408f9f292
+Output.10 = 8ab7021f328c92a1e5a1ea643c5deb9d0a0584fff0ea0a4cb560532e3d083525b846a3ef4042bcf90c595b36480f4f575196fa573e858605efe08f7da9f6e9d5baa22624255363312a2879aa997f69a3e834727b79212f8ae8c058450ebadf7d24fd8d08bad38b1fde9e9f04e6b9645d9a63f8972facdfae5aeabb71208f708373be24679881bfbcca4ae4741709bbf75063419bfd2a079e0b386adb8c7bade05295901aaa0287fa654abccb26f0bb611a3957808e0db94bdc463bfc4ba35679
+Entropy.11 = 7094eb8f4362d3c682b9ea841c5f3f4fece9684cdf90a64648a308263f960b0c
+Nonce.11 = 6cbe49f3bc3f91a1aee6034ae57938fc
+AdditionalInputA.11 = 356af1b365a70be97aa88058c12b1e2bb6d75905077caabd13b1de7c44f92de1
+AdditionalInputB.11 = 73aaf6b2171a959899af57f66b312129275e3926bebc7af3a1fadb312e313a0f
+Output.11 = a455e30a961d0e545e7060e58957ca8f8171208992ffb69a3ae8ee9aa59945020a1776a3365a622b82df14b9ae163a457b1cf9c325138bedc8cac7dbfcef896b2df29c3db67d622b53b52f06ce11c7b7b9d41913c0ce951e5b6e91385d43a728e1795c16a6f305cb1af6894f08372490f600139685f54d9b3a6d8253cf1a2c1a47e5c843676d0911f326fcaabedaf9295e90d3ea8cb667fb223d08a2e220db2619f1864d6d50922f031d939dcb68d8a73e8fea3136da0988a113c77b7d89e179
+Entropy.12 = ec581c6bab9f3650e4f81986d226c7110754e56b55203e3878a67ed363abe0ab
+Nonce.12 = edfe66023c6ea2e240dddd067dc2ff82
+AdditionalInputA.12 = 24ac39fad4e1c34c1610ce79b8d9f429ee1b2a84b90e51b0aa1fe70a2f0db259
+AdditionalInputB.12 = 3133186792cc1697ee64e4ead8a25212e1c8aa9facdb0ba32905576fb94fcdaf
+Output.12 = 294e71ba9f8b9c0ed24a79ba9d3b97843ecbe28c203fe5a11d00a91bbce3557c8786f540cdb1dc3662ffbd7238a56b9b8a422d2d8c689f5a1ca64cc888edab463c1e788b89f063bc6b78a19fad19e7df5c0e4484f864228862b0faa43848fb1a03e87d41a852313283d96dcff87c3138918e08a669c9ea2ac75e83037901b3b6cb109fc1daf38439ace1ef104817f47e009c2635612fc3a26c7d4f7d219388f08bf2f71b79615dd5940dec1237e40e34ebcf01213c355c87c7114233038fce11
+Entropy.13 = 9771c148e73b526145fb7cd020d8d1290b44bd6e9bc419ddb63afe8b93c9235c
+Nonce.13 = 2b9b1916d36006ceadefb73ce791a240
+AdditionalInputA.13 = 66660895abe90ed678c594c40a48d3e267a8cfc55c934d862c53003423dfa804
+AdditionalInputB.13 = 293e651964044844ca10dbd2d28844a9343a978e6406e14819478da868145055
+Output.13 = d803e3e953aac1115a9768aa223d05ef99e81decdc1d288e84942d66681f866b7431763367e0cb5a8d3c9d0bb06b8d032c70005315d5afdb2a73fc96a2dbb759987a6a6a10e1e80246b66808d704c42e1f64e0cbc976b6bfd0c45088c64636e7ce036dc8063e9bcede4116b1e6eb44733946f820713feeb892e584dace4fc3da0dffc40cc2ee5bec8bce062f634d3d7edd969d42267f21a8b153f6ac771d24d2440574fc4a15b92ee0035e809a0ea9e790ae7a8ea9c4feabe36bd0e89821a1e7
+Entropy.14 = 15b572a99520a823420e4223ef85ff32250d6977f58ae95b1ed004be62ffa57f
+Nonce.14 = bfd8f7be44b81fc23cc1a02b30b9021f
+AdditionalInputA.14 = eb9e19bb6eb7b714dc4d56243897916364dae7bb3861a4697d7d3f2b149db843
+AdditionalInputB.14 = 156d12c7a1d0af2cb9f2d0610cedd9ed3b982e77bf4a9dc1ef0f71284b751ca4
+Output.14 = d3b0b0ac5150afdb3d9de12d2c8a7d45109436ed9c316aef1d1fc5bfba1cd37cd750841146dd08320539eb1678962e990f7b7662b44b918447e173672b873b8ab0348306cf6ae2bcc6756036870745436571763efde334dec5be7bb9920629a36cc5db66e8824695cabecb8bf092858e095a2a520eff140f483ec528131c850a8eaa48d8c997fbc810401ca378666d84020fd34af77fbe1152523e979560708fb15f3b7981e333ad4ee8c2fb6021a562f339616823cac5998cd919f82d43f41f
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = c226c99e0bbdc88687d0255efc80136a3e76a5fad39e4f163f954365000ec0ed
+Nonce.0 = cd4b4f1435bc949900b6524b55d78eb7
+PersonalisationString.0 = e885aa3050cdb3afa838e5ff7c813c04b0095465b4ba6c4c54f92cac717e53ce
+Output.0 = 2e978624cedfbe0b48f9dc21e4ea31d58c517bcffb0e8da48aa402c275a120d132f80502400be2f8c33d3bc16f677a901d4a9c1cf48ff7a558ce901f5c14039b4473385ce69010e3ebf5454b71b11ccb9cf1851c2707d1c56e30615261c77888886fce04f312dc5d93e8ca758538d2520fa92aa59e90924ba8d8595a40734c0d7feae97ae58ea2c418543dbcc30c2478b06245a7336a3c9e3ca8943a4fba8701442ecc88fe3b84e3eaaaaec1efc033e47bea1cb82a2a867ab121746226667481
+Entropy.1 = d0a1d38a02881ea4e112344407be2055f96239b39f0751a1ed267f6a77207444
+Nonce.1 = 029eee3c270d1b4e8e0a19d73983cc3a
+PersonalisationString.1 = 5b768d026f40ef55ed66e19834d95304b9b6972a40dd3c43766acb87914879c5
+Output.1 = c801e38dfaa17b2185b61cc12570450884dfa272a67ebf4820592fce70a9eb2cb2ed13fbc39dd935c54cd1a8445d70c6718424db84e6b5e76a6efe6c1f86fc51327b72d38efbb6af9d3a1eaa9253e3b72c994d939330e5eb47c87afe7312c47719d09616095aeceb4680042944554b3c7a8b58754cbe2581b91040d546422c2fc8934ec905154358f45f73f66b9dd8c6cdfbed1269e0e73eda25f64c0f5c82a43e852b6f92a98e62ae1dd8387910c2f352a314242ec736131580799702b3f232
+Entropy.2 = 69631db949d342739b49fb8220fdbea39e5ef5329cd3244816545bc3c9b94c00
+Nonce.2 = 06bc4c7b448b9c389a35d47197707301
+PersonalisationString.2 = 37ba849d3ec78b5ff44487b0bbce6edcbf7b1737aa99b632ab3020f5d9834a49
+Output.2 = 573bcb166baa08cd384bfddd7ca98de22af6e5c4013478765cbeda74a2de6ec21a66b40bda796a8131d9f56725b6f3673f2374b0002d1e23ae0c17571a71702162d2ae1c0f4dbf101e38eb6dd91d8a7a6782e46f39801792d754a0394ee38127e1f3d6d759b584a876743149bb124a887614c30cdc7842b4d48d80d6a3fed5c96d2f6b30e6e183edd0357bb16927332a78f55c79a9dc7a3f813e3026a69d079b39c31a44a6b544cc3d84b21f8805d8db97b4ca75760ad53cf2c9d0e4e468e382
+Entropy.3 = 866bb09d74ff6d9ed788def6fc410e70c755051369b77e103da9ec1a8da78476
+Nonce.3 = d83d6d5a3f03e7f8297b9cad98be7068
+PersonalisationString.3 = 7b06685f6db8fa2e16dfc704b810e7fcf88440d25266785b3e6650df42fd1add
+Output.3 = d8c4d3f5f3dd127d56b721b5752f8741e2f484448002e1372e5c30ebd2522bc58034489fa7d095d8311521a3e05d698d3121b30ccaaa4990ba16c79d121f1df2da7e6a9fad52d851b29060cfd5b134c2a610d7ca710f49741f69a10842f1b407cc968645f9bff967297ae316f262da03be788faa4b67c7f2bd421fd85a0a9bad8e15dc4db371365d391d60c30be40e86eddc8a3235fd6e64b98fc8b2b04f83f2f1399d6b2f49b2ba03ece6a73a4c65ee93df15db5700cbdfb57384e1029010fc
+Entropy.4 = fbd6587801700d3f27e437dc2f016d3533f492b38fc34fe8e9fca7d898649c86
+Nonce.4 = 48f13df7a179cc6b1135be1c09811b51
+PersonalisationString.4 = 17f3c855de72a34275288699d056dedc0ac6ffb6e679743598af9e08049a4d12
+Output.4 = 41456396fcecc8623e5592de93ca0b9d3eb8a3ec2484b1846fd2dcba50f8493ec2ab6c9d004800b82be94dab61730d82d6a0c6273fdf37067f7d19ee137b462b8f80df50f92d2937fb2aac183e24f06d384bd62f883cdd35972bfb1767d41f44a1324b2db89b1192e005fe3b8dd1dc3704a57519994de304e4ed4baff4143038c3d7a857a8b0e252d63d1f1451d313edf45dcd1b7493da67633e24e293badf3929e09a6552900eb709d92b6f61d325448efa3a1956426f35a5397beba63ad0a3
+Entropy.5 = cabc1f91d773df45e9486463a14bca91a7a81fff5f878e1b9fbc55fc75b38ab3
+Nonce.5 = 8299c3957b3722e2612d05f888bc41e7
+PersonalisationString.5 = a819b53f9e30c48ad7e25d10f5951380c4d2b132fbcb429c7b33b5aacf261cd4
+Output.5 = 8c7c38e525169c374671fa388beb792f52e2ae9a9523fa730a51616b1e8588a84d3b739d3a60e4932df41effbdf6de7b771d67c506371367188e0ac8d1526f53e1881b5aa13f9853a2fbcc03bd1650957501b85f760239e110714a22b9f8f29335abc98ca68540a6eacc42679980cf40fac0a53a9808cd3d21ac5c077c4a081ac6ffe9acd5ad7f44816375ebdb0f7936bcb74f6f5493f2825502edd4bec79cda16f407026ce092bdf56830d00677843fa19d3fc7b0f0462ae937f09ba7bfe131
+Entropy.6 = 6701625b6756e0a8e8de1d0b9dd19212319c3bdbfe9f297bfa037a6fadfc2754
+Nonce.6 = 2a03a06102767ea29caf9d097699ce9a
+PersonalisationString.6 = 89dd6daec1ce4112061ca7f2fbdc60f33812aca9b6c35ef488fd0696c086af45
+Output.6 = cde347b70312faa4526626c1cbdf0d9519abde1120e9b6cf773481b0e4b402729561a81a8f8127d316d42bfa0bff2799f87445fa89220c206a0a9e4700c95b99a4fa3f77704f3b513b2b8ab5c84664c1dd7e30834d9d7a0e27fdd9922a311cd9474bd5e824b586652a5a792886f427974aa4673efe1a5ab6391179277a2f3fe4308516f1a7ff04a075a1fd3178d4e1117e3cd3fb8bd3d666d5735b7b4362f5ba784453894ab9625c1bfc121050d22ae6876ff0fb5688853d2e4acb064d66ec96
+Entropy.7 = b67d67c81f6bafa0cff2843581cc474afa2ba45c09a26d8a03daec1f7a60c560
+Nonce.7 = ef06c7bb28bd8aba6de1562a2491ba88
+PersonalisationString.7 = 99d8c88165f6c6d9a7d86e557a9f527240bed0849074e3f8a9184907dd8bdb78
+Output.7 = db591fa371e527beedaaf1d68acbb4a0a0d97f019c7fe41363ecdaac4374f5e1ceb54796b4934ff3bd316d498d5858c8439f99babf20a0f3ebc95b5ee54faffb19abfdc2b72306f5c8ba90bd07b33ce583fc4c01fcd622652c26ea70081ae26a09d10ad4656cd9f2f2039ca8984babe2e2d9ef912e250fc7449af58568c7ab2e2208230680db786668a21e36531fa4d427bde56204232cd6e54b936ebd010fa630cd631669df347c3fb4a1c653a518ac4d65d6da36699da39332acd4fb14e9f7
+Entropy.8 = 1263b3bf29a25c9adbd52709ec333099f4d26adfb9b3356fe24fcef8bdea882f
+Nonce.8 = 30c58470d8e4d6e4978b47e867bdab98
+PersonalisationString.8 = 900fd212a376dac224a175095d392d3d9e493e52f16d588d435be5b69bccd67e
+Output.8 = d938c0cb81d87be4a7df27d93fea45a92f6826a27a7f7d32edf15fb60382df18f4b471b52a60f2a63872438d8da72645fa98f3293ae6764c2cbcff58836497f73cddd83b1d8e216bd54fa8af3020d632dc69f812916f5df354a72f3d9d8fabe0eab9fdf40d3a2de6906e6ea6d50ddc1359ef384d2212cc0b8d82ae03fce1e5096d1f8311c7b6237b1a3cab7b40694eca12015e39a41a1c5cd30b351182a5392e0d27ee757c1de7ebd5627bdcc888774bbf7494103e7682c157c88b6adca638f6
+Entropy.9 = 4dd16486f7e86a2ed5ae8b3bbc2bd537b2d86dc8bc86ff1344fed3ef0c97e07e
+Nonce.9 = fce9abc0dc444c8bb2ca2a955a7ccd42
+PersonalisationString.9 = 5dda276a294d8116fe0bde3da82d25cde25d9f5eb9e9753a8a28c5d65816837b
+Output.9 = 4b4859fd7138ea1ee74695fc36e44749b37a21a5b736b8cfcdaed7a079ce2ed43367715725c60986f31ea5f0978e5272602b36ac27deb4467516a32f9c095d081d3f7fd94f024d8fd88ed0ebff3bdb8a31ffd0fe48cb68eb6d3b8780a92760ae6de81b3b215242dae2f033f089fd979934922151cd32660fb0a2a4bbed7eec7eecffd352079ebf56d80c23912fd6355bdb5f7f5dd63f2aa24afdc18c875a05cb543ca333758e2d8375ad34207110591b0c46d2ea552dd027ffc5040367fb00fc
+Entropy.10 = ea159b4a9efe984991f9ab6b94b41d5c8c077efb6466c24039c66e1099bde478
+Nonce.10 = 0e4df51d15cca504555458577e645887
+PersonalisationString.10 = 6ee0cbc6e341b8032105d7a675c56a24afad41abd7f5e716a089f84c1f18794b
+Output.10 = f487e93d0644f2f77e65af549082c1b2c8308d05cde1fbf5bf70a6f38eada3a2a21c38fd3f0c363aec51c7c101d8f5acaa61d7ebeba7072284947703e65612ee1d629dc365aaeee4683e6ab25bca4f52dddb7981d72d526d9aa368a2286b698ddec1f7df3c91b0512d70f4065ee920005acdbc115a628b13552c668e83382aea91b6414769fcaf44c9ce97eac2fdb6bf4da02fce62498d7b9af2a52b0969820041cac60e816b7d4d641ae6c4191db479f1d4de867b4be8dc53db1753d4a0f92d
+Entropy.11 = 0511f38d07e8590b4db94e962039b90efd3c5ade0b43bf2762a4072ba22b073e
+Nonce.11 = 84bb72969a96fc7b96a5c929ad2bc00f
+PersonalisationString.11 = bc4bb885d222d889701bef54ff198ebfec28b4c346aa25a206dc00df6977d655
+Output.11 = 658b2fe36e25a450c860bcc8ae3025480d14df174e2cc313ed721d3ff11e7b0e94b7161e7d31cec796060c28cafbc8c08cb5e0615e4c37f4d78a2b08f43ffb2d0b54a6b269c04a12c26173e268c297619e89b726d11c340135fbe46dabc249aafe3c1a69b45b16bfb3bf2652c5980b1f82bc7bc8668fd1e6bc14c3a900ee223812ef9201534516c0082a97828abadb49b0d71a5e0e2dd4c9226b32559486626c6f7c0483a56ba876dd65a49f5660ebe47ee143eefd471174e48ad9b47088f587
+Entropy.12 = bef178f2e5d4a9d1d06c7b9259f07cccfbe10df897c58bb151003dc7ee6ce28d
+Nonce.12 = a7b4db39f27f22bc9d525e00b20b68cd
+PersonalisationString.12 = d28af3d0ff436488cc480ebc15845ae1ed7f61964b49379ed5a409bc50b3141e
+Output.12 = 1cae8fc50d5054ab8ef4a442091d00cfcd5c69711d59effc0d96d9faa6bbf3f43436abe3443009b29d793646328d0befd1bd9d0e14e7f148789a84597a7f83e73a43991e9df0f93d7c0ea32995d30925f832240f97162fdc1ca4a36052e089e2b6bb1493d64a25336b221dcc391290283459d9a70bdaa29fcedee59448614f004d411ce7ea51ee1c21980b94ae8cb8301af79107b6e55492ea82f4b4c77bbca160ef9d547ee2623b32404dcfcd00ba45597127f10fc2f6dde1e2877ee738b920
+Entropy.13 = a3be3f8ffce66eb94ad04be74d17d7fa9fae16a8e2738e0845fd9c9c8654bd73
+Nonce.13 = f4cf725d0cc2ae9e9d4b6e04ad251514
+PersonalisationString.13 = d00ae9ce52f8a9515acc207b96fe56abfd5f89ffe55b52d046afaaba56b09444
+Output.13 = 686960f59b4af2d35f747eb1de19640f01a3f6ff19ec754ce9bab583ba2f4ed6fcdd7ff5e5df802a98a93ab28c4437aaa8b6e343efc608f0b7162eaedb6047fa2ed394a3a4c2571891b0a4f8f7439383881bbea1f5ee2acb40598e10b4d77f86a1616632ccb2edc6fdd6a42c972e9db1925638d83a19cee00b7a43cba278e2d56d9e9ce328b04f0e89d75880f374c1da8b2cf1361aeb6d6aeb881aaa63eaa3328e5f2a6e442c545c050a4255eaa2bf4fe812bec04cb9d98b7daf3ddb081b4849
+Entropy.14 = f40b9117c9bf9058139acd5bbc51267d091643c3ea487a3e948475f629bd1843
+Nonce.14 = 733bf048e5b112426979a9879b6a0c10
+PersonalisationString.14 = 58d91008875f51d541c6fbd626a49a798dc51d9cf2e8588808e74953392800e7
+Output.14 = 1794335e21606d706dc89ace28c60a15c0c9f108f5ac882b103eb62e225de749285e5fb0be98a5bdc26e3c998ae418306380941d78acb7c81b91ef41cecab328332ac7404ace0ea858e7835534f778cab3e3e4eff043742e4f7d4d5725bcdca0b6be7ddbf79e57fcd1d5a4279f074a599abac2cd281ec6784e29d9399f5ffa8def3252acacc59844c0c24c20d029a89b4407e0b5cbe9a8d51241dd36bb82c400ec4571dd1baf831d58fed3dde4ac7f961be6ebc18af6bfa922a32b81ea11334a
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 0
+GenerateBits = 1536
+Entropy.0 = d7dbf40b15ce2ed99981e548230f2b0da3db0f89a19d35f931545cd6f631da41
+Nonce.0 = cd0d2912a9f40d0a10573e65aa23d33a
+PersonalisationString.0 = 89e9f6570f95e59234f850cf572f2e82dd9b898c77b83c466674075227a51ade
+AdditionalInputA.0 = b263d5355c94d9c9dbf430d763ccdff333616b955bdadefb7bd74d3d08a16ba9
+AdditionalInputB.0 = 32dc3f4b48126cac341695d1974c67bb343f0e2d1e2550f701b2b611ae3c942c
+Output.0 = 1ee4e48d8332ed174ee3be9010cd5c0258288b7b952c14d0e1e365a675fc6087e39e7e40fb2ec07691e40732aac1a1cbf5b0e6c551fc17f81be729b1596eee49586d2604c8587fbc0acc0006a73fb84f90680e135d9e25a087a6910a82d93d8d5026415981ec8d1e6b3a12e25d6295fd5217893e50d5e57704ea5d221f8d0457fc4de51d7c5421d5af63212050252252d9fe1ca5421c1e0a2b262ac206f1407e000a55877bd5610bb5f543fac0de3b5834fd265e34358b37fad97aa404649d78
+Entropy.1 = 8a236b8c0cfaab8a9c0809064f164d07c183a7b78703eee797d77e515d0da612
+Nonce.1 = 47b2b3e33e95b2f3c2b8f8dea0c207e0
+PersonalisationString.1 = 443ed6fa3941e0b67a107c6545d41bec3cd75746fbc910507e2f75d9ea2f7795
+AdditionalInputA.1 = d71b802411bd0694097d27dc059cc512c38612147ed1cba292dca30de102f719
+AdditionalInputB.1 = 13206242a65ef05f616543ac3bb308ddfcfca210a3dfe06e627acf60db11c50c
+Output.1 = 7cae1fd9f7308208bc2c6f98b3a5a05c4a4d0250c759d2be6dcdb54c1c597b7b301d4cea849126fd6d724c240ab165d8b75b81cc7120d2f727c9b0c0849e32611b79751d175fa7189d096eee7887b53afb625b4e543b67681942eb98c871a5ae4d24e8db5cf477f6109186a0a2eb64188abed1eec15513d2408fcc5e97d8b99b06e65491f6a15854091b10ebf9fd9fcddb5d836a089849467f3a6fff40c1640696ca1cab392f3dc24ccdd9568d971e67ae452d36fe8a320e6d9a9bfd03f499f3
+Entropy.2 = d433ecd48f0f8eec52abd23c7201244fea49c4ba16b684d402e4e8e391938405
+Nonce.2 = 3d96ab5c95f13aefd4d63449c5f64fdf
+PersonalisationString.2 = f0dd0c4b1b25c923665109c02605451c55b7eb07ed3ccd0591f2a912fa3ddc6b
+AdditionalInputA.2 = 306791fe4783249348ef2303ac68a8d1e53b2ddc03c5004a5e7ba883fa251152
+AdditionalInputB.2 = e4eb15bda8ff4ef93d3ea03748090b835cd93bd6366003404d4d8277c5f1e76d
+Output.2 = 8780007645be1c9c288091a0393823026ec2c0ff9fcd61f6fb9eaa01b56b7b9cddecfd51e7a6263fe321e6edd12c17fcd5d036af711ac26ebe5f9602076b0334d055a1a399334571f6ecd5898c20011c05c153731dc31077679f558a4e1e75de4b7056d5ba5edd721eee2a18a8a74c4c12b80f80dd8f81f41e3cb42d654e302a96abe294d8c648e8c577be58a9fa8ff4dda2d4192f1ff3b0319d8f9e0d50a30673a0c20b83e7163375c48a0b85ae9b46cdc7eb4ae318230f0b8acc19ce908201
+Entropy.3 = f13704506d90cae5638820e685496d08364b60f210c1e3cf8edfc662da150897
+Nonce.3 = dfb760948872f8c2001531d8102d1cc9
+PersonalisationString.3 = ba7a8b96d6b005582dc14bc9dbf6e3a34b02431a6fc7e3c95e6215d92a882b30
+AdditionalInputA.3 = c8daad23ea5945eb738ad2c1ffdaed89ffc3fb23a192ec8f33fdc2fca6860399
+AdditionalInputB.3 = 70c9db40ba55f426d41fa0ea2aabe40d4d7c859b497cfe3aaaea39d221e035f1
+Output.3 = 52970c4b998d5837de02b3dbab4e6904cfd0315e5d46752c5cc977da79858b2ff798f0c5b5651fd91f95624a9f5b9375066e1d4705daca5df32c5022c589f58c8eabded1c03d0e195272c5f1595fa5e8979617f6b40a19398af3157585e346289c43e416b6129c64dd64f3079a15f71a824e10d832018590f8af828117952e783c4dfc2b27c86bca3dbd644f5d448bc195216e7c279d553f7078fb24f3251832c0ccbe0bf2331047c63f68b138561187b27a4381a2ca52279eeb680bd112a896
+Entropy.4 = f6e6912160ac922377567d23314dfad6fe63858acb53d29eecf2799190c76803
+Nonce.4 = 9c79a142bdb9db4d16844b37f4c1f6a2
+PersonalisationString.4 = 24133ed4b4ea655d010cbb09de6aa7ec2f307635d139a76a6f53134328ff16f8
+AdditionalInputA.4 = 66b1ac9156025628e845e4d16afe9c29eccb473fd8b0a76dd20d3aa44b1eb702
+AdditionalInputB.4 = 401b86a2b4271d27c7ece175de3e0ec606c125a3645ca65180ba096bc7f7f6f4
+Output.4 = aac448a6846ea837589de9c75b80e5f0f73b3aca9c5ca35a0a6992152ffa4dbda84aab40950255aa814b1e37fb628604c14fb8e93134cd02b78af6320fefe27dedba5af0202cb4b9b6afbd33623f3ef650eddc4105e898ac2e2a2a29ed69005bd7402f6b882df98ef90433c263e0e746d3f54ae278f9232ec1b6d5f1536f87536ce06f4602e6fae888b8859f76938b5aa458abffb636f098fc47c62f56d7584d762c5d3effaa26bd68f897f98500c74b84ce7ccfd5bca08fc3d4d8947b00571b
+Entropy.5 = 81b3c1c4f9750b1d0e70c92c28d20154fa6deacca86f3126180ab070e235ec37
+Nonce.5 = efef7473462f8ff6d1cca84534060bef
+PersonalisationString.5 = b3ad0c14ff8819c295494e80f0214014f965894dc14441ad2aeffe51e3afe150
+AdditionalInputA.5 = 503e69b70f62573f2436766503937b4980343d9659e8d8904025db535c75aa7f
+AdditionalInputB.5 = 43fcaf436abc01a27be29dc8a6bda725fd8a61f761dd9fb789d2f14e26787be5
+Output.5 = 272a34eea7a52e5c010571fc7309bdf297358f22d5054e10636f19dc6dc20ee9c7d311832184f8f358cad9f9c4b24bd6aae1f79ca917bbdc2ce82e1bd239015f745060ca8bd70c205ad25ae1188192b413e93e8785f8102b9a93dc5fe7be3e2ac0b33820461e9f7727ca40dc422eabe48d6d32165705da68ce4af6f92b1cde8417a0f03f957a1532a5d6edbbde3aaa5fdc31ef8ef23bb2328dfd41d21aa9ac34b3253d11db89621ca9026849d6054d743e86996bd0f3deb53caa56f9c5aaa97a
+Entropy.6 = c74f75725410f6dc88724e1d4042e65876d0c07cae476458548e9924862bf1fa
+Nonce.6 = 1aeeed8e5b54d980d76cdccdb282617e
+PersonalisationString.6 = 1ec1e3299f2d935db01aeae77e24e4a12c7acbf390bd061cf97b9cdfea49403b
+AdditionalInputA.6 = 89f75d89d4e6f01bae5ca0243ec0e4db5b1294243eccfa7a3879b393590c4c55
+AdditionalInputB.6 = d7623a2e811e3759fdb4111e9975fd718e014a4645b4cb39ac88d6d950d2382a
+Output.6 = 76c2ac9498598843353bf369e5b2466681efb22415c891dba3706a15fc92cbe9959275766efccff5925e40caf156f3a2ba47f20397a877b89c4715b72b9673305d7a6e7f04f40c5d9c7b8bce66097a69ab2148cfa4f37d138f012b627a0c2779dddf42012c96020b0520f576e5a7f121687dcd0c4ece1282aa0d46634a881aadefded803cc125625f309453f65f16cba85d03b083ca6d603de271760187213e2985d1f09dd7c6e7378ea5e54c2c1568d11cfe4f94420c7472783eb8999ba5f0f
+Entropy.7 = 9986c72fb73e9b17d2be1a899258135ad3e8bbcb3825698194e6c5e36c335fdd
+Nonce.7 = 8746f8604bd75b089ff33cc30e6e2a5f
+PersonalisationString.7 = b125be003e38c2d40043a26fe22d24bc93e142b86a7821a6fef68f72edd0547e
+AdditionalInputA.7 = 4ae69b086b45876efdc54cde13919e12705539ac595cfa0de346cec54c5a6dcc
+AdditionalInputB.7 = 13da91d9a02ff0a2527c4c9370896e734d92f92c9568bec22e268dbf76e913c0
+Output.7 = bb21f51cb988eb1c3f83467719b42d2adef2d07d24aae2f09d090424c349bc616a87ce7cf7dfec8a4a2651edbca628f6b07e73c25756d3ed67547e723d0f0f619aab1bc775eb509e589844c8e28ca868bb95d79f88828fe7f19a76e3b49a77e40d7fd32460f00a07b8cdc9573ecbb125ccf677208dfc2b49d816d8ad436e568b3b086b7fd5491101099c6f56fb8f154eb52be4f17756e482cc59108a79b0cb1ce3b43e619c1e14a84c6ac93f5fe20ed0d809282462209536c105c08f345e715d
+Entropy.8 = 6f1e81d2fdfc2f40a8454ec91407665c0771347e18860b4c3bd79e133b2d7eec
+Nonce.8 = ca7ec8767baf20cbd123153b6e80015c
+PersonalisationString.8 = 7e283de6520ff84944a760dc14c2d1b976e5a09c0e227a59499b4ddd83a102b9
+AdditionalInputA.8 = aca28f2094a28265e538ba59b4a0c8984198312b643e93cbad5e7b8aaa8c8120
+AdditionalInputB.8 = 62049e29ade953bcd8eeb7051b8803aef7a98caefc540d4e4fbf08e067d0291b
+Output.8 = a481248a2fa67f1defe4e9d4f26304d30004565e4880e4cdc37e7eae6d1ae91d2c052856764317af5cb89847742be85ab67c651d654c8f6f6f4e014734d6018330b91c763c39fe95b68e071740818f50705572a2ac391f007a7e23f6a12abeb03779ffe9520e9f0f840cc13d4a94b2946ea4a69a63dabd2622b8c00d65e2131ab38ed82ac8b4a33429aa6d844dcc6afd507db02bb67112023e014dc301b75f9e821d3e212ec2a34bde5b64497824f2a54651b7291e009615ad57968b96e6afc0
+Entropy.9 = d00f31999a8aefcd4aab14b74c5190a5e4037a6661ef1a4e107be81d3f7ac922
+Nonce.9 = c80f10d28a578d4c458a21aa58096ae5
+PersonalisationString.9 = ecd8172e7f6e23ca272a69fb2ea23c9ee85d763e567d5f6a684a0c12ef851bd1
+AdditionalInputA.9 = b63e4f662b9d9107281da4e19e8f6033ec47dcf02a5c5bebf8148492a948d4a2
+AdditionalInputB.9 = 24d1da3fd579cbfc9496d9ef3fbd7b72012b3289b9f132316eba13cc79def6a1
+Output.9 = 685d45e702217e797a0ee0fe271c1bdf72915ea61f2163f8544d8ab41c6cefdb581fd98f522bd656192246314dcd6f3eb8c7c82c36e1b82ae4c48165d44e86382148b0842ac2c3fda2c71930d3f569a4ed6a4b14a8cba82204fedc496362c23989e6065e134106691849269b1a4aaf3dfe98cff1a8c18fa814eedd6c7c7893c567b9cb45f771142029c3e0956a57ce682d707a95c19b3da7c273fa8da3edcecf596cd48614c930e068e8d277a3dfa43a4fc0c7db01c68db594e7c2304ade4663
+Entropy.10 = b53b275d9b54244c06d34df0eecdadeda53dd6ff92e85b311d6568b10eeaeae5
+Nonce.10 = 9969ea5738114a585c6cd0e24e24f1fa
+PersonalisationString.10 = 47768926b26609fa308ff521e231adf334bd02a5d9ddf2fdd16d03a0ae808e79
+AdditionalInputA.10 = 0739bf3fe45a9ca6e23aa21b1d93fd77174b1d86efd10d711ed7ef7ae47a57b1
+AdditionalInputB.10 = 297557d197e9ae02eab318f74dacc2df93fa2e71d208676710dc023375f8969e
+Output.10 = 33bcbde29d969891e8e1d0169b7d293ad3d08ff0b2ae01fa97b9a4b5fe37aa676ee185b2ed0f9cec1371aa9c426690c1a66b64a2c1aecfbcd539eb2ab56c92a0165516bfd373a62a8be55da9674cd6a588bf586c6337d95c4033c2c436e329904604322c44b8a6ecfe67e4cccc37cc4c853aece7d1fe59bb54536d1299802e6c9e9c7697013baa8de8af29db409a3f65a8af607d97a17f4ebb0c0165e722710d2c92c129a58a138d9094f60f6f5b681db68336b172124d4e8180a241232686ad
+Entropy.11 = d187322d390c6922639ebf3d752ff8f47915305de1d7c18f7971b5665b8da6fa
+Nonce.11 = cee12f48dd46d0664205805ecd8d5fa7
+PersonalisationString.11 = cd8abaa08a4a7437b5f3a9b3866b3b272bd4d1c44aae4dc4d599f7f2085fa6bc
+AdditionalInputA.11 = 3ad2274683ff6b05259e36a057502c4db82691daca42377e746158d0cebe4abb
+AdditionalInputB.11 = 2fcdbe681d1f708b9e75eec0edbcacd657c036c5fffd0f7b0c760be0e9cdc1e3
+Output.11 = ecb870f15f54798df68c6d05dab67d58b450714476df7cc3c8ab8951b6a2e3fe35ad68776099590b7b044e3a07f048d5c954cb341b25373b35abb0811f9d62c296207a9e83265b75029410c68a43e5d8c95681d5efc6b0a83336490ec3732160d42304b553abc20a860c5c4ba53ebc48c8b8d279543258392e401c0ebfe90c4e8af45db6b59de3cff448a718be9ed0e18c2d1ec87f6c43c02ecc5cd66b50620863f3b05059571e2abec9f3de02dd0ea44b0cd7eae5dcc13fd1b4c361b3d580ff
+Entropy.12 = 9eacb323374fb7fc53f544f055d6ccda36d558510d26c0e534c3210d720b6e18
+Nonce.12 = 005d9fe8b8b6d24c7f044e94b17cbe0a
+PersonalisationString.12 = 9607f55daca672230e4eadf1faf9ae3909cc0d7ebf1f3ade0ee23a543a0b373d
+AdditionalInputA.12 = b181ec672657e92c751d758a3bacb384066c7724392b52aa72785a2d8b106693
+AdditionalInputB.12 = b14813333c1b08f7cb0c20f35f6b3a7972c44253ab13232029ed909d2499798a
+Output.12 = fb22d70f1230dc59c28e253723e37736eb8391f30cdaffd6b9cfc468aefb29132073ed59c64435c78a9448618991b7d0ea6278fb884df827abc33c8274f90bcb10112a5b530e019a2d253b4681d7a1ced1b63f20f016d2d66bfeafe2dd54b761c7518ace8774f1561c12a2f75cc4d2f2bebfedc3ebe9ca11d1d7eb8c0caeadad29d1bf89728bb5892a8b23c3ea191ce49340afcd34b31fb1b761e00b08ef8f8539776f3a76e6b68bdb01168f881b63bb235bd6f19aa9c0bb16c573987e87c885
+Entropy.13 = f78b3eaf8d24419d05877476e5d52a980020aa7b326d7a432d04565a26aa9e31
+Nonce.13 = 672edbcbdfa8966c975ab8fa058a6df0
+PersonalisationString.13 = 83e33d7b81f7b7fd5134c59a8662378e9042ac62c53ec8f8b13cff211f2bee6a
+AdditionalInputA.13 = 61e80c2e4b5984b9453ef5df4cdada8a62ecb98a119b58ed1cd4fde05cd36055
+AdditionalInputB.13 = 8e7b596f642cf2d7b2eb7500be3735b3383a275437872f7efb0ef8a30cfc2caf
+Output.13 = 013f8b67173ed28713614eb5ff2ea5fd8e3e26af0c0fe62ef6fbc3a2544a881b6361c39f54fb758563c3b12309a55938811aa8dde8402ad344ff011c38f747750a172cb5504e8cf348df31cedc918510ded429a410da929653980243f825b2c325b8642261cd9c932dc3b87a13dd8f747b812bbb2f39675d6a0373e69bea510ebc3bf01b5ec948c2c86a6fb5eaab9bb48819b108360d66951ebd0f70b6b07df971f29223eb708478ef49af854e7e6efdc683a605c59eadfd18a7a7ae82739e65
+Entropy.14 = 23b249425f65cd337f1037064fdb3d01b8749f3cec8f900a8a38f4f43391f3a4
+Nonce.14 = 63b6cd22486d4af49be336afc6b4b884
+PersonalisationString.14 = 95603884a75e3884acde7152fcaf69fb9a44303451826422fd95c894928db74f
+AdditionalInputA.14 = 73cd5580972f69bb4b0d0cd8915a5b594c3a9fa40b82d6b37446dff4c014e715
+AdditionalInputB.14 = 304c2001d8bfb9f1b23f3b336db9f5da17752cbaba782d8932d2641aab4c34b8
+Output.14 = 5771705c788e15fd5f656d4b5555d532ee4c48453be651a69c30fa706abe7719d9842028c667fab59aab97fe64a6140baa5d42dbfb7ecd58f2ce557a7b8b2c01669232e0b8bb0ddc6ef8dbe627ec5b370ec74553640982a14bd38ad9824b9651b717f8e90f539c42d04f7cff648c38b26abf38dd2a777348a4c2872f6551ef0f9e148bec810025779e7cbe1055cb0250a764fca5a1feba53bba64b7ea0c4dd3d56a7e6b4f8a157264e6666d356fe5a7a29fde7f4391662c4e69f471c21c6beeb
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 35049f389a33c0ecb1293238fd951f8ffd517dfde06041d32945b3e26914ba15
+Nonce.0 = f7328760be6168e6aa9fb54784989a11
+Output.0 = e76491b0260aacfded01ad39fbf1a66a88284caa5123368a2ad9330ee48335e3c9c9ba90e6cbc9429962d60c1a6661edcfaa31d972b8264b9d4562cf18494128a092c17a8da6f3113e8a7edfcd4427082bd390675e9662408144971717303d8dc352c9e8b95e7f35fa2ac9f549b292bc7c4bc7f01ee0a577859ef6e82d79ef23892d167c140d22aac32b64ccdfeee2730528a38763b24227f91ac3ffe47fb11538e435307e77481802b0f613f370ffb0dbeab774fe1efbb1a80d01154a9459e73ad361108bbc86b0914f095136cbe634555ce0bb263618dc5c367291ce0825518987154fe9ecb052b3f0a256fcc30cc14572531c9628973639beda456f2bddf6
+Entropy.1 = 4cc8214cd7e85a76bfa735bbbfce926c0323fc348de6c05ed1800c2c8f58c6b1
+Nonce.1 = 001eb1f6b29b35242a3f8fa2e90003f4
+Output.1 = 1efa15d644e1bdf34eade3ff2f5e9ca45203ccaa1e534ac9b4287a846b71292b03102286d99f2be64b898fe909238f540ebc25f49522f60ef723a4c428ead530a97c62405cd5d9ecc54ac5baa47ac4f6195d637833f462d21a659b4903d9cfa6c9fd4512445f9abb5782899a6bb64592f3c2b3c745b18645301fdb09a6a331e9fb6d9654fc79c14ed83ac1684c755b9cb209885f86ff290a71f08a848b960152f05b1aa8566bd382ddd45521062831d7a0fb3a8bd8e112a91b5960690cd8585c1aa104514e3b9cbf52f6384e84c27bda2802fe9fb952cbf2bd607f869d0aeaa6b136c6a5f6e9b0522b6019b7ba6af6cff99fda612e024867decd8c0c6fde2034
+Entropy.2 = d046270e6b7997cd5f4e9ed1193e55382191f78547a660854cf60bb03d039a39
+Nonce.2 = 50cd147a3445f6d32d14cbfb9da0c327
+Output.2 = cdfa9441aa5eb11fe3ba50528ed731c9ff9e70b78da075d00c52d0e281e3a868f66a53a2a6a272d7e0b1a32b6339f8afd108bb9e66b04c3d6bc069b7e01b69844322df7deac66e605a9e2f43665b7932c67c418a77a4c9a302782d0e735795755613a1c5e90089f759d780fb3a984dee4e06ba3dc5a8c652549587d975e586a98ac6aba6563e2767f1a379261b9dd37992ea9681881ea7933b5c64093234c849142ced85bbe5956f527d46ef091e4d18df2a6102621a91bca51bf7aa4b242414dc16e74ae59dfe560c19dbe315e7f98b11086bc26e336dcefcb91c4828682da90d3921336a45fcd36ea4d1213a13213a132bf20aa1a3991b60b65de7ab9cc656
+Entropy.3 = 8c7c80b169160c78104c205e4492a9477e6f7ba1c3bb4daa86d222deb6241bfd
+Nonce.3 = 2d2dcd5c40b46fa553ca6a2f6be96991
+Output.3 = 1658a7552e4cc98c228072801f9ba230123e7f1f7dca7ba839f440e5f7570fd29c38b86a2aaca04cc87a56205b41d19e38998b47d0ffbfbd9bb56a6eb31bbfdce8d01e8991b82315c39f60c222298160e8d9f14b1a6038d8eaf15eb7310b180a8e2e8d05ef028782b55d4782d4774160a39896d1a896823f8b92a99abb546ef02cf189200a1a7a2fbb7019e4d8a935224c20d11a18e0d8890549666f6599c261532b036051cf7a65dd33bc0aeab8fa2ac9ed520f6dd893b9dc3cd3b87d02a0543eca0bb52c58b7ac4ab3f00171e21dfd3363229ed362f960d8a5fd06af5caa86018f9dce81ade6234a6992bfb9e2660d08a103dadd7d9ade4c45d691aa3799c1
+Entropy.4 = cd394508d86c384c0c998b58cf7017b7124269428e4cf39519b5815cc2d88734
+Nonce.4 = fd2cbc87c79063db588d90b9cb1569f3
+Output.4 = 7c4de5fa97362e63e52e790fb66d4b067e8cc1742975ba6f9186295832d31c4e0c97b7dffa262b93b109621044a4bc89c9fc82211f5cb763974eb3a816fa7d7853577bee1c36c2c36aabe28559d5bd85691c3e3bd610e61e4c3b76e167526d1331459d8bf09ceb403062cc97e1229eb3a70af6049d291aadb002786e7d21b81c87fa68a51a1b9a89394788bab70783a88c883ca17eceaba455f357c611fb279e38f67e3c27c5ade5f95721fa79fc2da1bd44ca7f304161359da4e45d7b847672bc185ba502123a802535dbd167b2c93bf901626e23fcaba03c4f89625a930caaaa30400645680e5931e094aac6f6467b90b13c2be9c98744f89d113151cd2ffb
+Entropy.5 = a14be417001030f6a9c543f829715b075d0efd8fa35acc7eed02a1401c6f59df
+Nonce.5 = c87b8b9255e62fcda6a35e52fa4a6f9d
+Output.5 = ed29a49be56e081f5b6abcd2ca1a16dc096071989de72a39b8bd544d2a2a2db5c886c0c29ce454cf60addb56cb4f28f959ccb7163280ef81e48dd2a02024c34a120301d359f03844d1af01f485afbe7c9b17288cf345172290fdc44e124670c5ca9e8590df6f9f63d60849c62d3921003532dbe3e3e6bdd75d28211365f6c489598a99e605ca671ff91552b5916ea9e12259723c0e1a633be34932d0c816c30b519c79656a70368b28fadaf5eb32eb6e47e00b04f152ace2eafc9a3ebd3b1b3795ad85e0897e46ab57c361fef2908041d365f73180b505ae2426603decd0b7dd33e2f7ac885aced4194999602d4d62a984233d0696fff86f7fa7a6cf993fb7e5
+Entropy.6 = b8ceee088f3b13dbd1e7cf230449f246a456f504d63fd4288838a50ab76576a3
+Nonce.6 = f400502913cf57cb2341c5e6a63fe9fa
+Output.6 = b4fe3f6caedf4ac7b93fb1c2f316bafa58487f28a37b8400fd1f32c963b04cb3c7eb601d0dd8a7e4538b14030fb0e97794c617366ca827e3afdb0f714983a6a72b261db8bf98d5fc48fb55158661f987d08e952913212717cf204a3e8cf1177f63e2a46d920ffcec4b580a1361253a689bf765200f4e90dc6b34a56e10cfdbf932fbc3b75da1d55cba0c5287f552d883763b83acdfc7fc9d762f79774701f7ace701f0b26c67217e022bf6b6e0602e0d68cb1377b5ebccb9a8e41188dd1dea662663e8aa093787d6490a4e887a34a27309c64c40e4ab2f0acfec4a1b8d419d99fb578aaa82da9166a7d7873e27226db20d313e868bcfa4fe3854d6fb34def7d6
+Entropy.7 = 3c1e8a0199786fc268ee0ca0c0446d7363bd781069cf3a3faef2592cba06ce1e
+Nonce.7 = 70c7c691af73d6d59addbd6e3f646d64
+Output.7 = 06f44bebc2c1736b5cee283e530bb877b28651d70983c272a10efa80e3794ee428644048d67245dd3ca8b769b6bb192c9468a9fcf2b71c417283713d39e800225ba659c3273022f5177fd7867173f457f3bb66ff2c2e7bb2574dfee54438e35c98506c178d35259b04e7c541016f5c2d980074b4ea865203ae2e8935d745a02ab5cce04d233cbc18719b1900f2e7e98229b851d19fac02fa6e5ac1bc973b20a17509739bd989d4ef5a66fd9e19e3ceef2415b498843e93631b2b168167bdbb8db313eef4c9668d5001cb34767ee41db872163987c3bdc144637b52dcb767ffc19bf44fbad487b1eeae7957b497fd59a95f0988315eba73ab7206542f31c49267
+Entropy.8 = e8a0925bfce66dee7e6a54fe0311d259bd7f7a22b8576d64840cc51c731212cb
+Nonce.8 = 1763365deab3ab82de9996e5c8570eb9
+Output.8 = 63ddfd70508cfa247408ec231d56df7905f65b62e5e5a8309fff5239620faa0f055d7b8fdbc648ded78fd567c3141e1723d197296c92d43fdc18af0c4a54fcd52613286c78ba7bdfd0fcacc7b11b374739088323ba95f30872d77b6aad21228253133d76d29d0d742ba349956fe71e8bbf3fc7186a3f85f144a9040ceb0529a713583c1fcdee756d0130b38df0964bfc3b669fabb6ec6874d17d9ecda9fa567890e42540185eeb3497ba8db80b803f63803442aec14735e9eda177484ad61bf0c76c2862b7691b4cc74efbe35203f8cf4f24aaaa1d831030f28eef8b49e85b249e6fe835964d53aa74de6a31424ec3c833f4b8b39559934bf5f23d4b1d450bc3
+Entropy.9 = c493ad96bb20b2480bd3122b4b1ea51379f5fa2bfd8bc0fed4080995b162c609
+Nonce.9 = b6d6197f432c8597163feb9c5439525d
+Output.9 = 764d3e4459504b490eb1db7b5ab8e6413601e449750534f4c4f70025026f87217010eb14705eae6e513796c7f20ecace32a063238824b3fd6956810066930bf425a1c585221c8f61ac64aeccfe8a3e33d164d02d5434e9e594b7ff451601874d268a2fd8de9922c36e67d8146fe553889a15f624d499a22f5109896758f30bb98f70eac11da1ad48e99bb4422acc5b97295094324eecf530525c1ba150886d053c84004c265693a4419602e5e59bf120de6ff054d0c7c96bc14e9b5fe1290c08ebebcda21744c04a2e78964cb2b52f8e6a70930fd1ded1f0edbda4deff91a3310019e967df3fdbfa228bec9897412a748201649328b7d784851fcb5ac1251f8b
+Entropy.10 = 1e868c5fe4b59e6d4249854226bf1120a74386ea590e9c35c58d7ccdfad56d71
+Nonce.10 = dbf557da684289e96cbdd66cbd9cb879
+Output.10 = 2032963be29c0d24c2631b1cd895124b9801a4d5c14c28fb34cbfb1c2467134f499153e2a3ec817cc4b2e4e06068ae78f5696dcee99334b0b51e9f29e56a3d3fd5c65c4cc70e10f9e0cea2572c28ec4afe0896d7689322d3afd931ff836be485f78aa179100d43d910564dd1adfedcd32e3e7e53b06c0a46a90b1173e4a5152cd8aa38f2a7e329d01c0b81e62be6c9fc8d1ff3db08f8c31c1e77c5d7fae619555c0e02c658486e35f27a7d58ce63b9b152b9ff528ab6a6cd9b59240f5a7b6b52dc3f6e47f9daa2cb8cb525d6760cf409ebe2c7641c3c32e330545bcd73da9eda20b7590d84831d4bec807a56994259bcd2fe28105f2d7fcdb3eec523fdef7044
+Entropy.11 = 55bc1c7358dc334b26412ab472dcf4210740cfa0ea688812d8b1a7fb257b979e
+Nonce.11 = dbab14240cf59fcc8a7007553ac480eb
+Output.11 = 6a9d30d4ca97dbfc2d2852bef044bbfb95ac253b27e588c67fe179f6adb81147cc1cb6eba6a2c4afd6f8b3f1c8d45b51af1435ebf1ba8596830314353c9b4d8aff9620dba0099fe0a1ea417b97fa4c28491fe6d2a619172127f18155840f90456bfbf1e7ff587fbe566d6b8eadd6ce594bfcbabedda37858a7610c8230f594861984dbf1e3ddc9eccc8b9d2ec3cba1306d178f7677ed399b10b995b3ea55586519e5730e52ee8880ef0e63c476f2a80d77c6ba802c47e9174297b27520fb027d134e17cfa6f99d59cc5f53737cdc2e663e1ac59bf74a87ab1064e9acd4811c0406ec5a29a081bd0efd1e557d6b6c9c7fe6131c5c00fae82339a1fb90d3be2b6b
+Entropy.12 = d894820d9cb243859447cd3a3f6cdd125a9c4faece6ad756d288a15c5d24c39d
+Nonce.12 = 776c5ea9838c4c34f39f12c1a9df6700
+Output.12 = ba23f7aa0b7f6a93bc0df32e68e78786fffb5acd7fbc2864468568753e3ddf31fc2187b20c229d0d0b261510f6442816d2226024b57306b474079c92c66a00be482fc104cdbccef0450b3f2ce94f6bb6a5125e0774a28a2a083f802d3c45e9d4253295f80ca4bc439f539a7f82eec6fd450bd196ab468ec6902752dced44ab557fcd3f6a72c47c0f18cec6545ac669cf432e2db308d70a7394ec772a34f14f26d7bf7d0bd7e4437248618efa2c08adc7de9231ddcc976ef8bcbd11be54dd17ca9fa515fee6827bf5efb602fe8f1cf5d67078b17601803c5be05c24edccad2837d0be191f918d6dc62742241728a8690db5836c2045ec9f8bfa87b768f4febf2f
+Entropy.13 = 17facdf2fca2e1134674ea8e8daa609b4477f415c6a13a5c157f3fb7727dda6d
+Nonce.13 = 3c1dd89ad63e781588e4b3f8cb1f2f6e
+Output.13 = f472b4c20bf07c170b3c8eb682469e88680d1fa5561d72b864c5c438c95c4c8a3e61f89fc30d5fb4e843e5ed1230778b48c467fa46ebfb7b56220a610483827f3f7f8ac307f8aa57a68922a06c8fa5de732a0d05835cd48690a2b3f734e4b7e74799ad774579a9eb296112f3e2bb68551af0e9e0e5e0bbb219ccb6c78459dc68a3663987156a50e72aebb219a1e43b5603dbd8055bf1e76a4468caee86489ac9a1a9a66ee7b193484ff3bea84341b62dab124a43e38945cfc99f2c4c15590fe180bb3e6eac544483aef710278213a83da85a38b6d140f33654c9d4f6b8ab3eacef1c57fd2237dbe8adf23b3aef6ab30327ca119b9e1e95ecd068aafae0d07a08
+Entropy.14 = 2c13e44674e89aa105fc11b05e8526769a53ab0b4688f3d0d9cf23af4c8469bb
+Nonce.14 = 700ac6a616c1d1bb7bd8ff7e96a4d250
+Output.14 = f778161306fc5f1d9e649b2a26983f31266a84bc79dd1b0016c8de53706f9812c4cebdbde78a3592bc7752303154acd7f4d27c2d5751fc7b1fee62677a71fc90e259dfb4b6a9c372515fac6efe01958d199888c360504ffa4c7cf4517918c430f5640fedc738e0cc1fcec33945a34a62ca61a71a9067298d34ac4a93751ddcd9a0f142748a1f0a81a948c6c6a16179e70b6f13633fd03b838da20f81450b4fdc1752e98e71296f1941ca58e71b73ea93e99a98f58d0892fa16de6a16c602036ac857dd75f9ac2c9185932103db5430e80cde9131e814a0bf3f3e7a2200a7152424472fd27f791a854f29aecc448f8d3fca3f93290266df3193d9e13e08907ab2
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = a3da06bc88e2f2ea5181292c194a10b3db38a11d02ac2f9c65951d0c71f63e36
+Nonce.0 = c74e5e3d7ba0193bcd6839e9ae93d70d
+AdditionalInputA.0 = dbb7270760d8d262557807ce746ff314fd06598143611ab69bfc7e10ca5784b3
+AdditionalInputB.0 = 8cdea882f894e5fdc5f0a0b16b7d9ac8cde35ed17bcaf2665564d4ee74059e29
+Output.0 = cb706b90e88380e5c1864458454027821b571dfeba0da83f712efb107b8752099514ef87b4488fbfa3508a00954bb03090766d2bbd399e71c86c7967a4e8ded57095a29d4cfa01f8d28c97e81a4cd4fc5be7fb32a0d6c230cb8760e656b74fa7e18e2063ebee5787958b272fc5de93f0d6837e55f0c360dc593c88fff30a428cae37ded52f825646e04133a19790c304e4b1f040e10439c5edf454e6f71b23eeb43cdbe7b0634b8e283a97806073f7f28a43de2d0d969b3eda380c185b785b9101dc905025c9cdb499e594de0f0d3eb41922c20994fe2c403dd5bf01e4b2c3ee6654d6ab9cca7d4d5ae59525a796119547eae6a3cbf8ad0e9b1de3c4d5a804e4
+Entropy.1 = 462cb274b7def1ac0f9db135c8fa2e48599cfe2badf2ae9f6d06886b25dfb0cc
+Nonce.1 = 250461f0dadd9e23cc6c08ddf4ae12b9
+AdditionalInputA.1 = b087ff5e230284aef4c90b5f9c48fec91b486f3d936d422475a2b12ff47a05b0
+AdditionalInputB.1 = 150a4ca383c3863d9ae3212de9ab9da7442fcd5367af157714d74c149f69eb9d
+Output.1 = 12d4740dd0c5356fa76cc441f9088e361d3e636dc7b1ee27a26e28218eff470e28f51b76540939d624cacf2e3facf0967e7396a42017f68789e53f4b1d216fbae675801b8869b06d173d42126bf88fbbfef60aea6c4ba15538b2d64f8f22f389ee35e01e4ea88fd7c9e4d10c145a5f6e4dd33a55f2cafbd5f56856ea945b3b596b4900cf78936732bda49a52bc5a648c6561f48b820699533d48ff04eccd81aaa5bd25fa277ef314026effe2e65a9c38d45832cbb89579535782bf6299327339591a3e66d82aef6fcfa0a21b6b50a398b737a83a6a9b34dd46f3d15162dfa488fcadd18dd06f856f6d6c4cac2677eca641bd4e044ef4cddf6c95f1725fd8c606
+Entropy.2 = 727337765db704e7b9d23dd139e63b5ac97adea990b7d04881b6b2de045c974a
+Nonce.2 = 0265210aa4e336ac32f4b0a428ff272a
+AdditionalInputA.2 = 48b452cbaeb990b6ca4ba64ae8f2a91d792ab83ad499093d9c4566ed8c7cee9b
+AdditionalInputB.2 = e7e32096873180e03c9f7bb33c5af4edc3fb9a36113275839302d40f0890dbad
+Output.2 = 21c7d4c258778dce67f1a134670b8595dbbb0e036ae78484d7953f280f1faa5fb3bd213a54132a089a9d6f1376ca8b7064402409187acbd5de7e4d7146c1f02f73087a6c62ca6a7e736900a9e4464af0351bcb71b2e1f1cc07440cd74f50a61757f0b3bbb91fde9c898e62a9cec3dcaca0c94d5d0a8edac0f82b3c99b65d736884ffdd23fff1d9d6e8199254e784514fe3c34db51a86eeb06ef7dffcfba9f195c52cc4b2db53e0a6b1bdbed68d85822c6c03571482fdb6535eee1b6e26ce7d33433d3a1271c5b93ce9a31c9d7c805e3635e79682fa5f8e7894d8d16ead32e3fe8c625174a12a7b8623c0000a75c506cd367bdbc4e3da3b462938875050ff2271
+Entropy.3 = 8ce3f77c4ba4f40d4eb3e80d03f9b138bea725d44f7a47f4a1f7ee3afb45c2a0
+Nonce.3 = e8fa75683ba03964a8e3312ccc6e1b66
+AdditionalInputA.3 = 83260430843b586cfa50ab51120ea5675d63402074d45b0bf80dfbbec74fdc63
+AdditionalInputB.3 = 0640b6427bdd6ead525962b228392b3c28abe131719feb0c0f738288ee87acbb
+Output.3 = d0a402dac648f7a53b5ffbebb1f5e6a12998c999809007f357dc568d7c653bd3b4da793d6d7ef802338eb36c7e4745655001f700c4ca68cda07d726dd088ed9948b2d49d8b50a72530dc9daa3387cd69ce32ca49dfa6cfca98f8a8b641c929f84c5f4045579dbfd3fdcd997068bb0f905f9a4a00accf06a483282e2eb99b94d78be46e07dc87903208bac0fa75323920997d9c4f9c0fa4cca5e6b1d69fdbfae8dbb52d659028387472c1a54283d074954094ae11bd3aa97360073ee033d7008e63b89e0efa4788eefa96ab726af4c2422b7472fa1efb7d95bec93fccb7351768625de30d9f5377610026b6f7f9568a9659644c7e68483672ca9ac8d0994efd68
+Entropy.4 = 96b0d3b13a65ae1010bf40e6e2dc6e6585db8fdb8fbd2b272611e51c62e1111a
+Nonce.4 = e93babde207a42980c9ac9018ab01153
+AdditionalInputA.4 = b67c2ecbc4d4c46c3573883b61311a2655cdff0e01a12a20ea0cfa4e91034c2b
+AdditionalInputB.4 = 9ca69103d5af577da056d4d5e95f53be87aae4689918bdf0d011789f2ccba9b5
+Output.4 = 63f05a9815c2671298e9caa06b0746767fdcc00884eb1b30e53b16593508bb75dcaff9932230913f9b62cd0361af168993ce7b6b967114e2612c8f9c376104633ad4eae2e968e455b96d1d5ed6928eee9acb21bb8fdee7bf525f143dcc624a66ad42f1bdbafc19b165284f2c771edc57dc9092ffae6ef8acb9f8fdba496607c54b07f3ff4d1721f45db43f8ed5c695716b405b57034cf4f87ab487a01057ed449bd918093c532fe85015f0c5856cbd7a440c33c7968dd25330f78b66248873959967e307f9c9697803e8b0939fae51870ec533ef7d17e227dcb68ccf270299e65ed8483b9077831e010e9dda3a50ef7b008a0762c8ac5ef42b7e2ecba450d7d6
+Entropy.5 = 49913e04b653d82abc54cbddcdf898c409819dbdda4af93bc97b434dd1e31970
+Nonce.5 = 6504b1c76f34ca6d9dfb181c7057ed8c
+AdditionalInputA.5 = 68b8f6f749ad588ff2c7477fd7c55be648134d57be6846674f2659d75785c39f
+AdditionalInputB.5 = cd7b2d7b24070e501843f0caa20666fbf963760893f4e277d944991ec965fbe3
+Output.5 = 67ba01fe694d8f9621d47be0dd9119b8654d028e4c095347629afd02e96fbe6e4535d1666ee0331a6da79e703571ea0983a0d02051bd95dd130c7733012424b79a0bdfbcf72c9cb0c6d6ee408e2f0de45cb084d8182d1b8b4d389b78d0e3fbb7f3c8891ef522f077851b2463bdf1399d178dae3299a43b00f48cd1068e17f42615bd506878eef5fcd5951c24641b58f7a563240abbab5779db1e44bc2c66dd48ea7e746660042bf92b727d622bafebc05de309c24824ddd1d9ae86034a8694ae5962f61ab6e76b435c9dc8b370d708adc4d6fbbfc44644da3f4d4f24d3c95d958de143531c84b188445b6840775726c87b1b058dd8c14e4648973d5a91a152ba
+Entropy.6 = 4687135763568418f6f30af400d37d794f712b10a42087fd832d840b9e8b1f81
+Nonce.6 = 8dadd1aba09e78a1925ecd9ee0d106f2
+AdditionalInputA.6 = ac00dc729c5526698fb80f685ffe93e9c25bf93b22424c15c20043e1fcafbc7d
+AdditionalInputB.6 = 948555d8a6e0473a769b7019e6909a8565e386a624a47a1f9c96ff5e6609a894
+Output.6 = 4f09384ba8a34f819a0d4473c3387f74299753fd16e386be51a5ee70d1b164be6fa53a3face06379da2d961bfd6ba21eb437bc77b527960352790bbc978217549006e7409b86ee97d6a042957d27a02fa5f04de94791bcd7d02cc6798bc66d3b6cd887f2a984224b3c279382558ff64459703d93b40fcdbaa7abe1bcdf0b95f4c6ec6583a86a41f837c6cbdefee3de4767e330cb2f4a0d8915f192f02c1ebfc78345f80d5e0f21185c647376d588991486ca9a8fe5c68d0b71a5f81b08bb112c56f69c89412f0282eb1bed0d05c959608d1eb6b1eb4a76a76ae927cfd8d651a651fe83668f24bc0d19e5de86813b16bfe8c771dc9f16a7d6d0441b3278de136c
+Entropy.7 = 4ccc3c6cd73101efb7833ce1195b28b3aa3e5628db02be166f2a7f6bf7e8efda
+Nonce.7 = d5ff3f1c375ef981336af28252756647
+AdditionalInputA.7 = 8396edacbe629826be44543bece17ede600f7f877d1138af5e83c3ec44b8b0de
+AdditionalInputB.7 = 98545ad6268e604fedeacaa10b727ced0b0e284a00c29081a41c0d2e3675bacf
+Output.7 = c37ef92675ad963cf41ee5c14d882698082e8dda5a0ce9d50b8409c9f0d30d3294c7c625ef29c33f395de140405a6f9cd9d737a29d892b67e90427af24e200bc9cc7b5d920aa8a93d8ddd0b6f69cc98e303ca3a512b3d883ec542403d58bab1b4232c31696e72a764f2dc7b278bba02efdbd5413a08563833ef7a283aa6e5ab221d1ce5c7dd14363ecbeee879d157b6aefc8bfd2acc004d19eda7cb4b382e54bb725705b3f52ca5be08df445d8f6eb46353ef26217bd3c1b508f049e810fabacc0a75d717b2bea9f63cd8d2fdffc27322eafc98e7de18a911ff44cd0e5864e0897f0550e3c48674d11dbecc9d6d4c42f7592fba440608ad479ed296a6ea6b1b0
+Entropy.8 = 85ef33038e0bee3e40ce8eefd3648e89c521ad537b0c8003617824b08a154b75
+Nonce.8 = c89f036845a6f24fb9a15513ed28eda2
+AdditionalInputA.8 = 2c675110a2bbcee5c6096cfd8f363441e3473664cf09577a95996928519a9292
+AdditionalInputB.8 = f1db097abed76cdbb1fe6aaba94bb51c2af8f43c5cdd2eafdf6b40a234d3897d
+Output.8 = beda7162fb3e07d96a5796f091388995894f69a59f06a0c7c8eb704b5dfcb82f7171d34628b116e1ceb0b180e6052d01fcb13510edd4050e15d6a8bb27a5bbac46d8847972f2638967d53d5b7752452bbf0bebb953a4e40212ab587b8e74a9599021c93071ac55a08feab70ee040c3cf32246857167f13473d20a38c8d6d364da4d1f043e24a65b2dc58ae2a56215a34081fe91bd554edf86a7d582b227316662dac6a71693806545760060fc1a204df40f1b5df92c7b0561507ecd95609fa5317bc43b1e9a40880a230fb4deb79cf4a7a2b97beeb9cd4c8c841d4ef2668d870eaa11f2fbfa0fb899a424f1600bd46778136dedd147f124dde4d64693233462b
+Entropy.9 = 77a48fcd8cbea1be145a65c9e20cbc4e660dd439c7ec7e2dabc6f0430c5ba716
+Nonce.9 = 182f05e834e84e89565714fe8ccf0de6
+AdditionalInputA.9 = 1b838d460961b8f1623667fb316772cf50aa462ceeb58c36e2a6482ce7aa9f9f
+AdditionalInputB.9 = ccd4048bae7f8166c35e932cf3a09feb2f97dbb31af61a3fe5e4edb881ba6930
+Output.9 = af5afbb8d60d77c36c20a8f4c20b68ccd7fddb703d1ae83b5981605c4483e4f092329bd75aaeeb6fb4e6552540bd772edba5e5a96dd227acef73241257fe8774f757c673dc3370423de5a85b9118b5aa98682db6a89f520174a25e8e4b71f83ef432a91ddd8f69c1431c40d282d7e789427f18d9c5673131d5d3797d1335ffda64319d642f5ea5c1641092893a4008f076b649170916a03e06f0854848607c6c44a9f27bd3b17b293a914a86139e9a1b11c8652eae3757162f9f7161a2ee6f412a40002781e8fc8b80242331528225e70b9b23c6b2c970db12eab61bc290fec9b4c6c13d6454d7336f439d9b4b1df59248ab84e3a79d7f37df07e88c20f9ed92
+Entropy.10 = 71cea1ba7a7dc792ca33288ccfb67570d9b1eab34e35296209db20c6676f174d
+Nonce.10 = f4e062d1f660522881aeb11a651581f3
+AdditionalInputA.10 = c9667d28614fa05f112ec31487cdb3d925f2cb312202f7d85695a8f7336573b9
+AdditionalInputB.10 = 6363dc485ddb9bdd61db33fb1beae9bfe2d0e7788a86b50774f8658bac094214
+Output.10 = e62486e1dc854f90b803635c1718f075cecf7fd44d1d304d0127979b83bee5e4abdae9076fc5ef89f6435e4b72cee056372c603f16beed39a2adf6ddc2577b32b29396db81e9ce57fb67c2525c2a59dea259ace4a7b6560ee20ca8e3f476786c34466ff5f6b45ccc916477f6fe96e7e4be23867a9ff9fa07609d9d8a5db7f5e1a068ba9b9c82bf72e76d17f73518affd5c58368232bcafe65096962c561617f489c8d978cb28676d8932a3c3489eb0f2f48a193826ee785dc850e41b0ced359ecd2636d96e83fdf8996617e6a39e141c124ad1e2e5fdad27144e60b56ed70d91543f3046acc831a6d56926ab1635de7e04a149958c9365a53c144903d7ea392c
+Entropy.11 = 3a23653a34334db7d3abbf747d9d47d6b18589ab3516b0600bc93517d206a1a9
+Nonce.11 = c74a51766beec0563db655273d5dbcf9
+AdditionalInputA.11 = 89922f45e6637e7fcae0a98d7ccdcf36650bbf7fe3253b7716014047a0983e98
+AdditionalInputB.11 = 5d7519b3f442e1246185e1e7a56fd37473f18824f3c9d21656f54f1fa8d2947f
+Output.11 = fa40b69397e13d5f1ceaf294fb1d3a15db8b345286e5359bbffe5cd743ebab412845a9f5e4ed8481cea178d7b647019a7729c264220991c3ae276f82d6c33402f061aabd2e28cfed64565cc2d7f1774e26281d0808b2857d1c144d5aa36944a38358181b28b9110470601204076c02ed44ef411cd6a75fecf55225eeb3ef4f1717d3f5cdaec83f5defe835d2a236eb1a8f00167a727329163eed34b3b34bade7896e2d0de1db1b15c7c2b173ee8d4f0bf77f8e8a973be61e107daf240b9b7edbc599469b5f40e98c0d2d40b048ce4462cdead7e8f85d175a1f39f8bac61ec00f4cb4c8081201ca6319984264adca745b1d0feb471b5d8fa35bded03357fcd7e0
+Entropy.12 = 24cd11e75f2b0ab60c5b7a35020d716cea2e4f5b7748327c0cf355b118051893
+Nonce.12 = 34889dc3198f13c36cf7beb42b2a1a6f
+AdditionalInputA.12 = cf9571fecac5d79d65617a885815703de3459cf739db097f8ff2ee557d0b0745
+AdditionalInputB.12 = 2282cbdba64ac2a4053c070efd1dd0638fc31dff97dfa15f76bc077bf173a821
+Output.12 = 1b0466ae577c0b9e943616437c24b9d32ceeaec15bc83841843585c6255534a4a71ac96698f628d907255894f6199f6d7bf405afb0e46359ae0dec788ca52111950f8adf88d324f5b9a76d79e67c3581b0cf0318901332883794398e6aea0f7da1f55f30ca34b11127e885e86d787f8f8b3a1342d71f3738c8445707e0dea687baf759b261eceb4d661ec9bb006e9f08aeb1cc0357cd8df526943d71a6d73c9ae80ca69fcc3004b91dfdb2b6b8d0424c1cad81677d510ac7a51c1ce6f02b9ab41466e37ae0c2adfc63b31fc2e4693e467d3384fe359e9f0fd0f4d08f4a9037f3fd5495d895b6ed4121cca037c6aa87a5ccc5b856ee6151a900459ff0ea77550e
+Entropy.13 = 4931d76a7ceb2238c1f0ed76be24d2fe1a925d1084a392fc8c43d93535da0e93
+Nonce.13 = 51e52abb58a9bc34c46f254b8313d387
+AdditionalInputA.13 = 92a8eb05034555680bc937d0d958e820b09785009e5e05739f29d9af17a63976
+AdditionalInputB.13 = d37465a30f837fe05f04f6b7ad4bb1c83bbae83f9c78f027b4831f5e2ad2dd78
+Output.13 = a61894d3c30081c7836dee8506cb97bf7bb4e56a8a94c72d9c8b6900b69ea68b30c41ad33dd21554361c171cb959c555bb668436293e3f1c103bb72509e43f2baa19742ed8c2d3eb9d0790c845097a7f0b2715b3d127a7f043c4b265b4d6fb4b9af9edd12427e1b5c8b680a135a315761aa4a9ed598a7620f335fd595c40c933696cf95b7eca55e8520e9154f69e3446ea4fc3b69f36fa1ae7eb456b350c93a1ebde342bd4578142d8338268af1c240c94457888d045d73196347318f89e281865b826837ca79da5a6dbc81569c42da475d97ab5501a1b13e99058c40840958331bb73c78e5ec90aa0464b9f603f11bc4baddc28b71c42282176654458d2fcaf
+Entropy.14 = ffa596ed725daea92273519c279d0a26be7f77cee1fc4fca44dc99b97ad8125a
+Nonce.14 = 3172e5a36ebc671df1fcaaa54bd7218a
+AdditionalInputA.14 = 6cfccdd8253cc5b284701ef8d16f8888f79100373a7df50f43a122591bbddafc
+AdditionalInputB.14 = 5795ae5be47a7f793423820352505e3890bac3805c102020e48226deab70140a
+Output.14 = 4a398c114f2e0ac330893d103b585cadcf9cd3b2ac7e46cde15b2f32cc4b9a7c7172b1a73f86d6d12d02973e561fa7f615e30195f7715022df75157f41dc7f9a50029350e308e3345c9ab2029bdc0f1b72c195db098c26c1ab1864224504c72f48a64d722e41b00707c7f2f6cdfe8634d06abe838c85b419c02bf419b88cde35324b1bfdaddff8b7e95f6af0e55b5ff3f5475feb354f2a7a490597b36080322265b213541682572616f3d3276c713a978259d607c6d69eec26d524ba38163a329103e39e3b0a8ec989eca74f287d6d39c7ceda4df8558faeb9d25149963430f33b108dc136a4f9bfa416b3ceaa6632cd5505fe14fb0d78cf15f2acfa03b9c307
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 73529bba71a3d4b4fcf9a7edeed269dbdc3748b90df68c0d00e245de54698c77
+Nonce.0 = 22e2d6e24501212b6f058e7c54138007
+PersonalisationString.0 = e2cc19e31595d0e4de9e8bd3b236dec2d4b032c3dd5bf9891c284cd1bac67bdb
+Output.0 = 1a73d58b7342c3c933e3ba15eedd8270988691c3794b45aa358570391571881c0d9c4289e5b198db5534c3cb8466ab48250fa67f24cb19b7038e46af56687bab7e5de3c82fa7312f54dc0f1dc93f5b03fcaa6003cae28d3d4707368c144a7aa46091822da292f97f32caf90ae3dd3e48e808ae12e633aa0410106e1ab56bc0a0d80f438e9b3492e4a3bc88d73a3904f7dd060c48ae8d7b12bf89a19551b53b3f55a511d2820e941640c845a8a0466432c5850c5b61bec5272602521125addf677e949b96782bc01a904491df08089bed004ad56e12f8ea1a200883ad72b3b9fae12b4eb65d5c2bacb3ce46c7c48464c9c29142fb35e7bc267ce852296ac042f9
+Entropy.1 = e72d696d4dcb41a42d89037487b3eb01d2ddcf0407e4daa0b8ff562461eb6f83
+Nonce.1 = b2b01fb9732601f3573c6831aef09ac3
+PersonalisationString.1 = 8bbb235642f8caed49700463168ced9971a0204b981025bee41c72b76a965d51
+Output.1 = 8e5cd2a91ea113072623b787ed37454fae2c1905a725be3b124bb243057794dd68325a5d8bba5d6c7796d91cf682587ebe91f6beb33c5cd60b00940bf6de57c7fb082b9ba0e5b44e021be6d45099ea59367291a733ca50334f0315d52ed267af1b98e5be59359a0b9965727d92aafe4c92fda2c915cfb5a378c7a717f743a3524fddf5a48b1e7e113fa6e94b76f4e13fce3cc18b970f2ed1c34bd622611c979b6a9712c4447c3e50a7bb7ae30a8bbf479dd4242a8c4d1492c892107bb4ca695e3c790c9799bc6ffd563ebc3a4968accfc2085ab576ca6e9bfb2904a357c2cfddb55378994e5e4b36008cacaae024312fdf036a097f0fc1d3f9e75fe7cff74540
+Entropy.2 = 8d6ff3e3fe6808bc796a73957b19d758b257fab71dbb4e39acc2fafb01f88e98
+Nonce.2 = 2e2b74490e062044975d6b1885f61ec7
+PersonalisationString.2 = b5f819154ed5442d5547771af76cb6333d7f35e6f3e1cb03b22d09e601eb8eec
+Output.2 = 9cb257ba9d77b95e5bb2305424116eedc126b9a8654e56942e282da3823c09d9cc1c4b9c4975f13f9138e93ac75c4bd552c81d41d6363466cf2a38e2eec9294a93630dbc9d7ca89a0725fc7e41b0e55e8999279df88fb579dcc500aaa97d78ae354496048ad47d0b0285bac5e5f6e9bd50c2d9bb6f06090b3835171533d2105fbbb3762b2e33bb75c5f7c89cfb809858244526f8de3aa4f611bde41059109e8ff21b81392b55b9867523b4a4cf5dd74c23a2066f9b26225cace5c5822888f7f7dd233816ec3ef137852945fc6648b4c7cf11fa744cdf62aeb02ec2e68c29c071c84883472619da2680068aec82700cc1cec0dbae8b740b3be7c4b6c972c62998
+Entropy.3 = 138a1a9408cd7de6c1796910145263e5816d377cb9949bad0927f9c61e7fd18c
+Nonce.3 = 71eb585159831189707ac6b8b6f80100
+PersonalisationString.3 = 9c0ca722c55c19694df96e70f941b5b230efb1fccc7a7abe0c471dde92a39272
+Output.3 = 976e1a19af964502177d27b09458e3beca6e9082ce21721d31b7241795886213894f2e3f9acc23af6aa5eae7218d00871dac9e237cde1dd9654c1e893bac47e9444f4dabd26d3dcd9f11a68b297956f135df32fc3470f7b01383c506e2a2fbdf1c387c4ce684592fd4e5be0469a29c8031cd1ccd002edae3bea44c93695241296d472783df68e5ac7a62e33a5a74f70fe45252f88309b7f3603f43a5a0a823cf6f3bd8670d50663ecc326aed709224b60fe67ed29860b31c8161d416dc5cbca1c16e69cd7ce41a77cd465cb810f2b5963d15e352715fd5e6175c68125fc8e107d6573ea89db8b34fdf93e2e173cef77746e6142c8e5c44dc288ce86c0710a04b
+Entropy.4 = f4010441edc99d524f6caa660c180e25afdd09315f2a495ec003471e1f79bf0a
+Nonce.4 = 13bc6f04d81b25f4d4c9321aa3fa58b4
+PersonalisationString.4 = 37fbbb3fc5aa698084184ecc8e8b45212dcf851e6e4f2db8f775d3f759ef0c4c
+Output.4 = cb3a853a930cce84703c47719f6d609fce15f903a887f646c0781606f6f926765afd7411b4fc44be350b14cfff04383e4930eb36f94329033cd5f21d467fa74ca1a3c61c94a290bf6753809d8e7b75431d9450361613b16d6be55c392cbcb3d4212ea42cb341878cb268f3daa87c73297a807e35b82458cab693ec9bf66f43328ff1c4e727998d841a1d1491ad55c08522e5c69f19233fb4a8b11e937c55afa38ef5e0ac74b6f856902501a2558663f453d069c291d762da968298d596104580d80bf0787ce4a148dcda5ffc4b47c653f9b7bcde6cbd36dce707738b114d5f6e488b17b63f402c99d0c2b4dca40ef3d05025e50f87fbad86468ed5c08599bfdb
+Entropy.5 = 64179b56a75ce27513f0353e10a5107b935293af96799112448fb5787d9949d0
+Nonce.5 = f38d2f6e523ca3ef7429621db65a37d6
+PersonalisationString.5 = f0cfd2400dd8d5e857e5878fc811a5c9ce5e0097184ccdc57c0f96d5a66020c3
+Output.5 = b79591df35bf97c7f4731ded3eefcaaf9d0033bbb0741c0c28aca622e211491107ba9b9645ed325ae18a7aac6160cee4e34f3d3a44de58af0f5fe148b3c93fa37fd2f98e1c3c46a216bfb78d2636dc6b89501ddc315ca16eaa31a818b2fd100a47ade02234096ecdbdfd0997a3c7a4481815665b9a41070bb1bd4d7d9576957421d3b9b75d0e06419298aaacaa4f77afccecc7a67d59295aa0122197ba72b115b8d6960fa7c6c801785734f716b36805b97d4416baa1ab16c190bb8095b0c9e1267f1ade79791333ef6e442c681134dc1ff4ea547a89b84fee3bee0cb481f0afc3d1d2026add34c44f67dfce9c01ffcd443d0d5eaea00b60d0cb2ef4fad1dbef
+Entropy.6 = c21f2ca0d103186755dbf2d8470c0282fe11824f0873cfd7935671d3af749ebe
+Nonce.6 = 961df3048132b35d39bc1f96e21672b3
+PersonalisationString.6 = d040489ad6f484b13be395fd99fff34706cbf96867e614cd6c91554d61231eee
+Output.6 = a91bc36569a590e5dba3b64e896b21625a8555f71ab77f6f348d2d787e19594046a255f265bee7171100f2db39e3a5d966fcdd88ebc127b23b1798da44e03006a1987a4f5c8af3d83c220661b3c1ac45c5e785d96075681b2b19da1d5b0d143f3cf43c8010523f08feb59360d8a3dc12f101f2542d9fb0161696914f96cd1db573fde8957da6d7e9821032d9fca00f657c326ec0418cc3c60ae387e13894126fce27573ebdc1694853c5eb3bf37f82a5bd59b149d36cb3d408216315fecfbd2cce84f9e5186f24557c3c93827f6962b90fb1f49260250a55bb443c327e03e4a615be0bd5d290decc7fb6813d8b4d8c5619745cfaa1302987f2139ac71448aaf6
+Entropy.7 = b3679d82e8a26b602835fa5b780e9678d8a84cbcac2cd6a66174a9c6f68d86cb
+Nonce.7 = c4b1bcdcc20888953f8ff22363fa8a5e
+PersonalisationString.7 = c35fe47a7a0c8f82af93ec7dd162aeb423af44aa71b35d299d561b65640e43a1
+Output.7 = 4fb91c1ac25546550d914c1bca10943f0bc2d6785d11eb28eef7b138b42a248b7866eeedee2a00772d3ea216430344af63e896fd0731e93ed7e06e96024385af563cc80cbb27df9285219b1abc57949c580b3d7b7b2e956ec2375ea5069c89ca50602494fbaf80b06424fda851a7576806dd18cb8c96e11c746b71e272c09eae0d3e1a5e14d46a4f09ce1520c36aee0e565f3093e703786bb109a4362620eec6108c0ae71abcb8e3a46e9907fa74522cf47f81d743ff4766b7ecf81982340e573a2893636ea8072373a628abe72e78fa22785e607d4fd6941b6b58da5d77517e3cd6d228b67b49b408b7b67c76ff126da818ba19e4dc36ab647f3b3bdb3c9e19
+Entropy.8 = d120f00e06be42483e026e4be88267ca2f8c1b92f3a8342fd460ee5f2f162bf9
+Nonce.8 = e851a711e87dd4ce719d660de2988754
+PersonalisationString.8 = 28b9fd7cbe714602be7d7d8a159db5e72cfdc8ad8f25cd18023da801466bcd2b
+Output.8 = 6912a14bbddf7b5fee9d8df4e06662b8856bcb85ed0dc70061c0951b46ff4a6d9fc49eed01f71a9155b3f03ec31d2bf96d0cd5b961a36cb702c9cbb4a938f3a5cdbbd22d4a94f12434a706362897617f25953d6f62243cb3b8cb21877cf74899d5285a5b7fdc8fe18f49bc7f0fa4d200e8c98ee38884e4ab56ff8e31dd2420957c016b3a3dd65f6cef4b440d1a4f4dd38ac774e0d06e4d32bcd1d25aa54417f6e2be37096fe6fe6b2e08863ae1f03f9c7f584ccb5790d085647a1ef6a39614b208fdce993294bbcf2b66692d41a9c71b91fa0183486d70b3ce17c8d3b6ed8a3eee804ead37cb8b13fba5858eb9ee7e44b4cd9f5d1e063c33e15046bc080bb3f7
+Entropy.9 = 256eabcc37aed36ee6a5e288f6a96c28b8554ae987eea487a87f7f1a3c93052c
+Nonce.9 = 9dceeb5a5749f26f4dfde9ce42908d33
+PersonalisationString.9 = 0aeb442729544bdfdaf0a0997e12da31187d92e5491eeb19a9d0a5b8142f4017
+Output.9 = 729f91d238cbbcb0001d55967c9e33765db722ee3c1acfb58d67f630b24ed6ea612d45b12db152f082bef94fdf1e370bbf1388c26ccb6e5d2567340897cc11efe1c5f87213a38a4f4a8fcf0ed25647e800a5b67b67558f0dad71e560334b15f294f780d837819cbbf068b1855b3cf62d9cc9db854e69efeb82f71d4877fa3af331f9d93c4a44f8f034fe667ecc71114202560f4131002638bb97fd28cf8843b5aada3d173fb1a0f9ddd444bdbf902e4b1ae6530dd291217a26d0c3bcc8a745f1475473197f85de47c3c2fb0cc7dd3cef12296dda7d5f16b62cb2bde59b21d29c0e1c700fc513522b8cebe196ae36542f48abd8c6a0f75cd2da045221037ea8ff
+Entropy.10 = fe4e42ca7246202e31849eb9becc217a8ba475c289d36a96879afdffd0996e07
+Nonce.10 = 26346eb244156cbc6cb297d3f57ceb43
+PersonalisationString.10 = 8f75e9cb9dbf8636d5ca1a08e5def41e9c773de65bda450e025b3947d198fc0c
+Output.10 = 952ecf7252536ef906e1c4a9d4d0fbe5696a574487a9192445b9730d96ec2bebf57c9fb3ff1203011ef221625f95721611b10ff4eca17833ce11c4ae6f2155d1954dcdcf17d4d9252a739c99e085c3a6169585fe1b2523388f0690392d30f153d2fa75d8dc12fb8f235cbd83d5d1d0f883bf2f0dff0bc3ecb490fbee2dd09be21cd63e56c90dc92552a7819da8682c1676ee432e1e6c85cb8928b9997ea4af23e7d5dcceaba634cfc31541133c2d11cda92aa858d7fc98940fe4bb6865f8986b27ccbe9889f94cfefdf5e7d7c9667dcb91ef9095daa86a27df13a4bb8afb32d4bc5273247c29a93b4eb53c0189308585bb83baf9b6ce76d995838e035aeee907
+Entropy.11 = b18f4e2614719779660fdfbd342f37b944141c5adc2346c4e37733a4da6fd2ba
+Nonce.11 = d849c315f51034df3c7bd39ce4f4ddf7
+PersonalisationString.11 = 7b6c82ea24ddf29ae2fbea9c9e284506288abff2059c07246689618d3e6ecfc2
+Output.11 = 2cbf77930162fd93a9becce1b29e5b37a9b401b8e7875f650204cce39ce74592686e274372be83c1ede3e7901d4e9fadc5d1b9f58e03e7db208feca9573dd3e0f39967922309fc7e065591b59e6cd7cd4aaf836882d1230320e22f0326c629afada478708125c4ad140b3054c9d4a660811a40df01d6f3d0acd7a16b69b10f388ce317fd795b8336a141a3c3cf95f30035567a58c66a08806c8523984bf18d75bcdd67a6c1f9fc464e939c913ba02d28fa465042e1151adb914bce52048544ff6835d1f81aec6c42f005f592772e751bc7f64ccadc276a1754c382e1355958e435fe2a096818171b644084c702ed4740bbad7f536aad0bf47b3c1fffdb3e214e
+Entropy.12 = 14c817683e8013e1a3a56e46bcca485cbf386cf85bc45d11817264b0809919dc
+Nonce.12 = 9fecddd4a2d910ff5ee139f436af231b
+PersonalisationString.12 = 13145848e593be74e8d9730be55c9b98fa551eab55c364127b16b4a295ca15ad
+Output.12 = 4a16be29fd77ac3e0b0754ef030b0702209be0bed2e2292059d5d9a07322050991991d482689e71921fb4f0d189be688fffd4eff001d78e2fa28075101c55ac98f4af065b9fb34df0a1db10ba41c5efb241e2acdf9bb65fa5051c6d01cb8a0d683b001c034cce35dae98197b3a6945b31f3eb1342cf1a8bb6e528dac01c7f0350253029a1ad0899801bca276bc5eb3dd92a712f2e99b21b81deadfc23ca053822b00f0ed0cad1b2367fd3f1bf50a121d29f4a95305877aea757456c852c2ba2af9da8cf3f8a68847749d6ffe8e115291f999059109f2ef4a1299798d2d04bada29088e9b886cf839c71cdae58b5a4d17818ecc05dfa09d7431f471f79abe0e66
+Entropy.13 = bd5263fad2fa0c4caf9b2031c27b1328bd30fbb88549d528fb3227994a012ffb
+Nonce.13 = b37e0aa74649ab01627fe3663d28fef0
+PersonalisationString.13 = e49c8fd4b2d1676096f937a0674ce41f2b960eb53e4b35d01212adb6b1ded917
+Output.13 = f5dd013f8eea8fc48a2a77600cac576dbab7919c91f2d360749ae7369f184fdb428d3575ff97574b8727ad20dceb04d116030b8c3ad2ee54c69e6e01fa1580cedca2949641067a2845f6fffd1909ae2e520b9319ecbbcd6c10afee1ac1e4630cdf6c7f66c233eee4e7147f0503cc4179a5047668f198b69aac1a715480602df33c8383ba3b9cd179c647dbb5d5d1bb20c9bec9d933d75ae6e9c256df9eef4ae2ea062583b6619d45f2fa684d4fb6535c381478c2204e2f448018e9fcc4184d40c3fd02f8382c6f856be5ccbba36a81c7789efd1ebc4b71f99dbb7c002787f9b2cd4a20dc6444b808dfb8654b00afbd1f6595668de0b52dbefa298ab69687a50e
+Entropy.14 = e9e4f59e1a5fd43acbe20923907227b2790efd1a2118106b1e4823588c525423
+Nonce.14 = fff1f2e2ac117af8b2cb023f0dd6c6ea
+PersonalisationString.14 = 0a4c2df69d6c69df0a9c58ab7c886ed9db294f5fe98eb066fde543b409ee91e0
+Output.14 = ae35e947a538e7da73f944b4dea689c064b144b753fe597369e58ec4868099c0f000995949e82dc3e5c00555a2cfe48c8a87e87ae5e7402e2b1679e413cc556f08796269ef3ea83d6a49116349a31710964fb2f936cccf249472eab3267cc1ca0073ff4d964eefc82dd1559c3737661f8b206757a64c756680fb7ab6be8cb433b93f21a04c1e99c777ac26c1f34918794085ee593ca27ae991c53d141e52f90e7872bbb036dce78e6a33e2d638360f9c15d5746d6ff13c1bcdff1cd01749fa51c3c72e68c0ce57423d4915abe84c15cfb3301d0c3b8ffc6a1962c1fd981790fa2a3da60d70e8e8557e4b2e7458ad85f5141ad46e1db751893e8327c8197571e8
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = e97a4631d0a08d549cde8af9a1aae058e3e9585575a726c76a27bc62bed18a4b
+Nonce.0 = 227221d5fe5a5db9810f9afe56a3ee78
+PersonalisationString.0 = 94084b11d55e0f9c2ef577741753af66ad7a25b28524b50ea970105c3545e97d
+AdditionalInputA.0 = 24c81d4773938371b906cf4801957ac22f87432b9c8a84bc5ac04ad5b1cc3f57
+AdditionalInputB.0 = c8c878451e2b76577c36393ca253888c1038885bbfdacd8539615a611e2ac00b
+Output.0 = 761422dea283262998c0ffffefc77de2d395c818b9cf1ac2bcd1153235e0d8b63199c51e195135a75f1f87b454484ecc560c532c7ba5923c9490a423c177453459d81efc38ce2939226043cb733062eae303a009b48ee0cf3c7e40abe2b57a70a6062c669a9fbff20b4c94b4ecbc5f744a80d7be8134359581d441da921737b1329470b214f3e679fb7ad48baf046bac59a36b5770806cdef28cc4a8fd0e049b924c3c9216e00ba63c2ff771d66b7520dd33a85382a84b622717e594e447c919926a5b2e94d490ee626da9df587fed674067917963fd51d383e55730c17a124555e2e46e1395c9920d07dae4d67ffee5c759b6a326eec6d7b3ba6dee012e4807
+Entropy.1 = 5c96609e9de807efed31d3c2d63e284be5c44c1b5ab84672664de8d8d8e2f818
+Nonce.1 = 1b95a5290fdafeb05dc902a9a7bd639b
+PersonalisationString.1 = 135aafb3bbc89ef1e00a2a35ef32f122b7511cc55d86e7822a34859b630b4d29
+AdditionalInputA.1 = 115774904a953af07936e3efdcf6054b4c534dc8654f563bb10610444d30625f
+AdditionalInputB.1 = 4705ec7525e63919f7483fe76cdf7397b19f22d2a9d54b6cf0ff9abcf0a7c46d
+Output.1 = ae2cfbb29fde23e8c22d77d7a50ba66798da93be4e49ef78b38c9be2411e2d8a9954eb29fbad0a967c51b26d8d746801539aceb32e2459d07baa994869d3b6db2c88fb9d7250fac00de8f79990d501ad985590031f7c45a00cd9b6d1b5531b238f3a31d33237c40a3da31356171cafd52cbb7929e32b38fe523d8212de801f554348a3cc468daca70e05affc9af97f172aba00b2acc50d7dcb5f0ecbce741c71a65c657e9d0f250c44f73865962b1a0d19738e9ffe9f17c3e03363bedf5312c444375529fa8df9dd72b7c09f20c2ef37abb93e6fa57cadbcd7b23036bb9924fcfb9bf83b09ea360fd3988639151b1ab22939e9ea1cdc413f7a2cf04cf2778345
+Entropy.2 = 4cbbd0538535994cf00354ff8609ddfd04e80dc4174b9542cdab52385dd968dd
+Nonce.2 = bef8157a6e3f26f040229a450f8e564f
+PersonalisationString.2 = ed81729d1aef522f7bf9c127207d8a680ce4432964ed4025b5bbb12964374f3e
+AdditionalInputA.2 = 1259073b57358935b7149fa4349793c5ff28d3ce98b483ec48986aa285451abc
+AdditionalInputB.2 = b350a4e931bb5db50a866aa3c01ead7d48d5859bb97b675e77ebb844ac832eb9
+Output.2 = 215cca589f737df48d60360c4806ed548d44938c2bf5b1707310df987edda51e5092a7d9ca4955303ac59bfa980ba6e1819ed1141978c3d7df1125f5c4abec5b15bb8f5fd0edb1f26bcebea5aa7c8d5d32e8a5b608f609d9dfd765074b23cc524596a91226b726d899e42bdee0321eeb2dbaf63d33cced6890c19b466636df05072f007ae60a2364dde7f82315e3e30e63258b8abd12f18b6ab3d384cc9349e56dff00c3f53a86a301aa7205394199d32382096f6cd9db9646a92e73c3fd1e53c28a91683031c1ac72bb85af50be669d0e1d7b05a3bf1fc9720025c1e39e1f09d18d2e9247f726ac691a1c2321a667e6bacd7d77a57ce46397db1a91e7908ad5
+Entropy.3 = 9b2bb0f34e6f0a31eff00e6604e6ca77643f69895877f77197a06e2b42bf047b
+Nonce.3 = 3c1ee55a2a28fb3579324a54458310b2
+PersonalisationString.3 = 895e7060956784e5ea113ca785214bcf608e2a53c175e6edf5b78f1ad90e67c6
+AdditionalInputA.3 = c0b1980d57fb797c4907aad1fb5662bcc8d6ee30f6bed951e77c11d1893346e9
+AdditionalInputB.3 = af3357fd21fc04d1d1bd162b94bf129c45d41fee90366a180d98d41325336b5c
+Output.3 = 50941cc105c694dd26d5bc73c08399168a270428ef594a6968fde834e889cfbbf0a80d7dad65d2fca21ba8019f1011313fe86983a555fb3ccb643bb771724e04114f3266d72c2e1a75363aebda9871c3bafcee3f389ff4c6f1f1bb5e6da5389e04f2822da800cb058da9cd698c65d54b16e7562c83506b632e4b5c7a78d6e36ec307e48cfec4fbc3ca3dd67ca95f9bd7f1d609e0a6d8b5bd3feef00e0c4165e77da84f989210c78daf633aef657855fca26b832994000f980c21d355db10f71f9cbb8079c48aeb673c5ba097a325d9a89e05bbf960fed4f8eb097cf37f61900db8171685107d53f85bbd8c1a4a1c7045c8b6e3a8a2c4114542292555585a090d
+Entropy.4 = 9c8306c6941098408c56518a44d3075c22e02f19a6041d2e9c4e296fda435db9
+Nonce.4 = 17c99d538ab65f6f1bfab0d479a1833a
+PersonalisationString.4 = 3a80e9f5b71b242ae07ce7b617057dabae189c5468da2cf049b5b529abc877d5
+AdditionalInputA.4 = 3c151e92dd3121a8d2d11604632df00cf90706d3e843737445de0f2fde1ea924
+AdditionalInputB.4 = f53cb5fe673201f5eaf4115382d48ba45be405b37a31a56e41d1d76202038b06
+Output.4 = 9bf31156e54d7142490e620afec2217931fb2389215a3609b384b0551bb3c9d90c3b3053054046a324db9b34633e41b66114bfa7ee86bbd22d08d53e349a4dc875265b32151d3e475df348a22d5226478184f372b0ba3be92ec1b284fc66dfa3609463214b6b468b29478acb0c55e1d4674882cb75e3eaa3a66ea0f4d7b1a571206a761d636bd3519afb6f05a0f1b6bb38c00bd68530a6c9b445b6b4a9c7457a055627b606f4508ed676fb5ba0d27589b7f464271c3e561215905c50ec48f5ddd1b8549e8d163453083db96c7ec8eeedaf6804369e76760b08abcca937c497900be385db8804b443e8a1489b8f3e3e4cf367dac3e15cb8e95cdabad04f08856c
+Entropy.5 = 87a8fce521df0a2e26f1b1f9c7ec9e98968474915a085a95cbdca7d8c669e08a
+Nonce.5 = 69b8c3c3df07f9ada368be448938bf92
+PersonalisationString.5 = b1bfaead04743bdcfdb193d32260918ff803abbcc0d5ddc50439bd01f6e42a3c
+AdditionalInputA.5 = 12a07384e9c74fb3f33df1a089dddb7d416151a0270d0c0216e085f1ec4c249b
+AdditionalInputB.5 = 9b42567093112cb5889703b77b4b372276b5bbccadf86eeb9ef6d3cd395b2acd
+Output.5 = 5ba662260aa0f743a33a9b552ce41d93335a855a55df11b870efacb7f75e39c978e730acce3664c814ac10fa10989fb00a39b584bb14cad2c02c309703c8ea8768d479d9b4e17402ee38cb82c5f4d80125f3e674ac1adb919cc8a988f79f531b08253fbad0a1b27fb1997a4e2c7bd5ff3abf66281e8b60987587327a9101b76cd13771e23ee2f02dc339589b9aac4f5af740afdaf494021c3504fdda8f93f77cdd8262df7d4c48f85b6eb03a7e5279db4d18f645a63eb6f53f9fb123c53a78686f0113a209b6eeef3b10cd4489875a07af863c467f25b69cd13b8e72847465fba025e25fe7bcb41745369f255df0eeffc3e5f066815ef7715680b104e20a7e9e
+Entropy.6 = 69d667bde79e41cb78742426ca5ebd48086cf1ded5cad7293fcf910e5ab23cc8
+Nonce.6 = cad75bd989c3ffd05817d1aaa5493c05
+PersonalisationString.6 = 5f72346eb50ea82cb111d5b3c91dc9b7c61c92fa1a062177d513fb616b1226d5
+AdditionalInputA.6 = 0465b8aa89d9cbbe8e1cfa2e64e64b8d1f5dbec7f710a6d37fce898e3f81e57b
+AdditionalInputB.6 = 173135f31c2320cccf513e88a21f2d207e00cbe4330d2f550e0be77405eef47a
+Output.6 = 34a08d7a564515a918bce93cae084f27a558f6f214c4bc9169dbf507c3f11d02ec97bdfd777960f6b4c4543c1e14456d0079215320ab607e04b7519090ebaf3a5fbb0d7a3fda1af6cd8c5d785524bdba75abbe50e3d58e5f05f8f6b2c2570f1178acd2f4c11a7b1b8b4ebe4ddb71a85bf19bb2fb25241374530cbc6c0605066e1129a2d398356cf2ec2f7a286c5b869c702aced63f4e12f39b7ce250547a922872c36268a3a4649f6641987bb7c6baf1a3e82cdf04d11160ba11c5a002cfbcf4a8698286ff318ec01fc2c5f6664e50561991a533ad183a21e7b97e0052b0350d213738b0c6e5421a524845a861f539930540cc40c6ed78c46be9c122e7974d35
+Entropy.7 = f1f6e5a55fb2180de436d48115aa1aa38a6242eeb0959de3690f259c1d8395a5
+Nonce.7 = 862d1ac4843404d25215c83bca90f44e
+PersonalisationString.7 = f467ef083c745a1bfc9be44f1d468b2518e3ff1c0cee6819fdde354d4071b17e
+AdditionalInputA.7 = fdda9f0888c4439cded15a768300d163c1e326ee5571c22ab95ab3e44b1676d2
+AdditionalInputB.7 = 6b8d60c565604c8fa8d7adaf0b07ed268a491fb79794d2770356e191daa1cb50
+Output.7 = 55d0788614b770f4b8c3d3ac0bbf628f294ba2fd16612b65d0f469ded665e3c8b82c95db80cc6b410b5a6e624151fc50bf02f279ffabc19dd094cffb17ba44b11209b923df326db14eee35a8bf1eca3807afae918206e844e517eb32c207342008a0da742e734433867fd86fd89d27ec6e51a9db3ad1adea645fdc57179c4b71de8b455ae00efc09328a0bffd8c61e3880c007915997daeed4adba61b44040f6f9b6c6427e1c23357c8f7e18b5c974b3c34a2fd5cb5e70f48df2d10c1deabd987f8390bb33858d9a5133a7bd798b1c7741729b8562fecb3d4831e9ce101de192d64bb5d757cbb21090d669afc5566c1d6e25586678b5f2fc7d6c6113ac4eb54f
+Entropy.8 = 0db9d437153149e101d5818b263b975735994dfc33d8b3f158a05760867757ab
+Nonce.8 = 438a5024e1d43006226018c378af55d3
+PersonalisationString.8 = 275bdc5fc78b0d8afb5c8aa5f7854c319a81bb8cc9300210a9990fb7933a352e
+AdditionalInputA.8 = 809da54d1830545672f180fa3e0441a0d3fe472e7cd7a6d707fee5af7e9b21c2
+AdditionalInputB.8 = ebe66cee6efbf583c881a25e346ca7d99741dacfce0d8785c659e92774e26ff2
+Output.8 = 878a3d109d814ff4a4935689ca96b3d444bfcee9edfcd9031255ad2538871027273bad5225864e84f3c2afaa22a40e7f6793abbc49c8b0ddc7b30d9dc7b408888e6b98f4bc79e08775b599661ea4b50669132c21272f8d17fec9d1e5310335b0e6480d7075c830a44ea528900f99de61191b5a006ca4340356dbf20c62e8ffd0577d623146b12937e84a6e17c0ae08efd339c9aa979c7e21e9c56e019f7e4f375bb601b1a83c21f27a554ec05191794befe514dfbff5a3c9a0a9c80bfe9b6adc7deffd31c70ba13fcf170abd6bf3d384381e0a31fa9c81b1bd207ea2e0b4153b6a1252a9f73f19f6f099fda0f87baba99b9711a00b5f50ad88d3bc1c4e806467
+Entropy.9 = 4106f6ba6a291fa54e4ecfd9fa61b961554e4e8e03e19d9bfd82bd35c3471e8b
+Nonce.9 = c5bdcd2f810079c1bbfe906929e88d27
+PersonalisationString.9 = 5a7e61b86ca70939e64af613a667695c7c915e667c79998e76e55eb33fef6d86
+AdditionalInputA.9 = 86c7d5883aee568aa74d25782019fbd6f5acf4196752ff3d1dd96ec1e7436424
+AdditionalInputB.9 = 3a5d80e739f5a30e6bb507d82b60ff987d5bd9cbbff4b47daff278a3252db3ef
+Output.9 = fb146146f828e880c6ec7ab5a65fc8ec4e4d7d975c6d7c0a9bc7ce041f49799b11e235d7ac5a4ec4eea721c3323448e686ae96579233ad698a9d6fe3f5b37d87ccfce640192dcdb51c7bf35404c90b705bd97482d95d1c3e3a40152c86ab923588842ab02f4d922318a7fb84453b072c749a7f54e8ad005c29c48af6f01ecdd8fac13295e42b2077c70c7bf54e214317f98003e4cde07755e95c91f1953b29b3eecd49dc753e74aaf2b1c83feae87428be6a5aaa3261f0f65491e04c1fcdfd5481eadab68f057df3c83694c7451fded86a18470b06f1779c38efcac54b576e99eced3b5581eb5c9f7b3340ad5667d1f0d3fead8b9484a032d5f74d900fd64d10
+Entropy.10 = 5d1fcdabb70dad1428c8be291720c92b8565f331ee3438d79bcddc968efedcdb
+Nonce.10 = 9319f5ee91124b93b965d504211fef04
+PersonalisationString.10 = 6c8c8a066c6208dbc18a40a30b9f689048877e038bf76d65acbdde7ae4c566f8
+AdditionalInputA.10 = bfa2e9ebe0d70d3b62cdbd78c775a62e0e22fa75f168123a336b66b9a2b68c06
+AdditionalInputB.10 = e48b5245ea241baeb7f665a9daaad662d7b2422c3e3711cfbed81d73691864ee
+Output.10 = 1586e0761c4a39013dcb552a0e363e709f4303c0e575653c9b240be7449ea26e4bb1dc93f06ec958b6c06217757fc550b356c135063c00fce9d856aec0edd20735b46b7c9a8e7df780db3072fc2b314fa5cda653ba3690132f10d30ee94c8458846be75659ef3868086bcf54ff55a8db1ea65c3e747a8ddab3f2304738e0c75adfc10c23ba651ccf0de64a39cab3beef667f466391a61a87a981afe883f09c4edbd3eae98d51cd3e7b31ee179f8a4e10feac96ea210a4b8415c9f2cfeb2bc8bf51f13801dc542ba1badda1c30141d72abb1bbb35c9bb481d91db5691c44bf3526a02d0bf776304a951858aa2fcf3f45bc656abcaeea94cbdc851a914b4b3a3ea
+Entropy.11 = 9fc58d0785adbf033ce6642dcc9a861df44a35e89d06b346b165074a048b5009
+Nonce.11 = 94b4c0b3e27306b8c805c97b0ea14bb5
+PersonalisationString.11 = e02f7a856266195fb5f4810232cd5c71a4465e1d95625c01e8e7eb69c63f6796
+AdditionalInputA.11 = 7cd18b8d035b57bd01464280abe891b7faf55f9ed9910d9a148b030340c67cdb
+AdditionalInputB.11 = 918c4d43fecf993227f7c120d239a30d3c315602800d6d58b9e9e0715964cfa3
+Output.11 = b8a3581eb4a208d1ab8f0e84e9ff3d2e0ba57703a7b5be2e4f3a3ede2e2519f5e6068c28c41171446cfbc40b48a97bc7a9a1e4d3b02f48fbf55b1d63da7cbc5b7a95f354afda273dbf5bf099961db4a4c5f296286dc0a51091a522398973d5527b2e55e0523c21fffdd0dd38527bc45959d5a711d541634e3139577312d678421eb37553c127beec64422316e48542a906cd7efe0d96eae3c4f2db7666083d9365a76cee4a207d712ddb04bf775be29ed9f030eade4537961737e3939a19e0769a3a8b96d055120c49925fe1ebc4a2ad54468421dd5465e8761b3e2e384373a971e408dd3a54907538a7d887986677eb192761959a4293523f81647a657aaeea
+Entropy.12 = d43927d1e633fc3433536cd03617a97a3a10a7ecad3f0c781602829f8ec7feb2
+Nonce.12 = dd5922f2a2dee51db93bcf35100a8364
+PersonalisationString.12 = 3335a02aba1ea28d2e56973e21109e0adfb5068613c447e625fd83a8d0e34494
+AdditionalInputA.12 = bfde33c52407d3137123812c4818ca1e4b61878b8f9dbaec47935e3948a88d0d
+AdditionalInputB.12 = 42597cf03bbee0e003d8677159918f5318402f7329f08e1d93c850e2a2a2f1bb
+Output.12 = e53c7d0b376a94809f472961acff314079014958935cd67acc476abdd919a43cd3f7d1462d0d6e628ef5d0c8e04a6d243838c61ea36b015e84d7ad59e49b45c9b04f6ec78687ba47156e429b2fb6dc2c0da4f5677d1f689cd28612cfa6d95628c26b5b3e01186153a1c25c02f5ce5fc287623358687d2034347b2433ffc1445a2d93cb0103ccdaf0c585f7f4e7d41aef310be127208b3da90523aceac5fa13ffe77eaa4d1fd058957c8dd2f355cae7f9e3d8f29ec7099599ba6c755689d53d6ccd84e33407a066506d97decd7e306d22ca6e0faa7b94f91f4eb004422ddf9dd6b1f49b6400ea55d40e25c67103ab50bcc92d100e89ba569b6d51aacddf02daf1
+Entropy.13 = 0bd69ce9a0a66dffefba83ae563e8df0fc6c7d7bdf491bf52cbf3f3777025cdf
+Nonce.13 = 92b32217f550a1fe735b8519b44b040d
+PersonalisationString.13 = 820da3187bc879cd1f40476fd9677f3b67e02b35b6632ab68891e25f10555b69
+AdditionalInputA.13 = 903b882de013695b4683316ffbd7c7809288d54c72e369f70cf172bff85e5629
+AdditionalInputB.13 = cfb5f494e76486ceef12dfe1bafd6ccf9b0754d8d2306fb0c41c0f4e921317ef
+Output.13 = ebad5e5a358ceab806ae5590d80bc0ba5d4061f49f4cb79a8a9da4fd1e8cb8f41cd8edc657c5180d18e62da2b53a50085b7e18b957eaf4edc975ca9d43e380434f51542dcfa947c322c708f3d3593c520717230df17f9341f02a5596b2058a27ba23f72a862b391be884570b22e20c80dd20d0a935f068465d554c8291fcd88eff608e92200f90cccdc82cb5697f0406654d9582e8db54225aaa28697bf2c4f47eba086a575298b991098c212c9e8d95bfa48f7e500c7223d9cbffd1df6f725909ab6e9aa837ff9e69158af434d18e5a7f99d1aaf10931f380d88344ad841064130cae50edf8687615743735f80457a228475bab7559015c4f45f91bdfa31d87
+Entropy.14 = 45784684d6004731689e33e45b344d7b68dc4fa841133cb2dd65c4b326dffa90
+Nonce.14 = 1109dfac2e48bf17f2fea33b412dc653
+PersonalisationString.14 = 7c6f4675f7a0b8c424d5be9e809efa305493874d9a950cb343afdfb64e77ecb5
+AdditionalInputA.14 = 2b2dbe3834d8be93f1396b19be83bd96823dd82740da71c5eeb7b21865021884
+AdditionalInputB.14 = 49c322fc1bec86d3e20628d9bdc1644e6f5e0237c7c694746bfee32a00145696
+Output.14 = 9110cec7d07e6e32724bf043e73021b3ca0e4516b619d036ac9a00914e12f01ece71989f55c1caccd542c60a9cccffb91e203fd39dca2d92c8eb03ee7ee88abf21dc6891de326c3190f25ee9ab44ca72d178db0f846969465b25a07dcc83777e6b63a7f9f1a8246dd31ce50cd9eb70e6e383c9ad4dae19f7cec8bfe079b36d309c28b10161c28b8d66c357c7ee01f07403a596366725fd5bd3a5de3cb40dcf60aac10635615b866ae633fbdb7ece41695d533757d9d16c6d44fd170fae77c15b7426ed6ec8c9d6e9245cd5e19e8dc3c8c7e671007ce8454413bd07407e8a2248bee95a7669db6ee47377b4490a6251abb60cd4e2e404ab88aa4948e71ecec50c
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = dc01767ed6527b8775e99fd5d46dd33db0ec2ebb393acf59b080510a657954ba
+Nonce.0 = 174e0ed454d1b57021fa980f4597ea25
+Output.0 = 3de906b138662897b8a5aa00d8cfaa364bf70143d1de088a6f38b610c8f4d2a20c107c9f6d277850fa5f50007744f90cda0e20e3b140f9aac249a43ece99c574245ced90e6023ff5bf5bacee6656866db3fd72a209c79fd9829e3c63a7f46f0d31398e189331f93ec97ff1554bf0739c18abc1cc1dca1d8a8a5ab243b7355223ea6eeaddccc0972f23a03291b28af9303c21c0a1417529471c6adeaacc659554e8619b03fe6112de5c72162dc6e1039cf05141fa88be6abddcd2f312167e86773e52e73336c6404b44820bdc14ffa6f0e8f7149da33743fbd2c89dbd0e75b6bd9ce7703b337031ab51f5137fe1508567340fd11bf4b51f34032385f1287d4af1
+Entropy.1 = 197c8b09c20500b2ff9095142c4629becd3a131ed17b99940ab31a53762226ba
+Nonce.1 = 4579a3858564901928fed2a75c98f32f
+Output.1 = c33b2418bf4d66f49ad1c05102686c65613cc3602d74aa4e5c611873a337c0fffc4c8ccba9c5ab56c3c9cdfd9be3c0da039bf08442cf2ed4af5a9fdbedf0d66001192bca2a2a5dd5a49cf159e2a5ff00066eec08b99312f84033e6e6f24bc5d908cd9d19e6314bfebb98bdf431c9779d0ee7d15cf9ee7e9baefddc6c6625500911d2810a0ec794e28eefcd0fd76590419933e1a1e077cb2860975762926eb206e1eee8f1a6eeba762d7ff6056a37c56649b034af7c976432cc63e672dfd4b564bfd4898de6ae7944789199e700c64a78ecd1b841d206a7c523040f240001829363809569dc5e90762c5c63a5147fdcf6f31beb60151ed54637c73d6df4a93aed
+Entropy.2 = dfe546e4148a5d0107f3dc9f735936d87f5ffbd694158d140ff04fce96785e93
+Nonce.2 = 943f71ec131f0d6abe5098a00a93321f
+Output.2 = 8290a703f35fcec670b1239fee36a0059fa0b3a355cda9bc1f824ec616107edf4f101d9d8e7979892ae17a3cedfbc9c13a938335d61414f20308a4afb94846bc8ef1729cd35fca10f0bb975cfb554f8723cc51e9356d13c083fd5954a0e4346823dcd5b5ebcb0e21b788609bd88fe40354dfcdecbdd97d08af772351cb919e3d19ee65444f1269dd790cdac4ee88b026770eaf75c8018cfb7526a1c4efbb9a870287e6a0ed8dc8e67124feba54baefe721ce87da82743e4f185b7f591ef67506ad43c50df769dcb68965808d246f294461d4a55c9a148998572e6ab52bf574a50cc60129b1bbadde86695e3c5d4d21ba7f9e4beb432a39ba85dce836b16452a2
+Entropy.3 = f81566d48684aa031fa29e7a8c759dd08f6666b13692776361ece56e92bc3c2a
+Nonce.3 = 40b04432b8979914f3e0e19b9d3c01b6
+Output.3 = 1799a737c4436d32e8ea5662541c2ff628c2f293aaa7a463f6566e52d78782c88a34c505e36f29f351d2063880b5b8c3fc99ed9e02ee62496649e1401b1e151fcdbb3dc76f13b209044fa205d050603fb1197da58e7a1a3c3edc8c4b6adc230239a120b71baa6a272624c67f0eafbe6daa71c681eaa67b47227daa1ba058f399440c421dde47ec1b8211d5c57c7bb82c7448a3491b6209a450ac1e0856363fff9afecdb065051021c6b9f0e7a010d1022af4ad396ad1d164894e1c077fd83b71d55c12f9b41bfec2023998f43a2457cd55bd0fdf0a68258fde7a6fa13beb1070a5183145a2d7b88786b443deabd15e594dea1f1eb72d556178e0c74701773739
+Entropy.4 = 36afbb34419c0396505235be6de69861e8902bf1c70a3e2836b97998cbac8b38
+Nonce.4 = d45450d4c1e1c3cc4be7379b0938cc37
+Output.4 = e1dc7fb2c7d11f53a88520928b127cc0e234c1ce3d593bb05967ab2600a1d66b0fb32e70b9985db2f6c14999f3b9faccb72c318e07f9d7770f3a0ed33f2f822e36a5db463cfadbaaab7ec75e773e8d4b5497ac104e23e199e1284c4f1f9e75322ebecbe659bd564ed808f815ed25317a7e5c770eaa40b63a529634a0cde0eb1bab761a91ef260eb4cd2c5e2535d8b51d272ea7251de7c9741c9b3d1ab95d1fafc7ecda61aa8aba1afe220c0fdf3cb22234538c1d47fd0921244b11b55e54aaec9e883ce542f238aa1f746c09be9bc8b4c09116730269115cc649c1abf323f3c1beab4601d402a49d35763f1ad49c7783faccf1bdeafc02beb34a6d247b6ff33c
+Entropy.5 = 5eb9dd00469067be59bd445b04152b85576725c3395d7c413c723990b9f56000
+Nonce.5 = 54b1b9129eca3d2db0c63e4467a495b9
+Output.5 = 2fa8957e56449eeb60e0cb78e9a00a31842b821ac67e8c883f6be54e8134666b30011f6ca692f4694d663e8542ec824369faeedd281ad710110687092cff0f72990ed35cd942fc5626bd58bd4ca6a5043cce4db8d4e1dec5924bc9f9f2471b1ebc952c73629e3e53bd88b432b6930fd33e9c03daba84205793cc6c34d3e52f244efcb0e0b6335d14dbc4941bad32a8c69d750a7a91509a0ac714d80b2a0e28e14e02e5e5785906b94fa153b7abd1e0dec4b4fd00c073ab6acb6f705c07f8d7239caf3809109c78461d7ddb334edd0ef9902861ef98b7d7ac418ed9c24d2fb7c4414e25794ee5165feac3611caab8945541af42f77cbd0d7c118a077ade186972
+Entropy.6 = 42f551fb6533137f40758d00c3b5b81058281f7cbc18ba5f40aeddd31065ec7b
+Nonce.6 = 2cee96d6c3eef1c9ed1485cca77725a7
+Output.6 = 3fd4f97eedccf2e2eddb37caaaae3433e5585c9fddf32aa601c68338554ec84f16aadb8e808e194c4f090defd53ba7c362aa70cdaf8c014543f4b11ef2a3a70f804422242d646a0fa234ac64719cdd7589835d49eb0bd2ada4b6ee458400974dafd17b43a9e5515495d0ac650fbce449e79db7842815beac2137d57b6edcf121389861d85b9ffe68143cc06e4afa9cd9639b45b310acac933160d7f0699a6df9e04b156acb02c43d5d729474bd28559de2f02192dacdd790ac550bd6c9afefae91ae3924494dfae1ce356a7bcb188da65be4eb0c356516246ef1f4e031d6247c61790b267dbf8775261e11cdae2bf7998bbce7c15c7ba5bb6b7857e7494dcd87
+Entropy.7 = a9e9d5d06014d240d427ff79fd0c6d314b5d4af6fac5c0c238a62f9224b3edc0
+Nonce.7 = b01fe9f159783d29824bf8055c646c93
+Output.7 = 60d46361f9b1834eb8c103422f3cbdfb243120cdeef6270806039931112aa45d4baa38791cca6b5eeff982a3aa7a2b2627502365644e4a6dc5a868785296bf3ca101e9bab6bd4f03b2adcc870ff9987afeddd9e6ba1edcba09f79192adef6b561c5c36dbe8aeb196da9a2384259583f6d40aeb54197f0291e5b70a34aa559558358b88f5786cd5822a1523dbbed83314882c5083aead0ef17c2ca94e7322142706cac212a5521f6d4f881ac61128b13e327f4b5e81c6bf2649b01b40645edb9aca61ebc58290db9f46eac6cb475b5c3a9e481a80cd98f548031c99e46f41d85456fa87f824e8164b408dcf1aa14fa3f9ff236f11e1ebc86c3dfe0e97e5d60018
+Entropy.8 = a160a99bc9baef7d5ec8be75bd005d094e431f555fe4d49d3f1f41fcb3a07736
+Nonce.8 = b5d170cc69ee34ee7ba73f35646512cf
+Output.8 = ce66754bd42cfe4ad5fbb8a0283cffa51dbd56da7326786ed7c5eb372a046dfb9ef6906c438eee9a21b78327073301c994353c42ad58db488e28004cdbf5c0cc9bfe75aad76be3c81fd72601fccbd580c2186d92ecdb25dc13973337f4876d6aabeeafe1604f1cbd5fbd804a6b15ee1e3d9987986941a4ea51c2d461364276913c16c580e12f51bf4444b5c0e4ff9f4b797cb850a9cc562c4e39e3240a196816638c5e62525f880dd57b1808c54d59f55b4f92d0706b08b25b77284544c91ee987452849d019a65a38ffe3511e0431e7be6207e88a1cfd989185906815fbd4c421e31c7f6cde9ed3139a87a5e08930e44aad1294451e0ad8f89978a1379cf7f3
+Entropy.9 = 9ec905ee3602c95906f6084b8cf69a8be76d268652035370cfdf13a871a85f86
+Nonce.9 = a7764c145e668435e219dd8cf9cab23f
+Output.9 = 1996b8d7bf0d43454d61239147a8b32a27d73e0b1c1d8bbf8ab5b751bba9cc813d8be80c0ac7d71ce30bbd5ff5b1b17c12413a169af3d081f8ab1739048a0d2c1c2e24c5e44b0dd7225eeb227610af83a4a271fc31da57213eb6d938edcc2da5e712210202a09020ae24967e271677adeb2dfe6347cb6573e413dc20ae7ebd151acc91a255dc5153be1f6dfbaa4f2b7704d557592961d9847c5d8302469b02e3ca07cf331b9e61b9ec64efd32f3405319506b772fee3aa1d2ac2d70303d47e193e0e1ac9c8565861a5d7f62e515d61f770e2ab3fed00b3f9e713058322586914d69491fb4515cb2c5d21cf07c710cbc4ce362383d084c857e73f62c58f76567b
+Entropy.10 = 8dbf9b093d9a190ea8d588a16b5ff2f72caa500a3cd55e0a0b7aea0ca5c41731
+Nonce.10 = a5087104d6327761d61843ef45cbbe88
+Output.10 = 4b4ed879c2b1980112e0f4e627eff8f8c7d210f2606aaa2f7d26422c3e4dd3a66623ee501b702ae194b7ac258613e87f248bf49b40d0df4427142185d2e94b8e14570a00efcaf59ed542454f250475cfda7a98d1c1450978336f613f704dd9cb87b132ab60f24a51a1e1d815ab7e1d96967bb255dc5ac351238053602fd774b9223e7f079a423ef7b0a8ec9a71e222825ebe3c817ded31c2e6c68e9ae26feec7e75fd04157f60a25ad6c13734ea8ffcbf426dd61f4adc1a15e0693b420afc3035f7c847766430792b4fc78a32377a808c82ca7a2abc3c8370a3ff192014ffc819b5e842596cfc46d0c79546ea429f744f5b1acf603e65fc472d592ca07c8d19e
+Entropy.11 = 222e8db3a1b1a95497aa0a141277d9c9c643d0cae5f47d1f58cc15c8120cefc4
+Nonce.11 = 5836e4a886163ee0b2966ae82117b48e
+Output.11 = e28b5015a08bb7b427bb90d734089a277eb749803280d5edd578fd4ab6bf48c3c6ad69176c116b3d98452e377c08bc4c2d06f552db3258c0c4062a498e22c438114dd312353e47444f4a3e393109fa4a33fd183b599ac0f7290726f9589f24a266e6214dbd0a165e22b277c88047ce9aba14f0b0912920560c89c658997590b4e18e7bd5989e956b0a4a05791c920adda109c598458209965fac49ba908be37301ae4f32691334975860014d63cd8cb4e12ea1052ab6b6fbf2728caa0d14321735a0a5064fa134276b7617bd081938dddd2fa5380284be2b16874b3739748d0aaa79c420d1a48a1ef860dec60e9a1ee0348854670eb289a36c6c844ec37164a2
+Entropy.12 = c648e453f220fd4568476502b7260069174cd037157de9021346e81695a0f310
+Nonce.12 = f38c95d2dd89f2f83a26125306249bce
+Output.12 = 43a9a34282ff596a085abba35356affec9178ede69c2abb61b6f697f8e88c1c89a1585a246e1ba6bab4f9ef2d886bf570e7e17b587bb5a65bdce7c23372eff0a56e66689a000c0d30620678accc0196eca5c3b28d2d7ab89e8919e8ca6cf646797b282062d7c61dc6bbb540b635117c75bc5184f821375b9a03a67f43675158a8a528b730ae0c1f35839a2301f38c229d40890efb10a68f727f8b92064d82dcabbceb764311a1ee66010b5e61cf1b68c2ccf20d15d8d50601f91bb75c5a86448eb230de12d598ddf15ba5ad9b65ddf9c3e6ffdc3708c1768a4cc2378e0c5dc16b9321a5929157473108ea4fc1d78825a6f8815d7a392572ac0e6334b496a218a
+Entropy.13 = 19306c387a4da3de2f76013cd9c584dcf5e91a85a6dd35c0f25f2862a785bc0e
+Nonce.13 = ca0ef920312aa7c7dbcc510f9fd0c29a
+Output.13 = 9e13d3d914923d8a6f3d182cb8b17bcaa961ac018af69a716fe9c95f091c7e15877892e001e2b6d656306cd8359a96638bb4a56f156b4a80a1ac65d2cd284c1374c7b54cce9718f364d40a6bf90ae9ed8b8fad347212cc4546b4ca8e19c3119b2723c190d705bc56e3b2b34e6340ffe919d94dc531d7ef5fd69e6aaacad96a1b2c5278c8735f2caebdd3ba69a779a3c8b53d03428221307eb026f9269d924d5db129c8b6c680000bf868cf65a6732975dfd31276cfd96bb98727b55470ec9391f345c1c2371b3333f5b4ebed9910f72e638dae62bab13caf126fd0e90de9c51709aa3c6975a915b34f97f0598cadf90aca49e961dc5b2b32afaf0801fe481561
+Entropy.14 = 1436be35237c34bac5b5b36b24c998380883fb52621daa420112cb57bc84745c
+Nonce.14 = ed884f91a94c1b0a51f316df776283af
+Output.14 = c74ce568f0c465e79ef3700857cc8857b74ec8c075cada3f2698ff69569318b130b5b079ac5b69814d057097b0a107a546b011db601b2f7aa1708effd6479f383d7d484a5df76b63f1419eb360991475b2cd97590a1887487a76cd6fde7764cba5f101e4614c635ba7b1e18724a0a8fb39ca0948bffc441b6aa0216cf3c28ae6c06a24ad1bbe68970e06884d3b68325a3d7c1dce9a2fe87d565dccdcee7c62ed32b577763f510f0029a99530209628359bedf4bbfed1a13c222692d8cae60ca736df834a6e316db27642ed5839d2e11716a5c06e8d067e8548d7ac0687da801d292e2a6f414d7470d2e72261188347878d18e00fab3d4c15cb4c4a73cf963437
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 3be441b063a22fa9357d7ca654dd26a6d955a9a51c8bea4d65cec0bcc105edf3
+Nonce.0 = 228a8e6924f558da846e42c3e1294566
+AdditionalInputA.0 = b50a072e1abdd8f890bf20064f5148ff22c5b2eb16e6f2881d5c51be2f8ffad6
+AdditionalInputB.0 = 963a1fa213aa42f9f007205cb03b045a5d64e8e0f5e3a36844b6cf64df78cd65
+Output.0 = e0d38d3c2c4502c0b8a9f2b31d18d181879ddc8857d0ece5a780d8cc0b9950d4629a69623bff6df09513f88c8865d5a9ecda0787a90c1220865005f2335cbd386e76e14653e2c9db306e7a03aabfaa4f5ede248a4204690547c36f12e92d244836b28c0fb477a32effa9927441540532f6d0b61e450cb49b8874e857525491f0dedbbeeeb1abc1014abdd764bd8caf68ee748a08298cb62c89154fca983f484b5671bfbefb0f899ccc0fdca4024181a44f494d010d09f1f95725a06c8ea0bb0b2a4e0301c9f4acccfb031f33264a07eb0bb0fd20116bfdcd0fd79eb2b34cda757d0ac04c2ab7d4733231177f1d2f726a214a588fef154125e6e57a004fc54975
+Entropy.1 = 2035d88e64d9466873131beaf6cbf3453b134184985725801273630f12d95366
+Nonce.1 = 861ac90b63ce73983f8a080ae0a65abc
+AdditionalInputA.1 = 18aeec56ba07544e9ea60824d87d6a399ef112f6f6308c19465e559e4d9cf7f1
+AdditionalInputB.1 = e5809dcf5dd95bc13fe99f0fe94742c62ed6d8d91a690d5ceb8c9dda1fdf854e
+Output.1 = af01130e63bfd0e6b8a0cd5ea48b83dba4a1b0838bfe468c197b99f20a07761cd35c961d92c33f09914f1012054156f7cbc2334f89c67ba52e1cff9cdb4b55bc70e239cf8e5a93138a54202d71dd09684b37872d38cfaa03737157ddbf4ed49f8d828ae8785123849631f75d6ee336f0019c56f94c27b745c95731cff204c21f416ded920d483254cd4b5e6379b911e00bd48cebc97043d312039c0d45eaebf9ceeecbd5732d7e154feb91163cde82fd991d1bf96a639a85da1c08ad202bede11cae576e9aa02d5fdec20b3861198ff4aa9b5e180f5a8473de8a7108167b3319802fec12cd1d2ad2f3b5ad1a30f380c0e626f08776acc3f6cc4ac720e6b3497f
+Entropy.2 = 2b5435f668155b6f33301f7014843925954ba18a3896c917c7595f8bfa54370c
+Nonce.2 = 6fa079fc6d57b301c0a43a97fcae6d2a
+AdditionalInputA.2 = 5f3a28f69b873d551eff06f5ad0c461a2708e760b45c23e83b12a9ead6a5fcef
+AdditionalInputB.2 = afdb3929500c23411cb7375fa422d5c951215ddbf456358265df0a66ad54c183
+Output.2 = ef3d42ac07b4e662bfded6b76b476a92a0b4535c4d02b241b3861439f8c3c27edc869414c323ebc78008e1f26e2021c8fb38dfc4f5601b2520df6c277657939e7d03e0b5862f327b48c072a64b99a41d703dfeae41fd833cc617861d1855c309d76e5834915b87efb0f86becee399f3f8c7a8dfc01a1d62284a54eece9413b6b6d4c392cbb44cc3f2596cc6555fc349b50ec0201f0cfe8a4f96cf3d5d1dea005e2c73f3e7eb85f148aea3395a634421025274a23d7de7cb73857517127ccaf310bd90bf3d64c028a2bf37eaab9832d248919114173344d789efd67bae89769e0c0cee047fe250e1ee6cff4892fbf690142149bf18e445beb431ad34798433e5b
+Entropy.3 = 2a5a13ed0e320e894edef847fe8a83581e147701b7b98aaa2ee76b4d2a66399a
+Nonce.3 = a93eb301506d1ae415ea92e1eb870cde
+AdditionalInputA.3 = 863ea314f0d52544140d82cc8bc615b223edebc7d130fd805e9a32ca7089e7c6
+AdditionalInputB.3 = f5d33b1506afe6f7701370ca34572930c21c465608b443db98594f7f0f44b8d0
+Output.3 = f16d6ed1993b88e5c9809cec08a3b67a8237eac65f5b10e8e80aa764684eaba31190bc222d4f5ba4c5e207b03d758389a98b6a74b74cfecac38218b685f5ccf449f718c527b10ac19591ec74f41096d8a65e5ed6588a8b54c6f942a8c3074d1efae44085b79ef96d9837f1e4ead7a8b02e95061419f948532921384320478d2b75d00da24605d73613b2c5ca2431039d2e6ac74f13ed043f6607ba0366adbb97009178c991d3e66a58cbe5ac5388c55a5de3b1a4fc5739261f6e9a50c4f764c29e08bc2ae0ac4333a97992b4295da0d06222ad86eab0890949453befc3abf103565af6739a1536828bca6332b8935c6688022658ef6c628bdeac85c3fe4f8d98
+Entropy.4 = d91b0846115fd4cffd0881fba7fad9dc43aaedac2c585ffcf928f4f95ae5ac95
+Nonce.4 = 0c21ffdb57b959c4561abfc4960f4383
+AdditionalInputA.4 = ee0d67f52101e279d4647bffab48e16135f0c045c2d8792833b262cf33c921a2
+AdditionalInputB.4 = 7b2f1ae4964d4b8985cf4a19a0dc3d4d9bd83f0c988106ff677fa749bd6aca98
+Output.4 = 258b3d74bb8099a26a1393588d079dea4df8038a0341027a396727078273c86e0c3a6b264e4ec09bcd5315d804d7d4bd4e6a9d1540e82aa3b237e3913c10ce9066a66c21c80be364c8f5c5df996ca6d2d822f971fdf8a02a5f3a511e764ace059c48a7cc45bca9cb93305597efff3ba485386fd6aa4e2a593b25dd0bb2ddf94b75cf3606ca44edb3ec8d1e8580c9e6905a6923f50adad3af11b8ed945ae47f2ee59a74e6b9f961fd582e9f03d96b93a431f548779aeebf9dd886f9167b84bf61097a3690742660f859c989b4835d64eb20b2705d88fb26821459c0be38ddcfa2964ee44b592435c603a5775d2a02726565e91857f589d30c9b9824ade79e4df1
+Entropy.5 = c42c2ecf33e841570312797edf38a80519e41a3d557b1c1fed2039a659f30c09
+Nonce.5 = 778ca5eee535abc320483166185411e5
+AdditionalInputA.5 = 9f27710982765d669372be5e3950fca2a8681dd740bb6bf89c1c2c4f18e1cd65
+AdditionalInputB.5 = c6bb4c83edb4b67855bbc521664fe9af92393f8007831707cba859613bc9c29c
+Output.5 = e5f2dc1f6c1fc80672808f85af646a59afba470467e79a112e33259e8f30acf7c1a271ccf56bdbbd13ad76d0c5c9cdf1cc6cd7e5d648db95a7fd2d49293c775f5129efd2e71bda8c257afa6990b6f2865639dfdea1293233f93eb5d4326c3395d3b847302a7e08c862ffd322829989d3a64e292afee8f43d4dd87364246b0f3965289c0df2ea15c0aeeef51e7c0f9192d360ff3a4496b1aca2d802f9dde94972c457b365b19b2aff75316b8ad6516458e323cc618cfafdbaa4c390f11418bb8db5f805cbfae13de6ab43d1d00023ab84c533f65005ccb57b2a40fe118571ecf936e5445050338bd795b5ebead38a747ba08d730268e52adccffe919e9fa4950b
+Entropy.6 = 5b44d5c2c03f6c69c74b8669a029e776c62bef95ba8479aab2a85cc3f56d38cb
+Nonce.6 = 1ad75070506235f9f81b32c7ea8fbcaa
+AdditionalInputA.6 = 5e6ff7c4eb4ac0d178ae84228985e43b38fbe84d683c8991816fe170bb5ea731
+AdditionalInputB.6 = 75bbb6d7e2607e9b26a39457ec3fdbc11177ebcb8c747a68e989125254387eb8
+Output.6 = f2261ea0627e122c8363213d7b324811299decf7f9cef5c4fa513468549b0b41f0eb3bd6ccb669d05a455892b62ed2b07c32c0067dd9664a2363a3f827e597d5e2fef658c7610045c545715f0541ecdb31d1fe1dbe9464da63b297f7bc38bc5216b3d40c43c9fa9f3eed5b7a9f1407c1036b1e9629ceb14a661f0f1ca23b8d304aead80a4002f981fc04aeba46db169726da0e632436501eca10dfbc227362bb72b65bba7ce66c049234841e775245aec3087083090031d0c9a755d2681be65b72058a0a84bc1ef6166ae8abcba46f5b15de6e4d51ce54fd0ff472899ca64c65da4df0430155685445cd672d2079ae76efdf4f55f793190138192e1af930e168
+Entropy.7 = c46b390564cb8d4821bd54013891281e8787e380230c771919fe80a525c521f6
+Nonce.7 = ebf67220adacc3bc9d1d8444a65fd67c
+AdditionalInputA.7 = 5f27e929d41a335838cece0e3a1973769a11a9dfd7761eca8141916e8f012838
+AdditionalInputB.7 = 1e52ddf999ba1d43f7daed52823f755cc48d87955ae840ef90bc1459028b2b0d
+Output.7 = 1d589251084c8d632a06094499724d4dd52da77710687e4fde9df4c000450b93ac103647a33f0afce8d1fd806a3eddb2e6bb0ee5e1f4a9f20712fd91d7353c6a0547beafa32f9ee05f9c0e30444820d40cf8fe052ef519cd54826af48c31f2a0f8e45fad4e9817e5fc6768683703284f22ebbd81a10df3ab05db51fac38a5134e54db214af9d7d97aad341932663212e1c245719dfcf476c1162ecdac8dc719ea2df89a8ce06757c6c3e9b38cafb937ef46d9f7c5511bdd028e433f1c95d662bdb687d0e9d89ea5ad44ed87675d69fa6e103e18d80d7f41027064e7ff7ea81d50b1289e8b25c4cbee96d142eb3157d377fa84949175ccdb6320ef6c497b03433
+Entropy.8 = d26fb0a704ccce9b7ccbd4bbf56c946fe2d8ead56b412e46f036f3b0d8e5bd2b
+Nonce.8 = 81e8cac75364fdce2ebc10c28fb2bbe0
+AdditionalInputA.8 = f58379ca72fdf2fb310f652c063f718fcb66f62bc71a0d071c57907efa8506a9
+AdditionalInputB.8 = 942fa8f536ad10f5f9c58e71ad44a305ea1051833dce8c28121bf0f3c5fe4766
+Output.8 = 3ca0967e168df1203d05514913005a006dd41301aa89b23c281c8aea7f7d77ea8d2a6723114a75d5f085e892a0556b587c413675726f2ea37eb74e804e21760c318d34cf18dc7d376da4f107ed5bebb81f5d18f29b0a3bbf19a1305f0600fb21a788fd9032352da9a90b468e62101441fcf09950508d4179ebff9b718935d15763d33ada17a7405feaf00fba9dda9a04ddf866bb29ba45ca5900415df498356951664ed95c26b9eaabcc663439c8255685bfa69aed876147173cc74c49892eaafffd64ab62a96b4068496ca70df27ad303bf2df1a453ababb8a85e1c59350c548e4d027ea7e44970f093a5925b69c1c314064a7d6d7cd5dbc47fcfa6466522f7
+Entropy.9 = 2c31f479f22839208f36d431108a955e57a9049c2f1cc9b4b8e34419c2149b4f
+Nonce.9 = e52b789d5f955da837c9e36bc45065f9
+AdditionalInputA.9 = 4e1575b893681ee7be72f7f2cc185083041d2112d44d2127349dde3951931486
+AdditionalInputB.9 = b8406079d48af21e3624037296e99e32cc4954901bb66ff9ccf5c2add9dfa0ab
+Output.9 = a8df35a2a10fe5de68fdd266820ec3d23cc92bc57d1877c85ff0abaaf2cb8a5cf280b35774890fe4be2d252413e1543e03eb8eb8c6d999faba860d82e7235e5d8bdf248a679ca52f73feefd361bdbe7eb7ae7a48a11f5ad0b6c9672e4454f00e19af4811c9de56ca36c19a20ed71d40433bf09f1c19f196a392db1a096e660131dd3eb795346cf92af3936f1a882a61ae2b593d15d7b7db52d319159f51becbbfae305d5b73d81830cb783b4e57f16ee08eac9f1fb2746e052d1d00edf95dc8eacec7085fa8f3d8bd2ebfca2cdb024a6df0c4e629e23dfa4a317752e38640ca0158f9de9808b9a4e79e6941f0c4f7400be8268a826f45d3c64ba4ce255154a3a
+Entropy.10 = 06d347e4ecd8d4a244f3dd204f37304efbd673ac87b5df480d3b84d6583d1f40
+Nonce.10 = 3c57ef63b91a147882c513165b58df0b
+AdditionalInputA.10 = f9801c6dc3132039c76e41f7c17ea6ae0cfd076c41cf2107aaed63ba5cab1daa
+AdditionalInputB.10 = a2542fc0bf60d6fcf4cb14dee691c31d08727e59a943baad07c8e54328e77130
+Output.10 = 7a40fd8342fcd0cf2f4b16199a7f2031c5900908d1141b5e781b73aef8519be8f349a885bfcbfaecf89efc1f3f38384d2f848f83216c737aa5430422b4c5845541bbb4f44fd49071281ab1d2e8ead68b3296bb98f1d3f856d3426418e2bb58db45a508c08590ba488ac3344fb6e743fff24a0ef2d26711c35828d36ba20399c4f24b751a097caad1a73d208550c82a5d86a03688b69260de29b8af55f6976200e5080f8bff0c304ae548bbc090734e6233314090877cfa77d83dedc4310026dc9873d68f3ad20a0069fdf5347b2eee28288a45334fe291b7cb85bbf7c1a49cd591a235f6af94da5030706fc64ebe1b7f9f019abe16db5bcf3a0630850dad9c33
+Entropy.11 = e7317a5ee429719881273b0caa026ea3e36e689761ee5f5a304b5f691f3f99f7
+Nonce.11 = 94553e3cbb2429e404dbf95eee05ae72
+AdditionalInputA.11 = 28be12f035d008945a2342fceb12afbff2b3f321812942bd8b5fd8e0ed025383
+AdditionalInputB.11 = cbe3732ff6724c380ff6aa306b90920b3bb4f84b5453242463c2bd5412ac23c1
+Output.11 = cda5202b1ee1a3e5738eaf29491877e4e37066c2a5288de563dfa00ff7affd15940079a223fc61a798aeecb310e4ae54192eea434eee30d3208485c7b7834e8c60da3f1ff5ddff6f67a24c01aa6598f92a0d929fd762b7c0299e6809e882a9f151b52fa33b54ecedd0513ec2806ca970406de7ff930e404e152ff49f22afe048fb6a65f85ea8e5f4d03b5487434d07898158c6259902fe120f2d94cb4e91ae2020816c09e01347717cc7b193c2c9e4b022593028c4df2f64bd9fb39edaaaec196815ae602820615b1df64586c2a7744a03c8b63fdd0ae7daa7b34c3e6478406ea865ebaab7fac2b7471b28e87b06056066e04f559fa1d8a6b472c75f21c6afb5
+Entropy.12 = f2ce8fc5f39743a3a9c2723c45822bab8d80e7c277334aa589fff6366539ba34
+Nonce.12 = 68b58d159dddb8f5d25f930100d9374e
+AdditionalInputA.12 = 762dc9151bd37f578e8f2b857ad97c9d44be221feaf52f08313134015d2a9b99
+AdditionalInputB.12 = 91c0c1061855095040eb2f6555d233e881817632f9ae1e2642981e53c84dfe91
+Output.12 = 86e780bc56ca72f763ac2edf6e6811891bfe402aefbb78e36c6d1c839cf7148eecf1ebf27418fbaaa1548e1342d61989a15a407ee9ace8c8f93e359cfa1a5cb169dcf076d42ebc459339b07e0e8374380bc29d82c4b02030c16e11f178f8030e06d68622c5077ec600a3d83b1e212aa60d46ed6af8874ef03dbfa2323a6a094874966f1490e0f6985bc6121ac01d99f68fe3558dbfb919745b87d542f4036799b78e9138a868608d1668fb0ab30c38e82b719317f200e8604cd2e014f9b67f49989096021070d7efbb08745d2f644bb0644fc02bd8651e8422d1da6651b3a32df941a4fcb29eeecf6ca7e07d0aa4a54977920634ed5ff82d23356cf42ee57ff8
+Entropy.13 = 5ae114a0b760c9798c0cbd1863597d38a3c5633c5cfc9bf64d5343b446ff4d77
+Nonce.13 = 892341e2a2d86c05c9c677740aa774c7
+AdditionalInputA.13 = 8ab7a59f791a24461ed7208a9513bb5c8a654331dc7f1640b778ef8176df620f
+AdditionalInputB.13 = 98dd2251ccc48cea44ebc50de3332cad730be6ed25374354a7f3ac416c98b7df
+Output.13 = 6d1c77a4b3ca219cf417af21e3d6d0478cca7c4ba71d32f5c8e791157f8877fb6d3e5768acc27c01a44fd1b5058624d20b838651f0592a671afbb3ec346acabc57dd78cdbcd172a01f09589075d1accafe0a1a508125727eb930392928738759b3ca8d5f3392049ce5dc2ac9fe991195501b3d5dd710889a2ab1a24e43c0732493b307b74e13b7a6ae6ec9b6878c1eaa27e30845d305fea656f66839eb41d387ae413345255eb0e87926b35212c590db261cc0f6a676fc8a2cd8a960a389b125628192d697a3908c4ac0fa726dc0bdba6214c283ffb161b2ffa925e23f5aab9afcdb509f8412dcf1b5d19bb23360bc5baf1eaacf1f6994eb936773c776b18a62
+Entropy.14 = 8ce8f693d5fe76ead823907734ddafecf34717982aba9e52c333e548aba009cb
+Nonce.14 = fe318ec6a24311ec2cab608a7e6da78c
+AdditionalInputA.14 = 48e994654ab1d109511a3b34f5fa9f12b8da17da510d7a71e3839ba86b493ba7
+AdditionalInputB.14 = 949ee0617b277a3ddf4a51343104704775d91797be1826d78051496a87d9113d
+Output.14 = c4bce916b00a8583ebe1e85feaa1f076315ec9433e18afa1252061a62fc7558491678cb31048e4b4551b697e8dcb58dff951337f0fb7a41546d9a7838a1da149cb44558d324eab9e7ae147e8ead666e3d4eabc9978626efc8710ba8b5eb485d5693e5d6cac36ddd3a1a878ffbc77e9ec5d333cdae2b5803dcbba70d4e0dc60366dae5cf25990f3ae6147c99ec6c998397a1ac02b1b6ef6867aa897ca90b7fb938e3ddeef57e40897a644a4f08e37c995210e00f07145d5b3620ce673072525f9f74adf79ad703c4a09adc6eadcf77e76c6b032270d4c68f01672decf9aa0e941086188304fc33a28f53bf121df747b7dfdc00ddfe68f6d06ab7e82295f70652e
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = c07c9e1d2a0f0b5dc0b4e9a0cd47caba5d2669e393656d3bbb8830e3a1d456f6
+Nonce.0 = c925484deeb0c02e1ec7a38ef5e36794
+PersonalisationString.0 = 6252125662bf914498ec710dd31f0605278245e955e9533099ea9afb0ad6ef63
+Output.0 = ea3ee991336bf6581121965ff6a6283014f5c523d1dee5dc80e2721eb83a45b987d3a8abfa55ee72ed6cc2068588a6b8caf25fec88ab5f85ac642ba24e8414ca1e707e3d10f7908b186a82db2b68ce58fb47b670730bad51f8680d59e179f032de3a0f79723b933673264098fb1ec8f3793eceec7131cdd562898fa091571df4cd5e32026e7889fc8b659e90eab98baa2cb43096c352e58066ab913f05e728136a83d24e76b41c21ab6822c4ca4c04e14733a1dfd2b71a270b528346315609139005194b7f3d07bf28108af97f09fb374a57bb9aa7680cb9e78e2160c972e938ffcbabf12b971011ab7c1a91703d3c1c394463d907545c82623a3ae1d2af3667
+Entropy.1 = ef6b4f56c5db9f685e6ec380c464a4dbb95cf606f084586c58672b15d053d64a
+Nonce.1 = e16ff3c7a87dcefd6e10de7911ca6ed9
+PersonalisationString.1 = 50802dacbd92284106b984a2e396fe6bb812d99854e400089aa90cd5f144269c
+Output.1 = 879ebdba3b1b84207f6fec1a1634ca18367ceb5965f19e27e5ff68560a37604b9735adfc9afefe54a5fa2dad2518256d3c1df4df770f674bb7344b10930d1216af13a34605177f083b4e33709681def353db5af5a299736697222ce8b642e11c745ae8f0cd1b76f4ef769982defc93c1c70ca94ceb83f8886859ead2f726e3fe2f4bca26af14cc7709143c45a6a5b958d91660ff8963fe17ef2a8a9de834021298368291e2a84be1ab767b360d2c949a97261d69886d6ab0722f45c95598cf3080cd1c80afefdcc671cdc5ddc447342226f17579b49811bc247be11aabf9cf7ebb3c792ba2ea78bc0a790bd100389acdc0b4fcbdc207a90397ff3cc1797ba3c2
+Entropy.2 = dda85b63923ad8ce2bcb0b4b6b3a84a214b9002bb495c1ff8dd0c827e7a7666b
+Nonce.2 = 5a8694dcc941d12b4d493c19cd570de9
+PersonalisationString.2 = 2216173dfb01b06b657de3436d0664a388f808b60756149be8abdceee6f4cf2e
+Output.2 = 9207bef177758af5c15d7d3966830b6ef24b4637b6add27942c6d424e2ea88f019c0461248d2617b9465a83b05dd41d7068a7a504c8db20ba0764e06b94b90c6bffa114fc60edd4800d5f58c423da2e50bf5da0726d33c26003711f12a7b0d6aed1011352a959d4bde66ab19102a18afd0a5fcfb609842592b91b00a287671d86779d53dc68e1d9cf60377319e338d3f55825b46bb5b7b98bd463ca8f15d2aca6085f213a51fb35d5dca650a27b4063089a354e6aa2e56898d638c2e344a3a0b4127a231236d2007a79e0020751f2b8a39319b98ec17b6c15a4223af59ea5c476f963fbf5169cbad65bb871819061df647a304fa3455efb7cb628c2dc208c208
+Entropy.3 = dd3ad19720c1d6c4879fa48ae23714bca5a1d66c0954931869185b48dbce099f
+Nonce.3 = 48c5d647187ef550d19146ee9cb698f3
+PersonalisationString.3 = 18f7902106c00d137e6b15a4bed0b4accfe6646128ee8823ac669e24179303df
+Output.3 = 98f4bf7e10872da726b3f51faeb78e7526dca37fb55a83b50b774e6104e451cbf7f369bc34373bc13812bbe7d85e0c1237ddd0d88894cc93610d9511b8c703aa337cb32a2a36f876cc262e2952fe9428b92c387705b6a0461e8b5c7674a69d6bc60db0566bf269c989ca014edf9e9a4b03179506cca38808f3f7cfadb64f3e803c343a86285fa12038acae76447185fd501d5a2e6d28fa115dee82b51dee3f3fbfe25e773d251a020f563aec137c70039b2fb19280dd6af9ff02b637bcbcd9e797f26106906f9592538f4c2a9dcd48f1ecb38f7c2ae448f21170ed80535ba1a8f54d75e4d716a848a27d49fd046862dda79f1988ba90e3ddf6b5986ff969488e
+Entropy.4 = 5e2d0af8be964d1a61be969defc7f60a06814b957be5cd8ca15664f497794b71
+Nonce.4 = 2eae930008a2aabe1f198c85b8a8d6c0
+PersonalisationString.4 = 1199ca7cdaf509f81d91ffb82fde7c046ac4656d3b5dd0cf1074fb5038347e49
+Output.4 = 88daeabbe4e2a2569535426d288b9ccbad2cd69560575ab7a41059f59f8cfcfbcd0e2014407cdb6704b017778d5212cb1ce4e32d644c3b41202013f56853be5339df4213982c4af9ecf7159354277e03618b7e43d1f0598e8989820d523f656bf1fb337b50c983c90b05f87f4f758f0f087bc6699332efc4674661362f6a503374016808ad6f40497e4bb0e114d42015725d9b19f864fc3c5c5c0ec00b8053a578538da3e137c0b4be7bf851f106e2d95fcdd7ebcb1375ad3c73c9873e70081f699adaf7d84ab7030e3b223170c051b8483f23159e98ec9220e84c0077dd6953d407dfb1e3748b3eed11e50ca7a39f89a003ebf69e803ee20d60a6ac192195d4
+Entropy.5 = 92ca3d101093735e51f6fd573831b25999b1a5ce1c097e4f77f4aafa6b4c80fe
+Nonce.5 = d72dbca1fee829ae441d39da0465e172
+PersonalisationString.5 = 22e63e6682ce40e6680f2cc9d7a9ad1a596fc6415cf064e928bb1ab72df2db0d
+Output.5 = a5e34c0e957adb585c30195b1273b68d4cec0b345ed1bf59411733fc384d62d47ee2eede9fcd4e62781b7c2a03d5edc49d2d199f20a0942f26d97426e5c689bf7b6b81332ff8b4f9ec595e604a49c5752761c97b3d592ac04701c561a580460ff11351cb885c34834bc46d0584ff4fa9b449fbd9d03600dc1bd622c4e4940bb6a64f4ac7e71e8c23d52e1c348eff5b9b7f8b8f1b95682e53e8972238273956723dca7ba68e0e680d756d6acb4dab55d8a11e3c5b4c79d4b34905ab22c43c83dca629d84a14bb5bdaf18578b24d7c82b4661b4b17e77f733c9adbf798fbae707e7b73c812a60833d9c95d974e396cba4272f1310f6dc0ac1bf5d5a823f000d533
+Entropy.6 = e1d4f840d1a01cf5e3baf6eb6aab35c639f60571275f1c115eecad9ec2758f8b
+Nonce.6 = f5c70fdd75c0aafbf443d897d31f181b
+PersonalisationString.6 = 1a4cc8a65d133ed5e0548f770277d0e3eadfff3c24f09e00f15f1f0ccee00d4f
+Output.6 = a194fa818179426cbd54eb333c2517054cdf917529d3a9e589f27dcdf99fe3c342b95f4f79806c236f786a38bbe110a8693563ab67ba6568b45e309a6d245b1f87ae2d48ab1d3ea36cae52eac12b44f4680f2d611ce9c72f56663fd1e36fe45aeaee8d4e996c1f7d38aaebb0b531e2d663108994ba31a2ce149d5a32452377e05dc4a413df8dfb10b3595df855e0e07c2a347331e871c0b00139bd0a2ecd715a4a5a4e85239f466c779d96f44de09142bc40f3a48390f9606d65386a214d99932b0ed3be2af18bb0de0d05e8a875334e62291ae6c0b91f39fc1586dded2d2fb318f2d26d843332218798faefe3e9e3425502efdf010d1dcbd32f6343f3c85f1b
+Entropy.7 = 53f51d0b68808fb3624fa264a1fd9256f59c248dbd04f90e516638f95f91f58a
+Nonce.7 = 67fe6aaf8f40159e194a0cff0162ded0
+PersonalisationString.7 = 6aa803389ba0af55905fd1873fffc6c9453034a363dba07bee0cae6f73254fec
+Output.7 = 912f5656584c52f95a4a503e26c23b99fe2dd4b96fb03e8d86b29d780bb55a0086b3a77a67ab163c56abde4ceb6a68c4b06eba82371f587ed043739e12cd6e722a6d73d01495ed89e35dddc2b794ae7155179c609dc4f9a7edefcb4c92e1025aff94a9d24b7d84d70139051a5c1e6ecf2db9da2f6bbdfdcf613dc98f9008d444e5cb59b17dfa7caca4621568f897f77c77a5d85eb4f60465cf8f58cf5d37ffbab4d6b1a56136ad14543e015ff7a225bacf8781525e96c3e31b8da29c6805572620feef74b20360764fbbdd06233f1a94905c378c66ce86066c12cb92f8375fbf14f4fb205de70ef7ed38b28932fe186bc10f6dda1c73c20e18718bc6b59b39f5
+Entropy.8 = 47369855076e8388e990cc50d9eabaccebb582e6c369a99b6060424fcc23494a
+Nonce.8 = afc19984384c07a8fcb59c8e63ba97e5
+PersonalisationString.8 = 088a77b7655f59f2dba8fbb3aed15499e13342d66c7b0655cfb1b1395c725b44
+Output.8 = 6f084fc8c0b936aaf49e1a98f3a96846735895ba71b246a837516b6c678b5f6a8b9a091fc6bab3307f428e97eaab850e5cd014e7fc356e2af6c8d673fa58c1bd201fd8be3f38759d109bd06d6452786d230700ceaccee38fb0de9dd05a5f9d0a64dc447ba63f92d93c58464f5a14026c4e2d83d8af8da039839552dac49fe50ca95fb38ef1dffd8ae4c1ba5640621c087118f8d71d69cca33cbcb58742a16eb90bdfa51238877e55bcdb018cba252e26f222272a6c267c28be26db945fb4f0cda1c0b4ca281fa2a85b2625504609fe86005b9e71237bf50c31cedf9e13ef022d6b348873d9f5eb3cb9a980e063d76c9e1baab412eafe3f6980e560fe6d8efcf8
+Entropy.9 = 9770de601e4657b3746637e5599a79f4ba210bb03d8805fba3fa1f2f26737592
+Nonce.9 = 148dc9db3e1e58a31fc21e596dec2324
+PersonalisationString.9 = 5bffe17060a51fe205385ac70c9634873cee14fef7ce2fa8970f7e9ffba450f8
+Output.9 = 30339e731f1f4fc03c326affccc77c23678f6ddfda53b944d9ccf8429b4ff06b36f77e5e0fc378d083c9381e8de0a24285aa3b17dfe2ce7f3fe591afdc0e9a91e9a90f69566d104bac8086781e543487f652d77f836462b01a3c5f1e8208ec43f6f7aa78bced28b9de9b1de36a468630966c0762e31f6fb8b0d07a86210ec395aac19c5a4f3661c9f7de171106f656f705ef14e7f30d3bce37335ad53093f5dfc1971c39a0fece8259800d1b022de76cf250bf5d2a22ff62227a8a4176f9c8308bfae7fa68c1fbe7b2027254c39a161ba4280e38785f664afeaa3ab2df3c99c28939378c1864282715d16335c8e75a085d7f389aeda6c26c331683fce2d01ace
+Entropy.10 = 381ec64f6818df09b9295dae3adabcd409e6302d5434f15f37ec9e5223f08a05
+Nonce.10 = deabba7b30c167c6e6876b63983163a9
+PersonalisationString.10 = 698f68deb716fa4258dfa3869119bfa258b0645f9742bcc362988251276659fc
+Output.10 = 3533a7cf3cc1aa7b16ce6be85d863b65734649b6668fd63dcbfa92a320af14b6f2bd01008e6a7a2232f36b4891a566723d63c4915ecc00915c96b0f50bc999d3ad4783b8e3d6157b5204d46b2d709479a2c5059ff8e78cc156fa8b57cd51ecde4551263397bf097a3d659bd257c9b1b3ace8d062007ef7595b2a25104aa50aeaa870714b47174e4553af3ae88be087e821bcf44ea0770cc8591a115f47d89a712fcc6707380c48a5b121c15cae84acff7adcf5fbc1d9abd47eade80e6eee46246a28b5da9ff4521ddfc1cb6b34d1ab4ee79fa18eba29a1bc7c10bde98653e732918b6176ad764f3ea31543240beb406c473f1e60f6b20ab383be850ddf581cab
+Entropy.11 = 93c686ac3e6a7d9a4b70fa7152354f3eab1641bc3afa7b4fe4629d94613d359d
+Nonce.11 = 2c0b9cfc3c188fd6e16721ab5186626b
+PersonalisationString.11 = 86602b7ab3e2c375c39eb6419b3e43463ac13824ca92f138f8d4f774f81a93e8
+Output.11 = 47abfa2d8ae584ef51c493c4f852c9d198b64a6ab238ad10fad1ae468d4b79fdbd5f37b217e91992dfef34ecc1198218ab9d7cfdcafa7fd53aec3bf4c04be52f43d660805f559ac5d9a6b7a27fa6a9799bdc7a00adb6617816060691391070f102c134d0fd1687148413efd2d4215ea5e2fa18d270fba542069634f2255713466a4086c09318043934a884ee2a1dfea4a77017883402a222d5ac3bd4dbfefa1131cab7f2590d339e848065a82f6a3cb366cfa0d6a8582cf99d32e89473cf7a7d2db63e964e48557a1210499beddd73073028cabddf737a8ab9b7ea17f4ed7bfb94c80f03f5f0e5ea64f4b59eb4b3dfa0fc1701c3a2fa7e588b0d4e9586560256
+Entropy.12 = 3aeefe3b75307aff285d3fe8907f123a9fbb748232a11ef6bda3c12c86f20228
+Nonce.12 = 98de460f9c004152bf9920414759fc2f
+PersonalisationString.12 = e3c7a127cfd509cd8944f762c5991d9de53c7e37673f2208486c3bbf8ab50b98
+Output.12 = 10b72d019296b20db00cc383abdbaa2b69bb4cf3296c4fbf82fdcea190d09115455cbc79bc2a373dc04fa52758fd21e1012e86f4b4ff6ccad0dfa1e5a27b619e62fece2eb9b6e65c5aa5fe22867304d46971a6365e33f60821cbec79546010433c7771e911a15c2726ad039680011bba5b6779bf107b98c596e4acc36de55e8db936e512318c051950c60f1ff4273bae501b2b325f375c3ec10a4f0d076e6be9a146851e661465692170037b01c49d17ee9c8e42545c5d6ab58ba1fa2c7322e735bf70c1c8266673e8dad1cca8e6cfa1e601be95917184677b7534dfd2c6f1640821cc675794b29fcc71df517cee4ae6efe95d2fd866939aca4400ea374a8acd
+Entropy.13 = bee32aca74973a8b63b36cd8ac04a68f36484202c6249ba92cd33a1379ee2e6c
+Nonce.13 = a5d175205ef0278c9df481f882d482ad
+PersonalisationString.13 = ac5f8a3e150849a818d0170bcc772e0397b7c70cca37a466fb774bca78e4d708
+Output.13 = 22104a4798cdec3742e654aaca8122f69437867fad058e34e840bf94d460b61e2d7aeb653ce8c8723c00df1b4f77eff3a70345c1a2b3fd601075667b5cddeec75bdea28a5066833f40b50d7350b12a5cd93afcf19b353d06083acdd05f8c8b64542c3ab2b4ae1283df7fcdf747d3b0bbb3ec3345a0f8fcd156692a4a2e6d887c8f3da7289282865f4d75e0ac46cf06b4a93fc0f7ef19aab22290104095cc1f94b03688c7b3712491b9ab2990c204120a22e6b08e1bcb3ea7550262fca5bebf28b4e062e62085ca87f96d259fc17da8cc0f30236265668e2590a68e8028417e4ba0edc1622a6f1b4d8bdf9519aab87beb2f89888e8b3bd6a0d42107653a69427f
+Entropy.14 = cba112f4a75eb3dadb31a728f3ea66ee4671e971a313e6516ab3b3890f7432de
+Nonce.14 = 70916df78dd9ea799230435b3e48686b
+PersonalisationString.14 = bf755696adb9c92839798798f836b063cbbe987f0163ef3f4a97222c888f5da0
+Output.14 = 411cd8e76e711447e8a93ca95aa3aac5e51f559d65a8385a15e71877ac8472a347d9d453bd6761655711ce2133900d28e41cfd1292d28848646e5cbdcac1e60e49e62aab169b1735e701e38d65ccc073f277972ca85444dea86c19c0c08317dbbeca4fbd5d4295c9da71b89623d0028cebf1ab68fd0aef5b37e76e2e0b3e7f72eee04c01b6afb180b1fa0c370975526b788ec4db076a16a798671451af3e20d323684e232a25d78aaa8ee43f734f1555bf0a324053c7c895dc3e098621e189962a914f486cd7a5ff330f39316afb762b1a06cf8b593ca00d7edf739e2e6827a7af662f33bb09fad09d6bdb3a565f2bd32512c79927d390c79a1cc6db968b13a0
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 09bc3030be920435cf5d5c813fb250be9ac32872c83d9635ddcc3829137d1d9a
+Nonce.0 = 43e577bbdc084d4d0332c31104eb2e4b
+PersonalisationString.0 = 39f8de35161a2509a4077cf9f92eb653603820db6fa86491553caeeb9ad46cff
+AdditionalInputA.0 = 3d97fd3f3bc27d2806a441e0c300f36e04542a4b9c3464211767670eba8f970b
+AdditionalInputB.0 = bbb65df791d2100a6b81b35f23c27c1ed374de5cf6157ce9bad2834d2a757c63
+Output.0 = 9d5ed4dff9962d280c18eb649964c960c897ca199802c9186245f987aea97d9a62312ea5d8f6a676f6c72febdee232257bc2bd40075af935d7dc62d988c8c03f6d276b1e8b74496188ee823cd44bad8bb087df4cb7c90b94b93440bf5dccbd111937221698c14693d2a1236513df271140bcf8af22b5884e3d116847c63dce9101e27603d48f8d94421b92aa38547d12fd7aa490267dbbb7ca142ab392f4f0a59553ba95ba1c370c2a55af5d63cfce6bb6182945eaafc5376c117b06e99a4f1ecc36a0a8682d66e9eadffc1567b758eec1b4e3bded982c097aef4fb5799cc659a2623ffc8fb69f5258083d42324344e61509aa29cea48cc3c3e1449b01cf7732
+Entropy.1 = 9e32ec1406569294f80b9275618cd8f1641de6932f08a2fc1f588837b29e5539
+Nonce.1 = d3e09213361f2de58201c70bb9000393
+PersonalisationString.1 = 7e680eaacf7fcde39a8b1bc7aa29361421aae124d9d365d383c23f6459611e31
+AdditionalInputA.1 = ae26bc465e1dc217c246cce54860a7c0fdf3c092a5b1227dc07a0cc3bd5352af
+AdditionalInputB.1 = 345813c8c9d9a637758d5fbe6bd1f945bc3e01ea5997f7bc410032f5395c3350
+Output.1 = 391db05a30b47cbd122dad7f1576f5e71702558c3a14ff6ea33f063aa5e5c1e55ba02b305efe824f39c429d2b310a21ecc13db90d42b1120077ad74e461f9ed1fbb8bbdd832ed2edc380d33f0d67fca9d9c08f8e75acdc719c188cf17c97338625f6ec4c6a9f81883b97dba36a3c8db5e7f9e69011a4d7df4ef058e6290c1eefa85fd6cf5da5ec55510c0d7eafc59342f96398312167a2efeb22d939d9a96c6cf4e447d3b3f44f9f588898920f2dd6e6a11159d9bc72a65292a36efdf3ea335ae4694bc7aba3b3253eed13c68a75a086c8de9994de7ffe46148e2b0de52b2dc9a6d17867c5094a7e199ca013c7b20238bc4a73d65fa0919d97bb4311e4827044
+Entropy.2 = 255e4f602cec552c3cca5a77b2b9ab5a4f1858976672e0c42913bb8eb5ff9d2d
+Nonce.2 = 8fb76bd15999e595a8ca37f3bfc0971d
+PersonalisationString.2 = 5634cb5aaa4fc6d629c021d462e22c4a133ae0388e55bfd51f4fb35f0039a16c
+AdditionalInputA.2 = 6135184538e4f3efbb2659fbed7fe6241d833246e728885f4b6e06fbdcbdeb6d
+AdditionalInputB.2 = b27267fe8849ad2f38b36b574ff6d8c1e6600afb235f48f2446edbe7fecd5ad4
+Output.2 = d765e96a0053ee69e94e0b8bdaa65871d30bf96e8c11c17c4a08f674a3b1a462466e4a3d08293ee32b3510ec42aecdcf7a15ded002b87c08ecf106eb47f09b79b4ba2fd6bf948dc76c798f8dd6a6226e4e4eb4c55ee0a1b12f66ea560fe3e3a25ac3e5d782ec404d78bc9cdab96e73740ff2eb7f91e4958c201735494bce023cd1dab31974fd2da6a4d24bd3e2e58bcb90f1461d8616a0df29622badd3c89b382ad2fccf2f5380552576ebc51948dd0431816754c4609cd4eadb8466a90bcb293600ae02c757362ca599aa2d5b72211473aac8239f1f7ca0f7df65f9264c61b55c85254fa59245f07457a01e06176a76e1fc71b573bf6bbe04a6b4974ad2c481
+Entropy.3 = f973a121c32528fa8053ddc12e6e969c954c31b21a8cecbd98936f26b49953ad
+Nonce.3 = bf4b3f608fcc13fa4005a1e3dd822b91
+PersonalisationString.3 = cc223ac448b9819fc6decbb791f022630d7be3c78e41d14bfc6f37ff7f551a1c
+AdditionalInputA.3 = 5137cbb31accda1fd665e3f9c41d7d37c98e9c128b7a1e0c894372f6c4a830cf
+AdditionalInputB.3 = bbda84bd4e6d5d19a938ee2e61cc25cfce6fc632cec2674be6fd580813bd97c1
+Output.3 = 459adc32bd38efa3ad29f39cc97b5c35671b438ad918a4686818f0ebf4ba01225fdea29125fce08afddee97f334059a668af68469a157964ba78a97cba8afdb15c0c02aa2fba76e8aa92f64f72d1d18be67d81db84a6a2b8e16a11c07b72b6ba704e3711b3ae74f2aed13f72b007447f15a5484dfb261af20cf5d53d457f36b9baafd19e2c26b91f859f5d4ca3ed50a8e5d44cf02a3b5b88e272ae080cd852fbe2be2100e8eeca91fe3eaef95e8ee74a9a42817d10cc13c4480cba442b3359f62360882332a36dda3232208ab9cd5db2e24840e82ea2271fede6104d4cd37a657e0f133e75a6ef95902a3633790c86beddcbcc41a57e7fb147a3d81663714831
+Entropy.4 = 41fed837e359fb197cc7765df0042ac380b52af7c764ec741963e00820531b49
+Nonce.4 = 3ed63900705b09cd983e37095b5d0a19
+PersonalisationString.4 = 29ea5c2a8e27288fbdc86f9896b5c31cf3d0d9628019e896463375aad408daae
+AdditionalInputA.4 = 66b1367ee4cdbc696708381944429fd0ffa41363995529c2d2602f04def6fcca
+AdditionalInputB.4 = 94eedb157fbee8e96d9b2e652e9f3f85a9369fd12f6e2cc8bbde7a9e79b891cb
+Output.4 = 067d6acba9b75947bbd7481e04a072b45b670252d611bd61be095e700c40e4562769bea034e8ee806a695403f22a52f4d699ac3b6f11091dc40844c551ca12b9fb1b3c515d650d2016e14f7b77021727100cf8eebe8d7c543398fd5d82f62fddda0a6d30904701e5982d88589eda087bf4ab591fa6bcc5e162120e41bab3c2e6d8281ed8d8bb4f95c356ee7dee8d462398178f6ab38af7eaf25556a7569b1f6495f1bbc4c841ec3b17a9cd9d9c8605115219b4b9474f77d4ab8932da21c8d085ff6679fdb6110262f7370caa210313b4cf5b8d4d35fa90357eb98d10a6e862be8da77dfc8fd8769e5685893f16c30e364de413a8cf7209a8cf1189060af60dbd
+Entropy.5 = 46d98b6da00741d1a8c0924ba5bf4c6790bd85f2e9866f23b6aaf8b9cff7ba38
+Nonce.5 = d48d2da035ec19d3d851860c6d8ef193
+PersonalisationString.5 = c89511110bbc97f370b559187d09b99441274e196a87877b2d35c79046534cb5
+AdditionalInputA.5 = 6e3df828943252d6289fe453bdba2200b37f8c29dec413e83f452ee599926c9a
+AdditionalInputB.5 = a03f902500ac943600a98491151473f2c1ad814b40f598e58afe79c0b064d1a7
+Output.5 = c1e23e316266e6d26f1aa82b5247c0d5dbb0aa9a59757a8d7ba4cfab9c5f3be551041fb29de805ed17164ee39a81e4fce1f013c49f8082c0e5270becbce1084efae450f8205712cc58cdb6ac396d1e0b694072221637a4a552d7c1dcb5c484b632fe1f58c012103c619a8fb111eb7255bde01b873506322e5b701b5aa204c455d7a76b9557a6d18426503222d4b1ca3cbb371695ada52b1a67421e1bab333104db3dd2ee5fbb9f47e7109f91b74959933a908a4a34ea2779c30af4c8073f5d2ac04b9d74b7fd1c4cc08417d07e0fe87db55cc1b750a3baf510ad41655e60a07814130cfa2b564207237be0dbb79672cdf9f0cb1c9078d9f5bf434b2386f93d6d
+Entropy.6 = a142ec85e1420abee37d39a2aa41361b5950f73dd5ae616191c5866c50ec619a
+Nonce.6 = c8b4516521853ca4d708d41041f6c746
+PersonalisationString.6 = 0e39e872ce1bb7b3b1dbc61099a5e9c715ebf2ddba4f089d9c970806f49b58d0
+AdditionalInputA.6 = 79f5470d228db663a8a123f612b8b1fad4197770343666b0e3f1a30b2213539b
+AdditionalInputB.6 = 21165763bc12d4a5219b98e729d054db7c9a1ca4e2b1860efbcad4f0615d30cc
+Output.6 = 6258c25db7d14e99df23800a30f71a147de1b62544cbdb147abe28f3aee6f87c13898e3928e46e1e4c851d898d5cd30066938ba17bd8c41fedf6981b1f2aa97531646d75334cd1b7892b6119755410a0a554a4a942e11d744821b29a188145e7855d2b00e0dd9275ee507c7b5ec21483fd6c1f13090142161f5109accdb846ac3a6330a524043340fe1a9511403a46de1acf35e19b3cb4ae89f90bb4001648798b145da48e93c16d920dfaa656f74fdc4255ab082f74c5bd35743352c4cadbaf155e2830bdcf71b1582f414b92f943d3aaa90f47241178006de9bbb530e73741a1a9c0d82b747e939decbd02caf554a19dbef3a184c2eac5f59e05caeb2bbca9
+Entropy.7 = fcb026c575c99789628f6627f8fe653810c3528e7200edb5523cf5c31635b72a
+Nonce.7 = e94be2989d5bc708c4924517dc612e1a
+PersonalisationString.7 = f1d42cf211135748359d832ccdf255b36e66659331b61488f3930a956e034ea1
+AdditionalInputA.7 = 6572b25a241f3754a8e93d8663caebe14923ac04ae7138aae4d642b4e0718f62
+AdditionalInputB.7 = 4dcc93f9bd9233c4a81d92863db6e3cb866808ffe1c99241ace613a08d14b52a
+Output.7 = 682e3370d5dd5281afb292c914abd205eec08ce92d2a24f8b84282df44af2b76d799eed6051dcf180932c19e3e4da6f7832de7423f451a084ae857c05db393e8abf2e03096b12b8ae9fcdd26d44191a0772265f842ed2dd9a4186c34fe58d180db8267b266a60fda74833768a2ed058c63bf10a93936a9e824ffc9056a81aed8da527e3b92429abc05707f8c298785843a39deca7756b8a9a97a72d6690689a422cac407e5e7e31a2f8e1f2475610351564fa7d90a26015294eb425922e8ef17ea88b91222fe0509a28728147b5cd489dad9565fbb5f843a2e3920c6b2663021bcd07d3c3584c704288895e6fd7a6c0e064ed45d5e82c81149a181c08048ba05
+Entropy.8 = b8c395ffbfdcd6c48e1a452eb5c1c1ce8bd38fe1928f72a3b37ef82424036224
+Nonce.8 = 74184b8aecc71ffc29a45ea483fc856d
+PersonalisationString.8 = d4b656949099572c220490a38039f1af5292a039d9c0cc9cd673d84b6c236cdb
+AdditionalInputA.8 = 725aaac264877f5768b7b38c24def1001f9b8a97b40987b0093591d1874451a2
+AdditionalInputB.8 = 9f1f7c7cb474e4281d6725c61a3064bcba5bbe0393143e7785c11473a923f2ec
+Output.8 = 1fc9cd1eb51ee500551d2c3a23e6b26f635679ad7ec01ae858299bf7cec3d436bbdc3880296fbb6521a1c6bc28e4de3a5f445ee78b0cbd47c0ea423889593fe66e20bc2b459a84b2e688f83d2f4235a3a91dc8e94a4d20abc4790b10e7fbd523d59da66d28e695558b9f1b4ae2d7df70ded0bc40408961b6fcdcc50ec727a8f002adf8612fa2bbaf94731ed230836fcc7603544e7438e1918a0d556796597a82949a5dec5b79cdbc1bcc4acd089f724a5b8e0ab95906f070fe8cdcbe0740b2fb9f3a3967107bb34a2e0827d2ed8b538ce9ddcdc34bc5aea845ae48cd34f3d13f7062768de95a2dc594f04e19b177e1991866847a287eb11a4f3118d3e50b2404
+Entropy.9 = 81870082f621371b54ede06633fc8cec33c4c377d0cabee3aa79e038e0782389
+Nonce.9 = a2da4643e02e9ae7e8716fa462e91f36
+PersonalisationString.9 = 02bb318c420607a33fc529ae77b957d7c23e910e54bac3d17a082d7db5ffe5a2
+AdditionalInputA.9 = 3ff5ea73a66333934bab129ad76b4cea8c6971b02f8b0a882a20d7925ccb802f
+AdditionalInputB.9 = d8ea3fa5a1dd5de075571b6adf9243bb9958803222ca882aa65acc875a7d217a
+Output.9 = 0dcc1e2292a177ea581c145ba3e2a1cbaa2510d2600755131d221aec0e8a9182420b3ec5b4750c57913ad9a68c64b5b57ced9233690a89026c94ea0b27a17511dcb9b20c09ef1d60e814f6f089879eb81bb09dd0d5681798664be953a5c265b362bbc26d75e21c941f82f6b539fa60a1978d9a64146bab812336895720c3cf84e7531a2a65cf3baadee3216cfb64888102f7be2c6b194397c8a799b6be682a21bd6f868ff1242c54be6f25a4bf05df20fce9bafba440efd9f30ae4d01d1a9aa81aa434c21bfff92419679c3ae03a52763a3dc844f1448cd350274cd7aae5af73336db4af1e47e0fe922e5c694cf3603deff94da69569b40295661d8c152a08c9
+Entropy.10 = 3ef14d2ac21bc380799bf7d42d23085ccdef51f922d3fc51200bc754f6df0d02
+Nonce.10 = 28df3630e1561181aecf42ff2595c506
+PersonalisationString.10 = 62aa1ee92b33d7951c5f165b1124712dafc356765be5d02eb5e7ef777c767931
+AdditionalInputA.10 = 614ae253005a89a089b07b2662d1d971b3ed4b12b5df225ba39325d2157b1e6d
+AdditionalInputB.10 = 23578b92eabc916024e8dd96aa9d44ea5b7db5f9e682422fb6a14d488a66d3e9
+Output.10 = aa61830df5d0041aef47c867d9ffe0d92c43fe81c0e7ec025f75a995bf60f52820fe9ef3b0ed7c9cb678240c1804797f55e86b63f8c27e167f65e0b4449c4553c68dc1450c6eec89d15e79d72209287334b3cd6e7ff4c366daf6a8bbd2e532a851cf656eb9145dbec1a6e5c39f76875ef66816c4c9d62afd5c1dbc6ca3e8a02bce5b6838e67cb0e36806e85a45d6afa8bc5b1692079dc519d8bef3dc26c14212ff5afe4d1241a32ef5ca92dde3d594ea6ca0fb9537bfe1e1b5e892375f9a4528d5e53fc69b8d8a669c78a3ed7a4501612c1c048103ff570993922fcf2519c8d0e2ae0f2973bfadd584bc8836f25d9a473c38760be5e66852bce968bc193bd295
+Entropy.11 = 5d2eb072057b9fbc153b9503c8503ccc7149b715a0bb078cc27d59f73d2a1f36
+Nonce.11 = 6c014cf80e4a35b05b99f2beaebd533e
+PersonalisationString.11 = da18480b5940c0367ab4994f3ae36e5d50b1232da85f492d491761a8f45acc21
+AdditionalInputA.11 = 951fe96e88a6c677286221e9295129d6450d31a69e0dfcec3e1b8416d96411c0
+AdditionalInputB.11 = b84ce0822b6d382687c97528a682a460390e7228b3fb061d8edd9404a0dd197d
+Output.11 = 10268946085d7410aa440d93a26e58a182fb11afbbc60307b5ebcf9c5dd262315b6111a253f3d27045f6491701f0972627fc36e9c54e8ccff62f2aa51f634af2476009bd6c438c68681a9294bb632edc0e099d2386efc4a419dec4ff8f00f61cbf4ec5eccde8e76c48a2bc54843af479a6907f288bb7b5688a74ace87ed6c31fe38047bbffacbf850b621cd5c2ad88b499bc0b72a7d55925ef4a84736761d3bb687e115acb3cb04de2fcb744f2ca123390eb05851460fa8df29bbe909e7f9d269a80c30a6e9d633f1999b27fcd146295676def015cb1b1a43b30ede32e6c68218b50358af8133cf93b145de78dd026a8eba4f433fec083c5ddd82fc0849aa8f8
+Entropy.12 = 49e80feb07119d55de484cf22c0aca0f957a1afc8a12b56995c1a7082c26d8f5
+Nonce.12 = 432ee690466a4e3a500338e8f056a919
+PersonalisationString.12 = d1181420b1665d62e6746b1f5350f717c1f573d916c1a9a2bce500ecfda00a51
+AdditionalInputA.12 = 4382440ffe5f9f5b290084ededc67ef8b0f91e8b47c244be231a7bb39842bb47
+AdditionalInputB.12 = 2449d59b847cd99d3a98d7c6071ca52c77f5262ad5ebcd521816c64e202adc97
+Output.12 = 463505c6c5f555e72dcb1506c31eb88209c3736dd31dfad1d21de2f30a4ebfb59c9f7736d5407b0db96863d5bfbcb8521eb6df746db499ecef37c9902dcecee62b44d1b42f09b8102b1700f7f5acb51d8826938d787495c3df8f351d9efbaf1d80990b7d8d98f692dd9fafb6df7bbcc18af9f63cf7e92f05a439621c3c69a2eb1036a6112ec408b510aefc9307dac09db58d0a05814ece8fe4c06b230c5dfdc31d0b5a7b63265b69056175f08030b1827c71e3f5908d5f5fd67538396053ece3adc608ee76c7e0ff660025c1ae04ae980803b0d7d9947771060b7dc9855651db0f4ddc31db0a4ff90313771e865580ff1e31b2d8551490603d04281275bc3b35
+Entropy.13 = 739f507ecb4562e693ffba10383314724f915fba5ae9ce42e8a798b041314ef5
+Nonce.13 = 428313474198d8b4c4ea28e8b9ad5204
+PersonalisationString.13 = 46ec7b40a3c5f085be8f1a58c389abbb46cff788ab93da34519e6500f588b3a1
+AdditionalInputA.13 = fe2b4c5f0198d1586dbdf33695db3ffccc9fdfc728444bae789888f8743ee762
+AdditionalInputB.13 = fc5f3b4159a09070eca195bfdac5d5693072ad38b79d5ecc889ae4c1de420b73
+Output.13 = b6cc790c42cc1f5eeb363315dbd5703d71ce447e1d011af4d6c78409569885947acb8c1021896b2236217436a9c21ea02553b4db941677f56410ff8e832f082ea725af008f0b8a033966f5026105c7dbbd06b7b82aa7d1913345e8ccf9595fe28a9ffa141047e1f9be89c9923a42acd9ee6f11b8c0c2cb494eedfdccebb5f0ab43507e5dbaa00a933d72aabf6a943e12c027a6821d38364d459190bb88d46124ffa7605e12a284899ec1b5394199facd996f0c8850a832acff9152132aabe99d2752c70af7ff67ee0442f0e4bd5d08f45cd4d14ab3f9fe4998bb1dd627a6bc683639ca2349c05ac7850db523229c45e4ebda037241a87bfae5873e00aba734a4
+Entropy.14 = 26a470f786b0dcc5d19e2b431664f3bc36075e0a2a21b97691540e5200cfe561
+Nonce.14 = cd0a1ceafa0e2011794c4bc7f7810112
+PersonalisationString.14 = 35ce6b81da9ce12e38fbfb8fc2c42b13dcbdb4e7063f980b7b2ff05058b2566c
+AdditionalInputA.14 = 6f9f47857a60b6f3f9fe9a83ebcec5f16ca73e236d2af5b0daab45c0b9718f44
+AdditionalInputB.14 = e6628fbe4a774bc5383218302b7c565da5a5bd9f19db6182b444af5ae5f62739
+Output.14 = d701c1824a82ff1803c4b59f490c3f37850ce85b5905059ac4484f5049f31772ab8401bc9b8fc1fd6ca06d01f01caecb3cbd914ea9574f497df0316a0d56e2830c8a908ba78d1dbe243d0fbc560c407052ec02e9c77f7b12264a46316a777955ae87a71f2da9cef2811f6328ccb288343abb65a36359c07122cb4e6639397829c48dbf8a821ddf00ddec2f294e48d05adfd0f7a706bfc337387bb7923641d08c288d23ed5a2a20f34684549f9f6b3d74ac0f04e10c7dec04aceac369f505d7ccacdf30ea0662cbab001740922e9ac32b6968e0c5a640345d1132e883e07fc82858980489893d0e38960883e989c41e72ee967c00b9a943f0666d1f5e93e848ef
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = b8986abc6b50516023dec0e7781e93b4b03848dde5e52228d294554df1c2bb00
+Nonce.0 = f33c24a6daeac094c1ccd55cf361977e
+Output.0 = 95b7f29293e4a8f8482708020c7ecd95dcf05cdb3df4a4483b686419c74582b9e98edebf5ddc6bbf9814f17f6d46eaa90cf3c13ee1747377a882483729b3adc9cfb3f7d4c0271347521aba7396f100bfd57083718effdc69930a6ab962afea0275c667c7152f088f2019c44b416eab94ff01c243b158676068e4fe44168073e30167a57a4ff8cf8010cb3bff991f4e93e70db1e37f40a7a82d4faccc3be32b9135d027d95ac543b632a310620a02e3b470a254e9dc98c4e99e0136a104312639809fe0dd94ab03a2eeeaa43ad232e3793b4aa7b0b78767d11c85d2f87f7849ee2d7189f1e4e5b8b08bac8464454350f1e06e7b7a5570071521a7b7b3b722b8a2
+Entropy.1 = 91c55c82bbd72be09529ee915eb2c9cd13c7d2d892aa2d4bfefb01e427c348d7
+Nonce.1 = 9d117b412eb74a7959bae27760f40e2f
+Output.1 = 63ccf23c51a7a4b0c2ac4491b8d38ec2489236597a554da8436f5b4dc1eba5087f8bc8a4f01ae07bee9e98e571de0120b7b6d2f6dcce99993a669437e52b2b2c98b0f63db9f724b42dd182fadb69be98ace37f12e1d27ef95f8a3018d8948a20c6b45e3931f659a27ae20231ee323d45d8de5ac6d8464a2712d73cf5241d0040c87129be676689da5f90bd50f5617baf6986d1b9d2f691f6bec73508b82164384b65472ca5f0e6390bd983c8ec75a3707a9c019ab559a7a6e89ddcb9254a89bd413a037948b94e6de4b191a251366de1fd8813b5dad261545f868ec907d0525f1201c62bf1a673b901b3d9d44a362f3d2c7cc3a760b2c9948764f8504cb29a69
+Entropy.2 = dde440ac558146a64d1e2c2f87eb87478e0bbd74e136e689f3d265256e241477
+Nonce.2 = fff859ca9364614d9b5863eb66241c8d
+Output.2 = 106f18c8ed2c030f51b4e93558dafe67172b90d87ec55cf2bbe05ae4e5b4aa1ccc48d8e394474c7df81a1c251fc7e3e6ab3c19dfce7c295f254bf11cd7b111b78ccd711fd87eb3befe8fd7eac04bc74c9c5973d4d1e49a6906fb89bcc7596a2d5068aeb44750029a2527ebca0be10a1a1cf6bfb07d76424fcaaff1a363723de6b4c0e5dc571479bfaf2867fa367d7d959b948f45b195ec62132223170f8fd4afcedc7a00d27e61fbf700f49d75dbecc39a9ae57e5f3912afcc5332e079474c4b9e378583c55e3b6f073701d887b2eca9bd847b6465318b1a449e3eb10b0471a7777253dd183c61805b0d8014467c6387fc32d96d4eb52ba83d3db2f28ee05a2b
+Entropy.3 = 1345c9f6856380372ce69dfeac4ef92df722f03ecc518641706a051745da310c
+Nonce.3 = 3bc180fbc657cef9407b75d1b54cb1e7
+Output.3 = c83d6366f2f83627b33b3c656a259007a0077cc81b898dd4d61df0c29a2373fa40437510f34a5752e25d70641936f47a37c760a653372e557220d2315815542b7146f4aeb3ee9f9ae20ffd438e252240d8b2e08b0797d4cb1e066003b76dcc678adb112a82b7a3ff1bf8c65452b302571d5fc02ad3f32272a6a386e3c977e756ecaf2d3d02e8cc093b862897ce2e5e948dd8f734d55fb17b07c16d6e709d79e6e5f55f9ecbe6e273a17d45822ecd0ffbc3c6c414a0f9e48e47a93fe851f95034bf26dcbbd1ceb9393eddd6af5532b4890b492217fe1f88befd804b6ee1dbd4deafe0d267ebb3d3b8811ef3a56cd6a3de86cce946640857a30f2f50bf2b49cd81
+Entropy.4 = d732d597e8a0422d76f6e50efa36e3730f59e3ecf79e315417a51f227541c05d
+Nonce.4 = def492adecfd386c3dd0182ffef8ffb4
+Output.4 = ce4473c4d793faf305df6e140dc003789a07a30baf67ec1536f7aa9a7cc1f471a04bb9572136c171de8db565f2699136e27b99df40edda1feffcc2dc69105dc1cc28ed89b16043e11e4bb3d5d7f6a1c2af9a2682c50059ecfe1703aa75246f6e0f6059c3011c52a572851a9b6a833aeb9ccf2849dd17fbc9e83a038462ec9ba2237ae49abd362d3e8741bac32785296ddd9fdf65686123f8bdd880299a491e9236353321bb61251582c2a101a236b94656af99ea28697369e5e94b00945f8a78407b9a8271f3e2ab4c782c13a5e5be75537adc659ab2d163dc126460e9f6985dac8a43fdae67502239c85f634fe48064222ab8c3e74e71f8170a4c1c6c5f5951
+Entropy.5 = 5c03a20629e0853b273a8c5e8f89203740133523221903a50b03ba6234d6625c
+Nonce.5 = 45501a3fb480211f9d2b905ea7594986
+Output.5 = 5faf1daeb0830553498d82ac172c0772d8dd27da798244ab2c6757b52e0e0a296778fdd919b39878e97a22db985d2c6d68b67b73e6e43fa9fce011500aa9145ba44b118ceca3d563281fa4eee23f7664d07f1882ee5979974ad726d37f43bee6ee7a16e033116c4ccebf1f65a859754716c43b98021bd588c79bfb1926db0c0211f7461be4b273f1a762fa978b04151709734c8d6429c9cb2dfb25784c9576847c48433f7b97675acb5df1433509f074e0877bbbd4e85aee338c734e53f06ef895f62224333465c35e6edbe0075d9daf3c0c8e1bf690460bd716792a6f78f0f47a408734317f6ad5b1d48754c24faba2579bb49db0582dd4ea5e2b9ccfda0579
+Entropy.6 = ceb630090ef9282f160d091a8e72b664783dc3fb75991f3ae1f7c6f73a2af906
+Nonce.6 = 7c00f71bdf80b23077f1f5b023c6e2d3
+Output.6 = 2c8416d3b2e9a4d1d613b5e15d8a11d47893a625cede12d0a72b2b3bc51a20898fa3ba2277b5a6aaf1533cf89de5bda5a4718a303a6e34ae7faa1ab282b96057459a743be70c4d966824ebdf872682ac4a28d24ccec49c5a8e001e33bf56f01a0d33c11669d75133e8711b763463e40462a78fec1f92859306c3515986a56aa3834dc6e9fb6adf4c59519f288c80519491f1c0f3ce10d06058ded3ac519918156427884b431bbc13d3aca7d10e0674733c55f727e18d84a5de635d92fed7bd08957434367e803fc2c8f33cf41068bbcba158bb28dc0913ad6456c3f5208413795909c47e375292b7d4e2e23a68df5ae3c5850b18b216991079ae32a211c95da0
+Entropy.7 = 76b7040ddaf267ec9336ca11549bf3ca5b7bb0a8e5f9f5d8590ac8b6cf7ea1f1
+Nonce.7 = 0dbc66c634c191cae0b2f868cd1e3ad6
+Output.7 = 2895076c2ab15efb5ae7d61fe578f78301bd35cefd33f1e752a5bcb18a65c197479efee3b262277bc7af37bb6b3a2e18a2e801be374745eaffe26064d0dfdf7fcb173ab4ab5ad3bbf99c27a90cd4fc874b0dfb729981ec0d0087594d191f353f454e8e764b920630b4a9821f1137164f50f5d29a3b2d85c592d6a01bd3d3647cfa0e3b3c010039b91d567f8e8f71bf35b23bca871805ea6a3148189c28e703d4f87e34fe52d759019994b7ffd6aedfd4eee6f05c96a46bb7a3550967c7fd016538c6fd35708b4f74b6c4505e0af52a221af880d89be0ad1e077c94e9321608a11d4296c3d2506c6ed3dd7497934068604bc3f3d8dfc7590f78c88ee6bcac3ab9
+Entropy.8 = 576e23bd76a4db151397ba4f88fdd359aa2bbfbde4d1f5faa3341ef472ca552b
+Nonce.8 = 49e936bf613e20debe5dd21c69109806
+Output.8 = bc35bdf36345602ddc9659401358ac23b4077e3b27e2655d521c6c41ca8b3e895f572a175e6916a38a6844cd5b7004b5fd30972bb2ecaa1492c694fc951c84b782b3acbf5e4e492d200ff5f0e445d0a0a0e6c98a8b9af6e29dd22a4947bf3476c04112d157636acf3f01286bfa9326b0c6c1b150273434349a4e2fc4241d1c70e50c2b60552bb608b37825f5942467e407f8c97a0d41c6d6687b26a8518d3faf08fd2a2f2ad770d3111bc0d4feb84a17aa0e94fc21fcab1027c5dacb66c8b6a47d93aedfc2dd9736eeab146196f9f689627958886f2a59436f652e5385799cfd2a68b3fe7a9f5e3c3393113c07274d4779569dbc00ae688990354387c0bbd93d
+Entropy.9 = b1a179214be05736fa7347df9c48d5e232daa8bafb3d4f97200af85efcd4e3d7
+Nonce.9 = 45e7d8d1df1cce8e4c7b8440497523b8
+Output.9 = 434171f3f7354d83fec4db3d3661c711af86509600390f65a9bba8e441012ac77fcdf571d8ccd0cfd251912ce649fc54635a058ae7ee7cb6f569b23f878ddba61a7697f460e38886b6c87748d681e92f0bf9fee069518c54e8ec68e97f8a37abb2ab3a52229486150d58d18d1adf04c0da18681aacffc5aa930c3917b363d5d09563a551d357c36f0a4cf8ae1ac19929483f38cdf6622e6920eb59f53f2adacc373d7de0d44fa850de05c8a6769cc62fa06b1613d8027d926858aac39b6caf61d2d29435aefd106910234b1cffc5cd44ea7c09980e0841c7de8cce4115d5aa570b842a66aef9e2fb79be1a5b80b4d8e16bf6580195d88855896a781f7818de65
+Entropy.10 = 9246151f2e277d5a46b79d0974eee76bd6a47b4d0464e01c00155697bad29380
+Nonce.10 = 43e6b81c6860e213f058e63d2f3104cd
+Output.10 = e72f3fc80993eb5c3cbd9b1f5012b53d33e7c7fb10cc4371ad20f1b80945e41b4e7114130fc5d86aa3a2869cc28c8401708d6a52fee5e8fa610ef5f1bed0b3e6392a9d238d714cb4d177858508b0623ca80d8458509b12e2b9bbb45482c68199a9fab0d3b3c9144d0685b88200720fc0a58095603851397ddfab4b1fdd014aa893fd3821680cfa9fdbd356a62cb59939401715cd2ac1f878fe78b4754a5f0c8860c6fbe554a95331264ae2b5f918fcaba26b32c1ee5dcd9722684e7f5d7f18c42a1855ab7e2b504c6af919d3fd2e3b0de2022afc88b8e9082fae2949389456f323ecf76ba43074de7256b00ecbc0ce278ecd8024c37e684c1af05814ee2ad34f
+Entropy.11 = 2eaaed64e3c5b25e11944f9cb797c659faf2f4ca559d318b42bb6020ceca3928
+Nonce.11 = b9cdacedb393b03add28bee49ebe58df
+Output.11 = ea1ac99b43133c3c5d6976cf339457798ac8f3f087b12539fa6b515257d91937750e3bf4bd800789422ae7d8fe7f117ebfe100ace693d25029a60d094cd9d8a35fbd19883f029446c61d38da1b11644c3c144694e66a8c082fdb1b84789a53cbeebc0b4261d441cc9c5875bac228b4ce26bc4fe4dcdac5deffb4e5067b20c70dbc24c3f240d92a405de0292db868da057f29797993ae95cfe3a1545892984123ba34b8fc7b3796012666d749c37f019144dc9b7b4143b3af16724641dbeba733ea1658e8d4ddd35025e3aa162ca9c53ba39aebcb4ad9674556fffa6e6c6e0294f6924e585bf7d0b2a3d96e849986a7ea567584e6cb5f05bf6042092a484e3da9
+Entropy.12 = 65b20851e9328b872e0cd0fb8c609f12bc533b8790273f32f4d87d1c652db2d2
+Nonce.12 = dec1dc60443d1026ff9d6bf2da30786e
+Output.12 = 7dd708a70c37e5dbdc566137ee13a57d56ba0036f0b0a348aa07f468305cd41faa670a2e7bcc67549f96bad30f886ad093f7ff0598abcca9d6e92575d968aad1ba37513e60e3a4086d1e18770640eb4cb3941b26807f4eab0f83ff3d4a0e5aa386d15604f775951bd68f3000040560175466ab53f4e9dec4d2d9f06bc749d77b3f0bf7933ab7ddd991853036aff2a7426e3650204b1d91042a5671ba814c946276ecb6277ee51928bb78d2d1ffb3575f6663ecc654adf845a1476e5313c62e3f44d1cd5f3ff909bd1efd46ba6211327199cff6c260b221c198f87a70031b85893e91e47c7179116b646754886c72f6cdea09b19027763fe77192466c722f7122
+Entropy.13 = 99a904a6549341d4e0fed855a64efdea701858a6f17ff86ee53c267b6269f61b
+Nonce.13 = 4aea3da4fa7c79e41c60b8f75d3e043b
+Output.13 = e256006dbd3e4f916687f875cbb071ba9acc6df7b416bb55ff5eacdbe96cbaa01d1e58e70d813012e5ec02f8c681884e5e80b9089c1b43e6189c257d98c13289c8e7029153f4d3b1981cfbadb42aafcca26f20de807b40c239d77ca7cd47f3f4c9e0f86e5304eed35aa3cb11fe41a313268c4654b4cc9b6ae4e044997e5aed8d433e691cc2d82ae725c76af08609a853cb9ed4ea468dd3dd4eb919b5e796102916fa217d9c3097d52fdb0a0985d04e4a8ca0fb13a1fa7152f6d6776e4f245b3c3593fb7ab6a464c2ca05be4e25b6ab48326030b4692438e316d2a5704d0dd577978c75c078101d6552d8ddab17d360c0fc962b66e763b2f856e49dad9caa941d
+Entropy.14 = f5ee32b61bd57a4a4d51309e846f636560a8bb2a576c65d37a3f715ff1878014
+Nonce.14 = c638557dae4f9ab6e078c61d54d0f566
+Output.14 = e929e6c5c4a629c49fbb8623aea903ea129bb6484ed542cf940dd97bedc292e8bce924ef0cc57fa9b50b17b82618a840375874735560aea57e4e9701e4ecd0e812d1bf9fdecf67f431e4d7f6f455dfe4bd3b9a1553c574b0bfbc933a31580319c97682dd990c7081b711c2fa67a4eb54472be39f634c5dd901848c012c309c43f34d189a72c219acf8ca393d3f2cb292d62bb4d5e88f2b6e5e0422dafeac17415af623473f26ec24e65082123db9b9c00dbce3ca1942269fdf66f14add6c486a00527a39b050c2f3a6bc461e750f6e33236de198742284998bff98b7b3f6566e66679b3d8a1e63561fb5f8228867b8ff92230a9f2a6b9427821b6d55a359994d
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = dca330679bc48878079dbd7be18364ef00456b772db86c2c09d99e93c85317d8
+Nonce.0 = d6224a1930274e5f55d570154bc331d5
+AdditionalInputA.0 = 78eec2a99ecfae6ad6a8d8ce9cb0ada29b491fc50f2f3935f71de8ee4501bb51
+AdditionalInputB.0 = d227d7b53e8f0477df377e9292b53a32129d2f23bab95612a43ec21e23ded61b
+Output.0 = 5f09c1d8b0c2f26e186434fa87732e48dfb3d24151e8a989ac354b8859a5385a8b1298a2300314dff4cf9ed621478df29767ff0499bffe62e93e63ad510b58c8201e89a64f14dbdc60d6e3bf920db5ff8624dee09ded5981e57533918f236491667dc4ec7d8a9dc2877b35ff64438979a763ce071adeac8c7c6198a8e53aba6870940b5e8ff3407098abaa0fd919e2717f27f011644b9f248aaa406c3f69ecd0d29c33477fa3ce0c193356c67b2f27bade247befc5876eeb5fde5ff8c6ea7027ad72f3325feac6ee40b8c5e59c480ea899949a1d509be4c7fed159df46c397f5b350a024d7f29b86ec07e3cf649db343510f3f1e1cd70ff2d509a7a2c814cf80
+Entropy.1 = 1055971f5398700cf74e4b6299a784e812cc9456d6bd328529ee5073115fa92b
+Nonce.1 = d8799ab74e8ee16c74b9344095dc1da5
+AdditionalInputA.1 = 5676e4e5203b2289315d261cda31a1619eafc6cd47b4eb712483936a079fc6b5
+AdditionalInputB.1 = ede77de0d09184231ce425e37ba4d9ddb2f2aa2c51a46e13feb086947ca46da0
+Output.1 = 8d9812d72dd614f0f6cc0ab34b64552e9f64a328e4c77930fd59dc431044a6cdf3bf674a73e38913cb28077d68beb5d0741a045ad36df1e8368c612b4bd97e1f5df3153817e26d8669097d8c2cdf3109d00ddfefff98081c51876f602ce0dc0f007c691dbd71f8b0ea1d660782ea89727d676ee95e4fbde66f24af9c7e98cc0eb70e0a6ade1780637cc099a643edcf4eeac1b0a84a7f236478cd59a1841ae317a9e9c2111a20601e7631b36dedaa79d8924dd5e51e94ab5a7a7196caff7d26a92ccc92e9f73724b170df23525c401860e097038028634b38475e14a297606c4602ad8d029dfef7c626b4841f225ec771b8ae212526a5bc8c042bfdb766c64620
+Entropy.2 = 23a72ea31d61a0b43288b75d97cb8a94390a1e5e5efb644fcba2563fcaa51283
+Nonce.2 = 58208a5e38678556d2bbbcd805dc1538
+AdditionalInputA.2 = b53a5f909b625e60e78bd5207ca6be7bb3f1d9307f971e3a772fa6658ee874c9
+AdditionalInputB.2 = 23f555d87c5c840ef86dff90110efc0e38b2e8ed10a7fcbdb5bb654998beb38c
+Output.2 = 7da790202a375b1641878f36ef368b25b4829fd1c8e7a05777d738b76fe588ae3300ed9a26465a8a7a729c6a1100c2dd2b53eb92b7915b883599862cc1c4d9e8e148a0cf9685652deee9bbcb24b01aba227c07f02d43d1812ae46d892868e74090d70ff948c78df5ae48eae4e18b03dbe533985115125964076a5da36127d85cb8ac245df7cbc9fa30ac7262fcdc8c6bb4a4a9ffb19cf57262ab5f8c82275b35323dffbf1dd3c87061249e358e19c60c7cb1903935f2af48b070f65c7bde9469d0350510b767529a124a23061f262ee5898f1e0e1b9084cdd072a6c6c60a88893d8b52158774799739e103df116b7b3fca61db28950bc460b82559ea252c3717
+Entropy.3 = c2983bdd3c205cb1ee5fe6661cbba36136a495f94857a61643b24cc61b61902d
+Nonce.3 = 7a35868665b2bf8c7fd10101a6a59c51
+AdditionalInputA.3 = 038f68013b2a3d6568d3b90e94892b42f590e2c1a5146800296a5d01a144e329
+AdditionalInputB.3 = 353c894c921c6efed6eaa1529844158e9ee8f8804ba45b5f06de96802cdcece2
+Output.3 = 1f759cd7e32ed71bef27608d80889b26073e8522e89468d3c173fc8c7094ff34205d13cf78714bc1eb3561e4d7601c0607671c434a24f922d21ef73590415f3b441fde05a754e10bdf88271198efd03ecb3fd429f0496f073e34bbebfc6d9133ceb164813fb9366d67d1827197e1d031f44c4fd2d8f3c9ede7ae3eea92789e70724059db13b47ef0e6b254fce37f3e5c489e8be8b39e461ef37a6a04aa65b846706df043e5e02d22f759e3b6d42d1e12dfbce9855011e2e0671920492dbc63246ac6fd5212196e900c3781f243ca8073e51e74b0d29fc3daa7c5d1a76057ff63e0c518ac6cc28917556fbab7e0f000afbaa9ef950c60123e268848a5fc015a78
+Entropy.4 = 09b51083ae898da41705b2ad39b2dd6f3ab619becb7653aefa79bac5dee29741
+Nonce.4 = c6fbeac7d823ef53804d9c9cf39b5c70
+AdditionalInputA.4 = 58c676366b3552a2428867d08cdc6d76202655cba6fb069a85e06afb652d9f5c
+AdditionalInputB.4 = e2f40323f480d5465b8490caaa162963e096ea2347ec46093c76d45cfd8440a7
+Output.4 = 1124e7d660e90bebcfa1a74bf37dc0b054be0e970b75337e400d4583db67c25fb5fd7d15be0d68d09f0055bedd4981159d79b58205fef3270510c1d78bbb766bb31b42fdac0be9a746767f11a739cdb40d4e29ba88926a55cc997fae4a86754fd0f91528f254f976af9deeff5bbc59622b04c9f369ec6a664c9f5c5b117d04c26ba1d88e6dee930a57027773fb0db42173310f5e16d471a87c3cdfd2a5794491f7ad4c2088e125606e7af79ada104837236fbd0d7caf310916595fbb07566afa4e688f30f6fb0e03975808d93273c647ffdc212faf7ec8dd1df31ddd3275fca5bc76636f4bcab9782e60512f08d99d9f8e68c743e833bd248931def394040da0
+Entropy.5 = aaf79b2b75249c5a7c75cef16490a3fddfce499d248f08fb67788de1578ee878
+Nonce.5 = efe3579c0606c406ea78a10dfd8354bd
+AdditionalInputA.5 = e4e75eca095d786c905529a01027a5e55069e060d15b53cba94a4154e96e1794
+AdditionalInputB.5 = 08bf2b65a29750b16fd45374d34b7c5b6c18c17dec6bb0eb6b4b4f25da79c572
+Output.5 = 75a572b3ac8d15ac2e4cc0834489756ca8c0307af89614e7021a42e836e9d840cf852b93ca87936aae761019eeb20deb0d9d999086b05b4fb7d28e535ceefa1e2ec6d1f96717f7b69079c9c54f72dd45ae257709356cc7b190fda05b938387c193b55da263be22bee2b6d50e861ae89c0d126e461de937739c047ebaa99d859e409bb1aea18f9aa89b2af61b25ccc599479b53607b009315b9cec84dbd53944ce27bc7782d21159b26e72afe72865117dd8e6add356d93a853ba3a2be85c760a53315aaffd0abdf0669a27346dc6cab90c517bd1fd655c267c889805d3e62182b690ff6b2e889680590e6e8c617b15edf304b6585985b9627baf83fe818ccb39
+Entropy.6 = 075ce14e5d9adf4e74605106bf058191a08a0af9a8da150c51c383fec9182caf
+Nonce.6 = b689bff21ee556ef05fc1dafb0ab4f17
+AdditionalInputA.6 = 94c1a89f5b3770095f3bc19255bc9a5fe45d4b07dcba8530d011170dabaf8b32
+AdditionalInputB.6 = 9d3539e9c88daf5d94323ced1d2ff66860dd0c086cc517403f274b942634408a
+Output.6 = ca7f2c99034741b7307492a24c0bef27f6ec538aff545cfef0bb9c6fc1e1207b555d09b3db88b83369e72a9cb7552b4b9eb15d53ce61723e8d325b496277a12c5fc740d14de01943221c10c3d6ca86f544f96bc4bf9c31877403d6099f5d70f5f619392eb33597f97bc4ef668364f3edf72caf4282df42bed6938d97fd938a04ac59be4553c5196ea7258f9c54d3ba493a4725c2dbe5845811ebc40e3987aa86c0ca9f9152ff6f4d279e59c9d189a5cf9512f72b39ec2c98fbf96a525fb23f7f6d90018db11b41f13a76cbfb7cd2d38369e94b6ddb6d60ec01bedafda6f8e38009bcbabd0bfcf4313a9de8864f6f2bb0f3587b301efd129796a44f038a74b517
+Entropy.7 = b80f6840170a2029a9bceddd72814cad5f6e7219451f4bb654f1da2f760eb08a
+Nonce.7 = e4b79c220a017375d4fef8f33003a844
+AdditionalInputA.7 = 09a42fc19475f26b3a0d1a211d53ae12f2e5f10dafcec5131f18a43914bd3c33
+AdditionalInputB.7 = afc6dc5954026a5b6bacbd9d1c530f9781967adb2dec8f7255b4c843ad067a2a
+Output.7 = cbcd5664f060c9395cb3fa36e2b271692cf9430d61811ad61e0459d118c63c61c1d23925139cd20751b0727383273e7282e05915e38b99086d16ef7bef57251ea26bc603b4fb6178d8c1354fe996409d5d23e86062cad96f4d83770b56d92ead7b01dae92ef56fd3634ebace7853a67535d890e597b383dd13d12717f5a44748353b2e4463feff9234179cbab0625755a4e5f23728586e436275afcee9ece54fd1acd2d390aa423832d7e24da6690cd85f8f039127e7e29321796a3f3f2ef853503753768e1231256f1864f14ec77268956b37ff502ca0338bed517f98b897515bc2ac38e64c8ba4f67c231c95d91191c02712516083bfbb6c677c40ac9a0779
+Entropy.8 = 9e80fa514a50d3a67cd26806dd4e0cd23a0f914c9c65f6c7497e79fa02533faf
+Nonce.8 = 6a458cb5341eb513ef9b71c2f71626f0
+AdditionalInputA.8 = cea2c633f4ef8cca4a696a9b9e342cd0ec79c76ae39ce9c16c68ac64b3fb0b5e
+AdditionalInputB.8 = 892c72d384052fe30d23615687b499f2d5c1f86754fcc9abc37b9b22b6db114a
+Output.8 = 0065b7cbe4c7dd33ebd090cd492e67b9eeb08295339d01f45f29141a7458e3464fb393349ca762b6ddd0eda5320829919de66cef93bce08da0dfa88e540f6f4f352aee5f0df7c01019cd28bf6cb4c219952f19a2e3a8544c638ad40a14b3a5d9daba65867e815d70406bfe5b4e335b41e50e5828f0d0bbc3d239361591dc84d34d41b50fb259ed8ec63bcd5fb579f300c3efdd29120c3dd3206d90e01a8dedce656a5838c09117e859026ed3ab99b242cc57fc6a9840a8e33e34f5a8d3e02f619e2e3fd385207abdb7da4419f50809a645e21c5b335c181ee3615112b0e106d956b8c6d9f92fc7d4b10a3cb7d5075ae19a492a89cca8419cd9f7abdf7df2469f
+Entropy.9 = c233d84feded3b3d76256d95931faf82a23b5928571e837ddffad6c714c28d49
+Nonce.9 = a2c79e02bfba7f9964cf344efe20b331
+AdditionalInputA.9 = 5f7aeb3f5d6b72ad10a6c7eee488b21f7027a199bc97bdc71d13f925fc0926bb
+AdditionalInputB.9 = 832e4bef1e0a300a5afe4b26d7dd32473bb0edb61793beb9e8a0e1bfefb566e6
+Output.9 = fea34cb540e4c85b307e50d983719bc58a042015da5556e1d017075611fa5ce6875aff1c55babac281e73ee6a0ed193d4409a45efd18ad9abab996b5e285a7747abff3d07fdaace094df6edab8e26526d22693ccfdbc7bedab20f8bf52f968233e25778c0146223a5db012ae7cb71fe9022e0a30e1ce7c8fce9d90229ce6ca8d90c64612367b4f774674cbe1a0bffa983e59c6459be93777fe284663640e54ce524784deca45726a483543861d2ce3d4656775d4b5effa7357dcc886d201b172c270f31a777da9c7d7793b6ca48dfefab80ed9625abe1dc5b0439c04ed12f2bfcc9d11c3de13bfaf2d8ae27eb348bab822d5e98c142e04d344b5e8097255b909
+Entropy.10 = 117250981d88d42426d260ed0635d8bfede995ec758f8edb25d60b1ae07c349e
+Nonce.10 = e06b08bd885e81f4cc2c2463f10566c4
+AdditionalInputA.10 = 635ac4f897cabe45e102bf6543a496950df259f09080f377d0df7ea3be8b4480
+AdditionalInputB.10 = 59258422093cf1a9fce1cd688921ec8d180c9e83e6efb0a693ee830b0a031b93
+Output.10 = 1cfd35cb31299346bc9448812db8411df74cc65a7a6b4f89570d123067fdc8d711c958820bc7a8c03336770dbd94ccc3123daa53f3343e951e7056128f8d753f7dcbf3edfd72090b1afc0de97b80d5824c2513a25153a6e9a6d1577ff4f8d078ba68cb598e88dbad0ff9c56f8d4855b3e48b7ad34cf6a6d82aa57d464e2e5888c2182c6f21acab9cc060a519fdfe3cc6793fef7e15ecbad54b63a2097751dbdfc54fd701c54ec5421188b2ae944190c5c3f8481b05a980d3f70cd61b664eb8e3bea584afcf596a59281c90a12181a2ee74c2a3204625486067d9d9ccca0e7c0ddc1d7da87c53ef769ef5740f6f81a6aab9978259b219aacf79a3fa67bb6035f3
+Entropy.11 = c571c17a6c1d64fe4800da9cca2ec486ca72cf6e2882526dc039a9ef1d449198
+Nonce.11 = 364b990d2931698f99243782adb4dee4
+AdditionalInputA.11 = 323fdab714624cf9abbd89df915b96a1872d9ce09e407aef5a76eb8beb6b362f
+AdditionalInputB.11 = fcc9d0f6e5bd5b9384c89f4be70908bbe37e522b5fa2e53309a1e6f32256ce4c
+Output.11 = 5b1d45919fee2d2b7e4209a5c316686a8a0dcb4cf3241a4aae490234ab1ddb7101a4b899202b583a337480997b3132d331347ad5246b5da691565b471b627fa77f57b955d7d4d237787e2883fc0b1ef93aafef6957a52bee5dc12f5c39b7931fa6e055c08bc974e3a00af314757cd972281a98500f2ffedb11631c1d633f69cb73aa2831aaf94c688bcbb4f920b076a6e64f4ca4c537120091a041e8d94b1b7c736be0023e2a11eaa2865d747c4150f8bc4c29f0bca3db739fc11280d35367b36174f13aefc564a2aee178485a1dd678d548c6db1712df1454dc8c2f3ebf9a17cf81b157d702d4ef150fb17d39f7a1dee91d56ece437f55452c6ebb7a3ce4db5
+Entropy.12 = b2a3525ce8412662e7b20722954428fef572cdf5b07d04d9d8b21dde198a9307
+Nonce.12 = 51e22484621970409b4d19ea0af1aeef
+AdditionalInputA.12 = 7cb7a64b76bbb61a58fa67399fd0bf92e8ee4648f301cc0da9bf71c33a861426
+AdditionalInputB.12 = 44c681550e2a09d16d0473d24ea7980b2aaa1fcf87139280423440ae95310e95
+Output.12 = edf2c5bb038eb0992a76211b9cb7683a31fa088a60eb9008894776ccfc384b09bd41dc6eba77ce508f29f5a8e16eee1092c3aefacd7fd963ea2827c1048554f7e563540735331651c32f7cdd1b8e9853404b1a6b174fef944e682a3a01051bb779500bc3534d4acd4dc67589f39cf10f6fe37d2f96115e7c2f4d4b45f881abf6a9f81f031b4ec2340dbcb54d5e276f098abf4e1dd9f25ce80f0b65a3430fe0fdabd9017611395c2e55d72acb5ed18d2be69b9c52d18ab3c2bd2a568599a53d42b39e93ef0446cb1f6ccc16e5b7d9858beefacb4ca7ab40c90fe377b594681f6d172f1c0865f022aa2ab56e3510cd44ecde2a5b7fcec6ff5b6f6f399e202a43b0
+Entropy.13 = c559c5f8ec0e26669b71cba2c06ec3b83fbe99dd9e70b14ecd03ce4b6f487200
+Nonce.13 = 637b96e7ec68f44ab14760df1f00109b
+AdditionalInputA.13 = 35b8da13dad70c4ea6218dba0921989106a6f90edaa49e3b0037f76104ee528c
+AdditionalInputB.13 = d936ea3ec34c9d5191f92bd528582cb0d350a51c43e8d70d97005cc8e6c01588
+Output.13 = a3bd22c5b8b73f1d1d5ae2e5b3feacc14bca4a16a8f4dcffabefc3e79d616391f2bd76513c800529beb1d528aa4bbc1e2032b66dda8fe6a945ee6b91d32b51c9325505b25e91119f6f5321f28c7a571985f7fa065b67134b29b9d8e0d71f5d8b6563d9f00832cb7931eacaf41385058ea0c3c93a8689137ba4fe7e34c45c6eef2304bb262d9ae137b2224097bffb108ccbd7121365957f95f4ef81f6681decf1dc29f33372eb428844ad648398a20270edea6ca736952182b7e0db3d0e352e922641ecbc3de95c16592f45cff6229bec87621cf93517efbc57459f8de4075a2436fabd17df999953a181e196482c56d4274a2dc403c44705a122d6f83f9ca24c
+Entropy.14 = 4019c183d7cb2d5361edcae35686953261f5bd1f847fb1c161183265a6186562
+Nonce.14 = a29d6ccc04bb066817ca7c1ab6ef1526
+AdditionalInputA.14 = db7b290176b65f826aac2190a912672f8a9c97815706af33732f68b1f757d62e
+AdditionalInputB.14 = 13425f17d8fbcca3b4d7793a53507a85813f6f50d3365d680c0620d5fe1bfc33
+Output.14 = 12d4cfe6574dddbf9de82b8a357bbd6e32a3addb7022c313ac401d0aecfbdfbc7229822f7db9012e8bb0e2907fd48d3eb435ef8368802e5eb948f1bd8d47569b694e23979652f6978b568d7e2288b596afbc67b6c1e0d662240356dc6257d9d273a9ca9f7dfc9bd4175a50ad5b328056c37046e734a76384d7418591a7604f332a457f2fbb277dce4fd2729fdd1319dc3a56b9901a50dc90feaf5969cd9e450bd8716e44253ca55c4e1dcf791658cc467cfba613c27a96f67bd68dd8ccf46bbca4294a0f548b919626d1712ed4290ec90c1098a082699450738d32a8c6516d83bd54a42413bc0ea0b37fe5d6b0663806df67f61d2c553aba3aed3f9aff111d2d
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = edb77aba67caabf66d3c8d413dc36566b7dd33c73d63e960ada87cdad9dadbee
+Nonce.0 = c978a652b5e6ac2a190904bc40d6756e
+PersonalisationString.0 = 9b383b001677ddaf1170ad611a6290243deeee5d66800c4df57d9eadea09a427
+Output.0 = 44c890c4ba73a795eedd9166cbde015048f77ff2c66fd44897f6336885bc7549e624f203ad2e89765859d1189d09658e19e4a30d929a896db54df1ad5c3fdd8b87b8e5f90bae3bd9e9810e3cefd816320a80aa8b2ddec800c422befceaaf438005ae24a35568047298b136f47d832fef5ef8a1d53e8a6f1f89ee49fc560f80112f7d40859ab8c7e2e4a4618da79b9968180e461a15e341a20f4e180ea4b2bf01815b161182a282c9524daa408fccad1e9801daa13f1d4804bdf396fa46bf3b0be4ca9405c7a637616212d96a47c484e15ee6e62293b2ddbfa1ce675c93e6d893ae33a66abb7f1a54f7bd23e53907c75297cac66317ad5abb00006de77bf9d9b7
+Entropy.1 = 08f94b7b7ceebf999c850a6b83d499b045c421ba32569a81451d19ca4203d841
+Nonce.1 = 9d59d755eae840fbbfd9a37e9e02ef07
+PersonalisationString.1 = d5550e16a863843f4cd187bfb650f683adbb44c86d50ccc21f3e7630db3335f0
+Output.1 = a2c62c753a64e44e34be03981037275ae9244b016d05a2c9a63b36fc611c82d4ecd819c1d3910147b25b7bfbee0236ed6711a4293825c5d57cc1c58af1ddcfb8df533d81b613864577936a84c88c267b02521e17b481d61ce19c70ac625952b4b7900bd3e21b66728406a7eded21499d7088aa60cd444a95915ce7767228c9bc4953d53f46d90f67e736bfd7dde2442ed01182253aeb8ea827f3049faff9c210e99c4b33ea6e623ef7b6d2c975c374ddce64f63860bc3c9db27015d23d97c27b90bef3088cec88a3d0d905eb1d11b32596b6b35281bedb3acf36f61feab9dd9ce9fb299f7d78e50404640827851222cfac558fcca1848da435bef281c739cd27
+Entropy.2 = 3de25b41b5149c54af8241645c5b763c035217d727727bc3eb48dc50b2154192
+Nonce.2 = 0da29b48baf4f732099e4eddd2fb96c7
+PersonalisationString.2 = abd5ea43928042b4618c2a8933185fd94801c6cc2e30f855e403cc403d306356
+Output.2 = 8595e3dea6d7b4849c1280fa4ad3b99f78922ab1dae43869272396db1097045a66cca3234639798dd0e4e3cdc07154ebf4424de58627eb42724e0ced746bc7f87695d2c911d551bbf9270b9ccaa0b2903db71d75f6c3ad764e109d56d19d388da0b7d921fce449e8667814a9cf0c4115a01d81e49ea117ca1489b4f8c02961c9f9118b0f4159269b40fab430ac65d9fa924d0bf64499526807c8c917de331c519be4df2f1a653934fc6a3c39f4e2b4c8484d91bd5199a72655b9d54d813552eb55136d6821fbb4c48866a6ed9bc3ae1625b5ff5e7bc1d43a251972d2b397fb0c0e9def966f9760d98ee995acc744b9ddd707f42f27b8d8d91eed8bb0d4813f6d
+Entropy.3 = 1752d86ba9b212382357f36854099c9b7f9cdc49324b5b1997bd89827d80009f
+Nonce.3 = 7327fcb73b868a9cbfcff006887e24c7
+PersonalisationString.3 = 00275a675d26641f1ab35a7528984a8dca8c97ebab8eb6eb28cb66fe84221ff2
+Output.3 = b81c15c53d887dcef3f883a7d59d4c9c9a0cc12e025dc35edac3bdfddc103075aef3f64a51082bb4192acd3506c485ef3860c3064c58189464540a81048492bbdd30bf008bedaf29c0da72f074dcd1de0a960ec0ba7bd14d9f2387a613c3c90b1641ddd7c3fab4dc87690d29d0e04ff239234f863d82411931e2ffaa1d145f659309ff4a812ebd0b42e73493236540a5f01eb1b16d9b708c096308696fe0e6ebf082b8056cd52fcc5c3dca38d63a6cac9c511bc868a4d66df93474ea8d2927edd1e82860de415aecb983891cc2fe543a2ace004049a9e093e04d4f70de538532665168811a460b266dd67bc690c85978be0a842b39d3b2dde330f2f9a73afb87
+Entropy.4 = beb782e041c9d9a5b139e53d8e08143e0068542cb2b7e5db08499b956eb8a886
+Nonce.4 = cb85d7488309f168aa876d0734d3ad5b
+PersonalisationString.4 = afc9951f1f4a984a9a8df813305d0fd3522bb403964bc59a74a81ed0c85c2310
+Output.4 = bfaa34c4fff641c7aaaddd740fba23c411e1d8b42fb3352c1727784880625d1e361c27aada86e9576769428746007526d5557e391dfdc780fe07ed6efc11867b09445ad1b7e2e2b0677347b9115af686e260f5d931b2018853120726670d5614c6baceaa5af00c0820ffc2a05ecf892f86ea228a8be5fedea5d92a8da790bc124dc9088e39c40ac841d10e2d62447be7d20148e4e82dfc84d5d43a47ed3720a4d3b2c2bad818d4a3aadd5cd82d8f7efe0b78f9968470f2e68dfe00c0d58f9c8d907b39416cbb649aae921e813991665b26cfb454065b0f29783509dfdddbc9ce44c117bb21a38c99ad566ff606fea27d2d9e67b4c052594922245e414c1e3275
+Entropy.5 = d5bf7d62d00accf87cd381fbd180da753d77295d2686363694a701c488ab0c41
+Nonce.5 = 6b20f1e0dca4e33d41ad2e1e9c208f31
+PersonalisationString.5 = eaa87c33076d80188b5fad9b2a8a02bf86444c44da180b96d268b8cfb1542390
+Output.5 = 06526cd25183a00907d645d24335e149ca77df7f85e92748a7a87b61feba04664bcacc26bd3b1ea915ddb05efcc0afbfe9b0a589f059a8e683bf69223dd192bd88f3e2aef159d330bdcb594db1570d66efc1ce9815190e482dea0f49ade057e3877ffd9a09bcc026bf4e067f7c142b0745af14202172b20b22917d040d222aa88ab06258bc05bb9fc82127737f1469ec9a09adbade7a0633bd17b7fbebf6d77d49b53c1504fa1d4916dddaddf929481530d56b27d5380d102e922b359721e94d6fa3bd3f28246b9dd92c1008368c42bc62848a8d190ea63fd5564551576158ec1bddf335e3a4bf9b46766a187b3092b2992e1e6fdc946f037de5a8b2d4e90c4c
+Entropy.6 = 5a85a9bf855fdcf49be93d2526a919a4894c0f3aeb309d40f207901ecc0fa28d
+Nonce.6 = 602a3e7262dc08315232d907ad1f59a6
+PersonalisationString.6 = e5e345b3561349e4d63dd0fad99ee220d9e619c88d5cbdcb4450534346a34b27
+Output.6 = 349fde44edd84d380e8874188fa96cad5908b040c45555b819feefd74548efb4bdaf65d70d8df66ffd0ad8ed1164d45abc8d7d13a0e8e926223e154c21315dcf682d8ae7fbb4b1b3152b4bb847864935987a23b3598b1fff783bef3285d42ca902625e5512a579a221bc901ad42e256d4a6d9731ab506c31d4f415a3be31c1922812c4dada6aa41f2cc6b2093665233c67e9a4330972fdf37b388d8548ca0662e144032b4b6a2e0c2eec6aab7d7c0ba1358e2e0b301bbe416bae5acc79736f43668aa9e5371ce07c39779b2d13e25042db12d60e97fe1dbb5bb2c50d84fd1b151a3f2b1ab48a994354d2ca1f472904ea744cf58dd0b1319bf99a37da6f7fb994
+Entropy.7 = a2b343ca9c9f9529ff55e63ee3ae949a7b6b503746dbd8f7d6218ac80c0bf9b1
+Nonce.7 = 75cf81e0cfc6e785f9726764aa4645e8
+PersonalisationString.7 = a59dd29cca65bd03afea186a4954ef29206731fa886a48206ebf7fb6927a3e48
+Output.7 = d6cf433eca8f0666456bafc8aef685dd0e754809484c24ebe02540eb23aa1347b6c7a50e2dbefe708721b4faa6c789a1bd6713ee9cf90a1ebfea3c3aeeb140cc98632ed1243f54089c5a1ad6e417b07aa2fb6c499d4a61243174c710ddf884f6b4852150ca52b9b720e4695ae896fcce789bbdcdf46a294c745d87d396fa9672e7bcddc44bb3f60c311a188666cf8881372df9f8d5e9c043ec407f88c820efa189256d7c1c7cb80041ed2adb12bde1e0d6c859436c7477af255b142cebeb166e1620e90a7678065c4af0701b56076417723756929b11b2eff02db9c453ee8dddc972cbba1609582bda90a0ae87a66939937e4f77cb1d377232b4616239516ff3
+Entropy.8 = 8ea56a01e2005c37c31497fd29737ea3b4526dc41437fa458f0b5832ac20eb62
+Nonce.8 = d943aa0cd94bd4978aad7c73780334fb
+PersonalisationString.8 = 1a42ae9e19b372b72c1b531514a053ea1a78666c16923df2f2e79e6180006efc
+Output.8 = d6a2ac0a8ad361cfd21fdaabbfa801a355b11b19a1ef8bb273c4467186df3950aded4e5da688d791b82480f8f153da515624273839c737e104d45546e3ecd93a6dd264632109c64514a54d6269e4b532451ab5858f5822e1f591dbff0e059b7f3d4008b568a4ad5da523310a5b26d8db5a567ab4c4a06152113ee8f36a219630391c5dff713f1533f5bc008799156260d6651a40d37ba3943beed438ca200c4ce9fa7ded15c7f603ef42525a44a11d58ee5822085d5b20ab20e7edec9e85b547bbd69bba771ab4c3ff826dc431d6989baf43c9b6290e49d03c8b9994f84f8a284c8cae9276dd0ff1f5b667557c23d6992ae9fa10331b7e9bae6a8b91522215a5
+Entropy.9 = 519b1945befce5d1e96187884347ef9b3cd4e5071cec80fb51c98c67c453c442
+Nonce.9 = 2fb7d601b274bbf70e993d28e0ed8e72
+PersonalisationString.9 = 3b80d6282d60ddc94765a1bf565f7e852dc1f02fbdea78b69618adc620c1f40e
+Output.9 = 84dd67414dcf2958a46055de4fc10ca01c25e6cb267382474a5b9d2f1368a57304c33775099e503f95ff1210d4a67d2096c10f1ec3bf20d743fdd76ebdd256dcff2e0cdc5a33eeb53ba22ef8a4fe3ca9d6cbaf80827256b43817cba35a348b8c98030d0533137b503f32d3857aef2dbb28d77971795aba9c13083f60de3384a521b57492708a4acda3a7dc4b23186835f03692cb31e1de591f52e6e75e7859bceace3e1777ecc049f3998a70144db83ea86fc064e95efad6e35b4106c297bfb2755f7fb30addc540c89a5a8851174ce22fd1b7e836fa05e4808a1a407ba0afb3532c6cfa8f0e927d958a51a59c82cfad3f871d52e14347f156288f7993dbb6a0
+Entropy.10 = 83cc514fa8ab6bdfb3336054192fcbbdf1ef556c3324934cb37ab2560fa335db
+Nonce.10 = af261aca6c9304f2da6aacae2dc03883
+PersonalisationString.10 = 786925c06d3c492a86815236ccdcc4accef343c8f38ef3ba5faadfc85cb8cd14
+Output.10 = 8d0e4fc80515d2e3eefb3502227dab5ee4351c91dd01044c7564fe8bae3a73dc08e9ffec5c8eb9f5445c2230956cffd13276dc2567026602a3f0e7ffb355073dfa01730800e6936425a8d26521e67fa309c426cf70a4929f49cf095e792727197ce0d3c9cc1ef4fae13f10893dd9746c7fb50b5e796dccf7cba63fa906a55d5dbf069fa62ebef09501dfce2f5256589cf51c36a01b14a81d0cac61d72c7a9b8d4af509ec7d950a137da62409a71c61328ff3c7494c6267c23a535f592e914ff17a6d9f5d0c8115373db101cec89f5bb8540e1156603ea965c8728c3c6f80728e5b998aa272941c06264605606b666b328dbe754f3f208b084cc7ad8ae7c7070b
+Entropy.11 = 14f2f83aa5842c9320e1a3ff8dad7c5e4ba0862790e3558a2c72b2de80f7f79f
+Nonce.11 = 74eace5391ea07e06086ac349312fd7f
+PersonalisationString.11 = 42aad660a98483d4c1b67bd7e21d0bfb68ff19c6ea8f752e8083777e5f619bcc
+Output.11 = babea6d83335979e5a00ce624eeb176c3cee353b0a54fc527b3e8a0cc50adf9ee0b1c593fc7eeb9172360c13269f352b589870275b19b653c486c1ec029c115e138d9f87a4dea41f68166f8d4f42c6c7db7240c43209fac2a6f4c51c942b5c660a04d39d9de739ab559f3ec36dfdb742a32af806d408da4f786fa2ed2035571a21084965c6d6954cc12cf222a94b6f38791bcb2add8318495c9acf19c7ef57e410d4abc49c290309a5dc7baed2b07cd6198e0790819bd9a877c5419c863e30ec51a761d042a9734a365d90795c24e26802d20ea0f716524cd4a0ff51d477d0576576edf380c19df4f02adeda7be181225af4531e8ab14507460604bb343cef74
+Entropy.12 = 00fc95fa83856472b00b768fc708a33aa34f2ed9131806db181c866afd1462be
+Nonce.12 = d83ab71ea108ea16515709e570e254d3
+PersonalisationString.12 = fdbb2d6bbc8a928fe4517ee72aee729d0eb1271ca81af6a5088238431ceb7095
+Output.12 = c081d6b891989eb071bf0a0b71c474907265be63e377a09da9a960242031dd90975980facd28cd796a682204f82283748bbb5fae826fd9ca93aa1bd0defc349de351f7e6f20e21a0ab8136228698035aa25fcae2167118fb45209290df4e6913d0ab1c86d3c9fc6f6e0060888298fc66ee23654c084126579ec84695f3a186f5ebd25785cb46e9a59e255625e2818bad169e6f7cc74c534d12364370faa8a6361f9e7bf555d67e7242cdb938040a26ed80606fd06914e75195d534726318f07b8dba65cc62319e0888712ee6538689d59bea3d885e0726295f219d6592dac0789f804ad13ac299f740bb90fe4931015398a6dd5e9fda6341958111fce25e4041
+Entropy.13 = 38dacb8077d4db34f11073e2eb9010dd02dc81ecb8ff3eb9b734f64c48e53fe2
+Nonce.13 = af14d0a2076e6a24f5ca02486ac730dd
+PersonalisationString.13 = 28dc06090ccea62ffa3118dd24bf603ff69953c457dfdcdf1e9faced7d35e768
+Output.13 = 5c587214e8d8da5b7f02254ffb5a22010a67dc6bce57c87f0d0c06e055cab7ccb833f90eb0138a33c5fb4b0d0360004cc24fa15ae5dcec1338a8233479a31d9ee03f9ea28e78495e6abf4541b17ca14207beedde6055c7f2364564e62a91df25da12f61efbf2c22e88d75a678e4895cddface074fb2b516506d0d5fa65c84d2e839bf043a865065c79f11087f7aed7b116c99a4abb3766d73e0829a1c1ff1388629c1e323eef58c49a7e0a5755f81266a67214e56509b1bc46319f6c7ca9255125dc1befdb475ccb600a871ad705d69855db4a664ce644701f044630a57c2ed719335c5b45cc82e4c57e1408adeb7d748199a4ba60f56642c44090092d88c26e
+Entropy.14 = 5f0d1e9762c2724d5f95c91ae417ec0bdc4646ffb3ed6a880f4380d514caae6e
+Nonce.14 = c600da30d68cddd9b823433845111880
+PersonalisationString.14 = 8896ff67866ff1f59c8e5074d91e6b9112410c9b6a1eefbcf05a1b8c7123dc89
+Output.14 = ad8150de910a0bbdad0a674d032919ac3304d5977fc43ad5d5b1fa9be46f22e94f5c2747db228315b0d0505867fd97f9b1582f97b4693ed542c416df1847a85bcd4ad07d6348a4df78412e3df4e675def7f44b1895a8a2156c811040a46198a863c0107aebc3a426b4c2b9ac294b227d323879a70cdf7ceeee7f6f51f102c3ba4ae9a7343aff295b664c869f2c2d6e4396362fdae7d9b5eb0802f37ff7a3a7f1c944044b1bd9b21fbf23f191c6f538398164c2d1b67390e7b059b1c9f5bb031b89a23895ac65770182c8072fb0ad4a7be055d9a4653d08e6b22a61ebdfb66adec2629030f47aca70a06d68c9e1c041ceb2dc9bcd1ceaf61655ef7bbb1653f3d6
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 7b3a81915d5e5de4f743bac84ebdb4fb1fb5c4f9a2ca7bd3500169284073cc7b
+Nonce.0 = 858c19f8f6e2a58713937cadb13d3189
+PersonalisationString.0 = eaef7b7f98f96a154498133c5b4089327ea00d1063a6651449c225308586dcbf
+AdditionalInputA.0 = f23482e50ab28e4fe6a4677491ef66720dc4050169231f7d8cca9eea674728b0
+AdditionalInputB.0 = b03ea1d2ab9b3cc661e7f87cb53ee1f5028a2a03c919795da17c4a5ed4f61d0e
+Output.0 = 56b0c16d58584cbc29f53a7bea04b0cdad156e49c716fe56a23cfe5dfbefdf6afb2b8b7bb348b63d05149aa3257b4c1e653f53eedd7ce6d3088e3c660dc96df3cbeb39f0126fa963d4a060457959deb654aa309d37cb228d0299a2ea7761d09888fd45e4d46943402cc164e96503d14edf8201a7f22ef1c8b7c2ff5fc42a52bf61f227bca4c6c460aab6d9b8eae3bf060cd15025b6286f93dd7ac741e4f7390798ba4719c446fd0c2157febfa0cea4661f32ab285844b55d3943829dded94f67d705bb7704d5246612a9e5c47fd6b17effb5058b7f41539d763ce93fc474b8dde544be508b3c3d3ea7415e947af0b130eb01b39059a58dbab10ae75a709b90d4
+Entropy.1 = 56c7839939abb1e64e91d016aaf8c0a17c1205ef34ce09a5b8ce316d11ead5fc
+Nonce.1 = 37684e58bdfd21397f0dc7f9b08be256
+PersonalisationString.1 = 75d20dcf7b2a40fa63b7c2b7f3a12190d4e6bb908c14e19fa5ff6d271808d0d4
+AdditionalInputA.1 = c857fd57ae571673aea5449a28072fdbe1ba155073fc0a4f1ead3d44d869678c
+AdditionalInputB.1 = d6a1d3c63e3615ba1e47a6c5432608c07ad1db498d694edb3d115e5aebb221b5
+Output.1 = d38e0bee565d8b64da84b7f3fdc7e494743890feef09977cf8f894708db5091b418baa14fed835c6aad306a61bd00b811ec58fb7d49af05d7389cb7381111aa0ec93e9cb4856783c0d3a1b4c9f6b1d969570f06f31fd538c3c5f231de627b133c822f6b74f3f8823bd6e539cf124fb6ea1d380eb3bec076ad863843c59faff660f0e207aa8dbe01700f62b4e5aff385f7b1f88446cea9899aa30ac4e8fa1aa93111e8b1ba9ede84f7ebb57f5fb54a2ba52df1ad14b4d6f4af8a6e35df92ac818eade364afa637e72ce5435cf1548acaa42209d688a9e4103b035caa1cc2f4c64955c7f7634aa010ea30297da048f09f676e57a12b310c0e2318662f94e3162e6
+Entropy.2 = 4d3728655564f8e03049e2edf580dd5ddce55090fd305c83c1bf2ef0e5ef2eec
+Nonce.2 = 7c99487dce3ed31999384173f946bfe7
+PersonalisationString.2 = 6d150a86863c78149798987a78346ab6257ba9beff05dde219543dfc63b79379
+AdditionalInputA.2 = 4396635271fbe8220a63db6052caa53b53e3ff9aaaf2021b16cabaeab1994fae
+AdditionalInputB.2 = 10d77b8b5fac2248ea75b042a0cca8ac75142d00e8cf5dcd236c49ecc485ecf6
+Output.2 = d80a588eff1672318bcd946dfd3e56fd6d4b7ad0a7af508b1e30def6f4faa572d2351591b26a800119b2312ab0912a4dad79cd4472a6c40b4799afa6906c2954e1bb3f408d53920888922389483d306ba69da763fac38097a037987da7c5fa45c0b46d4819b93f1afbb073032bb61fe797632d717220ca5cabd6d05b158340b25f727d5900a8b2aaf99499d2f7967e6aebe764c7c8e215b3297f48fba84e91898996e40447a7eea521992b2ea3fd7d2e179ad42b2d5e4f14c6bb7e56a9ab15a69d9e7f4522bbb118fdca77e4dbd751424650ec8451c4c2617492f79b67f5aee11cdfc380e70f522816f735cf37a03a2ead810b6121eded78aa8b6d9c2ddfaa0e
+Entropy.3 = 7e1be93493e037a987815c05adb3a1782a7c0caa01bf82d6c196469255dbc0f3
+Nonce.3 = cab66ae4483bfe4adb83f3912889f976
+PersonalisationString.3 = 1c6c0b6b0fed5a83bb9bdc1226fa272785df0c2a6beae6ec15dc3a37ff93f589
+AdditionalInputA.3 = adf1ae0b09f84a93752f3beb6cc59e50bc3faced986d03658188515d6fc01eb8
+AdditionalInputB.3 = 70edba7b2460704a9ec2e77c69a4cf9c7cb9bfa7c13b3f2f9587d29c06d17bac
+Output.3 = eca9d2d99b56401c7a642bd215a876b2740aa60dcc8c580f091d9bfd75032f951d50e46e42b65998ade5b7b2a3345ef950db609a9f91dd69fb5dab5c49d67548d2da8a38dd5c16858d6728b9a18c52e6d11605408c4dac7fb0a11769f85c44c7b04f3d1971f8b67acff2a0f9a87fd76c7313a753aa7a7bbfd2edef13fc2ca7552bd8dcac7cf417bc6a33d602356b1b26e0c75fd623d7b65a449089da6aa9dcb57721e06796cb030473d1574560daec8385d9d25cb977a2ca78f772241f2b2767bbc9d760d8e48ac8fef648e9ea13a9419185028de6c22499643762aad5bb67c336d7292dd5fb4f5b3beb2f4b3b2d94e3549595d6255cb865d3829bd27e899e5d
+Entropy.4 = 0295f8d1d700e72f50a7b31bdf46e95d67ef65e1e5838d0200269e0a91a8ce25
+Nonce.4 = c23bd3621609f6ab3bd6b1fdaefe7c14
+PersonalisationString.4 = 112f56fea75e8a787789d9c6b1aa3aad39ed59377c8a6926787e08b0f9cb1456
+AdditionalInputA.4 = d1d7b9aeaf88a0685d498e176dbe749c33b7b09995376173960c0f9673e6d61b
+AdditionalInputB.4 = 6c55e5742872472cc7bd82efeaefabb65c318ac4e3f320ea50ed4100f03e152f
+Output.4 = 13c4ef07a2535d4f187fdc9f2bb3895f483ff7e84e8b7b296ce1b037da06da74bd5e0242b14fdd1208fca43859386ba3d7fac294a0df922c3a0ee7bb7cb8bf19571df5de1d634cc549619795948040c3de4f070f2fa4b5f7810c2f8affcec034afcb1256fb6d78c7a215776141494ff461c66ba6e46fc085035039080b1f04ec1dec14f8ec96cd32129a05743833257e3e66a83ba53daa21c93c84c45a09184ef379ee0282157fd990d93d4b78ac8785fb31d83ca0d4352edc1fce4a29fa21296ff734110aaff2a00158a4cadded842c75454fcd9d0feddf03244bffc65caf05435a68cbc68acd0bb30321a1309f64d34cbd043587e1c98815d8671c1eb68064
+Entropy.5 = 6eb0c84bc55c1527d4ccd1b3d7aadcd4a9923a137650126ec607c24bde4b386d
+Nonce.5 = f8b737daf1f599176cf5c3673c410d35
+PersonalisationString.5 = 7a3025f73a1a30907ae556c10512bd334f6587ba2c1268015856b0c66505b5a6
+AdditionalInputA.5 = 3effaeafe622bd78c4160091b1133a225ba564d9097cc54e6a77a38f4c403134
+AdditionalInputB.5 = 83e79b5a9543c271ee7f0d61c196778a191e4834c1f3e2de685af6e0cf15d7b0
+Output.5 = c78921f981e0c7ec67ad1760b970fddf14af5cf6673dba3e0efba8a8e541feda880850a40cc516549dc4faefe9c333408f7a180b6707744fae1bba1f4d26949d9bfd00a226907c08283d4aef3444cf82dbc7a02e2b086dffc09583a79f2c8a83ab22590010f486938dc5f2927519dae3b2443fcbaa04a1ac2b60c46c05e1edc0eb280c0d93ee200c6fe7e19f2ff7a0796567d3a2142f50b97d9272d8defab3c7e19cba1dc49e296c3e79e3f58250837161f2c67b8e8b6a8e71708b0bae7034f32a76207f2832e637d23e80efb29533a572892da2c7d4e5a453cb37dbb13298e42ad86fa632456727043358bbcc914e60693268ae529321bf1c6cf56287971897
+Entropy.6 = 1febde43e4c44419180b980a51cf4a76fc13892cd91891c5063952046c124baf
+Nonce.6 = b4aa99f656be6d073acfee490eada249
+PersonalisationString.6 = 8766c2eaee8513569b185e328b42da53caf8632e91f26729c55a8f25b40ed8be
+AdditionalInputA.6 = 60bbe1bdc20ade21bc8ff8f11b80c13d8c811250dd49ee9cd8c1f1f0421fdd9a
+AdditionalInputB.6 = fe1515dda260323cbb45278130a5b55d279f41c97bd1d801e0b9cb098af38133
+Output.6 = 10b910e4dcd9c98f8b1b3e35dc4acc7cadcaa4234d7993a72959b4b4cdb7901e51c0824c8571cb7b7700910df027b14538a3cd9ad3eee3e94212dff6bfb21a880fa51bc31fc443a5c91ed10c29ff2f3f613d7f774847ac7e94812a98147d7f30ed53601ccf72dd16a08fdcabac1f5c8997605845b40bfd4bc67e65de7f8ced9784d3563fb39ec58aebd5cafd4283edd98aaf232ddb3c017482ea1d486ad4292e0dd1d7400165ff0aeed121d70ce5fe476e2370b4dabdeb09541995e410880050f18828b33e7cea2e416ce919a9d2d1b26127b3b5f28ec92dfc6db6acf0fa5cf7f189b00b2d4cfdb9d19f2d1759022c89d7857946b72b5c6f93dc3f02ef03819c
+Entropy.7 = c1037e88a42696b097cb17b79d315195a343414e91c2543304157af79dbc1caa
+Nonce.7 = 1ade27e246c387497dd5fa429ffae8a7
+PersonalisationString.7 = 8d519bda15952217c7702702a3df23fd2bf300684a343c17363cf66d659f10db
+AdditionalInputA.7 = db801361fec564ac3875cd362e8f32ef555ddc8041c3aa93ec27061eaf7f5303
+AdditionalInputB.7 = b45a65a3a828b2e999f1e2c1c5795c93df89e7d70f514487f60e3f8858b69e50
+Output.7 = 9ce60b935284f845d09da63aec8e36947d4e6cf77edd2ff707fd87bc30f155eb9efc13736d77a02be116490b8f8ec6223f8515165a4f4fdf02ae7a6655b95426f88f9313f58180be3cfcd073680598f8d50e5960c71d95f6546d082af0fa9f7c0444b19af0d0cbeec55e9622f637db89ee08dd45a4b4a1cc0ec188bef984e8a0eb3dea2d6667eeb454278a7b9069f3eb3c08f97401bd75fc5efb1478cf13d77331a1bdf1b232b36abf4cd015fdb0369b510b461a7cf0321e995a2a41231b0c36e411904bb72c63adf5329f8e5dea67d0822a61e19e493f4f46da728fc83876f5766eef4254105052f93df6ae0f78618dbef4db40141469a348ed8434aecc1283
+Entropy.8 = 305a151591a2f4d6180681d2a94bc6f91a9bd6f3fba692d69cc93735169a218e
+Nonce.8 = 79da15d407559320681ab815c0ca63f1
+PersonalisationString.8 = e2ed74af774c389dcc0dad145d508750ab9838a16ac94310efb5618b87ce4d91
+AdditionalInputA.8 = 48f03495d498520bb9ca485f5bdc554818a91417a785b61a1f958e3bcf5d22d9
+AdditionalInputB.8 = 2a74a432e08e98f52ccbd63b719cd5550da74c91506dc9dd9536df6dbdf2ba08
+Output.8 = 8d2411b7e86f05d8922d998d09bb231ab9c19bc0d3a3548b3c3164a45ec65439e9e98e8bdd5cc71a6933756a521c2426bf6eb6b6afd26609ce390ca181eb373c7f0a26c7dc9b5482b2fa3173d1a35a4f1cd6107034e094f29f55c3dca5669f4b66e363f05fcf24942d826f5fe17ac4ff57a9ce46d8968b91c164a7d1e751f4f4a200bbfbf634496348f0ec788c81c588fee3ac154b56f39ed15fcf3a3ce8cb52e3d8a47bedf2a9573e82024c9c539e5d03163cacab7cb8c54612455dcf0bfa33c5ff02b5abdbb439670556314e9029a62a7fab7987e0701dbaad103ef0a86675c3d198f33ce87ebab684951941f3f3757544f3ffb0ba8159ac0b4c43841999e2
+Entropy.9 = 6f772fdfb0f199b445a3772db02dbf97794e8f360834bd9309e1a709b7e497a3
+Nonce.9 = cb8c3065c45218672f882a12140c321c
+PersonalisationString.9 = 2572b0d48ad946c569ed55a546aca0b73227ea8be4e8fcc1eb550b4166e0d415
+AdditionalInputA.9 = a52971fbf209ca54e2304a63b0f89dc2fe9d84515677b84da165eae137d96d20
+AdditionalInputB.9 = 1df310779604df75bcfa7172e6534ea8f1177c239af950d20e42b2373a795356
+Output.9 = 50ec19b64cc9c569f3af8af2d2b8b462ee6bb39cae0810627408b11ce49fe140c3a9c3fe8c8d48c8b996e7536ee383bdad7202fe50b99bfdc0cd317f482c1830cab5c476b3795bb6c23b27242436b557c803ce3df28a8581ca0fa056e7abb5af8762967b75a562159dd27251076b7cd467313186edd523f6b75afaa6ca180c45f24928789443c7fd0072528445c4e11600d008f23be676013d9202ae0aecc6e0496b64975fe86dc5d451ff28cfd8ba0dec43a7218e91ed8633f0f2e37f260f39810aaca8d15fc7feda93ce9501731ee345639e94832996e199dbac2a4e06ee3504f24c89c0d85ad50c5b0db95afd670f3f09a77100ae897a4d6d9dbe3b45ce6f
+Entropy.10 = f10380473ae97c18efb69f62bfdf96a9631241df6f8ae3b5c9bccd487bcc296f
+Nonce.10 = 2820f64b276e0a27616cd0ce24a260e7
+PersonalisationString.10 = c8d40a0697031e04e8ecec2af6f22a56b2586189ab17b761887aef408c28f076
+AdditionalInputA.10 = d6a6e4581068ac1b19def2a5deb78f105b4a9790135c3d9f006929f5633a70f3
+AdditionalInputB.10 = 8a2fd4538cc2c293152c6fe323a440be096f021ce0ad432cd6b58212aef59782
+Output.10 = 9b33563c4b5e51f5b7c61aa56ca352c22222cd9b189d3814affaf64d3901dc597ae085ee547c179d8ca16b8aba97daa26b2a89d6233d44eba7c9d0f620d83c5c59dc56c4307176cd9f07f8df359cbd8b9ccc86e20886fbccdcabe51b84a0163b12fe7476cac6c92111ee33060aa1051909ec21c10f91e0ea3ba0997ee9b1a709b1c0d51bf5de65a4becb9b863a3109fb3215d48c82d7c6255078ea870411fecabe43df8b7f57a1a885434fc98e614d83068e5b179ba4c23a1e6562606d89c1b28a8e563e4c8e3398956aab7c69101c16a7de53fbf77e8a9b21d8c6818d679d71b0f21c65a5b6f0cb7d16d343a4ad1ade1cf175a2bc122ff913092c9085592dfb
+Entropy.11 = 6e85668f6e32bc628bc223ddd388cc0183fa97f7fb4f4ed5dfe34ebf8b30e73a
+Nonce.11 = 94c09f8a846e4411906cb4625df8ef26
+PersonalisationString.11 = 3d8799bb91e42c8291e79f832e2b8da4298de1c3813675b02419c0f0be5db1b1
+AdditionalInputA.11 = 852e596b80f5a2f84da026c9dc683807e1454e55925896a684824ea366dbe230
+AdditionalInputB.11 = 8f206f1152f9422ecd029a52adb06d7d1481235cf9a0d3ef810883204c2dee79
+Output.11 = 8f548e2864b29471df6fe601a8c5a3d88ddc84cac7dffbc982534e2548cf02baa8d0492ebc8006a3f8c08ae969f42ebe02a1265fadf69834bd39a97e669d3433e02a03fbbbf2bc065565c6043dfd03b69ea6f52c126624487ceb1eb0561484acf7d2f410cfce76edb71ca1cb535dc938459766e8d42d90095ba4bcc2bbaa62c746da9f49e289389729dd38eef8973a5c68f5842f161e6de345ad987809497c28a2be795bd7f90fee14431feda2e56ed7237f16e4c520bca327e40031dc2e52157629710056bda94583aea590df7afccc24c839a8b617d6fee2a9f06cb1477bf0e73af7326ef73f4fb98588c874a26bc3c5185d41b5c3050c7f6b7a24881247b8
+Entropy.12 = 2d5d3331174e39f1f473fce5b314d357bd860f5df70eaf58c7606a386555520c
+Nonce.12 = 0446c5fdd5fe4d3b6e9dfe1fad1bb55e
+PersonalisationString.12 = cc47cb1978ede43f08fff54890b962b0baeb38934d93159b3fe30373919d3cfc
+AdditionalInputA.12 = 3da08347143de1d72bca6daf1c4773773b8b8da0efb728796306ebe406fa6b9e
+AdditionalInputB.12 = ffc462b3943d2593dfe978e37cfe89b596e8a1fbd960695190112c52a8ebf2d7
+Output.12 = 0b5ec2d34426bd29b44e75d0f02b689bbed1ceec754ea8da30a6dbf8323b9b09f8c5ae235385f55d01dbea2ee02b4d72ab3b3db34c12170a9dc4ac1327c9dbef3c6507383dd21f27b2c07d6f9429fd36b6543f7ea46c422d5beb4528e2c41838cc59b48c9db6e340b20ceeabf52c8b6c821688d601ae86a44eb473d3f2c71697cad3ed1f2ceaa4618dadbf62540783278dcfe33266c95804a72ca6d66b09bdbd0695bfce6026d4eea3679b9b192cdce786b82e6fc2736827b6945a5f68ef9463e1053b6df159e9dd55a422f61ce8e33ce0969bd67a1adb29dffb3df3007f2bd1581133bb365124d35fb1e74b1c04a9e18c0f2b59f98f2e8148fbe4b91b3ada81
+Entropy.13 = 4754cc397a9c64527a04e34efee599e0f925f0ce0d262959e2d911eca797f773
+Nonce.13 = 325294ca7629cd7e2a313426063c374d
+PersonalisationString.13 = fc741ba5d5ad59b4a3ab023fb5b29228be8fe1ff53688e6c51f673c5d5fd98a4
+AdditionalInputA.13 = 40c7834e931d7a801ffb819d996a1aa5f2eb4a6ef64714dc370d297ad5ceca4a
+AdditionalInputB.13 = 9a7b8319111e1003a7aadc70749d07c2a45e6e35285307ee9c9c9a4aef03725f
+Output.13 = 7a0a7f3e19f79126e1b0dcbe1f5be9e4f92f80ee712a8501e8482ad76268adde28c4894de72a7afa8d22f88416e0a15c94739e0f03b65e5f30e10a819bcc784995155d8d6c859fa52988e97c81d52ef57b3cdacc03af07a96563e4191e5bda7cf832b310519c933f496b186b6afd840abf0fe02da2ad71c7f2dea7bec0ef5b629a3bf8ee8df9f52cf91373b55d249ece5baedcca7688156b384c6730d7cda18ae461e2bcfde2788465342f5fad384ac68cb6a039a6b4314bf9c59569da3a512458a905cda4ccfe36e2a93929f04fdb4ada2d2b6fbd4046d72f7fd61dee0e97c3c57096e9de975d7720d764911ef2bbb90ee4de8755e7f3f3e50f25499d508ab8
+Entropy.14 = cec4e6fff029cf6b087ef12a8d5f542c722c109d277f1638fe9a318815ef2f58
+Nonce.14 = 8cc7248c77c705da6c57f591ec015632
+PersonalisationString.14 = 18a8d2730025abc2209580bf6b5cdfbf98414e0e837f166dcf26d489d55086c0
+AdditionalInputA.14 = 4adc98c66aa72da2c63172aba2a6c59fb20aa7b195a0b79edc709bfa994134f1
+AdditionalInputB.14 = 83485ecbf938b8035d047956a3a1bea5adb66c4a7a24b21dfce4269681c31bae
+Output.14 = 6c69a58a3b27c73ac396840a93ff914219fa80241d39d65890ea612017d7b92b12062fbc0e3c39508c86023f7d70e9b156b4a766465c01c554acd6b5d78568d2087834b3b14f3fdc4d4b959e78ae2fa5298c87321b777afaea4a5c271a584a23a262f8b679cc8198ccd116c88dcf529a6677ebf5189d287f56eb445ad7313acce013b3fe49fb5212cdc3cf8c5ed15aa26b1135d7d9e0570719c4230c104a652fb36ffc57e219e735c03346d18eb57bcba813965bcb39b6a81da624838ba7b9a65d3b684a021f4071c66ce705974f2bd0ce1ad6727136d77529e3b400db0d14ffeabbac877cdf6a38ca66d83492a90482343a5a427ae8b8f77a2f724aa30c11b9
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = b6218db4a23ba91812f0bcb425335dfa82535f62f580091442c9b84d13520512
+Nonce.0 = 0af3420dcb3b3c9fcab87faa4b8d424d
+Output.0 = 4a7de883632c3994a36a9ddea329a9de611938d1ef7664d253e5521aaa8351fb2b0dfad134ce0265c244fe0bed3a3aa92f0d1a9c6acef83f7de0ab63f8f1c3d7fb0ba92789ccbea0d623d6c13fa105f6193899a01058581c75076fc3b3e4efab80a43bf44d001c04d8d506736ab1f89b19e56964d7963c05b9012eee267a724455ab95661b8264f617be5bf9cf3f802faef499e678f4ad60bd4d0ecdab530e509c3892e285796ffec16d86944d680f9798c1d3ee68723d027a30ac4a24cd786d4d831aa7d513304dace72161c247206c87a19138545abb73e9f3d152a633db771b8fc44a30ef80cf51b72cbb2f3c6aaa4d269d21ca261c4e37b738a150de07b0
+Entropy.1 = 40136bc306788c4cefdb176bfece4f36a6394877701bffd97c3ab18bd612570a
+Nonce.1 = ffbc7fd2c6642875705ef4fd03626c48
+Output.1 = a285cafeac40e0f69ba54aad2ce4729c7dfce5986280394d21415ed3d01f42d058f6398cf8f0b66b1d106633485079ff222bc776320f545bd14dd1493558475c47bea679ed53bc467cfc074e80172ee4ee1a69219e9e0a363e0943bab755e321be51100f86c2699999ffd1e28c0a2cd5aaf39ef1a0650e0d2836ba8019b459f37c46a1aad8ebcb428212571d3311c5d62566786e802d8c332e23edf9520545b6862b9bd5c1c3956b469732ee9c613fdedcab0b549456ffefa53f861bb6b2a2b88ebcc6e0bdc46e599d71508029bd38da75dc3c25e72bcb005388928c65bbd95c1a5c998ccddd238f61cece503db24f29e7c9a8cf9e65ff6a1f3d1593212662e2
+Entropy.2 = a7b5fb892d79e492e2c8d71a0102ee88fe3f59b8e4ad9cd1d81b060fd8003971
+Nonce.2 = 7cc6a54858c8cd55f2fae01c56697c6a
+Output.2 = a470511f2b6ccc5165bbbf869c310ce23938ab12c43a41f7948d33a82f11e80488908d06e2af77fb0f20afecdd0ea10066b620d31930a6bfaf6187957b6e6f81b55d2e1326961c9ca81652a9596dacb4902ff4884b58c5a36b8c05aa3c13b67d27b30ceddebcd53fd8b4378ccd8d6120542647b6890c4d02caa295d5ea456496113d3a08e3fac09111eda6a045a3772bdbc70a83493d32a3204247c616de698107aa903721fd735e9fc54192e7c8bf4a6cfd4c4f905a9378b4d675abf7767c49fbff7fede516f55a291023cbad78de62eda3626e31c1ea8cc59a675bacdd28c03aab810681ecb2e56304c238fe24a1c77c9e6e3418d037a775f6e92a70698fc8
+Entropy.3 = 69b215896f256a733071f69845c6cdf74b9691e7763441de0e773a31e66443fe
+Nonce.3 = 066baca0590baa636f46ef08f5a692a3
+Output.3 = 01c9fe0a33ed105dca11803a2383c6d40b47a5eeaae652aca48a13e45ebada151ca8d67ddfa80695072eb6008265976e7a0ddb1433067d9f713f0a227c8790542a8fe78d7b22473e54bd4a8b5616db0201f1e9038beb957bfdad898b1c23e8af9c2b7fc2c9f96c6e6ffdd2dbf573cd78a6c340ec42d8be6025f86e873c596631bc3477848566ffbdcbd68b9e76cf38d96f4f01d8afd3962fde3da68a030daeb0034ee83fb292c1c869d9238af670a5dc4d6788205325068cf1656b4375687ab032a362deb0f80e6aa6ccfdefe4f98f77709bc8d6b6df8324a768dcba833f89538dfab26ed2e4ee631207000658343e45655ef5e75825c7810079c8092f905193
+Entropy.4 = 6b1e50fbfab2832c10f5d700df82a557c65e02c76c93989f55440ef504323926
+Nonce.4 = 2237e475dad8bf250e39186b8ea84c81
+Output.4 = 1ceedd14783c8de93a55f78d671ab637df79aad2aa6c27a25e47adeeb972b70c03695bf3868e06651a58fd1bc9b1edd48d8a9f235d24dd6a75f62e70b27e8bf3e6e3f50bb86bff965c5e8825054ea8bc99b92f78daefbaff65ce19b509e502ae7e1c7d64780e9daa88e8080ead7d99da186c5862882b696159b9ebd3119cbd6d5f59d0ba28123c86bf9400a32f3328b11c1907d818c9d50686e3431b2787f0c1e5e193c2353f9ffaea36bec23a0b81e79d9421bcc7433218d4ace4fdf77afe3653557698bb1ec92cd92fd6e3e819b907b1d3b17108a119522d85b62cb78e52523ff53a8917f4794f2b588f20ef0e6d270900a67db64c06d074761220b9bae365
+Entropy.5 = 569558ac4d144b413ccfd7190456fbb9774bfe794f87c8287fb1d9793c10f4e0
+Nonce.5 = 3dac59142e1618546d5daf95d3fea0fa
+Output.5 = cb4a6120b3f246e8823342bb72b0e1fa96870c444046e9118626aae0e127f79a69895508a0e40b2adfe07ed0f92c2cf72787886298350983ba75577bc7c3ae4f30d66bb1c5da0a544d0e49edc45f2b7d89179e55c12708055340f1588f2b10ba3151e4bfe88cabbe5076a76b6c747064f770343ed9db035aa3ea659777cefd8c14f19711f2516b5d4ac4228e060f256c1824f795e194f9f19d828cff81c60368247bbbc343c72eefe28dc01d9cf15d81f47c0691d5ed67a4c499aee5ae7b09072bde7699f4eaacd8c4c2d1f6919021304027b1a513bb65f669b9451c234011184513b2703dc090461419c20c7fcd58ebc82de98335e0eb504008c0d30e8d7b0e
+Entropy.6 = 27fce7d15031d5dd6880083d1ec5c2a3e8625b8c4c0dc0d7d438266ec7de5689
+Nonce.6 = c59e3bcdc1f6e31367e7b8b958eaa7d4
+Output.6 = 6da842ae1a45995da23d6e3b5ba2c0ec56b21624a2fdac824f3fb3b04fe416054796e2f06977838cc4f68d74d94410a1383d58c8a044429ee74e82fb4ece69a05e805e03965a757d58b66a9f4d224f41c35758a245d68889d60fe7651442b546bd34f8aa01dda206bb1b244d20243cf1e012b786b1992e0366145598ff19eb05a7e6386af08f41a77371bffa59bb69d5207c122b8ab6ed9efcc35e22bcaf7fa20725b642cc5384f261b6a853f3171f9782c50783ccf3d29bc699c565b8c380446bdd9b3591a60cfe455979de800af20b7b9b2014dc7d010a890c95c8bf41ae4144e5a764e0b067000e3a7ea325e387ff8915c13dc48874ab3399669c6580e42c
+Entropy.7 = 0ca6f97189498ec6ac12e2e5cd37a07822b4477871483af627b4c765da5161d0
+Nonce.7 = f279ca8bb4ea4c7136f0ad8fca7b7d86
+Output.7 = cfa3865020689702cb30dde9f5901000146b9b3afa92b34a88ef926071c5f868c7e5006ae33dc38ed990006f3d7ff1b3d412a325527effd32f416e19394d435043d3bee05166f22b8505fdefb1f28053424be60457833f988cb426f4a8279742f16d2163a898ef6a08c85d5fc77a8b127efbb118d0b1a3c288c29e8e0a299c9e13d3935ab6ed39a8a2dc222ae897da1e34ab65a158f7bf01ec8654e39761fa3809a16aa6078e42bcf57562d213218849c27a929743e7b2c40f6fc72b2d78a3f11f9a7c1831f02593f36e0437dd6fbff652f7f0d956eb9579b6d178f5b34ecd29825028c04810fbff369fb0b65cd23205ba939bf78dbc0310ba15e20ac7b22d24
+Entropy.8 = 2823011f32eabe40c1131b36c9f001cc28f7e86f15db184124c15e26b8d01914
+Nonce.8 = bd4af70749da0f3f64a915dfec31e50c
+Output.8 = a0198acbe891a7acbda52fbe35181c97d58d39844fb2975c96eb0dffd606092e691048ba65295bf2db16aac82b094a93667fd18c23ad5c0b564120237d3c56da6eba0d39cc4d8e023ef15e7ead8e241cbb8d0b2560bd444b84ab3c85c1eebce0ec40fccf680f2c4d440214125a2735d889da956dc3a895c7a69f07854f962f354e67524ed18863ed71d3e77816bf460b171fbd81b0a7c364c0f6ee18d32d7543a13cf5a7d7b992b8bca523e0de92fab578f980cac24d779f806565467702f75021652287a96adcc9f420e2acb22528ca77013501d9c7e5764f625f7edaa52a26b0ff184f343bf24477cc54c893c1434f7bf38d18efcf255c397b9a70fa0b64df
+Entropy.9 = 15dbcb3de71426dc0aea3a0851e7390af9e3bac12e1db58dd931d4ed2d9682e2
+Nonce.9 = d87baa587e87d5b0c32d734dff92d9bd
+Output.9 = ec3246fca162a62512bc4ad2239270b2b0a98b25f6a7bf0aeaf80099c4c2da07e33fc1d58d41d85df68113c0d0decaa92a3838de2d99f807d615b2e969669422d9d52821315baccaf3a3630b2a7bf7f2c75a59948974759f6bb53d21ae9b981ee54261168d707eb45c0e0f7332ba702f1be30873a96f66f164ad4e78ba0ba3e5fbef4caf4b1d807e7233380f34a6d48013763bbbb5c6c16a83366dbe061b480ed45c8901804b117de73fc892c819ecc42951b130465e30f4c54f0112ad62f7b1193ec0c7725ab6489d343178b212e74ec147d3fd520a9ad9db384073b22a6a478f64b37a2e76cebea0e246660cf80536145719eff348558a72e84eb50245cc15
+Entropy.10 = 6a36ca9ec24741c1389ad722a350c61008ce53432c24365cb6a60de26fff37a4
+Nonce.10 = 50a4c1c05fc3893876e627976e1ea388
+Output.10 = c54305f7794a66781bbafcfcd1a5af259fa3a8b4d47c4e3ececcbbf80f885fb50dc93dcc507fa9109c238bc724289f5e3c765ffb4289ed0fd9bf7ae050c0154d11413997e61789c8bb806c61f4002a63bb2ca21bac9ca65abe92d0594da90c4e122b6ca9d0d4db29265783defa05ff40ff1e6c5089e8c1133d85d8de6f5cc20699659ba4d93e076086bcddb51bab709004e0391bb932440c951ee064de58795c14eddae19dc7ec8e2f2d168e90da41ea4892c348983ea07ff9b961f4a09f6a9aae232ce69760a2d240546b19c0fad337c764a480c9b6150b3db83f9c2b65ed4221433554e5cdc6bb18982c11755717c10f4f1c7cb7aa9d2f388e04a052f41474
+Entropy.11 = f42f1d6f989cf2df671516b14a9a5d72a4825ae220e52b058cd32d09802d9dac
+Nonce.11 = 985aec205afa866c62d988545950f210
+Output.11 = 65b86867a230ae4abc0c4e4d8c6836a13c1b289145df5111dd75a2c863823e77fe68925696f51e9e9e3ecd8d81ef2717ba90a537f7f48d8c242e4494bda43857314893a53dfc887ea27a3f8fd809bc536e6bf484430ebe45ada15426b5d2d994549cd800280654b29ee75730b8d533c081fc63a97b1751f50a33914ed84f4037f3e9b41c2a6c7b6e438b89b08e55fbd1040d289c2068d9f7529fe459ae9667201e2c421abdfaeb52cf0f242040b6cc5c8ffb5d42f65c71d842c6c7549a4334afba7ddbb36cb98f7c02a985a54ed270b730949db4bfba95034caf778cc9e6ffc90dd9d151e12d62cb400a44e2d5d2cbeaa33814d61a2875396ab2d62f27caa380
+Entropy.12 = 52c8842778efd89fe5b79bbc171d48f3406c5d8ae9021e6ac2baeb843a665fa1
+Nonce.12 = ae7456e2aab8f0e2a0cf0fcfa93f2773
+Output.12 = 6a8df38c7526e114d111b1fea1306a6cc3553817a8250e2aa6104a83d2dcbc8dc93022b5e8c8f975df44aa07b1cee181d7f13164d1fe7e1ac7dfb1958edba6602d5bbcafb7230f27ba2c9ab4ebb8e27db12799432ce3b2556bd8ede157a669e05a3c892098d428b077cf6dd11bebba9cf344b50bb27c301eecb26dcf38c3d8d63f838401324c9b3eae291ae9a3260a417323f03c75669853acf9c36b646cc2ce6258c6504322fb5b799865a94cc686c82cb66f2dacb7bef9b9223c63c3f2633ea5d77015ceec773bc1ff81329e182a51a49c0a28cbb778588fb4548f1bb118fff6ec374fd90249cf2e01a0706e7251d23fa2d282848b533f2a0bdf0d99ee8220
+Entropy.13 = be378ace07f021f5a253200be49caafa203ea2fb5e2be0e08a10d1ae70c213b2
+Nonce.13 = 651416a658d6ca7140322a9b79e66b45
+Output.13 = 307212bb8be68ebe8bde498bd83356c4fb38452a83532e2021f3f1d158c9e9eb8b1594c03d09f313f56037fb9e5f44707a570ea56b55e34c60eb4ba4e2c40bff8f79883e4657be3fdfd587ecc64303f89866896dc9fe6b28025dcb47ef6d49ac368f069ba4d274f93ff58bb7cf90f1e3b97f03ffbd727414e22dd26dc96aaac40b61fad8247ed21554c02f4ef8ad32518c5548300540c7eaabf194c46a58a08f4a637b77521d0d4829cdd3f878e7b44287dfefbaf027374c8c7d5ff35e2a455ba528572b993151d6b5a2cd1d87579182d348e497c9796a7375be6791d6b95c3d5fa6b75469f62dcae70a2c736cd5e44a3d44797975f39614873e3f3ab1b2ebdb
+Entropy.14 = 60da58990a377a615436ef43b1199f88c7a4629653dde2350a4c5115c42e52f6
+Nonce.14 = 592033d0de138ae7082c03553e3bfdf9
+Output.14 = 7a770dbe8e1d3af1dae5b93acd9e6f1748a4a6a88229a875d23b37665e0cc96d888dfdc428a32cab378a9ebe22409709cd9d11f0c751c08d98eeac13b6f76f0f51ccea254cae23177c3aa207c59b5ce221b93442d037256d553275a6c4b5c83c1fe555a630e37d8277e02c050c19e145a71ec98b96ae3ae44c9ff87c4501c1ff7fd5231510ac9df623b3fb178e147f07d1fe02b48e877cba89a822c91b5af56b71d60116c49f80d87656144854909a7d718b5aa8f071f18357c2c9f9b6c0fac3195040f26b86aa936fd35ff37287aa140cd01ca6c5e577d815790d6fcb1a57569d23e801e2eb2b669ae7cf17d87f9ee66e0b515bcab09087e111da199b6a15b2
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 5f53208e154142870bd3b5e7699791012f159c6fa39dcdfd616076cd077b8c99
+Nonce.0 = b3dbe0e037582ab6a069c476403ff299
+AdditionalInputA.0 = 815e324f0a2a9049a706800f8f324e878b25acc3d41dad599b2c99b463eaec2d
+AdditionalInputB.0 = 5e932309c4a6d905fe2d9a1f45f999601e7d7e33f2716284437df58cabb99a60
+Output.0 = 5dd8c4bcab8dfe2c317c294b0141ef8902b0ea34d724ba331308c223fe8a5f2c4a35b93e0195c95791db2ac50d8cb967fb3de881e9dc7e39f04c361a11c0709daf35b1190141865f1a5790ecc91e0440020089e0393f0dbbd7a0869557edc8d9c040b9bd675ee8ee383828de15828b5eb630df9974e7468f7f762eafb66649a8e2275662c9804fc427089b519edb4febab2180ec6f3ff67c0315f28c4110f64c2adcd220cbeefcd8d2b09421ee8afdf414be79dd127e22e7c3c61a4f1320d70f1824f5e43535e88603d308f36ef7fe3a407eda266b848df00ca98e4c47b5c0b2e3564785acf4de9d96d7c24e7617eb97b80e5471425d7742fb5d6b13e5bf505a
+Entropy.1 = bb818f4f8a274a389f126c58c15f061d62c411eaa899cafdb7935b8d00e566cb
+Nonce.1 = 3390166bf88800dc613ea80b2ccdf4c2
+AdditionalInputA.1 = e08809f2532e27334c401fb857602bf0456dc0604c6c41fabfefca66ec0ecbb6
+AdditionalInputB.1 = 966fb68f44729db7b190e26bc5a5579fc1e4235d85cdf2f358756721b92ca11a
+Output.1 = ae5c1f18ef751caf3d68027560756cfd2735a32965c5e2d4158f5be3f3fb5ac20d909838b2a70d7f296ae131c1d2537f38a98cdf8dadc9408734cbd91b297e7580b34cf45b0e53fd9bc82f82843e4c2c3357cd9fa8f4aef427c80f9d9f56afe52bc0ab4e22ef8cb59947eb36234d8c10d9f79c38949d2be1f84493fdf1d77de2e92ab574562dfb880359ba0a810aa3f8120880cc13ba01e1f83d3135ed34ff0dbcf784be88e9cc9411e9f20442fc648dcc95375e18d8fa72e0a1e2db5a2671ea95d892ee1c005316244c582cc6754cad181c32d9898c859fc84fc74d259314561a4f15541b06f05fd38a4c8d239e79eb125a0c28b30a0f40516afbb3fb2ad1a3
+Entropy.2 = dea954fb58c623d5a8d3a3bd716ae4d76b03d5f330379e4f67bb890effa29c30
+Nonce.2 = e90a327c9ba71a8c36169d8f9c94281b
+AdditionalInputA.2 = 40344d2e6579f10b751c0844db402b3ff324cd526459b1f40a176a7ad6d4d2b9
+AdditionalInputB.2 = 26a9b743844cba645522a13f60ffd612a7614db918262b8e2a93f4258089aa49
+Output.2 = 88f2f7499df92259ad5f83d06c9af216887a469788fde0061bf4a52c98f1ee8863d0ed4321830a29181b3cfbaa4375f458dcfcb9f9477c0ad323601ad253c68904ae726277fda9f5f0a9ac4b012729d178f68fa122b8d60226b2aea534b175c7c46071ac1698e3f3c0edb61fb69267a174f7a60f2d7320b1251bfab3bf392e2a5517f0c3befa15b89ea27f045e1eadc79235adac3c82c7e6c8f03c24fa339c19e12d9c31c61881609d9274dc6aed93ff42fcc205cf0490468ca4acf51dfa07560b276c3a58f30d9109c6c374848ef72e0254b52ee4fa2ea570b6b465562989ad4f401e4191bc965bc6a6586243f77bdd3e0401ad8da0ef10233c026a462df1d4
+Entropy.3 = 820908ee00440802209b601f7ccaa1fb7aa7fc966204d5ff8fad79e2b9239057
+Nonce.3 = d6c900d2d66902aa4d644622ea0c388d
+AdditionalInputA.3 = 619ada6cd00fe08da88366105240ca2ef102fd81895bb947e1ce44b3fbfb1d62
+AdditionalInputB.3 = 383bb8f61fe8db188e9d1301997c82bae5939016737b213417ff0286bbcb2adc
+Output.3 = f7def9caca640ea612835f9b3ba79a1b59b46ffd5a158b387aa26fb4d25c2d7d97d6710bff02185cfcdf66f3fe5f105800b6a3c7004e1e28e9e7b7e1a032042229faae9039466b0f03da7494529e4ac47be1ff726c132712b7c81ed8aa3ba9d22a4b5ddbe5559660306a0dbddc50bf6c0ec6c0b1b7374a2c600268d56d3a555bd4a7f361222aa46b9f955370566c25a106cdb304f2c27686f36e43599e3b99537eee63feb307d1d289c548bf0affa411b6f9e2e208c269dd0680404498195fbf3d0ca0b52edd9db35ab08973f13011b19c5f5e1447f801135def683dc08da9b6bd470f332d9ad6bacc54cecf423f344143eeb8da4735c65e490de4b50f261043
+Entropy.4 = 51cd23e202aff376a80967e00ada6881ddc313f2b4d49c2a20baab822d00d68b
+Nonce.4 = 16b14ea136c036895bc99cde1b51cbe9
+AdditionalInputA.4 = 88890ae176d1700a9d02ad8132fcbe9c53253198b0480a7b9ef88a4117b35a35
+AdditionalInputB.4 = eeefdfe8db8974d99903ca7d73b6bbdb0c2144db32f14881679bd1910abfec9b
+Output.4 = 770cc0dd8ccb46c9a6ccde3e0fb6ef79ae32876f925eda7748e11143f26218283e1ef6e3ecfb3606460e930bc058127ca2ceced930c98f6a5c352eff9f162d1a711b9498f67904daefb32b4f3d904c0e5675bf01f4f0e4622e9e3e3a963ed9bf8ee5dfedef7a6197d25ce5504a2c95146b040beef60226731cf9560fc81ebf7571cddd6af11b28c9addd5388e59b70301eb7d06a7fb6eaa94df67c9c12f2c61d317fa5588d1902607a0b89498d6ecd6357adb779ff188e105b1e4c73b127af8882b70df611d28cb426144b130e8f1ff86c9b5507848393dc8a5019b8ef5e8049d5e6999017a1d72f933aef9b839b3f1085bb1f73fb54efcd1c59aeffd2a52f13
+Entropy.5 = d5d6de67a46ef58206c34edb08ff608a67a3742a9bdd482d16a056fcca001003
+Nonce.5 = b011b34571594bc09bf9079c48c9e0ff
+AdditionalInputA.5 = f50640c96a263bd03c79a00cd5468cfe14a3b634615336ecc99639922ff632d4
+AdditionalInputB.5 = 6ad766d17667c50de86883b1776c66881561b6f40b1caeec3ab37de9104af2ac
+Output.5 = 899c67ed7545b4ac8b00194d139e1f11526f0c979df0ffcd3bcc0ef9c4b6104ad634b4ef51173c6d1a5dfb974e8a348dc7469bd6a82f176b0397598d4c36e9483426265c731843697fa3eab07d74645cfea34a704e36f14a5930bcd85320689a61a1315776153bb2da8e564a72f35152dade1db717ac4b2b9e5f02aaf134a195a7a53696ae140d600e16556cb17bb0cb8547c978c3aa659bcd21f83596968143b52d6bbc71ae2a14298e05451bf603e0ecbec8df6d732ccbba1aaaa4208bb34b7c74ffc94a3a4e8972d3e9326d8b7764e20a2f7075eddc93fcc3e254e5f7550115429cc41a5b11ddb194e81c34fbe382d87053752eacf1359a4fefb3a5b61743
+Entropy.6 = f7c80f935ddbace79a6147809118051e8141423645a2e1eebf57a553b2ac28a9
+Nonce.6 = 78db18cf3e634c7732b4ffa2c192bd29
+AdditionalInputA.6 = 82ab9e0d20e003dd3dea69ef9ecc9abc3fe5ea082b64247b51f205eabfd4d6a3
+AdditionalInputB.6 = 8836a391fef74c69202479046b7580df4eb4cf303a8eb1114f8037f4c0bbf68f
+Output.6 = 13dbaa43f4816f53389767757096586cf38e995f077220db6fbad6e09886f808c6c36754d3799efe1b56e93ad0fc477a383fe7eba6fb23c8ca11c2a4aaeab85c2430b404dfc547103ec4666b23089d39936e9c8df701f9ba2879700b54dd15538a1d7950a74751ad6b064df8173db56a0e6649abdc4b32323f4ec4c1090242b62af08d20fbda2a80baacaecb038e74d88267d5da9a1a29efc2624fc07c6f05067cb6167d8e1dd6b683ddd29b2d752f2b94d689de199701dca3dd9e46bb3b5888719df46a2e85d2ef59a82ce6068f340800eaa5f86e757bc0d80edd9821255f1147b8d6fe44195d8954bcb0bcc21cc01111875b023d6b363a0f9622f2e64bb5ba
+Entropy.7 = d134f611e1567c375a31df7a78d82ab95141206f1683bb9ef68f3ccb1c4f761c
+Nonce.7 = 1af760c8b834873c3eaf9acca1ea5af4
+AdditionalInputA.7 = 2900cd4c73855dadeb86f3a30c2be038f3297fb4415cfdcd21e5be7c7bc56d7f
+AdditionalInputB.7 = a0e3f8ad05c6fb4886681307df507fec0e4536904dfbf3fdc0bc2e698dac6db3
+Output.7 = d84e7542049ce66bd1e2edbd80dd2e06a2e24b022f65e2990d1583247af3b8833f8ca82acf4c82edf76acb42e580f08b91292e77887835717554a2f3f20ce5b0015be903b4d12cde464647a4d82d8ceb6731e01b3e700f154a3e1bac8c0bc716d1edcc105408e301a712d3be7cbf126a01e8d93f485d5ca28e55658fd3967dffaa2451eeef46293d10613d9dae4438a44b4381a4ba8120dcf7363b89a3980b87e82b2e523070a5fe07692863f6a0df4ce54f4fb5bfdd33c31f7908a20ac03333b066c78406b549e386678cc72a31f5bbbf0c5d1f0b1a68377ed7494b8c179a61b4751a225afc3f9bfebcbbaed95817107c7d99a08b0ee437742926b1ba83e368
+Entropy.8 = 9a3e502d7da223add9f3c8fb3527f20f3dbb97a94c65bc05eb7ce54db88ed783
+Nonce.8 = 706802aab465532b69543cc639ddc05e
+AdditionalInputA.8 = 15f0e2ea6a98cd0cbba6318048ae88a7ea657d426f4a645b64efa61caff37942
+AdditionalInputB.8 = fb5e7247715f5ccaa096d9308cdeebbfdbcc97dcf4ddf1b297aa992685f194da
+Output.8 = db0f1565840badf175610755f3d1fe64f39a4d371e718207b2b95d10331b7d39307a9f7cd8fa4162749bfd78850a834918da20b4139dfe96ad96771f4b7433eba33c261a7385e56c68bdd8dd1e6554972c2d9ff03ab1ac558d1ef755bf53ac35d19fe2214a1696f520e66a2d9b367cf8ad0366d7985b1263e5e96d4de261c95b7563aa321b8bc33725b64fb561ca1e80a1fe0730b4b1aad4253f473608fab97f97af2cb189c662693f3d61aa1e8c83b11462da8486e14a1984c759f1c1359d1211f6a83dd34014fb7652b91f5e6991504cea02d5d5cbd3ae925c466d64881e14e3ddc6f04dc87b4eee3bc12c8d47e106c90e9b8d21d538f25dabf69fb8d54872
+Entropy.9 = 8dbe6ceda79f9ec5968419ee111be620c583570fa490a49a071405ed4448b202
+Nonce.9 = f05875f10d53da7f51678265d1984a0d
+AdditionalInputA.9 = 5bb5d934e6e1b9d39e45e1fe7feca8ddb04eca581b91b005327cd785fec7147d
+AdditionalInputB.9 = d7a3fbd3124c4a4e2ee1625f376d46c3ca67da15e07c44bf9f3f43a1713cd9c2
+Output.9 = dc028d494668d26fb1543c61eef669548f4b3801d94542eef20fca7517a7ad157eb4eda652953bfcee238865a6f467eaeb06202a5a023d4b76e023e796c0a9d6f178b9692e3a4d39b251eeba404c541f4cab9b1a5de191312ff4f849cbfb77f475a92dfb66872e34d8fcbe44dd8ee021b5702964fdf1cd66e11af019086544504e67cc41f5e9b122caa64ab754d4f7474dbafa494bbef2f4a986113d8ac68ae0eb1a28fc315b47c0513184240c226a8d23405313e9304e5309618677872a9528b470a98f4ad836311f16c96906779dca6a7c30632b4308115ebd68b3b914882de9bcd9c27bb8052e22aff9e64f273505e81b9d62288c8bbf348e10667fec1d93
+Entropy.10 = f7f6ad0895eaad1ddd1cba9ae3ea7e72375113373bba8ddce7a3f4265da162fe
+Nonce.10 = 5ea3ee6c43057ae0abb63e20114292d3
+AdditionalInputA.10 = 10e9e13d7c5eeed771b055c7800a7cbf5adb31a375eb149eb0f5a0fb6e6a2a3a
+AdditionalInputB.10 = f57d802f0a785cf091bc049c8d89218ffb0496e7a3454565042a4faa7565493b
+Output.10 = 62c405597f42a01697505e7451eab48c9a0003d436e335aafa78c852f9ba4cfd0725d2d89a5800fd2a7e27ef6a684b784d49cfb45253ff821b48a89dfb18e22df31bacf669a1c1468b95eb5e98ce5dda8bd7ec870bc945b5ba6a00a41b9c33f3eaf9aba275db7de27cd5a378e240a203511fe8782bd29dd9b6c570a48497f9a304f021bda8c72573a4c17cb88fb9cc6c116d1040849d44bd574fef14eb4bc59777526aac55d8abffdae8f57c66d6ce994b344222c0f08d9406add82035d5d9415c0bc7087a07c4a7e2ce26949dfa8f50a974ac6ca9a75ac346b902220a6096e87011de6ca322651e45a065c041d86935c22697001dde6eb32a520e593ea997f8
+Entropy.11 = 57bc52e811ee4b385592bf84c17facf8ff317af891d9aea1c17d0cdea612879d
+Nonce.11 = fd6f5af68a70cf478ee8fd3f304a6e8b
+AdditionalInputA.11 = 2f67f07bb95aff6be49b5a4e3f8980423b0ccefa8829ae3fc9ec71e57989e95f
+AdditionalInputB.11 = ebffe7b78896b7370b6296fef497e157c078386c26802c5dff1213363456bec1
+Output.11 = 12135b33f80f80619006e163b58fbce3eff54d661d009c587cd7ce955232af7df372b705ef2944815a0ff042988d146bfdbd164b4c7980f181216fb0a314187acf1d0d8909a68ce8ede9866e660f419d926cbd867ea355fcb494dd54b864fc134441b50bcba88f6acd8af11595038fa3ec74797c0e2aea3309312cba16c0ba9ea64990a74290b324d2f8fb906a4a980f8ded2c7e55cd285870bc4944b6e9aa6ed44705d7123971dbcd093e5340ae96ba5d3b32a6a7502cb5c377b7012807dcc61bf66fd3bc714944cd7c1bc90a749c6abbea31b2b2ca81ca3c72f39ac17b249a63c5a44ed0a67d4aa5a9b130dc6f1911dbd37ff59414796c4acc80cfd2a9d9dc
+Entropy.12 = 74ff892c65ad587d924d3bc94b39d6b67f9e0497a4e5c90bb5354ce288f7cc54
+Nonce.12 = 793256703d13afa4042e306cf82d2979
+AdditionalInputA.12 = e285d66fdba2d8e54e7b8b82f9d917a4c44a92168e006c808d68fe3bcc120be3
+AdditionalInputB.12 = 8172748d6351534fe7fb89996841768e56de1235a0bc7166d728e12d6b302434
+Output.12 = ee1cd769f5eb1b9dc8d757f250d22d714b0f8b03ae3532699b45d22baad8d4a0847d93787dad403dad8236a15b13629cf488dccefcbbf27a5d542daca2c9fa78f5aff61041f70570b245085e83ca5aa2fafe531d352eb59b3e8c29754c3f9b3251b78bccf8e4e303cd13894d0045fddedfcf2caf6266aede9797181436b507d6b0f3b64a4dd6af93ecfa30f6e48c917e3bbb27322520af2ec8fa6ed0e9b76b8b7fb96ac80d836f4801a1f3ca128a276f49d1483afce0cfb1dff280fb995b7d5cd5d52a437d9476fd4de49f282f96a15427ad9f490c08eb17fd5d9d2c66a0e30625de1ea267c811f450a06d2fb118492b059b7efcd0efa66486976592d41af99b
+Entropy.13 = 1bd2f883cd62ca34f206b5bd3b6548a0d2e19d6aa02e41066bcd8d62ac693735
+Nonce.13 = 300f3444d7a7dc04b1e602f79f57795f
+AdditionalInputA.13 = a3add73700d673c7f68370de1301ec6cf5c74fc67318e41ca91540168a1a0d6e
+AdditionalInputB.13 = b71db2e2cf972454c681e5620512c7537424798f4fae53e5c843026449ab09d0
+Output.13 = 669181e9fb4ecc48d55bb1a1ab958cf1512908265a14a899e286abbc0579bd96f97db2f1777b03bbf0fe1d5bbfd223ae8ec9e078abeaa2a0809971b67ace4351e5eaac19436592b57f561044fdfcd801f71fae90f6ee1dc153f538b731b94034b4466b3cc5730ab6d2a8a8327bdf065b7e1f0e2a4ada21c61bfc06ebc6b93e9ebd694869fa293391b1251ee7225dc4cd8640ff45d3f8f95fcc3bf2b06669c47d14e8f2c3b831b93df6bcfa91cf65dbd2fefb3a95f3953c26cd349c49bb339a64623c366d43da3796d2bff32bcb203de3f3e430c7cf0a736b50b15c39123a995b4df0e6cb4649590e80bc3aefc14ef89bbda00720baf50c6ada1bac658004dd27
+Entropy.14 = eb2e114b4da9bd296a0070862a38a5149ef575c828b68738782e6161ef35a792
+Nonce.14 = 4838a73c4ba16c49d8410d9226b54bb1
+AdditionalInputA.14 = 967911f9412d40f2c62e43f48ff965bb1579a2ace388c781e125fe70f4adbee0
+AdditionalInputB.14 = 052c401de1053b8dea309196bb8e326d4b643371976d1ff6be0a6ea4ad27e5e9
+Output.14 = f7e8cdc3f8d2796414b9c83486d746cb8b1675b37d0d7546392c59622c693045dbcb10e9343524a6e7a9cc757717af22ddb8127bcdfb29cb8da409bd69d42aed9708cb2f904dff562a695be004ab25d31b8485bdd677c96d156ce8037726519d1949cc15e91acfd1c7c0bd58058b72c7d340b2f0bb12115ef44af6d20ce5f429d681b614e06bcddbf8ba00b40732b4dd425d1a87b663afce0e9a87b942a543b055f00b2428de12464a1309fccd0a15d512691e3858666ea4dc6084283deb075877c0162dbaf8318c9cda01ca611d72fac0b386a753ef35f438757cdf732a61a1f6123d1de3f61eb072d022f56c679a86f7a05bd6fa420ba39ed2973d4007b9cc
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = f85649f8a8c01f8a2925f7e93e356be0fbc75206d1ce2f7e04a14257c3338a48
+Nonce.0 = 01a8843b7a3dc0b1cab5f7c8b001598d
+PersonalisationString.0 = 91022d072824cb580ac07555c90a31373f2dfc272de60d3bdbc0612e175874ab
+Output.0 = 9f40affda9c797363a7b058d7f5b848f0ba366808e7a87ec94894091ca0818dc387a8ab249af3268a9b0c95f7a781d3c7ba613460a2a5f8ee4bf9ed237afaef69f046e163799794252d2c9708ea337b8bcc674c5016172c50d6de9d941f496cbde4a4e7abcdfd42a989119224ea7f3c4727179f42bbb54466f530e4394cf18c15b548ca610511800b39da69297a46ed1b237722c6d50248245f7e90f343617aca44b6245c99a714f719e324c2fd4b95e84b3f7d3212986dd7f51f60e38d1a077398f5af31adae8647bc920e6a0c865a297bffc88b407a24e2d2aead0e711fcf96b83bbede5bb35a5f9b0dc5e2376a693afa9070a4b1aa86dec23e6e597a74237
+Entropy.1 = 58b81001b76e248d9a4eab5e7371a97dd0992bd4ed6de18084b2321b8c292b30
+Nonce.1 = d4e9df171d09a7b93949907ca65fd5b0
+PersonalisationString.1 = a36d996ecf48058ac850d66e56d812e8c58ec0d89a30dcf30475d3830c4a33c4
+Output.1 = 22d8e1f50c301208c5f198f29cf9f97704f2df46f662bfd7bd2883c22b49ab5d7bed1a2b6cf0c55a0aa0b695c52695b57919dbbe8381fc56e72553158e10ab59d4e682dfc3a07199876c266dcbe07735382d8ec079ab4ef5e622a2329092cde45c53f71aebe43b34990f55ad037eb33a87abbcd3ada3112ec43b9bb20b61bac549733222313de2bd91d532f1c17bc3de3fa34f7d3aebb2b59d6c8b90ce211e184fbe54ac0cb97d7a03e057a6bf69c4deb4f11cab49bcef323e9ca2eca1f4dec50a02ae1deea1d56f037d53da03da870dde13ac7a084d1e2aa4f095b3cbb1276a4f5815cde03a1ead7d5ff87fe7453cc603c0a1d1f6af1eaedec35835a6ce0c9b
+Entropy.2 = e2743de1bead33b91f0fa01a64e2dc2175749260d4475dc1c4652c6192ff65fb
+Nonce.2 = 952e8d0d03b09130e4df1de0f8de4484
+PersonalisationString.2 = b187c33f16414734eb500c3c3230d3600c4b4251c2c44085b7a585c86dc713a3
+Output.2 = 7da54694edc364dcaf51bb239b82b3a8956264bd1279920b34f6a7a33395900b49180e38f0e97a2b1c5b7fb11bb1e4672275cae66a007ce88d0decfca929766c2c07e019eb94ed00094a5e72a82ddb00badada39d4eee8900dba0e71ba29750641908dc4b4eec95ecc3b49cc9df72ef5ecfbd1fa8c9eda509301222f9267abb4893470a75dfa86f793db4fea9bfc1de6c637c2a29d6c60272a521c10304bcbf595cfa632798701da4d50eb776d4dbe01865a8471c58e2cdbed14f083d6b4ed3cbafe1b2ccafe82e73151a8299c3a04d36eb713dd47c9f4d306c0e503026d7d6ab6c4789078c8c95ff5abe002b4bb86a369b91b4ef23c6afc0559a2cba4ff53ea
+Entropy.3 = aa1cfe4c9f03a9990c2dd55c0775ec36f3daf3d64873ef843692b5887b7d7a4c
+Nonce.3 = 70484796fff90a01cfc2168d1d0f5ed9
+PersonalisationString.3 = 21b468ff6f1e92ca410177941ec0bea74990555071cb7d7fc0844fb24cefd511
+Output.3 = 72ca74671d10f6aa0607c3abf4e86f022af34cd8c32cbc274eff9bd38bcd4b79c64b09e68f44a3b1c6592b7f458f743f99a3971becf6acd974792dd5812d473891766460b028f3724036496188bfd2fae5d3bf734d2503316db5c9b408496e9d99712dec355865c240d3209c1793fcc815df057ffe555d2bbf47e7370031893aefec6ef0e71d137e16c416dbe52df3b98f280f5e6b29636d7d9bb0999139fb5e46bfec53bb22c8fd68d2a15df7d4e1a2c813ae363bf3055e6def008ae16343ded598a0c08548801189ced03e6f81b31286dd8e3eab82d648b6a9fe5aa6fa1f951789cf4f5815e10188d2d9755e04f283373ce7da806cd92935aea243d6a566f9
+Entropy.4 = 2625400a6130e77fa20f0b7c58cc0f9d0f22ef5ea54e5cfa6e6e648933d62322
+Nonce.4 = dff0eb02fc7ce93e4be2e294a24509b4
+PersonalisationString.4 = cdb1072fd83114ef83323ccb03d702f68a550d7a0e8b153a95eb9f771a271861
+Output.4 = 4fa6071756afe972853072ba73e203773937f7d6e1dcd7982c37ef7566369e27add7889b32ed2e2c2669d00633c22d91fd98f2223789681fd3b1d93a16c2278b8e4007286dc1273e5abdce7845f87c066a59b0d8152f9c13230ce488f9cf00e7c3e1e0c3719e6087fa251e8bb4ddd3e778c6149a14db3217f172a8bfd656bfe6fe2c4960768adeca843f1f36671b722fcc62dde8b2e0c5765c6232ada6a4504b21f350786d0879408d8979e19a3aa16f0ec47df3d0836296fb88363d1fbc687bed75f14ccceafb185ce90c2b0f5cef3247f1573e822c19b1b9944204d42a6101326b127262b7023e89824a3f2d4fbc4c072ed3dbb7325e77eccc70cd82218f43
+Entropy.5 = 4943e0c725cba7ac3bba16d1de3444eb367129fa38d1bd6e0032ec1b3e0b767c
+Nonce.5 = 743775b879b22ba24d0b08ded6298ef0
+PersonalisationString.5 = 1d8d1abc5f597648889bc220040cfe3bd49ad771ebf7ff2ffc9a7bb8ce2cb285
+Output.5 = 1cd45a83f0236d70908291a0cb24e8af67268ba14492c0ee4f7f736e48a3da7c5bc80a0aafb54ab028907477463d7587a11c59cf2add25aa799fc39290c2284da916790985dd1d842421a24186aec5acad4ed5e511dab8c28f2a2a0b2449d1aaeb5265e5df2e708e761a42df5304dc92dd2c10028cbdabf5f21c1cf572cb0d55c194a273c166df5dce469ddaef537b3f5e72b6ec8c3f32e2a69d90a640ed3f219832117615c209251a467f7343df9a6fb891c6646f01f896d83319bec63cfb0e36d35d5b554f08a0635c3605d51f9e7cb8c32cf69cf3cbddb02f68c321ae08cd185de20256c9c78efd667a35a3c423e6a0d83213fe0acc1a11693b641037daec
+Entropy.6 = c90ef2a9a1cf4936689ec66acf771e3b0faaabbae4af866d4595d20823d04df7
+Nonce.6 = 624caf43c3fb18b0a9b9b7b56245ce60
+PersonalisationString.6 = ef05d14650114038c30f441f8484301d2442f6b9167f57f1f2c0a77b5c91212a
+Output.6 = f89763a96ebbc1c4b5d5730501dd5a5910a9b907b1939442562ed880bca94724f9392d31eced9bb670cf355d5113a78f6b6993a85954c8e52d450f14815e8d25f3c5af5e0791fc9f94220994d58b7e3decdaa01993428bb597f1129c7c9a0643c413d0696df191ab0b18691c77e79d5705ed144a3b54ccb3e025f4f71d62cbbab9aca0804b15325d335a35b8ad9d06435ca2b847fcf45a2bd0afc95583cc11dd66f63596c9a81ec1244a58aee352b59cd4173e1b5b51e88f1d64ed887dc7c23efbf7ef49e34bc1324e91d17403052741dcd7e1e5a866ce3e2e424096a4c67ad818220a36a4ef8379f7650a2e49a953fe488202f1a95fb55a929b0e3261f181b7
+Entropy.7 = fc9e6a14f9614e1430dfc99640633f2195e35532342ccede226e0896d0c07319
+Nonce.7 = a43c19082988a2a1609150d903106415
+PersonalisationString.7 = ec6f5aea1cff91b0b798b1247a2e79bd62173d8ccdb5daf9492b3958ad82c48f
+Output.7 = 852a9d864504846fda05677c567bd9fff95221e620b8473c5e51580697ae193d7bf1f3237fd094363bef04f9231d95b8531a837ad43c7ff18d165acb2502f9e645460e06e2da19bd10c2df17ef2a6c0791921d74f72f91db4f80484f4fe3eb0aedac4e6417cef76e75c68c041be290f955a6121499842549ea9251bf892107614a1ee94110ca401c096c5a88adc4b39bfa5f821fb980b6e6455ee75cfdb8cfb31756565c3c836cc8e96b537080facd6c4c38c5d15c405e904a9d708e92a626cec63a5f88e3fb2b597348a7798559d612fce9013e6cda53b8eef61d5c874ea030d377639f93f3c83b5f7f634da201ce392d9799102ba9ca4c6126dd9fb77b33e1
+Entropy.8 = a5e0b94b0efb6e1df2b691bdd3e15d68ba602e25a4e1fa7b17fe124f280b722b
+Nonce.8 = 3be26657fd44368efebe93c16b230e4f
+PersonalisationString.8 = 652fce43407146c069c6d20e557eb75bbb7c72c10afeaffbdb9ff4bb6b2d0558
+Output.8 = bc9379fca8507d562434c8d54d35dfece72c18197593480bfa7b63b262d79667d8184c9026682b4a42b73ee237ce5ff46d8cf58df4cd7f145ba4ae3964838a787f353f82c7ba02f9680b0b72bd37473dc98fea004ba5f3b87c193170f00aba61d16eca612efc101c9db916d9ad9f34c20595a4df87106b952b9d3d47f3ee346f150e8e4e21d1d3892008ed163c0cde88a6d8d6d6ee7aa2511e15d583e3f286462f9d3d13966f955898d0c0c7a369e886caf2c3df6d41238ba85086e47fa78028f3dc01545834dc73b25509ee6577a6e8f159c70407bb7b05ca9bfe2580e8ab864543fbe67c286230dfb3c792ad050e79ce16ca3fabf73387e85a68faa44ee95d
+Entropy.9 = 77f4fd085853b3b577b1b6e10190fe7f1aab5adbe80d8298b9c0c6d5bf695232
+Nonce.9 = d472daefa0831117e7b8f3f667c5508c
+PersonalisationString.9 = c52f79e56dda5affe2fc350e3b6aed9cf7de57f2005e1f2f003a90f1cb175974
+Output.9 = 2b37c3d8c45efa020eb3f84284a93c5207b25b71c002d941528ca0d98f7ac42a72f55f1ecd13ea74a296d3e231e453511a496a0dc577252cda49b4e48056ff71cb4e309495d459d6c9fa2e6502f3ef39a06ec4dafc9f14405f14c3015b6ad7bdc9c1077aca97dc7974996c925c66a98b15fe8aa355ce3426b1af68df85491d46da2be2dc58e166edc60216520f18939cecb381d3d4efe70d89f4e4be3c93f11f5be68729f48ad9e501b327146087bb161ce7deaca44622bdbcb50efe8e076fd2e9cc3902cbaefc3abedbb60cbf24ce332a00bf7ff8ec7a2cc81d6669b9957d15d68c03e1308550b7041ce77c95de5cded1382124896b2dea1254af1e93ed7be7
+Entropy.10 = 8b9e3283cc2316b6955171a2a3de5851a56ac2c3e6de14166fce6ce0d24421e4
+Nonce.10 = 8f2caa11450b9c6676d35cfc83e3a1aa
+PersonalisationString.10 = 55d98ce73f316177ca27dbaca3fa25111c19fac26fdc224adf71e46c33d9e076
+Output.10 = cac7b77c2664ab953a413557f03b73ba499a7ba627acd4bb81b1dd77198e17ffbab3393e83cf39a56353b387d312791f89df0cd9b4c3bb94eb43d8f34f95a4d2485609728f2fe4fbb4280c35c18a1bb5f5d4f7457eb4b79dd13ae5e3f39ea592028fc95f165cf7024813dbccb18651740146276293d8a45af3d7315978a610c4891134096701bb8cebd9a4bbe0685c06f12f8d98f825b84429ab7363a04043ae9aa5732274194db7bd6517029a92ce11d57710d2152fd877c563b9dbf773930a3e50326a84fd880b24bc142744b8a8b4d0661a008684bebe8d5dd682fab88b90247fea58ee911c6c8719dbc25bc95ec4440f50b34eeec9514264d05633a63862
+Entropy.11 = 63740fe4ea180a767ee3ae551a0ba9f87fb93e511830188be1da2f5a3256db07
+Nonce.11 = 2d7f7bbab9e17b0eed3d6fe126b49af7
+PersonalisationString.11 = dc61dc0b522a10dec7869d396deb1ef849bfa93604299519a520516d0e673098
+Output.11 = 85eeeb0897db47806534ca3cc1b700625e364196dd3dc4fb771bbec51b7e5aac09164d0cd6cd6f67bfe780b656d162cb8a9d9b5a9ddac9a3a38bd1fc23cfa41a17a4271239bbfd604845866f4b515fb0e9df75152d38251f5f50f6b4d99835eae72a518eb83c2e72501a3af9b4cdbd374134f6fbe6401cf592b444be6629af1bb1378b09038a01f459bf95daec141ca7639247776e44cf0ec36c8e494f91f4cf3bc0da212437279992f0986b8f5d592c8f64c5baf2e97ce04983af1639b90ac350a84a9bafd4e659d554dd29e5bd128468675e2c264aecc332a373655704e005144ec1d8efd8e1f5c915b78c2f8ce413242d788927aa8b3f66574750fac7fafa
+Entropy.12 = 5be0278fdd81b7a4a0eebc3528bbe5982ba4084415152dee27649c6bae0a6b0b
+Nonce.12 = afac0cd0520ad32657e543c27bb01d73
+PersonalisationString.12 = 265d72a4f0a1f93c91f72c755e9386626f1f0afb86e0bc341dbdc67859c176cb
+Output.12 = c056c7acec0c2fc67e8a66cfe62e26d63daf7dcc5bf1300f6ee44c818a35fd99ae13d16be2ed0b96ee98aead005d1b0c8ce10bd72a02045608129c12c02e6c0828717a60717bbd2238b88ce40c1255f7d41bc42f44276a140aa4f917ed22896480d81887b79f7e9bf066d28302816cd4c8493917de189caca99276b239f17fd040f98951ee2323601435f008a377fbc71dacbd1eabf80a55b5398a141201dd9ab2b8376ff39bc5ec15e21a260ec2445910dd2413b69dbb77883bb0b538afe8fed0e10ca5f195ee5365289b928b0d6c55f375b32f4e056ec7e0c3457ed9fd9ea8d8ec623b172b2ba5dc178e3f63c29765a5d793ff774030c41691791760cf3b7d
+Entropy.13 = a0bc0cd27d6d11f9fdbc9191f0ca551273742c3d83e0b10439326ae6458fc3d4
+Nonce.13 = 08e08a673d0f1678b1564e7c6f1695d2
+PersonalisationString.13 = dc5c4cdf1531fcf69c55bece5c291a96ce9330a86737770fd5452c1e77d2a5aa
+Output.13 = e8d1173494b8f4f3066361ed8f16d75fecb9300df59ca8b1357db17f20e669166bfedc14f19aa7d492a92311ec01212b9bfb7cfe7ccb4834d22c0a14d8366b4adab29f2eed561ee261ed617fc3bc031c364e348b46579b2f4c9c2266e238168d9c20c8b353de83c2152e7865625661f7fe4f6c722fb6471127ca7b03af48cc107a1341cf9a40c2279a49cbcf6b4da179173dde4f217461aa118bf5a8a57f5ee4775a79995bd20d1895b71a18d8a373a29e53e286efe7e0db356e343816a114099bd1c621e14b2a44aec76ad84b572c6922c3bdbb4a606f09488061a8ab85c9e2032769f2ef444b5505b1a5c881350214faa716b7b0991e60b6d1076f16a2edfd
+Entropy.14 = 2fa23531e11329997329d273d454ef186bffe879fdf95c8812533e4b8027df87
+Nonce.14 = 0a6bef6b736129740978e31c3fa279e8
+PersonalisationString.14 = a5ca2491479bda16341b2c14339a5307fc2e2f5df4fa625e0ea351a95a14f588
+Output.14 = df587647f8d440a6c8034e757cd47f28d0e58f8aad9a047cdc8a70a8b1cd0d8185240d47bc5d2f4657205ed218ec38307e68efad94714630cd490b939719a4a07ab994793112c021969a8c69872903315c74b00b677648673e5883b5f46e075550092914cfeab05454226ee3d2154698f368bfda0b8b99eff5d111c1649a0f7e67ec0f637c6d3466994d655066a95732590e521ca055b048dbafd219be1a04fcd047c3722c4adf29ebd8486e7171359292e11ac6b740b4d51093383d64d2a45e51115c689ae29357366f2013eb9b420c6bd069d22c2110182e842eccadae81797a5f57d9ff47311f094ea0a25d7e329fcccb93c28b92ed85ccc2d690a84f2b2a
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 0
+GenerateBits = 2048
+Entropy.0 = 7daffd52fa28b43e757198330e8bdfaac82cdc5e75382e853a784ac217ef3b61
+Nonce.0 = ad296a73e050479b682d52a6a6c40002
+PersonalisationString.0 = f69854804e703d05806f19f92252d967fb60088dd50f134b28233a6d34692c7a
+AdditionalInputA.0 = 65139b95508799e5f084992ad67eb8791e227b2855b83aa9a2b8bc34316fad9b
+AdditionalInputB.0 = 7f5b56bd20063b6f441ec8888357f563c44aaddbfc93ac43d82274d005ec993d
+Output.0 = 29cce539d22fd85edada8bc7e47d0d629a1efab369c4a8fc7d9193a77c4501bdc91b92e3fa7e149fec80b5e160d3e3817e93a5a2218de2a084dca4d5c869b5a1e6e448e4fcd709c373b7cbdf3174972a0c0a5cb44f84456ab682e180006be754f612951bf63c14bd55b636d92e9263d54871b2ef2617cac337a508cb1e2791595181d7ef8a888bfd87c218e45fbf02d857457a443d54318fe47e28b545948595ecd45cecc1b39da86aaf151d9b33bc2bd8808b84aad54ed9be103a2654fcd8d588d2163f4b709a94d515af515a95085e4f6eda8db25c428a6b6ebce0f73e193ce72bf2dfa725224452833f7f3016ed01665c8e347c449548ded796f674916c26
+Entropy.1 = b29cec37319ab7e660943db72115bdf573cd0cedb96617b2fc1a267a1863addc
+Nonce.1 = 5647a7847e096a18ef465c263c5dfb31
+PersonalisationString.1 = b54306ea8f371a62fc303a0c07bad5628cfd573384ca31468df3d69b6e10791a
+AdditionalInputA.1 = ddd2bba2e52e8f2cedee4824839edbdcd12318f0733a3df131e1cbf675609f3b
+AdditionalInputB.1 = 9f919539828030ebdc8a9aba819c682c9ba1c0c2083c04e28959f541f6f3b295
+Output.1 = cf199ad48ffa3a72cb0c6a8dd3b72085d0c7cf1fa0135709054f47ffe5f750c31bc6a3de04e8951d3e4defa3ccc59a7ad54ce13bf1d23be0d719557194f7e7479ade1f760ed9a3c70388443d529e1da92688c7dd9ea25a75d2d61eb187c575485ca2399b53cae426870194cb3881f500829fda6b8ad277bfa0e37e56d824856f7c956faf3bd7e7d4b51a4c044e4f4927737f1ce993add43cccfedb2f5d433686c67225c490ccf65b2e7fa6edb3b207c27c3d7634702692bf7693ff33855eeb3572d01d99585300c538b987fad6ba9ca0d7c3332905e0cb48ea30e6ec2ef11df51dfdb9e16ba2283b6e5f7b33a0a7492a5cb525b8a1b0c56332323451eaf23795
+Entropy.2 = 154dbe61b70ddeb8ef1b86467d7a654efc44f714cb9581d4d9ffde04852979c3
+Nonce.2 = d3b764f00ba26e7c3c740064a806a22e
+PersonalisationString.2 = c036192bb12e9251d3a82d545c68f30a3c126d32a46cff77b8f4d2e7c418210d
+AdditionalInputA.2 = 968da3cba08e923eb6db2574b5f5448274c45d77772c55b38c975c8c3f5e7170
+AdditionalInputB.2 = 0d28459d9e1c03a3ab4dc025aa66d0571d1b29afb7a354d1bf266510ff8494db
+Output.2 = 40bc58286b9d99b318569de5d7d199c023256902de2a3a5a0f1e38745100110274ac82eb4ce76b224725a97b9467039042d9ef066c88da7007ab0d02b9c4294f1684c5f8ff125297d3a6c42eb389026b693a67f2db928fb36712027643e6be20d43d32d6499de412516ba2efc5ded5879b7502fe6a982abf9f7285840fa65b8009459b00927f476161d8a0776ca87a1a73b3d5dff57b49dae18eac183c67ea6d0bb60b6d6029c588e8e36356adaa031880bed616dca406a4423f42c5e027ff4a1bc3742c2bf4c1ce5125e1c30a276cd63882a352dcf3881bc6eda8bf9f1a45e75c1c9b8532ad00799256056eec5ec0b257ccc131d3e016c2e2a1d5bd4f2bc13c
+Entropy.3 = 47c502f2daea3e077382bb976b50f7fd60b60b21969ca08b776c978a0adfcae9
+Nonce.3 = 569b613d34046ee05c07f324f890006d
+PersonalisationString.3 = 7991d29722aeb95dee02480b916b7c19d890e1459f0a109f9ed4a06164ffb5eb
+AdditionalInputA.3 = f61a95c3e2cc52206c71e94ca33764d6557c1057a2315e016304b53e12213380
+AdditionalInputB.3 = 943e708c9f18da2de784d4f7b83faafd1f282aaba638f422b46e34e2ff625409
+Output.3 = 92409d22fb6869a48c3e516891cfc50b516c8f27e165fa8ef60a2d9ce0f19f692b6d2bb733faa71408e4146cebfefd18844c22a9c4099a6600e7d4f26886b8a4c2581cc1ea78137c996112b89a2ab44028685abcfacff96a50c6d57c17f6834dd5faa2c97ee94d30870f0a5663ca7162e0561b78cc55873405ca1a6312b5a5a6f2c1fbdb5c5f75d4644aeaf57666a6e301cd1321c8ed00146948e16673009346b924cecbdd1f8285417e42d42a5fd15f6d7c6918f26e690daac352269967e697ed52a2bce2cafa32c11f712ffbfb4af77542f77872f4d87c74330203d096febf4756d5a09772e49eabdb8556115c8460676492e139efc2a763538b99fb8916e1
+Entropy.4 = b8f2ad7927d7ddc7c7c557f7feaa81b844241776c39af7846664575466a824c7
+Nonce.4 = 22325deca206a0fb523cfa203475a0a8
+PersonalisationString.4 = 6ca30c83db364c118b5578626a25dc50744f881d06ea1ad7e12d4b2dda86ed87
+AdditionalInputA.4 = 80766434c23002b8f7fd6ff2d0570cf1d58306e930b4e52dfbf2cb54ce8f0a30
+AdditionalInputB.4 = 1aa9df37dd258e9ba47627d302b052d36a10ec99194d5d8a07312c39a1be522b
+Output.4 = 30adb4ff0102209fc1d945cc117aa41ac4a63ebf6cdcf0163c44668b752195c1298d7228dba7742229afe2db33483fb971e03f533a306bd1e040d03e1dc5fcc8a995b6e960daa221082bff726b2e3847e7eeba0cb7a50965af57e881bc3275bad2a9ef24eb5981d5789f3710b0ace60a5043414f8ff3f9471e6059aa4e0e3eae0f6df7bcdba150bdebed0a6894c593eccb85d5bf92328a6d86d965a66954c69b1e2ece9bfbfd2d618063aa60526074989bcf2d55014427336dab8a43fd35b3a07cf48399f71516c785ae0edefa71c1752a9ede22db388160424a9d08fc63189d941c924a2a11bf80ff3a8460753e1f66989188ccabc80b5c6c7152426ab0d5e9
+Entropy.5 = a117f14412be652efead9399b431153a7e06d166e451c218e4d566f3f3223e9c
+Nonce.5 = 1bf3f7bc8e4fd7179fc50b15cf1f230c
+PersonalisationString.5 = d53cb9b946a4fb444bc6806e6ef8f6e9768d8b716318bb48f4ddde7ba6e3af7f
+AdditionalInputA.5 = 00c0635c761f901589560ca4c6d3a4b3af29e4e579148fb18a679966a50624e2
+AdditionalInputB.5 = 4f85cbddea01213ad0389d2f3fbba61d006c0ab7db93b9b2762a070851873c74
+Output.5 = a55fba38162ca52fe0ffe425697a0b706ac4217324e998b578b3d000fd422e95c0c1402aa33564436d90f9b9585c692f4887223628f769784acc981ec7bd561592c5ad0ede9e8c49a032afb1c40c47a692731fb5d36a4ca8c637f7e16be7264e4f88daf0995720afaf949d69a12b4b860942c24fede4c0f216f72ec46073482bee058a193f5957d38bad2b0a0da46e5c2d3d8c9996c9cff64fa7ad0420ed4f518e3c52dbe42e478cb9f58142139a6b4862c8b0bafd8e181216cc289a106972438a708aa7da67c744732922d3f801cd097b72ccf8d60a08fb3fbedddcb19e109cc59413a6b4093a8460197a8158b59a21447b66d8d9e0faa45efdfbbb8c285dcd
+Entropy.6 = 1abd1c8a15f923c8f7e1034c081db9926a22a62c6cb76427939b7e2246597faf
+Nonce.6 = a36bf9cff5bf8882680b26789a485b89
+PersonalisationString.6 = 656772a1bc20d83e9d07eb1ae969d653e5e0f9c318cfb278b7d0d3b6e9798b7c
+AdditionalInputA.6 = 04c47f15cf1d1410c8aaaf6d36221b71c3e25850410f503c1c9e72f23cc4fab7
+AdditionalInputB.6 = 5c386aaa8bb81d893c09d5a48eea4c9aa81fa4545412b36a9630c02dd6b2f28c
+Output.6 = a05d3f5d21575f00fa71f372783484613eaa76832bf6facaf0c3410405f571cfbe6c611dab18d6497f326a9d5e7a91de3b649d8a34e120898ea17f8583c68e9e7c5a0dac5cb6c75e0a70718fed21ffb625ff40c580faeb9b4f1ffb9e960f84b7f220d79d7069072a9bef93608ae0b650488f05ea9fbeedc1b2ef79ddb2a7d3006e18b16faadce43191ef72e1f513a701342ec88a40cc74d444bd8c6467fc386f995c1ed5a7a1efee930bca7ed04fa1a2469aef2f193f51ca23299af29330e41e2651f600e92a90addbe07d87d18634e558200b6d68c151b5ee54bd6650cb3e33923207b6316c18cb866cb6838a54fb2c8f13d4ee1041c57c2e9014215a1e1ccb
+Entropy.7 = c7fd8cf0d432e71d6a06dcd5ee01dfc61ee8be3aadb95f34b892bfda01ecf63a
+Nonce.7 = a0bfa7a995ff1df2bb1dfa94dfb5bf5b
+PersonalisationString.7 = 513a68a14ebf0d7a6b84cf1ebd7d01a575b98bc0e30627464870c4482729aeb2
+AdditionalInputA.7 = 3c413c1b84d2f3a2357dfc4d7154ac429e8372a1c5fc670fa55314d3b67c5569
+AdditionalInputB.7 = 5e3d61358b30bc14a4c04388472e27ea5e287ef6c8f63a1280fb38c828c9c23b
+Output.7 = 1196d784a57514303c36658daa4d8e375de466a6cb78203ef35a7ccad0377b4878e520be7b5d416a7af820b576f2d83e572eee478c412e463a62e1eb779fb6bcd022409f549b4928f41393124f7cb139e3779f949e3937b1102239b9c1d2bd250e990c035af31dfa3287d024bdbf3daf469935fa950ff8c8c2d72073271b84ab15d1d974126954e533929c5125e19eb187eebf76ac56159ea3ffce28b6a33f5740aac79df500964475137e65c05cfff4af0fa31c924bdd8d3609f92308d664c7a6ff63cae83b9093ba794f96528b83aac8bcc91c3af89b5eeaa531c0cc8aeab68f9c6f6179757de6dea533211ccb2ca3af34696c06a1fe19ea3aae74e68de7d3
+Entropy.8 = abf54f468cb9c22a71fd81bb59aa554cf8f04c2ded03c9facc3e73f38b75a383
+Nonce.8 = 89ca26ee8e7b19e3589ecb3ebc7298c9
+PersonalisationString.8 = 918fbe183f1cd95e1accc8c041acb0c0b93c261f706714913449e17c16f0e761
+AdditionalInputA.8 = b2f866849f55c6cb34905348c52b4b2c6da7a25953ad798ade917cbc16b25de6
+AdditionalInputB.8 = 03b107aa9b9cd034f58bddf19ec01f24de19fb76a12a460bfbecb5602f243d63
+Output.8 = 81cd29ccec8a8627e56b3a14d7b7fa3e17a62746909ca57c9dd82932d92c50a4e38a01b71b801690e7f7f1c38750cb221fc7b122c74c90f2e51470361236d69a0546351658ac51ccd9c29f496e3d37ebc970cb120a87074f5fa84b128b8b46622a261d575ac3d12a50eaf9547d131ce6f8406539bff3fee4d54512125f20291b3d15c5366760d75d4c5c590a04b963427b71c6ca8ffa8e7669f842a91895cf990607420dc9d6d8fd1a2546ca783b68ffb2abf8a2070215eee230c8694a809b1eae79be74cec05bc45c8f463883eeecb3c37c2b965f5e2053df4efe6809b3b56e72f02bd2af7357cd954e112fc38806e46f424ae9141f28e56d3bcbf1114afb05
+Entropy.9 = e0a3b6ae60dd17bad65d97821ce8c90cea1593a4f4a37ef0e5c8da0febedef17
+Nonce.9 = 4c198cbbb3ae70c04a06af3b79582ca7
+PersonalisationString.9 = 0b20e39a7ed66ca9e61da96c97025a4f4f56e667ab528b6a51de62c952241e43
+AdditionalInputA.9 = 75e3940f9943df4a4f7e0991b10bf4ab22010f204b91ee3bd0c07dbcd567531b
+AdditionalInputB.9 = 5c3c6b8c43c53f23ec921da7570db2f6256b4c41ad5f9dfcdf493702a21830aa
+Output.9 = 891edff707485d4426c543e582de69ce5aaf47125e75158994a7dc47def6f39f11168afc97919778674b03c9a6bf9246ed609e484e9e4c9e52ec9b6bca4b2f7d108355d2106a830ef4e959ae326836f4199c93dfefe536e06024164f52dfc3a00a082d4bb1009a9a487c04b3c400a04bcf679add29b30cf1e6e34ad480e4a3dfe4510955eee0b09fca5792b94d03501985347117f106f8fab4e30276f5d196959a9be4d402d23c6087efe0966dd47f3de658fde943ca2e72485b745afa2dbea5d007fee57490f55305bf4cdc943f149d2d02d8637481ce13915abfe3f2c38f5d4ce2e5c4341800bba3ed6caf88d1e5d90bd0795978f34512ef998f064b19d46a
+Entropy.10 = 2edf89c11e986c3d7563ac9252a48d1204610a44e1bffd3c38c40747a048f611
+Nonce.10 = fb1e441ca95c2d4065846706e9b3c4a0
+PersonalisationString.10 = 01ad111387a92b19a6a5d6fa9bf7510a94dea22235c9d30735cb71a070c5a1e7
+AdditionalInputA.10 = 2be7202a1971bfbd2fbe3fec604ab6310a65be22d9cdf40957b0a0ee04a6f3f3
+AdditionalInputB.10 = 66d348269c32338f16bde77f92db62c5b53dee123cf0d428b7516bd827eddb69
+Output.10 = d49467c5e09693c9ace01358015ea245dfaa03c324b4de5f9fcc385a3ba73640fda11832fef7be1eb2e820aadd5627091235f521776f12fee44e73350fa52099819db2b365de3f049cd366b410454f8c161237aca945bcdbe38b0d7d3565f2bf01d48df462feefe5e852783584d2296297e5d89df1e5bc280655d90cc2873031868305b13df01bbdedb76e55c0cb9bf5900975ebcdd855c136d87b9419af811fc7457abc340c01bd9e4aabb110f048025c4d80d83c245f2ccbc70dff40507afe889952cade50bb7c3357b0ab402ee49c51d81ea0f5e8de8ac22ca6b72689abfbca940fdce47d60d49b56a3812102f6b6b177c982fce8f52db7fbf0c73c19842c
+Entropy.11 = a2df1f523094a0b4f7d2569f332a381ba5900d19e4befa49600cbd94a43863ae
+Nonce.11 = abb5b481776c8d95c9585c514a0ad948
+PersonalisationString.11 = 582d5025e08cc763e208f855eee90562e62273db55d2675d4b03f31eb6d55f7c
+AdditionalInputA.11 = bfb78c53c93f25d4cd6520e938d2dae2f11209da0b20c1b88e75883aac8009a8
+AdditionalInputB.11 = 4d7e8f65d99faa9bf9cda25cb3d88d124e10b9090bfb1812d7a5cceb453923b8
+Output.11 = 489ccf70a7dc43400625bcf131b11c71e87d9d6d379702aaeef579180a1b8d1a32930e174f97800bc44c7182b39f11484c51567fe920fbd12ea841869da9aa288295320d11ed52c95900ec1323227ad32fee5d414bc7662513f318d25c1ae8b4ea3df087f0bbe96ba87ad30ac38bb316c56bfd2019dda6be6b30c40e48f90fd60c6b8422f5c214b5114cd4106edd324f254871cadfc3ecc518ed598236a396c37bc6d8be856337c87ce6a7bacb88054dbb6e5e3ef49d0b3f14a3ec85ea9b7afb0885e133c12bb35689a2604c112dbb3e31295c87e0ba5844c92502abc85b07c2449c8b085c8eaf3074197c9dea0d605e01f2463fb0e528bed1db5dbd9e7c0fda
+Entropy.12 = e5eed8ba95a7412a3d49db1a34e58ff5e8f4c3bc667fb077262b845859532bb9
+Nonce.12 = da75e7ef316abc0eff6c27f34d37044d
+PersonalisationString.12 = b9a68b0b8f5b7c06ddfa444f925b1571f4e7c25d476191941a7f5da5a16d87aa
+AdditionalInputA.12 = e34da55fb4ba95b815bb6076a6542183ffde47cf078e6bc263906afa504712f5
+AdditionalInputB.12 = b7dfb1c01fcfe21bba3c1447bf54bd9f61271957485fe757404e0bedaf7aa374
+Output.12 = 1dbee8e755f966b501a6ff6fee38a829e321118eaf31da441573f05c55b5bf8f2a31c5da69da035094180fe18713f48c319ce1615d9747ec5bf67f94ff355c4857b7f163daad585576f9254bb929fa360699c2449458237fc923fe4cf96027bf71f2dc137480d0525b1a27aeb7bbc7dc65c59a6822aa70ed366079390267fe921127461663c436e11e5c397062e3e302bcbea1e940dd48c588c19e6b5943e4b07dd5e4b40688644dffb2f50dbe933d6821ddf243c3922544f5756c5f8b637eb6deab44eaae55c9691ba736eb805d1f5b1de1fc8a0a1fb17ea83fc3487677cc29390dc8701ac829e44457e4feb5d4c1dda43a5edb194a926dec649db7d99480ec
+Entropy.13 = e53fe5a7a467d45de79b0d4c3c6b793cf8f81bf61369c9957d125475fd2e9925
+Nonce.13 = 2e607a6b31992614addf46893f26c5a8
+PersonalisationString.13 = f2fa633d2765ccf20f57e372895c06d93215c99820479b963e036cf850a58078
+AdditionalInputA.13 = 9dc34fb473efadc12d67952ecf5704448af5cf6954adbf0f9821772e56343fcc
+AdditionalInputB.13 = e1dda8e77cd550a7e298769e94a10e77e824afd5d7cced61125281e3de9da4be
+Output.13 = cc569e20dcb43f2bb4a21f0e2f99e21786f6723a3fc3beac5b7cb93d8e119dfd1fd5075e7663a19e3b17d029b2117f070ff4304ef8566065cf48ed4f4812ec693ab0f3974686455bde7656370282465c38e44f11f62bf89ec685f09be50f8b940b8a06e3749bc176a8d4f1c54724f77a3eeb49deb767f2090e8c8be04a09ac6c9a1feef0798a59bda8fdbb07efff1f9e6f29fb20a63060426dd7eeb64060a2ed76f3f7e5826acc75153c3e48bfd1031ae3699565ab925eeb4ddc834478e3ffc53718730102bf1ad11816fe0871caba164964f5266f4fe3181fd1040ac86fca0efc82db69445880d3a97859aaf032e2e3cd7048e01579949706239115ae83e443
+Entropy.14 = 5cb31019c893de9f16cf83328f7e115d75a64f45339b75ad50037bac082d7ff4
+Nonce.14 = b2d6bf932af6ac29c514fcabf1a85134
+PersonalisationString.14 = 7101f575d4d0289c8a82d82f5adb761da9bf0b83a09a9b2f90ab6fc7f92e4152
+AdditionalInputA.14 = 06df99a38f4222b9e7e1e3f4a6f488c1dfeafe847129d54c93bccb16493069c6
+AdditionalInputB.14 = 3977a9671024bf0150752ba10c9f6432773bb71aaaa9d23d1ab72b90b7f0e088
+Output.14 = cd4fa86fb559475f4cf4a60f111d3d0f71646d3d25111889332f2451eda96390c607a0178e1e79e8124c7626ecaa9822495e5341dc6f24818f97951bb29434c7c48d05838fcf3b43b8314827d3acc8fbe2c4ae2ab066626c25c32a760002cb1d980169f7691bee5e329ff1ff4938d3bdaae583f3561499563198a5eb69e73f6b963a5d072d23e07b0ce48cd04b31f9ea349c2cae355ba478e26a5fa33d8f03af84235fb1743d30910f5557194e3609494019bd705f8cdbf3d1b4dafaa09c9d8037d2e0ba0f96948d4302e981162c34c12c2fabe1a42da517b7e5a1f796980371420cb305d0a316bee56767ce1aca9260231839b92fa26fd75846d9304427da27
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 5b3b225c13bd5d7bf9aa8ad7ff170697f6492670ff64b5c0
+Nonce.0 = d53aba6178eb4db03d022e56
+Output.0 = 16b4152d7f20ba956d3a788e33c644128f82d368e85f125d1c2618f6090f4a1b20c30335e836447549a662c7ca14d4612cf490a3e83927d2255ff398673394a6cf9b3eb46765d51ea1e487f8355249de965d37b7f035240501ead7d2b2dc35b0c6d41fb54f0e9b4bbf513e96871b705d
+Entropy.1 = 755b38d5ca8047a5c9682b64417fd2ea12b92a065997dec4
+Nonce.1 = 990e8a9283563ee6f1a3b9dd
+Output.1 = 33b7c05d2fe057191ba2721d161e6d90524743b0e3b8604fa12f16e2f8d683482e789b7afe7ec8e1b86e3dcb6edaf1bc58f50e558bbb3beb4072306eb3568de3aecab1bee824746c2252f6191235962ddbb829a6cfe49ecef5d0a0ec3ab4f6922705330ceacf05034750100efa7ba389
+Entropy.2 = 6123e1f18c60e78a726a885cd6b3d5529e0255a0ffbfe522
+Nonce.2 = f660ea8ea57def22e03f6bed
+Output.2 = 347f041021494bacf6ef510337b78184c12d9ad2b680bcf1afe3ff7670f9fbfd6331a14daead42f58b8461fd1d98e1b1ac9e0a844bc4c849e83cb5724c107d534587648c66bdaed7a8b48ac8f03b12e72768c1a340e7800cb8f6cbda6b8691ddb26a9ea09d73a7a78b3a5876e58f9d5d
+Entropy.3 = 057a02a79da51dd68aa05e51b135b89521fa3c020b0213d5
+Nonce.3 = 933718889255b54a14527722
+Output.3 = b9e3c4fd5cd56fd62ae134f95bfd9015e0271feda314704cf8f901f5e48e60582d116d7930a4f4718eb08cba45b997a5f5b23902f5c11d81b09708320a5735dffed23a4c8e86541c90f7a9071092650339fd855697278880e3be3ce0ea96865fc778a9dc011ba17e2471ed9c0ffed719
+Entropy.4 = 04d39a39d5211c50507c3b1526f341f21946d4e7ddf5c4e8
+Nonce.4 = 36282819330e2eac6ec7a555
+Output.4 = cc6c02ef46520c4e38da46fed766f7b6c7243ae04ccf14355dd9ed4d56ba0feebb2b86395e7e4d1cf3d7f0f96e888e6cd5f54d54bd817949fd94b30badeb09c28e93db797a5732512b6e03755f3e477ac747d9c2aa06d632786254ca5fe8eb302d85a3966d5852e5b8decfebab4396e3
+Entropy.5 = 5a47d6b4c3b01665d06bf3241c24008d46256e2f18b623a7
+Nonce.5 = 3b88528d2f62853c6f17f27f
+Output.5 = 4d1add998ab87f871f3d2dea37e153937d5dacdf71f082af4070a4e09316273cba38cd8aa70543d218dc29404f54aec97f609d9ec3e375dfff76df8095b112d0b3beab9165b494bff80baac6253ca711d085ba30a0773f3ddc52647f8356b1f7d5927c237e9f2aec99b44399450e4227
+Entropy.6 = 5736ca8684b9c5b17e2e67b130b445ca694da7ace0c19f44
+Nonce.6 = 1b689c4c8e459e13a0a5c585
+Output.6 = 208883b80e043db8b45bf838237179a2c8cc34609b58894f727c8c6b7815b9151dd48fe43d7b60525c87f31e9d643fece218372df433a85da0df3c3c3855032cdc8faa9af2b2c884ec4c60877d68e16d7d1ff863c63c404ec5c741729ce1ece7e4f2dbd3117b7bc1b830472f1e5a4b81
+Entropy.7 = 7a747648c0545287a5d9fa58e8c442b750e3524c2e79134a
+Nonce.7 = c6a70b28fadf6fabf03ae303
+Output.7 = dccb525a08c96d73593ca348f04e67a0a1a0b164026d54dd80032241809775c76fb6aed2fad971512086cfcd3f3c27deab1be0dc27511bbbab205a871eaecdbe66108ac6e5a835e759995f56e2728f15c5b0ca60e3728d949508151b750331f361ac0e5f97120c5a3085e217c70aa9dc
+Entropy.8 = 38538bc7646a54e7bec0db7dbb75cac62a3633af0ea6a384
+Nonce.8 = 2df888e3cba9b202e67efe5c
+Output.8 = 882997aed0e655ab1bdf52ce88dbf743643c1ec62b369a22e9db7736b8c0b7fdd2c69bc6fa634fbbbcb92c47692f0bf47b6aa1aa3b5a7790fdf8f019a069dbf668e9774ce90da48c2000b6a7aea67301ac7a83da7f33008aad78707ea37cef5a506ef7b2baba74c39725f49c67b40ed9
+Entropy.9 = dd1804090cef1708aa21829c1ba692d343b298c99513841e
+Nonce.9 = 00d8bc1b63d36447dc443042
+Output.9 = 057a2fa4ebf0a0c78a3f336cca70b91dfbf166fa000437bba6fd3f4dcfea1b202a866528a9f9a20ff7f6210fbdb261d4676f8359156d69403745dc9837c86145ef0ee4c0937eaf0fa551a4a1414d6b401f48922e86debcc5b25550574393e0acf29e6c807d3a849ab3e6a5748f22ed07
+Entropy.10 = 1b32d8674dd31f4449b462da7b12c3a6abe569731bf681d6
+Nonce.10 = 62757f4fcdb4f807efd6319e
+Output.10 = 7cdee95ab127bb4c8d77b87fa93562f431650dfcdd75ae7ee3aeab17312a51397edea835451fa163f07c04d5b05fad51d087953f97f231ad10e7cad0b200da3a70a22c918eab3d1931bce6159f2a3b57db69006c0887739cefeb811169d5a0ccc25546e513a538c99dd280dda3cae025
+Entropy.11 = 451e3420a0bc88c199fa98f007feb386aa9310c900d5bbbc
+Nonce.11 = 0d739bca00f34d94b2048157
+Output.11 = 012af91cc3143c30cfe67edec181509fb616b0bd708806ae5ddb7348ee3cda760474187419d84f2565b65113436ad0567c05c9b7c82996c336db22b8bb8cdb2f918c1d1d21c93330f5e7ce4217755d1b0e701d7de4ca9ccd8647a9ef0ba39e8eea9f6357dce29758c09f5df7a2f853de
+Entropy.12 = 7333d146d2668fdbaa608a759b04b02fd931921e324bf1a3
+Nonce.12 = 8b80d878513b59dcf6340a27
+Output.12 = d444d620441d2256e112d19314e5577e6dc586608b5b8c6f4c3174e7b59ccd30db1daf7c571d3ea249c6fce8b58f6b13d03d2f311cdeb6ca8336ff922cc23923013f38e2dcdcf4ef8abf3accf3f5fe789d254be337116dfeda04d967967bd6e7a80e92927d53fd6c2d45dc77dac0f677
+Entropy.13 = acf49affa9806ef751aa8dc2af66573e09cec323b458e7f4
+Nonce.13 = bea35dd49119484e28a150ae
+Output.13 = 98b367faae684aad1bedfff48b754ea6bc950c631ae7c7a2522c55ae2d47ca6b4c4ae50fa136b7e774ce63ab46d216943328608682edc650c7571271af6c87abd0b6a80e922fa3d293d4e9bfc6539b4f29c55511600baf2cf37345a98156a89ed14e214cfd80d525e57a3dd097442f71
+Entropy.14 = 0cac1d970c06da6f224d49e5affec0fe338d0b375b66687b
+Nonce.14 = 1fb1df257951ce8fc0cf12a5
+Output.14 = 7d6e2be5aa574b0edff39ea938e94143ed92b287262891dd2a6c9193b0237e8fbe10056e15785bd818e548452792a31c728acc14ce2bce9295d3776885018a57c8580a8e7df9a34ea960e0b39af4510711320528fa7a0badc6e25a0eead8cb091c404f626343c63d40044055ee9f9e35
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 63dafe5bd5470640d3bab640f2dc121ab4c3c315c7bd9e94
+Nonce.0 = ee95929b8b7bc25f9858441f
+AdditionalInputA.0 = 157a1cbcf68f5b3b0569b0daa48a2c6a026020daf456a5f8
+AdditionalInputB.0 = 6b89d4ba679688056f6e441510a0f458fa9cd89b226baeef
+Output.0 = 406eb41cbe21780e6159b9dace5d0b0151d5145993293ba0664a4a79757b6233dee1b245aa05653870c4207fb90858bf3ca94ef904a7b67bab3d8cd4f5791e246060f163b3061039dd04641f088edd01485e9c9d71e20e45e7a8234c4ff0c49273e5ae847f69cfab18c9965791167019
+Entropy.1 = 8385c0a8389e3566e48b48e581da179dc6d6639faff4e1d4
+Nonce.1 = a2938a5a871bda9869b98d7c
+AdditionalInputA.1 = 0f0e61d40f561d8cd459addb73aa0a360f6941c76ffe9fa0
+AdditionalInputB.1 = 7c2ad17442c70463c2a1a3c2a4281a4d95be5c55332fa0cf
+Output.1 = bf16dec355433fbd3babcb6887b9dc305f0fc32063a956f00af0b7f4c09a52b2b443da7a25a3695c33fb773c603a55c94e86c03de24f0f468226aa1b287a2192bb8856c1297098f9c3010bb3854652cebdaafcc997fa4ce844c31d15b812fd21dbae760da96c50836dfdc3d5c19a1b6f
+Entropy.2 = 0295eab95b2beab2152ebd3b3df31f0a6bf7ca55bde682d5
+Nonce.2 = 9eafff0d6c47dc3aae40d8f2
+AdditionalInputA.2 = be18217c79ba99d47ef91bee75b2bbeb21d830790bbc684a
+AdditionalInputB.2 = efc73b84496469c5eda8b02db076f9c1478650879496431f
+Output.2 = ab44dfdc590b7af12d537b4ac6699b6258ce6a2c866a5d09616e17dd58a1a7d46a21cf074b7b9dcf5d95778415e7a8b9762a45bbfb6fdcadf6244204e1d0862df791ca0df2f5c5c648cb04660bca5582972ea43a0a0f1bdd23683799113f0efa26ad31fca15a4628ad157d405295f0af
+Entropy.3 = d0a435f96461ccf9192eb7f68676a9aa125190b65a8c31f9
+Nonce.3 = 087f18c1e9b7c69e272ab149
+AdditionalInputA.3 = d47b0ef89ddec88ca648ad2f18576261260f6aa072b58764
+AdditionalInputB.3 = 88223f5f0e52a88f8b464ead27f194bfa1dd5cbfada46eca
+Output.3 = f45b7f407499da13604b6edeed15c5bca77b0a70def50507e8acffe228b083654cea602bdf3e40ebad7f35e672588a2e01c332c2ed8a9c829274898c8e2305f63c09a781dccb1870eeb841b6b9ec5f33fb0aa70c9aa0c2267ee4cd093bdf675dd51482d7607afb3048787984830ebf27
+Entropy.4 = 959b6bff05371e71e7c6d38486a041b57a667001dd8e92e1
+Nonce.4 = 48fd2a6be61454d85ce3ab25
+AdditionalInputA.4 = 8339e74baf3c107aef29cedbd16c099daf8322487acba8a5
+AdditionalInputB.4 = 6b7d13415e1322d8143965cfc7d1715d381750a0e091c3c8
+Output.4 = e482a5e24f11bec3dbd496e0773b818c50c96694cbacc292a45536fb93588bb03ca5c15edf59ffc918be6ab73f0b5ca79a9f0c09a08b0e458dd864207c42df2e2ae45489b3519594bde53adfe96b4f4570357101ed5434d90ce71daef9c438295e7955a5556224d9d176270e99f29037
+Entropy.5 = c26a1c4c88cb02f417abacd3a27a31921395dce2b08c81e0
+Nonce.5 = 1418b871119d9ccd33dac434
+AdditionalInputA.5 = 4c93093d0a5c6f0a073999658f24d8b3a5f6ac8eabd59c52
+AdditionalInputB.5 = b41b61809421a996d36f24962667db544995ebff11e72370
+Output.5 = 7c6205fd871f78031c6a8a992386d4d38d4a057c5569bf50def38e3f6d83cda024cbe3c8f76c16d95c5f75d6fd495b1b6f49fb27d5f79e6e02333cadd93a2f7d0711536083dd32169422f0b3a7f15975f672660256b4b4efdceb22d6249cad912f8571ef4cbb6331e9473381469d43f1
+Entropy.6 = 4b7df454ca5b2c86507580f8a4c9b0bd9f41ff1385aa0aa9
+Nonce.6 = 1b52a7f4498ffd144fe34399
+AdditionalInputA.6 = 7d89fd1e8d903c34c5e35d0786346a6df5b0f34963b972b8
+AdditionalInputB.6 = 097b39710a4f83166e5f1ee294d52648239469492a03b8d7
+Output.6 = c5a9e88502350e53c00ff52690261f1438191d145d1aacfb40f8d6b13feb6f11380f080b1d0b5d91c3962a4b5f77ed7e43e6b025c28bd6f47a99df3a3a68ce7f23770a60fb0686ef730cea393df718b25c81c2d10da0ecf55c4d0b6b2b9729cd3caf18a196c27868c41970013cc93ac1
+Entropy.7 = 3c2c85cb8840d5900a7f5fc1d0c4e1bfd090ea8c354e76bd
+Nonce.7 = 4d82e8b2a7d03b4a5227c57d
+AdditionalInputA.7 = 1a2d581f8baec211351c604f25230d0824ea6c32c73013f0
+AdditionalInputB.7 = 19c8e4022f023d3ec597863affeb772f28280a421800997a
+Output.7 = 947536c18d3a7d6365351106fc087ef4177c8ed32c81ce0e5cd8481239ee148be7a59940dc8580d2869fc06ff18da2c58693102daff817d3bcc94803f28126816468596df1d5899e42c6346e24fc6aa52dfb01b17f58a91101a1ce3288fa17cb56454a3e6fadade70131d875f7b27012
+Entropy.8 = a60f3e68bc831febb931685388d20c3384aa84bc22bc1cc3
+Nonce.8 = 10b715ca386b573dd61f47cb
+AdditionalInputA.8 = 01026eb2be8698e9205a8849a24d91fe51213603ba5375ad
+AdditionalInputB.8 = ea8486e1b817ee73b97dc36fdda6e06cc73b0071cb90a734
+Output.8 = 50d8d3dadfe6b90d4035bd41f3614f21c2fce7c548eaa2b56e814396771bddafc3c784a962093d3c08edd9b4aac97fe857807e1a238a598e7eac874c8c7ad4e6e471481061dcebb9bee8447d1fcd159c0d4a20a6e4cc99bfda66fe77d9051315a8de5622e3d2ad3e4f14ae0e04a347fd
+Entropy.9 = d95eefc175dff8e45d1d6235feeaed46fa61e8d05da75cd3
+Nonce.9 = d4794d842266513d37ad302a
+AdditionalInputA.9 = ab52641b345da4b0e2dbf9ba684f3cc8a1f6b835f38d1adb
+AdditionalInputB.9 = 775a69105c74e1e69ec24d4b432bf940ef922c90eac7b825
+Output.9 = aace92c24618f06ce42bcfdcb7e197e8f84cbb05ccf42c480283170ea4760525a441bcae91ddaaa51b594f6a8ff19ab6dbfac917b8839397a2c9ce3f7e1e7ecaa9ae01301b72644b283a6948a71a76d80ceb3391b479361656927da044c9396b330874591f0af3960947c36ba51f10c7
+Entropy.10 = b4d878c971f827313074841750dfa5d2733620c48981645e
+Nonce.10 = a1bfc76a29052a667d345a9d
+AdditionalInputA.10 = 9857236d6834efbbe2c3993dd3800aa317672d82c9d47499
+AdditionalInputB.10 = 507124f8cc320d98d178b21bc3e6fde209e07bc046225101
+Output.10 = 311f2a5ca649ea2f58d06f3cb44b78e3de8b074857c02c3728f90e45e957eb4fd8c633dc2a871fcc786e73ac4df4586c07203ca23f0d460e36f4be0b089dddaf93d82b42a7f36dea4d91a60d8d93a6e9c9ab4852bd893a6359fd129b25add102d91878a87d9cfe3867185179782f6e9b
+Entropy.11 = 9ac1ed2be242ed5fd5324e56857c32128c68da90a07a59c1
+Nonce.11 = 9264729bd6de7d59843d37b6
+AdditionalInputA.11 = f25d45f3a74890cd0fdc522ab295f0703238a8bb725af061
+AdditionalInputB.11 = 9ba58d7a6bb20dd5039906c897fdf7755fb50f82ce518172
+Output.11 = 2d578c2fdb58cd91f93819591efc3cda8ed3d721e3ef2519134e272a1c044f2362ad3271099c11b1b5733de692fa832ec8ace344ed2cf132b8ee51aeae8a3f9f1842ce4137a3ddc2737d861ebab6b360502ec85788445cfc38bb0c427d0ad26966aaecb699df46c8010b4f4294d76795
+Entropy.12 = c76928e0c580912f08275acd65c72966152f71afd7596b3e
+Nonce.12 = 9bd5a085f0d2adae355b6273
+AdditionalInputA.12 = c3497fabdf21814366f8aa1ac244860ed2caa886e97aee04
+AdditionalInputB.12 = 1172e889ca9bba0f8b38b1a63a2720f83a45436b8ee36795
+Output.12 = 8cf2f71556634f6e066f6dba2a5c51ac4d3c288b772e1db169f8e3699f613061023b3b4cd63d66e678ad8fab81632ad221550cdb8e9455af21b30b3d2988d97b70524a901eca88c5484daa7fe1a56ef7598d18b7370ab66408dfcb85e76692fc42be36f550408c26271698de04fefec4
+Entropy.13 = ec7aadc75acc09e795048474173a63376a6dc401433d52b5
+Nonce.13 = eeb567444ae6c4698005435b
+AdditionalInputA.13 = 4239a623a2130ad435e03147820cdc06beef91321d3462fc
+AdditionalInputB.13 = 3bb8ecf4d3ca275b298de723460c7eb1e24c699d7ea55607
+Output.13 = cafdea1e07c6d56eaa45abf259bc340b8e96101403ef73393ae0d65aa694490288e5be90db700f7bb190a17db4f90763a1edd3e7f8bf9c48e95baa429326a75bebbecd817100c73767a9b6c5643520c09b2ba7c4247eaf4a97fdadb7b9bf9c8ebe54bf8dcc4e258e8bf6ba48baeab4e5
+Entropy.14 = 4d997980b937c73e2fb09f4d0d64818cc388ab0630651de8
+Nonce.14 = 393cfa1d7bf9444f4f1801ad
+AdditionalInputA.14 = 38ead8a466e462f5c0617822c23294cdba07a80fd51dc241
+AdditionalInputB.14 = cacc9efb209c71b123498182d25081aab8f0159bed1fc0c6
+Output.14 = c200766d5caf72e64a77a7fcae1ae3d14681e33767ba2ba7faca26209fdcb59c7202c381b18adba07ef0ceef443d9e1c5888366bfd953d614bb184370b45ea2b44a251e381fd2bdb80bf4bb8dfe011e1b143032bae9ce82c2869537e70d36622bf23476163a2dace9ba863a5f0e3d303
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 7779b338c6daf3a808bd6d4d4f8c9dcc417858c5b9eafbdf
+Nonce.0 = 4c3e8a78c4b6cc08add21f48
+PersonalisationString.0 = 3d3d654bda5319f1f33a8b961bc4d81725708f49295f4810
+Output.0 = f7417860534c53c0b76d2661a4d7f2a73c3079e257708afd4a098666c6d923e61cea1a402b00359a375f5a2548261e3ffcf6905138fa1e5844a3ffe4807840151ddf8b0fdd779ce2fa4eb2dc69867322a942b3fa379f8e660c4b9cd8f4fc8d054ecd9a3e1976d48116b6227e48f3ebd9
+Entropy.1 = 78127871105b41bcab8e2fcc0872c6a349f79bc4f5de99fe
+Nonce.1 = 21e680ad4785b31e1c7e196d
+PersonalisationString.1 = c16204d3d686bf094f8ec7adc787582385753fca97d58031
+Output.1 = 3226aeadf9dbf8539b43f4090f617c3c9e2af46a9d23cb8b0100c9159e65e6c6c868ee6e129ec051a80a8b824cda03f01870dccc286a8b5eaa83973d418c51bb9636711974123a1594c9684e9048b58bc1afd7aac73af08d39741f364ecca224d10bcda931f1780975de6da62ea63acd
+Entropy.2 = 1b46250422517fa0a310728a513e16d7f5bdf1cb08957de7
+Nonce.2 = c04fc923b05357f50949be63
+PersonalisationString.2 = c13565a9eb0eb4e3c37e52d376004099c317d59d7f16bcfe
+Output.2 = e9d487826444ddea533fa320b5b6614c626f81a21293a46a426bf122921a453406cfe78b520af28ee242ccf01d9bc91c9b0e536a63cdc0dd7b2e9ced5522b8b715a60090705eb294f1f24c419b7b07e4e87ac437ae42ea50c89fe6a1dbadb4a8ea7cb208649a44fac99924a160599ba7
+Entropy.3 = f1a475541673e72ad1d8c87591ce76d2b10ddfa6a37b2a87
+Nonce.3 = bc5fa0485791066f00109616
+PersonalisationString.3 = c419f9f1ca9e1d9a581249bf304f8bcdf6aeb72ac93cbcdf
+Output.3 = 534d83f1fb149ef6f907923156b300850be81acd35adb1ad57727d1c45e70a04ef8333c41579af2762aae14fa9084d95c02322854b0b5292e582a724e8f579ce69503558bb547e88ef1076c88b83cef5d90620cdb9f03e1106d9efa10400f721a712b3dbac020332523a4e3517cd51aa
+Entropy.4 = c9573801888e1ca2533db8e29b63e3563cb2a92c3400d4e6
+Nonce.4 = 6a34b5ca69c275641a7dc02d
+PersonalisationString.4 = 1a9e250392d2f10e6941879f52c1ed99ddc1dff67c747156
+Output.4 = 1f41ced1a5b39d1c3fc4b4f56c4ece55e9838687359d8815e52137c653a0645629e9874fa1ae2bcc4cf5956b7c07b9b5979f8cb7dc4dbd472e8b2538dc5b03ae0e7ccb20dc44b1a5c5965357fc08bf4d80efc8b53cecdf31a2495813df49434e21dc87bfb206e01aac1ddc01c64c31bf
+Entropy.5 = 5cd50643670d4416392de743674915df1e1935949f0e4f89
+Nonce.5 = 7f51ac7a050697e871ff8c64
+PersonalisationString.5 = 662803dcc005cdd5132b31e26dece6be6769b63a78c74e3d
+Output.5 = 0457a933c41047631701928096f4e658d29d4ecad3c6e20ec5d6601b48375b1031364aae14d850f41a40aff32611ee03888e452adcf1659feffe6bab68c4cf561e26242f19feaa466ed3c3d76a985fea781aa7a0ba9eaedab04930a01fb3297131fee25bd8c0ba9cf004ac411f828b93
+Entropy.6 = ccc57ad67f97d2cc0fd5832c22aff1d1dc9434b9dcd91b7f
+Nonce.6 = 5280496f83b449b8418744fc
+PersonalisationString.6 = 90bc8d33e5f5c2811c763223b1d116344f2040334d4735e8
+Output.6 = eb62f1dfc617444e7269021d955edaa4c2e8c5aa1f151617dd6cb4c1015f6bf7fc07b36e91f7fc677a78c91a06867781418ccaaf0f2b0ac2afd97400cbac72248f86c5b7c93d5b32dc5cbec6239681d6fd6ff2c191948b8a9c1702b0e3c155ba7a9135d43109c1dbd7d720b20b0a694b
+Entropy.7 = 20b5e9a31f2a548bb7107288d2f5f969398c5fc80b26fe10
+Nonce.7 = 16c1e60cb5fd3016a07ab45d
+PersonalisationString.7 = d48ae24de4378a50597017aa749310cef92244622486e05f
+Output.7 = 3c7bdd5caac4a54523732edba53dd8af20e27c7b6ab3c0be214c2d202cea315dedfcc1d385ca8edc2321877d10477267876d2118c8c0bf7bc1eaddaaaa1dd8ce771344464366d3c3cb07b1baa256788a46375095220406921991e26e5212317b796e327840ff0548dbb7ac89ced0c664
+Entropy.8 = 7bda764fe1ea9aa3fde49d0e7359ed0f90b155ec9bc8b21a
+Nonce.8 = 1d555eb180a723a638422a29
+PersonalisationString.8 = 056d7e15879e3c80b2fea17434ab7ad596375756d984b620
+Output.8 = 2c23eaea5ec8f17898b080f203af9992df99f37dae2a475d966076600ed62add0dd70812e203e7c4beacc370846c935d6e5363131b84eb5b4189d3a83729ce2ed4ba30a7b56e6be640ad32a613e301cb316e56b9ae308f27544043d7aab18ec356640bee179e3a6d731616c4e33cbedd
+Entropy.9 = d72a48b27af5caa18e767ce1f338d1f69e75b26ec2cc5bb7
+Nonce.9 = 59076bb91969ce4acabc3a9d
+PersonalisationString.9 = e1eb9ec1932197d0de11fb000ec037c1b529553861d4fda7
+Output.9 = a7e62143e2419cb5a068fe99cd4f55d965d9da42bcf6870ef5b28e23961c5b31bc5dc1f0c2e298f41d3f75c5c70cef3aca70697662a2821474504604e32205620ffea2a6769ef83e22ced242d56b7e57ec20bf9dc0f504da10dcf563d551b8d89efe868cfb91f8e354c2166dfb13f3b9
+Entropy.10 = e27c86f2ade75590f5433fce85ad3da496af421ffdd51cf0
+Nonce.10 = 7f80ff9bc0ef064e19033236
+PersonalisationString.10 = eb249b714f641102d1f24d274c3267c32f5ed6e4d32fe5ab
+Output.10 = 36717fcc062701f88960fbd209baacddb62dff8403edf016ec54e36e7d6d3b392b955e4d6c0099890c8354c2b796ae81e0a5276298a39b82901b62252d3dc97538a47d2eacca41f9bf7893504375bd47ef482948891390ba7ab9878e9fbad69c6b576b822e2e46697b0051a8efb096f1
+Entropy.11 = 107f6c39a6cd5c119408ff2a56efafd487dd994eb9ea79ca
+Nonce.11 = 9f07c0e473afeba57423af15
+PersonalisationString.11 = ecd1ec1d7af4b2a13a603bba80ae16b9af1c7f56d80e8b01
+Output.11 = e6cd1028751fbce6dbb60d61b6286820bb201f10f696b37b6dd504182c6110c9888cdba5d0e2acd1cd5fef18bf6fb802bdeae46b145db0894848012c838aa6c0d7899ba5867d3af52d89ac1d7711ba5cd953eafe917f35a6ced3ffd2fe5c2f266eae20c77c5e406a3d9818a8339d5786
+Entropy.12 = 888f7757e59da40cabb86ec5c931688a7f043d8f7f283ad4
+Nonce.12 = b7c5cde1289b62cc1c004fb9
+PersonalisationString.12 = b9a4f1b1f34126e5e8f27920d70db25c381836edf73f08b2
+Output.12 = b21e6dd34373a7681cc23b524e7b25fb540ca512435d4c0dc93dbeaa495e70a9b4629eb383ae4b275b59021b27fb4029f5de45801f040471764fefdcce0186b56f08274c7e5af0d2590f75ebedb1671fb5fdae7466e13f851f52d9f027102be0bdce66e01849c229c5c42635060aeeef
+Entropy.13 = 1cd10ad0a015083c3d6f24ff837e51b3be5692d51937fd27
+Nonce.13 = 1411349dc6b43dc7534cf42b
+PersonalisationString.13 = a85c155a5cdae4ad4fa5a1d3f0e691eb9b038463f259800f
+Output.13 = 491313791ce732b82e535011ef3435ff8aa547c2caff104a665f1b87934808b3afef4496b93a3c002febc94cc465c772284080ea9ad47abf7f560cf0a01eedea733a3ee6bf38eaaf83e3213245fd337973235ecc46325be7660939c614a1a230feca0a5b08934fca989949cdeae83041
+Entropy.14 = 440f9526897f79d20473708adea88954a4739d7878a45926
+Nonce.14 = 7e2f3e4427d00de41ae92bf6
+PersonalisationString.14 = 2e8bc8edcdb3dfdd451542fbc68481b30964fdf8a6ca77cb
+Output.14 = df949beb9b33d2c1522cf6fdb3206cb10b58411ba9e28a4096cda7662b69d23e0da2be9557b9a3b5a8d67db4d616ae9fda3a7e0a8516196568f7a81474c0264993b141f14066fbfc29da724e447f6e503385944e902510f0b3971f7bffc6a6a202ff88d8113bb222b104055f427fe770
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 46ddde45b98fed77037fa8ea68fb43ba6f3392cefddd2eac
+Nonce.0 = a45f96b7a1336ddbfe85ba81
+PersonalisationString.0 = 2c67fc5cddc80426e0997498fd33aa00fd4414607f868d74
+AdditionalInputA.0 = bdc24367bf9d8cfc09d26e9530d2cdbb0db31918ddb15c9e
+AdditionalInputB.0 = 89cae49c4384bdc3bc660693cddf56cd1711474def060c6f
+Output.0 = a4b121425727d5c73ce3660728cf20f7c2caad3315b8309de92fa479adb05926a26e065909f3e4888bce158558234def80c1a37505edc3568f69b27791e78780cde40c1e3e9b2d271ce60ed9b48bd087f566506526c1a459980489cd0e6ca02d350aad9dca3d0e364296b961760e2d38
+Entropy.1 = 58b347f846c9b315104bf7c48a04933703825b97da941446
+Nonce.1 = faa02eb085823f290bf2dd2c
+PersonalisationString.1 = 9e02fc504b0ccb7839138bec99af9d9ac507e01c3f34d02a
+AdditionalInputA.1 = cbad01dba02f838f5f796faa3b514ed9f475bb75786bea79
+AdditionalInputB.1 = fa720a5c03a7f2a350f68b82cdd11d17ade8bda0f18881b0
+Output.1 = d6a9a44fff51ab1c211a04118bc60c4904f7c8e7b7375142036f0c23da33580339cd38c37b1bf8d9ed742beea284ec03565c5b4f6abd87be9d9b8434d403a8e52b6c0d9f0684d9e0035cf8c22fba4f4b7e4d33ac699662ce6ea69008ee2521ad0298193221310003811d39d96d381ac6
+Entropy.2 = 74632987157805c80df8ceb811b42ebb1a8d6be6efdd4926
+Nonce.2 = 5eecb01070fa639be1874bdb
+PersonalisationString.2 = 439a0e3c6ed0e4ab53c5830e77a0eb4f556ea41911b46825
+AdditionalInputA.2 = f6280e33413814c58c136646633f5567dd3c7958b6661229
+AdditionalInputB.2 = 082263d9c1025131d9b1c451ea9ccc332af490ee53ccb687
+Output.2 = a19fbde9d5dfb2a7c11ec095eb2931f85f613329ae89a33eff13646d67ccc0c42b176980947056f505d2665fa12d959e8a8d32c4f006fc51f8432d38f4cbaef238bb361aebccd9d21ba97af9cab73a4fa5cb6b5fd8c7559feef742c968261ab2e33da38fac1d630d0775e60d3f9382ca
+Entropy.3 = 7deae19a703cb88a2361d86326b819465499a7679fd052ba
+Nonce.3 = 0fa8a6d75f31fe2db5a11d7b
+PersonalisationString.3 = 7ccf88c1a1def998da19cf98ca066f476840b5e4bd695dfc
+AdditionalInputA.3 = d7fc4837ad61425d589a003465431546c58ede4110e3cf4b
+AdditionalInputB.3 = 28dc09ccd7f1b9c616b2d45306ef250ac58435160a63c740
+Output.3 = 554c29e5d2707c66f70e371020e8d4aefe5938b061dc362e810b5bbc5da1c83cdbf6441754bc0db10d0178383d700ebb56e8c4be777241f3cd7dc56e0b057d30bd326cc028a170f07868e2d9b7491f02a5888c8d67665294d37d324303ea42f13fff05b01d820cba0f4748e460f2cfaf
+Entropy.4 = 9563db55a321bfe87d7d09319bf23235d9228160dd5fe156
+Nonce.4 = a2abe2ee5b683a2e37b2796b
+PersonalisationString.4 = 345034bad8c3148b28075a06a17c2d2892d7eb5fb608ed8f
+AdditionalInputA.4 = a95633eb69863d2a84f4ee91d489b008af687e7bbc160bef
+AdditionalInputB.4 = b4ff8d84990345f7962f4847140090556e48b6a747632755
+Output.4 = 0eb5c1947f3c9e8fc39b69ff69eeaba9643497f28011799203a82b2c39d1910040b6a12f7168aef8209864c0dfda672334c4253a234d7bd21f2b7eae18a28f4c135e596a9adbe79226a03ed9ffbef4a58b564507e464dc5a8a1d4150127e89954b98085f78546aac878429cb2d749d0a
+Entropy.5 = 9c43382b38f9b820624a0b87fda180cca680a9865fd9a94f
+Nonce.5 = 9be1db042f7231b5e9b8fd5a
+PersonalisationString.5 = 2e72b116abc67661e18c839508b85c8a0624594e031572b9
+AdditionalInputA.5 = 7c95ea0277483aad448e213ada79602f952c990935a9e605
+AdditionalInputB.5 = 010bb82c853baaf66f2371a60763f64c7961394ffa8eb780
+Output.5 = 3b33f8643ae9408c6bd95105d7cd8e807daddc0adf7db5f4b5184e45aa68287244cd9f7ffdb65ae1a29cedae6b2063fe5c0111da109357e6dffcb3230e0abaa5cdd4d7d6ddcfa1aae00b52d5ed0b36833aba9cfdfa900a152ee259045a5291ca584661afbcc140677601a0bde22fb137
+Entropy.6 = 3a505aebe4beabf45a1547ccff0e486ac9acd0bafab5b118
+Nonce.6 = 3efa4f2cc667db0a6086f174
+PersonalisationString.6 = f8c2b4b2d8ddd2279d73b01d801c299334756149915a395a
+AdditionalInputA.6 = 8d43e5acbaf6828897ed954a80954ca2460ff794339ad186
+AdditionalInputB.6 = a19097bf67abee1a038b1dd5a88a20fd2429f100d3d69fd0
+Output.6 = 767f0201be1a01cd68b898f5aa77874ebd5f2c940e86849114e6abf2475e01774dce4918223ed4f2fb913144be07acce98eb31ffe1a10aadd671ab60ab2b814f3f4fb7f2ae683beb327352819f9b10d73d8f24e1ba2496e3542e7a654cf84b925ed64045c26b11778ef9002ebdf34fc2
+Entropy.7 = 7b5e5fc9a09afacd1ae4e71d248c4906fdaca57c85a79c48
+Nonce.7 = d9fb65dbbb02224e2f403784
+PersonalisationString.7 = 6f3fff13edc6909f817d022994fb1fe93071e2f6657b34fc
+AdditionalInputA.7 = 33e51ef5a8b479b6982337fa77888ab85f40357647cc361f
+AdditionalInputB.7 = 139b3c166f174e53eb559cb2809abdb5b58ad1deb8b9e5c2
+Output.7 = 60ce79ddd122965a9e6ab06160e576bdb78195332cf29c9c73a37a9aea883dc649f0df395e1c7f89a52f55bd80b19506d0e8a78641ed7661235cb71c81bcb5654b338aec635f4b5c86b2b64158b9689e307c4a97a385bb9e83f575f67ae331e63c4333fda3b8040027bf83b579279451
+Entropy.8 = c2319f76bf25e8ffebdd64b0fc03a2bdfbfde4d6e2f78a46
+Nonce.8 = a0d8fa1afe79bc40e6461b41
+PersonalisationString.8 = ad96097ccf90ea129d9b1721d93ee4086020e355e476463a
+AdditionalInputA.8 = e68edc4dc49169f681d1f1353b3b2d55b49846db81c5a31f
+AdditionalInputB.8 = 26ee0c941922cc16c5ef7b8ffddf48f2a2a4ea0e0b49e57b
+Output.8 = 8e5cd4c0f0717b06d25e1c54563228d0e6f751691c7ad902e380b18f09bd0bf46c2b96bad60c106ed9d26b399b80f074f745055fa7c10e7375cbf4e02a2cb7f062b4cf404a0182234dca2be69f0b0625f897a9fb2c596169fe8be0acd0f01f83ad5bc8f618242203c436197c679bef3a
+Entropy.9 = 8e6d8d9efcfcbbb8bed7f3323ba0b04cf815af9f4a4805e3
+Nonce.9 = b40e689ff92667a912b8ff59
+PersonalisationString.9 = 1d6ce0115398c5362f6e9ad62d7d37a4a184258f5a506e7c
+AdditionalInputA.9 = 0bdf19bdb27abec77218768e59214b0979adac536be6222a
+AdditionalInputB.9 = 178edf54f5f96bd82e93e577d4983d2f153bba7996e29408
+Output.9 = 02d79a029cb7d601c13ffd0913ec9d53f42e647c1172aefb48694fec2974bfc9545f9fd53c99fe70ff4bd9983c0da886f622315927e49c982128a64a6882d1ec0c7513e660875ae298e4c6582558163e299f9dbde5ce8dec518d546402c9b41f88fb6326d1f0be3c27d2a2213330c7e8
+Entropy.10 = 827e8e215bd31ffa8df600f99b6e8c969abc1f1f0f2ef40c
+Nonce.10 = b55aebf8ffd0c5e8ce2d1893
+PersonalisationString.10 = 584355cfa8e990d3387e9479078d42e8d8a590fa8439901e
+AdditionalInputA.10 = 2ff8fff65b445a7917d8d82b4740fcb3d8c71865764901df
+AdditionalInputB.10 = cbae7b65632eea51a2418a331b366ef9eb629f011f58094b
+Output.10 = acb9a14f721eb5aa378efb4c581b2dae310047a3f935d52c187ec611ef09bd0924b429857290c69813e3257c6e141295c4c797447cf13cd53f6903ec5e52139fea40af0544cb40626af6605833839881b35886b11b740d0898ca03b5c4389cd522d8aed9a1e3d7676913625557b49cbb
+Entropy.11 = bdb56b4118fd2ad9b059ee7b11c27811a1c928409a7db3e7
+Nonce.11 = 43f68c453bb36a6577eda89c
+PersonalisationString.11 = 9f6fe6edfe933dc0184a61fd06b272efd84a54ab37b36b35
+AdditionalInputA.11 = bd082b306f4bc5e6e872aa654d3aa82c11aba5eba3ee9555
+AdditionalInputB.11 = 1781a62f4c63f16f5eb4633edfbc8b9e653538340f6894f6
+Output.11 = 1d50ccd513be2a9c6283becd42a6d6ebe187d09fd05b4b7af914fda1fea1413d6ec59285b9f8a156da96e205415bf623b7e42e2e94b6cb851c0482cfcc705a3b09ee1f5a6db2d4a7b0e8e20879df1804a3f7dd03725cb01df9bcf185bfc1895cfe777a2c6b8782dc95ac91df71cb8daa
+Entropy.12 = 95ba955b8301837490ef805c00b487e7b4d9cfdbfbcc6fdb
+Nonce.12 = 26e75277374188f329ae3173
+PersonalisationString.12 = 2d90aec09ecd7f8b1f44585b0e6cfd035c23eaf8cd35acd3
+AdditionalInputA.12 = 6642eb07b42b9b2268ebb4c77deb8e1198b8eb4b013800e1
+AdditionalInputB.12 = 57ef8a5552a77a016d7da606e2706188a446eab1c41752bf
+Output.12 = 6c53aa52f02357646b19e0b356237322d452324a805d6e55c37b02a77ee9135c6b61ea6ca3fe47f67b98892015806d20580132df37c37f98818f0e42895057d83e67454f3c91fa8a5701d74433538edc1e1c1040bfe3bf040dece9e7521972970c42e7f9842f03640677d806b238ac29
+Entropy.13 = 9bcc73f7f5156b43ad8e435e5dda09827aa6527b3295c2c3
+Nonce.13 = 93e36bffe4d423a1d84ff20b
+PersonalisationString.13 = d9ffab14c4ecb7735548f2c1455d3b594894ebd3193e2667
+AdditionalInputA.13 = 79f393fab3becf59ba5d64c2339a98a8103d88937bd083ce
+AdditionalInputB.13 = 16cc2e1e2a9527b3625f7dbe0814adcbab0a2c9d1a6e7012
+Output.13 = b142fc12823400ae680f391cb3917d6695941d97a9f15c26780892269046a4056d7e7fb94465aa90acf17ecf0d6cdab45ac3eeb67d1e8d02694e48312b246be9a77f6257924ab5ab61e3e59191e3644b49b17516ba8d98df7df2a038f97bd31b23c048cc1d4b1722d023895ff656b026
+Entropy.14 = fa4c240673f669f70909659c0d029b2777d4ba4608035309
+Nonce.14 = 656a121e15ad6f0910c4863c
+PersonalisationString.14 = 73172975a452683cb4d0068b449943fd7e90bd173c2bddaf
+AdditionalInputA.14 = 23a781948449d82ee235d0495ca48d61aeb399d7e2ea68b8
+AdditionalInputB.14 = b52421e5b0e5281920da6975ee18d74ceebdd5d5de05c018
+Output.14 = c878a886e24e20a8b7e22e41ebb33a2b6e9a0168f4c72bebb78f0955c8449592e91c6a2f1ba5554c9459bf2702e67470c1df0b5125d651facc0a9339a2b7c921a51bc7203020f085c9231b3acd850ebfef0d0e13dc8bcfecf1f9853930ecd9b262cecaff0e2bed9e3b5b53343b733766
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = e3531d9061eead2c3e6156d734c868058ee1106d6fbeda03
+Nonce.0 = 49f1adbb9b0434e43b35f61d
+Output.0 = c83417e540a8b865e1fc67010f7c3ee53fbc7ab1476af839ed6a68b6868da3df1d7bcf0a391d64a8355483a13001973e6c41c7ef67775908e7722d33d74c3c1f1f4912054cf45907c44f63e95980d3b9431f693257742de46a0110d13e3b4a950ae1beb960827f01970a4423d1ff52f4
+Entropy.1 = 759643955856b089da414cb35ce5fef778e8b841eb4928e1
+Nonce.1 = d67fe75c275c5181e9707cb0
+Output.1 = b10bf0361c4c0bcdc332c2823ba4cbd5a467919209a8d26162706b7a9847d629329dc7b89a309d260d386196383925ec51abba83904d868c5b28d144ee493fc572ebcb76ec896e545b9e128d08d92b7e403c30d6255a8b61329303fc07e1d53924242aaa666eb75de6c917e41bef5359
+Entropy.2 = 0d65675d08778de1c87ea1cbc25cf043d25a445d7fa4ec5b
+Nonce.2 = 04a0474456542589eb16aef6
+Output.2 = 79c04cf6b5c19cc58233175a9f013acdc0f4133a44fbd2acd239ec7147880dc21abef48adca501cec91cd55aa5c4d7dd4396b8975d5ba94bc878e99eadd96cbdd43487fb238e7c88dafd5d6671a9dd7fce815227a87dd837bfe91b38023eab6c3b2c63f91d76008a4fd4d7af75700737
+Entropy.3 = 648c10d494a503cb365b9d9c13c4a773a45bba9283198219
+Nonce.3 = b494706cd2655da2b91d97f1
+Output.3 = 52912f08ad3531ca54ca395b3a82f03be22e5986a820a712831eb6fb040c4eef906216c752240a53a31d0a9fcddc00875c30ec7eb97149de5a407b1cdf7b44e1e8c50b5f5e9edd8074bd55a124ffc7d87b15446ce4c02ab3b6c18a5907fc1b19a910e71b3b83b708deb166d0668daffa
+Entropy.4 = ef089c54bdb8662eb33221a4ef4f17d2c94cbd10e409d6c6
+Nonce.4 = 5cb151a90e401f0a950950f6
+Output.4 = 4f4a23bbd8b8c854f071aca737baa6248f9e83ecda5ed5fbe9d1f783ae212f75efb298105c405669eed22452b69127a67b6c29173f6ad3b484cf9d79d0a54c9d5088e483ddf2ceca1c92c3a58781281716f4df7c1277327b26954554bf606a1ae2adde82658054ac65d8fa65216e1852
+Entropy.5 = 210bf15ad5605cd9941fb8b309c3814abdff496b7026bdef
+Nonce.5 = 6f6ebd64164b864c44c93168
+Output.5 = 3fc9b64ce46cd25cf6914b3af2962d45cbd8eebd8c5d76fca762172cacc32f86657bec562e325fd7b108adbeacac976b496882dbd43292773cdbe70e8f327d4c96c9ea8148a867d2b32acba33f665984e5ce9e4a70a5ddb534d66677864a0ff1769313bb6a7906e34051beca587040cb
+Entropy.6 = 5930207a31b4c30034c413ddb8e45369b800f3134707065b
+Nonce.6 = 2239d9ad0ba0982832dd94e0
+Output.6 = 5155a1838cbf95edbcfcf08a66e5cf5f84ab4c80971c39d1bd750f1aef0450abe49ed45ad4a2202330e46f39ca3c95bf09296873e2655d17437925cb9d224c6999a7e21ec60960459f3e8eb4b0ef3f400a8bc741ea14017ef9d6e76094d7f48dbc87f9736c3e1c41f6de94ad2f6f9b36
+Entropy.7 = e3c43fa0c7b8b0a983f6029bb588da7291249eb39cd6bbaf
+Nonce.7 = 9a03150a7ee282422b738cc9
+Output.7 = e9f7d7481f9c8e751f7d6932bac17beca50ab599bb84341dfdf85af59c59a4011fabfd91e9c7d20936243709f1a54fc895cab112bc08cd2ec405164f2a8737b2435a89fb9fe9a963b90dc85f0a4b572221b4384d872ba42a85cf3f4afda8a12ad58366c674cf26b3d39ab29b557315a6
+Entropy.8 = 6b9ef81228eaed4e83874f3e0a77601a640b62e9893e5985
+Nonce.8 = 5b895c59177332a152203c51
+Output.8 = addfd3f666e9a55731b7b7657f9fb140f1b87ba509a4cb6e1d67bd5ebee7c91e045551ee10ea346752bfd4ed598b476ad842beaab8c4d5713433689229c183f6e3779b1bc0f03bf1cdb0d5ba9601caf12525b63f2c71aaa46d98910d20c40fe246f4733d8e380ed2b7bde5577e053c04
+Entropy.9 = c53db93a94584242255e96b86198688aed0c6412df909d7a
+Nonce.9 = ff540600f108783e8b0a1090
+Output.9 = f47462b296c558efdc0e06d2f4a4e389ce6e0a8d5b18ecdadf7c903f8b33817a2b28638e4e1a6caab9ad9dbf6b5c78060852cf20ed4934bb1b9498be2738175b03ea8b360b030bcac5e7be9e2ff4906a100df7e145ef7d4b5214ee688dc94a8231a24e221832884985ed6d4bcbd2010a
+Entropy.10 = 7f1f29c7e0d1c2696c3ef8dda22b3d85d3ac800ab3dcf2d2
+Nonce.10 = 10f84345eefb4de9437679ba
+Output.10 = d1fc4d2f9edf1af5ec6f46e6774695385bb124dca4df58dbd487fe043e4ee32d9fa0e4fbbbd48b1a2c7d5a40ad3d442f99b19e002bf41a9f2140a9b0960f4350ea4ee2e54d838dad4bdc9ba579b4d48b3476855df21fffa361b7e48bb3da4555e5cf3b013f0a9c2bf799cf9e37789df9
+Entropy.11 = 7f11a3ea8986e157d398cf9d8821e58ec54b03c074a0d695
+Nonce.11 = e1542d2f485d8d38ce6a0e26
+Output.11 = a1be459a9aec274670ec0551c8d7eb04a17e641209fa9ab023f4cb1e4e239d8b514fa624420ebbbf48ca41c6d185429fe8dafd2bc2188f8839248c0cb3c446961950ba19761083d7ff3dcdb64643568faa93b17501518fd3b28418c8cb12e758f87bfde156743e16c14dacb805274c69
+Entropy.12 = 382488fcb96104b16a3f5a022913d67a5e9292e42f983d03
+Nonce.12 = e42e979ea87b26e284e02fa8
+Output.12 = 1524934e50ec2aa9fa500c942b6be91928e2b74816707f3b13922fe423a00b9f3f08af39afddc4166e43d8cfe67c21ebb81b9502ed635415601dd27b3c975105efd690e3700330803dfd6833e1e080c22f2fd49e63bcfaa75c55d00e5ca32d80f075de00bf475659064d96da16bf54ab
+Entropy.13 = 591bedd004dbd24dd8aedadf9e06ce459ae797c2c5ca1d58
+Nonce.13 = 1901a9199ca809fb79d003e9
+Output.13 = 96fc7b246e91af2e3d53ee09661cec50462717ae0d46bb07419b3587e8966f36c49cdfb65a4b93c9272f992006d93428a48ac73806d848ee7869d06069f5039e0b4941c28f56610d727451475dc3ab8a8a997f65ab1092038e45e4e95c8ab434a2ddbf114805f889b788f43fa8365fd6
+Entropy.14 = 04c61e5cbd79804118267ee1c76db36b71b042bf60a1c891
+Nonce.14 = b833be09092d4755ee6118f6
+Output.14 = 0c4663313750b12daaeee80cb28f097cbe6f50df2022f9ff02a51fb373da42411c5856a136e9645e99e69aee273726d146e3ef4e546273eeca52b43c068887148b7197143f5b9a4c55d4b0544907ee9ad2f181d1b37742d1479d39e78e47505603550d2b28bc1d151a50bbac140988ec
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 2a374f1b9e48284b53fa6b65e7b2c3a8f7ad212f4495cb30
+Nonce.0 = 502aae33e7d4f1d1934b674b
+AdditionalInputA.0 = dd2af86c53672c100bb856e468b4e42dc0f7b0d73e3c3ba8
+AdditionalInputB.0 = 2962f344b83a91a2346bd22fab91fe0bd0b23596f9cfedac
+Output.0 = 77b751b44b7816f93e024a571fdcb4f909abf685cfef2ddec2e7a3d7cacea7ef879653458d5db7398bc1569a5ee4a979f9c8c973883b2c866dc41217986abdc8c534ab6fa3f623dacc1888df1ece46892587e288fc4f07ed4506eef4775ae6aae9756a704b4ae3503ecbbe477c18c0ec
+Entropy.1 = 453da7383e61244dcf6c49ae18ddd190e1214080d01425d7
+Nonce.1 = 189b4405242d913dc7aedccd
+AdditionalInputA.1 = d46ba90eedc984d542336b3625a1739a06f7ad76cbeb5ddb
+AdditionalInputB.1 = e6fea8e1a7a0534fcff5ed7ad2b0ccd87d44ac98397686f1
+Output.1 = 62d6ff99a49dd80751c6bbce4012c8b6b84f818d9e5f74ebcfea24582175a6a004182982d13f4a07d692f7104da2b28d60d70de62605728674b7378a862382700604339ce4e29d4c93e37d521ed35cf00fb08c9558caf2ad981e4b14c37e29fd4ff926cc35a623d481580a51ff7f3937
+Entropy.2 = 2a1a528f725c2ec6f73423865e068c5fdd77399622f58bd9
+Nonce.2 = 68d9e0855b8542b33cb8c974
+AdditionalInputA.2 = f2ee70145e3bc1a41cf0726a46323ffc84d59440e476edeb
+AdditionalInputB.2 = 3b508eac8a11aaf32e5b5e66cecc55376de2ab1ffe383445
+Output.2 = 851df59060efdd1e1e89145996d57f865c0904b7887dfad3a49ffcb2a46871e35b216866d1f79ae8f6b9cbaaa9e98a498013f86abc09fb73807301734214c367207d351e7256c0794702dc052ca4965e60830eb12572e5164df08711551efb6e8102b0201ea1391032e2752fecfe12e1
+Entropy.3 = a7db1d1fd5523e296004111ceb2b67eac91ee1fad3daba27
+Nonce.3 = 2e7f522213ab9643c4ee517c
+AdditionalInputA.3 = e1607ec4d62af93b705ccb88ec089d39219c964aa70210b7
+AdditionalInputB.3 = c8b628c45bab8d44f2b49428340c67e275dedbae219b202f
+Output.3 = 8028d91f312641c56a8e3604fbd50132df7ef4d191f3e97d70f2ccce6f5a6718d0ed00e14b7bac235a2462f1865d86019195a796e7c62187c823192157f00cfd4c98a2722be766dff8d2ef89f616b6727be540513273c510c8d7570c6739507f2560bb18dd4cdae337e0ff8222a7ce49
+Entropy.4 = 78c483a5e54b968f81b3342d86d9250001691acb66599b05
+Nonce.4 = 5ee32e6664bb4e5f30e0d079
+AdditionalInputA.4 = 00b801917ec202abeeabf7ea78e6b03b9e785f7f36298dc8
+AdditionalInputB.4 = 45c22ea281c17ada08a6fd3634d6615c018b097f7b7ada7d
+Output.4 = 7164d27163e571f970baeebcb4c74e197c3fa0d93a0db0545d076654f6f64b7bea5801481bf7f6fa30924f58779a72108bc621e50ac7008dafbaddc61175645cde5e63467ccc85da3ac0a23ef565f6fdee981360a7499a9d1d6771d4a3d3f072e39566ac5252a66828d37b2c24b3712a
+Entropy.5 = e7a9e9d0c2a71b6272bf4587888c0f6fd553c542c4d4c2da
+Nonce.5 = 0b0dcd7cae761819f1b4a42e
+AdditionalInputA.5 = 0dff8772462c6a48ae96a0f0e843c26287fe543a30423ab5
+AdditionalInputB.5 = e9106acc0e9498cc906d0cb15afc41600e3bd54f257ed8a1
+Output.5 = 421c4a839698ac3e93bf795046da5da0cb986714e9235cd96c1a21830dcf352f526adf04f1ada8eabe770280dd615105ca00c0adb8e2d548fa37ede6c4007eaf9c8686d3cc4ffceea6194e629ab41fc2271ede091233bc570d134037d5e33908570344ae33a91a5d2a2ddfd9f4b97242
+Entropy.6 = a59ec5b841e942983eec7f3c03acc4809ce393f8397a86f8
+Nonce.6 = a65242a7dadb5b78e979ed74
+AdditionalInputA.6 = 167cb7ae8565561a781b5894cdcfb5062233075fc80f1c72
+AdditionalInputB.6 = 9291401c131b56f148e7514a7dfca06970ab07758aaa6533
+Output.6 = 500d2df6741712710460426c2c1b4671d7137c3410ecc3366d124b12ea790dfcec70b1a1293c171174c5de88e8b74ca67a2173dc5036430852444e4a7b76b74993c2b1ae1b23bf0a852c5fde8de0bb753163053f8d3331510a3a54895157378e57f05ff1bb56046aa318d9bacd86dbd7
+Entropy.7 = db38a6d0352ce5a84c42839e36f28a2b9651331330a193f3
+Nonce.7 = 1765a056a954819a7d88c513
+AdditionalInputA.7 = d24b06d2d28fa36adc5c13932f267d9790340b1421b7b302
+AdditionalInputB.7 = f6ac582cd7eb332f1313071b292c26b8c9d827c7a1e13b80
+Output.7 = 48e6da10ff39b284fd57d7d3f4a7d035d0bf7c67e9149b8d031973882bb42d0431648b9f91b2bff4bb079b79abb40a565a391d306de9f18d258bbdd12dbaba48db62cc4b657df4393a607e4342d2b71681e8b3a4d693ec29841571aa7bdfa442db7e4e47b89a84f80650f70005612668
+Entropy.8 = e2c9d56b67cb3a03758ad1d959d012967291ad22e58ad723
+Nonce.8 = 8aabc6606319643aae9d1756
+AdditionalInputA.8 = 07726bf6b72b7c5d70729332f3c35488b60c3be8fdf05902
+AdditionalInputB.8 = 9b3c1cebd6715cf179c422066289f4cb67d1256fb443c79b
+Output.8 = 3e2f34815f5b699f3e3d565525f7c70e5a3d016596b31a1022db66e286d54b8f9d0b33b381f67a63e2c4d0b0c01aa1912ef6022ea647675e3120c755a38040cf495102a448d1a24e0f1ad89e4feb13bf99ceb522e6c5a54cfded9220369f73674ce8fa5e9fc75466bb1ccfad9a31b5d1
+Entropy.9 = 854c45caa4bc9a416c089db8ad30a31eeefb875a8cedec9e
+Nonce.9 = 229b238f05fda43798705df1
+AdditionalInputA.9 = 092ef6173d7fbe83ba285d7863030b2e55f4616870866619
+AdditionalInputB.9 = c1cc56e32151576144f1f53bad44baa753d23cee1462f4ea
+Output.9 = 5c92987ba6193017ee002b023417e1f3da2b16e6a07d2dc7a94345e3b2a8c7367b46a76ebd8be6c2daf9154e55dcda7612d7378f800816804ac16f5c57bbe843b0d23fa0f6720bea34bf0797e6c81a32f9fb366c26b5c09b8140ef51a7f56412ecf44b6e1b35f80b0692d620c0af2b79
+Entropy.10 = 5985a1eb66c44d136691b1364852a7ab8aa9c7a59f8b1cff
+Nonce.10 = 61f3a45bf46be1e707978165
+AdditionalInputA.10 = 8fae2a00f4e40c1105d9e147a5563d48234c67616ae92fbf
+AdditionalInputB.10 = e0f1a6f3d39ff1f80fbabfe9dbb9ea78823d7195b1733a14
+Output.10 = 0d7c66d66e92375fc1b4d8da02353c8c55c343d7c2bab01dfdb0865e23f15bfc19da44a72c168cd1d620f98a81763f83201555fa6cda1a3563401648cee1c0a17efd86ae7d33756c518d635d4cd8dd9921098052e81833a8a2e054af3d05e6b0be9373a595ca57fff3322e30bf64198e
+Entropy.11 = eb6a7bb8c9bb9c13cafc0c3f936ccaa6f0950c34bfb82164
+Nonce.11 = 67485bc4ac4a3c97762e8ec7
+AdditionalInputA.11 = e9481922f448b56d7760e5abc7a8fda1b2c6dd0eaf78afc6
+AdditionalInputB.11 = 1c395e4b395ec43e7f385af0514d7ea64b0b85c090eb777c
+Output.11 = 7fd067ea549a95b7b5f70e76e686a2f9d61a5a6720b5f77a314904b3653e5f7e959b9bbe48a2fffddb6b193ef3ed2f0d2e11f24082701c83b2e824f82e34b31e713e3927a0485f3b0c1c43ab95410796503c9af3e201a7d5c36b89f04b1a7f48408d21fa008bb80b6aa14450cadf5ba6
+Entropy.12 = b4630e1c27ee087559d02d1559925e13a4e24c22d5b69ee1
+Nonce.12 = 266237a8750d6d3f5394af00
+AdditionalInputA.12 = 65a0520a1595f6f9043f95a1b1f9985fa0383ec60a67aa68
+AdditionalInputB.12 = 1624ccd7b38fb92dd7b6a95b7ad25508a20be2ecd9735cf7
+Output.12 = b13d6160c6b96697b7d723c151bc0921a5ceb8885e893e2b0278af356d61cbe1bf7dfdc4cb2cb8b4924aac495915251d0595d0300ed72a8597048fbe347bedc42b4d2015a6496f7454cfbfde80e8112f649d9b5550750b5b8fda0fb8434a5b5afce89edb0b6f696023e2ba8ee0f9537d
+Entropy.13 = 6fa1deb8e9e3c10c181d2254e5fd9bb84cd2934188f71f7b
+Nonce.13 = 6c4fb17c1e78e6ad32a203fa
+AdditionalInputA.13 = 55e9e961cc54430c6de5f22735dd6414724232a79d0ae73d
+AdditionalInputB.13 = 52b8961acadf12310149a01f23555a075095e30363e71728
+Output.13 = d6141bbd4ff580df7ad8db354b0508fd1f80ea7303248d03e3f1c39cc1949762dcb22aea5de6af795471db2a57ed77ccc9573fd08a47a8ed45829a86666cb12afcb6a6c3085351f891b5107742fcc1ea31a7eb48a0bb15af8db9571c852f8c56b39a80c0e55d418f8931906b223656bd
+Entropy.14 = 13e82fe78cc31a8cd6182de5041f013bb88c8507539f889b
+Nonce.14 = 5a01e4ec918e6282c62f8c0e
+AdditionalInputA.14 = fa3bc697a6bd8ce341735365ad6e214d1e53e8d6d0a2c206
+AdditionalInputB.14 = bea0650424d1f26e75a49ae2dc529f1fdc552e3a0aa50948
+Output.14 = 4a718257296a3a99f199a5a24decf8f3e6209a4a7fb0b24913393c8309826ffcd6c47208ea6879921424ca55e63a7e5bc63a030cc48be7648da78fc9f314dacb2b8568635e5b14a94bb06a709a2f023a86a871dfd708204c911d94ef3690b3634e58de03fb20091d628bec834a760dd4
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 964605b6d66e9a5292d9d31525bebf746e4389a2ddc7896f
+Nonce.0 = bdf90e33bcf73335ffd5b6c1
+PersonalisationString.0 = edcbfc33b078bfe6b4176e5be38218d55ce79f2a66116a5c
+Output.0 = 54c7c78469d75c95ac0745d19e9c119a227adac9654beecf7bd9e450e99a2f18cbce799aa3191750ef33f3374fe55acc8a3f6dc0bb25fa2dec93d3567dbde2d7b97db688fcdb693d6737e5f5cf749b8e9be61061c2e568053b59d061f397325262f67f2226f020a2efbf7a35f0b7ab67
+Entropy.1 = 0258db537a8e9c1d23bd71b29bcc1a613c5e9c709cc2ecbf
+Nonce.1 = 0b465ca6fb62ea62929ea550
+PersonalisationString.1 = fc4666d977ee84a698a3d9d0218d67d1f8a383582dfe34be
+Output.1 = 85501828b47fa6214fbecb914c95a8a0d66c1c934bda76a1bad03c87cd3e2205e5989257eebe32892dffbc1ba5ea3fa59cf06ab0fbc30b0b16265e68bd726cc03f4539227ff2ed3cde6c4b0f922176f05ac4fc2135814f9c72fdf1074793503e276b6d724fb4a9a2317dcaa1d90cc111
+Entropy.2 = 7e52360fcb0515224dfa9667da4f81a0f1e0939d6600195a
+Nonce.2 = 6b4dcd641c9e0222a198d0dc
+PersonalisationString.2 = 6c6924fdbbee036fc28e0a81e85e40553067eadb80ef0125
+Output.2 = e6edf2d7bd306163075fa29dcd4febafb5444a491de16fd48bcb41b5145825a3028a0be45fac95dd22f6ad54472115aa6956855b6ff451fa0ef1c772f8e6781d888b02e6d40250bc2ff3fe2441c69f60387e8830f74ac49ba5dda06719983b34d7455827e30093268422670f23722fba
+Entropy.3 = 1c3a96b0e8678021629a617f91f72799226bc752ce3d1ed6
+Nonce.3 = 33b0ae9c091a4071539709f3
+PersonalisationString.3 = 4de61783ce5ec63f8463e0060090bc344d7f8a67e4bd1bf1
+Output.3 = 3985215aa5ac4626d4b0e6810b018bc3499844a257a51e2eb9a1ff14df93bf1966ad825f11d088163703819cf3a60faf7ca2b82309cb879206571e2606e26828a054bbf6cf0591b7461d167b6db830a3fca4438c2b4bdf3eb9e4a6dce82128c5248b0172b22b1db4b002dc54414c267c
+Entropy.4 = 94dd060cf231cc665c6da4c9e2567631561098def0e1feae
+Nonce.4 = 0367559d20ae369046031853
+PersonalisationString.4 = 46e690d7bab0331edeec345b74d7df0a44368d066d71afc1
+Output.4 = a0454c64d8705e792dfbbedd8767a647846e269715813750f3843d8ed4339c7e12b6477340bfac2cb6473d0dd0b6042d9ef4d4c93c53f8901af5888f703a8522f944ebedbf4f84b3a3ad8edd1ff4b764c287cebb20b77d989d8cfe4abba7446604dd6393b6c89926b6ffda462610522f
+Entropy.5 = 3ea5b0eaf326fa080ddbea65729b06494bd066d6a47287f2
+Nonce.5 = 03d01cca4eb32fe2e439d472
+PersonalisationString.5 = 93df3bec33d9b3ad7cd52a3055731fc0dc28941582fb8acc
+Output.5 = 6a1fdee1c3ba9ddb5969e01e601eb752c26b586e10e58b6edabc70af65870b203db1e8d1de547d9cd42c6d7b5b202adade23d65ba2b9abfc7406d11a7fcfd1a157ca7f50aec50c729f44b9d8e13ffc86ba7c34d9d769d9ad1e2794d100ccb2b413f7daa3a462c5dca629afc3e1988263
+Entropy.6 = 69b194b5b6ccd5718f3b86eecb545cec907b2e6127ae9fcd
+Nonce.6 = d7a3946a8e18be90b16d71e4
+PersonalisationString.6 = 187369638adaecef00ee0b98f22616ab0d16c0d4585984ba
+Output.6 = 38bbc7f20deb9e7511eb0935c4d05520f86e51f36d1fac7207f2fa46f446296e3f88d327d04f1d8773bdeb41208d64debc2fa22a5def63cf3ad9cf43afb6c56f6aece59bbc06b2bf9381dc98e323fbddaf92e98dd34771f153e69830e56cf031cfb12124df669c50a0c16091db2a25a5
+Entropy.7 = 070481a6cc60841845d8ea7a1f2bfe6a739809f51d81f723
+Nonce.7 = 20076e507774e4389c938c0f
+PersonalisationString.7 = 8585a41496f00e4636a9f749701b8e4eddda2a2788697a33
+Output.7 = 3f696485a1527a0451862cf583967ab643805532d177953353f45735abe53cb4949f4a5ed7a5a16615edd787b91a58fdd62601126588d7eea751f7d4e1c68e60accc8111f1b32122be63b546ffffed4e78c8fdde3e1e7a9de80a87f2c448d0b2f1f2279eda99dc805b4a90551dd11a4a
+Entropy.8 = 0987377b837d2d1974ed89353eaac47b1203820a44bbb47f
+Nonce.8 = 1248a40c04dc13c12c4d2820
+PersonalisationString.8 = f3b51dca8e1f71495e889f31267e0002f9ae2795f7a088e8
+Output.8 = f5c9f13647415e38dbcf51d9fa59fa255772d7491a25e1ba9fb28e371f7e342a93f9165732a0018daa391e572d997bbe182a7a5dbf14182aea5e00ff461f91af73b7d9bfcc0090618e874169e0933f4761d1645f23624535d5bc6acb290ed75be21fca0840c7011ce482e7471cd3ff8f
+Entropy.9 = ed5dbe15d70905fbebfddc983222354a56deee50bcc7ed9f
+Nonce.9 = 1b0c08e6b9cbfe408288be42
+PersonalisationString.9 = a9850055c33bbb3171eb5191363d586a0feafa3b7725e15d
+Output.9 = a9bd2a135e13f46ee4bbd1361186c9111170dec4204f74119fe0754cc94796f417448b7814e6a651dfe89417e5ea4072f6a68f90fae052fcd2de131392dbd8df1c18e33fe02f860ab4676afbc946a7bab81707ef91455430952a888ce036561768ace89a4c4dbae3f3ea3705f25a4e3c
+Entropy.10 = e0affd64dbb37e7e3a8d497b4e2165f192736b6bce012d04
+Nonce.10 = 0e3acd9ac2002c119b40c0ba
+PersonalisationString.10 = abc6d1563a710446da2dc79010c19382e9b53d146bee5f69
+Output.10 = 0fd5021b2aa099973f5ca8cb457b6cd43e95ef033c6f32d1bdff2a4e74b09cca325a464613d15155b52ade80beb1932afaf1a70a0346317bf8d6b6304fc25149c9829605d6f8aef9af3e0e59d5d91d05a77e135f5a101698222456a91b6812976b1553e54c7b8e8fe55627f881b4bc96
+Entropy.11 = 83ba814f77180faf0c62e7ade044528360406d501428f160
+Nonce.11 = ed146ddaaef8f87227d0a031
+PersonalisationString.11 = dfb64abee8c98592f4697c521d91fad6dc563ddbff54792d
+Output.11 = 9302d1859f659cb3da6a77954bf767697ea30547c815f92afae27679a7b3828c04341f6f5d8076c935516eaf6fb180ffc5cd24a3a1c18ef0af604fd60c21c585a2ab6b8e309ca8796344018b8fad59c10acca5c8077165d7b42bd23e51bbe9fd5bb02bd7f1e56fa462122964cd504173
+Entropy.12 = 1c0b42ac60d38a2f1f5341f7f3c1bfb1012baee20b48c354
+Nonce.12 = e3b6b51e2b2aaddc1fce75af
+PersonalisationString.12 = 5874d0e0629018ee07aecff06bc0ff40c8af290ed80a9675
+Output.12 = a778bf7bfbc3aad8bab72cf82a389c60310a105357b522b6961665b262145b4e2dcb436fe4d796cea8b76885a18b9b33e1b8b513758c6d26dc8660d780ccc01c7e52f12255df50b2fad5711324d963b5238d98d4294f32212cc0f809c4455e007a6aef445c1503d1ff364d726c04dd0b
+Entropy.13 = 523ff413f291ff6bb96de180b81f4eb9c0a01e791663d80d
+Nonce.13 = 5180eedae67148170d37a105
+PersonalisationString.13 = 7847e7a278f2f19986c00c7d26b7331c6e0a600218b67bca
+Output.13 = b7ab143c7d7a34c86c9da733addf6033ac582c74596eba1e5d30ac1a77f90e7dc7938a99f717afc877eb7abe6723b7b5821292a9013c6e06814cdbca2d0a1fa73c927b9f74abcd3b7227552e82eacbb2682f6c755a97bfdce54a24e97ea8f7a35b0610c1cb87059ff2d65f16dd8563ab
+Entropy.14 = 454adb53a146aa9808331cb86e8c0d94495f4c0b4fe5c716
+Nonce.14 = 4b729a67449bb5675a1f9d1f
+PersonalisationString.14 = 9160b7c96fd367dd7d378e82be11ad1827c7661d76bc1fb4
+Output.14 = 1d7ab4500d99a18b8be2ffb8177c869059e25f1ffbddb36694fa8561da1d71f86a38accb1926339f6dff71ea8ed104c3518e62b00e520c51a096c1c62469e56b139e6384e982588e748a8074dccc51d558d944868e2b8e1dbd68bd83c663447590430ebe15c64aba4669d1a4a784d8c5
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 54b0055affad0e71d23d83f45ca49224fcdeaf01f466ea42
+Nonce.0 = c64396b801efab9220c03521
+PersonalisationString.0 = 9114711d6cbef07525c4fc0773b71dc499504164278fffe0
+AdditionalInputA.0 = 7f1b2869608f86a28d9cab4362cf9f61fac61acf305991d4
+AdditionalInputB.0 = e61973beaa0574dddfe68e7f2ca6ec1390063bfb628cde77
+Output.0 = b690aa03f6acb761a4f338d956167f2225479caf73aab84f064accb59240234c183a097a906afce703c0b025b0385314eb9e3275e60e26eb6a6e814ba7a9bc5720e904a31ac15d847035883798ce95d7292cf033eead3854264d15025aa8e4541fee4df1cf7615e226d1a4607ec69865
+Entropy.1 = 6e186e536fe41e9d15358db2597f287fe57d018fcc0748c0
+Nonce.1 = b9856170d5c84fee7fc144bb
+PersonalisationString.1 = 0ca903b164456491c4a0be232472d8c7354a1171a2c74dad
+AdditionalInputA.1 = 6a5cb69de6fb23f7f971f8ea9f1a88d95eae40013a317910
+AdditionalInputB.1 = 246452f5f59015f096fd854fb5fa032f21f9563b1a6c6726
+Output.1 = 872a48dc70969f5b1c88f76d50c9aaa25b9ec4cfb1091e55fa7efed2eead1fec26fa64bbec2ad5f0b1d8e16b65fb7c28a59a1f27c1548585a73e0bcadc9c3634fe3993a24ff00c8fe07d688ff1024efdd2b2fc97fac8e61b93114854ec37f5be20331d92ef919b86c383f78f7dc1789b
+Entropy.2 = 6ac2a32f1dd17b95999f24b2acc717105f9d990931cdf5d9
+Nonce.2 = 5d0bb25aa82e66f86519e6fb
+PersonalisationString.2 = 555689475c716d88ab2e3a1f99feba9325f1b1d29373230c
+AdditionalInputA.2 = ce4077ed89813174863e4103b70393f3c3326ef13936a645
+AdditionalInputB.2 = 23c391d7ec13148048448cb43e5899ab3bd924af4b44b75f
+Output.2 = e3765ba7a62972a271994f3aac87f94f2862e00c8462f7ddba1f773a059f9b887756155a5b7b00d6192255ba2ffe5ee6308e26867d363bb6968329789a622ef657a7c59f5919460ad5316d9d30e22439add62651912685b44b7f80d771509bdbaf9e56ad67cf7f52c87c4bbf450e6f29
+Entropy.3 = 2cf506ece0b5ee12a70d8ea99cbfa29e60b51261a1055c52
+Nonce.3 = b646d938449fd38095740a80
+PersonalisationString.3 = be5cd5330969bd712bed97c68425aa9e47cca9468dcef189
+AdditionalInputA.3 = af11b59ca3903fb9f1017d55d5dfa3e115f1f4408c029d75
+AdditionalInputB.3 = 58c9ee30621c7cd77187ae3b97a0c4b662c5f942de05dbac
+Output.3 = 399190fc55f749c6c6c3aac0706036151851081a35fb057dc69905d11c641adbff0032face2b014bf78c51bfe5f31f73681b5d2c858be306febc762fe8d5630174e73804d3d56667511b232f238334e56a5e7d3a432fc9c5d8535887ce10a011f33323d32391727546bdbb8cfbd5c11d
+Entropy.4 = 928b96a549f48c38ddfd71b1e26ff7d15a8a73eb8ac2cf4f
+Nonce.4 = f8e919552e1dba184bad9efd
+PersonalisationString.4 = 9e4c74a0ad86719fe0b71fa323458755b7cf74ce55dbedf2
+AdditionalInputA.4 = cbca1bade06a9e225e29ad77fa09e198e50afb5a5440b175
+AdditionalInputB.4 = f873153bbf917594f2b3d20d0cc643ae3cb6d6b9ce29e41d
+Output.4 = 04816df161de286ab408f27193ac405724402d6293f27903412f5ffc0b466683746cd08dcc7f8be5a89d0eb020f8ea3610db3e985d6a739e1d261c060af468c4bd9a1275fb43558bdba5c64a0c20d4fe9dd77cc4b240530ca336a5d11846942cf0eea57d2434568e19683772e7729e2c
+Entropy.5 = 778e93102fdb42936b697feac3620ccbbc61a16fde121eb6
+Nonce.5 = a5fdcdf6c1920fe552d925d2
+PersonalisationString.5 = a203f263ab77286e6a80def472bc5b775202cd607d1e6d47
+AdditionalInputA.5 = 05add19da67b9f4608c770dff556c0d783a69d8ba5c8e95c
+AdditionalInputB.5 = 7add6db36627659939abf112cc25216fa2799a8851bdadda
+Output.5 = c06a1da094c5076e3de20cbd107b6800c7946514e45871157a2a5cfb2cfc24f41fb396120480093a5a27a017321932705d7c79c96ba851f0a82314d201b0d7fc170577e02f3dfed405a2e0ce623d7a1d5912a2ecc840015ece833de30f1556e8708a491dc7ff2b9b6e6dc4c2e49d87fd
+Entropy.6 = 075549db0d3eebf7df75dfa667a5e00e397067ebe76bfbff
+Nonce.6 = 91dc01521c3fbb72f1b65a13
+PersonalisationString.6 = fff91043b91ae77b30de5a822e11d4f4f41cc4442e032155
+AdditionalInputA.6 = 7f719aba39bf0cd3f4e5e9ebaeb4adb0fb8bebba47fe4009
+AdditionalInputB.6 = 2c298c32e7542326707d4a56cd4ec004dac31c2dd5205e11
+Output.6 = f537c48589de81857f6e1f0475c465b45d5cf754e1332c8baf015c31f00f4e346148ec832d495c92d322bd2d6218df1aee3393b889364943c4766ed3729bbe817e6b9b2be8619f6c20acd4eb50d7b61c92e99fc0ae8c3577a5fe42787a699e1a7b1a3b27f2ee542cd9e2d946045b4d2e
+Entropy.7 = c8586a9f2a5c9207d0b24e5c491e56dea8b1f84a39c1f374
+Nonce.7 = 8a77ff3dd4f34858c9082d36
+PersonalisationString.7 = ff1cabddb2b1d349bdea575dac3b8118107d9f54abeaf94b
+AdditionalInputA.7 = a8a8ab52cf3cf5e3cf6463c4a7f0730af07960107ead5aca
+AdditionalInputB.7 = e2cda5c41ec6b0b425e18398fa99830339e7c21650e28c8d
+Output.7 = 3ad3dbd75978b86d39f014613d43d957b8fc951ba9e4aacf5a39676d56f55801b6a413ad091f5c98713f2c7f02b1042110665226e9c9c162c5c8d3c8416aab7dab52f6429bb468d6bdd1f471cc3ae8f2da0f442bca1311cffe07a17cf94aa6dbefaa0887c13dbab302040699e2c28688
+Entropy.8 = 07a9896449003b02e3193fb6fd538724ca194bd74b562142
+Nonce.8 = 8d811a873698973262083650
+PersonalisationString.8 = a15389911cf299d5ac71b9d17f27c315c19107e96fd746fe
+AdditionalInputA.8 = fa7504ee15acb030d8fff380d1b406c6aca886b590fbb2f9
+AdditionalInputB.8 = 112d4e8df30d9819eb0ad0ae236fa0edb2ff3fe342966073
+Output.8 = 48caf17a456d82efbdf5a795dc491c718401c52a818bdd91a332de54495e5b82af8414b9cb07cbc2d89580892da4383589e82528981e4c74a85f9842356789e03cc9316527a71876951a5f5587e32f1050ce9fb2c1336ccc4100d9e7edf8411ce74592456e67716bd9998055fb4418a3
+Entropy.9 = 895e848b2df83f81b22237c9594946be109f81acdd5e782a
+Nonce.9 = 370eb1fabf1e5464dc86d3ee
+PersonalisationString.9 = d1d99dbf06b56a97e6da7efc1a07c892a7683a1323ce67ee
+AdditionalInputA.9 = aba95292449651edbdffcd0457fbd40461c9527a30e09c5b
+AdditionalInputB.9 = bd2acef0b5cc32572ba7b98dadf9c7d05f75f280e48c863b
+Output.9 = 2bce5a2e7ef91b3510b9af12d13eb304c7f3430d57ac1364aee98a7168a81a0b7303778d3f92659eaf9a518cf1f2859d057fabc2ace9f40ed6e676de79ae3d111e3e1aa8ce67a99e77b3d6299a3c0ce89851026f27b2c6b1c9e0416e03111c53e3d10446ab2826211e7ba1876c486495
+Entropy.10 = 764af072496b6db165add0985d9a431583318b0fef4dd7b6
+Nonce.10 = 2b91490376096a4156d5fa8c
+PersonalisationString.10 = 81b7e8d587e4cf2d2f486cd46761e4fcf7090510f114be5b
+AdditionalInputA.10 = 5a5b16dde8d7f39b3df2fde22170e784b3d3dfb8f9e0194e
+AdditionalInputB.10 = 29421eef64356a90b793493c76d339713edd13fbe872171a
+Output.10 = 5464166d69ecd2b4b59a6b17997bfcc77e8aaa3f841681cae499e4a9b7e45e2112d36824e61cd06835a5ef6281aae377efcaf837aeaa9cd9203d273adc89e8c3c78ab3553a341ff86b575997ba31939271a0d04c49aa9d59c4c0cf2c4755368c41074c16fb1a95bda2521ea45142a298
+Entropy.11 = 043179c8959545b4d13ffce89d0b79644d5417ddb1188da9
+Nonce.11 = 3aa67c89993c389edfde4247
+PersonalisationString.11 = eb51d748010fd54e65af7902037c43f7527a04ba40ab1868
+AdditionalInputA.11 = a8190567c3b9a5af01bbc43a1139d8a23d7e95757454ca3f
+AdditionalInputB.11 = 44f0eabc18f76834330ffc32c35cff6a46079554ea3e5ddf
+Output.11 = 60bd0c67f08470b637c913a729e6c5644768d21f83fa632a5bce1725a2c5cfffa3460ae191d6fd37e33ce15391d3276202df55d4254c0907b62a3cca113353e981f364babdef9a54064aad71ff75b33879575c4cd4af0671223738c1bfed07ea564cce32d5607a299a747049832dfa58
+Entropy.12 = dbe412856752a4fc1759b5aac831ebb146a215d87abca852
+Nonce.12 = 4b88bf08e289c5115d8bae4a
+PersonalisationString.12 = e2de76ffd60730606b6ff456e3514128c9914867568fef67
+AdditionalInputA.12 = 62fc2611e5a0aca6e8f2b30a8b131a43ce558a2d17eb795e
+AdditionalInputB.12 = dbcd64f2fb49e75b1d6770516672005f467221e8b1cdc5cb
+Output.12 = eb8bb1bf2e123a4257926bdf35b6a63175d9611faab63aa8977b2893fe7177a17a861534dfa92f724ce05bbf5b7a3bc54e4927706201c128ebae396ecd2e54d1fdd4f83dbd51c2906dd9b23223b6175c97bdcdf32d91464047ff620261b28729e09f2a97b6232e4c178e60511da5d42e
+Entropy.13 = bc7ecacad555e18187331ec9862e76b9aa4e5f3d119967c3
+Nonce.13 = 979cb1877e39b0248495aac3
+PersonalisationString.13 = eb815140223ee40bfc94638db0210c23289c7964e6f25242
+AdditionalInputA.13 = e644ba98382beebe2215e4b7dfeba6acfe2bfc39f583a412
+AdditionalInputB.13 = 799ded9bb39308482b40f3e4a0e8acb373fea073cc98c557
+Output.13 = 02398cd48a76628f99f333d3497eabf3a12c0566f1b2a82fbb6a9657b074c0073990b426e2a2d3f77e7d1db534fa2f21f9b909f542631cd00bba24fd9644310bfef5e6207c50ae74f91264b4a9b7bcab01f3af3c9aeb6c4a8ce8e10a2a84ef48a09022c6e6684308635942d0e40afd05
+Entropy.14 = 3fb640de81434ff8279f71dbb75b13f6aa9fe6c4bd42ca8d
+Nonce.14 = ffa558724a7e029da8ca5313
+PersonalisationString.14 = 0a4f559dddf77d5e9721b5aab4d30383f485cf99781482a8
+AdditionalInputA.14 = c375af43c11115e995f47212f81cf3cdca5801d184d82235
+AdditionalInputB.14 = d2eea45f69c6d82dc3a7bb3be69d595c86c5ea5b4aee6001
+Output.14 = 907452bdf42eb168195313eefd090a2fe1be8b668b8ec7153a4ed4c07e6979244282e976decef02ffd4fd92b0d7b90bfc453cfd81a823dc162dde29dfa926f20e395d7432e0aea61c72e05c1673180bee3b47fa171cfba98864fc2bf83878e37c7dc019d465788aa1500ab3db8997d3c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = f34daf1a83be8c66db78a1771484682b2a2c1a85e8432ca0
+Nonce.0 = 264f964fafffd3e9b525c43d
+Output.0 = d93a091f24b41ab722834c6e03f33acf5f5d6c9f9b2a9f4c16da15fd25c82f0ebde303ed57dc58b84b0c0686322f474d5843da8f6f70c20905babc28e57e99b71dccda26f7b037e40874d995a284a98dca1ccec7a42487f429b22b14fa25ad32e370137e1091be2823af1a9d354d848b
+Entropy.1 = abd1f62b43c2b148d0119136785c1a049a88bfc8d2a97ecc
+Nonce.1 = 8b63f7a40384fddd5d34f602
+Output.1 = 358b7a12b1f24bed4bf127d7506b7280b7575c3c15abb52a54ee45caea8331033fec9e4533a28f0b02aacd19977a0486197f7679065e1ee7746d150bcbd52495a7d9eca7fec9bb3222555b81bbc4be9efb852e6c12297390a1eb2afe967c202599d41b447bbe62e762f567b62ba6572a
+Entropy.2 = 3e6363995147f6e32565a406b066c60f1d2b0d4530b7b49d
+Nonce.2 = a01827f1f2ddf5eb2ed15718
+Output.2 = fc53f4beda45aba7bb67a576116f3d6cbe9e276b5c4d2c469a817affb34f913414cc1e03cd64f16c2075e6a17e4a4a44e9ce0d9902ae81303e243301a91ecd3ca1b74a4b655688e300b746d28909f5974cbdab82fb89cbce2383d730a8d81c32b15cedaf89447705faaa9b8708bf4786
+Entropy.3 = 5e1744a97efb29557d273002e81056fd8d754f4a7c3660f9
+Nonce.3 = c0dc51d382eb857f3fc0811b
+Output.3 = 0a0e20eace858a98bf9f4baeb1138ee8130d4b6101da0dbc12e984a1cfdcaed21ff0c9bdac3691cfbae4b6e2de6d2c1d256ca37682515b63e4c62ce2dcd99e431c0b5c867010c6c505941cd08be8cb7aec27e35cc8d84da00f8cb0d2d24662ed2717aac9566be8b26548a619b454317d
+Entropy.4 = dbbc8cbf7e897db6ff62a6c64e023f0927ef5dff4bc3b8fd
+Nonce.4 = 0e7b9ba5b8a36b01b1c560d9
+Output.4 = fea381e30f28f97d3d16e9796fd43f72b1a87acb6d02eeb960bd39bbe79e3bc98933ea2b149661ba9493ab1a2aa22bd8bf75011d83740573f5af1fc92e5eef36e93ed07291acf7258d94e35943f599c3aaeddd3588743671aa50b902030516e6b9038702ab54062db6378d79558fcaa3
+Entropy.5 = c9fbdf0830e7ad307fa89df168f23c3a95a8a1e3b5bad17e
+Nonce.5 = 76cc2507ffa3428a0088a9d8
+Output.5 = e0daf2da44c336a28f1612967549202425eb9d30dc34add82953fdea7b05c0461fff620edcffb57173cc13d266e76092eae7a2aab5a4bd6ec94c6c12c0e2af6ecaa4c074fad05531328d6314378d73e1bedf2fe41dd1d98a0df0d01c1201ad5a5ace9be833782f9d67c43a3783e3b98a
+Entropy.6 = d47012dbfb4c45cfc21bfbed79b5917a298ee998585b0675
+Nonce.6 = 083068b359b0568db28dd99a
+Output.6 = ebacd13148c69c7e42cadbfce6110dabecc4c4087dc025c92b33f1a5ff829915984b9d378421c5aa87add7dafc326e930aad3f094967ec9a031d3db47817ef4498c68de615ee0023989690de975e9cb703479667914637e8337093d4a0fd0e70bb0f7a983d2e57a3060298cf563fb661
+Entropy.7 = 3054b8a17e7949165920f40fce3458d329ba2f9a49aca375
+Nonce.7 = f4029752726c79d51deaf5e7
+Output.7 = 99aa6414d7e91bc8e6ec4dbeaf741eb9177ab4018af383e0d96e738dcc79ca83c4559d51194fd226af1f63a498d3ce1cc41074eaca6d2f2cdce4126ac674d3ffc1e7451dc1dd51145b04cf888e3643a0aa90bcb2b75d4e2ba36994b1cf2850cdfa89c045bc1c7e883a80b749e152ac77
+Entropy.8 = c3b37b4b1ce7c944bd5637010f959d1fdadedc644dc34c32
+Nonce.8 = 9a538928aab74e7cbe4bd6e9
+Output.8 = bab320c1755cd8f47314d0d2aad63c02641bc6b72f45f4d02091a4ce8e7cf0752a830065937a78604d9fdf2a0b9704d183cc49dfb46bd8c3e6c965de2876ff096d4d4c80c791e7fa65f6c4125fb38fb3f2ef92cab84967286b50288e0663de1e1c100e536ef9df21d2ff3e47246d527d
+Entropy.9 = 413af08b97b5495aa62337b8109b6e1fdeeab59177d42b67
+Nonce.9 = c6ee4d3e71c0028f07742fc3
+Output.9 = 4c8f6be540ea40de222cfde738091c3b3fe729b6655bd9a429c8e5563e68d1ddfa74222b73af3308ed0200594183812deebcb4f2d378b09ba83f9ec048db66dde72b2919e74c1440df1be32d52ff9bdf3220d5251e30144e62e0e159d4110f46314611acb9f1ac9e4eeb2c2aa9e3752e
+Entropy.10 = e99ac5c23a0dd8a908fb1b6f17a419b6420db16fcde8eb79
+Nonce.10 = 60d304ecc143c1f6f96446c5
+Output.10 = f1795784ee4b5f4adff32c7fe096c06a6aef21b34bbe37b13f9e65ace09ac02bb5f1c66468b24dc3a982800c892a1fd4290da6106c0600f38ff86b56c03c618555025bf878a5e4eec1a917fcad02d2792ebb6be145f7be473dae3c474f65534903120d67192613fc6478aa19a5c1f97e
+Entropy.11 = ccfa4192729261c658f0aba93fc082d26c749246329fd7da
+Nonce.11 = 95caa0b8fe92a179963cb10c
+Output.11 = d75fdde8c95fa7190a8ea4c99fa20a9d821427e793cb36dc473409d88658d411fce08f7d51f2f20c9bd007867d7f9d83d990f649e14f127800b6d4a486d652f1f289d30cb4dd792a468b2426d232330349e80225445dd03d5af8f3bc7d15e8a15f640461b2d27d021770af134226a657
+Entropy.12 = b4aead96654b757651ae06d08d5bb6589182549f67a1c215
+Nonce.12 = 38e1494f9bdf69d8dcfb8776
+Output.12 = 1106e5764c291c0e96497e34617e78f638db0bfb5e7f178afb0b8e8b9c9fbfd75b1e7a078b6fcc5f1116af05e957645dbed437753bb88e0669360edbec79980263c506494774e52ec1cc8d67baffff5bc9d7f5ea8188f920ad96139e0c972e88b96010728be9d19d00d797fdc433bff7
+Entropy.13 = 2f74593b03781fd063eef41aaf7bef35d202706ad25a1da0
+Nonce.13 = afc3222e368a6c23fc23236e
+Output.13 = 2e7f69773be1e8ddecf37e6534042feac5cd50a3550750819604a1cf3972147ac28098450df577e6b776be072a58f75ce2dd88888f39b94d0d4b39691f4db783b7e1084af8b95239bbb4fdde63648e27c8b4c3bc322782233e2306f174cb37da630eabe55ca092ac534c91026f28cad5
+Entropy.14 = b37ca70fd13538ef74c5a3c7ef00a78705919446954ec43f
+Nonce.14 = 3ecbdff8cf33b50788dba82f
+Output.14 = 1bcbccc535fbdc8617575d46ea5a9cef2622995dee19aa4b998325dd8d0935957170f6b18219354cd2759ba53c9c1f380586070db0c89979a581ce1e00ce38855e123dc3a2dc9ce74bc3b6e27c9603fb87c09a1d90bb540d267d456f5457daf0920a13119a2b805f9b97b154f80f4bbf
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 0e6e1cccb8e464dd9a13ba91635d65825f7822f6b2e442ca
+Nonce.0 = ee334b65e55abd2db6a49cf0
+AdditionalInputA.0 = 8513c7d32b08dcf7e405d69d36843a3a2e78e0634134bf27
+AdditionalInputB.0 = 7f924c1464e9b4ac1ae742d798ba819f2baffeb7ba961a9c
+Output.0 = dc99d95f008a2374a6c3cea046f814078c420163db30ba1a976b6b1cb15dee69652032189848e623f81c5ab55019820aa61a6dd971d5804bd412db5a90ef3c9dca46d3000d18e99f06e7649eefb8f0b94b764a089daf4e7c0549c52b6a54d3873273dd3ca9336cbf7b42109332030058
+Entropy.1 = 453f0245024d4e57bb264452a8e6614c367565883c198567
+Nonce.1 = 8f5879dec21ac15c6945613c
+AdditionalInputA.1 = 89c0a5d097052a8f89016ec8762e2f3613c0fd967ce24aaf
+AdditionalInputB.1 = 3c333b324af72cd05c8274dc44e3fabfbb1d8892a40d75fc
+Output.1 = 3701769ae1664a69ccd58cb1106e7a9a71c2ec9ee889a997078c313c3b73fedfdc3f4a7cf14cef8a0b09a51ca1a27e3e205a1d55e584d63db83cabce33bdacdec715a98e03afb2376100c5b7a26ad35f3de04915e9f307b081eef2e9cc638aeaf3702de6ee94355dcb3da2f910b9618d
+Entropy.2 = 8d0da6d15d7478ea1acf1c73c47fe1b5e825ff297e8174aa
+Nonce.2 = 558a3c84bc80bfeca60c57f4
+AdditionalInputA.2 = a267da03894381f931a87cebfa13eba71a242fbdb94998f6
+AdditionalInputB.2 = b8853669a2e9071f1258e69700d3abef8d2078e86536b6be
+Output.2 = 1ba4829e43fc7cedafb34da95cf78f705be85e0a96f323b9daa27c14c56844636023fd4967a9e5ed794ca06873879e7d008bbb0499c166e985d252ce938ae6d942b6f052db77fda59f232f74d72bb8054269ec1a04f614638d0f7797c2a79ba5cb3ef37d1b5f9cd8e7a45c870b634779
+Entropy.3 = 125e75acc1edb675f6ee035a2c7b4b02d60ce6cc26957010
+Nonce.3 = bd4d4620804a3779ecb20333
+AdditionalInputA.3 = c0bdef842b3127324d6d78b5d4d84661aecadf326a71d8bc
+AdditionalInputB.3 = 26801f937a23856721a18e10c506267b8ed0801cd6e0bdaf
+Output.3 = 58ab6980c180d32c1eddc0289cad603628e578b771eb6d58fe432f4f9d6808c4ac38fdc0cb0dd44f7c1aa7f5909d62e1d0c84f69f29cacf711521ac7a58ef1db129c54a292aca92a8337c0a5f87539d3a1fbfae207568fd7fa89aae52936972a8bdeeac4b5966f5e8d23aa99eea4a748
+Entropy.4 = 5a40002e4e008d84afaaa4dbd899eab9ccdbb411232fc8bd
+Nonce.4 = 112b4263fefdb2c8fe0fb17d
+AdditionalInputA.4 = db54fa2732fcb97cc5567418ce0c5746c61aab8c95bf252f
+AdditionalInputB.4 = 853baaa33146a9ef2dc24116fb51bd4e47366a916d579255
+Output.4 = de1e72076639ca9a60a679083e97bad71fc528a114fd0ea019b32834d1a00851cafe7779fe56b49cb6d055a2277c17957e75f0d826780b24a3b2fe00bb9e8dd7eed0ddc037e62e9259d04577321d3b11860b9aa0a1e20c82076a0eb034de10a6190e87c6cb402226cad5d7068883f0a6
+Entropy.5 = 8902e5e69ba65ca55ce35e89b1967ce313d46fa5897b0718
+Nonce.5 = 246d4710654269768b35b2bd
+AdditionalInputA.5 = df40878148cbb395bb2955b2d4be6ae5896d5a85228bda4a
+AdditionalInputB.5 = 19487b55132cf08898bc32c4cfec04de50635f781d6d354c
+Output.5 = 39b901dcc914558c45b7a85f6dea0e1a0ed398bed8e182bc703e3473b1967fb7d58c30cdcf47c9cdfce83c79e9457875c549def68f3bb91d6dae891bb558ddbc51ef499e1bf510fc1ee5a09f454d8dd68ba6dd88a003319debfa3bae19e255c6ee8625d0172f8fb396d7b9600f44c9c7
+Entropy.6 = 0823d9b62ca3961c4b8ecdc13877076d1bc9a97d953418e9
+Nonce.6 = cab41696618b7e6c601e35c5
+AdditionalInputA.6 = 7a06ad46cbfefae2a68b1cfb4ebd0be0cc2f132fcfc66507
+AdditionalInputB.6 = 487c4927a71b6d1d389fc396306d48d6cea06d440ff68715
+Output.6 = 6e420136ed8427c8cb45fc75d3bf95896bc89b52c12ca6e1fae7853d98306880b62b0ce42d5d07d3c0e4df8692f5fb23e00abdc29c76dbfef999b3835db2de577d50bcc49cc6b13632bea0bf1b9eeeeee91706c7a427d14625730da21fd0b71e74efcb207d5cba53cf98c57a4c7ec5af
+Entropy.7 = ca3317a230007266f80c76c3e123b8a6e72626d1281507c3
+Nonce.7 = 30f75131e9652b4eff521c63
+AdditionalInputA.7 = e75fb0011a8e5aa7da95ff3aff5c6d425daeb2493810d895
+AdditionalInputB.7 = ae4c746bdc9aff3694feeee3195e7b3bb85f200062e2cacb
+Output.7 = a6bbbc9faade4da0213c78f2c2c89939a18eaa4b450ef696fb1d58ac884c87ffd719c2d50a5108c04aaecca17aa521eb44c65d34789a93d8f099e84f4767f61fc0f0065bcedb78881ac130b1d259f51eef8cadadf962b29fdfaf0aa16cfcd46c6df7c3bdf9deaa70db7e049f42a3ac5f
+Entropy.8 = 9259c798b6e62343c61e9407a2c2a9c1f2457675f4d280c3
+Nonce.8 = e429d3824c018d1fee543f7c
+AdditionalInputA.8 = 901c5fd8d6b39c2f51fd61028dde69781f7cd5327ed53010
+AdditionalInputB.8 = 77ba8f47bc6407a5c696e729056bc1232644a40b4cefcaac
+Output.8 = f7e6caf28bd9afe00771590a476270131e57d602883d4dde9d30cb4dc1d07a8a41626174999c4f13d1e44cbff77eef6dd0d2842f404d87544423f01673c93cdf4847357c6a70b45442036a8147501a8ad11bada963352a95cd9eaac8a883347c4e20f4fe0821353164c0a4660f719155
+Entropy.9 = eac11f37733207819cfe399de3c7758221105acf2e56c127
+Nonce.9 = 0fc0c2200a446d20d76c2303
+AdditionalInputA.9 = 7388250f4342ddf093dcedc6969258ca46daafd367311d63
+AdditionalInputB.9 = 28692218a9cff95030439c02774cba5f128d731e554ef7a5
+Output.9 = df0c95c0afd6018ae5700ce083a4618154d27596dfd7d3a81fe652f89987ae6d45cbb13d1b29d4f26891e735e0cce06d7ac4d3d8387d1193759cb4a72ca388007a2f8d631e15dec6808e4a270d51a2f8474781a34a8f0677f49c6a8488923e495272d97fd6104e3806fcb4eeaa6d2034
+Entropy.10 = daa498ffa9f01126e8730143f45ab8f0a3d9b1752a2eb11f
+Nonce.10 = 1a82eb2b88fd118c3c29039f
+AdditionalInputA.10 = 53b461fadf4462428dd1de81f373faa88b54bf8fd33a0ccd
+AdditionalInputB.10 = 835dbe0984eaaeef6feab85abc5229eefebdb40b1f2fefbe
+Output.10 = 44b08d6b4048ed246004851303f24cb6f3c3f9cec28598a8d75467090e304489380f35c494356bbdec92f645c695272d9c14b4d8ec2244d4da0e4b899e244ad258f9c94c47b09d522a8ec637dd6c25c4a7d710b163266b1c6722bb811136148788b9f3c9058cee41f69cb9348161638f
+Entropy.11 = 4d48741a39422fe84c6c89cb2dc3c9c0ac17841993b6683c
+Nonce.11 = 001e5f39ed54a12216b035cc
+AdditionalInputA.11 = 2fe05cec456217b82b6feb7184d94b6afdb6e9c1170ba0f3
+AdditionalInputB.11 = f9c6a0076aa46298ea09dfa3608a7efc62aedf91abd98ec6
+Output.11 = 49dfd444cd197625de0b928fa57bc23670e8f1d084f19da9f8602e56d3090495a7cc45c215388816c7ba25aef2fa661dbe27e59632e9dee092b86e0aca0e335cdc9f86308e32aaaf19b9646d7947dea97ec856c873c85ac2f16473dd2a2ee9f4faeebbcb009e5f20403c29a422f998c3
+Entropy.12 = 2739a0a0020f4cfd86cd6d0f4f2a46c5ea88ce2e7ea4fd5b
+Nonce.12 = 6ac143a15a0a945f3004a325
+AdditionalInputA.12 = 048590374d554aa89b26d1772735bdc1a1a7bd82ab9742e9
+AdditionalInputB.12 = 2062c228e3084eb84ca1aba4da82b1ac9556439913bfc7ea
+Output.12 = ac9482058f041f51e8b1ab2dcd6ebd835d64c04fb6047b925b95dd3ae93bda64f0139b949837a138b4fca403a8ca8d91dd5fe05953436017a1aa741de13df644f6104cdcc1e9b10f50e80a2a75bf434097534af0ba5e5ada6cc3e2529e91c2a9398bdec97360baf1a2791c14875e6a61
+Entropy.13 = 0b87675ae4b4691225484df9b2e18339f77a20f7e80e85b5
+Nonce.13 = 701d430e1df0f941892b0a05
+AdditionalInputA.13 = ba93d17624a2b25e6112c58994cc7ec00d2e53588ff18b89
+AdditionalInputB.13 = 328782892e879d5e314b989f55cba533a4d13e883d7a19d1
+Output.13 = 977b945459a0309a767882379ef9a7629209f3f724ba0f12c9d58f62890396c4c6f5fb8bdad336837afb932493cc45f23143bdd89b3a1c801de2b3241c08f4c219e77398abf32361408b3ce21236e4059001b89536ce19405d01b73ae163f7f06f2dcc3abcc6d712dee466dc9bfb60d1
+Entropy.14 = c90d2beedee0534de8df54dfef40729c5d1dc00340f97514
+Nonce.14 = 43323218555c85907739ef84
+AdditionalInputA.14 = 9fcab4a8d0d1036a6210d56a894f861fbfacd4b20c081f38
+AdditionalInputB.14 = e279bf650f812b8931662e59a0da7ab799c193da1f6eef1d
+Output.14 = b3ec81a3cc8dfa4e1ea17d33566a4444bae9969244e7a8970eab02afc8797b5fc85b6614ab009625b81fbe078bfa4db78ced2d8b3f1e3342b477a3fb42cec7d44546585621bb8310075808aaddef32ede3e668e626711fdfaf2569721bf645edeaf74a9826aadf0a9cea9893aab4fe3c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = e3303a4ae7679c7b2e1b11a6cc53ec57da6320feab0a8574
+Nonce.0 = 23694cd207d292a0e2117d1a
+PersonalisationString.0 = cc6815b0a2a72096228bcad19b160a094f38079c33843408
+Output.0 = a55de90e2072d5e33235270532805a32f7907a9f1e7909821e38457d4df4390320485df395d0b4ac7419ea76e83298751029185b29141e46436ff62e99100b48ccb7435ae39a2efacd728e30bc53ea13dbad1c2a7bf64888a5a5c27f5ba1967565a1eedb3f6f4c22b0d0bc26b6b39576
+Entropy.1 = 4f5a764f19f875a1318198bb8b349a30c08553b899eaaec0
+Nonce.1 = 45a0f4f8aede6e5a1f41c81f
+PersonalisationString.1 = 56ca0141d40f38214bf5df497051111586a8f17a55adfeaf
+Output.1 = f62df5d4b080486fb75d4650294daeeaa43b48e08eef1cbd84c8eb8e1e91fd14a3f7015fae775b029cffeaa61d6fbfc23540886948549e47290f2ec83808adb5aab8d1a6188d478478e782988c4ff005ff4b14998aa86f2740408799550687c8f1752c98b556c65349deea6f1d803e9d
+Entropy.2 = 4c909fddc98bb2dfae170a0aa0782fa172972b6ea85b7bb7
+Nonce.2 = e22e1471e95de620ef6cd726
+PersonalisationString.2 = 91862754f5827026f2b06dde98f78b98a1482ae85e3f6f74
+Output.2 = 169d1dc8766ab63d65b59e999daaa8487e961a1d28974c7cb361c93f828d20dc11a64d7d144a310a7244add3ba2a4a12dc92811efc35c8586e7dba7a5d01ccea640e9851092f1a5fef963eb5729fa93cb27970df0ca196034a9aa3888181b229f5ea265c850f082839cceb924ad2c099
+Entropy.3 = c9715b284991515bc3012c55f5b4733d80ed0ab0377e1e23
+Nonce.3 = c662f939921a00ccfbd60e43
+PersonalisationString.3 = ae3969bd37f76b5e4b1826d108f71288315c91176727c6a1
+Output.3 = 951aed814cb927e4d7927d8e927f63a6c8ce9e11192a7bd28c8d54cd0b1cbbf57d3211ca349724f2600a11be482c87cd870953249926ab0f124b6ffa0addef4f1146d47b56968ec4b04661261abf97b412ccfd4329508e906c512b1485396a976bc103b769dcfee6d4640ecbcfdfeb31
+Entropy.4 = d25a87f9e2be0d53143ff7df4862804d17dab2dd8cb1f124
+Nonce.4 = c46dab3fa9ba41e5be509ad4
+PersonalisationString.4 = 3177026124d54b96aca5f126c49cebe2410f7a5a3bf9be36
+Output.4 = 231b1d2b3179d2173d2691300367393c40cc251027d1c08cd808fa6c735b27af004b19d9e520589a5b3dca9b482721916ce24b5252af6d4e4381d9bb74c189618753adb7fcf62881addb36addbf9b5cfa8d1fe6dca27e8526bbe35aaefac2b9f1a01bc8800b2631b63823d02af1ab85d
+Entropy.5 = 281600a07e9c2c4e12c50b245ce68f60eb8724a0fdf8ef0c
+Nonce.5 = 2009644fda9876d69dcf8515
+PersonalisationString.5 = 2a2ea4b3974f2199e91d640cd02211c2abfdb0a475aca283
+Output.5 = fc950fc6f1e2daf6710f334d6cf6685506a80170f78648aef58a86961466cfc19bb686e26d8b4441459d3ffa6afed7d4cbf657cdb2da1a76df1fde3b1246dcc49f83897f16f8a58eefde54556953ce1ff032f048d7fab9c2764c56a5636c97f714c1dcacbf6b922268e173a7a2585906
+Entropy.6 = 7ae676a4b451734da237d335b62fc5be34ba4ab7a30602a7
+Nonce.6 = 1eb6319e8e94d08853f918fc
+PersonalisationString.6 = 6d1236fad9a2d0de231a41e6bbe378a8dfac61edbd419457
+Output.6 = b784dbdae689a78c95ffafa2e711f7402013012249f1807a931131a09ccbe070971e36c9221de28fb86784f9552b619ab99272b73227ef3707dbf3c54c91b3ef7669a8e3417ea498c066b4ff1643e2bdb3155a33afa2bc849c179fbf94da4df319a4cb07461c1725d38b6f1860aabc89
+Entropy.7 = b1f256a885b84dc228ae9aec33937e6f368b318422dff436
+Nonce.7 = 9eba9038aa20761962600868
+PersonalisationString.7 = 0dde17a7bf2ee703801319babd44882394b5ff239928ff37
+Output.7 = 353d850d24acc856d403ff3b2b7d28537ccca984df0bc6cf76ac4f429998f5d9083ad9eb3f571eb420580b97b152a2027b97e520090eaec8726b587dd14bcfa29a216c3432ac8911c8e9dba88b2a625244e6af66790c483bcc86999a06034a671f65d229a630fc88733e66247449b0cb
+Entropy.8 = 5f341c5dff9f4e360c0863fcf17f152ccbb88139cae66bc6
+Nonce.8 = 8b00a1baa5b8cc65ad9c9971
+PersonalisationString.8 = fdfadee79f09cd11763e0d37774dc8a741cf50efdf63e481
+Output.8 = e109796934a01dc76886e6ea067760028899a201194673a42b4396e27c8550bff9959d3b68e5c43f70a23dada1b55589d9eb487f8034891b28c915f57f9717fdedbe2711a73aad2336ec9d213f3d5451119f70e0ef4f943dd156dd4f1059f917570343f2df84e9d5880c8d4088658e0d
+Entropy.9 = 3175c146dcc471af61dc0332ba34bb423c5fbfcb7d5493af
+Nonce.9 = a4e244f41aa276be01336b54
+PersonalisationString.9 = b75abe441053dc92d9f2af0762cd07ac7b3f64209d45977f
+Output.9 = b8d12b6fcf72b2822afc28a6e6ddc5282f882a2c91fd3d1459dd5644c35de19a864898bd5cf425f809123f1fe74f622100463e9a73304afdf91b38b0d84c4bbf743c68ce58bb5ef4484b3942ca27953441138366a851d6ac2c97b58020cdaad931d2b66b64eb054140b2beb8b60aa502
+Entropy.10 = 7b6e8cb381d57c2cbb817fb717c430e0c0ec4c4223bd4978
+Nonce.10 = 82a7d811338ce2f1e55765cd
+PersonalisationString.10 = 6d818e590a7892ad20320a8da5986fad0d6dfd2639c18d27
+Output.10 = 5b4de2b9a7cc34469b68f110c49a5c86134a25413e192fa0d3d6149c4ab2e257a081477e3a9d0c504db745183fbe21c9d204f3ff2f5d30f666a575d3c14563a449f70722a9002f8e14d15ef750fd8560d48990e9f650b15795535ea430a33d7c2c3f8ccbf4ae2e6496cf45d61c841440
+Entropy.11 = e56b1663085d4409a5c6b7ba1b9be6008a785b2ee8d35d0d
+Nonce.11 = 70fbe48f4878432a6885c39a
+PersonalisationString.11 = 8e8a4f95f6d590ab664fc95b962ff9de01d0e962355869a1
+Output.11 = 7d96b91fc1b62ae0705261822116461a359417ac266e8fed4786748a0e7b6d662786a86c59c538f38c7a72349a5592d29cc726e843f9cf5df0c75a09f99fe314ded0431abb2a6e0c41c50b7fdc4a3c8e464c936c1fca40f76cbf52755082c19c58eb8d0055350c9bd7cc12e425c40a4c
+Entropy.12 = 02ba1c8b09584647170c5eb8f1d873c1051432b5a5b3fb70
+Nonce.12 = b80b42d3ea625b78e58dc502
+PersonalisationString.12 = 919476db346ffdbe0fabbca46cbeef65866816c7add8b57d
+Output.12 = 941d6f2a3187ee3a031a9033e6182655b49df4cebb26697611a551f785758ccf0206e89ed2fec100de0955e7f2995672f047e54c89f23054c96a8ee7eacd6085dae74a2928f4a180cbe08fdf10309da2ce3243ded1c3e02ce06d9c07cef5683305f1945df63e378e1bfd4d665b2d3d9c
+Entropy.13 = b1769e3445ac80870d8bc0fa973bcc1bdad10d6ddc79599e
+Nonce.13 = c4bf61831c5c2ebace04846a
+PersonalisationString.13 = ccf622319d28d73a9bd96f5e475bd113e3e2fe08a0c91125
+Output.13 = 2e87b375d519248457e0a13fb76765d7690835db7b54e794976df1d448a0050e77cbf6119f393d2f30e9f6b308196874d9123de6b6a5884668518b8014d28aa08095de75bba6d905c0ebc909735871afbb1ff616cd8de9e2741210cbf9e49928332f0c508006b01cc8a0efe453714591
+Entropy.14 = 20f5f4e9177f3aea0ed784f29e6ad3d98b7ec22bd6813386
+Nonce.14 = 98ec3ae036755323042c08da
+PersonalisationString.14 = e6f24d96c8d11cc68e72f56ee7e345c5a0083509821fdf17
+Output.14 = f5a9d375a58d1b337d245d29b7a9e352cbb0fc950276e042d075a71f4bc43b65b063bff299c670adfc46db39c4303adbbfebcea1df964c27d33cbfe4d46567475abff4f357252ff7d05ed4ac34e6ed14c33c192909426654d604736f3bb0ba01aa5e0454d60dfe8aa5b2df3a52df22d4
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 2891ee8f8e9a1424c183cb264c9d54cd9464dbed4cafd92f
+Nonce.0 = a82b8b7261f27954c0b2b905
+PersonalisationString.0 = a79122352074d9ddd47fb38f2999c554417f916ac91b6cc9
+AdditionalInputA.0 = 73975cec7ffb76f0286ea79c31dce922ca3734bc97d874e9
+AdditionalInputB.0 = b06421eccb0a8b1f229d2dcf37e7307e7e3c8fe25a60923d
+Output.0 = b3dfd82549ab620b7dbb18839b8905e3c1fb601086e56468e4742107d0e7b214a32ffbeff55ae242828bfa7c7a17a58d975c5d91f2d6acc8e9c0c1bb57a5bd0fddc868ccbf32dc511f110a6eb3ec7ea15cb6e1ce7c083d46eabed92df15974533990bad0a3ea0068b201c736cf17356e
+Entropy.1 = 9399ce75ad8bcada260628d1d8d19b71b6d6af06e37e9eb5
+Nonce.1 = d9e246bff1469a14d7614802
+PersonalisationString.1 = 84938b4eb3417b6e63bc23749cff016dbbb78131d9a5ffe7
+AdditionalInputA.1 = 210d043b33776089b3193dced4f9834d1756156a7c99a487
+AdditionalInputB.1 = 3859a8f5b27553f5db49218a1826040151cdc3cde86a6a20
+Output.1 = 2f46ffbf97ec5bb0e2f1ece66f034071d6e38944823a68772f1e02b9d1b2ee1fe20c2c342e605bbddd3466c90418c22525a9539c970b6ce9b0a76a89919d2775e47cb33cff0c1c2ce7b2c33313a773da42a18f9bbdfb86822b928fb531a42af0bc7203591ed3d9dcaa52a4771ba8aeb9
+Entropy.2 = 50a6d462ee7f36daa3ee1b6f910df9a07b43640ce1d93e64
+Nonce.2 = 05afb8ed2774893ddbe9163c
+PersonalisationString.2 = 6c08959591929f7f9af2bf2b10ce18305187400f25de9cdd
+AdditionalInputA.2 = 358b3d23ff04e2c491f904faf2de30a380da7f839e610556
+AdditionalInputB.2 = 7d91a483d805df00ba36b8c9a0baf88fa95a99d17665e1eb
+Output.2 = c8a9306234df08b0d54150e0d8136a8df30cbb0b754d4e11419b2c5ce545dc442f92046c5a68899e6a0569eb2565eef33be88eb9640eebdf17b48224a74519cb5929e68c5d853da4076c769a92339f23f1bd9343943474e0efe942f3d73f708033b29625f74b1919c7cc41e70dc6d6c0
+Entropy.3 = 698b942cd87ff5192b4dce92a595ee5aa2058f0704ba9d1b
+Nonce.3 = beac1f46b3c96d3654a441cb
+PersonalisationString.3 = 233f706c7386b90fcf0b4a675bbbc31b8ee944505c209064
+AdditionalInputA.3 = 9a8de8fd95b9c033fdfa872694c8ad6a8244b429c8988a25
+AdditionalInputB.3 = b44e0590396ab432ade092c965b45e499a39f4c5446251df
+Output.3 = 662cbaebf6f9f7f97b4fc9e5886c19475b88c8db65c2b23950814995178f13ab1609ada4969bee61b1be6b51d8f2a0ac1ecd240a75654f36c8dc4d71077498216080f195309df7a7f09780f27cea43ca02dcab33dd7f9127141c5fcb59d9777fcf78e1740b04c8cfd46b2407ce1ad6b5
+Entropy.4 = 02757cf3f6b0030a78c6ec4bbce3a1c5ee959fa2aaaec19f
+Nonce.4 = dd2898b3670f310d71997b97
+PersonalisationString.4 = 8bd4bf55492271edc261146e47dade3399dfd3b78167a644
+AdditionalInputA.4 = 45a7e6ee6bd799a59e8c21189e75f32c808b8893a0842475
+AdditionalInputB.4 = d5e39b3d9410fd9872cc44bb4ed94bac0225e68b8a68466c
+Output.4 = 4b111c654914d621dadff8565dbf51fe83cec43cbd4836cc760e3c9541a0de5b19e59198724256fe2463648f136d288ef19c786c0358b7788fa7f20a2c33e568846e07e769c19dc3d2c51eeb970e7284530006a6d7b0eebb66e81792be92e7fc22c685ee29aeaaf127276b072591a5a2
+Entropy.5 = 30b17497a71cceb8fc39e5858c2c6640790ebc77873993df
+Nonce.5 = d752fdf1195c843a1c401963
+PersonalisationString.5 = 38b848e8ade794908e65fa23989c7ed0fc02d9756518db46
+AdditionalInputA.5 = 4d527b3b52061ce6276147e2c1ff7a7bccd8a55a67ace5fd
+AdditionalInputB.5 = d6e9b8acd134b93c8dc252831a4c729af2ea8fd1929d5e50
+Output.5 = 527bae9a529ba63b5d3ad7389829a2aa8ebb2bf1302e144c1f77e353bc6b6d5563db499a7bffa6b4ce71b8c1195d0f1db230982a4b27d7b2efcd93787ffba83fcf9f0d1f6a7001ef5541d705c4a7d2b1ee41d811bca511633ae813482581a8b54464cf6cdc23d69e5a4458efa750acac
+Entropy.6 = e39fd3856fe6926891693fc833c15731af4c850379ef1dbb
+Nonce.6 = 6bd4a0472899bcc60c2cb614
+PersonalisationString.6 = 1438d90343b4352949170a0b9e89dbb96a125456b790d18a
+AdditionalInputA.6 = a3f1ac9cf8058ab0bf2d940ca894fa2559a036fdea8daa92
+AdditionalInputB.6 = caf58b3c5b113cf247b70d2317cc787426d6d8fb1371515a
+Output.6 = 1f0c23fd30be385776225fd53c07620d7017ba85e7153f63cb51dbf0ede1b1341c920af9b29b3d6e18f303b714daa6ea3e08e5e46705952975552275431b4f75e6c66db45c563e59e168e5037d80f921e62ce8cac2ae47ff54e760161bcd056e0244602fd0c9dca49021ce70f9c956e9
+Entropy.7 = 4fb152ce37c6fc80a78c3781644a27530178b6e7c75c4827
+Nonce.7 = bdfe338ecfdf2cdcc9fc0da8
+PersonalisationString.7 = 1bba11ffb258cc0649932de2f3642a60e11693d936173714
+AdditionalInputA.7 = 5b3d577df24790d495ee82361008d93e3ab09156f4cf44ea
+AdditionalInputB.7 = 728f6aedc5267af2a238b48a613c7a3fd697ae0e94857f36
+Output.7 = 60b51017b1b016c7363f1bdb3bc4151ed94b6e5766eb30faed3701abd065a5ca1f72fadf2906d2201e006a216b5e6d0c4afcad6f3e7e1e4d6ac0825d1343becf798853ea4256a5d381e0b591b1930bae985d357c8f9d2ec87fde24c37a1bc75d369ee72792dce9c297572a797d8bf811
+Entropy.8 = 59fbee059caaff5875717ee7d52e46bd7d80505d6bec5b01
+Nonce.8 = 277f895c18453b73df2f2639
+PersonalisationString.8 = 32ba9bf2907e26e8958f62fa53d3254e31956b5110f1cea7
+AdditionalInputA.8 = 899af98474de852c8f46705afc08cd3bafe598a40574f918
+AdditionalInputB.8 = cf4344671516acd9c62506cea7058cc2d8e201759804f11e
+Output.8 = 94ed6d2af7dea638934b81b7c5c6f6b4658d4a5314f1d70fb37c05f0465913af202528edd0cf7fe63784f88919390035e24b1943ac2ebcfecead9ebc30d731d545bb52337dc063bf8639498402c4bd21c16219f64e2e9bddbbf3aeb7d4f93ea3ce549622529386d195c57084379b9ad2
+Entropy.9 = df82c9741a768ac1d4be1831c7e3f175460dbefee0c922df
+Nonce.9 = 53511f0c8c0c6a999f9e9bc8
+PersonalisationString.9 = 9b63917fd7815a0d67aa68d833a01060993bfed6fed2d8fd
+AdditionalInputA.9 = c4ec7ad2d5c2109a7b25a329cb0663cb1824767eb8eb9777
+AdditionalInputB.9 = a3c15ee9cc6f89adc9e1ba969de4acf79fedaaef1ebe463d
+Output.9 = 6751e7f05c541f00a09e7a926953c0c4ee23b73267a5f734e5ac3e54ba2d42b5db1a560448a5597bad31b8f5701b8e15755afd8a2bd4b76793760a9d2f30e7fe2b6b565d9ab96f9d64f85f57462812b7b080139437a27c43a92a168005f77cadb863a7ab1f21b6a8eb15bb1791027bd7
+Entropy.10 = 65ee272214377e79c8a545ac8a20f9d6e609e50dcae34efd
+Nonce.10 = 35484d4af54635300e886606
+PersonalisationString.10 = 128190bfdb50272816f8a7fb5bfd4d4dd00fbbdcfdac89fd
+AdditionalInputA.10 = dc342a6f15575abdb07b25d0e1707d2eb89509f76fea8008
+AdditionalInputB.10 = 211931ec67c836257a6a6dfdbde45046d3e26997ab6ade3c
+Output.10 = e03df89ddb33659175d5fd22f060966603856305a0f3a551f89212ec4ef7876b2368614cacf4fd020e4ba784a553475eccd28272a166b744546c6aeae06fe414768586519498be880049c4a0a406e60e3d3d9c43183397965b702a50e2172ae89ee71966284a38c661095b576809e269
+Entropy.11 = f8f7dcd5a45e43c9d3ef1b519a6a260390aa7c9b837d3898
+Nonce.11 = d8d35d1d93c5f5b9589a969d
+PersonalisationString.11 = cebbb4167c12f97f4249c446f4701c86b2d284e926418c6e
+AdditionalInputA.11 = 33089b1efc4f06682e6958a916c273380ed30a2bae88572e
+AdditionalInputB.11 = 99aa5f6a03354674dfbe04437f2615517d35a28ec7e2d3e1
+Output.11 = 5d10d30afb90eea8aca1aef1d92f4c37674e1678a0f4c6ec59bd9f2ad680bfe681ab962020bb85dec6671ace83d7209542cad3fb48bc626bde9124dede8cc150fb424bb80d70a3e59a70f54d8f7a00544a0db50ffcf1282ad10a9e7d508cc4463e0db19a8e1878d5232b182dd6e1fda7
+Entropy.12 = 8bc136d3f93874f55fcfbb6fe2a4f528ccf158e984ec39e5
+Nonce.12 = 6325f9050c4c3ea4081b3cfa
+PersonalisationString.12 = 8d05b3d6dc9757c8131fab9a6f4d4c3af5a9b0823637a242
+AdditionalInputA.12 = aeee1bf64f9e415228c62e36c69a7c60d0521208f4a59906
+AdditionalInputB.12 = 58324bd9c86928f5e49defb914b3f209059099854db33d7d
+Output.12 = 3cfa71f9839605690bac7b7123fe609900959dc907b0141f3f20f4a4e17e11c5295cd464149b4c95bd5596436bd7cd95025cbf97d201f8625d116d1ed804ed4a0f51d7e9110496181cc4db44499600dd5f6681886727b48d52c9dbd7a2850975ac2b781ae483d4ce4f824f63e5589316
+Entropy.13 = abfe395e9180383a31d98a05f7ef285fb89d34de25ed5dbb
+Nonce.13 = 3513527ec8ff87c6c8c38719
+PersonalisationString.13 = 5b5f87e814b1fab63b9a46e49b156b036f9d48b76f02a74e
+AdditionalInputA.13 = 74bd4cd14c3ddd3b9ccaa39722f8131d6359e40a473ddd3e
+AdditionalInputB.13 = 2f936d9bddd7dde3b1b6f930acd1a473203a2aefccd8492e
+Output.13 = ac7f40ab8cf0a2bf7c8e45bca7642bc178d367cca85f9f08d50f14dc29fa87d0d63ddf7a3bf8b54adf479e06ae6951e849760d738c2ff70162e049b9d43ff218f0b35b6949f2cd10390f59e8787886a2f78f00412b44e6cffa94776d84b25c26760edc734fa166045a756ecb725e6554
+Entropy.14 = 67790fdbfec284deb88c22003b3c89f253d087987698927e
+Nonce.14 = 99876a4250b7aef0158d6c74
+PersonalisationString.14 = 196c43bb6e6c43fb3c11d5b8b24c61462f9947e5c3c32b39
+AdditionalInputA.14 = ec35738bedab1835d07ec7a6d9a5e6e0bf8a3283541b3216
+AdditionalInputB.14 = 689957f9c2c58f1ff34899bd0c295bbfacdd149ab378428a
+Output.14 = 6eebecbac4dd64b170cf6aa84788f643755ad5c6c731b63bbba3b2bdc2694f1fd42fb077b4309a0cb09b5ed1107fee2379272351ca9221069530762e4c8ac4c142c30167a32ac2b82b728d57bef95d620cd1b7a2ab5c1a6fac2cc90e0f6cd003ef526485c8bf0dbc9baa7c1f0d6f763c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = c4fb3cc673584f65aab31e16454639870855f1214eed7389
+Nonce.0 = 6118e3772d3661abd2a4d253
+Output.0 = e76605f95067db702989804341c5d89b596a938da1dde2e95b704e5d52856106ad9c9dd40c3cb2a0a146007bbbeb33c6ce6a73247179246c2c62e4eb94047f19be976badd1fa2ba3fa2ba8e8390071dd745c384005de7d4add40e86d9814ff338963f99c04e2b8049d6eff177762ea15
+Entropy.1 = a1c83f9dce3f598779cfaee5b35b44a186b0400d69ef65ce
+Nonce.1 = 873687888999958af6c43026
+Output.1 = 267acc1abf128cf3e6000a5663a2c8c391e0048091a0ba3bf8a7fc26bd0567ef8017404939041ba15a02fcce30643351d86c59e4841e0e37ff1747a555d74b61ca2ddb06c502aad9d894a2b1d3d538294d7c3cd30885418d8657010ec1311e2d1d81fe00482620cac965989ac4ff81da
+Entropy.2 = 8b237ceffa56cece738386c02ebb18564e6d8f8d95933694
+Nonce.2 = 295515a03cbc5549328d1402
+Output.2 = e4571e6875291e55dd133d815f8f79c2f16787c90452978144ad7f1c86f4f626a42c661dd8dd3f89c56f01638d13f08fc12c05a934f518f5ec8067b81f6541a1744e653a903275345c932b7f75c87e28eb27f0efd4424bc73ff099cd69ed1d19bfceab1a00de7551cbc0a17b28e94e91
+Entropy.3 = 7108dd77febcf9c9622ce18d0e55eb133185d01d0eadaa46
+Nonce.3 = 9d91b9c79cfd327ffddaf258
+Output.3 = b9492242ccb9de427f72fc0f335c8b6ab4923f77a1d6b77c66c9160bd50c79ef52338f35b526da4d5cf57391976161c2501294fff25dd539020fee8109e1841b28697237adaae555db963a36b7e5b1becd3c0e477ab8adf0ca27f6560b1e21a4005322c800c03ac12b0a0f9e32044e94
+Entropy.4 = 35a71f1f1477262fbdeef3c6519b4c8cafeced619247f0e0
+Nonce.4 = 131c28c430e082e247fbcc33
+Output.4 = b75094b8c9cebb7c162155287b2d8154833ad04c657eb1afb3f25ae88a0445bf549b4c4e211cd4390c9bc5612f88fa5825907a93aa0042bcef14b5a5c1930bc97f1f6bae6943eada1f0a70c5d4f20a2ed62fa11cbe48f46f267dbfda6d9617518dc0d386fe25f1f706778e7d9eedb349
+Entropy.5 = 6fa7529f51970267e12691bc61d751ffba248097523b6307
+Nonce.5 = c3daff5b85a277b8cb6602b4
+Output.5 = 00af923a2a59b73aa75bd60ea15b5c442b781514e18b9013e38424a2317b730deecce9e78181fa1452c6dbf2e22c76f17ae1525bf97ed277b1837f9aeefde422185eb6ca4b56e4b0bd3ab4dd45e77376af2058f99e863c92532dbae96d35039b9d6c530843d1df37361ea0fd039f0a71
+Entropy.6 = 7fe4876c24e1984d3cef2d39363cdbbf3d62314afd38d15b
+Nonce.6 = 1c7aa72ba39c93dda32e8216
+Output.6 = 55350dd355aebb35cda8277553fdca6899db0db798fe65192e496efc7ad7c4d12f50987b505e7857d39ceaec843f6ffb6df5036b9f9440003d1ff3cab3aef5808a99fe59eeed048eba61d0f7add2986167edfe7dd77b5dc0151b57338673f3120cf051e7daccee9780cedeca18c71c5a
+Entropy.7 = 1ab7a896159cde0950808fa4634e047c8ea3b21cd65385b9
+Nonce.7 = 7c5dca71d1e6d7db475a0eb6
+Output.7 = e255fb01e7810ced3be9ea0410b85a576171ecff2ba6e42b48bd95fc7199be084500ab32db29ca0df32d47a0d9cb31ebe33f0c0cbd9d3fc88a6ec455b601e0317ff4654a0826cf76a8ae1f82037f0c3a9a0711ac8ade55a5dbc8ad5c291f6a4a2d413f7178cd5e5b1e20a6e055ce6916
+Entropy.8 = e5e0eeda6c10d7399d4373cc1763fe7497a6dcefdef3117c
+Nonce.8 = f834f84ae5c5f575c9051b19
+Output.8 = 6a5c5e29af39950a974779f9aa12b22b7f4508d81d6af68d96f7766e1ddcbdb6a8e49407148f7b4ea0e536db358654b4e6697d6857eb1efa611731612dad3e69774a5b9432afc8c666f495b104ce3e8bbfba5a58eb3ecf2a0837c533ebac232f7e14353c27147109becdd86f03ebed7d
+Entropy.9 = 9e33d60882a7d76830d4e09bd3875a7c79a70dcba6809a0a
+Nonce.9 = a42882e1bc97ae2cd31cd651
+Output.9 = 280573785ed687dbb9089b9dc400c943d3be6a1a9eb23a08030193e8435630c2cb580c79c103623aa8e21b1b88a658a7ce1e95fcd30c6a5551d46302c9424dba582ea57204f7e9d5e5ce28fc705b3e454f9b1c93acc47453f91c69c3d1f1dbf2e003c7b784164df89105248d39a9fa9d
+Entropy.10 = 9f0463cdf0a570013618750020f3624150c7e450a72982fe
+Nonce.10 = 3ebe6ca51bc5917b8e813890
+Output.10 = d12634c4bdf03b793df7b5a958a7fddbfdfcc8014370c95197166582eeee86db1aa4c29ed27fb76136644192ed4bb95b8f45ac8c3cc0f5fdb1d2ef897e22effc320eeca1fe8fcb0d4f40505143222760bfebfa33eba2d1cc3b68715c25a2680a404200780fcf3637d7b0159c3f76673d
+Entropy.11 = af16fec8eb451e1fe943ddd6b024f9b2c900da9a51a34cbd
+Nonce.11 = d521f835d68b4e7935be1bdf
+Output.11 = 56368c7a9f8ce117cc775cda0508117f0be43cfc2bbfe9b37237d8e9b4f430c7f1a589f4663a837525b514388388d93c37b2ecac465c958e0aa0404552ac5ef18b5e8eccbcda175347f05fd497b205eb3565a84cf8918532f0de2af9098d1f673472f98dae065fbc95755cfd7c463c5b
+Entropy.12 = e1cd2895c2bb7f08a17cf1ed43edf63a1079683dda7f1dc4
+Nonce.12 = eca177fe86d8103f3ceb80fd
+Output.12 = 52fe64e3a895c3e03c5a1c822f00412472ec8dd33587b986efb16351717792c5b9de7992dc53fb48ce19e8e46e95187fafa8eeff8e2b6b82382b5666e5fb10218c00f5fd154a7f15d589d24c932eb6d906ecffe51091101e609795a2945ceef68eab4de6f8e993adaa026a29e37dd07e
+Entropy.13 = de09dbae1769318a11934f3a60e4585d6b4d3651a3fe9438
+Nonce.13 = 15bc228bb7450f10b4541fdc
+Output.13 = 1a9f338f8a8ecfa40b7dc768025516eb4fd067fe9a3d3169bf1a613c1c04e21f53bfb102069cc077b7fa88a3934d522e95c4999893e0b8df84367f2488d5d6d32bf2cb53c67d55875ba5c90a4faf62f6f6071367ae33d1ac856807cff9e58b2510d391f1686c1891a9013c4416cd61d9
+Entropy.14 = 2fe6d7ec78f76820cd88c41a5a958c399c7ad1619406caca
+Nonce.14 = 1ed975755cad5e4c475c5945
+Output.14 = e34b31db083e58516cd60ead2e5b0d39e4a2bb47c2436531c0e700e484c27d3d233d10d1ea6c58148149751f24155fcd258f384d61000da88106a0205d693e4ddfbb5c35f101ff15e531e9ac4a988c16302a962146a3aba9af5c505697cf9aeb7bdb8c49c281458acc33ad4010122aa5
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 7cd0ac25d39b0f4819498fad7f2dbc83e9c4d73d0664c4e8
+Nonce.0 = b2d4ef38e3d037cf62ebee9f
+AdditionalInputA.0 = bd78218cebad956843f549e61c2a7d8f16f763f6482b9294
+AdditionalInputB.0 = ae206217ad5e88a9f72845c7aec800162e9273e08d91f53e
+Output.0 = e399fb7290f60a64a773fa98e34d0848837df98c39c3ef73c6b4f7440ff4bad9361e3ca54f2c2c8eb1ec589ea98076566154444e7927b74894e3c586626d1f8271466dd46acbccf7f02bb88634baad04d2771b7fd8367fa7a7a0d2462380509ff82d025b5c8c3bc56a36ad60632454ee
+Entropy.1 = 2ff9f57e31f09cf62b40907efe5ade5dafae434d49b6a5e8
+Nonce.1 = 9384a11b7d9323770a0136e2
+AdditionalInputA.1 = 8c8c191fbc1402fa146f744b59f2824404ea6eb01eede29c
+AdditionalInputB.1 = 09413b38438d354f4e0b412349fef34ec4adee658381aa3e
+Output.1 = a34de7d42460b7cde46c0a8abcac8b2ad099280e7b616219faad831337ee99bf06e2c0ea2dcb4c5e0cdaa485f7b70a48e4ebfde73fff246aeaed575ce23ad8e14daa30fd1c9ddf46f67ee8d17b18ea0b75fab38db8224a7446020bf0da8d433f75b23c710d7fdbdebbf5a2bcb547d3b8
+Entropy.2 = e9a389feee1b70f0fc61d24ed2454d994265681d890a1803
+Nonce.2 = 0ff859412f4f70f9adb0f26d
+AdditionalInputA.2 = 22d9910ceea75da77ef610b5c8bc4c6f8f1f4cd4eaa3255b
+AdditionalInputB.2 = 392e98ef7b7301e6c02953e6353308d5ca58c38bee9da865
+Output.2 = 3d7ab9debbe8e8b5f09b13f8a9b40c07a0536052a44dec8c9cfed28eaefe05d4130abe437c6ac23625693fe92f72f3c367bc48d1dad2802009ca9940531ddab492d271501d3e29fedfd9682b7ed2a8d443f253ebd3c4a6142c7538cea9f139d7bb24a75c8565114c5adc9645ed498588
+Entropy.3 = d8634616e8c49d23d6d8ba13298eaac1cccdb54b7d53c35f
+Nonce.3 = 84f7e17bf6a05357802b305c
+AdditionalInputA.3 = ede091eaf75e800cc30aac3a31e5278abd5558adba22e245
+AdditionalInputB.3 = ce87423b19fd9ed44430b66e2635fa02a169d985508d21e9
+Output.3 = 36adfe1ca977a2a98d01c22599db8113e6456b6f187076b75406711f08f110aaf848c182e2f94f71981cb3be96c636fb309409dc72823c81cda23cc1053ef686a8aed3585b106bfa6b2fc8205d1b2690e18b7c726997bb1588fd67fd5ac7df42288d97fb4d8ac18f0cddf5225611a82b
+Entropy.4 = be138010ce76c21634c2ee7238f62c11ee4f9d73594bcaeb
+Nonce.4 = 867ae2fccb3f393413262cba
+AdditionalInputA.4 = 765f7711577bb646002e8eca1d4d176e67f043fbc36e35d5
+AdditionalInputB.4 = 0da69681b3d142bc24d0d35873823c1c9f2832d150d749a6
+Output.4 = deb2d52011ff756ecb86777250182c6df46a9f80cf541b4ad08300cb4d40d960f019a34c13d2941ce61b78bdf27ce14684e8a712f947076306b3701e75b1c8177b511f6c9c6fb0c47dcb8fa57851a551eb3eceb935e64a98021d77167e9a17988868aedce2203c042387783f0dbddf44
+Entropy.5 = 20522bf3d40aa4ba46a29659d6104b453c185e67ad6808b5
+Nonce.5 = a6c0e5f1786ceeeb28c103e1
+AdditionalInputA.5 = 31a6367db8f006da27b1b738973938f58a3d90a1b840deb1
+AdditionalInputB.5 = 8ef1a71d781a600889f3617a26f48fa3ed9c8880955b5c1d
+Output.5 = 220cef1c9b6434a27e1fcdee79a52331447cec09692cf81e59fd7db6d002aebc54d7db8a1f9e098b04a1e38c7c77ce8c61650eedd43be3cfca4e61c3f75ed2e280f17e2a05c6e77e7ba8c9ff91d597aa3eb26f0f7d120ee303a5595330f18eedd75920cf95c0c36bda6cc215ff832c36
+Entropy.6 = 596aa1fee7fcea366a972188c27eb0e268a798de4dfb52df
+Nonce.6 = 811b64304324b06d7cfdebb2
+AdditionalInputA.6 = e9beb6e075529b9ffcac6e15809f7900951f31d2255084d5
+AdditionalInputB.6 = cc6006c354abb033df3031efbd52f46f1ddcb402f93d8599
+Output.6 = f1e9a56422d3370830e912775ad4b2e1a09e5cc41932332bae778ced63c1db4f19756cb0f6acd0f1db1da0e6bc3c3bcc5e43eeb789be2accd6ba9aefe80b854e968aec0f5eb14233005a53f105b007f115308ffc56fd302d7654f302d00613743e494af4682060b33e609b03f0e1521b
+Entropy.7 = deca084ec56e1f704e7c8a237cf20c97ce915f2a4f249265
+Nonce.7 = d1e93bf0c3bb22680c67d835
+AdditionalInputA.7 = 18e4429eeeb6990bb0c53bce2d922bf103e9eb8fea583b5e
+AdditionalInputB.7 = 4bdf70e86332d2549111b8f1a140c12baf6dc834faf481f8
+Output.7 = bfce1e88a86a96862cb62906641abe91c135a573fffd66b1bc3313c83a031596cadc3b7333a55431f3b9127b47c5e82ab56e39ccb0dd736ffb63c820c56d8923e67dd1249b8131013722ce080d94833ce86d1ab2e260e4b19790f1205a50e1d8aed64d4bd172f182021b247651cfc246
+Entropy.8 = 0217285cf32ff124f9816bf8f415cbbfea4fd9b800b53268
+Nonce.8 = 8f33154f1b98c30a4a6ff69c
+AdditionalInputA.8 = f7a363a05e1ad62a301b369cd5dbb203b1ed7d4fde89f987
+AdditionalInputB.8 = 9fbc34c7e104a6ae7e0533e6c914154ad2cb421ce3ee8ac8
+Output.8 = 2a62e2f9629d6d9b7a9f4909e16aba57fb9899ffd362ffdf13eb5d2fdc283d8e67d41de07942f24efb5d1da727186635fbc3e57d357416d6f4168743fdc7497d81e568e5c53a78ef1dfb584539b75368f3d0ea645c80d1320f61f2b0f31fd5851162b629c86bdac5f1968debe799e2f1
+Entropy.9 = 84e389dc94e2c049164dd3d8bd3ba3789745d6e1ee4059b2
+Nonce.9 = 8d51c900403d363780db9a6a
+AdditionalInputA.9 = 8f8ed5a48265f632e9877dd60a909b51dc765e211ad04cf4
+AdditionalInputB.9 = 71d8db255499a7da92010ff5e400a8c5d4fb2d82df842131
+Output.9 = f3cac3710a5961dbb8c05ef27142d05c1d36e4d2804983933d856752b1e20914381419d97431b828105c881a6a5bc17151902c5bf85b4c1d744bfc6222246498af3e40d1181607c593320a127f8f23d330f364cd9a85e03dab043398d84df37a4527562016cd03e2b231a341576f9538
+Entropy.10 = c91ba78ccfd117371d77e82d3d0ac97cc19d4378210c5a22
+Nonce.10 = cd40c4b742c038f72d98c93a
+AdditionalInputA.10 = 5ee95cbb690b780d882a3625fca7899984e3c948cabeeac9
+AdditionalInputB.10 = 576d3b60e504752bdca2a500ea2d081571cf5e487f0c9ebc
+Output.10 = 173927a2b43fc2c3231f99ed92b7182f52e264c3d9ebf009471276b099ec904550315d92a47655df02f3b014f8cd975989e538121ffde40486cbbd78902951db5f2b0b3026e10fc48dff5ba41689a9df67beaeaed7f34755a740dcbff59dcd301214bf0556d2b868a625cb04356d148e
+Entropy.11 = 86d9cbfffc5bfee75a219e3f616c17e9d1a6692976ffbdfb
+Nonce.11 = 68611840b5bac261fe97ea5c
+AdditionalInputA.11 = d5d5ce8479631b37c1c99adee2e99fd487bbf4db191a31dc
+AdditionalInputB.11 = 22ead38d9dd54c82daa18528e98f4cc7378312f0299dd70b
+Output.11 = 15d0930e1e289439e82fa7ed49e641741a0e72207dfd3c56ca4d2a65c816f88036414938f4fa0a93f4925f094bb8f3369bb63bed01c8672e5abf17a531919fa0d607f5f37f72c7bcc30ff89c8a48d4c2d97670bc31d062faabdbb7da52a9398e29f2b35e6d6691eff367dc42fd20bd13
+Entropy.12 = 0f4ce7e8c15a2760c23eff7ff4749a521c8ff60ce0e02a81
+Nonce.12 = c05a87eee25ddcd5a6ac703e
+AdditionalInputA.12 = b76b9d4dd1977dd646ad256d09de6844ed385e26e8425171
+AdditionalInputB.12 = cb6ef520be5ff2906873839b9efff647d7aa08bca8031187
+Output.12 = fb4b2815e493a36132a8bd3ac670fbcaba1a305bda4a5323c43f8466f7da209be4decb840fa5d71b474bbc8177b9145156c0d47772f15bb1af634beec127d120527a7a7b834d0e8204c6056871df54169c0dc075ea6f402e49370828fc4257ca69c5ab7340ef574aa3f7e1e8cafb03e4
+Entropy.13 = 403dfe9f80b3562d4c349145aa6f1d46d70acd16192dbdaf
+Nonce.13 = 4c9dab7f11d3c2211e5620c7
+AdditionalInputA.13 = c0b0e304db4c294ab44bf9f1b4618236516319b2554d68bd
+AdditionalInputB.13 = 9ae70772b7bf86dd51f9957af96d3b899d4441ee84c88538
+Output.13 = ae41c113ebcc299f8bcc443c245bec19d4b3a746b9f52ad47f6952a338863b0a4cdf2d635e5f59f23a4aa0a425e701a92e726202d63b339a81b7f7486b657738a6d6f11df213301dfe110e370a64af01b19b9c2006238376f4446f3c6ccb80969be4cb60c30a37c9221c12f811173188
+Entropy.14 = 1c7f39179d24334699c29eb50e1a79dfb2363250fd016299
+Nonce.14 = 1122354dc0f35c3598742aa5
+AdditionalInputA.14 = 17c87a351e940e261e8806e2548da44a751c550ff5f0257a
+AdditionalInputB.14 = 7e3bb28f266786ae38c24876087fe35c7e43222382270380
+Output.14 = c943c9ff0cde86a62756465e6bf4fc9dc25447157537831c975782dad82f3e33e6e7790b41c158713b8978a6967bfadda9e15ef43922b3f93c8ccd0cfa834fbc6776f3c1b6369b4f25b1cd1189f8b8efc31be2dc151d3608eb2189a4f39c0f0a3deba00ffc97299c11c46885b424a7b2
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 540474a887a098daac97c42f0818b64d40b8eb47149fccbd
+Nonce.0 = eaafb1519bad0b672da5d22b
+PersonalisationString.0 = 8181206a69385a76953a51d7e5edff3157ef41fd08c41402
+Output.0 = e7103405a5564138ab0909761b6a06b7e083d294c495317c8145a58162d81d1d3a09b80a3be99da51855b87611384fd171e648380d02f23989db0ebb42d2968fefd7662eaea94077dc1778b867c69033d3ff83fba96b57f303fe68261f48301bc9a8f063254a185fec9a180e6bb5aaea
+Entropy.1 = bcaf9aea03649886a7e783417032bc48f0bc3c77a6c46124
+Nonce.1 = 6ca3fef89c7d9c299b493368
+PersonalisationString.1 = 9eee0eeead1781d38ee6783630d3e65d9db9d1c9ab731e71
+Output.1 = ad5d0a53acae54aab7432409ac7b46b1c54ba410ff60079dae18df059a644b0610cbc5bd37ee01ac4e40e16ff6972e3157f952784d98b50967c8ae75a36b85cc830f6fe856bcb0ed4baedf93e6b55fb68e3a1414532e4a7297ba7e3120d5365655653d79207eb76b459088b16b4f07c8
+Entropy.2 = 4ee53b9b089cf133e5e162085d506716cf37a5f0aad13135
+Nonce.2 = 8e6f882967d17ac775e2326a
+PersonalisationString.2 = 805c3ee2d07d3826289cf5ce76a4f70573f13e1b1d5ed514
+Output.2 = bf21bd026307a1c2456029bad6a4b19fbf18337f3a6498d26379ac147c0a59b721e640b499da797062a309eadd378c922983a7ace3ceef05a86f882cb38ee714473f48c5088aa35c5db7fe7d30933aabe57ef2df9f94eda15772f3b28fe1dceb661e708d90e764d870865e65e747cd44
+Entropy.3 = 37488795638f53d944c091548b41ff84e1f59088658b57b5
+Nonce.3 = 992ff3c60155f91dc00909ca
+PersonalisationString.3 = eb5cd8ccca404221791d4d9c3fa8d561c4b7b716f3e267e7
+Output.3 = 8be432e37dbe2cf3fa18ee66e1fd5d065963e15330960c0f80cbd040bdd2178996ca946ebf9f84bf5373225022e789836b7a7a8acbae99bf689e1c73fc7f507822fcffb456c0bc9bf4f3167d8042e09266ef10e92dd522d0029fd642c65f300420c1f94e727f4a6bb1e2ec6ebe7e7822
+Entropy.4 = 37300fb491848475c02d54a5301ab519ee0a4f79f2f45f3c
+Nonce.4 = 81f001ca36ef52bd88d8e3bd
+PersonalisationString.4 = 0754e254e5cf74c59997909046293ce030bbe3bafe69c7c6
+Output.4 = 00b002b819002e67e15667f067441e7b3f1a5504ae548be606e58c0ae30f1d26f71d81a0db5a25225b6036847d25af79939aea8c4f0bc3541b9ede8a0a5a9a3f45eaea96d88f6fdc7d395818225b60a3fcac49515a540fabac74cdf57c73bc59689d19d98a9f313e2581a784284894ce
+Entropy.5 = 8f251f01405589464b7e05e73459fd3432e10a28335347e5
+Nonce.5 = cc63c71fec0170aedf8d537c
+PersonalisationString.5 = 2116b9245c27ea748e2137a52334c918f36c1a64a6c7464f
+Output.5 = 290e95a1278b4f7504dad0231e4733d736698f4222430682ca18ba0aff31073e53d51c70046f12b1b6a14d74247cf1e3aff2a0a1ced96bc1ebae92e4c09bd810e354ab268da3150c3bd6d9df62d5ea6cef9c49163766992b52b137c40946478290941e9238c7a2da1a0b00f4cc4cecec
+Entropy.6 = 3613593f30ab411023c92b1a1790e07026632c1e00d70661
+Nonce.6 = 853d8aaeb7848393f43eb566
+PersonalisationString.6 = 17227dd8912f2506f849413c870519ae89245c426f2a2243
+Output.6 = 450ea8ff0e69e88bd799f446c506d7157d92f0b62d12618089765eb35c45415c28c608342f0e3e6385afb9da049275da25ced9ee04508588461ec5f502625c2ecc5bf6b5c33e646ad4f6a6ca98774c23585216812229c069bc7e3eabf7584c4a8d50c4a1184d95f77a121f6c1b9cc175
+Entropy.7 = 762bbbdd8acfe5561274e27d2be46164863ffe556d37fd38
+Nonce.7 = 15c70ed7de9e2c385391f0e1
+PersonalisationString.7 = cd60cd237f33e40b3b37062dfa56c1cfa90b21c549c48d79
+Output.7 = 51c49e156d6fb62706c79a67b336a0c00aca33d390c483c46996057a9210e5c2b3bdb10c5fd08b1f4140c6eff0f0cca9617f1d3248370521576c51a5e2c30cab28b7e92e2c5758641ffc2a72efd065a57460a81e4dce6b47dc3b56482e024bfdda01c07d0aef4229c7b10247cf8b4ca1
+Entropy.8 = 20b5460e9de84c54c032a00281aae28244c00dad68090aec
+Nonce.8 = 1d4b21fee75f3fced9c0eaa6
+PersonalisationString.8 = 486c4f79ac8d0e50c606a4f918fa237dfadb748557d230db
+Output.8 = 89e6e16d7a504bf60f8fcc96ff50e50fce259255d1b36293957a6a377c0dc949fa72d38ccfe19290827fb1dbc98527cdc1b1c75b5faa281a84497d871767e67e3f37396f7e50187cba2b4035bb9b9b4d8783bc4ec610f458ae88f37a40ba0f385569097eca4b40a0220f8a5f4b172c70
+Entropy.9 = 97e55216da9e733d2d305316f447c21ad0073979e9782818
+Nonce.9 = f2ca8e35c362794c9746d415
+PersonalisationString.9 = 409eb3662ca4881d28eb316d8c278feb6281916c44eb3bdc
+Output.9 = aa85c42dbf91cf07b753eefe8ab560b9b0ff2d2c2b49a45eba03db5c7d562ac2c2db7daa54be6e75e87896677b9ebd9ff91ab035d865fb75aa6d418c098a9506fffc74fcdc5d2a74e7352df990ceb38eae5719837539c8a132f2c535cfa1bb69cd6d4eb6f40874397e1c8938f6fae444
+Entropy.10 = 28d50a878bcd630b30233ac8fab1fb97050809109ce9008c
+Nonce.10 = 224cd9fd557fb7bc5c804078
+PersonalisationString.10 = 4bc7107510317ab16ef3d2a640aff47875f95a92c2314aad
+Output.10 = 23d37ed9f748e0b51c0613a3d2e4428ec8e8c06e551b029c43c8555a2720a89de0c3b533301e21dea1d6893eefe77466ccc518d1ce48690f8478a23ee4e1fc8486039d2752fcce5b9d6fdeec286c441f6b12d8f6a8d39154db12c71e38f463359f8db1c1e68a61fdc0ba0866aff438ee
+Entropy.11 = 59427cebd6bb51403dc4e3b98fb2d8161577b97df8da6cf3
+Nonce.11 = 0a0202a23a48f3a04b6869be
+PersonalisationString.11 = 80527604f7206108389b0d789c2268039932d53e09878902
+Output.11 = 5cf701785ed71ef72e2575055dbf277c28ef352c74ad35952c4a1456943c0ff02a29d88c333da21186c0a96a4d96c8875b8249aecb5785ac1768eb1da0325563412bb7d8e2252de3fcf87100b3f5da9b4d6b369ca978944080911cb60066960036985e33cff514a30f2483f2cccdac15
+Entropy.12 = 2bd867d7229b5a6acc918b27563cddcace362cbee8d7045c
+Nonce.12 = 2a6a7d5de86270d56d36f209
+PersonalisationString.12 = 9a002cb5218f84b74413a35df313344fa2961c59a76d0f33
+Output.12 = 9f682ee53c84d4d4a49500fc42112173d0836cae6d7c89c8506ad77da295732d61dffed48c47be800399acc02c159c8979f37ab875442db6c983fe846da97c7ac9bf38b70f74d52c2efabc38728bdbb05df0f469ba933213e601d680efcfae6b397dd13e37d4d371cd05f850374d4e0c
+Entropy.13 = 02ae1981aca084a3634db99df57878d6d9d43f7d89658f67
+Nonce.13 = dce7d387c7662b1f9d7575d3
+PersonalisationString.13 = 26975bcd40635e64f1d37495af4da7f3e4ea6b9374d59e09
+Output.13 = b08036bc931cdc272d4c4c66894203320e28aca6b5ae174b5b820832563c0be15c4d5e3468c3397b4f960d73e6f5a4166b5491cd9f431ed43fe2700380c6c848a84bd82ce69439dca77971fa402f7b720caea84f6b64eac5e7e744943eef6c421448867555a133849cd7edc7576e3b8a
+Entropy.14 = c3e01806777c3a435935e3a3b55110bc54a1fed09cad0e08
+Nonce.14 = 4fb71fac56d2aa35d7fa44d1
+PersonalisationString.14 = ad66fd02b6f6e30ce521ae0d783236c75cd3699696475ac7
+Output.14 = 4b2df98ad411407c1dff07b5c08e97ab501fc20ad191794dab73e9b4dce62470b3c70d75f07848f436f16a8c63ac31a75525bd928b5c76218099ec940e3ad193eecdbad834557e92602d7daa6e3eedcbccbc4d0829c8e1c7e59adb95ce928bb138870566eb27e4725191a9ebed50304c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 0
+GenerateBits = 896
+Entropy.0 = 5bf20c3fbb97e770355d522f06eaf7aa4f67280f11d14502
+Nonce.0 = 6085eb03eb7b3d2be92bc000
+PersonalisationString.0 = c2a83622b5b30faa3823534b3446af32e48057c2985ce4e6
+AdditionalInputA.0 = 8c93cf82da18330c34db37f3447562780a69a6a84f4c6012
+AdditionalInputB.0 = c649c9a2dfa87b4d57f6aed26ad3f29845c6b2274ccaead3
+Output.0 = 7dedabaf55fefc6c141bcec9c9d5bc272aa4e31039062e1dc99de7d2621f4b87b2438cf4e81adae7f44ae3b430d5311f2f25072b927307ec04b55cde24e5d775e58d0ef4b9d2f2e8f4728537f74842f5418502a92a4c8a0b7741a1f1ff1f2dd7ec03c26405445fc9bda9dda869007965
+Entropy.1 = 5682c920ab8e959c0c0f338d8211693e8215584f326960c5
+Nonce.1 = 321541f5845784986c40676c
+PersonalisationString.1 = dfb076db913e2713188645a7f0ef899d12b9f35d3bff49ef
+AdditionalInputA.1 = a01db449c5cddd36a17124f2156f978371a537287d84fe54
+AdditionalInputB.1 = 59af26bc3b007895035b0b1b7f4ad84c0f858f8e9d44ab0a
+Output.1 = aaa8428afa0945335015c25e33dfbbd319633571bd35286d42a7570982c19c35efdac6ce9cde5b4c26417f550d0f49508329418367ab07add5b832333a8945e4fd948c8f9f98a809697ca7fc33c44395da6253f5c39ff0472a4321b235defee3966ffffd0691935c530dfff354175285
+Entropy.2 = 0784b749c1c2b1fec9fb04353337421b0a75a30aeccd9ef4
+Nonce.2 = b5bd2758fedcdd59daed77cd
+PersonalisationString.2 = f3c84c5e3fe4adbc9edf5ffcef1d9916c7761a434308efad
+AdditionalInputA.2 = 3fb177db53c3461aa5703fb665f98c032c80382492f095af
+AdditionalInputB.2 = edd351d70dafe2e6f8a8ee4bbfeb8b1d37e6fc910b2bbf44
+Output.2 = b8d5a0da04526141765095ee0fc09ad74d46ced1aa18ac73787f2c176623ff1c4ae306f3df1ccef5aca8bc5a601f535f59090613e9628c38882d52f0bf8679526a33bdfd70b2029e35d9c396b68adae7b690fcda04adfd623ef0915600e9b13d278967260570f23820330e87a096d3c7
+Entropy.3 = 9c615b41fd3fd3e397ad2c9b182c099d1f9e4f117912558c
+Nonce.3 = b48814030846219c3ad97aaa
+PersonalisationString.3 = 0e8885e7b1e8b35f94492f3000301610e98595327c32b487
+AdditionalInputA.3 = 32e9109f6f2d513e376ec5d38449b32a90404dadd997b1d8
+AdditionalInputB.3 = 1a7bb8200614a1c6c2259675a7fa788b3c336ac2b2975331
+Output.3 = 8521114ba354099bf94365b2b361fe319e939aaa6b7ab47d2f884732fd94f68480c1f14321212ba8bd3a0216c4df07f99fbc6e75d17195a1d342303610e5d818fd9edf64c242d0b7a8d9a4488e330c3cf42efec25da4f2a55d69723b148da46a578565c78ad0bba784be3b9dde14548c
+Entropy.4 = 62988681bfa860913709bbfd3a8bc5274cb73c28976e7a64
+Nonce.4 = 1bca37f4a2d83578fe57e4b9
+PersonalisationString.4 = d105416a8cdbc6317cdc74b73da683a5f0af998aed927845
+AdditionalInputA.4 = 104595afd6b0fec0ce25b54dbded4bea7eafd281fe9a1349
+AdditionalInputB.4 = 89f261d602fdd5cd0229a8174540c2f23b507a63037e5c11
+Output.4 = 335241ad126ada18e1e160147886ccadeabb147423f687bd426282838a9722d1ec1563bead4bec86e46cdc08c2d1558e35594ca5e88e81e96d6c7cbcf01da3abdfd7cab26a91fa0a4daeb57c204861573738502d80829091072c0a063e2f7426ad390ecaf4a7347ec80f03f199f6ed96
+Entropy.5 = f8431b3d731d19e7c2831d102d531ea079899e60f46ca05b
+Nonce.5 = 2c82c3dbeffe4d432eb9686e
+PersonalisationString.5 = 1100eda9d679de2ac765d7080758a35aba516e038af15e05
+AdditionalInputA.5 = baee835ba95f04284d30d65efc6c8dca13ba99ec45109be6
+AdditionalInputB.5 = 6f3f4fbdce86e074bf4c0700c37f38ab7bca944e10c8fa06
+Output.5 = 7c44c5c98c03db7d31fd3b1250633cca80b7156a261d66a0566e0a865cb5aa75d692e3874e9367deff760dfdef4e84a7a876bbc86df0b59f6a565d6fe24a32912c09109dec19de565f265191e05fbfa6b2c0566fd024c25ba30521b6c8c1bc68a79e778418513dd2e034e6acb0fc05a4
+Entropy.6 = 3a42c7c7e82b8a2408bbb6c7faa6d35b0e7ea502bf165600
+Nonce.6 = 58ca8084d6f3c5c6d0daf564
+PersonalisationString.6 = 2510bd846cb92fa9f886fe58cba267ace4e9c7c75421bb37
+AdditionalInputA.6 = b177cd86579fd72d3fb0b77163804ab9de2a42cc2c7566ab
+AdditionalInputB.6 = 9049675ada39fefd5e1f86a31df38e2eadde3d892a820a04
+Output.6 = c2087da5af1ea949b4330b54616fb0d44420e2e188f8ab311eb0329013ab54b98b26d26f78f1ae1b16998a4439df262246042ff2020a490c21e820051a87ee259de93d4974e401cd25758da6c75bb2e7846a3c88a9d300c087f10d1521942a1c3a112bbc7b4cc08368ef8b3bafbf3a32
+Entropy.7 = cbcdfa7f3569761870c45723899a5d0a51f4c5c9c144e19d
+Nonce.7 = 102cd91d3660db996a280e80
+PersonalisationString.7 = 877dc905aa23081726653257b11434aeecd8d3c2aad0347a
+AdditionalInputA.7 = f1985cbd4b52f44e99135c8767ee6eae8bf1f41a63b1f616
+AdditionalInputB.7 = 322d4e09587dfdb4f12454bd6540f4220b507d6494097c16
+Output.7 = 57713161edb9ec7eaaa67e6b81fe4364473d168059ec1d13607f625e4f10e50f2e74ba85bdc15d910ecafe5074f80086e2da1dbe6619c85d7c1130d0e3aef336aacdca3f66a7eddf3420fb8b8c9961e05a5fe3b8a78068011cf7447dac6ce7bad8d7461778aa54caa867015281b7db7d
+Entropy.8 = 829cc50508f0780e06902f12237a45206f37a40aa153a37c
+Nonce.8 = 5ef179b9c3d2e7aa988ef879
+PersonalisationString.8 = d9ec2e226ee3b96d9d98a7e93f0d20ba856bd75359c49132
+AdditionalInputA.8 = d8aebcf39ded17518e3cf3aba1fa54e98bc305cbc69ae909
+AdditionalInputB.8 = ce69526e3b78db0748f263fe76210b14c6cbabcbe9c10105
+Output.8 = 085da2ae17fcc727ca5401e99af6bca848dca003d1a0b6fc853256675216a33abdaa8306c342304494e2d178ad26710845061510ca37ba9091cd0266b16b975f5375fc432890acd7d57be995f8f0c22b7ff16d881deb9db25cfd54b6dec2bfded32c6ad71c94633370a6a13d98280f4a
+Entropy.9 = 3062a34c22417cfdce69a1c7eedc3860d2867e605708304e
+Nonce.9 = 3151bb9a35f8cc0651c3e8ca
+PersonalisationString.9 = 3e96d57fc181868ebea7388f5b27ceb85168e1bace15a7f6
+AdditionalInputA.9 = 4bdc529c6f41c13abbc29690adcce2db67704e6681a4d23d
+AdditionalInputB.9 = c7eb01b7e78ad989298fdbdb5c7b64942ff9b42e3a77c623
+Output.9 = 84e24b9f76eae69bb07f1797efdd14d85d57f2788ecd3cd9bf66f1b93ee82c181c40122a14b7b43aa7d1b6251d11d62fc1e3d130c06145da650f54d256f5ba22f5f2087f6333dcbca9fdc0d3580285df355a1bc1d48ac704e677399dc56cc067a797fc3972b989952a8e5fd43985a24c
+Entropy.10 = b16562524212943898692a5dc27487aaa672180a6bfa73df
+Nonce.10 = ceed667862bfceb8a194801c
+PersonalisationString.10 = 1a041968ef2f8e6fac6e82cbb69a23b74988dd524ac3f29d
+AdditionalInputA.10 = e7c59300979604ede174777154f79c3d82ab49ef8a8514cd
+AdditionalInputB.10 = 690445a88f7d8160e1fa3cee8f31ca19b294fb1ab16b520b
+Output.10 = edbe66ab6252cf5a6545e10adb9db2018dd70a2cee28d729a392147eb3f74eb871dadff057b0597c4908bf6e2e5af78fbf0e3390c14b63449b8878fa546b25057fcfde15b8d7bbaf2dc336d62aece9eabf87fdc58a6b7209567647a6779b4e68b8d1137e186c0da0bda590817f2f0787
+Entropy.11 = 711f60b8245f09caea0b5c02c28af104c8f03478e59f0c2f
+Nonce.11 = a473eb0a1ec31566475fba15
+PersonalisationString.11 = 3ea3626b345a6218be11fceef20ca50d2a63a8ba16f5bda0
+AdditionalInputA.11 = f362cf23c6872d57a682d914d6314e0b135fdcb94679fe04
+AdditionalInputB.11 = 4734e254cf6738439ab3b77f3695fd0b7510acf68570210a
+Output.11 = 62c82c6855a48ed5e64aa6e557b4fd391f1cdd52b16f8322943d85924458a12680d3e6f6d101735f8dccaa4c640d182af4e63a50cd966ae2130c188c1719054c83380563e98ba44455b5a229fb05552c10ce8122b27b43e76b9f56ac0845ff66ec75c09b64c96882008deea3d120ba8f
+Entropy.12 = fe54286c3faafeb7d2d46c093309445f97624e26bc9074c2
+Nonce.12 = 00f63060517eb334ad776b2f
+PersonalisationString.12 = 3f0c9dcce20ec13476aa9ef18f4dd5bb136284acb7410322
+AdditionalInputA.12 = 8c3b0d24cd9e0c78b0b42ae74148ababc2e18b82c815cdf7
+AdditionalInputB.12 = 2dd154b5d476259eb3ebdbeba12f59caf6e0734e8a6f3538
+Output.12 = 32095d4034cb5a90c4896bb73c3dbb4a9f2c7c5e93e0fecd51e518b8e6f8c218fd37b1dd9382a5df8b6f1bbf4d5737fb0892f72c89d2bb48f685f3addfa8884d22893704447342abfb06d908c56c79366449c4811f1b2e4b28c8a881280ac8014cee173e5e1a193a8466874449c78b16
+Entropy.13 = aa38ecbce699f8faf5dfec83cb4600e1b8d29a9e9c592d30
+Nonce.13 = 5bec7298c72cb13588e09df1
+PersonalisationString.13 = 901e57af5a407b722e92f6b556c7081c16debc4bef5dd450
+AdditionalInputA.13 = 762eb4c2d8921b7179850adf76eb3ec74641d04515d7d769
+AdditionalInputB.13 = 48e33c81d4c2a5656efeec15de2d13188e9672dd9c6fe3e0
+Output.13 = 17b4a1aecc813558ee38185bafacc2be4226e19dbe466d5d701250bac74f467cf7291a3300e1e8388e4765cbafdadb682a9c1a1d51b7a411765c1efcd1da8e5c4209800b8acbe05a516808f712bd59650ff057301e29f8c1bbe74dab758296f9d988970f9c3b9141a7b075af28e00a55
+Entropy.14 = de3199d89f2f9e4c36aa70515b4f7f4d86017eb89ffa0ea2
+Nonce.14 = 05b7e7ff0ac5a2a29a2bc724
+PersonalisationString.14 = fb8af910473b1bd7c2927233a835313343e11809f195198c
+AdditionalInputA.14 = 30a66bba0f4d6c249e271de8927b6ba1e99fefbf3386934f
+AdditionalInputB.14 = 1ebe06fd88f8f914ea8f590483994fbf227613e7f49ff18a
+Output.14 = 38b4e2bf6aaf771df03b3bc37a959955dec83f07af4bcd995957a31991c5ee18b5bcb7754f3bf6293665dff2b4769d081d9be6393803e2c62a73ed8ce4adb17b36c1e0deb8ff6106308be9019cd179a92feeb184d93a9348d3b14a70bf13fd74d12cc427496803b7fc041f87c630756c
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 5b3f146867c87388fe04fc3d24f35626faf66baf9d8c5d0facb2aaee8bb4e466
+Nonce.0 = 175857ea77de3cf4113001a1aad3dc23
+Output.0 = 5a78701c0446bf9cc04f34719e6b4a269367e250b5747b241c5ac3b70e946b918f4d9f700c9a975eb0b5ab4f72a479c8ff6098e346e9fe4b5926a41982fe1b80bd49961ef154851b49c6abe7454b0b9ee27a32c460768008922daadc9e06553cfdda852dca6565b18f5ea9a98b96dc411b2a949c61b2114dbb657948e4f76b42
+Entropy.1 = 1666a317326650cc54fa44d79fb12f2c92d25571696269091cfc2a29cb6596e3
+Nonce.1 = b78aaf2eca04378633a5ae675e13b040
+Output.1 = d736aa8a0de24e6c52abef711f1e1349db056bf01e483f48a6166b4547c523f33fd006162bdd52f2c62ae1dbe3a2c58b938d72d8a00eda9242d57a155ff8a2d41522c0328731d52a97230af74099c0bff068aca1dcc4d9df7b9995fcba22c0f2b936fa8e70e1a51c79cdbf1bec25b43c56ef65295a58db537f3f370296f11923
+Entropy.2 = 2009dd7821a3585f99a4cd2f457f24229b53d22cc89182246ca5db6e69487c71
+Nonce.2 = 77b1b3f5360d813f180b06a5fac3ff52
+Output.2 = b5f8d9152bc11357f68b84c5fb327988f4342097d3fbb1d93e1a3a2f24cdee67c55eb8dfeeadeb217cd5c2d09a357b95f47823d2684320788a6eb96cb1f8bce99062abbcc85a03fa94b31ff2d69dba146b0e9c5e90c36fcfc0b63e4daff8029d24f0a636434d4a1caf28995a361163c86827d2064652edec5426c1e0980e810b
+Entropy.3 = 8fd8dd091ccef6d09a2cf58c82527e580a12a447f142cd5ea720fda937e28087
+Nonce.3 = e3181e32ee2401be0e3b6b860eafac88
+Output.3 = 754cb5db3d50e40ad74b2b622120b6326d36979aeb8cdaa5f81ae18d2a5e89b8d648a817159181b635fb93baf102eb492dbcf1c3e3dc652971bb5b45025a893bdfaa4c1c25e2dd31de50049ed6ec6d80e047bc459c7686e1a731841d3ae5b605957a26c44956d5549ddbedc9ec5cc7c92b3cf707bec475075d0fe35ba0009f7f
+Entropy.4 = 6db89e68a2655e75d59f95de5fe3d2b74407b4f46884d1e8f137732f054b8119
+Nonce.4 = aed46a379210fec6af9c77410a25e2b6
+Output.4 = 7070edce2f109a33036d2e5728c2a45b459285d2f7eb16e20fbd6fb490a5fd61c61be9ca45ce9fd09a4dae6c053f31591c8e64c494bd35c13c259bfacf36b6db2019def01cc74e7596a57aabf4467ad4998218e0264ced67cfa37c6ec50b131a5cf6b9f676feb95a0647865af7baf4f49a3a4bf7692458025e25805dd19c9933
+Entropy.5 = 435ef8c310049da6e111246eca1bee2227bb8228d71f3d623d23aa0db0ef31da
+Nonce.5 = 2c55bd5ccbf346b71d6e7f4b2756a270
+Output.5 = a439e798d74920d9209072e57bec34ea4fd5fb03510b44e01a499556ce11477aaa4381f66575102282a4a5343216363688e28c0a36613701f3f57a168477a8e556b2a14dadee9b153b035b8ffe589fe4c8d582f7c604e72a786eeb6fb0fb37eeee3175335e652158b15a8fe6cd38a0251b759e6b40c075e37e55bb4c42dcad64
+Entropy.6 = d45d3b017c2e0ce9981b77271012e475eb91a757f5ff4f51405f5cbc26d85032
+Nonce.6 = b4b4a4131af602a8d729a25d0fd5c2b1
+Output.6 = 1a0890ff41f543326a18610c59567e9a6b0754d6af94e2bcb7347e5d1331a7e7c6174d9877d5f54de708b970e2f8e1e3c5d9347f2b374121d263b3a904eaa271bc9bf42ef26821fe10cb6f0de1e7bb552a2632ba84dffa34e5cee1a188f22210bb4f8124beadeadacffb8847211c3040065776935e75281a0d418116be0e3ca0
+Entropy.7 = ad54eda3845c0aac7ad5b4ec279c62bf582172e3fabcdfca15b230598dc486e0
+Nonce.7 = 9d6cd0bf5d3f97f53b5a4eef256aaf04
+Output.7 = 33086e0efc780b22322cba0a43cd0fc8bb97276c2aa510337469cb8ba0a07455208cb7fc586865a67af37784bca6ba032bb470c23cca4752fa3f82cd7ae511452d43e5d389de0a1b599856619670b4720e2b931f528a288b98c56e6b0c7b2cf06299c14d28ac830bd4845a59f5caa5276ce447cdc6bf3068ea017108ea8e8df4
+Entropy.8 = c67e8e52ee82a9b13b1132fbaba7fe6210bb31a003e5a3356a4b28faa5f2e408
+Nonce.8 = b847901b4687575cb72b3275b06f0444
+Output.8 = 51226367fc26700d609d4b01ab33e51c6a882053c38551bff3531f46611c1a7305351ec487b49ecf0dcb642367ab5f51cd760201bcdf72fd38d08f3c645d34aac91714b870d3f0f8ed9ff7be78c820d438df3b846efa538752ddfdea4b2540937397eb5e457c426ea7650b7ed26620acaf3f2691bee931723f21b2d169b9347d
+Entropy.9 = f65e250ed53484c77c364c65c0fc1ec3d9cba8e43bf2625cfd3bc6135615529e
+Nonce.9 = 0de3f7b52f56b0b7b6dd31678b08e02f
+Output.9 = fe9adffe781e198629a7716b22dfe1399422f1115eeb1622e343f5431ae5763811c2b18d3a9cee915ba4436238730867c3a48533ffbce8a9594042b93d94ae2b57bc926709a7a338ec1d2379cc37e88509f8b95a8ea8cb9d99a7f1c1bcb07570f873459a111f3c5b0c02b387fcca1abac0ce5ea6ee4e83dcb2feb601b23c88e4
+Entropy.10 = 91998ca5d4dbd8295b61b40ea79b77b3fbed7b479ec112b9fbec73e9eb1514ae
+Nonce.10 = 6a5fa647a4eecd451aa58d94e5add2c9
+Output.10 = 3f60e74271dad63be38e6193bad496670d0512f3fe55c7de8f7c7f6e2d1be29eeb9b15f3d1fa01c167d6e66f1baf31fb4890aa76d0799fdb6bc0e5793df50c2ad193c2c570692d09fa6cfc8fe0ba0c13481e9f2bd7d2873638179bee35d1a64af60f1d7165ca066d25cab6e96d0a1bdb0baec12617585271b5111e3b1e7c5157
+Entropy.11 = d1f062384b3edf86ad129511339d270d05c17b04c5f71d58508c94df92167a7d
+Nonce.11 = 8165f59c1b683c5204d544c7197c04df
+Output.11 = 5cb24f3720849053bd9c398e76edf3ab6936005f1e4f8d2428c9d05f7b1d45ead572c01502fb2afb8c19cf700125896e6e798c2ca8a2ebc74fdb9cba1f60f2abe83d5037faee4364cce026e310c25fdb16a9cd002281230be4fcf1c9fa1cb3f386834ee3cf19a554825cb332cdfb1eb04d52fcd01d1bce690797dd2ca7016879
+Entropy.12 = ef27ded40795e5cad4412949b351c7164ac4cf814ca72dc0074d366432b3e268
+Nonce.12 = 83392a8b16f873ea57bdc63ea371e315
+Output.12 = fd824e80924215cfadf3028a5ea3a5bfc9f78023aa4ac8ca97f9ab9015148180765b4850f6e62c7242437afb9b34659ebf5f0c1163f36285f9661f3db9044a848dbe850f65c8fdae88bbeb9db3e8c03103b4e927534982e9071f4d34a1e44340287c7c6ad0f94c9a163ad35cc98b218762743587a2b4e89b0f8caeff7869464d
+Entropy.13 = a5c4d5a722594982efc03c0e34807b6480b96518527603394bb2d79810677b48
+Nonce.13 = ba916273e88cc91febf21eb79fc84d98
+Output.13 = 9c06959e1b051a6e69b8605cc9e44d1dc4c63f8767416d14c39c26eb2fbc01ceebf16d163a0106cfe4ffd8e3caa6ad58d04cba95562b7613b9e0a2f8aa0a10e93d6bf9b30bb41c31e4ebbb399504ccc8016623fac5f5908f8ba7339e6c5ca9573ee058429c44f537dd384e3592ad746de441dacd4cfc96cc4169c32cce4627ba
+Entropy.14 = 7f422e735bdf349e4f51787571ffe061ec7e9181fa0b6a342e36611da25c1a15
+Nonce.14 = b09d8dc6997bcb567cfd788d0e06483c
+Output.14 = b83bb6e99b0a5237242711e27779d05d2157402856f9653542f1ce52b1a7463e13d5c92309a06d8a78773ad70504b64ff070c2e6afa4ec3662f2729cb7552235b79c18e08354e334474f238ee74feb7e892d5701543f418cd7f2f5533437d9901dcc54687816f16eb7341b1707c6310a2085dbf387044a78fed850b42fe9d8b4
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = cdd5df69d5f412f28cbc4e7d1a3ec0aa8a9c39099d744356700dee9e12adba1e
+Nonce.0 = 4064a9c86f77daeca18694ef44db43f5
+AdditionalInputA.0 = eaebfc8c4fa7314df29b550b7300e65631320bed97076ed77962f200af98bd3f
+AdditionalInputB.0 = 92e763bbb3e5128ee56d67e211a459251f7d1468a6810bcfb3d2d595387b2b62
+Output.0 = 6ab56be520083baac951a1b8518ccfd5aa01f0297e0260441ce1cb5498f890f01a40150896b91c227787ae8766bed29151411bc3016f1c21a783e2a32f3332495d9172aca0a443bb6e4c11ca18b1e92eb77758996b96a5e68a6d5be355921ba1993fcd2f091d5abbe1c308c5ab60dffbd1166872a905e4d415fa4077fca8cc47
+Entropy.1 = 420b4e3840c9aa8da44f3be292b20b3ee2e6a44b5b12f8db243905c8f19c7cf6
+Nonce.1 = 7800a088d0afcb91e10b1eef922183d0
+AdditionalInputA.1 = 68e8c934abfc3941440336bf90997c28735f652a70a0001fd612d10f3529e5b5
+AdditionalInputB.1 = a7540a0406c7afc0d3ce84a7336ce87051fa49f4de25ac6f705177695969f0a0
+Output.1 = 7a6686db05aa4541e0f36fc08e961a5e93c62c4dc1df3710b566ae42ccb6c24450322cd026c472b63975cd3a6329d1497e3d884cb18fe16139d4f3283d89c2a83ccc98812e2312238f0690d84076857869afc8357c6c23033a0dc1d60c26f47262446a06b31580a3771b7c32e52c7194f7556ad4f4ff4c7233093b680f42957b
+Entropy.2 = 3e17be3541dcdc3f9473d1899833ba62940dd84e47e648644adb7507d446a787
+Nonce.2 = b1c2b257d3544f99631a73471c343005
+AdditionalInputA.2 = 7d1edeec776872da7dd544345eae29fa0ce8cf52eca03629aea1c84f55fab487
+AdditionalInputB.2 = 59bb4800bb72676f8e84d712bc1860702ccb346536b05b5b89102d3124a6f537
+Output.2 = 4397766833f092381ab2fe5dacf3ca30076d5f3c844dd34d01bfb73eeea0a496a1729c40973854f3a4470723020c0440640fb1c0a5c10868f17a135b4fff2db6afb33f986750ddc4656cca012cdf586d426bd346cc0ec18fc85f51f6aed9a35886f10d1c89b3491227284b19d441a2218bb43e006e3d83af811a854662e87d11
+Entropy.3 = fa6985699e72c01498bbac01b8684d38637a3f795254fae1ea4b7cab3d17ca1b
+Nonce.3 = 9bd0d01c809f7074af93bce2e315b19f
+AdditionalInputA.3 = acc2d540c1bbe8bda0af6a90ea836a7c3ab6b04e5147ab529388f6a5af57ef53
+AdditionalInputB.3 = 5744f7e5dbefc2e16092d08fa1b9ef82c5c6d406a4872ee24a3ab1000e462467
+Output.3 = 93223aa9c9be6e2c5e0a09c73acbdf4a68f22022cde3ab96e7915dd7e6c25005278c6c4eaf71c1014fa6342f72fab5c81707a3f49ad3a9fd4fe2f85f26b58610b1cee7e6f743c6282791fdd4a7f59a2bd842ba09a927c4bbce12840ecf8469701eb2e7c9cf4684a47e2c67575f021a3eb2d57730db411890c2bcf2343cd8cfd6
+Entropy.4 = 125956fdb382312fbfc3f976e66c988ad1acd6b13c0ef195431c534cdf22bcef
+Nonce.4 = cb46cbdbb5e12b4fa2a16f644cbc99b0
+AdditionalInputA.4 = 7105324a13b8c87a52d1487fa7ecc13317e0afb180460d875d2a6661fcba7548
+AdditionalInputB.4 = bb53fe3ab0730c2430e319aad8539041104d1b39fee46a22d5969963675d7576
+Output.4 = 50ac90228ce534efc66ca2330454adca3d7ea5673ef0cc96136a8f2af0669789cd40538a302b558336ac9130bb4b79e27361860bd594e3f77b10eb6a64930bc7e64c32e4c420f9282fa5e2e74917f1e48607e68dc2f50ae3dd4c10fe4a9337d08fd0af406021a34edb7c5921c551c3e8f89594570fd3e334ee17bf09b1feb4af
+Entropy.5 = 534fb5574fe56d3bf7dcbaf7976ef7dafff504deae7b16cf911d0b0e32213c94
+Nonce.5 = 954cfec33f6f27fe32dca36dc9b5f0fb
+AdditionalInputA.5 = f23cc21789d2c46a01925120351df1be4fcf66ec3e1cbe77d6d654fe716f0f7b
+AdditionalInputB.5 = d435a7d719f371b31ae3d324c6204780973af62aa5d55c1f12550bcb1b5a00ee
+Output.5 = 221e9629a912807425fa90254b6dd6a8cef88d99208b354a901f12b83a215850ec0bd32c397b916830f6be27b6742a0aede0aabcbb5f9db9173aee50aa8ee67bb244425b1e17b898d7b9ca590eb688ef5ad55e2721585d82a7e6d10dbbc10e705fb9fe4c197537c5df9b2e23b80d6a92bdca8eb420025a068acee570e3816ff8
+Entropy.6 = 4d28890eecd3ac81531345304d12bc855b31a07d4ad97a7f82966e06cb874db5
+Nonce.6 = 9b979ca831b46525ef93c4e1a6a708a9
+AdditionalInputA.6 = 7bd52e99e04bb84f5f12e485cb2c97bd9579b6992db5b2f02ad1cee9e2a92a9f
+AdditionalInputB.6 = b951964ec98a6670c3d36b543d315d105316b07a41992e5f0f3a691d7411b4d9
+Output.6 = 5db71cc12144d7391c2cf48d7733c5275464ecb816019421670857c36e67e730cd30ccd2300e91d7b990e5938a5b88b85f5661ba4edb1dabc649fd824955ad6b769fd348af17a895ed939e0a2ec3205be750f2b42a10673da8ad6876bcb1e5f101729fabbc466d0f61cf95091ff393f5c1addda85afb5b66e3015159678420a4
+Entropy.7 = 678173f88789f8aab64b71604f4edb8aa5bdaad2cbf0b0094f5f5f81342ccdaf
+Nonce.7 = 4c606b18c3a90c3cc15bec4bbde5ddd4
+AdditionalInputA.7 = 4aac1d656515d83c45f57707369f8b33ba47399d2d745cad03a2c925d52fb5b1
+AdditionalInputB.7 = 6fc9c468f35eb39e7f6314d5663138298d8103cfc67e05583ab4c292d89a6624
+Output.7 = c88c745077c15be4956fa8a38f94ec3e75d6db25604e616a16450d26cfcc3725753e6dfb76cfd3bc3f18bf167b9c759042f865e7199dc55de718ea4214f905b986f6c5d94578a73129d6294ff16cf8712ebbbf542dec8ad576fe1d99e178799ba526e4370addd6e61834f6420eb388aa51a8ce7d26a9d9928438c63126e4a5f9
+Entropy.8 = c573b11969fa465d2d24cfc9fa4087bda26798a4bcc5698faa0d6ae4ff825318
+Nonce.8 = 1072ef05fd6e85ea3b4433ff851cc07a
+AdditionalInputA.8 = f2b714a5128ed5a88a7370997e8c3a1bf9fc086caf3041e70260cef63d06ba00
+AdditionalInputB.8 = cde0ab24c12243b16a32edefdaee64802da80386fe81e3c5653c8c1a70126c17
+Output.8 = 5b063e18ff7eeace619276e0539621c27735f42502688e7aee7e5c254853418dc8d3e0855bcb16a82da11ad892612f7173fb4db5a60f4e48fc2a65662d88db286f6a6f7a5a6bc4578b2ff80c94dde50a6ada3c8be5ed673d08ef7f487609106ca9282f84ac74cade5dc08acbcea4af359863ab91e99111ced1713509e58dea5d
+Entropy.9 = f072c8f4adef37014e166e7a1481592de73e952024c294a5c510080a6373eebe
+Nonce.9 = 47cfbabc54020dcb03417ac8d313a6e1
+AdditionalInputA.9 = 1cc8c1bfc5a0618a3516ceb26fa1bac6e4ab6db12b6451654a4673ddabf71722
+AdditionalInputB.9 = 91bd9a16d29c6cbbd027c62ffadc3377c7426ed922941bf5c1bf06e941eff07b
+Output.9 = cce875a271f87affbac57e84840987f16dbc64a2f72d0ab225a2837b67919e38bd2bc76548eb9e21f2d198dd0b44e6e05de6988f0a4f11193e775843bf7ecc7c0099bb979d2309a799cf06e156cc595857dc2d8e94d63255ce9323b6b5988f944efa937856f9798af2ec76e457d21032b2b825a7199013c78e0d2f148e4d4105
+Entropy.10 = 60a435ca6a63ac5c19443588578457df40a2620d881cd9118469536bb5ab5786
+Nonce.10 = 3835197d7a0bf98621bc8ff399401ec7
+AdditionalInputA.10 = 14c3dc23d0ed19ef6824b0a4b19c4951c6d80fb63ee17b9e37bd4a9f74855799
+AdditionalInputB.10 = 14f9ec3c8cf1b87a67a981e1fd2e6850062b66a094fb5627a86967ad159d2f79
+Output.10 = 6c1ff1a5837f5a7a0b4b17afc39952978d5b9fae7a96ed8e65a822d97c6cfa210e0b1d939d414419d45f793d730b73133f7bf0f54a8b2a8c5948d824e8e615dcd20dce9e0885e88a3fb7db8857de3329e34561f8322ded509f208ec89bb84e310841989ee4ebd14ddc15730943e3fdbca64541d72a6a0d26f5b5387ee978fc2f
+Entropy.11 = a96f559ccf84eeb41639099677386e37f8edcb2226c1465f38d0b15c8d6ddcad
+Nonce.11 = c784b7265a929ecc5ed547c6b3f49008
+AdditionalInputA.11 = 42134092e5a8f730a07a19a93c7efbb30cb4fae17106a901cf4889707af9a73c
+AdditionalInputB.11 = 9544399f7b1930937b5ed1cf8f68b30325e5e73f5b2ae8d5eee0e9fb6c31fcc7
+Output.11 = c297efb2493e579e99be468f0297c30cd0186fc520d55bce91afea048c02a4ee6e3c218973b667e62442b751d420068977ecb589b38d62eebb4070b44168c04377a893a15e5ecd806507aa1c19daa660ef074819b06672b043eec1042cf4772f72eec571c6c070e49ed707c109f44514d5c271066553924a2a65f76210d7a279
+Entropy.12 = afa5ee609af43feb4c49118390383260c243c8574d5dd978b8eaa95dabb1d21e
+Nonce.12 = 019075775281a2596a614015eba184cb
+AdditionalInputA.12 = fb10c2d99db2ad8ce6ae61eea83c4190022151ad5890ba6f7ffd4e31ce989793
+AdditionalInputB.12 = 5de0f779e7d0319900c332a2d4e2e5aefbf6f14097eb55ed608463c77949d8c9
+Output.12 = d7e33c9ac2601db4bde7c5e8db6a41eb26e1a4e59f60448935b61c65b1056fe688d98aa536b24656de502b45aed6f75ec06188b27f69550f0074b1c0d1a216c1d18f37042c15d6ad180619fb16df4ec966fa9fa3202b63dbf698efb4626c3655485042243bc57fbf3056490f11ba46c5dd39d955f2785958ae28daf14c118eb2
+Entropy.13 = 5c3b6563d2adf828855bd5da8f4983745db97caf19262e7ee50fd083a2dfe690
+Nonce.13 = b7706f07d7099ca8c176651703be37f3
+AdditionalInputA.13 = 742a2a8c1ee7c14abff6fe3d28f8968da4f956b4ff8ce6b807569471ed9a48bd
+AdditionalInputB.13 = cdfdb9aad81b820e624274f5ac6e28d083e0931de30051dcea15bb7c2f38cc76
+Output.13 = bfe0a0919b64b441e37c9a3c91d220cf96eb5cd5692a8c30a6d3f410bad48548ed4c61ecbc573628079aad0771141eff77afb1d7a10ce170e8671f13d566f1322915173bdb5a5146766f9fb81a413df5c8b0965b0acaf5ec4a5b43c52f44cf63e18e62240090d71ae82c73e39b553c634acace2681360cff4cb55600c995b513
+Entropy.14 = 80edab0dc029c29644224a1946f6b30b55433217ba3c44777ed848fa4ac66464
+Nonce.14 = e609fdcf259690c12694a18308e752ad
+AdditionalInputA.14 = 5722b092a5a0195f14b5f236885538cc7a514e997876c06f634926c695561cb5
+AdditionalInputB.14 = 6e4f341a0524dd1085aad0b6c956057893f737704ca2fd8eaae6231e9691688f
+Output.14 = a757af53227bd8555853ee2e643256074be9904d2fabb0ca86a645b0ed1905731cfbfdb7eefc83938fb576d7e5da8135300f8e934dca521637ed10e5e791e18e82c48085f511476452237ceb930e0307e228886d36aeb83d8e25ba23b38dce6dbc335de90b63db4021d6ebba5dfb6d8044a2bb7bb20aca679cde16406c8c4746
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = dd8dfec2a638c28cc592fe8251d3194fbb6e61aa616ea5e97d0f7fbdcb86373c
+Nonce.0 = b1374a4e92d9727022a751b8bcc161c9
+PersonalisationString.0 = e08910e9bdcf94a44129e70ac8d51bae004460be9209fbc4fea6e58677c0ba0c
+Output.0 = 6042b14ef02ce94944d88222ab63fe31cc33f9d263507897b0c62290b0927618735364adb6c79384a40b5856f3cc97d7612ba3775844c64339922bf56e66a29666f1c2b2fb190605e90eb758c07628364ca08a11277b8d21476526201af6270ada6434ac9979b5f824387ff370c7e4b3357b589bfb4a85b4beeb005f933650dc
+Entropy.1 = fc411e7845d97150d2c95a0175f5ddf669c8b500f07026082c0c59d2da32d7f3
+Nonce.1 = a2093fbef410c3e32afce740e4e60200
+PersonalisationString.1 = 51aa4bb8db57866fa3949d57425803be4944f6bbcbf99cd1b56bde050581fa3d
+Output.1 = 3952ae32d30304db6e71536da7bdfee6ee3819b7a15a39b328f8f70b119d11e6254e8f06634e0267c994685eb978dae49994f51fa93ebe6742e2f17086afd7288230bbc2b96f34a6355d0795403e0e7dab5e7f96c76717ec11f08b1aa8aad01dd92d44263099df863d56b7500e1d9fb367a37e16c89abf312825cf1d5ba7f4f6
+Entropy.2 = 3b03c7f8e50df0114104dcebbd170461d71037f804b544912b2db16783341ba2
+Nonce.2 = 63058a60cc2440b8e2103b955a3ce7fa
+PersonalisationString.2 = 37e673c5f2fcb73eab99bdbe85c5428fa5f2b048120442036e98b0523791eb8c
+Output.2 = df3d636415279b81b915833ec2479a7cd32b8780219a56dfe4735d760125235b366484f4b576b8cfbefcc69882585b393d21f8f743e3aee8d879aef8ea4bcc0005d29c0a69f9c00cf7cc25c688de98e24bf11447847fc42ad16c94f58856cb1419a91a1c79e6cc2a36121b1a38f099d6dcf9af1fa63de6e3b0021d9613694a22
+Entropy.3 = 62889775bfb695f3382f0c3065936f2ca0c8e3f36d3dabbc3fd42e840341d43a
+Nonce.3 = 6e9417a995f808b88ec3f993e5357c4a
+PersonalisationString.3 = a9e295ad98021c6535a4cb357a54f8f5a117bd2737d4ea9853de82777966c9e4
+Output.3 = 258c5c20c10f4439f89fbc0aeece81f821613f24237c6b6d0ea8bfac3203b9c2b8f63f7254a86b567030db17c315eaa0de97cbb24718fda33e0b919b24b2982ff796bc4018b71621c53feddf939020309cd58f7cbc345faa234274dafc21e65aac143455a56e4a617ec1d8a33a726178c06911d5dc07a646267ee4b8d561b15d
+Entropy.4 = ec7661dec7df316fb840fc76ac8d71903f6310759eadf95f7b9cdb0ecba20421
+Nonce.4 = fb6b67d61c6b28360eb88e6f5c9350e8
+PersonalisationString.4 = e6488489e7fac11d46ec82fbaedc5eb7afa5152e0b8a829a04b89e27bac1c51a
+Output.4 = 7b90a1cb3d214f54e91c2fa61a69ac9ecc6e43041dd7f2d0d47e763992a06719390aac0e6ce209b7f5a17c5f171409a66500c623849e3d957263e38fbdd89f01cd457b461390bd9ab1f9df5f704e6ad851cd83fbb3a151a8fb8013a6f2e096a6268f466390aa65ee58a68391f756b9825b84c2cb624bb1c7b2c39f775e2238e8
+Entropy.5 = f901f337e25bf8e1bae97af692a73401faa390ba957b5bc5133292a87882adb9
+Nonce.5 = 2d9afe970688acf45e291bd510c93836
+PersonalisationString.5 = 18660d66f4f07931896b7fe198fa87ec82b25506b400da4ab318625eacf71518
+Output.5 = 928ee49e1e18b378e9fee6f4f16bf5eef588025169802dfee70227c7e57ae7ba8d59353fb0e1e51676e40921487baa3b840b5f98dd162e64d929b8d81417ffd449e3355db1d35acb082a537455bd0092dbfd885b093922986291cb265acbcbaaa41f8b4f98ac671ebfdfa27c38c41e4c8787484b8ff99c78e4f97525c3f0d785
+Entropy.6 = c24f0a26f18e7b826c81d50827a31ab7c7212355cb55aca952023fccca8a7898
+Nonce.6 = fc3ed4a7151f9e12dcc63d4a73bf37a7
+PersonalisationString.6 = a0b65d0f1c232c1a389d7d0d483d9c2627b70f4494d26b7bd87bfdaed5664cbf
+Output.6 = 4c3af91cfcdf0fdcf7c634827be028d8645ae10ad640f9007ab0a890a8ec8b1749ca963d1f2fe50c982e20d409d0c7c64beec606c5b3529a8765a6d3340681554176e9445e9d4a65d2317c5db8584bcf5d2221422282f2b1ae3d9476d0dbb5bbd90d6e8b16ca0d47d8599bac225f67ba2832745fc0e1678b2d7074089fabe9bc
+Entropy.7 = e6c70f5c233a609c41f940b17133e1544803a5c429b2bbb5917d9d31af83caca
+Nonce.7 = 7a0bc455e12edfeb33e49d1d011f51c5
+PersonalisationString.7 = 1cd40e196df5b314cb554a95cdc58e9f1be896c7e61f51f1e1f38bfde47c0309
+Output.7 = 877f3d2b98d694a0d0307eae5ca3ae4690ea725a748bf53f26b16b637d24f2113a51cb531046f92a487d880f9a2ad92f66a1e8cea4aba46c18878b03fac98d07e367f10f7ca0ed9c44eb50111c9b18c43e00214fc90a2d7cc0e5865b7d8826974dbd1648086cff3b38ee948f3790b64f066d883061551f9f6745bfccaecb6783
+Entropy.8 = 62cc5d526f4309f879ec33204f26b94354a83b555ee21e4136f02c09d3af9432
+Nonce.8 = 22fe210e3b06e853b5f00a6b27b8c869
+PersonalisationString.8 = 61d3e3f488b6d4a97cdb4833b97e5a1dc3556e9898248ab83af7b7addd2efcf8
+Output.8 = a77671353d8f4c9326d4cfe1b7fe4ff9e3921be4aaf58335137d3ef136750a3a963069f2e816f4b46fb40414a63dee8fef0aad87ea5bee17a48fee71e262606bfdef3a5991c7e1b3f1515aea637935c2fccace54360c943d96bc46910405a94df6d16e78f77bd7fd4c9cbef9f051908c601ddcd35a6b768dbde202727d03487a
+Entropy.9 = 4f7d29aec8ba6438d89c9830999deb28215680f7abf29e7e84a8bb6a9f4415ad
+Nonce.9 = 4571e9f72258e7de7801cd80122d093a
+PersonalisationString.9 = 86e3bce95d32dbc308ac1d0a1a233868da91ee2ae436573462a2f603bef82b6f
+Output.9 = 1c7bdb5e2f91e38bc7ec08ccb600ab630af47a81dc1b9a25dcbc4921d48c844c9fe4f7f1d097b4bf63ba6bf54179d12ea384ceaf86b58957ae833c2d9c715d50eb9ccc41408319dc0d25db24b4fbf5fb906282d6f75d15ab37d27101cd62da4b670260ff2d421359af9c53437587f5e12a800208b91b61bded901c4772f8a731
+Entropy.10 = 7569982669b99fbcb79d23381bdab6399820a204dffc405463f9b769493a50f7
+Nonce.10 = aeddade62e85511b545953897a945c89
+PersonalisationString.10 = ff2003fbae431c470937fb68007fb36247f40f23a8c5623aef69e8c094fd64ab
+Output.10 = 019fcaf920f3ce2e2bf7c3247650cb8555aaaf8f0a0033758409cc9dde00458cbe2bfc118285d86664ad665a9ae8c6437d1a085b820e5bcf2461b7715415a463f7472348679f84f6c9afcdf93d65394db23513c3efe3c45783d7c153039e9584a3f9b63c323df37d73d781516b0d68e2fb01a80e477ffed6e5c14ef772db6ca9
+Entropy.11 = d287d43e20034609aca0083e55332f0dff6d6877e646cffa3c8248f22478af70
+Nonce.11 = 90b2c63497deb7698e84f71d149e8b39
+PersonalisationString.11 = dd537701d7d89bd7f8ff3f1b76a84b15c706eb12601798f9badf64fb52fcaa42
+Output.11 = 0641cf15cd88530f05b902fef84b4be142ad686905002a21cf74ebd5626d564c5786a835e01a669c819d63fd15bdaa97d55523bd431d23dade44029d6d1e6c374c62ea408a674f877d8eb638b6f270af0b9ead6806cc19f9b10261b0b7500eceaac56869e2b2a9447b65f75c7228720c1530fff4150aa7b82787880a183d86a3
+Entropy.12 = 698831f2aba2be5b651bb40850a2f9d1aed8ed8ed180f71012a52643d38cc04c
+Nonce.12 = 4bd3beaddf6280ef1009109868afe8ff
+PersonalisationString.12 = 56e05ef424777b7bfb75e755e70fef1186d4103872aa5cdf35af81ba4b00a2cb
+Output.12 = 2684818725306a95c04b38e0dae52ee97b3c3c85b61053c9aaa59d656b64af1d8ebbc47787c17024c54b6f90232a9010191ec63092b85ea57c1f62ca48500e4099ad3c8b80e01951bd14445c5b37623d44ed8c64db9ff3bcde5d8ca0abe0baf3717fba2bcde261866fe149a2653a4e230a449df539e0d79f6ff8fd4b99f8b3a2
+Entropy.13 = a95fe69ea1e020ee75d4cdc9a29a8ecd7c543a7dc8bf3ec27586e45f4e5ee2a4
+Nonce.13 = fb1af7987f30edd626ba0cf8e55ad96d
+PersonalisationString.13 = 9e448d98496494a4b510adf2dadd5f66b3d4a5d8d81fb5c8bbd7244838c4d882
+Output.13 = 6374dc751a4655d9d6990729d70d25ce147c01556fc3f827c63783a517a0c6b033af4c1325bfd49e98a38b6cb6bebc139664508b91d2775f4ba03de149b84f8eb6b7dffd8db38af1dc8b38e0aa5ae36b791d365b08faafb9906d2755e279a6e1ab912d4628cb79e34847cd9368abcb5b390017bbf3594959bcb04fa8c5a5c449
+Entropy.14 = b2fb9d9bc5ce30966b7f2e6a6458e2f2f6e72ce857fba052b5327ede9ec2492e
+Nonce.14 = 06b7b75d18365f4957489a09204b2672
+PersonalisationString.14 = 9e32f001033eba3bede220d4f351ce110e6ee2eb0b099ce54f9606a21d80b1ea
+Output.14 = 508333114a0abd5fe10327daa0f1342c66569d912a64d8ae89227d0d8ed5b4052cf84f0c38927d88dc0d7c476e747965adc9579a4603a36566a1730f55ed7b100c1695f060674484781682ee629167f7adce89885ff04d722d960d0297d2abf79bd3338126c2d356a91bfa588f80db7ea365bf181fa5370c478a04d05a515b78
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 21e70d349eab293c4f5837c3df990834507b951a8d4666570e8c7985483c391f
+Nonce.0 = 37ed12bd119a1266d5783e1c7668f787
+PersonalisationString.0 = 178e4aecd4411836d2d941af0995d91f540d10204f21372ad92c5b33e0302f0b
+AdditionalInputA.0 = 6e675921863c9c468cddf377318e2a5449eebf8b23e5ff18f1c7c1c72f4c1965
+AdditionalInputB.0 = 122f0a17b7bde2e486f7c0f0d1d8e323bd7f2bc3e73d8213950f66e3d4e4c4be
+Output.0 = 30446c874ffa0c9c031ebec131cc3927720f5eeb2d89c24a71010b93645cdb820599e91cf29bbaf7253b1f53304c28e7eaf44198ea135029455aa7fef794a275421c2f8be689af46d924e88faced5299b1e861e9c69340de5bd88d1ed912c9c54909c4d0d1bbbdf7a43d02a35ff8527042efc9102539ed3b669121bd35a0f014
+Entropy.1 = 0fb1e82a4c9f953c2f26eb6f600c99d9a1b956d0b5021b14e69e8e09efa3d840
+Nonce.1 = 00c82eec973b490ed979fca6a21b3031
+PersonalisationString.1 = f90298e146832be9348aeb59d88b01f62d630d98c765633709a30c3276ce007b
+AdditionalInputA.1 = 866454c880dd51941098145415b2785499635957c37c5f8cfa1551f7bd44e2d8
+AdditionalInputB.1 = 0543094170cd63bf310a2083431caa4417f3d030da7b3532a1cad77fc6aca607
+Output.1 = 6426ebe77e5cc2e333d0ce30131ed6a60434a48b5d744b95382d6bcbb98e6f302dca76a9390c3c42afa161a1a330e867083ef57d2d1080a2519b1255f7c26e7c81463aca5fc83a8dd735affcaf7a1d2b4734963816be8d615af5e0165b13e11fa32cef4e8b7d0586222c385a900af6629bce543df050074f504b82766e0bab98
+Entropy.2 = e0cac24c72c06af1c5c07a106f81bd63cc46cdad7b07d2c8f7c0407d1e9f3b1d
+Nonce.2 = 2aac0d3e39b0df6f858b041e2386c116
+PersonalisationString.2 = 1735a2c0ab36b5d3e969edf3c81cdbfd81d1088cfa53dadeb5f7ad04e794da6c
+AdditionalInputA.2 = 66990006cc70c774f007a4009fcf3ef9c9d06924683ca4d895c5015a82d90bcb
+AdditionalInputB.2 = 81c8933bf1c4fb192cc479c7442924c602887865abd46529f00d906042efecc1
+Output.2 = b159874ac478611e84728083e8cefc211965068a2e4a57d93925d0927d823cfb5d22976a568d0ea1a699c8a2366f38a1a6990b263915be9a696a25c18c30abee89f2a3a4b98ce19240216407daa9d04de8528c554b6a21cbfd23295b003ed83f38cd14e52ba940aa0fec38cdc07c926f134a0dc7369e068a330755f476081bfb
+Entropy.3 = 7a2e2a12896cdfe58236fd8f4e6ac8e52f552b2255dbec6931df16ea2fbc1e1e
+Nonce.3 = 227c5f96a0191ba78d55e5a92102628e
+PersonalisationString.3 = cec7c7874f5a0815de0d02bac92cd3ac595577118cdd1d4fd43f4ec1f2d625f2
+AdditionalInputA.3 = 4f1c7c2fd1bedb81fd97f315fb99d19f35f139662c05d1debe47bf5960b3e9ec
+AdditionalInputB.3 = 6ab618c0a04b6da78c860c8e42d51adb78a20d9d9bc390020d189aba415745cc
+Output.3 = 4e85d1f49d23f02aeada1656de99582a372fa2fa71c90894a42405785cb65e7d0cf4f872ac98fd9a05ec31b929c0b098e8475cc44a3faf4ea16b9fadac93200a70067fb4ed6af8b9951af7422dd6c2b3ab6829bfdf516bfa442f21ad7f4b96143e7efaa6a9027c8c7d32cecca533c71ad57d625af2895274800442fa4b985998
+Entropy.4 = 47ccd8b9be0a5d2db97921545f536acae8f8e646198612edf584d29d9d467aa5
+Nonce.4 = 8f485ffb01bd7d455a5bacb182a686e6
+PersonalisationString.4 = 340381209f56a1e2708142ad9d0939e6fb3ddcff5948e51cd6095b1a06496880
+AdditionalInputA.4 = d24f1ad05d467e234c6908013281d461aa7d296e52032d7af820ce4cc3c522ce
+AdditionalInputB.4 = 354f2df559f31ccfa9a60944211a16da1f29c4c8ac1cf3cd1f884c4e093592ab
+Output.4 = 2c8f02ade6828a06885e10b762fa97e37acc6dbdf4ceed62054c149720b4e8af58484d0d03c7cd4ae9ee4d63bcd3081b22ba2f82bf0034f668270ad7f9547a0c9bd5a69241e544e2069404753302126259b434ea0be978c8f70ad0fda433714ce36e88a8ab8d846efba8343dee0107201a5979e02c5267cf2604d7903e6eb532
+Entropy.5 = 965f827dc87464c7681e78415c81344e002d0f66318eaa17126b405b721c410c
+Nonce.5 = d48ce77cfddad68839a83f21bc2487a9
+PersonalisationString.5 = 74db35db42f918e051baef36d48c096aaaea63e523c97f32a459302b849b319a
+AdditionalInputA.5 = 4c4d3f5616aca374d0a603b47a7876a8fc5bd31b62a9e6534589fb37cccdebb2
+AdditionalInputB.5 = 73f733636b59474a7e5b8526db858eec2647d05f7cd308772586dfe12fc2a8f0
+Output.5 = bf29080e61c4d1bb4e7a5a6ebd2685d8214aae9d2def9c748412fc4b49b2db87a37d60a4f91325549c467fff8cfcba8d3c5202bcf20610f122665752814e8dd23df94764cf9778bd04783fbcc6cbe433b18487798523c9a3099b5784e44df6dfa93c3e2e574a07a1e7e6d16e3269d11f05dcac0c3dadf0648267fe730f3ee240
+Entropy.6 = b9886db437517974e34149d3fe0ef179e299bd9b8e2b57f1463d13897167901b
+Nonce.6 = 2ac4e56253345e730d659f468db14867
+PersonalisationString.6 = d3b8d816928ea9e7004732f9b426966708b609585d6138f0150a15441f86a843
+AdditionalInputA.6 = 8bef1b152f475b19b369526b15092739cf54ca5eaf59e5764b8500f3fb8f5e63
+AdditionalInputB.6 = 58758fc6d0dba7ea0da672fda5e909676530f36e8eaebd186203ab7a06ca7677
+Output.6 = 493439e0f97a0e1355cbee8ef8417f075138ffb767c8365544466d1f3f1b73e46139c40cb429938c5c10bcfb1d9d1e22a1027c0a13ebeddfd94a915dca3b1c01359e2c594e871142c69c1f3098f6de3af708d70aa9f0b9cbafce681b75e3bf89c0cb002dd78e875577533e664917c0a66fd10cf3ced138f4c05bd006dca29332
+Entropy.7 = c88b4f71c071070b713a02c00a5d956944f8a0287e9a8627ebe83fcfc0cae385
+Nonce.7 = 7e1cb1b5affccd189f0b51a8349948ce
+PersonalisationString.7 = 6220968b9f1c8f46ace5340e0a65824f2a37e390de0391a1aa8e2d2a088e830d
+AdditionalInputA.7 = f86287188cb5f27ec93565c1563f16b91fd4debb0ca9d76bd182b84785b04d4b
+AdditionalInputB.7 = bdd8d60c1d131eb80fc6fdb073b74e3c6451cd13d269e8d018d839f217374111
+Output.7 = 2e45dcd97eace6f9b8521d69e0f5245c10bcdc2fa704b61fbf3edf59d8e6e125c2ea88379a427c1989c613aa99c8afca97163fd9c1fff4f2e057f0a4d8145704c443a71891a3df553035d4666e300e0b23c4760a21d00f2768028e911bc74d458be01583cffa717c464d923b825cde946cf2dbc0cd4fa8f17337ed62464ef6bb
+Entropy.8 = feab9d566600071522029d5825b4f5bbb5b4ff82ced29343e17211dfdea3ac90
+Nonce.8 = bde8439416737a512a56a6a9c3c9a18a
+PersonalisationString.8 = b89491fc253b8b9e89bdf1c15df07b41917c0793870efa38d3491182198c5693
+AdditionalInputA.8 = 2531e32a55332495a00ee3d5c70b28ee80fc7a49e815aa63eb85082da53ce13b
+AdditionalInputB.8 = d45c8b77dee4e17c601d7459ff51a032511ea8a4c880245acccd303b39d4ac43
+Output.8 = 2a683203a7995a8d4d97ba8c01262d8b5c6a05a4a1c28a1940d0b9b89f91786bbef465d8e3ee521b54c2deb6bdda562486fa254a2f7ac4871672b7f3758589c8077470ae009d56cfb6c695073b60013461ec9ca30ae7177496f718e7b99f762b54c009ea65a2597739eda7b0dd9d43dc4a42602d1edee9ec5d1f383721cdf3e3
+Entropy.9 = ee28b9e92d4da3c2e1d3f7466b454153d803bf584561051b2f09a0230f353a34
+Nonce.9 = 2507e58a3f71d86585c2a678252a408a
+PersonalisationString.9 = 57bfbad36e612da95d30a6c2b47252b1559628316b57d7b56781bf07ce47115e
+AdditionalInputA.9 = bc061d8c3aa86d7a057b4e1e226fb5e21729e25a38188d901894a28879df8d87
+AdditionalInputB.9 = 838a571944a02fa04a8de7caab95551badc0385341416595547a42a543b56dd4
+Output.9 = 8886f1b2573e0375ec179c34e34605ebebf65cdfd7df53d3f6416cc79c6f23e301eadf38ba86d04ac79b4b4aacc40e969c19327de64dbafdb647168f46315c1bd93c2336d83b5de4177cb5af7a13e20d11f303de0d3d4d465e8d6c6103ec82fbdef4f91bd9dfca64357a8fcf7ebe0a0438f1e54f42c7dcf3724ae18ce439dcc1
+Entropy.10 = eaac356e801381f5041878ecd99601ac66ce8e6c3ffa638871747085604ee8e5
+Nonce.10 = 053ce81f05b620400c35961a99ba6f68
+PersonalisationString.10 = fdd69f7242ca1c5c3a59dab35c0831a16a0fcac992222f551a32dc9df9f7bf7d
+AdditionalInputA.10 = 1004170066dc9155dd5c8775aaf04983d7be3318f5949e89616aaa5a9280e958
+AdditionalInputB.10 = 096ac15cb4557b65f0642a75894093f9399713557cd0e04a0832f02bd36d0aa6
+Output.10 = 277bdb77a8bd521cd41bade38e2848e35f1e4b759ce53f0de21d40bb0cbbcc1e21bfa9c313e08409d75f2f277acf329db9d435ed4edfe10924cd84eae0e17734636774813410854ab5afb32391798b6d2446ddec49909db0ee9faa73f6d57abb2ae413bb9d06aa7ea85e09ee6279a37b43adaff7eec652efa46043b5ea170577
+Entropy.11 = fd03f4ccd45c4196df8c10b85d92491ddc8286335c88fd253a5b1912a99b2de0
+Nonce.11 = fd43645d02457b9a204dbdb1c80b1fb1
+PersonalisationString.11 = 27ab2a336c18a8e6810347971d2cddfb232e2563d74e44940d7a92919c0e6c2e
+AdditionalInputA.11 = 272075e5e26af83dfb231a81f6b5d6653a30996c431ead11fd6e217d7d19dab5
+AdditionalInputB.11 = 47aa672e7aa4458cc8342fe65acbe2ac8c96814ba9afd2d4d5d6d8487c8a31f2
+Output.11 = 421e4192d63734b3edc52396a25352ac41a38475239c1c794488d2e23110ba9ee29bdd53a05f468f589e745a6efde8c7ce7509369466719c8224041dbb7114bc37c253b1a6ece7a8203fb36cf00ed1c3f227f2ba731be4b3e719446b9ac36e664e67f9e9ffd062113db2879bacea8ae4919f90d07537c08b56b252f01be5d33e
+Entropy.12 = 171b7d45ab1ddc76a664ce27f3f4f5c0b2782926b46988726abef58af747bcf6
+Nonce.12 = ed92cc3cf7aafbf15adf499501f7c8c6
+PersonalisationString.12 = 4a68cf528334c749af399d8bb6859f4ea84b8ae32930050efe62fa57f3347222
+AdditionalInputA.12 = 4832054d792e83f5bc5082c333c719a3617bcd839440ca37b644ad0196900c9f
+AdditionalInputB.12 = c841367e7f365d34f88e942bd3c6f1b04387371dcb43d6aa241979a47e82c9bc
+Output.12 = 45f23431901db78d4890edab29b9e51081002415202464a980b7407c5e1fde5162f4783d9d569a8305e090f1cfda0a2562218bfea6bd6b88ea4fb6feb431e1c84206236bea5654194ca200e94fe886b1ba7b2e21669a9bdfe14d4a8a8b63c45088b732cbbfe9967f438a203cd80a4c9ef89f81eab62785645c1d5bd699bfa046
+Entropy.13 = 3bae035cc07b748aac575152d582a7426030a7ad0d3b74872194a63f00f26bd2
+Nonce.13 = 448ad56777291787a748776a4a0d8acb
+PersonalisationString.13 = 866f3ebfd29c21f080d7b88ba056c6ebaf8c083cb7f36c6955086fde2d59f339
+AdditionalInputA.13 = 8f9fcb0ef8d946c6f8e1dd8cf5cd290056b94d10507c7da05599e239a0fcbe64
+AdditionalInputB.13 = f34d066514618f16078d1897a5351677c2f3a9677cacffd2b4c9f7a86670dc25
+Output.13 = e8e7166838be4044eb869d7bd2c930e769563485b7a07382fcd7eb82c2a6ee4e8e9299b30f0d5dc70609dfa5082052923e617f4cd7423a5d493f949169699bb61e3245e655dac57606e576bc8eeae8b862ed439dca049debd8fcc18a35ea51e38bfc33a4199fc5284318c6ea1ddea6cb3d4cfe5fc62a64797dfae81c99cbcf3a
+Entropy.14 = 05979da0ae57f443db522ab2ecc62e3fe6817dfe4f970f2920a4708eea57f9ca
+Nonce.14 = 421f0f2b040c0d8a53933213abc5e4e5
+PersonalisationString.14 = fd6727cf1ab563ca9ff87470b545d4c18d9e99460ea2d00ff8bf32e1c27ccc85
+AdditionalInputA.14 = 5b2d2bf0653e3c075c469de5e2a093193e700abff9792a9f3bc0d143fb00c962
+AdditionalInputB.14 = 976c765df6b57f0eed8661587045826c329f4f1994020de30fdd835912f72fe0
+Output.14 = d8275a104f1dad7412637d12fabf9dd1b06592850cd48a3f38304789911efe8f08970b8f90fa021b04039cd3d1ca573c1586e7ef586f4c623dfc559efc0f2c89e4136b59f0f5706a74679d1c95886a5ad05b9a850043cdb19d806d617b2f640f715351cff6920c47f96a42b872a512a7b2e99e4d0c2230861b16f3b38deb9b58
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 58d74d3439883b3706641fd77df6585d9189642bf35fde681415b88dbe739c97
+Nonce.0 = 24be10c3e7e66e3ef092293c573791ce
+Output.0 = 6ffd1d09fedbbef493a0148c027e21f5c849ebf4aa22cc3ef5def034db12d02087f2320eaa9d4846ba2a1a2700127de263c773eea7d7f28c80e56fe9a17e1170993f96be21dfe0d899bbe537982a890a3fc6fc504026f396635f85f7c7288959f52b8bc1733797e6f20f04fa390939f8396ced1cbbd98330068002b9ae76528f
+Entropy.1 = aecef1ca16cec592aa6ad0857b8632ce3ea58c1b7683fcbead4c200e9b8d86a3
+Nonce.1 = f3c40f46569c1640dafd7ce04980e25f
+Output.1 = 35ddb613ee1df8604d3c57fe63415312d735e39b822f32dcda3f5b36f48b28eb1dc4340c102a10f3eaa3c7d5d80c4ff017e9be4b7bd364146352db99f4e2c8c230211923d57ac97f37a16360fe41b853a94c272dc714188136661dd4f94681da70873c4279838756ab0eadac03048168c89934573281b209df3bf113fca13551
+Entropy.2 = ea2c4de790dc599bf6b0004f38cebf029d5bb309d270dee4cd17c5f63f2c1f58
+Nonce.2 = d25a01c86bc41b09a96db5e26e6e7268
+Output.2 = a39cf0b6a58827112425a2a3173e7217fe5c12b91405b695e1869a8cc7b03b446085845223e4fb759a06f4fc06af9a256135ae0b2e2fdb7c960cfe98e245d045780775c7b572f3708409e0e54af3af6eddc9a6d526be10395bfb7828f4a83c3ae9ee1fd39af9a1344b24139ca76b7f797aa26806909786d805dbeccfc58ab4e4
+Entropy.3 = 56847911794d3e0aae716c3fea9bb7934c20a74cc6c49185e4b8211a6f9baf97
+Nonce.3 = bb80288fc7310d0bc949d9e9577cf5bb
+Output.3 = ed025df4673fe9abc7b71cdeb3562331bee52de9881fe1893ca3c5775aa4888c6156dbed89f43ac03589947edc37dd0054579fd9201215df95331c7b8d76a444e1fa7d0e805e10666cbf96a223c4302e10090889f57c9fdd4c5695aecc63f9d4bff88420b67abc0456ae4647d784b1e7cc0e107b9037f81bdc815fd37db9a53e
+Entropy.4 = e0c22f7c9ef6d333496daf66dbb2f66bed05603214baa0c8c26998168be4f136
+Nonce.4 = 7b91eaba77c65d5ba50acfbe7ad4021f
+Output.4 = 0f879fe9f07fc22fcc048037f710268f18c7e5c48c400239e6e14fe1bb21a85d475e4d85191c63c8873f6ca5950c5f888760e9aced47f7dcc693c53d9f1ab05cf95a7d1393e16b9137655da54534dba399bc4fa69de64ff72ee64c17c8c7a8a5b2e143d9395c86ccd29d244ffe7aeb516aca23baca299125eb7d62c2a0e02830
+Entropy.5 = 50849e29bf46faf1fcb6b5a89f0b4c440d37c01c6704e766fd9806a0645dc77d
+Nonce.5 = c5482d9931cc99add1454f5be5b49a82
+Output.5 = 82fdf574adedec8d26b8ea8da77d63b1dde7d4887800bf928c52381b7320b45148e04617d3b002dee13c182133bbc087c57654df708abbf3eec2243c8d6dbc890ea3692a3f49a07b4278be4dd39110084987b7b9b3617f2ebf4ef899a1f602642f7d5a6ea2c8a67f511648bc1ef477e583022d6672c44d142e0cea69ad753cd3
+Entropy.6 = 8f997669afadfa1eae9975c796674c43e9114623a9b4cd11a2878755ac92f570
+Nonce.6 = 6c6e904acc7585572e0f22977589685d
+Output.6 = 6ff95048e306e0d0a4735c3d42c617ee737f7aade9aa3dd2c10a2129e4771dec06971de0d2239f804fed7f5ef30aa7355d64fcad2c096ccc3be6e3f1ac86535f238b0b6cffc564a2c0b83dbd994662cf1fbd734ed7ef7904874aa4c72122bd50ede3601a2d8e208acf0d554f99431f68e70bca8f14d405a86f3f4a492e4eab06
+Entropy.7 = e2564f88e03f952c9e763d5559cb6df1f1697551fa7fe77755f813e75ac9e0d9
+Nonce.7 = 8ce0e8e322b0dbbca3bfd27e784522b2
+Output.7 = abbbe509fe028adf25e56f01a09e4e36c80f46e6c0952637b2b5f6a4cb2e2e11d74b2230d6ad34861feff352c7f7b34fef02892a1c716d2793c84a9642d09083b8e42f37300167815a52b5fd8537bf9c491c6766f36179d9d41e6d6486ce37dcd192de93f9b91eba29604068adb3c0d82d0ce7141e26a778eaca4233d448a907
+Entropy.8 = 053e0a70a8282ffd496aa1e23bbc08f8ad63d6f8bb3384bd85e6bd7d73dc7459
+Nonce.8 = 278a4327261c8ee2b66725d665a58176
+Output.8 = db1d35fb48642ea3e8fdb42bb013c8517ef79e20c0339f2b5ef81f24a36373b9e3c7accd087f34530b74cca912267c622ad990bdc7bd38b75b9ca04f5d17082d1457725df57c520e80386555b227a1ab6b124b610ea1ca5257a513a0a040d9fba3f6ff02e298c571c6941c9d85276716dc1ce52e757eb9099c8d799fb00bb93e
+Entropy.9 = a95cabe12de3ffc140075da1b7656f7b1b1dd52b9e27a21a7f6b14148a80fb18
+Nonce.9 = a0b919685ab73b2f5645c92f32d1516f
+Output.9 = 51a716db9d578dfc3e53067707f5adf0113a95d531f66c45eeae4e83bf00f3c776f001da09a6680274e522afd7dfc4a84eb34e0fcc4977079885f9180b663e2a559be765dcc5cdca9d2a6c7cf5e1301fc291a98126d70e4a6de8f09ac8bc59a730f7fbbec0d6241c69aebb77999c730cc52125628e40ad15520741af2fc53ed9
+Entropy.10 = 195801f6378b76ae85ed81a4e906414d7e434cd46e3368cd9a2d6877975700e0
+Nonce.10 = e349cbda480925a90d2e0b88af171d79
+Output.10 = 35eebcbbcd48aa8ab40a6536e65c10ba8efc6e889d29e30d463cdfad077a55d6108f5c175302a5e7cba3dac94f82ec311ee8e6b73e13fa15115b4baa2848d1f30f1aeb8efa716a350627c85371ff744e8e305d851b3bec0a2530a10ee77e63695d6ab0452d6c78a5198701e048370e96fccbea803591f4e099bc0e801255b774
+Entropy.11 = e7c5655c8f504efaa3d7467b54b02a5443aa2cd6bb075a7f665c01b38fd28c9a
+Nonce.11 = 86e2ee751854af6852367d2871b93e65
+Output.11 = 050b98d3de20130121733a0197760251176b28c5108badea03dd1ce0f4a8f74832c9e7813a507a6c2dff80eb2378a0d26c79300ff3dc3b1729df762ea50a709b87d97b138e9fdf7981eac418cb8830599e806040d514acc6da5040293bcaf46aee8f4eba69e8690aeb56f414e55910102aa2d4c5dde2e58c3625ec68edccc90a
+Entropy.12 = 13f1e2a631cc4697302c85ec96aeda11d19caeaaf42dbc57487cee53b54b4e03
+Nonce.12 = dbcc23386960304602da9c2cdbc8186f
+Output.12 = 5c6e47247e68c6da45dae4925fd2071cf3e4910a2cc77675951cb1ae714763ad8cad934ee7cd985f36aca2571f9505e9effb11e93428389ccb54a04138ed59c24fb900c9b59e0f07406d611b3e71fedf5262e48bf4e8c9c38cf1a7c3c43b54e78a3a35049e1d90145f45cc203e8c22d2530c62a225356e0b38236fc7cc38b455
+Entropy.13 = e285871f4c6e631e6411272e9275b12ae74908c292961089b8ab137df47e819b
+Nonce.13 = 8441c048965d3b8585a5ead1adb08212
+Output.13 = d28a4c73cf6daec844ff20a3c4f642db65a7b5222aeaf0f99a34d65277e626d0c76c4fbcf2a8c94c4d9d213907e27d20b8b201ce8b05a5aa47e9053078173a7f640a5ddfbb05158a70f36da1a058cf4f451f2591ad17071f38e097ab1ac80cd2b782461b82a29ac5c5703337a21cc3eccae86da1abb1e192cf6c889bdb729fa5
+Entropy.14 = df6edf960abe3aef5f50741907c0171906c0837ba3bfaa3a1044fcc4f19ed21f
+Nonce.14 = ff2558bec3e5377c12697c908d629952
+Output.14 = 9d68c2674eac76f3ccabe1c6c0bad96d5fbdcb1629c939e397eefbcd2ec2f25803fbb9aa72db952f7fedcb290da99f34c0fdd637c37dde1446d475a61c38c3fc5c1ebf9541d136cb02a43b2646df7ee4bd0d9191157dac92a33f401f089ae15618624fc0baf707409aa2f80cd5d0676612c2667aa420acc6e016e6ba3f63c686
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 9aac8a4157e65932a049a03b5dc4ae16c3aae9008c1426c03827f56c7a07f684
+Nonce.0 = 4273bbd3012b195167dd33737c9b29b9
+AdditionalInputA.0 = c781e398ad6a508e13d180a190ee5e80fdce26258f51b22c9d0be8211478e75c
+AdditionalInputB.0 = 5feaeb0d4da6f22d104a691516f4118a530de0c42c4fabcbe0b1d5d9c6423bfe
+Output.0 = 05ac5fd52b87ef178ae223b06f39b312139ee7d5210efd836a855f6c824997b11ce1b0174fcbff6e483df92520a183c2738950a6caaace6338f785505f35ad61c297ce8147c66913bb814a7b06267ca4935503f38fafc7e3b5c44454a3cec8ecb00a7c2824e6934e5653080f1c07ca5645f9a57095a4a1c11a776e9809c20297
+Entropy.1 = 82429d5356efe083fc548f529641c097b70852668d8dc5e88a042ad4f06b8bef
+Nonce.1 = 68ad3e3b3748d83be32e9d53608562e4
+AdditionalInputA.1 = de307f461f07a40bae29984b8d47c0b2196cfaad53cff068715c29f6a55928dd
+AdditionalInputB.1 = eaf198b02ab329ba869bbe661dcc8d2cd8fc891a126609e5773650904dad6b48
+Output.1 = 59e300269282e688daf96e0877089e5c2677691f6945ebf12b09ea56335310963a9e3247383a151c19a5445c77847b6aede57749b46fdd2912fe9d8b7861e73e37b4aacf72fa9222518e4e0ebf4458e005bcc50067b2270a9f61f00054b12754e6232348e044c854068d31dfd6af7bbf65879ce46a123ecbb0ccad97298d5df2
+Entropy.2 = 5c49b171332e0a37ccb8ff59edb4c2cf699cd75174ce15b83e6673f77c81de1a
+Nonce.2 = 3abc7061b6c9a53a811bfe1350b086e3
+AdditionalInputA.2 = 1c109d588a4af7d1367d7452af7b492ffe0fe313179ce7914716293eb83f7801
+AdditionalInputB.2 = 27477cf2620af0c44412297e47174611dce5fe5ea5d1da2913800936c0e86132
+Output.2 = d1d5b2dcb96b9e272d9612781cf099cf446cbbcfdf4015826291b3b827730ab6d023c58dfe59749f977450e675fdd27c6c646b4cdb9cb219a79720bf7f8956a41767a90358a451c6acb0da87ce630fe36de21abafa4b29135039b06d81ac7655cb0abbd21d316b07d2dacd66ed5806976954c120cac30276c763e516935a33a4
+Entropy.3 = a8d838cbe08795ec9a57b4ec7c716e028e65efb1309dae748249a66d23cffe78
+Nonce.3 = 1407e13bc82fb2eac0cfc3b99fb3476e
+AdditionalInputA.3 = d0e37d29206694092a2d36cf7ab6b07a2a6e2cf46e7cd2b97ae29496d3e3c32c
+AdditionalInputB.3 = b7521d68c084c92a94f57e664cd770b8b25b5a849619d4cfc1bdbeb689c3c84e
+Output.3 = c297492f1a15a93a713ca7d75a5f678ea3c39680238614a0f16cd546db9bd5e7591ac5881bd5a867e43845b03d54abad01b9b8104b3ebfaa183f1d0f073f35a37ae60c8de50622f9e0ef0b435ca328cbfa919d66759069bf8f2e0120d3131c0ad4b5c834687e271bb110268c253f0f388e4b3eefbca9016d839ad42ca0f82f64
+Entropy.4 = d0d21190a01f044d9f6a65885bbce4f9aa93f1368e936170c34cf8b8537c4328
+Nonce.4 = bfb916dda9c432b099409d35983539a9
+AdditionalInputA.4 = 58443183475ff639d75db340419a333e4eb934db45c907ba7f46c8da33aa2962
+AdditionalInputB.4 = c1f1e17072f955df5bebfc925518e5874e63553c47db1f67f500ebbbe9955af3
+Output.4 = d8634388d73653246c6c99a8a26cdcd52551ebd8618e13928e8ca16bb21adde0cc106d71f58447a1179cd94331e0315c5a242cb5b233a4d488199114cb54a7639daf0070badfb5654d253bc0fb87187142247d5053d2fd671ec1a666950e3b2b2aa3fe8eb871959d87d53bf9999841f874d4a7cc8cf202176f74c548b42e21a4
+Entropy.5 = 81b29d54399c4f02b6a9731130523891891f6bd49b072b58680acbfc63f25c70
+Nonce.5 = 3ace110ac710e1e4382466dfd7ebc3a7
+AdditionalInputA.5 = b33793eadeeec4188afd51d36f2741e45a0e4849cdc2388077a3cc7ff2105542
+AdditionalInputB.5 = 6c824d82b3ff1c25543bc6f5c2b3c25175654440abff89df8e49878f4e85496c
+Output.5 = 7c3d7b2f2cbdb5c215444cbadee6fd65dc2d4b0df58e3a17ecddaf5a195ff48e0603e8d461fe57369f4ed05e7bf61cec66d7087e6a7745ece1f74c41fdedcf7a7a6ac466a2e7ee4d53db3ecd03f1c78ae7605b085b26f5d49135169981687bcd549ae25c580f21f0d07f80d5a5b075ab5942eea6cac4005224f812735b1d5268
+Entropy.6 = 124f490660e8f4cb85c3ce2c185fdc0737eb4896b492fb14f5798fcccd50404c
+Nonce.6 = 7719f49172bb06106167d6c370fba1b4
+AdditionalInputA.6 = d94d3911ddd7e96071418370ca67d059de090f993ff86192262c09b21a953965
+AdditionalInputB.6 = a05755aed6ef45ea7155f16aed4d67bce063857ff2fc490e46df41915f968819
+Output.6 = bd3f7794939758b5fa50c29b4de8c288208bae130e5209a8e0ded81d9be51f3103a543de3f56bed1bad7834ae2e650d1e5d5c6015e4e9b4720890d80b7ab7b5bfdf8a3e3cb0ffcdda96f475289166b1c3642a5ece5df20c2fe93cec0acab9b4c31402545f3d7877fc489cee15d162de20b09b43b92e50a39256edca1b4e283c9
+Entropy.7 = b69c1edf0fb89b8e901524fb6ffe6afca2df563fb3e4ad7c78fdbf617b683974
+Nonce.7 = bda3a1116aea7d2d5aea4ba2c542fde5
+AdditionalInputA.7 = 15d9ea848b7011cefb5007c359e6727751ca34e78e555be4a707a9bb77f87c1d
+AdditionalInputB.7 = 32754d9f879a8af60ab1c34f700c29617659e622b77db2088ce224474e6ddfbb
+Output.7 = 4d054f036565598cf5753de2149237d9fb794d47809eed62158b5d483a5d1a25843cbbde16bc7889873c84e3aa4bae6f0ba05b9a076a827a7cdfe9387e01186e1ec2b48e29f24888dac02c10b66dff55e6396972d5288d83b196b6467145d7f14163bb1a8da0d5ae365c8bc5dc8300048e3e817d72c1a66663e7f5ebbdf73a1d
+Entropy.8 = 018a8498057a251574aac12ff5b6afd1991cb58724eb5397076d393c8c238133
+Nonce.8 = 02a57960466dd2985da4d1d29d98d6d4
+AdditionalInputA.8 = 0ecef161188c197cfa847e14d9e1c21e2bc60ef5c33c7d5198f4ab8355098d7f
+AdditionalInputB.8 = 4c2ca24a3e41b216ef4910ff437b0b6383cc459756579ea9b5cfb97e79a007dc
+Output.8 = 990939c264c668073c3c6bbde2ba0a4a2970d0c6532162b34f3ffb50bc5d6fa13ab90d0e5c17bbf9ac2b0bfa5481cd1a1bc397904cc0e909a34e4e5609aa34a5cfacadf2c615e66777fb0fe6206b8561b7163ffceb14e3873fb9d7e14152a2d6a8e7936834dd5c0e8a81a1e48a95b234e85e0b16c2a2a447c58634749e5814d7
+Entropy.9 = e2e62610ae4b77312e2a97f043c9ae3c605e905a10c897732b993b7749d2e111
+Nonce.9 = 42db363d6cdacbf064652866a994848c
+AdditionalInputA.9 = 388fc641d1b7f0c796f6f30a42368a74bd24f84ed20a9102c9e1ca552b9f2a03
+AdditionalInputB.9 = 98e2326b797b5fcd5d87a4f81e48bec81cc265dab79a92914c3665d10f10620f
+Output.9 = 299bae6240518b31d3e192144bd0adf7f260f242e1ca171b6947a419c65c0417136519f9c590590e98616d9ef5e9a4a52e45e9859f91ac3d8fca0d232e0c75b9e6b650e645a7b57fb215d23120d38c230f3f6f1657daeaebc5f7ae3cc52eabdb96ff175b35237e2b7fedcbffe451b2d798e1cd1fb27cae2d65b632778156dd42
+Entropy.10 = c7e3d1c5652959fc4d937b337e431aad7af523a724a28e34d66c3345ff97f4f2
+Nonce.10 = be4c452a88f470424097856b6457dd23
+AdditionalInputA.10 = eb20ed19bcb7993ba674a0de19260826648c9ca19e873df26fb1ac8b4f18a1de
+AdditionalInputB.10 = 0d9b936931d204df44354dc13f9e2cec38e7d80917f6c86998e387772613faf1
+Output.10 = e8fa080a32b3775ee0f5097e8624a7805afc3a71493d43bb9bf7498a92f6b2de5473331a18965f0e93c996fcaef2669ea9baeaabb0d66b9f34674e79448c5492581ae16cdd44cd24aac25111bc914f2bfe41820d8899770b5792f06666064c810fb8bdd18b23db0e437a2f0b7026c4990b00663974024a37c2a4906c19a3cbed
+Entropy.11 = 659f4a17fa4701a0a4a047503bc55f19f0f0acb3a1eacdff2a0c2311b22c3f58
+Nonce.11 = 5c58f7426464d7c81761a15ef31adff5
+AdditionalInputA.11 = 44dcc31cce2c55a822470be0ed68684167952e0e588381f873a2039c5f88fc87
+AdditionalInputB.11 = 34eb4ab8ed50e61d2774dc71b330160179045a94658572eac530e2b02cb3f715
+Output.11 = c196d2b293e38ccf0b4090cd050ee22ea2c6e2d75e7e130fd0d6c9c2988a29cb9595d88001745cfd2df9e81e0b782d851718cadba8ad56b01e68c044ab4253c1af9b41ffdea35fb5baf5da3fe98e2497f6e0ffc055002c10f27564f63b010aa4659f24a89dc7b9ec9c5e0dda4f3c23e440b31e7acd28768fdf4500c33d1f1088
+Entropy.12 = 8ebac55f0d28e55162592cb5638f3058d964650617223880b65dbe662df215da
+Nonce.12 = cccece63fb664c0dbe4844c00453e229
+AdditionalInputA.12 = 074fca8f1bec7fb505388f541533408dec1faeeca49dad4d2a71502df85914de
+AdditionalInputB.12 = 041ebfc7cb149c53ba25a3d51ee451a41e7f4a025751f9a80ded880c4ddc5573
+Output.12 = bf9fd8710a81edf3e55497e7c85da1417951376a11467d757e08c5d67938fb62390c9614f4386f75c7bf3b48b42d2cea72017d3f746d9f120e2b7bf3b6313d27453c9bad1e740086dcef776271f22810962227022a6374900d6fb70b3c0b3de1d471b76409237bd1994826ec8d25d29164875cab70ac3bac500cb18ac3467f2d
+Entropy.13 = 671a2d51182c21e83f137787508ea24b1f98fae2f013f329e84d5ec9665fe3d4
+Nonce.13 = 50cd543046249a1cd360c5feb6db48e1
+AdditionalInputA.13 = 819150f9b17fb4179dd4dadf0166bbdd99d2b40fa976669693d1830ec53317a1
+AdditionalInputB.13 = 244e11a5e668c1b18289a7fe3c5a654ab47bcd98b92337ee54b84cb678e2c1de
+Output.13 = e497681ae8040afe142d9f8b6a184c41a5fb135b5be8be23170531d5b5d197da4f517e9e4b7a6ff4cf4c9012135476d55d17e0a128d35f422a8963f359228fd3dbf6693202b3c60f58719c760dc417c5ada1828a225fba5040f749f1863ba01fc88f37373f53b9eea6942eca319810c32468af14e80d995d78d2619768f6f483
+Entropy.14 = b2044a32a3f427bc5ca798bba15eb828d6f3ef4650d737564085bad1081b82db
+Nonce.14 = b0c38f1094978b6626cff86bb5f554da
+AdditionalInputA.14 = 4bf2c816e2c3e9721d192a670153d620aded035ffa214cb0d7638432c3c6fe1e
+AdditionalInputB.14 = 06f515395ad7c3d025af7df781b49b62f068ec9398f6dab31ead6f917c663de0
+Output.14 = 1e70791e6a8ce753f959ab75d1225b44452ce7aed0fb53b56208b3f26419f004983c452d724c483b4f9b70d2d84734ce8ec0258d8edfac639b355204e14b5b7bc1d3aee6ddd9f5da54c6cb086d16ce381c2d5cefbceae3afd56c13441d80c7e6081aa68ff57f21d460370de9ae713c17ab14a81f0895e9e492af7c437d7a5799
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = d2a3ac96c06d87d1f6299e98a3ac43cd163917490ef02b652d8416fd67c0274b
+Nonce.0 = a9c06352c760c84614eba4b66298f306
+PersonalisationString.0 = be420c590d13494cedc74f3236313d940bc0cfc4738c885b21fc7d60ec9bc49a
+Output.0 = fb66b8ae25159fa61631277b47db3bac31a337961ac46eaaccae5902dbd356dc73fd06e21b23683ac17f1788b2b60e7899122995fb25d016b936d9bae58f1e06be96a1e615bbdd49fdfa79e3df8ac4cca1f066d555893e2fe4360d16db886721ac8a5e401934f8f5190a3750b00b2a4629beeff767d3f4270fc1fd68651401dd
+Entropy.1 = 0f78c24cbb1e44c6b9ffa66ce7e89270ac1c7bc88716340e7f53c4d3ff7b65f4
+Nonce.1 = 90509da07f8be8a0f625fc12e89b7643
+PersonalisationString.1 = cd4856cf2a61aea4fda4bada702f0be2f15a460bd1a690a139fa3515974fa9f1
+Output.1 = 1f3781b65456151ae296b7e3b2e82c9292b8d97c1249a98657491e1eda382bbd1a337bf1287a22d1b26cc7151f7a2d7a6ec64d0de57c64a6d1fd3272d1f43b1de46959862fb85b134977502c291ebe7c842f1116e34dadfc3a130c1bc80923dd68432ac0d80aa1c35b51df05951be928692513a26dc16975dea4be0b35280b8f
+Entropy.2 = 33ee8d0dc48c2609347b59433e29bf1685e7900c423d1ba1752c9be5842abfab
+Nonce.2 = 7a01de38ee0d06c62b431a672078da60
+PersonalisationString.2 = d139ef8ed22c9887c3d9acdef3ffb1634712f02160760c61e0d4d1ae9d57e066
+Output.2 = b96adf670697106396486ffc5be9b133a95606ef89777dc82da72229e151c2d5d186c33e324388e4d4d07142d3abfa42a9ccce503846d8db21f911f3882fb17f52044f26eef88109f83ac394a0cb28e52f102b32dd75ea4f6218c2a4fed29afdba8be324b2fe1f206ea2257359b3830b87a63560a7649f5c22ca1e607f92361a
+Entropy.3 = 989eeb516274ef8398807ecb36647152b31f37c318c182869ec6a66ed816c33a
+Nonce.3 = 4a495af0f210b6552ea2b51d58c84d35
+PersonalisationString.3 = 38b59f9e9add62089d478f5e6e26a6a8fe0769567c89ffdae1a299c6950d8092
+Output.3 = feb2acc2ea034d48c43bedde72e7431949ceead6e9de09c838a9017421c707d9f39871c1f328a5deb843e66b87bee6772ee3332fcbdcad92600831c53f2f439d4128e329a6c0cde6ad891598fd3f1fd937a563f655388cab7361da2064f2168c25c325201415a99aeb6096b0eb7ab9597a781685b93e4562ff4e5f2e562774ea
+Entropy.4 = fa5ba9b71ca33c1ff844b86b67266ebc58916c3683fe8ea67ea63c5a860f69d0
+Nonce.4 = baaffd637cc0e1363f4ec182c0fc9532
+PersonalisationString.4 = 9b9a6b6bf0dc0f909857a18b5bb7959d94977b0ccc07acf8d81ed56808297f17
+Output.4 = 779d4e6ecd49870015078134c5b2489c2d4eb5e1ebd80a4104f21735e49ec6a07aac01f16c41d9fd1546cb6e0b6540d6a14be4041868333d020922be9e16f83feca6bdcc656de16984434e87e98de46b15b287531fc415e27ab4dca0e5baf8bde9a446c8b35007c300598c6b34c076fa6f7ac8233c9e47d22168b66206b56640
+Entropy.5 = 67beb75bf701e1b63440efe5dd9ebfd4516cfda5def6c7240f649857dbabb28e
+Nonce.5 = 657ff5fd8f368e77e09189d018e807cb
+PersonalisationString.5 = 648d618b13f9fd5fc571759951a9b089b4c31b1a7c59c2e2e1724f00637eb3fc
+Output.5 = cda8e01dd85646262d91f7bfa2e30c19bdbb106a5e9278f4e93a73a2b37636dc56a6a6cc9b83faa00061eece4979cedbce65c5692aa771fbb23a8017ecede8ba0a3213a809d5464461cdfeb3dab4b0a16b6fd38726008a6b499b5f3169662ae471b4339cbb889f9a5fafd4c55ed24d97f501c5c980792b9e6ac1a1a0d1ff304a
+Entropy.6 = 2b902a0df62bd4b046a8d7cac27c8047c406af0da014f4bd0727603b258c365a
+Nonce.6 = 76b57a7957308bc9624e32c413300819
+PersonalisationString.6 = 70c04d9287432eb3f92e782d4e8904404220c489c0bf6498b77b579e063f1464
+Output.6 = 01abf0c89105731ca9fda10be989f5e10867b71e9ee7accce928b4dec9be4ed4c4714ed0b8d1ed080e1a3ad57266cbd84b6e3fa03931958c6949abb8c553d381b749eedfe54658362b7914fea1bbfc17e8b88caca7f88024699091e67ced6349b7a54ecc900e6821b619ec257153217184baced2e14224c0c4dc1a96d1403de3
+Entropy.7 = 67d42bbb560b8b4e018db9ce142f59cdf8bbd1724b2e4889c27efd3300c508b2
+Nonce.7 = d84840fbc1baf2d5c0cb8fe433f6aaf2
+PersonalisationString.7 = d40fdf1c5843b15716320ad9aaae1c79c48ce15fe64b526f625c2333ed195a0c
+Output.7 = c6614bbf77c586c3d8c91b45fcb7e024c875eb562ec84f0ff32bd75d888de6a5753078395dad486e74b6d4f333dcbc4097777722298e2d262e6bb995eff347291e65f979e4f276829ea816fc5faa3c16ab9b28c3f03b4085a221d1f0e7d0f4c9df1f21c195c330a9e45717fdbf3e9d3fa7baee8b0723c1e1aa782f38f6ab8b0e
+Entropy.8 = 4f7fd8298c723f3450819017b77558d4086284d168f88ef204ae0ad1115aa476
+Nonce.8 = 5b3eba417cfcaca87786d4f13e30f7fd
+PersonalisationString.8 = 7c4f834b82af1d274e3ca578db6fed21a1145e314baa720a80eca83709e58469
+Output.8 = 064d9bed03f2b6a913909617cb8958fede376f40b79bc289a5ed5720dfe1910803e938da32ae9b4488dfd44c37b702f4f9078a8e1d42fdc06512de3fd049abeba02f93e91c4f137fcdd4521f0bc423a6ef9b5dff26ca12145be58690288d4702b12f542b912d70de076842f292d8809a027e10a789c1165bdc20769afca83f0f
+Entropy.9 = ccd39c303f868c0dedae792109e09beb74be295d1cc1896c7d4e0f58c2e5c8a5
+Nonce.9 = 38141f323b8e483d80a4ddcffb0b2dc0
+PersonalisationString.9 = b49d2f4b3ed163cd69d9979a87f8b63c4f109e902740cadaeb16059f1d4db435
+Output.9 = 6e9c45f99fc8b5601306a52469ee1a03a342fa3414ef707cc201dad1ef1dae5dcf93bf55391427a9fb6029e196c3c2c8c29e0bd8c97fe54070db7dcefda57aa13acc85cb3f3f71ff3f8981dd6f0f07fbeaaa406e5461637d2b4e294927e8d5b269ce70579cb6f468448b6c9490c96c6679b7cae601519a48e99ca860a675fd14
+Entropy.10 = 5a9de4a21e89be4c6f691a535228772eda42308b33e33f3cd88bd6dc28282287
+Nonce.10 = 1aafaa319281d69b8f54f401d6a663ac
+PersonalisationString.10 = 42ebaf1828e0ea2a2e047fbd16fb4a9e6b7aa678807238be93dc16950d7c94b5
+Output.10 = dea796adac8845f6511310b4f0165561518fbc7e3442f34c8fe7c658480c2a101440db31d7c79736cafcd2a0c400ffbd37b8fe73ab99deba474253d206553904c14e8455e5e26309148a023abb3265a8fe67d08dc9908091101263c3420b051b781e3b76a9a3d3c4cc67282a3839b14732662edbe59875823845d15b4d16ac15
+Entropy.11 = 20b9ebc6c44f05b7aaa1bf52ab8928bd2833a388383f90a618f1057b69115c13
+Nonce.11 = 3070100b757e2bc99bc1701ae1fdd608
+PersonalisationString.11 = 3aa37972201eb96286898a6c232824fac8853053e4621c39a5331ceb5ac26017
+Output.11 = 5c368bd5a1b056d349788091d51bb821ff7ff6a8fb2e194775f98bf0bd76a9b48c09ece83efd038d2db6b8940b07b689cdb630aa7f6f723eb81f83c48f73dc9cb75a10df2b5206382028acf5edae415f0a3ba007ee6575dcde6ea22b9df58f8f6cb513269c65ef8829abee30a66a64dcb373c2f087cec36877ec569eb687589c
+Entropy.12 = 1f8b5afe164dcad4d00e630f612ba16b62f184e431c397c88ef693140b624449
+Nonce.12 = e4489952852e75c0b0f7ca90ab8ec9e3
+PersonalisationString.12 = 24f073b96d710243c12fd16b53ae7183a2324a0244ce00a35528fd74578fbf9b
+Output.12 = da30b36dee2a788e90bf72de6f4deb6614d6db16564a2d3394373ff051a49b93e576697d67f8b74d5774d78446f856af153a95933b1ed4dca5c4de42bee6b9b377934e50138a8feee927b1d65e58703ab4b37aec90f6835a6d73310f80d6e95b021e63bcda1c9677eaa099db49cdf684bd025296dbd3cda954c963a04a31af31
+Entropy.13 = 5c5de88e41581e1cf18faa16d46751fe1da33a7bf5aa5c12a008fc65af9de205
+Nonce.13 = c519ffe7dd49b70556063777218dacf5
+PersonalisationString.13 = efee6a025fdecfe1f6a31ef6b2a2152a0de53b65faf8e3444435896398fc39ab
+Output.13 = 8cf44f07902ac42105a60ee44fdc2aaf0dbe5f911e1735c3d64a56c893f4e7a189519c7ce4c1f3ebac95a061aaa0cd80233ba60fc888c0d971093af745fd5b47d86b680bfd67e50ad9b8568ecbca94696a124c535556ec5dda3b197de1da3db9cdb56055c9b54d6d154d2b1d99b37035cc2737eb60b4eeef1be60d83f4f7cdf0
+Entropy.14 = 41e0b160ba753b912c728d3622338e5e6a7669e2e65b6af57ae203179ad3de95
+Nonce.14 = 2c4c4f3a953e551746f7e258821d24f6
+PersonalisationString.14 = 676a9304a3f744c62c7f5048f2137982c89860577cfcaf0d855514436ff8eff2
+Output.14 = 7bde8a5a34538655ab2ca26d0447eff3c6da298b3fa53ff0526eeeebaa4a876b60e47ca544ae30ccb00176ff84920bb4e4a4ebc3cf74b9cf8cd8ff9f7b11266a3c9bf918c458760bca6368ddfb3522edbc61ad14f2b638294e51d82e617d8c0c631aefbba50dbcd1a0a88963c3d63959909ce2cc669924d7163b01cac468c0d9
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = b4c63246127d680629311672c1213953d9c6e02903e9845a1d5b03e46d645a62
+Nonce.0 = 4e43b962456a20f7bc93ab7c78cc3590
+PersonalisationString.0 = 885e6dbd7f9a2507342d1d7c91e1bb5e5f60629829a62da02b0f38b35e7487c9
+AdditionalInputA.0 = 40221fd762af6e5ec2f18e388cc2572fd000d9517e1df9ea0455b09cede4ba84
+AdditionalInputB.0 = 359b2d9fbeb9180550e1ef3db1cc3713e95430f85d616b136b2ba984b1406565
+Output.0 = b26b0f32b8dcba51377ac1897a71b8081b669c5b1ba3b0c0e28e6b4dd362b2d40c2b717cdf6d51b7ba560dc5939d97a8b09c516892a6c267c8d4fcc887dcae50527ccb1f1d567fdef7eeeb0f5a8fd5f5d637e5b78a5be18fee1abf12e7ad6787772992fc87179f462cdbd09cd6d86c34494dea17e2131b0d61f6497cae4eac82
+Entropy.1 = feb65d1f7d8de2ca9cc8d3f3d95ccd692a785db5d02db51e0193ff5b056c55d8
+Nonce.1 = 8b0395855860f1006d3e47c50095d379
+PersonalisationString.1 = a012d2a33e3ec0de09960f58edb443dbeafd686d94f11b5c000fab29b15ad5b7
+AdditionalInputA.1 = 6a7bbcc87233646277c8747811b6b058c75623e5ff1487e983217d74b8776277
+AdditionalInputB.1 = 9351b40a484bdd7d575347b75c1e80c7a59daf3163aef4edecfb3054178dda40
+Output.1 = 1ce8ad2927cf505716395df916f65a9481d06d280e03b90ad29d75b6b4664118ede74ce849609335b5d4aa1f011758725371b80f34fdaf480f38f7742d1c38b99990938e9dba3a75782eb6c089a87bc0fce78682b110ab2c18f4cc879689fc85f867b7517f0a821a7243213182de7b441c0f0c07413715401213d11942d25274
+Entropy.2 = 09a7faa7123b1f700976e2cb30397ceac10929263883b81318ba0b29fb641fb1
+Nonce.2 = af07eb87015680be7ca84c4d47f9a730
+PersonalisationString.2 = 34f98a1f6f5b2292cf2031c0e99fb963afd0eb4b96b3802d844770dbeed01665
+AdditionalInputA.2 = 9109abbfeb98c83a7023714269d900a4d61748212341eebc8194427721663a9a
+AdditionalInputB.2 = f68dc108700ed8fbb471101d39bfc53de7a6734056c386dc03f92162a554aaf1
+Output.2 = fe4bb358c7e783002236dae3fbc2615778461d03ad7d309894ada851254b1295f614cbc617fbf477d71769ba7642961c4682c77b6483db4ed8286e2a89392ec9d7b0afbcb41f7ea273607a86f07371a8f723a1c4cdaad357f2a2a4d40b91478dca43d12072a9679ca402d81ecdb314a48ab7b21263f16d4b9fb82bac2af2c674
+Entropy.3 = bd047b8c447409d8ce7384c4d98a8dcda6229752cf8da82aba7b5391dc0edd1e
+Nonce.3 = 703cfdbcc6acf355cecb58b1e4589a64
+PersonalisationString.3 = bcec11129cb9f8462b7ccd048bb12f30235e1dd808860dcb8c2fe18494051005
+AdditionalInputA.3 = 84eb8e969f47f84c82dc92e59326370dd5a11cad0273156d1ffecb5543ed251c
+AdditionalInputB.3 = 5002994dd71e6338e1cd59d263f6c428dab1c72c2a989017f81b583efe0920db
+Output.3 = a230baad00b46c5078a33663efa0bf91edcd4650b149318f16a933cac98ef6df88d2d98a33d0026830812408e43ecaba8ce5aba28dbe5615f83c700f3cfb752d0e63153bbeb3b76fc8ed9f2dadea2032e560aed5da882ff811c3afb9d819e94a0854a3e9ab21840729411e1859de0d7e770339b937b72cc6f4cdbf7608767dde
+Entropy.4 = 1fbed2747f542f0687975dc25f07a1847e904a071324050b65e8f9a1101601b8
+Nonce.4 = 7c242af15fdad4ad9f05e35bffa326ca
+PersonalisationString.4 = 161b53c75fc6608c83f6e3a6c19da10a73929febfbe36373a91e101480fa975b
+AdditionalInputA.4 = 3dcd00e39ae451344b5649a61cbf3385d28ec37f7c8a087009b6b960d21bb0a0
+AdditionalInputB.4 = d631b7732b2b3e7f7b7da836e3d2c8dd9e9f453d0a767945896f48ebbd5055fc
+Output.4 = 897d08cffa83a5f77d1d3b154fec8c7cb06086fda6a6ac2c7e89baa23298d121b64b29bd7bc38576141ef52a8fc74eb187c44a4963b9530e3d1923e1c7f6d481ab231a756a28674a92995cc8799fcbd2b88e0853675f0d1b00e2529b51e5b6f8a456ecdbfae678d7f96d7b7e097d741b12cff5b3ce92114caddf4b602494a74d
+Entropy.5 = 514933103b0d4980181e7abb3cdea5e940de710675076cf8010da5eec2b8791f
+Nonce.5 = 50e87a88c04749f799a06c63e9999e5f
+PersonalisationString.5 = 61bdc922fc51cdb4fd3071a3a1d8003e56e61deea1a912e9dd9eb8821953dd03
+AdditionalInputA.5 = 447e2d7d2069438aa954d7838298dd2395707ce3b61fe4cfddd7704038c451e3
+AdditionalInputB.5 = c3be82d3346bb920bcca53c8d8749cbecbaaf4028957625d66edfe33d30cd504
+Output.5 = af0a307fff4f12f55c58168a8ced23e7f0ca35d117eef104f9adef44f6c4299ef75aba12b8ff842d1ceec0517f1449ccba09b0d038be5a032db0e9f7f2b9bf3d33fd36793e68d672f38188b14ad04a4f3e59e78dde954a132f2a3d8843808a4e22c2ecd825bbcbd46967016cf534847d7885653d4f344c5202989eef28bd8ef0
+Entropy.6 = 3ccd352cb0ad8524df23121d97e35539b0acb0904a21bb62d9cd9f5ebae01645
+Nonce.6 = 445035a9396d81d50cbade273da6d76e
+PersonalisationString.6 = 60262414d3c09bbf34a2d8e2a3b930a3bb2f430485aeceb6bad4627edb473629
+AdditionalInputA.6 = 86df0eaa1ba1b81a2bd310e57ce5b89264d2c678857ee585830a5872a3da5ac3
+AdditionalInputB.6 = de8728469c81544d05cf9754e9861b30b8d9559da97a0e4467cf2d60089290e0
+Output.6 = 87ecb75b60906cdeafccced53fb3d7158c43516a89c4a0c0db0550ce4feef307e105b00185f84c34902fcb95aff069e2b69829c1921c4016096ea0657ebe81ea39eb1fdcae3d37a989d6c4aec171e561944f2af69b4d0aa8df76a72a9e2a7fecc3b04650ceb7828ecdfd9d644206e47f3b2575f3a72f25d1fafa3eaa52a410cb
+Entropy.7 = 3c48e4d5c4abd0ec45bb9aeaf6b02b9bd490a2271909d2abc209fa1aa5be917f
+Nonce.7 = 91933d09e028c687ff77af9df776785c
+PersonalisationString.7 = 489e9397bd3ca368aa7d0b32d81dd8e9dc78e79456feb1277e6c187d897b9c45
+AdditionalInputA.7 = 72769e781db74e06c474c26bd589ee3a613b94ad6924d092554c26495af8b6b9
+AdditionalInputB.7 = 924ee1e94e62d1c77d45e0ec71c332e4ab201e24d993b6c3fc23318a8a1b567c
+Output.7 = 025a2872d89a2d647aae4be7ac36e6eda671844e91dc99dc5f50bf61d2a6333ebb0792e1580816259a6c1b1aa5c7407e4c461f6a5a9faa0b97c07d384db071a392e28aa1e9b4dace126dd9ea5b1c6d7113640aca0e626027c99e569a38c4f179d69a7cdd5af83c62a5ee1e9378ba680ef9c1f752321a38c1384c7d4fc7384c6c
+Entropy.8 = 63a8241aa13e576e7ae9728a6969b1c15d282f45df058ded45758c30fab541b8
+Nonce.8 = e9b8688d1ef6e23b651ef45d718b7a49
+PersonalisationString.8 = b1e0e48ee47d32aa673c5d5da7c1f6cba2269f7ce451c85ddc0ac39e2ace9c44
+AdditionalInputA.8 = 13e48bf3142434f5830752ca1c564bb6e9e828c19fa9123be98db312355af725
+AdditionalInputB.8 = 21294b1373cf90c53d111e03c6a3c82e98cac451a08958c869f14bec0c4f9712
+Output.8 = c980c003c2639692b395ff3fbf3213c672ace29fe2d10b335dbf26f0e50df91918129428aa98ad8eea71d192bb7d3b279aa851688a916bb66dfece0a323c89b67dc7677d9ede5bddd44fc18b89e31008870eca510504176a27a98ebb22792ce502f16b464e7d29d7ca0b44856cff607849e083b08697362928100a230721a4ab
+Entropy.9 = 6dbead8cb3685a6d0191e996a78737aef9884e8becc227f58654913c00ea95da
+Nonce.9 = 1f84917e614a4e6e88755a7e5b81386d
+PersonalisationString.9 = 7ec9a9973dbce7e5ccf289b6e33ef22c4d7e06c546eb9c5e3e2815d82d88ed6d
+AdditionalInputA.9 = 9dc8d3afda83a62c3e2467b8105a93e30066a0311132913a9181ff3096d84f9f
+AdditionalInputB.9 = 778b0e390e7199fc7867d5736715827098d99d37f5592480c9f2024fdef7e10d
+Output.9 = 5c06cb732f1face60fcd33f41c0bc67770a58e3adb87dd61ed5c72c2f73ac2032f0036918c99995bb47e4ffbde2dd96b91e3e13a26dc8af93e3d9046719213737521d35a41044f9458f452cc661e02dc4cfc8323bb5e2cc37cda26c8f2b7d14fe1ddb388045e400abd595329e53c0b4bf4a60f3a22c5e75635bd717a79340561
+Entropy.10 = d723d8ed26d609ac7f9d6cb6ee6505cd22d051bdaa36958b8c28769df08bc2f6
+Nonce.10 = adddfc40da377c50e6067a6973dc29e5
+PersonalisationString.10 = 5ea4fbf09bf753c9b25d5f4723183c6eaeaac85a42ee3b7b360f962851b08ead
+AdditionalInputA.10 = 35417ed8e0e15683cdd5baf324571c9f711ab4ef4353e821aca77a2e14cdd9ab
+AdditionalInputB.10 = 9322ee6fa460f40891d3530d13b9f2401e4f1fbc5c64f92bb61bf87650496b76
+Output.10 = 212476d8b3f61fa93745b2ea73e7249a01109c07b84ec792ea4503c385d16f82292061f1a09979fdd6b80896828ddd929abe806de301aac647a8bafc8d8c58a67b12e25dfe9e3e0a708cbf04ccfbb8e2f3b08f95db4c8d5e1d340492aeac8dd6e3b2966d2cffa925311d19e44ad5502a20bf98a1f2492c42d7b50e422ca9ebf4
+Entropy.11 = 06fe6e2a319ee26d8892c37711d1231709edde84abafb438c96cc7b0e7abaee4
+Nonce.11 = 271299a6bd3f0bf32ee519adec5184e0
+PersonalisationString.11 = d4195410f57c8b1a8683ffc4336cd61536114f943ca15d3930ad832393436ada
+AdditionalInputA.11 = 38178f646813d9d45381e96297f453337c4cf8de1a55fa0536a2666b09521ddd
+AdditionalInputB.11 = 435c72022295d2ae8f90d6f58bf37836afa213b248ad5bfef0ee9c3f94ccc0cb
+Output.11 = a1a4c2ed245ac5c2cd8cc5bfe8ef32ebb72aabefad2e5ce8ed7e6a481077ced56f86665ff46ba08d6d133386aed19c7aa168ad1a7421021638609eb56e6cb05920e8109150bad1fc43f59abd6abc52f867d11ed3ab11f7edfcdac017207ab54f5c00144a35fdac4d198c4c6a3901aa79c11f7e69ac4da59837d3dba32e691241
+Entropy.12 = 27378e8a90a0b2298278e1257ac4ada48096dda236bcb31130977d2aef9efe1f
+Nonce.12 = 223a6bb250c36302b37fc490325e68f6
+PersonalisationString.12 = 0082c632e9e18e1839987feb0b29e6a1b880e7f41d949c2c828a106e79423af0
+AdditionalInputA.12 = b178b3548c23e7d2dcecea78965e9d80256f85a5b9a706aa6674018791dcc6e8
+AdditionalInputB.12 = f041a14e2291e952b7268c8c7f96c7fd36dc8f6e0f2e50b5a21cb13f5fa813fc
+Output.12 = 7eab54eb7fb5fc71847f002c02f56fdc5a5be00ca00f7a48ac54ccc88494ce863a951e51d652e36a0355c473ac543a94dc69c7e390063e4d83a3009ab722ae8eb9034dfa9ffa78c91ee9ba87ebc2f767be9eb2b564671b9f52cc1484d07e3016405928e5aec3d6e3a7e091686f41362a223a9984b2a6abdbd7285dc7cc5fd219
+Entropy.13 = dc9173e90852c788a7cb07a14b8e429ff03446d80ec87a5f96dcfc6a2fbc0f0b
+Nonce.13 = 28c7c982df9bd7a3e9982065629523d3
+PersonalisationString.13 = 54534cc4e9a2e4baebb04ed83b1fb44321deadc5f4b34580c93a591f6e508c1a
+AdditionalInputA.13 = d7cb568022dc436f97663aacbaff5243628b40bd7952f5b1ac3c68d160c8cece
+AdditionalInputB.13 = 554121acd7c699df501c42997701e49deae163df0b7f155cfca588590bf5df19
+Output.13 = 6c2a337543c096844b9f9ec87a3c3d93bece6d36dcde33d00ae1dbf3ae3b1eb45fe76eb079291379f323df545f57a0808fb66cfb96bfaceed809e9d805c366282498bf06ccd6419a2294a240bddf19f1e27eeee812d97ba78421da227d69d1e568bfe8a00396f17bcfbd76fe6a97f1da6636676f300853f0cec7dbfa757671a6
+Entropy.14 = 439a55733a39ffc77f6b732c2bef562f7244c92e24b0e039db15269e3595cfd0
+Nonce.14 = 66a488a9a57e09dce4e612a3c48366e9
+PersonalisationString.14 = cb2168f5d0518e08b198fe12ae99e5ea795556a5450ac48cf5c41cd2ab06b170
+AdditionalInputA.14 = c168776136197bc3877c824461994a4cb020b61ad1630bd8f38d0db2110ece03
+AdditionalInputB.14 = 4f54082a1b9e6cdc8599e1639865c00fd758f403adba5cb74a37e2b20f29b654
+Output.14 = b48984588cb54f78610e05c8a7ce12c630934f5ed2e4cee21e523fc65a7b8412189ac51823ecdf493844a859aa87f3e84645f22f0914245043f7b86287a85db97697bcc84684b072162c2fa636569df83fe85f1ae25204786bfdcf5eb85006d09a4d97b162248daa8ccbff9eca28b7bce9fdbddcb8679ba50b6648cb3bfe9af1
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 9f465b884dcf655c921842200344234ad4059886ea5d08158b32f4f82a1bcf01
+Nonce.0 = a50ce7d89327c88aa76333692b65ff44
+Output.0 = 5a277a715800aab77ed59efdfa98ead15ca7c566dc4a788b66d8fccf2eccdda9db7c635b171842cc4f04cdce20add856499bad172b5b267cf863369a57eee5518d6d252c685d8932c50a9e0b2493ffb6cc9caa3f6abf9a6845561d9f1ec042dbd0312fb324370abecd4c740e453165c6f26096ab49ea1008b99a63f6bffabb03
+Entropy.1 = b18d53ce1cc26f77ccb09f48d2de283e4fd1ade79a4e1297863e3f3244194e0f
+Nonce.1 = 8ba1a44d4fd7221ab66f1a3b6dfecc02
+Output.1 = 3856de3c07690074a53bd17f76e3f620b0d7952fa257f0ec0ec2c49ee4a906fba86db39f743e9b65cecdc3e77cddee806798277a8ef09e4c4ea098ac20b2403fdc31dc9f8a62831d61ed5a203324e0fe020b99433d1cc3b6ca60587e2a5eab17ea9feae2f8794673d65d19a87912fd4f87b07ff440953fdc1f52bd0a801585b3
+Entropy.2 = 02893f95e806c2406474f357480b7100642fd60d5285d6875edc99484d3f2ed8
+Nonce.2 = cc2240591fdd1eb068b927e4d026eeef
+Output.2 = c9c78c2ef52694e85e3fe6b9fb4c87f08ea15617ea974395ce073138f05fd7dac7103f0801d22595960c691167c39273cf95718b9abffdf643ddb0bbf2e3ba74ffbf75782335c6e0ecbe6f16bb71c4b8fe83d34beede6a76e7fbd7852ecb0c1d2f33d54fd7a378a6463b7f934ecba0ba53f01d7583ad1a2a9c9b4df356b3f73c
+Entropy.3 = 77ce1d534c97621f2ee80744e1d9bf2377616823d2c7cd167b7f8696d52b5cd8
+Nonce.3 = f31804771016f0ad9a31c480872f70ec
+Output.3 = cae5ceab734bd0a7d251ba6a7a45c6c7d59a4e68921bbc4b696da1f89d78fe0653aef44d9fdbf088f5ae4d3bd32c8d32ab9b0f64d57d2923f76ca0491b45e87eb668ba157a17e96a17b593d34fcca39a5ff9469ab321aa19baae4a1f2e59d122df8793e6f2934dd976cf7af9e2ae998c87edda134dc57e69e45fda3be20ed568
+Entropy.4 = 0a566fc2d734d538533a0ce4841fe1d10a44edd77cc66be1256298b1d2511075
+Nonce.4 = b83a69f6a5faa05de81c41d0fdfff4f0
+Output.4 = c9673a965bd6415428ed1aca9e689feee8b305d93077eece568f01fc2b2d9fbccf516a6dd7006337852ed3df1414f18d56ad77b90e49f3466480da4a569af87f3fe82e43fe254caac034cf9ae7f51c42bf36f5f073e71c087558535431d80ef65825d8a13692091bb0625eb9bf8b0c7d6a68860e9aebdd8fb21ec4e92f10f2a6
+Entropy.5 = 3c0cc07fd3164979ff8c50fe5ff0781cb8045c2e8c15a2b2dcee237da7f7c340
+Nonce.5 = 7025cc3ec12722eba6356986c8254eca
+Output.5 = ef9273fdd863ef56f6def6136d6ddd86dce70f3152f2d8ca7e01088f00d685b06bae2488ccd2838ef23021a1c4c7a1930d85788f8651a83fc31babfe719f7ac9b24c5ef541aeffd6459892fd97f0787f77a751a11e3a166518f11d334a9d1de8013a96c852d37b6f4133422282b08df20bcb3d7fa077ce82e323f1873fca5722
+Entropy.6 = 7fde6b41b786e28fb708534cc71b9a5781410289c4c008d1cd33537c5f5b03ce
+Nonce.6 = 4375a24ff20ed56d10e657c5e7fa195c
+Output.6 = 153c1330e828df9ace5c766e85acd82cd7f6b014b606ad1fbec25edcd83258cc1923a35f348a03db77c69ade5caf8acf231a587a64bf452f624f5321003d66b1855524eadc4aa1a377ca912c7bf2a20f76999d70214b8c73cd69425c5b40e872c4e0d4e0e5ca4c32449d01cfde062456b95c24bc8f180e2a575c2b6e07639f75
+Entropy.7 = 078abd36f77395b6ab942fc4d45691a0a6a8fef6e2d6f0fe99979c91f4598adf
+Nonce.7 = e4249f9fe55b428199e3b9fa7efe4e08
+Output.7 = e73a36fdd9dfaf858822cfc7ab9de5c52f2450673b7a59b883d7409e230f416c6f60842677af5fb0f57d5507353637de66fb009ecc3d3b4830fa73d7d43f140c6b1359efe749177bbf776e30a054399dcf3faf44fe68756aa20830837a4ebb69d2d625c3dd1fe7d30faf7d523d92099479f15c3f925f4c22d9a2534ed4ad8314
+Entropy.8 = 9f1c1629856c5d028a2b9f8f388a119518a59840ce26d6b532c86406695fdb9c
+Nonce.8 = a44fa5fa6ac291bc784da9248fa27afe
+Output.8 = 3280d36bac6030472f9d0d1ce66ebd9e65d9c529a8539e3d3ed756d9165b94f4a596f390baa999ccbc00228953aa3a37c090065cb2d8e9719a386450e172d30887ff28f59a3aeb71df6f8122509dc81cc42ace912897cd14becfaeeeb92fcba3092c39e0c53b3a067764c2e20b059b04ba483afa3112a50c5508fbf458d6f599
+Entropy.9 = 81d0d864601e76ae4dd377a6f54a79b7a13d179b3f470e1e785b8105a8228793
+Nonce.9 = c8446ff557901336a5d18ed8fbb64193
+Output.9 = e5b64ca94576b22d0d4aa9d808f6bcf7c1568d5999dfc410c53a0fc54f21e293548e7659244a93096946d2eb21de54d687650d9edef5e0e1143a14e739d18b7348fa34cae1a1f08f180fb1d58bcb42b36052aab903b50538e252c4fae93abdbb5c51d2d99cceeaac2350e7ad1d94215cb945123c822de752cfe2db51b5ae8930
+Entropy.10 = 670ea3ac9da691881cda74715653b392309999842e8481c4d403418b37f6ca60
+Nonce.10 = f22b88678125f4edd9c9715a25a222fa
+Output.10 = f25feac8fb189e38659feae84539c62627ee4efee9eb3c959555ea1e0ca7ffe63bc5ddf9c0f71b0f4966269cd1a965be66d5851be3a649b9cd9ba8e06d432765d4baadb16eaef1d3d90b762b6e185cba792fba08b34b1018416a6085689f60d849cf0d739411e1d8f0f535afb16e48c08190392562b74aa7f400e036fe72748c
+Entropy.11 = 8eccd6292fb4ee68fa6bbb3be6e995c5bea9e9d7d9b523ea214b2083b46aa1ff
+Nonce.11 = ade93e693636defb359273bc99f5add7
+Output.11 = d33d9e8b04dae6800ec065a352d2cca3af2c68d7a2f45381a9d98997855ea0392c1a553d0588605729638fec424d0749e53fd267776241a7c06203fd619982c1cac4e48c84a835e034f1e6367403a95f6aa8188a116f76815d5a4efdf43ae89f4c5d48454c4e956bdf2d73524b4c4b9cd92dee7487cce7939fb89dc4e0aa071f
+Entropy.12 = 9b32c52ccbd66508477ac950ddc43e26d4be7ecf31f5f9d86edd3349039b1b90
+Nonce.12 = 2dec9d80c3abde7cc94f07850d8ae7a4
+Output.12 = b00c87fef5816d4707554240a13c882892d383042448a8d71b5ca250bed0f90a22be791135f81c4bb8ffed83f45e0f4c32ebaa1dd6f9992c101784bd7202672f88e7a0eb52cec64f2a2013ef82f04d64bab346f4bd948e75ba922c1ad469975659f82089763c143dd8f872cc4b0d3f02dcfcb4de868434d0ab6d6c5ead89150b
+Entropy.13 = 4637a3f3f9443a915c249cd7a83b8151308cd86c80fca2ba7e45cdaaa44ac1b0
+Nonce.13 = 096f13ff358095cf2052359b95ddd5a7
+Output.13 = f08e0bb490c0bda177686efc825381d1b363cee7a7e9c007d279a773dfcb0fd2b56048fadad1c7e9dbd0f79666bd5c68c4d64a0e2a5ed5d32c74e1bb6e6588f2c382e886e5138d57ad8ba7b31b119d3106ba15e396c878388b96ba57b70e496662a23592d36fc42161453d70a4fa1306c971207c0c44a96c0da7ca40020b37ca
+Entropy.14 = abc502a99b7c3cf14262f6b036925a9904105b019592a2a6be26d71fc42c7444
+Nonce.14 = 40a212f9e1a5aa54f2c7ed4ccf631c9a
+Output.14 = 0e747d83e2104367beca697db9b6bb994061d82aae7b1564f6a0911a1f599084a7ca7c94e232908d41df93a6b416e76146a53b490afb552124fc0c2087cc45de96390565b58f913b5dddbc55dcdd2617ea27858ae7c7748b31d832fec0fafe84594ad7b693cf972daa9521ad4134867339536ed5cdf02a758e40d5d96802f4fa
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = e0d0a7dc4b4658749b4937ef523d15ed5fe24141a0e22856392f071dfe237eaa
+Nonce.0 = c7b9c88df2a8656dc3d57f5fb5a0c169
+AdditionalInputA.0 = 842be51ea1eccc708f189a6e142adbad641004b3f7f8a59d3201dc51c4ae3db4
+AdditionalInputB.0 = 0d6d56191cccb8e99c2d7f06d660ba7a20b1503ec23e550572da59e8877c45df
+Output.0 = 0dc1e0bb6ecbdefdda365c9231ef6bfe129b4ebc9d744b1987c59859432f535c69757344d309dcf452fb7445bb27ca77e333d97e46844b3ee50464713de14e3a021116610af78c164a138f9cc3e3446dc5d5c26c4c6f511d5c55bb735d86b76688b45a9a837ae892e50f850530c8f197ea7d5febc34fda405d91895938cb2e1a
+Entropy.1 = 7b302d6d92443decd1c603b6d0c9dbe219c5c1c24f6a0b675e51c67a900ef327
+Nonce.1 = 2d351fd288a9347b3ececadbfeaa3bda
+AdditionalInputA.1 = d37dfd818fec362200d2714a3b7b29fa4eb47a7f288dccd873e703cf9da3c20f
+AdditionalInputB.1 = 89419ebd3669fcf5db3872b603893a3538b257d38f34475f40e3b937a91f4ab9
+Output.1 = 5a8836845c21ee4261edc66e36cd6bde3d921cad9e9ec394923fb251e85b172e379b01c45fa80eb1a8bed8e91be641822b284b1ae5d9d790af3b41153e4d437d5227efa6ee7b2f18ed5e4b9ab99b85d710422907bace74718d5b674dacf968d63ff08be4d964bd8645642094c0e5c22b079520d3a4df4543d4ca77e4a2e7b173
+Entropy.2 = eb37bd350c054e7dd0eabb10cfdb693b8f0bb8d67f7a512990f16297d5c74ec6
+Nonce.2 = 98f694aa2c7d89bf586b840362b4b7ed
+AdditionalInputA.2 = 1fc1dcdd773cae02aef23eb2e76992904229c620ec4690d7d79423a0e7a6ed50
+AdditionalInputB.2 = 9bc5f10bf30f0371af6db4e85b77be1df26d64204e5eba7766e0af70a7f09049
+Output.2 = 3ff44f1184b42a48c8561385ead05c01f9a840b0967ebd0f847765e4d964550fcc6c05168a85002981d1c90857bf129d23d4c25881e52a82188aa56db1ecfa238358bbe45cc8a0965e082d7699cbb3522432a9aacd83e5aef097ea4c557c247ea4675f88ae78cb8a286dfe30648c4b00ecde039742e6ce53e1d5f3278152682a
+Entropy.3 = c6bc7beb1a4bba40f0e8e6985d7c1b43ce359e226997b50cb59e74defeaff024
+Nonce.3 = 6f58957db3c45681bf062a408038f9c7
+AdditionalInputA.3 = 2f1b3362aff83e37a0e94264917924a0f55c3255d62d925ff4ed16d624cd590c
+AdditionalInputB.3 = 59d01551cae1dbb0f6679848f920d33656d6c560eb7413ff63b9890d7c91e5c4
+Output.3 = 5a5804c33b9a8f7ebebcb0d39ea2580fd29b7fc3463aa5174d40c9fb81ddcedf4a6dca163fbcbc9184ad6db679102aaaec7c414b28db52bc4ac6ece91976dac4e496e7ab65ef3439901443e81fc3e68c117699e5e17400094232f4ee21cad8828dd86d9d19f29ef471b0ae23ab1c407a1e69eac4262c89fd497a4efc032d87fa
+Entropy.4 = 06eeaccdef1773c0eddc07ca8fd1bfe65787945167be6d9a4bcd17b49cc635f4
+Nonce.4 = 542866f5799fa9a7177e889664e193d6
+AdditionalInputA.4 = f5a04d6d642faf8db682f73d71cec3b1b37dd525a154a79ab00768369b2caf53
+AdditionalInputB.4 = ac44cbc8d6a4db3b88e5f8234b3e4c6c5fe692414e15fd594755fb473d9dfce1
+Output.4 = 9453b9e129278954dfb6bb52d7f98fde43dacb76398d8fd0fc4cc7adfc39c92899dc5b1c75d4e2c418ca6967b3d6cc2039df9aa12bf92ecee48f99abcbcb7adccd6766dac6a13aeb04cd86c48db9cc5656e63cf1659718e6e439434472a0b657eb8c29a10a907f7ded9a2b37cb14a0e567be3932f88f0591c669463e656fb059
+Entropy.5 = a1dd4427a148ac81d3b01beed4287bced7c7ed65d2ba818d8d0cd6d7eaecf369
+Nonce.5 = 6a2e4e2e23f17882b8919b1059b3f332
+AdditionalInputA.5 = c250cf7bfbd9a7df188a0bc018cf6b95b708ccd716109d934b62da508401524b
+AdditionalInputB.5 = a95ac33bd369ce6a0b2efa9c09df583e363c82f0f22797a78b3a7339ed25703d
+Output.5 = 8f54b7cb5cbba5340673ebafe57b95714a7bfaa681d4fd559e0d76a994562f42e776a0d53c17bea94f6053572cc127507b5c964996753aeb4df9d025fbf4c21e40164ad7bd6d104786df843f18d978052ade05b70bd89a7346f3e0ec547c67693bbb297d6df3e2dcdc8324e339b1c75fc5cdc251f3eb6f8d6254dd6b70f4000a
+Entropy.6 = bdda95adb55c7860251ec198def364c531128139c255037ecba25d5b25b4583e
+Nonce.6 = c9a942174fede387da76acb0ecd17338
+AdditionalInputA.6 = 7c7acbb66a5635d664c00261f5340f82524fccf61a61ebf007652fea2b9909e5
+AdditionalInputB.6 = 27d242168429812328c5a6e60e08bf2df9a14ea289ee94f296d3e6c95f92d493
+Output.6 = 12d0764a5f4fe65722d0d3512580c0c4fa349a136b2b85d2ce8b0057fa836ca84806f9540673e339bf996cdcadcbd1b216357dbd91a0e53a98be0b5602b24d3ee4b14caf7e8d166f2ab35a91d111860c483dc81ce016f48a993f00aedc3a9243ddcc59be37f1fe33d213c52e03cd66b50730a6705096fef56928cc238fb5fdb6
+Entropy.7 = 8c2b18e46263c99aae4815966ff5bcdbeaa9f0928ced9cef65707db59a7f502c
+Nonce.7 = d938104a2f260e26517d1e00160fee97
+AdditionalInputA.7 = 52eec49185ac0cb99bbd4541f37afb56aee7aa7b042b39aedb6456d9a4ef64c4
+AdditionalInputB.7 = 21f1766f42c31f357849a0d2f8500a7eb2dabdeb5a99d365da1704fc008fcd50
+Output.7 = be0089e27d3dbc40cff4bafb3e3d4defd4b081f415b827ec74b47481204c7ac98bd091cce7277f344274cb68fc263470219c2880728a3c2d6dd9046fb083726a45a07ebe564baa53a4769a367fb85f606b5ef102d68687d23ddd871af71a460795a6851a77dbeba8287b3cfa5fe987623f162292a4507c2dce02f54a0aa3f267
+Entropy.8 = 83dd78e06bbf33068b8f4ec5794efd1f3525259fa5433d58063b6f5c70610b45
+Nonce.8 = 953eef894f770584ae4c202c904cb5b2
+AdditionalInputA.8 = a8b57658fe81812aeaed0596ac39bf3f332aedfeacdd7f06dd9ecc863f72b256
+AdditionalInputB.8 = 7e49d4c496c97cc3cf863027cb8ac8f45c39cf378e520b15671bff3f02fbd490
+Output.8 = 5b30968afc450a87ab65192ed4dedab2c4d560f335d4f05ebdd4be12404a054f3135d263ec55a1b642dc48786b912ccd9ec7f168b7b04d82d9a58c64385257c5e7f79dcec45670324a50ca60346e3f7156223edefcd34e2e886f705f7c01a0832744897b21949bd4198c5ef1d2e55c90029051eb553ba97cc417c0103f3e2877
+Entropy.9 = bf1a422213950cb9a00290feb88dcc48af3e30aa4317cfffd5dc4dd456285eb2
+Nonce.9 = e4cb43d52c62a3abcf121367a0d5c607
+AdditionalInputA.9 = 6cd7aca4227de91d638bf97771ac772f0825d8baefa062a7d0279ac17a088b3a
+AdditionalInputB.9 = 1e14acccdf1e40d5150168321a15ece4abf8862754ba19b566d5c7c7dd037d38
+Output.9 = f2d89edaab4ef395947239a92750c9d5291dd61155c9e201e1d0571f49e9294b6f1093971a7585e5b9b402e4b3fd0319f6324c17ba9c9cc1c8105a967fabae0973cacfb14cff8d296588b40bf7e56ec51d290b0ca1604ac2e4a278b54dd5fdaf49791dde69c510a7009e24dbe31939f75c862a7094a2d9b35b950d059235d8a1
+Entropy.10 = 3123574346cd99ed7f273f896afee137e589c86fd029758270e6edd04d646b1c
+Nonce.10 = ffdb7b4363644eecb036fa8416f50724
+AdditionalInputA.10 = 775c5e8a229036fc5c175835159316faef8c788201a2916df7402a8e9616d89a
+AdditionalInputB.10 = 9cda15fa3f0af57fe853cedac1bb437ab635c474e1e79cf1cd51b57e0be3ab9d
+Output.10 = 75f937d3e6171af73e2fdfd0f63bbd3e1df931fd7f2662aec502653961abf44462b68485c55293652899471259029e321487bc9082bca728cde0d9e87a51af864ed950be1b9e0a07c0c985b87488de169a8be3b0253f3a0cfcf8c88b17258e83c88be7f0640854a286af3c1a646e73eea2c41e58210cb0baf7e26c766a0ca43f
+Entropy.11 = 025f1495a7e0719bf4124f932ae686a6c3935f9130df615d25391296f4329525
+Nonce.11 = a986397d598dbf3a14d929bf2bd29cf2
+AdditionalInputA.11 = 0740edc93b19e1d92637b36abba92db0944daf42f937db25f181130a612802de
+AdditionalInputB.11 = 17553d52208c4825c3be199055a67180d9014ce4ee9536711f9d077786258208
+Output.11 = 4b30fd3823b479d6a76134f03548266c056b5e3818a3f021cff07084bf8a87cf143e9adc9d864bdc9ebea445000cefdfc9b31efbb44d637bc3a893baeab84dc52dd21fd7ef551ec73ee2ebf035010a297df9b2795280398c26ea24089874214cce5f952a1f17926ddd0a074c61fecf1510a164ba39b4d90ade61d378464b7bd0
+Entropy.12 = a40ca6707a803b3c01a9f3cc1b03cef8f9ccde82ddaa49ad2f636ecee4b88586
+Nonce.12 = fed41de8492b78b9a6f0009c617ec911
+AdditionalInputA.12 = 3c266b6b891d27e806b5d9b92a3b2e48aaf7e81538d9d4afb53235bc37727a61
+AdditionalInputB.12 = d6df874c7f49fb343b57c03132f00c7d5b338866e5a893746413676f6c684c31
+Output.12 = cd3e84fd13f899853b5aa41f0ca50370a2ed2b7d1cdf262d9df6ae437a41a0b8254bf7104503d1da1abba82b6e372656af5c986f032b6dc7ffe9568a09afd72d79ad1012af1c50262292566d70923628526eb9f07030a1a1a94d8341b66126bc91d34b291bb59bc0e84c8f7ee4e9b3568ba1bcacbeaec8da43c9d8e0d327e8a0
+Entropy.13 = abb925fb51686394dbfa73ac43a20b6e5b2842e38a75d84cd309c95b5e5643b7
+Nonce.13 = 57e2b9eea87dd34ac574c1f639ed8624
+AdditionalInputA.13 = 1dcf94cf20572cbf3e1b759bb12c8dad888687ebe8a1fd3753eac3717ff61153
+AdditionalInputB.13 = 25e729b21db7c2796fd0bdae714fce0c585ce842ef08f964a4191c2d920f572a
+Output.13 = 5c9d6909aa6d9b391952cb8285f1d99d1aa78d48ff52e5892bb893e29b4dc04537fbe2caf41d58ae139c52fb413a51be888d0e7720f0de0de191f6f6de66c551281dbb762f15425d14a1a2550eef206a55cd57887e24db3a6c1df09f4c9765df690dce0bb44cc96fc989095998aff3ee1b976637d67c1ff02ea1dd2dde692338
+Entropy.14 = 3faba299095bb9f595d0fcc1679bcc814d341c0edcf9b5021ee3d90083ae6f83
+Nonce.14 = c0fcb2dcdf8cfe42c4387444f60c9dae
+AdditionalInputA.14 = 2a8cf10885a141125dae18c40f7bcb7e09c1b2726e22a7f776e4735279f784e1
+AdditionalInputB.14 = 7c2db5278d2336764d274bf9624db7eecad2db11c6622831e47338ea3ef02ad7
+Output.14 = 08ed2c3aa35812485ea8aa0b16149ee4f3207a0368be2035e202797939dd2a1c1db1ab244434edd783c7574bf48fc99f93827a1fee91cd1db1cad53512b6931d2d63018045b2a50a9b523a6ee212fbcb21ffa57ef998b4ce24e5f2f875a8ff3a45d8602cd56cfefd2f61f73d00dc33304a464f4fc1f7dd311b516a8da4e91151
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 7d3291d6d076d9e6b3a071290ac9ed8d361111dccc2c601c041d1fb24eb9ffe9
+Nonce.0 = 85e9cf73b7dbfe71bfdf103d465ee8e3
+PersonalisationString.0 = 4b20012ea864d2ec2f931ac12078d57a5c034f9991f01b495d9afc70fe13ea88
+Output.0 = 7b531bbfe9176edfe963acdadde9a28f85db1a40d6e898f2764b4aed5ea67925362266ed3bce1e5c4053c011cda9e2a7c46681d15ba493fbb96c75b89907e2f7755f3db8536fe188a7c46484afed6f2f822449700644c9bdc5a24a1cc707d5d4e993f02f39718e866b8360c7e24095b918c1ca3e3f45ff3191ee80c21eec0c8d
+Entropy.1 = 0e05b73a9fe19c76ae180b9c02318647b6c55cd589df8bf4c822ab8e0ddd6882
+Nonce.1 = e6ea875f5c9b333f3acfd73c869128b6
+PersonalisationString.1 = 86f0debf8b2423693597a36f58db2c0b25a67d3b58fd9cc0597323a0121258f7
+Output.1 = a9a66c8f04cb50992d44d471af7718b0c79fe5d2a9fc3568757f72a94c95fc737dacee237157e6f38ec4bfbf6491e09cc1609887db5dc5a5e386b45ffcec6e8747f26023156afe6febb12e2c13237077ea24d46d7f314e1468afde13d8fdc7f9d9f8b6d11a209c1e732932a227f2a403b5a2f3e25fbb14aa088a14acf5fe7311
+Entropy.2 = 70a1f74dabd03952df7d3fc226be8ab3b3986242a889b17a596bc06e964333fe
+Nonce.2 = facece933b1bdfbd9ea73af227480e15
+PersonalisationString.2 = 2d96a92212d66216e5a928a7453a4b13a985a8817934ed788e694a10788be77e
+Output.2 = ff3c9c4f19be369d3954453c0ebc0f6026913ef9e8518a553ed5909cbee6a9b2589347f77b04510a31d84f9c3578f95b0bd67c5843b0e1ac4be8179225a74c9d681490eafa0032883dc89e481043a7a315cca9a3df836fd61baa1e02d5dd02a94dfd1ad66564c46c0b61def767a8a590c6e97a4002bfbc016181741b80d429bc
+Entropy.3 = ef6ce3ccfba08d79c79dc8bb6f2f8eb10f290143511ae9b71a7326d7e4d575c9
+Nonce.3 = 771701a66a88b411c4b6459be6ab5e31
+PersonalisationString.3 = 2eed07a152d24f7ac3b76289bf9943c20e266dc2d6cf8013513d57e12c62100b
+Output.3 = 6ebd8cca433cd07d773ff61cbcd6fdb54d6a1dfda56c818cdb49fa1028f20dcc96a16d2231f8f3d9b6656544697e91d1d06590974a430796a9d13b817bdd1446ea80bab76b45ccf8c293a4b8d359449ebfe9b71c6284d7d0c63295700b44e9c40688dff997f4662afa4a8132f33174d2111db500e629badd2275783640ac1e3c
+Entropy.4 = 641a1c607e6cc3c3af24718920a5b4c6b6d4e531175df6d3561c35f729a24534
+Nonce.4 = 6e36da6668ce4b9b3843f893f47f28f0
+PersonalisationString.4 = 471e8d2158f963c1419a402afb7b4b9f3a1872dcf1a14acaa4fd7902635bf95d
+Output.4 = 0aeaa5bd2a6c00d13561cb185216799fd9544b867e6cca43931ce89030a5e095e4dab9f343554d344c55369801e74464d173036dae9c1ca6d94a057c49f5f39d9fd5ee193c2d36c73f9d2d33c016437f129311ff6e489761bd6b7b8c60cba9fcacdf848cdbdbdb918247746a3a7434024e1977f697c40fc128d5ba14ac0fd76b
+Entropy.5 = 7122ad64a4822ee6adefedb4d337fa92d7fd48d81507b87a760d6b37a0e100e5
+Nonce.5 = 0203d0fb9f1a9ae9a44ba86b91152548
+PersonalisationString.5 = d7bf3d8dcfaa8fbe020cb4b9a8ecadc05581c14475f933630258042454000564
+Output.5 = e24b2aa865c8e7f542f23f7ce2053325b1218bf9a47a306697e02699e23530754097fd8bbaba09d506f950d3e6f71810beb58c560c91d827f07dc6cf5fea6375eea833c37d60480e9430f90ec10f370d24687d5d2ae32a4245a3928ac39ad3d61989217bdcd46314235265e6584d819927030e7a051b270fe247d4b5568d829c
+Entropy.6 = f5b861b5ebcecf356bc5d2c03cfb8ba189daf6cce5a3a24f90c2f7d6d8555ed8
+Nonce.6 = 30ea5c420bfdf54b800714a0ac847c8b
+PersonalisationString.6 = 7795cb039bcf99cd86b17436ac4284cb7cf5abfd0008bc4b2f156de85e194d02
+Output.6 = 9a58409e95ddc0e109635341b294068c9a0ea7e05a1eacd50f1d24ce82c76d715d9efcbb05afcd7c5ac67be14dd6a47c18ba346c8ba8459b2283d5f89763ce84ec8f975b800e835b18476ebeb67aafb3b5688ed5280267f3eb4e03c9e61c07d974d2704acd72d0863b0ba5d5ff30628c0f5277946693494f2d1128949375f606
+Entropy.7 = 1d33127bd3f4c528e087da8bdcff8c4877a670cd2dfb174dafb9186c1e7d269f
+Nonce.7 = cb9fdf934629bc19f888c9b059330844
+PersonalisationString.7 = 101d8e44a16f1368654c4beff891ea3a0931363492615b2c2918037d44a9cdc6
+Output.7 = b9c3381e5552fe02c26c4e43710be67f22f004c1a649fa216f0941958a71337c3412886129ec129cb9f6a762cf08262ab2dcb0e66451f09f989eb06a290000b0f80f347da535d7cbaab14e6df857e82e32e80196f7659404afc6c65b571c827d33520eb0755e2381ec8c09989e401ec112649cfaa0bfd67189c64a53461a86e2
+Entropy.8 = ab98afee5eb805593ea3413acaa93e6180830f97b75a3fc91b58b736be146a2a
+Nonce.8 = 806e7ffb3d81cef8a885ce3e96c0e7d5
+PersonalisationString.8 = 8e55e5cf1597bc5df1dee0861920dd53904756079f41b353b9a0b7a3f3c424a3
+Output.8 = b6979a7fea87ac176aa9f443830bca91cd15ffccaa66c9c8dc951c7704fd411847e57f98b556a88b3fc434ca28a32a9f3f6c1064a157aff92a8f3b2539d9b14a02707555a6310e9ed65e558dc16481e37fec86c5d8e76e2f955929fb500d5310b7925ec02b1138d3ecc03f6417bfbd08337d570d06e2ab0416c907dbff8d69ac
+Entropy.9 = c65c7861159bcfd3f41fe8deaaeefff7d72471acad0bbe1cf649213cbc714d1e
+Nonce.9 = da7d7a885d4f2a70e6e7a63f65692617
+PersonalisationString.9 = 4a60014f03fdde58489d4c69bed27c77ac0f5954ffc8035c38ca428e7fd5ac32
+Output.9 = a30e5be5b7659ceba62f403e0cc4205f66eec07f573d76d06289ebd1e95ba05b397524fe09521c2b43b6ea515c56c14396c90862809233830f30ffe42737161cabe63bb506b3809f490d144822949e91ef90799c121158c3a05168d1bcaa9e0fcf66036af4fad1212b96831959b1927f34ada29fe1ed5893035fb9775a7df94b
+Entropy.10 = dc6199df22e79756e118c614c47a9c1f04968865c23220e975fcced6055ad950
+Nonce.10 = 11106c761eefc1027b92346f87747967
+PersonalisationString.10 = df50bbb118a5d2d90a4b6cd6e8bfcda33cb05c9d96cbd462fbe5f788f670b261
+Output.10 = b46bd92d1c1b066801eb2de82553ad94f349a9807f685816c63d8a2df30b7d3e64f455ad7ed6c2ea08a0efdd49edb2ce47d07f9b6e7c1f932a95c17ed41aefdf7a134f46ea8ec4bb4032bcf9d6fca6d0c5a8cd008721c24a84dc0befc273ef30baa66ab0e16010e31cbc786cb1590877b5cf966e4a4799233420ef9e25627e8a
+Entropy.11 = 03d29e87ef3a123c7badcfd46f097b4ce64451951548e738c3c2cad94578ca61
+Nonce.11 = 9d4806651f69eb9aa98d7faee7168dca
+PersonalisationString.11 = b84ee132ff8a937fad8364d7d7ae104a1d3a5d1c372d71dc2ff66f9800c5ea1c
+Output.11 = b0865ff00606e9c00ea87db396b68fff02697eb73974674f301af4b25b638d49e77b585af645e1cebc0a52eccbccb97440e9557b3ab27bd35e7524169810154830ca6295dfe6c1a9e19bf742c03e091f704c98029a44140a59dd45de7a9af35c2bebab8825f053d6bb36e0e00948c91a5eaa92077b1e5e0e97721883ef1f268b
+Entropy.12 = 9c551d477a9d1ae2d04b0d367db759db079cfa3fa4584e0f664715c8251ca0d6
+Nonce.12 = 56d34aac48cc7215f15912307a9bef55
+PersonalisationString.12 = e0ef0bc324051ee3edff8f371ce45b3259d5fb90b051510b4fd97d12943e5bac
+Output.12 = 760ff9435000c1122c31d6a9d68d94eaa10b2ea4b1f0fe1f7a8025592ce59927d39b3531410a5c677381749df30e64074cd3e9bda5d1b10484287ae603d45201944f115edbbf15383bb2867bc69822a84973d59238cad311a47e664749c96bc1f2c76e01a5738172cd51fea7bf2fd7e814f4a03763d9316e5bcac3b551e67edf
+Entropy.13 = d5a74baab8601262fc7f10f213567cff06b2e56b7c55e9a833cda5f5d0cad004
+Nonce.13 = a961a671739d2de3bed64bdb2227066f
+PersonalisationString.13 = 5a85407652d846f446fb84071413b1d23ce2c04daf8f530e2c140074b385c15c
+Output.13 = d57263867580d234ec9a507a3fd44b09c749ff649e80c6990b09e5c770f088c2b56d3b2d0a0513d3cd7a917e3abbe102ade7c88b6772544971fafb4f09679659d0fc3447b43a39e6fb7f3107ef50b68980b313b364d3c9c02f8803da0c425f6e963feb5f087fa51128ca96e1ab90fc86be3fa11ee4c253ce4f4a386e734fde9f
+Entropy.14 = bf2cc11cc54e247811897e1242274b4f4f52018ac60b73fe9df8972d3104de72
+Nonce.14 = d5aa1d24b7c7564f6836f626bcc6d32b
+PersonalisationString.14 = 4ef1e00dcda9e893d066ce48cd291258a29e0a234796c30a6465079cbc3d3aa4
+Output.14 = 43da46cb7b737ff7617715e3a8aa4c42d8cf1b62f32ea97d035514a10798f5bcaab550eab684cfbd5c8d3e1ce6d9fb026812e647ae6a50d3d8da8e9e2f1d5f7fe550e7e0b88e146925f2aa64690e1a5a5de152f6421837c15337efa80fdedb0a4754268bb83fcf0281b05b3885dc64b87f1da61b1ab219779ef44a1399b992ac
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 4bb71d074a7918510266f827ca1b33905975c2d999e9066ab213aa0ad00a3152
+Nonce.0 = 87758cc57f2b197f72e80291209731fb
+PersonalisationString.0 = 002ded7492cb7ea5d753458fd886736b9e146021dd01e1b0898b51222270a428
+AdditionalInputA.0 = 6ef45c64221e317e93895845d498de94966e01a6ca3a9e84fb4565f388738604
+AdditionalInputB.0 = 1bdcb926421e9a8a23f1e1ea948b1d60ab2ebc569b9e89c8d644042664a9af37
+Output.0 = b61b548409f45e3a8d57f2b1542da3d120396adbd5d7d1f65f871d8a6a12478875d855f777c43b0ca819c997bf00a14efc0882753a52293dc92f373332f027edf133d9ec2741edf080fea17391be3bd66f345f03aafd6482f3ed79fe3af7ca02ebab77efafcb71cee6831043621905d94032b1ba8c8990a05e34f383c8a920c5
+Entropy.1 = 78b29d0b561bfa1da48813409bf29e8bac44964aca202cbdb987a04fafb856a5
+Nonce.1 = 0d7c60e7066ceb3261d4307ca5c13df1
+PersonalisationString.1 = 287dc6cf22e6bdf928df8eddc130e90bb0351d031d23f2ee26e308a3cd34f990
+AdditionalInputA.1 = f633edf6fbeae2385c758b6c05125c27bede61081597dcf49bc6a1370fd4ef05
+AdditionalInputB.1 = 2b1334ac80215a9dec28cca031342a67d9a0cf97abf982818d777c8e57a84bde
+Output.1 = 376a4b8491382e7515ff53a46075f69ea20417267f298fbe50d7fcfa376aa73e681ec54e54a3a9bcc3122e7ae6e735c4bde2fa8ee6606444f20ff4929e00f9dc2fb6f423395e79ed1fe68b0099c20990074139985f325090ac470be57c4698369198efe7be568582fb70e158512a21afc75d366f1587723e6fd234fa82da1dca
+Entropy.2 = fd1df2dada2b42f0e60b7f50158c56f101c25ce4027e423428e4f0c1c3dcb3bc
+Nonce.2 = 1534aa910ff1886b94f504877cb0cf35
+PersonalisationString.2 = 9985938153af7c71540806200bdd8d34d96d8760e49f640ec85642dc17470697
+AdditionalInputA.2 = a1e37d07f3d66847e10c2f390936d613cd61924bbf11cf9b661d4734186a9274
+AdditionalInputB.2 = 41c919ddbb27809ef4fe4a0913d8e1a72be24f41fda73474daf40748d06e6ad1
+Output.2 = 835fe9170519fd28ed6215eacc7fa12da2d643449648d51af6254e822e9755e8b4b296065ac5297b6346937ebc2b2de81aebac963fb6aea7c285acde54692bc2643d261006eb833bf83d970ecb4077259df6bcad04dbd16912ed9df3bc292b4ba58c2fd2d8c6d5fe2e9281aa6dbb2c771abb8f0baf449349542796b1689771e4
+Entropy.3 = 3ad9292320d9c7c91f8aaf15ed92dfca836e189251d6b84b8777958f54f9532a
+Nonce.3 = e7399a99975e2cb007e1e1f5d6e6b9c3
+PersonalisationString.3 = b032d5b89fd43ea6b245d8ba4f8d33d669eba0fdffcdd3683609a5c24f5d4f63
+AdditionalInputA.3 = 22d27bd1a3e3cca2b4af76d3f4c4bf6c53f8bff1f27a6492ad6bfacabc51ba7f
+AdditionalInputB.3 = 2b990b5dbc8f67278cf34722861c4b6836d299dc7243f497411bc232b030145e
+Output.3 = 86f38742f138437c0bd122876651f1c3f53a4647f5d45b941b2c1a848295f1f35c91c86c62048724c43be820cb5c183f60a792cad40f4fbc8efccb4886a8d703c6697c02a50df6e6797cb22b1914e874a2dd635b90491a2d4af76c318242bf7fdbe0ec5a19498e637791a0e63fe28372f12ef6f573d7b15cd658fcf7cfcc2852
+Entropy.4 = 0c86923b8da00c33e427b3dee30a31d1ccdb9a52d93317930647ac62b49beb0e
+Nonce.4 = 1c13fdc25b4116bbeb7ee8a4ebce8d21
+PersonalisationString.4 = 9d5ea6d69c5b41721f6a70b1d6ba03eb66d656503276c800b62c959e3969786c
+AdditionalInputA.4 = e6913ba38baad8e9ada8fd4df657cd15befa47b73f310406c7b5fe933ac2a189
+AdditionalInputB.4 = 07a3c24f8c84c9ed496794f91f38e2ace4dd87ec0824b50f26c83906ff0f5b90
+Output.4 = a533eb5cf4e7e7030cd99b83559dbeda02bf6f4f4cf65d2093ca5eabdd6c9756b44c72a739951fc164fb250addd5b16493a8d8ca1973f277924a34900017437a08e1df78c32923e2a90fd405c4242819e28a976c36d80245093251c09e2fd8f2bf09d7d68912c7a2447aa6a0effbe9485107bbeed529a12eee084171c3aa9bbe
+Entropy.5 = 8ec41df314f3e83bf523e074ed5d95f3b283a02bc4d0344a018c5337076c0a4e
+Nonce.5 = 63e9a3825716ab2baee337beaa02be4c
+PersonalisationString.5 = 5f61772db899aa4a311ec6cfaf5b5084b7ede2daad93e625b41b4fab1f392a9a
+AdditionalInputA.5 = 4e06b930ee8e733a06c0a27ca0a5c4619f76ec40e1bc2da8e5ddc6924aec32ad
+AdditionalInputB.5 = bc8ca78161d58889fb44bb1a9bd9ddb7aa62182f569d8409a5e0bd51106e62d3
+Output.5 = a61b58890e8fd7938cb0eb267ccad80eeaf8afdb5aa402bcd332acd702bd1d971ad10c028a07dfbbe224a82ab13c9405c2dbbbb9ce781a04e5c719f3046f7d9700df1ac4b99056633599f617838b8d345e317f6c438e5f524c16937ca006381a4d2ba690a1538cddbc040fbacbcd124578f02180c397f4ac537969f761b6da3d
+Entropy.6 = 0b775ed04ebbed443b3b1a060504d02367df95473a0f950fad0b44e2b20dfb05
+Nonce.6 = 516be332dca34844a36086d4570c513f
+PersonalisationString.6 = efa41d6ed6aa470e28508e71f1a03cd0b16f2b47e6e8eca90da7db66380c86e3
+AdditionalInputA.6 = 9fa5da082d44fa3ab3c47e34067bd81d266787dfadc438449823f7478aa57e4f
+AdditionalInputB.6 = 9b0c63fdfe85b1989cf48ce4898aa62d8734ab477c3b1387aeda070911913db8
+Output.6 = e7fd604da5050f8dee29068aa65ff7ee93f48fc459a5e3a4499e429e309467f094d931406e183e13310e6c52752d17f86b224a77b1cbef973dea369ac565be82f6656d8952b66ad241f74a9c11ee1802c237b0a9f5e5655e7de7996b9a7e6fd5e0d837fae44b1bfff7fc7731038e390ae3fddc36d972c0446ab3726935437983
+Entropy.7 = ba4a457de181362612378f0a8d91ddeee68ce64db6766a2be01c2e87ecbdd88e
+Nonce.7 = 8eaba622e04a14cb0a08232109a90c66
+PersonalisationString.7 = 819905ef1decdaffdfff08e7eee33bc2c4eb70710b66fdad28d2ed917911357d
+AdditionalInputA.7 = 1fb810ee6d4a25478f47503e03298457ab985c896d1a91bc98f07636e0374c73
+AdditionalInputB.7 = 4c4d40679dfe61aa13b512ceb05743429220c38170fb16e26e698d2172245acb
+Output.7 = 75c91cb632eefe47c7672f47a00ee40bbb301f2f0163b0cbd243ae0acf986da42374c59e339f4cba815afd06ef9d1b1c5c47a474fe27706401ec7a58c7974e4048b9f78a5c4a1ed4906ce82dbdabc1337b19cd75f2d0e155f25c5298968489c7eb7b6784352825d371ea4523bb5a66a7f3472aebbbbad2eba7fc522059d816f1
+Entropy.8 = 2a49c5243ab6074e38c7dc087828a6707329c713c61417d499649ce7eed92d52
+Nonce.8 = cc0ab3694d07207989624b08faae8024
+PersonalisationString.8 = 3e5bef2b8d79a14c23a946dec7095e56cf197e1b397beaa310c25dc2e2c875d8
+AdditionalInputA.8 = 63c5cb3fe315fb0756173b9c7abd475c1635048d138c9fca8e8f31c94757cb34
+AdditionalInputB.8 = a32f9bb6c0d74edaa332c70a4d1f081a306a309816a25cc1ae1093651ab4e10a
+Output.8 = 39acda9e511780fdfd83dfeef8660ce20135e6881f559a1d919363616664b44a255a3d7ffefa55fdcda6d090d8dcdeb301b3c888ce7daa9521fd40376fae97390d9f33bd77a008a0f6bd56107e169f588c904d184d5da0775aba42e1683a8a2d30ae89db328ad65ec3c8fc53b06612158f70168934fa552a5a684807765b34df
+Entropy.9 = 834a02c3f2318347302892525aa2aaba338c57388ec7ae180a7b3143eb78c1c1
+Nonce.9 = 00f39e723b85c5466ba5e0b0d151fde6
+PersonalisationString.9 = 1d33ebcc8967e48f72e2cd79e2c6703aca216482aa85224e8bbc8d1bbd88b53e
+AdditionalInputA.9 = dfd430f17d253ccc85bedaf2d11cbeb31f9e8695c7db47c581fdef9fbbfbfbcb
+AdditionalInputB.9 = a8e58de4315d407ce6a6d18421de5d719e53c137ce93bf4223142eeca6c970ec
+Output.9 = 919ea28acc4213f1b2da34d398c0517f5308e82b68bfddf6c762b85298507ba83c38c8c4f06c543a0bc346d0a363691325392feb3fc372ed790918f2d5d5d7d110a775a85d0b722a20eb17786858ebdb0d4c6f2eb754ec7a8892c7c0e2bc3a8d9e0b506e5c7c19465bb9239112ee59c5ae88f0fac046ed4df7d2e67ed4c3e2a0
+Entropy.10 = 2ab17f19b3e8694bc48ae806389a1e7e0e48165215d5e3822eb62436a036f34e
+Nonce.10 = 11292bf1da36f9c1cf4ed1b8812e40a5
+PersonalisationString.10 = 8ca483d392c9e54b2bc6153e37eaa5cb2827dbe12da79f24e8d0c521d87564c4
+AdditionalInputA.10 = b2bcf6d506b7cf753e26301ffe669afb72f822241c3553cfef78d1db2a2f576e
+AdditionalInputB.10 = f9eeb1e416b4fd7a0d9d77d939c74539328d4ce45d1a0f914fdf8de3fa20d3f6
+Output.10 = 45659764dd888148cd38359fc498b7718540dc8861052eabf35e1fd12a744724127feab298f74c697de786212b54e7beadaf3a65ec1557211a0f8540db21899a1b5fa248ec5913f38e72cbf419fd51e136709ff1c95caba7ee165cdfa8d855bc9c8a04ff605f4486e58b9cecf4ce3d0c1f93ccf275da82c0272f14e23b00a483
+Entropy.11 = 0c3eee185623a91b1bacf3985cd8eec3aea43af69c0a13d3157e72770b97cae7
+Nonce.11 = 8120cc51fbbead16c4e2aca7e426cfdd
+PersonalisationString.11 = 4747d849009ef9fc3fe575a59f05d9b5b436eaac9aa1ad47c8c8579feca791a5
+AdditionalInputA.11 = a58f3425dd0550fedee553e7959acfd15bee30085bf82dec19190daff4899d56
+AdditionalInputB.11 = 19c192cc73b0326cd5774219c50ae88e90931875959ce046dff88447affec518
+Output.11 = 5d6a29ca64e883ddd3c71db3b105670495bc6af1c89b5b5ce107bb3d45de616ce1528435d4bf497616db499a1b2d7363048a56930297632ec565ff90b89191c69ae6783d665c3f55ab10da0b8e38460a825573d827d3d3f6126e612e71426311f7324db7612d6cf0b1dc5daee2e69c250ca7d3932cec81291983c7ad979064f1
+Entropy.12 = cf969c2b0fbae5b10d6e8dfb9b7cd7792d979ec02a6ecd7a3438416b160972fc
+Nonce.12 = 96015ec100068defda4ccb6a1be67a2a
+PersonalisationString.12 = 681e4517c2c171ef6403fe6f871c19188dd86d1df8fec5f2f73570f8f5d5dd56
+AdditionalInputA.12 = f9bcb08bb3edbe09e0c49a86586b7f1bf211f44b88507bd0f63fef7736b67586
+AdditionalInputB.12 = b854b478caa8446f9c35f7147bb23ebedd838fa11b3c447e73cd287c717f0dce
+Output.12 = 3c2bfd58d0fcda5224a0e4b97e5eb079946d8645209270e6f1d5996d52b836549bace9ebc1146e29ec9adbbffcb88e7452d917f41d61903754f11a8ab20f2a7d70f56d453765fa47d0a62b82b7b328e45fb3e09db10d6bd3b43a422256b5fd52d32b7debf080bff1e6e69a34ade409822136a6b6ccf05c9c30dc9547a841cbc7
+Entropy.13 = 3ba983ced5b33c894be227e66563e30421784d3a4a5946254fd2fd3d9feb20e8
+Nonce.13 = fc78fd1db8a42289428bcb8f6c9b5d49
+PersonalisationString.13 = ec72929a30306abd19079906afd105127c80c617a354b96f6836e4ba10624ef9
+AdditionalInputA.13 = 21dec4f9790753d65062dede826436a7ec0017a54705272081ae8c587c27d163
+AdditionalInputB.13 = 9d9d8efb6b71d0e23d0b8e57762eef874717c978e581a15cf21921eeb03ea09f
+Output.13 = 9ac57f843b5780b72007eb1ea44036c17226af3f6c35edad00ce2a51464fa565eba0fe16c56a1a3b710f1d2a9ab155438380c74ac056f60d59babbac202baa0b8f11d850ce6884868222fe045c5eab6d346082429743ffd1d2da488cf2930d50eeefea4c1ba755c643e66c33b25fd35a653d264fe767c30cb949141316aab1d9
+Entropy.14 = 6d5b369b8e65241a179177d78fba195841d8b8c1941d3a3a85b83bc0e09a13dd
+Nonce.14 = c40c452fcddccab9af07625c075774f1
+PersonalisationString.14 = 6bdd668cb196eaee5fcff0a2a82b8b82d5d93242a019d272e0f3f3e67addb891
+AdditionalInputA.14 = f8dbd6a405435595b2520bec5026075514955a666e4ca34b7d0339b0a0bc5edf
+AdditionalInputB.14 = d9536bdf1c3944d4d239b6dd13750c16a2780d943d4cb5fbbe418189a7d65432
+Output.14 = b5e12e5082c09fbdda81d1a2229ef9bd46db84e62ecbcd1a2c4e88557f8ed3b5af740fac2bddaaf441b66084ce2239adfc9d02f001cd23470535f13ee6ed73256adf902b359930093ffb293a7c007074582a356529ea3ed9a5ac0a1a3f62df5fe09d27f5a7ac6abdf1fbd5f5e5da70da5e3037fb062d0817b077b56457238108
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = fe9b6c2334c269a392c5ed8a4ff77d06fe922fb7bf9ab4c7352aaf0de6da776d
+Nonce.0 = fb7f12b4df9a75bdb7ed921104199b5d
+Output.0 = ee11a047215073a239e03437b52771b10e694b7631f17e0150dda9a9691ab0a6ad81bfd769ff917a70e236b5bba1ca72619d53adcf842a4b6fe83b3e59b8f8d1a1669c817d2610c24eab7630f6f938c6730cf48d4994e60ad7c53176ca8d08c3f6469ad5f606ebd55c52eb24dff018e1fb9b56cf09142f07caea0f34f5e00b0c
+Entropy.1 = a2db33f32c048711482db06db1e5d3af17ac7426ff1fcb2701900d482bd945c0
+Nonce.1 = b563cbeda321e919668666dc7e162a4a
+Output.1 = c9c222e15590a4f3d82dc165433a0680eda7c23c063e4ed2caa7b86ab780c35a59e5d5225b6eea60b3a704f5ed52f8e350fb2b0bba5307c950496161b3a11df5b0eece7061bc2491ed3be81d4b0e461d8392bda2461e41e0da9d85c6ac7d15f1214b9327596e871a1f3ee556adc6b6d6fe47ba5d2aa6937e4118de8c29220e4e
+Entropy.2 = 88a069a5db6a3313256c23461393abffdbb11d3c5dcdabc7bb78edb39d1dea03
+Nonce.2 = ff6c48c66d2e0357a72dace011d92ec0
+Output.2 = 84d08a17413d1727443b8b72c961fa21c4f093fd657173c733a67f19066ae5d32abdf00e1456206783f4ed23c4f4928371b6faaed5149a0db3adee0ab8ecc47080249d5b3c14d90c47c543a139d372e23b1746774ba1315df9cac29350e46732b2177e59c9e0ab61e6d6b8a71b6f60a65ee9c50a35d76d2e0e434f2a693be919
+Entropy.3 = e3641e0796dc42033faf67f1e1d609c645563e76bf2bec43cc8cdaa9fc41077e
+Nonce.3 = 6f90f968df06e204469e818c9225c148
+Output.3 = ff0a095631436e6a18f333bd44a16a1cd4080d139d4f7b76e4c1542206f32fc337c49269bad2f1151ab653a4e7eb817874de78f9ef9577aac9613dbbbc47bf0f2fc5c897dae6a3d9e7ce17a8c4ed3b2d223888bc40065f99c94d4d45320c6454fe185146be4bdd435eb5a62c65cde2fe11d876a427324d1f2cc4f4e3af528ae0
+Entropy.4 = db7ad0ebf06ee1e9f49a7dddb8f628636816d7ac328a01079e03ccc9219b5b81
+Nonce.4 = 4a44b8905e98a49d430b181ae2c1b6dd
+Output.4 = dfb897020ccba8f056d1f47adaf9b6b888092fd5daf6fc9d10d599c4f970edd825d7c56ede6ce0a3e923dfa157b878da91777727c45d14f226ecb0603a0f0fa977c7c460bb4c5fb1c178df61f9080c9b05b1d8efeb2a54f7a3eccd4ce895a05e4c3c86e431978a1a89b0fc8f9cf26aab4366b0f7ce4f3dd4667b894662f5a265
+Entropy.5 = 92c00ef70eaa84528ace8f35c42618cd71c72e99559e41356a42c91d29160090
+Nonce.5 = b7dacfe6a09f6bb5a588bdc50edf66c9
+Output.5 = c0e06b14db9ebafa978370be67a59ac9075be6c3ff621747397145371ff21e5da05c30e71b6a415b41216e7351a00e00c543c112ce3a8feb1cb8fe9741c6d31ff03870a801c006e4f57d89fe4fd7b493e9778ed6e4673b0adc16d6c47da7b7cee80409cc8574a07f0ad46105e71a5e7dba1bc9f85345d517df8ec53948cce316
+Entropy.6 = 479ddf4478411867824f86b18c159054be3b48f5c655cfa7fe6da514b26bb974
+Nonce.6 = 62547d3daf0ea4647d09d40faf09f5ca
+Output.6 = 8e24fa8cbc3011298eb6fa07445c74522aad747a7d6167b87eb06246b9656f79c1baf974b7d7aea9daac4d2264abf78dd8e5ac1050087da3d9a7a063b7466994519a3a26e4016fcb4a383798174ee81923424e372bd83a00addcb710ac4a2117e84d0502d68ab5d75d904d2e92893f46ccecfd37168fafdec026c88792b2d811
+Entropy.7 = 3f4cb58417d504cd23757e6607dd3a94e716e510617830caa1ca6b1a5e114a73
+Nonce.7 = e6212e3bdc78a7b3f4a610a3bc3919e0
+Output.7 = 59532f9b5d6703ccf9e1acef2cc4c6ddd4de929793bb03155f80d9e11dfa9d031fcf571003bb720b800e2f8fd0ec919c9b6aac84e4f545292cce04024e950c7cdd6b82cf2c91ff96e8486a8876d542a7b5e8c3eaeb8ec35be5014b5d481a821116c1e8d92301f18317b03dbf1334c4e5e24d4b411734f190b1e34b9da22eec02
+Entropy.8 = ce49b19e177d0dc4984611c5b9df1f9349cc10d2a7793b67b57bb95e175d10e0
+Nonce.8 = fe1b91478f1facebf85bf51992b44f0f
+Output.8 = 4e73c6806eb381de46b6c69aa5a35c09780bb426da1a17a95dc47e4704145a28486605d9b8b3cabe7508e1c7b8374ea1ef5004152a992c1d6907c1fd6d869de68dddb79ae2deab7b99eea5064b61fff3cf2d2a5af3298fdfeb56071e054581a370ce09dc78de5790af133fba9bf01a21dd7954c3411244b2230cd85e3f1dc37a
+Entropy.9 = be930d99ed2a925d47b90e89ebf312c9f71a3b1d615ede518c4eb9c1bc93f2ec
+Nonce.9 = cfa1e14da2b436fc3209c9a75e451f10
+Output.9 = 6f31186b46098ef0a750e5942031f3e0d1965d17b2e10f2544bb406e4a3b6e5794f8d06ce020a4384c11bdbdaeb6f62d5dcc98730c7e6158ab72e4bd0210c9ee2b97f2e0542c3ef4d8feea856778465d10382c6655df2c50d0718fc6d952cf5d980d9d2d9cf00a31eab2f0e8661180865590a621dcdedcf9e54d938370bddaf6
+Entropy.10 = 1164a7d7f1b9d9a0598852e85c0f885689f52020035a5e93ac558d1eb85a18cb
+Nonce.10 = d9ebee23642b2c052e342ef82c6eea20
+Output.10 = 51791e3d9825428ebd42c10c3f6dc092ca07d6fceec0e9548640f53e10a2d294d83d05f08d106a66f00bcd5133b11c89ae4c90bf44a31483066e810c177d977ebeafd3c89daf86514f3782ff9249fa61e7d1b1797f8993441beba0cd8509068c25bcff8bae8d9166b344ea33533137a7373b435423d2704a456a22ac8d633dd4
+Entropy.11 = e1d85c9e21dd1309460b37a5e284f38bd64b2a7adc8cb1291ad4c31d44e57f20
+Nonce.11 = aca3b5b40fdea71cb2fa83f46ebbbf1e
+Output.11 = 5986bc351e62f8c5f3e7a8a74b264090b0238697c30667031caa494417205d464e46b8793b9b312c28c69827cff253342af64ac21567e17a42c9ab4dbd556449359f9dc3eb7e552a1d90f93b8df61d1896bcc8600085505b10a37e94316567df57bc32f484deb52a3962bdcce0344deecf7b828564e2cf3a24f5b8f346fabdac
+Entropy.12 = c400074480f73ca5f473ccd30955ab8f171b7e0ad44058143065ad787c50bee2
+Nonce.12 = 421d249079f8dae96629250123934c35
+Output.12 = e540caa7a63383c62625735b8fbacf538b97040b69f141154950e144ee15530f0888dde3892901a7478617ab66e80dd4f40707bc5bf91fc68fec2186ec6ef34dd4c545966fcdcd1d52506f3c6024d34d788ee72270905c3378719c0ae37e49cf3956fc3a8e88fce4e9d75222d6ee980eb4af921cb7d9d484be2e74bcf168e3df
+Entropy.13 = 65ed3ceadd308e43a496770ac71904e24f8024466d9fc2c6d754b72149a93d7f
+Nonce.13 = 64da0dd9275d2386c96e144ebff60ac1
+Output.13 = 098ecac859110d81b02268ed8598a006d440f8897116cc336014f5bd5a02d2eb7e0d2837c1f6fb8512c1ec2daa83c7069586f87bb620ff11c19b6d4a731130b1927c9df11cf1bcabf53450667513b68e8b7c479dc689822cde4596d59b8b081cdb4e971f46d4be88f6bed69d4a2ac6c6c3a7a790acb807115dab459d69423e90
+Entropy.14 = d233eed6e4a43436e4418ac071bf9ec00d463d0568cfaf7b4174f96c1f6b8564
+Nonce.14 = ea8e646e88f7fd6c8e590155df15558d
+Output.14 = 314dca793ee1eb0dbe48bedc324b557966ac7a17b900bc4167ab4b65fe6b34ae625c200c4e21428ed258fe28b99c31cc4e8f9eb93a793c3e33fb0b75a2595a3201d939dddfa27911ad6f731894e16692343f25de291da89570a257a95cccb42f7d9820afa9b35d16664f95a2099ac929683b7480a4d1e34291853047ced3302a
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 783d38088bea13d5fb00f7932f080122efb375969120d48341f3ca84f01ce2c9
+Nonce.0 = 3c4740f91f3a31c9c7727647cd6fd009
+AdditionalInputA.0 = 2ef7e40e41921181f5b59374b1f63700cfcfd04e35e0485d3be0a0e6fa7aef3b
+AdditionalInputB.0 = 05d755ae5b808bfc914f011df54d56023069927794560f9420231aa7ee525a46
+Output.0 = b4e5d453b3902989b088e7293f8c893d0a91cb5ff1bef1bb9c467193db6f2340627a15d3f6c1e1ce4f280ed184328d0e2bd97c147d8199222a031cac6e7ecbb5042d049530851724e6491e292d59fd5ba5544ea76c437a2d74241de9586ab1cfa12237c3f798baf204f82c6439fa2b2aa29b641581199dd2d7da85867c757eb1
+Entropy.1 = aed1522484b9a61eb9ba89a869076425db705cb6d1875a6b0e70eae6bd8e2917
+Nonce.1 = bae941b5451668cd62e101ccfec0c2fc
+AdditionalInputA.1 = b85151916205df5e673788c21fef42b9d29dcb46e1836c3dc04a8df66a3583c6
+AdditionalInputB.1 = aeb9e301b8d98f6a1810c20d8a9e40256a6b630af252345e9bdf27ac9a5d2b6b
+Output.1 = 87db11298f748238e3af3782e4803bdc543e0796c954ac2517d0e9ec030d2f1e08e0f1f6c202038081bef42ac6394b8f33445e19d502eb4fdc986b6f88514000d73e4d2cee64432535e90d8b58abd1dfd07585aa8e9b70142417ad9cf92ae3dd9f5db57b5bb05e92b0cd5c3c7c487b81d0df29c67d4893eac3bc55078879f9c2
+Entropy.2 = 5d309e423ced3983e5f8a4c6e83e5361eb86de1eebe525e429e9d78a670b225e
+Nonce.2 = 69de69519a248dacef84e6d405157e20
+AdditionalInputA.2 = 2f48be38169fe63c7635781b914d4f53fcec11294aab76be590141ecfac45af0
+AdditionalInputB.2 = 3111df83df1d5c1d4788b56817d650a6df23215c01235924ec4e4f1407261ebf
+Output.2 = 97adfa7bf97c65fd2f386e733d15d7bf840caad0be70def089300f5dacb131da058c5602722ad87c72fcb5427636bd43e5a88ad4d81b2781d59fc7faf02852016aa18a3b6bb5a126d8e20d9602c2d2379dcd46301aeed775b16e9381b916e3edeb812f54ae32a7242f0d93f23a3f6d19ac41ec4d6d90308d4944e1b0576d1cc3
+Entropy.3 = d48e8339bd48cc2568b9ef7d8e5666e3b2ba78ff19cd527553c015826fa62fec
+Nonce.3 = 6c0215f1dde19d420db4f0b01d423e7e
+AdditionalInputA.3 = 33f2d1aa07d9ec12ff67d48b1d1879a781f7e35397e92f6e3d71ed8728bc6e20
+AdditionalInputB.3 = 1a5611bd7d3a82cdba3314b579dcf6eff263445b43f029a8e0455ede1123d1c4
+Output.3 = aea125feedac1ce47b12840ce75bc6aeef363974d2603215f5796da81c10a0790a5aad8e12ef6718fbebcde9ef873bd87e6be79dd2d06b680ac6e8769727d139899bf79125d7c05badd292f006e67e6c66659fd4c89d0653fe3a0be1bf44c669f14625cdeae4e0a90ebd66fcaff6770bd3ef6dab5b687cf7055e5a7eed9e5cfc
+Entropy.4 = a3eb4626907eaea77b226c7a3c8825a97b313e355a7256675b8c9385052b6833
+Nonce.4 = d6b1e18dddf67c0cb5ae18b251dbe5e5
+AdditionalInputA.4 = ef38e6236a32bcf91ac17261c249121e8d7c3927dcb2c61c850737203a232f05
+AdditionalInputB.4 = b0454ef0678f0b1eeae19e7bd5045ef3db8cf0a7bb2d07ea8e124280143263e2
+Output.4 = 20d3853f5aa17c01556a88375ce7aeeec8c7a9f814d7f8d2e5ef254566b50664266fc881f66604135f45b0e11e64a5c74e928070199c934ddb48c958f02f3564303e1967a105d2917d557a29e4cc5ad126a636eb0a8b9a1e6042868cb2fa7d5e25736e3a9695f360df187f5a978d65e4dc9923613407974736f2b588e0eb14ef
+Entropy.5 = 6f666c5310e663e3333839c4e729f5743001d60fa00bee56623d55961a9aa93a
+Nonce.5 = 8f9f4fc35d5287870e7779c13abe3589
+AdditionalInputA.5 = 0649094b12ab7fb9a655931d345d027ccdabc83bb12969a11741ee45b2601713
+AdditionalInputB.5 = 4e636ab709cdec760b71aa06d5ff3e3a022c5097f4bacc31b12a42f2432eaea9
+Output.5 = 85cda86d1a3ed9d5082f3ad8dd789d047573d9925671c51c5ec868eeb953ed41be7054a778c5f2cd291c92eff0ab21cb007f9718eb4c6bef0ab530bcc1b2cb37a382c5b35829bcc8a787becff7e2cc31858832fc11269be755fa7909fb4251e5f416ef66b1a1d71ba8f3598766c43a62d47b8d7ef9fa732a1e4b93c926bbf691
+Entropy.6 = 7203720a23aeb4482ee71a1633fa9ff9140688c1586ad7637c3e2caf0127b946
+Nonce.6 = e9f05a76fbb3e42066da664cfe33d4ba
+AdditionalInputA.6 = d1d2b1c97df772b47496b74b802f4c47156e5fe50bf1433a14b7189bafe710c0
+AdditionalInputB.6 = beae72874e153cd6a72551aa514d95e2b54d89153c3e081a35f406bc5d34392f
+Output.6 = 890be3e12cc5aab8589f899f03692fd535dc26f34516134e11455b4d597cecd431093e7fb85549e0127239bd0fce5155a865c3b9d49599a0b27b12e9fde52f3066f91f1acdf5ccc07779aeecc14d211361abbca17f56836a1620d667b56c6325f559061ac012d1b9ec87fe1b214002dd9cd1acdd9e1e67b199399b760bf51f7c
+Entropy.7 = a9349c52dbf93e9e609bc71d8a29f1d9704058f77ce7627615c9c40401476cc1
+Nonce.7 = ba5c5a60142207c185d0175025f2ad6a
+AdditionalInputA.7 = 3ff140bcf67b06088d2ecb0bb88a61ac76d72a5c13ddb3ef401cded5a38c0bef
+AdditionalInputB.7 = 7e741429d99ef21a3e1e0919df00162fa7997a4063295bf5f642c66ff4a76363
+Output.7 = 2e934ef0dc4b908873a949c06896ac8bf1c813385b656a231869b72a64cb584a1bb8d099a4597fffe7c785ef1b09dafa241999e4872cdd52c9ad9f873983542d3818ea4c814bc573a85692a85b2b83cf792c107283dda3c4ea101126c18fb793e6e49bd815cb09d6f7e4476e228527cd1e22d648b0b12f6f8bc091ed66fa23d8
+Entropy.8 = 76a4d7cda9080e60ab18d27190dcd2798ed296eefdab08df86939c871cfdb50b
+Nonce.8 = 0cca14fc2087db3e6e0a46c284f1d54b
+AdditionalInputA.8 = f27bc089eea7d846d1acb366fdec558aab55ebe43d10d433b984255a5ed3ed99
+AdditionalInputB.8 = c921a2ee2a2f5de5cae14af999f05a555cb7f55510fa8979da4e9ba3abecaabe
+Output.8 = 716fb437eae91cb3612ca0bba13b3732c7adddb8c4d2848c74402dcd269c6de9f47d79b9f5f63f575c7f1b4f977ed6aa88bd6887d2a0b1506776477966005530215b8f950e78644fe358de470b068c79f81b727f904cadf0c8fde32d8272e926f267fa3ffba382e138bc28de8af44dce73de1da2416ce34e093ee444de665c68
+Entropy.9 = ab1c7ea60f3c733f14202c475b13fa3ecc35c63005216bd7b86b35b94c7465fa
+Nonce.9 = 049e065b7e3807c78bfbbcdcae44a137
+AdditionalInputA.9 = a406b44eef5c8c17ecdc974a36a02f905dea1fb822b2ca3ea0b33d921c6b20c1
+AdditionalInputB.9 = ccb5cec46a1c21c4f00b8338e613dbd898a1525bfc2c9fa3ec8b0394641aa1b5
+Output.9 = b5b3827489a5dc42516ff3766219dbd0649440c26eb43514b9946b1dadfcedd0d036fec817d118d9f6c4bdbcb03ead58d4fdd03083fba73c22b9e63976c80af8843e1acc0d47acab0c1ac3db1cbccbd52c348bdc05b778077d420f4c78d5da0c17cfcacc19f230a4959ab17e62bafd0c9beaaa165d31d7e63921d62fe06a440a
+Entropy.10 = 56ce0e8ba80a3ff6ac671218ac0bfc75446cb8cef98c8cc4de7ab26eb9d2030a
+Nonce.10 = 468c6f2ba47bfe0a436b8eaa8c0c6890
+AdditionalInputA.10 = 19501813b5cb87e00c83abfd757f5c114b8e0a824b2870427998be60f1199c0a
+AdditionalInputB.10 = 93fd0a3dc61667da87ff2cd9461581d6e53f1ea9bec08655086a5c59032775a4
+Output.10 = a4326344b98e7c21251be7ff8b135c7bfbf07f9f8aa3e396083393758c1508f097302bcc9399c4345f60b00a59810943fd80bb48587c5670bf31ead86d61f887c823df22712150989b4f77711ef87eb77ac07c954530fb26fb4cee7f29ed568178ab9e4434632d1a3a413bf9bdae3113c8a6fa7735f3a0979c2ce519db86d2da
+Entropy.11 = 91d26f97b9a6508ce6a1fc560f3859feddda28ad0c7e87c68abc591fa7509e5b
+Nonce.11 = 4bf0bde6ebcacce81bf1a954f28efd0a
+AdditionalInputA.11 = 038bd3ad2a540ef953d47bda6a5820c675a9fdee1670669978a3146456665de2
+AdditionalInputB.11 = 88f5b4bf52baf5f2fe080fdf8ea81bc61e2132aef838c9071e3d8867fe091dbc
+Output.11 = d489aaf46770dccc15d3eb5fe33862123187834237e8e1d501fbbf522b3099c126e3e82f2e3e28a53bf875bbcbb513118ebdfcb1849071851eefd9f69ee8cd7189ef00c658c331982fa4c06c566d68cab5ea319ba76e4c6a4b1980540fa5d48a8a33d6ebafcb9a90b535a3f7004063c72a80b41a4b3ce5743c31b8e693924eaa
+Entropy.12 = c87ab152f9e99cdab94128af0b2928f39107bedeabdde440b8b9c35db5feb0ea
+Nonce.12 = ae03c4540f7a79b2401ada85f349da4e
+AdditionalInputA.12 = b50e97d3140c5f7c063bef299d1d3413bb942b2a24899b0dc107dd21a8cdc35e
+AdditionalInputB.12 = e52de32ea77a8e6997059168eb68d190d446c50fa474f6c60c8a5932aa11cfd3
+Output.12 = 392e03804036661a19abb817929b5694a62ce374fb60c7386d2eb4f0fef12d7ded067aa64a37a68d26f83de1ee1538523ee7d8695eb6ba981566d45bfeff190267a15cebfba946310239cc3698106645e3177266c6fe958982565784d3efc525ff3fda181c5beacdd2c4f860b8d2aeb6e26f607c3e1bae26dee903bf9603dfcc
+Entropy.13 = 5c2bbc1c51f2dc7cff083fa66f0dff2d468ce4631fc4b23d6f38b1626f003d59
+Nonce.13 = 02a0b85d32594f92babd47c9cb8a0ada
+AdditionalInputA.13 = 9438c45f4ca0ee225e5f906498413f9132c79582f98588aadedeec5bfb3c56ed
+AdditionalInputB.13 = 499fe637731f16583408671261e084c8c019645cd3ae13ff04ff4e12e40d54cc
+Output.13 = 69bf2bf1770c1ccaed0c69ddd31f76d886e2d97a4d723d9fafa3c722132de53d3d0a4d2ea2d95b0d3a9e1273e0c6a4a672cfed4d882f4cb18e1d188fb3ac193ada51267e3b133e675c056279f12181ee646416fbc8f90ea6ba8c728fb5ef0fea18745e497513707d99400a8442153fee22a7d6a42f9c465860515d0633ef6b6e
+Entropy.14 = 33924b2ecd2d81b1150ef4e133589d09a2ac7231a69f4641c153d7252396646e
+Nonce.14 = 1a365d0d40721a88a32a7d81a2bf8906
+AdditionalInputA.14 = 46cc09705223bd3c01fa037d9a19dd2465bc612f519e51d33fbc845742d29062
+AdditionalInputB.14 = a9f78f79d034d46086bbe5c8883dc2a34a1a17414aad2c767a3b3f23dfc9b637
+Output.14 = 2674afd329d03ad3b1bb8157c3100a312e29bd72b55139c408afe7f2c9e6d53df2cb8b829b7351a80cca8f0b59d60f6454ba60b154f654a09aa82a63fb28ceab9435cb6022934a0599a4c3a005bccdaa8bdaf8246ca654692a6c038cc82fea477fabdf3d6a0975e952ce3feb7fe8c4510b8c5347b21da5431cfee69e9dd2d8c4
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = 9fdfdf86578c372fb12f4a9bcd04684d97f2c0cab75a4ceb7397140a936455e6
+Nonce.0 = e389044699da28eb6daedbd8043054f5
+PersonalisationString.0 = a085ec7ba7eb41f226d265dadf847cc6580912c88e0c3d070ae2612c198caf4c
+Output.0 = aec18c76acb66a216d82b899b3a37e6ea9d7f4026e23b7412be1d911237deb73b1e786fe1f3b2466a4a779f5254ddf63b6d67aa10fe90f269ecc652ddc54a0208d26cb0ba690ccb99fdb82fc58862d59df81e53c70581d5e9f44d030f08ea7a6a5634db45a6eecef32b5b385792bc86d8c5c3f6de3f440e2db59b6c3e4c11137
+Entropy.1 = 1ccb5d261c074fc9b3ed6eb695e2fceba19c6e93464e00300a7aa919c5717c07
+Nonce.1 = 5a129b9a9cd9d4cfaaf25ebbaf8da3cf
+PersonalisationString.1 = cef872a687d7d2650aad3c493bddeaefd28bc92678380e6dd4df71fe7a087ffb
+Output.1 = 57e8d94c5c508432992c35f0228566ffd0ccaec647f1e090e45b6be57b4c72d87d150e18e6769c1381f092e2c8fa6068611d1b673951b7617a7a6758ad6b4d75191c088f18e25373d34d40b1c27016e642ab3ab393fd25f36935d9f665f03878883ff08aebbc4664fce81d2db609357b6eea4c9536c711f95fcf7b02aac0da25
+Entropy.2 = 4c03c532d19fbce23d4a0b04fd1bf6ec33fa12d1984cb2af2e0c3774b2435dcf
+Nonce.2 = 6e83bd488d911bcfe0ec66aa357808e9
+PersonalisationString.2 = 301bc9cca2d1752e2bfe0c688aa201f2873ea05f9c5c0c304d40583c090b6210
+Output.2 = aa0a5817c0a23543ce6fc5f2bfbff12696a02c162f21a987404d1e2766a6126e138e6b2a96ab0ac1920f9bfb53f8c8e85520760897f0039adb1a1c16747e37a9f422d01afa63ceb328659f1c754ae364bce90979dc825d81c147775ce1e48057d1837718fc3253df2381d063c879848c6f6e052aaf13a99ab3f320853b091a42
+Entropy.3 = 00b1524d7d8e35c40b64059769730ef3dcbfe07932d6b11a615c9181f168a64d
+Nonce.3 = 2d4a3c33f08ffd39204a72e9ea7bc101
+PersonalisationString.3 = 0cf08ec2cd3bcd8657dc1ec4834076a566179b33f6ba3db637f0d59a315f9448
+Output.3 = 316c5431b53ff132a99e98665743f54c095ee43bbe741f0cf5210cbbec5de543744a5c9307106d20e5c3b12e49cec9512276aa3f3837a7b5be89b9b0324837726bd055e3b202188e8231cf4d2aa94b2bad23fdf97e2eb346ac1b5dfb1d78c21284396e246e172558d03f43529e4dda6cf36b0600d44d3de1f8def14333f066d2
+Entropy.4 = cd3d56688cf437c7999b168573921d954eb462eca6614666c89548a95ef9e930
+Nonce.4 = ba94b86d13b201a4df30797fd11c4b4a
+PersonalisationString.4 = f4e5752b543c1f24711f2c7bb975c2efde94490ee0740ffb3460e3f08d866acd
+Output.4 = 99bdff22f33c0ff01a419bf009dae223aa969ed6cc0b5f3942d2b138c989de793c060f9a08b5e0b91fba1b35ca8c5ca17a5f56d0eb8637fa691e3bc0e83e8eaa3ed682a82a8d1fc94357e236842455fa015a37bc5c689973caa5f22160373ed9abe7fb9346fcf55240cd5431938413bcdb376ca9fed0bf7adecaffa8059f98b4
+Entropy.5 = 80f85752aad0dfd7a44993e0d7fea2a5a55472e9678f0f9075d6ec17cbbd913d
+Nonce.5 = e1d8c1d83d7e175f7b73370282a504ad
+PersonalisationString.5 = c03ff07c165571fb5c0abe1fc853c276eba511201854111642d54c5d5b323400
+Output.5 = b340bbd7cee2749b30395d1bd1fb73e822f3d313fd0ff052ac38175093b0a783f773a26e8d15ba17f0ede833d15ae1ff1e5f5f47df9b749e3009becfaa1af482c67cf1a1fb3b199d5ea85ccd2ee617a909395c45b4b2dd0d414800690176a574f25b92085b6dc6b55a9207e086cbdaa09a6c2006d30cd09150fe9b341c75bfa7
+Entropy.6 = 944099bfdab971828aa58667801a65c4ca9fd85f76fc948d775ddf7e07c0b410
+Nonce.6 = 9a019a09ac7cd8075233781a3cb10e9a
+PersonalisationString.6 = 3d5069db480166847db296cad105c3ecccd9d4d0257d29b2258a1d97d4d2b50b
+Output.6 = d45a2c1a254fcfa5cb869f07167f6089613e70c3e1c4221cac011941e395801b0ef92acbe0c6dd4625b5b545475360d54974fef96308c66962c3fb63b26491112f7df4272f0fe1a858942d4077608f75ba37d268137169d74b9d42985b52b260599137128d6a92344691cd3a87e02df19c1d4b9230e6e61a8f554e615b0d3f5a
+Entropy.7 = c90d15bbc18763f30764f3f8da44319a5d0b705304f5f3d8aed090fadf356be2
+Nonce.7 = 6f145afbcf79452eda4c55284dab6487
+PersonalisationString.7 = b197f0bbe7108ae12066ad85aba7c16bbd5e4ba982bae27feb5053c6b2763183
+Output.7 = e6a52d64c90906fa5a632897bd43da3592ce4263f3eea522abb2cecfaa230ab0bf086899e91034b8825d6948d4873893616ada207b78bdb7b2f3d85e0c2417619107008279b6d0c8d22031cad5054629fa21683b38e687a3c8fb9e4e75d424ea96bdbcd58c2338fa11075d8d7394de88b9c56fcb6f7890314faef791fa4b3472
+Entropy.8 = a248d90f95bad902bfa6978aaeef35ac6b0c394783fa5f2f69d60f9c6985edb5
+Nonce.8 = 0fbe4f5ac6ce7210bbeb767e85a5aa7f
+PersonalisationString.8 = 9792b45a2589f9eee5dcc47c9ff69ed1b1144fe28f55b721229d1afe2341c55f
+Output.8 = 63877670656b316cc80936783c85c6aab613c66c7363f6cd34e217d6358f08479617c17c95ee572bfe60968ebb0d027e4080e32486827603b1c62f3df1c6643dc8f66aba05681254e87a34543acbf059888c910580b370e5f7e741bbbb1ce0160585d6c78cc880ef6b0418df90a99be046ee77ab83aa7d3c29d540747bf1174f
+Entropy.9 = 8eb3bc188fda796926a3fa760ace26be81665b71b4a6bf8c474286af5bf5619f
+Nonce.9 = 3d1e8fa6193bd09217785c4e43ae03bd
+PersonalisationString.9 = d6eec95d0756662ea762c57edca973393d583f6c78e8c0b4188a6154c254c067
+Output.9 = a0b24e9c22062dc09fe4043719f2c236091fb17cc4393616828596a5d1f317ac381967a3f6484f712cdff45a884f2b1abd68991b77c081c714e3fb703e3645dcc04f297d4d53345a59786d5b53025703d7892b93ad1be3419fdf7482d651ea9c31daa3932e548179f1ed6829e9a122f4eb2fb58a91b0d8a14d9a5881b7f20cce
+Entropy.10 = 3dc0860de27fdeb10d93dab4a29e1512a9be16800e2119128fed67d49962d970
+Nonce.10 = a936b72f8ead41cf0a64d4aecfaf6881
+PersonalisationString.10 = 074143740c4c610701eedc3256868ddcead24cb6c43a7230f6c7e5cf864dc927
+Output.10 = a0793dfa61790fa40425edbdaf34aa2af679d0bbc0db95a29f9cf3d908269671f2fc79a3273b6605a7bd2be4d14e5e6f9c5277692872e07a89716b44371f1d2d58acceab7fa3dcd35480a6d8e60915110f03f1b0b1c1dce4b7fda9314cf5cd950a9f27744100936404850fdbafa674f11a0dc173630f7b15b247d702b6670858
+Entropy.11 = 0af7649298924c7b03b0b0630671ee0c5bf099f18363e42d9fc2532e250967f8
+Nonce.11 = 75927ba5576ebd2b96d3edca5137f2f7
+PersonalisationString.11 = a583fa1d0acc9d41ed708bf33a746b830d5429a9a887568dd33d5ff7b9cefa4a
+Output.11 = 43fd478d2eeb146bb9263e3bfac7e48354375917dd9b65e4163d3a3702799fd44d76b6fb3b4e898d44448862a2e5c0738c6708685673748283ede5109a47025689f812132bf927fd66998dddbc52015a1234807d98ce161fee0f4ee49ed687eea1427c63f48ae41c03e87d882066afce08b568adba56eaf3fd9de0828fed780e
+Entropy.12 = 5807ffde10a973247349fc5d30c31d1b65fe6e83fc3fab4d518a92541e370b25
+Nonce.12 = 2802a5b3bb5418e5ab8853f09138e1eb
+PersonalisationString.12 = 05d48f94ea51e6ce46294b63639286c8234de5536b9af08e6ea759ca006a4331
+Output.12 = 35f578ea52643e3b550fad130e1abf2b2b4bb2d1c7a67b0beaf8a2db46e56548fb4ed534e3be97fb5a08f95bc0304b9625fe9598cf2256f337cd4f51769841f7fc7e00ff85e0137dd2315853eabe82c284a2daf79feb5e34ac7ea56183c4a59d8f981f15c8483be3fdf1e5b0308f330d86b0df36a36a0f46a6b4ecbb15ec7eb1
+Entropy.13 = 58a27ebb2f5f18ee96b2618939b3a321d6d1999b1ba982bf6a982b8a3f89c150
+Nonce.13 = 0af1ede5632a415b59d48d17aaa8e8da
+PersonalisationString.13 = 6fe5d697a91b5a8b7d85ee5184e454b327ec1c31705630f905b52616109523b5
+Output.13 = 387182355689879c431524dc669735876d1216ebf7b9d854a6d140e4abee55927413f68de690502563d3c87cf3697177d208e9b4085fa0c55e865cd29f8719bcdbe243185c71c944c7dd6f1852f96368df20f64d5a5a1f7786e56c167f270301087eaf5ddc09aba8447ea5740cf0446994a5b9ce64690cdea63594da144bc76e
+Entropy.14 = 154ca210ca3b1b04e1145760dada6e2f19b8047344de87bfc0655ce8c82ddb64
+Nonce.14 = 4788964160bb81d6f6c2675008b05410
+PersonalisationString.14 = c56e284ac65798010eb7bd39ffdf49bc25fc2e663e90ff93f73c97e65ea82935
+Output.14 = 683493fb3c6ba0ae0c42009beb39fc37a9d235fb3fa00648ce4d60b4d6bdecdbaa1e2ca0c0fc80c53f6f8ceab31c3c42764b8f23c4cda91743be33e0a77fe5a4297701bdec6b2a5712e76c64bb8b7e03a257c140cd8aafef046b049303679a7904f029444d92d673107bdbf769fc1130429ff64b527b0ce2420e2c70e8998ee8
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 0
+GenerateBits = 1024
+Entropy.0 = e35c9f8a3d5dbf95c4d595ddd50deceb49a9a1b86598b91155421600c2c4df6e
+Nonce.0 = 823e1dff3d501dff696840d0c1b9484a
+PersonalisationString.0 = c63766604d42a81f8c0cd16824cdbfa490e9117f9ed009d2aa31f2185cdc20fd
+AdditionalInputA.0 = 611b5b182cc623e272d490bb01c558b54ed22b6ccbad227a10dd3e8f767ebcde
+AdditionalInputB.0 = 21e458575bdc9f7584f2fa646f844c8a0711ba61958c549ffe6a8148d3ee3543
+Output.0 = e687b2f27f521cf17d7309326ac6a93504999fd4cab5506e1188d258eaae87a68442f6213a208db5d0608f3ddfe299b3c36bfe5a4d2491b77540485fd294da8b65a52bf0cb9373e3ab422c8f440c8bf2ae42fc150999f3c5201bc38da026ac232790c209cc0c9c7c0dfe9cd178ed8c859d037397fe2ac8797c0e480639ccdc6f
+Entropy.1 = 5b0767a6230f8f13996fdb7253cf6f578020bcebe72c589b8e804e9a99018540
+Nonce.1 = a4be44df4a8bfc228bff33faa813e36c
+PersonalisationString.1 = 997e3edd016c6feb410e2368bb6b62b50f77925d5f73a6c60c7055fc211f57b1
+AdditionalInputA.1 = 09229165e410249150760d2d448f3343cffcf969034e6213748d26fb9c3fa35e
+AdditionalInputB.1 = 509bd449fb971f0eca5a2e9b2876b437dae9828b28060122fee83c03a7a83137
+Output.1 = bc367409f04b8f405099a13d409761fc6956a9ddd077478d720e544bd6b42ca9e8057f35c66109d441c6d5bc6ad36941ddbf35c860850eae89508a712296bb0dd138fcd8d49a4c52eda996d2a0d8a41be12f8f5bc0d350c507f15346798fb7841efe21decc4383d63131b6d263bb26c11c9dbe3f0782ab5cade509bc34cde313
+Entropy.2 = edb07acfec1e919cfeb0044043d386011a80ac7c46f763ce72f1fa8204699f8a
+Nonce.2 = 99c46730998ed332c0890ecb754f6687
+PersonalisationString.2 = 54ecc0f9857e1cfb9f18736dd8df8212a51379ef831fdc3cf301bbf552b01628
+AdditionalInputA.2 = 7fd99b2bfeaf6fc14fdcadc6f089712e182065e268c4d8b418fbe1f10111ddcc
+AdditionalInputB.2 = bd901c32a57ebeaa169f122966fee5d82f798587330cc94aa78a632da7ab0cd8
+Output.2 = b4f0209f5da8b8d4acc614e1a17a75c191c56ee6c3c306defa4b2e581d4c507cd8768a500ce51ed8a1e70bcfe840f58c21570fbb4d3df0fa01ab8d67535271de8152281ce1c7c94a26d18c743dd59408a67149666139a3204e3d3da3da3a0fba5cfc137062ce31a0a1caeeb5d91c05ad0bd6703aa17510e6933353afaed836ed
+Entropy.3 = b9252e25573d8f0b91ef7bae9c7f16ec35ce426b71217cd3a5270f6fc2e4ea6e
+Nonce.3 = f55d33fbeb961e5e7440402006851242
+PersonalisationString.3 = 1c5e934f491cf43b092bd002c608c405dbd26130e6f6b4d8fe4bbd9b5352aa8e
+AdditionalInputA.3 = 093656e387f61f578c513768020b27f93ca6fd48d8b8049ce3d0d2119b849d30
+AdditionalInputB.3 = 909a375e400709eac94720aa3f43aea6f3b470a2ee68e58bbdea8543c0b66d79
+Output.3 = 20225fe9e8d0c22f983bab57c9ebe3982c867705181198850ab24478b9f2a0fcc425faa9905a5ff3a10b3263f1b1af5695f4c5643ffc2fdd4f74f128e3ff5553eee3409cd321fdafb7ef39f9c091c8341d7e08ba97d404359fc17a509aeed05ae66ee6c80d09c18b48929e708566cecf650299a5a825cb1bfa372643a5b51c2f
+Entropy.4 = 3d29044953e0e5687e4e44d386ee0eaf98c67861dfebadc473171d265f28fef7
+Nonce.4 = a5db488a937139496758f433ab7c20a5
+PersonalisationString.4 = aba27161b624cafa071a7cc9634536885487cf1178cb51bfc8815e11cddf7ff9
+AdditionalInputA.4 = 5fb2ffd19e47fa378b461bbacae7a090a080cc1491c3c8dba09b09ad6f027724
+AdditionalInputB.4 = 3272f17115034cdd60e707512084966569488fe6ff658b7a79b7cebfb971ef70
+Output.4 = a9700b134d7759a4fb4a7f5e28c3077c5ff92f334a7c65099ceb5c3b3bfed5af2a9a1ea63c91abaef05f458452b11922789541ed97e71a0c57102a4b15c57d55722ea8d1bf38c04e23470bf95fb66143958128ef096d68109bc552cd894b04582cd3bd5984879c17d8a45401897700ee3ea3d1cc305832ec5a6f8ae4fa9bdd49
+Entropy.5 = 2ee961272a90535beff20400fb4bad1d1bff0a85749de0df1c370aa8ab44a0ac
+Nonce.5 = ccf78b9a848f240f3de40d5e7320a8a0
+PersonalisationString.5 = 1b7bdf3e53a0620d306079715305c48c3252a09fd76c2012d5a07c42d4ccc1a3
+AdditionalInputA.5 = 5a4869ba152770146fe7f5714439df83a8e347f8fe2124a3d0fe4dcd0fb9ace3
+AdditionalInputB.5 = 273a1a9642812a5a44f905909b56e881cf62c33713a1f625ab76f1327c6415d6
+Output.5 = 35ab999309c07b3f5d39a8633fabd707842952b38c095ee9607b7e29be7c186f88fdd702ea8205e88f659007fdb8ac55edbf1f25097cbb1e9a014e52a5031b52a77fffe0d3987c3ccb6f2ece0d246730b0476c54cf721e2d8b0a5f2c6cc28ed098dc73b88a5dde35bdb406cba2915fcec77c7d7a5fea2e12bdde6c5bca900790
+Entropy.6 = db04fb0542e724cb01cbd0153e54d29ea3f80775e3267461eb879ff249b6981e
+Nonce.6 = be45ff7d61dba96af72261e4f9f6030b
+PersonalisationString.6 = 52e6c18d1a1674c3550ecb6dde927da4478303025fa0addaed92b8cf7258e2e1
+AdditionalInputA.6 = e089344a40c526e3c0dec9a545c181b8fbb2b9cc404f6e2f711dff6bc84c5551
+AdditionalInputB.6 = 9be23fd1c693e891b8d5750928981ef60637f4196053f950db62cff359536183
+Output.6 = 9aa538c87b993a337d04db7514597d284b28d778da180fb6a446191c6267f0e5638628b513f3c7588cd37053473bf140eaf6b40345c295646f27eae4275f04e6ef48c8c07b3cb7196ef851b1a3537cb82a42f9221972abb5dd1bdd4d4a7ff928833e268ab9c54cc1abdff293ca11c739a9d3e1dff505e76796f9425b9dac368d
+Entropy.7 = 4fa53dc32771e9e4cf4dab428916248eb2a89c9ac8854c3e6bd6c24efe0a27a0
+Nonce.7 = d8ffa17ce4c064d7b6b3cc72acba9096
+PersonalisationString.7 = eaea15cbf5ac45cdd642e9b2b883e0a141f46f575e06a60776b9254e9b3e76f6
+AdditionalInputA.7 = b5a89821feebfaeec5b1fec3838b9800d1e4c7c0862eab0f1b3afffa7ef2ebd5
+AdditionalInputB.7 = 35909c49a8c481f4f7cf0c7088f598999914a1ea3d7a09553357d840acfb9d66
+Output.7 = 79952617adcf1666dd4c854b887e5a6cf2764962ec2411d112e6c94b193b074de1dfb2b81f9663eba5915fafdd2e2fd6228c268bd68eb69a0bfe80ef8af4bb9da1674dd2809f36805980171986a15febff3e939bcdc14b639576434986a1d62cde79e8fc237876dc3416db7e8e31449be5bbdf229b0d07f1a6d4ad99013c7350
+Entropy.8 = edc50725c8b85f084e3d416e9bd96725fbcea48f334e77707ed23f760493dbb7
+Nonce.8 = 21a09eeaeff63484d2e00a1f4c0d38f3
+PersonalisationString.8 = 0df0520d118fcf5df1ec32078dca162d27458bf61c4f0bac941b00d217da274e
+AdditionalInputA.8 = 16c1241085b00c21a1c14a6bf10378e0a104bd7a69bc2458ad518d3adbab68c0
+AdditionalInputB.8 = ecf638c63be2dd4c2645a86fc17699266eceaa81c2fc88305ff0c303c89b9d26
+Output.8 = 3abfe7578be0192648fb7122f71ad8383541cd33aa39a6f54492d0185c2cd914c189ce1f4aa859492b883fe0217c3579c54abb2f740a0bd96616b507622bdbac6717cce451d991f11faaa8c60d374604b87888be850583caa004ea899cea43126ba04075872defe74cac58e4af24976d1037f1d998c6c6feb8ec030bb5643884
+Entropy.9 = decc16dc3f674f25805726f174795e5192e6ce4d94f4da4226dadd46ac53abb8
+Nonce.9 = 343723fa8498695d329daac4a0f57ae5
+PersonalisationString.9 = cff8b23e11e6fac576f4571b75ee8b7258a2f2aa9a666e139a6f400c2d4fde2f
+AdditionalInputA.9 = a7f5bd0fdafadd4c55f69c8d40c649b7f56d54da3aa45c91aaa6440b0b115aa2
+AdditionalInputB.9 = 637492a2943bde1311b277d1fe95dcf9782da457c03957e0335256b871b1e318
+Output.9 = 0babf60542efb0b6c667a0023635afccc4b36ac58879e2e7532ab854a0613c955cc15a5248e7dd63e1f3e213c10bb0c67c6f27f704d8f0a5ec4c670b4e3a21f2c32c456e69ded4ea9336c7339eada279012e34e46b0029279928f6b6a881ce086c1c1a319ecb247de7f377b1cbd2da34cce3f827285b26bd737a88b4f30cdb0f
+Entropy.10 = d9ce46c4f6fdc83a827f6b313cc42e04255b96567c4ffd6b568d5365f92ae2bd
+Nonce.10 = 385dd02922cbc66fcf7392d2876e193c
+PersonalisationString.10 = e6322121566023f1323b1912b183bb01e9855de469aa8ae9823f1df89306aa6b
+AdditionalInputA.10 = d60f71db6a57e5a61b0aadd6bc44687a8e7787c8410b2e802ad3a79ecfb1bccc
+AdditionalInputB.10 = 579a3f74d461d54154596e3099787ae7ae3387fb65dd628b102a6355b26aa2af
+Output.10 = 59c24b2f34cd4e6256db3368485035210dc15836c6b45a8c32790c9146d807d84bcd6484424301f19c95d545b509ba015e98c1d9a70e70c0f4f3997d2695aead5310790d479cb2739525e3fae5e42e2673f6978658ae5c74aec1bb49525c880adbd16482ab302fe1b85ee083bb46deddcf1d8b73998c730a935d5f464e26e135
+Entropy.11 = e777a5e0a2d636c0461c38eb197cc24e3aa11478dc250b3e491ca737550d6dff
+Nonce.11 = 30b7ebcce90b6b3606acafeff67a2c47
+PersonalisationString.11 = de11cbffba3069f1f4be51f875f208af0b3bed6249bceeede0390d3a1dc884b3
+AdditionalInputA.11 = c6683590c48260773fed70c2f27b9807e65a2a670b27690bc6f545dc6a656dab
+AdditionalInputB.11 = 388843325a24428c899d8ce657de0df81c1e3727bec78260f77c8ebc55b761a9
+Output.11 = adb109fc8d60254a305303750e9126ad76594d33b5059f9f384f60392b940ab313b262ff63f793ef3ccd44556527c26a27dd6115a94a96ce7746c49801cbaa8b084b47e22bb307070c92395915aaa81fe16cd745c083aae5cafe36d157f2d222728a8ce4a5db64cbf9df47c07991763c85b9b39c1a81a064aec01d956b6ab7cf
+Entropy.12 = b0d79298b7e005066a2870a617025ed08e75c3153992ed3085dd3efa41edbe3d
+Nonce.12 = e82f740f0f09bcea0baae466490abd2a
+PersonalisationString.12 = b2edcebea88f0dccd7f3e98e3685260c41142dccc4d14ac93cfacf4737bddb93
+AdditionalInputA.12 = 66461d13e5493823ab4fa9899c19b7ca1490d3053c157596c0465bc80b897472
+AdditionalInputB.12 = 948591cf75be1f9f99466b937c7ec6e3fada28376f4ed770e9a8654ac37ab584
+Output.12 = 900fab800740d7401b43a493b20b1ff3fcf71d4349fa1a24016800957729478e62e8846f959c90dd95c550c5d5557e9d7a05deae0bb1c432aac91f8e4fc616cd970df77a70a3b4a06d3a165831ebc865a8d5e9f916b56f24431b6f855a112161ab4c2fbf7bc45dff12814102d11712f57ffb948ef95cfcecf0ba2a8d591bedc1
+Entropy.13 = 049a53c57ce25acbe9ffd2cb92f8b6850ba626e9c30344c72b8f8a06fb918f2b
+Nonce.13 = a5c7ada74d46947a0b8e590881ab34a0
+PersonalisationString.13 = 085d9a9aafcd7ec89d3b1548287c10ed12d929b185e231229cab104749251fe7
+AdditionalInputA.13 = ea349d15ddefb9aaac537de4031b44ddc82eb0140ee63c1864fe9288518e7053
+AdditionalInputB.13 = 832db21d6d03b2212e00a6d1b8d29df63f542eec27eb35b783d8226eda99919c
+Output.13 = 5d21ec714cfca1ec6a9b044bf1a0ac1e8c3b59b3c1f42e7184a334e2afce83055786ac1fabda6af8bee8b57ca33a270898327e0f7af402264499644f048a0c88760f5618d904d4bd91cebfa8c3d4649ab8ac42ef5c1187cbf2b74eb65110dc7245a229e7dab209bbf256f576db9c9f5389ce6ef910fae2594e0da3e3b71ac751
+Entropy.14 = 68cf3f518b4745452a4149d200434960cbe10bcb783c3f89d3b85f618799f5cb
+Nonce.14 = dc345f21a33c168e4e07603187592f9c
+PersonalisationString.14 = 2c26ce79ee85d0c9ca4d1abc6e0ac2adb26cd223dcb513403a53755b647598e3
+AdditionalInputA.14 = accff53608616d9007199e41396846be5800eea55f73f64a6d8c8f26b5bae07d
+AdditionalInputB.14 = d8d5258baff41850de1feb5ecbbd1795cdf4538a1c57f55c9f585ff035a13e55
+Output.14 = 5032daa03415b2b6780ef4c6cfecfaccefda712f2529d2cdf4cb45d52229e2b7388ebce926a7aa05cc132b3479e7b9c0b8b4cd0262f7b18a58326eab2baeb91ed4818bf20a105975342bed6a97f2e67c483a403f98a4a5dfee98130741b909f0c4812c1917334ddc5e678256b78c23764217798f25db20d80ea85b69efd75892
+
+Title = CTR DRBG Prediction Resistance Tests (from NIST test vectors)
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 5d4041942bcf68864a4997d8171f1f9f
+Nonce.0 = d4f1f4ae08bcb3e1
+EntropyPredictionResistanceA.0 = ef55a769b7eaf03fe082029bb32a2b9d
+EntropyPredictionResistanceB.0 = 8239e865c0a42e14b964b9c09de85a20
+Output.0 = 4155320287eedcf7d484c2c2a1e2eb64b9c9ce77c87202a1ae1616c7a5cfd1c687c7a0bfcc85bda48fdd4629fd330c22d0a76076f88fc7cd04037ee06b7af602
+Entropy.1 = d144c661816dca9d15288a4294d7289c
+Nonce.1 = 437719291a6dc3a2
+EntropyPredictionResistanceA.1 = 96d89e4532c9d2087a6d9715b4ec80b1
+EntropyPredictionResistanceB.1 = 8bb672b5240b98659595e9c92807ebc2
+Output.1 = 7019d04c4578d668a99aaafec1df279a1c0d0df7247546cc776bdf89c694dc74501070189bdc96b48923401ace0987ced2f3d5e4516774115acc8b3b8af123a8
+Entropy.2 = fe7650b8b1aecffcc9001435dca0876b
+Nonce.2 = 4059cb4f32e21e3a
+EntropyPredictionResistanceA.2 = f2abd986dd1f32206a97771c813e45ef
+EntropyPredictionResistanceB.2 = 8511b149f9a0d29d58752dce2614bba8
+Output.2 = 23389fddeaebf37fc6c377568d76598ac97cf61fbb3e9afac723211b4bfceb6f8a4ec647766557b2426babf1d845d2b1eae67da5eab0ce9113e38b438527e771
+Entropy.3 = b036dc82568e4e6afaa08cf8d04213a1
+Nonce.3 = 530ca66001f864f5
+EntropyPredictionResistanceA.3 = f34416b1daa3a5c26c15534917c33766
+EntropyPredictionResistanceB.3 = 6fe62319853bfd7c250e598ed62a5cf4
+Output.3 = b63c1b912a06f60c17ab0c4f042c9a54cb16275222a83e6483a2f6b72f32d1d067caaada8db6579370aba13a769e7b6d24fbff9f4ed256a539a4706cb1f26054
+Entropy.4 = 4185bae84c49e7fde31987a92dd9578d
+Nonce.4 = 322170955f5a3a66
+EntropyPredictionResistanceA.4 = e1f0c5a7918779973fc7a3b02aa1cf80
+EntropyPredictionResistanceB.4 = 8e5241d310ce99938a55275fa81f45fc
+Output.4 = 1e2595269c4192402981dd097fd74a020903e9c94b863d24704005401ad48693c8ad2f646ec8b250eeb2f2334763980573ab550480f6545dad2509a5b3a4ecda
+Entropy.5 = fb659d94d808144dfcad29a365520dc7
+Nonce.5 = c65af65e0045b5a3
+EntropyPredictionResistanceA.5 = a210100b8e68621ad7d1e23852e4d96f
+EntropyPredictionResistanceB.5 = c6598b54a877b858fd29506ae8fbc08e
+Output.5 = 9eeeab86c07f6682eb26622ef5cd72ef92f0ac9379de4dfc738a4e6e57461c953a6978c238a88c23a79c7b81f97a7bdd59b7d766ce65e80c4097fe277878c52b
+Entropy.6 = 0d463a897f3832ddde83aa86b6c0914a
+Nonce.6 = 672104dcb184bbfd
+EntropyPredictionResistanceA.6 = b402072ecb606069e0b2d43cfcbaa550
+EntropyPredictionResistanceB.6 = 3b069a1c25299378be3ce1655f9f793a
+Output.6 = a8029aa1da2879d45561ca8ea15cde65a72d85fa157264810ef2750537d9b70bc0a21dea85426e89712e4d96e85cf3737929bdf659d0cbf55d2d28758abc36be
+Entropy.7 = 77663390e43728708f9f310f1927ca7a
+Nonce.7 = dd56f5185d49b3d9
+EntropyPredictionResistanceA.7 = 142c5fc3937bf7d300a8ffe4c356fbe1
+EntropyPredictionResistanceB.7 = eb8019d0879c9e2f12ed9a2c2b18ec76
+Output.7 = 6f1296545bcb43e57b8620a5d12cf5cde6e2fa4cf93b9132b3f09f340a1d5a6d8279236dec380bb11b32b653e583a4852b1304a2fe5f3134c345184cee07b1ad
+Entropy.8 = 486a33e14cdc8c66129fb86a8fcefdba
+Nonce.8 = 3ae74c5599f854d6
+EntropyPredictionResistanceA.8 = 12922f09d7646c92ab2871a549ecdfdd
+EntropyPredictionResistanceB.8 = ff2466772a233e04c0a4c613163cf769
+Output.8 = 69805227ed7cd35bc926297a5572f7f83c3460ab8e0cda6bb5ed4213093c9ac6bf10d22873161d3e9efc7149456960564bc820c760ba0327ddf8f7a546098b12
+Entropy.9 = f1bfedaf6194c04ca53dc5d2a7c9dd74
+Nonce.9 = 722329a446ba6402
+EntropyPredictionResistanceA.9 = bdc644f1f5103d48694d65dfa57d6c0e
+EntropyPredictionResistanceB.9 = 9e331c4703f1447f21d6b778557a8386
+Output.9 = 362eb6deae3abe136d6101d0e7fa96735c837dfa5d113d19bccc21c2b5c1c30d1e8adcca363e6ae8a9c78673c81fbe812adc875e95417448aef02123d2e62dc9
+Entropy.10 = 35c8a302199b4bcbf67c7c25b4e47795
+Nonce.10 = 9a28e575095e3067
+EntropyPredictionResistanceA.10 = ca79313895392d4f83f765c6a062c0bf
+EntropyPredictionResistanceB.10 = c034fbf932ac638857a14db6dfc953b2
+Output.10 = 6ec918065556c15a68a73714e8a3842b8f48c4d7e11e60e2b8b0af2abf06fe58ec06d5119b6b663a24ec7ad85503eae29364ac346466f8bcf514ac07db99ff9c
+Entropy.11 = 7dc6c0158602b8e40c133b915ff19de0
+Nonce.11 = 98a47179f5249721
+EntropyPredictionResistanceA.11 = fd07cbf151774fca5fddd8ae01e341d7
+EntropyPredictionResistanceB.11 = 5cc1ac9ba1be18566d5658f0388decf0
+Output.11 = 6516158403b4be14c5f44d0a5fe6623453b134d22348cf42336515013fb328b5e93ac64567a3ae4a3ad653bf83f74e4d04c037bea09a67a7c06375f7b4c21c78
+Entropy.12 = caa0254bdc4478353353b8d972ec68a2
+Nonce.12 = ef76f60627349e5e
+EntropyPredictionResistanceA.12 = 3f6b0d2f254101a3f4dfed0c13dbcd8c
+EntropyPredictionResistanceB.12 = 2da1f9fc9f09ee006a1e35047e276b83
+Output.12 = 888fc6ba66c09a82816974bb185a8e04f1140cd293e398fb1aa5c58af9c28e88d7b3dd3302d0d78e9b294567e293aa8b93005661b459c362a0ea484c991f23fa
+Entropy.13 = 9cc2699889ecadd59da6eae39baf1b27
+Nonce.13 = 6d7c9619f92e51e3
+EntropyPredictionResistanceA.13 = 852e847dfddeec325f5274687c81e8ac
+EntropyPredictionResistanceB.13 = 5b6b1a884df2a2302811004f827e9d1e
+Output.13 = 9f3511b2ae19f2a9b5a8b76d6ceea06f3ac951c10d4716f3561115c33c01fcd3423b2655a1243fe41ce3b37889c5f8a6f3e9856a6040802a2973023373df241e
+Entropy.14 = d4c2fc7cd946082e0093fd8918bc80ce
+Nonce.14 = 488eba5e5ff29606
+EntropyPredictionResistanceA.14 = aa21132b969c7bd071103ad1566369c4
+EntropyPredictionResistanceB.14 = 6634e2171d3089510768c8d93907aa12
+Output.14 = 6d1016419bc333abc2a91059846ec3764b729874a150690a50e8a3763fb0753b452f75a4540e34b5df3b0a435aa5b137926aa2fada15dd054ccb09b3474cce4b
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 8e83e0eb37ea3e535e176e77bdb15390
+Nonce.0 = fcdcc13c9a882294
+AdditionalInputA.0 = a2d938cf8b29675b65626fe8ebb30176
+EntropyPredictionResistanceA.0 = 6a85e737c8f10431984fc87367d108f8
+AdditionalInputB.0 = 59631e818a14a8bba1b84125d07fcc43
+EntropyPredictionResistanceB.0 = d7a468e21274c3d9f1b705bcd4ba0458
+Output.0 = 78d6a670ffd182f5a2887f6d3d8c39b1a8cb2c91ab147ebc95459f24b820ac2123db72d7128d4895f3190c43c61945fc8bac4029730003455e12ff0cc1024182
+Entropy.1 = 91cf7f4f5a2dd7519bf910f2168b7019
+Nonce.1 = ed978aeff489993f
+AdditionalInputA.1 = d9bd7f0e621e15a6439d9b94c42985ca
+EntropyPredictionResistanceA.1 = 5ff796698e198d68abac26ea2fa321e6
+AdditionalInputB.1 = 036b4f6a118b4525fcdfe7e86c3bd0ef
+EntropyPredictionResistanceB.1 = c197aa6f4022c290a407a6a53781150e
+Output.1 = c4ee4206825726471a592b9bb8b66115ebdf014776c5e4170ad960d6976bb35409aeed2ef2d1d653a1b6e2bf28c7b2f2f73f3348488b4c46dc12dd0b5a906e42
+Entropy.2 = 7eec9d6d0edf0e2ce0d521c8856ed585
+Nonce.2 = 77c62dd8370c2812
+AdditionalInputA.2 = 3e0349937fe2700b8463b9f6379ae19f
+EntropyPredictionResistanceA.2 = 7db98bed9068516cbb42cceeffd005c5
+AdditionalInputB.2 = ccccd174cefec24861fca521f96de0f2
+EntropyPredictionResistanceB.2 = f267706dd4574423eece345c76e1888e
+Output.2 = a064ad8f1a8bbca095383a9faf4d3456ee4bb3c88130e1b7543603c32f65e00add55cc583cd495adf6e6d8c1c6392f56984139d5bd90d7c006777cc6426c999f
+Entropy.3 = 924099abb20602bfdfb682bc88c70925
+Nonce.3 = e3c510efc60c1168
+AdditionalInputA.3 = 91b6306d3fa3c25e20bda49f3840d2e1
+EntropyPredictionResistanceA.3 = 8ba82fb8f237ac02d5dd8726c5d4222c
+AdditionalInputB.3 = 759e1ad26664b00cd7d18782586a881e
+EntropyPredictionResistanceB.3 = 7748d56b9a0db3c313f6177d658ea87f
+Output.3 = efc7d1339acdd666d6a814fd1dc92317a360f3ef0743544c487b2910cc4fa9613edb505500446b6a6299b8cd36137de86be32d0f1bcfaeefd3a87d8c8dfa13b1
+Entropy.4 = bb1df8d21b17496e874d177cf76ae829
+Nonce.4 = 688e440c162d8c91
+AdditionalInputA.4 = 35b0ad01da8ab0b7a6296ba1a74de594
+EntropyPredictionResistanceA.4 = bb9ec5ed06e682e981609a6b6f0eb23f
+AdditionalInputB.4 = 15fe5106c4f2ee9b7b969df5b4f663fc
+EntropyPredictionResistanceB.4 = 2378a1a17e179e8de8c7f322f62ddc9a
+Output.4 = f45b22ec3b8be24b812c94d6a3f89ee691642b52d735cd06e95abd5f99d22c802ca522604084a7e72ed0037f3e2a4a4d2f5c0a4f1154b69c5c2edd8a0bce069a
+Entropy.5 = 97908cc2b04c5a27cf05bab2999fe693
+Nonce.5 = 7b8eaef74d09fb69
+AdditionalInputA.5 = d7b42328850b0afdead4109d437a717d
+EntropyPredictionResistanceA.5 = 6ef13474428f5e51f881c179076c4209
+AdditionalInputB.5 = c1500fb11561ecfed43e3d8bff9640e3
+EntropyPredictionResistanceB.5 = a04078545db51440ddaae4790b75c8e9
+Output.5 = af0106134987ecf5cc27f3373f73402a9530f94d81a352b4828ef0b7146ad871f9a19a81a065182288e560087ee0cf662932d4fc027aac9158078aa329876bab
+Entropy.6 = 93fe542eac66d5d411478e3cff4b7e44
+Nonce.6 = 5911d35e2484f349
+AdditionalInputA.6 = 5aadd8034e1d5938b065752b026884a9
+EntropyPredictionResistanceA.6 = 2e34e94bb21a95f96a4d4b2aa6cf86fd
+AdditionalInputB.6 = c7df14e0197d2fc8b394be352aad12a8
+EntropyPredictionResistanceB.6 = f4321d86f997305d88f19e56d6237b88
+Output.6 = 53669f9b2ed3100ea84321c23703022bc266ab4713d5ef395ce2c60e47325f882d43167082e6d07f11fca578ee742bc77603dc1ef7aaa141f51462f8df518981
+Entropy.7 = 048a5c662df908f6281322a7983ea2a1
+Nonce.7 = 6eb0246b37b4512f
+AdditionalInputA.7 = 597f8405e4eab46565a7757bba309d4d
+EntropyPredictionResistanceA.7 = 0ae5fba14555643c51959d2da3dbe107
+AdditionalInputB.7 = 36788a9e392a8551371b7be9aff00d43
+EntropyPredictionResistanceB.7 = e20cd15f736300c3180ada5d7155f0a7
+Output.7 = b1123005e21f1f9578a7c624d64d3b06451f499e3762b5148f80eff2630463338416571a39ad4f9f2ef31e11312840a54af45ea6250754dd78dac3b0a07092ae
+Entropy.8 = d4b948bcc0c5622820ee561027df0c3c
+Nonce.8 = b149e33373a0cb77
+AdditionalInputA.8 = b5a8795a72c1adcb972ea9913f255a8a
+EntropyPredictionResistanceA.8 = 5eda9458474f55401e9699a9ec45fdaf
+AdditionalInputB.8 = c0c889ba2220ff8f912d0acb56a698ad
+EntropyPredictionResistanceB.8 = a2ba96239c89fcc6c81f56845d03c379
+Output.8 = 2041cb7168f01f92a941389e1b8dbbb9870c547fdb9880f05daa939cc07a36a2eef801379053ef572cd9bef497e7267f7990506dafaad43f6ec3baf44fd196b2
+Entropy.9 = e3b1a4d68ced15241e5fbee6191225d3
+Nonce.9 = ee451bc3396dab4f
+AdditionalInputA.9 = d4812abd913fdfda6caca2ea0d242f6f
+EntropyPredictionResistanceA.9 = b32e30f2129034cf4a73541cc985f0f9
+AdditionalInputB.9 = cd7aa73f0ecec3f93759ca3777c47d62
+EntropyPredictionResistanceB.9 = 1bead988c73024b6e0c6dfbd1b13f210
+Output.9 = b3047ff59fb312eab20f4ef83ff33a932c7d2e3922b7baa81be007d7984093f35602f8c2575bb04cb54db8d043ec5974d3b7d634009d041b4bc11e149d05385b
+Entropy.10 = 6c3bb1772384c876a7132a1945fbce71
+Nonce.10 = 20ae471eb96c4cb9
+AdditionalInputA.10 = 244bcee8f20481b88c66a1cac745e67b
+EntropyPredictionResistanceA.10 = 470a9f5679e710b065810a34dd368c70
+AdditionalInputB.10 = 9381f07397c783f1cc9c1f9521c8ce11
+EntropyPredictionResistanceB.10 = 29195ac31c9915f275ba8289ecd5f5b6
+Output.10 = 6de0f8c28e2908ae38b3a986f6ded132df2c48a963ce70efac2693e17b0ab57890f8423cca2588a4d7fcbfc623766cf9fb06bf8d06d14595e4f68e8f0c5de59b
+Entropy.11 = 58ace83aa5bd85da7dc4f1895e190dda
+Nonce.11 = 61c24b22813409b5
+AdditionalInputA.11 = 574e48820b535065f83464a4891c51b3
+EntropyPredictionResistanceA.11 = 9353c9723bb4eb6daf52c3769a5c025f
+AdditionalInputB.11 = b8dd1fea890a950c8249f66cbca5d77d
+EntropyPredictionResistanceB.11 = 025be177fe03e3186484a4b40cea2eda
+Output.11 = 1d6cb93f735b5283a747db21b86261285ce6fd727928e1357bdc8904cc90ffc2e8f0dc93d0ae1caddfc38e28bb32331e8541ecde6034cf31a3da0f1e5a2c4da6
+Entropy.12 = 00161c5b23cf62c5caf0e00500c0cdd1
+Nonce.12 = 97860640963fd256
+AdditionalInputA.12 = ea851db283ced45613ca9315546b768d
+EntropyPredictionResistanceA.12 = c30c9fd60a637c086d26ac349df4788a
+AdditionalInputB.12 = ce7e9f4f35e4dc743a22d55503a3d530
+EntropyPredictionResistanceB.12 = be2abc4fb9bec68799c0c47e1d3078e0
+Output.12 = 5f8ae3e336d8d8a26bf7204fda4dc1fdd7a506323c04c6510963d5b1662a95cdf4c9ba6ad31265e956286c7cb6264f9017bdfe870e0a1520137899dc31656580
+Entropy.13 = 92968a0cebfff2651b01fa9a3df72203
+Nonce.13 = f97ebff28a9c19c0
+AdditionalInputA.13 = 90663d5ddfa7746764537151ef75c471
+EntropyPredictionResistanceA.13 = f1b2a3ab86e55567ef1090822bc8c86d
+AdditionalInputB.13 = 6a5b2c85349c37137d766ab864e7a945
+EntropyPredictionResistanceB.13 = 70a046e15ae08e00c946fe2eb193959c
+Output.13 = 1b74fb9a7c1c8bb8422121b906e13f776ef0fb650782eb2013f3a871b3403bfe95a56d232a214d4c99135ae06767ec3907aa4dffc5ff5f6b9b4c76e58ed04b9d
+Entropy.14 = e2f6be79afbb3dce28a3dd7d50ee9931
+Nonce.14 = 53f5c4d22f0e44c4
+AdditionalInputA.14 = 9cfa82f0b5581d6b15d81dd534f330c6
+EntropyPredictionResistanceA.14 = a7720875b1abfe137e4b2f5c343ad810
+AdditionalInputB.14 = 56696f0e9ceb27bb60cade9d6d1a450a
+EntropyPredictionResistanceB.14 = 2d52ace692b7c91a231a546080183cdd
+Output.14 = 1a98275469a30c9e92132f20091fae46cab2c3f5b3ff5a22b67d0f8ab3b1e3800ad849c73909c331f340fadd3dc6358cc12cb4f73e23997a3109a4792317fd50
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 04d949a6dce86ebbf108772b9e08ca92
+Nonce.0 = 6516da99a259f3e8
+PersonalisationString.0 = bfa49a8f7bd8b17a9dfa45ed2152b3ad
+EntropyPredictionResistanceA.0 = 387e3f6b51707b20ec53d066c30fe3b0
+EntropyPredictionResistanceB.0 = e086a6aa5f722fadf7ef06b8d69c9de8
+Output.0 = c90aaf85897144664f250b2bded8faff525a1b325e417a101fef1e6223e92030c90dad69b49c5bf48742d5ae5e5e43ccd9fd0b934ae3d40637360f3f72820ccf
+Entropy.1 = 95b48c9225edf6de0c7ac846278749eb
+Nonce.1 = 6349c6543fbf1ddc
+PersonalisationString.1 = ee6bb29588cbc5095c44ce575657ee11
+EntropyPredictionResistanceA.1 = 4d2f8a6d71b2dc2d94938ac729e1bedf
+EntropyPredictionResistanceB.1 = ad3e140727ec0fadfd1d1cc45c492d25
+Output.1 = c4624afc97866213c91fa19067300f36eddadf008eeed5cf250242248794d9b63fa58c6e66a57e9f072e71ec287a1ed8d83bd5a5269c99470499dee3c86a0173
+Entropy.2 = 248f8146b5f4cda4aa502ba1eddf2b92
+Nonce.2 = 497d5f2085efbdd5
+PersonalisationString.2 = da501ed7fa9bf443f8defe7262ff862c
+EntropyPredictionResistanceA.2 = c1bbb797a5ec44dc9987891d0220072f
+EntropyPredictionResistanceB.2 = 0156a96559f4dbe8a3077541c489ff1b
+Output.2 = 1451675a2245cbd95644474b82817074c85e995ac05b45912479bc0d960fd632342a7eaccfc13047a19861b9a3f3aa0ac2ea48b4c4d1eedfc959a77eb7df19ec
+Entropy.3 = 4324eb5e5d3b15aa28377d809daa8579
+Nonce.3 = 088750038f5175f0
+PersonalisationString.3 = d27c75836f0a2173a308f58ad07c523e
+EntropyPredictionResistanceA.3 = a993d4c97493a1e782aad9c01f9a7e5c
+EntropyPredictionResistanceB.3 = d96a767837afb4b8544ae5827a0f6b71
+Output.3 = 544498bd433135c2d5b805b45e88733e71235eb6ad25ee89f21b24a418e0fafe255adcc23edccf11e679907c7425e8b1f53d0a1619e7dc3ecb2097cc18133736
+Entropy.4 = b213f7ce193cd4a66e979266f488e181
+Nonce.4 = 19191a557f544ef9
+PersonalisationString.4 = 1ced8318f6404390c4a4ee343cf53c43
+EntropyPredictionResistanceA.4 = 20a883fa3802f2d4b8359f044355aa80
+EntropyPredictionResistanceB.4 = 0f8f65e2192a8a445baed66527b8a0fc
+Output.4 = d3f1ccc77e041cedd5b805cae65789460302190f3c74788fa50b863cb4d34a96e2f02becd7218ad2c93472dcd9c23cc6dd74c39db6eaa37cd985b015314b719d
+Entropy.5 = 01ab542dcedb7eba62e17c6d0c2a2e42
+Nonce.5 = 70e368416fc106ea
+PersonalisationString.5 = d0ff40e68973011a40501273a017a44e
+EntropyPredictionResistanceA.5 = a70823f0f5cb86e53c6e6cf37f2faca9
+EntropyPredictionResistanceB.5 = 5430817554b428a3989b1ce46c0df51f
+Output.5 = 60ccee8ad4864e0af4108306d3712fac2158c7c68ff62faa41232f38f71a88b8ec2534c238dcf5a840f3fa1765986248ca7e5bdf75942843de9a907de87b1820
+Entropy.6 = b63b39f904c7e76d8d79fa6dd25a6962
+Nonce.6 = 6d5252ac2adfc7b1
+PersonalisationString.6 = c3a1b3851a7709c467c9ef3284efa01c
+EntropyPredictionResistanceA.6 = 7efc7d32a47b09717c4d02fa540bfb0c
+EntropyPredictionResistanceB.6 = 559032095842d159291c08d521588031
+Output.6 = b1521f1f1caec74048b5bb97794e3f4677e4ea38a64d74cd41c837ab0f6259da4242a17dc6b9447f5603a44b39763632c75020f2be760bdd2e11c86de9d0f4b3
+Entropy.7 = f9a39f9729e22d49ecf66f4f254bb2be
+Nonce.7 = 759675e6ad5b465c
+PersonalisationString.7 = 07e5abca6bb5bbccf70a620418372566
+EntropyPredictionResistanceA.7 = 37aeabc974cc6309478dc85887db777f
+EntropyPredictionResistanceB.7 = ef5990c326c45b03adbe1de093619f84
+Output.7 = 366a38087abd199d6cb3a3b9a6147c0f306cc3ddd4122074de281f3fc56f5d3f74c6dd289a93791ca2db3dd6b4bc984e80ca77fa49987145eb06fabee78ebbf6
+Entropy.8 = 3a2bdf56327d3fd94d80d83f950e0b5c
+Nonce.8 = 5f6cbec49d022df2
+PersonalisationString.8 = 45fc176ffbeaaaa9a1c8ebbfb0512cba
+EntropyPredictionResistanceA.8 = 44c3686222547ff421198372079a942a
+EntropyPredictionResistanceB.8 = 95d4f255ce0eef14b56be48641b515b5
+Output.8 = f6a44df4457921f71559f038df0bf5106893f5be1b30e6474b9142aeeae1cf0f3661da0bedfdd93316364c2b21c8c6974aa00fb16d6dfdbef61ba05b7f7008f4
+Entropy.9 = 65bd77127897f6c706acbd4062ef96b9
+Nonce.9 = a86302b2aa4f806f
+PersonalisationString.9 = 0e4bbf8aa70d2a3cada5253b54b915ae
+EntropyPredictionResistanceA.9 = 64b6e124e0e151aa005044f35a49efba
+EntropyPredictionResistanceB.9 = f5e7971b5ad18a91cd425d874ec3041e
+Output.9 = e01e53da0d47c2d1be096fa3473e0d4eafc0ef50bebadf38dd02eaceacf84c3847af7d6efac86190bea186e5cc9dc8f185e97a85ff361a2bdf8843e2915f49f6
+Entropy.10 = 65f5ac10d9afe7dd733958b9810f4b88
+Nonce.10 = c5e0172879dc344a
+PersonalisationString.10 = 83b41192133c9dc71219e07a15f826fa
+EntropyPredictionResistanceA.10 = 647dbde6b3a11a585f4428b3210eb54e
+EntropyPredictionResistanceB.10 = bb5cc96e431345b5ee09bfcd9d38a751
+Output.10 = 8cdf9e267294ebb90526f347d7673cf87f436d3b9065bef52628a72b4e04c831b05d5d49fe93bd5391ca5c1eeb933951566ab01e05db289e677120559a0d67dd
+Entropy.11 = ff0bc5b44a5c0b580017545739d057e1
+Nonce.11 = e48e23fa668cc6df
+PersonalisationString.11 = ceb254bf577bdc23db2b1f67ef1ba2cb
+EntropyPredictionResistanceA.11 = 62efff8f4a23ef0946b00aab1cf5ca54
+EntropyPredictionResistanceB.11 = 1eb3dff064435a07500f599bb7744ef3
+Output.11 = fe32da0ec0f4450d5909822338831155b8e317afa6ab3fc194f65048bc33c4b173c6e23b3cba0f1106b36fb9d5ae97438009b0228eaea4a46b521d19f91cc9ae
+Entropy.12 = e1db4e81e73ceffff73df59587fd1803
+Nonce.12 = e3b024424c6cc678
+PersonalisationString.12 = 75fd2b61bc6318a5baf9312e478b04fd
+EntropyPredictionResistanceA.12 = d535dea72d20dbd540cde856cf054eae
+EntropyPredictionResistanceB.12 = bdda470ea6ee457556a8dd29b6203981
+Output.12 = 6d33f52f8ad78acbd8feedb12c3841ea9e1aca03d505b6f0c16ecbe201650954085a6a218197de7f4077a93887b9805aebf66cf063d6d898d8be6ad011a59929
+Entropy.13 = 7b2d0af717e10c5475af5bddebd69ecc
+Nonce.13 = 708912346588fd18
+PersonalisationString.13 = 69e0f3e9fdc280ccf3fce3fdf8a15c38
+EntropyPredictionResistanceA.13 = 78ddc5745906391c8d70ed86a5badb02
+EntropyPredictionResistanceB.13 = 58f35f3a03f1f4126b6e5c87a5032ade
+Output.13 = bb48ab47d51e67e4a74c1cd52cf108de5a2c6b70107ca47c5681c6eee19b883b6e4d3b402dd6ee77b95aee028d0e15a57d2ee2ad9488580a0c4fee37f32cf452
+Entropy.14 = 26172956bcde00d0c84c17b67a2469a4
+Nonce.14 = 1e2f1147e2cb8709
+PersonalisationString.14 = a124b1e812e5e5d765807567bd8c0238
+EntropyPredictionResistanceA.14 = 06fc13e652ea5ce026bbc465b7be6f6d
+EntropyPredictionResistanceB.14 = e83a618094ad08ef8cc498a8ccc98ecf
+Output.14 = 9c987f10645453441155a23aaf36daae900bfa2c25e571e68e2b93765cf55364f1afcabf496a962e57f7eef84173edc95fdb1d8bbded881932dfa5a6a87e30dc
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 92898f31fa1cff6d182f260643dff818
+Nonce.0 = c2a4d972c3b9b697
+PersonalisationString.0 = ea65ee60264e7eb60e8268c4373c5c0b
+AdditionalInputA.0 = 1a40fae3cc6c7ca0f8daba59236dad1d
+EntropyPredictionResistanceA.0 = 20728a06f86f8dd441e272b7c42ce810
+AdditionalInputB.0 = 9f72766cc746e5ed2e532012bc59318c
+EntropyPredictionResistanceB.0 = 3db0f094f305503317863e2208f7a501
+Output.0 = 5a3539870f4d22a40924ee71c96fac720ad6f08882d0832873ec3f93d8ab4523f07eac45145e939fb1d676433db6e80888f6da89087742fe1af43fc423c51f68
+Entropy.1 = d798bada1ef8c500c0b8ab019d9ef4c4
+Nonce.1 = 94a95fab7519751e
+PersonalisationString.1 = 02dbf0d4259d61d13d02fda38ba70847
+AdditionalInputA.1 = 0e7c247ca704a4be33681ba2e925d85f
+EntropyPredictionResistanceA.1 = 43f61198299aeda57844c66a06a38dd5
+AdditionalInputB.1 = f89940b544ceccf4b4d520ab07132eda
+EntropyPredictionResistanceB.1 = 161ddaf006c48a7d2b57f6023a8b9c49
+Output.1 = 2e9a75c3c637c57d8fdf6685d5e318970d1ed019f2d51bdf0242ede5587511fdc007fde622e4a47fb8ab4584ad26e459776eab32a7c485598dc6c030432fe1c5
+Entropy.2 = bfc10a9b7f1ce1cd729f28505a3f6ef7
+Nonce.2 = 2baad6b7b4b8aeec
+PersonalisationString.2 = febb0d7c74b206bac7c8d24f29671cf8
+AdditionalInputA.2 = 6d497d065430f12714b2e0ec7ea53870
+EntropyPredictionResistanceA.2 = 917fa1f6ef831f6c425f95b0ed98e356
+AdditionalInputB.2 = 46f4ee117ec687a11979e1eef1b144ea
+EntropyPredictionResistanceB.2 = 51cd65bd381b2466325a76c3263453cf
+Output.2 = a40090e5858a36faed24bf97428f47529b56e947dcb68de98d48a0e3508cbe1367d97d3c91d49223e57d1d2e9584891c76edae83790adda63c0f9f8f3db5d61e
+Entropy.3 = 3ebcede08f007db7583fbe3df9621b5c
+Nonce.3 = 99daf9d87567130b
+PersonalisationString.3 = 00b2d9d80e93f1df4646582b5c4fec6e
+AdditionalInputA.3 = 3181bb37ddefdfe60f4c1cbf4efafa81
+EntropyPredictionResistanceA.3 = c5fd081bddb9006425eafca4b458c9b5
+AdditionalInputB.3 = 06c5cbb31bb4bcbca6451d1cd0f37c2e
+EntropyPredictionResistanceB.3 = 14ae7a97a068fe4cb2cb2df03171cb6c
+Output.3 = da93e6b85da870d347ba80cd3a712eec9ca2edfc4ea3444d436d82677d5ea35b6f4128352bbc85599d121bc4fde6d07309a8040989c0bf52be3905b338708051
+Entropy.4 = b837c03401df5eda47bc004ec7f55294
+Nonce.4 = c09698c3842e88e2
+PersonalisationString.4 = 855b6a93e7a756e50d2a84b22d79e4a6
+AdditionalInputA.4 = 71fec938fa846d4893211cd52479055a
+EntropyPredictionResistanceA.4 = b30de7ab1b176369c68e6a82516c6de2
+AdditionalInputB.4 = ba151abbe0c0196771f127b3ebec434d
+EntropyPredictionResistanceB.4 = 5482370c31dedb1a200500ebaf103805
+Output.4 = 1c6f5fbdec552da3c7c98a98e2068e991507a87d33a83d7b2bfc82acb311284cabdc87f4e0f19e2def7d9cbe935a9768ecb98b322c256a1436e4d419ebea2590
+Entropy.5 = 97402307305fa95c742c4c7393c70c4e
+Nonce.5 = 9e46080e8ac6220f
+PersonalisationString.5 = 1c115bbc23e9e6f4e4d6c34bddc184fa
+AdditionalInputA.5 = 0a3e01dc20fd04cc3dd4e57147cd2839
+EntropyPredictionResistanceA.5 = 029d2cc145bd93a546e63fc207adc569
+AdditionalInputB.5 = 623e7b7d01f8634083a1a3acb412ef36
+EntropyPredictionResistanceB.5 = 0a2fc05ab0ea8756bb308cfb62c56f11
+Output.5 = cfbf8a5dfdce0e29685cc951ad9b84bebe6eff31b9ceebf18d170d382296f1aa6533240f6d5c7feb7ddfc2631df5cceb583006e5035f21b9777a0a8fe577598b
+Entropy.6 = 793ca4253b561a1efe47aeb9cf04c770
+Nonce.6 = 2a344043fbfd5721
+PersonalisationString.6 = 588fd7cfcc026e2b9212b4fba21be62e
+AdditionalInputA.6 = f5d8dcd7622963c1e8e17dabfadc9656
+EntropyPredictionResistanceA.6 = e4e5794cce7214e030634eec14690d2d
+AdditionalInputB.6 = 813532e17de62757a54c381786f0d7d1
+EntropyPredictionResistanceB.6 = 9fe6a7c0debc3ee9ec7b99f7e4a75e10
+Output.6 = 0cf1e82caa3f61eedaeb97f849e145a02855608e5b25fd29f4e7a641eb887ca2cf11b144bc4320f2016cddda038a5db4adb770b19dff0d2c5c4db887ce4b2aa6
+Entropy.7 = d6fd7dfabec32e0f4a034d4edf98f4ea
+Nonce.7 = 5ae87ed2444cbb3c
+PersonalisationString.7 = 4e8ca8e95072199fd5e4a5e21d27fa16
+AdditionalInputA.7 = 41c2d51254f3c36d4bdb73bb58583288
+EntropyPredictionResistanceA.7 = f0677b3d149a168aa37bf7f1d971b9b9
+AdditionalInputB.7 = 24ed03322c8a880c43a418e0cb01603f
+EntropyPredictionResistanceB.7 = b38aa038e08af3622f2b649cc096beb6
+Output.7 = cfa3afd34a95bd2c7a52861cb4a5877505ba6265f4e4eac9ce84c5a191ce6169a6af5b1749797167e1b9095b2bd216c2abfdb6047978d6ef5905e8a152711c45
+Entropy.8 = 8489fbc6ce65e2344800308d71eea11e
+Nonce.8 = c3dad8789de436ad
+PersonalisationString.8 = ce6eedf829c52be3312b1bcd6d73e6ce
+AdditionalInputA.8 = 5506429641a81329a045d7318108fe21
+EntropyPredictionResistanceA.8 = 7402681420558e720d14dcfa5579c192
+AdditionalInputB.8 = c4d8da705d114b39153df80ecc47f914
+EntropyPredictionResistanceB.8 = f9c4dfac5a0dc1100de5121fb7154e64
+Output.8 = 53c47cc367186a97574bfbc6a420fcb8775fa6276e57317e873f8b21ac3502b2be7a88288d6f47aebbe6ceba89b0cdf54d7408f70da5b649338c6c188ca5e4e1
+Entropy.9 = f2c5104048381637b04d7db6791cf465
+Nonce.9 = d1f5742491844e0d
+PersonalisationString.9 = a75cbdb4a3e4f80b1271b6b183a32225
+AdditionalInputA.9 = e2b66705ce5833b57d0fec8b316e268c
+EntropyPredictionResistanceA.9 = 49ed0c1b039425ab7cf4d54ff0a4fc2f
+AdditionalInputB.9 = a6e705707936b43f4cdb2b6613b66782
+EntropyPredictionResistanceB.9 = 8766c28fb86924585da5d0a39da6824e
+Output.9 = 24d487d25b168045cd4d1616d6edef6493560915a7f28c7725288287a1efb8a298f1c56d7f15a609d7c1b383e6f00bb0f10fa95bc4d9d84c140709d2f2bf2852
+Entropy.10 = b9c943583aac7cf5603fd551e395675a
+Nonce.10 = 05896f448fc7466d
+PersonalisationString.10 = 8fe17f91a53c3e4fce93cbf99a94f570
+AdditionalInputA.10 = 746379e0cee02bd1c093789dea8b9505
+EntropyPredictionResistanceA.10 = e8a3bbc5fa85945d42a6e29d670af7e5
+AdditionalInputB.10 = d514c39c34d28a48f2643fc04dfe6cff
+EntropyPredictionResistanceB.10 = 7a1723530afa33f30ec6f6f2e745a659
+Output.10 = f66934eb5a8652a44f650ef8d0c11676a80250c9afc8a0a8eafb88bba93765ceb3d71fc6c400de14a2e6ee8e9920e1ce4afc19bba3afdf46210dae73a70642c6
+Entropy.11 = 42ec11522a7bcb36917734f90201e9e7
+Nonce.11 = 571bb20dc9ebd2df
+PersonalisationString.11 = 3610a7d5a5772b33788e24bb32ec1b9c
+AdditionalInputA.11 = d56e9d8fadc18b16308769ef686abd8a
+EntropyPredictionResistanceA.11 = ba13d508da95d9812dbe0331ba7af705
+AdditionalInputB.11 = 1ed7506ea136da45649fb8c8cc3928d6
+EntropyPredictionResistanceB.11 = 695cd3a5dd1896434ac5bca8bc2a0bbf
+Output.11 = 50ee3e35fe182322597146bd8bb484e5dcc0d206327a6532df4002fab0e63e3799277976ca718bd02e7a815fb64f19a3844c3e0d091035c7fc089b851e14200e
+Entropy.12 = d7fa8bef681e5aebc60c11f9d2698c9d
+Nonce.12 = efa01acdf0fcfa2a
+PersonalisationString.12 = 130c397b6b532684bbd420b0ee3dc913
+AdditionalInputA.12 = 81edbd6ba41d769472f9106cd4ea1a00
+EntropyPredictionResistanceA.12 = 042d401cffd73c96e3dd759045230877
+AdditionalInputB.12 = e35fa9189b83592eafa05993477892e9
+EntropyPredictionResistanceB.12 = 3cb02052395dd40578713686971f3a0e
+Output.12 = 80c7c391fe170780dabb3eff1c58510c4ad51fe653a524c660053d79b7c436a39f5ffb395bf145524b6777a805ea55d057d678644d3ab8c1bdefa882b028922f
+Entropy.13 = e0b6fd09b0d62825a4508a64470358d7
+Nonce.13 = 82ba18b28161e8f2
+PersonalisationString.13 = 89127ececfb43175ed8c3407c24565b1
+AdditionalInputA.13 = ace8e64b3fcc684b404712193b12ddb2
+EntropyPredictionResistanceA.13 = 9cbc7fbe7aa1e406d13a7365fb6acb2e
+AdditionalInputB.13 = 8c71176bb618529dafce7debe75d2c50
+EntropyPredictionResistanceB.13 = cea2e78c5ad17c215af52c88ddf3e1c1
+Output.13 = 0ad61af415f085aeb2a602df71bb16d9a4714fa0d2e806d0ec79df0bacc5b4d7adbc78eb8cf1352ba4a8c7ef293b321d610b34f700cf43422e2f618481613ffb
+Entropy.14 = 8d53f0c2d675558ba878b469c3ce186f
+Nonce.14 = f588bfb86495a5d1
+PersonalisationString.14 = b293d57cde9b4b297740bd81fab7a38f
+AdditionalInputA.14 = 85ae16bb0e447ad6d14032376ef42c74
+EntropyPredictionResistanceA.14 = 5f5e923811d6f60d650693ccb386210d
+AdditionalInputB.14 = 8db42a45d6feafc079aef701541c27dd
+EntropyPredictionResistanceB.14 = d6ac264511586e8eb48f4287a12a3620
+Output.14 = 15b8e7e6a80c0fbb23e74f4b70b8a1d6dc22472b6c389485ee252ec2f24d856fd079a752f473c05048c12c7490809c9943e21a7436e756f44c9d6d41e1cc9ca9
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 206e2b3bc59fe3c10bf9b871ee21a201
+Nonce.0 = 767b5f7deac62a6a
+EntropyPredictionResistanceA.0 = 789ee8ab343d47778c85526b588fc69a
+EntropyPredictionResistanceB.0 = 7b249b36295f646b911a9ff41f5fb679
+Output.0 = ad2ad2817bb0cda5b645720785c5b67493cae29919ec7d84542d6b48e8adb89c9d82d0e85594a35bad9fda8b157809574e74bf4b49f3864c70d5d49c5a88cb17
+Entropy.1 = 62e77e2f81757d2aebeed613a573ce6a
+Nonce.1 = e88c0844823597ef
+EntropyPredictionResistanceA.1 = 5456fc92b15dbb2699e437c0e49083e1
+EntropyPredictionResistanceB.1 = 9fa10b212140b4ef18eee4422c6f50e7
+Output.1 = 5c2edfba2379ddaf2c143527e8528ef504ee6e3391337520f86de2fb077b71c7e04a9b84be684969ed97acf3b50a01a059d0a1e34a584baa260a079a6bd331d2
+Entropy.2 = c19ec3ec8186af49e0a11c245a95074e
+Nonce.2 = cb8dd89f52e9691a
+EntropyPredictionResistanceA.2 = f3b4e311f90b1ce8171c0fa6861ec7a6
+EntropyPredictionResistanceB.2 = 5a39231c9e0ae103a6e389e91544ae05
+Output.2 = 9e6647ab962f11ceec89e18830c9c2404875bbc4db50093461c9556973ced020d9574a039146896df2afc536389040e812ab14a2db2b3ff8fa28da75c1d6cb04
+Entropy.3 = 049b1d88cce06fe7e5d31524c2b25acd
+Nonce.3 = e96e1e12d2aaece0
+EntropyPredictionResistanceA.3 = c1c8c69cd7c28ebbdf81110fc3e54a78
+EntropyPredictionResistanceB.3 = 9bedc5924a7eec9b60c56064aa512789
+Output.3 = 958f4ed17326ec30b8091542a2071812d5510a87e2868580b8bdc222e1f6baceab774bf9a1d0156b6a87b795af99b343043f7edfd9e525e360417365fe7b02a8
+Entropy.4 = 9f5f832ef15dfdc3b4133c60696d461f
+Nonce.4 = 5e23333518a2bf08
+EntropyPredictionResistanceA.4 = c25337ebd9f71328be768781dcd107b2
+EntropyPredictionResistanceB.4 = 98395ad89706dbf507a70fc2e834c3d8
+Output.4 = b94a1622039b23c3b567ce9dd98b20d4dd57b73557a8acc5292a498cb71a46cb62e26d7ee609f5d6682abf62dd547f80c2626a8c79df659b186af0360bcbd8e6
+Entropy.5 = 1fb124901beed5aed222740940206ea2
+Nonce.5 = 8776c2c07ea60ba1
+EntropyPredictionResistanceA.5 = c19f86b34f1147d0f57036366454eb78
+EntropyPredictionResistanceB.5 = 431a44a9ba8c9821f7d21f365ead8b3e
+Output.5 = 3f3be1b0bfa2787e62779c3e73e4d349eddf1f2f8c01f79f0cdce61ea785e29aec5796fa76b79a21a25088c29e376f6f3abeb8fdcf066903e62ef78798169266
+Entropy.6 = af4f46b29dc8aebf62c16cec5255aae4
+Nonce.6 = 7d46414ac4a56d06
+EntropyPredictionResistanceA.6 = db09fb079e2a1c5680590bed98bb20c9
+EntropyPredictionResistanceB.6 = 603c8e5b5f931f4d46b6556dcafcaf95
+Output.6 = c68373f588a2cfa6ec48616f3a7cc6130fb766ada3f9bef86b8cebd23cf6101cad3404491c6c8741d8333150cc5e813192864bfa51db5f17c46cacb760641a7e
+Entropy.7 = 5e7531a270b9adf15b3d4720a92cec2a
+Nonce.7 = 97c05095aca003a9
+EntropyPredictionResistanceA.7 = 79a07c70466c2ad7856db1268f2947ef
+EntropyPredictionResistanceB.7 = 058985cf115985495131cc4b507f1d28
+Output.7 = 960531226cddd1d298ddb4106080cbd11c8abaf499c44a04ce7007b47b393498c9703dc57289f0c7498d7e4dfba0ddec9d879d3f805aa6dbcfb38527923618a3
+Entropy.8 = 202f257c237a5ce6e44b06c7070f5c90
+Nonce.8 = 401a167c65772e9e
+EntropyPredictionResistanceA.8 = f7f10b659e27fa7fc47d9b48a90f2688
+EntropyPredictionResistanceB.8 = 83e73462b095866f317bcba2465229f3
+Output.8 = b0e405c49909e5dc0e0961a5c6e6cf66ff5a5c686813df2ae3d0db72fc0fa35998391e865c614354b3f1ddca10afc15991500b2bfc9d76990a28080d9ee63d41
+Entropy.9 = 1f72b7559f9170807f1ee7dbf9ff7518
+Nonce.9 = a86e9656c9ecfa98
+EntropyPredictionResistanceA.9 = 401efdbfc03587d59f1670c627c09cdf
+EntropyPredictionResistanceB.9 = 849d1253addb8d0b769a961f9959f0aa
+Output.9 = d8c47eacb95be39d7fc732c60eaab01513b662f64c7bd4d7cd9a0df227adc9abe7e7da4cc0ed9ac9fc9b8149ca859b3a9704c7cd748e05585d44b54f1064c568
+Entropy.10 = bb0dc9c08c2522f04d5c2cf1b96a6d19
+Nonce.10 = a9eecc8d65696e6a
+EntropyPredictionResistanceA.10 = 7854f1b269c510e7744bd8555f8c5b6d
+EntropyPredictionResistanceB.10 = 76e77168b5822c08d6c5a673ac15e622
+Output.10 = 150046daebff8bf6ff6497a5decf73d3e67e80c061e39d3bc1705d26f24bf3d08f912fcf24fa407ffeac4b6efcb111b1c3bce38c49ec8e5946c814f359839452
+Entropy.11 = 49e8d00b3fbe7f0c1709072a06088dc8
+Nonce.11 = 73e54bd94669c08a
+EntropyPredictionResistanceA.11 = 52da140a258d243eab409cebecd573fc
+EntropyPredictionResistanceB.11 = 22fcb6a778a9ebec0230fc348d317e74
+Output.11 = bcd451c1e117bc6aee437b61d708a8c84372b03f26c0c81081031422d21b0801abc5f1e9ec37d0ac5bb2245ea011eeeb105a93aa7d9b57eb1b62dd2c1df695ee
+Entropy.12 = 82120dfa28a8019699590a003c9fb2ed
+Nonce.12 = f9ac671b62cb5fd0
+EntropyPredictionResistanceA.12 = bf9a6ee041dbdee199c1837de046bb14
+EntropyPredictionResistanceB.12 = 4f77fd934faa040d17a5a02c1811b5ef
+Output.12 = 7b87442fd2111a5f7936afc3becee1357ac66fee943ad772662a0c199946c68629d3c862b962a729a0fc15eb2e6be90e96f8c677a18b7b49ad7943ccead2d4a3
+Entropy.13 = 0eb641c2dd161045a6dfdcd8a1d92a90
+Nonce.13 = d25de7dfdd6c33ca
+EntropyPredictionResistanceA.13 = 794f610ecebc618427d7e25469b9044c
+EntropyPredictionResistanceB.13 = 564def6e8f23c02c90a7f4aa06265b67
+Output.13 = cea39c807733b883c793c8c2edc9f7d592f818adb6db19863a49de030ab8d2ff79fb67d632950d537cae0b1d234c2a3f89b0c4ccfa68ae46cc4cad88205e803d
+Entropy.14 = 6d630b436d5b1be28c3feb0c7cc2845a
+Nonce.14 = e750eeeecfca459f
+EntropyPredictionResistanceA.14 = 5976b8a4934d0122232b58f0ed1c72cc
+EntropyPredictionResistanceB.14 = c0cd1c9cd8c962f1bacbbbd40831690c
+Output.14 = f3d685989ee932c110667f6130d3adf1df86dc72b1f152fdcea1b1580dcaff8e28e6eab607c43dba73e03672a6411c8473008ae23ac3380a3ca95fb270d13915
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 93c899de3b7d72a68389e44bf8249698
+Nonce.0 = 960e9a34325a5b49
+AdditionalInputA.0 = 942e656595b07e98b59f39f9d3658cf5
+EntropyPredictionResistanceA.0 = b68bef79aaad62e855ee145179951d87
+AdditionalInputB.0 = 0338a2b070927ca2eb551dc3db4f1d62
+EntropyPredictionResistanceB.0 = 141dad5a5d5b7174f5fa974333dbb64d
+Output.0 = 0033ae038078487f7dea1ef64bec58ae751fb8864f8bff4e8c1b412ba2477d2ff1ba887a1ae660bd48ce7b7628a8d1769a46d3753826662cb26a75df87f0d3f0
+Entropy.1 = 94ba8b14ff07435536251ff539bf5c59
+Nonce.1 = c84450710af4ac40
+AdditionalInputA.1 = 287e988a1c58eacb6a18f8e3b6e46fd1
+EntropyPredictionResistanceA.1 = 53c3e8ba0a560c3289f6619b1b3b3a5d
+AdditionalInputB.1 = 126a8ccf5e6cbcc64f123e9866c436ec
+EntropyPredictionResistanceB.1 = 854eaa96fb6d1e0a9af5d5ed6177e454
+Output.1 = 44a8b07b9740086937bd5678cea59c8993f326f710d7e13d1830958bc34d74aefd78578d4c1591192746c41649f597349bb4f556e5537f108457fc3db6bd4f25
+Entropy.2 = 1177f9e8ba73fa11273bb1f2604db8b6
+Nonce.2 = 9625f189b34451f0
+AdditionalInputA.2 = 5b593a44075c5a6c80d45daea3760311
+EntropyPredictionResistanceA.2 = 4897d191c4e105ca95cfad7dfba5ed84
+AdditionalInputB.2 = 0db67b8d74662d118edee856e2c23221
+EntropyPredictionResistanceB.2 = ce38a56bc712c1c1419017952e9f30d0
+Output.2 = 445fe473651fab5bd9d15e82ea81ac54da37ab491cb4a96b64f163ad98a64f28f665b6d4af52e2c6e224c140b78ba843b52146afd3c6e07710bd79b8587c81cd
+Entropy.3 = ff244df517d5a920e91b43b6028f1c56
+Nonce.3 = 4ec12d98015475bd
+AdditionalInputA.3 = d671e45fe612bc7b602eb779c3c8ce63
+EntropyPredictionResistanceA.3 = 19048271569e3d6cdc97492347b1336d
+AdditionalInputB.3 = d01f40ede72611f000c2b53fdbde794f
+EntropyPredictionResistanceB.3 = 07cf24f3143830eb2ca04e68c5018b69
+Output.3 = 59af1b23d7068ab5de7630f058808df8da742030d6473f141fd1fb8ad067d351db03b43c3792b6f1857b900f2558b6bec2d16183883e22e47cf7a65cb33697f1
+Entropy.4 = 4ec07bfb64a902b7da6735f02a061e6e
+Nonce.4 = 32960ebba4e015f6
+AdditionalInputA.4 = b7db1770cdbcfb1287c909a5caa48998
+EntropyPredictionResistanceA.4 = adaa8d119f4cc198f2fffcbd95a70c2f
+AdditionalInputB.4 = 8f0e7b71645a252a1ace196a79d6e551
+EntropyPredictionResistanceB.4 = bad15aee786008211bd6d9378a01e4d9
+Output.4 = 43ef27edae3c4804118a1c8c9052cd92669817eb200b7c5a3d08801c398fa04a0af5737b8d8a97b221165e7df51a07befb74efe1c3a9544f891933692e1215c2
+Entropy.5 = 300aa1773df7d165475e13ca4ce73750
+Nonce.5 = 42c06d17feea25ca
+AdditionalInputA.5 = 91e415b04edac4453a59260f589fb734
+EntropyPredictionResistanceA.5 = 9664cf2d711eda5f8aea02a4955d4a80
+AdditionalInputB.5 = 3d6784d9083bfcba3b804993083d048b
+EntropyPredictionResistanceB.5 = 9a54e325076ce3f75c020fa04ecec96f
+Output.5 = 921dfb3b771aa78d0af111dbb1baf2ab5469586b7cae25a7350d6466c822b900814ca35426363563b0817775a013136ae75fe885f904f08fbeb5c0bb5bef506b
+Entropy.6 = 9885557b3cc8a1b76e7cbda2453e4584
+Nonce.6 = db09bd6457de8708
+AdditionalInputA.6 = 36b46eb8d03ecac9e469506915547237
+EntropyPredictionResistanceA.6 = 86b744f4144956b902d0c06ed89c9e23
+AdditionalInputB.6 = 5b26ac1387f16104d7d2b3fceade5e8e
+EntropyPredictionResistanceB.6 = af4163ac9f14f47f6c496e60b101e5a7
+Output.6 = 38355ace495b5e2435b7d819ea32a34e43a89cb1539a44e0bce1b3a6e2f64e5a11138be88efd763df061145d43397463a40cfe441091c74776b5cd29ce2040c5
+Entropy.7 = d15633b77890fa240ca96f08d052b98b
+Nonce.7 = f4b4ffe660e8a319
+AdditionalInputA.7 = a93e8be0ef0e803babe0abb5f7bea6ad
+EntropyPredictionResistanceA.7 = f140b0ef7a8e4274d4170c6fd8c0f5ea
+AdditionalInputB.7 = fd926782f9f68ad211cdf32da9aa3a2f
+EntropyPredictionResistanceB.7 = f7872c584886503336fcf4af57d31f89
+Output.7 = d4dca45973e99dd7112764fd8d50f5d0e67c233e227baeb6c03bf21ec6013ffcd33f39fe0dc1a089cdc7076d8b9c8e9fdd3c35e12eed9f9a70fec10ea03f4bb5
+Entropy.8 = 388776bc84285c9c4ad3982bd5461ae8
+Nonce.8 = e79aa60fc9179873
+AdditionalInputA.8 = a92855447a17b4c0604744e90eff6403
+EntropyPredictionResistanceA.8 = 95ba3e9b231c0a66adf980e7af577ce5
+AdditionalInputB.8 = 1a3bbd06c62f0cdafc4f8acd326682d4
+EntropyPredictionResistanceB.8 = 24e88bae2b4b8df2243515ef93cbf8e8
+Output.8 = 1651ec3c26323746bc8e5d646308d1bdd67275213546fbfcdba4772f245c4e1c1279874bab75d5fef5ebc131fbb1bdb1cf54c8e01efcf5066a0338a95b2ebe34
+Entropy.9 = d1a897feae8ffbbba8b2ee86227cc208
+Nonce.9 = a7601a777c0b1322
+AdditionalInputA.9 = fde29b8590200ac0d3da2775d564ed30
+EntropyPredictionResistanceA.9 = 48ec22bcd5f7ccbb2376c20fc91e36c5
+AdditionalInputB.9 = e9e7fe35e0c211443cf07e6d0dbf0a7c
+EntropyPredictionResistanceB.9 = bbcebc0cd3980fd0920203d2b51d0892
+Output.9 = 04ad36054120ec41247b90afc94fa835a8988323e8a22561b02a0b65f68dc7e8d6772250842fa806dca92fce865b6b46e5b40ebbb80e5a71cbf57751df5d34ca
+Entropy.10 = 2719447cb9b198ca3c52ed2db2ba29e1
+Nonce.10 = 13949cee0fd528c9
+AdditionalInputA.10 = baf63a6d980428c48b062bdd3678ccc3
+EntropyPredictionResistanceA.10 = ab388c4ce9c184381a8b216dc0c1fc3a
+AdditionalInputB.10 = 8a3aff90d358867caf75c7c28a140431
+EntropyPredictionResistanceB.10 = 9b9cbdcc5be775556c5c8df9a4d2bf64
+Output.10 = 7d945ddf5531ea29a89f1d8170132d7cf56d36d562e3485291fce29a8ba22a853078a3461e41554bea15b8e4375a43e0033c778e2ec63cfc1bc710cfaa21833f
+Entropy.11 = fe37612c9b8c6572b7353e4cc0f4ff5c
+Nonce.11 = 516c270b8c708f74
+AdditionalInputA.11 = 14ea7512ce4fb624cb94edd57fc48233
+EntropyPredictionResistanceA.11 = 2c473d7c28fe4e9cdc088b70cb883990
+AdditionalInputB.11 = ccc78b32725c85fe04a744fb833ccf0a
+EntropyPredictionResistanceB.11 = 8e3f57c83148356979f77210bdffbafb
+Output.11 = 58897493a3bb74e282f967033d950b3eb57f46859fc5a1c52a94eae85fa32dbfc80be749e095cd1cddaa438422d0f3734fb7a30150be53895a614d0fc4727c91
+Entropy.12 = 9d4914a36103dd435f625f243bf11992
+Nonce.12 = ab5c8acbf021922c
+AdditionalInputA.12 = c9aef13ae0fccce768edaeb4a0c94167
+EntropyPredictionResistanceA.12 = 656a4b81b3fe65b3eeddec0a198e3af8
+AdditionalInputB.12 = 78cc0069c5b5918b69af773dc7e54889
+EntropyPredictionResistanceB.12 = bd7b439e15a4d158d39e781ab9300d7a
+Output.12 = b4c79a9162cc10d5522c1ffd32a26b3fafabd8d37c87b6baa27cdfea56312318a658819e70d95bbeccc6919b700c88d53c10ee5c9549095cab3042005ecea596
+Entropy.13 = 42586db73f8656ea70e5ad27840e1b67
+Nonce.13 = 40c9fda183212737
+AdditionalInputA.13 = abb3e34c360768b1becb8057106e971d
+EntropyPredictionResistanceA.13 = 15d63c43769f16e51668d7fa509f0db5
+AdditionalInputB.13 = 7fe832a8c47c9e873cf1d1ad8cf637d4
+EntropyPredictionResistanceB.13 = 9897e63bb4060b72d375d038d82eae03
+Output.13 = 0aecfdf5f5184246e7cc264f65cb68158e946c0f217976ead0a92065f1f189e44cd86c8a4de91db14ac235d6a940a6404a3bc3b1d9e4c196df4a6f3d3c6ae414
+Entropy.14 = c3430316d271b58a7bfa40c29669baba
+Nonce.14 = be4b5e2765ec1f03
+AdditionalInputA.14 = 14784a87e4f970faf8695dd491b2d065
+EntropyPredictionResistanceA.14 = a8270edfe30fe58bcc47677a1488d15f
+AdditionalInputB.14 = 061f8cfd6bbe66981409dde8452366d0
+EntropyPredictionResistanceB.14 = 6563bc229e14c3a5925d9993f93f8e00
+Output.14 = b90cf4c5fd8515090596be71d96863dbb5fc0ac9158c9d9095dcde0ee3b89d8d7c5dfb1c8ba75e5dea9194d8655022bfa9d7aa8a951e2f31cffd830af204d7d7
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = d705aaf48f696a5ab5ddddc6efb7d594
+Nonce.0 = 116a95cd472a9cb0
+PersonalisationString.0 = 73ceff348b5260de7e87ddb22bfdc7d7
+EntropyPredictionResistanceA.0 = 7ea657245847dd4c01178d80f0b5b1d5
+EntropyPredictionResistanceB.0 = e0dfa3a231a8ae550f85834906e4a2f6
+Output.0 = 0d1e63ad35a020bd8191b6ca8a1a1f758e6f1d6893c2c848b9f14b4eae86d4b203df8ea4b47d0b868c0ad78ce6f4a638638cfe6d5a62c6e24e9550aa82a26c47
+Entropy.1 = 18c27df51d570de044e1c291f1dad81d
+Nonce.1 = 311912fba97e4333
+PersonalisationString.1 = 3007ede205a740f05e460021e086e7da
+EntropyPredictionResistanceA.1 = 31ba772592f86bf2b3eb9b9c792bacd2
+EntropyPredictionResistanceB.1 = 41832c5de9b2ada2efb01b15740e7519
+Output.1 = da11fbcf2cae28d19d9ab6cd8cc865968fc09a616dcead5772bf05bb8c1664269bcd8bb201165182481c650329a87a2738723636446f4b381c787ebecc89fb68
+Entropy.2 = a295d557067ccb87d1e8fc74b6118595
+Nonce.2 = 3649f04ef9941f5a
+PersonalisationString.2 = ace6730e9fdd8dc4adfad60426e2607b
+EntropyPredictionResistanceA.2 = 9de95f6e867cc0c34e6cb3e4526f897a
+EntropyPredictionResistanceB.2 = a072018de390bf389072a1ad80ce935d
+Output.2 = 60562b95098077b9054f4cf5b5117bc9fe1042a22fda50dc9f95de8f2c19216b30125082be8e899524f0ac4992ebb7dfce36e8152a7110c9542939b78ace1bac
+Entropy.3 = 8c4e1830b5b7240286c6b2d208433412
+Nonce.3 = 001ca8ced894ae12
+PersonalisationString.3 = 2b54344029763f73c40ef898a6e7a96c
+EntropyPredictionResistanceA.3 = c5a175328828ff3e624a0656b408e516
+EntropyPredictionResistanceB.3 = 8d6e95006f5b2991ae4dcfaa3f74aa77
+Output.3 = b21aafc7c090a816cb85cc9434791c810fc8044156f1b3ea3587b2701b6d235fc2d5a5ed4840f5f8f6494f129ea60d6405f4ec76aa1018d9b97f0a3ca13250bf
+Entropy.4 = b3595b6a901cc9e864bf3f9ac49c5372
+Nonce.4 = 759f076df87bb9ce
+PersonalisationString.4 = 581aa63ba4e9734592a91fd7264b1424
+EntropyPredictionResistanceA.4 = 67d6ef6b682a923e9f0cad08ec71588c
+EntropyPredictionResistanceB.4 = d12b19f26a69e6261b8e5b6dd79ab0ee
+Output.4 = e132976f8349d48bc53327dcd49f3141760067242385f6e180a4dcdb28e409eb5c8812554db11dc4df0b9e0535232831f37060fdcb0fc5554afd7ce2295d65c9
+Entropy.5 = 4baab6e21d404f94e8cea64db4d60f32
+Nonce.5 = a9ab4a5701ac322f
+PersonalisationString.5 = c234289d9780a97241427a6e8301cdb3
+EntropyPredictionResistanceA.5 = 1aa1d73eb6d38c67a3541b44c52c8432
+EntropyPredictionResistanceB.5 = 877ab4cd2fa1c6d8e31bc87fdf2681e5
+Output.5 = c44870ff58e4a25dfcd14e73084b8840f596699cce0f51943a4efe6c1f2e4e61c82f4db5e275a96e035afc3502ec2ed152f453162d97c0c9025258dc8021ef2c
+Entropy.6 = f79a4aa7b3815e5c1aeb1765200163ba
+Nonce.6 = be93ad0647e1db26
+PersonalisationString.6 = d1c344518f331230400061fce2f188ed
+EntropyPredictionResistanceA.6 = b3554bf0c62d7603c0f895dfa73a755c
+EntropyPredictionResistanceB.6 = f6bf07e1423555bc53238ee3d69b9e3e
+Output.6 = dff66e025ac477e5567b53a0c27244f627c1d3e6dd15b239ea9712385ed306adc3cf2de99f5e8ae4a4ed47f719fc2ffed22c748b091a16b5a643b1bf1803a29d
+Entropy.7 = 7e20a35f3ef933f895f90947658089fc
+Nonce.7 = 12d3ddcacac31326
+PersonalisationString.7 = d565cd19a9945fe285a7dd3ad0ed6982
+EntropyPredictionResistanceA.7 = d28bddcceb0f9e0477eea702afdf2125
+EntropyPredictionResistanceB.7 = 4f62a12649283d74dd3025c18f4ac100
+Output.7 = e2bfab3013c4bcf8a1217d72f2f70383b6c7514258b002688b9cd0de5d8e7cec72b82e642a4813921cce94506190ed45e7e3f82d87b1687ca7cd3d82a3f96480
+Entropy.8 = c0aca425768420ddec4cc03a33808f77
+Nonce.8 = 22568a86ba8c83e7
+PersonalisationString.8 = 92f9c7b62d4ce2ec1496fd16fbdcd7f6
+EntropyPredictionResistanceA.8 = 3fbfc6dae28b73c0a26462a1f1ac0ca3
+EntropyPredictionResistanceB.8 = db256ac732f8128934cb9a97c8bea35e
+Output.8 = aaf9faed83a85fc9f129c78180cda00e44f546c1f2862099d8019ecd321cc51e64e13c9d305318bff44720cb5b7ef794d2e0ca81af91da6543a37eca626bfd01
+Entropy.9 = c3df98f5a0a38ad1d15fc395fe8a08cb
+Nonce.9 = cc9ba420a21a1f11
+PersonalisationString.9 = 8132185d8560863c09dcf415ea51d27e
+EntropyPredictionResistanceA.9 = 96dd30f33aeae0fd50e2e3a81d96f5d0
+EntropyPredictionResistanceB.9 = 106d12cbf124fe5c2662891c01d545ce
+Output.9 = 5133278a9ed30d1884e1096410019817509e826065f5eb912747129b3c93b1269721bacec4d1af9b5ee22f232a3a01e11ce393f10effb131b8cdda3c513350b5
+Entropy.10 = b874189fb6ae40fc45a7beac7e1df9cc
+Nonce.10 = 119312b7770a496b
+PersonalisationString.10 = ade11492aa1886edd91c1ab5a3be71dd
+EntropyPredictionResistanceA.10 = b6044899056bb04c2747d037ebf803da
+EntropyPredictionResistanceB.10 = 0d704a0677d8acb6cbff42a2ca64ec13
+Output.10 = 4330806808e0a182181f6f0f95f51a754e6c1a6b1deb3d490fd0adc042e3f7e199f7a08584a0622bd387a26c89a8625b76dd3de863040ad61796af8731d951a9
+Entropy.11 = ea9d326cb9e2ac1e8412b2b8b23f002f
+Nonce.11 = 03c090654dfacb54
+PersonalisationString.11 = b8ab56452882abc8c4bf7ce7912b1433
+EntropyPredictionResistanceA.11 = dccd0ef193de23bb1a2d8634420e648b
+EntropyPredictionResistanceB.11 = c174117b03340df17f2fc87e24fd7cca
+Output.11 = d40e9535d3d7035dff7a5bbe591850964edfeb98b06c12562605d77662e5101765f7f72086057a07c68eb0f138bb4811a333a849f2163830c71fe3cb3f63c8ab
+Entropy.12 = dff4c5376be336f1a861ab58f9ca6ff5
+Nonce.12 = f78690f507fd71a5
+PersonalisationString.12 = b1f9c10bfd1fc50ed70b370ed8fc9c8c
+EntropyPredictionResistanceA.12 = f23aab61e679e3ec8ee0830727622d38
+EntropyPredictionResistanceB.12 = 096ddb8aae130c15379373fdb49eede4
+Output.12 = 956983f9653931595c0459025108a7aef13f1ddece8a46b50f4f22b75f628e74c764211919ff06c9d1f1f8d5107d6842aa374a47ca033ad902ac2ce78fe894a2
+Entropy.13 = 072997ea0239b0776026187eb758a538
+Nonce.13 = 2a547475c235e43f
+PersonalisationString.13 = 37b2f818c80e776ee8eae493c0dff180
+EntropyPredictionResistanceA.13 = 10f8a98383a45a3d76c87cb61fec827e
+EntropyPredictionResistanceB.13 = 77a954713ba044851564bf96d6640fe8
+Output.13 = 409a7034362e74269bcd918aec93a4f1f1eb23b2b497ff0ad1c960684844da2a186e473a8fbec3feef8003299b8caff723e1b3212df79a71dca5af97e32c05af
+Entropy.14 = 0c45d74bd2626a07b479387792a8ab83
+Nonce.14 = 07b50ecd3370860d
+PersonalisationString.14 = cb3f39790fe29eb862622b5ae4c0f0d7
+EntropyPredictionResistanceA.14 = a3f505e0073ae48ddae940198f723d5c
+EntropyPredictionResistanceB.14 = c74ee28fdb813959a7b836fb024fa795
+Output.14 = 2a68871236001af9d1154984fda1a9fc3d80805fd397240927c5aedff5dfe053fc2691e89d537b6fd2d83b5421d534539ff56b48fa39ddc090f658f6c1ab88ad
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 0b0260d02cb79fb2ada4d0df88cb3248
+Nonce.0 = de13d859668e49b3
+PersonalisationString.0 = 912b1512e64dbdac5da98008fa771bc5
+AdditionalInputA.0 = 69c85a47126ff930685c8caf6c56b917
+EntropyPredictionResistanceA.0 = 5e2c67c90d8312fdc519a625a0b7ed7b
+AdditionalInputB.0 = 51e9d4ae6bfac02f97023954545b6e36
+EntropyPredictionResistanceB.0 = 10dd71ab4e037fc292eb23e1b3c00bf1
+Output.0 = 2c06ee22f7cf62cf709c123ea0c25259172f0cd8307afdb8b3bbc281acc85aed7aff8ed9fab632f4d078366d557480b9b8c9b7aea1b0920d6c2a784cfe72c757
+Entropy.1 = de3731fbc096227d77dad808e109b846
+Nonce.1 = f0d31b93891fceb7
+PersonalisationString.1 = 3a1e1d3dac88a6ee5bb1661eb727b7d3
+AdditionalInputA.1 = 189d258dbc1cb17c94aaf636cbf436e8
+EntropyPredictionResistanceA.1 = 69b4a2029c25bd217384f75ae039f2ab
+AdditionalInputB.1 = 8447c25b7f4eeae3d81b4577442cd79a
+EntropyPredictionResistanceB.1 = 76ce343d173473e4d4cca8f49dbb22b1
+Output.1 = 3c61fd32f5dec3d374304534558c96d641b1175dfb924317fc2db7c1d9fb746ceebac49969590f6b53b8c684e9ce5bc76288d3a14bcb3da1ad6211a384d955c9
+Entropy.2 = dfc239592a01f05b60dd862b2bb2af90
+Nonce.2 = bb96bac6e5b09dfe
+PersonalisationString.2 = a9b147b73b0ce8bbec439c4751a9209b
+AdditionalInputA.2 = 6bee10ee0f37e9c49c0c580177493adc
+EntropyPredictionResistanceA.2 = cced1e296e4b59c15cc9c8d9e9cb237f
+AdditionalInputB.2 = 58f85130265265bdc415446a3a27fe39
+EntropyPredictionResistanceB.2 = 0c0ce8f47bbd848da0ef2206426908c8
+Output.2 = a1883bef8ad92440d9545de914691a2527ab5e6bc9e8dba6ebc73ebc2ef265a3011b71d47636691236953dbdb3feb26325884ba5c81151e4f410e41f5e23b459
+Entropy.3 = 75c592ebad8a80413a376b0367ce4242
+Nonce.3 = 8a8c68acf8c16e64
+PersonalisationString.3 = c32daa40d03ebc4e3fea25dfac4ac2dd
+AdditionalInputA.3 = f3ac8b16e54c64dae33343060579424e
+EntropyPredictionResistanceA.3 = d7c116d74ab668bd844630f30d545a51
+AdditionalInputB.3 = c1db518d0e4d539c78b44130044fc47a
+EntropyPredictionResistanceB.3 = 0ae6c4142ef8aff5526775bf363b92ce
+Output.3 = 84692def2f71d53419db38f9f36790fb1efa31b9607c5d94e0497638d79fdeaea25fe660dfff95a94e00944c53a18f3ce557ca1bd71c77caa4dacf3c1838b94a
+Entropy.4 = 1a61e0ac82b535ee84412cee084e4cca
+Nonce.4 = a4d0f9cc0cc8df48
+PersonalisationString.4 = f57093d4373292b3c34a74dcb72e5a10
+AdditionalInputA.4 = 91c78c51a96fed59eb9dd599850206a8
+EntropyPredictionResistanceA.4 = b9e9153ea2537a914db35bd11d0dc504
+AdditionalInputB.4 = 1e604b04b1d83bda4f068fa295cbbfbf
+EntropyPredictionResistanceB.4 = fb502da3c8b097f2e6fc225b6a71a239
+Output.4 = 27d16dbc60d5f0b9e59c99a11178324ffca914548869217295e8d001ba62cdedd7ed933d1ddca21e5b592d0ab692dfa07e5bf3895a3b3688ab1ebdfabd3eb1f5
+Entropy.5 = 4c8f657ccaff6c95bbfd4fc876171396
+Nonce.5 = 1cabfef9b147e3a2
+PersonalisationString.5 = 781f0a06c013ff3a3f5919daa4a18652
+AdditionalInputA.5 = a70bbef8f0b3cbf3def063f91729026f
+EntropyPredictionResistanceA.5 = e2f4f9762d340bae6dc0ea4fa319b754
+AdditionalInputB.5 = 9b3c8ecebe74a3846f6eb43c1cfc51df
+EntropyPredictionResistanceB.5 = b9b7d93ba089e71ca597090b6038b60f
+Output.5 = c4588efb82c2ce591358abbe2aab71d9f2ad3cfa327782ed94cf3667cef2a5214d744338d3f40b2190647f49e482386d797892559358167b51742714c27cf609
+Entropy.6 = 8916da705a022c84ec5eb24e8fe99d33
+Nonce.6 = a796ce9df27e0bae
+PersonalisationString.6 = 2974641b851c4b9d09b185d5a7978d84
+AdditionalInputA.6 = 0b8c493914166aa76dc484ea454148c6
+EntropyPredictionResistanceA.6 = ad12f9fbdf24ff6a8d1b26c7bf1400df
+AdditionalInputB.6 = dafb207df9ecf48f159ee865e04d17ce
+EntropyPredictionResistanceB.6 = f2a758e500afd3d4b6057f506c244cfa
+Output.6 = 9eec1d1b471a681460d340f35905ab0f72a2b60c7d14683ad660d84ff9c8480657e1bdd89962c5df904362c2d0c4d9c119842069ef9d6a2743f0379fc8627824
+Entropy.7 = dec3f51b897a45bf0c81ac31da38e7ab
+Nonce.7 = 91497fe789c707a0
+PersonalisationString.7 = 2a2c9088ea5d70c33e488f676dfd7cd2
+AdditionalInputA.7 = d8b14a8195d9f8497375fa5edd84273d
+EntropyPredictionResistanceA.7 = 1c0ce6e370235bf5087d5b17cc5b5740
+AdditionalInputB.7 = 20b16a8716ae26b3554cc031dca3bde6
+EntropyPredictionResistanceB.7 = daaf3cb91a7bf431d74197683a6d5643
+Output.7 = c4bfd453c3a9984c1d9cdea2fd7c18ae4525a7f6c326f66e84ab9cae05599fdbdaef315a72ed6ca44e6cfe45562f84210f4b651281244f6d0135b8e7e721f704
+Entropy.8 = 98ba062d3e5d89741855e7aac3e298a5
+Nonce.8 = 9858209b1765cf81
+PersonalisationString.8 = 686b1be2c9bc5721bc2fa8fc07120510
+AdditionalInputA.8 = e4e2d019a1d5f80f67223853782f57de
+EntropyPredictionResistanceA.8 = 74dd2823e034ddce4bd322fd3f779a83
+AdditionalInputB.8 = 73f83aa5f7814e5f61e1c4aab1a4516e
+EntropyPredictionResistanceB.8 = 118a96eba91906167dd3d631e291100c
+Output.8 = ca5b2a08e4d1ec0e70497e4924bf83d11df7e2f8bb6519f220ee0be7ec90dfe88faf0e48909de1810d45b162db5a6d171937943ed390655c1ff0580b55ea39c0
+Entropy.9 = d24a7a21b2caf9847179b9e51e4e95cc
+Nonce.9 = b9da48d13cbfa07a
+PersonalisationString.9 = 720329311fc5350026d62f89d778f5a9
+AdditionalInputA.9 = 944719bf67a39bc8bdd6a85bd53a1e06
+EntropyPredictionResistanceA.9 = 6ddddfc222084630539b99e2a6a39f26
+AdditionalInputB.9 = 8701081dbc9245ed07a1d83c70d3f626
+EntropyPredictionResistanceB.9 = 37c48f6517e2f56589ef419ec23aa9f9
+Output.9 = 056606992d6c253c7da1e9f7ca1a5b5e8db4d8db68a548207326d11f3300eb0920a6517175a339dbf647c11ad3e66abd16ba0f263ebae9d43271a2ab6d874533
+Entropy.10 = bb1fdc7ad91471f71b2f67a4ecdf5571
+Nonce.10 = 7b741b9d605c81b8
+PersonalisationString.10 = 39bd5aa7a467ac15baad39008cb33a25
+AdditionalInputA.10 = e7c2ff317fa7604e666744f78f7778b3
+EntropyPredictionResistanceA.10 = 489b6388ed667aaaddec0f0861dfe392
+AdditionalInputB.10 = 12e38f51c004842c798a54cbf6c5c90e
+EntropyPredictionResistanceB.10 = 60014d2b01d822c9c61c1465d93ac7ee
+Output.10 = f0d4ddae278213be83fb6d01437332f2b3aec2c665e70b569bdff1724949d32bb672ce58aa43bf9269d451285a31fc984d87c0c21c1c6a0ddb5010849cf6c11a
+Entropy.11 = 21785fa01f3accb5bbe4a2d0b8be26ea
+Nonce.11 = 865701661a108fbe
+PersonalisationString.11 = 89a53d1bd59a6c145fbecfc4cf92c208
+AdditionalInputA.11 = 4d0ba94baa3673da58a8bbc7cca2bd2a
+EntropyPredictionResistanceA.11 = 770b4dd58023c7a5055b5c6f349cd981
+AdditionalInputB.11 = fbf6f8f8ca621085f34157f529aff10b
+EntropyPredictionResistanceB.11 = 8c42cfce948c4190bd41f007b4e6c8fe
+Output.11 = 3a501718689c61306a35a8f0ec53e1f8e2b2b70b0c01ba5ac4212041a64e2dc7be4c3edd66336e0e33e50031b838a477467dc541b635c5941779ee8990148780
+Entropy.12 = e8d109ccee5794595464d7d27af170f6
+Nonce.12 = 7732c81c9071c791
+PersonalisationString.12 = 82c21a0321771f905f9c60eced79200d
+AdditionalInputA.12 = 255bd70301bab0cd4309fe51f98f8690
+EntropyPredictionResistanceA.12 = bec9390207bfa405a40e41f3fdca9fc7
+AdditionalInputB.12 = 864619a78aaca35eeccd6539c1648ac3
+EntropyPredictionResistanceB.12 = fbff4fa2203da36a417dcd2ed7638c2b
+Output.12 = 6dbcc3c1acc6f215932f1c9145260a210919ad4dc017e2b29ab5e10a333b9b5b4fb9938b6c3a4e8fb1336bc6a784618e14188582854816432e6355e6dc5ab6ee
+Entropy.13 = c550c52b947b334d6244d9411b80bf0a
+Nonce.13 = ec8a230c20bdb385
+PersonalisationString.13 = 59a22a757b92bb09d148c7d8de588203
+AdditionalInputA.13 = 5c3242885cfff1bfab071c95bb74c5c4
+EntropyPredictionResistanceA.13 = 46c1e5f5b50795b27c7de2851fdfb9ca
+AdditionalInputB.13 = 2c80c3a031f2a72f1f8e52cb90256cf9
+EntropyPredictionResistanceB.13 = 998056246ceffe141f90b207d7ad9b59
+Output.13 = 2aaab26ecd470c129eeca186b838bbc7589fd827553c8c2fa7229b05063009404182dffcaa239842c97796fbf1e36e20f6355fad22b2412e63f3da3d671c9c30
+Entropy.14 = 3cf63fe79a2a3807a41fc37b8cf640ad
+Nonce.14 = 18f8be87232b9ba5
+PersonalisationString.14 = 926a2d6ac88a6d68a6b2e939e359180e
+AdditionalInputA.14 = 064539b2a297e6270fb156d142c138f5
+EntropyPredictionResistanceA.14 = 94f24640d43ad1c9c05a8fca3f0a3e26
+AdditionalInputB.14 = 867aa3a236f52719f080bc09c4d94972
+EntropyPredictionResistanceB.14 = 66626b94721292ed9c31f9844f316479
+Output.14 = 0f829f010f60547053418a7cb6a640506a1e9640bfe09355c0835ab5fded1110715475dc8d3a29ade1fa0f1be425ad05989c27c1491984b4b3daf53f724f16cf
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = a2b3600a72c55c4895f5e7dcf1c28c31
+Nonce.0 = 05485ac0d0162e09
+EntropyPredictionResistanceA.0 = 84e383efaaf018601eff0be3a2b40b91
+EntropyPredictionResistanceB.0 = 914594411a95a901776ae98874e1ba7c
+Output.0 = 5458bbdfbd722c0ba13ea21b88a0907c83edf2c5b23dbaa2b30ebbadaa21f25256397e8e49e20e6d376fb374f77bed847038f06b85f53badd6ab0a9f48e7b33c
+Entropy.1 = f5fd1328a741fa564d5b4ab98f15367c
+Nonce.1 = 3698878e22345675
+EntropyPredictionResistanceA.1 = c706e9eca7ebc0cd144480f62cd1cda9
+EntropyPredictionResistanceB.1 = c6998e5115c81f8870c4e944cbd24882
+Output.1 = 33cd392cef06f0f76bc5d0e7b7a3bf1b3d07f003aaf57dc5e903e1a8b774694601035b14d779dee163ea1cfa0fc81c7a7bcf62dd78cfe0ae2858a29d77a6dc95
+Entropy.2 = 493fefd34c1c7a06d0947b89110fddaa
+Nonce.2 = 17bf7f91e6062ed0
+EntropyPredictionResistanceA.2 = 13d97bd3b538356f179c530cf3e32488
+EntropyPredictionResistanceB.2 = c91e3f9b0228f3962b3ae04402aec549
+Output.2 = 4703527f4859266a50342b025807910920132c776cbeb2efe863b15652bcc79eff266552406d6eb3140a35516c980f87947a9fb3f306e785295cc2c96a07fab1
+Entropy.3 = 3ca26bcc6f2e9fba5defa9d79f6f0154
+Nonce.3 = c3945db7cd5e3421
+EntropyPredictionResistanceA.3 = fc8361f8d0f93bf7e690e639687b366f
+EntropyPredictionResistanceB.3 = b1211307b1052cb5a4b0400593b802c1
+Output.3 = e1eaf87214c9c7a1106b863b7391392452a2efe8fe6d756e49019c66850e0f02f369db9a0f9d945cb735f3a007e3f1bc4bde4487fb2947bcbbbda1781d0d161e
+Entropy.4 = 215e59bae22008b51013446c84371b93
+Nonce.4 = 0f7e67aab9ecd7bb
+EntropyPredictionResistanceA.4 = a61f34a75e41937c96abec510a19bbf8
+EntropyPredictionResistanceB.4 = 100bdf1ed0c73a7fa3f6475e71b90d98
+Output.4 = be34306c7b31d18059d4b9ef2a363fdf8aae2d2e15c03db368f41dba603a4013cb25c64ea9c5b02bd8b70212995b210351b0ebf88bc99fd055b3c2c31b3081c7
+Entropy.5 = 61d889d158f2c39d1765d6e4729a19e9
+Nonce.5 = ed12ceab19941625
+EntropyPredictionResistanceA.5 = 5323d95a4a0a467160e5729124a26e69
+EntropyPredictionResistanceB.5 = eab025acfa2eb1a21cf4d9434354770f
+Output.5 = 62fb4a31bf2332acc5474e22c916f5736d21ea6cfd1eb938315adf169a1829e1d79c7736b7c1905eaf20d7e1c352a78769d21001a25f453096fcfc415441b34d
+Entropy.6 = f946e590ca3ea3770c08e8e9173011aa
+Nonce.6 = 76a191646a5731df
+EntropyPredictionResistanceA.6 = fdb23ef9b6bb42aa6f251d4ac0d26c0f
+EntropyPredictionResistanceB.6 = 724b194413235a0901f1a4acdf8e37e3
+Output.6 = 3352c7dabe9d3465ce10ab95d3f24f33b213e799c94de120d7d6eb11f7322220e28ff5c0facb5ddb04dec68fd43e7eb0bfe1336c2e8c7f92ef3c03ff29a21f40
+Entropy.7 = 9242a71d6f8d3cf8cb86855e6c84c071
+Nonce.7 = 561962f3c409a3a0
+EntropyPredictionResistanceA.7 = 9035e0f2e7242f30b4bd7819f7d54855
+EntropyPredictionResistanceB.7 = e5002eed428b1721e2eff2c756328292
+Output.7 = 95ca1cb4aaba60ae933624f54fb82be32244be568759e4dcf73274a750214b34355d09877bc6ca68544a37ad250bcdf2edc8fd9fbd7b5bc499e3fc6ec7e79af3
+Entropy.8 = 54240ed982a1735a58976c3c8b1d12b6
+Nonce.8 = 6aaad072246882e3
+EntropyPredictionResistanceA.8 = fc5942fbfb12f3d19b30fe223ed278de
+EntropyPredictionResistanceB.8 = 67466af8ddde837dd285683e2c850cd2
+Output.8 = c44f8b22ab9f75c1f7a94a50c1ce2f412bbc4cc9ee8ccb83f2b4f20002408fe7c58f1ac3556686257ecfd1f365a08ea3ee0458a50dc229bb37a6770f44b9d661
+Entropy.9 = c2ba12996394a9ec1a37132277779346
+Nonce.9 = 9c8e8a836da25923
+EntropyPredictionResistanceA.9 = 76b78ddb614e6dd28b3230c6ee66ea4f
+EntropyPredictionResistanceB.9 = 924f3b62f6b17cbe99ed21e60f146ee6
+Output.9 = d08203e409ce7cb06af88b0a136e5871e3078d6cf2b37ccd15afaf91877232fb3a133fcdcc9dfef7b55621e1503ce743be8b26032e92db4636d9a12438e275bf
+Entropy.10 = 47ba3710f34d85a395dc076373d67a69
+Nonce.10 = 674e3fc0874352e8
+EntropyPredictionResistanceA.10 = ac761b26829daa9a5a990c2af4d36daa
+EntropyPredictionResistanceB.10 = 26ac3fd601d5cec3f562a3be5b3f7d4a
+Output.10 = 22f7ca05e4e1f8abbd13e26c702c2207b8dc24b3854b19d37e502b2b3d47ec80b789c7c20559dd7126c386541b281419ef6024ba5ac7d1617d46f7549be81638
+Entropy.11 = 10320210ea3a13d70985669a5fbb54d4
+Nonce.11 = 52f5699e91b61489
+EntropyPredictionResistanceA.11 = 456777af4f5156cdc2d0ee5146714657
+EntropyPredictionResistanceB.11 = 00c748725360c2759dc892e934b8166e
+Output.11 = 687943bd141db102641424048bde4394facf1db0926674954f06012026fc65f6897a368e6c65997daf337806bb58ff3a3d711db89bbab1d0a534e5a6c31d8b3c
+Entropy.12 = 3f7a8cfb5c560d18b5e5e62c55e99c63
+Nonce.12 = 85ab124391fcadc4
+EntropyPredictionResistanceA.12 = 3b84bafe463d42d6a3e34ae9735eacf5
+EntropyPredictionResistanceB.12 = b69a84167d8fe0ec1d800cde7fa3bd6a
+Output.12 = e5511af094e6b8e2f18557c46c56e0bebe7c45746a3ab4a2fd0bcf2f243b1a18c97d4016ba79b56bfe973ee055d8b70cdc5e62e68d299ab77b8096f05c9fcbea
+Entropy.13 = 59a3c943f9f35cfcb12ef9f9c0ea53f6
+Nonce.13 = 000222b9e89add42
+EntropyPredictionResistanceA.13 = bc8cf53fdf3257adc55607faf1ad4496
+EntropyPredictionResistanceB.13 = 55dd5c4860e7924350a37f9cb518b16a
+Output.13 = af6bd2f77787413e29ef04bcbcaa82c0b88638a9e0a2f4a572f9d717d75730148122819e9b3e0ed597c84a0b3c356d0098af7434423037ffa89a0191fdd29372
+Entropy.14 = 3651578d1c0e567c806f7c95b3a45522
+Nonce.14 = d642a4d4e75281d1
+EntropyPredictionResistanceA.14 = a98898a3a18b4483277f809f1e61ce8a
+EntropyPredictionResistanceB.14 = 2a8c04d6913583c0d46cbba369d7de8b
+Output.14 = 21366cea6a669f193659e6c5f77cd823e6d21d0e4c7d6aeb9adf208895691ff5b3c0492d860cd2ac5be103516c0d36fd2d8ad8000d7af2f7249ffe584617e6c6
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = c4e0e51d45891aa9b31f78634859b006
+Nonce.0 = a046fc4cc969c0d9
+AdditionalInputA.0 = ac3d13132519b2e70b41893645c77bb3
+EntropyPredictionResistanceA.0 = dc1ac451efe417e711ecf69569b1b716
+AdditionalInputB.0 = 9758af204152eb669e5fc120039514be
+EntropyPredictionResistanceB.0 = 1b603b8ce153ff789d74508bbddb3d13
+Output.0 = d70c5ad5672a6e3080d626d0b975791de59993b952a81ac6b728c350958b270980aaea538ed5e69488a77fda336467a1a9593d8a66ad3091e05e17a75ed7fce6
+Entropy.1 = 1735e27b042dd1b5768e6ad7720b711d
+Nonce.1 = ca473c140a8edbe0
+AdditionalInputA.1 = 3879e08844fcfcbf21e306e9efd7eb82
+EntropyPredictionResistanceA.1 = e53542cb32cf20603940158e47f72ea2
+AdditionalInputB.1 = ec043007399532d1af00d73f9a4f1b56
+EntropyPredictionResistanceB.1 = 82c047fce9a432b4e3ed2916ef570748
+Output.1 = ba1aa8e4cbbb8bd0232ce33eedf81d56ffa096f1f8e3617e3455e71d8a24bebcf27aeecfa9905e006006dcbd334eec4b99316bc6a1ef92dc6937934b4e8926d2
+Entropy.2 = 6a8fe1d7f9c3aeaa7745da2524d66c3e
+Nonce.2 = 103f02622a44e56f
+AdditionalInputA.2 = 299f9739930f544e6c1febb87f214c71
+EntropyPredictionResistanceA.2 = a5f362b2f2fe26e4718120a13f4747c4
+AdditionalInputB.2 = c03fe239f0445a7600cc07cecb8646f8
+EntropyPredictionResistanceB.2 = 37436047126251da75c3eff749d15633
+Output.2 = b480e94ab21f13710b9fcb9694d635cbee3226bb88d641c3617fa4fc94477bbdda49e1e92f8c2989ddbb2ad0719ae8e3515f4b205cf646086d645c4a45e64135
+Entropy.3 = a367c942f98bd98cd2132e6916ae2644
+Nonce.3 = f12f3e04143ad917
+AdditionalInputA.3 = 3c753649e0c737aca45ec207f07472c3
+EntropyPredictionResistanceA.3 = aa0d4350f299dc821880806668467314
+AdditionalInputB.3 = 4e746efb72f015250d5e4adcf522ff7b
+EntropyPredictionResistanceB.3 = 455937c025036823de50e09f15d56e5e
+Output.3 = 9bfb876590592fb92f1b53044ee08a66ec01086f76cb83a68b7ee3bbb4bb7d1531574b77ca418f28deb8fdf7ec54e56a3332099bdb6c1257cf2eb05ad04e989d
+Entropy.4 = 7a5241620584f85233eec93f989bd0d9
+Nonce.4 = 95ab8f25d20815f0
+AdditionalInputA.4 = f2e223cf110b62dec97722071094dd00
+EntropyPredictionResistanceA.4 = 816ead1bf61980dad6ddf8088c324159
+AdditionalInputB.4 = 43ba196ddcc99056b0424e03429ed639
+EntropyPredictionResistanceB.4 = e4e6014ca06369ec806c6c5d70b49e31
+Output.4 = 0e8e57609f9fd1ea5c2575d047fc1166efb862c62649cfe0710484967c031a5ff39405dd9261c952a0dcca20a8107bb5df6037627512d5a62199105b4685b0c9
+Entropy.5 = feb289cf791beb7dd4b0d87f5c805ea0
+Nonce.5 = 783961e0681a1fca
+AdditionalInputA.5 = 55063e0b56ee6adbbf00e6c1c775c803
+EntropyPredictionResistanceA.5 = 84ce9821b35f7fe98cbaefb3080c92db
+AdditionalInputB.5 = d3580eb4fb45a94af60794693df707cd
+EntropyPredictionResistanceB.5 = 1d3286234ae806eda33b275538e7fc0d
+Output.5 = 7009467952748c11b45ab8c1bfe992c9775c7152893f66c68ad7f36886ee25cb8f2e6d86453010854ac951629f1828fe5c85ba7c868d3dd45c2b13c0a0aa7cbf
+Entropy.6 = 2ac106674efab411f51d52e5d65e993a
+Nonce.6 = 79790182b2c3d76a
+AdditionalInputA.6 = 20b944424d654b50386d0d80ec3a0cad
+EntropyPredictionResistanceA.6 = 3ea42388d2905ba5a69cd62e2fdeec66
+AdditionalInputB.6 = 3f16b219cda6e92f9085767c78fa5056
+EntropyPredictionResistanceB.6 = e5dc83b1303dbf5c83fcab48e2ae6a70
+Output.6 = d48a95390a20f0f75bd9e2e588e14ab0c88efd70016195e0338746b24648a92f32ca860ff10c50764364b8146465e1eadc7241b0309b2aca6a0130fafe567350
+Entropy.7 = 31f58dd368c2824e6e80a7c02dbc367b
+Nonce.7 = 0e71a8c11ce8106f
+AdditionalInputA.7 = 9994997ed4324376cbebe98d601f13b5
+EntropyPredictionResistanceA.7 = 127d6a9fddae3be1b662f643a54ecc05
+AdditionalInputB.7 = bcf5b4ca255a3128ce84364985319481
+EntropyPredictionResistanceB.7 = 9fe8c75bd8fedfb3b2d1a52cca133dde
+Output.7 = 1fb4f43f8937c1b8b44e2349d81daf5737b4125329583513d957641cc16bc9a5228b4e2c2fc98a0b5f2df6dd610058d4539f0f507e7406efb893605b291d84fb
+Entropy.8 = d2dedd97eb0b45c590e1866143d13606
+Nonce.8 = 30aca6cb2f691009
+AdditionalInputA.8 = 8d89b8a9140584480094eb88af6ecfae
+EntropyPredictionResistanceA.8 = c6b6834fe40e9595b03723894a3ea723
+AdditionalInputB.8 = 316a848250597e51e73143bc36e3d3b7
+EntropyPredictionResistanceB.8 = ceab7c1f7ce2997021a759dcae06ac14
+Output.8 = 695a2833b7f72f5b2b005fe3237b74ad562fca3b8d139c150c9f094c675402279eda56a79415486f20341b1af89c27f87eedd8aaaa773f025e4be3f0b83800ea
+Entropy.9 = f9becd9f9972d891a2863ba86c78839c
+Nonce.9 = 8e2f8a508e1d0e56
+AdditionalInputA.9 = 6b7a9ee4190d9ebee2d257e9b2128ccb
+EntropyPredictionResistanceA.9 = 386074c4cae9b55026dc657d0c5abd58
+AdditionalInputB.9 = d30b83565c6ae1fd5420341c91b72cca
+EntropyPredictionResistanceB.9 = f8ca55a47a5d7e4e90aa4ab7185d4692
+Output.9 = b475155b6c5a8ff4d66e7ee2f9e48d3cd9045a6040f71f831b39cea490be035b76ef80c7f05589f4de02c7b4fcb1ba64f384132d2b1245992585c1d7cc91ab66
+Entropy.10 = 201eac70175e226b2965d06465879987
+Nonce.10 = a9d7906ed85f620a
+AdditionalInputA.10 = ab7961fd742bba79fe58d7455cf865ad
+EntropyPredictionResistanceA.10 = b58ca87d157b8c2dc395dad55f805b2b
+AdditionalInputB.10 = d4fa5dca9ebdc601b0902528561339e0
+EntropyPredictionResistanceB.10 = 2eaa52d5563429dc47f2d6970461a4f2
+Output.10 = 4802babaf43054363be930ea6d1e6f3dbe73e520eec7c9707a016099d1881b1bf28bafafaadeb1dbc686177395b6b3cc4fcc605eddec7d57184407220bf5c89c
+Entropy.11 = dfc2e3b3b14f3aaf151b2f17749cfb5f
+Nonce.11 = 0dd8eae1344acd0c
+AdditionalInputA.11 = aba55af266c8eb9153fcc145cc069e6e
+EntropyPredictionResistanceA.11 = b2bd8be7bfa0ee9f329af511c8ab631c
+AdditionalInputB.11 = d62a2a87d5d58a0f8224632e9a2d9da0
+EntropyPredictionResistanceB.11 = 42e2f384fb5ac867c64d40375e96309e
+Output.11 = a5d64131c446bc39baeb0169d7c25d107321240e7e6af0b405d8fcdb51b13171956cbd30898e559b9c04e9049d9f91c740bc65fdfcc6c1aede1c19be7c714b2e
+Entropy.12 = 9d32a93655ad5650994b230fb59ff642
+Nonce.12 = f706a7de48c3eef0
+AdditionalInputA.12 = faf63877f747e7080a2e71842b63f104
+EntropyPredictionResistanceA.12 = 1b2adf4b386432d60aa7fb764b06dba6
+AdditionalInputB.12 = 4e50bb0c18fbca492482c1a7a0b66019
+EntropyPredictionResistanceB.12 = a6afd3417d2d04a5454aa485d15ce019
+Output.12 = 267847484cf6883347a475257a621267d975938d292c35dde4a78b5649024ddfb5c73a71523a4d9deb66f2d83fad2c2f858ed5ab2e5ffaab6aa87397738a4e66
+Entropy.13 = cc17b27afb86983a775ca42a2f5582be
+Nonce.13 = 96b3194366d78cfd
+AdditionalInputA.13 = f6c94f8c76b4ac6479079332250d1a25
+EntropyPredictionResistanceA.13 = a068979be51f41f5ecf8b298cf507cec
+AdditionalInputB.13 = 16b64703f87fbbefba1981f473c46cb0
+EntropyPredictionResistanceB.13 = facbf390a4e597663ecb80d5ae0532c6
+Output.13 = f7bea94f8ef34567fc1e372991c4bcca008c0c6e607eede915b0e65253baf187797c8017f6e66fbb94c265fb1542ac919de5a6d1a1d64e131bf246c833f8ab21
+Entropy.14 = 8f9f23e05cf41f237fe8542d024d8fea
+Nonce.14 = bf92dbde6cb620da
+AdditionalInputA.14 = 2bd895b6dc1224876be8ca9efe772ef3
+EntropyPredictionResistanceA.14 = 1e4b4f234904868bb6a636a5ca4fdd27
+AdditionalInputB.14 = eab62c59cf9660790bf932a8fbb5cb63
+EntropyPredictionResistanceB.14 = d4b1f764e548985902c476bf8319c935
+Output.14 = 9dc3680f2b1e78c0745e29dd72f40e0f1ed1ea4e2e09649db16403be15e62f58de1aa6e32be5827d347849895e700c2ab16f4b4c0f2e85e6d1c0f3f61d12e112
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = be8e544590eaa45217b0711a1c66af8f
+Nonce.0 = 1fd542b1f36b6fa3
+PersonalisationString.0 = 784e7854285c86a8ff2665fd2dc07120
+EntropyPredictionResistanceA.0 = c6f1005eea059345ecdbe40992aa07d7
+EntropyPredictionResistanceB.0 = d2f1495cf003fa79acc3c6fcac45f61e
+Output.0 = d61660e24571182e4e8c0388bdc1856d9711c48bad2356a7510260a3d90602f98757e0b9b92b035b47f533162ed9c47805990b29dc9da13830b159246e7af57e
+Entropy.1 = e001dbb1de3e7877d91e9721534a5957
+Nonce.1 = bdb8616ca296507f
+PersonalisationString.1 = 2afcb4a72fbe43b8a353b71238b21923
+EntropyPredictionResistanceA.1 = 37c3b517e24f85af2b8920bb7fba597a
+EntropyPredictionResistanceB.1 = 24a5fe5b5ea01cc00585fa2c76a359b7
+Output.1 = 4486ade7b539ef6c459c8e26cf84d97ce64c1af2d14570698e54feab999e0af1533b73e77f69fc55afb726fed001dfaa36add47aa8724fd3316676e7531f5264
+Entropy.2 = ec90ebdba584dd5330f5ca15d82a7cc1
+Nonce.2 = 70c600d5e1a2f7e5
+PersonalisationString.2 = ac25fef9231e9480245358c408fae6de
+EntropyPredictionResistanceA.2 = 2118fadfad20642c42516b36c5ee0eb3
+EntropyPredictionResistanceB.2 = 0bee2af797c9fc61dc40be9eba2ceeff
+Output.2 = 9465bdc766a804ee551b74ad5af0ac19c48428984654eba9d7ecd8b43d716470a8568467f36214010b676b1ab3d8818734e0dde26d570f5a8856204e744d7167
+Entropy.3 = 70d575871d6d38f561d3e0d6bb450b41
+Nonce.3 = 1073ee1a8f255874
+PersonalisationString.3 = 5b71015902396536a90b1f9f86f6ef4a
+EntropyPredictionResistanceA.3 = 8df6642144f0aab4d62e863a60d0ec57
+EntropyPredictionResistanceB.3 = 819bfb6da42ffe7dc18a231897dfed1d
+Output.3 = feed5ad25177d29f2d670fb25f215085a0596da93cc90f6542ff14e3bbf8bbc514e61847c6ceda1bb4f1524e59cb6e7e81d97916a8e6c000a71ec1f2c45c8cb2
+Entropy.4 = 178bb5d9f4ba49d7dfed71cee104ec47
+Nonce.4 = a3f5a9a349eaf26a
+PersonalisationString.4 = b2f600e95d10c6f01b41b99335a11e29
+EntropyPredictionResistanceA.4 = fc4dd035e1fefb4db55b21343f7ee472
+EntropyPredictionResistanceB.4 = 5a0c9bd0201cfc9a983c01bb962de773
+Output.4 = 30503e2318b1c67123802cc5302df8d5dd5f097c80448607059b15bede38fe5fc449b743bed222926220fd7470d4c6223a2242ac4c603b9ccca800a72537b0fa
+Entropy.5 = 8cfbcefeb66e2b1f36a0b7e90ae55610
+Nonce.5 = d00ba4065be0b60d
+PersonalisationString.5 = 645d2121dcf0fe6da87af3b0bc8bba2a
+EntropyPredictionResistanceA.5 = ac39dc73ed83516319cea21dd2c2b3f9
+EntropyPredictionResistanceB.5 = a212504a89b759fd17e646a4430b8db7
+Output.5 = 117785b3833d418c82d4bd821bf9b6abd8a42435f6bd4a04fc2d2c250aaed5041b74d5bfd398097f81837b9a10c7ae5ba7936a9cebad31e2e0ac4dfc3f351bfc
+Entropy.6 = e184db5a90a06b62d3ada76bf1229caf
+Nonce.6 = cdc71c1b053ee29b
+PersonalisationString.6 = a66bd457454d34087c1069188c91c8b4
+EntropyPredictionResistanceA.6 = 94137a4ae04f4470d941d9e63e4ce8ca
+EntropyPredictionResistanceB.6 = 483563bd704aa7a14cc11e04d02fac3a
+Output.6 = ec2c75830a9a097c6731613b989e36e51600ae1ac844740987504800231654bf793b8a25c7ec69ae36f119ebd7b59ccc84c0eb5565184abe8331ca11e43f638a
+Entropy.7 = 22c5c48936cebbcfe0184fa17a930c0e
+Nonce.7 = c3f1784b3177f6ac
+PersonalisationString.7 = 471887ffedf5e8c71a407d8c8cff7fd5
+EntropyPredictionResistanceA.7 = 2b236d1ab68fb597a7a5899798919494
+EntropyPredictionResistanceB.7 = abd5615b4e5658a3a642bc90c75355c6
+Output.7 = 7303ebb9d0ad5205a63e0af482aa1078c743ae4a99e56fd90d6db4d8f58ebcd295084fcc159661a0bd7188cd0c7d96f9fb768621fa87e5fb3da39fc0976a2e0b
+Entropy.8 = 28af3057c2e201b63185287d2a0f45b8
+Nonce.8 = 43933b8f98667bdb
+PersonalisationString.8 = 399457f924f0997fbbe5221eb39830fd
+EntropyPredictionResistanceA.8 = 1321abfbb112bdfbda02adc47628c6fc
+EntropyPredictionResistanceB.8 = e4acef97c8ef8fa4dc051020ebde8c30
+Output.8 = 8173f681262e67e0f0a551dfee639f0ff335d33f702432c989f452277d1b47c8f8cbf0517355a240739cbdea2005f8eb1196f10512d7d2916011d3ad527b5cab
+Entropy.9 = 18d09adab3f01a50fc834ebf0742bcc3
+Nonce.9 = 8a98d7c7c24b70de
+PersonalisationString.9 = a26f4d078bcf3bd2b27ec9b27c8bda82
+EntropyPredictionResistanceA.9 = 6010003a622dd40751688cadb7ddfb3b
+EntropyPredictionResistanceB.9 = 71c2068c51a2e75dcb16ba8713e19dcc
+Output.9 = 7e015cc3c151e9a3b2fc3acf40e6bd5dca1cfae3f0f5825cc866b052457e6e63cc1095986ec8fe698a1193630fe6ba3e4e8406df0e274cc6994e1cf9c03fbe1f
+Entropy.10 = f510ccdab17242becc65b776750eedfa
+Nonce.10 = 4505b3388cb03178
+PersonalisationString.10 = b6108691af073ff4b5bc522e4c5f72f4
+EntropyPredictionResistanceA.10 = 40854b6d7a74d1e7c59cf62e88263c6a
+EntropyPredictionResistanceB.10 = 9cbfd25170724dedc0349aac036284cc
+Output.10 = fe77c942e71ac3e924f5e5f20ebc66941c793f02182a41eb25f28eebe999f6af252915e1605fd59d829e769b78d6137de25d777d48d1b6669041dbe406c2fd4e
+Entropy.11 = 1b4bc2ac123916bfbbb87a50143a104e
+Nonce.11 = b8ef32cb3d4d3aaa
+PersonalisationString.11 = 7ca461abd153ce27537a9a81cc9aac4d
+EntropyPredictionResistanceA.11 = 687d7d7ee0222700afb1e05bccb08b2e
+EntropyPredictionResistanceB.11 = 3be0090cba74a07db6cd49450d6f848c
+Output.11 = 25d624e1aa14bc000693b25f7d6d153ca58333795c40c4fd2e609aa1121cd6b6eed265cb2c6c154983fa79e88ff62eb46467179c33ff8c3dbec1a40d30ac50dc
+Entropy.12 = 3c8ba82a163ad85a995edb69d2ce8992
+Nonce.12 = eb06b6bae003f197
+PersonalisationString.12 = 83eaf9312836521d4dd4236e24fce880
+EntropyPredictionResistanceA.12 = 6f71e8031269e65f0c316109d3180219
+EntropyPredictionResistanceB.12 = 9b2cf784c3b3b1e3f1e6a83f6e835f6e
+Output.12 = 51e8e5696342193bc9ad70ded9b95d532591aca83a6a0ce99436108c231da8ab834e4d4770fd5adb08329d6a6aeb82044e54065476c51845f5c8be3f0aa16293
+Entropy.13 = a21d1474c5ec0aaa042929f931cad967
+Nonce.13 = 52ee53f40ab7e5a8
+PersonalisationString.13 = d7234c4339651e7b6b4bfac6472e7c25
+EntropyPredictionResistanceA.13 = a31b96f784a5e224dbd57b35ff14da22
+EntropyPredictionResistanceB.13 = 2c78706508057e9521eda9c3764b17e5
+Output.13 = 93989c71de4b19797fa6715e6935a9ada58b685fb26cbf24aea72e1751cdcf34751039f9dec1c60f0bbe7f7939d07c5de37107f28062a12c0dc1aa0f080e457d
+Entropy.14 = dc30e1db5c9a1b17186f7fca1fa79c92
+Nonce.14 = e138c3ceccca8e59
+PersonalisationString.14 = 4d43177637d338ac7418880c7e15b56c
+EntropyPredictionResistanceA.14 = a3a6539412451c4c50b2b3731050b77e
+EntropyPredictionResistanceB.14 = 78af6191e47ee4b5aebc9b89d2aa7d61
+Output.14 = 22876b47abc22b8358ece9e6af25d67a897e54f60760f0798111b8df6549e614f22105d155e1cd23f9029da5526aafae9eea16c6482c36cc1a2e48b3b05e98f6
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 41ad5dbad2b7dc53a59d55c472c4c38b
+Nonce.0 = e71233ae7d698a0d
+PersonalisationString.0 = e89c3ce6a0331d1d88b575205fed9138
+AdditionalInputA.0 = 9e2f64fd754f91943a050e1ef1e55ef3
+EntropyPredictionResistanceA.0 = a02c4e06eddab91a0637eab1532f72fc
+AdditionalInputB.0 = 3e1872f311ddd7e71eeddaf2c4a1ccef
+EntropyPredictionResistanceB.0 = ff809950ea8aa940d4fd714c02047852
+Output.0 = 5a80083c4894eaf174ea2247d11c829699f727868f9055f257b2d1e99e859057b5a81963564d80f3c8d46771d1285aec2475fcbf36902a13a1f2cc86c7bbfaed
+Entropy.1 = 8afc140cc107e5ed016f4542e0a27522
+Nonce.1 = b4688b46b7a33419
+PersonalisationString.1 = ef7fdee68d37861c04105a8c4afb303e
+AdditionalInputA.1 = 218f0cc88c46e9178ec25d814e306f1b
+EntropyPredictionResistanceA.1 = fbb98890249894ae58085c8688d4b036
+AdditionalInputB.1 = bae916f0c7b9c1d785815fc3cc163d6f
+EntropyPredictionResistanceB.1 = 7988a7b0ff93f42f988a471c660568f8
+Output.1 = 8d1e4f1112f3168450d8181dbf9bd6c2f4d87c89318760481ca28e46269e30cb2a6c8684614122caeb8ec8870487a99d3f2e55c55e5837e61d81f62985b0ac8e
+Entropy.2 = 4d27353e4f1ad08ebba57f10f265c227
+Nonce.2 = 5c4836604fec04b8
+PersonalisationString.2 = e3ebed6c0b099ed52ccf5b8663101334
+AdditionalInputA.2 = d5640c2b50d5ba01961fa5b393c513ac
+EntropyPredictionResistanceA.2 = 6a8d62568c8c8aa76d733bc2d229e326
+AdditionalInputB.2 = d6efd82e22ebd7ec651a5769c7597801
+EntropyPredictionResistanceB.2 = 00918ba4ff9b1465abe368829fe621c8
+Output.2 = cdfa1f0b3f9b9614257dbbfe3892efe23378013152aee61f1227df8b10d910bbf19c1ae7ddc2fd029dc3dd03ddca30ca3f91f57675810ec53156e41dc1c61465
+Entropy.3 = ca846c2be93f95405396bb5926a05753
+Nonce.3 = 0f7bc5602e6b3615
+PersonalisationString.3 = 75b671e0a97cbdfc42e62c5dbfe816ec
+AdditionalInputA.3 = 9d72c456d608e252b277c84d3178947d
+EntropyPredictionResistanceA.3 = e5d5fe4b2b0951d1d5de102f5ca591b0
+AdditionalInputB.3 = 955aa6bfc67eb45c84bfb007b6a7ec81
+EntropyPredictionResistanceB.3 = 5191f9730cade8563374d8350ecb77a3
+Output.3 = ce7fad45b0091a3218be9edbf1a73ff3ab8576315114dae498936e85345aec01bc7befbe70fbd1283a3a554c05bb6011ee8859ddffa2d9995c7eec98f3c8fb90
+Entropy.4 = 25a73dfb00a6583b0b62b9680dbd8881
+Nonce.4 = 873a6bb8a36d2b40
+PersonalisationString.4 = 94279a74d730d236331de8d2c3b8a108
+AdditionalInputA.4 = 7604ee178bf78d732bc1b8f886abec70
+EntropyPredictionResistanceA.4 = f1279f1654cdd68f5abb405964610460
+AdditionalInputB.4 = 8b843ca91d791806c0d3e4d922314eaf
+EntropyPredictionResistanceB.4 = e7685782bf0e85f709435e184d32498a
+Output.4 = 62b728ed9e0e70910e8f5e043c6b9838cf59bc6a69b89d8ee8f0b733eac21bcd7016c277cf7c1dc423304708a07438fc060e7ab7406127248390d8db884fa79d
+Entropy.5 = a7e7210e2072d84b3ecbbb2f49052f4f
+Nonce.5 = 79b98f53bff2dba7
+PersonalisationString.5 = 37ecd00b091ddeabe24d612ae081fa11
+AdditionalInputA.5 = 5901041e5953da7e69c794b82371044f
+EntropyPredictionResistanceA.5 = b5a96a45f4b6619858424a504c51d422
+AdditionalInputB.5 = b623b3c54486dd5d9242e108a5856160
+EntropyPredictionResistanceB.5 = a125891a24e1c5fcd0fe9bd1be1c34db
+Output.5 = bbb55521e19934af052b42b526f9c9a49ef89c71611f959ce214cef3e22918700acff99d9ece913e498bade9e30766c4fc33e13a55150209cfdbffb367bf6f2c
+Entropy.6 = 947c95dd718edcf2646ee27d6e5c2f3e
+Nonce.6 = d9d9b226f87647c4
+PersonalisationString.6 = df1045ff8bc9958c9a6b07fa4a1dede0
+AdditionalInputA.6 = eab8aa70d2b133913b8639a32d8e59fc
+EntropyPredictionResistanceA.6 = 942fcfe5eded1235408849cf580a10ae
+AdditionalInputB.6 = 2362433a55071a82a56c68e583f3d9bc
+EntropyPredictionResistanceB.6 = 6b6cef1a92932ea4c0c1ce5352043825
+Output.6 = 402a6849ddac827b56917ca98ef249777c874c986f8eee08dc6d992db400a40515ae0df906cfb0c108d92dbb6069b942b00d399f8e4d4f59b7106ae0eb7e51d1
+Entropy.7 = 615ef2a3b11b4d42b33a600fc5d19eb6
+Nonce.7 = ed64994028c9bd16
+PersonalisationString.7 = 7eea81f20158c332a81282482f4fc692
+AdditionalInputA.7 = e2fafd005af05d47d5fad65ff24a30bd
+EntropyPredictionResistanceA.7 = eb314160bf4f05b467754088289d5598
+AdditionalInputB.7 = 1a5aa45e126f11c0c19ebfbc574dea86
+EntropyPredictionResistanceB.7 = 461422e36a0a5c72cf8088bf4e254856
+Output.7 = ae1b5a45769bca07fc0ab2631f7272e8679b971e71116cb2db01cf7cfd025530f9ade0135a4da1657674c7e1afa13702d70c43c4e99d6a8f0fe8afca5ccff535
+Entropy.8 = 4c9d7956be59a030e6481465f89efc49
+Nonce.8 = ae796411e8e1573e
+PersonalisationString.8 = 60dc49fcd63363c9f50374380b6af2ef
+AdditionalInputA.8 = 21f493c7a5015fdf8220767a670073d6
+EntropyPredictionResistanceA.8 = 849ebff235cef6bbf44a43d8db9a8c19
+AdditionalInputB.8 = 6e0098bc175af2809ec71c3372f7094e
+EntropyPredictionResistanceB.8 = 5f8e9f7748f3f6d00999dc06e1682e2d
+Output.8 = 70716660e6e5b46d6f77f02b81ccd147f922961ad75da7083057588badd2b153eb8d3ddb721a7690def35cca01f11ba8ba8f57ebf07ee1f10d9da1e78056eead
+Entropy.9 = 887f973903fcf2ac5d2c6916847afb4a
+Nonce.9 = 8e1d946b87dcfd56
+PersonalisationString.9 = 968c2f7d2c88c4ac2661c7b1f8eeb4f6
+AdditionalInputA.9 = 76cefba8a152ba5e567c5fe962e59d12
+EntropyPredictionResistanceA.9 = 3fbd4284553c9cad01f3cf5f9fe16a45
+AdditionalInputB.9 = 6a38ac40cb5c30240be9e7b07c62d6fa
+EntropyPredictionResistanceB.9 = c1aa5755c05ea35fc0c3923af44b5ac7
+Output.9 = 65d3fc22411fa4a1b9278b4285a5c32f2675e12305b900fab8fd68e834deb394372c6b80ec56b92e742dbd854144772921bd5d4d8e86ea3ac2aafb17e5acc017
+Entropy.10 = 7c64be1d484ba433cb1d6469dc68d4f3
+Nonce.10 = 66ec35eaf49df5bc
+PersonalisationString.10 = 59aa04175d0447927bbab1362f40afc8
+AdditionalInputA.10 = 8b3201084075a382793e491d5cb59619
+EntropyPredictionResistanceA.10 = 36a90113ff8649f0989c1aabdd3a2a07
+AdditionalInputB.10 = 849a9b4dafb82c924c9b24b9afdb5c80
+EntropyPredictionResistanceB.10 = 53b4fee498d7db2faaf9b105be362113
+Output.10 = 0edf796f1aca9f22336e1e931021a6f999f049dc43beecf47dbe154b5814e0a2640773fe7ff77bc2771c5acde95d2bf32216fa1d6ae2b168c058819e5a81cc29
+Entropy.11 = 1722e3021389cab77922c6dead866a62
+Nonce.11 = f91f9d424980bede
+PersonalisationString.11 = 116c944fb1bd58c32cd8fd41d538e90e
+AdditionalInputA.11 = 46a310e8fdffb1498d4c1a8222dc452b
+EntropyPredictionResistanceA.11 = 8dcf5726c7129b60a230ea2876e46b8e
+AdditionalInputB.11 = c76a8dcca6dc6b1facf422ebc628ded1
+EntropyPredictionResistanceB.11 = eb69c3246d92d4db4709b8857ec757ab
+Output.11 = ce94eb338f13b3cdc63dffeb87ac4f5b403f9c9b4f927ba1981403dd2d7ca34b5325f49bf0088df96a22a3855f8707f1b8e98ff77f6b22b9f58addc3d583a975
+Entropy.12 = e018bc1a813ed29ea8a92a04796a16e0
+Nonce.12 = bbfb6b8fe0bcb2b0
+PersonalisationString.12 = ff3fd282151d8b163328e5635f4ef5c0
+AdditionalInputA.12 = edee73e86d0e24f5d03752d7c654df2f
+EntropyPredictionResistanceA.12 = 3f15ddc861878807d43a6d77acc40893
+AdditionalInputB.12 = e0e652627047bb564b4656a7327c3897
+EntropyPredictionResistanceB.12 = 2fb8eb4bd5f15b2afa6e58c3a83304c5
+Output.12 = b30d497e81e526bd5f04154a0940704e2b2e1fbe5403a8dcf290275755ff17aaa75ec8ce2a5ab740a380028326a28dd335b3c6205be2edcec3879e5547f910a6
+Entropy.13 = f8f9bf29a807c1d4a30f94fd5d51e3cb
+Nonce.13 = 57a2f743e654e597
+PersonalisationString.13 = 02358b1ab37ed125d44a30e328ca2fbc
+AdditionalInputA.13 = dc0cf953b9e469282d310bdb416c1ed0
+EntropyPredictionResistanceA.13 = 59a72d03ca97d772d0b534a6970cfc79
+AdditionalInputB.13 = 409efefb3be841333702a07da02f2cca
+EntropyPredictionResistanceB.13 = 83710815ecc65495a1273371c24d84a9
+Output.13 = 16589f1060dcbe6173b37cde88c51887e183bad7c808909f41d7401b41d0e59271bc82fe6634d90245fd46980441be1f845791dd29932ac43807313a0d2fa43d
+Entropy.14 = 2cb0c628319cb427983b6429de1e3d52
+Nonce.14 = 6db6a3ee4304b5f1
+PersonalisationString.14 = c508f233d0619fe0315bcd9495ada921
+AdditionalInputA.14 = dfd9f93e4de388bf7633597cc5f6fe68
+EntropyPredictionResistanceA.14 = 3eb46491b8de6332a409c764d51d5163
+AdditionalInputB.14 = 30c82d5ba61449c3f08235f4ae3efbd2
+EntropyPredictionResistanceB.14 = 44ea21ecf1e633d194c6642a7f58a6c0
+Output.14 = b3b705b0ab3f47836447bb43e2c3b2ee67156e93478a6220eb7d8477356531581fec6635609ae86742d3b928ad58030d0c0dc9e24a5f077a3f7b36d662bdb256
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 96c0b163ba84802fbde401bc58439ed9
+Nonce.0 = 9122455f724a3dcf
+EntropyPredictionResistanceA.0 = dcbd4cfbf658c3c8a4ac813c3981e7d9
+EntropyPredictionResistanceB.0 = b54586b4d8f675212d56261b4f2eb15b
+Output.0 = 7df5800c742ece363089a009b94d864b0d0d91a3ee8da7af8b0f307954aae564526a3e6721584d2dc703ebb1bc7bc7b7fb4a38fcea91482f71419cc41d31c437
+Entropy.1 = 2c903a584d809c67534ad19dbcf151ba
+Nonce.1 = 37cf5550f24c2fff
+EntropyPredictionResistanceA.1 = ad8197fca95f1682c2e100d731bae1bd
+EntropyPredictionResistanceB.1 = a789d8046082bc0a8f6cf465b8732611
+Output.1 = f1ab891fe1f325d9774ce25a6c1e8cbfade0d7a0f434ae69a5a4ea38db9b019ad88c8bfdc432306b523ad39526c28c9aec33511834a0be339d5121c88f568431
+Entropy.2 = a10a44b8d7de35318ba334267a62c4c5
+Nonce.2 = f448277271d0f037
+EntropyPredictionResistanceA.2 = 174ac8ac31e331afb8958a03c9ee15a1
+EntropyPredictionResistanceB.2 = 501bbc9ac3b1ef4317fcf0886e5a2dc8
+Output.2 = 518ae8449ce3944ca36111fcf27866e64a21788e28ddf14a35366a71273d53fb7f49ed7dc11ef0aca247f61253ddbe26f041ec4fe5677b5f62b9cffba1a06cf4
+Entropy.3 = 984b69bf0f561bc0f501ff45bf0dda82
+Nonce.3 = 18ece73a783a37de
+EntropyPredictionResistanceA.3 = 6965587cabdd230da59b5044c10025d7
+EntropyPredictionResistanceB.3 = ffd793d2290352b8a3372baa32f2ec2b
+Output.3 = 38ec41bc3484dea064ce15a13dd9d9314a5d237965e764f0f3c78d47ac59a68f54f0e4a9489009f55ebb5ab0859453b7cbb148c0cc7a9750e6a9f2fa05e2ee13
+Entropy.4 = e41592b02d67a014a0a39ea4822f2100
+Nonce.4 = 5775454fbb79371f
+EntropyPredictionResistanceA.4 = a814fcc932d8c76f6302c9f114178086
+EntropyPredictionResistanceB.4 = 4a161c9fff6fdfb59a235d8be590d124
+Output.4 = b8438791ebd151c8e785bc3683b083b8a5f7c44843f957aef669c1111731eaf72716483e848224fa7caa9b790eae8cef812cf7131c71bd4f723721f9e922abe7
+Entropy.5 = 44705e16ce1e70c2fbeb43c0473741f1
+Nonce.5 = 9ba32c1559e1e907
+EntropyPredictionResistanceA.5 = e59320b35d24d15f3045b1c7a7719380
+EntropyPredictionResistanceB.5 = cfbecf64e8015c1debdb85bbca961c35
+Output.5 = e2c930e4269b419748b6ded5d138ec5f0492aa495747010a21766455cc5cb2f9f77e39465a734f2cb99fc550637107002238e056046fc9b9958f4c29d19cf739
+Entropy.6 = 4c2c721464e38d41ea24af4e74b28886
+Nonce.6 = 8ac5c712919ca5e2
+EntropyPredictionResistanceA.6 = 786d6dc8303025f1fd6c9a3ac41a22f4
+EntropyPredictionResistanceB.6 = 1bb87ce55bc24b4111464a7212bb28ef
+Output.6 = 93ac42d69eb0dffbe68bc00ddffba557f8f403fe56a957905b0945eb2127704d5aca098914a1c394b06bfebac244c15a493365a0491770cdd5af2111c949ae57
+Entropy.7 = ec9fcf35a8ef18540feaa9a7a467b81c
+Nonce.7 = a16e4c1a13c22b4c
+EntropyPredictionResistanceA.7 = 6f9b4f30150f4ea7935732f27b06a7cd
+EntropyPredictionResistanceB.7 = 81da4503f176d30c6cc16565d3745fe6
+Output.7 = 708181479853b64b5c950fcab8970ef26db663c746d912535ae1736b74dde25153e592d665bccfc9a290a73735198482334da67233979c4aa0b31f69860cfbc4
+Entropy.8 = 65f6beeefed40841e227b444ea24eb58
+Nonce.8 = 295eee1e6ef2d523
+EntropyPredictionResistanceA.8 = f6ebd53a92af227b0ef2f7afa46e84c5
+EntropyPredictionResistanceB.8 = 9eeae244fc537b4df0b340020f44c270
+Output.8 = 821cf9f6eba8cfe9e28fbab300eb77dedaa3c40af0896c4360dd4c17cdfb726d13f08ea85f20f90b2e4275cce0ff63807dc41cf2b20d08e01cb736aea2a4b5c0
+Entropy.9 = c9ec3eb20eced3d77e32e439b4a2ca42
+Nonce.9 = 98c4aeaaa2b444bb
+EntropyPredictionResistanceA.9 = e41b081f39e8fb530c3b245caf6cf06b
+EntropyPredictionResistanceB.9 = 0f5d12d0127e8fa6723aab9fe90fc770
+Output.9 = dc9961bf94e109a38ff4c33602b3d596ac6d323c1d306d9e1949b3259a1cdcdae768ae7dd62091318467fbc1cfe433fef395ada77291b08e6956ad61b3840743
+Entropy.10 = 7fa74d5db48cb33b80a2ad3b9f814d53
+Nonce.10 = 0f7baecca17719e9
+EntropyPredictionResistanceA.10 = 4fbd9f7f7371368dc6f9796969de2315
+EntropyPredictionResistanceB.10 = 1bc146f4431166aebbffbb92d6814e52
+Output.10 = b9f48d30af10e973774e8f76f13632970e29a35cc3526344bd27fd0302cc12c3bc54ab3df73e54badead0edf05870d5d07262004225b5965234924598a8a8602
+Entropy.11 = 786e01cdd8f4266da0b89feee90b5940
+Nonce.11 = f0c2a6e8b1c65260
+EntropyPredictionResistanceA.11 = ffd143281761bfbbbd582d66fb4f6f70
+EntropyPredictionResistanceB.11 = 4136ecf5fa60a6e442ecd0398a0b3f2f
+Output.11 = f24887a95c066c258732f6a1844798f92dcbeee8a1e86ff125d7b07abd41f452388c4468d134a096c32558644fc3312769f6ae5d961a732101460ac476d66ea6
+Entropy.12 = 83365a3af64500f40ed957cfbe9a23ad
+Nonce.12 = a4b84e38f6dad5bb
+EntropyPredictionResistanceA.12 = bff15aeff62a1e12de3730d015f4ddda
+EntropyPredictionResistanceB.12 = f13caea137b7d1fe10a98f279474f33a
+Output.12 = 859300c9a6b2a7f236ccde7b75b9f0faaa2d6fea6e4a2fafa25028343adfdd5a26f1038b3b99913aa10039cb6f80c251b8480745933b278e61bbce00c6101a49
+Entropy.13 = 1d2ac954042efcaeadca1b9b5b0512df
+Nonce.13 = 01b4004f079a9756
+EntropyPredictionResistanceA.13 = 5b6e760ecbff691499f8c558fb30c9df
+EntropyPredictionResistanceB.13 = 19082c17cb8c5b8a68e9aa9dd5dcbe86
+Output.13 = 3fd59d71242b36c84c1af8087aceaa4cd14ea0b4b762dadcfa2a4f8a8820cf32c67d7c67979274302e79bf01d6f8db4f148dfff0c663b64f3b92620a0b1679b7
+Entropy.14 = e3f098bb88ddf42fe9869748752e8350
+Nonce.14 = 7f5c85f034fb21d3
+EntropyPredictionResistanceA.14 = edc0c44a85e393466586296206c41ca7
+EntropyPredictionResistanceB.14 = 405709837e502c58388982994ff504b6
+Output.14 = 383e46b86781f0c8c83b7a78694fff5fdc6de25147e9df250f996bdc6a3418d40966954e2a10cb87dcaff1be613b03afd89fef8b067c99aabf4012dbefe26f22
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 52fba91fc96fba3915b115cea9263a8e
+Nonce.0 = 64240cc31ef993cf
+AdditionalInputA.0 = 71371955a371a1e405a4b3c52945a619
+EntropyPredictionResistanceA.0 = acf12fb3f600c10976477d58bd865c8e
+AdditionalInputB.0 = 43ecaaf41545deab15da0f48cf7c9c7e
+EntropyPredictionResistanceB.0 = cbd98cb0ac6154487dbc83e4fb633c5b
+Output.0 = 88427bcf8cc6bd31fefa97a6178b5090d3954a76579414e797ebac9938408e600fceef884a792c6c7cf63e76fdde05acf905a77c2c31bcbf7c86e0c5b59b6887
+Entropy.1 = 7845d96b3f43bde5df61435406e18726
+Nonce.1 = 82cebe5b45458927
+AdditionalInputA.1 = b6d9bdb477bcf76bc4dece111049ecc8
+EntropyPredictionResistanceA.1 = 84dfae2af89b220414f59450f6cb0071
+AdditionalInputB.1 = ca8005e7631f2f301b7679f68864bcc3
+EntropyPredictionResistanceB.1 = 0b9c98781c42a606302bb2c5dda62093
+Output.1 = ff603251c62c99f9b2de77e6fe61a96f83d322e82e1bedb14d5ab7747186745fef1f61727016895f56ec2651c939281e72d8cc504c68f8b74594f3f8040ab529
+Entropy.2 = df553a750eccebd030c9d317e6e8f005
+Nonce.2 = 07ca4ee03c5f6627
+AdditionalInputA.2 = 8b0db1fbeb1725ce212486ff4458c7b0
+EntropyPredictionResistanceA.2 = 0b403304dfb9a6f10518a90e4a944986
+AdditionalInputB.2 = 6825bfd9e58cad4bf5d808d8f67ca52f
+EntropyPredictionResistanceB.2 = 14e1c1c94fad188e8991168b9663f8a9
+Output.2 = bb09625cd8ec660737201c56c1e8d15b2510674be12444ced68815cc680482b13f9c25cefbcf9d8a64bae85ab832b51011cd9f9c5a2a7bfdc1fe20541cff0303
+Entropy.3 = 82a2df7c78fb573d996e412a61ee9b5e
+Nonce.3 = 06c46a312dcb55be
+AdditionalInputA.3 = 66c1a8cab3fa3edc478db071b8e946a0
+EntropyPredictionResistanceA.3 = 385853a01c8fd40ba00ac64bb8b45a78
+AdditionalInputB.3 = eac6ada5439d4880d5b35b10434b29f3
+EntropyPredictionResistanceB.3 = 669418df7206b64bd6d008cd4dbfae89
+Output.3 = 3b1707ad87f9b6d5efc362c552f2d0d95ecc841cb4eef3030cd68242efecacc6cdea6b641c0a1cfc06d100ce542976cfc3840fef3d0e61c93e7ec028c4f46942
+Entropy.4 = f4f491fc1f81cb62f9549b6381f68e3b
+Nonce.4 = 169a0b7371fd56a7
+AdditionalInputA.4 = 044c342fdaa5088af9910c87005024e8
+EntropyPredictionResistanceA.4 = a7d44f400d62021913d396b3760a967a
+AdditionalInputB.4 = f77b5cd8806132512f183dffcc80fef6
+EntropyPredictionResistanceB.4 = 7ac3943f4c7ea03dfa210a7456a95836
+Output.4 = 32efdd57297a08c2e63a364b463cda3b0e64c9431eb705e54ece5e1e28bbbbe34eacd360240bf811335513019fc693dbf488897d5240fef5b950433554c37b06
+Entropy.5 = 6b43cb0328647254de7e1f9bde7c9cc0
+Nonce.5 = abe834f832202b26
+AdditionalInputA.5 = 1e15fff4d84a41bad27ebcb314675d37
+EntropyPredictionResistanceA.5 = 94e4432d5cb7f8dfbc2d468069d52087
+AdditionalInputB.5 = 90fe06938e6c036271b37f8cc0b05f34
+EntropyPredictionResistanceB.5 = 445c35fa6ddf6b22c89b55394b94e3a7
+Output.5 = 799cfb0c754801398e6034199a9cf82b73c91c139918dcd4b04a1d1e75fd9a616e7e723d375bf2ea1d6d56731d767811838ff55836bfd76d66c687d037e36fcd
+Entropy.6 = a973190446bae09e8c113e75841b6180
+Nonce.6 = 36a05ead56cab997
+AdditionalInputA.6 = 8ca0783d6ad6e8e5135435bfaf1864ec
+EntropyPredictionResistanceA.6 = d8c8741448d7b01acaa6dd1b93b95bd3
+AdditionalInputB.6 = e47cd64ec035431d6b261d080834964f
+EntropyPredictionResistanceB.6 = cb2dc133769844c612f16e08a3fe563b
+Output.6 = ac1a7bbbf5a476e946923140dd897dab7ae4eed524cccf26b111e43baa1c69d4f0259d5e2c0f7013c216d285fcbf31a71fc9ed6369bce4b18d6e6dce939000e2
+Entropy.7 = bcea9d5717a6c2778f260d25d358a1ab
+Nonce.7 = 1b310e8ed55ac9f6
+AdditionalInputA.7 = 5cb3bc94910dbbae3a4c84a3f3416f4f
+EntropyPredictionResistanceA.7 = 510937dffc8f41f056cc56deb8cfcdf9
+AdditionalInputB.7 = 6db02e96bb28e03028367d0e041b109d
+EntropyPredictionResistanceB.7 = 2e5538ca2898a5c18c39a95da016a308
+Output.7 = 9d9897f0e380dc6551de1de00ad9ba994968d7519f09b668cdebdc2083b7483b9ad53e883738ec239e3a8e534f76e495ec7c6cdba5906a0848dc53a3b5351f3c
+Entropy.8 = f9092d9e689f95db71cd4eb00360c0a0
+Nonce.8 = 65edbb2af5314e12
+AdditionalInputA.8 = d5333e5b67f1e0fd90d0034197e29640
+EntropyPredictionResistanceA.8 = acb7213982297c67749681bd601a4667
+AdditionalInputB.8 = af52a0617bf9cfa97b9841b752382d86
+EntropyPredictionResistanceB.8 = aa3aecb1b0dda283a2f9c7c07e5821ce
+Output.8 = 21b13bc7a52f3fa95ed4769cc1b9d40a302f176fac496b3b923c1f126ddb5efeeef4a10186d601631dab8eb63a5d9af6e37aebceaf61cb288b3a74c6f464f69a
+Entropy.9 = 9569a69bbc7c6413a4136899c60b933a
+Nonce.9 = 1a96a562c16928be
+AdditionalInputA.9 = 242e302893e806b6eb4512835805cc42
+EntropyPredictionResistanceA.9 = 4226a2ef741dc8ac1ac6341a6f100b0d
+AdditionalInputB.9 = 7e93bd34a314ed36915c0d49241f0b45
+EntropyPredictionResistanceB.9 = 53f4fe654c9921414962580940f7aac4
+Output.9 = a15e7ddd2520a4fff935af8eef53c90af97bde09c727b0ee148f21f8476ed01103c59a16743b69a224d6dbfe1864efafae0e7f0a52abf30954370f8d9aea8747
+Entropy.10 = 142ef7b51920cfecde353fc908cc1154
+Nonce.10 = 6b9b6a970fd7e299
+AdditionalInputA.10 = cd7eb2be471932f98fb8e97ec39cb1c4
+EntropyPredictionResistanceA.10 = bc4f9f446fe5f71d6d5dc9a4d291ce3e
+AdditionalInputB.10 = dda737bed32f2ad1458c6551581d3941
+EntropyPredictionResistanceB.10 = b473f3dc3276a6772cde058c56c40825
+Output.10 = 054af95cc8c1b7562defaa3fd0c3ec34589abb2ab9c828ed1ee9e51797f78ae2eaf2cfe22744901b4446de92106b0a1ec44a8d1954542d9d74dbf60e70ad5aa8
+Entropy.11 = aa1d3938d49a4d1c1570e383d3167a4b
+Nonce.11 = ecd57b78636f27c6
+AdditionalInputA.11 = a99eab88cc2a23d14e5043e2da6d2023
+EntropyPredictionResistanceA.11 = 9ac337aefd3f6b584de4a4f1fd6a1812
+AdditionalInputB.11 = 153ae97cd974b645b38297592c42d0dd
+EntropyPredictionResistanceB.11 = 350acdecd5827be28b99f0162a044031
+Output.11 = b9fc98cc81ea1945a2b0111fa9c98fb5acaba37c6958f8357b58b118ba84c6896307fdcb94a40fcf616023062c9f15b5d581858a355f8c8e9943fdc274a6b293
+Entropy.12 = b36602a061b1787f5434f1a65170aea0
+Nonce.12 = f113efa8faaeb2d2
+AdditionalInputA.12 = e2ee881179ebda7802e4db3709b47d71
+EntropyPredictionResistanceA.12 = ddb909c0e25c451fcf7f8c02bf6665ee
+AdditionalInputB.12 = ef022a6e1114bc2bfd75d94561f34ac2
+EntropyPredictionResistanceB.12 = 84aaee4a4ee956500e068841eb483fc7
+Output.12 = 8aca3d229eebe78e01d204483720c0b47e35e5e007e9eafc0fb0d1a227208cadf80ec4b318d686618cfd9979622279b7a17660ee5be8f6cee1868ca904a75060
+Entropy.13 = ec2c7fc4965921f691a0d4e615dbbd50
+Nonce.13 = 2a6f5ef1c6b5693b
+AdditionalInputA.13 = 46c92e3267cafe8322607b686ac6365e
+EntropyPredictionResistanceA.13 = 7390fbe095f4f552dbe25169c56f319f
+AdditionalInputB.13 = 55bd66adce61265133914deaa2f47069
+EntropyPredictionResistanceB.13 = 2c57ea41e43a6451b87a934fe86d632d
+Output.13 = 49d66cbf96550e64b486cf991ea664347be975d43773eb8422648c1a61c15337e142291ef9325a705a35eab4af859d1d219a2bb910e411591b8815ee35c58fba
+Entropy.14 = 5da80b606d8ac14fa07078bfc8f9445c
+Nonce.14 = 77f4aff7093f198c
+AdditionalInputA.14 = 821f95a4cc4ca76ab726cd7a3557a26c
+EntropyPredictionResistanceA.14 = ba7fa9b3ec4c558cbffe4c422c2a9913
+AdditionalInputB.14 = 793668540d09b19200f872203539b81a
+EntropyPredictionResistanceB.14 = 187aeebc9150359587e603e23c1734ff
+Output.14 = 5ab8adff77fef9d44cbe73471458dec6fe6a830505891193fc6a838eb2899e86b91a41aff62bdb3caf74e459405b66bab37b31d5e479e7fe27ddaa9eb466525b
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = a7284a6e7ca83fa8fab4e41c53e7711f
+Nonce.0 = 5060cbb867331a29
+PersonalisationString.0 = 9863d8dac713dfeb66a2a798a0756068
+EntropyPredictionResistanceA.0 = b2a48278ab12151757f6e6a9fc7989a3
+EntropyPredictionResistanceB.0 = 36ef9d02a9aa89e719011d1036a51283
+Output.0 = d320fe5b055a3ec0a48c9274a379d80ee00adc040b40bbbbf1244824089703d32aeacdc863f7357cef0a0582c4dab3b22924cc95373c212d85ea1a8025ab3c5c
+Entropy.1 = 6a548646933e4f7f537b5efc4cad0a4e
+Nonce.1 = 1f56c1b5bb3fb64d
+PersonalisationString.1 = ca18f26adabd47e8209b55ab9d113cd7
+EntropyPredictionResistanceA.1 = 565b81f0c910c8174c9b97047f334328
+EntropyPredictionResistanceB.1 = ffee0dc5e863aa163e69ffe40555bc83
+Output.1 = 1cfb074d694168f25531856adcd3f32d6e7b035da6848501c8ed6f53c80c7d08bdc3499a64c2fa5314aff3bd7157411e1538944bc17f1891f0c4091805324081
+Entropy.2 = 748ae8cafd0a36799c76aacf313d17f9
+Nonce.2 = f2288c1a93b43d84
+PersonalisationString.2 = 3444191e2564a3257c3312d921520055
+EntropyPredictionResistanceA.2 = 8fdfa2915965f6c443cccb7fd40649bc
+EntropyPredictionResistanceB.2 = 0464a7b38d4c50dff85a10c490b08c9f
+Output.2 = 047c5411a4c1f12a3964dfee81ece1a5638d2117e4d471602aa83a77ec3c04ba593e39ba3974eb6ffb98c79443d60ea047d3d99396844542a7abc9acafb07003
+Entropy.3 = b8cf19aaf124ccc655f1838bbcfc70bf
+Nonce.3 = 96e8710ff3676e69
+PersonalisationString.3 = 4bb5a82a03865991873eb66b20f6eb4b
+EntropyPredictionResistanceA.3 = 4857334520ab3e192aa466d7d5f522d2
+EntropyPredictionResistanceB.3 = 56548e12efc279f7904c84ba049594c1
+Output.3 = c776d7d8b334e2877b8a9633418a605174d8f79a48d4cc8cd66a9d378c6f836fa0eaefd0b6f625af20dfe8a4afd3be820aa1549c832b5af368a15d2237b9d887
+Entropy.4 = ee0418dfb8ac3ba3f02395dd53e20b0b
+Nonce.4 = 3912f2884844ed67
+PersonalisationString.4 = 6a141ad9f5a35e26571f03bba9786947
+EntropyPredictionResistanceA.4 = eefab2d19aaccf00fde63b613b6b0199
+EntropyPredictionResistanceB.4 = c3fec0d30f86cac47d3dcaa9d0327797
+Output.4 = e05165dcc226b169ca2ad8a5060fdd59f659e05830b3215bc532484e3ad0ff13881f1b3a09bc7b0541d29d18692ffd750ca3cad4c4618af0e6998925dce5b2f3
+Entropy.5 = e6b90db65e98edf89754e1d40c24ef04
+Nonce.5 = 8255cbcd214f4b8e
+PersonalisationString.5 = 975c3ff76bff8d9bb9580d6e74bdcbce
+EntropyPredictionResistanceA.5 = f555a261737736684e8e72a6d59a7697
+EntropyPredictionResistanceB.5 = ee4ce9ca181bccf1d3d81ac8dfeb2aad
+Output.5 = 435a51344ca9cf001d7aa1dc5e893b2c995b710e395afb3ec20fd566151ee462a5f506198ff6249ff0cc4d65ff3bc0d67bc411e70ab208770de48e40d6765f4e
+Entropy.6 = 9756a884a7977a4f72b4c125b2188dca
+Nonce.6 = ae7b70430c5e35b9
+PersonalisationString.6 = 1fb6ab91f4462206a95f11aeb88e56d7
+EntropyPredictionResistanceA.6 = 0b371eea8dfd137f2a06ec472c0a80ca
+EntropyPredictionResistanceB.6 = 8823698684694615653abe497e712a20
+Output.6 = b10f2ea41c54d60f21ed8790a77a9bfc4e892396416253d7047c8245a439c46628473e104a9b9e4dff6576ddfa740087f10766e872d1479abae77711aa83242a
+Entropy.7 = ce51478afc2dd1922a3123c1745d5cc9
+Nonce.7 = b5093d8156f94d7e
+PersonalisationString.7 = f4dfbdd616dda57eea89748dbeb07538
+EntropyPredictionResistanceA.7 = 73468a125343261d666f3cfe3319c815
+EntropyPredictionResistanceB.7 = 20a4816a123328d3c2eda2896a40ccbf
+Output.7 = 0f895636c52b8510e301bb8d3c28b8ab4c82f1755a20b74b8d0d46b8585ed16ee268efb2d99031416e951e243ff0b95caa021a90f5ca5d69a5d71045fbcba84f
+Entropy.8 = 0d85f9271fb8ef4a387c86b2dd0c1128
+Nonce.8 = ad7fb7163ca4a628
+PersonalisationString.8 = 214663f4ec37de766ca7f8091e846f60
+EntropyPredictionResistanceA.8 = 90e44d04dba4d05b3bd61b50d6e39496
+EntropyPredictionResistanceB.8 = d9fe495ff6afa4285a0ea66dbedecb6c
+Output.8 = 2f348e58872cf165abbc5cafd28d4936eb3ba9289d1ea08decb113c955727a2ecd0964ff8c29d4d91fb122306029d4b091b531791ab81cfc19cf613294824a04
+Entropy.9 = 0b451084b347139bf4f9e853dbb58d5c
+Nonce.9 = 1c73520966abfb35
+PersonalisationString.9 = b14dce439f5f43d76a4fe60da89c44b3
+EntropyPredictionResistanceA.9 = ba4d8eca834fcd3d1fe80e938f11fa7b
+EntropyPredictionResistanceB.9 = 06ac267eed6d8f47c596c7b53257a305
+Output.9 = c7e121755bc96d377500ac88dcf4f454659cc53951ccb17f97feaa269fee4290cb42f174a81bfaa1341b976d309eb46cb22bea1b62d4342c522c76b10953b9d4
+Entropy.10 = 07d992c8a729d9700ddf649a8d61dffc
+Nonce.10 = f669767f4cce26cd
+PersonalisationString.10 = de303dfdd92a0af656c2fa07b95c3ca1
+EntropyPredictionResistanceA.10 = 9ecee552dc77be87a5069bdb7dfaea3a
+EntropyPredictionResistanceB.10 = 86d8aba30ea80183fc3f4bd75974b41b
+Output.10 = 68fc689f42d6d28d337f8e4bf7bd6b58a18072d9a45b5803f75a944a8b4fd62eeee27de938a8647bdd4099b046dc511dbfc1b4684851e17e663bfbad3c8c1ad6
+Entropy.11 = 6cc16fd98a460bf7893492c5448360a1
+Nonce.11 = ac2348c59ecaed06
+PersonalisationString.11 = e3606188679041308887596de0a84703
+EntropyPredictionResistanceA.11 = f719f92f53310581886464ae48c86952
+EntropyPredictionResistanceB.11 = aebb99ad1c3c6d8ef9f65e4e40cabab0
+Output.11 = beb89ad81f87ceb80649e886a9f4376ad33fc329213f6621d742472023437844fe6b793d2076fe9452dc771fa6e59ae46a57642cdb246820abe08d62269b8469
+Entropy.12 = 59cd16854c0eb7f233c30fcc4138b049
+Nonce.12 = 81dce7ed37d6e251
+PersonalisationString.12 = 60dd029e967433290798b57174f8070e
+EntropyPredictionResistanceA.12 = 6567ce0837eb8c4e10729d67515fdf5f
+EntropyPredictionResistanceB.12 = 3c73a578f36be68331b9670cb25b989e
+Output.12 = 8cd6be88d24ffa127d72897ba7fa9122e8518b38ba693dafb0647f09109f17665c48ec5846b893ab80ff726023a34cad6769b7d7a9a46a1a4393ad1fbe43b087
+Entropy.13 = 34af5ff0ff1e17dcc86907f3151c4dd1
+Nonce.13 = 8988d9a475fb4042
+PersonalisationString.13 = a53981c90ef8c77fae3f59bf277c2641
+EntropyPredictionResistanceA.13 = 970b7ea4bc3d1347c1ff46615daa05cd
+EntropyPredictionResistanceB.13 = c096dc014655befc7b4fc5955b975428
+Output.13 = be56a788ec7592e49e831ba4a4dec75775f6a57ffd368e66c98fa36b83bedde712b768d75781bed06e049dc7dcab36c6cc20e091e768c7c32d168ab9adc048e1
+Entropy.14 = f511fd279127d2f080c2640946a8adef
+Nonce.14 = b988d14a72be7c9c
+PersonalisationString.14 = 6faedb45c4578b51877fc4c812efff33
+EntropyPredictionResistanceA.14 = ca4d2e40f166eb66a146c2fbda86aafa
+EntropyPredictionResistanceB.14 = 643ceb41ff41d006cff54d999646f3e6
+Output.14 = 928404b3dc1069bbc407dc95c9790f0ba9f3c681266616337e2e40cb38791a2956ccab3b0fdc1ff75e64962040a329a0a092d6faee9ad35448e3e7a4158c8a79
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = d3454b257ecd83c3be96b8f5847be6eb
+Nonce.0 = b241f1295df4d999
+PersonalisationString.0 = 6e8d9b4dd8d17ec91111a4cb93ba4f25
+AdditionalInputA.0 = 0bdeb888604db3a7b615b5bacbe42500
+EntropyPredictionResistanceA.0 = 66d578535e2b4b41560298fe7fd9e240
+AdditionalInputB.0 = 79f38dd58d835f1ae58955bbdb500cfc
+EntropyPredictionResistanceB.0 = 1d97e89c603915207a6560520c4feb00
+Output.0 = 267549079e946a1ea72416ab4f57bc9c7ecde73e8c5c7993e2ccde38f854edb4c43d5766da71da7013ae71f4366b8d1cfa196d3f0faad2ac98c425c56adbf312
+Entropy.1 = 477f903fec823493368adfc48b474281
+Nonce.1 = fc51c6bb4a96d821
+PersonalisationString.1 = 8dbd6413aeec56c57ddfc152a092174f
+AdditionalInputA.1 = 0be048c94831bb7ebcb66913ee1c8d22
+EntropyPredictionResistanceA.1 = c4700c54d6df864f509912fc8836b099
+AdditionalInputB.1 = dbf700487fc4e020148caea011565501
+EntropyPredictionResistanceB.1 = 1c2105c608ad7bf039de80cf71befadb
+Output.1 = 3dee6e084e755a74ca61725947e36276b0587dddb1eeee1218afef72e9cb0acdbd158e8dd59d197c40291d8c930f278ae483268962594d375b849517287909fc
+Entropy.2 = 8d2e8b6e09a4f9edb2a30ab0164ed232
+Nonce.2 = 6a8ae5f15c0b4c21
+PersonalisationString.2 = 9b463f43b20d3ec3f78d2823abfa9a96
+AdditionalInputA.2 = af24932b03d6bcb8e9a4c6b626726922
+EntropyPredictionResistanceA.2 = ae7867fdde8453b4913acc8d9bd83b5a
+AdditionalInputB.2 = 9f25728969a8d90d68c6757f8323124e
+EntropyPredictionResistanceB.2 = d187f1a319f8b0c57dda743796ce1972
+Output.2 = 6e6f114bfba3448fa47149ca4b4b334425054d5c5213d6f1a50be0bd9c7b3acafa3dabe0633be1b5a4bfead839ba7e5f9b85e7097d406a5ae01802276b7b504e
+Entropy.3 = 67307048f5d5f8d6ae4650a862a4dad7
+Nonce.3 = ba4437adab2d3513
+PersonalisationString.3 = fa94f6da8c149859e9c125d4161f225f
+AdditionalInputA.3 = 332264c64568ea0f7a99de15dc7da984
+EntropyPredictionResistanceA.3 = 78b6342e3f9ede53c2e138c613ed6d7e
+AdditionalInputB.3 = a1baafedf3adce4b0dd97a23aaec5dca
+EntropyPredictionResistanceB.3 = 48c6aa9c70892c562df5b222f28dc058
+Output.3 = 7374ed4e08634f8cc117e905b5c5b9bfe49ac5c147e5389ca18f0a4c950c00d0397d73b16d3d27e1816c1bf4d725abba3561990599729983224d1b0f8fff1b7f
+Entropy.4 = a010e8b9c4ff380c65a76313694e4087
+Nonce.4 = de800f31e801d0bf
+PersonalisationString.4 = 79960b7857c80eb37113d5df7a2f9d34
+AdditionalInputA.4 = 8110912e9a54557bcbf4e69cdf895135
+EntropyPredictionResistanceA.4 = 0bb7e40aebecad3e238d5ec1657b0671
+AdditionalInputB.4 = 7a87c1a2de26d4d8358a0759d7a2e204
+EntropyPredictionResistanceB.4 = d242c96f8d8b3b18f69decd1f008b4c5
+Output.4 = 1d2969b2e3ee2929040cd4f4031f4f96da2318ee1081dc435f76554d0ff719dd6f5a92b3de94b09ff5778c25e3dbcaee51d933a3a6a406d12e3ab3c3d917403e
+Entropy.5 = 55ff77e5596f57a0e7a001716cd7a54e
+Nonce.5 = 9e2a85e9df7cc2e0
+PersonalisationString.5 = 8da45cb7db5d84b7521b3839fb339982
+AdditionalInputA.5 = 4be5dee67a76b73116a3fd876f5d2354
+EntropyPredictionResistanceA.5 = 3dce58c88c83a59539ffb38a7a44f307
+AdditionalInputB.5 = 9e744a9bed67b50c8f2e45815742d11d
+EntropyPredictionResistanceB.5 = 97a7190af968919e57ea167a26ffabbc
+Output.5 = 3680cc481950e29512afab388b5a9bbba7ff800ca7bf3b2d901a4ecef7eadba078cfa03aa0d5bb133c09cbd30ad78b999d27490514b95e4b8bdd75c986c42f8d
+Entropy.6 = 241380afe31b6b2ac7b2b2f53f6fc6c6
+Nonce.6 = d8af32be1c920499
+PersonalisationString.6 = 2e4c7320342695ba1191202e9e9f48ca
+AdditionalInputA.6 = e54b05e131e94476b707eddfb3b0fe54
+EntropyPredictionResistanceA.6 = 2252d695c1c4b04d580091451dc0f20c
+AdditionalInputB.6 = 0fbe36bd848c75218722b42048c7c814
+EntropyPredictionResistanceB.6 = 0a7a85c16bfa0fc83e2f2afb74de8769
+Output.6 = 0129722612d6cfda1b464d318f1e909ad17b97882fb7a50e089d4716316f6cb946139920b6a83e172b9e531cc9298b9d311e3b00b76cfac08022049026516c12
+Entropy.7 = cb5695c6bbe3729a61cc6fcaed753fb2
+Nonce.7 = 7faa9834149bba80
+PersonalisationString.7 = cdfb8f2935cc9239c58d60bb18032645
+AdditionalInputA.7 = 72af1adc552dbb13102d7c4c73825587
+EntropyPredictionResistanceA.7 = 8e55aafc86dd452e102a58eeacbbdea1
+AdditionalInputB.7 = 24b9b73e5448cf2f7ca477ce812ac320
+EntropyPredictionResistanceB.7 = 255c044827cf7cd9f63f41b58627875e
+Output.7 = 65c2a905486ea8034df6bee80fb831bb237262aa40574508dd83333f6acd129365f1bf4cd7945eb8bfe22394ea44af2d101fc15ac22d32c414e20a1a9c4ffa9a
+Entropy.8 = 59d408ad234d63586e58e4147ebca373
+Nonce.8 = 02e030c3aba4432c
+PersonalisationString.8 = 3954d0df1adb67da7696e95e572606d2
+AdditionalInputA.8 = cf72656445ad7db06e39257a99ba62af
+EntropyPredictionResistanceA.8 = c09d05938eba84501ca077aafdb362c7
+AdditionalInputB.8 = 3e0bac936ef52ae7cd7422f09648b97b
+EntropyPredictionResistanceB.8 = 93df31c43c5cefb2dab7b3a7cee527b8
+Output.8 = bde79b68631e05e4bc404b295082e8f3210680fbb3300fe7c0dac789e1b0751058ecfe5bc0dee6500818d1ac8bf30e9d0bc071c915f4be4e1249eecbb03dd5f5
+Entropy.9 = f543f7252137e09c92f2aaff795fb43a
+Nonce.9 = e4fa007ffb7e72f7
+PersonalisationString.9 = fdbecc9de4010fb76ea9650e3262a22e
+AdditionalInputA.9 = 2d941a3a249c8c41cc2e1f702843c579
+EntropyPredictionResistanceA.9 = ad2ace183e9a14a07691561d2926878d
+AdditionalInputB.9 = 4522baa130cca0564251eed332bf28eb
+EntropyPredictionResistanceB.9 = 3cf3d7cf442d2e5835487a41b7b8716c
+Output.9 = a95ef089a7e6dadc1bdde1d00a7322cab2279bdb0e96e1f5167593002f184fb92d9acd23643e7667a50fc3eee7f88fd7dad9d8e4a21e82d9e3fedf89d729ee07
+Entropy.10 = 00e056e4cb144d2b978adc69e3ba3203
+Nonce.10 = bcb5112eaf9af9c0
+PersonalisationString.10 = 42b7e8697e91ec6db84631cfcbf83e07
+AdditionalInputA.10 = 2959c200c52c0c4d94bad61311c10e32
+EntropyPredictionResistanceA.10 = 86f6fb16939e2d32c1ef6b93bc418a7d
+AdditionalInputB.10 = 96f812e9cbd560d116d31d27fb85bca0
+EntropyPredictionResistanceB.10 = 888f04e41f794a4b0c9ea80538cb3e89
+Output.10 = c85dad45fa30c3b062091966954b07ccd8d55bd6f163312b1ce7a72d8192601c5b4d827175bc826e9230459ef2126af611e9279666a3ebf038281ad2ab325dab
+Entropy.11 = 3218754e66d99b5399d4787e7195e04d
+Nonce.11 = d92c5ad898deb223
+PersonalisationString.11 = 7afcf91548e9463a2a65fea9841ca657
+AdditionalInputA.11 = fcf72dbc3ab584e49d3b51fb04a514ad
+EntropyPredictionResistanceA.11 = 5a74c678e05beeb3151f7f6773694581
+AdditionalInputB.11 = f0778645b1698573ad80cf03f2274700
+EntropyPredictionResistanceB.11 = c99f69a050de0d9b1b5dc4b5ed78a391
+Output.11 = 5947efb99bf6fa94c2681792b04e3c71e2124541ff947a8d1a975ebc96c48d3d416252394c1e3b0b887e8eee5e98a8ab378a0654e3f8bd39cc9553da78fa8f30
+Entropy.12 = 203d5bfd371a096fca574c807e0d65c6
+Nonce.12 = e0c5f9d14a7a6351
+PersonalisationString.12 = 2469b3bcbdb57221be63af1941cda312
+AdditionalInputA.12 = f17f6e4ee9fdd8276062d0823d2a7469
+EntropyPredictionResistanceA.12 = a976cb0b5ba557cb5aac8063e98841b4
+AdditionalInputB.12 = 27a998bdcc1d39bd283e70ca5344c71e
+EntropyPredictionResistanceB.12 = f501c8fb6453ebcde632f826441889c5
+Output.12 = 24297f6897b44c9374450ad58c6d2cfbed7c41232f7e341ac8cc39efa67634b4eb69cc3397d6b7637210c9a6b49e68eee2b873452697c127fdc16af43492e4d7
+Entropy.13 = 415af3565ed0248d479c0573ffc78712
+Nonce.13 = c358af5d8f88310f
+PersonalisationString.13 = 872de4753455c25bca99f44401fa54f6
+AdditionalInputA.13 = a98abdf5f6f3ca8aa06ca31fcdda3bc0
+EntropyPredictionResistanceA.13 = 9c56be08b80d572bbf54c87c377f7cca
+AdditionalInputB.13 = b152490c644aac0907249ae372b54706
+EntropyPredictionResistanceB.13 = 46762d59dcda4b006e2322041cdd8213
+Output.13 = 6185d9db80317fc918cadb6b0d60f01846fbbfe2613b2befb511c0a362cc5a89e7d0d79faaece373bc7fc43b52da1585faefcf93e965bf3dd353f0886938d793
+Entropy.14 = a4fc2ede2fe720dce644d15d3fbf2e68
+Nonce.14 = 4380d3c272612ff3
+PersonalisationString.14 = 69331b36743309d3240669d2504c210f
+AdditionalInputA.14 = 01b75e68b286e09c19aaea8b354f97b4
+EntropyPredictionResistanceA.14 = 3eacb62d89279b1e4c3dddba05b2f0ef
+AdditionalInputB.14 = 832f01eb6516ae5c1942210a95a241ee
+EntropyPredictionResistanceB.14 = 684d8b39e8bd42be60b4378ed2c7ca77
+Output.14 = 4508a1c4b1b219a66475f694cce1ea04a898599b2dbccaf7b8dc00d553e1355d591fd99c5a575b40d1847eaf99906d52d3c8ccefea0d175e58650594b208aaa4
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 965fa6a2c4009c045cff728f244238262508bf008dccef30
+Nonce.0 = 1d22591b097873d124c3f8c408f89161
+EntropyPredictionResistanceA.0 = 9718b88042a4b60767cae0ffc797e688b0fe3819db2a4bcb
+EntropyPredictionResistanceB.0 = 73e3f0fdf380e5e6126ff9f3adb34ff5bcc45fba0ce1d248
+Output.0 = 909fd2c971921c77322e1df273a07d19f527133e56a9be388c298ca6830873d1e847b8cc654dd3c57c1c8b25fd3909be847c1a281108940fe7f06d9db60ad7b4
+Entropy.1 = 835065d5873fd06b4503143abae05a3ede86eca322e9c432
+Nonce.1 = c118316710411376e3a34c9715608af3
+EntropyPredictionResistanceA.1 = c4ff67a74ce7b1abb68741fac60f38183aed1112c8e859c0
+EntropyPredictionResistanceB.1 = fac1826b054babc2d7e1e647e06c81b8023f0401c2ac396e
+Output.1 = 0cbf9497ff1e9e681eeb97290ae5524dac82db797498b50ad31e2c257f5166c3b983bc95e0d26d24a0d613fbfb4103b44983a6fdf2964b4207d5f8c753b7c9f3
+Entropy.2 = 83a04cca979e16259dac2aa2e68079c0e8ebea8e906772e3
+Nonce.2 = f4efc8b0a91955916d82031a240325e4
+EntropyPredictionResistanceA.2 = 05b3fe96a7358179d832861eacbe25ef6623f409ef8c63b8
+EntropyPredictionResistanceB.2 = c4d868d2927a9ff5a4d84f4ff46f5d2cf04ba84500e15408
+Output.2 = edc9ee068c2823df26d6ef14cc33f4026c5c8d8992b7e1fd3006319e60658e7777ddf3f46f38f5dfd22415dc1957d1963f33196724324c96abc03944bcc163fa
+Entropy.3 = 50cf552e0e6c3fca00da03b31bdd77bea159931751e5884c
+Nonce.3 = fdb281104ec0bfbebfd4ce6593a75e3e
+EntropyPredictionResistanceA.3 = 0f6cee4c34dcff9d1f7c7c93bae95a16ce693798302ca794
+EntropyPredictionResistanceB.3 = 796290d6bec07013fae562a2f6187b4b2b3f4c6dd8d4fd47
+Output.3 = a6f12634735a894bbb14fa368abd15b21981f43d72dd4da800f6173c2c8dcc2ecd1ab4aec49aba40d508f96dba6ee10d886b8bb417722e52823f415227be7b3e
+Entropy.4 = 42f3c7304f6c480ab8efe5e1ca17f8dc2bafc9e0270ce310
+Nonce.4 = 686122e3df7a4f5bb752c60628fded56
+EntropyPredictionResistanceA.4 = 2b9722b9343bc5e1a78437114831b677be5a0d6437da4b2f
+EntropyPredictionResistanceB.4 = 9225b4c1277cb6fc3f0e48904f15944744e0b051f8e54b7e
+Output.4 = 9042d3190ae363775c8ea7837dc172ad9aeec6d0c5ee29115bba141c7b2c1b034c2a9b6971d67835bef2953513df6d92353682515deef415ca76f45ec7a61763
+Entropy.5 = 6a0d634e6618cc38c3fb2ed99cef8490570d9aa87912bf2d
+Nonce.5 = ab3148f40609290ecc0861aff1c5d209
+EntropyPredictionResistanceA.5 = 0e322c93431c324b37f839c96093b0d8b8dbc322a0ab4f92
+EntropyPredictionResistanceB.5 = 0c4500f0c937f67f3ee6f817fe8bdc02ce4c97e697b0c989
+Output.5 = c2f1b3dcd52d6865106006fc675b528814906494dba2a0c16636ec5fd6a8981eeb6bfe640cf785d47981352c510cc181ea71aa2470f8a97addd45939081c3b84
+Entropy.6 = 30de9ec03503eb2c6046df9c5024ef248e53851f2e2f5e82
+Nonce.6 = c21e8e1354c0bf007d5076cd571fae51
+EntropyPredictionResistanceA.6 = 7ca28895e4b2096704227a2a1deab7efbb4810c4854112e4
+EntropyPredictionResistanceB.6 = 41be842e22904059d83878c949597989dbb028bdc7e4e21c
+Output.6 = 1821964de8bcf0573d96535c25ed6c0222cd0660b551683e0500461201de72bae73cb20b608d276bc7d8013927af358eab60bc962b2887d327672ec0db0d1b41
+Entropy.7 = 5dd9074e424590be333dd89ad246a783f5e48e5dafcb9238
+Nonce.7 = 1b6d1299e9e780223548da3a1e924713
+EntropyPredictionResistanceA.7 = b3e43677947c92563ee726031497e52be54e839c17dcdf1e
+EntropyPredictionResistanceB.7 = 3509379b91a53ad5364e90833fcffad766498add2dd9acdb
+Output.7 = 7b6be6051797b3228e257771f34429184cd8044fb1d3ee6d1e9c6cc26ade4fae6d5db91833d6dd56cf372af766dd6f0b4e40b92196dfcc15cdfc8bfafd303495
+Entropy.8 = d1bb4ccc035fdd734067d07899fdcec24a52546a3d6e14f4
+Nonce.8 = 5d7b4a176d222e41be64f62dde1a6244
+EntropyPredictionResistanceA.8 = 980176b5d391f4a0422f0908c69b20bcb9dcb9b3a193fb29
+EntropyPredictionResistanceB.8 = 7b3ebe6c6bcc59542aea0860110bdeac7a20f9a430b7fb2b
+Output.8 = c645ddba51970feeac961595c5d6b2de1efce6951a09e4a14c81741d631f8e1939ac25e0aeb1f59c280791a226e738a98e6d134003e519d8dd9b9a4ff22e6e00
+Entropy.9 = f0b24a7c6c0a56ec473619da5191e1fc40361e43abd0b879
+Nonce.9 = d9e2fcadbb83fe677b1f9a6ff5a7f3ef
+EntropyPredictionResistanceA.9 = 71e634bf65dd8ac7e35e0a3889a93aea061c2764d57ab6cc
+EntropyPredictionResistanceB.9 = 667db2a2643689fa9f602d2883b5b745625ec3a75bd5d7cd
+Output.9 = 2fe55e3ced7318efb65848e6d7d002502f18d40081fcff6d0613aca11780cb271b1d8a7d3e31518cf3faf9f3993b7f9f897c11c07d67a51845f1b0fe585535d4
+Entropy.10 = 2a2f9e868239ac23be4c8d184157d44f86f1c276994c1d02
+Nonce.10 = 784dc90d952a9decab76055105094362
+EntropyPredictionResistanceA.10 = c41955e8d52d314d4c579aa70d31d1f6f48bfa9aa04d64be
+EntropyPredictionResistanceB.10 = 2764c228b03507be6c3731508a574d3e1be6f33e422f81b6
+Output.10 = ee25f5e553ca1795e4d8beba5dcbd959a0468e828602bc1103d8765fd6f281fb96a2eebfdf1f3830132ad90f381cff7ed709001070f774a57b6d3488e5b842e5
+Entropy.11 = 3bdae8119d8916100b52fe32448b95b5c2303982874d7a95
+Nonce.11 = 9291f9fee105f7e148a13f2ff593b619
+EntropyPredictionResistanceA.11 = da37ce63929e1a9f00e016183e280f27ed94d9cde4ae7a7c
+EntropyPredictionResistanceB.11 = 88ab029edbda4c8c792de304af53ce5cb4b1ca2d764fcfc1
+Output.11 = bb37f296c6bdfb059c35353952f83972ad9e9ffa51ab7262c107e817a74257ebe69e53912cf83bd9bbc09af7e969ab084ac084317d5ec6c0151754c8c542c65d
+Entropy.12 = 289ca3d9020370971c24ed23c643aa63b00abf556a6a1a67
+Nonce.12 = 965f8254fe96537e687c26c163915a64
+EntropyPredictionResistanceA.12 = 1da491993096427b2055cf24f905a2b3dc2bc82b57c4acb6
+EntropyPredictionResistanceB.12 = ef594fbfd73002323fc0d5a34648f935b6e5e65bea3ee257
+Output.12 = 2ead91e56341e15720302eb649cdfe25ad9e87eff5110cefb4874101e81f8c024811b42ce72763638e491b077552f347eff6972e9be2bdd3b42b0b6fb73e7027
+Entropy.13 = c43a650f01f3eec41b5f2545509a1c47808ccead7290a0eb
+Nonce.13 = b242a36d72804ed2ca7864f3f3d23e1a
+EntropyPredictionResistanceA.13 = 8021417bafe117fe680b5f5de7e293acf104348d090b595e
+EntropyPredictionResistanceB.13 = 40c2f18fc40bceacde2da322ea9968a40c3289ef2db84f4e
+Output.13 = 99f48c2ce55a2b79f2de20ccd08020ff61acf42451edcb12e01a63b682ccc3da3bb6e553369297ef882f59e5ca1ec21c606b17cb182750ff67e014ad978323fe
+Entropy.14 = 7c0c25f848b459625c796ce477da9fb004262ec608d3f0cb
+Nonce.14 = b87a697cacd822e3a3a2b929a20d7072
+EntropyPredictionResistanceA.14 = c1cbe226f2c352babe71ff6143d18e45ab174bb22d793cae
+EntropyPredictionResistanceB.14 = 45907215e8c25927dd8f5e03f17d9e5615e56fb8f901707c
+Output.14 = 40301a7b4893105204e35e41a0cae54f428b239a80c56195dd360d5f2b4787d1f7d17f28ce32c872a39d28d24bf1ea9511c4012aa98365f055f306a0264fde55
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 4c413753490a93cd43166fa3809deff61b632e2c22a7f974
+Nonce.0 = fd2a99c847ea9f9642d26dbf5499797d
+AdditionalInputA.0 = f6368dbd19597ff25acf50c8655a74bf6ee06d6ec2b537183ad067ed4be0ae2a
+EntropyPredictionResistanceA.0 = 7da8daedbed66e45293e1a1c877a34348b534a4a25dec258
+AdditionalInputB.0 = 5b43a0413e3a075a7c3c7720c06b96461f66ac97ea4d13ef3661140886681668
+EntropyPredictionResistanceB.0 = 37e87356ba1274acfa3b1eb654e596f5efdca52b4c333187
+Output.0 = 7f7b6037b0f2a20c04e9eb28859bbab4e686a1e34d67ad43544ee3637bf118615a498a714a6f19ed453d78f39f9ea2ed2c3de6e22d76e328c396b2e1be63839b
+Entropy.1 = 582ab4abb216994878f05ad5bb14593c054beead4c7bbd1b
+Nonce.1 = 1ac0f74754b6efc5fbd5a73fb83bb556
+AdditionalInputA.1 = 3912124bac03f467d424bd7e4b305369e56d9278af82d09b1b9b697860a62597
+EntropyPredictionResistanceA.1 = 04962fb68be56def7ca9648f3087ae55baad09c824d0a538
+AdditionalInputB.1 = a20cab1bb5c27dd71e5954664790673702544f6b0491b8555ef19f5d1a5347fb
+EntropyPredictionResistanceB.1 = 415d4d6a65efd8ac870f578a41a5c4df902f0564d8e1fd1b
+Output.1 = ad221d21ffca8baec07913c26f384937c1bcee737a1a02fd13e700649ecad9f1d751fa189f1efc9df6194eb8b495900d04f3e65152e81c2d83e9baf9e768b037
+Entropy.2 = bc71101f21cea7c8146f06089fe8e7d06563dde0201d6196
+Nonce.2 = 84cf9435dcd0a1c993eeac1850f4f0da
+AdditionalInputA.2 = 95c03a84ad64d834c9a46446d6a4ecc9c258cdee8dd28018656673993e0a9a87
+EntropyPredictionResistanceA.2 = 086cebc0d02854e34f51664f0ad6f60fa21ea68b41f72849
+AdditionalInputB.2 = 8fec794c50f3320ae1826377cdd5fb233e70aaae90cc2ca67b862f6ef0a6fafc
+EntropyPredictionResistanceB.2 = 571e54a3e92c4cdbb447cb0e1b43ddb321b6254ab37c11c1
+Output.2 = c501d24a3423df05f0d64867c9322cff722cf40c202c08ad88825d95dc7d4635b8f195886a1aa7a64b73d34c040333feb5ae0bae28427c66b81b6dc0d91e1f1a
+Entropy.3 = b7f8001fdef064a02b011263a870fdb78e5838b2b01f0d55
+Nonce.3 = e65f133235a8b7a0085ae6a445d4080e
+AdditionalInputA.3 = 2da3f95a952444d56ad5dff3348a5a31c72ec979a1ad0ba80ac1751a4f7ce0c5
+EntropyPredictionResistanceA.3 = b48a237c0d81a7ee2bd38cf4dea84a0c56b4595aa2a6d67f
+AdditionalInputB.3 = 1995bbff2f26e76a0b576e92bc453054d3fd9d033bec84811822e3cd56045ed6
+EntropyPredictionResistanceB.3 = 1081a978b61f3703f359d73afc80b60538376def2d79f158
+Output.3 = f97136738d531ced37997a2bf401ef00c252c076a431eefd00da35ab7a42f886fbd7471d6afd3baea2beb5887f8b6fb83663979fef6fd23518ce2617d2db8e3e
+Entropy.4 = e9ba01322b24b5b2d137d2e33150c6a149958f8f4dc86ce5
+Nonce.4 = 4c721ab7c620d89c4e19641dcfab0258
+AdditionalInputA.4 = a48d4e7bfe2cef8d20d14b51e95ba8b974a83692748221c9955fce9956e83f37
+EntropyPredictionResistanceA.4 = 13633bf164e6be0d5ea11dd3ad3900f64efe0eeb24af0786
+AdditionalInputB.4 = 46e00942aa45e546d663382ca295a2743a5b2c9dc9688b6a0f5c92995f782b78
+EntropyPredictionResistanceB.4 = 6782c98076984b3a52f9ad3a227e2ab8821bf6643d4f8732
+Output.4 = cd21c292ee22aaeaee15486d05f40e97abd20123b77ec6edeadb4d1c7af07277b5b1e191af54db56222698451463a1daef510b7b259c348748be3bd9fe5f65dd
+Entropy.5 = f484331f1567cdf4f7b7928b6c20914cb4747385e33affdb
+Nonce.5 = b7bdbe043a0d7a39a202bc341bda2495
+AdditionalInputA.5 = 07175c3a18b4861b169c3d802e7147559019f9f4308ac0467a9c1d6ad9543f62
+EntropyPredictionResistanceA.5 = af60b73f096c05a977eac9dc2b38c4524a5ef814716e9a10
+AdditionalInputB.5 = 0bff39f2d2c0ffbfde1697384a88e4785a2fd125d088634917bb70e850582a7c
+EntropyPredictionResistanceB.5 = 2366f51e748c35a011d922483149d2651a24f71c881233d5
+Output.5 = b3d285bfb8555b387a409e30c3dd2b131abf5c46e79510f077d8521a4c4f27e7b32ae0c3dd35fba7fd6034bf92c826022269e86d850baf30888d6de35c7434e7
+Entropy.6 = 8c6dee1456443b47faf2ba73780240b2f43020706ee8465d
+Nonce.6 = 15a139b75c75523f9b6f39c077583ed6
+AdditionalInputA.6 = 5d68414ec388af074c2987e0521a012aaed01d4f88510ff69716186143394231
+EntropyPredictionResistanceA.6 = 4cad98f54cae3e2c0ccef2bd772e9777344971f1d3a94ee8
+AdditionalInputB.6 = 086675fd33060173a2fab6e8751c8ccd89ec3975d2c4979617abfdbba603c120
+EntropyPredictionResistanceB.6 = dbf004f6a39444bfd1f61830f71dc2cc1382fd3e21f654e1
+Output.6 = bb298c31ae69a30351549e1c1424925b26c982fc9424c1436c16a2a32cf1c396e85b7bac05eaa7c49f8a5d67aca5346c574d3f7497b2bf329daf23bff78dae66
+Entropy.7 = aba4e6ae8260599aee1a2f91dc92929b974513baaa59c9c8
+Nonce.7 = eca1e2843c7074fb21b7916f8c991a87
+AdditionalInputA.7 = 8b7919f10fac641a836e0fc0c8bfe77260f604e72e7ad595b7df58ef91b9044b
+EntropyPredictionResistanceA.7 = 2efcc96a3c53ba9153dfbc34ecf3a716091d7592b87fce2b
+AdditionalInputB.7 = dc3b27a4e58cb716fd6976218ba6e84c060dc6f27f7a168bfcb6f87e1c5f1b4b
+EntropyPredictionResistanceB.7 = 827889af9c410819775b6effd00e30a4cbe5e5368b0777d6
+Output.7 = adbf0de315b039bc144e301cbf8703c8859f36826e662124aacd80dc059425de57557d188d68c34b6c6487b61419143e17aead8e3bc8f208d33c7d08ee8c750b
+Entropy.8 = 78b833332ddf85356125462e4b40a5bad9992c115afef882
+Nonce.8 = 3603438e10405c9830cdabe08c0bf32e
+AdditionalInputA.8 = bddb823dac654537d02cfc504ffe3f08f29dee57cbc14f0bf313965c95383c58
+EntropyPredictionResistanceA.8 = 88b095ade03029c91d8580b204b9bca609cb7ac4d54bc0bc
+AdditionalInputB.8 = 11e60b352f3079f1c07c9143060ba782703b247e1aaca1915e7052fdd1f67fbe
+EntropyPredictionResistanceB.8 = 80149df354fc9d21e5109a487d9ae5ce5c6af455e75ba687
+Output.8 = 42b232077c5bece8656dad73545dc34ded7305eb4acbce0f665e6b355707d198746501741af2a61e700724f1e0cff476a05336c71ccb2ef9ea34f74c3005c037
+Entropy.9 = 2bd9bde8694e97cd8a31faebd255d224d47d4c756d469938
+Nonce.9 = ec60e501bafd72221df3575001c8b594
+AdditionalInputA.9 = 4691968a7130710e06f6e218af1fc7d9d123764e6bc772fe726d9b0c48f91dde
+EntropyPredictionResistanceA.9 = bdd51d856eaf5a0cd5d5c4cd48b7d38e58e3b16afcf7f9a3
+AdditionalInputB.9 = f1a1861e7d9cfa11ff7dadd7f1bee5e7700f4199c194984671ea1aa0b998a623
+EntropyPredictionResistanceB.9 = f52b17641b861a4e0ecd6503485f4f44a9b3a8a8dea61c51
+Output.9 = ceb5480c7699dbf6c579c4f48caf8123c08ce4d8673eb324140f29dc35838991d3ca99da2fdd6b0f744e9386f1b977df4c06629f167491603d41c21ab0e60aab
+Entropy.10 = d7084282c2d2d1de01b436b37fbdd3ddb3c4314f8fa710f4
+Nonce.10 = 7b9ecd494f46a00832ff2ec35086caca
+AdditionalInputA.10 = 700f54f453deca615c4951d141c4f12f65fb7ebc9b14ba9005337e64b72baf99
+EntropyPredictionResistanceA.10 = 68d07ba4e72219e6b6466ada8e67ea633faf2f6c9d5e4815
+AdditionalInputB.10 = 05cd2a975a5dfb98c1f1000cede62abaf0891f5a4fd748b324c08a3d60595db6
+EntropyPredictionResistanceB.10 = eb77b0e92d31c866c5c4a7f76cb274364b257804d8d7d234
+Output.10 = 2994a4a8173e622f94dd401fe37e77d438bc0e4946f60e2891c69cc4a6a1f89a645e9976d02deedee12c93294b12cf870398b97441db3a499f92d045d43073bb
+Entropy.11 = 453348453245cc0abd996594c27e85dc9961e0d2594968ad
+Nonce.11 = 55caf87ae657408e159b33ebe1618bcb
+AdditionalInputA.11 = 4b2ad88f796d638a0c0c391acb43d0b71bae9144c77b9fa5aca94f5b3a56626e
+EntropyPredictionResistanceA.11 = d467c3f4d732097ad22720a8999f4c50a615d7936bab2049
+AdditionalInputB.11 = 93817c69ebc225bc503d95b129899730e71e55913cb07234a07e9fec762e3a86
+EntropyPredictionResistanceB.11 = 40d475a5f881f86d05a8a084ebb06d34f0ecd4f72a06a51e
+Output.11 = 70ea9eb8d4898f21e0d01b5cf3d1b9ab6fee035f1b3a5583b110cef037bc2d69d50733235752304914a450a551318c05a3c08bc53b08de8264fb77dfe41f2fce
+Entropy.12 = b676feab77524b0bc1edaab1e4505740e131381579ea0bb6
+Nonce.12 = 052a28dffbd5a98a9ee0c4f6bcafca9a
+AdditionalInputA.12 = 3e33517148e67540c1653b6b2d5d496237aaa0fc3155e8c603ab820b86eaae68
+EntropyPredictionResistanceA.12 = 9c5ee2919cacbe5d763b8b94a36b7c908e62e135207b951a
+AdditionalInputB.12 = 481e5b69b3cb228b8fb1f63d2f54bdbe4411f59440fcefdbe78fdba92ba84dc1
+EntropyPredictionResistanceB.12 = bda0bf5bd55c9af01da98b3cd5443903a79a95735a09dc6b
+Output.12 = a23fbd7856912504b4e83ffc0d440b0827688437854c646f5478924871fa2fa5091aea56f049182b5c328057967ddd82e7c65322a89a5199b3b294e0e91c34d9
+Entropy.13 = 2810c046de02c158299027b583dd8d48776feca8177dbf2a
+Nonce.13 = 7ca31700e8a22acf1b2d0329b8e98bc5
+AdditionalInputA.13 = 6f30adaaeb31fcd33a2fc93e70303001b5c4be9591d75d65f0d47cf315f07fd4
+EntropyPredictionResistanceA.13 = 2444b096fe745408532a37c9913657a7e49a8a9490c9d412
+AdditionalInputB.13 = 5ad9448159afbfc0f63f9445486fd729cd33c200f8d50ff16829c16f69899a86
+EntropyPredictionResistanceB.13 = 76b629517ddae45e1bacde01dc7736d7f87272b03717b2d4
+Output.13 = de22d56b7454c3224f4f634a6c62ca8762588b92722fce67fcbb60a9e7d686287c5be17a91acdb9f79586be380493f0e9a5aff815d6247b3ea9fc40879dc3f1c
+Entropy.14 = 660e1a8dbd89eaad59d7f4f57d171a294b00280e2eff9f76
+Nonce.14 = edc8e1493fb47c47b0100ca3ff2649e9
+AdditionalInputA.14 = 26d6266a6c28e7159fe17fcc79067ce5f167e7d1b28e17a8be960d3e862d4295
+EntropyPredictionResistanceA.14 = 00608b0201992587fb46761f0299164b6fa0ee504c45345a
+AdditionalInputB.14 = 2cbbdf8c8557770e589c593c0510e53726407204398a246593e391c455d07bf7
+EntropyPredictionResistanceB.14 = 229a0620a04c7fca111ae3c53ca7cfd5045a349c14cba70f
+Output.14 = 22e1ce9bd3a858aef30b068672ee6651103963794f37d64c1fa7638c7c923a0b9758d1058ac58af9a11bf14be64eeb1ec663df572af4b0e1ce0218dc7c757eec
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 8577cbf8bdaa31a1ae5e32ea09d0bef710ea7437e67b6825
+Nonce.0 = 3f9bdeb56b6e5d0fba56494001fe307e
+PersonalisationString.0 = 4b5cd497a417a2987dedf236eaffd2c315a65b761b2b68c3f4b19e4093b4c8c2
+EntropyPredictionResistanceA.0 = 31d4baaf6c27d967e8efc85479db4d012855ca680f875980
+EntropyPredictionResistanceB.0 = 3774912d4c79faa6d3c980a10dff18ecf6a068e683e19b1f
+Output.0 = a391525b20340e0f0fccf03760bb5095c27a130c6a3e134c2c10d59efec1a4a6cb753f0722a53b716985712db292b8eb8b039c11d27c1ffc709ca99f81b796c5
+Entropy.1 = 631edca87f0f7f1a13f1a3fcabb2c66612da944d7b881d76
+Nonce.1 = 0bba44a2f1de0954056691b55657f3bf
+PersonalisationString.1 = 3ac5dc2d6ae2dd88c44414793f01ba333379033701ecc78af3a79365eef620bf
+EntropyPredictionResistanceA.1 = fd0477833adbc32d04e2ea662eed8858b5f2cad0b5c389cc
+EntropyPredictionResistanceB.1 = 9b0e4639718621079ab240fec826de3e498f7ecb3c12b000
+Output.1 = a0f2dedb497673c4e3da0a7cb21be00269bbe037d7d6d7f4ad87f6d62ce61f365edbecc36bedb8c3cdbdf832857c5fd6efd70f1e6ec2e5d2dac25b01b67edc15
+Entropy.2 = 42e39ab98f368bd2fc9da9ff9356dee1718fd272d7f1cec3
+Nonce.2 = 80a28d7b28d2b7cad596dde7319b7281
+PersonalisationString.2 = b19e3d3b5baf8077c62139d95f66a86622b1a153f37b77b05b50930ff7a00ecc
+EntropyPredictionResistanceA.2 = 3aa0b575274a4e9dc1642dc867ef316be8000789728628eb
+EntropyPredictionResistanceB.2 = 7288f8b6b0c1d3cd020d1a1334bb0938afce11b2d77bc996
+Output.2 = 128f8653fc4df78c0d4a73963273fa52a605e6d73fe891d4941ffb0d5c799aab9b6877264cf9c0cef078c3f984a3808dca423ccea43160600ca24ced5691c784
+Entropy.3 = 35e1144e6f14dbbb8e8f6e9f634ebdd32642fbcb60e8d66e
+Nonce.3 = 95e6d0427f2935691103f60b6eada80d
+PersonalisationString.3 = 601ac665d10d79ec7cd31440c82c3544363fc5d15151256b4eaedff8637095f3
+EntropyPredictionResistanceA.3 = 78a0202b12077e059bd85c583894fd50f1d0c875ce1a5e03
+EntropyPredictionResistanceB.3 = 91604ef177201b015547befdf6f2e8e7e9dfad460862715e
+Output.3 = 0d70ef583a6cff7473937037089a6ea2060336d7c489908bb66db0bfd589581507277129bd128671cb928b5db7763d0c9f77eb49d3fa3fefbc70d30deb5ff583
+Entropy.4 = f0ed69952a866457ec0f4d0754f194101dfbffa09f83648a
+Nonce.4 = f6468d45898636123ae3412b61409ead
+PersonalisationString.4 = 3b58b5ac95d81bad39cf1478920da501b6276854ca8f6683ae400f5672e1bd21
+EntropyPredictionResistanceA.4 = e69eda2ff112feab3ec431cd1ffe8238a289d2b521539855
+EntropyPredictionResistanceB.4 = 0a024ce7e6b43180779ddf096740d4d40d79447cf9e6d8cb
+Output.4 = 641cc7a7606d1df8c147c78d0842063a60d93b6b0713bdfffedb1104c1e2d825136180f5c2a72cf5f345bd790bdea1d157364c8aab5a88a949bd4d97d364d80f
+Entropy.5 = 580d3cc44ca4b722d8e3f83066b8620f24af31597b3afba7
+Nonce.5 = ca1ea0dbeb9c9e15ddb27a509ee6b208
+PersonalisationString.5 = 5b13bac6dae5718bf063cd3d81c88b5e85718c36361339f20dfc4bb17ffa914f
+EntropyPredictionResistanceA.5 = da6fda3ee28299e7cdf4eea6d1d43059ac7a8bb494fc37b7
+EntropyPredictionResistanceB.5 = 3b78c765bf5573ed7b1ce99ce805a13ef5e30b2d094979f9
+Output.5 = cb7e9f67ecc9c5bf01d780f6f18a34db2dba7f7c41b9bbb5e5d8266a60f82b9757e79434fe74ca0c1d84801ecdc0977f6e255f22a92172a8628b1b0c10dd1bd9
+Entropy.6 = 9e8932b9e02ea1927af8cab7347d6f6e82fc0ebc267161f5
+Nonce.6 = d33dd36fc5588c285a293575db2fcd33
+PersonalisationString.6 = b065dc511b6e1cc68e047930e4ea2fc86a3111577ee051718d8bd05881f146bf
+EntropyPredictionResistanceA.6 = a3d340a864bb16193c1d2e4be463f5eeb8089b709ac68bd3
+EntropyPredictionResistanceB.6 = c238bcb197198809da03464efde1dda1534b21571985a44e
+Output.6 = 62dd89e4dab9234fffbeaa6d606eb12a27247e88dbe67048dda157e5434aceade4c2cd7200d27fd63334bf7ec28384e8eebfeace5c06e626018aa35d64ce90c6
+Entropy.7 = 3077f72ef582774df1b164631cb12e0e12ae0d6bc1c68504
+Nonce.7 = 6c750fcb3cb7aea5fe3cb2d2d2250f30
+PersonalisationString.7 = 5d39282ecd478c7ffda57e069657a319fc17b9ef6cdc97ce8b0c95014ce5ee40
+EntropyPredictionResistanceA.7 = 078bff85e8d70960ec593798f7c02bee4fe063a6fc12bbf2
+EntropyPredictionResistanceB.7 = cff2f9cf0dad173227af8fc4ca71ece1db5f6652871985b7
+Output.7 = f8b55d0b76ce33fdce495aab1f1b28e8d02ae10d3d6682f844efb9a2da6259b3011f82d04f33da537e29a9a713586fb9e99d9e220f87f7b0d50e5c78c9120b9a
+Entropy.8 = 36702c7b7944d5f14a2c8141004d7f9650ff82c3d3030c89
+Nonce.8 = 24773ef44abf07ab1c923ae3de478490
+PersonalisationString.8 = 021d4818d5b1717fa6d08ec67f77ecb0e6f46c42c03280a2d857681cbf6ad356
+EntropyPredictionResistanceA.8 = a15610d6f3a71c2e70736899503ea62fea2b78eb649dc4a0
+EntropyPredictionResistanceB.8 = b6dc270cc1ca29c0ffb68799aa36050f38d9f94c65e3247a
+Output.8 = 68c21fa90b85956361ae9ac6dfbcaec022121a45a5686190496b9836eddd8ecd8bfbe0ab68b12bee0e5b2c4d08af57f2be97f812e197b2b0cc058c5629660c9e
+Entropy.9 = 9a2952e4dcd68929ea72ad0ec61f4de186d63ed372c6ce3b
+Nonce.9 = 169d881eaa5cfcecf11f0d46f77b8c2a
+PersonalisationString.9 = d19f780c95bfa58c4106b97736292d83399d5d6c133b9a45a4f70f449279ea52
+EntropyPredictionResistanceA.9 = ceebf072cbd72a0b5c784400a68a9071b411200a9c39130a
+EntropyPredictionResistanceB.9 = 480052bab47be09150e488b98d61ea9bee55c450a16b8840
+Output.9 = 6188d6bd14578bb1fe75bd196e912f021606c98c0119259fdc84e360dd181b2bd26160c7841c80a2766a0cf06fccc69ed1e34af3e342708576f2b28102f081f0
+Entropy.10 = 3e8c45e04c62367feba4d1edddafe533d7acc34fc3cbc499
+Nonce.10 = 3aca2ca6970e00eace90da41371c0f78
+PersonalisationString.10 = 9516f4c383d4551c719c8a0fe4b04ee117401ee2746fae80ed3d5ad381f2c214
+EntropyPredictionResistanceA.10 = c85bee8b480ae6debfdbd393b048df8c4729e1d4774c5235
+EntropyPredictionResistanceB.10 = 5a6a0d2bab63f98fe42604cbe7b50a443c0cd083f6d9929e
+Output.10 = 5b172da261370fa0deb4db521b56f3e2f0d6896a6871cceb7ddbb4a69dea552e9ddaf757225b1981f69b1dfa6254f353df4f7d05b85c607b4a9df0511d0644eb
+Entropy.11 = 090f640a9b0d3e624811ab2630edd8c10ca478fd1bfc5fe3
+Nonce.11 = a9424cba21d2a26576f87df75bfcd561
+PersonalisationString.11 = d9fe77147a810b26efb9c474c8fbd7679f7dc5350e77c72d89083e331898df22
+EntropyPredictionResistanceA.11 = ac25dfe06d143167590bfa7621154f15d732cbb27b3ac63d
+EntropyPredictionResistanceB.11 = 45e2314abeeaeefa306128598bf7a5e18173a03cc73a081c
+Output.11 = 78ecea0a35ee353bb679d9474cd6db7eb8d01d1a911ba8d11e01c47fe295e161da59ce4cc1ca48de889301048de501827d0fc6e931071562b857c734a5f8dee4
+Entropy.12 = b98740547dff1397151c165f372849f117756965ac752810
+Nonce.12 = 94abae19d36c2d83801f060f392d7072
+PersonalisationString.12 = bf826e1efc497221170947eeda1c1b3b91aa318d9e5cfc29226b2be2d74e5f29
+EntropyPredictionResistanceA.12 = eb43b1515cc61ae2f70ab1ed71ef622aba9c8a977d0a02c3
+EntropyPredictionResistanceB.12 = 393cdf4dc83c36e9d7d0487a16d42d76fc8be5f41cf98557
+Output.12 = 62d7ffc0ba63260b053d45c6ce50b11eca614384b5b5746b77cf42a938b03aa8d5f183d6c0f815149c98a5c851e3a36025f4bf6400ceab9204955ddbebe13ed4
+Entropy.13 = 364fb7de5e0073ca1f4936852a08349e0b7854c5c9106304
+Nonce.13 = 1c462bbb2796a5b66b1ca9f6d5fc68d2
+PersonalisationString.13 = 846601e3ec642750adc543be6a5d56741718edc3740cdbc35459a8c7e88b6288
+EntropyPredictionResistanceA.13 = dacd11946fc42c129218486e17e4e5f318a942bb589f9f20
+EntropyPredictionResistanceB.13 = 3aaba84e01faa92df19bd02dbe03f30394900a6b7d233516
+Output.13 = b220734023610046832059987967a8bf9460053434d14ec7f6e814185a1dd1993697776f36efb5570609b8d6bb04574bbd1ec316cbb605f055d83b7da8eaadd9
+Entropy.14 = a5fb6693c41ea3324d141881d8e47c2e61cdf451ee138eb7
+Nonce.14 = 2d8c24fba2a7ac7f33948413a6b53a3e
+PersonalisationString.14 = f9f20e40b7a28b1bd14e9b24395437a75ba93d4081bffb34a42c8594ec5ed9c8
+EntropyPredictionResistanceA.14 = eb7005260206a8f72f15d03354fb02510e0e38a340dcabb6
+EntropyPredictionResistanceB.14 = f561be91f87eff50f063f61f901b4a280011545607f7a55e
+Output.14 = aa31b3d69e6638defc0269898bac9e584245ff0694977885125330e4f5b411d151423cf32e6e22560ca576e2f7510e5d88a8e335c10ea6824a6a729a7197249c
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 7938975762fd99ad038ba9e38f3eee4df239d897ce96ea01
+Nonce.0 = e1fe2bdebaa81a175d92e6ffaeb5991c
+PersonalisationString.0 = 8272d8106d76d0ebcc22dd0adc7f4b7ec93268d01a1619fef033071c414a1b4a
+AdditionalInputA.0 = 0f8006443beaeba5de4a02b4d8ebca115073328b88de74ec4d0060509f5c4305
+EntropyPredictionResistanceA.0 = adfbf7b516ad09f19c6a00c14f0f1afffca2b72487048657
+AdditionalInputB.0 = 2bafaa038d8eadf0181256d6e0baba7564307a196c00e8938f9b1cea9600dec9
+EntropyPredictionResistanceB.0 = 3679442d0fc46a1a48250a99ecc113c872a8583298cda4b5
+Output.0 = 1f5760e9de0f892877522f896341a15445ffeb8d5d5873c6d5a00541779d9f4e4f2706afee4e00f0f68cde67a022b38f7b63fa27123c0ca730eab02b7b056d18
+Entropy.1 = d9f4fb5d5a2a6ac8c99a543b785a3fbf6e5f48d53e5c016e
+Nonce.1 = 581aaf6f0a7ca6b8b66764b8ab1b9d3b
+PersonalisationString.1 = f6a4705467e37289b8a7c4c4ec0c585f8da5dc52418582953dfe8e6364fcbea1
+AdditionalInputA.1 = c63ac502414347dffafff6f258774beaddb64486d0249631c237668d3d9d5004
+EntropyPredictionResistanceA.1 = 7d0264982684e5fd9de28350bc9c06382c5079b2590e8949
+AdditionalInputB.1 = ba741b1c17bfc738f6d2f8843a3b1d9cc4995f011f0898d24ad34021592f09b7
+EntropyPredictionResistanceB.1 = ea49680de79d2396bb6879cbd6b241690838781a1b16bb2a
+Output.1 = 8ed6c7465ff710a413b3d00d0d670ab6d2bc91864927587471a658afd4dc211b6d8e343426be5913abb25e63ef2f3543ac312b4e0ac5a1a7de7f2847fd40c6e0
+Entropy.2 = 6ae4c9e7cd3725ebb1c7e6d77868b6a18bd05e3067471fc8
+Nonce.2 = 84a579fd459c19ea42d2a555b9844f08
+PersonalisationString.2 = 506b3c8e5300e16ba37abff967b9789e9774e80ee2bca4978499b4d958d3dd8f
+AdditionalInputA.2 = 591f29277b494a3ddf2ed49c3bcad8ed67358ab5ec4d527baa6d38afb324e860
+EntropyPredictionResistanceA.2 = 6a96008f296310a05e7fdd68a1d11cd0389b5657db95f2a6
+AdditionalInputB.2 = e789da83a4194ffe94210933ac1b6c186413c5ff5bdcb9ec7d7bf5d51f47869f
+EntropyPredictionResistanceB.2 = 780be12217eeb35038559a42f0fe90d5b653675e992750c7
+Output.2 = 49ccd3ab12b0496f9d85d8c7460c648cd01bc0bf8b2cdbf5a8645caef900a787c1a1e0fe0f48011e1d094c34de5ca84223f847d07eb77af5a460690668a1c6c8
+Entropy.3 = b24676e5db275cf0189195207662cca9ef13edf8cb9b2a8d
+Nonce.3 = 122cfd8c741529138b86dcb1922b035d
+PersonalisationString.3 = c44cd881b4ad2ec10e13e78bde9184933bd692c609e940e02de41c6aff5a4822
+AdditionalInputA.3 = d489d16d0b65b5c679aa4550cfad1459d4bbec3c0aad3667fc5515a504164e19
+EntropyPredictionResistanceA.3 = 825973ec8eee4e88daf3861a8438d608dc83506688d16e0b
+AdditionalInputB.3 = 0f8a84f755deaa010ef90c8be854aed69325ce7248ad4a96cbe03fae0bcc8594
+EntropyPredictionResistanceB.3 = ce684703856afb9600f38d95e4bddb2f0e149f774aaab5aa
+Output.3 = 8fe134021f85dab9c891001933dd166a8d725f4cdba775540e3fe70c92e1cd1ad8eca609f12bd5a8a6b8c8d60cb37b1d1a51d016383c5d95c0d6df1e983f313b
+Entropy.4 = a9e074be4b41848333c1a919402a5266016741beb1689af7
+Nonce.4 = 406fc4e4e5b2abb6b2dc55ba4b8d3557
+PersonalisationString.4 = e603e3e1e98cb55ce2a0eed213b603d6b4d6aaad26b906ccedc169680d57e1cb
+AdditionalInputA.4 = 9803a970303c00c936f6917b27d7d7e96a99f569444675e453d9357708e79be0
+EntropyPredictionResistanceA.4 = 7b0008d13c8a15d1bc8fde0fc6ff671dc1282392dc075764
+AdditionalInputB.4 = 35a9be0480399da9b16fa8546fcf653016eb51424758ba3e56e0a20cec880941
+EntropyPredictionResistanceB.4 = 6ab1276404e49034c87b98f1baab882ea2c15383ab33a170
+Output.4 = 5ab2d89f4f85c84ac083c7dc7a323412747d26aeccfc1486377c4fa5d1fd244605ec8c779c14ae4a7cc180b3cde628497e4b12b3bc2dbad3fcf41aa26996e752
+Entropy.5 = 079ff1fb2e7760eea59e86be95d92f18c45a96eef70a1430
+Nonce.5 = f5f8aaa1d4e9a2a36e3686cbb7e89a13
+PersonalisationString.5 = 143f35c9934080cdfd265fd9c58c446dfba018c80463b900dcec959bfec2d886
+AdditionalInputA.5 = 40746480850fdd9781869d146759bbd035681165feaeebd89fe4d819454ff90f
+EntropyPredictionResistanceA.5 = 973f79e3895eb295cff573cf3968dc704beff70b4c3c6a63
+AdditionalInputB.5 = 5ff64c8f27868bc277561ecc863d87efe7dd460c98f2714c18569d0bcca522c7
+EntropyPredictionResistanceB.5 = 6cbfd914c654826fd656c612aae70bd798d3272788db23df
+Output.5 = 578a80550910b32534091aafac06c44d01ada85a1e26e6b5a5f94d4ae405ce02bab58d81854cdf15c73ef794f9a53e7b2882f60781e3706b85acb41fe0a61680
+Entropy.6 = 71cb859b4ee9178af2ef9dad09ea0e27d0f6df3f40b4148a
+Nonce.6 = 513647ae8870994bad3eda206632f14b
+PersonalisationString.6 = 8d572a48a48f35deba84527431d8b4f8098eed38d6fd619d9e39d11609437825
+AdditionalInputA.6 = 04daf383b8ffd9ac1430563a40ce7cb44682c5415fbd4c3f891c242b2dd4b1c5
+EntropyPredictionResistanceA.6 = 94e248a5ce519fa76106c9600227a1edce113389ab33321a
+AdditionalInputB.6 = 447b5724dab4694d9dcfd9bb5f2c891924b1bafa3ba139b620936dee7643b9e6
+EntropyPredictionResistanceB.6 = 8499649d9e975c6eea6f6f23e51591fc62fda8db8afe000b
+Output.6 = 438b8cdee8660f5c954f359ca203b43df584316e8aec66d1871abe169ce6d24a1661561afe837336a65e34795575c89a74decc3e5a9b158ad3912cb508463198
+Entropy.7 = e52c92ff0a214306c908ee6f4c767dbb7e615a782b195e7f
+Nonce.7 = f651980a2c4363a2cb5ec5407970d861
+PersonalisationString.7 = a9d09aef833b6c612e0d9b54729d8c592703237786efaf1a1e54e72c6b4201c4
+AdditionalInputA.7 = b3a3e84fba810a103e97790e22c37bd85d51903b8a4ac9c3627155b4740f6629
+EntropyPredictionResistanceA.7 = 4dacb69c5075b8d1077637e23fe9fb27e80b8ee435fe73c0
+AdditionalInputB.7 = 7588577cd6782b65f0d5529f3db778234672c0563707ed7390efe01ce67c7336
+EntropyPredictionResistanceB.7 = 3640715f90efb9afd36881629fe1151c6fd25a20b2ab785e
+Output.7 = c6a3a4467d965535625a3c6c35cb7c97f5db040fac19a164c40e4d94469fca72922239527a1fd8185e8cd64575d212a3ce95eb5f86a6783093b6e16259e42352
+Entropy.8 = 5264e30efef5f5c9599da02801efeb19246425e3ba515f32
+Nonce.8 = c8a24534b77def98eea334a9a961e556
+PersonalisationString.8 = 2a12439a4bd456d805b854b8e41bf408c337f068f843afb4392bb262dc7b20b4
+AdditionalInputA.8 = 96fc2f2bbeb82ab201ab3c484d5de7fc7846a5ced76fbc295654011954dacc59
+EntropyPredictionResistanceA.8 = 7bc8d10d015806eae47862585b53acc58528f066499945d7
+AdditionalInputB.8 = 43912f08aed83054c87b63158fc489bc8d1c2b5f31f3b37354de8e42ae2e69f3
+EntropyPredictionResistanceB.8 = be8a8e17293de63318205d7749851c7e3951cae6be4a0d1f
+Output.8 = 04b96181fe4dc04a4252560a3b90511d558a74248423b579627261da7b532f0f775f49561f0876bf5c85a58812aa921ee83e2baeb062f3182d2baeb562e01181
+Entropy.9 = 85a5eb65ed683fd84dee16f0705dbbb3ae25a34910fb1a7d
+Nonce.9 = e2ac0cf8458e278b80758e6fc2151a45
+PersonalisationString.9 = b97a44e68c75c09da79b33a02b074016f8c1517b48e5c790eeadd5bfe2c36a5a
+AdditionalInputA.9 = ba3332c258378bba1511b93e84d6f86bbebac480d001933b3d90cac675fe72a6
+EntropyPredictionResistanceA.9 = 87a974ef334978faa4de238f4f876a2786a89a4a4bc5976b
+AdditionalInputB.9 = d0f0f6f243f923fea71fc9338ac00b147cb3720914b431e2daa63815578aed4a
+EntropyPredictionResistanceB.9 = be06f37ce2480ea60f743a360a6d01981d6e319490d56a88
+Output.9 = 238ad5b7f7ce2f26f9a94ff7875e5268a0461e5e4aa5c79d394c3e6ba2278e685910c3bc8b7cd1656201d01a323ed8377ca9c43f29d86712779f344c5bf364d9
+Entropy.10 = 1cce9b05453d1e3c40e43a9e8b119788531f4c605dfdc559
+Nonce.10 = b6e70bd09a56c5626f712be7758176d2
+PersonalisationString.10 = 87018978023390a079d140954bc0aea475ec63ee927f85589a4b8f76bfaace34
+AdditionalInputA.10 = 00fe5a07966b045cec2d125d355bdbe7c3a033ff8e41797774c8bd2fcf1f80d2
+EntropyPredictionResistanceA.10 = cc58257cd617272a1a9ef893dbc2f816af39df60daf4c195
+AdditionalInputB.10 = a9d573fc30392a000fb312a069ec2538614c47a1d47b034ca842c2b91d9de68f
+EntropyPredictionResistanceB.10 = 378a8077d275397e3619b3e2da5be304e32301925536b384
+Output.10 = 4cbe32922b8a5c0296d6225d238d50153f59045387d84a96066969b610344202fccd9c3a5ffc59845001ec04165908eb40e3a838fac19e7b2de13e3455f386a1
+Entropy.11 = 25c4478a5da993aee11fcd210c6ea2953e4f4e0719a9f2c4
+Nonce.11 = bfb747f4fcf29b12b1f874498ed87820
+PersonalisationString.11 = 94b2b2799fa89bea02942a938aa31417321c9fbdcb938d45ae1aa79c2b7e0df7
+AdditionalInputA.11 = dd2ad4cdd6f40228644505d40070740952665eb9bbb6c5259f5febf3e8fa15a6
+EntropyPredictionResistanceA.11 = 291fa6ed119a194b248ef90bbb32bf10b66e150bd8734282
+AdditionalInputB.11 = bfd3e1ff1530667ccb44d41f8c82703c22598dbf933046426cc1faaddf6a2faf
+EntropyPredictionResistanceB.11 = 0eecb982831e47a6cf5f28c1abbc42d04906ef3e64c57cbc
+Output.11 = 117b34d01ee0a6b9720d77adcf8fa8450de08a81ac62ccde3644d5814bd6eab96792829b1f0c56df87b8ecf0231e1b7680367442a8ddcb3b5a12f1d5f717ea13
+Entropy.12 = ecbc264cf66c64737fe14d89c170b07e9c115e1ccf128f29
+Nonce.12 = 5285cf4c6ce86564a882c850838183b1
+PersonalisationString.12 = e7fdde2bdacdc47ebf2f956745ad62deae58aca3be9f875d13e7aca9bb79eee3
+AdditionalInputA.12 = 79a58a26ef4ba32fb65764f2ed123bb69d96956b7294713008ce82826be23582
+EntropyPredictionResistanceA.12 = eca9ee54ef8295d536830c9e178e9581257dc4e1cb7bed06
+AdditionalInputB.12 = d001e90299a274365e4290ca577c51713ed4afa31501e38d1a5af14c4f4b6ffb
+EntropyPredictionResistanceB.12 = 6a2ab46a06b3195fad9542e3b09351ee4c47017e2985761d
+Output.12 = ce4f861a93a20288c39861c8e4cc39a8bf36ae740711d6be53512fda9c1258ff18769937a92e3d3173b6f05cd75c66c2afb9360eab829a3ca030e850ed67ded7
+Entropy.13 = dea6aa6f6eac4474f28b9928c5a113f25fc136929678cfb5
+Nonce.13 = d45d82c85503b968ce9a99e6fd4b4a18
+PersonalisationString.13 = 131036e0ea67e8a20d88bff9fe3b273c153a3d6daa16dd3eedabeb65a842c4de
+AdditionalInputA.13 = 4bcc3cb98c547297b3622c5ac2aea04638b3037c069b0929a3fe00c4e20e654a
+EntropyPredictionResistanceA.13 = 73edb49939772665fa690268941751ee2aec450ccc37ada3
+AdditionalInputB.13 = a2b3432697a6a8d1e015aaccbb70221d8738255ff459a1270aef4085d9ee7cc0
+EntropyPredictionResistanceB.13 = 5b415fd0088404edbbdad41fe6378bb5647ceb842bf9b334
+Output.13 = a5d9c0dffdfaa1cc8d2844bc315531ca793b0b45935961dfcdc002b87dd52c72e452b3330ff5397b0a2e0b6bb9f718aeacb51d4fe6a22f9f1bbba91a449c08aa
+Entropy.14 = 6d7846fae160f3cbe10cad6e4964ed1193b2437f688b1334
+Nonce.14 = 868aeb39eafaa0ffecc515aec72bd015
+PersonalisationString.14 = 65982c2a31e7baf2f9aa99c850d1483869f5d87308db77b07447c40b35af36cf
+AdditionalInputA.14 = 002c0b6d4e02fde629c9c8de23e68e6cb8c906c2ff7c75b3b842a5a7b30a425f
+EntropyPredictionResistanceA.14 = acc7b2d42ecd15bd12e7acc41147622f426b3b5541160523
+AdditionalInputB.14 = 551dd2d3e9d6ab9f06eda8ec4481dec7b4e9bc9d5a613d036be28b3683b25d9e
+EntropyPredictionResistanceB.14 = b460299dd4e29f2795887b2ed398246f815701095d5530ac
+Output.14 = dd0e03eddb2320ffb8c64b61f5df41545b80ae74fe2d52c5d5e703243749d854aae685c554dd18364c3ebc84ab1996a99fa3b376b10a94e410d7cd8e56b67388
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 65ded93baa63e63518c3303d6cd9df74a9c646408652a941
+Nonce.0 = 5dfaf4843792bf8c6ac90839babe40d4
+EntropyPredictionResistanceA.0 = 24c28ddbbd916bfcc6d96c00e2c10e1a0f0a0231c1b74668
+EntropyPredictionResistanceB.0 = 0315504cc3d78418c7346dafdbc0a4276ae3a9c47d5f557a
+Output.0 = 0c2198b827d66648cab1dc7dd9287125d415f933cff71c8da011b8da7beb191d8e943a6da17d69a16fc4bda4221ee6d5512faf4c6927141be4d0603c9f69ca7c
+Entropy.1 = 1c7dd89138c381047b7e2d4423e0c32dc3a59c1b65d54547
+Nonce.1 = 4efac873c9f315d6f77278bc9cffa348
+EntropyPredictionResistanceA.1 = 97c8b3a8318b5cda25b26eda15fc87183dda7f6051b239cd
+EntropyPredictionResistanceB.1 = 80fd7057eeffad665f861bd6a0366154b6d8739d259fcea6
+Output.1 = 05c05b9cb2dd98d50fd1eb245797a0463fa7fad9ca4fc4ef7e411478940f4cb2fb7433322aadb6c6033f6bf2dda9ba534aff84ae69a0f2ed168dee6919ebae13
+Entropy.2 = c052cc8ff9b8c4167d68819f4928507a0be7549f306477d2
+Nonce.2 = a9a25f2d3d0f6a57f97310fdef22b7bf
+EntropyPredictionResistanceA.2 = 0c49777659ace80854250bac32ff61670aaf9a1a4854c3fa
+EntropyPredictionResistanceB.2 = dfa4ba0ff9dfc9b9e7a2c8a70cc51dc22c43b2ab06301d3e
+Output.2 = 5ebe20b6fdae03900fa50b227cee83ea51459dc7f82e7988712173d9bec11b98aa29b02d01f91aa22dfe78c634ec504614b092a50b62873201f4361fb6cda7ac
+Entropy.3 = fe55dc8ec854a9a187e2a365bbfb45b4bfe622fc4c78cff0
+Nonce.3 = 5d1406f1c939677d63265c28dd7ad3d2
+EntropyPredictionResistanceA.3 = 996ee0a08d56d1b3d7c65e5ee506c86f0500112992912539
+EntropyPredictionResistanceB.3 = ed1b49e77304e5bf3253d85ae31025694098b18f2248e6a9
+Output.3 = 60aee565898359cbd4757397913a3a38745b6b5eadbe703251a53eb48c6b5d7e3abc0819e465adb7ddde57b82c568e5f9c474b07055b8a8288062cd93480f647
+Entropy.4 = be86c9b0fb9ba58340ee37dc731aadfccf422b88e2df4cd0
+Nonce.4 = 3b2e3f059936f7e0b2dd19968abe048a
+EntropyPredictionResistanceA.4 = 8c5ae3faf2c1c0adfb1dc76eaaf32ba62d949b5c5b6f511a
+EntropyPredictionResistanceB.4 = 9f80bce2bb7f46b0d2caad5151a879f355bc70b11d4ef175
+Output.4 = 440bd1a945b5ca33beb38df0fbf2ef44e57ca4d61183cbc3a15ac97a65f75884b258f03aca22439455c3d79cadf821923b02f2c5d42ecc01df538f460e0e389b
+Entropy.5 = 447aecb6f519ce2d742e3813c6f4262ce00212140909be44
+Nonce.5 = ca258670522e9fd5da819cd17beafc7f
+EntropyPredictionResistanceA.5 = 439bbf49f07b1ad6147617438f9ed8ac278d79acaf9723ee
+EntropyPredictionResistanceB.5 = 0105b948ceb874ec2660c8f090dc73181a80c8569bbff01c
+Output.5 = 1d74f3e77119142e386a8f324293c0c4cdc93727723b03ae3a2a654d5dc14f7f0f34f5dfd31f6a42b192810c4af74948181a6fb86ef3d682ce4092f667c7f84f
+Entropy.6 = fcf07a2f221bc99f7c0687394c3c54a3aa41149f3befe82b
+Nonce.6 = d706c6398edd0b0f334856e9553fca76
+EntropyPredictionResistanceA.6 = 52634884c25c75532b3e691451a450d094f343b09460cb4f
+EntropyPredictionResistanceB.6 = 0684456d9984b1ee1b21061a522f445511f1528dddf6672d
+Output.6 = 94e16855a85d38b22473772e77bc7a5ecafce06aa840a64ef1687a2ba1efe083db3c6ec11a810de69627188432acd732798da6f09125f8479e67791add5cf3aa
+Entropy.7 = cca139d364c51134f82b6bfe565663bc1d8ea89a0d0c1fdf
+Nonce.7 = e2b234b08f1fc8ca26fd0e00a18987b1
+EntropyPredictionResistanceA.7 = 6542072d3c6d16a3cc063d1f5caf9327ca27b7dd60aa0929
+EntropyPredictionResistanceB.7 = d971fde0345a919aa99fbb85184dc8c851c73324d9852239
+Output.7 = d45e785a643d57bf4921b5fb4a5fbe9089e409e932658ab4f79815c7e03bfbe1f7991d8298a37cb88cfeade03f0ae4ee5c8096ebb521d805faff5cf11ed22def
+Entropy.8 = 2c04b032a3874d1badaadfde3990b70ebda2661e659f60c0
+Nonce.8 = 94a5c588b66bffd90ae20725003b399c
+EntropyPredictionResistanceA.8 = 9cb01484412f53096728e3e10fc90be6a45081ee047c52f4
+EntropyPredictionResistanceB.8 = a2e1ea1c79deeb095d547162e45485ddb2656a99bb3b672e
+Output.8 = 26980665ee2fa815d739b51e9a9a46d0e69f649be4eb9dc4589e5dcf16297335a626a6d90c144c660764fee4fc61e8120e1b4c0ee00e5c1ae2e6466c5d19ec47
+Entropy.9 = c2d91ae538eefff25aad9949173f0d94927ed5ff29a9ca4f
+Nonce.9 = b1588dff4a1c49b6291f8b141fef681e
+EntropyPredictionResistanceA.9 = 9f0f6e89780d1c1e8bd097ff03bd4b035c0d310ac3d27822
+EntropyPredictionResistanceB.9 = a4c9a14d3f84896604e3fdc774406bfe212469ec80b26660
+Output.9 = 67f82b1f1a0b385a4d4775c0e0952b246675272356654931678c859d9a9bae537cbb94ade82a98a622142a293fc991c4dc85f220f4860a6bf2e56ede23125de0
+Entropy.10 = fbc5367513509a1f24c128d60c9c19eb04e48ba9ef929968
+Nonce.10 = 49a78214702b08171b4ed9225fac5e71
+EntropyPredictionResistanceA.10 = a6b9a286c2b3fe902bc324b537ed2e019e0656d82df1a8ec
+EntropyPredictionResistanceB.10 = d32fb02fafe6823fd5dbff01f1154522de066ffb394b66bd
+Output.10 = 57293856166efb7673fd985f2db5d8293518c002ac56df955be31a65fe2ed8594f614ce2b6969b9759b4038676d04ffeb088a2f9681e1790a0c199e9dff4558a
+Entropy.11 = 0a63e3744ab897aba4ad072012c949ebedb987f4df1d0c4f
+Nonce.11 = ebbf5cc17bbd5562ca15a97d3d7d8b45
+EntropyPredictionResistanceA.11 = 6b52852c1a591bb791899befa4b5ff363e289881b81d6adc
+EntropyPredictionResistanceB.11 = 0bc33bec703476aec68e659ca113d05d580eb446789bc78c
+Output.11 = f807fa577e83f0c1d99d2900ecab193bc761b03c6f3c69700aa01b5b3b9d3784252c1371f5e7bae489bef933feb1ed78509e1c679681e3e1c72e2a7b477dd84c
+Entropy.12 = 45f801b75ba94b2b3ea2cb6f8f37cb8c3a854989bde7c67c
+Nonce.12 = d6db6c7a04c12e07a61744cd88bb61b6
+EntropyPredictionResistanceA.12 = 6d5493fa07f9354a486bdddf141b9cdd3489efffa7dfcc1b
+EntropyPredictionResistanceB.12 = 5fc40efbd79b54e1eb18408ac4fa1e1f420307ffd4fabf7d
+Output.12 = 285fe2c791735ac45576ad0d07eda2582650878ec59992eba8617a66984dd62da09eae7e39109a4a2abea3f564c4b741bbedcba4cb1e519a44151f144aaf241c
+Entropy.13 = 30bd675b4b071cb3c776c90a5fa958e2b004c5d81ab1b060
+Nonce.13 = 49c030c95dd3e5e85929af29b26af853
+EntropyPredictionResistanceA.13 = 4536e86a830cd5fad01236ceec0d9f49b8fc1d56d6f6623b
+EntropyPredictionResistanceB.13 = c2e159587223bd8315f793c750e42cd4cba985dfd76aac7f
+Output.13 = f944b1fd2c863f6d16c162a52fbefa417992a1495c786c39fd6edd7832c7b9911475757c8685d466bf7484e4be3969e901e63baac490465c7276829a8680b231
+Entropy.14 = 1cda1fe4953b84fe7ea3a11e6cb4d342a66e3fcc74b0b778
+Nonce.14 = af9a5f7272013113d491d77bb807db34
+EntropyPredictionResistanceA.14 = 4bd0a54810e5537156dbc1d0b31186a7c8f2f11895cab37d
+EntropyPredictionResistanceB.14 = 1d12eb0412c193d468d016ad056cb2d9b8040416a63be39b
+Output.14 = 86896ea3ec87559391f6dd560859c8f916021c7aaaa9c89269cbc3a1ae954f770a4618497c6283479443fc31b7bb2f536befbc0ce2098e3acf8e8a7ee52bd87f
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 799307f767da25bdf49492308b5bfd8b849e009a6aac51f9
+Nonce.0 = b017f3d96fc39f5636a6e896ea2b7e30
+AdditionalInputA.0 = 471f6c0cccdc8af98106cd019835a263c9c8b636a1b24d66db74e006483f96b1
+EntropyPredictionResistanceA.0 = 727a6ceae60f22e0150c051db315cf832e39b4a7e5546af4
+AdditionalInputB.0 = b5776d5cc34459f73af5c8208f1c83ffe758840799ae5162e7bba696a45f876f
+EntropyPredictionResistanceB.0 = fe016012150eda19cae97d190cb0e098ed3662f23b6f09fd
+Output.0 = a2827f897a76a4be69e27dff511a384ec731ecfc7b1594e3815d024d9615f86f58d80d573df8d6d11a3459884b227df7a33d8d3ce3f5d7a75aa993c53e7e0c0f
+Entropy.1 = 610ac4adbf4abfeaaa6473d17a8bc2ae8406b616ed35d001
+Nonce.1 = 0fbeec6ec5dd027843692f7830593fec
+AdditionalInputA.1 = e40ab09d92a177efad234ee9a8ef120437735e547bcd8ccd5c69020735d01cb3
+EntropyPredictionResistanceA.1 = c68261a6048f1e307564665ca4a09314877bedd1a8e48bc6
+AdditionalInputB.1 = 758750786918480dce2c3e3feeeea0324cb9b0b5079067bd3f9c45b9f0e733ec
+EntropyPredictionResistanceB.1 = cf84e3cc1273163949db23c898a3b322fb11e75dc39599a3
+Output.1 = 10574758daf59fee6bf760b97feabf24c058a95e594b1a2a801636354459821e061c4bce3dfb16fbaeb142cb20d8acc68b75564aed2306aa9a7c11e967c06d3d
+Entropy.2 = fa45a607c93da20593e5100698498c44072b3af7cd313663
+Nonce.2 = 3695f384de48b58c1b4ec230cd16c485
+AdditionalInputA.2 = 9be9780aa7ccc963369bb7b64126668ca29f66ad66bf3def3ab43fe1d9180154
+EntropyPredictionResistanceA.2 = 70bd4e4ca06f3daeae8bfd687a1031c067f000f8c13d2564
+AdditionalInputB.2 = 27079d9767ef5cbd1d13bebb941c45e6659f4405fe87fe178af33e3ec2b2f0cd
+EntropyPredictionResistanceB.2 = acddc6fe2c837f6370bd888ab9687a8192798160cff93f4f
+Output.2 = 96115cddb064baf48d0bdd6291d34c3c932a87f11b32b5986774d08939eae635719dc7ea02092c8182cf01cbeda59e9028b37645f03365914a18e075c357b0c2
+Entropy.3 = 9d0ce229ebd86386ff150188a9466d56cf16b706f9533fd0
+Nonce.3 = f87c245d50e28fb6dabb963a2bf04b29
+AdditionalInputA.3 = faf3dc3af3dfeb4e56bed8775e4fbc32961aeee087e014e5d852d6f46193a44f
+EntropyPredictionResistanceA.3 = 1f0dd03634dcb2ee9192d84b12d7cf5e4ac85259f0abb5ed
+AdditionalInputB.3 = b4c29c476fd0dff9f77f41e75d484e804666dc30dc63ce79a3c2d0a8115ff3ff
+EntropyPredictionResistanceB.3 = d17220c9d8ff2dcc175d748199c1721733eaa1cab52ad314
+Output.3 = 56f532252ec31127bd13bc1e3ea0f64d76fc0f5ffda3d8fc8bc8791f814098efb6f724b9d9d715bc6d901c713a0b17791852b75b61fa2f20411667853ce6ac9a
+Entropy.4 = c3f9ca8e42ed21b5ba541e9d55ec2af84aa4d2045a32231b
+Nonce.4 = a58f3811c3f3c597b8bbc514252ac8d0
+AdditionalInputA.4 = d180eb02d1b0878e272f7640ea6ab8b74d8e457c554f8fa30a04e2bd5b897d55
+EntropyPredictionResistanceA.4 = 6997c7605750668ac60db9927ab4d5966b60a3e765dff92a
+AdditionalInputB.4 = f21b77536d482f5cbdd73f78c81115c51baa83d83f3cf05b76f79f0971056424
+EntropyPredictionResistanceB.4 = 00bf99f0f681d46b9730f3ec5be88d3ea222b24bf47f7c7e
+Output.4 = e257cc1a5fbd0da16667120e64a286dad5b1a76281aca2f553487f08182e85dcd3f3f228496b9bca7c8c263916905252cfcf16d74e19648198c8c30f201e02cc
+Entropy.5 = 21e30a5911685d646486883fef307b6c1d1c70e2211c5b09
+Nonce.5 = 9b27bc3f94d43bf9274cd7ee6cc43fe3
+AdditionalInputA.5 = c5dfc8f7a300a489e744008e71875ccea0293f1a413afc319c7b9d21d7fa9947
+EntropyPredictionResistanceA.5 = 8424ca5bd8da13c488fd1ae4a5dec66163e1528a5df4c74f
+AdditionalInputB.5 = 4010511d82f1051a7ff7f63985a8faf4d4f98706085f895f0514e78c6ab2c545
+EntropyPredictionResistanceB.5 = 5c4267399e1908e2acaf12c7364f099bd8a214e4dca14ab3
+Output.5 = 667440d67d9027931e16c6d0a91461f5afed6202bb14dff0adff701596899d90e3d2d6a4f161c8c63e183d2ed97a6ea84e622bf1a078a280de38ec8a1becf6a2
+Entropy.6 = 7d89c096a974ca72bffd0f1675e8519f6678ad0649cd09d3
+Nonce.6 = e637e4b17510ff379c1e630c9904c1e5
+AdditionalInputA.6 = ba42b46725ffa4e24e086cee7c9d7b3dabe005f287852a7f127a8ef78f88ce79
+EntropyPredictionResistanceA.6 = a38aca2b9fc8890a79b0ae272c8fe006a92023fbb5cfeeb9
+AdditionalInputB.6 = d74e9bfb7b66aa6ea887d38ac534b7ed35ce4cf5ce4b0de62224119696ecae15
+EntropyPredictionResistanceB.6 = cd81a17603eb545b6963184e4491008d1927474374ef7c49
+Output.6 = 884c36fba57c1a35d9baabb9c6ebf4eaf8ab70997b4ca31164907d2dc1f0f74eda8ddb88e6b491ad8a9d92d44d78b0d0e00f27560e28c6f9418dfee194850525
+Entropy.7 = b8b0bb2c41a59c2d77ecf5a2599677382ef43e6cea7b17a2
+Nonce.7 = bf446c79a7e2389815fac63073100af1
+AdditionalInputA.7 = 82b553a7b2f633f2999d25ecb28b0f7358d416d13764edd3603b1909658cceff
+EntropyPredictionResistanceA.7 = aa5b7382f966befe524472c1ebdb4c05d173c3d18b58f258
+AdditionalInputB.7 = f741e25234c38b5154769eac9675e94a776d718f40bb8f7432339c6a0fa6225e
+EntropyPredictionResistanceB.7 = b99a1f906642945ad1b878d4e22380eab1f0fc49136a99c7
+Output.7 = ce9e56d62bdea9235b9e3f1135150a7eeb8d17dc9a9e0720bee59a0caecb9364d28ee751e204d48eb00da7da8e9ed837a6f5c7a72e60a21c1c483fac198efc5b
+Entropy.8 = 4bbb9deaa82d4a4b7007f3f4012a344505218681f9888530
+Nonce.8 = 8e45ebbb2f30d1ef288e03439e08ea2d
+AdditionalInputA.8 = a128d128a0ad1b7a42aafe64f2a61c62378de2831d866c80e2ff3b258171d833
+EntropyPredictionResistanceA.8 = 81913d1b469b1f32092b7a9b5c361b1ee4455ffe2535678d
+AdditionalInputB.8 = 051ec797e3cccd39c1cedf8dfa84dd5050142ba2e50eef3144cf0811846634f1
+EntropyPredictionResistanceB.8 = fc107a1810b0339f3f3bb8172160769f3cde5812959a5c40
+Output.8 = db5a02407ca977f9ba2e962a68d2b090e771ea950edbd4d559bc11d4d5f5d85530853ee8db97b02af58ef782e2feba628c12388dfba2313f92bd632cb6f502f3
+Entropy.9 = 178ca6c533a0b344e5dfbf5c46ce00a138c7224063f98fc9
+Nonce.9 = 882789886ba49b2a8334a6c11231dde2
+AdditionalInputA.9 = 7cb4e6f2d447188c91445f35e226a464fb716873d724292ce0089f2cb56436c7
+EntropyPredictionResistanceA.9 = f268db0ceb1833109878779662e0c8966d6f5b9b71809519
+AdditionalInputB.9 = 06e07b4699687853fbfc41eded2a00790809306ac0f0a0fad01f64bd82939ee1
+EntropyPredictionResistanceB.9 = 10b620031ecbae429645987c6bfc7e4e8dd427b33cbf6f57
+Output.9 = 732d8588641c2b191d328f95fd6be5ffeebe06912600fb27f0163c95b551ea223db33f3483785af0365d3e6bd3a41ef1841ad3c51c20c443e5dddb0fc6491d61
+Entropy.10 = db1c800f4b14624c9b1887f3ef5e935653726811bd6a2d0f
+Nonce.10 = 3f72c39611d2c800822214397261c46b
+AdditionalInputA.10 = dfbe2a13ee44ba33c766a4d4b16e4b0afcaea8de651a032ca17ebe37de31348c
+EntropyPredictionResistanceA.10 = 09c7aee6657d5daed2b3e256b13ab413688577e294afef15
+AdditionalInputB.10 = 11c68642522a3a3f13a348adbf5b1bcb9feb2946e5d9ee8019b595942e9373a2
+EntropyPredictionResistanceB.10 = 12723e2acf5a09f2614e338f7129bcadc599bdea4e26455e
+Output.10 = a31bb79053d5e438a2dcdf64b3475a9bf7ba0b10f852d187d4583896d1a14ef204a7c52109424f52514596fae7c2724611b18db11c85e9e63602ccb5cd9f53e6
+Entropy.11 = 7ae68388601eac169bd0b3a85e3da2f7f688f2afa6a2a419
+Nonce.11 = 3b08fd7775eb8258d56fb28335c285c9
+AdditionalInputA.11 = dc8061dda83f1efdfd6365b5e5037337bf3e9a2f74bd91453c0e35c0d7c6c111
+EntropyPredictionResistanceA.11 = 9b9f119e2df35f791d22ed4d8f8016530397e740fe152ded
+AdditionalInputB.11 = e9c5698cff00aa404bce152057f70ef44a002caf0f39c3f15aedf0d401fdbb5d
+EntropyPredictionResistanceB.11 = 034a6068f9162e0dc005d6214ad1cd4aa4ab7f3903b54dfe
+Output.11 = 9fd4e2f770d707e542cdea91c12e4fd19f1472b43fb5b7424f5b2cac205cb37fea4596415deedd8bdecc52a8c1cdb8a9584f43830f26dad8b66087e068ff5872
+Entropy.12 = a8a202ef6a0d06bdb70697009df705d7682f687071a1ef4e
+Nonce.12 = f13c1657cb576bd509affeffbf5dfd65
+AdditionalInputA.12 = 5e80484e0bc37d6ff6cb200f6eb9a94f7a945407f9822452f755a676757b0195
+EntropyPredictionResistanceA.12 = e7310bf0bbb1305696b690e1a3b8abdeb791c3396bbdea9a
+AdditionalInputB.12 = 4c734194762928e97ad66c92ce0be7ca64c030d83c915bf0c15ca69fc5b85f13
+EntropyPredictionResistanceB.12 = 1832963712573a5cf4022ac767a3bbc01d4ed10633df0f3d
+Output.12 = fdc5f16e7bdf82db39d820fb89772334c922fac26b424789258673f5bfe58747062ad39a799ac58be646dd9aad8c28ff2ce4ebe6ecfde14aeac55ded27582e80
+Entropy.13 = 72d141b86e58c0af83626652e12e29cbb3c1077b94d77690
+Nonce.13 = 4457876716f291130910dfa23079a40d
+AdditionalInputA.13 = ce29ff13904e593ea2282999b2fcbcb5daae5e35ff71f0273f6d8538c181b04b
+EntropyPredictionResistanceA.13 = b07922150f477e720a72825fa40c0edb2949ef932e533650
+AdditionalInputB.13 = 154f4200277d1937b561e4cdf85656ab2e41a3a005423977d5361eaad0bf1897
+EntropyPredictionResistanceB.13 = 3f21b3f21b03e376fc8ba451b45ee829aa37eaf12e1bf881
+Output.13 = 9323034e0d9c4f53eaf50b367926cc691e6eded207190e369bdb2c7d8cf85977068db77568a5f29c0c1913c362a653cc2a1ce1810aaa8ec376a6400e2567f631
+Entropy.14 = 514f73b17fd81a39dce9806ad4d2e44fbe2388991e2c5fcc
+Nonce.14 = 25888946bd9072bc142988623bceb381
+AdditionalInputA.14 = e295ab1722e9d9badc6ce82a2ea6c740702231e612a316693e1a08a189eb3a29
+EntropyPredictionResistanceA.14 = 58ff0f79bb4e5b6387bc0dc2a49b2331c0cc065570f38b22
+AdditionalInputB.14 = 84f40b0f3a2d5b737b3528f4b3f5b14e80e20ec0b99acafc558c8bb2a7c696bb
+EntropyPredictionResistanceB.14 = 7fdb1b169accc8d699a25c52ace71a5b5a8cdd8a9b7bcb25
+Output.14 = c9729416ffad8944cc06c3f8eaebfdd44219cc5ce4e408c32221a513f285a30b19f4ab45a430fb49bd68b7398deebea5a194a4a2248a0547df2f763e40ee7005
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 9631d3fee5e8ed7c6c1962185101bb20230495bcb9deac3d
+Nonce.0 = 75508cd6e5f376f90f80c64e77feb1ee
+PersonalisationString.0 = 2131c82572d1027ab1bb860f7a8c54a1da20cb2dae5d254a79c1240705d1479f
+EntropyPredictionResistanceA.0 = 865406ad56d8631641fb2dcdf9b8048e4e82ed507d5cc9d9
+EntropyPredictionResistanceB.0 = bb904d8fb6b025a5013510263695687ab2029552eb99c575
+Output.0 = 4b3e8de33edf7f4ca04601438a853d7794963c77ddacd0de3ad1ab44c047aecbb4b9a11c235a3ae0b8267d92c7e30078c4cf949c2e21f2ae6540b9189735f9df
+Entropy.1 = 9843dc9d0e112e50b5dc8c02660af75b0b0581eeaaffef63
+Nonce.1 = e89d90d17130ede9df75d9b173a562fe
+PersonalisationString.1 = ab947489215a28224ed9515a237966328780ab3a6eac6f4b200ed3f74dd8ec8d
+EntropyPredictionResistanceA.1 = dd0ae136180c0b2d696c6919a55e7ec1df259a507f345bd5
+EntropyPredictionResistanceB.1 = a730b07568d87ef76bb33bd23e6c9ec5d1708b2f1473b320
+Output.1 = 7f819a2da013720a1359f2dcf0d111cd6472ca970e8353cafb834776cba3d68964e32bce9620fa40921d40720fb2a3bfefb346c7248a1b4fb4fe90d524aa75cc
+Entropy.2 = 5834bbf19e6a7bce04451ebf912268c04232ad4b0517b4f8
+Nonce.2 = e497b886e7a8aa96876282cfc3e3a014
+PersonalisationString.2 = c18b3db2824d5f01c4c250b848db27e0c69a864da95d0dfac11bbe2f9d298ea3
+EntropyPredictionResistanceA.2 = 676c49bae4d431aac08f34484b11bd37c79ff6c4704eba4d
+EntropyPredictionResistanceB.2 = e0040f8081b1c989f99e1a3a8138b7be83ba007b5dbb8178
+Output.2 = 4a29519c0fa83dd71349bff8c8a46f4a8ccea6b3d11ef8dcb19f3cef6e2b015d04c82f4436cbd113c130d793da6e4e58324fae106a4896ff63429738167562f3
+Entropy.3 = 74c46e2606a858993a16a38e3841540cf031c1917aa35ed5
+Nonce.3 = f74d9a16bf6a0ebb70ba1431bea9c6ea
+PersonalisationString.3 = 520e607c5c9bfda9732d1f71b4efc1ac7c2c385714f58d31adcb4b063d9f5669
+EntropyPredictionResistanceA.3 = a0124b60d58e1da9f28a68e9853883b4e69e0fca8abc0bf9
+EntropyPredictionResistanceB.3 = 29b656900a4665c3a89bed7d2e2268ddf0acf46211d33d80
+Output.3 = e1adc02c6ab6ffe27afaaea0c473210bb896b1abb3b00d228ebe1a55106c451ea15f5165fa2f4562c091459598ede05dd14db11d43052c669dfcfabaa7bee765
+Entropy.4 = 4f08d84ec74bd6e3a6d883bdad0c78281557febab57aec6e
+Nonce.4 = 4ba9b606fb2d2b5d9bef21c535f62b12
+PersonalisationString.4 = 4b337627453a95563fbd3e086b8016f4e2511d2928554009fa8df6dd585390dc
+EntropyPredictionResistanceA.4 = b7cbdfe26c30c42f6c491b076477fdd1e359e9134d0fe1a2
+EntropyPredictionResistanceB.4 = 57dde001196e6242cedbdbae4de2ef2b6788cf40c6211f19
+Output.4 = 5ac54461e34626bd9c21a4ca8f30f23d76ce2a7a17c3e349d5e90b67b5a701adcb2d399d2c91c7a1cf085d4c9b1c5cbab94ed5a0486cee80f83e4c1a4302cc38
+Entropy.5 = 3dbb3388ada803f0b05cf569f22e694d9d5613ef0fc4307b
+Nonce.5 = acbcf3fb5cf07a0febe1eff44e1e8ff4
+PersonalisationString.5 = d793631948921d4c5d627e31dba1c57350651b63ff0999b2d183b09b8b00954a
+EntropyPredictionResistanceA.5 = dc1fbb8ca060e16665ba58b3a935dda878c46420b07174f4
+EntropyPredictionResistanceB.5 = da5bf97be1f2c8bcfc0a075780b8db98b8e7bcb09b22a956
+Output.5 = b976d680f5a64fce15fc39f49e83f32b325bad212671da2086a82a07b7b1ffd33b1b99022595507c90f26a3a21bf98ecbd5cea7d697c6a160ed1647902e36aa2
+Entropy.6 = ec9d0654ee12e8b2d99835f640fb9026006ecc3262228850
+Nonce.6 = 4bdb7d3d0249494f4408f5e3158fef00
+PersonalisationString.6 = f43ec6abe61514303e93a8e3b962bb764507c95a361d12650d7dddf34e528a93
+EntropyPredictionResistanceA.6 = 8cbf62ef1dd5e03157844725272029bc935313a5421bd64f
+EntropyPredictionResistanceB.6 = 5ed76abf5e8608a97543b280953cc01f93321b554cd46cc1
+Output.6 = 439c2fe989224a4ba5c94523d35083762845f2f88c8a1be3f1a4f89ee0a13c926a7371724718b2ad3fcd681e1994e69497c94ba08e67e5189b167099e54f0703
+Entropy.7 = 18dea6e0bdda952bfd983813d5fa4ff8eba33d94ba121c50
+Nonce.7 = 2ecc42998738e03cc27ddb96148c834e
+PersonalisationString.7 = dbc8d60b977fff2e70ac7702f2de1b8fa86b527eb2acad5f688d89d9884e51ba
+EntropyPredictionResistanceA.7 = c94620867dbda504bdbaf183a1e3ea6fca52898b07ad48af
+EntropyPredictionResistanceB.7 = 944095b86a9d01ce270f40c7d2359d623a0fa63039f86742
+Output.7 = b9ea9909d00064eaab8d0e288addd2cb0cf4436df6f5328612dbc9b88e02b733ade133bbc5e1d243727e985a1dcc79b34a1d9e8d1d9830e3e03f2b347426e2c7
+Entropy.8 = 8323d6fb62dc4d3331f5f7748fa99187ed01f58f4fdc68f3
+Nonce.8 = 0ee1a6232bf4ce1034f6fcea07b52979
+PersonalisationString.8 = a5c553db9fcaa8b1df7ffb019eab1bb98090b1fa957432083265157a570ad67e
+EntropyPredictionResistanceA.8 = 0604f0eb6a2a75135596ce5a2af3d771e16dc02a07a90bf7
+EntropyPredictionResistanceB.8 = 45aa656129efb83fcb1f9f018d3d6c12248606bac2e5e14b
+Output.8 = 4004009a4fb2614cc197b3d052e68079d4583804b2bf03747e40ee7f52abe22c58c3059aacf1b1838c8b3ffc4fdf47a194d7836b81836fcf1c7de56526575786
+Entropy.9 = 5149609e753f20749fd00b4bcbce9261e5746cfdf6e237ea
+Nonce.9 = f8a77e34d77e0a9c4cb1c50c5f8b61b2
+PersonalisationString.9 = 18eba2eec81ac9fc8e88ce8fedf222aa4e3743f27f9cbe5d9e55d163843bd461
+EntropyPredictionResistanceA.9 = bc4a3539a46ca3d74af18ae07ff0e14a4d353fd2b33344e9
+EntropyPredictionResistanceB.9 = e8eb4c7885252deaeaf4b7b5765b02a92a68f0bdac9353ad
+Output.9 = 4b610b6f96dc517fd438332f5133aac993db66078b6c55fb8aa87836dc2c69d87bdf8b47bac506026800de19ea5732b2f222fc2bcf37d6c2054979a780046897
+Entropy.10 = 3970014053782e6080fb67d8d339ef590c498d9d182f7650
+Nonce.10 = d966a0a6901e25078440920973a5ded2
+PersonalisationString.10 = cd2b40749056842751a0de7dd0d09cabd32116d9bf3bd04c62022a38dd478b25
+EntropyPredictionResistanceA.10 = 6d79cef4ad7b01ff82f186c9e17e370455f111c53e67fe0e
+EntropyPredictionResistanceB.10 = bea30f2132987ea6bb0c69d6b4ba67f13acbc6ac7fb64d46
+Output.10 = 645725397ebb9b1848cd89ee6f98595d0a0190c3176e15f9140ff30ca58ee4a78489c1480a00cebf06c403cc9ed80f4031f16cf879a18f6c48b639a8fc7ac906
+Entropy.11 = c58ceffdd2b475142f034f8d2665dbf0f4cd621363a01491
+Nonce.11 = 37c9c24b7bf0459f063efbe13bd5e66d
+PersonalisationString.11 = e514faed1c027917f5b835c9a8e79c56dfba3f060274364292c30346ebe996f1
+EntropyPredictionResistanceA.11 = beaa0119cbbcdec5e742834c4f9156f78bee5993657ce142
+EntropyPredictionResistanceB.11 = 04defb3e85d088cff49f48ac03abcdd589c79f0f4fe3cd21
+Output.11 = 259a0c13a753ec22f24abfd11dad6cc2eeef0eb70528e5ecd5231dd48d5f5b2ac30635a602dfb5c25f47a46f51a95ca4fa56c7c52eb1519d245d6aa19f34265f
+Entropy.12 = f520601863a0d6d969846bede92fa2962cce5aff9fc51373
+Nonce.12 = 10acf084e463dba0fdf9f53ee6e513ff
+PersonalisationString.12 = b44ba9b0ad6221eb37f6c0a0caddd46da77cc61bbc06ed4083e6b2d8ad531462
+EntropyPredictionResistanceA.12 = 40548129d461ff0f04e83b5b7ae79e00329e1646e7476cd4
+EntropyPredictionResistanceB.12 = 9afeb67ac76e1e2125bf7bd1cb3a2007c7bbc992cbe49563
+Output.12 = ed03e8861dfa64c4c05d055ad64dea425a72aac6fdf5254b09551b07ce294c63a82bcdf226d8676e95239886356f676de539ce67c9742c340f57f939ecf858b5
+Entropy.13 = dc831dc08a459481a0b30325d828e6134840d841a6ccb220
+Nonce.13 = 21c71ef362002d2cc6fe58634c8cff95
+PersonalisationString.13 = 1573816328c9e1877b505c659ec6a1c180398b5ff00513fd2c20545bda0a14ec
+EntropyPredictionResistanceA.13 = da8258157821bb8711cc103c48f24be53fffd2f2f2be9f3b
+EntropyPredictionResistanceB.13 = 29e71727c5b130b9bfbb929de8906afb775725c7b1acc696
+Output.13 = bc56a97f7064705e23cc3e026c3f60a2c468d47d3d7c1f747a1a3f772df99bfc2a2cad7437df0153a89c05dfb218bcb7403d921fc342e6c858a7b78390560d65
+Entropy.14 = caeabd720d431b863a952092624e28eb5c5dc41506d630da
+Nonce.14 = 810594c9cf55587c090fd72d4e776597
+PersonalisationString.14 = 02289c34c2e6eef156a4d9c2225415191159fae5f167ddb4cef72ea4d0a56596
+EntropyPredictionResistanceA.14 = 50fb179c0a00580460e82ba7618ebc1ebdddfd222e085b8f
+EntropyPredictionResistanceB.14 = 57ce45b5ee35ec9d350cdefbb5274dd7453a74078b02f010
+Output.14 = 41cf2e2768d79bbf16693b2ae6f3213f6e45f0c317a41d5bea78eb21dede2f3b5a4a997d1d89578829e98457386141e3788bcfe78a797721df5e2d3567af4894
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 43cb1ec225c48dfdd8c17894a828da0a27e1c18a511f0cb5
+Nonce.0 = cab1f0e40b2bf2326bbe6a3ff3446866
+PersonalisationString.0 = 56ec59e7bd36372edf0e492c2f6d88b8c96a40e25550b4abc4a45ee1163de0f0
+AdditionalInputA.0 = 3f1aea69e666c5c52d36f6409f3129eecb0a979dba48caa52c87764dac637f6e
+EntropyPredictionResistanceA.0 = f52687cdccd9e509a7614fd2883d9961e5c8f9495bb66f68
+AdditionalInputB.0 = bb0bc7dcb981eb52164fdeb07ca5f9dc7b789001731fd94834e2862754663210
+EntropyPredictionResistanceB.0 = 5d867ff77d0f59005873f0370004d4f8e78198ba683c2be3
+Output.0 = 19c91f555d7683f844d57f9dacfe1a72e1e0616735ae569f370ef1e770e1a63b9d8e10461acdcde85ef03b1ef74024c175b2a7150ded03a1e3082cd46a499093
+Entropy.1 = 90c21364ede79f1afdbaa532186f9ddfd63df3f32f5408a5
+Nonce.1 = 33dea3aa07187026a03e5a292f0206d7
+PersonalisationString.1 = 9f5acdaa96b981d36335a3c168da06d2f4695047166d2d8f92f7b29fe9175571
+AdditionalInputA.1 = bb847b9ab8997692619083a4c374c8c68a4035b45f9f0728bceccb0723b0b3af
+EntropyPredictionResistanceA.1 = a6e34e045ee2585bb73b1f6491e54494145857cffa67bd12
+AdditionalInputB.1 = acdf0c917a4392972985bb6874f71e5da5fe7826f1e0d28d5612fbfa05a9c5c0
+EntropyPredictionResistanceB.1 = cc7e9833977222a503dec289a7b8cde7b41a627bec01abb3
+Output.1 = 5f226cf75fe05b276dcbb30a6e330f2c583a9aa4c1979d9cebca2cf36d6b959f10f038f9a01efccfff0ba611d04181fd4cdbeb3a7e62434a4a131dc9e7946c26
+Entropy.2 = 985d12e6e4e2c8c6e01edcfaca4392c4b10fd3324415ac07
+Nonce.2 = 3f8f6cc38753de1efe4a985cfac8b668
+PersonalisationString.2 = 4d333ee0a584a814cf846c35ba7c930de69378ae47955e039eab179b5b5ee2db
+AdditionalInputA.2 = 68c2c1e98c5a1e574b7014316daacbf8c363302704e8a2fb8bd10f4be2146e9d
+EntropyPredictionResistanceA.2 = 7f979dcbf2f7a40345c3e42e1f4f44a8a91f29706d5532cf
+AdditionalInputB.2 = d06e09cae6bbce8617f5f492a31c8befcd6989f1ca7d9ca143f576336d0c2a3a
+EntropyPredictionResistanceB.2 = 935d0db15559772786d2494ea0211760cff50d21c30e2800
+Output.2 = 947f8b76166863af59aa5ffa4959c39e003acbc654387d7392397622bb145959d6ec1b57cfd6754977c4edf9da08efa63a15f28a7413ea90f74866a84d8275c1
+Entropy.3 = 0bfae1f6871c42441477d56b1261478c2b17c8dc02df9567
+Nonce.3 = 6e6a9520944559628868f7ce34557cb1
+PersonalisationString.3 = 1249796536b6cce181928389416091f9ff7aca40e3dccd8b22074667cd8d45d1
+AdditionalInputA.3 = ba27f858ef28ea2e47e432aedef9b14f6d74fc6cb249f607e349f4eda71dc070
+EntropyPredictionResistanceA.3 = c6f98d226b6433c2133be5cb3ed0dbe36e44b3612cbc991c
+AdditionalInputB.3 = 9f967c24780d847c63324da64422784713752057ccb48722ee98ca4e675103db
+EntropyPredictionResistanceB.3 = b10dda8ab93ae5ca16ea3c0f142f20cae5c953cbea18031f
+Output.3 = 6b559f2f0388a7d7ff73286a02b6f504e9142db7a1d5c3f9b21cde508da838bdf6742db80d5b2647d1bd024ca0162e2d651ac339269fcc21913472307ddd51b6
+Entropy.4 = 9d2a540ca44e2a55efc1227eb1299a59702080a8aa3026fa
+Nonce.4 = 9dc9d33fca9aca40dd21bb73b22f08ef
+PersonalisationString.4 = 679fcfc04d2178ffe6704ae52f8153b770f2402ecb20cfc815564dce8cb7ad69
+AdditionalInputA.4 = 97825c8e79e499d5dccf583d61252d36a41db6d0784a5093dbdac7f24fa43d84
+EntropyPredictionResistanceA.4 = f0512631e8dfc85e5b5a76de8bb08c5f5029b31e2e37fe95
+AdditionalInputB.4 = 25538a86e4aa416f806e576b1def3c447ba246e78e1082baca50186ef9066944
+EntropyPredictionResistanceB.4 = e4d9ca10c45df68d0e6c561409b30962ed7a8a9d1ff1f217
+Output.4 = 910031ab5b9c14608b587bc37142305525f0d0b29e2f3b4c5f0a843bf4faa7e32c720725473b5267a17ce7e3e15b81d23b59b56d87ee5a4247d976f3c4aea16a
+Entropy.5 = 808cc39a30a5cad3c26001840201d17c374584157bdccc2d
+Nonce.5 = 4a1d34ba60fc1fbb7c161ea05ce18ee8
+PersonalisationString.5 = 7fe07793abeaa4d61da7a0446a6bc3560f66f44375818b6f2098794accc61714
+AdditionalInputA.5 = 5720c0c18602734d9de7f155adcd58d61d73b1fc3001fa81c2cd05d41ff3d4c8
+EntropyPredictionResistanceA.5 = ec7c99f738fc8509531ebb546743f2199a5f81a82ceb60cc
+AdditionalInputB.5 = 938947aca0f9fdb24924adab6cfb6bd1b00feff7dacce2eb00766a51f5a7f46c
+EntropyPredictionResistanceB.5 = baf93d5f4992dc9126d94de2d7c3cd737ba85ce525468975
+Output.5 = fdf2f49719b9b41c1d56ba9459247116aa8b04af7a0ba4dda5edf7d008084c063c6d1c12641b6e08cbd9e8a1a5c2acc1b29cf1d006ce15e53b886e6d62082a52
+Entropy.6 = d05bc4db1b2942c16a2e7dcbc6fa1884cccf083c37342fe1
+Nonce.6 = 8a9700a121145ba3896b8b61e20f0b20
+PersonalisationString.6 = 7e7de1c173e6098d79d70b27246860eccb8b6a68b18cfa7df828ef55f07e94d2
+AdditionalInputA.6 = 1525afb80dcc3c16840e6eea4c31828464ebe7efe447091b01bb110155ea3c2a
+EntropyPredictionResistanceA.6 = adcffddd3f7e4643448f67b4d960171d4f3fcacf235288b0
+AdditionalInputB.6 = ef388b1ee29c839b9f45b51a8d32e4dafef2d20d83a1621a3ba2cf83bfc9e4bf
+EntropyPredictionResistanceB.6 = a0235a6fbb9906a936e3a5a78ee6c41fec4faf9c5a9d2677
+Output.6 = 1917054a2cb7fbf0525413e3520dc6045d0ac94a8a8d779fc101f9d1399a1f47967544f1f5d3a127e5b35523f2eb1fb024d8767498cd4e46bed003f5c0f951a6
+Entropy.7 = 6b3c023e65e97f336cb4ea0cf44258c4ed5676d465cb5aca
+Nonce.7 = bb2812faace90e12aab47ac7f03a8355
+PersonalisationString.7 = 8e523d5afa41b84884ac98aaface23b08e909f381a5ed9b707b5cac5618caaa3
+AdditionalInputA.7 = 81e3e61154ff95b73febd4c377c5796b1e3e50252e864d2a3ff92c04ff185205
+EntropyPredictionResistanceA.7 = 0499bb60532f9fdcb8dd5dae823806938cace4d5ae61256c
+AdditionalInputB.7 = 0bf3e2d201748d461f4b9f621a73fd71f5e2bfb5b7665bcaa3f8252e3cec9e73
+EntropyPredictionResistanceB.7 = 887263312a6867e4a55e46df6e1a7d9bd2449337f7a3daa0
+Output.7 = 0893eeafc0c327736de0a98b736e21c2aeefeb4e418ad636de34ae8545e1cae63cd8dc3317669bbe8756063d585246111be2d324ad38da01e0774706fb3acc35
+Entropy.8 = 64d1763bfb42d350f6240120e7136cb7c660351303435da7
+Nonce.8 = 9b97630b2630b43a1ee8cb9269f42dba
+PersonalisationString.8 = 499d2ba36a522f19f346609ad5b0b5e97768b86fb9a20ff3df02dc87660e2483
+AdditionalInputA.8 = 49c94fb0c461b4c786c04e38ec480750b8a7d81c382d4a0baf20dbc0a161694c
+EntropyPredictionResistanceA.8 = e30d0d80e0ee5e2978635d3749d0579d398822ac0eb631c2
+AdditionalInputB.8 = 2d60eb69069b6cac3d81e11fade2de05986364ce91b0e86ca0f1645305cf09e3
+EntropyPredictionResistanceB.8 = b05da4089b61570b8ce8c9a8cc57c42888c8ad4c2cc5092e
+Output.8 = e90417504a0cb296590337de2b737ff1dd9f0ad31981b5f8db7a768a63cc50210e3479eac8b9b9150995dfb2104229021276f76eb1d29d89d5973cf78158b515
+Entropy.9 = a197898593f80ba8aeb68e2a7f5d95cc5a6d63f50c18261b
+Nonce.9 = b5060fddcf181ea854e6bc79b4819561
+PersonalisationString.9 = afe6aba66c8d6e7dd7f1894ed435e34eee24d5729cc2fbe0bbfd491632dd164b
+AdditionalInputA.9 = a9d5127442ade52458c7f2f2505711aefd4ff948192ca6a2b5ed024b31924de7
+EntropyPredictionResistanceA.9 = 79ec4a64f612f99ef4a7def0c7410e4805bd2d93196b8f31
+AdditionalInputB.9 = a20b9dc4dd72aa3a420fff029884705de991217b65102604c32c2d4438f51c8b
+EntropyPredictionResistanceB.9 = a8cff793034000e14c8eb5044eaf182792ddeaf27b8aeab9
+Output.9 = e94b834119dbb318d6ef48acbe75668716cfb77dac602843b3b743535d6c227841cc5c1158020f2e01ad8c03102243600ef9358bd988c024b8ca41e5b7e8f3bf
+Entropy.10 = 2113ca53084475a98e795ebaf689afc6befe80f9275270ec
+Nonce.10 = 7e9256fd04bb92634d667133a37e9169
+PersonalisationString.10 = cca31a057f65601bd2eec5e75fc13ae6cdb08147e20845bb36237a7d03c2d522
+AdditionalInputA.10 = 780ce6d0718e43c3ae5da794de6ada17f71a3f66ddf99a4039b8057b452c43e1
+EntropyPredictionResistanceA.10 = f7cd8eb075bb73a3b5fefe46dfc32d423481b567aa6f8761
+AdditionalInputB.10 = 4a856882e75ee206c5bef42123482d27373561f688638d569ef09f18941a6614
+EntropyPredictionResistanceB.10 = 111ae0bd6490e46becee504237bd8177da359dc9df8cb4d4
+Output.10 = 39fe7d8f5da06e2c3065532d3a581262da24a3c2420af43bb075f0c1ba17005052e839506354156c014f0124fd128a622e180dfcd0ed4cf8ab5ff24ba2b3c54d
+Entropy.11 = 6f9e1e392b6fcebcb1e9858426c42ca52fd33bafbec3dcaf
+Nonce.11 = c84fb277c98e6989fa3e74ce1d826188
+PersonalisationString.11 = df41b60780f856eda3ed444ffde46fba3621ca7363c4b613ebc21f68480c164c
+AdditionalInputA.11 = 2092ec92d84a48012b6867adc528911610e8f9d1fb6bdbb75f899a10a3445af6
+EntropyPredictionResistanceA.11 = db941215f76ce3ca34d144122d5101ebdbae2d64d2cc630a
+AdditionalInputB.11 = 4444a4c031dc99015c5fdd6d0066494dabbbd2c5fff1782acb044a1db98b5294
+EntropyPredictionResistanceB.11 = e71d178b58ab5c8e953b40a4763bf32c0a742e25cceb417e
+Output.11 = 60f3fe740a96ec3bb47218465ca1f37083bc023d675c18835186deb9baf62a789e7f19fc2bbf22040b268dfa110521d2e298851f8393e0134445e66550de977e
+Entropy.12 = c647f8ed577fd50e4038d6d5e5ca7548aa0768e7f1a29f6e
+Nonce.12 = a496d7c46046c566ddca9f94fdc3d0d4
+PersonalisationString.12 = 59e8c6b64930983f5e9ae92908ad84fd58f87bcc39941abe4c0e8e96c76390ea
+AdditionalInputA.12 = e532adec0d3acb7dd51f49dd709bf9054993526e5e08672052f715a2ab55da41
+EntropyPredictionResistanceA.12 = ce3ea32310cbfeb71744b8bbe11eb5cb6982940dc576b6bf
+AdditionalInputB.12 = 67bb8c08c0e68881b466862532dfc8d3e80eae249923b7923ed993afd11867de
+EntropyPredictionResistanceB.12 = fb1de3e88e8ad30b16f9da8839e55a4b9bb923a3a08d0047
+Output.12 = 31c78a2f5e72c9ccda8fe9669f1f1f6492e8e63df758a8b605fb0c6374884cd315e1d7a6eddc72c02dd3c5fe1172bac0275ef574d109f9d685acdbb1baa7f57b
+Entropy.13 = c26253f3c83a89681e7807423b20c4303924ad5edb296686
+Nonce.13 = 42045c4bcc5738c19059b2952cc6def1
+PersonalisationString.13 = 68b11c2d2ca6f07f9e96197968f095e45160e910eac583feb4e686fb9d197eb7
+AdditionalInputA.13 = 7da8f178c6bbaeda7a158b19bc18a32a9b3d0caf4288914b32a9884277757bbb
+EntropyPredictionResistanceA.13 = 0007e3e2833910bbc098f8c1437caf2e0a6220216207f09b
+AdditionalInputB.13 = 2e5760a4044a7cd8c0df35fd85bfc6bd3e38e12ba3b5a47bf2c9ed521422a76e
+EntropyPredictionResistanceB.13 = 76253f3eba4c81c69a12d7d738e65bb39e7230085406133a
+Output.13 = 812e56a97a9f62d14a2def87b89c7a19cdd30926f363c52179931d7cbca63c3aa7fa715fdda95afbcf4f023679f07d45209cb954c3febdad61c649d79aabd0a3
+Entropy.14 = 5dbd7c15999250e3e00fbfa188897c3c8b82b946c80c366a
+Nonce.14 = 193da467ddef6c6c6649bf6d09796e52
+PersonalisationString.14 = b03f58f97a1f0ce4b6b1808e436ed24d8ea153652dcbad8211f8e2e4b764883d
+AdditionalInputA.14 = 4e024dd4fb29b2f950439d70f7f06ad594a110b237aeac4b731a227a545017af
+EntropyPredictionResistanceA.14 = c5b5bf672712a1ebeda02737bcf8be477a52d1d17c09e964
+AdditionalInputB.14 = 8ca06afac7f836efef3b5da8b0475e6c238570b04f31f74f110d31e3c2b0df91
+EntropyPredictionResistanceB.14 = 438b5e3e0745209f53838fd015d1d08973de3499464ff57a
+Output.14 = 52843d9ea80e30622e52ceae599ab0bca66a5564aeba930ad98c6ac3e0743d8e459cfa2e170dc6ecd21933f90f799bc1c8c6ab3c18ce2155550e891a6908aad7
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 8f1648c367ff75ab2a2efadeb0b22d3bf093afde2b723c25
+Nonce.0 = 4a4e679e52c0f56420799399dc9bf086
+EntropyPredictionResistanceA.0 = dcb2cd2144670f4667f045d5e04c1d1b66c65b5074e9763d
+EntropyPredictionResistanceB.0 = 8c505353a640d323e5288272d0320f245aa006f963ef8a48
+Output.0 = 974d06984713305ef496a01a0a42383d3e228a31ae75c480994baab58d144ae32f7b646e4af41989a253745c3c529db793f948510cbaed04f70f279a4a7b88a1
+Entropy.1 = 5afed29ae5debceafd2a657bb433796e84687ad029a6dd62
+Nonce.1 = 00bc2777790d906b4a547cba39c37a5d
+EntropyPredictionResistanceA.1 = 5d3ae9f78a1c2cdc15bc047d2b799e56a82ac58084c9b63a
+EntropyPredictionResistanceB.1 = c8afcd89a7beaadf958e8b5de711c66b841917f75faf89e0
+Output.1 = 2e81e2270bfeac28faba5efed721b275c33d0b99f45ee318706851f8f433403cfa5f44b21376446f37aed4c3a3172457b96808285b42c7135fc3ccd4d33ece77
+Entropy.2 = 408474e068c01f068a96aa28a97d42c4bfaec2119cb0f4bf
+Nonce.2 = 82d9c6b93f1293f24f510918708eda04
+EntropyPredictionResistanceA.2 = 95ff5800e4a16bfe7de22f2be91e4926d4d24b789c8cfabd
+EntropyPredictionResistanceB.2 = 6f4f4bce555b05e929b7896d53131fee0d8df9889f3b70e7
+Output.2 = e1d5622667866bb7adf16305036c7bd83c30129fa945a064426592aba30fbc0fd0a11e13ba372a72b6ff72d014bce509b1d4338d797139ba67074e109d06cc49
+Entropy.3 = c629c342ec3df69e58f68315e42c960b5a3aff74e9f132f3
+Nonce.3 = f69e97bd53e07a81d2b0109d7fce7468
+EntropyPredictionResistanceA.3 = 43b61043ccf42d4bb713a89ec505a31c1ce00ab6d0820eb0
+EntropyPredictionResistanceB.3 = d7f549cfb80cf9e07cca6d216a58c984fb46bf65b1b60bfe
+Output.3 = d536fff4c09145655cdbbea88eca8b62f0b3b85767e84e164756cb36bf39b002eb3c6e5d30da1fb24b10fec2e0647a7688ab6247cc242a3241df255a116246dc
+Entropy.4 = d717e4325c5751d11fc694d99fcadefe27f999ca766b0e68
+Nonce.4 = 6e1fa6845069526b8d859d65b30b65b9
+EntropyPredictionResistanceA.4 = be9862dbc08ef68d31dbdc9999f9285a31b76c0c5d88001f
+EntropyPredictionResistanceB.4 = 82045d3d2697e7edc80c9f2618b2603e2f5b6621c04a1a2d
+Output.4 = dc0e3bd907e189fc2ab29aba112999bfdff33a5c5fc58bd8d9b2745fa6c7d0e5f07fd874b51174628b5510a1586fc0156a104e29e95103dac66ed1c44d86986c
+Entropy.5 = c2dd051ebe2de855c821fbe9124aac3e016c859477b484cb
+Nonce.5 = bd1fab037ddd2031212fe354845ca9f0
+EntropyPredictionResistanceA.5 = 31377b8183ae0486f0a62a0c8c6733e9fe560e05fed5805b
+EntropyPredictionResistanceB.5 = 1d0e975f2eae84562c6e574a5169a8472cb4ae48c58e436a
+Output.5 = 8a5edc0034c10d871ba2e0a8043c518c3a0092628b738fb71b3d614877dc2640f97f2d05234bfdb6a38b518b707445366d0af1698f283f87b059fb10957f3361
+Entropy.6 = d4271dddf1f7cbbed8f35d0340edb3370b784737f819771e
+Nonce.6 = e5766f00d7ba49f282caa1834432c722
+EntropyPredictionResistanceA.6 = 78da59c93b1816a2133560c30bd4ff248370f17ccbe5fd63
+EntropyPredictionResistanceB.6 = f84bf42147f1241ad4410c865b05c2f6621fc7041f58563f
+Output.6 = 242e64ff2b442f506c0aaa5b401e977a76a82986c9c68b46afc32668f597a414cd55c3ee2945b18a0eef092c1c08a7cfc97c0a55b1fc2ea5ad1bd140ca217c50
+Entropy.7 = 2c767649bc7ed0e8fecc1fe64e19a7f6223fb94931480e0c
+Nonce.7 = 53debf7c47e243ea644d94bbf3f636a5
+EntropyPredictionResistanceA.7 = 19820752c22005a9d1f2905767ce33cb22a4cbb02e46e6a2
+EntropyPredictionResistanceB.7 = 47d76e615f767725a6145bf7c87d979f1152611a99da5267
+Output.7 = 41dfc9e686bf0b6a77b462628ece6500a0cfde235879f8fc5cdcf140ad95fdb02dd84c34069dc7c180932ecf2523fe17274541b6f0685d99e0ccb9724efcd4ba
+Entropy.8 = 2014568d17b62afbae1f1eb007000174c53cc4ce2a6e2650
+Nonce.8 = cf75039d2e1db974161b8f081081a6da
+EntropyPredictionResistanceA.8 = 34d3a9c6038dd099e91426045333553a5e0ac8953d84a25f
+EntropyPredictionResistanceB.8 = 9566771e8009856ffc1a73ded0252d696dff7bf936f7fbef
+Output.8 = 94c18ca0321ea0a4c3e89db8c35d546c3ff4dde08ce08eea74e59947adf2bb26818438f15c7e0a83a70c0733d9a9d9eaab5d4f320af4bdc1b5a36d22adfb1d30
+Entropy.9 = 9459f15bd9d2013e5c484acc9540ca5346277ce897aab7e5
+Nonce.9 = a29db2b5ac4769f01d65631513f4de2d
+EntropyPredictionResistanceA.9 = 3e054224a8bd35d2fe61d2db863e7856deb67c6af6b7591a
+EntropyPredictionResistanceB.9 = 1f53c05d2c1efaf50f97e376720ec4f83625cd8b4d97ecc4
+Output.9 = b08abba407d05204e21fec32e84960dd0db0bcd4327405d2b2b8ca3fcd345deefa61260d9c37a7637d145778c047692bc1736cf1334c8d1a67392fd0cfb86816
+Entropy.10 = f14875078660b13731e8ad31420217762ce7ae709bf07b86
+Nonce.10 = 8cde822caca5a80ba219dbf671eced59
+EntropyPredictionResistanceA.10 = 63199ad9159d213854e5fca970d8421ca1240835ec632c5d
+EntropyPredictionResistanceB.10 = 110a3a8a22ec74d0f3b9adfba9a8ade6bb800f39fe61a22d
+Output.10 = c5c8039c83d210084e5f20c78ec0f94adb5bb4812613a8d8c2034dc1888d94d1547f9c887faa7f56ca2c2d5b9568410af5d012cf1daa39908e188232c5d6a966
+Entropy.11 = d12438932b139db2267cc34c9f5ec5fbfade88936629a7b3
+Nonce.11 = 195c6e32677142d11d23755f0115d048
+EntropyPredictionResistanceA.11 = 499538a82328c9e8cfc18e0a38321bed3134dd01815fc605
+EntropyPredictionResistanceB.11 = a27cb462e67377278cd71b334dd62182b973b2ab54e9425d
+Output.11 = 6e583e0855e85df32aa964b663da0e6fac989ffe625f19da253301b220863eb3a8ad56fbf2834fe8ec2c746ac2363f1c705e3efb9b1a17596cf6d6a907ad8e55
+Entropy.12 = 6a650db471545b7ae80cffafd89d2e16247637b2b3f6ab95
+Nonce.12 = afb6b45fc0ce3ccb4bb79fc510fd3b61
+EntropyPredictionResistanceA.12 = 4ee03c38b1e91769ded3cf02875420bdc3508702ac3867aa
+EntropyPredictionResistanceB.12 = 80b4284fccb60a3b796c00ee6b741a23d226f685ecce8db0
+Output.12 = ca4e567af787a1cd401db1a8e829e2021d49cea491cee366fa2828a15d002c4281e40504253a6357d4252274eb5a520ba83301ec9f0b86d33c1495ffa7a5dd02
+Entropy.13 = 8ecefdb6c377490573212af8288f8b4831edd5d12397f20b
+Nonce.13 = 40585b6fa65d929f8299b3641885b45e
+EntropyPredictionResistanceA.13 = 2ebe7283b65c2bb3f5d43d85157ac1cd515c09514ae7654c
+EntropyPredictionResistanceB.13 = d83d72f88246ee47ef21257101bfbbc6eac4d1ddfc11720c
+Output.13 = 44eaea4285f22350ed9316d5988c4663bb10e119d6c1b634e0ae2c8bd5f76193681cc4b970c1856d8dcf05dc9cce10ac02375c6915a24e18a6e5418729456a6b
+Entropy.14 = 2e2d70b476b5fb6a31386de54bc8560bdbeb71c3a665e7ec
+Nonce.14 = ec20777fc2423fc48c5d42cba316159e
+EntropyPredictionResistanceA.14 = 6c93a1a36721822e019e231134672bcdccaf8d5d487eda2f
+EntropyPredictionResistanceB.14 = 2ea8a82d9d023cc966368ea6499e1b1beee4333c13a096dd
+Output.14 = 3f791640a21175369935358ec778032cafec59199b529c97ba6234f433098dcc32fa9f26b236533691457c2a50c1c121c9be3fe678ca77aceefadb8630707280
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 1999d299c4764c0484a285b8b982ab11d044103bc57e5026
+Nonce.0 = 40ecc1e978b30a6584667e83f53ca6b5
+AdditionalInputA.0 = d5fd9fca6a17592263808de364ab61e4e55216b7f012b56294f1205fb3005e66
+EntropyPredictionResistanceA.0 = 4b175b4f53989d481e78612f0e17d299a195320ea7e3a465
+AdditionalInputB.0 = 7cb65274cca9a84ff49c31a4e2c656fafe25436198c7fbabfa1fc2c1668a8091
+EntropyPredictionResistanceB.0 = 1b53cafa3d238edec7f3994261f44505023b72ffe14e94b4
+Output.0 = bedbc0d67feadd197279405b5a59e7d350e3b7e4fd4e17fef087186f33bacecc7cbb48869520ae906cc4a55b444a9380d3f06952d276908f85652284a1de50c1
+Entropy.1 = e66a54a945194d6bd9103ee395da4c8980854babb5bc7ab5
+Nonce.1 = 27a5bb1fade9013534380cce801bad72
+AdditionalInputA.1 = 2ffe022e279f0d8f36285f6b740111edd4d73884d064a9d9a161618b3fc98252
+EntropyPredictionResistanceA.1 = 751514bd13b9cc50e98a14c31f79606c42919246ac938831
+AdditionalInputB.1 = 850b8b399c8210f415f4129c034efe58675c741b75a0b1a225b253c1deb4dbf6
+EntropyPredictionResistanceB.1 = 78a0f0876afb6848c3d682ce7b5c282357cf4b6d3d9db535
+Output.1 = d0a92f3ac09dff71e4da1f19b268fd732ef457c9c9ac9218fed28c3ad5760a0e8bf6f1927b7cc2cc7765be7a28e2252d3da80f7adb6719f8b85eea9c85c8a922
+Entropy.2 = 779c5497b3e649ef88559dfa1368883bcda754ab706f9c5a
+Nonce.2 = 0bf9ff2d3db210f42f77009ff8cf1485
+AdditionalInputA.2 = 01885f2652b010e2f2a8c39e7f13df99ef5a7dd1a813848c41509bc7885af486
+EntropyPredictionResistanceA.2 = 32787af0138319d1aa65cfc840e232bd6208ab651f47ec31
+AdditionalInputB.2 = 228898df825bcb01d22f5c6426b011c3872ec0eed328b50f90ae2bc5ad20505d
+EntropyPredictionResistanceB.2 = a88c2ca8115ff502b19c636291a9878dd9985b71d7812f1a
+Output.2 = 7085e1ed532f19aa7604555668163a253c0814b29e6f69a101f17fad1a75359a5d0b0f1ea84acab6a270bade2a2055305509ac9fcdf5a755118eceb6c52f3c38
+Entropy.3 = 1853ee9c25d95c87648dca440ed14f3312959389910e7f9b
+Nonce.3 = 4eb3b4c4f5b3706859323166b1789fa6
+AdditionalInputA.3 = d0090c320cf8b5c21fa9df3f19a1e3537732deb6899a770e4384d1dab020b2f0
+EntropyPredictionResistanceA.3 = 3c34348e1b32f3910586ddaf23c00f46341ecc4b9b877505
+AdditionalInputB.3 = d23df8dc0a1e0089b05b242475fde9e578d41f47d2d32b4bf377c09280ae30ba
+EntropyPredictionResistanceB.3 = 050d4196c5c581101745796c7611c09a72322f1ef45d04b2
+Output.3 = 6064bd85cdf6ce5105c509e2b1b54fa92fee5eca5c1e176a60e498cef6266b10428795306e54358eff459df72a8530cf38f91113db8ad221a3f8307b1d4e9b71
+Entropy.4 = 2485a6702a5edfef7c8491aa430a8dc1191fd8c940ca6bda
+Nonce.4 = 731fc002cdd15b5b662f202203a90020
+AdditionalInputA.4 = 7a11b2814974b11bdf9face3f54b5822ca236c59dc2c9e81541b0ee8a644e747
+EntropyPredictionResistanceA.4 = af4697e885c9c85cd5114b28875a300aec89b03623fee6ba
+AdditionalInputB.4 = b8690217aa471c4eeeaa90782170b524fac1a78e3755fea8b0ea251e8f739434
+EntropyPredictionResistanceB.4 = eab3b98681a85c2fd8c4c97067b1c7e5cb4d833850e119f0
+Output.4 = 40eeeef80ce49d3bf0350b20982fc9fee2184bcd854995fb23ccd44b2dc356981034a1960bdc1cb12e1eb3e5a2bef7ab5bedc49801df041c344708f95cbdde99
+Entropy.5 = 24cee306562940199ab6837b40d7ffe302c5682935615b3c
+Nonce.5 = a480103df665968acb5279332d51f33a
+AdditionalInputA.5 = 2808ab0280e1a4a0b5637346e912ccb665cf96602594b5a4633b5871d65528b6
+EntropyPredictionResistanceA.5 = a42f47881b2d9f912f5aae0535d1293cf15ff6c021e16c38
+AdditionalInputB.5 = 363c94c06c07e364130519c1c65090518974b6e238f3968bfa4ebc7670a9ef5c
+EntropyPredictionResistanceB.5 = 674db98150b5590f98f71b37542d2c6a4f02baf896366309
+Output.5 = c915df7ac26969758f32ca429fc8335dd6be86603785771b2e8ac838e7d242a0990253092d6247bdf1199e5582aa0808365ce75884f4e098d4b6058abffd3cd8
+Entropy.6 = 7f70541d695aea4ac781e75b45954ea2fec90866821469ca
+Nonce.6 = 498a65d8a44784a649060078f3829190
+AdditionalInputA.6 = fda49ecc3ed35b59851aaeba4ac38a53ae78d8812dcf56bb7696f2e5808d2ecb
+EntropyPredictionResistanceA.6 = 0e1230939e9bd0854cdc7b9e2d07b4734678eb898f9016eb
+AdditionalInputB.6 = 04e408a9b7a1473fe96b088660908f730bacf2e475f5d83e951ae88d0de3d856
+EntropyPredictionResistanceB.6 = 1ca660007c0218bd45f0660ecf6f98248f23b2d87b984a59
+Output.6 = 599a96d325accc57b486fc65ac9eff4ad4de51c08b3147fc1e240a9e27f05a2dd4c47a27700859fd11c023c7339b4f1cf8f8faae19a43c1a2ca4c2b1b272adb6
+Entropy.7 = da29bea18e5c2641d2714669a73513d6d76b04f28fb4ed2a
+Nonce.7 = cae7233b24fad15545d95e35b65879cb
+AdditionalInputA.7 = b83a8c2635d331ccf8f0c81d97b745a1a1d02006b6ec9dce517d301e7581939e
+EntropyPredictionResistanceA.7 = 7adb544cda70e816eb80d598f20964954e8e9e04a48bab29
+AdditionalInputB.7 = 78356502e2a7954f483786d2aeb55b30e771689c2b49f038fba499017126b5f4
+EntropyPredictionResistanceB.7 = 0d30b6e1d6e16ac9e7f9ec451939e9b145facbf0847802d0
+Output.7 = a3feaaaf775d08c281d9af1983faccb2e540c934dadefa05ec7ab32ed9d3d0fab58c571f3408927df0158697a7039f502b9fdc12cd018762c6ba53c298837036
+Entropy.8 = 52b9de813316d76f19e41b9da391ce57b7eed1b2e59e90e8
+Nonce.8 = 6756ec3ca1007b500a656a2428c83a31
+AdditionalInputA.8 = bfa310196bcfbd9d26a366ddbfe0b0d385fb0820d5b1977e6c4d42f9ce4842ff
+EntropyPredictionResistanceA.8 = b57ecfa4db4cc8620c8978210da3f316b2cbd021015d7eb9
+AdditionalInputB.8 = 48a0da7843d47ce6d1fca3711c06b6e5ba0e35f15d2a58eb888b8ddf6b16a6a2
+EntropyPredictionResistanceB.8 = 7d32cf1e2e65689338ae658121d4f49ca11a38c8194842c7
+Output.8 = a607253ccd8cfffe480c0669a54abe8837ca0714f4a00de230f661333eeac4f54c8801f9db5339eb185258e9e29371e5bf874795095978941cb6be6535b9fac1
+Entropy.9 = a21d94e4f15cb4b5f4067e575f51cefa013f8bd6b9ff08c1
+Nonce.9 = 38868d59419e3480c5af5fbe24562812
+AdditionalInputA.9 = ce0f660a52605fa8ce4ca7c3911492fe41823e9d2ab0dc0653ccdefbde5238bf
+EntropyPredictionResistanceA.9 = 2d60e5bee9f4e072e30ad7e011a3ff168b054aba09c17dd3
+AdditionalInputB.9 = b855a6b8b30bd9a5fdb3c2bebe16a2c5a70c161d84a157beaa70000e4aa37112
+EntropyPredictionResistanceB.9 = 0ddf5f451ac17f5c9cb2f1ad1759a81d6abae81af59f8903
+Output.9 = fa77cc7802d457ce1d1e940e27bda2da7fcce069247ebaa849406dd3208148977b0929c86eb7b8929a9174cbd181e0aef17efb8f05fe4b45061772867a2ceef9
+Entropy.10 = 0a09688388a203c9a86138a56acdd1e18e53af2d4df4f82b
+Nonce.10 = 7c9935ad476402da678fb88847bc79da
+AdditionalInputA.10 = f28e4dd174b4e263972905b4107a5506358067cdefa2c6bd870e4de61c639ea7
+EntropyPredictionResistanceA.10 = fbe2fcd687336db756d6889add29b4e174f8605854fa90cd
+AdditionalInputB.10 = 232181f3293d37ecf65ea1f2aff66d212ddb434be7c6410f72a7ab46b1fcfb8b
+EntropyPredictionResistanceB.10 = d93ce32cb192ce1a4bff956391063adfab11ee62ff9fdebe
+Output.10 = de5cf77dcd48727395b9dc8cd01fa06b36246be01b6bcdf1126f24d16499bb2eda5c6717d784f2ffe58f96e4116f804790f13987fa30999decccd83247ab7fb3
+Entropy.11 = d74d47645de0c4131d0efa5bf2cdb30ef834ede860cf232f
+Nonce.11 = c19c888c229aee5797f784bea1833a1b
+AdditionalInputA.11 = f8f5ac798de7324c6d7e9ea11ed0e1bb776bbfacad7001a3a734fc4769452bea
+EntropyPredictionResistanceA.11 = 067f626a1736181001e240c6a364b8a8be5b565825ebd270
+AdditionalInputB.11 = e17f98bd2abdb1ede21bfb6f8b48670269ef34c8bfbd9ec653199bbf31fb0ca1
+EntropyPredictionResistanceB.11 = 9de6f8da19d226062755077769e68ff06f0507f9177b9c09
+Output.11 = e58002eb4963f7084174fe60b486c3727ce1b6151718e2090dd8ce84ff76f49aa523122f68a165c798ea75d54ae9ef2de3d37700358eac07f99aa11a1393ef86
+Entropy.12 = 7797e5d14b65e640ef352e001403b13a43425c62cc6d684a
+Nonce.12 = 6fe41ecfc802599687f706e049542cda
+AdditionalInputA.12 = 5f42c723b0f39cb7bcd67e0fcbcd7a892a0172e3649a97a666088756481ffd16
+EntropyPredictionResistanceA.12 = 877cca911fb34fa9216ab0b271cb574c0e61c1875ab70ffd
+AdditionalInputB.12 = 1d852b6e6ecf973f25e8427d573a0cb90fcfd07cdf8be65d173a31e4bd39edbd
+EntropyPredictionResistanceB.12 = 9e1a261f84d47755c511a015afa23bfa231c90fd8a68e624
+Output.12 = c7dc4141af86a827f734c6da58593a18d1f911dfb6d8868c0fab20dbd31f31189cdcef89af4df4f64e531fafc610d2bcacde05e3d23c41a7c100b3af49941160
+Entropy.13 = eab028dc4ccb758b33b8b72a33fc551681eb05685c621cb9
+Nonce.13 = 3c457b9cad228f5128956bea402def9d
+AdditionalInputA.13 = 861bfb5be484eaff7d407f4e082363651ba0742f2654bf6fddebd36ba340ab99
+EntropyPredictionResistanceA.13 = efb48f69e3cd1a919a89803d780250599d2e0d5a8f9b776d
+AdditionalInputB.13 = 855b9de8f6a900f719c41ee9324a9de1bfe878a13128bb7c56ba27ef087966e0
+EntropyPredictionResistanceB.13 = 735cc808224477865291aefd56fb9a22c5e2870a0a70b390
+Output.13 = 6399874761bb957b733745dae3e1125145c10a0e401235c6d063f4d41428c0f9cc171bead10e53638f7f0f3fa6e5e53685206436038091369db6e172d364161c
+Entropy.14 = 12971cf016861dcbf88d94c502f2058ad4e34c32abacb64e
+Nonce.14 = 093964e517f9c45bb2d08be7985f845f
+AdditionalInputA.14 = 5a5d310a1b59c6a4b6ae7755fc44e7b8d8d92cbcd23a37dc1d78859d661a1cd4
+EntropyPredictionResistanceA.14 = 819b9295c230ab040aa4ac51b62ef0d8447ff2ce11121732
+AdditionalInputB.14 = dc7add14bb20528408b8d3b8571dbfb988f193cd7b12d7de97eb0d151dc5b56e
+EntropyPredictionResistanceB.14 = 8558715d42823da8a7c772a72a7635885dcf259bf37f6ae0
+Output.14 = e7f01a2d2d1923fbfcf0114023c28411323e79bf6376df3804406c014668567b7bfe214459ce84acb6fcaf6a902476e7ef4c700c1af1ef81ce1b5c3c9c6da75d
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = e903181027fcb20263beee487766395048175d636c25790f
+Nonce.0 = 3cc209d67dc67ce10c44cd8587d4564a
+PersonalisationString.0 = 9bc6bf7ce8e9951575eccf77d69fd9d5132bf722e194c89f19f9cc42dcf72407
+EntropyPredictionResistanceA.0 = dcd828df91578e38322faa8c4e89dcb2ec331272ffb24019
+EntropyPredictionResistanceB.0 = 556b362d72e49f9657d60a6e0d5940d1f86673f1bccb32ff
+Output.0 = 20eabbb1bce0a5bdff5e0b46860b7611e03a3eb672af74d1f89d624b7c7857f2523b342a22cba4ba9927b652bdce17bc67096a4acfcd8762e37a9ce17ed92d34
+Entropy.1 = c4fb68b91aab2520e06be8fb429950ea931a97af99cc95a9
+Nonce.1 = 31c4e87e8b1a405b53da9beacd673e05
+PersonalisationString.1 = e6e77346b6c169c9447ab9e2bb9572581fd55848a3b4f5511b74f0c7a1dc95a0
+EntropyPredictionResistanceA.1 = 5aba28fcdd509b69e346ae49d7ca5b7d70d1422eff1b76f7
+EntropyPredictionResistanceB.1 = 167fe02fd2a45f21c8459e670337e562f41e21644d6c9cf4
+Output.1 = 32acca5498272921a5f54943603093be340eca9de136082ecce3c01fdd7e7f78e4ca27f06f99d1e7c03c8d1c75c29d0a5814602135f21012a53de29e94395d8d
+Entropy.2 = 6a58e4c14c4d3b6a9f2f0a6d2c9c35201855772958740929
+Nonce.2 = 441942dd72926df2ec3da121a018c8c6
+PersonalisationString.2 = 4c091a448875d18d88c414f0b35cc4aa00f814ba74ec8bc122e076735033a36e
+EntropyPredictionResistanceA.2 = fa03d1b041e57824d83ce2f51260d983622f92a02ac412f7
+EntropyPredictionResistanceB.2 = 1436cb63e15c022a041f97c7c9fa67d8004a150731bd0a6a
+Output.2 = 47d7a718bc61a06b0ddacfd953934c5cbddc7b904392d9cc72aba8a80c559e10d073180ec61cfe3fc1bb1e52374c34b1d4c4aeca048a1085fb4b8b8cbe1e20b3
+Entropy.3 = 377dc574e35c9d1a27a8647057e824850c2fafcaf66e8309
+Nonce.3 = 285a1b7bb6393b5cb492c05600d44307
+PersonalisationString.3 = 851a9b5ef34f1aa5a0e105b5b712e1a6bbcaa4758a93705541932478e3cf735b
+EntropyPredictionResistanceA.3 = f5134f410205787dbb66e56b99e9754e09c1f547af7adda1
+EntropyPredictionResistanceB.3 = 611a69884bc0b0c0bc2cd6897bd4bf741356af16e67d65cd
+Output.3 = 34f10848eeaf81d36812e6f9eec771f991e9b3b050fd60f6d0eb79c289990c85903b819059d5990689af122014c7ad4a69efe68df4ccb43ffd8f98b269bcbb34
+Entropy.4 = 52cfe322d7656c27d74342b3c92f32ab3ec39434c8cb6e76
+Nonce.4 = cb0d3e5867133f128c323323090f8865
+PersonalisationString.4 = 70f9ab2ab3d9b13ca91f84b3b2ebd55c9dfbf1e971367c93ef203d468ebec70e
+EntropyPredictionResistanceA.4 = 6c090cb8debfb323bddada16469c38b75ed0b0756732584b
+EntropyPredictionResistanceB.4 = c60d6ab3a71f7d48fc4d5a91176ea864f03351a8fd4b1f4d
+Output.4 = 1aa974f564ab2b58b928d44108e9294d48ada98431610a7e57c6ddbcd9423d9656ed09695832d4aaae6b01ba609abf46bf5c22b18de0138882842a77539adc6f
+Entropy.5 = f5d5f5fd6380db6635e010aa60be31374be35f30531f8782
+Nonce.5 = e6cdc103699f16d22342683e9a4ed678
+PersonalisationString.5 = 4a3c58b1802ed21beea87dabf37a7f7daea6f69cb0027fea1a7a76df00d2a343
+EntropyPredictionResistanceA.5 = e2e95dceba00afbed3b11376b32aa2c70da4eda3cea29339
+EntropyPredictionResistanceB.5 = 33a90492497e57ea3f926a73b74a1225c00e3f7749c3c04c
+Output.5 = 097ea7165e4b43f2164def00448c3b9beb4d611fab71f901aaea61cb76f7881dd9e7061fd1cbfde0e5ca3c313e0c2470d02f7a11df7e8ae3da4b4f39539a2bb2
+Entropy.6 = b19e037cb428303d9eba53a492661531a69b5062be81e56b
+Nonce.6 = 9744ba5f7bfa2ca95b074a04b1ed4cab
+PersonalisationString.6 = ce2246e4ba1dd7c2c4716bb9e6451928b4cb4bbe00bfa1755ad47085df3b0fa9
+EntropyPredictionResistanceA.6 = 40f6efc0bd66bf5649323493b529c98cf2a812c4795cd442
+EntropyPredictionResistanceB.6 = 080739c7af62e580ab5fb9397b951d23603305f8f65d1b01
+Output.6 = 71143fa8a8683cb4b846edb10d63ad4fa9b21cce2f784421d5154ea6110a03d468791a516562d135307368645c48d14f95f7c9c6a39ce5f76b56fc732271c22f
+Entropy.7 = dfc45c9f7d3e5099c7de9d3c5261c05049dfb253f7c33a81
+Nonce.7 = 2cf2a2395f3295095d9bad0fcfd98619
+PersonalisationString.7 = a19a023fbfad566950bdf6ea537831ade348f2565f459a0f1b6adc0dae8d5223
+EntropyPredictionResistanceA.7 = a2a70ea034840bcc36f668ee81fd6b952c63725726e75b04
+EntropyPredictionResistanceB.7 = 0341cd4a4376501f0d9bb47a020a912fb05b95679b29436a
+Output.7 = bc1a6446469bb1c8225a1effb576b56fda189dee2b5997081f7472692f05d45002d434d293637165b6ea4c5c5c98ad0719df35356dc01b44564f40c9b8437126
+Entropy.8 = 847286af6334134173336e768f293e5fdb28d9f46a66bbdd
+Nonce.8 = 1693371b49e4e67bc0c9ccfff7a4b502
+PersonalisationString.8 = dda23c773004b46bbe2a0f88d2a891a17e0f05ad12421b3642e430acf0d73cef
+EntropyPredictionResistanceA.8 = a82cba0b177fd618463bc7cbf0619f48477964ee5d93095d
+EntropyPredictionResistanceB.8 = d7892dcc8282cc9207685d05bf730cbd83c7673a6882ff3c
+Output.8 = 2f427139aa90fb12f127aae6ce726c9e8db6bb607f4c224308157303c8f9cc5454991f4ef1a41cf1668a26ecf5900933e8e47718aaa45bb399a0e95a4fd94087
+Entropy.9 = 3b45ba62834f1aabf599a5bdc73dda9f6b24860e024c450f
+Nonce.9 = 87940214372569c033faafb70f955a98
+PersonalisationString.9 = c8e90a16fe1cdb85a522d1ba8d81c735e140d71f0f1ead65e61db2318a7cd36c
+EntropyPredictionResistanceA.9 = fb08a8f820659de3c3784510d1a9c151fba6e14de754d82b
+EntropyPredictionResistanceB.9 = 0b47e9280bd5639c394d182650359d9bb5c9a86ff08bbfd5
+Output.9 = 5dd849e1d5574a93570f05589a0307f7f1c7bf8ff3e86e026a85bc88aa10f21d7afdf60e9f45cd6afd6ecc34d1e5543283984498720f6c73b0376e25123fcde3
+Entropy.10 = c68e2557aa50dcfd10f3dea4cba23e11e0415e32cded6a6b
+Nonce.10 = 670c960eeaad331a212189e6b5e0dfa8
+PersonalisationString.10 = fd11d115ad41b9a83efe712440d1a62b1ba65396d8bffe197b00c369f294696e
+EntropyPredictionResistanceA.10 = a45e0f78b7fef940c76f9c3a594c341ace3c4301f569a282
+EntropyPredictionResistanceB.10 = 8c2f45c977384da66aa8ebf5aad912b8e11e0fa4b8da312d
+Output.10 = a1ad8c27836539fb668d260e719048dacf7fd8420931e89d66390dd5b5c9523a511021696e9ad06219dad26156f4d318f559f2c40f727d4fdd93ea38d95bb7fb
+Entropy.11 = 5c4093a220e4c421b9565886c4cc226ccbf18d3e5c5ed42d
+Nonce.11 = 66943d614ec9a401ee3894a4278896ca
+PersonalisationString.11 = 3e6dd041128438a266da29f5ca66f387894523dc7f3063c775d5af40a8a68769
+EntropyPredictionResistanceA.11 = f20a83cfec42c8a3b584a834be7d6bdf3c890a3998da220b
+EntropyPredictionResistanceB.11 = 43ef2aedd2f665f17842a12a1c2dbb0dba2ea988fad3d440
+Output.11 = 53151ce940c281af836493895990a3651dc1b28d4596bcdebe0b5dcdc9324f2f58530dd3ea48f02a263ee36b86aca8986e900589d9ed2f8f2fea987b6b08bf00
+Entropy.12 = b1074ca2b22003e31925a54bbaf3c18ea97958734ff7256e
+Nonce.12 = acb589a2df4532fc97e64b43eb9f9154
+PersonalisationString.12 = e9928b8ae007f1c1575aab9723cad0af83d5d4cee306de447b5095a21274db6d
+EntropyPredictionResistanceA.12 = 732d0d3137fbc86b6eb1fd510b3d2d6371fec3a34f49ae67
+EntropyPredictionResistanceB.12 = 2f5aefcd0009a1c976448a25da5148c770acaa742d05cb1c
+Output.12 = f2e84b271e88b27bd2d7c1d9661154fc2167dc29aeeaeb71b83c09c0ca65c0dd86e79616637f122ac77d4cd579daafdd0ead7194cc3aab90fbb32ac652488483
+Entropy.13 = 6d1003755ef66e7ca507296a49c29e63a0c89e9edbf339c5
+Nonce.13 = 917798849ef0bae4fb482020677017bd
+PersonalisationString.13 = 507a7149c64ef8e3eff9718b306abaae9f8bb208fb0d187b3b944bd410d23f96
+EntropyPredictionResistanceA.13 = 22d8c994298c2368e86e91d39ef83582d05964eb9c16ee5d
+EntropyPredictionResistanceB.13 = ceb3dcd6c6b9fafdcb6b1dc9a1895b1b5400ea7e1723feaf
+Output.13 = d86bc2e85f4ad07e1dc1558c8fcbf012a8eceb4e335ae03a56df7580a17cf41a2cd154d03367438b7aae007988899e9426c171015f6e630ca7e72c14620766e8
+Entropy.14 = 6ddd094cbe5c5e53b63072be3fb9acc2de5c92ee5338752f
+Nonce.14 = 4758542a2ffc8c7c6872eac098b3d9dc
+PersonalisationString.14 = 88ec6c87c3374bf226a9e84b707c248d1bfaeae7d3217e4398fccf4d5768d8d5
+EntropyPredictionResistanceA.14 = 221daca8416eb1ad4f1e302e7b9742c9308bdfe29adf0b66
+EntropyPredictionResistanceB.14 = 58b0a7828c2055bfc8b4956eeaf4e5085f4c45bb194162f4
+Output.14 = 0a0683f51b1e6c522d436128e4cc8368328ecad430ea04fd7b33f5acdad90e9f308d095b068d582df5927a616a5aa60d10968274edadaba395cdd93fde50ed58
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 3368421d985f7c824c190a09260e116d390d084bc7f19635
+Nonce.0 = fe4c5ef954e3903f006ea52331b76bdb
+PersonalisationString.0 = 2507c6d464a472f1b74b30b3d9f02868249e85094437f49c7dacedd2831b39c9
+AdditionalInputA.0 = 93bf05954c98accad25596844041913b3625930a2414e046c034e6fe40d03964
+EntropyPredictionResistanceA.0 = f48e13c17ec45de149998ed2b601a18c3e3946967813b4ec
+AdditionalInputB.0 = 815868ad1eff3c1f8962c6142df8037a47f74bfc957b337fdec88990387c14f3
+EntropyPredictionResistanceB.0 = 7807754a8985ce9501210aec6b98f7565b73f68f23a2d4a9
+Output.0 = ab55797e73b1cc1a5e3c6642e07f49516182def78189c41b4d7b443c5a482e8b6cd9f2f428e84a09bbea63b38a630de73c840b8e9193728ea283678ec4ebd6f3
+Entropy.1 = 09e2f305e6b0ffeda1889e158a1c00c3a97c53f55c9991e5
+Nonce.1 = af1ef944388964a8bc96df4a263bcd97
+PersonalisationString.1 = e2cc9193f3d9e66312e4c706007308f8fc33c48fe0008922f2986848d1abbd81
+AdditionalInputA.1 = f9077ff2659df45641aa1f07dc6248064ec4f30da1b74d2a73d2dcf44a7195b3
+EntropyPredictionResistanceA.1 = 9987e107bb042937ef1a437c6f42e76dea85bcb37967151c
+AdditionalInputB.1 = d6b5ca0a5a6aab8bfab8004ace827ab061d85aae3195c076e5fc6c2ce882d4be
+EntropyPredictionResistanceB.1 = e94aed664f8d0de11c9a27025aeff26d7b303756e37d0b29
+Output.1 = 3698b754ac77840b0086150a0da17230e940ae956e85db64a13f08c0b80557f957d4552a90739c8d1fcb484914612f8c438cecbcdcb21e619a9bb66d00b1acca
+Entropy.2 = acf015c0c8ed60330c81c8db62a5b498344a35cbac602934
+Nonce.2 = 214e4949e5979c7a97c93997f86eb94e
+PersonalisationString.2 = 5c95ffa02ca72d740b0e1ae6b5795fc3620651990d530e0203306a419e486604
+AdditionalInputA.2 = 555941bf3e977d2d14b3f370527ae0c64762d7ba579b07fe1b0418daecb2994b
+EntropyPredictionResistanceA.2 = c75d26372e3581cec0133c8b7801428e03b48ec03a5d44d0
+AdditionalInputB.2 = 738b3bb3d750dad99a30db3ea4ba3262add3d777f450f22579e047aefa11a0c0
+EntropyPredictionResistanceB.2 = 950efb8ad7efd26a9e9861093456f38277ff49e3f8ffa64b
+Output.2 = 819bda49785e3aebdac4dff5368b67ec9f01874a98e85d6bbd39b361240023e2805d8aef9376f38fd92ada43e38738ec6bf115f2f593e833f490a0e0437b07d6
+Entropy.3 = 08a2c0b7eef69ff3d054bea1120296ebffba748a4886fa4d
+Nonce.3 = 076ff8e4e0a3758504c268d45f2dad1a
+PersonalisationString.3 = 6518e94f40cd4a3889dedd5dd41bf409cf1a4ab397a9f18afc3723092a4eed0b
+AdditionalInputA.3 = c8febbd08232fbacd4b48a5ceaa9e05698c89e12c5e87ba14b9cb75e606a8a81
+EntropyPredictionResistanceA.3 = 049e0004fa74a2a916dee5f9cf160b3c327c718d4964ff0a
+AdditionalInputB.3 = a4d6ba1f88a2e18f2c859d003fa6f10c05ee91e09c5c302329b8e29118904cb0
+EntropyPredictionResistanceB.3 = 4b060d8563c6fb9641908fa427f923bbfc1a77b169004fcb
+Output.3 = 845ee6336bf69d28ff1c5b1c155c2830f16bc63baaec02a1b1d8952227dfa72edb3735aa3e1073c338876e3e546610ff75950d393a3d1d26b1151aa97f7031a2
+Entropy.4 = 4e1bf3dde34ea2de164c224b30b70fb7418d4708bdecc163
+Nonce.4 = 537320dc12c6db736b53731f909a2f5e
+PersonalisationString.4 = d2dd5d00c6c425de0f9321f273740d22f706fa55295560a68c1795cb6d127f1a
+AdditionalInputA.4 = d309d73d6156d035c180ec29faa9a5119c127223f5dd177d1b297f71bd61ce54
+EntropyPredictionResistanceA.4 = a962a1a581d9b37b016160d00a370328a58b248bab5e5098
+AdditionalInputB.4 = cd5a0ae6d4e4db4979f71e96cfa3242f68153b39ab81963abe92b7294dbe6bb6
+EntropyPredictionResistanceB.4 = e1b88383fcca395cd54840608dc0adf43848b7cec28e6ef8
+Output.4 = f408110dc5f0e865427d4ad4f20137e489dbbd064f714bf1c5106e522596e33120d8c136becabf761b475ec57db320cce8537b5f80565a5e15b00e744d92b526
+Entropy.5 = 0627a2df86ef77058f2d542b8b597904a3daec8b8ebd365f
+Nonce.5 = 6a0f2e7182af9bbcc5dfd67220434768
+PersonalisationString.5 = 41f823758a11f427155b49e0b8a10ee25d2346baeb14c3fb477f678ba4b5abb3
+AdditionalInputA.5 = 50ce71bc756c28922064700189abe312e63dc4a72d8190fabc72949ae2c7a0c8
+EntropyPredictionResistanceA.5 = 98b745eaf3f2e2a84696c2f2c8ca736a98e0314ab9f54844
+AdditionalInputB.5 = 9b3b2af11285ad52575d87c0a262d0d44db68c69781c34b49c2746cfba8f06d8
+EntropyPredictionResistanceB.5 = a4215c75683825ffb1bfc5653fab32c2413827de636745a2
+Output.5 = 3d36e5fecc133b2cfe9a04790e287f0e281b549a554d1de1ec01c1bda90f4471a6ec870a809daaeca11c7412f75e4f8b1032d9ddbbdb61dc1500d727ba7211b5
+Entropy.6 = a20e04a9fd0a6bfdbee63fd58a41175fd8c89e835f1e57f1
+Nonce.6 = 59c6e444661fea9cea0ee36493408af4
+PersonalisationString.6 = cf99dfd82517f453ff117bf73beafd28b797505e22793e0a9075d700a5d7aaf8
+AdditionalInputA.6 = 64995fe5113eadef65c9a115b4804bd79b05413d2de14c321b75cc03b426ae08
+EntropyPredictionResistanceA.6 = 2c71bc3be644469f3ff91d002ddaf0be72d533d61613443b
+AdditionalInputB.6 = 03e1ef3d99b2ac8f930ae0111be828cbf3d2c6204dff667cc0c66f3a8b8f7742
+EntropyPredictionResistanceB.6 = 44fa6ebb4cd2af3c6204fe240731793904bd08328dcd2db0
+Output.6 = 68cdbde4620323513d529facc25c1f8226d34ebaa33ff2a83faf62755d267db51b0f6a42512889d7e240df63886b139480fdfcf92020602427047186c825b1c5
+Entropy.7 = f5ab136e8d5d9ce4b6e2fe1243531dd8a76c1592a8236f9e
+Nonce.7 = b33b0d9c9a5acc1844893caa341d006a
+PersonalisationString.7 = d08d057b8ae771a5012a56c6efb7cb6fb6bb8e8001e99b0f087501821dc642bc
+AdditionalInputA.7 = 73be9e3d9251cf17edd402259dde5eb7e308bd9637e534c20a47bf84bc530a4a
+EntropyPredictionResistanceA.7 = 36b5172347641a4835acf05ef206bb52ad82e506eceb6ee3
+AdditionalInputB.7 = ad7befed0cd6e30383af7aa2f137ed1021e5bd2eed4d868bc62a3e150dca8b81
+EntropyPredictionResistanceB.7 = 959db8074f8b0ee92388ddd7b05e348073485609c6e3c895
+Output.7 = a5ad9f08c4d96bd02e1bf25a9e142a16cbba20c766d48afe8f9c61982d474a7aad1c1c09df9b6b241341aecc2d0e823b90ceb054e35602c2f76d28d1a557d793
+Entropy.8 = f57f544cfeb24fc717a28f6bf333d3f791169efa24d7a649
+Nonce.8 = f501a09f2d6b7c7536409a6ebe5d0cc7
+PersonalisationString.8 = 0611c5dd757aa810b610f0d2e7f5ad55d0a1e509a327c5bbe6dbf895454ee2b7
+AdditionalInputA.8 = e720076f678c77949b713b0d212c64ae22df0823bafc544166bed50079cc994d
+EntropyPredictionResistanceA.8 = da5f823756e7e4a92cfb888bf18d2cbb856b664e98d6a7a1
+AdditionalInputB.8 = 371a0c030669eb7534e1682431414f341d24ccc2a5b63bf616135754537c723b
+EntropyPredictionResistanceB.8 = 7611689714b7cdbf8273b16a35dad097c19013fc682cfa60
+Output.8 = b1871a98f9bca034ade0425164c010564785800e59c3d5a01951d0c1496fd06b2736711fc4f5fffbc5bc780cd75a8feeb15d3ffd558912b4dd6a909b9c24def9
+Entropy.9 = afc3ccedc6935ac2b89e185ffe3204e9554e6a5c20b2f816
+Nonce.9 = 1b7f9cedef59af3144b78361a5a655f6
+PersonalisationString.9 = a1f53264967bf9a218cacc6bf093daf3379b72233f12de6a1c2aa0fdd8720c6c
+AdditionalInputA.9 = e00f93d1b64b3411c5b895f5291883701528b7fb5ee5f6c3445cc02ea4a41b68
+EntropyPredictionResistanceA.9 = 751e91238e9023666bc7e62240c9f87508e9e4d34ef0e5d3
+AdditionalInputB.9 = 34f6559ed5975aa1b09400f7a55dd48b05f496804cee945a8d818720a922b805
+EntropyPredictionResistanceB.9 = fa0d768e3a90a5df1ec6ab533fbfb054e98bc5ef24492a3a
+Output.9 = ee507c1d3260cff11d5e65e4f0f6dd7c756b16d7b735cbc70fbe88e0ab985beb0b6fbbdec1b8e9f7f743a3be61e6d1de1273d23f3bf7fb27923b37a9f13a473d
+Entropy.10 = 382fb88be9f0ab05d99baf8f7d9a64a854dc5ad7e25e55bc
+Nonce.10 = 35d163c97ca26b5f9f4331037b3bb50b
+PersonalisationString.10 = 5cabd695674d26d9b7844b18d87eabcc0418ff03696fc31a65c9a2748758e5d5
+AdditionalInputA.10 = 0c2e47e50ab0265524a00209c58e447a6e0badf8ebf85f6c213ca4fd252ea6c0
+EntropyPredictionResistanceA.10 = cc8dfe28d9b2d6ba0bf6d74c171fcd2a650da46e2fd69169
+AdditionalInputB.10 = f38705ff8c3b6a21717c4e8111bfa9310a206bac85b70cd3790170988fbc1ca9
+EntropyPredictionResistanceB.10 = 0b4c3b4b829f844f46a67dbbecce2f99c42fe37768261104
+Output.10 = 3e1ae9fac472907975f47a10a8010533acde35afc91bd7f881d62f498295107f7028c64cb129dc856747a9abb0319839be83996cef44ab27da2d90d1c9bfb2c8
+Entropy.11 = cd59a8a8dc7e9626318b258e3ab1cd5fb0453f8c1400e267
+Nonce.11 = 25a85e7453459a7980db4ce514619565
+PersonalisationString.11 = 204177f9e97f8c249ad6f6342c3109c7f1218fb17167378835227beb40185dd1
+AdditionalInputA.11 = 61a9a24e8ce69193f05f4a1630f0f4afcf1a195a1f4c1ab30486ee8e800c0d54
+EntropyPredictionResistanceA.11 = a9c88908217bd1dbcc834dbd1652c023f9856180407180b6
+AdditionalInputB.11 = 8a17f4b5d8750135e9fe88f7e885b624aaa81aa0ce4903c05419d0c96c60be47
+EntropyPredictionResistanceB.11 = f2ab9bcd762c7e55b0bbe380622386d3d1c71a44e7fcaff6
+Output.11 = 46452918b3d20d24569279570b630ff32bf7f42adfa09eb59cd898e343201de290785c46a8b946dee6d811b5fd50c76fc46cfa41669b2cc6b9373e72521cc88b
+Entropy.12 = c2b473b8b9b62a131b934c2d334e306e34fb5a42c7db64a7
+Nonce.12 = 61ea0e2b0227b2947701f17fbf00d831
+PersonalisationString.12 = 024558fa985ac6d904bf75e656b45458a14e53d87bd93b54b0391f7ecddc3d79
+AdditionalInputA.12 = adb15eac5436e9b26352b1a71304b69ee3db4eed791e618b42355833b85e1d93
+EntropyPredictionResistanceA.12 = 51485d1d7a7bb23863f2d4e7e6abc66bb350ac9351f033b5
+AdditionalInputB.12 = b1673cccdecdf0b7e600594dc1dec22d05873d902a4049b2f771241dba086b02
+EntropyPredictionResistanceB.12 = 60038668d856f1e5c2d7842540a459cfa55a0b3da0362cbe
+Output.12 = 3369466fced7f6b673c04f1a0d6ad16b9ce81d6b1d289b94a8aa8677a7305c05d037cc43618948520461f5289690d8fb2594f10f80f54620f5e465611c923bac
+Entropy.13 = 82f916a709b521bf74cd86070c821cdff9940eb8541bab2c
+Nonce.13 = 704e217ba1f907dd66b50524f54f9f55
+PersonalisationString.13 = 09bdfa9a7361f2cc3f8114cb67d07a3701f9740f62118795e2c007cc45fc12f0
+AdditionalInputA.13 = 0a11c7867b2a52912eeafff5ccdcdac54ac4525fe47d7112567f4c7eaca2062a
+EntropyPredictionResistanceA.13 = d69564205262e90f8794d8ef26ba1c017334c5021b6e60ed
+AdditionalInputB.13 = 2e58edb45223e9150650e75342f9f353b67777ed3908b54d93b6592007eeb69c
+EntropyPredictionResistanceB.13 = 7e47244478af686ddc1d2c6166190772718e0d13ae356119
+Output.13 = 0a90a715a31ab02d39ccce24378b7b68cbf040fc5a94a057677377dd65fce85a1937ac76f71f1b815b96f092e855b0746168d2ddd49928e61f6f533692d91800
+Entropy.14 = 9e995d90341762a932991d1da34117287e5ca688ce604139
+Nonce.14 = a61bf0e96983eedf2daa6c1bf64c8383
+PersonalisationString.14 = 48fd5d2202b1304a2dfe2e5765dfa62f188e6c38c063ef3de0c5f95312f84949
+AdditionalInputA.14 = 246632bbe3295289548933adb976a788f5ff183e52e970c0326ae518711387cc
+EntropyPredictionResistanceA.14 = e989bbce447c6b4799f2bc85a4c4f84bfb0fe7c229ad643c
+AdditionalInputB.14 = 547ac1c674aebe597170ab83b07e7809ff600f6c1d647dd5501751ef976853eb
+EntropyPredictionResistanceB.14 = 231266f5ccab8f29b04bc9e11ffacf0f677b49dd83d6845a
+Output.14 = 00cb0a33877c268ec854fa9969a8391b79efd7c7b9b36cea832c2175621e1bd9b8ea9d50202ed09e010972ea8f178c6ba7095d7def1d6d129b7c7e0a827ecdce
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 2134b79a4dc2eab971cb0a1d4fb4f8908ee329751ebb4ae3
+Nonce.0 = 10399c422f256d962bd3b93f7dfe1350
+EntropyPredictionResistanceA.0 = 96ae9afef8c04014fc5b35829e40d745511b450f0edd99da
+EntropyPredictionResistanceB.0 = d75c71fd9339c67ac7c7878bcae2b6f45b52ad0983e3b95f
+Output.0 = e2351755fdb1474fece8a2cc8db28d6e7488ba00ee7bc328f548ff1deaf13057aa064ce9c212e6cf97264254e34cc332ef287c11246f3aea611061d9562f5c6a
+Entropy.1 = 74f979e8e2fa6af9bf1d8a626dacbd6843144ca16b9f53af
+Nonce.1 = cc7145e1fc84d64f3507f8f9ac4241b4
+EntropyPredictionResistanceA.1 = bbdb427743da0c168377218175578c47f9ac9ee86c0e23bf
+EntropyPredictionResistanceB.1 = 61cfb4b98891fadb899e99b27fa235b652b66a1823bcd33e
+Output.1 = 54bdb797960a5d6e208f19b8a9f967f4113a42b66da473ba1e0b1a818280f8cd168f7195909d8ea379e5e799dd97dc0a7b7a920f707f9e63915146d8fce45172
+Entropy.2 = ff8e2cc4112843ba319a35922efaa3602d45a94657918e5c
+Nonce.2 = 2db6f5ab9747779703dd6543e137f333
+EntropyPredictionResistanceA.2 = 65e225eff0dce86e763b0d940c6262ceb35e14725027cce0
+EntropyPredictionResistanceB.2 = 7aa6d46039c29d0242e9651cf646a1695b5854031d6ee311
+Output.2 = 523c4a8da0b968b162195a4c8308128862e8dc509c3390d27586699616d7cf8b7ee747d348a2f2ad7679b1b5f680f002765b285daf4cabf11d47a040b738801b
+Entropy.3 = 55021ef00b1ecfb869eef3db0a0d23d17b63b3e457352419
+Nonce.3 = 6c00eaa267c69e6fc4982eedb8ee1e79
+EntropyPredictionResistanceA.3 = 350d2a14f781b9e1526b4404e816a5f4a755a9e682215485
+EntropyPredictionResistanceB.3 = 202d43b43c98805230d1a122b89a654276f5d09295ac8143
+Output.3 = 814bc0b4b1f4711a204621c54dffff6764e355d54218e44cc4b76c9e794479a554a339b335facf5e72e1ea4b26b2578bb4c7da8980eabc7dec4e32476220de6e
+Entropy.4 = 2eb3ae3760b680a026cb70981b28462c146a4839feba34c5
+Nonce.4 = 1c774939f2fd46a6343a9c569debef62
+EntropyPredictionResistanceA.4 = 16751883595ba7a1a0da383e258f11a1c82d399d163b7926
+EntropyPredictionResistanceB.4 = 7b2a0f3ec48d7a626a021825a99124f90f2acbc509741b89
+Output.4 = c42e676d9a7b0c2ad69098a64e103648950297aa103bd2fa4a35acd4ec8515a387948f3bffcabf052aebce6e2b7b58d40a8e9fe194523140c95df1c23f922e50
+Entropy.5 = 55e8c6052efa839ac14d632fa69cc1bf742d6b249e4aa80f
+Nonce.5 = 27fbe6d57d5b7f3306312a5a501cc469
+EntropyPredictionResistanceA.5 = 811cddf9202f2b9bcc35539c37f4e27597938cff743c258c
+EntropyPredictionResistanceB.5 = 73ef38cfa39770c90b4f05ccdae492278fc68d1e3e569ca7
+Output.5 = 1287f405a89005d6738b73b1516e4bb1b2258543d24d18c9e5341028c39b217ce7baceade80fe033504caa9a2b47cd2c7b3ccec473623c75260722b7182cb663
+Entropy.6 = 7153b4ec446c757abc461f04524f82af9ae17fa1432c6f07
+Nonce.6 = 2eaab2166694674b263f65fe3b1f273e
+EntropyPredictionResistanceA.6 = f795fea70526b1b0a5fcdc1b0b21a22bbc1631ac6b582119
+EntropyPredictionResistanceB.6 = 18fd4ce8b74299da60649cd80680dc492bb19d64f6931faf
+Output.6 = 727f6c39249370bbafb8a64ab525eeff32a241a7dc19d5c7e34f95baed540bee1b3b9eee6a56aa8f89ff19af7b5b8d9472fb9b89c8c111d33ce4c16f4cb742e6
+Entropy.7 = 0b8a24a9c372aa3a407537d8ef2f7c43221ca910e0547b37
+Nonce.7 = 5e644f694b7cbbb9e7b15e7596d99d58
+EntropyPredictionResistanceA.7 = a3864f4a3a2bf8b68978cc66ae046b953f6cc753b267d29c
+EntropyPredictionResistanceB.7 = 10f96910c2a146dd1bb9692b6ef883f35adb0c8842650393
+Output.7 = 5613044b9c3fcf7df6afb42ecd95e403135a019cfd515bfb90228af8e9505c9ed684093efbf7d51d14ab9ef06f35f81e24a065e3b66183655b9ecf32f2b04f8e
+Entropy.8 = 0cfd36e87996d833b922b4d9b54691f7d952081305ffbc60
+Nonce.8 = deee331031ec17b142d89b679de78ae8
+EntropyPredictionResistanceA.8 = e2a9e8b035f319f49b7618c3bc4ecbc5b94f80ddb6eeba16
+EntropyPredictionResistanceB.8 = a0aedc1bc27525c473ec6957f46e3804642997bbf15cadd4
+Output.8 = 569fc2f03fd50118a2b61879f8f3d4e0bdc4f76c150638182dda2b115a9f136c9cf6b99f7ef6968dcaf9480a808a4c4d45d5b5485eb50c4c48dc5429a78f6703
+Entropy.9 = 6b05014334990591bbbc30dd6011aa69988284ac3fbc1732
+Nonce.9 = 6f82d579bc6bcf7a3f010c93898ceefc
+EntropyPredictionResistanceA.9 = a9db486186865614ce58e4265bccab7c73599f9a2b89f13e
+EntropyPredictionResistanceB.9 = 252b29b65b9c0a4e7b0065426fca0379dfb98b37068ceb38
+Output.9 = cedcf23b01d7981819f3fb57f7ad51f2749cffdb977ccd6526a2dc5292a149d5ca481ce5b297c8659bedd0dd1d21552d29262867497ee0d473534cf7c6e1d371
+Entropy.10 = e74244d5d824a4221ecc7482371350c49ee39a0154a1bd5e
+Nonce.10 = fabc00110b668b3f71dd65b8200ad4c9
+EntropyPredictionResistanceA.10 = d78aa0ff03a19f38cbe7017ee10eb5ca3c5c9a056ee52863
+EntropyPredictionResistanceB.10 = fe4aac63a74e7272b853d4a972d36f7ef9eb132f373485e1
+Output.10 = 520bc177a83df2ff4addb3d4f65b6c5dec058857d3ef0974e008a31e66ad6dca846ec03b279cbb8180dfc07a5af61278d68365837f99f42c4a195f25dbaed6d6
+Entropy.11 = dd6b0715f8ba8303acdadd3b86651911ecf05074f2d487ca
+Nonce.11 = b4bb8de7571a66250de771cd2d1f5475
+EntropyPredictionResistanceA.11 = 10d018ad1369f913c154d42e13aabb357efeb5904b61d133
+EntropyPredictionResistanceB.11 = 2625b4a68f67a4211772ae4602ca460cbdbe775184aedf10
+Output.11 = 3b8662d2a7e85db32f82ca0824098d3cee71e0cfe64bf48aa7c582c67f2f33fa2258109ee6389627707f30e2aaad66a34efc52b0ad5e851ab9a01adf5297691b
+Entropy.12 = 8a41682f937118ce50c62a0a94eae5800c1e296e6ba657b2
+Nonce.12 = 52c90e605ed3de4fe022dec262e161e7
+EntropyPredictionResistanceA.12 = 854367a3ee0f835381062571ad831b31f92d08d6e7bf2f00
+EntropyPredictionResistanceB.12 = 3501a355210c8ddd72834439fb664cf55e560bd99fceb93b
+Output.12 = 83b2aefea6954a67b43c5848ee75af33b41841a8d8658b5b7ad368ef3059454bb3f16d4f2daa6cb5044a6b60cbf546a3932fe74fd0f94c1411e113887c2d6781
+Entropy.13 = bd8f2a000abb7f8a450b22ee4f864732629d8128927e945d
+Nonce.13 = 4f36896542afff797faf79f7d4036080
+EntropyPredictionResistanceA.13 = efa34594698152db2dadc8becdcf4fbb0ecf6f56a89f0239
+EntropyPredictionResistanceB.13 = 8864dee755e1e620789d4865706adebbbc283622b3c28e95
+Output.13 = 83270f47cdf577ba39fd97810d1afdb68ac1f5f47dd612f5e155b2422fa8a6185c48a39ed2126240a9cf879babd4db6ddd7d9784391771f98e0116d1bb8effcc
+Entropy.14 = effeb9cc89079cd896be2dab9ee2f4c8fb7afbfaad384c4a
+Nonce.14 = df0092a5da10e60ac69695c2fc03f0ad
+EntropyPredictionResistanceA.14 = 438a6346d01419cc88046c23149745d1a2b75a5176b9b756
+EntropyPredictionResistanceB.14 = b538b9e62d8ab6a016f800462594f7ce298ee66ddaeda199
+Output.14 = a0afb497cdcb73e10fc6362cbf2b117f2890d3dc6f4b88b8e28c9dea159020122b107ca4dc8474ff9a2f1caf07eb17b4cfa61d454163e6916520bc473a4f6206
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 6f7ff6c04c099ebcdc4d5342f8272723d64dde808292ce2a
+Nonce.0 = 4951a254fba3f5543cd079de76570c1a
+AdditionalInputA.0 = 0a125bbf9bb19276c945fd5d7326f892b490558e63f6e1f77329311111e85a18
+EntropyPredictionResistanceA.0 = 7e235752e0f791e85233c9a67f56875529bfc81f3a5b1c96
+AdditionalInputB.0 = fc353ec1703ce1b283edc0f76e76b4b6f5f208ef56b12060404cbb32355c9417
+EntropyPredictionResistanceB.0 = ac114710b455bb97eb005abdaa43a2d6bdb8ad72bb231da8
+Output.0 = a1e2db679ddc2696316667fde31ebc2b9fea017250dffd32b23b46864073be8b3c6bac5672142391cc128b1230ea13a2ff9e1824933009625bc6a8d29f475941
+Entropy.1 = 36d162029d90f830587a6e35d4ecc8602dda1098dec68a69
+Nonce.1 = a887984c232a6d9f515b4a3cae33354a
+AdditionalInputA.1 = 9b947e1e199277768cad0f0983c2fb6dfdf00771ef6a6bcfb8938f55b807d405
+EntropyPredictionResistanceA.1 = aeac851a810fa21ce38d476d03bfd9eae45ca6e44e60a4d1
+AdditionalInputB.1 = ce48f142b36aee5e23d63a384c4333bbaa576b3a49dca17ec9958f51ca705f51
+EntropyPredictionResistanceB.1 = 81ce739b373b5beea4a4a6e9fbb01243468823ce0521135a
+Output.1 = 69cd06c9a48c89dc60867070129ecf4edf72e19c6742f3f6ad1ae2a10f026b88d8bd74f8b5e668c26f97d5aecd343e018631d5435b1742a6d9d1ecf5e052ca28
+Entropy.2 = 1a52f5163e9d85c60ed7814e34062bef2a43b42595db941a
+Nonce.2 = 53dbedfae155171056b88896cd25133c
+AdditionalInputA.2 = 91d55c4733fa29100701ed525bc0019639466c817cc4b5bdf68578c72cae5cca
+EntropyPredictionResistanceA.2 = b83700248bd413dce61d12fa26270ad58c9422acb09656db
+AdditionalInputB.2 = 99a14296c696d41ba11d3ad036e4cf2bff3944d86626b89253c55c5041586297
+EntropyPredictionResistanceB.2 = 3aac8e6a636ed6aba5b1b949225381fe27ca5d7fe0cb4613
+Output.2 = 9cf2c59d81d2cb8e3b21edd8f222173f003da1e40c5e181c2987b5ab4cb428647f42e50026f7d4a542ad39285e4016022c608ec3be457dbd794c90c6bd549b45
+Entropy.3 = 2666bb8b82c34e473920adceeb05d878501b2d850fd495d2
+Nonce.3 = 4a1b6f23edf93a2239f35fe519e3880b
+AdditionalInputA.3 = 6d6a2d3c1a0ee13d291dfdc013da923ef1a26981fc37f6242a135503dde5d85e
+EntropyPredictionResistanceA.3 = bfac90f82b937c3aa7ff30422cda771c7e112f7f0dc78f55
+AdditionalInputB.3 = 56d9b42aefd6edcedc0115ec496f48df76792578450c7bfa93712123fb969a56
+EntropyPredictionResistanceB.3 = b181ebc997a9351149a1c508c7d7032a9a6fee5f58bdc062
+Output.3 = a24da1364183800bb8a85565f47ccc68e73e90f7f72365fe90537165458188dbb0943f9260f1bcc598765faa8d6f9cd88ee19525616ee5d6bcb3006aeea2a5ba
+Entropy.4 = e6569fcb2c27df677a339a600da8336293faf6ed45598c74
+Nonce.4 = 9301505ae5e6a899200366c7a33fbe43
+AdditionalInputA.4 = 07b67b486c2a6fb9a7566544ce5f5f071eb60dd4260d99aea798742e0b2e6e89
+EntropyPredictionResistanceA.4 = af79048cdc7820b7aad6f59405b6bd2e4900ba46e507b36e
+AdditionalInputB.4 = 78644e0ed2dab2ff9f6534d6afc8a517148a44b85bc42503b34945b30a46b711
+EntropyPredictionResistanceB.4 = dbc3f5102d0defac2c2483ed6aaaa872e204d2b4b0f5fc84
+Output.4 = 39cca246630c6d340b77bc65a619a015becd0fcad72c8e01ed6fac4a861f1901d0c422c52ae9a50e0e4e2c19d190cabd8333d2399d7d666d208b9813a5653243
+Entropy.5 = 7cd69363c95b34b57f6a000f8b8c75d82337edb154ce4bc0
+Nonce.5 = dc4c29fe3910bfb1f1d5ac519f74008f
+AdditionalInputA.5 = e2e166f06dc5952827edb871b47d01df196f1b202b5c06ce98d2e2af4a046790
+EntropyPredictionResistanceA.5 = ddc606c3be286315a8ee9463c3eca261cff61ea31b7934b4
+AdditionalInputB.5 = 92042a37789e69b3111d480c0d19f0917cde4feb101c48681ffee2f989fff926
+EntropyPredictionResistanceB.5 = 72bdd71162acf8567d6ff57d9c6a62a94aa4ea03aae858ec
+Output.5 = b41604e0dbec04d57b993012f0abb7f82c18b46b369514009c6968f64fbd34f402accce4fc23a809353b6295d2f1f3949add6ac95c6466fff4702d9f654acabd
+Entropy.6 = 58b11671d1610d3f7b0baeaa98bc7a8fb5ce99007e4907ed
+Nonce.6 = e3a0242f782ee567f7c2ab153dcbdf85
+AdditionalInputA.6 = 6738a865d12878fdec659727902f80f5ec7fee7518304e1dd6b06b9962ea5bf0
+EntropyPredictionResistanceA.6 = 4bd40ed95224b6d70c39f8678ae328b89ea969735ae1caf8
+AdditionalInputB.6 = faa8d4bfb227a4cc419e0f8af443b5d0b98fe6196a71130bb5a3009c0496cf9e
+EntropyPredictionResistanceB.6 = a43538222b830bb889c6a7f2339a260d172b5e4aaaadaff2
+Output.6 = 52486545c17150870bbe1745a6c6b446788083e4880cca128a12e081f96b87bd80af46c7f0f7f6f9c8b86760400e63ef341af3920ff18ac4df2fb960a2890132
+Entropy.7 = a7de600b8e7490148a9e3e1168b5eff06f72c1923604a4e7
+Nonce.7 = 93e5ebe0d14f5b9ff244c850bfa5bd16
+AdditionalInputA.7 = bf1cd4006ecd2840ff893df43c589424f2804f98044ec5b9d9f509b580de89d1
+EntropyPredictionResistanceA.7 = 3c8af4e77febf6e7cfe1ac83613611dbb88bfe371d2a7a87
+AdditionalInputB.7 = 179e7439f0c5af9735299968a86e4eeb3b5a3c1d284abe48927a07eeed26170d
+EntropyPredictionResistanceB.7 = 45147091fbcbbe777e45f3390dba430b8cf3fd83e015a819
+Output.7 = 6d05de2e9fb130735b6e36f45c2a0fa212d53548fa51bdd032fdb6208d2da91d9c2d05b13d826d62a106103b7e41f21becd8c64d221e4b9d3ce5d6d5c630c0ee
+Entropy.8 = e818295795c332e4da0c3afa7b0feb4f5d6ff715106b4458
+Nonce.8 = 9666700a2e8e1605214db3c28613cbf3
+AdditionalInputA.8 = 2e2c66f69e9155b1d0ba22f545549c2e68c09f8107020b26088b7090f24cc40e
+EntropyPredictionResistanceA.8 = e105db6d97e29a4d08624cbc20626c393b4af280a9ee8ab1
+AdditionalInputB.8 = 78eaf7c068d7b8d2af946461637b6de0ff22cf69fb98ec30d0be2a85cffc5a83
+EntropyPredictionResistanceB.8 = 6e51d8c8337f974400f98a193049a75df5d34c6bb4ecadb2
+Output.8 = ed276542f1fa4824c03534cd1430c1f1a233c880f5e7b8a5a79409789a50f830dd90531f789b43a97ff7304d8d9beae6c1f7ff39871e54fbb3bbca9160e8dbdc
+Entropy.9 = 1b3f42508f472d4a9a948157257e8ce23f95ba8e0c099eb6
+Nonce.9 = 8fb84fc72bc459cc8fbdde4a66a17119
+AdditionalInputA.9 = e3c774f00016e764d3b429fb3dd1d35b7d89a244fe72c869dbc3695a7496d420
+EntropyPredictionResistanceA.9 = 1274251f19a52ec631b9cc3fb8827e04a5eea3d0bf3db12a
+AdditionalInputB.9 = 292a8d14a486abfccea56e4c8877e95b324e009896215003ee8c2ee47359bf5c
+EntropyPredictionResistanceB.9 = 31230906f2d70e6cc707a4a5acb304cdd83525c616395dac
+Output.9 = d50285969b829bb3bca9bed522da5f6c1512dd6f4a11a51d12b0e67d529fd30a3bc2347265adddf5ecfc128b94e964bac54cc790e68f7a661563c0d647164a5a
+Entropy.10 = 536f965139d37d734341db023877aacf32208f677a7a4523
+Nonce.10 = aefa3d9e7261d355eba911aa73849237
+AdditionalInputA.10 = 8e3cf0a06f0609c9d49dc1c847498ab229df96068afa63249bac6d5d229ec19d
+EntropyPredictionResistanceA.10 = 68a3e7ed1789f3c30d13bb7f522c665a0ec172ded6daf32a
+AdditionalInputB.10 = 7d1615e01c58de2817d71a963a9c23bf06cda91199ea56ba0367b33f99db69d7
+EntropyPredictionResistanceB.10 = e2ba4f5b05e7e4ef27b3e7ccbb0649ca2124e683ce371a89
+Output.10 = cc35887ecdde4ecaa8d2383be8d72dceb464ca9a94c78e3435bb859742b6a84ecf8a7af99fd7be28d3ef31523b0d70b88b0dd918cd705881b418dfe91f84b490
+Entropy.11 = 0af029dcf2f0e3e7015d59a2415885307123af3d1a8a2427
+Nonce.11 = 7bcfe6bf0422bf2e8eb43f9cbd326f6b
+AdditionalInputA.11 = dc5ccd61d0ef9455db533b8670f552857ab0310aef7dcb17e795f5f09a49becd
+EntropyPredictionResistanceA.11 = ed257d65d74996bf4ec1fa1ab48a6098553549b78ed69e59
+AdditionalInputB.11 = 0d63918bcca4e3cf2cf5062c1fbf187f1c181f8c5af695075654afbf0c7481e7
+EntropyPredictionResistanceB.11 = cfdf740e291f30a8750d757475d56f2aa15127e33207e265
+Output.11 = 600cad751cf18bd3252c424f82fb928469bebfdf5ce69d677e54ea991f952337167364c5fd989aad97e233cf2c2ed637da43e0c7e0f2a4eb0dad530c062d003d
+Entropy.12 = f89a02012c81df0b9f97bc16e01ff476e49a9739281a933b
+Nonce.12 = cb40a5543a4899144af5ea8137e02611
+AdditionalInputA.12 = 9a5467447c38c36b01ec67a6f03b681200dc4161aeefd274fb066e88d2a40a95
+EntropyPredictionResistanceA.12 = 22865c6432f64ed8ca0dcd6cc99e2ba9490be9659dbb739c
+AdditionalInputB.12 = 467f830f21df841c78721ac44d25fbf2c5b92c42c926eb9dbd1a3217f77aa839
+EntropyPredictionResistanceB.12 = 5362008852665f0d5d9f44102d2680d980fa9087729dc120
+Output.12 = c5e4bfefbe9c7b07de53f7827fba53868330f90fcf87375380bebc6c92aff43c7e17666b9895ad1ff499f79777edb00f113b186a74f438b999a820f5278764a9
+Entropy.13 = 118d4d3543946da8cc8635b9ef6bbc4d0371c06c396f6377
+Nonce.13 = 151505ea322d29a97c5c5680a0db1634
+AdditionalInputA.13 = 70a149b724490c1075afc80a4be4059c18eabaf1aa47a7b2d92dc1885dd9c891
+EntropyPredictionResistanceA.13 = 17778e992227e1929936049031591a33427e290688ef4689
+AdditionalInputB.13 = 1e2e993641ea85bc3f5afce858103fc0e5bc904a9f206110fcae7f873af59a8f
+EntropyPredictionResistanceB.13 = 535d2694b94158c734583eeea806e1f5429371f9a7bbcadf
+Output.13 = b2219086a94863314f374d4923120cde1d35936ac2f68621f32c16df401a6ec3154126202717a27bbbf961b3dd1f2063fd5852677389028cdac8f247f251da2e
+Entropy.14 = 3f377faa0b6d472f3ba5d6556fe2a840d55a78a4b804a001
+Nonce.14 = 54a03101b1587873ddf3e0aeeb21f477
+AdditionalInputA.14 = 96017296425845063ba4835a96d880f5c9a8c02039706a81a2f902f44171bd3b
+EntropyPredictionResistanceA.14 = d48eca53662d88cca35e64f7291434d1e32bd3091c9f56d8
+AdditionalInputB.14 = c0263d4c2d0726445d619c873914ea5dd9a01e4f805e572061298eac76e07c52
+EntropyPredictionResistanceB.14 = 0c3a07df916acc0e6a2e6eef50c32db6ebb1962fcfb0ceee
+Output.14 = 9a29852c06e06cf7435f013d1e1d653074904054b97185da6908749c8b75c9a2f81e29f0cfbbecc86bb7353897b636cc9f7bd08dc27ba13d1a3d482e838a5f6a
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 384de3304314b2124c40bf2c5c8235a3e7306d94a0ca3b67
+Nonce.0 = 76de426b4bb1c5c368e064da2e38f83a
+PersonalisationString.0 = 06015eaa5f5eb00f09a1f5492e2185b57c5e308c5ccf144a93be6fa2c1cba988
+EntropyPredictionResistanceA.0 = 06a1fc53d959303b7d94c0d78ad1af0ae23f4048fd99ff53
+EntropyPredictionResistanceB.0 = 78a0bb09f8399443cc950fd235d6d9663d45adbf9481d724
+Output.0 = 2db2f9ce0c8074e0f0205e3cd058e31b5d8c73ba51efda360847778206b126822d7dc9e873dc7e07e30392ffaa422761ffa297c189265d2f8ebd45ef49226903
+Entropy.1 = a30bc933f72aa4e25d3247a897b9ded3926ba1bb52202da4
+Nonce.1 = c2e87eb6abf011a06a460795a334c750
+PersonalisationString.1 = e655fad32b671c7fb4c8e538683ab87fbd7f51c3313f66746c46cb6365a78ce8
+EntropyPredictionResistanceA.1 = 2e155528ed2f4417fd955437cb13464c63fd88ec8d785c03
+EntropyPredictionResistanceB.1 = f4765d5d727847f8d812dca04afa5680cf61b9ccfcc562da
+Output.1 = e399bb2796539052d07f924749a6b273299a9276dc48254d8a813e80f80434faa553d7694fb83957b2e58a3454fb83807845126c2d7aa02be536cf2cc7bc94fd
+Entropy.2 = 63ece4566ca825986c643a0d99a1c7196e123c842e874c55
+Nonce.2 = 04424690b1e8c5953eb505ac1049c88d
+PersonalisationString.2 = f3be85793bd982f9dd24694c17a341d591bdf8086ef0d5bf8bd3ddb8f43280c5
+EntropyPredictionResistanceA.2 = fecd0dcf8ccc62c8238a3ed15c5e032498893c2e743ebe5c
+EntropyPredictionResistanceB.2 = 58c623002b4680addb63426c7c46c6baa053b11c90ec395d
+Output.2 = 72dbfdcaf5274d2256b0f46c4ef68e1112700dfbbd3800f397808820231ae24223902d9adb55a6a1b4d1905ae2067bb4eaf936c2eccddbf40a02dfcee06ac6a9
+Entropy.3 = a3cd8e61cbbbecf7f468b701046c6166f64eb3d40ac9ddd2
+Nonce.3 = 6651b0b7b120e9522b7672a765292b28
+PersonalisationString.3 = 23dba9a6570777427d722d827a87cdbe2bb90766cba7751fe0c80a10940b497c
+EntropyPredictionResistanceA.3 = 249d6b3c22d60edfae0e438b5109aa7d81e39c233c9fc69c
+EntropyPredictionResistanceB.3 = 2c6815cee0427950e26e8063b62f355a7252c6c2c1e5ce11
+Output.3 = 8be565000cf91745389c3b26982c45db3fb06ab8bddfbaea5243399a044eb2faab15f470c8dcaddeed39fdb16419ee4fa70b7f83ff2855cf0ce92ad515bb3474
+Entropy.4 = 8639ade7fccd794026d6efee07dfb98815418b9d1a0a5fb5
+Nonce.4 = 79a243e6848ae684e40e840cb75e1f20
+PersonalisationString.4 = 7fa8ae9e5654fb4e8461c1fa0fbcbb27e6ea14af883a958fe24e6595c9432cfc
+EntropyPredictionResistanceA.4 = b016e12e7873dae0590e20b83e3f90049ee6e9979cb6ff97
+EntropyPredictionResistanceB.4 = 867b199245d7b2da5c80e00543ef80f7fdd6605b6c676435
+Output.4 = 162bcf3d373152bf12d500d513f68a4b0536755ddb6a3229cf10cf4713839125edf3d94770492395a7c4e899952176bf5bf031a1d516273a58865d3ebcf8ea73
+Entropy.5 = 9ceea97b378136cb0a25e724044071fe6530af74ed3a2e81
+Nonce.5 = 1f19bd84e67a426cbf5b94312dc8fc80
+PersonalisationString.5 = 06065dc8e0bc4661c5bd231dc149e4939102965d0910560cdf36dbf0a8c48216
+EntropyPredictionResistanceA.5 = 800d22a9135d8482ba14bdcc7d608f1ee2da9351a1b4cb98
+EntropyPredictionResistanceB.5 = d43adbd3bcbb7592536a9de88cf2e0a4aa92e0b78f738683
+Output.5 = da8dae5aa8a8b136f1298efc5e904216df9409f51cbfc8a7fd984e4a7198b1a8d11c1ed0b19c7520d33c34a086ec86674bc47f10a44e4c74a8fa8fde5e2c5f87
+Entropy.6 = 3d7b666972ce07b480bb7fc45b576b75e1bfe32425fea748
+Nonce.6 = e209eb610a3ad2c43c5088b0dcfecf2c
+PersonalisationString.6 = 771aed7b51c22e002676d3c7cdcda906d43fe8055d832479e871a23f35e0a785
+EntropyPredictionResistanceA.6 = d5afae2e7e12ee538f415c3266d92fd091dd730f017b211a
+EntropyPredictionResistanceB.6 = 9248ae65134ea2bac3b459a91c65330e2a52cda2f5416c19
+Output.6 = c1f36be261108ca562df10b071ff5fab4d61113fcb84c9e4c6a5e963307a5e7c74a785b1cd9d9a4c99fe1beef7e9c96e7cd6eecdf37010ac64aaf47d1e36522b
+Entropy.7 = 5c8bf4d0497cdeb9c8aa413483eb5961f258636b2964e022
+Nonce.7 = 827bb94d7a94a23568039a8c9e045a27
+PersonalisationString.7 = 52b541edb599041c350c18653c705ce30118ceb5aa62e5ea52eb51012ba98c5d
+EntropyPredictionResistanceA.7 = b2dc39df8c0f402a493b43053136a7eacc86ed75ec5ca5fc
+EntropyPredictionResistanceB.7 = 1e25852ae16d40532ad5ffc6896579ebdd4ac2cf9ba7a31f
+Output.7 = d44f525727347202d23faf0bc50c5b14d6519375645f2bf6aff7f11c642f1a7ef2ff6f7318db8f1575ebc0d505d1660e6dad504c56dfb146b93261cb6a88722d
+Entropy.8 = d5fb69e7aa080097f6a2f5c8179b186a211809bc133259ec
+Nonce.8 = 603f8a7232135c997315e04a07ecaba8
+PersonalisationString.8 = d1026564e875790e42884b091eb86d6fd208cc040f5c49d46b1c1b6dbe4c9940
+EntropyPredictionResistanceA.8 = 23f49a2b9d8714fc8a030b707d62b826394f9223d151cfbe
+EntropyPredictionResistanceB.8 = ccc6524d6cc565672d7ba95b190197cb9c17e7e15601011e
+Output.8 = c717dbc047d4eb6b2684c6cc93470d1e0642d7c15c63cdf8edfda85201f06243f5f9682cad077170b61ed140171b445f2e7f23d01162d857d5fbc906d2fb1249
+Entropy.9 = 5f5649df0b4611f71ad8a46485c272a5c857dc604f2371c6
+Nonce.9 = 0a7950e6bc6288d2f778cea19259fd22
+PersonalisationString.9 = 2a5f50380817883e9c76c9aef0977375e6cea58d0aa563a2899149ae3705395c
+EntropyPredictionResistanceA.9 = feb097d42bdd52b0a3c7bbcc584e4daad1a21e070b8b04e1
+EntropyPredictionResistanceB.9 = 8f7cbd6344e56c3d2b58fdf03b136d46684030c8bf181e23
+Output.9 = 16b89aa5895bd2430e98ba7bbaaa3ab088203101fae7aacbf1a0c1fb2e419915c9afd9033169a55803bdb7b8dd51a8655f297577bd64a4670eed5e747c39ad4e
+Entropy.10 = 3f954ead27fa11ba391b4c41e8e514854f1dada3ca1e72a1
+Nonce.10 = 99b8df3b2c9a830181cf11bd6e59ef2a
+PersonalisationString.10 = 2b861db6d622a6ca2ee4a3eb19fc541948c3cd1202e596a04481b53949c8dcde
+EntropyPredictionResistanceA.10 = 061aed91fe4628009b0ef59630a61a7fbfae33ac06a02709
+EntropyPredictionResistanceB.10 = dc844c4e2af777dfa024e2fbc540b2602cde67b5f820ae79
+Output.10 = 5b93e537b2cf46a932a060cea136b7ac38ee3e3d61edf159db09b845fe4c328aaeeabf5b6504bd391e13895f2c58fa4dce986b87991c98df94a5483034b8b94d
+Entropy.11 = 248d73e39d86ad655101e363380151e94827b649bc856282
+Nonce.11 = daf5d9d1ad98931f67a3609e1741bf3a
+PersonalisationString.11 = 21310c141cbfed6204b6e928c9e7ee3a66401ca3d032a06e3167a9d997b84e27
+EntropyPredictionResistanceA.11 = 0479ff68f10d67ff5b8845bf75320ad3436a571bcc763f52
+EntropyPredictionResistanceB.11 = 5e6689a7e991b023b941be2eadaddd5bfb19a0402b78a04a
+Output.11 = 3db527ad3a51942c88af34634b1b471676a49fc793a7ec4aff97fcf8ba49fad38b55abb9601d1f22df9f93cb70c09086c6743eab2e210b5455486f612dc23c31
+Entropy.12 = 4a65397aacf8b2d5c85ccf6c3c85e9ee35e9bc97f654f99d
+Nonce.12 = 18600a329cd1f9629261b305316703db
+PersonalisationString.12 = 2e9ff1170a1d629f137fb234f7748ac1711017bc140ff9ede93fdf6f4521ec7e
+EntropyPredictionResistanceA.12 = 7b63b6ed68dcbb20a09f479a5f9b797f8c0b9b1e7fcacdb6
+EntropyPredictionResistanceB.12 = 614b58f249ce4e0d1840c8ec620c05e0384d3c0c489386e2
+Output.12 = f97ff4d8b144746f7944e69aa107241ca5b6e67cc28443a8b01509b1cad3a0ab4272b8c998bcc5455addec52ae971042f1baea37a2c7da2c87a5adf04104b8cc
+Entropy.13 = 01be00dcc4a2b5ea92223c2d17de9f50da37a51e1c5ca420
+Nonce.13 = b4ca363eeed89329a494017efaa4b7d8
+PersonalisationString.13 = 58658f38a2a79ec9be8d54cffa4c888c16d74edd0f30f3be4c42e8cc288cb82e
+EntropyPredictionResistanceA.13 = 94094e9bce3dd175c47ffdacac651235aec45eb52f315f3d
+EntropyPredictionResistanceB.13 = 11cbb3a960a997e64b57233653497c353cd92b01817f1e28
+Output.13 = a7282ec73fac8d2fc8748929e1a3e35e6865452035beb53d8ae81de0c687205516104a08313ff6dbc3a2824e7e74382fe1c16e9e4ea638357350334050b0d704
+Entropy.14 = 762e5a595ec981da5186f2667aba37aca50d116d0c689289
+Nonce.14 = 203a94d0a49293ce762e8e8e8f96cf1c
+PersonalisationString.14 = e31798cca724239997c0e114c645665aeaebf02f9c96030e1b19390c63e8341d
+EntropyPredictionResistanceA.14 = 8739e1f7d7e347819fa24b0368eccfa8ad3c6022724f59f4
+EntropyPredictionResistanceB.14 = 655ebd1d578e43d88a362d9f3f4fc0f0ac84644568779079
+Output.14 = 6edd34b0111ad2df8ae47e4dc68f0882f08af2efe41807e0296c50c2c4568c025ceb8cbe6de289190d7599c2f380130d07d78b95aa6e6fc6b5cd1e6fcc81b266
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 5cf3472c83b4a90c6b5f349ca2f9bde4f7ff42f304675713
+Nonce.0 = 6d2fc8c1e3ae567fb9d2238470a98249
+PersonalisationString.0 = c9c7ab32c618a2660625c815250f46e8097ddca0381881759704f933383e8da7
+AdditionalInputA.0 = 1c34e815f3a3bcd71fe08bd7633eb708af86104d0e499a4ba12888d6d1ee570f
+EntropyPredictionResistanceA.0 = 99bd71bcd482cf4ccc849b9d3cbcc0529bf161d5056d11f8
+AdditionalInputB.0 = 221a5680b25018b2a53f5e1d0a7b19b04caf7b2558793dbe36bbabcaeab8bc8e
+EntropyPredictionResistanceB.0 = e460dafd8b32a96ec50216b0fa91419e7717f50df66ac7e0
+Output.0 = 29433ae6da5eff6161449a2faf7491a472543a3829395c195b93286a2557003c070e60bc377a5e6e891a9e46b7c5340268aff989f86f5a6a3224021c371e8d11
+Entropy.1 = 7d97118137bdd3eb7c27c55770b2dfb30dda668efaea5c42
+Nonce.1 = 6d3004a298fc50bad2a6a165f3c49e6d
+PersonalisationString.1 = d4f4a03280cf33ddd415dacf43017e68789abb152f06795e247ebe03b8d829fb
+AdditionalInputA.1 = a13df75d2a2c49609f0e064707e771e9e4ad6700fdc59b11592b173404bf0259
+EntropyPredictionResistanceA.1 = 273f10d90043806a6a9d732e4430df52bdcb8afcfce6c983
+AdditionalInputB.1 = 89c3f37210499755ab16e9fe0995bf0e8a2f05309b1e42f337e53b956f8926df
+EntropyPredictionResistanceB.1 = 33a11824c69a4cdcb0ec46b0e3aeb01b8247512f3c3d0c93
+Output.1 = dc4b4ff22e968396c5a718940330b2f081461a5b3da15fabe5e5dadf8befde6cc960f091b02ce5a7d3e75b5e9028955905113647b77f7b030fd0f7706b2c9c2e
+Entropy.2 = 832d0e92540e3f7fb5cd7bb3f4299827a2b4af762987a0d5
+Nonce.2 = 14155a9384e65f12b7533dce65cc22cb
+PersonalisationString.2 = f97ed0b9f73def68405f906abddcab1ffa908cc06d300f0b5c76380bb9310588
+AdditionalInputA.2 = 4805bc59f6c30d295d2ea4595af0671b8504e180fbfb872b1e79c42b783eee1d
+EntropyPredictionResistanceA.2 = be09ed1cfe95e3ee64c6637f325c67eb0c417920fa58e578
+AdditionalInputB.2 = 773131c54adb914847a3d9aaf01eac25dd804176e09fc0b6d550388d44df1c43
+EntropyPredictionResistanceB.2 = bce09a3215873632d21650e2124370b4b54f7b6c324cc356
+Output.2 = 31cc5db65cbbe37bf48bcc13b8784deb349b86f7b4aa99513c8e8482c48b4ba46e53c7cb9491e414295b372471247848d77e94443e61b33c96b5abe82485a722
+Entropy.3 = da497e17cecaa3e1e683b14270c93fe6ec5c8c8a275d23c8
+Nonce.3 = 4c79bce595268614ced66d2d1d0dc057
+PersonalisationString.3 = 43f9dbf049b5b80fd354ca48531d55ac01460312d8a881f2a93a58c0be2b7054
+AdditionalInputA.3 = e418e0a42e487796a982a0982cc469c85af3ec649dbb136769e9d0544d7ee890
+EntropyPredictionResistanceA.3 = 9df1a1b6ec714aae85993d5c148a968f752d7e694d19eab6
+AdditionalInputB.3 = 8836f486ad00f390d8697ae69e95a7ff06a2aa999bdbb12d4c22a73221c84cc5
+EntropyPredictionResistanceB.3 = dcd5bb256fc0f413deea9bb8091a9082ffdd2d903c5965af
+Output.3 = cc35b9f40b1534c7884503b117e36ab7853fb7e498506cf9e2ef4f6e62c63e15d3da022b7bf1b047539b9f96c57aee259c387a56c59b2cc2c72256095e7ed595
+Entropy.4 = dbf8dcb81834fc9fef2a41ffb0171429200e84a5e001a608
+Nonce.4 = b4673bbedc0e47f7e97acc06275c00a5
+PersonalisationString.4 = d58cd99295cf42d4f59baa82ce2e602db16c7999e7bdc4acdda9cc65cb219678
+AdditionalInputA.4 = 496778381d15ff1748250c29837ea5d060a2446af36913654a1e00f26c722c0d
+EntropyPredictionResistanceA.4 = 6294a809624a699bfad99777eb8ea6cc56e8b914c7c86ed9
+AdditionalInputB.4 = 862ea581cf33a1449b0c9744d9c6a1968d6a379b1d228efc5a7497713124d07b
+EntropyPredictionResistanceB.4 = a326c5e9216920bfcbf85b774610def9dba83cbc23ec47cf
+Output.4 = 1a5c0b1f6afafa39466e8e59ecdd28859cb555454e2faa4b3356fcc36ebbec47a6b91b54296deea6f11d699e079a6f1412e75cab22c109bd92b150a60ae2be20
+Entropy.5 = 58bfbe8370afd0d63b5a1cd4e812cbb15c2618ce5748861a
+Nonce.5 = 0b5026c39551f5f990ed02633473bd6f
+PersonalisationString.5 = 512d64e6b8bd0b13783f673f5a5ce7dcbf583499b9b18346a5a4cec82a9e3558
+AdditionalInputA.5 = a28d777c4eeea8c6b26c19717e2188d303fecb4ef63da2a424a9689aaa18d504
+EntropyPredictionResistanceA.5 = 854b08400d455fde185b375f9614ea003bef388392d8bd3a
+AdditionalInputB.5 = 84431149a9cc3226501c0c6837bda0dfab0029f0ceda0cada492dccbc0083007
+EntropyPredictionResistanceB.5 = c5073b46776fca742866e1497e9fa4748fe7c91f38ade26c
+Output.5 = d873dfc9202395b7b8b9ee2983e1d6071a95747540fbb6bbcbeb72e61c561e39acc01bc07b8e3842d835d93f430c43483985298881c208fd081c340e80491aef
+Entropy.6 = 67169dcdc31fae157b3563672482ea0af62368627fbc4f42
+Nonce.6 = 8bf74e01911681e6442f6190348920ed
+PersonalisationString.6 = 8dbdd022ea36566619f7e18672fc89a3bad88049f1513971fa8e798f3742cffb
+AdditionalInputA.6 = b1c1b236552ee61c6567c864b7137336fbce270bc3a79dc416efdc0a0c7b07d8
+EntropyPredictionResistanceA.6 = efa470b07f71e459697303474db21ed0151a1fa113d52581
+AdditionalInputB.6 = ee9d7d99da81f275526b2d2363686f94f91f8cf3a02a667a0c72455dba3c3fb2
+EntropyPredictionResistanceB.6 = b588d342947cd548f67130e0b44850f8e240364f1c2b09d6
+Output.6 = 08fa982a0620fda7055fecbc3f3b9c914ef4c77cf28aeb2127adaf6335957b75d389af830f5db4593ed2aa22aa9a9d421db07b9fc477240a9b1ab30ed2c542b2
+Entropy.7 = 51baccfe177431a0487cee12f7438b999106109d987956c1
+Nonce.7 = 6eed6fccf40a7da2faa9dfb5500ff24a
+PersonalisationString.7 = 597f4dcc860775fed9df515790766de0e53c9d817af96ad67d5722e12f6ee5d5
+AdditionalInputA.7 = 5c58cba6bd90ecac56ae71a15e75a0fb4b723fa9a46d5d6a7864fd9a1f45a2f2
+EntropyPredictionResistanceA.7 = b7261ce85340e57114b71378a04c578c1e99d550e2f12507
+AdditionalInputB.7 = e61e49c255510b7905f12576bd2ff294b7d4e9b71bf5e3fa1f52b41710c5d036
+EntropyPredictionResistanceB.7 = 8370d3dd3e1f345dd848334099d9029ada144555b838b863
+Output.7 = 77a480446d5c3a7890f5f664298afc9aa004178c69a3e26ae50f2effc3f9b94fb535ed0155218c7f57a05cf27fac8096421360ac8d6d06a9d8a89b76963c7fe4
+Entropy.8 = f88760bf6c926482d541db3cb2e8556f84314a30bfa52cb0
+Nonce.8 = f757ffb73c0f52342f3ce9682a903854
+PersonalisationString.8 = c455206f2575d48b03238065d0785cbe8e40c62042ccc0f9c4bce6692d45c5fd
+AdditionalInputA.8 = 0da9109b01ccfb20077d9fb57bf8d4c4b695f54a340b3fb75f17adb4e749cfd7
+EntropyPredictionResistanceA.8 = 5362ced8e3a4826c67a708a7bac4663c4fcb47dfaabf88fa
+AdditionalInputB.8 = 20063a53bd0fae0e4b78865162518454542989a87d53ea6c3c6c676b85b245d9
+EntropyPredictionResistanceB.8 = d87b822c4d469e81356c35508559a9ae1a41eae1413c119c
+Output.8 = cf75eb0c0582735f7219ef2e47b7204f02bee9c134c58947d18f16ba2209c69592771d6282ad02f6da62d4e0ab21d46c6f81cc171b9e0bc02fa0da84d99d467c
+Entropy.9 = dc5116d2235b9cf3822521aa7af3879cca95fd2d1b5fc291
+Nonce.9 = 2eec8eb1cf05e201fa348a85c7d89320
+PersonalisationString.9 = 339e8073535aee3e85665a8b352a8dfad37c3b1fe8b5a4312ba7756c0a8dd829
+AdditionalInputA.9 = 3436c6faa6111cce0776b24a06a221b7e5cfa8337a444783d21a878083da24ed
+EntropyPredictionResistanceA.9 = 2cbadfa1b4025157d126ee56165015173b6dbb4ab5dbd947
+AdditionalInputB.9 = 76b33c5f9b328ef9ac5124180479ff76c1907eb9f9831777af98d1f9556430cb
+EntropyPredictionResistanceB.9 = c765f25497bca8dbe737c845790b956ff4fb442fe672ab37
+Output.9 = e730370d41de1ab00c46fdb76a6071a6722e89fe753e821d15df5927c6a8040f503103c0256c9360f125650e62cc01c21e670e2a699d533baf6cd49cc53e8686
+Entropy.10 = 5d874579ea6cf4722ffaf604489dbed9eef56d82b192c1b7
+Nonce.10 = d108280c331dd9f84c1d5be2d431b211
+PersonalisationString.10 = 311cf5d807423c716dd016edd1198cc2c0f068331be087ee51bdc84259e3f677
+AdditionalInputA.10 = 65962c7eea0dc267f39cf35a222cf0255d8b1b211925c6c7f95dddcc7c03ba19
+EntropyPredictionResistanceA.10 = 4ca783fdca58cb8f37dc0b416dab82d13a6a36df95f046da
+AdditionalInputB.10 = d47ae4b21b26d7f750948359a04d9edf8db62e861be44f8899f5e1578cb16ab4
+EntropyPredictionResistanceB.10 = 65b53d2d1fc73b6aa2c1ff551878f659d13685bb3d3c7ff4
+Output.10 = 1f36a93b7b9346f129b04b5e287dc9bede9a84b7330e99f285d6569a0f389425141ca55d89fef83845871a088de31f9cfe785e77f846e17b3fd71f9472d58dad
+Entropy.11 = 9e3b8abc236f74f4b49ac318d085d166ad716756c19abe6b
+Nonce.11 = 64bb436352ba7349f57c1cd8f337d1e0
+PersonalisationString.11 = 1eeea75175648c961a15ef235e541ab665a3137c5297367c52db2ac2bd90c675
+AdditionalInputA.11 = 39d6044bf747afaaaa0adea64cd1bff2da15b14d702682e2dd634ad69019d715
+EntropyPredictionResistanceA.11 = da4e945c6ff826adbf49248c56b79b224de50095bb870b1e
+AdditionalInputB.11 = afd672c2eef5fc34e00a3d4145f7fdd3babae265b82432782e544a51d8e5e8da
+EntropyPredictionResistanceB.11 = 8040ca2ea5cc93a4a3ae9f9ae8e74b270484598fd2afe9af
+Output.11 = 97283b30c227cfa1ba6fbca657a85458061452468cf12de62faffb3123b9c1c1c5ecac16b1d554b9af95af0de4b00979683cfbb8eac056d00c572110cc6bb52b
+Entropy.12 = c0feb9d1b223a3063e50a8de8c130902bf83ade8999fad0b
+Nonce.12 = 9631418909139125c04c1c7410bd7068
+PersonalisationString.12 = 3d5d887344155e4ca8b29c9a3d2dde0aad455fb8f89a248d8ccfbac697965a4a
+AdditionalInputA.12 = 50e36e23597b42215f50ccb5527c0806e634e758aec35f4616cd293ff8ac288e
+EntropyPredictionResistanceA.12 = 453287f23fc4d5d89fd6ceda2764755b7c650a55b2a2a282
+AdditionalInputB.12 = f0138a42b83122417cb8e6033e5b368beac6f209e81250b6ccf795e176e8e59d
+EntropyPredictionResistanceB.12 = a02a381190d12999c9e97781b7df16a8b6c46c4263d4b115
+Output.12 = cfbfb8e39c6de9f0a91ab21aca0c47c888945e34bbd3c35bbe47633ac5aa76c3f9a8580dc1c67f245171ebe7cf0bd3f1d5429d2e6e73a35a786cf971d61869f7
+Entropy.13 = deabedfb2a216d6039840410a8f803e11e1436c1384d491b
+Nonce.13 = 0347d8437d5599acddbaec58c36afe2c
+PersonalisationString.13 = 55dac9848378443b534d000e31d6f65124644d15389ded8e80d635607e9abf1f
+AdditionalInputA.13 = 4ed2bdab34a1248779d25c93713c4c9198539af9dc8a1ebd4b7403858d8d279a
+EntropyPredictionResistanceA.13 = 3ff09824434ea90ee63a65ce836676e511ec9805b006605a
+AdditionalInputB.13 = 9fc5048d218791bff0d0ced04e78056a548a9b7381df9098252ede783cd155ec
+EntropyPredictionResistanceB.13 = ddad29ade1e1804e4b4eac9743a0d872ef566544b143aba0
+Output.13 = a14adeda1838bd0ff43e3185984fb3d7b4afabaf0d887b4d3e709a16100a7ec15ae8d58ff63ffb153c682e5d093000883c543119ecf90c15e1615e325d882378
+Entropy.14 = 1e982c1caf501a323cbd46b048a1579b288c447746ec3b25
+Nonce.14 = b013969f5b3d741b6a32a86b475c158d
+PersonalisationString.14 = 6aaf2987db9aa399cd57664cbc6141688808539783bd2ef1bf9d14e8c936425a
+AdditionalInputA.14 = 9d556bbf38e064e3a7bd651b0cbe59b4a1c2f2aab26dee199092402d8633f400
+EntropyPredictionResistanceA.14 = f5f5fdb875daf3a61ba070a2e232dd39c6b275e055c43d0d
+AdditionalInputB.14 = d244bfadb4c90fb72ab3004fab45d3e583ebe4ef4bb9380484d7ee8b4f2a2065
+EntropyPredictionResistanceB.14 = 1010946769f0fb94b0aca8479492dd3075c4667a7fbdec47
+Output.14 = 9725beb26c8e5ea53d9e19ee7886ab369f22d3577c3a0e42969ab6a69560261288d436e5cb45af02f696b96fdd1975aaab0738c3cc1765daf7cd53f83d74a8b3
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 16a1f035388cd8d956026e3b0117cb524dd3eb563f9a7720bb7dcb0fc6fbe743
+Nonce.0 = a2d015f22d854e29de278d910c573de5
+EntropyPredictionResistanceA.0 = cf140bcd4d7130e7e3ea14046c56442b57c43b34ad219553e7105c18f6e561af
+EntropyPredictionResistanceB.0 = e27c9f0be60d82d6cc474efb7fc737b16a6895d9a3a45b971d19b743c1a4ac8f
+Output.0 = b4e8395bcb7503410a94633f70e9904a5b30e62c35bc6dd2a03496c4a49932e184fbffdbcf1de1c72c50d36dc2ae8f04f40f96aae159c3fb816ca16df99b6c3e
+Entropy.1 = 65231fc17f7bb8a0538bf6c417636a8352edb5f27b3dce350820a4ddc8a02627
+Nonce.1 = 51c023886dea57d88d71a88bc212d2fd
+EntropyPredictionResistanceA.1 = 6215908590843a1ada552d53b2370396f144a9bacac1a0254a787e48d5f67622
+EntropyPredictionResistanceB.1 = bd84b57fb7f7a785db9d1df566575f7aaf6cee64b6b8556f5dbf153a0e358d45
+Output.1 = 439d2505e58b951fa8cbad4e7232efef66eb74399410cf9e8ef1089d39d2e1bcbb15c22c9804a67e31fa2d888953a2bfd5828994a2ea6de7e66eadcb16c16c90
+Entropy.2 = 4fbe000a4691308cf5907f81d41a3eeab9fb1a1490d5e71da65918bf261f485f
+Nonce.2 = c6cdedc517088c42a5bb6d6873e21723
+EntropyPredictionResistanceA.2 = aa7e82b0860dfe9febda4e1565d260ef26f6d8e637b915d5c756618f4d18a543
+EntropyPredictionResistanceB.2 = bc6e6358d0d90c23246885f8c67b283f91c9fd3ce9c4de07a683b438333868f2
+Output.2 = db3c3fc961fd6a6c2f463fd2f6ba440ce9f22ce6638894f6a1ceae969fca34c7266e122cfa43db906f1fccda28616c6f1e68ca8d412b1995d912e85671e24dc5
+Entropy.3 = 3271bc91287c781f744e9686b6b6076d5a2e95b9bcc1861df948751e02200e96
+Nonce.3 = eb061412f6b225cf485efa3aade7338d
+EntropyPredictionResistanceA.3 = 10a58303f3cbfadaac041f3a11a4a7ac18b89990044b5432a132d04dc94d2910
+EntropyPredictionResistanceB.3 = 7636f90a3794e3e1bb7df0bbaf3dcd498f46835af7ff5161497afe52ae649aa3
+Output.3 = c90d09f16ce4df613c951b855a0c28329a8313da7ca45114fa28be99661fbc2b225e64ada0f361f676daf85119c8be95b51aeb5ae699a44ff74daab016c1c72b
+Entropy.4 = 36414bc051fd292b8aa2afdc3e7353333bdfa3b2b60b93fb88a43047826632b6
+Nonce.4 = 5d6d6f037ffbc4f99aca296f1b3a7714
+EntropyPredictionResistanceA.4 = 9dc06916e638fc7dcfe155ce82624a0dabd974a1794feac844f7c52ce4e98985
+EntropyPredictionResistanceB.4 = 3e54bcda64aa0f311bd6af04d38d233fe590ec53170f45cc809eeb620453b2fb
+Output.4 = 5181f26c7e14458989aa1164b5f4ad68021fe1af7722a6fd97cb566a03908cf56be93fa583549f4c04738ffd8998765e0faafaf0a14a169d27585a0f1adfd0b5
+Entropy.5 = 86cc6e0d10dae4332d04aa67627618f8181511689b334d4231c3379307d3a443
+Nonce.5 = b9a9fe7a90562209ec60de81d431b766
+EntropyPredictionResistanceA.5 = 47ab3bdf88ae84e8e10a473aa503b2c8cc7b02105830fdb16b9ef838220b1def
+EntropyPredictionResistanceB.5 = fa275ca7f26ff7f246f1f3891ff4142268c47c1df25b62c4531958744d664dc3
+Output.5 = d7680e684033b17eeedd9539b0f3571ebe71a080710883c52338d93635d3a2ffb2155bdf0cba62e9a5aab700989fd728624f01952a09a1351ad0d558f06fe26e
+Entropy.6 = 6158520ba85c530156331b368351a46f11d7c5f2141f00a484beecfa56a6f7ea
+Nonce.6 = b5251e690cc55fc23ac921c59b3bddd0
+EntropyPredictionResistanceA.6 = e456af1bad939757b4c1e2d4f9da12e6b08fb7f0018fa96a52d3ee7c585eb768
+EntropyPredictionResistanceB.6 = cfab0f48cb7efd840e855a81f4b2b407254bfb60ec754b84ef3c616cc65cf3d3
+Output.6 = 6d914e1a09193f1290cd8584f23cd0dc9d4d37ea67ca9bdb89170389551c57938af221160a5343dd156890fbb156d9a344c3cd84a7833aed0587c33813d6b55e
+Entropy.7 = 70f9d89c0db6e81d380a319a7a8fef25660167de548f6403a6fc874d196d5b24
+Nonce.7 = e1f1488a2c8a17166f5f49827db69b1e
+EntropyPredictionResistanceA.7 = f80246bfd74f980d4aa6724ff2cd19bc567c7adb1ffdb07445c22649c1a7e0bc
+EntropyPredictionResistanceB.7 = 6a39c3592c6e5246edb925fa240850f54206ffc91fcbb9c9c3996abe71ec0149
+Output.7 = 9e629544aec8f872a23199e8aff7c83bd7a398edc3a9c93503df2ba530e6fc6bbd840b650f51a997a126f2524d1227d04f7b6f3d1f4e4e81a6a6d2989ab7767c
+Entropy.8 = d3be2c6fa77bca18286f97ce467f8145cdb3a660f68d51fc8180b751f6b76f6c
+Nonce.8 = 997b732c50ad4f7ab28bc6134a9f6bf5
+EntropyPredictionResistanceA.8 = 52716f69a6c843b6d81a0079660f5095fad5042b68817b3bb3c3e8d38560027e
+EntropyPredictionResistanceB.8 = cfc95e2d59cb32605833c7d2caa123199f73ad5f2dbb40cae5712f8cf765cd98
+Output.8 = 6bc66d2aab057c21435dacfd8874ed6caa70f60e36425f8b0dedac98919b85dee1e190d88cafa5b9d99a02723825cd465a6b00ad0151c5272533409776e2b16e
+Entropy.9 = 64e958c95d765e47e4b8f74152bcc8ae01c0aa9f420cd4adf195c9c4a1ce254f
+Nonce.9 = 2f315016546ebf7658c3595463c24f68
+EntropyPredictionResistanceA.9 = 7153e58b36d000b9b1bae18bf271a992655c246e8aa791b2b65fbdc89ced1f39
+EntropyPredictionResistanceB.9 = 5d38be8895589d30790b036e9546eec69549aa5dccf442821d93f5e20122ecc2
+Output.9 = 57d12ddc9509adcb3e34f496a8be9a95a74e669dbac312a3bf6343091dab0536f22aaa3a4aa982690f33db522235ccb25ea912b26d716572ec86c875b333d942
+Entropy.10 = 88476830e6c6353a08178eaa37ca6df6e8fa3961edba13f2d3e5378dad07ed54
+Nonce.10 = b5eefb5bab71682c37f824b8c9cb9d22
+EntropyPredictionResistanceA.10 = ee6bb2c183fe4288e3779227ee23ff8a57efb220706cc0ce6c96b977ff4f0bdb
+EntropyPredictionResistanceB.10 = fe1bda9e059c8e01f996d2da32b479f9f9d027a25bbecdc050b854854d0aa50a
+Output.10 = 069f8a4574121bfb57a3ee6dc1ca1beb473474636ee058ed9aba68412f1faffa0bfb00c9b52265189ff7fe8460a6f45e1c5468b13a8c6c7ed951c17259a1b580
+Entropy.11 = dbe2787449b0d30b20aeaa6e900e7ff8120710196e02b3a0708dd8b8e83e4431
+Nonce.11 = 6d10b1fb2afef1a61c8c29b237640810
+EntropyPredictionResistanceA.11 = f8ed938fac491429d0e177e07f8bf39011e62dec8377d128fcf7e45a2e51d5b0
+EntropyPredictionResistanceB.11 = 1f03411b4f90a87f3598efe43796d304a3ca245084d26ee55c25629bb88106e3
+Output.11 = d4d8a22c19057632e0d495f9763aa70633f92da5f3cda5f2b1a4ac99b3541dde492505841dc54d1ef31001bbbf9d5ff502d9530258dc61f7b30b083c882e0199
+Entropy.12 = 70b9c1a5043113b81c9da526e31da2502d375620d2573fb908f7171ec9eb20fa
+Nonce.12 = d91acced2e94359bb86f11f8801b7bf8
+EntropyPredictionResistanceA.12 = 2c2e64755bc1aab2d4d71a097620299101b9548553091d6c98d1ed182a10f660
+EntropyPredictionResistanceB.12 = 3b0d9f37f7385dc3f2a097555ca3f76bc047eea53d37872906389238b13eec45
+Output.12 = 71ce9af0c9d95ef402093e7e33fdf7221fa13d6a2a3a6b35cff31d577d924cec97c57e376ee3ad7eb17fe1677f7ecbf5682df9e9deae6a7e3e3d5411243410cd
+Entropy.13 = d510b99fe2d18c5d71a89e46b8ed689114f6faf3b95560a378331eeccc703211
+Nonce.13 = 4209d329a95fc3f0cc4dd9b517a764fc
+EntropyPredictionResistanceA.13 = 84380a1e44c21f597078175e0b2767981ee18b54a16cffde623c2a895281438b
+EntropyPredictionResistanceB.13 = bde5c60c322ff3047dc2be5121bb5fe01d55c07f48183b747b1afa7bc1b79b03
+Output.13 = 31625ece0950de3ef4b499921a8cc94118811c3644ef0ab6c66a2b08f49605582bf47ae5dba931603280f53723e68203a39910a5cb17335f2f99c2da82e270d0
+Entropy.14 = cb6579c0dd77ed6833104df8e77812a91a924194f4b28e3bbad11b3e364a118b
+Nonce.14 = df4d07d83c4d90779c7bd3ddcfac2f3d
+EntropyPredictionResistanceA.14 = c7c1ca7ee04eb648d46c5f2ae208e1463aaa7fe442db0b8e1ae18c204b614a30
+EntropyPredictionResistanceB.14 = 7231508cfb7d0fe9aa9e5de80b2211b498444257ba011d706ee0aa35b2e28184
+Output.14 = be54ef3dd1b7979aaf1ebadeebba4145b69f462984f72862cb4528b5c70376aa40dad0fa9bde07e588ef5bfcda5a0c6accd9ce77f4810ba2f2e5f1363cab7c9f
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = a31337e0cbf2ee3e8d1d39324c978e714b5acc678920d5839fe95477ca3b8741
+Nonce.0 = a7f8b770a506acfc79b2c431660d310f
+AdditionalInputA.0 = 5494597f0e8644d6028495c6599911cf30fc96a1b92a3a5dc862fecfc353c43d
+EntropyPredictionResistanceA.0 = c2e44d8b2c97f4c14e39c8137cc62818f1a223dde1dfe9def8672c2a6fab8c04
+AdditionalInputB.0 = e7635b6f9e63c08942c4b5c86b5e60bbe3e89ea3809fb3939985c93eedd17f8d
+EntropyPredictionResistanceB.0 = 923405e7878b3e203cb531f688c10725d7a55edacc2b9f195f7137080b278ea1
+Output.0 = 5dbd55ed2f6d6c1749096b40f6a97d9cf42c0841b27ce0efd7433110d8118955c8cefeb9db8e1c7961eb3f517f2047d27281261760a5e2b24535bb6f565bb971
+Entropy.1 = d9f2b3c294f7c32a9a665f65ef7a952de220892ee1a10f6b871b70983500f97a
+Nonce.1 = 80f7f8aace8b28f8b535eb9dd63b1775
+AdditionalInputA.1 = 66339f6e534761feea283d46fb3f33b72d74d5983a90bfa3d9a9f83b4cdd361d
+EntropyPredictionResistanceA.1 = 496a1a11f8d86c332432f17eec1ad438770fc7bad9d3fc18da08cf6d3d64c230
+AdditionalInputB.1 = a223e7b8baa9bae1ab8a114f980d01b79b4fd7e3b90ddaf13ce50a135418634c
+EntropyPredictionResistanceB.1 = 90a258cf2934840dbd5f6b822b3470d705b37220bd97dc9bfa320d9659ba4ee7
+Output.1 = 46b8835a0bb1a61fe3c329653a817747174ed050f66f2ef515083bad17de83d86243ade7deb3e729d7ea0798ba4a6e04456bed322354275836b28471260adf5d
+Entropy.2 = d39d9d702fbf599e55e63b970bbd1f18a1f3830553da8c4be1ba7f4e1d503fea
+Nonce.2 = 97c3d072fcdeec2111f7710748efd59c
+AdditionalInputA.2 = ffadaa40160796b6eedaab1f70677eead42f191afb4ce5fefc57510271d38be4
+EntropyPredictionResistanceA.2 = d8137d18abde9b2a743dd2d7811662e951b675c439421e5b069c414e36cfff10
+AdditionalInputB.2 = 730d3a97f4b753ab7f09751c3edca09d1d56da1885e278d7c9fb7e5339d3aefb
+EntropyPredictionResistanceB.2 = 384d13b4cd26cf9a1398320fe42c2b927ff7f3a0b54ad5f719562b5fac832cb7
+Output.2 = 715706f3cdc3aedb9b0024d4576e9d7ef91705ed679b5b94477e882a60cc00972802f80f2ae4675c343e2a23739698bf8905d3f83d1c2f1c89b5ef8ad9836ffd
+Entropy.3 = 03520ddd043b0b229b1627296120f06a3b3601769c8e1899b27999a78e58eac3
+Nonce.3 = 483894d805f576ca44dbc5f53ab7f82b
+AdditionalInputA.3 = 825e3cf156af5ea578b91d7276e4ae4ba4f009e8a8a1a2a520cda5bdb704c877
+EntropyPredictionResistanceA.3 = 1a653e9d2aab7c7b17b890b4582da618590309484ec6309e9d5c7bc4188f662a
+AdditionalInputB.3 = d91b43c70f1505ade9dea623627f3a750e3acdcd7a609dbc3666847ba94e6f67
+EntropyPredictionResistanceB.3 = db0dc2c07d15eb0b0e956265232af696096b550080e350c8d7391a962af138ed
+Output.3 = d4cbb5f5b02f571a64e299eed74db8534b9373841caeebaa85ea164d782221bf0a6a877104551163a8b6a0d7f3bbf5d7abaf461c9ff7abf99f0174016910bf91
+Entropy.4 = 60c8199bfa570306f545568447860bf89282ccfc8ef8a23ef080b65ef6257d96
+Nonce.4 = 8b62f38f93625542698ff7277b690703
+AdditionalInputA.4 = 63629aaee07fa85466ea16964d79f64bfcde89ddf14cd4553cf791bfe9568f5a
+EntropyPredictionResistanceA.4 = 685d8411fb4c3cb636a9afcd682ce8262e99b631d2a357cf7fe0e3684f8c9baf
+AdditionalInputB.4 = ff087bd4f583268e20e74863d96a3e56a54622652fbb710dd89cc2e839e2c737
+EntropyPredictionResistanceB.4 = 89fc1befee86c43de434565bb17feeb5347a01ca1d6d961d7301130854be61f4
+Output.4 = bd01c3e23548fb3076db9ae72c2cd61bfc6c92c4abe261969aaf54d3603fd3a1ecb7f078ce291a98a257f8a9e8b255af403c3ff72f091c04d7027788c2ea5bd6
+Entropy.5 = 054e485b9ef43c2274185ddb028f63be49a651df02f8d3822ccb481debb99177
+Nonce.5 = 5e2bf758b9f1322cb816a82a2e12a45e
+AdditionalInputA.5 = e052d73416fc25b9716018a6202ce899e0cd573ec37843d2300613ed5c2d4fed
+EntropyPredictionResistanceA.5 = 4a28b7ef755ac4f70a96379910e62d7b558842484dde1a9a84376433fd22a8f5
+AdditionalInputB.5 = f8f65ab9b11e2ea8f46eeafbef2a8a17dd0ddd4b3c5f75f5716d21dbcb738291
+EntropyPredictionResistanceB.5 = ad332f07f36dc1f8077094a7a4d2f92038bc4b23793159cb391f1145db9c0b36
+Output.5 = 61b4eaa45baa22b68509cf76e4ccc5bc550b4e102472ed31d287cfbb9c9bbfdbd2f9633a3f1124f218d7d36cd4f801d7e5b8eea64b8018112868a26c1a0d0cc6
+Entropy.6 = d22671024dcb5df2ee4f293ffe3deaac81adb0e3e9f4c6723223d20baf89ac0f
+Nonce.6 = 173cb7ce3687bff639fff8544606794a
+AdditionalInputA.6 = 34d47ae5819cfd6da326f3e89909989d0a32c2064d3e6ede31c68cffcddb8620
+EntropyPredictionResistanceA.6 = bb4a0dcb4076e3428db15cc7508285af2f5217f6db28ceff93e1fe8f449564c6
+AdditionalInputB.6 = 42cdeff9f5297a708fa7c16a931a1a62781fbcbdb037e4d3f78b295523ba875f
+EntropyPredictionResistanceB.6 = 0bbb4b34e8a4c9e439bf9ece4d5f44df5646db618b70dfe6f5c3032d814cc4f4
+Output.6 = 1ecaee8888791cb520cf918cdbb948ad4bcb89681b22f8a5133b71848e78f2173fcbeeb106a620092a127f0d7943bb0dce6d5cf2fe47c780c8f8e3a1ca75ef0e
+Entropy.7 = c80c8fe807c428017225a5c2472b6e00e71868270501d7047b492c85839e175f
+Nonce.7 = 2082a7244a51fd6a19908034c5684869
+AdditionalInputA.7 = 62fa4f96d3eba71a9dbb0b205a179fb3cbbb63a8a1519656ec2050074246400d
+EntropyPredictionResistanceA.7 = 3861694409250537c2ffad390fb87ec5f36062bdef34f97a67c40e71ef678e2d
+AdditionalInputB.7 = 0d02f749d2fa7467bde1655c93a95517788af0efef0ebcffe8583f4fdf6ff23e
+EntropyPredictionResistanceB.7 = 8f0d6905ca5d200199e2ec52fbc10587ce810e64d69f295b156f188f84bddbf0
+Output.7 = ce1756c756b8334f21b5a612129775a662ebde56e999365272736585061b66d530a0c02c24c7145d531ec6fc5f4606965163b21ff663be1ccc5f33d923a42a49
+Entropy.8 = 521428bce4bd59b3bdf0c22096f8500ff079f5e9ad47264455657059f52f5869
+Nonce.8 = 8836b6a6aeaa6001276768b6c8cac232
+AdditionalInputA.8 = 3179daef3c3e53094f7ee6213ff74333c98d3a0698aff997ec3c4087676be73f
+EntropyPredictionResistanceA.8 = 2bcd59cf48f69ab77256446ae634774615a85efafcf0b056fa0f5d0235d79fd1
+AdditionalInputB.8 = b651bdcbf59a754481e8ae5cc781bf4b408655bdb69d5a683aa96de036aa184b
+EntropyPredictionResistanceB.8 = 4d29607e270c98a54145b658d92167350ff10cab78e95958d18a10e4fc48e12a
+Output.8 = 5ef69aef7583e987c5023a774c3cfa904bdcd1a8413649884ee26be03fde12cd2d0cad61a2738f3fecf7f4b1d9ea1d6d830cf99a6bab25d5568da2bb180dcf7c
+Entropy.9 = 0c6a2809b3527bd98e4e50f7e0e2927c14d822b71db0d07f7f1f6d880422fcb9
+Nonce.9 = 6a13685187d93a3da6ed6dfee2ce28fc
+AdditionalInputA.9 = 7e85f4ac00bb6c86b477019956c6ddc1280ff1314299d317ddb17161524b7438
+EntropyPredictionResistanceA.9 = 3f1e558989085609a3642cebbb821a8be6926c54c2e05c296e6d7e94105d1ff5
+AdditionalInputB.9 = 4c2ef939ceefd0e312f87b34adb37c1d1033011d3676864e70705f70f366fb29
+EntropyPredictionResistanceB.9 = 708d35cf398383981e8466eb804f14735bb52939901128bbe929686338432471
+Output.9 = 80cc65b541d1f8e0f7a3930e87eb102fc081d3955d3c735a93801779c7535746b86f26367822fac3d6d48712cfdbee0ef3f3506527f426bb4fb6b146abfb55bb
+Entropy.10 = 048c22a3cca7d6f169421991fda900ac8be5ae7554efd9253c52a63fac5eaee6
+Nonce.10 = 4aafc3107b59e2f3c02cdb0ed5ba848f
+AdditionalInputA.10 = 29221f309024ab8c6416393626fda8f1f8585a986672c2905f9eb7c53d0187e6
+EntropyPredictionResistanceA.10 = 162b461fcf567249caee3f10233590e4a45890455426ba544920676e3f8870d0
+AdditionalInputB.10 = 568443999e556e9d7e4d6714c52c32f05a297d13699c8dd97d9cb3c4922b19e1
+EntropyPredictionResistanceB.10 = 3ddbb026b761949b587ae4cfb764c5e2149f7ebaa819212a6fff71a7571e7b27
+Output.10 = 9db1293d4db9f7e49f5f29db6056a3441371458972f1653a3ffea9c65f20a7662732f2a481cf2ad5b86fbba85d9f725fc0d102a40580179498e721243a76c14e
+Entropy.11 = f3f1b4a1942c88d6329f3b6420492d306c0a52084ad259dcfedcdbb8fd7cf1ba
+Nonce.11 = 0580c4a940f2edc09043ed2c639409fd
+AdditionalInputA.11 = f8d0958fe037aefe3197e112aff208ea78c30f63b59a76dd3ffcbd9aba8d2eea
+EntropyPredictionResistanceA.11 = 5adbb2e988fbba65ca4e634acf634fd80bc01608c98a289c19570422d44b480c
+AdditionalInputB.11 = 72e5e9a8400ef69c85575297aead7a792073c9d65964a3118e319044b149ba27
+EntropyPredictionResistanceB.11 = 873c572e1724147856b91bdeed82f76c2ade71f70f167d8b0bed6ac33d7fd57e
+Output.11 = 79565b4413d0c63394c52996aea4ccf3f2f82eab7d0ab04b349a87b23805e85db9cb3291b6448bdd2e772e97fd1247960e9371b414882228c26ca5e2e3cb69c3
+Entropy.12 = 5376510befbf7fb9273fba261dab505f6eb2e5291d5c9fe4f68b98eae5b2b4d8
+Nonce.12 = 1e330490cd10711bf51e658b6570ad52
+AdditionalInputA.12 = a045ab546c972e57bb991d65d7d384557d78c6e5c37643f0deabbafa25189c5d
+EntropyPredictionResistanceA.12 = 3232d20cafcbe2f2a76762c51779218cd787d414269347f635e4a7cb1acb98f4
+AdditionalInputB.12 = a73d007f14d90e2e091a44be0417fb8e2c300ecf94d68fb5df5a991824931a80
+EntropyPredictionResistanceB.12 = ae06167fa0d7109b0d1240915877d71c6e245a9e7422fdb93b9ba3e0aae6e58a
+Output.12 = 898d5a6c2f5f474e1ef24ff856f4507196a67a79e722b4ced7102a37a43f42306ca8cf036c24297138f78b84603b737d369ae162cafe5e63ff749dc2ca49ee84
+Entropy.13 = e0213e7a374169712b6e19015f6eff1276a2a22f213889bb0cf2fed727d437fd
+Nonce.13 = da9230c45bedbe6b93e1ca78352b5ccd
+AdditionalInputA.13 = 9c2af46c2ad06b497f6a82390fcb65e24bf8db56b6a5ff04d48abc01b3e1f069
+EntropyPredictionResistanceA.13 = 09b31b9060aa02962d7c53c98d1438d9deb52a1f951c1dce7e3e833ffa7f4810
+AdditionalInputB.13 = f5e88e02dce6bf7981443a685d514c27f978d701bfc9b9afdbd9276a42b70620
+EntropyPredictionResistanceB.13 = 9d7d1ca8f7a758e73bdc86b527a3a4d9c5d3450cc9b2f677ddbfef1a9eec7318
+Output.13 = d25ba0fd9fb1b78088f8fc650c8d26ada1b9651f729b79f1823661f113012d23c173687d967b7c3ed21e4573240d788b13ade42a864aa04820e1a8e9ba0a34a6
+Entropy.14 = e830a3b62a8e7b11da12661ee4fc3531762f3c86dcdf8d77dfe7cbdaeb5ead0a
+Nonce.14 = c2e9920cfe94de89d74149ad7d8768b1
+AdditionalInputA.14 = 460a1e65aacd2222262216f3ebaae621f9517abc7324264d904b36940dea51f5
+EntropyPredictionResistanceA.14 = ee522f976f98c02d5a41eb179b84e3622ddc60d86bcf17fbc394f0511a40d851
+AdditionalInputB.14 = 9b9e823ae4a4e538274ca569bc7f55a83e3001c17ae9c49729548e9624ed8f57
+EntropyPredictionResistanceB.14 = 67ca642819b5c8ab145967376f2e67fb2bb9166f0b76d75618df9444c99ef1aa
+Output.14 = b387851e695e07c6c280cd7ec59eb078a033b25f86ee2591144a960ac83e550b7b976cd8d2085c85685857f841c4c6697512eac3264196a8b66750591e993394
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = ca58fdf2b977cb49d4e05be23950d98a6ab3c52fdf74d5858fd1ba64547bdb1e
+Nonce.0 = c5ea24c0fa0c90150920924232364545
+PersonalisationString.0 = 5a7095e98140523391537e75d6199d1ead0dc6a7de6c1fe0ea1833a87e0620e9
+EntropyPredictionResistanceA.0 = 7d20766bcfa215c82f9fbc883f80d12cb716d1809ee1c9b3881b2145efa17fce
+EntropyPredictionResistanceB.0 = c89235552ad91d8e1238ac014e3818769cf2b6d413b62c77c0e7e60c474495be
+Output.0 = ce2fdbb6d9b7398504c5c042c231c61d9b5a59f87e0dcc627b65115510eb9e3da4fb1c6a18c074dbdde702236321d039f9a7c452843b4940722bb06c9cdbc343
+Entropy.1 = 58eb6cc9b9a36b9317b81b806a7efd8689f72cce9d7d2fc7d00dce2d2d214fc5
+Nonce.1 = 32af786aeb620c5338a793175463fbd3
+PersonalisationString.1 = b51bec3bdcfd8da6472831eba7803bbbc7f27e7de1251725150461f3222a5584
+EntropyPredictionResistanceA.1 = 0c4b0c3635d1fc953718469a768cb0096625e954ded5f6238fd95737ebbd9175
+EntropyPredictionResistanceB.1 = ad802422aabd51d2878af3d908e343a27a34710067806a468741030c81453c08
+Output.1 = f3271150d5927f0448d63cd3bdd92e3c99899d3d61408b791bfc02cfee71de8cb1aa1de550f424da79f5cb00876d85e9abe6fc5cf30ca498cd223ad832210939
+Entropy.2 = 22629816d26e52f705dc95f9b5b2c30fa4b88025720a73ceaa415ded647ba15c
+Nonce.2 = 3d48af2ecab939aace681dfcd221009e
+PersonalisationString.2 = e7fb3a1323ccff3cf3a8e11ae674bbd2262e77d2db95c03b23d4a6616e4f0f7b
+EntropyPredictionResistanceA.2 = bba2a6e6b7afe57b4bb38e64190918f205f1758056609a98be4fe63ea7d03581
+EntropyPredictionResistanceB.2 = 435b6242ecc0231cc00dd36856872bbd1b19ef80cd412eb1b645f8ce2fb4dfc7
+Output.2 = ccaf68d0c7b09dbc3f84ea61b36e471e745bd0ed01088920bfdb9facade330b1f9ec73d2c1daf91cdd66a9d6e01d0cf704654bad6a982c68278237a539453b05
+Entropy.3 = 8ea5b05f5d13d4487cff6a09b7090309a11fae73e9017caa9160419ea3f0e82f
+Nonce.3 = 7aeb36951c6008e8484c18ceb78effbf
+PersonalisationString.3 = 92262c6665ee7243c4ab02cef199795359ed091cb47cfd0656857d5a58cf3ac8
+EntropyPredictionResistanceA.3 = 5977294b97d3e637ebf0d4b3a2771b616a159dc3339b09ba99914ef3b24f0acc
+EntropyPredictionResistanceB.3 = 992ff6031f8cd288998b89d06f9cce8f9a40f304e454ccf3b146d12b3199896e
+Output.3 = a7d432d8bd03c3fc525160911f7fb1b2df3aa5dc769f93b92d66254970a2cd35ed748934cb6426b64696f0c2a1515ca94a07667922c494915a974d263328a61d
+Entropy.4 = 88ab9b05f5c07cfaf344eb5f607af918f696572d70dedd86c3628b152227f6a0
+Nonce.4 = 1db355f821537906d523c6dfd8155daf
+PersonalisationString.4 = d0cd78b9397c6dff8c0de840c0d815cecd245442c81f4c3e56dd08cc94f829fd
+EntropyPredictionResistanceA.4 = 26e67d433dbe49410d94b5a8aa0c3f0c1df4018fa88f8d5c726494e642cbe430
+EntropyPredictionResistanceB.4 = b398c144cf39ba013791037aa0a62b44743a5205fc71fb75439619c5a3112980
+Output.4 = 1b02c49a67a76a7daa5ad452c6ca89ce81d732da1f3d19396c8f26f869610432efbb49cf0fef6acf594ba3e1b0885d3108200074d93a16c0cc3b031e64a09746
+Entropy.5 = ca3a825eabda32e4f085c259011f0e5bc88cc16166c7c3713b76e7e6e59a4ad5
+Nonce.5 = ac70d09e85f472cacdebdd347fbd9c84
+PersonalisationString.5 = 73444367e878f06796c198b2b9a613cf45dc1282ca29522c07183a91259848a7
+EntropyPredictionResistanceA.5 = 56b7092c01197898478a0bcd9d3ace0f2c490d2f02a0e43d3e4c39f1a6b1588a
+EntropyPredictionResistanceB.5 = 853ea3328789f1429bba8c2076db22ff16dfd441f9a6d4c0533f2a2acd269aaa
+Output.5 = 0c6c197319289ca7be6879e87d6627cd04bdfe91664336a5e1b3798a9b74e49b6db82fa6f3d262c786df2fc39da514b8d9dc61f2639dbf949dd6054f0b42fa6d
+Entropy.6 = a36bfc417a823e84b2dad2e2fc16d43dc8bad5a836e37e209fbfb211518e8ce5
+Nonce.6 = 36aad542c85d0642ba10f32bbf6219b2
+PersonalisationString.6 = 66779e85a9b3be782be8217d7c21ebc48cd71042f4ae173fd57e8c34289d6a76
+EntropyPredictionResistanceA.6 = e504ecec6085c911551dfe92210be09507d22b459a61f3678a09a86e921d1f46
+EntropyPredictionResistanceB.6 = b689a208058f237907810d96f9e17cc144c0b10ebed0caff05d8970ce9b07bc7
+Output.6 = bcd92884b6325e31c727289fc6a1faf5401dca6cf7c0092070c718c6bde0037940a3aa459874dbeb513b2dde07a61ad8938c90abccb0e4a06c77966fa2932af1
+Entropy.7 = 882b6834ac1748dc5d8b3365e72b56039f3785b1bf02eb6f3c338b8445f0dea3
+Nonce.7 = 0ea526a872cc3b9b70aa15ed7514cd5a
+PersonalisationString.7 = a08591132d1ae46754a1c91d9dcacd58bf1734f46a42115559818ab8f230fe4a
+EntropyPredictionResistanceA.7 = fca495a8f5c64740eb6041ae0d98f911fbd02ad4c1f7da7580afeaf552383ba4
+EntropyPredictionResistanceB.7 = 40af61145a3fbf1b87d2db0a74dc5b981413422355b128ba7ab61f580b965f3c
+Output.7 = 638bc85c8c70f3291c6105d9290aec9c1059b93ac9bf20b3f6b3d1b5933a328dfccbdf1922c07ffe7bdaf8630aea3c298d19ab6efb99f71cd5724b2009af4467
+Entropy.8 = 8342c4ebfe1938be9220f976c98719eb8347e4fc5ffcdf2a857940b73137ccd4
+Nonce.8 = e3dbb17de455b260bac8f61389084ee2
+PersonalisationString.8 = de0aae98341ff2c6ad81ccd260a5cb405ac20cd71c63519a49f0463918c339e1
+EntropyPredictionResistanceA.8 = f1661422c8a4594201c7025389ef6445e6fd6ef81ab651c6795152566c485d22
+EntropyPredictionResistanceB.8 = 9727f2194c05585babb56bf6ad84c2d2a377e287866c796b01c9b733cba49c7b
+Output.8 = 63d60d1345cba4840a972dc4495f0b70b016697bc09e3725b8fa918c38c9b3b06309e72877e767780328ed834abff88932447358894094c3e207769b2b1829ae
+Entropy.9 = 46b96b978be292abcdfffe4c35bbc6fff1610558773963a099ad17d99f3de432
+Nonce.9 = 2d13387eff79fea8c8b0edcbb9643e22
+PersonalisationString.9 = 64c55fbea74ee9e62bb6d50fee5e6eddd9e70035af69943139443c0d75e55e8f
+EntropyPredictionResistanceA.9 = e3e4a5a1191880b74d40f8d95c3ca80db540320b9aa50c13c45d76ca14c51ba8
+EntropyPredictionResistanceB.9 = 52a85737e00076459f9153ededb1c2eab636d6bb9fbb59ae308a04b57c050b74
+Output.9 = 69c23a0bd3b09a18fa04ea7f81c9362d2d404670a443996ba0cf4fe476c84e9c8d55a77eccb854159757607eb46d72047b65a80b018faefc25e346063cd98f23
+Entropy.10 = f353f25ac6b80d9ab37d6eb698058489fa917bdb9cf3df9c7a71f9b6f2c52216
+Nonce.10 = e8bd0950bd8c8eb8c94667fd580c70e9
+PersonalisationString.10 = 51f13090292c6274071668e0b88f0405196d2fb4a0817f33365aca1b731e72fc
+EntropyPredictionResistanceA.10 = 6044ef8bf925ac1744ac0c69b20a39e3a7606ca52c0a0e224a28308c2790b40f
+EntropyPredictionResistanceB.10 = 6b7a83684b334ea75fb81789ef0cacb14b32d2d7cd997a82db82299ddb73a09f
+Output.10 = 7bd3d0297efe96e28b717ce91c0cac931619f29cef7eb45b89055d0815432e7e2897924a63ecdaa8d800a103db96a181b4ee7e6a67f15e629db4bf8d582f3fdb
+Entropy.11 = 6c9a224ce821c1b2697fa51f768b1eb5ddff6d1b15824572f0958e41309ead05
+Nonce.11 = b5dcdd7daf559cb3d3a3bfb3ce48ef3e
+PersonalisationString.11 = 9599be9166fd6c355a8f683d63b8c1e28d825314df3dcc26d29bc545136e4423
+EntropyPredictionResistanceA.11 = d4db525edc8c486c72d96c58724f160f51fe6194f5d0b56cc2a8cb53151aa0d0
+EntropyPredictionResistanceB.11 = 2361510292456d410609b0143c4982011a79c86831d10765ae3e3254077102bc
+Output.11 = af5b9d31813ff4967d42e3ff37079c3f39a1c9e30a10d7f30e1429126eeaaf3a695ef16655d60255b6d0e4921a3fd127d05df2338ed25b11e45c1ffd672e9f2b
+Entropy.12 = e0d1974d3e1c472073f228acb797560c1f1bf9c99be19ec7681c827a206734b4
+Nonce.12 = d3daa8cc35a590f74d7202f20c4f5887
+PersonalisationString.12 = af9650f0320d62e1130ab8c51e0ac423d6f92ae564aa1e894c80110c25eb8137
+EntropyPredictionResistanceA.12 = d0893d618350e49027d4fd50e502b62e0cb67cd19972277cc1eac0d5eb51df44
+EntropyPredictionResistanceB.12 = e3d3ce9fe73d1504412194d257fc8a252c5c55b11276d34dc97dcf175064e329
+Output.12 = cba42af00d3a68a31e64a0d17e8a4b74d1aeec2093556d9927434e726613498aa8be9804441bc681f52ce156845255c35dcdceed686e45dc3688623b724d20f4
+Entropy.13 = 735eed4bec0cb84972ef1f15fd793927032530076836a4e842d2e99d0b89cce4
+Nonce.13 = 7264ce83c8702a1acdc5ea556e9e3fcd
+PersonalisationString.13 = c146f2f7c7c67c33da36215dc6a1e258b39a9171c08f3c8d517948d6b9259200
+EntropyPredictionResistanceA.13 = 9e32923d5223f41bac701afd4ad186818da7cabdce4bc525b74d384fff9494fc
+EntropyPredictionResistanceB.13 = c6864c54459c4f57854bf13c5e77bbf51c589e5fd28812a15e72471e70d2e28c
+Output.13 = 503791fc73738bff85b63f26a24c9db3fd5f3c7e6ec0d9f1cf46b01cf336d1e84e788c0626a37db632304988fe68ae47996285dd052b10153c7178031780436b
+Entropy.14 = 54dbc63695767d07d19861c207fbdc5c09e39899759549f0482e367673697012
+Nonce.14 = 29ae41b877c8dda939f5a488f3774f8f
+PersonalisationString.14 = 76799b83154fc9cbde616f7ea9cfdc0897a2136402991ccef2b17595aa1d7c50
+EntropyPredictionResistanceA.14 = 03d69a9cca9b95d1087fc50d0cfca03350c9d4d0f1e872522e2c60b73898ae53
+EntropyPredictionResistanceB.14 = f430d84967cc460575d2b5ad34fb9980a31faf10229dbedb6425099a0aa83323
+Output.14 = 9a23d08a1f2d907c9eb473e5d4f3ead79d70056a264463c7c8981480a70dfde5c5f90a074157eb384f391ac01b1c3138c9d36f9e11b471dc02056759296235e4
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 534346a3e0baa65d7a51871b6d633a6f1efa9ff55dfde3212c95029adf2387d9
+Nonce.0 = 0cbe99821509975d824fd826c47d2abc
+PersonalisationString.0 = 020d7340569e68d992e6e8ddfbead9f993c74d971e4339fe91074f87e9d7d777
+AdditionalInputA.0 = f41040eff2a7010287c2a76d7867a66e61299be1e1247a6b22a64b829ada8624
+EntropyPredictionResistanceA.0 = 286091709d2e91bfef6654b8449d5e5564b6c2fe1f3e4e6e59fe776461bfb0dc
+AdditionalInputB.0 = 94efe68e2185646a17bb8a83268142a7b7a02786c1ee90ab8f7399ccf543de26
+EntropyPredictionResistanceB.0 = e68e127b2e5b9d6539c26f7e78bec13314e37febdb7105d1d65f0bde23c87d38
+Output.0 = da6389d151e3b2b332fbcc02b2cc5af4f69835e9fbbe19130f91cbf30a3c24580ebfb4311b3487e9d6a61de9dc2842c107152158b0e75a932c38e5b8ddff10e6
+Entropy.1 = 443c6ffd30ba94d7bc6c8ded257f9a63df339d3939f0a8d93e4fed65d98631a5
+Nonce.1 = d4dd3ae98e4565590e5b03c87a77ce59
+PersonalisationString.1 = e0dd7a9bbe3569f4be1e8e4c4b7d370917022e6f6e8e2c04924810080085f6b8
+AdditionalInputA.1 = c7ebd6fcafbb3614f479fddb734cd9bcc185eda991890b4aabbacc1020c49bf5
+EntropyPredictionResistanceA.1 = ed4c48ecca6760b6aedace4094de3c8fda82bc5e430aec1c3d09012d9fc19ff5
+AdditionalInputB.1 = 27fa204cd6ecc4c43b14c44549eb7a0c7ac5b5d6038e44e48c7278dfdb209be8
+EntropyPredictionResistanceB.1 = ac76c70a156a7e4a9b1a028a3ac7648f66164082b463f8bf149dd8d9950a52a7
+Output.1 = 74f80e6d8a61dc7e129f4eb68ee60ecaeea7afefbdbf883c35d3e4db18938db0643668265f4b21a18dc0dc209219671fe494add37b884919b2ecab1cbddc9d10
+Entropy.2 = 399059844d1b57eb78815de9f131ce7a4b38b6b939980ac31a7fb149a99f8745
+Nonce.2 = c9b7ffb66ae7d0d6dc1bb28b9e54fad2
+PersonalisationString.2 = f10a65665bb9a6fd2d7f880b4a9d55934f8bc824de6606dcf8899076f4751b39
+AdditionalInputA.2 = 4a416363394c08484ac2f247ea6dfd95d4c829e16b4ce9dd161e1f3e5f36fefb
+EntropyPredictionResistanceA.2 = 28f4302ac56c0951184184dc4cbb01c07b482dee6115e7e940b00bf961226c05
+AdditionalInputB.2 = 1a76e10d5e18380b0978c6a2f97eaa10faa122c50b8973a65b3001440c26eb81
+EntropyPredictionResistanceB.2 = 3e076a04d112891c574f6691d441439fbe4993751756e0a9013b68b466142b7f
+Output.2 = 8e4818d7c10d63d067006ba35f4636c30f32a962467d437d2acacd42d5b52d4c758fb335d9de88e6f6407f2f6c7d2ac173d5fb94045bc83482b087d633c583e5
+Entropy.3 = 4d626847287b6a494ebd860c686a5ced433f44e1df476c359bd1a56aa5dad1b1
+Nonce.3 = 07e6a86f3bf49dcba6bc7e3e7807e757
+PersonalisationString.3 = 78d7566695217db1718742c37b5962c6b3b786f871d038ace0f22c72aebffd50
+AdditionalInputA.3 = 98af9b2beebe5d207eb53d7c4a54b1196549f70f0099ea10380dcacfb965f49b
+EntropyPredictionResistanceA.3 = 32408b60bee59d57a62e6466c025ac2aebdb232269b58e36204571635f869230
+AdditionalInputB.3 = 8023c0562de89e77bf9d43cf31dfd2c0dc636eb40f61579bea60e80dd309e955
+EntropyPredictionResistanceB.3 = b29314c6fb889381949f0499cc2ec62bb60365813d4648262556089738fb64a1
+Output.3 = 6d3692b82b7c189366d1d3e67734b569dd91087f40ef8ce0ca27d00de1e1ced03e36d8baa3765eec4f0426159d75cde0690ac58755a72a4769aee86eacf7112f
+Entropy.4 = 9e0b8fdae57bafd5370294db3cb09e6ad8f0f0b90f687c70dcd2c5f6fb285f46
+Nonce.4 = e84fd4bf3debed96f96730f48b6f44b2
+PersonalisationString.4 = c471d444c08a086777a7d3efc233c215696e371c3a9d055cbd542cbe86ff4e13
+AdditionalInputA.4 = 1339a2d86330bef5869032d55ed4f030a6bac460762f5ae61378c7b1f9e636b4
+EntropyPredictionResistanceA.4 = 903c73eb49f53281a083c736d062e8e84b59db1f915a8d25051a6a82acc30c03
+AdditionalInputB.4 = 3652a0ee38a926f50ac56e077fe88940523343cf39d15a30a6e303b28ce65b53
+EntropyPredictionResistanceB.4 = 8e9888fa5fb0aa2750aacfa958175cce54c12330209381fd7350a65812a4b18d
+Output.4 = aca9602e63669842c0b6a80a7dbf71f51ac9bcc624c9858f41ea3a55ae9db894930b903dd20749b4a9b87f9ad2c2cac44d43a26a14ff7fee6f5238a2e569c8f8
+Entropy.5 = 752f528b9a1c0f2e3cc99c241f1e2ca7561cac4a34e94e739478512ed32868d7
+Nonce.5 = 9d75e0db0885b9eb3589451ab9f9d054
+PersonalisationString.5 = 81f0986101d4fe5b7c85b89274f88fe0cf0fa4204d5ab23f149bc62c836d96ab
+AdditionalInputA.5 = 3d46a2280d08b26e7cd7018d2259c7cf7bd6c1bdf277f9b6e6f34cc4a57f0575
+EntropyPredictionResistanceA.5 = 7f65a33f999f35b3e57f37c2e14fbb034f9789e3a2bc9c8c6fd015e5cb66458e
+AdditionalInputB.5 = 20886997f88b4d274cade05a05427ecea35db515013ff216469a1c5f13aa7e45
+EntropyPredictionResistanceB.5 = fef1a714858a0614a23b4ac0151d6bb9dab427daa47686d8a3f6999d630998d6
+Output.5 = 1d67f1619910445348a0263d802e38fd54df0134da925b4438e0a95e4191f95c77e1c2a39804be37b258639ee984f37f74921729395abfa4b37a36f60e4b79dd
+Entropy.6 = c0b4f657dbe3c49b458db55931e83ac7e97ad8b1982546f0b4ab48a283cb181c
+Nonce.6 = 7dd941aee85d2f86ed5a2de8d9dc3a8c
+PersonalisationString.6 = 3115f39ea0d41feb15cf81df2f569fcd4002bfb91c234958812b96db11015a28
+AdditionalInputA.6 = c664f2c55235ca71a394010f8dc0eb5e7eb84cf325425d57343b7a47218b057c
+EntropyPredictionResistanceA.6 = 1cde14f5bc73df2dbd6db055edde7b4ec7d769b3c327d800cdf71f183207fc15
+AdditionalInputB.6 = 8e2c01f84a4122de34124e01f12738771a48ad09dbd469480ad9466f1397fef7
+EntropyPredictionResistanceB.6 = bb6e54378069758a09aac0b987ea556462bb2d7a188e9617ab36dd6f66bc3d85
+Output.6 = 6b40fb4d95043f579b05a4bafc1274b88ea8ad5442ab5ffcf8a0521293e7c554336138004ad5d3ca797e1b3dd1b58c50ea30234289805233dd85f460a3bc31b1
+Entropy.7 = 945e56dd121a32924e9a5ae19b790f14ec49031fa730087ca4ede50e1229c935
+Nonce.7 = c703dcebac6b6e89899110a2404c5226
+PersonalisationString.7 = fd27551155f3d8fa0af5ae413a97c840120d5659fb6c8a1945e5136abf3a4639
+AdditionalInputA.7 = e83a46c102c1d622a6ac2cc51d0bf8541e5dfa34b2fb636e64fcb784229dcadb
+EntropyPredictionResistanceA.7 = 4ea5b517ee3c00a08550b59fb8a9b9971b392ca4bacd93c14211a4d449f3304b
+AdditionalInputB.7 = 3add8a8bf95e1dc56a1bae60a36cd8d5ec10962af9eb09ca489bf6a5c1c1291b
+EntropyPredictionResistanceB.7 = e8bc8245b5105f9ef64b13c60ad0cf95aa145f7dda66161e84f953a1ecdeb26a
+Output.7 = 6a4dd3614b64283392bab1bd2abc26570e23116b727f995df4d2919c63064dfb1edab0388cc46ce582339b8e6e4ff1e2c866e421a0d98f4768746906fa717054
+Entropy.8 = 52f188ee672522b61070b9b00d57c29cf57592037296351e94c938cb1d4326a7
+Nonce.8 = a6dc77507dd595e552bfea6ce89e6ddb
+PersonalisationString.8 = 6c3d05963bd7f18aff43c3ccff5d33309ac2196ec48b82320ae9b4829ff10331
+AdditionalInputA.8 = 62e10a608c82c494233ae7e353dc6d304cd988d94cbc4f62637934ada8476bfc
+EntropyPredictionResistanceA.8 = e06476f61fa936c2283a963d01040455cac81879369c9a9394958da2c490b806
+AdditionalInputB.8 = b330b7054b39d1aaf789c7b8095a21166d2b6df6941fc93139da75016e948839
+EntropyPredictionResistanceB.8 = 18a63299b8b2c77360fde04a2663ac064fbdd6cfa3093be5c3dfd336aa457c86
+Output.8 = 8b4bd4b15fb086f0389785f55e15b9f0bd5bbcd0e65222866f21cee70d9fe6ef6a069e9dae2289cf1bf35d5373d35e08b307998b8b32be15bcac9192692427a0
+Entropy.9 = 76fe117cf333d92faec076c2e2d2641b9b5e23e561458b8d916a6cf364b25da9
+Nonce.9 = 139faba674cf210865ac3bc8f16614ed
+PersonalisationString.9 = 3ac80fe6f26579d5376f4b0cc2cc8e0e5bfb7548467107c96aa3b4f2d88cdac8
+AdditionalInputA.9 = 4afc7b771ed5bab9ebb01d494c31d8c814e266625dbb4f394d2eaf31dc430638
+EntropyPredictionResistanceA.9 = f5e88247c1c69e8271ce33339d111a2c9df31af57c7d980b5621bd3a6ee27ea8
+AdditionalInputB.9 = a60b92719bcb7b76017024114310723f4e6aa173189cc2897b0d88e5d45b09d2
+EntropyPredictionResistanceB.9 = 2eb4fde056d362d45be9790dfc44cb84a7d0e85def13fbb7b4f4ae38ae4e08e7
+Output.9 = 2c36811d03339b415295654cdd67f52952ea7bb9e2e9c565dd8b2e967588dc28cb9ab1475bd038cd199814f7dd19f3d05483846624040445cf6fa9117face5b1
+Entropy.10 = 9e5999da32c25d85fffacfce5c22e171132854f95ba305cf130bb1e093f2dcc8
+Nonce.10 = b00142d7024349b4adde2cd5810b8a2a
+PersonalisationString.10 = 90ad37db25bc90a986464722bec63f8957eb70034c088f950e76128c4c0349b8
+AdditionalInputA.10 = 56e9e9948604d686744f959d33a445a96d59f073cd042f10cb8c68217cbf0009
+EntropyPredictionResistanceA.10 = b67cc952ff939c7945f0ef30b21c67b8b14cf89bed482118a2fb34932e4a38e6
+AdditionalInputB.10 = caeaeed194b564aeb39d4761f5ea8310177fa57643d86558df1ecf04f6e5358c
+EntropyPredictionResistanceB.10 = 4502a2be588310fbac5a73ac7186566c7134c88203becfb8c5e184dd5af0d9e6
+Output.10 = 315ab8fac850bcf48c84c43c8f799b17472e117c9f0a56cb6537c744363ba289a039a770a41daa6de1a62fc7056dee48c388adbd231ac30b8ad1abe87627f11c
+Entropy.11 = fd523283e46fd86d548443e6f89ec5fa3c7ceb1e13d699740ecdf52af95f3b49
+Nonce.11 = 23e5ee2e123226ccd2fe114a99f79d36
+PersonalisationString.11 = 5b6a95d1be7b38060423dd954aac514132d8236d570e2f01c0135250306b1b0b
+AdditionalInputA.11 = c5c9bc9b7fd57a97ec63e9b0446134d725db8c88542331a9edf8227dc4dac9f0
+EntropyPredictionResistanceA.11 = f9e08c6dc717841252a3d8a47df43f02db7d2785cdacb1692327ee57157560e2
+AdditionalInputB.11 = afa1c202f2abd3c52ca95f6ec026ae0eb165fa118dd3d4d6221ac8e9ccbc2ae1
+EntropyPredictionResistanceB.11 = 93123c9371d91537b87c4742b58288e76456e35ab4dd4fdb73f667607d4cbcda
+Output.11 = 566cec512d296bd10b46bf9ccc3d4084c4289ddae348bb780db06c0202151493da6322a57f629fc1547bb18a5a963bd1b706249b45ecf8409c944803def17fd0
+Entropy.12 = b9e128b0ec7449bc3a190929d9e8aeff3f1d4a7e8b77d1eaffa843d15e3fbc2a
+Nonce.12 = a61f8db789faffb6ae4f9db3b9e798b2
+PersonalisationString.12 = e662538d4825ef663233098bf71a5bdb9cd33c758879685cd6c55f874f1169c8
+AdditionalInputA.12 = 53345f1cc39f100ef67338d9937e1a81c3cc7ccc4db32a2d3810550c3f615e6e
+EntropyPredictionResistanceA.12 = ee7b2857517ed1808f022cbff0ed1448fe4e2ccf0273b9eb52db66fd307856ab
+AdditionalInputB.12 = a3331a84feaf8231376c811f2458d0adc02d09fe85f50e29072e58340598effb
+EntropyPredictionResistanceB.12 = d8c60cf14b009751d9725f549759accd00dda70109a91d560e83666c4d24bc0e
+Output.12 = 186f476c966e6d7b79e4649747c7b3d0b18ede2b265ccd0cb73bd59b7325ced0dce79da15099e23caa4d9f61e5f32f4018acc02667e9f2999f360146c4c1ec80
+Entropy.13 = 84629d28b30af43a8ce08e7a0146b252ec70cd1254f4e1a4af01b38f033ac529
+Nonce.13 = a4ae5a61b3b3b98e267d4d98a87c0cfb
+PersonalisationString.13 = 1dbedd953ed1065c72b87b1eb22c4e08516c6cef41bcbf23286125b224ef126e
+AdditionalInputA.13 = 11b3092653e448ad5af05d612492acf35d0abc90661fb0ae3e8ed91c7d87b9b6
+EntropyPredictionResistanceA.13 = 9dd936087354e2eacd92417c3f505c081baa7f6d77e171b62a27cd45f3ca9714
+AdditionalInputB.13 = e9b5f6631313ecb93eae1aeb83afd8f2cfd4a9e0c6a9ee45f79a37941be3795d
+EntropyPredictionResistanceB.13 = 21d71c3df38482f792d350ce984fc58bca81e41f598dc8dbc40abc53f715395d
+Output.13 = bc88aaf355d78261cf2b6e05785070a25238332ab32c1f28317ed96f87ca09e55b7dd5c81354f7a8b2a37a9c62230b942f51fba5a8832261925c93055d15de6e
+Entropy.14 = c5b7349ec863fa245ae7c4191f742f7e2fa45a9cd3cb7a5ab70b518504c89d4f
+Nonce.14 = 6e1f05401305c891bec265ed816c56dd
+PersonalisationString.14 = 84d41151847df4f6f2b32f9fb5bc9d24aea019bfff7533029c3f766acad1bb68
+AdditionalInputA.14 = 43bdb3daa2799d33ceedfac9ee6789f74b6661dffa64c3e030178fd04674a75d
+EntropyPredictionResistanceA.14 = 9089b578d1610fe072b069e833d93dc2c920d84efc5419649403366c664ae6e0
+AdditionalInputB.14 = 56f5816fa3dddcc08d146f09143a4a6a5258a35338c18fda8312dd4af9c987e7
+EntropyPredictionResistanceB.14 = 99029ea2c248013ad4a4053b895d4255aa505c5a1327c2f879022a4920717546
+Output.14 = 67f061fe0ae938e85f84fb41933832b29466809381bc8a99e6c2742b3256798ff435266f0573869fcfd0ba264a090423d50c96b86c54afd7269df261fa70ddb2
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 2c79fd403234adaa43b40d1c7ed739b7f83a56c131d88ca76258e4b6eede2bd7
+Nonce.0 = d27ee9946e0ab069def37ca66fdd1b48
+EntropyPredictionResistanceA.0 = 73f411adc91b85ed1ff7141b8797c9262d0cfc1cac3288713eede08e33200906
+EntropyPredictionResistanceB.0 = f96a72104887d35deed21a4d35449698a06a4035c89f44be28b2a7b66da8d397
+Output.0 = 4f6c6f163e76665b1fe5be08ccc40b07ea3691d38ba28bfbc8c3b094f2c4033ceaaf9e3351aed5d942816b3a70058442ac1e12cf96d053154cdca56960642cb0
+Entropy.1 = f722493d686eb5bf226fa86d7499622361e7e0b324037acab4ce97d8a14a66db
+Nonce.1 = be846dac7e25f1e6a82aed95f02bbe28
+EntropyPredictionResistanceA.1 = 291b266fdc668f8d1a927df21144b3ee55f871664e4b3d907f4dd190c7071e03
+EntropyPredictionResistanceB.1 = b285b4e700edbf00c13fea8d1307b617d0804b603490f5a8b62fb52bd6a5e4bd
+Output.1 = 9eb47ff771dfc6ade4ab2f2f57f3722219e3b592666435de3ebb2e5d14ee66fc3da12a57ff1521a5af41835b9d59a3952edbc98852ec4d2f9f8691526a62631c
+Entropy.2 = 8d567d4d78e90a30a86ed88657bf0b3f16aae4df8454480ae13222452e4d6cfe
+Nonce.2 = 16526eae5a7df065c785a7743eb6095a
+EntropyPredictionResistanceA.2 = 2066f384fbf8cee464fe2a6afde437bb1e6e3ea00ab2e7741196a7e6330a1a19
+EntropyPredictionResistanceB.2 = 8015e2b8b30435fb76b699cea64b6a7895dad45dbdfff6d670b47e71981fc6a9
+Output.2 = 1c2db9e6d79999f7bba3790eb5fc17a97ba13796cb3d1db1aa32040308018193b547f9c67fa30a09b586734cfafa2835e06493075d32cb959b3b2d0376a3a50c
+Entropy.3 = fd6eca11f578f635b812ae503a58f966f67b69e2b695d62cc4483e66d73004bd
+Nonce.3 = e4f5e5c3dd416706a946bc7a9e63c752
+EntropyPredictionResistanceA.3 = 5983ed65e9e408dcf6d42a1a5b0ab5211a8434fe4990401e3719df9251762010
+EntropyPredictionResistanceB.3 = 781c8661c0cf0d2393c6e55c35af1a387f6af349fe603b68aabbbe8ec9b7573c
+Output.3 = 2d3a3511221a794642b78bd76cf5a463bcd17d0dcc7168f20f75a5fc7f07a4d527cf8701d5c45bcd71f3ae3d1b1f983c7e2d3e986c72955db511f3b05a880808
+Entropy.4 = bac7c9e208ef28e1c51a39dd4f7f960848e6ec9b5f05664a0c825a3165d64bdc
+Nonce.4 = 2ad48fc6bf155934ef50c58a565f34e7
+EntropyPredictionResistanceA.4 = 124245d088097d413799b6d2a245bfc071857db1dc07d100494dee4f86f4eaf9
+EntropyPredictionResistanceB.4 = 67e4eefe427719d65a9841767cc2bf8efb69b8a8658300e6d7f2c80f6f0ed3ec
+Output.4 = bb54bd17d59ccf611996968a4ba25251cf842eaeb9c3f9f0318b5771dbd413f43ca646a0f52803d18872a72a005f7c4903044e4147b6903b5f1df81ce5593b24
+Entropy.5 = 2cc5a14488e2b1a6c3dc2b875e18ed9ad9d1b7d6d41919448f639a7509b65278
+Nonce.5 = 240cde41221c1a5b942d18cb524eb714
+EntropyPredictionResistanceA.5 = 8f88f6c79212df563390d4b733cfc02f20736d27cc4ad8e157362e00363e1c92
+EntropyPredictionResistanceB.5 = bdeb9e19acd2065239d363bcde702a1c4c0377b1488716501a2fda1511cab1ac
+Output.5 = 42afb40db472894528b9e97aefec04d3418a1f2478ea631f17441b197faad6a77267c25ea5194d7e1b997734b698d18cdfc395f8697e829852d9e6393c2c55f9
+Entropy.6 = 1f5cb7c2d05865c94d1d473961010ef40fa4d35692e7b46b46fba036b129ef1f
+Nonce.6 = 0d1d6142c10e3d9698333502402b7c08
+EntropyPredictionResistanceA.6 = 5942070a944b66a75197a5a69befb7063557f90cc67f9f6fe31153ac4506403b
+EntropyPredictionResistanceB.6 = a2f19445dbd3d337f4627ede5a27d069455c5dd9a71d273ae35c3948cc2b518c
+Output.6 = cac13b84f1f97454b4386ab4d87b3419310326b89ff64f93a8c5aa5978e03816ad7d491d9c4e1ccc7705a1728837372e7be6d9a74e1ca63da4f0a85636c16fd6
+Entropy.7 = d7084e6923284fa196e441cf75b40e50f2c0fe4ede600b31180e3ee8cdfe982e
+Nonce.7 = 26193c3eed592464d87c6360c4d602e0
+EntropyPredictionResistanceA.7 = f2904ff4f0029360752686f9b69ea696ebcc5cb2cad479a67312da31b93d183f
+EntropyPredictionResistanceB.7 = 39c56b79d40bf025b7d8a306b971eecf3c2722d567f18fef641e7b4a1fa4cffa
+Output.7 = 0ba93d051ab593264331d89dd917d014add1402fa883962581f26ad6e7a22fec6ae4dba9293507ae68d02ab5ef3e91660cc4944e8387e05c117e72da1ec03e2f
+Entropy.8 = 716e019850e8b165cf1179640aa53e11444e791112b2a90f71c54973d5b3e101
+Nonce.8 = 83c8ab398d263d73addb87540edcf570
+EntropyPredictionResistanceA.8 = 6787b4d87d97ace35a926ff2f042c3116ca66755784f8d30bf0daf126e2713cb
+EntropyPredictionResistanceB.8 = f39d11aa6489123ef74782e21f7316a49e30e72943172a02fb75ada3bb8e27b4
+Output.8 = a8e7b83c29505871d4ee4fcd21c975696df4ddfb4e9461152e142d311eaa92c4b0ba53b1f6ac7160e6f10f2d0cc8e67d76b0d3218926101fd6612bd76e4ba3ee
+Entropy.9 = b042dfad33cdd79491602332d65d3dbe3244ac739dbec763c7dd6b85e596d78a
+Nonce.9 = 8c563c6121848f1e1a2454976b9d3dad
+EntropyPredictionResistanceA.9 = 21d6826c08053848f8f79ad32579e137bf42379d27f129c57dfe68c4aedc82ae
+EntropyPredictionResistanceB.9 = aca42dd166d909a5238c430f00331b74251bfc20d3875536a3f587c411994304
+Output.9 = 9594e062ccfe43a5cbea556bb879b78fe1725ba1cbcc0d753997097e9305e679b29339f28111e4c137c9e6138eddb7943a4f146c9733a060eba0979b049aab70
+Entropy.10 = 884ace7e1480182cb44de61f148eb1d1689c0239502f6c6c5cf36ba33a704a5a
+Nonce.10 = e87b3b0f5d0bdaa2426b93dd8f436a02
+EntropyPredictionResistanceA.10 = ee4f976d9c5fd7f4b140326a1b30cff26b33dda34cbe74467895750a6b2a822e
+EntropyPredictionResistanceB.10 = 6e5c6d10f499bc5dde081f895d17553ab3732d6495fa9c9a754efa1761472da2
+Output.10 = 568ff9ddec1f0a7a8857a5beefa2fa543c422ad21cc3d840479422890f868465191d86a61670c5e71b603be1cabb88ef54c5c2e4caf4f0dcaeae56d183f84461
+Entropy.11 = a6f608d86ec7d91052303ed0ba480a76e7ca2296193b2767d39916f6460b5e76
+Nonce.11 = 024534fce0d398f8aa1f2e8cef690560
+EntropyPredictionResistanceA.11 = 3b256ed3bfddc3ad92dcb0b6d5184e9baf267d50ce9b26f309592658c5d22c79
+EntropyPredictionResistanceB.11 = 434fb5a628e917709c420b2bd4bac35f44f7b4d8abccc763a49a318991beb8cd
+Output.11 = 1c6ad9d8294a45b8847c866a9c44602e018e5d474e503db8e8ec3d95db9e93ad1917228f170037be93702e906b4af36b8bc7fc8b9f251e48682c50101cb1c511
+Entropy.12 = 3a6afa1bf6746d0db361bf5dae974af81e0e54dea2dd3bba8b20069a5344c8e7
+Nonce.12 = be770b944e2321352993ae6d29e6fa3c
+EntropyPredictionResistanceA.12 = 6da60c7448b02bc4d8e22a69c9b74afcaccc43f318c51e53ed9fe1f3ca04e2a5
+EntropyPredictionResistanceB.12 = f7462f1e716e616137498076464727b71c9685102f458e7587b6a8680df7c7e8
+Output.12 = 3b833e5060cebe4b01f46648ca296c35ed6a6196b2e7d10ead88e979ce8cd00daec3fe788ecf4ed24e25f1b04373191c550a25442ac54c9e309094063b966ab3
+Entropy.13 = bf1da680a64d30e1924f53067423f3f4648e4d62d0ab8052d69c8240455fec57
+Nonce.13 = 68b188745c7dcb946e220249a4a02b84
+EntropyPredictionResistanceA.13 = c460229e1c2b733e5b0b04758baaefd82b92a953146bcdfbfa8c1c76418afbd5
+EntropyPredictionResistanceB.13 = 3fcf43ba5b0c4709891abd940525e3a6e751a5d72f2ee3d6c537aba749da438c
+Output.13 = 4680be1518895ec00258a877dbeca741341409984f7349992eef6c2ab436e00eecc13ccb65a1cb2bf4e07ee67080029f42b228e6efa0a7423ddeaa5ddf2807fb
+Entropy.14 = 2a298803212486eabd8d364dc62e8c051714a744900ea1feb157fd7a63c26a17
+Nonce.14 = ba8fabb4b78fd18866210cb5235dbfda
+EntropyPredictionResistanceA.14 = ea6eec8f32b440be68b3b02371fcbe1e6fdfe6d35a9f867ac5aab297d4263100
+EntropyPredictionResistanceB.14 = a79086f939b93a8abba04d7416d4d62d37f3079d2ecb1af923f4f814dd57237c
+Output.14 = 77f4daf25c9740fc3c66803357842bb74bbab911e78187953db67fef93fecd28280dcb21f75063e3e889228c0e65878493a39e1cea9561fb015fbe44ad85b261
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 4e070b3face097f997d0d0ebd4513cdd663d2c214973d1d469a1d18fcd237239
+Nonce.0 = f51bd6bc3a10f1065c67167380159cf5
+AdditionalInputA.0 = 75c07045b2d96aa123d657c0894768b7e5f9b405bf2cdeeaa620fd1b5c52f02f
+EntropyPredictionResistanceA.0 = d3beab1044eae28c3c72eaeee5f0dac4b81e70c0a5884e940def6d9bca092e18
+AdditionalInputB.0 = 5cfbec3db9297ec56ba3d43b4137b9c785371c3ca4e9d84c170290822cc03a52
+EntropyPredictionResistanceB.0 = b619d7946d9d9126328fab959e60bbbc78ff27a701d998441a60dc59c39de602
+Output.0 = b4c8eef198c4ee1b0ddee161d037317046c05c0951223f8a03e23cc04404fe9dec089cb61d1fb286f775b2b92c514f2ef21afd285f15a9b7621ded0e6c1bffb6
+Entropy.1 = 51e9e0035acbf483750b9fbdf2e3555c07c07bc8fb5daeca91f0f8a1b17f0139
+Nonce.1 = abd373a5cf3c21e692ef8139c0cd42b3
+AdditionalInputA.1 = cd1f824bd38d70caa560e1b40fd086c107a35b503cdb16d9915bc5af85296e21
+EntropyPredictionResistanceA.1 = bf53301f804913be3dfc6e04109ad90eb9a962a29228e58bca12e1339af2f6ea
+AdditionalInputB.1 = a516b31d2d712ff7c7b4417762651ead787a49e625c9c195a5522b8d2eaf8c77
+EntropyPredictionResistanceB.1 = 753dc15a9e007ef75583d830deb66c3ed67ef7e8857fe19eea15a30947ec1c5f
+Output.1 = 98234d6ee8ec6e027310e9493114ce3c118b37b7ff52e82351d515cfa11e1f4f4dc20fe35bed87e4221223cfae97b56fe4f9a9bc7b1e33ca863a71898a705a0f
+Entropy.2 = 52f0c7d3375796087539b0b05ca1d114ada64d6e423dbca9e97e1dc28a7f0ba2
+Nonce.2 = 4ef3ac8f75725ebe25352853774058fc
+AdditionalInputA.2 = fe061366faa50444321d305329bb6f402a373d156988d509adc3896645ba03f3
+EntropyPredictionResistanceA.2 = f70275200f74b99ba4ae7ad5d2b12e8a70481a8ad52437fa6526d0d1c3f2211a
+AdditionalInputB.2 = caad688ba67b63d9da829ed84974f5ec0921b5ec5955534f0b9bffcead9c34de
+EntropyPredictionResistanceB.2 = d8c385685be13c47dcbc1555670fb383f9eaeb033e390b38846f4ccd77f4ec9c
+Output.2 = d62522892af53a57bb2d70f61cc4357d85935f234a42f988c51df4f0299d42f400a8d211ae98cbdb92bc3b3d5ce56ef8628fa20e2584f4811e3002fefa497c86
+Entropy.3 = 8cdc9bd99e2e85208614d4473acc51899ebb2d4d8c3bc2be974f121e012c06d3
+Nonce.3 = 5dfd4a5d66aed54067cf1c4f7441d53e
+AdditionalInputA.3 = 10ef1542723d99797772e9bbc49d6a4b533b55fde82b8f0067631661d305a04e
+EntropyPredictionResistanceA.3 = 670b1e22ea4d5501a4a9fde4ce765eec72d20902132ac857c3b6e7343fe96917
+AdditionalInputB.3 = c845c1d3e427594c48f0a3a9747f74660766b8fa9ce6e14ed5ec941ca05476ef
+EntropyPredictionResistanceB.3 = d35a3a620135d247ce059e42a4313e3355238042de1f7d3d13ac365147ae4046
+Output.3 = 27a25b875392f50faff401f370c50bdbab97d20d9417ecddf091a13c80546655899b5ce704839f0bb873df6665e68b02b7d64e7ca6dbb1d6ac52a17aefcd8828
+Entropy.4 = 99f62409471ba11b8b580c8bfb285a0fa4ad2ea0aa6d7e85a4dd1efb5ba16295
+Nonce.4 = 221c0bf12083ddb9a0e94abd888621ad
+AdditionalInputA.4 = f2fef7867d85c88f1980200d42cfe46593c70fc884f47d9c82c77e2795bcbbe6
+EntropyPredictionResistanceA.4 = c26b822ecdcdbb0de82a0230e1fdc27e9bac45b7b168f84bf45106b32b1497b3
+AdditionalInputB.4 = 19534ca0c24df89a4829a98629c8d6302a34c79ff5414d56b5262efe947b6dfd
+EntropyPredictionResistanceB.4 = b22c9fcb28273ffa5badd819f8db22e7caec78941d58acada13eb8d1fc11d0e2
+Output.4 = bb6d3a40ce87a8a36c08b42f1dedf02b799ed096588ddc55436adc8e1ff8254ae2b30c7fe1eb335ebed9f46477918e7e15c42a8348327e1ef825590c10b5665d
+Entropy.5 = e1e928031b604579a82115555c4e664f5077daba5b658fc3de0eb001ed2e357d
+Nonce.5 = abf2563df03a253273e4170c21db7afb
+AdditionalInputA.5 = 81008eef04686a882a6e895d2beaad0af7fd906dd02bd910b50951c651515ff1
+EntropyPredictionResistanceA.5 = 1298906c23fd1032124e6cee3c9f1b6f44dafde3064fa0993f5cf59655c9751c
+AdditionalInputB.5 = fbb8cee0c7bb23ba35211e4de99fc7d4e0acc122dcf05e657a337f3c99c33758
+EntropyPredictionResistanceB.5 = 1adf9a7efb6e2da2fd0cff19d622b4b5cced2d982b3859e474dae8519da23762
+Output.5 = e59955dd629180fcea950b6dbc20aeced7aba54b06549c56a3aec4c98bdf06bfd303b10754fd0b61d5e40204d9fb9e5e3dd534e28d683fe061d1bc3ddac804cf
+Entropy.6 = 8b14d0e42d712d4b4b77a96d6293ffed15b0b9b4831a676aac235a2564cd3300
+Nonce.6 = e04420665bd568140be7f2154897f535
+AdditionalInputA.6 = 36b963c4c7340903b0c7551dcb2197c493bcb65893afa338284f74e7aed9d630
+EntropyPredictionResistanceA.6 = 5fda24ffd2953ce24734d130f9059aea83249ce0f46bf72ad3adf972f9862f3a
+AdditionalInputB.6 = 2ae250422649ac67dc559a41fa188a4e313b4a028e909fcfdcc0e3d9de5c9ae8
+EntropyPredictionResistanceB.6 = e61ca71b4b2449a6d5b15fc28f5633cf48539237083d53a25e597f7b55de65f0
+Output.6 = c8990dda05bbb7bdb82bf6ca89c701445e9b944c7985921a18c090099791e3aea45f9f843c3c9a28f57c218e0423df2a603810e9c2576e1be503ef027aaf5d20
+Entropy.7 = e18e5e0fbd42d2c6af7790822c6dbf5a492e5263b14225be31e3855b95e1b708
+Nonce.7 = ab75e9fcf33bb151ca6e22cf13788499
+AdditionalInputA.7 = 455a9be04dcd77803eb3ec3ae55acf0919165161cb3814f76ff67f48bb516cc8
+EntropyPredictionResistanceA.7 = b9584c80245603af8704612de24efb481629b497735659d300a831a459795727
+AdditionalInputB.7 = c1efe0c501b5fcf24d2e9f0216d79bf963703c439c417d0f4014fad5dca8ee6d
+EntropyPredictionResistanceB.7 = 5f6ca9d8359d4d1d045042d1bbf96ef8c2c83325040b79c66a3daaf781fdeabe
+Output.7 = 02b603cb68390c94591a0074e50c32c75a40982d9d92f8501b200559d14fbb036e10dfe3aa06c34a42fb5197e7a344c04cbf1ce72b69de01d970824a3ca05d03
+Entropy.8 = 6002641066d949868b63b15e201b3f89969a27f2dbc6dbcf0a7d98c4666ef7cf
+Nonce.8 = e6b5488da0a90d41a3c2bf912934e7f6
+AdditionalInputA.8 = 1169cc97fd71b3a821a6059e374b4b966a857c28449a33ae265bbb50b3cd92b9
+EntropyPredictionResistanceA.8 = 955d24bf4d1927e295756e495db94998d2fb89eccb9d8b965ff8e3f9cec2b962
+AdditionalInputB.8 = abecfd41bc3b679b25a9831314b33026d62309b5b413c6b53f54985ecf7ffa55
+EntropyPredictionResistanceB.8 = 4321c414daf7b16d1c7da72f58256271561e13a4b2325dcbdb91274f65960ecb
+Output.8 = 515e6895f54696e7219e29d536da24a18054f429a673ebfb9e30c1de7f035b485f591f73648cdeebd889164e80369dae8d9ebfb776e3a57ed6d586587a0f7243
+Entropy.9 = a4543e2cb2aaa8ce947267bcbd7a4d5071a80729ad86883d5457e39dbca72d3e
+Nonce.9 = f54763d13476fc49393d23bc25c79d19
+AdditionalInputA.9 = e69269530febb9efef4055be7feeaf52afe2e55dd8b616d5262c86f37aefaccd
+EntropyPredictionResistanceA.9 = 3d22bc6b2dc59186b724fb1b37fecb3bd38c49f7bda5bd01f1c87d286ce28bee
+AdditionalInputB.9 = 688f4737ba45170784d3e0c0ee9820b53807af6647959dbe39404e074b54e176
+EntropyPredictionResistanceB.9 = 1d46113d77a6641fb1e7bfad8d4568bf4cf991ce39e558d1d9b6a0439e231234
+Output.9 = e61f548b053a3035faa8f0ccf8a3c42a67fe89dca04f9abc6e31d2c5ad85b685d831fab06b752eada3776d1f3b714521c2e00bde1850e15878513a9d502c0eda
+Entropy.10 = 27f26211f98bf227e0a1cf1b0e888f9b442a4864d337b234d4f947dee73a3127
+Nonce.10 = ca2a52170f82b9449b652172c26e9d26
+AdditionalInputA.10 = b743cb789be94bc6bcbd44faf52e0fccfcfd58c57bc6a1547eac4098f3dbf189
+EntropyPredictionResistanceA.10 = 5b782412d1e4336accff107860dca2a5d9c80f1e15bccbe7bcbd80172fd9d26c
+AdditionalInputB.10 = 7a74b54bef590d6d3a54353544c695e0072fdfa5667ff76b69f284ebde056d5e
+EntropyPredictionResistanceB.10 = 0d4858120eb44fd908f9762fe7306d5269cca304f744cee392ebbf1500106d86
+Output.10 = 4ef8c36ea74a567a59cd841f315091798de491ce0a0966b34ddeb38bc0e1a928c11e85cf135d3096d2cc61ddb04254a64b373fbc6c432a88a2b9f5c7893855a5
+Entropy.11 = 599c6b738e1f97d4c8dbf8ab76bbf6ab0425afbbe2a3d9feecc4b1b03b70e585
+Nonce.11 = b900889f583c25da9e524fc865792847
+AdditionalInputA.11 = 4ca8a78c10f52565accfe9d81eac034c82fca94a202643638c77b37b660a25a9
+EntropyPredictionResistanceA.11 = b381baa21aaccd1ebb8ea0cd337b0606d5098f35c806a7d91ade94dbd6afd716
+AdditionalInputB.11 = 07ceb0ae35cb059348f443a0ef1a5d3402a290b6f5c93b9346d45fd677591f80
+EntropyPredictionResistanceB.11 = b16ae7a515ece2568e2ed5e428b9abd09ed1aa1cf51c08491514d68c869dbbd6
+Output.11 = ce3f0ae624627d0b8e26cdcb6e599f111ad4fee1dd14a9e6923c5765fa71ced55f8206c4bdf7cb37f3da11f07c616503338c0c8667edf6df2fb17fc75fadf7b3
+Entropy.12 = 2b159ef319f9ccd3a8985c9d327fa8803933f40e050dcf6a28ebf421a72c4636
+Nonce.12 = 34125e45f16b507ca362fd6feae88fd8
+AdditionalInputA.12 = 7c7c5dce2d4258755184cc6c509eae2941f8b9b322afd6b97ccb12d9de8d0cf9
+EntropyPredictionResistanceA.12 = 274a3e2c5e6642ee4341c2aa0443a0ed774863ed49d522964a2145e999f8a1bc
+AdditionalInputB.12 = a6e77890982dd0b74e98ebdc702bb612a82db24c11273b2564607e96eb688f33
+EntropyPredictionResistanceB.12 = 7f9839bc7ffc59b680c2cdc92d368994562a66e26fe567169c71487016341bf3
+Output.12 = e19341111bb10c29743e48a7f144c1cdd6a214a77c4bb4c631b88f075cb6df0036b00a0d592b8adbc26b88444c8027d0f68dc80182150538c7018af4a4efeb09
+Entropy.13 = 1ea8fc3a493cf65b07f733c76bf7642979d538f7e7ef44373ff1ef0555fc1b9e
+Nonce.13 = d8510872a069a2fd0162e0729c27344c
+AdditionalInputA.13 = 0f31b0356f34a449a0174bc62b7dee5fbed1ec7695e8425d65876d27fe67b65b
+EntropyPredictionResistanceA.13 = 828b2f9ecda572f66402889d106cc3699a805dc41627a2ef525edf10ff539f9c
+AdditionalInputB.13 = 352465e3d4bb4c14d3b862bde43465ee88f197294bf7be7822aa56dbbaef6656
+EntropyPredictionResistanceB.13 = 253dd6f6922f3686fe2471af076a439bb9bade05fb72c64e00c45a038ad0beb0
+Output.13 = d7457bc305fa40846d3e94299adbb7e339cd9490abdf8aec1a0349492bfeccee5ee4d8203faeb00caa2dce0a616ea31a6353eeb707c476f3e0a5847ff4014604
+Entropy.14 = 8f2115ea7e253d68a020b7d1b29e2e89a949ff14bfa33db9ea7397bc1005137a
+Nonce.14 = f0fde3bec82a7ad489fd14806139dc08
+AdditionalInputA.14 = 72ce1eff59f0d6c5d1af104087a5caf1c96f0d3eddae972051ec8847127efb2a
+EntropyPredictionResistanceA.14 = 29de7b63d421ab699220c828c723dfccc9f2a37ad1e1974003f600c49a3998ca
+AdditionalInputB.14 = 3d8c81ed4821a2ddfe58860fa7529d7786e6389845a37f0476f12078b4730ed6
+EntropyPredictionResistanceB.14 = 2ce776cc1ba02af91c6c4fa10bd0412b981f2d781a33de7e4ed344acca32fdae
+Output.14 = 18fec58f3a5d463386c89bb9dcb9bec44f88fe42e7ea829be91a92dc6ad9efc78eb0e0fa88b8b690d8ef8af0e79dff7685752bab9a3d55ecbdc64135c1fe4083
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = b7c1d9eef98d53703137b4d91e86c58d5b791dc1975ba5c2080a28dd2ddb2ae8
+Nonce.0 = 05a9dda0628870aaa526de695d1cd363
+PersonalisationString.0 = 0b27f080563c260cf74cc8982766985e1e3fd4d6044581df83ecb08d7c4db926
+EntropyPredictionResistanceA.0 = d37a867100b511d3063c5dad39f3b821a0fe9ecb1cd764cac2f53ab3ea3c664b
+EntropyPredictionResistanceB.0 = fd8fbd84fb77e0d46fa4c5247fa4fcc3f2358a6f17d17c9509fd814dec1206c6
+Output.0 = f66405f9a87bae5ea649368a830ac7f00a722390098cace85d38194770af3ac832f433f816f5cd44819cc9d8d3d24e2a7a3220ea899b38e75ede627290361093
+Entropy.1 = 530f7c81e50f1c22c94a2640ae04d969c1aa1c2d53a65fc8abf59f542f9902cf
+Nonce.1 = 40acc4001595e6b9de7b02621c61501b
+PersonalisationString.1 = a92038263c9e3551377d985e75f272320d1cb0dc43a7b746b3ab80a80c523bf2
+EntropyPredictionResistanceA.1 = da8ad3805bc5f5bb554d83bc22f925efd2e0d0246f5314785a682d3b9b859b1b
+EntropyPredictionResistanceB.1 = c79216a70fa6bd8256822d7539568c73ca80c8f6bc442bcfedcd2592efb0e14a
+Output.1 = 88413f63259083a53b8327fb725876d626609555d936d47f8cc6cc54cb8a81dff6ee9e99c142e2edb6a647f5e028b9622ff3ca3e5896bd6e679f46ed77307178
+Entropy.2 = d7ba7813f5285bad22a1d0a03442977b44b92dfcc785815c31e00423eaee2823
+Nonce.2 = 1aa30ae56ab7a4ed92297a00de8c4e34
+PersonalisationString.2 = 49db7d1af79033eb0766420256710ab8ff4e05505465b777851ae54939317927
+EntropyPredictionResistanceA.2 = dac01cb5bc0dff753588b8c9f1a7b9c6b7830dcb2af521365ecd9dfb213792b7
+EntropyPredictionResistanceB.2 = b9187871cab77db227aaf5a237e643923a02b4b7acab4d0b14046cca440f879a
+Output.2 = ab71e553f0ec957912b88259a6d4862ede1cff0f130050ae8ad7a0ee3795ef7644eb27e14d09113c9a2580c60e98687d810644faf9a6d699c7ba645d75185a40
+Entropy.3 = 14db6e94fec57336c2c9d741242ffa603c1103d3bee9a5c1f6571554700509f1
+Nonce.3 = 756b03696663b0aa0a7491fc6d2696e2
+PersonalisationString.3 = 444226b60dbd85b49b385eccb5cdcac242075e058703b94e983f9457d4ac0bdb
+EntropyPredictionResistanceA.3 = e62371b955d0d098854468e931bca22e5a226aad2ced516fe7fadb6d2358ce15
+EntropyPredictionResistanceB.3 = 3d46e73300e67ba1588e3ca14785dc139ef66c14ce209daad05433c89004da4f
+Output.3 = c906db2d0246aecdf4844083c4fcfbce6d7cd4d251208aebe92252b7bb7b24b58ca73ea9381f4835483be015065a2023b1e385248b7fd7243ff9bd7788357bb5
+Entropy.4 = 98799803b55c55c8c347c6bd542ea9174b36f5c47f8eaaf60367b22021a6d09a
+Nonce.4 = 47ce2c85f9660c14451209d01944f35b
+PersonalisationString.4 = abadd6a88b62939cbb4630cf8d85e5ee3ba3a98caffbf75c1e7592d2672a9830
+EntropyPredictionResistanceA.4 = ab5a55e7de98b642ef4c5916d2e9d94ae6e02c1051d1670d725bd09bf20a9435
+EntropyPredictionResistanceB.4 = 1dd91ae2b5ab1fc5a7403d0933f7f6d520c0194fdde669dc6bb08339c386f9b7
+Output.4 = 17f29bdc3f9b6dd1fbdcff6879fa2d2b7b94d9b44bd37a844189d060f27454e47b2c20dd71216d0040b586ea9c7410dc6825033e588e9abd8193dda1b5be1cea
+Entropy.5 = 9fd5ea40020ae56c10163d17c9c19545f50fff9df6f7aaaf6a7d408e3ff9ba11
+Nonce.5 = accd67c4804ce711c973d81a721a5097
+PersonalisationString.5 = b01714c673ad95aa987a9fdbb654cd86755101b3d28166f2f6f865ce9d8c3baa
+EntropyPredictionResistanceA.5 = 10e992f7297ff8fbe1a22b02564a8c9b02b9b1c910b7d18f9ec54a031cba1e73
+EntropyPredictionResistanceB.5 = ee2a73e504e1f4d3a11e8255ca55441e0278509ac1e32d63d1c2fff3de6aaa6b
+Output.5 = 2951274bc07556bb4eaee94e0514ef0e17765dbedc8b3046cf740acebc0ac5a7cba6e372812d04e6f13ce5f7b47198787a295349bc8708b0a6c179170d05e013
+Entropy.6 = 766bf3085f1ba754de234bb88c57315e5f29e71c0c999845b5f10be69b9f0659
+Nonce.6 = 1235f4887973b16f01bfcf33a7cd67a2
+PersonalisationString.6 = 8e1713db791228f9d01432e7075a23f67bd1ec748b633240de83d1f75cee1a71
+EntropyPredictionResistanceA.6 = 2ae7e89e2f67bae285bbd4ff4a5ac92a0f186908d06d322a938654dddee8b746
+EntropyPredictionResistanceB.6 = 87818ef3d20d0512a57b929ce89bf82703c0ab62d4a5a4e5f9bb48e09597cd57
+Output.6 = b82ccdda396b1a1b21c258f0be9c0f5c275471df8860c368b4ac7926c980d499739fc6978ae075448c387e22ac35fb0fbd77787bc1bc875cfbc5fb1fc061ae5c
+Entropy.7 = 994b002b6277844f34950955ffb08808d19ae8df8a12efeae9db41456c24112f
+Nonce.7 = 8a312189fd86a4eaeb5656aa5ea7e201
+PersonalisationString.7 = e1e8a86f3f2371770c92b000200aba29ae275212773e4e8f3d512c905a2c0086
+EntropyPredictionResistanceA.7 = 435017734659bdaf6a0fd7d6a3bd98fa2aa278f8cab8eff08c332ee2e6ce80b3
+EntropyPredictionResistanceB.7 = 6b79acd4d39b39f07a70e6fdbbed8ce0915020a4d67d90cdc543b162a422730c
+Output.7 = d1fe64ffe102109645d6dd39ed3bc18c3dde808781c026a07e80d374bd7b32c4e0bb60b83b75a25aef6862b5baba89d9bea9e352b967d1b75507d7e622cebeff
+Entropy.8 = a5652fb8ee7024d11b0a6e0ae7020136d599c4eb7d919f46d8267bddff447f50
+Nonce.8 = 802c4351c182e2ffbd187d6f16c32208
+PersonalisationString.8 = 9511f2be02420d383bbd5440a62063add51732cd0b90104b3002324a497594b2
+EntropyPredictionResistanceA.8 = 9091a50ec63df7a0f039f4c790537e3d6e2969720ff26ba59c5e3881139f05e0
+EntropyPredictionResistanceB.8 = 77ce1356c5048232ba43914e51dcab7697c8da564ea3ef381f013d3f18937479
+Output.8 = 6f44b4577428a3f1e41956d11aaa8be893d6f9727854c174c06950b65b844bd943d2d9f30a0eefb86ee06c0875dc9c69cdc58b9ca2f34f2b14954b1416c5776f
+Entropy.9 = c1df593902aebc433e692cad37fe511809ed033dcaa000881b74b5c10ecd0faa
+Nonce.9 = 0d2cfd3b209033dfda1ce589f3e03f13
+PersonalisationString.9 = e25330e22e924070efef21a7b9d4ec649d1125f518c563fb8f8eff6eaee8f7a9
+EntropyPredictionResistanceA.9 = ee6d428730f5f24a5699757dc0254e259883fa2e121eb2b144f2d6f747bebf5b
+EntropyPredictionResistanceB.9 = 1224f0bc30490bf64cb6ef62231099735fe801e32789584d9f403d9c9da3a054
+Output.9 = 24e63c38d0fe5bc1cb19b2a972146e12d4eb0b8046cb66ab6ebf9104a5e8d46fed43432277e8e2c70b980897dd58da0fc51810431fc755ca7d7f8392f6173147
+Entropy.10 = fab2d1eeeab38af6bad6ef87eae37af9145af4e84a638556f98fdb28221e334d
+Nonce.10 = fad5726170c7f649d9cd15138fe2be77
+PersonalisationString.10 = c5176ec4d697f2d267005186b3c00addae1d09e9114145ecb72a78a1b085373f
+EntropyPredictionResistanceA.10 = d888428d581e146af6cd0afff5c9fa5d9823e5f800429e68697cdbb74b7b8bab
+EntropyPredictionResistanceB.10 = c5ee396bc476a75a2e6850e4aead69bf99a3b375266936aae0f3924203a497b3
+Output.10 = 54d01c4c0e3bd9b0b3513a0c6e3e732eedfd3136e0ef7f23a0884b3f5d8d2253bd6b95b0fd806ecf3e432806ac1426e670f77d16eda2858ef6e9cf7753af06fd
+Entropy.11 = e968e9cd6362ef4e7d9d4019f354bb891d6c6dcaad1064caaa7337b8651c6dc6
+Nonce.11 = 6777f1e218a10f02ef407570e29fb1a8
+PersonalisationString.11 = ad4d1ee50e3672b3adf8cb74ed8a2f1c58e8a4229290762762e588e7e352e58f
+EntropyPredictionResistanceA.11 = add3319249bf7af367426fb2dd144d4d05d088db55c067286450dda22a3955f9
+EntropyPredictionResistanceB.11 = 702c69eb0605e47482833aff3cd9e14e4938bacdd3199994337e5944f0dde5bd
+Output.11 = b7098990634f252b6cf9738668f3abb4378ba377143ccc28699464508d36dbe55ee2e7a920caca255b8bccba08b2454b67d474af96210e90682111c595e7fc85
+Entropy.12 = e910ec3326f50759c01a1ba348daa0e16ecc0217f77206eb640c4a561a9bc87d
+Nonce.12 = fb51179a224ef3288801fb0edc12e3a3
+PersonalisationString.12 = d5613a222498ac9567bab5b46faf5c9be2faf8edeab33f28ca4ebf6761493c2c
+EntropyPredictionResistanceA.12 = c633e093ea74b65d9fddb65f746c2f12292e86464f2d7193928683928aa48fb3
+EntropyPredictionResistanceB.12 = 3560f09aba4eec1332efd4ab021d5ab88b951e7715e53f151273aabd5ac8c192
+Output.12 = bcc005e98a0e1b8d811f817033e5a2bbad3d418d9aa4ec84d49bd315b1f8921fad9fe8b07422e6db3829b84ed080475a984bc5c253543d8dabbb4aa73ff37d36
+Entropy.13 = a20b75f74840b2a2faa08d542e63b7ab0d820d88edd8568cf5e615a9a433e9e0
+Nonce.13 = f054fa2b0c7ba91f42eaa287606b5a3d
+PersonalisationString.13 = 3042080b6846430874707bf7bd6463cf2d4c8973a98dacf6ec4455ab4c51ccd2
+EntropyPredictionResistanceA.13 = 38694e2e4b50f34fe6257408c9c91ca2e63da45a31b7561a2b9c2dffc943008d
+EntropyPredictionResistanceB.13 = c6eafce776615b6af4178072642cd1a48373845e406851f3529ea9ba6bc14f8f
+Output.13 = b9c94f3a98a2f0a091b55c9dab9be6605d64f940cd1d8b655ee3129ebadea34730ff439177f70f66b2ab29d95cf63134d55cd5370bcd0d74b35fc38d365a027e
+Entropy.14 = e3966884a88b311569c5cf3d04bef0aa65e6117fcd0516f70b8fd10924336985
+Nonce.14 = 47de1772ddbad070b3e358fe49bfcb3f
+PersonalisationString.14 = e8d89960c029e74d187011f560ec8a9718eabbde7626cd313fafacc19f37a2fd
+EntropyPredictionResistanceA.14 = 5730f75d4d58af98ca3c5a474aadf0683690b55b71be5e6b754bf60ec6806a0b
+EntropyPredictionResistanceB.14 = e2489950fbfde777564c2cc8d7f97ccc51906c5d1d39a5e4a6bd06125669c9b4
+Output.14 = 82f78f8c9a369590aa2a6120b20b256ebb4233f34b7f0881aa7ba69ada8fcbf4c473fbf24d801fdeb33154c0eccc650a0a411d2ba2fb32e834e3518f4320a307
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 12b008a9fbac31aaa8d046b150df9118a95b000b69cac21da4da499d1bd2ffb7
+Nonce.0 = 82d9b3979a99de7bc17e3879038794da
+PersonalisationString.0 = fcbfbd88c4b8651388e5c586cf5ab8620d547f436b97c993460fa5ac991637f1
+AdditionalInputA.0 = e56a9a3b4522884bc9b6497683732163e3141cf0f9d4a08d864fbd72dc36116f
+EntropyPredictionResistanceA.0 = 88acf881665c994595ee6539c5661f820eefbaf307e48c5852660552b79d419c
+AdditionalInputB.0 = 8967591427fba174e18a2cfffb2be1f489c85a13091bdfba81f082ddbec36897
+EntropyPredictionResistanceB.0 = 8a47665e4850d489c40bac6e5941d216f1801f67eb3abd59a623ccbd5f151246
+Output.0 = 3ea6b90138e765572f59b33542790d4cd45c68a4f7e392cfb3f4faefd4ce0d3204480284190b35d92f96c0b03581bfc1079e7ba97692bf9c7e2e0e863bee773e
+Entropy.1 = 160627a0afc7d5fb08e36d38b4cf88fa81f3704b10f77dea98e807b39a077c07
+Nonce.1 = 6498b51a48c85060c2069e613e647857
+PersonalisationString.1 = f67609ed7d74e8c22fe18f74d449cb8d24d1bad73064b7c514847d9ad6d6bc01
+AdditionalInputA.1 = 1f420bc5baa3ea36b7b828333f6e0b9553124d49c4512439840022ba894358ae
+EntropyPredictionResistanceA.1 = 0a423cde164b9a4f8cf8568662c553504346f01cd56f3660fd7fbc64a73e05d7
+AdditionalInputB.1 = cbbfdad4635cb53340a275008ca8af24d1982d590a65474ff2bceed8c8d165e1
+EntropyPredictionResistanceB.1 = baed1a2a85a3451e5073de03c99858c7b52624d699af35ea80dd74ef935a6ba3
+Output.1 = a220b6daf3b6c9c2415775d56bbe6477da2c79d0bfd04e2c89c7e5e3e900fa3ae438b5780d8dda95f722f9cfbf5f6e0a68d4fea7075d11da55133e35156bc94f
+Entropy.2 = 0137cd0fcd80caba70961858c56da437a5c6e3f1379ba63b76f86184bbbc3c5b
+Nonce.2 = 6c9265a3fa8da42f2dd63374dd3bf42a
+PersonalisationString.2 = e25c935a9706d416d85fe02366df5c7d8af77bc4f7dda97b739ee168dedc518a
+AdditionalInputA.2 = d14169593ce1b37c91596d027b55e0e9c5a6f6667bf62b42ab4ac24680b1eab4
+EntropyPredictionResistanceA.2 = a6be426a2b228340fd4fb1d57b228a600deb8d82bfe31756ae9262e9e99aaa73
+AdditionalInputB.2 = 0311b0ad7cc70d7845eebeed33fe89243f6176ed88e7e9cb7b4bd92765419b4c
+EntropyPredictionResistanceB.2 = 86f52b6147587e6fc38c42d5faf761eb6509ebb1071706ae0d088882c9518976
+Output.2 = 7996f68388b1c3174ac333bea7fe19b15ae21001554f0e1c17084c1a296b4613f39d94a93bdfa706c776b793415491f521f9229c8797aa29646818ab4367d32b
+Entropy.3 = cc0ad2cb3a158eb3773d46486453bfe6b924a1be7e2469b586a8232ce1065ef2
+Nonce.3 = 53dc3e494c17dc64db464d28c00b0050
+PersonalisationString.3 = 8b63082f7c02cb5b7719df24c371938cac7f4bda4bccfe893fbfe5a02ff3fefd
+AdditionalInputA.3 = 0e75938c7d350408a1cc05349db5958917d01141b832866aa34168c481d87e09
+EntropyPredictionResistanceA.3 = f5c006d606e6ada6d0cc9da01a6d13324bf56b861945011f9d3ed91b171aaae1
+AdditionalInputB.3 = d5e71f16492b6263a05c8923c726203f11c9cab88d7a94918745afbb1827a38f
+EntropyPredictionResistanceB.3 = 84f79d37333b86adbfb13116f6a6c4b102cc829a67d2829f5c577afc845046d5
+Output.3 = 98493c8438d682835303156299ef751545e2df6b60ed675aee31e0f8982b9add885254b0c71d12b1c11e786a5cd703fbf5f7545fbaa5d3fe499e9d95d933dea8
+Entropy.4 = 75736251653235e3fb1b89116446dc80dfb2492b3820b2b03d5035331c8cd654
+Nonce.4 = 4f203176612ccd277a2c47647ae47412
+PersonalisationString.4 = 870cbaaa61ac66f6489ae5464a15a3384fb5f971ca2b8bda92e3066f4ca7f5dc
+AdditionalInputA.4 = aca6c8a1a9cd22932a413030a35196a1d8376a31821472cf834a0720d8554042
+EntropyPredictionResistanceA.4 = 2ea2d9e955f3093968492496bf859ef7ecbb604ff243020a98c0a9b79da45a18
+AdditionalInputB.4 = 77a6cd42179071e681ebcd82f30df8b1897c2577cbd41432b664993ed7a01287
+EntropyPredictionResistanceB.4 = 09716b11869168c62d27ebf0ad6707feab9c6665a8d3133b5388fd21a4d30cd2
+Output.4 = f884573a22304560e25acd7bfa839b23e564aa7749062632160998cdec07956fc40a445934fc5cb0d0c24d0c3da938670bbd7063d3ccd5c2d9c5edbe52cd0e9c
+Entropy.5 = 2547a3effa12d607e30120f6a94b7e35f9960aba3e553365a03d0f52fdad8c83
+Nonce.5 = 4f5ff3540ab0afcbc20c633376c444ac
+PersonalisationString.5 = 3095dda5e7eb87a72e2d9a31f22943aa7fa31cc957410cfacf4cd70958bcfb9d
+AdditionalInputA.5 = 648b8f8112fd948de93b8c641bb6d2a02b342b7d64190103e202344d4234613a
+EntropyPredictionResistanceA.5 = 4e6e86b41d12ae64c9b3a87570e7c8ad55743e0f71a7f300e02f6de817889330
+AdditionalInputB.5 = 72a7a63cd29fed4cc255408971b97ff59e7ee0b78471b8637cc6cbfcc012af3c
+EntropyPredictionResistanceB.5 = 16ee000bc8d23658613060105f0c50ad87842f359d5fce3e1a2a6e4ef8c825f4
+Output.5 = bf88991c85caac5f392cc2bc6f0819e2425c227f0f5d48029c8385a82d35a1833373d5a1a9c2239496d3a3bfd4d8956327ee353904c00adbd07d533b9f6613c1
+Entropy.6 = 94660d5e5ffa59da530dd20d9b9c802502959af6d7c43516b4291ec91648baaa
+Nonce.6 = 1235968075825c202de9b0cbc24f2e01
+PersonalisationString.6 = 8ce4ad457e5909d3b5352108c20ea925602b92fe904bd79b159321f576d2a8cd
+AdditionalInputA.6 = f19e1f455263414f5577687fbdf5d4dfbddfc57c98c7d756d010adff5c52a767
+EntropyPredictionResistanceA.6 = 4f5269de5cd35554bc895a5b6b05275debfb455d31ee70fb2fa40d1a9e762bbc
+AdditionalInputB.6 = dca7c7c034c2543d39e636a1bce63ddb56c81cdc78f4c64d85b1158614daea35
+EntropyPredictionResistanceB.6 = 01b2ef472bc84f90c022763657ce5641c09adfb533f82bff4fa1e1950b898a22
+Output.6 = d3ab21eb04029000f800c7220a4886b8b81881a15b9e43b480928813e84c143b815922ea9fef46e14f8eecc9d98598b7a97f9889567b4e92b35b3fa64c35e7f6
+Entropy.7 = 21398e68de5b4a934ea0f3fa58fb48e0a3ec9e81cfe34aab361b9394e7209aa1
+Nonce.7 = 804f75245ff926b8d8e760f9dbee8abd
+PersonalisationString.7 = e997c5368a7b58dd3f2f3f8ebd64708dc219c127fcce7d814cc4d75ce3d609cd
+AdditionalInputA.7 = a37947149e58307ddb289a08972f33ceae36d92c5df0074017fce9dfc98777e3
+EntropyPredictionResistanceA.7 = aea022f814b3ff888164abdd7b87d7efeeb84747d095214a05c5337787ca10e9
+AdditionalInputB.7 = af9a769fa94dba5a9dbea448eb8d6df3763616695349135ea32a97e0a57edafb
+EntropyPredictionResistanceB.7 = cd0ffbba5692c3cef2f55ed514d119f55a237a2afa20c91c82b7a15b963e5bc5
+Output.7 = 1adb111b7b159cae8e6954299cf3c558c4c710ceb5db332827da866f0732d8bcc733241f50b20f80e0f4eef2554600b65c2535dbb1a2d72bf535b81a1e9c5882
+Entropy.8 = fab9806703eebd6ec85dbdfe999cb1459eaa806f46ba988142850b41f62ad09a
+Nonce.8 = a2c46ed7c2a993dbf77ecf64e7a12b82
+PersonalisationString.8 = 4818fd970cdaf7bc82b80e1419cbb1a84375f22000d89a61d0606db3f3273068
+AdditionalInputA.8 = dae817303d4814c4e0c41863e2d86e2d506b495403180dfaa159042876625a48
+EntropyPredictionResistanceA.8 = 289458c89c57d8017d89f9beac9d79338e71fa70b3878e424d474d277e9714cb
+AdditionalInputB.8 = 007d649c63306ce434fd558103b3aac3a65a6c3f5888e90166b5aa4bb2b351ae
+EntropyPredictionResistanceB.8 = 050c98d9c37cba9e717f4d0fbc45c06d6e91543d6ab320f159f3eed5d8d39414
+Output.8 = 23fb2c01586849cc041b72a47c898a69a70fd8739d547a2850e6c52e74c2420559b1cc214762a854ef7ecf8421fd9252339eff35ee441eeae9f169cf2a2f8ae0
+Entropy.9 = c02b86db7b022eba95a88f824dfca3183af4f3029eb99968ea7c54d927682b27
+Nonce.9 = 90159acf1e5d0e85343a37b2e19578da
+PersonalisationString.9 = 363dd202fe1b071e806c619498a9f486f2a13c085eba8a431d33ff5d73e462da
+AdditionalInputA.9 = 3a8627f8a279f0ee8e9b7e0d9ebf27914cedc5dff5dbc4b1272dbbdaebdb22db
+EntropyPredictionResistanceA.9 = 2dbb5967e51914b410afe1ec96e8a8c846b26344c4e1ce6644217f7acbf61bfa
+AdditionalInputB.9 = fe0b7782cbea1012da90001632f8f2c402c876f7782c2b5b806d981b992ff730
+EntropyPredictionResistanceB.9 = 6749abcfc354967cd7baf77c1f5acd83c38f138081ebffe035a1ae4ddcf85bb0
+Output.9 = 5d6e10f205db6d534f4a7d748ef836671134b8f3587d5937514f638b4969ace4ae69490e2782b963de4d390b12a9b1a66704df86e0a0663e23c90b493a5aa182
+Entropy.10 = a017d909e600bdc1d780a09acc59fb4f00bd82a44a601bbcdf41d7cd8cbd6a2f
+Nonce.10 = 0c6a4391486d9b41084acd8031427e6a
+PersonalisationString.10 = fc3093bba8f65b69b2cf8ab317b1c608ded50009011bcbb5fdf77f835268d0a2
+AdditionalInputA.10 = 48d0bb1da06252f9906ebc2af6e82a1e644bd99fca3e816adf94f13dc8af2721
+EntropyPredictionResistanceA.10 = 6d707af9a2eeb19812d5f25b039dcbcd8e8835c1127f3b82e6f00653e25ea0de
+AdditionalInputB.10 = b883336f21fb70be1a73abf0a78b4658ca879c9b3657f8dfa3c7a2efc2d7173c
+EntropyPredictionResistanceB.10 = 3e7044cf77f47bba029e5146ee18dcd3416a3b9d8f2b5cff69c5383f255ee283
+Output.10 = c565022cb90c58a092c40158313036d7974f14da3b256f68b05204f9ac46ae6705e3dc3b920b92befba398c36d5ec5ed69cdcea818af6d0155c4b62740f89df1
+Entropy.11 = 8ec5b5906a70639bc1298632f50df1a6f90219e19f8a946abc35022fb4f5cbf4
+Nonce.11 = 3172e37cb3419dff0fe698c01338ad3e
+PersonalisationString.11 = 27eccc8f131d6808c9507109007e4d1eedf2700bb660b583938fb5a1f1d254b8
+AdditionalInputA.11 = 003bcf45de0aef58f592e5412c3c4c426ecb2613dfb3ac6905b986d328853e23
+EntropyPredictionResistanceA.11 = 8adf760f81fcbf4e77d74b890b0361c4090ec367af67c7c6d0b51047f6eb4ef1
+AdditionalInputB.11 = 752c134e1a5924d0be05550d454fa5179699ad41b0968d2142afca354430f0e1
+EntropyPredictionResistanceB.11 = 7411fcea662a2aa5876d386f70673167993f395fa7cb8778b33dd009f353c8ff
+Output.11 = f5362d276d581c2d0e808ae486e8e62ffd354901a0f9807cf5657a3d9024a72478acd4037d06d4ba5c3b29b5fb4f6b5229c17fe9deab68e0d03a2f12409a0d46
+Entropy.12 = 06f95fe2439b4f09be2f8601b4000a0b27ba4cf2ccdc1d415df003394bb42d43
+Nonce.12 = 388485d19a5fbc7f29fe10e3a2010c33
+PersonalisationString.12 = b6d8c233ccb68c8cd145f063f2dfd37b62c560a6f1605acf35f95663a706a08a
+AdditionalInputA.12 = 4fbc8c3d7ebc00f45b06084a8aaf5d4d2ee70f78ba3d46f8588ef0f3598cc43e
+EntropyPredictionResistanceA.12 = 605b02025199a0ad7614a0f23f173275007e3e175a31a00450ddb46579b04093
+AdditionalInputB.12 = 8d30b7625b0c3c2d4a57d7a7b2c8e2511f77e7546ad727585d226d83b0300ad5
+EntropyPredictionResistanceB.12 = c24bdd83fe41934871448c930c6d63b6ccb4bfa73960d9e8dfb96b4a38b2fb0c
+Output.12 = 31388d2734a80888dde690f7867c247133052be2dd092b84f1422fd3650b25f96bedc91b42da3061128580506040272507e7349d264ca3754c7763d2a8a430e6
+Entropy.13 = d2b25a121f9fda7322f4e2b229d6e05f5da43822e6a1c7a173d468cc5fc26a1e
+Nonce.13 = 7e69363776877909f358a00ef4ee7811
+PersonalisationString.13 = 716f2eed8f4f340310f19b954412ae57d9d7e960e66d3c0bff0231bc360964a5
+AdditionalInputA.13 = 2e44ae67efd1b2a02f3c9bda8157a43506aca6c869c459aade838ac2763881ba
+EntropyPredictionResistanceA.13 = 0c28f67291f031d4c5c4c2373dc7724c3f0192bf8626846521c3f4bca3b6ac9e
+AdditionalInputB.13 = dd35dc7dc87b425f4e3583fb9e36f943e2ca0751b7995b2a73ea10cf32010f3f
+EntropyPredictionResistanceB.13 = ba935ebcda1ae3d50779df103e15aed6c2e9dd7ed97ecfe676b596a9f55efd66
+Output.13 = abcc6483c0685d2ac01329ebd698138fa26a1acaafce8ec1cc58a73b646025e3a7b7386c1b492d283ddd263e3be368b266c573620481225630195bf59d464fdf
+Entropy.14 = 6fa076204816f7a1856189c409a46650ce8dd28ba12dffce2535079a9ae777d7
+Nonce.14 = 771244122a2fb43933d1891d3dae1f22
+PersonalisationString.14 = 596321ac3404434961ed7e0e294d11e970df1f08b84ec6a986339009fe0ad78b
+AdditionalInputA.14 = 0b1d5a09c695c3757f22dbddff1532a7e1625dd2c033de77cbc5ffc158151479
+EntropyPredictionResistanceA.14 = 0f1af988ec9513a8652e2b4d27c08c7473192c8683a4b426159df72102e13094
+AdditionalInputB.14 = 00eb040878d2aed9b1a2c6866108c13b24c265d37396ce0e3da98de85f2564ea
+EntropyPredictionResistanceB.14 = 5e20d8718367914fa0b5680a2a6b2030f71dcb5961777c1c2d70c3cbfe197615
+Output.14 = 1126dcdc7ea35a3a0ad274560765ed66822c804a937a594ca5e021353362865033d1583b2712abd0dec75d24006371bf720a258556b6e37b44f4132be19d8bed
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 047b78be0a7b29ddd2f1161184858922d685e0afa35264b78e74874b60e52493
+Nonce.0 = 911a4034075005e0305f983d75b1d204
+EntropyPredictionResistanceA.0 = 2df2dda6f56a49c968ac343fca5ac480fa216391806092506a4d11bef355d827
+EntropyPredictionResistanceB.0 = c5c87fa5843481a1b335b3b5b629dbff64eccd4a95ed39693843cfae100f70c3
+Output.0 = 17d2ca11cb828f43c0e49f419e7dffabeedb56af846e604399ead7a64cd8bcb9a8a5973921698ae7c54c32990125e7789cb73791c63c7889566c9fb46c180b61
+Entropy.1 = b3263dd082f003626170e91877ba5932526ec58019ee8b3fccbc057af7105859
+Nonce.1 = 7b1d5e793db6da07e4f8d772b9fb0185
+EntropyPredictionResistanceA.1 = 5dbd68aa42aa48ae4e55e49bbc58fd5be83f6b820d49cd0ac79125b7fd702ea0
+EntropyPredictionResistanceB.1 = aeb0afba7fa1d7b44450874a2b4845c7e07cfa3b38b758a2c4a1d4575b7ce814
+Output.1 = 779a28bd4cc4b992fe622b7a00ee614d23d3439b8c4873610dcc259ea449c2d7a7caee22a80c07847eb1822644b4927c270af89ead5618d67d771af907728afd
+Entropy.2 = 4abb8ab7cb8dd66b74f67a7cbb2c6bfe217a95f82f84f82202245873434edd0b
+Nonce.2 = e0eb5f37fdc8aae7cedc9d469e291535
+EntropyPredictionResistanceA.2 = 587637bd3bef94a096eefdd6bf4d9cbbbdab4023e4ba24c0da6c122ed37bda2e
+EntropyPredictionResistanceB.2 = 08fac1f1fbe42a804b290ce223e5669df36d78a12d240f1affed6e4d54ef1783
+Output.2 = 44ff27535aae8a2221bb7e0664bd21c1441386ce3018964f39d6b4c95d604de8131f755fdcdf05e8c4a236de5e72bc800d468ec47c6b802cd8081930b8defb8b
+Entropy.3 = 144a6f825b4114d899d94250a934c8e9e5411373b8f5035419f2701750389e7f
+Nonce.3 = 79f4f9b953adf21a0a2b7aa71585bb6d
+EntropyPredictionResistanceA.3 = f90e586e14c51086da0afa329f8068023276e93647797da64b89b5df0dd5a942
+EntropyPredictionResistanceB.3 = 43f199c093a0b55235e526da6f2c32e7f990a50b4b7484924edfb2e5c735dbec
+Output.3 = ba088316ddfe253ae1fa379713876a2362ea0fad307ef5aa3d72556d1fc5a1f583b54a0f89c599b41d9684a3c705ba24de6eea255f3a9ef584781e9cb3b63b7e
+Entropy.4 = c91ba8d05d8a1ab67b5212b30e65474d612e118d84a8e2533665cbd344727db3
+Nonce.4 = 54dbbdf977f5453d152628c969b2e18c
+EntropyPredictionResistanceA.4 = 0d8cd3b816b0d6d01e3446c0626ccdba47bfde65ba65161bb2c56ee6b9d1ece7
+EntropyPredictionResistanceB.4 = cd9b27e76ed33adcec3829b1fa21488181d88796f366b644c54ff1337cd6069b
+Output.4 = 434eff9196e6b30c0ebf9444311e7ae961ea090c593749f75eb433f477f3691b69fde2976adf595fc78631d6ff002238d18298d8cfe9eb31a77f97edbbf66125
+Entropy.5 = fb8bc3e01c145c099498932cecd7e21c7ab476aba824391911a4a7fdb14f1a24
+Nonce.5 = 7e856af3d7ade4c2b55ad9b91467b777
+EntropyPredictionResistanceA.5 = a69c96ff7a4abe954804e22053a1148443d8e3ac052616c5f7b3f3af96055aab
+EntropyPredictionResistanceB.5 = 80d7fd1895339c974a82e2969bf279283545a6d9a8ec50552603b83dd69ce6a8
+Output.5 = 8836930c29b7510c9cd78e5d841ba8b3abe82faa696d5706ed49c5b115973fafb6303e053611cbc16470432aff7ef700668964e207e406068fb396f5fe80e0ce
+Entropy.6 = 005b76a93d2f7746f1f5e89e214e3e580c6390cb5ba8e1f6499d34ee2897c954
+Nonce.6 = ada28812f6f328968ffa2a14049da9a1
+EntropyPredictionResistanceA.6 = e8cfb901c1933381a7e33984148a03829af15b4acd5b7cf665afc698027568ad
+EntropyPredictionResistanceB.6 = f881b9f8d2339f6ebfdaf8cb7822599d727f994d146e0b70b93bb15f864d6ac0
+Output.6 = 5159be5ceac7020f320292b6f76f541ca6c16ad82a6f78b52ca4a663d52b39ca1e1530a0c7cea37a7f4e8fde44b8a2bcefabdf29b14e8d3d2d71e5b26b1e33cf
+Entropy.7 = 2f4bdd27cc2f8416a02615a97477fdbd388f9d6c78caa77b1ed3cc48f3fb7321
+Nonce.7 = 41dea1f937ce0264e910bb237ba985c1
+EntropyPredictionResistanceA.7 = 700ae2a5a7704e6578003909242c607ae578e61df423c975c6149a4dbfb66ff2
+EntropyPredictionResistanceB.7 = 2cbd4301a94a761c872dc31a42a1a93b02be96d4c6843014af605b017ba76707
+Output.7 = 8872ffcb88788233c42017fa229ecfa04e80fe342a40c0699fa1f215f6043c1dbff72f7761155d4da0500413232878ee7faae0c425ac0a50eef8992bbc30ea90
+Entropy.8 = efb3a5ffdbda70d12aedfcaef89ba790269467231b880f01870a60c1260c46e9
+Nonce.8 = fc1e7fe04c9353da29aa724450bd73eb
+EntropyPredictionResistanceA.8 = c00263362d31574b936cab20705961f48b94224b411207533386268b0a692f09
+EntropyPredictionResistanceB.8 = 35cd293cf78286329171c99987849720f45dbb23e79c60aa5cbbbe3e12a9819a
+Output.8 = 302b184144e2ea2b78f7f66a068ef5d4d4e61287ea6875b006e8f59726869de2d0b923214c9c352f073c1f183d97457505b86f2833deb7bd75f4168a727ddb8f
+Entropy.9 = 8b4afdebaea819954d4f140f86e07c7f106a0743597a6cf3c88b82dbecc1aba8
+Nonce.9 = d15286695a40d1e9d8dad163ba9a88d0
+EntropyPredictionResistanceA.9 = ea9d327d1a2faef2c0910abfc557f05f7579b0c4bf29380eed9e05f527e4eb1f
+EntropyPredictionResistanceB.9 = 0ed6944eacbc4a0b1e81c95f7200b258afb04c5e4365ab2e92833f8e0b4eeb2d
+Output.9 = 67b7ff780b3bb1498aca41bfad2916a4ff1629ab6b9f804f45a9eddac9be33d1c67481465b1d75fe37c42b92c6fbba14e18b0f393a64b38544efa055ebb68219
+Entropy.10 = c43effee5010e9d71e449938c16148d97d5f67bab421032ac62d655168e0c055
+Nonce.10 = a6b695bbf8d2cc25fa4a0d710fbbc3bf
+EntropyPredictionResistanceA.10 = a2c2a60b9be7438d50e3b6bed8d33fddc2d5a2bc2fd24f701650e4dc740d5e7a
+EntropyPredictionResistanceB.10 = 216971fc3b86f19379fab4628fe257cf87d0aac2cafd677fe281dcd0085d03fe
+Output.10 = adac58c54e8054086a4a735d545eb2b83237d58f6ede02e725974579ef2c355040f45526b633b0221cec3a0d2642a9a7a68fd532351684cd5446aa6302e22a02
+Entropy.11 = 24a0fca3bea7d150f4d2d58db48c7686efdba1fb74c4a705e3be4906670ccdcb
+Nonce.11 = c9f305ef012468a119ee4da934535676
+EntropyPredictionResistanceA.11 = 1aedf53ebb77f5fc0957a2ee9be1957bc00b3432256bbcc9243746ffbd011b0e
+EntropyPredictionResistanceB.11 = bd6ff834a42a6a7d0a8979b71a849d14eae2f86ef9a6581122fc912ff5974521
+Output.11 = 389df3b3299cfe4aa072a821a028d565864af2d92efbcceeb5096fc21872334b7d141ab8b3f39bb9009c8138c4d49fceae82c7949d6b6f431fe0a552ca22668b
+Entropy.12 = e4c9cb629be9865c8722a0d4d309c605a35703a8cd936ae8cfbcc1539c1bbf00
+Nonce.12 = 0ffe80469ce03977d814d918f76852d4
+EntropyPredictionResistanceA.12 = 26cf010137821ccc59574054e3169b62ed83c9da5cdfc0d4999af9803c30277d
+EntropyPredictionResistanceB.12 = 008b6fd3d1ceba6addff19bd537b1b6b5493265b052bc2ddd8037b0bc05da1c6
+Output.12 = 5e81dd072d50c9051c5ba3719ef518c342a775c0fe3ea145bae1bc3452cdcfd8964b9b92af6814205478f5e43ef9dcadc18e64096539964930443317a59297a8
+Entropy.13 = 60da473f8d81f03846da8821eeee12e31d5a9891f3b45ccb91218ade471ee37d
+Nonce.13 = 7912794f9378a9225e590e90301b567d
+EntropyPredictionResistanceA.13 = edb68da67e659e6f6efe6e6234ac2ae0d9223fc0549204404af4f93c6f4d5db3
+EntropyPredictionResistanceB.13 = 8cc0536dc83b538074fc8640ad406a0ebee9578986a7187d0ac29f661b36d2e3
+Output.13 = ae3474282b132de65c7321c3fd194292d81fa21ab6d5f34343c2ccdc6463411d1875b770db7b9532a51a2c35ca9f61e1b1ecb609356b0ac7ecf4c9352175b24d
+Entropy.14 = 451be1be4f13b1c5b7da816b1511bc5a3154814c43d242022391afe4f2778504
+Nonce.14 = 3d95fc04be572d0b82d63086ab300f55
+EntropyPredictionResistanceA.14 = 93616f2263a26c9f07310e37bc7e42d2f3a076c4ef7b84dff40abad01fa1d8e3
+EntropyPredictionResistanceB.14 = 5b14f38feb742063b92f91c91404300099777a62d942073b7af164d7dfc21d11
+Output.14 = 852b4052d261b2c4ae3d95049e99a934c8a9e820d57b4ccc64031c2716bef89ca0ef893253b7372712e7ef10a340dc5c55f344895cf34874b42b42a11fabceec
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 3fd217846da98738b8ed519b3d615d8d0cd006be1f248772655367cf0f65b10f
+Nonce.0 = ebaf09bb8ba31ef9d847ae39f85d4150
+AdditionalInputA.0 = d8ad8531f9b88f5dcf9a6c4b7d8e25789b18b29fd0ac097b81912e48567b892b
+EntropyPredictionResistanceA.0 = 28f5bf9c27dfae18620fbce6e89bbe38ade3561eb8c78bd2435063ade558c35a
+AdditionalInputB.0 = fdd33c054de237d6441b25fbfcffb6bd29ba5c5e02ac013c915a78703efa9d21
+EntropyPredictionResistanceB.0 = c45386220147e228242dfbea602840a763aab590109f1c25ec661a10c716b3ff
+Output.0 = 476836f69a21d12723e94e7cafb486c04c77d7e1b87ade17eadddd90629479152976d4fef6ddd936598fbad218f4ad423b1ea20bfdd99ba8ae5e317c6c2a2d1e
+Entropy.1 = b7d843dd2413c5819301512221f446774692d1d4b796a30f17dd189f89e02a24
+Nonce.1 = 1306b9e5c64de512892a3a4c3805ec25
+AdditionalInputA.1 = ae61ff8ef2cb4eaa482c14e3c4449bc01a851ad0f0c3db370a7815f7e839828c
+EntropyPredictionResistanceA.1 = 6aeb3e2c97bd4bc2047e37df343a1cf40555e2deac1d04cf7138e35cce0d918b
+AdditionalInputB.1 = 9d97823262d00b1d911f84fde9d4be2bd9518768cee68ae11d7fb4871b41e09b
+EntropyPredictionResistanceB.1 = 3dab9eb860330c13d945ddc085919168c37812556d6f4d45008fd4754ee8b31c
+Output.1 = f0e00916597d1155bc7273d8c2fac61b1df9a5b010ae9435c14c132394abd98489b43947b1faaab5a34aa0ce2d9bc3c43b834bde505ed235c90376b858867ca5
+Entropy.2 = 59606743ddef2a03ccf666efd54f25c4c3cc304c35bb2a50a2674f3f84bdadd7
+Nonce.2 = 19c184174cb360fe44f539c3d74983e1
+AdditionalInputA.2 = 4deb163e51e7495d6a735add39b461bb6cf4bbc59df5d900744557ffff34fdde
+EntropyPredictionResistanceA.2 = 376c659e3835ac5b82756b5ea959aebba971877706c2f178cbcf6a6535144980
+AdditionalInputB.2 = f2fa6fd88938368f1e299072e1379fe1333c091c804875b053ef62437468ef8a
+EntropyPredictionResistanceB.2 = d2fc76529489a2d6f2ef1da39b150d544c80c9d810ff3711ab266ed8a0c3d3cb
+Output.2 = d7cd8a0c7bc99e4b9109a9c85eefcd1e4960deb1d355e573e8b2afeb0f7b11403eff992bdfaf016a45f81bc9be6b96c403c9f8349b9ad7b5999ddb13de58fdd8
+Entropy.3 = 389ace66986a728e0a423888e563dea78b9d548d918bfc2998c2a74c33d0f205
+Nonce.3 = 6e0fa1d253cf127f69fc8f41841e541a
+AdditionalInputA.3 = 400ce62fa2274890ac2fb18897422bbf80f63f7a95f70d1eb6c32d62611ea939
+EntropyPredictionResistanceA.3 = 4b5060786be8bbd2dd0dd5cac7cfac3e40865fe0fd0afde80aad84ab83796e58
+AdditionalInputB.3 = a5834c149c21811ce19f4353533fe64b9ae4f325746398a54f468185c0df74c4
+EntropyPredictionResistanceB.3 = ac318b142d87755a8ad9bfd2d41d29afa6c398d16fa9e51ee5b0ea3012d937c1
+Output.3 = 584913f28a9f51018b6f82a26f3db340941172f8bc08878c5ccbe1a7e8af8bca6442bbd4f0412e5eed7fca5b0b4ec05bd14adf849ed9c7e718d2a8191d294c24
+Entropy.4 = 227c5af170c337b218623bb66ea170b4ddcab1cfa46df88653cd67068bd052bd
+Nonce.4 = 5591158b535b5db28d9fb4c4a114dc68
+AdditionalInputA.4 = 149d5586478eb6bbe9bb003a6a498a54093ad63d01d6e46f17d2a95401b1ec31
+EntropyPredictionResistanceA.4 = 5e4f914790e72731aa98c7cbc9b1d263faeaa56ffafec58d443ebf0cb388f839
+AdditionalInputB.4 = 13d688f3ad4574b903f56f65705dcc391081150cfd2ec7461fa1f8f5f6319e60
+EntropyPredictionResistanceB.4 = 9862beaa4a685609dce0281a0f9ba3be89a380524119f8c39daef8e846b40bec
+Output.4 = 647c5fd31ad0fdb25c1881546223a06d5ebab38b1885b84b7e4d7c05ee58a448b44e1781ebee6643529e92adb1b578a9b030a913245c2cff23d9196d46ff6de1
+Entropy.5 = b49441b3787f631c263ea222851776f70f693aef18f50a4b5c4315df3edf9cda
+Nonce.5 = 73bd41c9290a305c66c69121f82a1351
+AdditionalInputA.5 = 498fabf309461b64d83e906e89f03fff00408f57b7d64fffc88f5c50e5325bc4
+EntropyPredictionResistanceA.5 = 094a19243b651cf3cbe981bd3a73a868aef6a9ef24f1875622772a187721c05f
+AdditionalInputB.5 = bbf146a1095ccff2b9d5d4b23b7fee427d880adb2dbf2b4ab37b04fde3ab89cd
+EntropyPredictionResistanceB.5 = b1f3091536a2f9320a8d214e9ee004d1a5008c92800acff5a360e62c86627674
+Output.5 = b01c1859278d47047af0403173b42ce786b3a72a29fe6520842b8a1e5dbbc605042b04d6e6baed0a49e827f403fb98c45b5a71fa6d7212ff63fe8e46dff64cca
+Entropy.6 = d83f97955d70e2b56e55ca231b569ed2458a9fd3bc69644b8a0893d2900a84f1
+Nonce.6 = 925baaa71f4b504bf872590ed8807f31
+AdditionalInputA.6 = 114dc99a93855454f8284d2b544bc83d1913b186989224725935c71af77e8a75
+EntropyPredictionResistanceA.6 = 699e2e39ae7ac43436790fad95845f4344b8b3f6421da26782d6fd5742f52300
+AdditionalInputB.6 = db02fe02f7f2b6884e6400e3eac5a74f614d66d107ec4b307a2c86e6aaee8fa4
+EntropyPredictionResistanceB.6 = 06030e98fe7bd56da358db6b9935906de1686fb73b5700bf10cd3c6357482500
+Output.6 = b155bdabf30fe284bb946ae794a7a6b0b7796e05cbc5e5b822dbd1d1bf57602f44b6146e529d40c01b32a100ca535bbf83e51a4d6b5b43b3c1b047376c7d0090
+Entropy.7 = 43e955d2f08f1824665cfd02868ec9db4c0416faf7f37baf096e0e0cb30d38da
+Nonce.7 = 6c979aa09bb649a555b52aeab8c47701
+AdditionalInputA.7 = fe3f7c1b416fcf86434fc437793cbd5725a3115998655dbdf76a26442fb8d4d6
+EntropyPredictionResistanceA.7 = 93a2238b5d53d51f0fbf8b000c8bd2a17f1bede339e9dbb009d0fa2032ea5e3f
+AdditionalInputB.7 = 583f7996156190e0eb27864bd4f24d099846c47d972ee28982d5fa044f749d6d
+EntropyPredictionResistanceB.7 = 437ad51584d1da7f8d195f20d05da516cf4e7ed7a2680e392eb7b547b0b19dcb
+Output.7 = 99f7aa5b62070bf1c4302c207ce8632d1810650e1f3c793ea3d81d4aa71347125e762ed454b623e75db455890e2dc85116fcfffa6c3a2160db976550e21822ca
+Entropy.8 = 7cc0773c7ebae74776ec58542138f4907e20c0889227fcbaefcc2971a8c3bf75
+Nonce.8 = dfc5b7acde00ee0db3484d27abd18d1d
+AdditionalInputA.8 = ad78d1acd8758384eef4b7ad48aa5468d5f9777f4f4faf3b4483aa678e7afa83
+EntropyPredictionResistanceA.8 = e92da5381b16387474f7b2d2b5767dde76a836b10fe54c297890e67be92e717f
+AdditionalInputB.8 = f573ab82e7bf38fee97b069d833498cc2992b0aa16d62a6ad1f49331bcbb6852
+EntropyPredictionResistanceB.8 = 2a0c8bdd543196df25de9de62991fbc7fa67523a2b9739d760bcbd6dfcdbbd4d
+Output.8 = ac7354fb97e09e2f5d2989e514f6e3cb83fcef4d76502c9faa851928887449db45f901883324472143d571bbd4ea72a71fc70135de63e6815a3536189b9f923a
+Entropy.9 = 44044814991990debc842763e292ce3677951c509285f09efe0399cf1b35a7d5
+Nonce.9 = 5bfa9c2605be6469c05e30c7a491dcd3
+AdditionalInputA.9 = a1f7ff3d0af6e304372ca3dfb89719459cc4d03a2579439df387d3c8e7a1fc6b
+EntropyPredictionResistanceA.9 = 0426c142e2d5991fab811d11cfcce2a34bf4ad8681b70953c6774764e6f09deb
+AdditionalInputB.9 = 95f46b9d49c5a65cd991b6b7bedecc515c738a1a4f07891b182b0693d78d2196
+EntropyPredictionResistanceB.9 = f4ee6f0eb57dd9f2a68d7fea38f39fe536580e09e2565a1dc972d38b9df1a5a9
+Output.9 = 30c2737812c4fcbe245ca7292e44bef177f6048320b9e11faecb1ddfdb6d6deba094f3db497dedefa1a93f41c9aba7109f75cd7b26ac21dfe274ecb7b97f9a7c
+Entropy.10 = 2654b839a1ecdf0610aa87650be8105a3cdcdde04d77396e77b3d58ece7c9177
+Nonce.10 = c002f746dbaed3ae5bb6c0adc2347d49
+AdditionalInputA.10 = 0a8f6f3f2492ca8783ef9e49b60abdb5479ee4455536e65b1899d75025b22e47
+EntropyPredictionResistanceA.10 = 2a16a5f01760531393398a9cda89bce82a0a761fb3203fd10777d39545830abd
+AdditionalInputB.10 = 75d3552ae35d1da4da77b7d7403c0b30c19e13aa25e259dc044b3f1d1be7683b
+EntropyPredictionResistanceB.10 = 8428ff878288830f9f4df3b9a424191ccdd618c873b71e8aa657d130d41b468b
+Output.10 = 23280c4329524ee77d6ae8fa6e377fff350df4f5f5b7a017d9be3d246e6b37026cdda23e8e517c954da6928b947a21280daa9e35f69f41686be56626766c6f0d
+Entropy.11 = 49e54872bc61de4ec94dfff9d6fe5107e26bc380f68b63bb2a865b99c32a1823
+Nonce.11 = 6163b0a24ca5fcb36cccd6aefcf20385
+AdditionalInputA.11 = 38de6a0ae58934676b3bebd335cf8aec6c25b9ce709272afb77fd292579860b2
+EntropyPredictionResistanceA.11 = c81b373f7e2f9298f34fcef28c9dd62108a59cad6dbb4b3f993ce08752c1f17a
+AdditionalInputB.11 = c2b7794aeedde671c53d8c3908db48c307167c0e41fa107de8217b6604ef1044
+EntropyPredictionResistanceB.11 = 72cf78c3e4ce362ee71c5dbbbafe1a6bdb80db2f403d28ee653a64ea092cddf3
+Output.11 = 9aaf64ed5d02a65f953c1726875f5a0e3391f957eb4431e919886cb5bd9f3e41aac82c7f3c014d4044357d95c8dbc23acba0195a9a97f4641e7af24f98b98a3d
+Entropy.12 = 433059316bb9127500427899356988daeac1c42e82dcff63cff00c1f7e7befd4
+Nonce.12 = e8f3bd9941816a87209f6466ccc33e58
+AdditionalInputA.12 = d318d7c914eece67b51d938804ab9b80112dbfa9f2ad1bb61baf7d72fc91b0c0
+EntropyPredictionResistanceA.12 = cc4d1a1d78b3388ebf9f63b5b1020225e9f40f59e156f3abcbd26ab88bf92b0d
+AdditionalInputB.12 = d82d08116ed30e92516bb216045fc1079cb42ab101d7ac46ab41b019e268bbbb
+EntropyPredictionResistanceB.12 = 5f0ca0d592062364bd381bb029bdf1abba712cd0e7c7b27c6cf7ff2fc6341c22
+Output.12 = e1bf5e502456294804492d5df494921115946b3316e7f8006e84d3fc1dd91226d82b4771071408ba8ba9cfff192cc62772368e374afd2da66ff6a43217dd13f4
+Entropy.13 = 0cc0433534205fef1d5b3a4f54be5fe8083898b815eb4377a12082ee12938722
+Nonce.13 = d7b578f0322d93c1152d3a13cda7bbbe
+AdditionalInputA.13 = c7a9051fd83555cea84d08a6b63ddd2cb11851bf736bcb1981cac1207fe392f5
+EntropyPredictionResistanceA.13 = 6685317b0f9a41c58d30807c0b6add9f7f1adab6d61f43215554d044220a80b1
+AdditionalInputB.13 = 22e0e4aa9451f95bcd192706ccc70a1d71029f494e46cd5bbe39609c179de960
+EntropyPredictionResistanceB.13 = ffa2a80dcb6fe4510f47a2acdc6076653bb652f84bd1c390979ab959d055845d
+Output.13 = 5318c07afe58bf849c3de4e1fa1457c7272a1ee94305c5cd9f82f1691ae9c6d35261bbbbd529866a65efdd58957990380a73fd778bbc190e23c1c891271cd6da
+Entropy.14 = ec134d60e8a15ffacad5533ec129046023eaf6611a0b0ce540b3e1d2545bea39
+Nonce.14 = f9bc8624d7e73cb7ef3c4a9b339e5708
+AdditionalInputA.14 = 39433ce853e8ddcd14785ff22679e0e56ff953b7f46707d0158805e3cd87d3f7
+EntropyPredictionResistanceA.14 = 395219c401f954a4cd04af852e08c2abd8152ee5f8c915e10a5f2e22b9ff1f92
+AdditionalInputB.14 = a4c44e437d0dfbb3097f2668c87352ffa02ef45aae12348008612f337d8edae2
+EntropyPredictionResistanceB.14 = 6d3035dfafd8554ec9a629f3861cf22b6b49ae326378f0f71ab3c004e7bc8952
+Output.14 = 6924b558781344b2b837ea467671a07ffae3b4232d01d04d347b6aa2fe60f6fa83d9634ee0a094659c709b1002749a6727dece8a2c1a49d43f19c235668a6429
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 7294930b69be88e578ba26c60e25d74622bf58467dff7bc7547d4f3d62592989
+Nonce.0 = 3d16c6682a9fcdeac667d8b20b954299
+PersonalisationString.0 = c8612045076c473f45793f47a5ac6f9c31cce9c2570d6453a96e459fb5b6f14b
+EntropyPredictionResistanceA.0 = 7aceff8b421cc1b8b5215d9f7f6e8ff70525c1c3305fe18471acb0fdb6c76278
+EntropyPredictionResistanceB.0 = 3ef0316bc2fce7deb47028fa139f397ff492da256f20d891de59e34e2ab8223d
+Output.0 = 98b37b5bc1f673f355ec1272945922b088ea57792089061f97e736c3c2a3ace04d7255c1f1ad3a94786c5d8c9a10c0f8d74c188a3544e97f06e40a96a5a94a12
+Entropy.1 = d9612d0338e6b542b6859c1c67e0ee13659236479e57e30cd5ec155964516946
+Nonce.1 = f1aac295d4c1d8e5e0d3cffed7d817c4
+PersonalisationString.1 = 753f6ccf97b02250641565881f86b1ffde545e9c19253298319c0e2aa15aa3a3
+EntropyPredictionResistanceA.1 = c77be559f27efb38493f883b87c7b6d18f172e678387caecf604fa02dae0cae4
+EntropyPredictionResistanceB.1 = 8d837e74c511c27a5560d280661f98636315c2b855000454f6b7d9caa17c4c54
+Output.1 = dda99daa336776393ddfe9855db2134ff53a709fce9c229be768db0c15ce176fbc6c9c7be0d9e0bf362bef339e125d2f55f115cd6417e99404602132cb22a26a
+Entropy.2 = f01a7507a71f34b4f85899b31acbcd6211a0e9c9417ca5caac0e18bc9f655c0c
+Nonce.2 = a60a108ce5e23e0a2ebef1b67fccbe54
+PersonalisationString.2 = 5336a4b9dd7e2da6439af008611a1c55cd126040776b16d561aef025f1253423
+EntropyPredictionResistanceA.2 = 677ec5b800b5d3cbca40b90ebf26bffcc5c2b7d56b14b777930168a45eb0f68c
+EntropyPredictionResistanceB.2 = 86ee44b217cd808078759e9fd2fc0826d9565a789aa9d169ac843c135fe9b5cf
+Output.2 = f18b0688dd8ef906f53f71b6698c644c66f021f35b6464947a5b70f346ce43a0a6abd3a13498c4054c0140673d0ae541825ae0487abfaf346d5ff1a2e181ea97
+Entropy.3 = 6aa38b18e81ebd7e2e377d0580c935ede423f4086a01eccdab16b822ab7c3d19
+Nonce.3 = 3bc4d659f5fe11306841fb987365a604
+PersonalisationString.3 = 5b20bdd3a729b992f5103060be19edd35bed62f2a69980c40d02065956da42ee
+EntropyPredictionResistanceA.3 = 120cd866b3567c004dd33ed42d160a7f4337ba08a23bdf0e71de2bc91c1d191c
+EntropyPredictionResistanceB.3 = 2582322d64851cf192f684c1ca8e71ffa5964f7de5d5f8bb456d12dde74f18d2
+Output.3 = eb00924b44c77e972a13dbc2074e4d33acf386e7b06a646d7472c3b6a246662b8ae24fe04708a3adda1bfb8e630e00b1768514bf480a25a5ae9b324e8e328543
+Entropy.4 = f51184a5924d02c645a0af17ee9d7682b9aec29520915e53c85e58c2d6ed6801
+Nonce.4 = ce8c810147c5649991ed101b7a936913
+PersonalisationString.4 = e39bd7fb6aba16462f492f64824d4e94c5fc65e2885809d40ee8050622e82234
+EntropyPredictionResistanceA.4 = d0e0fda7490a9c379790391014a64118955a72e5ac363eef06f370fd615b5c44
+EntropyPredictionResistanceB.4 = 02ddefc930fa833567d289aa0d809b1703621605a22b8dd940911ed084d3c2d8
+Output.4 = 47a64020b876541dcd511dbea247b793c80c7e347f4d1392bb931516464159fc28c50ea8c983aea0c35d8e8bbaeecc4ee3ea52ff24ef79dda5fb50b484c76375
+Entropy.5 = 232e95d1bbe43fb9954278ff6975ca5b4a60b55bb9eb62caa718f865d6f28544
+Nonce.5 = f4e19d722f2701c0486e5ba20a28f90a
+PersonalisationString.5 = 4df1f9f9cdb88b102b47b3e7265ad3c4059778d969f4e8f7560005502aeba3cd
+EntropyPredictionResistanceA.5 = 5e7122ecb8406539853e8f1d1048c8ef068b0aeb6766dc24f52e662f6787f969
+EntropyPredictionResistanceB.5 = d45e39f3aaf1e1410db09fb1c456ab19b259a96b6e717025ad33897a50d3a018
+Output.5 = 96a1b822e491ecb31fc3ec6b5ba4054d5b86ed11cbf269e95be1f303d7176fc78438ee550dd28882b59c8b6b84585a7af03f2a267cf939854344f399d7ade5c8
+Entropy.6 = 4ed5831a39452c83bdd42f1422c332379d28c9a7e5e6790baaf9d3ccb9c5ed38
+Nonce.6 = 469553204ef50d9a5e69a3d38c6336b9
+PersonalisationString.6 = 4dac0290312b5c661471bea5922195e42eed512005008bc20b591bcccfc2a7d3
+EntropyPredictionResistanceA.6 = 0c37bd3ddd5c9593c161d72278577a9de600086543261c0dc48ced09501aa24d
+EntropyPredictionResistanceB.6 = bf32fecf2055c76cbc48ae9262d566dfa76db48fa2528d367069517f168d7d19
+Output.6 = 5eb6d4161a0c1e2407cf3583543c4355dea4970c9f46db73ea33a9e171c2fa256e71b5b335f5311934050866e0f369e550cd6baa9cdd5098e7f20f64280a6e6f
+Entropy.7 = ec1b055e2dbffbf31c5dc5842714c55f9e9a3df7dc0075314280645c640ad36d
+Nonce.7 = 280786abf507f6d88c16cea8bbc29107
+PersonalisationString.7 = da4adabe6c8d4952fa2a79a663b64a1fdb450c1dd5dd103711cf78e85926fe5b
+EntropyPredictionResistanceA.7 = e88abc6b3a9c7138471127744883ed7ac103819a3a2974f09626f719e8a48a55
+EntropyPredictionResistanceB.7 = 297d96f0163c56b9aba9f2c27fee9a913e823588b969e0463428ee74f8ad64af
+Output.7 = 9af89d5fa242c3ed0097f4e25a478550b78eca0fbc0331311c9472ba2044d7401b3520fa7af8e96e1d8021c3dbd608c14124bebc59f5c7696c92117a5e3cf543
+Entropy.8 = 7fbbdd4ebb2ce96b7630cd745c8c340e24431de1215ddda440a9a93358719bf0
+Nonce.8 = 85010f8ae716d4918e623d2406223f32
+PersonalisationString.8 = e8daa525d543fabede07291d51132e03d4488caef1cafae0200113dbf35cb1d0
+EntropyPredictionResistanceA.8 = 09159b1ea28498b01608902f9e3ece53997fa6029f86143e88b8dd1b738c8d8d
+EntropyPredictionResistanceB.8 = 00cba4aee9c75509b808d5076c0376c8894fe1041846165bec96bb0fb3e24f08
+Output.8 = 48bcd68231ea0575297b62558cc0c6388a7570334ec4e4e7ffe32871453a5f839d2d8129ba47121d9d5b272352e64af85006ed5d5bcc7bbb769a113816452965
+Entropy.9 = 14b551a3f01e02bd50a8dd7651c8e433d08e809f2ded45930e400f776d8ad63e
+Nonce.9 = 059a6e92e279019aa89df8c5b1ca2581
+PersonalisationString.9 = 1297dd3c0f7552ccaf3290e65cbdd22229df51857ec89b7b94a17a3057bb403c
+EntropyPredictionResistanceA.9 = 20bc2c1670ffb38845ecc230ed55dc19718bae45c536cb6471eaa5bdbdf993d5
+EntropyPredictionResistanceB.9 = f3ca78e6d60f421d1c88dd284de5763ca8491aa57238bf90d643fc3b43981c7f
+Output.9 = 85c36441b282eb20a255102ae1fa1975fcb63b4c781b5e1e75b6800862eedba1555eab73fd8ac7f701b0fdbdf47d5c79ede5f08e7a4a9f936101faa1146b6ea7
+Entropy.10 = a6ae353f276c888c868806298c6450268f079fddc59a88ae0b00c3913e1a4878
+Nonce.10 = 2dc0f63e0f362ee6a60980a874821726
+PersonalisationString.10 = 2536759f11b732baef6540ed9fd9e7485d36fe7650f8389f35595b0291566b0c
+EntropyPredictionResistanceA.10 = fcdabc02ca6ebc6a8570917759403d81e0baad4d14e16bde353476aaab893e47
+EntropyPredictionResistanceB.10 = 569b85a94d0eae8bba75a60cebc00be469843144b14656a978308f725f7786eb
+Output.10 = 70e99dd2460c5aff65890877cfba8127adbb85f9bda43ad0603fa323b1f2db992c02057c101e089654acb2a7c71cbaba2717b59a725f133dd7785259b5a15a00
+Entropy.11 = c5a1209bd7b7d37cae673dcafccf23e843e5cf2a96d904613394e87baffb0b8f
+Nonce.11 = 7281e28bce179c862aa69bdb1fb950f9
+PersonalisationString.11 = 4f3f3e6e838d176385f68ef99cff0abbc14de80a88b70c63c16934363b801b32
+EntropyPredictionResistanceA.11 = 8c77e44e06b3c4adea9d035b1980e1589cbfe720747a6d6d89616871261663f9
+EntropyPredictionResistanceB.11 = c5fa214f6e5b06d9b5331f82ed35b49e4301d3864fd90ef70972a3e30ec03b3b
+Output.11 = 9cf508c8698ba86e69a1a99fe26cafa7d07dce5967f11ad0f0e638a7aab2fe1202c0594329679bbce8dfbd2d7aea1da5e88badad05a69b0c122036fae44c80a6
+Entropy.12 = 5273bb5234a1bc1a183fe97aa0a04414bb6e366b6837b44eb0847bd6a773696e
+Nonce.12 = 05b8ad30968fc263dd731c9d6ecada33
+PersonalisationString.12 = 610c0f41d8eeff0046758109b4e0c891c5702f43f963920e48eb641c763cae80
+EntropyPredictionResistanceA.12 = 69a65f480705082d7914591bb6291321a94dd2f75adb827001950441acc8431f
+EntropyPredictionResistanceB.12 = c2ef3cbefe07f0f5cdb47df27e9eaf3cc5deb6e23fe93a478010dab1cdad9e74
+Output.12 = 9b887cc9e2952f6b7931e00ccd2fed1af303518397d8d66c538ede1663d013cdf735054acef1926074a84ef685b1b9d912626ea48013966a12851a4c293fe34c
+Entropy.13 = 517055850fb9df06ab58cbedf04a7879d7d5ab14d4f7fc82546e12c148c8817e
+Nonce.13 = 6a05f54d40cba9ecf171dc09383f7a27
+PersonalisationString.13 = 5efea841b13e14689dde9a1af23b12da5bb4bc065cc73b29465b5544a98ab9f8
+EntropyPredictionResistanceA.13 = 1a21ff0822103cbb5aee0b88e50c5ae17130bd30b1def78805a5a81f630a9c84
+EntropyPredictionResistanceB.13 = 0e4d0433d01f1483142ee79c95af209ab9f0da4fa9c0e7bbe139240481104107
+Output.13 = 39591c4a55193a93c9e453bbf78177f80cfc38872866880d34555786bbf0b0ae1f2bf2d2b17111c5a3e3913bb5095479752e6f42e940d7741612360fb23ef6c9
+Entropy.14 = 7fd0afbc5a9ce5cfede0abedbe614f7aa264f5ee51db3e7b5c693cbe0012ba9a
+Nonce.14 = 6b43212ff94b8a3da0b82b5f14beb011
+PersonalisationString.14 = faa7dfb1132775eafc85f97c4b4d059725578f269155617fd9f0ac389d8e6547
+EntropyPredictionResistanceA.14 = 1d2c0ed4c57d777d44879bf336b80ebbb823151557f99c3769df390790445eef
+EntropyPredictionResistanceB.14 = 7bb5116dd795fef7c4524f9ac3b821faf060c209818d17e3c6cbdf7a3a41f1e9
+Output.14 = 4eb2a1bfd4fe7416800623ffbae02bfe30d816c8a9b647f6092c1aab99d877c1e6c7a116543705cc3f9416518333d58c58cc724ca1510398bf8248d228544a15
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 1fe5860d25c6fe83231de9b65ecb7643444b9737d2ba08359b50091d6dd2809b
+Nonce.0 = f190c01d0772a739e1b249d85acabec9
+PersonalisationString.0 = 0a714c2c9c144bedacb59b1059bc4583cc2d92331ecabf146d4896e96d830ea8
+AdditionalInputA.0 = 98958f557cb24351c3cea0278018f9dde61840f51f36ef64d86414a27301ef65
+EntropyPredictionResistanceA.0 = bdd1bacaec39e192310744eb254a3f05e61b2ad419611a43147744a444f154d6
+AdditionalInputB.0 = 55155f752cb5f53b491fd8abdabeec22d5f35b3af49484282febbd794cb71282
+EntropyPredictionResistanceB.0 = 480d2dd9389baf09755c78d563250e92248f0f5cc5067ae820789305c0a4d626
+Output.0 = 3dce54a99d9196df3629a2957720aea394e1573c2a41f9a63325ca57303ed0f4a34b39bcb5537498b71fdd138e0f8303e54f8ed412d82c64754d278a8b68bcd1
+Entropy.1 = b9dfc4d8920495a982b5d369b9a7064d4a072c4f336a942fbd28941aede3484f
+Nonce.1 = 5a6cd95e00bd4cf671c7e7aaca97f592
+PersonalisationString.1 = 1d699f24d8738481577ef4768bc06df8b7419a7bfb02b9e4b181dbf492860547
+AdditionalInputA.1 = 92031e291b34520624374b24565fb9643f26a78cf85e8f89a1a374a02f9a2c76
+EntropyPredictionResistanceA.1 = 29241b652e3424ac5bd18f86e1e1f8462e4ef5a672a1b21ebc6b244e7e2e3045
+AdditionalInputB.1 = 3033d7bb1543233f3dc169a1ccbb3c47e261e30380308619c84cd60a13daddf9
+EntropyPredictionResistanceB.1 = 9f3366f960d9c7cb2d05683d4b43fecb44c268bf87dd436d5a0882de904fb221
+Output.1 = 3331150c627585fc52715ac7ff83cea265ed5adbb1d30bda3f75fd398c6f9a81f1e7c4eae5d7c3623dd1dc4a5b8ad4a421b3daa978666fff8be2a0b643b09560
+Entropy.2 = cdb3f016b2244b9e55b5f1191978449239c191a2a45fe0d19f02e2923c3612dd
+Nonce.2 = dc1fd8b8d1ce820a4dc745b99e657f62
+PersonalisationString.2 = ffa260577d92d0ea9665331c3e18227d5c9aea46a7c36a762fe1c5a66e73f80b
+AdditionalInputA.2 = 87f4d82b141d38797d526ba91bd4486949e4adadf45274ebb805e18cf8f9c05f
+EntropyPredictionResistanceA.2 = f91b417c0d8fe453b83a9f346eab8c8799b03444e0f3a4e5dd5cc086246b0d45
+AdditionalInputB.2 = 10eec68ebbeb48bfa6b471355d38ae5d6861a6f6ff36854866e8b77b3be05f86
+EntropyPredictionResistanceB.2 = f6cbb85238b8628c4a1d12c365647e06ad60070ed285ed37b3e3422ffb96e836
+Output.2 = 5b2c8e3bb473d94c677d0bc3b374145bc879dd46b759878f33656cafa88da7c93686725d82f987dde66d035dd961f51976cf62c78e14515081a1b04cc6117602
+Entropy.3 = c904ac8b08ba8f4ca1cb93c67fadf1766fc15979847c3f453af98b55a4e2eef0
+Nonce.3 = 457a6dedfbdb56748b05a521a2c2a0e1
+PersonalisationString.3 = 524e442ebb6467f81da6a4ab759c30cde541234fc69335d61476a3bd77f81877
+AdditionalInputA.3 = 179c68de667af981e1a3a87975fa94f4e2c0f0bb8708b93f7a91e0bd6ecf8ef6
+EntropyPredictionResistanceA.3 = 3a22a1ecc88e1e620fb8538eba77a33153c6f5e43bb786ea1769beb25d7edcc9
+AdditionalInputB.3 = 18acbda0310e1444d7eec6609a47f3f2e2facf4136f4ee9b60666c17eabab29b
+EntropyPredictionResistanceB.3 = 3e295828043b6cf7c2cdf3a763fd9deb7d0552fd5494074e4f80fa5259a07e3a
+Output.3 = bd6b640b138fa0c2ea56d81e85446b88700efa66e3ed3b8816e2e31c9b49bfa64bcd362b1ac7c898f445e9ddc8a3db21794ec077e7bdd8d90791adb2b5cf5a76
+Entropy.4 = 7428063cd1d8521dd98b9ae1b1c7c7533d79ba07760b376c59eb1d58fe05a6f9
+Nonce.4 = 79a932f0b957084776072df8e52bfe8e
+PersonalisationString.4 = 8db7740a7a301accf6b99bb9c87d07da991ccf2c7627e9b7ad2d731a90790677
+AdditionalInputA.4 = d7f0caa7397860c86cd14fdd076a6aca5209326791e4f47d266001161740350b
+EntropyPredictionResistanceA.4 = 6d0d3c478223abcf5d85aa06c8fa97ea2a97f02716753e2359de9e2de5f38b79
+AdditionalInputB.4 = 8a76d7d3644a97741723a5e232d1451ff789b5ebf3d7ec78013e8e1ef2b4b3ab
+EntropyPredictionResistanceB.4 = 11fa1a9556eb564e744dc05ac41c58b3d351e000c88bdf537163759a38fe68d8
+Output.4 = 0385d44722ce60d2ac0b8f35afd999efbf07c736cec65de069300bd64ab0e2daf074374b171c3622a8b0b554993bcca4caa578c377bdf5dbf510e3b4f14b6fdf
+Entropy.5 = 8465f52f8cf1c280daf34803f5beba607dc192b2cc99db215d24e8540d0ef739
+Nonce.5 = d6b8521d981235fd4ec852b759081c0d
+PersonalisationString.5 = 8f149404f4cf6b889312684f41554635cfb8fb438fb08e9102cb687c95e91a0d
+AdditionalInputA.5 = 00f2149758668a76ccc261195bd636523261047b85c4e9a649e6c3aa5e43860f
+EntropyPredictionResistanceA.5 = 918a302d6e0fb1b1a8414cea4398b56c92c143e21204d7a22087a2b026613762
+AdditionalInputB.5 = 21ba9abadb22948799399fec93339beddc2f07c576dbfcbd0713477fb692746e
+EntropyPredictionResistanceB.5 = 78b21f28540b070621cf133c2ce6c2a8b7e11744016705b39774b32f258ef3cd
+Output.5 = 89cefa961f9c17ebdfa141dfd5425694cce1c3ae1b4e34e8b9dbe625da890041ce0022cea55f6f1fb13b350139095f0896029914a7977e10e1a988588cdb6751
+Entropy.6 = c24a5ac7b973115618b3319800dd4e22dc536f3ccab2ca9a2bb32d9b1711d261
+Nonce.6 = facb57dbbeb73f12e567f9a8a06684b1
+PersonalisationString.6 = cf07ba3dad1c2d02379813a146e088b25404545dfc7e4f7ffc358ca267cd6c65
+AdditionalInputA.6 = a5e886cf4a16c033a756cd01c224b69485a6261945496be4913648ab00f3b35c
+EntropyPredictionResistanceA.6 = 91cfbc7ce10ec393fb6a4ecd495241475154412c59ba1d18394223a82c4efb63
+AdditionalInputB.6 = 129ce3b5df7b42a81038e12c7a081858e7840bdd472f109f1671c79f6ff98c2d
+EntropyPredictionResistanceB.6 = faf14d6f6ddb1dd9d04a8debacbc61e0605a801d441187c3ee95733449aa1e93
+Output.6 = dd3729c1c65826e68d8f2b7906b0f1a4c21230436724246391223d3b61a5050067eede65798855de8aa0dca6cfb049ffe84a1febc7e9fe65ff172a1a06dfe872
+Entropy.7 = 7e2268539f626c431aab9a5f12a1e64e1bd81c2e05e84b8a1d8f1ae654523f25
+Nonce.7 = 0f6399fe5602b87473d8f9d4d3ac9b52
+PersonalisationString.7 = c85ae194e9afaadbaa7a1d2cb14eef49eb5a3f8a4523489645230111bc015eec
+AdditionalInputA.7 = 1a7b5047c05630c4ff15054ef2e3696808c1c6d1393eec4e85a2c033f82418e4
+EntropyPredictionResistanceA.7 = 9e6580329138c25b9a651f0ffb999d5cf02ff3a33334492427a2fc94ba9f3613
+AdditionalInputB.7 = 9f6f40c3e9351cfc1c5172e4f713ca96b3c184e9a69be6c8f4ff5402b0e8f48b
+EntropyPredictionResistanceB.7 = 7f75698134a0a2dcbffc82d57cdf403b01420b5b7a59affd67b77b7b1adfcc82
+Output.7 = 9240837060ffd604b3bb7f35ee68f34b844dead7a89de579ba1fd4ecb1625e856b5e53cee490e3648277415be7482950ceb5bbead027fe36a9e108b7ae9a7f6a
+Entropy.8 = 2657fbae4811444da86fbab9c50bb893edd5dc936827bebc05170115ab039c79
+Nonce.8 = d0004ac39d197448cbad726d79cac98f
+PersonalisationString.8 = e55804e25814cda17d635fa0496af06e9f335cdf3d37e87f49bf9cda96ac7d49
+AdditionalInputA.8 = 29fd36313457fad56dbc11062fc8f7576c0e5f38eaf0b264b165f4ce64e3fbd0
+EntropyPredictionResistanceA.8 = 29dacc26d489059f4ddec62803916902670267d8325de314dee30f49b89ff91d
+AdditionalInputB.8 = c0bc8319ac316ae6f71f7c51793633588832733b7b5308f2ab3eaf0e3ebcd87e
+EntropyPredictionResistanceB.8 = 5b83a4f21c4d707c58007d04781a972b5abb878116856779fed9e6e3b9e44a50
+Output.8 = 36af67b57a2cd2de3538cd1a6028a497f332366f3583040d8753222d1491fb8f03db97b08ca029a1bb2e4df8ed50eb003d5d68e15b23e9a479ef7817331576b7
+Entropy.9 = 08b232319bbcd5bdf272e3a0d411666b5676a03df6fa53a3ba71cbb5407242cc
+Nonce.9 = 919bfe0775d273fb20613dbec0c18c6b
+PersonalisationString.9 = e83ae8a52b778b267f67322ff389cf4ea5ab5d2d8357ea0a81604a7ce4996e16
+AdditionalInputA.9 = cd25d8c78842e40d8607d3500042ed20f1e01febce4f8628d4255dd3db55375a
+EntropyPredictionResistanceA.9 = 8af2c7c2065085688343210be7791ebb71419ea26b082a2894980087b0862881
+AdditionalInputB.9 = e2cd6996b83a755a66bbca248786730cfec7b4330c63381f1f465622c0bbef51
+EntropyPredictionResistanceB.9 = 7345a569456c05fb625e36d17af71f83d9bcc42649404ca80d22798659c8d4c3
+Output.9 = f8f429ecb599a88f25cae9a90bf448710e9f5bd90f42c936ebcdc8cdcf36d9043c64a81361c12a67c2f480603081c19f64efda6186714ba44d083c60cbb7fb47
+Entropy.10 = 783c0285009f2046523686e3a600ea95847276764d57e8ff1cde26e9ef2b8e04
+Nonce.10 = ce5a199d4be8ed1ea6df260b1a9117bf
+PersonalisationString.10 = a2be1b21fd13efc5532fbab1a28270b201b4a6e65c796e22b27658b1a378e6a7
+AdditionalInputA.10 = 3e409f02060886cebec30810630853390c88ae31a61a30b49c42352747a19ec8
+EntropyPredictionResistanceA.10 = 05841948539e4bccc15d6b70e40e30ad0e8b21c9ec0d4b015a2a568961e367ed
+AdditionalInputB.10 = 1e0958a55a4053e1f6483c943dbcfb609d0376f26bf00d90d6787931047716f6
+EntropyPredictionResistanceB.10 = 183a461279348e3e4629637201a11a1e40edc8fc181cc89224612661ae172a1f
+Output.10 = 202e9eae40f4dbcca674839d26aa96e01e7786afde1baa97d12701089ed6e7145f96ad685c06ee6a3cc2cac31fd35eb184160cd3acb26bcee7d3f91b995761b2
+Entropy.11 = 8048957cf9606074ee6d3943305c17a0b28181b90769f5d93a5a98a231a037a4
+Nonce.11 = 7e32faa025d5b1e3fe366da5b4c407a3
+PersonalisationString.11 = 65ab0a82137fdd84e985f5748185979f4218010c036d72feab40b38271ca0493
+AdditionalInputA.11 = 1b7b3cffb56b5a86a9ce9b71240fc3e032da7f83b34782bd6b7d53d86c00fee6
+EntropyPredictionResistanceA.11 = a444390de243b61188567083f5ddac45ce0a07f1d7e0778cc4a9a44dfce524d3
+AdditionalInputB.11 = 2829b19367ff152d6e43ad308e776fea646662e215b328760b09f7e1132618dd
+EntropyPredictionResistanceB.11 = 4b1e9b9ff37ec8e5160cfdc98a45bf1292224347c095fcd306acee2256d350ce
+Output.11 = 4c00083e358dca53137940fc218be659d7c112466f175d99e5d97381eb71912d5609d826aea0838b64715e226eb7a87bcd868243e62590d6a1ab6c60d714706c
+Entropy.12 = fdf6fbda2e500d5a0ba69aa28a7076d86b681d0852236f7084eca99077e54e34
+Nonce.12 = cae5a238a0ab8a2b343293863d1de2a7
+PersonalisationString.12 = a9a21242d9a18f7fd34c426206b6b750f1077cd62b6a023b463c0860f119638d
+AdditionalInputA.12 = f5019b812fcbcbcc0d6aac913f0477a5d08b50d694d79c48138a35f8fc286adb
+EntropyPredictionResistanceA.12 = 756e91f84a668b65109fd0daa9e41a2926855de031a7caa9ebb6f80e55b1d791
+AdditionalInputB.12 = 4909d235c21f5e2d9ff12ee9ce789cc967f35a88c7c1b18e60e7d71c935b2c62
+EntropyPredictionResistanceB.12 = ae66faceb54b68941f3512bfdbc006fd2c1edbde81cf1d216e1acc2dd9598138
+Output.12 = f5a5bc69797d03da9e313759717c5ff4c4eece3caf3504490e80ca567ab16f3cf7b57877bc0d0f765826b7451c3454c7efd48231dab5ac840d1ddb04fbaa8b68
+Entropy.13 = 6e1064ee9e8081ba9f12fa15a14e72a56a0bc4196a965a92f02537e811bf2fa1
+Nonce.13 = 673dff90ad328c323a1c249ba5d873a7
+PersonalisationString.13 = 99d55d705456c212638ce657d9275d9a81fa912c9f67ed6274b623962573b7a1
+AdditionalInputA.13 = b996e1dd92cc2701e36cdcc692a781d0889647a5d3208f41ea727c6d241de11d
+EntropyPredictionResistanceA.13 = 07b4489c545f1fbf4c7158fc472a5b6598540683abffac615c5a64587bb82efc
+AdditionalInputB.13 = 5cc28e4d5bf1910fd88f9201acab65b5a277de2ddf52868528d99d12d580453a
+EntropyPredictionResistanceB.13 = 6c708932a80d3743b26fa371f3c4c2489bfd898ec225782ff1179dc0874bb949
+Output.13 = fb1c03f8c808f98e8577541b046198720ffca44ebb85a4a073198b170299906e0c1b19cc8846ff38bb67fed1ef2c49183e9189b45e5bb4b0967aedae6d23a58a
+Entropy.14 = 129593ff4186cd0a3998cfad1cce165bc2600b4f72cd359eb9614973d844f354
+Nonce.14 = ab7f73ef5f12e2005193a30ec8714443
+PersonalisationString.14 = f8358e8326c7eeb7ec04dfbe075c15dba6642d29527a1a06620449efa7738a42
+AdditionalInputA.14 = 440391fd913a1244f0dc7cc511a968ffed709b4edd8d240882744165906239d3
+EntropyPredictionResistanceA.14 = 130e776811a9ad546cbd88c4e210542f698d4b3d1e71739099133f8c620e21e7
+AdditionalInputB.14 = 9a55d683123e51c95db2a774a4ff0c5274c12368237bc11ab07f031c8aa0d705
+EntropyPredictionResistanceB.14 = 0c15cf3b8d2f826c5d04d55e1efb178be910f717b64b0526ed449e4545f7e8a4
+Output.14 = 40d6b69fd14a2002e53c684c76ad794dd6ba07698d941d727a997d3b3ba117c2beab5d6759058c0c9e46126b56d6c753baa31e9ec2c57b1dcfdad87899883ad9
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 11c1e5a6f84f5733b77d1f0ae4fc38a07e8cad9fc0ab987bfe071947a54e2cad
+Nonce.0 = 68ef00f22b20f3158673c89ac96a55f2
+EntropyPredictionResistanceA.0 = 0bd0552e812fff18c532bb57cb62b92a4e61e3e961b895e4458bf298eca837d3
+EntropyPredictionResistanceB.0 = 54af1e7ff91533d0cb546e85ba2910ba4adb0474e63b7f96c89043f5ab70e925
+Output.0 = 736e678202e64c8c4774daf6edba976e68dad54fc2ae713baf7799c8dcd98a0d124ab552be801137d7643ab11a902e2ce6073664d62b5eb9f50af57dc9bb77a2
+Entropy.1 = bb68de06e752a9e7cd808e27eaa586ea1ea50d028586e716282b30ff808cb58a
+Nonce.1 = c5e3a2142a079cb2a1b55fa8ca20cc2b
+EntropyPredictionResistanceA.1 = bd7baa6c7ded0a679ca6ffc87f6c7b549a51abccf656811001c6cede851adeb8
+EntropyPredictionResistanceB.1 = 2e3e815c6384543b222e7b4c8c600f2960ffd987d9439a6d14e4234a36554791
+Output.1 = dd672f753f5115378230d5e0f08e872873adf992e2f7a23294ee88ae5730a82c8afd260e9ef02c5da6743eadc0547f2695baf158558e187f4bee836e5954d4c3
+Entropy.2 = ce36c554e3a6f9f6fe4afe2102602454d98c5ac8ddee121ecca38240d2ba6463
+Nonce.2 = 5f38f70e8c0aebf844f93d9b477a7a12
+EntropyPredictionResistanceA.2 = 6464b3ab301af24b7e26ee3c9cc97d61b900238a806d2eb87c264e18259dc649
+EntropyPredictionResistanceB.2 = 0fe090b444319f54ccfdda4ae978cdad6785f6bdab234e79be658ee74d8c5702
+Output.2 = f1a42ef1b5f3248649ca26080c73276e48ea16f8949d718f8c8f3bf85b7c45b58f820fd4d5c3e79567104953f113988675c61997afb0f84dcee8a658d14450c0
+Entropy.3 = 8f526ecdec661930f4ec0db1d34c4fdb81dacc308a85780f259ef0ea30748bc8
+Nonce.3 = 09eb6d69207a930d9046848ba8be40ec
+EntropyPredictionResistanceA.3 = 4a0e293b7152fe7c8e3af4bd88c0c50631a310d057b09bb791f99857d4222c5d
+EntropyPredictionResistanceB.3 = 487f436353199d7f79337cfbb4b216039c7d8ed08c0ecfd080d2c0c4c426d141
+Output.3 = 6e9e0ced10e7313c62d2b2d1e89524c883cc179e36e80142843adbd6c7556c067cae7183d5a04037c39a0cd8bcaa192317068f144c22024b33903631bf845492
+Entropy.4 = 739ec5700f5248cbb648be9aeafa9525a225e4c2ebce3e81afb957b9090987e5
+Nonce.4 = 6e2b9bfc28586f6f795db258da06015a
+EntropyPredictionResistanceA.4 = a9bea4af42078b7ef010bf6b79892ca5a93dde17434dfbad7e8417f62f57ac9e
+EntropyPredictionResistanceB.4 = 92b37560cd72d317b1294aff70fde4d6cbfd5b7c3734f821bd999413954c2392
+Output.4 = 37704764b13cf32db0ce6eacf920d2a3007dcf878e481aec4c07291d9ed8aa93651c536eaabab3d44a5781ccf00d8fcc1ab2fe3937affc5f7755027afc37fe36
+Entropy.5 = 9f09c4e2730ad83b23b89b886835f2735ab00e57428ac27051a5d2ea8ac6968f
+Nonce.5 = fa24a51c411cd8298502de20773677a2
+EntropyPredictionResistanceA.5 = 5bfb7f78a3c33dabd6249462eba70f5c4bac72229070efa4178259a23fbb5b4b
+EntropyPredictionResistanceB.5 = 1bd6123f5e57faf2bf2e7ecdee254ffe2fdc9dea936480c53a57a51264fb8746
+Output.5 = b14d832284b335192dcb895919a29711eddc91ad3ad4b488de26531e16db47d239fa9e03071d1607424372c8e0f58cb9d971fa4507dd58d30dc66029dab65fcc
+Entropy.6 = 315e35d0338fb2690a06e363d6638aa837099b6f25fdefbd194ba0e48f6c099c
+Nonce.6 = 6d8f59086f297290818f534d5eedf96f
+EntropyPredictionResistanceA.6 = 40586afdae483342a2f87bed9161c1a8d9b849fb0fd5302681a2bcf164882c30
+EntropyPredictionResistanceB.6 = deec5394f92e0b372722da459dd05876553fffd252589b9aa3ae380a19a38698
+Output.6 = 2c2f04e3121f4e317a49d0fbf6bcfe5bd6182c39cd5d3d6d5e558d1cfb51d3e93524173b0a91d4ecb7141ea216e1a0345205d98a16f4f6c5aeb4b153d83ee725
+Entropy.7 = 5aa7048fef040c8f56aca68a46900fe14862d667e20ef7faf4a67e1d75843781
+Nonce.7 = 2ff073fb3af5adc9bcf00da57beb525d
+EntropyPredictionResistanceA.7 = 8c838d5dcbd3c45b36e1a09ffa50b32e1c7896951f4c2d3ecf622c9f2d7ae3ee
+EntropyPredictionResistanceB.7 = f77bb0e17e9e398eeb04ac5228fcf748d6899bae78a7dbcdb910aea053053309
+Output.7 = 3bf148da2da03a69496a50faf189657649058f7c6617b11a351106898ad8602af8a5bb636e9a456ee93c96525dc4838c761546c7712f1c39d1f6b1cc36e9649c
+Entropy.8 = a0ddf3fe341a71198c0158ee50181984032cfb6276deaf8b4318bbb7edbc64c4
+Nonce.8 = f21d589a47bf6406b6dc5b989801d88e
+EntropyPredictionResistanceA.8 = c179e01e69f28aa77a861f114f349a3c56688e57cff1b1e88579cd7dffdafb83
+EntropyPredictionResistanceB.8 = e473cab76e5fad3b118ddc00f90fe7f07c1de9f3383adfe00aff33fc7cf5ebda
+Output.8 = f5bb6f85d6043d3a3ce323d78fdfecdf3ccea279c70cbaf53fb324b4d65999c40552d47886d0de79a449d0b6c4a9ba787e0878e27436ac3e56887c9cb8cac6ce
+Entropy.9 = d64d63803624ae040a925e209e21002a28d6521c8e9d0f905c3c79348444c580
+Nonce.9 = c84c8953248e1bc2cf0096df99c9f5b0
+EntropyPredictionResistanceA.9 = 501a8527c882b066bf9e71885fc61c9491d1b338ca7a44015b9739faca75585a
+EntropyPredictionResistanceB.9 = 458399560020618e1ce0beac133abb2d6def11352216ae947b5ed0267953efc5
+Output.9 = 710cb3fa8b85956c76567c902f58c54555753265e8de6191f2bd1ca2ee12d509acf83cb5c1bc058faa7b8a905426efc9e651a960c81474cb6a35be86943a1089
+Entropy.10 = 3046214506325d805eca77ae7024bccf17adb8cc734de5f7299a7f249fcd77e8
+Nonce.10 = bf71f7b20bb8c642c9656c849e9f9904
+EntropyPredictionResistanceA.10 = fb90cf3bb53b1eb5f97984b268f6fa11fab0c705e3247a34abe833a63a013370
+EntropyPredictionResistanceB.10 = 487cbad0ffb95f7fb0e0f6804a6210d6ef86a9572c61c6c2cca810941f7ea9d0
+Output.10 = 074948b62087a29c6af823e1cfaaf02660b642dba2cf49a1ccec9115bcab6844d3080f840b44aa1ff6e8b48b1e00921ac94f9bb32c62f1cda6300bc3f984104e
+Entropy.11 = e98c865da5401378a8632f71fa3c40aa5f85ce57cd9e9ccbf6552b183a6423b0
+Nonce.11 = a2e605f26fb34aab7875094fff359601
+EntropyPredictionResistanceA.11 = 157e410285c00cde99ffb8a8dc2a23adc4a74523798e0381f5613160df78be9b
+EntropyPredictionResistanceB.11 = e4077c63904c30f1c095217d563c31226ba765701159bb194088498a10f20e74
+Output.11 = 52e6fc79808697355a5a1ea7c43805da4b3c5af1bfc49455342d10c047da21abf2a99488f9c3433eedc8f087ab4ffbdd25731b36ddb2f6dd7a676c0d05249266
+Entropy.12 = 5c66e2de8c7ae2f5276d005ce0c0e0c4545ee2a07371a026e970e165336e0da5
+Nonce.12 = 1e8d441f5ee3e61ccaffe035b9abb383
+EntropyPredictionResistanceA.12 = 95e3ff9501ad4633f32262d637e3db4ab262a5091bff46ec00f384603e32aab7
+EntropyPredictionResistanceB.12 = 41f9febab7d5f8735dddea04607ab6e5fd965cc561f4beaa1788409ba684bf60
+Output.12 = f4b0914cec0261e049ae3842648067c611596c63f39038cc5aade2b7c123142cd9c0729e25bccdfb6052deba318514e819e91f7531065281b6d50469fe94b08a
+Entropy.13 = c5be1eac273675d6d2b57ebe3bc8fc705c116a26c1cc4aa0cb7fa643a7ba6f1f
+Nonce.13 = fe845e6a8a9ac1ed873fe1a368f769b9
+EntropyPredictionResistanceA.13 = 8a2adf2154ab5807590b9e4e1dc54761f0a434ea99a03b0bd47b5f2a75fa2dc7
+EntropyPredictionResistanceB.13 = db11e94ea2a446ad4cc3f6d89a751d7968793403ae982861369d2497116a314c
+Output.13 = aeb505b4c201b316ac3898dc773430063bb7c9af2e44be22d0c4b1be5654187bd43df5915748eabb00f88e7f41d35945f87a421367b2af1ac0f5f08ce90d8af8
+Entropy.14 = b3629c963f7e81b2fac494d54343faa0877833d81ce45af3959340b17be21fd4
+Nonce.14 = f4b541d665ba9d43d8ea06d64cb51814
+EntropyPredictionResistanceA.14 = 51d7c659bbe1c8ad35090756b804706ee46c91541b9d419bb9122e3b75d4e8cb
+EntropyPredictionResistanceB.14 = 343e9451f16423c97aba918b13662f47c4fbf88b1910a0f1082695ade8c33157
+Output.14 = 49c2931f3a86011650e471843b0256fe4b7542a72e0cfe56bdadf6f0afdb601e6145e36d72704298c3f2e142fa41eab7c15ea9ba349a0409c12ce62477f789b8
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = f0a997a4f7360dc1b642dc13f696a3265c5cbb217927b622cd3dd6debf142728
+Nonce.0 = cd563217b58b91b4e500a945f15bd545
+AdditionalInputA.0 = e697fb68e5bddc65ca91526f014cce301aaefb82fbdfedc500149aa0b1930bd5
+EntropyPredictionResistanceA.0 = df5e72d1423857e7112f598ee1112063b2aa62ecf2fbd6a8b77104e2a11808bb
+AdditionalInputB.0 = 202e494056e85b0a93e8b8990ec48672c687c516f58c953dc4424745b09dc8eb
+EntropyPredictionResistanceB.0 = 676aae87ee172017a69a88a97ee3f18262c4dc3d9024700e6bae3aee1d937550
+Output.0 = b5d925d9bc567a440bf1a3ce04bb39e800513202a901f9457abeea6b6f67f9ef099741321a7e382d0d5d873e2f4b6648a17ea138feedf481d5f66947a7b0bd64
+Entropy.1 = 601a594192642b2cae1d09b8d4229686f4dc94adf8215ae94c70f7e968a684f8
+Nonce.1 = 00846aad2d58de7180a31adb7f30aeb5
+AdditionalInputA.1 = 028ccb1a3e3fe0b64f43d48798edda14d09bdaedce5885aaf4d6a2793d29ffb4
+EntropyPredictionResistanceA.1 = c3736ac5a8ebb3db8d2c7f713110588af79ce1eaee0984d7d95705e7731e5d6b
+AdditionalInputB.1 = dc3df61d29fce875839d6cfa221e40dcd621e666f96ee25cca8df16aafda1d21
+EntropyPredictionResistanceB.1 = 9aeed6f9dd845bcc50e5058c03057a05ce745ae0582e664e2b70d6354e9681a5
+Output.1 = cc8a680e003ad8c571732784b02903fdc41899cd52fdc96b41472eaa70ccac260a63d3066b38023fc1cdcf973e8044a3f80e16eafc859a8f243702a79be725a1
+Entropy.2 = 4dd599cff6eff76da02ba95440c82e9fb7ff2910770c5d9b44db1a149dad1555
+Nonce.2 = e09986dc2e15ccbe750428321c1fea7c
+AdditionalInputA.2 = 72e084ed632eaefdb6495b156b4b4d150bbb7bd336fccebda630998d458db32f
+EntropyPredictionResistanceA.2 = 22f4283fbc59c1adc1aa79fa633b00555b59ca8f396c29f960e550a87b9582c5
+AdditionalInputB.2 = 3d1e9e2e8b17fd31700331602096a4632114de81f0541a5dcd3f171ee6db68e0
+EntropyPredictionResistanceB.2 = 9ff20badb6b75c383d181f943b1656de9279598a52fb317a18df2ba72fdded74
+Output.2 = a98ffd9d9a22324de9fdc883109d6742f6271b0120dd9ef10d7ad41343cd5d95509c8ce8f77dbc3c276175306aa62f4130eb5b8b27a651cacf7953d1391fb69f
+Entropy.3 = 35d303f91d7a0c7bbaefffc60536f1aaae55163e7bdc4422143d9853cc1ead8a
+Nonce.3 = 156ae7594eb7553eb1c8b5e9790c5da4
+AdditionalInputA.3 = 8427c913040ccd78fb7ea1956a0469b0d8866ab1af205e360e1c58e6c0fa7b91
+EntropyPredictionResistanceA.3 = b8703be863c0799268c61e0d597f4f871a0afdff7bc099cbdf6bc265661ca338
+AdditionalInputB.3 = 260c5bffeff5641c977bb364c2e27d9a8a8516c21fb877d9d06d16d2db1778fc
+EntropyPredictionResistanceB.3 = cdd16c96993bf2662b7314766cbe308b72c542fa2756fcdee08da2238ec8e76b
+Output.3 = 23533736cf0395671498e1f7f9ab49ddaced846175d92442db5acd1e298dc28ec4d422e9ec972e9aeb635a30dd0e67f4d30d45044ebfbbd76a4cf86b80073e06
+Entropy.4 = eee620fe237de2345e3b8c8e91100f5e7beff532ae5d77fb6a576df2536f0fb6
+Nonce.4 = a2aa776e7630fa1713788d0e02ad5337
+AdditionalInputA.4 = 0ae62e9c91825ed1177fde0507d23d57696849db238fe4196408abb55772f1f0
+EntropyPredictionResistanceA.4 = fb788aa6152c4a79ffb6a8b8933187852e364463e00c8763b8fdcc17ee6d2630
+AdditionalInputB.4 = b1b8a4b1be8100f810708bf4ecc9f5f446372fd70fa0216e46cbffc41559e2f1
+EntropyPredictionResistanceB.4 = b99e0251d4587dd4952e383a841d6bffb93fc42b2878b304e490e66466f2b34c
+Output.4 = f03baa93693327a0a68886cd62a24048ded312df71873e962981c438dce8d56f03ebbb67c497d94352aa9d00d58606c9bfadafeb37ed80a07facc03d3641a16a
+Entropy.5 = 2aa4f15ac21e48b67ad5a32c739b80517cdaeac298f46f18ba5be3efb40c93dd
+Nonce.5 = c1d2f5a6d6522f3cd2def59f344a14fc
+AdditionalInputA.5 = 45379b771ebccb69721611e974ade24ba7d01d18c1881b0cb5e68370a0ea0665
+EntropyPredictionResistanceA.5 = e993fd24b82b6244e1bf60c5945487c2a788ae1b3e55dfe12fec889e80f9ee6b
+AdditionalInputB.5 = 76b00404d88be22d132a868f07274643bfb2dd71dd85ee18f1a706517abba8d0
+EntropyPredictionResistanceB.5 = b46a121cfaacc897cf8c7ec7ddff843515d0733bc766ab6c5a7b5056186391bd
+Output.5 = 7f6ffa3f3cdd9e1b2f1960ea7d5b358d0013f9d6285590431d017522e2db0277cc1b50bdc82a50286937617e342a8ea2562f7d59e956549f49ada9c065146753
+Entropy.6 = 964671454fff7945e9d4722a449ca8a0795534bee6a06c2b43b92a7e6a0744ad
+Nonce.6 = c4e91a4eafc0346f6ff9627410b09331
+AdditionalInputA.6 = bdc33761fdcb98b98e566573e14517220f956d4eb06a9fe249b9b999c68a947f
+EntropyPredictionResistanceA.6 = c10d2716cbade7d954e12c34aaf8b394e8e35320d8103157dfee9e382e5add79
+AdditionalInputB.6 = 0d47db4c8eda48fc3f46ea30332ffa0f0b1f6f2e3ca0cdccab797f384ad1b7f1
+EntropyPredictionResistanceB.6 = 871deff9d6f4da3734245f6b0ffa8961186191b19a9d2d89ad5ce6ce0466463d
+Output.6 = 388abee56dc46eefaedfb00a67616540033886d911a537e686834aa290c8f9f6f9db418a917451a7f092a2e4712f66988f1529ac8a88b9a4101cf22ad1fe6fac
+Entropy.7 = 239d5ef289625946873d30b4ba3aa1f938156ee5101b0c9475af5f11934a95cb
+Nonce.7 = d40bd689d548bc6c5e470dbb27ce105a
+AdditionalInputA.7 = 8c32c0fe20b0de59c4fc211c8d203a5f85bcf4010ce5b43fb738e0026d063115
+EntropyPredictionResistanceA.7 = af5760421bcfc78bd19eb6e255798dabe7bb4113dca61eb6fd28dd4e2859f01a
+AdditionalInputB.7 = 8af5be7f17f14be505e1a10b7a208be17650775cb8f71db271025ba6a3188081
+EntropyPredictionResistanceB.7 = 18147b05576674aa546aebe01b78a79dfede75b1c719870091c9fc4ee753ce47
+Output.7 = c8fd14ebf38646eeeda8ca47cb42f5dfae6bd5d965cae3283b0560ea67263cdf9bd3cf6d8b3e11b3b0eb79e825b74772d0dfa4f5e229b854da6a050495cb917c
+Entropy.8 = 971990d965615b0ef8ee5492cf9e523bcc86f7f794992dd79b4f005b81ffb436
+Nonce.8 = 259c50c2566b6c123faf7d89b396627b
+AdditionalInputA.8 = f64a3961d4616b07ccc00146902c261fd12030dfe7966cccd4c189cb51eff8b1
+EntropyPredictionResistanceA.8 = 353dd41239646d8db43ce9c16404071e5d853fbbe232201a571990bacf8f10cb
+AdditionalInputB.8 = ea0944cd1829cb4f2c505bb6e8378303fef98af002a7fb44d80cb8cdb343e829
+EntropyPredictionResistanceB.8 = cd39fb0f78c279c0324cb54cbc0ff56dbc021160f45e61f12363e9cb6e80b7a2
+Output.8 = 0cd1b036f20bda78a8191b3e4b598e89d6d1503ebb3bfcefa157ad82fb3e62e43af49ef874556c55abee8916085d17b0949870a58f8133263f2f46b0cb769da1
+Entropy.9 = 4828a5c3391b33ba02c56a5e7ebf8d57813c2a13b39b32a532e4eb54f98fa277
+Nonce.9 = 1f55298604df26a2c562a100cea5179f
+AdditionalInputA.9 = 723ce519e7933291ec5370e7081f424655229e5481d8c4ffb3370856b4690c1c
+EntropyPredictionResistanceA.9 = cf23a3924e154c75a0c0926eda78a0c436e083a696e15df6e986e35b8c86d13d
+AdditionalInputB.9 = a157de2cc4fd95815e1fdbece2b15c474ac76eab035a228343733eb623ed8b66
+EntropyPredictionResistanceB.9 = e177dc501e82ef1d1984c78dca621fbb0c73fe68dfd384761ec0d7d648a76707
+Output.9 = d754146572272ebbe9da93525074df357265095750687f672f1458f6ef2c4ea4441311871ed8052267a5fc6c0f3a65f35648028ab57809ebe56240d9a5f6629c
+Entropy.10 = 328a3af86893c21ae12159d4c2a0cad2da8720b2c1e1764c4119884bcbe01836
+Nonce.10 = 94e710ed0490ecd45ce89c47836d99f9
+AdditionalInputA.10 = 000577f0e9e50e39306a6564498a4b190cdbb87a917e56133a2e6dd066b355d6
+EntropyPredictionResistanceA.10 = 4d23932099e849a8058d3c36dc842c2bcd684eee2768137fa913582c0ef05fda
+AdditionalInputB.10 = 6d4acf66f27f44d5b545f81b7258e9bab9a66d1f1ce4f121c6515f857d5ef5d6
+EntropyPredictionResistanceB.10 = 874b1e1d2c9a00e2bb01611f2e5d6ca32e8a4216de85c40da7eb62bc98455c4c
+Output.10 = 40afef4ace548205e96257ca4ef365bb31acc3f26b3bff092436f4debca327992a14d756cd95d3eb31559de8dcc61990e26234ed8175021c1d4654a0e45926ae
+Entropy.11 = 4b11fafaea5a9945d20814acd87777ceaffbb44325f10125dd2b2f922c2078f6
+Nonce.11 = 558cc86623814b5c9602d56967068080
+AdditionalInputA.11 = 92fb305eb9f938050b78a3db1409043c5d42f9a6daf7f0527db7a0ce1654689a
+EntropyPredictionResistanceA.11 = 251e9f7db448d32bf5d1952903f686baec938cee8a8b1f40dfb933ef7d1dc93c
+AdditionalInputB.11 = a2ce9b84187cccc8859c9745bf8dc9c2262de9f5022c3d3ed8a6ed8ab19f4fee
+EntropyPredictionResistanceB.11 = 062c7403f21d7b516ac87f8075722bdfb7b7ead2a3cc3eae8fe9f0dbbd33ff67
+Output.11 = f8cb3e744d695c0c00c39d85437aede8f8ea280871fd35d008940dc001ef40364d3c736d073a6d7e0bb0c0601a3798d049632167aa33f281e11cda46fd5e8568
+Entropy.12 = 1099c7efdb1081ceaa7a6f499c495e5726ee4d28b3a46931386f025c3f5b3dd3
+Nonce.12 = 373babd6a0b020066d50d43e4622dc7d
+AdditionalInputA.12 = b213d8087d073a2470afad082cf6ffe8b0eaace7e94ec9e294050deeaf0a26a5
+EntropyPredictionResistanceA.12 = 9a56c7b25452e95f6064fabe8cbf2ea44dfa1144386a7fee37fee027a1ad5d98
+AdditionalInputB.12 = 85a0095a5dd2926b964a67486e8020c81f71811f74ab27938557ed57ef6f607e
+EntropyPredictionResistanceB.12 = 5c482a914211a716da6f3921f4aa51ba843602043b80895a7ebddb765171535f
+Output.12 = e5927eb793968377a487eee6297dd0d1d3f3b882d8f52bde518950201d003b1e398e3365abd1126bd099500f6e1a6c1c8fd362330921139d86dea69f1472fc77
+Entropy.13 = 23042c0003b870409a563056c2b48b6b2bcf29e52b2732bcd3a42aa11a45c274
+Nonce.13 = 928c3b683744befc6014d5406598d98c
+AdditionalInputA.13 = c40fa3cb9fb39572ac2e22b5556a2c75beebd8ec754d96171f1486a7845c6780
+EntropyPredictionResistanceA.13 = 3401bb98cd1c2d6a9bb6d788696de0d5852ad88615c7b9716a8706e9ccd052a7
+AdditionalInputB.13 = c16f6a1efb94b2d288c6abbdb9d0c565f5feb82360d9add56a452794214d228e
+EntropyPredictionResistanceB.13 = a1a114cd1a59b622b990f01b2d4740631e3a31d7356163bd0f7f6f8ef8adcabe
+Output.13 = 18da94a876532bb78be475df050300bbd5d8039f2f3fcff1017e05e2899c3a17d8f7e3cff07bcabecf11f806d2db10e6a979ab867b5a742920b2dd6f4d189521
+Entropy.14 = 1b46c5a0de710af4c1b3f8f77e0d50b52ee46136e9c19e50f1249ff1b0345900
+Nonce.14 = b287ec51ff61e2b0f8d2bcd80f528856
+AdditionalInputA.14 = 1a83beefaf543c6cd9e3189728625ea3d35fc0b87edb6355edc4d34747039d2e
+EntropyPredictionResistanceA.14 = b00f5b2dff8e566df949548c34124743b512a679ab1048424473a53569414e21
+AdditionalInputB.14 = 8224f84adc9dff6c3b0fa3d271d1f03696945241142ec0e845e75c56e290e4cd
+EntropyPredictionResistanceB.14 = 7fb6ca08e7d1a829ed08e5537cb32777a0c9e5353095f503fcf92b3b8d5d950b
+Output.14 = c572c77d608190e71022deb881225f87b6b1f129279e23178c731cc0a119408c6f8316c1da8b18a00f551eb6fdd39ea1ef4235c301d1c13348adc147d0fc3a71
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 38d54f709a274e0367a943b9e90f6fdb32412444941b7eab928705faa1045f90
+Nonce.0 = d4d5aa7a06b61528752b633eb7d777ba
+PersonalisationString.0 = 847313d7e4e02dd8a233c3a9fb77a3100912885be5866c8f44f47ad8489be3c8
+EntropyPredictionResistanceA.0 = 59c02e142db64621c163d86287be9818dffef5e9b015ba1a86f63fa8c18ad1e1
+EntropyPredictionResistanceB.0 = e32a2ae8547fdb8eaea2dea15e0e08d87616d180e49d84910256d333993344e6
+Output.0 = 4369fefdb93857ce6a50f5243709876a6887f7c8facc087db96164d1300301cfeb0bcdbb2538a4567ac3cff4b9c6c16de636c2c6449b8b55bb1d1ccd8728e2c2
+Entropy.1 = 98d6d8fe8d1896e9ff42787e6450e28b0d59fb8419c900d12140b1afe2b122e9
+Nonce.1 = 53145d0253918bd9b25aceebc1b9d838
+PersonalisationString.1 = 9ea95b5998841e916cfb685b362ceadd3c3b6c8d7e007c534712d824cd4b9a5b
+EntropyPredictionResistanceA.1 = e6462f4618c7a6a39bddafd051f88730bff125c7cbb97b05b7817f0022aea5c6
+EntropyPredictionResistanceB.1 = 248de2cca3e21aebdb0387ce404e12b7fcc2ad51d43e7b554eba565775f52826
+Output.1 = cfc3876c145567ebdd94de43d0726eaab0dd377f803f6cf8480e86a779d8e8efaf143d0d3d0f2392109d56604e367fdfc770658b56f1e45c32c9a7a5c3711936
+Entropy.2 = c5143e6d5b295a7689027939ed7830890da2bd3c7047a17df76bfe13cad8b2f3
+Nonce.2 = 0ea34fca48fa0e9ef1e9901ca2ec1e56
+PersonalisationString.2 = 7f7843866de22ad80ec393eb1f55cc022a4e9b6b62666dd228990c2a30fcb306
+EntropyPredictionResistanceA.2 = d3bc98ae707680fab6015c5c05c95d43bb86cadbe6149bff7203698d0ce3a9e2
+EntropyPredictionResistanceB.2 = 502dfa5033afd3b15c20a6aec22feefad220d026f83d2e5c5fa38f4175fab295
+Output.2 = 007221b25f1567bb34eea06e9a72b91fe31bea07ff3cc8203d57a06b6d9a3067552f629e036827e3641a8577a3e7e50b0df549c6424bf6dbc6363ba5446e2afa
+Entropy.3 = 264e18cacbf0ccd9db90cc71828f17aa8d0c92b0e706bd831f438b8ce4469dc9
+Nonce.3 = 423271815a47486a4ba7e25aed6837ca
+PersonalisationString.3 = 6e249ec456316b3939b0de9d84e02422d11da5538ab0761ea7e6b1b99b9ea80e
+EntropyPredictionResistanceA.3 = 626f2b1378790cdd4d27eeb1ac535a8b467fe1bc4e86b1ee11e4d431962fd584
+EntropyPredictionResistanceB.3 = 68796bfa2136297c0e928589d48f74c6b09f45a8b2145597276c9164272fc5e3
+Output.3 = 2bbb8c6f807c1dd2e9ec39a3ecf783754d12570102920f9b48d4ed04fae3375d05b7c186a58bcefe8d5d714ff43910a2334560049f95cb2af4bbad0a9b8168dd
+Entropy.4 = da4a5997de6f879d90338a05f48b1da82c42410d0f7f41fcdd77c3a7d997c92d
+Nonce.4 = a3f1c70f78abff24fc2c601002900f19
+PersonalisationString.4 = 6d9257d2c1a20a887c758f12faf2a3d1b819fbf6f5e06d6b0628e5623453db23
+EntropyPredictionResistanceA.4 = a8aeba60889694aea30da1de9fd081f43d39e27154795baec92e4acfb915bc6b
+EntropyPredictionResistanceB.4 = 6106cdb0f45dfb8176fc99a130fa0254a0e54b1964880babed0aab48b15ff77d
+Output.4 = b13a186edc4057c428eafce123def15c65a1d81d91c9c0b1a7d061275e5271c0cffaf03279ca2b658edd12caedc4c2a3973e226a123d01750f2f606c502f6168
+Entropy.5 = 9e2b4424dba3578852ec0a0a25cb72aef7ad531b7d03bf70527214aa9b298a7b
+Nonce.5 = 53a364902c93d0877c9d26d0bbb1a4c8
+PersonalisationString.5 = 94acf52678bfaa21a1b63a176d7991da286677586133126c638f9e13eaa410d4
+EntropyPredictionResistanceA.5 = c9511c6b1450e236280a9a1927158fe3bafe7fe8a613cfb3c14a613e622641e5
+EntropyPredictionResistanceB.5 = 65f2c5b1f3c46f9cae6e396b86dab2439e7ace723bd27c6fbc08d7060d74002d
+Output.5 = 1a96e9bc6518b91b001e0e4683bf1b495e4692388e16d9b69f41d1d4bba88a497ac56013c28f207f5cfc52077d12886008580ec46204f5f365aa8c9886a601c6
+Entropy.6 = 5a1aba121cd8ce9fd9f7b9e5b8c44198450df3440a36e90f6d765ef3c26b6c1d
+Nonce.6 = 987bd9dc7da8305c140ed75a40a1b4f2
+PersonalisationString.6 = 83550dff991057df7859c2d00c7fb130a91eaec7df868c39da302058b22c6e67
+EntropyPredictionResistanceA.6 = 589d3b8d4de068323ef289447d1e7df969a36ddc0836ef32f0154194ffaafdd5
+EntropyPredictionResistanceB.6 = 0e5dbddf2f576368223d1211e9e1c23513f1856ff5e98e39b1d33e74e187c9e2
+Output.6 = 8f480ff15997aaece23cd8d24400b19681990d76e6df09305a8424e660868b365c50dfce3c5642181c243b5f45958f69f410a1e02654dfe4a732bf67356928f4
+Entropy.7 = f9ef76d7faf333816d71a8a16ffb5b0cedf142668bb19ca8b225f393aabedd0b
+Nonce.7 = ccf2cc15bd7354668a3044c54d1a4f47
+PersonalisationString.7 = 014535930795d536f26780ca1c887993aaf533946c5cf208cbb4716fec6cb2dd
+EntropyPredictionResistanceA.7 = 48bbce4fe2d5d67e18ae28cf0731fb95f798a5cf6a89a5b14662df877cd62db1
+EntropyPredictionResistanceB.7 = b7f0e593eaa446b9d2b21431871ceb90324070d6d2868ae7285ffa348ee03e9d
+Output.7 = 0a6b46a6f6c220737bc2b22cbc6ca9f663f83e33c8946bef9e683cfe5b4696ca0083e8f1ee1e828bcf0beff8c5a4933ce571634ad8fe38b2f66462572f550d15
+Entropy.8 = a497217c529727c8b6a0ab2faea3982b971f70e2bc70f935ccf26f7753d0bc65
+Nonce.8 = e896c2deddcbe62dd8046234409fef8f
+PersonalisationString.8 = d69c0f42eca55bd7449a306cd266bfcf65fe07242448f6c3aac26aa4c1d52806
+EntropyPredictionResistanceA.8 = ac2c4e52760657344fdf6e27d859065fd5a8ea95a5984688e40d6803509ef66f
+EntropyPredictionResistanceB.8 = 5a6184d52eee0c05902f6ad19d3986c49ad51eb426539fb4082205a8e1afe8dd
+Output.8 = a64984f1b03a9595aa85aa384ce33f2da9d7b7acb34d6f185f7f6b62f6382f45b153e81d83f36359fe06842fd5827498621e7fc139bb849305ce8705ac72b135
+Entropy.9 = 37d6156beea5149a19c43649b76dd76647c7861607bca14409eb3639cabdbcb0
+Nonce.9 = a91e1d9b1b387f506bd28c1ef1088607
+PersonalisationString.9 = 08649e3e1c877a4af5e4be854204acea6456cd59d01050aeb78acadd3fb2fe67
+EntropyPredictionResistanceA.9 = 44a93049dda9b1911d99d4d6c8d0e844d0ec2559fbb7cceae42b80b023a5d7db
+EntropyPredictionResistanceB.9 = 89c1cc6a40b0fec1dd5482dd3a6f4f653683a6b2b31ca02b92533a46bdaa6bbe
+Output.9 = 65e52ae2400b44622e6a8e279b41920129b4802c3f1f9ec85ec05257d57364ac0568305dcef3a1a579c92ff5c0868d5b0293363d509b53acce0b2da1c6804386
+Entropy.10 = 5d14f48fa63dea3c301588b5d1473d7b33260598c402d18206e3f2315d147ad8
+Nonce.10 = bf6d67e2053d8342936cf80e12871f16
+PersonalisationString.10 = d3d0a65b7db99a0cf668b708505f4831474603bda252d64f62ea25ae64363eef
+EntropyPredictionResistanceA.10 = 95d960f8f96c9585cfc5886dd78781eae2ce52ad71b9c67d2ec1bff84656238d
+EntropyPredictionResistanceB.10 = 8c3d0bfc138d0a6d8a11ae35c6fa4818d9c4ace93907bb94a9667bd579e1c988
+Output.10 = a6a1882fc8f14ec32c127a222fa13b470ce692c49c44365a2c525e8287646ebee24037b4672fb8a1682ef14c71a80d178a1237819a5bdd5895c5fdc9d40c4dfa
+Entropy.11 = e8f90aa260396c27cd2cea509d14794b3264077f9fe2c9bb10b01ef6d467b8e4
+Nonce.11 = 77963148e3c29735e41e1b67cb7dd196
+PersonalisationString.11 = a04a1f621f9dcc30f0f2a4b7463ad3bdddf440b1912017b0f7263a5b1982c6e5
+EntropyPredictionResistanceA.11 = a5b9cdb77c436a90c2ccf38b8a122485d0804cdd1c27f2326f1ed7fda1e5546a
+EntropyPredictionResistanceB.11 = bc9d0bb29207f43fe3b1f9811c63760feafb8d96e6890e1f6dde33b046d32658
+Output.11 = f2020d61d9875180f9a6d4c42e70b3a3ee88822ac9071dae1b0bddbc7d9fba05494624d42cea5a16f07a1e191774f4aa0f775f6e29958e98bdd1825493186bdf
+Entropy.12 = 79e417126f55ca5068d3d6c66efea216cf4a17739fe7b479d4f6d44b5c655215
+Nonce.12 = aa04e7b2ee3ea9dfcbc7eb6c21cfbfea
+PersonalisationString.12 = 694175f267215949a48558f1defd915ad054e8a60d993c8a85b375b89162b6d3
+EntropyPredictionResistanceA.12 = a772214d8cd37cabe7c685e8795c619c5dfe05fb2359195c932c4331c7c700c7
+EntropyPredictionResistanceB.12 = 181e64f85651b3ee4c4413ea2c6d22a1dbaccff6c8eb2764c922044596c5fb36
+Output.12 = 748a7e73949e3957002669cb40b71706de0dc39caeeb0adcd5e3f7f75303c227b2e2adf2be2be5ad296955c13bc8c8b868803d45d611d0e97061e36c30339e6c
+Entropy.13 = e85300a01203d1a765d36e494123cecfd8d823022198a95b0991f98d9a93f3e3
+Nonce.13 = 5a109a8dab804ad350f7735781b53801
+PersonalisationString.13 = cbd4b3e99ef24aa7539f6513253a69c353558fe7808720dd68d94510a02e8ef0
+EntropyPredictionResistanceA.13 = 390dde5c5d62c64c5a50127aa91018ccf85a4ffd7649de293e12330f4febd54c
+EntropyPredictionResistanceB.13 = 3c365da2c3414abc81f9b5e718790431d600afcc1737a6d81565c571e4c565ff
+Output.13 = 99ae95f5401819fc68afcf1b12d803c16579745a7821910cbe2e2f3bbc05cdefa39085c5be66bd5c961ba511f1a21b97e37f0799632b29651dc412ad89f9cdfb
+Entropy.14 = 392c6219a55f4645226524a12517d6f40dccf25be930eeede9d270fb632e5e71
+Nonce.14 = 6caa858ec3e8f946c9bcb228ba66da07
+PersonalisationString.14 = a59b7ed998b69ebc7dc542bd62172466125c21c62518b10761f6c00dd1234f45
+EntropyPredictionResistanceA.14 = 4740ca4ca81ed294d9a9b600097600637a1a1ef2fef2391d2a30e0c227c2b153
+EntropyPredictionResistanceB.14 = 272ba6588a443cf6d8a9a2594f4d4db73ea2d356048c1fe359ff9170a425a00f
+Output.14 = 638685b6256b54c1c28d8e67b98ab9a56b71ede3f0468431b0d0de2dfbe347ea0bc05d870f6dcdee0f1bc618a638290a4397277f4a1f8f7bfbb27f163fed0882
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = e02c6627df0c0422d2dfc7da9686daf8dce578966798d4e503530dd7db50130e
+Nonce.0 = 1b48e103c4091ac2f4581dba6a61858c
+PersonalisationString.0 = 0145aafa6ec83eb6525a8f2fa84ad630bb57bfe676a591900e18a4c0c4aa8402
+AdditionalInputA.0 = fddddacb8c20182f16596a619105aae791696ee7aca308b5524383c178a27cc2
+EntropyPredictionResistanceA.0 = 323b97c0fe0060c94d0423f9e4424c9b92f769e170a3e1eabb72d78bec04bb27
+AdditionalInputB.0 = d7e768a3281e4a43a0da59cd9af630548bcc2b95bff5c658b312b086f0fb54e4
+EntropyPredictionResistanceB.0 = c96c87b9eeee3ca77689d8935d0163cf2679bd35af98b195cf0622bd85dc9578
+Output.0 = 493cdacfd25a678b8d8138bd4eff888b280d3e21e1fa73af3375d5914da958b1bed0233289ac49e59d56d5d40a7577fdc72304f8c8c8cb4ad4b216efa28180fd
+Entropy.1 = 22746df10c7d1e0a7d68d7cf2068de78c3fd749d8831d7108337b5b9370eb322
+Nonce.1 = 1c7ed6063ae0cc221b4579f5a61817b7
+PersonalisationString.1 = 7184c299856a54058429418c8bd712d92c7675ec3d49635cfcae3d2473d04b13
+AdditionalInputA.1 = 49cb34651c60699bd9dc3083c92f27e7b92d0559782c975150a8005eb23aaac6
+EntropyPredictionResistanceA.1 = ba853c00f906deb3c3fa4e15c7ce36587f896808350bd8ab518968fa021586aa
+AdditionalInputB.1 = 36aeff1d32bbfb714e84a159779579ec2823b612325a034ee7ae91cc8d5f6fe5
+EntropyPredictionResistanceB.1 = fcd7529832d5332bb72a0460482859bb33dcbd0845e68cf7acd09e5888ef2611
+Output.1 = 197c85c3a814d5c4e4ede36c7dbacc54ce6f9996cfb250be31fc8f90a7092470d61d811fd8fee583f449d1680c35eefa357bc41ecae84dc82b911d51184a2b93
+Entropy.2 = 5f4f40cf42e643e5f38f06f05a80a8be0e44b75f647ac935df1dcb2206dbeb59
+Nonce.2 = 90dbc9b67377668d1af15beae790a13e
+PersonalisationString.2 = b2a2806a31e8b0dfa32d92cc87f1345ef918f89e1484d01f00b9f78280d93b5a
+AdditionalInputA.2 = f6aaa70b82d72b1cfd79408748bda77327cf6229da2cefeecc27f24b85643376
+EntropyPredictionResistanceA.2 = db29a5ef0cbe5016ba0ab8d3d520ca3683f1637be1dae434b87b5e5f4a4c6b5f
+AdditionalInputB.2 = 0a97c021f74871d6829b473556309cd32c45c1f4fe4619ca82f99ebd2df0f25a
+EntropyPredictionResistanceB.2 = 074854cf33f570ca0fbc1363d590334b6017a2e3a193da5999db75530d3a9b56
+Output.2 = 58cd0e07ddd34c32b20846e9622098082ec1d24e4d0ad5c73307a262d69b2e7c9ba5fab359eac9336d80eb4ce3357b9ce2a7962b4b21b7393dfeadd75a50e87e
+Entropy.3 = ffb9d4741074ae51d8ffe39b31cf56c1e8c978e36f320898a9acc2f0e075f5d1
+Nonce.3 = 17a702d7768a47cd1160f1eea661cccd
+PersonalisationString.3 = 3f4de7a9fbe5bbf69973ee772f4ab8c8a57bd8e6c00d913fcbe51c5e8d3658c4
+AdditionalInputA.3 = 72df5f25a27d3eec24905e927638abe22f1573b07e5bf02b0668cc8c33910faf
+EntropyPredictionResistanceA.3 = f03da22e53c4e8b78b0eccab9b3b7794d75d0f36a9f193ebc8ab422d727cea8e
+AdditionalInputB.3 = f092f905d41a8fdf4a39f22ae8b1d6da0efcc67efe598e9aaaa914370c3f759e
+EntropyPredictionResistanceB.3 = 50b044ee252d8d83d56ae2438d2ca9c01b0792467263e24c799c6ea047694cd1
+Output.3 = d3ab1499d98246bbcd499fad33bec49d2993a5a6b8e10fb9960a2299c13ee4112402bdea77a280cacf15526437a9ed4b14ff08bf709b080feaea8a51f1a06cc9
+Entropy.4 = 8ac0f256ad070a5f1485c30dcb07df3b3a3880d40f02f23e72af81ccdca0417e
+Nonce.4 = ba87e79300d8caf1319bd37e9a1faef7
+PersonalisationString.4 = 71fe61051062e36a9876e4cecbef68504052bfbd45ce59da564f9f911227d426
+AdditionalInputA.4 = 22165746d624b0baf06955e208bef085c05d2471bd881b76660c94f751776400
+EntropyPredictionResistanceA.4 = 31705ca91f1b08ee1482ade64410eed11ffabdf68c01e805b69c9d0ca80ef935
+AdditionalInputB.4 = 13502f345898d124df930501a569cfa2b006c1f58aadaf83672b8345c11783bb
+EntropyPredictionResistanceB.4 = d79b6f386cdbcd9464d5db74bdd064ecbbf229d890e4f630ee8b26d03c8bb1ab
+Output.4 = c70e0f3c932a3be301ba4527c3f0d2f31312fbd2123a184def1ecc04e36a6d07105c1f52e9f2fbe06a2df8a8b458d1f4bd93e6777af16e29800b603aa66cc45c
+Entropy.5 = 22a7ad794f7e1481abe2f1ef18e1a20cbbb11eece1df6c394eb97536d2e3ebbb
+Nonce.5 = 383e9fd6033693d047cbee6e2ac1d7ef
+PersonalisationString.5 = ecf0f84039714f4f38dae459dd8df336dc93dc9cc31f35eafb034a8535b5f786
+AdditionalInputA.5 = 8842bb79fccc18b1837fac5a8d5f9a182482cb2f99f7701eeded7affad2bb103
+EntropyPredictionResistanceA.5 = 5291633fdd22d8ef60111dd262c110bbf02f24db7be19212ad18dcbaef4d9d02
+AdditionalInputB.5 = c2f6f8674ea269e901cc2132b14fa2fffff1619f22f539cfe6e81a7a6e7de989
+EntropyPredictionResistanceB.5 = 32e9c02544c5821d9224879958b7206e570e48fe59dc1bcdeafb1dba19aa5350
+Output.5 = f580c1180520b786cb3a52d039e016f6ea015f884e64ec877078a580ae08cb741d9de9ab4685feeff27401581df73cde77aa71e9e486088f36fd2fea7e06207d
+Entropy.6 = 9a109942e783cdf7dbc5129e93ce1a57e8bb17885ff126825deaddfb8913edcf
+Nonce.6 = 29578db5e76bf260df352610a5adc515
+PersonalisationString.6 = 218c72a6e884e9126eae869d88ccffe3b82fafba135d82c81ae25ca420b2a5ff
+AdditionalInputA.6 = 52af46b6df95294041de7a69a64bf53780776988c4f80886a1f9c1d8658a9ff0
+EntropyPredictionResistanceA.6 = 764a94df0d097ae47aba27a71542f99764bfc17a46579437e877ab25235a0d70
+AdditionalInputB.6 = eb20da7d4b2148aa70c3a3b122b2ae2d5d10863f051a36985e4041e250a8d310
+EntropyPredictionResistanceB.6 = b9666be957bc31669c83cd973514bc3ae8e773fa44521e1e22faaf320db3e510
+Output.6 = c978abf81e2c99649c22f7e30f53e981c3d9e5f06ae8399df65ae7268b6e527fec076f40396d82f6e8c2480b1cded2153c197556f96bcd394df50e73b0353ebc
+Entropy.7 = 46f22cf2882c00787d7924b891878a23d89629fca397f69c17077e705b45a455
+Nonce.7 = f7f3290edb9cd02153c17cbb60a3c9e8
+PersonalisationString.7 = ad2c487fc221721135893a4bc43781e02d28b0fca449fcea49fcfa2b4984c658
+AdditionalInputA.7 = 2be60410201ff15eb52ae97e53a90c5677779dc00d7b05e283f0dcd398b907c8
+EntropyPredictionResistanceA.7 = e2ac385ed25359b8ef9a6e87c7f8b41763c4f298aeac27f5c0d20a7f9cc071a0
+AdditionalInputB.7 = 66b763bd386db6e70ecc3715478ae5e90a65cf404a7a539ab1f6fe714525a0f8
+EntropyPredictionResistanceB.7 = d9130a00698f4547457d0b5d273d3655d3f67dacfc998127b9b4faddab1dd637
+Output.7 = b2451d6465f437a9dd521d287e55ea4cd998d2b32328e78e5faff6cf4b655131b122c8ee85b470d1d60affd5b315ae4eb854026b629b39e2ba9c4820bf396835
+Entropy.8 = 8fa14dd5c6f8a122d2d559ca8d34796bb7592f7840373ffb333e488c27b6419f
+Nonce.8 = 8e1fbb81a8f86375ff7633cab45e4bc4
+PersonalisationString.8 = 727c128b1537a6081c04e1f6aac77cf483f437eca264df87d86717617d60a68f
+AdditionalInputA.8 = 83e7f785ec5c6d42a001f099589181f2420371c9c52b5f9702e3d38d9c873979
+EntropyPredictionResistanceA.8 = cc504f7eafa6bc5be9df4a2bb29c74e60dbe2116fd0c66abce074b08ac9d69d4
+AdditionalInputB.8 = e06da785891166383b06ddfaa14f36912eb29e331090c3e68745bb30092bf84a
+EntropyPredictionResistanceB.8 = 75231c2f230fb94864e2425f6bcd62490fe607085be2d70b41ab20d8a74a42ab
+Output.8 = 55291c46d9d486478d640ee6fd3cb843b0ed8d232a80c1712c2cdecf6623b92453559c2920d5032ced863437799be10503987c32897b0eaa3ad50307fc59d9e3
+Entropy.9 = ec952d396296c7a3ca2698c3738a3199462c85db4ea3e8cb13ab02696acf15e3
+Nonce.9 = cd342246aa35016eaab0a16781f1658d
+PersonalisationString.9 = 0e72880bd7abf2c37d65be9dea2b0b562169ae83a0c0c4fa92089b940b9cfcb4
+AdditionalInputA.9 = 47037ed6de884ab7a587678f9590764d8e07d1d3b3bdbd2f31da45edfaf87a9e
+EntropyPredictionResistanceA.9 = 9b11102adc27da52e05eec2b2d1bafa44a43678d0a3d4f181386b63f2748d9a0
+AdditionalInputB.9 = ce80d2936b50dbc9742b091d7e1b20fa78f01e3288c3f0c62e7d995f9cc1107d
+EntropyPredictionResistanceB.9 = 799f40a0642dcf0ce205c02b2bfb5fb2a10745d9690d2d621fd2c08441e0b8be
+Output.9 = 12a54114e96dcbfe4eced75a98b5b8a37768bb62962a2a4f0c0ee38e08a908f25de48f5bee4c9a9e1cc03d3a8cf8bedbc738a3567a84c28776c4478fa2f18351
+Entropy.10 = 860671a42ad1ea67711db89f7d3fe7ed05269084c8c0dff7676b6b6e8c63d39f
+Nonce.10 = a2bd711192a3b381a6a7798626b4a070
+PersonalisationString.10 = 56ef9608349f6add6e04bb9f917d8d0112863b4f32ab6be0f605553213e1bd71
+AdditionalInputA.10 = 4177bada3fe1393268d19869a56e7ce8d3dfab820f9f2375ac99e87276931e51
+EntropyPredictionResistanceA.10 = 2d2829912fc083af8cf27a82670f3068bdda739f73a5120c056923c75a06ef0d
+AdditionalInputB.10 = e254bf0dd80116b9ea95f8be008945e869658e75f8fca8af3d8fe7bc86925e4b
+EntropyPredictionResistanceB.10 = f6ac024b6cca290a37291557b7649587623a752d1a088ea4f2c6ba8e95c03808
+Output.10 = 7be6396ca206f6f06d8e41345b6b3fd47e381c690a0d18385603899114113c2da1b924cabc7a170058ee14a15873e766fdfb1fce8af96c5b5895913c574928b7
+Entropy.11 = 67a81d11f352183b31d95e0c2fcfabb472eb918f5e04c592579fff2cdd9695d0
+Nonce.11 = 9d7294cacc19c17686894ebdac26fce9
+PersonalisationString.11 = acca3cc39334cd622e5223f55f78f482c13cc07824000dabcade8179a96bb112
+AdditionalInputA.11 = db7b3b9cba0dfa6d137f916754851511271b7ef45c863ffca7628b14275ed0d4
+EntropyPredictionResistanceA.11 = 35e185b5429ed110a8997329a7d314e7c805d4958238855b5b7f61e7145ad824
+AdditionalInputB.11 = 5bb47d5c5c88d070cce4c4100ce40d0cea07f1d5e7df56cd3fd3f652d1b524ce
+EntropyPredictionResistanceB.11 = d9e4b2283b9e7274a36b04a5d5f2017d1f35a08c4f147f764e2e9fc9a403161c
+Output.11 = de190af200169852261bae916c76c1e6706a6a50661c4e900494a33e51b7376da696d608667250332789e280781c9d7c0eba9e2910256c7fe4161adb826cbe07
+Entropy.12 = 4b19b73d91006d9ca60d186cc67217b97977d2e139ad51e25ffc244332b1dd06
+Nonce.12 = 3aeff5557642f23eee8458d0eaa83b85
+PersonalisationString.12 = 9f8d6fe70b20c6374dfd6d9d3ffc16b0e8952c0399445dd9d74cfcf23604ee59
+AdditionalInputA.12 = 543105cad4550411fb26d464eda0cb3c62cc87aeef292ae3b74e9adf23d8ad2e
+EntropyPredictionResistanceA.12 = f36ceed5ebbc38716f7e506d81cf0427b94c8a394655595b313ef57181ec3f35
+AdditionalInputB.12 = bfd4c48aae26f7099dc30569e0351de43a602dfae3c321cb7ef8b57e4dbf30da
+EntropyPredictionResistanceB.12 = ca63dded9ebec150af626b73f0c7f587665d599b3a2ee70a9a0e6f46c4e3ea82
+Output.12 = 8782a2b605e10a5efdf960a6c8032107d088aa110bb4d4a33616ca31af1a15b79e3657621c5096dfcbc4508689cfe85ac1b6d00f6e45c45da9145b84e33bd603
+Entropy.13 = 147ac0576d437fc034ecf7a17385e3b7811b5eb3c9c9076e29092972d0728001
+Nonce.13 = 4b61057ac2fa6f39da571f32ccec2cc1
+PersonalisationString.13 = c8dba9d920fee3dd19bac7b5553d0b25971c087a992c651339c191c3ffc42164
+AdditionalInputA.13 = b577ea456c0d5890bcd7d2593b51abf187e6dc42cca727b3ba7e7eebab68e625
+EntropyPredictionResistanceA.13 = e6ee399add127e2882d00918d6292f1c9e4187fdeef802d2772093341e24eadd
+AdditionalInputB.13 = 1cb8418e518281f1b7b84059ead1c06d2e148726a3c3fcc7abd4849c86d0abdb
+EntropyPredictionResistanceB.13 = 3fdfb92aabacde1fcf575aa5abc2f7e54f90a777ce2d904aaa078be8d70af5b1
+Output.13 = f9b0a0ef7732adedc5d62db53869c0d610e57ad57bbd02ef417d168455a8fd1b1d01c6f6acec68acabb5627190a80200540d57ae26d0c197fdce4a27257f7030
+Entropy.14 = 3a5999b2cbaa25e3fda6cf868c9bc2e0922b4823017c9f66f4a532b574d03021
+Nonce.14 = 0e65b1e465136fd47bc7b12f905a736f
+PersonalisationString.14 = 50fc46a2c88aaaf795936c12656c3eab2ea9a3d9f33464bada673847871c4341
+AdditionalInputA.14 = f1facb822c5c0be6fd6558b6c1f3b7574e5e4268cb24e83102cb27a282dffd40
+EntropyPredictionResistanceA.14 = e96381b89c4d6d9a106184f8fa7227933dd60d869e84fedd5eaa1423cab6c7bc
+AdditionalInputB.14 = 373b7d3c6e3c07907a45e6292da02991c252b4f368ac894e44fe2741d63edbc5
+EntropyPredictionResistanceB.14 = 72901d3c6324cb6eea7e62879721c4ab437fcac453cc43f179388851b6d160f3
+Output.14 = effddd2d7c39df20550e03ad21ccba6f6775a92726af567a80bcc91523f3646ec156cbaabd4fdb13c63105f2b771f94fbdec6a2670f8fb263cdec3ac1b775774
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = f1893be2bc86c80d6422f3d586c0a8ce9bad6486f23123f02ba01403384b83fe
+EntropyPredictionResistanceA.0 = 79dde8e1502818df744e1afe8e5ecb3b8d19365182c7957260d1794e54912620
+EntropyPredictionResistanceB.0 = cf684fd0eebba77901efcbe3cc5297ba9f04367fd54fe6af9463ad2ebcfedbf4
+Output.0 = fdb97f0eb27279b8d885f2462e8968dc4c9266f81167359d89df4c327642eae1b3131f90d64c1b5a0e71950284fc3fd026201094e8ab3f3760184d7184c90a34
+Entropy.1 = 614c33c544b0e8c28117c5e759b681070e157b6f3ceba25675d7791dbf7961e8
+EntropyPredictionResistanceA.1 = cbf2be8bbba58811ddc7a97123caaea12dd796dba871fdd489d158b89db5bf6d
+EntropyPredictionResistanceB.1 = f0c81d9f750b2bde9db4526f588b59ba095e8a02e25f340c71b52a98b603e736
+Output.1 = bf22de04c7f62957e64865b86b7dba29737b8aebaf5b91257379421341ddd12252514d3cc2204ede7565af58552dfb8767586917facc700685c7030da1384136
+Entropy.2 = 7f0038cca3c77c954a67ecda1bc0f559856eddeff32a2741449b8fdb123c8c93
+EntropyPredictionResistanceA.2 = 09be227dc9c300b5a058b7a417b0a8ae76e0fb63ba77866ddd27c33fe40c868d
+EntropyPredictionResistanceB.2 = 37cc30a04a78c3a77b0105d9c2b72fe15511a2fadc315d041c6dfcd9e0547b43
+Output.2 = 1a5b3d85e2d92ebf1f4951edad6b0ae2e74b38125b3240b70dd609c992b3d52ecefbab519d6d15f0b93cf9ae6230d9cbcbd17e5620a893f19a8511704a0ce9f7
+Entropy.3 = 51684d77f618cb07666855df7ecfbc82cb64e6399d452152141f787b23200d7e
+EntropyPredictionResistanceA.3 = cb20c970c4cb4a1a429f6ec8117b7c2589d32141f8935621ee9bb1027f61610d
+EntropyPredictionResistanceB.3 = 61297e6817b3c1e47c37a7812f01accc89cec15f5b7130feb2aebf597bebd483
+Output.3 = 1197c023066fe880d9e21d0107791bc3d46220ba91f8eff7f9ef95f6a264851c628c56cd644e457114abfb4b69d2aee84858c868176957f5ff050d9a0bf978ed
+Entropy.4 = 9d2baf470a2a8bd4aeb52d98cee3ca04792c1684bfeea27663f39074a0573096
+EntropyPredictionResistanceA.4 = 068d794d7e8c851eb1c4b36bd154966fd10f0f43cce435cc5bf16e2e489b9f4a
+EntropyPredictionResistanceB.4 = b21e1c09c468693eb58a46517fa4a7255e997d49b741f729e1571c188e68e5c4
+Output.4 = cfc83d9d6d871613f1680695e248be4a5301f28fc14e61f51041fba7230be666547934d23ad1456a53c02be40f74a66b8a0a8ef981e11374023b520baf1933a5
+Entropy.5 = c22a02485ed9b67bae0a742ef65a57ae7c4333031c81fe7521660acdba06aa4a
+EntropyPredictionResistanceA.5 = 10f534a0dd67b4099e783086e89fd50d467c7970357efefcdeb9cfacb9b25eeb
+EntropyPredictionResistanceB.5 = 27b527359351890598b1f87786bc20c759a60820cc548cbf12126d56f4d1bcf9
+Output.5 = 29932a1205a1878a1ba5dbf0ebe1b50992737d6d86106316465945db8ef4c52a8c3ed9c31498a6b2ed502a853028f1d2179f1ea65e6f980264eeae825a023776
+Entropy.6 = d123e01da1ce990f224b03e88ec19b906c19cb09dfbf974ddeebe7e848dca662
+EntropyPredictionResistanceA.6 = 1ddad2b4b7cf09a3476072a92f3549d754d7d5225f23e3c75143659466382c6f
+EntropyPredictionResistanceB.6 = 484000b977d6cfe68357364368004a62685ea492e35d285c7345bdc34d5c9387
+Output.6 = a20ea87f1140acd65bef4c322eb673ea7c430d729171ae7699402229a7a2b00789ac08372a4c287546e5205cccd3b88242f94e3177c9eb428d2ba2f02fa7b6cf
+Entropy.7 = 4ccbd93da25756e0e9e03363300597ecca377ea05cb4f7b699cab134c1f8a0e5
+EntropyPredictionResistanceA.7 = dbbe7e044abaaf9d6911528ef905202fdc493cda87b14f1e496cdffef263bcd2
+EntropyPredictionResistanceB.7 = 3060b468973a86b8dfd66e31e42f579b4d0dcf100ec2dfe2d0889f2c9f0bb583
+Output.7 = 3ae7e95991bee393fbdea4036bb06cf757b2ed67fbe384124129264fbf45abd7eb505286d8c5a3f310460fc04c6a112c3a9a2a6a1e2c5307bbcb6904fc9063b6
+Entropy.8 = 89b90a5a282673e095974ca1d383674148e3831d5b294e64f239788cb7b7b5fe
+EntropyPredictionResistanceA.8 = c13e800b12520f2a7afaacb9f6fbf914c5299de192b57f29e3faec51ccfa0d1d
+EntropyPredictionResistanceB.8 = 103b98ff04b488a4f889a0ae399f0b6d68e126c62bb69d2f83b7b5cc07ec5ee2
+Output.8 = 7db8ae3389ff7e38a4655fe9fa96831c8babc9d11b86338e2ad12ff94ad4a61e949ae0b18aac0dd0572200df27096352f1380e7721c6a4256426d5374733b568
+Entropy.9 = 8e1fd65e65603a69443d3e4d05e4f9950daa8b0bb1c706d085d30a2e2caaa67a
+EntropyPredictionResistanceA.9 = f93e29bbb3baf5babaee65c8f65f73e278b7bbc769bc9ca8d3db3597df4713da
+EntropyPredictionResistanceB.9 = 21caada8adf9008e645d23d39c76700ac1e7f4ed852703ad2b08e0aaeca363a5
+Output.9 = 5cb239c5a228b43f814b05fdf049a1ab6c01afdda868a5a18d6b29a2f1ca9683364a863b01ca09b171bdeafe931f7710072ff6acd2bed9a6466aa5bb6afee20e
+Entropy.10 = 983236081d95c63d0f253d0fbe6d191821fb5e8f90acd8f00f4c097bf9b9b087
+EntropyPredictionResistanceA.10 = d3dee075546dc8dd05bc01377ea311bf12ec54ed5f52e498016b8d5e8cd85da0
+EntropyPredictionResistanceB.10 = 96f118b25f80a3780fa73892e4bfe9000074c029ce288b7365b00f9e2f793d44
+Output.10 = 110ce260ceb4809f7845eab5d82083c9dec16dd58b8e90d7ee40dcdabd16b275b807cffa6779bd05765b0e2b331a4328d1e96cf6195b550f8aacc0f063cf70a4
+Entropy.11 = 04bd505bd5ebadb1760b7c04fbc1691d01f20deb0cc6a93c3d7ea6c35d74d580
+EntropyPredictionResistanceA.11 = ef9ded9e522065d304a60b18d5d036c70aade7758c3eb82cee6fbbdbba0fd4d0
+EntropyPredictionResistanceB.11 = efb62f77ff613ce02090b620c04c5788127d10dc1c2e6f3b74803fbdb164d02b
+Output.11 = e6196c2124831020bd5e0d00f05b3ce6a07123daf8e9607ec70bb812bb84ce8a1ad01a359e5c57632d3406fa0beb72416f595c929bcec8469b8eb6fe0b2a24f9
+Entropy.12 = f1567404adad31dfbd86104a236c8b2d4870a024e6b774f15cc24c1391f94e20
+EntropyPredictionResistanceA.12 = 2ecd60a6602dfa81f21cabe68b3677cf8ccdbbdab6c7b654395b1d1bb1e5e13c
+EntropyPredictionResistanceB.12 = 527a519dc289903fdceb094abac7a20f8eef1b44e4077e1648be3faecdc81cfa
+Output.12 = 8ca8efc847fbdcb0fe7546f70a78bf10c5a26c18051257a5fa866c4127b473be908febd7d81f541b4de4f5f49c0ec5fab591d1d50717de5294177c256da9749f
+Entropy.13 = f8d707f2d50498bc7ea835d8eea3a441ba48d090bec828aca873ae16e6dfc3fa
+EntropyPredictionResistanceA.13 = 5eb84e694d5423f8830e480d84e3d2cdc4044f13878ac5d56936610e0e019419
+EntropyPredictionResistanceB.13 = e42c5d66602242b6ca8374919afd0b3d98de079586e494d70355bf11ca6370b0
+Output.13 = c50e3dff40857840e752e890162bb6a244dc47c7a35165b88f0609ea50dfd2b7e9e555754c45266e3741222a71b26fde6d8edfc2d67836af00fca31d19b233ea
+Entropy.14 = 8491212325becaf2951b935cbc6f183fb930ec451a93cd7d13ab53006e565adf
+EntropyPredictionResistanceA.14 = 43d53e48de3c247857132224a448147672dec7cffe10164d83446c1003ed71b9
+EntropyPredictionResistanceB.14 = de28c574f0d771f2211acb54b43a60ef79973081f06da6819219612c67bd94b7
+Output.14 = 3e6e82f2edb3fcd74559b46d319b09cfc3441c06bac7a1260647ed7f9327485d553873d8b58c08410574161e0ff9d5bb2ed4cfea533bdbcd47ec627ac405d3f6
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 4d85ec7a58763c383548e70758c6db91f99b1466baa7d4f20ba1f8a44ec4d1f3
+AdditionalInputA.0 = dd4f1c82473fe4cc56128152001547ff7234eadea5e94f0d64b0c08d24788570
+EntropyPredictionResistanceA.0 = 3a9e8e7aebfed99f34b16294c1da973bd706afba105d78cb132e4d3aee221cc1
+AdditionalInputB.0 = e90046b7fcd9d86434c312b959795fbfbe666dda2b16a7b14cb0cc1d84895273
+EntropyPredictionResistanceB.0 = e37f193e5f1356368aec70a0de2c330c3cf9af26c6aee46b9f114f6276ed38b4
+Output.0 = 173a535a1ce52e3ca2b68fb2c24880a4dc2837174ce3df1c1f445f43013384a0570ec8d5197b2d00fef3cb3556086bd82fb6075562f3adae4dca39008bcd7397
+Entropy.1 = 358cdb2337e42ea84d4e03ce5f76d3b7b3f5d133fa9909e637997f96374091b1
+AdditionalInputA.1 = e9338aca9c02e7b9748d23994540505b944f44eb5ad1f51b831f695652d71a5d
+EntropyPredictionResistanceA.1 = 583e3a996109b64e727e87085a534f1f20e60d98587be45c69e5ac7b964f4496
+AdditionalInputB.1 = 695d66f77eba056ccb2b31b3a9509804cf69b94e7b832412bcd76cbc8674e26b
+EntropyPredictionResistanceB.1 = 7845b74f4d34d616615a526353404c376b6940f08d49c526818cddca4073ca88
+Output.1 = 855c34dd2994dd591f502192bbb67dc8a423b7108590aa82731a30068932097f3ada826610514855e230cc0c7aaf617052c0975345958d5acd6c6caaa122fe4b
+Entropy.2 = 70084b14b37e2fc917d3d6b4a7c8201f31d764fa588f513e365f8e313dbc8ec2
+AdditionalInputA.2 = c09f3c76b38e502b122786f45796e19723e94173ec79cf190e7d1e9e770905b1
+EntropyPredictionResistanceA.2 = 4027db96b900c4a074bed9b5b2cfa573f40d607c3b5e00ae1bca8441fa584cb1
+AdditionalInputB.2 = ed4844eedc137c95cbf79c885b0b6b4a067f0257c897abe75274694905041c97
+EntropyPredictionResistanceB.2 = 604b9d0be8e50f4fbee8c20b5a8a5697a4faf4a25b86a663797c8ce603a7092b
+Output.2 = 0130f2e47572d88b2fe25e813823ae33ed0551e92b2a97a6086e6ab9620804969b5c4d7216c0029d60a45d24d3e4bb96993c1c41887aa4c5a9001ed3abfe958d
+Entropy.3 = c9176ad2110b4b347addee428927729535167899f8ca7c6823be5043e5eca5b8
+AdditionalInputA.3 = 8951a54edd47e780da51875705347d0ab08ffb2fb531f5a74d79cd0fab0b9add
+EntropyPredictionResistanceA.3 = 8aaaa7dd8777c916fa607d2108556e133aec8c671bbaf550b6783119f0bd17e1
+AdditionalInputB.3 = cbd10c579df58072937619ebfc16ccd8f7bff8befe85d09796b845ca69dee19d
+EntropyPredictionResistanceB.3 = 6cff33920389c33b7426515b3a9b236be6034ec34d66d00fe85179cefb6d828d
+Output.3 = 246573fec90f56832ef61ac76ece8148b9adcee2b4138fcbab7c73ed902aec6871160aa8dfdca6290fac058f2ab0f1be3663792f7ad72c5e495e58717b4237ce
+Entropy.4 = 96aaa1150f586fe156d0f988b0c04b9896a0f0dce24f1258cac0b9b7bff41dbd
+AdditionalInputA.4 = b778904c42bfffd5377959af64642ed6254cf096fefcca8c2feb0ceebd858ca1
+EntropyPredictionResistanceA.4 = f294b12b6b6a077e22c993b3446afed1e34cae0e6bd88f234a2252b7cc3fc0c9
+AdditionalInputB.4 = d09f4eb1a0d24cd7cefc67943615e543399dd3271d6b0a49337e2f25beb8406c
+EntropyPredictionResistanceB.4 = 72cef2c454c6a35b2c79fd572e338fde3688c38659c2edf55b6578b477818a47
+Output.4 = d5d5d17693d83216681b1aa14abdf8d5fea44ed49241f5e67492499f59064a5724557386a1fe5b3c14e34c984af9ba5819140f060452bcf457e27b1507bd4079
+Entropy.5 = 0529d78ab6d80dc8e2b409a7bf91038d4eeb44d7310fc371453210aa697419ad
+AdditionalInputA.5 = 32808a5350292260cbb58905cf12e527fdaadb5dc623a0655efe2a19f8ed90e9
+EntropyPredictionResistanceA.5 = 448d96260272b939e5f949ddac931cde53bef50bf61906310f9659cbf7a5771e
+AdditionalInputB.5 = 5d5ee1a375cd24a1bfd90017354ae6af22ed51bb777e96b03b04bc0143be6a92
+EntropyPredictionResistanceB.5 = 1d08a48121fd557e11964815a1639e5bcb6fa23ac3685f6ee5108c7a7256ea64
+Output.5 = b7902a01c519d58f11027d40d39661741114860fa44957e9285f2ecd1d7df73af1352e737e813e26385df80a66b947ef5da0f53134c80f1f75380f73a6c2c59c
+Entropy.6 = e0a30e9ea57a3208d0fc1f4c3bf5bf4a21c5f8276679c82eba9a56893c75b6ae
+AdditionalInputA.6 = 09be6e3e1f3b045483884d1ec70305217c615f1e95bff314600f3c17393d5b59
+EntropyPredictionResistanceA.6 = 414e9ad830a3a0bac5c8d55b394b0fb5badcb05295a77ddcaf342512e75ef79b
+AdditionalInputB.6 = 113807e28190365776e3d26c7b607ee12a1a0d5baa2b3e534c1577099065eea9
+EntropyPredictionResistanceB.6 = 3ac479e91084a21f01357b8f3c49e8f1c75d093eb87ba4736b8f559ff4c34ddc
+Output.6 = c6d9707d35404a817f32062b0c428be137eb35030b04e68e14fd92d8d4f1c40a1bcd6758ca05ae3264e75fb1099c07a31c2210126905e1ea94acedaa2de905dc
+Entropy.7 = 7ed22a3bbbc16ca6a85a4f6a83e5e50be47d043d5d22758c0e65f0c28ed8831d
+AdditionalInputA.7 = 8a89c79ebc1182ba224d5e4b27797db908782e69e8974f5fd22841498dc0b567
+EntropyPredictionResistanceA.7 = 275467223104c5e09ac9d1cb473f624ad864b81279a418f1dfe10037b1f41a72
+AdditionalInputB.7 = b24b91270e5a1a324ab88298f7bb6ebc90d9eba3c768bbf1fc659759aedbc91d
+EntropyPredictionResistanceB.7 = 88738a052ae62b47cb76e9dc5768e9eb3d6d57e283416dcead44ccb62e467c71
+Output.7 = 80374c378ad0afc0fc59eda5f4fa708df5cad6a4055a83046b379217856651716ee8fc62602b894701c7dcba658324e1608f3752d5b4a5ca9a69f49d6e1dcabe
+Entropy.8 = df0c870c53123935d6b4f356398a253025caa030c498e9a019fb33d753517c95
+AdditionalInputA.8 = fd5cc5f922d9e867ff26659db11d56dc1e9890713bef37cbdea4569452a60f40
+EntropyPredictionResistanceA.8 = a4b2816cfb97d20d113a0985eb7d24ca370cd12cca9ac8a197bfc7dde6e2ecb5
+AdditionalInputB.8 = 1bd459cf1220f7e165d00842c7069cf07339397de9e273d2f7fb27d4cf0d247e
+EntropyPredictionResistanceB.8 = e31095f6443b863629e10c0e493419627b798e8067f2903b6d06d67ef6ab77af
+Output.8 = e3ce4cb60d5a06b04953cae7fc46d1b408a6772ef857bd74ef37fa25401410632eb1b3533d58fd37d58bd54859a7a35b29817e93c0bfb8c29472275b0d67b3f0
+Entropy.9 = 47665cd503752848d02ff6adf5e67cd7c741f6932b36d511b6ed1662389cb62b
+AdditionalInputA.9 = 773f50bbf3783ce18e137932d09c1310773861785ccc2045fc4d3eb8edbbdda7
+EntropyPredictionResistanceA.9 = 16b4a3fef9a1b6ca83d027a1e3554e7517b650baa87f8e49cc75175ec60a569b
+AdditionalInputB.9 = 0487954441e5538bfdc5e2fd88206f0a90f295dd00d60a20aa2f526c2ce3902f
+EntropyPredictionResistanceB.9 = 950477b5ca1716795c00edcd880684952ecc7f9d9d21166bfddc81096e4d4a6c
+Output.9 = e40263c75f8be0f43f64e33c9cb70a39e4b354bd99bb6377a40eb5044facc7ef16d4dafecf476bdc8f3a89b93e8873bf19eb2a426eee0b0522167f4c707f5949
+Entropy.10 = ac206c4178b1c3b9a736a1fc98047eb3b8edda6a75ba3fae82ad430bab45b192
+AdditionalInputA.10 = 50a6bb58f386b6698af01dd05b9b67c51d6fb7bf7e7ee694d9923609ab3a9ed4
+EntropyPredictionResistanceA.10 = 2660ec627c44d259a9b1b01e0a6239c75adad83ad2694b3be36a9c24b5d91222
+AdditionalInputB.10 = f9e04ebc76e9c4b1b140a7848704dafb55127a974729d22dcbdd40d819bb4d87
+EntropyPredictionResistanceB.10 = 0bb09ee842c1deb258ea41d2f4a62866c2dee93fc1426ed0318a2ec60995f2f2
+Output.10 = fd86f6efde8c733733470e6005a9e3327eeafa8f81f5f941f5b2752ec16d1c2dddd439f71b0b75db4c51deac5923334ab18f272df83cdcc804e28bc3e8b6c6a9
+Entropy.11 = f14fbc8c98ce66fe6a135a54354c54e19cc2162d2f3f691735bf207289732033
+AdditionalInputA.11 = bda35cf2576e9fdc5e8e7ca922ad50a81b1a2a5a00e54d2e20b1ba7c633942bb
+EntropyPredictionResistanceA.11 = a08a66ad0d0b8473bde7eaa76c7b2818f57f201d3ae898ff53e5b081fbdd1a52
+AdditionalInputB.11 = da02cd68a06604bbfad8a6aa79967a9e2f30c66108c1f9fbae9b7407083e7bb5
+EntropyPredictionResistanceB.11 = 56ad37290afa62b4cacb6b6850ab3519d8cc6a2a9bf24d05d0d75e5721efc042
+Output.11 = 57e6ba35d94dab57587fd526482a9243033d4c686c3a51b12951401d865f2c24f20c80a9db7e96ef0ae84764d4602967dee445b12adcff9bbda9b0f0e6a02fae
+Entropy.12 = cd481f4938220ab2e31305aeff42bc16deee05f92f1e9bcd3381cfa95377eeb4
+AdditionalInputA.12 = bf843bd32cc9a5b2eae9c0194fb862b10431185f8ed45f90a4a829613eb6a80f
+EntropyPredictionResistanceA.12 = ac87fbff6272408de1b8e3c4b99b8f573548c4b451694c2b4dc45d96b3eec4d8
+AdditionalInputB.12 = 9fc40be65cb5e81c90eb2c8a640d1ee2b180ddba2f448f5fd8555e2d21224116
+EntropyPredictionResistanceB.12 = 2cfe16400113ffa2eeb79389050a87e8f11e3a0016ecd8902c69647e99294708
+Output.12 = 5c1d1e4af789fc9ad2804a04cfc71dc8ae9e7edae0e4e165b4018b11af9a43e1666ce39ce57da60031826451d866dc52f567519be605531500ed64ec6fd534ec
+Entropy.13 = 6785333b3fb93b39ceff40201df0c27139d349cfdda133b936a96d6b3c6f5bf8
+AdditionalInputA.13 = dd7d784765998ebf808d1105c7619c9694d12c6c6cc1b5fe309aa6f916e71979
+EntropyPredictionResistanceA.13 = 14f0062f1c7e51b4bd92d05dfdfe2455ad8032cd2d4ac42cd2e2c0993f47a516
+AdditionalInputB.13 = c76e7f80d0a1f41c59c252ae6359c30c78b05a9d49e8d5748e04e24a61ce3452
+EntropyPredictionResistanceB.13 = 719e01a29c1d7ef2ca96073f6c86c4fdd54aaa0275a041616716e0bddc5198e7
+Output.13 = 15d376ec61ce62e03eb53998252c540b3ea5ec93360bfa775d2a11f88f7e19b659020b42bdb28dcddeb1fa0df5cd9c3074a551066f2c2c8c46ede6a497903fb6
+Entropy.14 = da89adc5f1444292c26b3cc9d61ffe7e6fa2feaee06b4f99e83c480d02386194
+AdditionalInputA.14 = 8f7adea4c9828b99e80056f99f5ac1cdf7a2b51f2e831cc8c09a3e35f25d24f7
+EntropyPredictionResistanceA.14 = 061873d92e0e908c30ee496d62a71e5a0b225cbf13b6a8501561b90aad9e784f
+AdditionalInputB.14 = f298b8789db7c5b8e0354764d0b30013453c3c5c77bfec04264203d7674f23c4
+EntropyPredictionResistanceB.14 = 9a4dfac99270a67b45256a4da4ac0df15693a4a19fb68d08c0a2061a9e190749
+Output.14 = a7746e689fbe9eeed34b0ba524851742a5fefe1ff5ab84c6b9a118da64a8ad8fc9ff601ccbe6a5b7e90c5da8cdc8d9fba741d22a0aa1d8ce4fb9cd6148eb06da
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 528ccd2d6c143800a34ad33e7f153cfaceaa2411abbaf4bfcfe9796898d0ece6
+PersonalisationString.0 = 07ca7a007b53f014d7f10461d6c97b5c8b0c502d3461d583f99efec69f121cd2
+EntropyPredictionResistanceA.0 = 478fd1eaa7ed293294d370979b0f0f1948d5a3161b12eeebf2cf6bd1bf059adf
+EntropyPredictionResistanceB.0 = 036bf1173977b323f60c6f0f603d9c50835b2afca8347dfb24e8f66604444951
+Output.0 = bba1ef50b4bad288897f02ac2706ee1e01488dcbe9b3d8a637921f5e788faed3b23db63d590ceaa7607a2179192bea9aeaa85d048e7e108fee666dc646af5f0e
+Entropy.1 = 53e5783fd27cda264189ff0aa5513dc5903c28e3e260b77b4b4a0b9b76e4aa46
+PersonalisationString.1 = 99f2d501dd183f5657d8b8061bf4f0988de3bc2719f41281cf08d9bcc99f0dcb
+EntropyPredictionResistanceA.1 = e04bade7636e72397f8303437cb22be52810dadd768d5cfc9d3269e7ad4bc8bc
+EntropyPredictionResistanceB.1 = e20dabb9fcaf3aed0ec40c7ef68d78f2bcb5675db2d62ee40d8184b7046f0e0e
+Output.1 = b9ecf5521d38f9212578f9dd32af38089b45812ca96e661fc8e1be0b2f4b54215f52c9c93a6f76efee4521cb316378403108a6bf2724fdc93bc4d2db60a2de83
+Entropy.2 = f3b247d0400740d18b795e8e9c04cc43eb138cb9eb6c46862030517d8b3679db
+PersonalisationString.2 = 617d6463eaf3849e13b89a7f9805edff3ea1f0aa7ad71e7de7af3481bfeba7f5
+EntropyPredictionResistanceA.2 = 0603b481bb88d77d6bacf03a64cf82248420a95cca10e3efc012bd770dd5621c
+EntropyPredictionResistanceB.2 = 233b1e550a0d1249a5bd09ccb9a88be9119258feadfc309a6ae3c340918545b9
+Output.2 = ce4bec8241dd1ce12d7fa18bd1a3188b43892392b7dcae7228a851afef9c9728c587167b6df28c895a67af35b6fd84ad076efcd70d1c59c49fa7c0f7ed87bc82
+Entropy.3 = 9d97ce8452474bc19a4be64efd43484874074779e05ac221f19db3955ce29bc1
+PersonalisationString.3 = 7f7d81a5c72f9e3498de183329d6b2291792ac8c81e690200387305aba8987c7
+EntropyPredictionResistanceA.3 = 5c0ef27b53eb7903cc9e2bc709f9e885eec139ec687a3444450f0cb079ca5171
+EntropyPredictionResistanceB.3 = 0e26d3e8d2fd18fe0ce2538c2ede5d61574c8227b3f82b333ac42dbdd78b8e19
+Output.3 = 94001b011830bc6a911fa23bc1fd0dac8c0acd0e856ab4497ad072e54fe3b47bc06890e7e7babd4912af1e7da96e90523b75dd86d9a4ba4d88107de607e52534
+Entropy.4 = 12f68f049216e3987860651f6fd13efef184fc8fe05cac459eb3cf97dd957e6c
+PersonalisationString.4 = 0c70a20b690bf5d586b284aa752ec73055e039233089a30efdd6218a1e49f548
+EntropyPredictionResistanceA.4 = ccfabc0f847801b342774ce50d80c600af2d1f2016e1aea412fc4c60b2a041b1
+EntropyPredictionResistanceB.4 = 07e192e576bb031bb8baa60b9374dcc1c40cb43ab42035719588e2afd75fc8f0
+Output.4 = d0619996c88423a740f04dfdad3bfc131bf3601fc43022e89957bf8b9a1ad8702bc8fbb2004e7ab02550777818e11f03fab48458424ae5c8cc8cb73436657292
+Entropy.5 = 6129a163efde5f14067e075c4790029652a56eedf8ea4877a0ffcedd32866166
+PersonalisationString.5 = 1fe2b0ce3a1896017e30753064e1c0e1341b673569c739a199cd218fe64665d0
+EntropyPredictionResistanceA.5 = 356ade73b8ffb38408be0537ca539b633d0afffcf2962b717ac37eb2a06ddf50
+EntropyPredictionResistanceB.5 = 0b857fe137cab149e9195019732a714e25e62c946eba58dd2fa8e6c797172bcb
+Output.5 = a2613ddb75107ef3fe9fc392061a52ea2304af7aed6dedec3aee626e1ab2bf989ce7d6484555941e9a4013036c4605c564f17d4d1369e1e12d28b877d2125d99
+Entropy.6 = 310d2e7b249ca8fdf1d4b15612f6e1f5428241c7ad777281171fdcecf7f5ed44
+PersonalisationString.6 = 2703e1dca9926995705229cc8a8c9d958bcdbfd5f3e09eeb349b5135686aeed1
+EntropyPredictionResistanceA.6 = 241e8fe2d6de5efb6509144c8dba00a582d1aebfabd306052747fc311d7c5a56
+EntropyPredictionResistanceB.6 = a2c100da70d8659d94a4d6a0f10594c8412c977168df242a35d5c2600a47084b
+Output.6 = 48460543d08b3331f0c7bcf786be06a276efc757bedce0f428323d54206931f18c3c7c606c0ff8e673f3d1367c7d50db2ed002120ff05623d2deddd037c125a4
+Entropy.7 = f5771eeacddef0c6cbfac5ac4285205f110fd6a8174ad45748a8633a28c85ec2
+PersonalisationString.7 = 9ca4b8e6cdec1ecd9546508542c84936ff2aa1a4dab969613139c01e35f36d71
+EntropyPredictionResistanceA.7 = 0621babc5c0ea527ca7c8d42338e16b6113b387ba888a6c12779cc127561a148
+EntropyPredictionResistanceB.7 = 672df1d58510c016913fc6c42771273f7cbaeef1993dbabcd6cca26758bdb7df
+Output.7 = 037a0305532b6bd2a51057962f23dbfd4660be8e5b7a448b1168be3bf8598a301fb517a4714b7826162fc0fcdae08800e967f638ff1ad1da39282d3454d93075
+Entropy.8 = 7a9365ebb48fdd83809167cb2bfebc37b69b34595b2f8d81cff2924a70e300d5
+PersonalisationString.8 = 0f533937857dc9f97fefa142c95445b484e1f259a488e9fa38a46e49d693c4b6
+EntropyPredictionResistanceA.8 = 954e64b6f4f1d7e0135eb2a9174612d23111329c00bded4cecf6b2b2fdfad145
+EntropyPredictionResistanceB.8 = e6495728cb28b8f64b208afa9e1012f061c790d285663f5cf0760c9f7c4bd32f
+Output.8 = 035c19396d603b52222c16af6c6bc1c07a1a518f578b59943ffad73ca14948b7a8dde117e5c571506d57fd08e3a067a2ae3bde2240c2399f160c5cc5a2f5d582
+Entropy.9 = bd10e4b282c98b6c2e0451272a332c24f54a2a45244e9889420a48786f662aed
+PersonalisationString.9 = 950472ba4b3b6979ba4d2a1ad51db7732eb3337b28270fdb7f99018144734f72
+EntropyPredictionResistanceA.9 = 5a1cf5b5212ae2a776ae4f688ea9e6124f624c817b5e429b8cc2ad730cf29f6e
+EntropyPredictionResistanceB.9 = fcca996bf011ba139b7bd05e31c594d459685aa143e0ee46d6db0ba8582a6fd6
+Output.9 = e17674172397369025d6b7811b69b6e62dfb8ab94852cc96bde1371fcedbe5fe31a11589f4e57183fb46883d93c647e36f70f8d5a536f8fb0d428dcfd7722e4e
+Entropy.10 = 9009b2d3b9ef7fd1e925d75d6ad07d42e165310153ed1ef9e1284894e0d16575
+PersonalisationString.10 = 06bd36977e09cc13d7c9edc9a285043f7c00575610e9b95fd3754a4b7c561fb7
+EntropyPredictionResistanceA.10 = 13f8641a1d9cd50966b4fff6f2a5a9f67aefa8d7b5cb527d3b73338aea773ee1
+EntropyPredictionResistanceB.10 = 4645aa5ebb41f27380328161864cca36055c871356316bf3773d35687fe72874
+Output.10 = cbedccaa88b22e39fb0e14bf15dc05e4e1b7002fa0cffe7803e3f6bcf6a03f3faa51ce5b3ccb0d341533d335e20f9f71e90f83fef06ecfe93ed056f5d6851306
+Entropy.11 = 87e58c3c91ae0935b7935d2d0a855e795327062238180f20b02f9c9c861cbc33
+PersonalisationString.11 = 6dacec09cc407ddf545c4d54c77efd712f65be8ba5ecbc9fa6bdf29243eed72e
+EntropyPredictionResistanceA.11 = 28c5691d0c0ff0d834cb0c85a82fe561f40803f63beb3e740215e5d5089fc554
+EntropyPredictionResistanceB.11 = fd22324369fd30e2f47553c012ce2c46fd40df5fcdd737bf266cd20bcdc20a98
+Output.11 = 116bd7ab4030379cd6f50e85a04182775292fa9619c38b7418a19b8e7855f29efffdf7a2b8b1d9d3d96ea85a6d56302014dd3bcbe401ada5b0e3cf2f66dce9cd
+Entropy.12 = f3291f1d5fa47abf1918416a2cb78b243e614f883bda2afc10ffc1cc7f7f06a8
+PersonalisationString.12 = 85facc571d2c6eb257437e1d3b77b5fba4a125606440181b8387f9a4fb1a7fbf
+EntropyPredictionResistanceA.12 = c9cbe9f41e2d81f99ca6327ca617caf836b73512d96b1edc5ae5ed56c056cade
+EntropyPredictionResistanceB.12 = 47ebfc4437f769ac299f0d87069e5d6074420113761a9f9e053866581e836701
+Output.12 = 51e0b54c109884baecd1884f7bafc846ace216b6fd97eb1ca70b563e62c4a2f22b55561152f379326ef2999e9746f25043a02402d3e47b4a58e747c222b7a081
+Entropy.13 = bcb51bc0dfae0fb04bf08face7369981d9a78bbcc0d3da2a1442d8fef756c1c0
+PersonalisationString.13 = 2c4e73ad2597b027dd04c6056db1189b7a0d8e9fece52237cb7fc2511509c4eb
+EntropyPredictionResistanceA.13 = b74a392be091fe00eb6a6576f027073a838308f5a5aed7fd0db47d6616cbec98
+EntropyPredictionResistanceB.13 = d39a307b956d1183f718be7d91a11891dc3fee45652edb89449d9766fc85bb32
+Output.13 = 7c41adf941656cfb9f24409d6cc4d578d43930b3e23ec801a59c53d999401bc0cb3e5b8797b2770a8a8f51ff594b7b17d9e694d5e36644508d16cb2554057adc
+Entropy.14 = 5565457cf60a3aff9ea6f3dc6254a76a085ff87f1dd19127b2aeb3ac50b8c31e
+PersonalisationString.14 = 717c4de30c0ac7b831807cb1fcf4ab37f1734683a723d183fcfe5fc8a4c6c7e5
+EntropyPredictionResistanceA.14 = 9dfd31e3adc822b675c0a9c8702df12de4c3354ccdb5389ed481d910b3dbb51a
+EntropyPredictionResistanceB.14 = 2a1b1519d22d40ef4ec23c6d97dc148cfe171fb5f8b1c305ec6d8e83a1ef9064
+Output.14 = ac054570b081cf53b39b0a2faa21ee9b554c05ff9055843ac0eb9031d1de324701ad4cf2875623e0bf4184de4aea20070be1cb586880ac87fbb7e414b4b128d0
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = f623911bb7efe5f6c4e969799724b317d6aa2107a356ab6a05143eee99e675b3
+PersonalisationString.0 = 19733edbc20bedc0bc269c4837a1a471377cfeb6cd60039e4944b31af73bc4c0
+AdditionalInputA.0 = 0591feffa77de223d6fb1a91579f766c4c09f3e9540d14fd2ee98894f7a80053
+EntropyPredictionResistanceA.0 = 60a809d63f6d5efeb4335b819e1d0a06b7be668765ca72f5404992a0e90b7a70
+AdditionalInputB.0 = c5f7b282a516a2f831d668ca4448662c92907cbbfa9b90c3745ea2e79b28ec6d
+EntropyPredictionResistanceB.0 = 530e7a6dfa6339aaa6661bc4fb13ff1f351c79e9d3415e2d0d570b8f9907c8b4
+Output.0 = e108b1bd65928d8097190c106321e9fcb3b930ef3b74421ed8e70802d3f06ebe7338948cbf08ab91cdf71dd398ddc4752b6d3dbc265fe836588783fbddd509fb
+Entropy.1 = 15895a61c69c50709b4254f3a383623dfb54c273b2df38955ffd0cd1891d3d97
+PersonalisationString.1 = 9ebde823c9cf6f9b8746f996bca3bca90938ad89cc4ddab0c005ddef74ff065e
+AdditionalInputA.1 = e5b5668b1f83ff614074d0a797af82b9fa1675aa8be9c1d517109204b5f0bfbf
+EntropyPredictionResistanceA.1 = 37ac0d2cb9fdc4d6f72081ca31831eb964197916572426d4c598b3b2f07e2da2
+AdditionalInputB.1 = 56eb51d28435dd73f10bbafb1e92d2508b7c56e2bb5381f591c6898f3dbe3bc4
+EntropyPredictionResistanceB.1 = 707b53903a0c1884562c7c9365efdda098c73e974167847a48ce7851a3da7d00
+Output.1 = e3807a26520ea240b6950769ea250e26ce05be72a6f68762fd9b6e94e1a17e0774479682a6668133589aa956572d15c32a517337ffcc8d9ff4a53b6dfa18b2b3
+Entropy.2 = b2cf89b4b2f4bd789048488d75028bde4007fe3d0bc61bd21801e26342df8867
+PersonalisationString.2 = 8589a95a91caf3e7d3cc50adfbc95c79ade1bc407f99e52b0748f0593e88b54b
+AdditionalInputA.2 = a41085c7e93e8474772e538d1030b740d83c2c40db46e6ac7ee8950fbda1c092
+EntropyPredictionResistanceA.2 = 6aa3aab9e852b638a1eb5db8669bd3f58dd451e0f241fa5e22eaed9e89c9f2f6
+AdditionalInputB.2 = 26036f2fce8663458d282ae715c3933d4b3b7670bb615f786c2c61571a6fba9c
+EntropyPredictionResistanceB.2 = 801b379fcd5ee8b98d403bd8aeb13fe5402696063cb13e4848f20f5fa743370a
+Output.2 = bea55bcb1bc61015ca967c5e92886555eccf87c6897ce1068d74807c700098bb91989dc1241ccd2c8077426601a72027b233480646d7e97052f002a4a4018844
+Entropy.3 = 024acd77fa201413de7fbae080d4dcc4d37e61a8ec5a4a8be14dcb4301867301
+PersonalisationString.3 = bbe7c27537472727feb9dc27898a2b0b442be00cded87d14cb81cec2849ef1e9
+AdditionalInputA.3 = a7c9a80801dc9cc3d61c2193c2505cd29498823493e68f3bd85edea256877fde
+EntropyPredictionResistanceA.3 = b33c88a58d58b429961cc98d141522f326e5b51ac24a17aecdce67fd0cd0ac5e
+AdditionalInputB.3 = 70e997df10f6b9a217cda9a8d7a0fdb66e57c62c0e9383e3041fbff5725f9ec4
+EntropyPredictionResistanceB.3 = 7c888aa3321a1cfe254a3f70e1443595f83189c906f025e05b540463364ee509
+Output.3 = 85ce70847d9553a1fa5f15913f8021f7f5d6dd565b7e721e2c090f66207d228f832470300a01cbe6b13e2362d84e3a0d3db2fdd4362f554b232d5aa4f679577d
+Entropy.4 = 80137bbdf6ebb05ea1bd8e8079c6ed673f183547103cccbaf360b2f217b589e8
+PersonalisationString.4 = 9b73aa2d080477c5c6441b11e93bdd03eb6dbad2ebf1f493ef9eabd86d34e115
+AdditionalInputA.4 = 679b2cc37c0b6af5a000e77bbc4b030dd7d929a33fd7d1f52e8f5dac6f1a3ce8
+EntropyPredictionResistanceA.4 = 60b15d6fe58ad7b800505041bb8ea38d0d08edf6f4ee6a6ffa010908c0756077
+AdditionalInputB.4 = e4b5261312638d007c3a5e275604d8c8cec3a055c4b1f11df62f6d4e87dd8e35
+EntropyPredictionResistanceB.4 = 41108a5f540a40a8f943fef572ac3aeb4806ac6addde776c2c0d3187f9e46e33
+Output.4 = bd90e011221783db4bae4861615f154c595c3bb63b7592bf495880b60fd0434ffc0cafca0fda2490e587a21cff07d0941b3a060b68548406c5c6b93004847cf6
+Entropy.5 = 2c6e010bfd6f916e94a65ab8a97d5356b6d06a9d36f05b67787f27d5a5490267
+PersonalisationString.5 = 055a7c9008f7764346af60aec6a818faabac6aa51b02b3db065f0ee15fd972b0
+AdditionalInputA.5 = 88d65a5ef8f652bd51ec2fef35fbba9f3f6d02415cb396f664c900ad66d12be6
+EntropyPredictionResistanceA.5 = 7e34a9353f2f2d8a56556ea73a1ba071f35ee7b4c24c33781d6bbf6278ae49e4
+AdditionalInputB.5 = 755af319109dbae8ea94021874249de41efa7f569c8a00baacdc3f1fdbcc44ba
+EntropyPredictionResistanceB.5 = 4d4607ac38630815bcda32bb95e2e22fc3b583e4e144dbf10d6343df7c0a4d65
+Output.5 = b3f9b39a15ed7e491e6eada83de88ffb334cf56c9de2a865d9aa3ad241e3e2efd72f1598e21bc0e265873d7a70f86e3a40a7d8159a9a98b47409d8ddcd4434c7
+Entropy.6 = d54266c738c1d9e957f82606dfdd59c8f198d3a41fcbcc5a4ce5bb29681f9c0a
+PersonalisationString.6 = c99459373ba77c4ea954d2feeb9f1e59709758fe4f0665f9b43b10db179d6908
+AdditionalInputA.6 = 104c4432aff0b6c6d17c74dc206478e37dfccf921a3f9c518f035115ed5ba6e3
+EntropyPredictionResistanceA.6 = 0b9ab66b9d53931f67b4a82d86f61724396272cc560be0c808d5af9518478c3f
+AdditionalInputB.6 = 1f42a23bf4dc65a0ac61f9fe5967fba136791b19a3992d5e5ca6532ac8552423
+EntropyPredictionResistanceB.6 = 642304fccd20a076080e4b18a9ec03192641343859642bc4b4c2d0172777f262
+Output.6 = 2a5ae9ab043e8f714f266e765150f1b3a0feef8e9c7e735f97b6da7091a0f31d231a484bb0db9172188e67c607c6db9fbfac9df8a8db5a716da1163e049f3804
+Entropy.7 = e269db4e5e5d149b12ec74858e79ef4264a678b9fb918896238f960fc4554566
+PersonalisationString.7 = 33326dbf202c5c0fa887d359d77e0c515faf7aedd192ab36359bccf661f25391
+AdditionalInputA.7 = 352bde5da254165429ca0fdd559594943b60d26b3483e8aac87dc928cd21c2e8
+EntropyPredictionResistanceA.7 = e63c3c8e4bdadd6001ab0857b1376d5de4a5348cec3b0deac270f1ae7b38a7e5
+AdditionalInputB.7 = 667ba3621509316ea46413e2344542975b9f63a84b07c283049964c8c4cd69e9
+EntropyPredictionResistanceB.7 = 9b6f55d5ba67b1ccd319b3178b5869b8e4b8d1b8296077d25282f8e723d401d7
+Output.7 = 9cd47c64419e5efc4ca9e4637bfb4c9a263b539cede6d0d30b8dd346536c319047821396345e8f4b99ae45a2a58a3003879b8826556982b58925a7c3c3cb778a
+Entropy.8 = 92f56bc8e8905cebed8a3f9b1f6f51140ececbb0c6512631c9731480aff85562
+PersonalisationString.8 = 8a07cc2b3d4bef18fc1489e73b0dcd190900a0d7e8418c664e4f46c1af455453
+AdditionalInputA.8 = 27bb21419ebc680c366b226e781823d723e461e6b33596884a11c9c80427fa8f
+EntropyPredictionResistanceA.8 = 03db588cce94dde539cd69b8f2214c0047083e93bfe57d697e5c8fb1a015e623
+AdditionalInputB.8 = e669ac484b1558bf8684502493d4798b16a82187afb8ebffda216e85604646cf
+EntropyPredictionResistanceB.8 = 492bb79e11273df77ce6b8204ff1feb7789f16c8fda14eb58518634701a2698f
+Output.8 = a46e2d65bb2b9cc0f8a2871859d487b74dd15be678b8a86b4cd761ae12fdeb309b889d2354c2b6e4f13dbb0bedfc69b490e0f738db1705de28e44084f515b19b
+Entropy.9 = d7fb73776b1c69588e42634bb2ea09db7cc0f04ebdb79b504f3072ca49f57acd
+PersonalisationString.9 = 32bdd8d9c9d69405ff0fa44a4dba8dd88558ed629a7e751714d5139cc871a7a0
+AdditionalInputA.9 = cee74c613391ec0dd3d8b27fff73617dbfdfa147eab0884d22ef09eb6af13b68
+EntropyPredictionResistanceA.9 = 7649c84f589f1c0d789befb329d59948c397b535a416fdb346b7dc1123567c15
+AdditionalInputB.9 = b777c9a65e844b6be185007e1492b801fe3f60284831ea25c9effa90123e0bd0
+EntropyPredictionResistanceB.9 = f60b4618236ccc4305bb3c2d7ccc9c733c221916b776fe55b4db0278fa49b269
+Output.9 = 21d9c57917639e59d6847ad03283b044d229103ab40b08bc9bef6daef3f0cdffac119d3ca454c4b005d4fa65efe1fef89f18f9d44e374d44c3fea4c66aa4ff8e
+Entropy.10 = bec56256ce5f066d32705866bd431f84a24390223323924a7af90e33f8a85b70
+PersonalisationString.10 = 5e0a0ffd4582fc6d32dfe412fbfcc95e033d59de2f673018fc76bd6451e9dc14
+AdditionalInputA.10 = bea834982a99e6df840ac926181ef8cf66df1dfebcab0a31504c8efa104b60d1
+EntropyPredictionResistanceA.10 = 21a3d13927d2a723942ef32941fefee83e823e3bf4e3702e384c4960ec33a317
+AdditionalInputB.10 = 56ce062a0f5832cda663bf146724e4f5498a25b8df449d5151f588fac57ab8de
+EntropyPredictionResistanceB.10 = 83f112baaf108c734f5c94e67f578c5cc7ac2a432870d37e9d3c9115300ccf6b
+Output.10 = 49c2500f53bad758ff45d8895918509690eb4c6d8e14770e7d6d192641568e0a85082f62583aefbb0eb9342e283d5f6fbdfcda12c5205a6ce43c9133ed49b981
+Entropy.11 = cbc854a6945cddc2c18422301e4ca80872c7d2885a451779c99331f5cbd4d34c
+PersonalisationString.11 = d733a7da06ea5709315577a751f745186dc27f0414956bef522a21b6a5584f21
+AdditionalInputA.11 = b3e4a0ba719060a9ba636e558d3187fd798a8469d28ac61f4c92f00eff61012a
+EntropyPredictionResistanceA.11 = b8150ccf6858bed32a62e985766f2894f16a380d97e262c6a0a580b029d78b73
+AdditionalInputB.11 = a83880d25a8d6eb28d66d159a62f56d23b2db0e687dffcde6c64cb2974e8871a
+EntropyPredictionResistanceB.11 = 656415107f51a7260282bcb2525ff184e75df720996e3def8ed8d13f5faf05ce
+Output.11 = d3b21da9c2d9a7bced12946750e409f9f2b7c6f3f84d74531d0711e41e8cc019ebf59d351ad933bb1e77d6ebbef2e9ff98016b685df90f608366e32a9d784058
+Entropy.12 = 2043763f127c2c72ac581b2d6ae62ee980fa4cc72e3057a5cf103d40c1ac05b2
+PersonalisationString.12 = 45c7a29c147ceb42c32adbacedd724c02e6326b5ddc998ef640e4e52f92353b8
+AdditionalInputA.12 = 8779aadb8b9dc26851743120ea7e41edf824db2ad7c9e567df23b154f212060f
+EntropyPredictionResistanceA.12 = d9b79a0e4550580bed48ce52e7c6b795a2f337b0957ef8bcc0c37df2371a1295
+AdditionalInputB.12 = 4fdfaafbfb71a0685669fdf090025417defc9f0cfb6beb0a0236521e6bae2928
+EntropyPredictionResistanceB.12 = de1149f1d2ce43c58225fd2570178743f1429dc9dd33e54236e5dfc0857c8984
+Output.12 = 83198adbeb9ea5994ec82948d6f6d0361a08e5f0e17bec103dbff4125e2f24a671e3b37209c59fa900a7f3f19ffd200778faa230ff32909e61cc0b05ec9d86c7
+Entropy.13 = 178efbf1e37ad1fa19d8361357aebf2841ebc9738b292bd1d4017597fd751e9a
+PersonalisationString.13 = 3784f305b916e2f344e3163e462a83de375a508ed8c8af8156add7ac237404ff
+AdditionalInputA.13 = a02ea6f6d9b89972a3f71de2d9f1776f96b2f594b92452a4ee6ec759c40f4277
+EntropyPredictionResistanceA.13 = 95716e484cd811c32673bbd8f441f8a232e445ed05e47beca6488c4d3e0e36a5
+AdditionalInputB.13 = 170f9cab0ad17eb286702e02d48b3fcb09c0fe34e4eea658fea536c37628e53c
+EntropyPredictionResistanceB.13 = fc8625d5cf7eaf5faca7b6386feecc2e2ed15bee2d3fdda3b722f1032d03a2b3
+Output.13 = a1e4c516675619f75091d83072e1acde7b47981e8956135b54cd87568bcce5b7f0ea03845c2e09e1eb0cd6a865297ce5b87133d9d0c2ee9e48e6ea690dbc6310
+Entropy.14 = cc1511f4e3530b26ba89957c3f30dadb17f040989216fefc57b5907ef437bd10
+PersonalisationString.14 = 838b73065f634f9ef6e89b6777f4f7d66fc47942ff60aede0d6fe42bb74cb001
+AdditionalInputA.14 = 1e9e8a1a973e4eaff507b317f68cfa08b98585b8ab44132024ffc66c6142108a
+EntropyPredictionResistanceA.14 = bbec897b0d90fe1735bb49248143cb24b1e04487fee680071d667677ef006daa
+AdditionalInputB.14 = 6fd46ca18d10326f5734d0160163bc42d3daa55e3c74a2e0fc7380fd84dc0bec
+EntropyPredictionResistanceB.14 = 16f3bd62634368535da170a7f117bbf8b896ba1bfac5ab682247b1b55452e844
+Output.14 = f84c05b144b114fbd2f80a21862a44f3641fbe980957e3fab736976db37b8bca823d7f848f32f4aca60268c020a2e85a5ee0f31fb746f0dff066b83d32563df9
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = db6bb498f97120aede8b99e8a2b4174cc005efef77855aef218d5d3f15494e94
+EntropyPredictionResistanceA.0 = 2f28f4965f77c67a55401e01745cb55c64a0841274c241e266f7fe4079e57a63
+EntropyPredictionResistanceB.0 = 0c823eeae10e26ec1d4826e2a56258f49e547952f4cb864c5fd9b32e33a70c50
+Output.0 = e6667cf7b279a481a0b89eea9f2b52f220f272c1c06a3a76daef95e90ccbda26caf07c569c68dad451873fa4497968b3fa073b9369d13daebd229e754c9cb2ec
+Entropy.1 = abe6e2edf19df0630e627fe5e587076d4e81b4fc94413a01e8ee37242cddaaea
+EntropyPredictionResistanceA.1 = 82c77118755a84daa22eac2f47af909ee7e6c930d061217994bb596e2b84ce54
+EntropyPredictionResistanceB.1 = d06e8040a8f7f5cf4816d09155b1d53e605ad1aef3bf15a8849d81904392f712
+Output.1 = 3b4a2f22b9b4e5460e97256a83aadc1f287f3ff0186d66a9c7db9a06cfc0c9a0c35ab60f01ec52f68f256ba46f7796f9bd53104b00aca59dbeab7858f5ced37f
+Entropy.2 = 27f9ac96dd7edbe5d0f649df3a318810b5c45ea6d1fe165cada2fe782f727d80
+EntropyPredictionResistanceA.2 = 8bde9b957d3261fabe26d358aac3ba4089a55537849be497d325baf9a48ca4ad
+EntropyPredictionResistanceB.2 = 2eb3b6895749036caecd0b25629b71a201826cae03f5f6cb5b73b4fe8694cf96
+Output.2 = 92d0bd52e3d3c43cd93729efea4b511fc7d109e97d6de49724a9bcb0ba754db23c83b2f485f0c11318a5cb401ef20d1a5e4763ecc580cd8a37a1d3653205499b
+Entropy.3 = cdb575213b84edfdd4561c819594b6117b06e751d777a05ca67e2291fac035c6
+EntropyPredictionResistanceA.3 = d18e8a22ceda05a5103c3ef33c4a0fee8070a9a2cb27911b3dd58b75dd8136fb
+EntropyPredictionResistanceB.3 = d9b47bcffacfeb5ec52a675c28878dcbe61c13e8e8a7d8b671c2ad6628eed1c9
+Output.3 = 8dbfdcb6874af53a01fbe85db647945aec9971253a40b8efc731bf10901ad4cd4a0b83b9fc185572022693d8d242246ca68b6b31168beec711fa2363fe702afb
+Entropy.4 = 682a58ab599b950f1154decc7988c4741d10906f1d487715d2a7ba766e106756
+EntropyPredictionResistanceA.4 = d9c805bd1ab862da95759991ab86fe68385b6c523fbac08b979e3436ca938605
+EntropyPredictionResistanceB.4 = 336d8ec5965b6f6992adfc3147713fae10a9766a21508091f3e1b306b30bc59f
+Output.4 = 92746b579e5452ae2264d907f800865afa591418416fe56d719af9aa0a396b99608509a97cbba6a13097ee557d2511063472bf2abca0863101052bebf9d77700
+Entropy.5 = 97adca81c045fa02e30d4a0d72624485288d0ad96e066b13e87af48143f9686c
+EntropyPredictionResistanceA.5 = 09eb90d33affaba9c64debfad8b07a621e2ca7b7a0b70d0ff1e2081b58231393
+EntropyPredictionResistanceB.5 = dd7baa3395cde9e857d9e69155dc958a049b192b8395f2abf13fc46bbe99d883
+Output.5 = 1ca6d26cb393ecdf9217479c2952d413a84c2dcabb190f4fb43aa41c61dde7a6e8ea07c4bbc078322f3fd82ce37edf97f6cb3582501ae9588949efcd29e2603c
+Entropy.6 = cfca50e7dd06d438ae9c142780f7ac164b49899e673f52391017d94f713faf74
+EntropyPredictionResistanceA.6 = 0f9161cc14759385967432ca96c19bdeaa2fa440501fbff1cfa22bbbd9f5b8e9
+EntropyPredictionResistanceB.6 = 11d64b5de8476913ccaa11458c32251167c7e2884e6f7d6520b5aeace84e47d7
+Output.6 = 0cb6926b15246cd2115c24a0ea4fd37290ff3a677425b63e1fddb6ad0575cf987bd8c0d4f0acfc4962e11f7eeca514d013146d4e1ce0440a276134bcbb7a8120
+Entropy.7 = d9966eb91cb74dbc27fb39351d8343cd77e36caea6b5f4b2bb9945eb2dc891f8
+EntropyPredictionResistanceA.7 = b96fdc93f8201333ff13811abd03f98546c883fd82216adcbfae28e76d931c77
+EntropyPredictionResistanceB.7 = 4b871a4aa5ea418a155c2353d27e37081bbf4943d4772738daa4c074f92d2a98
+Output.7 = e7b97dc77f230a0a7a1d0f7f6acb5a91ff539df26e833a29e1e50c0960bbb5aedc12d6fb46027cf92b130ad3e6eb939cb01a64b5ae6dfb9a7b9e1878cef2dc56
+Entropy.8 = 9a470492953613321d55109387b78a5d0fd1e584632daa3c60e20a334a3db7a7
+EntropyPredictionResistanceA.8 = 5030c49fcb180c264cab2e159c7b7d0a31be6e36f14c743315d89eae5ab005f9
+EntropyPredictionResistanceB.8 = baac16b0f7411d0e7fcc252e36022ffa74d24718e693f33eb44a45ec0ba4bddb
+Output.8 = e974bef1521c1e64e8f4843e2f8f029734140ce243bb7c06d2ad3a6edec3986b8ee969429e6676b86f42e8e3f98d90a54572c35da8f02850cc6e50a99f113f79
+Entropy.9 = 41c1b4302f7789e8513797dc788652d0e57efc216411e66bb1cbc3e5571ccf15
+EntropyPredictionResistanceA.9 = 0a8279e06cd8a55d850c10ea98653c208bc07c550b24a11edafde34e1fc1dda6
+EntropyPredictionResistanceB.9 = 4661825f152d9678ec5b8210b9df482a18a90d70b7748b1e2121facc2d66cb7f
+Output.9 = 629a075a230b58bc326a589ca42ae61b3a5eaa7a46ee9535b1bbc8b7b6abfae117470bf1991ac71ec6ff3e02f5b8fb6ba744905acad6165cfacca047d64e16c8
+Entropy.10 = 1e7d27c47a9646d6a2e7cd3e7b448f9b0b2734e7a3797b08696a7aaa0d9ba1ef
+EntropyPredictionResistanceA.10 = f7c70835d3bfb98155594ad179fb8e86340ae879f56d4d8b2b31c3c85b2f4e60
+EntropyPredictionResistanceB.10 = 6b1a47f09137b79daccae0bc335af939d00bcfb6814a8719fa0698f94b945bfb
+Output.10 = ff06084d0ac2f7d28364bc75b68cf3db4bd9cffb2a40bb77c9f027d9e9c1442a34e0fb442e588dfce00966822fffc143aef55e0723e9d01b1eb8a6fe3248da22
+Entropy.11 = a968f379e2103479866bc54c3714637df216f35a63f287be4f32268f83942156
+EntropyPredictionResistanceA.11 = 084078f8d2acfaac34035f6d3b3eaa44d4ad6d9079f7e2e42f7c9978e5da7750
+EntropyPredictionResistanceB.11 = e302b2bf6710efce24f6de49499decf70d17d6d46db073ce9d2d8bb22f671039
+Output.11 = 6f496b516bdede7738e161a2c9b650052095b73404c845ec956fa63dd13dba9036ee9580453b2d2783cf050ab8cbc432948d67d71794e6128011bfde58f3e8dd
+Entropy.12 = 5c58baa66d392d19f02d9534f69c3e408267ebe2746467fdd921aec79d578011
+EntropyPredictionResistanceA.12 = 2ec82ab4ef05a9c8c6386094d8b64ffc54cdd95f82dbd19dbf486f0e1379e2d1
+EntropyPredictionResistanceB.12 = dc83e9adcfafa36cf577e1d76b7abb2ed1073b714e573c342e06598de5c040bd
+Output.12 = b5a49e83b6bcafe0ee0990a5e3506f5ddba4f21094cc201e795bd5abb76e03557f8cd37d8c91c8b3755800d899e05ae6db980516acc7d5847001ce62dde788f6
+Entropy.13 = 28ae0564e743e9105a5690b17eebcbc84fe66ee9682c0a80ace4b29e40c82cb9
+EntropyPredictionResistanceA.13 = fdcef79a1a4783b9e6bc5840c741490bfe784ee1f2c6fa1247bd6fbf6518e6c4
+EntropyPredictionResistanceB.13 = 5f25e991df4cf3e4a1c389196c6247e973cae04f65bd5b03a4195a5c91c306c8
+Output.13 = 35a7c91fc961374639d029efef82c0de6ab3fc02c2a6b9cd198203e2d7816ef9584de9b1fa581b7fb2a86aa238bf79d31613a98d17607a9a8e07f4631bba286a
+Entropy.14 = 75fb31a8ff974486f251ce94df3547bb831a95c26b4efbd816912fcc768777ae
+EntropyPredictionResistanceA.14 = 8090391380ed44d3423fdf8d47891a2027110da4c2334eb91fe8611402176326
+EntropyPredictionResistanceB.14 = 8288a190ae9118c57b033808bb3f895d4dfbf2dc7ce9b9016e339548fee10a6f
+Output.14 = 73d122b8854f2610a833a78af28baf4a2dae48dd1ed685e4f98947092e3aaa56a65fdc9acd8a875c16b2a91c757ff7cd6ee777292fbcb0220795c9519cf44052
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 2dd0fcc7162b3e79ccf48bca28b767602f0e2fd3b5d3ec2bf93066bca0b4031a
+AdditionalInputA.0 = 3ac3daead13c110ca3eb4499d838b90364d9183562c6ad39faf5204edd125526
+EntropyPredictionResistanceA.0 = 1915756ddddd51ab6bde8f0f9eeea4998e9b38442b0e494e63273673a14ad671
+AdditionalInputB.0 = 6a144cd93e6956533c8be6048a442b268d8806a112bcd880c9242370055c5e3f
+EntropyPredictionResistanceB.0 = 99f18492b6f302905523161063905f78e58ab8064ca02a4f3361a3374ad682df
+Output.0 = 0fb66b9299cce5461063ccf0ae08655b0bc3f853813d04b08cc7fe6d76bfa2e7549c4525bf41fffad6927f3ea759b0e0cf0bb13304c6fcb428a3f2db3ce75c2b
+Entropy.1 = 9362dc762deb45c055c0e921f2aa78f84c25d3e85363f545b360c747fa49e0d9
+AdditionalInputA.1 = 0153f80ad5d476e9a57342f63ab7e4a650ce0b89c9421dbce27d5c87252dd0a9
+EntropyPredictionResistanceA.1 = ea75062767583880baa31e1bb8d1445a5448b7ab54399143cdfe70d324ca0669
+AdditionalInputB.1 = 973302eb52b4740ac1a096e4c17c1c2ba705e8f2dd94130d2902024d14b88e64
+EntropyPredictionResistanceB.1 = c267ca3a1d0f084980660774a4732a8b7ed39e9fee74828d887925b00a48b1da
+Output.1 = c3059e2593f58398a7080ecc25b083a818fed5802b10afbe6de4492b21990a69acff74f0419a6437196afd02ef270c487664d3ed1bcc39604564af014caf6234
+Entropy.2 = 09afd3ec300f1990937684a315ba4bf556ad93b909d901c9fd12b0d1832a8308
+AdditionalInputA.2 = 90e285637a7b7a640fd9eced97c686d00e90083731e6d9e7ba3c5a81fae11749
+EntropyPredictionResistanceA.2 = 3c4bc96d25b927bf520d12ec1d19bdbfb522d62b59161787559f3ca89f1ba6e7
+AdditionalInputB.2 = 51bb4711d2ce430f9f134d13ba5aa3258431f81f63c99678834459141da1f616
+EntropyPredictionResistanceB.2 = f98aecf330b5f29dba8bee1fdd06d506afe937d984b4d03e00961a8991ba0871
+Output.2 = a3cfff87c088927f0d1e52bf1b2eaab52acbf0a0d894705234c9cc297e53e5baeb558a1752aa535de93410b8a06bea9002f4506e171ef39869cef615ac0fba4c
+Entropy.3 = f0fa264113599cc3d78fc8fad27684c18a6ee998cd913e2feb138ab1f2ff4cc7
+AdditionalInputA.3 = 20c70471caa743e332deae20f49ffdad6036d54a12cc5ea179ff1ab75a32d2c0
+EntropyPredictionResistanceA.3 = 0da907264fb1cc385ec698adf88992d1219bee721377a51e73eff6c619a63b1f
+AdditionalInputB.3 = a4acaf52eccf138cc7bfb61df73320cdd44b9338a5d61b7a3b0bd5c063942052
+EntropyPredictionResistanceB.3 = 11e1e3921b8d34fdded95b7f349dd4865a1d000c5eb1860177bf300506796b0f
+Output.3 = 1941df8fe44fc7dc3b6f3cf677177b2f3b9bba7fc8c6af02c8f0f5df06cc56d133616a24deecb800c38755dce19b2d7b490c1f59b5a5ddd3ddc4842f478a5e48
+Entropy.4 = c5c4cebac02ce5f287c8fbcd66d08b646634f0950f5e119ab8e34251e9e49e13
+AdditionalInputA.4 = 377b4759c1a6b0fb86204b3078679bbc8c5a3ca8d968d0f8e47b9975a93c4756
+EntropyPredictionResistanceA.4 = 7b2060e81520da7d309cd885b7cd97b2ce58fdb30756f2eff2576cd148bc3499
+AdditionalInputB.4 = 977d081883668eac6a427814b6be531bc17a8c32033fe568d190de0785d15262
+EntropyPredictionResistanceB.4 = d3e95b3caf412996c18f329553950b83b83f2760c9f855600647feff1e85e190
+Output.4 = 1611547c238c7274ecf2bf453de25b37fc5e0bc550235b867b66d492902cd4d7d904ef25f433c80306efb896d9c531c44896b864e0342fc0fe6928461734a18a
+Entropy.5 = bd08cad27b7fe2d39a950959c2a18a48bdf6ffe79591c52e94b5052699073980
+AdditionalInputA.5 = 45b49b8a7296f5719a079eeb298506ecdddf90466c686322908ff8121c4915c5
+EntropyPredictionResistanceA.5 = 841d45334b4a4b5e14d5e45e7ff4ed8c23296b61d7ba93af8c4f7f263883e219
+AdditionalInputB.5 = e35564d72e5ca8a3b3f70c75b8d5054c3ddbe230f76d0c30ff4adcaddace050c
+EntropyPredictionResistanceB.5 = 13f91a9fe3c2277149410aa9ddcbf4ff681da77ef85261076ebdde0df80eb8a9
+Output.5 = 25ab2d673cbe630c32a051c81a20327d85cf1f39a346f44a8e8f3fe018b8b335cee030a95e4bf1a67f1208c4e7f86e93dd6aa5e74b8b9c278160b8f36c0054ca
+Entropy.6 = ad732d92be54884207ea8087d2043660f00ec7e9905d725b49e3c9472dd8f567
+AdditionalInputA.6 = 66d39c4b3580732370ebf63827241a661851ef81e95c1656b2c042cc84a53ed4
+EntropyPredictionResistanceA.6 = 219d633d75000485d93dc3912ace84a49b896374b1b0f6c5b685597f84be5a20
+AdditionalInputB.6 = 1806a080806f2f75acfe64928780d8910a9ee37f18f8ce4f0ff8e5fe15cef4d8
+EntropyPredictionResistanceB.6 = 5b56faa1a28daf8e33670a9a88290f84b1e012b1ce8731290627571475675dec
+Output.6 = 13943daa9f54f878f5c4e7806b4189f6c4707386bce985e6ea5d59dfb644ece654ea3f37db370a868633b4145fa6a91860d5446c61c8955079431bc3cd398224
+Entropy.7 = 9c8bf83c10444c6c01c31530defe2c0fb303592fa4e4a5278a90a59974bf24c6
+AdditionalInputA.7 = 39ad1b47b37d90f35d0df7564d35b82e98740f23f9b20695033875ae19adcc0d
+EntropyPredictionResistanceA.7 = 3ad1bdaf31b8423c41605977fe26c389df4504f1b211f3fcfa7d70fa8a27ff41
+AdditionalInputB.7 = cda8f68e5464210553505c0d54861e500db8b32826d47eec2b27b393a61f05d9
+EntropyPredictionResistanceB.7 = f0f1b80d296123357380c9f26f00a04ac9566102b00a8ad6c71c082a2458f4eb
+Output.7 = e5b3019c7f4e8092c023b1573d83b7e31ad6ea8820a742594a42de4c7bc6c27f13a9ebb446b78682e16ed6759906df12b885454d354f8e72c73252d5dadb485c
+Entropy.8 = 6bf478257820c1d10cb735aac76325e8d828652b3d85b82176c4ab3e2ab593c0
+AdditionalInputA.8 = f804bb31340dbb30a4f0c7dfc2753c5b525e7fc25af89c6e208bc5b692a0c453
+EntropyPredictionResistanceA.8 = 941ecad9528b288c616a07d15306b3cbb491547dd51cf00b83c6c9f76cc2752d
+AdditionalInputB.8 = 59ca635f031476d47709067f1087241a135fc617b6f438fbb143e2cd4be0c3ff
+EntropyPredictionResistanceB.8 = e2a8a233cccfc5d83038bb66be79c795a87f32a6d0aa6287c828de026046bd62
+Output.8 = f5a2b8498e45e8a5151bb5dc6c871ba1f44a1bfe376c57671c6216e4f22c75152a2a4e5a5295a0486d3e809378aef1a893de7e2aef5a3be82401413fc97f8d97
+Entropy.9 = ed30367d5ab3336286759f9d8ba7420c0417116c2cb6735560d81445220bfc73
+AdditionalInputA.9 = c50ca92a85cb04e2378af49fbaf5e7e509946475818270f7eca154c8eb2b970a
+EntropyPredictionResistanceA.9 = 2710bcc2fb39cfbb2b230d217cdcccab7bcfe8c7d960fdcaa844c57fb221e28f
+AdditionalInputB.9 = e6fed36e763c7254fff20446d1610b7ce8f38ef7d129e907df8e38f5842d72a6
+EntropyPredictionResistanceB.9 = 11677e7bff8b42bf71b8f5c0c0a1f282906373dc94a225764d70835066e7d52f
+Output.9 = 836c1cd9eb49bb83c8e0afbdf9935589cd78721b3b974f63f32b06f06ecdce5e1d5910f0d1a3a421b47ce61eb26894f2dc51ee36a09f74a9dc150c848266dc1f
+Entropy.10 = e492b83d6eedc1d9548af45b15db4bce097f0c28f1b03bed9f2cef37725e5c98
+AdditionalInputA.10 = b27a9c49abe03e4bbb62738ae86959c5b7b6992240ee8d99b15370df1c5dfb10
+EntropyPredictionResistanceA.10 = c66a45b7889a10a07ab5a6b29d4c265c9e196bbe5d0fea35e5521d4d06e487de
+AdditionalInputB.10 = 0b9ed31ef4a353a9e558c814225ce6a48ccdc04792c0a5175216c394ae6c5a20
+EntropyPredictionResistanceB.10 = 132c6aac2bfe3a23175af8f73e0b0ffbb7ca2994205991b242e78ed747b29da6
+Output.10 = 42de1248d7b86bdfe27da74ff1734823ae442429d00edefadb6000b2509d51d9467426f8ca60a08bdced0a293091c5f97943244cc5a1922d788bd73ecb3f0f2e
+Entropy.11 = 9098150b2727414767016cf547121296213f3de8ef13183111deb0eb05325bd9
+AdditionalInputA.11 = 22863543bdfae163718995b7ca3ca7f7c6de433cc5dc97b4e6da7e0efa3814eb
+EntropyPredictionResistanceA.11 = 95a189594559bce14e5bd3293527411b5c0a5b3d5c9a117e0635683d93dc77a2
+AdditionalInputB.11 = dadc98a2bd1faeea0400057d5ec0df6638ce838663e34b947b448fdfca996a4b
+EntropyPredictionResistanceB.11 = 80596df2b254940676968eded690991a816a1278373ec638c9153a40bbaa37c5
+Output.11 = 2088cad0ec9165f10b53bc8605073d1582990fced61999ea1ccac3b7daaa2dd63339f2975f1e8a9264f1540c232fcc6a79d9aa63f96c948e8646777d7235fc7f
+Entropy.12 = 0ecf8a53c5cbfc45b09644e1b768748df89de77e2ec2e5535f757e9b9018c99e
+AdditionalInputA.12 = b643b1ad035599e759b61a2ee09f22d78bbd45b59509f399b65ad25001bc5449
+EntropyPredictionResistanceA.12 = 5327099832d33e863f2f1d843b1c1e84a1f2cb9f94f10c00d1aa2ce88d6ff5ce
+AdditionalInputB.12 = 502752af6bf6f6d40c1df4dd2556a75b74c94fc26fc91b1283059c9ecdd2ec9a
+EntropyPredictionResistanceB.12 = 964043390c74cc182b79cf23e9e59a98d679b04bdc1ad2f5dcc289bb021c8dc0
+Output.12 = e72cc612da2514b11094be0e1c2279891a4130c7be8b4bb7ec8be526f368f814e830fcc926c3afeba0bae624adf7fd34f61f789216fc62b0f18cfac74676d00f
+Entropy.13 = 6ee8c0ccdb7e9f3074040e89d9a66aeaa3f64cf351c6330b35300214e16a484f
+AdditionalInputA.13 = 289ac336565e1b8abe25173140218e09c7409bca8d84b7576f0e87db117f5313
+EntropyPredictionResistanceA.13 = 762d63ec18927c1ae370376443bb0706c30c426e4f381a67ff4d995563333954
+AdditionalInputB.13 = ca037d1eeba3c66c15a962ed44f0b50ba63176b64784cf2c688c799c9ebb4d16
+EntropyPredictionResistanceB.13 = 2fa8d5e4263f55855971993a5fc7facce1e40e87fbf64d1cbc6b5705d82d30f9
+Output.13 = 10536a10a99f845c43d5501f8a4cfcaa9cd436340ad8fc5857eaa8d20fbb673361248a4466800f319fa926eceee587a71148144332bd8aff0afcbf55874fc3c0
+Entropy.14 = ddd1296d4d08846c922043761f5de9b4f4dcb787de09e39d2ecaac9a906e0620
+AdditionalInputA.14 = 673f6d71ad3c7c0e5cc226b82f378407814ea101dbc051821bd5d1d7f4bc7be3
+EntropyPredictionResistanceA.14 = d5398b48773c390cd89d951c5e6deeed0eb38d59e3b1d0bf5b2e4359b0784305
+AdditionalInputB.14 = 440e9b55a68dd27df4ef8d0dfeb8c2156c2250cc1ab574432c2b62baca7c4439
+EntropyPredictionResistanceB.14 = 3cd2f704ace560337fcbcc07d2b027c37380b35b26b26e40b9d62dd654e44193
+Output.14 = e55b536cca2b2148af20e887ad6b1c6ab5c285fe5271e188c5fe5f7f037bab8d6d2502ab71d768d4f05b1bef7f27440ce8f64311ff7147dbb55719bf7371bbd4
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = ee55a97738550742effefd7d5a43fb2363b91acccac5b4b479c4edfe0e66d56e
+PersonalisationString.0 = 5fe7c94778a3474fcae5d5664cd9530bb2caad480b9415676e300642068b639d
+EntropyPredictionResistanceA.0 = 3ef82e3b0169adf22bc1d13a91dd359def6f269f008f3c49467447063e0ef805
+EntropyPredictionResistanceB.0 = ac84ebc9938bda8fe84756a87047a5d502ce6482a2a040d25643007f2e1da8f3
+Output.0 = dbed55772e158548b8c01c4cd4825507e126f2f1b18e4db4509c19b18484e6032ed3bd2271b002f13f1bcb9bc1223f9ac0da0170720ec8eb9749d069e200f2e8
+Entropy.1 = 11edc998851eba78a01960d713f843d8949db4bb0735d6bbc941d13aede53553
+PersonalisationString.1 = abe13391169a7b3d3d498d8906b52004bdb676d45e9ca3060cfe21ecf6d10348
+EntropyPredictionResistanceA.1 = 17d5fd16d86660ef3a3d2f36e99cc67c590c5caeb2f34c13c15398d166437ef5
+EntropyPredictionResistanceB.1 = ad4052e8c3d7105f9ee2bd0458e7e6eee7f81a5207c28c06cd4978d1f97b7d44
+Output.1 = 33df359fad358fd052d81d6e6aafe3d30d2bd5f0cbea34faf0a2c5f7981e1003924b6f5ded0fe00866c6387a36898dc6e23d2f3f1092720129c55ceab8b94941
+Entropy.2 = f9dc20cda9483f640199c488cbf59edc8ef9829a2cdcff27c9496e9272f1904e
+PersonalisationString.2 = 06d28e969af2de1e6773136beeabac977960859955cc1fff5e3cc36584f96a3f
+EntropyPredictionResistanceA.2 = c668117228274cf487bb89f21e1ad60a1faf0d27cb873f1d3159e7115b6a7e9c
+EntropyPredictionResistanceB.2 = a7eb3cc4dfe1e5af2d54c5292d869f964005f42ef8100972c86590911d218307
+Output.2 = aadc34ee915499b17cad15131ae1383f35e5fbca3f138200dd070651cd292e965b659c4928090bf4caa82eb2a3d559424db23a0426fbd66144bd0d1378e3293b
+Entropy.3 = 33d47fb0f33ee98c939aab57ca431f7060bc90c2942869407c1686d661f31b35
+PersonalisationString.3 = 0c5b863172dc14ffebdb0ca9407f97c69e87d641abd4626a8e35bb230f6f6259
+EntropyPredictionResistanceA.3 = ae5aafff054613439b01427ebf22eade86744a6ba1835471e1773354079d4a67
+EntropyPredictionResistanceB.3 = 3bd9ab010f7a31904cff7f9d2e1e7765a71efce15fd2c203a501265cba6f2461
+Output.3 = 3bf8d5fcc006b6c8e9288048f739f722cb7a04d72f1f2ff380a769de5d22fa7efa9c1f885f50274d5f67b05bb3db38f723957cdc7b0ea5e64a168892790cf366
+Entropy.4 = fa024c89b9281e20c51f3789dfcf21e78f0e713f7148eef38261f1637401141f
+PersonalisationString.4 = 1c88203aff89cb4bbbdb5d1b643223156c5698207909bb7b6be0b9e7d8f83e67
+EntropyPredictionResistanceA.4 = 8a03f79cfaeec6b61bec27d6f7ac9b5b10c63e7e6aed2a1f0292fd3548ea9f3e
+EntropyPredictionResistanceB.4 = 413d8c0ada9234f95210dc1ca8e5f1f2cb5f9cc4193dcfc53aa16cf4b1d21efa
+Output.4 = cd17d5eb10a738dbb022925f82a834f2a339fb4cb3ee07f5aa9b7d06493d928ca683a133b40b3e949eb0bb3361593384fa0b04791a43d94b879a34a1fba29f02
+Entropy.5 = 80665c98d10d797759ec16de62d8ee4df51623347bfcd8ac3ebbeb10156ffddc
+PersonalisationString.5 = 653e8c87d620df645d3157733203f0c56b63e4cdfb7f9883da4e1975ea14c852
+EntropyPredictionResistanceA.5 = 99e0597c5fa96dc4ee619937091d5f7a67e686a179bde68c0eddcff6b1db19c8
+EntropyPredictionResistanceB.5 = 087c736758e42a8b6c6e4a1a13e61501ff7948a2cccecf2c2070adc5931c4972
+Output.5 = 29fd641716691b1f94354219e20e7efb151754671e196e440a614f34b86837a8bcb080cf7fbcf09141bd8ebee7de6eec06f622be10063b6f6efc217c945fc9ef
+Entropy.6 = a53e592bf628ec67b070e3c143e54c1f865b8fcf0b3e437d092be82be72c7e6c
+PersonalisationString.6 = a350283b25d153058374f5814ecdd80cd78b8eefdbc67b0654a9836bc80c286d
+EntropyPredictionResistanceA.6 = d01f404c9fe6cc4b0646ade56e6f30a0c763bf537a95b71b9f976e9c7d6e1551
+EntropyPredictionResistanceB.6 = c7794c0be90f4ad1b44d95b2a564ee5faf9c2a8674de9f4ccac0247715f873f7
+Output.6 = 13b1bf14672ea203a7a5feca663859b08ab5878f44c3b88df79598985a88c3b28a84d6e00e8701109cfe2c15ea85908f0edf7b877671c022bbb0d31ebfa3b38a
+Entropy.7 = 8cb2fabb3feb0821b8be1ae02513791835accd0faf33059555744b8e7bbb5900
+PersonalisationString.7 = 5e6316fb93cdc34078807fd83858ca6debfe7b50d7b51ac1b893f27bb582fde4
+EntropyPredictionResistanceA.7 = d5f9905d50ef70b96044f66f9aea9e381c8407c18ca98d7c65ec72da062517c8
+EntropyPredictionResistanceB.7 = 1c06815fba946e4f8603cf7f1169dab4959a75344e6f5e3de9e8a98a85b13517
+Output.7 = 03097ce559669f289487139da6305f2323048bf9245ac006aaa0e578acd9ab16f2a8dda50651ffbd91a845d6fc11759328c67ecd6586341fa220513bdec7301a
+Entropy.8 = eeb566d9c6dc979bd06e734b54adb7ff2ce80679cb3b5406063ab589a23688cc
+PersonalisationString.8 = 0b22b4633e3657bd5faa1d88eba23e8dd670d834cc0abd6aa700745bc25ab535
+EntropyPredictionResistanceA.8 = 3c5eb70ef783251db8e165f278e3776541c48c248fa1f5790124c0a4675659e7
+EntropyPredictionResistanceB.8 = 820aeb6b9c959bd0f9a6cbe0be5d01e4b36d00fe561508ef4dc45bd503e8b99f
+Output.8 = 83ba42f851c837cc9b455414f076504f17b76f417f6283af33f639892fc8571acb525346e2ff79ab12d8913e696a1859a17efca88db7273a99417c5ef1d88715
+Entropy.9 = a71c2f0170e7998804e6961d7918ee6387cc08ba7fb7e56e7b26a41597c5c098
+PersonalisationString.9 = 936377c9b6fdf5e3e8b7b288f470c13b1d2c43426b9695c325c3edf200bfac5f
+EntropyPredictionResistanceA.9 = 083ec9fa974b46b111b341b27c26640498722af654cb878a6d266a86bf63fb7c
+EntropyPredictionResistanceB.9 = 6e9ca0ee1f9611619d3f7c84de39b3dec1a101329ef25186ea379f0001a672eb
+Output.9 = fa52a38faadd5bcf8007825d66974594e8d88bec835a426866e10f30ef2453db2ba6457beadc64df2db416aed07c2ed6b0acf77ab5325366aecf7ef980530421
+Entropy.10 = e67e46f3f0f9468359c9dcf9fe0d895e67929c1ba4e1e77ad2bc7ac68978f778
+PersonalisationString.10 = 70b3074de021cec7bce1af85d86535ca96e3c198f1b1bcb64dcec28b6268f02c
+EntropyPredictionResistanceA.10 = 4bf68c601a8557bef0155e3da0b7a07b9f5aefe2b66575bd929fcf4d5ccfce6c
+EntropyPredictionResistanceB.10 = 270f83a0a7c4678cad792d9d35b63c8f32e5f04c7c2e365272e74f4a680a13e2
+Output.10 = fef33ed598d9c92b1159ea274b17d0d2e7574767b22faefe492f763f875ba825dd1d2b8008a4648e8d63b757a629d2dc3bcbf1c2ff989991c69fca17d3f98c1a
+Entropy.11 = 6a0f20fb2e7980588a87ddfbc6cb6a919195deca2b3aac7a8ed0273f95df6fd3
+PersonalisationString.11 = 1883204362398a02f0d6d32222326558dc7bc94bd9482ad0ac611699951df106
+EntropyPredictionResistanceA.11 = adc66496b8d7738dfeb973294a6d7945e4a1b0bd5400062a56cfeb04bfde9857
+EntropyPredictionResistanceB.11 = b820c3f10c8dd7205fda78a4292314d45797dfecd71fed23ff0a856eec450179
+Output.11 = 010e13dcea57c0debd88713c3b7e433c97ddadd84e49396af4a7ee7f580285d80288087ff72a3742870c38642f456f676bf01952cc2edfc82aea7537d753dfef
+Entropy.12 = 555666bc1fb09884c0f83a0b2b05b6993506cd9cfa994703942111630b51b259
+PersonalisationString.12 = 6483a0af797cb6c9d68be130e793c986a92187f51c0ff947c7345aaa6127fbcd
+EntropyPredictionResistanceA.12 = 8e5a9f4a73a8db1ed8db889e80c787e20d25d22206e95eec61d57cd1cd9176af
+EntropyPredictionResistanceB.12 = b59904ddfd61c3f26b7d33d23c18c7f9d716153b488773678241b81b406666da
+Output.12 = 19c8e29e51f8986a635ed53d4a9847a602168e5ca2fbba0799f0bc85f4e9a982a646a7c23642e4a45c71d92490f47a24dd82bfe073a29f5cc8873ee23823fe89
+Entropy.13 = fc85155efd4e7678315146a38b5299aa418fbda18e1f6d593c7ef3af54629ee4
+PersonalisationString.13 = de30ff5dd4aa92efd8aa199839d183efcdc3c5bceb4e240606061ad0c3ab1d6a
+EntropyPredictionResistanceA.13 = c2ec1d42b8add6494402495b7acf6bf6ff43e9f909eb890ebb58bc3e2f574d99
+EntropyPredictionResistanceB.13 = 3b8ab0e369816beaf5b46ba2c651d1043244a8910fce1e99873e487a60c32a54
+Output.13 = 331931dea8d6a289029c14e083b75b636c928c89582102ce2ea8a9a1a24bf22693b0a2cd3f562f17c10fd83d8175573a805ed3dc6a3b28598e33ecc2c593b6e1
+Entropy.14 = 8b1a740ba70ec215a69c4c3d92a0fa1b3a8a2b8cdb4358f77f02cca4ed503fd7
+PersonalisationString.14 = bfe8592a4093bd464ff3c836885f419274e74d71ca62ea83cdef07cdf527879a
+EntropyPredictionResistanceA.14 = d0caa71a0c2e2f218bdded7a08864addea822aaab598b567927042dd3db29313
+EntropyPredictionResistanceB.14 = 31fcf2f4f7580ea3b79e738830d42a218935ac5c6583febabc14bb5463fe4609
+Output.14 = ae6cbc3e108ba64b18244ac14eefb670caa16784e175ffc1f41126cdbe791e0e3de26d58123aae6843613b478b9ed94173fa27c7400bb071e0a9829b9a8fca19
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 0b9b6b067668bcdd7fe3c997341199a0921244a4c59609fe002aa40a83d79b9b
+PersonalisationString.0 = 1df9c023cc60335d65ffa710f62647f9fbae539ff1fdf435d4fb79dc222c5b5d
+AdditionalInputA.0 = bf8d3917674617d0ab65564765463f9e5d795760237e6e999f3fb422b7d4a114
+EntropyPredictionResistanceA.0 = 4808a7a673cb94f0cfe5b7e8021cc894aaa2a6d3952a80fa7521a85ede78c92f
+AdditionalInputB.0 = 9e7ea0a96835a02706eb28bcb0e5a3b0aa04d17ba6f41f1e6e034d973ccc2442
+EntropyPredictionResistanceB.0 = aa83659bbb6c6ddd97233af18847952a37498b1fa50a59e25a9027311336f7e9
+Output.0 = 2db10fe1d5fe7c3cf27f221d972147e5553bb4585afc0c71f489b0f7d23da83e275c124f42b6b1df7d24987acb5129409edb3403f15a01508dd13bd659f730f2
+Entropy.1 = 265d9b95f4761b9e1d762066d00d60740ae989c78ad194be2da4e89aacf4be8c
+PersonalisationString.1 = 5c14531017335f135ff8d65d21d743ed75e9602eecab5c9c88313194d0a175e8
+AdditionalInputA.1 = 81374fd08c93be2ecd4cb05040d303c200377b7d5b73661e07127b7e4d4ecee4
+EntropyPredictionResistanceA.1 = 63b84e4751aec69f06c79978c731f425d675fb7f44e77f53fc5bc3032b22a32e
+AdditionalInputB.1 = d1d9b761cf1a63ec9f5c8eca0b781d433000812bcdc052598a39e24c9c581937
+EntropyPredictionResistanceB.1 = deb7c99bb0b143b4a48fe24179bf8f2552a148a1041f54bf763d3ac535bf8c5a
+Output.1 = db2e08592108afdab5cf8d602970962b3c64241c55f7dc3897d99750e76aa40fada03623f1f294ced67d4a31a6ba37181dacd1817f8f822a5fab6a96a016dae7
+Entropy.2 = 35d6b0c8cfcf5414159ec098beaa0f0dad4bb0deadc1d1e63a6046e22ab2d82f
+PersonalisationString.2 = 4e46ee7b13ac4b557c6535fe910c3bb88691302f81c4a07ed0da1a1ab0f6e6eb
+AdditionalInputA.2 = 8a91281a93cb729fe2dc22bd5196b612266db037425273834ac100399e28a329
+EntropyPredictionResistanceA.2 = 30ce14b0fd211115d25b685c7014c90ddcce98dd24a5d1695698ea95bb43548b
+AdditionalInputB.2 = d0a4fa40353a05a3f8b566507e63674468b27315c07beae11969d19961767b6f
+EntropyPredictionResistanceB.2 = 4e94259266506470329f057c3c40bbc0eb6e6ccb8032712ab6d5b93100867010
+Output.2 = 64875bc80b7c1159344fff0912bda8f2b95d81b606c8a6ef753c13ceffbf3457484b6bb4d86aec50f420f254491dd1bea1e0c474d0abd81729454aa9dfb05df6
+Entropy.3 = 20747b09746e37afdb1c67b693a058700b9d963213544f2215b0310a1e01c3d7
+PersonalisationString.3 = b6ac79ada8a502240df08e6e01c869b3a4cb61c9fa90ac5024340b582aacdef2
+AdditionalInputA.3 = 63cc67abf562a76f56caf09606bc280531220145d049e684b9c3955da9fe8363
+EntropyPredictionResistanceA.3 = 913554794c149c503e7ad540c2a0dd0b6c043ee067e210fae43fcd141283def0
+AdditionalInputB.3 = bebf247fb514f5ef65ab6ade98b8e8696600441bd30b04c7422573b24a329cbe
+EntropyPredictionResistanceB.3 = 3027c537358beca2c6eaafe30fccd05658c5a0fdd93f689f701deddd23e8593f
+Output.3 = 62a1ec0e4fe170df112b93d531b2b2bd5c232c2cfbb2fd280902a1936b9e1de24c02671418e2a446198c367ab21aa721582dc6f3978ea87358a176fc0c7e305a
+Entropy.4 = 23a6a71e3c87057dd2087c230245ba86e38b8b72627b977bb60bedf2d1e79b22
+PersonalisationString.4 = d23aff93d225741cf526167dce96910d0de39eff8fa1a28709637116e875544e
+AdditionalInputA.4 = 9cd3832036d4f980b7bca101277129e2f97ee69d74fc09475b4f2c3fb812e51c
+EntropyPredictionResistanceA.4 = 96053770c1cfe2d46ef13b1a7bbe77d6ccad8fb770d5048f80225e276f4c5baf
+AdditionalInputB.4 = 910f546ac72df3d51a80c072d5d7106ee2168022060fd19eb452c34f621cf4df
+EntropyPredictionResistanceB.4 = db48007e0ab26802cf549a228834b90b1c993d252cd049fa3ed1bd74a6071b9d
+Output.4 = 99ae2fb002511c055f053d7071dc7296e10fd0691358a625017dd70d7268bd4cde9126775d593a89e6e53cc0c6f58a0857e5b0ae0646ee494a243becb2e60ece
+Entropy.5 = 51f3ad444eda63ddec446fa7b65ce232f0db1c19f9e1427f1f75f746c20d6f72
+PersonalisationString.5 = 8a75b8cb697f9a9c526d4fcbc01d22f2cea39395d7970ac47ae9601558124c72
+AdditionalInputA.5 = 71cb3d4d252edb9c39d09065f6bbcf2390aa25a3949183107d885cb71c982bc1
+EntropyPredictionResistanceA.5 = c0fe280e312eb747160eaadf08e17f84dd821eee5be1d01d1f35b8e9c90d89e9
+AdditionalInputB.5 = ece2d35db402a12d087cf63450b7c5f8077d9faf4d8216ad396f74fbfa325f70
+EntropyPredictionResistanceB.5 = b8e03ecebfa5664a2ae05abddb2f58e085425edad5bc5b4a9d5a87a105db87a9
+Output.5 = e99f579c67efc41c379921750d5ea22d4f2356fa676be4ad384f306b1e617e804a3cd0a8e254ec6ab4210e147d0972ddfe1d4503fdf5945535a842346330bebf
+Entropy.6 = 84e7755e66d6cde33db0d7d117af4076c6536a5bf1d1f5c7e903482a02028b8e
+PersonalisationString.6 = e4c8575934c02514c2808cd3a530e96b0c0a4edd26178ef055061180b32ad67f
+AdditionalInputA.6 = a239eb3d1f21cafaa23e049f51944367e683ccf9d623162405ca375de54917fa
+EntropyPredictionResistanceA.6 = 0fd2c752056569715191e479e51658c9a4a4422071949c5e9aca749418836ab5
+AdditionalInputB.6 = e39161cb972285687d65d4dfd74e08e3fe1e2518e815e3266e47fc1f5dbc5e4d
+EntropyPredictionResistanceB.6 = 840fdfe2fd2e90754bd52db16aab32a0a75f62ca8757c7655a7bdfe224fb546b
+Output.6 = 362d01aef0e74ed774b679c15c719c2f6d0ecb6c720a28d65acf2829e986984387a2e3d405caa32494cf383e8779cb78dbc4fcf0e5ffa1b2ed785c69dde20c46
+Entropy.7 = f51d83d34f19bb783cbab59948abd96087b1693585f3bcfece8c515a761fa87e
+PersonalisationString.7 = a5222642e0a0d2ef5a37c9329ef4b747ac4f01a149ae39c4ef0032a36df166fe
+AdditionalInputA.7 = f75f0ef629196c5d00ba6cbe65a24923f06231b56cedeb07788c5774d2edfc1b
+EntropyPredictionResistanceA.7 = fc3fe5b97a2a2c9d8861e73d73cb8c85419228222c41c27e01e2cfcd29d86e30
+AdditionalInputB.7 = 9414219c870b38a06808993dfde0a5ccec228605a72959c83f2974e42cc943af
+EntropyPredictionResistanceB.7 = 6f98ff766f4197d4a009cfc18315470fa0f4f15c0c71df371037e4acf520c047
+Output.7 = 6544a844d1b5fae15e86034e8211ef8578402b70bfc674a266b114e6db965858324c766015eee1eb4d24d649e76bd3889fc809603bf6c9e4bb3f8e947f6f7a80
+Entropy.8 = b0132ad238a08c279a7d7a6cc5794c94b9ca268b9d3bf18a3c8b588ea22c9c25
+PersonalisationString.8 = e302ece767c60d01c64700843b1a8808f87e09e33af4619b09892fbe5f0f6687
+AdditionalInputA.8 = 7cfccace013c1d208d1778fbb23c0b884ded215e93eb9c448043c86ff81117eb
+EntropyPredictionResistanceA.8 = 494b9da084943ebd9ecd901a9bdc0c38eab6fd04b42bc0190304b4af5d4279e1
+AdditionalInputB.8 = 6d8d037f12f4a1bf6bdced6b5cd8c881b1d4f2bd1ca92e5ed71a32a5c6e5d7c1
+EntropyPredictionResistanceB.8 = c8df5c4045aa6f66254921f16566e314f245a3e33bfa96c9da84d9e1697adaf3
+Output.8 = 81a75b7430c91ad3cad4e5443ceb2b22b631a3aee471122dd8214ab05cdd5cd96811de3bcde3fc4ac1595c76c66d18e91bc1bbf4a58ea7c1d2308fa5fd8ca361
+Entropy.9 = 76f735bec2479c15121f0bc6f16a9e28fd1da58edc158603b270d6e097d48b89
+PersonalisationString.9 = 25276bebf44b8d730839e83d82ff3ab007764283a22220bba68dab0bbcea726e
+AdditionalInputA.9 = 94d2184e691eac3a2bdf4d6e11adfdeb4d5beff80748b997731db001b42d3fff
+EntropyPredictionResistanceA.9 = b111b99d1199d91bb91c44ee4e6c4bbb41a4535107bf68cf442aeaf0f68fc9f1
+AdditionalInputB.9 = cb1ba3f32870e3d5e67db5c4a2dbcab8c5dc09f85a40c46cd20a130c0f1d3eb7
+EntropyPredictionResistanceB.9 = 66b290ed3f40a75c0c1eff42d657b5539ce8cdaa116b91f39ef3146797f815ce
+Output.9 = 80dfacaae8e35584f9d47eed8bed62a8cf92b440406d5b9550d59c283ee973c8aa416f7f4ab473025794664d2d2cf9386015404c091e4225c61b73f0071580f2
+Entropy.10 = 538065f63bc4657418671577a87c537f72e8890c4da83054446c4d0490cefdc6
+PersonalisationString.10 = 7aa2a05b76adeb23819721f2ce5871e307246c3497b065dacdd8e08abb55e01c
+AdditionalInputA.10 = 76d1d2a2cfa58aceef40ff2167e6fd774f785815f23cd057f4a8acf02b9b5f8f
+EntropyPredictionResistanceA.10 = 74efc730d85456f1e759540d2a7218a597086667356559ab3f7815fed926c5fb
+AdditionalInputB.10 = e0a7ed10839b787e3104a42ad139957edafae480f0b43d7c474267e65260bac4
+EntropyPredictionResistanceB.10 = 4976df61eb5d1591bcafaeaf49cb49a7b66e4f4c39e1aeab46f7e1aeaa5052a2
+Output.10 = 24e734b1b040585dfaea5d0956e70cf10926dfb8efa298afd3c03f33e33cb6c1e37ea4fa547c5cea745e057bfe66be7b7c8f227e15697fac04b8460fc9999ceb
+Entropy.11 = cce08c5cd8c5795d98f263c966fe4e15fae550f5192015f1033752c98c8e81ea
+PersonalisationString.11 = 0ced7ec5c33a92ddc34f06a3a2be06ccf4b3a86b61f15ca9c5939c2ee7286915
+AdditionalInputA.11 = 0c67a057199b04a54d294a4bf22cdcfa4898b788e428b9c74fe3a7f54bb5a55c
+EntropyPredictionResistanceA.11 = ccc1b4f4df36783b9d816782a65a9c81feee648c2d97850872b91727a2c6cd51
+AdditionalInputB.11 = be44aa50206a12b5f44628426a2410503365061a19f23c6c3e0256ff5754cd68
+EntropyPredictionResistanceB.11 = 35c2a5946d20636be7766a4bd92da849154c46a14a5899b8e5280bac97243caa
+Output.11 = 405f5255cffeb1e8542278b54166c56a9e423ba6ff3372497c640540ba6f31271874380543e42f24d1b38bedeb13c9ccb1e7f43e3a482002498b6448048810a9
+Entropy.12 = fcd40efdc347ad7f41653dbbc89e3b1810afbd6161c83897ace9d21c0b2b1039
+PersonalisationString.12 = 7f9ebff024c3b5300fce4ac88213b39af08b048eed781b334898c0e7e5630cb8
+AdditionalInputA.12 = 53abdbcc9f94229bbf77bfc003920ccad057f6bacefffd23a54f2b3c532a7033
+EntropyPredictionResistanceA.12 = ddde540bdf233d546e1669722d21a97f5df78700a956aed88f34c4295321554f
+AdditionalInputB.12 = 05a013e9ac5e3e98d6039e78871017f4c57a5385034f1d7402b2f1c9cc8bebd0
+EntropyPredictionResistanceB.12 = 274adc87986149c4ebb5c3b463862189e1497390a0384aae89fe692a246ae7bd
+Output.12 = bef9582537b520cdf956c3cb9fa45474107eb02b1ab3b1d4d953522dcef80f4a71865c0d849b9e44f64631998a48c1017872ce2e6ebbd2bd7f981cc5cd5be02e
+Entropy.13 = d0f5e6432e5759f26026236ce9fecdb4e8ded52c98489311e8ff9298e6d7816b
+PersonalisationString.13 = 1b746f2b1fb54c4a0bac0c9480bb6d115ca0e8bc7efc74c257966a0a9f3fa388
+AdditionalInputA.13 = 99dfdfa5ea3e54edc3abdd3cc0fd85843e404fe123f8a01f4295095d8795cab4
+EntropyPredictionResistanceA.13 = 409a024e1c94c592d436e603c8ea25e1d48d55fe2b089465dc3cf34bb2e114c4
+AdditionalInputB.13 = 4941903f8675c01a4eb6464ecaa1fb17759f8b667d250d8d1ecd8eedb4e7318c
+EntropyPredictionResistanceB.13 = ce181cdca564ccba8f3baea1827972b4d155cf512e0f4cee2f47b7fd49462994
+Output.13 = 2d16dce6a844206f6bd6d5715cda01447d795cd64b60b458fa7f21d10ec6565bbf3144e0920527ed4e9ca9c759fc3cd8ac0548f7a039c155e62a2beb7885632c
+Entropy.14 = 86f4f7ec3cb2d37cea6647e383cd0f35719989cb1323710784cb27a64fc3ee9b
+PersonalisationString.14 = cce128aaa85cb52dcf2ebfd837bb137e53a91dd29b7d65e890e66d54fa096fc6
+AdditionalInputA.14 = 406082c9dec416917d56aeffacbacdc4e2ad240b08042d33824718111342db5f
+EntropyPredictionResistanceA.14 = a8afcb36c51b7cba564ec8ebe258c936cda3613b223a70ab9f65f001c22cc5a4
+AdditionalInputB.14 = 55156a604966212f7cf20379b79cdfee41a9fe462c9f7e17e5a082c5dca8b660
+EntropyPredictionResistanceB.14 = c64dc7f4e7fc14ada0905e271e0de491a7b8e4931d26823e572132329e00652a
+Output.14 = 7d96dfe0f6fe3eac2de3a3a8729d36afb1767aeae2ac3c79db0c523226cacac3cac6d5a87d4f152e8e7274069cc9f12bb7edb293f04e9bbd5a8f0ab142fc373b
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 1f44a99bdc8e23a27367719aa61870a0d1fe73d57343413492fc8b15ef917cc7
+EntropyPredictionResistanceA.0 = 22c72ec127c3059f6e9ab09a7b21a72ec11f71609870fa764a0bb9b18b4ee0bf
+EntropyPredictionResistanceB.0 = bb505926d582f698430ebf1b22206cb77ba0ffc96a77129709ff99e7f731a20a
+Output.0 = 7b5a201aa4b7950bc2081f277e7aece3b19c74aee34f192feb0b057770e12e9f551e3e310a6c7392e98ee5d4d24e1da96de2b2c640c863da9e971cd31561b0a8
+Entropy.1 = b04d2cb899ec915d83b528566b49a09a00e75802d39783ae2afa8db58c7b8f81
+EntropyPredictionResistanceA.1 = bfd58c5e21bd56da4d6552960b76b4aa7c9c66c9a2382dab799ae5569e01ffd3
+EntropyPredictionResistanceB.1 = 0c705b94f2065e4b2f637a2dc9b7ed0157f9e0722aa9e83e8aa13bb6510b8e58
+Output.1 = ddd09f4c9e93ca2d2bb7d4366b0a6fbf722dacdf5d59152ad1d55f33911c52134eab81f64e5bf4a0861cfebccdee0a7404b32799f86aef63b295d0e6d9ef4adc
+Entropy.2 = 056df18d2e8bf17aef52f60824d53be5493a0ebfb3143636b0b3f066c7811f0a
+EntropyPredictionResistanceA.2 = b63e45148c2859de119fc831fd265164302e8c5e230f26a71e0210ae5796f79d
+EntropyPredictionResistanceB.2 = ba82ed1e9590cc5309328fc51f92f2dcaae2e320227265e63be81903b1766b53
+Output.2 = a381d06d00c9da58f484c9cff8dfad4cd8512394dd6e9604bb763bda8960594f344c55732fbc376e6e34f649abcdaf821e76d1de9ffcd60b6a1917be5add1c07
+Entropy.3 = 51989756b7d9bc1d18274ce4ff8022f0221bc6f696fb6c2e3676eb7e0b28048b
+EntropyPredictionResistanceA.3 = 50025b1abac58e6366e3c5f5c4f3e06d31c685d7e4e031b9736a272c085f98e4
+EntropyPredictionResistanceB.3 = f757badd454253dc84074ff9c5b345365a24e5f8370e3dee1c4c696c71982d74
+Output.3 = d60acbe57e4a44dc5d8dc31ec282150137ca3dd5a9de0f39798972262a6b691f485b44d553a795593eb1786ea101eb0d716e955a2de26f148b640def80ba38c5
+Entropy.4 = 7cfc70a8916df2ea285bf1082b371299d012f299036825401b69288769189824
+EntropyPredictionResistanceA.4 = 959275a7199eb21b6e31df7638002b2d9a8bf590fd8175f35318594316b4a3ff
+EntropyPredictionResistanceB.4 = d9000f75bab891fa4aa6647f93f66251fb98231649e234de32e7575aed008b47
+Output.4 = 06d91aedd28fc5de08c727decf85a08ef56f02c76b376e27bc47735b58819d90a7957f754c295cfd9ee617da447bc353e42a9246da3ff3a8b08ca338bc409fae
+Entropy.5 = 366a1d80e7e54e8491599035e8543e048f9826d8b541a06776f926379b0e137b
+EntropyPredictionResistanceA.5 = 447526694c6e18afdfa63bf22474f4c3433d00488f8c0c83e4bf3a0aedd20a56
+EntropyPredictionResistanceB.5 = c32b6ccbeec2b1f84d52e8b9186c6b25ceac8b240a355eb2bcd0076299523d0f
+Output.5 = d516900e90f7bf7f07c7c9c533f350672d8a8fdf150b3700e64087339829b2cc764de79165c8ce3cf782dc72ce5adbb716f69d3947e47d0b0f473d34506062de
+Entropy.6 = 26f19a88239e0ae8b2fda7465b7210ddf2c63346ff4c00cf5fdfc56d99acd3dd
+EntropyPredictionResistanceA.6 = 448b9341b19d26ab466f905b589df1947f9cd3e397998f5bd036a3ae395bbaaa
+EntropyPredictionResistanceB.6 = 532f6b54911c102dedf47655b1734e52d4ae18062c5b80c24230d9755e1ab396
+Output.6 = 4847fc508e66ba3f68ecaa3fc4b87cb8bfc2d930a0e56f63767ccb4ef89b80b317f33e465b2f393caa75853274e0377e802e1f8b55b31e51d2238193542f5788
+Entropy.7 = 7bc857c75c47755c471f7095a2b21575ae219a9daea42b9c93ea83554c92b7d0
+EntropyPredictionResistanceA.7 = af7ee826f89ddcb7c6abf63b50e7ac3de064a4ab65583c47060e3eabb70c2cf1
+EntropyPredictionResistanceB.7 = 645768bc9361908b161617f0430917bd5c2657f2968b9a49e17669538e3725a4
+Output.7 = 57b6144f773fedc68f2c91d74a6663384b64ba9d87e49acaa928cb571656fbdeb1fdddf600d5abcb5c0580ff8b84a7992bf918b901daa2148ce991d4dbadf009
+Entropy.8 = 8edb1b84735c840f961555a71b2a0c4da7d4db9906dbbba2082454bd6be0c534
+EntropyPredictionResistanceA.8 = 506af242e68c489272f567b249a47dcf73f2f647943cd3b47e5aade341e41eee
+EntropyPredictionResistanceB.8 = 09a221e9ee139b0cee124645879285dc2986254093820cb22f771de2598f65c1
+Output.8 = 7966259255c3c6cfb70848c906f4446d6d0de857d7c06b81df6cbbcc45fc9ecec58e689c7a8830e3d45620bfb84f1e76be292a26b909e5dfc380c1b8d72d9a78
+Entropy.9 = a8440dc14f687f7d0afc1311526926c6707d05c3f1c69dad1999a684208874f1
+EntropyPredictionResistanceA.9 = 416582e4496b0b3c9ec44082715c3891381873dd73ff0490987de17e0ff5888a
+EntropyPredictionResistanceB.9 = 3fa9fe9af56abb6519b6e22e763746f63daaf22133f734c7c45dfc4640f10c86
+Output.9 = cb61faa49f18220aedbb5e1cc469c5e1d38fdc4ae6dc73330dde98a27c32d108039692e5910b420a8f4a4670398566208873d35011854f29243393b048c7022f
+Entropy.10 = bff9911a1bf3da59dc9280f63b349ed08bc4574967ff2efb50e884b7135ffbdd
+EntropyPredictionResistanceA.10 = 01668f77d0ce9354eb59804d84eec2dd2cb6c317e88ee831931724ac15cfb2d0
+EntropyPredictionResistanceB.10 = 3c31005548894b408595cdc43a2c7e977b01b224746b29d6a4abf6d3359c589e
+Output.10 = c616f484c234d91ae905a1fac363a23097bd702c39ee0269eff45c068653e3f0e722e68f2d2a98e73843ce6bcfcbc987b9fd3bd6d194ebc497a095c9b8bc751b
+Entropy.11 = 03ad0c927e08076b749f3aab7c1d3f32a73e8001fdd4919af3b71daf327d36b4
+EntropyPredictionResistanceA.11 = 66dfb79e77b17ec900fa00c34955e24cff4039b3f5662b3b5caec54b40567e30
+EntropyPredictionResistanceB.11 = e299adc48af28a4618167c56b6a7e938e055b8d727d1375df825ecaca0fd37ea
+Output.11 = e552f5fb40946c00a2764a3ff39f580cf96459cbd1ee39980bbd6a14d8c52add51f8a659c0d039fd44a6a0e1ed1c896b65cfacdb874c44288abb1a0b0ee690a9
+Entropy.12 = e60e54b00950eab41be8418abd2c1c0a9eb6e537f43acbb1230cc5186c8a010f
+EntropyPredictionResistanceA.12 = a41a04e6da54f7709179ab4d27be5989b0e4d5eeab654f2af3db310c50134d66
+EntropyPredictionResistanceB.12 = a1debc18d13f186f93fd831c2d0bc0e6776c17e60381d6bfbc6c2104b630c1e2
+Output.12 = f43ef261dac7c6a56a4f9fbaad1b90cbbd0e7f260d34c1b07b901e1797141424c537a46fc4114f9e194d5bbd707d54fdacdcb003c854da17db5e1e083e2606cb
+Entropy.13 = a842705921d744bbe5e400ad5f32cbe688d0a17421ab4f39e95c7d3ec59db779
+EntropyPredictionResistanceA.13 = edbd733027a5532fb73ad1694cd23a5b6c66d4434e3d42b77a7012e35e8ab6c8
+EntropyPredictionResistanceB.13 = d648cf8fd4dee8e535341eaf28002a900c174ce75f185fb7b8234a23e9d8b6ab
+Output.13 = 27aaaf1f30098ba03b49e1e05cdf888d2fa53d1a99ddb6eb67f29850ae7cd98b8f0ec2ef55c65366bb58abc1cbd45c0de4069be08ee7eab09f9ba667202664cd
+Entropy.14 = fc2312b8c86993c059eae3e1173c47f965bcefce438f95be59e66ba8da67a580
+EntropyPredictionResistanceA.14 = 25aeb73bc04139a647b60a0e506db2109581f58b704f008897ccb2ba12e07ab7
+EntropyPredictionResistanceB.14 = a2e5839c59fc255576a2fd462c719895314a033823f11f419446d02702bf004f
+Output.14 = fb833a40a658217ad75391aa8311b3e872bbc2e1cb150da87cc6e3494423c5a992593b68f609d30387a0384f64079236a1038969d011bea6f8adb052c5b57eec
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 09b6204361918e4cd1b6f27b40f9357c36b0758b27767ef09175c27160109165
+AdditionalInputA.0 = 0832b536ba54f1cee9b99c97011ef4f71cc08ee1636c5b78154b0e7f45dfd524
+EntropyPredictionResistanceA.0 = f4adb0db65fdc5c6f76f74a69e515a5987fe38e47eb66fc4584e00f1f9f0fad5
+AdditionalInputB.0 = 46f8222026c459e2502d547f776543b37fabb275040f9eee16cedf27a6ba95a4
+EntropyPredictionResistanceB.0 = d0b4674f633624a95e3f1720c123d4f644b90c5a18c970a02b7c4e5cb096db56
+Output.0 = 8b5bbb027d26d0a2e5c979045e7b3827dbae3a36ce158443e7432837187fe2b14fdeab2471f1037072dd5278d7646681225adc188d3cc9bc22e8c3d2733cd07f
+Entropy.1 = 1816687a8f0e84d7cdd5b31a8464002d307cffaadd3aab079492d05af3312565
+AdditionalInputA.1 = e46b69b499bef051724da08e942ddcf7eb42d2e66d12d954da65629f78381813
+EntropyPredictionResistanceA.1 = c5848993e395104768f9a5ac90bc3f3dfa04925ff4dc86fb0fc46256912d294d
+AdditionalInputB.1 = ea77651018fc08aec20e36777ef0282a713bc56e084ecf45d92edb635ab9ced0
+EntropyPredictionResistanceB.1 = ca165d20a68e361be9851f619dfcde9f7b38a3e980afa5b2b7c3e2d1eca8169a
+Output.1 = 9a2e7f4e320adc0487aa6d57230ffedf742be5ccdde6bceae6d56b62db3415619f624d08791693970d08788f3c6e7e33efc46280ce4028e4e45dc0690ce99f00
+Entropy.2 = 00d779e74b81fc7ad28467dc5ff052042693090179275dbf46c0e0962e081394
+AdditionalInputA.2 = 8fd1f40002ecf2b6deeeebcc9d6f12019186f9bf1a3ec3b8043a6092fcedd4d9
+EntropyPredictionResistanceA.2 = 31911238cfc7728155b2cb7dc8c935ff86a63861f334e70533d88344c34fe4b0
+AdditionalInputB.2 = 885601480f2b50a9cbc7c93841925579d0e5a40b81c1a4f1efd040e21e6596b2
+EntropyPredictionResistanceB.2 = f60920f2922e33ba8a6acd4f964349c055bdf262dd8cf4b308f9a0042f300ba4
+Output.2 = fff49a0458f064161e37c563861a91d0a401c68fd03388301c225f3c478138dda21d5d7e3485f52ab2fe216cebe3081f6579e2ef00b747bce34667a67d47fc56
+Entropy.3 = 87e59273b6ccc70f7ca4a951a00f4e0718fcc3fce59e11328f9e18afb9048404
+AdditionalInputA.3 = 877045d9fcbe3da5ec18a7cf360537d4d15ad115b2fd9561b7c5e002f0a45a87
+EntropyPredictionResistanceA.3 = 35253905f45e678431ee2bc512dbe09b5530f203a6cbe953a8ad22f4d5bb1e27
+AdditionalInputB.3 = 8d2ced1cfe173e7c99f12649a756ac7107eec60261dc61c7b1c2438a22957fa3
+EntropyPredictionResistanceB.3 = 75b54736432157124065eb26d58a54b5821f2c7ee569ba29a1d1ff893512646c
+Output.3 = 1924e2a51b72953bd2cf81bce2334662f3fe3f3a1b0b24e072d0f40fec4236d08c8ab1afc0b2df58177af249e45a196ee81e71829c97ec1b5fe8564e2522b141
+Entropy.4 = fb801e2e3d7a5942f88a1aea72686088704b2815f865f9e1b0cb41a3826a5953
+AdditionalInputA.4 = 49dfacc75011aced1c8b448ab9839de3ba63b8c1bc63c76550f53f5eec020cfb
+EntropyPredictionResistanceA.4 = a7c4411207de8cf4a88f5625551345ae3efa577553e0bd2bacd02238395f1cec
+AdditionalInputB.4 = a161649cf8cc5eef8937700bcc54e15de4f56c154c74ea0c1aee380b6f75678a
+EntropyPredictionResistanceB.4 = fa2b7a7e68fba30489341c237f710169dfd4a417e474fc56df4ea2bb85ca82ee
+Output.4 = ec597da790f0b80dafb7c769e566c3a6d38b96bd2c72559c091ae23a472967c68512d4787bd8812cdf82a763b49dc47d562df63d8def5bdcef9256c62273f0c6
+Entropy.5 = b90db340ae9bf12ad026847d0e1f399d111ea183eba70827cb7493c5160bdc7e
+AdditionalInputA.5 = 30e9bc3c7125d8a7055d4ffc0966043fa898dcef35b16a33bc68a229b29c943a
+EntropyPredictionResistanceA.5 = c97348ff9d0b8e75bceaf608aa9a0dd710a8183e6f64170dc0f3222a384917b3
+AdditionalInputB.5 = 1f4e5114a1a79bb51cc1d58a714c2ba80b59adcc1500f78c0627942bfd7063dd
+EntropyPredictionResistanceB.5 = 2227b6574c9b8a061d7306cce1f6ac26376c9a6e20c88d33387c6e692071ade3
+Output.5 = 02dc40c539228fcda7b056d65a4e9184ac2c582b0832199aaa34600b3cffc87595ca77339c5b54f86412981374cf4468318b081a873bdb3167ad7214bf09a8ab
+Entropy.6 = ac804a99b71d9b510c21db7a381c1deebe8b80b03ed810ac055006558e0057bc
+AdditionalInputA.6 = df9fcfe9bafee5595a4b6d449c2a042b2e7371465a74997c3c6306dbf2f5908a
+EntropyPredictionResistanceA.6 = ac31c0f2f0bfbda0cde02b0d6cd4d3aff5325d3930ce0725032f1db336db8da4
+AdditionalInputB.6 = 618f5b1add2e19f0e784e7de1a591a64a890f7937fbcb709862d28dcec467c13
+EntropyPredictionResistanceB.6 = 73ce5f31b02f843f19353dcccf4850d9c91064310af9d98b74456515d95114c6
+Output.6 = 4d9199b09edefdccdd5b4941ad519fb00e902da8758ba224a222f9c8b299e8d5392ca96b70c6b0473b7c93d734fd5d2c5d4b1aa366f8984a01706a8b78eb2958
+Entropy.7 = 935bc8d237a449fb530795953b60b73e15fecaee85bda053ce23a23b46dd01a2
+AdditionalInputA.7 = bac7db39cf773eda0bd9c9978908a15d090cacc2dd85c13576e179a799c838a0
+EntropyPredictionResistanceA.7 = 971c099e6b8ad95447a03ab3f04db8932c58cabbf38f5d2557db7a7b6a8264f4
+AdditionalInputB.7 = 58e3505b2e619395e0b706225ead4ee3b02f92fa48c6ec3e7de38550573c0a6a
+EntropyPredictionResistanceB.7 = 8dd9974786b29204cf08c0726c6608b22eabffa692b8762e4c67c283f5620adf
+Output.7 = 76c7f8e121bcf7a3117059aa917f31c6eaf6384844ff153fbe25d2908cbb4a26bded67b3d01ec2d99f714352b730115422dcd5135216db01ab5556092a7bb7aa
+Entropy.8 = 248dd815fea4351d9b62c71d76b29ab7abbba76fa30e7ffd7bcbdd36f7364ff2
+AdditionalInputA.8 = 916b0d6a036487044cba6c209e8bd430be0fde46242ad66981d2c83514b7b03b
+EntropyPredictionResistanceA.8 = b8d813da524e5fc5cd258e262962072c13fd2bb8d487f843f0e30e569553ae41
+AdditionalInputB.8 = b6ea4948824e7cdba9995d4229081c94debcb19b0e07cb72d83885f6ad7a1eba
+EntropyPredictionResistanceB.8 = 28cc54ba218b44d08272db5f5b2d72f8f632189aec0a0a80c792d2c1ff444155
+Output.8 = 2be358c98cdb5bd60c1729815763376fa4c6733dddf1b618bf64acf31eec8d18015536f335777e92d9200e3cb8f07c963b7688ff0f38df15c40f4ba8a28675b9
+Entropy.9 = 7152fdb8c00909d6649cb43afb2b51bed35c9ac65f0dbae0ca5a97ed3d2f5ba6
+AdditionalInputA.9 = 58abb09df55eb073489440111dbe3dd3628bac4abe379c4e20bf6ee712b3e4b4
+EntropyPredictionResistanceA.9 = 9edd0d56fbd0fab45cbf4c5ab1b2db3093ff904841218cf7480d7cc73d59d3ce
+AdditionalInputB.9 = edd5d44613d636d177e57903bbf8dc95a528ed2b01dcb4e7d7b3f257e3cb259f
+EntropyPredictionResistanceB.9 = c4af363b911ccec1d3bb27e24d836ee5fc9bc9eb4362fe0b7382352324b3ff3b
+Output.9 = e6f8287a4d871c8a6e11fb33a23d838fe37f42d2cbb467d42a459ff72fdb59d1b7d7a5f90794ac2a5e056a20143903c0f27901df2de838e342fdb4376a2cac92
+Entropy.10 = 6763fc2f3207ef594bbefe03973fe1211e3962970abbcfc11e6db346529302de
+AdditionalInputA.10 = 709924f6233303b821b725c73e78a16102e01bcccdb4b1fa4d18908ec765a319
+EntropyPredictionResistanceA.10 = 4dff736995f8614cd19f456d842e78483565aa78e7c6547d9260eac29aa1b783
+AdditionalInputB.10 = 28ea79becd7aa6a08ee73943a86f0b1daf8e203f26bb312e1355c439bc4710e8
+EntropyPredictionResistanceB.10 = e980fde47c99f91bd556c148d68d87d8d6696fbf44f738bd64aabe654e39c363
+Output.10 = ad4347c475edc95b8c3acada365c0eaaabf1f634db74aac1e6df475ddf2166b5cd582e338890861243313a8ccea5a8633106380ce83581cc30f8d61fbfa78e04
+Entropy.11 = a2df34b103b954e598edf3d6543e08437c441875326222c122f5b00ccef94c67
+AdditionalInputA.11 = 8a7ad8f16d7e75a285c039857dcc1dd59bb851cb1946c7e5b338d0292ba4834e
+EntropyPredictionResistanceA.11 = f9b3ba76d37a846c0f28a99a5741a66e3d0fafe071440ca5a63e9113ef4ff378
+AdditionalInputB.11 = 109d7e9a0ccce527261adbd02254424e2c245a02cfd3744136956a9099de45d4
+EntropyPredictionResistanceB.11 = a59578d42db9fe985759026bc2c28ac2b34cd5d3ffc7367f46901e3f0b30b957
+Output.11 = e5541235614931693df702778b6fb17cac1417caa312e80e52b6595d4e22df2799fa01cdb3ca33959e20bbf0ceab1f83096846db124df15a94d0e710045e63b2
+Entropy.12 = e400d7d2ae3df99e01582ae6e27fd54da4943a4421cf3c1552825e7a20ec013b
+AdditionalInputA.12 = 842ee48e18983a99926ffed226df6dd889887a9ea66e5fce1111d7dd40e056c8
+EntropyPredictionResistanceA.12 = ea18152bd323ad9cd937aee5472253991f28681145199d9162e08801accd7ae7
+AdditionalInputB.12 = 6ae9da1eea9557a28425974795f9f4da830e1956d7a14e1d1a48aa674bca5622
+EntropyPredictionResistanceB.12 = b65c20709f49db10b65638cec87422767c664a5f2799e090223f2e5951689264
+Output.12 = 38d073dc267c3f2ffae746206b392cfa4aa6fb99d3cdf510f6b34f26b192f678d8d798c843a153d36f1f85309f0bf2bc5ee66ee9c5ddc9dc3345e7240d7f8d7c
+Entropy.13 = cc6267a1565d638fa56414fca8c484cdea12aac7400dd0a15c25dd6dff2bb00d
+AdditionalInputA.13 = 0516cba581087f7f36a8b439b8c6f5f86ea2cc5348e68b2e3f13aa8c2ae8ccb0
+EntropyPredictionResistanceA.13 = dc028017567ede34c74e104ded71b45969135f48715133fa350bdd839e3f1198
+AdditionalInputB.13 = 3ce26fcf5eba70304d491030e9b5fdbcf223009e02c44603c6d322b00dc51bfe
+EntropyPredictionResistanceB.13 = 12c94753d3b5da74d0bed6e58d073bb7c2ac68be69b77d038788d11b2e23196c
+Output.13 = 28ae84300130760b863b76a67376525c4ec0f16488fcfdf6107f3c6239457cbceecf82a768ce6d14ef61dca6cd4c87555dd280c0185b2031dffee6e7431b5f7c
+Entropy.14 = 46de0348e3029839c0e49957d403b2d7969398db04ca350602f9d26f44173fdc
+AdditionalInputA.14 = a131563c96bfd8a2fe05d8377df2d3e4a789966c58189f85e0b18ec2e2bf5761
+EntropyPredictionResistanceA.14 = 3441cda0da09a72cabf7ee1adbd4bf8c37f253890b4ac59074df1d4c3e930a24
+AdditionalInputB.14 = 4e6c1d082917ac9eda7f032c61867736b5be7b3045555f6ef10c5848756e6665
+EntropyPredictionResistanceB.14 = bcad225d779bd3653a616a8d667030c556117b2adb88e4a6a4e0d0561ae94f42
+Output.14 = 14cf6fa5cfb8f9c74add5b2dca5e30395a1045ed1e1cf4e91ccbdf8ab80d1c0f1d93481651535e4089638b04fdf95f52aec1fff6565b21d8a2a32ea814952411
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 3c7178b301a208847dd7a9bf2807557fcfb93c70b993ba698e355bcbbbbce577
+PersonalisationString.0 = db8b9d57a34bd48523480b8c0bdc051572466d198e6a4c22eb2d47b036d4caaf
+EntropyPredictionResistanceA.0 = 51f49b7f2a28c2e33b954e07b23410a8d70a71b8919d13d993294700411e5113
+EntropyPredictionResistanceB.0 = acc0d4b410f4d8c108aa12e6a08085719b8e191422dd5aee95a339d1f679b11f
+Output.0 = 65fa4864fab3d883c28836e0e0a5b94b506890201b300eaf607615d6c010d1d15c050da966774bfbc88616bbf1634af06aeb63b207832d46429d7cea75e51c27
+Entropy.1 = 0f498fec87a724882c80f22f4999955ab63a9a53d90cb33ec026d7edb56240d8
+PersonalisationString.1 = 1d5c1b78cadcb22f0c9e2de0ff5937918fbacb62eec15c680805e681952779f6
+EntropyPredictionResistanceA.1 = 2e5bb44b07ad27bf169783d7bbf4fbbbbce539e2f523d5ceb1d7bf1dda0dfdb3
+EntropyPredictionResistanceB.1 = 88e2c912a0110266b9f5c3a6186c3ded6bb734c5c43d07d907dd4f833fe17292
+Output.1 = 515d13453841c0ed3b0fb0a2d76460ef888c505a72233621a713b3b20e39f65c838e9a1aded27dba97afcfb577cc2c97aa47e5f7c9323f488241178d64e86872
+Entropy.2 = 28be5bcc8eebacd653840b34bbf15ab463a797e07dada1abf34c1dd8227c555b
+PersonalisationString.2 = ba7d78bc7ab9b49c274ed33ac9cea032a7ef8e441389fea89fa74c5d6ef3669e
+EntropyPredictionResistanceA.2 = ebf658ca70dffdf7d5f232320ad1cca7cf080e5aaba52504c7d4a655e512cfb7
+EntropyPredictionResistanceB.2 = fae41b0243e938422286b1280c91ccf3b37165194b42889985a99dc457ebb449
+Output.2 = f839afce9c99af948e6ce75308393a4371c648a6c79418272ea5f275438e65cb9b6e48f8aa4460748cde380e02d6c2735a686a86ddd5b95ad7d691155a7b3c50
+Entropy.3 = 69c1875a4be92c22476b04cca24f6e885715b0e53a93fd88b8d6e7f2f15d5168
+PersonalisationString.3 = 88598f5be9b09f21d9542f9938b15891d387b32a561fbe7efc196dba2439a9bb
+EntropyPredictionResistanceA.3 = 20f5ee39af1042ab0548c519656d6b5833eddeeb79c81a64c82a2faaf7e2c3f1
+EntropyPredictionResistanceB.3 = 7b7827eabc686adcdba81cc53a27d4e57fbe6c29a288e460c57a67d2dcb66f93
+Output.3 = 9bd482e4a2b32b13389f4d38609e80f27a74ee446c08b9ea2bf435fc87ab7ca9031a5cfc924c8cf36075c5fe96ae0a45bf424234b8db2a5e9ca7d306dca8ae40
+Entropy.4 = af6de3f8455ac40894488edb8c603930537426ebe46d033b5aa4f9f2547e5e6e
+PersonalisationString.4 = 165d53a17bf8c2813da598645313dc638fb733af65190f2486d116163070ef4f
+EntropyPredictionResistanceA.4 = a5a46cb3aa60ed5cb9c82c254178c8411508016a814381d0909d216be9ad6c45
+EntropyPredictionResistanceB.4 = fcc85654cdbe07541b8af9989d887598c22ad3edcfa1c7546cc58aa610ce81ff
+Output.4 = bcbdce92493a2345cb0abe13fc4e2d9088f61c28f7256b5af650404c21a41810eb192d7f0f4d449a0a9c605f3f07c2769163950b5edb33aa68ddb8969927b038
+Entropy.5 = 74ad983b7daf0aafab1b2a14105e7455d3bc667fd33b20bc09a6ead4f6d55dd2
+PersonalisationString.5 = aba2f24ba9421bec5ea8401b31ddf774c36c521b4bb2549df47f6ca82f20a441
+EntropyPredictionResistanceA.5 = b08135498d4a43bf5571233c0905e73d0e1ba0c3977a0c273671337390cba49b
+EntropyPredictionResistanceB.5 = 267e0a11dc593ac17c45ab286192516dd7f7554f803f8b3e31002190c98e7a33
+Output.5 = bcf3998048c72f0f040029f164e013539bb3495d0535b543d0fda2b310d5c3c2cbf746caca20b7d6b03c875c8d1b0be0de93dd1bfe9ee17b0f214fba65f66d58
+Entropy.6 = ed6067f9bde169780b555c83a18fb16e02c85d1df6b68a2d91a1d1ded4e896b8
+PersonalisationString.6 = f160e7791d871b8559f4b0f800caf9a2d23ca305b6757c7eeae5beae5195814d
+EntropyPredictionResistanceA.6 = 94aa960f12845e8fa083d7cebac2fbdbab6ca3c1530f5832fac1896f51db4caf
+EntropyPredictionResistanceB.6 = a86221c6b0cf665c0ebc629668cdbe7b6ce756d154fa362eb590f655a13768dd
+Output.6 = d06663df3f96f48c295c68e8db5fa5b59009de65bb308b7c84b7c4e724e375085fdbd5b053e91713612f47d87f40ee6a04e7b07f2840f3140959d78cabe02ae2
+Entropy.7 = d4ad975aa38ed4f4ba2dde6d7e2a0cb69f1dc3efa943327ce5fca82b0af59d04
+PersonalisationString.7 = ff884c91fa005efc94fa9e74258472d888e9220999b6cdb8b89304e7f6fc5690
+EntropyPredictionResistanceA.7 = d00b53dc120adf306a9723dc1b76cef0f59b294fb413c20412b2d081eeefc5be
+EntropyPredictionResistanceB.7 = 57df07192f04d6113130ee3c1c230dcb292ebee85476a5ddf5c2e6adcbabd798
+Output.7 = b3dca241a104079260934c74144f850a1a5496f8ba259f9a206644d0442675be29392bcd1bca6ec147256af717673937a3db819c234230efee6d711bcb84c231
+Entropy.8 = a565e90bbfe01fac6ccfb5ae7d7b0d3fb27dd2aff1d68069dd381e63ab713dae
+PersonalisationString.8 = 186b2799ced81d4cf956e450bb1c8f757c678a05720da76c4380813e312faf0a
+EntropyPredictionResistanceA.8 = 33bba356096e75d575819393ffa241b938292093ffd98d6635b84db2ec5a2e74
+EntropyPredictionResistanceB.8 = f1bf05164844f140ea2f14ede5e189f8f8c77a63f05f4581160a5638f7020625
+Output.8 = 7898926b736b4f8d5133838b5882d371d56235303bfb502f1d20f82ec956944c80bfbe84ff9cd96a5a8cc40d629141997845d9d6128dd7d5dc689f176a50bc47
+Entropy.9 = 0f8defcd0aacd1f9b180fd1e340ff9b55b62bd54d5736eb5ad5ae142336f0ab9
+PersonalisationString.9 = f6866b6bad1acfe43c3cce9ce62b4412f51bec7370dbb1c466786b5707cb24ee
+EntropyPredictionResistanceA.9 = 9d690b9b71e310ef15653a3f1fae1c36627a2013a0aca6def3a0928e45fdc1bf
+EntropyPredictionResistanceB.9 = df62e6ef167d06a97fc2819b47e51f38c9f9572ecb2c7eb0e7569bdac5e9d9fb
+Output.9 = 06cc71a0e72a3426c621ebd6b6b2800bb11167b8fdd0a0d737b445629f5c2f9c6824ad5334ed3f8c982551fdea6df1a113f84294bd148033ba8309e24f00fdc3
+Entropy.10 = 9048f00fce43ac12612c5952f993eaf5de5825785a1e2e1791063a6cb8348cce
+PersonalisationString.10 = d3dff521541bbfc19710528a3a53c3d93e454b170d770a1799fa472d664b11f2
+EntropyPredictionResistanceA.10 = 0087a17f4322916d293aca7ddde9b5d61fda924db8fd13d4d386438f66bacce9
+EntropyPredictionResistanceB.10 = 3a94fa9994bf84d50f399e7b589e345ddd59bf7db5867a9d96131119f43bf4aa
+Output.10 = 595d6a047931e5e00dc12724f14c37c4928d15acff6f86a317f654334392ba65bffa35fd2d08d4df1bb58657a20905ac331fbc8d611e8614ec46fba55960c73c
+Entropy.11 = b6c31256c0412e6b0022d3e121710cf3cfc48d5e6ed7b3fe7b5bfc9ed8082b7f
+PersonalisationString.11 = e885f79894bc2f20812a8a187cc9992001f9b3b371358761dcd9b97373602caa
+EntropyPredictionResistanceA.11 = bd7eb93c4fc3700f1f7ccff1ae9a19ae621bbbe43d1b7528752ae87f78e76925
+EntropyPredictionResistanceB.11 = e0ad353d29db223f3caba64feb9a91d574bb67c0d877ebbeff60d557a7ee92ca
+Output.11 = 8207425c7b996abd8ec23dfeadf429676b55194cf9dd7e397b36174333d5c6af582576a466ebf3a374311e513f2dbde518dae910cdb49c4afa278e381d38af0d
+Entropy.12 = 3df3f22e70ab496580bb4cdab82c749eb954958fefbaa40af2310b73b0ed0d94
+PersonalisationString.12 = b87bfd758d8f364f0b336a0fcc0692e807507c2ab8c040a8d2eaa1effab7c92f
+EntropyPredictionResistanceA.12 = 13c4072a34cc1305555abb1fc961f7fcca4d389a355fa364a712e585c15c05ce
+EntropyPredictionResistanceB.12 = 09c021f8a816e6f61697a5b233d4a664dde2fd678a61717e3108f647c430c12c
+Output.12 = e26a38fd0e4fbe95c414dd6000a2c7544a5f59e005291c03fe61bea85da581daeef2eff5c8fa5c1129a389863b6eba269d73d223033996c90b05a1e903a07bcc
+Entropy.13 = f5b4408149692b9de67949db4e7a9db16039abefb24147e680868b2ed3e65924
+PersonalisationString.13 = 0346ba04407779848ef29c36e488a7ce155bfde5a57c097f6ed658c23d8018e0
+EntropyPredictionResistanceA.13 = 9169378755d1c4e96364c32222b72ca0a5b42d5561864b3f60dd16cf3a303a2d
+EntropyPredictionResistanceB.13 = 892a51b912564f902d8c815d7617b761e543b6517e6d2bb908f0bcdd47ee7a51
+Output.13 = 0495a16d1f6eebb67f478a83d516068b77df896448e97b9fa35034e3c1998b1649bb7767c36e28125e7b781acbbde92cbfb9b72e1d901e4e35ef9a51822b0f3a
+Entropy.14 = e5b693f48cc00e337e6b3702aaff9abfee6f325a34ff03274b7ab64113f8ea21
+PersonalisationString.14 = 31ff2075187f29967bf9602df615f4b8059be523e77fff1f82d6e1a81cb51534
+EntropyPredictionResistanceA.14 = 24e9ce22a727e4540d7d85e056bf6448063d5f13dae559e8c0380bd1b190dde7
+EntropyPredictionResistanceB.14 = 9a5f15c36078cfa0c768868816d5bd0b1d33c492fa9554498b6625639a293dcc
+Output.14 = 54c02aa8e6ccc1f109a5f215f488fe9ca7c7ceb3d1b0d9e9256ac4f5d4195cc8c36f8d8ddff55ea10f86d0eb5bdb5b116339b9c0229eb7e96814012a2ed5eb0a
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = ba18f14fb928d7686c62541f37b051784b3366b7d1327b31c7b904c5ffafe375
+PersonalisationString.0 = 1408a934d2d4079defd0aa01fec77703ea974f93ca5af388ad7c67b154357c1b
+AdditionalInputA.0 = 2c1c1cdd212b371650f5359c9f9064a1face05f512325be79afbdda732cd4472
+EntropyPredictionResistanceA.0 = 32aa9d4ef8ff81b95886e16e6e9159be26d5528ac36a2ff1b910a918ae652240
+AdditionalInputB.0 = 7bec3e0b5509d6b865960e943e87e41190dbe338f28fb63962214c494ed164eb
+EntropyPredictionResistanceB.0 = 690c1845bad06996b076f9aad0f2c17d0c304aab35b26b81af72b402f5e2ac82
+Output.0 = 77916b293b63c372ae03d0b6ee520524b74d16bd1dd8beb556eabea7173da34521339eb2f770cc77ce3d9329280cc6681775b4e27eada62c392f4d077c2cc8ac
+Entropy.1 = 2ea5a3fd54a0634130e8c22f59c503e6f39186920a9d8e47f41fe07cdb81aea4
+PersonalisationString.1 = 7dee98b4f378b80f697cab1ba2cb26c2c270bb6bb022d6f7e8e52b44cb01c6f1
+AdditionalInputA.1 = 892ab812ccd6047adcf6da0f9432d6780f4669aad31e1233bdd74477f563455d
+EntropyPredictionResistanceA.1 = 4c32653a069963a17cc840372e815e4ce0a438e2eaa0733fc2b5e8a44ecdbec8
+AdditionalInputB.1 = 4e5a8de14c031072e894ec98de502041c81b5dc1047e81d8e26c24a2d7f381b9
+EntropyPredictionResistanceB.1 = c536b6305edb8a6a3f9636836d4c59402dca5f64b4d7dd16fbd11bc76584d292
+Output.1 = aba9125acce7fe77bffb796e2fab64a2dd906011a7595152cfc5c72a7b32beeadc5fcda5d55c72104e7c366c56498dcbb70fe5c290403b22ad90c2399ea069f6
+Entropy.2 = 9f60155d5cfeb9ed55a6b0417bd51ee0cb4dd6c4b93af5c3409c9d59cc72d321
+PersonalisationString.2 = 94dcc391803522f5b0c029477678e6e5d18432f9db5076a13aade6c03ab5bf71
+AdditionalInputA.2 = 71e201ae29097166e2883ac3f294cd7981656af45c1ef8c955671f963183bd36
+EntropyPredictionResistanceA.2 = 3af6148f1427da27ca935a8b98581eb09af8ebbffe04cc703d4b56ab4c347f06
+AdditionalInputB.2 = ccad3dff4e4f80208a5afa6918ed220d2eab2a44670afef2b44d9f3a2cd724d5
+EntropyPredictionResistanceB.2 = a5f5235d90d9c6681e83f5029f7d5fd9f6ad80dbbcff3dd22001d1673bb41dfc
+Output.2 = 906c4f3ac4aded2371d5d84f149a6056dcdb94722d7d8c1d08b7e6f8ff022af1cdcfd71f9f04fb15324435fc2db873112096a44ea2487e63a785338b4f3a806d
+Entropy.3 = ca8cb025b511e5327aa0adf2ee6418ad14d7d8fabba4c41ff9143ed6a445f88e
+PersonalisationString.3 = 66b4a760ca7fa052182cc2f57dac55a5ec18c7e0829aea2820ca4a0633ffe273
+AdditionalInputA.3 = 1401b6eedc19512e56f3c3dc58895d71b3503b52a828d2da98d36e00200a01e2
+EntropyPredictionResistanceA.3 = e3e152d3ee5c008c71947a2e86cb644544d9eb81d2ecc5c07e578dbffa2ac89b
+AdditionalInputB.3 = 7643231199e4b50fb2d8b4e7ea8db49d00700d2f69ccbea635bd39c263005a3f
+EntropyPredictionResistanceB.3 = 91e091faa867bf42605c8d75f802e716999a9b5c44b64dcbb519b2bc3008158d
+Output.3 = 4e9c3137cc9dc627a7fed3ffa6fff4d4435f3cbad569f373bcbd0ea3df73c2dcec230b2bf0081c6e6aa026fad409840dabcbc61f37551082b282109c5d1db6c3
+Entropy.4 = 0d223434a0af6e4a60638144ad55ed141da1920c0d4ce639e038e89d93628dc9
+PersonalisationString.4 = efca794c07b235e09a6cc685a3390b84655e04b8eb924ad3ed4d356f806a6100
+AdditionalInputA.4 = 93e5648c4ca09a9748a81af0ce83c3b8449fa67c5d46185686ebbd6dc1d95856
+EntropyPredictionResistanceA.4 = 0ec696e52d57bcecd23103fe5d5421f53eb1ab163a9ad091e5c4789cf6aca0f2
+AdditionalInputB.4 = 38ddab18eb960eb5577509879ee75a24668f04db74631e407ad744db989d4f52
+EntropyPredictionResistanceB.4 = 19da7204937cc74f4b1e70ed06f19e9ce866cd5de31312a4f095b7eda15fb19d
+Output.4 = 07fa3510261268d9440d83262878db37f8e54e79b77451e16ef51a3e9a134d510a3607030c7318c88ffd342120debfa716ee9dfd07c18e593d5fc7cd68bd4785
+Entropy.5 = 3625c0e31b4da7a3a46d1e4bd3871f6503b23c0bacf19202c84839dc75b02da8
+PersonalisationString.5 = 58a83cc2c72c15660e59ff13e932eb92e855ed63118de1f4ec1eff8550d42dea
+AdditionalInputA.5 = 4116c8669d9d8462990754299fd282db6ec77d95671350cf3ab3aceeeb46b794
+EntropyPredictionResistanceA.5 = e65f53cc6a5d0d639e0a3a72f87e0c9e9ad8a1c51e8df82c739afb243bd155d2
+AdditionalInputB.5 = d6b8d5db3b728c0b2bb5b76a496d50adf3acd9a6fb25e85b5f47befc2253f75c
+EntropyPredictionResistanceB.5 = 79389023566ad60f8086e7fb6b4c24757705c4a6526d8042d3899a6563602a8e
+Output.5 = fbdea1d661a96de7c861f877fd008a3840efd3ef4774dd9ca09dd18974b90509dbd6b388c5975bdead20c938fd2131f530b5a416bd6c014c9ff519dbfd38254d
+Entropy.6 = 30800d7ca17a45e82b8307279a991caf9fa97de6e03a4547bc2728e196a6798e
+PersonalisationString.6 = 91b295598fe6d47cd6209cf8d971ee57417a50c7417007408a6598db2777b13a
+AdditionalInputA.6 = 92fb7002e325a00a73a2504b68c120a5126571f9d9f7f2337ca7b7aa6af6c710
+EntropyPredictionResistanceA.6 = 9620fd1e59110a92f32bb904e3eabdd16c98671e37a445d6ca21d1ef3a8c44d5
+AdditionalInputB.6 = 97ee81b5d79471faf10c740473702d74a6abf2290a8897be7f6d56236fc86f56
+EntropyPredictionResistanceB.6 = 799fb4bec7e3fb892f294195fa05e60ca11a09ce2e41d7479f4c97ea8b4f1ffd
+Output.6 = 34517cf4cde275e33fad5f0c13e19457a127c36ff4df9096fbbc68a45b8ab432a93ebb4f98cfbe5eeb344ce3f631ed466b5a4885b7f3be02d2dad945097e5f84
+Entropy.7 = 5167d2bc1d6e961ffc0cd4370383e9f19dd5cafdc9766a8dfa20ef7daf78db05
+PersonalisationString.7 = f788079f780afb0dfd22882820a97d833c600df86edc31a040fd13754ae3981e
+AdditionalInputA.7 = b253a2defe03b79fc81a2cdec5e6f0df30d361f13111e404630a27c7d28776f7
+EntropyPredictionResistanceA.7 = f6edab028817ce8e37734c20fbdd5c2caba6f9f3b65ad658bb349709e5a959ba
+AdditionalInputB.7 = d8fa7bc770630496e3fd98294155b97ffd4a387f0de69dff0f7e72507c7b4546
+EntropyPredictionResistanceB.7 = bdb441be3c419f696dd6971f4df263514aa863757a819fbaf28945768fe88d20
+Output.7 = d76b763a20249c390b91ce83824787822307e1c8b7813d8fdf4df8a73ca40cbbe752be7321f83ec1b1d497f30901d7383615290cea943029cfd18a43268a3f87
+Entropy.8 = 6ff915ee3db866628aed691af9e305caf088b5e554cf2beb1e5641693f7cbc21
+PersonalisationString.8 = 80cf68b01dbab79874f45dce79681a2848be479ecdc701d33c1c78c1ef4cb9fe
+AdditionalInputA.8 = 836211ab7b1a3c4d0a0de4a9f1ed70b3046687c7e8fb87919bb682647baaf275
+EntropyPredictionResistanceA.8 = b3358c4c5a6817804479a271c712c3eafc5374ee2b63b261a0b07be1a9fb8a4a
+AdditionalInputB.8 = 496ac3d607cccd7956fe9c76ef9d17bd9a74f87277b1fc2408cae2f39a728b5f
+EntropyPredictionResistanceB.8 = bddcf3cff1430efe515342d56fb8d808aea7edc699870ef28adfa5fbce3d45fd
+Output.8 = 238750d48545ac5faee02b4d80d630c04ca3d92674a7879bdaba720b9a90d643a94e0710a7fe43527b7590ac356ca55c9a5f5ff563b0d4b26c3b2eb900409e7e
+Entropy.9 = b866f2996e948dd1b007710d17cd345ae3af329f9e74ab8c34b059243d46e2bc
+PersonalisationString.9 = dfc9ccdab3cddfc5a0ca19834152c5781d9f5cae0aa22a2e1f4734359c4c4ca0
+AdditionalInputA.9 = fd0f72027fd38f696d930eeee1dd7a16a4d89088267c86b8d5e4f304dffe7168
+EntropyPredictionResistanceA.9 = 6cb77c32f9873e05eba0481eb5de38815186b6b0007c9c2b621294b8322dab82
+AdditionalInputB.9 = 06807fc46b1101797e094ad6ab8acf7b688885d25f42bdd5efde2f79f114cf81
+EntropyPredictionResistanceB.9 = 58bce6a686e7ae5c98224ae5552a5a63261aa4edab98713b4ac7852e2130326a
+Output.9 = 9df0155e0206459d6170f9fc9c55120b4dfe105ebce4311515407a90ba32d30b9c9429140701ac8e3577826cefcc624b2f9c94d6c561e235270d8cac36adebd5
+Entropy.10 = dc05491918290d015797bfd0ff786190718e8d73bec783bd3fd50a7b21b59dd5
+PersonalisationString.10 = daf21b5f651995cebf700d453fbd8069c1ee34a5dc404ae4f7756d8404cc5678
+AdditionalInputA.10 = 0ad765720c58b4be8d88463018d1c53142652d7394110aeb62f386fd4ea4bb4f
+EntropyPredictionResistanceA.10 = 4521a5cd8d4fbdfad4941dce55184ab2109df1e5592837f72be4309ef935041c
+AdditionalInputB.10 = d18908d86dd50975e879f61317b031b56d2bba9dfc652d59b0cc6031fa4b121c
+EntropyPredictionResistanceB.10 = 86b1991569d1d01905e7f822c6348f64c3a4762300292e8e6bb9a40b43a5d32f
+Output.10 = 6e90ac71eb0da10c76c88877bd180b0e1c2481813e67fbe8ad955f75a95ffd4f9796c7e2b3f76e20423e30a0192395c740f4d7148bcbd8a5d1f9f4e66a517b03
+Entropy.11 = 9c687d67b995f336156949338aa9b1e01fddb0fd5d075cfc2a6fba06f9c6f9c6
+PersonalisationString.11 = ba8b6f0b19ae8c1448df3f143cbd67dab4dec019853fc3eab7911bc930521f37
+AdditionalInputA.11 = 495aec820aa66ac08180c125cf81f322bb00b486168feab72059abff04a97350
+EntropyPredictionResistanceA.11 = 2791fa5526045c3dc01fc20e52696566f885d18a9df4411ceebd9984e9b0cd2b
+AdditionalInputB.11 = 20a8078f69293538e81a6bfd24bd200be3474d04252ce53651999e11ce06ddc3
+EntropyPredictionResistanceB.11 = 661fd9257610f1c4fe961e2c3acab0173958679432ddbff861c48160aa0a5d4e
+Output.11 = b9f392a5b336ddf0bb556c86afa40a2d9caf991927403330fc622bf021547e22ca42ee9c6a8423278c0f89cfc2000125ee5d7b8b0e895070a2cf685940e4c210
+Entropy.12 = 583ce214ee4ba011701bb0f8f556da0f952f4a855d3ebe1882cac33081818783
+PersonalisationString.12 = d42e1f3d1eae3c1f9aa0c79234a9c86ee160f6c34e0d9cd8c5b9f073992ec077
+AdditionalInputA.12 = 7f7987dc4245337d6eec6e634090991bdde8f36d5488f11eb02abfcb00b0578b
+EntropyPredictionResistanceA.12 = 634f252d8cfba4e01c94751648c7f8e04242e4d58648bbb139f27d7a761030d5
+AdditionalInputB.12 = b9a15249cbe95e068953e7b70104f035938777a07fd2183912169329c4161eea
+EntropyPredictionResistanceB.12 = 19dc7c5414dedc2d717ec744aa1291c6aa8a2bd34b4f4063b14921bb9a684596
+Output.12 = dce96a75d5ed65ad342393b8738663f344598d5969d8f78f4802cc267d1bc00067b86fb29faa299068333a16cecb57a43ef6631d5ca624f057970e5840eb1f44
+Entropy.13 = 22cbd0c8991a1fbf5e2876f51c835e7b5222d4de29b474414a1b675eaae07a37
+PersonalisationString.13 = 2cd5f1b268e36b99413d01eeaf5b48f208473ec9975fc00989283689a3a9da8d
+AdditionalInputA.13 = 9e27307e22be6449279ac8fba4fb91b9f877714d592001c9823ec3d43c9499e7
+EntropyPredictionResistanceA.13 = ea7110742c7dc5291e17a9f0dc5a0402848dfa4248822369313088b7f92f6093
+AdditionalInputB.13 = 39a3a19f9cf1766413630f5d143a1d6c4b0e7daadbfa60cb2365c7431fd7c8d2
+EntropyPredictionResistanceB.13 = 57e3798ae974024cd601b1e478dcfe24b0acb5851e9ec9518a60f930a65cf4ef
+Output.13 = 19690814e09f6cd12fc2103a1ce6b3539dd3be920be942edfa703ef2a205b3e69820755789cd9893df9f2af18f164cebf4249cb5830c3d1b6627f9df1430df8c
+Entropy.14 = 3153c104bb02d15c49c438787838af4211a5a683b90993f1a3969fec8069cc25
+PersonalisationString.14 = 8c90544a34435c2735760d8f55e643519b703f04ae11720d63cc73f6d4e63b58
+AdditionalInputA.14 = 4a4b1e9e90998cde32035ad2ce01c27722fbe404ff5c6b8eb3ae8e7629a832e8
+EntropyPredictionResistanceA.14 = 6805ebcb82b118c98ef73f0d9867a71fef1ae435f196d23bd3acfbfc88849f40
+AdditionalInputB.14 = 34e517ff4f40e3c0c699710134cdeed029baea8e142db0bac9c5aba6a0caa5f4
+EntropyPredictionResistanceB.14 = 09d8b16346fbf20ca073688ab3e917602686e07dff338142841410068e640296
+Output.14 = c1d0095376ac846921d2bba5f4d50d231851311792c66d125d5701d6cc466e181c893dfc9999c21063f69f0cdb9850c3a34755926c67e3af75e801e7c21f3da9
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 0e438b670b4d803cb7f9ea4ce75c223aa49ef1adff4549dbafff52503a5479de
+EntropyPredictionResistanceA.0 = 5a04f7b495dd0d744ec1443e2f6e1bc20eb4573de112a5341c13c512c5c619e8
+EntropyPredictionResistanceB.0 = 15d49435db6954e806476c7d2ea4c5fff4a1d5834f5cbf7bd616ddc790afe409
+Output.0 = 0ae821837952088332c7c9a9c9b9a91cf7a2bfaee6644dde20f919669f97d2f14d16ff25bee5062e6db914725292b147cab0fbc1fa202507f882a91b6958bafd
+Entropy.1 = d1af897a3f0db9eec2191ddf52b94310bbb00a1cf25bb7cdd2c2e2c53d679866
+EntropyPredictionResistanceA.1 = 61420c5e6372a12650f2914fec5bb70b9ff53098a998d5d483a5a41a1743959d
+EntropyPredictionResistanceB.1 = 0e02b6b46ba43b778de20920c555c2cb52eb16be3ab22ea4ee6f42ae2011adb4
+Output.1 = 1503797efdc246e33387709e9bce771aa9a39abadfd2b29fb6ee6bf2b0eb7aed1cfbfb93326ebecd4300e71698da82756b9e1230243f81cedac6d2b4850717b3
+Entropy.2 = 465168f31897cce408210dab00314a769ec5f3230c8cf68b80a0483345fe4add
+EntropyPredictionResistanceA.2 = 6ab82b884b5b8888bef8ec3811844c2e14a5c71dacae63f477f5c7acee64f99b
+EntropyPredictionResistanceB.2 = 761933065a97b05023ceb181d0c72a14f347d4196a37744cebabe30f42cdaa7f
+Output.2 = 1e8f3c68ac092f1e6997b13f4a9c971c27b857a07bf2c41a1e901bf0e9e7d561bdc96904f5f00e667fde204934b888c7109aeb97562f25cff68d529b0a8e4852
+Entropy.3 = 409f5d9b5614bc9221bb41d03c7e34c0fcd31b869799eabf95c129ba1a62512c
+EntropyPredictionResistanceA.3 = bc363ee6ea2c9e85a2cbfffec9e8f7d0e9ac4d627bafc422a2dc5c8b3ed0ec1d
+EntropyPredictionResistanceB.3 = 034837745d058347c3c754af586ce8eca4134984271251ecdf09a46afcc121f2
+Output.3 = ec9b0843ac59c21f11d1df59357354836970953fe2dec7d52ed60604c8f5560290eba3b20c6538c1a5f99e5cc978eeba48b77ad15e488cdb62d284bdad16abcc
+Entropy.4 = d46970114f0c6d093c6a20c3282795c051a8b4efea105c94c3c75d921c3486ad
+EntropyPredictionResistanceA.4 = d91deb7d15399af1d6c76fc4f31df4a5fc2aa8692906f7f843c880d2ee1143b5
+EntropyPredictionResistanceB.4 = 36145c0c3f474d2db325dac7ac89c21e84fe8da628ff02a848a4eae3b4d81ef4
+Output.4 = 713779ba11f587b522c6327aca5aaa271db263ee019428028d1e335284bfdb11c764fdcb4c4a912645b41efc65adb8fb233293753418a3ab4eed323cbe71d6a4
+Entropy.5 = 7b3747b56f8547cb1d99b92538ee955c15da1057bc5f691998ffd48412d92216
+EntropyPredictionResistanceA.5 = 0570e545d502613df9960b89f16fe99ed65d84c733359ab4c391b9a235d8a2d0
+EntropyPredictionResistanceB.5 = 6e70f5a3895171cbfd42644ac7093ecbd439f994733a6ea1fd543086d8c86787
+Output.5 = 57c12916b0e1d31e1d1e255619655c6fba57fb62430def55f286e3ace3f324ba5d9d8adb0807a689d63c242e449a6f0cfda0669efad599c6071405762f2aff8c
+Entropy.6 = 67efb046d0f2947d10f97f6be803ffa94a5fa2309314269272aced5262013cc7
+EntropyPredictionResistanceA.6 = d9d2276b9d7ce272fd5c6f4d590d32c017e6ca88e7e64d37175e9a44945f2a6a
+EntropyPredictionResistanceB.6 = 0d049578335aa1e763f22110b34832a15398f304e3955b8645d883e1f95895d8
+Output.6 = 9408cb6c008a6284b719328269db30b645e7e68e34f6b56cba64fc8e8de18c2404ddc29dcccdf26e05a4e1b49bdf4e5bac0bdc831092477b33fd132449f80de9
+Entropy.7 = 5e87164f7e4939adb8903c399c2cd45d7a9ece7e22a95f3afecacfe60ec84486
+EntropyPredictionResistanceA.7 = ed07abbda16c7e85236f0411f193691ca1af65895d678895373e4b955b6415ee
+EntropyPredictionResistanceB.7 = 9110697cdadf4a9c03264d6bcbf083b408cd13a1cd712be5f32904f8f321b75f
+Output.7 = a382c29bd8a3275a5f9c34709ea989dcd645b2417d03eba62b349595da155bcb5a3343d1748e575125a103a7d2e8c6fa86faa8ee8129093822d124a4893c39aa
+Entropy.8 = 955e0663b825260aa726e868c482a492c7e60d273d806a9a92f2e364996738d4
+EntropyPredictionResistanceA.8 = fa0785dfc339e817ab4ae98c4537528b5c0b989724726d95e4bea4961bd35953
+EntropyPredictionResistanceB.8 = a86b47dfa1e42b9b7300b3909f6a09a753090bf4adbf5de207a46ca0ee501172
+Output.8 = bd35f3741e4dcbf32d0f2e69bb8d467188e2ac67124c84f509020fa990cf30faae64382999b44379aec860978ccfc0906462678aecbc5d425efc2282e1b5332d
+Entropy.9 = 8f91c33bc4c665a1ca752adc2e06a398b4661941f317308865ea2857c828dbcc
+EntropyPredictionResistanceA.9 = 75c6bb2d4fb277ad91b935f6a450f4c987a89df5a6581fadf0f6ed60d089920c
+EntropyPredictionResistanceB.9 = 164ab4d6d0dfd84104b7bbb9c31c859fa76768b532e11ca15b198410f0b9247d
+Output.9 = 93447d095c4b1969b16313203739776bebf6f24163e9afff86606f54eac4ff9751f2ec08a2ca66f135cf1049f22cf79aad8775fa7cf11e480e4d53829dd17ea8
+Entropy.10 = 36d55945ab9c3f380854d04db5c15c8b7e10d8db2ce9dc221b6e87244ee19ce5
+EntropyPredictionResistanceA.10 = 207d6969c16433d278c377c5ac67f28975d69d7f131a9f19818e7a0d46d7e4b8
+EntropyPredictionResistanceB.10 = 59401d6681c5d56ddaaa7ed64e3b4b847314b44df10b69c3132f14ba41cce648
+Output.10 = b3d16112798d6e9f1275d88d89320b4bfff44fe4ede9ea734491b2048df18e04bbc79240ec5a2c6a7ccfce73ae90daf358ce967b0093a853be5c190827555ac7
+Entropy.11 = 12941519f619d97f3cfab91c68c57dfe9d55ee3c17ee927fdb48e2b3a499494a
+EntropyPredictionResistanceA.11 = a4234e629f9b7ba4a0133f17617985d2b3f8ffc3303853dae2214c4701a2fcee
+EntropyPredictionResistanceB.11 = a236e062055a4a18fdc4bf9cd7546da1239b7b8760bc3df68fe42825812f5e38
+Output.11 = d54560927b334d0546907d500b49fbe9ec2f33f466c3185ad638b8041a8815260198453118cb97d5ace906896d188b6fba3c9a14904fb7d40089a9db0cff9fc8
+Entropy.12 = 3e53b72a8f70157b5b4df9126aa02864cd2413976252c46ecb4f9ecd10c202fa
+EntropyPredictionResistanceA.12 = 3b564e331cbb001bbee3c4a479f85c5714a0be6e2a7279fbc4c619f443494c16
+EntropyPredictionResistanceB.12 = bc2e4ddc2d65734526e8b64c965b2f217ab499c67d0ed258b040e5ab4b251027
+Output.12 = 1874e5eb37d48d1a4b682ee0d503a0e30cf68e71d65e8c3b7803ea561fd5413b207be3ea049afb97c1fbb5f59a34e4f8bbf8637727d41b908b8b6126e89f1fb0
+Entropy.13 = 8a7c2c2533fdf0cb7500fb12d8247e2aa4590fe0e76997dacf543481231c8b4b
+EntropyPredictionResistanceA.13 = 5de094e6420439052e76a95e2c15f0a593a1e0ac6aedfa31b681830579f00d2d
+EntropyPredictionResistanceB.13 = 7b92dddea51edea711bf434ef8f60460b51c888d9b736a998af9befe12e3aa63
+Output.13 = bb7adf581b96a94dd265feaa14f0f8e47dc7b3716fa58d67363d3536e41150cdddd59a53d02fb65a93dd64417e114df51aacf98d9691ff3d196c2db688917209
+Entropy.14 = 3736461a0006666eff3632873a14ad006df69cf7c1fd864849ffd72c04a57ce6
+EntropyPredictionResistanceA.14 = c52074e8343f57c0f56c9aa4bc3a6bcc9dff30b21905ae6c5eaafc8dd0d8715d
+EntropyPredictionResistanceB.14 = f09a47309a1ddfeb54eea6dfa7b15ab0e6f183e2478a3889de89091c2bac0c25
+Output.14 = efd931fe77e202d2aba86f6407126a859c881abc86c8f8342deeabf527ed6dc679e5dfcdd212ddc3f2e779d043f058893d7b23c6b69334ba0132db6ce82a167c
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 940513832da6878eb76b91f259cc76f016f47516bf4ecf059190837bad026f46
+AdditionalInputA.0 = 3a5e2fbeb2c6054948e0ce2cd0b2a557628d412be0b6086c63d8fa4f196d8f91
+EntropyPredictionResistanceA.0 = 42c6f308bb9d05b90e570f5af5e7ee62e5d9d5326b1455e33dfd9e1a4b7ae710
+AdditionalInputB.0 = f9e153b041bec6e7b3b7d9644bd6b8cb156ff7c7bb60ae71d0ac64f86b0016dd
+EntropyPredictionResistanceB.0 = acd9a16b81795ec217c29bb9e4a8e51be61ef0e2f8d9ac0da49f4b74616dd789
+Output.0 = da600d285cf047c774079612ea684fce14a93234ba4e39ca27eb8f68dade12c9e81fbe9345e6d4d1ee705e7e34ee01497b1a55d65f396baa7b9be7c720c7e80d
+Entropy.1 = c35086e6892fde79bf812b18121d8f5f2bb373261cbf12968d29e8f0d08fc740
+AdditionalInputA.1 = 299f07b9ec54e578026fd8f1afefaf2d7c8908dec69278872843a5bb8fe39d1f
+EntropyPredictionResistanceA.1 = 24296aa027d910e9399dedcd8e30df2e261444c5ab443fcd3c0c4764f17c16b6
+AdditionalInputB.1 = 849927c7e56958b7dd1b91c5f18b9415a74fc5dd7d5e8e0e36365da1ee7e3561
+EntropyPredictionResistanceB.1 = 14f0393408452e981d84485072cab5baf56ccd554f4735c516a80d6dde1c51c4
+Output.1 = 13ba7570476b6a69a87c3f0f438b74b7c61812a68ac5bc1937894bd480ae03ef99752b77a694ab94aa72f68839b33ef8bbf13123fe8a82078b914c9b8ec08727
+Entropy.2 = 69dfcbb4a2843868cd141a246c69b64e5a911dd1c4f62389cba4750cc2eecdfa
+AdditionalInputA.2 = 3bf1c148b04cb53e1973a8c5ade56dc6e6c75c5f12c689a74acf71f849797e8c
+EntropyPredictionResistanceA.2 = 6aa7e00657ea6a294ae0b45ea5e017be53aa67434b1edde28eb90f52bfc9f268
+AdditionalInputB.2 = f863ae0ca05cbd59979544cdc85c9f90ed33001d60f5d44ede91d8b81270f75a
+EntropyPredictionResistanceB.2 = 79097e55ba3cfddd223c62bc2536c284e2b236726a77e5361bed1fea7a7d7add
+Output.2 = 1e28680f65c360f4bccdbad16c70276b8ef061f785ceb24e5c26cc8180b49311a01fc7eca23f7e77bead9df3268e32dc9b1a9c6b7ce462f149cb53dd9cf43e20
+Entropy.3 = cbbd175d427cab8bb8a44acf189db1924eb314806cba321123edb95cb85fcb83
+AdditionalInputA.3 = b816f205ed3d44bda729f3e1d317bbb75116892bc6aae86866955705193ae1dd
+EntropyPredictionResistanceA.3 = 9f2c592f9a68c063617f740dfb311384b1a31a21e0cb78a053e74ca888a144eb
+AdditionalInputB.3 = f073d0ef5d9082d1178d4e5479937a4c27961b9834c672e1ceea9a0b27ad3e26
+EntropyPredictionResistanceB.3 = ad961dbd7e2ec6ef7669f35ef79e79945af81b1e81591b5dd8fb4485b9be86ed
+Output.3 = 2d72396229345de144a3f19243a3e6d1e0df810620e4a4ce4bfab404f6cd364b5a8544e61df56a34f9cde685a24c9df42136c2d4985d56f535e9b57e6af19080
+Entropy.4 = 5b314e294ba14a9a14cb4d8281e44c2674e94c4744c3edf0bbdd144fcee1295e
+AdditionalInputA.4 = f5f3dfbfaee3d02dfdb8288410cf4d518fd749f339dc4c3dc5efae83a1eb4dd8
+EntropyPredictionResistanceA.4 = 1e00e96f93977e68d8479a03e78d14c374489e992a51d0153d0b8d5ed5ccb9cb
+AdditionalInputB.4 = fbb00a5daaf8e517dd5a207dfa27e4b7ba83edfb384d5809d1cc4633983b8cfc
+EntropyPredictionResistanceB.4 = 88a4fb2ce8f2b22fd30114c7064670316017dcce22d7b4a8240cfb2bd6ba93f1
+Output.4 = 1af8074b29ded5851f414b062e7d7fba3a274d15c5e8f9dc046b407645f46ceafa9bf6f962817b90395183548201b824903b4917a454ef5a326d3d9f5618e595
+Entropy.5 = 2743f8b37d242ae4928e61b94692e92a73e9dbcf26fffcbdf86af200e248a89c
+AdditionalInputA.5 = 7ed421aee6ff71160f0002c28553c1b7cab5cf6966efc2ba386a84e6bfe7755e
+EntropyPredictionResistanceA.5 = b5b8c3b0d8db9a0f3090e082686d0266924e59d150581bc17f996f8d8efaa5db
+AdditionalInputB.5 = 15beacdaf71ff46f96a094d019fa1bcf8d37123035a7b5fad31b775f7d4dc861
+EntropyPredictionResistanceB.5 = 7e09092219c30f0ab21a9bff15e653dc47a8f78a9b48dd44a006b94cd2f34064
+Output.5 = 9b8a2852038a57ae7dade57bd9eec508a2a2adc4d9894f8ef9951ce1164b0bd2798008456a29a3aea05d43ef94ed12f9a7ba9bedb27639fc29eb0354390718dc
+Entropy.6 = 5906e1de68ed4b52d60ec97ac662e8c0abfc1cb31b46113df241fa888cc3b4eb
+AdditionalInputA.6 = f0a65af48d67be705ff6dab940533d7250156a282dba1856a7fa1d132eccb5e6
+EntropyPredictionResistanceA.6 = aea734578aa662cc135f0c88ec24e710077a8a2ea31869dbf9921f485a664740
+AdditionalInputB.6 = cda4cdc0c7f7374542d90724f4ae9468e6681640232958bb1ac1c4aadbc327e3
+EntropyPredictionResistanceB.6 = 0f24c6d7f9322411016734ea1c2652ce880d6582660c89bafcad7ae75d90029f
+Output.6 = 9b3bf3f8b914e649627884a9db3beaca711270b54ddbd40d3180200f0a09bd98837945da9cb02600e8feff410bb5d8de4c8e4ff12fb62ba3945a7dcd249b36a1
+Entropy.7 = 9df10438a5fe5ef0631346abae84fe085a5d662aae4927a0422921e0c50c9a16
+AdditionalInputA.7 = d0b0ecc98aff929d67f20c86519d2764a0771c2325f1ce7594e77425e38fcb71
+EntropyPredictionResistanceA.7 = 32b416bb02e2d4dbce860e57020b251698e3f96d55d45c0d0a124f8ec5f43370
+AdditionalInputB.7 = fc61b34fa034ed6739b1a3f364b41b7c8c6054fdfd14c49139193b91cf6dc9b5
+EntropyPredictionResistanceB.7 = 5be9eb7b437380a9d47901cc4bb9ddc4bc6201d9060b2478600e3f97287fea37
+Output.7 = c8e335861ebc61ea6dde4c7e6b9afc908fb967441931c1c13f8e5ebeef7dc509d07f0185e94a1d535f5cf133ed988be5f83b86b001c55fe61d781cc505259aff
+Entropy.8 = 21a8b59c97f2f7aab5098eb54799ebea56b9f6c7b5610dbe33b82507ea0d6c58
+AdditionalInputA.8 = 28f8f476f9794e5e30ff711e2ee317994f5ab51bcc097e8739cfb0a726825d6b
+EntropyPredictionResistanceA.8 = 16ef871cb37962c7f5809c59857cb27b3106ccf0227f9175c71b0357d6fc979d
+AdditionalInputB.8 = f407b55a731852a848777b149312fd346b9bca7e778d376eac5bde0b7beaf8cb
+EntropyPredictionResistanceB.8 = 124f03b84cac8b233cc13aa1b3ae7da28dcf85a1cedb4cf94af84c2f90dcfe7f
+Output.8 = aadf5fda6a56e8c1480d5c9934e4499ef46d41d446273fcc8540402e453137aa08634cec74f43bc9b7e6cb14015249b184a91a43eb7c09a9a95a92a6495d13d5
+Entropy.9 = 483ee9fa60e7f93772926fa7c54f0823f4380542065239c560eeb7adb474e534
+AdditionalInputA.9 = 5c07646e67bf53ed23419f7ffb51e43a306657223f0d072c345125ab70737a02
+EntropyPredictionResistanceA.9 = 2b6c86a7cd5ec890c81bd763cb4452391d3ccd41739e0a61ccb59b2834386ddc
+AdditionalInputB.9 = 61a883a32eec111e8dabbc787963755265f854d7837dd2db5de721e3016bf5e7
+EntropyPredictionResistanceB.9 = 184591f2d11dfe9f541f375b4a81f298129842f86826065246247b7fdc35c162
+Output.9 = 12c0bda3144b7c6e8ea4b7bd94c20ff416f89136013bbe1604f6ee335f4550b921c6b58a2627a20a14825c5b8eae418052f165f7b15427e7ed8377d4544c8d95
+Entropy.10 = 5d127c29ee65dbb82f101f5f4068b7f3b080e389c4beb4c279c42501bdbbe2b1
+AdditionalInputA.10 = 905d3f8514c7dae61e8e729511e3e8a16698a7f8b4ed5f8570f874584aee9659
+EntropyPredictionResistanceA.10 = 6f1ae9476bdaf18c3c84107f8111802609624e5247d507fe3216ab191b80b433
+AdditionalInputB.10 = aa8c36bc372a5cc78d14ce58fd7424a88479a42363166a3714592d56eb13a043
+EntropyPredictionResistanceB.10 = 50fdf5d4e9dc335a8a1c66e8f5c19a171f01c29cc35cb433747391c713cbf9f3
+Output.10 = cf4c372981d2b05747ba741b0211e1dfe5624d39c17fad73db7cf2d813419d878dd5e64f34dcbcdd5828ce6dfa585125ddd32cb29e8e21624e5d755876ca5ba6
+Entropy.11 = d06baeb85197f60b271771b625e041c3735876b174dbd1537002ec7e95f4a916
+AdditionalInputA.11 = 1692ed36a3096628810276333b1ff566aa41ede86e4ae2939255f9e577ba877f
+EntropyPredictionResistanceA.11 = bc8bdc23e0f2c8e40b53f750f8b0de6144acac6cf6ca4f66e54f31440b1b9bab
+AdditionalInputB.11 = 66beef403f26a61b3b45e52a301602557e1c131169855c02878ecb16e02da0af
+EntropyPredictionResistanceB.11 = 1a860e6eaf237f516eb0070c1865865b087655a03dac8b863034f3911af3dc39
+Output.11 = c65795b44d82658a57c6d5f0f8f363eb5fc7ae7e9e0915b883d0e02bb7cc3d1378cbf8bdd25d0cf3f443fc25fece1fd5b4a877dd92ebe74067ab72860a2ef72d
+Entropy.12 = 5735c81cccf6d8ab94d15bc0cdc4fb64e6e3168904389dd4a45dbf41e9ce1bc0
+AdditionalInputA.12 = 11b6190454b69c998c7a6b1a770b07e3bbbb9e59caa753da799ec4cbf64ed6c1
+EntropyPredictionResistanceA.12 = eef11661407526dd6673fa080d2622f3289d982f2426b7930a23902399d06e28
+AdditionalInputB.12 = 1f071076da266c8fe9f5611ace6878292ba37f25a91227f6248e2b5a96f96bec
+EntropyPredictionResistanceB.12 = 12fd7a462647aa6c49832a68bb2b74dece335c7da4658498199d439a4b2abd34
+Output.12 = ffd508dcc3c51678b9954c6920a70054155b5faf9db5f67ae12279ef3ecd753d280d24fc10d3e8b3c154948368311e991f8ca7cd13193b6a51e750e0de0f7e85
+Entropy.13 = 9e831d781760924895dde9ae33b4e152bae2007285f4f7ad294e295b45b3de63
+AdditionalInputA.13 = d931a3f1dc6d4af28da73f4fff0272c27b529fe8d0876b4cf6264c4c0b85033c
+EntropyPredictionResistanceA.13 = 26591942fca9faf5f73d60cfaf89bd21331b96ac1ab1cb66e2f73459336e626d
+AdditionalInputB.13 = 1598b04a3c9d3fc127eaf8f136dfc564690a481a868cb8605e07683aa5b91ccc
+EntropyPredictionResistanceB.13 = 23c8eeaf6651e0f9c7bacc8aa832a240a90d1a5e481db9589527e8bb6b617a8f
+Output.13 = bcacb429a5f7067f79feb4717c31fd3991a4f9618d8900a26c0d531e21319b0d495c91f2e114ca4c780595a26b0cd03d4d0d430567794ba1eb358b86c9f5a360
+Entropy.14 = 63e937e34ca9cd2dad10cded3667ec3617780e04306df11509e833bd7a96610e
+AdditionalInputA.14 = 6b620bc58388aecc90ab95ed4d4be4ae3cd36a000a30eb7e90ee79ccd5e32650
+EntropyPredictionResistanceA.14 = a4464a1116ea8c17616ad36729f58e47a90fb79c26904dbbc71147709cff35ad
+AdditionalInputB.14 = 0bf212302b4d20c6d2b799c9fd692b14b5672897fc45b416addaf55501c810ea
+EntropyPredictionResistanceB.14 = d0b9c12bd6b178f89a238afb0fce43d45dfd2467b3a1cf9b1aa31960179f125c
+Output.14 = 7e5720126ce4ef83b785d9649915cf76ed6ef318422950b6540cef9a0ca90c40203b3a365b8a5c40d63475f7b37f5366b7f2ed6e18885e361ba89d46350028e4
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = b9497ad74495fe66c274fd5241c7d3067139fdd4665ed12ede09710b080cb2e7
+PersonalisationString.0 = 16524276148d95590d757ebfd7d2f144ce21819b66dc40ab9f6a6a1306915ff9
+EntropyPredictionResistanceA.0 = 08e82555249883f54b040753417df7aa2677bdf87f991dd10adb592ffbbadd29
+EntropyPredictionResistanceB.0 = 26364fc5a0f15554c819221c8342318f31b5c951ae0e08ad8af6034cd816f036
+Output.0 = f69cd57693a92859ee1740af65c8e40e25c9baae04ce925bb325c09268d38dd997701008a65c79608112c955dc58b5797552760eec50e37a709023cf4a8c36eb
+Entropy.1 = 2aec54d5ab90de43b6fed4847865abc9bf648cf9ba4560cb359d1ee76bf3cf33
+PersonalisationString.1 = bc88ecdf2837f9415689b2c5895e7ae1e54cd5a978cfd26c90474093b4e912fe
+EntropyPredictionResistanceA.1 = b8e50ea11858a4c9c561243debdf63be66cfa3f933e5d94a22c1076288bfaf9d
+EntropyPredictionResistanceB.1 = a2d629190682a288164a503350d29a0d5e9bba3733877684a4d2a7f7b70abbf1
+Output.1 = a2c49dae90a313704c9196e669dbb0d4d25c05e350de02456625c02c5a0c775fc303f49e1f8fd4d97633b2e7bc5bcf7ad11552958780f4815fa601a7dc758de1
+Entropy.2 = 9487d0dd5b9f44677a8b602513c9f74eb31a48fb38759fb6faa28b7f7ec20e3b
+PersonalisationString.2 = f6f30da271b7470095a82fdcfcd5a08b4dbb0aba2b5b3fa0654d6345c7df7287
+EntropyPredictionResistanceA.2 = 86b757a673ebcad9f748841b674c20ea1c6df41968ecabdeefa6becd56e294ba
+EntropyPredictionResistanceB.2 = ab665a80d4d03a09b84d90bf82347c5fa9bf5bebb128348bdf17f9e6a422c37e
+Output.2 = d4c47e64e63b8c1a2fcf1200f599e2cd125fd0d246a64f190278491114b7d07d7789e3afde6c27673c32935046a9be68ddb7ea8d3e24ab63a706984306492a23
+Entropy.3 = e4eb49bf5434a7fa3bbe6f359baf39e97f1fec6098ed543314c2feaac7100d66
+PersonalisationString.3 = a0474832deafbaf35b9539a8c13baf20609ec5739e701f155c4431af41215907
+EntropyPredictionResistanceA.3 = f303ce795b2ecde637547b8cf8d39cdceface623f79053057cc5dc81524a6a01
+EntropyPredictionResistanceB.3 = b297cbbad881ea29369bb56f428fdb742ed9b9a733136439b1cdb83a8578e9ac
+Output.3 = 10620edd06ba0c75628af24a1c3ace5452081d96db251631a121af8d18e1978c58b092570fb16225cafd14ac2c448e87781a8881eaeb10308aeb965f579a37cd
+Entropy.4 = 23737fa497abf59372f7928baa792747dd4080db496f6eedbf85dab079ef73e1
+PersonalisationString.4 = 7d4c18e34b74a5377dbd75e287447f5dbc078ad4e7bb8c0c1d748e8b271aaf75
+EntropyPredictionResistanceA.4 = cf5a8c69ee67f3b850e60f6dc3d132b4c6a61d48e58287962a2841b89bcd1c48
+EntropyPredictionResistanceB.4 = ec58c1f146c4179d54afe24bc7412e2b867fca33703fb8fa5870b85b160438d5
+Output.4 = 3985ed1a0227bc61fce26d647ed744e9c4154889e6ff609bd6ffac9b8bc2f0a1ba8de566d46770e6120044ddde1e9a6926ca56d168479d5e31b63dd0b9fe4815
+Entropy.5 = cfa4699a229784704e1f4c2745d50d309c997691812d2168473a2ec6c4d8e656
+PersonalisationString.5 = 53ada94308809c3b245cd28cbabce2c8f9c147459041923f9faf1081486a605e
+EntropyPredictionResistanceA.5 = 2ffbb5ba735561da5275240fd60662ec76786815047d480e2cd115b9880b38fc
+EntropyPredictionResistanceB.5 = f317963fd23766352b11e78f652d1675301368f73d34c2e439609dc6be5cbc64
+Output.5 = 82ec6417d399839d1b8cd38c51c43293c2cff233c290431b19178aa43fa4d7fdd84fac19e8c84ac1aa0ae5d97df4d90458234f00d0dc74a8f6b4f618b9382f24
+Entropy.6 = 4bd45b5c6ef87fae294d488765271684c58e10a66361f278ee899bd0f7ca2254
+PersonalisationString.6 = fc3e3ea94f547e0cdcaf4bae51d03922b5641075e9110f4f6a06932f24ed1151
+EntropyPredictionResistanceA.6 = bda0a1086854635ebbcec85dcc4e477a7b511755e93f6bd1dc9034d9f896adb6
+EntropyPredictionResistanceB.6 = c6fe9a25ea372c7c8c9305f431e8d359369e7022d67dc3e84fbdf5a01eff2824
+Output.6 = 2ec355ef56d17537ca1aab802cfdc71819cd6910e3c92718102b15cecc6f77dba21a5d43f2cb3553a8d4461532f8893394a689be47603144691c47b6969007c6
+Entropy.7 = 74abe91cfd30c897825e70304f037efe12ceeaaaf2728b1c023dbfcf7d705ce4
+PersonalisationString.7 = cac3bc518f9aa4f3f6d0e4bb65e5f2b7b36bba1bc433a59a68d8a9688a3cf252
+EntropyPredictionResistanceA.7 = e83ec809a38a104998d50b4a5d06a52bde87393421e357d7f11a8c63079a0f2d
+EntropyPredictionResistanceB.7 = a17bd9be94b25a57eda3a244f780f992ef9b2bad961bad4a7a3605cc665964f7
+Output.7 = 6f996cfd0ce7eeac7dc7973e3db44a56c2cd01a59e039a1ef36dc6655be24bc66c9cff98cd8c438dc0338bb2bfd6fda2071a8fa28fd01a8a6f8631caac37cd8d
+Entropy.8 = ee2622c77ab4dd0237f0be1aaa50ab127881df0922cbe8ca7d008a6458ec9bbe
+PersonalisationString.8 = 274fb2214689b95169b3893ff14f0e30df94e12d40ea0142618f28fdbeecc49d
+EntropyPredictionResistanceA.8 = 39b7b20d0a1d82422d2b3b79716a344df49debdefdc4b75679c26d0038454394
+EntropyPredictionResistanceB.8 = ec0d2399dd185d2a07556af3d50ccfaa1a25ab09f986954202ea003ee4968674
+Output.8 = 1c8d9d7ea39089352af05d8ef9f3a7eb18f926e566f862d08b2e11a8f6e8c727034a7ca5d6e3a8d2982d36a25ff9319792b8f3ba343eb6965e93cfa0dfcc5aaa
+Entropy.9 = 3d166867face52e55382772cb33b950b4d3447497480a41fda4356aee71075ad
+PersonalisationString.9 = 4b7360826510272a3fbf224be43eb0cd8e294e6f8bfba4f671ff7c94ae5aa2f4
+EntropyPredictionResistanceA.9 = f91a042406e863fcb9e807fd941ce11779dfb3eae44c821baa8feff934bfea3e
+EntropyPredictionResistanceB.9 = a1265c9d1c26edb1b4156bd736fb246f0ec6a2524517fb4de96ae5eb22093c6c
+Output.9 = e274733cf5e083a6f9d556667c888c80133e0f8851d2a1330876ead31e65eff7f863d358b2f4a4f851d34972f05daaae2bdb2a9b05c7fae5bc6849ad98903a9d
+Entropy.10 = a6fe478c358a2672110270db94a1f13585e9da5dc8e378a5b6dbb5001a0b8854
+PersonalisationString.10 = 8be5080dda600e3dfe16720d3faddb449b196c586e655cf74c8b4a2ad2330cb4
+EntropyPredictionResistanceA.10 = 4594ea12211d85553f9767122143f52bccba5e9b6094bdaba33c34f6ccfd3f36
+EntropyPredictionResistanceB.10 = e27d8acb006aabf9378dfa0194f09c8e1a12776cd8ab182ad06edff1d774ebc6
+Output.10 = 08558cf7adfa8ae2bb3fff5cd89ac74487f78be377ac3cfdbb37c7f0e181260f2044cbbb31401e889c9c67a16ced386e07fd92bb133d76d5cc658fd830c30cba
+Entropy.11 = 7290fb42bef4dcf3923c9d43d69b03aa453c95fa5ec07f7683905491d2eb5490
+PersonalisationString.11 = 48a4176b8056358181ca4dc9089f782417bd175b3c039e278a0fdeb56e8e9cd3
+EntropyPredictionResistanceA.11 = e21095b268c58cd935474a4f569a3fc81959af04aa196105343a56431983ae22
+EntropyPredictionResistanceB.11 = df305186a9e593cae4c4abbef839487d0e04641f4bce3d1c601b7740d8ddcd94
+Output.11 = 703f5fc5aa1d4fc64224fbedf364f01ff44af87b457aa282028410174d4b9c86ec9c2a03bc364a6beefa5ab043f5713fadb7ae3803c82ca42894ace73ccd41ed
+Entropy.12 = c47e730de17f4c47acd168e0ebb5ac3062f78f6f80b627e582faa8190d78cddf
+PersonalisationString.12 = 917c66ee6ba1a2bd1e944a9dbff7fe47d6f04821e3ca5afae3476be870a4ba52
+EntropyPredictionResistanceA.12 = 2cea0ef63e617543ed623618aa01764cc01d5d10b5508b785d2d878890076c64
+EntropyPredictionResistanceB.12 = 9cc80d3e71420ccd92d97c25092d370c81b451653efa2d10b605e13d650bcfa1
+Output.12 = 4f2570364d1ae71d29c005bdea9df28cec9ae31c2d296aecd0420ec2d72f724e5c2e9cf7b5faa46da4589fb603fed6361baef22f584846b1be79310c6245143c
+Entropy.13 = 97a2cc8d945ca524db7f774a4daa4accc0ebd3eb79a65fb96498e7e903b357d9
+PersonalisationString.13 = 8c5819b2cf2aaf5b23f47f029db818ba7cfdb50638d1c9783af330fe185ef960
+EntropyPredictionResistanceA.13 = 53bb7cf0b452f7eadda97c2023147b3d802ead784f7663282aa40c11a565e691
+EntropyPredictionResistanceB.13 = 725e523baab3eb5ee432d13ab59ec5364ee179ce7443bf3a29454c919b8dfe0c
+Output.13 = 94c351d1fe283ec7ba67c4ca860175dd24ed1f8af1cab0f123595083d315287e12e8a45e3a3c0f904dcbf3abbb9bc968ad03e794be19bb5005b9d6b9becc18d8
+Entropy.14 = a9ba5981808f342582e2b73bfcd07f12462079bbf2dd6f83f625ebd62fa90c3d
+PersonalisationString.14 = f11daf3a0089709082a489ac740fe059d568e03a82bbcc2b70c8abac56842439
+EntropyPredictionResistanceA.14 = 3695bd2e5b30b1d3957dd0a116bddba53a24dbe647dea63b9d4020745afb90e4
+EntropyPredictionResistanceB.14 = 4079d6610bbc715e62777ab699e3ac6b6c4d097aad4debf668a54d15744d9ec1
+Output.14 = d0aaa51fb084825f8bf0476c703f1133829a93dee1f8061222f3502ff1bdfd550edfdc275f3aec8a8fc5f9e5f71246362fdbcc65a00e7cc52ff353cfa3b3759a
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 0bfde8b32c0adabd84e271d19b76cb9695e1f89a0813e63e7d9e6a0dd1691c55
+PersonalisationString.0 = f345ffd4138ea0b41e1b87a678e24ad87c14fade68e703b359caaf2e269e7c58
+AdditionalInputA.0 = 68388f4c45c349f076c31ebb972c31d25895dfadf3a8d8c336afacf3e3108caf
+EntropyPredictionResistanceA.0 = 2a046cb477afd54271b0f5d6924c706c4043702a5657e99b884bbcd7ec6aa267
+AdditionalInputB.0 = c8a95bcab76358608db1f66ea8b4537f3dd870e38df41bcfdf41d73eb5901c93
+EntropyPredictionResistanceB.0 = d142dfb39b02511f933120a88c2fabb88e824a916c826b20f444c62e9d9af0b9
+Output.0 = eda204a7c51b29a79ca1a7148dae6445b4c7d830410de131c5c4a28e85c74a15c768167dac0bba1cacc3dffdb25312f9186fdfc9a6e570081f41c997ab829524
+Entropy.1 = 3ac67c4f1926bfe80e8ad2931b6e6f203589316b7ca152dd00fbd0681f231f58
+PersonalisationString.1 = 6eedd4b2a1e41bfc470c790685f976d287a880f15f1ab893d87540d56772bdca
+AdditionalInputA.1 = ffff55b71b1ca8ad44b7d5011c1e685c88179783df0c555172f20189acdcb234
+EntropyPredictionResistanceA.1 = 8992b1092dc4e3db41f6ddabb1eb86d42c90c1ea9673646c6d69a8dc0cd9284f
+AdditionalInputB.1 = 7635a57b4f40add8fed1032e761a962c9fe2c6a9f01023884f502a0494c60f18
+EntropyPredictionResistanceB.1 = 9904cf4e3d810a2bec3a3009735e89a45a259eb372aa3da3ff0d53e2478b228b
+Output.1 = 8eeb30b024559e6c9cc3a6247f7d1184c11a5e6811a2dccebd6c3bedcceb8cb4eda156eaac309201a162ca2311b13c7fc05f0652b08507c2ce57c4bd819b4a2f
+Entropy.2 = 0e19a3e98ec9ccb8da195b61f41842c95c14e693749e55f5fc0e55ff63f74e68
+PersonalisationString.2 = 270883545ab41cf426f9a96752172a71abfc797552b3edd463bbb7231833552d
+AdditionalInputA.2 = 1078f54e5b60fd70b48b1b70d1d0b4d17549c3e6b0becfac8a7a4517b4d2f684
+EntropyPredictionResistanceA.2 = 82b68c3fd2e8750c2bfd834dd37b6a471c30f6581a93d762184f617825b2dd83
+AdditionalInputB.2 = 52dce3796b792a58878b370e789e3cdd13c39ee9361e0d0d8fe3bb33822e60c4
+EntropyPredictionResistanceB.2 = 47cd9dc710f07bb6f5eab81dad0e28a6ccaa8b745aca2249d49f3b4ae34f2375
+Output.2 = 99270ab2f44d0cc1e6c1888ad5bc638b28432559087ada30f63b37242c848c8fe048bf275bc546bee8283dd66b6faa3060e43423152021c7c36a8932528f5557
+Entropy.3 = cc03947619ebda1a32ff0da1ab50322d914a8c928f22171c5f5794f047c1b57c
+PersonalisationString.3 = 9b58fd044d90993a74c21b3dd39e478a671ed36ea7657124135859c271ad61d3
+AdditionalInputA.3 = 558e7e980536abcedb6c1654a965b3d078c26efdab1d1c6d8a5824303e8980e3
+EntropyPredictionResistanceA.3 = 3abdb22160ef499bccbd18163084fe44520682c21072d2b5a6aff25a282aadab
+AdditionalInputB.3 = c8599133dc1d2fb1e7b786c66c99365e49eb46615bdd4fdadbe5849af6ae1ae9
+EntropyPredictionResistanceB.3 = 8554af8eb31798fe3dc155a19f61dd68565e068daaef08f2546f4aeb461bf2b4
+Output.3 = 9d49501dd807ba3a98d5073ceb2ff14a5aa5d095b5ae0db50f74cf97e089cb1e4cb6eb594ec860ed764567a2eef70a38d3d243ab471ae973e293af10d602354f
+Entropy.4 = 8980744dac51876f032011c959b130fd633a230e5a5be1bb61467063a6c3edf2
+PersonalisationString.4 = 55742e9d45daafb4ee2d447e3c63e51e6f15b08f457843757117b68d4dc8b945
+AdditionalInputA.4 = a27adc9a12e0a03a5001e0184a63866895e3cd62b72852c3c1bb0918fbaff768
+EntropyPredictionResistanceA.4 = 2c11c236690bdeec275b8fec245978caf87ce36fe9b5b89c2c0c2d14db799b5d
+AdditionalInputB.4 = f38a3b202302e2a5f96e44c20ab91486e507a23ab5d7bc683ec64e4974c2424a
+EntropyPredictionResistanceB.4 = 4245a850fbfadb2e367142ae7df0b472c508b47e69423a83272d7eda6d721e1c
+Output.4 = 5c9329e786e0db03cb33b2d6c40f7bb0e2143030224e3f18e5eb43bbf73f8addaa140a32f40448d6d80d65828d9205e839ef460f74f0423e4c7b5e0c498cd1a8
+Entropy.5 = 610943e4b29745c87f045a45d3824308de7c452ffe27f07751e73191f275d72b
+PersonalisationString.5 = f404798a263e6cb7a4926b13f79eca7e300397ceb8b60922644a8a29d9962179
+AdditionalInputA.5 = 125507e6afab4b1c37ae637e7deb4a5350f8b23ffb786f2c53c8c398a22e8a14
+EntropyPredictionResistanceA.5 = 77c5bf631060f6e6e138bfcbf9343c428a910aea968a3c1d7ee1b04057828975
+AdditionalInputB.5 = 9746d7cd3f03a0b60cc3cd91560e05fc808ecb517ce57fdc196136ee5edcbee6
+EntropyPredictionResistanceB.5 = 2da9a87dedc5c120aa178dbe46a256121eae552468fecffe85733d4034b438d3
+Output.5 = be8eb3e4c980c2be06f8224bab24d6e6e5e373c7e2d8042476438f2507a0051d4da26970020a8e04d16b9373a2ceb46fda2d3e0aa0ed0eea2203c956276f36c7
+Entropy.6 = eebd8f787b465e82d645ee251ef49ab2432a8b918f4b7b98ac6cd9fb91331310
+PersonalisationString.6 = faeb92fc4ae073a7048d31cea517da5e3508001d37bbb6258bb78f6911326701
+AdditionalInputA.6 = d76b086fe59e22643413473460fea2ed4710bf18d4e18acbf516a03c90b41294
+EntropyPredictionResistanceA.6 = 58c40d6e41a178ad01a0d1f39d57e1cc851533b0c8b3bcd5813079287f9856e2
+AdditionalInputB.6 = 295d0d828b6e6effde05ab3bc9ce584e4e45cf9ba5025f390b709e3712434c1c
+EntropyPredictionResistanceB.6 = 4069c9097c3009c6dc7a040c59491ae083cb263b063d2676ab43bd039a78d3fb
+Output.6 = 26087547ae8a9791892eccddb646775c6de55fb1748fb5737f564a26eb6bca58dc80f8b8f42cdf918c35ae0f9aed508afa016c49dfd410860b7024c51eaeff83
+Entropy.7 = db921a905c58c845333a52f08caea97d47190e91902532f36ddc87938930d8cb
+PersonalisationString.7 = c63256f1c8f9aaa75356e9c7102ec960f07545a1b98025943b7883d04ad636c8
+AdditionalInputA.7 = 44bca1be19c6a5211fc9e0a19ea429beef235d24f5f513fccdbd8d76f1d6bc31
+EntropyPredictionResistanceA.7 = 4be83ab9f7cd8e06cb76c52580e23ceba70e99a8d98cdb006bede22dc80dfeb4
+AdditionalInputB.7 = 7e0378d475191a405f0f6f411d8e5ba8a8c75679dc918a390390ddd58478d6f0
+EntropyPredictionResistanceB.7 = 02a482fe9c1edd21cb1ef24ccba26508a21a0a15dc53d104352c9d3866984e4e
+Output.7 = 7df6cf442ee42ac3469807d01eb95004dacdaad20d26bd660fb7fb2b45c470f0e1c740e157b72f69aac6058f391f1aed378a5396356aea080e42098cba24b82f
+Entropy.8 = 567d90544230c7df900054dcfd6543a8f10bc35f4d71cb9b5739c928c64fe364
+PersonalisationString.8 = aa9afe7228348faa3e8175be71ecf31adf32b5860fdf4f68c9a03005ea1308a6
+AdditionalInputA.8 = 30866b52c589092d64d42e9903325bd622741ba211049473b008e015a4034846
+EntropyPredictionResistanceA.8 = 620d7f08e90365d7b218bbf950fd330cb312919fbcb719a507321c903b11e001
+AdditionalInputB.8 = a5c950c0bb9c3e4a189def6fa0faf2d210e0ea5b2719ac50e6298653534c8ae1
+EntropyPredictionResistanceB.8 = 1b09914dd7136be0922900b555980103dc24a286d1e4a51858a5af49031719db
+Output.8 = dfcbf4f98ece17c789cc7136c6cd3d62e5cdee1ab71c0f68f4a63d623b28d4f0f019606c5f42ac19eb21e8eac587b135496ae34d0d55898ece9cfa6c93a4d1dc
+Entropy.9 = c88ddcbd3a90e7690b344d473f7450f9c2d67fb1cd162d0d9a0beba5dd6429cf
+PersonalisationString.9 = 5aa96783856e229ce715637c7c9de402cb2978f842cbe30500147c9540470792
+AdditionalInputA.9 = 057b196c2c86b71e41ee58895a740d619722395d16be1323869272f6f107692f
+EntropyPredictionResistanceA.9 = 238102d759e017f8abf37358384ad49cbaab74ef3885c0c007fbce23348836cf
+AdditionalInputB.9 = c85af17f50264fb2dae70a3e52ffcdb0f3f85d13bf0472149136f15171c09dca
+EntropyPredictionResistanceB.9 = e9b81b2a767726a671ecc7f3a2a6867aff7b966064b31664273c02e8604915a0
+Output.9 = 14761b40c787425e2edf316d4b2da5aa7bf90ec87f1e12404ff1e86909342ea54e647e529ce3e47a876907dc9ab7df2985d5d0fbb541a24abb603c1bda90a98e
+Entropy.10 = 7d45c57c977442bfd940c1145b156bf93ab4a48a49509d08c19a97b12333f195
+PersonalisationString.10 = 0f85885f09e033d927295f17e338fd23a7f2712986227416faa0f447f566c87d
+AdditionalInputA.10 = ecef280b94fb1eca947941534fe6d9ee1d7ce8921ad5cf76c72a80b5d571686b
+EntropyPredictionResistanceA.10 = 4856945fb087f0a876a2cfc266461863ad5611a260aaa619145883f5f1882f4b
+AdditionalInputB.10 = 9640c1ef766c6ddf7e283766cceb0219b44cd4061f2c215c38a2bdecda74e768
+EntropyPredictionResistanceB.10 = 022001c425bb74653dcc968f79b6d142473ffc45294ccd08821925fe0e7b59f3
+Output.10 = 9747678c0bfce824484481483fbfb36e52b42bb61c7b9e81b8646cb961a5e23373cd1b381173e898f5985d6b8807e854afb7f9908b86b59f10ab7e5f40d995bf
+Entropy.11 = faceb477255e51951adfd7ed0eb99e391dc77785ea7c03a150047ff736382e86
+PersonalisationString.11 = eed0f3a4c9b7f12e46dfa775ecf848d963a1af097fa79c9d31d346d70bcecc44
+AdditionalInputA.11 = ab5891d66a2841d2df0fb66ea793f25069b3d3af08a5e07646bd4b1c53e41cc6
+EntropyPredictionResistanceA.11 = 233d42aa4a3a00b11b53bcab65749b8fc4b5dd7e6320732ec53654c3a8974fed
+AdditionalInputB.11 = 332fa3940adb217e5e66b1e7dcb0e15f06559373aed4b75bf6bb5b78d017ba6f
+EntropyPredictionResistanceB.11 = dac6cb6b3c8711f6253d0fdd20ddc740f860287a9f5fca78e362b583a7753f38
+Output.11 = 77b2e6d19eee7e2456e36014c4e9d23771cdaf6d173de5e7fd5eb5c2507856d27c454e823b9842dad157816e03e22f8728cee6b0fd2ef14fd4249e836f32ffa9
+Entropy.12 = be34f76ff2579aeea3a8e334424cf6fd212a356e60519ebe03e58ea0702052a3
+PersonalisationString.12 = 67dabd1f3a54383631f7aafabe446025aef8de21c9f200f15423bbd9b3bbcf02
+AdditionalInputA.12 = ff4eb8c00dec61f3e3fd1b26083190455f893121fb9785532fa33c1fe374bbb1
+EntropyPredictionResistanceA.12 = 49cd2b74eeea27523ae613e1bf000339fcbea5d912333d83cf416cb0cff74a5d
+AdditionalInputB.12 = a0f18ddd517865d2630321a41084d79dbd20255dba5b8691632e85deb3e0c072
+EntropyPredictionResistanceB.12 = 26d65b73fee9e6b26e3fba4ec5bfc08fa077f9c475ff68c6707f4876c821bc9e
+Output.12 = 49cdcec1d65b0e03ac4d19216ea45ac31f76bac7d630e1018e7a5b9d81ff20ac159110a1f93d3682052a0793e1923e59e503defbbed3118682d757d02227c4bc
+Entropy.13 = 81c47b1afb876f71159b3c7da5879099e36f72cd390b5f916831fb7d9a33cc8b
+PersonalisationString.13 = 05a24c4eef872ecc5909e464e0b9fd6b171a769b5c76a027114a0d11b302c3a8
+AdditionalInputA.13 = a66fa6277d8396d498ac82518aae10e67d961e679e5a89efd818f0811f4a28e6
+EntropyPredictionResistanceA.13 = b68332d2e1600022f33e3ddb8b7a5846bbde26b0eb12c63b394dd4dfc1ef187a
+AdditionalInputB.13 = adacffc945a621e6185d81c28ee0c4f71f5ecfb1122b43321c7778259375cc9f
+EntropyPredictionResistanceB.13 = c39204b1f056234d37e49dfe406318cf4177cce6d172c3f82add7f8a2f9bd355
+Output.13 = 44c52b3bde4f0ead733d15490d6fd9e2e9f71052563a62b5a13f871039c7a64691636b7c0b4aa9e8a527c71516ce9d9c9692d43e845d384daa172ff541e7996b
+Entropy.14 = 085daac12b2401e3ff884f03bff70763c38eae65bd24b5733c6bfd545011c69e
+PersonalisationString.14 = 6a9f2e3142a2808232c3fed7efd33436a5a4d9ef14815638c65d012e11470cc8
+AdditionalInputA.14 = 6d18d7d0ed6798bb4fd7fab8d2ab6d2d72997710700661913d05fcbc5d6d8652
+EntropyPredictionResistanceA.14 = db22d9a3f53fc739d30255a6617c986254153c519c34e79d2a6e8762a06909b0
+AdditionalInputB.14 = b44a499fdf9330170ebede64cf8fb19f4a8317596d80d8f9c9d100932298e4ae
+EntropyPredictionResistanceB.14 = a4341ae5155601af7ccfd9bc573968f99ff82ae2605a462af7e6ed6fd5f2cab6
+Output.14 = de6541dae09137dfe17fa3bc785c8f45d3d36cb621d76c53f9031b2853ee0657a1edba0f6f06dade6a5a62faec54cf69bbf15db2244909114b0486f75da3cf16
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = eddb79f0fb5a5dd6b5e46112a7d705270ceecefdcc2e8db2721c42f3e6358683610d40d0f67092cc
+EntropyPredictionResistanceA.0 = 7e963554e90e20a6d851ba8678552d3cc4e8ad738dba17fde8b3c51f65f2c05b6b3825d8c4fa8e9c
+EntropyPredictionResistanceB.0 = 42ca453ebdc7e392156718a856d4fdedf324aab01156431e49edcb44d916906d789fc2e0d8d52797
+Output.0 = e198bfc6cc3a026a143d3560b70b69832a4d0864ac2b97134bb64876de80b085f05483e82ad4b50defd37f77be7e1a0310b71ff7df6e7fe0c22dc5a77806e094
+Entropy.1 = dea14322c5348fd2387347776c4745ecf09779c15b04b62c0d19058dfc5dc6db7bb71dd3422f0d5b
+EntropyPredictionResistanceA.1 = cb2ff6c5be2426485ea9632dad6f785cf0b36920568dae6d6aaf82791b7c5267c44e3359e4bd7f08
+EntropyPredictionResistanceB.1 = 0a1c36ed96a812cedfb79b1c8eeccebf36d00bb8be76dbfe0331160022eb65eed25e78bfbbd4fec1
+Output.1 = 04096e53c4459e7f7c0dfbe35e8d6c68903d6498ee778722b776156eae085860f7f0f42a46dd4a8113f728bcfd993516e4bbe132ff4aa57a7c540051e4b3300e
+Entropy.2 = 16ad0db982a35d87909afb21dcb2a349f69d7258fa49b476c7027580ddb298fe37c62dce21c62843
+EntropyPredictionResistanceA.2 = 0a7802809a173c3205940a021c32336589dd55d17352e8e21486d5f72773b569cd3f3a66db32b368
+EntropyPredictionResistanceB.2 = 5e2adf428ea10b472d04fde28453581779e003e61bac070496905856cda1f5f9d4cf88d25e7e7d50
+Output.2 = 6cc724cbb7e2fc49cfaa3143806d3dda2f82d4f764677f8ef1947f32ccfcb0c55048bb2403ead6f4860b65c89f30bff80fa564c2d121f9821148a372a4d9d19c
+Entropy.3 = 2987f98a5e4f7e5b13d1339a284a035b214b9415ce1c3338f2cc567d432a88bdeba25fc5f1053b80
+EntropyPredictionResistanceA.3 = 7dbf581ff954cbbe20ac9177e937f836782c89731702e86095aeccd3e43f4d97673162a2ba98eb19
+EntropyPredictionResistanceB.3 = 8ed723e90ec1fa99cd18e1b818927542d576d8facc3f83f4edc6f7da639617aee7d4e0f796eeaf54
+Output.3 = 0210b4cf9f630d7f16f547a1fe6cadcf36a7197326d0822a2a1ac602ca4e9b98abce55f0d4de7a8afffd07046dbb1032f332e6438ca25771ee2aab40365b86ef
+Entropy.4 = 54bb6a893050fd80cd9c27ccc79962b4541c8e8f7fde377b828cac75f366949f2bdb5c22fa1c70ff
+EntropyPredictionResistanceA.4 = 26059857b863d95376c632a7500eb9fc34c533523904eea42da2e5ebfd5bacb672e956f47b2e156c
+EntropyPredictionResistanceB.4 = 1182ffde1a81068aba30ae1f37c58966e7f0e5f1da4feb2c8db6f8432d89604e304c6667bd7abcf7
+Output.4 = 24107f45cceb4ccc632dd5c03257f97b5e53d840af88b78d980f88fc99e7fefd92ea233c67dfa7932150d76fddb8b0c97a2c7ccc134bda815c0f99d0682d6c0e
+Entropy.5 = cc25880b503cfa9c156473dec1b754d621dd43498b38ca436fef6e74e0c4921bb7887d91e5ba7e4b
+EntropyPredictionResistanceA.5 = 7c19e9a1bf951fd9716e23afcedc5e4dcab9a33acca406020c99fe1aa24d7fc845a55335841d0321
+EntropyPredictionResistanceB.5 = 834b7b64b13f53e1582c837c9a1f505a3411536d35451fa97d03b98f8b1f9149c061a1e1933a7974
+Output.5 = d53ee33d9e3df78d0f61e6539894a79cd406acd52fb67dffb10bf46f123ed1dbe073f19601eb972f6f4a7d251d0c50900137fbc8f8b823e4970f08e512268c84
+Entropy.6 = c83bc47201e5c7dd13c2979c1a079e3fae7e1885bc1bcc8710c7aae170362893ad73f6068dbc22a8
+EntropyPredictionResistanceA.6 = f6e4a4c0fe629b0a1453606093b3cef8f1567f0398cc7647d51c6cd9694012428a3c01d18cd07555
+EntropyPredictionResistanceB.6 = f5131dad5ee947a90ea1cc851b30d6d254932b9dc0301a3bf5c60839376f4269933ed6d2aa48972c
+Output.6 = 69d2653eb97523b2e7af10bf28af32d256f75e219813997ab2feffdbd467d6bbf6d0d26dd58a327bd752a8397bd11401afe1d8489995303c6faeac8e25e56b34
+Entropy.7 = 2ae806f7076d24dc263219cbe1c11a307c4a8027b939e4dffa37d5fe2154cadbb92a120f92e788b0
+EntropyPredictionResistanceA.7 = 5eb7a56b17567ac6ab8ea39bff4e33d7544f293057edf6c0bc810570680e0cc4d6ab14f01894e4b4
+EntropyPredictionResistanceB.7 = 21b06d622e4169bc9c649198052848ffc5552a88b82ab1265a7498f16104679f8f43edb15467f27e
+Output.7 = a60eff4425cd4e120e9eef687b86f0ca9232f7fb9d31626e2c3c846a1f769aaf397a42701098dc17c556fa6fd2b39c673e0c54f15b31fdb01d03200dd14a0474
+Entropy.8 = d05aaa552441dec4e4bf4ba4497a7d6ba73a2036cc9e09e3ef90e6379b915d3b0501cb38399d5f67
+EntropyPredictionResistanceA.8 = 619236c2aaa00af0924fa562ce08ac9be43105b87a16d11851cbacce304794f5a0084fbd6b855aaa
+EntropyPredictionResistanceB.8 = bf4b47d99b8ab31dfd8873831d7d28ac03b15bf6ec508d9db4f3961bbdbe49406b1362f63c555306
+Output.8 = 5265e99cda2e449cfe60fce077a156adad31602b73fbfc9a9420e63c0fd2580e1e4f5c0c4b8f4faa8c329967c4e9761d3282530ae8358109a9d765f913aa52d9
+Entropy.9 = 5216ad9bb91ba58a0b4aae3079905bd0c5b0698922ec13e49ccb20cc9b478bad87bdb58d2adb7ad8
+EntropyPredictionResistanceA.9 = 13f9675df735db656698103e8ac4c72205cadf9bf505fec6fc2fc3e3f3abb9d0a06c18359dae9315
+EntropyPredictionResistanceB.9 = fd4a06e114934a12eb3f71e8d06e81b5a2dcbff58c7976670ef5ad28b78c5053be813c68f727b956
+Output.9 = 8c5f52120dd033b76ac1283a24e67c2426e6e67fd6c145791b0a264035c6e576fe872cab171de7ae72552ab3ef457dc568ef16aca07b9170a421ef9f4f4160dc
+Entropy.10 = b836e7a80dd7131a4401cdd1a6ae1b2915dce194df81aafcefe50333a4bac881fcf30d71a024be38
+EntropyPredictionResistanceA.10 = c2e75117a2203ce345615963132edff18c174e6d9e036ec270134e5e4103de86703b5d81cb1aea88
+EntropyPredictionResistanceB.10 = e0e24201c13725aa76dd1ec4d0cdcc309b0c46b80d5bfa858fd4e901d6401a58105fbe43eab78a34
+Output.10 = 8ac952c9388d913023a5de9776d1b092c540544b51f58452e47396ac3ad38ed7dd7b6af8a36d01a21bd329f9ff855ed15fb27f46f998ba97ce644f7999ee3a6f
+Entropy.11 = 4061c4ff845173ab24ecea68e168e6911d3646fe77863956c4f0ffbd2c463a3325e2f26201ff53f2
+EntropyPredictionResistanceA.11 = 13e1c03d5cd489a5d95a451b3188d6af9bae5562fb864598b7b93315a158a7690800810d1cd8052d
+EntropyPredictionResistanceB.11 = ff6e2eced8fc93dbc03f767bb223fd3156b11af189bac122bc7cff4e3f6223e80bd58aea90720c99
+Output.11 = ff345ff5eb2946462f2f16934048d128c72106d493bed08caa92f7f2b7628e7aeb99dc16e4ebc850c7361de75bdb633f3acecf1fa5335bf06e8c7e5c614f4404
+Entropy.12 = 8fbec784b4c0a47c485c130c8ba46573074d360361e3051c226a3ee3e67bab3900257cbaec376a6f
+EntropyPredictionResistanceA.12 = 622ccbb129afcfca01c363e4a7452f10fd044edc6e6d47ed718d1e3eba486ca6ef0953960365bbd4
+EntropyPredictionResistanceB.12 = ef63d2bbc50a60456003aaa3b5ca725e9b0ba11fbf37db06d8c66f2a88d91e3bb21809e0fc034806
+Output.12 = 1428646259391ec1fb5ee0df140f566d693ba2d17be28c15b54f562bcf6ccf796e5592db9656d189e28c02092c40c1409f7f6d7a6e6add4ca79833e7dd037924
+Entropy.13 = 46169cd3e2aff2708f52708a3043be496d354054143f809bcd480fda82ffccb890fc9f46f695c010
+EntropyPredictionResistanceA.13 = ce2333685a03845e097f4878c2efd5d4cff102d0895b647651e8bf301e5be5e8ce6ca059d64907cb
+EntropyPredictionResistanceB.13 = c10d13c1b1e10900448b54d5164aaeedaa1ecc12735c5110f4319e2c71b5cca6ee39d702c14dae05
+Output.13 = 9a2615b3802a5c61e3e85316066800d5213473ef522748fb92032e18ab590487049b2a72cf4e5f2b53d4f28f4b80d0cf755e5498fb0fdaaf5743a2b3bd408897
+Entropy.14 = fb66c57ed5849fa113d9fdf050cc17cd2664b03594cd6ffdd89d0086be1c10475a3c662a56bf3124
+EntropyPredictionResistanceA.14 = ddcd35394681d6f0170aa6bd8932b602745f41117eecb8ea752d85ff4ef58449e62bb0b1b1883e93
+EntropyPredictionResistanceB.14 = 09a5d5925616379b5221b347659afa11da4326b630b57f3b78db9812e667ed3fbad25fcce6307486
+Output.14 = e04e5432f671015350f0cc912f5e83e969e00584c6178cc82394cf85ce3dee6ca87b6cb02e27a21e03f83c24c761f521830645fefd4474c634e1124a4d93da30
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 4be5afd0d9853bb3199bffb651211e4020afe4c27dd97349be9d21e260c2c4cb74014c4f9684ecab
+AdditionalInputA.0 = 22305e83b7c362f93abeae0044459b2ba9bc108526555881dc9a9e7f74afbaade44996ad0478b015
+EntropyPredictionResistanceA.0 = 26af31f45eed020ca9146d15d72e5e5d811a4cfe0933c5ebf2b1d1d912cd4d3374e78b24f6c7d9fd
+AdditionalInputB.0 = 587196fa6d13a85006e258cfef4bce56e916c652125fb79ffc8af34e0f2b7c357c1d61fda6f5e3fa
+EntropyPredictionResistanceB.0 = bb39f25481e8de9ffd540283ac67479aae1d9cf614315db7d8ec64afa9a841ca938c92896d8e8424
+Output.0 = a4b1add24bd78366d77125ec100bb3c40dd1ae1a0ee8e026541462243e5d2db2f1a47affbdd364360359dbb5e6eeb525d73a43a47531c04c03325352c6f25084
+Entropy.1 = 2fe711891ce5a91fa86a339af86c81c1b1f273d1e3b110b92b60e7c6dda1268831b6d44b733f1b24
+AdditionalInputA.1 = 8c4deb80be4e0368119b1e1b65e7d5a932402e3df8ba072e6f6876d0a57b13d98f563e26bd906beb
+EntropyPredictionResistanceA.1 = 22071ba319fe0ee8481ea6581787d83884b8896d30adee0fa1de4d8c1efae490ebe2b6d6c3ce4238
+AdditionalInputB.1 = 9484e4303a48814b1d44d4ff50c22ee1ba1594a5f7d07b9fc7bbeabae0a131e2a4781863ce12c75e
+EntropyPredictionResistanceB.1 = 89a2ce7c80b39b6ac461b9c73fc63a039225a2cd16c81a25dd6d692811f87ce64fe92311febba876
+Output.1 = 96b28f0677f26bcc653df2bc660d69ca335d2c8f4e8d151da35966d1aef294a5c342ec68dbc329642f8098f3880940a5834ca6440c77561553afc5c15ad2cd1a
+Entropy.2 = 6758f1b9609512f8d2b0c3473e74667e1f156f56e2e44c3576db0fe0aad564b80d447b27d23d6645
+AdditionalInputA.2 = 96cabf90dcdcffa4170e913e329801f836b4ad118a5656fa70d6f4b40216ec91c515ba5583863fb2
+EntropyPredictionResistanceA.2 = 1e7e986570350b0e34e7704ea32be0f9db9e17f11b60832045c178270753487ee3cbb2046cea3994
+AdditionalInputB.2 = 1b7389ef8b2197086668218ec423251f0cbb0a5c0e88784bb505408701b9d5ceae82baa7cf6a77b0
+EntropyPredictionResistanceB.2 = af9d4bda671f2950b10f83d9b9d68852c42a09ec3190851c8ee5de1ba8224980be20c50bcffea510
+Output.2 = 9c835d99648c5def0f5ed9d3bc32ae6c484cd308a17fac1b1237617a172f4b6840213f8d794e9f3df054329128bf8b8f7b96b22246b5d801360b38470ef26daf
+Entropy.3 = 081328503987faa5297ab5a4a8865c73c28f20ed0094dde1af9ab86267f7f53839afe73169ab5801
+AdditionalInputA.3 = 12bad71a1b0b47542f1959e18c07aca01289c02a1d45d6f9e4a43b26aa2e292c520794488d419d94
+EntropyPredictionResistanceA.3 = a0226dc30571cdfb95a1599ec92985a0c5d80b8eb4447c34cc8dc58280f87877c65077f36802ff6d
+AdditionalInputB.3 = 64b6bb02ffb60c4f57017f1e8410d87bf2426657ce4aafa5858dc3c87b7a27ad86988e0adc11cc25
+EntropyPredictionResistanceB.3 = 1135c43259efc575f6ad0fe20cb401c2c0ac13dc9978a60f328fbb0c3e7571f3606be0179c80b80b
+Output.3 = c80e87b920d5e8eb3845bfd913ea9cb961ffcead1d7639e9477a876fa748bf30084c336d85626d0c01a1d1171a56d052422fbb81ac3f1fe9969131c4b9eb7e8d
+Entropy.4 = 80d40dd9e2e0029c6d064cd8f02be29f66424dda63b1b369fe32d701263ce506ba142dbb4da15795
+AdditionalInputA.4 = ed8280ace37d5d0e1e05dc0124189dedf8e0a4fed58a517c984f3c33d97e51396ea19a2ea5beca86
+EntropyPredictionResistanceA.4 = 5fc1a8bfe26b9f9c8aebc66cc56d15115000ff3410fd1a2b9cffe46b80a636fb9e4bd43fa6eaf9cd
+AdditionalInputB.4 = 766bc72718a49b930fca71ec14655e56a5de0b9bac866000db5134d28fd23b02bd286551c66d788b
+EntropyPredictionResistanceB.4 = e74c26ddfc7cf77796477af242c195417f76f2f75e9fbabbd63070f990d13a7b7f49ed11cce27147
+Output.4 = 21a6edaf2618ad7a23371462136090da6db7a177045a79207a879cadef9a2c0a0cd20f0b9abfff0509701c71f749153721808d44a5941daca313f39edb732ef5
+Entropy.5 = ca9dd7e28b164926a4a46196fceef2d895bb68f420fc07dbff1f5b4d2a79f256cc52fb28e50bbf91
+AdditionalInputA.5 = 891bd5b904e603a75aaf1efdcc3cf3cb3c84b224d98619120d7a3224c958aa818371453e5631a2a9
+EntropyPredictionResistanceA.5 = 28083ba98820410b63d0da42934a0b98e29a8bfd71f070ae40fc81d121131b7a383b164af4ea5c90
+AdditionalInputB.5 = 8e02d8c70e14f7743229f4177e97363bb8b0edf9a01165f9881644b504188a2ba8ddbd68ebc32404
+EntropyPredictionResistanceB.5 = 38de99d2b19de557224a664ad36a4b5abd40608f773f862ccf6d7deeecdd77992bfa37536776109a
+Output.5 = 8791124b307525990a6639590a82ff29a7d8326d4f6b2e522bc1457bec16c3a6d5e538320620b779e79fed88c35513676e6cf600ca5a0bcbb4f97aeeacea1eda
+Entropy.6 = c384b86c82cbafe6f8af7f4319d2653c7bab0e3afed1a33bc22da3ebc2348dceea674ada54d19486
+AdditionalInputA.6 = 7b83d113119ad159f0f77c5530eaad682286fe318311a0575a3d7743394829a74e49155178ece962
+EntropyPredictionResistanceA.6 = bc6c208c8d40e86eaf11b018ad403e1cc74895947fc1e11e79ec3cceab403180eadc4ab91f4811d1
+AdditionalInputB.6 = ac5ef5102241276055989625fc860c42a7705a6f6136d5a1f613d14f7cb45863deaecce34687ca61
+EntropyPredictionResistanceB.6 = b99db542283bd97f63165dea031b1888e08200a90499a84383716afe787bac1e652967d69fe1cdc5
+Output.6 = a9401139a2aa319cecd9ea960fd53d6f86a108e5f128ce774220eed19fdcb76f4f48e6773d9c43100df0d08a49f6dbfcb0e17fab6eea979ec776129dda8a9b90
+Entropy.7 = e96cce83ad1c4aac66fdec4c61eed46d2aab858660ac19b8b0ff7ad30573c9307d3fe99d2f18669b
+AdditionalInputA.7 = 417689e25ee70dc2ad774ec531a2f263c6eecba129496d49c1c63ac9357aeade797f9fc3f54ff310
+EntropyPredictionResistanceA.7 = d753337d3d84d1227e4302eee72b26c83974549b9a154db9ba83eeaf8b9816c8bbd163ed25e86b0a
+AdditionalInputB.7 = b1161eb879dea2f0cd237ece20ae3a8930a220a4d86e484cb33a71fa9c4e78fff970d71cfd318f86
+EntropyPredictionResistanceB.7 = 9874b2d34028a5ad52e662092f930df2cca969fe682b619c2e4a658ae26df2a81fb2c7a1e4f21e3e
+Output.7 = 1ebe046368271ca638eaf0c6dcf584505274834317a5f2683c1fcf1d6708ba36ae91889c5815a47c7274077582f78b2b77d2223d5d5cc184aed71e9350666cb6
+Entropy.8 = 2a399ff6a60ffa7bc8a5656a2a311fea0480ec16bed76b725b0cfd14769ad28b3b0d5ca3d46522a2
+AdditionalInputA.8 = 7adb9fdb05d7164815bc5cfafcb2ee6d86a31ecad18bc537787a896edb9c5df0a583ee9a5ca71c47
+EntropyPredictionResistanceA.8 = 7137acd969f31049a52ba085abb8f8e8996c69b3d3f2bc36b603321fe64ce969c2d21d7eb6f7e56d
+AdditionalInputB.8 = 3dc1365d46a33c8ad7be4d1b9cc205a3c45998b56ef24d86a79995a19dcb22b2bcdabde40175bfd2
+EntropyPredictionResistanceB.8 = a84d1dff3f20dc561b1a6a8f18ffc76c804521bac901f24a067ab0e8f3bf09ae5b93691da176fc70
+Output.8 = 2adb8e9ae8ee9094ec49bf464fad4e23c07a46633ebe17024834c04f9f06ccfe618c36968e68ce0a267b06994fba9e5363bcf7e1b6a62612ddca52ab9d193612
+Entropy.9 = c629f990a83c52c9fba8a1b347696c2ca7d375350d812c5c96105399298c2318b5bdbeca59a88ebc
+AdditionalInputA.9 = 64683d6716945c80d569d8c155db06de52d2486e4801d0a4846fe76d078d841c1d89749ad068e29e
+EntropyPredictionResistanceA.9 = bb85551b9d62eae27005cf4ee2647991fe23664a74eaac5310aa66190c1faeb5e9e7d54441d974f5
+AdditionalInputB.9 = 8ed1a4f8854937097a443940a30c8c2731c1f9bf3d9d15352c59345ea9935e1ea68ba249e2d462fe
+EntropyPredictionResistanceB.9 = 54dce823a331e00d228ca9a74fe35e44450e54a86a2297e8970a512e18cbff9a21ef5637a0ad1cbb
+Output.9 = 822e29f8d7b41fa12611a16a62bbfb78b5441ca34e4e27ddcb7a24232aa7216a69763458fbbaee0a02a64d94ff4d6ba5be6553046824ac8c664d32183d383ce0
+Entropy.10 = 88b41fba132fd5c46f58902196d785e4c6c3c15aa9a3801bd31ba3f74adcc0a37263a48c44dd39e4
+AdditionalInputA.10 = bb40e41d29d578fdc4595ec5ae5bd6ef15fac471f8dc9100674235e6127151f752d58213ddc8c269
+EntropyPredictionResistanceA.10 = e6519f2f66955b41cb2781b9001e2be9581b1eac7aec96def80ab2f8c8f0bd4f288b86f9d0bc9810
+AdditionalInputB.10 = cb5ebde0ea1e019f77eebaeabb48f16f5dd20962219c3ebc2c1a9552b7c312fa1f9d68f9ed61a626
+EntropyPredictionResistanceB.10 = faa91d51722ec7146ea905fd70eac1f88d3c73833f5b91d1e41985ead64dd2a730b23fbfa7ce018b
+Output.10 = 937c6710a22ea3805b6f917957d3a4b136ef6e6a05f67428dc4e0792286ddfe27d5054a405cf61259a65196693f94c2b50c6a915bdfba396ffc572b6fbab8311
+Entropy.11 = 37ea6c5aaf902599b6d4faa4b54b90c01b1f7ab2cf8113caeceaabe698a8efb7174af834acea8a10
+AdditionalInputA.11 = 9099e172c06e340ff8c658430402314cb28934bba8a0938706c429597209972b9619565de07b416a
+EntropyPredictionResistanceA.11 = 4e7f3157525cdd3d200a0cce71999abc48bbbae2d25d78fa750091222fadd6d8d2eaa6ef167cc3cd
+AdditionalInputB.11 = 7b4f4f618098fa5d7c270a950d44bbc249f1e4630d79eb8c2ef164bdaafd982d9c5726d2ca48bde9
+EntropyPredictionResistanceB.11 = a6cddc8967e81957e3adcc209eac24175a52259c42978d03b715303571a5d2ec4ec53d62fbb107df
+Output.11 = 31320a4f8a8b9a2f161b91402e5127481e10343ba7bbd3fdbc6c267340c6f831138a7a673fe525dd0822b689268fe7dbdd3ff0a9f155a08995df3c508127c698
+Entropy.12 = 095b0f0c5b9230a6d280bba9901fd14d1f5b3ba1f108b89bbe64fc383820efe97207d569e82ef4c7
+AdditionalInputA.12 = 4f292613edfe829dcadf7fa8873a82ab655e94946eb8ae10988d602efa24d24002751d4c80bb44da
+EntropyPredictionResistanceA.12 = 5f0bf546db92807d22f7d450ea682095ebf5413e4298cf8632ae89c0820993b80c53b9479e2bb0f0
+AdditionalInputB.12 = 4db6bb887fc6ea673d71f7ae58dda50e4df1a1ee328480a8485b9a9beb8929cc2c3bd82d987b50cc
+EntropyPredictionResistanceB.12 = 53a4127a58d515654222a493f099e54f776719377ef3735d89abc15fe273fb0102ff7e249d865bab
+Output.12 = 7c104342e9d042fd3dafbf436e636a44e07c9eb3cfeb969f759a42d696e0ad71db76595c2b71b4673573e78b9afb7df43464b9463d92ebe81c01129a8e3f152f
+Entropy.13 = 8872d7f3fe19123f0b70fe8ba577d65c6cfeff98ce85dad6909502f84a3af21f66c34646449d5a85
+AdditionalInputA.13 = 8e9dfcc20ed294c1310cc0e52b09aea758e74ee9b6f49ee08d022444f3875ca768e8bc812a2ece28
+EntropyPredictionResistanceA.13 = 82b555849857b0f330fec75d428bb6ffadad97af65645f5480a7a2204637a2e1f3e07a4c31adcb2b
+AdditionalInputB.13 = 8400300bddf17cec7539487ca730bf86f85bd7ca294e63e0fe2a831fc0c52bda8af475a74e51c7bf
+EntropyPredictionResistanceB.13 = 27ba2d56fe7a37f949fbfabf561d292cb99ebd3add8e646685c4f826bf2271ad7eab77c04da4c858
+Output.13 = b653c61b4700f1b842f1410d767d4d4d7d10bf2265fc1d45edef9700735ef73d898aac7f76686f12f61fc70d20a484aaeb6a564b6bb243023ccfe0800cc71373
+Entropy.14 = 4b378d27faec668aa8f4cb60b89f9a2817eefdf59ec6d1706b6dd8ed961d5f1788f98a58298e2187
+AdditionalInputA.14 = 68953c65fac6f0bc5df78bdf6bd2cccd8c6754122d1aa2dd0b4ea7e25c2f3a12e3d527a28808be12
+EntropyPredictionResistanceA.14 = a2b34baf5a6bc8ee7e50b32698ac6bc30132ac8124281c81032d05073a2790ab01c7448e52fe1ff7
+AdditionalInputB.14 = cc7df42c7f93a63b8a8389c66a336519cf27cc6e61a06a67c33077c95498b8fb4e7ad0e234ae9e5f
+EntropyPredictionResistanceB.14 = 1c59550710b2efa9f009e44c0aa724ad3451da29323f60d68d025693510fc01670c282b38bff3249
+Output.14 = de2abced63a11a9c7c034fae31d8fd57239a76a8d8382d9a507e5230c1b0c5bf063a99f00cd4428db196597427900f56ac2ff8d556d3af3d119a590b594c2e90
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 6e7c6d3224b574f9d197037a7770db1f005dfc82d6fd19399d73614bb398fa0e259848ded31f19e4
+PersonalisationString.0 = d0a67c39d4ee83208d40debebf38332b0c09b6683a5070dfd91bdfb0aa7c60af4dc36b18926189c6
+EntropyPredictionResistanceA.0 = b481b84b2ab1c542e5828b3db7067729516bb2eaf6f93f65538102935cd4fd2d3675bab00980a217
+EntropyPredictionResistanceB.0 = 9ad8c9710fbecb0ca91f0c1f07cbea29efa6753a2f39b57c9d10dc13eb2d8c39846712167b13c42e
+Output.0 = ce788ccd16c5c21f91d26556b7fcb0aa644a0d2692ab3cd9e8a50860d402e6b9b8c824fe38c4c150a2ce97b939b6b633cd48991e152b8134462ea3f039b11c0b
+Entropy.1 = ec45f55e702207f105291fdc47ea870479bbfd2b2cb07bdc3db0d3da8e05f43b2e90d94df1ccfb63
+PersonalisationString.1 = 754f410bfd549c0a13f4448a1da1d6435b2570f8e1028c360ae60d46fec270f49963e5baef944543
+EntropyPredictionResistanceA.1 = 1c5eeef36ac235e59d987ac24c65b2e53f7c60576a19d15749f5f7c2f8aab77f658e7a63e864c65f
+EntropyPredictionResistanceB.1 = 2b414f09c5b25bf7d06d344cf9f6580997a6dfeeadc40744fe2d62357698181fbbc786f5b9afa45c
+Output.1 = 148d71c59ceb1c34c3bde315aff4003cf36af99cfb5ee4c4a92047942c77be17da9c75f96d1ddd12c401102261a5226990f97f6578dc80a184ab5141f781c227
+Entropy.2 = 5314d8f73ceef9947cadabe52237dd7dfa8883c38d27978c4128469b1e4f099cc659d3d472621c6c
+PersonalisationString.2 = 04e80f51b80cbaf9e2fbc731d0ada461038493bf3b345348748c652c52e297b7a1cadcf291975397
+EntropyPredictionResistanceA.2 = 09b2db29a7b08d8a15b29045ca8a15f5f995f7c0a08e36e1b329e2a33220b95b48ec51e1afa91a49
+EntropyPredictionResistanceB.2 = 27606121deaea6b233bda07813e261b5637d77e8c7b24426872ff3e75f15bf4478fb2aa9ef812678
+Output.2 = 22b9e05b88f986c111b6b50025c56ad2a2d7818dc634c7fdfef7adfb59084737e412420c4071d19a4430290f106a9d912ff31c4bca29a824ba085ba10f87b4b0
+Entropy.3 = 1aebf441db2b9652aeba7b9ec95c20a34c79c1b96514cb321bc20e384d3ccdfd6a2c7ac80c1a49cd
+PersonalisationString.3 = 1fff676d711403ba8db107c6214fb971e31cf5d3905b343d78fb4c78fae7b6f654cfb06beb6504e9
+EntropyPredictionResistanceA.3 = f2c333f9dbb48502e8ee30249953eb24934b4adc63f2775f65720aff14e9701044da249f866e97d2
+EntropyPredictionResistanceB.3 = 215c3356ed6d7138373dd82be4d98f0695797ce8eb2e48d391a36a5e0208b52af265b1e1dff8157d
+Output.3 = d7f97a92d39a4b369aaa382b47254f4da61a448482f4e60b16442614607d7f8248e4dafe0dd6a52057c91ffa3bae5a4aa168c073e09f9f721ccea2e9d99a6271
+Entropy.4 = 1db65dd23b16b5d1c8c903f4b4614dffbda93620f0598590b8df399dc55420d4663af3e32b4b15c8
+PersonalisationString.4 = 90a4d2e1e31becc58527a4a5fc7178273ea4910c056a926c2bf3d1decdb823c8e72bff06b0d2a961
+EntropyPredictionResistanceA.4 = 2ba0c3fcfcfc39de201b0b6730460ee7ac3d179fbdfa81c1634805495e93097392f0232ad95221d5
+EntropyPredictionResistanceB.4 = ba81bafb308264999480ac93706c5e1212e3f4d91b9438d7f7f6a2068ec93de8c7ee64aad5dc77ef
+Output.4 = 98297fa566a8e6c253205d059cf9ff3075b2da13cdccfc439acb2b93e066c92eeca593e53d42a23b5f995c17af028d2eb8177332927f7f87d0b53fa1d9f56c1d
+Entropy.5 = 1bb71d6f27ae6935963bf8c8b93249692c78a375bde4d180affa12af38f6593d6392ceae54cddb38
+PersonalisationString.5 = 6ed11fa397948bb53742bfa9594632ace652e99153219915dd64f771c5cb22532ccc300dece06701
+EntropyPredictionResistanceA.5 = 21a95e6e61320df0983f54aa0d358e3ece9a87456db0efa712262a5817fb60365ea1b9e225f2b023
+EntropyPredictionResistanceB.5 = d6ceafc47c35aafa5adfa23ebdd65ca416a39f189348af89a726da814a98ade5995ee973dc3e8f12
+Output.5 = 83b0aea297993619577c1399883f53453bc5060602229da19dd902ee819c708a28e5ccdb5cf3996894d44d891fd5b4d8757551557b9da568e3e2e7181eecad4f
+Entropy.6 = 0a2a75e6c6ee5233852637cb78d1a396a0e8c33e372922077847cc8afdeb3f4afd0a3a04eb6277e6
+PersonalisationString.6 = 31b9b1390a2d3fa8258266f5d455df630cde85660595d28b047a4097b64834db32b8bbb89f4a347f
+EntropyPredictionResistanceA.6 = c9e291e8c242ba53824c43094fa9cb3902e161973d1be89cd389ce6c584dd78f8c1aed6509fbf0d8
+EntropyPredictionResistanceB.6 = 66e3396f88a6311d8273e68e59044527d595f0f75e0f5bd133f5692cb7dea5d423f175b419dbf8b6
+Output.6 = 206e3d197985c4ec9230eef37b91310b4465b6bb8b2629a77ad64fd8424e39f00aa59f9346aec2e749a0453ebbfcbc96faf4c7e3ec05658b0deda2a68c351a72
+Entropy.7 = cbc50783335c003f632ca7ea0e34d3b8c5db18e6afa2228221ff682eff8f82789e2d51e5ed58d43e
+PersonalisationString.7 = c50883719ff4ceddd060466e3f91f7b120ef9ed380d8e2ecfe461d90b87b6f1d93cedee19de04928
+EntropyPredictionResistanceA.7 = c8fe13b4349ad2a6640e87605e689a97644a607b6389886fa7d32a149283c3a380fd9104f85011d4
+EntropyPredictionResistanceB.7 = 8c786cbed908870496e6a76f90bae0882e5a380cc51a706ad14e1157dd3ba5cccc7596afc8e00763
+Output.7 = 7e40091e68d0d64176ff8ffb6b5cb18f9ef4dab58c816c2332b7f5c83f0df7b2463b08861416feb6c1afdbecb01faa3fc1c4ef14bc10d8b102c83d7349191aad
+Entropy.8 = d0e50c9febc548338a208445c2b8cbd9816c3e1ccbea0795579c5186a3a347b5d0541ba1c11f470a
+PersonalisationString.8 = 4630474302e24055853ef5a034fef0f7b5b1d936143eb09350f48d1aff10d4e1b32b4565785aac5c
+EntropyPredictionResistanceA.8 = 610bd88275f8f1144cf8cfe084e07ffcecfaaa195dbe677b179eba58081a1be2ffae6a641cd2a00d
+EntropyPredictionResistanceB.8 = f4ba18baa1990b7c810a31f6c9890fc08bdcc9702c758171f2767ca19e3e0e9a12f6bd6c70e5bb5f
+Output.8 = 1782ebdef57a6e023dddf5cf715bc8d2aca5099313462ff8d669a7182bff0814c98a50845859746cf3c4e21f6fb78d4195890d8a98096d36f11135b3ac71a705
+Entropy.9 = 37e2ddc989c83a45fcc1ef4b673983e224fae7d91c05a79efb6ed2804c800e7af4a4cdafec09ffd3
+PersonalisationString.9 = 100d4a11e5a54299e320cf18238f7cda9ddee40c376977efe01a63eaddf81501ed2d68bed012a0db
+EntropyPredictionResistanceA.9 = 6ddcf3d321b5948196d92f79c174a92ad2edae2799e9b20692572c42c0da25ba131c5a180ec2ec30
+EntropyPredictionResistanceB.9 = 4d945378411bc5cff5ac79083dd93b340c29119ca8e1c33b543dce1ae0be9407b0687e042b4f7847
+Output.9 = 48ff92fbb1f60d4585ec5e514efdf95d1e7a305000b8d6a24c54c7f47fc8907dff0d0ee53d58c86f40c20aa4d34dd862e31df29fc76c93dc307d4ae1f5eecd6e
+Entropy.10 = 2e3873306c37ba32cb6fd000f8b5814b56244b4756f969623af3c2571bb49355bbd2c0d1651d1731
+PersonalisationString.10 = 02df8474115cdf579714765d15f7e5db495f619655f6f2e78194dd4f5bd9e1ac5708bb3120260d45
+EntropyPredictionResistanceA.10 = 6bbfb6c4f8a19077a9c8b597d4fc56787893b2baa47a2e6c6e516d15ada3dd2eac75d093cf955d26
+EntropyPredictionResistanceB.10 = fa4dc0a0d9e4d162e59f08df9f48f58468fa0bb973ef9a2549e8e1459222ad06479ab83a2fbf1552
+Output.10 = 0c188d781b1e86fe99164ea020c21a0bb2831391f17fd5807d9169497bf186ba35450ef4a5f2cbfff63fdf9dafb4348bdf007fbd32bbad04e72557ff525c85bb
+Entropy.11 = a92b4643ff0efe3dfa2c1cef49d1d1320e156eb11f3888c002bc77c9eac0633f48189a29c6b1900a
+PersonalisationString.11 = 4271900c2ba19d49a5c911a20d4370af4f06922aa55ddaa78f88e5703b8bc49148bfaa1cc3d575af
+EntropyPredictionResistanceA.11 = 43b02caf14cb3d3cff574187b557bb93c4f319f37c1d20b3f0a97c32c6010a7565f159717ac7921c
+EntropyPredictionResistanceB.11 = 0697b67ae1d39a723603f810ddcefa975653c0c1f6f63731597178cb03366db9865194b7fa8129d6
+Output.11 = 8893888e4705525cda0382b01ba4ff5b5d6242d4e6277a39855016f518ac631bb2f76f8b3bd4d37b78a2129f670bfe1bfd6e8eede43d3a27c20662f20fc9fccd
+Entropy.12 = 0278db176cb375dea165af91a92e396c760622855141d5c1ac70f00349b9ef57bd662040a53fb65d
+PersonalisationString.12 = fd1a24b8056f242abc9525c48234a7956a1f1b057695ec2bf5eae0b44fd548f38e18b380069785c1
+EntropyPredictionResistanceA.12 = 4dd2001d6a7156ad8f97493260ace2f2d78fa89cd293ac700b757128dc20b0344cab463fdb63d15d
+EntropyPredictionResistanceB.12 = 64eaf188b325c3a1ede969300a0719fdcd942d7b1e2255ffcb2ff1c6468cef184a84a85b44295125
+Output.12 = a9bc86b715c5bf10e7a48396345afce912e2d749d5cb6782294137694aced25baf5e55d23a31e593045bd452760d6f742053bf792e0974e14c4b5eb61c0e20fa
+Entropy.13 = 10c7fe6e4456d413a0548c6be6860df6904f796f0b04eca728060bd97a2153298a6a2a67cd3a3636
+PersonalisationString.13 = bb95e7e4310f33c403863dcb5089827c0066117aaae6e310cd170a238f07a4e4a256df333e6f1eec
+EntropyPredictionResistanceA.13 = 17707c1e5b85c97fc803d2c70619071dbcae969c0ded93e0869592e572a21dff9f6fa190ed1256a8
+EntropyPredictionResistanceB.13 = c6c833f8ca86b07db145dc904883892f3510c4ac2245b24947fd5ce6e812b0c049d2fc41bb3a24fc
+Output.13 = d360b9ecd40bdc9d287658031d61f6dd3cf4dc7bc74ccd476914ac4175a3059b79d101e20018202a8c68558cb12f8f352fe98457f2a0cf5df8ccd4223894e64f
+Entropy.14 = 89e40f395900ff4b2420b6fccca11b09bbd90f447034aa6d8ef437a24e9bf8d4bfb77893c7681bbe
+PersonalisationString.14 = 9d0e5191be836c05f2d26b79c83d37685bb35e84574b462b4ecab1c8115f2f9f34974c69a731d725
+EntropyPredictionResistanceA.14 = 756f29305af9f4d3ceca4399594d07636df0b2ecfaa0643880e586acbf68ad18ed6e33e28fc4fc54
+EntropyPredictionResistanceB.14 = 1880252ad93c994dff31fb2a10fab8c265cf6f6a36f010fc35e4d858bbb783e3a682afc3fb98fe6d
+Output.14 = 2f7872a704eb276afad3efb131e67c4b9508fffdbb704e8c85c07e6132745941a8889ffc37baa637a1b7b7b0b84fbfdb8fbc00e7f1eff50baf2d062d8434bba2
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = feea3b6964664c58bc58f5ac8f0e9d35d3ccf87220bb5e7a84c13c68cd9a28f1ff576675224c84c2
+PersonalisationString.0 = eebac711edbb4034a7d7fd17c301467bb1369b85aeff93dbe82bce803ca059492caf3e96b5f01d83
+AdditionalInputA.0 = a5500c3f37b20cec3391effcac45676674ab8aba5f9690517b80eb6d2610f832564128f87c4f88b2
+EntropyPredictionResistanceA.0 = ab87b81b15e4203ced5dcfa7a2e92f71784832a5c47f0054850ff32a06c6874747446c69cb481ef4
+AdditionalInputB.0 = 61384443e07a5659c7bdb9bf9f3fde677ad95737e9260b53635fd7b9d4b63a7995861285ee613265
+EntropyPredictionResistanceB.0 = 29de4f15b489c4e8cdc73244570012b443a1242f28f9dd7fa43f98293a0e490aef281eea13d1e136
+Output.0 = 2f19570a4eebe46b24104c44290a1c206daaaaf99d43f0530df4183322bd798d08d795c28e9f67ae24507be481deabb4f760d2f693cd0af236b0ba5996806e34
+Entropy.1 = 1f43408aceac5ae3fae73d8a56d9dfbc3a4c83e16d7611ea5b3458792736604e77c3c7e50894ab13
+PersonalisationString.1 = 43755b496a731c26412df68a2858480e8f4b64bdeb11d531be87ba4d9ef68b7b34e68f3c61e57cf6
+AdditionalInputA.1 = 55d7b431378a1636a95e21c8d008ed35659cc12339608899c5879e5ebdbb16c23a8ca0a513f92a3e
+EntropyPredictionResistanceA.1 = bc064109738d79e6a0059073ced6cfd3347de08928534ab7d2a38c8eb1f3207d34a5cc29d87b3758
+AdditionalInputB.1 = 8f47a0b3e4445b79313ecf02c9a8407bf06f18103ab2a2c0a84155914c0a1eed787d81e0d2625659
+EntropyPredictionResistanceB.1 = c149c4830b17a1351d3a6691660824199565ba3485e926db0ad296a436de09c655ddc29d79d8fb36
+Output.1 = 3a51de2b18baf2528a480cc3de67dbf9f43039217f8988132f98ab348912a3c4e0e937f43b29c48bda5e668c97a59a4d819f026ffa9a107c08a3035d6ac6873c
+Entropy.2 = ad8aaea9c2164e7081b8e998b9ae7bf9cff7e2a229a91406ab461058e544f1effe2357090cc531b8
+PersonalisationString.2 = c695548698e8046fae636446812638126d1fdfbcc72e141a45bd59d7dcd5800b0d74ef7b79962fc5
+AdditionalInputA.2 = bbbddd2e3144781ea322256c169004c9cfc8e8b7ce3197a6749e7d473f2ad61ae82805007e9df2de
+EntropyPredictionResistanceA.2 = 195e30025847c4a68b38a293ed67e5a7174b501ea18bd5fd86b0dc27248cd4c579c3651b7f3befc6
+AdditionalInputB.2 = 0835049c8f614c2879496d52fa741dfd2b19861b5bc77081f607f09e52acef0620096957a278ca10
+EntropyPredictionResistanceB.2 = 6068d00130c5fa61892888a7baa45974d408e4dd9e211ea8303300df07065ef085f08ccf4fa08684
+Output.2 = 97d1789efe7750c35f066a6a71fa5b571e9f8f5b070797e775ee06d86fe5204e8a57f9d18dae510f3cd333ec9f5ca2f5e346125d73e2e3f21bc02d85d09570ef
+Entropy.3 = 723923005de0921a161bb2019e50ec706d9eb0efa5047600d9291cea1576a14de92704ff2167d14b
+PersonalisationString.3 = d86defdff1b7af2928ed0614d4b8e23ab9db8ba6040f74b5fdb8fe7adce3b1d439f5b4929b2ea8c9
+AdditionalInputA.3 = e1e6bde7111353179738ad2bdd44536c8433e4443af3a80788e39817f2f1f0cecd45a63cec7c636e
+EntropyPredictionResistanceA.3 = 2901c8d6346015d67f4e77be17dd1de144185dc94386964745fa78cddd9e00a2d4b21cbcc38f2493
+AdditionalInputB.3 = dfd4ae3a3305bea1606935010638ded1cf05191b7c32509af526adc39cc81430cb05eab037d9cf20
+EntropyPredictionResistanceB.3 = cf98b858c1a83c728adfdf33ae3e547bf40aafdf57f03ac5d4f8220964f07d8ea7fe2b06fa16edda
+Output.3 = 80dfe5ab688c7a91a649da942395e1bdf3e82a8962ca9b765e6bddb08975578cd8f4fa0bcdffd571b60ed7ea6e1d8ae62f44c7d2ac783baa0a08b8b635e60df4
+Entropy.4 = 49ed3ad0a18d3322ddfacc612c0bb0a60d2c2f3dc9fc475f059a4cedef64b363c5da85c9bd0a3b7d
+PersonalisationString.4 = ac5a21521360e8cfbc95b43c785297ec3eb182766e5182c49118732044c0974ded0886ee746e8d57
+AdditionalInputA.4 = ff655967f7c34823af42b4b01e2d56e99e03fa3df6e207b0fe68149571a1788cb21b200d3132e20f
+EntropyPredictionResistanceA.4 = 60b4d2b174f6897a4cc654c8fc94f2d24ebb0136ed258c0248b960567368dfd3dddb2622ea7ab146
+AdditionalInputB.4 = 0381253efb193ea574e093da57391b239aadb1e57212b6ee17fdaa4d9b664ce0d87b3ad3fa9a397d
+EntropyPredictionResistanceB.4 = 720ec59f91db369855b33ebb1ae3ebcd367228e5947489c539e7e02f7fc52596fb5b51d87782929c
+Output.4 = f0d70cfe38133e2b2be318d063e726e61db8a87757637e3a512ca5fc2cd42ad95a696741a838a87727f2dab051c08c8d2bea098c87fec019b48762409d528544
+Entropy.5 = 23cfde1821b2cc19a51c944fa9d1c577dd6d8fee1860ab16f0b09d76a597279e30e0873a4582fbb7
+PersonalisationString.5 = 767a0fd58d3cffcba79f230ce0375c6029b7dfb6a7db4f35e7c94916101e642bd1c860201d1ed36a
+AdditionalInputA.5 = 23166491e6a86773fa3b2a9e82273e017a57c2acbb82982b7d7d4181c02a7ecb72008700e478511b
+EntropyPredictionResistanceA.5 = a0f6ecdc1e7f7866744723d6c244d187e79c923c1e8d811f1f6adf7053734a17ba5530e5d5c32720
+AdditionalInputB.5 = 95bf7db9af68d33acd0e6cf4128df563b4707df8671bda462151e918a343102e05ed2813b32720ab
+EntropyPredictionResistanceB.5 = ec61cfb393b566aa034e507f20d54d5a1783aa53bc6eddefc41caccc4dd0361c0ccd0a24860ec26a
+Output.5 = e9ab1617749f2142e0ccf32fd92c7e17fff3ff49a64424af4b3be10b3712f1f648bd005912cc1851b2e4c65f6edde2f19201ea927d3e6db8febba21bc450fff7
+Entropy.6 = d53bc66bfe732596ff9ce4dfe657a0e94a7a660a68b0cd7a4dcfd472afc5c6eafb2d21cf580a5769
+PersonalisationString.6 = 424d16f1e9437ddc9b14bedc39086a7da89236e370392cfbb0e77914bffeeacef59844bfd62cd2af
+AdditionalInputA.6 = 14bac66ec043974d03e924a188dca9f84320c31694972fbb136b51638287a87ae6d6680c32e6308b
+EntropyPredictionResistanceA.6 = cbde0a1b7117a61631fa5f55abd6782709d744fde53b08813a48408e15480ab4a603bdc1b443e106
+AdditionalInputB.6 = 76b295d8e689eacd797742b522a5707fcb1480c88bb2a8d2880d5b7d936a4f7cd6af0a1115e83b74
+EntropyPredictionResistanceB.6 = d1841a45139105a66bfef096d584c5f38b93c270f2976d9a6fc51c9ce44cf90ac062f9902f4c5411
+Output.6 = b1f8b5f6a99b51580002c9ead70eb01697ff1f0e0141fe86b446eb3a0b13462a2c7985ef7843e2a04c05076beb24edb92acdcf6daf0b320ec89807a58b39bd73
+Entropy.7 = 2b06a5b4753172ec3a9ea0d78292e99cbb6c4f98f479e74bf8e7c43d48cebe2afc51c443cc41e0c7
+PersonalisationString.7 = 5bbedbe4028070fad9f380507c2a79241628f7dcef9f249cf6c60cb7ee653c5d16226248360f1935
+AdditionalInputA.7 = ac8f066dde1f771635821a9be10aa12bd6341b57dd7cb01f11a35be6a9473b7d48656b4a7fcfc17b
+EntropyPredictionResistanceA.7 = fea0f78c7c6e2558c1c618692d2e39b35ab4c3af4f27fe38a31ca080c26d9934e1a2e9b62ab8ee1d
+AdditionalInputB.7 = 741c84ceffa4611883e500ccdcaa0b7e0a297e2cb374bb1c29fec845d70367fd0a7ec57d70d5f406
+EntropyPredictionResistanceB.7 = 3366cbc54cba7c989f65280cc5f0d5accb623506e822e1d0f26368d111a57b2f692c44637d97539e
+Output.7 = c129380bc35011352f27a9738e7a77a915784a592dc24ab75f462597b2e123af3b3895971f9b5f1be960f0a4ce2ca096d66b5d059fb2327e3b8cebb7ccbf9774
+Entropy.8 = 88df6a70237deb8f494af9ed5690041b9a0b741d2bf1cb61ec9c48a93efdbd3aacab82f69f036cba
+PersonalisationString.8 = 01c70186c7bc95bcaf5c88043774dfcda44016b91b2933c69c02ce6c0e26e42366e8fe872125dd30
+AdditionalInputA.8 = bcde333527717e7b427e6bb09265139b92b4540da1656b81cc5b419c71a26059b2836ace94350bb2
+EntropyPredictionResistanceA.8 = b573c3f46109a381b3f1d3aaeb9043c186daddf1ebe7b9216c616c944a975646b28c6d35c2afa7ae
+AdditionalInputB.8 = ffc8e27a9a49222a4fe9eed159c18829ed2e11c6b3bdc666524b732ad57720b625607bb3c398c737
+EntropyPredictionResistanceB.8 = 774d4c74d986721fa0d15a9b9cd6394362a8f63afac1f2195b529f4bebbb0ede2812c55491df6472
+Output.8 = 4c22354aaa9b9e298b665cd8747a217d50b38baa2407727d8b0e1e35096131f592063190c7b6e9f811b9bdae8709e68d60f7953c3e3a452beb233dead2cfbfe5
+Entropy.9 = 4a8e24500f1fec029b158aed18ac92e43ec8d6bcfa5f1a3bcc6e6051ac54eeeeb9a55e818db45e66
+PersonalisationString.9 = aa7307d4381dcc7bcbdbabe45b9e904604921ced1f3328df7a907745b4b2e65aa3b8a8192059e9f7
+AdditionalInputA.9 = d2829cc1ac9d9f3b4d371d94f563756b713323083a867bc7f654886d353802b96c66ce80de8153c5
+EntropyPredictionResistanceA.9 = 0213d0906418fe16b79567a405fc0659623fa39a02a3775762c13e10260cc371993ba2a914ea90f3
+AdditionalInputB.9 = 5aa25192d7be04444a3f023706ce995c0f0613188df4342d5a019243cb7b0e5a822ae7181e7f7900
+EntropyPredictionResistanceB.9 = 42bb192f3f981c2d4e338ec337fa21b211556ab060ed9a9f7997334517f5373e41ab8f16646edade
+Output.9 = c7c9d3f4365c2814e8c98da4efb10eaa39b2b1cd9980368c25266dd54fe91fbe98cf617271985e792fe243164d36ca0ba4140fb86faa0140797b1d728073d593
+Entropy.10 = 927a1ae95606af0cea3a61a63ba292d0df0cae0e009d2a3cb39793cbc2c8f6767f07ed63d133d000
+PersonalisationString.10 = a041c7750690f0ed703813157fa9afa16fd0fe48978262482101ff14c7ef9b9896c32c70daf826a8
+AdditionalInputA.10 = 9ad1b585eff6a620a3c20dfe6956ad33ff86ad5927a78c707ba78f279820fdc6582f60014b38e463
+EntropyPredictionResistanceA.10 = e31d3bf074061f7212e7bf77c457e1e014f709e609dca530395072319acde52149242af159a2e215
+AdditionalInputB.10 = d4fdd044b091bd8ba22e6135f287d0c75e9bc4794d02ba445e9c32848232031adca5d5fba02bdbb0
+EntropyPredictionResistanceB.10 = 8c73e56303b8082119446516221e7fa38686f85ea9389af3bb5cf03ffe87fad971626fc513495c74
+Output.10 = 2099434e3c855fa19bf207b7029c5a4f1ba845808643975aa6b154aff7a90230715abc703147f204551a77e49c7e60a2127939bc5ed9f8aa0ada4a526b6a34e4
+Entropy.11 = 0948729d3fba75cbe833c1117411f92ab75b1f2143ed248a8c141bf6a354e114eb26bf755c84bcab
+PersonalisationString.11 = 270f9b809af5f42d3ab0bd3c8f636edc4a8bb713b539e698d40834084492ba5023ef0859ac6493a4
+AdditionalInputA.11 = 061c66103dff5bb1b93fb340ebfbc05cba7f8f077288992b5f06d565367decec25f667635af9b0c8
+EntropyPredictionResistanceA.11 = 8e4a815541cbf31b581a7104555592b7e167bb42dd3c04cf913eab6bee0038c6d2c28aeb25e0c19a
+AdditionalInputB.11 = 93a70841ada8e4a7ce7a9202dabeac62174b1a1e845b73a039e7270057e616e80b1484cb35e30ae1
+EntropyPredictionResistanceB.11 = 957480d7c6caf487a820022f202ff21bf18674ddb8c44aa25339635fd3291412311b27886173f662
+Output.11 = 6a89ae7613a19a23d4f9d242bd872cbe859f62461054de53cb6c0090df9e77b1afbcc1ab7f44a6dc9d81357e71463dab6b5cc272a8eb5df09a1c7cfd861d7933
+Entropy.12 = f1c6d7dd73fa72935ffc34cfaa9f89bb8cf9bce15337d535b0812c78c8b06167c8d2d8f6549c75d6
+PersonalisationString.12 = 5ad2267fc6f32dd8366f77a30aabb1e7aaeff46bda0034ec94757148f559e06e41a67456c9cdf811
+AdditionalInputA.12 = ad0e2df46fb677467c40fcd788e43b6e300d88c75f143379356c9354318a37cd4dbd3cd564b6ef34
+EntropyPredictionResistanceA.12 = 84eec6d7552606cb8e04abb9487955a193a46f174a6237d7ee4f08088b0871b64fc7fbfd694fad7a
+AdditionalInputB.12 = 0c7afc57db9f38f3aede6160fe9653c87c4a892ad1cbcdb72bb70f9492afd8b86378674c79f07de1
+EntropyPredictionResistanceB.12 = a0f8e9a6ba72850a6dfdc52f168411a8e3aa1ea4ccb3bd7cecd4f8de4d577daa63eebfba1b5234ec
+Output.12 = 4f9640e13a26467889413cb1d2aeb7e953ce9c73100a3b8925c51dba54cf785c7ced5a18f4f47623fa35fb1ece4bf42f990d122a66da7cf4b92bb22f0646adb3
+Entropy.13 = 74d9e3482b9c30809d637036e44a1e580223fb12ed51244dddb0ef0fec456925a2f06bd8e38920bc
+PersonalisationString.13 = 9ccb35be8c4f28db237f92937f14ef2deddc78ad61a8473fe500d39fc850f194343567c3c6b0b726
+AdditionalInputA.13 = d5d09c991022de161549e329597bd6c71fc93e6bb8a0e2573d706b490d2e5cb0f20961988ef6088e
+EntropyPredictionResistanceA.13 = 0683c9be884eb596328da091d4227287d176378a3a47df2a600ede6e50756ea6887a48086ecb7641
+AdditionalInputB.13 = 11883b416630b2e7123adb10b221a411f52e28e4642bd585bce3c01bb149baebbc45e7ac701b309e
+EntropyPredictionResistanceB.13 = cef31c55fff0ffe9470713f0c4086dc3968de6658fe5ac062a51112323f36d56f4f2ec9a0d87be1b
+Output.13 = 54ae5b40659d673be07b70537dc684514dfb634c4cf4cc3ba9e0b508d2dd43c0992e02db6f97fef9050f00334037df74c0476b2903d05995f00c8031c17a936d
+Entropy.14 = 5a9d6c36a44985f5431357e954bf60c042af08c7d677549a2749d7100b349ff674fbe3e8d282aa99
+PersonalisationString.14 = d39586a35099a2a3487b31b00f7415cfd7a82565efa1fef93ba57f7e520a26fc0adc3849b95062c1
+AdditionalInputA.14 = d5b8d960b300e1227bf42431c365407aae24cbfa12375a773b2a1bd7d67832118eba70fec6a366e4
+EntropyPredictionResistanceA.14 = 6469e29a1bc947dbac26942a5f06a3ce038548e85d801163cc5a3844c584a8d3b1ecfb7f2f0b3a89
+AdditionalInputB.14 = 3d91e9e7ca5683312545bdb4613dba83182b0c906f3a1d65a2610709e83a7b4b7fd973e40b82a372
+EntropyPredictionResistanceB.14 = c9255e2fabf84b9edd45737f5de13e5661acc03623a3f9268efcaf7f5562cf839bcceda229e06f11
+Output.14 = 28ac3acb17dfdba1d5abb3e2515dc16b42bd207d2743c51b3a2e5edceb0021d964fadd50d499e2df1623c2832a9e552331e915395d65e95f3d523d40d1d8a15c
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = db726a74302a23e20be909067fe8e02f2267739bdb73e06f1632cc2368e3baa819f8d100739638c7
+EntropyPredictionResistanceA.0 = 245ca1c846bfbd2c0538834ab1129103f05f8ecaac1fec1dc3cb621d12ad7867d499f2b02dab8bf5
+EntropyPredictionResistanceB.0 = ca7e4b36a0073bb4811a4df175a79b8be8d402b1757ab6eb9a65620043480c4dca367db37ba86e93
+Output.0 = f06b91687b590d3ec70435d4de8d2ea242f4ea99f788993f19613f54514c6619e47433d41c9c42669332322052a5a2e7f2c3813fe8c64d824c9d22b47c9efe9b
+Entropy.1 = ea61e56d586f96ad463624130cb683e0014564e728624f49c24d4f84125961db2f52890d78fe02f7
+EntropyPredictionResistanceA.1 = df68bb54696dbe1fc6046181d1243c88fa1cd238c819fe8b74d2d08e27ca64e1335601640f086624
+EntropyPredictionResistanceB.1 = 0b2dc233a64020fd156473752ee465d4e97f9df2b049f745fd699760506e4f4cf54f9dacbc93c388
+Output.1 = 704b741b4d545173fa8a0b09e853a169c24c326d8ca13983f1fdb9c5ba9df0c76bc5442ddd0d405d63526a321e7a8c0e0034cc424093add1b6e694b4da9d3fd8
+Entropy.2 = dc936e4f8245ea7d2cb7a92c67d4426ba4f558e6800cc08a6e6e93d6fc5b71c242ff5595dcf02611
+EntropyPredictionResistanceA.2 = 63777a5a227defc5ff7deb4b2e5459de89f0e6887ad62c5cb6947fad9003e998f716d51d3a7a0462
+EntropyPredictionResistanceB.2 = 9a5b8572fdae0f456c0293581ae9326c439b90fdc84a1da370cdfbda2b5e6440db1cc2e3c4e54b6d
+Output.2 = 1bf32e6c87bdf52d669c9ac0082a3d20ba399ccc282442b69f5b5a13758679e870a0adb664f3a8ed50ce424846f35bad7a96f9873172deb3b2fea823dba04a79
+Entropy.3 = 138f406ad9f779098a749fa3bb9821579693022cc52f88e533ec81a91a770b76d80a4b647400d9d0
+EntropyPredictionResistanceA.3 = 1a1920dbcaa90d4cea09f8547a6e8a184258ec21799e9ef4a8674740e79049cae0123a82c571fa37
+EntropyPredictionResistanceB.3 = d7183c6d6bb0fb0b5b9803eb2734008e09befe2571e4563b63f113c240f3e359fd970aa75685a332
+Output.3 = 634f688b5e2d57d43df807f6aeaad69b679f9172fa2d1b1182aa16852a5238d73dc4fffe179dc579f90846aaa649cb7704c1b131cbbc256d425a8a41b6dc2254
+Entropy.4 = 5d8f915cf026f80a200059072edbaeecb8b2703d06ca1c3bdae80087479cca3703f7aedd7a3fce11
+EntropyPredictionResistanceA.4 = 940952685e4597a831c016257bb543d61af9bdf5ffb13cb7c39038df3c4dddb2af44463501e8e695
+EntropyPredictionResistanceB.4 = e97da4e2328d32783ab6b18ecc39c76584b90e924ead388c39247a2ce2c7fe28dd48a96625589cab
+Output.4 = a2e45a824aa569077881ae165a27147fd5967f92b37dd077f896aab56e140676a0e4f87a45014ae01513d3d4978fdfd51851e6e6cafa383405c958e458d3cd66
+Entropy.5 = 5844dc54f8d711cbd2606155bc62dfbd3174b50ebc3495f1f132b31013ad917c94eea9a9d0c12615
+EntropyPredictionResistanceA.5 = 20e82f8d66dd376da42a36c0ae09b62e4e3da718127ac7d0917d833324e61f5ad62ea98d62336934
+EntropyPredictionResistanceB.5 = 819da83d8b1944e60bef93db4427576a920e1f90b477a6123b62cbd2cbdcc7efa3d70e08175ff04e
+Output.5 = 05619980e128b7c71ab706028f5d37ae47e179679c1902ba0f596b545a5c81ef860eb739fe1acbb97bff735d7cddbdf294cfe26f24992c93678ab203cb582c3c
+Entropy.6 = c44b870cad13d02ef0561b7f87ced6cc08f9a1b6685f05a4279b25d92414447e6668b3c496f1dff4
+EntropyPredictionResistanceA.6 = 6c30744adff909e2b425296bd0b34d2e1df36a00763dc1193763fa91e368a21ab2f9005f8af52a4d
+EntropyPredictionResistanceB.6 = 9a94b516904a7a7a673da19644dcc4107a50823f1b853096ad46c6a8f38ef8be60c5def53b560e8f
+Output.6 = ebaaab96f0f0924269690b95098558488f3e20dfabdb7039d9088f885ef03eb4348747e1851fe0bd0e21591f685e41767f7cf462bc03721eb318e1d28b912ae9
+Entropy.7 = 5784e02ca4a1ca9625fef9998f13c9f4155cb296ea7ae0c632a1b1bc450c5100715854d8472cc696
+EntropyPredictionResistanceA.7 = f7ce6b7ed685f4271cf3ea6fab714dc4560242deca9c94acd7a8164495fca70e767ccc8f46111d8e
+EntropyPredictionResistanceB.7 = 3636b6d545c7a92b50079d44bdbeefaa691cedf4fbcba33a26497c6b49cf77e1693f0d8128faa012
+Output.7 = 484cf9165cc6df1d035e3aa55beb55a24b80a9346a990014f17febd4fa671d45cab090ff21225b510576b02a61ce44e953402f6f1cc3f9cd23a911fff0d87b99
+Entropy.8 = cc0c8469055c7cfcaa235fa0749cfeafd8a79179f113326e6183397b684171ca725c02f03afcb261
+EntropyPredictionResistanceA.8 = 734be46c1a35dc4d824b47d3879a2cd4b2142bcca574fadd2c303eaf6356d86824634dd9082f0b15
+EntropyPredictionResistanceB.8 = fa1f091523e8d0fa51cc09925cfd5ced210dee85cb28f91b8f889aadb7a18c531afa4d47431accc7
+Output.8 = 19e04d634042be3050eb0757b1dc06c8c780db22fab15cc9dc667bafbfa88883ebd0ffb21e1a87bc6787f473fe80d9fe711c5fb17f111dacfe7180e951c38037
+Entropy.9 = 0cbd317c685603af9d4041c6f9373baab7826765cc59a2a53770af87e1918269e1eaa89ac89763a8
+EntropyPredictionResistanceA.9 = f3b247145b9141aac33965757cb9985a851980479743e6062d6a692a7ea0692f1dff3de7515ee196
+EntropyPredictionResistanceB.9 = a9bfb446e5e54fbc299f6d370b2f99cc216df6a8a69eb67bbfad86672eb8618bad65096c7f47d884
+Output.9 = c7a982b9424f317033ea10da5ced432653321c16dc6085117fe824ba048d7c0ddde918819a830fe744ddf1d4b472474f4421176cb078d72dbff78238f0cbd419
+Entropy.10 = a89b3d14371d7b96cb55eb5d853d48b6a3a8aef7bee58d060ce7cd2b3ecf8c57d79ec705a111e3cf
+EntropyPredictionResistanceA.10 = ce59ca3348f55a6224d3e38cce12dbd31053ad3bdf60d0cbada1c2dcca2a88207ddf8f57e81efc4e
+EntropyPredictionResistanceB.10 = 35d92d8ab64d5eb64681476b0919948ab173bc3c2f04bd7e1b838701b28eddc999ec13b47e4b7580
+Output.10 = 3d3a67f4138e64fbf81ae5286f761849bdeb7dbdd6fddbf7324951c6aed61ab8c73e1f0b0efbd2a23e9105cb1e173f96a3f6fbda6c439d610453dc55ebda958f
+Entropy.11 = c3d4f75c070e5457812d986cc3faf118914901147f1e2af566113067840dae4bb5bef5ddc5be9ace
+EntropyPredictionResistanceA.11 = 258e5cebe717557f64bbc52c2c1dc5546ab2a4d80417c329a2687b46a17f33faa2496258199622d4
+EntropyPredictionResistanceB.11 = b6e1f5055287d2a9cb2deb3ab944d21cdba1fa6469194a18ba4a761a5cb11f0dcbfc0b5922ad8eaf
+Output.11 = 6d33294529179977874cfae7b0e6242abb29e79926ba8c651f5d5428d2625f06d77fc77e5a3505593e6a1d301b8ccd68f43f01d00644deb9c08acec46133b8c9
+Entropy.12 = 6725f679609d344bd7db0a75bdc0a5eb83dc9d9d3497a278549704c913cf6e600582b1b1c91bcfd8
+EntropyPredictionResistanceA.12 = f05f7045defac6d2e90c43798bfd856b8a71247a3ea751a2852fbb2f24d2a8b078d1b5421d80d2c6
+EntropyPredictionResistanceB.12 = 22631d5e361f8eb4311cebced97138bcd64249230f7d65d45064d11d57ea21a65045607e1f2a01c1
+Output.12 = 347cc519ced14e46b4b1d06ae6c5555ed8a377113e4fe1e26b90f1ad6029a526911668e35daf9f72032a74e63744ea524232831ef4d77f56d288d37d550bc3d9
+Entropy.13 = 9ad2358804b9918503806cc09f920e4921fe38d0cc9b4424b1751769595ff26d89c709f7c0538058
+EntropyPredictionResistanceA.13 = 524ac6442934500d797b5e6ac6be65583f3b41d0dc16c96aaa2667002a8fa0a46fca99dfd45edd3e
+EntropyPredictionResistanceB.13 = ffe933e0e524b3f01dc7704235597ab1571d33a8563498a224e726d8b18b2dce43624c814163bdf8
+Output.13 = 94ac8de3b7d83d326e8811b387d79c68a052bea35c120749b8f817e32853062d38b43f5a00345020883db79ba3d5862484c25656a384f3f9017ad7cbe85ed3c0
+Entropy.14 = edd0d856ba5cf45e628ccb879248ee9218f33c5a534ecff29360c54238d7e66a9f4929adf1c9d927
+EntropyPredictionResistanceA.14 = ea4ffce516fba5a28325206d639d1b3a0f7c61798947a54f770971bed18847e3ff126e65a6b070e9
+EntropyPredictionResistanceB.14 = d7e649cdf563e960640b50927a92abcaa306d4e1315eadb0316bb65d7f9166577bab34bf012a6f9c
+Output.14 = e92c34e544c5342445228ae6740616889856eda4ce82fb7f1c15d1951953f5509ae754624ad9f159dd5e1908da3c97d2a66945b8a8746634dc70b7f31718c4ab
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = d72bc28ba477f0cd47af99317243b23040d63f2768498eab56917beb32566c2479468db3a97c7846
+AdditionalInputA.0 = 1e9b1d0afff83a84e1ca218b4465ace4655c0f1b8a702989f2b628b25815b838ab88fc643253a7aa
+EntropyPredictionResistanceA.0 = 6df64531008081acdf659f537064be32b9654b85e1fcad8b108c1fbb4b57b342433100b498147c5b
+AdditionalInputB.0 = ce8b0b49992e7d4e11465e3bd786203377c110a66f69a00b9dc2bee78a5c30884267c16a645818e9
+EntropyPredictionResistanceB.0 = 50f167836be07990b9b1632237bfae53feba178b6789c5693e8af1beebb7e3eb2d5001f96dcb3462
+Output.0 = 8cf05e17632bfa4cc4f9e8f045a2c0e9df5ce0c4313fd460cd8ef40ef330ed04d5162c772db52ffe47f9dd17d377e34fd6b0d6ed82cacde602f90174e33b5baf
+Entropy.1 = 014a6ea39ab2f2ce9edf4466e698122722694d81bb00727c30f70dec2a72329ca1e6f0c3918465ac
+AdditionalInputA.1 = 9cc8b774a98d9161195f7723ddc38c8ad729d48b6b9fa7126fde6e1825e374725122530ddde24c08
+EntropyPredictionResistanceA.1 = 0c4541d984c2dbbfb154b3734551e9fa169ecca2e5ec0bea08654532a811aaf225d85736e7e8136c
+AdditionalInputB.1 = 8646a72dc3166cd430dfe642fa8867b52d0ac9ee9bfb388eb623bf2b64cb4623b54f510b0eff31ee
+EntropyPredictionResistanceB.1 = f8856e306c9b651286647ce3c0d34311e203bf4653a7c2f0e125b2b77cb78cdcad1f78bcbc246614
+Output.1 = 81b6cd83de16ad69b0a918c592268c5fa61872f48237527a9979cc5623ac0e9a9edc00a773a28a6bb1920b8425dd6c4f412cb12ee7a60a59943873fa64060027
+Entropy.2 = 1bac87bf6faaed982bc162dae0f60ab89cc462e202a15d28c03aa7f54b462cc07f9906b094d64190
+AdditionalInputA.2 = 3a05e6f8b5caa4719dd687b9fdca22fd527b78cdbb88cc5755415b27ddcec1abff8df2ab8fde92ff
+EntropyPredictionResistanceA.2 = dc7b93b52e4e7dc5c8a1b515ecb8ed1b83d30b88d5d97c18f8fc9993ed6a12e01136f585e63ffcba
+AdditionalInputB.2 = 6627651705370c1bc8ec97a2fc22ae61f20a6f12ac0b9a3fc01985202b036018f2b8157310f5e7de
+EntropyPredictionResistanceB.2 = 4339b9e49d92e56a96b10cbc271bead5fc9d4eb1afc765bb2978da3e8f050660ab0b3b3fb68bb3f3
+Output.2 = db7c2b21009d012a9855c4c7e4557e474951853f997a76ef201bfded6da9c7f1c228bd850f2bfbbef470f14e39377e2d3133008c86f7a51a91fdfb0bb8ea9bf1
+Entropy.3 = 9f9b52f8d222fe83450958a73ac2579f830409346edfac3733c65715ff6de318df83f04b97278906
+AdditionalInputA.3 = 42704632147bc6c6586b4bbdd6fb2b9c47814f8575b4f23746a16265351af813343b787ea1bbddfc
+EntropyPredictionResistanceA.3 = 339c900990e3a091b04a8ff7dd498cfa2a45f71c500c84f203fe593010014aa478632be2f1a9766c
+AdditionalInputB.3 = 2853629191822cc6722592310a342364dbe3c5de8784e7e71cd57da8210e8e957a2cad7b0b1464ff
+EntropyPredictionResistanceB.3 = c8c5b35f6417d4152b466574b3b927c0f33850e346af02e38d4b4f3b08a829cebb1f8cb7ec824739
+Output.3 = 86fcb4f9a8a9cb918114dd5d9b6398c9592a9f828ae305e1534eb994bc03ca7352655d57731f0d934deb9bbc82c63796602cc87c90fbf0f12ae07530a0031cca
+Entropy.4 = 7de758259f0ede3eef9cd49e4802cacfb6a007d019a07e8a126598c4d406deab8c77bbbced0c50f0
+AdditionalInputA.4 = d06476f3821a3b90534dfe0b54d188a79dd14989244ff970bb224a2a5111c557c73ef9afc50c223a
+EntropyPredictionResistanceA.4 = bc4fadba7119914ff267c7366e2db8c9df3fefd1cbde101b1dd5122854bac149a8090b767b206507
+AdditionalInputB.4 = 0bef4ee568c037b1fca6559b2663f0b52d06a5b0b12c5d4f0f93754bd321be38dcc219274bb0bf1e
+EntropyPredictionResistanceB.4 = ae344d13e0570d8999b846e2d2f450a77ed45b68ba438a51be4843dd176fd8ebed4c09099cb40a40
+Output.4 = f55b2cbeecb9de591d8b9ac5cea5fec39cd5a296d410039a40a65a94c3e00faadd5b91fc3e61e9caeaa4a994d310d1b463ee7a4c0448695f08727a3a865909cb
+Entropy.5 = d7fc999de04d4e7cab03ae5aeb4a7c96358b6b0b983f2aacd7f6560e675d4c37d859ce4dc7ea8790
+AdditionalInputA.5 = c7998ddd0c4c2babc083615ab8fb9a8f974dc69ead4e5cb976ee5d42662f6af44fd5e4ce07aba881
+EntropyPredictionResistanceA.5 = e3d6fd7d457ace95a3c25a356ba0b4fdd4d8c4b870b9e1b65b04fb4327bbc289eb2dda63751e5e95
+AdditionalInputB.5 = 5a46a00a2ef1ba40a24a718bf41ac6be26c72116609f7075825ab4fdbe43842462edec3fe727075d
+EntropyPredictionResistanceB.5 = ffecdc2056e636b9cc0086c4f3b02a90a5b866c049a466d617fceaf36f3ac7836522144e9fb6d710
+Output.5 = 30d3b60bec4b18ec4e93bb096eb0b200ae4fb5e46107b633a2cbc0c4fed06fec9c75e37d553c4ce1f63aad5819d8f38b43d5445917f4207733b2e2dfc0f0d351
+Entropy.6 = 54cafb5d516e54a481a4ebf5e81b8914b821f23b122532ea140c37075a4373bc1a5c324209266a1d
+AdditionalInputA.6 = 2b4b5d18f0566ed896e13f2be0a54cb68d4452e43f3618a87e04b7c07f0ab625e331dee5d4d2939c
+EntropyPredictionResistanceA.6 = 7a3d338608cac003c16e28cd779b124659fddd445daac0c9b26d3298573ab50568979ca034b77b45
+AdditionalInputB.6 = 0cec7ded493301929cb2274046347cc990314debcc423bc320c6d540079c6a0a9bd0340934cc042d
+EntropyPredictionResistanceB.6 = cd24f9ab7ab5263cf7ab3abb6fdf21b30d04979b5d908616e4a8f653cf070126ddc3129eb9f725f6
+Output.6 = d35763af07a4f24417525e9ddca64506f55905900c75b8dd83bcca6aa441c17ae15d192a2fca4664ba530c8e386f9b156480e17536cc4f4e910d5790062c7c02
+Entropy.7 = b6bf46cbbe2b70663a9dff117eb5a61ceb03433c4869bebbe3c59cbac03c128f5b9d4c33db79ad75
+AdditionalInputA.7 = cb4f5f7fa3f6a64c2c00c844a49bfbfb5476a1122deb242ef6add8d2c77a10c54efc63ee8c59b4f9
+EntropyPredictionResistanceA.7 = 96c754f54546db078b28e8fd83da4ca929b75ef7b6d5f8eac95a95de22829f8ca0167bdfbb59a8a6
+AdditionalInputB.7 = b6f8870c7d5d585a558104e20ea6934f70900dad35a30e9d530eba974dc4158a3b342ad8b93a3323
+EntropyPredictionResistanceB.7 = f9ce30052cb32fe28402934523ce2d2aeb820f6f65b6e22fbc75f58a1ecf4b1fe388589d3123a3c3
+Output.7 = cb0d1b96b5cc16618666fa81e062657076bf590d9908f480d9e5e5b57d5b45a683dd1116ffe0346a33b8e4b9dba1ed1c4b4ad675a7d90182cb88e611eb5226d1
+Entropy.8 = 413eb0c2c205d72566a8ec67c308cb2b22da038bc257c1170e9ead51145a2cfed607ff7a4c8bb345
+AdditionalInputA.8 = fb524aca2cfc0ea9429e471eaefd1d89ad522b331ea31c7a94f320e4d282c37fd49ad41034acf41d
+EntropyPredictionResistanceA.8 = 0164c379de45963ade5d8df7973b17bf926fd45e71288b2da76ae78a235474319eb0c1a13cb34a01
+AdditionalInputB.8 = 44377cd96c92a335d2074e3fcc3e882af636b944d19724ca68de5e6e31be21ac495e77ee65dd3b53
+EntropyPredictionResistanceB.8 = bea16bbc6d8416fa32080b4ade84a356fc978fb94607555901ef7d20b84fe3d0518c235513eeeef4
+Output.8 = dd51738052f07fc1317b7faf270f86dbf556f428ccaf2b5c87234f1963d933f2485115a246bf247a5eb0106f0016fa1f1bb1220e3e67dc079cf9043e2a4789e9
+Entropy.9 = f49c042c0433ec36ae5b5e8ccf35c1cd86d5c7cfad38cbec2bdd7b8991e1a9b9cb707c29a60fd203
+AdditionalInputA.9 = de6d6b66cd0b4f00b4f21f6b707cd3b16439dc8ddbf4de16902971b3884134e3bd53e738cf99e850
+EntropyPredictionResistanceA.9 = 8c0f0d3d1885612cc583840e5133a3253e41e648e594b95e39b79eb5b99d4f5560646db11ec152ab
+AdditionalInputB.9 = 6db752a5d56f1fadc958db0ac486d7dbb19341749f4b0b41fa5df92919bab936d93a4cbdfc143d98
+EntropyPredictionResistanceB.9 = 0d27c731a0df9c3dfe3b4a05001776532209875a4427b83d03d5ce492f62a425e5ab34232c02d497
+Output.9 = 61f7d38ce68f07a3c83cf3e19bd8d24b333b6779eb312e461e6486208b6b7f7970a7480c0c19fbeff32ae4ae7dbcfae9b36c1a33f37408f0c5a57057dde496d6
+Entropy.10 = fe79499adda1b176e275d8c317438d70a1b62b0bc0561cf1cb62b5e4cd99798c32dc161a8181c78b
+AdditionalInputA.10 = c9250f700a5cbcff5edd4b0a0fe43f93028517e4e080e7865942d6a3fae0061e3d542036b39fa669
+EntropyPredictionResistanceA.10 = 47f90e570bd11a35ab5862f67358acd7c798b388e5441ae86f90c0a7c07148cf91dd748187075b27
+AdditionalInputB.10 = 90301ddd17f7b00a100d41183508eb46af45bbd4fde861fade4b022c786addfcd2df94dbca195dce
+EntropyPredictionResistanceB.10 = aa7aa69bd2c3a045a646abe9e2cbec166686d39ede26cca5be3881410d4d03c2c3dd4a8a082ab586
+Output.10 = 2d386e562d0388fb54b0c824d600f21f87ba6f5bebfcbb757792513093cc8bc0cf431c05995b7b20bef02aa1d94153eb94db8a4ffb2777a45988c494c1d71a8c
+Entropy.11 = 38a03bc9ceb8b6ba0644c6ab88294d5c63f5c56ed02e3c1c9d6918de8ad7fdaea70bb73c77ad5da5
+AdditionalInputA.11 = 0b77f7adbea5dcb8a2a5b7199e3bf4a2905803b015f08fbc86866c3e043d5bc359e4703478c9f1ff
+EntropyPredictionResistanceA.11 = c2abf29dbb6073b2905c3b182ab6b11478487d515c8751cf656d0dd95943303a64b9e258385c5972
+AdditionalInputB.11 = fcbf147aeebc0ed58138e07bdfab3c9be620bd726e42a38a488b5db53322b9de932b52b5152a338b
+EntropyPredictionResistanceB.11 = 68322a6a4668acb17fb19ee4c187dba2108cdb145701462dda21db472a96474c8d81335b1c027cab
+Output.11 = a187e82139d9ac5410cf458e7c6b80bbb7dc127319badf9aad373491951a46c77c8d69d936895f4ebc4af03b831199a99e8fa89ec19bd08388a88272957f49b3
+Entropy.12 = c9bc26376a00fa430d4be071a8bfeffda7c8d32aa35088954fb30477ffefc12dd75d6169b99fd6df
+AdditionalInputA.12 = 334bee95ef44aec5ac4947dd39a199072a4c82cc64cfc242a9e540b43bc4be88e95fbd87f775e520
+EntropyPredictionResistanceA.12 = 54c0bbd40996e292b4cd5f36a04ed8bb9ee31459af796960319dd3940cf6d68cc1875006dd637255
+AdditionalInputB.12 = eb1447ceebb4d1b571591e69f1f21572eeca0796ec069e4c30f477662cb6619c4f516abb9a133431
+EntropyPredictionResistanceB.12 = f6a098d979ba71864fbd6c14921a1ee1c6230a23c1efcfde66a72a971836294c3758b6447239ab57
+Output.12 = bccea496ed48ef68f3f45ba49cd6ac5c71154d2b709df429673a45c405688b71adf435261afc46d6414976340c7bd32eee7a4baa4fbc4baae4d807c3c7459ce4
+Entropy.13 = fee8318d604cac105344592f414010ade086cdc2f0d41345a773e7fd6927be7e984b7b512f93eca7
+AdditionalInputA.13 = c5d258a31616e0c4f70da4bb472045c86b14476cdf0bc6f1179e2338d9030a19ffb8c46a628fbc55
+EntropyPredictionResistanceA.13 = b8362405748b1d5ae957bfe5794a5578dfa8f7510369be62d6b086e466291e5fa007999021797d5e
+AdditionalInputB.13 = 5bb08ddc6285032a774867ae6d581e9a7b9ad233ef663257d8087987a68a7125f6bb2112394df08a
+EntropyPredictionResistanceB.13 = 8aa6cdf52898e5a0a51ed634c3a24108943d8c495077cecf9eea6896dc1504d741cb46a1cb43d540
+Output.13 = 1403cf31f0e9cf5e76c3785628f18b22acb162916be52533bca11e2777cf4ad2a053ffd4936b799d2e2a69368b5e05e2bb361a6db310b55799b84f58c17914f5
+Entropy.14 = 92e974f464bec1d6086533addcbe817d8ebedc5e18a8be6affd4dd15880bb143452c873af2971c64
+AdditionalInputA.14 = d3f64823ba059bc1565e9c252d2d29b16980b1d6a982a300858bf210e2feb2f09d10a4a6fe369956
+EntropyPredictionResistanceA.14 = 3b51e44a7009a698264577b8e966d5d4a0fc2b116ad488f97b8159eb70fb58d61c738f5e01a434a4
+AdditionalInputB.14 = 16d262848510e407c7680cfcd3fcc27b8647fcc0155426b3e7b54bc473ec3d57f02cc749c020eae9
+EntropyPredictionResistanceB.14 = f6d98f69302da7ad42b8e580a9d755e929fe39fb0436140388fc7160d94f6167c0e150566fe5310f
+Output.14 = 9c7766b3ebb27f65539f3dd6001ae45c85bba6d6c09e600f0b9cf5e02f30b0f8584e696c2fee0239d5e4d5b623700ca98c94e7ca82fbb8b4643549f29d2df244
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 4ea0dcd12d60c4fe4d22c808952b13cd274d973ce2a2d8a23ff99e8f86e3b9f705ff0358c662ec21
+PersonalisationString.0 = b9eb4ff39d40c302a8652a2d084f44544b53ea0013c899d996a1442b084f104a263142c79525af17
+EntropyPredictionResistanceA.0 = 037cdfc60275030678537a53d55db59e2e3d5eb809e335756a844d310f39690ead4bd3b33b499842
+EntropyPredictionResistanceB.0 = e0b86b4b5ff48794119ac1c91d11f91c745833e68bb7d56af459820682b132ed41b18e7ef45efcdf
+Output.0 = 3c7fe5a0a09a533421ea72cdca52cdd34e95a06e17498016f8027f7bb05dedb3234d5cc5aa47a6d50b47bab45889969c3782822ef4d448191078a660fad2a388
+Entropy.1 = ee874cb7582d390ddc2cd3f344eeb14b397a6eeb46c67a18f76255f36190ff7afefb5641af91dd2e
+PersonalisationString.1 = de6a612ba2ebf431367ebc0e07e11cfbe68f1fcc5fea306b218d9dfaa5c3f01509c01041e6c5449c
+EntropyPredictionResistanceA.1 = 58317f80f15335897907c51c5f164da4626346a4d617fc773715d4c6ff1d58cea70f60dcb2cca9aa
+EntropyPredictionResistanceB.1 = 6ecca69d5d69c37b7070cdab3f844cc5088acd80855e1f60dcb95ff00af0b3b861591223020441b0
+Output.1 = 2a0f6b30f9677f19b09b0a8e05adf2978748a9e212a295e679967642860beba44b0caee5c1b058c3c6ddbae1d6cf1e0f4c0a8a0d6d7984459bc92359923eee16
+Entropy.2 = 1ad90b3f17c1390b8606b8c88ec6f7fe890e76db21480ffd42fb7e20d5313d87756989b3876e5384
+PersonalisationString.2 = 8d50a933da141ca8a3c504c4d624f239519b09fd831af045ead8ddf01bf362a578fc60603088329b
+EntropyPredictionResistanceA.2 = 57561fc8e1712fc63797e193df7d74bda77f42f5f531227b01d928192ff7d6ccd9bd93f232520b42
+EntropyPredictionResistanceB.2 = 2010b17f1ed446a12406e7e969d86f3a6b393a9efda18b16ff63fe82c6a1485c37e08ae8495ca028
+Output.2 = 1b964f056519254be671ae0817d715e19afe292fa67e1101270464628851ab6db813e5f848c0f9b7ea643d5267b76526bb5dabc08b6a02b44e904aee26d6bb7d
+Entropy.3 = f4a5fbde09802e932fe76d75318778714f09c0b78e252249c5f6428a7764928994c8ea6f304b14d1
+PersonalisationString.3 = 35ab4fe81121524339e40004fd3f4d7069ef0d00a5830cd44d872af3d62981c20ca1a6664c1f95d3
+EntropyPredictionResistanceA.3 = 3d7eb8c86f80186cd4370390ba39214f5dc2823787606ea6a34ada8fa129f628c214f4841fa3fc68
+EntropyPredictionResistanceB.3 = 1a663e82cbf433f73e8602ac503e6b8672473473791a60075b9fb1d0357ae7a5777d68b19a27572d
+Output.3 = 2d83a64d74d5c62966837ac2d6ce47b4df14a76434c6685747ea084a7a15acdedeaeb6e03dfcc569f9500c5fded56c15763ac85015cb318af89ed4aeaa3878d1
+Entropy.4 = 4ee980cd0938fb82c099084b617333159016a44137a2d3b770cf4975c380b6ce060af585bc080715
+PersonalisationString.4 = 0bde394e7e43641cca85717ded610cc1bd493426ebc8c9686db5ef3597aa7032c6f17e769e8bdcae
+EntropyPredictionResistanceA.4 = c58457080d9dba5bf9d6dfae60c10a5e1f43f75c150608365a94fbbd6b49a9235a9f094f230add03
+EntropyPredictionResistanceB.4 = defe93852c3e9e31fb88f868493ddc5f142e1b5b5c2137144281040d5087547199371e16caecc75a
+Output.4 = 1f52ac35e3395b8ab809449d3d14a64bf07b5220a6348e81b5d47dabe1408f93f5b540d01190d9bd2dfbe866449a68221ed43c23f17200b35b3cbb9ef31737bf
+Entropy.5 = e57e6ef98101c9d3ed9a7c25c3448f57c0deb679167022ba106f9a6443855ad65c94d4b2cb7313f3
+PersonalisationString.5 = 4c47f3f059165179d43dd3724362e760960ee7c6d72bd444e9df2f03f7b40e0a9f9f3fd6858b69ef
+EntropyPredictionResistanceA.5 = c6be1c309a45a6504e71f65a58dae65f2914753446a46bedebc549a22ada9b45d950be735b2f9150
+EntropyPredictionResistanceB.5 = 9bc9f4e6a94d289b0fe711881c9f809a65e552d81831aea9fc346f01a333701fdfc9081634976619
+Output.5 = c1682e5746e606d4860a1f660b8fa356e134bd9f457d73ec0b6767b6bae9d92579571d63a2032917b5d41e2bd12d04b9546c42bfa1ba8b4ede7cb44f20d4e2ca
+Entropy.6 = 958348b743d5b5c2bf0dedc7e2e3593d3b333e1d11e7f397d8de5f1b03c72572fac703027b707e20
+PersonalisationString.6 = e1fc9ecd47be720b8132669d20755f2437aea75bb8f7a649d2feee2e79cf1539babdb2ddc9cab316
+EntropyPredictionResistanceA.6 = 8474252d0131a46e16aa0fb41cc14d2b7fe9639321b65ad19b18fd5fd650248290f75b7dba1b5b0e
+EntropyPredictionResistanceB.6 = 832497d07ad3e3e1f9a9b0451078c4110294590570e9478c186da21777255cdb8c95bfafe95955c0
+Output.6 = e061d9d32daa66f5c1b45f3d3f6eb1b17929abe6c512dd6acb74ec105bf72297ff4bb187fb667478ee88db51dd72816e60f9763973bd5fa9e90d5cf09e1f2855
+Entropy.7 = 7bf7d4c5b5bd713bf192ef3f626bb82168262c1eb56e04911a59e0c4b3182125370583cc49a13a67
+PersonalisationString.7 = 4b2a5513a3b9aec3a4a11fa43461166cc59e552197a76bf1f0a1bae0301b5789d2e3d9fe63576e5a
+EntropyPredictionResistanceA.7 = 0ec27829f312b3d333757c65b716c7d3b48c6b2de16ea83fa1eb000bf56086f359881b8798f6e904
+EntropyPredictionResistanceB.7 = f855713650922c4416c23dc30e644ede4f3a7d6888585f3835810d2fb5b6dc354a132adc1584b648
+Output.7 = 2cc4faddf2aa240126b4a4de2d1bd896b4cd7d4d37e1f430d903e52233b25a6e465614931339ca60fbbfbe811ea0b7075964e2f5d50777d0e0a8a14f48b50df7
+Entropy.8 = 3d6de5e2783ce845d461a142199a57bcc72a1afcb4dc4c613e20ddf0c23ba4d98bef8dd3f1e36206
+PersonalisationString.8 = 4ccbeeebe6c159641bd4acc5d334c39558e91ea87128e95e990fdbe1b8e18be7e887ab1a08db9f0e
+EntropyPredictionResistanceA.8 = 6f1baa4dc25207836a33932fce35dd4550431fd01c6ce20ae2ea05e930a089ea42c21e881c837c0e
+EntropyPredictionResistanceB.8 = 6145de4f1a1d25e4b8cc6bec9d0c5efb392d3361b51189f664fe6aa6718e4a99c072592970250b0d
+Output.8 = 56c35cc7580bac974578f93a323f13989e147c09213d849dfdfcc5f098dd8782c49d743731b7982fb4522bf5d8d54f1c78f3d25a73dff579f219763730e5f461
+Entropy.9 = 61c827ed8a14c9799f55d99ebe61f8bb08057b4d0a5da51097a1cf7f9edd85c81f02126d25df77ed
+PersonalisationString.9 = d6dd813385e5f6669d3c23ef2c0bf18055c75b7690109cb37be253ed928d900e4d231e6e2c50bbcd
+EntropyPredictionResistanceA.9 = 8a7024f2f9d18596601a44cfe5d18653dcfee6b46353c0af4df541d92597d7ef6baa6a9f90356453
+EntropyPredictionResistanceB.9 = 29cd1a5c278ff07ca7f209d55a4aa42e8d5575763bd9d707ee82025e224b666d133f49d6c9c48159
+Output.9 = e0621d31f0ce430942b6f817ab61be8717e55a54fd80b609f45fc6c359a231f5d4d28ed36b18ad626cca309fc686dec043590da976a21cf83c11d5e44595ba95
+Entropy.10 = c1bab3c4ce68a439d356ee5bf647173f08a4327bf68f454c7d8c580383251d14f37e8b56349899db
+PersonalisationString.10 = a0f9b3d2067de669e20de5b9ba0bcf3162c013eb31e8dd6e8a2429636b3ee018421690352ea617c6
+EntropyPredictionResistanceA.10 = 2808300c557175cdd36839420575481a43b2926f88d4f96cada8173dd288901a302483a388b7958b
+EntropyPredictionResistanceB.10 = cba542e36c71a8c00a5722c749bde83abcde2cf3735b2520092a8f1f2fdac426a1daa1d07b4358e2
+Output.10 = dd4b1fc8d3090845a1d92884a0184396bc90be40b583a5cc1d8ae1330af47d475148bcb5f1ed2103edf4d102c97637e01b0943c27b0b3f46948a4a29d90be22c
+Entropy.11 = 8e37b38d5a597b70ec0fd5681d442f10f953c65024f90eb8ae368aebfdc9cb8a2cbeea03eda2bd93
+PersonalisationString.11 = 1155c57d59e4f2f96a821450b94d8a8056fbb33b3ab9295669d712122b48b1a038e2d794b4f44d46
+EntropyPredictionResistanceA.11 = ea87e5b98083db399146c3c3a058a631cd454db273233ef956f57359c8bce36aa236836eb730e50b
+EntropyPredictionResistanceB.11 = 4750611f8e46b911733767f28e6334f0db67fe4a817254d90b245aa5b09f779d1853bd67a6851abb
+Output.11 = bec9be099f6f6beb961fa178f85362a5f83e167232ea7ca3209d9b2d9719175665e26560e31933f8da706b1d390277102a61de8911a1086300c71dec1c67ce9c
+Entropy.12 = decbbad6354603adc21c979bfaf2bca659248fcf2dec66ed7c709e71e705519c312186d1b5186dc4
+PersonalisationString.12 = 2eb9c1f7b0308a3324bd5622572c8638f7500bfa3108008d8b5278e179ea892787346abd56a0ac2b
+EntropyPredictionResistanceA.12 = edc680f05640380601e692dfede392ac0af5a98544766ae73c9477cb73a419a7104e2625e121796d
+EntropyPredictionResistanceB.12 = ea2a160b4abaaf408ff945231a741efe0b4795647bd6b917d6933479b72452478aa766ca834326c7
+Output.12 = 394a8c5e3cd4c366ac4b2837d8d7461a72eac3a8937ba0580959b1ba7edd803cab8a90b826a34ac3048a7dcdab7df73c82ae377656ae48093fffff7609a673a0
+Entropy.13 = 06433ce684285c6093862e043c62bcbe4bb7e5276ade0fad10a1c31aa2c788bd038fed0c6f14d05e
+PersonalisationString.13 = 431d1e4012e4fda146c22f32e2136424d4699f60c63b8eabd2575e9be16b989c948b00e75b85fbe2
+EntropyPredictionResistanceA.13 = aa6dc2cf88f125232290a7b9e5587ca1f20d5d36b4950d91c7b98993e4c0afcd310eb3d03bc8d580
+EntropyPredictionResistanceB.13 = b4437f5694083e04b1e900b2ab4d88d997851c7b4ae06783f43a52851ea8dbd8d6a696f5b0a430da
+Output.13 = 92efc32901ebef997c09742a31b26b2752c79d5c72fa370b5b960e8e3f756a83bd75e001f4bfe823362e7f10504098a9163e23468da11a2b3d98ebfdf99122e2
+Entropy.14 = 71443f5d7213a5e7eb268c0c7bec512b9839ea908692d822e812f955b74308c618b0706d7460c8a5
+PersonalisationString.14 = 51bd28eca70277cb41fa23166353e5a475399ecfb2012d55fee6b1eeea6f507fa75e4634c3a1e802
+EntropyPredictionResistanceA.14 = 828357ad5c99f114394f578f56cd7e9a5da671636bce00a4b22d77e98dd82b631eba6d9ee583cd51
+EntropyPredictionResistanceB.14 = 6f256e9f5f7a84ba4fd6eb19b6ae20b27c26660e51982bc4cf8e28a2dc43cdb723cc8a727c2ea91d
+Output.14 = c176910a6a7c96982841c0b603b423b2fa67c267b5388d858a4d8dcd69d6b67cb96816892162147e38cc602afa459fc5623da0862b74f1e8f569bf3b1024d881
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 6a5d9d87982624c9809e18032433786408c2f5481c0bd81179f3970fb6b55b1b78c36eeb0a2a8994
+PersonalisationString.0 = 2e12d9222c2d71a8344a4f6124e78c4f5b6fa1cab992586005de045d4c4c9a72e4a171257cd26aba
+AdditionalInputA.0 = fd5ea080eb32104e59f331e0f489f4651f895b4e4304330d0e0c65e5be23bcd9ec4a365c30dc2260
+EntropyPredictionResistanceA.0 = 60a1a1aa8bdf251a36c0d3528846f83f3e464114160f6681ce09663bd4dc73fd11d6f5e3e5f14833
+AdditionalInputB.0 = cccc70a0260745808fde552f54fe18f261084c656c9695411493ff8996bfc621b6d31a4da88a39ee
+EntropyPredictionResistanceB.0 = 5b40b964c9ffdec2e704ef7f5d3a85cfa67fa7800c89afbfe32487519e48758126a98a425a921ed1
+Output.0 = 4ba36c4b4fdef32a50bf3498b7c8e2a1a9834a6295a33fc246cc3be20f0fa1334400b9e4fb3699babc844a62e571c8b74af232994df73c05ebf88c5424dc89aa
+Entropy.1 = b5cd0981ce9e51fe436a2057fc76544743b0039b6e4e52bf0040230b6f41b37239b0aa03013e4650
+PersonalisationString.1 = 36388d1ebfc05ec0cb627c60c1f605365e5ffe35988e1582dff129eeff97c146ff9b43bb5740f7ea
+AdditionalInputA.1 = c48ee84aaf06caf754b651e6761c641997a00033e8bc7d544a1cc0d20c8c56eca75489944ee2f4c0
+EntropyPredictionResistanceA.1 = 919bf69e5fc67ae2b1dd705a4a3a0bba2d77c492444a718081569377b72d85d4504d94aa1fc6e43d
+AdditionalInputB.1 = 0a9babd626b5df2e3e68adc2171a72cce7af0d8910448d54f4f2c375c1fb42192808ff2d760b182e
+EntropyPredictionResistanceB.1 = f8927355342b2fb15b032dc268324a7400acdf1bbdfe24f9bb3ec223c93c0a87dfc8ed1fda1e3483
+Output.1 = 62501167cb1f3d71cb9b092e3b792192a0fc2648a376d91ecbb29d0072b8bac795bae0ea455846c6b16e27d670d98964731d3dc9500fbddb165702de45dbc023
+Entropy.2 = 02f3c4a1dd69bf281c0b9c9ddc27e68d8a90bb74dc492993f4dc0dc6b249e237bb7a54069d956735
+PersonalisationString.2 = 6c3040ac6d6943ed1800742fd1366161092b3636efe2298506c696aac1a7a9d89683b40e27bf4a74
+AdditionalInputA.2 = b1b72cd49b5d45fdeace1c7f470e9059b2219fcdc33e901e960c8e7072c543d0721038807d9b9fc3
+EntropyPredictionResistanceA.2 = 3b3c0ea6ac17312c98458145838220b135efda7943337ca4f13626be6a4f03d23b23980f6785ba60
+AdditionalInputB.2 = 2a7d8c963715e4db36e53e7f3b8a5f092f904647a1c8ef27a5bd8805105a50f5e54fe7d206eb2210
+EntropyPredictionResistanceB.2 = 20bbb04d85abfe7431cbdb6896953744bb18c8c0f364451ecd47be3bed784f2735b30b4a97c697b8
+Output.2 = 04436707400fee36dbf8632e4097cb407ef7736806246f9e6ca46dbf9806db3c979fe067d27ffe35114d2bf20b1e7b3e4deddf17a09ad2d3bc8aafb17645fe68
+Entropy.3 = d8e09751edc15863e7e36e63f773b8230a2b83389691e8c005eb153fc992539b1d7f35753b00b169
+PersonalisationString.3 = c327bc5452e33beef55d39ba9be5a3517c8bd46dc663b879c23fcc9d9eefb73be596b032ddba224e
+AdditionalInputA.3 = acb2562047fc8a85585510c2310f19d7c991a2f566a78aeb89011b13e71d28c68bfa87f36666bd30
+EntropyPredictionResistanceA.3 = 653a927d92308faffd0db82ccf5a74a23fa1b43a13f0c73d09bd0baa79eb8c30f33d430ef485af82
+AdditionalInputB.3 = 1c49c58d706b29e195788346d10c91e5864f66c960ad3b02f9e9d548565a8904ee99655a8e2d5335
+EntropyPredictionResistanceB.3 = 796a514d3976d424dd9c494c92c439234030b1989de8fafaafd7717fc35c9dd7288b2136f05f1dac
+Output.3 = 7139167835ab7d08f4fe34a5b44f765baabcce9f9053ff85ad99985c2320604a69f1a6e0a787b1af19b707244932a52b97534ac37ca9010bb7925ef894c90a2e
+Entropy.4 = 2c8f72015931e196f5c4fdeff3d27085dcdc4b4dd5dd7745d876585ffa3b5c1e526d6bf5fc924758
+PersonalisationString.4 = 14564a840544063bc929200d1974f28f316a7485e780c9638a42d58f375a26ffa704c0c63d2c07c8
+AdditionalInputA.4 = f641f31c5daa066919348018d0de2fbd4faf690cdc0aa102e09de66ac9253d2afe1ff589a941b098
+EntropyPredictionResistanceA.4 = dbbcc3d6ea9351a8928fc6d44413ea030c6e8137a1741bfec1529135442e20909d900f15f0308e05
+AdditionalInputB.4 = 4c2191c1f2430686e11fac332e4d00dcbad1437f281b7c22f74f9b2e8817e818bf358810d20d680b
+EntropyPredictionResistanceB.4 = a135a0605a5456d921b721e089dbbeeee120ddd9459533516e6a66f25688320e56f9d034b637f870
+Output.4 = 48f0fe50d990879f3eb37efcd816082d6ba651f5718f468305a16ac8d51bb0342cce199529efcad5590bc96f765bf3fedd564302a5d64fa0b63b14e782650445
+Entropy.5 = 6ecfe67c496ce18fe89898c06e63fa0786f94bb46518d324c2a99ba35a0fa7f521140c76c8bdeeb2
+PersonalisationString.5 = 7685646183c8c352e028d122777da0f3b4ee4897ddd6846af9949dee9b95a4479727d439b53a6e9d
+AdditionalInputA.5 = 00cf4861378ba740dbc424384cb80d8e2c60eddd7429baff387363a43170144e117920e6e8c3d49f
+EntropyPredictionResistanceA.5 = 23d7071631455f05a1307a48cda4907ff79c754b6528513f5c8640e7811ba80ae931af9a1d3e9546
+AdditionalInputB.5 = 7112388e5b31fd14cb8257e2a148e415dd9a081b626d0deee7883c03a2145cb8e203388e8572239c
+EntropyPredictionResistanceB.5 = 510417c8582574cde09d3e980f3810f215339adddbd836cbda19729e0b3b2d268b0d5fad5e95049c
+Output.5 = 6540b11892fb2eabc79252045481af4f4ad691adcf4c8f4ad5e9fec500924af97b53958ebc13e1317024f90c899dc257d095462c984d2637445e4a480289817f
+Entropy.6 = 35ab1de2b130670305609a16d747c75c02dc2d46bea05056751c6a3ec401d67df0242d5f06786d05
+PersonalisationString.6 = dab7609ef4fe09d9c516140da15d4a71f65d5401b7544a76bfe19f7c80497106f8a51f074637d868
+AdditionalInputA.6 = d645ea034e599dd42e620fe26f7754eab85cb36a052c0c1ee48a09a69eaef7e5821bb7ff75e292c7
+EntropyPredictionResistanceA.6 = c06f14906a186f1b95af465cf54af4ef49b5f47cfaaa6841b161a54c51ad061dfbe9f53ad04001db
+AdditionalInputB.6 = 17d827d2a8a1711396442b8696311c4145020067b5d7b51af6357592061445fcc363ed7c445ae822
+EntropyPredictionResistanceB.6 = 9a74e7783aa9c43fc8a45a0c17129ac39d84c847db1eb2a7d7eb6cc79e7c39506949eac21f916702
+Output.6 = 08e8544803cea5227948c9da2279673e31e3017cd05e696231b116b1cfed1b6a20611d8528a6930fc19b145253c5aec84144944621dd43bb3d34827dc6e2faa6
+Entropy.7 = c10046d84901257f0ac9e3084d60bc521311f22b72c770440a808edea950ffac511eb95c98c245b6
+PersonalisationString.7 = e266d2abf25e5a3ac453c3e7ae6370cb536599e1c394c7aab74024ba7648b9b9a0ef3dbf8714ea5b
+AdditionalInputA.7 = 2ba2fb706a54ae14ceca0346ab3b632496b24b9973663b9a26404b9ede5539762f16e835789ab4a0
+EntropyPredictionResistanceA.7 = 3e2fdcfcc5e32228757cff1a4bb172627a212b47dade8ac150a42b777c169209748e96fb2dffaf61
+AdditionalInputB.7 = 88d3c7e9704b8b11b286abe3c2e57a6a8ef746a15730bfcff31f2b132f489384647896357cf84fb8
+EntropyPredictionResistanceB.7 = d49bc10d3fe2508eda1023c75af92de6197ac5eb75e6a87d7658bd04e30e396659958e2817def4f9
+Output.7 = a7e3990906fdfc8760ffcb04035e389758e0f3672bb6432f3e00f07b2bb99ef34cac8108b9166d001265705442075791919fa9047bcee4349594e6a5d7e906c5
+Entropy.8 = 803a9324ce3997f6f406d41c56decd808da6677e8e72bcedbdf607cbe61f1a74902fcd5549d09170
+PersonalisationString.8 = 4a359e85492e9de5026735f4e425c67c545924501ca179c366ef57fb54fed5246efed1768f496cef
+AdditionalInputA.8 = 5307345932d8a5cd699debe862af9e4f87f0ea14df325b48c5469a00a79c22788b3f0bb8df753064
+EntropyPredictionResistanceA.8 = 33ac9f3997d19c7ee126d44a6e1283dd6b223d9ecfcaae3260e2f857578963f352d1525e1094f142
+AdditionalInputB.8 = ceeaa5eb72e9b0b940231964118c2943d3e4dac4d72c95477d398681b1e5a00e2caa3d921531074a
+EntropyPredictionResistanceB.8 = 54056014935122a47230db8c276f1158707a6e976855758517aad40c6376cdf88348c43653959a49
+Output.8 = b6114da308224e1f9dd4ec150bb996c09ca0ddcf24efe368bdbfe4c6b0d33ae66caeed7bd784a5dafd2b43f77c6b1a0088dca6d92aea913ff85b79a826982e15
+Entropy.9 = 0b3c6c23fc607dcf21f77205e29c8521125349a945b5040e23f035ffaa7aec9c3f25d8ca0a53fd0c
+PersonalisationString.9 = 9ef7682491da1cfde8f1075fc39ee31a5cf6cd36959a21465970ce8ddb6ab6d7286c1f9dbabaca0a
+AdditionalInputA.9 = f9bcab5f68e5b529db5045afa2f87183bf626f7dc4ff76ff73dbeaba3c32ba648e21eb4e954e20a6
+EntropyPredictionResistanceA.9 = ee9f7cf167cdf1b0b098c2211d8baa2cfd0d4a64e3ed84ee6ee111b84b7dda8249df63b1f0fbbf61
+AdditionalInputB.9 = a71263609c6b7167472ff4f38983737ec6950b61e69b50f77c81079ad325d62238230a0add47b954
+EntropyPredictionResistanceB.9 = a7cd5e840847feffc4318b13faeef94e842545cd5cf691771903a9eafe6619e0822d56f409e74c89
+Output.9 = 6d4b7a9cefb23c46c5ca9e233b0720cd224eb90c623e508768ee00452ee53dc7fdea7e79fd338e2dc9d670a0836678cebccdd6f180481374a650e2a7aba4914c
+Entropy.10 = 04693ec3ea1a8d69794887456210d6e8a634950a91adc5e5822cfccb79e8ce0e0945d12da4abd4d7
+PersonalisationString.10 = 25ca10f64313b84130256a4056ffae7fac2b0c78fd18c3625f984fb04020e990e7a63c9784f4d81c
+AdditionalInputA.10 = 6996bec497ee0f85df929aeebdfa486707d045f4ed9ca4c482bdb65ba98bc9346b40b74e8f100e06
+EntropyPredictionResistanceA.10 = 3c78c4685c68303de160af7a1e8d7ff4e3d0587ca52a0f66ce30e75b48d2d77bcbfda984be51ecef
+AdditionalInputB.10 = 3083e9a61bac25fa9ed3713fcb0bd92642dfb6b17bf4bb66b5ffcbc2b5015dc40d5f6b0de929fb54
+EntropyPredictionResistanceB.10 = 06900e743f89a641b75d7bad2bfc348beb9e0007dcc687681938008e148d773a8fbc4d827e6a369a
+Output.10 = b0059bb567d69d5bf96a4289bf93a28d6134dc6c66d2688f639b83f749559f26d01ed47f87e7716463da38412d979149beda5360abdd38d531a2537442f551b2
+Entropy.11 = 5a2252c061ea84ce1e9a8c79e2d5269c397437d1b2aea370cfedaf75e2be2c34488134ae1aa00a3a
+PersonalisationString.11 = d71fa33450cb227acbea3f8f05786095dbf2fcb8a0ae1934251b45de1b140674ab817cd15aacc246
+AdditionalInputA.11 = 0d268bcba23c35d08a377c8feb241e05048e5e0f43e651874cfbdd7cfe3a7aa1df01213910c1afb5
+EntropyPredictionResistanceA.11 = 0a42fb5908e1b89b73a4a39b53313691787a87e97df95a151ee2d4117e4ec1701def084f7ec3def0
+AdditionalInputB.11 = 57c260171a71fe146469b27da242cc4f5496558ddb384a58daccda7f3fec2757b5261262eba6c362
+EntropyPredictionResistanceB.11 = 6e38b0c66cd16ebadff88e921bc93f9a1ff4b158b59f315b060e5fb863cd46bd8bdd8187e5f393f3
+Output.11 = e15e4bf87c5ecedef443a27adda7cd139d537acd254012e85dc25954249c6c2144e9564f97c18bad83d303df655001a0435be0a3e120d308ecab1db59a77ced9
+Entropy.12 = 45fdd28dd9077da59b66cdfa93b0107116865fba2a6d7fc5ffdb15c3e2be67c02cb5e373ec82f9f9
+PersonalisationString.12 = 30c574e56fcb775d42b4f763d2fde26f1bdd3ec1a7eb0263fa9253d4e90d286d63335254d57096af
+AdditionalInputA.12 = 6db38b4552bb094d88ae982be52c703c82755348b6dad55e55170fc77788504f4c8124a3437fd26f
+EntropyPredictionResistanceA.12 = 22d7b25ebe03408992ed4406d0ea38e023a1b6f8923a3fd97a085a46fd01878ad3c021977f9c1cfb
+AdditionalInputB.12 = 55c3332a119e4d2793ff91718bbb019b791df818c2a3fec2ee55c5d042b441fa0afd2394a165964b
+EntropyPredictionResistanceB.12 = 1d3d06a533abf44ea66c9aac9f35da28005e24d041ce0b24aac6291d689a022eb798a3e5df4bacc9
+Output.12 = 045c58e53cba7355eaff24abdbc056f0af4db243d1bffbb7e16dfb195620ba875e82998ac592ddf074187191be0a3ca36375804c153d8b7a380f850b95f10727
+Entropy.13 = ac39eb7dbbd672cc4235c837e9b1e0ef78361b2e3fbe5fe4ce14d87c828db0c5ecf2e438d45c4d4e
+PersonalisationString.13 = c9aceb6bd2df45bbe6e7871476b2b5f5d9c2ad2e2bec7e560447afcc089f48d75e1b8b489727d0b9
+AdditionalInputA.13 = f66fd86d3f08d53884466c688ba614891c60bb2eed7a208c476ff55270e0977d9bce30a3a7e27bea
+EntropyPredictionResistanceA.13 = 31912f0a3d8d32ad3958480cac711889d6a998890a327ba4b5bbcee1f78f008f31b78a57a4d2ef0e
+AdditionalInputB.13 = 4e0c20e0fbd654afb229052ec64844f19a495270a5f1574ecfe2f7e3adc9d60d787f4cef397d5e35
+EntropyPredictionResistanceB.13 = 0cf7b9a2d4e28cdd7748000e28e4a1a3022c10ef186b0d831e2ca6925c3f377bc3a8f258f5ae731c
+Output.13 = 007f861a7ea36f377a662fa86069773ed43ef8e33e393228e3d8859021d232f3a2eb44533c6cd85806df8474923410628409b54ab203acb713b83c5f94741a66
+Entropy.14 = cc31c3247cd0d6b7c8435b647ba53d2377f6f279d8c00a291ab0ecb3661ea5f69bdfab6494a51d3f
+PersonalisationString.14 = 155aff763a6816e5f9970ddd5e232af7c4aacb324680184786c02a96c14f20090c8f535d3c9f9da5
+AdditionalInputA.14 = b6e99d5d8bff8cad38eccb8037d8a1923a47fc38c631a8c3bfe171a713c67c91e8787e83abf0bc33
+EntropyPredictionResistanceA.14 = 06c2b07b8895e3ffe93b8f012192a81005315a04843cab847da690ad5493d2a71bfd8faeb527cb0a
+AdditionalInputB.14 = 205f0f79d140c6ffef742bf3cda512a3fb84af66d058e5a34752cfd0e4cb82fe3e7fab9489bf5633
+EntropyPredictionResistanceB.14 = 1989becc20da39682e67b961dc4a2f10a73b037b21cf055f1f12e8f59f047200dab4907e5e8b96aa
+Output.14 = fa20e0054f9edef75b34aa4e76b16dd6d9d54de5e350c879e16541cb80a4e64c3f392a0108c792ec8fcec84721cd71ccae15de31f3eff57e09f024506857c3e9
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = f7c2e8c3e10d89e771763f2402c5f84bff9f1d855956e6214c4a7966847f4b5dc69d96c4d3161d7a
+EntropyPredictionResistanceA.0 = 832a12a2faf89a38050a7751835034fa25c88747e4b08e1a2616291fa364b7344f6e2745afdda5c4
+EntropyPredictionResistanceB.0 = deb9d8bcb430250ce5296e72772f0c70d488cab4fc1f847aac1f669b3f473416c98d497a2089a99a
+Output.0 = 051d21784ee64e7312e2ee9304083c410f8a2363eb5737422ead9d5c513b3bc8bd18ff95a7dfe58da41222f8f4cf517629339c3c129155c4881016ccfc3364c3
+Entropy.1 = 05047448dca98421a82369575bca116090f9b9a70144f24cee0eb1d11fb5adac44d0870b94eb4833
+EntropyPredictionResistanceA.1 = 4e3374095d77daf1914bc170d65efa481ee0e50d14b36ffca0731030c19851ec1ae62437ab0e31b9
+EntropyPredictionResistanceB.1 = 285d86ca1519c011c5bb366f8fb4058fb77748dd08982ac3612ae0e7ec55384d54c61aa0ca07076a
+Output.1 = 24d06121c1a2ebf25d0d56dcf3381e32e8463a90690885106c616a87798f2bb2bd35966d2733279686841a19dcc0f0eaa73c58ea274a3813c1abd72298a32358
+Entropy.2 = fdfedb2bf6ca16744a0e380f43e09f3d260a2c524da2c16813c7598eb8bae037dd50c88d93af2b51
+EntropyPredictionResistanceA.2 = 680c447f6d3bab7ca4b12098593ed6f39b1f243856165c87c6f44e039774272f064a120786ff77b0
+EntropyPredictionResistanceB.2 = 4f7664cc627970271e3cbe9dd94c6310473e93c7a10ca92f34e3f5fd6909e7d10cf551eb180ae4cc
+Output.2 = 59e056d6e0ddaaf5cf83c63398e144d17dbe45594672233a1c1611f03d54fc1b636114413d61e1508980989e739a5b6d0fbc8f6677645fb6b20c46a7fed8ca9a
+Entropy.3 = 7e48910cf6aacc1e2722a30b05111945d254ec029439a7fed4d4802e1d5b80992ed777939942eb39
+EntropyPredictionResistanceA.3 = 693fd9ed85e78a76b5b5d5f4a6febb9c36cbe1b973b5fc1674d543ac3f182b8af17ef3ac50e61b26
+EntropyPredictionResistanceB.3 = aef7e176c7f5eab434bf461d08204f03eed395dde9baec6aa106b03ed9a5705043856052f3373e22
+Output.3 = b0cb41353adbfa346ff57b22f6ab30bf94ce79f53b00190c579d5ffe6fcf6b0d0c35f3f6bca15ac7a5b5300234bdda018e03a4534e0cfd895e57c6bc97b1dfc7
+Entropy.4 = ae054614ebbf3ea57a2af7b394680b86e9f30eeb744dc81a71a659ae81e971b891704982c7033b48
+EntropyPredictionResistanceA.4 = 7f0ebb7e35b663e155a09ca13709741c354fafe361d119ba4cc9d3109e1488bc4db8262860e78155
+EntropyPredictionResistanceB.4 = 5bd899395c99fff6d86c8e254a07a0430d0eaaf4c96cc9060e8733e27ea5472cb64eb24992f35def
+Output.4 = ec839cfce9fc177ba49e2ac8b35f4c52c6acd7091298132801b133f13b05229c71f025877eb1cd901b65ecd7c50fe73827f271769c263212315524435858028e
+Entropy.5 = cbd769aab0200cc4a90be62d67693e4682912f6aad5a223101af22705c03c163609bdcb48f47bb9f
+EntropyPredictionResistanceA.5 = 26e6818177e1c32885a42b45ab65fd336e6e0cb478cbc5ea52d1bff0367162d129f6a3b140d9fff5
+EntropyPredictionResistanceB.5 = 47e270a886e3117aab48e9b2977fc6567ddd227ca0ef59acd9c47925dde5cc44629274122f6f762b
+Output.5 = 8386354544faa50113ebd4245681bc12d00312794696de7c9a5ca43c9b96947b1caa1ee038456b0df4f71437ae66e98492ca49fb8e0befb47e11b046016886ed
+Entropy.6 = cbc8247b4f4cb3100d6af8dd9403000fe0da4e0f9cb2765300a08e0961e044ae1af2b1749abf3ecf
+EntropyPredictionResistanceA.6 = 3074b9a55ae8ea7dd0f26582f1e44666edbb72cda068bc99c47892141ef5509dcd72d51a3b394a63
+EntropyPredictionResistanceB.6 = 710a180c484b8e9f8fa1b06c04efd0927569e34739c8ca30ebe10fc44b2ed984f2933e7124c21fe9
+Output.6 = 665a664eb1477b252732b26925b092b29a14ccb0e649795dba0d8fef177b87eded48dc99a7870dc65b5b5d47b8785abe6a085e3ee4b4892fc634c58938f775ea
+Entropy.7 = d9bbe822878a719c415bb639c5b676a2f374abe24e9d6e68d5d267ebe35b86c2cf6f301a1a7be0a0
+EntropyPredictionResistanceA.7 = ba95e162780789676a7c2b37865be531edfd8f2207f87f72a31abb1fe818170143bfd9ee0fea2924
+EntropyPredictionResistanceB.7 = b32a0ef79718460e8e3e6ca3ae241c022e8939a7ddb11ba388057d32ada104cb725da54324d982da
+Output.7 = dca0c2c27646afa2eb6e68ce14ae0b2383735e728513e94c03fb2ffcd8e3c4ebc75b58b54a354b0b38b84e352a165356187c4473d3d2faa460072f06ec1e47dd
+Entropy.8 = f4bfd21d2383ad6d0be204633b5e9160a5c9974bd2c89b2d1e525b42e6b68f102e0dea491cffb141
+EntropyPredictionResistanceA.8 = 6b9b57e0f8a2db3be4f54d486c570624cdf02bc4ec25835c90e9d0ffc7a118ba025cd2896aaa2e34
+EntropyPredictionResistanceB.8 = def278109fba66536552936dae8e55fdf081fbe8d27f997907404f5e0ea5046c0419d36e7065ba54
+Output.8 = 8f5e0eb4742815412619fb0258d665d10c14f36d15160f743e7c5fac5b39210ca42a87ccc7049e4770d8418b36cc7eb56682a317690bdc931f519a5015332437
+Entropy.9 = 6b4f090983f280227949d42fb6c10f3eb4eef349e65e3542cd6b604a7b8de16d88dc0c2a66feadde
+EntropyPredictionResistanceA.9 = 6febe6c34b50afa64d02c03e19b1ba2c1b4ea25f509a0ce39f9fc2929f222797141abf1bb73e208b
+EntropyPredictionResistanceB.9 = 8f056d5d1b18ad58b408517315ff717bd8e339bc078565039e580d75c75a941c45db4d517d44a970
+Output.9 = 2d92bdddb6286446e30be3fbd8d6ff01867c791942960e5af0ac1875b2cdabc94be0ba0c229eddb261c2a7bae707e75fa1829f1806cfd95045b95c88d89e2a02
+Entropy.10 = 89f5c7cfe6d5b1c3d8e81ee29be1cc6e2457e5a1b173f9e0f817b4ccd753c0eec9187d0b9cd432db
+EntropyPredictionResistanceA.10 = 2840dcc32676a879d5b49c9a8044256fb5ca0a38bba33ead672eb84c3d4afac1a65f62fcb44b611f
+EntropyPredictionResistanceB.10 = 32389e1ada552a38ff9c89e4fa8e354bc428e776ae96054eb09e1f5ac7c25f80bf1027b3eaf5d091
+Output.10 = 9fe410cefe2a329d379ae6e7a6d5e068053b979256e9487f0160fceb22e3570eff977c2a32bda41488d075f5f74c6bfef807bc4f7bceb8ddcc072ed4f19a2801
+Entropy.11 = ad2f0c1d4591835da1688f3a03f5834baae5bab8ac5cfd7dcdc963a088658442933b87e58afb10db
+EntropyPredictionResistanceA.11 = 2768e5658a39c87707ff47e2c069e54b059088e9e77b79cf67ade0969538c42ac636351ed97882a1
+EntropyPredictionResistanceB.11 = 7d882bf89af175e305dd2801f530fec6da802d1c4ef5f704bd17235a0de5ba3391354968b7420002
+Output.11 = 8830f1e81e74dede5b7aaa91064458572abefcf93ec3a4f3efc4a6e199253aa72c7c71b61b73f36385123a1ad76ffdc7d00538bd2c4294a3491a1fb7678cf05e
+Entropy.12 = 318194f9e88cb95092f733a20e4124d60a0fab1e57c9828be1beb7be91362711fd156b8dfa14e26d
+EntropyPredictionResistanceA.12 = d886164ac0d4566429e2796f3bceb1c4ce5e23e04172fd7cce41f46995bb3a2279049439b723a1d6
+EntropyPredictionResistanceB.12 = a01076b5b7e9063c0f351e3dc99c4000d23a48a97467dd23db4f627c8df50e83c368b8d87bf1622e
+Output.12 = 8b51318993611104b270fff63a2cb326cf44063da497f58efeb8a8ab118525428aee2e3c6cb8e885155b1a6da0fb541ba80ecac77c634d3d85927e829702a5a9
+Entropy.13 = 3fdd8eaa05020de2400a62b3a1f6e7b6b1ba5e974eaac117d198c63814557eb5bd1bd40e5112b2d4
+EntropyPredictionResistanceA.13 = 8de338467a2709d93b5cd4234e34bf91ac37ec433ad1f40ff289e693f0f4a009832489a95e25e3e7
+EntropyPredictionResistanceB.13 = 74a854ecb83d0172f1933d3891111baf620f85fab39133dffa5264a501f0b730cec4381f39b3c596
+Output.13 = 0a186309f0f7093c43fe309c5c492a9a357e39a4663438cb132e2869239736b1dabcd7fe5c03b15a7805baaf3e058ccf5db33c4795de9eb4e0731f50b56bafe2
+Entropy.14 = e88c4a03fe25b87bb9e62e56bd93ec3f347d03309cdbb097158594de776cbc5a3dba72133b17dffe
+EntropyPredictionResistanceA.14 = fcab2000ecec66a23af1381d36e1df97a4341c329f375b3db6d77aeda7c8522c02b14bbd2605985b
+EntropyPredictionResistanceB.14 = d75022692bbe5beeca5d81942443cf0dd78b770b7542cb8fd1be65e4908816ea43fa903a7a66fe0b
+Output.14 = d5f91235a90cafc96e39e2a1e636d9a2386c5214d8616941bb9f4c2fd375da49d33fabec2faca971d6520bab482e33f6f2752b2d054f9c3bb1f50d072978ea2f
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = b4ba945af945358901fe68b6e99886060b50f530a20d50b665f904dd1fb87127135a2a4fc9c65ecc
+AdditionalInputA.0 = 0686e9791f0c567986309da54d9b1781edd23a7f79d434e2bfb02d5c3def4121f27b77c597bceb55
+EntropyPredictionResistanceA.0 = 701e596d0f1156fab3f6197187a8e03c9fcd6dfe7b14785f6633ab7e4213fa65d59dc32d8ad9f293
+AdditionalInputB.0 = 7ff9532f18eab4418c17ec080fe1fd79efe9d0af5e336b23a6f4ceaca7df73c6853b9444a6158706
+EntropyPredictionResistanceB.0 = 7211c484596d204dd25c93808eecfc2826fd976c4486ea3972fbea4e52bdc4ed4a030b9e54042199
+Output.0 = d8f0fadfca55ceab826b4eefad453b7b405ac56b668fee2b3659a26c7e6c22ba96b80d45c8bf0eecb37223a8b05632eaedba5e34cb5325963fd5f721bb372b2a
+Entropy.1 = 8bb925d476ba2f6dc0c4d0a69eabbcfbcb42c5d031020e1fac7d7e8e86f2832118575ad130310770
+AdditionalInputA.1 = 58c533a752f3e67534e957d493946d00fc8299e564622e7c52fbdfdc583efb8f56449853bc493d72
+EntropyPredictionResistanceA.1 = 92cc902a73884e17716ff7d2467b9a0e197caf609340685ebfbe949b27f08dcd6df8f17c6fd2d84d
+AdditionalInputB.1 = bf75f1168390a21e362c06fc74e9133adaaacc86e262c7bfdc719d4a536c95e481014f16c8c4ff21
+EntropyPredictionResistanceB.1 = b537b0af5fbb8b207171843534d01c4c712f4def648fad94cef88a5fcbdb7ae0577e598c205ac6a4
+Output.1 = 1a971da83eb278082abfb55e03ba393c623d14fa91d3f0f673863c5db97768f8298c7cafd0b3f5e9e9f58d3e9e3296119f0be5497d25c853e024ecc21a35c84e
+Entropy.2 = 6ffce55b48eb23eadfcd8d214ce63e02eb47e26366161374aa8661b78c72e6afbb6f4125bf32c7ea
+AdditionalInputA.2 = 45b65aecfa29ff6a71c1bd47c7f7c43b5a959d0faf1fb7d9b27028a959509c3294b122a9dfe085b1
+EntropyPredictionResistanceA.2 = 86fd25e0ad7d02335dc1459909c4987ca1f5d918cffc8dcb3e9afc0effbb6f8d79fe6f852104f76e
+AdditionalInputB.2 = 064068fb0b5019897d61447a335b4cbc7da0b4716dec1a7eaaa40ef90c5ec13fe8fa5e8d5db6f5b6
+EntropyPredictionResistanceB.2 = a4be2fde598594f90777d614a86e51489627d9f99b53ea47bfdfa3eae5c6f288579051dd662ba76a
+Output.2 = ee3c6a2cac7871640ef9a1ccd272c74547d4fbda01702a920ac00d61bc500df17b74acb2fcbcc48787962e8bb5cd3f12b5dc240a26e15b3522ac974e371b78fc
+Entropy.3 = 7852ff0044047d6cff1d4ae92517207d586a79d150eaa59666d49cd8dd18ac9c378c936e1fcc4625
+AdditionalInputA.3 = 4ec1a4e1b6e2d15087e98415cb2ae527f984573812e326cfc1ddaa04323358285e78e22936ace428
+EntropyPredictionResistanceA.3 = d1c2c9cbbe7dacf7e97aeb4bbd2507ac4aab0d35838d71c0d0a574c18567468fa1d70ca72780ed5e
+AdditionalInputB.3 = 4ad697110f904128c282215a4ed7c89432fcd427a4eda880b8e16899cfa78fd879da9f3687dc4faa
+EntropyPredictionResistanceB.3 = 429d39886ea65c1834bce4989c3b996076528dd33d6d4f6dc246ef74c38c10548b7039d7ad0502d0
+Output.3 = f4ac0c09328d990be0bb0120e9c49899965e5ce8f0d9e6961fe20c0be5c844d7279f811684514738caa37e2be661e3cbdd716bcb45d1ccd98acb827137b9c391
+Entropy.4 = 5edc9aa99a5ecebf9929485c00fef8e6d6b16d3e6e9b554dc6999522cccd3ff10f00633ce4223450
+AdditionalInputA.4 = 9eda841faadefd4c6dfdc3ed356b8a6238df6aeaec6203a37ae1d3c7e216bd7c75dbf622e2abac5d
+EntropyPredictionResistanceA.4 = abda158db1c0cec5698987500dcd47a8a63cca78e2dc3b981a8e025834a9f68c6d265737f82b31bd
+AdditionalInputB.4 = 24321097613a7d1d8877d342d3deb5eb079c52c93be4e7ebec54fdccade43cb16317c4cabcda259b
+EntropyPredictionResistanceB.4 = 69c01c3473afc6d765307d3ba134893424aa1bb423ed546932bce0c255aa8632657680fc7926a86a
+Output.4 = 8d9f12073d5239616c1d0e755d28751a1edf712e5736394ac0d52fe2bbce3c5d838efadd1f13bbf8040b5700c96a1e338ab50f8da2a2cd322a6977ce7680e7f3
+Entropy.5 = ba91329224a66f843541c7efd17290e14d1233a75954570e75e4df898ba80f25f75564dd4170da82
+AdditionalInputA.5 = b3a7640327a7f832f17cbe944f6fd900d9afe4632cb57f678d326d769d56f63c954140aa37be13df
+EntropyPredictionResistanceA.5 = ae54f594981b2f2f24fe2a6ffa513359a8cb7188eb0d4806a18b5d1a8622ed85fe003785d4925b82
+AdditionalInputB.5 = 13e3ebc2876747760811c04dce24f2d2d9561d2595d6b678ebc66ff018920a59acfa306f22a6962d
+EntropyPredictionResistanceB.5 = 94ec04f947ba59e28e7013a1c59807f77bfafbaa29b75c888a69d83eeaa49a0de3818a39625a8f0e
+Output.5 = 5b096ceb7b49675f88496e0e1218171925095571b9de2cecc182f3475b8754831eda625c932f8582fd54a634886f4807ba0bcf4672fadd7bd7802ce3008621e4
+Entropy.6 = c95bad13c31c9a5a7f3b16ad3ec61aea400bf2a22b77f6800a6032474dbea269c6d0fb5ef75ee7cd
+AdditionalInputA.6 = 02e70f92d35b0e4182f713a4cbe0e1b4192253853f74494803bd64adc0b583328ab9ac86f1707234
+EntropyPredictionResistanceA.6 = 0e05f15009ebadb23d24f403730f92d2d72bd99f30a342674c601ecd595c504a46e8a273ada1a733
+AdditionalInputB.6 = 684cf1304c305fcfd430ff89c77a15bda0bdaa7306c449174e39b1a2d73e4b3fc349df54a0baf49f
+EntropyPredictionResistanceB.6 = ac20d048960f901c4a1de7925dd720fb00efe6ac66fd7d99fa68dacd3515184913cce87b48468b22
+Output.6 = ad588bdf9d145f8c0f87d8490575414f23e1e922405858d208367a5537249122dbd7b3e1b694eb7f9a934d18485e8961a0afce5fe9f3ce9f6e9c9014063e6431
+Entropy.7 = 0c43257c2151253dd7ffcc28d9c9cf5c991cc380576a7f6fc3e9f62cfeb07e8f0cf87cf18a4808d2
+AdditionalInputA.7 = 2fd5eab453470706aa09c5738a610066b69c69cae00a13b39851c2f117d2a7c46159a26a3d4bcb23
+EntropyPredictionResistanceA.7 = d39db8a3752bb90ceb8c8c920a30bc0159718d1f6b631665258ec4c8846e563ba2439c63d0bd15a8
+AdditionalInputB.7 = 15d16faee23b916da6ca807acff9463c42ed5a82347ccfdea08504d9cc90cb598d32e57eccab1eef
+EntropyPredictionResistanceB.7 = 1759786aacda0362a2f8e3862ef3222f14de595f5b36cc943a166b0dbd47ff671ea3d10b8d4fc19b
+Output.7 = 2f4583923a8c21872cf427879f2949852f49336004d911a47096cb5fdbaa7a62096755928edbf977767bc326103b409eda3bbafc92f76ba0803407c2953d2f22
+Entropy.8 = 233c68a3d9576241a12cac09630c043dbb176d726564a72c7961382a3dbbd931ac3df2cbb23188e3
+AdditionalInputA.8 = 99b5623366bac46d044fc3fd03664aca963ab744349c67e6ae2a1038c201b69764d83b0cd8af8b60
+EntropyPredictionResistanceA.8 = d3017ac9016a2cb36fef1a9d457458d4a3dfb86c082b97c5357abe446d7c76e4932f7801fa489b96
+AdditionalInputB.8 = 186619687c98f3976b218e73a2d59f4f4690cc3c4ffba85b4576ccff7c89e38498782200f785b98a
+EntropyPredictionResistanceB.8 = 94257d5efb4c4e25f6ce4e359287f7d2f55b8e347d89860d3505b01a16994f38ec1442fffd84a627
+Output.8 = 43fe0796951971800901ce7f84bf3778957455d00947b2f2a4afc3eb2704d22bb11f9a47e2b92cb682c2408ef084f05926bc35bd8a37bf86c31dfe7985d24161
+Entropy.9 = cba09be3e92fe7160515ed62e3aab18b8222fb4f170cc335fbc66769cd3b46e2317ccd1b84d81b14
+AdditionalInputA.9 = a51067a061b0cd1852ecd782a2f6276ed8832acdcfd7c2d659806ba6100cd5e0e010c13ef0906dd6
+EntropyPredictionResistanceA.9 = 2c425912441bf816ba45f80e955e929f5eb79a0b6451ba16baa2921beca2798a638b5a9ad6e8797c
+AdditionalInputB.9 = 6b3526f09ffc342d75d648d51d2e3a6e7aa94f17775449d2eac05aadd69b0315e800a02cdaa73dd4
+EntropyPredictionResistanceB.9 = 8214ace3b276efa0835d54ea1eadb5b8a13aca4d075186bc583a06f2040f8869365f587d650a9eb2
+Output.9 = 267fe6010703d24190c23d0a93f5a3a730f0336d243a7b2496f60d53ddf1390d87061ed8994eeacea4eae82c6f069deaefa96c9e68b97f218344d293024917e5
+Entropy.10 = d5e15af19619032b0471f3d56e12d6b41eb15760f183991f10e453a7e67ce293b81470ac85a541eb
+AdditionalInputA.10 = 005c8dfa6adf437f17b8eee160828a727cab229d54029b250118313143da2bb06897d3ea55a4dd64
+EntropyPredictionResistanceA.10 = 9ec695b0cbf702005473d36d8bd710155a2307382d42c1b4d0adf728801344779a150fc137aa4995
+AdditionalInputB.10 = 565ae788d6e54e9e0154192729188d0595d42b2dab57cbafaacc85bcdd1beffa81fa5ea072b37cae
+EntropyPredictionResistanceB.10 = c5e147f07ac500fd5f4d1854095c63941a2588737d2151a4013f58b0e5c897a56e19c3344334d99d
+Output.10 = f6ceb9fd67e7151eb2c9e6ac40a5353a5a96b867529cdc29ee93889c883dbf06fbba856e6c3575323fdb94ba302312ea4a7758d187b9e6a1e1927e1291105746
+Entropy.11 = 51a395f4b81b5320cc661ca5d7d2285090dd807ca51bd02f208ee0972ddf7468d010f8116659e429
+AdditionalInputA.11 = 927ef95f334133d7decd04b994c68a890d1e60a85aa54fb311ead2e8c75fd0ee1c04bbbe5d0c8a4f
+EntropyPredictionResistanceA.11 = 7b03f98c25d29ec0ad0fcdfa9c39e7940af110e7e7df08a9edd6c3e819706ef60121235ec2f3f01f
+AdditionalInputB.11 = 6cb13b55924081ace5fb8c674d13f5d8e4bed45e45d3cddf2c82f363ab076d4bc23a89d67227f871
+EntropyPredictionResistanceB.11 = 684ff8fef4b6137268dfdf32b5f9a3150068935c3411ab4323bcf21e2d1a4d9f27492e7d7852830d
+Output.11 = b71bef4bca656ba1a3d656a572c6f2ab62663df1a1e7a23589051b12b2a72c5c2dcf0c9a925ba151e3b24dffc85d7aa7301e41c6407820f2da590fd61952cca3
+Entropy.12 = 041c1a7e0921ed9ce30f3ec7a6e5f316bb2d6e267ae9608e70c7b89662e7448978045b4c401c55c2
+AdditionalInputA.12 = 62e35826a3111f02009f172ba65869e804ea9579decf5faab33900e56fc4abbe25bbe67564001211
+EntropyPredictionResistanceA.12 = a783b4971ea1a9170e3ea11d43c5b7b2105c9a0e718b73e58e2a2e4b7ea0ac3e3ea6144b012809ad
+AdditionalInputB.12 = 06b8d9ff1effe2503faf37003685f9a0d847c927bd56d246a31ebfd2ae38b527d82d3b22323a968a
+EntropyPredictionResistanceB.12 = d7fc4aa10eb6cc890a04df01f7878c2ee99505377de3d97b5ec90a62f3b36cef33db290be5d2c10c
+Output.12 = d804bb99323df3fe598a16f37febf746d1a5171ec3aacb13936bdca83e14dab2be67024f98f2c89bc308bc82337d28cd5080468af90f002eab465d65c11796a9
+Entropy.13 = 0976ce78818c0ddcbc12cfacc63b7f5329d18cc84535a1bc3bf327764c70d9df9a292fefe5fa2fe0
+AdditionalInputA.13 = a630fa24916757ac7a7aa6238cc469cc04c8d41a36069ac3b11a749c0e47f9712bbed012855276c6
+EntropyPredictionResistanceA.13 = a1e82712fff4440bf2224fcc3bc394f4bdaa956a3c980e0f66a58209976fdc5f8b93ad273c143ec8
+AdditionalInputB.13 = beed9e8cc082c9bdeea8d42263e2f19d29e40e0223d2c4c336d54d00f075342c242a4121cc15eb5f
+EntropyPredictionResistanceB.13 = a254f940e7efcaf55d3aa58046532efedefed7614cc2d5ea577dc1a3f9750a61971661df5ae11cd4
+Output.13 = 129afd0573d9f7e2f8252c7b6beac238b0c515627e7173ef1a132e80a3f84f90cf693b12123003209897657d7a082847b40116ecc2410a12c01e298d979f9922
+Entropy.14 = 28fb3c13cd47cccf8756e5ce47b53c584add37115bb450fbbda5c607e506d8b22465ebb83bd43e78
+AdditionalInputA.14 = e0ca51c9a5f57bef56e0cbf9674175271b8253e25bfaf826cbb907c0f88e0f01d90b3c47ad000a05
+EntropyPredictionResistanceA.14 = 2e0588d311e18d70d55ae9784c673bb96ffe380bbbaa7584be6151151235cea4c3c0159a11e753b6
+AdditionalInputB.14 = 1a72cab51be3633be268e4533fe4ad482e5178cb3b15c6d8090ae9e8882d24f1cbb2d93929da3864
+EntropyPredictionResistanceB.14 = 6587fd55057566c3fcdbd85aa2b693d885234144a6ac9000b8640c8530da8e2e72abfca6980d7119
+Output.14 = a0496a05e5238f171f18870973c9e7b9b3fff44df1fc1ccfa398ef73aeb41829a39339fd032591abcce4cd9402297f7c2e38fd2486eaa8c20134fc0122af978f
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 4e0d698c469ce9458f4ae735eff653a2145a6edcbc92393956eb1537f33101d03905d0aa2e72f191
+PersonalisationString.0 = 18c0e43448b9b1c2379a08c93ac787e41c27ecc8797053567f7a96009cc3df0aaa431bff57ce571f
+EntropyPredictionResistanceA.0 = e8c67e8083d7c2495cc22106d2117fac95a025f8099b4d093c8af589a6c622306e6c75c51c36e987
+EntropyPredictionResistanceB.0 = b53785317807246779f56af237bcc69e1da0219b1c5ad1d714f6805fa75e5f91d660a0072ff411f6
+Output.0 = 72a411671287e94d088d5205ad02f666552ae4c8e20c98f7b3f478f0de5cccceb50e72d122f15e36804084862cd06b31307e58c8b7d44fe52fb6244262f10198
+Entropy.1 = b31461407bb4925097c079d30d21f4650b84d72c516c32dcb25e61c7ecd8433fbe3e5ec177b124c4
+PersonalisationString.1 = cf7ec7d7dab1730f2971bf47680be1fae3c1c4b4c209e5fa8c5e915afc316e14411791149550691f
+EntropyPredictionResistanceA.1 = feae0849b00460d16c871f40899e620a073c54fc62e0ae9bb8837b391bff59af6c08a87898b3f900
+EntropyPredictionResistanceB.1 = a15de4230e0dd942d80b9bdd14f2d23a065464cd5ff69b2171c0c5e604ac33f5e451d97f079feb48
+Output.1 = 94bafb1997de5546841b5a46b7a24027b38b738b6b0afc9ab4c4b4bf0f7e8431ebb9c99e993dfe555b701fd719c8603291fae095d719fc58b03f6fd5fc3243e2
+Entropy.2 = e748760c2f495587b5c9755afa35bc8d67230a9c885ecd99cbacfaf1f766f731569cca1473caeebe
+PersonalisationString.2 = 202b9f892a766ebcc0fde33d414a65bad4cafc0afa99506d7bb3f9f23227d77d635c5424b01734d2
+EntropyPredictionResistanceA.2 = f861b74bc655a352eadf7ce5d338d20a7f358777de80fc9e51c31db513161f884118aac491d5d5a1
+EntropyPredictionResistanceB.2 = 00d02de2e01b5b0191e3a0fc467edaf10cc7c8b05eed78ef29b6a0c9b06e8cadda58e90fcbd73bbe
+Output.2 = 9dfb4cfe04c4abe040c2de7d541017a64a5cdfb9d1196551f0fffc95850237a4218389570ecbaa59e640f8b5591014e7bf4d35f39a1d6d361dfd226cd0e160bf
+Entropy.3 = 09c745f0b94a1b981193de075bb0c413b047dce876ab637426db5e6b24568557a5cdd583ccc79f6c
+PersonalisationString.3 = aa2048b06c4fb160da77ec39014b72f1ef8bb2a1f378c748d7a2d914f275559a69973a33b7c0b9e8
+EntropyPredictionResistanceA.3 = 208ac433fbadf3352a54546030dd59d590712f08c038f329b8d7a7bbddd53d5b59cf3b222a8a0ef3
+EntropyPredictionResistanceB.3 = 88a06193ac997b55d807d14c2c164891f41b352ffbd275364c3a7d166c74a0bdf48a5575bc25749c
+Output.3 = e704d02b4852772d5e7d4f7328df1ca7e6390afc103d847cde9a58b64c352322e392375e32e7f0f9a8ff5a604551e9f7a2bda1b9e9915b047220ed2cb4dc1e78
+Entropy.4 = 7f93ce4b74922c103e5f2cf4b6578c0538cddd8f87de85551ef4954d89c67c6fe0c7a4ef4cefd241
+PersonalisationString.4 = aa27d3507ebaccad2b62c19bdad0011137f3290bf6e638c7266ca408704bfd31a0a215cb93ab569b
+EntropyPredictionResistanceA.4 = 47d5f733eaf377797ccf804504d3f97e5952003fe33d24522ccb30a9c7fd4de6a396b91082843096
+EntropyPredictionResistanceB.4 = cc1b06e4bbc7dcc31b2140f4b8745f19459f3953566af3d752705b17a9c78cf6600e64f38c25fa69
+Output.4 = 690c86448bc2b02530c3eb70d2df3041fd462eb749f16434619016d20c0c1c6d334b200ee25bb5d336a56829839c5eb21a5a0d5fc72058c712a24f5ee44ca7e0
+Entropy.5 = 7a118758f0c824e74b2fdf3e5e79cddcc982a51b616498b16b0376cdb0e555b348b57502a4e22376
+PersonalisationString.5 = f001f090826dd046c6df327f52390e7963494cdb5a74fa03adc4b04002505fb42d0324d9c71702c3
+EntropyPredictionResistanceA.5 = efe84fcd0c0f201a5ebd1540743366579100c826190f3ad2868f07ecd0b52b3860fa09f3cc41ac27
+EntropyPredictionResistanceB.5 = eaaa8c35fb2ca7d065a67e0e07578ad6f0e1b405f88dddbc4f2369b13d9ba10cab1930bf36e354a8
+Output.5 = dfb36c496f76db85223f88127a5aa3cbfdfe1d4014439a0369cc0ccbd031f5f6636926b9e2ca3c6691c89b6e4ea8d6f29496d44446810f7672ef4f34a7908654
+Entropy.6 = 87b370beffe781db8432967db94cc471ed9f890da9d56db094c2dd7a26ed19cea2197f72ff9fca7d
+PersonalisationString.6 = f4e5bee8e9c263cb29ce8824842092259827e45d9f811fa736a99cf6b8da8a422e80c7c121988d4c
+EntropyPredictionResistanceA.6 = 296dd9a190a6838c8acce1b1dcd64ac3922616cbf0a6adaf3886fb705a037570fb8759975cf68cc8
+EntropyPredictionResistanceB.6 = 885682d35837c6360765ff1641e53aca020511516aac221e4f13265dbcf28d98139ffbbf035bd79b
+Output.6 = 742cdaba2dafc3027945e8a11ed7f9fa214be73cf35618ce8934e0a8f972dff8615bca72512f57e3766e23e6f2173d6f0ff477abed8fe191fe6a9a5bd262661a
+Entropy.7 = c6f2adc9ec99a6c8d114de0fead0927fd219999932e4a08111d2093d7858356d1ddf824a1e39d6a0
+PersonalisationString.7 = 5867c933e20743a95ffeccb4e2eb7018d21845ee78df3f421ebe0f2a8d3c5ebb84c21f9a53767014
+EntropyPredictionResistanceA.7 = d33428513d7f8aa9043def1906c9ebfd6fea5b252c6e13f2f1583d924447f25b89b058bde88f9abc
+EntropyPredictionResistanceB.7 = 4bd53acace6bc8e2269a4044c3ead882125abc21773e07c4bdc99dd8a4364c0a4aa944d9f3948fa5
+Output.7 = 9072a876cb01ac9761526e34666c02f597af081ec00a5d85b9378380c620f25982c02cdb933cef3513d7eb11591da19577c0abcbc08dccf041a99f0acfd71bb2
+Entropy.8 = a019c53b5335d706192a3015a3d818b93981a924c2bfc8ee66e91d5058aec331e71d716c0e9a6416
+PersonalisationString.8 = a6445073c93cfc7c8e14690ade8365604a6cc00f50fd33b803ffd7d9932a458d3dfe320bf601200d
+EntropyPredictionResistanceA.8 = 65d9f4ee6ec2b811bb51173a3f38d7b87fc4ec7c7fa90dd04a9faf31bf47af051c7477316bafc819
+EntropyPredictionResistanceB.8 = 90e5704378ac380095f38b081613dbbfb458bd888aeb12fa26bf029b8b61fc0fc15dc42ab5c2492f
+Output.8 = d8f5343e6b15d63eacc21469feba329a78ccab567c391c52a1f865994124323a0bbe40213ad9e1542c552d25b0994b095d4fe75c355c1bd6d93ffdda0302017c
+Entropy.9 = 4efb6ef4d7f3c640a282feef77d833ee601fbd2fe8883fe8c108b878cc196910d267cadc5c05994d
+PersonalisationString.9 = 947617b45822e2c046f8019bcf10abf7ede1db16168f9b9d471e87b15ce539d897373961c4958290
+EntropyPredictionResistanceA.9 = 89524598b352ec3c3af22f66855fd560715988aa204d7ffb9da0463e02ccb38df41a0b47972c0b73
+EntropyPredictionResistanceB.9 = 36872250a5337063094018d84a8e2e40366dad33bc29e31d23e206405996156f8497d6e3449bf291
+Output.9 = b987c0a3810d15374f28b0ecd2bd7748bf332f7711f5fc64889707fa19693b13bbafd58710bf9c3fd790093727b3e3421ee432b76a3a443ce9a43b8bcbda0e09
+Entropy.10 = 6e6facdb1166507d45fbcdb04d97f4bbd732ae796d575e8bb54f414a83d424667632c380b085a37d
+PersonalisationString.10 = 95fef56741ae3aa06639b2cec2e7f5c30066d670ef48059b55a4fbd8ca773825f4bd934b556e34c0
+EntropyPredictionResistanceA.10 = f8c252d7385de87bdc42e2a0974d0ee9214c55884ca2d9885386e47233817b51a843eb05e568ac9b
+EntropyPredictionResistanceB.10 = 59f990bd507e99dccf5bdf0e36fcae299f2eae55a6a852df10d601d24f19328d891a6fd453975bb8
+Output.10 = e77941e4f778d256d53aadd206e8e997d0aac47b3aefaa9ab8a54b92ee8de34361fae32d414fcf9720561e95ce035dd774ecd40de0cf4ac7539909d6b60dd065
+Entropy.11 = 6058b4cc4b1da3129b5809b5d33f2da6fc3e55121457a2d391b918e7dd7d6a3a206a31f3e26cbec0
+PersonalisationString.11 = 5353054cd04b165c6c5eb4ef060cdf6c8d8df6c4942745e21eb36366e8adcc58a4195e83a77162a3
+EntropyPredictionResistanceA.11 = ab0a9b1acb125e664198f588d63d238a412d22371e98d7bc1dd1504a3d96dbe196d8f50cfebe86d9
+EntropyPredictionResistanceB.11 = 2e2047ec98d684bc2130f622b1d131203a8751e5bf57df9b587f6c9a0566789932944bfc48760afc
+Output.11 = 706c45577749f27d3d9150e74d7b5e5069955740a94c101717c4cf497b0c4b994776005d680d8af419e8b13b6c766520c4cac177edf666db9449593c646c0ad5
+Entropy.12 = e2f024055d13738b6c4203daba88bf0f33bbb160da3114194c31df5294beb161b20c2e7da710f262
+PersonalisationString.12 = 12da609adddad52686b2632b143de0edde8c94afd7a19b6fed8d951e8927fcaa0694d51652f0eb3b
+EntropyPredictionResistanceA.12 = c6df504c2269b956ddccd0f1fa1df06cdb76cd9f7610f5a732719a83da6eb59107e588e0aaf42b7f
+EntropyPredictionResistanceB.12 = 02f352398862d3e235b0273ac2ce0830dbf78dd41d6203269429158c8cb08cfcc0abc32bd9ef5f2f
+Output.12 = 31af8082426e0aa3a2e14089ec83c3fa0ac2e901c2f1978eae68a02b7588b5ce424e4122d05b8f3254f04ac6182f8ccc29faa32942c8486ba35e225fc3e0f302
+Entropy.13 = fbc1c9362e9f8d01e3daade11afc853edfc81e9f90867316981f916fab1e4d0f43c0201542009e3d
+PersonalisationString.13 = 00a65553b030a99698cd5f5bc6f62565822dec151dc62b752cb3a592960d88d1f2e2803e69cba52c
+EntropyPredictionResistanceA.13 = 1471ad5aa1b507fb62c813adb056fea3fe0c91b564d262eb3481e38679470fc9f4261ba9ca6211bb
+EntropyPredictionResistanceB.13 = a9686d7ea1c060f9aae9e63ab3d5a4bcfc4fc95d20a8465c7a0a7f8e0f2997c4d31ae75dbb05d959
+Output.13 = f6af5f000ced2cffe1a067f645e3f82ac38976d86d396501c2e7a5b10f43568bae4c3f33225a78228d812365010dbb416eb5abd6d3590d7b59f43dd93026f68a
+Entropy.14 = ca5c86860aa7cd914951e15cf9f3ebdd2130217314728ded854afbc602d4b0af9a5ab0009783c4dd
+PersonalisationString.14 = 7bfb365d749f314d895e6ccbea67fd37c86b582d23d79e3e13167bb8f94f509eae7089d9e6087171
+EntropyPredictionResistanceA.14 = b459eeb404a1480b64e7d572bced365bf822878085363daf57e894c29ef8fb46d0a79fef4713d2af
+EntropyPredictionResistanceB.14 = a057871a394e93e58ba191c239e21858a3127a6b748a4505eda487dc6a5293304aad36d52da132b6
+Output.14 = 96b24ef7b19370cb3ec40a4763de926977ecbe6af2fba201e983e7bbd71b23fa95bd315933ce2fb5a10f4a121cc56b125233f09ff920cc380df7ab5513403457
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = ae6146cc4158e43dd11495a6ed62add0042f72c15b8ddb26b1f859249deda2694bddb95a58526be3
+PersonalisationString.0 = 1ca58dbebb6f45b7bcbe019aa66027bebbe1b7f72e46b0fd955963d0ba3ba575a6ecb6cee9b91c55
+AdditionalInputA.0 = 063da99dbe157077a3959a12e1123f96767215d055c7c4f616691a8f98ec2e28e504528005a7df45
+EntropyPredictionResistanceA.0 = 7c24703ee8d4541058a48aa667e1f8e0895f5145a0706bb75d9898f6dce5829e054092525c4e62b3
+AdditionalInputB.0 = 195461f31ecbef6aee2279af4f86d6d8e7b780103bc77ae609aba2dca0dba7e22299308b109ae2ad
+EntropyPredictionResistanceB.0 = c13bd68749d77d35e8c900a97a1d954f6d7a960bc43cb2f78e5a24095d4a427ca74d21c9ad976851
+Output.0 = 549cd9200242da733ab4de018ea2de638ae67d879539cb1def16f2b274618854faf4211d924fdc7a3b56a9873a7b368b667bb1348c1b224991a4c7e5be55c80d
+Entropy.1 = 23b432dbdec43f7b001dcbfb05a8e5d8a4e344690132e0b2b7ef036203aa7099c73dcc3986a296c2
+PersonalisationString.1 = 7f7585d6e377008ae8528505bc660a6466798b4818686d361a9a2bd7e2649ddf46bcecdb8942021f
+AdditionalInputA.1 = a2ffc22d8ad78f636b3bec24b59b487c1ced6b5426ceacc811966c57bd4bd7e70a727062e1340775
+EntropyPredictionResistanceA.1 = 5b7dfff527ea21d6dca734347e01b7a42ff089ac7bbc7819ec096ade7fb5b716d6765489b639853e
+AdditionalInputB.1 = 1cf79d49e40b5fc22d0bbf50a4414aea498648be18d38c06d5bc2d779ad10241b3c63d9d2b68d389
+EntropyPredictionResistanceB.1 = 157e7b1c1050bc4b9dcebafab6b4f0354d872a3ab7f008c7fbda08ad919446d7b2c8c6d4bf96d0f1
+Output.1 = 353d839becd15911eee71b5f64b1001714de4b85fb8592d2f316d127016ca0a1f0367d108e405ff685f37c1abe46d467a604d811e583106d63c89d7efc9d1f9e
+Entropy.2 = 19856eb831e93b84ba15496ba8e9c44c0dc2ed072d29fbbf81c98653f37cc699f4dddd6c685d12f7
+PersonalisationString.2 = 8d763582011b5900abe660c8f86669ec48c2a703326232e34de0466eada12b459a4c7a2dae89897b
+AdditionalInputA.2 = 1bcc0c9bd34ff49068a1328fddaacf9a32b166114458784b71b310086f22928f37416fc060225b17
+EntropyPredictionResistanceA.2 = 052b2e288c4b0f94b1b89ebc992b400fd644759a165b4c693ef929e9970760d223529bab8797cf57
+AdditionalInputB.2 = c0c6b106eadfe5b084a6ba02e9189d774f6161e8af3666a212a09128ea8333f0ed14ef544e13c03e
+EntropyPredictionResistanceB.2 = fd33c6c13dd6bcc04bd7e24cd802fcedfa5a0cca207d9b50916a512dc744cd065bb2befadf539635
+Output.2 = 310ba834a492a97c2769fee26a66a0b04ae860263f1a75cdd61db7f9706f892ae243b3f86fef47508de9670e78c29f6947b493a56386b0d51f2a729b4dd2194a
+Entropy.3 = 56066f35d529ff271aede8b13c097b02c3bb13c84a04518ed3d6fba4f0bf3a196b37609e26b7afa9
+PersonalisationString.3 = 76e8d8d713ed43a9a1dc12d46d7037b13fa1627437318341acb2b83c8c8a0c0a3270eb9ab34b4c74
+AdditionalInputA.3 = 210151e3d06b0c68a2ce6f09122533a94f6846ac7da59dcc20f1df22cce04855c1ec71cd33d70ca6
+EntropyPredictionResistanceA.3 = 3f77a6623d07c7505a78ec38da6fea5f3d07e4fb95dd6d52d94c750a4b855f68ecfb8a80ad428aab
+AdditionalInputB.3 = 44235f35c5a2af16a02d59e7c332308b39177e2a85e034051b73209b2942f1b25ba370b051bb12bf
+EntropyPredictionResistanceB.3 = 0e2c6807ce26b568b9f0e5e2ddb2ccbd4cc1c6bf97280bd9a909ea41cb5f63911433b6ac9b0cbf6d
+Output.3 = 6a1b46c34f2ee8b0a60a2b1fc77b05400120c78347c9356eccbdf73c97eae1eab77206e235fbbe4722937fbb78387ed50602a82f2d880f6a0190d846e98d65be
+Entropy.4 = 33c8795c0b61a087c76091b778716aa71a46de8e00cfbbe8c67fe3ac76c825829e3a91030cfbd0fd
+PersonalisationString.4 = f76d80172871f749438436d072fda50698da151b713feefc38597a12d8b81ca009eaf0a6e9fdd0fd
+AdditionalInputA.4 = 5d61f82eee6f89fa57b33266daf6403dbf6f86dcad920ed9649d0c57f59aeff3a119b76405eb7fe9
+EntropyPredictionResistanceA.4 = 5b456b6bd931b0a57c1c6a968ff2a398cebad4fb00294331523fa7589900cdb0b77b4afb83c3feb4
+AdditionalInputB.4 = 1238980405055ff7076c8e2f2fc8f416a6955512e612cbbe7e7e467a90abe9261e6d0b5bfe1e88a3
+EntropyPredictionResistanceB.4 = 08f3e996a4711aa2444dcb05f50cd06c6a8ca2cd2cec2afb4449166e47cc9af3aea2dde0a1f8518d
+Output.4 = b0a20a0e04482aacfff5b355552856066b19bdd04f9b37c6999a623abdfb347f99030cefda9e6c3c905a70bf6e0f2996e7a394de2cce1c95f13f935fee2adc99
+Entropy.5 = 30e206b748a96dbf9ae0e1d88dc456ff95abe456bbdf65bab1ea00c4c7e4f8adcf5e0a4484b1a092
+PersonalisationString.5 = 343f7467ea7b156b6e82193224d5bbd506f67dbca1940e8de7ac77e0282423e54390723ac47b53c0
+AdditionalInputA.5 = 1a08ff30f83864146e73b4265facae4d9f872051cf1132fb41cbc9b4f580b1d8623a8f146a5bc6d4
+EntropyPredictionResistanceA.5 = 287e92d286d39e12c82732900b90293f63c63d1f5eee562374e5d329cd69253e2e8361d0d2a04624
+AdditionalInputB.5 = 387a41b5cab0c6ac182c5f1376f12ec2dbd821f70483426ca48016275ba98d6f3700e8d8ccc203a6
+EntropyPredictionResistanceB.5 = ec3852887e7c2af9237669ef24099ca3f865e683fe6fcd0595fd9a13bb43905a052b7eea4362064a
+Output.5 = 97f56acc3ffa663c3b5b3498ea3f7871aff46497dca1d93d5b9fa3845b91f02013c23e9021f165a27d98515f4ccac23c3545396b5963803886b0235a04a7c5ed
+Entropy.6 = ac9e778ebfde8c77e28c3236ba1adf001e28055c496ee38ab626d5aa94ada720d7546e626625420a
+PersonalisationString.6 = dea268438f4cc47be0059c48153b900225e3caa60fc76814c012a5c4f662ca9cc6a474ef6fc9bb5d
+AdditionalInputA.6 = 8cdc1b9de0eeb98e4d0c901fa2560ac2c9b829055260c86cc43d42144120855584d5689381e0997a
+EntropyPredictionResistanceA.6 = d4b1775ca5174ee2e331ef0968acd206e8e1619cf22134fb5f6412984ae884cf66e2d79994d3d41a
+AdditionalInputB.6 = b17d7528075a213141391615ab9a434b77e748286f2d36448e3e37e6bf42d05d619f5773756a0314
+EntropyPredictionResistanceB.6 = 14484e90e70969d1b0950d415845291c912c86194c87594dd3797f8c7a29f94388dfd91c44c82617
+Output.6 = 4a29567b43731e541bde37d96cd5244582a7c372c9163b94381d427f0e8e66b4cea53fea2de67450e3595d511eeec0e59200923169be45839b42348b34551c1c
+Entropy.7 = 08f3ec3f8cd4bccf6945b88bbd2fb23ffccd7f9e9688ef6fe3fb82927aacb7230c60bd4e8b13b2c9
+PersonalisationString.7 = a64b0a671d12e5c01b98321a76430004c134616d09cc8fa393f7f5dce275fc96cd850f8a16627ffc
+AdditionalInputA.7 = ed48a1d640f682bfcc92d215879f59af715381585925fec5f10e98f6b79747de72f2fc22aa0ec0a1
+EntropyPredictionResistanceA.7 = 229a7acdda3d73e87e9858537bc02a537d91f110ac3aa7f4639fcc6ea062eed8eef7289f7f085744
+AdditionalInputB.7 = 2ea1ec94f083d6b53c43f2c1f0d8ad84f981467688660561c7e1ca5e8a9a113d5cf36d0309690d0e
+EntropyPredictionResistanceB.7 = 16646398a53f076072bca518252b9c0bb7e87dacd3f8769cf5337b46c329481dd058819abe3f431a
+Output.7 = c3cd7a06a97592e8ff53027d9f86c022d4a960e85839748f84e51b06bf484f753feb925022472976410063505570ecc30da058ee8db04e0430301bfb4adfd3c7
+Entropy.8 = 4a79c58b2d7b22339f656ce1400e9421c67543eca1877e1f14f1bec392eb5fefbc61229d2042272c
+PersonalisationString.8 = 7e3d63c124fe879ad7963bc31297883425dccc4d9eb193963f8a620bf6e76daa9ec49a95e2fa36fc
+AdditionalInputA.8 = d1cd93bba990784e16ae61db9df523cee52fdef263be747b0148b38f7c1056cc6010d6078d4a2df6
+EntropyPredictionResistanceA.8 = 6308181a4ff25aa7b69b8929f6b49a84439a1a4b6159c714f61f0260ea89a420793b1631e587f868
+AdditionalInputB.8 = 16267d8522680f547a6c5450638c373f7160206edbb367f79f14b0160ea642e1519157176255ba0c
+EntropyPredictionResistanceB.8 = db4da3b1206011ec3639180f83eef93bc168fdfc6c0c2aef2dbd3ea23e7a19b159e582d4e0ea7ede
+Output.8 = a6619131abbe25fe4056740a520321fa1e5e9bc661ba2b52cea1eb36828618a949796af2f1f91ea3a0fd8e76a521201b5dab5574dfcb8d351434ffcae183021e
+Entropy.9 = 1ac80c4da7667228c9d24f95ecd9f541a007d63fe9b033965d3b7b2c54534e5dcbe3724609d9ecd5
+PersonalisationString.9 = f9647f7c010a65649ee19acb404b0d8bbba15b2b7e26d2aadd448b575cc7b3dd3e7968acc1e11de1
+AdditionalInputA.9 = 7d7421aca6af7d05a45d506446cabec1e95c886c1a5bd485eaba42768c2d1eb51b34553f6283070a
+EntropyPredictionResistanceA.9 = 35af0bac76ca9a0ff073ee373687acfd04f46422572af322e9320458f762c1a0f7e4daabcab9f307
+AdditionalInputB.9 = 4683524cc5f98aef69b3d20d4e675b545bf0077c4e2937f3d3bddef963d8a98eca32f7556e3948d6
+EntropyPredictionResistanceB.9 = 52ba712aede6561725ed8cf0efaa2f0af2a17b3823d2219971aa6d1757fe226ac48cffdbba73e754
+Output.9 = e9973ba786fccceb33175fb9d78fd9dd579a139e3a6056aaacb167e271c24764c51439d71402e0e140889c621bc0ab78fbe971fb5960e4cb24ab151896f66e86
+Entropy.10 = 687cfa3838c0c2843d4878cbec88e1fd120710e774fc85c9221c289868955baf2a26e533e8f2ef6c
+PersonalisationString.10 = a58d1c01c2e3ebe0fbd328a7ae1f0c802dde30f6dc7b72c3e3a0256b22fcdf2d9c52a053e88ea186
+AdditionalInputA.10 = 02511bb4ad0b4e5ae1fb4b061984ced695af0f1a6391289f0c3e1d4273f3a6938a045f631b41e930
+EntropyPredictionResistanceA.10 = f912a64d532a34b3191c92588292fcd3dac138ce2bcfc59efa37b20893cf0441a43a1130885c8343
+AdditionalInputB.10 = 968aaf5a5758019135994f9c582031bdac6bb9e5c4210a2c8d65cd1cabe7d310e1fa68cb5eec3adc
+EntropyPredictionResistanceB.10 = dfee0f751e0bb060620add45b2e91f41b5939f5571fb9092ef968d8ae398b97089b0ad08d5d16452
+Output.10 = 1c16edd7f3308043df44959273e7fd4215bd3ad85994bcc2419fe6ff8f4b1c6bcad857e5f36ac353efb52b57d19d2a6ff8c41564efbe6704c8e0838b9037498c
+Entropy.11 = bcee682c54a0bef1a14f86ea88abb0a47ff6336084170cb16fe754ecbcc93a5273bd20e25867709d
+PersonalisationString.11 = 49042eb9838998ac2023af8ceb5539f20c00aa1798c906a02a5e6ac702759054d11d075f9dcc8ceb
+AdditionalInputA.11 = 6656fe1b787843a08a7cdb3d13d1987403724570c8b527546c5469fd15f3204e6790e257b5bb4427
+EntropyPredictionResistanceA.11 = 7603002e2d4237df84fb9e0badb29a2504122c776c208aac9ba1243ca7874dd751a83bfec7abad75
+AdditionalInputB.11 = e0c8ed7a321c36a370fbae1cad6817f25578fb79ec79238a20d5dbf6b96c2ed139458518066238aa
+EntropyPredictionResistanceB.11 = 81671830a883988582271044defc129f54ab77c9b27f4a436ab0e0aa8c4a4d89f6ea84b0b88409eb
+Output.11 = dc20e0d4b8a62f55b1765d9747eddada1653216a269e8a06092952182db0a8d510ae263f4d657138843ecf55ec1103e80ececb288055c5d5e42d2078c8a73226
+Entropy.12 = 5ac8f3ef18c16452f82b2b2dfeb75b641dc1c54bc658ae8f1e6b5217dff601793e7d81a67f89b8a0
+PersonalisationString.12 = 87e8c74c331d0518569e6adf935d14414fc892e64bc0628b06bdbd8200947a78db7210cd1a966963
+AdditionalInputA.12 = dc0fb87aa0d38ce6829ae6b7913aff96da006f9651ac28ee069741e5f5ce706b7108dade8932c6a7
+EntropyPredictionResistanceA.12 = 2e9cb1913842c996dab745dc98c2dc83ac89da9785e182fc94143b0bc9cb5e5669553d124b5b2610
+AdditionalInputB.12 = 5daf569db537ad13236e6f7d2f8b6f44ea07ac58670e0ce3d031ca334572a552ba6f49dcca47b553
+EntropyPredictionResistanceB.12 = b6382111ab158c3dbc27c863aa6c6f162e8e1f27005db8c45b83839e57665e0f9e90b77e1b3a28b6
+Output.12 = 2601767b75e578b56c7ab6e78fa23901ee49f2ab61ffa4f4c2cd3870b2754a0a87771bbd2b5ceab26f592ee26bd05748970973afe800e82e9b87deac31bfca3e
+Entropy.13 = c4d8f571570b5792bb9470069e0ff0edbb3fd6813574f1dc08eeb72f1faa3c737d2eb4e5613ada30
+PersonalisationString.13 = 19c7c3fae352aaa9ea3a3018ef8bdd5f058d347590d6ba6276cf51732b764233ea310e1ea8f62af5
+AdditionalInputA.13 = 634322b8d1c7f701c1f065180120c110546209eeb6a0765a8d09e7b8973264a4a0bb60fa44a388a7
+EntropyPredictionResistanceA.13 = 8b55d02568895771a7b77325a2b1a45b76ed6a3a076e23f5b69f5322a95e8e6ba2ea8d45a9f4f7c6
+AdditionalInputB.13 = 733c9a078b1f6053c121bb85bf9d867d95b0e6fdd8fd9a6c279323c744ff0cf7c3b91506fd10f6a2
+EntropyPredictionResistanceB.13 = d648da44b17174f7de7e45aeb27dbb6847bf68527d5d3210ba546114862e0fbe80b77bb1e9974c70
+Output.13 = 0cbb5aac610d1303c7e36176940772712ca14c1aa49c6ce2bc7a7668f9543446d01567ae4124d705e50e6ca0716953421be92f3a60d09b05998880f36f50e337
+Entropy.14 = 0b8aa41eeaff99203d1d2848936552d76cfd1b0a9cb9d6d98c9348c396fad0c64325a0ca678910b2
+PersonalisationString.14 = 73f9eb665158d6e41a7c2a9b2ed2bfa5f1122aee6d3dd0058888a7cfe85e06f99d7c537ca3df988a
+AdditionalInputA.14 = f1184479877aecc78e19baff31e4a9c6fa8e623934e336cbb9c04a8f4b825f8bd8fcafcdd39b1e9c
+EntropyPredictionResistanceA.14 = 650fc02fcbb770ddc63ac85b206a6e0ddaae9fb7c111234194e893ca2cbbb9589934d30d03ae5d81
+AdditionalInputB.14 = 02a318a1579714ddac239f968564fa2768d5099c237237ac15aba9bddc13aa9c30c38f935f2167a0
+EntropyPredictionResistanceB.14 = 0d18ee1fdb9dc23c66aea587fa59cc9c65da7690a7a780bc64727fa3fb22602301911ed3f99fd712
+Output.14 = 992397ec168448c4521560085f3956d2fc583bda1924b29fddd081dfcc056a0dcaaf3edd1a84158b6b7e5737d37535fbbd6258319b7458c5524cd0061a8850e8
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = eb188213c63229e1874008e5058c2b248c30d7db58488d5e9d82dacf3ef5a4a58ec2695a2e2cfe58
+EntropyPredictionResistanceA.0 = 3ab2936cf612a12bc3c2543d344cf03678427dc23a650cfa2e64ddbee82db9d29f25fedf21fbe301
+EntropyPredictionResistanceB.0 = 4b56928b689366ffcddf6dbd31fcce3092cd0b8e0c6debfbce26ec1902e8038324ded03d07b93104
+Output.0 = 16529e73c2b2dc171d44770bee4fc3fb5feb82b14d0f2aa3a4abf0a76bb2aeeb7b4cc6f6c9215e85f247deb36ba457ffa5fe6be3e2ab1cc2a3a1a065b816758a
+Entropy.1 = d068f2e5cce9ecb079f80f07ef7d1c65650aa66b0da69ada27f69f02630b4936a3a270699a827cf9
+EntropyPredictionResistanceA.1 = 8e40b2b365d58b4b88431a398b2fb68dd9c0dc8f7b46425ef60bc7996e8240c11ad0e75521c77d48
+EntropyPredictionResistanceB.1 = 79d5086130ff9bb582acc3ea1491fe285282b583fb8fd083492133225418f421f989cf9b36d287ef
+Output.1 = fe304b3d146175602f1162b1eada539de1fcac16da037b14f1e95fc223c2ab31ba3b03f3ace2cbc8fafc521c0d72906dff9f9bddf3b572429b39c69c694c66c6
+Entropy.2 = d315f89d9f8cf510afaee1980dc2352cce0169f016067b08a21cc68b63e2a9e7cb353dadec04b39a
+EntropyPredictionResistanceA.2 = 48a29254fbc2e46cd691086a565be236854f65149253a018864c5a48cb376481726cf6a0d68c8f0f
+EntropyPredictionResistanceB.2 = faaecd3a47ff52fb1adddfc07f50c364359ceec4948138561cbb33fb4b2275de03ea5bdaee24f6d1
+Output.2 = b7acdd6449debbcff73ad23a19e5e4c2d78cd701b488b6f3e1e5b2947f9d6b2391d17681cac67160292eda2a242e49b5f21ca663ef119b8943afcb3f3f44a0ca
+Entropy.3 = 1ee07a0235373d32f5d954842a3fb8b1c88b9fbebd6ae508fc49d399fd05b34a682fd9704d3f5ec3
+EntropyPredictionResistanceA.3 = e2010227799b53236529dcdb1fc9c7b57d762e5e2b11f5782111d74f54b51e2eba1992291fe6f9b9
+EntropyPredictionResistanceB.3 = 89cc18599e1f7608ad550e5c172137769806c04c93d04e184d93e1dfa32cdffee29dd947558fedaa
+Output.3 = f405535d6bd7d683445137461d28ab7e16d4f65b54b6baf66586260937936fc09e640266a822d2e47536add5e0a880f8ac546fba7e7d82ac656599e7a688f6d9
+Entropy.4 = d114f29d42a0ff3e95f84cbc1670e995e2cc1e6ff2ac2612820507e2615aa0da5dc64534a63cf1a4
+EntropyPredictionResistanceA.4 = 0cafd25478c5c826b48d1aba7bc38acc28829ed2a348140168eb271457dc0c7701c108bd717e1113
+EntropyPredictionResistanceB.4 = 8c321f8478caa724253080d7b26a17b2d2d42ab7b33000e855d006e29a546ab06d50970c7635b41e
+Output.4 = 4744455e38c9a5c5d82b4c9ddcc8ff4213934b67527ab750004d0edc3114790b697b71560d77077e5e4ba501d48a4c2141f2a5227b22f8ec7c1c5009fb182b6e
+Entropy.5 = 0f766e6f86ec54e669d89ad7091decb21b942d63466a3266bf1bd850927ce7f2d1281ebdd84e076e
+EntropyPredictionResistanceA.5 = cad503293b4644ae36379da745ca4f64b78d9318206489969bb0f1d710f6bcc8b7db397431f4e603
+EntropyPredictionResistanceB.5 = 51550c1b5e3edb4f639962b02a2a449344e848859b54e8a2aa879a9781674df1106350d626fe82e5
+Output.5 = 3bca90a4208c28347b0268656afb8d5347498b49b6343ff46e72298599c047d4aa8e2a1b320bc1f99011849bc735f00a3c1336548dcf7c8ec9700263e1b4a9ce
+Entropy.6 = a767a777c3d68443a3dab7451db5c6af457e61fbbffbf7f1d02f6ba2d7962d8bb9cbf7e1242df756
+EntropyPredictionResistanceA.6 = c99e7a40ad29d27f83bd6c3ae8705b7d6c42a0c4e9c5cfb2886b10ea57aac8d66a2fcc026b4cbea8
+EntropyPredictionResistanceB.6 = 63ead0e605df091c9f9be9c02c6a832d0d2298e009f1b38fa4533d30278f342b0c6bbc66aa971947
+Output.6 = 232c52169a49193bfb955916ebca4f5a16c81e971fc1e2e36c85192f13ac4b7e381338283c8d4cab677a8c5f6c1b440c10964e057a8b66b2ba60e7fd12813fa0
+Entropy.7 = 27b15ba5a97dd9d55640bd2cc9149c14e412d65ae1aaf9bf5b2461bf20ac46a51bf8234f5c283c33
+EntropyPredictionResistanceA.7 = 979d9618d0ab4817609aaa4125a0ee5ccd694ccd8463109b33261223f1b0e881105227c5a09f9917
+EntropyPredictionResistanceB.7 = 70a57ce68fe3c2cfde4622e46cf89313b95c64ef97824774a2817f06f623909feb66ce738c457051
+Output.7 = 94bf4b90980cea16aa585e383f91373bd584fad30e60930c0a9f9913c9b54dd403e5a93543258e48ff0025525f7a5d05c06c7addab236c1b372644f8ebb17b1c
+Entropy.8 = ed98db12b4c4f15847fd22464e9813de49940edbd56e57545506ab963faace2d15edf2b758b3cf7a
+EntropyPredictionResistanceA.8 = 30c3e5603f71202a0dac068a0684de054386b3e0e8d5ad5c876b1f7e9cbb70c09b7dfc7ff8ffd8d1
+EntropyPredictionResistanceB.8 = 61fde050cef12dc20f6b6ae56080cb5ef3ac366b05bbbe1d71f0a7fedebc18047a285faef9bbabd4
+Output.8 = 683ec6ec15509668350889da5158c1cabe6aeccb0106c75175fdfbfe2760957dc15bfc484c0444cfc301972f988542f3d444901c2bb359d31326b0e478106bbd
+Entropy.9 = a982e38b24f6f9fa5f34c09c361a1ef0bd7685d6c2ddd55048506812c8ce518c6b91281f9af14280
+EntropyPredictionResistanceA.9 = 4923bc25e21d08b8fd3b2d6219003cb5b0b124d942e9081b7dd4c0ef850154b724244e8c371b1036
+EntropyPredictionResistanceB.9 = 06f8b3c50b1ecfec50024969b34d605c9b8f474a4d67359ffcb74e836b678bb8f294cafd84ee6269
+Output.9 = 50667cb2642a63914fd85a83f57fbd20e72436fdf40b2702238b97b4fee65b8f95c81d1acd9c5791b05d30d869749b3daa469dfa16bdae2488c18b3597111b7e
+Entropy.10 = e215bd3da5d24c758420eb74b911282e8a71e787cd8659316844079d3cb280cdf5184dab8194bf84
+EntropyPredictionResistanceA.10 = f44c960959c9d3f42db25846b7c01c48a0e4a558ced5a47aa6616d8c541ef377e23fe0f9a97112a2
+EntropyPredictionResistanceB.10 = f1b74b7f8062ea461401f2c8afedd30f7b48c933a7b0f96d1c90329439d4a50dd330714cb4c6438b
+Output.10 = 2968245684313f93d2527c5c13835fe820bdbdb7f476fa8e0adff5a43f48d0de2c09a4c9aecb9edd7fc4ee2bf893b31b8f1d6aa4f3249aa6865f83f481d26a84
+Entropy.11 = 8b392d1ff400f9ae5ac16bb00f2c9ceef5ed4c6a634828728a5b5f1de4e00cebd9a495442a23b78b
+EntropyPredictionResistanceA.11 = 033bdfb8718588739b3f8cac8346fd946d649c0938dcb32fed473fdaca62b0967128ac53a605487c
+EntropyPredictionResistanceB.11 = bb4f5474cc0eaf4376772f19dba7a5996d329067cfd6feaa6e6179660fff0cd4342bd7b83b3179ab
+Output.11 = a9c43e4e9cb4f5fb50242195ed929de8a15b58c8b669aa80690ad3c82a801daa012d61ab0d092eb512d6643fa3ee39a2cb58e8142a1133606280c05ee0a0bcda
+Entropy.12 = a07c4eb7212ce993b9d6c74410a59be06b79753326ec40ed2fa79240fcf51742baec431c73a2436f
+EntropyPredictionResistanceA.12 = a24b4f6b4439e566135a541646d64c0b6373e4981e794b24e2e4434d87379e9321c57d0e257a01e0
+EntropyPredictionResistanceB.12 = 80e00b5658545f02e7fdf9f39b4c04cee66c0e4ea1d1877577306d5c21d41f6120f38e20a8290dbf
+Output.12 = 26f2dab56a4aa92da010539325b0b0a615ea2cd2f6d5d52f3bedf4a6eefdbda8684e330c7bc86295c6c6472079a17fce70fcad091e7d03d5179d9130e2657ab3
+Entropy.13 = cf7b321cfc5420954ddbac719fe276b143d7124616153757c47b0cb3e6076f95e11c221a92a0ffe1
+EntropyPredictionResistanceA.13 = 00f198599d42128e2385d3d27d0fe31d97fe2d029f07a7d81c27a0812d45f0e522c76c21382631f1
+EntropyPredictionResistanceB.13 = cc8d81187314e76fb53cd08b890db31cd00dfda5d594032507c0cd2a0bd1445b4422087341bc36da
+Output.13 = 1b94df002a93326491f282933bc58b8ca1d30fcf591235e7152eb12f7356c31a7ecf9f638a7fa279d5c59824437d597fd640ada1c5cacf9557fd2593cca8892b
+Entropy.14 = 9bfcf7e4d3af6cacaba0ef999c534fed5d5fcb58c964af26c9ea5b2d6cbf5bb1a830cdb08801de7f
+EntropyPredictionResistanceA.14 = ad927a71c6390c5613a7c14780abe6d266b2d126aa49f23c5fb60e92736326151293eb36e31dc9bc
+EntropyPredictionResistanceB.14 = 152ec7c0d26eab6de29d3d2ef321281297bd2591be887318712ccdbbd3ecfc1c9250f99a226fc9b8
+Output.14 = 0ad1101454cfe091f1456383eeb1e7a968328da150f1166b89e7c202daf5e42324314c43fd1da6de3feb9ffcf82cf217bbcdf5c96864c227246306f0c975c4c8
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 78cb8eb27ad2be1e7d967552a6e22493095565a16b04cffe0596fa3bbd592ecbf902b7e6d23854d4
+AdditionalInputA.0 = 83ebb6fd473d7d2c84eee0201119c482395a9097c79dd7ecf66c44d42338f3241206e15717a08b2a
+EntropyPredictionResistanceA.0 = 622a303d7b666ebd3e505c7c89e892b3f975cf40801f552700a622404bb0f7fc19e1a27e2cf27d46
+AdditionalInputB.0 = 4416683933f1198ed5e4d9e88a2c2de03468438965985d0ad978f67dc15491e9669107c6f74c4db2
+EntropyPredictionResistanceB.0 = 79110b95d79e2dc2b5cd9dc173b18cca4a185248ce5f74a934038530392600ea44da292b0b2f644e
+Output.0 = a2ee5515319035108d0ce23021825a47ddeee1d55beaf7cb2eca796da94193c59a0731df7348cdeed7b91d6cd9336331ba717daf43ed454a654dd23f5f6db89e
+Entropy.1 = 605d4daf016704a86d301bc0f190173c8a0b359cd92959f7b2dad825f6b4e458535ee59f8ff0835c
+AdditionalInputA.1 = f3a982e663cab17f41b0e412e2b63a878c00de137d9c598d0b7c92deaf963739d38916b5f3d75d94
+EntropyPredictionResistanceA.1 = bc669ca87922117782e196c6256211df02af0bb2858b53a0430b76c3827b3e3198245ce06930ea33
+AdditionalInputB.1 = 90fcc06c65e4e1d831d7e4bac16ebee3ec53e18bcd35f73a5c4bbdf81dcb9918de5a5edce52aa61e
+EntropyPredictionResistanceB.1 = 48702810ba651e6a41d04fb45a7cc5760e33c5495b9c16b8dcfe9a7280c2199075e51448a50c6dee
+Output.1 = 12779ea7e27aafe1c2f45c7c7b12902e0b10dca230b8960c875d0d3b33e23d0acb470cab7f20bde347099beaf4c1b134e6d8cbfc8c6f3571cbf702c3ce5eddeb
+Entropy.2 = 76219626537f3778dd3fb6bf6419d31ad860110208f3dc5901dec44ed2f983e5411072ce69516b6a
+AdditionalInputA.2 = a34f5c5dcbb429bb9f93e32079fa44ea9f1a9bdf75802b248d6343204b90d516c6fbb47647efa831
+EntropyPredictionResistanceA.2 = 4a7e8d93fc988c84e9f895511902fbf2cd8c49603fd798173cdadd4bfccbc15b3b99cfb6327040ec
+AdditionalInputB.2 = b5c4195d5aa9b8a7f3dba4b3e13021f6cbece2b19e243d51da9d53eb2c65f7f5c6fc352621d70fe2
+EntropyPredictionResistanceB.2 = b8d53ea7e4c5a9b12589485c2674718a5b64984213aee7b00cb17a5899ea1f92fe10a8b9635dbb22
+Output.2 = 4924ba74a5b27f1cb66c80141d30e54ba98e35290110e5d0b2952099eb338bbc3ffa41eb75eb216fd438c357bf238b6b6ed660be5b5eb9e492f2f800d7f76ef1
+Entropy.3 = f5490e46d30f66e27a5dcf89d8028b179d6ffacbdfe5522c383f0a9c29dd855686318dc31cc1f005
+AdditionalInputA.3 = a1448ea945677eba2e0ab0cb0e6fdce6a91548cee6ef140fc7a8eb4cc91f2f5c480ab25b6bdc2263
+EntropyPredictionResistanceA.3 = 71c7b60feffad76de34681f7b5a057bfa7322c9a10f0bb37fcdbeb4cb55ee45b2b2c64e37793c6d9
+AdditionalInputB.3 = c141d39a3cb72529fea2f808204909fe92a06219044b3131931883b108f0363a7b499f1ded86f425
+EntropyPredictionResistanceB.3 = bda7c4d0aa18deee3661f15ce3ad7a311053504fc46ca5da3c42cf191d24139a5349cc1fb6ddefde
+Output.3 = afa66e2c80898c571f3b3ee9f53b5f5ad601d1c9de5b0e2c35b4603bffb97bd545f0271fe7133fb19dd99b23d2343f80718afef538dbe729173b95d7ff1ac439
+Entropy.4 = 98ca8f3253f3ec3b6ef6863b81821f2213d376de8578b07b771d1573561f35b012876428f1b10cdb
+AdditionalInputA.4 = 0cac0663dd135c393b4ee4537d73b005fd669a577ae5201805c54fb9b46b5fffb8174bec0297fc35
+EntropyPredictionResistanceA.4 = 92bbd6c860a6b36d47b3b10157a7a615f7bf53ece29b784ac3ec545d48d3f127a16a59bad4f940a9
+AdditionalInputB.4 = 93de9778da659d0341c5c70c33a7dec7524eb4336238baa523730e92b487053fe1e46d745fdedc79
+EntropyPredictionResistanceB.4 = 37816baf0042fc29bc58a74c3d507234f5ab3c19f174c3660da21152b61e3d1301461408eb42e67d
+Output.4 = 54976eae2a37439845e0e5dad2cc14e13cf6c0050583c18fe9d262bb5ac23e6ed684ca3ccadd9f42c5b8bfc031220227a36d3a5ad895189544990ea9fe5615f1
+Entropy.5 = 9d8e91b72290b11b9ba2a4268cd9bc890d5b0943443ee6c2252fc2449120d46b3c0992751149cdaf
+AdditionalInputA.5 = afbdd52bdf1f5afafbe851941d0595f99078d36e67e561416b05ac04e80249521c2cf1f55f16b9cd
+EntropyPredictionResistanceA.5 = ec965dad45c54e79e2c5fc3f639a35484150da4c69905e484ff1fee499c8bc9f646da955b3f1636b
+AdditionalInputB.5 = ccce4526aa299fdc32ea9853dec1b77145be4bcdf88f71c77ede3d367367bfb9d4d563b5aa5a6599
+EntropyPredictionResistanceB.5 = fa5e0a66c4864d9df1a14ee5bcf76bacbcce625226a1279cf3ef69e77170ac931a52fcff22e3b589
+Output.5 = 10d35eaa2f475ef1efea1abe1cfd74cdddd8949f666de6d0f1d4b20b5dbc53bee6aa712da07e8bed2309427d0171521a9f92839cbea96105a890e4238b020923
+Entropy.6 = 62f1ad3b80d94ab9c95e228c5ad69d8d482a83a2129fd13f5c84da7662b5909495421d2389de12d6
+AdditionalInputA.6 = 1218c4c03b69688afde73190f9ea5f535d37d06e6622acc88173ecabdcacc48e4011a48cfe7e1e60
+EntropyPredictionResistanceA.6 = 4bfed1e69a27b47eaed687135eab67d37d425cf55e65c43ac8eddb1d0ff7a2e3275463137d81f1a0
+AdditionalInputB.6 = e47e8f0b61e8c77f42a452b468d60cceb5af201e5a4a9bf8f36158ea62ed4db02f566d46242d380a
+EntropyPredictionResistanceB.6 = eb90ff940c38033d5250fea4ad83dd3aa046196e7dedaa7b17e866ae18029ad2cfef14c40f657030
+Output.6 = 31fd0448aec0a65f4d5cea1ef3a8231ca2337121badc6ac1050c3b8c7340e212d65357c5dc744746aaa16498ef80e1f8689f349590be0281801b3bba3dbe9f7c
+Entropy.7 = d09b57302f6f804d52321867321580a4f84342cd1fad1ae6ccb052304e59b93bcccff1bb92898616
+AdditionalInputA.7 = 63d19d8f476ae6c9295ae25d44e2b7e23ab990930337910a7f5e0ccf814ab6f245c39528dc3edd56
+EntropyPredictionResistanceA.7 = 73a07342464627198b4b91832e8cafc4949a472b613a897758c93d83cf2a291fe6600dea7f3614c5
+AdditionalInputB.7 = dea785e2b69148194997ed616786dcbe467a4e3ffd937d40961bc473685785de0827734783cae7c4
+EntropyPredictionResistanceB.7 = 40a1906dcd6c60b2d459804d94d6df0588e7fdca36ff4ba3488df2e0efe64c1e21a644f7a7016635
+Output.7 = 36a8b2d1f97a2c5ca076d40b987144d3024ac13e05ef4f40f7a795e42e49a6ae53db10ccae269ac7868ae178c2b2940c32d2c84037505b78259d2b4cc01d26e9
+Entropy.8 = 62cac0d10c0eda9eae2d62fefbc17ebebf8c1f3bd301f7a2256cfaced846c7d29b1caf580ea867b5
+AdditionalInputA.8 = a8b3941a9c9d267e82445ec50cd598bf435c8e92c1ab2eb44afca1bf6abd11bb21fcb89deedad1ee
+EntropyPredictionResistanceA.8 = 3c7ab921e3a710479db066ebd1bec4391fc5bab8dfd383883c97e809f3c782fbe469b53e906913b6
+AdditionalInputB.8 = 5dfb8887c05c6dfe58032cc19be5d4aa51ced92c87350f052ba993214522383bd279fd31bc6b54a2
+EntropyPredictionResistanceB.8 = 162290ef03e8cc56daeffbeb84a620c4cc0d3d385c889ec31aeb7d3dbc33a0cfc2904155c422e5a9
+Output.8 = e2fbe5daab4fd7d4c2ca071a2bbb5ad4518a467f4fb096170261d1058acbd8dde6aa8c2b25d7a6489920d8f225c55ab48309fe81008c59dcfa2adc4df0cd6d45
+Entropy.9 = d137be3bdd16f90d96e99928b3c27210b0da7cda92b27a2bebc5a9dd82d9dd8a08864d3993558d4f
+AdditionalInputA.9 = d22e216315c915d9b359e509ee48a67f0a0f4e65779672efc18bdf57e4d1f666d9e4c8ec2ca41f6b
+EntropyPredictionResistanceA.9 = ec4d2219cbdc84cdd62faf65b6d18d5ce28087a54e06ce69f310b7988dcb25bb0df8df524da24c24
+AdditionalInputB.9 = 4af11eef51881015d92cc1882cd4809036bfb34a65e4eb933d2c55f0fa327c8a2b21f9cfbfbddf9f
+EntropyPredictionResistanceB.9 = 2b00d844fa01a2fc1d36e51315a9c0c504c2d88defb21d636167dc77f5248e87701376d4d753e120
+Output.9 = bb74b32dc4b4f3d57b5c02f7bc789fe30af9126c5a78c6368d055c2dcd866fe640e39216ee154a7fed5e489a784cc75622f0a01dee1fb1d6ab8a39be0f7be928
+Entropy.10 = 20b1ef15450191f1230af630d2e7e73fe32b4785d3e50c3eb9148b049dca4a4f66398eea9224d17a
+AdditionalInputA.10 = 4d9b38f8ddad107191663ebd7a4f737145bdd5a026a01f12bc565a1cdd9e8811bab7f6d7a6416223
+EntropyPredictionResistanceA.10 = 455c9385700f23124d9b3e2891f8050921ccbc3b503640fc8fae796cc5b926cf35316e14636587c7
+AdditionalInputB.10 = 704059d0f8c0ed5ce507540ca0a12f12024716b3ea30054e8172f27fbce9d4d84f3db560d06bcf75
+EntropyPredictionResistanceB.10 = 003edc6264dd519563792d8147ccc58357183569b2187dd041d8be00eff4cf5a30114b932103b434
+Output.10 = bc5af2bbc700c2592a0ef00bbd5af4322857e593ac4103a0c640d4a2a69fee1f55d571637092137d343f2d09399d386a5a6c154c5756ba4c6d2d5bca66532946
+Entropy.11 = 783096ff2e911c69ae9539aaf86da4ab414c8c10b7b2d82c236758313aa3ad2096bf7529727ef750
+AdditionalInputA.11 = fb157cb2c323fc5acdb17d5579395ff1e1a88971162e4fde111f728325750a4a011b7092082f7719
+EntropyPredictionResistanceA.11 = 18b469bad3de431e06beb23464191357868ecb7a79c643460f3a7320bea861010978faa1379816bc
+AdditionalInputB.11 = e5fb2e23754d4c612ef96914d73f0912952a968e8cf4e1952eaf291204b6afe84fe26cc0391f09bd
+EntropyPredictionResistanceB.11 = af9e390eb1776cf2a880e92814764a60c3d7bfa3bf001130f1293067953c740071b2b4cd00f5d41b
+Output.11 = 3cb27fc283e498aa7d2c43fb77933d3d6a026909cc0dfcb80135ddeb83354c33cc15f50a897ed15dab57dabe8fab69064e5b7fbf59810b53886aa7a5953e8963
+Entropy.12 = 5f3ff6dff222680504052d94ae64f4c83a5b9e77dfe7b4cb9fe4141f04c751a2fdaa2ca0a58a68d5
+AdditionalInputA.12 = 8598e8662660e3f543b70f0d4e5de6535aae64db3b556e2c5756ff45275ddf22d671bdaabf3a397e
+EntropyPredictionResistanceA.12 = 6090290f5182b0470a973487bf45357e16764070f94f286fee5521499a66ba64c55154b19fc38d95
+AdditionalInputB.12 = 99a0c2c697192e743b1997e6bf7418a11ffc1425a4d7215722a1bbe9833dd4104c55a1a8c5768ec6
+EntropyPredictionResistanceB.12 = 05d844c70fdad7d80ba853f43ecb66e17cc50d2c2faf2a74827af2f46b826d4d0a966aa82b49e680
+Output.12 = 862bd0a524bff9a8716820bdf9a06d66f88aa4ede320553f79b61185a50d58f4d3eb8263794ea8b3323989687b4f54932454beacf015d18c3d10e347d793568d
+Entropy.13 = 8772fb86c6f771168610d60f62f804b3803c4bb70dfaa252180a7d12c46ee6d3ba3b4ae5ca67be95
+AdditionalInputA.13 = 2c77765482dcf72c586cb02f8e317626647b7ddc19af06caa303f4a829b124543d40e41f5a6f4bc2
+EntropyPredictionResistanceA.13 = a65c84c7c4f7e998e273a2c7ae89680eb290ebc8cbea535490d52244be90e562aa6dc98bfe63d88e
+AdditionalInputB.13 = 9e9c880d80140a3d3da95a126e925b488942384214d6e97575386b9a329bd91ed26973eeb4cad448
+EntropyPredictionResistanceB.13 = df9a15d2021d0d9a9e8abf4e7955b09619d0348a2aa0a95fefccf042620e0b868f32441e73b49ff7
+Output.13 = 5f2a608cba8bc5becb3dc96b5cafe2afc5e17e92b73c6d9f81237a71810a7a83bd42a858e7bb25c59d5c36791e36acb649dd2bd383abe2689612c68c3564e10d
+Entropy.14 = 9027dd60e92d08614b6a590fc3151bae2b3ff79dde0108d488d00fb355b79b38fa88f6a891a47bef
+AdditionalInputA.14 = b38f24ae5d85c30088c3584dc1548154f523308a5c2214c2a51817edd135cb544f3a04002e1616e3
+EntropyPredictionResistanceA.14 = 030440591e9c440ad7fb673c2b4e2902f75b644bbf7b4ae75fa155ca7e1cb39f61c5761ec8fc7f14
+AdditionalInputB.14 = 3f5221732e417fe4234626d8b4fe5dce8d0974a7551c4e7b9eb827f32c7b85793b81b37b4355f6a0
+EntropyPredictionResistanceB.14 = 1d81b5e14e9f995cf19771d54877e97b2d4f551c36033874fcf3a4814312d7064acc2556ea5e0fdc
+Output.14 = c6d9cb21922398c6a63e4d17f0f69f1d4c1b4998d73828d43ea1f69acad5b1d94800a6976c09a8b5befa2b0c82877874eaed15027f9f7dad3bffa005e49758a0
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 69f8ebe7504da933893e021d0943dbfbffe1a7f34edc5448cf97a5eee87de33951fe27170dee634e
+PersonalisationString.0 = 83aa3e06d3d91f2366552aa66ad440d6d23e3f139edce71d4a425d3feb114dda56f67cc17006f9ea
+EntropyPredictionResistanceA.0 = 95464d5cec3ba76114b6480347419a35e3e738f04fcf421d1e270fb822ccceada63ee293243b12e4
+EntropyPredictionResistanceB.0 = 64c77bc8f02c83919bf2d2e512e717b863dc32cc902eb6a410f617a242017dccfb49ee207a487b63
+Output.0 = 125dfa2ecb417a4f6c075a61d4b90da4478f17cdfbeb678187b1276edf6bf0295de7d8b90b5c9bd772ea3604c4de3423f8d819ce8c86ccae1a9707497a11355e
+Entropy.1 = b57f9677212984900cd73a1400e3bf1dca6cde3770b9d9b8e888d9c6b74da217ebdba68e99297f14
+PersonalisationString.1 = d111491e7c80f3a89b1c3fa420aeb37210f94100721bcad297bb791d4de1ea92e79f05e4e7d544e8
+EntropyPredictionResistanceA.1 = d0571a4e6a3abdf819193e018e66268816c7dce1203a1f6fe19e545b428a3de57929b0b3e3cc08d2
+EntropyPredictionResistanceB.1 = 462f1759d2046f281c2cab668179a113aa5e34c74773c9c5e61fabe29b2a8773b6819ab522d25da8
+Output.1 = dd69c091f051e8ad846c43b91123740fd2503d4ccc82ab1dcf4a76c9ea0576fdee628dad2e8c7a4627eccec22bbc65fd9eb93511f15a8b81422b032caf122e3a
+Entropy.2 = 445e9f07fab81a607077bdaea13f607ec1ee32dba3951d3dbabefa650fd0dcb424855d38e8fbfa7b
+PersonalisationString.2 = b2ef7e488c60ed414d0a1eb658ed961dd6b8e1d197af12e12e19434bca7ae775f074db74cf84bb99
+EntropyPredictionResistanceA.2 = cb6e162faefcc7a66269d5d2d30a2f9f10e99305ccf5a4b77cf304f6f0a730c373b8c7ea493fb512
+EntropyPredictionResistanceB.2 = 1cfbcc7425034398f9044f32345b5f059d614b5feac61fd90ce1464bc2c01ec69e81257d05075192
+Output.2 = 36b91fca754603392b232e27dfe8c833ec3d80c78bc5aa472a59a5fecfc4311b86accdbd164e39855a38ff13c99c70f6b43933f327eae1733c6ab4e0e2ad41e1
+Entropy.3 = 5bde17ac69bf36bb759a18cc5be7b0bc2231a19865bb6d7b0b3b7afe0b3f123acd7005a53722f821
+PersonalisationString.3 = 0ec5a5a371f0e019122e46e658346d6df02c77e36efc010787b474fef7a5f7ae28c4e4ccc0af3ede
+EntropyPredictionResistanceA.3 = 03d693da71dfc90ceeaba6a722e9015662071b768de386d6019b4d5f12323558cc3a5e3a5663e4bb
+EntropyPredictionResistanceB.3 = ad7290ace8f0858641a43eb7ee50b1db858fe2a10115a339641a7767ea057513fd7732c7b7ff2e07
+Output.3 = 57770a05e990a06af3725a070c0b715633e5c113ca5baf1aad4a6fb253800b776f7e673f9a3db2eb965aa8612201dc9c6d209ce8ea292e09981c07a90fc69c76
+Entropy.4 = c547258e1805206e634e8ea829dd4f5216fcdb4e9f2d805ebe1e3153a3f61b5ff12f8aa1cf82294e
+PersonalisationString.4 = acf2988235417b3085eb59e9b49e59202b41cebfe34f3666dc37fb14c716457239bb4d4e3643b3fc
+EntropyPredictionResistanceA.4 = 89bf536415aa5b673af6b775cb6d6a9ac399b3ce9ee5407c064cca6d00584a707e7b2fb7fe62a4d7
+EntropyPredictionResistanceB.4 = 22fb3be12735e6bc878d9b8f9f65b13e604f296bc99cdff21c7b801e786ea37799b70ed53ae7ad5a
+Output.4 = e177dfe6da1ad68389a5e8aeb367825b4d9035944150975ee1178d6172c0e0ed0ed88bef2b8c6ce573d83effd34788b40172c3ff62acfcf6aaf26fc9176459e3
+Entropy.5 = d34ae9fe14f8987795dc0b55ca1710231fc9a5091f3935b3ad2feb44714433d1742c15bb68997ced
+PersonalisationString.5 = a6a0f1d39a66fc554f7d074200dfad91e7fd16316a0b60c3a1658423f83bf13387af2c8301303172
+EntropyPredictionResistanceA.5 = 4c5f21933544fe01afa5c93412d351d9b288ac8047e7c63a36aded49f7249b59c04870f2815d5eb9
+EntropyPredictionResistanceB.5 = 9fd66b1081449619f767d45fbab3843a91bab08da9ad4f8baaf2408226e1868c53c3fda85085ab19
+Output.5 = 28436a170afe0d18b904ef245179ceb3c87c911e6c4151758a099013277cb231dff6bf5dff9f3d2a78f86e3f030516c82bb0d315c0638baf02371c0706ddd839
+Entropy.6 = 7906a72dbba68457fea9d6314525d472fafaba378e6e9fbbf092f1c40b6ba04705f744f253e1d52f
+PersonalisationString.6 = a1721fab9640a474533f6ec27d7d3518c570c7596a8b65d12a6cfbc8aee9ced1b4de633cca18cc66
+EntropyPredictionResistanceA.6 = 695ae1cfd3a2c0641ca88242ee47036b183573a0d5b111d8ea28ecfe9494bb77c76adbb5cd6d5319
+EntropyPredictionResistanceB.6 = 70cbe4882d3da43ff16ac4e8f01c2765bb334aaf936c1ed63a174cb64cdf30284a2a88015f2c70de
+Output.6 = 038998e95de70b8859b9f8c63c3ba6179f601b2505a87da081a51bec51bfeb5c694263f87e902b65c92ccb85843b824dc9a092cd17d483663fe823d2ea168596
+Entropy.7 = a08fc98e210ae8e23215ef34e6eeae601b11f18223dd82d98c9c3e56873fa1c6a877eea3224b02c5
+PersonalisationString.7 = 53ff73abe2c24b3e8b2e56dd84a6541bbd017b8348b67d970be85aee224480c1ed2a8d7004a01f56
+EntropyPredictionResistanceA.7 = 815c3ee7685198c2e206b49193ae52daf6b371484f9290aa9e227249fe33fb9a7579f6803be99c55
+EntropyPredictionResistanceB.7 = 41990135fdfed0ed1ad2e336f4612631aa18d69f13db809336188295ba8ea6e375d911f425748804
+Output.7 = 3faee44863cf1bee45e3726faafd11e6053e25b25f7fa9af258398f335bde865f815dc81c7be6ed31c6a8ddc20a6c380bb76189d75e9aeb8232c094f3c6e2fb8
+Entropy.8 = 0e43757cad687ea705c98368fa8e22a2590a3010d3f77bf57eec8d6e803b0df001335065702a73dc
+PersonalisationString.8 = 8bb00ad27e504b26b726e42c22808c96be3885b5144373a9b55926d09c87c2c0c7c52e50e8e6d3d0
+EntropyPredictionResistanceA.8 = da5da32cb5e6cd46a1cf7abf085d63993b736f5d347cba22d62ba4437bfe9d82d558867b6cc0a06b
+EntropyPredictionResistanceB.8 = 1ef7cdb54ca6d161a3aecd0b69d6e5fa336434dec804ed38f44db9123edb9acfd31e0e40d0d851d2
+Output.8 = 8fde231fcbc0a23d59c91e25d7b379ec27d79c869a9002163cb49e294c07453e7b3e623d8d2d0a2669608b51c18f5efeb5209f5df640242ee0e9e8fa950d0ce2
+Entropy.9 = 333fa21f65ac7849104287234e325f790a8a4b0ff6c0facb05d2d8d7f8e7b8fbe5660465b2a1005f
+PersonalisationString.9 = 314e90bee5932da578863370cb457fa4cf985491e476e1031fd35d0eba34546e77f9087e193a9673
+EntropyPredictionResistanceA.9 = 33577539b004253d94ec9b5b00b0eff205f971e4c49e7d7a247301d4524d23bf17cc395da9290a44
+EntropyPredictionResistanceB.9 = bba63ee3bedfe2437a15483ad96230f05bb4f87265d53593f545c6601e1aa7c60918483e00249276
+Output.9 = 8529b825452611536412d89cc1a38e785aa1e24f50d75fa1683c7515b39bfce8b0c9f559bb422f93663ff52a37839e07a9b34cc9c4f335ab21d9928dc470cd3a
+Entropy.10 = 7c84ac8fc42f47383cbbb71645c9fa2a26d10e902be646cae24bed37c479fda6a167fb3f5097a0e2
+PersonalisationString.10 = e259d6c63d8a3a37ee3faff5243c206f02b34d1f920abbc00ba95e267237bbba6d1dcc1be81dc559
+EntropyPredictionResistanceA.10 = 80c4b7649e7bf189b914a1fd772f1119a5a6531b201df47a6bc702372bc3693415b193b59324d3fe
+EntropyPredictionResistanceB.10 = 2eb10d46d6cf9acc13bec97fd85ba2dcf938046dcfdebadbc27cff0be5a7ef1b569f5fe9a53b526e
+Output.10 = fb22504b112868e72fcfde7b8ffb67a93b269cb37e37cbd864b722c0acc2cf2f40ffd48ed3a8f917ac5fc2320c4f4f9b14774aee35aaedec03a2fc68d6a980c1
+Entropy.11 = 2dbe8da9974d6a6c753b96ce0b36db95bca459b2dddc5cfd3efeab9a40d451b00ebdf785b3d37ece
+PersonalisationString.11 = 3e00b64a293d6eef0630757d6133b0a7ef172e5717afcd95fc0cfe24846edd3922f0c7bcc301139b
+EntropyPredictionResistanceA.11 = ad32a23e3b631b876130dfeda475713d14b6f94a4c8c9f4e7bbec4410860c7b15b346f53163c7c5c
+EntropyPredictionResistanceB.11 = f81a5f9a2dfd5b924151570759d845d41073a3628ef5f0ef622297d158ccb173ee554a6e1ee68083
+Output.11 = 296a9339ec0afe0a1ad8b3e81007721b78e8f4fafb1ee6ce76c422c9947c419ae2bab1ea0c9dee24c05123a28e7adc2277a147aaf682b89e767daad36acbe286
+Entropy.12 = 5f8e78c5b9148cb1105d6d52926efbc9f56abbcfab429cef20d10bc1bb2935f8cbfe731197c95f7b
+PersonalisationString.12 = b61cc08726d91662615d60190b4a0690af5e8c2525deeb5795e24024566e6442f12ce56a114a3e59
+EntropyPredictionResistanceA.12 = 59e59e0a807258f69e587643c7aa0c3bee550c7ae5f862cbed278c942b03d3650873dcde2fc5b2f2
+EntropyPredictionResistanceB.12 = ada9fa432829991f4a9933797d3f49045044d2dd512417e78ad34f4b69236ec378392aaf09500935
+Output.12 = b6fef6533b0c2ca213eb57dc673937de103b82592bdc43a02b335291082d18f6630798662b566c6532cd45a5f3d0fefb8e29206113484908f99673edf6069826
+Entropy.13 = c27807eea73dbcee52f12293ecd15d6833835e2a9a253e0307330cea1742e9adbc6357a0ec4c5e24
+PersonalisationString.13 = 5eb457c88fc11bec9beb9d4cf0225456d1863bb6242df9e112633558f4ceebed99c7da834de09bb0
+EntropyPredictionResistanceA.13 = 2005e2383287bcc2bb862be01d48c2ebb354251b66c57baca2596f4588ebb95ca1b4be1e836c88cf
+EntropyPredictionResistanceB.13 = 8d6002d0fe98d15cc510855e57cd42e54e850f97273676a4b0f20ab06f12992d8c2dada67ff3e138
+Output.13 = addbe7eafd981e18324c5d8b791e0475e348d7a1480b4b709c72d18eca1bf7ca2bb1a143ffbb319f10c5d3add3d8f545a021481099e728ba5354f5e26d5ce3d6
+Entropy.14 = dc0d01e65361817019834e8e94c9cad08090b1701f991ff799f75a1aa9f97ca6f63b48c740224a47
+PersonalisationString.14 = 01f6902d4bc5fdadcf44d270b69a19f3612ae6fc0c2dc57eb2e8ada54ada4ad8dd28529447d16aa1
+EntropyPredictionResistanceA.14 = 21db28b5cb9724d93c58f787b155f0131c39b5606e6a968dcf7ed4ccda1da3c9a4c9c731d4f7bed1
+EntropyPredictionResistanceB.14 = 4aa587edcb940c3a9328a0ef2f195effc1cf027b549ff1ec5d5cac0e996196eacd16108498b27366
+Output.14 = 69dc6c36459e005275e344886624ca61a42cba3387dcee79392ae96a311313dc7e33283605fb46aa1d881bccaec6336a61545dac52166cbf8174b8dca3ebfbc6
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 9f3978f1548545ccd1afd2d9a1a8b50a0d4ffc8bb08bfdd96379443a070749f1bd1952c14999784f
+PersonalisationString.0 = 20d2358fb00eabc9e225cda2252435fd7177ffda72c2c315501a4c5167590fefd20526c820524687
+AdditionalInputA.0 = 610ac241fea1dabad37f2e04120c6beae2786b2b82fcda64e812b89d30f1c41f830a54137c1624e6
+EntropyPredictionResistanceA.0 = e953a8182db2497112d0c6b1aac6dbf321afe39a4ee9e74b389a293b6b69196b03ca95d5e476810e
+AdditionalInputB.0 = bcdde71bc0465bf0130ed55f3f80183171c8167a00e1ee7070ca4cc04fb0c5f277352de28064afb1
+EntropyPredictionResistanceB.0 = 65a470681306ea1dbb9c32ad85b5ef8daa50c3e2c1acbb90ae2d084b72c5651a2f46e82af6e1296d
+Output.0 = 0ffef978660d79a32752dca389f272cea7e0dd21819c4c6c82b71f533ca498c9efb21d1eeb040bf9871e4754ee474ecafc08b8dae32453a30ab3586aef54c3ac
+Entropy.1 = 817ecab93829bceeaa9e8629ebc32cd693a34015a2ce44a93ea5a435a833450f3195704f156a1b18
+PersonalisationString.1 = d1647fb36c04150842ae7e123094e793bc1bcecb5f5b2522efb6fb3c9291eae4aff0b8f6764b2f0e
+AdditionalInputA.1 = d4b79e9e70a4fd0c9b5305e9d1a3bfb6824eea74902f821bb408f7bfe23d6e1ec3c6893ab6884e0c
+EntropyPredictionResistanceA.1 = 032438ade2da4e9cfb135c29cf87727ad6c0dd48aba660fc81f491b51687b25b108d97c68e1725fd
+AdditionalInputB.1 = 4946cddd6d0481b8a40347dd610069c5d21b787a037cb1e26992b2291dc5fa61eac15dd7f5cd0ad0
+EntropyPredictionResistanceB.1 = 9171a246e53728a7d295a6e7554a7d6a9264673a69767748519cb9a9f3e47cc378afa5d46c8f33ef
+Output.1 = e6d673c0c449a603092b4ee46a8c611cce66ba2018986b501075340cf0b17e90313341e96d1354c15e7398aa361a2a8f3d56be182a71f60ec699945e9cd23bc9
+Entropy.2 = 4b198169e060981b62acbf7287aed74de51e15c55fd55c510faefcab57dbf9fe3f3cdfc0784f8d83
+PersonalisationString.2 = 24d6bcef2bf7143ce0f3df2263b7fdfb088d19dd3f9f8d4a184eb70dbfbaf500829d397a9fd719f3
+AdditionalInputA.2 = 911c40a44b5910df4da26e5f94204102bab6175aef7b3310d1a85e1f39024e68c4ea94a06e22c908
+EntropyPredictionResistanceA.2 = 463558467c3dc5d3f1669804294d0abd3e8eaf1c27f94bf783f2457d043c9d3cce68ef7617293ec1
+AdditionalInputB.2 = a67aa8a8b386192018ab8359f8dd68025d55107e11c1d4863ea0087448f956c2791e985960dd9ab2
+EntropyPredictionResistanceB.2 = 56c3a452bcbc6e75c17af56cd762c09c47a114a193c0d2f9c1428c7eb7b3619bc20751b7d47e79cf
+Output.2 = ec75c6d16d7e9b8271a3c95062a4fb914dc29a7532a73b922f40db7db4f63978454e3708392888952a12c9a4b466344019114ec348926453e68530add6958a41
+Entropy.3 = 57eaffe61ed100e5e915540feebc202bf1d7c741f1f2481a81572d3c33e067e13dd72e031596d00e
+PersonalisationString.3 = 20df87eabcafe7a11591f52e1dbbdc67b26beb4126aab7df891a6e430f854e52149e29523ea6c32b
+AdditionalInputA.3 = 3a874d78532c12cab6ed146f1843f79d2ebc6a6de3bb5b623cec511f20cab05ae99d45d3d6754f3b
+EntropyPredictionResistanceA.3 = 02f91abf298455465c0c5f6288405589c8cf7044c3111c7b0271660b6acf042dd70209ba8f9c446e
+AdditionalInputB.3 = 55b0930cc7fd93c218a17c4635c06c9180ff047e6a256b9d497b98b9feb01a7a1d27564b404807c9
+EntropyPredictionResistanceB.3 = ebc195daf0c28da0e7951fea5171c2e56709972f599f0a58cf8583715348a1190df5452e64054689
+Output.3 = 72e1a2843905f4765c673866f24624864ae1e5653e938e538324cd9f20f95cf03e6cf9fa95eecef497c0c606426555449b38da3036286de3eb73de1fdf55844a
+Entropy.4 = 155ecb97c36336bba9c452912ca2c0e9d97962ba1f9551956c1d2da810b9b55e47db088e12e55ed5
+PersonalisationString.4 = 1c205b3715242c282a5f7d028cddcb64bad127e72d9177047974a9efc8b2a373f29e745834abb704
+AdditionalInputA.4 = c1a04abbfd0cd5db8bce8042e41743cce7ed030479d915d05a77111d85ce2017574d0df26341d5f9
+EntropyPredictionResistanceA.4 = c75a9591acb489dc501465e503431ec674eb3a2e257473028ef576ce119f35b0bbf724755adb5b91
+AdditionalInputB.4 = 3a2fd60e8687d0e4a81f6f8fb049c098e9cf3791ac9fd3240320d7f52ca77460e9773996ae95e0d8
+EntropyPredictionResistanceB.4 = 3a21a3df5942ba9d1de4c2908d6d50fd938d5e48cdd3948bf1165e535dcc1d492045317a090f8062
+Output.4 = 9c6c444d70658dc18aeef95c67cc4577eb188ce82e036d0094858639381b54984bcf030f60c14daac651f6aa3d37df64eeeb1db26d003d794f3af797eb38ae80
+Entropy.5 = 00d928232397817da2f5e964b43c3fa867530f0f49e7144c17dfb74251293e26bff13352f3797290
+PersonalisationString.5 = cbca17545ec15009c4064976ebf15f0d8e6b3e3031eca099ee19c86852e143c95ce076686a258e52
+AdditionalInputA.5 = 1c6b3f44abeb02e15a3f70b4f917071c1808eec0687130ba33b5c83bddb2549245127892a248cb5d
+EntropyPredictionResistanceA.5 = 39e5b2d9c15e84ae8da0f44ad270a299501fe9b3cb8537cd43339f094c213c95a84909daa248cce0
+AdditionalInputB.5 = 020994f5d4ad07730ba11d64a510e83d455943489e2073ebefaff87464d36cb4bfd35f157b31f358
+EntropyPredictionResistanceB.5 = 966d2e8b2b60255c26090914b7a01c09633743f90557e0c0652ad756d3724cadfc21a4b2c014e7b7
+Output.5 = e849bb1e69c4a03c0f08a002f167f5b6e4a88af740e12243d1df1a84c9516e4d15b2c07f50ada08bba4ea3101559af6a13bb9e70f79d852f788c994bcc8c154e
+Entropy.6 = 13f37a8831b55d35368b0a769acef94f274cd1bc07bade748debe2c2a3822e76005108714e97604a
+PersonalisationString.6 = e27e30dcbd56bff17abf07e5d5528f620232ca1947e4e8f6148e68b73f1600f7038789492edcaab5
+AdditionalInputA.6 = d8cf781b9be6855536ef0c0efdca56ff672027b78b12d0109633d5e12969ac29678108835a86657c
+EntropyPredictionResistanceA.6 = 8f786d4cdf679480ea027be4e792201697d20f9fb65108f50734f64392f53ed53a053ef79a997b76
+AdditionalInputB.6 = 541e45966565e9726aa439d4e6e5ebf6c441f7acf0862d92fd543f3d9edafa42890740cdc132e319
+EntropyPredictionResistanceB.6 = 673fc6845dda34c82ca2b26491e89fd8d18eaf79057d1511b189ae874e46610d48f8237cf111e117
+Output.6 = 567877c2b32d86dee082eebbcbc644a5e7d41f4014ecc7ab8d6eebe4b051a1eb6f367713fbae215e69570bddc221a96833e2a08f9c150f47622fe3790d3eecf4
+Entropy.7 = 9a9fc7fe4dc3f349b061fd1ae4273604b848a0e69245f53848ba911f34828757b353465224298b5d
+PersonalisationString.7 = 0fceae3cb419284b97211810ad80e52242c379f457f365e39259c28da8aa2c5e635f2b32ce15b38b
+AdditionalInputA.7 = 694d13d10843dfc9e79f26be52dd6fe144b5260d2bef6b1206acfe6af2a47e13454d2bed86472193
+EntropyPredictionResistanceA.7 = cbdddc9dc353136fdb5d044bd1790dca6b00039657031c759fc408eff9cd9bfae36f3d6ce640c978
+AdditionalInputB.7 = e81f7db34affdf7ed52486564878f07ffc7a82691c5882bf600dc8d60ca5de8b35fb24e03bf1a4f6
+EntropyPredictionResistanceB.7 = 26317f9a214b98b0cec12036a0fd7b4e3b531d9a6869387525220a1fcc6f131196039f895bd5a193
+Output.7 = 9fa58c81250968ee7f9fc2468b9593c5babea0cf3d537824ce3599f0384ab8a084e59053f7b704a2a229df762af8603d711c88453d4939fa593ba02ab1d1c6b5
+Entropy.8 = ada9e3da09dc616202b72206b001dfcc36283134b9a8d0c46fddd8eca6b03b891c17888c8ca6a8f6
+PersonalisationString.8 = bc4ed9e6fdbaae7bd30008341f338605596c61b5753524d124a993ef439ad6c0252261778f066fec
+AdditionalInputA.8 = dc99bc31a6913d1683270ad80040bdc42fafc9121af87dadb79f3e01cafa999ae88359b298224b0e
+EntropyPredictionResistanceA.8 = 392a55c89f721371fcfac9378906ab3b8e1fb603815fc97a05effd00cba9ae305c5e4195aae4bd7b
+AdditionalInputB.8 = e0828f3691462ac15b5fbd4f8d8bc726fc66d3a6a14f5e1189b929398f8354df02d285b2128cf99c
+EntropyPredictionResistanceB.8 = 1f0f90af7277ca5f285861e34f8d0ed61880979eafc290bcb0dcd104908961a21a9a7aba23fc684c
+Output.8 = 8c65397be8cbbee6cb0f71fd84b9f4418b515d62d14d6c07c87bdf8ce9287c7db10529b05308dd36699f2fd06247da5399be27b339f5b9836eeb00614c8147e7
+Entropy.9 = a83dcf16d5e2bdd96d377eb3647d79a7cec0147cc902c82cb910ce73aed25eb0bb52d33fe47565be
+PersonalisationString.9 = e50cf10f58b95eedec04ecf57ba75b45624726dfcef18bbcbd3427a35dc544c5fa568af43c0a7a07
+AdditionalInputA.9 = 3415699a33ae558f865c7b0a50db7e0768df8036bb786895e748faa1ccc6458734481e2055d573c1
+EntropyPredictionResistanceA.9 = 8403b8096802b321a2e73c404954517699bfbca7907d8f6f0a813483c3cf601a8b3d2a80b94bea85
+AdditionalInputB.9 = a8d8ff0817c1e82ffe8a59b6b6e78cebb196f66c6a3e7bf89a9bf6aadb7773a7847d1d0cc161c0a4
+EntropyPredictionResistanceB.9 = 85c26055f61615f82853c92614a4465c8fe3601e7beea3d018f9d9aa03014b9642ff8635df3f8ec4
+Output.9 = f7444678b78959d21b7ca9f0c3128afa16ee5324d60ea4d76075dd3a53d2691147650c51ddda5f28b633572cfa92eb1aea001ec5a1f57447b50630a5e55fba27
+Entropy.10 = 605aec5b817368acc913954e1064cf6e30397d8ec42387bf5a1552ab938b7ff214830bccbbe6debe
+PersonalisationString.10 = be5813b8d6163a72c27a194318b1504112651b227492c43de664f55f7b4e9b9819f4c939e7fec605
+AdditionalInputA.10 = 0f2b2fe88408407ba707a0213fbed7f8a5a722a5e74de2cfb3d63bf58fbed7b1eceedf90b9d2ab4a
+EntropyPredictionResistanceA.10 = 2ca2247ebf00362ef0fbda4cde840675def38b87e03d107da6463f5d32838cb675f9c4dc457d8e22
+AdditionalInputB.10 = c6f735b53b5924001b36f11ce55ea0bcacf786df73911fa51b7ce1e61d207f3fb511285ab08d45f0
+EntropyPredictionResistanceB.10 = 6811e9584b3bd87f7473733e3d4fb4905c4affa9722b21293f3055eb56613aab9959071c1594f8e3
+Output.10 = da906d45741c66f7d1b937b6023192db3528581ebf3bbf0208280bdb97e01ef262b7f26d2cc54c873f4e0792745f2de7bcaa8e721b857b82cef898a49d570f34
+Entropy.11 = f6b1753ebf0c6f3108f1c50c3d9234dcd0ab65c67a94b6200040a09547dbe56a36df30218137d178
+PersonalisationString.11 = ffb0bf5a33653e1f5737e33e057b7735e7d96e554888c995db809ebd4bd9d6366d30bdc5dd27ba61
+AdditionalInputA.11 = 769e3d97ecac943240e7b2c73f957efdfd43d87ca3e83cca93f924238b25f49ef50595aee92f1251
+EntropyPredictionResistanceA.11 = 69dd3edd041e53fdf1954cec90bd3fe3c1e5e78785869895c714475b79e96ebe47168f58bcfdfd8a
+AdditionalInputB.11 = 6525ce04e07ce0bc46e4bea6a3596ebcf53484e2186d4459d920bbcd027617b42a0d15e49674b1c3
+EntropyPredictionResistanceB.11 = e0e5d23304024b77b0b09e06e96129dac8d042d76c68a1c35b1974b03ed24a86e4030f85a44a02a1
+Output.11 = 0073a5cb00dd912c251a92cd225e29cf43aab6903aa9b7351fc6047e22ba9066536116cd84c7f01b3ffdb7612033508fafbe46f0e2117e0daa8cc25a926e5d12
+Entropy.12 = 8eb15bebb16f8bea5b1cdfce916ebf8d77a13ed610aa35715025eb06a86bf6bf8457db8bd1f4499f
+PersonalisationString.12 = 91192a2838967a2937f9c038afa2b84c91538aad1c6845844d665687a27d6c5fe9a6df1e4eeb15ec
+AdditionalInputA.12 = 07eff7036071035c379bd493ebe5fab951600d7f1dadae407fde794fd479ab23d246f1e63ace104a
+EntropyPredictionResistanceA.12 = 9253f06707be0e84a423db4d616e0d39bc43282e00be8ff117c01537034605b3920a3ad754506af2
+AdditionalInputB.12 = 5a197a6eb06a1dc4a1fecfbf9c7c10e179eac224eab01822ba1d9dbf981114b26cc028b575f60789
+EntropyPredictionResistanceB.12 = 004ba63de3238afdf486915a607d07c5ddef121c16a864029ec6359a98fea4f2ca9ecf2c084be077
+Output.12 = 00d8e25159d8c249efca646ef9751c71fe557037445bdff8edbfb46938ac75ba554191806791adabb250ed05a6ec833fcb0081978a0340ac768cfa47fe640b9e
+Entropy.13 = 384640cdd565eecdf05cbac4021c93e9c5607c36c761e3469d9464a9875337d325389fa667e78e56
+PersonalisationString.13 = 3b18882c087d0404690b7f15c4faaf4c227e62117b2eda5dc84dbbc28968ad77b69398b92567ea0a
+AdditionalInputA.13 = cd9d0deb5f1169468b38ceea01a5efc96f60a5e929bd971e98131ceba3783da6d8f2f2fe7a52d3e0
+EntropyPredictionResistanceA.13 = 383e05723242e72e6570996e8438b8ec2e2bde85ef9f2c4629ee8141092ebb4bee0b5dfb1763c085
+AdditionalInputB.13 = 091424749bb211be80eb593e4322ded464525b3196e7d7be40f435e7374e8fac36f57e1c4ac90d66
+EntropyPredictionResistanceB.13 = b60dc8d9d05476addeae80ccad1b2af10d92bed15bd8e9927a7f5b5d125e0e7e9b68781842e5071f
+Output.13 = 532e6c92192bd5ed33fe8f7da9705f86ee8e0cd390c4026d7e7c314654b2dd86a683b513b07d434a289951384beb34b7e443c798e91cc63cf23d9feae2ccbc76
+Entropy.14 = d93c4242ea9372285aed47ba4bfbb430ec4a4da23b62f77b5a0c99acc338bf17f59daa32118f8920
+PersonalisationString.14 = 9066000c463f8f41dea0149c11d9772432773f78fe67aaa864baf7e8e206e80d013ab96e055ee2e9
+AdditionalInputA.14 = a3f3d5c2fc0e46645bc5c7d53401983da8c29e6bf205f65b1ad932146225041afc89a9e61c251e6a
+EntropyPredictionResistanceA.14 = ade516a945efe1101cf098505f6c43659efcff09b501c59c656e83a62fc8a4d077b34dfa80eee1e7
+AdditionalInputB.14 = 3dc3ef9447ffddf64c3ca0569afcf8e5d491a9571b9a1fa251e0684d3a5eb2dbde82bdd0f8dabb8b
+EntropyPredictionResistanceB.14 = 140636342e9ebb2bae8a87b5d8193a59b75b12318e7094975bed5ce2d23a58b4a021496e820a1b35
+Output.14 = b72e486984d1273fa7865a2a43a830b625e394cccf169610ad2714b5b64ef6473f53e62aaffc85bfa2b155bf81830abfc528a80c17f2e325bb7ac9197e5a1099
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = faf346c9c8afbc5ab6e33ce492247fac6db9a7ba4297557f587a42563ddf56c90e41c6afb56233815b74e091bac7d8e5
+EntropyPredictionResistanceA.0 = dfc111252d7146922713720ae1e348a07ae403b5238fefb4e8592f6f6cc4a61c94828db84c6faecd1502261008011f2c
+EntropyPredictionResistanceB.0 = 4528bac5b99c772347d44f4ece79bc811ca8ebea9483fa5f5040c02f77069dad1aec7adaa8a9a6a9ddabab045d328a90
+Output.0 = bc013dc891db12c34ad11944805bf13dfd67ff2c23176d83f5b396b69e400042252e11816c3095421137181a5d0ee37c83a339c58d080946ca90aa437d50d9cf
+Entropy.1 = e5d15d661cc3a5a7fb15f940554461a7c1b886a9c939d632d36d3e785c713ea2dff944485b9b35bd7503245b2081f82d
+EntropyPredictionResistanceA.1 = 0b2c49e216ef47df86254867b61969ac631c4b6a68f644cb2a6b89c7f6282faf403dccd9177b90aba32535fccea488e9
+EntropyPredictionResistanceB.1 = c6c46e98fa4b87d5e398df48aada1a713c2f7bceb366a1a746daff600618835f57475379631daad46ef01c78f4ed2154
+Output.1 = 4963a8a8442d8d03ed868f027021c669d3a07980e56fe5ef6100413b9a1c23072977324f2d80bc4d1e2595400d4901f20e4bf17f960055dc1ff346c423807010
+Entropy.2 = bf5ec4b9b613cd67b0a44387f6671327294c22aa1180d43eabdef2d0c1ccf23ea12e9baaa76b99e1ea69aee94dfd54a5
+EntropyPredictionResistanceA.2 = a6232b35b4088316ef3de6002e14de76dd4d364bcabf1b82b069540a7d6002c5da10d355de22b1df30ee8988ceba46e0
+EntropyPredictionResistanceB.2 = b76c326fd94851504f930f1605de0b1a32d4ac742f0da498da00223e59826aed6a510e98333ff2ae1ae0398b3f38ab4e
+Output.2 = a6f83f46763894d3d49e28f1d462699ad6a5f40164d1c46cdb99fe127da70b8a9c052b7f42b8ea3c92a24a62fad693d0c5d896fec5f3dbfdc50e4e3241cf9bee
+Entropy.3 = f0b61bd5371e6a60a1539dc972cc633c9a6c6068970e7aea4af1acad265b2427dcc9e75e5bfa08adfdf5458dc401edca
+EntropyPredictionResistanceA.3 = a5d1aee08e1b7ae5bc0aa3306356365d24c105546c651a9ebf2eb79a6ac72fc794d991cebb830cb48f7c772b5455e0ba
+EntropyPredictionResistanceB.3 = 26f6a4487716dcdda8740df76a3f64895ebc8259989b823976a0fbe002b5c54314fc5660de50e49692cd08b389cd087f
+Output.3 = cc83fa47f9c5643bb361304f08cb0ca18883400c521d23c8977482c1a29db944a93611c4996ca796959f170da56d92cf9287552c9d13539402024ec61049951e
+Entropy.4 = e0e9ce9c3f19db899fcd9f5c9bee29fbcacaf6d01a5ccc71f3935448fbf1bd4c9919692c94dcf834f3932a33076e3216
+EntropyPredictionResistanceA.4 = 8b25f8d49b0401f3c73f82febf2b6c95b2de38ed41b6e9302fb674e11901fc98d4c81259b85a17dbfed5593b27d1ffe1
+EntropyPredictionResistanceB.4 = c2fcf02c73afd71c39681c7111fba11d632a12e7a1b9404b0bb58d459b59fd9a5a1575b36a33535167717fbbae015c71
+Output.4 = e288147f1cf9edf672c93fdd3be24c444702856ee8e21b31a51a08c956a04ba3d499a9787475ff9b5b21e1307c4efa679f7af8d3c63dbafcba87ccfcaac057e3
+Entropy.5 = 05e893d9a6427d39c727f19aa1685317e359954919bb02ce129ca49a998b3ef17876d68891a219ab5e90cbcaf9062176
+EntropyPredictionResistanceA.5 = c796ddc46a7cc0eacc4172429f1250a01b9f0c78e32d2fadce04faa0840062f512c2d1d9fcf5e4ce4caa6017cd6c5671
+EntropyPredictionResistanceB.5 = 45a5087c74c8bfce96cbabb970dced613dea2a0fba44bd53c64b982d23a43e49d050fee95b674673e5a7bdfdaf5a2e30
+Output.5 = 7d60eca5b2a90ac9f84d84c4356097a0f20353cdd7f9e353f071b4557cab388aded61de1607849905eabb4f681187d7409d15f303190354662c050e899c1c6f8
+Entropy.6 = 067de2f65d56cac8a09c1d3b488006c7b31a97484dd30db2ceb6705ca9b7a993afdbf5920ed73849dc67b9d28cbfe1cf
+EntropyPredictionResistanceA.6 = 168b1590c8e52c832564a1135040e40fc09b66a7ea0aaca63a44e59f2eff38ca7d63de283f766f085be5107f564879ad
+EntropyPredictionResistanceB.6 = c55bd617ff9d58010ba0ed10cbffacd72a5a8636b816278dc0c80e6ae2fe344de1eddcefe11ea27f7d32c691ceabf441
+Output.6 = 4490d3eb165b5682d8e3c0ce2328b424abcb76d963447d02da8a186f5b073765f4d273f8f458671aed28d6cf56ed54fe5c3e124446cc04b8bc3941dc3bb2a0ca
+Entropy.7 = a1aa10bb6ee8e4cff8ae8d3639c4717321ba546f759789fa5b3aeb389d588a35c38c54b75c4c383f694ea8f310d45ed5
+EntropyPredictionResistanceA.7 = 116c07efb3b53a90c52a95844f5f4e9304667efffad603678994b7257a6887a8a522c40083cfd94e371ea18f7d7afda7
+EntropyPredictionResistanceB.7 = c01be292f6d029ba8fea8b85b7007b9c4a2226566b9490d9b9d3bbcd448662fa1c0b69a523abe54792cc00e7d6783292
+Output.7 = fd2672cbb151def9ec3a36bd89a8097b4a141a1d37dd65d0d3819b13d67e3af29488944c5267dd7e55f924ce155941b78b43f86e7b6d56dfb0d48dcda829c2ba
+Entropy.8 = c10d353b2c5153730f902fa28b022ddeb30c83af8b3bdd2e011314cee580499a5b12c80762af6b07c806632e1640706b
+EntropyPredictionResistanceA.8 = f2551dce817fc6c6dc7a5b791699f0fdf6852c44196a056dcab1dd47d81c933561aed927a8f992f71aab6adebb0499d8
+EntropyPredictionResistanceB.8 = c6b8c8400e23be6e228b8df96969eed60500392137e347cabb23368303fe8dc80821d5a3d2ad073855ec352a2c686e53
+Output.8 = 98a1cd599265ce68d5f60e61a51cf61eae620484dc30081473c557b170ab76ac9f2aa33adc45c890a904654e32bc81c6c4f8a9ede8ca88aab4d9ea5d2f112647
+Entropy.9 = acd30ea73471c32ae8397a2b266878697354543082438f6d1f2a53290bbfa8934a1e4f007b375b6eab2db58b5b9a0a9d
+EntropyPredictionResistanceA.9 = bd8d7747e2a78a86fe016370bd5906abc43205092a6a0e201ee29b73913043d861611dbbeda2ac44abb7e2f3f28889a0
+EntropyPredictionResistanceB.9 = b6afd928914ac95420f4a9176c3d1082cf2adaccbfde0cb2b0d27c7277a80b66888ce8aef8d6e79851e41c6cb835c472
+Output.9 = 1fd58caebaf6cc4e6c4810ddef844eaa4fb1d9069c94593ac5fafba3e5ddc0479da057d9ca291c6d0706ca0b92fc163f1deecb074ba28efd95f955fac2f3a755
+Entropy.10 = 25347fec6356c439e52690814784032975bf3f856180f4a30c7f4415789ac5297405e9190f88895cf925ff766714fdc6
+EntropyPredictionResistanceA.10 = 3565d70a0642c59f1c75f130444425919f3c24d52c5a76275cbda6362da3ec31a264f0181c07e7b1bd8aa07cba5a8790
+EntropyPredictionResistanceB.10 = 3f6bc6dd902b2c828db3542011742109dcd4f73eea254c031f6fa53a365a90a0857bce59b54d3a179bfe345b14507d82
+Output.10 = 5e0c7fc14d997ec5b57c41299b11c1fffd56f46e034527a0cf255a17bf0d21097fba91e2fc29d2057b7c33b1ca9202f43ce8ad490981de3886206cfa0df2770d
+Entropy.11 = 7d40c2539f496987f73f93652a42661267ab2751a3e1165ca6b5460a2fb47625263d17f3a4227d8642d4475fd69be1c3
+EntropyPredictionResistanceA.11 = 68e4810e0302428d8afb9da86a8667069d302b5bedd2b4b4052e62a7f24f39a880c5660ceb8ba02a8e32b52f53f8d775
+EntropyPredictionResistanceB.11 = 9c805e77904d6bcf24e4a8bae225690d20ddd0da8df1f0bed12ae1b2930c9ce57b03016b1a61f5d6513f84f651753f51
+Output.11 = 07a137c2443958cdea24105843b6a8e42f89a8b3f2e12637feeb0f7a9128f13d0e64f0d4af7507524d993c23ce322fe927627b052be74e7babde18d4474de6aa
+Entropy.12 = 344aa8ceb85d9cc4b7a4611039ee42e421560004a2ecd500261780ed08fe6f976f68e370377a72301c38734e8b8ef6ef
+EntropyPredictionResistanceA.12 = 77381af3d88ee0e9c4b02473f98b4fdb3222d75656de7825b689a756598aabce26f6891a9ec2618dcab64ef691289ace
+EntropyPredictionResistanceB.12 = dc3de1025519f4100f666030d88252d3b9e84d7594f6f4831ffd51f2f5129185522c9b12576b61a7abd7d5150f703af9
+Output.12 = bdc2173e5f514abaf5e4e1e7205c0a9ef32a5b0faf2b003af2077e40107947bb3e570873dd81b94c3a9ca0b15dcf4484bd91efbacbece153b57a14f0f9d343e7
+Entropy.13 = 59b013b37abc88cb2b7d2db3d7ec0073522f15914af7e81bb38ce57d39b77391bde4b4d358a2eb16f1c069647eb30df5
+EntropyPredictionResistanceA.13 = 743efe2c953314e5ac2a03843888c2372fb3ecd95bff078d693eafc782320a140ea83c690e2eb08b048b767d409681ca
+EntropyPredictionResistanceB.13 = 12ba76309ad349aab1a40378543ddb52fa97200a291b57c48fd44b396ba925fa652e48800e13f62f6b3868c9d3f9523f
+Output.13 = 0d03c6044fcf9dc0a0b9af8d94376c2cf09b00671c26fc720c69269e74f5eab4eab6d57eb3cd50ee9603faeafd7522df43b7ca9b1821b517b3b55c72eac686e3
+Entropy.14 = fe00a4b1854564de9511edcaf8fbb69bd25bcbc9e78d3217f76cc5a336feb7c39b2296561f69ed45bdb22a265da8d104
+EntropyPredictionResistanceA.14 = 6f16ff94cb8ade7a928b9a59af32ea79944e6890a003b0fe18f53236d66a4116fc8c2fb4c84d25da2197061c29703d3e
+EntropyPredictionResistanceB.14 = c73fe23a8ba2bb780178342598252e9ce3de907c4fc1cd632b353cf959ff610f23a8a2b0424ad137aec7da42f8c9f2da
+Output.14 = 8f7261edf6d10824218ad0b10881e3c1251637bbb71d0f35280caec7de254e07147f33288b5c60794060b59e6f5cc2938e4c29de1e4d5d4d3bde3f27c3fab92d
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = c519cd4f839c9a5e936485242c4da847f47af5b544acd12b49036453655de3ed57b2ae015822a60edcfb859b00bbef2e
+AdditionalInputA.0 = 7e95d809c11a7a975230da9599d0073136bd057a1a6990f980894c01912bc39b8dac94c083933d39278f65542dd8dd4e
+EntropyPredictionResistanceA.0 = 0415f8fd00d4d2454706142083346304d8051b8259d08de493d991d366a42fd452d6533346896d323ba1066a485ef105
+AdditionalInputB.0 = 188357a4c4dbdd05cb6bc5d9160d5d951cef6ed9ab6c622b5a9cda2c761d9278235fbe9d6312b9d892a59abb7f3f4865
+EntropyPredictionResistanceB.0 = 9a146501a4dc9349b0392897263cfa414b6fc7e59d7093ab66bd265b7e41b5c2766f56d97b7d22d02220cbc389b34a6f
+Output.0 = cb79c79dd19a72b303a2568266abf23ad6e341cfcfee8a768af64584e4e471dedc0d832a04e8dcf4b896ad9bf4a4a2495cc6f3efd22a68938424717dd75e83b0
+Entropy.1 = ad45e5145298e5c450e24211539ef818bec665b78e77cc54eb4e72b15aa6aeb9822a8dfbe27defaeb7d0762f8d01edd2
+AdditionalInputA.1 = 737b0e8d18193164b284cc2fd1d2b94188b49e7997c05fd803b1c87661ce4c0cdd24b57d0bac8a6dec30ba8010cdd769
+EntropyPredictionResistanceA.1 = fd9855b6ae6a261003fc0f25fdd1a48a9c9bfeb44c843bb16c3b9c8919831f0a7ba2c904a54f07a195dd272b5f76f0c6
+AdditionalInputB.1 = eff2932d8ec37d6a2eec22f761644bd8b9d81c059eafdc0ac1100037591c6b2b115c606abf8801776c7c80efd9bc1c9e
+EntropyPredictionResistanceB.1 = 6105685b7f455e0414560acfba3e1e01ad982333192aa65541683576368baff67ee689225ebbead0f832e9c82dc14c2d
+Output.1 = c9134fe398a50860b2789f1ef4073b1dabd74023489aa80e9817d96c75eee3303febab1df3b5caa39fb5fdcb57ee11ac03b5c2f20a5dc71b75cd850f07925860
+Entropy.2 = b868eabd468db86acf05e475676c36890e67fd45fb6d3ed9e8f22b7ed61f85a52db706d848cc462803a1a4a3151c03e6
+AdditionalInputA.2 = 8dda566381f0e00592f39b2fb558903de2507b28fe42cfc24c4ee56a67d27c1feb54b52ea24e6f655d6b13c55c0f00a9
+EntropyPredictionResistanceA.2 = f41c70df2de436a6b88032d2ddd96864f98dd159cf2bb0eac11412ad78b8d7e8b066af5b052b0de9e7f0a1f9745a6193
+AdditionalInputB.2 = 9f8fd269154a00d851cf21598a9963399478d5edb9de33fb54fd03edf3cfccc18ff0b65c41a5548674edb675dc0a6795
+EntropyPredictionResistanceB.2 = 3284343f4ed40c8ee3fa73991cf8d4cb40535eff59ad08af7af7dcbe7000393615ed837aef7c967726c6c9293706ec96
+Output.2 = bbf134fa70b82fbc74b5830c5a9f1fffa07d1df717db3234abbda3897a0dea3449a3b5e6ff6d1bbf5a62bf50b5ed1d443c204171656da0d2a021afc32e3d36e8
+Entropy.3 = 685298d32818b0790db7101c9b712840a22b78a640e18b5bb161b6ed76a02ff58d8cf21ec8bd5330649def28287523dd
+AdditionalInputA.3 = 7f01fd9f095eb091a700c2f9d4785297a73404785379f5b590ee3a5e2421e53dbffbaad84c1db5d12416fd49803ffe76
+EntropyPredictionResistanceA.3 = e460e89f3e24816cd0344458f249ffccb2ac0e83044614be4e6214bc6754652c7b91d9db26ac82fe515f0e50769d7565
+AdditionalInputB.3 = 3d840b5246f22973973cdf48c90ae0dcef5cbcefefe508e46dee51df535df4378ce3e507826d4f2a6728dbe7c702cd01
+EntropyPredictionResistanceB.3 = 5f49c529196c6e04936020feeb332af694d08adb2d3ab5a93d354b4eebb8880ecbbdc6063335883729e50b37a02f0be8
+Output.3 = 54d0fb8f3fd46516ddfb2685560d4cfe977bd0659af6bc00224fc9994404187a1235eca2de5d4e7e8fe693e1bef4d55615f4459eb02a009cea6e28d6790c0b83
+Entropy.4 = ebce522478e3708b09d7a1af97035890e773fad0350d836cbacda5774a961967c88b1c24905786d364052ac795dba997
+AdditionalInputA.4 = 075564aa766736e171fbae4785d4b9b1bc97e0ea77418ee7aa7a4bce18fe8711332eed06401885011e663e4294f59b49
+EntropyPredictionResistanceA.4 = 5840f1b86609552dfb5047b9f053149bb3b38677b3ebce1c280e2b99d6d2c6dc7e0ab746833c5d6e5bb08aa57291ccbd
+AdditionalInputB.4 = 20bf3191dd5e46b99b1c264f0c3534bfa5ff9631c6b0ffc1aba65d858d3ba5730905e1a0a0da289959fa4382e5619537
+EntropyPredictionResistanceB.4 = 434791d175c7036a1f442060dc81994048c770372798bd1c5f63afa4b54cebbd171799cedcb364c49e249af6e8fea2a6
+Output.4 = d7b722aebebb06490d5a7135351281b82c6ecb34dd036fbbc89f940b73c60f730e0e3affcd3cde854ceaf670a6bd355cdf39e11720292eb791923e3e97358a83
+Entropy.5 = deef73c8bc87181eab0e448f4a3010c4830b65c616632f6dec910a11a2061b03c162104aa6d06090c2581522ee4fe365
+AdditionalInputA.5 = 91e357072a50c75b61a491e399f11618f6ea9706e5893cced1d8bfdeacc72805fb7182f3f350202fa1ad11a5024550c0
+EntropyPredictionResistanceA.5 = 1f61a2ae1470b9a73a0a86ef94e6d5e2715edd36f23c8441cd0075a41fc1e5d95beb6c5b9b68fe8d5d270056bf4660db
+AdditionalInputB.5 = e1821aaca6da73b27dcfea5454805263173147ce42a8d2dbcf5a61e6aed8e492ba7aedb4e4d5bc0c5dc84ff69b422d58
+EntropyPredictionResistanceB.5 = 542494c831e841763d969f9b13e7119dacc7a7b803f457171ba832bb88e7e75973f0cad682053deb589375743e872900
+Output.5 = dc462aa976f73e05b9f734ae17dbe2efee060ef8d5fd31740f340c2653e32a7e66d22b894edc4b195a07d90be364bd9eee1cc1885b91120a756546087f03b759
+Entropy.6 = 40496b31f3218200d844552b0e076e9df0a1bcc0f40d4fe3c0af0deae44e2f8233ff952b292354cc25b17ed0d1f87f55
+AdditionalInputA.6 = b97c0cab1f60eea1b44176d856883ef4e44e6893db792206dcc71a77eff434ac18fabd3ea4c293d51c0dc406557183ab
+EntropyPredictionResistanceA.6 = 83147ac1aec7b0ec82390eb19a643149f9ddda1ab68334ddb5a8db64ed4839cee488011a0a1c34a6e222ee5ed7507272
+AdditionalInputB.6 = ec4134af36327804ae3a4142d498482453eee170f8d7c621c0056eb40c53816b38e12dc6d6a2f690ec4fd3a07c13ee10
+EntropyPredictionResistanceB.6 = 9bff445e46b4b921cadbabecdab1d29b40477e48a711cba5647cc79abfc52fe0f1b7dc3c931ad54a247a66d6bebc0d54
+Output.6 = 2e4df667d9778b9718a0a025f612dc574762857bc70b11206221cc28e2ede462cf8ed4e05fd5ca0f4f7c7598fa91ec4f03df8cebbd8c6c078bfacb0e7283ff34
+Entropy.7 = 9c2a30f6ce80f924c8d38d68a7b3c5f0c619a466d7159a3b76a9dcdd7421871dff738f80b8e77f1baecef84777c0016e
+AdditionalInputA.7 = d6ab56b1a1049c409a4c5dd07fb8aca076b77389e44ac49f4456afb782efc128cd4f27e616a0fb9b73f359ccc6ca893a
+EntropyPredictionResistanceA.7 = 082676fa9f61c8b0f004a00d30f48bd364e0ee4fa3f3bade4fdfa7d47f2ef6933d2371311e275e9e02bbc5d20a210d6a
+AdditionalInputB.7 = 90de48bc64da62861df47315f238a2bfa89be8040a02b9fc61cd6dcccddf5888cf776fa43e72b03c0a11209f2604bd7e
+EntropyPredictionResistanceB.7 = 942fd3f0b8edf1ad606936bc5f00b55dc0155aa1bc69c7a8e61dfb9ee51d3c3e5ea8a93f3c688b1e81fac5cd01b4a4c1
+Output.7 = dcbcbc3012d5bb1719130d2981f4d2cd64061162f2f055a27388bcd9c36e2a7c6be17b04c70f02414dea72d474c2f0c96e4ae255ac3f36797c53d1886a1b03f3
+Entropy.8 = 9362de1abb49e4b7cd5f27e70fa18c409161f1822987f23aca6f1ef58d08108075cb13ab818c0a2b5ea741cf9d4b2174
+AdditionalInputA.8 = 586fb184b47e1a983991ac6458ba02d27b9258160acb4ef01acb950f9da780d8fc9bdc690f92135f53b0d519b211c40b
+EntropyPredictionResistanceA.8 = bc6fb8b7a10b6baaaab58c167a3f33058db1e5ea90f6aac7af100c03c5aa120c3330de7df16e12076ecd68149840a1fb
+AdditionalInputB.8 = 047101cfc75250cb55ed8b09bd4e8388060ec0afa89527a557ac36c117692e3efd603e3f464416d436b41afa05acdfee
+EntropyPredictionResistanceB.8 = e7a683ec661af97e2df1c599cc130114a7bba9e28fb32ed8c0531169c757b2cfde39efafd144de42174b46919f7737e1
+Output.8 = d879685754c7d3483f6015f6818ba6b58bb3815921ff31bd244a9a034905b60e4834fe6e7e0568438bf0191eadda9c8493dc90023424db9bc42acf682aac9f92
+Entropy.9 = 640ffb8cbb51d91bc5619799c377751907f44992ea7c3b4fe5e2e47a000ee7d4def1388f0f51104e4fa68e9ebe8dc922
+AdditionalInputA.9 = e0cf8bd95000b6e5d542db091ac56402ab24957f97f409bf55cc694492a6a98adbc5f4b35784658b97c322bd72f2fc6b
+EntropyPredictionResistanceA.9 = 687f98b7a3ff9e1f93e31deacb1bc5b58c65dd931a04eccaa97a5b87ecfcc0ce6eec24e2a9aad6ad4285b34350ed8ef4
+AdditionalInputB.9 = 00f103eda59692232bc1ab5ab326bcae8831719b79036989f7edfbf84085106e30f4089daa3b3cba5a3785209dd32fe8
+EntropyPredictionResistanceB.9 = 30c3c17c8bd938eb125c7438f388d44082baba17b3cfbb65929721b03f79a760cadc8eb20b110a3aebb9ec6802c723dc
+Output.9 = 50af8ec8e412948568c549e8d022fc3ea9e0b6a3781a95eb0e9655dd76ece03c4a599424ca225644bf25f05ddf8e017334271df92bff5a7c56414b73bce139e9
+Entropy.10 = f684951c09ea9e56234257d2d0d0e1888305c935d3a3efb49f13e3e0963e01e126b6308ed416e8be07c0f0f3708d6b2f
+AdditionalInputA.10 = b6060795e86bb317197dea213968becbddbc9773871437f5a516826fb6e666388584d2ddf8cfdfdc95ce196b9b273665
+EntropyPredictionResistanceA.10 = 9baa62296ba9a4c3789e501779883acf247f4d509721fff5713ecd8b1375dfb3919288989385a0d90147ca2391a29dcb
+AdditionalInputB.10 = 8df4b5490451a9155d149cc2114b50af367fdde0492b24fb0428e90bb12515894aef8fa1a5bad26b35582ce682a5c1d6
+EntropyPredictionResistanceB.10 = 550e27a60b211c62b44999f2a5c3b54e14bec9ae7aa38cbde4b56b4ff55843a04aa96d4f38a032371c003afd0eb5d8c9
+Output.10 = b6e2f2c9ff2c9f0074fa2a52bdc2e9460429f29227a62214e5374681616979f609235f21c7e335471b48351d135ddf97e41e7f883f65cbe17c8be8a262c9416a
+Entropy.11 = cb5f31d3d0f31a407154655a07e100fb31daa190f8cd986113a9bbbb82ac81f725f251e09dd5b435359710062a376042
+AdditionalInputA.11 = 7f563d6541df7e40d7e56e9256f9523ad3b879a80153cf06be36158fe8dca578bd2c82c021847a791ecc8b41823179e9
+EntropyPredictionResistanceA.11 = 7bf576e188bed31b17e7b961236758ded2c2adf4c170e8bc79ed6c1221c996b25591a6a2109acbba0a3d191422dbeb7e
+AdditionalInputB.11 = cbaa9533b8a0635ac6c1a321a75827ce36db60d1af18f379319aee0e5dedc7fd2990e4e4c77874c421ccb235235d27c1
+EntropyPredictionResistanceB.11 = 386d3fa404bfe6c2cac3906cdd950a60e4908ae98dfdcbf5ee272f70960cad260be56f45e5cf8403201b8cf966005cae
+Output.11 = f0f7a7a385c79efff71b6b892555184c8e3331378b670e3e26a311e056b38c96335b4cdf9e7033188f33ee0c411340e9fb1ae6406097e65b85917d8ddaea870d
+Entropy.12 = 3f07428af9e37c5b2321f6809162401ca7513ec38d7b9f2de18323d9bdf6d5903c42ae61752558f50607256ead19044c
+AdditionalInputA.12 = ea65a68c4c903ec9caa27c24ebbcd53d7719074a3e42a9dd12fa16309279ea938cf92f22639852c476c74df7c8afd7a7
+EntropyPredictionResistanceA.12 = 43a68b61f3de825d6cd4a8d31a075be8c27321e3a2ad5600d39c3be09b4197dea3b7ffd9587a12b19a591997969f8ff1
+AdditionalInputB.12 = 883cf01c4882d0ca03d5a52fecb268bd22011c04fcf27a53d80379a1c2a7c92c0ffaccd93c7cd78384abbe65317538c3
+EntropyPredictionResistanceB.12 = 42017ce7b0b2161dd0bebdb93c5c82225614dd01700a80d595c2e240d3441b09b5ba7e675b1434ac23100a3e6cb8de69
+Output.12 = 2b6313f28a055fbc9cd0ecde3b46ec8f75286c87b7dd7a419e4433549fdecabfa0ed40c6d5ab62e7c06f78397f24fe3fc2eb9105c1f62882aeee8cd92c18a0bb
+Entropy.13 = a485ac90eeb9c4e304a59eccbffe9b565b5f8066158ec3b6d75121bd59e4122ecf9001406656dc2fc61271f284d43c08
+AdditionalInputA.13 = aac95b6ab0d4b9ffd7fac99ea915e4d3c70d39b2d2b090288cec64c44119184e67820761399645a5e8d4b524adae9b91
+EntropyPredictionResistanceA.13 = 76e311f8de108cbbc8c457ec0e22768f2d092e79676741ac1a6a813ea49684834dbec431496e5bf0fbbd8219d3c8f172
+AdditionalInputB.13 = 5a372c60fc7da69e100bddc43098bfb6bb92cb482cd92ae713b68ce81f0ca5bbc0093f4cd8716275aa43a52d22dc1625
+EntropyPredictionResistanceB.13 = 2089bdc68a9fc6a548cdd10c7d68497bbec6083e1a4eabbfca99812ccbe58fab8d646fd2c3e19ba593e85363d81dbbba
+Output.13 = 83ecd1a2ccc793166127f3a24c932500270a64cf66518b1cb611c2f5967924c1103d01edcd3ecfcb57bd7cf02639a76e0ffb53dc1be3d559107a0aad82b87fef
+Entropy.14 = 840627441c2c6df1079ca270cc2427d162623f98ee96d95301ff5597a3a06b5f9282ace49c53889fb11921d07a046212
+AdditionalInputA.14 = 7a2a57397eaaccc02a2e8be51ce80788cc81e216c8b9383f39116f7b6f1c0a85ad6480a88ca3cedf75ee26631f5fa12a
+EntropyPredictionResistanceA.14 = 4b359ab5fb0721c266627b8c3e54dc3f72b662578090c230526f7cbc43ffbd35676f84bba51ef0befb63a1fe6bd0f9c7
+AdditionalInputB.14 = da29846d4d48e3eeac71ab07fae9b9dbb6c5d83cffb75c67be10bb15e62d9d9bf4571aea5ae475229b3c63ba8244b831
+EntropyPredictionResistanceB.14 = 0d9037cf745b3cf41628eb1538bb71b59116da1049ecd36d12d344c5a17e471c8c4e72cfdc7ca0538c81085952241d68
+Output.14 = 7a7ed6e632630ffcf32f0373deb2c67c6dcb77f04f1991f89d5d25a3a8c390ac8ac373b66c5da990c3fe28cd93f3a4f8e5594cae25498ed73f5f001b83179b0c
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = c8f0c7b9bdf7e7d524c998aedeabb3b7dd4fa8f95c51b582010a5e09d0b4b1ad510302422df738fbef002a051543b4cc
+PersonalisationString.0 = 3b8f2ed03e4c4a857ebaf4730124ae5b3ffa67e294381fe085e1d5b25bb79c228f39b9912d8bf9e84cdb43fcefb552e0
+EntropyPredictionResistanceA.0 = c1a7b160c8e33a01fbd49743dc1161539390d9ba6b876fe63b58e8fd605b98617322578b17aca9db71e858b154f97910
+EntropyPredictionResistanceB.0 = d98b25eda41d15eacdecba586609d8c743704fa099ac37f9185bcb19652723d1648431a73c4399773c85caf12fcdd842
+Output.0 = 338da59350a72bba94b217b99ff813fafa85f31fa7e991d4350d6fce39471aa249c6a9e7d189649ea6770a15be302b943ad403728b7387f5984c9bfb82597771
+Entropy.1 = 5fb3f302c36d0d0e28efb065df595ea69a6b3eb45622f9d14038ebcc0d4a8b0d6aa45e681edd5c506e00f0dc12775ac4
+PersonalisationString.1 = e4afd48a08355ccbd097bf5c87e9aa6cca5bce84b211ef0c783d7e05cd52caae4b4d83de53a84200a556b5aff5047b13
+EntropyPredictionResistanceA.1 = 6440cc8c735ca9b05f261358e51b8b4f8c4bbdee9e2681c76fb552bb6b62334038bd8e0394a4d50f6af7a7a920379799
+EntropyPredictionResistanceB.1 = 2ed7e6118394ce10a842d609baabfaef9d1c1fea914be4b725822f943fda023244f806a47b944ea0c1b853f36bfa24f7
+Output.1 = be9333140428553231505e8ce3f789f2860f44647d97239c0d34cee98e0e4f5e5a5eb296d4cec508624913080a1b44990993a2ae63f61124c4d8184f191ca8ae
+Entropy.2 = f3fb24592e88aa2bb3921b46e198310fd269883eb68a7831e5627a5a6d21543864ede3fbc8badc1888b0daf37a97dd40
+PersonalisationString.2 = a1a853ffa798f93a604874d4c2c7fcf2ac4a6ed1e07e03336b7e3ddbf603c19f9d8b3041cbe3ac09e96c86c8bdebaad6
+EntropyPredictionResistanceA.2 = deda2a043d035744b5d0e696e496382ff0c01cc79c9f8f588b40d934237fdf7d0f9ea389cf28a352917c724106417d92
+EntropyPredictionResistanceB.2 = dccffb5e3cbf5e36eb1ca92db6247e1d6dc777e591893e220b5cf55c50c74bae2995affb003a8306197771737aaddf64
+Output.2 = cdecc083b5c4bd38b573c5e109fc1cbf2dbc92982ed6d24cf4d2cb06383ba27d51dc064a8cf42205420d1c62505b987c774502b93e837485284a137cf2380872
+Entropy.3 = 8a0a52b1e228c26be6497b5cad0677cfaa2c42a4fc429c4bade7a468ce681a732f92dcebdf5b3d9a0dcfdb5c11a830d4
+PersonalisationString.3 = 9367c213593e3a82059d3c80513c301f0c840c900ae8f18b5be558d1fb8bd528dbf93e6efb7f3cd8fed577a3e299bc76
+EntropyPredictionResistanceA.3 = 51a2f38792fb87570747a54b7a3f5473583faaceacd70cd5b5336e8ecbbcc286627943999210573ee7f8f29437f74b02
+EntropyPredictionResistanceB.3 = 77efd90bf6faab8ed0bb32f138fec4fe8afd7e1a55b2e60d5d500ebd57ed382af97d9ea89375fc56b511cb674e76e4f4
+Output.3 = ab1478cc75bbfdc930fefeff1e6f8e7b822213976fc556ee7f71550d128620766d8353b3c54c59934e7fa57e8b857c7daef8e9d82705fd1fec7b19d5c3b5af4f
+Entropy.4 = 4256c1c6dcb9463f751d97c2b9a1df629d2f6db19dfce80da4624e5ceb2403ae6f1906f2d8e34cb015525b27bb25c262
+PersonalisationString.4 = 88d9b7c50d99c926f035085a7a8f02698fde845db85088e866187407bdf75b2c6cb628d5081c859a5d738826d2e8c1ee
+EntropyPredictionResistanceA.4 = 8ba03c2283b97a37063a4597f7ca15fb2df7b0de1e2236b8338f14539c059d1a47a947bc9a3ef954c833fffaff8fa8ff
+EntropyPredictionResistanceB.4 = c5d3a88de9db79dd707187dfe5d35443f7eada1669d5daf39af4d78fff3fd35f0e81922a207e640cba2c9fb18280f62d
+Output.4 = f64d6ac3fd9beda9ea4b3fc2921e967d126ab4e747eb4f29bfd949f94119271052ff52501cb45af6bf9499ef5926423f61bd4dac0b28fc95aa886c8226ea27b4
+Entropy.5 = 6e92427a94816c838ef57f9d98941ffc3cd070c76fcc19e765f9b1f9d390ec99f0b5193fd72a3d700deaeffea6c2282e
+PersonalisationString.5 = 6d7621ae460ae10c8c8d0e11c80aa444e279f2cef7da2a0e52fe43edfa025c67ba0111b6a2774b0620eae65aa2bc292c
+EntropyPredictionResistanceA.5 = 8e7159350759fe73e6c51ab224eda1cd769c703a42a79d3c4ce407aa99c8427f872b7c3e09559c789cb75c546ddeb988
+EntropyPredictionResistanceB.5 = db12fb9c2f1cc022768f824dfd05edc6d57184ee0e51ce8decc74c390adee63ee401a7d3bb0a91c1d50fd2239dc3fa57
+Output.5 = 45e3bfafaa00941459b373aa00e6096b7527110f4c6e4e7d6661829dfe4ad83ab23a5779dc7f8116b73b929fc3da43ad346a3e11364e1b453e66335b5cbf59b1
+Entropy.6 = 14932f8ee3ec2119e03b65dde53c2c4156b8013c4d1c260227b240af61bbd0efedcdcd4fbc828dc688cef0b25bb12374
+PersonalisationString.6 = 3dc52487f866eef27a6aaa0f3da87c09c859babbb73e1771626ca434534a66b02e561363db90798edb55cced2746767a
+EntropyPredictionResistanceA.6 = a5d063e966ebfa8bb05fc0c0625a30d0a408e5e31ec9667374ccccbcc07f6c289ecdf3deb3f784925e7e72c75105bf54
+EntropyPredictionResistanceB.6 = 31d8ab37201b55662101ad235883c28ecfb5c9e3cf0498f6cd563db96f622e5656967256c7c3efc2ca3c577be02de3ce
+Output.6 = 8bc98d27050e713d19551eadae19d14f3b1304aa6f736d9bec6c7cc90c85412a4e6a7218b8a7ce46b1cb93fa1b296eee789aae0cb2a58fe7a80e26f0a1018dc8
+Entropy.7 = a7d7b56bdf38b57d7418ae3f3a90375d7aafc3839a2956f6824d1c55d615966207a5ef31e2bf8359db1070612ad6d775
+PersonalisationString.7 = 015c5a1d1f9e2aeb34713767a58d01b0055a27151bafbd0afc31fc22d765e57f65ffc282aba726a2ec5a7c36a33c0ecc
+EntropyPredictionResistanceA.7 = f480e7c970c02a5a64b09f0473d04b658e19332634043569e24996981f7d515d326ad1129661638753d117e8d31a540f
+EntropyPredictionResistanceB.7 = 0854d1a0aa78e3e60b6825d143eaa97ec7ddd1b8b85c26b625fe4da7973d643cd0629186c42928c8e46857a603e5ac0c
+Output.7 = 794128d681d355336148eeb4dd882d76ef984f2a8ceb4b451e9b37beac0fb50247bd595ede2de000f4397988d3f52e0b3b293208c16b5f45d6032bc5ef20b3c8
+Entropy.8 = 89dfbb4a10bad1c269341b7815ac1388a7d28bff8393e078d99a0cdf12d0f28a24e45441c86584829ce37d4eb3b28873
+PersonalisationString.8 = 5235d1b8ea0e83618a755c598fa8e74d6e425f946249e80f12d85d3e1c547d5048f235687dc93c86cbb691384f889408
+EntropyPredictionResistanceA.8 = 6d14b671eaa66e217dd973047b6180b7dbd2c29b709fce014bcfda25e269bf5a736d7154308aa0597c5f5adc3eb4cdd9
+EntropyPredictionResistanceB.8 = 7c0a71a8f56ac0b5766525b0f63afe48f4a0d282adf300f9da47ac62693f0d74f6739128c61024a22f7469d822382cfb
+Output.8 = 3571383b971291e37616f1c6af623a1d576cc5f95090563654420f184fc6663242aeffb06052a29e84380db38d9f3ed09823dfef1774c14120fb010600b7b274
+Entropy.9 = d0daca073b0c1517b9d6643c518130580f254b482d4c44b735590e167b06b304e0664b8e12d9c8dd083f4b758e7b3d81
+PersonalisationString.9 = 06170a3a66308cea0ab1f44e688e7a4f69a4fe435cc325dc554771b4156614c77d3c21377ca552e6d5ac9b7ffb52f1a3
+EntropyPredictionResistanceA.9 = 4441277388baf0ae4d69b0c1db2b4d767647730e10cf1191cd10fd2eba570d348e544cea0641af89418c900ccbf2ca20
+EntropyPredictionResistanceB.9 = 2180dc1f5f17f5f8cbb8499e155de4bd50e0f2175041c24d1c72f654af8a08563b1c42a84c5ae126ef33e1909bcee38f
+Output.9 = b7723a01d35011a9a8e0e82a8ade37d5e992d8cc5390e2409e185a1bcede39b742fa1fa541572aa36b16be410f3ca0ca853ffd7cea2996e852b888fe9b1263f9
+Entropy.10 = 48e6177813ad0dd8da8506a91fe0d4e615bdd068b423050a1dfc94e1cbaa2bbeb2f92561391a4f54143ac46a74d57c03
+PersonalisationString.10 = 767fa94128aa6e71dfbfb4c16be33c48941c5ccbf96e8094365f581810ce94b3feb8960b99eb925b0c6184db40343849
+EntropyPredictionResistanceA.10 = f9d761f589d8e466123257d4b144e40106be6a063643547b8549733134b3375715157246a9bf9a91f854a37ce7efb3e1
+EntropyPredictionResistanceB.10 = b774616e89a2297ce5feea2f5708eb0fd21f3ae188ae25c64c8bcee73be40db2af5d8e640ccd48b8cdc7375e5c53cad7
+Output.10 = 0d42ad75a67008674be7d81bb2ca9f0625b55ea37e1985d3a27cac38e347824ff03caaaeae9b646a220a8a672cb28ba869d0f53e3317be00128fa965a8ea7b39
+Entropy.11 = 3507214c359f4ab75904dd4e430ccfd484b853b40b7253d430111588410f1c9fc41e757f669d3de45a3c0efdeb250bd3
+PersonalisationString.11 = 806f8ff25ac8c4d61fe8cc895f5c5d2e153701b5c2cc8ef6b4ff7ec5f6273b285695000016e7d5a6145f4f98f4a42bf9
+EntropyPredictionResistanceA.11 = 8364b816f4c64359e54415082fd5b04cb896bd5de5527b0930fc6a855d2a31b55cba81ab25b019adc7cc7c7a6f308c4c
+EntropyPredictionResistanceB.11 = ab2a1d12b1997f5a1b74d6608e60f09682924fcc4270fd5fab8e84f2be19306e49537a40add14ba9b1472f80a97ade7d
+Output.11 = d5be1698e011122874ea19c562859e552c68d2734a39f72d6f8eca8ce30916504bf224670f9a7b6afb57830a28fec0fe818df449f5e6eb8b49a3397df4bd3506
+Entropy.12 = e6a8dd29ea2f9f2a4595aa1b9600831d1647f53f366724517569e2848f5a7ccb4bd2f553f83f91c14c2361cbc3ece926
+PersonalisationString.12 = dfa7445d60ac908bb031bcb4f9feed626afab1e4aef021862e1fcdb34fddf9028b6226dfb11f677dca420ceb11930587
+EntropyPredictionResistanceA.12 = ac25bc0603a569b90efc796aea338684d84c03240d1bb3c9d3b24627fb24235d6fb837fc382c6c949ebc911abadfe9b5
+EntropyPredictionResistanceB.12 = 60fe48c071073a815ee75a6b66e0cec21fa510eb721a10cea64eed977efe89af922f8bedade893212e6a253169821860
+Output.12 = c834a90e72a5ec0148942c9fbde8b90f058866ac3ff8cc854bda3d33f6072bc0e5a22c7d0cd801f091276ed7b7e3d6495df9546b9fc45e46aa6b89d3dda207cc
+Entropy.13 = 7f1a2afae1e642c3348a0ee56a0f4ebf136d68f8f04de54b3beece7828aa43171d09570bb70fca53775e4770e3d4cb84
+PersonalisationString.13 = b1805d90d9e43a9e509f5f71bad514b548808b993cfaef7a69279239e687f4cbe3a6ba579e11a4fa2b2450f82c2fd31a
+EntropyPredictionResistanceA.13 = edab61da555eeff611c0428a25200003a5ac1c4978a766514e9222c80adda7194b8414835f0fae94264d3d81d49bec13
+EntropyPredictionResistanceB.13 = 7810ed74bdb095e1a3a8a2b1fd885e21c3a23317b5a4514a9bae2d0072826bfc292a231500703ab0a1f04ce35bd3d808
+Output.13 = 6553c630a07ddf7dc2110c3aa3c5ac0c488a0345e07571cd71df115ba37ea4676935be72a6033aeca7ac6fcce5654dae38f5777b5cff34b156539b42ed6dc93c
+Entropy.14 = f72592e0626539903bfe7926f2df89428ffe4eceeb57f0be46f5d4bb0ab8c70633431c70056e051b2a44a99fb2decc80
+PersonalisationString.14 = 27b9250c01189a8a675d597cd2e476d11f4feaa29ce2d9e729eeede42d9b78521937d240b12db5493aee96b84102cd9c
+EntropyPredictionResistanceA.14 = 2b3877ed4d1b3174d36e784ad7b6b7991dd52979ca5b1c4cc5f415ea56aa78f2486e2b033570089aa0e8f5d4be3ee140
+EntropyPredictionResistanceB.14 = 91d421c3eb04de94099a7467254bad70e236d5c27616f766e85b4de3965001db854e61a80bfec2eacb4ff93ecafb8b83
+Output.14 = ed703d9273bb9462ac400ee8d587ea3c4d6c27aa014defcb6ca6fe885272bcb4b6ba0822f42941071bf635b41d997c631b680d91b23ee48351041dc274900821
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = c54805274bde00aa5289e0513579019707666d2fa7a1c8908865891c87c0c652335a4d3cc415bc30742b164647f8820f
+PersonalisationString.0 = d63fb5afa2101fa4b8a6c3b89d9c250ac728fc1ddad0e7585b5d54728ed20c2f940e89155596e3b963635b6d6088164b
+AdditionalInputA.0 = 744bfae3c23a5cc9a3b373b6c50795068d35eb8a339746ac810d16f864e880061082edf9d2687c211960aa83400f85f9
+EntropyPredictionResistanceA.0 = b2ad31d1f20dcf30dd526ec9156c07f270216bdb59197325bab180675929888ab699c54fb21819b7d921d6346bff2f7f
+AdditionalInputB.0 = ad55c682962aa4fe9ebc227c9402e79b0aa7874844d33eaee7e2d15baf81d9d33936e4d93f28ad109657b512aee115a5
+EntropyPredictionResistanceB.0 = eca449048d26fd38f8ca435237dce66eadec7069ee5dd0b70084b819a711c0820a7556bbd0ae20f06e5169278b593b71
+Output.0 = f08fdfc1775b6feb5a4177110bf29d7c3ab715dfdc4b27200359288c0624bd5c1028acc9914d88a82b09f5eaafdc3bca8547b98481df39b86504314221cbdc3c
+Entropy.1 = 2cff59c3f1e6b9d53a9095a1f5c1965f905aa8a48dbd2ddfa96e1300cf17fef2c2bee7a1a3d4976a14d7443661134dc0
+PersonalisationString.1 = bd63ca8329b530d8043768382c9c42b3034aef78ddcc3e623567629d0965907c4f4919e7c4412b6a904f9f49b37b2ca0
+AdditionalInputA.1 = 6a636be119c6da0d6c5ce39854eda39fd70d9599059d459c923da1a1ea21512757ec03e38a78a01494b77f6726174397
+EntropyPredictionResistanceA.1 = d330e1a58922c34ece4eddcc9da683a84267b5c71377ea186ec6bfcc33c285ea5dcc404b2cd971f6ee6e6d8360fe4bcb
+AdditionalInputB.1 = bf1b4933634b8688ef789bc73f09ef9a583f6a29c7a13779d5e84e921427ce3a713702da9713947cfdba90fd24b48e20
+EntropyPredictionResistanceB.1 = 0b99cbe0a8dd51e0f8f4b742f7f15016d7ba9d3d65c74a49f1f71c522db3f24499fc185f189b28ca30d25ef7dfb4bffa
+Output.1 = 2a3e624c69a54fb783ccaafd9a7f43d191a5d66ce70ea9bb2802e219ca4f5afd7c6997f46bbbd1a02f046082d8c2f409bc8ec8fb88dc5b2e693e209617267c65
+Entropy.2 = 1d43013a693a9c8b0d0aeda12c661cbfedf41533f5e1835770f2bab868fc919d4ed38b8b8e2dc58e3e4bb98b707264fa
+PersonalisationString.2 = 42e85955f22bb76530af288bf0d923a116f3b3807be39fdb2a5eeb31639dab6da1472557f75118f04beeb60f71a92153
+AdditionalInputA.2 = 79d4fbc74250e8e6e5abd01cecd08d497742da7987fafdbe170b6873fba80679eeaa4f4bcde40db5372644b8620e55ee
+EntropyPredictionResistanceA.2 = 439764af3dd76e8d6b2908a4962db93ffcf322836a4174c7cec5d2d1a168be972cd1c11d1ac731f0a266be340caa5fe1
+AdditionalInputB.2 = 6ca597ccadd65b82629572b723a1c08a52db2de32747e12981a4dfe3efc557712519e5170e7274cfe175360097e4a1bb
+EntropyPredictionResistanceB.2 = edb7a1b3f33ff3ba79d12fe557a486522d535dbeed9280ee1b1e7c7aac663b64ae9a30a8b7b0cbd6846c82521b4c9ee5
+Output.2 = bb840104e9f8484bfba3b1ec9631b629dda13945e9a5106a8a379d15f1e838f8d4e563309e5fd12d48a0b42ee348556cbef965f2d4ebac351b97e2d10e46786e
+Entropy.3 = 3b21e692bd924a5b353bedf613b48a07191af458fce709643d22de6e2129f818b5192967962dafe7105df0daedd7e55a
+PersonalisationString.3 = 9d4ba45c96685f0df0c29b113abec44eb814cd7b7f95f54114bd9c263fde33f96d69d19c2a1b4466981fd161bd47bc02
+AdditionalInputA.3 = b209efc362af9652325e947af629dfbe06407b4e0f1a0fca4cfa5f05c6417539b617674d413acd52c44c886308aaa5fe
+EntropyPredictionResistanceA.3 = ba0d6a682fe747b86409039d15aee49666970d36ef2b568ad4f94e666148e924b7c38215ebb940263b43bbf92eac51a8
+AdditionalInputB.3 = fa2d74e72f2ad96a6ff1a439ebc1ffe2550eae32d6a2fbe4151157ef8cc4e6c4722b5fb3ce4f0940c8f6996352ec2adf
+EntropyPredictionResistanceB.3 = b4c4d36f90e26e48dfc9d66bbe7061e2b2c8898f74a4945fca1395d718e9df9b9f46c6f7dac89230f82cd94af0eabe99
+Output.3 = 67d31d1ad39cebd4ce25902d151ece06dd3187c4b1a832c30c49bf3be20444ab9a05a99b6b06e6cf4001777769c44352b19b4618bba26f0bc6dad487c324d9f0
+Entropy.4 = 9ca080f18fe4e3d0774a58940a5ec61c9897e971044586a1ca6861d33addd2beed7ed965bb287b80c845846edb728b6b
+PersonalisationString.4 = 138afd910e084143052e58d5be060cf84901f14cb49cba38f746bd861211b9327d59aa8ef9fcaa37007b79ee6c60b063
+AdditionalInputA.4 = 10136c42a1194c44e0fe240d849d735810207f799a46eadce97448044e58d54c53e5c612de99eb6225293ac55922e956
+EntropyPredictionResistanceA.4 = 89af2de4064bf60951160a570180b89fac8608df3146114bd8c78dd8f9df908feef661207342da610397d134e776ca4d
+AdditionalInputB.4 = 2997298ae9f3628572cae70000f5eb02d72e4b22d337d81ab8d7a2bb728fe01ed1c77dd386e0cb5f00c506bc454f87a8
+EntropyPredictionResistanceB.4 = a268d6fcc6c88f0ff72f8a2365f7df2e68664b2f1e955ec5e3c70d87b096e76ae6b68e9516bcdcf1011b12d09cb37cb1
+Output.4 = 37c47755812ba39590160ae86fb1d87711a5bbbde17e4c98491cb3e2841247e0fe21a6dc40e1a98ece4f8150bd483a0ffda72eaa0e282a2a8cd20444a02755d1
+Entropy.5 = fd5aa26d9b25422fb7e8da8d8d6789f3651d573b9ea7c9764f5b9ecb5c0c36b9bdadd4e4bb72e4c6aeb43788c74c7e65
+PersonalisationString.5 = cc742d7b1025beb2965d4e76e9d57e7dcb2977f16a997f1326da1070cf9f699af4390ce5624f05c6a1c01ad2f670e134
+AdditionalInputA.5 = 647126a0d2342ceea72c280a3019b4b13ec9bf5e6153cb631f76725ddb0163c4a9e0eee6b8c2c9633aa0e3785bd5b5df
+EntropyPredictionResistanceA.5 = 6d34240bd2b0c92ef921bbb0f217eaa4d7c6824636f1993c2202ec5fd73c08ee21e7225530a64e6ad56307bd4756eb29
+AdditionalInputB.5 = a6f9690a3698faba806f234f8af7bc1b39b5d6e42bd1e41e19580e4f90f73fc714401aee6cbf47d043795cb0626f1c05
+EntropyPredictionResistanceB.5 = 6fc66d8d9bed58e753a406739a63deb6f7f3d4bacfdb756e3dff34bde081f1f348cf0ed4a118f0960da52a4c14a79ba3
+Output.5 = a2739478b225b911b64f33a08888da7c2dd33f00e91196f2395ab9c4129c0d1499c61e175b111041391c2b33d8962569e0b9ba16a0aa97e1de8da5b79d9bdd19
+Entropy.6 = a1a4f2bc0df9586f9250c9d1d7eb2f05252a915807872e5f4d2375a91b0b915aeba1ad62990b14d5edcbd72e62fdfcb9
+PersonalisationString.6 = 1d3bc4b3e5d42636f26c9dc4f0a67780d83e6e85eb592a43a3aabc8e6939d8308f61d63541525ff5ff8bb0e7f7d8c805
+AdditionalInputA.6 = e062b138a2875db087ea10e7a6ffce2ef903e190d566f4aa65178a278d02a12f20a4bc63d9b1cf35d0f0886d5377c9de
+EntropyPredictionResistanceA.6 = a5655d8583ff51a5b4f8efec8ee07d26169b2d407cee51ec05fcea5a4a960d406ee91d89cf7fb6a4a2868268c95ef259
+AdditionalInputB.6 = 80ad06a7a36330ae2099ab4809794658f4420b4dfb48190ad40dc7d2cb68b7a083ee41d93245302acb2febeda10bbb3e
+EntropyPredictionResistanceB.6 = 2b22baae89e53cac2e2fc054ed1a824aad6bdc59fe658a236a5b352d28c032f45832d3360d43f0c39291f7138612478f
+Output.6 = e7a88890198f0c96dd6da3fa69d1850fed1f6e870952e8a2e096a99ddcf5583db7f1e40da1d33193ac6dc96609cda93b130a72febf188e8af8d9bc2d9d619977
+Entropy.7 = 826cadb81d732ee76d7d14cf90b6c2406217e17fe59fb2c2f302e4c5f92ec3bd7ab08b8d38c1a1dd791ef1b4ae20730e
+PersonalisationString.7 = 74677e19d72a86b9f24ed87a7db2ec3beb6bf8996baa16733123d5819907579babaa3b6db6dbfe777b9f41c46975a849
+AdditionalInputA.7 = 19c4a6ca421aab585730c16c955d6df1b49495fd46cc6c7a60d1f41bf522a11433e85a5721fdd014dfc06004993e1a1e
+EntropyPredictionResistanceA.7 = d8b8b11ec1181472a5296429bb421ba52eb65c4b1870e5ad97550be1de7ad238a22b1fd161e8054e9cd5c1643695444a
+AdditionalInputB.7 = 3f745fe2a4602cd5f55594edd3966352ec64d64b11fa37402bb692565025d22f3b9b6dcb5ee5f47849533e0a801c07c1
+EntropyPredictionResistanceB.7 = dc67516dfbbad63010ec0ff87de4d7d6eb972e3db7bd091367ec0989a751fd297b24e9e2148e4309967e3b98824e41f6
+Output.7 = f00281c9239d2ffac567fa7006c639500ca0bfb542570cad8b62a337b171984f3f058600df0d5291a042977c60a6005a1d93a0793ce4e9ef1d3956e8f2c26235
+Entropy.8 = e3c2ee57a9e8718e796e4b6fe1033e0fe9d403365243403a1ecedcd8387357b32792faf94ba6e7b5db3a0a3f41ddb9ac
+PersonalisationString.8 = 721223de1e830bbc806a689953012f06cb3e9f5562552ae1eb2c49c65292e89033c4372d0ce8661af7b5b748fd449a02
+AdditionalInputA.8 = 1bcd7c86e5969959454e208e1d7885fb35276034c6d8b4ee91656be5e6f1be899c72c1ff3db3dc7d99eb053353859e22
+EntropyPredictionResistanceA.8 = e2632ad9c2f570474fdba5fd1f1255c888c35da4a29104ae8251ff80e0da363f69253390a5f079cc89f6169fd2664ff9
+AdditionalInputB.8 = a9736df4c560e1f3897fa419b88c36315d479ec3337ed5848db246b3f70cf26e6914781e59e3acbdb4f2910274238baf
+EntropyPredictionResistanceB.8 = 8ac8782b91cb388793ac512a5cad2c89879b7c83c371abeb4dd91f9b064b02ab307e50e50dd761f23d25b595be89aa96
+Output.8 = 032d8c6c8c7f9f188db3436999d1085118b8772b57c0dd7420a2717e3fafa41247add1221b049a761f1e726b1c13fe58fbcfda18f12fa6906c80fb2b23afffd6
+Entropy.9 = 817383a6515217543fc348dea8f2bcd293e5da19ac2efcd4f2dab9ac0299c8b6fac792bf070323383c44209f875db9db
+PersonalisationString.9 = c9b08c5ffe51ad3ab8ec86fd32b0941f6993384f76eb5bdb5cbd51949aaf9fa6d2744ad8892078be85dcdb779a4910d0
+AdditionalInputA.9 = e869594697be9968db21a268b75e5568b4679172127bfc232446ec70c7b2f61f8bff4f8bdb5ae71e8eff1e2f61dcfe2a
+EntropyPredictionResistanceA.9 = 59070544c5a5b667ae8385f0d74dee1711256d179e786cb2764ae491f1eb16c35ab491117639e083f6373b2edc23f78b
+AdditionalInputB.9 = 4e4f066af83b309e9f4f7fafc0f89715c5f5c3c9de4eaf0aa3840819b8f0e70151f443336a6deb60ad23dc852cab5b48
+EntropyPredictionResistanceB.9 = 07fe61ecbb4b6758dfda73e1ac861fc47b035ce441f374bbeb37dc65de61b22d1c443bc16b8e49168583a2f2095694c6
+Output.9 = 5c11a01381c0865ef48e287c2856d2668811ce692e4982da51ad3f13d5cce8efafa37b5fa9a74fe3b3e5424fbdf7cb544a840df5e16cd589879db0fdc3dbc2f1
+Entropy.10 = b94a0e27644c2fbbd3ca0bdab9fbc9f6247d58548153385148abc211932d28557ad4456478d9f3fe9883110e01d504c6
+PersonalisationString.10 = b615d12906568859d4176f71ce16dbe526fb97dddc20102423209ce0923f5b8e048cfe9d6705bb54ea4e7d925801b8a8
+AdditionalInputA.10 = b24224c2b414afb9c41ad80e97647af2684e5d48d7b330ae493cbffe608bd178aeddfb377ab86ab612ed9aa241088953
+EntropyPredictionResistanceA.10 = c6dbc6ac40d39524645528214b80fff3d0d662f42c10c909f12c156d3ca85a0d188eca300ca96b95fd7ef2ee0309133d
+AdditionalInputB.10 = 3431c083e33f29a39ec6a359bd52c00565bd676b1ec9fa61bd583643db4df1e4b12748516a41bf6e242e75b5084f7e45
+EntropyPredictionResistanceB.10 = 0e15cc3fb71cbf0269089a6ef6e7268199474400a31621ebf9f3166f3dd8483e87ffed62d98acc3b7568d3ad73bbee3c
+Output.10 = 1aa640e2bf9ce8bba6e1e0372dc3120be9858341d86396bc290691ec57cdbbe96b738ffb2d51800368e9319001079dd9bf0eb2c0367deab47f603b651ddb1ad9
+Entropy.11 = 8ab57a4fb7fc06695bc7b40832e1df5b9981332cbd37a3469a64635dffe3a7b84e1a3714d650e53bff115afcc3b141b4
+PersonalisationString.11 = 09f76ee9d8060faeaaaa68ef02f44ab9e74ba1d10d8fd1281eb2bc20da2e48a0abf9d142a67efc6bd48b1f46fce082a6
+AdditionalInputA.11 = 6acd6a37996c87da168eecfa1b2d515a3e02c9c93b2bf6b0e97bcfcd15e35e02bdccebade253cf4ce6fd8034e80dcc7d
+EntropyPredictionResistanceA.11 = 628095c00ea07eef51b174aea403002abb1c4b02e302545c4d78e3adae33cb7e5ee48b573977c04724e09fb689644757
+AdditionalInputB.11 = 980e6dbb1d25669d38bff0cbc691de845a57001f365958d184e9eab5bf81a7c3ef607d1fe9c93bfd614f2bed20065b84
+EntropyPredictionResistanceB.11 = 57f5e2133c46bb960285ee69dc805b1d1ea24445cee896ce140bdeab6489a26c4010d42a4df1963b5f8d2b9c7d97520f
+Output.11 = 032acc5cabbef27918b6d3ab0509383e88239f8ca9cb20c9e13f05f0242bc5258f483b0deff8da22d46b50b2139676935b4ba06aa59d720e21cf15d4f506f7b7
+Entropy.12 = 84cce17974256d04df3497c488488903a65691945b4ac13263643f4855e42526c80de9caf573fc9870581ed4a83f8cf0
+PersonalisationString.12 = 42bf7452b80199cc34050056830624d409607549095e91e884f5f00ae44d65fb97dd7d5ea7816178d1cd6204ecdf3baf
+AdditionalInputA.12 = 1a7e1d2506d5c474f84702aee64063de77a27912c45f0f887e116506d9129fd018a61227e979484dafd1eb8750e9e2d3
+EntropyPredictionResistanceA.12 = 640a4693db1778dbd4cfb27ba0f775b3169d6b2d8600338d55d44ae5acb6065294ed2e7730255eef58124850273bec29
+AdditionalInputB.12 = e6c336968e46f5bf004668dc651a3ea07ba93c74282ff9847b5865fea893483cbd73c1a3f69f56e85dce7fe38640aa88
+EntropyPredictionResistanceB.12 = 206048842860daa453355c05139bda6314fdeb3c8ab58175e38c2e23169ddaf25ae1ca9e9dae0d43751ade43400317b7
+Output.12 = 6435f9e3b86b9c42686d8ea56180d3761755d7ec7884a8286f8a161af420d3bedf2a5db4f60c7aaa69d39b15481a5468dda9204b9a0e35aa6621a8e9415ebed6
+Entropy.13 = 6ec156ac8c569eefcea50f800f289641f74eff844c5b773b00f8229d1bedbca0611f473dce50acbdb9c5f70be4612850
+PersonalisationString.13 = 9fbd8bc58ca2908378c042765aec6371d4366b65323c4cfd5585a67e7c5ae1b56031539106b2432f64f944266192268c
+AdditionalInputA.13 = 68a2b12229d993e69aab58cda77a3be9bd66145c45b468816edd82c0393feb4f2261dec0a528e10bcb4551ab051bd5bc
+EntropyPredictionResistanceA.13 = 13972b48c606ed1546722e9542ea2de465d78ebbcfb8071335e5cf137a2fc48ad4ca0af31dec4537e2545428e1eaaa42
+AdditionalInputB.13 = cd8833bd54663eb16ca5b50a092e472aa201211d46c7754ea842050b3560e84912ecd4ce66c3a7cff0acc96cf7990093
+EntropyPredictionResistanceB.13 = 73ed9ae03da30f2008d9256bb56162b0e268192e073636dcd6c99ecd7af518be08f16e77c6c42596a35752d012b2d25a
+Output.13 = 40c4fbf5d9cec756b7b34278315665ec36cdaa6cd48284e28556118359b11c2d285eb145c30349030edef2feafdd1a26caf0fb6973a776638e9f4f0048b8918b
+Entropy.14 = 832f28edb5df052fb4c5a7059d1d3a6db0d84af9a02cc18941cb0eb53671ab5ebbae65b3a3191595838ca8e8fa0722a6
+PersonalisationString.14 = be144ac80b828dd33a3ed6fe553dfdc9ad3cd95d128d8ed466fec809a2456e2b0d2c7e6b4bdac79b5e7ae55bab266752
+AdditionalInputA.14 = 38c24b8ee682a8f5f8989978efbf50ce1a4fe1892db8106714950f1fe8bfe046e4699b8aece19fcbf1e73c4a137e2fc2
+EntropyPredictionResistanceA.14 = 113d8a068f385d865fdad96cf78d30289121ed224b7665cfc3d61ad7a74dc4f624f761e630dd22c3954ba111dbddcf8b
+AdditionalInputB.14 = 4f23641093342d946d3a956c456dba18bd42de21cb2494f6310da7d20ace8458a71778905d988e589faecf779b194a13
+EntropyPredictionResistanceB.14 = 843e7cac38b659a611dc4af4bd228ebc0cd9073ee98350d04da61f77db66c0c70872153d9fa2af4bc583ac2cf79d506e
+Output.14 = 6754a72f7fe23ea607ef0ae61a61eb3afc562c5227670572b7ff2dcecf3dcb4194829d29fcf9b100412aa0ee87611ab534896f80f47cff40b7f76e0ea46b3d41
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 603cba492461b0c9a55b4a97fcb4c3fd76532636490bf171f152a1c1f0fe3366342ab8029dbc43fccde55ec23901b530
+EntropyPredictionResistanceA.0 = f29159d2780be1846941f5bb0266591871c9b2bb9a06859ac1cad041e8939c804e615d35cc26175697dc60a0b548ff10
+EntropyPredictionResistanceB.0 = 33cb7ab53e64b76990fdec75377ae9947cfa1441c3dabaf19bd40f8a259b2d084b4144a645cf3990be95408151377e08
+Output.0 = 1cb8a47a55235b4cf50d2c4d57039d55c2766ec19240ca1ae50dc80ef4c69265d2dfa41c2f09b99103d66e231b9497976bb376dacfb246115ad2ab57f5c38cd6
+Entropy.1 = 66c585572d64caa9fba1ff55e988e451297a391dd0f500d2885290f20d673c4d7f9af011a99a801e4f1d8eea75621008
+EntropyPredictionResistanceA.1 = 341cd27e70397669da7c258741828a52e0d1024d0c2380d5997403e5558dbd6f9b21a567ef6a4fd27f625add70ebb12d
+EntropyPredictionResistanceB.1 = 4050c6a894f134cf8b674470adef00560d4d00ed3f70de46ff9dcd95ed22d041950ec6e4178fb86af5c822c11615644a
+Output.1 = 241432fed0dca6d4bcf2394deaac9b5914ef747a6e93be4f97da76557da88359197718a1322dfe0c2c913d2db9ebd9760e15fb5426b1f85adf7d2bc039851b9e
+Entropy.2 = c570ffd1f4c5d1e939ad14a676c2f2695d4b2aa50a93a6c214fa711d764ff044b00620d0b98a1c0d06437efd00071895
+EntropyPredictionResistanceA.2 = 2dedf9535cfcdf74a5eff2c6c21733fcc22fb325a73c4bc306fd877e6f26aa5cb0ed5d636c878eb8b1c2005186e2f10f
+EntropyPredictionResistanceB.2 = e35cc4fda50792a7722407287b32cbf1d64731256dfb1e5122c1d0a23394de8d53f4cd2058c45c039ce396e4ba2aef50
+Output.2 = ae1fe8e05ee07c13a7407a39410fbf17a370ca7aa7844cd85687596c361e7a1677a519c6e684d4b0463fadef57bf37c6d53e42b97c17cafff4dc410b2cd27d52
+Entropy.3 = 89e0c4e2809f718bbd0fa0c3af6d124b169d61dd43d325dd325a46479ce2e3e2c0fbca7f50e129977a18636752da1a63
+EntropyPredictionResistanceA.3 = 042368a8116f172ef52c5b66ece31123261832d766e8bc32d1481ee4176a352b6fe74d37a17a4024ffecf37ccf4af312
+EntropyPredictionResistanceB.3 = 8d782d733b25d9b339d8d625df06119c9a8cc38df968e5e4d2fd5730f474a49a14728a4713cf45d4aef0011982bf50b5
+Output.3 = af553cf2755b352de45549e20305f9f04dc5770a1eec4a1f7b4131297f38292167c7206e084a0ca84c6f7b628d7a9e15f50ed7651358886913fbbbe0a9aaf239
+Entropy.4 = 39f3bd3e76a052a47830ef5fa858b78242246241a56292240499bbef9642322720c67e9a973b7cb918348fc0a10d6211
+EntropyPredictionResistanceA.4 = 2a2633a4d1f2fe64c1a87040367c3c13c374b10d248c68e550901e97f657dadea0feed10b0be0019d4cc8ae54b155961
+EntropyPredictionResistanceB.4 = 41c814c11d2c61c0aa975a3b03af1ea352c5b82aa930cea70e8a5d8f6ac04c5713c6477d5866405bb6cccd0c266f1e62
+Output.4 = e09b26f0cb0170a1883c7493d872f391ada160b4915d87eb1f62a310044952452459ba710cbafb78317fe45f20a150889d12eaf3bd22951585625942b0c81efe
+Entropy.5 = 3cd8c6878878023fd577f81696fbe638a1acfbf0ac0ef88f5b7d000ce15baa8e8f385326521571299781605760be8727
+EntropyPredictionResistanceA.5 = f3bf7d807023eb81486140513aecc707858d944163ad6bd874dab7b2499321b39fafbe51e17ee9740143dd6b403145b8
+EntropyPredictionResistanceB.5 = a17c6f90c1544aa1570b9612f18231a852dbfcf82c2ae6caf7c4ed49975f5478bb43f15879f27755a094c171da39c2c8
+Output.5 = e94ccd38d06710c8a46af4b07891ccc430e3467f3a72e5c2e3693f4f8ca39370c6169b06561652761090ecca0cbfb4c8e9e7465d4d5981c61fe8bc563fb23129
+Entropy.6 = c15d569058324e9709cc1f9dd074be18232e77e234f4b816080899b1762230107280cfd6e6b2e7863f60a10c9ce8a931
+EntropyPredictionResistanceA.6 = 1762ce5d4d06f72632098404ebba2b039586d738ca7de8828c86efdeca0fee906f09fce6791b1bf0805324a7ad9d29ba
+EntropyPredictionResistanceB.6 = 394bc594f87722a67e8870193785ae430c83549d1ceb96a52a59acee68f052f490133a0e681c78ac891ee50357217ed2
+Output.6 = 9095dc933dc8983b5832885e820dbdcb25cfa03bc530b9fdfba78b579dd81182ebfc441d0ec300fbe9829a88a300b17a69c4e62d0d2b54591d14510e207c8230
+Entropy.7 = 2651c952a6a7db3d9830969845e78463a4ae3f2fe69852ba1e091610afc101d13c4e74ba94b593bc89e144491a990972
+EntropyPredictionResistanceA.7 = ebed95102a85e771abb61cc6e0a141f4c3d8f7c05f497ecda0be8a8cb89792e2b467c75e7a9a8e70edca9fa662293a06
+EntropyPredictionResistanceB.7 = f17b657b755e79abec99255f3019333722fe4b3b1b6720213db4425f9ce4146fd4fcbc94ac21f25ffba240143aae76cb
+Output.7 = b428a40330f59e22b21397ba53f44d3059b8f0d9b85205c60a93733fc7c978187e724108665ed8388bb815e70afa8578c3889cd4ac7bd13284bf61a53a0e4c7e
+Entropy.8 = a669929d26642ea045feced379697883317ca176afd49107d7c32c5b0bc575db1be80d6383ac4599db0039c38a02ecf0
+EntropyPredictionResistanceA.8 = 41450c01fe58885b7d68348e42cb2ccc7e3774c091adc0d99bbbb9100351cfa9d35a55be74be4c4915a7ad7dfc8b7583
+EntropyPredictionResistanceB.8 = c577914fa8f24b099c981be102451f8fb0f0f2f1be924ab03e1ef0384dd264655e3df838ad8fb0691788a7b72d79f26c
+Output.8 = 0b15023ef9d9005848b2e27a557fc7a446081dafc30e958efd0e96323c3c3e44db4ca525f9b01df82f1fdccb4e99cc94d3b2692210bba2b7d85202aaece3c54a
+Entropy.9 = 196cb668a204c3759787a0e2955a0d9aa73070622377f883aff874bd135632a6d54715397332694bc92a1a7144142444
+EntropyPredictionResistanceA.9 = 998fbbb4cd51d209e2b8034b24b84eb332b54f00086e046f79864778638543734e7d500359fa8bbbec8c8388e4f6e985
+EntropyPredictionResistanceB.9 = 7a49a818e827352f3f6db3542cd1b97cd7dde5e87a4ca53df8a59dd4ea87d7579d15e30047894a7a1eed52a0e583c975
+Output.9 = 3595a767e5f3898638db5c2fc3a71d24d624d8023e11d33f969bcaebb7c824089b484db1bdd2e71c275009124972efc95ecd1632bdd11990fbd6178cd660c9f2
+Entropy.10 = f3bca949dec6dbf81c43d94c33f1867d6899d0beba3637601dece945f544da71b8971e4152f79137b3995b10fa8c56d9
+EntropyPredictionResistanceA.10 = 68670458fa11076321a33d8da6771a1b1baecf2a2891e263e1543916f38b66f594cd3e7bef5b973fa3241f04c9964bb0
+EntropyPredictionResistanceB.10 = d68ed81cf4008793aa70ce66ab7e4c99024901370d169943bfb36697e20942a1c66a2381f467717b1b29ec7051df530b
+Output.10 = ee0e7aea9bd2b55a4f679949f7d71d653e174c1ea26b32ab2e6ad3c3e65667a8e130dc2922b2ad11d586a6a74a66c5276ac59d8d3247b31fb9e1c1802060ac11
+Entropy.11 = bc531a048b21b9cc495cec60505e26eccd2b084d4d736220207b2bb2e17fa5774077624d4835e2c7cd8641097f0f4858
+EntropyPredictionResistanceA.11 = 5d5e072ae967a252e0e1955102885bb71069227ca4e3767ef8432ed756a86f1f6c1db4a9ba85dbb80fdcc89dca4efc97
+EntropyPredictionResistanceB.11 = 24777d125d69326c86b496de5e0889933389781054354cc325fc2bdf245771398c62f607197f0712c7b0cb35c8efe16c
+Output.11 = 3acd4740d7939183decb356090dca479b6ddf5d217140a90d0e08ca69d3050d1888e02678c0b91c93a3fc4ba7bb2ee00e30f9f274de37d61d1ab2b1400fe4d00
+Entropy.12 = 202e62723e111cae1a85a09a4447a6a097da5d773dfe1ffa0ec8264a7825f1feaab9e721c851a047a935d29a7c8c6797
+EntropyPredictionResistanceA.12 = b17f4e2098f1bd2f12af8a11b72129d5c76caab33229e48e6157425dba5eea03aeb7eb657eb0e5baa96bbe9cb46fbe5c
+EntropyPredictionResistanceB.12 = 9178559a1e8a0157a1b65c15b5d92c7b36720c0632ae8fce2c5ed47b8948eecb3d3367206349d377f081509f9e6da06e
+Output.12 = bea46b2d0ae3dcbf03502bd2a8c93b471483ac9329641b1fd0490c215513f5b918bc628f100c798621fcbf8d2b028968d223f4ce8ca78a1948eda74d5c6f7852
+Entropy.13 = cc9fda868f06d1ed44a182149efa08e03ffbfb86dc1db0ecdba5115b2701f4ca3c8c22d3adeec1620aca2833e59980e0
+EntropyPredictionResistanceA.13 = 6ab67dcf1b3ba9c3021a34abdef5a8b9e9e5ee0e0b702693957c4f99e8bc750d2d0d45676ca050d0ad7e09a29da400e6
+EntropyPredictionResistanceB.13 = eee63aba8039f8880e99cfcf6c6d09bafd527e4e0d1cf6f80dfb1dd11ef131badcc3d5e9488efda80227294653550d4f
+Output.13 = d30348af193f6682ee3424a6eeb77965defe3685e82424b657a50e5979e6a13764d3c7068c5e20381899c9596c77f9bfee378f22ebb97355ae276b259f130ed1
+Entropy.14 = 8b01eaaefb169d787c39eb1df1750348650776a253b374ffb6d414223d426e101cc311a8a6c45be15d4e0ce4305e55bd
+EntropyPredictionResistanceA.14 = b8ef0d478028f0c55dd13861281489e6c124870f0f28c8fbe9a3ce1d7d5fdd57a1ce939642c27981d786a101abb1492c
+EntropyPredictionResistanceB.14 = c12649a0f249c7f5ddb550eb527a0f720e5eaf04e6e3b96dc24881eba10ce466f67e3fe51a0342cb1a2192a555798169
+Output.14 = d8c63ecb23f16ee925282b7744e8cc2c2c1deb56581cf27152118b5790cdbe682a34d91523bf0c7be4ff263aba2ffdda35e4d36a5122461b89b43069932b30a9
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = f83503622c1672d1ef1afd6f6ff4c7326bbe169243cbb1e97d0f5d5bf2615846d0d72ef28ce68d1bf3310f12f2efe3bc
+AdditionalInputA.0 = 3e8c11ed78ffcedfb8ab10de9af50413582516b532f23764fa5c3f350acfe7326030de546a3347a87da52e554c2f50ba
+EntropyPredictionResistanceA.0 = 9cd5d3f5c0d45512a43817d3838c2aebfae737cd012dce8f5e6f5d0755de9fc9feef08fa51a76b59ba13d0ce92f49203
+AdditionalInputB.0 = 43cb286550713eb35bb2b41d8cca7b7ed60475feac5bf17ce14704f05b2beca960ceebaebb2cb5980ec00fc3b5d95f59
+EntropyPredictionResistanceB.0 = 5fd919fc00ae84a1a18fd1bebb731794dd4385ae178e9a3a94347d8887919cd7b65e7a83ceb505e5bdb10a4377454fc1
+Output.0 = eb0439aefb3d781a6b68708b28d9e00d4bc3e9ec6ecd468918773ead3eb0749854d529ab177637401ae955c8104ddc8eb099f41c7c306a2f76a950c812c1f818
+Entropy.1 = b9a3f35bcb0e13c34704aebbe42cd1ae1032c0477ee6a4d5966c6536044ca0fac96c2d97c3d41a2f6480cac11431b1b4
+AdditionalInputA.1 = 4525843c9eac44711e3fda2f49889404af49e37c3e50d855f61de7e820380a8b07407c79855cdaf26785ab757ed8a436
+EntropyPredictionResistanceA.1 = 86eaddcbb993536771303d8a632e58f622ec4319844c8bf1b112049a6f669eae59d38884c9c7e82975d02461c17f7427
+AdditionalInputB.1 = 871a2a3aab55e1e4fa72cce288389d58416ec2aa37d30d5f1c681f625e99dd649078b6003c9f8f99daf1fd0293134959
+EntropyPredictionResistanceB.1 = 918e0c9dace5c59b90797342988034e1d8361853298220b8c05c85054b9c170f963d6ddbf4c792d161500130f82ec54c
+Output.1 = 366e6a405ca2d7941ad329124f95fa6b157d5b573f4c8c8c7b6bcd1e39f97fb804ffa16c3798440c75d29a0f9bbf02a4518f45444ac8e3f8eb8bdf2eddba26b0
+Entropy.2 = a954dfab71e7704e3e65d7f091e4db8211bf7b483d5c0153c3bfd20efa791a456638cdb424fa3bf82a61abe371687fd9
+AdditionalInputA.2 = e30b6eca01a40df9b33172d47a1cd2d5ac0b4c7a9ebe19f24df09db71c4f9e1eb027c49303ac6056316afc662e63ee3c
+EntropyPredictionResistanceA.2 = 4d64a56ede433d08f7b88c97269e97136b59c790670b8a86a48515e708bb757a86e606b37f9fe6e8bbcf00a934f3d6b0
+AdditionalInputB.2 = ef383ab20353ecaceb94b7b9b2891a00e3c0aa1d85a3ff3e668b732d49bac73018522184c3873cf74c30a2395bb9829d
+EntropyPredictionResistanceB.2 = 57c5d9097e83091a7edc1432e2a66ca989d4384f841707c70672cdc182bb50ef98d6a2db10909278f4b71d8bdfee0805
+Output.2 = f70a0fa2900b38dd09623b7875bd2ccb32e40e146a8b46c3052a3c84ce3c9046ecbca28914567022eaa11d59e1b81161a79aae7cff787b9d5100f78f98a8000c
+Entropy.3 = 1f07b9de9708c91c2f950171d383ea9355d714cdbd0d85af1ce430f67f7d483e0e3118934f4cf03cc8f05ce06cbc407b
+AdditionalInputA.3 = 68457677f6ad0c604fe97c572fed97bd83ddcd95aa0e77d56c6711e6481a137c48966132c4954e079ad94e90c9796ff8
+EntropyPredictionResistanceA.3 = 206b22c1e42b3826949228a44c4a5ebe8c0f50eb48ffa90810897b2e5cf9e98932090ee5d80141937757bce3bc368f51
+AdditionalInputB.3 = 2137eacdf5ce18349840aeb93d12e64502cea3dcf7e7d1d8b4c3398cbc95b4efd2ba39afd51ad6f1f8fbeca77ae960a9
+EntropyPredictionResistanceB.3 = bd50edbc9b24536d6c00a5576515e4bb7d8c9bd4d5988e50b8e63de7ec72556b51cadeea2af54d4889e6891c35cbaaf9
+Output.3 = 627baa5047944bf8249642e625dcf8c44f128f439ed2e7a08813498a0a4fce982a9558f67ceb0e4a550563debf26c735a36e80db790afbb4fbf8369b163086f5
+Entropy.4 = c1669a430122e0856aee6b32d081fc83a03c061f6d24e84bef76b95cbaaa26edbcfedae05cc084f2aa0668fe0d47b72a
+AdditionalInputA.4 = 789e64d00a42c5dea4dc980aa324cdbe63aa3f95ef6414070b59054b1b2a33245b9bddf7ba0b59ec08e010db75cc695c
+EntropyPredictionResistanceA.4 = 9e863dd546e83852bd71047d82993788e161de88dfc3113bc7474ec783762599f5edf380ff25a231226a9dd51f32f5dd
+AdditionalInputB.4 = 51b53a5a96f31e750f2d9f0474ce3e752cbb7c10199bc522a0e79eba07d77091242791f6417172956c2397dea7e425bf
+EntropyPredictionResistanceB.4 = a9dd0f231b5f10cd4a0b17b09e94a938e5b440149602f0ab7703346124e8bd3a4adde96c84eed0c87335fd75b179623c
+Output.4 = 38c443f78f55a247d5741231bb9c233dddb778af412bc3e8fc4dde0c884c0abb6b6743ab23e7b77aed59e4e7d80f36181eebc0eff3984771146983de582db65a
+Entropy.5 = 800153c999ab5e4f68024ea79bdfdfb7fb63e6b6afbcd0e2a692735e61c655bf184276532fe3f6e68c4e20040d992919
+AdditionalInputA.5 = 9f40474b7f3c6fc8d3142b1d6e9808fae87b2de0a1b0cae7060f5dc91a3eab852650862524686029cfcf2230712494d2
+EntropyPredictionResistanceA.5 = c2fcaf9271cf8538a55b0c320613b2beb777f129007eb1462ed3ac9a9653b5ac106b385e44b40ac02c3c5b0e22ec647d
+AdditionalInputB.5 = db0e7c08ffb1c37afc30c6fbbab9fef949238cdec775bc0667bce1f7a56d1a2ca0a008859d6ab75f878a6b00a9e5e152
+EntropyPredictionResistanceB.5 = b82ea66be47bc71427777789ea29b8ae829a09e79d388d3e668ad7f6e0432b8c9fd5e17a26b3d30de9a02901662f1eae
+Output.5 = 80ae6e76fa96765fec134f92be9c1bf7815188f886bab755e617f0174be4fb00bb19b466e353e2e1425c4cbe6eb09a65ceddc625aa00b73bd20e707e0c2157d8
+Entropy.6 = e074b1fc4134ff8def224bedb778c33fa5747597ae2a4d3c1ad095d33b069d497177a44f932b0ddca49f71ce8d8a3241
+AdditionalInputA.6 = 4a4327daf2ec675dd6b08c21136ca720495d950801be4c5034ac25909751132accb335ea47b95cf287d26d296ea5751b
+EntropyPredictionResistanceA.6 = 02261ca6a6b271efd1a7e614bef8a802427c9c1e53609212b2beb92bad8b7df7ae3f733bcc12de458900a2beba171fc6
+AdditionalInputB.6 = c216b8de2848146f5270160fd00b2e23f67edbd499fb012d6b950605ed0e2e4f6256e27ec7ec0210eb5e269840f633b1
+EntropyPredictionResistanceB.6 = 9593648baefba0506015d662225ae5a60cb217b114b24ad8201025812a22c113f6871df221c22bcb28e2ddd238ab5670
+Output.6 = 1beda20b869b9519d2c8eb72efc6cadd3ab6d2f1ccff729609063b81534a2c742aa52c57c20a564da0107caee5afec232a20e2ec4379ac7c0fac4c83a641c2bf
+Entropy.7 = eb7f53f4c991a96a01cc7058ca91273073fec7d57f6a4ad86ccb0ac332001be955e8f3021da95243907fb0f175b91f88
+AdditionalInputA.7 = 002fff2d34ac5c2987e69d27a503766d16d42ffcde7b16af1e6e844764d3fa73f0ffda37698f364867286a37ad2973ed
+EntropyPredictionResistanceA.7 = 8ba9b8145dc3ad9c48faa84c6d8b17720e85fada42bb02c9f8d50b6541c74b6a275f59cf51d016244249b8fc56fe9535
+AdditionalInputB.7 = a548155914bbccfd5c7ba41700d45b50f32735cc960c7df7d33144fd464684dc5dfef1e95091d1a7c9617d112377a892
+EntropyPredictionResistanceB.7 = df2a8ef450a47377785bf5586b50679816c6a3db9a7ba1c3401edb4ecca9ccd713ffd1e82e4d2326433aef19b6791cbb
+Output.7 = d171a96e6bfdb437cd20d650ca27dc3f947761ed65b93b4476bd2cdb318ece39a134729190c978112d1fcf9473ca80d13fad57b3ab0556f469956a4802aa6316
+Entropy.8 = 6ee13c9805e39466ae157984382321c22004b004e96f69b64adcd546e29c4bcf43b95c0b708ff2b56b9abbef16595874
+AdditionalInputA.8 = 04372efb1f9e93cae064f4065598cbfd498211c0e7d76706d31b527e533e62883b42891d63dca394359a5a7acf2b4334
+EntropyPredictionResistanceA.8 = ff86ddcba2525038b16a28039eba044595749f964414ba164d181b03b6f853c188ede2e80b8faf44f473814e22af09df
+AdditionalInputB.8 = c7ae96009f4d0082d645a301a3eebab412f3af23e3862abdeddb3c093ec856c8f87fe72ba93a0e1976f679a7620d3dd5
+EntropyPredictionResistanceB.8 = 04a2ec1ec1eb5ee633f278ca7d7729aec990609dc32614947a4fb236554f5587f2c0dcbebeda372b3b6eec5dfbf6d86d
+Output.8 = 98346777cd25517ad88b4c490560c1f10bd453cbe16430d67f8a4784f69ef78a2e41f8f26119d0d8eb452fdfb1f8305098e48b3cc0d774b9898a0ee7f4247ff4
+Entropy.9 = 7cd6c41367ee79418e4564e8f7be890b062924878efbcac70e3415f4ee6a9a41dbaf0afc538584ebfef93ad7e1ac8626
+AdditionalInputA.9 = 76c7520b82f4de7dbfd48d97743cdc554b9de9609f86f06ca09ddba25cf44c5557ea82d3248c71a543d910ae01b6e00a
+EntropyPredictionResistanceA.9 = 8a56c932d52965b574910c0490cbe5ac102259639df9f95873c7f813540d40217e873cf46af19a31e5bdb16520520586
+AdditionalInputB.9 = 07fc6459f96ada85845df9dc603f51a1905d6d7d5098dc068861bf1be4e67a0018664bf059c78c30e9eec33ffb1c6b1b
+EntropyPredictionResistanceB.9 = 1ee0adbc4e477a080a3297b31e364449a9666a4aaaf620e153df73f9283ade874a2d5b55d7cca713da067f6556438b61
+Output.9 = 52f3aff1ed0b5eb619cd50721e65c5d49846f6ac5ab8a3bea607944a06a55915dc65cbdb57e62799fbe335f68b7a83d22ab141cdc0d7fc33aae2fd96a2cdb05d
+Entropy.10 = 728809e96c66e37410c3608678a259c8530ac272891d1a89601d7a4defe285460523034ecbbb751243f55556c20fd1c4
+AdditionalInputA.10 = 795fd422a9af77cca1fe5a810a3a283b89cd824a5487df35ce9f8e62fa8640ab27e06af8dcb2a718230d7e97bc09f033
+EntropyPredictionResistanceA.10 = f81979791ccf2e3d1782aad90df549dde5dc02e4291ba09f9fe97b3214cbc1da287f320ca36978908bf7ce16013a0ebd
+AdditionalInputB.10 = 3132d025f52466d27e38602ee83d11dbc4fba55b3232aaf95cf478901cbb715f900323391548dcd915dc6ad0c76efc03
+EntropyPredictionResistanceB.10 = a5d28ed2c9e4962bb5aa576945b8e89ddbfae4979c16e3e3765da713c287f3ad69e18c613df249ec756bb3fd2787ae36
+Output.10 = 2a0ed8c3798512f4d28a00115eb58c77bf38e5aa8f685b195699a66619afa2582645e6bfbbe20e57a4b72be35f4ba22c75b0781a10c67facfb92d84459f22fc4
+Entropy.11 = 2d6678db9e854ec4627997002654d53e8892e8db441b5789898d7f429a82524989fee5933f22437b79975fc540f82fc4
+AdditionalInputA.11 = b157f0aee3397d0b884fa0b76d36b8e43076921e1cf2d488b84f0f4a9d41790fcf01089456b55f48828c2cc3b1172673
+EntropyPredictionResistanceA.11 = c76ca753dc962e9db46825f9bce303cd920e09b515d5567d71647c339efb6b6e95275c9889cdf35e05bb140368d4fd9b
+AdditionalInputB.11 = 55cfe7223c6c666d907f19abca73da1afb516183283a4f53e0465be69924876f602b991389c7f9e4ef26e038d80b31de
+EntropyPredictionResistanceB.11 = c5e04e7b5319e6d4004027abf9ee0a57309cb22ce3d9d586c5ad85f2e774c75a86caabc179318e6c92fc5d23e2313bc2
+Output.11 = 4d0b4fcb6b2fcfb23aeeae6ae5135ee235155a26fdd67a84e2a6ca49d8bf3fa61452ba32a39bfe0f379a5b92c5e416e42cdf4c47b24fe6aed3b81745411a4dff
+Entropy.12 = 530b136bfab4a3f1638a976dd4ebf935f1c725ae30bfba5c5ab494f2f10f52e5bace985911d2de4b12a4f6af36e43549
+AdditionalInputA.12 = 0f2d382e60b237727d971108a05b4621fd842e3367447d05e90d8f935347df8fecbdcedac7b000c589f0d21e42995b38
+EntropyPredictionResistanceA.12 = 731d64e83cc9014af05f691d747d3ecbcefb6ab9eb3ade760973b0bf9ab700fa2c3c02cd83aeb94bb7d0b296e40c79b2
+AdditionalInputB.12 = 48ff7f40dea3099d2d7f00962db0bf77f97f8b3b1a0f63c3623837e1d9d2459431ad837a3ded68fc61c27ca8402d5080
+EntropyPredictionResistanceB.12 = dd581a7211167aad0c3e57a546da274ca8d2f66f22c8cd5dd937fab4deb8d3eadc1008099784ac9555151dd745450de1
+Output.12 = 8c2479411106705858e9cf7e262c4d1e116147fed3ce34c6b7e27abb15ad4726cf2c0c05ffef0a1db97cc8424e38597778a5db714e42484fcd4671f66b2559f9
+Entropy.13 = 23cb80d0a53ef260bb9ea156bfa81e369953212c15f6b7cf19a82d7ff8437d828a97be69aa4b28b3074899bff2664d3f
+AdditionalInputA.13 = be5f0722aa6ba5332b7e273be3b2fbf5571ed746ffff47dbf745b0719a8d77ea69afdbbce67ea9becf56db6d38059e64
+EntropyPredictionResistanceA.13 = de176fc28680ede7734745ef549ea51179a7bec1da8ade1c56ae4c7aecc02a9c1a648a3c862ffc6152f39055eb9b25f6
+AdditionalInputB.13 = 91493672ebe813025b7abeec2583d45fbe40180d1ef629c087a38230a7a79ba702669912c95360a2a768090ce3f2d5d3
+EntropyPredictionResistanceB.13 = 45773cfb4997c1d9e03ea8f101d9c3976736bd1a42ecb22003766be8be8f0b84d895191e4343f2e2f22fef59f277da93
+Output.13 = 457d760e04acc520b340767a186ddc44ad1c9b1cf124b800e7bde2d6c58d1923dbd15ac90fd291283e153658b692555ef2516689e4d0d0b0129a7d3b69783697
+Entropy.14 = cba44c722eac5008112526ba02581d78cbf73a617ee04ba0cd712a49f0f847c23301b93580e274309473fdaff004115b
+AdditionalInputA.14 = 8ef88e51a15d2c435dd533a9f4b6e6c7d5ddc3632118dc3933104f3a871bad064cb74151e12e88c0459e7b7e03b6bb5f
+EntropyPredictionResistanceA.14 = c5e25eac098aa9a15667bf30bd7d794b28c4365b0193d410f7db03791b81e96adb6b1c50f3843904a61cf964fa67c62e
+AdditionalInputB.14 = e97f7fc9e287ae947d3e937d60ece684f0c8dd9e133cbd7265b2b3e073983525c61c7e4f950ece2a196dc8a58d8c242c
+EntropyPredictionResistanceB.14 = 94904fbdfaf6b1d8931c15a37277814dcacc6343d48b80a1c624f8aa3733e05a52bf1f1266e2b90da5d562d7ffcbc274
+Output.14 = ef2fcb4a9113e062d6cd37f51a9944645c3cce0b06e2d11a2c778bdb559a2f627c8a0e7f419660f461456064c3508df1db945af6085abaf7719e868a912df8dd
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 45bc622bd4fd4c47191754449e248be7279fa11015df5378ec46a157dabc36d1eb08d2a75c6bd07ebf969b8da9edcdfd
+PersonalisationString.0 = 7b55910f78a4de1bb0b0e8f97d26b6f3cf72981b68ed4ae7f5a6d46ac668fe3543837ba6c212f081e5d4d56e35de194e
+EntropyPredictionResistanceA.0 = c9d1fca6064bac3c47d4dd3470092e5de5873f1490656d79da0db9827d81a22e2ff63e19e1ee201366c41cbf7a6bb8d8
+EntropyPredictionResistanceB.0 = 2b85649b7217e3027a0c2d2097e461d6c39e46b98587f5c0ad72251e2b5fd4185a100eb78f931365fbe2d9dfd00c7107
+Output.0 = 3cc58f52650d64af06e961db6979fc1ec7a8b3332e15487f831327e20de7cb83c077f485a02fc67b8de0c9b14c6cfdb475f6d4672feee5855e5565d571f13f99
+Entropy.1 = 8d08d6981024c711e0890f18b2d9fee9197f367e489b1b0e67af8c249c4897755953c8c220edded07e4de5b99b390fd3
+PersonalisationString.1 = e61bb828cd11e7110b8157fee4e44434b841d0cc8fb3ff0034671c4911a97063a48eeabd8c59c3a7f07e00a869c873e5
+EntropyPredictionResistanceA.1 = d3a4a1c7cecf24fc069b6e0562c99c09f7e283a2e2a7e39a0b5a3a91b0125afd69c0784aa113dd6998a7a720b9737842
+EntropyPredictionResistanceB.1 = 4a125048bed17379bb7838eed02fbf90ccb603c139d56d2b1846e9d194002953b6a90799be02e28a1778a9f2b6cb61fb
+Output.1 = 2e6022f775b52e3525781079671c65f47c69cef1cdf7a93112c02172ac3ed5fbb6108a151ddedf2e5d27e91f9d2f23d2ceb0ff16602e1a9a5a5c584a65a69d2b
+Entropy.2 = 92571631cdb5bbf69100cf79a5f2d0f4e95b50805a63d2413d68db7bbdb691d8a4fb66087e9ea8160f028279947a6fb0
+PersonalisationString.2 = 1e6d2e30c6e836bc55fb6e7eb3623536766d94644015c6a9c1619d6e3c132a7d2b84f7522405e5ff0b7a76ed36247d97
+EntropyPredictionResistanceA.2 = 8ca8dc94c264b6eda8872d634cbe466e1e9550924eaf0141154a9a871175659536cbc4153048d655bef6087e827a9983
+EntropyPredictionResistanceB.2 = c360e4201717aa81f6bc5241ec07dd4ba2648d4e8b26704e94d795db64126c083254fff57dc6ba13636ca4f013349a0c
+Output.2 = 413f1bea6da6401528591245893896caa612c30f3885497d9a54e2c1d80b7bfcf351b00604329f7248c1f53505235b03928baace2ec96ea91d6b85b53a1db41c
+Entropy.3 = 0f84bbb0ab2d2c4bc63b765336c950e28668397457da2a50907463c8b00370616521baf9f706f8dc2b2c68c980756509
+PersonalisationString.3 = d60a733095995d9b29c814386e0e206d4ecec165de3ae66ae250b5b6409e5cae4228fcd9be0e6803ec95fc6c438dbae3
+EntropyPredictionResistanceA.3 = 552f7fa033865e495718e6b18d92b87197c36a8c699d733ae1ab3ba9cae3298da3d9bf9b08e4a2fd925481d12bdc157e
+EntropyPredictionResistanceB.3 = c8e85afe3584f5741f9238abacf5705d5bafcd524e06ca40639b818b44bc5cce29f3f34c6a334f7108d8206a6cb6aabe
+Output.3 = 1d60b5dad2dd88e854735c2bbbd85911d3dbc5f730b43be3988b06b69ed9f034cf8041acf7e4712b01991383b1ae8e7f86e4a0e0f04f4331b56a052b80226963
+Entropy.4 = 7de6ed34eb9f99170b83e7c2c9d0fedcc7400fc3785b3d95e9a3b66f23a5d904ef7bb6bf557949e414a74d08641d0ae5
+PersonalisationString.4 = b4e6ff0f80f194da05ddcd1163273408fa7967fba6cc61d5c6c474807b9cfd6d9cef43546562eb2942ab95a2f680c321
+EntropyPredictionResistanceA.4 = df46cc6abcc87bdf1f9d7c5db79d836db1e1819a7d38e2aef029fc432927ca12557c56600c5d36627d74df7ace717a7c
+EntropyPredictionResistanceB.4 = be56a80509cfda36ac0f8f77fffc0a64ac4f6b03daf00735bf6c3256dd2beab1844ff461793de49c01f14b1ea179d5af
+Output.4 = 74ac7387ea3520cfaead455c4312c9fa7d4dc0f50373927004bfd2c84a92b473009520c358f6d1d6cecdf92d01a8a5a4ead2fbd42d8fcfcb7ffdd56957033cc7
+Entropy.5 = 47de659adb962cd160a5f8cfb45512b3c1c8cf088bd5ca42e4369a346c57829447b1e2f08636a518b2ebf0d5ffcd5779
+PersonalisationString.5 = bbe5a0ac95e12f4cc51783953e41487fcff78e4507bf8c4fe7715906f8ceabcee284747695f484dc70ac304a822fbd15
+EntropyPredictionResistanceA.5 = c209e6f9118f3a839cab0d8fb62a73fe9d5f94de685a819c23512a1ece92abdd2e0c5c5b8365eec54372133e2f75ef9d
+EntropyPredictionResistanceB.5 = edb4225b9cfe1f378bd43bec79d509ee35ebfbf5ddbd1554e761aedb3899de1234cd9aa47ffaf95e132c45e6126aa662
+Output.5 = 76435104ac698d1c3e3997c72a43a06741018cd47a0d6a8faa6b107d0c3a537d49109d1b3e375d10448f2ba053bdcfc97b972a9958d0640f557df0f6b82d12a2
+Entropy.6 = c0a6c23dcfa1dabe7e738f1d381438835969917fe50dddd3ff95588e571d39e720ce89b4fd6a1fe1337e5fda56f442f9
+PersonalisationString.6 = bacaa2504e26d5ebaf6d9089b6baac77a444d2117d9d49df8f7f3b2e0d567fba07635e670c2705378cce330bba4060df
+EntropyPredictionResistanceA.6 = cd1e9bbaa31ab9617a1bcfe6ae4e3aadd60661f6882be72e4bba4d620c2b372cc175857f1bfbd68e6a17a03ed6a9347a
+EntropyPredictionResistanceB.6 = 959e9befd37656beebfef2059b8ce59561ed32b71f45df378ada24b00feb305fb62423c3c869c764a8603775bace61c2
+Output.6 = 45b098da0ab246b6e3809166da3c97030b1644769602e5b48119f8bf052cd154786fd027b27a56eff654ab826e33f768246986fb6aa2f147d49cb41dfc34b7b5
+Entropy.7 = 838f6f396e44ff066097b7b38a1df67e0f36766cdd5d5b7c96b108defba18906de5e15c5daf7b3bfdc9c5effd7642feb
+PersonalisationString.7 = ae690a5f00d3707cd177805decfe8a072bf564d2d75bdc38ec964d588783997c693f6e3bca1c601b974ca57e09312231
+EntropyPredictionResistanceA.7 = 2703e781f9881f7dbda198a3ea646fe8c8e8d1d2a3155ee005c54ecfc7e5f1853e23a15bae255a5abbc86ccbe6389a8b
+EntropyPredictionResistanceB.7 = 65d988232aa8f7ea611796c965b1ca40505b56fd4f69c783cfb8383dc43959bd94140e29e9f6184f060ddd57ff272d36
+Output.7 = d98fba0811dc0f1bc92c7aae33fd719ba83f263cb806a052c1d98984dfb71b59d742a0fc8a92fa063a4e293dc998ee756780067a5199a8af1d4b2461aa2acc6c
+Entropy.8 = d9244bff1502d59d6267c3fc75242221832065da1e59a0ea72812b7ad607bd498bf55bc9e868817bc12efce61bd28bd8
+PersonalisationString.8 = f3251e3ed5fd1a0c3cac56725aba5c1e8bbcb285a4b05555d06e45bebe655ac24b00927dc9278bf9393a762033e69f64
+EntropyPredictionResistanceA.8 = e88c32d8d7a96947e4757e10ba3d4d889722bc1bcc9a491b216aaceb08e832e161a1111a5248d9481abf444413795219
+EntropyPredictionResistanceB.8 = bc44ea677fba5ac0620768410cfa929bd709693cf1872af16e0e2f3c530d3cbc86e38dc0436f956dcf3c90fe6f0a1f85
+Output.8 = abc056130ccc2117492cebf222bc2994757ed276a652f419f45e1f8feb793c290d66e27a30b67313862dcb02b78eaa4fd3b88a55a9cc15d2f04025034de6af1f
+Entropy.9 = 5acf21092e4020fdd1c0f7fdbba96e8dd4b60c5e3ed57a8e02bf746ecb60e2bdf00096445a0d426b140020401a887662
+PersonalisationString.9 = cb4cbe45b354fc73bd9e793fe2ab6712852c109f1dac7c93528f29eabe1a1ee876ab8a1c32338555d355fed7970841d0
+EntropyPredictionResistanceA.9 = 2aa6e61e14deb5b1c77d12a778f3dc504763f07d5ed0f858c191be50a381d0c283b04ae21bf49ac57d78028de4d064f2
+EntropyPredictionResistanceB.9 = 84e0459e439a1d571932b8f0dc4b2592911223a4449b188bd66984da37c0a4890e5b92cb011aa1a899a92fb63746a6b2
+Output.9 = 78c2ea5ab4943d95d11dcd40031ef2fd00c93804292da535538c7182099ee54224cbadbf5292418b523fab8ff161a191d9ac6c1deb80f31c6758b8805d85f1dd
+Entropy.10 = 8de8b5ea5773e822c38aeaa3a7af9a8b995144211109554c84707a35dbceaec16687e603e134fe1c4bf42beed3f1b883
+PersonalisationString.10 = 3202157a7df221990b39651da99741fff34c51e61110efdee98181987ed3a324a1b47f854c07bae8100442f7128423c0
+EntropyPredictionResistanceA.10 = 5227bd6b421d4ab8aeb02dbaf6e99be27c8582a05fe67186abf027f0d1c80fc357f12b91cbdd5d6e9eab4c467b1dbf2b
+EntropyPredictionResistanceB.10 = 3bc5c424ed687a1cbdb8f92fb339d66d28e63961dbb3e4d3ae2f7e29dbe38ddbab54ee0932f642262c33f68616d72536
+Output.10 = cff30330adadf8915f25f1d50c27ffe602007fb1fe5b69ec0e4811775b89c0fccd7dbf8a181cd7bf0d3a7d1da126c7252009fbbc84229374c0091cd086b7de4e
+Entropy.11 = 1f69cd5e19203443ee5212c6f9d4474ff86a2cbca0830ae28779a3b0fc14a85f3c982ac60d03457eedf877892a0cc7ad
+PersonalisationString.11 = 0b46bbb8aeacd4894ceeb05df6e45d9103f98d9484ee20c87f6a494b97495e6d46e997727dd105575fd0a84f243791f5
+EntropyPredictionResistanceA.11 = 2daf4a7f3a84ee9b9a55284726871dc95c0e5f9a679d4dfcea9f7bd8b320d054f37adbc46e3e43450a781cef740f80de
+EntropyPredictionResistanceB.11 = d505463483df6d55e4a54fed2a9feaaa0f4668036d582439fc5641f79ba19ac0c4ea2f5a1c72a2e68c3341fcc706dca9
+Output.11 = e30bda862a30e730bba5b171e4f78e74df8cfdab143561ef0e40892c319b58deeebb339141246ca7e947d1ff11c7afbf1a85e6b1801bd2724224e6aad3bb54c3
+Entropy.12 = 3e3af73f01391e849847730e7efbdce6a5935d48f5ac4b02345f6e582b32c0e6cb98f7e6b1b557ccbe2d8f50a1384998
+PersonalisationString.12 = b57896a849336f68865efcdea56bd5b06b942ab3f62631c2267016f5abcca8b9cdde7789ccd47fb17558f3ad87e5afc6
+EntropyPredictionResistanceA.12 = 59cc8471b3c8f636f19aad5cb3906abf43d6eb83f15e33578f13b1c5c3f4703f06f894e1800172d3c3e0903f93bd0e36
+EntropyPredictionResistanceB.12 = c906e3fbcc2deedfe7e66dba67ca510c4a6bc4b1f4bf7312e79a7adb90c7b4b9c80c4d2779b7243c8af10125f746bccd
+Output.12 = e417c2fad0cac058d19f36f7add66a76a4f5f52085886f8726b0ecbc9baea0c52bd9b1378c650598f6f61703bb0d3a1d735eafa500be6fb0637f20621de05e30
+Entropy.13 = 5ef5813db25417163e2dd84fd57f7a3704c921e004700560d7a02a349701f83ca45186f9bee2364c679f67b053b34476
+PersonalisationString.13 = 701b85a2e461e8b30a8015c539754743eeb20d2678e920f7ba3ce2f853edb006a8c7fdce52dea96e50ff6fab44284a4e
+EntropyPredictionResistanceA.13 = 1a9d67bf14a2c5308751bad56f98146654a2114c0ed29753a35fc3393be612ddc94f2835b351e438905c4657c54c1f87
+EntropyPredictionResistanceB.13 = ea4b31adcfd4639c928293dbc02223abf26ecc052a4a23eda44568deae577e3fe5b9e671ae44b48276ec392c81707aa8
+Output.13 = 77611cf293c7c8572d4a758cf02eeec6ab0c8a23ff1781cbc6ff103b9348f12dc4b33096305dfe6d1d6c77df8637749473b1d9f8db7999eb4595cb714d91567a
+Entropy.14 = afe89339e7615de257f328a241287b3bf3c8b559ab182af4557989cdcab25676056f84fddd55f4c366304ffe22280671
+PersonalisationString.14 = 6240d0ea3008a9b59153d3697cdcbd5e72a282e6c9d4a26b4263210050bbbc63ab1fbc5b16aa0df42784c96ada6d6bdf
+EntropyPredictionResistanceA.14 = c436b73aae532ffb950c6ed83753aa6df0571f11fd8e0adaf35bfabc96cda575305c240d8eb8b3b001191dab8ede87ea
+EntropyPredictionResistanceB.14 = d3ed7671eb3c2e0c115ec9d6d684964d39533d767413b63e0bf7c956b47205f8d5001a9650e7a1c7381f110c9ecfe92c
+Output.14 = f99b7d88ccfe1c84c9949c3548630ea2a9ec033543c693c5bf72a82f404c5eec5b2a09afb6c95f10b48fe4608092e7213285af83ba1304acfef846060a1cf860
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 0cc59e3884535fc2b7c3968a063d5f207c82a11113e740bd72a7c9c85922f64d855542c30a31e44578884c16f5f4e9da
+PersonalisationString.0 = ede7fe11122d4faac09adbf33650725e01990727e4309f92e8bad8b2562c4423683ba1a6ca2a58db086634c9b5e594da
+AdditionalInputA.0 = cdfdc160a8dd9a86c86e86bbef09ca0d3236519a206fb99e015c491b1bf6b0a8f29ad1d91cfbf046304d2ba3de21e1b6
+EntropyPredictionResistanceA.0 = ef9230a5c008e85e741c6cd7d7a338ed643d6f39190c6b2eb7b0ba563d2bbc2b7971bddb54ea0b85000a851a76686f52
+AdditionalInputB.0 = 502d6db79902b241e0202cb7129a6745e969f6b7826233957c1f7aa74d15eb8822848218150d059ed1499e0ec3f76fb9
+EntropyPredictionResistanceB.0 = 81e8d6fca21ee1ebf0b58542b346a311a42052fb8c8f0f916615fc2efced80931dafd1e5f2fdc27199091e121b4c1e47
+Output.0 = 0f4dc90897736ea1c71cda98c9e416dc8d3df19779b70ef22f92996b96ccf4f420a6754503f48c9327ed02b047bbd1cd68bb82fcfa04a647009874cfa63ae1b4
+Entropy.1 = 82a0e186dacc1230ea7e710414a25c0d6e6a67861ebb2ba732ab2ceb4a77e694c0c00563d8414fc4d773cd4114f277d0
+PersonalisationString.1 = 841bc34de2ed87994a6d58e0770cac7964c61162f624add4b6b3092091fbe32a7d275c7bd574a34490af98a9f649b384
+AdditionalInputA.1 = 48bd2e655abf5d8589d7a601a0b0cae4e3b7341bda7bac7bf72b3bf248f2271875fbf6339bf39e08836cc86d3f1ee27e
+EntropyPredictionResistanceA.1 = 836a4781349db2fa4c57d1ae930372fde394890bcc2c4052eaef37cc7cf9cfda5d1836901b83f3644e73270ce5005091
+AdditionalInputB.1 = 28a290d0ed1ef710107004e7288e1d9eaf449e6f8f017e33dcc3b55ead1a1181e441e937671347e1136fe554b8b42faa
+EntropyPredictionResistanceB.1 = 585603428eaf98549ec5f850fe92365d62ec91902442352d32b275dbf6c82d5cd25de9dc0be52caf8d244986da58722b
+Output.1 = ebb4bc6ef130d74283c64f77ba7278700fd95522e0ad9fc022a5c62a3413669993ffd1162afbddab5f872912031193cabb555df4f462221339b19617ea990ec2
+Entropy.2 = b30a5e928ad489942a455606527bede7a98a326c5bde09a7e31e31b7257f1852f5dca07479ee3f57028d6e1126f43281
+PersonalisationString.2 = e112ce7e5592e9cbe89796a56bff26e94a709c5924c19cd159ab50a586f9953231f30fd758894583fd2b4a5b74131b68
+AdditionalInputA.2 = 49f388f5c43be2146c42163583063e38ea4f03e12057b95a49ec03020b127ff884ba4cdc5d98cc18a67ee14b0eacd373
+EntropyPredictionResistanceA.2 = 5b9aaa2e806d36b9678452c579c716802f875fa7bcd93b72fafaa1de0d8d920e45ed0e790f2ddf488b5ca2c4392153c0
+AdditionalInputB.2 = 0cb530e65f4b7caaea794d59eef6c728950125a015aab486681286272b56ab7d6447e6635167d1f363c5e8787679256e
+EntropyPredictionResistanceB.2 = c25714bbbf4df7b382faf74e9895729d9b80e63575d2b10d03335c28f30f15d1ee9a183853c306f87707379de4df5af6
+Output.2 = 693d43a21d4d1232d36cc0355675886c868c585c4be450a364662ed396a0eab437de0fa18f6d9af658501c0c16c500926fdd6174e777f6129015f6c0bf5c3d27
+Entropy.3 = 84d6536bfec4d09085b104f4529b31e6a4af81b1ef593b83601e24a2460f0779d6f5729640b7c1457849f67ab3cc9a96
+PersonalisationString.3 = a463afef968aa5f4d1b0b65cbffbdff07a1329b06c4adba2102b96fa061f0da10d3754e0d8c08e78e271a90a83dbbfc9
+AdditionalInputA.3 = 3f1c5dae98a2491b05f41570013d791d655723c897f0c15db141f95b3a939252914a95a3c0a159565465e755a1d6bf20
+EntropyPredictionResistanceA.3 = 163ffd35222e66e12c92059f7ac385e518a2e36be568ddabe0624d6332a7517b0f4d107d03bff05013d8b391e8fb23e0
+AdditionalInputB.3 = a978d7739dac7fa683113023be1d97d33f8222befb7493453fc4adbee97771213bb5999f92d44a41771b43af51eb9a2a
+EntropyPredictionResistanceB.3 = c27c6a23b841ddd5b16036f0ce749f555113f6dc879fce9400448423f02f5fc7fbf5677a3f2293b3056a4e3bc48ad9aa
+Output.3 = 6a1e7d40f45ada57ed825d8a74f8792060ee69069746d5c5e8096a5b0c7ff96edd034cc08f2b466d6fb4258221f699848552fa1b97ad2ca2cd9940d6ca7692c6
+Entropy.4 = c4e05497ffb478fa714489b7f68ad410b62ea823d2bf0680dbd636c02f792bf3834de27c1ea85bbb1b9a7cc741f0c8ca
+PersonalisationString.4 = 91b6a2cdd9bda41ea557e2b242f768ed84a8c82002a08de214934db48275393d08c46dfcdb4ec9d9f582c6bbda321669
+AdditionalInputA.4 = 1ec238cd110673767a28bfdf63f546a6cce53e9228aa6b4a012187a4e84d636991f1780db314c58cdd69087f6eec8760
+EntropyPredictionResistanceA.4 = a5fd73343e0e9c87cc9d39b0891205d4edf93cda0c7c8e7641f72b9d17daeada406a20b54f567723b753e957298da832
+AdditionalInputB.4 = 964f964a023c816222ebb803097bd74ad6f2ed2cb042650c5f30dfe5d2e21299032e90fde70c4a7017eba7352f8fb6c7
+EntropyPredictionResistanceB.4 = 4d8debd2330791c66af1d3756102644d5f3a2db9bd7f6c11baeb591273db43cf8c29ed0c514865159e587ca91175aecc
+Output.4 = e61b29d18e84181e77cd80dce9d40cb24089d2317d64be7aaa026165579564aa44e8f47ff824dc5f261c6194acb299edadc0ad29767a35e099d499f762e7c913
+Entropy.5 = be8faea87b754ceb692e53cf871e79f335e047f31e08935989dd4d38d0af9c31d5bda049a90b705f51dc12bdbea78936
+PersonalisationString.5 = 3d2614407bc7d0b5e93a8ad1c4c670fc239f473897e6725691ef4b10d047c243c32dcb28d62a89d4cac01aec4d285f95
+AdditionalInputA.5 = ac98425ed1d281b9f48dfd1c73693e236a46e123eaff2117d039fa737f4db6e0649413ed978f68bf256ba7344994d5c0
+EntropyPredictionResistanceA.5 = 60189e52ab5b98558793a753c8c8f36012261954b21eed996512faba0c6153258ad0bc68441373f175df059e62cbe466
+AdditionalInputB.5 = 36df34d1ad31010e66bac049279ada805524f21432669bbb3921a1d86d482714f377db8ae0923a1a49ce92008cfbfa5f
+EntropyPredictionResistanceB.5 = 4bb9c4082a7283e278d9f794189a4fdee4c899c3736318b1f20f0740ec853eba6e46e0a3955dbc066f544859a2c349b3
+Output.5 = 9f2be6f006af6c500aa3bc822a95b13b286c55cbdf4f0a26274d36bd1d2ff1b2d696b6a8735950fba01f4b88e5ac7f01d5a3f91b1cf0b59a26ed505fe0b1d606
+Entropy.6 = 61114335aebcc36384e5d138427aa4dcdcb0145b9c69c58196bd317b9a6f9e10832e31a2b661e04edc49c6b08ac0d217
+PersonalisationString.6 = d777236d2f46360bb779c82498e859d1aa2902b67c9c014628c5a4178ee7706e7c605b03e456e1f7e5c616e6f78b98a7
+AdditionalInputA.6 = 74e3916a67c104fee0c996cce1468cb60ccffd33fb4a2030ccbab13b784ad0f9f5169005ecb40d72cdbcd3b65a2ba4cf
+EntropyPredictionResistanceA.6 = 873d0cecf12c646c0d8b4e942ad7e42935e1b9eef067301d3b79f20a48c5aba4f22caff6ce0bcb0b49fcfe326de39c57
+AdditionalInputB.6 = 13cbf688f462f8e9a8437b1742943cb4475f000d29e532636654ee1db2a53a9fded6da8d20240203b2f874e4d1a9283c
+EntropyPredictionResistanceB.6 = e609391f0d740fb5a0f1d42888384926db15e834a2654b36810bf58a2934e06d4f87a87d8e6dee983e733c34f3e449f4
+Output.6 = 20f301c0fd195ffb295d99a33c8e702429bfde140cf1c8fda1ba5881e02a34e766d9e2c0a5009bb12f7d0311571cc6e42984c0a94f984a7dc2d597ed7a9e0d53
+Entropy.7 = 225d9c79e523bdd00e8c0068149d029e60aae0698ff070b3f2f41067c77b1e39ca425337204683c41a9dddd3411a17e2
+PersonalisationString.7 = e5f20467ce5366c9bfae2664c41925afa3354a7d2af7679e6fd6c530d6b2fa4cd1cb1c29c6c4a5f0c045ea7a6f9a3f42
+AdditionalInputA.7 = 0555394502b2816e18c9122aa4d2b3f88ffd21bb1cf8106a0652eba271a7f66850fdb0459abcd2be7bff855361704974
+EntropyPredictionResistanceA.7 = 5b756a6e48e6596818b11715cb4f0b86d5b6cd4bf2cb13f7ab5bc46f04faab9d76d9d68df006139eaa546e79610d6656
+AdditionalInputB.7 = a6efcd20c008d3ba7b322ce48858b946dd4a5a3691d5e38bfdaa56442aac0cd7886c313a829a8fb56f70a44d4f835d7b
+EntropyPredictionResistanceB.7 = 1b9a505d1dcc4bead7b9ef94c2118b15ff6f8271c549b999d4f2297ff973181e4dc8148ba24cb4aa41338e48e287dd45
+Output.7 = 1f866610dd2b16f05694f399ee8a3c867c5c7e7661adf1f45beb9095c430a15ccf043ffd99547c08742f786daa95b8fb6dacc387d8ba55f66a8c6ce7437963bf
+Entropy.8 = 02c16a9131e94b54e3c3fa3d0ade4ec048bec04b889b0e7be80c988f6fdd999371cd06ba63ac194580eb4907ff2323d9
+PersonalisationString.8 = 44ec0b633c9445b1bab8bd77fa5b78606ea4f4b1592efeb0edbd804afb3aa4f45fab260f58385eb441bf3232706efc07
+AdditionalInputA.8 = 70077600131aa116b3f6e801f42ffbb53a3253cb104ab5c10988feb009b64fac88d4a385d9b6c043910251843273ca97
+EntropyPredictionResistanceA.8 = 0a5cf856edce7f73bc1a287e1dd4964d9c7535993aadc06124c870673cf9a24fc9712d5d0c9e0e53afee4723d4ecacef
+AdditionalInputB.8 = de61354e2f6a67c731c1f6af740547bc1ba33cd351195601de0c8b3e20dd8ef131007401f605c29f07c3e46e375c1ba3
+EntropyPredictionResistanceB.8 = d4764094072f19c5d0ad86682804a363b112e61d0612c43a6128b352c5422becd23d6c8924be3f842197da46fc637187
+Output.8 = 779da8db958ba48e26672052d3240a0f9c0f1034d3b60a8afb6b87d18f6e85eef8753eafb0a054eaa0fd588f9b2108631f883b86dd36f42748bc6da2f68face5
+Entropy.9 = 1714b2a5ac2ff334be799c11d0a58da5f0522275f5368b1df7b60455a0856c569de1802f6ab93edfa8113d8b69722092
+PersonalisationString.9 = fd5ae20872e3ff5d7707ee47c50c464e8d2add8fbb8bdd86faa9611f83a5afedfdc7e306f45a13cf843042d5cfc7d4f4
+AdditionalInputA.9 = 3d44202ac47ecd1167253186444b86dd7e1f2e056c1edd28e99ec107bd8ab18c30205f9ea826a8fe1edea2a1ba31eba3
+EntropyPredictionResistanceA.9 = 12f2158557ef00228f0ef0811ca77610449802e6651810be827636982dec48b07bd80e1f4ff06107b86e57fa2308df81
+AdditionalInputB.9 = aae5af80637ed0f38dd6243fda5197b1094cda77f66ae5d27d3365d3340dbbcfe3b32640d68c1327749875877ffb190b
+EntropyPredictionResistanceB.9 = 4cea1714c006cc733d90f7f883546f2d562ba097c394a77662fb38af4d6df51938a221f5fe21bb181b3857592dae405d
+Output.9 = 20f1ab1cf8b1485dce9a6f44957419efd217ff24f66e8dcedda72700def4fcbf7575153957a0b72f8e4a0bd0d1f54ce4e132c2c8f75760c85df6902d9f68d20a
+Entropy.10 = 8c3395fe3bb4f9f1a734ab1978f5558a9bc9fe37b4f10f6e038e8c7a9ac3d57fbab838dbab443146900c21ae5a5028d6
+PersonalisationString.10 = 415116cb462bd9da9754201cf973feec650eeed363ab6948c14fbb47a427abb6d8e877908aa204ac1f4dada22955da76
+AdditionalInputA.10 = 01fbf413097f7d9c70faa7a02a853cbe94d0b56d492656b7ed4dc6b05325559576e80149d8cad9814fa76659e0657963
+EntropyPredictionResistanceA.10 = 34ead7c195f31852ee64aded130ca8b732c9322354d36d9018d4d62bd162e2a62f7a970700ddb8e11c0aef34a9715db8
+AdditionalInputB.10 = ae1ac41b3377a8651fb932bfe86bd968ac87be183fcdb077c242a6f822bae3254b40dafa610fc7eca680e1d2c0480705
+EntropyPredictionResistanceB.10 = 8c46d971df4738b8fed6873f26b1f86f83c59ab5d0c6b1ee8662aad2112b519c20118158343f86b9199db24f0d4119a4
+Output.10 = 17f8c9977c00ffc72555b59c2559ccf8aabefeafde4c178631ee7b273ab5f7c78bcd327ab8cdc5b1bacd614fe2f2801b4f313d71c3f9252fbc2efedcb0f2e2d3
+Entropy.11 = 253e900f26a0923fce00635b541c4ca05876a377450f3420ba6f552d245a96334b5b0f67f4251ab40255ea4d18312b94
+PersonalisationString.11 = 8b3e45f77128d8a77f4bd56136b0dac5b4532aa432758f70d965fb39653b14c35c096005c9296b9a2c7ef8489643cc76
+AdditionalInputA.11 = 15934d26a587720695aeb6fff16672282e604de59a2921f714991fa4287733d19a0456dc61b417fe8d29d8349e2b1eb7
+EntropyPredictionResistanceA.11 = 931fcc33f2c14d53862b71c228a62a134182e139c6fc467d358d526a15332ee674dd92f6bd3ba8bc23414d2c9e51acd8
+AdditionalInputB.11 = 2f0ba5407d39512545c48fbc1e345af26d35605be28f46d0bce64d98c8db723be2bd4aa0880f2b8fc5c1e359714058d9
+EntropyPredictionResistanceB.11 = 293e57973ee84ead216b02d17c6fc074a97dff7de35616649b9b5ff3f95c0509d48ef002943c453394997f021ee7c930
+Output.11 = a9578c2f26e9bcc687e0fc7a7f135ada109ffb642a7c9e9d393552decccd3dfb725fe792304e8a116211d3d50565b6fec5656ec3158db5f5164ef2f58513d412
+Entropy.12 = c4b6078dd28f9f35f13ecf616a50777140a8104be201502e4d7177ed72cb995ce5d56b2593582b926d09b90a3c904c73
+PersonalisationString.12 = 47a89cef4b8426be9f7f8bd9635c84bdba28831c67acec41efcf725b8a04e8c54d10b61228b5234a3304b02bb70a4e7f
+AdditionalInputA.12 = 195aa7c8c5f12c4221a881fd4e8cadc56a77b908f215303d7c0d07f6cea90560982737ed7bbf434e407691cf09293302
+EntropyPredictionResistanceA.12 = 060703ff30d4ee8cc5d614dc796d3cabbabe4ce2f6fa8d03f90b7ffec62eb978abd0973eed32cf99f61cbc79ffd46629
+AdditionalInputB.12 = 8f3fe66d61c36e93c566284fdabe596d4fbd958b6d177a7d5ef4d7d35a6f1509c7d9cdf0c4b3927808151a987b97582f
+EntropyPredictionResistanceB.12 = ce056e0c5b99bb953eedccd57329b34a9aeadccd22ef9807f5c298c02240fb8fcb0ea62159e26739f4374fac25b56144
+Output.12 = 7bf911e5a1229ef407a5cb935197a4a5aca5ecba3cf5714145e744167809ca48ff0efc0657e2486f8763424963f6649b3ee7855e36fdc1448e83c7aca6debf0b
+Entropy.13 = 9f20cac7b57b14c75f1b4983df77ce1013e87a1a3d17f9674fbc391fafc0048843c5f2cd808203ab66832ada2286cd41
+PersonalisationString.13 = f1d99345b9532980a4be2ee08361c4a56b6f833a57952c58842ed3683326da60ece0b50f2f3fb1a4d49871ce155d3b1a
+AdditionalInputA.13 = cdf4c16152f04aaf849b4062d724c44773a9d9cec9275b7f7e82c3ac7447609c14aee19ebcd5fe6c66190a4376f2ad34
+EntropyPredictionResistanceA.13 = 3eef39847de67328db09f9f6a78299bf24690c0fc6659c5fd6c79ec4b49d7cb41323438e60cbd273d83f601e6898414f
+AdditionalInputB.13 = 05bcadbb4f0616d771cc9ca4f0a8dde6bd87a0172a2393667df76d93e499d07869fbfc0648a22469414893c1a08d28e0
+EntropyPredictionResistanceB.13 = f37cecc48c4c0cb9ae59dff48fd491c3f2a45c0452254376757eed44127471f9d630ba7bfcd2af86a82e7e160d38e237
+Output.13 = 41c2fef4b8736889bb420cc36485dec06d107f0647248e5d9905f8a2b30c5a97e607ee4265e5e77137f4b4ab399fe84d546c3899814a6e7b1b1c2bc5edf16a3f
+Entropy.14 = c4ced6227395fca3554e92143a530bd12df51964ebddf94bfb0219cbcc00c966a965f8cf08c44498dfd67910ff3bbaf2
+PersonalisationString.14 = 75984305c27324df116f951600a029d26268bd0d21502086ecdde7c688e9f72e44e7d3b34d89731fbee6be4affc32451
+AdditionalInputA.14 = 8676138f1d195028320efdc078ce5cbadd94b94318101c17576d3fb5a6326cae940ad9fd481420b125033ae0a9160c90
+EntropyPredictionResistanceA.14 = 353a6f816b73ace3858890303b51579fc4c2fde403bd9af505fdcc1bfc2541648ca7f2a0d2994348da0cd98ce4a58614
+AdditionalInputB.14 = 58a98d14625f59f7adf6a703b2e1ee21fb83f22f3694f7f06548c858042697d9ca1a666ae1bdcfa7a2f55cb12946b7b8
+EntropyPredictionResistanceB.14 = aec90f26f7c7853f3917de516f1ee0f85a0f3d0eb4967f6d2694552a93a25ca7fbdb4554de8acc0e60af0c5b0829cb9a
+Output.14 = 18d3f2396fa92b0b9e6bc7a5c0f9f8e10857c0063b4fdd8ee76d12e1205eb5e4fbe1b07ffc0ec5045eaaad608a558d1107f931c0290392166bed2d09849880a5
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = a98e4ccd7e7d4a905af5a57cec1e72936823be819b7ca362d0242f9af33c2906aeedba7e7e2a9d0cf0fd4ae39b7c1309
+EntropyPredictionResistanceA.0 = a754b12641fc2bbc649e68d31d441008efa7df99a2beb772bfbeeba10dbc0bc25ad4b551b2b7a15749bd080676f74625
+EntropyPredictionResistanceB.0 = d5a5f065b4f556d05a090faf4536ba8886358b4cd6dcaac2ad9b249d83ce8fb5a91d9f1f5fda62ec35205152c85d8cb1
+Output.0 = 800ef3f17728f10b4201e16aa9c3264fbc45acc8f01434cc0cb0e41e8954ee20d8099a4c3b4f5dc995bde0b3452637e76397768efe17bc7ac8b48d1ff7e2c70e
+Entropy.1 = b9a62e8d417bf6c72b7eceba1b284e9878b28cbae7a3e002c236225b0c36456911cab1d3dac46b27846c617efe2d5963
+EntropyPredictionResistanceA.1 = 9b32de98ea48d0ecb39d14a65b161d79291c1a2769487c8cbb8631217d6b6511de51f7eb230381e4503c626939ee35a6
+EntropyPredictionResistanceB.1 = 50bfeebb797f649b65654a3eb4c1ad1457d9c47d2818e2fedd986ec1a700b31900e2def79833ac344380da87a0c2b15e
+Output.1 = 0c085bb7979c75699640e525a2c57010e6d99172529b058f9d44008e04f73b3404c8032b4806ac3bd60df2da5055d73621dd112a774428f328d6d163ddad199d
+Entropy.2 = d8c6676e896bc88b8ccb0f32578dc0d8087cd7d3e52164b1e70df4eaeaf8fc4242b43e47df640a2108f8cd6fc70dc275
+EntropyPredictionResistanceA.2 = c00f592cfb03aff7c49593160a880bba745981c13fc526b97bfc7135a410a8476d02a75741b804ee3502f86dbb12d551
+EntropyPredictionResistanceB.2 = 95b867366c08a9f66af7138b8d29403f0491fa8145d08787170a88b30045aafe060e6156100a97ea3fcea8122713d685
+Output.2 = 56f2e0372c39f074c5781413f5e1e820844f5a77ae726e77cb7b659b37f5c0b8ee7b32cfb0b27cdfe6bda3a56d5f13e9c3d6c584470d44f09962be2190bc7054
+Entropy.3 = a0c0b11c8807a7d197dccd159f3d2af33e2790aeb0d5323106db52640148efa3e63e91cf5abd3bdedbce1d7b5e3255e1
+EntropyPredictionResistanceA.3 = c7cce45636532dc3d0259691da4593e692f44401e13efb398a00c2853730a3b2b9248e60be3eaaff72f093af731c50cd
+EntropyPredictionResistanceB.3 = 0cfc996e465f597d09a35f250d1eb8efc0c0f5808d6744709951a98115038459963b422341716d1b34e95489fc83a9d7
+Output.3 = dd0de1f2f8a29db1bde96a67b0ce6e2dc1e12c2120462ca7fe03995645ce9fd1dd7caf4004766eceb8fb8f901d595d6a6a9cb2139306e1a7b04d4f6c4e5a5f46
+Entropy.4 = ee8ca5de036c2120b2140c68c5adffc702de4ead919b6b574a871492eeb9c79068b6951d0ddd733dc7424cebc5c3efa2
+EntropyPredictionResistanceA.4 = 9cb91cce0a38189174f6300e941d51048a1a115c83e7abecbb85b50d7a53dd2d0a6b37f37fc902d4d4b3a59ad6c35c79
+EntropyPredictionResistanceB.4 = 2ba407484b1aad03201a577311095bac9b69a63b2cb7814ce3e43da31713814aff708a3c4e468c3d6555db3eed5db223
+Output.4 = 991182811917eda90cf64a0243e83ba83e6daff1622b122e5851a1008c37bbe7f85593a16a05dd10a3fd9a10f0765ccb9418699a74a2f967d3bfe44d3803c9d3
+Entropy.5 = 07f756f76b86dc7ecb371ab238d1c55e0be667313ffdad366579fc0c4a6964b9c31a25dbbcfd463f17808e52f6f035a2
+EntropyPredictionResistanceA.5 = c321b3157da5a946d3ac88baeae03a9525f4b22dead429eea03a0b9982bcfe15b95b274d431722f9e90cc5050cb48a31
+EntropyPredictionResistanceB.5 = 139e705f72b82aede894cdc78fe953851ac48c178fe921d7b8f0be51e552567e1c3452a4baca69b77fddb8914dead1d6
+Output.5 = e1663a941940dc450d97caa684181430247b369e808a50de3877d7f4a53317c11d5dbcdbafa36c8ce64b893b77badfe232c5a80560951650bdcb68d3b05c4b5e
+Entropy.6 = cfd30cc37db130fb6d33a85be294eba439b09686bcda89e33794418983ca1810890ab68ff893d5f03484121daa36a6a0
+EntropyPredictionResistanceA.6 = 0c1a41547491efd23f300c6e8548ae5b093d1fbfa3092150462ed2fc2f3d4aad9a844aec548d3419fba86fb1cfcb8746
+EntropyPredictionResistanceB.6 = 7505bf63bac983e891a6d70dc41bffcbf232f657ce63058d2754144070c8def6d1c409eaebf21706fb239597611ebd8d
+Output.6 = 1067f352b38f8ab2c68a1d0ce35290e138505616dd14a19c83bb3976004400659ec8a14f6cab8c15e17941139445c112d63e2c1a0c923606dd1c2205954ae627
+Entropy.7 = 6de8a03cb52658b30d890814bae5e1ec1779ca115766e571724634ef785897b2cb81120def1d3d74ceb3dcdcbce52514
+EntropyPredictionResistanceA.7 = 599d69677f8ddf59bb1abfbb06107c2dc8ca4154577537a9f2d2d9a8d9de316526dd52bbf254594919f6aefaaf904fe7
+EntropyPredictionResistanceB.7 = 75cd48dc32f1ece7234721969350a6bd168f2ab9f90c3a68ec8332546cb4685e0fddf1136310a3224b8f5a2983ef8816
+Output.7 = 0268557ae57659915e3479a6dea0ff5da2d8200905225dcf16852f5c102c036ca68e7fc298b198056722c1f7b14796ba6afe409b86515b8c1771400eeb56a2c3
+Entropy.8 = 03df67708615cfbb22ecb4ce790568ac5245ff8975ca1b4a755e9c23e20e0367363402d3813fdd8934d383c13ca95089
+EntropyPredictionResistanceA.8 = 4ace10f0b9b2e1fbb716e1e75e693c63c08e5c727314d0ae43ca4020116cd0496903a49fd01add3ae029563dcbd0a615
+EntropyPredictionResistanceB.8 = 144e1fbc392e9b1c604f99264efe07af70a031bd30d9f4dbc95261bebf83efe425cc25497bbad24439f16ad8f6f4a7dc
+Output.8 = dd03cadfeedb08eb70d8abaa59ec463ebc573f08148382fdc77ec233785a7113cc9b74c03bbc1dda4e04b12f4e94c067c248d51b8e93108cf6df37c176de9338
+Entropy.9 = 6ef52c1d2a8af0d9810d314d625267a53403b2fbb6f0d8758642c277eadcaf438147e60f5953c4827e083d60bf6e246c
+EntropyPredictionResistanceA.9 = 59de7870fb5eb2196101184fe5dca83c02f3327c6373bbd24282bd38c0d3a75a7f8f9ce8f32e38cb2e6ab4d5e1577927
+EntropyPredictionResistanceB.9 = 60d00af74fc2caa0dcae77ab3c1b84a92e8c98b31b3aeb4acdb0055629652781fcc12f9a649f8eb693fd2067c2bd8489
+Output.9 = 38b6a563d9501306ea8bfd85896204af42dffcebf80500de6a92660b3ffc9d14da9e9a36d7859ecff551d81a3e25ec8f20fcb3652e83a991a5f49285f15718c2
+Entropy.10 = bb623a2f9fc1c30ccddbab9a65465081b90f201d121d57ed1b3d4c17addfd351160e4a64ce40f4c103b663dec08dac09
+EntropyPredictionResistanceA.10 = f85559e998634a1be0b7d74412ef43b19e406974a12d14a023ca54d59ca16e62e06c268bc09359cbd97a9505e8d115a8
+EntropyPredictionResistanceB.10 = 6560ebfe6f499baf9e98eddfb187d34a8a3abafebd54181cd101f03a518424960dd45d400a377d667c02b8f6004a274d
+Output.10 = afd281141c7c4942453477d9f9ff780250cc32ccda9354152cb6502e49b1e0e2b31965c939e76b02922193582e353dcfe09e4629a3febe4012ca3908798a20d9
+Entropy.11 = 1afa92b79f80cb7087b30579f18652eb52040398296ebcbf0b730f298f1ac83749523fcc874c0761a2bd39032d1d0ff2
+EntropyPredictionResistanceA.11 = 0a90cde53e8e9957a4332d8654e7d4974e5acad016308c4b2b97294fddbdcef52eeb138f4aea8fc88731d41d2d90edb0
+EntropyPredictionResistanceB.11 = c7a41fecb6dd8d2f52fdb17f1d368e384b2c0d6669df4032b03fbec38f8cf573b8c5443a62e04c7aaabf8659b2a55ff8
+Output.11 = 7fe41170d1e440969378fad5c9bb0e7b82b9fc5f7a270f93fc4f29c2c7040618bd31b215e87f2de483172f87e94842fe41391200d1831ceb1ab6dbc61fc2cfd6
+Entropy.12 = d34185a96f30ca8067970f895d8e0d04ed25c55486f4c9ea35d328de49fe81e772334445f2ac376c53036f2fe62c700f
+EntropyPredictionResistanceA.12 = e2b6e37624bfb3c928a29b4a0e4797d05267c263cbda6c4f6523ac60ec7cd6a01d9b1fc83d47558438f8b5ce6015ff24
+EntropyPredictionResistanceB.12 = afa5a7bfbc648f7aa7eba35f73ceb5f32fe4810a765b896b9f9382eceed8f9fac79c8074268825ff8853b46198186503
+Output.12 = fcca7e16a7bd244edd20aabed01974be77d351a28051e1874ce7fc4b39a5259595f36fbf9bfe2f87521252abedb6a3cbfffde237c12a631daf3804745695067b
+Entropy.13 = 15a7f6298950b7a4d4dd1a3ee3f601ad6c92c6bf65b66d80e74ea00d45eaf7c6b7cfb406fc24c0fb7469764ccfacca7c
+EntropyPredictionResistanceA.13 = 6b7f560f7684da3ac248cf5dc658c18205e97e02486868024703180ba1d473a71ca2e02fedbdae12fa2f3040d7849062
+EntropyPredictionResistanceB.13 = dcbde6e2d1b1974e895b540fd20778a2668aca9b5634266f32e3935b783da91bcd6d45b0864c1af98eefa945d6ab154d
+Output.13 = 2a26496ab8692b335d9ea37f4daa96a4f360d05837cff99ecd9399abeb2e5f69ede51630cb16d6287c51835755a31eb6ff6b8c49c3e89442e5df1fb408b11570
+Entropy.14 = 5a0b8e207b55dedb2e7c3b62be91b4dfcc3c42255dac293ed8a93bc0180471401162f8337dc00d6b10ee035f2f3f31f1
+EntropyPredictionResistanceA.14 = 1e5191f18e3c049b3aa304604a42b13e87b61ab808a1f249d670a15f21862484599e5313e37443aa06cc80d4df7888a2
+EntropyPredictionResistanceB.14 = a04435fab8cffaaef34f6738f2682adef4790e8e2655d5943bd5370009ede99a6da3c9ca4dc7105a1352f9bd295be419
+Output.14 = 31b0234431f4ff22f0c1f5c220a5890c7efabc06974357a1ab8a79d1caa66b46b62f0b5a5b0d8010923dd86ced2f039effa2031619aafbb3d7dc9362ef04bdf3
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 8840dc37e13989f5e078d8f2a23071ed0a665954abe907979894bbea43d49d939fb0f9b7fa9172b671cead56ce16fce5
+AdditionalInputA.0 = 4a04a21fc0f2b8a32d6956ff955d2f2ea54a36d37f0b927a46165affccc68427a91c0766568695474ce783fefdf24cc8
+EntropyPredictionResistanceA.0 = 147e44b2e034486facebb067e6fdd7fd36bb86af6ffddde2eff081ab8b8f08e136377807db2636eb3aaa3fa8ac0c0d04
+AdditionalInputB.0 = 91ef7510045d2c9a95ec1698cea93a63cbdbc9b23d2fc4bc8408380de7ecf4478e852c30b53a6f61e334dbc1040c213a
+EntropyPredictionResistanceB.0 = bb43820b3f4aa1ffeb0fe55126e069f17fbcd0d5a8307bba60552f0e4089a72833f21c341e0912939585a643bb938fef
+Output.0 = 25027b15a346aed23a05c6879832b25bcca73a8041185825fc8137c5be645933dadef111c090c2409c1e68685aac21281e37ea4e5923628256d059e8eceb82bb
+Entropy.1 = eb68df19fa21c7a5eaa04072a2d9fac30587f63677bda450000960fe6e22f03732caf208661185ad2af4f64299cb3331
+AdditionalInputA.1 = e1322ef6a06e8412077a3dc433d8c191e120c0ee8ad344ac226243050131d9b185f7ea69d30a27d20d7389698ca4b14a
+EntropyPredictionResistanceA.1 = 746c453dc79320dbb565414b2a3548a4d16fb59482a3aac7fd1b64b39fa3893dfe6635a0b890c23ab9d61c4486f00f82
+AdditionalInputB.1 = 130ae4113e31a96cde97e2acd1ab8ed42a4e55ce6552d561fec16c33dd903fda23983a82008c6e7fe47a5e1c97737bf5
+EntropyPredictionResistanceB.1 = b36c9e30dbd39a0bcf2d3f327edb5179057d85681667768dac6e0bd9cca4789565d6724f19d38b23f0cfc2e738357248
+Output.1 = 99de1f109f49c28c55cd28c4f9b77720aa446ce7ec7246fe96a5819e15fddde73f6c7fcc95d543b703ea56e61b10f363eef8bf6b3a8659013b561fa4abb6d4bb
+Entropy.2 = 1ab874e65ebae492f37bc4d98b4d49cd1b72cf01c8ad3c22a6eb9ea0c78633a82c6aa20fba2b253e7282edd1f7e188ff
+AdditionalInputA.2 = 9d7690e0acd46acd294b89abd97e63edb274a724b047da607d635187b213066589e52935022e928fabd3927ddbea74b0
+EntropyPredictionResistanceA.2 = 83f4a23606986b6366f5d23e9d22709ec077e00440835cf96adf29ca9022e01f3e9ef398834e4bab35d798b652d169c6
+AdditionalInputB.2 = 2c08a6741688b7d1c989c778c30fbdc44be88a4a4823d74f8039ed1bac9a90ff5062bb7e39eed411d8a18fccc3f34f6b
+EntropyPredictionResistanceB.2 = 45c09dd0e5af161ca100727f7412ee7e500187df2371870ca079ef1e1a30bb2c649e63bf684b10b1b6de06308aca48af
+Output.2 = 7b835f8a8cc6e9e6bda1cb557f12d8f3acfa59d88024b64ad23b4906492cd308dc82c013b8bbdbd1015ee514472ac814850ff60a4821ccf4a91bf49df4deda68
+Entropy.3 = 7f74e7395ef4eeb0fa65d623bbddaad0c4ba1dc83009ed08b9b06585979e9f87357a099a4ebd19780e2218127728aed1
+AdditionalInputA.3 = da55e4345799a4f0396a7c3cd8f61d1ff7ffa7358f834b8aac27b52c7ef39d15c0579f298f7cdb4747e9fd83a4b92cd2
+EntropyPredictionResistanceA.3 = 2bc6f9602e10c89d31a7a71170f817996b84be5dbedb69c8308f35df61d23acb9c1de4a246d4f5b672dab93eb95338bf
+AdditionalInputB.3 = 9b3c123dec4402e973e1ea0b9b12311a91d1208074efd45b2bae3f286b9e9d5162bb3ab5fce4eecebc578e58f3422a03
+EntropyPredictionResistanceB.3 = 597fe21de1c30be45532d256f3353ddea1ba0574b20a8fd5422c1d819053fadd4ee887a56d3750682bd8cbb21be8a5f6
+Output.3 = 88a5596f7b93932a59c38a4f51fa2d58f1444f412e67552ce037b9d5e1177066fab7d9b21624f22bd62b3010330661c7d54fbf8949e7f0435750262c81043f1c
+Entropy.4 = 0420ff57eafaebdeafcf9459b2dd2633d74410b0d986d8afb4ea19569ea8504bd5beacc17702954402ade5f35675fb7b
+AdditionalInputA.4 = 7add2a00115ad87248747e9e668874207fbace9a4196184e7d3583d225c12b5a722780a6b6b52751cb2d30e7937af728
+EntropyPredictionResistanceA.4 = 0be979de4a348a988b2323a5874e3e1d135bfc3552a2b84ebf89261761a2bff8d184922978e31a0f66442828a769d6e9
+AdditionalInputB.4 = 68a0ad0611c9145d4da5e6f36685665f3ff53b70f43a094c613c31f53335d8bd77e607728237fee62fe690a26834895b
+EntropyPredictionResistanceB.4 = 28e218febd7ec52f75b9a2ad5a0c5b40948cef3ba00f9c1992c9645822eff891f2ba54dd87a11c518eb70272ce9cf64e
+Output.4 = ff84ca7406b8f3ff4d21c2c32bd181a35f7c1187b9a3d95e93f7fcdd0c11773cd17ef75b6bb5ae850e5856050d4e267c784b6b7cc8a0f3751aa4205d70bf2a23
+Entropy.5 = 05ebbcc9621cad62a7758f99a2f1aaad3ecce98435c60468f2e594addc7c4dcba74fa0eeedf3a3d5f618464953c09f5f
+AdditionalInputA.5 = a99776b075422dcae672bdd86c6508f95bd7ce928b0d52138df446e9f9f50798fd040e6d1a8c131c4bc85ed39982f6e5
+EntropyPredictionResistanceA.5 = 646ac49b7cd9b69731a3ffeb974065a7f48b22099bd07294cf00919570930f6c474a230c43e60a6371bba19120835987
+AdditionalInputB.5 = 972ab0e684ddf4edf2036c366fc93463ecd9ee394eb8e9907c1b36473ceae277592c229aa1287df3706f0e2258dc189f
+EntropyPredictionResistanceB.5 = dfd8c4ac1044e9f8e41e890a3a0eac01144f58e7e8cbfbf82138ad1652a30ab5bb9f2a259208d9a551f0c11f7c1db646
+Output.5 = 65d22d6ebde96ce03e51ce0ec6c6047c9e1f232cc26b8611f51ea2bf9e2124cc630e8bc78296db4465933bb7fa742fa89d2d83bf522242842b573f72e82c8b5c
+Entropy.6 = 116375a16f87767d23a6c46c21e3995b6f0925cd93cea83a2e982377c3799ac03169251ed017776820042284f8b8c5e7
+AdditionalInputA.6 = 0177568fe9a12c23d4d6d56659d977170ca68c791589310fa27816f3d4315678bb1ad0fb673b2352abb4607ad5b1d7e2
+EntropyPredictionResistanceA.6 = 24c2a73560a75b58eeba0f636153267810acb515f7e8fee02550f84c5b7b9c9d2b7a478270f0fa630fcaf7db55526ea0
+AdditionalInputB.6 = a73006e7921b8257f7eb1a44e9b9f881ede7f0c8607c8362d482e6db9a7be10d2e7240e82488fbd21f247005f8882a0e
+EntropyPredictionResistanceB.6 = 8e838eb3fc759064ac1447fec47f9fbf4ad06871422b297e38143c99d0a4fc998855f3fb775d062093370398e2b7323c
+Output.6 = 23ed3bc41d71f89e15ac91d4e99b8b3f28659dcf0933454bdf4cbfb91130568b2136f92263f9543b1cc39ff40985a41a15998c81e2e2809b576d19b69642db73
+Entropy.7 = ddced0ae9a9ccfacf6c634c1a456b1372267e71f7bb6c298e21a088f675dcb03ec747c83dd3aac74dff2fd2ab0949bb1
+AdditionalInputA.7 = 79db8e8731a797d5412f9ed7caada0b0bf78298d760e268693c5a594dc52d88e1db8869a1feaca90b9de4e3eae97f9c8
+EntropyPredictionResistanceA.7 = 82363d9cd989c220e24ebbfa6158379c21e9ac61489715bfd62ea6e699f489c322a922c3a8eca67c33bb1f49ba3e1120
+AdditionalInputB.7 = ec27ac86335521ebb4ce109cb70208b1be87584960fd09a9d919067b7b350fcb91befe480d63238c3d179118eaca1306
+EntropyPredictionResistanceB.7 = 1c307d616da4a457bb36e16d3f94876a944790cf116d379cadd962ce2a6bf2dc2e24d8dec50ca6685962c265ec22941b
+Output.7 = 98cdc70b59e02f75cfd1abee1bac636ffea6b3e8a22b4db573b04b2fbcd817050874ca374fe286de84c211ce047e8e070a21d8cdfea84ffc708a6ac2e54b00c4
+Entropy.8 = 6b1817b93cc85154e55e856b1aab067ab6e668ddfb307590b2563ec59e179ff8a61c9a21a8330f01dca3d0bbb2a0698c
+AdditionalInputA.8 = 118042243386806cea3f82613a342319464b90359876d74c9012a270b4ed68a5957d1d39d0f45985d27b7098122ec819
+EntropyPredictionResistanceA.8 = f07e7b4f72dfa22b31c144b67056555d49c9f0c70a809cd9669b181f0bd793b02b8df7278ee8d6954308e2bc734308c3
+AdditionalInputB.8 = a4cccf4243ab3498f98a2cf8d80504a0f144eef0019c1e241a26b3d746ce58e29003a86a980eef85e3d55203190e170f
+EntropyPredictionResistanceB.8 = 6825a35d81209ab3eba1a7bd8174dddee6c88f8c08b84f3ecaa3dc31e10d9ffef65281fabd5c72f118af84c9de670f9b
+Output.8 = f8f2a1ae6a832333f2c4bc79b856be491c2ae72f7b3d8e9eae1a4c1ac3a8d690b5c4b32304af09e5043eac8fb24fc4b76a993e98dba01820f08ce48df43ccbf2
+Entropy.9 = 4d6d6599ec2236d2a3e3fdfeda7c6d0ac4b52872be3f71fe05afbd22dd7b08650fe01e02770b5455ac839772d819936d
+AdditionalInputA.9 = e745272e39a94a2d5e780c7c894bba3aec21ffa5fe25aea5c03a39ed6183ed73f99df3910bf50320e96aaf23db428dd1
+EntropyPredictionResistanceA.9 = 8b4c7ea99b251b8f8a856e0098d0d576f5c394629676360559af830569112614159abf6dc5451a66af505b10097f1d83
+AdditionalInputB.9 = fdd5078954ade447da52c09de951e7641879ede1bcb8c901890b1e48d3f8b1448dfc70c4f7f50733c0007d82b3108ab6
+EntropyPredictionResistanceB.9 = 39fa4d4219f3cfb1bc0d568dacae55223cc14e99b1e0232b1e14230d3d0f44024218dcb19cba99328ff338803d95608f
+Output.9 = ede396ce2f56fc2d797276dd807a4c1917180a314b1834a30b86b6a7b97e7c6b2938fcd39b1070c4cc51b975041cf37bd5e6772033417b6dbdfd47383c0ac5f4
+Entropy.10 = c7bb207dde0b74330383a1fabba14196baffa7beb9688e43e8b9a2996fa69fe36896b52fddd627040260a96a251dbb91
+AdditionalInputA.10 = ad0f4722e67506ab513a7179d9a2961e9274e8ed059d5a3afce8cca5a3858e8e4e2cb9c8e70c1648961815c9eb369820
+EntropyPredictionResistanceA.10 = 62f70e58e13211e343b2f6572b6968c04d9ee68cab7fa73dd398af8d7ad4548a47f2e2fdf26052e3162b453e2e94224c
+AdditionalInputB.10 = ebe9b7f343e93f633e4106c171638fc7e98f4b0f5098415332f845409f46ac352b1b9082155f686c4b2c776ce60b575d
+EntropyPredictionResistanceB.10 = 88ba1ba8d968dac6dbdc2a67b0a6540fbdbf7ad5257ea26352ab4ed5d49dd18c469552ef8d297bece4ea6fb626bb5085
+Output.10 = 75ecb6432c5bde9efd90a913ed6c4fa8637a541be32b8d44cce662cf0a53b46a19684b88b16e35b3eb1ad37020eda4850b92b913d02a40d04dc46046d272a045
+Entropy.11 = e07e5a3f1cf5f75c93a74e7669d6a257d71a99c24ae32e95abe60467c739267430f727f0f0d9dc58b3a8b4918edfa9f3
+AdditionalInputA.11 = 4079fa826e52112a97d99d69bca615f669a29db9b342a5b31039d0f1e8fbf20dd8b8ecef4456d9d28e6db8ca0fe9d77b
+EntropyPredictionResistanceA.11 = 8dd0541847ae27479a331f6c6ba4dce797b234065056edc3bebcc2c7fd2f3a57c83a6ddf15d43d5db06d7e78fa09fd0e
+AdditionalInputB.11 = b9ed511c9c921cfcea7a13a187258e3b71b735ad6c24f40ef294881eba11c16fed3a8e0029892b36701b4d64e17a2965
+EntropyPredictionResistanceB.11 = 7f64bad8268e5e0ae3473850aa5fee435cb68146da9726e4811dde0bda3e1da997c01762c48e27e754daf4c195ce8448
+Output.11 = f1b9bf975a3f1ecd93b6c9b7516538205a3a567dca5abab03e44ccb01a342894729138cb6b9b0a49e2c21fc676ea3c74c469d6c93d3437693d3d57466ef38174
+Entropy.12 = 58daf93b288085fce91c604af9128e3fb1f3ee06ec7a159d8ba072d901fe0ba40c1a90f315e0de532e83c0f0afa10014
+AdditionalInputA.12 = cc3a586ce476fa371c2f6030a18660e027ccf5944bc30048b054d857fc9d056e4d7ace2229c5da92f6293edc98e57aab
+EntropyPredictionResistanceA.12 = f61fa2f34036724891758d526f50b802180f98d84c11f2425c8e7d6cfcd9bbe956a1bb225546d5409dd6cd9d1c74d35a
+AdditionalInputB.12 = 89b07137882601e50a7c063712479b19b20154eb5f71d8b509b0878bc589536164c3dffc773bfb1c1856d6def31961b1
+EntropyPredictionResistanceB.12 = d7f77bd14b7698ad6d889807f02f2f2f7b064b155b6b3ec2820baf3b8b6f387072cc6c7dcfd554d0ac97bd6c6c87971d
+Output.12 = 8dbeee099585180b03bae15706def393b9b31d5692702ece6cae4ce8f44f8fcffca4743a0ee98fe3c5f9233ce17eb42572b04c3685e0ee0df56033c8d0fff63a
+Entropy.13 = 4929fe3ccf07f260d28de7369d65f163c8fede9cb50b51359a5589a9c4eef091059b129d4114394fefb3b0d46db9df51
+AdditionalInputA.13 = ec66a99b91b298ceba1dc6af63428e4273c424bb93bbbdea59d24772a2e026cd10fadbd2aff88c0576ae231768fa3445
+EntropyPredictionResistanceA.13 = e9c9db75eb63e4bb6d9c3e26e892cb8df076d794ff6bd0764626432dc9edbe22e1addd4390641fba4baf8fee18b37296
+AdditionalInputB.13 = 2a56a436f0c9d67788d0ebbc4c8a557912d6db4372e9bfda0e12aa5b68a40f189d9a81dd6db7a696fb5c1860e1b3bfb1
+EntropyPredictionResistanceB.13 = 22ec206c5e08ce23330ff96d971cfa54c3e8a5d700463e9e12b418d72b06a626358aa9b82c64a5deb635f2b5da354c09
+Output.13 = 9c01a7d295f624fdf32db80dead0096924b80dfe3b7b119466546d87931b7d2f0acc360313bc38b7f08f590b0ed3dba339c0b69a354470eaf819d9cf0f318f1a
+Entropy.14 = 69f7e324ecf5bd85af9eccd152d7d26199ae4d19d29ad84d3f75e27e0d4be0ac01f2f1dbfec6da1c001d1dddfda2d582
+AdditionalInputA.14 = 7c300a1c9ffd8a638aef6f62c663aa7f5922b08e9fb8cb30642910840755711c70d83715faba86412f621bbe983ab00b
+EntropyPredictionResistanceA.14 = 35e234589f093eec80e8895f15d41629a77bdc2c067d836c0cb82ed18c6b8b4f1298f0287b190d10192d32cd62fa6227
+AdditionalInputB.14 = b1e3c770adbc772d94edef6188d0f07ea1c25fb41dd20eefb552dead33dc47f62e99a1736eb43fa111e1c04e0aad78bc
+EntropyPredictionResistanceB.14 = ffd6fd3031397d33e382f40b6338e7e3640b9b35800d890581fad4784366a1533f38398f255dc316bde222850794e46a
+Output.14 = 826dc7b1c39fb4955f614fab27697ed5fa1ed8686c701ef5e03776a814bbcdf9afe49343cb53944241c30b201be6d181edd20d55fe0374a43d68205d8ef758ff
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 8754688f2afa711e12ae65b6a4c5e7a51e5ffecfefb2347908ab1911bb37b1f1e15f12c8948cba3b7c76f00c742f74ae
+PersonalisationString.0 = 6f11ce501e741817bf70f472c8eb57072a08db0b10df7598a569757dc82ceda5d8ce1db8d58cf4b246a77ddc62c8f0d7
+EntropyPredictionResistanceA.0 = 1486e82b9fa88975817e47342209baa73e6e5bb01fa8e07337443b645b1f74ba94a7fd3d78d56741b14ff59ec4a193c4
+EntropyPredictionResistanceB.0 = 977f62913ff7755df22fa6dce06366f6f7c66ee9700565ab056eed91064bfed815bfc0c9f464ce9780025c70ddaf8c85
+Output.0 = c763a47fddd584d0810e1fbf099209c2cf5cfbd0148151b99505b3b8624497df32c02b56bae338cb15cb7c5ade197d77643b67ec06c3280722627be3702ae465
+Entropy.1 = 946ca2276b14a12e3fec37a3b0986eda88076be01a7695467603cde3d2120f6c98483bf8e7e28aacd354de8fd068a59a
+PersonalisationString.1 = c379d16ecaef5c8bf8d8a52a0e438e69f68fbcdc43f48912ea321906fc1a427ecde956911b87445c703c783fc41f43d1
+EntropyPredictionResistanceA.1 = 4dec4c9acc06be7ac2736817914804cc8b91b8c98db39af6e41f398ca196c2ff813040adefef39600aba67c989643858
+EntropyPredictionResistanceB.1 = e04a723492bce40cd453b3228f95d886e9dc897deacefd2f8b5addd72bc19cd51cce24acbbac04d9d313af2ae76a1f48
+Output.1 = d38cb09ef4ba8061a23a07822e8c1d2df640ed6723957caaf7eff4372918b2771074688b1677f4090c5d4fe4b436ea94151a9e6ba750d22c734e55b59f90113c
+Entropy.2 = ba0ba4105924fa7ff2a4196930751a9cd742dfb4ed6d0ccb2ea7944fc4df3c31dcc0ccabf62f745f6d4a9bdc8265cac7
+PersonalisationString.2 = 10df1343aa82eb965087659e341514fd531862181b544b0f1b2f8c54b5d77825fb1771d42a3470390712cd55a4a8d015
+EntropyPredictionResistanceA.2 = e2907dd73cedba983af3e1f35c0315dc383b61350dc8a258569566bd41337c460d69b43cc484efc67830d749219f0f5f
+EntropyPredictionResistanceB.2 = 2e9bca5e90417c993c1b88c011316027d5b1136ff1f89ff8d481a55431fb821f49b23cd80cd2ea283a16f2ddf99a423c
+Output.2 = a41cb4624f021047e6c84588cf8cecd7eba1f279400695fbe1ea3542d2229ceee4aac260749c77103e42435830128ad23cedd7e5eae786bb85c9b28fda4ecfd7
+Entropy.3 = 47774d9457ce21ed3ec5c6d3059bf11951ea02aa3e9fb330a14f11a4c4a414ae04dc4c715bd3a3a51c2e203c34a0d0cb
+PersonalisationString.3 = 1c6bcdd1b4ec2423b07bb3ececab2096025ba0aa35999eec4018d7aecfd697dde5d8f261cb5d2eb6ffad392dbd53c69e
+EntropyPredictionResistanceA.3 = dbba3e6b68728cc8b91c9c015bdb6836deaa91751c4beca39b50cd86a4611f85d6c8566fe173fee9115c5757bcb8fba5
+EntropyPredictionResistanceB.3 = 00bd93099a12c6f188de028709612a0250a55cf01ae1abe7ba7790079bdbd73815be055ca33702289afdd6ab7e36827e
+Output.3 = 62cc136683f3fa313f19d23e7cb3a2f3d26ca697195e0829ee7479351ace5ac5ded20dc7332d3486419e562aee1d5da8647ae835810dfbf77ba4ada1d5e31014
+Entropy.4 = 79dcb3dc67c771bbdfcd9a2cc76f796e2d2cbda558d7a4ec32832cc3a861395e3c47fda0ca584015f8a3b66d95929b00
+PersonalisationString.4 = b00514376f68a0959913370f46570602534d349bc709164ccfd0a2d69c1dc415a04375682bd22a6ec32946ecd5ae7a6d
+EntropyPredictionResistanceA.4 = a495bd953cb0d80a34534bef916b0a80e53b45643fb1e327cba027777196754022aff36c06b1f66a3e28655bad371d76
+EntropyPredictionResistanceB.4 = 7f738773e81a97f413dcab6073565076dbc1c4dc110abdcd9cb4a20da824fcb13bf88dbd51dff4e3cea3bb1c99d3774c
+Output.4 = 1f2de155a9a87eb9f7904308e700b78451377e933a9275d12d3667d402c6945995ee95a066c29c0f75e9addcf1a3562cc9355d318cbaa0fed52b4cf9cf7ba130
+Entropy.5 = c117b113c622e1d7b0a103ee27a7e4378b4129227fd742b967be5c4a0377a80021667ba0868338ffc01a9130826197ec
+PersonalisationString.5 = b96579227ced485282844ef272ef1a5571289524637153fd88070dedb650521a383155e2377518e5f09d9705604d6407
+EntropyPredictionResistanceA.5 = 159a817ca52bd8672b4f7676a6d94a6d36a088657256fd8e9a77053d65f3e04f9aabd28e8087f61c827798bf4a78b052
+EntropyPredictionResistanceB.5 = 6dfbdc58077797ce8e2ce7da56c079e263ac83e2549866b712c8288cff81651efca543c92c347634b1d76d5231ebe4d3
+Output.5 = 43d6742d0d87a8a356c75ba1a01cedc7ae609ae62b194967bf16b800fb661e539dfb99467b3ed64d0edc1ce85cd0748e915399d822cb96ed09e6b041b45788ce
+Entropy.6 = e4a3f183ceda04e8b4fd0dd06398c3927ca9501526044c6fb52e730643d06dd0605953c5a0495ad2292ddf6e1a3649b0
+PersonalisationString.6 = b64c4a06ea5bfe334229d79891284261fea805661bef9132449a08c9d848091221753c056e86248c0fce183a5b71f81a
+EntropyPredictionResistanceA.6 = 72dd27b9dcf3dc6c18c6b288d8788fb87aae0b4971ed78a52ee34983fa296aaa67e19e3bf45722eaf7df17a76f8c5d61
+EntropyPredictionResistanceB.6 = 20169d7ca0c602a432fecd65e367a740e0a54c9e919110776dc88e18df5c871073f1e24f10b9a85b6d56023acd7b6a48
+Output.6 = b2fea74f85721e90ac7e50499e5ceabb2525ff82feebd4c7a8e657447d318124177da6fd220378decdc510907b32bcd98b67d4f60ae7a8b29585e394c61cbd9b
+Entropy.7 = 33e37d7830dbbc422d5adc8f22acf420c645d29ede81e1bc0dc317f9c3bc85c4e49fec7ab1285920e4005d8a1198b85d
+PersonalisationString.7 = 4ed98aa524d9f7e03ec0ebc1491cad20ce283cd00f4188910a091d701b244cf52e1d6d15c98fb8089397a16e0aeaedf3
+EntropyPredictionResistanceA.7 = 9b0d1ca6e2bb51fa6d7fc5c4c6456fe995da400ec9b2bf7e656d77e1f9720647824a769ec9a2d8fa578412c8e8eb5583
+EntropyPredictionResistanceB.7 = 341978b553fa9bcd094a878c2bdc6469fe305b08a738bc3e00c6439d783e420ed98bf5f2e9caeb494a4e6e058f4ef793
+Output.7 = ee8233f7e5bd966665c6cba096d5ac8891f7f717e7cfba48b4943b2ca4d569a295058c945bec3ee6ac8add83d1c01f0f63fd92b8f86c4c0ade9273d6d91b7bdc
+Entropy.8 = 9b4d85bc90b2dbec3289b26c884e9f62d154f8fb3a148e3aa2ba7883e398d2b9b334c691dff83caa1d1ca183a0da5b55
+PersonalisationString.8 = 1e065e679d0bf9653486afbf6be20567affdf0b7c2dbb88e3857a27d8253ca81d5160d0aaf261d5cfd203b07f80f7f29
+EntropyPredictionResistanceA.8 = d37434fe63479be3119a66b892719129686fdb955de3f4576e77ef18edde48a48822b57bd931334f16183adf99b098f7
+EntropyPredictionResistanceB.8 = 2e6c9777194a0822249b39a43e5b9b9f112a2de34d8211fe712bb5fb3636bcf954e9a96ef50f47761b8512db234787bd
+Output.8 = 35a235c6a373e606747938c29b491aaaabaf9bcb32fc3d8f327a7c54a1d045360b5b2d80311e503191da521f7f774486dc5216242fc168468445c82a4b97d158
+Entropy.9 = a7f9e0496331222c7dfeed3d29f34ebb0f5e98b20ba7a56b3fc67d56525f9213c7ac910c83fde831ed059de82da61636
+PersonalisationString.9 = ce40114753088965a91b59458ffbab03df50d3ae724f7c015918876418c3adeedf4b28c53e3a4bfdafbfafdaa76bbede
+EntropyPredictionResistanceA.9 = 10482d238597af713133e7e80bea0df2e75a9582d0e94d09414d20f455d43def9bf5a2d1cdcfc1d2565ebaf7affddc98
+EntropyPredictionResistanceB.9 = 5352fae3ef8379e56673dcefb222346dbdaf0c85117564d1621ebd9b1e87a10e7cc732e7475d1842ca9b4b5a3cf1bc66
+Output.9 = 82c8c1cb19e92d9d62d6a9ab91003459e309a264e6718a4ec05ebbe9f21cad01ca99d1c9b1a35e9d385e03fba59622437368b748ea629149d50f9c6f481940fb
+Entropy.10 = 21f1b692b88320c116afe582603736d4cbf905fdc438d2ba9286fa7a8f274e52ba7c495a4fcb358678d9042dd776b029
+PersonalisationString.10 = ec29d77291695f9a52990b7c5444a73f50fb8e3b2cfc19b04ea2b0eb18caa28822c90c7f8d89b0ec114746a65cc1a9d7
+EntropyPredictionResistanceA.10 = 3efc6984b4fdf70c7afa6730dde7386106c7a6cfba3f9087bfb30e7d340af803fc33131a82577308b3a5746b25b44619
+EntropyPredictionResistanceB.10 = 357ef0f112e2df85ca17d9211ec0f5c8c3daa8e42246a3c7c823934d76c1fa88cd556c1b70e6f32ce86be89ea58e36ce
+Output.10 = 4cf166473fb975abecb60fb494a5fa5befcd48c65622dbf062833c2504476b8e6a50b2665b6c0aa5c52f554a8a4f3f5e4e526717917282f38962d7dd40120664
+Entropy.11 = 82dec2569f6c43085fc6ecb6967cfe497c89fd0041c387c682b983280032f3e561e43f7098771bcd3c598ef9b723d7f2
+PersonalisationString.11 = b097184d446f80dbdd3335378b3fb0a55dc8da9b79e02dfe4643c53692109080331831f403b5c08e0c55e1cd19883526
+EntropyPredictionResistanceA.11 = cfcddb274f2e4693d4694a24114a7431bee696f9451b685a605ae6cf0da695b0da171d704fde77644a2277ca9350f8d5
+EntropyPredictionResistanceB.11 = 42544ce3199330f06c2fc7da7aacdb57a1651451709f5da0398522c2e6201ca5d63bdb18de59b44773a1d924ae467255
+Output.11 = 3f029e22b1a353804611f5a0f706f410d93d78588fa53a6a29fdb8cdc84795baf4dea71dea196db4b9bc47257b59ca954a6de230e8dfd18b4791b3fda5b9a5dc
+Entropy.12 = 5bf2332a91d8d87f3534330f466104d8f49fb27047354130637f2042584a389ecb4ccf3fd9545f1123ab6aa9abe21e22
+PersonalisationString.12 = cc3cade1f3979e5c6b4c92030c7c216c91d9c11d958b4cc94a63ccb697a3873121cb4c2dc8d8c845aa94a03f504c1983
+EntropyPredictionResistanceA.12 = 2878e824d4731400674361a4ac3a46ab68ae35d2a9336af83f8e4cb1d0f0b79a3829f44c2072e5336a862da8109c5799
+EntropyPredictionResistanceB.12 = 0617b15f8d045f48c4470d847490d18f3685af6b1fb5ea551b318b8b98fa803c0500ec7493e3ae0a7cb981d12ed01c98
+Output.12 = 3385a9126955135b44c67196c014b2c94918657136ba238651b51f20f111f50f78c7c981e9270bf0404202829543f379211d14a1466ca423ef9c1f7a79943384
+Entropy.13 = ac84b5efb91576993ff0b90734812a1af52b641d55b93c5778c9c2af1640359074f09391fffde178bd86e3a9f5917411
+PersonalisationString.13 = 357d8faa62a3f17e2fe7ae2c6832b7bd10218f54afc10f9b807a3c063d78a29d39d0f33f22263418e319badbd86f722c
+EntropyPredictionResistanceA.13 = 46cb618d2a74efdc96c3aec3632b1ce34a95f463762efe69ffdac2c7989c9778ce01397318197764c36427ce4c2f3214
+EntropyPredictionResistanceB.13 = a2c49a270fe09f2363530b8cbd56b58107daedb7e07929c5cb83f92d5c8d3fffbfdf2ef881974d5aab938c927ffa191f
+Output.13 = 759b3d8d0936574d5a72cb39fa554c12cfe079c24053902ecf2549d31f5f0bc17249789bc12d06b83454fe308d2c3bd95ddaf696713c24b963f3cb8d4878c65d
+Entropy.14 = 50f411d6b8a7372e0347ba97c7dc1ffee0d1a66cea66cb1582d5f9753c09e25c002769a0e606cbda10d0623b921a9e7d
+PersonalisationString.14 = 88e9cd419dac6ec0f1b1e32e71267e37ac038adfbe18bceb50285644b29636ad06d85d7a6f497815cc6be43b032c9c63
+EntropyPredictionResistanceA.14 = 83acc7bc2f89de95c84a4450d509e7de3512ad839f832ba0be8c06f36d71e766d20cf68dbada3dba0b37999c1083faac
+EntropyPredictionResistanceB.14 = 95a26a2f946c03f51012bc6cda0797af89a8500394cc7f11866a861608eb97fcd2e37df3f681dc3c1b3f48bdeae119cd
+Output.14 = a7b6c0c8bebd7eca9357a2be02063a603c103d68a793e792497ecf66592835f1f9607dae7b98be1049514ec5ea4cdd0b41d5cbf986a3a04314515b341f0924ab
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 1a14180450422b6d0e93b82551808212d8308bc754d475316642df73f9ba40ae666e1f60f13abe7cabd70743d892bd1d
+PersonalisationString.0 = 91b77d4892eeacf6e2e8b00aecd4a3db71831d07ecb46f912dc855008b79d9aa33129baab90ab14a6783710bc7a0222a
+AdditionalInputA.0 = 0423f86eeb37dfa550466a2145fe39fc65fab82cd7961d73c999a4a2039b1e51216af4b26d28a3aa28c0cbb10bc3806b
+EntropyPredictionResistanceA.0 = 2eb5cd196ce8a5f9de595c17bd2b13fc30d6a68d5e61d4ac066128a7ec557cab059a65185d13b8d160601ae8cc8e9d0e
+AdditionalInputB.0 = 70015cd3a76c6f85d2553046c47af687d728f3c64ee4d31e5aa8d75a77e9129bb775560cc185f56913d5a04f233116ff
+EntropyPredictionResistanceB.0 = aa96cd7bb43b47a1c2558dc41eef42ae62b7c136b40ed2da1e621a68c8734c288890dbb943dadc7d7f564ef2de310eb2
+Output.0 = 0a4f4ea035975e1e32c7a7a01f81cca326a1fe01491e830ea2c1e557c374e90d8bccb7d97f238969d116ad04cad9f8142f90df5ce4e7067e0f3a7d6678ee9f6f
+Entropy.1 = d960094fcdabac3bcea63a8df8127a9b061977fa05e5f54167a1971983554b68fc106feafafe43f519304475aa0edbe8
+PersonalisationString.1 = 741996f8fb1e6bc0bc11147d97766cf104b8f11758bc216cfa46648a32e3278742362f3375755ce10cf9460f7d3d5937
+AdditionalInputA.1 = 674ed4171db10d6efa452d0aed6f7dd63a5c2f1834fbf76bd0e5e40e4a9d38bb3f77a7cc8ab36eee7817a011d31e03ec
+EntropyPredictionResistanceA.1 = 4fb2c58d33f07de4c46b40b14291397576f16c631e6bc3d2bbb21324293969547cc05eb5390e8a46cf3761b93d878af9
+AdditionalInputB.1 = 2371d14192ed934cbffc32ea3822057e31f6915693ac8f480b1a8ee202f083cabb7148fcc7049b95d1e6e6f78100fbc2
+EntropyPredictionResistanceB.1 = f0282141befd068851de415525d063f0194fa6b184a2bc207eae070ce26cdf71407e54f19c18395f618178e913a1ebd0
+Output.1 = 1df9c394d6ef12cb7d967b19c6fc7d580bbbcbdba0c4982bf33436707c49c133b2b36993dd52c1a0932df4cad0dd151d179ec2e38bd9d6fa0b9e844c20d1bf6e
+Entropy.2 = d94bc20a41c81620b6cb2e465ab0f377d74ba227b2d1e749834be5bbfb732d15e7603c7d6bfde433330f7213e4ef391b
+PersonalisationString.2 = a11f42fbd35f235a47e0b6e85ea098d20e11399ef197c6217fe8219d56efb30a2f894348394b59667838a9959b0d1c53
+AdditionalInputA.2 = 7246e29c80b4921488c932c25ba4d4b8abd727ab48a2c9bdf7df5d71cb75c96ce26d5ced5cc9b2ab9e05a449907b0aa8
+EntropyPredictionResistanceA.2 = 5acfdb10be57995fda42f1fcd5d41104797ac4afd0f5739086e7c13a1151bf0fe27c193eeb897dcf11bbfb52c83c2978
+AdditionalInputB.2 = 251cfce3da6a3b2be58145d85d6467fedf9c2059e86654c0605f0369a7f83831049596af6d9afd17a339cb734ddc9c78
+EntropyPredictionResistanceB.2 = f04ea52c36c44f08517c37f06d4507a697c505913dd6d4e018d324908c4b4126e0847e1e890cf1489bb2ef25d0034147
+Output.2 = b894dec66bc20d7f97bfd8a94a172f5784316f1840894ad532ff43eff88c79a41f0cea61e113c13295293a6ee179dcb22fbc1fc8397f3fffb31e7a84c911c2a6
+Entropy.3 = 90052c673cee9677058621242d08de8646b16fdc1d77737b6e017926b422ddb9c383846db87dde0ddfd0d70bd5547e60
+PersonalisationString.3 = b348f37a3f073fa2f95932929ed9340a24e581f350914a9c83a24134525d70c088ae1f75b70b6ccc1e5360d0da0752ac
+AdditionalInputA.3 = a9bb395ef69e9f025065caca0af78422ed2986e4e975d2eac5aceda361a0888f1dede1e54a23564d25456db18ea1085b
+EntropyPredictionResistanceA.3 = 2161d5bab55c74297566a398fe715c8c8e8e43ce2b71a49d3800f4e6f7513a0ad474eb1af841d5cd6990b9470dca5743
+AdditionalInputB.3 = 4e0c5e9e5eab36fe78d42c058ef4deba19a94f8702bceeb663075a7d84069c50eb23976e05b7da7c7f55fd727389397f
+EntropyPredictionResistanceB.3 = 72ae29903bf0731a3d41a39e63fc7a571ea99cd679a904f60dd35728d141c3385dff0965e1a56cd57b7190c0112b70be
+Output.3 = 9bf49683319664b003f26028bbc72b3dc607d8a3088aa78dd8dc238feb79433b83f1c9ae1190c270ab43a39d1ad3422a8004a8033c58f84467c028aeb8eaba19
+Entropy.4 = 693c3d21cc3d38684c1e52feb24c84d5444b3fbab569a074d8e25561e079eb73c192e1acb62b8dcff5370139a4af2f14
+PersonalisationString.4 = 9c1a1313fb5a0648b58527ac2dd5079c47096845602f48ae3d04f668e27b94b44ffc74e4cd77d370c204f0e6f87047b7
+AdditionalInputA.4 = 40106bd9953a55cec40f6abc9f75b8f41b50f0dffba517a455ecd605c3d39903c359d2aaeb417fb007e8d451028444b3
+EntropyPredictionResistanceA.4 = 4a6197ccae24ed98932602376174b2235bcd10f6b4f886e3d6d2d6ec5335b3d7096c75e18a18657e3e1432d17eb599c7
+AdditionalInputB.4 = 5fffe4b65f762efde7a4396f2994e84fc9905992f10d3add5e320231bec0ec6bd50e27d2498d9f443f164d7cd68fe6a4
+EntropyPredictionResistanceB.4 = 96e04af5e244158458bacce445b399b47e735c141fc1d5e5b2dea049d8ea054ec7e1b6ed034b26d0b0de20b91fd32c4a
+Output.4 = 43ea897cf111e8c5c58a553a231890fd913401bebce2edc76afe97cedc6806f6013d57e8e6a79a930a2e94c2590a5cf57d9b7d2b86fec8d6f4692cd622db99dd
+Entropy.5 = 8a0bf58072aeb8a375237a29a0e3f78a562d782a5ed383321d65a3a8f93f501d701e71694e79fa19d7e74a2f64d5cfc8
+PersonalisationString.5 = 830679998e195555ba07c7d1c70c92e065fca26e156d6942046a27097335f69ff0439bc61e89349996c9e3a1981553d3
+AdditionalInputA.5 = a168e128c6ee0b99ae805ec0e59d0b22e89cde188e9456a5ded3bbac3f8c55559c47b25a6b613628a3f24de8f50e40f1
+EntropyPredictionResistanceA.5 = 16ad3e4f8d8a63716dfede562762e770d96625477bcc87d4cbc069345de9df5d74f458d760292c201db65ed6e4637519
+AdditionalInputB.5 = fd425dbd14f38a30c6510d308b071a4e14425966bff6c2c8f047ae4be729b7405617131896f353674e6d092d5e2b74c1
+EntropyPredictionResistanceB.5 = 4bacc300ec2ae6fe445715eff28de681e16f63f18481af433669cfd2e0534ea4747e7b0cfc3f727e1938abf2771fab69
+Output.5 = 2cc09932ca24dd7c419f374cc36216390d93879d85dd962a5a21236e231c4ec16e44ecdbf2d44f3faac75c494c039a384d069df4e1e93b3af20460ac66525fd0
+Entropy.6 = a6358c87621e63dae3ac3f953db0ccb9dbc1d046c99c7dd07ef91c6c2fd230a9f1bca5fc2866016085c26ccb5b28715a
+PersonalisationString.6 = 1074e6eb187d40861297d9e5c0b3b49d66c8d69e95da896b679ee9246142fbf48c35b1d7e73931ed0b6e2a3b6967e800
+AdditionalInputA.6 = 1904c3c9395f424224989e8a3183c90dbaf9735fc522fe4e445ca4d590d253edc47b21a14bf630a763759ef76fbe6615
+EntropyPredictionResistanceA.6 = 131c194ee4a3bba48dedd5b83bfc82d172db75e2198e76c728e04fc8ab323ceda2c32d447853f6bf7777d559d33504bd
+AdditionalInputB.6 = 8b3af5b4d4dc9bfb245ceb92d6a8449c37aa6fdf461d0a90d25462a866ac3e33f564b883a58f0d12152b42359e94408d
+EntropyPredictionResistanceB.6 = e0397dd233745d7192467d925f582ec88e80880f2d966f6a40892ee67a90789147e3dc7ee90c027c2bfa3e9b69b0d70c
+Output.6 = e8609cd93c5dfb117111528ffbdf0e67f474994ef9161cf7f8449ca3c59c8b5c2d5fe5ea7040587f36c85d234b4c8ca7a72ef7ccbb6ce87ccf15c44cb2345bb4
+Entropy.7 = 03393b093e1ee6edc0d53adc569e9417d4ac423635671ef363e365b1c7c128b1f443338d8f6aa2542eedceb901e298d6
+PersonalisationString.7 = 430a7b2f49c93d47faa2c50df73ea40c318e8179e1cd61ca2b59820d1c8b6afea91d4912945337576466b8a20d5dd92c
+AdditionalInputA.7 = c0d2f22c6934ca8cba67d1e3fb5456413202a3fe5f1e6264afc28c488948f49ea643882147326ef85b3dfa7292952f15
+EntropyPredictionResistanceA.7 = 387fd656ea9b0d4fea5e251c0d8f49effb05b95acc02f41bbb3e83d00bf70133ba47cfb609f68d17465ffecedb46508e
+AdditionalInputB.7 = f0bf5f12e188ac6a8e7b16bacd71042b9c985b3767c73563d912fa263d2dc097ddabb56e767081a808ef5b57715fe086
+EntropyPredictionResistanceB.7 = a0b43bffba6708919002ab0a338f05be44858fc5201d54b99b539c2240316dd3bc06cf4010dd4c6eef2c2d5e3bfb3058
+Output.7 = 9b89212f5ebbb81eda3a5e26b93f79fa96c1a90ac5ac35d1890b76f2a5a9dfa9843d6132497ecbdf48d71e17de05c8b396e6c71b822f530a5e6de215bb08f31d
+Entropy.8 = 58a19666b7baea18affe534a3aa3d7d52e605d5ef59017fdf9cb36b82f77f7f11b527de2d8ffa1cfd901017cea67107f
+PersonalisationString.8 = fe303b77b53317aeca6192a18c3d1ade2004175ca6efb27591530679a1ebbd5da77061c2a090a7dcb61e644f126ef14c
+AdditionalInputA.8 = 166fde12dd63a1cf861db00ebab1283333579aeb9ce1d59fd35522ebc59eec2b488af73942a55ebba7200508d1c76eee
+EntropyPredictionResistanceA.8 = 15f1a8c26da171149ee50289cbb8499ec379dadd6f269d2325019512cccbd2b0a91e1c44d93875bf64b6d34877785ad5
+AdditionalInputB.8 = bd087ed23e1ccad09af9e37264cafa637d8c7401cefacdaf1a785f6fc63f609c49bec492bd676e95692bd659627ade6e
+EntropyPredictionResistanceB.8 = e93fb6e78a076c597e03b34513ca188084051f07573cdfad4743b63203b9f3cb6e3306696c17c7d0cd86a2babb0724c3
+Output.8 = 7f59f250d3accb4c46cd60a84cc4d79391264880a9a17aa54cd1af2a68b1decf83fd619c4f39285854be3e000cba4a92a38a8f581301137aae05630f20bc71a4
+Entropy.9 = b3b1cb2284294362d2f8cf7ee1c072876d7b941db3b6e151c72c11c25aa6c06be83a3867e9a50ee7ff5e7176e7d24e3c
+PersonalisationString.9 = a79d067feacd6cb74d1f133dbb6bfbea382b1e02e835e1f3953b3d2c28b48741682682be0a664b9c3b6fef8a619579b8
+AdditionalInputA.9 = e44dfdad93c9c5925042bc5cfbcb618541252384a39731202774e75efc6d7f43fe54b451768bf984bbd1ad7c0594a0ec
+EntropyPredictionResistanceA.9 = 761241750ba9a8cfa8328f02ec32ab025a97478db995f8427e44fdb73226a7057bdd363325ced3770574bd4563f17648
+AdditionalInputB.9 = 4cbf9ecb040d0d8221f56e9abf623c022ceaded72f2016484553068f8422daed3737310d951d9c240800a36f91acc537
+EntropyPredictionResistanceB.9 = 623e951b8405aaf8b7686789e013472d6093e82fc3cc920d603864ad490f071b6a69375ccb771291458259108809e5bd
+Output.9 = f08f1ce19ec5762b4ff4058df7016bd89c6f088210327b1948f79b2453981c1759d7c370f2f62474711ff4ef9537672e99979c78b1e579a50b0e719724ce83c2
+Entropy.10 = 4ecadab4000961d14900137556982a81d470897213a6d8af1ff92e47c9f0cd10dd568f865b08bb896b80a9145121abf9
+PersonalisationString.10 = 0013e69ac5478fc927795fb70f8d6000afed4a0e4d2d826a3715990e3ab4ad2befb4425f57eff82194fce65abd6d6c1a
+AdditionalInputA.10 = ab0393176fb0128e6df6308d817b0c007a95b4b8c82719ef7514c61e4c222b36ef80fcf0b52a7110cb9ce18d8a7572ab
+EntropyPredictionResistanceA.10 = 3b506d96f80ecad2ee86f9f3990831e40bfa5753c9125c6abe36ce53449ee3b1913df1612056042a304bf732b9768080
+AdditionalInputB.10 = 52934ce7b59c85eec98d8046286a754a7e8bb182d1bec3b2958ca692a60ee924bea0d776379508f2005afec9468a8c7d
+EntropyPredictionResistanceB.10 = be5d50e0db9a343c2dedbc55b43e29b898cf7ef60441c99a06634667b68104900c3a99a1dc670f71a465e7b716eca43e
+Output.10 = 4ff5007e859de92268bc2dc68f77887d4dc54c7b28f5308ffaac553c57de5f2898eee3696d30044dc1931832bdf35961bdec100bc9909b4324ca81398fef04ad
+Entropy.11 = dba36d56ec5a529d11476f0a0119368eb05a76e40962de67973a637bc4c4b7d28e243a10cad668458189e12fe8e8f4c6
+PersonalisationString.11 = 45a8c63de263f6498c544a4363c5718dbb06c497d1537b264fd1af483da0ccd55a4e9f542889a34683577ab93a2a6943
+AdditionalInputA.11 = cf61f9167d152be5ff205f24c734c5ab2b1220e6344c98cfaf7069d2954451e727ad5045080612248e3e7d4bac696688
+EntropyPredictionResistanceA.11 = a8ec5cdca01e6650fde40763f70cfe73647d4708bb33e1b1ad0f9cf626105fe45cd7a5eb9e157d83b1cd776949329688
+AdditionalInputB.11 = 30c3d649b5617f02e7c4c0f55e4a78d0c463ab50466d82090e35a7bf4212c727fbdaa8dda8be6a7a817e5299d4426255
+EntropyPredictionResistanceB.11 = 1fba4de2c0e8a28700d1f8b0333e36a62c21e917073a7ade4b6bf0f51922662411d472f9455f4933a563b21c2417c11b
+Output.11 = 5eb915385c99654a2c53768f1efc76a297422b42537ed97d08d474240acda2a8f5968c25eeb298a7c2f8e7e6c2a98e56083cfff45e4017e0aed74d199b9f304c
+Entropy.12 = 11e97d87ae28a7f2a8d3c0c6e724ab964bfc7d4b578fcd69c7b3d663164c5683f6c2b5a5f46e439f747108c675dcdc86
+PersonalisationString.12 = 7f816490396131c81712a32135fc59a9a86024b63668aa1398eb29b0dc0efe4d46aff021ab38664f7971efc5a608005d
+AdditionalInputA.12 = 9e2d5b7af17fd6a11e91978bed43380168b3481f2f3c5f95154fd136cd4c14ce4853c3faea9fbcf89e67382962f9b21b
+EntropyPredictionResistanceA.12 = 9042ecb86d467dbb96acbfdb76840d5d8685158dc8d18096849c301a9c8cbbbb94dc3d8713e20e4cbd7cbd48b044a5c9
+AdditionalInputB.12 = 5c9b36525accbab8741636b42e53f5b3ffcc015c905b9010d03287389d3b1a44acfb1c43f245b07798fae33dc0959215
+EntropyPredictionResistanceB.12 = 73f3c8a11cf22f9ec39796a8b0ddc2df7087468bce2a596dd85aa9499c49599645e0fe969cdedf92619211d5ace554f6
+Output.12 = 9b3332b26d4b66aabf783cc464e10f17eed00e10fb2ff4e006784517ba6f366f3ab362b46a07e9a01a9138c0d730a487292e67e2d63360d3c492cc2b2b9ef3ed
+Entropy.13 = de5f3429bb76fc13318bc83ed536f4a14f1e0106989472de31e9aa23429588d8f5148ce54e55ac09d2bc3f3bd3ed19cc
+PersonalisationString.13 = aa57812b4098d10bfa1fe16b1d4edfd8133ecaf22dcc01b0a09e8278a4d4ba58e585bd0cfe38e8584dd19c26a65ec72b
+AdditionalInputA.13 = 6279cd1ce94b50146041019989847e00e112fecc3349593795699c92f570e5a8d5d64efb2866d490ca15a9dd25f45a56
+EntropyPredictionResistanceA.13 = 96a89d6668c3def503c953df3d00729cd0dec2191c6a2d19d9420b001ea4025aeece04c894497a6d5c16902ea8042458
+AdditionalInputB.13 = 486e8491bead7840504043d4cb6cd67a46af40f40243a5ef1030b35e98c8e470f6c2213443bfbec2c22296a5b44d9ab2
+EntropyPredictionResistanceB.13 = 2718d59d957393a610ef7a9f564b59be1281b7325907c0574f19324d61cd687a50dc1658debdca37cd76d490a431ae95
+Output.13 = e3aa10d085d6c910c177fb22ba5e49c3a5f174b56f07dfa58fd315067185b5be37ffbc2d993d39bcb228f11f5dd63d8ab9721744d9474693bd9b51789ebe4f89
+Entropy.14 = 9315155664075b4bcffe5d8970c6e8e8b3bc5c7feafa7cc828a685ad56cfc0d9ada05e12ab67695bf27fba3cd7e2cc00
+PersonalisationString.14 = a691c12cc322e2c53ffcd32c8b1bbaa543a8e6f97b90a45cf7d743d29ed7a53ad209e0f22ad8a86a8fb59f6df242aea6
+AdditionalInputA.14 = 555545798cd07645e7470d4a8d43cfbd32288852329af2c76f2a7d2fd53cc63e4344e80d54917f4e9a4cd21e60074e9a
+EntropyPredictionResistanceA.14 = cac1bd62b1b78102c1cdab6db5bd31bc6f913d7a91b02d41a8a0fea48ce28ccfdd40181302e7998435650b3f043df6a1
+AdditionalInputB.14 = c0e16d4fc85cfb1c3a4f69806041c5a270d4af742292dcebeccba75e1ba0bf749c5ea6bccfbe0eddc839faefddd5463d
+EntropyPredictionResistanceB.14 = a52c99a12f63c6ae4bc101ff221d7fd1b4dd79df76e38992ba3fdf380bdbad5e6aa15d0ab638e90874d81bdb2e983aba
+Output.14 = e728957b292565f906de0cee5bf91fbe2e189857ca5d5efefb5953a8e9f46630756ea01abf8e6fc499bc8e2e5c29c62669bc07ccfbdc7951215f8ba7f1bc815e
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = d95955487e7881b8aa88fea0e11055fcbbf03f6adcd93d424d68cc4301fb387f14b8806052c19a6f33c060227b96f955
+EntropyPredictionResistanceA.0 = f4eb9557991d979c8598dad119f7297a1a05e63b0c30987a5b59c43d2e51bfbeb25a02ff776ece9270930ac61c81b2dc
+EntropyPredictionResistanceB.0 = 332de58b15837574242c4e63991792f005307d5ef637670e2300735f8ce62f0a2e8c4cea2df0588f7c357c3b7f24c2c2
+Output.0 = 27487a3d3d6e930feb0b33832ddb49146852fa41fdba4b562be99ba4f267f5cf9e47978f0519cef69989c2ef522b5ec6a7591db76ef5fb220080a1c1d6352ef1
+Entropy.1 = 3c5ed0d24dfe7f93775a0c86168fbe95e430f058f39eac982e2674ca1cb29a59acbe7eff55403752304ebf24cd9d799b
+EntropyPredictionResistanceA.1 = 0cb1814258f2e90046a57cf260588bd41659985b2d0ad26554afbdba2cb988b863267c54a5e186b667dc8d35c59a9e92
+EntropyPredictionResistanceB.1 = 36624be55f0b7b17969e261d3433be03d89d7a72aa5eb8534b702cdb137a4646776a5cc38ed0c7d33c823af51b678b37
+Output.1 = 5e991f9753bac9ebe80512cf2d3e016ddd936c6cfe2b8b8e7aa32d0ca6ab8859a6636dd340e7fd0fe72f2459b3e2f5667ecda1964ad14b2219ad36236a191764
+Entropy.2 = b0260e71e13bb57489da60cfbe284274389f646fe73c9d34bc7a9e771597d720a6082c4d332e8a4d895bed376271b95c
+EntropyPredictionResistanceA.2 = 1ede96ad129fe8f9573d800073af27a175ee8ed394924f48a6d1b4e764faf901f8f7cda4b2bd68254a052b84225c551a
+EntropyPredictionResistanceB.2 = fe4f28be8a081db78a7b9a101568ec322ba6af36b142a9801da080314d3a3791efc22b663a0f2083889cb1d8c8b28d40
+Output.2 = cd70ac41b8c3d9254dc6d716ebd52a2675ad56b9dec51bc1f3d108709e828a99fa6342adda75505b3048a36581b0a9c2ee028d2325b2bd030293031b446ad351
+Entropy.3 = 40c9298e347d8fa0a59213f57fc50c93e794a1ef76ca19933237e2d9460ed331dfe76071373ddba55725a42dd0651787
+EntropyPredictionResistanceA.3 = 0c5a6be5759cda7cfe29e641d5ce6b87e39b2e042193a0f6cc093847c5fecc3a3a9a5ddfa695c48cad2b48fa753d23a1
+EntropyPredictionResistanceB.3 = 7d095b258fcc777b208a06fd7211e1b587b49e0575bac86110159cf3bbf44bff77173cbd216b22ba6dcf45e4d9490ecb
+Output.3 = 3e7cd48f6e440950131e4daf3230a96d84f5c1f4d50f473adf360e28e76cd81c58a253e668dd6426f7ae6382ceaff201f529c0aa2002252bff49fa02f03bcf00
+Entropy.4 = c036e8f5112af5b948b19d7ea927899b009d46ad378b075b6d5c13d5b4f934d7b32c18fb672b3859b95d88a8f995892b
+EntropyPredictionResistanceA.4 = 883796235658bedc4575c29590c26d41626720167539e9408a7d8f883c066e800370592525d0e2fe615e44d9ce40dba3
+EntropyPredictionResistanceB.4 = 8e0ae3395ad947a79a96758a16fa2a0996ea2cd4a6a1af5c367f2c1aa483911a2013a46a53db41ba3f6d41b15d2e506f
+Output.4 = 89f13e88fa0cfece3c724d9693daa06e3e928dc36bfccc3e0ee19c9057e8b321f0d9ad2e201ab0745c5a5998f0703e0d05ff35db4a58bf4a874dcabf199a8ba9
+Entropy.5 = afb7e9b182abb250a6435758fa6a2465604e82a00305c157acc1db3d38c694680fdd661fb1933e7cbe14b399ecbbc04b
+EntropyPredictionResistanceA.5 = d68bbcce22d7d020e09a08ac8ea89308fbbb5bee95f7a8bd0a1c7123507e9cc6ddf9686dd84dd2ecc11fcb1810dfca31
+EntropyPredictionResistanceB.5 = bcc4e36a2b5df549b72a3110dbbb9ff8ed6ce94f4a904c29395859022385bf1bd58285eba073f0b4449d4ec340caed28
+Output.5 = e61e93670383483a5635deb9a54ec579beefa87282ae8ae51d99e20990ed157b0c5faf1da1de4a3ae35a11710f527cba4c9acc1a5bb0b6df195b3d6c053b783b
+Entropy.6 = 4c13dc39392df5aa4fdd0e95222d850a539349c4a01dd2a982611f772e6089e47a812cb0880ceee99db082800421bcbb
+EntropyPredictionResistanceA.6 = d9cc8385814131ab94a29ad84589c3fcd5a7e46456cd9da2255a43630c95c7691de02d8a990d068763e7a99660d2dc0c
+EntropyPredictionResistanceB.6 = a5ec6def288d07399c49339f520cb50140e00ba13968a7e26c9ae2a35de276ff4419944f660f8e3569b119b22c972817
+Output.6 = e025aaaae2b389ac1e6ed385e1f8bff72dd6ebddf93e7a9625a7a103db83c4d497ed8dd09ee93c4fa57bd7d9586b69657849af7d72bfc44fd165e4b54eb16985
+Entropy.7 = 5f3ee80de8cbd8c3b96b814b5e56df17cc02c726c40846c12003c6969f58b3434ecc4fa6dc02c91fe6cb4e905543a026
+EntropyPredictionResistanceA.7 = a18d63f14f20adf234d61b4f5d6d49b9c29a3e03ae4cf7e94c734bc4087984f825ed83293f6608d69b26423bd552d9e5
+EntropyPredictionResistanceB.7 = 22b7a4e3e822aa3acb90028548a177efa284e5f09ed323eb931255129f7143b099d1238a75b4b30b4a47d0f4f5db6f1c
+Output.7 = aa584e4e41f02aec124647b845e44a3e2381d4dff11ae705de9481c3bc28fbb7d0cc5232cb9a80d1556f24bc25e12e054ccddbab15bda116525de380e8c2b86c
+Entropy.8 = 5d45b6965138ded7aeea9faf035d02900652ce21cc84e55243bac225c8fad35eb4d733f6aa30c7ed3544f085b9217a20
+EntropyPredictionResistanceA.8 = 4f5a2826e5b1852fa2e5f81c7060f7b513b578aeb542cca8a919779369dcebb13da5234cc83a69a557d37fe1fec52e25
+EntropyPredictionResistanceB.8 = 839d5e4a33d007d26b322dd370d2e0d45073b9da1b56cabbc9eb1f79c517ba4e3b2e900541029c9f3caa5b6f8d38a540
+Output.8 = ae0511f3f600106fa6a88f1becdac08c59d7d32e962618d0b794ba1328825740c33f80eb5764f84e8c1801422834dccbc04c0a5e85eae7030603ed5340d9f73f
+Entropy.9 = 40b90c3d814b256fdd99c5ce2eeb376248aba29a87e553d63e4cf0dcbfc265d930c565e34f967eb2eabbd6c44bbca5f3
+EntropyPredictionResistanceA.9 = 974db61efa36a1ab6a6003eedff8eebb32bf211c66f6b2504ca291c7f1ecc3e96db51347f54ed5a69f530e6b6da95adb
+EntropyPredictionResistanceB.9 = 3631ec5e08384ea5f60c5ae5de95bae2cb2280e0fac0823b49cd74d5f3ddb8802ed884fb642777d9cebfb4fdaba6bc00
+Output.9 = 94a27e443a837d43771bc3f0cd328a52610fc7194be8f0eea2024b88bb10b33f1b88a1c33d01966dd645940a95dc3942b52d97847ac67e4e6652ba9d0d778a52
+Entropy.10 = cd7d71822d450e604b1c3e8b9d77a2ae719edda775bfcf8d99c2f037d6679c9a789586d3679dc8ffde43f18fa2ceb0d2
+EntropyPredictionResistanceA.10 = b2b29355bdcc1c7c70cddf0bb339fb6927c70a5f0e067b2359fd135fa55fd029fd658e23caf1572f61b751e4b9f70011
+EntropyPredictionResistanceB.10 = 11d359098fa7ccb75decc1bbaa7db07d91ea15dc7bdc609e032c3f2022daff83573ee7295b6e548497f89123b8cba383
+Output.10 = 33aca77b2eee07b1d099784dc7f6557ae4a3a51cdd63c92e54762eb141e09cabdd0fa0954e2718537461502a629db639be6508fe89045e3231111e6685b1b1f1
+Entropy.11 = a30602e6823f262fe5eb557c046e99d91cedf2850e8a5bd45af6f206450bacf6da8f668f1bda91eaa3db8f91253f91bb
+EntropyPredictionResistanceA.11 = 73a8239d8379311998d4b628d5b5d0df0400328cffb124c17fb5fa1a01fc744add87ce250c0f0894f6fde778e4b7dc1a
+EntropyPredictionResistanceB.11 = 26a2cc7c29987f8f792b29c0c61b3edef994bb9b0acb1282a9fc03a54c114b0559894cf2aa25f40c3ddd066d8048da28
+Output.11 = d4ec8d8051f44285c0138019d6acdc29584f467b9074ac98031d68e018cbcfb48f74c8435059c29459fcd81aed04769a5c681b2be4b8690ca29c743a47898714
+Entropy.12 = 92f07f2ee3ecfc8d39d6a254c25c94112045d6df478ce7e97a885ccbf47081e7bd1a4757017abfd2c213b0748fc55e56
+EntropyPredictionResistanceA.12 = 5c0531ed53ff4c86d0cc834f697e5366f70e402723b6dc79c426d737d6c0af53b8db25fe6568ecd19a88e6b6c0e68200
+EntropyPredictionResistanceB.12 = fec9e03f1f336f6e2947a62dd51c6ea5f4339b36bc408268340fa345c57ef2307329babf701588cd0e1d7fc3bcd03c6f
+Output.12 = be81bfc300d540c94dc787319544a1af36ecd59566b1991d8a06bc13ecb6832a6ed8308168f10abbc5c807b624eff924a938eab7fee253724f3c0ee479fff944
+Entropy.13 = f6f55cc1299068cf74696052a78444b5298672cbaa63c0b9121552e467e5d566ece33e5f9223558fe7b38778cb70e8e5
+EntropyPredictionResistanceA.13 = 0aa7b033a532f13bf7951a4570408d3715c325a52564747dc7d2a7b4de0de6e6aafaf4f4bc7d91c62f51db1af45dde36
+EntropyPredictionResistanceB.13 = a79bfdc24d9df8ce3944dd413edb610bda6457830bfb8cb076cb2b89bbb8c1abf29e2f3a2ead4e1e60cd07b498d90e08
+Output.13 = 04b92ee2d09ed0f588490324eeac4a20351ff910952a8dd9d2adcb993aa75734694836f9ff9df0073e8cd31aff91f05dbf34d4af0ed35f97ac1eb5837f8f7186
+Entropy.14 = 4a00fb6b1e5863539c8717d3c639c7bafa81ac37408a5ae3e87a797e86de90a30f74d34eaac9bb80fc6accf762e99222
+EntropyPredictionResistanceA.14 = cd66ebf08c99f9c04c1effc078717b4f24422f111591a0dad2ac9371d3a7c1cb3dbf664ad44ca2b08c83239747a148fd
+EntropyPredictionResistanceB.14 = 60c6f9f07f75f1a80188b32d07c2895872c4e8b92a19ac6c2a29bc807f99fb4af75b6aed8e6f75c9a6b1559b48f128e9
+Output.14 = 2d20709ea0ff7a624ea1e37d80c65c25eaed85af45ef1a092ea7b97c49c912a0f0fc62d29ff4e4182c6bb12676cab3711c2b8db265cd9f81569a300b99fac43e
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 93e6d28fb576ba5b816a5f42a7ce8d19465d47aabc94a7b77c71e29d95f3a510c1c762ffbd29fc200cb680529d3c8fd4
+AdditionalInputA.0 = a000a75a90326e9f94e3c894548bacab5d9e69dec8e60992e197460f9c5aa2a69ac8d81330230b90b3a90fbfac6d13a1
+EntropyPredictionResistanceA.0 = 9eddbcec301b2fb9cf57efcc581ef776fcd26403d0a9b64f205f6a9f60b763d2999a5a993674fa664bb2af5f8ddea1d7
+AdditionalInputB.0 = 4a671c94bb877bdb386ebf5d8f29b6067c79c56a280c334ad204490d3927c09866bf949a8d2d8c178be751854a6a7a8c
+EntropyPredictionResistanceB.0 = 4c26cbe440d48414ca4dc40321376646e42fa4139a4b1eaae3acd9f7dca094bccd3fe1879fc4be22e6dc25d90f481990
+Output.0 = 72609ddc261019c1eb927b813a9152448e88f2fecd7bb33280637c4e32ff4c1dd4a665a697a174f6717eca30981b70e043ea286dc453014d15389ecf7c80e5b3
+Entropy.1 = 8b959903da425d7b6fd20a3b58773d3a691168c765e031776e8d4f017208e1fc5110e5d8667dba0af40a10641f95f55c
+AdditionalInputA.1 = 1be3e02b0a53f4c50a5e2f48f7533714f826dcb16d119fdc70b910584b654fd8d41bfcc7a6060b38089466bb3fe34ea2
+EntropyPredictionResistanceA.1 = 97f3df254d0de1005ffeeef06abbadee5ff87f1619f74ab271ba3d35da3e3edecce57c6ee565478450acfaebb89f3ae3
+AdditionalInputB.1 = 0cb1d522f29a13d5714917d64567b4e3b16edbfac4d8748e6f2426031f3e3c73aba655bc3e61fe2f9134787a993d8819
+EntropyPredictionResistanceB.1 = f4a24099c18598079dcee020c0ef5448fc0f306022aec8e81b1d8774c273bd9ab525035bed01d3ce0197bdc486981e5d
+Output.1 = 94a43f513aa6e53b2bd086b880d1884d1c592e24a64c98e12e89b209f153eb5d34799d3234aafbfc99f94788820d305f30daaf7943669da1726ca6d7330a7c21
+Entropy.2 = 47ec2175f4c89f5139354d9291488e543bfaf2236066e3041dab42e28545a3a7b3c8a100977e941ff88caa199535d651
+AdditionalInputA.2 = 5bae2b9b60b64ff6e1e9a075aa628ea150ffdad55eca43e5fc1f37ba645cad6a0ea69a2884d6fca3d14e375be10653d3
+EntropyPredictionResistanceA.2 = 5109e5dc6eb97758475b311af27454dfcd573f192145ef5a3abd4f37ee258b71e6f70a4e99b3d8b9d922cc057e6acd23
+AdditionalInputB.2 = e8ae05c525113da8d82660de3d5c57e115dbd36c456a7ecc704b1707c029e8a3486fea29e9ef9b97c589ea7b1acd6c1d
+EntropyPredictionResistanceB.2 = dd86899f8dbfefa8dfe5bf82470f88ac86b69a5fe85976dd0d0f520cd664733cfa3877b8ee1742a6ae2edd21f5725102
+Output.2 = 93f1a0f2949748af4a0e037515529b21213e09c8b445aca0279cd1b20da905022e87055944808a6351aa09caeca2263e222ef2977dbcc94deb52249ea759c52a
+Entropy.3 = 434bf46eaa21d0c14a14ad59a47756a8fddbaa7dda32dc853489eee813dd4e23e9e65db4162c618b04aee793631c1432
+AdditionalInputA.3 = 6fd35049d8905a164eec4266e0018f2aeff0b950725dd883cef0f15bb497f926a02c181de54a8fd87651867cad1a2837
+EntropyPredictionResistanceA.3 = d96b6a0bbfac340b3e995472f29f9120e1f172041011e2af1fe463f25b34671b08dcb814d59a9fac569c50c0f5b5d315
+AdditionalInputB.3 = 1ae50c2fb80575fff8bd2a88e8e0faa3906344669c2045366b645c3d6afc266dc96387f2e7068f02e3821b79ec6c2e94
+EntropyPredictionResistanceB.3 = 51490bbf6cc4db8fd8e40f775160bc4470c45c839459dab1f7654a995ba7d71f542894c9b4b6959490023a87158199e4
+Output.3 = cf3c63f9e453544f0326a926d7f2697041320d49433a6ad9184d1327be4cb6170b65e3db085cee8712b43875a185d1e461a6a463ac32318979a2fe564b386c0a
+Entropy.4 = 45521c7b4890a433ccfdd6d152ecba50e5f132efa0365fe287aff0ea38209971a2b2840affd4cb4e440f592f711724ae
+AdditionalInputA.4 = 2e60259ca1c49dce14c7e31f7de95e25f6fd49fa100e325b1ef0f0ed72f7c01e4d1372f6ab0d87fb45cd5949a493a79b
+EntropyPredictionResistanceA.4 = 14e9de9a39216ea8b3beb5175bb7dc2eabc79d5b19311459b03d84c1867567a54c57d1d5ba5fbca2b3eb3de73d2be43e
+AdditionalInputB.4 = 136665eb10863dc7c3c23001258434ff7a1aabd876e298930d6fc6b05ff04fcee3f0773bf402b0987160062c1ab90b95
+EntropyPredictionResistanceB.4 = 6a2f839f86d16a0613b77e710f444d96391f9ef4894e29a8d237eea53ce29a2dbfcb6d4f267762279965ab21c93aa855
+Output.4 = 86e66f97c056c1ecc472b9b94b3474b83664a4afe1778602d0ac05007994970a85a29dd4a807ab17130bc49b9f11ee6fa784ab1dc1e64b15da8ae7a59de91173
+Entropy.5 = bd3f6ea994f748f04d32cbe7c09ac68beb72d7e168a1995a4d34258a61616b5e10a2c42daab3a77d18cd354d890f8f1e
+AdditionalInputA.5 = 193d2961654f8d29ed50d7c4ef106f4369bda2e18b11b30278b5600c2bf1784777e590e75aa0b5b11fc9a574e7e975ec
+EntropyPredictionResistanceA.5 = 46b0b24c257267121af156148d089803791bcdadc3cb6b486b11e7c59d8dbe374c37c2aed5210e7d3fcb02e75c84ed07
+AdditionalInputB.5 = 56f2c07c152493a25d58028207b748f206294f919eda32752fa39f2cceb5152533aeec9874ad60ef8bdb0cdfc22d9321
+EntropyPredictionResistanceB.5 = a245fef4c8f631e320a67730325dbf3b0d7ed21f1ba94fd4559e55cb8a3158ecf67a3a58d40b1b6d43842a15d33719f9
+Output.5 = 055f58afa1f0d6755d013c3cb9beefd5082067722874ee2f7b739fa4608a679ec124f89876b3d445acbf50e806415aff95a5ab06a345a866a426d51310f0cc8a
+Entropy.6 = 08551c18c6cd795abd891847cb917d10c094c3734ae673f87fb0957d953da61f5b1e6cd4835e988453c4731c9faf14a5
+AdditionalInputA.6 = be86fd4fbf5a2345b8f5eb107ca64e0b6755a25126383de474356dcca172cb060b998236672be8d7e5c3312694b8ad85
+EntropyPredictionResistanceA.6 = 8cf221ad9ee851b374172dd633de616e064991aeabd77aaeda50f1ba299bb474d8c2a4dec45356d84427e6c83454ab95
+AdditionalInputB.6 = 5d6be11ed175584b480fff763475c570126ba9fa57a24d11cea8d3b0beb365bc514cce37582d44c6a515dc4e77bbdc09
+EntropyPredictionResistanceB.6 = a0668fe1c5da6b19171a8285276b45cc83b3b23a3357fb642684b3eeaae109b3586b748bb8bbeeb7333c7b3751208e1c
+Output.6 = d4501f95bab45ab1c2b3ea60240906a5a7c3a85dd99c457a0ccb9cd87c8791fd36acf7af382cf396967d7c7e17e6f786446fca44d85d1698efc0cea95add2936
+Entropy.7 = c13faa0980c936f774f27e74e03ff8c5098b3867460160a7b68a32d6b3fdf17656d89aa994e3f15176dda8d23ca21f55
+AdditionalInputA.7 = 77954e7404cf5bdbebf4429e43f6385e3e77aad0641631af3ee12fbdc0f4a74857302c805acca1c556c320d6caa0cb2e
+EntropyPredictionResistanceA.7 = 43335fc7d432bd4904fe35280fe66172e5279944e31d38ba647a998a232ba25a625805a092005847ae3b7ee46696c6ee
+AdditionalInputB.7 = b77e35b41ca8c06aae164eb2fd751b4d0b0a8ef29ed07c71b6f7ab5ee16d67ff0256f74dd95c789cb5382c0301e2d6a8
+EntropyPredictionResistanceB.7 = ba19252cf5ff90179186e9aa1d08969e8e79e5a61c54b907c91634694b06c73c62afe8376aa9f3993821bad576f59d9e
+Output.7 = 1827b8d2ae59db2d9f4be51417826ea78336238a7f0cbbc8048f2da3932444a20a3e17f56a34ef72727732150c81f4c5a96533e3fb872be87e0b8b850dc85e1c
+Entropy.8 = b655cc6a23e5092027852595b1a936831d960a2b7fc9c1038cb7048b888bbf72ba06708934924582ca49d1e7a8f19504
+AdditionalInputA.8 = b334206112be7d8e06eef779d3abbef70bbfb62aa1687c93ee591125c9312f6af6389be4e2fb78335d1bc053569fc768
+EntropyPredictionResistanceA.8 = 3d0dab5d3416cd8b3bb565617ad0525e7eea2d8d81eb2f08e1dcead810904ea886aae23314e2e56fc184f2715cc805e9
+AdditionalInputB.8 = b4d740dda61613ef195fe8f8745079f5ce1ee7b4bf1bbb1e25d9f752f271efe83edc1fc7ce4cccfcfbbdfe85d766e59b
+EntropyPredictionResistanceB.8 = 6a803675676095a57e084d81d774d78d516641165343dc8fb80731144d7583e16fa54821ea5bdddb386459d36afb16e1
+Output.8 = 435201c927fedda6745c7d4b8b3ef97ba49160fff2dfa56ab8f500fb913c5d34fce83317ba60586c30d7380bab9a050d0e111f0b381f88098b980cfac09d7375
+Entropy.9 = ade982b113769a15465711cf71263dc8539d75d44d5d01c8e1c6b6f3ca0bb429d28a3dd0232ca4b52a7f78b81a39585f
+AdditionalInputA.9 = d6fd180e56562a416f1bd00e3923d93db9f4154e2b58e57c6e8336445df3fe682651baecd8437fce067a467b448be238
+EntropyPredictionResistanceA.9 = fd1795315d416261f04324ba0eaaac2fd836125e786118bd4ad4857dabc8a510094a48db1fec1cfdef909807e12d6abf
+AdditionalInputB.9 = 8753506f14d6da4a8fa7133c920cfe5a67c4dc3753a285d761beee41f63a468640d2810a37d952a6633bbe8cad026403
+EntropyPredictionResistanceB.9 = 49ae3e323a72acf24948d852843619b5cca9988a611c90bba23ff4aeefec49f2b5c97c7db7281aa392a40e2d048873dc
+Output.9 = 3243e644fcc6aff6933e1295867fe664401750c12da60ab524c15c3fc4e60174a27bffd4b55177f1d56ebc7cb092ff42e80e5b52c9cbc5d70dee699d77279610
+Entropy.10 = f47f2fdfc918fcb97f432721f2c8110aafa53b5475af79d198e1cde9e2f54ef4f224d2a3bb1706ef6f55c5ae0320b642
+AdditionalInputA.10 = e24e609cf18762fcff590842b286b9c134144036d84f0c352e16a00bb0f2243d7a4182a58d93074f4979694d49dd46d0
+EntropyPredictionResistanceA.10 = 8bb78d092e843de9d137824eb6df04a7310d5205002899bd688502e5c0b057dab929c420e5917c55d862a043e32aec0b
+AdditionalInputB.10 = 2bdfb72739c516704b5a912beac362a29ccfce7846989a7fcc3c381d20011e8918d6f50ea7433ba834caea4bc01654fb
+EntropyPredictionResistanceB.10 = 19956684b9cf993698ed43f04c88cb089d5a1e5b998d9719d6774ab044ef542fda20891744cba0e247cdcba553dfb5f9
+Output.10 = b45438317452c7f043705cd540e49afbf0fdb213e70c7a78174731183877231087f272742fd6658c518c0101a0e6eeafc9e08a627be13690489d070732a9b0d0
+Entropy.11 = 9bdc52c736c0518d6ba36e6bbc0b63d49ccb6171b57da0cb1371c7ffe203277e363b95b0cc05b8873f2b804ddd9507c2
+AdditionalInputA.11 = 6e796d36df6d9f6b09ba3ea7ce89aacf022814f4a7c855a7920bb6f2b9b0592d4bebb3b529408d050eb674aa7e85a8d8
+EntropyPredictionResistanceA.11 = 100453f6d636c6c44d721aa6216f004efd8834ed74f0e308d174617bc666e83546cd8f6c8a7312858a04c581088e753c
+AdditionalInputB.11 = 573aad63c3ad08c5d77ba795a8a72786e455fa723e798884734357e8f1da9ffb2d612ea0044e6fc3ada48dae1f21f41c
+EntropyPredictionResistanceB.11 = 088d057655dd9e4a927ec901aca3a753f01bb4a5d1a3d96aad04ecc9367094b5fd6878a129d7322047b2bdcec61c91ad
+Output.11 = b3282479d2defa6d629290226822f4cfa73bd044addbefde0552f203fc8b3936ec318d33f504bcc5ff3758978b1d280567459af5078dff40f744ee96fe86d478
+Entropy.12 = aad1ea87c4813fb7fcd18e4a6c9bc0207da0bf1472b9c0c2df0335233c6594cb2387d5b9c78dd7704194849b952ff4de
+AdditionalInputA.12 = 0e750c1ca74b4aceaa3d295c8333395faea0f8463dc851a61b7b16fca89c5b27cf2147587efc73089f978dede6e0a08a
+EntropyPredictionResistanceA.12 = b0cac04886a857eda837fab1b256d089a77b6e790b6c5c10bcc133ac256458a3958246da2589002c57be4433c60045b3
+AdditionalInputB.12 = 98c5b98c16c43ccc1924d237b45a4b8269a43b2df47d73560b8bb8487a1ac77a631529a861b73e8df37acf24368a655e
+EntropyPredictionResistanceB.12 = 59de122a53b4c3dd78774c7ae52013fc7416ebc6349e5aee12ff74553df23118f77101dd30f3dc567d9a29e4af1e0b68
+Output.12 = e48712fdfa9e44d383a26682118ddc096fcd1b63075a3323d6f587761371633e692209b27cf7d9da917dd15bdf560360c9856da6822ebcf6a0b6892a1454d2b7
+Entropy.13 = cae1800a14719137de13ce82cf37c5a1548f7fb149dc57a1952c8f1fcd29ec2dcb167714b06a3139098cf3f9e2e87f1d
+AdditionalInputA.13 = 47f8f00815abe455546779868d033eed33c3f4c1f97e0864f161c1a21c96423cf5c9492581cf0627ba74d7cb7195167d
+EntropyPredictionResistanceA.13 = eef46a293a48db99d56f0eff128e567e8d32eb4e145f853f5a40d36755caccae08d2289aa8caf826dd442a71eb8460b6
+AdditionalInputB.13 = f6e302e9ebd05ecb61eb522464e02d139b076725cefdde59f1621201a80eefef1bf3fa5d655eca755df31e0eab49641f
+EntropyPredictionResistanceB.13 = e2e61e0cb0ae58e48b17898d81a69719953e863483e6ee3d96a575b216c943fc90d300be87338d3cc65387301fa9f34a
+Output.13 = 0d8d79676bff41adf2eb633d082514b45c7e07b3e8b72ba8af64f2be64f170a286e30de8a53a9f22d42e711852436804e2f0d90e974b96349e2c630f13cec666
+Entropy.14 = 676dd000ba12bcc41caef74422de16ff6a5d02e899d93dd757aa23d877a40712c1168c30c318dc61c45d775e2689d3c4
+AdditionalInputA.14 = 6a5c30c87fac768e99378a737d47863ac583dc5415b1319233aaba790f2188218f5b5b66a5932eae315caa2361b15c2e
+EntropyPredictionResistanceA.14 = ccb3f0e7115fb72288f38bea7672bd19b4df06a6cafc59a497c7e3bb5e7e45c8cbcebf0966161c96c00aedb7a0277386
+AdditionalInputB.14 = dbe91ffe3bfb719bebbb0e3bb60aa907ca6e0411c05a7ded766674cd4d2b024dade1dd3bab8e92b81d40fb007ab9a81f
+EntropyPredictionResistanceB.14 = ca5099749aa7f195e0fde5262c56ad35c1d52069001fbb6580d478f50d1d69f6941d7ea4fa66e4741cad701a67f92933
+Output.14 = a135641f33e2aa5975a3be70b05e0b8c48372ef7c6768eed8e6c2b4e91d9153eead217ea47bf96b1412af4e08c3114d2c85f2e29fbe93c26014677bd14266ecf
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = 11b32441b5800347347ed8ba1d0b81a8810a9b7eb414b15d27781a998f9ccc4bccc84aae7edaa382502a0e5976bfd780
+PersonalisationString.0 = 7c9105dabac2a1a5cac8227f4670e464009f6abe9a8ad6e16c87c228bc8b70eb4e544f643a27c7071eb4eefe326c302c
+EntropyPredictionResistanceA.0 = 57eb8e25992dbdc3fc106a790168ce67552707a1d72e8213f58ab7085a920d3ac9e48258409955673d07464b2683ddb2
+EntropyPredictionResistanceB.0 = f452a234ce669885f3a24ef6c8a8a215690bbaf5bb6c90f1e9725347f98729a3391f88d9e82bf29e18f4257d865d10cf
+Output.0 = e64b1d538e8793d4ba0734a8349051dcd8ee1d68f01096bcc97521508c8f417dbfff2548f5d98d9d002c3a8a640b5e26533eaec074d6f3fba88cb98fb1a40c47
+Entropy.1 = c3a6a191d88fe184f35fadc0c705c80ca610f9f97f3a278f3e1423471925968cec2d565cb921c9a5aedababede7feeff
+PersonalisationString.1 = c996403d3df3667d970b0bd39d4cdbcdfa8097ded87ea9c05b68763710dcecb584082f37cf1d4ec79bce9a1acb9010ee
+EntropyPredictionResistanceA.1 = 49ca851a076d69f42b263158c888418f89e6e2400814aa0493854da340dd6c5627ad0a2e2c921beca91f2a1e16f35f05
+EntropyPredictionResistanceB.1 = 192187f4f08ada516c69f7dea31d975e425c63228004e4e1b2765f99f77db5ce1ab75c0636cb01791e2685ddbb1fb319
+Output.1 = b2411fd6b5b8e271574853fd7e82087e2d8a3c4ff1fa796899770cbf2791b6c7285817ac5484ec5946a03904d04111c39975f1c2df3c80628bc8f2eee7f2a2e5
+Entropy.2 = 1655da2cdd0aa3d95c5906bbeb2d9bcfb29db085265bd65906854350a96fd19e9d783e5faaf1fabf1d15a36a4e28a3e6
+PersonalisationString.2 = dd02c29e91fb7f1c1f79907e57de14ca3d0b43b02525200f91b7ce081cd937ec7f152cd1c76445672b1b9eb4360bd259
+EntropyPredictionResistanceA.2 = 9fd80ef5e5c7ee6b69528e2a7b152ef31161697e7809166ed482661f6b659193d955bc51d669a5cadfcdc196ee602364
+EntropyPredictionResistanceB.2 = 9b6013a64ea16b6f755368db241a8f41c7dd89ce5f8696843fed7bcccf88c58f9e775c63cf30b2c248ee68d56d4910a1
+Output.2 = e6fff1deb8b9a86795cd96fdb5db3db01330eea6a4c404a6add9ab01811ea92fe366e9c09c84530e755b6768dba377cd10974a46f0aaadbf770f95e8ae334bf9
+Entropy.3 = b3434a6ebdffe581f27ef76b7cb4ad31054755eb73cea5c6e584ce17a269868f1e7b0c8bb516a934380c9667c4297eb2
+PersonalisationString.3 = 81f86a4ed65b65b41cc9c6dbd83a5ef41f4dd8d5aaad55b7dc82e875c1be537880e02b29d9811fee885be89fff7e29ec
+EntropyPredictionResistanceA.3 = 78540aa836565f5a3693fffd91d065e9b72ef4d06df9adb789bd9c3a800d82fcc77a803c0fc81ab24f011874e040519f
+EntropyPredictionResistanceB.3 = dad2d802e5bb22f49f603365e206800063eb0b5e3f14d3081271d02a8cda03ac24d03d805a7cf8173fdf12a84f21d510
+Output.3 = 87923f78586524853099cf303d66f5d543cb48af68acd9e7d43f29d7ee9ba57fc28bd982f6fb87c8e022fc3c41cf9019bdf3b8da6c5088f268a41a4afe545009
+Entropy.4 = 0fd40a3a740cd9ab09573d732c13e310c35e98335cef71e2fb05943930a95741898223034f6c787ea8f1beb47b0a9b6a
+PersonalisationString.4 = 805134d7ec1a6b2243b3f0392bdeee7db7f79664eb43c41a7b70d5c9d1017ea55193771d9dfb5ecd82b6af0fb425ef0d
+EntropyPredictionResistanceA.4 = 7e563524ddaf242ffaf1f6a07bf3d7f805c6e967977e22cedcc27fcb9615282c72c5906c2f4350e12e60a5a754b2cbd5
+EntropyPredictionResistanceB.4 = 952dcfd70f95f8a22eb7c9d29951a937e99ac9fb2b30c9ce0e05c19489656a7b09012b2cca06a51d40ef2c255f6cabcd
+Output.4 = b3bca09d481e7d112ce583264a1ce26826e339f7d4bb86106a651af53997522710ffb97196ef2dd39e8dddf99d565c1662674c82370a104629772ca2c5414d5e
+Entropy.5 = 2ebff342aef5eac504f0bb9d2226074830cd1ba248eecff0582cb86ce8f766168d69ae20c69d1dfc023b6009898cd28c
+PersonalisationString.5 = 0ca9caed2be84fe3443d06d658de3193f92348501d1464c478f13d5b1180019fc2ee6d2190b66f9e85c017b8b55a60a5
+EntropyPredictionResistanceA.5 = 8711223446f474bb06f3ba2bd6e4a2d3f13b04800a17ac04cf7c0775e3a596d6c7a302372722c0ace857a13171cb8879
+EntropyPredictionResistanceB.5 = 7d57e67c657d05db4f424d7b29b1f84e0efeada906f0153078e83c5cbd552165597805f107159323e58ac5816b287d15
+Output.5 = 7f305fbac91145a840205be18a982e7880575122fd438c84810b14f12697bf92742220029c1c36178a6669e480bc79044bce8bd450574d6baf185f01e5c7eeb2
+Entropy.6 = 2a3c27faa54583ee6f3c24813ad6e124fc32a4c307e335bba6f34c8d66de043592e798b4389e9a753b749b75a3441a97
+PersonalisationString.6 = 4eaf6842059d1c703aad5606e2d3e7bb618b04c2cac4c59b442678b10e6921b16b3c8430a8d3ff995493f1e51c7b42b5
+EntropyPredictionResistanceA.6 = da0c67284a0f0a9b12c9a8d9cf934375bcec05c8ac6835a37f179b76cda891bc48fe0cde82b673d2ba9aef3d90270d2e
+EntropyPredictionResistanceB.6 = 835b75294600a3c6d2b0ac463fc66cba573d6317703afa75889038ae6d140dacf8208369946df9554e6ff427b0f7ddf8
+Output.6 = b86918ec64518e68d4a283ab1519ecfe99fc1283b5fad79b246942cdc0c9b43deab9409a2867a416b749ec80e7bac25e8470454447abba9a816c61ceed830526
+Entropy.7 = 8cc1fe7b81caa35c1cd5c5786de50d7ea3f76415fb2fb8ed072165c241c13471fa7d5d3b561716fbc4f86045c6fb498f
+PersonalisationString.7 = 10bec5f7245bdbaa8e25f6d330717a3ff99b374c83071df82e9e942208a8db74b4807680c88a5fe71cff72af43c791b8
+EntropyPredictionResistanceA.7 = f7b100c5695b9d41e620aa5a7a7cca07bb13d32447dbf04d828e16e43bef1ebef7d00ab4373b4c8f20e4bffb61888db9
+EntropyPredictionResistanceB.7 = f5b6d8ce7d2290e206b299d659a6f1a64ef847ec9b2b5f29c6931ba74ff2e26972da4a1b43b1aeee94cdf1b211490464
+Output.7 = bc22552a9f89109be21e0b7a6b926904a5789cdeb4b4266bd7537c05d6561bae809ec47803d663ba4846d2283cf5313deff90551cd1daef3f9cb0e7fd9360d83
+Entropy.8 = 060f8a56c5138b719f98d2ca3e25866b23f194be2bc69fbc8b46755f270218724de02218a4d7d76ed4a05f806ccaad0b
+PersonalisationString.8 = 980d41ada56e7475eeffc62cce6c0e8f2c161937fa58677ed6d3d96b08633c2cf667e192733d9713851109dcf1366c01
+EntropyPredictionResistanceA.8 = dc66ae4fdaa66a1bca4c983004853e7c08075c5fcadcc87563ad2ae9c62532439460f958e44a6f9b0b8011a960adcfd1
+EntropyPredictionResistanceB.8 = 9510e74d12f8a1b11c544cbc4da1803f1947f7311110184f667f58e153db3fde87fb5d77aa99dd272783b38b9fa9a891
+Output.8 = c0506debc28c7c8172d321a3d7d6e9eca4acb96caa41a5437acf48c1401022d14e19abe648357a815df871616d0c60e7698b0189fc6c2df69ff09f9d63857216
+Entropy.9 = 46f5e23303bd0aa0988443f03becd403dc059b105b2f4a06dfc1aeba34b11bccc976a8df37b9f1e52e8e5efdfb04711b
+PersonalisationString.9 = faa16ebc9c16eaca526eb2a51ea29d6d8ceb739ae0ad6b4c48276603557bf02fac8e65c88f72771ee44b2c9674283c3a
+EntropyPredictionResistanceA.9 = 51bf8f5dccaf17af2a72e4ae0623af4a802d772eeb56bdb7b20dba839ec23858fdbd83d315c321ba1e157b75fd2d388e
+EntropyPredictionResistanceB.9 = c408b8ad63dc65779152ed79eac4282e26b8a194f3c6aead7e4b36c3988cb318c7982b7c15444e827f8e1ebe4af9de9e
+Output.9 = 2b78213f52db9f635603ee17ed2fa23454a94ef2c5cfa225a810530ac863130979fd46460942e0663cd62c208cd241600e0cc3ac0fcff5f4f1268132ea55f8c6
+Entropy.10 = c355fb1fedbdae300242572ca86114a1bc368f6af741eb2e18dffbfd4239115814f263c3fefad0272057629d0c9817b4
+PersonalisationString.10 = 1d6153bda4f5030f416d59c15a6f3f7f63000984ecfcbcc709aa7c0fdda424564e0d826a5ca73c9f08e82963b4996054
+EntropyPredictionResistanceA.10 = b690544dbedc86d08f5b1d564a43bdcbb042d9f735ddd37159d00518c652c8d25459583c82a68614ac67ee6d7fa60d59
+EntropyPredictionResistanceB.10 = 87978d775bd07c4e01ceb7a26ec92f187446d6234f83118069a8fba6ea150226d82fba38a582a991af7d2ace5b7140e2
+Output.10 = a998c549c70b3182bdf2253b0eaac28a5e9e8b5d856979b84306304e1c692c6a86d9088f4a539ccc4d979c538f8099ca416e0c2be0e7ed86cd8c63cb84bd0d06
+Entropy.11 = edd61c769252ce8bc4ed1d1aa9ea47c6fd8799733e4400f7db75b639d644365b1d2d06f419809dc0179f84c34bc9a957
+PersonalisationString.11 = 2ee18ed0d533e94275b9817cb3e365dee16e05560d988384032ec42ebb19c7ce269b14be8fdbec1a65096f8daa92b80b
+EntropyPredictionResistanceA.11 = 7a17f87b47c0661b54f4408ced129437408bed980b4518a6adae87031e3a76763511be79f4bbf125e7e2794cc2ac7f4f
+EntropyPredictionResistanceB.11 = a62c44494a9a7d2e39851966e8e43626fd62d1ec2ba7b9048dbede2394e2382fa9d2a4c4ed7c49615b5fa501d9c9648d
+Output.11 = 36f56b86267a783fc9d3b5e66c0b4f155b1152c50bfa0d39e54ba9837597094ed8effc8052e38ae4b6929f7187004beb30b583d47b892cbdac8e27995547dfcb
+Entropy.12 = b1492cf3036bf42e2019466d818092528a247851d3080414699b942d67ea795f85068665754fe35e7b0406d54e694168
+PersonalisationString.12 = ceaec08a19f82ac61f571a48cc48db10e19b2ef15a91e074f545f80555914e4b146406cad81124bc6bd550f4e47480e5
+EntropyPredictionResistanceA.12 = 012aca64e02700101b453681e256e3ab86a4a6ea64764f920ce1dfb70405200d0337860d8fddbb8f74837e57d8f473a5
+EntropyPredictionResistanceB.12 = 88a8f0c3b82b25a2db280b0e8f80656b3e4993b893ba802000b8cd92df1d0542c876cc8d3c917983dcab6fbfeb1b2bff
+Output.12 = 9e7fe53cdebec6dcbdcea9efef1eea2e7b745e5034ec1da4e0844d64ec4adb5c29c1e22fa6305f45a8e144f2af0ddcab4fefc9093c0ec4d4b2055150aa726f83
+Entropy.13 = 5c9949d7c54060bff733e517e55a69a27b17480bf8549c3900debd8034ff2d34509f156067a10515598a9b3a88b9e3c9
+PersonalisationString.13 = 0906502dd6f737ce49753b67a544328f216e59e0ad38256878f556f7dd9b8c5f2dd521cd57a465867f861438037e2527
+EntropyPredictionResistanceA.13 = 6fc9bdfae7f0a20d8d8685e1c827ef3534463f9652ffd3607823a901653094a6acfd69afcf0acfc541fa4fb59b15bd60
+EntropyPredictionResistanceB.13 = f6c9942716e168ceb198fde680d85824d784553d84183ccb7921843fe7e9869c279dc57bfa650d12b52e2d8244fc38d9
+Output.13 = 5e31394ef7ba4390adf10112b19196efabbb8045fccab258f035de14c3c7e4ad7f32c6ec1c9468106235f58aab6a81daa75db189fd29d0938782f32759f419d3
+Entropy.14 = 84ee8385c80c0fa623662d2108e78b974bd469ac2389d201df2b675ac7e6c6142bfa35a162f2232c56e5a111a34f5c57
+PersonalisationString.14 = 9e85b8927070e5a27bfd63384583183ea146d8586414ad89d300deddb1ddd1d461b0184dace4290204422bc64fca95bf
+EntropyPredictionResistanceA.14 = c3444261962386b57d6c5f125dc3043678afe1962d55d9e6204fba229e781fd0636d07fe6a052ed68fe27e2c601c01a4
+EntropyPredictionResistanceB.14 = 1fd895068aec8df2684784007949e0370578676c6537a09dd90567b95f6138809e70bcc9fc9efc03dfd83f0367784bde
+Output.14 = 894f3bc0fcbdb76b01df80f05d0ca636bd51438f5ee28250f27e8e47968c9c86a847970090d51b0a60984ebb5079017a5c5bac394e9644befc566edd4768d919
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+PredictionResistance = 1
+GenerateBits = 512
+Entropy.0 = d102236987b3562b631c7915b19258c019cd165217b3f6da30f71e409ce2ad2f7ac8b6de86696ed27bc0251701a4e220
+PersonalisationString.0 = 0d76f10e4b15263dee96a2884f3eb38b6a9cba0c372d754adff92cbcd5f9784cbe371dced833fd76e433c8e61fe54679
+AdditionalInputA.0 = d3e5ec402dbd70d53b8752ebb693eee7f9bd91b84c21cb486812524d5dec45d6d9d6a36955840ba7b9754caf834a9ad4
+EntropyPredictionResistanceA.0 = ce728d3fdf9ca9169bb09d0770753704830b7a74225ad6b09174bbfd0cecfc6938d0867ef6290c5949e9f67f96727d66
+AdditionalInputB.0 = 1a9fe552c1a299f14dac889acd3f6d02c6b581cc58024f07c49d6e67ccb7472044ae5e304cdcf623e4677d13ecda892a
+EntropyPredictionResistanceB.0 = 6e86435fc39e96ee9dafef7a45a73e28f5594abc87e88a44c0348629a679972f322164ce2b191b29a9d21455d7310c4d
+Output.0 = e20b30f496ae9def7020747ee5348b4a531a6ba1b62e743f31a7d3d3ca8160819f57d6e14f52fede0714a9e3bb71887c3b50aacdf53060b30003092e97768701
+Entropy.1 = 4f43499c075da813431f6c18355be41a3c76a1f45c301c83d7f9e25478567d9e23bb7bf8e01e7598a6ba092352582d97
+PersonalisationString.1 = f4f5f7dbe849fbdbcc1b3f573ad1951fedb01da0d61337ff0ca5d8afe2c380d3d5499169963b735d03159504f0a03281
+AdditionalInputA.1 = a27286c9bec12835c52b702b3b654c90c80e01e6d5f84bb80cf0b46d1e3dc60c038c105ca30e1a94eb733b004c76ec4f
+EntropyPredictionResistanceA.1 = b718563aa738675c24a58f0117e0607cf15687cc7f2657e56139d67362e33149971810e55534988c9e923c55871365dc
+AdditionalInputB.1 = 3e25775d56a156d86a20f8faa77b1ca33258f9a12c10748c1f363d5f7b10a681df6538d9f615c63cd2c97e1b6ee82e7a
+EntropyPredictionResistanceB.1 = 35fe7410dfe65c6fde7115faf203e0105633133207c8aff29cc85780f749999fc56559a956c28cc3ae2a4d54ca49be32
+Output.1 = f763d00155784927837cfd3d54740f48398ec8ecae664b160d078e81ec6b02c65283be807a8e087f5d3600233a52ccbaa593203925427eab16f434d737bc6c48
+Entropy.2 = 15c9d923b9371e585c816ee4a203b9ec93a16f0f2525474a302f507ca0d6eaa4be945f0c884d12ac893b8afd446246a4
+PersonalisationString.2 = 545b32692aa64640a79fac5ce3b02a0203711af0e8fce45d4af21f9499dba9bf03f30e035acba816defcc6f50c0da72d
+AdditionalInputA.2 = 674a45a11c29d73d356180ee983b34cbbb0608a6cebddeb337d6a5f71934e1f2eb51f0806612d1f1c71b93a81925d821
+EntropyPredictionResistanceA.2 = f022560f3bb3aa167252316cddc77035234fc1d1718944d417becd40571bf2075b9f39c93656d388042c6c0f34784779
+AdditionalInputB.2 = c46e29626714532bf5c65f65ebb5af38f10735920bc0f022122145d33c84d88056fd26d96dcc1b69efbf2a7ae7360c24
+EntropyPredictionResistanceB.2 = 7e4f973d64378b219162de5ccb28436b817917f9d47c768602cd901c23a17d6649c6830ff62e3edc5771853edee69ab5
+Output.2 = 9df164fb08b85794d2eae92a039954c37a9c412e224a242681fa4a70694bbcd5ff9d10b55d0f5a06dcdcdead90f34a65a2d0c97b1e21da1290cd208a3327111b
+Entropy.3 = 03e7dfaf6709c68188469033b418d39f9089d5af5572fccdb315f73501f3cd899797f392e94a51835ba85a17c2a67635
+PersonalisationString.3 = 110fc1ae4fbc7dff718bc0025217cbce606316a18ac029576442fbb94e12f9eb4645454af01e1ba2edb4f04384db9c2e
+AdditionalInputA.3 = 4e1e988a66e041504e465f6cf055fd7a34b689f64f48c0df04d2ff7fd25ed8dfa7fca3d962da1e7dbf1a4edda7985466
+EntropyPredictionResistanceA.3 = b040497493a008d25a0924d9aa18931747395cfb6554ead055aa80fc87629fd2bc162ca5730c73171fd38b7bd7a44e19
+AdditionalInputB.3 = 96f10dce1ff8d8e0c992e1f3ea034486f8908df4e1d4b9f35bd4ed6f91a0deda7a5b238ee0b6c783f7f101cfafad7986
+EntropyPredictionResistanceB.3 = f9c8aea35061468f836b1eb4f97d9220577fbdf86194a99214186cc59250edb3ffefebb25fef8f5068265ab678b18036
+Output.3 = acfc84fd40837ec94c4d37656e65d516c0ab45a7a4485678f30e51aa08520cfaca31d786bac0f3dd3f15c7c5208ed14473c472b537e3662e20d8ca9ed77d4baa
+Entropy.4 = 74d1019b4d8d76754b9b57ab96097ba82e4046b3572d8dd3c1498c472b5e8d08050ed7edfb3afac29ec098388162a7e4
+PersonalisationString.4 = 6e3dd82cf12887a6170514a6737ab2a601d6b17e57647549ad5a49e6b23289509e094d7c61a858df26ecc75d7c61115b
+AdditionalInputA.4 = 3346f0c0eadb166b154ab1d9e1665867d2784ec5d9ef1843b718c3b5a1e02401ebdbb306a40e002abc39e9428ae48b83
+EntropyPredictionResistanceA.4 = 0689721b7843174955c9afebd741a57a600cf6e70a2880422525fa16d344c6d7188183c2fbd6488692e19f0b6a95eb59
+AdditionalInputB.4 = 08c220e785bda080f16a1bbf26a79003a8146d6fd5ea63c428a44bc5816c72bcb93b9464b9d2d16f2122c4e9920ca073
+EntropyPredictionResistanceB.4 = 1e261739110b9b9708e0637d9097b5ab34aae88b14a9de535526b9384a24a5433dc434f3a897847a3b770218760a9810
+Output.4 = 575765518551e0ac40db70567265f01c90f9d802dc40849a7c243b987882284f85e5942821b551923cf3f8a991e1107c5978a570f51cd6532c27c12599068dd4
+Entropy.5 = 8f0b904655951a0fad5a014b018d9d1f78afa13d504b4cec559d35320c1360dd5b4e2e67d3ed23f6b1297bde8d1d9871
+PersonalisationString.5 = b78b65b66c6103678446032db3b31452f7a663884efe6610a4bafd5f8a6d35d33c4169f24d79af17d880e3b4cf95aaa5
+AdditionalInputA.5 = 3e760e8dba842b59dbb907fd122745145cea52fae5dbb59a8a16ed2f7dd2a2927ac9828252381c97fd931e72cd0205fc
+EntropyPredictionResistanceA.5 = 2d838a98f893f34e73dcf0af1d2ff580efc4c0ed661eb2a82cf184ebc36c3d9a6ad5363614446363571c705eff093a5f
+AdditionalInputB.5 = bdde90439cb0112a68943c5e23fc9282534e2040543e738bdd513e5910ac86e7a5d30ddeeecddc38d1b7b90121cb2135
+EntropyPredictionResistanceB.5 = b3a71b8ea688fe940ef2612b9e59c799d7db234a78b548d6e96177814be941c27602b643a22b4665d432ad9704d5a1af
+Output.5 = 24bb14552fd55b8a8d31066e974e9bfbba351f8528da5befe096bfb772eb287900fbf71568697e1dd2de8f9451ecd6a7e70f140e56af6e36f77c256dc0582cf8
+Entropy.6 = bd213a2e83d3f41e852dccf394c6920e15f3c22c761b5cc70571ec061146643d9f63c06d7698bcc309f6618fcae4d802
+PersonalisationString.6 = 0ab16f1db7c533b4bea2f1b9d92fc143f01d7856527fffe486cf80135c6dc497f60c14efe2c15011162138afe5d2113a
+AdditionalInputA.6 = c566b2c3d60a76d555d6515e7e964523e68f72272e778a58026d942978bdf5c46df6decac8271fe32c4000003031d450
+EntropyPredictionResistanceA.6 = 0d92ba73d2d69307bc6e053ef92fed43209fc1c7e4eb5f9313ae91a6d07e24379e0308087980f695be201e1df0e5c994
+AdditionalInputB.6 = c6aa59d6473dcfdb358ef22fc529c9e8a331d3ba8f535668e5c7eb8767538b4ee4ba50d25779c5dac1efe647f3df928e
+EntropyPredictionResistanceB.6 = af2468e5639fea729bb2fc7995a5ce92ffc04550e7e604b9fad1e069f1977aff5b1a371e6c8096548a03c5210ebae602
+Output.6 = 9f18f1df7ff3cb47c6e52660af2e5caa7bd44cfc33aa92c558bc035a6b3466b6fb835f8d15d96da0b66fdffb4b6c26c0481355f13584e3b4e42d11bc37271921
+Entropy.7 = c4d2f350a4f2a789c6015659b6c02a12cd093430a9562b97b06d9500e019fe0aaeb879583f8b58bd6ecad521d27d1ca1
+PersonalisationString.7 = c566cae3d5474eca06a07751544093e2224a7320592ebb55606c73f785f3950fab2e0395b021f0260df5f5112b3d568a
+AdditionalInputA.7 = 44ea34f3a83d35a1a1df8432dc00ea1706ee7fe7d118154944da8b850db1a68fd96f39600428ca9b7333c4682f41547b
+EntropyPredictionResistanceA.7 = 6c500485e22f76fe2d2c1fcfa26f823a3d96f2851f2de216e84923ca6a81c1b7ff5f39d438b09bbcc1f7bee53a8f6540
+AdditionalInputB.7 = 36565ecbaa755c0e78d90a602c9ae1303fe07f36f6c1b10b625021f3798dd9a1c9a210eb2e3367fc6abec721d83a412d
+EntropyPredictionResistanceB.7 = 8a3fa7861e35ff9e129346fab3486d8c2c9e1e7931da3603d3898b12116a3a76c569a79017570bea10054e71ccdf88b7
+Output.7 = f2a1b284a21716afae6921dc85ddcd3ce327ce5fa81129f6b41e23fc435ba7659a9b21615d51dd436c78ade4270acd8b06cdf3c839c1ce05207b8a8c66a1e6db
+Entropy.8 = 89f5837ea2ec6c11682016fb00bd26ab50017af371e5d46d3423f2639297994d39099e9602eac95d0349ca7098a14f0d
+PersonalisationString.8 = 47e7d6399ae20b93404606124c98037c31304335977a92d25262715f349f05bbdd442617ba2bb0f38604543581d90eaa
+AdditionalInputA.8 = 4ce360d6835112305712fc20d52dc6d30e3225d62e35a4b5aa3187eaa7104bac816775750d6be070305ded1732f34e4b
+EntropyPredictionResistanceA.8 = 7875376550c6e0882fc9505b0e905a99a8d6c340d1192798afe33f31e793de1289487272e9891599fee5caba3a704834
+AdditionalInputB.8 = 98063ae8f1e56a8cea177f451677214a7f4195d6205f220f0dee8e843451735f6ebd94ff561b09dd463dba32de325475
+EntropyPredictionResistanceB.8 = 594be9edcc6324c289161721fbdac252dd2f0bd2b6b836f768358bd0914d38b4ab40246ec1b5ee94e590384575ec8087
+Output.8 = 415b18d589e9fe68473efd2a1a7006d85e8ec6c039e45da9cc3d848e2b3ed909044a55d57d46e15363600915089d0aa225168895a2a71aa9f5a8fa91321b960f
+Entropy.9 = 9091e724f65e07d1178cee5a18faed55db1cb64f534b5faaf019b89d92cb08fc499cbdeef05fdacf51dc01845898f365
+PersonalisationString.9 = a1c381a36ce0a837c74d33e41632aecca2ec14ea28a0c153f9decc47e3f977cb34952ed3e643c87bcddf32f1a117326f
+AdditionalInputA.9 = 23cb47c2c2a2ce805898751980d9545e3a7e6780c9d3288be0cc75d1c7a953e6044a15ba1adcecea2a1e1748bbc5e948
+EntropyPredictionResistanceA.9 = 777e58a97273998b600368a83a91ef4beb5d4cb2c58b4e01b01a74452ec2b282b61e93898377eb20f335e88674ca8a3c
+AdditionalInputB.9 = 13658ce4f91d31b75513acc25b8b57d9c6df39bfd7c25b9d2781b7132dbc0d39f20ad525404fb7eb15748c868438ef3f
+EntropyPredictionResistanceB.9 = 55784acf5ac2f8fe0c85f1c5d7ffea809eca750d4c661bc97321b394d6ffcd7427f074f428c38624326363a801ea02cd
+Output.9 = 28e4ce4ad753436b1344781d6559d4e04c589388c6f4eaa006dd0a0ad0a36feee985d7ec376eac4dfa9f8044ca32a59eb6c165ac21510956854240b4fb50a988
+Entropy.10 = 9064d726c2455c2ff03c842e7ee48de2463ee00ce97e31766f41b3c51a6a73559f60e2ef2112bdf558c4ca3325c1e650
+PersonalisationString.10 = 45696a91e79c49a6530c9db19d06805bbb21c4a330abb591cae80fb98cdf01150c244771ee4588abbaddd7fd91d6d69d
+AdditionalInputA.10 = 6f1c7ee9a84d5d238fef806cab765aa57397d0a98431c30efd05e957944c6af593ca74abb9d65b58d567d634ab8ca033
+EntropyPredictionResistanceA.10 = bdbbadb334d27cf149393c6c5747f3b38ed8ca41572efffd2f241f8d68a518c38fa69c2a3f53f2e6b289b5ab6133a2d8
+AdditionalInputB.10 = 3025d1dd9e8b8972ba7d51b209a7ea38a982bce7a2e59076496380fde4972d5a07471ba7704205c4c031d8e041575fac
+EntropyPredictionResistanceB.10 = 30585baed3ca023fd2203a58354fe9d55bc8533f39dbe37a74f43a01e5f093a7d952242e8a20af3ab6f5a88445dbd944
+Output.10 = 47d5416e0e21b9bc9d4a690ac19319b5f45a231c3664b704d5f48d82d47ef59cd2c281b789d7134c2a2a97f45f5f84bfe1ec4f1284aa8e02879886dcd2ea5581
+Entropy.11 = 0ddd70f8968c359affa0e4ba9c6f229b35355e091aaef39f1a7c997cb9819438633432ac01662fbd59017dfcd02b1f65
+PersonalisationString.11 = db86bc6bdd84c3f6cbc1eac52dda930cb8504e8940f0db5b0123391ab421d16dc55f47f6422c280b7723903c29604670
+AdditionalInputA.11 = 797933801114b369b4a36b36cf8470dab2d4c000c63f8606ba7a1485775f9d770f373c1b2ae1e20ba14c1bf575d0d8f2
+EntropyPredictionResistanceA.11 = 7064eb180e86ba631c24ccbd632bfec869cdf0a0b7aae3e685a33eb808935d258bc7e69fa7f157eb6c97474e858841dd
+AdditionalInputB.11 = 7098eae98b98345f6754c9fb486acd1b7ae0207019725fdfeb89e05e7fa90d15cb79b545aa995acedba42b6df5a1c890
+EntropyPredictionResistanceB.11 = a2e48843d59abfa332f99f8f2450e8e7265ea008e7a75c99051ad65fcd38ed95a203a7c70312e009bfa1a93479a2af3a
+Output.11 = dfc7660aca6c7b995844985fc400f4830a02c4dc5181d4a064e33734c2878539813ee182dc7a4fef1d9462dce19e012b3d5c971ea1751d56ed359d706ae3a369
+Entropy.12 = b402c6e8204eceed81ec53468eae4b25ccf6cfc3e3ebe0e59b87cc075203efadb7e98112c5dfc2cdb7e55fa57b0995d4
+PersonalisationString.12 = fa2e8c7ae954944557b3cdea7b396c9620303a5d5f749d22af03815d88e748b1565211f6ae7b0c85c84bdb0b72405e5b
+AdditionalInputA.12 = 3743259493fafca838f3df527d75ade83a0fbd6a6c1f79e2f140b0adad9b425e02ef804adb84517f9936cbbe670f4fec
+EntropyPredictionResistanceA.12 = d9541103110df3a6d2852c768c1b312d2cd4e511b31bc770b7c11f2bad3f82e895d5c28cc68bf8b0cb9f191a93ba2e9c
+AdditionalInputB.12 = 9f90c6db028e49eac20b0cc2db9ce10e4136621a8ebe26954e77eacd082c467f08ddfe313bce0b117d3695c3609995ee
+EntropyPredictionResistanceB.12 = 417bfb460c4ea3cd8a9e350985ab04effe9cefb59c6e6194b79d252eea0088d4d07f9e5c74caa3a334a79e90ad01e33f
+Output.12 = fcf2c73dfb6849df7f0aabaf41cd8f197ade73f640656e5e310090d13b58ce246c5bf0a2fcb9ec8ec1ce5250eec34a390d06179e89b252d7574c5a8a528a3a45
+Entropy.13 = d82f8d6a96fa88c4f736622691f966606af4193d8e09a7cb80cc3a5a943697194ccaea0f8326ff4e6fafcfcc6df20d15
+PersonalisationString.13 = 35f2256c8b1a18659fcbf7378a8f8f2fd3ae208187e1f6b8f998e982407aab6a12b2b7bb6a6eb37e7788f650679d61cb
+AdditionalInputA.13 = f73174069398ddd8c26e4c6905c70d09eb2c6ba95cda879088eac2725cc20ddba4b423e0ff51a0f512ddadb916ec6062
+EntropyPredictionResistanceA.13 = af13fc6812b09832f28b54d669432551b7a2b0b98367b6616001bbed2b1f9197612d11b015698e061d701ed95f31ab8f
+AdditionalInputB.13 = 5872b2ab09e8372004253aa29bf5ca820bc85c2a01cf317215fc97badf814fbee3e026d3d3a524ade88cf97208366947
+EntropyPredictionResistanceB.13 = cce44c6d3c4574f4876453205679f0c2768472a94778ec4f03851e369a62338c8520cc53f31630f662879d70d6e93f74
+Output.13 = 9a19f42efedf09ef0fdd24e7218fb5d5e7accd7a3642b36a8410003a49385548c1c72e6feb0e305e9c2a3f3529f8110e084f02808df1e0874b10dde2f0a92f52
+Entropy.14 = 5a6e33d15667272814b1b83e3724f995af0fb05c247203c34a07a67436e7dedcd717a24ca4a9d9f9d47a6b6b84b63b88
+PersonalisationString.14 = f3fe7ad7d0d6b8609312f049f75a2e9ce643c935d82ace41dba5b0c1c985684328fe31c4e77db60f251438ed7483ef19
+AdditionalInputA.14 = 561d2a2352ab0e73f3ec1135e4f2dd226d5f3e4bc3c4d8c46de866446599446d0f158bda30c3eec2033dbe09924c94b1
+EntropyPredictionResistanceA.14 = b4e156fe5a6356cfcb2cbb79a181e40a1d8fd0e10fc4775893b85132ede0ca22268ead5a40b6de6984cee2fca62fdbee
+AdditionalInputB.14 = 1fc67604930dece4937f2b01aa4c44eb6370a5fbe1e168a84c26fa3c6dd0fda4e2071696e3246d3485f4d5f19c6b1853
+EntropyPredictionResistanceB.14 = d004fa7ae559656f6a8f8525c6e55d245c8d7f580cfe63ba84575c5b6ef8bbf6130fda8f01fd87307923e0639a23f4e8
+Output.14 = 65fa1b5cd3bc6f0a6a899014f8dd94c624cbd6deefa50b3f65a1067a1afb952f134ff733358184335260d285c176718fcc58f0d282a24811b8608f3d753de068
+
+Title = Hash DRBG Prediction Resistance Tests (from NIST test vectors)
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 212956390783381dbfc6362dd0da9a09
+Nonce.0 = 5280987fc5e27a49
+EntropyPredictionResistanceA.0 = 2edb396eeb8960f77943c2a59075a786
+EntropyPredictionResistanceB.0 = 30b565b63a5012676940d3ef17d9e996
+Output.0 = ca50ec95c7c38a58129fd37523d1f2598ce6de98a6f107724c5546beadaa5bafbf1e62d274843f1107c345b1288163f1dd24afb27a63d39ee2aa770dfca668eb134abe080578b2f8d1a3a899f5a00af7
+Entropy.1 = 156d6517a1f3079b1d0311c602270eca
+Nonce.1 = 1029ed64408d043a
+EntropyPredictionResistanceA.1 = 9b9b19434b5e37f2353f36c392a40343
+EntropyPredictionResistanceB.1 = da5c8e04ba2ce3c7e989f2b4f673e7c7
+Output.1 = 0744de6cadb1677a6eba16eb05209dfb9d371b143eaf2a9ef942e4fc1609573ba70f45d06a3a2af0100f21794eee9688b5bffa920f9a695f076591cd286147dc979707848f27fdc85d22d39188ca24f0
+Entropy.2 = cc2127b5c7568b54715ffd523e1583f1
+Nonce.2 = 5e363c749b689674
+EntropyPredictionResistanceA.2 = 85e319533cc00683b87328ed7f867b1b
+EntropyPredictionResistanceB.2 = 40ff48b8107b78db3ffcf0a7a716a616
+Output.2 = 4898007098d0883fff37e566ca61a00922f7ecb9555fc904f6a95ebd601b522483666c452857a3238537f4b04db4d7a546f02bff0c5cf8b4be14ae89585d7e79b78cc0fd8469026cec356fb65e092f58
+Entropy.3 = 6b89f0b063a70480694bfad9208bc53d
+Nonce.3 = 6cbdfbde9d10b91a
+EntropyPredictionResistanceA.3 = 07d79d9a084caea7e3e2191c7511be88
+EntropyPredictionResistanceB.3 = 08d2a4548dea7c90f3c26c98966f6f5e
+Output.3 = f193eaba7193f31470ac05b4c9745442044fe46ec4af8a1f74c1872da9600a10f1b8e501ede2b8867b84ba51866cb25fdb1a08459b0504921b77c1ebfb36a54f7f17b06dd433dec19b866dcc50fa3403
+Entropy.4 = f419e0879183a6160c815e9a4e4184d7
+Nonce.4 = 3622a939192388c9
+EntropyPredictionResistanceA.4 = edc214efc2896783c41784f45f68bb70
+EntropyPredictionResistanceB.4 = 3fd506e133b66c52db241db6944a197d
+Output.4 = 2693b728820c623527d77a6c7f1c3e90d72adc775b9112fce54c937caa24c3055f3e6b2fb6028f624cb9be17d934f5dd81b7182c7689055eeb01614f42838b7715fd56a58ea0c0314df688cba4ebde93
+Entropy.5 = 6f2bc8942c2dd8c26b9d4fe807e8e1c0
+Nonce.5 = 3ee601380f539abc
+EntropyPredictionResistanceA.5 = 84cad1e94b93197348f004ab070c177d
+EntropyPredictionResistanceB.5 = 7d1778610466ab165ea241e980d04a45
+Output.5 = e15c589a368080a1db526da8ff46cf18e9ce922bc26a72398c0205591de9eb17f37d43bac970c13ea683944a513308026ad6bb7c7abb73153c26f8c1ebcaa4a7ab29576fe4e6aea0b04c50b4ccd90f7a
+Entropy.6 = 55afe6dd806bb0254742b6de12e82cee
+Nonce.6 = dceb1b9543bcd54a
+EntropyPredictionResistanceA.6 = 1676fd0a44212c710375e62431d9dbe5
+EntropyPredictionResistanceB.6 = d3ecf5ef5c6e0d42dff1a47a4984b7bf
+Output.6 = 0df8a534a52b316392dab0011aad33b3405ef3c1dda50b2085044e8795b4c763714bbd89fa20fc2affaac1c6950726a4c477692994f4d27c996861a6c2b058f3609b68f105d70cec86d82a97522ce223
+Entropy.7 = b38322545418bb10049d683115a90a00
+Nonce.7 = 044d319ff0260c97
+EntropyPredictionResistanceA.7 = 17411d50d5677c5bb413b6ef89574bca
+EntropyPredictionResistanceB.7 = 5b93bf81ef77c24aac3c8ce3b5b3d1cd
+Output.7 = b081bab6076d0813e4e17cce41f6295c1c03c5ead1b389ec2ee375a1b6fc5357b3171139bc9e89c406bc9c7c4c84c2aee0c29de97a739654e63955062b9b2f7af02baf50b3f14a86fd35f9f09fedacc4
+Entropy.8 = 4bc8880057eab159236a02e16b45d40b
+Nonce.8 = 98c796dd65d99a9e
+EntropyPredictionResistanceA.8 = 830abfbf5de1b48722c4d157207ce830
+EntropyPredictionResistanceB.8 = 09b7289015fa2923ffe69137da391dd1
+Output.8 = 76d393e0383a60cf24aba0d344e03c4a14fa10bdec22aea304fecd841c780b3a662c395f0306701484b7d8a4515430db4828b25c598dfb7c53ac7c471717ee0c95a697073034794be66ae25c895c70e8
+Entropy.9 = 09b13e8bc03b7007c24c2b2e2cc7c9c4
+Nonce.9 = c27ec88b63bf0c88
+EntropyPredictionResistanceA.9 = d309eaec206824e0461eb2b09431700b
+EntropyPredictionResistanceB.9 = 06ddf31a7b2513609b737384385760ce
+Output.9 = 7fc25a7c29df408786b8d7ae686dff3a3f5ebbca400184a77237831d44f3b22f58a3977b196708b1096e521d23339115b2d6fc76ddfbba64861ece03f44104538dd0c4a5dc1312e6152337bb136e663a
+Entropy.10 = 4164daa31a54281b1785aa66bb128e44
+Nonce.10 = c67bf398b82ee423
+EntropyPredictionResistanceA.10 = c6a3d975319e16bb21286b3bb2ca9dee
+EntropyPredictionResistanceB.10 = fea76c74eb475abf95fc33a585fb9218
+Output.10 = fcdef3123f43e209aeda526ceed13ac5e0df61bc9d0e02dbbc7c778e8d6d71b6a9d1118a0af9bbb8ddc91c234ef3f4f14810ff724e2d6ad43f19ac055159bc04c0025706d26df7ae60024215524e2b58
+Entropy.11 = fa9350c668014927e17325360bf1f577
+Nonce.11 = dbf1c9b64d0d253e
+EntropyPredictionResistanceA.11 = 98c5ae8f050a8caa49241440c4e6be00
+EntropyPredictionResistanceB.11 = 6ab7f6ab4884fdbcc78cd06f76339863
+Output.11 = 1cf10dfed8652e12b2add6e064204923a3783385ee113a6b77800a6478407c3b985f72ba5d3a535bcdc9817024783453d91ba810a16c11399aec505e660d77003e9e7e5eee1fff3af70abf0526c8afe8
+Entropy.12 = f476dbfff708fc78ceea63c26a743ba1
+Nonce.12 = c341f0e0ec71f13d
+EntropyPredictionResistanceA.12 = 5eca68ebe490d6dc566229507b035beb
+EntropyPredictionResistanceB.12 = a98990cadf43af27b64f0712a9882f4f
+Output.12 = 2224a2607729bf28626a1f775aae10219c0772ca3235028c43a600502548c5521597b567a399f59a50b1eb66be1316f8ae5360f6f81b0d3e9820c795e53b441dff105dad8c9fde9906345d9d841568f2
+Entropy.13 = 21e41827985e98ce42321538e94f3277
+Nonce.13 = f4eaf7918a08706d
+EntropyPredictionResistanceA.13 = be69658f376991893afb89479341236a
+EntropyPredictionResistanceB.13 = 6867bc1f926c83dac2da14f8321dabf6
+Output.13 = 3c787538f4056cc8ff69f986e67a87f8222e036857bd13b968148e40baad413810451eaa5ad3e343d6e9837b49c6f19d76c3d44afa14bc5ccdb7f039f584cb1255a30850bd3fe76a158fd0042eb5c063
+Entropy.14 = 4086cf7a38d0366ae9eeedc70dfc5405
+Nonce.14 = 3951a529bad7a209
+EntropyPredictionResistanceA.14 = 7c120dc6f726588db8290fe229e50f7c
+EntropyPredictionResistanceB.14 = d68dc9aa496627d51ca06b154f9b11cd
+Output.14 = 9d51d8fee92b81e3bf9bfde96637450a755ea1051ee8367edae31aaeaeae21a78e280693bb986f46680f07f42b9ee41b431e70ce3d644b092aa807b7efd1026a59bcac8e53b70284e27505ca3e987abc
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = fec1235d115354e198b340fcf18bf911
+Nonce.0 = 937c5499ffe04d10
+AdditionalInputA.0 = fe52ccba22469414564ed59ec87d26d3
+EntropyPredictionResistanceA.0 = 3e33f5bf1c0495746048194eb198e1c6
+AdditionalInputB.0 = 61bb236cae59ccfadbc1b8558913ade2
+EntropyPredictionResistanceB.0 = 44e1caa5ed987020f851417c3eaf4a65
+Output.0 = 55ae31bddc4a74013e5c420b16f94f4e7683b4f4203cdd641d6e5a0f2216f35faeaab405d71e76eb920c7be3d8736d70d015e942b1fdc73730c5cf8ac4bc6ddd20e65ef2e4bedf5a60e9e755ace29fd7
+Entropy.1 = 6500828e75ae601729b558bdf81bbd34
+Nonce.1 = 2c8f90c84004221a
+AdditionalInputA.1 = bf58668b367421d528fb9cc58a47a2bb
+EntropyPredictionResistanceA.1 = cf1f3a60f2defe74587a96adc704f66c
+AdditionalInputB.1 = d5fd8103f56edfb711d50558e2ef5c77
+EntropyPredictionResistanceB.1 = c95665fa5a847af3dcbe43f5bf81e3e9
+Output.1 = 22059a639a3529d55960b065c0cc0802a851e1cd81b91ac76ca87ace861d301f40bb83bf7806e0d223746dc2fc6cf9a9b0ff00369fa78e9b912fe004ff5971ed0ff4c35468182fade90d8d2c2938559b
+Entropy.2 = e2b57b1d5945d8be6184799a75d34801
+Nonce.2 = 02c6844e49f977a9
+AdditionalInputA.2 = 9f2fe8409491cdebe395a0fba982eed8
+EntropyPredictionResistanceA.2 = 86f7aecaac4df1b027da1623edeaba22
+AdditionalInputB.2 = 21b043737e07ee929a3255496cc22976
+EntropyPredictionResistanceB.2 = 0473bda079bab0186d67268c53856531
+Output.2 = d9fa9379c9b927e8f9ba1e4cdee1c2e13584e5a5aa90565246e1908981c17469c934403e57e295c0694321d86243c4c860916c9f65a97fe6baf9dca74d760833060b42fa0db654d6159321e7e0ffe291
+Entropy.3 = 680e4f03f6baa9ff7fa0d8d11f3f8f99
+Nonce.3 = 9f4117928edaae8f
+AdditionalInputA.3 = 0bcc44572e3841fc61e04261fa837d3e
+EntropyPredictionResistanceA.3 = 2a8cd5bd87f4cc3d3b4063662f89b176
+AdditionalInputB.3 = f0a916bb87107202075752d31f0db68b
+EntropyPredictionResistanceB.3 = 80c165c3c8d3a308752e1e24e872f689
+Output.3 = f24c5a1c9b292b7157f079964e64cde65ea5d3c2902cd613b3ff4d4891569971c325708b052a14fedc074bd4666caa3b8cf79aa7b4132922bdb38999baf4e9503b410d034b11dbd72290574a65c32b23
+Entropy.4 = 410e1b6e1d8226fa171433e14ef3d591
+Nonce.4 = 5cfed55d39730f93
+AdditionalInputA.4 = b50eb4679ca7cf74a344bf4b02f2da8a
+EntropyPredictionResistanceA.4 = 6f23f5d081e22aee0a8c630aacdc65b9
+AdditionalInputB.4 = a86ae51710188c6e329b55a1dc2f4710
+EntropyPredictionResistanceB.4 = 4fc17b2233c672131704aaf8e03f3a56
+Output.4 = 60327824ad2b09febf1384d48e7c57a056010210890a290ad3e12d1e316e15af8a45a726ee1bbc428d9ecaa006e50135337b405b141c6b899b11dd1fa73cef517349d85e6c06445a8008c734373a70b5
+Entropy.5 = c10972b370ec6f02f8912bf7bb8a9ef1
+Nonce.5 = a03879a2fbb63a27
+AdditionalInputA.5 = 1b04985eeff35016760dc4b037124c65
+EntropyPredictionResistanceA.5 = d4a35f38d1c00149457dc113afa5f8d5
+AdditionalInputB.5 = 7376ab39c1dfdd0e4d757d3586d2b454
+EntropyPredictionResistanceB.5 = 075a33da95fca6a63e432bb3b18de948
+Output.5 = cb7e19005f570b44995ee1cf6001dd55823acf3a9c45f07bca9cc7166c5bd84ca9b19f0d429e2747f5ff4d828f94aaf7ef116ce9cd00d628ad0330da6983d6f5cef07315dd9b52fdcdd73882cd96c64c
+Entropy.6 = 727a7abaae0a679cfd8f83358896bbd8
+Nonce.6 = f8c63a2b32a0b3ab
+AdditionalInputA.6 = af2c732132c54f953b22642900f1a71f
+EntropyPredictionResistanceA.6 = fc707a51a319f857f412d55717074850
+AdditionalInputB.6 = 4c7c613f5d0f20128ca2e843a0366615
+EntropyPredictionResistanceB.6 = b4f4fcca6e462babc201adbacbafcf3e
+Output.6 = 7e8418d8cc36535572aeda1ace2121d87fbd912e4c8b522526ec2a64109f98d9c89a0922d31950b3b5a466bf57fd46214d8364ccb03a7285f0c1a0fda7f5e7e68555923ad03ed95e8776e93aa93bfbfe
+Entropy.7 = fec0a03986d88a771df739aa6adc35d7
+Nonce.7 = 50c680bd60ac91e6
+AdditionalInputA.7 = 669007b5ffa3ab9aea69bd31b9f0e821
+EntropyPredictionResistanceA.7 = a1c54839c86f7d4bbe48723386ba7574
+AdditionalInputB.7 = 0513537fd93cc5de15407b465e62d754
+EntropyPredictionResistanceB.7 = ebba797b8880e17cd29e93ea57e45a30
+Output.7 = a7edc6ab2802038a01fc77afc1a22e557f3bb58780a47732977f1f5ed8ff6201a5ec50640c37f9a6bfe5e01e4394adc810bff22e57163102219ddbd53688a347d463cdb6b8514199098def94e272a478
+Entropy.8 = 77786afe5f80a2efc02a8593efde58e2
+Nonce.8 = 59690eaa77308950
+AdditionalInputA.8 = 743c2916058961518ebcee0a06ed2d6b
+EntropyPredictionResistanceA.8 = 14e03724dcd356976b6b2e453dc336ed
+AdditionalInputB.8 = 888281462650b37a029c01c59e648c18
+EntropyPredictionResistanceB.8 = efd7844aa7379347bfbffc6ba6f2be77
+Output.8 = 0184044770dcd5444bcc0a6e54e48d77cb3d642ba88083cef2556d7ba1f14e6669a45d7ebf207849d95b18235e6bc62910acea7074e3ef31a14212d88ec11225265dcaba4bbdd70c543b08c17917e4f4
+Entropy.9 = 54f949e53818a13e02ec81783c94fc21
+Nonce.9 = 0961ca4af9d6b075
+AdditionalInputA.9 = 7cd1b8babe77580a8fe3d33e9028ca40
+EntropyPredictionResistanceA.9 = 684abc3cef00e626e8ee5d306d3d5773
+AdditionalInputB.9 = 2b95995ce7888ba145e3075ff3ea28f6
+EntropyPredictionResistanceB.9 = 6288fafababa956c8126235499b07e7f
+Output.9 = 7bc8c08049a7201019556b1859db044deeeecb783b37342c7939fc1051f776e333a1728a6c2ed137223d7050bb0b28b88c279da1741e84e85728bf047c9c998d776a81d13214fa5fa75854826f11b80a
+Entropy.10 = c920562ce8ec7e37828af0edaa7409c3
+Nonce.10 = 5c6a79c6e9588bd6
+AdditionalInputA.10 = 5a0b7a4c127aee8e4a3517133410d901
+EntropyPredictionResistanceA.10 = 905e5ec653a592794910907768271fe1
+AdditionalInputB.10 = 41682ce91fa8363f49f0f30a8607bb17
+EntropyPredictionResistanceB.10 = 05da0c5303e7f3d3191051a175edafd5
+Output.10 = 466f74fbd3d9d4fe55c39f37f2c955639ae8b29c06deeaebb97f5f10432ee78f0aab5dbdf2f337a34a4eee8180a82507f172ed277064eff6695cc5f517eca8fbb4465122e6f3032cb2f2bdbcbe5ba157
+Entropy.11 = f91b869cbfb703d5fa9d0453788ac641
+Nonce.11 = ddd889df07f0e919
+AdditionalInputA.11 = 49cda82ade8aaaf9892d0604f804fb0c
+EntropyPredictionResistanceA.11 = 7f0f106cb0cb40dda9a4a0b5db06ceda
+AdditionalInputB.11 = 5aca208e57b3bd428e084e571aeed71b
+EntropyPredictionResistanceB.11 = a1bd017abedb1570d0eb12d501e750ab
+Output.11 = 7b903d0971bab2bd0a6b171abb4fac228e8ae2688148283f9ab73f0e880350003c88c6cb7b4f4f3df071ae5eefee679404efc7ef374c6a0900e3d0dd2af294745ac1b0ce985c2fb92dd3721d8863e9b4
+Entropy.12 = 4f4db658ac3289f159581c972f907116
+Nonce.12 = aa79939120ba9c5f
+AdditionalInputA.12 = 819a61d353b67ba217045914ff21056b
+EntropyPredictionResistanceA.12 = 52b26977b80c3b9402172455175880da
+AdditionalInputB.12 = aa543b08cd2f973d770ed99058a51555
+EntropyPredictionResistanceB.12 = c7ecbae396d51fc159e6d1f7c0164408
+Output.12 = 06a85616a351c53a66fa5188857dd7cd5dcbc97604c66539f68bdddb6e22a1e83b000560dbe567725f04cba38a0bd44ea066ffed603da2b6ba6eed7e2963e4ecec828c9e073237e7d4a420cf2f08c840
+Entropy.13 = 2a4cd36c234572ba45abf3357e9e2415
+Nonce.13 = c53ad82cbe6a9f79
+AdditionalInputA.13 = 8e950a75408d1163f5d68442c61e543d
+EntropyPredictionResistanceA.13 = ab2e5f066dc7e1086cd8eef7f7e0ae0b
+AdditionalInputB.13 = c063b68385cd5828c29a27e4ed2f927e
+EntropyPredictionResistanceB.13 = 51ea1023fc92210b52f6feb9531d0958
+Output.13 = e4ed1d4e9f808f234da384a14dca39927379a812e8e1e8d631ba3d6eb614ac3f3673f8b713b50f36b1203dd690aa0043f291513f5323113a86b5ebc4c64cf7e1a1a8b55433c0cb4b5a2a2009f432b87e
+Entropy.14 = dba571bc43f58b03185380e892e61f41
+Nonce.14 = 6fef84f5d52591e0
+AdditionalInputA.14 = 08f60d13675c1d4d6bce54d065441194
+EntropyPredictionResistanceA.14 = a18fed140b764135d5b8a46ca72c83ac
+AdditionalInputB.14 = ebb07f09b1376073ef9aaa57ffb55b38
+EntropyPredictionResistanceB.14 = 2d3a6a6ae7e2b073169e8d14a34b3314
+Output.14 = 2975bf202a2bd2cf5db96db0ca08ab1899660dd6381832188b36125a724f7201ed7e923eb91a97f8985f8ad647620d44bea9628f078497cc934757612bcd92802acc592de3d023e2c7dca8acdd3175f4
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 4652da57429a76d6fe9e0e1fbb2f3ccd
+Nonce.0 = 5044e6ab2b552066
+PersonalisationString.0 = 96f187867c057ae982e03a056bbf0f48
+EntropyPredictionResistanceA.0 = ca890d8453821c32c4ede3d3902b1306
+EntropyPredictionResistanceB.0 = 099a2a45526029fcdd2da74f638500a9
+Output.0 = 684cc1695b5a4b5d50d74290528ad55622598618eb8edaf141e41a8906f3bf940173383688a861ddcc564ede0efc3eeb3b01897f738523a5fac99852c435bfed58eb4a6fd7d0d5669a6aafbdc8d4fff9
+Entropy.1 = d91af6bcf070cf9103bf470694b60ee4
+Nonce.1 = 3891fa1fee9bb639
+PersonalisationString.1 = e53ef39389bc0212675fefe92532181b
+EntropyPredictionResistanceA.1 = 8c25228018f958475c92b25243f5a298
+EntropyPredictionResistanceB.1 = 3f296e1506a207b90bd2f6fd8c904353
+Output.1 = 4ef0df19d1e19f120463974f0d6e18e1ad22e32d153368d0f51339faab40cc91262a1126f1a1fa1fe2297c4ccbe35733ffa972f0ffb2cc29f94d6702c1fef1b08225840b1b1bfa57555821a92fb7de88
+Entropy.2 = 0f1369de5b0a37522df5893b6142a86d
+Nonce.2 = fa8288fd657eceeb
+PersonalisationString.2 = a43ccc902317b08315647639af14a298
+EntropyPredictionResistanceA.2 = 9e2bc9bba161d4c8924a5537225547a1
+EntropyPredictionResistanceB.2 = 2f86df1931fac02084acdd95c1e5dfbf
+Output.2 = 52405abde967e6e49a88dd4df2faa125e44ec32a20a125b4f6fd742f78078392835588b622052b036c08cbd1ce7d1b858b8242a39b7739c5b71f3497c56eb85c70d759f51ed3d27da5f1f8d4614653f0
+Entropy.3 = d8f0c2d010cb850a21e20b73d3727a48
+Nonce.3 = bdefcdcfabd9aff1
+PersonalisationString.3 = 040cb135f6d92b9689e077e22d427946
+EntropyPredictionResistanceA.3 = a8411a1895a2885ee28524c9d85b6dc3
+EntropyPredictionResistanceB.3 = 85ad47a372affa74cbca1ef593fe5ff2
+Output.3 = fc9fea21e9eb86b57e67794adfb562552a418ef46624279094951b092be3905ee8019e2d2246161cf807becabb31fe5cff01932399980539450c8ca9cbd052cafa342ef3d04385866a818cf5ebcac89e
+Entropy.4 = 6b22b5c9d3df671b328ce1a616a85593
+Nonce.4 = 27f02fd51b1db956
+PersonalisationString.4 = 05a234c3244301bd8323107acc108ad1
+EntropyPredictionResistanceA.4 = f953b7b6be6bf482241d732da571f2a7
+EntropyPredictionResistanceB.4 = 79c65754c34cd6507b56cfd82884cff1
+Output.4 = d9524d6c3082ebc2d99b2b9d65b082ad562222d919bb9830a1119f1d135c8684bb248623126ecb02f2bc44d21afc83ee43f8effd86a097a6c9406c46efee1d2fbc9294be57fed212380522947b6ad85e
+Entropy.5 = 0e1cbe197fbffd26c82d0c295fca25e3
+Nonce.5 = 675e1d33a530af9c
+PersonalisationString.5 = 4003007d3456dc5a2eac06b8bbe99cbc
+EntropyPredictionResistanceA.5 = e67dc7c7ffa0766f0bd1c696809471df
+EntropyPredictionResistanceB.5 = ad2b4c766ec331335bd71bcf169506ac
+Output.5 = d13dd1ae9aba46dc38d9c789b1246fb2a488f1d9c4f86da973d23dc664cf456e7ea047dc4355842135ef7235b3a63279d2a1ff983f0e6781204e5ae20307d6d3eb55adeebceec4943fb6c9d2ba6d09ce
+Entropy.6 = db7232ade4748089b64e93b93f7fecd8
+Nonce.6 = d9769b8ec5d145c8
+PersonalisationString.6 = c217e0456a06d498bf11e7093645c167
+EntropyPredictionResistanceA.6 = 2e1e3b3cb486155c0f929689c6900c53
+EntropyPredictionResistanceB.6 = 5f816042baa0b5d5cd6a1fedbeadce26
+Output.6 = 68e74acca08eab678030a4cd9fa162c63d82b36c4ea0af26ba588ee5c6ddf68e25dc30a9584b492038970798c7b1ce8b2007b34066ce6ec54f66b18e661bad80581b5454ffe6b09f8bb1759fb2350889
+Entropy.7 = b5cad46aac96d90ef783ea6fc0937df3
+Nonce.7 = 511dc22fbddc77ae
+PersonalisationString.7 = 3fa65c338663cdf11cab877d2522b9e0
+EntropyPredictionResistanceA.7 = c4fb932cfe7133d76566b348455a632b
+EntropyPredictionResistanceB.7 = 0547c103165515749ecab6631f77aa69
+Output.7 = 9dfbffddf473cc2820c0fec901750e78368cd2f23b9935001c61a22ff174b7e66e153c45e8a37f0ba1f07d5a0c6e78c6d0a62b570d5d66f0eebf718cd810eff4859a57f683f3fee829ebd305799dda3b
+Entropy.8 = 3e6d413dcee490fed9aac674cba15a74
+Nonce.8 = 391d1bc5e780473c
+PersonalisationString.8 = 59b17ec316f224e9b6e488f53bb39855
+EntropyPredictionResistanceA.8 = a95b61e04cd8334041e31d94eaddc84f
+EntropyPredictionResistanceB.8 = 23e1aa92cbd0e48d873a4462e27b04ee
+Output.8 = 3d97217b1d5655d6383f3fbc97151d25231eab89327cfe1368d8376e8fca87756265735c415a55c7620310fda9440b64bb23c4ae20e2e0734670a0136446a2cb4aa7d46ea73d592d0c19d5875a3c0423
+Entropy.9 = 302da97943080319318e6e314bbf308f
+Nonce.9 = ba52b28bed36a606
+PersonalisationString.9 = 6bbd7fcf170fa4ce5bb34fb735a97131
+EntropyPredictionResistanceA.9 = 01a113e0d47c69de23a744b80027bec0
+EntropyPredictionResistanceB.9 = a03a3b98a9e40e3ef9219cf4d2ea9b27
+Output.9 = 26423960f4494bba395a98fc7eacc3bdce22380e11aaa15c4ce6859f0752e022bec2ae68ea00b1775130136ca26c36acc3503735df0fbef3740a462ec48299535d69706cfc931b0706ff3b72d9874d15
+Entropy.10 = 4694df70e16d8663d98bb8278ed26f69
+Nonce.10 = 344fa9858d677ee0
+PersonalisationString.10 = a66d66e3cb78cd5fa8ee53f80f93e37f
+EntropyPredictionResistanceA.10 = 097fbaa9c913a028528437778e76b0af
+EntropyPredictionResistanceB.10 = a97d6c29c4471b5da1ecda2c6d64ab20
+Output.10 = dd38f8553a1cbb3e05f4aeb4b916dc13f05498aaaf32856ef308cec834a1fc2ebcde112e30f1e59d7af579357de0c190591451d7403b2aa527fd8a242005755f7c3a9e3f61bca824f3b272f9094c5197
+Entropy.11 = 9c1081e3a93c8d6cad3bf0faa27d5fb9
+Nonce.11 = 2c23bdb32fa3e701
+PersonalisationString.11 = 11366cf2d0081b8bbfa629de1a58e1cd
+EntropyPredictionResistanceA.11 = 49d678a1bd06670fd5670c7b7cc3f9e1
+EntropyPredictionResistanceB.11 = acc22d3912595464da7e0f49ac49668d
+Output.11 = 921aafbf527156297ea1aafbc886906667ca1d590d486afbb9f504e3e9ceb5252857b33f74f1a07fd55d6a9c5b0617c473b7fcf0d09841bf2cb342ad91a4f0cda594c3c12d95a2d5b6dd58f12f5b1224
+Entropy.12 = be73c20cdb2c9b9d2dad569181deebfb
+Nonce.12 = 94aac1fb6575e731
+PersonalisationString.12 = 6d28ae429b04336d7a936c33b6fe6608
+EntropyPredictionResistanceA.12 = ef8b5e5125170375fa110560d456d010
+EntropyPredictionResistanceB.12 = c0e5d974aa89a4cc7d1dc6215cab6275
+Output.12 = 69cd3eabe236d76fe8fa8275d6a8b99aaac7e678cc1abeb8eb64d8c76cdb496e6da292d14601bbc55c3898265e7e6b910f694c4a84607c4a12f2ac2e507906e2ff0764df0e5b8fe1b3120220f4dd78be
+Entropy.13 = 3587fc630f8aa54dfd658bb63c9e134d
+Nonce.13 = 304a65c88a51d301
+PersonalisationString.13 = 96114627fa5b078ff11dcfdce2c8e606
+EntropyPredictionResistanceA.13 = f7e2ec9c738d9a1191a18353c6188cb6
+EntropyPredictionResistanceB.13 = 89c382c3ee25fd8f4a5341a9321e5cda
+Output.13 = ddbac94611bb3e5a9941730e434113fd25bffb3636caef87aa9da8fa718162f1436ed382d40b3da7bf51e78d3bcd786e6abcabad631f6324a894c4993a8293599916739e930bc9cffd87a79da5f81f21
+Entropy.14 = a4171a4954523855dd3606a8bf3fa1af
+Nonce.14 = 8502b36687778964
+PersonalisationString.14 = b31ad7b78baa695b20c2d4556baf78c4
+EntropyPredictionResistanceA.14 = 3a34e470660eca3f6f0fbaeda83e77f3
+EntropyPredictionResistanceB.14 = 656bca75138dba51380ef467f30bdfb8
+Output.14 = 7612bffb1c7e1587b27f33f860396748d50038645d45cac000d797e09721ca01e065c596b42ab3e05e0b28a3a6a61bb610f513b86ad4829a8335f5d28336be15101a2ea1d44bcbb2270e46e32d120063
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 8b769915917bbf4e4b48f26639306152
+Nonce.0 = 17ea14e8ad5446aa
+PersonalisationString.0 = 9994ed56b1355a6d603e366a8f9c04a9
+AdditionalInputA.0 = 1b8c8b88d7ce96eb7abd03b5551ce99d
+EntropyPredictionResistanceA.0 = 36391d0d897510aa844c9920488d49f2
+AdditionalInputB.0 = fab6fc0acb22983865c3836253718f31
+EntropyPredictionResistanceB.0 = 74c7b54e9fdc824fc8e0463673ef92bc
+Output.0 = 1f07772a46662b3750e39b3191fa74c8354f9d7eaea56ba0d29272d071ef6da2411cd05b64762e27a736b088d92dad4f222efa3e3ca2bee0d5f1401d7ef53e3842132181511a5159bc8ea3a6db1215ab
+Entropy.1 = 07c3a6593df5b6e9b33ef71ce4bd2b13
+Nonce.1 = 41fd8dfd4db634cd
+PersonalisationString.1 = f4320d4efd9726f9834f268fd1647602
+AdditionalInputA.1 = 2f80e391aa29caf1f268b5334df67c4a
+EntropyPredictionResistanceA.1 = 33060c247079f05b887a7faeaa9871ef
+AdditionalInputB.1 = f56e25286a041b2e5e40ff2bb91ae311
+EntropyPredictionResistanceB.1 = 6fdca85056985e87bdf587330fc775dd
+Output.1 = 4db4178913a4dc460f89ef1e0bb1c98a7b25fc0a8b3edd53394d430fca86448e2c57c6bc288d53b511a2db784d053b314ed72129dccdd28687b0f7b7a9aa79e554f3019998aeeb7eacc89c60d340f44c
+Entropy.2 = 5fd3c0db8216ed74af1cb6f079d39fb1
+Nonce.2 = d6e99b0eab2aab62
+PersonalisationString.2 = 0f62645c3026ff59afabcbeaa8bacafc
+AdditionalInputA.2 = 24852e35e3cb3b785a4af98e871fd262
+EntropyPredictionResistanceA.2 = 7f63735b449351c36e40b0f856be5021
+AdditionalInputB.2 = 7be9a04056c07a81a0ebc180292dc661
+EntropyPredictionResistanceB.2 = e3a29cecfd36639461386dc6f615ed57
+Output.2 = 6afc8c6628ef2036170c3f8cee3353654d64968994c2ed314022c27bdf4be1bbf06930c02130d85e4053eff47361ec7ba654a6de340fb44bb5b0ddac8b106f31493f011220dabffe4ba7d073d7607826
+Entropy.3 = 5848d1ff38a42763de0b94139c47f367
+Nonce.3 = a2371ab486abf3bd
+PersonalisationString.3 = 1468ff4c5d57fd9341f8e36daa2c1b81
+AdditionalInputA.3 = 6f6d75e200e4ae75f9209dc85480bb6d
+EntropyPredictionResistanceA.3 = dcdf0eae3f21bacbab5a45fd8699f92c
+AdditionalInputB.3 = a15cd506c24f12e0c227912fd24cd4fe
+EntropyPredictionResistanceB.3 = 69a8cfd06018f5a15f3cadb4223061bc
+Output.3 = 8786baed9f820a4ab3819d04512b55fb1ef2459e4272c3bf6ec386b8bac5d7f93a701d6f48306ca497af4e35b4f8dcd4d1d99e42f8dfdc4092a6ee9acaabf01dbac68e980019a087bded29dc936e76cf
+Entropy.4 = 2885bb6da3596ce71b7086890db8f8f2
+Nonce.4 = c516e471975749ae
+PersonalisationString.4 = 8d11687572c107eae6410a2a7afd8fe2
+AdditionalInputA.4 = 3f5645b408fcf576b67e5eab6e2c7886
+EntropyPredictionResistanceA.4 = 9128a45e21e07669e7facd51bac8f63d
+AdditionalInputB.4 = 3cbc57425f22d6b03a64b4fef3c6eeee
+EntropyPredictionResistanceB.4 = dc3b6e6def329b7fed2b309a6541bb0e
+Output.4 = 889fdffe6e2688e259a45a244e54c413d922d6565e4cbc9611d9daebf36bdc7d0b37a0ce0b86d3cfd9d9910da2e1d140b34153ffd679d0b5501355d71cc2d106fa9acea87ba200bfcdc3d2509cdb145d
+Entropy.5 = a1a9f39c7a9addb61535badae94c3187
+Nonce.5 = 551b2685e7a972ca
+PersonalisationString.5 = 7b60c7f7838dcd3e18e879f41342b984
+AdditionalInputA.5 = 1ea0cb7a81fa2eed3deac806ebd568f1
+EntropyPredictionResistanceA.5 = b8ea72a397b78462a6b94a35b3fe839a
+AdditionalInputB.5 = e667710b0945566008ba7c435b9f171a
+EntropyPredictionResistanceB.5 = 8c778c4d08d0eb5b372d61a96fcabea9
+Output.5 = bcda484b04522853175f3c84d94b3998e05a07950ecf46c40e0c54518ad1fe1dbd82831b348c1774b1c722722f7cad429ab9b881b06a75efe60910075d32d4edfee60b1a70a90be97dcba4972552ef76
+Entropy.6 = 835fb2a538761d0ff8ed920b0ae705ec
+Nonce.6 = 7d4b508ca2a0cf58
+PersonalisationString.6 = a5e516d0122324782c50b060bf219d1d
+AdditionalInputA.6 = 8dcfb684018ffc17f9c9cb81cc568fd6
+EntropyPredictionResistanceA.6 = bb8d1cbb87c8a530bc91f83bad4cb783
+AdditionalInputB.6 = d01cd1b69174eb1b55b794bcf1544da8
+EntropyPredictionResistanceB.6 = 0077710469987fb09a285d6ca946a285
+Output.6 = 867efddd5a6df5956fea56316cd6c9f07a0d36781bc10d10527b9666a9fe1b3b3ffd3ca9cb359e736042788e14502d46d7ef63cf43a695ecb4765aefd4b7bd98bfb58209e2cd3a54d5f0a4fc689bbbcf
+Entropy.7 = 2833f5e895f432451870fba9cd210ba1
+Nonce.7 = ce1d9dcedc186512
+PersonalisationString.7 = 2f048ec625f294c2377251ebe4b64790
+AdditionalInputA.7 = 6fbfbfcfa9417717e5851fc0c5a94f3e
+EntropyPredictionResistanceA.7 = 10b102291a16027e4f8627ae866aacd2
+AdditionalInputB.7 = a287e533494b38bba3632df494bfdc9c
+EntropyPredictionResistanceB.7 = ce830613d9e2f4a328d7549b2116f8fc
+Output.7 = 2f579079be56198d8a0c9b33e7f74b0bef2df14fc75149ebae5911f57a06da6f37035fe46f8f3499b9cb0aa071c8dc46f80f2bc504284bf77426ca3031bfe1bf054e597ba90abb5c614438c946394fa6
+Entropy.8 = 212e70af2e9cb5c49290d1aabb96e286
+Nonce.8 = 42b4943342dd19ce
+PersonalisationString.8 = 6b9b397e806f68fa4b50736cb02c25a5
+AdditionalInputA.8 = 31eba3281c92d498272421b4481a593d
+EntropyPredictionResistanceA.8 = 292bba7bdb534b7e4e1728349673298a
+AdditionalInputB.8 = 62440205c920df281aa721ad717df9b3
+EntropyPredictionResistanceB.8 = 7cd1276a39167e3df8d0866dbd8109b7
+Output.8 = 476e7ee50543a25f856eb2e16c4369dac6b27e170df7947e1e8c46ba9e89e8c6e729ff159f702334291c08c77610315d25a211881006064ee7f313a772ea1ca07375af340b39255ac56788807f322d11
+Entropy.9 = b5eaf49a43def5f7f880c324d6f74db3
+Nonce.9 = 0b4f3e97a0964b16
+PersonalisationString.9 = 7b2a909728156f6171989fe17c1c9c11
+AdditionalInputA.9 = 0c5af0a591d4e0cfb9d01b59b5ccc72e
+EntropyPredictionResistanceA.9 = 8ff4a82cc50cd0f2ad5a8db4c3cef1b5
+AdditionalInputB.9 = e46276fee7e96e96c25dd2790d951075
+EntropyPredictionResistanceB.9 = 0835f3055975cbe3de9ddf9b3bf6e253
+Output.9 = a2a9db8ca58191a745438dfe991a5e2d70b194ce0e4e5ca4891bbf16832fe9f300f45b809a1b9961f7f891b964d4a62819591128858b1c753fa8d9d60aa21323bc063a786414078edb70dd69c4970307
+Entropy.10 = 81ca315f7df79d0c4e29692e32fd437a
+Nonce.10 = d53d2c80bc5a9a7a
+PersonalisationString.10 = 70eccf590652d7980e282f9091ecf219
+AdditionalInputA.10 = bb7f2cb9d660dc4deab77307bd7693e2
+EntropyPredictionResistanceA.10 = e5b9135b25f5ec5c7280a2acdc7f8797
+AdditionalInputB.10 = 1f217647927e26dfe2d6ba9884450e44
+EntropyPredictionResistanceB.10 = 707747451e1ea9f6a04f85f1a8ffc598
+Output.10 = ff64bb5600ed2adab62d967d6d417b6c910867569cb9080ff73011b5dfb095583b1a7be9969b75b97552e1861a7dc3be15862168b99aa1dae12c0bcdf02aeb910f068c5abfaaf1a127239815ee67273a
+Entropy.11 = f8b78d887b5d13f66af04adcb42e7e1c
+Nonce.11 = 1eff25c603ae9b5d
+PersonalisationString.11 = a1e87b1042090f27a8d81dbb8b21b4a0
+AdditionalInputA.11 = 43624bb96b7217fcb96bc3a4d73b7ffe
+EntropyPredictionResistanceA.11 = ac71fa902f80300bd327317ceee36e51
+AdditionalInputB.11 = e0709fe99c2c3e3f29ebba8fbc6b444f
+EntropyPredictionResistanceB.11 = 7ea5114fbe72e83e65a6499ec837544a
+Output.11 = c92e767e343a8f86fc726e00f22fc0a0cf684f1fa664b94f121c1ef43503f93cf10a59718536e1cd9cd07c69ded233de60a36a778546a21ab1d1b539a2cfb2da910ed87243231a6595de303630ddc2fd
+Entropy.12 = b98bef266046537cbd871a3991091c8a
+Nonce.12 = e332b54767ed7feb
+PersonalisationString.12 = 31a633e0172b35ed67035ad223f1f6f1
+AdditionalInputA.12 = 912a0ec797a14da2c3dbadb233a2c5ff
+EntropyPredictionResistanceA.12 = ceee0b9be89b7bc3f68f787ae129db2c
+AdditionalInputB.12 = ed51877b1535468cd6669f0b8cb5814f
+EntropyPredictionResistanceB.12 = 8a708f39acf446cdbef25c9ecda3161e
+Output.12 = c149ce4701ba0e45af8d980e3bf977e9482c07288347651c141a76947f7675e3e5a5eede7d4316c46826907f40dd338901b482a0f39d8473e04f4aec987a36edc88f9a2906140db292a2a49c8ec57100
+Entropy.13 = d20e13a77bd8e506e9b7847f0fb39131
+Nonce.13 = 7ad88ade8692e45a
+PersonalisationString.13 = dcc8e541294a497de2be4143056ce061
+AdditionalInputA.13 = 98d196edead2a4edbc2d89d81b101cdd
+EntropyPredictionResistanceA.13 = f65123cd87d7247ceadb52071bd7eccd
+AdditionalInputB.13 = fc06d1bf8d28346fd6ab3206c1385400
+EntropyPredictionResistanceB.13 = f2b71c01303a1f756942e8e9572b2172
+Output.13 = 9daa1c518aaacb007540be47851bd18555107e8c31f88fae5178e8f0cbd687bdbcc9697caf02e02d2b92e6445aa5a1de351b8d0d1b50450acce00f1465dc81ad8b23f5842c02847e73885f5f167599a3
+Entropy.14 = 8bd916a12cc10ba4a650afa4d7697f74
+Nonce.14 = 4a0731db63daf30e
+PersonalisationString.14 = 17fb8dc30b7757064ae60af535baffe8
+AdditionalInputA.14 = ddb1ce525c07bebecc17e0a645f0b1e5
+EntropyPredictionResistanceA.14 = 071c5c159c34e1c57dd0c9cd7554794f
+AdditionalInputB.14 = 8841c53f70a2186c86c1452f879fed15
+EntropyPredictionResistanceB.14 = b28c5a0b551a3be90a8fdd9e5015cfa4
+Output.14 = abfc047cc83b727c0003b88da46c85a9dfb54e3af8a1c9bdb6b36e46159e0429851da4fdeda9324fefc2504af866b969dd26785be22ded099b4998a6780011b2ce8992a717e5863fae1133a61b1629d1
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 201e944feacfc58dcbc100ba29fccff0
+Nonce.0 = 5e7c1648a4727f55
+EntropyPredictionResistanceA.0 = a0967dcdb554d2d06629a295138508bf
+EntropyPredictionResistanceB.0 = c2a03e5e406e49049a45b6b54782a50a
+Output.0 = d585d5d5490c7575a71dd107344b15dda44c68e70af4287cd3eac2962427e3f86801ba3ba5f8be9275bd147756ebf15286c586f1e95515a5587ff10a334f969bb2bc52dbb8e9061ee57225852507b336
+Entropy.1 = 8cc3469f8aea5417e773efa310789cb5
+Nonce.1 = 94efae8ce9ecd651
+EntropyPredictionResistanceA.1 = 8974f50028ad8ea395f1898d14d838b5
+EntropyPredictionResistanceB.1 = f647a3eab512709cc2637d51da32b99c
+Output.1 = c60e5808816c326a6f6ae99929bbdf2e20917ae7455b41ae0ca7e9b285912adaf74bc50b10ababf9a071ef787a05dbea1666288d911f8faf39f098cdb2a3e7650dc0f7969c2c21a39851a8cffd3b958f
+Entropy.2 = 0e7da536359b95bf692c2690989b89b2
+Nonce.2 = 530f2fa6e911acea
+EntropyPredictionResistanceA.2 = d873fdd36d827f391c860380aa540346
+EntropyPredictionResistanceB.2 = 83ac25ce721c726b5014f52dd11b54bb
+Output.2 = 0fcc2db083bfc5812ed9ebcfaab6b1404e13b115fec6026be2d77bba3f250455114f6df59c2823461b0e481de0f3fb7e3ccfd43fd4e66aedaca0851c68b105fbf86c119ab841edfd745a9958fdcd905d
+Entropy.3 = 36bced9bbfaf2d7371a8864beef39dcd
+Nonce.3 = 7165fa542538ceb6
+EntropyPredictionResistanceA.3 = e5f642f0a0835aa8a73a950fd97923e1
+EntropyPredictionResistanceB.3 = 0eaed52859bbda59a7c0590f7946c7ab
+Output.3 = 3e08869284c49d00c211448b56d94089055d8aa964be4598e7a2981888a8a25b83c3dd31e17b4fa25835c489ab9089a70327738c9e64ddad58e904db99d07585e071f474342009c8fbe0c05ee1af92f5
+Entropy.4 = 855793c4238ebcf35a2cbe5ab740e12e
+Nonce.4 = b89d2d7d00a8f530
+EntropyPredictionResistanceA.4 = 98485f954d026bd68eb1c3b35678e225
+EntropyPredictionResistanceB.4 = d7fe04e9d176183edc75de42c946d11b
+Output.4 = 3969ee554807275c02771af1784b3b7a56b8859043fc2ee74d38bae7026dbf288518fa71c4d4382948d8df5550c2832a205a6f475f2b277f8c2b2a02211af4e6e9c1f7f8794de3a55210531866b7345f
+Entropy.5 = dfbc39bcb1453346e97cfe6afb1291c2
+Nonce.5 = a5668e0432d81f98
+EntropyPredictionResistanceA.5 = ca2cb5430c9c585b153356f6ed3d63e2
+EntropyPredictionResistanceB.5 = 46f805406e71adf99a878789e23e853f
+Output.5 = 949d480079597a8e30d9abadecb160662b063cad0bad4148fa4ccc3870b3a30c9230a29f9047b5367099b21b718ee3723c938173274ed789ffc052c1292faea620e2b5e8c3586593f931288af6ef3436
+Entropy.6 = 652d3a2a97a9283a5d4554f3a62694ff
+Nonce.6 = cd14acfb14ecdf73
+EntropyPredictionResistanceA.6 = d545362b20e982c8ae006a32af88e14b
+EntropyPredictionResistanceB.6 = e08cf5e214f7900448142e0ca81d6a53
+Output.6 = 41aacd201a8a94044056b66f5d98c518577a59341a0c3ce8afbbc91c5a74ed12994c8eb2b7fb18e43fa2912dd58bf3e254edaa7399145d24ab23c00c69b359aeab260388f5653075b3d2a4747dcf3fc5
+Entropy.7 = 00a7c55f9f7d1f56c05aaa506a7ad5c6
+Nonce.7 = 24265b706bb3a90e
+EntropyPredictionResistanceA.7 = 79323104e05566c2fd645b8a451f0a6f
+EntropyPredictionResistanceB.7 = b95105db45570cd57e553dc291fd7c61
+Output.7 = ab8e730df2b88625b655213e83d6608dc750f7a412e82020dd83d4f7279411e90a2c0d38c5c43d321e3c3bb7ec94a5599ac44994c5399084f63b23f0e0a398ffb0c34ffd8d25a248a56d28b0d47a4264
+Entropy.8 = 8a5d85cb92ce226c7a999dc79ab3d141
+Nonce.8 = 712bd54f5d1fc952
+EntropyPredictionResistanceA.8 = b59af86e101da86d32d211d9ade6c135
+EntropyPredictionResistanceB.8 = d969c95dfc2d7d8d7cc0d32171726b6e
+Output.8 = 6f7065c870505ff8822ba8de1f6e5af10fba38f0571316f95bfbc82fb276170e573146452b48052643b8cba6cc774be7b3dc035420203b0b8c5958cf6b4413fa34413b63a6b08bc929a40d083e7ee359
+Entropy.9 = fe5e166895ceca4bab0813175c99ca26
+Nonce.9 = 2a59e063d8fcb9cd
+EntropyPredictionResistanceA.9 = d03bf402b38342eafb52729a359699a2
+EntropyPredictionResistanceB.9 = 9c78d869b4f6f87cda4894144b52b54a
+Output.9 = 5344593f8e3fbf00e95cd30de222520d6965e62360b49c87f3a45500012fd920afbf644f7f5f3570b32c819712606388631bc0cc5ee4ad04e2c7e3544336b747a79d19fc8d3f5f7cdda9d627ca610416
+Entropy.10 = bb0b0823fb54d40f8e36d6c833323ca1
+Nonce.10 = 0c92fe1319a829f1
+EntropyPredictionResistanceA.10 = 6f1ee19f2c41f90b94cb1d4a39dc34f5
+EntropyPredictionResistanceB.10 = ad39b104772753e87ae8189ed76ab451
+Output.10 = c72879be8474a9713ad1c4d6a9b6d886a52bf22bb3e4205d50dde3c8cb8422ab37a5c7402dcc0cf97b141ae7089aa42670c60d1b9305b8275f13000dfff12ec98a013320336ceb00ab6ba4477ded6b3e
+Entropy.11 = 008da99a27905083e0558e3788406981
+Nonce.11 = ee9dc6b34490634c
+EntropyPredictionResistanceA.11 = 8ed6832f45b8f0d189259926de955636
+EntropyPredictionResistanceB.11 = 380a18cf1b02bfe79f48b5222a1d39bf
+Output.11 = 6783e27a8e385b35db1138f60970d1d7c97db4542a98760a418ed3d9b4c31f49356817aa4b7802be5566680b6d5df3b76ac423d8ad5b7f8584b0f138628a7841421da63ae74c292770fdab4852642775
+Entropy.12 = cc539cfbaee057a44e0909dcd4a0f628
+Nonce.12 = 77122c5325746663
+EntropyPredictionResistanceA.12 = 87867ca3bb7a818b569f6ebc3478dc9a
+EntropyPredictionResistanceB.12 = 644982bd5bff9874335059fdf8e1d65c
+Output.12 = 0afc2524d8f8dde4423f99a98dd7738dd6b9b0eb3b64f2e427ff04fd78563bdf70e3a1fc2a6b63c92916e6e98cc2800e86b595c852b9fedf8ffd90b9fb7869449ac0bc0d8e39292c6bc205ce857789af
+Entropy.13 = 05a638cdb4459478f590be80019b8f7b
+Nonce.13 = cd555e79db04935a
+EntropyPredictionResistanceA.13 = 9c13b9804e2b01bf28e3b24125ba93de
+EntropyPredictionResistanceB.13 = df0d2be51d03ab91992899fcb5900d2b
+Output.13 = 36f9d5554c0b1cf7df7069d9e325d2e5a4d185d1e07c76f667fbe43a4f9435fcd8d882b3456c048d73ed65495a4799fe190afb840353750e793f1a992fe200041988279d018b274187bebfc0c6662e37
+Entropy.14 = 9525a6ed0483dc66a0f10c60bcb6af75
+Nonce.14 = 436c73355541a776
+EntropyPredictionResistanceA.14 = d3b362985bdacda7a8f19b49e629a92b
+EntropyPredictionResistanceB.14 = 54e3c97ad7dde98282c49d22480357ba
+Output.14 = d8401d76a0b1a559e3d9ded651ff597fa229df980f81592e003c5bae544e4f931db3bacf6ace30b2b7e6e3a399ed25c0a810d70e070a2e29bbe9ec1ae4ef85c88a475dc34724d0bbde2c7fcbd06e4f38
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 20308c9bc37fc6c48c80e68657488b1d
+Nonce.0 = bcd4c2bc8b899105
+AdditionalInputA.0 = 10847d4d284c4c5e17fc155565f63045
+EntropyPredictionResistanceA.0 = 4a4868538991385188cf4581a35a35d7
+AdditionalInputB.0 = 5812c6c22b77f6d5aae5404ef6ebfe5d
+EntropyPredictionResistanceB.0 = 5e11ae3ef0a6b2609728a59b2eaf88e4
+Output.0 = dafef23401c55e90a771ad2d6f8060d7e5ad8c65021f1e7770571a317fb32d330d1f0101d8eaca3dd2bc99e49999d60efd7867c0684ba5a82f0cb28df1181a4a50f450cb31ca9f061a54442df97177c2
+Entropy.1 = 089e2794ae90842acbc5859f7cda5f59
+Nonce.1 = e6c3da5bffc1ce55
+AdditionalInputA.1 = 844b8ffd7dfa255255b3cf11c87aed99
+EntropyPredictionResistanceA.1 = 45dcd8783a99a430c6a5a5d4b2baa041
+AdditionalInputB.1 = cd35df4e5d8c6db1d8347a268b7e05f2
+EntropyPredictionResistanceB.1 = 0341819a39f09c59ed7bde64789e0068
+Output.1 = 6527e5739621653f9574aa81a912ff7a54d1404222b54f609b07134ecd8ca2a2905a91a8ca70910d815ca8991fc3a1de000e60fbd4e1d7205c57b04bf16148b907fb3f3c4417226a347229363809dcda
+Entropy.2 = f23cc2b25b2a972bcacef5994985af49
+Nonce.2 = 620aa7d686e005fd
+AdditionalInputA.2 = 795a8e234dca9e8cd9f7a7459ef0e044
+EntropyPredictionResistanceA.2 = 9a61c159376ca2d567df657babd64126
+AdditionalInputB.2 = b32fb3b5dd8cb149e5c6fa5cbb533178
+EntropyPredictionResistanceB.2 = af953646e14175c06e38a348a96e3a23
+Output.2 = 3a4a3e4abf3469b1a19685018740f62732a47c144e2d33a6b6f8a94a7e08f141c0dbed052bab0e8f3d9dc93b8a07ca7a0a8da052be2b2ca4a2b32001c8660a19e010cd14c000ece6153b6a11e30ce5d6
+Entropy.3 = 9e014e67f134a2df0b3f159c903bca29
+Nonce.3 = 72e56577fd455468
+AdditionalInputA.3 = e26bfa07e21b0ae08448be87fbcd0609
+EntropyPredictionResistanceA.3 = b3aad9de6567ad2ec698bd4ac58790d0
+AdditionalInputB.3 = 92cd6df8a65178d824da1ac4f9a484d6
+EntropyPredictionResistanceB.3 = f6e4f6dbf763bd94d0f71ea7c72601e3
+Output.3 = 3607fd65cfcba97a76e3437b3cafebc88e3768806f0730fd80e7b6aa07b071afa731d3a19f3ab86b6924b76b0a84e42cbad11cab9f9000e0e7e9af639bcbbd786bc12e60a6da5712db9cfe6a0f1c363c
+Entropy.4 = 73b7c3cab18aea6481ef6de69fea37c2
+Nonce.4 = fdc8ff31b11d1102
+AdditionalInputA.4 = d706fd6aab2f97bd0bd37cd2118951ad
+EntropyPredictionResistanceA.4 = 8ee3e04c18356887d2ccbe360acfa745
+AdditionalInputB.4 = 08a646752983f10fa5ec1b4163cbd477
+EntropyPredictionResistanceB.4 = 889546851ac186bd33bafce396f2673c
+Output.4 = 8cda9ec12bf94c4f7f9e25247103846eea53e14f3ccc7bb07fef433c12eee9c5e2a5e62084fa4005c9ae9b5422a06b946b1a1655b7a3a6eb995aeb8ee81ca87dd2b8fa2eedf2109b5323e44c671cc174
+Entropy.5 = af7feddc04efe2778bd2e42632432e98
+Nonce.5 = 69bb08a7f88e001d
+AdditionalInputA.5 = 49719537937c5bd6f46045dc51ec8b48
+EntropyPredictionResistanceA.5 = 1a55fc07c09f3bd96c0d09a5e43dd07f
+AdditionalInputB.5 = c7125f817ce3f92302fe3ba2d5a9c885
+EntropyPredictionResistanceB.5 = f0d11e94cf8fc711aa66e2a10e4bda5b
+Output.5 = 78d61af6895b1d7d61ff27d22af7fc1bec1c3286cea7775bee7e72ef67d478053d31e5254d0a07aa3c7af4cf82f3450a8af673f3233571cd37a122d25463012a388f1ccdab4c5a7b03987ffed2f26042
+Entropy.6 = 0cb4f31c95680c667a46ed43fcc9de75
+Nonce.6 = 49434007dcf35fd7
+AdditionalInputA.6 = 1795b91bdf20f70f82c6c63e4495f994
+EntropyPredictionResistanceA.6 = a2eb01f6ebc8292ed3b3d1f39f15b8bf
+AdditionalInputB.6 = c2941325133fede054151f21538e5abc
+EntropyPredictionResistanceB.6 = 44d61b47408679e60208bb88d13a0375
+Output.6 = 3dfa15f0292eeb4ae969c90a89a427869c7f1d2911e3b5fca108d688f53bafe09a79d92e5cb55341106c4afc04621f285e21dcb643546d1b3d3e2525b534f2f18cecd1877f6b429a9c4f3f8009dce819
+Entropy.7 = 5d74015ebcf6d6a881137bcf825f89f0
+Nonce.7 = 88895ca924adad39
+AdditionalInputA.7 = 73dc2016804ba2a2446da17730f10327
+EntropyPredictionResistanceA.7 = 68f887327bcfa4cb8fd3f7a1ef62ef9e
+AdditionalInputB.7 = e610d970433505393676ce0fc7e9d95f
+EntropyPredictionResistanceB.7 = 7a3185abf01673496507a4ba0e1c8257
+Output.7 = 3bc9c7aadbc3ae816dc1ca6720ef053bab2605ea295ae88445cab649e8c7aa5865cbc5083bc7becb64c8a69f94aa108887deb90d37c24a9faf43ecd3e2f83b1145d57d50fcb26cca21b97893fc9d0cc5
+Entropy.8 = 42c7a1809e0061c353902852a1e147f5
+Nonce.8 = 5acb85615d5435de
+AdditionalInputA.8 = ca088a8d52dfaea10db98bf705da9403
+EntropyPredictionResistanceA.8 = 6424b3b5df2c63a4a73fe803631b82ab
+AdditionalInputB.8 = a100bf905b0fb6fa958fc137a81c64a1
+EntropyPredictionResistanceB.8 = 4d0436a1c39296689528465b6ebb5ffe
+Output.8 = 76253df89145cff2bbb3b4d322b0551d22d67bb29bd0905522dc30c4ec939d436d99214e7f0897d9105a3dcab0ee7489b6f86ff542207f15a92117d39d180858db47652d96b5abcb37de8f5eb773165a
+Entropy.9 = ef836436aac952d5d7f6e6af9dfdb1b6
+Nonce.9 = 56505d6a41556bd0
+AdditionalInputA.9 = f87896602b0a130a652b20e2d7db86d4
+EntropyPredictionResistanceA.9 = 9b31db86e219be968dfc6943379c12e1
+AdditionalInputB.9 = b0e8b628cb490fc0e8a991a2727b44d7
+EntropyPredictionResistanceB.9 = 8f4c5ca4afb7262feb3e108cada08438
+Output.9 = 558e8de34d8d31d51e2bc887ba3a57b1f9c87539cf7f2be5bc0db8447afc0a3a79547852c9ac9a0655fcd76e68e7afe547a04dc45c58f7a13ec43c69ba0fd1812d52e46957ed5a30fc574f8a8d8782c0
+Entropy.10 = 5b0a399e6128ac02b16010d125d4707e
+Nonce.10 = 41a7d52880f97827
+AdditionalInputA.10 = f086aba21505faa00d775b91b1e79396
+EntropyPredictionResistanceA.10 = 26792cd3b22578a68703c32e94c47078
+AdditionalInputB.10 = 25086f9763a8e1f0042fda05d90ae0c9
+EntropyPredictionResistanceB.10 = a148e0dcc29aea569f4ee72651de15b4
+Output.10 = fe548c63120068d6f89ce4f2a505c1365046fd8d6690091d53236b9d1e8df156f0fc4be627cb7859de04aaae5f5bbce0bd0ad5a5a2ca43a5392e1a8f3a51fd506407a708fba4c6caffe4990c9bce9eb9
+Entropy.11 = 2e83264fe613809385acedf063cf8deb
+Nonce.11 = 8097d6e74b763c2d
+AdditionalInputA.11 = 69836d7185b0d7a8c49b7b7838381ff9
+EntropyPredictionResistanceA.11 = 4ac00cd01cc81be2a7ff63f0aecf249c
+AdditionalInputB.11 = 8f25d24ef6d8600e6513eca617875ccb
+EntropyPredictionResistanceB.11 = 40599adf27836a6b214bc9f1df66c5ea
+Output.11 = 23199c69686a3d4c0682388f471a3bf349ed309d93056f3f18efb6ac5a02d3a66550028b5cac95c550943ee111d39a94fd8e580cadad2888af648bb40b13b95b6147f5f17bef0ad0c1b564492983d858
+Entropy.12 = d0cf76625fd8c48a0d9fee316524dcd2
+Nonce.12 = 9bb5ae6cea02e36f
+AdditionalInputA.12 = 19650c2ad3fb62c6640a5ff5f407c290
+EntropyPredictionResistanceA.12 = 58e47b54f3bf68299badfe23c47ce9b3
+AdditionalInputB.12 = a3fa3084da68130d044331e158a8f59a
+EntropyPredictionResistanceB.12 = 297951e4da2717dd61bcb01a4034af3b
+Output.12 = e349a330b151643a55aba403cd06c7358028b0858ecea9e39e4f6bd2c33ce49d5f2252a62ac72966f01779aaee304e11b39cbe1892dc22b9046a43aa95d725049145408c198481a2683bc0097bc7ed8a
+Entropy.13 = 873fa7c349b969bb5ef9a120e5526e18
+Nonce.13 = 6a9fcc20ede4249d
+AdditionalInputA.13 = ed9272153b287e140abfb01c711e7c90
+EntropyPredictionResistanceA.13 = fe7bec37aa6ff27a967b0d1a4fe41af1
+AdditionalInputB.13 = 64a47ed5f67e15d5cbcf99eb00565f81
+EntropyPredictionResistanceB.13 = 2818accc2a4a69ab8f929e5737e9e0c4
+Output.13 = c3b689d9a7759d6e59a709c3659e275847b4f05d54dfa73994365ca731e00ea86e96fe8c61317ddc2046bd781f2e19649589270f48157071806362f647dfb3f8344dce453ee1268682d4cfaf40dcd189
+Entropy.14 = 3916e04c3f3bd58182133d8f29379bbe
+Nonce.14 = 3c97a38d59a92697
+AdditionalInputA.14 = 43ddf6b201ebaf210a7c97400d4c76e1
+EntropyPredictionResistanceA.14 = ecda4d77b895a29c5479d0b399a0354d
+AdditionalInputB.14 = 283a019985f0808c3e4630bbdd3c194d
+EntropyPredictionResistanceB.14 = cea6c556e2fdb95810fc3f26ce3e5752
+Output.14 = 69edbae52aadb8111af4c5ad9b2cb07adb14858f8cbd2e520161bd5bcb4489e5396195766bed64f5893e968c434d60fe2a55f186c7b9be5bf600dbf4d9642094548a0564481a64159f5d92fc55982546
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 245c6c87a509996c23a3187c86c4ab0f
+Nonce.0 = a29c44bd14af6226
+PersonalisationString.0 = 3565102bc93ca45c91c1cc2d9fbb764c
+EntropyPredictionResistanceA.0 = 6a7d5624d21b68e717910f00e129b936
+EntropyPredictionResistanceB.0 = 1b6154b84c2719e309243073398f7819
+Output.0 = fed6e32516a67bd70502b9c8c735362ada6b41ffc8a04973f4c13bf46f19ca96d80dcb466ae397bda26f3776badfa95f7542d9201a3be93090e46f068481819cacc735f2371d46c6a4859eb428a35614
+Entropy.1 = d1a6bcd378e1db516645a83cba03d1ef
+Nonce.1 = bc4f50814830fcc4
+PersonalisationString.1 = 0a202e594b918967353c3c55d1451b02
+EntropyPredictionResistanceA.1 = 03a1f3ece5a3e5d6041b7316d1c42e5b
+EntropyPredictionResistanceB.1 = 530f1daa0291d8af2d39f5dafbd2f84f
+Output.1 = a56ac4b3c6479b06782345ca557351ea7e1bd8cf2149f7c8567285c76da6054b60b1ecb5bd46cbcbecf43d191b76a86b78ecff49cef1ee9f7e6df0f525746ddac87ff0ccc82a3d58672bdf46b1d04b80
+Entropy.2 = 49f6fc87dd51c6c10806d93e5b432610
+Nonce.2 = 371e1df8c85672db
+PersonalisationString.2 = 5178ea3d41352673556fde297c9ead31
+EntropyPredictionResistanceA.2 = eace7788006e19f1e2a5eb467a2d8019
+EntropyPredictionResistanceB.2 = 48eff665980c23579d20e717e91c9d99
+Output.2 = c39a3a3b85b74d8a19f903e550a377ab9e31c4f195d60a301b0750b4b8461aa425d617aaacd0e8dfc2c8654f8b256a66a6b86486b5f64c180c39f3788eea2ccabf3026d4c762f863a5065853ff764d82
+Entropy.3 = 1faa123448152be486bf41a3a2811026
+Nonce.3 = 8b506aa8fa6234b0
+PersonalisationString.3 = 223211325b6f3b56746d7eb4254dffd8
+EntropyPredictionResistanceA.3 = 90d4a1e60fbb933252d7946681138bb2
+EntropyPredictionResistanceB.3 = edbffa520d18515685e320cf73a4614c
+Output.3 = 4baaea71de42293fe4ed8b6a7d2ea90dd71b051bf0b63f8a0d83142e70d0bb33e66febbccb1e511e30f10c9fb01d491ef97d1e28acf58131fc52dfdfd9fe8299cd6cd6cff5e186ab5dd9f7abe6c38f34
+Entropy.4 = d98a835e2e82625bb31226712c99e5c4
+Nonce.4 = 525eb843a0ecc8c5
+PersonalisationString.4 = e535dbe371842b0e8410c2732034c881
+EntropyPredictionResistanceA.4 = 2bc7ab3bd8b816d4c68f93ace9c49ea3
+EntropyPredictionResistanceB.4 = 3e4b5644554e634032c39666e16c1c01
+Output.4 = 92fc1ad2084286c7c30bbdd341deae8310f3c5e7afa32a36e153dc863768d0578ce81abab81096f60472fc1dda3f082e529b2d7fe0634cf120ae38b9d53bc64bebc28bb00b8a0613132e4253dd9c0c1c
+Entropy.5 = c5b19ba1a7bd1f36d036c03918dd2a5c
+Nonce.5 = 8b6e1f06c9fc9b06
+PersonalisationString.5 = 98c4e3c46ff7bb5d22e451137d0a5383
+EntropyPredictionResistanceA.5 = db8e5bc87d5872ff6ae2988e387c9ad5
+EntropyPredictionResistanceB.5 = 44d966b814ab487d65f19b4fb1274b06
+Output.5 = d3019a988208140f31184b49689a520a12bbcea49310a2e0066668573cf492cc12e6aed3d4a776d9c649c0a2ecbd019995dd8044a4ae4710f1bed92443b85d79fdbf953a4b77b97f74c0cf4f4538a00f
+Entropy.6 = 8b29bc752699c0e19d50243b7f07b6ac
+Nonce.6 = 4bf30febc4fc9693
+PersonalisationString.6 = 5bf9e6eb4d293665703719d25e62e8b0
+EntropyPredictionResistanceA.6 = 477baadd6ebb72fc8c942b441a1be308
+EntropyPredictionResistanceB.6 = 87bceadb6770b0a86d205aa8ee68c34a
+Output.6 = 072db16c223f0817f9893119967a55b92f112a37f6f3f5ba78496610c7b2811a5002311ec0a22b2acade5bade1a7dacf23cd44491067643c0287bb56a34e5456b49e0157d5a0c34d442be1272466f430
+Entropy.7 = 2be256b9e8f1a06477afed7535016a64
+Nonce.7 = 724d0d642b148c83
+PersonalisationString.7 = d17401c30f30d338a908c02b3e3a3977
+EntropyPredictionResistanceA.7 = 083965047c88dcacf798ce4f90fb80e6
+EntropyPredictionResistanceB.7 = ac2a1df4b55e8bd9695bd6cb1ee18b58
+Output.7 = 8aa9698d27f3452a66a1a3dbdaf2edef8e3ac27df2c52b675e098c65a79f3904393ac1ed7a87a9f19a52c3e5f1d898ef442be41af2607d74149e11122706eca4eb4a4ce06c0a9caf87c80e1dc0d15121
+Entropy.8 = 040f26d7d2ee6c4f18deca69247d1bd5
+Nonce.8 = f5ceab465671b332
+PersonalisationString.8 = 5a0517c1b5d22752a6d5fb93969f1cc9
+EntropyPredictionResistanceA.8 = abace36db188af4e328914cd51e36fb7
+EntropyPredictionResistanceB.8 = b7bd36e971413dca424a598210488ce5
+Output.8 = f30d0994e69dc62745137377fd4f3057355bd666f4bdce239e8114b6fcb410cb792f4fd8a106340b35c2520642984a9bf0692f593d3c70b265b359d15ab37d5480ac0ac1d3f1825b8139b2aa5f2bda1d
+Entropy.9 = 21de63a1d4e6ff82a5aab922e388713c
+Nonce.9 = 45a26c7d8e56688c
+PersonalisationString.9 = 0575ebb3b24e4cd277a7a732c2f6136d
+EntropyPredictionResistanceA.9 = 8b841591882e949a2ce36875a6869180
+EntropyPredictionResistanceB.9 = 0f080a89806cfbbb059acf1968d135d9
+Output.9 = d03f63a81c9ed6a1d11d6312d6d8490da1c7ddcaf9169c622f2233654cbf85b29ea3b790d75b7d5c4fc3561285ba987dd62e7da8e17f88ec078b716779c10a742968264b2e1d0c3d99e221d64d02af78
+Entropy.10 = c6de677074dfb9113e0b2fd94bbe2f81
+Nonce.10 = 50ef493461679da8
+PersonalisationString.10 = b580e726344e20e42a4963da9da6d5b1
+EntropyPredictionResistanceA.10 = 1ccd6a9058b94bb551c95f4388fe0bb5
+EntropyPredictionResistanceB.10 = 89a79519bee8149cc593449c8f02d5cb
+Output.10 = a0a0991233bae17f42382ff11d2830e10b0eb840494c4fef668be333d039e1b3aa0983ebb6854af58abe0651acdf47657121dcc9f529ba5aaf6d7c3261a76e2360fbb7c819f57184b57b6a6d0ab29e2f
+Entropy.11 = a62b37da274e333dc22d863bc75340d5
+Nonce.11 = eff4fb9509c5185f
+PersonalisationString.11 = bf05fd4e524f480adc6402bc6cf7b718
+EntropyPredictionResistanceA.11 = a55def944735e8d6eeb4f7c6edc16414
+EntropyPredictionResistanceB.11 = b0485030fbff1cd9aeeccd51a21878e9
+Output.11 = 0a485f9d334c4ffbc717d1b18e96bae7707ccd9e548b9d9dee6f96373c05e487c934f1f39d6fa4ecd1fc30edcde82e59c056ac1a9951f806d81245a4616855e50a93a2b094162cbe1942bb9305473c9c
+Entropy.12 = 106c1c993da681c5a86765dab1be57fb
+Nonce.12 = a4e5f09b604fa74d
+PersonalisationString.12 = 28cfe5bc287505936b96360f908a23cd
+EntropyPredictionResistanceA.12 = 1725f4aa357ca5b825df50f43f3fe4f1
+EntropyPredictionResistanceB.12 = 8d28aa92df5c9a09f636d1f28a5c7ae5
+Output.12 = 283635bbfe06fb32a8d15d9c2be0b5a61c178d270209532c89c77e2521faa6f8e15d15aa91a6b5ef7cf358b477d290a25a8fd9c5e7240b704ad320781d1a3d987fcc84e0a5f4cec17f5dfc2a98192fbc
+Entropy.13 = 6d67496e4222f1a12e2b521fcea2ceb2
+Nonce.13 = 8b38cf3f42b9a41b
+PersonalisationString.13 = 287619a769c13fcb64acb4bcf05735ee
+EntropyPredictionResistanceA.13 = 36fa5cb49b2179beff760ac69af00131
+EntropyPredictionResistanceB.13 = fe9d40f31104835a056f17dcbc4750a6
+Output.13 = 0c612751f9eadb7b5979d7ab136ff4bb622a9ea826151027e988c367361891b212181a996a0b0d7aef1da2a5dc359983d4f596398560a8b6bb7ac16809d56b1dca7aae63b47b8a3166f639338004c49c
+Entropy.14 = 33c700a151f1af5ad3e482e579739315
+Nonce.14 = 00efcb6613c1b52f
+PersonalisationString.14 = 82d89965a2383e2b02725fc5ceff663c
+EntropyPredictionResistanceA.14 = 2ec8dc00c3a44bebd99f5a434706534f
+EntropyPredictionResistanceB.14 = f235217b9a0f636efcf67a6d7983dc85
+Output.14 = 2fa45601b64ce8bf51004ff43dc90b532d9114198db9acd7780cac8427506a9420463dab90b3b9ee23c257adc16f8bc24be47f351583e13d30bf318bcc394d6f946bb5041028f67c256fec9d44fa3791
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 38d49f8c5cdcfe58397a12977d90cc13
+Nonce.0 = 7c004472d74e0061
+PersonalisationString.0 = b3d9ed61f5164860b5de97a06c073722
+AdditionalInputA.0 = 79f78ed202970258aef299df378acd00
+EntropyPredictionResistanceA.0 = e2581692a5b377f474b1648ad02df341
+AdditionalInputB.0 = a1a3a4dbd56ad166f236e1df869e0788
+EntropyPredictionResistanceB.0 = f1e8160646cefb8694d25b378a7778c1
+Output.0 = c3a6fc30d395fc42aef540683f7296fb9c86440fa6b1ff7ef96f39db9aadf444d0cbfd514ab2e0658a42211ca35c04d5abf1ae3a40c4d93af286330d2414e5930e684113e891e71d3239f8989de2bd7b
+Entropy.1 = efcb5da024df7d520547db7beeeb6363
+Nonce.1 = 39f6cb1bbd2c5f5e
+PersonalisationString.1 = 687d39482e0127a7c3f494085799d236
+AdditionalInputA.1 = 58bc4ffdcaebe9a0e8e9250e2168b822
+EntropyPredictionResistanceA.1 = c75057e56405923bd2fcc0f1f946b59f
+AdditionalInputB.1 = f9499c2ad0ce1098c6942f7acbb3e843
+EntropyPredictionResistanceB.1 = 6c68c450a0188383329bdf4f7dcf597c
+Output.1 = c4aab45f2d1f234ecf56a396d117cc11dd72a4d9e71309a815fef993ae05fd0b28cb9e184f5593f8fd03240aaedaa92070225678c22f255edaf6f84aa5754b70251b11ebbded142b5cfdc7b3e01c0c3b
+Entropy.2 = ac4f4be53f5504f512fd3182f6e3f3ed
+Nonce.2 = d8758dc845801b46
+PersonalisationString.2 = 0f14174f92821865bc5eaf616a046437
+AdditionalInputA.2 = 69ac91b707e96284ad28368c4007e649
+EntropyPredictionResistanceA.2 = d737b805d90caacb39559e1f96c84017
+AdditionalInputB.2 = b3413356066d4266e76f86efc27bbf04
+EntropyPredictionResistanceB.2 = 2a329d3e74550ec0d8aa0adbcf65428a
+Output.2 = 08d446a76a4be72aa498cae68ec264643ba62eda94f09071b6e8bb22accd4d95e679a34f27b3c851830836be0e03fa68ac29c1a694a6add53fabb33287a4adc436a714ac33f2b86c5bc3826c0a76977a
+Entropy.3 = 42f2a97b42b721232334ab75c140c079
+Nonce.3 = b44adfa2d457b464
+PersonalisationString.3 = 44f8d1a79c992611ace9d36eeef85df7
+AdditionalInputA.3 = 6dc4315c6cb3d33557c3aececf5712a2
+EntropyPredictionResistanceA.3 = ce0ac52f2a354799c0bf6e508f1b1e2e
+AdditionalInputB.3 = aab5f3ca0e57f5ab23a031b83505e79a
+EntropyPredictionResistanceB.3 = 8b131d7962a1bd127010082e2df738e7
+Output.3 = ea43dc3f12445251272d21035af3ca2ed081c5c622e64c8a69696d1aea1cb84bbde38516e0b7d1c0f734057dca6c9494415f416fd690081d7e5d17d22836b2c14ef353925953bb15fd997b4b9675400d
+Entropy.4 = 98908bf26f35abe043531768f10f85a7
+Nonce.4 = 754ce34f085b4422
+PersonalisationString.4 = e5a11268966c4ac9940e38ebfb706115
+AdditionalInputA.4 = aa3c9b6f53920bf126c221a1673fedbf
+EntropyPredictionResistanceA.4 = dc00a452a343cef1fa679d92058499ac
+AdditionalInputB.4 = 549a79ab5454367b8ce6f4522f3f53bf
+EntropyPredictionResistanceB.4 = 28775921c095472ab9e97bd7a1970f86
+Output.4 = 008953513f87cb3a4ff18171213823b3f39f32f13d438af593f7282bfae1e5e3e99259f66d285fab80de2d4e8cf03dd4658643f53d63afc0f29c04302a23082460b7bcbc8450013a5ffa9611026c961d
+Entropy.5 = c959b26c872601bc6b17b9ee39e9a002
+Nonce.5 = e9cf97f52742f0b7
+PersonalisationString.5 = bc1557d6a28c66c13f4ec76aad037a71
+AdditionalInputA.5 = 9d6e9b31cee0ffba1919d3be8b3fa297
+EntropyPredictionResistanceA.5 = aed0201ed4414d6578fc9e84fbef6282
+AdditionalInputB.5 = 146ef1709f3c078a29c03e3d46234980
+EntropyPredictionResistanceB.5 = 5f7404e78fb87fb4f2946ae0616c32e5
+Output.5 = fe28eb1cc9ba3a4f4eb4dca7118689bffc14e1ec4d55c9bb5d4b54f72f72b98c5063545528434126739cd3fbaa0e7085cb611f947d8eb3190f5969a0b89663d62ed4336494d2651893caf0d968824c8f
+Entropy.6 = 4ce649e136fb565e05529501d6516ff4
+Nonce.6 = 404f6992659931ae
+PersonalisationString.6 = b64b3cc4109538f508c7c66ccc8825cc
+AdditionalInputA.6 = c898f28913379bcd8bed72c013548716
+EntropyPredictionResistanceA.6 = 31cced0cf14ee1d9c66cb6687765ecba
+AdditionalInputB.6 = 113be3f72f97ef2a55a39106416f116c
+EntropyPredictionResistanceB.6 = 05366b48a21dbbff302efa3f8f37c715
+Output.6 = 5223dd3166fa23e0dfe7e7a76001a9f2a2dec652cbb3f573f05ea8873ad5289cec2223f9da1f109706967689766e03062e51f8110ff951df2974992642a19554072f4a46ecbfb19859bc8c89e1ab7861
+Entropy.7 = 5ac6ac5c3b62f40e7447a97fdfb0b030
+Nonce.7 = a98b0563d6bb4ca8
+PersonalisationString.7 = 09a6ca7093ae7ea3febe7bd64eef8587
+AdditionalInputA.7 = 8d8cfe8716d846c4d1578bdec1c8fccc
+EntropyPredictionResistanceA.7 = 5a2f86876bbcc747a4d84ad91fe5886e
+AdditionalInputB.7 = dc9e4b05ef3f679195aa9a8b49bd98ed
+EntropyPredictionResistanceB.7 = 2564e1677a4803e6d0d98d57aa18518c
+Output.7 = 9c83f0a3539738e1a2ec5e9ffef9342227be16d74bde6d9f5bcd727a2f6bd4c42d16fdcf6802d737ed3d8beaa7338d17f7af94dd75a69b0c213d53cec9a95e12a4f18d07cd5fc7d007263407d107c5de
+Entropy.8 = e9d427fd86e5c029dbb7ba0a299eeb15
+Nonce.8 = 30ea1a86c0cd532d
+PersonalisationString.8 = c56bc089e0ff61c912fdbe8b0a0675bb
+AdditionalInputA.8 = e1e709861f6ee5a1e4bfded2a72797ce
+EntropyPredictionResistanceA.8 = a32c68c58319e71edefc041645526f8c
+AdditionalInputB.8 = 0009fe3d30ce005999e0f5a40a022373
+EntropyPredictionResistanceB.8 = ec29570715d49e8c343c6a09af63537c
+Output.8 = 6e56d5d157f070c0133b463f5bf57136fe92fbb8e348e7189a823c5068dfa05b6d5695b58cd7be21b942e3c28be57f221344a9317c90f2eb756158bf732609ab6236478f2b9962ab11e7aacd4d307e85
+Entropy.9 = fd6cae74c8d54e2cac3d12fca83cd34b
+Nonce.9 = 0e59de085a72fadd
+PersonalisationString.9 = 1980aeaf122a58a8bb7ea280acb1bd43
+AdditionalInputA.9 = b132319e36b9f05320285a5b3ff5e833
+EntropyPredictionResistanceA.9 = 183de287bfb29daa27dc55c3a28be15c
+AdditionalInputB.9 = 50d3c34f40b826d14963fdde66280db3
+EntropyPredictionResistanceB.9 = b6b500f16496a474db140bfb569f5ac8
+Output.9 = 968aa65019678d8800e8fe30fa341886a04d7d1670e42d2e581ad48ac1585fa4d80d9869750c9939f1612ea877228ba5f4c1fc194ef3f1503e54eb14a7b14efdc5d8422d166cccc393bcd02bfba73b6b
+Entropy.10 = d47f571dc9416832616eac348ad1af56
+Nonce.10 = ecf19c278cd8a151
+PersonalisationString.10 = 73ac84bfb29eba07a56b5459c6378b97
+AdditionalInputA.10 = 2b8c139ae071d4c88ba969080ba42019
+EntropyPredictionResistanceA.10 = 0e632e85fa242e3db840e3de0d2d389e
+AdditionalInputB.10 = 531f4d9200d4142eb297d58329f16e03
+EntropyPredictionResistanceB.10 = 12bff18a311ca72198a9f85d6a0ecc75
+Output.10 = 2ad00397b0cc91e67986bd39ad41b90b384e532667ef36b7e1a5cdb561cabcdb3a15894036abb57d09fb6b8cedb1a9eed4baf30e4c6f35bae6cc5219233f9ec220aa92c33927417753d27ac9464acac7
+Entropy.11 = 9c67a30765f19a595d5e6fd318a93962
+Nonce.11 = 357cfdc87bb01500
+PersonalisationString.11 = 4cdd9c6bd0c11a71e3107edffabf0b10
+AdditionalInputA.11 = b38fd5a61326c5b37aa6d6ad5d847f76
+EntropyPredictionResistanceA.11 = ae7f1e1c7e7848ce1185ede8c89dbca3
+AdditionalInputB.11 = 770ae3d969803f7af8629088e6faa4f8
+EntropyPredictionResistanceB.11 = 61922ef10ab32606ed34f9e7aa98d9af
+Output.11 = 5e85f829aa73fb6733ba9a21c2e464591decf2774b21b351091feaceb205746e060c469915b5ac4a1398eebad6642ffeba57e06d2733fa3701c7e565d97bff783c54a3bf0a19127da08365d97d34b8a1
+Entropy.12 = bbd5ba94516d60b0b8d8d2608ed61e15
+Nonce.12 = b937fc6e1011b8cc
+PersonalisationString.12 = 438b14c7c52489e096f79e1782278756
+AdditionalInputA.12 = 438930b1faed603afcc8b54dfc9c8415
+EntropyPredictionResistanceA.12 = 24cc541ed380a0ea0d699c1ad25e863b
+AdditionalInputB.12 = 532f9c9f9a6b4a8faa7581b592a3027f
+EntropyPredictionResistanceB.12 = 5b2a59eab8768cc9876f54d2741dc982
+Output.12 = d43a9265319a016947ad71ce96643a9ddefe14c48a47654d62059e873cf04b0abb23aed9e4bbfd390d1639a8dbbe0db961d341f01c716d50cb854b1e28ea1c30f2a2a57d826e56bd7180da58213c4070
+Entropy.13 = aeb10813640437236f6bbd6ad985c086
+Nonce.13 = 44ee8874fb6140ae
+PersonalisationString.13 = 977b8df6370fe4d8697d97f13af5ee72
+AdditionalInputA.13 = 2a4a4bd13858eaa9487b3ffcf390807a
+EntropyPredictionResistanceA.13 = bba810f5f1e8877d02c2eeba7651482c
+AdditionalInputB.13 = a6b415d0f629345e2e1ca2f496621c70
+EntropyPredictionResistanceB.13 = 729b81d49dd8a3a6ed6de2050c9313b8
+Output.13 = 2ae56379acf7b1d07f98cd78dd3790dd530ea7236a61267c5f645f0c90ffd8ccb3a872c38980ce07928b0a1c3d3e82ec5ce8865c9946253e4391b2f5720d33a3f060bd2ec80c7001f93cabca2c7e9834
+Entropy.14 = cdb30fe855313c5a26e5e068ef163bbd
+Nonce.14 = 15ff19d9026335ed
+PersonalisationString.14 = 4a086ec06e831f407da19a5eb6ae1dc6
+AdditionalInputA.14 = 6ff463dc5fd538f3caea53fe3f5a68e6
+EntropyPredictionResistanceA.14 = 9a1207435f50b6012fcac09cf88f6fa9
+AdditionalInputB.14 = 8be2fcd4372f2aec09eab3b089f8fa58
+EntropyPredictionResistanceB.14 = 1d5b4d5d5d3da6ea515ccc4e5ac9df0c
+Output.14 = e37ea79c2b93d39a4c6dc4b5d68c0c7e76d8faea8eb290d141755c2e7c2f5e5da5ff14e6913af2599f5432714c0ccafba94014cdbf7385e8c0938a92f025acee21eb15f265f47f3c497f64333d4ef3c5
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = debc572f266e2869f3cb9486507d41df
+Nonce.0 = fe84ef686e61f59d
+EntropyPredictionResistanceA.0 = cd41a72f891cdc7df4b28bd0e28a55ff
+EntropyPredictionResistanceB.0 = b5130748661cd8d9c708f9f6c77ed6f7
+Output.0 = ee3ab96449a64183d8f525e81677ecaf824937fd7de6c6c416d6651fd09ab0d49c8d019b22391ae26d7c30c845a086052493e9215e19d9b062abb8bcf18b66a63ca570d5668e51971f2c5420b095f7ed
+Entropy.1 = a0a4646088eeea3692ef06f24cc4261e
+Nonce.1 = cbacd44ddd2d136a
+EntropyPredictionResistanceA.1 = 3e2cbb16c2888ef7c57d19ec73251357
+EntropyPredictionResistanceB.1 = 8a89add9109f8d8b7a18756c58c7bca7
+Output.1 = 764eacd893202d085edd081a0f77b7796ce3ae32b929953ba79c2fa6e0be7bbcec0e22f822a9f106a1cbddd9023a5cdae648ba7c4cce06f564891046e9af07a50c3236135f4b6a323054eee549e23e93
+Entropy.2 = 0fdb3ad6d2ce002561d144ecb9183300
+Nonce.2 = 3654d5a3ca12831a
+EntropyPredictionResistanceA.2 = 6e76cbb7ef90645888213c0dc961f62a
+EntropyPredictionResistanceB.2 = 5042151f0f22a9134afdade649c56096
+Output.2 = 623c85f3cccca569840e5b8bdae4a24b3f5df3d08c53ae569334b30e13089534ea822a46596d0043150265371b31c8cc789292204ad4ba27ffc2692c9de7932fb0e57e5a868f70cc47f2b9c26a2a86c1
+Entropy.3 = c00cfb63a62a17fdf835e86f65465de9
+Nonce.3 = 1095ba972076b57f
+EntropyPredictionResistanceA.3 = f627fecc168f4adfac48ebcf47153b75
+EntropyPredictionResistanceB.3 = df7f1179c0d37cea18c7574f80d14837
+Output.3 = 10b42d0e79989f7e512a104a1be407877b7db6df5ac165b0f59140c797bb76e7e1ccf12c5e6dd58a1ff2cf6303518687bc6f5d1b68a2466e0a72bf88097159f82d39c7993940b53c38f5ef7e19244df2
+Entropy.4 = a921c8516acdc431fc18ae05b48952ed
+Nonce.4 = a62cae63610ba182
+EntropyPredictionResistanceA.4 = 640a256544c1f3769ff9fbdca6da438b
+EntropyPredictionResistanceB.4 = babcce906ef12bb0206ef6a6c942af65
+Output.4 = b796b2854687ea74debc11314553d9a477978ac4110d8a4510943488ee61d718b86c7cf6c352ead5120ec0682830947a6029eacec31a999e80c43d61fd22e55f04940b4dd894ac57e95df7a7c9d0233a
+Entropy.5 = 1d9025aac19e0634c94ee8c0aeabfd58
+Nonce.5 = 334db2f743a4a1cc
+EntropyPredictionResistanceA.5 = 17c3328d473850070d3f19e63419db20
+EntropyPredictionResistanceB.5 = 090de65855a95b88139f62ae6cf80110
+Output.5 = 074787b13a1f0e24cb0094ba0fa837a797dea87aa963ac228984503521d22212a23f11606c50095579f009fa981bb90822ec152ba0119561d94b1663a2b16f446ee6f53c89d936e7b89468682d6f5548
+Entropy.6 = 619de2e525c93400f35016edb3264454
+Nonce.6 = d6940d64fcd9f132
+EntropyPredictionResistanceA.6 = 34d03751e4c394315e546c5f487eb988
+EntropyPredictionResistanceB.6 = c783c62e29f6a30b89d52662c92d4de5
+Output.6 = c36814bdbe10200bd27e02ae295b7fb1bf94aa1fd3bb62260172770f05ba28543819070a3498d7f320b376ce05c75ff551a10bbfae2c96e51d9db6bb68ade3e16e793bbc1b438a964315c5ce456c6e10
+Entropy.7 = 6df98e2b4ad5f5ee5cfbcdf231c2209e
+Nonce.7 = 31c50c1d0cd640d8
+EntropyPredictionResistanceA.7 = 34b8893a465b126288830555aa5f8453
+EntropyPredictionResistanceB.7 = b7cdfa06966e6f557887c804d7403f0c
+Output.7 = c405ec8e1a0b97c80d25ceb8e5115d4cc27547b656af502a1dca3896dee7a6371dcb39628a770b004007af7279410f23a461dceeda3e21dfed94f4085195d35afdb966a7820dc56292345f2ef19d64ec
+Entropy.8 = d085cf11bac9cc27d72a36c02a50d8b9
+Nonce.8 = 4a8cfa97243b8785
+EntropyPredictionResistanceA.8 = 5abe0a6e7f4de8e49a4758e281dc81d4
+EntropyPredictionResistanceB.8 = 26b7613272b2e1f3eb83f8e3160c2676
+Output.8 = bcabc346ed039283103c743465b327552fcdbd5b7656e2a2ccf1fe8f161e99148715b27599698b48b93ba3900bbde1f0e4a0e2c1d6852804725ed0e168900e90707d81c3dd3122fe03d192321c8a52d8
+Entropy.9 = 7a197d2bcc3e427c241f4e41b94f44eb
+Nonce.9 = a04856c607eb257e
+EntropyPredictionResistanceA.9 = f33b8e56a64e3594a999609beaa4ce6f
+EntropyPredictionResistanceB.9 = f1913a9870c9ae03ab5c6718d5f2d21f
+Output.9 = 92e6fe3bd7b4c3f24ca291ff47be07d87867ba77b3fd0e2a68dbf44e813c9689736c0c0daa8e803f4f72bdd72ade9b55087d64fa614d5793c17de521c42145fa60a514ea4d7a979115cacba07a3acef7
+Entropy.10 = af8855b0309a7a98c3ef242050b90d79
+Nonce.10 = 1a139981195f2a16
+EntropyPredictionResistanceA.10 = 57f2701061f567b243a703e8a60b0c83
+EntropyPredictionResistanceB.10 = 1f0c61a03e8516fabd7342ce16b6b1a4
+Output.10 = dbd46dc506b881ec25290fa96a41626cce3a5bf1bf06e68ba980515d36156762fd6555b0e4ed404a3242a7ebf31eea21536269bb07e4374db482254b2558b895b16e2fee119c5a0435e9ba20ff160b8a
+Entropy.11 = bb7b497adac7b72beee2fbb84ee7919b
+Nonce.11 = 36d0d7e912cec560
+EntropyPredictionResistanceA.11 = 8745df28d546516b5f9b801bae72b00a
+EntropyPredictionResistanceB.11 = 2bf4576a424e25fbeadde2a8bf421ccb
+Output.11 = 307819f2658efc1ef2f381f2c9cef8f38ae67b2b5aeb961691d70c0e576d7bf63488f5541222d10d405790e29957a8241c79e12946d2fa76817237ca6ef8a183fa7fb2475f703351c81a428a7edef1db
+Entropy.12 = 9d407085b5e368b8c24a873a64d86e69
+Nonce.12 = 6dee9cd1ef9e0493
+EntropyPredictionResistanceA.12 = 454ee08c85015cb9911bf30958268eb9
+EntropyPredictionResistanceB.12 = 16e2503a7482112cdcb9951335e96a2e
+Output.12 = e6bb918dd8b8a91227c63115657355f5a980d943ea90e0688915500626a298a28bc72fea8c0a4e62c608bb7031b436e7fa3b234d5edb6614391a75bbc88ae6be23ac92518ad53ed595c7348204c9985c
+Entropy.13 = 57f906c5bf7d55b0f5374f18d6ed82ba
+Nonce.13 = 773682c9a49f0280
+EntropyPredictionResistanceA.13 = 7c7b263bbea13c0a2dba99d1675f5cee
+EntropyPredictionResistanceB.13 = ac644f90466d86e218c8ff6b02789a3f
+Output.13 = 7beaaaf8731f479a36dc69496eddd85191deba1d2f2872717832ca798ce4142c8c7bba7293cfff7e3db6d66d3dfa5f3a0a1160abeda363be47ee9dd249c930139a3e159be95c3d8568bf4ff263784446
+Entropy.14 = 6c16d9905060be1cfd4118d8d838c155
+Nonce.14 = af9087de3091906c
+EntropyPredictionResistanceA.14 = 4f6222b6650c91efab68eb5c1f8aaf35
+EntropyPredictionResistanceB.14 = 3c7ebde55e82607d72639d5c0bcf8fb2
+Output.14 = cd0ff33b86806bf6677474dac01a5303c46c09436b2a613446836bc6035de58838371f9e77cedc0f041ebabe0a1e16856d7c62ad73823776b708410c719720a89053ff380a4f3a57fceb672b5c37aa4b
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 39959033d721fbd9ef374868ebfdc8e0
+Nonce.0 = beedb969dcf965d3
+AdditionalInputA.0 = 06bb0ad0a37ed6038f40ecb2947d9958
+EntropyPredictionResistanceA.0 = 869fcb9edb5c021d8dd24bc0b2f8bbda
+AdditionalInputB.0 = ff28d8bd84fbbb8d7958833536563eac
+EntropyPredictionResistanceB.0 = d25d4c988ce67479c87928f91c40e670
+Output.0 = ff7c69fc941e110df6a7380be923db69d4c74d05a8b940c3effa5bcb4d6864bef77da0d6cc5db48636c7a425e799407bb7e585ea809cb6f62d9d78bc380a27a5f63c6e968af226dbfd97bcdcc257b288
+Entropy.1 = 666302510ce2e7913bdc1a3a95393db5
+Nonce.1 = c7b77ce07ea15ff1
+AdditionalInputA.1 = 069e88f1275d54c85691873912e4f1c4
+EntropyPredictionResistanceA.1 = e8f518cc15f049ec88670b5a4e5b855b
+AdditionalInputB.1 = 891a13b9251e00caefd0556b59572972
+EntropyPredictionResistanceB.1 = 1f476286f3af34e414d087d038c8c17a
+Output.1 = 0785011251c5a79d73d064a92012e066c4d845619bdc3de0eebd7e77b336750e31608649cb82a1369cf5822dc987d938f0e1affce8ed8ad5c3096d2d86a2aa2865f42c90faa5881e4bec7bad544ef4c7
+Entropy.2 = dbbe7b517bef2d8751a7c7140417a059
+Nonce.2 = 5ef1b0ec503db5ee
+AdditionalInputA.2 = 9b0f35e36b4eced986e18b40f62f16d8
+EntropyPredictionResistanceA.2 = a00a654f5b6d2e8b0a263cca7a9cea41
+AdditionalInputB.2 = b4f66ac4d402960976f7d63307b9b39f
+EntropyPredictionResistanceB.2 = 89acea140a4e16916fa94ed741dbd053
+Output.2 = 545bc7589c0fa05fab182d786c8d3736e7c5445685991ca3012730815fea66648cbce5d4c960c56cdd25e7d8cc18b5cdb4f22613b894cd3207ea562159e4580b0adb2d43b6c89ddf7b4c82a22e95d8b4
+Entropy.3 = bd3011ad9173cc15816cea4f2585f418
+Nonce.3 = 0611e7c758de39e7
+AdditionalInputA.3 = 785f9df755006d99aaca7df0a1f37908
+EntropyPredictionResistanceA.3 = 274311a8768053447f1e3578c6ab5763
+AdditionalInputB.3 = d7f32ebb811a2bdea8a7db143a3d47dd
+EntropyPredictionResistanceB.3 = f9c0da7658f35d2494759b0474fcce3a
+Output.3 = 34f5c04010acc9c9500cb552dc5af3dfb27b22bb2a2d9be002bf0e343b9ba26002ef2559488e539582a15329cdf60b2ed9bcdfe21f3cbdf34c5be60afd3b8ffacbf98857c079464ebfda385b235c4807
+Entropy.4 = fe0ccd08d66b9a24225991e367b43e2a
+Nonce.4 = b35caceff9ecd489
+AdditionalInputA.4 = 7ac00ddfae36e609d82ed6932ef56307
+EntropyPredictionResistanceA.4 = f40b7d3aabcb86b21b2b50e0580ffe72
+AdditionalInputB.4 = 18344d90a469151342c63cd69397f37a
+EntropyPredictionResistanceB.4 = 107bfd7bf9d79144763f644217fc2da4
+Output.4 = 1f5fda919d720f4757739a9dc9bc8ed4ae149b39603bbfe31f5d1cf94be4bdd95f02e7bea39ed2da65dd070d7b13544f6c595ce3575af4b54fcf650ab132bbaee49cd9f82cfbcd06527d538553b177d4
+Entropy.5 = 061c34c479b97d60a1078234e92b85e5
+Nonce.5 = 4f7f80b1648e9bf6
+AdditionalInputA.5 = cfef37760f73a67e01bf6c847dff2a45
+EntropyPredictionResistanceA.5 = 31aae3fd9aba6e4b4a4a4b93191949c7
+AdditionalInputB.5 = eba5a8423ff5b76a1b4343463d50963d
+EntropyPredictionResistanceB.5 = 129ea35673f843daa5f5032679f8c734
+Output.5 = 2949f0c1ecfe6ae44b9e6bf8a4c46f0db955625fff07fbe7cddbaff90971538f2e33338d7ec28f1a117cf4233c5e4e6dbbecf598e7a29d50388eaf3c5e37dfacc380c389cc0c37496d69387a0bc9092b
+Entropy.6 = 9bfaa3bb60a8a7bb3f8bd0f694c581f2
+Nonce.6 = 7628325520032a1e
+AdditionalInputA.6 = 57ead15385eb1ceffcf2f8220caa1619
+EntropyPredictionResistanceA.6 = dd79bf5943485274a245fc4965201feb
+AdditionalInputB.6 = e924b3c0828d32a8f0614cb59c5dd1b3
+EntropyPredictionResistanceB.6 = 389e17827a38c1f3f1887ef8edeffc5c
+Output.6 = a32486b5ff1c3be56322eb1e791669f14c437d22b25e1a20dfa0733cf74bdb97c1a62ee1d492a5c6a33efabe10d332a3f8cf0a466d6fdb90a8dca2e2b5a909056c9d8a5e256daff11b9ac5e05e421c09
+Entropy.7 = ce4cad9bc4fcc1abfd01f28585ff129b
+Nonce.7 = a93be7aa4dccb145
+AdditionalInputA.7 = 9eee046481160e34b64770fd1d070a23
+EntropyPredictionResistanceA.7 = 7710d8c465917d2a6df8b05d0b951cfe
+AdditionalInputB.7 = 92fa40270319531c44948ce8e18a1e68
+EntropyPredictionResistanceB.7 = bab4ea121b62eadd566e9185088c683b
+Output.7 = 5a2a02d0a007075967132eb496ce8b9c4c9a506ac36d9f2a816b414d52918f47d69f00b8b5c1dff3436623db79e6bd81f740706b91634843d157b538cf0b9cf436d68c1f4acfe149e74b02b1c60ddd26
+Entropy.8 = c37e1fb0fd38e1098abf8c6e8d8811d8
+Nonce.8 = 6b2c5f5beb2c2fc5
+AdditionalInputA.8 = 40ba44d95092afe27a858e5bab0837a0
+EntropyPredictionResistanceA.8 = 905d030e0e2ca733f1fff9ab410bc8df
+AdditionalInputB.8 = 586e49509d01facfdf7ce801a5517c28
+EntropyPredictionResistanceB.8 = 949a1ecf744013fdd1dd947c34de0cb9
+Output.8 = ef85619aba20dbde5d123133e453b27c6cde77bac4bad9f7f1120f83bb049b75b03ecf74e8ac1987808e9e9953431def042ddf37718f747b61fa9f3f38480ea636ab21dd156404e6ddb9801e228a5d36
+Entropy.9 = 76a01f8b6da59e2b2c4d4ff2f0320295
+Nonce.9 = 53f446f92bb65f84
+AdditionalInputA.9 = 188f5813320ba726672f80044db80094
+EntropyPredictionResistanceA.9 = 68917897d33ec4b309941f043e1c381d
+AdditionalInputB.9 = 58568953385102b8d486c88c099042ea
+EntropyPredictionResistanceB.9 = 15788c63fe98cd3e33399bb4940c7a0f
+Output.9 = ee38bc47b6489b66460fa5b5760aab47b06e633dcd9d50bee609adcca0b1d56a18117e89c46c6de712d9f0f7e974cfb1acccf613a2161208fe52859d95dbe18750588f68724fea8fc0f0762ba6d75d5c
+Entropy.10 = 2f4c72cdd8b5b85821149631e0323bd7
+Nonce.10 = 707be26e6c8df324
+AdditionalInputA.10 = 457ec1271c6832db72e1a88ef0b480c8
+EntropyPredictionResistanceA.10 = 2d5f013e1980b49c351118d1a702d1e4
+AdditionalInputB.10 = eb0846968957f524d105c2134f25dca4
+EntropyPredictionResistanceB.10 = a77cfe19b8461b4c7663593a37459b03
+Output.10 = 8985c2a42ef7fd9ed0a0dbe9b2bf448fd29d07fe993209a8619382dbfb4e66db17121fc2e1de3308c5bcc2ce6bf85a21bd796c9c6bfa92e0225a779f3477d573423ce5cf4cffc8bdd7b36aebd339f439
+Entropy.11 = 43bb3db4be4b6f9758c4535c1d2a61f7
+Nonce.11 = 93c6baa46b40a931
+AdditionalInputA.11 = d3ff9395ae47c37180c105953123e863
+EntropyPredictionResistanceA.11 = 78049a083c756aa599020179593d2058
+AdditionalInputB.11 = 464b5ce61eb5030a42bcd1fe0cd0c7f0
+EntropyPredictionResistanceB.11 = ec2b734ee5b7f247b0d86d503c059ee1
+Output.11 = 9c3054cb0b4f4ada5fe33f4ed8ae17ef0cd04819b9f030849c706b453bc1da41c2fac2f46d430c05baf2c00a035ab96dea4968e95d91e3cbf21e686d9f586e507d7e0e5796c70933cf4e6c0492ea4fc2
+Entropy.12 = 871982a973f4252c9bd4932638516049
+Nonce.12 = c05a182991dcb001
+AdditionalInputA.12 = e51a03903ef15b504dda159b04eee77d
+EntropyPredictionResistanceA.12 = 60856e584f0d91f74560ed7f8a5c87a0
+AdditionalInputB.12 = 7d2f7c43b2298ed604890b2b42e1e2cc
+EntropyPredictionResistanceB.12 = 263a8c15eaeb659bfc4d65ad1f204239
+Output.12 = e74ffabadb2dae2ecbead85708c413547a89d23e6c2078569588a4f672055e32588f682f5af06d316267a470466bd865dbcb4435907a0f1d77f6d564a47b443ba5912bf76377e622c7c430e6e7af6b13
+Entropy.13 = d60b8ea9ee7bf670c6e2fb842895c1fa
+Nonce.13 = 7a6854a3090a0a95
+AdditionalInputA.13 = fdf483fb3b9710abe81cbb88795aaa95
+EntropyPredictionResistanceA.13 = 440cfdfaf9a0cd1b59374f241b787af4
+AdditionalInputB.13 = 94384eb180666f8caf53dfdef6ff5f14
+EntropyPredictionResistanceB.13 = 0ceed4c2556169850e8fb60420f3a037
+Output.13 = e15956dda312dd201a4843a7f0bd194b9d58374a98f844d02f4a36447efb666eddffd8494673f42bcf3ea7d45540ae6ce415366a25d1a34a0458edf2463d9b3a26c4cfbdb55e3268f2f5787d67396bd6
+Entropy.14 = 253f8f235b25f0709f9ab4d816dd054c
+Nonce.14 = 97a57e76253b2be4
+AdditionalInputA.14 = 5ac0210415f81180ac21385f19325609
+EntropyPredictionResistanceA.14 = 52180e849fe6c7ac5df3c42d41003444
+AdditionalInputB.14 = 88387a607f2acc671407fb1b7c620976
+EntropyPredictionResistanceB.14 = 9ae96c8797f9651476dd2b9db9eb5be0
+Output.14 = 9afca77933fa80de2f5e837d5e04e844f53133d840b11ec98bef382d36e630f50dda87dd736d0a89f32361da29896bac67d6b4fb1cdfb71ee192638222c539d8d1528a5e32e6df3bcc62b293e9241d09
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 2438070fd338a18a73d2fc4e452eaf91
+Nonce.0 = 7f15ea5da96f21ca
+PersonalisationString.0 = d9706689931f3f764718a17801d32cd9
+EntropyPredictionResistanceA.0 = 7ddb6e2042572ce9a2e3fcb40b1dd1dc
+EntropyPredictionResistanceB.0 = 64b7d5e67afdc1347d03cdc3dd97932b
+Output.0 = 5391c4ab5977aa9698f0b71a7cb75de8c78f9a26b2ea0ae69fac03b0f3e2527e247579df6a151811272fac05e1569d00894c2f411229165519a096769b24aebe01fbd306dd8993f076ac2ebf99c39a58
+Entropy.1 = ddb217fb8db1e08f1c61210c882602f7
+Nonce.1 = d43d9320adc40553
+PersonalisationString.1 = cc54510b85477f5470760959d1bd235e
+EntropyPredictionResistanceA.1 = dafb0004f9c7930f0b61b501bebf4a53
+EntropyPredictionResistanceB.1 = 00a01a792925e41ddc0397703383cd52
+Output.1 = 2b312e1d429913911dbbf0cb5178b268ebb28faae5f8516dcca00e6e8029d6ced3fd426b661190ccc40ffe18eaa9b2d37940a575b43aa7638f1f5305d3190bb733a7efa087b37e7012d5bcbb2a8c1ea4
+Entropy.2 = f43b00a4cb24f8ee6de5feafa943d1c3
+Nonce.2 = 5111fd53a3146c5d
+PersonalisationString.2 = f491a658d1221725123aeb65ee8f7220
+EntropyPredictionResistanceA.2 = d88f71ae87a97fba582d4ff19a113f47
+EntropyPredictionResistanceB.2 = 1fe016c2f8fd24ea3ed5fce545ca8d97
+Output.2 = f823687876ad9bf49d28638e0ff368aeb3bf158a1d3dfd75a58fab0c27543c55ea44f5bb190d59f478cf6d9244ec6b460285ac762ea0fad61c51da9c5795a43fe3b71346bdc03d33821db0ec7e31e23b
+Entropy.3 = 30d57becc4bc6fdba4648a776dd3980a
+Nonce.3 = 98060e1fcb132f02
+PersonalisationString.3 = 4ee7d585469c93ad8a7952a438701e48
+EntropyPredictionResistanceA.3 = 2151650a10f79c6a8ea2b2644a4e0d00
+EntropyPredictionResistanceB.3 = ef7c635b0fe40b586cc86f09fac463ad
+Output.3 = e29598c703a4b4a8948ba0b31618daf848752b27cbaf7092042604bd0d38fa2eb1dbddbf28d91854ca8efeae3d1bfa65da4dd768656cdd7b679da996691dcb165dec585af94e0aeb084a79ef2a5c4724
+Entropy.4 = f6339e6725a17dd93086ecce217c4b5d
+Nonce.4 = 6ef4085b32831d92
+PersonalisationString.4 = b6ce401d6f93c855fbe715a1edec0873
+EntropyPredictionResistanceA.4 = 921e5cd717dc45e24bfff0c046f728d2
+EntropyPredictionResistanceB.4 = 479f03c04ae7a42fccc494e2478c985d
+Output.4 = 63f0fd8eec86e4c361f1298d9eeba5962e53c586ff4314642aa88799bdef209efcc4e5cea77c85103ed917fd6433d49702c0db72d1159d1853679b7db90bd1a04e8b6acd0083f7dee9c73c45f173fe5f
+Entropy.5 = 150848c5e6cf91eea4ad86f314a6b0ab
+Nonce.5 = aa45bd223d0b20a9
+PersonalisationString.5 = c4c552664db16a81db3dbf332c15ce68
+EntropyPredictionResistanceA.5 = b2c72b89552363e73ef74dbec8101055
+EntropyPredictionResistanceB.5 = 8ac158c8e0a18e024f781438ce760a82
+Output.5 = 6c74a13daa939bfd5131906ee8032bc82b9b82e64162a8e37cf064be6fc259b9b4d48ab32dfe5dd3ae127b6a109bbb80cd54aa1827eb791e8dd2527226d94d19d2bcfda98d1351dd68f586ffd5c01dce
+Entropy.6 = a29011dd49ab57e31158e77e6af76a35
+Nonce.6 = abfd2207e1226a8c
+PersonalisationString.6 = f714552b9adb7b77a3d2291e4bd6b267
+EntropyPredictionResistanceA.6 = 8b7fa1d3ab0a15098b5399ca152b030f
+EntropyPredictionResistanceB.6 = 50be1b07c67a7dbeb0397f46bf52d282
+Output.6 = 0797ecc4c83e431c2c3676c0397d9a283ca43420bc170b97f685dd5c172af093b004bb96942e31ad04ef778556c0947e4552be752f359dcf2a002e636d84805311419ebfac8d67c7979ca0e83c277095
+Entropy.7 = a92b0b55ec75cd7e7e64c1501064cb30
+Nonce.7 = 9ef144f52a82746f
+PersonalisationString.7 = 376367be93a2a002f8e45023c10970ce
+EntropyPredictionResistanceA.7 = fb3f603ed0fb71592aa5a31226a2d942
+EntropyPredictionResistanceB.7 = 3eb1ee1ad52ac1f3029bd9477ac758a3
+Output.7 = 56ca5385a0750259ccda310a07185314b02b802fa0d8bbed8d4355c2cd15740dfbc4c0611929713fccc61c62fdf768697c7631a2c2969096c5798b5120bce151e168956e91f7299dbf86f7378194fa47
+Entropy.8 = 4567cbdc0afa937f1de2de129cbff8f4
+Nonce.8 = 505d064ad0f72138
+PersonalisationString.8 = a4860b46d39523454b728c82b9317280
+EntropyPredictionResistanceA.8 = 900e4bcdef484fd88927efa412caeb75
+EntropyPredictionResistanceB.8 = 5f6b9f99735c633b13464f2974f6a263
+Output.8 = 36321d22c9630f8ce534f7e2f5189cf3b553ae5fc3a6b1a89d828d5ee4ed0bd7a8f52f36c24e0a64fbfbc29ece38b35badeb1a42d4c4acc3ed2a52b38f68418fb4ef621127f508a0510200f785834b81
+Entropy.9 = 8f749ef7fc1721dd0dfa7fbe758898bb
+Nonce.9 = 05177266d0579c3d
+PersonalisationString.9 = 081b66ab3004692a32554d9f1a5eb664
+EntropyPredictionResistanceA.9 = f2821b501ca9caa964209e4a405dfca2
+EntropyPredictionResistanceB.9 = 2e27efcb01593c8957de46c30b2ca78e
+Output.9 = d0cd597339bcbd11b0b62feea587740de386504ed09c57538fa204873585271383a4fc0262e4349d4697176d204990995cfe5951166ba3258c51c95579f2feac5f3df10670bb4a3b4907ab90fad2bfa4
+Entropy.10 = 5fb0df3aacab457726dfe13db7bef5f5
+Nonce.10 = 60486e0ebb21252b
+PersonalisationString.10 = 4aa5cbc2a791480a4ac0c2e71095d5b6
+EntropyPredictionResistanceA.10 = 7ab409d405760f31e5ef8d51f76de24f
+EntropyPredictionResistanceB.10 = d181665517811f5dcbb9f70a4ed6dfd3
+Output.10 = d0995222272157fdc4acfee43a79fe8072b4d9cdc9dd270b679b0d90585186c658e4976156faff5488a25b4cbc28ebd02b2e9dd44339ed902a98142ed2151005addfd4b948e21a81d534ed2f8bf2d03c
+Entropy.11 = d33069a4efbe033cd5db8b8969fcf687
+Nonce.11 = c630116a9f434651
+PersonalisationString.11 = 899554a5a569ff128acc440cb386b475
+EntropyPredictionResistanceA.11 = 09056eee0f057fdf01723ffbb24d2d57
+EntropyPredictionResistanceB.11 = f5d6e9cdaa41de2a875a1da707b3dd08
+Output.11 = 4912aa4ced4193a28e8f8a8c3ca4dd0fad6220702a5b5b6e7e447de9027029b80279ed4c2f01e54c413fff25df583d99e70d2bb93f2bcc18cfc1a828306ba8608e0c1af6762f0b0501fc5a492f217d8a
+Entropy.12 = 61d0bd22ea519030d5ef21869ed1ac25
+Nonce.12 = 9d270261d8e5a9e0
+PersonalisationString.12 = 145fcc707d1259df0041d8bc28295ddd
+EntropyPredictionResistanceA.12 = 51c9ebd4e4c388169f6894ad2670944e
+EntropyPredictionResistanceB.12 = 2ee05d04f5065ceaf1fdc81bcf6d9368
+Output.12 = 79167bfe206dbf729b8f305aae432930f13bbc2c5f0255e8942393b89c2d1babfe0ef63675ddd2ec3fb6f65076ff3839e771e6d1f4f21dd10aa672b7491e33f05bd34767b9d4fa1fc80ca9b519ad2d5b
+Entropy.13 = 8ab85d78ec32d4fa37c4682909dd8793
+Nonce.13 = 44e6c9bb0fa51d19
+PersonalisationString.13 = 949bc81c17a6fc784a7d2ebbf3f7a07b
+EntropyPredictionResistanceA.13 = 30f892f888f01bc12b847e5e5a31c889
+EntropyPredictionResistanceB.13 = 678b27c412e345cb6bf7c29df02321c7
+Output.13 = d611e69a12b5887dbaee3624d66f20f4f0b634f068f8765992bdebf11799c2cdb1f75ddf7b5b528b43e4d7e53c398da96fee90240aa2ae9f9be6c913b15412c4ddb29717c2a45b52b9ae3f21985c1404
+Entropy.14 = 69b4a4a71be9f3a0f298a931f1c38fa2
+Nonce.14 = bcb8e0300d52e0d9
+PersonalisationString.14 = 1bda946ff114936671f2e42e23495155
+EntropyPredictionResistanceA.14 = 1a63078ea72faa632f6777d552885150
+EntropyPredictionResistanceB.14 = c3f7b37dca59fc9a6a162d03fb093078
+Output.14 = 095a4849ecf2e00784bf4e5c4340161d2374cd4815f001d75568118ac257f749cb00ca92986d0031b1e76a76ec2896b1b1383528d1b6f8d07d15b7d0175d6156e896f9be114da2bb93fbbc212767e5ab
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 3aec1ceeedea11a84396ca4890da60da
+Nonce.0 = 8c61f81738ef3f5a
+PersonalisationString.0 = 0276718365305696b6a182236c7348c1
+AdditionalInputA.0 = 4ffde177c527969f9f0fa6f4157264a5
+EntropyPredictionResistanceA.0 = ad90e4469ed5d56eb3ae6c83820ea2f9
+AdditionalInputB.0 = 800a3f1e35ae0e9c6992c881e64451e5
+EntropyPredictionResistanceB.0 = 22462e0281b296a5aec3257d4d6e571f
+Output.0 = d00993195449474b8a56d942a578f838b15bf3c70fc44748f171623432794da6c9b45cdadf22c57c7b1ce5428bc56d9b53fed7563cc20414a052b200d4afe4713865626395167d4e7fb68f9b0865905d
+Entropy.1 = 910ac8a5997d24e7f755c77203d3e7a2
+Nonce.1 = 3f940def52a9968b
+PersonalisationString.1 = 679735bddfab512ec8454a05b3e7cc8d
+AdditionalInputA.1 = da6467f58855a11c7d9de43a51c548bb
+EntropyPredictionResistanceA.1 = 26d4f667b0b795f6f8b10c5440b9753b
+AdditionalInputB.1 = 232129cf78b39c8da909f0d76ab0d069
+EntropyPredictionResistanceB.1 = 32373604c9f0e438973aca2e85cac561
+Output.1 = fa5cc98baa20bcdb22352937f80405469957dc3482b508edb0fdd1ae40990c52b00a8701843d48a1ce8d13fcdbfce47a02e6b97b2ce818c983656917d19a8d256ca731ca420a623d6b744b28a9a3dfca
+Entropy.2 = ad2556298af65acf1bfad7e9a8007954
+Nonce.2 = 9a5d513ba2fb6eb5
+PersonalisationString.2 = 9310dc8db317163f10364ebb5c9e75b1
+AdditionalInputA.2 = 72037e52de8cdd6f86262460bcae8d2e
+EntropyPredictionResistanceA.2 = f237234c29524aac43498fb2b7356491
+AdditionalInputB.2 = f686b2e647f4f242ad7071efe92318bd
+EntropyPredictionResistanceB.2 = e9f85396d731153299cba17a15939aaf
+Output.2 = e120bb3e22deaf48d4adca5cbfc14835425aaea488233af7efd4b381553208f3914a47c0d2bdfe2c803e7c6f03ab88ca580d9b9fac3eecd64f562e6546ee180259073a0007dcf5a89f3f6693c7cff696
+Entropy.3 = 390b5d6a3ad4f8ade1956680a9187ad3
+Nonce.3 = d49760ab73d373c4
+PersonalisationString.3 = 65232677de82c444fdc97419eebefec9
+AdditionalInputA.3 = a9d191b328c792602414f431c2c71671
+EntropyPredictionResistanceA.3 = 087953317edf7b5959e903d134210f1b
+AdditionalInputB.3 = 4b3b83b7230346f72559214fba808b01
+EntropyPredictionResistanceB.3 = e8b397f3531dd48f53cd4763543a653e
+Output.3 = b8be70c439c5d9a0f2633012c76a867631d39e900926285bd5403302e62958384e9b6f6bd702ac900c8f6a43ee0971975138ade93c3be28e978cb83787d0f929b09d02547d8eac91c7b2bcf9e529269a
+Entropy.4 = 868f47c80d3d677f917b9b07a3662fd0
+Nonce.4 = 706f3480cd2e32fc
+PersonalisationString.4 = 024932917151f233342f874f81e01ac7
+AdditionalInputA.4 = 068f8061840fec8fc5f5d6d7fa66568c
+EntropyPredictionResistanceA.4 = cf60c6417d5d2e882d64c274898662fc
+AdditionalInputB.4 = c5ea48798386fa00242072082f550f31
+EntropyPredictionResistanceB.4 = 1597357ee42147b44b0c1f002a6a35b1
+Output.4 = f3660960696a122f79c5390d5fe3f7bbbc33477768daa02674a310dea7fa4d8090219de3dcc66b434243393d92fe08c7ebb9e460b237902a4f13a1ec6bccc4e4ef904f264ed3fc6b68cd74e2911870c3
+Entropy.5 = 0ca98f147c261d03ce88bdb75c14d808
+Nonce.5 = 91a1f75c6095c940
+PersonalisationString.5 = e0fc78a65e21864c166cf51ed3e60545
+AdditionalInputA.5 = aade2fd339896ab876f191721a4493fa
+EntropyPredictionResistanceA.5 = 0fa6f9771ca9de45baa60b97d76cfcfb
+AdditionalInputB.5 = f5189c46e4ef973ab73e598c7403ddef
+EntropyPredictionResistanceB.5 = 6a140c18914fa16a56dde25298d53641
+Output.5 = 6b5dae694029b22532b91069dcc4abda8bba7af507a13be37b069b16c0fed737062593c93b91790d7b3945c827d34f5916938f5122ce98bb64768d18ae500afef81ec5d83ccdcb79dcff92d5ab0a197e
+Entropy.6 = 90e66c21299ace37fc548f4168f048db
+Nonce.6 = de58bf1f191e7eeb
+PersonalisationString.6 = 32307098d23398ce0aca710dac0b5eed
+AdditionalInputA.6 = b43911d0f140bd6778e5ec15bec09036
+EntropyPredictionResistanceA.6 = 5398a16a670af6154513d1aea01ee0a8
+AdditionalInputB.6 = 622ce7db60c2eecc015fd8e33649ab3e
+EntropyPredictionResistanceB.6 = b65cbd1f918c78d37bcd73db136f5a50
+Output.6 = e90a8a14e786a50115f4e91ea8a6511d1e56d04dc6d4ebc500540b1e5c62b71a596a95c4e35936e2dd9343fbc5a231d443be747c14507c9bb571671f4d40dad4c85aeaee4597b3cc9b052c8aca16fb8a
+Entropy.7 = f606fbeb1e5210f5b75cff11f21c50a2
+Nonce.7 = 7714b7f95fddfa24
+PersonalisationString.7 = a36501e205a60c99ad5d99d3eacecf6c
+AdditionalInputA.7 = 2bc88979803ff66c485bdf6979468275
+EntropyPredictionResistanceA.7 = b405402b2083e9841178bd47123ca9a0
+AdditionalInputB.7 = eaea74ae3c14c0b353a5abe99133070f
+EntropyPredictionResistanceB.7 = 3c4c8b2e2eb80ccae3b56d2e712f7849
+Output.7 = 37eceb57357ae383fee1501f6ff981c499d688b58c97334be654a9d2bbeda121838f280722cf05602480202b419f5d641d1dbad84e5a43c558959aa04fa7c518d98902a5a530815bc3a21fd6a63d83b7
+Entropy.8 = aac07e5dfc53949c1db8143c27a9595f
+Nonce.8 = e8737606fcb1c7ba
+PersonalisationString.8 = c35562f8a7a00755850982d3c5fe1ae0
+AdditionalInputA.8 = 2ca3478dc8540cbfd8cec2894d557bc6
+EntropyPredictionResistanceA.8 = 562364f082327623d6e6c5e1fe1d9de1
+AdditionalInputB.8 = 3974abc49b306a7ec3690e7fdc1536f2
+EntropyPredictionResistanceB.8 = 802a7d33ecfe27540642625e24ac584f
+Output.8 = 6cff75969cc0cdd768e67f93b2f9380261586bf6e0eabf5db3b0e6918f922ae9f9e611006cbfd99799f1cd8359132e85dce54b7d54bd17d421fb2f1f4c4ccaa8102a6fb4044eb2973826fda0c9a5c3c3
+Entropy.9 = be8f5f426c862b2f19cf192946d8fd96
+Nonce.9 = 6089d9904d39371f
+PersonalisationString.9 = f0cb5e8aac358d5e3166241f7cf14c1c
+AdditionalInputA.9 = 9ad46e55f17b6281c1f3ab1fffb571e6
+EntropyPredictionResistanceA.9 = 24a1710b604f4a40dafdf20860143f79
+AdditionalInputB.9 = d3e7bb5fc66837820e0db0ee3240266b
+EntropyPredictionResistanceB.9 = 1e3da76db47d16015528e78837ff30e1
+Output.9 = 59b91a0b6d7ed3a3f10976eaebc620e7dc9432252fe6b5070b3583ab615c99d2c21b697835ea0dfefba316fb8839262b427002b413a6dff5120217bee1d6e39ba6f07d412f154e106c9b6f4cdfee37f1
+Entropy.10 = c18dbc0b6d8ee44d6812e7cadd7697dc
+Nonce.10 = f22a6c57b1ac6d36
+PersonalisationString.10 = 738dbdf28b6662e341e7b8e181cd8cb1
+AdditionalInputA.10 = 7f43a0bfd08fc66ffaee9fd51b541eed
+EntropyPredictionResistanceA.10 = 26150ddcce3159b829de2032435b71ac
+AdditionalInputB.10 = 778a44f1ea87bfd05100fa44b6a2df95
+EntropyPredictionResistanceB.10 = cd74704705728d479ab9de0ca7f489c0
+Output.10 = 3967992e3259430a9e5d3159f2c78ff8d1e0f515801dc583218d8669c7596c5e61f80260f9b864af24df39a76d51d4822ee5d91c72e161ccfbbd884ddde6cd7cb9b12b2de2149bb2b6dd913fa0eb9f11
+Entropy.11 = 13f2f5005523818a19bc95c439edfcd2
+Nonce.11 = 5c8fd86241ba7b03
+PersonalisationString.11 = 1e51e10f9f20c55bec0401a2b8397922
+AdditionalInputA.11 = ba5c696d6ea29ae565d9ad330fec9a4a
+EntropyPredictionResistanceA.11 = cee77626b87c277151bd44056616c486
+AdditionalInputB.11 = f0eaf9f90f33604e14e9a4754d4ac25d
+EntropyPredictionResistanceB.11 = 6960109d152621d95e469752e86f1b49
+Output.11 = 28a91e0dba41e2b95d4ab4c3841afa9f0f4dd05fcdd1b7ca623480f7ae87ecdbe54c7d964d756a7b31945caee8822f7820fcc11cff13ec876cbc826936c72094cd21ea40423ac77a3981dfca95ebfa42
+Entropy.12 = 7954c4a8c7a0bccc9916c59337635f36
+Nonce.12 = 4ad1cc40812d5c60
+PersonalisationString.12 = f3d8b6ae18df93b45dfb9c07c92d4dcb
+AdditionalInputA.12 = 49df1b2c6631616c20c6a226ec8a4949
+EntropyPredictionResistanceA.12 = 2f75cba682cfe5fa4d0bc6effc1e3fd6
+AdditionalInputB.12 = b6487bcfdbd2d3d0b3198d2d11cd8d21
+EntropyPredictionResistanceB.12 = 5171bac475ffa8aff255f338f35c9192
+Output.12 = f0a69c6447d9c986ab50954924105b1910179467e93e6d1ef17391212359092826cdb8440cb8b10f79bbfff4d25a3e3119ee420a01daf7f11397b4dbee9e475ec8efd0881349c135a0490c5510154d8b
+Entropy.13 = 12932d93123a3fcfecdb5f54ec8e4f28
+Nonce.13 = 7243fe6c0c123d27
+PersonalisationString.13 = 90c1b3ecf3889e945ca6cd05d6699d9f
+AdditionalInputA.13 = 2118431fdc3236d1b9d71687f166d31f
+EntropyPredictionResistanceA.13 = ae372b538be56378c7089616fd91dd12
+AdditionalInputB.13 = 17ae2661959f4687d65436a5f09c98fc
+EntropyPredictionResistanceB.13 = 838d09da08bc5fe405fb18553fda4851
+Output.13 = c9e739d23250437c065b6e718965a6a71e00bba2495ff7ad0c75d80af7fd77a35817fd754a7a2824b340e532bd9d4cd8d89ff1a60afc465a8d7a7849e62426333707ab845a7cd136c84c2041002335cf
+Entropy.14 = 9c182b5685dcc822ded2a23bf4ab897a
+Nonce.14 = 1f209efd8ce30ddc
+PersonalisationString.14 = 65f58f0976b8ea18ebe8c18bd8f31a4b
+AdditionalInputA.14 = c96d9c43ce16ec6de667c8d5e75320fb
+EntropyPredictionResistanceA.14 = 7c55b34d28bb2ede540fa952ab2ece88
+AdditionalInputB.14 = fc89fd42acc5f0d0abda2e2605160c31
+EntropyPredictionResistanceB.14 = 25dfad13b73dda8591f7b4b44a23b1dc
+Output.14 = 21108b0ea2e1e5bf538db3587af34fac9c70b4c8a350b454029333a2e0160d8009a8ebe222580ec4c89aee943bad89cedb37d6dc09d5a4d842d06383fb0a4aa3e6d7e2ca4233da519812d5b076e178f0
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 1ae0b6a7d96ab57c7de276cc5e673799
+Nonce.0 = d4f120b59cd5b38f
+EntropyPredictionResistanceA.0 = ff3962d80debf03df6fac93f7a172743
+EntropyPredictionResistanceB.0 = 88d7e4a43d082aa26878af02d1d7f14c
+Output.0 = 992f36ae4394a7caf5cf35efba2a964bf16f12cba5822c05431ec24447c952bcdcc475958c1019fd8b1ade889870ae8c58f216e9ca2245f01ccaf4d652b70baac78bcf16ac060ba90d39484f25996155
+Entropy.1 = a7d3f58f11941f8039584ce03700e785
+Nonce.1 = 64a1693168f03b6a
+EntropyPredictionResistanceA.1 = c98174a88cc6b88f457cab885cbc4c84
+EntropyPredictionResistanceB.1 = 747768555981d2ab26570b557be402f1
+Output.1 = eeaa98c0c4559482ecfa6d510805ccaa2717e2de28e5308e3c1bd4aff6f03ccb9f755ba6a63a65de636901a29d2207cfa19697ae2b5238244bcb7fe3f7e6f0a594427d7a2f48e0db6b8631524b3b3d3c
+Entropy.2 = 37b6f1f8cd76e4a8e694b90d5ea6f9f1
+Nonce.2 = 01b0763275511042
+EntropyPredictionResistanceA.2 = 14997e460c682f4fc73fd81b269a70a2
+EntropyPredictionResistanceB.2 = 883655d4a1adce261f846aa1da929ff0
+Output.2 = 153de0fad4455ed3636e25369ed796a864a964b078a2c898b1d8aef17d392f7b46987dc68abdfd85719a5aa7f1eb31bb88c3d43c90069da57e61c1ef007b9c3b0093efab75742e147bd6151abbe564b7
+Entropy.3 = 78f45c184acc4014dc0b93fe4430f7cb
+Nonce.3 = 0ab3a41d02bed419
+EntropyPredictionResistanceA.3 = cef13f458b848ccc8722e213dc87c27c
+EntropyPredictionResistanceB.3 = 993c1a6f2abbca775731da7965b908f6
+Output.3 = 63ace2273d1833cb6dd7fd8512b3d9b006604fbe79ea9cc99d11ae8489af588e8062a8674db472ce74060e53ecdbf2f50fbab308282ba78581a16cf3547ab040a7aec04ee1c9dd7efa8632c1032950e5
+Entropy.4 = 40bd8db16f5bdfc3f50d82f26ed733c6
+Nonce.4 = c799f470c6dca5e2
+EntropyPredictionResistanceA.4 = 8d50058cca1da7fdf272b0ab331e7ff5
+EntropyPredictionResistanceB.4 = 156c8fc84126a843def1f8664fac146f
+Output.4 = 583034196d1bf4bbc2036d4204c65edc6ebba38e33500736873a0be866fb7e08e70c9e272fb7123b1b502a6342682f792c9116e62535ecb35b719a825c5b25498d84443ebee93aa11de2ee12ff2d6594
+Entropy.5 = 123a4b7466a7529e0bde0b29c3d6845a
+Nonce.5 = 0571739d9bdd8b64
+EntropyPredictionResistanceA.5 = f6b0a9528ad01d8e24a8c213c69da4ce
+EntropyPredictionResistanceB.5 = 738baa2f9120d94e585acfeb8c7629e3
+Output.5 = ff2fee0531ab4812ab8d95cf62daa5347146e48ff6999b710d85a8767b1c4cc27fcf8f3bbe11e49816b7c10317be4c901f23316e62f4bc375db0d7fbf212055a763da141d425f6e2aa814878e2d7f9fb
+Entropy.6 = 1f218da916ae6a19f3bd10fc15dbf389
+Nonce.6 = 6b37cd4207799ade
+EntropyPredictionResistanceA.6 = 29907048d8c029931af248ba48b879a6
+EntropyPredictionResistanceB.6 = c907890f35c32b01dfa8cc12185f1e94
+Output.6 = cda146076a04d831934dd014ad6ada1530972ce952be98c96ef0af05a53fa43b588548319bfefcae474ffb9052190b5cb62c8a952b6761a76b6c4fbe563ac483fd533d3040477dee35ac8a5cf8dcbae4
+Entropy.7 = bf851568d50ff74eacbb3c9d4346b176
+Nonce.7 = 87db0d092786e2de
+EntropyPredictionResistanceA.7 = 9e29fcc1894963847b2e618bcddb6262
+EntropyPredictionResistanceB.7 = 82e0ff0b73a3155b89ed00b57570c4c3
+Output.7 = f1f65590771d5bb423fa60bbbde6b0947106093c0b1dda830f533cb240b11eddb19cf017e9a8dab0fcc5705ff6f4f2dfac518e0c76ed2de0a960821d38f741846b2546242f4e3953afea039fa151a447
+Entropy.8 = e1158f464c47d660756e326d7e200839
+Nonce.8 = 64357e98dcbe9a0a
+EntropyPredictionResistanceA.8 = ae7cedf2ff60c067ca99a4b909a6b581
+EntropyPredictionResistanceB.8 = fdb6d8e239c3304234c66a31180c0a2a
+Output.8 = 651c508b2507c3325ddc71d0a0622b992add93dfe0c1411f089df0e4d934edbf63f29d00d497fe75bc2585872bca605b893820e7b728146cb1bb65445ff83a81de00ebba393b53ca629c828fd9aac982
+Entropy.9 = b0076e082d2a0fc64e31a9ef5eb1d0a3
+Nonce.9 = 8840654f2c852963
+EntropyPredictionResistanceA.9 = 99d70213898c507c28d4dcb58c4ed05a
+EntropyPredictionResistanceB.9 = 2c05650d720fd2f796609cc99f472ded
+Output.9 = 7ac96e10f2cfa3b56e0596e7276fb5366c14aa90a2b7550ed340b76efbb1ef25562329792de9ab27c535754ea26098a72fecb160d144a812b35bbfdf19ae24a92073856aca20aff2d9520c80fb1b0322
+Entropy.10 = 6abab18d0068be49d22a8ba563fcfad1
+Nonce.10 = 6e5f062a7a491b52
+EntropyPredictionResistanceA.10 = 4a69f232668f838cf1968ebf79fb25f3
+EntropyPredictionResistanceB.10 = ac2929130c2420218c79d40efa6b8b41
+Output.10 = e1bb60b20e0423e0b88291698301fee2859c07f29c583a202433c1e33d4fcbb3549ba5f5a0e2c0875ab8112bc4e48733e83c5819be1c1ddfe301404bb56eb51f82a575a9c5ccd8694547b89f315bac61
+Entropy.11 = 9d2b01b57de6e0c11343a3e4cd930539
+Nonce.11 = 2e197cd4cd689f30
+EntropyPredictionResistanceA.11 = 2881274dc8b1d9a48c976a9d5ec82f99
+EntropyPredictionResistanceB.11 = 82e01e7d955793049319c0b1f2d5b3d6
+Output.11 = a5ea983d7e1cf41a025a34fe80d672cb1312d1b282b17f984be32b8efba1f52a9948de43ea6912819b26e4c0c778f347c2dc5183409716b5877494b0da82a61a060b5ca011730b0bc67861e64e4dbc61
+Entropy.12 = 150fb5182dad2565ba07e208359ac2f1
+Nonce.12 = de6b9b472b850eee
+EntropyPredictionResistanceA.12 = b304924050d6e6ad0294d52d14ff77ce
+EntropyPredictionResistanceB.12 = 54bc1779c95169a2b044261089597aed
+Output.12 = 8129f31311b02c0650cd22126c8abfec488cb7f29de015f52135b3a9f7624a5290d6de39b8a88be69c6f9183d75873ab41e74ea87513638c72b0550cca0b4eb3850c84e8c81c63c84361bed63fda7780
+Entropy.13 = 689adaaab50fb35ca25bcd6fa86834ef
+Nonce.13 = 02a5dfd4ce95c9aa
+EntropyPredictionResistanceA.13 = fd180c998a64ffeb854f2fc4a4e06dd9
+EntropyPredictionResistanceB.13 = 9afb1088b95cd6c609dc40f55b768b79
+Output.13 = cd016ab1b62cee1902e18f8854135bac29da4a868767f079372e9afb5f63d06acd30458e75cf216c73dcaa82a8410534869718841daf70011db099cca7c2b83fdd08d449e2080c1bbfcd453e02488663
+Entropy.14 = 278162679d694950cea4397cb89b41f8
+Nonce.14 = 7cfa2c4970754589
+EntropyPredictionResistanceA.14 = 7240a134798b737bf7a1a0a8da64ee65
+EntropyPredictionResistanceB.14 = a5e6fbe48410b976c88d55b611c94ce1
+Output.14 = 050216e962cba38ef04f673488d5b4bcec8d1122f75f7c445c79d2be00e21d1292daac8503772c83839933775c6b926025cc1930bf06222db132c73724297167051dc5eb4e93b4ccdcc0a9e4778794fd
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 3e8b2391b522a83e458e7f97cd79cfa6
+Nonce.0 = 834892e40e7ca2f9
+AdditionalInputA.0 = 06e8b71c02a7c9c2530393a1a136a9fb
+EntropyPredictionResistanceA.0 = d78a7a2579bfb63f1d2dce605c3b236c
+AdditionalInputB.0 = 7ce584484566f178ff46ad52ab88f034
+EntropyPredictionResistanceB.0 = fdf4d9115dc518027cb72918103ce035
+Output.0 = 7df363b2e2c242fd292e5b9d2ff3daf0d93f9f966d80169034e122d69ae63f0b525d23b995ef7dc0ca1b18a6de2bcffca5d1d9c990bae9aa082706ad6d818b669916d7e108da6eeca9f5fb4aadc9491c
+Entropy.1 = 49f7c59292c4daf81156212bdb557223
+Nonce.1 = 8191112421305960
+AdditionalInputA.1 = a9966f777f13a8795d9063c73ca8535e
+EntropyPredictionResistanceA.1 = 8e06cc72b39929bcbf091b350dec335c
+AdditionalInputB.1 = f30f329bc602ba04aa6926fd7d0f63dd
+EntropyPredictionResistanceB.1 = f113fa2c865d931c0e50c667f2a7b7c2
+Output.1 = 27d480616d2bcc9317bf651ce114b2bd6181766ba764bfea0745eaaebde289c2534c7bb9a91106c760cd7d6d135a5f2e763819ba18aaa0111952e6ac0c7b1a12c5e65829b02738dc8a3adef098eafb10
+Entropy.2 = 9ffb1f62c5dc19cafd685617b464c340
+Nonce.2 = 7048b6ee0dc8bb88
+AdditionalInputA.2 = d5160c7a136bbe2b485d4b77bd751f25
+EntropyPredictionResistanceA.2 = 1af9d77e4f7258cb9152fec901f22a54
+AdditionalInputB.2 = c819cd2dce1a5a4f200956caa7b260fc
+EntropyPredictionResistanceB.2 = 465567ff75342c64b562b1ba7deacdab
+Output.2 = 53aedb16bbc4afd83cbeb58be731fc48b4487170d8d4fc96e251c48a0fb12c5290f7908aa0975f974acba3804fceee574e4ffa8ebcc5a0c831bbfa7d3bcd22f553c54bf26fd8cb6e66a0705accf39326
+Entropy.3 = 4ec7afc2988cc1662c1b9375b9b146e6
+Nonce.3 = 405ec37c947abb51
+AdditionalInputA.3 = 3a2eeb463559145d47c903ffe62c40fd
+EntropyPredictionResistanceA.3 = f975996e3473d11d180c92265e0c35ff
+AdditionalInputB.3 = a4d7a820fb79b90a87e8593ddccee2fb
+EntropyPredictionResistanceB.3 = 32d43c092726bca7cbf8569b8ddfdf1b
+Output.3 = 2f136490f3dc1ca00a4f02769b3e431356a9d5abe536af98acc843419070c24938db5060c3a91fae3792404e5dcbd9cf4816043814cdb846ce7735829aef4853cebc82347948ee4f4971ee8f2076bf35
+Entropy.4 = 406a5988c2728c681a0e2c55107b4246
+Nonce.4 = a735c91d48cbf3b2
+AdditionalInputA.4 = 9797a895039a06d1fe4af793d53354ea
+EntropyPredictionResistanceA.4 = 6bc4aa11968c136b21aeb2e76c3a0ed5
+AdditionalInputB.4 = 9f6c807166a0b3101b520d2b72e93821
+EntropyPredictionResistanceB.4 = 052c7e915a7f7a934b927e5d2302a1bb
+Output.4 = 9c37929bbc8ce759644fb8f93c0129b2e2470577dc6968c325728a065ae6b6a62bda5b1a2bf15f01bf470b7e72a3815b4daa0f843cc852cdf5ff36f59fc93ae2f1d309ebc463cf7bc24016a53a98ffbf
+Entropy.5 = c70005766e3d10165a6701627f00e41d
+Nonce.5 = 60f01bd2f7947d7f
+AdditionalInputA.5 = 5597080bd9835e8e277c1b89452d5161
+EntropyPredictionResistanceA.5 = 258e3b916f9bfc5cd2005e230ac48448
+AdditionalInputB.5 = 0fca03bfced7915ee299764ae73ad5ae
+EntropyPredictionResistanceB.5 = b17a2c58e89962fd2b0d4d36a6201121
+Output.5 = 289eebf47ff4061acdc98d46560236df7d621068a0ab049209bce94c235a60b70e44e3f62334dc21f8d9bf456d9dfed5b88a82b113123a4571a9e07e23a56fff521638e688bd094044dcf05811cfec5e
+Entropy.6 = c00a713f2b5ee1dc028217dc6204ef8f
+Nonce.6 = ecbaffb4370e9680
+AdditionalInputA.6 = 5ad92c4a5eaafff87a3a83ad8413e9be
+EntropyPredictionResistanceA.6 = 4a923cd7cf1626340ac9dea3f856601b
+AdditionalInputB.6 = 5bc0df46ee353b67c379ef57938e35f0
+EntropyPredictionResistanceB.6 = 2187788ec5bfab57c7c8ec2bc0441782
+Output.6 = ec41068b20eeb5d0e41d1b0d5746504dd7981c66462bceef5af4f7dda9d1a347aef9fec2af8280aea58ae01b8e3f2b8ceb8e90e3bb7ed97a6d99e1dbb1b73f6bfc2188074fc32de075a650adc20838b8
+Entropy.7 = 20332da7ba11822b30bb1d8becf5828a
+Nonce.7 = 95c12c6cfa6d5cc1
+AdditionalInputA.7 = 13d3817eb9f42bcfc1f200ff2010e1e1
+EntropyPredictionResistanceA.7 = b7fe2dca05f0184b7164802f70472cc5
+AdditionalInputB.7 = a1de1c39a5813467ce2e10299f87c4ab
+EntropyPredictionResistanceB.7 = 362d302bca0d489ef97b0ba433d1825b
+Output.7 = faced1b7640dcd1c7d06958413145fb24dd05985690530a1137b2c85e719855ec53cfe0e23381b4502d05a5134c8863ea0a61d33fe4e48e2822a6401344393e0785277aec9b949fb83a9b5e82844c5c9
+Entropy.8 = e5e94184d1cfe7168f5b2789092475f0
+Nonce.8 = 291f8f2b1cbecafd
+AdditionalInputA.8 = bd4f0ee3ee083000d6d33869a4a8d8b0
+EntropyPredictionResistanceA.8 = 4d39aae76a7153d69d0e42d68b06bcea
+AdditionalInputB.8 = 35e65b52eab9e3301e24102c5ec78bf1
+EntropyPredictionResistanceB.8 = f7ad9a8348fc9104055fda7654efe3d7
+Output.8 = acdf8c3943986785a80b3bb0ea957fe386c7ab05608c86850d06b34d7e313527f89c17d7b4b813e444da61c1a32b34c90fe4207e8890b86d732ca5edc7ccae3ace7188fdc11b2092280698f91648db8a
+Entropy.9 = 54e85bf43fe0c4a4ef16fd60362c5e6b
+Nonce.9 = a9241f8f7bd02362
+AdditionalInputA.9 = a75b8713c93dcc4c774b3d9b9e35164f
+EntropyPredictionResistanceA.9 = 0e62ed433b954fb451fcac096d5e0088
+AdditionalInputB.9 = fd678a7f63402af58061960e0026aa49
+EntropyPredictionResistanceB.9 = 709e44b1b60f0e3652c10c7ef0119987
+Output.9 = 0e6b699d328031ae54ff1d1e33eb2c4961860e379e9f55b3572fbc9e41cd51709f60a8db4181ed737531518729d8f927145394fbd596b4d9fa119d2755e7ff21fe9b365df373b3d5e6353db00e7e1c66
+Entropy.10 = 204e8a77a3b2b8a1ccea275567b717c2
+Nonce.10 = 95462a632f125e9b
+AdditionalInputA.10 = 3189ca06d33b6a1ca745f6f9aa6bb451
+EntropyPredictionResistanceA.10 = 47a3c74dba44758ce1a38404a7f58434
+AdditionalInputB.10 = c2c5d310caa41bf9ef6499b237a40051
+EntropyPredictionResistanceB.10 = 0f571630f123cd229f98a0af4b1d4bc7
+Output.10 = 516e91b42b2d3951ee998938ff3ff0e1acec8ced564dd3bd1076f0af73470683e6ee39e0f181297080275a03e58a2340c5f756b6e0eddd89d2c8f1ce3fa69e0ced922e6104d65d65e209ffb83751cd49
+Entropy.11 = a8a66e558131e4674b8e06c155de4af4
+Nonce.11 = d37c5037e58c9456
+AdditionalInputA.11 = f2a258176e2d45e5e14d530e9ab97928
+EntropyPredictionResistanceA.11 = e035381d02319599c92a806507e7074e
+AdditionalInputB.11 = 73fc20a9aa3e44084319d0c641fb6bac
+EntropyPredictionResistanceB.11 = 847f4cf28e82ca4cfa99f30aeb205e6c
+Output.11 = dae9171810f8c714e8109b8ffbb00abc37a2c2c1eeb54524296c406a26e7d18fb70f00f9f15316c6b380e95bcebdd06f5065f0be5326fed13a552cb74a86c2256fc77a45cd1a71a73ac7685b9914c202
+Entropy.12 = 96954d8a62bafba4a19760b6a05555f7
+Nonce.12 = 5dca3070dc909e08
+AdditionalInputA.12 = afd0e97ccb953ef06c5d6cee640f5487
+EntropyPredictionResistanceA.12 = ad4ada8982609abaf031a44d43ac9e64
+AdditionalInputB.12 = f8727648365283bef43b0fa0c9712c6d
+EntropyPredictionResistanceB.12 = c22afcb59757b0f19081d6c58057bb75
+Output.12 = 4dfb074b59db54679a5fef790699a60c8d12ce95358465eac634f1b04b979a6a7df6b3ac40e129c3d31dd788ba214456375643e771d6f7ef0687106b2194dfc91c22ff5f84086ced452288a7dfab0432
+Entropy.13 = 1154d0054ae86b68358ab76cbe5a23ed
+Nonce.13 = 4e6b26ca2576236b
+AdditionalInputA.13 = 932cd7f0146abd09845b5d684c8bf818
+EntropyPredictionResistanceA.13 = 142d63a4a3960ce79c9f7b6447c03c2f
+AdditionalInputB.13 = 48e52113725443ab03f22ed873195118
+EntropyPredictionResistanceB.13 = 43ba08fa42ad76935ccd509ca9fb470b
+Output.13 = d4b6d71f80fc99487b25d6f93cde2eae111896220250c1d901876eb48b8ebf25b2fb7cf36f1b29f23ee8c823759bba3d113ddc66f8dc48958298ca53d4dfd6ef3bf08610099b0e95bfe1f32f5d387dd4
+Entropy.14 = fa80369c3f1e92b04a576a347580d5e9
+Nonce.14 = d5162eb9e3a724d8
+AdditionalInputA.14 = 1bc44302d1c575264edfe227a4187e8f
+EntropyPredictionResistanceA.14 = 5567b5f371b1e4efb9883a56fb348229
+AdditionalInputB.14 = 7939e4690844a462fbd5088c28972dc9
+EntropyPredictionResistanceB.14 = 85714425be41ddc2776842830d8a8b07
+Output.14 = 496ca0dbaeaa72ddf1ea0823cdf4c2f9060874f66b732370c7e1b03bde45d1222b361f3ae6c29b5e12584ce4a77362fed355f7ced5683b6bb463f895d8035ac2156eefe573be061b7d2fc0cae57e13e8
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 58cabff9fe062ec4b5e7831525b99490
+Nonce.0 = aea248b1988136b8
+PersonalisationString.0 = f994afc35aa751b3e63d1f0ae9759963
+EntropyPredictionResistanceA.0 = 61f583c0e39c3191aa76cbf8161c31de
+EntropyPredictionResistanceB.0 = 5107e28ce4e4e86d3f96a15eadf55f2e
+Output.0 = ba0e419c307325f84e0b82b3c16a371fd6e092a4d0270077a4a36dba62185471f554783743ca3a257b19369631ccb11fc0e164613a1bcd3cefa7a231f845762ae395f1823de10704e7a67fffc8d0cdba
+Entropy.1 = ce77c9d03d7ddb4b8b989f85e94d3b52
+Nonce.1 = bfa5007fd3e716a1
+PersonalisationString.1 = c331c5b29bce4b57013ecf98735e5954
+EntropyPredictionResistanceA.1 = ff4ddd81b71384152bcacc4143779131
+EntropyPredictionResistanceB.1 = 34b8e247fbf74148c00d780363d9fb7a
+Output.1 = 9ffd852c0feae14b1b5d77786979c0f6e3c63488d75bd1f47830597b2bb60ecbf642d5dba1652d6066aff41771176cff2641c819ca9e22d788403dbdd64e81e3b2f58ea8ef317d0722a8fd5228ac24bd
+Entropy.2 = 550d1487fdcac9cba7a2856660b0a672
+Nonce.2 = 0026c2b8a2d67fcf
+PersonalisationString.2 = 7a4a1bf7c0afba757757d7c4e670d8da
+EntropyPredictionResistanceA.2 = 349cce345bf6b070d300cd3aea366b5b
+EntropyPredictionResistanceB.2 = a6f16543ea65e4c12ad5c3c79248e768
+Output.2 = 2649648d5a7c4e46015cfdfc8e6a9edc42aa6b5bc12946fbe2ef4f3e3ed9632a69be93b9bc9acac7d51c64020760298a5d88475415a82ccd925d647199d03d6bd3d8fc8ca273f06e65fbdc330bc9b6fa
+Entropy.3 = c13bc23ec5c9f858dd5f1ae76ab7009a
+Nonce.3 = 9640621f77995383
+PersonalisationString.3 = 796bed9b972aec33276ad8a7dd08ce99
+EntropyPredictionResistanceA.3 = e5acf83cb7d92c19e65d0812cb502cc3
+EntropyPredictionResistanceB.3 = 9df2d4b9f09ea072042637c50a2d9919
+Output.3 = fa09d144de3dd661b57655acc126a4b6decd5a1a64e3edda4a59ea225cbb6a56d05cd541cfa46ca9d922503f32cf5b6e04c2ff09bf1680aaafdb603607073ea4948f6bd43f8a2029420d0bd1b7894fb8
+Entropy.4 = 1cdc32ad34b80bbef88e7a99c9de1b3c
+Nonce.4 = f1ddf26e6c5caf74
+PersonalisationString.4 = b8461da8fadc4c8c0c7507ac38f40175
+EntropyPredictionResistanceA.4 = ffc3f26c52856f91b5b208557a2c14e6
+EntropyPredictionResistanceB.4 = 4b1891141cdb7ce2361ad5875ed31d90
+Output.4 = dd4e54a37980f9fb7d19976ff598fb849c17e73057d9c7404419cecccef40502d8202368fc79533e82dbf0ae15036e6acbadb999bb01486e5e3336e37d31bea8e3ab2141f3103c84502a0f942f291d33
+Entropy.5 = 2cff2dbcc5d78662bf5082b01c53b027
+Nonce.5 = 78b62404f253b0c0
+PersonalisationString.5 = 3b87e3016bc84ee18c3832b0df1473f4
+EntropyPredictionResistanceA.5 = 45ffaf222b94eb45d4abd58c34c9a7cc
+EntropyPredictionResistanceB.5 = 14ce4f9aa78453b1b0b4c3e67f5856fc
+Output.5 = 55665d8f52131b1a7da998c4a9f4f96841faaa00a47b1e169ef170dce12caf6a857c671455e952d752930ccb572b6abe30945e278dc99140f4b8b444838419bebabece7d5f10e371946e297dc6e1069c
+Entropy.6 = c81a90c30fb48dbb9e3304ea77d284e0
+Nonce.6 = 98fdbb0da19dc9c5
+PersonalisationString.6 = baab1a4db0fbdf263194f85b265572b3
+EntropyPredictionResistanceA.6 = d1b6e0049a25525cbf2c0c73758357da
+EntropyPredictionResistanceB.6 = b1c7a3305ae1a0487c582fe4b48a9462
+Output.6 = c63f42ad5ae67f2adb948f132a53d3a936e00b621f3a427943fd4dabd408e59ec2465097a8c14a48175362cc9ab55c84db141dc0d03a891dc0b992213b676056699466fcb475e4335f8fa913e7b3d6d1
+Entropy.7 = 27385388ea2e79e67f9728787c64a2b9
+Nonce.7 = 41bddd1c24244b9e
+PersonalisationString.7 = a987b865f260f561f20a3eb2daad4eea
+EntropyPredictionResistanceA.7 = 466a391a2d7575595ae0db147a616f5b
+EntropyPredictionResistanceB.7 = 44a702e4ae42c1fa22e05cce377dba41
+Output.7 = 7173f6888a8b11aa950307eb4593f86fb26fde8654656942afa7c98a81c1b89838e3d56f8141d0da0cc453691aec673622ed7f711dc664e2c26f8556cf3bb8274c9eb8c0c6bd83013eb7704b39e031fd
+Entropy.8 = 5895b7df7a892ca5c977caa4daf91504
+Nonce.8 = 2d608b80f209af1e
+PersonalisationString.8 = 1331eaa7b96df7086eb5635906fad60a
+EntropyPredictionResistanceA.8 = 61dbddfeace1a461789b3a6f33a911a6
+EntropyPredictionResistanceB.8 = e8e88684d2b12e7ea7195dbffdffa04e
+Output.8 = a739e2c9b1728d64c324d62f230f602e4d7f713daa7a6395a91f79da7f125552d7ac4f637fb994d3e4170275fc27858dff64bcb9e1b5f235974d690a3a82e12a896276d94867ec0767c0de380e75ab88
+Entropy.9 = 98f42f1c9018bf967a15760bb05b7e91
+Nonce.9 = ae598198523e8fc5
+PersonalisationString.9 = 94ccb2e9cfe6b80b58af6c18dbcc0523
+EntropyPredictionResistanceA.9 = 0d18ec7ee28667f2d088d833d74e1bca
+EntropyPredictionResistanceB.9 = 7a49c0a803f896f20a2cdd3fc13379e4
+Output.9 = 4715261c21de3dd57e029acee64b937b0a5765907900d366c9af65e843fb4ee9ac4649335d92e67f38a2bdfc96d6d843c1e3301ff2753fc3a376b167109da3c93ec6488d35ce9d110a1062098ee87853
+Entropy.10 = bd640319c9c873fe20166b7d86b0797c
+Nonce.10 = 72eb064527b1dff3
+PersonalisationString.10 = a00ba747e429083eb9466a71d8552f9a
+EntropyPredictionResistanceA.10 = c1461595f0bb6661b826a1ce74aa5df4
+EntropyPredictionResistanceB.10 = fae688aa4d4cc6e04135a32b5a2cb269
+Output.10 = f001b557b7da675fd51c336fb5e63f561be808196f6d8a487dc00adfd207a41716813d1d1dc17626c82a327fe696b609183de7d059637bc372c8ef7bee667d9fae6da671034645b62c45e9bde909f1f2
+Entropy.11 = 4df4bb170601277913a96486d953fa95
+Nonce.11 = 3bb327df8c833361
+PersonalisationString.11 = a8bb59df8748c338e53e88d50de15e71
+EntropyPredictionResistanceA.11 = e513187904a07dd8b32f81e2ed4fb360
+EntropyPredictionResistanceB.11 = 573d037535114927b3791647a9fa6a7c
+Output.11 = 6b4252b416e04624c643e84aaf4d2196fc0d4e939ed00af9eabcd33a90df05f897dcafc0162e6022d552dfa7722e0abd1b4accc1bd5b23d55012e9e72623bf50cfff2ef0f72e2ba1582315125e11cb78
+Entropy.12 = a80f378043a68fbf7057297dca8d5957
+Nonce.12 = 37cf7c39d9f11db2
+PersonalisationString.12 = 77acea6511dcf12f5959020f9fe9136c
+EntropyPredictionResistanceA.12 = 2fd5cb89f063ccefa85b5498086bcdea
+EntropyPredictionResistanceB.12 = 4dc4b826bfd7025a36f0c2c13b275574
+Output.12 = 25e136cb0170496b11e124ade68e6402d08ad839bb8b7bc0151a066d0ffb7e26e348bbb6e8335d9fc4d9baaa83d257da2d9df8fa3248102b8da73f275067f83a71cd4404584915b6457360d174c2c66a
+Entropy.13 = 9e3e667425876e94afc091cd43e23d66
+Nonce.13 = cc4c8c66cbd6932a
+PersonalisationString.13 = a9f4fd5b6d18eac3e8def27e125989f1
+EntropyPredictionResistanceA.13 = e11b74f2e4665024899c6bb446214586
+EntropyPredictionResistanceB.13 = 6602befa8afe04ddbf99a9f657f88c7f
+Output.13 = 46af5dc90211c340435ca6a18759e142a60e69e31036d7defb1b905bba69b1ecffdb76b2b465a317c76b981ab53585ccbee885f113799bcf724b5852fea97ee2fd742d7fe79ae666a29f5c6f13c9a234
+Entropy.14 = e165be5b2cf0a59f9fb835ac2b670c10
+Nonce.14 = 27caf38a71d98555
+PersonalisationString.14 = b513dd2303497133b4c092948f088449
+EntropyPredictionResistanceA.14 = 46a300a27b24f3aceb31361bfa807f1f
+EntropyPredictionResistanceB.14 = fca80158961c980d0432ce724edd618e
+Output.14 = 853912858300a45dcfabc261f888bfecfe4d2b201e2b62955c68fefcd5dfaa08f0a053e8a1f0255bd460a3fe864b0c7a2ced737a6b5e6188185c912a191035fe7cacdb69ae690156ac9ff8881adc6f57
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 3e881269bfdfaedc0dc4374c43374725
+Nonce.0 = f9306ef1595aa679
+PersonalisationString.0 = e8fb8cb28bec25fa5e64b0053ca31508
+AdditionalInputA.0 = 418f52a969e05a3cb0a7d46f28209d96
+EntropyPredictionResistanceA.0 = cffdf51a1e4c4571fc4d88e56ace15b1
+AdditionalInputB.0 = 49c2b8c3ac57d1214c28c122e2822f78
+EntropyPredictionResistanceB.0 = 01155b928c91cef9d1e862898a737678
+Output.0 = 24ac28bf1532fcb5fb8260b0aa28f4f5fe2cdf13860de380b7a2e8adf32fe03c71a0d8f1dad751006f9e1efcf75ead666bc7133e639758e9a94372e92eb122baf31b8d2a43f5b1fe4368c997f0abde7b
+Entropy.1 = b22755696e73dd0fae7fcc3dc8434218
+Nonce.1 = 2f4f52e3f425521b
+PersonalisationString.1 = 7dd3dcf596563e4ac81848fcc1fda596
+AdditionalInputA.1 = 24c11681b0f3ada49438022553428245
+EntropyPredictionResistanceA.1 = 0e0f174bb4773948c1a75a2d2c978b72
+AdditionalInputB.1 = 8d56e29a7f21bb9af591c9cc459913f7
+EntropyPredictionResistanceB.1 = 2a9cfcaf466c725975a4c9706f7fb5fe
+Output.1 = d03dc96bca1d81099739045f371fe3aab8609211dbd2f3258f839c62b7591e9ac3a4ff9d63f078a0907c74c8a41739da46700a72f04eb6bb30c87be43694790a529e0a4266d4e56659b787df45b931d6
+Entropy.2 = 5e39f06ca005b6fd8f8bea0b3ce86f0e
+Nonce.2 = 3766d4a6c40e9320
+PersonalisationString.2 = 22666cd46197a20d8fcad789a290d582
+AdditionalInputA.2 = a5eaa74ef753042203f360639d74fa0a
+EntropyPredictionResistanceA.2 = 927d3f650fe42508c6889af01d174b42
+AdditionalInputB.2 = d78c8b9c87da578650d10415ea7facaa
+EntropyPredictionResistanceB.2 = d053f48e7810fea8dd5ec7e19f05cf65
+Output.2 = 3d262bc85b04294348c80f862f11469b1c7048cac4c8634ad055087316e0253baa31d40f6a3ba0c5acd7599b545f99beba061c3e18168b5453e6836a60350fcc0e9d0d24162321ef0caa39d9ab971c7f
+Entropy.3 = 51683c3389d70156961444a45b104dd4
+Nonce.3 = 4ad514522c919b32
+PersonalisationString.3 = b13d7e3d8ee8e004ef072c5f2fc06d67
+AdditionalInputA.3 = fd5ab3c5bfc4f271cb6780f26d3bf371
+EntropyPredictionResistanceA.3 = 23932aea98753251873ae3020be7963c
+AdditionalInputB.3 = fe328ea5d0554b39ac8f421503f4d717
+EntropyPredictionResistanceB.3 = 6cb07ca87baff789c6fbf864d704d2e6
+Output.3 = ee2f5266d5bca7a33f1c99e6985b59b7be8325664378c0a09f08dc928b19e057c0c22e596616ca88862dbbcb7958e94699a892cd3dd6957b21cbda18f80ce564b9fc7bf216d2365584fcd7621c093561
+Entropy.4 = 3fef7943882c2e77103c9b1ce494891c
+Nonce.4 = ba9d46ddda502d20
+PersonalisationString.4 = 4195bdef355c491712ac68e96a06757d
+AdditionalInputA.4 = 8b4a70028f20988f413805b78a4f5793
+EntropyPredictionResistanceA.4 = 583a4037b83890ae67ec55be0e1dd319
+AdditionalInputB.4 = c3253a171ec23606f096a549fb34fb54
+EntropyPredictionResistanceB.4 = 58950563dca79d923ad8cf027f9c10f2
+Output.4 = f971067c2f138405cf6ac4ca965937c2ae12a9a14ed39e749f25b79d881139cc76e264dadb9139584bba929deda2e3f4155e045cf25bedffe5131f0dbe7b06a9f86471f1bde208b733f6f385cf3d0e35
+Entropy.5 = af6ee82c848aa67f09027c01e34ecd67
+Nonce.5 = d37ed644c48d3638
+PersonalisationString.5 = d504ccf240aa037cb046a46b224b33dd
+AdditionalInputA.5 = 0c85e11488b8c258950172258003f897
+EntropyPredictionResistanceA.5 = 1528c25d219eb036a4eb63d59d45c9bd
+AdditionalInputB.5 = 0036bbb64c5361ac7847902b5c828d6d
+EntropyPredictionResistanceB.5 = 94de156af5b80e6b833150609a842f50
+Output.5 = a0f653f08d8cfac5c40b093821e434088bd81e29a7e28e5e4818bfdf5f41e354e25b2e0dfe009227c3b28b2c384c059430a5f550fb047513cd4433291e143189b7ccd176cc3dc0cdf9d244e815b96eee
+Entropy.6 = 3811ed9e735eef7bb3888a36f12b089a
+Nonce.6 = 7462e763a42fcc93
+PersonalisationString.6 = 786859e16621b8008982e14dde9dc851
+AdditionalInputA.6 = 7709dc3c73f18ba50a5a455e2f2ec30e
+EntropyPredictionResistanceA.6 = 5b5b0c5e7c87c3ea8f09561e71860c7a
+AdditionalInputB.6 = bf9f6013ca9a132bcc7be53f4492d170
+EntropyPredictionResistanceB.6 = e8859610bb30733748a14136c13e38be
+Output.6 = 61d731386e2ed1fa71801dbcf9d804e7df20ad06784f9e542482561cf9b6c21a52f6e96c35499ce9e8f5fa5ce909d492b1663f592ef652a48ec3eb7798bfef6a78a97c7fd7d37cc2a114d921437e5356
+Entropy.7 = e6ddc5cf29f3a1f6dfb8178d9fca6b25
+Nonce.7 = ee2abb535ea61cf8
+PersonalisationString.7 = 6160f23182014e10a65c4ecfe4808f11
+AdditionalInputA.7 = 19689f67d6e5c57d1162c7f31e52e750
+EntropyPredictionResistanceA.7 = 8a293d6f5b9b8ccb62ab514a7fd5f0c9
+AdditionalInputB.7 = 91d0e0d365388662752b41edcc4c535d
+EntropyPredictionResistanceB.7 = d3210f78b98875f72d3475928ce62541
+Output.7 = aba40c129e2325e2fb0b69d8355e78890acd843523bb57e62ee3ce01aa144d4a430f2c70ab2c305f5290401061bd094cc838107ccb91800fde11f42f8550a527ca165d5326416c7338b14890f9833770
+Entropy.8 = c447dde885b043ebd243d4dd26a6c0b3
+Nonce.8 = 49c0d49ea5c9d60b
+PersonalisationString.8 = 7af9ea27de57c99ca02bf695d7061296
+AdditionalInputA.8 = fc9499a07309f9e82753353c589c9d5f
+EntropyPredictionResistanceA.8 = da40f583d5febbbbcf13d2f640a2a6b9
+AdditionalInputB.8 = 8e07576ff9aeed3566ded7807fdb9f2c
+EntropyPredictionResistanceB.8 = f26d103ed3c334335c13a99cea3ff60a
+Output.8 = d330075938386fcfe1ca288a141fce3c9ad54b3ec7dfd9ff5b76a595c2e84981ff765cb7e8a1db46d069102f7c1b4728cb9d4fb35bce006dd49d7cae006508436aecd55652a6bad806e0da5440b4b639
+Entropy.9 = 9b1fbad3c2ca48f6a191fd4c539ce549
+Nonce.9 = 89015f931b3408f2
+PersonalisationString.9 = b593177281ecdd879d098854ae32ca33
+AdditionalInputA.9 = 8967fd4a3ab94ae443c12a965d36c30f
+EntropyPredictionResistanceA.9 = a31c9c2efc915d5ef965772e7ff5a4b3
+AdditionalInputB.9 = 7a909ab46c8b4ca98f2b51d2469a55b3
+EntropyPredictionResistanceB.9 = b83c09bc6cd7d67338a94291cbd9d4f4
+Output.9 = 5a80eef746edc769cec392a1a8fa0b1cdb6e609ce2a11a1357c0c2514b01ea264dc9fe9a6ca34c10c7186b53a0265e0e2d5afece96ff6b29edc2fe686f900d23f447e62b088b1d8f5511746af994feac
+Entropy.10 = e8ed3c3e530f282f94a248878a96e782
+Nonce.10 = 050ecad66f61e2d6
+PersonalisationString.10 = 669dee815d7226c000d2a85b195c8798
+AdditionalInputA.10 = 234e8ec9520333cc9afeeaffa79e3d7b
+EntropyPredictionResistanceA.10 = 7420795080de36cab335407ed7ff48f5
+AdditionalInputB.10 = 243f2de45d0d844a1778861fcb4c0ccf
+EntropyPredictionResistanceB.10 = c5e9777d586da5b68cf3dd9449416cb6
+Output.10 = 49ce9c474b2cd6f5aa46fff99b8a99c22523f6ae2d47b23b5b741cb357c58ce9b6bb684c2fa70888ca2e110b8f46476b0949f55a290c8d0691f906b5b9fe03d52d01a90faa95351ac026ea5c134831cd
+Entropy.11 = 177e1986fb192e218669efe2a0723bbc
+Nonce.11 = 5fcb7e32787adbe9
+PersonalisationString.11 = bc5c11fa9946f8dc90c51a9f49730f5e
+AdditionalInputA.11 = 508cd2514dcc9275f94f1bd93e63e264
+EntropyPredictionResistanceA.11 = b4578919986703a94df0afa00a2d0961
+AdditionalInputB.11 = eb2eabd206e2a9dfd4b4f7bedaca349a
+EntropyPredictionResistanceB.11 = b18db854a69ba9bc70e56c84bbdd3c7c
+Output.11 = 04c09afa85b91b36f6cfd4d921665c3571e45f44175938858ca954ecb9ecf03d6d131a741737b37f46d1b10ad88ae07f79a7162d2986a13a6a7ca9e66a2da08e2b4ff1613240da6e009ae17e39fda299
+Entropy.12 = c8fb74e520712b3c60f2138413d5ba39
+Nonce.12 = 466a58fb3eea8937
+PersonalisationString.12 = f083cadf3c83f2f0208c84b4853f992e
+AdditionalInputA.12 = 8725e8c95d2d60ba4860ae4d5432d657
+EntropyPredictionResistanceA.12 = a1fbaf786515ed5a06af1754597cd792
+AdditionalInputB.12 = a05fc5d1232086fdaf00035c92b49ae7
+EntropyPredictionResistanceB.12 = d41b6fa15302cda35cd843e4a2b4f668
+Output.12 = 6572b2c06e6136013ab44933e137df3fa1282988666c32e39d142e240cd9b9bd32a21c8733c755b61f57af2301dc642fca4a41c564591ce3633d4efb6e0e602ec1d559128128efa2aa8a64b5ff37f9c1
+Entropy.13 = 9f5a3cf87f80f76a6b302aa5df540a87
+Nonce.13 = 19f5d1a0c29f0552
+PersonalisationString.13 = 8d65df7737aa187ac06fe4f11ab7d3a0
+AdditionalInputA.13 = 76d20d5aa42ef60e257f561749841abd
+EntropyPredictionResistanceA.13 = e7984d62db86275279dcb6fb46dc1ee5
+AdditionalInputB.13 = e7a70dcb78358d6e15f05e23c3d65222
+EntropyPredictionResistanceB.13 = f56705a29654ae06ce3155fe9d392d45
+Output.13 = 6f4279b8834a9455a63464dc4ce6b78c46c637a0c0ec0cde3abab5c22f2b76f01c0c028e64702ffddcf016b1a79901ab25263131875c7b61f66e2b165f5e1282bd998d459b91dceeaf1c0773dac4600c
+Entropy.14 = 25a6d26c8a9d73fb1a4cba5e3948daef
+Nonce.14 = e7dafcd81ac1aeba
+PersonalisationString.14 = a8b82fc8e88746158fd4010a1d3d97e0
+AdditionalInputA.14 = 6ecf52f95b4443ec8ac52fae74e19329
+EntropyPredictionResistanceA.14 = 57a57172ab86fc29004b9d412a9701f1
+AdditionalInputB.14 = b07198a49bc854cfc9d6d7466fe24948
+EntropyPredictionResistanceB.14 = 7b558b48f3c891a77fed293881775118
+Output.14 = 878d26fb57589d42497b869564a1dac5adf1b83615f9ab9fc30b5140f79e3b7f525f1eff2e68002801939aa0728432efad829b5b12491404fb50f2584a3bdea8785e79390501978704a667ec5d04da56
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 5c15931a3b7ebf15a91c57400ef17a1fb4908be2dd4eacf8
+Nonce.0 = f7509949b418907fbf323436
+EntropyPredictionResistanceA.0 = 89e54e748721b0052f0a6331afce09628b82c3e014cbaf0e
+EntropyPredictionResistanceB.0 = c519812b53cbea72900306a24b59a06e573de63071d427b0
+Output.0 = 4b43a14b3b7d076f463e66df26269596e34d8bcc7a683d63baf0b2be97ae3d9764b6f91349184a9eafda8859d33c632db2250bff95497adc8250d6ef7d70b919fd6591bda1b7311bde7969665f3b9d9fcbb023db75d55ad177c79979a15dd2056f2265839192ab300921e3bb53076895
+Entropy.1 = 8eee361a869c20d8c423dd5c5fe06eac817c72caf486d49a
+Nonce.1 = 8abca5a6fe902a2d2717b3b2
+EntropyPredictionResistanceA.1 = 2fc947d38a8f5745ac56cf7197ec224163c4416677596f00
+EntropyPredictionResistanceB.1 = 6a3051c4eed8a075698b85d108b195515ba18b480a244a41
+Output.1 = 548996f43fc0ceb76364651e25d5816f6e34c3f10872842c1696035842eb820ce049b398ebec79c7e0b987f951495cbea3f3df68e70323d8aefe9be1666026c308368b50924dccfc60154d04eca6019f7b17e2c4330a6b2ec40d62b5c2668ea4ac9ecbcf294f1fc088eb84fc3c4c652a
+Entropy.2 = c2403c23b5c12cc6c57cf429c3f2fa4167e005f05c1c5d20
+Nonce.2 = da62902367b0741f7fc6cd99
+EntropyPredictionResistanceA.2 = 7643fd766867c8fcff60607f4a9f0a5c0c26bf7cf1a5c0fe
+EntropyPredictionResistanceB.2 = 66a7c4c1e4e912d5f4ce9338c79b8d9e10744a7d8f672bff
+Output.2 = 2edf613f25a9b6fda58f1208c5c874a1465bc73b173de943477f0b363633ff9b0101725671ffa677f1a8fd75ee079708a221cdfcd7e41a55a47af4520926d20181070bf0296710dee95cce0f40fdba9fd5faf68638dc6e845788a3f5e68a586529a20222a10dbf7f0820afdf0f8a8095
+Entropy.3 = 7b20cfcf00846976c07da008f85280fff241b29dcbd0833a
+Nonce.3 = 2b3da1d9ad31798997ca55c4
+EntropyPredictionResistanceA.3 = 1c4d3e4dae9057140787cc84f07b8d2c3c8a94169b737857
+EntropyPredictionResistanceB.3 = 5a067692d1c28952a3ff5761f5b3c144746cd59ee55cb1ea
+Output.3 = 45f9cec556da3f9f03b3e44dde763cbc77bd078af1b4654dfba042a33b8605fd9c91ab27e37ad71d36ab3e82a4237fd6e697b0835ca59966c971fa6566c5ac1f3be135c57de3f2b934cb53b99abcfd6ffa10a81e11535601d682012084ed08bd7ac47da7d8894698c0dc2d126e31ca31
+Entropy.4 = 9172118dbe3f042f6fc997c643e50a41d6c8944d0b6c1fad
+Nonce.4 = 7d01ab103cc8fe235ee87e32
+EntropyPredictionResistanceA.4 = 503bebef4e9da696161fbf9e6091a979a286e284de3446d9
+EntropyPredictionResistanceB.4 = 9fdf07b25d9475fce4e9c20b0f378160bc0b113d212c396f
+Output.4 = 079bc97d71cab6f029141fa827d4709fc4de584d22b67d362b8aa7dfe87468ee76558beead1c6a12c12f258ec98ed0e93d92836bf6c0de013f7eb459f209880b5b9f7805445b629fe92558f9e29e267ca5cbc1207e7a425b1f5360fb8e088f31ee8cef18002393ecefcff2b4af41da55
+Entropy.5 = e6dadc25bc772f732a9552afde60cd9e55e588d442e13642
+Nonce.5 = 56e0d4768e29c0630e75f230
+EntropyPredictionResistanceA.5 = 6896aa882c64d0b60ef90b26ef535ded52b910f231717089
+EntropyPredictionResistanceB.5 = 1fca45eb9773043d6566c0eb98ee2b7e3ccf61305ace657c
+Output.5 = 8c9412d5d1aa610ea18177e786fe4c075f892979ac4f95378a379e44ea4991ebdf40ba64ea293d6aa5f30523eb5c009dd39484355520e58896c0becbbda4cdc232f8de2afcd86202bff844d244c9c4ce6fcd8ddedc0e4b30a4c739268d22e6a3d94e5143d609e3a66e7f848c8561374b
+Entropy.6 = 5cd958fe9415bfb80d3d743d5331c1c17aadedb9a4e416d3
+Nonce.6 = 21d87f0f1d3e989869b53c23
+EntropyPredictionResistanceA.6 = be06666b11ec39fb22ff39633d30aa4b23236160394b2625
+EntropyPredictionResistanceB.6 = 2974ba034fc7f2cfdb70ed37e44e9b0a94589dbe8916f31a
+Output.6 = 807318a6bc7b53ba003bd6d94e6f687aca3f31005e1f51ded1a1bea119d971b342b3f4ab00745d8576f8213712f46d39e879edcc22e6f0177cad47106c78ff543da487716ae42893522319d6012026c7facc3e143fb2d29c91b57204a89bb43c7d4564e502ed2c00c49a7995ff6ba991
+Entropy.7 = 5404b85e35eb32d91006dd87794e989e674d8b35449d52ff
+Nonce.7 = 3dc7ca8146500959a72ab25d
+EntropyPredictionResistanceA.7 = 60f6be218b8885342171bc65611b367567902ea634be0de6
+EntropyPredictionResistanceB.7 = 27fd29c0a79e50febcd1f5779593ec69ec751037ee75afc6
+Output.7 = ebffdcfe82ae08b69905e0b7c3c6a152cb5ca4e7147e4a0e8c20ce246cd4d97c0ba560d6b5389c02e105cfd68ddd63603c9545862e30c57ede2ab4196a20238f9b4999f76be94c5db0d18333fb2a5376e5566ec7f03d6d8bc2ffcc9453c2236cd4ffe5c4684a438ff72f56a99e986652
+Entropy.8 = 0c5170dda17643808e35b86fab2410b89d4e21f5cf4b5be6
+Nonce.8 = ec765c32639093b51a38a3fd
+EntropyPredictionResistanceA.8 = 45ba8ea51396ade7f398529d30f894c3efa8ad71e9387d8b
+EntropyPredictionResistanceB.8 = 7c6ae21267b41e2b64d1c2644226b1bb4ef50fac182b1738
+Output.8 = d108203b7fdc27969920a438bffcd149955c4c60c60b384d547f48ab53cc74bc200241e2fe2579681ed881b01b069cf13d6fd72a084d57802e6a1731dc9e142887e0881320ad54e1385b504822be6fe44ddee7aa59a0a0c221d01f69b0e6189fd62fc8762eeec3518506c9404828e74e
+Entropy.9 = fc9d3ca8e28d9239ecfeea1f27f8c814e1b3d96bd60c9ee8
+Nonce.9 = 1c1220ae1af60ac63b261196
+EntropyPredictionResistanceA.9 = 0da55263d050b53dfa23d95bd51a6dd25e2d23f91255acb6
+EntropyPredictionResistanceB.9 = dd88278951a3d790340eb436d1578b5059752d122943ee21
+Output.9 = 03481d1474b2a9fea943ae5adc51718ed4bab5b7fa91fb270697d4fea416a4616a0caa10dfd9173037373f47e0ddc4917bb3163fc62404dea952bd72d6da0fccc190fc51a5c99074868d64bcd83123a7d595fb5d8644e20ad59c3458e44a2f52e45db0818e6abccad6d626d1869ec1c4
+Entropy.10 = 961c2f4b4b5fa8bd049aec5d6b16ec3a1203aa07caebfede
+Nonce.10 = 8c8222a57c6f5577d059f8ac
+EntropyPredictionResistanceA.10 = 5c77bd2106f6592fd07f2af46c773228b3a13f426cce4733
+EntropyPredictionResistanceB.10 = 7b8fd52a5bbba20ec768a2cdc25a3bbaa66e30ec92316213
+Output.10 = 2282c8d572816fabebbef3aa707e55d07839cf8610cc8167d7955a5b25a9dbc8ea71772734e09cd4d57aa4259b97663cff3e64b6a4dbab5c869d7c627388b455372e3cb09d06f5bbdddc77a4f20617e2577bebe6bd0e4bb2b7038c26e721faf20027d1ed3fc33eb032f7e5bb2669e34f
+Entropy.11 = 164edbd3bc4348195549dd8d60fe8d6e1f446c22cda6c223
+Nonce.11 = 459554fc22ff5389d2af66cf
+EntropyPredictionResistanceA.11 = 6881819fd87e8f7d293dae1df1836f536077c1dbcfee21b9
+EntropyPredictionResistanceB.11 = 9700a54c5b0ee7efde053c95423a3f7759c0c926c3583803
+Output.11 = 3370b38628803805fbd00af6e790cca63f747d7e7f78d828a3805a146b13a64f481de56a2e55accfde3d60e63a9db0ae125236279e24de5f077de3513228c07a64c9fef5cff5bc2050e9e4cbaa4e63d8a7832b48841ad269ca6f9c46504bcdc721c8db967d29839346d16989d4777bea
+Entropy.12 = 00ed7b08c7f7a297645b510a701e1dd5e288d56a4b492d1d
+Nonce.12 = 3fde316620ed68d8d29bf1e7
+EntropyPredictionResistanceA.12 = e21e4aff5276bb0f9b66b937d82fb02e1948bd023a3e8c02
+EntropyPredictionResistanceB.12 = 13386f2ea879b87667f24ddc16e2f2b362e4857cb1e7862c
+Output.12 = d0d1d92a2a1e7c35073ffd25d88cc3a9184b9d6fd5efe9cfca6a96c5de040520ab92292e3d280153a8964d7b1e160c4e63636b57b05a850b07c637debbb43a2013c21d1807e668bee2638b359442b11f55b2cc6d98b72134765d1edad23e03d56bf07b8b9cf94d052c29815621fddd39
+Entropy.13 = 97b0bc45cdcdab5c04bb7cba9ec858b4981fbac1c4039493
+Nonce.13 = dc6043e5adfb65671c9b1076
+EntropyPredictionResistanceA.13 = 6bb2feb309b6a346ea9421b409093dc4a99a97d724176ef1
+EntropyPredictionResistanceB.13 = 58cd654ff5d12e9889404337d3bea4a4545ec536f4768e9d
+Output.13 = de3ffa248f7c9ebd3f3aea37a37e30ae7850cecdc2d3e8647e196ef3a998a92421976b6fa1abbbadc719fc9089de4bc89a663e5e0a17f262ae14ae1caf5fabab6b349497a4e4b39c040f270c3bdc0438f901b5e1371d70d9a1c8ed1514f6d9b86d90b900f6ec20bb66911940eb45e78f
+Entropy.14 = 9ea35413aafb6b823146aa672c8fe56b1cb11ec8b94adf99
+Nonce.14 = 9b885ba999469cdbdb3e4dea
+EntropyPredictionResistanceA.14 = e734a035d71399a60be221b8c383044fc83506429a7eaf58
+EntropyPredictionResistanceB.14 = 51325a5d10137cd3ef2c6cd2290593a73361b298b9fc0099
+Output.14 = 12b008fd1ebb36ee67678a8b90ebd4ae333451aac2961d2ecf0d3fe2321fa520543452505e1e6216921ac380ddd88c51fc8b6b873b77b73b38558163845e2bf67661c05896da0efbd6c0faf0e363103abce11ab27da19c21564d8ec067802a0000e61fc33f43c12b854b85d6166a3a3a
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 0dad4e80a4d9d39315c8deddb84b005c357e1ec8f4f92111
+Nonce.0 = a14909219321cfc7f29c895b
+AdditionalInputA.0 = ad8aeeca0c2d533ade6aa4d4d2471aa1c108dab121a82e14
+EntropyPredictionResistanceA.0 = c4ef988a75a25cec124d5fe4443a488500e323ca9c162dca
+AdditionalInputB.0 = 170b82679916f1846f1e5c0bf8393ce3174be4ffa18403ab
+EntropyPredictionResistanceB.0 = a79a041ba441d0770e448dbfb273a5764a10880461aa7910
+Output.0 = aa21c238da38225d6812468a3bbde699b7c04cbc8026cff700e022cd026100c650f56f945ef3b3f279714f192766d260b2d140dd26f1cf36abec28d462550ee3137138b6881d3c4557648bf18e547fca1ee65b61f92e6fe3d68f48523171f45825c5e3bd3f9c623e9d128ae12cce0be0
+Entropy.1 = dabe2e983f618914a028a81b236f4754c4d22c1f41728159
+Nonce.1 = 39eb571207209504139f4158
+AdditionalInputA.1 = e6b2dfe5fa7bfdd7a65c900a0aa04ff2cf0dbbc5c9c16e4a
+EntropyPredictionResistanceA.1 = 28aaa04ac5621aa030edd2509c9120c9616e5aaa25ac4d2e
+AdditionalInputB.1 = 5b3b0c16abf4ccb396cf0d955e0916bce73f8a884f891478
+EntropyPredictionResistanceB.1 = cd921bf078677dfd0178c383b1793ca4561af7b4c126fc00
+Output.1 = 97e114219a0dc03fc8e3eacb660d1badaf78d091c2705b65ca77392a4c28ac5ec24788fc3bb034f24a01afd5d5311d534561fa51cc4c5d24464e5bd91e7c93c407d271f8f29a25cbd285987c6a7a4e5b9edcc5c59fe51b33e2c994813d28d370c997a63a3d9ca47f7934bd4b0d50c03a
+Entropy.2 = 904de71229fc56ae2f2634466d9d2d96281fe3a5373c0e42
+Nonce.2 = 7a35d69f720a4a242e7bc98b
+AdditionalInputA.2 = 6934df96e9f40fa06ccc93726ef6f08496ca525b2ddcc128
+EntropyPredictionResistanceA.2 = deeb2c9b590f56f45f60bbd13638cb5f8ab07c268abd5086
+AdditionalInputB.2 = 49cd0cc256f6e77cfab7c5fdab58481484e21e1de7127465
+EntropyPredictionResistanceB.2 = ca2a777ac3bd25a96d89b6daed611cf10da7652efdd84843
+Output.2 = bd72413d5dd72153a501b6228651129dd3c353c0abc42a5dbe8b410448ca7a70be29015392a67487fe0f7342c08a03967ae4e03239b295a623681945d43ba2f0f3572af38a6f06ff664180d5bd66455d369b9f166c438cbdbda0a4a591537596f65d5cd6355f15b31a590d4428bad7a8
+Entropy.3 = 372c19c2977c54cf2024004b7877fcc6042253b35df38666
+Nonce.3 = 1dddf890bd80421308740899
+AdditionalInputA.3 = dc14e519c7f61f963c2c6efa95d546d785226e6f84137e2f
+EntropyPredictionResistanceA.3 = ae8d6995bc0be402e485c7952f4ee4a8ff14b36fadf47d04
+AdditionalInputB.3 = 8aeeae4293f16f0beea9863b9bbc8913d2c9fbf98fe6a95b
+EntropyPredictionResistanceB.3 = 266e831bc5fb288a160f1281573ab330072f080ea3aa13d4
+Output.3 = 77a223ce3566e75b945e4ffa38a1f1e6c279d44e6461ff0820adf21da7fab2e639467103b7f91113796c0a050c747e5f34b3554100d67ef148a086c2879951d128f6caf122ad21699a35a078c526345a13bc3ec52e5b6ad1a837005fa9da1e2c5b65251fc79b64d1c7cdfd53411ba5ae
+Entropy.4 = 9c7ca7f48212ebd65937b0f52d94e9f742f8af7a7014a9bc
+Nonce.4 = 4c4c385aae2f9a9867509946
+AdditionalInputA.4 = c77d3f9df242cc19327a0ce6cee07bdb2c963123fb3a8273
+EntropyPredictionResistanceA.4 = 229d5a5487c70bf2cff42ba98db3721d3b81c3cc6b7c7667
+AdditionalInputB.4 = ff2fa886650917eb24be51bc9cad2eb7ea1cde17da22e840
+EntropyPredictionResistanceB.4 = 528f9d36acbe96209de06603b781f9e7da420beed6a8be12
+Output.4 = 6d84077918886ba4db5f949a93a74f27a8bda0a08ea77112108541e8bac91c93e14bd55c7f4844e3e94980e5431f2ce07fd76fbf04d4d41f1fa11fdb40b5189318c1bcbdfbcf720d323f677dbe1b91874cf764c96129d7914a30140aa728583c1b2adab77138559da6d73edd0d339f27
+Entropy.5 = 4c63e3c29c165acdd621cdb51d415cde2c8388a21c9131a6
+Nonce.5 = 90835da55758e54dcddd8a6f
+AdditionalInputA.5 = 1d1034a0c7c2ba4a481d4deb1c2a2d509145dbb2ac05c0df
+EntropyPredictionResistanceA.5 = 1281c52e1fc7290838efeaf04ed263798f7865c979daad75
+AdditionalInputB.5 = 94da9141e4bf80e1993b486aaf4f88250d95131e415e953c
+EntropyPredictionResistanceB.5 = 3dc7fef6edfeaa38f4ff764f60d19e2c05e455a653b090d5
+Output.5 = f8f9e6d466be8cc70366a9541c7217adf1bb12225e28d9f7787d2d13c423db13c32eb168f3b85beecb879c0b934b992d3028f8a8e9fc7ea56be949c006bbccad516d7bdc103e5e62ab634775417db7397ddfe55ca8fd5ea094695be50b6b0a58415b9e08de931aa46d2626479c28771a
+Entropy.6 = 81405c1be268ecf9cab0b8bc00bc18eb088c12abaa756b5d
+Nonce.6 = 4bd0b8dcbe95b274e6072e0b
+AdditionalInputA.6 = 3557186edc1b65ab1ff99abb60d762ce720144d88db82aee
+EntropyPredictionResistanceA.6 = a8e728d80d341ee31ca78731bc7b94ad3ed889ec4e119e4d
+AdditionalInputB.6 = 8ba2257c68db13d539dd1194cf829eeafc4c30f31ea13175
+EntropyPredictionResistanceB.6 = 53af9501e4981707868583e7e6d8ec9ee79aa98bcdd0ad24
+Output.6 = 3bf2770896001f7380888d010b36889dfea3281df37ed736086096a41109c90f2aefc5c856eddd5eaf2f8aa614f226fafab977d42415fce34685344f32ebccb5fa5d55ed3bfc872e9cd5d5917d52e7f5af339d9b824624145e4fa62dc4810af6c6942c2ee051d438e890b06df3363277
+Entropy.7 = 4d4d090d8c97d082b6b7bfee6d414bc1782f0ddcb88a1747
+Nonce.7 = e87dea8b00ecac8bc2df32f1
+AdditionalInputA.7 = 4c6116cb924894941e64e79ec4bac997ba13e2062bb45539
+EntropyPredictionResistanceA.7 = af482308ddf07e1bc4f7333f98ac9d7f82744f72e33c3fe9
+AdditionalInputB.7 = 2ce88f15e8bbfab8159f8458076c4935ee027251813e2970
+EntropyPredictionResistanceB.7 = 1f5f16279dc76bcb3783577dfacd7a502f87209d841bad42
+Output.7 = 9af67d8d3ef23f4c6589ad56ecd47f479e974ce0ce35bd8514362d0a3cebd2ff64e50f20f4e4ffe12e18983500b447771413069aeb43e353be7f6ca104ef6d31103837c3164eda33d173bbef5ce74842cb0f1f343fbb02428c1f9bbd9de9b5d16a24bfe3214d0b370d37a8c4dbac0be1
+Entropy.8 = c525be0fe99b393fd8a22526cbde608ea7f51650c5fd24b1
+Nonce.8 = 402ba171ddbc8729499303b7
+AdditionalInputA.8 = 637f38f9fac5d87ae0f0fe04c980aa52252c29d86e9989e6
+EntropyPredictionResistanceA.8 = fcd82e3b844a478c0adfe28a13ff8b06141f4a2527848c82
+AdditionalInputB.8 = 44a56619ff4d14025e2ed6e1a9acc2b79570540b32cc32be
+EntropyPredictionResistanceB.8 = d6ac1bdf3c3344224b0330900b69ee12fe6d0f295aa7b6f7
+Output.8 = d35b62e40f189619b26237a3273bf0e1d1864b4e9aac217a8e75fc85001a587c93671b7a26ddd53b72e369e5b8db56fb388c94d88a07e56890ffc343e60f10a9adc059a5d896b9b62f305f1918942847538efc830af16796a485ddfcc7892ae4058d2d1cd784b9d139b3638c7783a793
+Entropy.9 = e9b9872b2bf3156b006e115f2184490ad9c5e7abceaa9741
+Nonce.9 = 39bf65eb0b82219825c3f379
+AdditionalInputA.9 = 69ed8dbe483790b4afa7abf7252a88effb4a2965db8a5bf5
+EntropyPredictionResistanceA.9 = f621c9bd122fa3787fa6b055100d1558afeb3f7742174ce1
+AdditionalInputB.9 = c5d8ac2027b0a7d545c702152e4224eec59e4c9e8b6b6ca2
+EntropyPredictionResistanceB.9 = 70bd3f2109d9d2db9aa9be973d5678184365b6fe0c8b38b8
+Output.9 = 17afd2aa8f365b98f2c95754ff4963e78e7c704b5ef6fc34246105acb9abbf50a27d3738764414e8af523728cc527a2565b60a4235481eee9e625d3198114ee7584e0de6f9f12dcbb98601b0af4e5f2b8ebc56bf5f62c11e67dfe06987700c644cebdbd624086c3191c1c19083e76913
+Entropy.10 = 0bb3c4655f54f6c6eaa54b4350d33ba6b3dc59451d48059c
+Nonce.10 = c963d285887824f949af43a3
+AdditionalInputA.10 = 4080a231c1812816fa0c6accdf9ebb658f62e8f73c29f13b
+EntropyPredictionResistanceA.10 = e278bb5e29319e906b377e78b9bc04786038e7ad470364a1
+AdditionalInputB.10 = 3c6ce697d97002f15063f5213556167b695d52785be66106
+EntropyPredictionResistanceB.10 = 1fc90d13e87d03a37329948fc2f0f4a1aca1ea5f4fc7d934
+Output.10 = 97bff2f174d56c8588ac0b81d7570e71b757de4a7c320ab33e7af0c963411c9af933d541d1220f4fa811381a086ae4dee485af50c01e72c51f4f450e79d609ffbd177e753e7ef47a730017d2c0a07088186c28a2a9b0b40d15c01b24fcd818ab73f2f658829fecd8c43a83d98f3c344f
+Entropy.11 = b4f18e56955458d6a09b3a58fbc316a228b8b03dde58773f
+Nonce.11 = e78395e5e4e22c0b1bea06b9
+AdditionalInputA.11 = ee28632686c167ebf630cdc751c4703fa200edd31c08c581
+EntropyPredictionResistanceA.11 = 5ce8f8712f2bf8da7832abd8173987de80770e9ca4ea3363
+AdditionalInputB.11 = 040e62a5ceb653dd26a44a0430124056416000594d1ddc7c
+EntropyPredictionResistanceB.11 = 161a6c51bcbe13c5cfa3d61356a083d9861b3e9a87dcc6a7
+Output.11 = 67ccfa3668a3211e88749e5f538a560365222c126ecc79b893b4cd6ae49576e8c2e1fd63e77353ba3383234372f11fc1695f5544b7950f4f908321bb80564f93adfedbfd143cdd1d72e81cd3cfa1b13bc824362009a4cf9412bd541cf6cc66a8777526a4a396f094fadee0181a8c361d
+Entropy.12 = 8b6e51f9c3e25a8d0fa60d48f6143003301feb97df6611da
+Nonce.12 = ba2685e722649b107ba8ccf6
+AdditionalInputA.12 = cde2657e8ec8572a092547e1be8e8badc1bcb4f46fa85046
+EntropyPredictionResistanceA.12 = 9f98d8bc135340f55bc146aa2c6a09801294764c1c253a98
+AdditionalInputB.12 = 522baff5611272747ebbdf9d9f2fa6fee1b5db91b8ee75e5
+EntropyPredictionResistanceB.12 = 364ebd4fd57fc0d0f531d1ca78ef19863056a7e64fb7d09a
+Output.12 = 12f1faccb338e36ec2ffc9998d6b36bc518d803e7dc76b69c3c91395bef6831c9f60fd35c0c7ac0c8e74484666d4d0fc40f7bf9157b8824023e63158dcfdfe9e1a3eea445814528912e2c923fe6c94ce9f87186feb7d93402296f7aeac16ed08f47458d3cb03b8eab2bd0667f2b4bc22
+Entropy.13 = 4a3fc62c62792aac21953a7f736b30dbfc8541d50a5dd21e
+Nonce.13 = fd908e57e9db5e8ba624123f
+AdditionalInputA.13 = 37b796d117e4232527f43695397f2f516e91fb5c1756eff5
+EntropyPredictionResistanceA.13 = f9aadb3412efd78ccc9de1586f2c772db12e9eaebcda8324
+AdditionalInputB.13 = 1ac4d1c77b93bcc36d2e84592f6563bdf49c5207c66d9e13
+EntropyPredictionResistanceB.13 = 3d13ba10057cb8359e59083f8f92b2e0077597677161b7ea
+Output.13 = d78c84ff54d28d6fb1957e72faa2437015376ec5f4a13f8237d2f1dec82726a3672de7cdf5f7628345aaacb1840b590de44986ed7729f61e6d130342bf84e4fb67e326c04403cac2764fc3eb8f7500df8965b9518a1841da01fe8df43c3c1464cf7ada1c2d38c93907447fef5147ff5b
+Entropy.14 = 6e23969c3e35258d3c88c01491740725f1303648d616d980
+Nonce.14 = 2d078e485f013c1935ddbd86
+AdditionalInputA.14 = 65e459681c26a53664f3ed8a51dcfd5f64969c8d35affb36
+EntropyPredictionResistanceA.14 = 802f0fb0725b19b32a9427bcdf56750f5b419882c439a829
+AdditionalInputB.14 = dc30a416e609cd52562109d22960e1295e3fc6eb66709704
+EntropyPredictionResistanceB.14 = 849864c63ae33d51a3b2e282325729df0d01b4b6efe4d2b0
+Output.14 = f2206a4e8008a5b32a3a3e271e9673031f536eda568fc2cf7013b4b342af76bf4ebdf867e7f2e2e89fbf2f63cb6e096671d360eb72223e96d9bacdc2195138770870557b88e770b7a439094e2eba6b529e54a25c75237c4b4fcbd06efa77f6174ba64071d2c3caf13fc1fad0c0cf005a
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = fa48c99525279d5835f5d3f5633f243991bda70fea685ced
+Nonce.0 = 200a9dbb800aaa1487c22eea
+PersonalisationString.0 = 5ce8e12638a6f1a607b88815b3e24a9134077e3e86589d1f
+EntropyPredictionResistanceA.0 = 6610f6975456f422c8fc36d6aa9fec53c60eb7a7bd73dca7
+EntropyPredictionResistanceB.0 = cf8f1d5b3f22a4c451c9b240d2da00433ad1c632627dfbe5
+Output.0 = 44c6dac9e84b37f1a287ff99fce55ff1e56ef4eeaf1d7fa23c5e931f121a8ac1d2679083b764396447d4da4aabca7e0ef8819a5e1612abe16df8691400f5fbdd1cb978af04d549895a0d13be75bdc8c12abae1a87d7f6d3ad56c4474abb78b8532e5363e14a68c6d1050b470dec6ea1d
+Entropy.1 = 5473869788cc671eddb69fd7a9af2f2088c6400e21d99b38
+Nonce.1 = c8a7c05379dd99a10b386380
+PersonalisationString.1 = 50a09dabc8f642a0d4c0351ba2ffe9accd9bcd263520e65f
+EntropyPredictionResistanceA.1 = 0da601e3500b2e52636469f0ca244fa3dec95e2937d649b0
+EntropyPredictionResistanceB.1 = 28da4cffdf1a2de4f28a8c12590834354b45137e761f165f
+Output.1 = c33ffaaf9e10c35fead7561ca48b56340a772e68b2d9b35e15e9752dd2dc54059965dd01bd6b4b06baa5876e00da2e034a3efd22fa59c3b6e5cfef5c8cf790c8d894c42a03f3d57fa61f3e230c86441d435cb64690c681921e074b7af2e775e84839d6c792119bcfcbc792278ecb67d8
+Entropy.2 = 2ca78a8d9aab73b2437e285366a3150d7d7f69fa31a99b74
+Nonce.2 = f9e11b75cf14c89ce258a7ab
+PersonalisationString.2 = 04d5ba6a7ce62a3f74efda8de2c91cf0a9b5d96a246547e2
+EntropyPredictionResistanceA.2 = 18990465489af7edf3abe3f10b8d33977b8c0b8d9d066d27
+EntropyPredictionResistanceB.2 = 7a8d0e90ed7f129b8676a4bec175dc5d16ed8872817e47b1
+Output.2 = 496f3a8b8412f8227414efaf7d91669240c1297fa0bce5baacd4011b184930f39c3367b99eb7d11c42b6d6ebe38b3be0dc870a868a65d707e213a7117c6107b8a0d5ebabfa9ec21b1fbf46c6ed96c7d8dd09257d15dc4be03f3c5a254f079eb9a65bc69297d5cdcbced6fe2fe0c2e8fd
+Entropy.3 = 14fbc7ccb09f0cb121d2d8d66d5d5368ef8a21fbe084385f
+Nonce.3 = ebc4836a69345c752db5ed44
+PersonalisationString.3 = 2657e543238cede7d06ef091e141bee2259d83e3a4dee3a8
+EntropyPredictionResistanceA.3 = eeda7500409fc733d9ea3bf5c40bcaa9273be0bab4e9e3ef
+EntropyPredictionResistanceB.3 = 3ea7bb214ee5347f93d03b320a96f2a3b7a495d14dfcaf72
+Output.3 = d3200e8e8c700ce7f49f3cfe24decc5e121b97592a4699df4d935fb49c30822588a36e94c414542366f7a45101550ac27145d159f57634c0d0bee2db98bc18e2648e29c3d7cb73abd839af8775490f8867441a865c37f2517b048e0f937452b04db9c35e77891aeeea234b56bc3c12ac
+Entropy.4 = 32fd53e8d4751366e3d7962a3f15cdd76ea24b7f949fba96
+Nonce.4 = 7ad70956193c8f41de2112d1
+PersonalisationString.4 = 90ae25dbf8eff76e6015bdbc951010ada81c8354869f4104
+EntropyPredictionResistanceA.4 = 1a161a4d75489084af54ac35bea68751542249d368b2392d
+EntropyPredictionResistanceB.4 = 263bc9346004fa0c8e6acc3c748ce7f76834fda78d963309
+Output.4 = 211c650156504e6eb64d4804b1dd48d2c8795bfa428761ec57b76edf0869dcc714eb117cd2eb3e7ae9aadb7da661f11d5f2c0eba1771b5d0d740471e823676dd68dafba515a0fb6b7d24b526dfbfebe6eb346bb852e8afef155564a6cc45e1e136459e6186960413f9dd8b6bf5b1fac8
+Entropy.5 = 90179ff8a56d7ce38bae443155d01045b5e2a5b2c02377f1
+Nonce.5 = d2acfaa3896d274418863a79
+PersonalisationString.5 = cecabac5e019f356c1b9ecd26cc3c5f1dcae90e78ba43e48
+EntropyPredictionResistanceA.5 = 0e6b2a44d6ef35c632100baf963f2b11d063e4d48d924e67
+EntropyPredictionResistanceB.5 = 0d735f7b42bef5cc408199bab248aa4a2794ca8de16c2d29
+Output.5 = 5f6834bc16d26b660936105568303e99c16038c10dc95d34465ff40d85774a431d48008753095a46bafbb279f084efb5df46362d4eb8e206297086db1cf722767ccde668850e608e33d19018ada33e863fa94c5b169b396ad07a817ec4bc06824a33a2900794a09075e9c602f36b8be3
+Entropy.6 = 158e69a986cdd9f10a4e19b26691eff7ad714107c15b8006
+Nonce.6 = 4fd38473892799348b357d23
+PersonalisationString.6 = ace97344086ea7889cfd6f660cd25d8cb13db1c1f372c744
+EntropyPredictionResistanceA.6 = e22079aa343bda7f8dd223c31cac491ba2e787dd1fb71a44
+EntropyPredictionResistanceB.6 = c76c9c5ec2c5926ed0809bfc86ec96c6b309fdaf6aff78c5
+Output.6 = dbb7017be30500e1bda4ce6ea3a101ab75553773f22a5c5e035059bffac34b2a15064ade9cf27d1bc60364104030f947a4e436a443a481d6e7fb911c6515f63e3c3c29b28d40e503b6cc2f14710ed8a682ae75e0758961df53dd999e4e27b5648c9da969c2e4f07b1e6b55c23412d332
+Entropy.7 = d34faf6e857d042715c6c25ebb09d3b514ce3979f01c6fd7
+Nonce.7 = c3490874c1e9bc5e1698801f
+PersonalisationString.7 = c9f3656fb59d4a60e577f40103d76c4257ca3acd6d2d3824
+EntropyPredictionResistanceA.7 = c7292164650b277c18708f015913a35b1afb06d1259f65df
+EntropyPredictionResistanceB.7 = f7669ca6363106a67042876dd48069ea977d7180c78f96de
+Output.7 = 0a81785cc224595638b4d06602d946f559fbcdcca97ae3d8b7d10cb27a00868cac916e983bae89a25e04f6a42f501a5523f3da0e656fae83727c5c6f13aacebb864a615594bcd5d7a3d6419abc985c4c3edecb38daf19633f036d815fe11e0c2b9aefa4156c413b7da5397ed8ef7bf41
+Entropy.8 = 58e550b16160473e879c86912b3435f69b69e099294e78ba
+Nonce.8 = 2c1723752e57f620bb39994a
+PersonalisationString.8 = 41e25e3c13b4350d44bb0ed838aef03601eb5401e0121675
+EntropyPredictionResistanceA.8 = 1f8ab2e0a80453b12f1af7da3baaeed0d7a6ed8c890e9704
+EntropyPredictionResistanceB.8 = 5f2f9d359b92385f2b2e1585891a851699159b334e139c53
+Output.8 = 3c081241d906cdccd95b54a4abe7b541fd0f307bc5a2d1dd17b4dc7462b50ffc06fa75540f0a50039e00ea65b7e9c4cdbe4eea113aab46b0e318d77130330f0dbe189b85142c1d116fd833f908464a0423c340cdbb4922f623da32d3affa2c39e04d377b96d9e57676caaf77e5fd5b7b
+Entropy.9 = 13941cbe26d1ee7c2c947460c530b5704d941e7de2c2082a
+Nonce.9 = 6912a7092b961c704ce8ddd7
+PersonalisationString.9 = 49cbc618244ab80b249ab71495514caccfbff35a40c1056d
+EntropyPredictionResistanceA.9 = 066541eb4a0ab76a71634f323ad0d1accc0a608530cd714b
+EntropyPredictionResistanceB.9 = d1846db9dcc716eb329ece1b566888ce85263d6476d76e26
+Output.9 = a78db997e504a0a8780c6420b8195d38c4276f8d15602f24bce78eee5dca6910ccf8c8958559027949cc2a8028b06681f56497bf2d77a95a82c7ab717b9c8a2f00cefff14adeb67bc8a15edcfd1200359a4b36b444abe8b9497325b5776bc514650626d75b7fefbb07ccb5982c3bdecc
+Entropy.10 = 1de01ff02867346058a71db4da063c1f43a183b9e094dc3c
+Nonce.10 = f4925969be4237ee43b10456
+PersonalisationString.10 = f52ef52c9581f7123d1f4aa15889839a3af108b042fde339
+EntropyPredictionResistanceA.10 = 5099aea3da814280b2acb1e633d801868748d54c655e26dc
+EntropyPredictionResistanceB.10 = 60a648027a8510dac07e082b8bfbbc8b4a33c6087cb2db6c
+Output.10 = 7c810b4b0c476262ef44ef5969402ef45ed54b028bc4db44a684f47a5a7bf32a373bbb31d6edd5459a3817d8ac2563a00d64e535d80b2f392abcc4688752855c557d7a81a1c373114e270202ec227b4060372bf86c2e513489ce0db4865f3b3fdd3c56c4e2b96abac571441f5d432a22
+Entropy.11 = b8379cdc3aee49c5c15a9337600b8a6cb3814feb796db36e
+Nonce.11 = e14ede674660cc32eb9248ba
+PersonalisationString.11 = 040c196a24a7c468db5ff8124209fbdb8c0215898466013e
+EntropyPredictionResistanceA.11 = 25432b72e7769b422dcc6c88464bad5a9f6d9ec6cb10e27d
+EntropyPredictionResistanceB.11 = 792bf0b360df5000288d5890a3783518fd2596a2feded376
+Output.11 = 53a61cbdf93d2a9c4f14b2989f418fc063cb588f149716cda98456399fef668e708b1a1e98d5342082b545131f2baecae3946379ccc5fc6b58383dc6004da07ba31785b8ac004ed1f628d842b1f5312cf5887070628ab3336f277693b785af50c1cfe03495300d6cc20d414bed090177
+Entropy.12 = c954acd7cccd06d8984c1e330345b730f83a5f97838009ee
+Nonce.12 = 1d16c9b42834171b99ec214d
+PersonalisationString.12 = b5abedbca12895233add351ebb1087f90fd109d026d338ee
+EntropyPredictionResistanceA.12 = 60c235f79f884b3083004d02fc4f751b520cf33490e1fb71
+EntropyPredictionResistanceB.12 = a38ccf0d5e917fc0d40a94c83d17bac92954ac2a057fe155
+Output.12 = c22ce374e2fd44e0dda5320308083e27700a323888f083eb96a65083c387d854e99a02dfc36c709a6f4c4bde460dad8b3d92c0e824613e675dc30fbdd4090192fe1545406b2c3d78bd6382fd5efd48c36f6917302e34eca60ed1c880da782c6b2e7a8226b46aec13b0ac6266f33aeecc
+Entropy.13 = 4f8680d5c4113a4d87bb48be5b90d32b1bfa89d86070f464
+Nonce.13 = 98bb27566fc54d19c59ed946
+PersonalisationString.13 = de0a8347573544c42ff4f30cb37cb301462a9d9cc8cf887b
+EntropyPredictionResistanceA.13 = 6b01418f739b9a335b201a2cd4ed963e077f8789676c5a12
+EntropyPredictionResistanceB.13 = a47b85a23a32aa522935590691b65e30cb22b1ef610787f2
+Output.13 = b06a5d70768bab9c230f051ff7bf0a5504193a32ed9818768de9785f26dc50ec7444e02a55b8ebe7c10056e46e90752521b35a6e81e12b52c27b974098181ab0934ad0268d6a42f9cf6dd9e1d7b3fa78f894402280c44cef49eb9331216c4ff2e143516a76450a6ee9182ded3b55ac86
+Entropy.14 = bfe1c057cb0c89d6bd92153cfd5884e2e8fd28becdc7adb6
+Nonce.14 = f0739c6c921ff9088473affa
+PersonalisationString.14 = 67cbd89fca39983e61e1cb023dd28889b37358b38ddf8535
+EntropyPredictionResistanceA.14 = e0b1ad06619cc7e6b06fa369846d0718061e4ac707d1a709
+EntropyPredictionResistanceB.14 = 2941e7b99738be35a340fbf29bb443547f3128e5435ae876
+Output.14 = 07a627ee351cd794c19148459821ee504770bfdc07399fede63f1e22c3d76a57ae1da3c66403d789a8f2f4a0f071dec3fa102bcaf791222d2b0de7cc5b9d8f59b6b23d441b006eec851856c8abb152b84828a88f06e1f4cb257dbe00ce4d4868532782b06da28f923bf8e3f38d4ba50a
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 34fab2312515c95c5fe8e03af850de18bc44a000e7d594fb
+Nonce.0 = dc51cd1ad133dfde1bf3f95f
+PersonalisationString.0 = 6e165a353bc74f06356f45029dca47db8186745a9f90a758
+AdditionalInputA.0 = 9740b16806f3c267bceb693a4ef5c5b446d9518a2e8a7838
+EntropyPredictionResistanceA.0 = 13e856a70d3e566d0020ce139a0c17931212e9241d7bdabc
+AdditionalInputB.0 = fa516f689f55d89e6965d15c8384520ab20f027ff224fb80
+EntropyPredictionResistanceB.0 = 4447c4db8c47bb0028f188acce5e8ece3f33b166c8eb373c
+Output.0 = 3244b84316bdff4dff5becdf72305767a42d404d077bba578f2cad94b9ca9a9efe085eebdbe1b77e2abbcd18e6c152979bd6541a6831b1ac1c58549461952090a8bf9111adaf8b249e8c58476c450c590d95c45fee2d1d2e58753a4e913cc1b9bf374111a3a5faadcc975b65634d4c12
+Entropy.1 = 553dfff936bb2a7d539ab921e9ec18a41eba48c62ac949b7
+Nonce.1 = ea49549fa682e33ba0749385
+PersonalisationString.1 = 48cf115e1a2a0003d8a5c8e48215c57d45c07dcd21d92f4a
+AdditionalInputA.1 = 3268b61f02746b106fae00591839c7e8cfaff7f76db55d3b
+EntropyPredictionResistanceA.1 = 42326d5dc7a4cd44fd12822e6e8b39e0e9357521987d91c1
+AdditionalInputB.1 = 6ec92f5ee490228a0de9af18b61a51a2ed5aac21c0a75961
+EntropyPredictionResistanceB.1 = af5b9107ed3d2db47af56fc878be37ce289262bc95381bcb
+Output.1 = f71422686b307ceb86ccfc9a95d0ecb059799fe594d0bd785948ff82d757dd81f35693612b7ca5e16a512ddd9d73f2ad9840a848e3737020285c456339d6508ee919ac8262dcdfc7bd7ffde00583e111a9dd55ae9b8e6d316a209075b64939e3463cae85968ae9df3abbb55712bbd2d4
+Entropy.2 = 063a0eda20a8f4e442aa9f0d9269a0dcbb9f18ed68d43d32
+Nonce.2 = 7f28ae18d6c871ef85c4043f
+PersonalisationString.2 = a4eaa7ad4c9d5d213a9c39c5a4f6f28fe2dadac9918faf5d
+AdditionalInputA.2 = e46383eed9c955b4d4c0d2e1982ff7df34fc7946213e1d8f
+EntropyPredictionResistanceA.2 = 934ef674c04c3e4deb3651e80ca2b189041001ceda73166f
+AdditionalInputB.2 = 05aa46d43db2d0a42ed78bc863af65d1b312d6a7690d98d6
+EntropyPredictionResistanceB.2 = a409a16d99acd0e085f48410ff3f1b64b91afd12f9b802c9
+Output.2 = 4269c4502ca68089f0b6bfb6f97d35780cd0c06b1af0427f01a481bd2aba9f10024b91ce1c1446bc353535481dabd1f766069a4c45a6a43474f25226fc84788325dddd173441210d7fa5333d4a7a44a56a017bef917286e63e6efa3b34d9176ffeafeab898798ed2229f2c7e4757cd9e
+Entropy.3 = f51280c213e54bb21291774874a5d050e70f8954dfee2fd4
+Nonce.3 = f29efe0d2f49e0cec0b56d85
+PersonalisationString.3 = 8f48a61e2249ec8a952b3f9e0d5505988333dcc3377f76a4
+AdditionalInputA.3 = 103c90ea3604ef093ffb8254949642026ac6b9c1e50d0d80
+EntropyPredictionResistanceA.3 = d9d7c50c02e68f4001fbf986ddc4d1fe7f605e980ac29074
+AdditionalInputB.3 = 20cadc62e561d9da0f2f0fb717342daf82832f4d904a0566
+EntropyPredictionResistanceB.3 = 54543cb0b0008e177bf445262d7fc2003af3d073c6a623c0
+Output.3 = 5938bc425dfc07b0844166a43db2320e2a4e4611c446d5ff127d71c49e66d5f9355e87f619182c6e702744e4f28b42729d45869ca11c7ef3112359b70ba3e8f8a17e7070329412d96412926e529cad4eae9b69f1b8beb289756098421fa978440529dcd58439b513cf82c47f118efffa
+Entropy.4 = f29cf5e321f243137f3ae61fe59a7fe4a9907051e113ea83
+Nonce.4 = 39d93d06b1617e230a54df1a
+PersonalisationString.4 = c88508e69f4bcaa3f2e075fd0698ec0ef2b7e9d34e937ab1
+AdditionalInputA.4 = f6f1f957cd34d22216f5fbe181be263caa0d850a9523d682
+EntropyPredictionResistanceA.4 = c2dc3c9321a3955d307c56ef9ce4499125dc1791138bf617
+AdditionalInputB.4 = 2f36e06dda4627734ae7037e3e4180d950f199ac191b994c
+EntropyPredictionResistanceB.4 = a074b4c8b15cdd863963de6140ed23eb79d62fb8c450413f
+Output.4 = 5f0ed45b730b0c2482a44b8b6adc6cce4e92006dc75b55f1a2b951d62019fee6fed185a4ffd2d9c73571ebf3c8aa52c5c1302708fe4cd0f0aae5c4e75ba3fa54d424a104b53a26aac2ddb0244b2b23937ab60f6b93c2699cbfd912ed5edf6a1f6d5e6fd80d94910882aa36e83e65d380
+Entropy.5 = 5a4b171e59d14f405c36cacda62fd0e0fbaddedc9e5bdbd4
+Nonce.5 = 2341a5949c3d03f78ee3d3d1
+PersonalisationString.5 = 46a5b4586fcbe48fc0a733680c2b652c948f3b8aab6a8702
+AdditionalInputA.5 = 8aea33274f5fc2189721cfd9c4c89ca7d2d2f8df15fca443
+EntropyPredictionResistanceA.5 = 2e099c8fb84fb2dc0084532c92239de25341c1cc087573c6
+AdditionalInputB.5 = 9e7e1d74e6f852470e42bb1e5546420f33742226cdfb0566
+EntropyPredictionResistanceB.5 = 3ceb96403eb631a7bd3a2a95a36bfdc7334bb854322b4ed1
+Output.5 = bab23850669c9716e07afd16162c50003960225ba571f252dcf3226cc7cbe53f242ee6265de77b093ac5aa57426244867fefd11afc51089f00333963056dc6c68f1262f0e5a4a54dac466bb9d16cc6d617ddb903520f9211f650002785e53feb1fcb7dc54c623d8ed00bdab0f0e17270
+Entropy.6 = dce6b46fa4d2bf20dcb0244bf3591f20f831ad765bba7999
+Nonce.6 = f8175484b5fbfb6235376437
+PersonalisationString.6 = 870f95e8d772d5cbf7e838bc464ad097b849c9e31654da6a
+AdditionalInputA.6 = e5b949e6e8c4c557936d463ad89340bd2b9ff5b89fb7473c
+EntropyPredictionResistanceA.6 = 7f6bb0b88ec7b6a317822d1579c522f31c33f988f1c25aac
+AdditionalInputB.6 = 0fdb1a8367ccc6cbc183b15e48dc5584f4cb6d45b5748dc4
+EntropyPredictionResistanceB.6 = 6f421341c1e48337522da547c3076cba3aee046022026d3a
+Output.6 = f560937b0e9fda1e2269bd3022405f9c162547feb0fe5a66979205aabc5e979d48284f5a2f0f7034e0b003290fc6f1302a903568834df7a7f2db410f2cb72dad52c164b14b06ae8d2c70c6fe075a1ee574adc766777d6d6400d996828b2b95c1c312b845f633b965280fd610599952de
+Entropy.7 = 6732393a145f1123c2975ce378fd16dacf48648a3680cba4
+Nonce.7 = 3c2793228bf79ea97e604d24
+PersonalisationString.7 = 23dbac0774bac487f4342ad667335c3a06d6ee129d596af4
+AdditionalInputA.7 = 6b9fd902e9d87323858fff103d3488ba2e84e44d988877d3
+EntropyPredictionResistanceA.7 = 9b424e171c116b976136be74b49189629f22b1bb0d3520f0
+AdditionalInputB.7 = 4824aac0ce421214f2819f359beadb8d0942bbc1058aa395
+EntropyPredictionResistanceB.7 = 3f6832b2f52d5d9909d531e81eb49f1bd99a5026819b1f18
+Output.7 = f554129a0462f594a7e60cb7f87eb4ee26365ecf38137ca1bbbd430737290e49a16deea172042d20c9d146a14cb141e4a996c06d522fb38839986199d0c8197faf4a7ef0cf3d3c7d034b4f6549ba945273f3f539f567248778c87c9dfb4f221925a9ee533ea271411d7f1e1c21c6edc6
+Entropy.8 = 98598fb5d171a3f5b42620ab45e721677fd79592aa9ad074
+Nonce.8 = 1ed2a66d58ea020b32c94175
+PersonalisationString.8 = 19672d981306ce6d1a0c5ac23b4981410cd0043a6ae45e43
+AdditionalInputA.8 = 6a36f91666bfc39fab0fd64ee97760d759e47ec3bcfa7ffa
+EntropyPredictionResistanceA.8 = 88722d467cc0f705ee4a0b1ac574c623632ff149e9a3a556
+AdditionalInputB.8 = fdcc71e6bba712d94e0b28b6ebc4250d082e2b2c6381722a
+EntropyPredictionResistanceB.8 = 4eb248eef1a4ed183344f72a37540e83a3c2e5864eb12d27
+Output.8 = c26c12fc1ca9c5abd2c00a547281038028a9553065616b05d1c3b24119ce82e42bff9d288ca424394f8425d8172da5270255cbb2a82564e6b46903265f8e6e884534205b113b4c8c1802690b863a0fa3e6034d0d3aed960c64bfdf61bd47baa72808c0c436984b8c1d37376fcef931c4
+Entropy.9 = f5f02922a5ef7de34e539f78dc762834acc517536e7804d9
+Nonce.9 = fe9124186479bd3b87a18c23
+PersonalisationString.9 = 0a795836201c2bc438d21de32abcef5cfe1049ad7f3274fc
+AdditionalInputA.9 = 244a777cd5ab90eb05c9f949551c24cd3fcdab72c91195c8
+EntropyPredictionResistanceA.9 = 48d510570a15abf3f4135c3757b6ebae600f03dff05cd873
+AdditionalInputB.9 = f65a40062ed838d0f5e6053ab9a80d14bce15a3f48640c92
+EntropyPredictionResistanceB.9 = dc167e60835555485f7f85c9cda773655161a9fa669c188d
+Output.9 = ba677f392c8d803654f4e47dca050249eb470b6d4aa56b502fd3e21ce421ad9785e815daf611cb0772a2c8544af540a3d7d2ff0ad324052adfcef073677bb12d96a329f6c7bda4ca593c3d7b7c9a2b64f6871661f7eadd81ce932789db38ade1028a4d94fbaa9f81c2cfcf41c3c34c67
+Entropy.10 = 0422563b19b8dd07f48694be42f3441d28f8bbb54d7af838
+Nonce.10 = 9f81f124904145f883fc1c79
+PersonalisationString.10 = 90e6b4bc5e2322177174cb966d5308c573270fa81fcaca55
+AdditionalInputA.10 = 546f2425d3f2e5062bdc55993a253b0e925d59db5ae6ba5b
+EntropyPredictionResistanceA.10 = 867516c4be07a76f10222bdaedd0d14663f606eb3803aab0
+AdditionalInputB.10 = a052f538ccb9461c8209df2fd9db92015fed9f9fdb6ab4b1
+EntropyPredictionResistanceB.10 = 355e95d93b9366b476328ecf71f41f62e9a5e4c154a56716
+Output.10 = 622a50ad15c7f0f4a6a7d12f6d31f3acbd85aa71fb957283d3bb747712febb92536ad6f6c40ae478e511167a01e109e48d73b592a8aeb20b4bcaabf3d2eba059baaed728fb9d37f1100251b13a5f786c6178322d1152ff2ddda23eeea235931dd09ccdd2c0cf9e9eadb4df5025a6e121
+Entropy.11 = 95e2128c4de85d1d10076a8683d0e6d77fa2d6026952885e
+Nonce.11 = 21984cb8cd54ee347ef6f194
+PersonalisationString.11 = 50887e7ebfade9807fa761930d14eb788d1671db30e76449
+AdditionalInputA.11 = 5b08c786546c6584c8f9c8c74a047dc474be82f49249a7e4
+EntropyPredictionResistanceA.11 = 99b0339e0ab1f2f0694ac9ba135a55abfbefede7855b402a
+AdditionalInputB.11 = fe1196d9a7aeab671d8a2a008cafcf2834ebf6017d31588b
+EntropyPredictionResistanceB.11 = d2fd879c1d5a9ff490502d061815b8a73affe89a9128f703
+Output.11 = de2402df6d69f1e392954ce7d4678fa9d1097f6e2f5c3a15b55b2b98f7868620c076f3c3824657bd40330596d85c32daa3aa598ec497e7eae79ffc4abff33288dc0006eda67de68b254a34ebd659b351d52ae5b470dcfaff66dc0125d6f30131860c5762e68e8aa66982085aaa54bb4e
+Entropy.12 = 81bdc08be32ab61ba61df2c7bf56e3152f03a97b78e57f39
+Nonce.12 = 267f8dc3f3e390a2fb5b9c5f
+PersonalisationString.12 = f8dd030b934a0d1c94eae9c03e924a8089dfb8406b99e64b
+AdditionalInputA.12 = 58424ac713cc288695729d9d2dd41db034b4d7e6bf76da82
+EntropyPredictionResistanceA.12 = 2b0926327212e64a18650209c36dea977fea397198fc1271
+AdditionalInputB.12 = 1b3cca86663f1f18fd75302442a2ac8287ab96eaa910fbf9
+EntropyPredictionResistanceB.12 = 34fff525e0e3073ddf9bb68a4b621605bd26d3ff2f818680
+Output.12 = 398ba09183878c62ec3ac374fcf736aa9803592eb48155ffe9dd55209901a2495a74cd35693317e30d37c2a5cd6b2dc5ecfdcca6a5e5bcf253cbc2374a7c448b5d3a195a4eff99948b1540b75e35c3a9734835fa139532e8f9da7ac29c29b2b4d91e6d70eff6751327afe0668afc0065
+Entropy.13 = 9fc426a42cac2fb5d2aad3d6ae24da1bc9c04d1385c504ed
+Nonce.13 = a4ddc664422882940811552e
+PersonalisationString.13 = 66535a1b4abae21fc62d0c676306aff611f25e09d6f31c03
+AdditionalInputA.13 = 2b8587f70133db4c90e275607e24d9447ec68984b3f97f3c
+EntropyPredictionResistanceA.13 = 05bb38a6d938f61924b50b5aff39f0cafcd0be2330f8e86d
+AdditionalInputB.13 = 9e95109a8ede8951be9c727068cbcd20a7af2d622fd2bc3e
+EntropyPredictionResistanceB.13 = 476e3b9b1e3d9e3d4004f5a4d5b8c02d9aabb1864422f72c
+Output.13 = 3bb310a4767cd00e179f46debaf1cdcd61d06aad1b4c2ee8972358b77639309dd50b3ee8e27ddab6188003afba6e3204b782cfdaab7d5803ad5863267d598d964f63fc963fac92ea8fd11decdda3e880409e77faead1c590202cd3e62354d4f588112d9209596cd291f2671a7eb43ecc
+Entropy.14 = b7501df81d97c2f0db8147566f466dd939ea4bb9378cd533
+Nonce.14 = fb3f0cda07161db69179be0d
+PersonalisationString.14 = 5281b0d4892d3ce549d04bc21f9e422e8fe82094d5ac27fa
+AdditionalInputA.14 = 5d4979adc95038d31fa8629f3177e92122abf7fe0f3c600d
+EntropyPredictionResistanceA.14 = 797239028ca6ffc014fec7340fb508383f62b1f4d2ee031d
+AdditionalInputB.14 = ae204b086225c6659bd8c2487b1b91310c3d65c6a18a8081
+EntropyPredictionResistanceB.14 = f69f38c433c8f892d4aa3d1c7b97903711b6e0f5445ca61b
+Output.14 = e4b3c801cee482f2d70a92fa7d4d2b9b19a1827287ea50698de61f82a095246dbc3abf102510c3fd413d6a8a9b9c88b186a177c14e013672fe3056722ee69fc3a49679f9d1cc0707ebb29297472343884dd6637bf094af5dd40bd1be4a269cf4fa65c163347ecd0fb6935eda690402ac
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 516f0159962c4c0da5811381b2af2f9960bf5a1de6737469
+Nonce.0 = e86b01b9a05cda38c163b045
+EntropyPredictionResistanceA.0 = a20df30dfd751ab401e3fe125777a0e8a86c9beb8dcbd952
+EntropyPredictionResistanceB.0 = 0cf56480e23d22e9164b57e8713092eeb5ea02e1c66d45cd
+Output.0 = 25d55c69f3984f54501faf0484b74c7915dce95549cb5c35ca0215efec9ecd8cf7ef22293557b1e8ae8b47d3f5b72a7ea30043fd8cb92a940ce0d0e6586afdfb7c779866fe8b79166b47421aed19cee7cbf232eee36836410272ba6defeb2bc67a0639d3ab67ec0803d54d7cc72ce03f
+Entropy.1 = edebddef7d318ea1d683c88ce868c124af04083a45be293a
+Nonce.1 = c27de6a5b0fd0d2e3e625a3a
+EntropyPredictionResistanceA.1 = c6b414158cf39d257e9874dfd89807941ef9e94fdc517363
+EntropyPredictionResistanceB.1 = a66b7932e9e06ffa96b28969b07e539a8a22ca84403ed612
+Output.1 = 73e50fb378eaf15de996ade1f7bb20c94c6739dd75169d5a55a71360e957dc60c5427baf323239634b67756e6282077e5f856e9bb3694374ffef2f5c41a9b2db87c94f0f470efc366d13f97a080be9d4c17bc153355a91e1b84f6e8143730b72df8cd9ed356884deec48ee349e169603
+Entropy.2 = 44f2b086f7b98dea940794d62a2d5b63a77359cc5500bcb0
+Nonce.2 = d6ac3cae40cdaed0f42b69a7
+EntropyPredictionResistanceA.2 = 61c25825c7301e41de6cd199db4d2c3dd54848eb1ba16ed7
+EntropyPredictionResistanceB.2 = 97ba5f9de469a81a13b2442d4d2e54f0b787a3e3b1c4759f
+Output.2 = 311dcdef4936fcf5ce401c8b7eed90291cffa31f63c753f7b969d43f868a2a7309a6439400b040b7a298dccb2d9769bca20b31cecebd823f69bc5a30c23a3ce8de8f66487835fb9c46208b6ab4ac96d470ecc85fce02b5b28b66d2e896c6ddebc53bb90116cf109efc709d51a9bf4f98
+Entropy.3 = 39568f06e7cdf41a17fc1f4bc4aab84c238ec694280bfe85
+Nonce.3 = 420841393dc81e3965af2068
+EntropyPredictionResistanceA.3 = d77290c69136df962a881612f35371f07d5b74ad3ee6bd19
+EntropyPredictionResistanceB.3 = c44f795237714c6d7de54ccd1085c0aaeac8ed54f0bad6cb
+Output.3 = 7707275e37a103c678a20e2b59422ebcf8df25913d1a6bdb792c53b0085d863fd25efebdfaf0d31800a2306f653a233e6820b0b98ad2cd0d0ae4631de578026115fa6ac91679f49560cd318611dc66957b7540fab5a41a9fcf0fa7b307d69366cb5a660504a9c14d6e3c30f04119c710
+Entropy.4 = baad7c1b789abb861e1c8d1d20fed32d9974c23641cd1fbd
+Nonce.4 = d43fee5ff1e01fb5fbb5f722
+EntropyPredictionResistanceA.4 = 408daed7c2add3090b89e3fd4690d1645fbe001670481c3a
+EntropyPredictionResistanceB.4 = da4e96ca543f5ee83f292cea0ec18fd9220439772e12b9e6
+Output.4 = 1e7d33c2b6a1a641393a425978df20b2d73429932103f963d8ea6a55f5c6529fdcc942d189b449f30e6f8b8db3cdb36ed7d2195544aa6ff49bfc0ffeb30c045ee6e531af42749941a241d93f93779a3d9390ca188e9474cb07ccea80414d4402490fa205d9835e4686d8b6be4318be22
+Entropy.5 = 9184c68288378213287cfb1782954aa5223a2bafc76ffc06
+Nonce.5 = f30a63b6c74b09c167987a0c
+EntropyPredictionResistanceA.5 = e91d26df49940a625d5137d0b1cc77718805f4875dc33c85
+EntropyPredictionResistanceB.5 = e96f4db2821b8c6164fc722adc922298ad764863e299c61e
+Output.5 = ec677fafe499fe7e4b5328ef3fadb190e14b51b437e485cad0411edfa48fa7cef0cb7d7088589efe56ba32b6588c8e6bf66968335def4e6cb9e48b4595c28d62f7a06d4996749132594977965e3da55afe7f4e64a5b64dbd74f24f8602352668a683c9a49bbe6d7d335497435e9a3939
+Entropy.6 = 58b0f7624998a27cab11413f4fcf5f5a2df14a4eb7f20e37
+Nonce.6 = fc1af296c6f69624008f3fec
+EntropyPredictionResistanceA.6 = e8e7d9e47f0834b41dc7b3195e2aa71629b4a621d9356950
+EntropyPredictionResistanceB.6 = 4d32204e2269f5a875654dc4cb6b64949dd7fbf431d29d93
+Output.6 = 80785acef3947455687ade4d6699f64164dbf06a8f06a63b2c22e76ec2d0d2e8fd49ba8c4c0ff0547599721cf9c4e8d81bfe0be60e3db61d17dab439504b5711909a10d881dcbf382b44cba891ada246e8c2b9f0e401eb8515b55a7044d81ac47f5f56d0084a792c138bd09c2def925b
+Entropy.7 = ad7a7fde531dd000cb7761298dd6b3da0505742ee03e8284
+Nonce.7 = df9e5bbd21f1dea2fa5c26fd
+EntropyPredictionResistanceA.7 = 20b237a355e88de311611a1627f9821820f2f67cdb8f77cf
+EntropyPredictionResistanceB.7 = 0b9d0a6b56ef9bbb78d251e3ea9f09bc6aae873555e3f6bb
+Output.7 = fb2d70d2d38ae5906942ea0dc715b1a32a18f9e6f04018c567ad4a472b25835d9430e611e0079a8f692b826c2097876d0fbf098e71a3e3f9259170d56e09199125c6b421c75915f65a480f0b820845045f9713c27707094b0c86aa72173f3fa027464f770082cec64b5128aaa0bc9998
+Entropy.8 = 2280811496e62be21c25d8e5b3065723a113ac7e3069c23d
+Nonce.8 = d32039543289e1a89b0cd8f5
+EntropyPredictionResistanceA.8 = b52afc98e9ac9076a51016b348711dccf2abdb7505dc9bbc
+EntropyPredictionResistanceB.8 = 0dee4b026176b999a83676f9ea4c28c104ca7f5a3a483e9d
+Output.8 = 7244204522e21579fcb993e8dc0fdb2c48040926b65ceab068b94d3c8c1253859f19d79f277965e06c39626100545b3ff009d3321a28b1ebd79979c72e5df5ef6fea7898d0457e5af8eb59ca1534daeef21d1d45abe822f9cb4829a89c07b90fee0f381ce8f2a42b9d0099a8926b0e63
+Entropy.9 = 1babf7faafbeb0c9c605d825f947a5207844154da0f4990b
+Nonce.9 = 64a28393d06c4dcfe01ee99b
+EntropyPredictionResistanceA.9 = 0104659e6a6a39756ca2431e11b27e34840c3819cf4f4c11
+EntropyPredictionResistanceB.9 = a374757bb57e9427d961889cbcabb23f7322abf45ba8d44b
+Output.9 = 4f05412f6481d562ce08764aeaf30bcc4ca50c31985a84e55e4dd3b7fba26496da9860a1aacfee381e49b3e0ebcd55d3e0184ea3604da62323c3739c0ecd9714c69b12a98d9b24fe68dabd6d684f0aa4e0a621d30b5f52d24faf5fdf61cc8277becf044546fbfc677b168e29fb70a1c1
+Entropy.10 = 5112d28f3eb3d65831a06e6ca129770158d79ef43f776f0c
+Nonce.10 = 54c13d770bc0a909a3b91f6d
+EntropyPredictionResistanceA.10 = 999034a47c8528949ab9ed7502509b08ece503e533e004ca
+EntropyPredictionResistanceB.10 = 74da0f8672a63fee31c7b01e4eeb913dc7339b83c9e8cf42
+Output.10 = 396b0fd39bfe342c92e9582924005287b9bc9f6fc2baaca73fc5fe10a5b6abd9b0367622036513aaece09d6bbb865efbf6ace0fa0f9570a6277715068cd49d893d8e3dbba36f5d3dc1ea5032aea54399e3e725076cbefc99ba81ebff92f1f80d177ba198167470adb646f3433d80d1cd
+Entropy.11 = 0c09b9f6476eda7a275cc3455631b81f38fe17124f820133
+Nonce.11 = bdc18129dbe905d6f11ebf96
+EntropyPredictionResistanceA.11 = 5c3beb0efeb15807dca7bbeefbcab24b7e8a25e86cb65f1e
+EntropyPredictionResistanceB.11 = 86f293bc3f49684d1092fb5987795fa6501ff36ebc3fc8c6
+Output.11 = 68ef8f7dae2b79859175616def2f075d6f7234424c3fb38955b7f46d4b2941a325176409c109cb52d3095bb0d7705953b4db20035d920fc0d9a52f4442ade63cba4aa690d91c84471e268c74a250031cd73763f74e6580bcd3008b2f40588a52b828b968df70b5f27f70f6a62a0ca5ee
+Entropy.12 = 6e170269226fd5bfa1cfe8c021759c324644a4e911298482
+Nonce.12 = 389961d98eb52c6a48a183ca
+EntropyPredictionResistanceA.12 = 86bfc4f1611bf2d0fa30a5710e95519bebd0f30454c78089
+EntropyPredictionResistanceB.12 = 5d6373d4b5ccfef4d62b882f5328827a3ce16e436050c048
+Output.12 = 24cc00af22ea87451b98505ec3e5729f9b2b85cf489bea4732cf80864dbf2bbbcf2905e87e12254a4fe93c8bb5728fa6135a3304a01e5c890fca357829d0f65eb177bfbd4e86c5089a6e11bef9dc0271a54cf4cb2ca31e639d17600b3f6b7ed88866fc5b6bd0d2f71e2fefd893107bee
+Entropy.13 = da029477307bb4aa3b02fdb1b32776adfd26ed880b03b587
+Nonce.13 = 01454be36893c2f3da07d1c4
+EntropyPredictionResistanceA.13 = 3d04aa86ad2e47acf7b34f27734abec94198c627ce28ead8
+EntropyPredictionResistanceB.13 = 70a77a0649592309ff69a7fb20389771ef3fdff87fbe9a60
+Output.13 = b8b8d3329bb7d3c994c02b26a5b79597490f854dacb722df0de4b2ff144826d6a90ee9bdda18e0b9c5d4ee3dc19f47afdd8deac3b29f2142ac935f5088a0787815993e853a434a89058d15676a2c48445eb3dd8b447895152ca976cda3db31eb50a43bb795853c38474f1a285971df34
+Entropy.14 = 62c62d2e074c0455eec5f9729b64be968438b8388dadbe04
+Nonce.14 = 86a32ad0608aea2f54dc5841
+EntropyPredictionResistanceA.14 = babb7e1e29089815ef8d794611a3164b54617f8edcae5151
+EntropyPredictionResistanceB.14 = 06ab40819ac75f8609d7759fdecd3274d231781c939516ba
+Output.14 = 80abf3d122e8917731a3ad6c8cc0495aa302d521384a155707f1302fd2c14ff9b8d6a12027b05cfb050fc45baee976715aa9cc606b943c785001c0431175278ed18d3b4c99bb7380598db4e9462e472ed9ede95c2e357f37152d1a76a60fbef4f97751fd111d9b965645de5c823d64bb
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 2b581d6e0144a33d547d5c7b67a1dc9908a5815ecc33d729
+Nonce.0 = 349aca66e7eac44c90fa38a6
+AdditionalInputA.0 = ef779960c450054141f20173325bfd82b31847c2fad42216
+EntropyPredictionResistanceA.0 = 11a880276472231b62998fcc9f64646656ddcdd3bcf9b8d4
+AdditionalInputB.0 = 6acda09fb752330654d9902351d3fab5f930e1eaf78774b5
+EntropyPredictionResistanceB.0 = 5e459b0854432486b341394d15122f2a63efaeb632d87d5d
+Output.0 = 82071532c02a1307dcefc9e46d9d24ae9c298a5b505701683d3b33870c233ba9b8163f1db6ff30096cac6ef200917973f81aa2b55caeb33b1d30b17069292327da25e836fc860001399fe0456bd1422622ee6783d05917cbc9ed0cea82877ba5cc86b59e6d9c85481eca7cfed73e2fa0
+Entropy.1 = 768784d197e542d9b164528dae44d9aa8af0a0affe554f36
+Nonce.1 = 12c8c4d09bbd24583b334916
+AdditionalInputA.1 = e2641a1d57f2f9f5adc85d2f08f7f6d89a3a2d7cd5958722
+EntropyPredictionResistanceA.1 = 45925f4b98810775a6657b7b55f5af0e26cdf19241294c82
+AdditionalInputB.1 = 860ff0151b41e7abe6398b39d2b217b29215d478cae127a6
+EntropyPredictionResistanceB.1 = cf995ae4a53f91cbddc0441669c0c935154e3e7a24da593d
+Output.1 = 7ac291914e54e0d4f35737c84c1c3d50561a680c563ef37ce4ac1a8128c1440f94fe3430d045f07e1c9e7f013082bfc8c8abd0ecf791b169bc930f8e6032a0d2f04278239f0c038c5d078119e1593ea2c2bd03aeb880543870b7f2d4175c3732fce43b41ce82bc0255484a4db4dba2df
+Entropy.2 = 900c27e83d8d9e7f7d44a1e4635b2a0e0501b2d5ac3ea105
+Nonce.2 = 2cebee449aeb20f7753c37cf
+AdditionalInputA.2 = 24ae5deb38215e6e4d3097bdc71fcdd842ad52861e4052e6
+EntropyPredictionResistanceA.2 = fb601587d0cdbc77eb6792aa8ec191d120a7bde1fd24dede
+AdditionalInputB.2 = 05cdf028f073098688551204dba42a6aecb4a7baa854eeb5
+EntropyPredictionResistanceB.2 = 4d58cdbd88f2f91e157da9145e69e5f1f470a180a799c664
+Output.2 = cbccb630b046783412362909e8cae89fb164f3bdf3d381145e9d56abdcbbb05c5eb62e92a32aa121eb48de1ec1da714c894d1fae5fef0f744772132da509f10b50269caebf9865efaad33beab18460ff9fa41f659a6543155ebb28be675d4db597b09b653071cdb87f7f9611221c3146
+Entropy.3 = c8f18c9f7885d378293ab49aac9863fdb218e093a245c812
+Nonce.3 = f3180a6569c2c71284981491
+AdditionalInputA.3 = 6c6b2f54db12b78a50715665fefdedee2a86582ed4cae9d1
+EntropyPredictionResistanceA.3 = bbb67db687c57e2af552dd090f9d2643143ac3faa44636c1
+AdditionalInputB.3 = 625ee44e82874ac90309424a10483edebde1210b938cd8b7
+EntropyPredictionResistanceB.3 = e305a19014182b7bf9ac3e5c8224ee1a88c3e11e25fea182
+Output.3 = 38783b06d2078e22fb0b9d8c24859e45c6187d08fd4770d9a07cd486de04dc53d95f4fab101aeb6785af8bf6f180c5a2dc9491182b3327703cf8d161abeab9e5d9fe19f8a0a5ffee468951277a2cf899e7242dc54ef9e7ee0a2a2b3d53e040f6d9b7e992924af99aee6f675a69db411f
+Entropy.4 = ce33597584fe81cb26c1ef2f9e522681aa9a525ec7ab1d11
+Nonce.4 = d03760605a3d60bef012d0b8
+AdditionalInputA.4 = f81fd993a6d337c538d49dd3fee30b878d225d702f873a12
+EntropyPredictionResistanceA.4 = 7f02c5ac7369919979c5e4091a2fb17e962cb80d3947ffc7
+AdditionalInputB.4 = fa9e124099b97af015401d067cb0141c3637219df971231a
+EntropyPredictionResistanceB.4 = 7742f73f122772c6f02634c0b001729b5c0dbf6bfa56ae70
+Output.4 = 3476e3e800ee684f3b1f82feab89dde8981abbefb4da05577b80333f36aa6f7614c6c7cbe2b0ce70713e2ab25f917ed6f75edd20a5b2c9dc2eb260b931108e178824ce6cc6c38907863ae32afe6f552004323429f55fc58f078c981338e8bb085541afeb740542e65bbe38602e7975b6
+Entropy.5 = e3473c7442a5515c6eb82fc0131b77f9a5c7552addb8cfaf
+Nonce.5 = 16d7bf3c0c45b8662b149005
+AdditionalInputA.5 = 677a148764f7cfb811d0c252abada4496c3423f24d387fe2
+EntropyPredictionResistanceA.5 = 5bd4b95388def1f6932041adee249a404db9b95555f26881
+AdditionalInputB.5 = 8dab4089d7c98c4eb15d553449c0c4e76d38e4c6cdab515f
+EntropyPredictionResistanceB.5 = 782ee08a2a33e8bf0dd677d590a8aaa073e9d036550a4200
+Output.5 = b994ede220947c7824b01a2617d65842b7926914a31fcb1c80c98a3327040490671832039917210e0005f6bb8d4e2ff584d9021a9fe93d6bdba5d7588e22bfb7df87ca437c16fcd63be29561ba5e69253659c98069b122c4968c59d6fe4c9e19568fb94e1f62c9964f5c22025ab9d141
+Entropy.6 = 3686759de457719544416b069c9b833c95cc57d15135fdd5
+Nonce.6 = 106659c18ee826aaba129c39
+AdditionalInputA.6 = 722b69cb29508bfe56fb6691bff3da5e82d5af4395300c89
+EntropyPredictionResistanceA.6 = 2454c6da831097c5c7e7521ca739ab47377835572b32a5df
+AdditionalInputB.6 = 6a3e58aec235af4bf63cec9211c58ebe0b47be39025a15f7
+EntropyPredictionResistanceB.6 = 7ec9aef6797c5b68f66be8726599bbbd84a74fccfbd1e855
+Output.6 = 950aef4355e27b76421a0e1c5872ff8ea294d5fe40a883b8a85679e83b1ab145693fcd249aa852eb971e9f3512744c4782e4652a22f3ede5cdc2984c3299873d1ceb630d4cc3646c155cca7a007e9e9ecb0d5d0a37e1759a281e16646524bcd87566864f9977be4bb2006a3faf1821a2
+Entropy.7 = 816d173f39c0cc9d1f4c76ff8961a96f925834962b82ac83
+Nonce.7 = 747d31d49b87b96dfc332876
+AdditionalInputA.7 = b593578165da12412ece694fadbcbcf19e4403e966e4cac4
+EntropyPredictionResistanceA.7 = 4f44d3c19b3780538c8d6c5a59f4bd41e90c87ac8a93c59d
+AdditionalInputB.7 = 02fe76416568efa654e7e83659045432e8568aede4cdbce3
+EntropyPredictionResistanceB.7 = eccbe229f97d9388f90c9e7d53b5a82af2df43c65ea9f411
+Output.7 = 13723753983061fee1d4c2bf8ebac1f6e0bd30cacced5bd7fb6b6b71c27d0e5862f70c5a3ffcb4b2cbeb39517f565b7cd19da7c2570a3e56c946a18e25d880b51f6a838311366581d1444cc9ead732f22fea29e6897b7d15e937b2c709aa091b69b7f0fa1c9406be016577b9f3c8e476
+Entropy.8 = 8c999ac208c4fab14161c0720f315ae0b7b38054d30d150b
+Nonce.8 = 2b8923dde5c6bba3a7da8571
+AdditionalInputA.8 = 38c72289958da233940280b773aae715479e823eb330ae0f
+EntropyPredictionResistanceA.8 = 1296c64b387c41111f7c964051d45698aae1594be1b85137
+AdditionalInputB.8 = b17f449459e0134229e6b6ff7b9518ed76a846cd9b8b33a6
+EntropyPredictionResistanceB.8 = c0a0c6535454e740843afdea507f8cc20b8687f370e30a19
+Output.8 = 8290a5437673f8182ee5329e98c95b1c8cb7fccd2a3fb70df0dd95e1e6009e8bdf16a59711e01cf5516f1d004c4e34a8647e47914755ff6a08a2eb1b5a23869489d41a57541d2cdca427e3526a8f76798872d63d64c0bbb83be03030268f564873a3c1a3cada585fee0432576b42ddf9
+Entropy.9 = 621a7b8b5c89036eef4506e4901c4e6433ced02b608df8f8
+Nonce.9 = 9f1964a1d3009357d90e44ef
+AdditionalInputA.9 = 07e46d069c5567aae8918c7a449f937ee81d0b1fa44d04d5
+EntropyPredictionResistanceA.9 = ff0561610a1ab1e0fda77bbfd936b93d92b6de7a212d4a09
+AdditionalInputB.9 = c297a53f8890fc20d3eb53be45c2dc442b3e7cace8867ee4
+EntropyPredictionResistanceB.9 = 3f34c0f3953d97aa625720e559a6b54332d37b8eef4ae106
+Output.9 = d1002f547880d3ac7a9e2048768f54446773225a0b2fddcacf80348c7548b7930168861fe3e5eda1c2416b4d2680f6cddfc80aefeb117565685f148e088431052376044cdf40c8acb43791c12d75aeb7ae4b20a7253a66060151a76bb72af291523cab7cefad295dc90f5a7a5572fec8
+Entropy.10 = f1e0268bdbc434edc041e810585a574a5a4ba094df683245
+Nonce.10 = 32f655940042bbd0a25e5a5d
+AdditionalInputA.10 = adaf575a633eedaa13d738b32e0966493ac6e03ec6c7cb03
+EntropyPredictionResistanceA.10 = ba8b0d7822de4cd0b624ac3b1137815df12d07c9b2845247
+AdditionalInputB.10 = 0eff3c97ed907137451fcbe938d71904feb13654d5e0c7a1
+EntropyPredictionResistanceB.10 = 31749c44a1370742f0756cfab59bf95b3490eb2968a4f0d2
+Output.10 = c986400f3a827c6c49f44b1d481dec1cb81b1e7375ab5eb8ca83444d3cbf321f9ca6678b969f5706302b2ce45d2bcdb8a1b3d78aaa2898c9a65f30115dad4607029a607e4724ae61cee74c5d05a1d04bdcb6b330f3ec5a3160162ce3f4b8e8fafa928b6e863cc300b2c348db59f700f5
+Entropy.11 = e6bea4f2e1ed514b1a90116ee76226c7ca096548780e1a11
+Nonce.11 = dcdef9c4b8e5d1c2e77b5433
+AdditionalInputA.11 = 5ef4ac8b0b1801c688faefc502547f4d30ca1bd3da64b596
+EntropyPredictionResistanceA.11 = c77a7e1c8fe6681f43d29054a0f2148bb2bc4ab0dfc0215b
+AdditionalInputB.11 = c5b66166aaf1ffc607e1e13db4cc27f1968ff514db557e14
+EntropyPredictionResistanceB.11 = 0b9dd16aec7314fac17d7e31e927c7ad7499ababefd59e24
+Output.11 = 6c1db5e59965a90b3858471804633c2fb1e79d93ff39ff6982b7e8eb85b7ae7419373eda6c3388c1c47ad05a0a77d222fdcf4736cd5581f11b7219233638d698a08422527865bd5566264f3d352999668ce1c4caf390a16c3502bd478a1b1cbba64d8b78930d303e4c19af5d29bbfa9d
+Entropy.12 = 550f88a8c3912eb0ba7679cde9970e6a78c2cebcb916f890
+Nonce.12 = c193635489f5e54546f016b8
+AdditionalInputA.12 = 623eecf14835c866023de30b6a1fdeeafcb2bb86a1acbea5
+EntropyPredictionResistanceA.12 = 762717e003c7e953b8c84c7064c08aa5ac711f78790763dc
+AdditionalInputB.12 = d7bfada00971e80c976b7186f5c70c0d9f173f97f5c40ce7
+EntropyPredictionResistanceB.12 = 9b469e16d17ecb43c04e19f4fc8c164b1c6f9aac69461228
+Output.12 = 331f94b3522dceeceb31aa6803ec67da867ac13b36401949798c8dbc487d0cbdb2703aebe40b6d23820a5b77e1f6c423dae7851d66efe8b9e37b94bb31b78f0510f8eca6e7e735df2a8c9b908e07af37c5eb47c313d192a502aa1b8a5ede76f507d72783e5a9ed0a40ee6bbf0568b16f
+Entropy.13 = 7a55eda9d1411018f13c9971bfa6d5dd938be40b60b34acb
+Nonce.13 = f742340c02df4909ce5b7f84
+AdditionalInputA.13 = 68416d35284caae8917a296dca385ddf92a8ea557295007b
+EntropyPredictionResistanceA.13 = 1a1d43e49cc677b66960c53ad27977f22945fea13c3fb132
+AdditionalInputB.13 = 092ac813a06d2b68b14fc101721518cbc01569e3e71ea0a9
+EntropyPredictionResistanceB.13 = 16f0a38b4114331cef2b1cf4f9f6ff591988697a04b104de
+Output.13 = c65a64f00ef77267c0107b90ae576efaa1fd71fd94be561778df116f93a3fba1a9f700cc00100f866fea7eace294d13b8d4fbb836cab7852f9c0f3a6228ccda32fe6096b299c38e156071f64e92f53a4a221097d1913e794697115481eeebc2a5e63b3c79f07c37074f6a8abbf0aa09e
+Entropy.14 = 7a561ef08d275952fd82dc8d0dbc0e39a384ae195aa7b706
+Nonce.14 = 386a2df9be1132f6d4c9c72b
+AdditionalInputA.14 = 2160d4496bda244df4183336e9df7d94b82dad9a894f1209
+EntropyPredictionResistanceA.14 = c8d5002a5f95e3a48ec2854b79b97233405cfdc7713520ec
+AdditionalInputB.14 = 32460d6c3eb7912389edb486462038fe90505f7bd5d8e46d
+EntropyPredictionResistanceB.14 = 31b1b8fd7753800a1d3c3849ccb22a7c28ea4cec21e71c91
+Output.14 = 77e3b89a60d91cfbbdac8215a3fcc000ae61a86016cefd998de3561ff76e188eda8910c08e964fdac58e3bb30f4af464b92812e15178a97d3215699f21b9775d3d4b11fb16541eeda2956937e43bd4e928f3856bced91c2e9a3c741f89894912cdec7acdb0652542fd08acb6d6ce2c66
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 05d3f2529de26a036e2bb58557dc920eade412988b89d8fa
+Nonce.0 = 86ff8c33d84ba8553c1ad327
+PersonalisationString.0 = 83b637ba5a06e40b42a4696fbcf2a27de3dde1743ca03512
+EntropyPredictionResistanceA.0 = 71534b1c8013727fb696754885f334b35d5ab826b83422fa
+EntropyPredictionResistanceB.0 = 179e06d1830a7b1d1d429bf1b600ecec62b182e09c2926e2
+Output.0 = c85c20d02b8986a7c78a9a070016c19593723bfe1c53ca2a80f5fc0651bbc62d965e1db8cb7f868ec4a27b2dd310200a4bf4957fb6e9db7e3ae2811d8a0ec373cc67ed52cbc6190ecb148106f993c89c1a67ec577bcea036f750663c496e9de59ccdbd5aa8b5805a6adfd0eeee4335ff
+Entropy.1 = 44e958d22e81901484a87a064c3e77fc5b03f1317910c4a3
+Nonce.1 = a2f1001902c1519732b6447c
+PersonalisationString.1 = b5b8d9c2b20a55efbb28587746ec66ff6fc9ff35a6046c3c
+EntropyPredictionResistanceA.1 = 1ae71f89c9111ac3181e302610524466c7bbcc6f9692857a
+EntropyPredictionResistanceB.1 = be790b97c4b28fece20999e38a41546e1298bc859d3e5b08
+Output.1 = f3fcba7eb8179abb79852e3c464fd0440423fecf7c93d4e33d10a96351f05a357f961433060860e02a34790362119a1b719c277a1d32feec305e751119f2562d6049c09a84a2569b61cbb58dc6b79a7c07149f0fd7c56a6fad222ec0f0413e1fe569fa083e7e67415867286f7b0f9482
+Entropy.2 = d8f4ab826462d2b8823cfbbee0dbfce8b680f360aa0f6249
+Nonce.2 = 88f2c4c70fa084b14b47f373
+PersonalisationString.2 = f5f893cf093a723b61a541726e93ddbb354318c4cb04fb33
+EntropyPredictionResistanceA.2 = 0a7f49b95cd3e36fd03b907dd3b3c1cef4ab23b23f637c1e
+EntropyPredictionResistanceB.2 = 47d81ebb66b51fb3ba040ec23cd06b71944a551c964a03c9
+Output.2 = b36f12a4e9763ab6e0d78ab83c974ba1f836b6f7e872bd70cd38359b02310b52b9a01f46da7dc986e9f8a2c9887711496ff6ab53540b22d01cf58a04dee4932f78ded8ee7a0f5d9e5eea354f11a0eb9e362ad05b918e9ae3fdff3e0ebf44e3a14d2b4cf688e5a0fdfcf4102965d96e84
+Entropy.3 = 047a37afe4a6dce8a65de4f60a1f72dcab3b3b63f52fa6aa
+Nonce.3 = 0d8d0514a691afa00414a3b1
+PersonalisationString.3 = 1f78573b3f5bebf70c8ccc969475e00a8ba5d56bdb6f3699
+EntropyPredictionResistanceA.3 = 1fe277dc413d61d9cedd71872b72bac31866d949b3fbbf88
+EntropyPredictionResistanceB.3 = d5edda4e17590335bb09da0a6b95ca6f8353df48b29de789
+Output.3 = 04da571ebd7a75d59808b664a6f884061f0d4c51c151093ceda4803eabdaf6bad42f68765db52934390e833ed9770074c99b60a1ebf42b33d9c366c02ce7fbe064a3cd06a1a9b719e29dc9e061f7972336c6400c415feb0e9fd2bc9a5b9f71a94e9a1f2781a9fd5525132fafa557056c
+Entropy.4 = 3d64988fed8de2caa7770b9a925b4d526d817878be69f4ac
+Nonce.4 = bc0277934b5f8da723bd9b8f
+PersonalisationString.4 = d074eaa5374402096d0664c5578d1936af3d9b2653792044
+EntropyPredictionResistanceA.4 = 92104e6d16c6460d7573bb3a9d2827287708d7a2b59f97ac
+EntropyPredictionResistanceB.4 = c21350e84286808c7c67879a85e058a64b41122260328109
+Output.4 = 223aa666051663da04fb4400bd09bd82ac05af9a3f809b12cf1575b3e8244cd1a9e3d2b09b453131fbba9d7e45099828e8ed011c67c09f3288a08466717fdbb4bc0f53390461a41d34f9bdde523b26b18dd9fe25851f5548461f63ff5b05c50e3ef4c89811431b30024796706f96f660
+Entropy.5 = d67ea29f158497ea51431a19c222acb676a717ac963cd88f
+Nonce.5 = f1bdd9cd99d22e4764245f34
+PersonalisationString.5 = 183a5c09e29fa1306e9afe654f883bd498fbe7cd0f67b759
+EntropyPredictionResistanceA.5 = 5a3211e6b190a5f992a6933bed8f3c4459e6e76d8890d1bf
+EntropyPredictionResistanceB.5 = 1e95a63a048c7d7e13ceb578074864cca93ae65f868c3c7d
+Output.5 = b6533f997ef3c9a6fca5bdd21526c3db9420f00eea452d7f8e73cbeb2d0cfcca2d7ce6483a011a58ad4e5985194d69d4a284b00ef353998bf02f6849352ad4120835301a11d0cdd22b99606ce81449c79a9de7747a1856bdf72702f2ac243765edea828ec15e6befc7fc09f776c87518
+Entropy.6 = 1fcf66a1cc9e544333f1db24009e28c03ab350b1b6b2eba8
+Nonce.6 = b886f1f35eb109023873cc32
+PersonalisationString.6 = 14c317d04e2aa77432cabdd58224f0729ecaaf178ec6f5b3
+EntropyPredictionResistanceA.6 = 4e9ed1424cd5d7769c1aef4810c5ef2632a1a02e84375faf
+EntropyPredictionResistanceB.6 = cb3ffc048f865798780ceec877ad79d05226ac82ee909c2b
+Output.6 = e18299dd54e4ef94c0005612655485c4338fec63aaa1223369817c1d07ad79d58c1a6486baef27894508acc9a4366c226938786d7fa4cd8cafdf78056909ed44d559e3678742dc2efde03cb95e2dda73cd6938703d117bdadca49eb66612d0936c7a233d43c0edf723ed365b0e833360
+Entropy.7 = 6844a717067ebd7e345196799fc46e574010ab5c4c780c31
+Nonce.7 = 2199023c4d2a6370617382ac
+PersonalisationString.7 = 6027a8a69d3a80561130c02df424882b3f8d1bd986b20f78
+EntropyPredictionResistanceA.7 = e269578587475f49131e9f2b8bda5e8ac000f7f6fbafc37f
+EntropyPredictionResistanceB.7 = 3b3fd89201f17024adc458a38ee267d0b4c8c8a0ef163bdb
+Output.7 = c1c10698e51b2cf04799c2db2316c3673d519f93a31f5b84055351be5b062b54051afa02fada9343cd8630923f29cffd92ce8cbbbba3b14511e7a06337c68a5f958a259912d811ab39c043db53f8c9e8d06748026aba53608f695af2dd61327b62bf343403ef467ed4add965ead08fcc
+Entropy.8 = 86f9137a04a7063babe96fce83a42c6f8090d371abb859ff
+Nonce.8 = ef636985eba046b4ac45f2a5
+PersonalisationString.8 = 3f84110a9d8ec6de973fb0a885d2d6716a5db13d43687a23
+EntropyPredictionResistanceA.8 = 809218f55f2fa23389423778aa77e8099e698b60d24fcd54
+EntropyPredictionResistanceB.8 = 03f27899c80d7d50e88903837100ade8a999fe3f6c21d0c5
+Output.8 = 5ccbf744996629a68c668bd6bccbbbf8a3ae804ba075f9b78bde9035d61a2d6ad30837505428218e62311ff9a263f61bcc7b75dffa4cb998481fefed00be15bce5f03232f4b94ee4c43d6b5e21723fa4bea61715dd1f789b4ce730b5cb55768402453cf63521ae93edec260e2092e8c5
+Entropy.9 = ef915b23500f37f3acbb119c952c87b02d158124b721ca83
+Nonce.9 = 9a70ce433ba8402ddacb001e
+PersonalisationString.9 = 5c47734c23d923c2926486c189cffa64f47a78b64a4e89e2
+EntropyPredictionResistanceA.9 = dd1b58f789a24ce75acfa0cf9701ccdc67a02807458be23c
+EntropyPredictionResistanceB.9 = 1350b2ae5c4e84219dd488b0aed046a127e38bd78b7ea48b
+Output.9 = 28fa41d2948e7d47f808c4e0f8a3da4f2be0b671ce4d442bc0d1ac845398a756c80b9a61e1ed550ad142102c51697681f189fb6aa67146f23f164bb2f9d82f54b15ec1aaaa0471b76271f3d7471c4f1e9d32d73e700ab3de06bdbfb1f55cc58cae09ab4ba40c9cbb810fc2641608b872
+Entropy.10 = b2d45a28717fba3a193fb4804209a6a274aab183215ace96
+Nonce.10 = 51819babf8416e254771d61e
+PersonalisationString.10 = 3b69cb61306c780a994bd3c8e6bc790854d56a0a2e87c313
+EntropyPredictionResistanceA.10 = 1d4d5d5c1a014ff0e0ba6935f3a0f56c336117beddbccf3f
+EntropyPredictionResistanceB.10 = 373ab94d3e4930070c17080c7d77c4094098b1810ac230ce
+Output.10 = 62abdd53a421512e5687eb1b16cb0d3fdaa2a23d8bee43d0b6a818d948979e61752899d911477827f3afabec72acb8ec6bd8f6bd5ee771fc86fc8663c40e440e6a72e7cd973565c4a876b643ba8326693841e02c15abe3327b292cdcdf1e940af35ef0c0903dcece3693a6c1a3e7aa87
+Entropy.11 = f2ae29174965960f81a48240834457b4870073bde071fbd8
+Nonce.11 = 7ba2fd4ac2248daa16d6519c
+PersonalisationString.11 = bf59477f89133ed6fad82234588ce7a4d2c1057d735ef765
+EntropyPredictionResistanceA.11 = 3340c834e2e7a29a5e932512e489ce39beec4a1efab75118
+EntropyPredictionResistanceB.11 = 0351c330dce0cc7a3508f8bb1945b68bea98aecf372e4ead
+Output.11 = ed292e0b378a5e6f2a8aeee9c8b1cd80fc26a5570e585f755f762bc8b1c3b44900201761c211f4273c9091d9f6e9d6214a0f54de177eb4e9cbf1522da4f6d362efc76bd11522a4fbd4cdb755d4462ae672991dd6b35d8b59ad19db00acfc23f152eecc4f18a011ec4c51760d4ac237bd
+Entropy.12 = 4f7f5b73767c66f068f270c89de931bacd65c41caa262111
+Nonce.12 = e42bd362afa175cf32654977
+PersonalisationString.12 = fa13876f38b57797458775195826ad84258175ef55876314
+EntropyPredictionResistanceA.12 = 0ee5ff4f40a133367e8d50efff90259df027f21a711101fb
+EntropyPredictionResistanceB.12 = 560abcb241a04b3dc75c52e41f23a4cc4fe813893c75923c
+Output.12 = 8c0439a8d91f3e11b646ec1add46f7476db6c059665a29fb1d7749c5928cf59c82b4386bd067a99bf50c2f134819de83fe13832289a90f61ed4e46e58b1b482fe69fba62299a291aba911b4796374daf462b285c064538d61f42b69e902e94d7738b9715cedafd564cd604ff778289ff
+Entropy.13 = 1ebacf45ae87ffdbc22445c0c966012d12ec88d66f68bfb9
+Nonce.13 = 432d7eb28cd64b64337627b7
+PersonalisationString.13 = a6be68c9a383687731c1f816912d5eee77eeb97df7623db5
+EntropyPredictionResistanceA.13 = 23f6c026857697564dbe4d938bce55202676a8424f2c8078
+EntropyPredictionResistanceB.13 = 526e2b8099afc0957afdc0f7cb40a0328f538f19ff824fc2
+Output.13 = e6fb0c13dd5eb349b4cf75070fbf2a30fa5450a86e93376192f82cd73c2231b0f55c764180a3e2073cfd28329c2bc523dcfa7ea693e378343ceb48219d5a21dc121ba521ad773baff45fa22a5a425566fd95c3bb28be0b0243e656cca5a3ac2f620ae403999bf21cd4a3fc5874f1f672
+Entropy.14 = bcb50f34c68c50fa83e87b3e6d497fda2c20cb5c2e4fd358
+Nonce.14 = 30968334d71498ae3bf3ee0c
+PersonalisationString.14 = b56dc08bd7683ff41acf3f3a4e3a0e869edb3c80cf494f4f
+EntropyPredictionResistanceA.14 = 7a40b0bd455f5eed4ea7fef036c5b044425ef2138b18f1e7
+EntropyPredictionResistanceB.14 = 33bd20a02d78688da2b43f2222894d508f63851fa8217b6e
+Output.14 = 1d0bcbbddc32be27ad0408c93d49f328832dd15beafaf969fa8f991b18faf1cf4cd1ae7103cf94135c1fa9beaef66f75d825cd9c3a16697337d746069a94aa8881e9ca841fc61fadc3701fec3fe65f750240c7da05884828ac3cb87289567c4e491ddb3f1ca5cdc08b5fcd3d8f91136a
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = a787a7e33d502ce8445e399c335e3cda3a00d6b26b19fa74
+Nonce.0 = 091366d09629d644da71e459
+PersonalisationString.0 = 1e1826f074c237ced1e62ffcab6538d3e00d0c1e0acd8107
+AdditionalInputA.0 = 7a8575fb3ab69630e9ca1ca50c9a848899bfbc6ccc88bb22
+EntropyPredictionResistanceA.0 = c059475539ace032cf030f441714c865ba6177ff216e189e
+AdditionalInputB.0 = dfae6e005ffab2987c7909ac4cf82e5196ab384d837c6e15
+EntropyPredictionResistanceB.0 = 150de9abaaee66aa780f955802a2fbb33aab4d3e78edcaf6
+Output.0 = 16f5b52726c0f8d8cc063b457e49e0fe613882c068dcca4c5f6e8af3244a8407d139e72dcccdc2da4fe1c1eaa7c63e948ac8fa79cf2c42c3dfd4c73e81d95c91107e97d700ecaf0a7f68b7972638a7a0a4fa60cc5f394bd971e1df3d5d9ff83fdc0abf6cbe472fdcdf1b56399db2ac0d
+Entropy.1 = 089441ebf9449e41c2586ad25b4fe5433e6b12ef56566901
+Nonce.1 = 7e64dbca6c89a4a39cba1970
+PersonalisationString.1 = 4304b538ba13683e5149af3ce22fbc67b5d71de1593242b8
+AdditionalInputA.1 = 872c4c7046a660d1382d7bf8f7fe524aa10448d90a0b5032
+EntropyPredictionResistanceA.1 = dc87c2d3fc9d0aa06621f0bb5a72977adfbdedb295b2e803
+AdditionalInputB.1 = 870e68f342fd60caaa31cca45dacf859f9da4eb77c565219
+EntropyPredictionResistanceB.1 = 9899d3beb65c7575803d6bc8b1253318d938b17f06d1a825
+Output.1 = 7d352a04a6c11efb5f8aaecedc122d1d1543be2c767adbfe98a21a70a953b4ae16315de301f301508d687c44370434bc1b5670ba3282e670a59d8060a80f2a4e8aa46e0f564941e7a6a19ee147ce611520ef2a9e2783e87b286a7863acf9f5eccc002098019988a7533a598aadc15c0e
+Entropy.2 = 9be52bca52046664c6a37273984f658dff13829ffa69a4c7
+Nonce.2 = 651f008374774b42e09a3e1c
+PersonalisationString.2 = fad69f80172f852ddffcf520da6fda8429164f532bb085a9
+AdditionalInputA.2 = a13573b143bd9144153b2409539aad5c281b143af3b4f3b0
+EntropyPredictionResistanceA.2 = 04317623ef29be8af2cf7b2700bb1aa770ab9fbc76fafb8e
+AdditionalInputB.2 = 3060074e1dd3fe9c56614b919922c398e3714a0d177f4f07
+EntropyPredictionResistanceB.2 = 44e44fd45e4dd50276ae4351368060a1fd853a11ed0b647f
+Output.2 = b352b079a3cfecb8c9cc3fb3c9b72dbdc1dd0243dcfdd97a98abf2181d2ce237ced5136eac179bdb35e1f9348d65f1aab2af19035bf34ba81e54c1a5307b3cc8c6f8b2ff1c92dd4be978e606fb54a1c63f89535845a86f07689cfa734ca394cf773f96eea8e2f87b7a402ef1bfe9fb82
+Entropy.3 = 9cc4e7767b91be3063f37d2d62526e530888876269586e1c
+Nonce.3 = 299f0b0a8953ea2f68cd180f
+PersonalisationString.3 = ac2feb24aee36811fa00b18121f0050b5ae68bf66a225e6c
+AdditionalInputA.3 = f33c980a39424ba6342b3f5e29472823253ec774ba56f72e
+EntropyPredictionResistanceA.3 = a21ae4a955c3139f877a18351e8947edf300f70343dbb29a
+AdditionalInputB.3 = f241a3f4f0bd8e5353f071684ff68f98c6ce816801bae903
+EntropyPredictionResistanceB.3 = 39975bfbb9e09aea62b370dfcab6551fa36e2a9e0f0430a4
+Output.3 = f280a239ea3fea86c597e9072e9b668b75ab6287a7141be649003e644803620e714042d84845548c9848eafc2aff19cf4dc8a10f2656eecc2cad446480206adf0ef1ec3e7a97a7522a30eddcceb7974bdc23839be4cace8195fdf97c5c3173d45a0f842a5ee6241a5d61e809e0780895
+Entropy.4 = fe1f80c6d3476f959d8b24008d16129e20ce1f0a0cadd734
+Nonce.4 = f67c6fe5e97007075fba4c71
+PersonalisationString.4 = 91fe017769d4e69072d97aac76c92666de807ee5fff8fee2
+AdditionalInputA.4 = cf268578dc3ab92400f70d3f48ed34ed8fa6d9a43698eb4c
+EntropyPredictionResistanceA.4 = 8487402cc9ee53cd934e83032dbcc66de3e9e7eebcccbcfe
+AdditionalInputB.4 = 3938a3071cb859ef30fe28bcf30417e7a7d1ef4a27f165fe
+EntropyPredictionResistanceB.4 = 49d044a1334aa5f3d473971aacb02e31d9b656f475d592db
+Output.4 = 4bfd45ba273f0c804bcf3bcabb6316947e3c37de83a91c0b339460a9b68d6822f5780763a5d2789d21f5e2f3fcccfea0371cc6a13b0459edefd849bc81c05b11cbad4160b86fda9c6b61128a9e1ca7088ede1c11b022d4017604322239e9bed6ac9dff2105fa9e94525d1977e7384d5d
+Entropy.5 = c6ca8178a68c33d4ee1c7b16942b8b700439a18d379b0936
+Nonce.5 = ae53efb604322162b2c24582
+PersonalisationString.5 = 7bf747bc9533a7bdc4a19a88974eab376f2c669baabb00b6
+AdditionalInputA.5 = 2810c3a2fb57ca9115ce8fc55d7dfb43df45be4840d590ad
+EntropyPredictionResistanceA.5 = 52c110ccf89f5ec81d70d7ffd75dfd43fa08a2f6d6e123a3
+AdditionalInputB.5 = d745d7d83f2daf326355e9a086d3338887dfe79d075f3469
+EntropyPredictionResistanceB.5 = 7698857ccb03e76d0757f49dabc611d93f45e5154fd2fd1f
+Output.5 = 439161d28a0744d5a920ce40760afd6f3249c171dea56de63b6e6a51197798a75b849a03429e6e3863646602c40d74791b2912a91db7658d60c1b1a7fd54894dc7aa873bc3ec84963848e91958bf54d62d0ad2230195cf6df390c25a3a172cd2380d4fd6d92c6c30c2eeeab15c90f31b
+Entropy.6 = 508a5c0970fcbcc9ee9e493807d5ddad0c1ae13fdd594728
+Nonce.6 = 65fe291cd026f8b2460f8fd6
+PersonalisationString.6 = 53e0043609574a32a49aa8e484fb71fd6f84db61f535bf03
+AdditionalInputA.6 = d42d4c2fe6196765805b79f1f9ac85604d67f6730c7b5ae8
+EntropyPredictionResistanceA.6 = f34be4c095373b337af5bb9b08e7f29c179597b06cb1b60b
+AdditionalInputB.6 = 4ee6c80592db53f73522ec777961a746cd4d059f59465e40
+EntropyPredictionResistanceB.6 = 07988abce144c1ea76318144e74f66cadd59afd2ecd20cee
+Output.6 = 0cc5861765618be6da014d480c1e655f329f652e22e491819767403572b7fbf3f7ccabfb39dada1c712a7dd5d1d3acbd6d64fdcfbe769c0ef70ea0cdb67fd4b2150eed4cbaa321137d5d117aa199f79c433df92b3fe909e7f85a8ef667829361f36a2552a6443e8540243ed79a207ced
+Entropy.7 = 928e36cad6abb97e47b1a6bc5cefbf4279e57b0a7ad0b0ce
+Nonce.7 = 51453802d6566f9e0082fd9d
+PersonalisationString.7 = e9f1976368f5fc829947a19c14e71c4a9473d6dc4be212d3
+AdditionalInputA.7 = 18034d2503134f7cce8de69963981ee29ee720677e079c26
+EntropyPredictionResistanceA.7 = 6934c00710849d6ab4f75fd41fcea5cd1767a705ca3a2faf
+AdditionalInputB.7 = d6dce7ff0af985761a2d2b4f7e26e57397727bbfab9eb136
+EntropyPredictionResistanceB.7 = b144d7a36f2f68c455dc55362c0b1af67341a220473c5b7a
+Output.7 = db51c24abd2b58791606356be1347e7f567c8a3532656b9c3c7d865affe2a287461310e8b35f5caa19e9889e7ca0f3dc3aae0c9558f64d8ede3609ca911cc0c9b02852a3556eeb2c6164b18877ab7d37ea64caa8aa9c44aa8a872843d3b0ca1659a900f416a6f1314580664fb96741b7
+Entropy.8 = 92926d8642d5dcf60a7a906d4d3529c4490212dce336910e
+Nonce.8 = bc22fb637600628be29be167
+PersonalisationString.8 = a1dda586d2150312422616dbccad006a73c9758b83823534
+AdditionalInputA.8 = 9ff07a42c08c5cc0fac83d9a2f0afda378811c1db542b9fa
+EntropyPredictionResistanceA.8 = f48d531eb0653d4db547f6c8cfb8340265637f30505209b5
+AdditionalInputB.8 = 0047e4bd29835c86d92b7c1c569275e48df8742ff5c2382f
+EntropyPredictionResistanceB.8 = c1dec61537b8dc5688e86600859169ae8d2cdc9b2cd307c5
+Output.8 = cae6f06a08d2ac374525979c05be1ef03815493442aeda801d861c76e305e547b5ad466ddd33eef85e2adc1da451b8577ab0edd673d4fa70613135fe6162272101a9ff5d1ca7cfe423c1e3b83655301a53fd6764510ae8fd5c93ba19432c19f7e6e3b025c04eed178395ff81b66e39bd
+Entropy.9 = fc50c044081cf894f0848fcd4c2e250fa76c8723e8b91062
+Nonce.9 = 6439342ddb30295ee2b3a8e9
+PersonalisationString.9 = 2ac752f8ac0f375e089b14f499e8bc723ebf0972b9c8a255
+AdditionalInputA.9 = 28da8066260834e001ba2e82696d8c70887f69734b515c05
+EntropyPredictionResistanceA.9 = e5c87e9329037c538bc3d239d0e2ad721aa27210aba4b855
+AdditionalInputB.9 = 6ee9f23ec6e04f810ada7a97ebbec59972353876e580dc6e
+EntropyPredictionResistanceB.9 = f6e9e264fb21222a353cd524c798df6aa77084ae546c71ea
+Output.9 = 6d7de9a0072a9ff748d77cdf00194e825bb7464fac93c1261d0948d0efc73e30db926aaca0767dd11841e60cdeda360f25cacef02b20783cd3d186a6e6e22c4ce08a6344f3c2881b989b943d861ec207531633827a3172f8dcb24f2a3534de0d1fadad18834796bc4a403ccdced72734
+Entropy.10 = d177e8bd987f64cffe554ec217ce58b85cfcf0ff3acccc3d
+Nonce.10 = bf36acc97e7628744e751483
+PersonalisationString.10 = e6fd2a5024a2ab682ee52b85c91ea6799faa97c6417175b8
+AdditionalInputA.10 = a7e11569287589a694548d1d8e6ff9280bc40c0d62bed934
+EntropyPredictionResistanceA.10 = a85fa4e88cfd583532f82197bfeee5d53fe817f0f2ca573f
+AdditionalInputB.10 = 72cd9fb1dc0c2c8f5fb9ec6860a92a20b3b2fbc628eb1c4c
+EntropyPredictionResistanceB.10 = 844756b185172f4eb97ecaa41f2c82482767c7477fad1096
+Output.10 = 7b8b451ab08b8813bd8bc3744ed4e60f0cc1aa12488bdaa669327b751850cb5fa5778aa82b1af9bd3a3fda1ee1449d945c9abe874110b6b6b36d5a48586ca879d698d26aef7553a6457dba347669027eb4f413860a381a58fb990bf6b5bddddc736aaeb56530c03d2ecc475de3379b59
+Entropy.11 = 689e20126af7dd2341fbacd37e2e285b10cdd07a4d352cc1
+Nonce.11 = 63c15e83681fbebed9f891cf
+PersonalisationString.11 = 68236fc6acb0616784c54d472762c94ed9a2294a5a9a7fcb
+AdditionalInputA.11 = c1d4fe79cafb45d467e74ab79ae813110fef8a79bb0103ee
+EntropyPredictionResistanceA.11 = 3849628fcbee7877c77002dd22779275d87accf016cf436c
+AdditionalInputB.11 = 17774db240f97aedeafa338be8c92a363476add3a8cbcd1d
+EntropyPredictionResistanceB.11 = 74e334fee7eb5124f21543c467fb1d22e831c7e3760f71c7
+Output.11 = f50d7fbb643bbc0bd622513272a4116a0387705439c0c92e5a5f76ffb690eab0b1653b15cc60242dbd8ff6edb0897dfd49c8e5c8130e4286a016c04f5d8ea12ad1e7d37ed2dedfc8166738af495df8826e7e518d89c6bc249e3493b8dda12e59a0435260df6a2fede4136120bbb8bbc1
+Entropy.12 = c91825a952b58d06e2670f4ab1e013859ac875420aa21997
+Nonce.12 = 55384f74c43b887c8192bf87
+PersonalisationString.12 = cc08c90dbf3ccee0823fc7399ac05ec712037f448bbefa76
+AdditionalInputA.12 = 550c6e667beb30dd8fa2366478b20e307447d5f0d53e000d
+EntropyPredictionResistanceA.12 = e605341676bda41b7236c95bee583545e90944a2ca96df0a
+AdditionalInputB.12 = cd72e32a439ea7b6b4389614a0bb72825b360d5b2a15c1d6
+EntropyPredictionResistanceB.12 = 7527243b11f48ca37dcdc98b2051ee76234a4b2073ae1483
+Output.12 = 7f9dd9e75765ed2c745158bfda0e63e774ee77b7a9d0d44307ec9fb2a344ffec04ff12f5f87abcca4912d5703d57a70f62e4c97e50b178726b071c60e6f4a6963dfeae817557efdc0dad59a17713736d785dddac545a2f170343def17c48d79bee0886e8bfe7c633828d3ad7af6f666a
+Entropy.13 = dcf9007982e6221c66d63b8e824abf329a6c57afab01828e
+Nonce.13 = 16d2f2ae5555ec6290669f6a
+PersonalisationString.13 = cbb9b970a9a69ca3e98bee28483c751a4319b12f1f2e80ca
+AdditionalInputA.13 = 4325a6dc99a636dbe464c35525097ff51a00cada882f0539
+EntropyPredictionResistanceA.13 = d895a4e8b62f32fa5f2a25638bb22bbdf706dae497568d45
+AdditionalInputB.13 = 4220502b9eb1134b31e9d897a902fa1f730b26aa88b56245
+EntropyPredictionResistanceB.13 = 64f292befcfacd3dcf475dd62687a8e9852f0295456680e9
+Output.13 = f0215b4d925dcdd24c1ce0b26093d8fa8d448ec3be8f6b9bd80d2e7d7253e23c07fca33992638d836416fa20a046a445c2be1c517bf00607a6b436a5e055fc342b1e0f2097b1d438f52acfffd0514c962174d05faa2656d37380ec070d8436b2962e91163e925adc16add5f739747494
+Entropy.14 = f86f1f1ee1c4966e7695c768d411656d4fd45c7aa019ed20
+Nonce.14 = 352bd101ef4d72cfb3303ace
+PersonalisationString.14 = c5b0c5a6d43cf3adbc02056d6b59cd16ce2da996526e8ff8
+AdditionalInputA.14 = 43982fee624494cde18995383d7f6f9c6453bb34fc315e67
+EntropyPredictionResistanceA.14 = 35bbe0b775627b8da98dfc0cd8ebd61c9293f51bb1c1fc96
+AdditionalInputB.14 = 528bc69e8fc2c45ad8006dc7a865ca73c31a679adbcb0656
+EntropyPredictionResistanceB.14 = 97bbf5c91c830c627a1dfb629a0f40943655d70ef97fe922
+Output.14 = d9cafae3bfbcfe622c82f137700f959f79ea11d07631abc26beb2d846e375a2b21165db0c568e1ae54d03c26f0ecdfa2564bf5c3c6c902abba3b2ff994ce191caba7e89b129c303e5169f4ec2e415a90523efc792e6aa2caf5ef583d286285f7d4900d79fce6afdd184d9993f85cd6d6
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = d240e42e321ee26145b7f952c1af3a41bf366c3baca0ca92
+Nonce.0 = 24380eb5546970faac6e1aec
+EntropyPredictionResistanceA.0 = fd295c801539c36afa7aa5e60de3b833f67d1019c47aa730
+EntropyPredictionResistanceB.0 = 62ba81252f88d4748fe1da48af1cb87535b9a560ea87ccde
+Output.0 = 7a1088c6cab1b1090a2e639792570fdaed49179ed10a029b52379b121fb9568a3110953a62904920226ae24c71371f5b42b5ed7dd0377821595a2b544cc7f020d0d4539061c733b234077dfb619b9ae2e2d96143b38ccd62658580fa6f655bb3412520207f2264cc199dbfa078326d90
+Entropy.1 = fee4d48689c18b2a1220497aa919856928a29627da67230a
+Nonce.1 = 70fdcc79d2cdabcbbb8adbcb
+EntropyPredictionResistanceA.1 = 6134d759519c2d4e35d63368c6b88be6cce6aed2d040aea9
+EntropyPredictionResistanceB.1 = 24f476562754a44b29fc5a9bab60cddd468d12e2818ab88a
+Output.1 = 0e1ebd904a943f2987260754996c13064f1e752d3f86dcebf7deba9a7f3c979ea294881ad79b3fae2d45d6157876a4cd91785fe60f114d29706fc5dfa12af9c788675fcc2df1ab704b055c3ebf6621594f38f7f2b3a52d6b09180ffe1d280ff0094360192cf2e1f7cc3d8180111f40bf
+Entropy.2 = 4ca6ece5d1a413a48d1500db3f048da7c1ef8013dfac3f2a
+Nonce.2 = 3b17aecdad176fe6f9cf7112
+EntropyPredictionResistanceA.2 = 831fd9a099698f262167c1efde98ca2cba10c4e9d6ec4508
+EntropyPredictionResistanceB.2 = 9daf27af6ecadf0932c23be5a8d0b19cbb51a682fc78e9eb
+Output.2 = 16d6eee7bc85efadc2b559e4d03dcd79ab013f59076b6c944a0b033ba9c6a45ff6ba623deff06f296c723bd424ac8ae1bebc22f65d03f3152289b6b2e899f2d27dd1b27866868e9a9e00705a341dfa39c9c5ae69cbd11395023d4f866d335d5d3efc03cb483d1757854c50564f0ac2ba
+Entropy.3 = f9f66180d09db8b65e185d50997c6d8635603ec9140e1e93
+Nonce.3 = 47869ef8acafdb19af807cb7
+EntropyPredictionResistanceA.3 = e4d023a7249779d365e499d15b79306b271357de38f2d992
+EntropyPredictionResistanceB.3 = 713c1ffd9917865ad6052dcc1e02696ac951350e24cca09b
+Output.3 = 051d4a97b45bd0172177bdba419687f74e86f6211158724a75dc9d8ab7e8c3a025184cb17c6b490e7add81c4497135231876b41ab3ad00eb82f066370c041f357bc449f20121eaf410a739bee81352ec902da7a668224bb72a1452accf53bd1b1ebbccd596df963a8c3ec50d5df4e653
+Entropy.4 = 4d66338d17057a3980c21d599caaae89a8e8ab69316b21e6
+Nonce.4 = ffc8dc24f4238099b466f971
+EntropyPredictionResistanceA.4 = 18e36366cb05bcef411d2d06359e98eab5de632dc53f54ee
+EntropyPredictionResistanceB.4 = 02e680f87d75d33d8a155e49829daea80c43b7517cc5151e
+Output.4 = 32fed1f7dcfe2b4ee7e9279f285b70da1a8eec0b46108dcf05a12dde70b6f9cbce45cb65c698b3391f81735cb010f4dd129437677672e14bfe5e8f2036a95f31a995bc22ad9240c48952b25380be8ab9c3dc5094265d4b6275b109b1f1972e1a3022b9f2e65dfa6a534f6d45cc1f1855
+Entropy.5 = 1683264c7998b228ba20ab9038c04988abf7afebc667487c
+Nonce.5 = e9a8f6a0f01855c1c06ec701
+EntropyPredictionResistanceA.5 = e7a84dd6c660c82b0850470e48db2a110ef86b208c85ba54
+EntropyPredictionResistanceB.5 = 6d769c95264c8040b8156d9ea0e6b27cabf06b8547b8b9b3
+Output.5 = 82b5f5f01657a3a593504e3a09717b7e24276206409ed35e5e2c341b77c45eb7afe513f64de43b5fb83d96cc3fcf2be0f81a468aafff7cfa6ee003ff25fe5d40867424dd8e6b44cd0dae87bac76845d89c56061454942509c17876e8c117f7dd018858edfa957c1fd6cc277fec6b3324
+Entropy.6 = 5f5dcf2ad5491e020a0e54a055b14201aedaa70d9762eccd
+Nonce.6 = 9b55c56c747d7be6b6edaa3b
+EntropyPredictionResistanceA.6 = 53640552a907a245adcdc05ff64c0b590129d9d1421e2aaf
+EntropyPredictionResistanceB.6 = cb17b69afa8a0d3ee87b560202e89fc704dbabf37b323948
+Output.6 = 02a48b7865318c3d56e15d6b2faa03ed4c111f103ee2daa96c3db1620da095ab81d274a75906cf9d2e0c49c03a97b5f892e543a625a49b0005c1d5ed8e1f3011821a7e7df6c04cf67c9193b3ce905f3eb36ef3e4a2570cb63a5412ccd0057a023009e6c859f30e19b218b62e14eaf78a
+Entropy.7 = 31782c60bb27745fc2a7435f8cf3052b53d08f9c10e2a76f
+Nonce.7 = 9c8e700ba77fff1295da042a
+EntropyPredictionResistanceA.7 = 4f9721ec6a889f705b4a9eeeacd86176fdb494a379dcd33c
+EntropyPredictionResistanceB.7 = 870495d33211964521adad907f12a0444e8b15be3109e946
+Output.7 = 9dbd9f9ea2103341dcb4dd243b1a63a6df2b05358fa1ac79cddc48d58c69c8b2fc2bf30f9c1cde52025ef49348514e3224a64909934d11da8dff14dc13dfb7d4df1ecd6ab70be6aeefcda7654433e3ed3e12fbb40f5e2f83db201c9cec36d942a2aa9ded7c641330ae5beed2e93cb47b
+Entropy.8 = b01a78b68004f755c0a01a4db44a5aeaec02ac2fb0ba2e2c
+Nonce.8 = 1af520bb8b2ab7327d12bc84
+EntropyPredictionResistanceA.8 = 38719531aa288ae39949e53d30902076fdcc412bd90064a4
+EntropyPredictionResistanceB.8 = f7127802a88fb2b36f8e6fd90b424aaf8b95908c2d2c8a0c
+Output.8 = a14316298f48936f932d1a0581c0f77bdd42ae4917020accb06e1b6c9c100f87ba9c6861f729034268658e4068ea2c22c9806d8f54e079428578715e4c58c62a9405136360076b59ea031b1cc9aaeaaa46a83d3422ab4b5a84ea9cc610e10fe01c0f89e80f0457b3db94838e0a7d2009
+Entropy.9 = ce2fe40d791510ab88b89bc0f1821a95b8a976b7472677fd
+Nonce.9 = 48e9927ea22e5c104aa87d88
+EntropyPredictionResistanceA.9 = a2883aef17a8dfb329c51f02c3a94eeb3f3312241248b180
+EntropyPredictionResistanceB.9 = 4ebabfce357d45dd4aca8c885780ddf59e5e1e0cb7bd8064
+Output.9 = cba918eae04ac31144570ced67b11bc51417cedab3dff1b0c8926d570e51cda28001c3c5cd0abdbadac40d623444f60bc3ca6ed75b48ab1ca22a3758c37410eb3ba1625bb9867666c7be114a388e7652a4b1c506910728f27d0c6fe249c6b82e36f269e33a335717d3db18f44fe30680
+Entropy.10 = 5b0bb63567409ef7925b296ded174e8794b05cab2e72b44b
+Nonce.10 = 9a66ac41eb5e0238cfdfc6b0
+EntropyPredictionResistanceA.10 = ee7bcf52a078cb21dd1c9a5dfbb8fe9d55ffd6b4f32a7ada
+EntropyPredictionResistanceB.10 = 6d7c47e701bcd825bb39452943d82c2e184adb04c3382ffd
+Output.10 = 9a8c2de8f8e000f15d6b87c1710416cd6f1c176c53d5603d81cf0ca2b134c7d49d6d7f95c3d644ad75d0c9bd15788c26a67de13765e193c35f1fc77aab90df30b35c65882b837a031b222b4ddc80626eba718c7f2f352f3633a749790cc51181f5e9222ea2acc26c24141211e3676034
+Entropy.11 = 0a52442fbd4c01f270d76d72c0cd451d83f3e2e181a8c141
+Nonce.11 = fac81beb54d79466c3ab778d
+EntropyPredictionResistanceA.11 = f49ca7817794d3074f519bfa7bc0b9c935447a9adf8b1057
+EntropyPredictionResistanceB.11 = f84b89d5b14866401517e1b5bd3ad11bcafe9a5aa9a38dd1
+Output.11 = 390989ec6075acf43c0fd05cdbb58dba70cab1903b2be5c0da372b9f9df82f5cbde58c39a309e06fcf7fe2f08999c7e5c0b0931adc32ed342f48dce2829d6b68e315f2310a47fcff6734c15a86ce2bd9e0a0d188560e348e443b58f67deb65a9f63f99af80f480c87c50bf173a6b5035
+Entropy.12 = 150b186866832b286b5f08f2737f1e0cb3a708727afb5673
+Nonce.12 = 76a2efd60bef5cb659067a84
+EntropyPredictionResistanceA.12 = c5d2ebceef57490275ec2956d9d325fce60a7440bd54c259
+EntropyPredictionResistanceB.12 = 7a02c2069cdd8676fba14ae690e0870384725eb508d54c3a
+Output.12 = 36511b085c2dd803b87e2aa281c761567f673e26a205dc5bffaeda8471a8ba96903619df92833cbdf83ac5ef423aebcb563f192650ba171bc3c35de62cfb872b54c66ccf270057b336169e95d8ce09f0ac6bd857ad546ba796a1b44e7025803e5a4ab598cbc5dd3e5388e3d5aa5758cc
+Entropy.13 = febdd0aff2fe2da77508e636c209e77d121216a4d8124c77
+Nonce.13 = e541af1b75959c8d7dd40fcc
+EntropyPredictionResistanceA.13 = cbf35767dfec041785ac4e06b3880da5a4b39317ce594e6a
+EntropyPredictionResistanceB.13 = 179524f2d87377ad8b39e92d408d7f59a5f9e531c39aa604
+Output.13 = 7a5e3171ddebec2932eb2bc3741784d88a96975a4ec61e23737e6f636c12b38945b1876261c0658712b5f8b79308517affcc8bfc0a152aad15d76d68a9a9ee272de90f8ca4854c2221a55b79466b18f3130a46a4378dff49819c584d2980073294a5895623851290428b9e1fd463a088
+Entropy.14 = 1690af3dbb928afbe2a8c40212261ad4210eaaa2e2baecc1
+Nonce.14 = 0d9bc3edff16343aeca62899
+EntropyPredictionResistanceA.14 = 58e89c98a93710a6856da202b373749dcf3f60c16fe06759
+EntropyPredictionResistanceB.14 = bebbc0ee84a187340613ff138c5abc0aab2e86f57f337712
+Output.14 = 13949feb41c811c6894809f16ab5b34be3fe3753416a8fceb0c6de131167d0bf60409b753385307b71e2622a46a42f1561b4793c6f0394fda66115c95dce20753a9caec5aa5263f6581db8195bb7de7e4b13761fd43eff13741849b8556247f08a58c9b180269f213eba0476c7fd3394
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 775756c60454ddb630c431642047c3425874fe6521489226
+Nonce.0 = ebd7b3129e3f4ed8f03820f6
+AdditionalInputA.0 = 970957933d07d034713607a5515cf01bf864c37c5ab66bd8
+EntropyPredictionResistanceA.0 = c3ad6ab4724eaa9229cd10c906840d88d682cf9066092380
+AdditionalInputB.0 = 983e63eb587acb76ad7c158c6d78d78805ff6ee19485d229
+EntropyPredictionResistanceB.0 = 9bd934ef01593c33bca2227d69f9c60ab5701ea74cc7145d
+Output.0 = e9d3fde277dac9558d7d0344850b48214d6e48091a3352341cf5a953d4c0869b6c9a079812ad697626470a1faca812fd212b3f4d2078108677f0949e0c4afd7001fbe9cb7e05670ad0d9ff2acec02145eb6ec3338c3312c4daf6252975cd46e7f02c2387090855203b07d6c46af8c88e
+Entropy.1 = cb3e1e317b86df342be6855baea68de721e6abda452ab5bb
+Nonce.1 = d9c85a1304f74834365d23a2
+AdditionalInputA.1 = 513987f0d30b1a3d598f77a95e9117e24d84532bfb29436d
+EntropyPredictionResistanceA.1 = 1dbcece419320e2df08c2d20848fb029cddea913dcff7702
+AdditionalInputB.1 = 7344870eae725293a829ff0690dfde8109aa1bdded852002
+EntropyPredictionResistanceB.1 = fba0d5bfb6457fa863d6b8764f8c5158180cf84724a717a5
+Output.1 = a5b71c387cc8c199dc82ea0e4a9037d8fb50ad5549938fa90dcb8f34da9977cfc5d86eb979b4869bd8ea7ecb26ff3ad97a8571761a28fbd834e2384be6191b08126c88a60cef4231524f1580d29f6c6bf09ecc47f725a547c6bc9143417cd404cd631d6ea25947619cfcd374c640b216
+Entropy.2 = 65cd45904d99aa2ab59f26a2d0f63e60014e2590b1b01111
+Nonce.2 = c1aac6c9e6d51220c30c9a05
+AdditionalInputA.2 = 3dde6571b9596b5011888ae2a6c4a8994c0add8b6292e3e9
+EntropyPredictionResistanceA.2 = 6424588b0472f655a1fb71a9655df1f750aaa7818b94ea33
+AdditionalInputB.2 = 0ba55889057921d4ab78f5ffcfe6c0b86c1b58415890c4fa
+EntropyPredictionResistanceB.2 = 056b0c7c2472aab8d74b65a8d59cb0df97a921f52cb6b5dd
+Output.2 = 70be13de1b571a4818e6ab7f0d3df476c06151fa1c40f941b318501b646f96a591b14373a5ffc870483dc6b4463179720956e8add88a216e1d1cb0b27d0d2b165c918c484f76360845f00e4bb1b9ac36c1e0d78fbaecb5efbfe17af874d9b79851b883e0a23aa6c5340219d0575bc1f3
+Entropy.3 = 6fa8a6221dc25228e9805877a8c882dccc772d95a94bbeb3
+Nonce.3 = c000bce6834e6076e6211bdf
+AdditionalInputA.3 = 93486ba6abc2abe6f3bbfd6c1ef2330995a75a8dd838dc34
+EntropyPredictionResistanceA.3 = 4124fa1195bb06b47a2aeef4e2377e765fddd45756620256
+AdditionalInputB.3 = e90e0e61234d7ea98909fc6c46cf8f37564472910d7cdd4d
+EntropyPredictionResistanceB.3 = 5ed70e75bca12e9d4814d3124a67362f61c354b3624a114b
+Output.3 = dfd53f50d9b524dd4add70b885aaa88ba6a42da0643d7400a3ba9a5ed00c69159b92f4195ecf3632da5eb122b1470e5c5b90737015d487d5340119da803241583bfe28fa72f614fe16ce1eafa06f2a74b0715a0d6896dedca8bb9f2695e73f199e45752a98513142115a640caa152fba
+Entropy.4 = b64a0a8860a6e580e741bd382a248a7400ea2a987226e945
+Nonce.4 = 9a106120fc3bf33c23803850
+AdditionalInputA.4 = 0e1edc263cfce07a1e5b3f83fbd7b1bfbe494633284a41b9
+EntropyPredictionResistanceA.4 = 13d19735ba8790fb5edff2097e6bab6cc14ac219b72e6d2b
+AdditionalInputB.4 = f70ee2559b6d939ebcf8d2c2b54d1de108e1dfe55e1a620b
+EntropyPredictionResistanceB.4 = b9c18c1de9083e74633d6fd17897f950b52d0fb5a112f164
+Output.4 = 76ee24018c1a9638792157e3ff1ec0a40c118559e2aac5562ba2dedc508e330219ec7a25a9d0ea55301d20234740c38b8aa97e5ad754a9cd55e5ef067f8b4e74a9f683e2477c5a733b3bdc38afd1c576556dc41f5889ac0f90bddd23a7a9f7c6ab8410eaf2442acfc524dae3843355bb
+Entropy.5 = 089b0e900ed180ff2a2df26065c8a0b4f5b49942035e1e2a
+Nonce.5 = c3b226b2ff3a563ef7010abb
+AdditionalInputA.5 = cba3b839bf836f710a0d3c468c55b2e151ef0bfba76a2496
+EntropyPredictionResistanceA.5 = e1466a8367d7ffbdadebb08379d42378c7c504d43b8ac8f9
+AdditionalInputB.5 = ad5a8aed657bbcbe6c9bb41f1184e7b68ef1fbdc3a12108b
+EntropyPredictionResistanceB.5 = 6bf4662cd4fdb242a33c08e16d0874a0a7c1043d28a4c348
+Output.5 = 9df5091a420f578bfecaf685341435b6f18c538f475c16423351826fa88568fdc4e007a1a4ebf5b5124b2a1845be26acad2e9947efd4c1d2960986a33eee94d703446ddcaa9ad0fadbfa601c0ea63799531f4d1567ddb0aecf99b7639215f6a3340a4f1703c15b19ed2365599132b4ba
+Entropy.6 = 5ae7df04292420738dc5a4b6e98e41086860ff98a539104f
+Nonce.6 = e795d22f2b250801a3e0467d
+AdditionalInputA.6 = 80391b14283b6a0ca8f5a65f7adf0413a7821c966a0d2503
+EntropyPredictionResistanceA.6 = d3c0627ea2bc16862e7d9dc588f2df87b234bdb1910ae0df
+AdditionalInputB.6 = 033c9a345b4d15e8487d1f234da06e989366966cce9e8e96
+EntropyPredictionResistanceB.6 = cead3bec49c3e1f81c11beb31353d8e791f9ddcb25747453
+Output.6 = 1423b44dcfe3c2160cde7c8cc5984cc06bfcdf4dde0081fb92820a442a935e54a6a8da971410625225eebb17720615bcca0e7dcf7260dba0decf2b2dcba437208b642bf1ca93dbccd36a2f1bf13fa2c738c992aabd546005f1db73f10536f57b4126a75951051f80b76a6cbd29a41fd6
+Entropy.7 = f8112a7f6542e4e53886e6f969156d0c5e240f59d51b2e17
+Nonce.7 = 38c86e0dfb6f09ef81c4ca33
+AdditionalInputA.7 = 438cb94399afc81c2ef4ddd363effe4dc2026fd301313d87
+EntropyPredictionResistanceA.7 = 6f71c87cd4f1fde84d896ef504c962d6038223c704fe4783
+AdditionalInputB.7 = c32d9c9ac16ebc6a41708d2dd722b404fea97d318fbffb92
+EntropyPredictionResistanceB.7 = cb437361411d9d6704949922b3ddc99fcf0cb20c45662e6e
+Output.7 = 04dcee8a215c28d3536eb6ba150f4841ef4080c41a51fb74c333ade0771b184cdc3ffd199466bb46cdbf7489aa7dc60e3c7da8789354b4f2b8312b4f02514613c836786e509cd032374b18d3c73bacc8b17d0ff4f6339e5515b6a46e235538b13b4430163b13949495e31b8bfbd1bb46
+Entropy.8 = e9a2182d315839d2170852623d5e52aba26c4f09a8ce76f1
+Nonce.8 = 81cd18edf042522266823ef1
+AdditionalInputA.8 = cf395131e70d790226b88679381361bcda8ef781c086ace9
+EntropyPredictionResistanceA.8 = c8b888772f4e137cd6c69325243af6d4d686db5a7e24998f
+AdditionalInputB.8 = b8c0cbdcca35c97ec773c26fb47f7cf1ac6c451a56e9a211
+EntropyPredictionResistanceB.8 = 054b5d952eb8fbd111ccd10f737e1436d9c953e3f55bc95e
+Output.8 = ab3bd61dc3675689074cf65d736dace98627c498179533c375bdf5e6b9bd98b3766463f5958290dca559dd4883c3c221ce46cc80c0efaeef2d28e393a063c3e00396dee0db68ca8f8f957de26243e7643b39c7af240af7b665529729722d12425c99d7b80548248d620c8f6d8f900ba0
+Entropy.9 = 39c69e68a7e12e750ab87610c450314e466d7f28ba2cdaa8
+Nonce.9 = 2a0e80f048130bc4aac7451d
+AdditionalInputA.9 = e875a664ea2ed002168a557741067ab3158eb1ae8c57c831
+EntropyPredictionResistanceA.9 = d74f7fa2ddd4d7992384a81c649f5981d33c315596ae39d3
+AdditionalInputB.9 = 3c86f51b193914c9bd7f1f46239a0de7eb33c12712d39605
+EntropyPredictionResistanceB.9 = 652b300c9a386b305284c217d2d9836676ae55fbb16366c8
+Output.9 = d2ae6d6d71d5b81783535403587c93d58e29c403543731e686d826a423743658c73a3c03c04dbc0a94bfb3fff69e952ed9783bcae94b2d0601705f885aea2e96cb4c35d2f81c1838a1d43bbf842fbe3e297cf35ecdcd7ffdcad71dec26d7156625d3788b6fae4d7b3069aeb71e29a3b0
+Entropy.10 = 8e30bfdc13b3cc403ac46ad78d9cab593d5150cf24382dd8
+Nonce.10 = fbc89dc81e43fec9733e9ee9
+AdditionalInputA.10 = 25947c20bbeb58df0afe5396388399859baec4329f3b97c7
+EntropyPredictionResistanceA.10 = b840c65deee6215d5a5425635fff85609330927659b4fd9f
+AdditionalInputB.10 = 2791700570fb20577ab5779acb21bb53aac72e770cab9deb
+EntropyPredictionResistanceB.10 = 1a1baaf6dcf8f0656d1288d99f974c83892043e5963b9763
+Output.10 = 84ee60e3dfde64a579c2c7ffc05823d9873e0e4919f6c257c7876c2d72b4e428defbe23058b90b0c60b04e217fc17d804d1830bb5f524eb855a7fcf410745bce10fc0a1b3e5b33834776622bb789be1b4cee829ffdec88932481da8fb60324d295ed0cd6421d2861a94db1aa1847f133
+Entropy.11 = 6905529413c13457573c7d2ed6234f98f5c3eecbdf9e17c5
+Nonce.11 = d899332f9457c1e283c4cbcb
+AdditionalInputA.11 = 8f0c1845d913866bb99bc209299cfb2475b0411e29e912cb
+EntropyPredictionResistanceA.11 = 59adeaf20099f434d740394a59fdbe2493aaeeb97837213d
+AdditionalInputB.11 = bd09abaabb95b5be5aceb301b0d95a8d8af783632dddba07
+EntropyPredictionResistanceB.11 = a73a5b0dda16b321e28170026ca6d828af5687e1a8067770
+Output.11 = 9a16ac5b0f51002360ffb75c15cc0035a648ea71df01d1749703f0fbd8b91c901281967958354d28928bc63eb0a628ec652cb9cc27154349fadb301a502d9024f3a9858e7a732b70b5eab0a8e76b216fc2a6037a5912ab02d487cd26dc56960c09f91c93e44f6ec3afd5662ae6df41c1
+Entropy.12 = 0fe6f54ebcc1b36729dde41547b3f3b185e290089059c1b9
+Nonce.12 = e1b7e83788a5331f2f4c4adc
+AdditionalInputA.12 = ab43dc5ed30c370acd3e574ec2ff08964cd799d4c0554168
+EntropyPredictionResistanceA.12 = 315eb642f1180dc108556b0be6479a52905389f4fba5e087
+AdditionalInputB.12 = 6011bdce97c0ef0243bd1139a011273a62a36e0495365fe7
+EntropyPredictionResistanceB.12 = 3e0170d0d18df2caa29198d05d8cc133feba22bffb29b5e5
+Output.12 = a9ad601303ae46e883843fb29f279e3b5b7428fc6781a86813f3919058eb60f35ed3c962e645656fd3dc704a8e6f7aeec69d5cad5245cefd46f58149aa79217655027b38569092fbcbb3fe3763fc1142a7d54da083f5b66c6f9982bf74ee350eae46d9fb470f6f995cdf7045d9d77a0a
+Entropy.13 = dbe0800b21749a0b2ea8dc3a11b39ea5c5a35ba4dd3976c7
+Nonce.13 = 96501f8df105ec8ebb4eea09
+AdditionalInputA.13 = b6d7d2aeb8342d735ec10ded0d2a24322b91bf0fd8a6c4a4
+EntropyPredictionResistanceA.13 = 033345fddc4277b33c3ba425c7bdd196427fbe547f952b1e
+AdditionalInputB.13 = 7427e0624b074a35644e83581222900b7f3eb27bbc9e056e
+EntropyPredictionResistanceB.13 = c5ca4430e440cdc1c1428e0ff6249c5c443e9553651eb402
+Output.13 = 7d71e97d0f41b171bc584a3f187f27b8e55756d3f4977895784e17d3f9cf4b7a2340e64e3676fc8b1c62737d4d65a2b349169e4debc18e64a870c0b60d4a7b4d88a07b1f5ba384b064da2ab1abb827887cedeaa178ff9dca27fd71b647794c136d6f990f7392c6336d472f9422288b5d
+Entropy.14 = 2b0b4cec63b8e10da3f2e6311344c4f2735bafbae9e28c4d
+Nonce.14 = 8e94e3b3238cd2c9502c897d
+AdditionalInputA.14 = db269ac3e49bfc515d27702f26731a08300e70f774d37554
+EntropyPredictionResistanceA.14 = 77755edb42021cbba7c2347011cc9320689dfb8c6a3fddc0
+AdditionalInputB.14 = 15f279e7677894af10821b9cc0ddc9238b318dc9020b05e5
+EntropyPredictionResistanceB.14 = 878d41b7c5951930acb26a23c06501b88d1474796e536225
+Output.14 = 8f96cd7a4e6363be72a9b45bdf8253fb47d0b50ddb3c5dfc8825f2c44366106b1094cc65d60d86542c25830a3d0f247326fbb941053df81a1d0789318563b870a81f9e554d8349b669f528d6889247d23896186c620b93b239c1d18861cfde3c123c80b4e9d5e338bd83bc2e97135ee2
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = b4ca67867adddb9496045ddfd597301cd05942b9ea00fa49
+Nonce.0 = 25a87bbdd575dd65def2f95c
+PersonalisationString.0 = d13c651dcd284800f1c06845824e5213b9cd5812cc0ef0be
+EntropyPredictionResistanceA.0 = d51d3a03b2c4fdc5278d8ba0be9c17003f415eb487746552
+EntropyPredictionResistanceB.0 = f48bc69163a49dc72fc4e95babc42db04b5766081205d3f4
+Output.0 = a577332b432530e82815d9a1d0d1575408b9b8fe9eb8a4d52df98800cdcc79fd1924430a6e8c00f3a1be6e7d45d9297a2ac4505474220434f36530eb7a3421e43ab1c779d2c99521e80a817f8f207785f1168f4101abdae78afef485d161d480fd57ec8e6836ccddf4e0394e995e1ccc
+Entropy.1 = a9992652f27c497e4c0d800cb6ab791865fce80ce468a0c5
+Nonce.1 = eb4020b114d02b516481fc4e
+PersonalisationString.1 = 440978772c312ea005511c8f519370966a07e4eaeb920d8f
+EntropyPredictionResistanceA.1 = 0245c6c16c69817fb92412fdb2fa84ce3c5628b097a6a0da
+EntropyPredictionResistanceB.1 = bfedbc203a470f5aaec40f2470405bb706bebbd174097f45
+Output.1 = 141743faaeed383bac185ce0b9b4f6bd800ab3bc5cd3117a355d32bfc34921f522b1d07386041ac9c35ccef210d2cf192da3cbd03493fbfe260656e8c97e64dbd68a14dce2b9ea2a3fb52843ea2d97b8137930d586e9af568a51ca263561a09198faa0702229bc8f0b812335aa758d67
+Entropy.2 = 2c51bf5971a160e17b3806fff1d4218ec1bd40da14f72ab9
+Nonce.2 = cd7c7ed0e36ec6856f2ec2c5
+PersonalisationString.2 = 445675ee2b03e0fcdf10bb5526abe96a88ab42cea568119a
+EntropyPredictionResistanceA.2 = 97cfbcdeebffca45bb17c1a0e00d57dc407deb63e22bee3a
+EntropyPredictionResistanceB.2 = 57784516182f75209594ddad71999fe6f9fe9f19c1b22e7d
+Output.2 = 293dfb315a3969dc2bb84611e29a39ec51526cf161384ee82ba6526c9d33f031ad09b0d251f17a856bbe6633edc39f669a39534bb415efd3a29da00d2fe43efc86239c4e58ee41cd7602e0e33e08757f52ea68a010c581f4e6e7ada708fa9f2e475960608346e6bc0936aab8dd2c7829
+Entropy.3 = 1aa21efeea73fa33f3dcbbb091f6c7a648e9e65387566a4a
+Nonce.3 = e31851bc5b6c1da13b339a23
+PersonalisationString.3 = babad7b729be6f53fece15f4315c382cfe6e3a79dd6a5dc9
+EntropyPredictionResistanceA.3 = ef46cf126dbbcadf9fee6671227f752c9e4e2bdb1a21eb30
+EntropyPredictionResistanceB.3 = 92525c331967a59e17c195b25359058f533e8646d40ffffd
+Output.3 = 849e5b6aeb7e4da40db83df193ce666e08b47ec064ae6ba8017cb8bdd12da4db8ef8da2c101f3eb02993c8a889510484365eb56c033abf1209dcf1310724e91020514d2889596c77b0310b2a38d81d38ce4019ff5738389cdfbbc76400f3990956ea50bbed0ac9b1ea419cdd77a9b48d
+Entropy.4 = a122c57db855e8ded8769f974d5c74a0997c281c796b8621
+Nonce.4 = 92d140341f241c10400214c4
+PersonalisationString.4 = 307de77828e1c6d532f4af00891530fc27aa69dda97926be
+EntropyPredictionResistanceA.4 = dabe3045543eae196974afff0c2c8285c11b6cc51dbacb20
+EntropyPredictionResistanceB.4 = ecd606b165916157b15b115ce3b8d0fb2bf163bc613745aa
+Output.4 = 8ac67d18f785825fefae71b7e589fd0823b39716748373c5572c69b81ace39b76818db49d8a03dc0ae86db5895bbbf43e7ff96e7da145e33de6cf8b4abc3d2d7ef6ce048dc1739a57308c96bb9cf5464b940286d5eec79ce59d96de44c5a654c5ebe778cab4a4fb9385d023cf79ab0dd
+Entropy.5 = 245494f0d0adf78a63c0d9c41cc40f59228bf8bcad42bcb3
+Nonce.5 = f8c8cb27378b46da4cf05589
+PersonalisationString.5 = 552d0daabe961c30bba47ad8249872a4f2b728525a09268a
+EntropyPredictionResistanceA.5 = b8bab30b11d2b54257918c72c65557cd20e779a08390d7fe
+EntropyPredictionResistanceB.5 = 3d9b088824042e81cf762d33a618f1828fb7ca19a1336869
+Output.5 = 59e0f36c98d565f399d2dd18c83a67b02c617d371f595d511ffea4e47f2301f9b4a785bf6930ab34098ff347925c125b536ead9afbe48ca7fc11a060bc454175042fcd2a0643b98f101d9c8f2a62de79213a0be4ac801794a63169af7089fae52476ba77d8b1501624fbbb4375b9bdc2
+Entropy.6 = 28832f0eaa8ff5b3e1a64be75cb38c9253b0c31d7f82cfa4
+Nonce.6 = 97e45cabcb25f64e4d3dac7f
+PersonalisationString.6 = 7ae1bf0d310d1f0c05da5dfffb715d3cb5cb4346a959c27b
+EntropyPredictionResistanceA.6 = ebb0c49cde7811547d902ff38094e6afbcfce9eab0185f80
+EntropyPredictionResistanceB.6 = 59b15ed0697c3de6f0175df640a085946fc701631ad08e50
+Output.6 = 46db6d6818588cd9002b443d75f0320512863e7eb4cdd30f99cf63c15bfec328e95f27b2cc0cf81068abfa8be17370574d79f564ba3d969e0f1bf85c93c669cab9a7877c8724c519929c325e52e910afd8437b10bf2fa727e625702f236ffcbe683d4d0c8849a1df1d0df4b2738e8cab
+Entropy.7 = d7fed5823112cf811ae5d52195c8daf477ef1f7ae23e30e5
+Nonce.7 = de78e7d31090fc9b29f943a7
+PersonalisationString.7 = cb084e98d59b4193a769c2de1cf4dd0f5f60f396acbef87f
+EntropyPredictionResistanceA.7 = 4ad2fec37160c694f2ff71cde5086f1a0a1a062f3a38c58b
+EntropyPredictionResistanceB.7 = 651cebca3c9c15270ac7c73c5c6fb517b3d5d62eb5adeda6
+Output.7 = 0ff3dbbd3f423e63c937ccf3448d8a4197935c928b540c1449dd322dc644fea484b317da07205a4c8cdb1e76992432a5dc576e5ba253d5638e5178c1b4d228769c81f2e24b1167268b35a3c35b7b1e837a7a65a1871db832e7710ad4676b8a55dd52c023038523a14c7cee5228b9bc8d
+Entropy.8 = c955cf883bbe5502eaa58812fd2a0a60429ea689c347e930
+Nonce.8 = a30bd3006806eff0c1993a37
+PersonalisationString.8 = ad085ee34e01c688c5513a9b780417689d93daec0e051fb3
+EntropyPredictionResistanceA.8 = 0ca6e34a863ae72e602d4516781f2c819614b39ce04f5630
+EntropyPredictionResistanceB.8 = a01e974de817a316ea075d6e630cbc9c65806c0555210c77
+Output.8 = 0794345c1aa58e0f5c16ad8c8ab77c7ada40e7c731f7b3912867c5a475f62ed5cdc7c62ca747130e803935e74605a4c85e324012a95f9ff6c2e16b72caccdeda460f798657fd6e24e1f4e4673ce0e896a5f5a7d4898fdbb180caaaa555b0f8248cbf4c9154f5d97aaa05947db6c5eceb
+Entropy.9 = e581751785711651e69e471248b927d4c92f56a9fd62c14e
+Nonce.9 = cdb98445ec801cff386ba1db
+PersonalisationString.9 = de96969d4b827c3ff5a83824720503a6d9a2eec4856e431f
+EntropyPredictionResistanceA.9 = 2722887d08156f225adea7610dce17a71b7c3e2c80a9af8c
+EntropyPredictionResistanceB.9 = e13f8ec459a35b6c4c37e3f61242b428bcfb001772952c3c
+Output.9 = de119a38f67cfd3981e8cb8b40395c55a1a799d66af6b8e8e24c207052c14d4de68bdfb7fb8026108e30b4f0ba127f073e648ca17071498b4b032c97a8c9a8542a4f01d4931df63d35354054ff420794b673fee3bc67e46be442445ff20d2874dc022a8385d03cefe7aaa1b9396059ab
+Entropy.10 = f1ebf7661bff202d5be57d412b026b8f64253d38bbc9af12
+Nonce.10 = 3495aa77af3bc3094336c685
+PersonalisationString.10 = 2067e20bbc005dee1cf66520a86d8ce069b6b98981a0e943
+EntropyPredictionResistanceA.10 = 2b0c3dac01009479e4fe17c59b0e0562fd273d02f8fe4cd0
+EntropyPredictionResistanceB.10 = ac111f3da69d80d45e357631a6e58689380927fda9ccfe7c
+Output.10 = e87ca95b6afa2d95f314556e8ee370e472a3fd9788d896977036ae60dc36f2947187a14f3cba33c9afd026958dfcc4cda835829a02857100a713320b86a0f646498ccfb7844bc3d5370435f407b3a521967c4fc50fbf7f67218efae6f7525259d7fcb1b69690134c6963774956005ede
+Entropy.11 = 00b2ff01bcfe148f2bd987b1ba322ca0133188f815461f4c
+Nonce.11 = 857aa1a1d4057329b37bea6e
+PersonalisationString.11 = 01823e7beb653c48be31811c89fd08dd1a37bf581b6b7704
+EntropyPredictionResistanceA.11 = ad7532a25ad962e9ada64fb46c95e7ff34c61f64c564f3ce
+EntropyPredictionResistanceB.11 = fa0848e44828e547b8a1f42ee0f04c5fce66f03bfaf12f58
+Output.11 = 2a3a2579b64ad7fe91f0a355b2c3aeb9dde466fe16940d9bb53933ddd8cf9acd778dbb38944bc1564df02330fe58fd0bab075b1765634429dc358f8b9e12616f10d100e9c0a1cd0622e10825d64cf70311b5e744626807174839dac3fe1f2eecebfea18367b5ccedadbc03a739d29ac6
+Entropy.12 = 80d70491f50a06dfa05750a123ea094f93a9ae61cb5fe77d
+Nonce.12 = 2be8a4abf77c13d220b3ecc2
+PersonalisationString.12 = a6833add1122e89e290806bd9ba983ed136412bd708e6e73
+EntropyPredictionResistanceA.12 = b6573675a7e37d1c25ba2ff6c1e3982cb8380bc68bb60273
+EntropyPredictionResistanceB.12 = 17530f43724d2aac1bc321411b08e0fbd5320d722a86c314
+Output.12 = fd0947fd7832df4b799b0bdfaddc1f2c65de147187e5a16ee77663acc7614a3a8b04e7540f37be557bd3d28ef30b28af0f99d2bb83335f9e1af9ec825f99f81a46c166a9d2a01fe0ed01eebbf36699cffbc56782d54e307c41403a2d535c1b0082c0a2b6effcfc70adfa5cf16ca3ace7
+Entropy.13 = 7c7ddea9e6d422a298272f1ed28fabe62339becf9ed5dac9
+Nonce.13 = 10dccbdc8a2adc42257baf29
+PersonalisationString.13 = 38032eeff1409bffe8d820bb90f542e0d7f0f0d7aa517052
+EntropyPredictionResistanceA.13 = b458da77ac0358f84757d0ce7489193e0c97c8d0c5dbd4a2
+EntropyPredictionResistanceB.13 = 1538e783c41891121ee9d169ad67c8eab2c8b99e2bc34ce1
+Output.13 = 62e6344914f34fca7f876c43556a8b85586fd704f86a557d08031b4dd09a4ee8c00f4ba37ce6b83c847744052c506e7fe26358e3784686b8a158546004786e046a1b8fe11a56e0c9fc09b3d01c3133a8caeb64af617e9308acd0dd5c9716dae8e0ab7d94886168cc318ed80d23624aae
+Entropy.14 = 217be8b9faedfb8e0ab5fa840a5150e3a1b6f8f3cdde78e6
+Nonce.14 = c48ebf7a21b805ae27c8efb1
+PersonalisationString.14 = a66e05c98c54e89cb6ceddbde19cf805a43bd263e7d2e7a0
+EntropyPredictionResistanceA.14 = 62b1fbffc1d23ec871ec6c85c76f1bae9ec7b7cf85eeffac
+EntropyPredictionResistanceB.14 = ad80381072e85622e48978527ee673151fcc036c0096094e
+Output.14 = c5d7cf9f1f83f497ef8c48eb81898ad1616c00cf2788a32c5878c3ea868eb3848cfc2961c8095f9c65052ba063707ea69f9d6ad9c4ac9858fb2470543dc4d2d2fb3eab11994e6ce387809c3e7595ede565ae549b25070f7ffdc630ee0ef8ac9835dbcc5cb5c9570143006ac691265a89
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 5d9ec83d1a50cbd053ab09b29b209ac329dece6f40d75ff4
+Nonce.0 = 833488108de24b6a06a50598
+PersonalisationString.0 = 54e5c4d08b03994f8e3d0cac21ee31ec4817d5ad405530d6
+AdditionalInputA.0 = 4c8c779e6ca5f99d288a8d23bf05f30741e6d815e5ad4ce9
+EntropyPredictionResistanceA.0 = 3e172f46aa3e90dfc7c0810d976263912d05b44dc6e68347
+AdditionalInputB.0 = 3d796b23c19088010a52feba39d2aa73b591f472d3587fce
+EntropyPredictionResistanceB.0 = f75160e4dc4760291a593b818627a5524e43b3ecf4e886a5
+Output.0 = fb34050f161f45b048d75bed716a3e2dffb9a1dc92c8321bda4337dc130f9c6a0c93cff586607b8cbfc9d842c3d7aa58bb7927fce83c4b798c4d2f389dc5ac0d050a410ddc7bcb414d9c7bfd3dc53eb12aaa22d90fdd8d36c744f1db46d73a5a54dd09326ad750cb3bbe8c54f27c96f0
+Entropy.1 = 844671445e0243e4c1dc05f0d8062150422a1bdd025420d0
+Nonce.1 = f97a9bf4fe766f3e6a2ad219
+PersonalisationString.1 = ad4559daf14073fe068ac5192f4e8ad97f35dc7583816814
+AdditionalInputA.1 = 32181d4119ee9c353854914a413ed8c893a703f01a663c5b
+EntropyPredictionResistanceA.1 = 07b66c45838c7e6f0dce934cbdc806f1cc5c757eee7e177e
+AdditionalInputB.1 = 6eb203e2dba4f66827633070ee9eedd9a9e4d91d2c121b60
+EntropyPredictionResistanceB.1 = db43b8358a74012c90b69d34852c92ba698b7d87dcb0781d
+Output.1 = 7b26c1cfe9fe2920869417752faaf3cc302da6467b79b99ca5656202e8bf5c55d743f6fb665e545153ce65f87d5cd553c8624914a07753f184a6a10861705b37ae288886268dd1fcc34b36e91eaeca477546139981e8bd123825f2ad3db8c1619101ab141794915618d110c2220c17bf
+Entropy.2 = 71b11ed59a01891993d2beed180ded30a7cd143b80f51ead
+Nonce.2 = 0fe199e013066a326db6b56a
+PersonalisationString.2 = eccb95e64aa4c801dbea9f4fd7b5bd12b9eaf65c923fd18e
+AdditionalInputA.2 = 674b29c15b9dc8df02da68846bc5e757f5122f70e98e52bd
+EntropyPredictionResistanceA.2 = 8565c91473b899404a095c4e76ffad85aee25431293f332b
+AdditionalInputB.2 = 8d8e9bdb411afbca7720e71ddecd51a234f84410a2d2155a
+EntropyPredictionResistanceB.2 = f455109999eef57645e708189d0dd01381f8291fface6e88
+Output.2 = d3766da22cb5fd47f9387f9678a63b2f0d448ba6b5b2edc317cb9d4eb06e9d127a49e713f83d2ab1c5c6757174f9ef6a93fe1e74c8fdb0d1b4dca40a03ac1cb269a1688a897b3370253c766022c837fe89a0fc7c149240877f3bc4c5a1531ffd6e869ec5272efcf2c4cb8592f80380b6
+Entropy.3 = 3d2e27bda89c48a4f69b18ccf5491e9af4969f3ed91916c3
+Nonce.3 = fabf52e201816f43d88cc96b
+PersonalisationString.3 = f5495f5f4add39a328c405db18cc2c23bc3ec43bca6d7611
+AdditionalInputA.3 = 1b2cff0fa481aa9a4560c743ac46cfa97fe789b5d61c8df5
+EntropyPredictionResistanceA.3 = dad3fdeb18ea83b61b3b706e8fcf31f3a9ffc59ea3ac2933
+AdditionalInputB.3 = e0358668cbe28bb1f68708ab9319696e371c29a4b5f5e63d
+EntropyPredictionResistanceB.3 = 5fbc22cb6d596fdc2b0aa8024c7cf316441c612579c600e3
+Output.3 = 2bf401d707353b24d6ad15a7ce60d48ab013c48fa1ff10f74dc8d943b659c76f57192088e11445533247ff5af03cf21a6b6bbb34c100f7484fad299c4862dc3afb40edd528cad3724428deb68bc2f83d640f3da9637ab384316ae834d84d6a8830a9c66210823bbf16fbb5b6120df90a
+Entropy.4 = 246552d242dc6028da887195816405136e9240f44940c22c
+Nonce.4 = 1becde0a31f6e3bf06aa0d2a
+PersonalisationString.4 = 11f8c79baf0d29d5b92ddcbf9caadb4a4a2c70ca6d7d94d4
+AdditionalInputA.4 = 80312cbab3c52c05f1629f6697d854a1a37b0f86067b41ae
+EntropyPredictionResistanceA.4 = c653381ec9c8dc4210caf1e43c6c0f1e0639bf35d2dd27ef
+AdditionalInputB.4 = 71f779932e331ea7b2abd26160b0e9829f0437825f9ef124
+EntropyPredictionResistanceB.4 = 88bbfe7d55bff2b391fc712469b79af0e171b34af968e559
+Output.4 = e0ec5616af4c25fccfd1380b864576e996d89b7956fcc090d52b0f10372c5f0162557fa73a1e007857727749086fe67d54cf1ffdb1230df068cab623767df6748d24f9ebee591d48a077efe5d989586a2a092cadcf511c8352ebe71398e3d96f0c760b0f5c706789fc29d212aa5e5d4c
+Entropy.5 = 7191946cad572a5e84306a468b3aef5834d2ee7263a6f40d
+Nonce.5 = a1b53c82a6ccf165cf4b3f64
+PersonalisationString.5 = dbdd68318b1a0d7a3d4c38e41962492ae24262e4fd107248
+AdditionalInputA.5 = fdd099c12132e92decebdef4a7dc789ea224be45e8070608
+EntropyPredictionResistanceA.5 = 8f45d0e5cf43db99f915397387afb5f7c3d205327460c1a4
+AdditionalInputB.5 = 53d4f87405824aa31a2f02d9d6f264663dec3cede5a5a56b
+EntropyPredictionResistanceB.5 = 8c9392c6fd3bf0c4391236c3bbf590275f6d2d1dbb48a4e3
+Output.5 = 66ee960f8d925d33e78a31a38aca80b9f32d217ac3396a42450289715fc813dcc7286f395e2466146d12c299b53404f7153d51b1396141ba57e5596fbf9d5d9dd3965fd0eedcc56c43bdc0b90cce214866a7c2babea413690035bc105578a06d70361eaba704d2460643fe03e7ead716
+Entropy.6 = 17709741c7858a3b43bab416c2be47eb1778f3b11a3a93f2
+Nonce.6 = ad53782225d26acbc251cf72
+PersonalisationString.6 = b4896dc1acf611c0681af7a72daf71eaa706f385306a3956
+AdditionalInputA.6 = 1d4bf5e1c30f1d970f5c2c80124b09266e4b0c2ad809e15a
+EntropyPredictionResistanceA.6 = c6968fe04ac8e2e8965e82d8b1d6b33daa8eda83e0f2c2bc
+AdditionalInputB.6 = 21a5d4a532cd3057a2cbf423c384d9055d0e1946d6158cd0
+EntropyPredictionResistanceB.6 = 9f771d4ae88dcf30c8f7fc35a2b4d4e5897e27392bfbf1e2
+Output.6 = 90cd06a855b2585ad1b9e1234ba176c016d4e7a0e3066e35fd7b6dfc1eb8d93fc5117a3a15f9050d8722ccfada731ce5243760a177a831b03a85cf95074076a02daa30230784d497aa6286c011c70f9f98cedfef0572ca38ff10db26331e398226eb9b9360d2017675773f23d2278a40
+Entropy.7 = ecdda2c3ae4ffc3835a946575714e9db3dcecb915f4ba486
+Nonce.7 = 27703f7c95d9c006397f6a32
+PersonalisationString.7 = bce276573ff20ee6dbc9626fedf37ca000ba13c2e6411c7b
+AdditionalInputA.7 = 57acf9f4ecc07bdc1acb02978ba84dc4056c076aece7bbf0
+EntropyPredictionResistanceA.7 = ca06f02eb0cf1a0fe28ef47194a2cdefb8a45c3e85053949
+AdditionalInputB.7 = 6521fbb740dd944c13be607884f686a43744c4bdd590a9e8
+EntropyPredictionResistanceB.7 = 30e11cb609b0749100e9800040d7868e5736b43d2125982c
+Output.7 = 8d8f3bb03167ca7e98c1613bd85f901405dcb17e7f85e502f87970d0ae5dd1be07932a9d922add486ffdcdb24c700634c937d17fd894219ea2960ac02f52090ddd634ccd6b4242cdd0b426577d4fcce71d8ad378dc2548d45d2a4ddaad98ee0754315584ed88c8dfb8846b6194a815ca
+Entropy.8 = 3e68cab163205bfce985e732fb5af6250370f65bd06f42cf
+Nonce.8 = a5eaa34f6a33b1b127f50a42
+PersonalisationString.8 = d101fe88b527f4209bffad7130e7d06316f6849f537af87c
+AdditionalInputA.8 = 4c0bef40ec737308c032fda0e5e9620febee9948b4c92fbe
+EntropyPredictionResistanceA.8 = 2cf692eb16cbf34875bf86244899877e0ce52d3a97406e92
+AdditionalInputB.8 = 392c40acf7ab27c2b4ca22b34d5e2dc58eb5a062a01c98a3
+EntropyPredictionResistanceB.8 = 6bba5840a8f26afe1f1d0d54b5a7bef4b8cee269318ea19b
+Output.8 = 4f235c73fbd840b5b1bbfc3db08342792081407618b165c759abdc6026bac97d1e96d8ed2478d5a01fd3571538bd1eca9bd0cd75555eb3f43a925f62cde2c4c742a029c26de6f159f61818fdbe4c16d62178a2d2809945d0ab99e7df9eef4521d175144cbe0bdd28e787774d5db00e05
+Entropy.9 = c3283b0bbeb402d081d8c03ff70f9012bac08c398f6fdca6
+Nonce.9 = 5ea9e1e55777b115ad655624
+PersonalisationString.9 = 3fdcf0984674ac1910dbe37eb0650737dbb440555c4ef51e
+AdditionalInputA.9 = 3ee4851cad02e25a8f7831c5095d609b1c81191fb88726c3
+EntropyPredictionResistanceA.9 = 527a6087c1875cecc1d07e06140eb0fbb2a51a86164e3d33
+AdditionalInputB.9 = 63532f41cd900337bfdc976008c9ef915ae1810bb11cb541
+EntropyPredictionResistanceB.9 = 2c20de2c9c5f3f1335ad06573f95994ea1e15e12b9034f16
+Output.9 = f193395213641491dc26da176fdb0828977afa64d183d22de64a1e056ab4e9fd86bcec9355ffac6664a8bce081351a89707319bc420b2715a4f54c545be506ca9d9ad51462aac35917ea1522429d01ffea76ec3d880c260fa670508b2cf3e799275a0f4aaaf610a8cd69da016b07e0a1
+Entropy.10 = b048448751d18829fbb10cdfb1b7ac157b710d7aaffdd22d
+Nonce.10 = 4e7011320611862fee1d2523
+PersonalisationString.10 = 81940830a807004325c00e7db164cb29affa53748e2736e2
+AdditionalInputA.10 = 48c5f436b468ea0c39f2158b4b5a08420f162ba7a2a72ff4
+EntropyPredictionResistanceA.10 = e42a54d09618e1ab217f745ccf82f5a4cfd7f238653feff7
+AdditionalInputB.10 = 31d3940ec67862f89ac4c19d4c81cbce6103fa6f7ff92416
+EntropyPredictionResistanceB.10 = 0061af9786c558dc795fddc19fd99ae561931dd456c56b23
+Output.10 = 75f9e2b601c3fbd59fe24b3f7c6408b6435064160ce8bc1e1ddda2643d898d29e6b23d5380d92af6eeb538f7b2eb8e63d33bf7dc838a7d3cc314d88112ea920f8867c3b2684aba99be400461cf07ef8a224fa68c7c83142438e8940cd3f62628fe8b32d76255395c81e9d8abd0360f9d
+Entropy.11 = d3ea0c6194dbdbd7c3523e7a5b0cf0d17357dab89c21dd30
+Nonce.11 = 440b3e62130f22d065617790
+PersonalisationString.11 = 1bb872c7df82b13052a0668260fc9fb802ac4e1d8f2cd446
+AdditionalInputA.11 = 66e832311d6b9b0d19ea4b252e6adc58ee2deeca4d67f2c7
+EntropyPredictionResistanceA.11 = 8e49fd7127554f37ff9387815346c3f7d3825f30582bcf54
+AdditionalInputB.11 = 608f660a3b626f492853a710af533b3f91aaf813160ea783
+EntropyPredictionResistanceB.11 = f18c1d3d20a28351d3b86cf1703afd2e7caf0784adee4c8b
+Output.11 = 4ccf24b32d3f7d2d8a20d830c642df65ac6b8042af1f926a560b8f2296ad481f8be4c3b0db92bd0035959a4751cc0bc3ad4ca906ef3f23f5951f82bd595e93579c3a9b17d736ce514a8f6b8a08f7806d96cf9212bd54808ced7e5ae3485bc0cd9b3c4fd7da18d3507afd8fabe860af3e
+Entropy.12 = 2071b0eb52d099944dc0402ba6ed3927545524fd82790159
+Nonce.12 = 080297e8bff88305fa7af6ba
+PersonalisationString.12 = cf615de82146075f71c8483e1955b3ac6d941d0607e770df
+AdditionalInputA.12 = 9b182c3a70682a2724b922f1a73ff6b36e9f839d865ca200
+EntropyPredictionResistanceA.12 = 2ad0838161281dc95fbbbe423657dca7157d6fef63024d65
+AdditionalInputB.12 = 13fdea462a35451620bbc35dd55157e14a888e23be13e563
+EntropyPredictionResistanceB.12 = 2a313d1f1ae4bbc7b3bdf120a37b4fc6e0cd23aea1377ea4
+Output.12 = cf5180a6ba7a90128ea45fafbfc356757bbd8ae988ff0e106f0b0c40ac22c504c884d64f73bd18d01e361941b4bb7d3e799b410bd97decba4ce75ec364fcd0cccb7869a68267434b0d42d1fd2fb57657519944d873b420b0e4ea55c52df676d913ceb9a21d82cc68dc3542d0d327abf2
+Entropy.13 = fd9e9757916f593358ffac826616940dcf481a9d793d0340
+Nonce.13 = 55221608bb524ec6a396c35d
+PersonalisationString.13 = e7c2934b182fda50cbcd9dc33a635ad5d96d25248ac551ce
+AdditionalInputA.13 = 0f8f6b0dcbde744038d0e295e78cfe1128cdd003d876e5aa
+EntropyPredictionResistanceA.13 = 078ff57bf6135da8808083319e0154bf6507e833b526f4a5
+AdditionalInputB.13 = 8828ddc9f7ccd4f9f00e0d50659a57126113aebad05b2233
+EntropyPredictionResistanceB.13 = f173970b06b7a8bb04a947e2514a004a1715996424b69cae
+Output.13 = f17ec5a73599f54cdae442b531db39d81102d60b1c54f963b090128434b6254d18faa3001931e71c713fb56714e57e113e20378b2eb14875834527c9d14ed780d9caadf5c845e1a117fb8fc634b5936dcc08425d366882f9c1385c67e312762e6c12f7c4ec91c583265812b6b1e6152c
+Entropy.14 = a87064058b070d16e211622343b30492ca8105d2dbda8fbb
+Nonce.14 = 638d5eb9e3b2a36c9e815bcd
+PersonalisationString.14 = 0ff74442782a2ba603533c4f293f76199069eb36c862d550
+AdditionalInputA.14 = cedd079bb3e5868359f47b905f637f25a221631ce308a89d
+EntropyPredictionResistanceA.14 = 9fce2f2f59b5a417a7898917b2ec13c32795b6c80465ab29
+AdditionalInputB.14 = 6abc274f05fc74ffe1a0bac13cffb199eb87d66b385fb675
+EntropyPredictionResistanceB.14 = b3a9b4f5f51dc337d12d34dddf231ca21dd98f0775a53ae7
+Output.14 = 86732afa068efb5fdadf94ac34ec595eba831694cae1dc892e9c028ca78f950afbe78191457a115f3c444e5735bdbc40d787294de99043c96ce49176fd17d721f5b467943219437f3e1bea373fcad275e64bd35cd4aacd1f3c126bcb59b50d905bf40966dcbd474978abe1899bf0c4a7
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = e19d0ede888e2dc4c149bf10ce0d1a364cec501b6eeefc3f
+Nonce.0 = b009066607e4885e1a02d823
+EntropyPredictionResistanceA.0 = 99d247ec4881c9e09d3f666ebb8c2670e6dcd25515d2b772
+EntropyPredictionResistanceB.0 = 27238e7674c558130ea8d17ba962b8e213def9c6c17ab58b
+Output.0 = 38bd5088bbecaa14c6a7419e1af30ab12e3b01222a91b3776295c63af4d2d0de3799adcd47287d40f596cdc9ec92bb8b71827022044bd9dfa55b202872d34600b64309e2de4e49f524494af19b617857e30c278767e02f20255120b82e95a9a08783173ca034b9d08a264aba3ed7b487
+Entropy.1 = 2a27d3afa3a52ccea54ae5917a843132ed0727edb1600107
+Nonce.1 = d488af88ef5e7fbd8f0bb00e
+EntropyPredictionResistanceA.1 = 461402577f250a77e4f743c1014abc8bafd701f3d884b9ac
+EntropyPredictionResistanceB.1 = df724207c38e73570c8270dc091fcdf2c2963cca19a0d53b
+Output.1 = ade41e85da068554cfbb328fa468f1bebe948105708147dce25566d0250f59b1f5afdc5addd3af635c0fc8a2b869a4084d2076da6bf05349cbbe6414600bb309768627cba8bd27ca666f579a1abca8f3dfd06c6bffe5f6ec884b788da672cf7c3730efa7b20b1de597f4cf5e5964fcbf
+Entropy.2 = ec026931549f07ef4887e5f7ed92d48e01bdaa9978aa7602
+Nonce.2 = c9abe95395615f1c3015bcbb
+EntropyPredictionResistanceA.2 = ea4dea7b31b2a85d178ff58b72a7f58cf345d9c496be1ee9
+EntropyPredictionResistanceB.2 = 1bc9f083d1b3baf9b09d32c491d8d5129ab5123347c02534
+Output.2 = 8a38e4366c05425cf8800516597fccf9caf2320f627afef4456800349044a86e46544ca04b50134daa155163c39cdc599e9d0ccd1ec21c00305875db34d0039fd8aa44fe1f5148e07ce1d6374c358bc3e3338af98307693960a0617ece7225ba7bc5fe55f260fbcbd6037db8279424f8
+Entropy.3 = d113fa27881cdc4aae4e8919b07a90ab70ff085e3232b2c4
+Nonce.3 = da72842d6c94a7d978611fcb
+EntropyPredictionResistanceA.3 = 2533c0e246a63ef5bdc41b25d0d0959efd9552320b30bb69
+EntropyPredictionResistanceB.3 = 1125f828b01847f03ad9fbc2f6cc9c19007e5eaed1e1497a
+Output.3 = 1a74ae74b7d5c2c5a447294d336b54b50cfd51b9221876cd3589fca3f90859d9f94a7fe775704ea5308ec73ce43f4258f63ef2d29427f3bcd946e296fb5cd43b74e7eb56476c220a9423b2ad3260a1d8cb898fdd97e2b1c68f44cfc2a84677714a187a2b51c6d69b9a2e83be140ebf4e
+Entropy.4 = 23f0c960f48be0e2e9756672e29ecc8b75a4ecc6546de694
+Nonce.4 = 5f5a110a07d4d1a8e436e321
+EntropyPredictionResistanceA.4 = d1bb5cc6b37d2caf6b1a471046d68844a16dc7ceab605065
+EntropyPredictionResistanceB.4 = 87793a277c30574d0713477b395c2c335b5e04a6b5933b16
+Output.4 = 35e3aee0bf8a4d49a781507eeb90635c59aaa9518b9b928504ae867ffd4f1e33c8eb67c491f1e76002d8ee20b4c52356323ae338128bc675aa773f5674e9d06a988305335354e41ddd4374aeb91ca910a5ec09dcaccfddf42aea71f0338d415b4a3f3fd1131b0383cecf4c47d87aa648
+Entropy.5 = dacd8ccc98726e2cbd1e438053d5bce973b7f4e6d7f5ced4
+Nonce.5 = 8c15b0bd316cb71b84857fd8
+EntropyPredictionResistanceA.5 = 8273788a4629856e4e1c41c2e0b631180f802de24f449ec9
+EntropyPredictionResistanceB.5 = 0ee7953ccaa1a41b1972343aba8c801dc3a3a4ce113b5842
+Output.5 = 75c093cefcb8b9481939a2660ab304c19a8008ada99c9308cea4d747c3867b55562aca33f30a7751483a7a60139d5a0acae44f6e234c4f232e4b9d300fd4dc08dfbea574731d04bacf373b36ba9f5c73a24d28d733a9bae091bb6960b18266ae898994adafd3a69c918e2ad90de981c3
+Entropy.6 = b9cffdcd8ab65a77f658b113a7b08468edebcf1efb1c4be5
+Nonce.6 = bbda3d591fd8fd162a0142f8
+EntropyPredictionResistanceA.6 = 3f076b412ef83252c82cd77af7d7663f8961b02e0cecd151
+EntropyPredictionResistanceB.6 = 625676473766c7a6bfb1fcdaeb5472d2bb6cf5afa150ff17
+Output.6 = 5c50ffb4bb48bf10d9dfcf3eca8c3c0bb461ad4f6e52e573ef7541ab0feba3e829cc9145a8dca42a524cea9de045d86e9ac7a93bfae70af2c06ec0633032a9f1a8bc6bb8ef6beccad1bf141f901fe8f46cce1eca28fa04cd662b362ad98442b145450ae8869d97696015650a5d67fb3d
+Entropy.7 = bd03107e36836e821a1536c7ae6ab23a6133d4afa6efbebd
+Nonce.7 = 42bc42f41e254f5e57baa795
+EntropyPredictionResistanceA.7 = 210db094c18cea51f2a42774c2f787602545ba803378d8b4
+EntropyPredictionResistanceB.7 = 55665a9ce3a9489ba200dab3847e698881a5b40e9780952f
+Output.7 = 9332347169806ca494cea93657810ca1d974c559ece891d20fb96474b684a911c48436118795d36ef51eb1a70230f6a9c1501d7d527648079bfdb0d1204fa3459c7b4a869d0e622db410c9ec6e785c2426ee13bc7333c95b605260d02ca390bde0be9f76649fc0b9a1e7b0249ca98c7b
+Entropy.8 = 1523e0a236a36f88ef79eff78075ac5e81be537fdd1efff8
+Nonce.8 = 3e82631765feff824d0100e7
+EntropyPredictionResistanceA.8 = 84cd847bf2b2758a43f4ba0cb8ac2d92d719acf6d4880291
+EntropyPredictionResistanceB.8 = ba4b79f999321e51a32c12b7fd4ede98e53350ab6f7a57ac
+Output.8 = 0ee0643a0cb006d8d78baf01203c78729000df523af324322e6d2fde329242092fe6e9e3022fe0878c1e5e92a846db6a31f341925305287afbdea73e88e443e17a10e0ea3f6c32ea66e841cedea5afb12d3739f874b9427e330cf6ff891fb1db3da3c30db7427852037f1fbf3f950abf
+Entropy.9 = 5807cfdb7b5e32da92cc405a526b87f3d52d299d2cedf26d
+Nonce.9 = 1232151ef6d40485472c0f4b
+EntropyPredictionResistanceA.9 = 7c021ca60ee0302c623501def786e79c26a567af84ab7017
+EntropyPredictionResistanceB.9 = aa257c54ab6af7f93c36aaf5f79fdc91ba2e287b53f0c50c
+Output.9 = d24b21fb1a2339826af825413255fccf7167e90d54fd1438853734fb50a260824c63032a0d89148df6458b7cf5827bd0ddc645df975472a14ffc4a114c8ea63399ea48e4702712aece8cb0d34951f553ca2d83a18ecec91fe13433a4d8e00ee7c398998239cf74a3d3cf9f5f71d4149c
+Entropy.10 = 5b51d626bc2911a45dac7140c0add1dde42a71cc36261a49
+Nonce.10 = 24e3bfe527bc3ab76f8e275b
+EntropyPredictionResistanceA.10 = 11fd4b6981e4a459b42889f1c1978bbf1ba40021ab91ce5c
+EntropyPredictionResistanceB.10 = 5f9a5f32b3c73256334b26bd980c9cf9f6ddbd349c45211f
+Output.10 = 3df25bff5493d1e6eac642e8be5481498e3441450bcd451d9f1d0514b58a0b7c1be2226f51bab8151007d31858631b0c8a49f0ef855b9ae8a9ebe44785734259f7663d13b7c29c2125e691974af26e326f360466215e1e47112aea955be622a1fb719a0fdfe389d18419699465392614
+Entropy.11 = df47f7648c43863ce02a8ede8debbc0c5565fee2276572e5
+Nonce.11 = fa0b8f89c61c265bb95fde22
+EntropyPredictionResistanceA.11 = e1c3240462c969ee42c3f23d427ac34009e9bd711097a1c1
+EntropyPredictionResistanceB.11 = 21bd468eefd9b9997200c8839f746b9f2b10417f90f4066c
+Output.11 = 35482252a191b4755aa1f2677f883ddb756fb013d90f33d0119944f06ac0e2211b9b19fa8f61e9e95759003c7416c84bf84cc8fca80adc2716f4a65b6cde7f952a67b8d876669d687677777834ca639d89afc38343ff0618eba4c299784b5d6833f0b398126fe88f8755a34b34ba9a1e
+Entropy.12 = 253ffbffc4f030aeaee11a3e2aedb84f2375c555aaa89520
+Nonce.12 = 51259d87dc9e9148eb4252ef
+EntropyPredictionResistanceA.12 = 46a3f73c6127bf5be78433fdebf0484704fee77d406fda9d
+EntropyPredictionResistanceB.12 = c7030a2fa3f3bbc33b460b7cfc436ef2935deb0b7a2b8fdf
+Output.12 = ad95091963273f9abb87b41f2607e5f965a995bd164b27f77a22e716c075335631f4bed765f30eb61293a3cae6c3bdbd3ca2feaa79889f04c185b652a3e221b5ef2896c9f08d3fe3e3bfd0934ca0b2ffd0c32b1bfae88c8998769408c49ee9d519400db7f9c947857d102404cf9b5763
+Entropy.13 = 23cf4c7398937cddfee0b43eac9131e5c32894652d6195fa
+Nonce.13 = 89e00c054e669f9e0fb9ea3d
+EntropyPredictionResistanceA.13 = 6c6554432738c5abda6c2ff4e643ee77b7a1a27b454bf16d
+EntropyPredictionResistanceB.13 = fce59c69fae050b58c2e493c9677ea6ca456361539d8bffe
+Output.13 = 74a5f4ee4e83588a5b7cf13a0b46451942bbc025a3365380e02a308d62fad21fc0f055f314148bade296e2126e48ef074f884898a857e68ab75bcdda3e10ca88d279b200fd07137ce7eb7fdfd5937419928ad2f13c3e36da449526e84fb7028694b337b974fedbe051a8b176213d57f7
+Entropy.14 = fb1172cbf68c9ffcf23492fa9d0d94bc8b7b52bffe2bb287
+Nonce.14 = 3a515d6ceacd05f8a077e133
+EntropyPredictionResistanceA.14 = 058a109cc72dd766556a142a2d59acbc036cc86d476fb93b
+EntropyPredictionResistanceB.14 = 97f27faad6528c42dcd97c1313c0e9043a043e0ab0b58395
+Output.14 = 3f5095a28e5674becd4b895d8918a36ba3cbf44f09c8c80b155f217e9b783b4ba99bf3ef183371bc3c5a654e3dc2346b605463abe63313cbf0919693965712366574e175d910e263f5086ee862672bd9c59a461f2d66a9b397570c86a09e2e4eab77aa139133789424482e94b9ba63d4
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = a480095056a6e9c43774dd012d4e6dacd8175b31930ff70c
+Nonce.0 = 22632f36170541f643deff47
+AdditionalInputA.0 = 460bf670860075959a392d175c2802d2cca1d2b961df0e79
+EntropyPredictionResistanceA.0 = dd1bdb541ecf4996a5ae2a34cc5542cb7c6747e42500bb94
+AdditionalInputB.0 = 09f8a968cc11226b30135431360fbe0788e95224b9a166af
+EntropyPredictionResistanceB.0 = c4ffd2c19615dc4c24fd5a4b53e8e77db59a7981615bf020
+Output.0 = a989b7872f8e13d4320ac2478b7040907d220c2d1a5379dd49782eff428433ccecf76b01d422a2e39751943b825ff7c4e756312106094ba0b11f35a24172e19e8370142c19c8039a77bb5c3abb5b530bf2a069a583f4d8df48d85be7d5c552538146d8511392a7185d4af8b53e887b23
+Entropy.1 = 951025d43b4ba89e00474710aba6fd52abab55620481f7b0
+Nonce.1 = d9d5312a48b4ea4e80689c1b
+AdditionalInputA.1 = 9b531bb11799e9413536f4aa0684190809adb1ed88f0c21f
+EntropyPredictionResistanceA.1 = 76685110c55a2309c8a663811c7748ee0c71372b372e3e75
+AdditionalInputB.1 = 08a8afd600c27b25645ddb40215c78ac703c581d090ffba1
+EntropyPredictionResistanceB.1 = d169a9e975fb97e9c0272e9819ab0f590aa04e50d76bb308
+Output.1 = 836f2996d00bb15d545297ae4de66d0564037d346a74001f5fe713e2044cbd63ddb7e60d9ae0e19b5a3c22b7f661a64a93e412387c7c086cbff45f79fed7cf832d77c77f9093a05c61527adb9ec6717da812ec036be7ce1b2e3b4807063cd4105c6baa0a190e32aeff5bb7bd29464bc4
+Entropy.2 = c4d819d051d42acd2bc816244e0fbd7dc55a9d10919da584
+Nonce.2 = 9e651c2963b74f5b24a0d560
+AdditionalInputA.2 = 20ee1b1ae30130e97df821efe02057dc594c057e0c1237fe
+EntropyPredictionResistanceA.2 = 452869380dd7af2223d24b3731601788f7874108b41b17ad
+AdditionalInputB.2 = 95e75c0d4ff60a54960f743daef62681946af230588c99aa
+EntropyPredictionResistanceB.2 = 07e193b6ae5b28dd1f8011ed9a2e636a51abf83225aff374
+Output.2 = 61375742b1090361fde485d33aac4d2b2d9c5fa0bf0235523844ff9c663a11ed3e7199bb77167f1d4258f06edb6bbdee7130fbc1eaafd58eb1ead3a93da06e4a3411ce83cccccd2d566f590a64bccb9d7c24d4e83c45678a8bcb0eee30635f11f6daed215136d7794b4369c618d3b62a
+Entropy.3 = 0dba972c91bc04288ea9323a66156724bf36169e9e37a347
+Nonce.3 = a577ffdcbc5645143071e31a
+AdditionalInputA.3 = da53be9c91190238bf2c75140e4eda44e844ea302bc1a02a
+EntropyPredictionResistanceA.3 = d4663ec7f2c48682ab27768bb641a57119a33f6003005be6
+AdditionalInputB.3 = 3e812136c1f1c3cfa93aa8aeee64285a8964f9496ccaf0f4
+EntropyPredictionResistanceB.3 = c1b041a876f1df0fc9b1759d7e07bdbb3a420d88a7973e9d
+Output.3 = 5705e397b7c629e4061464a63e63b10debacd70ff0ac330f98e1d3f913b9a695937e39b42d7ef2a3c5d2e7bb9577f666a125318791d7757e39d7e72220127a11e0c88788e7b83635bd92ee67adca8a9fe9083daf34695aa015a7e333dbde635aac967a34b1726ebf35ee68760c5b9088
+Entropy.4 = 20aad50429f46bc171726c3cabdf1ce9d0f549992597ec87
+Nonce.4 = 1db66f58d59c26cef71b1307
+AdditionalInputA.4 = a62eefddb50baa22b30b2c481283921bc1b832ba1061e8ab
+EntropyPredictionResistanceA.4 = 960f973da3063de02459595d15235dcbda71534b746e9326
+AdditionalInputB.4 = 25c0cdedeb463dee0d7fdc32c4f422ae7584921d9c34f95b
+EntropyPredictionResistanceB.4 = 406f7ba60f7d62ce1d7e97ba4fe60b91aec426800457a8d6
+Output.4 = 728e40cb75239ded56e52e8c853ee46c926cd34a902b9d74e281e9ef5178061946ae4fa7e2e05d163d55e9f86028caacbd3d817519f3c5e109f5ccb82410b6a79ece37cbaa5e65d30e2184b22d4326f6ea7b69a08778c45c297bbc3af0efadfb59d44be8135d6c7fb478444b739b02ca
+Entropy.5 = 01d1d0cb2ffbf53cfbff66c28dc3efa5aa92d22bd57b8fb8
+Nonce.5 = 835ffb5106baeafa8c58bcc8
+AdditionalInputA.5 = 50a14587937acd09ebba36233f356fd47d6b279592b2805c
+EntropyPredictionResistanceA.5 = dd5cc035f947957d4a4ba5dacae622fae4f640832afd7bf3
+AdditionalInputB.5 = ae18d08a87202034b62840c7b7db2aaafa625328ffbd91e4
+EntropyPredictionResistanceB.5 = 6ba6266bc1f21d01a567e8d860b58dc6c749fcfdf3e3707e
+Output.5 = 6f64fb49e30db3bfb8d0228815e807d30fccdd33d4d25f1fbf9214bf2f43326673ece3f4b90bebc4f996cbe540da3b2fd3768d7e7ecfcd217bfc271b1178df0ec0ea5d4c8d57002c89143ee687ddbd520dccfcddb2d855431ea7bad8f0fdc5a37286f9592023403832ac209997f88bc2
+Entropy.6 = fbc71c6c46e0f49fc3295176bb9cadf00d0a940d67122678
+Nonce.6 = a2dd20d1955b8f2a4bc87889
+AdditionalInputA.6 = 16a61b7ab2d9565af91d997b4cd02daa53dcc93ee3ceb2c0
+EntropyPredictionResistanceA.6 = 9e1760e749011296076895aa3805417968a1380bcbdf6c0b
+AdditionalInputB.6 = b7afc01e220b23cf8b99779b3a1e88afd38cae5dfc83202a
+EntropyPredictionResistanceB.6 = f3ff3598bc26afa026db2e45713d0ce9b13fb8c5be732bc4
+Output.6 = f8b00b912609e2dcb93ea3624625c88ccd6bb5fbaccf303297af8ac192a2054a23fb4e483d409bc59a61d1cfdabbfbb6ff88703dc92f36327539db41ed0f1366637a54550b690243775fbbef25cec246c7af3f012e7b10ecf3852f2b45f0941984d72738342ad03f08e952e79d5cbbed
+Entropy.7 = d08b331b31597bcb548527a7b60d2a758a552e0c66ab2e8a
+Nonce.7 = a2f99b796f62d0ee743e944d
+AdditionalInputA.7 = 7d0f0845ce6d88f16e0f16b73c1c6f8e5509b15b49d4d861
+EntropyPredictionResistanceA.7 = 9b0eb1284902db4c5eca7aecb523ad4d93869a30cfb1bdd8
+AdditionalInputB.7 = 8c46187850a41822ff27bf36f00b07257eaf94210f4a5ac4
+EntropyPredictionResistanceB.7 = 975b44ba08a1b6c1df069c541d8ade6c80e64455d798259a
+Output.7 = ec0eeda3fc8886760f35c7dc69911b50d716c7f584e90710a65ca57d9afde500070483a03de8fb749de64bf9aa02762c9ba9e39d42d61471da6630378c1f2d326bb2399bd11a08078306d1947322e5a1673800fcff43f1e0cfb6bbbc18b2bf92f93a433b23bcfa06213a829ba16899c4
+Entropy.8 = 53bc096b8271f23d3f735240e16179593730ce2042113bc4
+Nonce.8 = fd96f52a2a04aeffcdf56f66
+AdditionalInputA.8 = 26d4bbd635b0065eef348ab15422202ce9c6f46aba3f5b2a
+EntropyPredictionResistanceA.8 = b0394e3daf3b308e1eb01faf403f3fe5de156092adfb6d1f
+AdditionalInputB.8 = b23b63c270e6a275fd57fe5a706b96bfb6591e54f6d43336
+EntropyPredictionResistanceB.8 = eeb02e2d16d397d3287811128203471441282b38ba8055dc
+Output.8 = ab273ca6d0573fc401f11adcbcf4c25502ee7eb5e6549b2db0911700a17bf40b0105518721063e9fa89737fcd6c838911a91570259a1ad76a676ae94e132f6e3fa7e18c0de473969173fcb4bf575df43e9023d5dd6d3d819d9d4f6f17e5cb6e4f583988575d7a9f05f997acda2e2a41d
+Entropy.9 = 1cfb88a9d2ea5d4ce11d978480863a5ebba5729d0208170e
+Nonce.9 = 48a3e5ca095457978eba97f7
+AdditionalInputA.9 = 67bf7ae2b00f3c0c3238b35ec1669762572f4e14ee0c7244
+EntropyPredictionResistanceA.9 = dd1ddf91a18a3a375c3b4381c4e61fde834850a734066b77
+AdditionalInputB.9 = 60db3bfe1b0e700190c35d9406b7c419efaed5ac4b67cf61
+EntropyPredictionResistanceB.9 = 7dc5c4372a62da5703bec0d73fec1753fbbf123bcd1abe2f
+Output.9 = 31e5b859d4a1bc4db9c4a99696627b77081a2456ec1b3748835fa2d8a6b3d26bdd7e1fed32be5be044f707f7147830796f3b54db5ee7e2d88556f392289a760c6f8045ed1c211b1f26f7b8804c6bf386934ab406e50c633a2e554da84d67588725f0eb1a6667c863e0536f7c12b7225f
+Entropy.10 = 22d52a0f25a071bfb195acafad6e0fce2535f86072374fe4
+Nonce.10 = ddf1080f38e225422d581bb8
+AdditionalInputA.10 = f0790a5e1b31ccc823e19e9da4ce2726748ee729d92e450a
+EntropyPredictionResistanceA.10 = cfc9bee22c5cb40adaf17bd02d4eb34ee3d46e951fae608c
+AdditionalInputB.10 = 550cadcdd2f17eb0410b815393ba9ef4a47db84a4bd90946
+EntropyPredictionResistanceB.10 = 10abf8abe578c038c0b9cc0f2e03ce29401e869f3a3693e2
+Output.10 = aa78053ec300d46297339908031b89d36eba9b7ce88b5733dfbb20fee08ae0d79a3d90a2e57160bf93c28f94e1a4e2de1f48e0b093860d7d7797c3cece193e50dd9d29a53700fe4b84768eb53de3a85183e86c1c39f23855d82f6abc705905cae396750bfcfbe12fa625eac01f69419e
+Entropy.11 = fe0e3d295b28ca5523234e189423c4b6b06ac75d886940b0
+Nonce.11 = 049a59a8d4bcc4d25060f384
+AdditionalInputA.11 = b461a9d1e901323791db823269650ad740d65125bdc6b6cf
+EntropyPredictionResistanceA.11 = 1e6feb4bd485bb23b972bf5603aa52575b9c398e025a0adb
+AdditionalInputB.11 = d86b82c0dae44380c33fe567ab44e1b09c1c73690e16f789
+EntropyPredictionResistanceB.11 = 28d18024676c44beb3d613b9d1f22900a216cc21b44048d8
+Output.11 = da8a36ebf24f58a9f1803a11222582583579a7b39651a8d08901e8f1d1069cd6674a61ee16402acf7744d17808b379b248eb6764b54c763062dfce12fcd58b6c534042e76427f5ca5bd28eab9a69ef40cd273c97a25fb0d769054ab6f1c326d673036ebe3891fcff7a55e95af9aae614
+Entropy.12 = 516d6c220837ab4cdcd4d150400edc42891d40caed0708cc
+Nonce.12 = 8ff02758da7294f4b9983cc7
+AdditionalInputA.12 = 0451c9adb56fcd42833a048cc8ad0efa0b37046012e623c0
+EntropyPredictionResistanceA.12 = d90c8fa0f251edcda1744e0dcacee604889f77cd58038744
+AdditionalInputB.12 = 6b88d02b97c15f9feca4b6aaaa804b6a7a3bddefe4dbcd0f
+EntropyPredictionResistanceB.12 = 2b643aa415412d8ef7d7af570f7b93683c24267362b14f03
+Output.12 = 2621ba92a6a4252fd2744c12f09470060d87d88a70e02c513bb65ee5c0437efa81a19af475a5c8b96ccd44d01f0e3b24be0a259f260b8c481a550c9b5d3ca138ec4dfd0995eaeb19034eb65a377ceeb4f9e3b4556d7ecd8e788adb0c6e026361c0f62f49689939e528c4e3c74d24e1c2
+Entropy.13 = b4f24e8999800837284fe027e201aeff3151e0bd4eac2628
+Nonce.13 = fe7f958f7f05143cdf3fd08d
+AdditionalInputA.13 = c55d613ca08d16b792aa2c96e52e752850c156c940a9a43f
+EntropyPredictionResistanceA.13 = 0d51f4dd9ff85247b5779118df543c7c15c9aa557fd262e8
+AdditionalInputB.13 = ffdbf646ed89bc867bf4656ddb6a701f830cb43d8ce87d9c
+EntropyPredictionResistanceB.13 = 81d1490ad3b9608611200e8e9584aec8f79b79ac2b29c247
+Output.13 = d07e989b674c168831049c1c838986489ebe8fa1632c2d5c39e259ebcd8774ac8c582d706f96ed88fde32ab9d9247f0572070f65342fa973eb9e172f79d8bdcb5af6be67bf74fb86442916787086c68c3291fe40ce0eef24b80bd73bde0f97b8940dac88d1af9fd8fcebbd33a6ed86c7
+Entropy.14 = 77be174ca8804a2b299ec75b0a9530af2a670bd632c64102
+Nonce.14 = 8c4ca909769a06d84411153f
+AdditionalInputA.14 = 58394c101daf4b1c6dc5e55b6896d1ada6a7055e6bb3e155
+EntropyPredictionResistanceA.14 = accc95619bd2f17399476435c352386f9a87f0aae29240e9
+AdditionalInputB.14 = 3d9654ec477ddb9d1928cf286f599736d51eb35af1eb3738
+EntropyPredictionResistanceB.14 = b8de4fffb86a4c7af05d85f7855aec4c8b463676b9b9eca4
+Output.14 = 33f691da4b3f351aa15acebafdc181da1a57883f0ded8b7223ab9c1b80e913644f850e3511e901175c7be68c96dc2b6175f69ea91218bf09dfd8b91a79e7499c8386746c260f29a22c6a000659e8aeee4c83f1484d5c09677f15d3bc045a2ddbf0b72c179dfe260e5054a75fd11c6867
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 4af68fd7f950d1904766c618a076d5ff5ca0f01a536168ba
+Nonce.0 = 65fd34241cee131b48cceab5
+PersonalisationString.0 = 65f66871bd981426ce3ee22584df1f3d76d6cd8321b4313d
+EntropyPredictionResistanceA.0 = fcb3fbb4ea96ada5a047f16b33bdc73aa4dfda31d2ee75d0
+EntropyPredictionResistanceB.0 = 50b51f521723c4767feef8c6be7b6a88cf06d747b0ca0128
+Output.0 = 3086a6eeb99bb3fcc2c9976ca1d2b5a35772019fa00c40ba8f78a76c9d3b2ade4b3b30a3895caa0819244ff9ad7887cd2ed75a3e47e47bc8a7d6e1b58b78c7009a13f8cb60f6b447f2d34e9a6c03be6c8149386ec3a9a2447e50349297362dbb0bf9e2b39cc15bcd9664a58232d985a3
+Entropy.1 = 636ede54a06aa991ec94942f77adde627491ddd1aa57d2a4
+Nonce.1 = 64c9c327bc907be64c00280f
+PersonalisationString.1 = 2752899928a2d329a1de320717ef8a3c73fbf2512303a3f9
+EntropyPredictionResistanceA.1 = f8e4e2fc3a4dc33428ecba1f3c5128e25a6910180e40b803
+EntropyPredictionResistanceB.1 = 1bb957dec1bcbae789b926a425c9f8ec299b9b386f8de530
+Output.1 = 7e3aebe1505c5bedf8fba9d0d41e495fde8ce9afb1f75303c160a108ebc547ec44fe38cd1fe50fe3a9a69d235599055c669d5dadba8ad3e3e06f4f7c8ee32e640bee11c67221dda4631984f777e7529fa7039cf380e5d6e7a7843cf4f7f3b2b9257e44538d065c1d075d72a4de353a32
+Entropy.2 = cbdd014eadb59d95c441251755a73a4e61ea632b8bd93dc2
+Nonce.2 = dd47446b457424bd5e7f2fb1
+PersonalisationString.2 = f5a4f9992b40d6e6d1c86dcd8078f4655066b56692b28a9e
+EntropyPredictionResistanceA.2 = 4cf108ffe487ba9b6072f60279e836a9a5a35108dc1b7406
+EntropyPredictionResistanceB.2 = f00cb6bd0e064b47ee17de54055c584b38cc93cb736ab9d8
+Output.2 = ef74c18e7e344bb3bb78f695626366c2fb5387c2d68ba645d55d400c9b4e9a8a2524cae43f35295636fb2970c44fb9da52200bfc704125be28115cba89975c880cb32c1ea4ce0e71700193aa1226e65c5a3d139da3d9ba38b31597644af2153825ed57e752d3c37c39efb601e03b27f9
+Entropy.3 = e795157ee2ff66052c67b1100fe49a5463b57c28fd69eac6
+Nonce.3 = a59dded83a3fc473046b9f58
+PersonalisationString.3 = 129232a9470ae9d9654cad5c63f8bd89f555a8b5f123e334
+EntropyPredictionResistanceA.3 = 959d2dcec130dbc7fb366ebbd45722c1aa514dc60b3c641c
+EntropyPredictionResistanceB.3 = f9af7d67652b1b0673551738c25cffde769179c4a19b7d3c
+Output.3 = 5f881f686115de363474bc6351833923e8768f080d024584a84c243573021c77a0ea87e6fd1c4d5b032d5a67b10bc8a28cd29f7df3e20624cab496b99616d8736dc65b5b5ab2bf699b94ab3f23bef051784b20bf17e22a0ee706c44a8b16868f523dab8127fd741377695cb43132ad08
+Entropy.4 = 7155debb08d15e6a907c7a316f18f93f1d4508af8e436296
+Nonce.4 = 7fbaca099db5ab1bc1f27668
+PersonalisationString.4 = 0614235c7e82b7f6c33535fc300bce4fad47ee00877b5225
+EntropyPredictionResistanceA.4 = 1b911cd427929d2a975556ccaf35b28bd9c3f0126ef75ac3
+EntropyPredictionResistanceB.4 = d105b13becd5b75e5b602bec8f921a49eb0a294c81dcc105
+Output.4 = aef423ebb4294cf21ae03d7a18ec39936f6186b65274f6d9fffeaaab7313a975cee2033a74a217874f8cd8e76b71e741afe8c4b12816d04aab219e6f8af1b6a304fbdb641abfe8dbd68fe5ec0835bb79d65993de433c88b584a2758162620a252eb0d0790fad6a3e119835e563500398
+Entropy.5 = 7ec19c71d6973524adced0c0c51a96bffaf364b8d848aa9e
+Nonce.5 = f7eef0d5432a94b14e56230a
+PersonalisationString.5 = 7d832222778348ea63f94e44ab922f678f1aad56d80f9da1
+EntropyPredictionResistanceA.5 = 0fa803eae63f139c7e304ed0493a4d9a9ff23119375d2cbc
+EntropyPredictionResistanceB.5 = cc074515e347f2491982f936197124b6192472a0aba4e840
+Output.5 = 40aec1fb2e4b6e8b33c09825e81230ef5607ecb0b5ac82b508150ee07e54b3b7d9690a99e444c4e2ddcbd541bb8f9863c64c95d92fb98a7689ffcbf55c5ed527705ee72ca941b74f48299cf3b34ccf5e4c800c14f4ed050477a2b556e0efec99204f9e04a0e59bc2b95b5ff01958e411
+Entropy.6 = 9fd92c0c35eadd1a577098b935081a1f92883db1a1ee5a4a
+Nonce.6 = 0217b551886b49b9ea4dacf0
+PersonalisationString.6 = 36cd78cc9a3f52084a8b6c8ceff67b00cebfccde0d40970e
+EntropyPredictionResistanceA.6 = 616c8f4de0e0358da4c6954772b0ae6bd433807b440d9b6e
+EntropyPredictionResistanceB.6 = 36d1207ea467493d459165aa061eba9d589f2510df13a308
+Output.6 = 630415c0403e7170cb6f1d136fb4130f1fe9976847826e4cab28a560f03cf7c71a7c2daf9b1241e84546d53ba3f2950fa92a79ab8a3bfe5980eedba8043e0e69f141e3b933fbb8ec7ef77a7b30164a0b623baf6c61995c617f6417d807aa905a3552c444f6eca6ba792d03c972b9bbc2
+Entropy.7 = 5f038cf16f3f70453eb7c091d2901496de4a02df0e3bd06c
+Nonce.7 = 678acae386980ce1392d3197
+PersonalisationString.7 = 8af5733477953c801d39c7cbfd4b04d0378cf8fc40e9e0ff
+EntropyPredictionResistanceA.7 = 06ea354927d9d55ea7e2fd1863aa8e57f92438486d537d5e
+EntropyPredictionResistanceB.7 = 7d20b73d49e66a5ab08515aed57cb9052f1f7173a3c6a62d
+Output.7 = a7e57d4fdec2f921a0db9960eb466b8a6650ef8bef3313308024a75541ec6268c9decddf214ed62946da9651846931491efc3dca69fa0ccd79c6dcb264f5913f87510c855c606291a8ad6ae226b73fae23b673919de0201d44bcd33c0154eb48298240e763e4bbf82d30c977bd7cfe7d
+Entropy.8 = d0550a5073d2489311d47509c2e7da7f63829862ad470546
+Nonce.8 = fb6de231898acab0b6c29c10
+PersonalisationString.8 = be972e2a8ab53e42cc629032428a6c1189502360097fee60
+EntropyPredictionResistanceA.8 = fef92841f8cf62ce3bde545180942ae2bb5d0a83b59e2517
+EntropyPredictionResistanceB.8 = 5c5c5288541a76715ac6a539479478926c978bd32db7ff37
+Output.8 = 22e17bec69cab979c2c647c317944f1ca29a2fd954e09e55fa1f535ae0a56974f79b53d8bcc1a23b2fdf35887b803f4e9e0b8d8227a71630fb9d60e0c9eb5c06f60ddda3170552b8ef042e4f457b1ad2a257760bb44581a8ab74537c30f2577bf897bb7f697c5c2e900cd564a2024b6b
+Entropy.9 = 5ca1cc238aa26fe56aae0e66cc332704c4b972b48a5b5836
+Nonce.9 = 32073564b2160679ed3f8f80
+PersonalisationString.9 = ed4dbe738c7185f77c0ea9f279ad70a0ab2b2a1761085750
+EntropyPredictionResistanceA.9 = fff945a6e548abc73a5e30fe902d436782a95872bb2add42
+EntropyPredictionResistanceB.9 = 617547005fa969523bcce3252b307f0592558e06ed42f6e6
+Output.9 = 914d642c9b73fc2051e464a54ad46dba1d9e245a60e716330d4458d7f9758da0b870f0f7720ea34350249ecd2437e8d0fb74c21eb6ad6050183639c676d265b7fce29b654b332f1202622453677fea6527f62808c380b9f85a60b77da789d18620b87edd9ff328228fc2b43dbea0476a
+Entropy.10 = 915e70de3e189ad205acda3d2f5d3612eb299fca88423f85
+Nonce.10 = 55fdcfd1542ba01fe7c584bc
+PersonalisationString.10 = ff841fe07df36fce7b6604c74ee2185d1a6eebab39c73788
+EntropyPredictionResistanceA.10 = 04f579cfa5e588adf53d817b632a21610a0bef628e5346e3
+EntropyPredictionResistanceB.10 = aab236029e5eaa9397cf62498c7ea55a0032bf7d79f81704
+Output.10 = 1eb943453ff5b1fe4545bb0b60d8117c36c14246cbab4f311070a3b4658d5d3ed482a60db1ea9273c56e9de326ab6dbf505fa48dfd5ea0300c5b54878a6a4dd4b50bcd335329ad98ff2fb832b1336afd61f6340bc9e1f2a1c2648a98172e43993a435f6f3a94d7ce4d00ba43d969f150
+Entropy.11 = 8c2dfc838cfd6517cdc993cf32a4f408661687a26fff12d2
+Nonce.11 = c2d4aaf21493c64eada85e95
+PersonalisationString.11 = de8eac649e0a910733982fc4aa5862abf8a5a4887e169ec3
+EntropyPredictionResistanceA.11 = 5639599d89fbb1089bf3b6a81db42e06be391e52c2701194
+EntropyPredictionResistanceB.11 = f473b4da298b9426111ba520bf402bebaadd973492d8823e
+Output.11 = a6a7d9804958a979d22bd4bd6521b46fe55cf02f0d08946d16747601caf7f4ce177ddeef083d01f7eb4d7938886968febcc4f12d9478ee122c5beb547d0db764254bd44c2462fc5150e8da89452307790296d5c9de2cfae3b1cbabac12df73fb3ce4a3c37c8ebfaeeb129f35ce7b9984
+Entropy.12 = 2e7e75b1b0fb578dfe44b379c749a9eb964b2f68d64816dd
+Nonce.12 = 75b7a9ee83ee31c2a947e9c8
+PersonalisationString.12 = 323a0fd4fdc7310a40cbb4b868ba60d9af93a5672b5d7e35
+EntropyPredictionResistanceA.12 = 3d0e394f0f0d235763d302dc23df37956ca342eff1a4583e
+EntropyPredictionResistanceB.12 = 579be62dc379a87699157f7d9a4b663fcf3553a6ec72f7e5
+Output.12 = 29cd85cb9a8133d2099d2e76f782e6508e074bd3978bdb2ebe8123cc05dd6abebd8c0dbc3338774d94f4bc702ff7c557413034b9d2032c2b15c552b2d69f2e142dab2032e96f88b4377aec9d73d1514ba0d32c7e1f20f88a05544aaf85fddc240c94ca936426b1d235d5b65a79743263
+Entropy.13 = dbc1db429ad72505b4e0d981c835415ff8de73148e0ca610
+Nonce.13 = a399799ab40fba4e5fcd11c7
+PersonalisationString.13 = 1aeff4a5df39ed4e264edfa404287645051881d00d3a2439
+EntropyPredictionResistanceA.13 = a8625f6078228461f45590d66a992ab99b3fab424f0b6a37
+EntropyPredictionResistanceB.13 = b58576b4d64b6c404c1040b462e83372a891c323318c2951
+Output.13 = cf01145085f09378efa9529a262890757ef7b1a5a747a51d449e2e3a7569f7e69a01aa1fda13d1d48f75066b09016cefca617d28cc84eec19dabe447cfa1b006455df3345c4cc93d6e25838f5c4c811f2acd479ec103dbe5bdd6491967fe129544cbe8fe1cc17487c21fe10fc34834d8
+Entropy.14 = e165854734e38544ed36b2d7ef20d0b94681acab23d22267
+Nonce.14 = e627908ea6780172a0486a15
+PersonalisationString.14 = f00415374ed79909edc5e7785251466908883949ae69fcb1
+EntropyPredictionResistanceA.14 = 4afd7a280d8eb867f842e2e84f2c84d78749aa25c1201ed5
+EntropyPredictionResistanceB.14 = 7d3e4a62634e7c6f74610ae4aacc62ca147fd1699c5b246e
+Output.14 = 5c89bce4759878a3fe7b510c1b0c5ebfb2b085f89c3c4fa8cf6755cb51ba16dcc516402783d7870296f848bc285a5100a548e51cab01cd60638ecf2ecdf63f6d1c793aec14c4b179880687022acb9c90907e53fcede69d26f68a53815a6746c5bb80ecb22bc7d134da3412ba7c31477b
+
+RAND = HASH-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = eeaff396af088b09a0777cbdb45781550cfbd5dca652323a
+Nonce.0 = 852ed7a6ed799b664b5d85d3
+PersonalisationString.0 = 6e6109f05303b4f9acabe13f1654a57c4d30a6fca8eb8bc5
+AdditionalInputA.0 = d84b03b3f8c4ef67a5aaa90ea4dc0301ecef0003eabcfb6e
+EntropyPredictionResistanceA.0 = aac06de7c2dd91a919625978a6ae6e7205c00a6979a89e21
+AdditionalInputB.0 = 7739e24d799a6961ac7c59f829922a17471629c3f597148b
+EntropyPredictionResistanceB.0 = 738222effac35f656abbc9b6a1b682b222ba88103af31c2e
+Output.0 = e619d09fc8057baab5e12708d891cb2b77b37ef7d6a21121cb450999d41937fba39b304b3aee34693f14cbf2ad37816b0e5915cdd103867bb2ba54ada01faafa2a1f1597a6731672d6f5441d7a1b7ff35bd49297b60aeea6c512fdc3ef7e75c5016ffcc35642ce09a06c24373dbc322e
+Entropy.1 = d2e85ccdeec9f49c70876c80e4216fcdb0190fbf635e8d52
+Nonce.1 = 41024ec2b01f13c58109724c
+PersonalisationString.1 = eebc80a2a6a556ec7ef0c63a5d9be6a313e16f1baf518f1f
+AdditionalInputA.1 = 632b16215474fbdec9422837905f4ce7075e8b0056bf95a9
+EntropyPredictionResistanceA.1 = f6110219b3d3618e0be21fb9b2c216dc0bfa1d090aa733eb
+AdditionalInputB.1 = 11e3903755d990622d318aec6376c9034ebeefcac090e5aa
+EntropyPredictionResistanceB.1 = 4a0f3cf06e35ba17477a4f06bb59dc66ab1b179392e2edb1
+Output.1 = 0eb46ed9d4dbe5d57a113bf5f42e57c202ea33c4be6d502832ff051fed284245c642f1c9c7ef90a8c2ffcec878c993325fcbd53c36e91fde7a91264d6eb3390756f07aa1a9d0dad8ab653a39a53423b6684b9fe863ce17aa28b5182b95c634ba25bf520aaf9e26b1fcd9e3b04f25755e
+Entropy.2 = 8d8860af4bd79faccb3b0458657d2fe9ed5c493d17f85fb5
+Nonce.2 = 7b9c449f7eb5c43fe2bbc32e
+PersonalisationString.2 = fdda49bdf6ba56fd9932d9f98565c63d800c3262e4e23695
+AdditionalInputA.2 = 88faa7dff537bb2b249bce40eac99fb7945e50804ed2c9ba
+EntropyPredictionResistanceA.2 = 3754731c8a53c3b5fda2b112df6f3dfef555318981c3a9c0
+AdditionalInputB.2 = 3c0b0c30686056906181195038f381cf6b47ea76c112236f
+EntropyPredictionResistanceB.2 = af6bcb7f2f783fe21a02d941c9510126ee04ffecdf2fb093
+Output.2 = 72dde04d6804eb0a33303acae9a5415e4fbc8a1b900627e9d31d33eccdb94f4ac26427be09c6dfa0d884e2e5911a707fbd5b2ca3cbbf5afc9e58e810148b7d20367ba77994876867189bdf93c248800164a341100651a15249fcf4fb17448ab0e6c8ecbfe3423d84f47d63df1f08db72
+Entropy.3 = 8984b2204ed71f29f512f68520a7f8e29c023472fdcd232c
+Nonce.3 = 66bcf6a0a50a69b4236e2172
+PersonalisationString.3 = eac45e455f9bc3d739406288a98960d5a4221b3bd07bbca1
+AdditionalInputA.3 = 6a81283099498cd3db3ddb9a9148b333a31e3e05529cef33
+EntropyPredictionResistanceA.3 = 1d010ffba283d15a733041c36d6ca2edeeda719fa7d12b0b
+AdditionalInputB.3 = cb3e66f523d146545847ef58aec2ed4353a46a6a240e7dc8
+EntropyPredictionResistanceB.3 = 391e02db8aedd11ec0138dff0877d0086f5f59bf2da6f66c
+Output.3 = 21e165d19434b5df307558f192aeb7fad1aadb1265e3e563f3525d41603e5440e94fbcf4b4bd406b4e27073d3e141b88159d46ed5e7079ac1e0c90fcfc7be2111da5c2b57a066cf8eed8a4cf03c0b9b731beec8c32f70f213c610ec6ba825c86b4c976da905856eb88117f1358b78d89
+Entropy.4 = 452da4ffab48a2a006c13530f7da13a20c0b4a786aca2bb9
+Nonce.4 = f194bb71af3e59a32cff7727
+PersonalisationString.4 = 1147a824547abb2e09b3e51a17216c1ba0cb89702f5397ce
+AdditionalInputA.4 = d7bc8d9aaf61b81508c8fb97d611a4e6d8d783adaef5c1a6
+EntropyPredictionResistanceA.4 = eed0af12a5a7bb4515512b7a072778e0821d8109e710430e
+AdditionalInputB.4 = c18fb247c90018ac557a4882a7770d6d6e59703fded67094
+EntropyPredictionResistanceB.4 = b3e510b97bd08d6bfbb7484152dbdb482fed6b7f367dd088
+Output.4 = e310e4f9e91148b2ccdf5d7575b4fc82b3047c9de9ba26abb712c047d0c41bfcef3f109b1ab6ab0ce59c89fde32ca19fc086224f5d36608780f0e40948a75c1a2c37191be5409c87880021f2048509b4324b46c0b4d4001adaee38afee84c7921e064b6d02ea4cfcde5771e1c9635a13
+Entropy.5 = 7c849d5ef53146798479d30d6b0263784dfb46671eb7592c
+Nonce.5 = a43d7c86132afc5016af3b28
+PersonalisationString.5 = e99f15ffcc346c086655e374493505e9f22d916543a4d0b0
+AdditionalInputA.5 = 0b9513b51599bed4951108a469751b570623b9adc1b34934
+EntropyPredictionResistanceA.5 = c4a572d05a4c9181ff747e788b33e2416f9971d78616c468
+AdditionalInputB.5 = de553159a0ba3ed8c4954553e50d07cdc0d041a1dcb52ee9
+EntropyPredictionResistanceB.5 = 513b81b2f7359ccfbc4de49abd510c38e6dc1283a77c3a5d
+Output.5 = 5ccd7ce8c258b02222139d1501abae3b83940081630c8ed1bf846e3d0c9ae9aee503f16abd6804ebed7ca89df1fb07727b1cc386ff9ebef99ce80975bf756554deee157cc8bf1d65eb0b0f4082706adee9ef8691095848ce4bc3b7ee89765dd94d04104bf6a3962118854e0b84b2faed
+Entropy.6 = b7214abab20a3b3e983e85d703902c0ea8da0475bc83770a
+Nonce.6 = d4fc081a7e7d26f6dbd8c1f6
+PersonalisationString.6 = c61a5de029d762e1e42cb8a9084e671441f4ece3b61bca9e
+AdditionalInputA.6 = f615fa8c866353e91f8022e18ae5506ebf143ef7460f4a75
+EntropyPredictionResistanceA.6 = 84074b1af7151f1e07f5c2969cc144be2b35db4e825f8c18
+AdditionalInputB.6 = c99588caabf51144c25f1cbb68533923f02bc7b1d58e1d93
+EntropyPredictionResistanceB.6 = 59cd4c658fbaf427e725c9e3ef560be0ce2bee138ad2a18a
+Output.6 = f1d01d98a0eb5914a99f946e3427735da2ca44009cdb8e3d0c61e33c766a9f9d31b497cce087fd3b68e266da35d170777fab3583c85ca8be3459da09e4e240c06a00d35cdc55f66dcaafb6cd665170d57a06fe89a99921b87754a6b7a771fcd63d7af182ea013d3d88df998e0fee7fc4
+Entropy.7 = 0d7ca3f249ae5cf648212217024184acdbd6b81de6f36cc8
+Nonce.7 = 57a08f8bfe061bc7ea984f6e
+PersonalisationString.7 = 20530aaedd65d2631b9b071054ddbf3f1343c5c5d82dc8a6
+AdditionalInputA.7 = cb7b060d69825dc8812861173f0dd1bac5e24e68901fd08f
+EntropyPredictionResistanceA.7 = 7df802051052251800b3094972e3d68d43918e86a53b7bfb
+AdditionalInputB.7 = e337bfd1b2b773c3fcac6baa41322a85dda5af0f902ae20a
+EntropyPredictionResistanceB.7 = 28d43a4bea93a961b909b5d941c727a947b2111e7739e3a2
+Output.7 = dff449e5554bee0a98b3f9d300e6d79f6e504fd4f369c6d7a39e50a5fb9ca1a9ac43ebca8261205d857a7ed85555928faa8dbedc273153f5174a1df66eb8902190c6fdeca4e2e088a61ecde5e1489aabec5ab0099f226049410c1070d65c62262071aa9229b6892b15869b8fe98720a9
+Entropy.8 = 07961f40c7f49f5022cabbb596d30955a935b06397669a96
+Nonce.8 = 7c8f7fc25266c5f89a2b359e
+PersonalisationString.8 = b7054462580b88063f86a4f97853fd226a4827da33a8290a
+AdditionalInputA.8 = 824c8c5f231b205038d1b09152b0c76a66b187c09103318f
+EntropyPredictionResistanceA.8 = fa3590da3c4e8995d1c038f890ee9b277fcdd7885967ee31
+AdditionalInputB.8 = 6665ac00c8f31cde6435974ec40e012aadc2ada9b54e4eb5
+EntropyPredictionResistanceB.8 = 5ff47f4a10710c6ead92e1088975d414c7ec272f9bc72ca0
+Output.8 = cb7dff395f21abd59b8ea945e8a2d471c23ab50dab4863f1e79c71426d080098465f0b2114d266ff4719c0b567f20991135288f40873a95ce1cbc5db9b7e699849b4abf542f37e62ff813a1ac9d2673ee6afde967c8a031c006fc6d7d6a44ba71c3be31578714c2ac762458501ae45fb
+Entropy.9 = 5e374c145b693ab9dd42bb0d5445628d28fc22dc86103f1e
+Nonce.9 = f33856062ded4387045893ad
+PersonalisationString.9 = 24f75c8ba623c43e416be927beca715b121e3675ddc47c5d
+AdditionalInputA.9 = 0a28fa8a1b4ece7b3b42b922adb26459324f23e6f3ab7ee4
+EntropyPredictionResistanceA.9 = dd5a3d43a86e39f8a493afa7dbdf4d85ddfc23c2299d5efb
+AdditionalInputB.9 = cc9cd9f2aa8c6074b9eff9ff85590a5eb007e1d8921ad1c0
+EntropyPredictionResistanceB.9 = 73b54d22af52768f5f6664eb8605208aaf0f79558d7b20b9
+Output.9 = 565a8540b6c2774624709caaecda2d6ddcfac2cb3a7b8bc88bf8fd7bc532d2c8057d30ceb4c544bf7c062819d112776c4ead2e1d6b92a6a069f520301566be197c432298e2d94ea920165fe0298c1c8f7e5c688479b6afd4fb0d8c467fad228d8ad74933ba7cf71866e35a531ba726a3
+Entropy.10 = eed447bd7d394c3fb67fbd06afe340a2a4580b6cff6ea6b1
+Nonce.10 = 1d78b678192a694159f3f124
+PersonalisationString.10 = 395679efa7d995f07b8326e7a0bfe59a60dbd86c4e3a6133
+AdditionalInputA.10 = 0e54e19693567c39ea54c892d24bc5a22ffc890d87679518
+EntropyPredictionResistanceA.10 = 552d7f52a2a189449c5e9eecf098fa976bfee5a6d383bbff
+AdditionalInputB.10 = 9249f593f7e20e0dcd5b97e6bff47767d01c489fed75e1d7
+EntropyPredictionResistanceB.10 = e721cdf418e5701f32e269221483f40db63172a11e5af1cb
+Output.10 = 71c4f5c5627fd4b13a6f8c0409b8883962f15084ef0806f8e510391d90ec37ec91594e367e19d84c0d8d726c861406d9a347b0a1d0f971c42004f9001388fd984933f4459f166cf7087572ca6ff06dfc299de7f871b618c79b86634fc94ee62aa81a706f28dacde3c988f0e594d9f85a
+Entropy.11 = f19c8d09c5dc4615b7fab8cf830cbe593cb4151c676f9d77
+Nonce.11 = db93e1159703b161cdb7d190
+PersonalisationString.11 = 36dee8b38aa3f08e65f760297070d609cd253dcb00ffc33d
+AdditionalInputA.11 = 3f73baa2289413db7cd665e1976dc4232f342066a3c20045
+EntropyPredictionResistanceA.11 = eb87eef3115d479e8c876d2d76bc6355a56c4b84dbea2257
+AdditionalInputB.11 = 8736fe3f649a5e9ca7ee86f2b624b126d5be607a8416bcf8
+EntropyPredictionResistanceB.11 = 609c3ee0123944aac0902f7be35f67984c9719117bd0b82d
+Output.11 = 27a1aef4fcaf6eafffaf7e1dcb171069780ea52d57ef96340ca11b8ebedfeb57d1a77f15a18f58143d0e8fb95d056d6f61603e8de62964731933b92b6e8febfd4f9afed42fbeddbb60b541048406a5226a75ecc5a98ce2267ec7c0820da27d261617c5f99013b3682cfdcbc4595b408f
+Entropy.12 = c4ce4fcbe3219d8494331ad37a2482645c7311da28a7fe3e
+Nonce.12 = 651fc4082c2f9ae238768dfa
+PersonalisationString.12 = baeac8881d1ffd2c2da3f8adc74f86553fe6a10ce3c46d38
+AdditionalInputA.12 = 96d1aaed42d488621b82a26e27549878ea04fe1185b54a34
+EntropyPredictionResistanceA.12 = f87408c117f07cd9cd167c9ece5cef6f796c5eba6005e652
+AdditionalInputB.12 = eaaa8c69ba87ce2858e87c1f793a0f412eecd4246192197e
+EntropyPredictionResistanceB.12 = f1aefd8684cd70892c38365c09e0b9d407db316ffafe02ab
+Output.12 = 82384cf178aa7e2d4b6867e463219c8a0d1d8ebe7843d62c30e1daaf64a7a120596737d327ad2001ea5f57e2f67acccf86c68d35e01fcbea4df6769117132bc1d76787e984589328f898ea9738cc9da79007ae2c7bee21c3d2cbcc191f92671ac6636b13873a9fa635f5b09913376f28
+Entropy.13 = 13ab80e785a9c87896253635ece18947b46eaded1bbbf430
+Nonce.13 = 4c06e79f3694de2cbd1051b5
+PersonalisationString.13 = 8d9d8d3d669cf8bede6b9d3055c967a507baec7d211ad872
+AdditionalInputA.13 = 0d611798f84e15477f598db79d1040ea8bad0fdf48e87785
+EntropyPredictionResistanceA.13 = 4e3c5f3537d7a94543e78eddb123a4aebe37ebd64fe2389f
+AdditionalInputB.13 = c6a9d83028f67c0072f424900f4c584dcb0c2860ccf548e7
+EntropyPredictionResistanceB.13 = d7741348206afe30291c5715124f479b19a8204196b2819c
+Output.13 = 0542e8b67bc773e9c8080a79f01fb9557bb7c3ae39b853ed148e95f420aed110f42181d4c1d3e4ed799f6f5b42ad025a921f4625055ae456a57befe3db683a76b668cea9fe279c6fbf0638272fee90c8d85d41c716b05a61e7323804f7dfe96a0cfbbdbc2107834537449ad79439723f
+Entropy.14 = db977c5b3a1e7961e64d99666516fe5612b151956ec51add
+Nonce.14 = 05fa0936e2836cd2e8e4cce9
+PersonalisationString.14 = 4e8c5ffc0998b26964ab2b42cf213d1c431794bc40747617
+AdditionalInputA.14 = e4eba00e64d27854c06dcd0aa2cd45b47b7fa2cd77a7a146
+EntropyPredictionResistanceA.14 = 16da818974eb93580db30f400cff3ee1a3af01e121e3cdb4
+AdditionalInputB.14 = 11116d2480298a9091437a49c60b9d0a9d4cda4fa85f095e
+EntropyPredictionResistanceB.14 = 72f64be911cba5056bc91f26bd335d59c63014227959b0b8
+Output.14 = 3970775aeb3de41b7bf137d5f5ffb9b7367601213bb5f1fe07ca609b6d3bed56d267a914c2d9793ef9907bc17f1d0c5d011d9be4565e01ddc27eb2e9a03e37f0824a5d32d34b94eb64f7114a5cce463dad0cdf5e89e5f337ecea10e3393e2b6ca61e5d33c294bf908bf7987cc9e808a0
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 4a4e743f877ea6e94e545a56ccb5a1f99efc7eb1e8191929152a56d41dc92425
+Nonce.0 = 33b7ab9356acf7da03d3d6773b61f8d9
+EntropyPredictionResistanceA.0 = 2e148f9269d00a162e897a91f3aca46fed1e2adbab4f848218f288650dab8b1e
+EntropyPredictionResistanceB.0 = 2566475353ec8ced47d03b76fca779d0668c95136cf7866259d9e3b7e0d1f74f
+Output.0 = 924b74d6ba3d56dffc0de00711e3010ccbdb730718743f0cc0631931434b0ffc4ad6d5ef96fd81f16e51a10206f674987d1b52f0cf15d294c98bc4a877f4716c0ff2c2484d3f057eafd09154874aa2a213a2641da1a3d7be6988616b6bb483cd9213ed750858ce85811b8f708dcfd607b383eda845c87f60084db7a0500643b1
+Entropy.1 = 72884ccd6c855770f70b8b86c1ebd24e3614ab18c49cc9cf1ae8f77b024973d7
+Nonce.1 = f1427dc63f292decd366513f1d8d5b4e
+EntropyPredictionResistanceA.1 = 389c91fac2a3468956083f6273d522a929633a1de55d5e4f67b0677a5e9e0c62
+EntropyPredictionResistanceB.1 = b28f36b2f68d3913fa6c66cf628a7e8c1233719c69e4a5f08ceeeb9cf5319831
+Output.1 = 527ba3ad7177a449420461c7f0afa5fdd3b30d6a61ba3549bbaaafe4257db548af5c183d338d9d45df98d594a8da92fec43c942acf7f7bf2eb28a9f1e08630a8fef24890910c75b53c00f04d094f40a7a28c52df52ef17bf3dd1a231b4b8dce65b0d1f7836b4e64ba71125d594c69736abf0e531286abbce3081a68f2714f81c
+Entropy.2 = bb5e7185629c902eab26157d5f365ac22ab04e3ef1cd655ca9bc3d6ffe51a156
+Nonce.2 = 3028a2bd7fa304d998bed4268ab0368a
+EntropyPredictionResistanceA.2 = 6b068a8f314ccdea3e1995300e46eb2193f1671d32b8197961fe6bd47fa50a34
+EntropyPredictionResistanceB.2 = 86ec5593305dfbe96cb0ecbf9cec5adc918fdcefca28c870e34f438bee4c9a30
+Output.2 = 308f9b7479361959de0801877cdbc8207dce5cf94d3241d057a32ca821561b327cf6e3a386e5e5b80a0ab2fba1b00623f91442379202989ec8ed923dd37ac0ef0dfe3ff0d3107659ee0b85b400163b7847bbf888f4eb004a30647a20a384fcf73b0a6020322215fbfefbd5919bb6f32ccc463f4f95b2a641869f9c1a1d9fea88
+Entropy.3 = 366881758bf9f480a68c12775f6a9e14de670b24934b4fe52b70cf9abaef5ea9
+Nonce.3 = 8670dd01b578dc9cbf51b2ef79d23e89
+EntropyPredictionResistanceA.3 = be7a50f0c4152629c9de431bd25fbf7babd8fcac3087e1dd02719c7acf468ad0
+EntropyPredictionResistanceB.3 = 6d2ffde8781edee504d335614ce26b55b20da8b149d93438a4ea20dc17a47ae1
+Output.3 = b5bd0c2461492d9be2b1f9665838c6088892e414a709607b9e9bba1c38bf654349e2f5bdb8f47ee28c245468fad09bcba8bd2b1cf776153a86c17ce765a9cc04bbb221d8a20e89442df3436c4ca24d053a3b67241d6f6194c2de39168a3b52fb96b8ebe73fbbf4e37d174492121da8b9f18e36ec60d67d573ca0296396f105b0
+Entropy.4 = 8b09a6403914eedc1ba498d1f1e74a8dc0b25bbdac27bf523d0bd86d3245ded7
+Nonce.4 = d9e031b12ed7c1929cbf2688cd2690ed
+EntropyPredictionResistanceA.4 = ee7aa3a77c1b656491ece28e763d9c44934b4074dd519dbc26d7e158f54f7ad3
+EntropyPredictionResistanceB.4 = 36a6f711cebce6b478d307c9e827a8da8f734f0bbec6194a45b55c3760020614
+Output.4 = 1c6edfeecdead97107c3fb98340372a0c6328b53b76cd1526e91fb2672256d80b8bbfd6973a15ae2cae5b515239c2fc6e008769fcf0845ed457069969b517fe0ecc6ecaf62f5c903a4a81b1a2bc643e01b4ce9edbab7cff1d49b5a17d823a23694777de346b8bef356ccd48ce00199d6a2706f7eac639674246e1efaaf037089
+Entropy.5 = 19e10c72a01a799e6480a7763c3e832199f9ce96b2ec579e061693f5f63f4b5c
+Nonce.5 = 5788fa8c649329a4cfcfef750357fc38
+EntropyPredictionResistanceA.5 = 5cb0c541b272c0237d4e57916687dd17f314238b7b043766fd162acf2540de83
+EntropyPredictionResistanceB.5 = 79a5461f51d8591a5690b9e497219dc84326a5addaa823488927a357a4823a3e
+Output.5 = 4b6482aca6529fd4473b2052a626e29a058cab84575bda80652973bcfda82df0a85202ee135098fa234fd9336249eefc875c5fd7a9c74d6b303ad383f9f3a266b18dcfd4057c384404a1e1d0f718256404ae5191f51ad1ae0187a555127b157026bce36a40824f25edde2dbb099865854504acc3f64e1a626f9ef0999c3d4572
+Entropy.6 = 6e402c0e09cb56161704d8470fc4d7409d4035411869b174e032902e7b1e80dc
+Nonce.6 = 691abf248a012704af3eb4634def17a5
+EntropyPredictionResistanceA.6 = c1971cd36b601762c1a587a2906f8eb9edf78c0ae1724041b8590a41528daad4
+EntropyPredictionResistanceB.6 = 1810441a3fdb0b1cab722ffab334451d7b03da2663dcc89a1f66df0c0d68b700
+Output.6 = 366a904ab880c855b9bdb7367855dedfffe464c3a57dc25d6daaa44d3569d0fbc55efad5805fa905e77b9efd1d9928482100a4886e3d66ad8cc9ea0cf256f3e08f8190f68dcba784e14e29679cd821e84c77386c9d2c3b4d34af67c6acd7bfe819f6985ed6b35092169e4f8971a068be06f64c6432550ab6a3e50a4e1ee449ad
+Entropy.7 = b15eef0f58a92c72be230e925a94fe8c284455b0182c17ef43921448142a7d82
+Nonce.7 = 2c0987aa3cfcc8a94e5ca84e2a69a091
+EntropyPredictionResistanceA.7 = 0866d74ab9d2bf8e15826b2670c7b8fe05c9e39e382daf19e28025d428121263
+EntropyPredictionResistanceB.7 = d7f84c56f99eb3703eac2d34ca5b0fb0208d048f06f091a0af24607e847c684c
+Output.7 = 6c8a19836c838ae5a8b7d80f380ffad6f39f4abdec7ba336372897a8db73bdbd849f4eca8cea48bee3397a8688a1f7d28ea98fec22f7e8fa43b2d12e4e7b63c0da0e9d4481f78f78b5558e89bc5ccad9e121653dc3d853fea092ad1948395218f0da33e15e30e69f15cdb986040849bbcb0ee1f6f8dd0af23706b91b7c9da9bb
+Entropy.8 = 78621959f562623ac266a494b74e939912f1840a5f2f74f273227e099bd69f3c
+Nonce.8 = 9f6c09e47f9ffe8693714cccb855b90f
+EntropyPredictionResistanceA.8 = 408008b0e7287639dc6d618681d632f761b9363fac47a58af9c4d26f3250dcac
+EntropyPredictionResistanceB.8 = 5ab24c6427445ea73c6d289ed357b7061f50fbdcc003deb1f5166227170458dc
+Output.8 = 15e8e777add9b618cd95046ef7ead4411d4bfaba79eea2aef0a4d61130613ab6604691d1dca9a0197080bd3641ef0cd3b27f0d60d30cf636f19b642d82a5147853d3e6743f7007f37f45b30e7b9d51d7599c656aeebc492c719dd8a65971f926b5fe1e4bdd97385f8d3185ac4a358d2d003f74beecbe2ee4de138f00888f3f07
+Entropy.9 = cc6bfd9f51bfe6325ebc81b57d2dfffb68a9bc8e53e9be624b1b6a6ed8ab8982
+Nonce.9 = 21793b6abb66ecb8720113e7175e0021
+EntropyPredictionResistanceA.9 = 15f08801723da80138c95d3b9245296e0df3443cee145a43329b67b2cf08dca6
+EntropyPredictionResistanceB.9 = b60c7cf58d190d3c8de53955253f21002eb1047abbef65961b490412ccf13c31
+Output.9 = d4e77efef0cca9d52c2ae84df2138f3d5f035a6750fce56e76e6f749a498cdc7c45bd662efa2a6b20d6608185fb7937926e47e96acb0f662d25501811a38b19116026c4b1457089dc5437ef8e421573972994865f406a83b6b8fff149d02d1d7a72fa276e8d1bb58032abd943a294cf355579937c8ede49981b967af308e63f8
+Entropy.10 = 20d5bde624099b8afbbf2afb0da8bfac746d2a83ffd40c94e1a76b4806ce47fa
+Nonce.10 = 1c7b831a2e18784e87dd097d9e23f96e
+EntropyPredictionResistanceA.10 = 4d94baf1b0e821612d80249eadb5cd9e6d6df4b4b73c84e9b36a2298a9a62bd5
+EntropyPredictionResistanceB.10 = b101ebee16a3a76e92dd942b3db354dcd9d5e1333fbc9c63c4b3f689213eae95
+Output.10 = 07190edc914fed95060e30a9d5af5b2fc3a2948d0c27b9399b5cd3e120ebe406058cb561eb6a82148f23b327ada2ab2a7bd66eb895ffb0f7cab7e891c6d6cb58b51986b2cfebfb2bae1a674ce6ac4cdfc14367c45cb4a6b9105795e1afe83913f9a97577b2aa3a642ecafe3561feb1196db44c1ba54fd50e97a4268def4ab0a7
+Entropy.11 = 678101e1f0da00ca5a4253037b3f6c81394827ba56b49f55e60cb0ff7236215b
+Nonce.11 = 3854e04188c4f382497d5c820509709c
+EntropyPredictionResistanceA.11 = 6c4f83e8f153b2d1e440498eace1d789696f394ec3388a8fd9f33bfe283870d8
+EntropyPredictionResistanceB.11 = c10c493f6cebca9efbccbc7e2fcc15f304bae749e3e92f7de800307f3ff65d56
+Output.11 = 32ac8ec14feeebf171fea5bf5dea300a8bf3ed64b2899598d03f867aacf461f6bee7d84197f92f123319994b99f159970505a0bdd5cba4cdd5d5c1fa08d3a493032f8022596f57bbad618793cca9e89aa60b5a1f9d80a11ed610c0cf5c89dac8c7eca355d0196454b424eb2dc8417efeab7a21982d742c15d3c778004343bd3f
+Entropy.12 = 66e19001ce63e31222c3ad8be88abacef3ba8b47a1c597ab2dc805b715f74c72
+Nonce.12 = 2cd3618e71b3be824f19aa14996827f0
+EntropyPredictionResistanceA.12 = 1c301edc3656ebf42f763c7326a1d4ae80cc85127b2ebdb31c5fa73ab0b8c162
+EntropyPredictionResistanceB.12 = f7ed98424a734ca2f4b4858071386c8ed6199bdbf90467327edaadf396954e27
+Output.12 = f2e4fc9495256762a24e67c900a5932c8291fd52cb19a20ecaa669ab0bbebf7e03e2fddf3553246262cd552ac30cbe068d582406e6d5ba1e33c69a4342ac0e399a136415a3d5466d2b5989399538bdf873580de87c2b95fff8d6c4643ffad6f60e003e03de7d5c6638477a1465166c892ba57929df1699bbe79e3d0825aef24c
+Entropy.13 = c96975bdcd2e60a949faa665f6681c125c5473543a8a166975ffcb794f302f19
+Nonce.13 = d9e1afe26d7bdc28f21a0f1294c4de41
+EntropyPredictionResistanceA.13 = da316866990be11a31bbe2e8223b643d0159e9afc290a66ab6ab2c1b8451e83c
+EntropyPredictionResistanceB.13 = e697e0ff333dbe1e17e1cc1bab9ef079e33b92a2c5dcbd6762c09bdf34dc65cd
+Output.13 = 6f9880e3e46d67a8774586586f6904d2bb8b7254bfa3455eab57e7ffd8d7372e81f0faacfc4d7112eaf1181121abb6b32e74ab297fa0f1c0814d6298e80f03603de6c8037db12ff88fb6d40a2ffe3fa32c5fc939463a34137da3cd54275906d070633b51ae44b778a5f315cfc75b11cf8c9f5478b1bfa0d571ada5b603698760
+Entropy.14 = ad5c8a0bddd7134919cac1b1290b42a46ca6b0e78f5916decbd0602e2e0f0469
+Nonce.14 = 3fed8f8bdc66aeba71d6a6d861be1dec
+EntropyPredictionResistanceA.14 = 7878f19ca82c6836593df3c2c56820709368ddf798722da6976d9a7e04597b3b
+EntropyPredictionResistanceB.14 = 617d1c594ddf27a14a385a056735af8af3f8ab233b34b94a203b658ac36aaba7
+Output.14 = b6495a46723dec63c692e053481bcb904efd32274e52ee4d6ddc2419152c78e343985a61252ab0520c1654307155ec7ee8ec943a4d80a41ae6461b4dc93e7d16319191ef26c599826f6845f64a6c87942767c113e7b02d483e8c338a13a88f774d4b29301030ac2f189ca299739b2f160f638df22185b595b1b68a2dc736b164
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = e6cb69220ef01bb23f8879a508be049ec7e8dacb898e2ddb75cef6bcc5a84a3f
+Nonce.0 = 4429e3d890f2b6ef9a36f21286e9c885
+AdditionalInputA.0 = 46f518eabcf170eae6ab571432269e874dff27a66f2c2f792a695b4f68678e3c
+EntropyPredictionResistanceA.0 = aaecb8f54221c7176e2dd941625bf84eb79e9c53c8d1a5569a33dcb4c198e627
+AdditionalInputB.0 = 0aabce2b5bafc3314db0605d85b80edf9561a0e2e8d4e408d53f551cea6a558b
+EntropyPredictionResistanceB.0 = c72ef4489b151dbd6e8214887d3ddc48043e21a4ede40fe6f1ecbcd5f5641be5
+Output.0 = 8a5b386266528ee2d5e197f636748ea878508a1a0b805473f44cc60f8bddfc57387dc958ac51b3fabf077b8939d21c9424a663c5b0873c7977ca2ce447699a9e39e1ba5e51c6619127e9f18bb6abc2d1831d95bf34f4f81da6c79eda485944b4f7043e4639f6bc8855c1c017cbed40e3bca2eac4c45ebfc69f7a8189e76f51c7
+Entropy.1 = 5df214bcf6b54e0bf00d6f2de201667bd0a473a421ddb0c0517909f4eaa908fa
+Nonce.1 = a667e0e1d188a8adee6974b355069bf6
+AdditionalInputA.1 = be13db2ae9a8fe0997e1ce5de8bbc07c4fcb62193f0fd2ada9d01d5902c4ff70
+EntropyPredictionResistanceA.1 = ef4806a2c245f144fa342ceb8d783c098f347220f2e7fd13760af6dc3cf5c015
+AdditionalInputB.1 = 6f9613e2a7f56cfedf66e3316376bf20270649f1f30177419febe438fe6700cd
+EntropyPredictionResistanceB.1 = 4bbee524ed6a2d0cdb735e09f9ad677c51478b6b302ac6de76aa55048b0a7295
+Output.1 = 3b147199a1daa042e6c88532702032539abed11e15effb4c256e193af0b9cbdef03bc6184d855a9bf1e3c223039308dba7074b3378404deb24f56e814a1b6ea3945243b0af2e21f442468e90ed342175eada67b6e4f6ffc6316c9a5adbb3971309d32098332d6dd7b56aa8a99a5bd68752a1892b4b9c64605047a3638116af19
+Entropy.2 = 4232beaf0aff2977daa6e0fb533b0e815a97bee1fe074246d13de4f4a2b5ac9d
+Nonce.2 = 5c473916ee5627a50845fe51de2e5c1f
+AdditionalInputA.2 = 0ce770757c2da6613efcaf045864a5a2e6c7701cd3030151cfd2b99e47a2d102
+EntropyPredictionResistanceA.2 = 063dff938a7841ed014adcdd63e9a7260adf5b1ee394a80156b335a0213068e8
+AdditionalInputB.2 = 52449d3e1ff45c41a127c736177f8b8798ea729ea01aae96c1123e2d47469036
+EntropyPredictionResistanceB.2 = f82a76e4ad74fed3f0d973f40d4a5ea2576e27afeee958983fd935a33a4e5acd
+Output.2 = c8f55109ce9c1bf2fdf465f286030458beb876521c784e214ef3ee4c498266c937d72cb01f9f8e39f264de500462c0b2f7620d45f5af42d8d0861a489344751f9bbcd04445a1e7142c572fca125e6b415076a6b6fa957ddbf4f60e1f8a70e06e4238421df42831130ccf5f00068c6f430bad82288508edcda55f90f68423d012
+Entropy.3 = d7fa2c7f79ea5806cdb068da237c487e232ccc6c31a89558616c77761191f54e
+Nonce.3 = 120ce00327f18bfa4434285e116bdcdc
+AdditionalInputA.3 = e21966c67bbae7dd7c535679ed815e56115ab1aacdda1f818db8b7173de348d8
+EntropyPredictionResistanceA.3 = 830a728212152d8fce7a41bfbd16029be52ed3890cf87d48e6e94cea9840e5b0
+AdditionalInputB.3 = f16e3a14084e251ab1d5c30e52a0b5874f4311dd75ce4da5402faab6b24d1863
+EntropyPredictionResistanceB.3 = 74271522e09b4b138cb716dca12c783d2313d65265c2f922862da37f63a82fba
+Output.3 = e493f9164ce01748b6e04b590aaea9ca8759aafdf784ac97cbb171c6451c49809d0b0b635ce7d45ad800ba154d2731594eae5df4e786e93a98fd64fead08ff770a5d5197010f0fe264945716c9ab24365be1d959b69be16526e54a70bd400fa556298bf10417c15eb22729f185e94eaf05488190dc11dd7feb3113604d1b7db7
+Entropy.4 = 6df0e71998c816a5218f45d83a11e8c792dbeb73bf78ee379de8c93d4153043d
+Nonce.4 = 868f8cd429e3c88882098b62477d2a0e
+AdditionalInputA.4 = a4101b8a6cc3c49f90a3ef2804384dbba838c7f23e913215ed6a4dbb12b0fd9d
+EntropyPredictionResistanceA.4 = 45e7d024e200c2608ea7faf51e091b30b11f842aab7a1e395811b8afd961647b
+AdditionalInputB.4 = fb8832fce7e8c2312952b8f955ab126c0b1d6412b67407e1649b920a5b351ff4
+EntropyPredictionResistanceB.4 = c612cc0721236246381ad2010b04c3bcc702ed99331a2d9f1dc236c1422c52c0
+Output.4 = d3e5fdce135874ea1fa7ae799e816644d4628da215c8423ccd342adb7d0bd71e4f698e0c300fed15b99fb532f1c1a8ba8c4c4fa74d52ee5cfc19dac0c63f05684cb0dd5f05d359dae1bdcc0a6b2386aac56c843f02de43de32643593af5017589d72a1f4384957c1b4129f7368788c335ed433458ef3d237e88ca6db1361e032
+Entropy.5 = f910dfcaea1555aa5f805a0b9acc909fb44c3ee5ca15e89bbf9b03e7e5a783f6
+Nonce.5 = 8645667457c215338df3550b92a44075
+AdditionalInputA.5 = f582ef9ade27ba30d184378c419573b2afa9e3d499f1833bf5c6b0ab854c99c1
+EntropyPredictionResistanceA.5 = 25034548a7d06e833cc6481cff1ef2928fa6492fbcee401fd4f2ce14edbf6037
+AdditionalInputB.5 = b7427c587ba598d7a9524274904424a943fa4e39e9731d8c16f28c6389c8096d
+EntropyPredictionResistanceB.5 = 30ee54880a001c92d620f77d0dae76bdf73525a451cbd5e45299e894dcdb6a1f
+Output.5 = dc962b52652ddc7d1befc09f8375f1e9d8ef053e61683ed445c0f8dd9789fd7ecdaa6117a83d11a9feab378ca4f6f63c8c78d7f53208b162a9519b4f13bce80430bde390089ae547bdfd92bc2a9ea4b449064fb8a202456ad8900faa3f506a61e31a145c847ab31a8f18dddb4aa2e2b8fe145c19ecd86c353ab75e1b30ccd6be
+Entropy.6 = 5b1ba0a2bc9e65e5781b8a0fb7c989691028493fa3dd420abbefaed705778004
+Nonce.6 = 6dba8e8dab73240a13a0c8102a6e702b
+AdditionalInputA.6 = 57d3b51558f1bdd35bcb7f3fe961862b40dd39a6e0824a24c8afc12713bab584
+EntropyPredictionResistanceA.6 = b1b3753cc8f340947fec0030e3dcfbf8c0cd05d232ea3feedd59cba956b9c368
+AdditionalInputB.6 = c694b56429038095d2e291009f4cb201f260b8f3fce046e5d3652afe5004deb2
+EntropyPredictionResistanceB.6 = a1b23b91077595b74cdb10895082b6a71326b9bc7256c81cd2126c15aff341cf
+Output.6 = 09b987fff1f6c74ea0a82f06f2a511aa32f3eda745ac242371ef28e186ce6581ca9c42d54a3846fbb4e31c9646648cbefdec67fb91d16433f7d5184641a701403a53072f87cf208eaa850070ea24327c39c9dd51def72d8de2b8d614084142c8231dcf478a81070a778e1ef341d912ec01ad379591054901481bf2f3c52d5107
+Entropy.7 = 14466cc3ae135e1c5df0e64e5702d5c1383287b7c287116b50af7a4b8a051aa5
+Nonce.7 = f103e7d610a49ad4cb052cb70a949191
+AdditionalInputA.7 = 4faffa538c3b342f8e0bb8ff1275a32a7326d8681d6fe365ba4410c151533753
+EntropyPredictionResistanceA.7 = 25d53c1038e6d4d671b4d304f4d1534a4b69371b684f0681aeca3927dc15e2db
+AdditionalInputB.7 = 8ca0196001abac311df05bfff77c03cbbc549814ae12a4e9e63a1675601d3037
+EntropyPredictionResistanceB.7 = 14083933ae1fbca3ba535a7c63a9d00029cae18330d50968d31191acd793815f
+Output.7 = 1cf572e409630f045762d983713e57dd5af5c886b429c4c8c8b3c17485c7b4c17f6dbb70bcaf86879c9744c188b83c60e866c15b3b2b9a5dbc95c7e423fc263baedb7578af8a8c4d413e3ae3d48865dc2acdb43944ea230b1be651639d4c9b2f39573b999babc0a9e71f913dc247220110a17fd9819418fe7e315a4a2cf41582
+Entropy.8 = 2c82c00d40a279a5806ebae86a2f84a0603ef013043804415410fe2a554a7b5a
+Nonce.8 = 92456203d40d8162f576d92f7a833827
+AdditionalInputA.8 = 19ebc711151e6bab2b03e5170d97394bc3bed3dd7689a903a021855fdf1528a1
+EntropyPredictionResistanceA.8 = 28d15092dc0686fa2057e0d943ee6f90f17873bdb2e680f71d6614f3922496d3
+AdditionalInputB.8 = 4f8f25f18c5d1f5916d0887516ebb4f0510e2eb2e496a25330c84a17008ef6de
+EntropyPredictionResistanceB.8 = a65952feea929f7994b02bb7310bd5c09ad25aef7aa14b9ab458243308c29049
+Output.8 = 756e88cf8dcb7fc554b8001d4281ceca5971586dc7f758ed51a777a3d45067d491154d6ea666ad36f0eba14900d87530f52f35a2ecb2af479aa4a10a6ca10b357ddcbeb5d0c2d16e5c0b235bc229b148a2573e051bee681fc680eccd6bd340e14a213536b62d7182ae1a1b168fff70cf1c101e28435e73ab723d1bd5778b04a8
+Entropy.9 = 38245010a81d999538844aca0709b1f5a4035a74d03bec5c8e94c5d081dbbadf
+Nonce.9 = ec559ae6ffa33243f6247f6685853fcd
+AdditionalInputA.9 = aa02faca3470043f2498df0b2b1adf6125cc03f092364ae0066a0c8f1cfafc15
+EntropyPredictionResistanceA.9 = 7aa18f78bb6db2d6eadc60738eec3d02494b2373e5cac5a36f8e968a8f201151
+AdditionalInputB.9 = 3a059c10c15c9dc929363d2d5c72b8b8aa08c6397ba74762cce774127ec79a9c
+EntropyPredictionResistanceB.9 = 202d5741034e0c50319e0d1921734df0b68f440cbe8a0316d0b64caca6e94932
+Output.9 = 34ea58a982de9d6e66dd73550f20b0d2e7a60258635b6a9de692cdda3c81deb40c439b3270149cb4a9625eeee3194615bc547fa8476b76fe0874b739e7fc726002b3b743fcadd7ee6bca0b2cc054482e586a44c986b0bc115ae51234e5cf37590e9584202b46a3f7893d8f8c8d345b5c8415a7084b420901f26192e9e6004ce1
+Entropy.10 = 08d1d0dc119901048b5b26c0cbd6b62ef7479e3d1946d40582ce61489321f251
+Nonce.10 = c11a0fbb89078143790caf5afe2fc66d
+AdditionalInputA.10 = 692b503da430e13b76fdd5f8d32c6b619b6e57da2b4578a174594b29b6792426
+EntropyPredictionResistanceA.10 = b60c3bede520fe9d29f9b07b15dfc2d60811f1a2b07eb9c6079e01ec96e1a261
+AdditionalInputB.10 = b97ea23ed0928da27e75e2ca665ca06a39b12b9aec87e6ca1f6f42ecf1d9bb4f
+EntropyPredictionResistanceB.10 = 425629b9849db04cd4ef59171332f6dfea5975c943555d79dedc4a96aa7bb23a
+Output.10 = b698444ec5a1d77b4828e0d1bb955bec21dadadfb45c9e2b75bd58beefba680ed5357cccc0d62d888417028fb838bbdc410edbdc7194b748f705a99a6630dd5637fe249c0530755861439388c8253fd8ffd6739c57f6ad85a0a65b1abb06c4c4a5bbb693528f4d7104e7d2c9b3378a2295ca57e60600498b6edd9737fe69fcff
+Entropy.11 = f198d7a7e018eeeb5730436fcb1932e33a554692ff2b2a4df975272240f48f0e
+Nonce.11 = 4f50cc29c42732824108681b25ff538f
+AdditionalInputA.11 = 2964dedc71148c8ca854003e6e2537ae18001113261f32c4134e7f38ce19ad27
+EntropyPredictionResistanceA.11 = ee49f235585e6f5356f9695c681909f0aa2de537e35968d0eaeca2003068b95f
+AdditionalInputB.11 = 80ec35d197d00cbb1ea3c9ce07717883050bb4078641a4b49290929ac34439ad
+EntropyPredictionResistanceB.11 = a6ca3db7038385964b861e568550da9aa56b6f0370461aa7001dfe4a66ad567a
+Output.11 = f69ed12b50fe0d369c651645e2b415e74c0efe9ce3ce7d6dbe198def316295b7d79ec9a5760c90a37f48e0f795b0a1b3aa16449c52fb984c7af6b5fcf20b4aae9019f55585ef8ae96a9973c352f62a344f79718c96741d5c0da98229e40c72a88e5dd5ad26379557e7a34c79f9ee504323146e17195f0eebadd11adc23979413
+Entropy.12 = 336efa88a753043371735c7d7d92ef5bd16b2c2e5b5d820b15f9ca1e940e56d7
+Nonce.12 = 60b52008ec2feff129f4b9644eef4d79
+AdditionalInputA.12 = e3810141a764a95f4aac5c69f6473f5d7c5e761334100de5c08b3fc98ee3a9ec
+EntropyPredictionResistanceA.12 = 22ad4b960d8688324e899955fb2657bb13c1c6766e9caf348853bca2e8bdf97c
+AdditionalInputB.12 = 4c0b19a1304a8ad0dff60cea0a8cd7da76860c3241cecf37b98034d8b9795c90
+EntropyPredictionResistanceB.12 = a042c2aeeb618777ab17a7b2ee7315870bac25ac86f14e067c2b3ffe58e03040
+Output.12 = 5c849490fafa45ecc5afa197d29083e7de2154166ef2b576cb30c95faa2c56a05be771cb01ad9977ac504039cf31a86661dd98d04f35cf60ff2502194fcfc4a3ec5b55d34580c76f1d9dd6bb928927b20e7c8bb4e407528c2877e5e03b9a85d33377592c4cc65719e6ddbc0658f5a2c4fed66b1e589c26a5b1fafa6c5b0aa578
+Entropy.13 = 5818f6b71c16e463f52e33e2c5073e39d7124f6942478b78929cd88608ad7965
+Nonce.13 = 399001fe40ffd1dc45eee3ee1173db26
+AdditionalInputA.13 = 2bd2826f4c23690562b22d9ba2f8a2ca15f4e8bc3b7da514cce17f6290c96e1b
+EntropyPredictionResistanceA.13 = 918cc3bdb056e76732a39b8d26d6ad862a801f76c0be5bfb60332a140ed9df85
+AdditionalInputB.13 = dc83cdaebb09c0659c962a689ca388898fbe943dda4c2447440a51ad77ba1db4
+EntropyPredictionResistanceB.13 = 3a303810753c7186296b85e71785b8aa6011bd2e2b6383f36582ab670ea23abb
+Output.13 = 6a8663e3279bfdf2aa8a34b1c0024771a4fc29c1d28ea6442654c79377abec2abb9949a60aac84ce9d1426a174710c92e4fcb16b3b05c0694e8005d7f84add23f33e951046f604bf42e9871aa62a85f48edc09dfd9c06f6e963b8c155d1081498ddaaa751b5cc2399445f3c45a73aa24c62ba1b33b8439b998b3d58b11c8a3c1
+Entropy.14 = 34a566b016dfe2dba4d5758b69108e1b31ed1f661f52c1c59271b68e850c1ce9
+Nonce.14 = 4a99397b723b55a76fee0e1175479da0
+AdditionalInputA.14 = 7285b3a207a55bdb589de6706b2becdd813d4335631892b3ac894a041fa8715b
+EntropyPredictionResistanceA.14 = 3d31a7806c62ffb648b2ddefbb0da4e3c3a21d09030299c818ebdd1bea890ca6
+AdditionalInputB.14 = f96e2f7b28cb6f2017afb77286363d7772912dc627f8030302f7c1b0a8fa4d06
+EntropyPredictionResistanceB.14 = b69d9dd1a78ba2f4b65d5b4f4c5258cb36c473131cd229ad010ee8b546fbb33f
+Output.14 = b69310fe7ba5b8e0279a1c40efb0fe2572ac7a0eca1937c431f6922685217da9faf88cc0566a9e2579b041260ce233acb72ffef40e749fd6b649e97d1d435ee9eadfd32feefaa39aafacaebd901e2ef37a2b67acedbeea720235814464f497fc060531fde7fc27c26672255537741362d4c139a98351b5a7336de8fd1b984eaf
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 5314e6405ceb2b26b4034502aea394850570650ab622c41090d0c15414a5a7e0
+Nonce.0 = 1ac01cf36c44bf789e53a0d6456d12ce
+PersonalisationString.0 = 8f09e95ad10aa3c2d3f8468e70ecfa373a3461de7a5002bd837d35a607dcfc30
+EntropyPredictionResistanceA.0 = 7dac9bba1000dde15e3d9099e1d7824b54d8e6241be478435aad647539c72d58
+EntropyPredictionResistanceB.0 = 722ed3424e3b586ddea0d37b6318ecd549667086b5e63e35ff85a734c4666b31
+Output.0 = c90b12cba054c272e05686ce79b48fbab4059db8311f9b39ad7e5e4f72b586354cceeb3adec29508396aeeb66cba471f208f28f49306c9501e1fcf221b1a05ded54a64cef14b617f9fb476a370984308f62ab586b11b58b5a95aadca1de8c92c1ed9ae5894fe7ed4ccd9887d666382cbcf7535c78e5cecbb0b1b97b43f59b97d
+Entropy.1 = c61caf83a25638f9b0bcd985f52ec4469ce1b94098701072d77d1585a1835a97
+Nonce.1 = dfc8a8e8034ccb70358b9094468a6ea1
+PersonalisationString.1 = a5bfac4f71a1bb6794c650c72a459e10a8edf7524ffe2190a41be1e253cc6147
+EntropyPredictionResistanceA.1 = c905a4cf28804b930f8bc6f909415874e9ec28c7530a7360ba0ade575b4b9f29
+EntropyPredictionResistanceB.1 = 4f31d2ebacfaa8e2017df3bd42bd20a0306574d55dd2ada4a9eb1f4df6fdb826
+Output.1 = f61305cb83601642491dc6253b8c31a3be8bbd1ce2ec1ddebbbfa1aca89f50ce69ceefd5d6f2ef6af78138dfbca75ab9b24265abe4868d2d9d59992c5a0d715598a445c28ddb055e5021f7cde89843ce5774634cf3b1a5141e9e01eb54d956aebdb66f1a476b3b44e4a2e93c6c831230b8787f8e5482d4fe90350d4c4d85e713
+Entropy.2 = 0180dc937f8f7f8210fb4d8ee6d39a03600f53c13cb4119e8d2408c342a94743
+Nonce.2 = 974ec79177a20f9ac6d6ac76f3eab586
+PersonalisationString.2 = db51493af49c14247a9870968e0c8bb6b1feebb8119b9832964be2ac512258ed
+EntropyPredictionResistanceA.2 = 7eb978ee6a2378459c9d84a58fb1d9cb9ee337b11a9caf7317993ab666bf611d
+EntropyPredictionResistanceB.2 = 8dd4f8d3eb4795c529a686ebc7ab62872f77703902b14f79c52eaecca6d008dd
+Output.2 = bb5cd6f9d13d5f6a8cea47c1c5bf08aeb3edf096cecc20351db8dd0353f8772d26bb8877dbca78f6ee5739d97083d9a583473c79beb1a3291ac05475bde7cfb8de8431571c321a740f2d505ef5b77e19bed24b0c9c50ae608d699b362683779027ebf77fe1e451b0df17ae62452ae011c79a7821ea6305bb555ecf19d93e1998
+Entropy.3 = ca72bd77cd5f9899cc1ff557e101acf8bf2e474c3e463945f825d612e396e68d
+Nonce.3 = 65a0200fa0497ac90f31708bce4149a5
+PersonalisationString.3 = 8ae710dc07d84b923c70ae73ed48d6964431c346beffb0d91e683a1290621919
+EntropyPredictionResistanceA.3 = 69b5ac43dfe1a22c21069e02aa7417459287491bfbfe3755993296f9b3709857
+EntropyPredictionResistanceB.3 = 8a1b7d75e8dd125c885a28d9f2f62ce539236f2e8a80880d3019239b166e0503
+Output.3 = 4bce5253d4b121bf8d9885334f6cfc345b604eb1be5e3a7c29dd6c879d0ec648b9894c61c155db99056050670f00b1efc0816aee2fddab4dba09b70e73d2039fb8fd9ed150fead330bc651fbe17c88ddd7bf49f68096398ab7b6f31c48abbf4810720c8584455ed0be4eb7a8154b491a9d68d7c3f15dccf8d9238b50768a034a
+Entropy.4 = 18c3b13088864d5c18cd0d01bc138d12a68011dc6e9d16f792adbcdafd5748bb
+Nonce.4 = 3b8b6b50a767639ea217fbe8c200ee32
+PersonalisationString.4 = 41348e3b0a50c7769b1fe23045a6ecdc47883dab235d9e4e5385ae26ceec3284
+EntropyPredictionResistanceA.4 = 056713124f6e5244dff12388671517ddfa1da08f1c7f2a0cd2a22ea8080a152b
+EntropyPredictionResistanceB.4 = 63f7d9ed7785fc6c596f8549b67fb7ef29b4599cc904e57341cdcd6fbc7ef352
+Output.4 = b6c84e76a840d80479e88f5eb5685520485211648399807eec8bb0070d13854acaea2d3e9a3bdf1d52ca2fa14f80dc38cbf08ea4ed26b1be3b9b1163c61ea119ba0de79bf44b45ecc3c9419a497d5ecefdd4c6fa2cdd2eeda812ffec237e4e54eddec3042a01f600deb9b6d93c50c80f15e8782106b8ba62e1fe5ccd5fe5f522
+Entropy.5 = 44499b903bd8161e4fec40f3bb587c78692069a69a1a259a24ea05fd1835583a
+Nonce.5 = a14c390140f9c80be8dbe3c885774431
+PersonalisationString.5 = 7b63eec1343e70a4fec845752f7bc9426b9f803078cc2cd29c3f1060b9a30edf
+EntropyPredictionResistanceA.5 = a75aa7db83294656228d0236616834161ac354c233f61f5c7348aa5568c6489e
+EntropyPredictionResistanceB.5 = 675aabc648b052fffe40d9e39535c84ca589f1c054303a6d975056b468818ff3
+Output.5 = 23a3aaf2c7631e8af9894b7aa02ad828db5e6b9a08a089811e0b077398be735b304de69a01f6fe72c75edce7c6f6b098dc93d905f0e95493b43d1fb501980056009c764383af4794a99dac4bc48bc40a6412f06247c186a410ab2b20dec312414e3d3774015d7b71cc5349d9e8dfa4b43b0a90b915d5a95ba20354b832561429
+Entropy.6 = 38b3102ca75fbaaf46fb456f67bd467667ca66d38c6e7b7a2e58afa34adaabc7
+Nonce.6 = 768ca3f1714e804f3fc2dee34989f035
+PersonalisationString.6 = 4cf747f77afe02c76e82cf023dea00d9eb209f0e1d963d262b3d6a753ccc0de4
+EntropyPredictionResistanceA.6 = 309dbc82ddd2300c7516953f7bc8ad0f8ecacc7a93a26f0cc1cad9341fead31a
+EntropyPredictionResistanceB.6 = 91db75cbe38ffaa5c59d363ba3fd22533e4d2ffdf6af301b58384743de051fe3
+Output.6 = cca390248d1c819a4f450ea5656372d3b1943f10be61390d11a3ba841f34093110f5fbfb4fc8fd56058c1fd0c5d9911f51ceb3450be4e5c426b76a36a816ab44ee21d0a78565ab3e67fe41bab27d04ea68ee8ef0f0f639b2935df14e2ee115bf06c6396606ee28f9131390592474153c40812979ffd79fdd7f82d56dddb41a53
+Entropy.7 = 7139be302d9b1667e229291490901c8cd6975b5b0448cfbc14c1eb4b584691e0
+Nonce.7 = 88844533e011feb2f4dbb18d4c69607f
+PersonalisationString.7 = 1a7cca1124e9ae9d8252b955975909637295a88040e64f2cc1b571e01a112da6
+EntropyPredictionResistanceA.7 = 683b52550fa948170730961e5aa852530fdd9179610a6d26f36595ec2df1778d
+EntropyPredictionResistanceB.7 = 06da943386a4fe57a6fbd538324495847e74a589b0be570f9825688e7018509e
+Output.7 = 5f48398a153dde3fbd69f68065698b40c87e8d9ff84ffea6262a01aa96114a5892e898f39dc0b41a64f28bdf3390ab36bd10bcbe54bdd458bfc42036ed27f824468f9dcea69c920a34f54346bea957cc190afdf3d98b98465a891486463f9c0c0f7e63b88883a0cadff14922390b17b16c90062c6b4a27b4e727cb87d42c0161
+Entropy.8 = 90c27d2c57d530bef19e93317c30bbf06b23a0ebb039335844181aa9c1337306
+Nonce.8 = fcfd79afca0a8eada3377ae013bc643d
+PersonalisationString.8 = 8b524146ef7766de475e82720dee1c2e57061b2fd5ccbd4b95004ef33dadf281
+EntropyPredictionResistanceA.8 = 022c5c9e04b7f7096d0fc76259c09e7458168cd5c39cef8e827f9da4b7ac7dfe
+EntropyPredictionResistanceB.8 = 7627801da4b3f086882a5c3ae9686f953ce41b81c39622f52f756292e248f853
+Output.8 = 45fa736e9e4f454c9854822d637d86b1eadf5b41c346ffd778ef5759f4e1b92ec277c368d573df854aa53a2cc648f2a6e83a5d35d3829452a5492b751d337299fae35f99dfdc1f688f727baac58ca7d26e7226d52f360195aee03a4214d32b459ebfe0f5774f5b1fe837806fe679821d348cb82db9c859c6d849138da5b1f2ad
+Entropy.9 = 6ac0983aa82d1ac955249f9fa2c476dbb963526c9b396d5097760ba79f873f45
+Nonce.9 = 2098a323ab6a9ab45d3147c42d6eede3
+PersonalisationString.9 = 6a736afe4a7fb973fc9b6cc5a022c2e06a1d39b0bcfb24e63d55daa60165ede3
+EntropyPredictionResistanceA.9 = c1c161c0c9a15f47c3dd663845143c30889c3c706d14704805c2f71724bc3d0d
+EntropyPredictionResistanceB.9 = 43d4c5bb804ac663ed42a48d134b3221505efbfd46f016003e81f7aa0741e557
+Output.9 = dcad14156a8029106c227444f886f6d90c7916e8705aa71432fd6e19221caa5f1de2ef2852c107f3c0ba4a60ccea9576d286ebecb5cbcb0277776c75e430bbbffa8e5155b4c2c9b09fc8e6c7fdcfb4840756548a1fc8532a38c34286cd1128d03d51a47aa3356305ddb4bcb3253a85d203b520e488d208399ae9d4b76e53be1b
+Entropy.10 = 6eb97d74a4c85ee05dc3b6edecf225bbb035a822e87e77ea36891f4a18fe234e
+Nonce.10 = f91151afc43e3f099149fb1d94af988c
+PersonalisationString.10 = 7fbc56d93572e653bba271fec6f575ed33328543f556887a8d6175745da4d364
+EntropyPredictionResistanceA.10 = 13533c5c0624826e317d76dfb01c89326bd84e79d433f2142bb4d2cde796fc28
+EntropyPredictionResistanceB.10 = e28dcdf8a69e4c34ae21190c1092776dccb173d56dcb5a346555064524665227
+Output.10 = 047c64d34778b89d220fa2b41473e018125038c4d52c6bfddee6143b656343856399e5fc6b4d036c8618fa81e5ab1d71a0d971e2b6b2988453310aa5ff0157359d48bdd691395929124f060679720f0a2e281606e0d0620ff4507fc23110a88aa0414b8ec63eec732595e2a8794a7627339aea4c09dee5c3ab9355aa97e7e150
+Entropy.11 = 9084f4201ff169675c9981b5e4a8ac8fd21240d6cca1cf83e8ecfeaa320f9fcb
+Nonce.11 = 5f7bf1ccbb0b82cfc37844d0d4879a64
+PersonalisationString.11 = 1a1345801b7f5c48cd2acdf11f7d2c2f33e35f8971cfd958a457cf639a3c67a1
+EntropyPredictionResistanceA.11 = 7179f116185e827789e9ec0b42c45a167a71c8b807b57ca5cc27d85690ec1be0
+EntropyPredictionResistanceB.11 = 2cd50c87438b3e92c9b0886c0a5c1dd8043c832166213a9dbacb4f602eaced21
+Output.11 = 7decf6cb5519192cacabf70fe1080616c737da4676d827ec79bad3bede7915e43c1085ab5690c5cb04ecf420c3dc4ac9b66a81d3b05fb3d78bf5b126f7460f832bca864a7c8f83a774ce8ded9d25459be6aecec05c5d28a01c6a481e3e5c71f29ba2e25774118209dac6574f4564ff344f5ae4df63b1fc505175c3426974023f
+Entropy.12 = a3446224d9ea3c35e08ccb7d5165155cd2a78440c607655c8d7137ded1b0d642
+Nonce.12 = 9891f9577314eb9f791d41299a0f93da
+PersonalisationString.12 = 42aa927164a396ee2a05c8b98c01fae9be75cbf82228d233170cbecb5b5f3798
+EntropyPredictionResistanceA.12 = 26369dcdf064cadf2d8de51ccf77ea6ceb53fcaf534c6c401605ff8026565f8d
+EntropyPredictionResistanceB.12 = e561e4da7c8d028416999dbb438522c915dcc64d8ce21db89089ebd3dae6f920
+Output.12 = 71127bb3416f1f31546ab1c90fb0f8f720028412292cdff05439ca4a37719c4a85f12c6f21e309d34c79e9447b64b77b84174cd85ce9d1b1ada74f915f2cb00019ede35ec71d290f4cbb3c23fb92936a5e5ee88f71abd9bb381f5c4bbf16d0f2bb0941a44d53195d67cb9fd70749259a48e1389b7f547256037e13cfeb20b7c4
+Entropy.13 = 766955c444df2d4d5db41eee5f1c44a42b49e83421aa0329328124eeccab00c2
+Nonce.13 = 20dd52d486c0e6a02b545ece3b1dc2df
+PersonalisationString.13 = 339610983f063357f6c7559481ed0f597aa83d3c6ac33948ef251a25b5ea048e
+EntropyPredictionResistanceA.13 = 50207246d0990af55217fbea573f03290a0d08995c9fbe17c02143aa5adfd7dd
+EntropyPredictionResistanceB.13 = 8c4787594df9ddffbabc75aa020f5d7b72d5b3a4882bcb156740d8dfbd23c919
+Output.13 = 416b8a0e620e1db8ef7b5388fb487fe10e265318e6f9184125f9f67c4e5bc5457b0262b2e1a42eeba55dca1f54f5cb3bcb1dd0ce4272758e2a5e6351be7de176129a6440a6d52996180b6bc334749c281db8e3c063bcb86e5013fba1029d3feb29e77bb74fa7c89df3597458c974cef06186014383b4b207c7097711dc14478a
+Entropy.14 = 05151f060657689c797ebf3fa968d5c214de9d69229c8c357fd811c58070a2d9
+Nonce.14 = 9d2b624efaea95660665e6f8c56c28ff
+PersonalisationString.14 = c8dcaba9178d3ac62bde4c2c7a620ffa22934c6cdcc1987d9d6ab2d66539e2a4
+EntropyPredictionResistanceA.14 = a976caa5e5bfdf503ecbceefa2c0e1f5bd39ed54351f08b30b973c9a7a6bda2a
+EntropyPredictionResistanceB.14 = 9958d802ec0ba698f6cfc6a312eafa8103239b0190cb08021cb884642df59d62
+Output.14 = f51c777835e09aea6ffe5c422076421592c05098948b5ca118be425b5087add06b55ce38d96534801b4727b52712d83fe563deab487a1e94aa0f4ca7b5574dba77db33e372af0d3d2490e33cf1da101cb7d4fe9608d2987aa18c54f6ecdcafeac03317fedc8e8fbc54f84e9f99b0f5b68fd004c8df1bb286b400262a0da7c5c3
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 29e1a42709b7e84dbe50788fbad8cb609c127eec3262636a513fd9059fb8bae4
+Nonce.0 = f3a521f28dffbd97574c405b69b636ad
+PersonalisationString.0 = c99a1147d8db401f4fcf763867296758e26404a30a4a9fa496a717f21f5d749b
+AdditionalInputA.0 = 17254ea392aead0dc94992d867813497d3fd6dc7669667150afe6c28a2b89946
+EntropyPredictionResistanceA.0 = d5266c01e10d72dd7e8a3bf717cccb8f643ca233314e3e74f106f46b090e5c73
+AdditionalInputB.0 = 157dde59ceb2c662c8665fbe623ec75873fd0c5ccce79a9f5b7098ec8ed77b67
+EntropyPredictionResistanceB.0 = c7e5f03d26bdf9553338e64ba64ce5b5751b04f9c69992221495f2227b9799d0
+Output.0 = e304de9ffd885cf917ead78f05939b8cf54709fc2d0c799a98b543486337204477b1060bceae2a22f7ff42b6cb4b4bc0610ae2b67558a7c54b65e45bb9f1a86981b74705b48cdbf7d8decf87868267bd948e9394aa4357f8dbbf30612a0eb5b131884c220e442d36778e8d74091d8a27c070fe690469e07f3aabeef7c629bfab
+Entropy.1 = b6c18ddf9954be951048d9f6d748a8732d74de1ede577ef47b7b64ef887aa810
+Nonce.1 = 4be1c187bb0be1393950af689ca2bf5e
+PersonalisationString.1 = 84c3739eceb3bc89f762b3e1d748458aa9cce9edd5818452824cdc19b8f8925c
+AdditionalInputA.1 = 15202ff6982863a2c44ebb6cb225926179c922c4615496ff4a85ca80fe0d1cd0
+EntropyPredictionResistanceA.1 = dc810a0158a72eceee488c7c779e3cf117247abbab9fca1219af972d5ff9fffc
+AdditionalInputB.1 = de298e034261a3285ec880c26dbfad13e18d2ac7e8c7188942589ed6ccad7b1e
+EntropyPredictionResistanceB.1 = affc4f988b9395c1b58b7f736da6be6d33eb2c82b1afc1b6b605e244aafde7db
+Output.1 = 5179de1c0f58f3f4c9572e31a709a1536463a2c51d848865011bc6163c495b428e53f518ad94120d4f55cc455c980f42282f4711f9c401976ba09450a9d15e06543fdfbbc498ee8bbaa9fa49ee1ddcfb50f6519f6c4a9a6f63a27dadaf3a24a0d99f07eb15ee26e0d56339da3c59d6336c02e80571466844634a6872e9f555fe
+Entropy.2 = 3f4a99f94fa41549a824a735974e60ba3f21efc38ac1b207303954fd1c85617a
+Nonce.2 = 7ce567748e16af24e01c1a70d7ae305c
+PersonalisationString.2 = c653beb638aaa0cbd2191ff64641c3c1a59f74771766cfc102af37b65014b98c
+AdditionalInputA.2 = 3c6d9a40ee6d0924b2111e6334a44001d5e93d2b6edfbd448c1703906b5567d0
+EntropyPredictionResistanceA.2 = 2f1b6a1c9f61fa3ac7f41e16d936edd79768fa85b7fa93571ffd3552f7acefda
+AdditionalInputB.2 = ac8cc81dceb5da84da5e44ffccf0cfab6b4b94528732dfca0e972a229b371134
+EntropyPredictionResistanceB.2 = 62adde37176ed2040c6ebd44e994faf5a1a4e5021c974d74b963a58788348b45
+Output.2 = 1632c69d7d636b1dbe95e7567bdcac508336ce52b427111b17a0d6d92d77c86ee5214152396c66d31c13c42c59428dd93979940a1580e138e2634e9dffeb6a43cc5656ca2b0e078a0eae24b77a0850fca7c0999d41ef7a500cc7d9c9f4023d2a0ca084977e841ce9a7bd1e6c8931320e75ca933fddd4c3092160a5e12fd13241
+Entropy.3 = 533d4bd67ac1afc8f43567df5e2107762f994318c95a348e78aac50fcd519cbc
+Nonce.3 = b8d342e07f4508075c250177f779a717
+PersonalisationString.3 = 436d8afb7d1db1041f338784354fd8a244b7bf91f449eb47d81c0e99c37c2722
+AdditionalInputA.3 = 3338db301aa673dfa5af6b91e5f6ba23ba1cf5d4b045d083b13e4e8249054d7a
+EntropyPredictionResistanceA.3 = 338253f88743319365399dbf366d4e20d5127749e1e057a7e9dea3336964e3e4
+AdditionalInputB.3 = 81f678166c5c92c819834d4fb9ea88bf9910c8e13d82ffa491db8fba5652ad80
+EntropyPredictionResistanceB.3 = 455ebdc56fae5f16e4e8ff72aba2578fd2f9ca2e99659e40d4fe7d6b73d93551
+Output.3 = f65c282b0cd4f60ff9a44ae5da555a3fbb2954f00804ad665f651d7b0285f99a9a6c66f6ce99a1a5444a08755987a02c7b2e1452cb2c489bbbbc36235c91b3780a9d51bc3bd38c8e9f384eae1fd2ad417375468d5db6f2d3067776d4a41833b71ba6ed356efd7eabdcd3d1e554a4d8286017be200b2643b153889749d4db662d
+Entropy.4 = 17b235397f4c33b4c4f40f4f535e91f68a323ee5d080ca1e04331ad9e552ba17
+Nonce.4 = b66e594f5c192c7664d63e8383f3770f
+PersonalisationString.4 = 3716806629ede87fa5552a4d1e62f1e27d6cea68de6d2e66cdef64e10f6ef543
+AdditionalInputA.4 = 6e3b6b6da2a4b22f1445ab35e1c1ccf4b704eb6b6733cb58dfa78a6235525d81
+EntropyPredictionResistanceA.4 = d8b7ad3dc4aec0f3b54496bf5845c7d6e068bce40586b25b09e1acf26df0a970
+AdditionalInputB.4 = e5c912256c92cc603718473779177c1e8de6c3565ea59077f01ed1cc0fcf7465
+EntropyPredictionResistanceB.4 = 21f0fb8c04d3c81ec0cdc78c58f89069321a9405abf2346e16e2c6582e18ea59
+Output.4 = 95968b840c1decdbab7a3691c70515d96b7d250de986065718c9b6cca36ff7c6376ec493a049dd05d65792deb7f83bdc6272f690edf789b780097b922b24d3f7b873700d0be9de1e03361dea261f1a7d70b1fdebd95df93a79e91893c625c827141eca34a285a910162783b389f18692a8852c209a2cec25bd3da6cedd02c107
+Entropy.5 = 3b023e0d5b003d4a4a97ca3f4c0eae6c76d17cd320fe5aaf8813ae907418b4d1
+Nonce.5 = b46583c4104540a71b977c2a8319104f
+PersonalisationString.5 = 660db7eb97830609417326be6b3be6deaa269d7a55274d559b5b3bda44a6f972
+AdditionalInputA.5 = e7e9ea16bf6489970b54f6afbc75328f3c7dfa56ae7f47030bf5668019179ada
+EntropyPredictionResistanceA.5 = b3bc382cb2554a94a086a9ac222126958c63358fd0fd4a956341406fc5984e87
+AdditionalInputB.5 = 95969f2bbd15bae36b3e464a93b024de75e2200427d3e45b999b2ea65e3260a9
+EntropyPredictionResistanceB.5 = bda03d8f8c10a3490ed0ec753e3146de21932a9b344daef59a129e2376da7205
+Output.5 = 8b0fdf7327adf0b0716cb37d35c485f964a91d38c922e71a14d44d92e266a200f352c129e7c020a96273ed1a190db221649e7c74507de2e3394dec3b66e980c5c987b84a250122b44ec809a6d9f79a326c9696639668dcb6308af3169d25235eef55e951e629acf49d7098c1736360dce3e02232d4dcd4ce0e8ea515fcd3bf92
+Entropy.6 = ae81cd7f23ecc5ab345d337b641abcf9745d37833037c746a98d9d700be2b539
+Nonce.6 = 90259aa62807de2bceab0969f4485378
+PersonalisationString.6 = e461b11c95df304cd480fd0772a8237e4f2783e15491ad4e7ac242e9957ff3ae
+AdditionalInputA.6 = 28b4ab27aac31062c0acafb1937a45ed1aea07987a5efddefb36a6397b855ede
+EntropyPredictionResistanceA.6 = a1cd52f04f6fef9c80ddd446d67c6869ce947234c3c8c6ba04a2699b3d70e12d
+AdditionalInputB.6 = 605c8d60ac85edf15f9b9a6d456963de0af6e8901fd302d0707a10a8190d6313
+EntropyPredictionResistanceB.6 = 2bf1f4d7766daeaebb55d2618b6e6500165fe18cb05bf0c0b468c7234fa3a7e3
+Output.6 = 96457c801ffe29096f89dce06fa3ac3a6c0f261b73a673b5208554682e0e8103de7d4fa8c8625d6bc96d6321731089644c2b6ff98fbf7ac227be08fe39424dcf569626037c2067661298664e70296b67b82bb51c9f8f91adae3496213eb6f54db40db223cdbb018eb464dcaa78305ada50d4ac4f2cd0daca81e41ae784f666ac
+Entropy.7 = 4c320cdeab7a7e7fb1bc6bdf9abee28b492a617650574bdaaaeee171dd3b9041
+Nonce.7 = 4998745f0bc793d7d7203b1a32155bc3
+PersonalisationString.7 = 97551455d8fc1b41e8c5cf1cfbe602945b565b1850ad259e9198a22c8af8a4c4
+AdditionalInputA.7 = 858b6131415b31e721b2f07c8681a5e7c8260c3325cee832170744a57fc0035c
+EntropyPredictionResistanceA.7 = 12307b9adcdd0cf47a6832168cbd3dd9af2863a38fc13b99c78c3e54f4d99c06
+AdditionalInputB.7 = e2b2b38cabc2c557763bdbd48ed36b48351f3e615c8d9a670eb2d8cd0eebdd53
+EntropyPredictionResistanceB.7 = b8509dce08d6675d9264a86f21bf46bd11f23261f715f9ef0cec054c367539eb
+Output.7 = cc9be1c96c796c1ea0115f4010f228276ef622c866287194d9a7dd107940ce86efee75c5e054e46f16024b4be096ada702e8896d832a88fee0f52714ef69face79a153b79c0c8c5a9eaec0b44b8e722b0d0b368c9989de7c6a48c3110d5c90c8a715f4335e843463eee5644c737f0b35f4d96972d591496f78ca754958064507
+Entropy.8 = 9b4d44cff4b32dbeb91602e26a22a948be07886cd585bb9829010a6c79a2547d
+Nonce.8 = 91f07ed6559c56d5cc1423850cda3977
+PersonalisationString.8 = 561920b052e454804816921401f1b633c1182a5f64ad6328887a6257338fc5b3
+AdditionalInputA.8 = 6ad22c7b85e83be407fbd535c21ccd0bc76765a53f95a1e5522457631d292ab0
+EntropyPredictionResistanceA.8 = e4fe64aef9ba43c7407160031f369fcfcc8b2786562e8d899559ac898d0c7e6c
+AdditionalInputB.8 = ba4e55b419b3eb70c434e5a821c5cf8bb4e717586d9cb60c1421867717feb4d0
+EntropyPredictionResistanceB.8 = 99a3454e5941f69597db330849e975d93646173fcb730f45b3ec128526b5224e
+Output.8 = 215292727e4155eeba3bd3176c7d7a0b1e8e300bb68b2b42947a565d5f5da5f098a21a1767ebbbc7449676ce7bbbc2cbc2d502b7478b40a1d63f8ad429fd2ca17bda2ef0b6d20b19f02433d5af6d665e2259c46990258ae60c2de0ea9c46fd730bdb5e0e03b429151eba05a5e0a80e7bcf7b6d75ee94a09452fbad3744813600
+Entropy.9 = 06d07368a7327ca9e17729729954f8b9b32a2ec39dd67639d1ba2fd5b8c3d5ea
+Nonce.9 = a6ddb3aa85ad3e8c41f6dbf5f376c848
+PersonalisationString.9 = b3c573535c44c3e1c80bc3bffb3e281ad8b7751b651cac5ca0744e5706f3422c
+AdditionalInputA.9 = edb677728d3bcd9eed430ab9c2ab5b095b702548249b804c114dbd2fa2f73cf9
+EntropyPredictionResistanceA.9 = 01a21e971109d6e739ce60172d7d3a5babc4a3ce34e4f215eb786c7f9276589d
+AdditionalInputB.9 = 793efb5d3f4ba994d0223aa5f03343cc3f1a7d63f5b9c88e93066f03cdf62695
+EntropyPredictionResistanceB.9 = c7f95c766ff9cf0b3738693e3bab548afb09986e9354404633c2d87af8ce4505
+Output.9 = e7808d73e2ce1894cb058823e3e04a94bb2d1f37fb7041afd3907392a870e9062434efd4190cfa7b108297d2cf1208fe63f2fc95a87bcb0bd3c87725ca31115dda5003077e01f80185865e76e4b8acea067c316a76ba880acf797b70536eb1bac1da76d0af28a23a13d39777082f233089392cc32b938e55d015a41e1cd967b2
+Entropy.10 = fc66650b402c0063ae29ed6aa11b4825119eaa8737e6ecf5adc4eafbf3178d29
+Nonce.10 = 1b3ca7b2fde6722f1b96ef35d693f7c0
+PersonalisationString.10 = 589cc2b56a0634b43cc7ace3145ffc0e2387c05b04e33134bdf99d7734b077da
+AdditionalInputA.10 = af1034a511a79f95fd7ea54dee8d2b424239ca067eb5d29a8064ca5ed33d2896
+EntropyPredictionResistanceA.10 = 6f4747224e7a8cf674bb00abdb52f3521d162bab0fcafb90e3eac5e355d07e69
+AdditionalInputB.10 = 598498f22412982b2082e1b099cd2883f1c6e01a02a9253c546ff7ab79679a4a
+EntropyPredictionResistanceB.10 = 888396d2626b6a3d6c59c3009a1df40fa73ad85ce354236c42fc5cbb94435db1
+Output.10 = 89fdabd7a92982e4de55036db75450f75702beff1ca97e83265ea1d954f74d856880484aeb2f7792a9615d07dc72ec4bcb44384437f0799bcb76457426fa8780d5c4d3a56ca58e899d612f671575d26e02fb49e9b7454b32746af71cff8bea24c6ed20846d1c85a7b91d630e15d5bd560d73693658ff1fdcc0419875ca1950ae
+Entropy.11 = 2f5fa4e0d8aa9fe7fe31a4f1fba21346ead27133a7df7b4b00ba0622de552912
+Nonce.11 = 96c78159e20c5395b4b6a7d7b62eef3b
+PersonalisationString.11 = bad891264185b9eb93744b62f5f59d16437dfdf48a6e4c95bfb5e12714149168
+AdditionalInputA.11 = 4d462bc610646aee9fb6d1517bef7fd4b1d269049e32032554d526119bc0ca09
+EntropyPredictionResistanceA.11 = 4039ee8b0a28df78d52ab0d331638293520a5c0c6a1818c104205edfddec3c03
+AdditionalInputB.11 = 1d78816a830ea7954a65febf672f866bdd57ba78bec9f33b8d778eea6f61d748
+EntropyPredictionResistanceB.11 = c94c1827817a04d4231b469b058b308a08dc67a4c2cc1bf6146d14d7b4333866
+Output.11 = e42d022b240813adeadbe9499c267406c930224e3f50268a338fdaf0b2db806ebeef355c0b8fb8e02d5f54a13f5450d41619e55a9bd7897cae007ae8072fa3dfb2d0f41c6829f5dd05d6d322ea3996708383418140458368234237190c792d3274509c39efc4981a628123f0a8b3072c24d0729316e6d8880901e79adac5c14c
+Entropy.12 = dbe8e0c4526a0891fdf2bbc9a30625f0e514d455041d5faef2d2549291beef04
+Nonce.12 = c5c09e1dc82013bb871b705d7341ec6d
+PersonalisationString.12 = 0b04edddebdef5875cbc39e954a0011d2f7cba760ae3650c0e0ab533f8b37eb4
+AdditionalInputA.12 = 4cfc506b1c1d127fceaba131a727b98ee13528228c4fc23c274c07477870c20f
+EntropyPredictionResistanceA.12 = b52b53f564b25d6b79e4c906e6321fa88e648660954cc774f23a329a91f43a1d
+AdditionalInputB.12 = 9529aff042315693a79315a7e31303389665e67a5757869c4c046d2af084345c
+EntropyPredictionResistanceB.12 = bae98010b06276abc009ffca38d4eb53a137716a55c067f6aef52511844a08c6
+Output.12 = 55686b03d364e80ea18fdc07eb73373b01dea78e75e052acf9314fed2188373bb837b24a3278db18a83dc79f0c6cd6331e8d34ccf66d249f033edf429d91b698d6bffc0858b55ef8e253d91a04482762b53cf6748e870fd0d1314ee0258c4ad3a068febe963caf0c2025b00e83e9f67acbdf0208890cdce5175648a499a5ac83
+Entropy.13 = dfea24f46559a30814a49e3c6ebde2514324d4f3e5f6e871ae9051753ab7f6ea
+Nonce.13 = a73b0b832e0b8f7cfc30485ecf58dae7
+PersonalisationString.13 = e86a1fcdd218d65a31ef84b4cbb7fa35c68935c3a60d0ecc516ce2e088c8d329
+AdditionalInputA.13 = 45ff4eb38905187b88b691654893fd5349e427a620b312635de366ddec0c08a2
+EntropyPredictionResistanceA.13 = f71f3579eb496ae4af26a2baa344c14b270f4cf713975f7f1f8a83bfcddd1d19
+AdditionalInputB.13 = a940672aad8df7aa22db4b1ba32f28ccfaef64e054e8016f16987f79cb45c1c7
+EntropyPredictionResistanceB.13 = 1514b6d3fdf17c6652e8a8699b91904825d67939e133a56d83b54bc49790a70b
+Output.13 = e6c46f8d1b58fb04cb9b9969188194da5058de86d8b89835f30555ea23e07b5d36c8168e062aadc853c3e2d9730139f2723bf3c58e0d59199dd280d5ceca751e7e8c6e50a97cd0e238b7b8fc8f4d6f0a125ed7c76889531b9853885431108db0eba7e903865a92adb4a8aab2b1865db15e8f13ffd4a31321a2fd1dac0c2f477f
+Entropy.14 = e0864977f160d8032023124e6c43e945eb90b6c2a24105afce20df69ecebac13
+Nonce.14 = 40720162270ee6faab1e7a24ff3705e5
+PersonalisationString.14 = 1b3e262e9a104ac11e41180d678856ddeb72fa5668bc699d451e0221a8ef1b81
+AdditionalInputA.14 = df3d3b2f483aeb09fd54812be0a5a468b3563f54c3296a6dd606e7b670f9ae1f
+EntropyPredictionResistanceA.14 = 551ebe31b85b847b5d1e86f64fea83df8c3ec0d8696d136916ae44fd96139715
+AdditionalInputB.14 = c5f5de9cee2313448092aec23c7576c3c04796cea6e50cd9b9a87a1551184ad3
+EntropyPredictionResistanceB.14 = 1d6bebe59c7a6446d0f7ea1ab001382c71f82917058ef404fe92d9b5680a116b
+Output.14 = 51e8676a69f70f016fed9aeb80bcd70f4e988066cccb586f91c41e4122e3e1db0d1df5ab94629076509b59dc24ae08cf8cbdcd766185c327b49e518589b7f49f488d2ac37ff101c71a45aaa8aed2277630dc41bd69e007349ca3b07dc7556df693b88d21635f1117c67389701cef2e630eb08d529ce23595938d4f4b28289ff1
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 945f49bb6a4826322a89f7ef922061f881a647c8ed7f5e79d1a86ab056e835c4
+Nonce.0 = f9f313c8ae35b8205f5953a29c356ef5
+EntropyPredictionResistanceA.0 = 7e3c484052ac81c9db87220aa3c3f92a28c815d4e65a97a7c59f30a996c47090
+EntropyPredictionResistanceB.0 = b900c8528ba2fe9930489cb37778194338817c245b92aba02b0ebcfd0614fe72
+Output.0 = f6a9585b063b720f555205f609ae4aaba25a17d1aef1a7d7b90aa9d4a6bf0038504cd82fcb05cb3bb197558a692c2579729c0df7b295a0e4af6eba5dec0b2ad6cd94badbfc46883733491dd4a97540a75f9a7361cbca33c800c3461e7c2a8221911ccc4d493e4aab1e99e9b657a0409919f05dabea2831e3c1abed6cb5eac04f
+Entropy.1 = 48c95c40dacaf7955873fcd9b26e3c6cb8b130b29bfaf0b45bee0e3fb0fa1554
+Nonce.1 = 2f9d8ac628c1b75991fa265599c1a1e1
+EntropyPredictionResistanceA.1 = dabbecb83cfa9d9827f3740e99963114b8d1042ca20f3c071252b93b8d19ab15
+EntropyPredictionResistanceB.1 = c344d4454e87aae2a242054f34ea630326b7dfca66b22e1a1cc1b8336765846a
+Output.1 = 9325b2663849974f5071073f5298a90342bb2448b747a81053cc45efecec9495ee019c649eb1ec66212b8fb1ea159bc514c7a4e923f6cd80e070c75ffac51c8a6a40978ffaf71940668be5ce45fa8837bf636dd88b85c9137703f5f5a7a254eb3aa76b409a7ce5d23484e2ebe4f3e159733a593df947072db754697116b3f15c
+Entropy.2 = 1810b58308606ab627cc8faa689141409b5d9964dac10d3cb6d739ab86cbc91e
+Nonce.2 = 5ef191267e1e5c2ec7e5f3d4bc102dc5
+EntropyPredictionResistanceA.2 = 05ba159d8bf16d1c409c1d618b523e0e39460e9747c412ace4a8a8b7d7f0d4eb
+EntropyPredictionResistanceB.2 = db847fbd6360cc10e0f46533b3c483fda5d95c435172905117a409da34f2dea1
+Output.2 = 74e195d3054fb496a063065f3a224c370d17d0d11c83b044e5109db8928ca4a83d8c8dd6acee2ceaf2d35cc767417c448aa20449e64b8c350406cb2fdb42beb60427dbeece39db8a3afceac05052975dedd4bee9fc7e5c80ada09d8e610b00e40764b54d826b6168f201b507839db222e84b50289ba53a079bc9a71adcc3e09e
+Entropy.3 = 0042b22833145daf7752e3d10eb23938765554adc00c5d05101272f28f2ea85f
+Nonce.3 = 01565ebb12dc3591c590bff63b028120
+EntropyPredictionResistanceA.3 = 8c2e7b44302edb218e6462437a0d56b24a4e2202b51443a2844d891157242fb9
+EntropyPredictionResistanceB.3 = 27aa1747bcf4fdb234bdb4a79cee2e98b0a1f337fc2e130029771a55081783e9
+Output.3 = a1c803d5af065fcdf148e162c648718db58eddbcdae46e1b8782d09840aeb1d8a8fbcd8ca542c7702a6ce999842650cda890401444fd869011e30f02099b6ac70b9c2421cfd0f10f75a15a93c20c216d518a38f3c002c4d28c468d97f23a45621d4f412d856321d4477e98bc86a94547596ce442de2137fcf62e5cd6f223bad6
+Entropy.4 = 08fa230cd25cd7f089508966766d37b6c60c5ac14bbad840fa2d27983577106b
+Nonce.4 = 8c443ecacf572af423410bfdc4fc1b58
+EntropyPredictionResistanceA.4 = 083237d9bc490999a5688a8935f0466d229834a8414a908e0a0f19be26327aa4
+EntropyPredictionResistanceB.4 = 74bd2bfcb8f8e027cefe8f8dbd59021bea114a02e5a2dc71120b8a6be636b0f7
+Output.4 = 456b54780165b5b55408a0713f26b2a8dcadaee3ff22862be93e0506a2d7d26ec0ac19b59a929f540c5999e517adedafce239ac0704a3284624edf9767e6eb8cac9434188814d10c1d48172af2d5cfac2d5479597800903041138856ef93681de42a41b112fed91c098745d6e652438db10ba6ed75c2063218d9b01e4e75fec3
+Entropy.5 = bd2530a4825ad66292cd1c327e6391564e5700c21099d63db0bc295c299e148b
+Nonce.5 = bdb588f4ad4347b61822f61986061e0c
+EntropyPredictionResistanceA.5 = 7400392270dc3626d27066407f42a6abdc9a2d34f86a84dfbd9de4252e876009
+EntropyPredictionResistanceB.5 = 8f415e5fe732b0612a0e41dd2c9c3574423187d65e5e5e46cb0739eee644133a
+Output.5 = dfa95a5f97100761eed1858404d35d4315501fb28305ba2d62e63f3b15f5918e0d67b7bcdf6cdf1600e7dd632d853b3a096d700635f152fd94e18ac5a14f38c9b0958ff7090d2c49d48657facd2ef02ce0121976f11f3d0335791ccd466543c3db762afac3a2fc3c120a84f20b109b21161189281fa0a72001202b7b9c4c57e2
+Entropy.6 = 251c1888828c08a04d99e0918b82f818a4083f8379f547ff88661e144bc31863
+Nonce.6 = 106397a8851e349db9e57b0d68c1a234
+EntropyPredictionResistanceA.6 = c1d4bdeb6c6d89df7749fc0377285d1abfe1cf17246f41af98895d083238ebad
+EntropyPredictionResistanceB.6 = bb0b1b6d400c1e392d297a3928e61d49e0e9920a2d68499fdf39632034d24fdf
+Output.6 = 00106ab5071bc9cfded9bed063565dec44c7865f121fd833156ce7dad438f62ab4d1444192a0782d04fcbf16e6f2e6d1c796ccb028ce04f3e5fd07729d21f9a1570a12a95361d2c22383378e0da75bb1891d43d955779bd247de8af6e946b39f8d6055aaa2e36ef2d2939b6abf5f7bf19a142740197d8b2a3305aa109ccfc33c
+Entropy.7 = e78f9ce8bbd305f5c2d3055c3ab89d053baebc9187e25099ee9a9338a50c1422
+Nonce.7 = 4339e7a59fbc3a537471a19b56c97365
+EntropyPredictionResistanceA.7 = eec664d6c1a870c4fbd7f3d9babbb4725cc8e05436bfde29be5ea9f8fef1fefe
+EntropyPredictionResistanceB.7 = 50623fe14053b0b034ca87a33baa0f3dca0ec74c04e8b4c1466ca86865bf48a1
+Output.7 = e4b14585e58ba12fe673a9b660b7e44839ead0b0767fd36f5acef98f324d1a881ce397cfe4f1dcaf9813d76284fd6b06bf97f11cf5284475db162559be9df1efd0e75442ea0b7a9fb6f257e50471af5f5fca4da0e14c18f4c5dfc5707412d917639eaf5450af94d7ccb36bd364fbe3f8217bd120b853f43f4b6af56091c65564
+Entropy.8 = be2ed56cd4581ad4b72dcc4fce8753dce3a2b0d173a05a913f62a2b2789e6f27
+Nonce.8 = ae3fcf60eef77ee75d8eb097e8be45a5
+EntropyPredictionResistanceA.8 = 5b969e921f2811df28e3692509c66a703e43b89d9693d9d1a7b5b7150f104f40
+EntropyPredictionResistanceB.8 = 47489628129002e142f465cd74d3e86394d306fef4aadbcb16635a1545c5c345
+Output.8 = 6f5d6388e7b2e3ef3a8df5db9e9275214a6582e5eed374b94170d35a4e1ec8aba91caa63a0dc3011fac3a1954aa09998c623925e373c0d34c173512abea30da2bb6c925ea12034e66866ea723bd06a806e7a2e7d8c99434965528961789950aa79ceca1839d59ee58a336b45aa42666886872116e0d6f590641f5136b87ac75e
+Entropy.9 = c4de582ffd3fb414be6c320fee974542b4bfc89fad1eaa85d22bf6592f4cdd51
+Nonce.9 = 2ee36ba158de5ed588d510011173a962
+EntropyPredictionResistanceA.9 = 5d553e8fadc68c4e739a172d86100bc3e2838d5383d0a75837b6c69701d42d8d
+EntropyPredictionResistanceB.9 = 1d8ff86c00af8f2eb797d51f37dbfee86b4abdc534d43121768038eca7b60a83
+Output.9 = 83f0181112dd9982a8d0a00c691689ff1cc36f8d0ba4fdd7b2497adb7fe865f4c43847ad6f7fea5e32dd9c38467fdeb405d366088563188755cd7362854ec314e4b330575198764df25b7ee7c6ff50aa49e4c5a830807a4a25e345060cdb3b72d37d2b76ed7a7788b470b920a3aec00ce493b8e5df619d8a4672d4887ac896d3
+Entropy.10 = 64f62b2cc54d97229abebfdcd88e5340f6700fc6006fcdedfae35433bf3ea54a
+Nonce.10 = 7b753bfad559c2e440914007393159de
+EntropyPredictionResistanceA.10 = 9adf4e15362ccf1edf4fa5e99ac85533b62433287d5763454769cb134f64a96a
+EntropyPredictionResistanceB.10 = a26b58cbce3274ec27f2427dba9d752c9474ef31bc32ea12eaca3f9d4642eadc
+Output.10 = 06eb3a17f319bdc886ee5de6837cbc1fd7cd8d8222dd15bf535f86d05b162f55280fe062fc1da8dde5691f6b4990a207f73798b16632be09d0613f8cfcb48d8f505ab730ef55592eadfb0d915f0abf4c463327dfe3e9850b77453de3f951728e3f3e8811045e6a91bdc1c356bf0da8deb806d21a5b0a5a1d87e5d58699962b5b
+Entropy.11 = 72e1682dc85a7d17ace3139b712a573fda1195c845178d23c7bd66779cdd1aa1
+Nonce.11 = a4cc4eb245455b797d85fc02ec45c18f
+EntropyPredictionResistanceA.11 = 6ea84a704e13be2ecf915322818c3c6e430a60ef71051abc72c100f1c2bcaebb
+EntropyPredictionResistanceB.11 = fbe86e478f255c348900233fab88fdf80746d460e01275af58668c161e6c72bb
+Output.11 = 19f899efd1304b67f9dc996cb863ec6e59aa30cd534f179ca9821e67e91ba3d463953f22d5f5455349e393ad2321d82785e0e27d82880328d8beb9b9e62c1d4af4a07835b2e7ff1ed6c35083978b6a67625e2ae5cf1794a823155423ac93e1faee718e25af084a5d34066c6dce7147735487a7035dd001052681997fd59d7cf0
+Entropy.12 = e2c05974bdf434e266ff8b3f01d35b2a832e8de8e08d058fc7ad3d0d6b9b97c3
+Nonce.12 = 8f39e179e76ed9963a21194ba65757d4
+EntropyPredictionResistanceA.12 = 42385c75823b97023e0294e4f5bb2c7fcd3db3fecce93c7ce302a2928a9a3496
+EntropyPredictionResistanceB.12 = e52a651e54187727d40f578a37b53970d96bcd5d582cd7b51e84207f7ec6ee6e
+Output.12 = ab7d11e9292e2ed977ef9def9547f2a123b3624ca0b0590f0a345dcde336dfd3efa76eb143de45e3c0dde510cdb4ad1771c631be3cd7556590b622f3fbee1a45b498a42addd009c12b5a27c4d530f43365baa6bba6f0d3048320660e583d115caa63403924a5dd5bc1999e1c1194d491ae3fc33f0ddf51e299c54bc84a912a0a
+Entropy.13 = 1d3cd891a5d3f87c167807e4c4f2735039392be8e0f594e7341b38116824886a
+Nonce.13 = e5d141112c93369de5c6bee5cd4760cb
+EntropyPredictionResistanceA.13 = ee3f869ad4ee430cb6fc775658df41b0b6cb894f78c686101dea12aee1a97d68
+EntropyPredictionResistanceB.13 = 36cfb879c36e968c2b9811b3f46aff7b45b811860d76ebd88d073533edd3652f
+Output.13 = 8e0eba595d07180eb8f2a711a11e0058c1af6bba4bf81be0a226c39ab7e754e137089972fa1ecac4e03197f48b0e8dd9180f84a80fab4d42aa195fd6a7ccdaf908fb21afbb5ba4688502035542dece095805af5f28ab1a5244c01a41850b84bff3fc359512344447d1bbd6a956a0722e6a4c314f7f3ebc0b24a84b80fd4284c8
+Entropy.14 = dc8f3deb7e64a5daa9431ee0c73556185f9406a4c9a6bf1580daad7f7e45553c
+Nonce.14 = 6857634700508d7f7f934c8a036fda91
+EntropyPredictionResistanceA.14 = d3bb25e00f2213240537b5e60a1443511074b0333ae70dcef9f662ac65a72774
+EntropyPredictionResistanceB.14 = ae0cb97a50427f5a65384775dbb0654752e46e2f7768b027582e9f6dfbaeb4c1
+Output.14 = c7590a598caa2008bc1f09000d02885413c9f1e1cddff9d6027bda0a5cdd21e976a1e738b32ea18cc770e631f8970c0b378e41d44c0046cfab5c3a7b5d01c6feb140d72a1d7d3d752675eb4dcd6271242f3a3892d7362faac38c8983243d3d5449bddd73d5ce531806a620331a74b833133d67cb4a1040de680e60b8f724ab42
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 974c182dc2ad7c07533861c081b290febccdde1eec90d8c7188fd241c08344b7
+Nonce.0 = 9ad2fd05519ab40197a1a4a6bb826c76
+AdditionalInputA.0 = 59180d2b099d8a235c1930f5848f3e7d68c4d47648f1f5bb3bdf4841ca58a416
+EntropyPredictionResistanceA.0 = 4b476528db66dba401f918ad71949a291ec4a28388279dd70e9c3fb81aacfe53
+AdditionalInputB.0 = 3ddbfe4c920773be8969fb236b256248c482e58929c4776d33240560acd769b0
+EntropyPredictionResistanceB.0 = f50ce3c2594adfae97c99484476fedaf223aab31440f8d83e66357bde9116764
+Output.0 = 187ba7577a1f2a7542b9e65c0d4d4217d1dabef86298d47d1b769f5b748fcced8650064b237e9d83a1bee5d94ec29336df1aadab2baa2c96be64f1df9697c96fe2704e78231c839c8fe571bcddd5e3eee58ec790b33ab2b108f0dbe83aaa95054dd91a271e82cd737ba6c820da3434c403457664c7a59ec9f924d0279836287d
+Entropy.1 = a9cb2ea7927bee3416c4208d7ca6ff384191e528d77f648ec81bab1b102e9eef
+Nonce.1 = 1acdd5cc18b19897ef4dfe9176b66cf9
+AdditionalInputA.1 = beb396a076321148d4d49f377503501fcbcd846b7928c696c20b377e1a18effe
+EntropyPredictionResistanceA.1 = 9018c6ed4afcf11138e884e33cbcf8c9d2e1f3517e4ce22693eebf3fe1c54602
+AdditionalInputB.1 = 9a0ce4eda08960f22f82fb77e1a5ad0d543a9d9f1c5f340ecf39699b55dd0f60
+EntropyPredictionResistanceB.1 = 289439d813e9ae051ecaa9abd0b49494ed044847eb0ded0f45f00d8b99adac60
+Output.1 = 6becbbd254524a36a189a16f4617e04ed53838eef8a20f1a3afe9561d1e66dfd6fcd55c7985f80509f7d0d2855b7a1a2f9edcfded44fa347d9b0155041fdc4a97eb0f1a38f5b94213c3aa94b68c24c81db6f4a9f1e3cd3e64b7f6bdbcab8b019f22721aed275c12e2c717914371518119834438f37e8330d8c2404ff271a9337
+Entropy.2 = fb23be3c5c43fd3280d6c86a85a4071ce03691485b873789bb10307747538cfd
+Nonce.2 = 5867abac59d07f6d5e2af9b257d2f25c
+AdditionalInputA.2 = 5ce9be6e766289b5a3ba2b5831aef33e0b43e77c9ff005a71da5437948f1a584
+EntropyPredictionResistanceA.2 = 71d52fbe0f57e8a0c13b4ebaea55ab595ab153f4bf079bf34fc035d317b252da
+AdditionalInputB.2 = 68eab86a2daf12f68b3f3a0e67e83fff31b05bdfc8ee4f83386b1de5c004cade
+EntropyPredictionResistanceB.2 = f8a699e37ebeb07051bfb45c763b1058e1340924dcd0c92b3abe95e86b1617ef
+Output.2 = ee749326adf36c96fb861416022af6beb30e6e6c054c7d9a1b312ffc975f9514c0f9e4cf99d558ca6ef723bda4f7f9bb3c3f902aeaae4cad0d407725460b94e86f0a43eb229d9dc6ce7e91b2eaedd1d61bdb8afd62a48f91d2507ba8e34b1e934f8692cec2e195fd113c85ee6d08d0bfb987508c57a38bf7c28519018accda60
+Entropy.3 = 8a06398f4a1ae8170b78f6e2fa502c16f2e1dd4b8f7e900946dfa5624adb7656
+Nonce.3 = 7752a31a14db345b3264ce70acbb38bc
+AdditionalInputA.3 = 58e5d555e896dd5a78cbe92fac46fae89bd82d7cbd209900159f887c32b27bb2
+EntropyPredictionResistanceA.3 = 168922b787fc0910e6f703ee7a352afc2049e396a9eaf58273b9544d6a395df7
+AdditionalInputB.3 = 535ab2539ce2854650ce1d888c4f29f46fde567cff3e1927342163f73a1e53ea
+EntropyPredictionResistanceB.3 = 941493f88c50b04bb0411e52598d7ddc04af0035d53d4260cf4b3ece9eaaa804
+Output.3 = 78236bf48f0d87a466222e1df2b5db1a6719cedc3f226e61e1da8b68ec9e3aa9bfd2f363318fb8ab31f9c902b9b53fc75564ccfa3cbf57677b129a62d16b85bbb7de010bdc3c1aa8eacfc4e10263ffea019165b42a42e3f7b1cb5df3e85b62f2f99ac0a7c484f64f5b6a794d4231294d96916dcf78b856d9b17e0018a1364b3d
+Entropy.4 = 660b118f2369b97c42363821a415b452532b3c937eaaffdae25fc6404abc0c7c
+Nonce.4 = 2274d38d9887e59c21b4d3efe2d07543
+AdditionalInputA.4 = f3afc11ec8e94ac348ed608d71c6c4746c83a038ae9984a2f53d3323f94a6c5a
+EntropyPredictionResistanceA.4 = 21878c21fe28bff8e3c60b64983024a4f44963ce2b9215ae11be9b65c352b97f
+AdditionalInputB.4 = cf43811e2434936dde1f67136fa904849e734f42714655b784d43075a1a4fcf4
+EntropyPredictionResistanceB.4 = e9cca0c68f45b8fd3d96f958797faf6c78f2a980b4528c45c4c21d05ee749a67
+Output.4 = ba67432ecd5c335b78b46801b4a22ab7327334f20848b76091fe53f74b72d3df495111a5954d5b4fb055c20809c36d57efd29e431b3e88b517558c5dc5a2ae57f1d0df90b4bd2d25a3ad968534c67e2c593875002c104df075cd37f019fdaa2ff9cb646917a71723ed6410902b5c9c96494824c2b86ecd3fd3748fc7e6f30210
+Entropy.5 = 147d769b882ad44e740286066952ef73c30a55e4fb064d98cff647fb46d68fbe
+Nonce.5 = 09d364455bca1d5a4e47aa9d235165dd
+AdditionalInputA.5 = d62f4fea8cd77b88f95df72469d5df39bf0308204f8963487b0e0efafe0f0174
+EntropyPredictionResistanceA.5 = dcf9c1ca143aafc7f8e4e7cbdb414b2a0d74f465035f3fb2588f66a0369f24d5
+AdditionalInputB.5 = 6b9dfc77d89900f654c0b6e068036eb1fbd3082e3bcf83296b7c7819a9330edc
+EntropyPredictionResistanceB.5 = d1e8ba4ad4837557981e40b82c7e836d4709d0b292cdf0aa36c1398ade7d9a8e
+Output.5 = 21e026c8363a9026ea451d1bb589bc129d3b8844251fcc2a0b315f4d72e27b63141028ffdb7cfde6cc25ad6372c07e3e771f4763765bc6cd27f35f902f676c330bcc6c6b60d745541a55ae493b10ef3a1f16ea30c9e09f6679a64b8293a990c69e28deba775a6a16fee6b7df57ec7dac493813a10f33e73262f4506d73941f91
+Entropy.6 = 88a7884e6666a786fc5a311b97008339abac198f0ffa2ae0d7eaea1a61e368c8
+Nonce.6 = 17534ee3265e8ce15ec391ce04b3fabe
+AdditionalInputA.6 = c9dae9eabcb762724ee50fe73a98cc8fa4f692ee1b324ad70ea02b1d4ea6a92b
+EntropyPredictionResistanceA.6 = 2f372d98b968d60429a8f4825f2c54c0fdbd7658b630f2053d026f8e39b63bfb
+AdditionalInputB.6 = 1cfae26e040e71c41f0ed601469a2d7c94cb8685476b9ad8315f76266ef9fe0c
+EntropyPredictionResistanceB.6 = 23df5255709214ba9af7f1fc3e5598f23733acf4011bd822f39afd8a02a6d74f
+Output.6 = de462cb9cf6fab2825d72e8176ae0cc1e1e8846b3feaccef608a22841c558d3b6975a0696c6987e59463817124ec5076cb09db3867b5fcd0d49507be0d41478b16d1c4bc46347e82a65ef238cd9b78ad72323b7935dbfb71af9eef5ddf9a614b3bad4e9884d47081e8a777dfbe93a4b22f874a0f62549adfa0c8ad9c935c74c0
+Entropy.7 = 572aad1409a2d47aa594f95a9b2d921694c5581d2115e853f9cbb76e0d1817c2
+Nonce.7 = 1c9b1227657839a93c05e9eb7809ef24
+AdditionalInputA.7 = 918e544c62cf68c10d12cdb07470e29d57cd1c6a16d071b85982f918b8480317
+EntropyPredictionResistanceA.7 = 4320b4f15a26f33201a2cccd373c6cb30c8c0a12d59d33766560ba57bcb8b3cf
+AdditionalInputB.7 = b2bd3395098979a26177865a33b93eff6a335ad1e587e544204fe26af9b2730f
+EntropyPredictionResistanceB.7 = 3f33596cd2b28d6ee5aef4f94a1feb260e1813e67fe3ce50b5b0a56a525af87c
+Output.7 = 97ffc7ae4c18139c38e086ec79faff4354d9195e5518721c3751db3d9edd2ec05da3b09f8dba61d5f89dbf150fedcbbc7771fe813611bec5bfdb813ea940d0ddbbf094220f785f94c8999f0eed178fd171c458a6d9a7f130fbafbf6f789f78cbdb4940eefcb1efe751c0e92ffcb4532d6848f3232a2a7a9d6400f6698814ff2d
+Entropy.8 = 75395c5cb18c90df4f2261e18809a4fd04908859a275f1f116352704a933b552
+Nonce.8 = 5faa8e29fb7d6137530cd2d2eb1d83cc
+AdditionalInputA.8 = 42df352b381913b02f8153be01532e756028224f53a029332226f760d6aaba01
+EntropyPredictionResistanceA.8 = 9a0d0d602093127a4fb60f53504f0aa585330b86878c4f50c4bf0b6374fafe44
+AdditionalInputB.8 = 06f2fdd127802585562045c8645f79dbeae106ee4245a3b489f8ffdc3884f5ed
+EntropyPredictionResistanceB.8 = 1cb9dde7e92236616bec87d8c39fb389f87b295a61ca82932a3ed16a11ec99d2
+Output.8 = 7007f103f458e5bcb7fc5b945d94714ec8d7744d98c6d693e49ec256ab07b7fb414ee317bc2d8035f56719895f584e4e4cd7b699d474571c5a5c8ec84b5f29283539ae20773637d0fc7050c48be4f6b393210406bb095b3c2473c6151da9efacdbac8bcb883c887bffe01c67598323d0f17ec4b1ba1e728c4234faff6984561b
+Entropy.9 = a24731e19bd74bc162db8abd25342d1758a4a2d735edc2a7649c4595b0f9a424
+Nonce.9 = 9982607ac760bf161056ba6b8970ee88
+AdditionalInputA.9 = 21d1832c08c2dcecf3e202951e2ddbc391d26af097164891bf881971993a01b3
+EntropyPredictionResistanceA.9 = e6631967b0d1652877bf0724da4961ade9df81f518f4bf17da0245a04f91adf2
+AdditionalInputB.9 = 68825e240f332682ecda1816d6f435eef623f4d6b47d548490228f1aa27598f6
+EntropyPredictionResistanceB.9 = bf8d9f2d7aac7cef1901bada4080b2b6ed9b3e7a09e851662ee6f0999dec6e85
+Output.9 = e6c8a907228e78c550590188c4eb08cd9dc965244f95acf432ddf2bd67f6fa944969319f6c5da7863a0154bb07187190e814c9d2079aaaf534554dd276c8e90790c256d899ba5fd209c8fdd283c8e77cab5a8a15f4c111d6014757ed1beba36ddbbb633608c89178abf4ce0c9227964434df7cc504d3ff6fccab3b59b674d81c
+Entropy.10 = cc89238dca6f054573be1c7c533fcee88253633a355b99d4bb716bbd2c11f155
+Nonce.10 = c42de73db90a937347211b584493f9df
+AdditionalInputA.10 = ba09b5bedb8db2a6136d064be559569cbe701d409d5c95624220714216274c8b
+EntropyPredictionResistanceA.10 = 4fe2407acf803451d6063014b26702fcbae02fce36c11d060c55a9e92abca9f3
+AdditionalInputB.10 = d7b18bd24e8137620630db1ade64fddd8f257673c11136dd630273490daedb8c
+EntropyPredictionResistanceB.10 = 705f8467a4b8c0c569fcd22a3ba72ff2ede752cd2c3a8774f9e56cb8944fd8d8
+Output.10 = 3dac52570fe5ed8f77e265484174fe99b9568aabf14c6fec8c7878bf594d5f556e20956b0d2355170e54bfb0d86200b6b02a05deb411dfdd6e84937c4a4d2ec4c5693d30fa6124c9f1df71c54b426920fc307d305c38822a3564c7ce9506491d6572fab9b1554fd30d253fe81658661236c6cf9d3991feca6a6e04e93c6a68a7
+Entropy.11 = e8717c62b37c551ff01371b6cb4f82f445d462836ce26bbaace20e7c49723c6a
+Nonce.11 = fd5b824379dfa584df60705d305c864f
+AdditionalInputA.11 = 55ef8715aac91690f68d88fe2d912948061a4dfeb844b3b3856a6650a0c2de43
+EntropyPredictionResistanceA.11 = 8f37af77c700a4c16820e97b760cce0764dffd683faf76f7aa340a8e19fe6a08
+AdditionalInputB.11 = c0928d6016f84fb396d13fd596ecc5b0e7916ad3708b561a7eb01c3aa6715d49
+EntropyPredictionResistanceB.11 = a445815284194fffa21ccdea73b930c4905ec93dfc31eaa732e6897e901125f6
+Output.11 = 364880904f85d76c94e527d1ae374bc8e9b65d0c1d0fe39986b3611a4b59123aa8d8495bc5ed0fdec5c4efc24c36bc0169ceaff727228a7f4688b7e2f50f3c5c1dde4350f75912c08d35c141396bcd737d11442343441cf4fba41f2bcee0f6866cb74e81c008aac4a8a2c0a9a3d1c6dd57631629ef1bb1ff7886abe0ca47d635
+Entropy.12 = 3eb8f834e88084c25c941161d0abef5d06fc26df0ad3c49c887d05a2dfc4cd89
+Nonce.12 = 74cbba45c8bfb4657799708104e2030e
+AdditionalInputA.12 = 3881738ed77cc9122a8b785329c6b7c50fda6b57c20d172691ce7e7e7d0ec66a
+EntropyPredictionResistanceA.12 = f77097a0f3eb480f6c591ada18aa5b3f946cafdd10a857152546fb963146de0f
+AdditionalInputB.12 = f472eae09fad9de3e0cd043a1264d945c0988e4aa59b2759e367c2718018d423
+EntropyPredictionResistanceB.12 = c06a35307b0c9a23cf4ed7e24f0101449c6132280b02af251e48b43c6a0c736b
+Output.12 = 6073c86123382be4a729c0d69d1e6ff66996010ee727350b1bf9099d2d75ec2fc32d274b413344fec5dbadbd32c9a0c4ec4e1359df5f852faa8201505370d7a6116364bb5c23e8a0d3ee87a97e29ce7bf576ad4ac7651c24b4ab38568bbcf834f91b3d3370c3eae85e2f46754b81df246ecd84c6b89692234a3f1f2c8b69df41
+Entropy.13 = b07a32f22222dbdf99b66786e6d959ba90eeaf67b8767e2d3515e2cec61e9814
+Nonce.13 = c13a4a8bed7e86c671b7629039977339
+AdditionalInputA.13 = fb4fcf344f673d9d8417cf81150381a006bf68f7bf67329429faaf933a071955
+EntropyPredictionResistanceA.13 = 0821a192ab30484f88245716412ae923b0f670c03a923af5cb2522f6b89b129d
+AdditionalInputB.13 = 7738235cfc6da09adec4013e36f7b556d0e91bd657cbddea3bd829d520a6a0c4
+EntropyPredictionResistanceB.13 = 249689b05ad9a1d3f78dbe7ca66147c3fdcfa761d043797c42ac9454a8ada28d
+Output.13 = d7280f228ffa26b63db8a7e269519423d1375274ca1a0a7b12c55d44060b7b11e60869db7fdc816bd0fcfe1be14e6e06dea362baee4c31619fa64b30ec6ddaa07a01b4b8c67f18e32a96ccb7614fb2bde10cd8f7c9f61f2ed61228e22241206df92511dc9da288a0dc42be4e3daf34c9a9853307fa8f67ea722019f700ee7f7b
+Entropy.14 = 6062b11632beab103140390cc45076fa4dd1d24d9a6bdbfcd0f96e9f451b3000
+Nonce.14 = 4ac641a7a588cabe99ec653bcc536bee
+AdditionalInputA.14 = 0b537d4f4cc7e2e3c5c17bfdc31d952d81a76ee1d57d37d560f3055403ffbd73
+EntropyPredictionResistanceA.14 = 5dc0860848c885c4c640c7d1a39795b2f7c17f5813c2398ae68d1328c623ccec
+AdditionalInputB.14 = 7e482fb9ed5ae67ddacd5477dce35e92b473ac293a902748a9e6c30906428973
+EntropyPredictionResistanceB.14 = 0d3e309e4b2e0a50d2a029528627fd24184172e5f1c5ec4c3f659f6d9053a354
+Output.14 = fcb4026689b7c0efbd3173e22f787558f6f043106a1a884f277a8225a208163d24b7a0a91c072624b1ebe415c438d4b0afa4afaa3513bd8e6fe4e4a9db6f63d7ed49732b4d4ac407539dc488c0b4ba43b1ef01b22653e937e3b462e3de8039f84a2a8dfcfa42614af01129e5e5121400bde292715ec80bd53301dfca6b90c874
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = d86f5b02185c3c0f4cf43b0d732c19dae5df5e7f56baf5d8b98d0aaf2b586069
+Nonce.0 = 70f31ab3e353b284fe1252b6fdf5b540
+PersonalisationString.0 = a073a9224d1f1423a597a12eebcf7874238a615d877b5c43195c922d7fdf6d7a
+EntropyPredictionResistanceA.0 = f1a7fb11df3022e5b16efe80fb6749dd47343c580994d7f03f5b8d5ad2e13e8f
+EntropyPredictionResistanceB.0 = cd6cb6d47b52159684b260dbfaaedd3ca595a81034d58cc889256ada9951574f
+Output.0 = d847a4a5b9f200ba263237e3f83572034899004a8b28a992cfc8ee1d379ecb243331664e599d24507b4b3c89d981a4c6baae3323abd0054062a7dea2358e92a8c471481b96ac842f53f390a6f1f58b118d4a953f24df3ba9508672734521b70f0ecf298145b72435358bcf82fa3a448b61d755a060319cbd5ca13684b4d3fb6e
+Entropy.1 = e24e855f9e285da398871a5bd28af260512e7df602b0b21544294c5db95e5c55
+Nonce.1 = c52a6eb5cf604e04ef975079dbb5bde0
+PersonalisationString.1 = 03c1bab43d86d38e5630b3f87d8eb20753eda136599758b132124addd80d5dd6
+EntropyPredictionResistanceA.1 = 8e032e57aff6329f3e80ff935b84ff10307e207d1bd26d25a27c1eec3e764439
+EntropyPredictionResistanceB.1 = e2fe435024c73098f17c3c1f866a6b36c19bcafdf240076a654e103f5e225001
+Output.1 = 0d40867de921a4a43a86fa26da96841c25a16448888c93cd4c4c689ba540187efa8389c4aad65de39eca3da804d3cbb2fe3a50b1cb85d055d6bce6664e541f99e25871307218c00adc9211b91557a9b7be56b143534ae3b44a6659425b0dd0cc435f2f1fe00aee8854f66129c165ba48053a25a1aad528a8fee99ebcc7431dea
+Entropy.2 = aeb3a5986c6d8d70cf122d18451bb5e72a7e302c78fea8af0a773ed591e68bb7
+Nonce.2 = cda49cf790c4d9155ca4f703de47d938
+PersonalisationString.2 = 54f8e7e899ac842055a90d47c79157a1d582f9d619f924f5df0ce2fe790f922f
+EntropyPredictionResistanceA.2 = 6780f5752b32699b51e5996e3207ac9832cd0213408e7153698edd28ead6b660
+EntropyPredictionResistanceB.2 = 4a2e05e3afdef41c44245877209f239433cea9d64cafee783b25aceaf8d98218
+Output.2 = 24b058f7b0fe3af7313a722c6877d6c43fc26d073d56d92a1ed03702409315afcffcd5fdcef305b06b210e78490926cc9eee81762647b8aaa0250a35746cf83dc356fe6dad9482982abc68d1becb17b5069c3f657bae91b75129c19325c6e372af41a1cc07102695da2fb93c0bdf8ba080a6be227b4123eaf7da2295d71fc7c7
+Entropy.3 = 7c113f7f7fdab0bea6039cb6008641e0f56f7afe365360c307713432641cb7b7
+Nonce.3 = e76a1a029b80273adeeffbcfb6bd1c8d
+PersonalisationString.3 = b3cc7c7ea56de2bf3efe10c4ec4a4956f6ea79e1e8f16a6e2edee298e04e7451
+EntropyPredictionResistanceA.3 = 713bc2f5ccf166c939bdadf48810259951416051bb568cfaccdc3d4021a2a7ea
+EntropyPredictionResistanceB.3 = 0654658cc8c71e3c56583824f20b4d903409cf5606fb1bb15d63c78edb061166
+Output.3 = bd5a4ae4f95040a581527dded4a8092ff4c3cc824441691a65920477124e19807847489dd9f195cee5d677b43ef74f4abc1660bee85399c7f45364fc1d4f7cdd7c63be87acd0b6b9c1643f35f018adeac743fe7ce542dc5609c74a4d482ae1ab3fcc5e9d229bd9471a5dbad09fc940ffd6dcc49ea2f9ddb2447a94c8cb31f165
+Entropy.4 = e06149c41844de7e087ef8bed33acbabada6e78f2ee86cac93b3ad3624b5253a
+Nonce.4 = 713b4d00eda69f8ac11e31ffc99c314c
+PersonalisationString.4 = 61d6d1e0a0ebe519cc58505d9fade5f2ba09d937f67462f7da5d116ad511f816
+EntropyPredictionResistanceA.4 = 6df1af8866c20a1022acd65945dd2bd19c79b71bb4e72305034013fe88d9107b
+EntropyPredictionResistanceB.4 = 6fd4d507a6c197e170d794806eb407fdad08dab6b180782efb513b3b049c0085
+Output.4 = 4e7a9a2e5e5de0041f900ff1f0a376d09316e5aeb1b73bcc96cfa5ed049679c5166cca6c34f9824da6cb316f54dd0079b1fadee4db7c2ce49817dd015a1b7e57bb8574deb7e1af68d17c5060407a66dc46ff062b31941fd3982710cf87e0cc272ba9980a6a668eb385480e4ba004f1316941df45097608b3385214bc28b3d48f
+Entropy.5 = a284064bc230706f86b0f12932a0b9a9d8d80f2e9f395fdaaaf773d9bc9907f2
+Nonce.5 = dd8d3b2d9bed119973db04dd10fefdbe
+PersonalisationString.5 = 2b50347cc9b5f9af3eeee038b90f94d99eb3f5f6802d9468794abd38c334f542
+EntropyPredictionResistanceA.5 = 7a07600006d0d8b0bc32dd31d3a75ad96db34b81ee24e0432c0bf6086038e594
+EntropyPredictionResistanceB.5 = caeba983c0af89770f63964fef53d4c90c5b5d7eff31258cb51c757cf9a2f282
+Output.5 = 68baf79829506f6fc9418231f95ece0cd7755919a0779bfaa3032d32068127d328876b78b93d7df8136ca5da86e3c1a5a04782854f79a0647bf20ba8b59e6116ded3e9be583b715d3a97f8c582a708e88d89f23eab92d3f7744e1b6eda65f8d0f92a729e920e9478abb07be7482ef79620ad29862905166a1888d25930fec0a7
+Entropy.6 = 20c3a74da292064e65fa5380d7a8d9883a10cfbc392e939049b9ff32ae59894e
+Nonce.6 = abe2efec46ada17dbb2d6e72d120b336
+PersonalisationString.6 = 85a2587f5d3e8a22b58734c6ee95845fdf66c9a050cc2ccbee6f3fa68930121e
+EntropyPredictionResistanceA.6 = 1cdac4e5bf44514c67a5fbbb6e7423f8087772a92f8362787f443c6b003813e2
+EntropyPredictionResistanceB.6 = 649eacbde9400ac10fd5537a5fbf8da5b0df28e2dfb38590c49e91c3c85c3a75
+Output.6 = 75af801ba65cae48c5224509e0e01b347f7451bea38d0967d69bd7dd99985ff0209a46ee5dea8ee0e6174f9bcdd4132173462df5089546b6581cae4969d2f7180aba4910d383d9da1ba667f05010a8901ec364d505fd4236c0b7751aa925b9c6a035b0b230efe6d99aa6c314e030cfb7e69fbcc242f9ab25f1dafa9f7de1fec7
+Entropy.7 = de6270a191328fb81da824960d05fad10f284bb30aa07ff96cc80453705844f1
+Nonce.7 = 10f47d99ea3def5833b4eefbde0e4241
+PersonalisationString.7 = e0aee5093b390ec66740a2c045a7d2a4e1e849a12564ee2abe5854f2ca7ac760
+EntropyPredictionResistanceA.7 = 5dd5e46ed9aea54f0b5be2256477dba1196fe8b5afb67b87ef4cf174ad262dbd
+EntropyPredictionResistanceB.7 = 1031352b0aae52f8377412b1b92e896e8960799720d67be6e994d43d915ad607
+Output.7 = 65ce2d6dbeba47047b5885fdabf447bd69aae1878a0cd552b53127c91fbc36f9689cbb504afbb5e87e1bccf4b05b9f28d9f10b5ec817617e66646c8fa6c74dff30a9fca45c7c16870eae6504eeed00a6c5c6c84725784909db9b58e27abdab2a3481e895bbba6ab86880b64ef8255d4a3f6cf7dc84f434beffda7fb18cfe440f
+Entropy.8 = 0c076615eabd72fb39a3813be715aa289362341b87d41bd0aced52916acc1683
+Nonce.8 = a9573c15377e752362d1e5581041994b
+PersonalisationString.8 = 94dcc1972875d4a80b01a78b20833a36b52558b5a9fab25db32754b2c3e0fecc
+EntropyPredictionResistanceA.8 = 2f6f5a0dd791c021236b6d825dbb4460fdd3728383683a27874955c4c44414a0
+EntropyPredictionResistanceB.8 = 84034780b37bf0189a4bcbcfcc609c1148ffe11183336fbeb0fb716c90945a94
+Output.8 = d4420ee1aae152d77e82c1f8be62a8f5bce5e29b2374d2040b3d563481d3a581f285273b0e8019129b6f261f7a54eb9e5e0ace179b10b8c59fad5638fd84fa85c799c742af41d2f313fba1ec5d2a92b44398a375245d31401a4f417eadddb29dd73944a7f61d28a9492ac1615d4b3870b1bc9509851b9c8389b48447059f5ec1
+Entropy.9 = 8a54df063fdf79a4096f16c035d65fa94cbed3b9d8a3f9a536b8e9feb8f0f22a
+Nonce.9 = 9c86644ccb033f0790c45736198e7525
+PersonalisationString.9 = bcddf01403e1978197898aa7be41832b76d7d36cd12dd79dcb8456e3160e05fd
+EntropyPredictionResistanceA.9 = 5cdfdda25bea3928ada072c03fe8d664f38c47e92941e19c01ed1d85232981f4
+EntropyPredictionResistanceB.9 = f7d4dc9a5d5ae280a4bcc505bd9f845c16fec41ea0bfd10abd9c647175141ef1
+Output.9 = 2588644380c5b9f609a36ded3dbd3ba162d23092f9c813000078cc31fd1a09a0dfec3414d64d13eee8fb2afc5305113f92341195f178fbb23a460f1ddf4c8fdf9e7d99a3a2e6b1775f5801c60969f4932ca64524c69167f03ab11d61bf4cf150a8b2d7a9bb7c377e1bec5592f8d8aa193d04c6e8cc3a12745e2b620ff01e403b
+Entropy.10 = 03950eb82a1cf7b9927dd357d70592a84de9ec47d0a2082922e0dd2b9d33aa0e
+Nonce.10 = 275f76246d58b73e2b6d17759fcbac29
+PersonalisationString.10 = 5758c10d33d9b10aeb17f4e60acebdcb4bdf7a18a3cdd4ceba71206432a41561
+EntropyPredictionResistanceA.10 = 41af7e884647e6c5800c8ef856ca280da939c88f516bb5844be9cc21760a2b0e
+EntropyPredictionResistanceB.10 = c68b39e0787dc56aea5f8b69df77fa3144f111077fa08b9f0e925a4aed6a2c43
+Output.10 = b9d78496b3e7cc457e04a29fccb3e568ed9ed40aa959e6e09facd0cd25f1a1752b9f7748acb072aaf287c4887241c6eebbad8197d6cb67ed131b8e23e14b99122bda14c81b432a90a10cc8d832fc448a601f398bbcd624006f0e7730b52206608d0049a2b64526016714305bbfdb7baf556b03f2c2c931d8483d48ddec7292a8
+Entropy.11 = 291c3fc4bb9bfbd1f06a5bdd51b8e35572efeb1373e1575622038896c958691b
+Nonce.11 = 1312da149d6384db0c0cb9e13c744622
+PersonalisationString.11 = 8123aef974afa1af1a7e2b48550e1fc4e49a81d884153604adad7ba5301b02cc
+EntropyPredictionResistanceA.11 = 199e0c69b33ac64c764be76ccd5ea726c819208bc1d630ed2b6a1e66471735f5
+EntropyPredictionResistanceB.11 = 28c2e75e9414eec68d2dc4c115883f3ad283c5c4b3adef53703130eeec23f506
+Output.11 = eeee2e3cc1103167f6dba84cd07013737319b846b19f92cfdbc479e408ceef763cf90389fb261d311c3e989a7658e145c5f249bb9726d032359bb75fd0e8079a5f3176318317092f30964550d81714cbeb90d2eec50c7b2ea1d347832ac0dc030708df1a10fc99e0166aeb0aa6dcfc69bc8e4dffdc7a0582e4235c46a310b6c7
+Entropy.12 = deff02ac73d44825503537dbdd73a84da6631c755822c278d0c71cb13c7a6a2c
+Nonce.12 = 978054a14563ef4ba6eb1252a2bb9c86
+PersonalisationString.12 = 0998164af2e418c4251e04c1fb00c5d08693fc72e9ab547cf90ba4804c47d3a4
+EntropyPredictionResistanceA.12 = 8e38a0e927aa04962790f8e66ea4a044bedd7b5de31fa6d0032ced141c21db63
+EntropyPredictionResistanceB.12 = a538c7f16f9fb3901ff6f02be34d5769465e66dad2f2f4ddb35f9ded3247a0f4
+Output.12 = 62ffee7c362064ec0df79de4377e3a7a49c0d9dc0542b8f361bbbd12a39f3837ffa21bd3bd08acd629df7560fe6dbb644cb7d6aab6e0cc114c2d39e9f0f7268fed26fd2d3559e0d2cb246b6fafddb9ee665edc119dd33793db483a6b89b259aa3f3e134132bd85aff34e0cbc04b20a8928f08ca3094c85d1ba845c328b59833b
+Entropy.13 = bc1ac08214f4cb3dd6171f4e9b3649e7380f1425ad2eda4d7c15a6e3c960e13d
+Nonce.13 = b69aabc750f3614e5fef4678f53bafa5
+PersonalisationString.13 = d39fbac7d830b9fe9199ca311ef5def4fce2ca3d99de77d28e47c88ef2232fe0
+EntropyPredictionResistanceA.13 = e582a1b26dc03f248bd29f2f00c96cf075fc11cf6357829fb76a88a6d0deaccd
+EntropyPredictionResistanceB.13 = af265dda6de32bfb62c6f0c6a23ba279aae42cd2111d13b0572a658934c27aff
+Output.13 = 14defcd0747e3aecd8575cf917b5623ae54778316f4d6c1bd78ca1f543ab4f2e2784aa175e7a5bba57051749557598b3d6852b2200bdfb35afcc6a7ec1c3c43e1c6eb7d9006ddebeed9dbe4d9b7b135fb7091b9d82155652d8bebd649764da210eac73b7d139c2e4a5a8aadfe4f4b91ccb69eca9269dd839c0e1105296b2ab68
+Entropy.14 = 740dc5fdf573ef503140d173e48a8f10127933fda940187e9f785860b6145e12
+Nonce.14 = 2674f5f111c6bc83650410709db3f92d
+PersonalisationString.14 = 959007584ba7a13d695f598bcec7ec5bf88d1c1b16be089883ee5996c9087014
+EntropyPredictionResistanceA.14 = e38b5d2c75b068a8a742fc1b0da3e3501c41b88f98d9f27b35cf2f2f2e0c823e
+EntropyPredictionResistanceB.14 = f946142c993a1ea0d35cfc4954a6d6cda94de25549526fda419998a245389ee0
+Output.14 = 463727e9023f41449ff085ea411b06f4d55bef481257d3f30f6c52867bdbd8e6a71b381db77affa92b3d951993992a2c305ce5c437f980f4080b03d877f06cea930b31428feed9adc264717cd035e28f72920465d7ac64c3f0c4b858358fd2261015f883f91727b5034580f3a9d52a08bb298df5b7cff4ebdddebb8524379564
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 8a2823ce662d65fa84b8c837279224a95b96b1449859904d0c0e24bd596ecae6
+Nonce.0 = b0c86bc35d9fc4cfd3f272420da4cfa0
+PersonalisationString.0 = f5476fbf9752104d3cbf494cb0b76f32365c9046a3b4ad55911677830df9f9f3
+AdditionalInputA.0 = 83c039b200d21ac003c0a277de3e51e2586c113312b40945e8bcff689680514b
+EntropyPredictionResistanceA.0 = 6e165ace225ae092cb675ea7a143060d60ee2650633b2c1088ab9dd91d09064a
+AdditionalInputB.0 = b49a75144d89b4a87fb45f0ad1effb6598949b90855fe80afd23afb3a6a30c30
+EntropyPredictionResistanceB.0 = 81b0a476ed041bf5048f3d1f8af3e850280b272ffbe9c161ee5bba51f04e079a
+Output.0 = 07ab74035c64333fa3fcedf048143fad00ee4f2ca0b50f08f0463094658f2cafa0d4e2d91fabed0e2aa4ff22be8246adcd59d6567ac0b175439ef4a5374c412d5f89cebf680991efe20f2c6863f59e8e8b48453c99d25a7ddaa02bacafed756b1e12317a17d83de90947341f5d5a23b775af183871b9456e236ddb7679a50e16
+Entropy.1 = eaefb45a9f85fbeb3d2181c78cdc11d382a9a143d33fa58dc4813e82c9be62c5
+Nonce.1 = 394ca628fdf3e822a82698b4d604b018
+PersonalisationString.1 = 9976a5f10f30fef52a2ef2584ae3e660390db615ca0fcc9a1a4b5bb0c269e7ac
+AdditionalInputA.1 = 97d953fbca082909602c846d65265d1cf65608bac6f2d10f7ab08b8fe5250c74
+EntropyPredictionResistanceA.1 = 890c5d525502931b5020fea45a761878a48a3cf833aa6809866082409cd52b3f
+AdditionalInputB.1 = 5fb1bcb51f2962ab8253b09b3b5b9ae6a008e78bb6508ec6825af06f8dc8f43b
+EntropyPredictionResistanceB.1 = 08082f93cd0ccaacd131e0acf8dbada9529e76f6c5ec636de69e2ee3e8c37ebb
+Output.1 = bfe852db3e560cc6763995180e0b1ca60e035a70620598dcd9accce6e83155a10d10a96bddd09e30a30995d3b0b4b29a4d55de47174df05c80568325f14f91f2029401959a9206454955086945010b03f88a2e2f50e384942dc90a4bd9c2b5b096d3f7599e688563ee5bba74bfd891a7273991f612b601149b49ac8da941519f
+Entropy.2 = a97514426e12fc0d9423301a5cdc3fba2b97582f1cc65445f1928ae145508031
+Nonce.2 = 473bd685c7c5f4f187115572cc40fa64
+PersonalisationString.2 = c02d22668a93ac486030b5e7500836e73564aedfac3587fea5ef3e74171ae7ff
+AdditionalInputA.2 = 8204a447b3c63545e5e1d1577b1a928eb69516645ee3bdf52201536ee3588ec1
+EntropyPredictionResistanceA.2 = 4c4d8cbb229dd1fea305bcbc8dadb61747f8ef0b69f0406a30d85619a2c1a9b7
+AdditionalInputB.2 = 1d61e38a6f8b70cac65eb9b81a38cdb96ee72d214f9b432668a08fa93fa4a8b2
+EntropyPredictionResistanceB.2 = 019fccabc4ab27ea18fb5809c4b14a2bf7cee04b9388e55304eb112117293f94
+Output.2 = 25a7e1488dd2a5d7b50bf15ddc38e4fffc3784a248034a2132660112069b5066a1b84710cd414ba886d84c442a96104a54c63af5582fb86fdd813ccd86d49a4a5ca92bfe89b35ed64e89c1b2fe37b90cbec77728780de54e3cd2c3bca305d1157633c190bab3e46d2249eea481558270bbcedee19f2e2e0618f3cbb50d1a8f2c
+Entropy.3 = c980a444ff828b4e0664e298684153de21b4ba9a62152d6805eb0dc361ba709a
+Nonce.3 = 3d656f78c3162bec430348d6857d1476
+PersonalisationString.3 = 36eaade0a9cc78aae38e7e80617fc4cda703ffec3bdb737addd5881c5973fa24
+AdditionalInputA.3 = 28ae8983ff7b29da423a0978387692f33f82dec45c6cbf02417d0f72633773a9
+EntropyPredictionResistanceA.3 = 42a0a08005d9845ddfde8adfbde43e797bef5ad6228e25e866a733352c240716
+AdditionalInputB.3 = eabdc54c097292850c4caf459fbd84490ef2804b8cda8296119c02b3f91e5089
+EntropyPredictionResistanceB.3 = 8c2738753e15d7b82fb7bfe1ada473ac17232482466bf2950be1c9f0b6542fdd
+Output.3 = 2bf8a5e66ebdae78ac4af63a5e93dd7b04f2fde4fc07dff636e90f7f7c00e47e91f2599a6a27e289f651ce9c616d6a0ca7be31bb9534716c7c6973b394b3e4d87546ea84c767373558b608490c3142dc82fed6576ceb3a4b1b6ac91adee9a5cc130fa2255e2423f80ddff40c4b609cef93085f7642cc3ac17605ce34919f053c
+Entropy.4 = e77a1947950fb7d538d045e95b5877a36a1bc900d25b00df4bd3a2f2eb2ea303
+Nonce.4 = cc64b2e667de20f4527c024d20c0612e
+PersonalisationString.4 = 5e5d57a95b0c936505d46f6b8cb73283591213007159b9da0b566729910e36ce
+AdditionalInputA.4 = be207b19ba705e64f93e13df4bc0d9e16954186655ceaee1124535a0f63c0d46
+EntropyPredictionResistanceA.4 = 9c52e029984252d22e93aa50953832495f490a7ecf89b20a54520c78d1632713
+AdditionalInputB.4 = 03ccb3728092fc612be4deeb229e0dfb55b4733280a742b6a3e29684c1137bca
+EntropyPredictionResistanceB.4 = afe95ca6591e1b1f52a31d7d9b63e78f44820d9b9304e68d5b2e87b21b43f8e3
+Output.4 = 7f93d8491f09f53c868f10d95826c5277a133e0790adccd79682f5d9805c31ad0e10fa9a73fbaa59ce70835d75359bc85d6120496effd5a9b9b41be214d056682e71d1ce200a36f3e9c93de06e46fa8404e43a80d8fa8a6648dbe770f884df4255c820d133626fbc5525807fec9a39cbeaeb38df00d572a9b7f710c53836949c
+Entropy.5 = c501fdb299853d967c96cd18f61c9f312dadc3190ef991171d0732810b62cfc4
+Nonce.5 = ee309e1a716ed41df2292dee03bd86e5
+PersonalisationString.5 = 85a95a58cce9f3cbd7758623d85b54c02c25fcbdf87326ae71ee7f60a5d16a12
+AdditionalInputA.5 = c67a48daff530da4ce70341c2c10417998dc8be3d7d98ddfc6c7f29daaa4b25a
+EntropyPredictionResistanceA.5 = f285d931333f80000e0c85adcd6cfda65f32bd41c978d4e7de8f2456d2c91723
+AdditionalInputB.5 = eeac0c41bce7024aed0d0481b3ee1040b9ea2ef8d4f7e3f7b4656819556779b5
+EntropyPredictionResistanceB.5 = f696e3f0aec25530746a0b5a2883e46ec2277de098347ed2cb55867c99950863
+Output.5 = 19b5c2246ca427a7d38d1299c20f6f05dea26f36cd54dd2c23ae5a12e1c2ad1dd1a0657e99461f038deb3db753b62f0f4cbc86be6ac9daeecf305532662f52d961a231d6329feea38ea01a25582b0833873cd0ede0de410b27bedac4a3f00968665283fe06b507cc3ec2aefcab3700b16c08a8cac89249cfcbad4d3396eec77e
+Entropy.6 = ed96bfdaa6e636ea514d4f60794ada2dbd2903c9b02d3df1bc0e69885f0eb2d8
+Nonce.6 = a7ff1fc2b08ff154d046ce904f9d15a7
+PersonalisationString.6 = 8721b54fbd16d27409fdf7fc6cf003a75ea8340c9b95612cf2e73d45ebd926a2
+AdditionalInputA.6 = 6a79ecd280b12c69378a3ee628d445762417a6e1888d0ebf2e997738c93c5165
+EntropyPredictionResistanceA.6 = dc21c01d10fedced0026b79baf531cc5dc066e436c712a68dea5528e8bc6bf18
+AdditionalInputB.6 = acc678b7fe7eb177e9822c1c36e16f1fd9984c1a6b70da34c32519fa3d77b2c8
+EntropyPredictionResistanceB.6 = 8475190d93eff6a89a8ccd3feb06f0651b5871189c77299e09c8323872696612
+Output.6 = 394e7a1bee737bab4bcbbc1bd3d8b6cfd56aab6ff3907e0e70de54d50b9dd38e5f5d537660c76ffbbee38c5cf6a5fd7f300116c81c380717a1f1cd6c3a52efdcc1cc79999ae855fa5ee0cf685f613b0ec46e461a73a4aed63d67bc3b03a8d8140081d3c99e029cecadc643ab634315ec2910d8e3935abcd6309ca99950a7efc6
+Entropy.7 = 2faf20d351590cba179e9f90ac0111d389dd3da802b1e2f7d640fe7ecd94521e
+Nonce.7 = 0dbdd99a0b88ad4e4e5df34293bb3b93
+PersonalisationString.7 = e5174d7e01b07e91b9a3acb5384eb7dd0fe777116256560599357a00285f429c
+AdditionalInputA.7 = 66c3f4a7cc64d6a7624f5b06267c5f6d07828281c3844396ea95e61d8cceca12
+EntropyPredictionResistanceA.7 = 1e04f9ff91092805dd249233e9609aa245e2634956d65bf2c2c4c783a50f58cb
+AdditionalInputB.7 = d3ad17e9911676838027ba029acd873c474677f1198828d74105d5fdcc345ac3
+EntropyPredictionResistanceB.7 = e5bc9dac6e31e1604b8cba89bb398023671923778a3f511d827e11a2892c8193
+Output.7 = b3cece9c5cead8497d12fd26a7e7fcf5f1ba54178b67a5ee405876d51e9797f808c941867839d6c742140c10cf547614293270db4c68099341b4d49f87f2377ecb1294d2e67491c8d320ca66a73baba13ce75d2f0585a120198355aabc5ae30abeb45919fd33d14d300e8dcac31df684f14e33141a736b8a290fad27b7ec9ee1
+Entropy.8 = d4a9ef6443a4c461661eb49fe5d5fc819a7118dfcf61a85109cc8ff5d8780eea
+Nonce.8 = 212ac6d444d3fe8be1150047cbcba128
+PersonalisationString.8 = 8daa40b00d6f9bd8175fa3946070ceff60cc700de5c682e7e29a31c3c28d038a
+AdditionalInputA.8 = 66387a89af2e488ccf1ca379f95a5b0cc73431909347668824aa142e55e4790b
+EntropyPredictionResistanceA.8 = 114846013285f5708cb62b76a9678700fe6587f3843012a3eee81410c807c432
+AdditionalInputB.8 = e5c4583c559e8cf3615cedf8e53970464dc28df5a3e93b2bcee4a8b3abaf2f05
+EntropyPredictionResistanceB.8 = 333754eb9dcddbb31d57130b3f081316d13bc5e3ec399db1d414704e99364c6e
+Output.8 = 5b1270b6fbe5d5bdab8e99af5631d8b54b9e917c71bacc08541e60d4bc19b36a75f3c45b28bcdde12bc8d20f9fb858714a7964cd7eb3552ab316365f4d1d3d67dd816f14335edce917a01fd3a159ac60496fe175ad2fd7e99c449f950da4e4f9eff1eff37a92eb1f642db7382c507eee8204ea8fc603f17a21d89a987494ef06
+Entropy.9 = f9b6671808459082731ce2e2cfcf41777c6d9f96d15451e5730f4336ec4b653c
+Nonce.9 = 7b4476a48cead01e1827c4fbd4f48894
+PersonalisationString.9 = 544571f02daa6c841986e2129fd43ad73d6ae7ce68c2242a2ee8cb70112c54e2
+AdditionalInputA.9 = 04ad9c81fb65b89f1a5c4bb81cd8033701164602162c7cf9c247986116c5f621
+EntropyPredictionResistanceA.9 = f0e455160fc31829429092690b82779f61752966fe44a87e21efcf619f6258ac
+AdditionalInputB.9 = 819c9649278cfc966c98a0e06ee521e3cee0a7f73f286cc1f14f6aa2869b9d20
+EntropyPredictionResistanceB.9 = 9561bc72a37fffae701eb9456d0675dcf538f554adc6c12ce3764d37cd7a1314
+Output.9 = 0622ab85bd60205944291fd3ae766c450c7e6b11cecd3ebf2feef9c9d217d3ad595251578cff7207ca15e28bb107b2616a7062b5e7c77ef611b3b95973aa27a1b8e61b7e7c3e71ebaf3657d1348cc65adfc2bc183b061abbdfb493dd9598c01ff4160bfe94bef27879636cfdb44be1ad602736eef8e920682d92913510c34b0e
+Entropy.10 = a9b862432d2fc59135b35336fda7632c8c5c830604134f9cf5c6b659ce462be6
+Nonce.10 = ed4f3a3ac28bb19764cad229c8b8abe7
+PersonalisationString.10 = caad2c135880b8ed41dd18f64fc712abd30e6ce3e6196d665e839012b2d2dbbc
+AdditionalInputA.10 = 7e34d4b55db03e5a589a5c4a903d51b846cfdd1b2b321cf5f82431ed0fa74f6a
+EntropyPredictionResistanceA.10 = 71e1ea900f6ed2302f6ca3a272c86b27be887786b9510744648c8408ec8f5931
+AdditionalInputB.10 = 066a271adac8438e1ead9a137e435e6fc51a46edb7e9d23d1cb386025f9bfcdd
+EntropyPredictionResistanceB.10 = a24afdef65feb7cbf649752d121fa6b51a7d6bbab49287dedbab0ccfa0c9e225
+Output.10 = 4f85c4fad89d5a6d2460d61bcdd12042308e9adbd654a673b4c7f98d9f8fa39db30024b38fb20012e771a68fe9692ee15f52481362d582919a26b816466c1db87984cb5880532d7b09eda109c59de01e2937fb55cb9c808864f3cb2092d4c33531678a676ebab333e18076fc2e698d4e77b8235c2c7fb789ed99a01360e2fd9b
+Entropy.11 = a06486a89b5fdff0bf17ee50013feaec849d6ad0572862512424914d385600f6
+Nonce.11 = ff2e6d8d3893a0d60810dcff88906ad5
+PersonalisationString.11 = 6530fe2f5292f179618d3d5e769f33115b4c01ca77c17a02a1ffdacd5c509ca2
+AdditionalInputA.11 = af41850b52bd2df9f7acb7594698372ab3c8279dda4a255dde0aac9b98553ac5
+EntropyPredictionResistanceA.11 = 2114f2167310f5734f62cc0dca203226d9b40dd7a56cf4523aed506f25dc3184
+AdditionalInputB.11 = 71acc10f6ad47fcf613edb455d8ee098735fcbd2df6c6fb1aa01da2376ce5191
+EntropyPredictionResistanceB.11 = 72de20c95adc696a1c0ff8cb0806c1c5fdced1fe174c2abfeabfab908a510eb2
+Output.11 = 6a111c20a9efb99172b94301904c26e6b0ed43c5ded35e55ff642c9c186e80fe4cbc70327ea3136e2cb44110b2fc47ea41a66875602f9f9377d63c066bc13cfa8742b7a2e2b13159304a2e871b1f718484686b28bccb11d0be15f4ec385d066952e71846d4b6c6677e7b8812d801b03beaa6c7f2a7467e8f789f6649ea4313c6
+Entropy.12 = b0cfa4382c2e98a16290107f0b0625c484156920dc27b3203b22c6e9905cc1a5
+Nonce.12 = 107dffd944163895e58d904990062b7d
+PersonalisationString.12 = 4da9a8f3ebe0a9bb61af08ac48b0e3cc800716738242336a5f89d16b5ade3c95
+AdditionalInputA.12 = 8ee468e50c2250a007cafc5e562124fd5f2afa68242a8ff9eca7ba396bd3f31b
+EntropyPredictionResistanceA.12 = 62d06475b99d192706afee1da08c64bfaf4e805c5d4b9e4952094c2841257ba4
+AdditionalInputB.12 = 605ba7b4cb726b70e4eb46a5164dc7c72c77bafe3c64355fd6072f90f17aa8b3
+EntropyPredictionResistanceB.12 = 9a4002ae51a72acb4f0f49784884d7bcc18d54c211e5644aaf7c6d45c68481c9
+Output.12 = 11cba85745bb513dea4376693d9c4b62556241f1b5ec2580d29a2cbe35990b2b0873f358a95d54c1429b548317e29a93ff61f0989afc372d27c92cfbd8bdd2903c59f8a8d1eeb6229720d2a90175af4db0c11e056b44deeebafa33c8ac7155aaf8e1f543d40c6e9b064e1a5b655a8fe81d7bee87b40c2e9df99b1ef9509b16aa
+Entropy.13 = e16956b29bbbd54bac81d8d1cbe51a482461d0149e150b75f4c114783882423e
+Nonce.13 = 46130e690c98765b62a847227bbc89df
+PersonalisationString.13 = 00e55260a92b64f8c3c73c69d742a721d7a3b48269c2d2de33a997ce4a793637
+AdditionalInputA.13 = a94d86d6d37c4757c2b93eaa77d7a1bca9054c9a786a4b611bcb4ec9597bc1e0
+EntropyPredictionResistanceA.13 = 7ae67ba11a8a00b87d677b4383e4ea0983085c1561fa8dba4b1783d249fb3c44
+AdditionalInputB.13 = 0dcf73fd904aed5f19852077dea1e2f18798ca923671431451adcd14480a2afb
+EntropyPredictionResistanceB.13 = 746d4a1a23ebeb0549ea1c7f252e5009567fb49d0af01f1a9cfbcb53d6b45f4e
+Output.13 = 19a557fe00a816709cde9e49eb0fff3b609017fd0fb1d1f5d902404fb29d0fa7b18d6aae159ddca5ef0f1a3d5456d2940d0917a5747dddb737bca4f3f5ab02c639be6b48f156c87a3306fd1c38ffb51066aced1589b399b2974af6a1bcf3ae7e3b4291aa74aaa1934ae4cef4a4efb9b39b0555fc9de91edad9e5ecfdbed5ad41
+Entropy.14 = 4dc1a9cdbc689572a86275f17cf3a7f67e8d49df19e18158f24f34a1d3c95ed2
+Nonce.14 = a63c4f741c48333b3717750518969a62
+PersonalisationString.14 = 8bf0a0f7539e60bec4e312a395c97664f218ad1da38bfec5999f78e73c60c756
+AdditionalInputA.14 = 7c08071940fc29773fed0415c2d4ab85d4c3904769bca4e9b4480484a3304caa
+EntropyPredictionResistanceA.14 = 99ed401bf3e48cd6650d4cd81e76e2d290292258ffd9a54bc5850550a83dcb50
+AdditionalInputB.14 = 38ffa62fd7d65ce4e6d91ef3aad71f89978fe8f006ad0d48059e9b62e8ab19ef
+EntropyPredictionResistanceB.14 = 2091535252e0b1199c995353083442a8dfedbf2988327a24bb9383ef9c018a24
+Output.14 = 1a343f2d94db871f3a0f20ad0fce29f03ba90c63407ba6f507d47e8a90ddbbf22aa92e7a2ada1cac4c0908c1ad94069cb726846ec11f70060073a9275ad7b2d748a703fea5ea080cbf88493b44aebd08aabd8211e44aa663b96b1391e5077d484d37d058102135bd6ef4d48d299842c999c5723ab5a618785b779f3ecead8501
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = c079ff0e3a2cad1466d54a0d6cd8250436596807df97147c5d163fb06f73d169
+Nonce.0 = 382aa4c29278803d3ac7ae5b41199ec0
+EntropyPredictionResistanceA.0 = b379a3b0164ac1429a6c89d9418af3b2f39c29b567551f0b9ff064c811a3f4fd
+EntropyPredictionResistanceB.0 = 39d71d4d873be0ff762b9987df4e771154a2ca8704dd88f57cb65d9ef9f4602b
+Output.0 = 0975fc74a5934bc6b2362df272306de255bb03d2ac1cf05e5dde3ea999b730d3c5d39d483a3edd725ab698911d8a9d6ec554a2549b85d7cb048ef5f0e481933d8d08e84f31a3d9cbb9c5babf092d09f9f48b3f0d0f4b7817d77615a41dfc4c3f8f46dd54b336c504523c1b9be3e1acecba68f3e36d2a523feb6af2c1d24c4864
+Entropy.1 = 3091c0bd2ab5c53ca7d1da086250e42c17a998506f5448790b0906e7acf50f9f
+Nonce.1 = b406749a9deaaef6824f4c77295bf647
+EntropyPredictionResistanceA.1 = c733c8233f82a2ea98a7b43e5d10fdec7d84f5f35e607649b10e333b24022b95
+EntropyPredictionResistanceB.1 = 27430585c790b929719c79dc408dd303f0427476fe5b5be0d6813011ca93ab3a
+Output.1 = 3c5d10ad342a60e616018aa1832a4c32511207b5bedf842f82f7fb8fb304f7053ddd97a9d6d13e0f6fdb3b3b23e7b8268a19e5b523763beb3750656abd9551b91770df199dc3cf2c6106714afc138acc954c9c121713e08fc208166a8888aa9f72d9b4307c6df49a990579247f9193088580ee19ee0790a9ac2339c90f1ab474
+Entropy.2 = 77a8cdc117559d3877cbf6ffc4767cdac5f24eff1e4335a3e721c3956a3cabbe
+Nonce.2 = 574af3253c1b643958f9b2f007fd87aa
+EntropyPredictionResistanceA.2 = f2842850d7c2f562a12e223b68ae7225d5c0b1cf9f3794938af127afa6a0d4fc
+EntropyPredictionResistanceB.2 = d535edced91ab72b3b6c6fe7acf1334c4dace734fa095a0e90388444a45ab842
+Output.2 = 83b65fcd10da37c2778f1e616e721c7eadba6d55646e99e8faff0f91a09aa420f61f14f535270adc5caecb457fcfd3bac5fea262f41612a4f6ca1126e91c243b18aff820ccdbd30549261b1c847668826ad5f707f98451a08924627d319198a3bba1017986f55d4eb80b822acc404ccce1e2b24834a42325cc4360ce9b031243
+Entropy.3 = 4f96d843f123460d403144cabf02ffb386a2a18844e6f461d77ad4a26cf3aba7
+Nonce.3 = 48ed92dd9404dd690fcb98f431c27c39
+EntropyPredictionResistanceA.3 = 065e3af3c0479e3f3d0b304d72439294a80ff3026b69a354909e8fd751c50e9d
+EntropyPredictionResistanceB.3 = 9a053212ae66bc656f31461806233e76334e6647b99209a02db65113a2d601a9
+Output.3 = 24a13b791977b889ab53ded9e389468e59dde736cf2a81d7436bc3e1eb95f0d01904098ad518d03b7ea5995dfef76e394e518e3e8638afa9ca3582351a2560603e39b321ab1797c889e5294d713816bfd3723fc1e7692cc5682222ebf53221f90f91d081574c3e387eef2d39515448ee5560782b47d6e0c8a604a8d8b02a802b
+Entropy.4 = 9d38a70420fbef558c157a5f15f9bb4f00a2228f4a6005b6172301f37949fb13
+Nonce.4 = 70b02e14e0bc72468163ce82139c09b5
+EntropyPredictionResistanceA.4 = a9ce88c05cfb764a9d902cb35aee25412efae7cd5200cdd1d10c9abcb8830ab4
+EntropyPredictionResistanceB.4 = b7b16167d1a33473b8fa954a3e8dd3a93ba9a7a8b19b1d67356bc3501794fd7e
+Output.4 = 51d6b53aa9a44fc5dff1a5bbc81b1b9907e622aa95d3e43185fe61735d2896091f9002422bf1ef62ea779f91f394040d16d7c02239b0b159d549d4d7d85a34762ae67c401651c2d7d27736886fcffc87bfda3ad63fc64cbc127d142728fdb3ac37875e60b2d836836c47188d6f46c6fbc207a0d6a646d210e317c196d65c9dbc
+Entropy.5 = 001ec739a2fc0db4c6197d39b40e399a5efee0001c2a6fae97383a83e8582307
+Nonce.5 = 16a5a89a4ae6a08a9b3c195a29f55687
+EntropyPredictionResistanceA.5 = cfe7807712a3f7306c66a675a40884852dd835098225b215713e1c9570c45d0a
+EntropyPredictionResistanceB.5 = 37632549b5a39aaea55e74aed548a02146e35bbda5b798615403b77022640c5a
+Output.5 = fd5c9dbe0feb58d6a7fe1f19bde4b7e2e8590968c79c4e577b68a641cfb9e00968a44243cee49662b6dff8a66cf51fe6c8296b3f3f38b17a536cdb98fbbcc372d57bc4a4025ec7af14876f66bdda067cee1147bf7b5f49b7b9b6509824d345ccc9769c4cc319df210d2fc19b90c88fbf9dbc40e39695d3f81d41caa679cfe297
+Entropy.6 = 3643c721470a24c46c43fa2f1974250ed3ad352697c7a13cd100277f74907aef
+Nonce.6 = 9c3fb7444ceb1e8fc9957e821e806f90
+EntropyPredictionResistanceA.6 = 49398d4ab50d07c8887c420b7cc7e040c50092a900e789c4fe102953b47b7e41
+EntropyPredictionResistanceB.6 = fe299cbad7a3849e0896a078e4fae103e5a5bf293def067196a99f5140354b72
+Output.6 = 2cf53cd28dc43b6a1ce9b971fd5363cffd29ba555024928a2ba9545d82be270dcd1aaeee9a136124de1ff1be2cac980d89972561cb14ece2f29c4a88a8b7fcba1e3da5b736a3bd7aa75bfa6b7d0aaa9636fba109b817ef8b010d6aac0134e6ffc449e19dc1fe338a16bbd69a50fdc6996ddac8abd8b93aa34d55d53e956101c4
+Entropy.7 = 921ba95518daea8d6af527c217db03ca6fc728d48368c326a999aedd8b2c3757
+Nonce.7 = 24fbb0c83403d6100335795b6199adf9
+EntropyPredictionResistanceA.7 = c79f3ed740e4b3775fd1e99858efce5cb8240d95db373e9b0e8ea2fa61538df9
+EntropyPredictionResistanceB.7 = bf4214377c862849ecfbb9d5e93590f9fcf97d9046478ce4762aaae645b2b224
+Output.7 = 927f8dce91dd7e652e445f023169192d11e1fec8e3c8fb16688cd0ff90f0b52342cf06f01d9079b92c3bfea69c55686d84bc35520eb9ffdf7dee9c641abc6c31481dcc75d2fd2afc629cc93f627544faa57b5437cbf0798e0a69207f8ef5b6d6b8870850d88926d4d832b84e57e31151313b4e593c18ec5e6b70e7cb1b2abfe4
+Entropy.8 = 2e62c44af77c2e12006a2770168821c0d8c91ce4e6dc65de7999676788cd5189
+Nonce.8 = f10d8156ff79b01273827996b3db98dc
+EntropyPredictionResistanceA.8 = 502b716d8225d25bd7a29e7d597eb036604353da1a25b37443e5524fed3fbb6d
+EntropyPredictionResistanceB.8 = 4c8b885bc45507911b913df516e8253981a9825a00873dd04ad7f60cc15b707b
+Output.8 = 229f9053d2d2a055af5716712178f57b31e381115d158c2a9d8ec8d4bd2556bcf0a9715ec9b6ca40b7309d3cb5d7ca6f7010e0c9c4142d81e835b5eba04e45dddba77ceae382a1b2973620e7170603b827baca15c599478d28204106f466a41d4be8110df8ef8ff0912c5048955436631cd429790aa05f8956a531a50ec706fe
+Entropy.9 = 8e3fd4ec7e5d97585dc8f1bf065b085bed4359dc2e11b274974b1e1a6431df29
+Nonce.9 = 890c831e9f553cc01340762014c6be44
+EntropyPredictionResistanceA.9 = d5e0d31275a19535097b336bc9f6e404930d8323e669ff29659bdccd28005ab7
+EntropyPredictionResistanceB.9 = 80d2e411e14e6b16e0ca5f2965a63589de6fee3666090d52f113ba8cd0431628
+Output.9 = d242366c98d8ca089f384ee67a0994f556ca644a642d71fb98f91ab581cd455d7869853d32077eeb9f81536ef30e7bb50a589a7fb328eba5933357fb715b3ecc8e5f71e9df291e3d1d648c446c583c3de0b3d66b735e2fb2d212dcf7a32222170e6068f224db826a54d65165f59c777b06ef625e87a6ef11c928a22877b8f166
+Entropy.10 = 615a9a8fdb48042d03cdf78cab0a98d983561ee494c1f209240dcd583904bee5
+Nonce.10 = e0bf9e52f132c1b0ba1e0416800dc351
+EntropyPredictionResistanceA.10 = 4320440b7def41336e55647f0bc2bf9e29b582f95aaf36a4d62a7ca63a74f466
+EntropyPredictionResistanceB.10 = ff0921dc336caf7824898483a5048af75ec094a686e0814fc9e04c3e273ad94b
+Output.10 = e25e444263de8ec1673db9efdbf4b9aadc8b663f8ca38d94fdc7cce2f85d97258d8615595161a5341d85bcd00fcc0c04cafc673177fadf3ac8c89c6f39e7c88630a2b1d5a05720269f41cb00b8256a94f608e2e5655eb1e41695f3d06e3e2bcb672d8aa6824e86a9836ed5c0d101b2d1f8328c6a398b91fd92bf411dfb45c9a3
+Entropy.11 = d5a91a0ab6d45ebbf0c873f375b7df59bdad5e72c17899ec76f9ea1d30fd5694
+Nonce.11 = aca704d2626e16d6ef5c51ea1c1d537e
+EntropyPredictionResistanceA.11 = e2d3e80001bce5fa2a4ed6eea9b816dc6b24cff7e330006943a55b4f94dab083
+EntropyPredictionResistanceB.11 = 41a56dc471262e7fe0f7d54a74afba6686460a08e63415e8b647ea206751052f
+Output.11 = 57f0193de86dc675bc64cc278fe71063912ca6477f737ae7f697fd4f04029abdb4aa46242a3c2ce7efb93ed545f205e045a0454479c0f82a018ead78e6e4c7e0abbce24c9afd563d12f527ba2c36762f61f9cbbde5ce18e09527b6828768cc898d2eca906dc78e186bd3334fc9866291918763f3ab74924e1fcdf8935ea74d2a
+Entropy.12 = c7a3827bd03a190d16cd889c307117717be1852c5c7187371666ab4487a5be48
+Nonce.12 = e6c1b0265f20e9a69253568cef5edd32
+EntropyPredictionResistanceA.12 = 277a8514e06681b4c20e23be1360eb91e24aae388f0f30ed2cc1b766433fb024
+EntropyPredictionResistanceB.12 = 1859bc7370b2ca6bff20692efc01727b58b075acf715b736e67862cca25ee2da
+Output.12 = 1fc0fb0405b5188880bb51add3250e14d09ef8fffeaed501f522a2804cd5ae83b429dd937447d154e8adc030f15cded3a3f3866542b4702f3860bc3d4c22db0767d19772e0820724cdbf8db9d7332e9455ca582c899c693ec04b150118bf22c687f3a58e3071500fa2ba0251681ac99e57e4805fdc5fb2b9d7a83d04c644bffe
+Entropy.13 = 6331a6f77727cd5b6158cedab82b743821103d7bfaea0b1239131018232536a0
+Nonce.13 = bc6413e8012e187e0e40692bd96a92ce
+EntropyPredictionResistanceA.13 = e36a5d2b9fa99c36a32f0d7cef123bdb720b9c09707169800edd4fba50de48ea
+EntropyPredictionResistanceB.13 = 0000aaac7cc756fc99636989deaee684eab8e85cda03cec02323a6b148b6a34a
+Output.13 = 351aa6ee40d71638735a3fd251f9ad23bc3dcb5fd6bd007859ee407492181fa7eacc33eedd5967a93493db1b760aa636bdeb05879a36dad8cc683c0cc0711718e70efbed3cb372ad073f8176cb8a1ab4d3ddcf2cbfb7ae646666f365b29286e24340cc85d1150cd45bb9d4248d95d9bcc71c694292654694d570fdff5475906c
+Entropy.14 = 1ad751cbaf50b6e0e5e4fd1f117b13983514fd41d48e0653504c7bdb60297b4f
+Nonce.14 = 784b5269ab372db19fedafd981ca1036
+EntropyPredictionResistanceA.14 = 12891e5505a7f1b2f773827da61b371df66e480a35cd401698df4fb23fcf9d9f
+EntropyPredictionResistanceB.14 = 68282c17f5f122cf4d95659d50d9fdc7369be9181c0c987052265206c7942fd8
+Output.14 = 70dea890e5f958131715bdc500bb224e186ab472467d6539b85473cce722f64089b23985382f2afac506517fd7b9f837dc752d8c8ee1edbfd69df764734c082376170b248a67d488e18f857e80fde9a2979d32937bad0a68406e14b2ca62fdec02894ba48d4e0a840e8b8bbe925df50758569680ab4671e562fb495e26fe102c
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 702cffa3571123105419873576d38306c943f0effc8b3d5cb5bb6adf68edf93b
+Nonce.0 = bbd23fb5db09129d1f614d91f200e96e
+AdditionalInputA.0 = 85817b39835632130d61ef9db3523a697166df5215b4f1d180725ad5598cdf8e
+EntropyPredictionResistanceA.0 = 442574ab5c65ac3173e08480cae36ac22746bbe36d3f17fca16da5dcfbe47b83
+AdditionalInputB.0 = 9118e7f85d3e752df852af1169b8af5c6ffd09b3606da95ef8b3be67630554c0
+EntropyPredictionResistanceB.0 = 388878f055f339b524670b229daa5652928329bdc908fd6752bf98084547d47f
+Output.0 = 172ad722813181e34fb5eceaee0d6fa6c1ff8daa9288be560d9600bca832e7c2dc388df5137268fb9dc27f3ccf24152de6dd60663cac02d19bc13ef9fb9e3490f394aed7258641970bd3caa5147ea9123903b903443f441e4d139db43016307fed1453842e6a7d6f31f466f5b691519ea745cef32a69d82edbf5f2a657eca2bf
+Entropy.1 = 984e7fb6645b892477c28dd5111a15cf1fa1a0c6c0e116e629c85c2acc6c8d6e
+Nonce.1 = b1ad14e9c9890d6376defed367cd0a06
+AdditionalInputA.1 = e1952318961a1641bb5fe9b1406b68951b5fecff7a323ddcdd64562d6045d1a1
+EntropyPredictionResistanceA.1 = ae4f1013ba7e216790bfea30e86091e11cc4f9dd6c2a44debcaaeb34a98ec680
+AdditionalInputB.1 = 115fb00652893b3c28e73fa2c011e487988679c088063d17ccb537ea05605cc9
+EntropyPredictionResistanceB.1 = f48523c10bbfc0cc2aa954a66e7bb36d51cb7b193a8f2001560c6aa54fb5ceaa
+Output.1 = 4cfc7bc8bdb4d52331e5268aaf3e3979c087e717be84f70bb1ece0883ba674271b426c549265d86d26a2fc3522c4e6d2842354a080eb1c064d6be1e51c71e1c56a14e49fa4f29900a834a455be3daf6e53c5b3bd2135a4537f550e86b9a9c085e756bf13621b241a1cb1d7f24bee942171f5c1e3bc42744bf25bcbc9da743bc0
+Entropy.2 = 66c0bd40604fb14212409d3e7336141834f98159a3c0efe672b57c2cfb837dfc
+Nonce.2 = 6d98ff58601f7f9236df1cc164a80b2d
+AdditionalInputA.2 = 9701d580c3a55c3468e3bb722667f2fde8c8a9103157bb1d7d7ff83e10ed9125
+EntropyPredictionResistanceA.2 = 7cc9440333e8b47387fd02c0bc8f24cdf2e07e6639cb6dc4df18c8aaa1ae1c9f
+AdditionalInputB.2 = e971dc9c9fc96da5550db60d84ae5a34b850c536b4b73a0df05e0cbd8a846644
+EntropyPredictionResistanceB.2 = a31e5f697a7cd5b03af693ea36d7b6ef2ae62601030870ef7e128fdb70eebe4f
+Output.2 = e023f55411ff0f130ecfe66dd8afdd75d62de407acd5b825b023838169e6e017cee8fb00f4d71a290916feb534a76edc068f6701f3e3c4d89deb6fb49006dbb85ae499d0dab453b5db7cc24f40a15780806ae717e9daf16c2613e9c6f1d560f6b373ac56d336ab461b6138e21b4c503b03af859c844f656acea53e6afa75c666
+Entropy.3 = 67f0571eaba0eb17faf1efc64677a03e947e81a5ea28538f9ddff4690a8f24f6
+Nonce.3 = a72c5668bd07d010047791516fe5c2aa
+AdditionalInputA.3 = ce7dc8b44ccab074f9658aed4c806f96d47389aa657bcb8d6463c48dbf046bc5
+EntropyPredictionResistanceA.3 = f3c953e32ac3192773618b54eb467802419ea3f65b4ac2b37587e051b09de952
+AdditionalInputB.3 = 5688d8abe336d214d494b41d9371165bdb863f0a98afbfadc9b1346b4a1fbac1
+EntropyPredictionResistanceB.3 = c2e6e3f0ce5f8f3318c0243cbec9618b757e41c72ff66c212cf03152af04f608
+Output.3 = 535708508e53778eb96ee7da2f0d2cd4640faceab22e5350381e280c9575da18721b496dfe6bbc102cdba02b268b56cc60f1c794e9b457cb9aab62017ca0a28bf47d2e495ea350880bbf3bfc704b7b716ddc63732efac3ff37843b7b206186c1ed808cdc567c7626e1c6cee2f01719ca4698f4ce6f6e2d23da6ec5c3fe250f0f
+Entropy.4 = bce0f1227ca8c5fce54de9af7f12c55a7f4a463247cbf051239b55be8dcec097
+Nonce.4 = 75c5b94a2f4d3d856ca1e6d344facd47
+AdditionalInputA.4 = 06fcc81dca21e323a962307a3f25fe792a7e6dfec0188dbdd75675636581ec84
+EntropyPredictionResistanceA.4 = decc8139ce36513e73b57c25da4b3e6e89d0c30337cd536e023018ff403a27b6
+AdditionalInputB.4 = a7617b1afcd28e846396cf9c15d21e7492d9e85f0100551f25ce181859b6ebee
+EntropyPredictionResistanceB.4 = 62e1b1e0b71743ce8e8395a70f2f9626844f7c08622857a6dc02d67fd79255ba
+Output.4 = 6986083b4f06ff68857b87e126ce61a67756b2231059a101aad9e786bb75751dd2b234afa722c62aa2e7a1d8572f45329f6912c7e8b348f49662af8da8d503efb9d7995b0d8477bfcde655bf4478b6b162410fcfb9256af4929f3f0dfb47ed16c4e7fe40ee170e111499031620d015ecb9e089344d79c06d9ce16c92bd76e801
+Entropy.5 = 3ef60dad9f52efd87ab5d38f54835bb0f1f90084fc4902115b509090e47ea0ef
+Nonce.5 = 5fe25b56b3161a790ccfc1db721df2da
+AdditionalInputA.5 = 232cfdba119c510f30558a9799584ad26f9116ca050ddf7da4fcf6dda36a7195
+EntropyPredictionResistanceA.5 = 2486a3ad9ef564962c144420483b3c2b461e22f78f420d793d8b26c9031071ef
+AdditionalInputB.5 = 0ad1f908a81bfb294f5ebb5edf32ea056bc3bbd8682eb7baf18c320f1ce0e30a
+EntropyPredictionResistanceB.5 = 8841a69ff3f9435f56273cbeb37f7bf7d76e260765141905fec00cde44e84b24
+Output.5 = 674af0ddfa9da5c54b14a5a4fe394fc0c5572dafd8656b8d47c89dc44d0b15bcef4c6f2ecf1ed04bfca72557d30dadef3c1f0b40a6110ae7b8945e60769af6ed1119ac9abb4433207a203567701e7bbccb0c783055ba2b9f5249f28af0c134b9e9e7ad8a3501d5f197859ddcede814d29094f8dbcc3d4d8dbfe7be49face73ce
+Entropy.6 = 52688ff8cb94ec741860ab313999722f9989dd67e4790f334f127f0d67397ffb
+Nonce.6 = 9b72baa4045973642ffd55349dff8f63
+AdditionalInputA.6 = c2c805611db1f9f1e94748cb2057273b8f1b18fbc65df0b5bb098d1f070b94ba
+EntropyPredictionResistanceA.6 = c15ba1a74ac235120d1791ffeac96fd50126c3971aa972bc31192639d1d3a152
+AdditionalInputB.6 = 2309456bfb8105c94a8a42bf5a9529abaec48c4f2ab6cdc3ac9d195edb5531c5
+EntropyPredictionResistanceB.6 = 590609754d438b089c90a6f7309ea94aae4661c0d2e4024f8f23c6960b474e38
+Output.6 = 6f23f85515a2ec4dc72a39c1633272d60a35b258da274e46f638599e78a4d707dcb21858a3aabbf031b26c97b558d1139a6d7999aedd27117fa1f9dba14d774509c7a6263d1fedab8711b0c9e44891da4a2b95c5edcc0e77ddb65c51036dfd2e2a37cbb26ba1ae6660b9ad9a5ec2d67f4b618442cd3ba81aba63adac8baaab2b
+Entropy.7 = 864b4481a34988b217f632b5bfe62f815d58f74fc757d82294134c2fa5730cc4
+Nonce.7 = 777595e7a7081997854ee026f97c2e4f
+AdditionalInputA.7 = 53b44ebd563a24227ce65820f94083c7f3ece6b70a9e66feeadef001df9edbf2
+EntropyPredictionResistanceA.7 = 9bb7643ab57b96a699c149b8a11f46b53504fd72b46ffa4543c3f2fc081cb655
+AdditionalInputB.7 = 7b6b78106b12b9f316ddeb6989207a6df4399d17fa890dc61fe342be25d636ca
+EntropyPredictionResistanceB.7 = 729ece3f97cef2e573ee95cb671ce8067293f47dbf48d38bdef7fb037b12caeb
+Output.7 = 22daf70e254dc954a05551e172ed5557120b434f01ae43e4ec2343466ac60dd1ae1a8e5ab7cb7ce860649c51c74df4ebeb52a64dd2f344d59372ff267e5c1d3d6f37ef88d3830a1598877d0785679675de360bd35b90ecb75efca1d3778ab7365b603dfd3631e6b85288c10fc918e71a364e5c2b62ca9b15dd5d146f30d57bd4
+Entropy.8 = 84c12f46008d4f334cd41381a94f3f20772c7d3caf4ee273ccebbf13525f7757
+Nonce.8 = 80cbb876715bcabd6faaa9854812380d
+AdditionalInputA.8 = 662d2625692cf9cd56b94ff83c2cf648561febdf9498a33dddb3c4bdb1bec928
+EntropyPredictionResistanceA.8 = 10eaa9d7b57cc4d517cb376a2b04eeaaee011919fe39b6a1e3b1e5b97ff677da
+AdditionalInputB.8 = 5518e28fdbf3acc589b68fd64494ad166a0875f32a11ef127e621e4057dd28ee
+EntropyPredictionResistanceB.8 = 4c019042294d4ab023c86c438abbaa07167a395bf254cdb2b5a006986011670a
+Output.8 = 504fcc0da862050f71174ab227dda354e7c3ea2529d3014970885c3dd9619bbf5855472697130e24c39bfb0129630d9a65431bd0e4bfe802032a7193bb79498ac5d819bbb11ca55e7bb59124c21f883862a96ac1ea4aa2ab623658d7b4c926ab1c1f446bec437f511ecad66bf396affea8bf5e46df7cc51025fb6f330b614ba8
+Entropy.9 = b7305f8257c4766bd9b3e8a335b55ad6244d69f3aead5668ce864a1a554b1b97
+Nonce.9 = 29c7fcd512c2acd9ed7176a9c4e865e7
+AdditionalInputA.9 = beda52cb3f36ab6f873852434eb177a498c521838650234c2513c975343be1f7
+EntropyPredictionResistanceA.9 = 78c72b1cabba63106c18dcbc66488a6bfaf1b0a39efa884261df65065a8daf74
+AdditionalInputB.9 = ef5eb4fed551f7ca8e81c4e3abfe9a1fdb7bc6afb9045dac9bc0b9cb7b6e6fce
+EntropyPredictionResistanceB.9 = 842d43c1568c4a91aed0461da76fb0b8d1f7395e523ebbfccb96835cb5eb1d09
+Output.9 = 442632e3659d36a854502fcbe5e6c9b9412f5cd9905c5f1d41bcf999c53b2f189afb939d141851166c87768ba367873111fa6e0cb99e5700baafee1cdf009dd99c907b3f504484d16e8379b9156a2702248da40038b99c55489f48ee84b571ad071eaafa8015011ad9ff7bd5870c04bd0fb115e5bb5b16a40ffdaa560dff4ccf
+Entropy.10 = 7a3cc86563fda1cf3e99d7c82a8e3db712d0e6a1efb8936a43f1c36b1ea81e9c
+Nonce.10 = 14f0bf69d242dee5fed4c2f8b355bd33
+AdditionalInputA.10 = 02ab89b2c777f0929d41297aaec1461615a2583b89d6572600c1089d78dbfad0
+EntropyPredictionResistanceA.10 = 35347ec4f3d875d1883dbed5a48d06765db56520f8ea2fd05a3cdc7b241a90bb
+AdditionalInputB.10 = e4acc9360a68b79b3bfdd2c610f29983cd4f6a18fe154d89d5ba77b5b66cc795
+EntropyPredictionResistanceB.10 = 7af9aea5d7d349f10390dbe73191c39759160af8f2c392595e8848991b4b7517
+Output.10 = 662b79da6fef8feb3789472a93747fee99e2e2a6a30c42744180a600c06816b04682fbea0ddfb6dcc26350842cfc91e420ac16e03826e4d05152bcf55422127be1d2bd563cd218d6a5781a8203360756b41cc084ee9d31d3c444be22e69aeaf3f3aa2b5540eaf169644fdb2f4222ffe64025eda9010ddd33f32ba3fa7c7feeb0
+Entropy.11 = ecc9de86d64e4cfa7895c85b19b996ab9129b80f9aef724ed22ba67f34cf68d5
+Nonce.11 = 6bae39ad965eee2734c807d6709bd755
+AdditionalInputA.11 = b40b59e0183b130ac2d9beb154a02f1ffe674632b986845a8e8458f3bf4dae49
+EntropyPredictionResistanceA.11 = 053475f45e99f34dc8038a326db1157bff08f02bd1d56acb75ec21bae7548f7e
+AdditionalInputB.11 = eb10da0d782f09e2a60282c40f7b7c269e12d2e57598316cb16679a9634a5473
+EntropyPredictionResistanceB.11 = be085751333e686c14bc2cf76384ce40cfd4360dfec7dc1b81dd94fe7d2217ab
+Output.11 = 52276b429c080669c9b4817fe44155b74a39e3a75cdc6d5162e12e0c15ef6832575fdb289f535041a4050842810cdba6bf0c129561d2c56e51eb925b84929946d7eba1b76d8bef29291afba49b82527eefe82bb5e3e064b7a259d507c753ca41fd79cb1faafbb4b1c232b581acf1c9f67773d39df11a3ec124b72670424a94ff
+Entropy.12 = 8071fcfebc6c5cbe2199e051ed013a1d1dd37999f2283f2ab6fd8788e46b13e7
+Nonce.12 = 845ef90f06dd48b87a3a94e07b1886e4
+AdditionalInputA.12 = 04dd09116ab58221ceba790247817eb0e685bd37f81ab83e6441b3cf291f836b
+EntropyPredictionResistanceA.12 = c6833fce521f75832ec26eefa9b19a08ddfee50a983a4eb1b1b1b14dda5d5db8
+AdditionalInputB.12 = ff6071b1c2dc7cb878f91dbd24a995ee171dc7d4968ae2aaf4d5bd1b4134bb90
+EntropyPredictionResistanceB.12 = 795fbb6844ffe50670081cb1e7f13712b028e3467d667611688c30f8c2e26c40
+Output.12 = 8c36d0afee41e4983213d2120e7693d6a2742a15371fea32c1e0241c37f53b869a71d668efc45a303d76ad607cb307a275ce1a11beebf3df5732fd98171055eeab6ab1d5c3be18dae27b949668c4dcab7bef3511f5d03c60ba356f1cf2b3f9010493a9157ef1853c59fe177bf413c12b5455e7e24266e98c06f3a8c97560a265
+Entropy.13 = bbce8768d91b3a2f2addefdb503107ac6b773ad9cfec8e09e54cdaea0424eae5
+Nonce.13 = 47e5fa68035fee62597e750f5cc6b9ce
+AdditionalInputA.13 = 8fb8b4be12fde7077bb8d7475594cba3ca4a99502dd36f5d957f3cef2cce5ece
+EntropyPredictionResistanceA.13 = 1c976a562372f5c36c1aebe862d6069a1685b2a304ff2d78b5130fec36ba840d
+AdditionalInputB.13 = 7005a4b5ea3e8a57a814905f88be1718152c429f699c903638ca5f925dd964f9
+EntropyPredictionResistanceB.13 = a89f8ec80b0e87444052ac2411104babc662dc8350a2aa4adb3652225c3e8c36
+Output.13 = 8e63d46b14388f7b1b8a4a6e06bbd5ccce21fd5d751a28f40262baf9a34a36e7b5000695e1ce717780291aa2f53b16bad126bdf629278d584bc944a6f034c42af0f623206901ce604476a15b7e25e3cbf953b7eda88a9faac7ecb2bdb278b6a0e5e5de54b56e61f9fc2e91e77072c0caad485bcc4c3021e119cbeb98255a71a2
+Entropy.14 = 605db4df03f8dfdbfa84402cbfd44db29a23a448289fb9bc943756d0102c4a9d
+Nonce.14 = 3090bd55c96de71030ce8d9ec13e1c3b
+AdditionalInputA.14 = 5bba8c91dc4052af47039f7497636f57ea044efab5715a179a51e6c1e34bbbd3
+EntropyPredictionResistanceA.14 = 97a9f4ba6d0ac7b7b45abce3a06ba6206bf64f332e3c725fbf4f584c69d4a54c
+AdditionalInputB.14 = e33cd5375df003c6319951b4e861271a4387d0d4745f02d8bfa594dcdef99100
+EntropyPredictionResistanceB.14 = 4fe6652a1d3e1299f670dfbd3557b36413cecef1e9f643ea06ea6ad83e228dec
+Output.14 = 50f909cc4dec686870c7f5f26adad03e5d3d0b120e5dfa036bbfeffb631c0a274d7b299ce28448554065244815e7a79358156be59df959658462a24faec346735d2cbbbca051a676a87f6780983067693caf405d5dba3ce07668dbe545a3fab04186dc306a4292f3fa8f7cd053fa9093ade06a7ca352b3e0323e03c3cf6c12bd
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = de374dee8ae6c1288643091592c9d0d26d787635c2f59b9760ed9fc924ded646
+Nonce.0 = 403c5bf2831d266c6b510ee8766c63cf
+PersonalisationString.0 = 38514ae722589833e2ce9737d6539208204b0d4d9ffdbd0c1c7d2acbfa83882c
+EntropyPredictionResistanceA.0 = 51ba5b5ca4a2bcedada928da0d52f95914743b21366498f8141b564c80086be9
+EntropyPredictionResistanceB.0 = 2617d545ff40cb307b35bd161f359feb7b94638a89b2ec63267c5752054881da
+Output.0 = db9d08d697b3adecf9254d7d741d55c9c060a3f60d74a4ba6f056da52cc8d0e01dc345f8c3b3ebf129d7d05165af791f46f30c4da9fdf16029179560bee8e541bf6381826b9b8161dee221722df11e93ac1d80267a249a476629521cee142f4f21e74052e2857950058f372624f0033daeef70bd1d1a02ef46fdab2388355e29
+Entropy.1 = 18632f071844a9d1020bd0f43532fdc5b653e83dc27ba3711c2cb8d172faf4dc
+Nonce.1 = be5cd39c22a18b25bad7f58defb4dc94
+PersonalisationString.1 = 062848cf89cf8fe09f23eb40ca46db87e1f4ee557e560d58c50db0c14457d43b
+EntropyPredictionResistanceA.1 = 0118af21601081885fdc6d21df4fd8273e2b4644f5cb08a5a1fbb694be95ce54
+EntropyPredictionResistanceB.1 = e5e0dc4dc1f57b8a0cbcbb8e1874f29bf50365d4429d4248e01ed5a9ce1212e3
+Output.1 = 931422bd77b9d0735e7bdae853353f56d73771df4b35ada4c441e428ddb01fb1a03ab2d1373a36050409641b30d94e391979ce0f55e5f0809f41fc661c9920bafa1e48740ea01e36dc541ecdef83d1638b0592b947f49bb90d36d9b077b38621468d89715d33a8cc558293b72ad7883b192626a3e0eb4632ec0e11b60cf6c58c
+Entropy.2 = 30466861a07e0d62c7d75059bd9f522b14c64d1f09a000c0fcabd7c663e52c0a
+Nonce.2 = 443018c91f47bdfc6b47d754734debc9
+PersonalisationString.2 = c5b83bc1b4f172f7dd650369dd8832ec54091229faa8a1a4e2aed868e71f8334
+EntropyPredictionResistanceA.2 = 6b3112046b14a20081a43f2f83feeeb97a0cf12820ccfa6db9fde4c49fbd05cd
+EntropyPredictionResistanceB.2 = 3abc791137122266038e3dad9657243ed2a9c194704715a2dd786446096508af
+Output.2 = 4a75451427d7717f0ea0234cc9d3caa294551d02661f8a4a312a2f8ff552da7932213b2b41d32d900314437090490e67622f3cd831be71b1066f05d3c02a03140d924ed455a06fcfa9f66045048076e7a7bfcb9b4122324f9d4c39a4eb2e0473a5611d653c42c527a4d79aa4128ff1cf59e8347c5b497ba66ca5ec2243f7acb4
+Entropy.3 = 81a66311112070af6c22e5d5b728d8f023c63b36e070845302a452e996686847
+Nonce.3 = 7ee9e347585bdb06d72d6512b77fab21
+PersonalisationString.3 = f3248c93a0f52f45387a816b82c493c5c035c4ff88d091805a5cbf16d4963cc7
+EntropyPredictionResistanceA.3 = b9b46c0879af5a401c392e42de072e782d9e99acb82e40eeff5f159169d34697
+EntropyPredictionResistanceB.3 = 5dead04fe086079848f6042c9819de0d5d507b014f85da1ec189156752063cf6
+Output.3 = 21b0d81ba552950ced875eaa9c576d0f4c3eb4a9b9deea30f715377e6e40ca0d4d50e081eb522c10524bbf3e69cace83cae6edbc989613d0a1e117a22579e6b1d16b73ad557bbf9e7f95da10b8f6f68114a00ab4466115328554c49459f7b8bd29bc5f23cdbacb2f790720ece338276e90e9c1f9d8f2b031fbddda029625f4b2
+Entropy.4 = cbfa5f6d2af4a69d046f3e669fdb6ed427002e67f2637cb2f69d3c30c38c1ba3
+Nonce.4 = 862d0b2ab9cd934965d637b56aa11b6d
+PersonalisationString.4 = 1517a503d3aba6d647e58dd50d8d75f7f05744b6b641a536f3968728217599d4
+EntropyPredictionResistanceA.4 = 5e19d4cd9251bad18ebf32a2a88fb0e38d8965eebfc73d3ae22548a634fa2bf1
+EntropyPredictionResistanceB.4 = 7e32a25e66a7b083c309917a16f7b0874b4d3c2a719672c61b72913da43dc4da
+Output.4 = 73284acc32841833761ee2676f3c43ada36d2f1373b62872d7eccd0bd8669f6b855f4ba4e1426f3827f513de369a16e52e59ccc62d50b5804086881ed9d169f180ae5004c706216454a62deff390d044b11dfb4c9b9f225ba3cf9facbaf1b3e367f10bef29880241032ce0d7c2cc348a28d015d28223aa690a81e9b2f983f1d7
+Entropy.5 = f87a23ec7ead328c941d9a7bef6a4763d42007d631b3a5cd95a129d8586b657d
+Nonce.5 = 2ccbce0201973d2b0d6169cd6fb58a06
+PersonalisationString.5 = ad6447263bca293e78c2039e696b7d18b90d02936b9d23833e32a5df47009f79
+EntropyPredictionResistanceA.5 = 1b0b800d91993fa79f495128cdd4518e62a0331e6b88445bf0f69925e926434f
+EntropyPredictionResistanceB.5 = 7795c081857d286716478fd8d594e4e0cb2337c4a43a1d3c795bd437b7ba79bb
+Output.5 = 66b9ac6eafa1b32527a62ac8670fe15f680f46f5b8c3bc7515a59b780898390613d7b36564677d74f7214b19e944c92148b961864c6f8cd3cde927b8ffbf1e6409a0c8e5599cd1e579946bb680e6bdd76c6f324ba598626971bf7a256981c9923be86823e0cb65d7acb6903ac2f88a84d16096bbc5a4379794abd8a57d225443
+Entropy.6 = 83510f9ef0687e838040d0c4105011d584f4b28c17e638284e5d7b41bde92937
+Nonce.6 = 31403c6eb02739e32b5e2b94f6776349
+PersonalisationString.6 = 91f4b78e6195ac3c456983566c690e886cb4c5d256e335128ca5c3a392a80f12
+EntropyPredictionResistanceA.6 = 659e631b3c9dd6ae0c9acb4c9fe211b806712fa949c191343f5d7e1c66a46f41
+EntropyPredictionResistanceB.6 = fbeb1595ab68efcc19e00b891efbe2336cf2e1e3e82c96bf5040b559fda87514
+Output.6 = f1f6fb8e1c7e3607e4d714ed4e840ac45dbf6d2daadbd1c007b9602afb2d62bdc5cc14f48a88d3ab5a75aa0d6181b60bdb552cd6dca9cb83c2f62f0557501d586b7249312a072f55ea0013f9ccc82d4d0668341f78653cd5c8f61332b8c9672d3a833993c53483c9d11dcd06edb257980bf81fcee24786dd0ecf2ffbe90f882b
+Entropy.7 = ee2113f55d6f967d59c4cb10d5742a48e3799a149223940502a595945999fbc5
+Nonce.7 = d6af2bdc121a3d404cd2e3b5f1b453fe
+PersonalisationString.7 = 0f4735bdac09f7d872f89ec2fb678fc607ce438fca7f0e09575b4fc4a8677ea3
+EntropyPredictionResistanceA.7 = e5a53167ffcd028c9cd5bff152664f04deb33fcbb5c6ee9173eb3046755e532d
+EntropyPredictionResistanceB.7 = 0f7dd4405c6e2565ec202b5e37e9f2ee95bd6628176222c4c47b0da9de175086
+Output.7 = 0ebbc05e7aed35aba0161ea8e05087cfc452d4226d19a62b6844a1a05f7297b60aa53c4d399cb0156600ff5ea7c3ee5f92a9f29db7facd5dc7ee16e8d1582415adfbbb453c225b39a3a881406043ea614c0d465a84e63f64eb79fdb90a6d3c635315b021ef5c975251631d0e6de54aedcf88471e4cce1c0b7335312df3da44bb
+Entropy.8 = 84d6cad8484ad2f9d7bc6d7435e98632b7702a1b3db1c50566f0e37d80716002
+Nonce.8 = 1d2a758246104bb9903a91456aa20dc1
+PersonalisationString.8 = 13d6b984875c3f86221bbb5b151d6543ab702115481f37972f907d80cf341a57
+EntropyPredictionResistanceA.8 = c58a3df20de3d64f926ae882cf0f9ef005bbbbd5107b17c5f217a962c85823b4
+EntropyPredictionResistanceB.8 = a19353fc6d5ac93dc89d032d9775f04a2e45abb89d2e8862a281e78ccd36b506
+Output.8 = 262095c949086766aaa83deed6ac4c5053e1c227b3e5f2f68a930c2367bb46979ec4e5318ca5c6a86e86389a90dbd421848aee3b4b020dfcbae9e8c9b7c88fcfcef98070e3f4e5d8965665dda530ddfa86e3161881634e7a4d775252267f155fb2560ca9039d4df8a0de5979bcf9b1c12bc641f3ffbc9967ef10ee7372935892
+Entropy.9 = 8aa83a29fdfbb02993c326f55c05e78baaba13aefa622a63d84de66638098d24
+Nonce.9 = 61380415617dcf3c4492b8f68684e0c8
+PersonalisationString.9 = ca424dc24543e9929491e0f0b204894918e1c3142b26918416a2e9b470af7fec
+EntropyPredictionResistanceA.9 = 7953cff4324c83478932bacf87c4a5984832c3d3ec25ea8b5ba0e8fa12af3341
+EntropyPredictionResistanceB.9 = 5f69d38c83844d36e84e9f44988fa1c170150a35854aa3f8a5937084647487f9
+Output.9 = 655d752e7b9aa6e00f75d470487a79600279d0d2b42be9df594244c112d091df5345091ad8ca072db2ff0a92b001acfd7662b9bb0cd185e5b0c9b52338a6f0758a44dc7418326fda528a0ed0d6914f51826d4d18bb526dc17426e0fbdba7d5615b075eb7b1cce0733ab5c12a17d59bf0cf3dbe540daf0d88b4886e9a3f8ec006
+Entropy.10 = 0f2eb9ace7f52a3cbd12b00283b6b9ca69780a1aae79086c3ac228b55487c3d7
+Nonce.10 = e9507cbcc04d512a7224ebd264f5504e
+PersonalisationString.10 = b834e9d3510b59277733ef1326cea9cc71c89f8292579eb4dc590982cf110e70
+EntropyPredictionResistanceA.10 = f003abe5655b758e2ab9a2f1c09e8ae9eb963f6e1ee461bdefa36572b9b0a790
+EntropyPredictionResistanceB.10 = 2a7e1dfa5e66c4f4d9b8724459351d36b144cb462a6eb52266b8862328a8d1cf
+Output.10 = 443614e781a2a5e1f7ca5a4c344a96861b5ff9e0594b6e6c8ba2d7cb7eb6b1df43c2ea64b63fc22cc5e2030e366b88cd9cea483ad0b7fe41c9bcd3a5f24133e8bbe8b5b03321729329daf2d932ac773e02baf5fa08632b07b6e8932a2cca6ab8333dc535a824201c8266772308115c10f02ef5a10e212f307973bba146d16774
+Entropy.11 = 6ad93e0ccc11ae185c0491ab0103ec73f2991f8514e41851c1c5d13a99931dca
+Nonce.11 = bcf82d65f8817dcb50b092d9758d09a9
+PersonalisationString.11 = 1affc98b974cd46338502d192e8a64c93cb9e4e11aa5c19d79ed39950158d635
+EntropyPredictionResistanceA.11 = 88bbc304b6153bb060ba748d9132c0140ea348b07a2869557490ddbcda9c46a4
+EntropyPredictionResistanceB.11 = b67ce9b0ccc863a2dfc0cf266258727fa8568b9e5d66d821d3059302e431ad18
+Output.11 = 2e6669de722a0f693e77e8e82fccb33c749a338aa243096c5b7f553d648e904120d371ccad3e002d886715ee106f996fecfca0d88221033ddb368f70f970ae59323c63090dc956b5a76447dc1c5a0bc72f4c7f88152813ed0e2c5c2cc9127ebc635c4eed186fc3f431a78ded886b3a13094a369791891fdfb63d704bafaed0d4
+Entropy.12 = 2c4cd2236bee33c9f9ae6c878225226e241bd4b361f97c51424cd994b611a54a
+Nonce.12 = 45381a019b8b54f4f3afb2a5c53fa3a6
+PersonalisationString.12 = f6c0b6d3888686b291d96ffa3ff5ca7939bd3ee507ecd2759d3ff352bfe6912d
+EntropyPredictionResistanceA.12 = f10320cb48685cb29a1d3fd84f25a4d92880616a8fee449c503156ad807fe1c7
+EntropyPredictionResistanceB.12 = d0ed00c8090278541a45b8d040b266e45d963dd64c0abc51cced32d135a854ea
+Output.12 = 41b85799e15c6b766535665182317e9f6a89702ccdb59a4dde3c3bcc13a4906abbfffdc04cdb2b79323525fe7ecf77a6e3d47f316b538cff4daa23a5213689f9a3cc2904760cad4f6a96d1a1b57d7dd3697acc50bad755032569febe9efb7e3787995e4425a630ae62a69cbbd91973af0cb4e8044a5875d5bac24096dd2f8de7
+Entropy.13 = 55f587373a541caa7c46d47b90ed171dbc9f104e28f5da307698ad1b09afa78c
+Nonce.13 = e7973d22f0d9ebd53e01730f78bc225f
+PersonalisationString.13 = e4f6fbe92b08c3aa220640ad60cb00167da5c0e7fa9a518120254c55c511ac30
+EntropyPredictionResistanceA.13 = 88f6094f9b8d3be45e9a767514015fc17a54b61652a014e8d245736c984651e4
+EntropyPredictionResistanceB.13 = 62fdab1a30f862c38dd27ccdb6021c29641b413f7eedfcc20493fcfb6b5f0fbb
+Output.13 = 78cb37dc95f29f99ee7bdb50a4146e0fbb461a5f39cb0741fea313daf861726a9378f49bf1dd9b3f4e8243c97d33ef463ed1b065894f4b1e8f164d32f415b79613e4f69053041b00ac4fd979ba2954ff0f8598285c2bcae0fe5b782edb18990d5781279d6d115007960865e6cad21153ccae1c38b8ed4fc99ca1962e84490e63
+Entropy.14 = 25395ba95ce8ae599bb3947ecb1c2a2f6c9f87b42b282d7037f9eeeff2c1b133
+Nonce.14 = b62f8a91af6fb92dfec4002b5c71a9d8
+PersonalisationString.14 = 3966fa7c7aae3a48f69305b7ef217686ab83d5bf6c87e72b5980c65756b36e9a
+EntropyPredictionResistanceA.14 = 5e057e87e863e92b64846aea608eaafcc40ab581a74bf80a969414cb7a91e393
+EntropyPredictionResistanceB.14 = e5b2c310745481485ee5b5e8b7323605d390f06800e9dcadc519c9890b211ae5
+Output.14 = 933bff56ca7bff943a2e15fa2883eb022706a0621d40a9aa78eba2e950f05b677fc29428e2fdd35c41aefc382c00588745e130c1a43744cd4a0c52f8f12cadee61d23039e287f84620ad3cc2434026de9ec1aceb97e29b4cc00e78ddb06113eaad538862b5a23dd83a7eeed34eee672c9469a08b0e1885f98dc822f2765c09d1
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = aca3f0b79026b1252ff674ab40d0877bfd55ca829f4e2ea28fba39df8f5d33ce
+Nonce.0 = 890396c0d2323a30dff8aeaaed7c7c84
+PersonalisationString.0 = b4e36d340619ab374a0f641201b4b739e7ea57b1773a76cedc1b5ecf35de061c
+AdditionalInputA.0 = e539cb79057f55b38abbd45e870c137d944774fc938bdc84e464ce7ec6d92036
+EntropyPredictionResistanceA.0 = 736146f0ad99fdb3a320dcbb97e604df384cf0a304360153584a8ceeb2c4a76e
+AdditionalInputB.0 = 2b88b197dd1ab7f7c7dd512e9e3b14daf3eebcd4dc7346713fc13052fa5a1b8e
+EntropyPredictionResistanceB.0 = f681412ddca64b02579692ffcf44555f48819f5eea0b11d8d3a7be354cb01141
+Output.0 = 0c8c8dd86843bf08fab6adcf9e46175ab4b49c749d189aace2e133c1d8fd09069a0fbe12174369cd49df2417d0baf2025ef56bc8141d5e47f396a5bbca919e0a66b0d5ea9161f4ae347272711b5622723d9ae26da30ead46d6c3f896a485394d270d253987861eb282a824772cd67b77adb78add7ea8d57d6b4a68c753e97e9a
+Entropy.1 = c036cfeddf278c15bf9f4b0fe97b54e4a709667f1dd651cf3ae2de0a49ea85ac
+Nonce.1 = ba72c176de957fea91664b0b656f41ff
+PersonalisationString.1 = 5c6968f65e38aa552abdd89bd3e59bb5345dcf3b1ca2d12353e028a6073dee6e
+AdditionalInputA.1 = c3f594b08e20bf55646af47888efcf128d5012d22c359de36aaa13900c34d951
+EntropyPredictionResistanceA.1 = 01a5ce69fcc750e3ff2ce4e26978a3ad755496d9674ad18001ab69cf17954e2b
+AdditionalInputB.1 = 7c2cf41b56065dbd452977d4f3c6a1eb7357c00fc5bec6d357eb12909df8afc2
+EntropyPredictionResistanceB.1 = 240cc0772a2a7d45a0ea9f0ce8dce9e9ba91d4da812799c6d31b6a952b31d983
+Output.1 = d33bce1e3167816232e215ae38d9d703743477d9112228159b3652f31354135f8763336a1ad3c388b5f8e8ae8b98f2aaada3553d0bb42edf97c2eaaf7fe40418e498a993935b401866eac9cd8098171df5d567bfa4e6cd0915ec0f0dd2dcb700dab7feb74e671590e73046036bbc8dd65082391f5051979c0ab93a8c1125639d
+Entropy.2 = 3602fa4e6035c20b558e5cb7fff9dd6542d1a22c8981399f352b0d7d67d64c9b
+Nonce.2 = 652c5807aca392197628ed7dafd1089c
+PersonalisationString.2 = 6b3d43f0a0df4ba478538e63ababe96b1f757225ec383f763f54941d79575671
+AdditionalInputA.2 = b25d328c2d9ff3481b46b82b475e24d19f6a57f860f764a69232a0b470d2c2eb
+EntropyPredictionResistanceA.2 = b52bd0e03f8095ae4e42f2c353cbca8c2ba4184b00f959f82050fe649be86d7a
+AdditionalInputB.2 = 461b1e716d53088d6df01fb85393b7f0dbd75c2c35c78f7e8a5f15536af9e520
+EntropyPredictionResistanceB.2 = 7ad3a5f7d940741340ff96fe98da14aa9ddf363f8168150b43dec8abf72dfada
+Output.2 = 717ee65685965c8a44d38230b53c49a13bae811d19334ab71f4bf4e5b8c6c5216ab028fc09e809f88d83d21714cd3b2ba9ee31770acd34ced76eb31bf2cac145decfa7b4fd778de31dfb37e752bdbce5ecc8fe6d351df609d215ac91149ae4518922c6fee921f7cb75fc430796f5c8db35b1b38c3bc9035c872774fc4937b004
+Entropy.3 = 92ef7a30599bca85b4871008a0c59d741edf0ec4479b2c588bcf834503abaabe
+Nonce.3 = fb9ad0f46b440326ba32ead6f7b85ebe
+PersonalisationString.3 = fbecab9c5dec0cc064a6999b3d6ee1d40ab13e6948cb8a973553277fd782bb72
+AdditionalInputA.3 = c7e266666c77794bc9d0cf9fc6b667cbaeb6348d4da95bfcd531a83b9ea4c869
+EntropyPredictionResistanceA.3 = a711ed6324fa6b235ed91086991d582ed2a9d6c7f063e6dad72144907943fce6
+AdditionalInputB.3 = e10f7e172627c8d6c327b14f8f11a1bf7668cc1788eb0e785eb2781a38d66840
+EntropyPredictionResistanceB.3 = 7d156ddf2cc59eb7e70bd8aa01581b220d59854f1de3669476b51754d73c57ba
+Output.3 = 06b242151955566f733376b48446c17e1b294ddafa1cf7f9d9da87cda5b43b9db03c7eb582a270b4c5d745e6cc7fd2f2aff1847de7f1d72f481f858c163feeff8afb94a4b761f3d75a511cd8cb06853ff1eb98f379f392f6e681320264ea63106e7a48e4a61b2e4bb82f805ecc1e9c8d0393764b873c9e4b2b6374fbcb589130
+Entropy.4 = ce62368109b1d226a949fbc3a0cd84e6e11bffc6a70d9f6c18139815163ad43e
+Nonce.4 = 3d22307b92970f6a1691bfecac9645c2
+PersonalisationString.4 = b34807249cd00832ded86012c62e4465ddb1b3872d3c3a7d6aa33a16e4820336
+AdditionalInputA.4 = fb7618eba54bc2804041ab45ef57b5d7a89a3590d3a56487c5fa1e4366e8c190
+EntropyPredictionResistanceA.4 = f6c7110d135be44d14852e55b168f18342e8774870b7ad57ff8396df0d9006c5
+AdditionalInputB.4 = 96e85b5d8c9c023c5fb5cd68d993610fb3cbf7cf5356ab36450465ce150b32b2
+EntropyPredictionResistanceB.4 = 3fe0ca127f4d2ebd78f33c9dd9171483be3fc163b50c00efa30a139ecd83f33a
+Output.4 = 6e0f73885415c0d2e03291061b8cc5f60cb094d63479da6e4f489f47938333a624a76b055723f5194a2353439bc5ac154226cafea225c14ef158dc4c1e5bcb17c49d9c80303cab7899504cc09a3205934a1313ccdcb3858c8606d72ee946b0fa30895a34d7a84dea9abe56cfc00aed94a443f88860baf1e2c0fc242f0684fdfd
+Entropy.5 = 6f4fc7e49808f2153e5d81db77142839668294aa6a24bbfdfc36f6aa94e04fdf
+Nonce.5 = 6126a8fd960bb5beb96827fcbb7d57a6
+PersonalisationString.5 = 84697ee735e6c90a0034792e5fda2c7b7e5a872ae1f87d023ec4e9311a96ebbe
+AdditionalInputA.5 = d4338593b955ac749efe8f8b59cce66975e3dd8a0b2e89aac4394f9b14a6dc34
+EntropyPredictionResistanceA.5 = 56d80f19c323d8674f57deff4e8ea15b6ad78abebcc4da679b884120ba9e41cb
+AdditionalInputB.5 = fe122b86fb742915a6aedba1d032a197618bae96333768e45d821dd9ec034dda
+EntropyPredictionResistanceB.5 = bbfdbd608b1cb696bd80852a23e7b9111c88d394daefcf67dbe9cc77df309810
+Output.5 = 4fdfb10a365ac64d4ff60c2817bd07d8f24554cafbb976d8579a0de5ac4b129024df4a6218160817ea28e3bf818554fb12e0fdf302f2777e98349537c385ba970b77d70b05c10a718c7d5efd3340f59a7ca7a2baa33ba68a2a9bba8ca64bf306a8731c418daf00303d017f9f55efc03e129763807bd923df123361d22960241a
+Entropy.6 = 92c59c48338f93c2d7d86aef643d82e889d4ea79f38c79d765d4aeeaf6cab842
+Nonce.6 = e2bf26f49173cc8ca98fb46b70d5fb53
+PersonalisationString.6 = 2ed6943eb36a13017207dcb3b6da3ce31a9cf5add78ae7d070b94c48ff6c2233
+AdditionalInputA.6 = 1c96e0e0024708cf3109adb7e0c5b05d26f878a0b6c38707fa0b2704062b2b6f
+EntropyPredictionResistanceA.6 = c385b6266b8f0bb8759b878ba60cdd1b79d94a1d035e43d46a13bd5f02bce98b
+AdditionalInputB.6 = 5d4a4bc72f2956a097fb423a84865999843b57713c1ff41f97135bf5b1223489
+EntropyPredictionResistanceB.6 = a8f3edad8aff52ea44147b4143c6cf427fda726d45db600ecf19ca92d5ff5ba9
+Output.6 = 27f1558815ce960097d30f3c79e461a95a4b616bb3b0fd1693c3292c9c5caa00fc6c61c33969377acd44bcebad617375bf60644428e4528e6e6fad75332aae5c060e7c499d4ddf35ddb21644cd6b12b6e093e6b42ce0dc0b373e524635fd088c1f15461625bd671ab262c2d9766502b8435a0dd44c9932f4a2143414f0a9470a
+Entropy.7 = f3a5f9e07b50aac88bf4c4b441e4bb24691b38b6d2adda78484c20080122b4ad
+Nonce.7 = 149130ae5c6e90c4f97231f5632436b3
+PersonalisationString.7 = 358f920e2442e0c8b2bd7a46237354bd1196471e8e73870f54aff2862010180d
+AdditionalInputA.7 = 66d65fdfce2f6439b0379f4c7701b9cef67e8d665cdcc09eb4fa80f863f805cc
+EntropyPredictionResistanceA.7 = c96e9b37381bcdb354512be919082eb6d554c9fcc44a7af85d32727f8802b42c
+AdditionalInputB.7 = aa5c928634636aded3e1430ddda1480bd31ce36965a1280e9e91d226e8a912e4
+EntropyPredictionResistanceB.7 = 067c2841e66f611889d3e45994fd6c2588d8e0ec7854ce5b3aa43781c1cd766d
+Output.7 = 78e449e538893c15d39e3054d61c83438ff205403dfaaae854ebf457777f79f6e23b5485ff8757609b6f842ebf50d2fd62579a04b6e3f635189daa210720c34280ff6b92f127c18d4a2908cfd1fec4cd98ec052919d82eacdea90e6bdf0698a75223d7ca441d2d469799a0c2a2dae5c2bfc15f8d0abeeff8fffc516292fcc4b8
+Entropy.8 = c61a8301779c512c6960486f87da2d28a61b9d76ab0edc396d129bfd7e5ad11a
+Nonce.8 = f4fc6494e40d34f8cd8adbcc4f805ed1
+PersonalisationString.8 = 016baee647108191c72c7a87b34d01e152756d36a96090ea8adcfbfe077f9b07
+AdditionalInputA.8 = 6165d5927824cb36bf6b1d0dfe8717c64c6431159b28ea6bc015ce977e3c85af
+EntropyPredictionResistanceA.8 = 3035eb8b2ba7cf37c5ea2524b899b515072a3da3e31c448a37a20f4fa47d0940
+AdditionalInputB.8 = 3be9cf6c58403574e4e995d5d9dce183759d41dcecd6e5b923f5c4928f9d6387
+EntropyPredictionResistanceB.8 = 3ad98dc1fef8297ac8726a53a37dc9ad7d4896fe480ffb102323e30e4f023754
+Output.8 = ee75679744e63d1398882c97dee325738683bb7d29354ce269950dbd86ae8c69751611cb2d84e9979411613c9feccdb32186b4d8a9d3f1be604e03d3a527d32baea6ff851255dc1f63904f4890617bb434f40be0102a045bf61fd9b3ba10a3428052f0b8aaec4ce66ee5e142265aeb3cbb7b5c08c6fbce34330e20178afc8259
+Entropy.9 = b5aa11b0c0878e89d0363d559f79e014a930b3d91b3c62ea774224ae46e2f6f1
+Nonce.9 = a92d3c4110d1eefe6983c46ad96ee3c4
+PersonalisationString.9 = 628129010eb19d5dbdefec0128e03e0849fd2c6e611b7d20994464f132f24017
+AdditionalInputA.9 = 0f60ce03390a1abcf1730c1a01246f0fcd44a88816ff51d3faad089162db8352
+EntropyPredictionResistanceA.9 = 8ac14a8ab2f085ff0b9ea9aba17455e4006f349d5434c76321c9a8f5d43682cf
+AdditionalInputB.9 = cf90e1d9a06a95dfb5ec30691c7d13bbe2032f8cf681358019cb75359e258e2d
+EntropyPredictionResistanceB.9 = 15aa373fa59313c3ca39059343a5d6e5752f8985b4e3e7f3435fcecd9e5c5f4e
+Output.9 = bfe11e1bbac80533edced222187cdf9fb512dc814adfcc0c18f1c7cb9a2e29212a16e11f894c1e19f53e0bd7cc6f99b4043e78a9dc528ba7c9cbbc778ca28fddf26f346a53d29a23b5d074c6de12cc94f4ecc7c751e60b3a98144dd82af0f88da21c95749a49fab34d6021de7300f22acd083da8460a90ab83af7b0cdea04343
+Entropy.10 = 1e05226f31e851fb7c991a7e60a78e54132373769a64b7082e9179db939f615d
+Nonce.10 = 074057c094344621358af0b464a07109
+PersonalisationString.10 = bee6983c3f752d3c6845bbfb6c09522039f5d5dea86c3605b46af3c678f60136
+AdditionalInputA.10 = 8409b975c7ff90b83722834ee358ac7a72a5fba1d62bac886d17b66b8a4ded8b
+EntropyPredictionResistanceA.10 = c41c34aedd573e617930591a01bc4bfb1edd404cf29c69992197e1c97b6ce9bc
+AdditionalInputB.10 = 250508577fd69e18f8990652d503090f54347e6fbcce468e7f971854a1251ce6
+EntropyPredictionResistanceB.10 = e8e7fde619bd33c1edfd6311d05a85f5d69f57a6ea19c7dd23763bf64996f180
+Output.10 = 502af548d8abc46a78fcb4f04494c8121444acb2ad4b292dadf787bcf99b8a0597ddde0c7c89a9bbfbe4b68c597cdb16b296ec0f63b60ac8c271411f16a6e18245ebf41470e03cd515a228f14425b40a085415707e1e24ad8782136b3cd8ef01992df274a2939f752bc52cdba3f508e497217cfb2cd4dbde6ab87b99a04b30b0
+Entropy.11 = 81673c726bfd4f693ad060263917ca799403d45a04c0d10438804f4660ff5ed9
+Nonce.11 = bb64325deb43d2dfaa3b05f780d88f4b
+PersonalisationString.11 = c6795f0c561d105950a267b3cb94592b6b84add5d4b6e682128d8ca0ebc455aa
+AdditionalInputA.11 = 4faa36dbe35504a4b58c78f82bb9921b2fed32eea287100d1bb3141934b33e83
+EntropyPredictionResistanceA.11 = 22e8f293f062c623347975c9aec883a5291987aca116d57e0f93336266ed3d43
+AdditionalInputB.11 = 0e54fc82bda55a0e5dd51790d37b734ca7df8a8004091a05a2ae18ca5c42fbb2
+EntropyPredictionResistanceB.11 = 7d8c6e8309cc5292bfa4b95105403eb318d83e00dca07fd20e714cd37cc83384
+Output.11 = 629a47a3a7cfce4cac30b435714b05bccbf623bfc1e4c46450f17e67fb69131775a58421cd56b9d717b0b99c67abe29244a62dad35f55db4ae1a007de69b1ec5a23f868915685891e2cee7c0670daae40570f60d73060709c882529b855cadae17a15923a770d40e98c480a731c546a7821741161c6bd974ffd64ac1ec148fe1
+Entropy.12 = fab5e71e880694c6dd866b50614dac6fd9981d77e6f9ef9893b33043f8e90b28
+Nonce.12 = c48a1ed0e0f99c4e646d06b9d6f4b497
+PersonalisationString.12 = 92d0866f384ee97da66eab5c205d6e60caa53947cf09e507a2023f96159f3a73
+AdditionalInputA.12 = 769eafeb38e33f981310622a1e7fc161fd9916bf4cbb363709b7c18a6770454c
+EntropyPredictionResistanceA.12 = 80a72b47ab0d7a12a2ff6bba29acf64ad93e4fcfc8baf0b3a60cf2953d991ef3
+AdditionalInputB.12 = fa6ea25b17a731992477e6a9648395f3b711c4437f89dd75a7226e025a98c254
+EntropyPredictionResistanceB.12 = b65e762f3e7d931b00b4e971be4acc6ca4eef293269ed0d961d94d029901b224
+Output.12 = afd445adf57b773e491c37f43362842cb3a616325d2417f9376727ea44a2de0bfa2872d6fe2951a914813d1b95fb64ba4f2a1c1e09c0679b40b7e71f26900a5e823052368e2ddc5e62ecf8767bc8647ae92f2349485aa2d5ff5a47c8a801382acbdcea86d386b2feff70d3ca14e3ced5b77e3a50dbf375cc50bbd557cc9ec86a
+Entropy.13 = 49eeb006cf6399f1323469d8a4b7b80bf91817576318f32fafdf5060aeb3548f
+Nonce.13 = 7a58ffaf3c5a762e953f5385e9f8e0dc
+PersonalisationString.13 = 275879cc91492fee2661bc6680c5564fc12f1369afbba2f23d9915496ea146ba
+AdditionalInputA.13 = 3ec070e8e19f229bc8bfae81d999659cf1f2f7ce67805a89e5312af16405a76a
+EntropyPredictionResistanceA.13 = 9f7679705254a83bb0c193d4d92ba4668fbbb79dbf2dcea0eba527a351c1dc92
+AdditionalInputB.13 = 944a4a9a23b1bcc3806f65823a0abf24136d1277a8e9194d700e5b1845cee0ea
+EntropyPredictionResistanceB.13 = c0251cda644aa6b99f713d84721393b48c594319e918b7e08e94c84bd22d5f70
+Output.13 = 073515a4bbd3c50454374c17da91943783e406425f3318f77d9801e1dd9e6c35c5b14b6d6e2c377744e1cea14e27699166572053177cefadc3cb9755f10fed60b800b4247186c4e65ac818183948e95b1dcee3432df464843cc94ed87b61e318bc97dd496a5dbe2aa685c9c2fb59a83f3549dd183ca95acd3e808c020c22642e
+Entropy.14 = ae3f6860d4a525d034db5193b84baae38e33c1c1d22d1b4cfc139fc6ae7ed484
+Nonce.14 = fa76d621be6aba9ea067449958a33889
+PersonalisationString.14 = a5982059dd1e0a0d7c1a87bc14db081e60f28c214465f554ff51f01b597b11de
+AdditionalInputA.14 = 56969e1be1d802163a99403ed92cb819f889c4b828b0d9986c5c28591d03e40f
+EntropyPredictionResistanceA.14 = 4b565de9ea274633252540268df3557555ac89a69aa36501f641e071961f1ac6
+AdditionalInputB.14 = 536c783b75624fb233202a92b9264591f6293fe306b696bb268b6450ac95f99b
+EntropyPredictionResistanceB.14 = b2cb8440d3a4c5542704790af60adb65a9a36c25e63ccd5f3fbdeab0fee7e6ab
+Output.14 = 7fe74ec7359a7245c4c1a63bf257523a9faa99b336ab2d8b0309dc10479c52625888e1ed3750e5c429f62c83ae80ae69521d1c3514ca76e213a8668975f155c4627c7b945098385af3ae361087476444bc507dfa90e93cd843077d6903bec2cf49ddcf2be632db437d7e7ebf2650d41fa28bf43ced025391fe4d79cf5eb6acf4
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 6c9de1379511594c6021a5a30fb31f8cef0af90e19fcfa56f166807ac2986730
+Nonce.0 = a47f0b51d2162ab8ffddb15c831e7f56
+EntropyPredictionResistanceA.0 = 336fd4952726b28ff047be0a78e5542c766f1cd5601c0823d0e1d22ff9500521
+EntropyPredictionResistanceB.0 = 5e2ae4fd4758e0b930aaa3e3518c4719076e00d02e8b05cdc4d7a4654a2ff094
+Output.0 = eb360430bf36dadc931aa25eee1e82529a262c87a6c89236393de46245bd8dbbe186a0564cfffeb744656c2ccec5fa6cc8d425a9cd40266e6734586197a1241c4d2306f83fae5cd0739c0a775bf460ea57b61adc434774aaa576482f0ace3fe49cf569e397be68b1b8007e31acb6b282c35aa8f6e73650f05614996d5a22faf5
+Entropy.1 = b9e7621b829632ffa6a6d3bbbccb77f28a31c1f2563519cbeee1c115984706a0
+Nonce.1 = b2e2b0f2164bdcfb0d4bedf4ff5139bc
+EntropyPredictionResistanceA.1 = 6e3285c0aa96b7881ac1b661b23037ff80d3122ae37fe168f09e74a987d21a53
+EntropyPredictionResistanceB.1 = 985582b31b1530f3dbd897341ae7aeb160ad9c47b7617cd8883728d0700f3f56
+Output.1 = c85d259dc74a952398ac60af6d961463a906efd2cf60d5af6a80d58e7595e98034756565aec6d07c7120898fc0eba82bd39fe736e3abf14768eb59350cf0e3b820f3f67f9cb02df8da0efe22f98852c5f6cf192980e8a0b01614265599db300ec7034362cf7787158e83fd01d524848a9dcae2924a8311bc8bc3f886bf773b8b
+Entropy.2 = e7a6651260f015098b876ee483fb9e6d2333d2e7e781c8d2dc5e6e6f3f57ce86
+Nonce.2 = d48de507c7d8c4f469da467f42bb3e07
+EntropyPredictionResistanceA.2 = 5fa17eb0c7469e75485a9c30529ceb66c1f2bad60a1cec08c6f198ce74377843
+EntropyPredictionResistanceB.2 = 137c6d23edb26196d4a68cef4c64b38e576c15be962ab7c07b514f9e3d2c987f
+Output.2 = 698a0bf4b18bac4f15e3c58388614da6aa37dbfc964ed7f94120372eced6bd81d807442e30eb210fcdac34293c1779a481ea34e44928144323b45739446c8cdc4226d3531c29d00d603d487f869d8af83a9ae3a03d306db29c1bb064e15128f502802dbf1fc8f56cfb4866b18a9c164021e3da352e4fc44639e0eef37903f0db
+Entropy.3 = 8c310b8660048717955bb54c9032ea0d3090677be9166e1700f0a556a5c5fb58
+Nonce.3 = 8a0a9587383a1c76aacd43d032e5734d
+EntropyPredictionResistanceA.3 = 75edf286625e81e02fcbde1b83aec4ca51d39ff67ee2ed59ef1b84dcd27775f6
+EntropyPredictionResistanceB.3 = 6e46657aafe3b7d1e3089044464dd013bc80871a460ab8bb22e023265231fcc2
+Output.3 = 6f7ea10d2b8f79c493ed9bbbd139901a3ed6326bb643a784cb22fad0ff47aa21a643aa26e4c48f454881b1f930bd047d7bc176faed427747c9708cf0ea1e2d8d6d5151ee0f1e98d89b7919274473f3685b77556601478c8aadb5d2ec66a877f53538cf0120f3773e536da8c27962338d623c7e2600c44255d8f5be6653118ab3
+Entropy.4 = 119ec54cd6a43c5d5459ed0922b2ce27a7bdb9373f4252691365eb66de53f502
+Nonce.4 = 67f59400eb21afbf4c20ccdb7a990380
+EntropyPredictionResistanceA.4 = b8891ebea31d1d05077a30fa9d79a9e3374296415c20c67aa3ffdf8c38bd0200
+EntropyPredictionResistanceB.4 = 2a3df280ec860ca341b78f409bd22611fe85e77c8b30d6dd9d3ae541b868928e
+Output.4 = 39de91d1edbc5fb7f0ecbcab02640ab4f92c7ecee3f199314d25984f3d3d1674a9cbb8cd910c071c5280afab39161d18ca415b4c2089b474624e80fcc05938e3971a95b96dc0d96b06d18ccedd07060704398a760b5c93c2927c15c13c84865cd40712c2fea0c2640a25e24319f325719d811fdf6ea619903bd7da3465b427d2
+Entropy.5 = be2dc7aa72e5a9f8828880b47cf382a0418fd5405753b90cf06582cee4d0f7ed
+Nonce.5 = caff2108a3e8935d4c906ebfad200702
+EntropyPredictionResistanceA.5 = c81a6767614a8fe0953cf15aeab5e91031c9bb3f82510e18fdfddcbe936d02b3
+EntropyPredictionResistanceB.5 = c1150ebba11ba5c71ac31f214dc323bcd8cac9e062395c0672fcf9202871e2fa
+Output.5 = b5a5e638a1dc05c04ba1af6601f5e6fbb550db548fa637c228aa1410cd441663c96cd9ba30e275b4cf2dbf25812688602f84f5d01ea27b4396ae66e525f3041cc3a1742af35b701cb340a96c0099158362e0d17be70bd21794ed8d2b2986c7bbf1326f1f55ac44dc4bfc27bb1201ce60d3a3272c0dd1b586253b029f2c065398
+Entropy.6 = 4f7c50f72759f8df86404a64c2b89ca840d16ca5b827d7add094c52a3610a1ff
+Nonce.6 = 11abe5fd1581a6ab3741ec9be1e2e797
+EntropyPredictionResistanceA.6 = 3c500a2ab66baf4fda4b0ff4f80d0e26a78887441280e11b75ea67c4c0b1794f
+EntropyPredictionResistanceB.6 = 4530d5f24ce6f608440f3c1ccbb80fa440bca912d8033514e3cce7d0a1df1899
+Output.6 = 8fb6815083495c1ea731309412f56947afbe5405a09cccdf4e4e4bfa546ba614bfdf1627f9775cfb02aaf50472f22d47bfa7275b3de1571793810b81cadcb2c3696f3e89dd4a3be3a85dc349ecf20e208f71d184c262056f7c81438a7f59d8aaa9da7f3af8b9b9ac20b2c32c8c86644e71db1c26f135f72b171d0582cef20a1c
+Entropy.7 = b76d7c128c5538b3fc2fd4f762b2e3b72b098823e5080bd08dab7218923937c3
+Nonce.7 = 740a2d3bf037996ba9d7edf3e9f577b7
+EntropyPredictionResistanceA.7 = 12073d83177dd3510c235b576d1f27ee168a722f0cc86e3419a87d288e36520d
+EntropyPredictionResistanceB.7 = f4d41e954edf1dc55c4a326f2411ae8488bdd24e100a4deef480c86663db0816
+Output.7 = 0411a4524a26011df029d25b27b70c89ebc04f591e92255fbdf3b67dbe611408f8171322cab44121d5a41a4d79c32c3227daa4afed9150489081bd28967756310890ddbce8e22bc26f819a5d4d721d2deb35bdfe209b86dc5b6b80a3eb64f1aec7601d27878ae84c980a446fba2bed4f623e28cac2864dbf987682e15bf3feb0
+Entropy.8 = 18514b5762c1d408ddfc1698fb356f44bd6583572128c061a7dbfc4e7a7d5e55
+Nonce.8 = c6e814866a7bb55570f74b666962a6df
+EntropyPredictionResistanceA.8 = b9842169c3bd550bdf03c8e0b4418f97516b7d3790036bcafecfae173bf28342
+EntropyPredictionResistanceB.8 = 682036f9ccb24f92891a4ebb75ce0ab603e9bc6611fdcb8e62e7db831f33e617
+Output.8 = 7045a001e4d6c8f1cc345e8ce7a220b4b93a939bf1d2e9e7689ec70aba5853be52cef9aa34d7cdc05346374ae5c806b7f88ba53da865e826b383245f84c12ba8d49ce305aaa1e65295af2a12459616fdfb7150655270e9f37ce41499617096c354215a9e2f683f3d274ae46211188254f770562284d6233566529f9519e85977
+Entropy.9 = 41c17758361f610212015c43d5e93fc3193bb34461d659ec9bc6d63412869ea4
+Nonce.9 = 65974bab16239bba9e4ad7c8051ce8d2
+EntropyPredictionResistanceA.9 = ff4e00f3e218f747da6ff315b46b9911182bd0b3acebca77d835eca517a11cd9
+EntropyPredictionResistanceB.9 = 5b874001298e9480c762258a9f75e95be068315d88aa10b4d737a0863c5fd9f3
+Output.9 = 0bb43d3585cf441c9cdc3fdb2c36609a87d1b4e1e0d353ef8266e7a68ee3cbae829cbd733520717d0fae6e232040c027d55feefe7a8aca8045be7cd43ab3981f6048ef754e98b2a1066e038c4c4157d88a1e19060736f3386e2b3c6362b82821ade46d435c0d5afb98d0f606130d7afb723647a6c73580c89074e0174f74c734
+Entropy.10 = 7ebf9c64475766540209e0d95c500e98908d5b3a12613438f65fb811a7d9bff1
+Nonce.10 = ad795d1e2f3c0ee7ffea12d32fa61e2d
+EntropyPredictionResistanceA.10 = 81270e8c0cf53e0e5cf826c1a6c2baf045fec9d39914a7ca4c740afdca928ea7
+EntropyPredictionResistanceB.10 = e292f5f389232e706b6501968da6e167752d394732e6d45fd24a0ac4b62365dd
+Output.10 = 422f78dd0d56d4e3d40a1fee00d94ee2c8b70364f6cd72808f852d2cecf5692e93edd3b8f3fb2a5f1ee9a9f80c06cbef544fe2b418c088e08ed23b869e98e2b807f683bbce293e76c355587df7a2e3534678a4d38d8b0c28e95ec52e94f1d06344101b2649bfc57dc8bb306aba132d4d433904465779117f6b921d981edbebab
+Entropy.11 = 7247dcb8ca5716cf202d6c06c6e2064ca03116c728959eb652d7c04cb9b393e5
+Nonce.11 = d57308c6af24e1a44fd1044d942836d2
+EntropyPredictionResistanceA.11 = 834bf11ad328f86da4ba84544cf03c26b37ff55a5d62640e3fbfa92b78212f29
+EntropyPredictionResistanceB.11 = 27f1a2a20f32cc3af58dc37ce8133b4b45359ca44a6a5922205f8a41623fea04
+Output.11 = c8105fe9b59eb39ca14fa4e4213410c0c48892734ca05c1bb2ccb3e392e9d961f5b9dc6e5adad18f19967a1b63a104f93d0742a26807139aa070ac4e7edf30db1bc8230046bbe4ea73bfbf07d20bb591d74453afdc95f5e90f4a4389d58e1d8a9f85db4b8948706f4d8f11f5109ae377b4eee7e4131ad27f8b0e668a23d010e8
+Entropy.12 = 69628e857266bb5b9bd015c73e94d1a86adb53fba01bebb05a9cfe975d80cf7d
+Nonce.12 = 745597751480edfd808ade110fa2dfaa
+EntropyPredictionResistanceA.12 = 4c28f6fd2e0f1c4b8f08d45ec184da6fd55d5ff4113c86c4897899a8116fa747
+EntropyPredictionResistanceB.12 = eaaa4317b7c01a8fc4c2333959c327abf615a0694c6e24a7c56629813a46ac8e
+Output.12 = 481c99b0bcf96dbca879f3a7f0974a3c79ebb3d9a9e7d7cb78faeba0183cecbcb547252f35c7a5f82d553e962ddd60dcbeb675756f8992a26f7f58ecf731056a10ef987846db09f572b911d6d883be9367b3c77c7a5f680963471e9d0ec58004e8d8bdbe033677fc036b25073e88119ed63827b1b57dfb19e2a04c4c79536704
+Entropy.13 = 0ab2a59360ae37c10e28cb5e4b9146216b3c8796bcc3e7bb2a4a4dbd880e6f31
+Nonce.13 = 5eac21248296f0b33c7b4c6672fb2089
+EntropyPredictionResistanceA.13 = 0b85e4b350fdf69d8ae17a335f29969e597c1ba6fc6ae8be619a43aa6b1eda5e
+EntropyPredictionResistanceB.13 = 6fae1a75259ef144feb01081ac93fa4cb67d874f0b9755c02c9b4d91c9708647
+Output.13 = cfe05893eec7c0fce4c81f8c571ebf1b8429d4f95522cfc54bac0c4294e321f9a9cbae863e0067444fac81c0b10d12dbe110d0b2e7296096bd26855f54e2d92d468634b8f25d879bc9ac849a0b62d64e2f0dbd401dd10b759525005fc0505b3dedd29e2e41a10ce740da29f8d4e37cd291c16dc6bb4684a6f5603b0783dfb4e6
+Entropy.14 = db28c2a43d953eda757e52559b1ecf91ea3e08293a5d8256c0d601977943aac9
+Nonce.14 = f18223053dabfc9d1d2b9330f058270d
+EntropyPredictionResistanceA.14 = 16f77f5bceeec9c59d4784389d7c97ad32504618e6ef75af0f81d20a7fc589db
+EntropyPredictionResistanceB.14 = a010f9ab30be6b806b8c784651ccee1b43202204f7c98460b0209bfdf2d2bad1
+Output.14 = dda47e72da37d8f08bd980c83fb1f18a0254b8b1e0b436bd7674112b03eacfa3f68482f688e76146ab511c394d45e621c23a9e3ff9af90e0b9aa8d1cc31c426501a0ad4a555d423261cfa0bbc90133494ecfc57a34925c9accad089a568a5bd4f19f2eba45ce9cea843c0cce6add4fa123c9ae3bac75ee177d6b11ea068561e3
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = e29d5d5ced0c09a2c3628ad6f9b66fbdf7276c515e5d44e201947a35e5bbafe5
+Nonce.0 = 02bb4de097a88b9209e7789b1ab13f16
+AdditionalInputA.0 = 1104f361c70c5198e0d7f86ad64c1be116994b1043c1fd87ac7a1082b331cda8
+EntropyPredictionResistanceA.0 = 86b0f93acb6721080a9abaa4a9c8e3b485b7c7244f427058b0e355d4e29e3663
+AdditionalInputB.0 = 43a6fb4660e8536483f60701b0bd7a6d8da4b7b6e31dbc0a8af296eb16ab9fce
+EntropyPredictionResistanceB.0 = d0d9dabe1c31131e0f7f803c377454364d0bc879d017f32daf6c1322dec99871
+Output.0 = c1f2507486c27622483b565e0b570c94a4a7817742cf4b2c5f6463a22ab44e40c6b2975817a7d5e760c506cdb74e189cf3195d402d56a0e8a5a1abd21681ad776f04b3789b4bb91801aec94aae20edc850cae77a7b27d8efe4bc7ae7a19f9754bf5c96ae252e21993c91d57f776a170350fb6daa34dfbcdd25f0005edc7b049a
+Entropy.1 = 485d732b14ced914abfb0b6466a4748cf6ea51ffd10511ca8ed60147d6b34dc0
+Nonce.1 = b853d5d05f154323cb7c914af4e7bdc5
+AdditionalInputA.1 = ddedb7f5cefbba66182a5d8fdb3d4f63fbbe255889cbfbc88028a45c3bb6daf5
+EntropyPredictionResistanceA.1 = 6fdfa7fc42c6305bdbf049474087c66992ea624dc98774c4e4b0c096c7d107de
+AdditionalInputB.1 = a99f7d25ea04a1f1af4ee429fa427abaeb3b3c3de75faae2ec874b8ccf2435ad
+EntropyPredictionResistanceB.1 = 6cb2382df06b8d896f1a2af06b97cc5b89c9df2d007a7987d70f023147ce920f
+Output.1 = e0546de4aad8bc53843adfee8ce9f388e0d680cf7670e435329b25e2398f44aa491c68b9bbe380961dbc1d7610fe8e3f744823070a3661f53c9d0debf49619a2c24c068c047fd3ba4c7ae35e33c83e6cd617274e66f35c0fb60eff75c4d4f4f7758612aee0bdb589613e0967f47d6779840b776ef0c79a06c92e2d24b0436d12
+Entropy.2 = e4539a51841dd58fe5fcb2f63773fb6682d737d40292f829dd2847a53234f60b
+Nonce.2 = 4c91095528c298227a3d03c65a8cdfc7
+AdditionalInputA.2 = d14f70d15e856bea60d9cbd80823e0f6c581bdf1f77847158e2c8beeaabe0d75
+EntropyPredictionResistanceA.2 = 942dfe8ff518814ae66139cc05c20ed4beb8e2b5a40754ad7dcc000f17a71a71
+AdditionalInputB.2 = c787d94351295160af148bfd8e7ac4fc302b45b990fef6333b4c2e5f4280dc22
+EntropyPredictionResistanceB.2 = 366f7c26cfe9c1d08f431682abb2a825673fb9515538989554f2b7721c460a0b
+Output.2 = 3e2e315de684d1ebb36515af9e4d787ebd1b8aeca91354f981ff6ed300d1d1d57772b1b8682d2b7c493cb5ad9a7d234c8f6a6f67fddef2a458200b9d8aa5e24d605ce946d737ebcbcf847d86b7fe259648fbb50c15e5fd769487dfe2da6e9b74f82a12171c3678a184a8162f44fda7ad72344e0bc33ef4a578ff9a89035d4b43
+Entropy.3 = 23886c8132cfc12716ca79ade17784272c7b8d2c18a1bfa32383f5315fb7c12b
+Nonce.3 = a892bd7714d81d539b461a5ff3f6ce85
+AdditionalInputA.3 = 1a4f7cd02e1a169f791a0a6ac14d569c8c1bcd6b4f3841c69337ad4d1765e574
+EntropyPredictionResistanceA.3 = ef9e054fb51d32c0120c252f23eeb837d02d9bbfad6874c680edb1f3d2debfc3
+AdditionalInputB.3 = 89cea584daee5cc5b8db738a967f303d410f21c09dd2a863d05aa5c6a327f2dd
+EntropyPredictionResistanceB.3 = d16b24834e5ef55c2c636896d7bbf906dfbd74333860e4fd39f1a79def2ca539
+Output.3 = e3ea26de9c67155c982d775522b6cf5652c7f7b2d9bab187c3d99260f4a64bfb01b16d0a339595860b8c5504dbbb301a3ec25bcfb720d59813fe14407600d618ebb70e21bd26bd7454a74473dcc363cff3005d1f065c353d64802355c3f9246a007fb5bd1662c0ff2cbc4c56b3e8171d1735a34c0bb303be9163fa12337639fc
+Entropy.4 = 9a82fdaae614ace8b6fea6ddb061953633745a436c16a4e8ecc6f3af20e8719e
+Nonce.4 = e8da855f4fb2571e2cc772c86990fa1a
+AdditionalInputA.4 = 6c248f887f8a78405e9bf93c7a47813db587d58335437a244fcdfacbf29316d7
+EntropyPredictionResistanceA.4 = d6b5b89a3552234d6ecb44916908b1bb88024d1f53380d3880d02c23d5b01416
+AdditionalInputB.4 = c73b1f1831ce0f98107be1d8c53538800088a47165f982adc60d1dbad8a13d7e
+EntropyPredictionResistanceB.4 = eaf375494084afd82c8dd911f73c0efdd80bf1f540f23c19939850ed6ed18514
+Output.4 = 7d1b38e15e0114a2ec6dcd452e5db03aeb30e611f402a9ce75f40ae3f0e1e0417a9649a3a610f8afeb237d1284943aa4f60245d230edb5d915761d9c452ee733aabcb56db2893e32a20c92f9274c2d811cd1dd746945292418218cd04f4fa261cce89f81fd750e84e052d8288b7fd5eca91cf8c55d3b32e4edd0c36b54cb023b
+Entropy.5 = eb889c8bc2ed191c2f8dfba6ba4fbf141eb9dcfbecd882d0ab252cfb7470da23
+Nonce.5 = dfd89d3f9ea05f449db887a5108803a0
+AdditionalInputA.5 = 6b409688697011f93150c09139ab1976fbb5533559b0b8d570457db1b0c3e4b2
+EntropyPredictionResistanceA.5 = cc5b54357527fd6b486c1b608c93d4d5b317567b2baac8a6683e7c1ef3b41441
+AdditionalInputB.5 = 7a5eaca8a3b471fe6d1bbe10ae0805e61892e143a58f20bc85bca00a034585a3
+EntropyPredictionResistanceB.5 = 75e234ae024dc51b837720cc782f5ed27277c8d8398bf6a4e66611e46f952cf9
+Output.5 = 635338ed60fa5dc93581c8855a4408c3a5b22010fe7f16780d3326272782d90ef2b33e07671107c51c8c17f7f6dbca4532d8b18415e70295f05e7f41de25075df2f52346001a791b36194b758f942e67f953051d9c09bc420d2eb6251292c91dc26e281f453589ed30200e97ebbc71f59a1523604ffdd257c47929445f7a777a
+Entropy.6 = 7a8eb86acc630f004d46f318e763bca8539edaf1f6416b2684cb1fa0c2dcdaf2
+Nonce.6 = b084368cc655a0ed00e0dc1987927378
+AdditionalInputA.6 = bf3214cb8e7ac6243834340b8541ae79f242f8782654a8d987b144e3c51d592c
+EntropyPredictionResistanceA.6 = fd9ee35e7ce097356762718d727a81575c1cd64eea65733ef3edbf4394a163bf
+AdditionalInputB.6 = 8eb007b226677aae35354682c82e66b71cba51fdae5e1bf007a533faaf715186
+EntropyPredictionResistanceB.6 = 740c069bf60762d4f323a667db04e153ecc3bb2e53ce1dcfb1cff547bc17bf3b
+Output.6 = ada92058447fcbc47e38044c3b93243ec48911bab71ff7f2355c2bb248a20241c246a046f9e15e06166141dba73a1d73dbfa914d7664ad4f3e14246ac3479e6261a9b0ef0913656c90e49caa284bfd98e0c89fe6b5a7949d17415d03ef86101ea7876542980f1feb79827e2d210ed7e28711e2c8d326465342ffa19588d4237c
+Entropy.7 = 6f6e21a69f5e6401a5255bcbba0551faf533712813534adbcfa329cd3fa5999c
+Nonce.7 = f759583b4f31ba488ba5d7ed5e15b99e
+AdditionalInputA.7 = 2edebc37fecd8c72fdec6048bc4ea4d36295d4f5d7cab427936f1c2832fe8283
+EntropyPredictionResistanceA.7 = 71b9d68cfd951b67558e1badf347eb9eb02eaaeb69aa523c21c9f9b412eacd8a
+AdditionalInputB.7 = 6794c965061da7f6275acc07d624056415fcf023878a0511be4e33ec6a8af1f6
+EntropyPredictionResistanceB.7 = 86950686b275148562ee403a14cb69239b8364c0811fc973ed214959d53bda1e
+Output.7 = 4192f1fe669208a494ef6f4e256f1e9c1fa6889bf4b9242e526bc52090a1ca5781f3742a7c64c7388920dafa5cd62df931b3f8734270fb552b4e6780625c1b2334b62a1a9aab4212042f05fd257218ce48d6d1620452d067ac0c05c52174777d1222b36204ac7bd3739f3dfb2675fe7785fea7cf49938eae3073766aea14a669
+Entropy.8 = 2cde64a9e89001901bf55d4af21989eb5ccb3f2c9bb5075230dbcda8f31726f3
+Nonce.8 = f0cfc594e8b8c0576a4a6c4570c24714
+AdditionalInputA.8 = 192b6ad60087953d3d9d02b53e13df2eb4608ee40279b165ee6688cbd69d858e
+EntropyPredictionResistanceA.8 = 9a453fdc67b8d8e3627155c4e37a36d2746b99938eaf2f90433c5934545523ff
+AdditionalInputB.8 = 36589bc14511a96bd87a6f63475d24b1f754779bb7b7e852f7022b14bad89630
+EntropyPredictionResistanceB.8 = 7bb814ee37ca3654e8f30654be00e106a2136d9ce00f7d4a12d3742e7c1a054b
+Output.8 = 9d3430e98eb29cfd19bd6d8e726154d6d9272d8dfacffea20cc9a1847547c4cac66979a0b55d1169acf9a972aa3dd61b4c644d1a9606109b746adaa4e38377e60a42965ffae6017fecca8166035c6eb721f4a022a50cf3a4b50d88b49c17c65f51fb7706257cdbe49462e13bd5cf28626c189fa9caff47a06df2201dafb9eb17
+Entropy.9 = 38b82f8af31742636ec82191f33e4f48dd58a870296342058d94879206713519
+Nonce.9 = 23c526fe7fc2158df7cad97a5937897a
+AdditionalInputA.9 = 06e36e7370597b99fccc98e4a35a4ea0e1b4765a237fd2ea3f8d1789a5a7d914
+EntropyPredictionResistanceA.9 = 34566a9076c9a33a9668c51c01bbcd5f49b0a57857057c3086f3a95585ea6d4b
+AdditionalInputB.9 = c3e2d06077314d3f588b951e0e7d66cf24e6f77790bdc9679b3c76f892247426
+EntropyPredictionResistanceB.9 = b61286a387c6b0646bf3839549008a5aa14cd382b9bc385ce2b036694bd8ed9e
+Output.9 = 7490bd143c39e02028d1003a9766edba67bfd4193a478e4eeada17b4598e23acec44dbfc049ed0d94476f4301fa8e9363d8fe9ebb996f336246c63469c5b6dcbb3654e5bee29250e0788de148e541f6475bcc4aa224be5a80565de9a99b2419978f4345f623e0bcadc2f009bb293344a818eb8a1dd135664e87622070eea8626
+Entropy.10 = 44f076ef92fa450d3a7ff6d385ab00d46d934c969392ae50b62181d6475a09ba
+Nonce.10 = 7079739bec4e32aeb25c895a62d11695
+AdditionalInputA.10 = c3a050c1f6118522bddcbec4eb44188a72b191dcb6ca6b221d7c928603479f5e
+EntropyPredictionResistanceA.10 = 35f5061e7ab7f337e08cc6be164c0ae91499a77917a370b938735735ea9ed27a
+AdditionalInputB.10 = aa3588f675bbf566fc69042549ee239db9655a53ba29c041e7c8db20f619ae5d
+EntropyPredictionResistanceB.10 = bb8f27e776cc2cc3efaca6e0a280c237ab27a854d81c1f58fdeab7f4ada48340
+Output.10 = 35f9d1f8383fc06640db068544438d4d16f68561c5e5f7155ffc8fd694edbc2f9321ba5fc8f8a41f3e39965760d8c16ad2e3467533fae59dabaf3be4cec031bc9bce30d7e2d4c6f09223ba0ea6758f7a9d67ddacf566d261ad763d125d22b804916dc6770a65ba3f10ad3f79921832dd9eee9df29756f95520c9ee9bca9bc5f9
+Entropy.11 = ab7d4ca0fa29121445ff89fb5822dfe8e545a43d7652d073f37a045ac4421316
+Nonce.11 = e8dfd7a2075233651f2200af73638360
+AdditionalInputA.11 = aadf1ab49cd9a2e0b428d3f2fe4f8e068b242e2770eb841c5d0d5e7b7aa49008
+EntropyPredictionResistanceA.11 = 1d98f19b52685cf52ff01cb64cc4c37e2d2a9ba456b7f4e7e1b09febfb81e411
+AdditionalInputB.11 = 0c954221aa6d13ac34a7cba7690b32a685125ecbb840858c47c56d83af9d10ac
+EntropyPredictionResistanceB.11 = f5e55672b63f9c9561ec4aedfcaa655060419994bda9f1baaf2c668e603bf48c
+Output.11 = 502ecafce73b2dd2b40e3a0998db915a6972c0b9012cb9a72683224d3965f62e634a96e6663be7c4c372fa72724b249958749be68051b6b015a4885622d243a5a5d48e8c41ad98e1a49a70763115ea851745d12ebed7105cd9c4a8c6d17941363a9af6f642f1e9a4956dfefc27fe1fb5031ae920c60c66d8a73cfb274fccd0ee
+Entropy.12 = 3b41936351fdf289819818e391481f317e2a5181b7ddea3b5244f14f8120631e
+Nonce.12 = 7bb9886b833c2a98f685ea8556c085ee
+AdditionalInputA.12 = b67ccac19c31f4ab0950ee59ad165c17435b7fd0de20b2ee05cdc7511b84b1aa
+EntropyPredictionResistanceA.12 = c1065e8f05b68bddb9c663297b32f89aa9e6903bc4e693fa758c72ffc1dbbe5e
+AdditionalInputB.12 = adc7bdb4b2a07019cd501020211c99509df8c6058d1f4e22890134aff5802d8f
+EntropyPredictionResistanceB.12 = 3aa9011d1dfe80cb74bffc6c12c12395143aeba9d36a15a8b5cb7b5017e2df98
+Output.12 = da7213ce781738ae2e0b33c5689687440299793a204044a449ecf1d25e358ce0fb6ab85a88b9c2dee3b921d2a05a3aaac3a4537ff33ea5cf8e87c39fcec2c4e2bd2f30360a19a43c2d7c580bd1d75aad6df54d73a2a2751f9613b9c429a96f84d18f254f7c84b7d73f173dc4130315d18471c66a8dade430eaef72b3e6447f94
+Entropy.13 = 24471e8b39847779b6c25ba4d21aa7eb2d10644fae38e52a8f1aa86160bf317f
+Nonce.13 = 8810fd7ff72a19ebc25c115b77928dcd
+AdditionalInputA.13 = 331949100781ccf8452383ac088952a0e2b082d455e35163353561ebfa640854
+EntropyPredictionResistanceA.13 = 722396309fc5b9d82169bdbdfad36083f3c6f2863605c4d6c8e172193d6df075
+AdditionalInputB.13 = 84077b7fd7958807e587e8dadb9744242e913e2e3380eb90456c2721fbf8c9d1
+EntropyPredictionResistanceB.13 = 1ff8052c8d98264e836d95dd50eb828b1d9368e42d7c22d505343cd219527d78
+Output.13 = 8a1cc9d54ff0d7c627c217c91797b6b452bcd41064d7c6bcdefc6380cf85cf60d9560b37165878c458e0a2eb44acbc6a5792a1f32084f0de15ea92bc725e3468079b278ec7040d9e9549caf37b2e0a37d43cbd778b5682ac248bf449fdc34a7020b2b87e1dfbcbac214b81524489f341d577be23140092605e32b5b85e8089de
+Entropy.14 = e5717a726c577179c97be7fec495e7971fb05e54f37a773fa4f099e00f444c43
+Nonce.14 = 502ee7e8dc234cd635e20fee71b3e6cc
+AdditionalInputA.14 = 9444773b6f408a9ba859b5cc029a38dd7b5ca27af6a0bdc95fe07f3995463d29
+EntropyPredictionResistanceA.14 = 2c2e3f346495f57ab8f064904aac2044351ae90727c519b31e577b68bb99ff68
+AdditionalInputB.14 = 8bccd1558bf375b34b4a9edc2a6b13d75f22e8cbc998c36b93682a8fd9714cc6
+EntropyPredictionResistanceB.14 = 6ecd258bb3902b4dee69cec78e2f5206ed5fdacc0676be52c563e0ef1e466a32
+Output.14 = 0588a877f5cb9b70b1fe482d4f042ca00a2c4740ae606493608621aa6c770982201aeab723660b80b73029bf75c091bf0ccf0868db0ddbeeb1609ca99d7c4b8ff4f63a4effd8010dfecfa8bc47fabe6c589358c0501234737e8b55fa9e26953bf21b560157384e126a8f729a3216a6b752f2198817fd4aeb3350e6621bf393ed
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 5a01a32570eac8ed3495bd9334d4f8d41e2b158440ca73766227baa1e5394c54
+Nonce.0 = b5bc9b62ed554d85717cbef9fdfa9bb5
+PersonalisationString.0 = 06103f5c137fe277944bfb80d3967cc8dc65e464b8272f6d44e8b3112be0b3e8
+EntropyPredictionResistanceA.0 = 7d3b1cc8e57b52dabf2d891c9b8afc10910782e91721737ea9c4947306bb364e
+EntropyPredictionResistanceB.0 = 5f0003d794c764f5dfd35399483a1f11210b26853b788449cd6655c799f8739b
+Output.0 = 8e5459f711fd0aa8ce45e113d9b809669074f59103b4693d550f1bbf35c23e45a59afe092ee777e7dd41192aa63e4ebe3d33e79188c231942d13a80cca4fb6149bb65fe99f898daf50f31abb1ee363198d1c3f952d87cdf12233e0de9b4843786e0c9139256657fa80abb3903f6b309d0af670208cf97250a06e8d5713e7baf0
+Entropy.1 = 458a9ef433639ba3c24c83a4e5ae6abf08566c3f46991991e68f0c373747cf23
+Nonce.1 = 6116c008486718c77fdf86a24017f4cb
+PersonalisationString.1 = 03fe4ce1768ce291cfeb392ca8233f7b1e56a99fd567db91d8b9a3fbf9a48112
+EntropyPredictionResistanceA.1 = 7503003a7b7866ba267ac08280fa564a37cc264feb7bbc0a7bb4d09ba7181c09
+EntropyPredictionResistanceB.1 = 03aeba0cca4de405142df770ea49c9f08abdba1beb273a765c21619389db6d0f
+Output.1 = 96a162cf6ee5e2492910ebc18f7a2bb03fbbe81755e34640db943fd3f05646a578afce587a4522520147a27f4587aa533612b985e4b4253038c2504500c74ee22daf946edb57ca55aa2c47b4efa9b116e0c7cd5100e28b097aafd666fa11a43570f1be82793f980f3ca613aa32f58eaf1899282f39a8b45e5bbc38be4e35d6a9
+Entropy.2 = c36c95e3b76c96d075b7d1a48d72bf7cf0909e6921d4c34e5a56f759e3398ab7
+Nonce.2 = 0945e78b817f1d3bd779a895ff713032
+PersonalisationString.2 = d89f26b020954ddf8ad25a3cddb9d14de4593c631c1adc36e7650640550c5a9a
+EntropyPredictionResistanceA.2 = ff3d7c3950fdc721b66a8e04593bba3b4abc6bd93e7ff3c11c30cfb5c75bc085
+EntropyPredictionResistanceB.2 = c0a088b2d9dad8a215824a4cf572b1ce5e984e196e53da1de4283368b4330436
+Output.2 = 63abd5ce6169b2ebecf1e87f8a51e54f45625b0fe6f2c4c91e2a2e33209f1755b58ca8279e918d8f00fd30646434743fa0a2d40d2dcaa971cba5a4d6a24b75c9f56fe47170f71706656559ac450c9338a8d2293cc52b058aea88a24028ef4ca3f9ccd8f43cac6c3f8e736f9abf7e0a2f9ffd9b6cbdbe8fce000c9b4446f538f4
+Entropy.3 = f4595ba095880581d08f3e918dd3a9632222f07dce5b8b971bebc63e59802cb6
+Nonce.3 = 9bd5c07efcbca3f1c0957b1d5854b6e6
+PersonalisationString.3 = 48c37454bab21f8bd9fad3601289946f14fe32a310ded7a1c9c15d95ac11ba1f
+EntropyPredictionResistanceA.3 = 404fc83cfbeec33d1d6aefd47a23a6039e7cdd18a1f8e141c2ff3eb0d8cb9c64
+EntropyPredictionResistanceB.3 = 5e20ee8b6f6fbd57eb7e04c1eef8c3938e562e1db3ba7fc11d81cd8b43c7b822
+Output.3 = c466544dcfcdbae2ba37c2b687d0415b122c1c834a069ef6a9a9ef93164451a912121dcb3b1943a5046ff1c3fdc1b24184234a514be72b49ef470e212b971b625e2bba62e438a1a9087ac33c4062f49a7bafdf19dc51af58c304df32a84a50d653d3a8ca11ff0669f3e1530e3d323423d337ec2156ba66afbf6629a8690c77c9
+Entropy.4 = 30968a5affd0f1fb785da102785944f11772d442d2ee4776a5a84f0230f6bc85
+Nonce.4 = 5159b3fe9044342066520aacb488d1bd
+PersonalisationString.4 = da73247b3cd8e2b6343cfd2ec89ec527ca9753ae36b866db1c6c295254af08a5
+EntropyPredictionResistanceA.4 = baa894285b4c55a8f92ffeffff6f142af332637af5d503eb819e9598c11dd688
+EntropyPredictionResistanceB.4 = f99daf8aba97686e781e1df6ff8002139a9b5f2f90b7ca230d4c9ac63996b9f1
+Output.4 = 8e5b909f15faaece39e10c1bd66de5a3cfa9904f8b24e70f419c7f3405ee395caee0dad6df47ec5973b28d68b0c6ad2c6f10aa7f66f3f4c6ec2092a10ef8b195a80e1567085f2de57abd813de46fb717c5359d092d60caf412d1a9daac75021c28391891d11d69e3d61733e05aca188a6f873a8c98797bb2a06067b51aa754de
+Entropy.5 = 2a8c72961470d71afd26da0c0e5b53e83b2188a6c61f9c55c074dc4db7e79be9
+Nonce.5 = 9cb67bf0b26432c993e07b17a3a2d41f
+PersonalisationString.5 = 0dc5c894abe938f08734861b297851d5db37db132bc64cf2efd194036b7c7aa6
+EntropyPredictionResistanceA.5 = d6681532c94119096c323fd875de5cc78518997b669bcc952a68041d292a2c24
+EntropyPredictionResistanceB.5 = c58d5d15d0b7e95de5cac42ad99f0b9fe54601f23ad9c593df4cf02758924047
+Output.5 = 64eac75fdd00fccae2f3319e96d96c716889a46320bb9df9e4f126abe42f2d7b1b250f0ad843e152f0f911c4dcc131e225b0c300705788ee716cd395f26a8185878b58f731dc5de81c8ca52ec680a5f01369251e54d69f42cf333555eefcd1c0dd1e9f96bf8f36efdfdf52cd59fc0c33b48a5857d42f5ed8ff924fdd41589f48
+Entropy.6 = d8d705d62787f6c2f26b19a186b8420361c64541c4a2a9d6c5ffbd424f0885c9
+Nonce.6 = 18103521ce5be0ec83dd7d936166857d
+PersonalisationString.6 = 97b2abc9db197a011cd436693ca44c543aae8c93415cf361a0d26d732eac453b
+EntropyPredictionResistanceA.6 = a1e4f86035bcf77314bc1d0227014c09349fad2c416cf3f275875b9c16624cec
+EntropyPredictionResistanceB.6 = 3385fc257871a06ac60eb14261dbb080c261ff646c362355f6c9240a404307d4
+Output.6 = 22b73bf73fbb087e6a222db111376a1705fac8b95086c8f7f48f9ac230cf8821d90162fc5d13acc0a8a94fc4d018751e6cee8296f246723af249d5966f22379d75fd3868f9b91e67023eecbe75bc841f0617d90bc918063c5f6bc5c2a4c9362e873fe8ad0b02e3ff3c9419c1fcbdd0132919df82fa7b7d23a80dbeecfe9367f0
+Entropy.7 = f439510e88489261a25eb644a0e62f1ad17fd114f893e028a6e1db5bfd561dca
+Nonce.7 = a092d8ac4ad3963efdf016600d4cdb81
+PersonalisationString.7 = 6d6d5fb9d31db1b750e085b566598e74840d661a548dc3d3290a48ff1c51f724
+EntropyPredictionResistanceA.7 = deabb8a35a1f605c242e72e308b08e0e6fe8cffeae0b73a814d33281e698501c
+EntropyPredictionResistanceB.7 = 5fa933ae758f13e60af67643d45f0e63c27bc809d1a1c0d6465ab288452c7f98
+Output.7 = f1834eabfc173164aa0bee9056e4ff616b6de95efb8d62c6ce95fc60b67dfb588d55c3b0d7bd19ca17b5bc776acdd0de03286f4f0dce7b3dfa2943808b190d68072e858264fbf90960914fc481eaf9b958b75497537a25d757d7e43b7da83ed118fdde299b5a6cc2f46000f2d7425c9b214bb292a7e3779bf7dd7ba850804408
+Entropy.8 = de87cad68de80d485e60c30ed3fb0d4ac7a9d02615c5c3cb3a2cd727c224be11
+Nonce.8 = a13043764b524f61a21712470b269204
+PersonalisationString.8 = 44818340d683f40c87a052b60529413b5b8221f078da1cb65e4282bece5612eb
+EntropyPredictionResistanceA.8 = 75764f4c7f0c46eedcc01a24e5f179107a6504cf9e449371b65c348f45326f1c
+EntropyPredictionResistanceB.8 = 2ea5b1be600a9791c889ff1afa28e724301cb401c2939582a5bf6b2c5650b876
+Output.8 = e0ee778595240cda4ef12b264224b6e12d8d125cc87e84f9f379f359270383a7650cc67745d622b286d48e7c2b4520ee4691bb64c5c27ac0bfc86f4a8f5b41a88a3318e55af9c23cc32aa445976e1b01abe50aaad4a4e6cbce74c453b39e454966e1779cb01b990637b69dd423be0603a25699024e4428286b30e665b9971d4c
+Entropy.9 = c00ea125d6941e00baa8bf8b3e928ddba9d84faa77c89d3cae15fbf8bc0e7f0a
+Nonce.9 = b17728025e9425a2569c44b2a3c32070
+PersonalisationString.9 = 1e4be763e419fc50a6a6e0655b5f71fa16dde4df0188ad0b8f75fc072ea66277
+EntropyPredictionResistanceA.9 = 0088ae61a8e37a294c0b3ee6debfaeb386961c79129aa3e1e8e78cfab67c6e81
+EntropyPredictionResistanceB.9 = 1b5bf453b370526448cd7f0384303a2cc7e587ab4c3ad1f3dea1375c394db81d
+Output.9 = 26444acc402a095af8357e453fb942af3ddaf8caecd829a0dff542629c5b7289b8ad91fb33322da7bb84ef6808c4af1a46cd9305eca23f0b0b9b2ab297b4047f73473c2ff2aa19bc6176c175db96a4574e251d1e649392fe7b3a19834f39ad1c253620b536925ab1fded3e061c8409d5e7cd9b0d1a910f78b0bc8b80b0943c2b
+Entropy.10 = c2a9358542be182158a289920141b0a4b3943a9a7c0005b40e040651f028a3f0
+Nonce.10 = f124178aa2833d10a886625076fb0903
+PersonalisationString.10 = ddf33ef2e5266b9778fd94f64ff47007c652639c2c9dc27a09ddbbbcd1084b5d
+EntropyPredictionResistanceA.10 = 13b0fedd226c7e1e8d016e94b0c9d15ffd87551a50dca44f133dfe90e91d4cbd
+EntropyPredictionResistanceB.10 = 3413c85f7bf86ec1cd1af1399cf4a983d23b19567680b8ea722e2af86e168c4a
+Output.10 = def0c97258d006c93bbea541bc9690fdbe1d429477afc2576d7daf93120874257c7e85ca4cff272b62c631d81179ea39abb0d4bf86d9b154fd48c1efab32f1cfaa9f1fa64f3be69e3999e930c5d79adef8bca3f57183ceb67f0209828ab3f226be117d982be4af1f91f12342b17e0610a3cf818c788532cae8faf351d360b223
+Entropy.11 = bc7a15a7cad04192642253fb84641dd84952252b17a387c39cc5a7eb7c2fcfa4
+Nonce.11 = 6317111ace8bb3e3fc8a7ed2fc6fb84d
+PersonalisationString.11 = 86dd2ac72aadc487765947166f44b50584930dee9f92430ce06dcf857dc8695e
+EntropyPredictionResistanceA.11 = 5b0fd9ed53558f6ecddaece481d3e2b4fe4c59f8d518da3fb6c145acf5837b3d
+EntropyPredictionResistanceB.11 = e6789d4f22e8e9a40a502d70b36deeca9f356ce83b0c57a00d1e1793efe788f6
+Output.11 = f40878bdd0ff521f456ab1badfa5c7004c904f7371d7e2d1dbc4e74f5d311e9405bfad79c1580fd91f264ab6c8774fb85225231524b19a775201b07d832034fa4682474489a991375eaa20b058d2943a27a1614e32b1c4b139dd5f1d12b9304964e4cd59739f841eaa812e974e6b7e50a4027caf5778755656740ce24b72ba19
+Entropy.12 = 918b0d1b23378479ed401ea5b57e499dfbaf627e80901f36f02928d9f9817d75
+Nonce.12 = 482f53c69b6e69661ed5cb09e6f2a491
+PersonalisationString.12 = b87b00bbb1f83fce2b3ede26e0e14eb395a70059b13e91a68c2ce1e9e12f0dc8
+EntropyPredictionResistanceA.12 = a089069749998c4409cdd81f55643c76c99d7bf92af750180af89ebdc798420d
+EntropyPredictionResistanceB.12 = 75ab35b54e8b88a2f5be6bc0ebd60a859adc381cd639d956456739848c33ef25
+Output.12 = 16a89a67f9c8bd1259e3fdbbec2cf2a4ea371a0c6bbc6f623b3a3419671dc1daa7439f019c91624f82cf4a4b2f6de773a13fff59fc0a13eb6c0504a1fe0b9e6cda6d8ce5aff8f9981029e4bb797693768061e9985fbeeb18bb8a32f32d30248328b6657bc0acc9835981ef5768de6569308c6db2c7e0b5041818f7efa71db5bc
+Entropy.13 = 9992eb2d9b7c6222036f17c4ec234d2d0183ae35786a4d435e6348aa43f95fab
+Nonce.13 = 3abb3801eeb2413ddec74977e4fc1500
+PersonalisationString.13 = c095fab7b5238158272225292b3a5be542b1d6140e3ec7ffc2cf9069caa1a6db
+EntropyPredictionResistanceA.13 = 1d34ef2606bb87e5f5dea363e528d4c12c2cc7d316f115028bc87810da47c50e
+EntropyPredictionResistanceB.13 = 486818098a5502e71a8281aed18c6f6a8b2bb1d203d8393adb7592a7285e539c
+Output.13 = 7465698eec4e5ac0f9621e2092d60a37a1ad0fe1b6c618f32bf5f7d71be264bdf04c4b1f829a076a761a9f540078ad5808920cd04d10a95bd1bf0256d21b8a9f8a6690061da0385b89703de92e7e04d2a576439463951f5fed17a7f4068af5fada714caa351aef42016e056528ee7e445abfc4862a2d40304be5f859e6ad1d4a
+Entropy.14 = 0e74483d436bf9462cd4b87e0a26bca0660f070a9f4e03e38ed03a5c9302ce78
+Nonce.14 = dcacce0dee59e77c7ab2e7ee852827c9
+PersonalisationString.14 = 3bd7b30a28e05044f929b6e36a4053bc56ee5d863098497ec3edb2f2cb9f7be6
+EntropyPredictionResistanceA.14 = 4ea774abd42b28173e4a2233fc628df352f0b70ee661d6437a60281435979e4d
+EntropyPredictionResistanceB.14 = 671fb2a07199c679ecc70f15d019658c413b4747cb617ae1528f689b2363e87b
+Output.14 = 0f422483347eee9a1794291a34e9e6e2f09d8d249bd362775d918940c201846e0e14577f49bf2a875fbd6f4d43f76a323685608232f874a874e1f54494a33e5049350c122c09d11febc231b8322fba379049ae3d4d4fbf14c4cd08b2cc6c25c2570f452486a32f77e7e02d09ca05852060b09ab4280a10ef8a68202d7ef7a43a
+
+RAND = HASH-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 7b03ece14ff63fc07722916b7cd062556fd688d5436d8bfa93d39e925598b180
+Nonce.0 = 5843f9c7a086bb92f9b80a008c0fd579
+PersonalisationString.0 = ed4ca85d5cf89de5939759a8204bd91032c6db77418afb023538a87ee8324f4d
+AdditionalInputA.0 = 752d90f2b91a5286b6d3308c7676272f45e5fbd0f9bd9087b3766c0ffc3c81ef
+EntropyPredictionResistanceA.0 = b6dd12e258406e712318fe378b09cbe923d67848ac11992dea52f9c6508aa2ed
+AdditionalInputB.0 = 9668cff92593ad0576f15925f5aa5dea577a7790ad1c20f8773907bfc70b9bb0
+EntropyPredictionResistanceB.0 = c9c1b2fbcf6120d333393acabfac3aecda2e7a67f888f52df32d43ae0a2569aa
+Output.0 = 91fb25cd4fd996a6994efe211972f3a1eb0011a2c0685cfdc4bdfd8d268088f56fdefac522e375713b8587ec407c62d255d207d15b3265ec64d34a5b7bb120703ab9bf6855407637ed8c2d24a4ed5b7026c271167f889bbc57929ca6d50ac6b6fc6873d925d1b5bfe4aee8e2eb649a43fd184ade51238d45ae9ce54dfcaaf7e1
+Entropy.1 = d3a6cb5fd14bd5a38daf5d8fc2bccc56716538a2f08c0b1f7969b387e356cb06
+Nonce.1 = ae3742ce60e11d697c756ea7143cf466
+PersonalisationString.1 = a63329c8d36b73c5ad8b661f51a5d5de2c16f52761188a527d2c3fb25061bb15
+AdditionalInputA.1 = 129cb1c83e7911242431d7e6ec4c0b90422f7e2212d746274096d040df4e3acb
+EntropyPredictionResistanceA.1 = 0579229805f93aa935091a0641e90ba5e9a7801708d320615dcfb0c86d57dfaf
+AdditionalInputB.1 = 7f23b81593dfde84d54ce16297f6a145d76ac866baf3907c9a2673e713f7eabb
+EntropyPredictionResistanceB.1 = 0065cca086021f27bc1b13ec6c4ada99ebddc303adabfca5d8e824315866ad71
+Output.1 = 247b80509ee844a91e893033ccab2af11c9f30064a12f36bf8cb0c67644095b738ac658e554e7f4b424fcd0835be256b713b67179063bde5d0ca433cddf912e597c10a3e67cd2821e64c1d9d6cce90070412e03f639cc8a19418d93863f1485d5384b2e501621e251597cca25c14778b43cdecb948ef01096102159d30fd958b
+Entropy.2 = 3e1540431a9442197955e86662878260ca27a909fcab74dbed9d18cab2c39372
+Nonce.2 = 28be6db052250597ad3fcb1fbcc09dfc
+PersonalisationString.2 = 4df22b70a261536a7c4290d75a1a1fb16722778d89d7f8b7010698a33154ef82
+AdditionalInputA.2 = a2a49e96c1fc6a2e8f6cce354ccf7554b313197e72d49ccf85887bb72bcbe60d
+EntropyPredictionResistanceA.2 = 002278bb00d1046f017f49941494522588d9bdb4b47d556203e6ec6deef91b5d
+AdditionalInputB.2 = 62044a4a26239dcaf948def366d63c6e4a46127cf20c1c1e5b99bf064a2b2c20
+EntropyPredictionResistanceB.2 = b424cdd5c43befa7515012a810f2ffe457e6b9648e107a9db424b98473b10ec4
+Output.2 = 196d6c90dde2e4a42e84ece8c45b719c7902c2597a3669a242be2ed615c14e4c1b7875257e0317fecf66c8262b5c8458fd7c0725de13c93241c3e9698568d657c7c98aa4167a2293c172b3b06e902d8c0a5c158570c3e0149801de72e3a36c7461b978dd1bf4cdae45bc31aa462ace6317e41d2408c18b1614941794ef2fc11f
+Entropy.3 = 13bb0f729e9572a623175063d893b314fd2ccb93ad8bd6aaa21c23e9fd6de808
+Nonce.3 = 020c2e9b406b9eff8f05fdd3edfb738b
+PersonalisationString.3 = 77219aca208596b8fd967a17102653f7649b2f2fa3570e1709566082ef69cc91
+AdditionalInputA.3 = 76b380fdcafe4490350849f7585a02017c41b566265b5a49462a6391843555d3
+EntropyPredictionResistanceA.3 = f938bf526c09997e6b611b1b36c95d299c7af0e5942ea47a42fa5c451f7e1c17
+AdditionalInputB.3 = afcabe07269399c08c51b9a729cc1d79d23b34fd0071b9cd80f63acca96d6c7e
+EntropyPredictionResistanceB.3 = 6eaf326f2a955410a8c15e1ef596a5686a90ec2d5f28c57979a2751453661ad8
+Output.3 = be637e5c6270ccb8c7f5227c2344a176cc6db350ae2dc9fecda22cae6db81007f3538e1d598941f07ecd959d5c175269d33c4317eddc32a9697a9decb222e641c1785b59b3ae04ef8b25aceb2dd20b6419fab452e6de51fbcfcb189bd9b57867d5022a5cd348a90ccdd6be65d3eab1a81a5b6704f34ac203e010e6f41662234a
+Entropy.4 = a70c74a91326c6e5c6d63e2a26c7b09051fd4d21603e560b79a2e0e1227ba05e
+Nonce.4 = 367a62847debd8856ec4ecf5a4827e00
+PersonalisationString.4 = 1af03b64b697a05fdae1355876dbd6151ff8f9d6b01bb629ddc78367f0c8eb28
+AdditionalInputA.4 = 09f8a6fd54f98f53ea5342238bb1962d8f9fee5ee313a95e0ec13710d415b2b8
+EntropyPredictionResistanceA.4 = a44c915df166b23a1ed365357442a4e8a4da694bd340df4fcaaea9c9910a031c
+AdditionalInputB.4 = 190ece5f6203cf4f3e05d7438c57464d96bd37506cf8ec8fee523b7c1d8271ff
+EntropyPredictionResistanceB.4 = 7cc810fd8f0bc32da2681105b748a1d03bb9e44b3d8b1cd4421bf9139215568c
+Output.4 = 8b06bacbffe3a2a86aa1aaff0cd47a2e94a5e5e5f9df9bfd67845687d644f5e109c21ae6bb6326ed05502779bbba6ade5119024bfe8fdf94e1e57c6721a6eda2ab67877b49815e419d6d5d34fb581fdca53fd56245b9b93ff58a76113b5fc747cf52d90bd8e88a0a0aac2ad53d8ec89beb7adb15b2b5131a5a9ad3d681ca2d65
+Entropy.5 = 93d1fd31784fcf51fe61c765e3d3f8725253da4c6a83d9b621b8e15093b8b497
+Nonce.5 = 9041807e460f781e7d9391fd97e895b2
+PersonalisationString.5 = 92fda4bc46cb58fa08c37b8971c67d899f06d0332b7107b2972157f50045228e
+AdditionalInputA.5 = 8ea7a1210582b2d9a058e7b8bbe3706b19201f9a67e47cd7dcd0fbad2ca2b0a5
+EntropyPredictionResistanceA.5 = 351df7ee979c8f40d2db122fb14be9c02ae1c32f3a468c37d2e376dab4a5794e
+AdditionalInputB.5 = db021dfb626efb7faf835eb2c1ab4bc6655078e76b7ce44e349b97c7155124f3
+EntropyPredictionResistanceB.5 = 85bcf573ce9990bc3020e6e4d77cc8aa37a2c1d31e20672892e6b957cc53ede8
+Output.5 = 77496161fb8c6b92a163f0342c42da5ccdf5a2d4eafc184a7657147c93900c2c1d32357c515c34228adbdbfa6d89f388d64e555f41341b652fdc7cb385437082bc6fc0b3bb30a1d8d973a3f08f07e8e305a64edda003197c34fd35f598a6add923ecde129d68666abc75658d2f0a1a26a6073d925dcd2dbf5f5e269aeb07add2
+Entropy.6 = 814e10cbca507465fa190454b9210c82cbfc23336e0d0ad38399aa8538a802d0
+Nonce.6 = 84553bc94645506d2f1dc6d79b90569e
+PersonalisationString.6 = ccba3360f8432be802ddc28266698253f31cbc0dfeaad59cf93f826323b23326
+AdditionalInputA.6 = 76b33e99022304108bf6e693c1f827e7b4f5e8fbb31622c8acb2d43094dd1215
+EntropyPredictionResistanceA.6 = f6b4330ff4ff0eac5bb4a137172a9dddd975df6b9c1f8dffc843ed95b0278061
+AdditionalInputB.6 = 7410ce7af690f344bcd0e1b50f31a4ca49ce57c03b51985bb2b95491895f6ac5
+EntropyPredictionResistanceB.6 = 1ac898dba8b63eb4fe8ca3db4438c5888bb8f2f41bb85012e8d477c20aeabac4
+Output.6 = c854dffd0269eb9fbd0dae01293625536622b7082eb68d2f8281bd583e6ba70367d326b080edf8fad33500a2d833f693aa105c8b3ee254823eac4028ad7d86ad2516955ba88f041a95a329fe17a986ddaea9d8f5e05a84cfc52845fc492a52ea13902b551f55e7a896ecbf973e1d286664329615a2c95d7927b8d7a3150feb88
+Entropy.7 = 7b6ed7c97c78dcfabc035f8a4b5e1fac856d42d3846f2996e9fd085a1e0e2691
+Nonce.7 = 544b40588796c909a558a160847ace6d
+PersonalisationString.7 = 0bb80aa1ae9ddbfc7a2513f34619ba908a87fcd2d54dd56b7d2b23233213a9e0
+AdditionalInputA.7 = 0133a2c315d419085268259e2cb2a01e6b5169f01fcd4cb8cba010d74ea8be29
+EntropyPredictionResistanceA.7 = 6f708bf81e0281bd0eb796c5f1e840d1191282cf9f5645d51ec67ff86844113e
+AdditionalInputB.7 = f05a44b6688e1abf598a4ec11e73c9bea8a7df3e7146ccc680b898ff690ce0aa
+EntropyPredictionResistanceB.7 = 3a083b5cab31b90721d315b4c2116ee690d38e0fd2c7d31e82760afc5043d19d
+Output.7 = b3240e4949b8c23d3796fddfe5fa56ba3d8b738aaa6649b04d1a6ec87fc62ff7fab16cad516e5c979e5fa738c98f1c9325ec9a0ba98fb7af17e672639f83db0907aa202b342e5b1ba0b2d19fe42c2dac1c1af58b6545bc285c44b1c6a61218d3d9bd988941d8fda72508716ed44bb8b618c9fc7601f86149a74bd3bf21a8c764
+Entropy.8 = a07ff22a56d15606b72c8f40dd7ae453a5d9512ce85803097777753b7bcdc454
+Nonce.8 = 936c7107a59d0b0b95d99611ebc9af95
+PersonalisationString.8 = fbf8f3a3eb3a5ef485d12315d68217ff48f93e8946ef0390fb0bd0c1cba441a1
+AdditionalInputA.8 = 17ee6ea160eb2580465711eb1e0f60fbd612fcc536123bccbb95cfc155bf3037
+EntropyPredictionResistanceA.8 = baf8a187beb61cd2d5eaf59581bed8fa6a1956ecab0dbd2f3323aeabd51be8e4
+AdditionalInputB.8 = 448c59a633b02dfc91942f2a857c0c68bd70b873a7975487a958f232f23a58e1
+EntropyPredictionResistanceB.8 = ddc544169e974cac2771b7e1887feabc464440d6e3f65e3b981a1b7741fd43ab
+Output.8 = f37b20642ffa877b1336b6f9d342a957ec1548e537ca173def20500eed3c522c16e0e47434e43ce303c325571de744a7d0f10b7568d1998010bca57cec78f0cc034394da21ca8eec4172f48acd7a2aab1ac4c9725028bf73212b6e87f3b829dc2afb01e97ce94be75be6d9e30c525f2a756062c7e4188fe54ab0b06ccca2abcd
+Entropy.9 = a6fc9bbe3c12ebdcdae287320925d24924b33328a86494184ca20dcebf14f75f
+Nonce.9 = 41bd9fb05b41d2fa9afec78a0b290d74
+PersonalisationString.9 = cfc098bb43caf09b97a8ff8538467827608ac80e8b5e4538dd3086d4e51a6cd2
+AdditionalInputA.9 = c6b0fad5936617fbcc93f43788168f26d58da83897a70e88c21b736e72603930
+EntropyPredictionResistanceA.9 = bcbfc73ce5d19db94cf39be291b1bbf9f537089bd1e3ffc87730eb8fce17dbc2
+AdditionalInputB.9 = bb934d0d026700de020072171bcab7d097edb5c8f34107e3a9d6cb4d6ac7449f
+EntropyPredictionResistanceB.9 = 322e9f4755a6c829a5e5adf8e2804020735bc160cd724eeacf10ecce663b1509
+Output.9 = 88434a85616eb6632fdbc7eaf388ca372ab6ce785186693fb6f4ae5eaf00c74e0ad02dcd21a2afdb481978b98b92b3ba5c4964e63845ff58f3deef88de761e35ce86d44a66cbbea425d9871eecd0b35b8e3c06bab436a475e6593dd6a4e0c91ba990d4c1d81f21623cbad44cbf38d952a56cec5a0ec825cef927e0583ec4da24
+Entropy.10 = 3c947378e88b70f66100d14aa569a606bb550fb80466e9f5b65417d0a1f4e8b3
+Nonce.10 = 0dbcc6e3ed0a3f48a59edaa26a122c0d
+PersonalisationString.10 = bc4e82eb05738d0c39356c47a9705ffe946ca693917ab70feac8c5079a1f9d3b
+AdditionalInputA.10 = 3b8a25a2dcf43d00d1e6aeef705501e7c1ffd88baba6416513e9c6727c6a77f7
+EntropyPredictionResistanceA.10 = d9240b89b729cf1ddb4d5e12b1f4fa2bc8c6b24b70a0755e4b9b98c6ca77c8f0
+AdditionalInputB.10 = 13e69496675c165b8f7581d7918912907613a4d36282db5d7432c3f8774d721f
+EntropyPredictionResistanceB.10 = 66ff39701c9ccd67ad5541551deb0bdd6f2e80fe3ebb2c75f06aa008e5be1b81
+Output.10 = 84e677354d618e66b161e845194c5b305fd333fd413c670034980e2d43ed81b2aa2afddcb8fdefc99a1fe86bfe7e38e90179b8a47795b3c64eeb2a8f40677b907edb6afc41ff3506298818df4699e3774901610c1b6db37b42357034652eb4033d69186f250c1ea136c4b2638727e9ad03ba42974d525ef414e77956af439586
+Entropy.11 = 141359047911a690c60b87f87878fc3d10f93f9540ec9ede5e015597086838da
+Nonce.11 = b946b885689854b71be3f3032e0b076b
+PersonalisationString.11 = af4d0369c150928f80dd19429eb14f6a34f49c4f8a74ad2058ce8c13eb93629d
+AdditionalInputA.11 = 9fbe07b925be10ce13ba7af8ecd153f996a06b2f4fe96153f168940a31bbd58f
+EntropyPredictionResistanceA.11 = b1cade0358fa2a00f358704fa7d7baef62136a2c110c1b2b2227a92166bb601c
+AdditionalInputB.11 = 047caa17a1269d9c3594c72083f8f46d3db09d4928057f6bf3f966c444ae91d3
+EntropyPredictionResistanceB.11 = bcde725c95852ea4ef3febef363bbd44345c8e82ec03a1b99ca9b6b546a9c8c2
+Output.11 = 9be49ee21180f75bbab6160e747b83da8dc71cf32e70b5afed2a52756b6123899dc2f8b4d5932a1ae0b652e4f5886b3e0b8da46315d755f717283544ece8f683b31cfd345c7fb7f4f35c238e882ab1dfb2e5e6cb8623f9f6f48125851a021da15b6d92114e456f1b636b495b0348e8f9df68d30ae635e692011639697fe95af2
+Entropy.12 = b01cf468c78ddb50d3c018e2af298d3c2dcfc84434d3fbb55ee32c859728b624
+Nonce.12 = f813eba6d4dc0aeaf8f5af4ef5e82ce4
+PersonalisationString.12 = e1131b1474de929f023e47e7a03eb9f13daee796450d91016d1a0366168b5f41
+AdditionalInputA.12 = 1a59bca4e1d5972d825f4314391e9fc562b28e888062072668f675a0c3c1d9e7
+EntropyPredictionResistanceA.12 = 1b6ab3a1aa91ee0e1e521902f662664a3baf1c2d88e796a6072a115fe493cd97
+AdditionalInputB.12 = d69197e4ef49953ac921edeb9bccbe8cbaaec429eba1ef6745918075442ee478
+EntropyPredictionResistanceB.12 = 7c3d10b94fe49e1bbff9a44ef2abb13befa66b4cbfde284838df8a39983973a5
+Output.12 = 302e5945c0f67e8eb7a88cca094e8f43699580514685c0f574c639764d9532a3856ba5b1beda4ea426d11cc310f1f1d6343e441ba4e3e0351aa5f6185f67635fef42b2ed29a80600b088fec40da40c03549151461f8e0679779759480a5660b75465ac7b0f073c2ed738b347a8b8a651745850b2d8385aa35d29845c1be1cbc4
+Entropy.13 = d13febea6e35c46189c66210f3f172cee7613bbe76b387d216467791a5440f5a
+Nonce.13 = a3e4801a6c1b02b29d1703abf4093b67
+PersonalisationString.13 = 47f6952dd45300594e3f6e35814cb3f688973a2c397d41d1487383def260231f
+AdditionalInputA.13 = d08d57bb2fe0398e0b430867df024f5a442febe19713b705be3a7c613e59f3a5
+EntropyPredictionResistanceA.13 = 52f689924b985ee716754cf60900ac5b216c56536b882fdd2d7514158fd4e9c4
+AdditionalInputB.13 = ef6daee5d5aed3a50e2a629f1f15e183fc2ba41122e2d9d8488a05632c2d28da
+EntropyPredictionResistanceB.13 = a3657dc48877a66cf1f9faed7836e52f61c4e40d95940dff8581169123b57150
+Output.13 = c9ba94f1ef1e0b0721a5effdc6d7105690425a74e6ca412fbbe9816d982cf836ab1645dffb696135a6ce7fd7b9a1ff6ce6259343d2e2d1a7d2315070a8028c60540126c53e0fa071bd01194e82a9ea5f886418b6dc73f13a3fdf7ecc3bc30b8102a6bfb4b8e146084998f256f6ba42ac2a7b6f033194e30932f12857d3276d7a
+Entropy.14 = 066dc8ce75b28966a685163fe2a4d427fbdb616650616ba282fc332b4e6f1220
+Nonce.14 = 559f7c64897083ec2d7370d9f0e5071f
+PersonalisationString.14 = 886f549aad1ac63d18cbcc6685daa2c2f79eb0894cb4aef1ac544fce57f15e11
+AdditionalInputA.14 = b7215f14ac7bafd0a91772ba22f719afbd20b311636c2b1e83e4a823353fc6ea
+EntropyPredictionResistanceA.14 = ff80b7d26a05bc8a7abe53286b0eeb733b715a205bfa4ff63703deadb6ea0ef4
+AdditionalInputB.14 = ced31f7e0dae5bb5c043e246b29473e2fd39512ead4569eee3e3803314aba7a3
+EntropyPredictionResistanceB.14 = c73832534681ede37e03846d3c841767297d246c689241d2e775be7ec996293d
+Output.14 = 60c234cfafb468033bf195e578ce266e1465326a96a9e03f8b893670ef62754d5e80d553a1f84950208b9343079f2ef856e9c570618597b5dc82a2daeaa3fd9b2fd2a0d71bc62935ccb83da0679805a0e31efee4f0e513b08317faca935e382948d272db763e6df32510ff1b99fff8c60eb0dd292ebcbbc80a016ed3b00e4eab
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 836ea258e97db514dcfaccc24dfe63708027a33074e8d41443b745703b345c81
+Nonce.0 = 0f04035844f6aae9444486511d129f7c
+EntropyPredictionResistanceA.0 = 84395a07713093916cf9c2463ab9b99831273bcd5d21f30c1ae47aa6218f7ca2
+EntropyPredictionResistanceB.0 = ed21839bfe8027478872d04b68a276d841fdd87cbf58a3b77fd8ba3d2853940c
+Output.0 = 87a918cb5eb0c5a0ae3ed3031d2a39904af0b33814b7f3e2188e057cb2b2c44144a5facb094c334e6ec70d4366f8615ccf98cdf3392d0d644159f721daf2a77ad7dbec72de6a59360ecd4fad6015e59170adb96ada2caf3951df3c6fd8936c7d9862d9b81c84a9a1e6df423d743d157ee50aa8b92fedd42052ce4f17cf629eae7dc2a2d9f48d7373f30ce53dfe2e2e5febe9718a8787d3e1f3941d0e9c4723332545d1a99e946cf5e3b335f95491226982891de75f3167d880cada8a1e76b20e
+Entropy.1 = fb1a3f107b39419abe8ab7b838b42b7167c831ea3e38861862fbc4de4e39b7a7
+Nonce.1 = 5efc0a443e70cc7d9eba32f6c3fdb4b9
+EntropyPredictionResistanceA.1 = b8892dcb9fe727658495b247a085a331f507537527488be46ca963ca5a0fb2b2
+EntropyPredictionResistanceB.1 = 43791c2e12b2407d807f5d10f8a8aa259d00ee43d2c4219be9406a9ddebcffb1
+Output.1 = c183162d1dd410fd05b445866f56f99a727b8e2527a9db6693e0c0857b27a87075991f40a16c05200ed3671631ee08d3080ba5154a9a6fdf0826d316c4944f3341483d0049013699ad6550621cced669eb02587fe051597a9f7705f8c6af7419e808345b3ba18d145317d8db5670b059d9ce978e6d2958a8315c55ca3616cf4f37771d413527987e31e5963c954121bfd020c771222431f8e2853c3516aab0ff126a063b017462091b1f84d734de344877f6eaafccc522e57955791893b2ba9a
+Entropy.2 = 02438fe36752c33dbcfd08d19e500ece75982ab51dce5b1ca71f0b5ac2cf0138
+Nonce.2 = f2d5fed466151d750f790bb3b6965583
+EntropyPredictionResistanceA.2 = d788039323ae614d6eb211e275edee02d0e5ace575842ad5073af5d790718a1b
+EntropyPredictionResistanceB.2 = 68d0b6395507c901fb82bafbbdb2efc5cf916717d997edb0280b13e133fd4e16
+Output.2 = b7f1bc608ff86ae64a90893a43411540ae511c564790d5ef0fb9239bbe1ac3b31f49244f7c07d85658508857228346d8500c686492ec9bac2d788aba4bc57f00671730ad73f274117a2a127ed4fe6a0ffdc6503b4b57710df2d14096e5593b1194921c9205b324e4c6e9b57dff4f2f5fbc21de47c03764f5c0524050ca19917532a3cc607b104e16c8883982971407019094d15f54af72d8f266e81a57033c5344d0d6b66a65aca2f18a9fd5c8d2ec931c2a4940682ce0f658cbc9f67016baae
+Entropy.3 = 87ce513e74a1a6241bf1cd4d405629646f8350ca7914ed1b5ad147c7f90be8d9
+Nonce.3 = 61d8df9cdb4f82d98afb052be06a8676
+EntropyPredictionResistanceA.3 = f926f4ff487dee1df46133d857491d79170d8bfab4c116d1dd2f4e263913dba5
+EntropyPredictionResistanceB.3 = 8d37b5ec8b842979f5dbdeb29ae970aee2eb54b14e047b79f946acbdd4283315
+Output.3 = 1852a43837744222a8e012929ceb54ad999240ede2b33dbd6e04e873590092c3b755d94ef5204a0106398863d60db5d2ff994e47303c5c89afa25876a0c1bf37e87ccb126f5ebc6b340130ed64f0702a3cccc36f98ff6007cc2751b4c7edf9be82a0e71086d250c9887349c967de7dcbe1b75834687aae1ee4e9d5b9b139c0029ac310c752952216d108ab3d6250ee480605e7dbb418e6e00e01f21bdc09f3e6634e03adf85e1af08c025f7c008c80f389033754da65d828474845cb9011696b
+Entropy.4 = 680c3355a71a6b05dbfb2a6357120b4adaadf9e4c17f862544f9907ad89f163f
+Nonce.4 = 9378adbc4bf1902308c35634f65c8a37
+EntropyPredictionResistanceA.4 = 9e71f68c2b23e9ad1782c657edb028c6ea8df599389257bb00db565279f7c9a8
+EntropyPredictionResistanceB.4 = 12a099978f210081d858cbe7f76769f3a0f933966028792643e7eea50e862b46
+Output.4 = cb36a83dabbeb479e98c0af693a0bbb4ef2cef8ad83ee80e0d44f61f4bb960c9f1eec5d39bf509488acb36a480f72a578d08bb85ad41952bea03a40a16715e06e88240fea928d02bec3a82e905626a4a6566d308ae419088ac1cbf3d4ca21bc12defb9a5f67dabae696526cea93152deb6129f66994141b70b14c4f2f32d730e7959baa0d550f0d00e262d831a25b4f6e4a1d64422264179f48eecab4011af90c1a011493aa7b8493b8ded5d0700e80a3d1ea25002ec724454451dc349793b42
+Entropy.5 = 011b7608fbdf265ab50a4c91f9f911eb6b887fac42d797757684b228bd53e59d
+Nonce.5 = b489d18521f83688de9857ffcdd9b27f
+EntropyPredictionResistanceA.5 = ca570719d3920d1b94370bc58a396ae4e3a4e66f5d99cad56b57c798fba0210b
+EntropyPredictionResistanceB.5 = af18681e80a46c7bd94fb97bc84b45e4a0277094b51fedd06781a9f4fc561ba6
+Output.5 = af55044cda81a5dd83d7c80c4c731157b2ec816aca678ec94d245ce0e99b22d2e882d045ee1c28b6c6e9ac961760e4d2a10f4e3ac14359ff0b30a7fb5ab340c06ff0b3f309a77d3faf705fa606ced37e2818827e8bda689258e9da42b0e469c77f145ae11666c34c5620643780f0a417b550f492c2a8c539ad011bba829b7ca8703cf5efbddfbee26d9a9617c20325c6726fd9cb7048472ad89665209ac0f266abac10f334cc069a423a410322a2382c1c9af4b423d54ae2018c1007992ba952
+Entropy.6 = 0327cc9748b4505d82166572c2fb604e80409f9ecb570ba9cdd88c6836348120
+Nonce.6 = 17f396b319ef0104a48d895df6f2fb70
+EntropyPredictionResistanceA.6 = 4a2c96e1401a4c78f54920af4f6e6ec5804d7c2d21e264e4dc8285a5185a304e
+EntropyPredictionResistanceB.6 = 1cc0f1614a6de2d8eb24fa85d91e152a9665acfeea9b72e9415d2fa2089826fa
+Output.6 = 930b56e76989fe531b45d3d6c941aa439839d16284fdaa694d467582aa71c9bfeed44818d6ce51fb5bb1ddb56197d7aa1416ed065db50e561e5c5006be718bc3ee0846286599eb4b1288ce0b83363786b7aee4789cc71e159c712330326b36abe6d538ed793496330e9227b752293c2a328ad40c108c3495a6a5c461a38682c0252ca8199d7d9ce638b29dd46a2573b80207e2dc35044ea90f8afed853167472d2cee7165efac1235dec9684a9cb0f6cd738080c4844b1f9ef77bb9080f4f990
+Entropy.7 = 2c55fa2f04adf3e7e7c4a1114d63c429f3e8920cdf3b6532788d6584caab6380
+Nonce.7 = 87f8f8ef8ffddeb69ca4a87e2ad8e698
+EntropyPredictionResistanceA.7 = 3b9857b265cacb597444ff245b827164cf05a3a49dfb5f4876582b7aa1c40cf2
+EntropyPredictionResistanceB.7 = 4e5f6432106188d943da82956bd2953fafc866b0795295d54f751f906988488c
+Output.7 = 841c053285b31de3c4b4fd746c33d81637b27264ba9a785c00c62f0dc85eb01ee8bda62429f31e9dc4f755636f66d0314c9ba9bd40571653d061577777fe9142eec51ac5ddb16f84b4b560a5b419c8b7023b83294a0de5c2b6df4065294e8a977b46096d6f64c1c812971a98f71374bf6954890601bb98bd39f35a48472ddee93120f0f06301578b5f62ce70c30c4cedd6918134039eb88f58831c15c3e9c623d32c681de4bae5a9bf41deace5e64941750250a501ff4b851a4994d743a80bba
+Entropy.8 = 69b7117acc2e76bbb7b37467653a93d3837279bddb76d9e568a9cfa0b10675a8
+Nonce.8 = a277837f2140e143093ff91c2fb3bc19
+EntropyPredictionResistanceA.8 = 967ebe7235517595e7bb219040710005cd362d30387338b40f2b61a1d342ced1
+EntropyPredictionResistanceB.8 = 4953988776f7c515554d422884ee26bf5910398a69aa2e7367ef2f9f4f7fb806
+Output.8 = 8a59f0a923eaacbd20cc2a8ce66414ee5d117d84a935b8c3346a0e8df6eda56b063b26dff2d39b54d6d7716a5ccf90c13b42a4199ba64d3943a9161013b5b2479b1cb9fa32b6845df8b3b617af53f93693c180c6849db751f6dabf4f364b2560e22550d90e57afae5d0131c664b90de254fa55d27aa632aef10bb52550b35c17bdd45dc49e9843a87df51b8766478c680d222cde9e5a0bf371ca848be5dfa73b99a598de3edab2834fce7b7c368cc3496b142a8e6e2d6ed4322740cfa2ba8b42
+Entropy.9 = 024b6381072d3f3ea81b1d080aea6fef445f81509cbc05941d2266fb0a2ff13b
+Nonce.9 = 65744e38fdeac30210ce689aad0f1f00
+EntropyPredictionResistanceA.9 = 29714d557ab52cf7ea9ca3fa0e6be42d9748ae49519bf1dc10d8f24ca7ae69bd
+EntropyPredictionResistanceB.9 = 07a9f9b5b0f183b711592d50e7683e1d12cd63f0738aa28fce26585ca07b6e03
+Output.9 = 6129cbba2bd4af6b34776fbf9d73e3416e79e5b13e8873b5f2457c31ab64ff6bfd3fac54e49ea1322e024ab23f4ab5148903cad2bc32ec5f0c1db33ffc3239b2ce56eb982df2a47b772c64f1200667e3224b7cce19ca5f8ef5e79bdca3a139d20e20c14aa3bfc6ec00ff46b51c9d95ea0b57930fda09c6213187c0e22b4c9dc39162a074119528eb25715fd98219a9d9f6ab96df2a6b7998313ef27b7d5f26c5f07b3db6666850e00badace1d99ae8402cad21dcdeae10d26440712bd6979ee8
+Entropy.10 = 2254c5a7a2f336c9ce02afc67fc73dde1b02e6dda11a9403193a6841416e560d
+Nonce.10 = 4e965132440e5536c0f8cccb280e4f21
+EntropyPredictionResistanceA.10 = 5925f6d3ca990c13bef81fc2e15af372629f16159f8cbdcb95109ac11e716a18
+EntropyPredictionResistanceB.10 = 8ac46920e25215dfa10a7f88a3920f56f54201eb9039f6f47dd841ab6a0e6bc8
+Output.10 = 17d7c68d089035bd6cfee103163f10e4aee670238bb36ac0e9af54ab8f9ef60298e2a0fe390fa61fc34a6a41b22149e12306b276d076933d855dcb3364d8a19ce306209e04dd1f8587fdcfd4969ab9b263ac5a3b371e65c3689471f4625fe1b4061cf3ab01523b4e7a7c282a9a0a2ae79c14fb2f66cd458587adaec29b5fc90dc3f77790346895f4836961c2ff31bdfdd744fa78ff14f1a83c3fdaa84028f0437ed60b3781a3623f5079c856e2acc95507c6d82f9d9d3e254650c79cdb984515
+Entropy.11 = 856e0d001d937dc4464d6a61dfe410739e609a1f40fb5d2568d2fd35c780b95f
+Nonce.11 = e90e2e4d09e67450236df0e55ca59b87
+EntropyPredictionResistanceA.11 = 73b2e6190323eaa9b49db916781832f792e9c4116d692bd0e4dba0382d2811c2
+EntropyPredictionResistanceB.11 = 46a2f3ce5834632152c648bd7d0cdb19b2bf9e1aebb0fdd62e4ebbb87edc3e36
+Output.11 = 5079dcb2ebd5c90eeca50387c0413709ea90c4431182ca8d01009c74046879dc79b8540752b24e237874dbf1b7424fa8e504407462488a5fb918f44e829e6eae4e9fd0e9bf5e73a7df8ce0378aa1b2ef0b02f3a22db3ea6c74c214ef571e61958a4f724cfd30f2e9ec5b185a75368af6a6d042156657f138c3068053ae4475c407818f88738fa2629453307e972fd7b2ada41dac6de849f047bf2e1d3e528e3d0f5a03a0dda9d1a896346f4c5a7b769e036468ae53d5ed96016394958196f826
+Entropy.12 = 7cd10c769a47b4a0f67b92d9d73a6bd040d6135700ed0c08a53ea929865434cd
+Nonce.12 = a7b15f097d1e7181009b5ca15e10cadb
+EntropyPredictionResistanceA.12 = f20c174f94908674eacfec42d8ccf47a527659e66d06133db98acd774c6d5eee
+EntropyPredictionResistanceB.12 = 8d958fdf942103215ef026f9cee88e2a950c5cf0bdd7c8a86e3ddb4c007e3384
+Output.12 = d48d6c6624044f136a3464d113d5037c67e0f14e83fb9bd2cf5b1f3db7770838cecbfab4a574f61ff6afbbfa46c10705d308bd40c9c0721af34a1b7138d21ae98334d7d8dfb1e7b6a20734d247c6081df14ea6d70ad75a2797e2c677848a1063a65e6f31453d6a087c51e870a31713233e2d85fa303b7502ab2c803d82da6fc68953bf3cfe254a1c34b3cf2ac4b9716d42c20bdf14b1f22c3e1d74110667fc1e3279fcd01cf92a078d6eec6afb9256f927f4e4046d8220bc2fca520b61b20d1a
+Entropy.13 = f1e2f85ddb2db9ec098085e10db9f6068056aed49f3f57c98f2268238ae05190
+Nonce.13 = 3b84c762557f7a1196a2c084105de839
+EntropyPredictionResistanceA.13 = 3f2fef603aebffb13a946ae6b13db7ae936ca8bac4dd416cdda2ec930e525391
+EntropyPredictionResistanceB.13 = ab79e14beeca3946a69414e46a94e83e48581b6087a82cdf241c3115f999f43b
+Output.13 = 4af083f811202e18d3105584b7981bc9c2370d4ecca1df2f0f27112979d1bd8bc02d36502a43cf0c2c68888b9b0305b16a94d2073e0d69fb6e5fcae5ff46960894b30ed72b80d92a0161413cbca77b46331a5f8902887e68a958c92ee36b7ad1d8ffad501552c1b823ad5c2288d8900ec4dc5021875cc18dc6f378d335008c13498d42bab34cf8af903a7697b97fad8ea5c8f835f87fe4b9d65a784d829b874235a77bc3f019f0ed3e5e922c7a74ad65c11d7cc69cbff35f9bbcdf21a7f56709
+Entropy.14 = 6927165ba55150c06d3bc6c3cb64db8ba50fc7e501a01845f22cd063db4fe5e6
+Nonce.14 = 58da38bfc96748acb4c36ab6b3da4b9e
+EntropyPredictionResistanceA.14 = a835812aff799db76764365d3cfce7a70d168ca8a363e777bff98a94a78c48e3
+EntropyPredictionResistanceB.14 = 6cc406628d2fa0771f896079d052d057f60b334e620315f2cb3e658b1323e7ac
+Output.14 = 36c2e433e06280c1219c2f2992985e74117d35aafbeefb6468d9576fc4a23f97f131874c0c4c18b9cc6028f881eb42f0e011f2c19bb60db5f5eb65114365c659790a3f423f986eb5ccec70118e48e7ecb40e40c31a6c4b8752e8fc841df65ee68c6343579bf95e10ff99486d9793eb6a92471622b3d60297d9b0faa9e7d925d3ec9cc05bc9853c18930a5f64a8aa9e139baa625665aacd443f1469d11a6c24a3e079b952cc8b5f75ddc9fb7d96b8b14cf255c2fe7619212f281364bcd8958bd2
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 38271cac37392c71664c37669bd42aa569ae5c748be3d2cfcae55f08772cec3f
+Nonce.0 = b196a689b7a242e3fb7a2a1c7368e363
+AdditionalInputA.0 = d27391b8c35ee08e2eaa3bb858ba1713f78350add7a053d4391d5a28b75d63a8
+EntropyPredictionResistanceA.0 = 907ed3835f9bcac81ebca776102626da02742d55409cec6a30a8a18791833906
+AdditionalInputB.0 = 15d8f25259cdde481c02df908432a4caaf707c9ea42b71adf65bd57ba95e56c5
+EntropyPredictionResistanceB.0 = ba4e7448a6f023b612873ab47e5299a0c930447f75444c65960553054bf1ad47
+Output.0 = 2f78f2b101e59c920eefa9f4380bca2c0ab652379abad7516ae0fd32243c3ab3c3c9d49a6ddf53f428e7685a8aea52f94c10048bcb35f76a2b9a43d9e984092293837ccffd5e4edda9606aac8e855d6d2827d63dc484fd4885b63a95409a8c653735800477b8429f9dbd5eb777043f2c01c2d56a76603a46a0e3327314c64676bd8e78eb79e76d6b38145c7b507c53817dcf85bea12a6ddb7ecedea2dd1017268c541d46daaf734f02a32ca9f910f7a4f303acdc69a71267a2a4c5af51a32cfa
+Entropy.1 = 6a3f87d73d8b99ceba29dd9774b4200438d70aae065acea54c3e0a2efe572fa5
+Nonce.1 = 75a5116ebd663f49db0bce31c131306a
+AdditionalInputA.1 = 141845d261632cb6676c3d4d0d1beb8f5f0828b5873f8e26558d65fe5054caa5
+EntropyPredictionResistanceA.1 = e0e28a5cb873564b6d0f69ea3e2d31e456eb074f5350f0a7705b370113a74fb3
+AdditionalInputB.1 = 8d2ef52dbac6f7e6560d7ccc4cf5284b331bd4b7205dab1e731cbcb7707b29cd
+EntropyPredictionResistanceB.1 = 4b7f94b0f3e905009cd7d1f51d6d3f3a3c7b88c46443daf777b5a941cc27ca01
+Output.1 = 8232ac2175dd1ecc8077e1c064e9bfda93deb395c674892983a14d31b4a6755d0a909c888b61c1a856ac861c80d08fe4509b852a6abf6099acc241005fd9bc21587af35be2fb181a6649bec661e6d107346d1749cda0a2e52cd1ec3fa4392b4f7e3a62dbe3ca2832b3aa6cb2796547688faa6e4b0a2ccd085bce58928c9012acc8d7f9e64d6d1e3d3763a1a74813bb5f28c642bcd45b70bd037dddc80cc9ed5232b6bc8a55ff7c584bcf6756a984d1abde31b7be9df9700301f013b0457adff2
+Entropy.2 = 3835af51d4397dd5b100627ab8f9f086ad783e5acf9224a238557fa487b8b736
+Nonce.2 = 3c48906aabde640f10a168b4836cff41
+AdditionalInputA.2 = 319da98a6c0bf096e109a1a91137df59a8214629ec1de8a28375a0a7288f68dc
+EntropyPredictionResistanceA.2 = 003971e5ff2909e918ebddafb4494e21373722e85f4c27690646a0ec2dfe89cc
+AdditionalInputB.2 = 8b9d700014286f30e8e58975f4036b2ed9ae4bf2f9125cba515083766371fa8f
+EntropyPredictionResistanceB.2 = 1d0f9cb7aa20676a58d6d7d0521c39e4552dce490e93c7f0ba83173061ea0e7c
+Output.2 = 51460bda82bc0ae4f4d024cf7b29052f73ab810762c39179b77b4f1d352e204d1c07a640e017a7470f1bbc103488bc4fa838b1c3ecb48d2d21f58cffecfac637beec099e7eb571bfb128b952f0212a5a6f8d261cfdcdb921960bed392d1bb2651130bf800a06be326257fc4b444e10a4bff604d6bfe9494ccbbabf6968b77376288c9987ee44a1a1a9d82e16c5ce2a97bda26e97fcbef9e5c946276afe56730014da767d16cb36f0b9079486e5a3a100989e94968b3bd965c6b04d5ce12345ae
+Entropy.3 = 4c803e7c447cebc2d0e2dc3ce2f8c25452f34c4c2c050301c065991d893cafa0
+Nonce.3 = fb8b12542a106ae3a30f86150d4c9ad8
+AdditionalInputA.3 = fd2cf1ffe2316fb9f415fea6ab7c7226a70faa8ebca54f8156c02c3875c18cf3
+EntropyPredictionResistanceA.3 = f566e0185b9f02d648665d805dccc6773bb52364f6113dc37dd14331e71d50dd
+AdditionalInputB.3 = f56cc7a0d278bbb479d76f30a0924c086e4281a48732e36851644afe1656c36a
+EntropyPredictionResistanceB.3 = 95a21f05e0c0dfd5075b63817d184d43318eed254f153a3a74863e8068671442
+Output.3 = 19fe0fea56b87261e8fb1e4f4cf926de68189cb8747d1f4675b0ca003c40143474d203a18695359e1570746a27c9cecba2033ce58ab979e733ce8c4acfa29cf8f7688c1da65812f3958fc1769bbd71e0c3c8826dcf70c77f1bc89e2ed7be46c09db7112ace3ef37af4b446991a38f3195bc5207e65bd070f2577965f88bba7ed05abad663c0748cd16845aacd1dcf4c01d1dff0694ac8a0b652fc93599cf7bd03f958b0fc2ccb22ff58c5df65f9b20a3e0c51c3c5ed5cec5c0a0e24923e8d62f
+Entropy.4 = 0071c29c589e26a523ce59da0185658cd5eaacda6c138a918476c9b1efe6ff88
+Nonce.4 = 92c4989b5d6a55466697a2f4b0c23498
+AdditionalInputA.4 = b5d967dec9a0137874d63b1bb1c43464512862abd47762e43f9295443b6cc85e
+EntropyPredictionResistanceA.4 = 44e321edfd6d243b039b7533b488a3d81b9bb3d8e20915bb4106c7e8f53e35ea
+AdditionalInputB.4 = 32cfc57a3dad8d6cdb6979176c4aac030ad2e1f6301b0dad784f9e7b47c2c9a9
+EntropyPredictionResistanceB.4 = e39abc986ed49ad8a3a1a35a5b70984fa5dfe06984e1e07315229e385d43df69
+Output.4 = 10ce3a7a4327552b6ab53c945216cd8bf9e1c176ece5b80ad2f4abff7ad1a9f6c29637b001adb86aec7d379f85d4bcf3fecb80ecb0a60b69a8e037adfb7eeddca34bef842e1ba78cc18c304d2d458e8b96df462e27ce0b43c4ef7ec1a091fca0b3005b65b41ce6d12f35a9a6eebff47f9826697159fd152cbe921d6d75711c393db05b5405da08f264be26dab4a5d4f06acf7bdb354cb802c4c7323284deca897f455577e4ee941b4ed16585b28686a7df3a541bea2a4723f4b65269edafb6ee
+Entropy.5 = c84b6486f6801fdcc4508c9d0710be7f41b8a2106d0cc053e1d4017c4d410347
+Nonce.5 = 46503d4113b2e01b08c1e6baf924c2aa
+AdditionalInputA.5 = 6724a2678dd55707178d57bde5ef4ba79eb5b704ea69b69c34b4a6340023e8f6
+EntropyPredictionResistanceA.5 = 633e5c0f21f0be735b56a0d4904654a23e8ef1189873089b0102d920aa8306ad
+AdditionalInputB.5 = 40d69cb471c6f8415806ffb56659b3f3a0ba537bfb0db6265aa8730ac4d327f9
+EntropyPredictionResistanceB.5 = ad424da9435099b14e102f319d48c5bd8bf183224507e8e0f2b3663485b6944a
+Output.5 = 3b8ca37ed284add4049e2eac83286d8008cd3b8f72dd147003cf80bde39b4004f5e019dde267c4e10c405dac10f24165e2def71b48c49150bb3936af8123c9e5ea7aed2af0aade379df330248182bda784fec6fda1a279b2f073241a1077716d40bb85076cc971670ba6664cd980962ca55c62ad04e4241e99663aa6f1095cdf992b89d5e2dd64a07842b251037afb7f9860410fc4225ae22fd63a06f434ffae4a746f79df7a5b0ad10b563a6572abd31b8dfb6a8a221251d7ed73023dd46295
+Entropy.6 = eb92fd79d1297feee1cbfb8512c90c43a8be8d570eda1749735431890492d1ac
+Nonce.6 = a7fd6f9a20b1943f7e69b02491bd744d
+AdditionalInputA.6 = 440eb6d597a40bf4ee79532eee788ccd11d9d7161bd33ab662ea8be1d91f2e3c
+EntropyPredictionResistanceA.6 = 87228d84a7ba12675e450589f79563660711945598d8d6ebf9a3677e16435ea3
+AdditionalInputB.6 = 2a82467d41bbdbe4bae9eb9f7dd5a5da0bb757a0d52f840d2621ba7114801fad
+EntropyPredictionResistanceB.6 = 7f08ae78db194271f79b675a3ca94c25cbdd290ba0081bc33bb317547085e23a
+Output.6 = 85b7489ce2ae92e87767fb9c8562ddaa2a690e832fac69e7f391523648529c0dbf2633abaf74f74c4e041a54b7004b68e9f7aa9ddd3169e82faab0b1ff74345432b76b699c74975791f1c4a7fff3d0a6be0058920de40a1d9025073d35ede02ef8a5099328a3bbad60a752307e543273ab073f34c0c3492cb0dfba1caf99ea38b0f5ff634e2573f55999b7aeb8a704a0d122f910ad8c57b772fdb8c9c5b645aa2b09ac33c1c4344ca9cdcdcea04e1c91e54f92142f47fe1ed377f99bf5088def
+Entropy.7 = 9e1dd684a83eb63d90db5569227be7f52c9a82bc578b289ecd2ccb174a2e8d79
+Nonce.7 = 9d12cfa8bfda5bb7c1399a763dfd6cef
+AdditionalInputA.7 = 01fabdb6f6dd3661fd97ac0716a9b029f4eecdf8850c875faa710810e69146fa
+EntropyPredictionResistanceA.7 = f76904bfc15b238068acc912aa2f0669bfbe1e0deb0a47fa13db9c17e7c0f19a
+AdditionalInputB.7 = 3cde93c6d5e62fb51eceface777a8114e13f3bcf35464625f9f1988820e90474
+EntropyPredictionResistanceB.7 = 95df3188181894cc236467ddc8d807bcb0fdd9910bed105ace0d0c6aa3949cc5
+Output.7 = 37a2ad030c6a2ba3756fa998d51eaac5a59bb22731177882b48627215df0e111416e5078b60c9786f826b05f67ea8c2b4986e3157b388284353371ac3351a442262836e66f27268728be715096a47dc9c763c438f3150f30fd18b6a2ab71f9be872e999328eb325fdcade470285d4b1a66c1c50b4fd977fe42e4e66df2d13061ffb0cd1d5f989fce61c6f1d98cd2055dcb1be2981512de73345f8fa56fe63f0e931e818e0d288b1e721551b81ec96de76ac93d9c2c5f561a5f31fecf270131ca
+Entropy.8 = dc319b11d2e5a8bb68e984af498718126388f3f53a3e5274f37284063172c4d2
+Nonce.8 = aee33f266ad88ff3ae5c394d9b4daa6f
+AdditionalInputA.8 = eda1f762c2d3bb088a64ca74bc3b727cf16ff3e9d46cb7e52b6ff81b4b56e504
+EntropyPredictionResistanceA.8 = 5cab5dea8f609577e59187dfdaf8992ba9c1669b672d98a0cf072d873f7dcd1d
+AdditionalInputB.8 = 9490ac0b4c22467d92f6167f0aee7def874c84ce2c170d81b0d0cd26befa39e3
+EntropyPredictionResistanceB.8 = 30228a7a1b695253e69ac4c9531e389a7bb3fa0c8b22964a7cda5ff72163882f
+Output.8 = 16c54050a9e065a668e9a55d25cf08bb307a687832074f7866402973b1b86c74429b95d343dd357da95bf64c54cdb87f578d38d9b5bab9a0103383173c47b237aa118882526e3b5c9a4eb4694cb14e3ae5ceb59fe1286020c30a5cc7ee2bb5d8f90c1dd0a2117399cb487efbee113b08ef780b4efb723b17ed4ced0a953a73f2d7bf342f3d4d48c58b2e823203b6136637dc370990e91a37a2b37b52905519679785259a48c0714401d25ce45151cf56ec67e101068561eeb3f5c74dd5a48780
+Entropy.9 = 9559791388f467604e74241b815502d601b3936ef19a6cda302bd6091c4a9955
+Nonce.9 = dfe1c4cb111d198914ac8b8a2e104dab
+AdditionalInputA.9 = 2d544a1a7ed6f11b1d8619e4b37d9055079d99360be8c8c669a3b36319eb274b
+EntropyPredictionResistanceA.9 = 7b93da10abb5eb7ae4a79e9b861e4252da5368c0413e78930fb3858a01c0ed2c
+AdditionalInputB.9 = b68611c4e680f8500d053b8d4a6f556c120edba47d973e229c5289e4894d456c
+EntropyPredictionResistanceB.9 = f3d912ed38d268dc055b9c17c766bec05932d797750d7f0d1d3046f66699da8e
+Output.9 = 943f998a333a652dd1e65bea8aa5c8070127937e1acca62e01b8cefa5a8b907d83da810a53f2d4ac844c425c7dfdce6ed798a6f7746fedd65933bb466fae82b23392626f367e1cf37c75cbc7c3de052e9df6f5eedc51481d337b95fd53b958b75fb47d9ba1d1e7324703adf7cc7108e11374d15361f6de1cb943ed16d05a68861a88792573f031ec09fa98f4007815ccd2ef98641434992a6afbbd92353b26825bf02cc5428b92f9be7b4fe7b02abb916b33a42ca1ffd1271fb42f6e19653a66
+Entropy.10 = 2bf0881fe0c04e016d0a1edb46bb2282ac8be0564fb14c769af5f1fbea20c21a
+Nonce.10 = 18b4e4fa7daedcf496d00f382263a3fe
+AdditionalInputA.10 = fa698920b0f547bce7fc250a827ac49d5257d1f53d6b9b33699c2847f9ed5b77
+EntropyPredictionResistanceA.10 = 49d2f41c1fccb535a1dc882dd691ac0adecc35ce9b34e44c24b07325d219ae31
+AdditionalInputB.10 = 846aa44af02be6e92dfb16c4f3895261124da5d7df34c810ec2d2c4c6e46e501
+EntropyPredictionResistanceB.10 = ad9e31bfefb533f6dfef4935469ad1b1b3204849a806008909b293d110bc463b
+Output.10 = 874cb95177a91d86128c248861fef6df60f9bdcbc08d14fa1b477e67d6d1558edd462d25f90baf51c8a649adf2e53fb7f76553ed1e6be48b9ed7a9a54c4b0db0e23e27c647bf4e296edaf215e711610bae002b145055e919bf55ab496b9073ac5a42ae834d068a68a7da11b70e48bebf73b07d14cc8f3eefac2788af3abc6a593f8140782b1b027287014970320071fe14bdfe65ec30961dc1e695644224d3bb0b237b59622118b25a10f772c19b16e8b6feb6e159f156f38b62059095bcb18b
+Entropy.11 = 69cde8c1605eaa8b378c0f1d1c9296394feb6fcea9f77b8a35079273bb362b45
+Nonce.11 = 9c35c0edb55bf000696241b32b9c5bf2
+AdditionalInputA.11 = b342e3082efdbbf49c3f59cfb0836005138f57f0bd408e5d6f7eb8441fa05d77
+EntropyPredictionResistanceA.11 = f8d926b95d538248c820b3eb946d6219782d676c0a0f7c6daa22ce38c6612cee
+AdditionalInputB.11 = b12424dff055aed9356a2f5c1ca0022b279a56404979aceb40707a72396171a8
+EntropyPredictionResistanceB.11 = 74fbfae3c89f4ca10612514b21d7c85da643b25135ee8eda2b8243ad27596865
+Output.11 = 2740bd2174b13355daa8b0b342f72ae093c1902a958813b10ca364da2c6c7a43e9c7094acba8aa4441eb965c7b89637d184fdcb33c05ec0af7d6a40422ea65485612f86dea69cdf18317961c2de6c1265276ead124f3e7e385728de3ef551245da433392e153041de464376e9d0f3f957dc953606e0e5c37e70d773f57e9b997f2504dac147dca4f188ecafac6cc70c45328958b9c0408dea79f4cd5c971561bbacd105b6de9518a26720da95d986baea67ea31bbb52eee68d6aa1a53a279985
+Entropy.12 = 4980deeb560eac91088d0655dca0bf8f7abc6024b2e68adaea49959024510107
+Nonce.12 = 8de2719aa5256d3a395000f9b0f0d477
+AdditionalInputA.12 = 2f05901fbc03279ef72f6b0c6c2343a00f7145697128a82a49e3886d7eb2cc5f
+EntropyPredictionResistanceA.12 = cd60d63f844956c154689329661b5ec70953ba1a97ccd83def5320487afc4c56
+AdditionalInputB.12 = 5e2711e8ca397e8f5a16ed44aed73aa9d21582b913fa9a04c7ef85021a10310a
+EntropyPredictionResistanceB.12 = 5376087db1327011a587c531df24414b1d71eb030649dfcdb6ba2a5099dc31a0
+Output.12 = 8cd4f9d07ceb37ff8b470c3ba7b390ab6df35a7735ef86e83a86183b40d9b26756de03832697c64b08479f280f182cfe41b205688c2df0fe5d8a7cb9342bca2d203417ce73ed352c55ff669cca5fc462592e4e82c9c986641f3eed2321974f6cbdbb5733fe0f0ac76b782200efedd7af217d88ca3d87eb07aff5c3f5cfc0d52aa12b74a18a4a6b565346c7509ac39006da550e5a73783ea201541bb0101d70ef61138af2d742fa315eaa5dfba81c3d5fdcfd70a1f77fb9c46098a39d014ff9c8
+Entropy.13 = 70e807920519a3a6c9a459e84cb63e76bc7718f5b8cc0b1145d601101d24caa2
+Nonce.13 = f88cf26319830708961c3f55d884918c
+AdditionalInputA.13 = 91b24160b7551871163335a187b8c2b80ea572a4a96e8e30e971a98a753ff694
+EntropyPredictionResistanceA.13 = 5cc9f53de1840d014cf17621c9baacaa0b5c1e4a759de46d63391ce54e2cda08
+AdditionalInputB.13 = b8795ee1017b1cd9dc97c6ff634244dbf2bae61675a35c600299d12f9dd16ef0
+EntropyPredictionResistanceB.13 = 7e37117e8cf225f0add4ef99bc87d67d24678618c9385e550b11d8443716abc0
+Output.13 = 4c81e381cd8a70a10a6b131aa9200981bb2229f1f5b571b2698f1c0a24ec3abd09235e7db889144b64b293a25e23c7d222530ea414cb52c6cd6221e7890ba617e0a1074eacd6c0fd861ebc2ac0cdaea19beb1dbfd7701ffc53b07476e2c286d382f95b0a04c9b99e4bc50bf84eb5081d229e4cc830273c3be5b3dee3d5cf37339045f0fe699fa993ae64008bf6d7bd92df40d09b784c94f3120d25f504771f550a79627cb3aa4cd6c53664f5eb555f28afa21f41ccdc9c4e289533d256e0beeb
+Entropy.14 = ef36f9db13f7045433b59e194e0a04109beb87cd1769642f9dd7b71f12e42031
+Nonce.14 = 05bd9198a74201f2817f1c7cb5a96b90
+AdditionalInputA.14 = 868897897ff9d67ed654b37f1a76fe3402c65e3f6f5ccb76dd71f6661d22313b
+EntropyPredictionResistanceA.14 = cb30f0eb7f913fb47aed15b2d92a3285eca54fe410673d70521cc9e42b7ae72f
+AdditionalInputB.14 = d8e5e99dd1498f4cbf4224e4c7ac40aa7e077521ff5abfb836d8483d6a8eaa64
+EntropyPredictionResistanceB.14 = cc122d075bde2cb4ce5e48d72d5f6fb99529262118b01cca6639fff83adcb977
+Output.14 = bbc4a9e2c9ee0e3f1e55e77cbb8d0ff902bf5d6853a5aed3fc0de3275da712b031a723ce201448e3d15360e5471f11bbd30029c6574db47d9d3275a8559294695b4ab832d656defecc9d6086a01895f74f67ad0643e77cccf92ff358440f3efdca3cb816687e940b7e30bf50795f111175a7a564333b21b32a0b9d26b093c396dcdcf3203e8ecd902c3de0ab0c82ac4c1d68f77da85383e60b3ac403b8ea339a97088539aa0004e3a7fb39a827aa0d27eb308d8ae29c07cb5b0495cedb839863
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 7b5e1be0fbc3c574ca3b2077e9b9514000fed84112891371da5d31ebf5e1308b
+Nonce.0 = 28d67c22d08552b485e9e4b4d7bf3ad4
+PersonalisationString.0 = db2fffea2aea5c05f20151e7675875d770d37298d3e31a9f87fa108d7f101b22
+EntropyPredictionResistanceA.0 = 34f81f22b3f5a9ae12f7dbf7053216d494b2f3e678cac1a489e6d6451399f7bb
+EntropyPredictionResistanceB.0 = 84a6eda4216b96e292a84e17a4d2c5f8e19a90d399f434d8a9342459aa9d5d32
+Output.0 = c55e32c7f63cc775b583ecbb4f7cb671efee8f0c12496d371551473870fd8335a004d966cc1dffb8bb3e7cb36c8aa6076c16a4cb2202b3ba3ca308f081ef2e8f28182f1e5ee592aa6b36726725ced56d74a24025900919c796cbcc41c4d4d560a85f5a886a0fbbe1fb4aa70f143b48061c21b1b400b9292a0a50fed6d8a98c7aac9fd62bbcc1cc7214a05d0c634b24a70a4e448d37aa64a28e7796f0954e1a14baa974d21da9872541315effc88c1972de6ce3a3efcf7febb3281174728cf6a9
+Entropy.1 = a11d2a3327f68ea0c1f35a3bec1e1ee51b4b75e2524588668ddda41dfe5c4b77
+Nonce.1 = 794e9b140c2f6aa330a74a025e264edd
+PersonalisationString.1 = 67e61578618a590614752fb2e4687e1ae79714f35ff850220ea57860164af68d
+EntropyPredictionResistanceA.1 = 81809d5bebc2343d19b61326307968a062b807cbaf50ca6695f84c71b26c9a6a
+EntropyPredictionResistanceB.1 = 471df642ed8d8ab9d25ffeae3e8a27a59691ce418e1ba31cbbc75d2b303af525
+Output.1 = 51a4611ea26da10f24e18854dedbcb79135be5d620a15a5a21f59db89090134e641bc5bcbc3bfd93918a0c32e86334bdc2cb272f8b74ca1ad1ac630656ba11cb603ba0e1497bf04a4dbeb4ceaabbc8ae23af36b6c35f058a0d83248e0fed43d4b44758592995f60af17fa7ddc01a1e0b6d274bc14564b638f38163d377da330f455ba2e8ea4d94ae42f47f6781c6dc7a609de931262c55a99eaa2742c1bb77d1314981ed57fff9286ca600ab817fdfc0cac22b3ee02e05bc1a954fec9d972092
+Entropy.2 = 797e6f37831d67646f263fcc7dcabbd277d8e593323619c1da2c284bceb1d0a9
+Nonce.2 = eef39c71ac5ffc9d38c94fd2cc097a6c
+PersonalisationString.2 = 940221b560e8251296d7b147dc28530a33a5f099db9e9f778e9482aef012a734
+EntropyPredictionResistanceA.2 = 78a456c62ea5b93acd343376185a43d98efe13e864d53a82ece79495d78e8312
+EntropyPredictionResistanceB.2 = a06d8c363248d18e184dc63b3f3598310dfe8dc744df7e99425dab8acfcb1cda
+Output.2 = ec0cdeca05a038e10ea9e217f7c7e0ff1c1c00c6b7e733e7714adb285a717f021b6e5699ca49b533561f5a75f61c4e8daad9dfcd0e66446e916d92ee3a37ff3f52c418da658b3f1948601d3aaccd5b80ad2f221272fb62778b95f7182ae3552df5a27317eb2de3d7fc5997f6a808bf53889c0aaf544b673279923c778e90de068b4dbaf4c7269bf1fb5302fb9d67cca5370bd8eb8ff49b3d77d512c882acd67b0dcc1a4b20154e98e7bf9489af41c49e261580b72f1d12d84754e66afed6572b
+Entropy.3 = 19551ebfc3f02bd40877ef131e30524c425cbbc8837d31ae9c8e7f590822a088
+Nonce.3 = ff331919b1c108906a190e3c8819eed4
+PersonalisationString.3 = dedf0c6e9b657f4b7ab35b75b223d9edb99d2adc467a743b9ba1bd65b6f8b1cf
+EntropyPredictionResistanceA.3 = 69998a5cffbbfd597ddcce65a2077bac998bcf2d25be8121aa278961460e530f
+EntropyPredictionResistanceB.3 = b1e93d70c1dfb7e72af140cc276d9a69983312dc6f12e79866bb7ec71eefc73f
+Output.3 = e2b2d009dff7494f43e93837f18535b1dfc86e2baa50f3021b825c2287de8992311a8dd41397f09e34c12b9d45092dac90093f6cbc485494336aa27d5c3d228262ab5792696245467184e892552f4a3094d793918cc5ddcd9a4523448b05f8cdbce96e7a31a4b927e6cb4e2b60ea25e61e3951e338ea702705258f2291320762484c02a088551f7924e29a8980b53dbdde046225d2b71327ade424b32396e70d91765a43c082f706688b1310d127a1178c6fcfe08c271fede5e4ffab068a550f
+Entropy.4 = 902f8f40182b24e21fa43465676f7a3199b9e963537e190d9ab68a34bd1b5ebd
+Nonce.4 = 21fdbda33ece744a6e99f94fb28638f9
+PersonalisationString.4 = 6fb7012945690a83bc0051ad3fc4b7818709f15699a2c7650e881b07527b3a71
+EntropyPredictionResistanceA.4 = 27dd4e8d3dcbb6d811c4d986da19123f56e2ed161063737528d1930a52fc92df
+EntropyPredictionResistanceB.4 = b8d0ed0b0a21e76b5c744c608de437752f38bab8063db8299a5cffd187dc84c2
+Output.4 = 5702649fa4f3fd0e23f1ed902982695e70a77c270aa19cb616bfa705bdc1a78540cf43c273f05ae77b39d838a02fd6223403f18fae4ead503227685cf2093b6c4e8417c7d8f6fe8a5a26f077ec60323de334c6e59df4e654d3bae707dd3204ef8ed9cad5cd399225f1240b7e083ca31026828102af06d8fb52c736f7eba6f59eb8aadbc23cbd3432d7d4ab2b25416dcecd6eb66ad0316d4c0b09a4420a2a18588371ef33b77efeed6e5eab7df92debcfcbc1f7b9fa0b9721c15d524aa32ba580
+Entropy.5 = c8efeddbdd2de812c23499d207341edf96549c8e9ae9dead2507ae588eafec1d
+Nonce.5 = f72b8235fe930ebf38ac5e6347d106c3
+PersonalisationString.5 = 351c9ea5da903986d6bef2afa7486d356147ad459f7c63e4068f88de5a8157aa
+EntropyPredictionResistanceA.5 = 7632711f98904f21d39dc5be232f03110c0eb8969b3e72c549501b75c9407b61
+EntropyPredictionResistanceB.5 = c9593d9acdfa39521990132573a870b67226717324c60ed8fdf3042860dc4970
+Output.5 = 9f39d3fa423fed28d97d68e1766008c01ae31443084c1d22299f85bdb62763f9fb2f6368cc34c36c6462d5849f49db6467373f5b59e539ffe440838172d27aa2c6a70069a3802576a9cf084a85aca1aa2f994a3b73d6a3caf140226dcb3458f0c5c63ca7bd0839bd7068860ec553c59271199d7524592a856f8eec9aac117b44db9191ce2938ff439fce58faa0459fd9888fbe036f1ac903a6c565a95b8b850a2c52572f11abec403a5ccd3b8c33a3a479cd135ffd8dfb531e7237f8fe4304af
+Entropy.6 = b9f74748527f5e6881dbe06b5ff72db937ff7efbc1ba1a53455d0be55b79764a
+Nonce.6 = 2e00430f182bb08c2bd9d8cb34a48a6a
+PersonalisationString.6 = 3f9550098597b100c04d4775aeeaa0b7013f00a9edaa8b953b66291f384cb080
+EntropyPredictionResistanceA.6 = 7ca4f89f9af9866226885526f335365f89e374673e456d30480a227d4c1d321b
+EntropyPredictionResistanceB.6 = a45a18d3a061c50356a3404c5647582188eb3b9008825dd3395269714af42a83
+Output.6 = da0f95dc5c6acf8d47e8a773059a91d97c1dbf7b9c0f910c1b5b88ed7dba903d5457e1adf1bbe3dc9c4f78b924d2e09f1c28069846414772fabec3199ba6fd1a2496c7ca49a7939107d4919ac1117de86d329d1ffba0808637c15a373a609317809d14a17e508482e2b5d0327ad4b4d9f5b9eb3e4476f702fb77d6e566ed4ceba4216a17dd5f1216c92cc9889c47e2afd43bd9bc992cf70a94f14065c092b4b3d5b7c8a333fcedb161a9ac255d5a781cf56ee701ce4f3d2cbd0334bd2996bcc5
+Entropy.7 = b36364a6352df4844eaf77aa98eeeb1599989cecccfd1ae675be4b9d7e027bf9
+Nonce.7 = 50e7a5a16bcb1bd29809a9bb59068d78
+PersonalisationString.7 = 5893f6336b1f1c057833f06ea23de9471973e0029c42cfd8b303ffb19cf2f4c0
+EntropyPredictionResistanceA.7 = f0c9dc9bca0b7392836b85156347af8feafb0ab0d7365235082cd1fc377e7ecc
+EntropyPredictionResistanceB.7 = fc734098d0bb71289089d434caa53caf3779c91d9ef285c5c8e75e3efca321c8
+Output.7 = 12a4cdfd6aa77046af566089388765819a4c58d9d55a8b450f9e853997ab3c380847f19ea1d24963694a89a155e24aab2cf4d712d5b17740a2ac9acaefa7139a9468e09144cb45715d87e24b8066349a11edbb0fc6603a10ff11028ac8f4b70e4820c36d60c12610f008d81db654df8a78a6fc30f7b2f30d1325bcccb2ba916b88e33c967b1372e192d5ff97488c3e9847f47a9d600d9629627d37c9f648e15688f503f8391ec1c74726ccaeddd4eeaf3f882383ad8cf45de62180b5e7798c72
+Entropy.8 = 8591c0caa03afda475ea217f711cc250207e0e827f7cf7742dbeec0bfdf74cbb
+Nonce.8 = cddf5000651b9aa434c1b7cb403cb47a
+PersonalisationString.8 = c4993b4d445f9e8c606601e1ae6600434da5107f827c81cc9763a8248165a942
+EntropyPredictionResistanceA.8 = e06f40f09f2a7f05182ec907e7dea88fe6c76ff3b78cfcf2b4112688f3b066c6
+EntropyPredictionResistanceB.8 = 836bed048279cd654c88b3f1d6b331dbd97238254dd21450614d3aabb1ee8717
+Output.8 = cc6787f1e3f98e05ba22ced6c5d593b1dde078d1507d86d302fbedc5d885908f5056d527d2d83d4615b1887785327009910c75de96fc93a111553df5224f04ce9a16ff8ed9ad543c49d04ef6c06931c8eb2b5626e62eaf0c55bc95189f4affd2c94ab624542c7d09c37f465079992126fd173b505466544c7ba7295df8cb5b8e0d0030282e5dfe2e5719682ac5e395e1f0d93068769a101a44144aeedd04b401383a203c2e0fc31ebf7d0f37e6e8cf5cfd19853099d813d8b10f1f3852f64a8d
+Entropy.9 = 435108beedf6b7424febaad57ff0c6133cb3a4232100092d935b8c6c9a853dd5
+Nonce.9 = 0bb349ac3a30344b670e88994e8cf04f
+PersonalisationString.9 = fe61d78071823f42d86e3843052721a0a0cc506a3d67f81d12ba54875407a21e
+EntropyPredictionResistanceA.9 = 156fc427f1104758111ca7a935d16d3405d6b6823c09211acb4b9fa132cdc5a8
+EntropyPredictionResistanceB.9 = 5f3e00d9f980aefb38eb7517e327669478b91387c00b5f528638b5c75e6be6e3
+Output.9 = ddb9c995626075fe9dd2510f1643d35bd2fedf887d52f5684c1f6a07ec2119eb5ee88bb18d72ff58e048c855f658e42cd6d4490b6f669c433c7afc1b83d21b399ab8410d5c797847aa94e078a6c5ff724b3104b4bbe7af18436cce916ad367cfc069a86d1d5ce41040d4fb84cfc494776192876a47a8466f053e58ae752908c250b971dcf2071783870b49ef58d021d94162ff6cb527155466cee7b500895feda5a6b57f75f2d7815b704faa12fa1284a0f6bc6f1108958d3cc4e4c308e12589
+Entropy.10 = 81d5427883d3d719d547056c3d300363691f341b86df7734edfeee8401c9591b
+Nonce.10 = e24eef440dbcd25a2b535833e3d19df1
+PersonalisationString.10 = 9fd34007f3fe167609126caea993663f5afcedbe0ada5cb98e840360901b440e
+EntropyPredictionResistanceA.10 = 1414266a09702cf8c93921d9cf6b5b6753eb70894d71fde088bd4a5b6c748f85
+EntropyPredictionResistanceB.10 = f24f921a37b38a8d7f957bcd4a46056b29c9570423b8def032065ac8b84ef153
+Output.10 = dc404dcca0ecebb1341627ca4508f6cf213f09f5ea32b4556739550e8285d80e2fee5bb33aa86438024ea870acb1155720622dce76123e78098123a5d7f468a6e63480d4e49b4efebac9f9e363f44d7704460139c5f885c0d8bddc5ea6b93deadad18250353f6a3e436b91c18f091fb7d9b5ef169d63492247545d92852713e624b0a763b36a91383dbda7e11e7b03d8011e13981ae69ade0b999cdfcdbd2a604f4ec201fa5630131736335b3c075c8fa18b630853e3931f70ea45e5c8e8274c
+Entropy.11 = 2b9bad1872b161d60058d01ff9196b6f12fffe6a0b7863ff57431f259495121d
+Nonce.11 = b081c1f080820d74a734bf70218d421d
+PersonalisationString.11 = d4feda00772b91e81e880e41b596b7c1daa3ecb83a6febaa810b34275910fc07
+EntropyPredictionResistanceA.11 = 7d2b5c52c9bcdc9ba5aec2b281f1e54ef4c0030d28ac3f21ea5c20d17eaa0b7c
+EntropyPredictionResistanceB.11 = b0a849a9168b59fd0211157c06efdc0db41edecf6d88e6df86035dcd7d7d136a
+Output.11 = e9281e000c35783c1935fbc0b06bd98f628f35057e0a2859029b85d15ed012753dac5bfbee9e8ca2e2d63041a17c7806ea8a3bcb8d6f9097f2c4c21b0545822be77364cea2e45031ee92291421363d7a65c48db7e9dae4d0e3e2e4c14faa044571181ec39f38aa334a8a99b74fab88bf21f3603412d647a4c8029cdb434c278bc269ab84f5b5c72cfc1b43ba8ecb335eab94a4ab111d943a9a1ad20004d5bc05f5f36c8eff8fea34030c8eb0d27a5f7886fcbfbcab8728d690d613f33051f3b5
+Entropy.12 = 37fd9578c9fdeabd067b045f931c7562251d245a93812bbf7d6ac771f6278813
+Nonce.12 = b6699d587552e1b61f1dd4e7558dae26
+PersonalisationString.12 = ef34ac2026716b897f396de7226524c24888dd3ed1a077daa7b1daa4bfd98d8d
+EntropyPredictionResistanceA.12 = 62b9428397cfbb5353d55ad98d35b0dcdedd06b3a6bed45c8dd79c5dd863b5fa
+EntropyPredictionResistanceB.12 = 45dce91271a55c4713ab0be7c403d079ac159914305e502cfc783df7a272bd30
+Output.12 = dc68a681053888ab3e59d18236c81268a04fc17385a11ff63ac2b5a0c26757f855f38b7dd53680d8e25ece9859ba9f327e6d23a2fe5388be46aafaabb011f5ecae801ec0c601ff9312ff26adf4b515f5614a455f92571b57f97a3d273de027a8de346317030a7465556ce2b00e0bf18a6e903950aa40dc5a6ccc213a52e81ab429589e13fe8c7724ef937628195256fd9f15c9d09c08df82f281d172ad94a2f4dd57cbd16f88e22b926cc0ca66e8f44da809c5f570773ed93a517e5b9a9baf82
+Entropy.13 = c2aefed880ac3783221dd016959fd9dd834d0ff78eb338d222a9aac3014906f8
+Nonce.13 = c72b6fcd2d54d91dc175cd59da54a630
+PersonalisationString.13 = 19870f960bac815d60485663d03147c130d8055d36fc269e95c8d319d87ec4bc
+EntropyPredictionResistanceA.13 = 19708e01ce476b489e5853e09f28f5f98ee7c1c4075db0f786b1ee7a9ceb9180
+EntropyPredictionResistanceB.13 = 778f55f89eaeaf4fff7ff45de6da16be73119286308074a9455cf37660d4125a
+Output.13 = 03b4fdc4792c39e49ff95c435374f306fa73a2af15e5f8208106b1b4588de381dd0dbaba632d509ad2372d822859f718cfb79c5c36e193bc70e93b9a7c2481aacb91ffd81a921fc57a9d3cba366e65f2f4b661b4ab6f6ddb6dfcf0faf489775c8f15bbef69f3745c68bd087215250efd4d361fba3b35463b24926eaa09f2752fafd1a985df84095c221336c871c6bc6039989b73aaa256aa054e6ef98956ff3ac03e3d31cf2f74ff88427f53e2e34099aa8c3d51c1a6e3d8d8ada756ea5c543e
+Entropy.14 = b063c5d3e216cb96ff0120c7a36cf3cdbb530f9a077940517a5bd1efa74bd260
+Nonce.14 = 2314dc5a89cebb66dd188ab3c0ef4733
+PersonalisationString.14 = 6524e559b6ff61a28537617e68d1c483a3c1d9998a67d6cd88ee6eb44c0ab3e0
+EntropyPredictionResistanceA.14 = 54ca39bb5d569901c657e36d0a8e103551e25f9a3a40a30bc79fb207860c8b08
+EntropyPredictionResistanceB.14 = 9c2962c0e03e96c94b9a616fdd52b1f04945597b372ed5c69469b29b3bfa71cc
+Output.14 = 96cd0e64c1dfbf51e067b2eafd896d30580f46e29ecc1e51cc662e0acecad5529d2bb177d60c02e7cf415777a85feece50113942eed54a5b328cbc007a72a0db1500f17e5fa1cbd1231a8608dc25f64e1e078d7e0b4c49ba34e4659b9642f79acd108de0c92e52af86a4a82f23df12826f8f44a88cd99f576897896d17d7ab19ad02be4660b8a5840552cc73b5e24e76705485c70ca57b07eac35765ccc51d0795abc229aadc0101a056e047d7514c9d9294ef9458d5f7f5328673defb3c5aac
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = a815bbc88d6b648b1ddeee942128ea18ffc38352264cdfdb37faa49270574076
+Nonce.0 = ed51cfdc770d5d087a5ddade3da7d7ea
+PersonalisationString.0 = 50d90f28a1990153a7d6f6a6e2d73e92e39f52334cce0f263de930bed2ed5eff
+AdditionalInputA.0 = 0cb512d86eb264e4fa41443c39f45a8559a6f00660d803c5fce829f37c32876c
+EntropyPredictionResistanceA.0 = 5ba23c9b62921bbd3126ac8a93a76af7d825f2084606fc824d0297cc35a2f6c1
+AdditionalInputB.0 = 7f8db62b3ea5c975ef384b1561b14cbe107e7a1f241219b332b8069b8b670956
+EntropyPredictionResistanceB.0 = 88156a8048c6c0abe2f5bb8ad04480ac8a51b1653de656f8d71a3f02f0361561
+Output.0 = 2fe435bbe43330b941ca0c1158fa85b5613461409202f100123825bdb135ea1fbd8615783d8f2736d344d519a7a71df7deb1c561245347858d624fdfac014cf09a8dccba52fb8c0bc04a5952d8839749e5420b072cce9f83fd5cfb256171e753cd46b3b17d66860cb45e3426e8f573b4a18fbf3ab816092cae265ed9d8f46f49650987786bbbbd29cecce0f9520e05d2ff98becdbb759f8be96047d7c46b6886f609c9a55f99637032e489e3c1e1748101023be7d0b51f2b7d6c1d7b47dfdf97
+Entropy.1 = f1c8c63eee496d6969e56c87e2e57a9730883768c97c052d3ad7b7376c101523
+Nonce.1 = a404dd4e20678282f5875271370b8dd8
+PersonalisationString.1 = 5b5f225451c3311f042ed69b8a8e4428ac7e3dabe7013925a25f57b5b8aafbb2
+AdditionalInputA.1 = 4f1dc2edd959055ae98d33c85afc8c358318486af82a32fdc76c77934ba13a35
+EntropyPredictionResistanceA.1 = 5396206d406b603578e36b643a26e390b07fb3133f89acdb6f6a7297ef7a434a
+AdditionalInputB.1 = 80d7b904200410ae2152288c36bcd415ed985eceafc28445970922364a397a62
+EntropyPredictionResistanceB.1 = 8b45902485635e8618c944bd6b1ef6add8c8254a9077ec5451a6be7205433a90
+Output.1 = 7cd3eeac95698de66e717370362794b6ce336bbbf34219432a25a8727ed7dd1f5f67adf3ae00fd07c4c89860bc39fa1f158dff385e53d612940e23d2eedf498a23a33b2685a210b98f912543fd57b13396f1bdddb221b2abca82f151662345762309876e5a0e548b1f07f93a37e654669ac9d453434e38a7454f536f12dd4ca3ab04e0d555a922a8caab2b6e671fb463f28ccf353b4714d35c4b12b9bbc9583ed51368b34451c6713bb3b3e37bad87f281503e4dac8e44a4ce78b89825e52644
+Entropy.2 = 5c71c76bfff849481431d95a6406668b4d3a1b5dc0d83bba1ccd14880069f077
+Nonce.2 = e4dc769628742fcc63efeba650f416bf
+PersonalisationString.2 = 6c336687aa2cf22ffa161fca1ed51c40bfc74589c3f88462fc6dfdcb770890d6
+AdditionalInputA.2 = 34d2121509c16f5a5f9c9c07303f1c3915f2e687d695b5221c4f6e7a28917936
+EntropyPredictionResistanceA.2 = 670298cec6c71b3d586df250d2a902670894cec20704747a58faab3724d5e907
+AdditionalInputB.2 = 343490dabb7154e2ceafa95ec54490886335bab127dcc462d48ff48061a4d318
+EntropyPredictionResistanceB.2 = 9e63def6e083b4461d1d05f0b4ceeb55ed62d58de6e86dae99a6bf7a406202d2
+Output.2 = 8022224fa1f377ea0c3740e22b0182e0177aeb3f958ef5d4cd3a816d3d2c552668619cf52de56405c6b48694eed08f3892b926da34f2e16eb65e47b735ee51f71f4b3ab64d2d03491f69e9fe5a7b3371c7f5acf501b4237b7fc661ea1cbe7309472f80f52794dc4c79a5005a7908cc809aeec06e2b71e386bebbe1a1289d5f963b7e767326f7e02873ff9ecd6186cfcf359afdbf61d48a9f9d1a9c9a1eea709244687b9bdbcdc868f0faf05bcedf6feff347ef6078a89ece3523cb88c6f49f98
+Entropy.3 = 6eac1ac14c6f2f76d25e0ee6797b84784417cb1382b222367c0b74aee8636c4c
+Nonce.3 = c109e5a1bba51f529815af91f32ab2f6
+PersonalisationString.3 = 4b2af79a8e94ad3645e4387d5079ecc27cbcd3421078f520b4601c5ee311aff3
+AdditionalInputA.3 = 02b1945d1db7116466357608671143fdc867673d58d71d15b4c2d04ffb568f1e
+EntropyPredictionResistanceA.3 = 550765a7262f723aabc82d38930f44063f9f9f1fd17d041ae3b19e9b12346ca6
+AdditionalInputB.3 = dda4b655ba01d365b9eebfdbbf916693f555146e23f67a565242bdbebbda0f51
+EntropyPredictionResistanceB.3 = 82947f197ec00d8e760b3723ef98111edd54ce2dc84082643b944e494846ec6b
+Output.3 = be089c2d27b3cc96774a0f8a0abcedf794f0001f499ebe49af361cc79496da22319349fbc946a8e18b282477e83c2f91bfaf35f0daea30238eb5bcb697c1afa94b17685de87041d173f652ac3f3be6fd2f0756c4c93697c7ada2b0da5d73ae44ae30522442cf1155ac402062d6c4f80e081d54aa114ab6f1a681cf1a9e970b2395afca8a877af4dcdadc277785441c15580fb61d361623e14a10567452ba2989903f252016396d3c797550be2ca2180899d03b969b46ad3db439496fa035cf98
+Entropy.4 = 6fdcbff37eaa2bec41a37873d1a3bb42e324daa351ffe670186406be92fdec89
+Nonce.4 = 95c2ae7b4fc35771d00eb00f12960df1
+PersonalisationString.4 = 525f0d9593b16b783a2d4ff27a11686c5ee39deb6def125dc4bae6818681ce99
+AdditionalInputA.4 = 8e53c7968d3f412bc58d745dd362fa38d528817740357763b82188f964d878de
+EntropyPredictionResistanceA.4 = 809358281a6482d8c6fc8dfb2b0a812dc183ce70b3a926f9acd10407aff13475
+AdditionalInputB.4 = 2fe3d2dcb146a37233f3c499785621e62a4ef94d6eb1f6498885e917af2af12a
+EntropyPredictionResistanceB.4 = 660a30e4fac2b54f70b8a41c0f0ded33410da639c41400a023b980743f212092
+Output.4 = a7bf74d41fb958af7de71cd52bdc54ba14fc00295f82711693095d45384ebf45463ab76d79342c54b6876050e5d7285cd53257c23a9f958f055a26a82d0c607a0b95f2b96620f6e1211a2058047272c26823d18c256ddceff9315b1fc2328b81e46c6f1732fa58abc891ce1aa190ed0aeed632a87cd968598773acc9f19da97e9ed75df4e8f61f9a904f0f22128991e4928287873885ed4f3b0f59e1678513cc395145c2eb3c27607608defe3f3400f0656a3249444863aaed365344bc62f871
+Entropy.5 = 50ec8d4af1a6ef1123295345ad7899e32bb8cae21eb0faa455144f658628f702
+Nonce.5 = ef571fae1ac6afc22a8dbcc31ece397b
+PersonalisationString.5 = 4c606e19830b0d2d48ef3ad56a9f3fdde794e21e14a68fd7f76e2edeb698db10
+AdditionalInputA.5 = 23927774bcd490ced3b3b82c2216bb8997655100b2d218cacf7b94c62435e353
+EntropyPredictionResistanceA.5 = a83086edd7f8719f3cd87cf3b11e10ed4039c245075f08212658a9cbf1d6d1a7
+AdditionalInputB.5 = b6a3b30bbd310f934272739f9ef8ecffca44facc636c8be46cf7547480453e52
+EntropyPredictionResistanceB.5 = b72006ceab3530e297dafd2d133c6b5a050b3a213d19d95e66da3da32572715f
+Output.5 = d2893239e1976280ad502ff9e79abbbd1553df2f61b864815f4b762a509bf19431dc54b94c5c092ecc3f728696ff1efef34e287bc652924b614408d3912740c5b9edb9671767f74a3d1cf393ed69d3bb00a4428694b346ae8707c0ee0c15d326f27ec1163b9f4da80fbe97bbed108ad40ba821235e27f69b495110d7fe34146dba54a8f3643adc1fa9b12d1742c5d8d7b5c036dadff48d6c0ee27648208f80bb5e69df04909c1ea57277ba3660965f4e3edb72e1d30cecfa8e4c818668373264
+Entropy.6 = e8bccd53f10f74332903fee28d1f14820fa7ffcb826f4a300dfd621601269d1b
+Nonce.6 = f3f611572c0ded399049dee976cd852d
+PersonalisationString.6 = d2ce21cc3f22c6b0fbc1de2ca2f9a8f6ae9ac71066db1d8c08f47a3ba0fd8b6a
+AdditionalInputA.6 = d79272a77398726a99e5ad1268223cf77ec981c0582f8d3ba642bf44e38bbefa
+EntropyPredictionResistanceA.6 = a7ffb501351285b9dcf936aabe32fcc5faa21dff3442764b331578dfed0df73c
+AdditionalInputB.6 = 7f4758a4d9519928ef65026f306750a0fe15ea486d02ce5f20538ea1d2a94d9f
+EntropyPredictionResistanceB.6 = 4bf73cb870fe5d9cbbbc27f048e450a42b9205ab21ecfffc98a1f8ba6e4e1d68
+Output.6 = 218570fefd798be21d747584c38e16e3768c5e9b40ce5d00fa19ca05dbb60598160e360b9f8f42fe51ca7a66ee7cd68bcca921b0c544c6f45be4ba2da410e9971f4d30f2ccd6f1c0ec417b4c5b7c4311c096419ac5be5a21d7d789536ef80fb3298bd4ef92afc55768f415d4d98bf2332d7158c3588d0765e70c958c30bd89806ecc8feeedeb6cc4baafbc00f6c9c918d2088ffd9622924ff02b0181eedfd7c096a2dd6911d48b48fb4a76bb45ba933766f0af8e76e31c39edcd4abbf555b229
+Entropy.7 = 516069b5e7aee3c6d6cc6ca30e50deff6185c43ec6d943d8c8e005b9296d1eb7
+Nonce.7 = 5ac08a7affb9e46362521fc6fcc91a2f
+PersonalisationString.7 = 27c87fbfe5b7c0324ec27c1978b904e12f1d677068af6ece5daf5e9ec0bc3ee5
+AdditionalInputA.7 = 4bfd9b696723b50f644237ac8500758b659ac777f3d0c047f7a84c97ff828400
+EntropyPredictionResistanceA.7 = 13d7ad85d65472358240c41e3ac425cd4809d392eb1cb21d7410a6e4ba5841bd
+AdditionalInputB.7 = d33a6e989459079e4c0be561e3d0d5ef496459e46366a3be81ca7c04839b96fe
+EntropyPredictionResistanceB.7 = 739d467d44d05eb56d0b757d3b24c7588d2b00f09e8e919e4c8ee89bfa7e77fc
+Output.7 = ee56962c585d0e665608858d3c3de3e38b39e5108678559b4df15cfbe5c68dbba3b3af06a4488eb0a1ce49fab8ed77f8e3d4980a522fdcf08ba74e11a020555070d9d4a711c23ed42d95081d280938e8af79531260edef458c6284309699710402334613d7ff85f873204b8255ce89922569d71c1cded0fec3808ebd0d5a1ab8c27e4812e54f332c44af58ffaef0de17ed24e3f4836ba4d208b0782d03a48e7743f98a2c1731540d86d66323693679c9dbec81d7f633b08c4d4fcd3c931e0ba1
+Entropy.8 = 0b085e87945048dd14e013dd256cab24279f25195e541dc7060b04c04e70b259
+Nonce.8 = 46b2b04e5200b35dd7a6a5555536d4d8
+PersonalisationString.8 = 62443cd365d07f710aba1b33abbadf7aa2e4496107e8a07f1bcf0903c7de77e5
+AdditionalInputA.8 = 72f08b9a693d2a064daacb766892e306c4c31e79a2f2c82692e963329f1ad4ab
+EntropyPredictionResistanceA.8 = 36b6b713264f10a00a5c22cdabe07b967f3834c36394f1641fd508ebfe3832ec
+AdditionalInputB.8 = b6e11e962abd0ebf5fa9693e3a5ce4e675eee60dafe1bfc77f9f9b9195ad1d58
+EntropyPredictionResistanceB.8 = 85143eb5a086bc3901156e28570e7217d2d1ed7b74dc47b6f52dc6465ddbddbe
+Output.8 = ef0fc2f8e3596df010424cea482c12fb6e70fe01e73c4302ad1bbeb2c0059047f7908047eebc6a2f4f2b271801803e62238d48473bae2827f2393b1a328977ea84b5f86bf8c8c940f59d84cdf4f75ee5e789680eeb84b480135462124aea57fad1f663ac7dac581e6a093343ec45adf73ff533c45ea88591ec48179f6bf51a7e4ffcc44a81fcb54b01bd86e737aad38858bfcb569ccd933b06660fdd2217cfbecf31567a4b7104479063dba8e18cab245bd38794f97816890057a0d68519b063
+Entropy.9 = 5b133a7c02cb47586d47e3b882bd31b34bd6a05a50dfeb9c4d8c2a3e9909a93b
+Nonce.9 = ce03a9855ef69bcbe530ac59c99bd8df
+PersonalisationString.9 = 67c6144a798f9aeb59a514a1cee34477633ffa1c4a9ede768a49d6a404700ae4
+AdditionalInputA.9 = 0f19fa9049e55f1d71625ab5f0c97ded5a5f24a6502968da3cd5288a64d3a4d4
+EntropyPredictionResistanceA.9 = 30c679a10c862f213d8f305d45fe745f007a0a6ecc8cc1c1ff584efc2c38af73
+AdditionalInputB.9 = 450399abe7fc09b4567f34350f7d99f6455f214b90013ecbd343eaaeda89c51f
+EntropyPredictionResistanceB.9 = 8ec3e6bdaa3ec97894e8d6301480b2f856bb150e6d1976868a0d82e232691838
+Output.9 = a6507624752db89deaca327d0f13e969586a741f09db68f9e3442352acc7794f82b734cb7b7af06abc8d23bf86c12e744543a416e09e8e005d859f467dce7fa0cf3126007986f3b836c1cce26e9824c9324772c5cc0624a4e0d38d8ac2919fe1313c4569da894ce47367e852c7079b95b5b1287c9fdfc4784ed92ea8fbca2c1b8d7804ad213f90268f33452f1621714295d44d77a628c4ef43b5b0e29b8a1c4238d76867ceb9e03c43f0bc8097d353aac0b734d5ff49f300582a28d219b05a34
+Entropy.10 = 1f532fe4c75d631230c239e5a8815bd7a78077f00a893ccbef030e7aeb0500e4
+Nonce.10 = a6f79f2cb9b384c6283d211e72cf4e8c
+PersonalisationString.10 = d4b82da7a197d92da6d49cf36ee35413bfaf7fe392a2d2784d6c224b0a322924
+AdditionalInputA.10 = af5112cdf73b72739e0c86f2a6f620e002075d6329bd95058339b2e983bcf404
+EntropyPredictionResistanceA.10 = b3515f15850a59aa9224183cb8b87bfa8b2a227a75819067a0eb67990152a867
+AdditionalInputB.10 = 79e83011fca872042bb716ac555b4d6e06cc5d4de98ee1b98b0910fbc0644189
+EntropyPredictionResistanceB.10 = fbe7702e8f41e75f2071b93f4e579b10ba2406ef867c9e6d2a2c1566d91f8d93
+Output.10 = 4a44e410339d2be0f48a6811819dc95fe7ae2ae34a88f38963c7536630c98789dd25c19569e73cd54bb8cc9cd2f57a288a0b3cdec5bdbd9be38a569e792b2d3bf90d29072d5943a4c395cf5479f43d6023b214755fe0c059508b9055567f7e7f86b207d50550a5bcd28db10b3a4af69a9fcd918ca13ba18f49836cca8f941dbbd23f2d5100a6c51a9a098e75acde03413d7b0611e34329fdf765b6ce1e2245bcace0c3a141accfbf7fd234b59dcb6f65b53f80236257468b86a4b227ff57a135
+Entropy.11 = 5780a384cc8bcf312f0fd273b310cb3d25fb8e9ff378b892b11b158c7c11947a
+Nonce.11 = ddbc9a9201b598cbbc6092722ea1c858
+PersonalisationString.11 = ce7048788f438ab3ec89ae031b59cf13ad850b8540eae1df89e97c35783111e1
+AdditionalInputA.11 = a90ad749bed9675cd7db3e190f301a66e36c9f6f910ef149abd0fb1634efe484
+EntropyPredictionResistanceA.11 = f672c0f86cf53ea62cfe72819c1b63bb0dea0a2ac8010c3c31148c9092f7f57e
+AdditionalInputB.11 = d78801d8da42983d273a04cfd6cc643e334a46e015b16b91e6f84bbe01f5072e
+EntropyPredictionResistanceB.11 = b0e57c9497e62ff6af89d23b7784853996278b52f94083c2cd8843f0e8c589fc
+Output.11 = 0cfe8ce61f3dc8c04e612af9fb9dc1ce35fb350e5cc6b2b8cabd2a68f49451e84cd764e9a9944de757ba2636f607c5eb7907999676388802694f1ec4396f34a15cd17463a229d06f4aa99a7eeb6676369b621ed0e76c6eb8ea08a85dfc4b4ee4b8882b122602070acdbb35a19e0efcd3d339d38148d58f69f0e7066d004064d48331bda4db62491e4f337bbdd1fedef04b8e53668b4683fa50b0bdad74c0d8e2d396ddcc4ee27db0dcc25d7b606a86b7c80287d14b7de4f1e6aef310f7ac5a07
+Entropy.12 = 30b933d0c10ee3a9d8de5bb278fd2cebb87f482df09fca3fa191a0753af84910
+Nonce.12 = b39f3d08a21bf1258f0d45cc87f40aa0
+PersonalisationString.12 = 0a0693a862009f5326dffc404ef75997589221a5f6ce0847f4286df9f964cbbe
+AdditionalInputA.12 = b21cae778d9d73b1f0a453abc1934733f9650f9fb810bbfdbdf62c931a38c6f4
+EntropyPredictionResistanceA.12 = 70d95c87c028b9d183746ac74859d3dc1aca2ca4eaa14b5aa95a743a842ff7b8
+AdditionalInputB.12 = 849de8f1cc2af5270b9b5835be80d6fd67188ac2589680e302fb982f71dbf7e3
+EntropyPredictionResistanceB.12 = ceb9fef36b7f5face50f2c67d5689df6092583837f9cc7da340d4fca1068c4eb
+Output.12 = 7c6501ffea806b516f5367a3ec957b1ee03f55ef675b1872b500d362884df6638c92ce12218327465f695783b0a9e301e5809cccc7ba9fa802d63a4241999b0276e85c60b073b2bf9ee43a0ea58c2c8711b0e8af459cfcfdbbbaa93e4f4a139b2cdad50bb652a2d81ebdf9a588988f880ec7e220c80e52cda6552b61751d2c2e27664968b2d787e45cd55a798460600a5413a060320467ef79c838ddc4213a0cc6c58d7132e26391246a5a2f9f7d9e68e000f17e4d2d5f0c558e061a7c70d346
+Entropy.13 = cc07f37305ea2d8c59c19ac7c0080ce12d9b0af9be1189bb79a3f84a2775ebbc
+Nonce.13 = 4bacf0e010c830c97465be5c0f103c2c
+PersonalisationString.13 = cdcd345dd167f012e17e1b9e70c41a2ea9c80ae8b13a49d956bce414d9537e33
+AdditionalInputA.13 = fa5a3f78e6c0f61ba0a646f4bbd0959177764ea6969c6342f962810f928e0d2d
+EntropyPredictionResistanceA.13 = 05f4e0ccd8fd0563da192a07d4b80e0ecd78436d89f53eba9922ef3e408699b6
+AdditionalInputB.13 = 392b8e902c7dc78c3838557ef56c9271929a4278a33c50c4591694353ac9e3e4
+EntropyPredictionResistanceB.13 = 8d7e7c9b98c9ef17fceeeebe2dbade6664dee08a7e22f40661c08ca9e8cf9781
+Output.13 = 4ecd55a3098ee180ac7d6a12b673a259ea3477a7cd01766978e065ce1b4c9bfb077154cbf5c96501116da2455ded168deb710ac8232861d4bdb0cc9d25670d2e525567505f5a0a1a636215209d3b1d4d962ceeee830a0d0172e4b0047962ce4a5dff3054547ac9930a2aaa2f54fccdfdbb803db139cc95df20f3bc2fc7a678aa4933a3f641f9547c552e0c47a67dc81d0eec78704274230951b1ffbde8ef59b08843b4d580f8923a7a4f632603d0c1e41f380a52a88de77593faf10a03891dbf
+Entropy.14 = c570000674fb62322f6cf92f3397c524274d6c627fe255958661eb221213ebde
+Nonce.14 = ee55bb4b4c8e4a9226da1fe20520e0b5
+PersonalisationString.14 = 90c78467d7ec5c9b4cccbf8888f70a44a2bbc4f27bf29f54966f6df550b94224
+AdditionalInputA.14 = 9072ff074cc782c8ff3fb2fb6c453bfd7c294dcbd54285e6d50613b3ddbc6a32
+EntropyPredictionResistanceA.14 = 720f892b6c213b2ba075616106392766f10afb79935ce0d36ef50d2e4ae1d0eb
+AdditionalInputB.14 = 9d015ac36aa25905ab1ad61c4c5ced15620306935c548b63f6274d0e69050bd7
+EntropyPredictionResistanceB.14 = 462b911da3ed588f1e57e952379c76f4c32b1db3f85fce3315904d38bdd5ca9d
+Output.14 = 1beaa2df060fcbb134e8af0f7e1c4e6073fa23deac0a774825978a42083b18c559de8ddd6652dc89abfd8006ba18d9bb9f579f611fe02984870f160e4f4516d6a708253e3c57896a0c9491b7c218e4131d29d31ff331c411c157ba071289a0004d3ee5fc6bc0e8aaf4bb934f48521c5c30aea79fc752720c3cdf67517abae2b936a75b669edd0f86d0d9d01bfb91033c431a4f8c2822f4f055c39a8451c3169dd63597ed1710915d5ed1fb8af25e2db01fe1cf60b8ed59ff0af91282db367afb
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = c2c8ccc55807ba8cdca63e89726674842b0d1c32473a168fa7c3e5e6545acb4e
+Nonce.0 = a23cbe483abe8fba92a944a1d95d29ac
+EntropyPredictionResistanceA.0 = adab30cd098e4e85dbccdd80738e5a0b0c13e5cb2584a59b2b396760731dd7c2
+EntropyPredictionResistanceB.0 = 19944cad4f7b8d5ab09d47252f2951da92315be3d78da30d4f73b429f2c64efb
+Output.0 = b1fb244a53a23056299487f13a22ec8b3e800c8fa0abe92bb63e55f612ae800ac92c23e051b1bd45c87823dd6c2f3e8cb36066beeb0ac6e675d6c40649b669c2a5133d1c06bbeb6f9383776da09b378955d3d9ba0503efe8c26719b6cf22bbc345b781434ca8675e0cb2e6803c928a38167775fad43367c41dcc4b3a6027002f7087eef0224966954ea01592aa42f3b4b172366705223f321be82a35be079a17ec2c69a757f33da7c36eac3de5d0032570a3fc019f8765ac2e142c0c862ad690
+Entropy.1 = f6dd732b2aac9226e130105e77e7c2fb5ee90a71ff6d15375c4ae833f134829b
+Nonce.1 = aa7af6e74564db4296415724a1bacdda
+EntropyPredictionResistanceA.1 = a8485d8596f090581134358b3123131dbd330b9dbf604937cea1f88cff768aac
+EntropyPredictionResistanceB.1 = 73d47154d50082ea62e4f6cb063f94de8725a186618c533ac27eff2a82782b8e
+Output.1 = ab628bb0077824d2db7e5dc09ce940b50d0f398847c10486a45656e225eb37d2c32748763faa002978588e2743b6ec2bfecd565494bbb7e5cf203687106d695cec8afe2da2c2fddf5d7721ce1a8cdac6038ae34ae082ebaeec975688158f1a971036c387fdea163fb6a95c4471701324a43bc6e0a034cdc9205739a3d54ccb59e4f9377268d9e484c097289419b2dc480f55fd27f08b2ebe14b5e998444a49f743d4368bffd6346b17518cbae44cedbe388ecd8fc7c36595c17013b5216d85cb
+Entropy.2 = c45f9516193da585e35fd1901e202e90bdf0830d1382cc5ed8566501c8d80dd3
+Nonce.2 = 0b06209733987f8958a8ab11de2ff5a4
+EntropyPredictionResistanceA.2 = 382b68d154759b293cba0712b56e980c2d0210829a29ea39c4a51157c400eb1f
+EntropyPredictionResistanceB.2 = e1297d90538a33576d1562f43ce239d7eb429facf886951e66751551fc230025
+Output.2 = 5768461dbb525292aee679e1fbd24e9b4484e3f57800f1a1a1e58730aecb918becc53b23fd2d762de2f3233a9a86e9b6bb371798d70d196d5c9d45329b5add971a67a7e46bbde13d1b6d79ef11791a4c49339ed233a576ee7b236a8c9d2e45a34ff6351d71f4b985408e9ac47fc08234807d99db244bec0028719c4cff0f733d2f82d9ac1e6a49050f2c9eee49a14d15b17969536c88fd462da9734f4307774258e542c577c6684bc0623dd020daed08a21f51e85c96b61377bb25e32ea4c113
+Entropy.3 = 5c7c54f80b2e7f8396078aaf2652e646ed7f451160aea8de0a7e3060814a0ed4
+Nonce.3 = 5816e03f6ce9fe0b0fcb97ad4c08ae67
+EntropyPredictionResistanceA.3 = 5190938e53f94dce97b9bc22226b217b4a9f17d7b380bfa131e4afa771219c73
+EntropyPredictionResistanceB.3 = 4215c6a9683b117a1382f078a40791f789515397d1506c22c433a12f4a146b38
+Output.3 = 1e6cdfd3cf38c2079eb458c9aa1ec51084cbada1895be8ccf4cf0f94e5815cff94ed532113c4fa51bcd462714bef342118f58604ad9afa509cb3e89abaaa8a24a94b02020d0baeb4f67a53516cd3d39866d33638bcc7e0203fc49d990345867828b65965755519128bacee29f86f641b4bc61da4b30640ed34d6e0a69828a564d7340f01e4cf7735f39829dfd280432aa721fdb20d9ff77e9c8a0b4380df1fe792b0ce67dc44baab5a909068919cb20238d71579bc3c417213a2e1313024de44
+Entropy.4 = 801940e5b0ffb573bda4f1f3f2c1bf36e1333dacc4181aff01c292b1ac9ada77
+Nonce.4 = 74a8cfa0defcccc099ba235104b6b65a
+EntropyPredictionResistanceA.4 = 2e6abd3745846e22d4d6d7e9d7cff6c6c6dbbc85093a69da398036f8dd4abdb5
+EntropyPredictionResistanceB.4 = 1b64891c2b7be7299ea73e1cd8519d14b688ab0e8a377cf6beb240e7a881d99b
+Output.4 = a52f00e5074a2da8dddf468b5989bf2d6304c140b21fefd25197b9a8b4177648460d2999c55ac2d44de83e281c9967ce7feaa86d22719692bf509ee9ff2e3301b94aa401e6e4031f3b3d6ce8b0f835a857c928f0eb0afd685d55365453247307da3bb7cf0fdca3f50953d5c2196ce24c69b3ed12da5936f36bac3fd76a99472bca975e0ee2071a006abe8a9a7a1ee57e192326733dbc8406cdda1c13d6a04a209c69f5d056be7e8240d0497347155541d08c794db8c93096d16018b08ef39754
+Entropy.5 = 3073db6b6fcb15b79110c9a7ba9852e809572a9123d8f23d7d823621ded2acc7
+Nonce.5 = 59f8f2ed85c0e8c9bea6e672053d76b9
+EntropyPredictionResistanceA.5 = 6e4c887dd61f793984d0c187ad367aed3e1efbb79f2b9ea559a1d1179eb40de2
+EntropyPredictionResistanceB.5 = 22549bc1dcd7eafc87d08184397b9eeab080a6f20ec34e091b570cc2e5f498e5
+Output.5 = 7ae334727ab068d3299755b096827156ebba63ee06a20fd8a02552120d1d6063d9d6e013470493a09ac0212791e314bc272098f7d81e3f4acb07fd81142b7528b0a6c658d422d2f183181264d8c8aacda6cbaf8b85710efb5f437ae36ed05fd20127bf2cfde65eabab55a3ac3c902853271a39640acb3094deb969e2563608bb35e339a760feb384f4a346bdf2ab3234ed2ff285b5c515df416b7d3a6f3cc7b70423e95d0b12147632f7321a09bdf6e447863e97c0b1a411c14fda005334718b
+Entropy.6 = 26a99d7f3de44324ebddadd870a7265a220fc2357f6c8bc153cf34698d1e7672
+Nonce.6 = 4b0f30a84576bc7704a1a083a343c69c
+EntropyPredictionResistanceA.6 = 4fccd8aed6a254972831c13c87fc3556e75f1dcc8c3153e6045cb363b33a66d9
+EntropyPredictionResistanceB.6 = 965ef7367dce9500ee91465b3cf2ac01da94486d55d39183468a1e36b6768153
+Output.6 = fe63e1ec4d5489cdc32d56a5e52337a6d83d5feb2335f444de15ad9e7abf6ddcede97afa07d4e0559f141caa99c412cb6527584ea31c3eb7cb0a161e6b90f6dbde1b4e5712c93b2350f5c7739d4715d8c14de2880b80c57c44fd826eba994cec103feac480cf4ded55a7945d2d7ff026f6015c811c328fc492a97cf7f0c6db63be1cca564e7348353aea33e1f0cae99a7df02fe8504c703b5d725d50cde41d47827eda92c025a26c59cd0f6dc18a87eff1f001092cbf6f3af8611899b560a48d
+Entropy.7 = fae14c84b0f4f26f6fbab7f9c6d5df4db8e7d44d289d39342c15efc9f7dd7bb4
+Nonce.7 = aa1eeb6184a5a3482b567b664d4dcfa0
+EntropyPredictionResistanceA.7 = 856b76db7e21bc197b54a5a1113c3de41d5dfa0b509728efcae7ad61afcf0f38
+EntropyPredictionResistanceB.7 = cc7d2224f18e58223b4a4d2c7a07220e54715410fd379baa54bf135dcad843b6
+Output.7 = f0fd3d3ef4c8fac8e394fcae2d4363398f486df2d9fb8083713fc5be8d22220d94b6fd8d07f8756df2523e538e12fb2fda9212f211d38f6262a9dc921169ffb96564b4a75cde9488687af7362c39e160a7752a8a69ec62bcceca615e9e8b5c7048bf9e1e5e7803ba560ae36ec491ff69541c124fe1fcf4bab35a9cdc847bf3be47707b521dd9198f61a8578abf27d11effa413168bb29ca3972418aecc177826de2fa117feaba31113aa322430d05b3d86206f4986c934ba9e6ee4f1450f5838
+Entropy.8 = 258d435a6741352a8040b8242e49f2acd6545d7916b90ccd3d86e3da9aee46dd
+Nonce.8 = 952ff81184b6cd913bd5ce71b2a48e5f
+EntropyPredictionResistanceA.8 = 52c9c6857e4186a455cd5831b8d4e1fb069ec9756c8f21763cc4f49ddfedfcce
+EntropyPredictionResistanceB.8 = d807a7ce3e2894762e9defccd68fcf4fecc938993e92e2e08f46b22c5b89ea34
+Output.8 = e4940614e0885a3021870be4a4409af958961e974a1da34175a2b6ee4e48e4824eaf3bc4503d5b38b556ba90b595fc2151e1f7ffa549144bf3de286149ae651b31afdfca787e78ebad19541546e1dc0cb89dd2f9d321000e004574b1e42849e047078535301e84629e92ca7c1e11cb783851b81637d4d2cc2a02384c2672cc726f1960180e990ca16080ab9ff939ad84967a6e52e39a5cc4f5c1de86c7028cada3257dfccf3e06e4cdca1d7d4b8e3cf001d6088d0f8eb55fdcd31c9058293ac4
+Entropy.9 = 52969ed87a121bbd6c718b07fdee179c4dca26c5750fe02d609f37f421d96417
+Nonce.9 = cfd841b44167ed151e7d7565406f9771
+EntropyPredictionResistanceA.9 = 54203bbc367c9191e918948d79df18583c5d1f9cf17af66529a87c20061d35a5
+EntropyPredictionResistanceB.9 = 7720da4061c93a0127f4f41a0ac1a9d425ed600b69a911e9432ef88b6592867a
+Output.9 = 124d8fffad711c9856374d0b8d15803390a2b6f96e51fbe423777fa7237e83d3786f09779cfa98fe5a5aed6164af45ae6e248a7f945b8f2bbb6511c31c00b181c4a16a4fe164a72a2cce8afc605a7914a10d91b64ea70acf4d931ee2532d8183474c1ecf01547267c0c6e407ee46b56e5f3ddc7593980d811f28b45bcb63b5e51ad00bf18c11fb749e98c9ccd8417d6b4324c3c51317bdd9bc70317fb96b10d8aeff95634fc5c6786f56e2d10a141214f8521c674a0d5a62b60ca70aef1b3193
+Entropy.10 = 37ff96c69b4e978c882533837b4e2b5617d2b6e98aa1e232630939aa9d4349e7
+Nonce.10 = 394be4bcb20a77b6a6e19ecdeb38dd10
+EntropyPredictionResistanceA.10 = 60e88063aacc1a35fa1e9e62a7e421e1bfa5cdde9bb487b07f573701d6401063
+EntropyPredictionResistanceB.10 = 684e0014c5d3d9b308ad326d3765fdc3b8d1872b858f7b8481621167996ccc9c
+Output.10 = 37fd7b1925929afe051cfdbb5f2e00c169bbd1bfc704adbd216e8ec8e9d7de43a5d93b83f0f83138a77bf2a3a719f7ea266b06ab54ebd33d4dcbc40db83c4dc03a9d9cd178137158794a1f8e8325c3e1d5e9b3cf0f296fc4bb3176612b995b0aa10403d7e5a9c914d30a60740068a27a9168350c9a9ddb7196d831e74e78ee182a865afa467f99ac7a102466dd91e60a1d6a7423cc369bb805cbd3fb5dfea2c1348bf7dcc8178672504e4cee2f1e95f478cd489579a08532e0cb43a9b4308e89
+Entropy.11 = ed011b2614af1441d53be867ed9a0f42105f4fa27b0165a717cb9b7f87c426fa
+Nonce.11 = 4d58753664498604f4cd033fee41364a
+EntropyPredictionResistanceA.11 = 18529fef3a2de18e2cc5e0af5cffb0608e1ea105eace2e0001016b3422e12999
+EntropyPredictionResistanceB.11 = 687d6a3aeb6c0b3f57459f8715d69ba36be69d6d0fdaed7120b6f523b9aea28f
+Output.11 = 5425df4ee6d82719243d1a973a50152787386d666a6c3f194e283463837f86a6088153fdf25cd0240e80c91540812018074c35e2c16a93832e77d6d613293896e11c88edb1f46cc2b71767128e39a20030960cc725f524cc322f1b564775b102607eff6be8a4a6da71a9d62f59f8234b71ac42fac9a129adf32464d6cf7542fadab9bbd1c558522db883d023899e5a5bf98a41344af07c4f5f6a5fff0fe6b3beaf2b41a5a4d7e438263b2b148690f0192b911bfa69f44d13fe08dfc88e786d07
+Entropy.12 = d17446c8f2f242f6bd11ef67a5ae7dc228417916ff428e2d4b8bf817dadd51d2
+Nonce.12 = 05ef5ebcb868c7adc47d59cfaaeee9ed
+EntropyPredictionResistanceA.12 = 448124ea05d44189096cd306d113384f39b4caf751fb0909ee17726922d59abe
+EntropyPredictionResistanceB.12 = e960d3048234b2da200e42a7d640d2c39946e38ffe2a44eabc6ed9eb9472b9ec
+Output.12 = 2b3d616caa992f8c5b10754ae16318e93526d39b16fd91fe3fe4ce490914628fdf83d7a513a7fb562ce94a11feb572a4024d4a445a8734c714521e054e38aa4cea5d9d38f411d0ae7b0da75cb1750e817a1c5a41ceb7b09e34d718f149beaada6776edbf4805dae9ac6d359ef587f66d98b69fa04f109a873c89019b9dd7c386033041d08f8f7e87207bcc4bb7c2a0f979b63a76cf2aa0732d8b0fb78fe0fcd40007a678d4e0249229556c40cd1d46f1f6afb037b1b7e21a55a2bde9d50e7fbb
+Entropy.13 = 4829475c6a6802238b60a955cb0d8d694733c8295d7dc5dd9b8f24aa9cad2b64
+Nonce.13 = 6eec0298cdfd3ee94c74dcac7e5c7909
+EntropyPredictionResistanceA.13 = 17f296230ae078f1e86aa178c5b4a9fa38107155959224da184b9a5053ff8427
+EntropyPredictionResistanceB.13 = 3bd12fb5941fa4563bb0ba5644d8b29cc735c0974e0f6eda54b73414136182d3
+Output.13 = ea589cebe0e4e7ceb96d1882c7c18672beb25f2b1614c17038f308192473e1deb19cc1e891e4dbd408c5686325380283692db3d4a511b7ec370091667bc0808ea85c481a89e2d380b3b9150d3e07d4e1b0b47fd732ba6a552286f0ef8ae5f42b5e4a7bbe5b578d9c300c29ac5cf48f29ce4e3435292882775bed510af9e14d9448c966e94083b2ead77b805cdf4a535dc9ab44d65fd8397d5b3009e456749a6f12117dadb7c2bb810f78a3938fc04c0e768c7754e310101aa44d8ab51ca7827f
+Entropy.14 = c8869f2a50994f431a33aec8104be8919f25ede2f2ce6070233466da3fb544dd
+Nonce.14 = 24a159105473052f65dda3c754e1d99f
+EntropyPredictionResistanceA.14 = 523aa2f18ed872566ae4fa9061a83dbe1e213fe141e84d835d38267f435161e5
+EntropyPredictionResistanceB.14 = 101ca246a89f650b9f6e3282a908d51742e4f2b9a0fa987e9c8f8be89f3d7ce7
+Output.14 = 2a34c78d5ebc24dfb34250a1a2601f044e15969ea37e791110261f86d1c7e8c60b60cb4515649cb277526d4cca4bc6d31f14b42dc4da15044deb36cd9040a73e5f32806270cd503af2c7a6af85d2c9b91480df5677d9c2da368621dc7dbab8ca1ec634246fd55120058a7c0e16dc934e69fbe890a16a2b759b9d10c23fb57a188d906585c87c26a70cfa69aa7609c3a4226494b9498e6bafe0632ce06a82ee60b7bf275edc4ac862e3a2bc7683cd2258663d1cf2d0fa95ca75ee9dd85bcd42a0
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = a6ecd703f4dd3b2d9ada966f8175f8c04731eb3a5bf5c77b00630b51e5da0446
+Nonce.0 = c2b4f33530cdbbe5185232e2e87e6c99
+AdditionalInputA.0 = a58887e0c09e210d47b6061260b4504fd60d2c0931178deb66947fb08f8928a0
+EntropyPredictionResistanceA.0 = 96b11afea3e3a94ee25ed2a229f66f60620e88c7b2d038b51228df6d362b72db
+AdditionalInputB.0 = edf4815dd35d959439bb72cb7281a44ac56102be903d2d877d20adf83e8aa9e6
+EntropyPredictionResistanceB.0 = 7fd6dc32a4b4c3d5874e0f7b757a06642fb1397ada18a45b867172b484ba2607
+Output.0 = 52164f572766d9c75af33fffbddafd440913265c33ec55ad5160fab48f383c31ff3407731c6c227f67cb3ab36f5c6302de5182059e0efcae07e3d1db8a7afb8c2c3936fd71cc99131e0ebc9300ad7184c0d8433bd8c73fd21efe66c9664662b25434cdc9498b0014d28b8658b00b07397bca2004206a4eb44aed092e8a9e3a6ea238a5ba38ad94c04d7b77e9a0f4c967e31f1640891754ad6a480772ae6030a4ae1e6066f89282c3f950719e4687113da8eac547ec48763131546a4ac8d9a83b
+Entropy.1 = d6ea38d85b1a7bbe27de49666cd02ad1259e08afd8600aafc27f173c179294f7
+Nonce.1 = 9a7938dc1038b1a17855190a2960306d
+AdditionalInputA.1 = 14eba15e03c8fc2b12f7cf444888f289ec9903ed07cf8ca873d3c38b616c3f65
+EntropyPredictionResistanceA.1 = ae6ceea696ef72edd7599a206679321df34017cf253d7ccc9cffc34dba81e6da
+AdditionalInputB.1 = 4876d534e77f65a32eb86e5abd8ad434c70406541d74a339a2d323e3d11a9eb9
+EntropyPredictionResistanceB.1 = ccf624fd9eb017eaf34126037ff6fcd3256059cfd65109e82f07001e364e1956
+Output.1 = 09bb26742a0e88687c189c0ae63fd567dd355b7eaf87a23b13e99d8a5fb3534b6782830b063c2ac593ba7558fd0ce41508892630b5d4cd43394a35a49ce22165cc33b8d5df18da2cb20924dda501b9a97773909ec447247c0f873a139f3ed1ac3eab8581d0e7ac59b570d2e47cfb86458d478e230de0c7bf944c3ebcf8ae7d3280567288667d55bac33c60b4ce54f4eaf507e00ab02726d9b0c3586512fed7db27b232793e478e37a065e1ddc06e30de341217a14362f060fe4f3abe492a4fca
+Entropy.2 = 8e9917943ee19639f191b635a6ebdcefc3dc32cc15016dd81d7ec665711cf177
+Nonce.2 = 10971033e67d90aa6d1e94529c4276e6
+AdditionalInputA.2 = f23ad5ef6f89225acf9370b6f8af69a1686179de49a1794da2027121e143f249
+EntropyPredictionResistanceA.2 = ac7496098777ab6307659566784ae62cdbe4007f2b10de5c306036a16107f987
+AdditionalInputB.2 = 13fbeec81b751904c529160fba5e4d25300dec09bcd03462e53a66f8a26828f5
+EntropyPredictionResistanceB.2 = 0cbb590a0244fa57d143aa308e5c1fc27d540f815f60b1c4d4e760c25daddf18
+Output.2 = 07379bbe26fc6d0267bed1e1784b37123e55eb5e8cb87f4858ecb4597e133f506593bef5958074403673f36d0e6e35c87797cb892260d58d50cdc6f257c46a45e3b989e4c66e0558c4cd3196aa17349aea56b309597efc2549920d59d627aebba7566440e4f8422cfe43e5bce3307e64a52fb706ecfaddcf5fa09b57d88e72e9b82810b3015d794ea5eedec7e1e60d5cd3f0322853a6de79332f30bb6821a4d4d0fe7782c08b390ec8d329077eee8ee35c0e9c042705698eca1c3141366024fd
+Entropy.3 = b83ea71a269a0dcab5d858e68dd95a94559863e53c3c82500812f321af4a0570
+Nonce.3 = 8a938c46ceb2d7e9b49fb8da5b2c2f13
+AdditionalInputA.3 = c442ee7e98408f4befdbb1f2d73705b1ca210d3751d0f0d07229720914dc1717
+EntropyPredictionResistanceA.3 = b92abc94d4e744b8f84fc4de0fb368ce1ef5a38ae2a08440851fd85285faf117
+AdditionalInputB.3 = 93c6e61a61e10ded80928c2759afc2f7295260c8595a1cedfe2f187d0f0afa0c
+EntropyPredictionResistanceB.3 = 12e41767725aa0ca3198fcd5f71f4d6981fb4549389f1ee06982fe5d54ead44e
+Output.3 = 25c61adb26c7d15ec1fde6f7debc1f35ee4ec5ed56f91686c3fe8d26db3a64d05b4942a8e6a85b18930db2bb1c9871c7be97020f3eb54e60cc03cf23c11195ccc60f328038fa727c27d4ccf4a8e901d32ccdbb8dd9b3a82ccae1d87827eed6dbfaefd5d4039960a71d4dd4239109539f1dcfbc6cbad502d22acae8b818936f549b8ad3f583cc28cbab448d6a7b1dc8e47ac35d7c84da180d64aff9ea4f3a22a672ea6aaeabb879350b676d3b7f201631cf5bb0421fd1b2c9cb1a08f36d402ab7
+Entropy.4 = 4efa4288fe54957c52027335777ebaa7d9c071f15bd091440f396712163521d9
+Nonce.4 = c93366f461c8a7693fcde2b8a434cf0f
+AdditionalInputA.4 = a258a327750e5e24c1d8c2ff616cc634885d7605169affef9d1a9e99e2028fd4
+EntropyPredictionResistanceA.4 = 2ed73352b9b3aae31e5677305fa2a7a82da94390c567b944c2c0a549df72a781
+AdditionalInputB.4 = 084ecae64412f8859761d78e5d3373eab4f0b482a945f608e04811dd109deeb8
+EntropyPredictionResistanceB.4 = 1547c9095c602c2238e83c07f50b066a5f59e384c73ed1fcb7d6492de4331efe
+Output.4 = 03c705a05fa27304ab4f57d49747cbb392f82cb8ef24af4904cc3c124326488b3d5e88a316ece10c774f2911fa90ca15648813ff950d0d030e10dd1e6294e7ffe605f6153afb4961caa3569c1e579010ee1386a6a862ed71e3d297c1a804e51f1a6d37ac99985c7d53c2c24446d86dcc3f0d6676d2327ab95fd1401b2077de4128e6d1c1a6cbe95bc43d4876357717bae92749bc54a0a4e49f11fdf081bf5a0285d94a6caa874ee9364c2de17543b59b1e49403fcb87494004a40a3f8e95085f
+Entropy.5 = 0688214ea9f1449f693cf9c43213f1357585bd855b3dfcfe6c219b185ed9177f
+Nonce.5 = 8f7f556d263d1dab9fdbf87aba8773a6
+AdditionalInputA.5 = bc92c3137211e7da35d90eefd4fecfe0bda8d1c40cb4519caf2b73b1ee6011f0
+EntropyPredictionResistanceA.5 = 4fdf476cd85e3e12aedc1efcd446ec94329e6480b6610f0d979c134f9662ec3d
+AdditionalInputB.5 = 64b318ca4030cd0bc05f4ab6fc5ea3bb718a33641b7f69b75dcfcb0e6566a04b
+EntropyPredictionResistanceB.5 = 9c7784ae26a15c0b27b2dff493b6d47d8156ffd525d249edca2d5f4162805994
+Output.5 = cb4800c7b874ffb4a44216f69e844ebacc708db8f58df87a19e9a2a5fdb63e66d9f1b160df777c8ea426341aabf2b7f58aaa543d015ad7f59e27cd59187cd26e09a3730ba2918f1da964427a8ffb0cd025e733a949600c96d7b9b2152ccd8f7b9b5396d5f85428659cbe74f56285baaebc74994974c1daf7e9e50db0722424a83c283b7dad881d848d1a66f9f8bdde27e15bffafcbd641bf52d92e8221296d785dc4a4e58b347850019f3922f568a5bda7d295ddb4e0ae04e64ac8045edfbcf3
+Entropy.6 = ee18374780f29f2168d50b3fac045dcdadcb6c44a657a8b560949e48c8a48d84
+Nonce.6 = cb16b910fd98c0e5e8a1d1d99fefbc04
+AdditionalInputA.6 = c3c9a7dd5c360e391bb8b171ab871633e5c4ce74f3f33418ee7e6266fd7e1f79
+EntropyPredictionResistanceA.6 = 79670a3483fbe2ec69aec2af94baa005aec1f62133963371844e64fcd12410ba
+AdditionalInputB.6 = 07e22fdb9a82cbab9d3d584be47bc4cc0fe4f6da470b40805449da1268ca4db5
+EntropyPredictionResistanceB.6 = b40903a55cc52bf253319361c4597897842f332b7759227edf9c2506ef0290a2
+Output.6 = f8f2d706a5b708599e06a59a6e20d3ffbe90aa52a6c29d5704bec9f36d0f783b016243d80dd57d036e9ce030f91487af07118d94d2c83700028e5bc706407fe1ab5e16bf16091dd535c75fd210e4a51bef9ac4782c2aab568601034337d5b32fe1efb4ea029a2a13eba844ba8079b592250e5a3abefab5865285c5980a936d86a3efd7a240460ed45418e000b6e82969f20dcc187a340812d6ee6a3b39cd6a590922c05becb19fa7b4a68ba4a00ccdb5d643ce566a2734778daf5577f68964b5
+Entropy.7 = 289a3c065313924c362c2b0957ca9d003da3430d251422062bb6a91bab7f83ba
+Nonce.7 = 5b3f8dc4954da5f259f241b056f44c36
+AdditionalInputA.7 = ac379714e55c7ddf88eafff50f40566553f8759c1f692cab886512470079b9c9
+EntropyPredictionResistanceA.7 = 5fb2117f528cadb55a92a59ecb7d831ddb8d9e9c3f68087c23b590b0fa7d71d5
+AdditionalInputB.7 = 29ae2ff47488216da57cf84eebf0c90112b9fc0b1abb66411146326b25a39c43
+EntropyPredictionResistanceB.7 = 90696c2ef8c36da541c9b99747912373f64f6b47ef2007d582e63e4cdf35e747
+Output.7 = ae7860420b2e14b5ae0bb6fca11bf3838edb4a81d3323162707d2bcef9aa6e2205e36d553b8153020f70089007816fecf37454a60294f8e3d9b14fb137659569c50ff579d2cc7d73347acf210d12e9831e74b224ec7ab055b428a79b1a3c53c881e0dd657bae8203a890e78bc2d0faf28a8c4298177e76e6bdda15100682d946c449cc8b9dc787aca6b92cf99a672f22dd22e4add9a771d88fce28c3acea0bae3ce94c7b1606f4a749983a3a065bf75984a96c41404d0ff7179a59cb101b91f5
+Entropy.8 = 570cb22c0ae9b458654e309db476e5248abddf2c3bcb897ad55076d7da75cdf5
+Nonce.8 = c5e6fceab6f922e7b0878296045167dc
+AdditionalInputA.8 = f83a9c92c48c6076938cfb71d422bd5a232c4748dabaaf433d6161075d65badd
+EntropyPredictionResistanceA.8 = d943b9e7bb56ffb2cd4fa4fe3bc876ab9220cfafbb96bf4cc85c7b7251fa7233
+AdditionalInputB.8 = f5e1fd71d35fe12e2bad0f42b0021174daa5feb9203ebadb5c0b95297b0132d2
+EntropyPredictionResistanceB.8 = a5fd7687f501366ada90b88e0a40913862daadc40fb68b1ce53cd1301233146d
+Output.8 = 1696c7f621a0c0ec57735cea3e6cef0d02f87b08b05b3b29d509aeadcc3f3cc030b177f919d97cbfd513f1e112cebce2da8adee4f0e6f2ed26f7fbd8a4d3e7085e68f77b506a98d6baf17cde56057a102cfee4696ea9f9067dbb5cd6260ad3bbcd6bfe5454664aa22a5eca166ce07e1a65b9a3460b41f0ce87153ae4a580ee6a1dda6d4e073a402055ce80402e072a1718139f5fcc803e7c0130f610c5489fb417c26b6c23c0ca95695022afdfc298c8ce19324b16a4bae0dd8f9721880362c5
+Entropy.9 = 2287a9876a9f6780a1a884bb6bf558301c4520c949db8ff5ebb13611ba819379
+Nonce.9 = 58068bea047deab90ac3153c3239d262
+AdditionalInputA.9 = 3a5e4a580bcaa9820b143e57bc880772eb8dba95c142a42f390157519ebb880e
+EntropyPredictionResistanceA.9 = ca7ad1e04be50d6d76325e6d8f0ae839c1f1d8f2f4be400a3f3e8f3283e00938
+AdditionalInputB.9 = 17af6303bbf396c4ad71e3503cc0f7e95a628c713f896a964ee262b9abc9df3a
+EntropyPredictionResistanceB.9 = 3443d7d6798b0d3cbb81bf64c2984e9608daf4f53fc5df2c8344daa72a3286db
+Output.9 = ee3c95b2394b3f12cb2d79e7fff0014b7e36e21223ccdf1db4f6bbb0c1de02f633a34b021454d456363c2a19190ddf1ad63d08a15b988c9e3980b04d19df8883fde262f719d7e1a38fc12d86b8f55a3e3dc728ad665e38b8168ceb93f2d18e92a0380cd8b1853ef2d897f441222d48d40338e9af921e5803b0dcc3019b839d53e6b8a3781ba27c07dd6e62fff2752c608c5314c6bdd5897322bd60cb7ff68d4242d463707e4461867a7f8d6accbc1b7fd4d0edf313af704fdd55f0c6a3b658e1
+Entropy.10 = eb7a3f262bb4eef75374129440dc95a92fcb82fd5cdf264838c530d7614b7e7f
+Nonce.10 = d8c8e37dac2cea71982a513b1c87514c
+AdditionalInputA.10 = 4050319ae830207f6c3c36f281b10dd2f9f0876fc80f96c35f775991778f7cf5
+EntropyPredictionResistanceA.10 = db6610b6ed8e88dc4268a1f85e9464c17813609e815a1e198f5dc94dd2b501e4
+AdditionalInputB.10 = 7b0d273a50283ee9a87628aa17bfb6b54bcd5dc4cdea2539f00b71ba3f14cefc
+EntropyPredictionResistanceB.10 = f1efb0ee2d866d03f4675bc646851a7fca6a79c135abfb698df44d32f31ed83e
+Output.10 = 4953b6ff9e497440fffe39df5253ac45800d07f3ed69a70dce7e97ff525e211feee221d7c38c151563ba438376f528c51200632713e8663e6ccc0b111258cff62cd7a68874e0371f00b040dc0d86a5dd84103a4ceb1c0a92effdcb2c41c6a45cfd69e888ea4ff2811ecb188e3591e44be2d834a0d703b10ed58dbdf54a5a5c932c3cb25a9743f7ba29562ddd7713361b4cfb87c29246ff5598640e36b11c082c9b6b1961218f0f59fb51cfe9aa624566e75d19d7ad9301689b1fac492d1d0ea8
+Entropy.11 = 17fee375ca7901eb5decfe81d756183f85f906de82a847a7f5272acccceb4a32
+Nonce.11 = 0f79871c0213215efe7c84322e7f417f
+AdditionalInputA.11 = b85c3e15bfafca26796f6715c52371778f360197d5cd7b9e711b326317a37016
+EntropyPredictionResistanceA.11 = 1a7aea325ccab47c58fd12ba9dc351e93fc67422e5bf157cdf17675b16217536
+AdditionalInputB.11 = 3c709cb6601f1a0675991bc846cc9d8c20c2ad791b6ab9cb4ac2a4bed4f79b4a
+EntropyPredictionResistanceB.11 = 25e888498a2c8bbb89807b6ee3197fa1874d50993367545443232cbec35b9715
+Output.11 = bc8db6dad22b4124235d6298e65be187e947df2dfcf4643488d699db6e81312251fbbc70a2945ad78e30f538cfae138a6b461bc0a9e3d005119fa10579f2bcc7bbf08c99ba7f480083752bf29b65886b94b5bf30db214828fb150a92c5303ab8903208de62afc71ef65fd8d8d724dddd76d753421119d191efc5ec928293113aa3be0e892d5954f5235fb8994d6ff5a077bee1b8fb206576e5df05f9635e62060b8608fa3d76059d044904894a1239711543f52be14c40fd927a12ec51020ff1
+Entropy.12 = 34b5b95cdd17e9d8b9a72ba2b0d4ebe29c6399cd0700b61b7c444cc329c0e038
+Nonce.12 = de52a211ff62f4e379623f1d68e2bfe5
+AdditionalInputA.12 = 6f139972f107bdc333304782c55166e6feea0582ea5f055e0c1b7386498d2822
+EntropyPredictionResistanceA.12 = d21fe839eb1bf3a561fa5df37bff1c8fcf162969e2b49457f7eb7b796203ff25
+AdditionalInputB.12 = 04b58874bfd9e8d05d516fca043050104559b13397ad62da29014715d23305b9
+EntropyPredictionResistanceB.12 = 9222298464df1522aa5c1a840c2f5ca9b9c0cbc8fb8b00218c7b3c1df2551cbd
+Output.12 = c0db6ce3e3ff00dced7aa8adc0d7e61a3d37d8c4ade7ebd6723ba36050f85708fd0845dbc42d16cbe26f1e869ab66e2590c5f6195ce2bb21f58895191aae041269a391a9c0e1edbf35030750a3089d0ea5bd8f55fa42f5279a039406178996c5afdceb11c41dc2cb6a5d1902b7cb4375e953473304d1760dae4ee5c64058bd2ec1d46583f914e002623efb11a4239bb8b30e444efc2e31e21c4c9ef28d9f3dbabf2ccd344272c40d5242c39d0681e7dced2d135c50a5f8cb23709efbbcc20354
+Entropy.13 = 75fd5b4ffe989cffec423a5711b9c30b38c8af84ccff9d192b1d993ff45940f8
+Nonce.13 = f25bd5c37296e3d627e74d25d2ec118c
+AdditionalInputA.13 = 89f1803ee2f433d7d21300dc4610219a9561351be36a34dd8766445057b9a969
+EntropyPredictionResistanceA.13 = 3acf0486233b50d84ee22c6ae6ac19e3660769c6c8addf06dafb155abdbaf459
+AdditionalInputB.13 = 858b93a4bb10c106d27b627970f304a54ab3cd72ca67490af7960459e06752ed
+EntropyPredictionResistanceB.13 = 666ff5d16f6b0b8a0291a904f2409c4577c434de931e91d9228521680105c670
+Output.13 = 4003fe42d28d994c9b146c7e77aac637c8b4d6ca52512015af378fad2ba5de60f3173778cffb0178c23cce6fdecc75bf1902d4db63f9a722eec86e0960efd0c63bca0a3812280d42066075153d60ba27412804b61f3e16dee0fcb10272e844868b22b683ec0b4cb7462216705c7515685d7c5ecda36eacc662614bb03907ed1f6950724dbdfc7b84ec58f0864641f6fd0b9dbf764971527ef813b00f6df721df78bc889c649a4ba8c79925cb68d9279ebcdf12273ada652f6193fa7c884e8d05
+Entropy.14 = e6713bc7d6e4939175deb6816f1d24d73a2a9761af4654205c3f80ad2047f4e5
+Nonce.14 = 80cb1668c81efdff8fdb09c0ec95d915
+AdditionalInputA.14 = 50c5b0f1a89baa8c82fe77e2d3d650d90b21c79905dc2d302b00842ef9e73555
+EntropyPredictionResistanceA.14 = 350b381d8f3a1ed189e8e87eaee3e39e7d033796ae6a9d9b9e5370b7f2a6bb62
+AdditionalInputB.14 = af0921fd29ae0315837039a4ecd285de2d6e04f97bd6b18a480ff31c3e59b458
+EntropyPredictionResistanceB.14 = 028ae7d410cadffbb1a8dd1a26649c51abda3729d64ef24049157b8250c532fa
+Output.14 = c4552eee3b4b58c5ac306a607e3047bedb0fc06f921f28f859324ffae46d95b5a235d32dbf68b6093498a02270ac6988c13467481553996e6ad080b5b7dee800807e9e8776d0f338fd2dcfa74716a9663c3984fff72167afdc5a5292a85663d1b243b96e7ea070021fce1f269de1f5ccb60c8f3755a7b7c9f36dd5fa5894ccb3838d568507a9bcc418a82eed820b6c35ee66c40ad9bc718ef73fd7f8c956cbcbc173b9ac0d7f3f40ff37da2d4572a8901d84c216e1ef2b90bd531aa9238af339
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = da8a686ab3e0b528f3f640364807f4afbb8d40b81705504d7dfea8a6223049b8
+Nonce.0 = f621b6c7f32015a93b8984d3464bc194
+PersonalisationString.0 = b41c09ff272bbfdee24b1b6cc47b8f783636de9b48a60eb09c945bf694e7720a
+EntropyPredictionResistanceA.0 = 38823dc01a6a6c3f2dd95f6286eea6a20a56d86830919dbcfd1249b3ac90eef9
+EntropyPredictionResistanceB.0 = 57fd7898436ec6a8abd50d4b116c237175497267903829643d3366131f89ccee
+Output.0 = 71d47b6a292fe7a1db598fcd511434d82cbe59cb0f0310737dd0c095270dfe85450cda8f3bc4acf88d2c2a0af7853d48e9872d085041206f573bdcebf77a4cc8e76c748ed962fa2919540325bc82e46f7de542eb7ab4ff3d8bc073bc395d44add12bf3cf0cc1e1fa401984812bf0bf9b7a88da50a3bac7c5d83d9d523e206ae35162fbf55c637b1ba67e7f0b29e8039b26890d9c92302a1915d998b195fd4e11517da3630b5d91a549c195e958e38a06c589ef93368a1011ebe4aacc55fff418
+Entropy.1 = 14b6bb78be7227f6010d64fea9c1cd95cb125019c935600d265c78bd11864412
+Nonce.1 = e00dd77a06e4835d8daae8ed09fb49be
+PersonalisationString.1 = 90bef03ebb0d4fdf4215ff50ff8d6ca4d439eee8c28ab3df7161739e74c41a28
+EntropyPredictionResistanceA.1 = 248b56cc24d180433403319c592f2ac5ef14d9bdf707b015626a287b1630d146
+EntropyPredictionResistanceB.1 = 17e6d44addcc4690138388e3e53b0aa0a7c4d0982c61430aa324af9c812a10db
+Output.1 = f11232ecb193680123f3674bfad2cba2af54a8ef8ac9cdc701b9ccd87300d8320660c114d741b975f003e1c265998999173f8cc3d2c6dd0fffd3e82d4477129620406558265763c2f47838c660d032d914c39fe9bf0cbcfc376e2cf0eac819a694cc31cdcdabcc07ffb521839517fc76aa1163bd002a4c7e79b40628533c325b170bd468e3cf7712ab82a15e47acdcca1da69ff2b8df67b77bc06c771e68652b1592f3b3ced536b56e967a636a5613f616acc572c9c9d68a0f600cdfe3b45d73
+Entropy.2 = a9990abd25d7756057e2afb056a4ab99f71fd35b80fe55389d0c2b7edb91d657
+Nonce.2 = b57ae21b0066ee4f6ac77728f78238b3
+PersonalisationString.2 = f032f10e67919350e545ff6ea2333c1ed2ba6481a6150c268bf59027ac7188f8
+EntropyPredictionResistanceA.2 = b3fe068ae969c0eec5a441686f7ba044aa99ce82c3245ffca91a8f9ce42377e8
+EntropyPredictionResistanceB.2 = 0d405d5e87136028b165ab32983a861d62592249140863cbcf653b135c5db328
+Output.2 = 3bd39b8b6f76f10a031b31a899f01e1f9ab61c42bd1cf8504e9b87fb10390cd8aace866752728962df06d182f340b9b9801018c9852dfb8fed804abf7516164692389c6c9b4420fdab8ba0343da432134582565bdb7673560b36816697bad91588e08b14ee40ba1d4ce35c8e177f97ac7226f778cee1064155d9888ffccdfe52dd51eef5080e723a9c825d113e694c4361bad4fdb6722805e76af9076b11557033c491eee4e3c26e6876bf08aa6e782a7c190b3ac7601d7136b0682028584c38
+Entropy.3 = 7c2dc1877de283369295fb124172b8e9a4020f5c9d665e22d7269d0e78bba096
+Nonce.3 = 7c4519913e39c65253919f66fdaccbc8
+PersonalisationString.3 = a61eae99cdcdc4bd2bce763736d01ff7fc00d5ec8ec4cbe021de88e1d7cdf3b9
+EntropyPredictionResistanceA.3 = 8debe195608e6e6834b6ea0ddf5efe8a41bb7e234a7cfcb309016135d026467d
+EntropyPredictionResistanceB.3 = 0b5e76f56da49d866017df5e0665efe18d6a84b5fcc7d76266a93afe23e905d5
+Output.3 = 6469b3f65c30f81973382041164411e53e11335e71ed2966db0b583dab0386498b2013b3160327e7828836df5091410987e7cff2c744e70ffa98f6cd5248cdf892b21db606b25915900d80bb8dd0aae35a8b70c54bfda6196d4308b99fbdfe56a4926b5e3c107f1e4681bb97aad3c6c4e4ca8c459756f369172495948aa54eb01ee6a0100ea6a19a208fbcde8ab84f0b7aca8743b7d9acba2164e2dc4479b7cc4c079c73baf05fe6c07820065c73317562ecfba309d4ee45d4993df3295a4e21
+Entropy.4 = dd6577aafd2b52f0f9ae836ab2b60e34d75405f00288bf5bdab424b17bc4371f
+Nonce.4 = 8bbcfa111c10ea96abe5b9c478707453
+PersonalisationString.4 = 0f59e9212d8698f2640153f72fbf3cd47ca70b2b8e439a9195a093a8a56472b3
+EntropyPredictionResistanceA.4 = 4d29d5108d0e8ec8e52a08de8e107d92bfe491979bbc977b210d03a6079cc943
+EntropyPredictionResistanceB.4 = c185d4791fd4cb1475ed493123c54a7556602e78f90f18cde764fd20ea9cc9b2
+Output.4 = 174af758ab2fddd81e2484dbbf8da07278da2053f0417ada49e9ff3b804f1022fcd49100314be72eaaf6676b95f80a8ffc1ff75330fa135be4420c433c09d73782c3a7c5ad1b268d302ad7a15a0677043b7460d07707f1a805b0f8f33c746bfbc96a6c54ec5d93f0698cc6a36d05c898eff19d69ec8434a70618e05216a0a9a4a8cfdfe605aa1f8ebe69c7ed7e655c3c55d3afd5cb7b4f6c0d8bbe20654ea15b948cb14b25a976a5eeb2be49c171ef288f98d633ebcce59891b4e3cbb0eaa8c2
+Entropy.5 = 3faa97c352835deb854eb5bd904fbada7374580f2e965e86ad68cf7d049206c2
+Nonce.5 = 70e3a35c91dc5ebdbe3db29f5efcd068
+PersonalisationString.5 = e1a96898541e6af137df17e6c3f0e672a97ae573e78eb5a36d93b33f3b30c020
+EntropyPredictionResistanceA.5 = b8306f6fb0b3020a2a445559e20638004f22e2c4db5cded5b1c090df0c6b59c2
+EntropyPredictionResistanceB.5 = 231a5ea846e6a3af524b2bf0b312d25daf7129586d0417a6143d49b53eaa07ca
+Output.5 = f3fc456811a6702ee4e3fdddb061ef70cb21b5fe8cd57761e911f31c355ef098230de7ea2685b630b89ea2d090684c4e7987c662fc5f304049551900e57857a412f861a016d0c2807dea19e7d0c836ba63e8a83d525741225984e39364a712802cb99098d5758a1ecfa5097e78e1737af1de5a5344ce078a9833ce468466dbdad26b509ae09a25e58c79033b8c3aa73b94265f5f944aba323e2573443d0f36dd1ff4e71cc784e098fc70bdba1c9bf2449c9170cdc21b100a3eba8daab9d24833
+Entropy.6 = 4a88bee26c545f02d20fee1cc19246815fa2a23236de320156ad89f2e6ecbd55
+Nonce.6 = 56ee25e0e03338e6e8321f5af83dc878
+PersonalisationString.6 = 4fe12fefdbd8c3581f17109aee3ff06f659ef1b5a0e6542ff0a38666046728b5
+EntropyPredictionResistanceA.6 = 155121fc961c8f37b23c69fe0bcae7b1824f80dad7bed36ca6c51ccbcf7c4ece
+EntropyPredictionResistanceB.6 = 69658e43a5b17914c170c8904ab4fb776de84e43c95d508bf239d8dd663ecf7e
+Output.6 = afa79d4d1ab485f0c0edc5d403810de95e82f7b70ef5dd764e273d7036e719cd3b12579c24336f09c83172f0d6aafe2bbeb6f252e7a1be0b225d408220fdc15fe2819f76cb88715940c2c6d2ba0e4bca4c1f71f11d6bc44b9470501af52583e22fd3af3a556b06983fbbd60f68422a284d03a9c7f44d5bcc2b04f1e8bb0bfe8378735558097c82100ab7e219fed517cc07e0ca5ce2f564f4ca2b4de1af98ee0457b9a90bb3dba606847a29420bad012a5d1dcc233a5cd65af147e04a80a283b5
+Entropy.7 = 1afc2b8d1eddec312308b535bf303b5ba29f0100b1828e64085a61a40287cafc
+Nonce.7 = e69b169e4a6b77d2c3d14233c2f77d99
+PersonalisationString.7 = b1801e6d9c4a14a2cc0f4c7f41da0218f1a2344b830efddbebc58d445017aa56
+EntropyPredictionResistanceA.7 = a7beba1b09c96d786ab8b00f319d82c7ac9c6892211c3b7d5c141e82dce64d2e
+EntropyPredictionResistanceB.7 = 204589b39b783e1531e552b51dde322a9be2948836d3df573ebd2f77ac3babbf
+Output.7 = 0503d61ff16c8fa8374dd7c44e0e3838850784a1c46a63ac1c9f1e9eec5448315ce2e1c0e935108467f47bb12f5f36df7c7144c976180cf783642b121f6928a43dcd07af838902683aaab96962707bf858ea82c6f4dfaa878ef629cfa773ea4f48f95babe0f06eee12d0552d2a46fe55f8cffc0c86bda48c004fdb33957bbc3925f830f8bce983206364533dd667530dce3df7b741f24557f8e60898e33eba09d91f1604a7e335660e91d5d1adf6cca2e4c31edb2b9cbbaaa2fe78d41f7fba14
+Entropy.8 = f04c68910f8d50dacc3880d64bf9bf2e54c9860819bdd951ca49185a3c11a3ea
+Nonce.8 = 8852fbaa5aeaca49050c493322f57a19
+PersonalisationString.8 = 53b2ba333947b6fbe52a725c9d92ddd6c72ac86795c0eea4821aa7764dcda7ea
+EntropyPredictionResistanceA.8 = 41ec6081c6b2cb06279863d39152aa59d4f1c66847abb0e290fcc8af2097cfde
+EntropyPredictionResistanceB.8 = 78465aa0ebb92783e6941b9986568d9f788ecea42ed1ddc7aac91edb67b5e48e
+Output.8 = e43cc6f78283978a51e38d58965a729570564f446cd1bad0f2ac1af3a77a460f0e908c5d6702039de6e5b3b1a93a1a1f5ba8dab2bf9399a557dbb57f464cda848e31fcec9bd31b7c2c8a79efe266e55e8edb36882cf6ef6e666ccc0d0290aecf07ac6ba06ec799c359ac9371e8fc8ebfaa15ef758789b011c89abd178b7ec551e8218c63f59b38107cb672d23f55c124e56a1e876e1661f9c49be6b42ec2739dc15a84f5eceb188aea8efd93710a61d8488dfad63f6c0d15877bf1980562e1e7
+Entropy.9 = 23dd20377589a8ea64700b87d59fc2d7cf096e0eba148db3cf60dc81dfcdc31e
+Nonce.9 = 34ba77b85e236bd81d05eda2bfd7917b
+PersonalisationString.9 = 4f311e6ef7d071f06b4b3bfff622dffa3e856e10747b575e9930df70c9de72a8
+EntropyPredictionResistanceA.9 = 00c441b5e8770b3e82cf3ad67319fb00ac1f2f0c5afc3a5d8ddf60abdff7ccc2
+EntropyPredictionResistanceB.9 = c68803f1407f0f46ad0d90ae9bd44bfb026a440477ec1c6bcf26eec5c60f6ae8
+Output.9 = c0d0e109b22afdbccd1ea565a85b4ac6c54490234936932155ad6837a998f1b63b63ff8eca4dfac4251aa981d1b3b5a89470db02d216643cf37013676364ad11765d6259cca281d8f37eed67983258fc99402174438ef83bbb51cb9a373388b31f3098a280f1fa4c479d8db641fc7c91030b365d5a10a5ebfd99598cde39c874f9263be3c5b20abd68d13e8e66dc881a9daf181c65c2bedf3f29e4226b9ed6a2b2dd112d8cd6bedd8916a1c67ccfee6f52d81b6d1d1bcc1f88430f20caa8d25f
+Entropy.10 = 43afed447e8062bba0406f6cd0832d94182286aba3b122c8cb5cf346ee511cf3
+Nonce.10 = 95504f532b93ecbe0bb4341bd4363875
+PersonalisationString.10 = 9de07e9690e93aca7cc4ad44c371b9b53fde75f790b2676777c71eaa9cb596b0
+EntropyPredictionResistanceA.10 = d2ae379ad8cc60a70055343093d4898a8b0214fedd3d93f4813d1f7ebd246515
+EntropyPredictionResistanceB.10 = ac400de0b1e4cd5f4ab8c2606ea0eacb44687ca99db39d5477bb39e28b4db020
+Output.10 = 66c69e73b323d438304e4bdf9bbb7cd29e74adb3c9002721c868218a4a06f2af76d7b95001651a4eec694432cd0451c0d9d0820d2c4a729c9556ce2e44fd982a7b2bdc9be43cfe182e404d7161e32d7211b273801a40df0b6f07b8232ce26bd8da8d59383ac6843ebef60faadae34457b9ea6388465302c39ba08f543f3e9f0c43da45a3948e0514eb0cfd046dc1479ee3bc01a1db6abfcd67a6611480f1d426a2e821b5c0e269c9c97af619e5461115cfd126ba71e139ea85b58c428c9a77bf
+Entropy.11 = 1601a770fd61c42b94888f0b7aff6c5d203d5ce7ba2a7721c809c9e327958283
+Nonce.11 = 3e5fdc602dab0d0c8eb9abb7c79bd01f
+PersonalisationString.11 = f4160b0bf720246e348ddb6f95017ee39cacf8646917e166b0a00792aef19c61
+EntropyPredictionResistanceA.11 = 6efbc82d791a125fd19c56989b5fa5c0f847593d97fdd897124e0a3dc12b6a2e
+EntropyPredictionResistanceB.11 = 1cab95ab44d12a9766225faed8be2b3709c418acb7dce8d33204d080484bbccd
+Output.11 = 5a03202b065f3510d120064f828f082cc2a777cd39765315f7a1ec4e601b947cca3de0bdbd2c0e24dd962d7f9d7f044b7e1001664aaebbdd6224f302c8d03cb4482057900bc99cb80fec50c1aff6d02e7a7210bc070fbafb9501fb93035a4697d2f49335c350cde8bd9f1283549e4f6460090454d94fa7b476e33ff0743f41e72ddbe62b84aa64f80a00fbb07eca93424c1ca4e958bfc8ea75a20dc4fbd3b3e9938f930a3065a8734bebcd6ad715e7ed7be4245a49b930055c92c10d54044436
+Entropy.12 = 47e918bdb143ff98988ddeca5bda36c585a11af17362cf4933b1c2183c4447fb
+Nonce.12 = a1eea1f7d9ccf7c735eff5c3541e4a95
+PersonalisationString.12 = 4c7f9a08908f8ab1a6a4e55efa4815ec245cf2e858cb79faef06f6b6c7427bc5
+EntropyPredictionResistanceA.12 = d0c2faa3024627a712b71bc096eb622e6327f2332b52d2d2d6e95251cf75fd3f
+EntropyPredictionResistanceB.12 = 5a26f57129a1a6277bac3d152ee43e07c572690faa0e870a86b6c52b8ecddb4e
+Output.12 = ff1b122e4c1002f4132f3b4f0aa51b9ef433ac7f83abf9bb75c02dad5023fe9a0bf58cb81e8242efe6ab309dd9c4ee7f06774c82c19c46f71d98b8801a9bc0a372ae95b537d9d1de3147c0b4b558dd6f25ed5a8870f1ce4353bd7226aa6ca3ca39ae59bef53664bd31486f33c922ebb1c95c6d87202cd9201a9822e4ecad632dcc426426882c95bcc8863080f31233f4b4ef364d5116affffa7a642326dc8322174bdd2508110cf7a4227e9ec7467d69bddfb4b3e5fefa6ab92d194c98f899a6
+Entropy.13 = 50f75aad6e380e8d317b066178cc895488dd27f082bdde74e4ad220ca9be8405
+Nonce.13 = 7ff780598792632bfdc9d4ec1be3e91c
+PersonalisationString.13 = b7ccd4f4a14807154849ffdd2bdd2675f1da558ecfaa9f083234fe63619ccc78
+EntropyPredictionResistanceA.13 = 3477301f5953e6cc8a95b69ec439336639cde628716c1558fda6cff21a51adba
+EntropyPredictionResistanceB.13 = ca39023c0dc8639725c58f24b40229cc6aab65dc94600b59bfedb7aae2cb3d5c
+Output.13 = 211397b031b0848d9fb2e1ff0a4aa614bee2c0547050ed8316c1201d9b8aaedca9ab50c4c86f8cdc25af6aa0fdcf4063a5e6dacca8f32c9c8e04ab6a1c0854cdd62972e14cd892ca5d4eba5ab53206c026bf30fe1cb44e53f60754117ba51b49f3bd700ede1c9647243a6f7ac65de787c473c14b717d828c5f17262ee8982d4861aa04c5b6eede17403557a33c5fd74cdbc4d54e9770775628aa80fe5dea3fe605713af19dd25b38bd6a5b7484c23a2f41060987edda95327dbb35687350e96b
+Entropy.14 = 47c43f530b074a7207285288dfd6138d54002cca1d475749c6d54c9cb5a98048
+Nonce.14 = dcc283dcdb16716faf0048810308d753
+PersonalisationString.14 = b4c4b1820960d5b730d2863496b5abee58768295a44ed59e3bc0de665f3c8cb3
+EntropyPredictionResistanceA.14 = 0ef1d45b978c565be7e64b9e455e02636ce9d2981bab7ddfe63b02970390cc68
+EntropyPredictionResistanceB.14 = cfe1c350d349c38b6f4568e2f1ca53493be77597271ecedc5ed578abf1f94096
+Output.14 = 49c4c52a81741d2eb583eb6038c1c686b84ec9e8a882d1ef509777a5bb431eb9ae711412afd5ceaeea212c2dbbb17652881b20b2517f1b720eb528274f937b4c41c4991730bbc7979d305859fd1fed523af128347f9fb3e3df22afc4be9f43ab6c5529f720b766cb519700ac83e83668083199f02c5ec80d29621d6c41394a927839bcccd802fc00839923a482ab82061bc96798046c20a11429f266195820862b8e242b083b12567c17e0423d01a7f77f5d4d035eb75c797019d798b54148ec
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 9a8358a17f75e2784e27d42c6c591caab3c010c9e743bc759fe55de4a584d423
+Nonce.0 = 65223e4f3cd23b59b1ed9cb6b5283a41
+PersonalisationString.0 = 92307d1cc5f1a3ae308c17dc9d0ed9557e1dee6d55e770ff7e175c3d157fc2b5
+AdditionalInputA.0 = d752a69af702cba6b361a7abd5c6d0528c11769c79574a1c9ec5a86015515f54
+EntropyPredictionResistanceA.0 = 4d995c603e042804798a716be96a5641631c395c17702ac7c92668dcc4ba0ab9
+AdditionalInputB.0 = 94dd63ef2ec0188bd2d06c64a600cbe583e83ad50de3ee5f9529674eda6abca6
+EntropyPredictionResistanceB.0 = 7a92d0fa9b3b33ce5be5077193eece58c6339aec6ee6329f86f1dedd18a7da29
+Output.0 = 2b8d1305f3afd438783f073031fdc365bd83afed7910c77bef8e6779e966aa20aec04f1693764f209dffec6cabf8b661f56407232d08decfd2fc991328ec1cd6a95506d1b333c43bcd3c1156c2e9e0dcaf5269f2273ac3dd8a89a63303c8a63f80e016a577c0514faf0cdfc77e5ddcbcd8cf228db2da4e2ff3804b530bd2a8d0f4ce348b356618e51d07f06c97b9e4aff1ad14ccb905b0c168289c288edb3f7d056db0eb8d21c5352871e34aee0e261eb75db52c0e0edd3f9e91cc30d68f9a49
+Entropy.1 = 274a0b11e6e8177460c7ea05c8c40534b277c2191a11b72c09f32f954f315780
+Nonce.1 = a566b2db47f8cc448bf763d9083acdf1
+PersonalisationString.1 = d07546f082304f394fc8b12c79a5554c1b8701ca80bcdd42f6514fd5ecfd336a
+AdditionalInputA.1 = b7e2612b64e4ff214e5a4d70605ba694c7f40873d19edf53c6cd5cbb58e7f592
+EntropyPredictionResistanceA.1 = 9abbd70499d1163bd9f80d905dccf211fc73621710d07ebb57d756f594662bf7
+AdditionalInputB.1 = 88bddc1cd462795b2ea4d824250da0877fd00fb6ecb8575ab81d81d23a9d946a
+EntropyPredictionResistanceB.1 = 155d7b3c81c52c7ee9eca331acc2629c4e65b9dcc73fffe79e36112ef59d5d82
+Output.1 = e33928b7df238c1f9a3b8f4a7e300a603d8eca1026a805382c1bf7f2c130c376a86724458f7b9dfa7f6b5fafa4cc8419f2dd05dce8bba33f5a2c0224e7366954fa4f272f2f706f3955865173d420f9ffadcbd0e3b9935b5d6a634cb3ecbdafb75e6a72300df334ea747184d586710263257ce4bdfb5fd63f5da00670b3bcd3d59493be1645e7b6d11b52cf82cdee55a74830f2961b4614cb9f9c2c51d50183a7f97f53de22bee6668635cd58d59d4f859f6b946f3a96267bc078af2fa84f7963
+Entropy.2 = 54f20ded134ba39a9c3dc28bc5cf78832b8e7b375d88913de901d5fcc1f12cef
+Nonce.2 = 0b299dff5f3620f9cd91e2f848aeec42
+PersonalisationString.2 = 54deb58f3bfd1c39254d9d2e5848d8423c1fdddd4e59a3de6e7500f162912b43
+AdditionalInputA.2 = 9ea4f6c2199bdff388543df16c55ed4baec6841a5280bc61753bfb4a381ef373
+EntropyPredictionResistanceA.2 = 233d8290b79ee71c36deb5921a5fc8b3f0227cbb3290aaa6063ebc0fca5f5e31
+AdditionalInputB.2 = adc08199f4777889ea8f3340f12384d3800340e92950b26eb98fab0d55dc7d63
+EntropyPredictionResistanceB.2 = 9c2ab5926dd1ae0e2f0d607f6f1f1875a02fb32cbd1e130e4d20bcd658bd6c36
+Output.2 = 9727fa16859cfc8307f26d12e653dc3475f7c5a94c4d76dd0951e34eacd398c72fe62f3b298b53a1f68d663f92921bc99d9c6447ffb3b2517424f825c4930cea7c1ca6aa4428955d1929eaa7abd91adc2d7919119d449bd498dae08b89d127649a66425d94affeaa79e1098f88ee0fb048f501ed4044d016aeee630bb4651e214ba2fb9f6cabfede4bdb1d301e7af26a271fd8294dd7ecd7f2f8bce5efab401dbbf1142913ff40bf3cff26f1c4c8e5480afcfc9efe753a33ac42ff57d30b715a
+Entropy.3 = 8a3d567f3a11eb4a9160d93379f7b6f18dabec1bf588683e510b8a453d2b3171
+Nonce.3 = 12c870e662e2538711e955ca5e722017
+PersonalisationString.3 = 5879fe3259c241e9015050a21d3041244f36de8966a3d68babcca20c766ad97c
+AdditionalInputA.3 = 0a26248241932d95021d6c9ac573c55ec8f0bb4c2f48337fd7e3a72963ca99cc
+EntropyPredictionResistanceA.3 = 26d3126714c0fece2f2c360caa5afb443c50301e20bd347b92d3bb1c8b7d9528
+AdditionalInputB.3 = f42eb68bf26823b228cefb0aece00e03a3ac217c11db7f1788664f4bd9f7a520
+EntropyPredictionResistanceB.3 = 3908e76a745bccc41e673f0d09b28d4100cde50a37a9c48542805a5cbd4208b0
+Output.3 = 7165b0ab4a76b4d05dd9153410c485651b47c2ac5dd26b84dcf8d0b2d1b3d37398aff83e73946223e48902bfefd849fd029ae9144976b2a8eba5f60e19391c7c541d1840a598b5c9706bf822d91abe81f53d800a52278b1ec69ca124a3aad149995f94acfe35a3b92ac9d4282446d7ffe5ee95279d528d54ab66a15d45625cc9d3146e6df57934c1f8228d47ec44fee89259fc21940630ccfaef0a17ccaad677059c89d1fbfac7c9d2281a631eb26ce7eb994662fa8046ae38efe79a3ea9c860
+Entropy.4 = fa779ab8677cfa8f4d34c3eb6e01961587e7f5ada7d809bc87968b0cdd9e32dd
+Nonce.4 = 2df8734c28bd2616d92b8a62f41603b4
+PersonalisationString.4 = b094b77717cc167dbd395879ba06484a67ae1a8219a844db54803aff2e6f859d
+AdditionalInputA.4 = a21d2f0443f6c91a02038b42f6156310aa51a81f1b7dd2e5f0b63b2e7248051b
+EntropyPredictionResistanceA.4 = 0727703c77770df6840837a3aa3d9a55bcf9790afaf7915be2e0d99ffd97e235
+AdditionalInputB.4 = 2cb6fb9dedaaf6383e0fcba0bf1a6ce582373063c5d9dd953136aeeb89954fd1
+EntropyPredictionResistanceB.4 = 016931010976de11d2abe55b69f5c87968149d67f8e9e6ea2f62de3290c8b0c4
+Output.4 = 22f40d3a8baf1ce546d4e8a08cf8cac94333e6c2f279181650aeabc279a31ab2f8447fcf30cc16b60d83beeeddd81c28388f33a71ea0d52002af939bf269def5bad702af7705abde7c5fd9bd889e541145ac303f66deb0dccd545158581a7dc8f26362ddd634476605f933ef837bc91570fd20628393c93271cac5eb165e224224be1533ca0c45681d975748ed32c36334448a5851f9fb8dbfafee6f66ce5b54dddc1873ec0ccc6a3b76a578044f3bd967f5a1662d75bb13c3f2a9ef29d555ce
+Entropy.5 = 1efb31743fdb29dcdf0fea9dc7f40d9c37137831699d17bd71317d7a5d7c204e
+Nonce.5 = 723d41407db27b2b21f0f1450a179468
+PersonalisationString.5 = 60358e3f071c74af3dcb2bfc11258a6ffe1524c9f0b0e3c15f2fa57c27ca445e
+AdditionalInputA.5 = 7df0108719e1bd9d2590054347d49fc9792c18b8533dd3eca78743135b20cfe5
+EntropyPredictionResistanceA.5 = e403a43c2928a4b31c79f174f713d75f1c3d6a8de9fb402f9b99f88a23a904cb
+AdditionalInputB.5 = 61b6c8b35a2151f0d60fedd66c1707f4225857d42ff884abdcac3a7148bdab66
+EntropyPredictionResistanceB.5 = 5eca8e8e9a1a9a719079984874279adbafe437b38a36e9928c22b0c505d5b1ab
+Output.5 = 1bac89735ae7e42f5b35590f631dad1cb902a87a96a66e61a66455216fad73514dca72ba1bcd1925651d2c62a7c2b810dafaa214c327b46091e2842f27cc34c1ab01acd98bf384e8e31d8075682bb776412f7981185599f855db8ee592de8f889c2d648e15dbc89db43f2a2d30e44af5f84651257c6452fcaacb57fbd29aa57925cfddf8dfdfe63f957758c11baac337c0b06513ea0e7c89fa48d499e723bad2de05327945e119a657637396530f4666e52263f3b009082f2aca70a25626f360
+Entropy.6 = 8f77e019c048ea9a71d8376704d2bd955c0fa00fb6f97c15af991b575905269c
+Nonce.6 = 7f4787c76325888e6658a7dd64f64026
+PersonalisationString.6 = d01f492618efe7a2984255f605aea6a7288d9ae0690dcd8b05b75b00b67b7d41
+AdditionalInputA.6 = 3d05c04f9dd428a2b61a51dea6e9b768d8b6c1bd51bd77a3459479dac0add3f8
+EntropyPredictionResistanceA.6 = 15d5fc2fb6d77d647ffc4f8bc125a46cfc8e5e66aab45b3bb08e665d0973dee2
+AdditionalInputB.6 = 263d5e2926a4b0e3642fb2291173dfaa7c0c664002356fc68ad41234c54b5536
+EntropyPredictionResistanceB.6 = 1d86e74905403766957a23cf1dd657bcd56dc81c08d0fd3990eb510ac21c0688
+Output.6 = 73502eb00d1eb61a4f29032f007b1bfbb5fa1f271ec17eb22bbad0fc66de7acd65b495f26d048ff38f9caa3f6f1cdd9dc0258a4cd693d491ec7912bab33199bcb42f880599b497f755e8d3ec081031288dea470e92b078d080d176a623fcb52e2d44a9cc840a46cf0734a583ea6172661899faea646252629619f7ba7a2edd07133c678c6e1ed2af1ac251149e1c9dffdfdceb4239e3b8b36ac8657fb0e1b6415efe22df98393ebee26de9d5a0730c3649b1db82cc2889ad3548bf57da0d5852
+Entropy.7 = 13ddf9ba8aaf4e566c4010f63e6b5a92248d38350ff5903eb188b3808e527fb7
+Nonce.7 = 2b518c8275a0a2854f914ca962e45330
+PersonalisationString.7 = c0b32b85a9bfa4760b7a50561b1a524e3d04260dbb71f5ba097452671e562f37
+AdditionalInputA.7 = d120b396700fb18051a0968804e1aefac72be62f546cc6237029cabcddb12c0d
+EntropyPredictionResistanceA.7 = 96c98fb00ad069c0f0323fba2d0fdcd3051c79afc2eee32f0118e86d6c7cd710
+AdditionalInputB.7 = e109bbc1aff3dcee57efd393deb48e32728f245977966e6d71027f52af0cce3c
+EntropyPredictionResistanceB.7 = 317ade80451ecacdc944c2ac641e3a79622739047b0af33b9d8cf4a2401b38ae
+Output.7 = bb13e375d5933238fa0a5766425e9ec32082de1b75cd7d718255617e51189405f847331f29cd77cb007422ce721cd701129f6d7fe9d40f95d921a68d942e79c312b5a22819165d1218d24e7c713cda812e89547aef3411d8aaf247961b193625342946cbe0342887973472c0ee42dd3f07d8ba0a7b05f4c71812b949f72a0e813c84cb416f4c479f6a1f830312da9c1889d4908c73d1dfb6499a2b2be6147727e649873f2bcbf7e9a81a541cb2ee272fdde0b60b6c3240d096d152de483b711e
+Entropy.8 = c46042be325a92254fa11c784463e7734e32a597ccf6af0e39bd7252523a48a6
+Nonce.8 = ba25996457578d88c9b5a975e9cf6c3b
+PersonalisationString.8 = 82bb53c0e218390d0c42a55d2d2008bbc88c6fcfd21e219867eef257738c01fc
+AdditionalInputA.8 = f0e58358eef7ad483029c0cac990e3efe7a1d4283077aa23c9705c5731975174
+EntropyPredictionResistanceA.8 = e76797416a48a05c6c0be1e4d38eda9feb85f289b2ae0abb176d0ebbdefa6b23
+AdditionalInputB.8 = 417ee2608d23d73dde001ee2dce00a997c0b0f9f8e2a8e43ba57d8c51af37cfb
+EntropyPredictionResistanceB.8 = 08bc6bdfb2cda4eaf7ab97fca81dcb4d24cba52a16abffc29d6f18e61ff5c636
+Output.8 = 7a354831f281b808ca25c524ff642665fc95e739856ba6689fbe3d33a96d9599149085d033a159f5ff73e22eb07b39a25f1f57176b304a157172365ff3c2100bc81fd6d8725cfcdfd904b4104f9646f78724b8386d474cab8e870fdb041a37ac7ae81c6755eeb064e0c1d085311a5ecbce0ae3d7d8aee2395bb40cf2704a45ec2062316575dfa76821f44964eb9800f1a905f5e386104b22404193f1fd7bd9feb444d0e76e06a9216b4c7a814ff24e586cc18809608e6075a3d61da7d32e284e
+Entropy.9 = 00d1ca2d679d4d35736664e8d96b49a451615ac4ecc752e24f38e8c5d0290d3a
+Nonce.9 = 6ea5b73bbf0c543de51ae55effc769f2
+PersonalisationString.9 = 510190b6407b77be1a2e656f06116d6a4bfe5c14e72f5f79e4449d552b579025
+AdditionalInputA.9 = 2b8a2f5c73f479ebcac64908ad621df269a418bc6687eb78eb21c11860387be5
+EntropyPredictionResistanceA.9 = d60f813632ec34195da4c40263349a5397426ffab805cd35d0e080452f4a2faf
+AdditionalInputB.9 = c71c4c144d14dd87aa5b62a20dc7818cf387743a23a037e658558be6e59353da
+EntropyPredictionResistanceB.9 = bf71cc1ef1e1db69ce09247ce95c3c29885231fd445d3bd143eaa0e5fc82cbc1
+Output.9 = 8823c6656babb9ea5656d0868fa4d57022f8fc8a3abac8297b812e69fe50d8ab776875a4ce55038e36f27f787ae9ec2509a610752321aa104ebac9cfa73734e8830b68b8abd3c6fb441ddf853c4ae5e0df93c1233eb3124a0fdd1d3225234604edb72f326cb3908f33e19c5b7d64adfb2900295b2dd20324113d555329371ff442c02c50d8c2a945a4a05a7823ee770cac651537db0b793583030567c7d18faea179b47c5c32feda9bb27179814532f492fcc5ef541e8fdc3e7fb22e68b6f242
+Entropy.10 = 42ae300a8ba1bf4c42d9c8e780ae0208d58b0e35aaa349aaae879d88bd3795cc
+Nonce.10 = cb50572c475d4c53e1574a2934cca028
+PersonalisationString.10 = bbcc200ccb8a8a6f8394706711da54962198602876ad57aeb1b5aeee24f2cdd9
+AdditionalInputA.10 = 1e587a0fd69d9c874956b917346bb3a52448c028149a72f1f3bf3c83406b6a83
+EntropyPredictionResistanceA.10 = 056cc944bb7909e2de132cf22e64d9080ed1ec6823d5cf96c27cadd7ba2bde75
+AdditionalInputB.10 = dce561ff3a1bc8d6052506fbda7cf2f17486b80667c27e7ee1086f26bc5599b1
+EntropyPredictionResistanceB.10 = 71d7cc9fa8c012ecfe3a1efa4935b7c8578642e5ff9e6c8b4a44456e3e4a91fa
+Output.10 = ba86bb90b850c2a34ed135e2974d292a11100a23921042f9791a6d32d929bc280a5321dfcc0f644bb355dea684d87346b350f5ed93693d7b94c5522a7e300dec08f0b460edbf8a9203667430f2638e9707a1689b1b48a9b4b0e1c64224f93ace7f1a7b5578ef35a57f9215ad6af6f9f4b1e68c2c7515e1b5b2d2fb19e248051790c99b7c09b460efec7fd5491cc6358257b16c6d0d416d0439e1bbab69fc467f7d63e24b6f27598325bb241df998927f10abe7fe83b107e297e67990ab4fa8c7
+Entropy.11 = b2f2dc150cfb10a7b2463ebe6c93f894b667533ed210d1126aa852ba8421c81b
+Nonce.11 = e8e826874cd66ffd6ac87fdc5b3ba626
+PersonalisationString.11 = a4a07cb35b07d78908632beeafff47747245ef59610debcd192a1179fa1ad5ac
+AdditionalInputA.11 = 120a7f246239687170c80a25c36e435c50bb8e9aa4ce50f4100b00f5e77817ff
+EntropyPredictionResistanceA.11 = 1eb58a2a2c5bcddfc05411cfe34898efb5ac2900ef4a44615f176308a5d1f8e0
+AdditionalInputB.11 = 93f2e4adb83a9f3af7e6ba390658323bc2b6ee91f44bbb2b357c4f90b3b9cce3
+EntropyPredictionResistanceB.11 = 6da31401908e49316567da658da64a831a07c72e12ab1d1978da06321e802159
+Output.11 = bf4c50450068ec96edabf51112a19076246fd263548a47096160a10a353b3644173b5b24f040e12b0cef36b406dec83c3b393cf101867a63879917f9ef5d2269053ca7eacf799b38a66150eb02263dff8a902b5262dbb72155d4068afc9e08699ba4e3bc75e1ac1dac3e08da1b0cf2e76dd22b244e898a62a03a203f77b8781e03333566eec774f096b25e550d149c7f7224d8fd4b5df9e5b78d3a6b3c4d7b41b579baf54ed9810138b7cab0fea81a2da9eebcee56002f77403dbc5e712ef296
+Entropy.12 = 54b72241f2e9ae173452c83fcd25c98c0a88ba9edcb7ea36f2dd5e3d94742239
+Nonce.12 = 5353ced16868585ee8924e7f69daa3b4
+PersonalisationString.12 = b0163899585ef9547e7c913aaaa8d5afa81230cac81ef5b29fc3d4c3e30be4ca
+AdditionalInputA.12 = 04953a4d0b38d5ac61e536fc5180b1b4fe31c50025f0f39c4606b2769ddec354
+EntropyPredictionResistanceA.12 = 2bf187a9cbab26f11778d19576875d9b3c5c9a12fc60935dc80ec7d6ac9efa1a
+AdditionalInputB.12 = 05e8703cc10b0e9161fd10f6e8210c2dfb86aa0af36802038d43590fc5ac7a97
+EntropyPredictionResistanceB.12 = 742841fd49c6a7109d285d5b752a91d3d584ff9e363055db490f4cef626b2697
+Output.12 = 6588a54d3a1097208ce9458abddbabdd3dc3c44b6631c0b685b03ffd324243137cdea705f08505e0acf7ec616233b70be1b3049c6c1988f482665a96ff65898b70aed9efe545f9c17da3702654e3a097f67f00a4e4c806e99467372a2c83295d34c213df0376ce45aba8269abc4b8c9b9b4f511358b1001ee721b8b4af1d3be818024c4ab4b04b624579a4b08f1ba6cceec9ac9493bf619a1d3a820f8d36490f786bfe729099a6cc62b4e2cbaad612d2e82d1f216fc89f6be1b395f43b91b278
+Entropy.13 = ab6afba5b279a503513b3c732957e68df55a281fac4f8d93de745f72eb9fcb18
+Nonce.13 = 9652f9fe8d806412451a9b9aa47e6434
+PersonalisationString.13 = 4d0b87f45075219aa5406a62905073b87b2c87dbe7313e863ad4f5f48eb98cec
+AdditionalInputA.13 = f87f3a1e87584c6e511e280fbe538c6889d58c144259a80aeb79d2bc66d80919
+EntropyPredictionResistanceA.13 = a469a5ee21b34d8eb13425022f1f3a03772ce484f61da316e8e7a8fbf79f763f
+AdditionalInputB.13 = f8317732984e53a6e6c03e49f3d483ecd39f18ba4d4e21b4290af60fcd73b2ba
+EntropyPredictionResistanceB.13 = 6fd59c8f0410c33d1d9f9bd57c771774519dc631ec1dd17ee007ab87137d4c30
+Output.13 = d191495705c8d90705d9998bb246204a50db666c477eaab4d5a7959339bcfbd2119143dfe83761aef4366d2aa8f5b372eba2408bb83f681c45dd600f265ca576671f0e4da94153d8c9ccb591d8f58b73ea581176f7a8f528047cc7d1abdf46770606935b5dde71fd16f7d0cade307a07d1c52eaca9df9ed4fdd8171f480dff2704b4381246411a28a73c26f037a5d89e379eebf26864b7dfee8685a51b8e2342375f9f649f448906c4a55df6aa3458ee45ce5aff5b0064102e670f8c7e594f69
+Entropy.14 = f67215a15d5c4f7578392d2e3337e7cb5c2340b38d3672b11225dad0a3e9663a
+Nonce.14 = b21594354e515dad55223700175bee79
+PersonalisationString.14 = 665f788ff552ca76ce2c347a6dda3ae6d71b2a12fc4002123cced0bdf791d625
+AdditionalInputA.14 = 285e25675ee52c72d0d0df28c74e94e06689194eabcab749439d844f260f13af
+EntropyPredictionResistanceA.14 = e88eb92fe1c29766158f4ed2195fe61cbf76f48b253d4a42851ffdf0abfea05f
+AdditionalInputB.14 = 64d3689e23425f428b99b64736cc26c475f72fbc564f86f99ec4e22440943177
+EntropyPredictionResistanceB.14 = 1dd8eded094fc0baea87df0317255fb06ca6e3470c9d1d52e5b238513ddf93ec
+Output.14 = e52e2c91e99f31080afc7398ed67f4b7ca0b48e9db242815524b192c7bec24b4aa2aaa3449ed5c49053273b8f30773784c27355c238c7c3c8b8085a5b2917a46862fb0d7cb0b52d62e630f7fb55be54977a15d3e82ba09a7d26e270384ed5b0a381920ea2c9c6a2da7a123f811a066c81eb3b8b92d7bfd62007a19a13725566d35b0c811b4f4a951f3fa83cc7809c623c9af5317054ee1567109d3772965eb3cf6e2c399d89e5fd59c5aa1391d149a09d002ff7e6d1efbad2624c71d01ec184d
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = b84987f559edadbda791239b96f71518dc9e3378cffd9c35dffd88b4de814fd3
+Nonce.0 = 7e566c63f0c4487172acdca247fc5701
+EntropyPredictionResistanceA.0 = 0648b00b8186cd72c160c12b02bcb1dbcd6ac29a37d4b688cdc6989b080b77b1
+EntropyPredictionResistanceB.0 = c41f63a602725b018d3c19047f96cfec951337edfff6feec166dfd7524cf4a11
+Output.0 = b0d01c3222c092a86ff3ef7561cfc2012ddf12fbf67de0b07030017e8db960e6845f9b238a9540f11540178aa79a7c80881869f850c78aeea477fab6603134128642bc18e32a7f00cd8014c253fd46c3e3de322ca42351275b5493c13dab61bd9fe30f91623a35970c763e9c401e82cefdfcb1ea9a5e577fc35dfe42ecd5d4463bb50c2c0394ccc351ebb84987b5268468be0ffa38302f7d1200aadabccf25106dffb1217f665b3313269586fe24c87f95ce2e398aaf0d19a6fe2162594136a1
+Entropy.1 = 2a28bad64684de255960abb2257563827eddebd3e8e0cd8f3750898ebe37fe82
+Nonce.1 = 56b7aaf2330f6140aac8b6a0b496490c
+EntropyPredictionResistanceA.1 = dee660ea5bd1484684a63757194aff552a22247211b80b620d92720655ebe3f5
+EntropyPredictionResistanceB.1 = b86695fee9708ef830e5bb2d6557e68f93bd5fe01bf2a515dba4fdc1acb6fa2d
+Output.1 = dcca67c27b65b0af98d67e17e7ed86f29feb4f6b0855fab0c2204e80592a71bd826a8229658323bb78aa8614f877c8ce1dfe6f35d3ef9ade57d550d7cf5a37b4172d56c21d11c9fb989bd812fe7109423f6c8dcd37fa10846690952f2e4098efdc005938021e2faff3baa9c68a0cdf3b93ff9403fd1ad9d529f749832345a79de5007a39d3fa79d2f1c72e2d6765340bc84ed5fbbd236f0db498c36e5d523ae9340b44e6c5efb07a37c302087303939b0bef99d3352f631abdf54a4f282f438a
+Entropy.2 = 384a56d645950bee3719759c260270aafe1c4c891d108625561cd8b1f3a2a209
+Nonce.2 = 2fd535a1cad2f9efdf928a8db17818b3
+EntropyPredictionResistanceA.2 = 63e304a04578c58f43e89276d3167cc19e7dcbe107b7f45e0379b9d040a3de40
+EntropyPredictionResistanceB.2 = 99e4e06b358be7aab88f57b7c53248e2a91c5de696ee4ac0d70b6625b8060ba4
+Output.2 = 5fd4a8a23277efb3ea8104c762d4d4f51188c4a4314c37110c7057648ce3454bf2127a852d34249fd115dc85dd91fb007466dc3082cbdfa24aad2271bddfad26ea2c18eaeb85cc6610675c9842095b5e5b6d4ec1990d039b8283e560655ff4ce9448d76e401f0356c168f39bde0bae2e978887748786c842ab0698e90e68fcfc12eed1e8f2e42bab893a422a92541323207522db5bf0512f779b75dc7208e23a03ad6664e841657500267b0bbef9e7b557fe19ded9ddb9812aa492b84a62dbfc
+Entropy.3 = dd27a6ee9a31b35bcae8ec72ec136f6dcf08983935c18ecfc6f40de6a501b22a
+Nonce.3 = 7837169cc6c8246e7a1e9c450f8007d3
+EntropyPredictionResistanceA.3 = 6e319f38764beba2b18e507d08545f67bf949fb70ccad00c2b7b4c531c4fdde9
+EntropyPredictionResistanceB.3 = 44ee464d83b14d763bc51df83f4659959795bf80519d89327e1ae61beeb830a9
+Output.3 = c6bf6eb142ee9b8eec8f70b0fce907a799d37ab91f47e5fec3b51e4c528d8aab325e40d0b2e38325c552c5fd8fafc97afd723456727821b66889f26c3590c2388b7b1a5ce2802755a05926cef5c7802848c11b8162c49424d06fee42ff14f7876a526cc587e01e553d819b158918e81f9a1a4c539f360fe239a7b2e472dbae7951ee6058382841f2d04d36d31317b377c1ed43a193fbc3b5424e9ef7fbf7811eca287f545c1c9aca9b3b25cb7d1052fb273afdb8027e0ecf8daef45a8936081e
+Entropy.4 = e14f754be8e06aa9ce735ae28a921ee2d41b029a27996d9664bbc84e43634aa2
+Nonce.4 = ca88dfa96a6b83172b6e25697be47da9
+EntropyPredictionResistanceA.4 = ef2a539fd34d29c5c4391480eee24a091368157f5ad741624d5ccdfd31288a02
+EntropyPredictionResistanceB.4 = d79c4eea3b67554c6070eac37d7dc83d10a4323bbaea9dc0ec166df9f4073e4c
+Output.4 = 497c022939d898ff9a8c3ae79a7212fcd9892df08a0458dec28458da049dcfbf320dc2c07a5f7df756d41a383297c2c1064cca7f845dc6c19781f43c193e92bff88dc481120103601b95a4d40adb25d44ca952934ca029ced6500fb481dd8a5793babe5690b6a4377c5b8daf96c2c4db94b4da8a70b8e78933a41bed4275f5182b3b8d2f9f911dd55ed9373b196b34c377c40b7bcb9d1ba057cc5086f3e767f78d3c6f1d65d80645f4d7600642ad03237e5ee46d780f02b145ace90244a7c538
+Entropy.5 = c0d1b06fe7892fec01ce580080141248a68c0843614bc32322e3546217dff0c0
+Nonce.5 = 848a7609cf6496e89612d75c475e69ec
+EntropyPredictionResistanceA.5 = ada345434b2669ee80ac6fe41e9e04e563cc73f0d5469b5ab780e0c87756e161
+EntropyPredictionResistanceB.5 = 62b7eedc01f105d516a3c1d14722c3967d29f627fd158182825e2f9da0d51aed
+Output.5 = f8671e0d536926b59bc1bc0feb93b0ac6a365ecdff16fd61045616ae8903ad7c17b46c54530d46ab203d53697efb0ceb9da302f072fca06b5fd54725892631063c8a7107a459cd6f75fa62280884a592ae0344cb7a25115731f66ca2f98ccde3472959dc68025c34e141d3387d3267c2b715225e984c66659347958557dec37ba34176a69a268e925983cf7c83ff36d1e593d12b2bd61f69cce7752209b0fe9871afb17d29e825eb850749629b69247cd0baec71fe6d198fed4297514ac572aa
+Entropy.6 = c2ee1efd8da60d9b1cf033c6a1320b0cddb12e81cb84edb9589d16508ebc54bf
+Nonce.6 = 37028af254f843f479391d9bbc8817af
+EntropyPredictionResistanceA.6 = efa445f245e4b2808fc4b9ee08cc826d3c458e04d1350f77f725f4158f868a52
+EntropyPredictionResistanceB.6 = 2533bcedb70d7dc6a5d036ab46520fc704be8d2a98aca09546450cd8155ae5ad
+Output.6 = 58c451964244838bb47fa5cdb0024df7c2fa49bf2b32c546d76cd4433840c85d50ff7a281c6a672f872f85523cd4995728c3b3dcbbed261f2b8f5e7943b8b2b7dc88019e858f6ea9403a1704c8e9f4d976e070b2b30f1631c002bf2980da2a1ae236805ccd77a5841390e9c33801fdc718eedd3fb8b5f001490da290349174bba8fe85d584479ba854d211b8d6c607e31d471b720b0ec0f166b6a6f4ce8cc4ab9133b28c8cbc19be15ac13303421f8595116fbc7d06143bc6827545af49b7712
+Entropy.7 = 8d2f177757566c7a4d7d85d20f0e135b05dfc2664bf35be33b8ae8b4e35d030e
+Nonce.7 = 9809d1dbd6561d0abbc03326e7a32283
+EntropyPredictionResistanceA.7 = 8a8d5aa90d862bafce77f987dc1a6bc2ba961e89a1a1f40013c7bbdec7daf503
+EntropyPredictionResistanceB.7 = 9e651071e90cc58dfe9d4d6c773f50db2a073273db504a64d441f7cb0a8ea1da
+Output.7 = a04cccb5b789ea06ba895a0ae416cca428d9b7c6f423e5df001962ec10707ac3778b3e985e8c10409b2c605743f21196d13ac8eb1d833bac32701aa93a629ed2f76354dd607d8019b0ebc6d920ac9a666182519c6a962e09f19ad974800b92e695bed1e5cf918d3efdfd116feb94ccd9f5d1981f9e2c97d00e48c1ea271e6c4c7ecfc42730c78d6b618a3f8498ada54189290256b0b4d1c0b183edd4a28bd8df40ca284c26ada05a37d76b5075fad1b530ae89459d05c4749bc75007017a3217
+Entropy.8 = 40944a54c28e83134e37315f2bd697290691db2e55749b9c8bd22aba65f47e11
+Nonce.8 = dad48e4f2ca5beba230d62be023da71e
+EntropyPredictionResistanceA.8 = e51d7a18a05e67bcec2ecd7701aa077cb9ff90b2c1af3796cb9197ca84160389
+EntropyPredictionResistanceB.8 = 8e8d4482c6342378ff7e7c5eb7741b073ebe3f7c15410562afa8bb0416f3daf1
+Output.8 = 65ca0d562da9268d3c735fac3be774c243e8354ba54ce35779b7b3162e566e6c57d927e4aa12c672855a46f639b6deaa69917b9e34ca534c80b9263eb46dd5095833d3f49205a79e3d89de2cb2ef88c1a12f374d1e9da123c6fb5e24a7f730c018192e96ab947241f5027272da7fc9a96f9dff79f6566f0db88ce7de77f3d93c038cfa30fc044b5c143048ccc03ab4303755a7fab5b9130542d42987bc456beb636243dd1ffa4349c7f9deae5a3be9a5a6db97cff481d5f3af8727ecde1f4769
+Entropy.9 = d181f377b6d1b15a1da1457e4426b25b023b4ca81c7e005eb7f407b519ecde3b
+Nonce.9 = cada4075cd4f85feca89b9f49ca95dec
+EntropyPredictionResistanceA.9 = 6d87af35fb23d83f39049b99caa6fa0d021e8e63c173e025c666af8f2b3e1c3e
+EntropyPredictionResistanceB.9 = 47cbe7dded27075b4fb2eb956119aa85813f0887af177473744935e139ab7d0a
+Output.9 = 857eb880e4e4cd358e0bdebb5f48a05875fbf1fde4f15a19994d569740a9d814eff78fa39a66a1a23ff514786ca695a2974737b284a4d17f9ad285476a71f08ac65022f1c83d7852fc908f3d08c113266827449326faf59ab9201c217340342dccdadb641f714f7ecde36a45bc0621eab9d002c12a2d8238dc7b321cbb35b4e9780ba5e1a19b9301a91ccce640ab02c856fe5acbca91ca948605fc68f18f39d11391bfc60dd650f7f107c40a60fa49f0ce657d258853aad7279ba42bb0b035e8
+Entropy.10 = 4ed486e9696ecae654c565333a49d12b7b6b1db5a139fe50671800df5da95650
+Nonce.10 = 71f2d671848484a43609aeae3aa5f831
+EntropyPredictionResistanceA.10 = 9bc7b26fb774ac269a35a2973ba0ed68e1fbd55ddd6428ca87881dc6323b7cd4
+EntropyPredictionResistanceB.10 = 62993ebd780804dc468e9c3b3f7ccbf192d2bce803fe9645f60ffdf58d16542f
+Output.10 = e81676cc9dbf1472bbad36481f5887755c4297f604d01c6fd0effbc38965a6ff40eaa0e246b9d3be22875fad4574a645142ef4f7800d5ae513ae8f05995138eb16b7c354dd3f07f390b68aac492d51500ed54f927f13c8b695c8c20e80991ebf95ef6226d7faa942b3524e7ec92c5ba51650d4df6cdd539a30825e76612e5d4f9259041260a2e3974d7dc6ba0a0a9a26bb59403946d75cc319646e9d2e5932212244b001a859ad835cf2c95ccd4d96e2810d6be163ddfd436e365e7146ca511b
+Entropy.11 = d528535153b5c9a7cded1e6370f68bed74954416b843117001bc3c08a588c5bb
+Nonce.11 = c2c1b2d09e32b9b921064db684458d56
+EntropyPredictionResistanceA.11 = cdb4a8701fa11d7473da2cd4739aba7f2cfe73a40db099bc1758616c39be83e8
+EntropyPredictionResistanceB.11 = c3b8f48dbe1b057ee477ff31fceba42d76e7592b4ea7368d6736843879e470d9
+Output.11 = d00a29f43d50b5bdbc5fb3b857fd81c634bf75ca294b04870e1301293daa8823e949f63fa7e723a85708958bf736a53ddb6de775bfa1341e3d43a5518ab11b14bb55ecca8751aab09c934aa37d32b88beb3418a183e52c945c73d1e57fc9758aed27eda7d78eeca16683b1a0d86e46ab473e0df150f0158584e2ec8af878f44a2c0ffc9bf7f936d567e582b29ea8501f2d2b1701a6a915257fe204f958cd59af2b3010e9a0aa588c20bfe15292371771f4a9764da1c83c8768a32b6f589e1fa4
+Entropy.12 = 2516115016761ad458e65041fbfcd5598fcd79ff4bc58e8236086273ae493d78
+Nonce.12 = 75665c1fe0badb08dc93b52b8aae492f
+EntropyPredictionResistanceA.12 = f442585748f5220f6eee9ed4a9b50732bcdd828dbeb3f1f0091791abf1d68547
+EntropyPredictionResistanceB.12 = 6787468519ecad1a87d14c8e061feafb1344709deff22865227375f1ba3e595f
+Output.12 = 88a0efe63eb8a81e14e8cbdef08f0d68f816fc4f8d31f508bbbb1d2100443c865c04532324babe7b2d1006d1fba26c7e9466c84901f94c65d2bcfdfee52acea5403a805c8328a5d73e30918f10f63d9535e62177b0f62c8d1fc41dbb300db899a481fee55827dea1bfc0cb3a0dc18ac46e5921650aa59ffea14c7d934de2f78eaf1c09aede89085efc4cb4408f06adfdce9d91f1bfd625394e93bad4e59873d0efaf47ff6e981b075307f1882c192ea5e111745bca902f593d551167cf599be8
+Entropy.13 = 08a036926176b5d14d558305bdaf349479f23ea438aae31a21ff0cd312e09455
+Nonce.13 = 9b242498aeaeecf9479fe23eb57420ac
+EntropyPredictionResistanceA.13 = 2973baaec20d39a1fa365083e87a48864a8213d5cf4e93510b2eda64d597e45e
+EntropyPredictionResistanceB.13 = e6abbf93bb17ea525b7e88194253ae55a8f31449de62a6a02a63abaf95274874
+Output.13 = 62a38aed3de9099882425d2f7487b1448e2046802a188fa9e1c021b4b435ad830443b533d6baef9db33252442bcb72c5152217d32a956658cde16cd7102efb37e127af88c2edfe789ff6671cd579b9495efd15a74e78dff528b4362112ac65be720d14b3b5b6334bffecaedb6d1be6841864552699f512e413c5cd87949dd5fde762d0ef63426075f06fca0c322723693d803121cdc9f251e679ad77326c7b07ee6fe6b0d0a3e04aacc71d391fa416feb559866c993155ddbf91be78ea34ae05
+Entropy.14 = aba3eb3f03e0bd4da9b8c24d0ee2d1e8309fd6cc3cc2940f932007fc44410c08
+Nonce.14 = a5dc53c8a898e94c6933320d1858192e
+EntropyPredictionResistanceA.14 = 32822d7374b2a24cc00a9217ff5dd17c6962d40d9c739dc7763455ef6bf4b203
+EntropyPredictionResistanceB.14 = 98f2d35e46d162b562842886552bb854212fb652431058cc02e9963c07128406
+Output.14 = 73f40fdf6550d37fd7c9f64221e7d0447cdf6911e5aeb7b80ea6307a3f97b7d4d6e42eff11e8c53d18504a6b8c735d9d89c6e1f0fff47f2dc3ad823229cd0bb811c50aca7f3f8b7890df6da7ea279e3f0582a580ac18c3a42b10e5be088c90d3aced0418c6183b0ce11957052c9e48a8e30f12e1e5deaf68d29e4809e7fed178b541c80930b6b3b782121b99c41ccb98046147a6e08294e2f8a9a215ff77b4f6729a0585a554014c60b36ba29db8de4cb11f3e20b4bb2406d03f7f1d4601ea23
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = d6b46eceae15160f0497fce7219af9f17e8301d164a5f58e45e7d16753a9230e
+Nonce.0 = 1d3d6ff9c36dac3e4f712b503b0deecd
+AdditionalInputA.0 = 827145f292ad86c00492652ca05a963a56cb1ae79c144c5a90f1a4a296342aed
+EntropyPredictionResistanceA.0 = 590a686055fd7b6bd78ff26d97681c51cfcfb2c07924d64c73d276a6515592eb
+AdditionalInputB.0 = a1040dbcdfa6c5a14edce96388161045e0223de877f24a384042f6ef303c38d9
+EntropyPredictionResistanceB.0 = e7843e6f669d69f175c074c0d421f71c0ad985cf15a186e2ba1a082695695422
+Output.0 = 39660a401ad051dea0a66921b3653e1ca183063ec737c43a38b51e86e4c233b7e94f2969510fe96fd3cee3aa494276bb2eb313ea12cb01cd3a886e5ed3f3f4a908fa76be75439cd0bbac2a28336ae8003d3fdb091aed61cd15d8bf54925252d2c9d1cf4ee17c4075bc59e895b19a39757bc591847a2e6d3bfdab191cc015d8b8ff1d5ee4b8ade4da9024cb20c9531b40fb16ac7f8d792ae91193d8be6bf635369001b24f3e01588f42f2a310e4efacc195d5fd40e3bde808c81a9f9434dfe62a
+Entropy.1 = 4187b0d383b64938f56930de00446f0f7a5c77ae7a76f85ba83600824173c5a0
+Nonce.1 = 54e7270a3d6fb80e34a32d371c14da50
+AdditionalInputA.1 = a95b32a3e2adc16120acf610e0e9136cd9486cdc504f28edec823c5be7cb7e36
+EntropyPredictionResistanceA.1 = 942519e649885f397efe54411406dc8e87c82ff17d648eb2512454cb9d7562ee
+AdditionalInputB.1 = f43466a4b3a515a213468167cd225d2a906236c773d2e4a7459e3c133ac7ad58
+EntropyPredictionResistanceB.1 = edf01acf1a19ca1654a98c98a834e6147b38aa4ba016363b98c04e8c9847a523
+Output.1 = 58851cba91e60a97838f76a046ac6a0a32d6408d31c6987843629f7ad76a435db1064fb70cb659c319b76d32f80f84c6da51efab9b77c45f05ab88530a8103d47e8b59ee49fe713beef3a78615cbb396bf96552cc86ddb1cdac0b8ff12cd1cd5f8f1bc7aef303caf0812a6e3819a45f3a0e1343e79d9319760fead08c2e73b5c91a1301670cd90b8b8cdd640146c6811f7f6914c28f3e755b0e87e88009c1f03ecd049d2f70f90be24595a26c880afaaf716240d218a45b625827803818430d9
+Entropy.2 = e20574ba9bd717cda02685e76176d6e36d05c1143005a6a74023856af49f1dcd
+Nonce.2 = ce3372231419ff6f630bd7079b34bf43
+AdditionalInputA.2 = a30cb9138bd5afa01bbb38daecb03c69985169713ed6ecbb1166d78fa9527939
+EntropyPredictionResistanceA.2 = 9e372eec70a55eede31cbc1495ee08bed849746fb6229b4b47db67bb79d0742a
+AdditionalInputB.2 = ffc1ceddf214ffdc247edcf8495b90e983a3250dcebc627ed9f330a4ba36f9b0
+EntropyPredictionResistanceB.2 = d00466234133b63f799e91a7f1d47a45a2da2fe6eba6a13324305e44077c8465
+Output.2 = 6ed5f8f1202093e046b66f1a0024e7a7931a6f42ecc7c7813a8a53253ad53af10507a1d02582ac2cafe27818f127751c353aff3c3ca3e23bf73ee3fd1814cfc828a2339670c2566ef5c96711566f424514e067bc029754a6efa8122b3d5633c9ca9942f51f0d799da6f83a9239656f8db76681ee5b18d49f7a0126522ceb6ae614bf121de35c2a7d8a1fd27de03b692e5f7c63379c5bfa88c413d561df907bb4a0dd127f4509312fe22eb66599625a486a77c6a853cc977b8572c2f0b86714a2
+Entropy.3 = 7cebb1ac65b5e4264dc9c9b748a851e971582d025673c60f6504f03d19e3ac12
+Nonce.3 = 982d48ea186e96402607d59c54bb0236
+AdditionalInputA.3 = 64bae7d90dcccabf485935f20a3859c6d045b68a1839266d99629daaf50ee1cb
+EntropyPredictionResistanceA.3 = 6bc890d55a72b872eb19ce748dddd5a39097a0eb84f35bd705acc899f72a5a8a
+AdditionalInputB.3 = c2b58238f6870ac19cecddfab346f5bbffe922f3519e68d1c06b3d5cbeeb21bb
+EntropyPredictionResistanceB.3 = d244e0b7dda80bf679474f1ef8c616416fb738b73841e156e7a63de6f5ec9f4f
+Output.3 = 93049489e43c06e32d694306e67546426705791fcb0ceaa05c1aed6e4a29ed3da08d9e6a8fad98abb8b2fda54a28f42d795a7a1ce8f71829e604ddc610811b9b1955846ad0a04c5081815c56bc0881703b3319f66090ad4e1fd49bc13209b4d4c4b321457ce57d3706869d379cad518933c0b3a9c33fa81e2dfe6e847f25786d5e3e532de43312e26e85cd7ed1f9c389b091f7d0d352422eb781880f83e379ba1e35c76b671e3fd40ea450a6d0604abe692f1db5927318d1ceb64886aa51fa61
+Entropy.4 = 1fa402514f7dd320bf198ae207580d74767c5819c491d5a5faab8606d8c0d8ce
+Nonce.4 = 03eb7e8f8664af482493e2c6979fd50b
+AdditionalInputA.4 = 186b1438f170652acb497339e4b047a7075e7fa4e51d091e751c70fba2eafbe1
+EntropyPredictionResistanceA.4 = 0f2a4fcd56d96cf344070892f036d811f47f0ad4d582c46f20a9b6f5ec4c07e1
+AdditionalInputB.4 = 360242e1a61297d9c521d53af38343454a663825c6bedddb32444a61f4951d47
+EntropyPredictionResistanceB.4 = 8f70244c29438fb91f9dbccb8abf3a09e4bd9da7e8a5525f004b59921e5d984f
+Output.4 = 6de0b5d93f26bd73e66370d8c883f60b8d06fb05a9d7f41be5c40a399c89f3ebda366e3a60bfda9bcf90e25d8cfa02df09cec19d84e6073c85ac1dc624ef3c8dd885dd1e2c8c1a0f798934204d0a74a8936079dbf3036d2f632fa7b69f889111a1dee41bff2f57b61a7834c89428f8ec8cbb8bc362fe862a8739fc6229bf63c8a2e4731d157cb57bfd9657acf16b029c35a6edbf72cc7e0c485129877c51185be39d62c87bd32c3273f02596b6fc18070cc1aa7c5f40864181ea6f9e079bf689
+Entropy.5 = aa8fe223d6de7390cbafa0c61c238096efc37a9ecc669d3acf8fb3b4f8829b05
+Nonce.5 = e68cdb08c9d79ba607cadf2a29de1d2e
+AdditionalInputA.5 = 03a48b0a852e257fdd7c3d2528bf8c0b91e9b1d85e4920dc4ddda83db2297674
+EntropyPredictionResistanceA.5 = bdd71c65bdf8ac205d319280aa3b1c9d156bb8c92e85640076a4d11d9be71215
+AdditionalInputB.5 = 77f8ad142f1410d0ad62203383c7a0126e98fc9535961f04aab31e69903a5c9e
+EntropyPredictionResistanceB.5 = b996b503796606dbb7bcd4f487e777d0eec3b9f9a1ae8e92d305f3b06a1fe4f6
+Output.5 = e3ab3e2c05e58e58e9b8b19a02f6861328e087e70ce00880ce41a2192093423d4f44df551cd081a74c935cbc2adf78bacd7f61b8118a9e523b2a41e4f8a7e5dffe833ecbe13d5d1d52ccc0b58fd0250ecb333d6cfa4862f86e91f07e5e7905a113e0be29748fdf3a712338926719ff15ad3dd81459d45017c4badeec310c918326e4dece2e514349ddaf69ad4acd756af0d6de75f4932262f9a61b4dc2dada091c71e34e2b8049551419081f8846768cfc3d24e639d4fc312f97a799d159f9f9
+Entropy.6 = f21c446ee17d4681a5b932761524aaf0ed68f25196b61d0f1ee5d2b714da357d
+Nonce.6 = 1181f00aa703d0f56b7878809cffc70e
+AdditionalInputA.6 = 8cf615a789587ad58634db4cb1274a94897fb5ec24069f48d64ada078d1d5a78
+EntropyPredictionResistanceA.6 = 47ee5ed1afe347aba09a02a974c5511b63849975f5bc38642b2267b061c139d4
+AdditionalInputB.6 = 5bc6dfcd540be80aa580334b19d850fc37ee3c5365c063d426244ad900d1078a
+EntropyPredictionResistanceB.6 = 3f6a20df44ceb32b7b50805787060a737f9a85aff54c08dccd7cc7fdb69722df
+Output.6 = 56722c4317bd48192cb2c5de1bd4587f95a8820df3fc91c79647d0aacecb19b5c9c0b4e1100e32cb06a34e5e934ea567b022a9ac5eeebabf29b8544d8515aa6dff4f2c1407419a7b165b953ac543ba28bd3220dfdbe4ddf70a3437abc262cec3d133ffa3451f2a0be8827e6ed0671a61952c1871f252d95469621cefc5821fb9513c4a6813573dbee6b0e134888054b81b49db26572f160be9ce41a304586c3d05eb942d8b3fd75497b724b547916db1daa801120f60633eb45bb90c975f4ff5
+Entropy.7 = e7496df08a86d005c560331d573d74db310d21a495c120258149fd92de2b7edb
+Nonce.7 = f9c968395d3d6c41e5d7f910823fb6a4
+AdditionalInputA.7 = 3ed6add91650bf9fb994735f622ab560193f687d66539627a2bcfc141f7c31c7
+EntropyPredictionResistanceA.7 = 023a3d1c4e31756c4b3dbcfc793cd4bb7d373ffafdf023673265e6ff1614227d
+AdditionalInputB.7 = 8e32fc10ca87e96083a5455333900f691f3384bd15cd0647d07dcad1c34b7a09
+EntropyPredictionResistanceB.7 = c74e9b75355f90f2ed5bb621fd0005d1164d35eb521f96ad7cd0848c12e46a1e
+Output.7 = 908853f567481a507a9e10c62f68747d415e140059fc96bf74e524237eadef0a655ae93aa7fe4ad338fe80b11e6092783e510010be0c3390629a7febc21dcce304658bcf87e8aadb3a537d7dea7fc0de9953eb631c4c673c73b19d6734aced3c6363dc79af25339538822698f563a5d2f6bfa9c63f768422ac4a3b2a479c8e92d253590b19b24f98e18a39a504ed4a7db891214e27e58e0a72a326be6c4de78376adb715be66d641a5c555e8198f1ffb0a2e1a0738c59461108bc370d35f37c6
+Entropy.8 = b6792e619bebb41c3226e248a8c318d3b7b1ec30321c8dba31ce36f09b8d8843
+Nonce.8 = 8f002c5b58a697dadac4b733812ade71
+AdditionalInputA.8 = 30f0d86370518068074b8348e34598c5bff36958bd5a31013548bb5fa4173229
+EntropyPredictionResistanceA.8 = 8e36287342f5186d458f7d09847fce2e358c85189893c13752eec83e54eb0fff
+AdditionalInputB.8 = b73509ad796567dc53c5d1fd52fc671847eaa759c1542ae85825d05161d80c43
+EntropyPredictionResistanceB.8 = bc61d797c9331f27be18893714828f6bd7bf20b7fac7f51292958e190a3e8a6b
+Output.8 = a644eec8fceeb91fd4c3293af59b8e35c72b5dc34cf4784e5ce392e113b553e02229944f754ae33796ef8e8ccd12943f6ca0d0cbadc1c317a8b93696a4a07e3c546294d41dd65af112708c4a44c36c840636f15a2bfb6ae05ae8f384b36108e020621762ea1370a58fcadc977907f765241df9b76e0be6c6a8b551b3ba89b4af3c8e01dd2c9f8d5492b6fb994761c623e2203b6cc278617af0096453e8f9d4ff186616a30dba486e5fc0298ea236a74a90ccb2e819992034597fdd9861cbcc44
+Entropy.9 = b134adb4208382397edaa0d98559d8ead3b387d3ced7227185cf3bbd6f6e24ea
+Nonce.9 = 5aa174e86347254f840c4ba8982986ba
+AdditionalInputA.9 = 5ef0f8442810d269404ff3f37ded1d3078cd9ec3b3234193852f5f2c280b0f49
+EntropyPredictionResistanceA.9 = 36e7d1fee0551a33010e8190caada2e3e779f0b83b599826f523a9213b73c2fb
+AdditionalInputB.9 = cebe862f056d2e47809ea59048bbac44c8e114e84fb6fb74c3f86b103db75949
+EntropyPredictionResistanceB.9 = 24e0ed1f42cbb08bc3012c7a99a3a2bae147ce9aef8521eb5e20584ec84c1322
+Output.9 = aa725c9b19dc5fddff7cee467783dd64144dde925d0129e0a85efd0ab05bcd1c82d54b2738a13d1b26d4b6878dfe01365afd8833148ce330e9f62bbf0710351c180bf7300418410c10575d9674b3e985ef86096dd5c95faf097b318517264025361a56f5bb59694d02e6979b268918e660d04607b4d7a4a0570b3bec905bc941af4327599027a24c91834ef4c7177a4473b5ae63f2e2fcf01aab96ff98a16277c696bc4bf57cc50aea42d19c81835a661c2d77ec181827913cdc673a278e7c6c
+Entropy.10 = 19bee2cbc26736ad2df569ea92f4d1ec5db36eed59408bee8e7f1b2f4ae93cb8
+Nonce.10 = 7a9019f962eecc9cc34e815bf5fd705d
+AdditionalInputA.10 = 5ff895fe53c4b992e09b151c03b54770ba6775dfa8759a29a6ae7731d86a5fb2
+EntropyPredictionResistanceA.10 = 4ab3f0d1a6dd223a2ace7b43dea271b3a365acaf0dfd219abd8e7e171886bf7c
+AdditionalInputB.10 = f6acbc84d333064bf927f02c7af9b5486b6a0b843d970be862197dc8550a54aa
+EntropyPredictionResistanceB.10 = ecf6cb5681a5d8cfbed2da0ac112c53b4bf2905a39a28830afe585e7b3090940
+Output.10 = 89d025913ce47982b78a96eda5dcd0aa8aa2cb7f9eac12eeb0ec49cdc02e0c213ee82c4a68f1da9abb2b754864f935e512e37675f0a9f8a1581386cd3306ae5fcbdc2928febd58b0348f4cdcbb38d265b7763b469420cdf8a6ce71aa4614cc2c0757742c17aca3537a572872fe219eb60d3300c2c7c0aad249e3c1c50a2732e1d95979f7cb9fe8407cb95c2a2f329b87cc74966ac1275665257e6e7a7a403fa44e94fd890272cc9e6bb56b3f7f4874cdfac24cc0a2cbd53eb5b8708077065140
+Entropy.11 = 9e1ac52f475d35562a150219b196e8fd38cfbbfdf7418db761e5b36b3ab3bf32
+Nonce.11 = 2836eedb161109f4742281cbc300632f
+AdditionalInputA.11 = 2d64d52174f4d6b521e93e6f6aaccaa1362e84dcad4a7895926f348ae7a69305
+EntropyPredictionResistanceA.11 = 08ae6bcba656595ec6b59e38e44843eec13302cc7885c72b5b51fd76bfd7f11d
+AdditionalInputB.11 = c238a2aa73b070a2b2bbf90feaebe3e47c6887d056ee659828633172d6e41044
+EntropyPredictionResistanceB.11 = 9d8d9af4ae89845c0e005fc65e2dec756785f840c6fec34b50a1f32f2925bf82
+Output.11 = fbe0f519dbb9db6d1033542412f8152c3dfe26a20270ad5b262f0a097d5965bef1d21df2705dcb46a47eea482419a92f1ecfc8bbfc887b584bb4c602b68505970890559295399a4acde1bf2f51c50a9f0354b3337fee814855c749b5d03c39ce59e278203ef90cc30ad19e09783016c48c8def10dd2cb8c4646b571d84877fb4ee358d83d358ba45aa26f20a4284b3e41a7875d58f3bdd1be69624ba464f9fb053cfb2ee8e8dafad638009dea3f009557772b0a0b75f6b7d3b0175eb571522b3
+Entropy.12 = 0d4d77abd043d67938f6f5c35e0e30df4ac6dc42f5e250b48cbcbcac50597d75
+Nonce.12 = efea8388901c80d4bb07ef4d6bbdc7c3
+AdditionalInputA.12 = 32116031407aff90c856c321a18e3dedae1c2cc2eae1b5737223e0c65f8c78ad
+EntropyPredictionResistanceA.12 = 651b20fd5288115ce1ff2fbea1c022ab752842319041cf121cdef566ad637507
+AdditionalInputB.12 = cbb7caf255c567204996b75ca8a5fc808bad9b05e3d209fa94ebd61e77513c45
+EntropyPredictionResistanceB.12 = 8ffb3ce31f4012235c3a116ede51fe489c17fb956dd383f7e71a7cfe3f62681d
+Output.12 = c6636bf9461684bd9102598a7e7af8cbde3ff86ed9c1cd2c280197e3af7142a6d84b1f801a6eb920cf13903d60cbae933b31ffbf2a51c1897cc27cea8fed74fe5c3f6826fcc77a6c78f0df021853429fc5d91436e3d81c6266082b30353f434a3b340212514c3b7f4c2f929925be42249c12a784c05ccbd363fdae182bb7896cbabaf70b4d9583765b485ba2a4f93b43a7a4efee334231c67a1b6674e1c401b8bc6344f4aff9b94b7f1a5a070ec37f12e10a19c327b4ece80708841b4a4f0aa6
+Entropy.13 = 446c2491dcbff4c8aaebf8a79abd080e295341af91960585979055ff83dcbbf9
+Nonce.13 = e17b5743cd60c94af013a609c9ef330a
+AdditionalInputA.13 = 8025b88f4dd92fd8ee2eeb2a5798bac405536bb252b9075cfe1d666c1e607dd2
+EntropyPredictionResistanceA.13 = feaf5001096c5d4d4ae5bd224c418e53115cc4dcc8d0122916c6b0ffd378b0cd
+AdditionalInputB.13 = 5864c32e1b7f844242b66fa9879a37cd84bc3ce52546b0f8c8ce06a9b6affdde
+EntropyPredictionResistanceB.13 = 03da00ca80aafa7e47b2d4cd7afe49d7d938ad81f78d113c4bd00e15a86cd4ae
+Output.13 = 953288910f5484c0297301d1e3706a44510e2e62d6bac55ea54e97128e85a3ba628ac9dab36186ab1a11b7a99ff9f539d12922f33d4bcc0c9b4a9506524d37d3232e0e70125bac66f11575b9c30b00f8b456c3907c6ef59407e38f725108b84389c23c72649457b20e7b567cd0eac15a3e9c3c2cf89df4f7e544c7f56031b53cd5e9d67cf50cab9fb1392d70dc2b2b5c37005e692b0ca6757ca365773333e294704db10c79d1ee71f998f903ed873d46efe6fbc969b335527db0fef4c113d8ff
+Entropy.14 = 3b6828bb0154365190bddd0cef5fe9bbb93f8261d7bbe5a3f4d39ef266e2f6c4
+Nonce.14 = 5424cf294c81c33848e9b9000eec6805
+AdditionalInputA.14 = 73cbf94a67eb9aa93871dfa4ff5cacc5b8195a81fabfaf37985d72fd690adf51
+EntropyPredictionResistanceA.14 = 17c57821e293d90b1110335abd96d08c939ff52c38cad55e9e0050ff9d5b2778
+AdditionalInputB.14 = 4d60a3f6c5fad0b57ee38f5ccc9c83843344dcce4f5dc056d813eb9fca08c78e
+EntropyPredictionResistanceB.14 = 50915e1d171a23bb7328650449a6845c181ad304b5415e05e4bb8f6820a7adc9
+Output.14 = 08071e75400f6f225a1801359983a0fb4d6fdd1bc74f8a78d9f54b1027df0b4167acfbced55ad735a99ece966bd1e79a71ffb62c4526b8afe1a276976d9b3b765b9533f50e750651596ca53a24af1606a2cf6aab27ab3026437b7a03a0507c1913e6ae1718d6d69c7e09f808cf97c73a6195550a0f4cb426df27362b0f005226bd54e0df9c5e5038c75da6f8f77bd5fa35b9a3324b0aea322f5e48c203ee228483ac0f56a67dedcd1d706b8f0a69fa7946f1177a313241066b5324249faa7cf8
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 2230654dcbea1a19faf592093b43952b5daf29ef00148b885549d35f0b7c2abc
+Nonce.0 = e7926b81a215a3427ae4df4042c47c10
+PersonalisationString.0 = f6c729762983158dd00fd7fbb549c0dfc782611d134bd168ce2ecf134727e56e
+EntropyPredictionResistanceA.0 = c19beb5d24609e1ddb7b8a01eeb086336a372e169a8690176d7857c4b6aeddb8
+EntropyPredictionResistanceB.0 = b53f07660a2fb5372e65361d66801479606489ece4bfec4407b90033b017b9b9
+Output.0 = a97f0634fb66088327464dcae58328c70ace67a45dece49166faebb2a02ac914a123d62887b49eaeb3c83cb83c0f24f8484264da3636418d925d34c92b72bd80f73b3111c98a57c657fe2a4c98b2fb4010e21cba188d04e23d7be473258144cd574e51e62def26363c587554d2fa69ca0c5c48066cc6e5f638e6f45c5fc6e843402f996e90f3adb3e14f1d78c2586db57b5e2afe461896d40939ea8e15fc1b9ee8a858bc38d6b66bd9a0e682be7f901f51b87d9d2dfefe65ad5ff9e5bc053350
+Entropy.1 = b924e20878a3dbf5f2e48c8cabc00c6720737c530df242ff4c5035c448b97eee
+Nonce.1 = 7395473053de32ffdc4c83ce0a2c9782
+PersonalisationString.1 = 9c7d970d7ec483659f2f05ca71b5dd6ed2eef8f08cb7702ffe86613cb9585fbe
+EntropyPredictionResistanceA.1 = 440c75d7f45991919ab51d50517ff933e74e6a2f33fc79398fdfd07db0acae2b
+EntropyPredictionResistanceB.1 = 3fca495cb155f6ad870e6073c032be3633cee781a39eb6be1254ceea6db3c48f
+Output.1 = 37c26c3e5c14c285a5279f39e118802f2555c64c6bc2459878d1f2d44bd5b9f550a0f5d2641c109a6c263e3d1a373e0f049ca723317e457b069df02ad7c09be7b6f688351109e486609c3dca22327dc93ee442326905826779845704a30181329a453863217be76c93ba287e285da70acd43d2b00034c818ee23a18a1ca645421e768b2110f5c345af25f487e158945aaf2f8bbddd73eaa70ad834069fd44e0d1fbc1a9dbac1040070b045bb4fcd2fde31bc8d489afdef0a4fae3d87bd919e01
+Entropy.2 = 79d192bbf8371964e943b5017425bf7241bb60592be2f7be000e2743ed710078
+Nonce.2 = 604434830efe31cef59048cebae98d3d
+PersonalisationString.2 = e374c82324676d4b02496d75344e1096354a2b0dcc787621edfaa89a75563ce0
+EntropyPredictionResistanceA.2 = b1433040618b5a32c344b7acf9a0f5a3d1f900f9295ddac37c4db17c07a86bd3
+EntropyPredictionResistanceB.2 = 112abab9041874d8512bf1ae09898f0d416c919a8c7cb1926b4ccf5a3687aa79
+Output.2 = 8ac099f962673fd30baf33b8c7f7d1bc44af89cccd6cfa40c2d9eab5edcb0e21e97d093afe936174fa1559040b3c2cee9dae84fd5444591bbeab133e6b4426ec6ffd35b273386611f4e5f047cc6e6f239064f15004da128ccee9ced8e08654d05d2a7ac9faf57d5069ebe21d4f1492592a597e2c8ea2c07113162563fab0fa06849ec93bdd6151097f411a049b43133675cac10630cb8adec6041a5ab1763747c29cab5df72d414b7c099f460c13cea710225ca08ef0cc984fd022d02353cb99
+Entropy.3 = a3e47e7b6f744b51a45fecb9058bd0c185074475a5e0b326180380fa26baf5ad
+Nonce.3 = 1cf0ec03c1634abf205a1923a3b5ac91
+PersonalisationString.3 = 8a9770e004a6edd734ee1084363429bc39ae421755b5c30f630e9efc802f71f4
+EntropyPredictionResistanceA.3 = 7cb5d64cae91e65eb4f701b009b8c12aaafc17ad256a5d8274284412508a9fab
+EntropyPredictionResistanceB.3 = 5b6e8b5fd4fa10f42eded4c24b4817556e0f404ccde9df7caad83f3142a8fd8a
+Output.3 = b01a5a655df2808d1fa9a2a6cab17aa0cd19138a82858781bdb547d2b31f9fb7616ee2cb6504643e3eba9a4f44a3f5b94a3eb735accd241c9e80a7e48b2d7ad93c049fedcd5509a046e8ed9bf8a705007d35639c817a75ab6ddb16222190d6528f50dcac11a5330f960757550a151ed36330e15eb159f2b887a22213771ae0eb0e36e769f5eee47da2a68afe4212bb6a48756fdfb3719888dfe0f0cc7364c48c60d4d4d0862002fccf6b6dcb446b859e5ff0bc0391b5311be93fe6bedcb1d32d
+Entropy.4 = 1259034167d9ffaa984fe6fe78fcf3a08b9e021c3aff60533a92ccdb8c467ed7
+Nonce.4 = e84030f401b889df42733d0cfe2eb3a7
+PersonalisationString.4 = 593097bdf3eb3dd8a425c961ae8be3ace5151ffcd9526c76c9abb4d07dde8d13
+EntropyPredictionResistanceA.4 = 37d228b39b34bbe443eb20cb521c231f00a2a43ff0614d73b19013b933af296d
+EntropyPredictionResistanceB.4 = b71be4506e15bd2f2953fe0ece1dcb1eb59a6298006778bd7602a6a97a73d15f
+Output.4 = b1835cd2bec2d14281debaef62a63211bbd9548cd6c23d51d6b018015cc00cba55257a53dc2a8ca75bee9cea1215d618a63cc61d71affb1c7ed54925c6b3341b015f7b2f06ada08bf038c9730648593c9863a657ad68b2877a5a5615c3599deb64cc245a319165f9824f4d495464e75deaad14c102b2395873f6b967ba86d9681a6f2574213a7ae79005b9cf17448905245517e4035486e55e027512c40dfb21129c82ee6090f0efe809152274dba4beff97495d6b487d21e43a98434385d2d4
+Entropy.5 = 2af2dc31324cf349d8d8a735c2e0c8f8f0fd0fe2d2e64df93de1667881c6866b
+Nonce.5 = 0c5b03ed79929b7758d9d7453ed3459a
+PersonalisationString.5 = 41e57eb7fdac4aa240c06921ec6712e98d5b0b620adeac3a5d96218c3e3652af
+EntropyPredictionResistanceA.5 = 01ac73e0ba22ce7c6286c970b3a6aad14d3f7fa5ec0f77cd1f3dc71b4aceb794
+EntropyPredictionResistanceB.5 = 5c6d8a4448b4934777ff68c9965c563a5229e0a3baab3c432662f58124514074
+Output.5 = 056567a90e4454fb10964b678b3db27661874b81e789247d818ac634f7e5cfb832bc6f474a2c562e924d7d74951863c4985fcbca2f2dbaef6278c7b7184f1759115aab88ff5071a6f466c28a6760ecc86be6eaec7b7cc90dfcc03787404bde36cab5511f771cd27aa9d11013758a158753aa6b9d2b6b7159a4193839078b00470d8f44172322d55a5b37d74eee6d69f35a4d907543c9b89287bba051e4eb7101e52d029cec4246d3a567debb7fdc638129b60e9a91bc957458e0417ce175c569
+Entropy.6 = 5a92ba57c668a868fbbfc55e548488d569a12ace8ced60f21c422d8663b04368
+Nonce.6 = c23589fbe8f298c13bd6aeb3083c0a2a
+PersonalisationString.6 = 1c4f1b2ac2091bdebc35b26656d4981188c2a090da44ea9cc80fbfbf396eadb8
+EntropyPredictionResistanceA.6 = 3d1c14c1142b283535350d59a425650f9ddeb26604aebc734612c890b0859d7e
+EntropyPredictionResistanceB.6 = 6d52c6e70bd8c2112daede01b3803a153d6553eeb2993efad2896f3a616cb713
+Output.6 = 2e9ddf3878bb90da40397770ca07c02bc2713899f5f14b925c5336aecec29e0a3295b5381f75f121f9e91d28ff3d4c0a54d0f52b6f86f1df3e389fff815525267ecc414321c72dd3b9c58c7f165f24257d0c15c564edd9c474a287c1a3fc8109c3290a058e449bf83c60d4b244acc70239e74c0db35946a974088079cb9047fac68cf52a6dfb660e32686f805791a538aaef342c25e2ad06280f87b4a497c7c4b846501635d78cf6d1a15d4022bd1a71b00dce16427d7c75f51b0f285ec520c5
+Entropy.7 = 6e061fba024a1d1010eb3e8a7aa8ebaef3a82d48bf615cba2f2a6f060d5f39eb
+Nonce.7 = ecbd00939df8592368c6bb5f9abbd823
+PersonalisationString.7 = 7bab27f3be41051b3e430f784052e30b084ea3f7751975cc7858133d6b69345d
+EntropyPredictionResistanceA.7 = d6d26e8c4ca99dd25e69c6f1c869229f96d9dfdc9617625b22e92147d6342bc0
+EntropyPredictionResistanceB.7 = 396355a8397c7c75011400b2f2651f33d30c7666bc594e2f1b37c31b86e15969
+Output.7 = a428418b2bbc538c9f1d628b60311dc4df02195e841149f64cc529e5e29f579727ff69b98402133c6690dcf49b7444a881e6a9c6edbd09e477859b7e2d476ce961d83db00dd8bb4bc0d44820d64c19d966fd18d714fab290a948c7abfd6a2e5b1674ec1823810610c5992218ffe455f241c94058223d6fc92ee358df2b767b2f7ef3e9c8d5d643e29316c5002be0e8813aee618645edec4887efc9a828c52c25cafb87fb7c7767bd723366cf7a6d67a72c6dc3b9bb619da7f1f013830cec9990
+Entropy.8 = e35158e627a51be88364ec28ca97a11cac014771aa6420777635578164188cff
+Nonce.8 = e6d8922552792bc9a3055fec1775af0f
+PersonalisationString.8 = 0f598cfeccf9aeee4f26fd2979e9272a9528fa56479a2b35c7b196853c0c791c
+EntropyPredictionResistanceA.8 = 9b62c02a10ed00ca8eb6fa4c4d76108413c01b3732e92988bc0a898d6f9f420a
+EntropyPredictionResistanceB.8 = 7f2b3f556f05f53f9139e6db3b988c48a7846d5593fc314dd6e1c6fb2b2b1caa
+Output.8 = ce26fe66c67080d75a50a11612e943728d778d382917fb2592d872f8c6e857515212bc66df8756daffac2bc7f68329c872f342de47982ad134e8ff2335c12aea77b8935e5f5e4ec5d7bf730f44b63d5356e5b4cd155225ac38148943bc2e4dabde360b1b0848cf5a338ca242abbb28181e6c20f4a49e934a2e97d11f793a4e7a7399741817eba780e6a9fb291da430e5c40d6f1eeaec20e688f47e3c98a49706d739f9b4e75468e8bfe63800dd25ef7705e701a1661940f090d1cc0a55c83bf6
+Entropy.9 = 8fd1cb91d99aa3089e0d4808587f7bd791e21122606dc554b3ffb7122f0a66f3
+Nonce.9 = 6da8e1bf98167cb45e3986dc18f1d5a1
+PersonalisationString.9 = a5bcb878a90115b1ce5b835f0d486a23b033348802557058cef78252f945606b
+EntropyPredictionResistanceA.9 = b3a871117312bd86e7331edeca51260d8dd96009e06bafe91d47a544ed58a969
+EntropyPredictionResistanceB.9 = 6108f30dbea2ddbcc83c41eab6644a881c6215b1f6610c6fb1b507c2b121978d
+Output.9 = d67d7e96ad78439173bf60c8a2deb1d2f242cafe38198beba123eb9d3a7f0000a54df939c5e2b7d90670f0f0b6253ffe18fa3d5b64b9e0fb14110e09e74cb8fb8b77e0b6e0babf17484e93ee0137c790ae184510469f9eadef290f4580bbc3863bd85a331f54359fe2b6a41d6f080d16bf93aed01b70a4625b92d4e727676ab761637e19272ed46275d8b3282956c5432f799fe9d3a273a85ed06c45091e7552a7acf88792d62d454b9bde356562417664326a0550a0205f786b626cfc5904fd
+Entropy.10 = 82ff90162e14b58631e0b1d8d1157dcaa1ab20f460d42eacbc305a85c0c1ea0d
+Nonce.10 = c12d74b2cbc29ca7c51210e43dc054d6
+PersonalisationString.10 = 4d73114279f67a90f0db970ce606cd204be49f78bf808476bf3c0138c6afe071
+EntropyPredictionResistanceA.10 = c508de84394875479c2986ed3acb1b9afa0db7a6645bc4ae536df22bd472c958
+EntropyPredictionResistanceB.10 = af538522f9015e009f103977bd998ef96b70dc833511703136b6b9b6fdf2176e
+Output.10 = 4880a19a75bb8c957bfab1aece4e50ead2aa3eb3b3a47b7dec0aafb3e11a5b6bbbc4b93a231cb1a5757377ee775550692b8c190f6c2e14761f5b6c65fff9b3e47461422a27690c5295b0e4dcd28f3b9a7f5af6855b0e2772892700ea635c24a90c544e98f15074a532693ac57c88091ae62c8545192b9d0ba1ba5ff39476513ee887246b8b0da86c91d87a83dc1282d0934fcee5b1e06b684dc5e88d2ec8c017cdf5b14bd0e1aa2cbc7048b604e73bca2634f8200fa9afc308cf622757fca347
+Entropy.11 = 3e38591a73c741c58584eb4c6c1358f2f21362f9f3888b7effcffcab923cea05
+Nonce.11 = 12b74512480d6957f8e101cf3b6bd58c
+PersonalisationString.11 = 82152b7e35af8a784ae4012d797bac5544e697380ab818c4be3a8107b5b8b048
+EntropyPredictionResistanceA.11 = 1f6d1dcd1119915d79ff0c69227b0969af8cfb311000f3ce83bd8a32a549bc6f
+EntropyPredictionResistanceB.11 = 4009bd56434a7fda7200d0f0276e3bdf24dae0f9818cafa19359b66182ec808f
+Output.11 = 6d7887e477b2298abfd102768399ec036acc3662ba2fa4c0f86f21a31dda892fd9fefbb2fe3a18e867ca4ed62b62025969d778af89aa8a08e352a30f3df5f89552285e904a78ac05eb7eae4d8b15141c1c3dd4bb93b49fb5f12767d77d4d1ed997c3a0f8a449606d86a16d7e95a7b50b70b47cf6fdd7ff3955d827991b2659293de7f8f31f451d12647e96fd4b35963af2fc325463e2b0ac0fc22888f7a9bcb6ba9325f4331410b055acacaf8acd8c81f4a398aad445ddb9f92f5c777fb5884e
+Entropy.12 = 2a42a1b24bd7f63c72875c8f12aa343f21ef05784ec24219f7248b194cf221bb
+Nonce.12 = c82de4c06f01e339b4c52e52812ad30e
+PersonalisationString.12 = 5572bb9259b8e52b952472e562750c7070ab7c22fc232225734da32d8d3b8b34
+EntropyPredictionResistanceA.12 = fc8c02fe77e53f126c275778b511de546b281c50a23470b59f7d707912f56ffc
+EntropyPredictionResistanceB.12 = 81ca5a8358b5fe145ec1e092ef4a76bfec9b625889ec931effdc262139ddd656
+Output.12 = 8a72744fd980e7ef5cde895c4449afd1d596cb8607da6fd3949dc6df89df34eff1da9aecd2ea8cfd3c0a0d01037076a7f0752e7645f9c183c3dcccae6e8f6764c52fadb5f2b41f4d44af927f1053a16568aefc6b30b24c7aaecddbbf600ab2d2c3f2f60505c2546b07d833a7baa49a6ec8ee16b95bc02fbea8d50cf3042810de87bc9923a5c21a1be0e2279665b42c6528a865b09dd16a939a93fba1cf698ae80f42c65d0c56bc04a3c227d62c387fbb9bc07915158ac9c689ba7618a39d1d01
+Entropy.13 = d90c89d1568d0833c5462a15187700229707855b5333626b732e21a0ec4bb82c
+Nonce.13 = 7535cc2877d6d1ab2588dd8aa242a706
+PersonalisationString.13 = 39d372279d46213c07d25a70b87b64e94b1c2503e86d10704c68fd589ac9b6a1
+EntropyPredictionResistanceA.13 = 1df07da59caf33ed3a75bd0064403d8f7bc7eb800bbd2ec88c578a10166b3c4a
+EntropyPredictionResistanceB.13 = 9885c382080c3fabc9182d280d7d7aaf9acb6a00273ccad1cb1537fca4e45a10
+Output.13 = ffe96b643ca461e506bb051d1cd842d251f219df65142d572675e1c702ee5368c74020e0bd3b7c0808bfd229ed510e3299f521923ed45d444bc9a5f231867bb00616da23945f879463a16e01b302a45613c5b55e42e0948b64fc447db290c9c51fb674db6199ecf007f6176952e09a3470234dfb88efd8fbd02da72b839e5009e7a95a7f49289b52cac798f7cd49e792e7e5d33784ea1908d9735b0269e4972588498cb787d6329bf4bfbdb3b633a8042e374e26ff2c3cc9a2096540ef0fb0f4
+Entropy.14 = 7d8b45d0b5f48a4275c0faf69e2da4d2fa464e4b299f529b26753c03e963eccd
+Nonce.14 = 52afa8093ec6aee666d12db4d2ac4864
+PersonalisationString.14 = a90f84bbc91b7d75583e5d8357927f89afe1ba503c4b841af15d083808a85ee5
+EntropyPredictionResistanceA.14 = fd31acdbc71e112a4db2ceff387d4b6db1e7c714e89390c41596ec9e5583ab32
+EntropyPredictionResistanceB.14 = 754a7e0ea6eb9e18483e0ed7045ae6f7ccc6cc626ddc1cc2b317ee78782c6e19
+Output.14 = 978543a7389db3122a01947a9a8ede689a4fba9c0d72b74e1aec38ec6fda8e7b519e5ce91eee5c532c9df49c8a36a64818230c5535d262061e96cbdb9e7bef5d7330a2989c3d3012727a18d2c96931b66f48bb0bf6cefcf783c65b0e094e44b0227e3e898215aa3afa2a71dfd832c6e11b3522940cea0482b5f24a90d12e5aea53bad0d028abaa4c45c54828272a9ce543e8cd7ad10a3daf15055e3999e94a62a7281ddf1dff41ad3e30c19ab8c50c759607203ed67c153a33f52130670d1f1a
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 210a69b5d9b742e1f751f5e0d4e913b1a63d7eb3da7aa2c63d8fe6bd43bcd7e0
+Nonce.0 = f1338c9c8532d17dc2ea064f79a798f2
+PersonalisationString.0 = 867b8396aeb222c28f1ec73c428b07a7cbd5e686caa5a97a51c9c0e2ecf1d652
+AdditionalInputA.0 = 1217c8ebdf7ed2613fca328e55bd54d94bdd648a1ce7d82ff848a2d3a4fe9317
+EntropyPredictionResistanceA.0 = 01235e05d63b3d6010b46685c52a1a08f5ba2e148e4e6bfa99b81d66b6c59e67
+AdditionalInputB.0 = 4ded95403681683783765ebad23dee8e7e49a0af39eb1b5b1b483f2f87ff3652
+EntropyPredictionResistanceB.0 = 1b77f38cb91c8856ac875a607f80d1e733adc31bce5bfc88616bf105f73668cc
+Output.0 = 36c5afb9e0301f5a2ca1d60bd25db23219c07c3a5fbd88cb92ccca478b9387a58b3552645712f822b9ebe19d47cbc5148a6be5cd4757b979fb68790ab94c117500542c12c2ceb833897e86aae3fc72b8a7e9ed122ea5fef71bcb12157eb0bb542515f9775e86b22e268590b26110900af8c8d5fdfadac5b51e99a5cb09137c59df015492f2d6075b8185426e6478d088c484a9a38f91827c614b2d0aefb4848473d69bf92a32970d2f937af267ad87839f588550b07125a5af17c2c674dd743b
+Entropy.1 = 0d1c176ff2be3891bed85246e5fd1e02cd715e52615ddeb98c121103b5fbfd1f
+Nonce.1 = b94bcc783a98c5402328819e3a937152
+PersonalisationString.1 = 208f362d2cd2c55e46e3a75a147d7361c6259d857f66f94188c8b4d59774e48b
+AdditionalInputA.1 = f9aa48a65f586b968144d2a88841e3a19d4dd2c7585605ed5e620a20e09af6b7
+EntropyPredictionResistanceA.1 = 91736e5d13b273f461ec84b7f90e3ed7239ceead7c0732adb998f751d93b89f9
+AdditionalInputB.1 = d73630287eafb4b6d8527e3c546d989e5a6fb6ef4b201dfceccf9a56adc00a39
+EntropyPredictionResistanceB.1 = a038046fcd1203983b91edeb46033d34f5d8c56f1d6088d46d06b37f8b0916b7
+Output.1 = cb1505b881cf81bc35470ce80b7fbfbc23bd90368f219f807b3118a38224a03a94293e551b0dc3e1a96755a02afa8f5526b9250f6f50895d13d310e00fcdb47ae5d48ee4774dc6dcdaa1322f887e973ab04b614fde3cd547c5def2c12b6f27542c1a3301139d97cd09e309165d83e75c9e0e23252b13cdfbc8a9e531434fd7d3e44643362eac1eeeb1b0cdc8dda3b7aec242708334dc24edf74d6eca03635afe8eb885d8a3997888cdb2d599468a993673419b14e7292e89c1601843e99decd2
+Entropy.2 = a86d7f9ff891d2352bc8b9fab06f3e2951b5224101b736c0f97bf0bf2afd754d
+Nonce.2 = e3faa8132ab03b15b0b31aa372019e45
+PersonalisationString.2 = ea11a8d913622f1a835a60cb4ffcf00dfec49d87715b42d1c46db212c91946e4
+AdditionalInputA.2 = c53fc0d863b021f6624f935ab02f42f4fc5c33b5c207592b486b16af9c6d940f
+EntropyPredictionResistanceA.2 = 6b96288df16ba2ac8b648130d4b35fb1330f357aa34b6197852b63baa4487ec9
+AdditionalInputB.2 = 137f00d0008933c6d4bb6529ad675dd8cb771441cc5c900158834d732bba8510
+EntropyPredictionResistanceB.2 = abfd3266f98661ecc9bf0e304353f99d47eca5c9e7b4f7f9100cf9a2a2abd589
+Output.2 = 435999af69276011f993efb1c85b608ffaf966e1f069ae85907b9339b4b98b21885a80579cdb5d7fc322b9707315dcb3ccd5abee88b3296cdcab1e57fe60fe91132f2ad764b057bd340a4745cbee6f5c6ca2701d6131dcc02dc098acfbc24ef591a2684891eae7fc5cbc517e40ce741704a4f8e53b3e2396409ed83a351136b81f5904335e04cf8d82ea78e64afd9ece3e7bc5dac74b7ea0bd696c74e167bb237e231af64098d7720cdd1eeab63deb43a61629df697e2b4a5f0678e1e4b3c0ee
+Entropy.3 = 786778b385750728ee49ae5f182c1527c82b35b05e087155660414540354e57e
+Nonce.3 = 3c5bfcc2f25b6e5d0d1f2b424ed54d97
+PersonalisationString.3 = 039d8e5d87014f1dee13a14e39761e00b86ed5278d00b2851f7fa1b72d72619a
+AdditionalInputA.3 = f094e64889f9623657eea131467f3489cf44dacad03357379eba6356fd1dbbb7
+EntropyPredictionResistanceA.3 = 059335acf8f9dc02c6b19be650095ab551ce2549a2703c109434a90d5c58ed12
+AdditionalInputB.3 = 8d2becbf6a93a92321f3b176013897282abf06a1b6c73d4d051aa8989538ab0b
+EntropyPredictionResistanceB.3 = 7a5b87599ac53144adc2d38447a5b964f9fe7ea0c7c65d1372efa3edec3c1c97
+Output.3 = 63f6a2755cbe2be5906a5eadda5a328ee07c81c0f0c4318a88e9398251e5053111e9ab5698b5791d76014de012910dff6f00ca7d44431d42fb4d63c3b380c45c63cbb47dbb2c8a0ed481cd53b84d4cc618f3eb6d41cb72fa1715a366e429961b1de89ed05620cb036e2b70a266ab75b87e0801f282df0c1c963a399e0d0131fa60d19aed35e2cf19305932dea16ba342bf6e994cdaabaa040c09c52d4b06734de32cde2e03d872065b686d8a52a115ef3d120dba2dcc72af63c3ec905aa7dece
+Entropy.4 = eed1e5e74b8f99e969d05f1e9f3abe6567cee3a1138df1c1771e450da90be105
+Nonce.4 = 2352a6e7bf214f1879ae62901bbbb7a4
+PersonalisationString.4 = 2a340e0fc2d4691a9ee7bb51bb49edf4d26501257d2084b5c5ee414732d81c71
+AdditionalInputA.4 = 40fff0c2fbf796e327e8f1fe034ec2455ed5d4289000eb217e52dd0f1b382397
+EntropyPredictionResistanceA.4 = 082ed1716ccbf6bb02f1aa941ef3838ef6748b951ca45c29d4d1a34ec02b2a89
+AdditionalInputB.4 = bf1a7a816a3cd9c4d336a8fd6508b7984bb00711d1d353714262c0a9a2aa56d6
+EntropyPredictionResistanceB.4 = 3033c95795d73a79d10ac82cbd7fbbb461c5e9ed728c99874e0ba3da51edc144
+Output.4 = e22807f68457831b37fc5dad1edbae4b1c8b7462b48d3154f161e885ece7cde50002d89ae1b08ebc889113dc0b709fb6def5bf0ac00612f84674b880ea740a16c7a85f52da7243c37e87371f6e5b1a4e1a25def9783a1534d495d0800be0573d8b4a92b4e793fba3df81d5b136b67695a71134bb165cebd0440f569d842b8697c0e06e1640d403f3dd284554d6eecd0bdb431196a6189e684dd30dad244391c646c5ea3f24421f1392e312b3905b61dac019ef5080aa657bd01993680d2fcf3d
+Entropy.5 = 5aae2fcba21ba07ebbe2d4efb9af90db4a99f8a1043b9ea9218f4b8991ed257c
+Nonce.5 = 9185139eca8f28fa16ba6add0524ac0a
+PersonalisationString.5 = eb4b24b67461309fad8eef4bbfcea7426c376708b3d3d900c0d354126fd4f5af
+AdditionalInputA.5 = f134dbcdee4a517f2b36ac2db6ec83ad3e63e5c5925ea81e1594e9173836dd37
+EntropyPredictionResistanceA.5 = 947c3ba36d2628b89b8a026b51e75cd164297174136c9ab254baacb11219e98b
+AdditionalInputB.5 = 95fd9cc9eead0530a4b2d458e28b0aca1a42842ba767f2a290666743c3bb4a78
+EntropyPredictionResistanceB.5 = 11deb67f9e1afc7db55c90ebfd650b3d47f8f9db536ed29a778170472a18af63
+Output.5 = 21eec86a13d8490c12da4c6c6d5e4902cc5c402122c1d78738326e250a85dc6d1a17b1977361eb97e36550c8a820d94d2c2caa54082b0536b8e232d02dd15ed08167ab3bc1efbe8473c9cbcaea960f88b6153112fb4a99999fe623f21b6ad45c6c5de61017b4cdd692ce5ba11a99a1951ade5ce2a049d4465750874fbbe645e6648bcc0e1672482d062a963904ec0005eb898c065cff4f3d790b0597fb554022a1d312f57aa90c6b0edb3ec29b7a282487e6ccbe14967f1a177bf8402e48be61
+Entropy.6 = 580e8969238126a6e8810ba2421f348f59d874bd4ffadebc9ada7f3ad709475c
+Nonce.6 = 755be0b21f9d13bdec3cee47cd5bb210
+PersonalisationString.6 = d007fd2efa5f63abf6b93d5df5daf40314105176bff9cc26f76a3390d0eb4f10
+AdditionalInputA.6 = 9de9df80380a93dd2730b88e75ec642a372946aca69b46ed172b58d334444a3a
+EntropyPredictionResistanceA.6 = a6d4f9a83391f9ac75f39f241632a13ec7688093943d1c1341de68190165705b
+AdditionalInputB.6 = abab15aee95e1a8effb1856ec1bca9e7b585532de0360fe68699beead4d2e9b1
+EntropyPredictionResistanceB.6 = 1c4b9de3e5700da86a8b9348bb88522db580fff3440602752a4f08fc6f83fe88
+Output.6 = f6902d6f3c5cb865e2c580b612bbda8cd1716f9d949f03dff7f34486a0f202eadf2ed5e65df5c679d7eb2330d6a47c5f1787b170cf4cd99abef989b6ed3fc6f6aedc11315b41ab2d537f37499777bf0a9bdc5213c036537eafb24fea033cd4e63d2f447df2ae4e08fdad8e1b70db469215157794d8e077022358545c729f5d7d652ea7fe5daa8da224352dd0482119c75e7e368a73377c4bb346bd5e5fd480bd4a7a69fc5b9b73f9f9996e4e68f92cd727ea0651baf33be69f7918b39e92a1b8
+Entropy.7 = fb3aeed839798e79d623d515ca23141ca90a700ab6a3857c914d336b937ff133
+Nonce.7 = e1b25489cb80053e48d1b56efbd20e1d
+PersonalisationString.7 = e49469f4756a610c52ebfb97521d117a6bcf76372020bdfd4827c42294e42cd0
+AdditionalInputA.7 = b42fde2a97072418374a15d20c5e10789c36b7bb577e93ac4245b877807b0ec4
+EntropyPredictionResistanceA.7 = 79be3301cacab10f3f0ef48382592ff5049d96b8d23a051f79497e75d133e9e2
+AdditionalInputB.7 = 2da0fa8db3be5b1ce846f4dfb3ff7e72ae8c83762ca6c1a07ea293d88dd0c269
+EntropyPredictionResistanceB.7 = bb88e9db0d57668f60b63e39b6c4e19a78128b327fc9cbe9ea31886c4eadc651
+Output.7 = f3bd0074e59f8386c7fcb2b6026a7e099e1a2b4d6128f4ceeeded8242bdf4405da7c07df86abf88a729c6cdddbd7d38a19e13c2aee9c87630184e6c15d92866f78da20f7824d2ac6fc660f726cf5af2c7237fc5c2f9fea3ab1d54d6f02ce62e57b760e48bb9a33be9e94b67b3c7588739c942d6784793e17911b79e542d05a7dc199e2c4f05cf741dccf052da7735bfd9edf2141654cd760df3d6dfe0cbc66d7c3d7e2c0d0001dcb12eaeac70918e452a149d77126d57eeb81c8d3b3e1a2c119
+Entropy.8 = 7f38a979cd737f008d01b71e804090c10886aaf7e2dc8b4b28bb163acce82809
+Nonce.8 = 4b5a78180130d48bb3b7ee0f8ab29c74
+PersonalisationString.8 = 5f7fdbab518941f0553e83cf93b7f248243b70c60d4b4ec55fd10b93d4c7078d
+AdditionalInputA.8 = 3c936941b2eeda550dd2fc2a2288ed0694ca80ac83563443febaaaf0592290f6
+EntropyPredictionResistanceA.8 = f7904b3e9656f4141750821a8d992549ea958ecfb4f0f083a95ebc6d87189159
+AdditionalInputB.8 = e7daec124b55e27b50a4f49a54be0f2977467e820b3e5e90e0e89c2ab01614f0
+EntropyPredictionResistanceB.8 = b9efe7bafd5c0a8556d4681f890c99e94895c4a2d9fac6e55f8732122c0ba00d
+Output.8 = 21a8f16ea3afe73639f16b125185f95a10e0ff66a031f24648797d072ad78308c267b59bc018da421cb099ef00fbd6bd0d69f3cd4d2ab906d0069e4a3f72a375367af2c11da29a54ef7dc7cfacec4d260677356e3d359d04dfe3170646ddb02f144ac99f1c0edea064c9f027b2432545800a69c8c37470ca9910008afd15f0f97325f568a8d3355568be5955426c49faf6040ecb411a8d3355a026e8250f7fea0ed5aa905ab1798a2fa58e4208deb5848d23d99506a861dc96aed8614fca4339
+Entropy.9 = 51141735875524dc772b8afe04a698b971d6efe6ca70acc0afec5457387cffcc
+Nonce.9 = abf315e72d9cf24ee1ab86d1626331cd
+PersonalisationString.9 = de64dc09e36f69bf83664bae9fb2bd91836112d1cec1994db5b893c37e021c2f
+AdditionalInputA.9 = f528f93a442a27dabd840f1ca15f5a97d6ea9385044568a4ab5ee273f64dd8d0
+EntropyPredictionResistanceA.9 = b33ae58dc88dfe73105bf77db0e12b9e5e0af52db30da0d17f80648081ede51f
+AdditionalInputB.9 = fe1d6e4a80faad87ab03f66aef66916b093a69bed3973f3baec74a23ec3bd3f1
+EntropyPredictionResistanceB.9 = e48ec31d4e7c153a92defd0543e8cf6ee8137dd1a007e4198167e418eed5d971
+Output.9 = c0ff0ac209f67a1854fcdef2d08f4005ea11d93f927e33f3b61272599306eaef95bfbc13762dcbab70bdb1a2a4de1856f885cefc4691bfef947650b276b82337bf6fa2d9015418ef35786f39f8c940b2cec91d4abed86266cc629b9613f6b0789a60989efa65c6682d21e6363faa97e1cbf8585eb0f49a567ba5e20504b61a294a3e83e7d65ff105d96648f49c97a9e32305a65449384fa6fdc39f4aa7a3c42507a08c3eeab7efdc9fa50e980acc7fbffe96475c33ff1746151bd9490f0a6c98
+Entropy.10 = 1d18135769f93478f71a7a53635b4dfca95aa0262b15f3d091f452636d095c33
+Nonce.10 = 98d8d716dff2c50c356bbcefabb8fb00
+PersonalisationString.10 = 976806dedb565396b856afb3600e3a0fe92d7e2c313defd042c14d30b688b1d0
+AdditionalInputA.10 = f6f5818e749d1412023ddbc4a0f3730fbca1b1c98072afecf9daca64edd30640
+EntropyPredictionResistanceA.10 = 71ebe3c86b4fd3c1cf78b97a5eb86b794a02c183283170704929752d07ce4f5e
+AdditionalInputB.10 = 5bf5cbb1f73888b82e5ae8aaae57e0b095ca6ca440099515226b74bc92bcde99
+EntropyPredictionResistanceB.10 = a895d2995745cda48b2a85a15f1e01140a85a6f01c06c4296e1be6be69bcb6d3
+Output.10 = f86022218bbc125e9bb14082d49f9c9fcc60460d3d2b39b0b857e0444364825c74db6ba6999fceabdb055cda4f4d8e4aea6e46a9ef4f52d3a7e9d7deaa51a7ef2a5d9c36107bacfa65f66ad16f2e3d91feb6e08535a04d0d6f454f80e234f7b730e609f3dc3d4d882f80a1602dff7b93d63076c4157dee29b68265185bbd5c7322712cd02f8dd35334b205395e16522d9f3a2fb047212de5f271ca84dc808d2acc28f0492b96c5247b785a5a8eda864ccf8bbb6e0c765a6ceda20cf883fb30fb
+Entropy.11 = fa490ef7922fe48d03606df34f757e36ff7ddfa3c312c46091366a1122ecfaad
+Nonce.11 = 6f23b44aace4c242b2244ce171195e8a
+PersonalisationString.11 = 9b129501c3e03f78fb9175c1712510783319ee272050a364c761b811eb494b80
+AdditionalInputA.11 = 444bd0add6002d53ef0f100797c837bc68816ad610c2251ea7fa8c3e28623558
+EntropyPredictionResistanceA.11 = 6ebe217043e4757632194ca17cb7a949a68fbc94738d570caf294bffd3dd4faf
+AdditionalInputB.11 = 5bdcddf6152c563acc5dee76fc13fbc6b35878535ce817732b5516b5ec36e876
+EntropyPredictionResistanceB.11 = 61f4c0d0fe44d4ea96b1151dc2e95f89da7d3b28058a109225faa1a45af818e4
+Output.11 = 2495e83cae3374c5416c6ba05c9df3a0a26209440b46654ed95a3ad047cd53edf65225e4658e05f7c62ee2d1f33914785643ef8e8596d042368e574006f30b6948500434ec28f0dcad4dbc9aef6e1227e9ec645487c0e924daea00bc45e7c079909d5db959a9f62e94b804c0af001d7c02edf39afbfed93c17533f567f76ec15b78998394d640326e866a9874134a1423d5a37f459bb4b27c615b517b65fc2c0d65ff44caefcec1fd5cef3a18030a25e2449cf9a6779304c11b4151b90b0d9aa
+Entropy.12 = bce3bc46a0cf89ae17e9d41034a78a9c65340d1a76690c2e4cdff1ca63051c01
+Nonce.12 = 3fdb62cd2dbdcdd1b0f9cc07d70494fe
+PersonalisationString.12 = 1763ca81aecfc8f724b70239142de88fd513b82d2417f5ba0136787d76aab10f
+AdditionalInputA.12 = cf7873f19241cb7cd29282b78fe0a81cbd1ba920907bde9a6210fa7a537db510
+EntropyPredictionResistanceA.12 = e9b6a025695e34d937f17ae2fc4893cfee16cacd9b7a8562b6016e54e10afcbf
+AdditionalInputB.12 = e26a476f3a0a5df6e8fa6a80f234f612f64bff72c464da295375df5d30d12099
+EntropyPredictionResistanceB.12 = 1e364c546f77a426ad5f15582a2d6ba03888fbc5ea3431d336ee8f42676c1bdc
+Output.12 = a997f19b8b5ea2998c4b5602b5de2b0dfc7a1a03207d1a2914869475dfbe886b6c940a3d17993d4a578ab041bcc138c8ebd2c2ac993acc44dc6d619480a746c3ca2503e51dcc28f9854d2acd022da0e9e4048d99978cbd44e0d52a7a73918e74bc730e2a0d3e12d3f45d866e8d7ecee17109ce8b851b1927ddf334c8a14e64de2811485fdb532d23fb82d12cc8dfc2f350cc4241a1454a118f74cee21aacacbe4e05ed901f9bd26f651199a79f74b9754e2b65aa18a71e3504f8aa37bc825228
+Entropy.13 = 22ebfbfede1185e0d86ad915c59f48825585771eae8b073b6f45f395efa873a6
+Nonce.13 = a775869998e8bdfc6d4a9a04adf91f2c
+PersonalisationString.13 = 082bcc642ea7f3ebb27b27dbd861d7c7446fb6d630bc053d49e97f2fcc04af9f
+AdditionalInputA.13 = 98da1a284953c39f730f6283db5e9d1dbc51bedb2ebca702a846aa15c8508bc5
+EntropyPredictionResistanceA.13 = 42977f5281d08683879e23752bcb46d049489533b7798e06462088de6fa93484
+AdditionalInputB.13 = e16fd282b767a0421edf48cb5f3ba63392b6400f1e3da2d44585fa225c87700b
+EntropyPredictionResistanceB.13 = 6b91c83a93d658cc792f48b8dd8792ad5b3742720f473b0507b30e7123c0f8b5
+Output.13 = 38f24cd7b6e42d889c81a367610ce9183ad3a74d755cab9ef43ae22a6ca4b84b96dd80ef7b6066450cb66dbe6eb808afc9029254286fd46730fa67da458025321b293a2f30989466075dd393466f1b23f7545f11132621f0e18c0b8637e341bca5a0b37c94b49be15f7dacf2dd4911bf9c9dd064f70f43b95df70057039c0fefc03f35344be5cedc4c3c757b6c408c8da10955d23c1d7341103ec9bad4bc464c15d9427eac9270bb1bf559f2065743a43c37a1ee7be37d5c62bf707c944355cc
+Entropy.14 = 23557e4b9315322a11032c93be0939340689fedb36aedc08b4b0dee06f8eabf5
+Nonce.14 = b1eb0ddff9bb294c6b9741e7a0eae758
+PersonalisationString.14 = ce270424683444a7882388f2e8ed29b49b60a57496479f8c5a5e68ca75838c32
+AdditionalInputA.14 = 9829593fa75aa467784e39d98e40d2f6bb87fe907e3bbe03b893732d789ae0f2
+EntropyPredictionResistanceA.14 = 8184f4f10e4432f6892afe99a23dfde0fa06b5f561e7c4ae596ed3258906b2a4
+AdditionalInputB.14 = d56dffe6e68ff34c828ed6daa6957db8f8f1eb0683f6788ebc4d7ba42e64459d
+EntropyPredictionResistanceB.14 = caaee38a60aa69e7fbf710f0d03ac18ed70bf50590dc7854e2ba78edf2f6a826
+Output.14 = bd2334cb3356a211a759fbad57708e815889f3961b4c6a0f5475792d1f0db772af058bc44ab716d02f11e37bbc74f59ef046d01f99056eb4366435b23bcd92f5c761d22551e66ce180defd47fc43afc361bb2ec8a3c92727bd63329f1397bd5ac689709b529fafb7a8a70437790384213a3f1b27c6086fee25cbc3c0a2874c8a85dfe7022a5ca7365e9a715bd0904dfc999eba168466766316fd196a1fa139e37cfa30be486b0fa1ca03602becbbe97869535913b1f9e00b12f4f2085794c0d2
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 6329b2cc33e72652d6293d50df43af367011e78da75ecb5a3a2b040404dc2e59
+Nonce.0 = 31b952bc688d9dfb611526f058ca3512
+EntropyPredictionResistanceA.0 = 139e7b13ac06451e81084c3af3ae46c8b640120cbe68b4ac94a5ffeb4d51a95c
+EntropyPredictionResistanceB.0 = 38125ed3e1cc35857afdbe8ce7771ed5bd9f38618ff8d2214c77cbd63c3a211d
+Output.0 = ac95aadee1d35afecd4297f7e744086e6ade2070410ffdbb852a3341980a5ce78061de61f8f9708c66439751844103385235c9a1384e4e6344b481ba9e09ac01d0d44cba192e124f1b8517538200edb78fe1c6616a487a386027518443520f526447db1a144a8c16b1b97f949f7ffc8261d3ae620f72ebb7cedaba9bdf1e1747093ad3e0a39e6217ff0b9b79a1eb0188dac0b45a5d9e078663bfe217d5cc50bd625247a0304bf553e4f276e44d68218bb527811adf83bef9e915661774889997
+Entropy.1 = c96bb099567743b5a7b61a357600ded3040a39007507a59dbbcd0651574e12b4
+Nonce.1 = 48a64674ddc504eeedceb6dd7b8b5012
+EntropyPredictionResistanceA.1 = bd3919d3331590d710565b4f54b5dfa8b44b0027e3ceba78ba6fa4a7d55d602e
+EntropyPredictionResistanceB.1 = 38954ebde2ae19ba6cbbe1b143ab9bf419c5baf083dd67b09b612ff73b9599f2
+Output.1 = b1096fc1d0d694e7804e912b865cdba944b13103dfe2744893e5a92e132c69f430d786d3bc7dd5b73b2260b78f94e7ce9e37810a5da4a28286e58188fd4f9921bfdb099456f7aa1194268aee22ffbc576041bc8ff7dddb03bbb47484747d81bf81a19c46db6041d46682d11a7896f4aa68fccb10f896bc3019a13aad62d6471115b48f22d1ed1f0ba416c0eab74d3763ead99c3d60ad22749df75f98140733c59f33da6874afdf4a54b246aefe9aa8c4a119572ec82f885214ae4c3a4d292bdf
+Entropy.2 = 6dd7832c3c61b176fee2537962880987dbbce4b06d8b1351749136525a7f1c16
+Nonce.2 = 26e2edec7e8dcef1b44d6c3b70126cee
+EntropyPredictionResistanceA.2 = b64f817d077c7fa5dd607109bf6367f2b89b6438573faa5f4ae3c8e3cc2e829b
+EntropyPredictionResistanceB.2 = 35dbfbb5eb83fcb0fd858e964a5ab23ddd9fb49f11bf05ff2ac78fea3d995cb8
+Output.2 = d2fc75817fe6c55c232f3b7b4def82ead52d09df40fc0e735cb38ad592fa214478f4543ce904401c1becc9afa76dcb4a916d32b9c63d82088bd71679eb3393a7ee0c08a4523e8bbbf4cb6b1410fe78083885d1a640a0bff656cac2440c5585eeeecb067637269573be289c1fa00329efa4fc5b6a648de33604690c3965aac37bb9925c554b69f07ba8c2383880961d3d33f30569ed73eac5e0fe2e5e6bde441d59c13a5ed47faaf37deb7a9de3b425319361be27d74a79eb36e1af050d29dabe
+Entropy.3 = 8e224d0507e5bb3f8c8d48b346b59085fad7816c1408782555c9aeb960c36618
+Nonce.3 = 4239a5595e5fc939c8661e6ed16a8ab0
+EntropyPredictionResistanceA.3 = fd72fd42dc9b187eb156f2d3bd8164f8107ec3e35f5cb26fe8fbf930a0a1ae5c
+EntropyPredictionResistanceB.3 = ebc7bc06c5bdce323a2ea268c4123d399e21d6305e019a461338d86759a2f96b
+Output.3 = 399d928159a0e9c35f56e7b6389271b622b3eeab0842d2a25acf3b7a93de87e06a723ec46ab8fc03c908b2d3a3d9b5e963aa2580bb21fbde8a798b166aee235fe84bb5bad9dd9cc63150e6b2f898d2c00b8988dcd1ab2e6f113bc49fcf205c0e67a318489a4f9fbf614d6e801d005d260170433ab01ea52e2f1719afc59a9d6b96107b8880c93708b61d0e56dde6dbc3371f40cfbf9df09eb87150e7522dbce0e693b55c05d754d60ebd25925443fb88f67310e83c98112d9f523b2e7feeeb83
+Entropy.4 = bb8e71ed32983efb293b9d5475af5b436a2140c4f3062703b7c1899f83056faa
+Nonce.4 = 78bf2444acf7d2343a1b4831b1b77e56
+EntropyPredictionResistanceA.4 = e4d9b52312de9e2fc79d76c70456b017b5d8abd4bb833c22dfeff52ab6f6afd7
+EntropyPredictionResistanceB.4 = c388b7ef286267f698eea5a92644047d1f50947ca9a21403d3eaffb528cf61bf
+Output.4 = 76244512380295a4cd41209cf5296614d912f178906d75ac7117b78c2aa5c5a8ecd77d61c2336625941308ffdc3fec2255617b160fb26e5e8d0f2fe114e3c23591a497817131291efb793b75c54a5188e58c471527d54dcc7ee790a82ce1718a1a2c70a61d9e2d42a1ac3e874c0af56efce7e0eb5e7ab0fdf95227e4b426ef6e72b7b2b9b590f19171321444446abb77dbeb0780ead791601a08349c387fafab5092426623bccb3451acb5cfce840c9fb76c85d8ef26f240901f2f04ba2f6891
+Entropy.5 = bf17d51adc10361499bf7a8027f1fbfe171d02a13ebeded45f24c9762e9ef47f
+Nonce.5 = be92a7f8877396cbd132cff46f548279
+EntropyPredictionResistanceA.5 = f5253c10867cbc1c7c3715e1e1b2b3b791206b60e74eeecc18249d484429a3e7
+EntropyPredictionResistanceB.5 = 8f37c99829299b796affa487b8a01506865e8d67781b10a24e693406950dd79c
+Output.5 = 95cade8857b65782c39bc073d138faa63018442c258f5e07ae923ea4e0c9b6506dfb5be282c1f341e69b49d59423dc44f013d354681a5172737411dd1efb98dcc9c84e0d183e1df2d5c6c8aa92bd89a6cea007e58c63c247f27ad41743cf7816fe43dce8499df5209bde755ee06c428667efdf9e385df8c5b363afc590d6cdf5bcbf8479afa5ae0e4537ab7a169f7b4bb2bc6acfbc9b9ea2cb5cb4d3df9b963decd2ed68ad47900c78cec49bf3b6c7ef3f464ad01b9b2b98d507920a0f9f3f9c
+Entropy.6 = 5f18c9f0a83ff0ac8aa61601c3e8dc6c63f2fa16e65020c2dcb038b446b547ca
+Nonce.6 = 8263bed772c99cead74464038d8d97aa
+EntropyPredictionResistanceA.6 = 10f9147848ee86290df4f7da4796e3f9e2b694862d63d6400beb2c1c9f6a8a25
+EntropyPredictionResistanceB.6 = fa5d04cd51a278deee79dddb75d36d59dfeeeabfc423ff53b82620f5bfb2edad
+Output.6 = e2f7aa62e852dd4b4332ad7bab7b86696b348fcf16c4cfd16a27ccf24e14c2f09e113ba480a1eaef61f1b18fd58ccc9101ec969653b1e76141cc4f83117bb36a3d417463141a5295b12a59913422bf02b9cead247eff73cee11451025dd9a42fe51bdc55b7aa4c91c471ec1f333d7fbeffc3fc919cdb3de575491e5034b32279986a9f1986042a7bf35d52af7b373afb8703b00f8262a8fba9e708b22f08bc7c637bd8f45d3b4f8e8e4f16ab2c6e4d107c112da8c1b6e2cbef312c31b00e2f7d
+Entropy.7 = a73a89b1456fdd79d532a0bcba7bf041a06ada70390efd492bd110e86e78133e
+Nonce.7 = d18ee1a4331ad08bd340d13008267682
+EntropyPredictionResistanceA.7 = a0d2f3efdf164bc301594a9ec16ddb5b624b4d22f2a212f9705735b63b01fdc8
+EntropyPredictionResistanceB.7 = edf39c6696947f2087aa701695e16f3ae996f5972ea86108d76c0bd77a4878fa
+Output.7 = 959d5ddd2fe808feaf268fa9a5579aebc21338c12b0570ff039a5e6326cbc27a57ad9e92ba528491975a3422adf4793270e86d89fd6f43ea0625e4c608140ca08f68cafb1597c7380e0e5f89a738290fb4c46699aacbf548be53eb0f633117dcda903cb8bf7373c1b8c4e7d47d19b8a50c28806553cb7da953bfd26c4c6b32a6f451997da08c589a55b4f7ba4868e89fde9408db8b3b2e5b7d49660fe644f762807780daa847dd5588c0935c36c16d70135f5f9a1fc5abb4d533247fa3daa812
+Entropy.8 = f82d2b3b53a878f310b587eb9ca75ac9c034d8aed095ff8f96782731bf3f5c9b
+Nonce.8 = 884e26e8b5340bc059fc5230a7d1aecf
+EntropyPredictionResistanceA.8 = ae478ba5583ad67d478ed7df23ca448f00426beaa25e5db1718fe0c0823d0ae9
+EntropyPredictionResistanceB.8 = 6a845afb7b776a0683382aead8753190bbafbf564dfc24cfd241972376d50214
+Output.8 = 55b0a488743fc68bd3368f05e0822a43c8c5ff8ec84ecf5b66c504ce951ed75281208d0ef77080cb6c788f44ce3be69f82c72c64de6cb5a6b728a1095fbfc264a5171efa34d36fa6e3a03b4ca0750b46961118ee91a46783d1685656e32f747161cd71f8dbf02e0d6b6acf0371ebb3bb04a21e9b661dd931813079fa7a3d16ff75386ebfafe63fdf69e27482887cfc31ec975f05e0a7e54b22721440a795bba34308f61549fe33e45de952fabaad4d686fb2fde89a2a88be5729ec3fed9d5abf
+Entropy.9 = 7bc818c51dc75ce0f4800fa99251a2fb932aa6b69580aba13ffae3594306fd76
+Nonce.9 = dda15e721f24d307b79b79139c6a9772
+EntropyPredictionResistanceA.9 = e7796011822ee1193d5c36985b9cf53912c35aef1e84fa2632adbf62be6c6bf2
+EntropyPredictionResistanceB.9 = a08eebfca4b06646db4b318fe94e6420bf5c253344944ba73b55e160c2799fa1
+Output.9 = 981f30010e21743f1b11a1bd45255b1aaed08181bfdd20bd0f1cacd5585d1910b9ea62ac897db98a217ca34ef50364a2bf0138614007e076cbcbdce4426890ee2bf24617c8131b7f6480ee47f50e4c3d91ebc9ba4df7160b39244cdd3f245812ecade052c61b6b9ed538d2141f7ab53d8640e770f1b1ae50889ae0c72f653872107f82098aea4c72390c4eb5c5240faf98b5a7c3a00deb34f04cfdce570b73853c8c97a28983e8a7193cc6ab05cadfc1009826b383baabd3697503e05bf4526a
+Entropy.10 = 9b242041da5a465b6a2b6278d0a67c89ae7b39305f4f896d1288b5f6f76253f6
+Nonce.10 = 2196b894df5a6f6ffa22f7965d1e599c
+EntropyPredictionResistanceA.10 = 7fa6d414edca16155ca00c34a33f48e678484b0ad387d23b614197246ee5090c
+EntropyPredictionResistanceB.10 = 688f59e439ce01367f0b9a3ffdf33bd84967344a36c2152265263945db985316
+Output.10 = a929716983f19f298d0cca87f527ff8f50e99edc9e1a8a6134ae8f0364f48bfcf43e492f90c32a78ab4b5b851c4765bbd2b7c3d6c033af8dfb6e29f8184a691b359a9e40844ac9e0ec823d057eafa1ed0fe8753cae547f229ac460b30d585693ba3ca0c9455ce9bd6b313c4d6d4db14855bff79ea0e578133aa55e3300e33ce57b7b832199ee68ca0c81b048e6052d016c948e79c63a444480e50814d99c4d527ede7098bd868444d0806bef523a7195ce04828d5eb535e0a9d8fb72567f6259
+Entropy.11 = 1413bcf644e8ebe886f49ccf7d590f9e5f1facb41da31b4039b1bd58be22177b
+Nonce.11 = cf5232911bf3c01552efa59068d5404a
+EntropyPredictionResistanceA.11 = d47124c4f14add919a6b84eec49ed982c853d14bb930e7515e701197dbc361fb
+EntropyPredictionResistanceB.11 = f8be074037077f64008866eb120356078ec26f8270da5dbb12efda71d65763bd
+Output.11 = 3e13eaf277ae0db6dff5e6a7367c070bbc8be134acb97973572a8d927185f478b84b243e4bd5d13a76dde941289e30ca2a05af1cb790a0e5c41d65031ade452a44b813b6c7de54750425eb66fd637f1efcfff76e5461e6cf2ca7ebb1fc2c249396a193f942da5f84a0de984d3129e9fbdaab39eb28c2485e7261807d5819bfd5f17db6f34a67c0ba83db08d6a9add5a1f9e859174e91814c0773fe4c9fc22e2de8760afdacdefd8f369cdb0171ccfb9b6c8e970a1917922acbce2a3c97cad1e2
+Entropy.12 = a6bf77db89d0d10f3c8020314e24b52b6e4df1afb686cacddd0006987250fbbb
+Nonce.12 = 2a18a8fe7cf535a2be168327ce766b4c
+EntropyPredictionResistanceA.12 = cbd160048c97a88d0e85e1e2926bbb917d9359611fd6d131c7c4dc8418a176e6
+EntropyPredictionResistanceB.12 = b3abdc944b9c19c96e2294df487d57e34e4900ae69f0f34dc45bbf77d4e83c2e
+Output.12 = ba7ca1836653abe822dbaa7a9fd9bbeb6aaa21f86608197cbf3d0b730ac864074270f8461814568910ca1aac5189d215b188bda74b7f7957f6dbd4d3f2cf563c3197ba976f7f7ba8a8e3218bb5eaf2615c5068103348cc5c032021a350a7322997cf6043fc3b7c36283831c0026cab41d1611cfc1c8a8bede7b036e386ba7a3a169d077c039b135f04e3d63349a4a9b8e5b4f72890c86edf0b6a62d27bdd995f1c75e143db431e53037f94a38ec8fe3f2bb1aaee66137aa5a7a28c7012ab5979
+Entropy.13 = 089b3f808c5b82a6c33038ff186e3a079bfb3dd586fa074869c13ecfdb81b5af
+Nonce.13 = a4f77ed1b5a80ee4ed96935e9abe5905
+EntropyPredictionResistanceA.13 = 2d6586922aff479701634d9f5a7d1975a91bcdd5a3995f8e2b424ab43f9e92af
+EntropyPredictionResistanceB.13 = 6bdb43f282321531bd21a96f0d2f751e1991707e0a59607a6a95ab76ed2cb51d
+Output.13 = 0a9c7909cb4c522f4e2baaa81fdb34c7f6e4be45f56ef17c25804abb98f7f90dbb75e80de10e3d9dd4dc37e98892dcaeafa581607fa00c5712c49dcc7bb62171c487b6334fb8d88bd59e244f6b1004a46199f25d516e7a12cd5f506710f9e83ba0f09c841b11feab937415945279dfb9576dca8f08ef2aaf1d2dd8fbbb978b8184f2ac527e18a4031d3885659cb3b1f895eea957ebc4e55684b719846bf701c62aa84332cc47b39e1a526e661ab378a27b6f93ded5c416cfa916f92e73882dca
+Entropy.14 = c34b4d62dc41232ca170fc788de795c1204b74319a76f9081195425eecafe7e6
+Nonce.14 = c3c9fdcef066791800d9dce6f67f8132
+EntropyPredictionResistanceA.14 = 957544da181d9451e52bad53ecc6e598e94e55434ba8063b25c7f20d9fbfb228
+EntropyPredictionResistanceB.14 = c8c9ed877603789c92d8dbcccd10bf34e26fd34804178db31a6ec0486fdf44a8
+Output.14 = 10e2ef2c3bf4836f072688eede8aad92da8ba7cc06bb2af2243fc2e7ccf9f9489a7ccfda36b2d91420df270ea9402b9716b95db186aa1859fa0e9a5cc389dbd7ad94490818fa34804a773d8dfe054cfa663267b8d21dd58cc199d7d3f7fa1abe54ef8d4cb2fb0f72a02537b0901c03b848c491784afd314d92b409b51a8ce88a3b7907e36170bcb1004a65c49785e9c14d6ad8871d6474d890b3f1599550d41c0b7a9b39c7e30a8932ce5a832137f77b97081088a8fce641e03875102e51b9da
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 86a587cd6a58f0c502808f992796517255dc1b377e7ec967fb1be2ffc2d95ee5
+Nonce.0 = 50aa7a10c72e1f927df0ac90e0286637
+AdditionalInputA.0 = 34b4eabbf99d5243911f82d055ae99505b5ad0f0c0e09d6f9e7d6d0ee71d862f
+EntropyPredictionResistanceA.0 = 1d055caf6a3218bd765bb54afc9f3492ad788a2ac71a50197c6f3649329dc62b
+AdditionalInputB.0 = 6d3eff2e8a67961b40b33711e0041ceaa350197146ae6283d072c0cf8c4a3ce4
+EntropyPredictionResistanceB.0 = ba980b23ebc7c5e5b8d318515f25ef6bce6d20aa887aad157894c7a7657574d5
+Output.0 = 224fa684b56da61efc7a83ce39bdf4827cbec3f9a1ec10bda6cace827f00ffbadbb140ff684732c58e6f9689187edf865fc8e851c56d1a36ef7f3a69f0a2a8e4854f0fc67bda4410ec2db26f0f54dc7736db6ddadfe20e23356c3517c750c8153afe6309050409b620c6faaa6af9f750d7fbe0d67f2549f550120fabbda9d3ad25c6cf85e4017dd4630ddd082dab493925815eb70e70eac05822f077f23d38ffef8ae585e5df36e4767c4c3dfff0fb4e0eb5be4deae237534b13e3b1dddfc414
+Entropy.1 = fc0efc38320a44a2f0e6dbb1b881d2fca9d0a31290a2a8c316274a9dae2219d7
+Nonce.1 = 72e358eddbc0a44e56f19e1c1cea0ee9
+AdditionalInputA.1 = f2fb1cc6666a11477656ccdf5269842ce953df5f146ff42cbeb4d62721247a2c
+EntropyPredictionResistanceA.1 = 553768a0f9dd2e36897fa780b6a3c3812e394284b165e2647b4079d886eebbf5
+AdditionalInputB.1 = dd2d2ff0c968e1cee1e42d7c8684939fd8f4588a6006d799a24e28a8a9cec02b
+EntropyPredictionResistanceB.1 = 14202b902460cf050122425c735d1d5dea3d675c4e7c549640128782e8db0807
+Output.1 = 3879251deeb6f79c98734717190dd85e8a89a36dec13647139695895e816c6e1045c22b9c41714d875a00a9efc8807856e203b9f08c099747b25582c4ec4e1137f4d4b6cc72b3a131ae04b80c46a95904e42aef7a6dc2459e31e10f8d5bfda5c9cdd98d3fbdc407f5c627e06adec5f811761b720fca9b915475b2d7e4f1f72c7672b6848d6297baff57043ae868003112a9fe485932fb71d3e37abbca8fe37f894bb70b6779c29fe34cee918a01a790fa04e4c5e5d06001a44defa754d13675b
+Entropy.2 = e83d3e78b02c73b4b1b709e025d31925818e60d5c1e0d6f4a4cbb486e7fb38ac
+Nonce.2 = c0701492c454d2ec2faf2e1d1ee2642d
+AdditionalInputA.2 = 825784dd2fe5236fdec55f932be018ea2b05df968c5e49e676c36d4dbab0ee63
+EntropyPredictionResistanceA.2 = 91ab1bc47e8c6dac3d2c7c3e6adf269b09087d6af1b8a79b9dc64fe402ec3199
+AdditionalInputB.2 = 0978c797032b9387b1d18f56ca470adef9d7c2ad0ee91fdbab71ce1d0e388f50
+EntropyPredictionResistanceB.2 = d12d26eeb2b569f2cd0f8702e6a5e5e4a1213c5c765cc7063c3476efa1feea75
+Output.2 = bd472553c759f8cd7a35fd698cb12216d518a08daa110a51bd201c5a7beed65866477b21096d7fd0f43cd58878a036e6ee3db538aeabf7cfaa71ee97b6c2880ebb9fc01b62e5cbb6e36f13d3e02100865d055e789d079fe40a8c97c102b5f23396d6f3d4a72da0308736c7fc242ce2f7d64113c0b63dcfaf756d32fbd9453225ae37dfacc1f602c15ef20bfc1f708de46c48d906681abe827b20d22d0c35ca50c9453f418aba69a37030392be18f7318e3931b80e1fb225f9d6812a77e9b17e4
+Entropy.3 = d88dca232b2846fa7d2ab7b46f9df61211d76bac07f52433bd91b94bbaf2c3f2
+Nonce.3 = e898ac25cbe9d24d189ddf0b80d76a12
+AdditionalInputA.3 = 4b2d74e5d0c386ec58fbc0eebfc4ddcff41829b03b0fe1ddac9119a2d24faf6b
+EntropyPredictionResistanceA.3 = c833e5c94800298843937661ca6717f17a1ab80e5d4104c4b85ca7765424f971
+AdditionalInputB.3 = fa8d960d27ac21d37d8c1efb33fcdd30e7db4fb93db287d55761c8a46d194f36
+EntropyPredictionResistanceB.3 = 2f7b64ff59f093ba018125298fa78753da8539e98900bad83482225c9e09b2e4
+Output.3 = ca2a88de13150e9beb3f1d03112b3c7b11eec826d3b1ae283954d6119c40feb268a921441b8f516f829da18267cf369b795ecc0d0f1eff8ed6b67649b004e8d79619a3b7f0f7b6c2be59a6a37e55fde2486eb53ae812562bf26d6e854f009b4c9e2b0d3d38725d75b0ebd7c20dd59228911bbb5159437a91c94165d770aed555fd46a9bf61d2fbefdf88929ddb57e7ab607f812a6b09d0f7a009d34210561ab879552af8803e8e84e4763448baa9af3d6d35a50457979821f1f3a2c653ed67e4
+Entropy.4 = e07c5151125010e1ccf14cacb81e47aa317c7a0484c230deece8cd8ecde032a1
+Nonce.4 = b3e2ade75190516132c46276ab52b121
+AdditionalInputA.4 = 6526d404c2cc56621f283dbcefc1436bb97d95b9db471a5e13727cfba476c02b
+EntropyPredictionResistanceA.4 = 9fd0bf31aac9d556ac32f2a22477710e88ac03de70e9b0c287e73cafe02f1d91
+AdditionalInputB.4 = a410e95b6554122cf09179e7c6020e9be2a62dc2fb87f48c92d54ed264fd96e2
+EntropyPredictionResistanceB.4 = 153207d0970dd8a91262d7de9a00909d4546fc80599b62af3f43b1b8690eb33b
+Output.4 = 64255bef2916c577b960c7d76221076d244dc26e064dd8cfefb70faf3531e58232782692ac3bc963f22001682b8f5b148c6919ba2b8a7e038b8c10471f8391e51f933c476ee873767620b32c83c6fcdbfb08cf3b2f580218c7e8ec3b97246534b73d4ed255735ad96b3fcf5e2f2e7b7969c5229fc3ae1b6f42f260bc965e1362747554830710b971baa4e733cea724d5397dfca088e5335493c163867b23a9e54f1f9eef68c5caf05b82811c2212875aaba67936665aa62c0077cfb009c80685
+Entropy.5 = 9745f540f2f96b20f955e631690b6ab03495b04bb9f14b4b009d7089445e8f15
+Nonce.5 = 88bf61705bca816ea689ae6720e68f4b
+AdditionalInputA.5 = 04b97a7bce56dbf0f8600686e221fd64d5d650ef6778ea645392a4f9b58f3128
+EntropyPredictionResistanceA.5 = e91fe294df6cc7eb69f78be1cf0d38dee641191a99dd86941e744d7757414aa1
+AdditionalInputB.5 = 4d3ef1551cfa78838fc080775a0173618bb6b8c5bdf6c9fae0c49bed0e7fec90
+EntropyPredictionResistanceB.5 = 14e4ad09483534e82cc6c2a0f6470b875cbaf74739692bc4f8951e4db39f743e
+Output.5 = e2c6111c2179b03c625585382e7b7b63d68d641adfc53f8015079347257f1490135d1d610f7f15f3c3630ee5e8a2e93bbb6f246e89be8c2c751748e0227936f02523f349fbb78089c2113f3fe3ef04c60bcbe40a5a10798be2e9db4659bd0f40c9cd8d9ba7869ab862cf051a7deb0e0a7648dbd2f9410daa88bf796182d878f7791ff317467e50e469dce3a51323e4c874aaad270593887954c28019fa8ad38f41b6e4bb539a3c83446723c87e636f4d55a3c56672f6642cd47c5eda50c2f438
+Entropy.6 = b58731e779b18a4e78594d45b83dfbe25e95bf45dd13efc78d402ae1bc3e3771
+Nonce.6 = 0786a6a2e41ae4865736f0e0a687c963
+AdditionalInputA.6 = 390e9b81cd5167ffc073a6d86e2db31d6429e70149589c4bdb155817e19df581
+EntropyPredictionResistanceA.6 = 5dec19ae5339f3845242dce725fd7d4fc1106e374197a55742cd966254500d0b
+AdditionalInputB.6 = b7f041328ca9436fd120cbca38d2669262cd853f99f5128a15cfc76bfd71c9c9
+EntropyPredictionResistanceB.6 = 277133427744d6d3be79db68eecc0fa11c57ef3f6428d2bb1459d1fb02eb8096
+Output.6 = 35e7bab2eb0a76adfc9eff53c9cba3880f2821b0fbf136f1c57a0de84f982742e8b8261c864f20f671d1dd77ac69e0cce446c15daa14e56706620df68940e78cb16c710f38b7f8d22fb5ff9351879f3e552f5a5093a9eac5c813e49dc8d2d77fe7c74d09fda063bae8cf3b3304cbe7ba425e6fe3c3ff079435a5be2e7e516f7cc3875c1de740625875dcb2166bc6813fb032bea85580d588b4dbc01e30e3bd117aae00e8966c21ca86034d56047c34d5724eec3246e0941fde08ee7243829ca2
+Entropy.7 = c59be48f740457d6888ac76e71c9e6bda69041eaccc56510545d523cc84f0c6a
+Nonce.7 = bf02f64d35be3155db2d4c50e75ce1f8
+AdditionalInputA.7 = 5507b858e77e871484f54749c8cbf4bf2ecf41b657089467c60e29cca68481fa
+EntropyPredictionResistanceA.7 = 36432983e3e019be7d9bbb729bed64aed41f81f82a522d6e2a84482a785805f3
+AdditionalInputB.7 = db2963f183494355e6c3754e4779e5d81b8db27bf813d8353c4221712528c29a
+EntropyPredictionResistanceB.7 = 3de91885d42b16c93303fbd4092f0ed600574cddb656ca79b9e18bbe295bff96
+Output.7 = 37bfd2b31a240bbb0689b4737ae7387369dabd48c8ddc334fa8eaa98fe117d9a55f734255180eda794490efcbc396e796228319fe749efa1a153a4174bfd9734fb2f02e9ff05fc9311450474643a05915a923388205aca471a56abbaa0037cb3b9f5e6a0e8ddf19bae18d539292cdacf123186b9128fe3d69b514ddcf51ccee3514b459005ef1cc8c06d4ca1bc28e0ffb6ea3c5d8146fba0e8ee65e2657cff8590b130e581d45cdb10273f819df5c0099a14725be25e1848ce9208de04b6d8d8
+Entropy.8 = fe4c019f533127c288bf862a2a93441d3208296a6dde6b2af224934693d0e4c3
+Nonce.8 = 52bde7a934457b7b41e32df7b8bf2817
+AdditionalInputA.8 = 2462a87640e451e1a55ee0a12ff3c9c4ac98bfef8e25be9bf02682df26d9bdd0
+EntropyPredictionResistanceA.8 = ca79042bc623569a033b97c4968f55b67d52de396b84c4fdc7b40e8d23e90eb6
+AdditionalInputB.8 = 7cf825afb3c4027ea5ce773005541dba6c290558beff85b5c1c34c880d1999ec
+EntropyPredictionResistanceB.8 = 59fcc67b9235f552c0af9366a041b47446bf666a5af98dc865b827d273a57349
+Output.8 = 27271d37f045ee26c8d350cba9c78b8dbc063f9414b0f2a5422e739af37f23bd3f2b19e826b981feb6d5fe65c583ca20df68d9cc0a95e759ccf1ed144afacb34f20879aa257dc85f052f380bcb6c5f9ecc84dd4944ccd0fcce1ce267aec2922403fd4f348db4d50652e016b79536f4ad0ea303b6842684565d2dbeebc5d5429333094bfdf92c4972e3d1fb287f6aaf13dbcb3d8b2f4ac87093c00e48026261564f874747fc76044ca093f490ddd96eeccb0a1019ed76ac8a4c5aa5600551e590
+Entropy.9 = aeaf90397fd9eab20cf215d82ecc65510f95d1d414d639ff42ab226e017259cc
+Nonce.9 = 4cb79db3d8c47f18854c962f744b732b
+AdditionalInputA.9 = 1baffe6ea079e12eb4cff9f5cbb03dbc0e5bf19ae46b74b0547d399c94e6036c
+EntropyPredictionResistanceA.9 = bb29b56a1ebf32dce9403cdaa9e52e7311ccbe7ed9856259f806f989e33d5fde
+AdditionalInputB.9 = ef2173d93dc6ba5e965be2ebda032e3bbc785b10cbd608febe1410ac2a48a6b4
+EntropyPredictionResistanceB.9 = 91c270107d0807db24e2914f0a88b36fc0207b374a452469686c1f5c275011f7
+Output.9 = 7e8c384d1b8c36a8ce4ca61f06f489b0436f7f6d4417bd749c222894c9020595725a72b9f6a5065466f0e8238010bbe3628bd2e3cb9538fedb5dc94a03ab065811373c737fb62d64c776237df56451505290eab78dd2c4793bbdbca0881ceb4a6303304264d33e4bc88210f213fdc57fef5fdbfa6249e74afc6f36df83fbdd3effb1846e909133ba5a872e8defd9e2f644caa54c9f478471d76e0be0c0f8642ee9510bff2c5ab5cf9138f6b0988570c50ab998a9702b473a8633b8d45473d216
+Entropy.10 = 71b66ce6ac7c7311fd2d0ecd3f82a74ec3c7ffb80bc0a46b0ee24872a356d1f6
+Nonce.10 = 50a766b638fc8bd3accef52b7f1953f6
+AdditionalInputA.10 = 26d435296903f003cd962a0de74f7d1daf07cb1ca7420cd578a0037f0a0cf167
+EntropyPredictionResistanceA.10 = 553116cee9af969e0cc956d89af5adf1f75874400bd2e3e1dbfcb2051a09ce1d
+AdditionalInputB.10 = 5432d3aaeb92683328317cc7f9f34aa944c2b948256637881dc848e8dacee896
+EntropyPredictionResistanceB.10 = b3bdcb91794057fe7ae8dba233396e081ee6073bcd241d3b230b736851d927ad
+Output.10 = f4f1dc328f16ba10f9f360cc5b624fa1c42ebc120b5c9177219d7d7cd2af5f3daf4af89c4496370e98cf66b60a508e04516621386c77ecc42192716c9e0fb48b5f0013d5133f2d7a37846ba894e4938ee0357eb0d08e37a1afc47ce535d069150341325d907014e27f9dfb3310801de6c648b43afad013f30379ab24f2e182ad7ae2d8b79e8f301635482e95ec6acefe9c7451fc01c4351bfb0eb6f91c06d0ec0c74b07401ffdfac3295542440d86c0fbe31d5e086ecded5eb9c1ab60a2e2c50
+Entropy.11 = 9332f9f5d80144e5407804120829ffe2ac5262d5b75c68015f3b912f76eaaf9b
+Nonce.11 = ba69cde696e0353ac24e3be3b974438f
+AdditionalInputA.11 = ab778df9a37a425cb59a909e0af0361a139c93217e58b303d096c3b52e5d8a95
+EntropyPredictionResistanceA.11 = 964a14805b81cccf3556bc56ac20f16975de0d65af36f64b091a888b1e1c3cd5
+AdditionalInputB.11 = bb029dbf7046081d91127cdc638c0106597951bc002ec69ae814e96935ac414e
+EntropyPredictionResistanceB.11 = fbc1d7d3a6f2f9dc95727fe54c4dce5c5d03b458f44be87f387e3289df755709
+Output.11 = 6ff36d50be8822d2eecd69d14b2dc379407c05f9db1577743404ad591df1aa8afe222e5e05a57ea7a8866c679a41e52f212591cb634473cf9adde963de2d5a3d8f0a5bbeef1abdb079511d54c6c8938b476e2999ed25fe8bfa531c2d1265e2777fdde192f163efa8c1306196bcc531c5b0774da39621547b2c9a66897c278f1e72ee6b5932ba8389170f82ec2ee391eb240817a38cb8bea64ba3e0d419732f4b8c34e8e7b1d056a188ca9e1db1d99928fffe56e2c6f1a07b4ce4bf04f08d4dcb
+Entropy.12 = 0f433529938173bc07e6c79e9ea4e3e79aa5d28e5f913e1436628072d26e87bf
+Nonce.12 = 12931bcebfa79ec57f51d34d97bd57a3
+AdditionalInputA.12 = c8e5d43b9ce3f543db131cc77571e0394e528e521208fa18d881adb984e41f16
+EntropyPredictionResistanceA.12 = c66d98d2a4db7703fadd5082100dba8cabf2b9c47343dd569c34978f7564ef5a
+AdditionalInputB.12 = 5b02b66db5071f9236cbb07c7ab7f48d1f4e739528240facfdb6024643535ed0
+EntropyPredictionResistanceB.12 = f46b31b7deaf0fc5fe2bc5422d62b182ca2f4f1d6aca30c81a02e3652bda27b4
+Output.12 = 21b1ec254d9c622a7683c1dff2dbd96bf5bdf1bb043aa8f230027301641449a39b2500ee9f3bc5396a53ae1c592c4a386019f2b2615e58d04d13792b8514fe8cb517683f17aca79ed77159e4b587831c6334e3fdbbf57c5315dccd1785112a0893aa66e25d8ce24a5350791e2f8217b4807a2d4a16e748979789bc8b9002d4b26aa86dcec19d59ffd54f885a9e34facb12ed490c959edef7c1ef444198097be7c1146974534ce5fd72a29d040863a8328444ced9d0e932464435a95c10bbd045
+Entropy.13 = d2547310764b6175154877728afeb694061c75d41f6cafd2f91b51b50c73567b
+Nonce.13 = c98525117fa5e271c1e1dedad8a61001
+AdditionalInputA.13 = ad92ff83df45e6eeb054d2ed195f4c3295fae93d0149d1b95f8e560f2eea2497
+EntropyPredictionResistanceA.13 = b6153f80358ef611217b614c9a6f51f485eaa4655ded4b9c71aa4f5180962622
+AdditionalInputB.13 = 46aba3607c301effe442700324d4ee3ba01f9d94132fbdf4141b112f90dbb077
+EntropyPredictionResistanceB.13 = 46252d83449fd00c27d8be4b902fda0bd1dc006996b272e6273d4dfc8a6172a0
+Output.13 = 4b5ef0e2a6c81f62477cf89bff3a4b80831d2e5d2164e6fdbb3a5698882d45d123713e21642f3342b5a5fe0977beb7919ebddab223e3fc8139eefb6f47388ab3f8ea1b3712294c9f652242823bc40328b320847b5e77497a27eb7a6db4da08b9e5f6e0f8081ca212dff809293894a7fe95fe547a2cef3a61c9c7f8b3575ca2f0cb854fca96e3d911a30c1eb60a313db8d58ad18fc20e799ff842c795d506a04ba576d210066b8458c4c831a3f17777bff4059ef981de343426f6e026cf122131
+Entropy.14 = d9856ac75698dec1a5052e073069b57d875bfc1cd7a131aca84ee6b16308fc2c
+Nonce.14 = d1eaedb2872013cd4f40ae912d6151b5
+AdditionalInputA.14 = 6e142bbfc081508b2310fbac96ed98ad35d34406b09f6e517b04a54ccd5d0d33
+EntropyPredictionResistanceA.14 = 23508ae6d7cb8f844f9c765473af694bc96ca1059e1829b70fd506ecae9f57db
+AdditionalInputB.14 = cb7cd7e4239a550b8f65366cbb39c50c551d83976a01ce82aba7517530f02f86
+EntropyPredictionResistanceB.14 = 2ff81fd74a033d6333f732f4cefbf021a90b42c9daa6830c2ab2899b64a05320
+Output.14 = 932fac5d00f0026d0c439912ea5714fbca4385d25e8a3dd42440087bc3114ae946f32c7d7a22a0a699ce8b840b6edf5975d70961cb91f8aacc3dd826dc6e88bc780eaff13c80abcc8461d6fbd53122fe8574295ee67a624108d4aba3cf333c58316ce811194c9db18b2c1d897f385a3d7732a86d867a361b9f7f502421f12f53e97f0ebed34e03039bc903c104025e2b0bfd76f1bc70597946f97c0815fd1b7043e007a3542d0c2a8250935d0e705e8854d4f2b991bd8e11b446e0bcbaa4d695
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 353874c09f866b00134eec291bcf836f8b200d0f0a9c61d8447096784fc156e8
+Nonce.0 = 7304abab6f4bf5e24afa041f61604603
+PersonalisationString.0 = c6d2020dfa50f66a5d07ed2fe8b2175e5be07521c8f07a525618605031494f7c
+EntropyPredictionResistanceA.0 = d2fc6dc34677ee6980f2a41f2af8c327dae1e09746237011baaa3a96e3dd28d6
+EntropyPredictionResistanceB.0 = 1a3b315ca6710b5ddf8e8f749a3ed88b5faddd448861a84084036b5275d4a258
+Output.0 = 93048ac337e38bee6e636ac61875342827e7619e847f939c9f138e62bc76a2a23ce3a2f3aca3885d101b9ad0675a2c7381faa36495b70b41f246f0eb5783f7fb268e2979e667a781bac62b04624983416a29f0103dad8e7af1b76111cfd067912cfcc8637a1603c92989c64e617386800888e6c9ab48bfb835632552e8071409a6e15b1bb5154cb24c31a997081b6c26e31ec5e450dbbdc0d615a48f82dc0e906a5f2d6700e640325453e39c58207e74c01312129c5e753fc14b9a97aec42b96
+Entropy.1 = f70793fa48a3871b4e22c5ed7e57a10395233dd17d0200d7b0cf011849040352
+Nonce.1 = c599648dd0dd7bb1b287707f5f3df90d
+PersonalisationString.1 = 5dd64e00968abce814fb0038275b94611eaa30c11a9fd3256b9faba708455847
+EntropyPredictionResistanceA.1 = 14c3f156ec5994109853b5ff595d7f568a5a7a95e62be4837c8566fa012256cd
+EntropyPredictionResistanceB.1 = b27e5a97be2c0b2a23552ddcc88e985ef988fb3ff1b38d750338f691c3bcd598
+Output.1 = a84ca93617df4daa243eed8d16b2fb5e811301a28bcffdb38403139d840a6ae3efbd888cf94771da14dadf7f5f400e4eda82688fa162abc82f4fdf797840a6771882c7909c3ad1613f4740d3322479f82bc57f86e48e34e4912102f6d9c8c3a69425ebe643caa37d663f14ade0356280b3b9c2ca3f55aefdb5d740e79d8a3b4f0a4e52c397cdf0ec155adbe587ff72f4b236381cbd064919543eb6bffa161dcd5ae1088d9d6f779c60991dd27e4ba7ee3e454837f6eb9b13d2582cc64f5fd388
+Entropy.2 = c335c2cb4d2e32bd3d7d18c3ae2d5624b8aad09bcc4586dea0f778917161c5bc
+Nonce.2 = c807e271545fb74ec135b762f3f39f9d
+PersonalisationString.2 = 8c9ee7876b81c1916eb3bb6e4cc982fa223224c98809f058c4d6890b4231f665
+EntropyPredictionResistanceA.2 = 38a6e70c7ba44ef60ddb0cfa657b9408ad1531f2c6bc68ec9ef830b5b620e4d6
+EntropyPredictionResistanceB.2 = ebce1a50280eb6ae3a28d2ffc26cca0b1b4b5a4811a652427cb10eb162f383b3
+Output.2 = 5549f03f1444ec38add139c06fcb2132d9651e9490ebf69d6c8fa0c80c6da21cbd7e3f5b2b8aa4c0e64bf76bf94ce913f473ca61f58aa95dde87737e3fea680c6e31a382d7d6744648ecfb2e46a6cd4eb849d28dba7883336064e4133563a66a1e1ec59bc634770f82f69a17c2174a891fd9c9c7e2bc9374105eec1a1f76d8fd50c7cf985f80b9fadf4866219efc86f89b5eef3622c6b9a95c45c5ad7cac3b55c2fb6adb2ea678283e2f188b65b261890f09f2a3327b6321826787452f3e04a3
+Entropy.3 = c1320453916591ed563401f1fdef77f86f90d311ebb15badfff77306785a0df6
+Nonce.3 = 8d3ca75d72bd1bd4de385c31d908f896
+PersonalisationString.3 = 30833c4544c5f5e71fd973863d63b64bf25518b033913b13b2138190f0702cff
+EntropyPredictionResistanceA.3 = 4584de4f3095af3a4e2037f0acb5a16607df4b8e182c3f3cd551676bbc1991b9
+EntropyPredictionResistanceB.3 = 4d15e1d69973cc3f6f2e37b24a46e90ad6cc2e9b7c0c06558174432bb74cbf73
+Output.3 = e97d360728c908bcb9c11b7753f6fd0a4c14f8abbd4b6951ac2ebaf1eeb869bc574bca0cfa5c04626088f466a665a014b45cd681c0c328f12c559ab4f0c9f3fc89f5c2b316db96a951a7920d5e6e19bfaceb115ce98993683f7d7572b0cf56b11c5c7a2e06cd4deaf62174d6413fa2050dedee8fdd46b901e6f2b50ee0e806b6dbdc9edc539819685b615f524babbb207572306cbf23d7d3047d268c01985701c22a6a653551efd9c8d9b3d56ea018c509c54bca71ecb48a9684aee537275ac0
+Entropy.4 = a0d1bc9cfcdbc016204a530b12e0145f5067d55991e97e11c181cf7b4e42a9ec
+Nonce.4 = 3d7f43625995ec8eb960480406f227f8
+PersonalisationString.4 = cb527b2e9d88055091dde79876e7f005d98e404bd0973cbeae0abb5a7c6efb42
+EntropyPredictionResistanceA.4 = 3beeb70131bf6e0d6462e1096dd1417154570aee623e79822bcf0e20b0921a0c
+EntropyPredictionResistanceB.4 = 1229b3ca264b32e2eb3f57635f2fd93417212ddca1bf080c80d752aab22cbccf
+Output.4 = f7ffb1f6615b071a20f3bf9809ac83394f8a17ee0f5295426dfcf42d7e421db9b6be449b3f95390abeec55a0eb196fec65db0d8c269d5e1af610e3fe781f3e62913db37ac043ee52d938411b57bc1146103c78c74f0199b02b761f40708d6b613adcbd3f2a6c9ac543e7ce4a866aa900ec3bffd8c1f090a1765aa005fe35ae46c0c0c7bea02538cbab51a722d91cc35b4db1af5bc6667e7e1f94dea36f76903f45abca853fde7e457707181f4473e2d853c5449f96915fea0562b54168a9af8c
+Entropy.5 = 234a89e17de695a5e5f9a817ff0917e77662f58574c7259ca88b2ab1a52e1bec
+Nonce.5 = 7e4e67f69158166a4ab7429bb8b1203d
+PersonalisationString.5 = 4fdbbb00bf25a35cf9c685c144a6bc8601cbafab98290ddca51057566aeb3dd2
+EntropyPredictionResistanceA.5 = d5c0a15807afb5cd3af8057a020bb41a54888eb86912cc3dfc4b4af392cd0f39
+EntropyPredictionResistanceB.5 = e8adf3de83a3acca8f997256242e66eb0decdc456e2b81b0820ac0195bc88dde
+Output.5 = cbed0259613aac0111f439fc9ed5a39435c6b53115487641b435098e3361c2334b27d237953e29b410c3443f19f067f6295179ee6691ee72e3347b4d55fe8cb4d7508ccb33b36eb316df5c4cf3e7a47d47fa48f0a08990a29fc64cb59b36c0af909ea260a903cb7a2f1072d18189758cbcfab397c8bf76c175fcd6f2fdc81ca7e3a61156745d203f72f4ea8859c751d515c59f4444854844f880acb2f76edba53de89ad7e554d049777fb095f374586a39a35a68c75411561fbfd949b18aec82
+Entropy.6 = a70bac5b365ebeb3510440c258b295482a86897702ddcac0da29c490238d6f2a
+Nonce.6 = 2bf38ad5dcada3c3e15f4d61f6a53806
+PersonalisationString.6 = bdf24bb675570c377740d9a9c32754e2df1a0a32ef6615e648d99c6ed5cf3c77
+EntropyPredictionResistanceA.6 = 777a1a01997f047844afe436124d60c43f0dc950f7df0f9f0e11576c07df281a
+EntropyPredictionResistanceB.6 = 5fbfd8e1c038fead45799cc505f400a3d69ff920b418b0106ed6e71a02dde85b
+Output.6 = ee953faf506a28ce2f1ba99c442af98af2bad60ab902a4efa62d7d3358acc2798693b131ee66875091d4c32a304c56ed6848ffec5a4257e7a1c302eddd41a5e88fc88d8afb076a35a53b097a506af0a5bfa2827301c31aa3e0c67a06309ce23fc91e29472f4c60fd0d35a4986ab036cb4b78a0695ae6f191cadd5c66758898648cbd15267e41a1f3a5aa10dfc8fd104187737366480b8ee0a1e8d2987a2ffa89b2b0889c190acea6f8cb0ce97bac1a80501bd2abce2a1f58b234098765c6b504
+Entropy.7 = 214d2ac416299dbfd7f9f152b7ef5d20177d051cb842b46edb19b48184aabfe6
+Nonce.7 = b6d7b005713d6784120c166f15d69668
+PersonalisationString.7 = c30a6e88609a284a92213ff48ab4eb215331cc3d06f3a2470369f2b216198cff
+EntropyPredictionResistanceA.7 = d429ceeffb836857cb184b65edd38ddc153b6482f7ca769908055fe27c9b1282
+EntropyPredictionResistanceB.7 = 524e1d1f09466793df284421a55a0e11b025f9a5dd840868184f8282c2087e3d
+Output.7 = 0f9769a7113e6f8d5f7c1ad352c09b654fb0853e2c4750958de126ebddd4292777659e81428d07c7a1cc9f4cd21cf02831cb124c5229b700efd0918448a8773b1652799319ef35e1e72eafdf8731ba112c2003e6cc783da4cd9c093c4c244872383c49e7d01ba3860c4b6bac43051fe7b81365ad254cc44428fb7648774838541cc155d33b50cae5c236e3d4878e125972022af18ff5fb0475f72b70e72b25c25ac740dd212e5317bc7416ea3e20f4770191241b2d4479c4168691fa6828c39a
+Entropy.8 = 36e4c1e1f52e4eb58cfa5313e31bba623758ee00eac1ff28809b941f1565e297
+Nonce.8 = 9e3b33ada7e1eec1730c2f87b0ae892a
+PersonalisationString.8 = dfa6cee4e3eefaa572cbb9aaa7d3a9712aba806c1da6243c3697546e5ac23aae
+EntropyPredictionResistanceA.8 = 88ba6c27867e8d159e535c7a7e66403927fb14be36e539a8f1b358f5d71248c9
+EntropyPredictionResistanceB.8 = c0b0be76f89e5fa3d1dec2e15b60deafaf8c654554da657741851167c8ed9493
+Output.8 = abc352f4b30ad6bee6e257689bad35e3188dd11dbecd68ca067aeccbd42c527986aec8351039f30aee1391b9bcbb6376fb8c2b01b23c8860fdf02d81bdbcf51f6fc189c5ecc9a7cd88e24b898e1fa3a301405b87a5117aafdd49fa48135e7fc3f5bdf74b463ab4a753280ae05ef25667581d2db9bfde0f0a1ccecd9dafaab3dc4fe7cef1a54bf54747c9f43a05ff26337e0662ee8d0798a32dd5637f57370bb877302d374b1ba31a27ea3b4ae307a107acdb2ab49e6bf11a6d557a5b5e2d1c22
+Entropy.9 = aa5a3f99ea6fefc3b7afd409f1af79c329c65cbf2684f70d9ef5737be9da6d46
+Nonce.9 = 761d96757b2ddf6715e04700ecf68f68
+PersonalisationString.9 = ab929789f4c1de1ced11c0559ea0b35e16ce820d24f9deea9dd0e7780081535d
+EntropyPredictionResistanceA.9 = 9da5ebefc3c13d27525803dd67353ce3a5d8e5ee99cd75789a5323d98ed68028
+EntropyPredictionResistanceB.9 = 84ffc0b8e6a394bab372b94894b78f854cf0ca58f56cd585e88f53f49347bc4b
+Output.9 = 8c8ce47fc132cd612af5adf2f0de22b1925cbdc6c50d2e808a5b411408d88346e589442df93471de89cef15b0469b85994ac3a33d70c9ba07e104604e2b8f3d72a37f76ec7fa1ecbdf17d610b33eccd5d020f1dfb6462933cf0463b5a1e552293a5df2ad8748c6dffe9e5cbcbefb78795aee3e93f5406fac6f68fa48878d4baf625527ea6128586e9e994eb4d58e3a1bc1366d78e089396f3a695853c35a4cb21dce6be16a4e4c619b1382cfd69490afef7b8168da2f789b94a4ea9a6c3eb351
+Entropy.10 = cc8874c9c4a12628ac8afd19bd97ba25793ad462cfa4efa25181b9377bab9de4
+Nonce.10 = 90e0ce8eba62326e42ebc6f789f171cc
+PersonalisationString.10 = e51b3285352e4f096446fd5ec35ecf346cf149e8dbcc8df1f5dc62b84d61531d
+EntropyPredictionResistanceA.10 = 43d36f5ee36927a565ba588b2cb5e7531e03a3314f4cef1d86d1785129bb3c5f
+EntropyPredictionResistanceB.10 = c1154e9af9128e63488ddc7c38cf998d4b95b6cb5699772f0b0a5cfd5c552bb4
+Output.10 = 84f1071e774d292356ddd5e47dc899a9f91dbe3e6bebfe84ca6033dcaf245e8fae194cdf6f666d138436504015f081265773d487cdb3086fcfd0d3e09254d6c5bec34616dd31c123429af72b1b94b39c145c2109b8d1b6a492ee5f99f5c424299b701b193b3b594a1498358d8c4dcbdb82f3dfce4bdfacce98e86ec955c50cdd815a1c4a1a1efcfa7c048c13089a0581c1c64e2d908e6b7d9b0dd44d9ec94232f65f2b87692e3874810a287a11435bf138aa96d2e345f7444048a809ff553673
+Entropy.11 = 80321f18fbd8a9cba3b5798e22e024b8afcd32fc6f5249ce93d14355c637bef9
+Nonce.11 = 5e812e0341f1a2b659ac456f6f1959a2
+PersonalisationString.11 = 57065737502b761f478d83d2506239386b4bbe04f92e2b3e32120500aad31371
+EntropyPredictionResistanceA.11 = e32b138a54bed3301a61fbe201d61aaef3d90abdd89991303d7ef388220b3689
+EntropyPredictionResistanceB.11 = f7830545b0d012def03f4d70620e87e81e4b972a19372653a32a5738842aa836
+Output.11 = fab5217ba8b4fe3be129d33171dd0cd46211f045fb9cacb8d6abb13579293036484527852d65f549ac604538dbc58f6a962536584cd068979feca028809de7a10382435512b322cf18c5ab9044c390f54de1d2eb8304969037e6a422888aa3083a1ad118e01d447b09c528f64a7c121ea25da5b9d0c6f296c2a970ab6866c4e49dbb7d24b6403a8c80e0636da63a4702bf882b0adea47fe77e76e2c05471f43d52d5b48bf195b158fe31011ec7ccfa08750103e449d8ea98dd11915352890004
+Entropy.12 = 4ec1be84d350452f132aaf08067dac8877ee56145840e893ce10801e439cb665
+Nonce.12 = 9d9703369d62a8adf3ae2a309c8a31ba
+PersonalisationString.12 = 60bb916684ba792db25ce6e264bdf7cf468a6ee838a012a16623f5b2237a057c
+EntropyPredictionResistanceA.12 = c713d00f29de829a64409a502a9806543869b94ae4b119e327efcd298bcaa7f4
+EntropyPredictionResistanceB.12 = 7b5295ab244cb2d8dc97b0dcee21ad3d21ebd348eb1ae6f0df5a0dab92cb6a7a
+Output.12 = 52a0f3ac8840c8fe4ff7a92c4dc3b6d139d388b1127345f7143217d1b2c41d458038e03575a0f99d7748f40d4279dbb262fc144282d3097f39d89b2a91b6644a9bf750cb8d1d50b58e4bd6b0785e5efa55880c99570e62615da43b8855f660256a636320afd35b30aec283cb31de7965f569263d7d3ca7e4ab795a9e932126537f464877b180b092b7b68a0991167f6f787bf183a06324786c9ff47ca7a1bb8fb72f37e6ada7477a71d8c59cf3007e4654218b6fe62573e3632edf38597231b6
+Entropy.13 = 91e2125c0f14df7cfd3f1db56b94576a027ab62f8cdd14c53b7e05c7e95db23b
+Nonce.13 = 3e7ec26aea8e4353a3055dac468bc230
+PersonalisationString.13 = 06fba3ad80438ab4d25ee85c71697e36d9e1bebc8e5a4919a7ea16914bded765
+EntropyPredictionResistanceA.13 = b9c09d3b07c2491f407d57df72bcd7da27596601d38c31cccf9204e6fbb062af
+EntropyPredictionResistanceB.13 = f063e50cd3a18bcf668556cb5c8b21996dbde460d3e4f01bfd47bb11b155eeda
+Output.13 = f879ebb03b22ef669c706a680174dbd7b79a053bc876660e12449b5156dfa910eedd3fb8db48bc33771cbbf70c7d566d32172792070e837c2be9e9bfbdb10e1b174e62a62a384e85e967a599cbf2fda0330cf663dfd5734eb13e510c883c260a482104152bcec7ad7132f92cf2258cbe98233a52b140f009f168ae87a80710c2931a9f42fafea629f1c9936ae21603e39db8ef2857f01d110ad706bc14000a413dbe6ba135bf985bab9598f37a7ad2e3e6b077faea968b8a9de1082309663d78
+Entropy.14 = 40a6e076d6a4289905a189341d343c53c6f418070a44478b97b067fc5e7017ee
+Nonce.14 = a28a81ed00f72f88dda916e24fedd543
+PersonalisationString.14 = 4a2bd8439acac9279e7bdb4029930119214bf0f9f2e4967b68993df1ebf5e5b3
+EntropyPredictionResistanceA.14 = 44d6b1c7d7e951ce59f1cd023717a4a06eb3b55e78e64f5cdcadded76a7bb83d
+EntropyPredictionResistanceB.14 = 6ce1aaedda5818985583c96218d19d63c23aaf9ab6614556a5d3df0c3c5a3fcd
+Output.14 = a2a7bcb7752b27516c35c2a42c912462205c267120c0ae06e6413ec13a93563443a81f7f68694d8212237adfd474e765dd00c73a350d793202e6899492a135876d06eb30630527b2064c310bf65fe2f8bb0ecb53367658603775caf3c8fa9afbe38d09e67bfb73eee11f216e4619f2008c739d1637ecb046b459d5ce49defd273d0c238d0468742a023a00a50aaeab976b66abddca704ce7ccff7ed754cd0380c963b0e044b7477acb6bce83c4567638ae740e329c062bdfdfe5386a1958da8e
+
+RAND = HASH-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 67a57bf709484b52abc072fd4270895259cba5efb5aabb8d02b8ea208b2cdf1e
+Nonce.0 = c86cf1d4f1bd7fccea95218d3da64275
+PersonalisationString.0 = 96c26bfede51f497af8a1da4cd5f0d7bdaf38181b864b15a9d57e609cb3c062a
+AdditionalInputA.0 = 461f19dfd76cb403e25ff5d01685fa209c8a640efb390cb6b27c199c5ab04913
+EntropyPredictionResistanceA.0 = 25d426ae8ca8a7ea0f70fbc12f0266557aa6109eb99d154374874195df83cc3d
+AdditionalInputB.0 = 3f1e1c474547ba916e15a43ab87d7dab0eb3235b3b053f1ad27827066cda1faa
+EntropyPredictionResistanceB.0 = ea77cdfad92be5bbad47e101e42c9fa173de1a688cce29d2b1d1f9e7e3dca303
+Output.0 = 63e99d50b3dd3dab07085fdad2e2d2e5eb8b855b66146004b60f204f0894a06112a6287018941351d6809bc499a30b54028cc67a0fa99adb77cf7b41cae0a02b413ce82a7ff350263c15e70315f1b3120a2844c5a4360f2f0a37ff7a7851c2a184604a3d0120d0266f4b03a09e3f06c4f93ea6d371860ce8d6238a60055b5de19509d3016b26966deab96ff30dfc8076884b478bd4ccd3c28f3bc2f9dd279cddb26f971ce1e7ff01a4cf86caf213f7fab70b345a5b72dbf933c446bdb2328c8e
+Entropy.1 = e5b0eb98f3fe38897db59a3a5a20dae37c869cbe55321f3a5d3039241dd539ab
+Nonce.1 = 61611a41032a121e877f59af217f732c
+PersonalisationString.1 = 99224437a10e6561861129dad18654d4a3814ec6bb334b22adade6a5cf83460d
+AdditionalInputA.1 = f0f077f97f0fa4e92d50a4ad1b81ab5e7bd2c09ae98c923051d57ee0f999ac05
+EntropyPredictionResistanceA.1 = f583a64cccc1ab9472dfe640512f07e773cd4192abb99401aaa758a1fcbb5f46
+AdditionalInputB.1 = dd75e62baaad43e91a15384fd9a96eccd3efd1c7a16d3f633f18c553ccc778e7
+EntropyPredictionResistanceB.1 = 62e2eb1e2c75a752aa0dd0f57bc7ec39aa08b3e98f9c78d947a390d641ff6bcb
+Output.1 = 422692827328d4ad414ae642795d7c345061e7e14611413087f062da801b50adaab0de642f275aab0a2ede65c6d89f579a8840b13e056fad7b573737f99809cab124ce46a14904eae63b600a6e22b9788b498ddbc035e526ee968989e9694102a7b151558184a4f0d13814d1e1edb4b0dcbb5eb35213e5448b69ad55f07b929fab9a0caa6fb74ec62b276a029703119fe902ed0d8acb62ae92fc94ea8ec638e004e9ce67fbed26023569d177fd83d2b8ca2c82def3ef60e484ecefaa8f2b6263
+Entropy.2 = e1fb45938cc75edf138ae5f48a5535e29cbf11b8d3036b971b8d8bbcd5ba597f
+Nonce.2 = 9573de6403af107a4984208461fae8fc
+PersonalisationString.2 = 4efdcbe7622d9ddd49f2f052076d858036c96a4c3eb2dc19520440dd59ab7962
+AdditionalInputA.2 = 56deedc2d5bd229c1eb1326a92edb1e5e5103e6849426eda4e1be0e5376d7af7
+EntropyPredictionResistanceA.2 = a08ab2e531aa9460c93c53fb26d3ce9cc58423d069505272882cf85b4b2de96b
+AdditionalInputB.2 = 9aaeae718c4fe836b408fee06c7d2bea92b162c8f5203f632cca011c688c4855
+EntropyPredictionResistanceB.2 = ab3204707bcb0bb3b2bc72bac4aa773eb4544ee47e8aa07ba2c34959c422567d
+Output.2 = 6f739747f1eb41f2de4e3fd61b716aa52db2b37e0d0a9f01fcebe825d8e5fa095174e8c18f8d05eafef9d08b8e8d9570ded7ff6410eb0554b288441df5c93f1fb641bf358dc5ad5eb6c3f640a1b86cc4616e195ac9045d1560ae57202ddb7756ed0fb4a51c31a66547be21a647db6dce71de14f1ea6cd148d71ba8dfab6f45ae2431546e2f99daef570f200559ad957c39f00bbbbf71ec0b01444923126d0136a1eb66fc8db63e13f2666337b98a5759b33457045f2ae1d3e33c5a1b6a8f4ae0
+Entropy.3 = cc22450df9d3512f5ad3d04a6be08e86828a5147637e803bd903b79f690e4edd
+Nonce.3 = 89c5cc836493062662b7847ccef6c914
+PersonalisationString.3 = 2d8d8dedd3ff1ff2016eae66beb3758d37cf4d31d5630a25853a0a120c9cd1a5
+AdditionalInputA.3 = 739fd35395019179c589d2e42b3e868b0123c23186dfecd389ffba7e77ce56fd
+EntropyPredictionResistanceA.3 = 2c2f802a5d54e5bf8275281688d424d444962b0c534a6a84e1bece013fd5fb0b
+AdditionalInputB.3 = 0b58a26fd91533934fbb9be2bf2fd0f845aa6a51c2fa060b9334b1788c0d2fce
+EntropyPredictionResistanceB.3 = 123d76d4dfaf02b5831212426eb628866600e94b1a0371532bd12bab9b9a4c77
+Output.3 = a29abe92b98a5fcdaed93e99f1f8ca6dffabb7a9c40d6d2318f8b93381e921a55a65cc34f8b1ec705d944c5aeca3725fd5764062f2391e38f433bc2faeb94e0bd78850f88e8b06c7189b2535bc52689b7a8c0b5553e7863d4dad520ef2fe630764a2dc495e70ce7fe42cbaaf861471439cfc19e7286880af4ee6fcb73f46c13115db7bc3d4ebdb4d7c06310b9c61c8cbab8f5aadc7dbb56ea8aaad1924487775fa3691e70f980df17c7037c2166a21973f46730ae4e8b78a3ebc60f00cccdea2
+Entropy.4 = 88075fbc099c5c51a325bda114157b1aa6e7116c52a505085230ca8aaf0aeb17
+Nonce.4 = 7e219f05649864256bc6059986b35ff1
+PersonalisationString.4 = 067837655c082349f217ec94dc2721296a98afaa1bc56f803c1ba33cd4d97fbd
+AdditionalInputA.4 = 785af82401177e1ddcaeacfb388bcdcfd779101b263d7a41c00ee38563d98463
+EntropyPredictionResistanceA.4 = 9bda3b7c694b918e1ddde1309ea42c93937bc6a0fcb5f157bdc9b7795e4aad7d
+AdditionalInputB.4 = 73274ea7897c7602d335e355f4c637f23a0c8fe277b22c3bcf2079e2c708732e
+EntropyPredictionResistanceB.4 = ef1e3081b539893297f3d27e9c1584b3e0c59bd170c0896d3cb4d4b066d04d83
+Output.4 = fbaa120ac984c58528ba0bc0d7d4e701a3dc71438e1851fac8f2b7c9bf3646beba9a1a368dba63692deab86365759656d6f4206ae819484e5b28a87935ffd71c9513fb949152de85e57de55d142a9f0344d9246894c0609cc27fc63be09c8b14bbe4368aac96eb301c4d497539568ca6ff3f00783a7915c23ac6c8d9a1700184cb7b646adaba293a421b2fc715419740fcf4d5926ad202cabd7c7436b34014f5677ccb0d2fab7b413983eb0b8a0bc1901ffdf99f498f7fe1804505b973cabe03
+Entropy.5 = d1442b645934854aa70ab6fae98c9c3431a6a5b60a00a8cf8980c9641e08dbd4
+Nonce.5 = c87b6fbad1c6212b18a1bd9efbf373bf
+PersonalisationString.5 = d1d9a3ad240814818311363eca311d5c57e0be219d076f5dfc9f22510a4d3d65
+AdditionalInputA.5 = 69d9cb7b1da9270383f218dcc387b05dd1b9ebd692dc472a8b7506745bf82ce6
+EntropyPredictionResistanceA.5 = 36b609fb75b3b9b81f61e50981aa79a747454f084f6dc8c0721cf5ff9f025b60
+AdditionalInputB.5 = e52323e2d32ee5c4937a9f778303fb7f825f5bf7d8957d178725d6c94aaa2735
+EntropyPredictionResistanceB.5 = 8a9427ecaf312340754608bf68d1357a4cb6d5c13f112019ae85cd706b6359b3
+Output.5 = e77f1380fd86c0b8ffc8de9a30438b3dea13748423f7601eeb18aeae56650ee7788793ba3ea370c5f7618a27146380eba8b9388d6d76d94932898e7d79547cf27a72fde432f932bfc3e4ae95f77b75ce698f5cdaef76f55f78599f8aad683c61ade30c9cad737624925032b70452663b94201c8f489531f7707be60e336c20f7c93ed502207a4f9182ea3d21ba30db8ddebefb960f2b8e2490f8bed80a7fe4b92516e6f2d92e290c08da116069a1991ea40277ce262fc2451cd69c60cf13050c
+Entropy.6 = d9c085f731975a1da130d5eeb18456f97086d18a7289416460b87af82fbcc5f4
+Nonce.6 = 877c01e03924eefc912687601319250c
+PersonalisationString.6 = 7a437d0653999ea2b60efdd50eaf670e663ba1f994e634ea4a8231402836716a
+AdditionalInputA.6 = 67f63139e0758a9f8acedc38a0fb1f8d1b176688205bbf9d1997bea3b741972b
+EntropyPredictionResistanceA.6 = 69f25389173f32da092a5e48b37302aec2c26b9f50bc92f0ca04c9db3af44e5c
+AdditionalInputB.6 = a9398637b219d37a71c0b2658ee57e2a84b23e071f97923a6b2da0bbbf7d0b84
+EntropyPredictionResistanceB.6 = 98191dceba1d3ff79c2474f0d83a9823b391c4dc3ef92a251ef66988a21e619f
+Output.6 = b79513c7b201808bd4b81bdf8a473beea33029bab7bc74e09cc98b9993da791e5d0a61aae5f5e41102fe17da3963d3b8edf6be07dd263dd06898e1a5977d3650ebf8d9ca94557d41667c6b087219a6cd888fd313947ffabd45505392ddfb568aed12363d9050de6ad6e41cd2697dcc69b931b6b7e88493c6fbf7913c27bbf5b0618c52dbfac947d79f1c9f070ad6b7a9a48f4c0417ff25b8e3ef8811df36ff3416d43fbf00c69c2269fe6c2669c912032a71bb110fa34cdbe73126a9ff0d47c0
+Entropy.7 = 0db0c4e164d7ad2bc35253f45b54b912759d2d61b3ed46585c467031dc4e8bc7
+Nonce.7 = aab3d3717bd5c2fc929beaa7f5c05223
+PersonalisationString.7 = 203be6389be885a8aa62baf5277d8fe2ce67e9b91149733c3b249540fbab9511
+AdditionalInputA.7 = 62b60a132efab777c86eea9aca1e74709f35aebb9072056e22518d2d0b9f30f7
+EntropyPredictionResistanceA.7 = 66eb2f3fc5816ad09bbed09af1ece574f22c635203b15dab39be6e74289a3d43
+AdditionalInputB.7 = 3402ef08a0d22a1d86b64bc1ab69decf31e780ae6a295ef29873fb2509b23974
+EntropyPredictionResistanceB.7 = 6a0702aad0151dc417f8d8ebeaca3f52393beed2847c29e5ca7e16d1be66e25f
+Output.7 = 02f54d7ab83056db5f4d58508f839363473160358b6858a291d825d25b373a5aee920edef6a52a31514e769cba6bdafbea5183689e47d6cb2f19a518bfd761e21e620391e8f9c5cbb181e92db4b2f24910333754e3e2e1ecefaca3eda2ab403553de46909389d3ec9c976bfa29f70dde04afc30386c2cfeb98a104fcf12c4efa66f0b8811d9dc1b8853bee7b6234fa3da515d5dcebd11bffc24c7e58198f9740cf24a31477b705d2b0aa77ae73a3eee0d9ccde3580b75bcfd782d8ea23d5a508
+Entropy.8 = af81ac8a61fa2bb9caea51578d274a993d89f4a28f38b65af8eae4fdacf77541
+Nonce.8 = 0c0ab61b0182d20628e8ebbac12692af
+PersonalisationString.8 = bbb4f8a2a5c06833c31f2b27f1155b118acb337e603d3102e86d0d4b172e4fa5
+AdditionalInputA.8 = 54cc1fef9279cf24631f278a49857b2648c260b4b57b543127f7d528a535d1b1
+EntropyPredictionResistanceA.8 = e7fd1fe3c63da6e41fbd50425c32a357dec6bb3310b6cfdcc6dab19ad277cc61
+AdditionalInputB.8 = a33fdd2fca6f730b593ff5df38956fdc62ff310ed74f74c7cbe05e39199fc2ef
+EntropyPredictionResistanceB.8 = 2c710783f58b3823f5e75184f06e31ebff7f1685809ef02269af64451d4fe377
+Output.8 = 734176d284dd7a8f639a0800ddc8225d7022cf725104da457d58d35e3324c43a7828a1ca82a3ced0d3488893cb8d6de386d3c1dd541890c39e806fcc48f0531ec94b9ffc41b542d7f217eeffeb92f8c849cbb5fbf0faa03bbdc906cbbfcb12b90ce953ac460693ac13b68e581ad48980ad48f9e2bf503e1ca6f5e832d44ab29aceee08468ae4a681a54e8f2780b804fd3ecf3eb9230ab0628ae3fe895f21c528a7828fe5c4e60be2b10f87baaee8428d64dc04256258f658c0e2d47c6845828a
+Entropy.9 = 333230dc2c4f8c6d51796b5d98afebffb3ce27bca5d7cac3e07d65a8d4609503
+Nonce.9 = d3f317a340bd982024200b3b022ff43f
+PersonalisationString.9 = 2d8b5dea6040fe4ff891f5cb681723e6041ea3688225fa0582d5c3a61bf49ebd
+AdditionalInputA.9 = 715ae22e75fa342095b4b54013d2ca62d5a54c601bc73d8ea59a0ce3b6560ed4
+EntropyPredictionResistanceA.9 = 3d1948279b89f698198374035c8bcffebf9da39840db5336a6fc452d279dab37
+AdditionalInputB.9 = 55807a0def420ed97371cfb815b889b4765e72a6c4f00d2933db83387c8f1a64
+EntropyPredictionResistanceB.9 = b34b748e93f11c3d9d763f3938d85ffe315d2fb9f9fb5628187ae86c436f81b5
+Output.9 = 83afe53cd3b43d3e2cc69a4a5d94968feddf41d1fed57dc9820a86e4578c89924902bd189f8b397af049cd539531ff5fd8568fed721f53505876487e8b2686e7b5c1e434b3331c593c667e0d95df8095d103bb76312f87f67ae613afdfdae15209742ab753a68d6c815de70152a258c477a01bdd4daf7447222965cc6021c7ce7fea7cc194b6dc34b5a00f6b2e8c85d578874b98e331013a8cdff343e0f28a55b60794639070e357fee97cd0484372e09a1e1eff9c2203810999a2a820f2307c
+Entropy.10 = b437e7b6b49cc67cb1e7e89635e277fa70f86994e949ba44ab76a279fa24f50a
+Nonce.10 = cbd45aec15205c87c31e0035379193e1
+PersonalisationString.10 = f339c7a1c63ca2ff83edf0ce351755d08ee168d97c02cc4f9c0b61ede427333c
+AdditionalInputA.10 = de0191174412e19d4224cb12b4720382e74c899b26a9f9d5ce3da52d2bc2db17
+EntropyPredictionResistanceA.10 = 656ad72c48d1263d82df6f9805a616d44f8f7e2f258543f5efdb146976206ea2
+AdditionalInputB.10 = b6789d9732aa176a8fc80a60c05623321c387ad78a07fcc2bbd9918587b9ce1a
+EntropyPredictionResistanceB.10 = 3015d021845cd80bf9d60c21f4b6e7ba599c3cba38eac9ee95a3f1d6e9221484
+Output.10 = cbc03518e55d2cb5c537fec481ba0ab251d904f029108a8780189e3f0505d5424fabbecf82611b647b73ecccad48001def63a986eadb6b578c76dbe85c401786ad79ba96f184a2b562be70338282d4a6003484f9e6921e5b07eb5061c2747da95355c175eb5395d2dfa4b5a64fceddaa41bf8a97b0cf1ece8e4cc6f64757b17b3beea3f915ff8d9511278c49994eb208bcdce1841c14e846b255b8fac4dcf4138f5060be65830f4988cd214460d10fc6719e839b34bbd9947eb933e7a4124fac
+Entropy.11 = 611d60299b0ea4e355d164bfe214f2a2b53d7c6dcee12939811a3ff0b8c65fe6
+Nonce.11 = 6aa761857f68e9d65050eb705a69f647
+PersonalisationString.11 = 1b1df853408b0b9040d608429243165bcd9d3fc2d72a7cee4a4b4ebc6060492d
+AdditionalInputA.11 = 8e28b35565a8edfc5e34d0abf71818de2c81e69be8f7003b7b26ce86f551aae8
+EntropyPredictionResistanceA.11 = e4484a9f8595c455b87d95e501cc01bd0e01cf40e7f18d04ca58c9bc8c8e6759
+AdditionalInputB.11 = 61e2e5b3af8e29534d6e890ecd9184eb67d2311555a2c26f2ad7e9ed5515687d
+EntropyPredictionResistanceB.11 = 2a2ed07258935220f357a90812e60c2e72433867cfc404838e8a933ce9545090
+Output.11 = d1dc77f9d198f18bd97dc726c3cd164b2312ce26f7f35345b4bff77891d3ad31f7f94195bc4ba3f743cff61d33666555e90133dcb184648f78c631cd44579ab638b3e1f030a0c370ab98de42feadd353163cbae90eb9afbf23911fec4c3e8acceaa0b044aa0801011c1d5f346d5c6e98e28ae7f982631753ab588841650130c222d5a993613fea53dacce2aa076632a64a73c71b3ac936150a4e8b2facdf0afa063d4f69c4f4030b9163d65784c31aae3b6a7c24e68947abe3136c4a2076153b
+Entropy.12 = 139fedc9dbb9b350cd180ac571a7a17b9249879d01602cc31f6dd653992f500e
+Nonce.12 = 9d72a8ccce5990e7436530f9e560e7b3
+PersonalisationString.12 = df9c821fd2a058220712d5f4bce33582bef319407c98e4bc04bd5bd902609e78
+AdditionalInputA.12 = 27cd4b1eacce2750ace5c4bc6f67a08f39f18c14baad9318a28d248f9212bea2
+EntropyPredictionResistanceA.12 = 6605b3a9455cea2dcb1217727884ad171c869176de4c96e5a0b67db78f26c4b5
+AdditionalInputB.12 = 5a08a6b4e62fc2814cf05610d6229bac12d6b1f5a0feceb1e393c6f29b3729da
+EntropyPredictionResistanceB.12 = 9b37bd09abf43d106751d66fafd0f0224c6d1a530ed61e6cc9c1237c8b9af1b8
+Output.12 = 8a37c50c33b88453d1fd1fe9d587d26f5430cdd8146b1b673217642734a9cd9a6cd80bb8aa1e9daacfce5b394978d303e5a7244ec922d6181ae0abe25e844918abc75e71e4f13be754f9ee5a4939715d8601b9b7d148c1c601f1eeda5d009244ec2c424e0aaf14b227ce7ad3e6ae52af34924238c4fc62d6e3603db85f5e1e96eeb9b23cf11a592af7275385ceba0ac1f792ec0042b67fd45300f92c0ad0e261143b62a106733bb0639938b2ecc2814c52cb262d37cb578dcab4032f4a7fd1c1
+Entropy.13 = 0c994a0f33effa1bfaecd21764e9a219ce14f9ac8d3a43090b503bdd457e953d
+Nonce.13 = 7602db2dd8d76dcd51dc981134092349
+PersonalisationString.13 = 3c9c72ac715cce341c3d4af04609eb3c33eea85018df808a9b0c953205b8f834
+AdditionalInputA.13 = 7dfbd9231c6da037eb9b1fffdff40f7879cc628107bb5ca466834391fb47474e
+EntropyPredictionResistanceA.13 = 1ab6bda87e0946470ba42d80a0ea6bc2074e7c88d47a8d5f16f62e7c72f63238
+AdditionalInputB.13 = 07078bbf31b65320ab672e0522445d6138af570dbb7198b3ed78bbba38d8d0ba
+EntropyPredictionResistanceB.13 = c953135916b3e65cd3f0c196ad88648d523884daf8f9ab77b533e03be13300ff
+Output.13 = d1154afd6ce0074e0c8a624378bf8919203eb422b2a43feae58c9be68bcb1cf984bf301745825121b5a82bddb964ff100b6dc9ca4f944ebaa963fd439b0170432dba038b43831db70d092447fbd01039e34ef8e4b45f32be8020bc608b079fb900853d88f89fbbcbf490f75a7dbd07bbcf1bdb8634245f1c6ddd59865cb8dadcaa8ba51f2e201a85a3f464e6728ec95f36afd6558588018643a6d4724db3faa264006d4aeb257a06cb0773e111f3473ece5223052ecc939612eb55ef22f72be9
+Entropy.14 = 37ea89a5e121d1264bf5ce89233b09020ddaebf9b27ec3ec8afdd972149a4872
+Nonce.14 = 1722328fa7e134565ddf0145023d6aaa
+PersonalisationString.14 = e21912d52cfb63142baaf0046a7f85f19e61fad79d6516cdccf6b0599c9bf49f
+AdditionalInputA.14 = 0dc54ce08ff34711ab0b78fb70cdb4118a4f3f58a8f7dd83dc4fc7744ee181b6
+EntropyPredictionResistanceA.14 = 91e342ca9354426c25e8e6562dfd3cbf52a9c4028ca61aae263f1d0915e916fa
+AdditionalInputB.14 = afc8c530d910a22573e0eec2c1a6759a94ac38d07b52d46938b59cb240ebb003
+EntropyPredictionResistanceB.14 = 42850d1728f714d944bc67850fa6db4a7cc2e0f73f5ca044d634d7c7157371d2
+Output.14 = 1f8c8ad0a0ad62551dca847531f09b865dbe97b27ae15d94ef1cc6a928077666204c1e900a4688e9b3139693185ba6f863665d80741fa6251440963b89cc3547b3781c71a5eccf4860c289882c42d223dda3b8c30d6388f8d2ab9e1947e0330de428cedd06de6506aad197a10700c6eb4d34185a27751c83b46479c65b4f34e7f0907897c0adcfe0afd67c894aa1491ae4da29ac1d47e94608944a67c1a4e4754ea1692b79d67870ef78b6daaee4cd4600bd1eeac1d67f81eed73e8a548c2067
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 73c9b115b7efb0a63244d7493ae5820599d7cee5ca054db2f7269ba7f621bdca
+Nonce.0 = c204e6de789b0394fbbe6663466efcea
+EntropyPredictionResistanceA.0 = cfcef3776b37649a7f6d2b48f443da79a2f2f81d04f3af9853a9e696c4487440
+EntropyPredictionResistanceB.0 = d0638e28cae8d1c0f57209d677d889d195a672023cb8ade39f794989e1daee34
+Output.0 = 04744d1d42601995fa3b101ded3d2531cbf45afd83120d58eb26594a863bd8318311b08d3df4c571a9c26dff63a3e9913a9a17a7c455186fdfdd90c664a84b73a1106a5a82f741bd4c7a48bd046c268d8919efc941f8b45a3c3d89cf37141b5c41b10ff543a6926272d623ad8eccd026552090adcfacb124f47c4ad62be90ea5a0a7087d81458445813af88ffb5a8c3519f977131cc851cb4454b0a756c8373f052382435ab934718c955177363389c06b0b5073478e84d253ff02a3f1bef1bbf1338f77f92f029f638a4691c48c470d30d230f007f545e022f66c78a130697814aa55d2000a49553bef35fab5808e2f3cbb38c405611fa81444124e3f89e1e8
+Entropy.1 = 04da94b1d9c7a965b864efbdc91f8034ff07e186f59bb6784007af92520ec1b8
+Nonce.1 = 8e5971687be8c817a32fc3ac5589369d
+EntropyPredictionResistanceA.1 = fefb9895ffa04577229e465208b179e1a37999da1693e4f50ccba692ed10bd63
+EntropyPredictionResistanceB.1 = f8366ed542ee4148f076b5d76a65c7ad9bd19e4ac7943f5aadeb8a70e32f3f30
+Output.1 = 4e86d7de4c29e9b1eccb6bd556833a319becc0429e831bb7964f9fe6fe42bd1d2b6d8a7afa2c91a6a7f288da1545636cde0bbd199e9a074f1fa614e209dca6b270f35da814cfbf32f5d9c8f004e5c8982a03a88ce319db35ac9de0345e463557c2de9657dba8dba7e4b8c49c7cc2803fe9a133e396323d918882943b7ef105a44e91fcb991113f93cd5348674359e37380a0b046c8b3f5b1f46b3d32101c8e5fd6261784a6ce81847749af247a216cf03064eb19d372b7a3c78549e8885e18ccefed4019c4036a5f583d77dee63764f40f0aa84380d85e3ecb5d964aea88220d90e2ded51fe80c0287a8223c8875964a6437694875fc9893d6e481c1d01fba77
+Entropy.2 = 044b9c9ce75917f46f7e507661808ccc4f3e8d5afd743e8549845fcc3c648da1
+Nonce.2 = 30c22c25dd7bb1488bc9ab044ff3adbf
+EntropyPredictionResistanceA.2 = 56a0110aa5ec21bda7a29b7bcd4edcba6a1218be6282ace899a8ec40fe7578e1
+EntropyPredictionResistanceB.2 = 7b82e46ea4ab37b47b6681959c157038ddaedb4b7bc804d2761f917117781895
+Output.2 = 661497b81c28149d99ec3b70e2de5d1c8cf0d596d049d0a84c092ab4553e339e4ef8d421e5f5374ff5ac7e1b1e0b39a1f3672c772091bd3bcaf32af33c114426f548c0178732d8019acc1a36994b7984d275ff14caa4791ce85658e9aa4d03a4777546cc8b18e908f576f409b29a2c59ff3a3a9b38cb8fdb1462c0167fb40a5c1a44a608b3fd27fd714549b8bc7f2ce49c129eac0bbca398f3fbfde6ee2751c4dfca256fb6e05fa6de99ffc2d87bc108ad08759e502de9c49d7c05a8ce7e0526a571c2e09f055bb0463157fd827e6bd6d8d7fe07b41972c31c1b6937876268f8562a993ea23b3a9f216174dc966f101e3bf4870457492eeea59c71af8766a0df
+Entropy.3 = 1eafdabe4189db933ee49b6e21699675a7592d3c006de3561a4fd7bcde32a1e5
+Nonce.3 = c2ff7519a6533fdfc3e465706a91e8a9
+EntropyPredictionResistanceA.3 = 460fbc49fb52bbcec9a7fedd838810efec9a05ec979535c6ecbbd5ae05487e32
+EntropyPredictionResistanceB.3 = 5ba3c36f88a8f1bb9bceef3d5469ee2c231b915120c4ef539687123bd25cf186
+Output.3 = 22da57db5bee42bc76fc09f4cc4aaed3a6aa24b5b4b4c9b96ea718b713d0873d01835d6eaa635273b850ff51395fe87e49a84a99a833373caf818a66ec4372313f8f839248794b558e1e1b3d8a4e0183a04a3cf23f27fae5373a97c42b28cfdc3286e289189eec1df9b2dc3437fad01e055182de594d6ec915c81c52247f41986b086915cd30e75f0e024579b37d1ee8d56c064abe267dda85945a863cff906c358adf2a20e8e84d76f3ae8924d041e9cca458d58940f958d4fcb9bb6dd7d7d736fcd02cb214c20bb4f0e9286897635721d930f84bdf03ec95ee83a946c9cb13509c050c67fa442b2999b9fa10ede4d3d367f9bafe232e6fbe57cd5563dd78c2
+Entropy.4 = 7e86ae3c31bc08b4613af09b2c5164e6a6c8f82767813a5579d72f973f084d75
+Nonce.4 = 058477863444d8bb75af0dc046219451
+EntropyPredictionResistanceA.4 = 9e0927794ee38e3aabf0df2a357ce3dd79beed7be70314acf08808bb05927020
+EntropyPredictionResistanceB.4 = e59c3d09084843134213f3f0205b9df316ade84625276915708ebb56b1ee1246
+Output.4 = d5b95ab8161ff8928c949689842a0d0d44d4a1ae15347f716ad4e5710b6ddc3b883ad05734ab50d139dd51496e40313c8f31bd4fa68beafc5f9b9483bdfb02a144be5caf17cebc0aac9f6720a721d4286f1ca58d0f0dd61712c57a007586200ac70a2e02af40920bd290b7780c0ea89fe63d8988c64a1e064148a61c9dcae4cbe4ac336667b3df71675dfb71851adf3cc65ad2b4061cffde55e633d1a8b696f599ea9512384210b1b00f6034e9458413f628f03c37325c1b88029cc8b2883249ee6552f486a16c4ce8782ed1701cfca3ab69e89b33249107d60a15c154d4ccec9f9d0f5fba4daaf4f974c98e738e6912252cde0a02a4c1e6060eef6ff3fc81aa
+Entropy.5 = 332212e3b19e5cd1236cb361cb492cea2611c2d5a4e0519b4b978ae259623b45
+Nonce.5 = fdcfff149d596d1a48b61a792d462ccd
+EntropyPredictionResistanceA.5 = 96ff0b3264b93aa5d5e23d2482a4f5a99dbe688e3f77622e1385e5d3ae723eb6
+EntropyPredictionResistanceB.5 = 24c94b45367473c9b9ec9fe5e6973704c8e519f670f2cfcc83b21f44b2622375
+Output.5 = ae6323cf23f6da0ddff84793cad2fe0841409565f01886d150f991a9d70d207b9bca73a22bb832de4e7b3107aa118874798b58b742448cb16d8298c21384843d89a3d75f50a2d06266a2bbc7606490d1bd734a9c8b7915dec37b88242c15edb0d496c75340c04c37ce0cd231a25c8081f44a30d58f1cd8c1f69d292bcbcd74bb1a722b4d372945d6337a04486e794546b46c30142ae2b47559714e6ffe4a4153badc65057eaaf46d497a0d0fffed609954860ffe9ba6c91e50a6c63016dab6486c3ed6c9e97d8915da319d5e257f21aa4ce9451402155296fc285854fe9e774103bc46f32fb4b92ed2ca6ffe926defd8ec49be82d72ad4245903d568951a2181
+Entropy.6 = 61d2d8075fb4a574df801a568912caea508113c46c1ee8fd6f4efa9b9d637002
+Nonce.6 = 35b2be1d260c844952d8ea32d9bd0226
+EntropyPredictionResistanceA.6 = f1bec5e2e5fe13edf341bb2e972193beb336f88c7e02f2c3407efd6b3b5db08f
+EntropyPredictionResistanceB.6 = 932cbf37bb8ea17a34a93a1cf8455bbe50a7b7aeb66f98da23859ea4d4454594
+Output.6 = 5e6c437065f5334fab83db901d73556d9769f285a79bcb26bc8d069a93ecc410a456a4da88c5d685e1b1e3737443ba5d9602d09e5ee0724386bb267574ea586b8399ef576ff577d2e0cb418f529fd565e2ae4d0a23f6ea54b8c9fa3eca6152a731adc115a8f1ab60d4826d75b939083f36fe2de74b43819aac65bf3b6943433389f436cc268eaea535fb6b0d0e3028bf197982c562c1961d6881cf94d12a393b5f45341a02d0e1c1a175e0db343ccdce8050993b2aea845dca563162d947dea8d5eaa08a545504520420658fbf0dbac28d37c073950b62a98ef9bb785486522d6602a3b57ce30b8302f1c81d02717dbb93c69f08010c2de6743c15823a6f62cf
+Entropy.7 = b3912954ccdc2e8a927afd9580e9e196be0c5edde12b17f9334201129d2d0a60
+Nonce.7 = 8d5b9aa4bee95b42e0ffeb28aa986681
+EntropyPredictionResistanceA.7 = 0366bb2a57b5ef1facff8a78e6a8fd0c081db47315bc9744d479671b7e8708d5
+EntropyPredictionResistanceB.7 = c5bbcdd19da2222ca3d5de6ec303d5a0c6809dfcec25aa8adbd838a570cd5c08
+Output.7 = d6b368c41324d8f37b67e9c468b514a3879f082e19e3065f5fbbb9262e3a844c35e27b38a81732d98c786560e0d7c182d8a1b65e72f0c633b10b26363fc52f7fdc8b17b5254e16df0f64deb61aa14967a6d30243f0bb181e570d106863d888ac34b8b1c5ace779678effb3fe0a69b4f66ed404fb00907eb0d15eb985168b85b9def80dc8d794e9d5cb80b349299605bf2eee0d965c246025f5ef4d911276b3364222ceee0cf07ac6faefccd3114ea3c04da3a0c5d59f6ab556964d0fdfabf49d8a870ec3a6f62c2b8c03840fed3f71e297534415c3855092534ebfc4733cd6a6f2469bdc4cb8f4650ef0de09a55d7d7a11281a851b418b78fd50255e6be7c75b
+Entropy.8 = c20b7f4a6b9f38d436a2904295138b963cfd79bc40a3b9bd5b8b4f0254dda92c
+Nonce.8 = 66535c2c7199531537a96c71455e7540
+EntropyPredictionResistanceA.8 = 0930ddad2b95e6f2c4d27a65a43fa210311aa0d3b5c493a462a45eacca471da7
+EntropyPredictionResistanceB.8 = d38da95cdd8445681667b957586fb01244a5f5edee2084ea1c218da6259e2cbb
+Output.8 = 24ea423d5640d84ca9a780d509292d267abca795cfb8e948982ae9515c0f311082f816466600f9884cbcc2d0261d677786142cdb739e81002520f5ca67c5544c2219c61793c1205ce0c11f3b2d26093957a070fc5f1d706bd886e26bfc62d1e0a6a6ee829876470201b24cba85d0434d40c9d5e183862fd88d40e3cf7f22d16ef0a327f572611d5fc2c000e7a330a3bba26c6208c2e8b80a0e1d645afbc1c1158a6dfe2ba39079ea95651e0e245364520d387ea6170081b8fcaff7b4998c20726bd81f8be19b4417643c0dc6072da070fbc3c9f801c0c5e8264b830def722ab37209634ea63daadd7dce10a0cbdc9f70ab9adf83163c87d4a097e286bb86a0a9
+Entropy.9 = 3c624e57ff413c1f1d12d8b4bdad6b846ed4a24b36c4c82e7484fd9ef76d7ac9
+Nonce.9 = 0f49dbffa7000b9947170ae21f50c412
+EntropyPredictionResistanceA.9 = 693ad1decc243e8ba79a4b27a90ba157946d95d79b9654f485db9bb002ef40a0
+EntropyPredictionResistanceB.9 = adfbc1f4822168d4e277b1f27de4927d57ed86d39723a945cf07fc75cc3bed99
+Output.9 = d192f53ddf79dee42855771d0fad3727dc15d6d8cb74aa86c66873161e2ecaae41b12f980c555aa20b51bc4dad8f9f0086b749be8568611f745253f7822f477d13ca41370b97ba76a5f5c939d3dd524e8408b1842c01de746377f93a36db55e36ba52c2f025a7a9d1cca20db9772546de64b27790cbe71f3484f4169348d9981f7b9ca87de0f78bd4e9c28e7799955688adf3b0849d40eaf21f5efb44178ee5fd542ae81327d4e96e2b3df795fde4ac23c39070afa32797b0557bd98efef9cc44606552d8e98dd3cb7853cb7e57092d1f286c6ba0d3188f875608e06d1ec445a156c45a71942bf2fb3d532ebba59a0c8ce2d2d89eec799c1b35861168085da15
+Entropy.10 = 91fb62cc3b15987e0213d6787b65423c38f5ffdca7baf37dd14fbace96782d69
+Nonce.10 = 72f7d0e0363cc7f8c61373a59f1ec8a6
+EntropyPredictionResistanceA.10 = 2c1867ba0616abfa260cb973717cc089d98df689ab5ef6bb589d15ca0ef6457e
+EntropyPredictionResistanceB.10 = 6f530622e01e4ff0ad9262e5a07593e84ea3eecb40e1a47812c64426090ecd58
+Output.10 = b451ebb247049367ec2e2f53be46e618071bc9490e9c5015d8f8789047a79a69f863f947e3fdcc69ee07d97128da9396952bf6be6fbc6654b8f17aba1a18ae96a2904920214f4e0ba131d0b171f60c237323b834dd40e033d9b15a986df7466acbbbd720864264745a88c045924b834a244166aca438292b320be18a4dbee5c7077972a7f5e8897a1ab70bcc60f8cf47dcd1ab71c7b850241646c7e08d116bea959c44698232fcfc1cd0584ba54ef414601657de2f012bdb2d8b0ff615ce793084fb6e1cbf7394b2981641f3315b5cd5de69a554d340e8466f973fbb24064be9d690996bfe4a561904f9cb1d0338ef45ec97861c05e815d14ca7c67d8ce2c27e
+Entropy.11 = 5597cf89b04f01e1b85f43ecb4e27d58114b3f6e09598e4d2dfc596f533826d6
+Nonce.11 = c80c1c9ca1163a26fb1cd5b1e8db9af8
+EntropyPredictionResistanceA.11 = d3b2854d606c602120880e856062f681e4c4c9e3731a3bb0c0090b2108aa0d74
+EntropyPredictionResistanceB.11 = 17649ba3b4649980bf19b01cc33a21c26d6896f1d708006c53859576a087ebdf
+Output.11 = 45f93d1cce47df87874076357974dd9e001117305910e8264e0eb47b9b9edb647e0e89f4d1310af0331c79686b73985d197adcee090e36a38a444e79193dde6ff40ab1127ad85add1eff57fd7f7331ec4b10552523f8802b516dcb3a6e029b912ef45402fd16f1808a24e29cb6869a178840e7b673e2428213e3f6b34eef80d772e0caf59a94f075e7ed380f608d3916a4ded72a8148a0cddf6eb253a753f8147e63292f424ed3a0f2ef55b7e22dbd32b4f7fce490cbbaee112a8b2dc2a020eef46111ad78937f335903d3541de167ec3733058c33729034274dda126202b82b4524a7a50c7edd2b9ff30ee7df36b9bd496e3d12612be20f23dfefbbbf55a289
+Entropy.12 = 9c5d35efaea84715e3f294771cf880481848722fa708d482a7bd85851e61d250
+Nonce.12 = 8fd4d68d3c27b155a87cceaeeb8a5e4f
+EntropyPredictionResistanceA.12 = f5b4382cc6bde2d26a2d21c1d5c9d63b2c4f4baf43fbc925d387e8284c4f72d4
+EntropyPredictionResistanceB.12 = 2b7c26802e021045567a69f874fbb13eee65c59c95f5e4900bd74e58bd4ac2c5
+Output.12 = 48fc73ecafdb5e9c8695b0f5cff6acf3521df5304b6ed7937fc32050fa13a19c5afce499a0b168d1d7df7945e6b748724e993876db67c1ef941d5f801d656e408d6ded8e89863352b1bc487b02c77d57316397c0a405cdc6721a432127882ffb0aba785e77a10fb21bce535241c1540c10a6ca79ee3231b98080aacd23581ad724908f044927771571f718d7c9cb79a8ccc27d4fc43cbac295051bd7a6269f4314f39f82766d5adb667190f29d7c3407f041782256aa1cd6054d491afd19a5d02c8322a0b990bda3486c8ee0ae4eeda6d453ced4cbccd7a89df528a247e6d43b0e29309e44dcd9f620b8646e6b576ff594ad49cd685ec7382de4b1e7f4559d1a
+Entropy.13 = 336524701165e9629eb3594bd373bbe66aaf3865994df61502fb2769ac825d79
+Nonce.13 = 9884cd307f41e40979395b3aca8ae8ef
+EntropyPredictionResistanceA.13 = 1df8d142560809195894cc39e032efa6f91fe2f5e8dbb9dc883ce356e9a8376a
+EntropyPredictionResistanceB.13 = a1bf164962f34edd1822524ee1cbef3b628ea7017fa5844f0bccfe1e9383fc56
+Output.13 = 7c3460b4a74c6f8b4f1f28dfd8726eebf1d8d58bbcc6b302d10ef38b1825f640831cc1d4c5e70bf68a47fa30d4864ce70ad5d6076898dac900c8a3bd9a00723ce0a4aed43bacd414eac82c9041c874e817b34144195379d83a519d184fcd20c82c6d295b11ede8379190374c6431ef1e017c5bce8eaeea64793ee26317b76389c570b292c90c4ddde07e364d1f8ab86763359e1ba347374c5aff2f8b8fe39427e0d89f400b7c87c1c83c19fd4fdfee340f42c46e5f3fa9c430fb925019fd3f64952208dfdd7da37acd78f3c6996e63c77c7e122758086426aedbc1ee9123d2f6e22f2d836dd2d95d20670a15ea8f060d81f9ecdffada290999b167d72a74a228
+Entropy.14 = 3fd8842cfbf149adde5d1500228a4f22c52a5718e95fcf64dd194b9ad2be475b
+Nonce.14 = e81b8b5bf4efe8f25e95fcf361e8cbc3
+EntropyPredictionResistanceA.14 = 5c6185893ccda6038946b6ebca201d1068cc0ac7e34708dead8e5c73ce83b6d0
+EntropyPredictionResistanceB.14 = 9daa9fb9b07937d917675fd10c989825a5e98e33caff9521ea5f4e9df97d71c4
+Output.14 = 8e9ab727724199f8b2f301c75c9e3369c10330898984201209a92bda08b7e55a4e43153d1aeb62fdb6dac586da8716a981d1057110df7dac210f945c23dfccef45145fdac15a5da255b9755e470d8f47c5f12a66169991592e5ab2225b2682c1a6c21c14c23884aaa6b43d08feef3eef280610c9457dae8683d8ea50334286a50b88c99bcbc626b7c3854d1d37b22b8c90ffaff17d85ae73cdefe78497e40d539df9f8be708f6516d52e9a050fea3d6709e14470a3616788b1c57e3eb2abb3762d033df86b19cfc3a8ccd282abf4e2b814f0d4768135e3abd89eba132be3dc6971f8c8fe2e79639bddd2549b80e8c326fa3fc5ac453f265318540fb763fa2e65
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 7ba8431c16fb16d1121509f225abd5b37a25b0c5c069b7454c2266269cf26e1b
+Nonce.0 = 7f04482b3a14d8fc7a29816a27ca66a2
+AdditionalInputA.0 = 64653b875359f3ab5d96aa494d44669022b48ca5c1c1f76a1814b7655199dbf3
+EntropyPredictionResistanceA.0 = d05201365d2bccf9a65804b23bba82bfb65596d42fc51cc52922081d6e5074a2
+AdditionalInputB.0 = 1e5004c4c2f850fa6be2e01710a4df0e576300ff4fc4de40e9c91358f26fd408
+EntropyPredictionResistanceB.0 = 59185a07b20dec5857b79ddab28d46a52e4b0aad9df9cdb776133854aac0db3e
+Output.0 = 16232b5284ea1a8aadca65677908ba74c970ab6c346be4e6789625c5dc10e5aca1e6b853fe174bc116a0582ba7e07b20f698eabfb91c89ce5b87232636bef16e5a966d0073d4e92a89735c397dbbdf80bcf9c310a5aec98ad077643ade1d8737d408b788d90c6b538d10da0391d9ea87e74a7f8d0527b1d0edf760c69acfaccadd29bc69b274cf08fd2a506d8d588b4deefc67a31aeb43831c096e3ca7066b4345b26916d3c5f83182406b448cea0fb0d1c620d875a107a6d8d0d3b12eabb404e80c8608e714ac43d6e962c97ef22e88c9ac662d484d24e2a8cf0398e09185e33680b12595e977623714b3f709b6fddc1861c53c4afdb3fdedf7dc4dcf5bb0e2
+Entropy.1 = 1ea9e7b8d2506a5fed21f88fc2ca037cda2ae244deabddf17ac314e8b324cb0d
+Nonce.1 = e82a248b9b1686fd21dc738b76636f6e
+AdditionalInputA.1 = 22934f00d6204423790af3774e15b5f0ce3ced5af9cbcb9c58863f8bd1890aea
+EntropyPredictionResistanceA.1 = 4bb2f141f38d35fc5b53291af1e79e8891ffa198efa374cd20be10c0bfebc548
+AdditionalInputB.1 = c62d88f17837ee5c551d911767066fd99d5773669e0f0109e8f674b859ba5dde
+EntropyPredictionResistanceB.1 = 317ee3721c6dc1c4e7b6c58ab7a70ec581350a22cae098ef61357374ae2b5a39
+Output.1 = a772a4ce30703a1d620bf4d175e8f52462b99e0cac7f9b8dc38fbeb7d8a9d6e1ead29cbbfaf00e1b5a74e51306ecdbee552def09ca24c02d9388b9998eb503a09735cb70377c028db5cd6fa9a6c05f760c2d0a54bc57964c2ae4a655afe793f6f756cf0f59a406242041876ec3a1abc04189fc29ef3d64cb9ee033df03131b0ce4261e2d26db462b5c6538d48bcff6b7be1c47a2cb901bab095faf8d6a8d020621c343c034d5ec3dde12e7c7e9d389b94126a1d0d054bda80b1d39b266cb1ab2823ff7d3e87307708e845b34b7d9ce9e523757eeffe71fde5301bd08304f10d2a621522cbd9c8e4154a032c57f2ecec1957b30b43418262119b51517f59ef6b8
+Entropy.2 = b9ecc956b2d7f72a7d9122bbc4fedd9d09e309c707eb9339d560f7c2b7f491ce
+Nonce.2 = b463f7e7998dd85b7fe240544384e6e8
+AdditionalInputA.2 = ec65eef452b779f7e71824d0c4d91e4335a3cedb73642c4f6e6f3a4e92af889b
+EntropyPredictionResistanceA.2 = 613852aa2da0f00013f3683e9f7458b10d39ffbc1aa90e6e9ac832b1dd55010f
+AdditionalInputB.2 = 7a062eac1955c9587818afdfb38530ae8ab63f106f6ba290185ffc09dcb2be1d
+EntropyPredictionResistanceB.2 = 7f25475f9d93f07585cb85fdb0e7185790872100b437cd7af28789106d05c60d
+Output.2 = 64be2fe0565c10b5c8457f94853a865b1b1d825fda9e9ac8432eb0aed40051f1e52cebf00fc7a821c3f6509663837b5eb2319aae6b35bfd4f1f515947add36a094074bc182407486116bc6d3b317d3cb03232ff83309f35c02f8405cb3bdfc32e2d05196bf864657178fc17e81f57758ed81be3c137aa6fde531c574d2ddf9ccc7745ab80116dd38b6bbef9132d7c2defa430b62570b2f063475b0b17f5845614fde40ea602d12f4f0fbd258beccd0c4e6cc59d21259ad5cf25633034df67e4531b04acaaf268edf96f74e78f05940ad076cdc3d247efaeb38be93cee73b13600facf59168d541ecab6873a55aaf844898fbeccda1c4b951815d4264ec7326f9
+Entropy.3 = 0068a0f7db4c5c50fd1651bf81e8a94de688991194c57d42e52fe2193e43c732
+Nonce.3 = 1bcf231005af15162d6c2d90b92d9eb4
+AdditionalInputA.3 = 86b8c01844d4608b380f98a0dd8485285552269e1768f9f3321d091152fc24e9
+EntropyPredictionResistanceA.3 = 8090a850a5fc0f40c14f2972226b4a8ecc5f33d472e218748d65feab299d4d1f
+AdditionalInputB.3 = db1c3950227b9fa084d7bc316255c09a6d25908be6680b6eb0c71a8ffeb1c831
+EntropyPredictionResistanceB.3 = 1736405f45dd7b14f529443e671735a548e882ef237c581a47756c62dba1267c
+Output.3 = 74a6aa74da28ed5cf522f75020a1ebde76d00ed4399ce5d141d2eacef41f33a2991ed7a32ae7d6b737e2f96351d67a85139113b22af7c160c155d3f205c65b9fa46bd76e3cd292baa6f7909b13c95a0246e4c9372e6d53ca79e55c6aff87d77142db74937161ae3ad061f02e99d2f3126b99e019d4db331105e21b2e1b3558401a466136cf71a78ad7628f54a0dc9c4626249806bd4763ae69813289c7911375b6a23e6d1bec82bb8db13cceb11c961810ca17d4a2d3aca74ca97df2c0f4ffd5dfcaece8d8de1d2d38f5c297e221fecc154ce7d94ba554d3d7bbf3e2e0643c2af8fbbe7ca8c43c217e349033f847ab8e58e91f0f67c17ee9fd6f75a32d0a101c
+Entropy.4 = 8a716e11950d4014bff5bc8b604f768a9b2e88d3b8ae5a5219088200d2926462
+Nonce.4 = 2a90ee53aa7046d1c7d810b04396b386
+AdditionalInputA.4 = 7637337d8ab5f9175bb4e08294564a0fad0f040d32e07fdb76fd38c95dff8c49
+EntropyPredictionResistanceA.4 = 1c8d0fadb357dbd48123accf02c7466af7d50615d533e24ff7f627886669b54d
+AdditionalInputB.4 = 2d0df4e0f558a16f8e73ef7098cc8cc93cf65a8c8b2d85c2326355abdd95d59a
+EntropyPredictionResistanceB.4 = 0627b00d50686ba5848f812c0a026769e1b4a336e680ff6431a6b06cd886ee23
+Output.4 = 29be42041cac958e297f9ffec129041d0bcb4033062ee1fe4f8466fa424dc0eb4aac4ea8cabfd07e7e7fcdb3548afd4281b289af90e003c599e244072e7f74a128a419a69273e17900fed5cbf7411cb97a0320f4dc9177f9d20100ce064c46a032b6a46b57c433bbba02aef151efaff8b1c843a05a974d88c4d78aa65b4db9afb49a1c932881ddafdfd969820589f0efab200aab0ccf0cb287ab397522ea8b25b5098eb2070ae510652c129c033c5e1731fa0e609684498109d06a5ad533033b6d113438b6e577cbbea4564f03426e823ad15015ceb7be2e8e9a6324a3f336a1453c52e18917e9fe6207258635031dd6a8c96578b7b9fe7f80f3112f2308bcd5
+Entropy.5 = d6f12de8aa35d005c68bbf2f2e052bda9c0019dd61ac87e8c668eb2dd6e5a736
+Nonce.5 = cab106df7d12ec9b090ea57aa132c073
+AdditionalInputA.5 = 52be9448f613b3f5491f4369cdf0fbea508e2268997c88547683a787b6d3c011
+EntropyPredictionResistanceA.5 = 100680f5d5ae2010bf1adccb2f079d6f7379b10494815e023d3af177a1bfa5b0
+AdditionalInputB.5 = 227d155f2a43a93b29935c1844d06bb9e70fea239812a6c02220e81046c92f77
+EntropyPredictionResistanceB.5 = 9a787ffe67bdd7b0b20f76634c916f7b81df68ddedd592c7d4a4f9b93fda1724
+Output.5 = f74b6de20200f8312a547f375b40bd8058731a4a6a0c828f06b7e52c5d7ddb9d5fa86f678d45a9acaf6cd6113734644242b16786220659a15c75692b395a97c836ea011693288883cf6413071555dd356e899693d53bcb290548d5fc02f1cabd54aa77dc6c514a7720400ed664fa8d0da51c2869a9f743e460a7ec1e9fda995525427b60468a9585be11d293c058e05e299ddd770f39fcd18566ac69297df20c2c96dba363ff334af670774c5c9332f652550d0c5859598e45262abf3ec6e90d0889817e13fd491da258ec35d397eb9d790d522fd10c0d1618427ae918e64699fe5ea7b2bcb94378afaee56b6f01a967c4efa9fe87f719877ba9f288c9fcc1d3
+Entropy.6 = b65398489ed71155ed3824f6fc17b96b8730d17737344701c618f0df63d139c6
+Nonce.6 = af44d0e58b060c7eb0a4d5c10d605292
+AdditionalInputA.6 = bcfe64267cdafad44bf4128c08772067cc509f1e4f9e5ee1e37001e6a3968acb
+EntropyPredictionResistanceA.6 = 90967f4075bdf2cf312dc46e4b1b9e64cb4d140c870fedf28c30213d8771d3d1
+AdditionalInputB.6 = 03c9ae18f6dde03a13c06ff740bbb7642661058863faebb6bd2ce16477f6a1e8
+EntropyPredictionResistanceB.6 = fde4de26cf6eabcad8476aba87ec098449a0b23d606482929709971bb795714b
+Output.6 = 821e75c23e9bf6ac27f2fc0a50509c2057060879bcb33f975bce7019e8169b9f10c6ad3085d46699d088b9c9b3991dacc06bae0e312cc8085c62f770f2f5cf4dda7d3bd6efe3499704cdb93f06895e69c11e1f1c50945a59b31591e0cd0126b41a459e5ff2f9765fcdfef5d6e08a6948fd402fae95a5a8912bde076f7fc252f07cd4191cb8fc6bcfdd9a7849f9e341acf82ec13dccebb266dfffafab2f310047236e5ef479dbfd8208b09402167b6d307ddf2b89db3030f9949ebd906af6d6c1cda84a7061fb29dcb1622b56c16ec36d95eccbc7ca66da673a88b2e3da69c02299f98f7b8008bdaa0a445e2fcb7db20eb592c03c579070c7aaec400536b0e812
+Entropy.7 = 0db25f7483887f5e6e594021ebb8cb4ced66b511d84d6952c523b2cb7869429b
+Nonce.7 = bc111f45d924f10a0848937b688f9a25
+AdditionalInputA.7 = 9ac376abd4b8bf4787c45714de02772fe0b1b49c61fac871b87a439fba4445fc
+EntropyPredictionResistanceA.7 = a374fe5c50bae6fd9f683eaddc86359ffc810d7828b8b509d7b8cfcd84aee6f8
+AdditionalInputB.7 = 38c53ec3cf23a43619604b922e1310cf2864d11ffd7b9200028f7f93ba160e5f
+EntropyPredictionResistanceB.7 = c71a4be6b1390ada3d1f26adfa1ebc4c8dd663e48a7f3c16a7fe4ecae360d068
+Output.7 = fa595d83747edd0a0277326da7af10bb34f8e9013907cb48484809fb1a0ba15cf06a1bc7ad516dccfe6859343f05f19caf65c8cb1f619eec3614ba761a5889cd8d4cfb674f45a754379cdafd34b1119b9c18bce3256807f63deefef37d64bd70b9f00945a3cc86dbcdae3fbdf932347a8367f7d084516e287eecd410bcc88897fb9c3945ea6dbb9944f4bd436a5439f7790869684a1facf9f876cf8a83508ccf72bcb632b08aed1ec1602e38d82d38e7802e3f69c86b3080cd162b7f3658b08db62f78dbc16fc1ced9b59dd2da53272930185e05459e3f0dc5a44b98bb76d2cfe622661462fda18a9ec2cf8c7891154321d43d8499aa0d500d23ad7e7b70a2da
+Entropy.8 = eeb42d69476432c43e5d5f42bff754ca4185e76ec90cbff68ae88735b70566a0
+Nonce.8 = 2f5fb0394c2d47e924b47272ae9aa6ae
+AdditionalInputA.8 = 1c565e8a93732dbdc2cfa9c47bcee7040d4c884f58f47fc5bc075d2ed5a46bc4
+EntropyPredictionResistanceA.8 = b20b3e0d2a6313052e8149a46a1db9012a70b7eb7847b84dd946a24e397652d6
+AdditionalInputB.8 = 1eb87025b04fec332607d403d355e1101d34529767169e5a00cdd6988955a043
+EntropyPredictionResistanceB.8 = baf1fa5d3f6aff53c7bff1b7fd12b1348d7a3e04573b7956021e72633a1974e2
+Output.8 = 0ac65837d04c9ec54d6be62dde2abb03f4b10f2e055f132a792bb93065251866ff9430dfdd83e1a4f09cc7b0f8e2659fddea6ac9d143baea11736422519d3c9d9163c816a31099ea2e9246afd1792f97b86adb692eb402dd811249db78c031f15a5859f684792546b3e1a1151ba67faff1e4de87e6873a852f4c4ddd4e008e171f68c73d9a17265fdf8a2190d9a5f37d13534ba98e4136fcd61987a6f43802c43bc4efe18d8428b96ec6862ce45ccc36193ba1970d657454d7272bef4557c3a62245babf8c9167e02534680e9d2a875aea3726cc910281910e56b31577f07c7324a615b65c8be661e64d159b1d1a193041eb3c257117f4edc0422d97aa8051c5
+Entropy.9 = 2fe6c3a27ba489b519598e4e45bc64207411647cb5d27cea3d5f0ea41bc60ab4
+Nonce.9 = 2e9ed38ea08797e9e680921abd7efe70
+AdditionalInputA.9 = b4959dad1a6888ec990c356c3cef73cc5c9814a3be02360b1124c80c4ce02525
+EntropyPredictionResistanceA.9 = d6cfec338f96907dd343a8c30abb38c0fa1251d01da9ad592a454212cf2a74c8
+AdditionalInputB.9 = b2d4d4e12c90a3902f0fa108433a820378091cecec3a173ff975f20a74657d23
+EntropyPredictionResistanceB.9 = fdd18a3cb8aafb26dde32723515fa630c86c19596be1cca07ae773e7e2089215
+Output.9 = e89138c2a57c09b8c3c65384433623ade0eb91ff64c1250177e2728e1e0530528342914b5729ecf2f4f912e4469bfa03bd3d13a141a6db158aaa6cfcf9c7deaf92b0b25e088ca517af7d60c5568f5186183f51b83c113efdd33bc0b0705f6ea681378a13d99c777831e8ccdb648ce4b9e25747ecbd8cf6678fcc9cfba9bdd1c16468e1fc5f48c05a1d22f0b5975f929eb3e528813195c6218a2a4dec97b66a07c75d4382258519ebe15d71578073d22e47f313b15464166f06880e4b1824f8635f54fe49ddf4bf0914e78a3564b1a6d125bf2b65bb0a292b7d5010c03ba3475583d7c99e7a4fe5232c7f64c1310c9d86fa47a0c97acb86328ee8260258497329
+Entropy.10 = 8a0345b66cd09824a93c2481d8bb5c3b0b6eaca08ab92ecad142dba7e3b56a6c
+Nonce.10 = 874fe042db391a291f3e3ed2b317b931
+AdditionalInputA.10 = 48cc820a270efe8363fa7b1ee12bee04f720049bf22483306c0931848a8ad86b
+EntropyPredictionResistanceA.10 = a6d357e697271601dd60c3bd606946b74b9ba5f5c95b34eed791eeb273a72cd5
+AdditionalInputB.10 = 8219f3c547f7e184b4e8eae6996f39ed3ad516c5971e6d7b976ef512fc5c9803
+EntropyPredictionResistanceB.10 = 806934ff9cfab8316b289ab0fa78b40d682c4a1bc9454264261fa5a30a482d34
+Output.10 = 3f2fa85b37863577af866a0b0b791c3283d9986d45554d9f8c1836811265c46835a4bbfee9e13769eb02068c7f82fd8e9d4af0ceb4ef1073b88ff86e609b247a6814d83226994eac1d19e736542c91f076142ae8a405b748d70d787399b2ed39f3090b32d2032afcec859cf83a4271796fd41fded5349c1c82c46f165c69642f080835ed4b645a45521408bea5ad89741e80b01b93ed223c0309e45d69f20ccfc89136a6ca064485cd91883a4344cc252a81db44145a18a3b39bb5ddf43d7ec4b08f89b24a2c5c1e89d06eb99af2bbad60325609808d019f3dce75dd36578f0940749032ab8c613659b2b24ae6613625bde2d6670bbdefed05c2c1a5f5f54c44
+Entropy.11 = 58657d20b1df96146a230f08e891f4a225ab357045432b6a4b146f4a3c59c524
+Nonce.11 = ec246d181e3adcb06cd7b6945e27efa6
+AdditionalInputA.11 = dc75bf15b7ce689b38cc315217f82179989d17378d8d3f842037aa12550b5ae5
+EntropyPredictionResistanceA.11 = 24222ce17455482708f895880e3880c31303d04243e4311e59942751e102613e
+AdditionalInputB.11 = e576d258dc70af3284fed230d0c79eb132da2b13f11aca538e9c42f3c12881b3
+EntropyPredictionResistanceB.11 = d60e9c11d2fc397c7546a367a71e663095db1c2dc98298835567dce225079d28
+Output.11 = 48325fe9238dbd652d04c90f9d9a96970d5b47dd2333a74e7b2d9fb7239974e2199f707ba92868db7a4c4d63600c763e8d144c35f77347596760fad2f459e3c23c2993617cddfc6aa41ee6cff21eaf1175fbc3871b3161e09aaeeea725b988b6dcd48b2e7d8dede51214ce0bca42d6174e78cc47133d7e5a9d57dbcaef50d2543eb7f079c109cdc2e32a4ea349708f7ae021ab0955e8ba5948b82683d17b5cd82b0215d1d25ab781246ca4f55860a41b5f600c42884b66ace04b41b733a4789ff97660e9030e098d59fe08f7c149250c790819a35bdb7a9428d9b22a82272ed3e4da9ba7846c03f68fb75e721800b31c7ca30dfc261e4392283ac3373faeac50
+Entropy.12 = cfe673d19e62d5162e79e61c79be89ce570bd5b01ffe620560c18cdc079f4022
+Nonce.12 = 3824323901cc43cc0adac70c2cf6b947
+AdditionalInputA.12 = 1259aae9e9ee05f6f102250244562022b1ab5b1aef0d7335e790c00d6be6ed59
+EntropyPredictionResistanceA.12 = a5c353aab9d90a075d1a6d6dc44fc08c233a28359bbc4425ae98845b16eba3b4
+AdditionalInputB.12 = 081f77c1f7f39b23f030984bb2d0d0af4538aa27516c722198beb1f32cbd3506
+EntropyPredictionResistanceB.12 = 631c4d55efdede52c7edf32030a8c6b7e36cbbf4c66ff126d145003babbb9955
+Output.12 = e16c8cda3a64fa2a2e6c96ddab4129294507f8e8b8156ef5f56cdc252fb46780d57af48199e420f4f545c2d920f8f2e38f5dae635d25f394392e7a8e5ee011807c9689d33f95cd889c0b1b1fe238e429febfe7141bf33a5de92d2c7e70e471603d3955162155217afeac16f0c881739723d326960f954dd98f62339317784cf54203fc82b8dbaba3748a373245295b94cfcf710dd85462ee7e266be2574d2904150496359b0b462f6064bbb5b041650052291bc562a2b55aafc6614b2c9f8fa21ef4324127287dd141ceb3633525f218bab00b8a6dff3a937c5674aeab2b9aa34660fa7b1032431b55efffc66aa60c12261e3fa80b960cc371a0a95fc9ed6f63
+Entropy.13 = edd3c39674a7b895641ffa46c70fa03df69a45b532937d04a1e3a45f589e86d7
+Nonce.13 = 8726de56dbc07b7b8f9db0e8b0aab81d
+AdditionalInputA.13 = 80e25fc9c62465fc020be0d3ca8d33e6bc98b66fa4996c41c584e949dfaba018
+EntropyPredictionResistanceA.13 = 2f5496a63c531727ebd901edae303de0a8d4572eee97b87faed17bcaaebbb858
+AdditionalInputB.13 = b1975d122500eedc0804e1436bc99b227063badc5b73f0ea360af33619eca73c
+EntropyPredictionResistanceB.13 = 3dd1b92959a1c7af970805e45becf36707c6e0c9c606b54a4945338fc284f73f
+Output.13 = a21311d807774ed4bff07d02ee9a9ff7959c83bc2079e4954424bfb9892d584450a1da812bcc6a8183d0d6d69b859858838ca695f8c6a8653b5f396592d51c930ffe007f6f263d840991eaef334e1249094624bb5ae718698aac416ad3d00a7e9be6980d0810058e8808bc7df1d76a0c75adad99222f6363e6aa4213d38970ef08d798df30defaeba977b7e2c80b2af71f2aaf0eb5aac9a70b398e3eddc8c182f9b7d1359ec6dd9c81b332f375668e74aa3d3c84941f934cfb858ed1fe7d2aaf36bf06dca7c7a4c9df4974e9940366ba00138308aefe7f573a4cae2c1dc100bb9d851a2a81d2375daf1b8d180bb0ab7d2b559c168d0046dc9abb200edb049145
+Entropy.14 = 28b34869e5d42c6a3a8be503a46c445051e207b1e6725d0801d8e920fbe5a712
+Nonce.14 = 6c3aaefbc320ced0767dd9b72b437e64
+AdditionalInputA.14 = eeb44a6db028282fe52d934a2bbe5b44a96e85b4c73ed08aa096fad6aeea375a
+EntropyPredictionResistanceA.14 = 41049498237f641d6f083942db0297c78622fcafe3bec6074449f4048ca6d3b6
+AdditionalInputB.14 = b829944306de894cb32c7ef2c31d48eda9d66828fe1a66ad9301c5068110ca56
+EntropyPredictionResistanceB.14 = 4b5fa40e75377768c835896f21fbfc19e105aba7246010312e50587fe8773c63
+Output.14 = 6045c09928650066cc3c7b2dcebeb7a418bc4a20adfbd3798981e1e32a5c26e2b4b013510b27786ef7235bb7dd99196f28be7c270e8d8b8965b2ec9389fe01ca283678d54578fa779235b5feef3e7f3bcd373dc11bd27a4f40141bbd9e44467ed9f359fac5ede185b25ba015bdaaeb8382ab30b4639c69584ac4e72e1ba2665c30dc945ec825f1cd1fb65078de7081b06b68f0596caa2565698793654c1bdc7a7065b84bb1f6599c2745ff5a1b94961e67604e99d8080ab5205ce317c2a562e6880bb1155e3bde7c6c473539581f4e664db2e33ba9bfcb30a7298c07d3f793d2f4d76a2fd5ee37880446e968ce81ba347bcb00304aa47037c285f6485e498db7
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 2af4195fce8b7fe19e56eb6230cfa9b059c634f42f2e524427f83e9d1025e2b0
+Nonce.0 = 50f4585554374e0d93d91c1898b4d702
+PersonalisationString.0 = eb747ac57067ae2c3e6703dc8a9c74718acafb3c264d501095b48c6315550b61
+EntropyPredictionResistanceA.0 = adb1f10aee4b1822923bc251a65fb2af054afc7b6ea07deb11d135a6ec39ff3c
+EntropyPredictionResistanceB.0 = 91aaa8f2b13b1f5110eaea55476223ebe9a5b3ceb3775d8d058189815775d6ba
+Output.0 = 13bb73d0c94c4619463a158ef3eedcf922382a84d829fdae827039d4aada0ce01fc13c86e044465c198fe1dd4f89bc372f398627968716c7a36a5679298ba149c7e404268e1fe0e6209e09ca4c69df5c9c06967cb5d87fbc0df4e394d2e61821d6eaf82dfa2ef4af3f03459446999cecaf6374b9fab9a833d62013f9906056a1a98dc70368052a473b62e84f25e34c888ae5272bc40d8f87c865d67c84c443ea4d8a0bf3d17ed176348b1c7940d403ccdf6a6ca6fae1196921504a7338e8010cdc335ff98551bfcd0f9ec95be53b4de7530f12dfcee0387200632f1542babd82cf4ad7030a31c5c517c3b628b292a61b5351c65e2a4575e6d43f086c7afe0abb
+Entropy.1 = 5ab3569425f2806856294abd0b3267ce67c297e9fd829f07c51dd53944477d16
+Nonce.1 = 856008d2ce53fe1f10d392471dc4035f
+PersonalisationString.1 = 1c2fa23b4e4dcf7f01e2c8a4c85dc4b5d094df9f1b47d5d83b1093441f6068de
+EntropyPredictionResistanceA.1 = 78914f01c804d776b80f349a5aea920dc2f5171ba98b277fb99753d7af84f8b5
+EntropyPredictionResistanceB.1 = 5e0aa3697ee4241d4223bc538981849160ec5cd07287ec2c6146c26b37e3c4f5
+Output.1 = ee3289a51e6de2ad814fa6b3e302a77a9fb05be4388970e2aaef46e0ebfe3881f1d0b7dba5ab5903487744e9fcd038ef77d0f50d937622abf66309233853d5090698f230952c18b90d3340ae19ac8a0a814cf8e66632884b09b7ba332c67794777fef9cfca4cbd3afe939579680c7ec28a4af8612b2a9b368c312f433a70cddb2b7ceb7aad30f4eddda41c6e81ca4084e44307261bf20ddcabaade8d474809a9e671b71b90c4e07c144f0a3c4feb540e8c6bef82fd048fd6181b49aa6a474b6b711f5b07eee56f6ce9d6c625c9f379c83f08caa5ab593979126a1fc115c6c2a5e3fa6f4f90fc15e413c1d9a0a8ab442b101567643bd52fc038a01785549ffaa7
+Entropy.2 = c586bc5542e42655fbbd0824bf7bcdc55d9e9a1a3229bfdcb4c95f0456f8cf81
+Nonce.2 = 169d444fdc5c7a9d85cce82b1bb9cbc8
+PersonalisationString.2 = 417fe5b55a32f8343ca4d395d2204e3f9368437da328443fb5d2bee020ddfdad
+EntropyPredictionResistanceA.2 = afe18ed8ab397037ed06abf4d926b313e309043fc7c5f37d29c20681f63beb52
+EntropyPredictionResistanceB.2 = bc549c90535e99f676c6d9709fd36e282a838f513c2ac6040df2ea6b1a6e1327
+Output.2 = 156f7ac75002fbd6fc144a51220a3f3ff51aa93d6e663368e2b83f8235aaf9b9225d05f7b2391c02113e142557fafa8579777d2e44b376183b9f21cf1297469aef39e1b6a206f86f99f110b484bc185854cb368d736e8b89fc7d7c2be59e8dd9c2941fb07a8a7f1442fe5b2c16fe850914537061800fc3ec91ccbee1fd23abda333f1bab34fbd63bba03bbc61c9940ead6ba5bf88eefe399c748cd55d9e08ee2ea8955da424968c553417e319cc2d234804415be2cc810f4902a17b39233e52533af104ee9696afe5f6ce59708dd358a9df33bb706cd648310be4cd97005088039942bb945c886987e17d62a81c819ac61c50fd95cea7da7685482c02955b9e8
+Entropy.3 = b1fd0f126a3550de22319f71bd1898d6da5f0c5f8cad2eb50640b5c612abdd14
+Nonce.3 = f9406b24483127b5f0d60f8ecd353c22
+PersonalisationString.3 = b222a9e1b173edcb2cc434630752c576d2412fe4263f05f3d502df75ad0c8181
+EntropyPredictionResistanceA.3 = e46fd5c3dc468271b50fc4c64595d1f6a277fea17c3e6f36d34596f83650f6cc
+EntropyPredictionResistanceB.3 = 5c876f2bd43ddec7f1089febae1d5356a0c32cdb5f6ecb2dd185e100c413d209
+Output.3 = c73a4f9eaba03eb1ab5800aac18f7b197ed5680adaa861cb3680a630c22e1282cea7129a2950c0b2ec387a106821bfc5f97445e2d7f2a72c92a37db93bd1b0b3732ef40a1e75e26be677589cfdafc6fe4f5f184e97ee0051d50b431a79099297bc2700f6935378a05118c324b27eb242f7def9f986c1b47091d946f39246de132819516d6d7e3a48f9328e9fdf5aa4b6e81efc3e37f5bf0e19f92942c31d22b6caa4301dd1d3d163b3fc24790216cdedf54829e686ab1ee2c427e12d1137db8f97d515ad8a2bf0131599aba08c48860beffdcc0e0a27ec91d1c50e875f1dc5c9749e8f3aba41d11c6234b064faf8921d0014c82758142effa45bb26f72bf8c32
+Entropy.4 = a15bf2a4509073af6da63fa80c8f0aaa815571cee704e9f625da3969f6989eef
+Nonce.4 = acc05cc02504f3bffd0edb32addebfb9
+PersonalisationString.4 = 7681751471afc487a59517e3261d071014b90ef725019d75df162e1467fa9af2
+EntropyPredictionResistanceA.4 = a2bd59c9571ac1e3272f79bc6cb5e3242880bc2b9da64b84c900268e48508f18
+EntropyPredictionResistanceB.4 = cdec4df6a50d5d52103ab4d98b88d3892f75665dcc8b251e947742cb1597579b
+Output.4 = 6214af582f85e51a2276f529482e76a206883c880ebd248bc763b3410e61515760ea3e4b73d7d0a3cdb0df7c14aa77bc7cb8a1385632e54cde85784587bd5013f7524cebe347e05bb315b24dfac593809e13ac62a9bdc7ab3d7d48c5efbc61d372694119eff0070490d7efdcd2beafecea9d0c06d27c0d74a48b81afe51bc5fc501f7fe6172ca161f00477739825111bbca14bde01cbe84640a93e0a116ce00c3cfebe658d47c575dc8cf944db63d5c0052cc4860605020519aa8b1b3c57622b541f092d14ebb4abe729439c1f59478c71c116ea350699b323e119988a784b1a8193aa9ec8366e2d5b82f5b1d7c95f301d0de9e42f97babc3bdddd64cf0159f2
+Entropy.5 = 24c820d03f84b7c9573dbf01e29a456f28db152d9fd76803acdd9182789ed338
+Nonce.5 = dc20588742e6444de2fdb107f0e4b566
+PersonalisationString.5 = e03a639cf8d883f79928809c989c4fa8670be9ee94f1934ec13c8cbcb97e6ae2
+EntropyPredictionResistanceA.5 = a56a893c339e811d258d815bf587ab53c8f5a52a2c60129c2ec96bb6ee58d0f7
+EntropyPredictionResistanceB.5 = f168fe522b3ccde4171317fec9594f92f79e01c3a34a05a902ded9da95967ecd
+Output.5 = 122d76eaab12340f36462c337a316552fd9ee6e46d8632893ac186c8b0735c9661ecb035baa60b8d017ee054da621e860e620848a67e4a17fc1fe0d02e04781cde89870a2490d2e27fe525e17cf6cb42c2ecd771c26bcb2de4aedd7c5a2c74ff966e54df4d26f5c2246ecb0f8d83f61a84c7d17914e1f7235290fb3035be7bcdcad057968250123d1221910f7e55c926b096be4be85c8bce20f89e98b1de0e5d71cb2738bc4b49f7322c8b85406e4e02a1f41e6fff605d6805a924a2b04a85587afea3174390886855e9d82f9244332f8dfc8794c8602277dba22e3b2d076e1a4be78b9ab2aa52c8df7ac577fd1ede85d05a77825fe00be5f27f07f54e7ee7c9
+Entropy.6 = 4da11e3fc13f3f6e13d1fe538ade855e74627605869db46e3f84e90e3e22cc0b
+Nonce.6 = 9ccbd15f3967829742cd21dabcc6bfbe
+PersonalisationString.6 = 51f624d3aac00a044f9f9e45810947be8b6c6d41ecb186600e2fe24ff3e045bf
+EntropyPredictionResistanceA.6 = 9a8313f4596a93ee42587ca1cffabee5fc4db0e783b49166190680ee44eda319
+EntropyPredictionResistanceB.6 = 252c9e78668d8bb0676e780691b1270b0c2da18428cda2fd3e490cd3e4bff08b
+Output.6 = c4ba6a2c27e68fffb73d3a9fc80f98593640b4bc77812ee5015a0be339d20385c00d7ba4230aa2f5d3fec4bec50eb9ac1de0b3197214851c4db0007a7f4ee86c3970954f124f690a3f2b7d687edc57c1fe95d160f44ea3a440507ca7def83726edf41748c20131bfb6d6db8f627a3563819c08777b51f729cc94ecc837895954814a3c8c6bbd93954ea11d16328587649b6491229e2dfcb449e9a15494128232d9a76d86c93099703850419f0211534eaba6a08bb161029c1861f7e95f0045bbdede0a4e3b58993860153e805c07ca9400b363e72b55685ba676becdd61858903717712f5c1c5f8d51d6127da80ec8b5b0fbab7ecdb524ece02b87a27bfd3a33
+Entropy.7 = 884f535cae1a749bbd91e2df838c3753d405dfaa70a9138104f4ebcba95f3474
+Nonce.7 = 7ab1e6e4b4f52fd2115d0c0042788406
+PersonalisationString.7 = 55fc94243749184981f2a3a209e5e2ab84831a891da32b8feba0b5f38d620b98
+EntropyPredictionResistanceA.7 = 88a035cbc518417989aaaef8b879d6800afaa38e79e0cc9bfc87d9e83305c28a
+EntropyPredictionResistanceB.7 = 3a24b4d1c798b6e5eced1ea4765fcb1cd5a73dc4a2e428a96e2fc6ad5833705d
+Output.7 = 937c048a051efef26a5f901cdb9f5bb7bf2bea43522def2b4c40456aaa9353e985bb821aa2866e57fa75bb442d4630daca10ce46f483412074968c5ac73a1c12beabc7546bee4f201108b01450f969d24fef5fea57970092500683bb08319c414836552254cd6945aad5d7e3ffb033f66676ee77036c65d8f4094373c05132190691a0ab8f6183a2eaec8f8053e57ef37c06d0f8375980cbe81cbba10e31675e62b610a76c7f18838a2697917be6b629cf3d76bd9def09256fc83a4bc6103d663221e62d8872912ef9839e29fe666b361d1789da7bf0a4196867cec67c058fc5d86925f02c7686fc32ad7f2b7b81d7917dad3f0f394c4ca0b1d015a3e5f5e90a
+Entropy.8 = ae4973c14e10d7fa9857e1b2f20ae799a8460433f2a38871ce2b9ebb55914658
+Nonce.8 = 1e8e77c07a2d8be08417282de161e2ed
+PersonalisationString.8 = 0424b3e0f89af7588b1acfe74dcb9d153357b80010fea691580aa14ad88a9760
+EntropyPredictionResistanceA.8 = 562c673647bf804137fe264462f78d1b2693d909fc718a8996ac3eb3bd1c5e62
+EntropyPredictionResistanceB.8 = 29f7b0770ff07e8893dfe5f5eac5a170ca89415b20a913024c8f1d71627553a0
+Output.8 = bc7538799aaef4500e21cba9994aa56dc254eca0809bbf7ff86444668a45992ac96fc4b1462a56e9e18ce43fbad1721e01a0029b90a48906ed0da30528833c178137a7a8c8c79c3dbaf4e6227db83424216d170d82eb91c45bfc6830a7b6f7c948a5703dad918563feb4b0be5e70dfb37bb31def1f24d075793559b1be72efad14c2772343b3273892971a248cd2a114af31be472594e88dbcb3c0722f9e4814f683a6d8463356be3b600fd2160a027530e660c058a0362e8a647fb7d729a53fb788552c9eaa98ca56e58a87e675a0cf99248cf0384ff84b169f86f5b36b29ddcfe0080e669c8fe37d264a492f48137e8f80ee9bf892c349027b87a1ea642227
+Entropy.9 = 595f15c409933d7fef2af9f335ee4c18fa2cbd2097c4abc705cfae1f34c4c96f
+Nonce.9 = e8deb7558844706ea715b2e134a5f318
+PersonalisationString.9 = fa082fe03a730d0e6c4d3b2f4c8802619baa62c996d692b932c7fc583fc6ae2a
+EntropyPredictionResistanceA.9 = e9ec8f9079a86db0c681dca69fe6b671def6ea2c1e4dcfc426ad1d968031a648
+EntropyPredictionResistanceB.9 = 7f27b9418255952187531cc3eb02221ae7922032bbf4da2d5fd4d02e464158ec
+Output.9 = f5d1f7fa1a0815ada580de0c41f2cfce3043c9e10229d16311664162c7290c3f374cfda9b91621965a823a4e60b56201d7b603c6878f8d4cd393f15aa59a8891994637bba14059947b1614dfbaad9d17de940caaa90f07f7e66cf30a96885035fd7386de4794ddbe60ba8b8ef74d4088d11363ca22fdeed9a230d6ece3007c234c6a99f5a70ced53cd257b82a23beff13259743eee90f42fc5e196fee84ea0c26034df0f82e2d01541b4844fa97474b477bd39480853a611bfff214d7570910406d1bb4693871730dfb0a47afedb7d2e623ab79a3e4e816e4cb20df516ad1ee7a050493a737471ea666950b687be7eaefc1b66ed3914d1271ce13fe69a287ebe
+Entropy.10 = 562bec48b133ef26e6b472e34c21de04f1bb081e2ac1436a789c49fd5d4e85f9
+Nonce.10 = fa5d2abc5624b264f80e29a64e7daf32
+PersonalisationString.10 = dbc738d930327ba4eeae5cec04855b6b7d7c8ba278a7d97ef1a95036469eeb75
+EntropyPredictionResistanceA.10 = 70b3afede100df324b0e1cac7c79b35212d24cc797a857508232ab1efacb55b4
+EntropyPredictionResistanceB.10 = 84956cf47495b0ef9537c8c99ce4f9b57b2fcb64d19faaf91ef4221c5a02f01d
+Output.10 = 717c50691fae202694649903bf69a66edcc9501aacce9fad5b9c3ecd55a629b0a989631771df55a76e9e7995de767145b2335672080c6c64c323402e15c08501f710f97a6dcde038a88172098acfecb0e051d97f487b8ce62436d5d5f837ba4d5b7a623e70c88870bba7298c0f768dd9b59f113891c2478342340f6f30665c4c1f234496789138580d097bfd034f099a8f36bf10f6d359d898fd541d8c9e6f810714562d127cf33782c91c08a767d00f21ef8d1b95899b0a60b8843c3ff5c8f2ea9bf9d26f0834c3f526d2369706746e23b6f8503f1b0af7d92b3cd119226861f2f0baeee67cefa592b3ee8df99f7fb929e7d2a2650935d8470114ed76c3c19e
+Entropy.11 = fefddcf3808557c37844e83c8c644b195ed968f2523146b6615b424b4a829197
+Nonce.11 = 87980233e4f68bb663620708f40fa7d1
+PersonalisationString.11 = 2151b366f0f8c31b70c7386b6c5d1407d85100e373a8da8e680d5a86e615b485
+EntropyPredictionResistanceA.11 = 4c40806198f0d06eb5e113484301ec14ece848e171e53ed208e679028a2af1ba
+EntropyPredictionResistanceB.11 = 4e7463ca420fa21cb1bb436c7a7effc294b579453e739d0d4720ceea703c6420
+Output.11 = 927f87413f7f11a38c89f527fbd61fa1453672aa966978dbf0c6c10e3158358b3125d629c15959edec72729b77396c1ec19398a71dfaae4657445797ec5b3d1d3829df5db2bf54477f9ac49aa4b43c9bd27cae8bf0d19bb718b9506b2bf781107f89559f0a69d13092b9ab9f07cca6af8142c030f33668be732b54ed4bb7c28246ac891c7e78e9ec2b6f03b58ffb45da0b788d2b6fd12545a70b3bdbfdb0c6b5aee57f85e13f4234d70ed6c9a94939aa04ed94f855305eae8b3a20bb488917ec2825c8801174337677a6558cbe9cd7eb4b74be7835fe4598854e3e96096211ec8e91b8a207f3284c962f7c7ee5ddd8fa51efd187c21ea44d2cdfbb8628240122
+Entropy.12 = a3e8ffb074647b9a1893ed2721eba55b7e36ab821f0082bbb93d2abdb21ef47e
+Nonce.12 = 006a0e84a854ded1356496422c2a89d8
+PersonalisationString.12 = 1719efc7c6919ecf1834150cea7ed6d587b399275847dbd23e7d521165b1aa73
+EntropyPredictionResistanceA.12 = fded83a152b3a1ce27438570a63e6066e57caf6f3a7f1db4dcae9414093655ec
+EntropyPredictionResistanceB.12 = 1b8fe33271f4039af4747c48699a1565d76a1c772f482ac33c9c2e6cc5633901
+Output.12 = 51f35d3ed394a09112c74438c19984aedd81aee225c8cea675d7424e57705b4392a66827a1ded3768973177ebbb28a2b39df4b56d00bb6ad054e85bd79bf4eb391aa156a3351063017fefa66162c84bb218932fea64f2d38737c2a4d6f2eeb5959ac685ff933cc4614dd036f3b240edb51a0e6eb6bb6fb16356f04bd2ef15cc5c4b394c175ac347db63f559fec08114b49148b2ddcd86eb95c244d1aebdf3f4db86cfb8bcd1f41ba7e885f153739a6a83de625b9419d69cbddb9d2248b367ba57f95bb3fed6cc2a564513b620313dca36341b6b953b0826dca2dfba19f5e4b73a7300692d37ae3a94e4122d47c08e2637695cd35308d2d4de6f88f1d82ca0795
+Entropy.13 = f5e597432531bb7291073119a37d133082b681bfcc490c2abbbf845accf92cf5
+Nonce.13 = 8a522bd12300e45c2a1e66627630d5f6
+PersonalisationString.13 = 15a7cfa6c0df9ede25aaefa7874c0860c6b0086301861c2a12546f1aa9862fe7
+EntropyPredictionResistanceA.13 = 4be670a81b6670c3ed3f201e8872727d9fbd3fe77d7418fa921271b2cbace3e1
+EntropyPredictionResistanceB.13 = e528abb271dbcb234bcd83bd15acff65eb3ad284d1638551a698f2119480c5dd
+Output.13 = 4ef2f3a779ef45d33027fd61a354e82a07f19f4afd5fe60521b989db54b8bc93eeed034c5f4f29e54a73c6d63c3ecfab169d828179280b5c90cf0f1092e644385b37b0922758c528e34343541280bb2a100f14e01c922ec0fbceac2ac25d47a79b14b16fe8163345440886cc58619e50e34fa63d1fe7796c32d00a8576b0afc598f4e09e2a12e22b1318608c78e6d97dc1489c77bbc42881d157f8ca992514c8567efbce02905002e82ee951f4bd0dab27d812a6768a1ec070dad84469e054a01cd7cffe615c24f1df5dca79628441c0f6b2ee8bf575491c7d8159d982347d8f33d675d3ee40cd41c5c016ea0f9cf432a5bc7f473f9fd3d26cead752339f6aaf
+Entropy.14 = ba261898badb4f7a43d7309b7189511b6e652e0880436b512099296939dbdcb4
+Nonce.14 = 29fca28cd124ef151d6d6243d072cbfe
+PersonalisationString.14 = c86e9451d122b928e226ae8bb7d899d9014b14d0536d818f1117ebb6f80571eb
+EntropyPredictionResistanceA.14 = 89649b3b5f471156486ea20cbb811a46a0f677ceae3a4ec00bd37f35499b98fa
+EntropyPredictionResistanceB.14 = a3f718ce143c562e08e32773b273cf812de270011654d3ef798e7e2722fd24a9
+Output.14 = b7acc64111a4c51442d2a46c67c162385881f8cf4a9756dd32dd633e3a9a5d55127c14fe5a8c732e7f69fe2bd7a941fe18eb7916a8bf184d396c6a250e1f1af973593ba30790d37188f62bb1ff584e5c9dcf55cb0230eede22339e7e7d2bfe22b79685afcc7da83f060b8c9cbd8dce3933afbe9a5ef1d49d47f8d4ec388b64eda96afdd8a7d20f0ca4ff69d03d3a6ad3564ff99cbe1daa695c48b115f972a8d8138025633aee832926f361f7428d8025a0a2c77cc213ac7f615f86f8489c2f926a998116b272b7eba677b853a5fa0264726459309f986d939fe578d38198260c4b3ec47f75e4faf5588d33b6d480a06d3bf2104716b618a79feb3ee7a3736ca6
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 0cfbae94684321e071e66da09e0410128b7a14ff1692014c98fac7f384e8362f
+Nonce.0 = 3a217aec700c191b05e4a11803d5f651
+PersonalisationString.0 = e638d92f217337982258337ae63c3b07b30fc5668e8c123ee0e530fc0187f251
+AdditionalInputA.0 = 30580498cac41c4a514dd913131dd0ef932dfc246710ffb09b33c952fe5e7e69
+EntropyPredictionResistanceA.0 = fa65a1561e9699272c147531b29015053ea0e504c1978cc791fd75eaff51c005
+AdditionalInputB.0 = ce49a8abe2d1b66582eb54c66022fc856324cfd8c9504077b063f3d58e832fa3
+EntropyPredictionResistanceB.0 = 7cb7d7de34f568cd8e5808226db8f414f1da556cf00796dc12ecdd8ad049b1c3
+Output.0 = 174df659adf93390e0543d04a55d1c23ef5faf8b1a49d36b6010a0ebdd2f77b35b5a8cf942236619a4304b5c0eaad098ca977a219f2c327f49b5ee4d2a29f48ec91623ce288930b8fe9092ff8ce4aee8e90f6ae9cbf8514d1636f8bda841b49aa3043605e49581c42f2e54a3b9f1dbe51e78996314df8e3cb43687721d1c660b37f118331dcf8b0acec110489741df45f2cd5c2aa2a989cd3635fb52ec156b855307e30e34092eff182886470ee9ce0df25c54ddcfe1ca1ae713a2063dc16274fb36dd957a3a3fcc80d2a0e908e0e43cd0d55e4241afc3ebf6f36248528f0dcfa780aa417f3dabdb7be6622c0c8c8df5973392c913c777454c393587e050afdf
+Entropy.1 = 18e252586f5348f192ea897fbdc808976a3d558931f19d6052a39fb46f0c0a93
+Nonce.1 = 2cd22375e71b41a77c99bdbeee9e2785
+PersonalisationString.1 = 62394fdf35e465b8f3b91ed58c812dbd56718a845eee7c1f68b879e8df459fee
+AdditionalInputA.1 = d879d238e223931d2b7f4ac069a9ba938ae117c903482745e940bca91a94887d
+EntropyPredictionResistanceA.1 = 78d9ccea03a710993269d5fa28fda47c85dffede8c82e4550f1a3919497a775d
+AdditionalInputB.1 = 8adee19d34fb4f56df8257a07bbf9c817722b99827211fd6169e75c085255c4a
+EntropyPredictionResistanceB.1 = 01e01ee45861efcbca7f6b2c96f6af8ee17ea949dce17eaab109fb717a855f6d
+Output.1 = 4e89bc1faf645385eb4f065619a115dec9e84459c9e51c0d255806b76285e58331f9933a4df5a99087a29b81515d3249c7352c4238ae5a3d614710a5edbc5a2b12cd56228ba5dad65995afd417539b24bdb44eb840f82b3bab9cc609732ead312212cd5c96190a131b7794a1d03d4debe1339dbab2bdb274f7b5a2039f5cbe4b86cd3dbd421038294403228b6efc849313da915538b4a61f0689235c2ef1740cdd7098166e8534b1f4b80501147ddab13ed2c4b59d60991bf8af7069741726b9596c96e262edb3205626b4ae047ebddb7fbf9da945cc3eda27ff3d79e4a68324f3bf0ab61ff437d755cc181d524cf0cf8885bcbec397746ebccdc67a7d5948fb
+Entropy.2 = 15a70bb0db6dbe7ceab4a0426d11247c88cc8cf523735f013929c849fbc775de
+Nonce.2 = b698d9ed5ede73c59b6e3bc59bdbb5b6
+PersonalisationString.2 = 158a658b9566ed8e74e47bad453f876a7d6f8475612c9b3a969f7fa761252983
+AdditionalInputA.2 = e077852b5e0e8cde6965a9691732522bb34a6c10f5d2e860d7b9d4212b1c12a8
+EntropyPredictionResistanceA.2 = 8a35e34924e3ca621f1244057d14d387257e9c005c8f0f32a4bc1adb86163f62
+AdditionalInputB.2 = d7566a639daf5e148c7b67f9d81167946245cf1de51d0086efea775a27f56dbb
+EntropyPredictionResistanceB.2 = af3d1fe4920c971465569a7500f00b5c233bc4c6adb1987f08783563625e1b84
+Output.2 = e4cb342b4ca72c00720c0d09f009c7278913fed2ab503b3bea841c1fcb09a07235996f21c50f8535d47df4544e29b6f74eb05a445628dca6f25de636e0d27de8fec445133f46cb12127dfc34532ce47244cd38c1209561a48adb44e0e96b1f1243ca1bd55a577c28eba4376052cb815f37185bce9ed34af86ad52f8a8a7b37fc78b7b7ee685bab34fc2cb0c669df5a771226d01c45356cf170470d609767d99a6e8ab61866a8ea27e214037bbc7ac66202f0ecef6b9492462cfc947dc45ca21834fff9fe1fb32a36dfb11f28fe6f644f39708310da62af97e45415244620ca5cce97e0fd868113e4bb75d27cb0f1216c37d455c3ed9b60bd249e47087bfd876b
+Entropy.3 = 5ee65200a3eda28fdb899a1c91463659d7dc4f15f403a69ea773cb8036f47ba1
+Nonce.3 = aa4172961919da659acc305d7473fd6e
+PersonalisationString.3 = 8cb9d6684413a47efa3582e7f137d7946e6a852aff6f2fb786b290a4ea9cbbab
+AdditionalInputA.3 = dfa2711045553bffbf9bf2ebdde11af72f76f62cb60ebeeabb6d29731fb6b144
+EntropyPredictionResistanceA.3 = c29834b469ad44c941120614823ed86999d5fff4100dd8503bddbc38e5ed2a3b
+AdditionalInputB.3 = 0e6d055f9927b82bffe59f22b3f41dd1fc400f844afe162e4435399d435523b7
+EntropyPredictionResistanceB.3 = 2b9fe5b49127b417d29ac19b2706757a04adc5521221cbbf14d9254e50de1ba8
+Output.3 = c103b391db0be6817114d2e5338fc80448430cf6e4501deec3b6b5937654a6b5804bdc964e667394a0d9c629c6ca907e1ceb0517065f21600cc32a879e4c5e01249986489e5aaa83d60d6de5f38456a52a258dbab04a8ed097c5f2003862a4033cb987989e6634fe660edd7b91f1602aeed1f047167b581f48e9f3b67b8ea44677455341313d9c9ec659bf294b7f4c0125f60d9cbbaaef85877b299c3d24cbaa785b0007205855ec2db29b6dace2b71571681278125fe3434a30dced5656eaa768117345b4315c83f6d6340488e5d74d85c39b9d0cc2141faa582071e645096f9b160d6cf9b6bd1ffe554436f37a9a38e9cc24f66fd563368aead11ea1653a31
+Entropy.4 = 331bdef95a54c38358dd12009334f6f43a8f9fdeb8955291e9d095a1de80717e
+Nonce.4 = 32799d3c5bcc3b2a5d88da5d7861a3f4
+PersonalisationString.4 = 1ceb9ac5edaa1b497ee0904ea868d0ee9d09e38fe15275ff12b881e1e9efd029
+AdditionalInputA.4 = 4de0c0ee2e2ff1e4d68fa2476d52ffe0f667f53ff0687529ff672dbe981350d7
+EntropyPredictionResistanceA.4 = 959b32de8dc3f4a4eeb092e3a9b93ca7b7e08ab98caf457e77b0a89ab5b4dccb
+AdditionalInputB.4 = 1af2ac89c2cf7de254a89dc0082b4cf8bec73c49560cea2a6c73ffa0d531560a
+EntropyPredictionResistanceB.4 = 6ed566699f4e5900002f5a6c64747123a34a146f36245ae5de1b07f66c11c1ef
+Output.4 = 9049dfe57ff5e4d433badc0164317e5fbc8e9e0020586a31c678d5fbdaee93228e6ffb09ccabc1e1c4917b735629e9971c58cc766cda8f41ddb2139362a8e6bf64979df20fc9aa8ad4d054dcd4acc7d6b83f2d956fc159436e81a0e322867e0a34701cd960454e6f53265fb5abd85c85b059c24e98da098b231d0988548355398fbc1958e62bc0d86066c3540987a91e3ffce5ba75e007e5b162cda776c0c51ba87f631f0aecb796ca412d4ffbc7d2d73f06e9a1aa1bb05012414f84480aed2dddb6a3d74a5ceab44f465374040b33429491c9b217253b47e8879f333e783d1926411e9baa40433bf99d3744737995be20503498e612caf8d654560e473c0bd1
+Entropy.5 = c92945f618957c111b79f84e43f00dc7243983c07f19314a17073ca6f4eb4d77
+Nonce.5 = 6daa70d6ecfbd3a9bdb8659ca01da724
+PersonalisationString.5 = 74e3f6cd74ee6d0fd681b56a48d3f4b7bf7416a98870551d84c1020ff729823e
+AdditionalInputA.5 = fda86317d67395e3feef9e2674e8cab6b85bbd30bdf1e51e42d052bd785064f9
+EntropyPredictionResistanceA.5 = 523c67a800b0c90aef505270d785aae2d10f1af16525b14c7619091971b66857
+AdditionalInputB.5 = fed0588a78fa3cd06001f30f0834a7c2f5e99300136e7b672aeef36561d98683
+EntropyPredictionResistanceB.5 = 3289379b9d37f8d6ce91f2b3010af570cfb6d076e1b8838ccd49860979c1116a
+Output.5 = 6306ea3b1cdeb1479d2eaceb046f8bb86e61b6046ed562ff08f965ad3755c8920ef45ac20bc0c0d909ddffa7659ebfbda00efbd126a1722d997479a804024132f330c56bf17946336b4dba3d2f3f23605f91b3346751beb6a8d666f9a0f480193173588854c7a91c0295e641611f128776f2de9eb1150d2f79a06e5a0b9abe64b72176ec381b29dab53e11852c3d094634da06edbe3f630651477d4cba5a9e54ca7acda0c607478f945141c9b79c2edfa506e84f5eddaa2cda551692768023864d8c7fb13ea2f8215d74f10e180fddf4480a90e225a8af6bd6d5f4f374ce9e5b5f2a20750c868ce4a67e85c5ca8cafe2fe710439e1e8268cb08e4ea07d97ca65
+Entropy.6 = 2060bf72e93916d128a4cbbc06086d49cfca00808582c42e90614415d4ec81d6
+Nonce.6 = bba66340af6e82a3e01563f2d8564b84
+PersonalisationString.6 = 8b69859658e70764118385b1594e8d1909aa2a4f4ffcedbde5f5a9af2d20da01
+AdditionalInputA.6 = e8f572899691238d27355915617b74d151e402a19664511f28b2b38214481a59
+EntropyPredictionResistanceA.6 = 6cef4aae6a920711e0b4becd98b5611907130bc1369a28b1a5423d6b9e5a5c0b
+AdditionalInputB.6 = c238bc99f10c7e92e1ffbec5bd7d113402c3ab44a5a42e56c57dd17c31d0db22
+EntropyPredictionResistanceB.6 = 2f6e59b9bd192b928808e34a30aa64fc01ae0574d07008fe4cc7be44a50b4b0e
+Output.6 = bc96ade9cdc2f6a97a54491f1b3a00070db5aef09c828dcc9210ea508c1164682baaade9468082e6961219004ce19e20487ed7bfe7fcb50aed504c07ac5d1d8a587bde19be1471db953b335a30bcf52521ea28cc22fedeca4f2b0d5f9ea7ff423c6f61c535037653dd26cabffb660e79103cb12412198d7795fbb26b743b09efa531602ba344607bd7e0593938606d1d34fb6dff85eb392895010166359a51dbc714038c5a0f3e1e0dacb5a31aa33ad6a03b40bdc36d90c801cdbd99008a367754c2ac8cb4d1a157379194effda2470071bd23e6c3306ccaebb36802c9b45e089a2028960aed4dd4999686f18259bc752c5622ecb7bc9f72a672f7ea7cd47406
+Entropy.7 = 504d62a8a419549fca6fe89757d01520b1b3ecfabaf34fd7315499479ec679fa
+Nonce.7 = 644b2ffc343e0b6d24b3b421092dc9d7
+PersonalisationString.7 = 72fd0936f139917f8c2ac9aff8158528a57beeff24c9728434aa591168c28229
+AdditionalInputA.7 = 8f0f136308e2e23c298ac786eaaf46afcc7766eb6e2a29e4ea029ae9ef0fee1d
+EntropyPredictionResistanceA.7 = 5ff659fe4ef791f2ec0575f2544ae9729b44a9455975fff6c39ab4bcb68fb1a1
+AdditionalInputB.7 = 682ce7ee90abe8ec60c9cb81915872e357d16cc4cf8250001290973658b5e816
+EntropyPredictionResistanceB.7 = a91204613c11ff28b137fe3bbaf5b92c7056c3b3dcce7511b067b824508cd18b
+Output.7 = 6deb51a61938990dba1e68c46c21372deed6a6cf2a99e7dc9da661dc9a30f732b7b91e2b10d2ebd8461e26ae42297121c7c96bf78c868cba8e7d34c81ad3ac738fdcd19e106b29d514644faa4a8cf68f3b7943f40c9dc3c23e658766b158fe3ae6c3d56e8be8e782f085dd5182446ba96bf8fcfe1fe06c72aa101b5f89e6f3718551ba0f873bb45137d8e80b5271df5bd7ee433be335b4313829d9ffe76765b83bd6476dd55ec2cce45f1727342cef06bcbf8b2c940aa0778a7ef1d75d27141f55a2869401710595519ea6337547bdae3217889bb5f263ebd7f9ec25d782c32ade7b2c3cb50732f7f06206e3df3e28879ca5fc9e48d360cf89fa08798d945bc8
+Entropy.8 = bbb4dae465becb42f85cd04887f6e1e5b30eeef61795e59a257c00c4b0ce9d60
+Nonce.8 = 80e64d94ba9c2cc0d648e90fd20da60f
+PersonalisationString.8 = 5f44d9f70c09a5fe78a709239d0dcd21a5205488df6bb74ce36e8e4c7f73c7ba
+AdditionalInputA.8 = 56f4a4751726b550b3e0cb700e923d4380aa8218d246ba030a56f19643af176e
+EntropyPredictionResistanceA.8 = 97fcb0cd8fdeb882689115c779f95ddfdeaab14dd0f5c4b943dddf80228d53ac
+AdditionalInputB.8 = 0a43aae22af41aa522dc52cc6b444a7249ce6c5ac0695e0ebb83c23903f3ab68
+EntropyPredictionResistanceB.8 = 150b054e1e18a8afdff5e865aab456f2e8f41cbf39403d015bb374085908a173
+Output.8 = 1c5671cb762baa567acb7e31f91dce63f55fbad9d73c32e3ea71719337f57c1fc01a666cb5eaac8283bbfe2ecfd5464c36421ab20894fdf1c60c42ea245ed608bb9e3ce4a9f18b94f6e1b17d5e5ab98656549e1e052b45df890a8687a1e29d99dc8f925a2f4a83680c86667ddbb7ec9862618c3d1b4bb99f68ecfaddc584fc99c9c288005ec2c0ca0968ada80a59ab3b382a74516bd9eafa9300265c2c76f13f12c2c232e272cca5d6edbe4b9c246629248110d4c606e06ff64953021e36718e1fc1de2814e924a72231f5b373d081f083788d4ae26848c10c6b825524d8aa3f74bc580eb20ecbd89e128eed7f20a9144b91df1818dd6097d11e1b7062aabd9d
+Entropy.9 = 08580d2615192544ac0d88db987114a1f8694af1ddf25313eaedc49e8ae7b364
+Nonce.9 = 0ff942686225c34c42effe6fcc43aa2e
+PersonalisationString.9 = 002093ac491afe8940455079e2eda9f5c8ba49c4e28acd6b867f38b9e2b674dc
+AdditionalInputA.9 = baab52c0849391282552bd990c37750ea8b6307f09462a8252113b845dce858e
+EntropyPredictionResistanceA.9 = 4fa8b9ac55d2e979a6d79401fabf9d851d8393e74c3f85ae0722d92c173eb131
+AdditionalInputB.9 = b17a12a5e4eee4148c520462022e9ad32fe98bb1f107cf327a6bc4f833db61de
+EntropyPredictionResistanceB.9 = 1ac27ab95c8f81b2fd062e6491aec0c5cd7727ebd03d1fda6acf54849889eb18
+Output.9 = c8fa82ef542454e20dc6f3adb766207990be917b48a1d2f815319ca6547b67864d4eeeb40493a8f9c0efa8c5f18ae40ddcb38a489338cd3122778027542e07317e98f89b5f419a8c80aa26867a3f55fa44a624dd76eb646e2b146b90b757635848adae6b993a76efe60d11e5f00e6534263275db1025fe46403acbafd89c7885f62086504d7c5f165173650396938e84545609b5dcc9df163ba3b80c1d5219f81469e739f5908af9bc8fe81d6a545e29e56ec7f2d080b81920ee9da7ff67cb01a5c60e18d945ba50c339e9d6fd54b56b4b765aefdd0de0c2d1715ed65208dda991babaf7d2685a84ba3fad896c39183cda0a423f6ad7507971e93d160e751450
+Entropy.10 = be6427f02e1cb51b472209effa494d818544503898919b5f45ec1685519408a6
+Nonce.10 = ee3fb053800cd6f375fe63cdf2707322
+PersonalisationString.10 = 337652ae8b172ab1b4a22344d1cae874f04a0ac8623881687ca811770a290e21
+AdditionalInputA.10 = 531fe6e4b3f05a82dc97b3631f05e3531504d2d712b85fb694c4292db4090b0d
+EntropyPredictionResistanceA.10 = dac33c34b48f9c80b9b82baeac2b4b67f102539cb38f28a398b1db18913b20b1
+AdditionalInputB.10 = c05e18bed8832289d5b26f8090d155f964c354edb8f64df697b7e86aeb1a7d73
+EntropyPredictionResistanceB.10 = 621cd98989bf101cca460e2505f97c2b8ef72212b9c8530c44057a12fb0d7100
+Output.10 = 1803167cf24284eef655e223d711f3c30ea2e6f9720a2b04a8565661a96eb752ee6e232f9ed0e225fc5f894ebc2ffd755109e8fa64b52686932d3b01a6ab6c5c087a2a3c32ea2618c4c9b73d97b5dbac62d273cf008419bfdaf0d7d9b5127f6811c5d5b753020a945bd48d7da2605abf69bd40220d5358543cbfd2a0b3116e152fe1dc4b380152d5a906f3de6da6ca5b2e021811afb2313357706863ddb6559095091adaec047f6866bea754bbb68d9430c59f7fe3586e2588df7e373aef010f11b2968751ae26fcafb05d8ac49f4084c71a83b0301c6639aacbeef6d51b21bf3b20d75036607c74cbb2685a4e2008a6314a16b544e3380d724a5e486040c220
+Entropy.11 = 197e7b98d6e47106e72337173f302909e2f16a916f043b4b50c5fa5ac6a84f43
+Nonce.11 = d104f299fc084689301d44250694c0c3
+PersonalisationString.11 = 582be077cecf4ab1255e9de2195ecd15cf9b70b31019148c6a504ed52c22b7dd
+AdditionalInputA.11 = 76f6858dc825f919e636d0c17b54f87221760747de125ca858af504e9a360704
+EntropyPredictionResistanceA.11 = b02176bb060a9eb461fc7dbc57b1b0e08065cf3ff7f274a1dfa7842435884307
+AdditionalInputB.11 = 18a7118b7dbf4f935f940944855127cae5fb9d085969d31502d68105dd97f804
+EntropyPredictionResistanceB.11 = fd5b7e6e00352bbf71f3eb6e0abfee01eaead89f2af6ae265eda074852007ef4
+Output.11 = e03d3b8df3f9f9712e14c8fda1a71ca47e008342c2b8286d6791e9c3c4b2e471c3cf5e8a6cf5c2ce25c38d9faf0ca08399ae2f48f2ab6c15c9580b2117f111dcf59f585de2b9e56f3cff0250c12a934f2b67e5a09b825cc271c6f3d75a3b1509bce3d9fdacf415eb60b53a62a2f3b806d63d417802e2554a005be031baec461a1aadce1cbd26898cb32d3fa832beb6a510350ea47c0a05d78bb260d570a8e377ede40e7fe1788fa2f061a7c58c343b2b480067bec70a8f3f0c088d44bb8b0836e53198a5f26b663addaa3347544967c9447a5ad7b06d51654f676c906724179dc50e26f9ff799cb28eddb9201db5d0c7f180623c429ad72c76576e64dcf83cf9
+Entropy.12 = 847419fc3afe553985cc29b52bee9a2f59a3e9d98427f31d525e32c2585d562b
+Nonce.12 = ebf36ee30c2b0bad395ea7d364e0ee52
+PersonalisationString.12 = b2e7130d0b034bec29b505ff9acfa7ec898c5fa59306acb27438b2b4b9e08417
+AdditionalInputA.12 = 8b2ca2a622fcd0bea66c26f3701feeb50653207f2a74ddafd7ce1681dee24308
+EntropyPredictionResistanceA.12 = ec49053238e1e9b47a98010e4001e01b0a58efd62b7fd0d85170d5f8c80b4f93
+AdditionalInputB.12 = b92128f2210f1375c1acd8a1bd39a5fc5d43874794206c7548874819b797e448
+EntropyPredictionResistanceB.12 = 89f53d68051c79e6deda553319fb372ade2936334d48264ed222772b15555c67
+Output.12 = dda9c524a432221b784cb4572a333a9a787ca9e88582f28062f1e9b4e0840e9c520f2a7a738a24e5874d8c1af4a539eef9eb6116f65b807efab2b0d664c017188a4737e3ea3b69dbbcbd3dc160a5f2dd4022ded0410fd76abd385e3dffe04df7bfc902304d86db120d3828b928fcd717952150c6f8603f675ca7d9d4b440959ade80cec9e4dc0ccd680aaead1a63e6b2edc82265921e0c7da4f27c48b3b5998ccb6f2f2501b537bf073e427bb1cc816b70b1c7d414d7c7c287af9c9e91794feb2d36f336def8ac1e7b04e1bc9ddd3402069ce134eec2dbc1b07ec5798ae17f907a6e148f630fc740f66523455f4c243fd0526de6abaafad0329722d1d9f5ee72
+Entropy.13 = dd1734de729afaa3b28f031b143fa838ff49ec3990472c6eb67526b01b27516a
+Nonce.13 = e094553a5e3553251a7f7d281ba59874
+PersonalisationString.13 = 598c408d015a2a43be908a295fa117f3160da477c21f4772531ba191f90db311
+AdditionalInputA.13 = 0fdb7bc9e4a621d1d14fe0acc52b04d2618c9743efec52edc2999e469f2784ae
+EntropyPredictionResistanceA.13 = cb632301c2ae13cd8bd0ab69ed50fa79385fc50895ed29cbca82dc22ba9c5f86
+AdditionalInputB.13 = 300f5e2eae5468e523bfd2788c3c70191949a068df822a15532f79479c33dbad
+EntropyPredictionResistanceB.13 = f74c11c80c56b81922f79989344d4b8a309d54e464f79cdbef9be70b6344a80b
+Output.13 = 600cd3e9605fdff5a783a3b478b31ba6fb29a13a93648b79a787876fd60e7643cbf79775d1904ca6931f3ee1f0c832b81c8b0e691ffaaf02af1675bf7aa767e608c36b5392645e8e51a92f45a73af556f232b3ebdb428b022b20b27b804690e06a47b1b03061705ce7a050f160f551ac305d929709e4520a34a46c1def494a78fd8168234c2cd0d4a28c0bae60312abebcff3d10a3baa625418c2d19b5a0f5e1d16432c5563beaae789f3421d738cf443f2ae285dd084bcf45dbbee38685900f690c878ddeafcc782e0388942107165a20ec6933ebe5783eb4bd4026f6d73c765fb3f912929812b6babdd3e568a84755f4cfaba1ea3b41d39d776b322aff3ae6
+Entropy.14 = 552e6cbef8c379a06f0d0368c5066e78efb452a903164f04d542a5487927964c
+Nonce.14 = c948c63b547d6d750461fbf55b3deae5
+PersonalisationString.14 = 842d6739a6e4f7e96aaa87e56352939394d60193ef3c698804946d1f32c89350
+AdditionalInputA.14 = 1c081c50ea76c40eb7e34ba6cd50e6fd1331287d13969068257acf55b90491fd
+EntropyPredictionResistanceA.14 = 650b09d3bdbfb9723502ad0df9eab47d08a503d5b0191e990ccdc42b058f2dc1
+AdditionalInputB.14 = 3938b7e88c04a3f9d9ebecfd7423c96c47bbf41e223c067d7555d1d1a45247c9
+EntropyPredictionResistanceB.14 = 2979174e3a15a28c3617ca69af0f3f6319290bb202f35e3291ed15a9169c37f2
+Output.14 = e3173eafa1c06fb0de92a9873d8b0b91da8fa48756207dea3fcb94c21910a08837fba9ac7b234f30cd3f9334f239fa86991f40e74e4d0cb707fcabfb19b51987bac9c7fcc926a88bb84aaf8958b9ac232f2800877851b27ef82cdd7141915b98652f7d6a47f9d59440417e730a858d662c3e42408f85e5a3caa7eca24173b87b2e0f1badef07ebd7037d9a8a512331ebdbb0f9355537efd1c84443dc28634fe7316deb07f4bf1e721e72181f23b24460d8eb87f8f130fbf5a379f67b42794923da4f3de5b24ecdaf0c6490808f276cc83d1def6ef655d143c812fa6a2a2d51283b28e62a242e238c4708d68b53589b56c6c3d3a7f122a27bb7278c26853d91fa
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = a531d7700db887b8544644916e00685686229d30b47959f053c26bf38edd20f9
+Nonce.0 = b368ad648c9e773316ca1d81456763a9
+EntropyPredictionResistanceA.0 = 3f1cccdc6535fd944e080c2642b2065cfcacc60dddde481856533b1ad1ba5597
+EntropyPredictionResistanceB.0 = 518674c4493dc832322cfddcd8914e4451a67ac238ede492ae4c649e037cc780
+Output.0 = be924503b1a51bb7696869169480ca2a2f3b62538011b2d16639ec570633d8e6c5f1cb25abbe1fb33c72c701fbe5fa86eac55df27217fb1699f051971d1a5e04e34e144d2ae556e51c96c45023f403b1d5cd4c4858167c6ff149eb8b27dd6af4e6187ef7e314447ef2eb318b94763fec41ee530233726ea706ab2e8da2c8fcfd0d31c129344ef15cdb42fe57ca93a20e0396c2e6348c3387360fbcee2502086a38e91293f3fdbcb8e611a030fd9a397e34ee034fe266e112f975412f778d59ab5dd708e65f98eb8a2ad74246ed89db938b503afd0904fe64420e9e8601fed6aed3fd4cf8f499fde55d47bb20a7c515cc7fc6d80cf7c538c484bf1b4aeb566e65
+Entropy.1 = 4df7da9a753f2d3e831053b80966dc519502f3aecae310e81009faa34179720a
+Nonce.1 = 1981cb74be7bd27e5d9957eadd93d6e1
+EntropyPredictionResistanceA.1 = 5d1715aac2583d219783e399dce640cdd1d884e403bb8e74d84a2c26e6608917
+EntropyPredictionResistanceB.1 = 68f22827b442ca329afb3981fbb064714dbf162a9e71d4685b61bccb9d52127e
+Output.1 = 6abb24504b50725dee0c1db8201c12bf2354eb990a9105e2e3a9093e0ab68e6f168bdaac2108ef856fad184ac8a1d58cfe83746613be2b0db065eeac5553f9512b07b0e251aca4da62f00ddd22664a457c89fecbbf6720672882e5c0f9eaacf7a07468db02d04335009a765d40f95092a49e77dd1a4d2f59c060af52314b59c1b1f9e84458046e0fca64c6213e91a6b051e3631fd02a66ed7f2d9edd094294e297c52ed8361481d8519323cc13677648487a9cad9aaadd969f96b72f7363a8cd9d021bd84e5931bed8340e1a3d276e1fcb378ffd35e101d0e8661f9bedfb91185b863700f80fa7fed380b3028c7b8083642715dc79ee4a3aeafb7c66bd00941d
+Entropy.2 = ea715bb99175d01fc0c8810d28b13964a581986607114c261321959e3d76840a
+Nonce.2 = 32ddfd1c5d0ea6b0b073a2e8f1abc726
+EntropyPredictionResistanceA.2 = 2c1095802ee00ed34a2e9e68f80014e89904093df5fa991fce151e98aca5944e
+EntropyPredictionResistanceB.2 = 727f8cb6c0cb376b92d8bdf1d93393c8446f689c7295da4aadcd0942294b0e44
+Output.2 = e808a834a619f87a358d5cb51b6737bef38d0e515c3303ad8f5a5e35baeaeb93823990726208be16911f3ca41cc43e29bcb2ac247cf25ddb622c41a4f0923da8660dd44e2175ca0913085c16efb52d09db03d7e0328fcbce3d4fd34056bf303a9a3c83cebd7ab775c040a5439d623da664c01b2d87f00ff48d16a1a9fdb9c2a7197cfed080140fba43706233f53c64a26bb504967da886ad7db9353d1aa17da73c0b09f2e9cdb69bee9b0d9d9ff0108607074360cb04895f5ea0f8ce5149f345e62aecf67f3876187daa9f4526d7f97a22c6d0920ccc2336b15db3a04c789999ae268d7d908285fed5bc341d102bb3e6580544225b3d9b0ff91d4036e8cf33f2
+Entropy.3 = 5cdd279f2177f1510ed059f775ba4a10a7629004c44dc1c501ecc9f67f362373
+Nonce.3 = aba11e31b15eb345bf95abfd019eb145
+EntropyPredictionResistanceA.3 = da302456b4ab98d43b0b99d2cded73089a71b7297135ef5b4efe9f97110c6168
+EntropyPredictionResistanceB.3 = c145a106011eea5e17f8493f311e9c4d725966fa9142a9102564c84d3f451dde
+Output.3 = d0f599149984da22c27bfafbb72364c7e23936bcc838803a5b8d1b72f06ca1489c3cefea9ea0ce0fb928c297b1df0540aa1ccae97d01ea8989704481b18104ac5e600817c311e981a6aace9b3ca24aee33ba9f6884c61c696b61da48647f9fe52d8cd4788d16fd9a74bc3054deadc2fbcf99fb965ab28609a082d9baa62b8b1580b3f06b7a0a71313810eccec25cf34df6e7ed48ee655d3530e25d1f2eda997f762ff17a1995eca9e462ab7b7a0a2dc4b38b1ec3bd8979b4073514b9f08d6ef568c744806d0a468f708fd2d7c1fc26f880895126820e81ad9d66251635ac2c6bbb5ffb0424e944bf020dcab664ae89cd9bb0ba77b0519debf4f93f1af064c2b1
+Entropy.4 = 5c2ad5061e94acaf20fc1213f59ea6e97c3067eebf92705f033dfa0d9492e6b3
+Nonce.4 = 743a7ce3c858397a7d3bbe6056408dd1
+EntropyPredictionResistanceA.4 = 1023524f53ec5b8afae4941d844f7c2f0f068d42d7cfe28e4b5fb9b3247b82cb
+EntropyPredictionResistanceB.4 = eab658e462820482fb4d6d3c54d105aae671e033eac6a2224d9bcd7d73c9e4ba
+Output.4 = f582a863f80818cc56f55d44572ec94f9d016985d72f3c2d3e28f1c23693f955f97cdac1843c0187d4015d0f640a21a68a9f00a1efb7ec2163bbbb6c1220bf023dd713897c0b00f43c8c8f63ae0d63d93af3a49f184787b6bc891425ab4e77facb9b2b18bc8e2ce0e16aae7d2eaca8f6dd87a450419ecf7db442b8e9e488b96e036c2fbd9b2a4f9120a5a29d12add9942a021c894e758b4b43f5e02926d928a7da6078750f19568e36fcbe8030e6d15c3fc670b2d20e3e8375e639b5c22266050e4e965e07a91c0e6de53f53407997596a14d7bd53db80a30c6ca874f2868fd70a7706497a9047b32d11b87d9d9c5874fad29253cdbbe79e807fbff6b5272cfc
+Entropy.5 = 9973be14bd352933188732c6f38f2ff79c47adbc320864e6fd6fca133a497abd
+Nonce.5 = 429a4b8ff01f779f093413dbe1870282
+EntropyPredictionResistanceA.5 = e26c54e5e3843c8e02e1943c296c72af7879723fb9115eef3c7dab4b8ae41937
+EntropyPredictionResistanceB.5 = a723f492c32ebe03416128871e099e11d7cd04429be66186541febf22009aadc
+Output.5 = c7dcf09eb8adf72c854925bbe6228ff09c9f2a9287fe492555d64541452b8ee85c6a13c2bcfaf3ed24daf6a5d090caabe6288b39c10a428cfd236748e47fb8bc4760316414fe6df3ab7d48b3bb9be625be275dfe9a6dc2e644cbaca463b2ebc529ed312036a2b426b1cfd64c5d3a34f09fd491783695844c1a52748c6707dcb0e80a83e9e2293caef3e8c634eb8048c96c1b691ec447ba12b23d72d25800e0a18b6e1544be5aa4ffdf50acc1e03e086532b4238e2d9afff6e3b6734232a83fdb2c336de9d2c4166d82649cc66534f2b6a40f3f07ff4f4e1e64ab97696186041f2003b52d4d35e8bf1c71b3cd4948f15cb81b9b25f022942cf41bbb7c2fd82e2f
+Entropy.6 = fca01235820530abca27d24ed505a451284748e89fb569a322b01cdc26a6f97c
+Nonce.6 = a3cd94217bd49c2ea866d770cf5753c8
+EntropyPredictionResistanceA.6 = 82f6cad90fc37c17071e49dce65b74ddb6780f044ce89ad19f40c734f5a4be85
+EntropyPredictionResistanceB.6 = 668831d9efa3dbc0127fdf8d883d57db7d3af93420dbf018189fe118c77a9933
+Output.6 = a8e1d0feea7824ac8a4baca6f8e225fdb574f402894ee0c48c9ec7cd2e86fc832b547aa3dee23069e5ab6cd918b3fcb7ffa65752b7b4c169a84bf960e3ee1e44ff6603db25efcd19985625a9bbfd860beaab61612aa087fb2d6f1295db786321a9b2f29e01d1e5c659b0d3c286e0ba50813bb748de20c6e7c02011f4fe319e4eec520126bd51bc1153d61a8503365fba8b5d93458c0c85905ba07a2c38316603bab4880b772d06317d7c8512357e4f907a795cccbe5c6afb3f7edf4208d698ed969cd310d08834749bb947b2fb711d92ed1657b86f93d7e4a249c6267cabfb1692d98fd7c07e65641d36bd03186cc0baaecab9aee021f59ada940702c0dee491
+Entropy.7 = 8c2312c6ad8969bbcc5dffc1d356ea20e7f919975f6606da16ea4a51e0ce84ad
+Nonce.7 = 66c1fe839bc6b1589670e05a6b12634f
+EntropyPredictionResistanceA.7 = c01c9d3f353e3783c2774f5e3259b8091a3707127070c4594899e59a085d14af
+EntropyPredictionResistanceB.7 = f5796178f68ccb02b6750f9161274fbb0709f3b00de123bce90a80c5e68cf5b7
+Output.7 = f0c39b1ba6e67f7e6e62ec4c6c1f12cdb04b6006db8b8afb702c1207db9c6064b41ec5b432be3444bbf704b9f6b13fce0b9a2fa6096455b91119e870f2eb991567a5cf27fa7d11914279a8ef10c12ecde1ae1d8728469ab97736be6718464bef8e599b2c0fdc1f10755d9ea7e67a7b980820fe5a50271f290ca96c2cf93db4e453437fffd2822af8aaf1060810118a905b6b695ab773b1ac3a435d2d793a75d07de26e93ce8c2c086077fa63561614d93e5f5684c7af5f1d365281103ae30fdf3dac4ee65629409caade1376d0ef754d4c09ae24b5cbe1dccd048ae987adfb59ef30a681dcb5868b99ccc4571d815708ccab0a87a0da024e9039b5a58121b506
+Entropy.8 = 912ac89b610c2f32566904af4f6d499e5ab7f06c6f3f14fb375fe84f4c3c4ba5
+Nonce.8 = 1c7bed928d18bde2e499ed1123c80f66
+EntropyPredictionResistanceA.8 = 6544ad9d1178efb8d60c6f1ea76c1aaa12392166ab9266454987b8eb64bc7921
+EntropyPredictionResistanceB.8 = dd238167441e6bf9c2001530d7742ff35bbb58a56f55d76065b606d93395a781
+Output.8 = e310c3ef1a0a3454b59e262d4e3e519e57f8b708be4c83aa83abd73757778ae0aa9d2194cfcbc912ba0a65c6e6324dcd636a74beae729df5d6e078233e3135c07ecb45af5cf5c79f9f807f62d073a3f1774f5bac3917758b2c8f60bf24d634a2bd838d6c65076d9e65cc8735f61e042b283479292e84e37c433f2809a8f04e4286f763cd71a8d19351565fb73eebe7a2ec66982630cf39fb40b4f021c5e3678ceb2f2cecb23f38b0c008aa7c89a4665d5bc8014980de2df0caf01c82b15c8d6391a19830b54a7aec23fe7483dd8c1d61f86f55f5d8cfc50abcb84a7ab0a05d8dea0c1f5327ee348bc088046f2a9dcc5dd0a5d3f411b9dd4fdb038edf3eaaa5f3
+Entropy.9 = 17218d3d40f75bc7e0c0e72e935595f8a12323bb36dd510e87142214226e906a
+Nonce.9 = 01c50b6c3ff928645a11dd48fe08a8da
+EntropyPredictionResistanceA.9 = e3afea14dd6eb99046bd1e93100e7504add3e321136a87a34cd58f3cc513ae1f
+EntropyPredictionResistanceB.9 = 3bb95d767375b136fea74cf083ad88f4b6e7ef03b4212ee78a481d0c9604c750
+Output.9 = 11df8558fc111fc21b0fdbd5fb503243ddbf88b57a821ead7cda0fe5724391a25a42c7d0887b8dcd07c5eeefab1e457ed36b0192ba5a104215e03b2ce8b376971386657a835d983763d5f28f19b555078c89f6a25071c30b174965fbd7dbb01ee05a9459da584fe05dca0cd89eb7c5d381bd07691e02e777bde6fe7279437864f830335b20b8ae9b77f950d2e746fd3f5ee47938777b5e79755ca56de09deb20c9c895d6b7c53b1fcea92a871abd0a6c84132457ee64a216963cb221663fe306a3829e9d6323e7748fa3d31cecdbdc5e06a4e4cbc9050622cf63b44f04f417ab95669aa95a26f7ff4b3e9dc1461a2ffd863e00d519c8404cb09d0bbbdf71600e
+Entropy.10 = 96825fb446fa52cb46e4a41e39467299845b61c0cfc2e5a1cd13b729af4bf839
+Nonce.10 = 1886157aed0b989bf48bbdf8e5da28ab
+EntropyPredictionResistanceA.10 = 62a7b0a4d7f783435e94faf9b4202b9744460272059313d6ca0dd986413a3fe0
+EntropyPredictionResistanceB.10 = f0f2af21880b6647384002a6b53c0b1da63a5fe3b8e1be20d8624e8aa9091feb
+Output.10 = 0b39b812a1b2cbd720a3883c491328a3391bd23d47fc400c03d079c7037729f0cc7f5c53bce11b43856a15ce7c71e5a210e50b44c8b976f8de888f8f0f3709c640755e6e01ddd57de2ef5e3ccf07a3b566485f79d2c4581f8850fdf85b0b846d6492577b0904cf4a0a69bf386b45c5d578d167d75181718b94794dbf952a06d10c01a98185fa675b43e88700ae8fea96939b2ca002352d330c95041392167b6e91b1ae1ee269aca2e3c8b1ba5a49b26bcc35fe3987cff80a9c9a768819e6402dc7bb921fe28eee9f806090eb30376df40c3edc9100ef9a65632c5beccdc246d2c07cc33d840677504ecc66415ea7071329cfaaa844f6d30f679c87ea41113d30
+Entropy.11 = 9dbd754fbb0889cf30d4d545c484f677b1abbdbcd49975d9aa08f013832b2d1e
+Nonce.11 = 2df392c0db8d0b61fade96793cd6be1d
+EntropyPredictionResistanceA.11 = bba6eae099cb7b71c16c31070bcd3c4d3a69bb4b9b36c885b003aabe37ea7b56
+EntropyPredictionResistanceB.11 = 1df5157f03dc51360f1435bc3a6c7b607c2ff8eecb1a2682c3725d697cf15bb7
+Output.11 = 893fcf6835df3566dfb418c1d4b7b7c44e52cb895a59c0ef9847f7cd15244734455b0759325a23ca14746cb35c4593e15b17424f04427e513dd4e66edf11d584fdc6cac7c0028ee85d125779d51bf3add4822871c1810ad12ae19d3c158db4cbc9fc066df0c72eabed7ac5680309d85adea673eaa708b6934b13e233bb052603cab8e2e17438962629d612b8917e180b068967df49bd8f9dc8be089c612862aea1e3031c8668b717551d6e3ca765bcea266d43305d3c26131c42cf6026e356b7b18ada7ab33d666218371b9cf9f21eedad0ef07df5219182d82029c93a9812f98c21cfc31dd7441a257d251bb2d31676b0fdabf5d13ed4bb1fff8b4efeb4b88e
+Entropy.12 = 0fcf442f7b4f987d680cc3d18ae6250464d1edea41ce15030d00045bfd18a44e
+Nonce.12 = 7fe5ae1742bcc27c1bfcb0641683cb77
+EntropyPredictionResistanceA.12 = 2df732e41e60d339be9c69cec2bf2daae6241f82101c7a17df8cd110a125ff71
+EntropyPredictionResistanceB.12 = 20731dcc33d0930d5cc4e9699e00dc0abe75ec919f25ce1981867c401450b19d
+Output.12 = 56ec11db6e7dc9e94e841d888da73b6e253a9028b43ac2a3cb25fd01f2ec51622e5a1aa7a49a15734c90cd1e81510c2bc29c875f920b318f464ddd2511a075349c75e09d6aaa6b66556d395a0243055f59b352dab11d3f05053cf3407509c12383f9a1e0199c1d28db2f2268ece29ea8addcddb17791f74677d928fd9f3188637053b054d71b4de88075f4405566ed76e02db46535b98ed069fa9eb8293697946a3ce9f82a9312dcfa11c885e5cc30c5e7755004fd15de830b52b573ab626ab0e6ad54a314a999dda0a8a9cf9a5d7280f0ab87c2c062e2f6cde5e38a6c62b5590eeb7ebb3b33c47de081fef5a005a48957cdb754c08217cc2541d370724e04a7
+Entropy.13 = 07312b585a397f9cf3ce968808690fa139a46fef4a0fb0f99aebd8be787889be
+Nonce.13 = 97eab1de2a3f00491cf71d653aff08d1
+EntropyPredictionResistanceA.13 = 58aaace081813a6bcccb88a6da6b213dd5754d9eb2bad7a94c1462a2c410b99e
+EntropyPredictionResistanceB.13 = ed08e99b8c3ccf7dd063e124e95067de2bf2cc63255fd7e1865efbb4e3f9d544
+Output.13 = 3f7980f9db700e124ff098b88b28ab9c33f40c9126ca8e9e929869b91412ff0227bd07610e1bf4ef92808ec1717b049a5febd9e12d109b907206264591160ba8fe270013cb397ef58bc28d49dd342be641caa9d500c868abb9cae6780af2f75dccc5cb87dc5c124abca25399ea6027b7de3e6aa93071a3909acc98b970034b7f11df476ca48f3d46edf6b8017d548fb5186171a3ab11f5d9a5b66bfd11979110200991420b0d2909fce3d646dd44dd2b690c755f532e98342c462ae08e3e03d79b0a4a6c6c9ada025c578861c80c458429ac376904f9fa7b6ea3aaff17a4966b0bf58d5ff764ed6675b26ad2e2e5ee74a717eff11949d137a5e9cfa9a352222b
+Entropy.14 = 2a4d8a43e8376192e71e926e600ab40049c9e0509e225d255f5e53092294b572
+Nonce.14 = 6cafb1de3b87be182f3026726b07a624
+EntropyPredictionResistanceA.14 = e86b4f4a50f94be55ba94aaf4ffbc161387acd727fa88a921e1a929a05f58b2d
+EntropyPredictionResistanceB.14 = 4add2b54f14694d959d56dce39414767d92ab8b56b3533afe98dd8ce68f1c4a6
+Output.14 = e3be9397b9a960d0f1fe700781a67b4d26616738a989d3ef49e8e2138beaeed9ccf2ef0a6824729f2ba5bf8dcd8ad1d79b2a51dfdf9831e6f026de3bf8298d8a546efd6424d94b09d9dd94d9c91e91389a17ee444ee6a2ac81eb683ee19b9728c1d14b46402f59d74d983851783fc061bbd39eba02524c395791997a4137d28ef181f81c1fee1004cd560a64f5a9ebab6af748a4feea005402a22a0f5786b9b219500cd790239af74bda0c3395ff61234542a00a0d6e9128b42260c80a0d63c6f9a4716f14b51589f9f914a45c7c5a02c3a54daea6467b862496c1d53f48121f8d288dbd6c732a6f39ebbe899164609ba4441f71e93e08fb36d7130593a5b4a7
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 193e9ce9da72ec7796dfdfcb204e27362d66c087201bfd21ace423d0ce058851
+Nonce.0 = 17aa4ef7600438bc1f0a78cc20773682
+AdditionalInputA.0 = 889773d9d30f6ec16b28b4dd625594dc9d24a9500c6acf4f921fde66bc3bbd62
+EntropyPredictionResistanceA.0 = bbe5d81aa5ac0b8bc41f2a9f2295a0f4b1c3aaabc534ae3e0f57038a9abd59a6
+AdditionalInputB.0 = 0f55d43157dd6e914b9448f9d502b004f292bb5ad63f2c8ab6686cb3523bea8e
+EntropyPredictionResistanceB.0 = 8006ea4a290d9680f9d43cf046b2a61d90fc526f49b39a0623db2d6daff22ad7
+Output.0 = e25b7f15714bf5898d2001f11756c880b1fb83c486e75ac4d2feba94d2581609c11956d33771932283ba9a2b913c97e73c5e15c28253c597ef9202445c84fb0d9d042f9224749e384dc0301c6a563d0ca99ec4382284554a46a9cada9e12fc8ce00fee0a40a033042f1b7955651d4e0bd0b6fadc9da7e68ee3dc210bd8c70400fb7949dd1389352cc14faef5070a20222e6f88308ae387974bb59e01b682f01d2954e93c9ac371e791fb1fb0265736920fbc37c96a1ba133db37f4a3d36c8bdde44d98daf2e9511ab93959aa8b194649911afddb05cfb1458e489881261a11dff9d414aa228e97e1929f3416e603876aa540df78f48588812546834b388f82ee
+Entropy.1 = 65ddc4bd9e757bbd1890dd1876a0f6fdc936b99dfadffef0aad4afae4774178e
+Nonce.1 = 6251bf9686a1fa1dc11153244baa70d6
+AdditionalInputA.1 = 49b93d3c293a7fe918e090117b0ea67ba0101dcc69d78ab77992b1681c24150d
+EntropyPredictionResistanceA.1 = 46809b2a1edcd6ab4374aa50a1ea38512a8eb43d7970d8d10d693a7da324838d
+AdditionalInputB.1 = 466b4164f42f32fc61042b473c00555d873dfb000048ce4e889efce145d35a03
+EntropyPredictionResistanceB.1 = fa9e9f4bc7262ab4d6a3c73f706cc2c86e8ad8dc0bb7fd46c727033fff532b1a
+Output.1 = 7dce497a8c82f6adc6bdb4d2864f207712fc9b2748b6b844725d06d20bf8d664afb7c1c928b1ed6b55f7471dd8700996fff43eaedb1bcf7f2a0443444e967d0d7c0e47fe37ff19c2aa075fb2ebf9c24ac2a78b31a1bf25e044489222bbec82a4c552c78c6a8f73109382940683bf4edbd3f41858ad54bc8f86ad65790318fee6b772ffa6a85f1c740979c4e1dd18d6f30003ee9d56a9906970073f222ac8e4d376adf3cca45adef0489c318a9042251320663672f40a9786d3dac06939b06179f221c934ce2d9ff4f18e2fd34753ae1e5d652f94b7384b4b8e21fe02e5c0bd0af47779026d8a3c253a6f0b11a585c9fa0ecf6eef6588c89bd70876bba8ed9866
+Entropy.2 = 4b7511703ade964f233b7ce455d4ad569f4010b37f8135718be05aacd1e4b125
+Nonce.2 = 14d91f6fdf0616032afaedd56d0495b8
+AdditionalInputA.2 = 40d2354d5dc067c4ee186d01108cca6fc48270ef1773bacc370504a03fc8bf53
+EntropyPredictionResistanceA.2 = f5db2c270278b6953ad3089f4fac7ae44e2711ea5c6e9fd8f994ca2cb06622a2
+AdditionalInputB.2 = becd1fc5e5e814e82d2b8a9d6dc6dcfe490453940565cff355b615f9ab1aba70
+EntropyPredictionResistanceB.2 = 17f60a09bb95eeb6db1912d21fa20012c9fe4bb4daa891801fdb985ba3ed8fd9
+Output.2 = 5826920fd46f05baae8e6f1011a3af2cc196d01b93f68e3f83626a2b7dc7be018ed72688adfecb4dc264095ca0e96389f7666000a8aadece0b226e0dc0efd4c56101954135cf34e98e9f6f2ff7ac5ae711eadc9ca82a836e54ef47f1a434e0316183007556a07cc1f1ec2a6e711c9a552b2853b94cc53cc4200493acb729aad52cfc2cce42b430a10b25cdf3ee8533f86a5a353a3823658acb90dba870e5b7c4d2c173a9c68a911af8fd61693c62a150c0be854562891fac1a1dc7ae58e53baa12be763f8fc0dd589a3f372f68bc0445d83a9464dd1cff4bf446bc4fd727af6532b97805c3948f5841b9f6df4bef1dbc62bc4dd451daa2b997d885c617588140
+Entropy.3 = 89cac6a5c90dcd8f324affb5ee748c9c908d7f6d398e6b847ba798400feaf0f8
+Nonce.3 = 42014ecc74e895491a926a79c243061b
+AdditionalInputA.3 = df917b35bca6377b293a3aba316527cfc468dfebee61cf5636c9d1cdd969c80c
+EntropyPredictionResistanceA.3 = 30fdbed601f163f8145c9d783cf2e2d89e97a9bc3a89935762a2d01ad9798f13
+AdditionalInputB.3 = 859f56949bcd26e7f70d82b6e8893ab628ca4b6b1d77953a9e6a73684b5fcb6d
+EntropyPredictionResistanceB.3 = 5e5c573db2fc176a600eae4f2b5a34bcf4229591cfb40ebd41972953bff2b480
+Output.3 = 4f30d8f7057e6af7411cf821ca6c7d8f48760a3df234a64b97f347470b2e6bfea4fbb3d3a64bab22ea434f6a1f1ec3795c62bd4b033ebe869d836b3d0d04a431882effa4b87f9204201ab49d3c46cd45ccd24677cae46966f383439c8a916381e730edbc438d91a212140d90b97b26f6c6770c37e2a209ec70b3d936439d203ba9871f64e6991f7357e85f86e453e464945f39175677d5ecd57eda197ec5c788bc3410763419c6fb7e0f1f0d7bbbe58125efb99788257eb38973fd8af7d29ebbab3fa2d38f5b147a7056cea6f0435ca2617bc9f6b4829835c68d60d99abc1d0fdd91a795b88da539660d843e09e7ad23ac6cf4cd83bf1a9eba1f1d669fda29cf
+Entropy.4 = 6122743c3bf7e17e3f4a9c8205285a6cf19a06d3c8358b61864df62aba6ab28c
+Nonce.4 = 425c7e216186db68ab956d527b7b8ddd
+AdditionalInputA.4 = 9bf71818259b9822e6ae6ada2d9a2b1d281db3dd955ab6be0df3f029d78555b8
+EntropyPredictionResistanceA.4 = 692b4c1cf590a542fd0199c5a5c85c55517fa709883157aeaf7444ba33625f6c
+AdditionalInputB.4 = ce4cd9e4428523199a3405321811fab722057c3ad47e7896fb3514fb159b8a30
+EntropyPredictionResistanceB.4 = 6f7aba871d8ac12e78fb42fec3e3a1b24f85d190ac60d17a3f94516989432b31
+Output.4 = 9e79371969a7a77b5f3f42dd54b3bfd239544d38cc6a226e88725adcb0ab91365932cea2fc19c7ebdc1f9ab6f161093cf3a651057e26a9f17495365f0b8f455560b592ac930014678db2d2f87e62be3d0606e682663b1312611fef1de31f62c5ca0a0614baab5c6d74ba0c21255d2510044f2b53332c3ecdcfa3ca8f238c25fbb0ceda600d7bcb130c0799027fd2563c72dec4c3534ddfcb7ce3f2a140cabbc3e0f555b362567d6dd8305a3a6a43531f6132746201ca15bc28305f72b7d559b8e2b6f7f7a1ac5e99175c30e0ebd0367b4760bb4a239c17057e5debc5bd8a1c1a111c2c9ac0bc3b334518b1ef3551b241f588cc5fa5ba21bdf6d28f0b3495fd5a
+Entropy.5 = 005e856c576fdde08cf6ab6505866d22132bcabd8094d5f909d7c624a699f3e5
+Nonce.5 = be687f76360d8889e2e2f82fc5b1d45c
+AdditionalInputA.5 = 87a158a6222cdb84ad57e59e27a7d367d1fd3e3e4a5065eb2591be8100d34ed7
+EntropyPredictionResistanceA.5 = 234c55c76e8cd0cbbeeba888cd67ff5adaf3f0e44d6d6929df9724460608b610
+AdditionalInputB.5 = 1c2d2ac0364ce117ad613f0db1b381e30a48b316b5ddb7dc5de0fc8410429136
+EntropyPredictionResistanceB.5 = 080b30d099a56a8d937b257272e0cfd3b63e6913a33118277b8f5e7cecae108c
+Output.5 = b2f3f5d0d19e3388827198e727f8e3a5ea1d3afc8401ebfc521fd1545615489ef3b244259ad257d693173b6f72430e503b1a5674cc9ad1f1cd5ed3ba91465a8d5c0ff97fcd27260118a0c873691190b6a9222b08ce214a421d837edd9f523d52b2d295ed0e371d580b19c6957b4df353e0ea9ebda330aacdc249780a61800fd25fba7a048272dc1db6758540c59272fcd7b4ece970ee2f9a05b0b5b34b891c34310dd92ef5c66c70dc8f612ea2eb688e223e6b3e2ff6f6e9432e022775fa617174343a8e0d260738b77888eefed61a8486e55940b886fd77b1b1630c3050ab3b617dbaec49838144ff975447cfd7b621a69626febcda8ae3a603b185d1872fc1
+Entropy.6 = 2648d407e09d8b0310e7382938bbe769d6cf9e0e498ffeb71655e6721b35fb85
+Nonce.6 = 3e76d98b4ac6a7c9d46e5c2a87e8a360
+AdditionalInputA.6 = 59a730c4c8cd6dab4062fa2e531c03bd02a176601cae123f73956cd3866de10c
+EntropyPredictionResistanceA.6 = d66e30c08c52d75e93c5b006aae8bc2b8150947c12b8cf3c15fb7ecb900fd5b5
+AdditionalInputB.6 = 54b5dc79bc9ad2c7262ecf366074b91c2bfcf8119e8c5cea5091d2ceac89f37e
+EntropyPredictionResistanceB.6 = 4f5f6236a5045e9b41686456794a38cf35088d7c774d974e5d096ebb635b8ac0
+Output.6 = 9a38d8d00a6b4e720e1fca1578dc53fc352931665e7953c22b0fc125cd8ca108817d1068687b4a4f95e37abb2533e6c842893e500dbedbe7afc7f558ddcc20415e51b1456bac9d17c7a5144a939d2c7bbe95be6db4a9124117728a9444ecde2241a1ac5521ab23733d1c90a0ff96914492c1ee0f843e06b910d13d11aaabf6134788031091610144b3a01c3db78609135b03d565a0e7ff3767ca0ae45116dc430247029ecb990e7cf2728c9cf461b088addabe777d280cf2ca0b7b4deeb9269bcdf9e6e7fecada6575a7f29e9c24ec74485b9402ba72ff6b85a879a2e29ea6647f8e32629f21162fc86c264f99e72f9108388fa40097d10a001fcb4dce9a511c
+Entropy.7 = ff52d6c2025e34797aeb23f8ed2ef2712e188c4b76a79317f6280b4e0eb5416e
+Nonce.7 = 84a08bd406a8745240edb38a69e31715
+AdditionalInputA.7 = 4ef1a155fcde8686ca2c54af748c215b8e84b508e3879844baaf18ff785c934c
+EntropyPredictionResistanceA.7 = 8a5f265c46494f4d3f288875d26320f92df28545e091cf0e7c0f0321e3aa6e36
+AdditionalInputB.7 = 53a8650aae2469a9cb20b76fba29f4fd3e4dfad95925cdaf183c12692610daa3
+EntropyPredictionResistanceB.7 = 50bbc40c654245ccfec9140828769da0a26bad52560128a523fc79acfbe3ffad
+Output.7 = 0b45699ca429c8140af567b07c7fb779b45e78113036552541071b325356e9305493b202d3fad4fbe8edcf2f3d6279fbdac24c5da2b347814ba07c5bbbb4e6e217ca8749bfe85d8c6a0220934310cfc567da389740e724c8b9e7b634356d79f799c9b5c4d15f1b2084e214a1c17dea76a98096d06129fb04425c03f12edaf1007c1d565f6e8d0a588acf874f2d685d54ae5c5250aa243f68a209c5d2e58bdecf739656b32865a2198bf9111b1e3be5d1b128a8d91322d5a5b1621dc89dc8ff6321ab347a02c4e14ddc2d3fefac3673e34c0ca712db554ffe208acdb09ff946f80e1fcf97d1e6a04508049851784c3ed957739d58eafc3a03f44df43d2f82c665
+Entropy.8 = 77255934c3031f28b36077e6d34d7aafc8cccc15cb63e4baf1d5619fa20ecfe6
+Nonce.8 = cd838f927b9aab770eed3bbdd71efb86
+AdditionalInputA.8 = 6b30312ddc4fd8f0023af3011b9b7709b7172e1f9189540525306a355cab0626
+EntropyPredictionResistanceA.8 = 12d6d1b07308e412698fcb3172e3981d5a11094fb20cf86308c9df47651f9fa0
+AdditionalInputB.8 = fb253ad8105ab1797abfe0c552934de2db0f59895717ae02f297effb67c70fb0
+EntropyPredictionResistanceB.8 = 7fb2e573151f113dcaf9bf90c67ddf1bc1e2512a70f887153514f319188e71f6
+Output.8 = 41529c87dd9e0e92ac9511dff19ad1424a446cb1aff9b01e03bdfb74caa8b38ae4163f2767fef1b963b64d5eb7f5459e5d8122bdc2d9ed5572ffd12d6d605457fab42ecaad56749f2094523604bbbaf10d67ca3bf4af6e1d7f3cc1952bace60544fa7dba43040408425efbf10ab2097eedfe338a956d9145174415830a1254284562ada4983fbef31fb4d2c678f9bbccdc6aa9c40832cb63703ffd6c71d02af375832d195a54bba6bf8d92d938caabfda09434bac3eb2eb1355fcfa399f26899ef03c0792e432334313353e07af2e4fab3ab52e7d98e7febc7b8dae7a3943f11c2883429bda761be0b4d3b5db63a7ed6ff3979c1a8730483ceaec209705679db
+Entropy.9 = da8b1d9af72ae9e019ae05ebf7a07b630f6adc3278d0eefbe569b0868e2b5253
+Nonce.9 = 4db3e2e3b7b8d229f4bc05e79be8b0a9
+AdditionalInputA.9 = 6373864fb2bc864f777dee7b0cf408ad5a32f70033f080e190850abc32294dd7
+EntropyPredictionResistanceA.9 = 04cddce4e5ea571683839ac1f427ba620447eebad151e086d0d0424b1139dfd4
+AdditionalInputB.9 = e8872f9ea4bce9e44b13311fef58c34c9b870fed637048575641081cb8b7923f
+EntropyPredictionResistanceB.9 = 7cc8163c4d84451e372fc0e603fb7610d9779e633836c53fe4b05635e40d52ef
+Output.9 = 74e5b1adf282d93aa83674d56c148312400ba6cce26c8e6b633d314628d6109c388147a1077550bc538724b25a9cd571eeb976c93e4d3051d69fa8a6a8da6be482d433d85d379e3d796beb69b6d949f4987d7d6359e7b341101f9cfa19fe04d9b0fed621503b7dc18034c06f2d411dae091e2695660db66b18d34c8498514eb1cfa1fd03ba8f64fd1dcdba5cc49e0155d0a3e382b5588ea2b267e6a8a91f2f1b583b82a20a87f7bcb7bce60cc476946eff070107182fe25b782b7d919a57582a9e7cbd74280d8ebbbcbb6e881a72853b5bd455b2e067852eba975a9c8cce3788180fc0739d99e76d5bce679b3a0b089e05f7bf579ff3579d1d2f11a7f1e3a0f7
+Entropy.10 = 0e4e9e26433a979f0069b89d6a71cacc02c2ce5b429d6bce118276ded4cc0468
+Nonce.10 = 4153deaeea7c84ae6ca2c6e21eb47c9e
+AdditionalInputA.10 = ee713a439a6f376af82ab74809262118798bc6757bfa0d95a0a8bb6f86b9556f
+EntropyPredictionResistanceA.10 = 8523fe6151c37da7c1e0cd3ac25836c62e898b3ac7c8d43c2bb9faa3f19e72c1
+AdditionalInputB.10 = 76cc3de1b5e4aed3848a286b26ff8478bd3df96ee0ced821970fe2a44a655706
+EntropyPredictionResistanceB.10 = c57466aea3b6c727be1c54755aa3b5bf94986c5c3409f25b37bd785e7b87c203
+Output.10 = 2df702d254d139f621878a748ae45235fa53e72e26777587acf04280eae7118098ec318f852dafab4386640a664fc5daacc52b98eb72297a6b467d499eee223108aa60a86385b6231f3766d6f5547cc12f96f0eeb686233aae722056bb7e897b1be4496e8adfb062bf2d62a5ec27921bc5e3abec2c1bceffd6e4541361066a5b854a535117a1bcacbe0bb68fdc6efa04d60c5c2c92c7b5d5434e42b0d665a6675655bbf9732938b37f14a287f1fd739f3c37f0688678a7e052b734b4fac8bfab5acb900a839dbf7ff392ed304c9c69508389e682eb2ddfa301bb7a624124f562bacb23976e88f20dee1559268105e1d5498c56224291e3a46e4c93a521902edc
+Entropy.11 = 01d2a3a972b43bd375fe7d1d86f8edc93b26c51679367a6c947cb45b336d1f02
+Nonce.11 = cac4f40d95906fc43c4f974ce53eaf39
+AdditionalInputA.11 = e4a54128e9f9647501782d48e1dda3640dd038f83bf7e595c7190ba9c4943857
+EntropyPredictionResistanceA.11 = c065502fde9fcd53ffc76d96971ce0f1cb2a0c6263d89aa3e79b53ff4781870e
+AdditionalInputB.11 = 17dee518175f8114320f2ebd0e68d40052fc3937826d1f700693f6f6564c4c98
+EntropyPredictionResistanceB.11 = f28be49efd288774cd17d602253f2c3386a92d457c6f83eb190784c807042946
+Output.11 = b0bd224ec69155ef52b90cf95899fd82b8ed86a24ab18880ded45e85a028848c3ecf7f2e591fb176913cbc9dcea5a6a158a8a4f3f0be30e521e70b0ff9dca1372a33a42226fdf22046880e3b95a989e3821e1bcae4e63865e20c2dad1809002010aa71d2a967f9e13b64db6e8127f04f625039929dd175f6ca8a6e3ff5396406e589ab07055f06504f9afdc11404a98eb21d1660a7ffc44c57cddcba7bf741741c60cb9ddba08c8bd209b25fc4156a2664b3a6ce818ec16a2bf5df750dcf85eca022ccf833fb89bd92947722504f22a803224619d125ad229e4f4f8328b912c133cf62a5442318dbf3cc1dc3e2ef2e84e3a4c2ec89ae6cd91d427e5bf65339eb
+Entropy.12 = 71127eef52463bf6729c1ac6428545b423c2b53b5d1469b5ab7a5af2830c209d
+Nonce.12 = 7e4456f107b082755c4f171239bea984
+AdditionalInputA.12 = e79a55403fc40ccd6ab01f1e663248e2db5f9f472e3b25a81694ebf00adb486c
+EntropyPredictionResistanceA.12 = 01245a45252ec9587caea74c73924768120aa177ef8d42c43965baf106b18c49
+AdditionalInputB.12 = 32c90b5e0a472e229fccff90fbdb13bd54d9479c0b2a5646ccf16555b7862dee
+EntropyPredictionResistanceB.12 = 74421d847025c6258ca97dcccca153608d0cbb66f281cd2971cc3bc455954286
+Output.12 = 4b060e5949bbdcdf0594cfd2a78e610c448cb60c2fdc4a7d094d2e75494b945dbe2674ef8579bcafe0af37b9ab552736f7d817bc4f810508d2e08c219c36079e480d5523c5f2fa13167cc0b6343bd30ebb167b4627aef0afaaaac828fa57c0be6fc8a4c144e3873b63f271ac0008da03af5fb51b726512df2300a9cea1f8adfb88b13a9fd5e9874436e939f1757b2d9a0c3ee30ddb460cc47f218e269a5c36919bf594763e5729b7a513b64ca2020ccc18fed9f2ce626dc90d15a7a00754e65c51f4b084a2ba79540e3b06460080e1d2ce5638c8b2b431ab352066f57cb8af5cc43769514fb5311ef30c6833039611973d800e3aa1778078bff46a90a5e0f08c
+Entropy.13 = 0007990f065cf71b0e5a3a9c38826467c66db1aebd5bca1d6fd003b89320c004
+Nonce.13 = fc5ae5fa08e07f904bc0eae09afb929f
+AdditionalInputA.13 = c0c8256afe96b3b4f085c204175cf54a25f39b4b3ee4c11e6b17807754c7c740
+EntropyPredictionResistanceA.13 = fd01560b3fc3b6751f178a8b6c43bf263cd4692e33ea686affa3dca31dcffda1
+AdditionalInputB.13 = bb0d449ea8f66b0817a8f9f7975e7845ddff3d42440d00347b27f9dc740790cd
+EntropyPredictionResistanceB.13 = d7b7f1aca906d94c5af5d4b30dad7091ff07e923083210f4b1f135b07cd9c4c1
+Output.13 = 79bdbc598b5d20f66fa2bf88612bc45733279fab6cb7395e1cf1ee74e1c5fa65f82fc2df71abb4c1ac26a3ece01d7758537b952775044af5373d240704c7d92f62520ab5071345fdebaa39590ce18bb68471f46b5431d68d392b4da28eeeec3990306751fd0e1b6491ed714301c53e5d06235adcf44fd8310f753a85eba802b57d32336796205058632f36b14852364c0d14a68957749ab137a8d9072c83b4ddca02137c30162233b084729579260b9ae340317bcb63f2754108df6a30bc04af4558e4fd24da95a73d960a59e663bcb140eebceb5a03d14dd6b2da1c2c7a01553b600e241927b1c9d81fd776b29af8fa6e0d3cdbd40d93a901815f4606fa3583
+Entropy.14 = 876b2afc42918a3ab5a41c6f139291cac273e89b09a3193a8da8a72dbdcfb0f4
+Nonce.14 = 24f104dc58a6509c39044f11226a112e
+AdditionalInputA.14 = 0b68cbe2ff0760a3a8c8ed2202d5fed9b22ee85b7bf29db3c4dacde8f6a694e3
+EntropyPredictionResistanceA.14 = 446e6186ac9f8b2e25741d1ae7475b2987f8a1b4d11b5edcbb8e6ca34438e2ea
+AdditionalInputB.14 = 5becc3e865b384c2619a5155b7e5429e14b5e57d3861904aa2dfc72d2ee08fb5
+EntropyPredictionResistanceB.14 = 3bda489eab8d8e68bf53719cf41fb9da51987db0c597fc411e6b0253fc8aab7a
+Output.14 = ea600824d8e40df63a062ee98fc594550a9a7e0b88a4b2c93986a362e4f73f00f816bf2747857e1d6a6b079c68094f587784cbf6163cf4f29705c42454cff0f32392a79b0076cd4b117715f72df382cd9a9ffc6ed23792846467204771376d0fd02b059918d0a7369cf591cae1ab97fde1293f1703af40b33240e826e75f4969fb542605f670091dc03754e5498ce79b4204cbdc4674d1b4acc1d61343ce1d34f55c93fdc12aeda3dcbe51fbe4ddeea097c7796bbfd693bdf616fd87856b5c2252f375af255c80966897e50c019cef6c8df4d332b801fa19b6e1ab1a47be7d82a7d9da008336e6fe431b998b2edd53c3126aa4ab105cbf78b63f906a885cc487
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 06023729ecce9256dc61eaefb0fb46dcdee0e0a366764536c9d2027da5283197
+Nonce.0 = a2102fb63006e50c3199b885c07baf7d
+PersonalisationString.0 = 93049b23b08192808e0700c63a185c2aea9f33964dfb1c8feed3d2e0d589bad7
+EntropyPredictionResistanceA.0 = eb19a5ccf137f57c9d7885895b842bb6cf789884ca0d9e7810c011ff08dda1f3
+EntropyPredictionResistanceB.0 = 2d79844fb3dbf237fc8a3729c69eebc8a670de749f365a6ecee61ba0af867d8a
+Output.0 = 1d2ba70b034d55b99b2ada05b6d6bd13c00175b6b99512e9e828fb9edf261d0d1dbd803de618badf1c58ca1c4898cb7687836afdaaab4faa99849b7a11987fd059633741706aef56619b5af13f191b6bc316c371661c1d36841bfaf87c553200647c24b1d5613e1baf5e6e2dfbc3426dc6b1f5e6eff23aa5779bffee6ab91621822a8487769c059e7edaf5835f7382df8c1db857e2b226ff11b2a7701446749bb3035bfe4d3303e232fb347114f549f5a82c80a0ecff98d8c296de714834752912ff37d3c16341b0d55a9d116f51d19b222db36b974dc1ba975271b977ae169e1a3d0d42b2f6f90520f240668b14ea1572a963731316f667a253995d75676163
+Entropy.1 = 2d626e9762fd4736bfb995c59f77cbc7fd2507d049c6e180a07d980846c25eb7
+Nonce.1 = 0ed660cfdc126c4f3c4640e62e94def6
+PersonalisationString.1 = 689b2e63662ec7ef6c2b86892d71bb4b32533f1f83c423ae077ea435ef49e9fa
+EntropyPredictionResistanceA.1 = 7838c78e77498cea6ea7576b98d9844f11d6075c858b48c544220b572241f46e
+EntropyPredictionResistanceB.1 = 9a3fe9ff66a510bba84b7e58069c1d0f31394ba406fb98b153867a96c3948aca
+Output.1 = 022cd337532cfe5b6f3741e2bd416b5a2e306166a235346ce555ec9537901f2b4c52edebe24b780e96279812ca2b953d3d6b83a5a684209c1505dd8934a7d2ba49cddbd48161c8e489d6a143bead4c44e3bd042a7839eff7fab0386b4b03cd2db207a9832e673278b21fca0917281da6644c89a82cddb25319c2d2a3f9e721cc4ae60bba60ea392a19d714e15a0a05b55913fe2ce4095598b6a36d0b4968b7c7cdd26c86badbd32306f824bb0001205281099782342fd4ffa7cd3e2c282ccf17844a29037a1e891f82f5263482891af93f49f078ca51e25a2f3e30b0101cd7b66597112c3c82792cd4885fddddd8f8db94b6b167f46ce41d2ad6185ca529bb2b
+Entropy.2 = 67e46f33825b4ca52f4e49752c83dedf9f383f54faad754873d2957900209ff8
+Nonce.2 = 3bf002a0655a74d3707a5d1731657a43
+PersonalisationString.2 = b4b4f725bb558e042953a74f215773e096bfc448caf8f7bb72d439576c87c158
+EntropyPredictionResistanceA.2 = edd3450124c3a2f11fbcd588ba1aa9981e524e74b977d95aaab642e84919e235
+EntropyPredictionResistanceB.2 = d57f67189968645c7fc6810fb14a6d988ca6694a834a00b0cd885e17109bf839
+Output.2 = eed7af04407de74fbe0f3088ca124fe772fbf580190de71766206588c75a8dfb95df2fb20354e22677cad46efaf2b2b21b0b3cb9ae3e8f407e18a2885a84ebc6475798b96c99cdccd7c3d7d2d76aefea8c56e0c914a51afaa39523f9641c1f8a501e8eaabcacd328823d70013bf4f49f142b8f4bf9d97af0df8f3fa8d4a10056d8859b3d15bce6c29423ab79bb79a8dae7d1b7a2b5f971ec8d6d2751549fb3360a206e4166825c127ac28d3c70772efba9b2184e2ee44db71379e4e10c08d6e48c90b491c1795c9ba7ca2afd1be6ecc7f0638587661a315424fa9eb6d6385e009d8675fe458080f29155c57f42e3a76a324bbeb8347f17463840d790067a47af
+Entropy.3 = 44d826df9c06ffe5b6d936cb0aaa04ce5c4d08bf746e373a4882d565cc1068ed
+Nonce.3 = 3505ed2c35f3a24d38d3b2f93f3bf82c
+PersonalisationString.3 = 82b54ce561467066614365301328b1ac7bd29d5529058bb9e9167f6f60cf4d32
+EntropyPredictionResistanceA.3 = a0da68b2be20d49cd758219a7f79db710cef78fd72fbbe8e23e633b6b98d473f
+EntropyPredictionResistanceB.3 = ad26b031f2855793bb4ae7b8cdeb858784c6c658d3de2025b1de534fb222668d
+Output.3 = 0129c3418c186dc41da1e987796a1af7fbf686098a802e4df3e2030f37562105a9ff4926676a5ba6b893b6a67d25135225ae5ceacbe0a3559888d7c417d8694f9b027d55c9a977ee5f3aa63f15505307b743c0d8857ce28329c52d731798453f857364c3979836c8c0bfc0e4a165b66272112917a50748c1e8b23848995981ef86b0ffa9f636014071e7e776dc1d81ba7bf56a62028a2f6aa7c1552c65351df94a8f28ca5fc3125be7d68a25342ad5e061a2b63977cf8ad7652f5e792203898bde2e1099a51601c6fbad00e968d799b05eb0643710aca3cc9b2f452ef6d4dfff891689a90784eddd46bbea70b81c6713cd5aa88bb2cd183039a1379cb687f0da
+Entropy.4 = a4b19263a688474e13ee162ca1250043aa792789ffc85092814765d3f8fd93aa
+Nonce.4 = eee26ebc3c6c3af07485da5cdc5cc79a
+PersonalisationString.4 = 54e3f319296d7d6c40046997c45ab903464cb77422f53dcda8893abb22585cc3
+EntropyPredictionResistanceA.4 = 865b500f26cdc59edbd68f08675024c8abe1c0e749a1fa9bba391d554d65165b
+EntropyPredictionResistanceB.4 = 7fbc004fbd130d366d7b55d1791f586286e278b74d912aae883f8bb1afc37f1b
+Output.4 = 533ef86dbfd964407784ceead775b73d5175d123f902e83dd58d1b65822d64ed8cb3c43b4fe156c727755e7b1ab39c396e545bba303d3f14ae099530ec112798de64250e1f0b3f3b43a46108a9f0cc8b0c0eb3f6aa21e8f3721f077ff5a7c577f91bc0ad85bca03c3fb7eea39dd4910f8598de34cbd5e6d23779873dd956d3f1ef83dd58978a030bfef840ec5c6944b7e32367fbcd725f0e7576a5fda8aaa98df2744b3dd45c6d26bc7ee52635cf5386c84e4c5d4c420bd3491d2cb960fe62e42e3ff28fa183dab1227b4b53621042a2baf91bb8d1e35c82d841ec6a317db5e4d9a49ca0657901f97ffb3cb4fd780286047a21a1858ee7cb7cdd22a40174bfbc
+Entropy.5 = 1926ca948510b9dc4ccd27cb50383c6bd5969595ad66753455a628dd916db7d3
+Nonce.5 = 653d7043e5a6f8a41d848c39773f59be
+PersonalisationString.5 = d4264e9741adc9028e189a6a99f6cd95c37bf084ec66bb354996587fa4113d72
+EntropyPredictionResistanceA.5 = 117eaeaee5a2309f7417a8b7363f4a444d31248fbf717162e3c038710ff44d63
+EntropyPredictionResistanceB.5 = 117bdc076ec2e7c682d1855837ec0cd2bf9f9cff08577b83122c5d25ba3b630f
+Output.5 = 65d2130cf6d7b85eab6ad1f1557fd972a29fc753e48d05fb6662df23660da5d524dc173657771903f522e03ca10f4bd64d1bd12978ad9bb74ec34318f58104dd55bd94e040a8057ea96975a548ae6d93833cde766f9f7f1e8aa530095b1fb7ebdc1867285cd598837ed637e251fe03adc818069c824bdaa2cd8500c4ce1d1ac00ea9fd59e64606599d5759cbeb9c462bd9ceb764eacf161f63284515586f387bf5bb514fdd1592500d57b2e6bcc54b08964471e292d5adee6bf4bc87accf7d227b3a2636bb33aa8d6080c78f79c56f85ef00dc4a1e3bb8c85377cc215886040c5016b89eaa9a67c18a9eb3750fd9ac45685aefb30bc44bb7931f9051ecdc4e84
+Entropy.6 = bbda2610ba8116eb9dfee52260f62fef4f5076ccfee7ba88becd52f89030489b
+Nonce.6 = 17e98e340687ca646f4ad28480703d82
+PersonalisationString.6 = 7bb658f83a3b6788e8ebb8ce893b76a27b75b2403b18a235a60c9961aad3053a
+EntropyPredictionResistanceA.6 = 8312c9947b2d211e2eede142ee89b9ad0544852df332936bc08a799641b822c4
+EntropyPredictionResistanceB.6 = 004d7247762932b7f11dd8fa4388c2d3784900ecaca2c027edd7658ea9f4b98d
+Output.6 = 232c5ecc0c058fe67110fcb8ac1d0939d78e43ab85d0f62e01c0a5f8bffbe3c7885c97cf136fa7ad92afa3b31ca22eb7d5372a4f151eacd0bbe3876b93524e06dadce1bd52ab362decda0cd67a7c0a5426e435d663f8b6e5a8954ed12cffaf00d40ec70fe58049b91e739d73ebbe29b3d651eed082378f7fa0aa0658e21d6a01e6577570ece9820f942ca48c9623b85d736690c69322faffc65935dabb4b612f2af380d6c36f04188c60ed517a5131d40e12a4992b8974debff5248134028461c2b02b78759a838af7ecd1486168ab5ed0f4fda4b317faf59d5ad4e7ae323e4a77a4b377f9fcf2487a87922946fd96c3d2011114da67cdb101ca979e03f79bb6
+Entropy.7 = c8ee0e3399cfd94bc5c973e07af42f56f95e1836ee69197f23d2374921da3d73
+Nonce.7 = fa047a1361b6f94d52f87b6e724c96a9
+PersonalisationString.7 = 5de83680e11b94e3408a2852a81681a8f450bea614584528599254e7e4d9b411
+EntropyPredictionResistanceA.7 = c2ea2cab9e8b459f7d0185071e9756c0d7534c835ac0ca472db6a1d6cd10d520
+EntropyPredictionResistanceB.7 = fbb6763155657ce042bcd9c3560388b0ed1ce206f7857c7fcea527af0c3fcd5e
+Output.7 = 357c866b21ff82be40fc9af2deb73651ba63a7e547d8660ec48af6128819d094e349cbbd66283266a0effb3b841e119d44a08ab7178378f2454cad9f05aa1b5318b64104a35869aa1fde6badf136b454dc1b61ab09b5a96c4c92bc3b749802f8f1369822ceaf51d9eb969df8b5585ead2c8594b47def5431e2117ab0c99cbc42ca0fec0882ad3a48847fcdf43121512de5d5685f71f72a0ac160833a500fa1484df4c604bd875ef8131d04622edcefde82c7f0c6edc2c81328f086f488abd89522bd705774167e25cf6c8cdbbc618d03666a2e10e09d7d1e8fafa58d4f1e92fef9c042b4f0ac070b47096a878fe68b3036335f11943b987244563dfb62f1a15a
+Entropy.8 = f3f63f283c747bde853179e92d19c847c64e69e5830e89ad60003c29bba5eafb
+Nonce.8 = 6488f76840f0e54ceac717821407fd10
+PersonalisationString.8 = 25f018c7f330885afb494da8913693f3e7aa4b9a5b25c9d1e2921cd5348d6538
+EntropyPredictionResistanceA.8 = 85decdd7a779ba251a9955f8e19aec5ee18c22e00a091178255e8db474307efe
+EntropyPredictionResistanceB.8 = 14e7e1a7c99d528bac1f0f91aed37d11ead33aed34d87d7a36fbb1efc7d79253
+Output.8 = 94372c1b76ff95fe6b68b5ec11914e96425be28659a7840093653c10f0b7d5ceb95c4c9142c57b5b11fc9329a072bf43d35a03669bbec6d91439c442f8354304977b12853d7dba8b029bdf9cb053fc6851b7c0ee951c8986338a28b69647b335fbdcbf2c6b06def2523554c3ebc204290ac573205d676c801a1bf9d584422c99eadbe185f2ae18908c87f8da8f220feeee6043cf77c5235bc1ba21bfa6fc492deb41e7d1eb31c19dadf0f32c435ccb79f41b9deef3ab0105f20e28d12ccd33eda62d68464cc6bd7dc01a31afa2f5b9bfa2bcf44a111dff35cddade0b15bea2112de15a4a7bf8c83539c11ae556e68db599b2528cf5cd11639450bc6e1facbd6c
+Entropy.9 = e1a5f7db9b38c705ae76e59659360272d141850a83e76dcc23145b71932f6a11
+Nonce.9 = c9b332e27dd4f9896b92c4ce57942ab4
+PersonalisationString.9 = 74b625a32af929e19d33c88dc3c711e1eda2c3dc5ba0f849f67f36414abbb6a5
+EntropyPredictionResistanceA.9 = ed5caad7a87be8ff29bc0a59916025cb81a4fb049f1b7ac7895b1f2887c3f266
+EntropyPredictionResistanceB.9 = d945a018afc4b6b94826ca241537ad1edf267a48f73d829672a8e1cac9ac2833
+Output.9 = 5e4ad730209548c4f55bd211f5f2f6840ea2f868a6b21cc2c364df45c07b55b0abbb5bc47f090ffdc343618a1f8c52f4305cfbcb9c3d887068f8b7b1835424098a002b87ff2fb6fe3440c978e8568a8d9d5d05b43a87e208dbdec8e1b8a8df2baa8c576b2ca37b3886275b1e8afc5ac6a24998736f6f97ab8c853919cb943477a807aff3ded5001e0720b5d341feff68fabba1621d19977a155fbec4368001b7ed07943fa50727c8c86c3caa2fe8f09fcb0b0074ba4441fc9b94ede4250045f3f298a658e50ce7892443187d86422652e516521337eacb64266a944aadeb28da69e8383f71c4a62bf4c0e6963ab84f5a0e5a80d5ce77a76410eef8c0968c7a4b
+Entropy.10 = 79a3d6ac4052507e718f855db495060df838fb1afe7d0c32698ab5f9ef5ae226
+Nonce.10 = a2b8e22fbdb05c61056df277092d87bf
+PersonalisationString.10 = d014a06a2ecae095a1e462c191230109bb3eb31ca80ded26677f12df2ae278ce
+EntropyPredictionResistanceA.10 = c46da8c53caac814dff655d63a524e8a0f5e226ec62b4d3974d43d421c8c8c69
+EntropyPredictionResistanceB.10 = 2a376d5c3e844f27356f75d026046b93182c79bd2a17cd8f68cab7499ebbc647
+Output.10 = 8e178b69dc859a150b816f860cff7f0473eea35dfe01e2e112675b771b34ca52f6ab97bed0466bf9c62f4e66bd82344ad06cf57fa3177a5d20ea7e659b2bbc149573b996a720c626438e33cee372e6e938e0788172e09d413fbfd7fde1bc9639faf79b2f5fe98b4155b80c0bb20088c4fb6aa39523dec5c35b52f77f239952feb764427795c0f7d8cdbc5a0516ed650dfa26a1b70a274af79b609a1a5d72e5e129296d606df2e909637dec93463896398b601c016a7d6086d1765e70d5031db959c25c3f4d39bee202e4a2c5328959423701cc692d7e18f81395a056e402dc718bd0985a019e2f893aec1c3a1a6d8f9a814cb1cd369d51362f5b82257450f314
+Entropy.11 = aa15fc8a256c1bc71beb74678cb329b1a7fb865ccda1d0ae6d542a6aff768c27
+Nonce.11 = 789831f230d2f9548a3bc5a9f094e26d
+PersonalisationString.11 = 7c1c6890592441bc8ef80302393d024471801265899775aaf18beec1f480cc5b
+EntropyPredictionResistanceA.11 = 3e0859883b6aa0a7908b758d40e187fed8c145aab67a79aa08397b2fd5768385
+EntropyPredictionResistanceB.11 = c25de04875dc722597fd570090388ee4f793157fe6a38e557fc4ded0a907a609
+Output.11 = 28134d1ce6e7376f15a4add14eb630e415f4173c7d6f40b0ff8983fc36f3df7dcea92b01597728ac838837435c47366499dbe2f9b8018c8183d52f1b5d3fa772919465da2c03f8c750da584562ce4163371c48ef53c86d720867cf0a52d8c0494620f3fc231d7f644fe4e13922b179d6263b0f7630ef271c78fb5d8d34ad05d38b1b82948c7c5840e2a39d87bd9f3705b495fbe2d0f3c34a95012a7c867b799fd3d2fa8b2e5fe3d158b18ad96610bba70df017b0989171d0980090e03e65bd5d13c931051da574c724fa9d375868fc58ab723759f3348cd8efbd78ebda99cdfd6958d33b097e9ced665dd5e9e2c65e33a147571050c84984033048d80ebf61c7
+Entropy.12 = 6d02c7e1d57126d4a03ff9fd19209e6065671fdd384d44a356547340352c28fd
+Nonce.12 = 0e020918c527b1d9b6ab9cce2c856eb9
+PersonalisationString.12 = 337b29cd933a71b7ba1de2469f2a1ceb4c32e422ae9e0a9c544ea03cdd9cce54
+EntropyPredictionResistanceA.12 = 348d1e462844d0a4492c6b1dd77a8a29c1c581dd7be9d3ce6301aeeb0f275446
+EntropyPredictionResistanceB.12 = a5fb11ce26acb4d3d9978ae056a9af4bb55e64a672dd5a32346eafd040558a66
+Output.12 = e5c1c26c3422dbfdac4e206a9fa4029f92a34d40ecc75bb4621a6f21f16112cbc1ac766e5b20251fa5dbc05b6c39ae9eb6a5e5b03e9b35ee7cdba995fb9ace6e9468810c8fc3a0645f383379e0c817ecdd91b299f691865c3c9156f1b1fdaa233aa1ec23da4e00187ac7945ae3ebd3f32635f56bbb1302be50e4353fa1b5aed6f603ff5f08588184e00d16c7a3b9c96d2a33f8201b8fcafb4d21ab6a91714537019fb0cacd16f256da8fecc88f3663c66e45ab628f296ec78757aa0237a1cf6152591c8273d97251eb33a76644f3b2ebaee2756af8bb94a3d72a17449f5d8f252e942c37fa755499f0e4a2eced9e37b76217941896ff3898c0dee77c3d0e06ef
+Entropy.13 = 7e32e2aa88dd5941840b31a651002d5c66ad1f1ce764b09ff93fe1817c9fb608
+Nonce.13 = 3de9b46b7e448b3c273cc9f83955555d
+PersonalisationString.13 = 7b0f139ef4c9308ecde7ee951ea29949d920fb03b8483f616a19d53575421a93
+EntropyPredictionResistanceA.13 = ba8e2b02d9acb16617c5dc60bca9f2914ffcba728c8ad77c5e19f6fdc4076900
+EntropyPredictionResistanceB.13 = cb19615114a59b344f3f2f9b8830a68e682a9e1bee479a7e8b953f634d73be54
+Output.13 = 16ab9337786919dc87165f9b842f53e038b31eeafbc8fbcf62a6b9fbb2d664710c9a30507599c8d6f45e5af02c4f93b429d8cb27322b916f35728cfd269603c9cfbf382cacbecd6f12e277cdba3b3b581f3cb71788d698ade38a8353d71da041108a03d1390654d631f4774996d768bfd6c4082b11a7fedfd833369b1887b2faa08196f97ecd78c1b1da8d259c7a3792cbe194b3e15c4c76526d22e757e6f51a7307e01e01db5b516886c0e2c872566d7334d424bbb8a0ad406b878c03554940ff8d4da3a6b844eed909f100a89d9989a636daffea0d9d0fac5364f23493f0a2cfa88532cbf33c611b5cde02854697b12d06b9fe30b0996624ec464bdb39864b
+Entropy.14 = a0c86e44a1672246eb8f99d06da8548a2b835ac62c10b56a87f71660c6a47f83
+Nonce.14 = 519112e37ab8e06aec3ccb057205b910
+PersonalisationString.14 = 1f0504f545f69421d9f0e53bdf2b3135309c7d18bc01fa2a6b22c6d77961b5b1
+EntropyPredictionResistanceA.14 = e4728a214945d98e6c8d5b18364fa1ffb49b64271b20caab98712b9649da1352
+EntropyPredictionResistanceB.14 = de11e1f0d02af65c423ee2256a5ebe30e979be4f23e4cd306478134756ce93ed
+Output.14 = da7e2f5a40f468b9c2bc44cdb027a219ad7a5e199589e135028721aaf523888e5a0b49875bb000c48bab65f7d6046593d8f6dcf1b1ec6a68ea601ee520b445e6bbf31736d8ff3987b695a4bf112b0e12b16df9de60d9f608b3ccda24d03eb36d4f22e4dd22c8f401cfbc9908b05531e595cebb900ec6191de9f154b0459918438298a2eb7b2ad146d8033166028c233c23a49cb973de788b0a22f2e8343b6fa7c886e69944fadb46e77b61ca6a6c097b3d89bbf29d521e4a0e8dce3e99a0a8b4efec593bdc4ff024804032d657362bed7bd8e15fbf13069409a1b7a289bacb01edfe9f4f4ecf118a9fcc02151614f982eee8ab18697201946f932fd60b234a83
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = bf02acfc2916dd6d7feafcb881e7331a30a12b5a4dd4a68131f0a2084d57cd72
+Nonce.0 = 34bb401f9fa732bfabc887078be0034f
+PersonalisationString.0 = de177c2eef16648d44104e2cfffe5cc641cc69ee7361eb09dba103413dd4056c
+AdditionalInputA.0 = a8e5ce1ad2721dcf085275772a5eebc6e39294d673d738f6e67a636f91beffe1
+EntropyPredictionResistanceA.0 = f81bfeb1d63a2b29bcdd49f0d7b818d7d728386d32c1489bf45c29ad23254b26
+AdditionalInputB.0 = 70b92498262a32d9d0d6034826103d3cb481204a4cfc83689ca648c708d9ec2a
+EntropyPredictionResistanceB.0 = d4332f7201d83b30a15078bec19374b82f21a1acbd176af98acff681a6a7b386
+Output.0 = ceb47ac15b4e7322bcc7a8ea5d6df6b7aa9ef10f04ef0d1c50ad2f289049b7c1ca09a1357071d428e8ab4ed83234c3f92d3784df520238f5a77d5f684c17e88e74a3ec7b3d08bb1c531b919fe3f253cea1ac3ba2989ff37ed2c1037f14c593408dc87a384ac53891faefa2ac6e65c1c588f544ab130d3ef33b8998168908a8bf16c380b7036164bfdae19c408aa540e33dbb1688852b3b22a009a7e99d28261ae9ec332b5028ac68f401412ecd8e585b1491a04dc843358a583b7deff14f7d1eab83177ed72f68d4d2c1432a3952890074163c1d5083700d78a89635bd56cb11c7d806a08cd0c23fa1f47d2ac8bfebc063788e7758ddb85bec65c27315f5bd1e
+Entropy.1 = 39bd00bca6e3d8bad5f9b63c9fd0063523914c311316fddb84ea3c1cb5e08fb6
+Nonce.1 = 809ff7a389c151232d6133c72ebebac7
+PersonalisationString.1 = 5295de4fc17644ef8b46c9e916e39359a29adbb54bae0278a46352b9035b5854
+AdditionalInputA.1 = cb728574ffb3caed2d49ced5027919ce0378f87185d98b7e59775ebbfa7fed2d
+EntropyPredictionResistanceA.1 = 0fb28804da309118ac904a350cd728dcd436ba9da2d8ca7e34118d3e2efd951e
+AdditionalInputB.1 = 648a1f4176ad28365287fa2108edaadcd1f5088fff243dacda3abea89963f01f
+EntropyPredictionResistanceB.1 = 3846f309cd11b54c97d7f7eff653c24890f6d7c574b771c7377eab62de94f0c3
+Output.1 = 564089fad20443bf0d84a754d7ad5cd024aa50c689db7c8c3b1d33c89c43ddcfcc97fa49caa361a28b7c55e47034e893a648e1c67e8c20b4331444ae8df37753ccd7b181e0336451251cdb694fd7240bd5708c428b32fa7851f84ea5b3d446cd80facfc08aa24001f9363e0e928b668bb69c90f998ebd382ffb83b26446b6723cacc8a1142e1f0e02306d9a3ddc61f7f9be399ba6b6e4367f6f7aa96a85ddf28daaca4089ccf40f0850b0ae507b33f489d897de79d1d0b1cd2aa447286122b68bd14b9610d71e7f885d3f09f7ffd2d4db41afc85bdb44aa816ded03acde81f69069a29babaeaefee6a0f2964c3191478a359f80bffd63c9266b37726f4a235e0
+Entropy.2 = a26d9a1ca028ef28ce207cc5a69986021efa81bb0ccbbf1a4f84e0ae2c5b4560
+Nonce.2 = b0e24f776a4b38c4c686fb8268fbdbf0
+PersonalisationString.2 = 1bcf50c840f5ce289fb41988cddf4361c11efb5c9b35a0927554637fec39df2a
+AdditionalInputA.2 = 835b8e68105ddaf9058ccf8d33ed2f2ca32cc57264341ac683d138552c26877b
+EntropyPredictionResistanceA.2 = 9a975da30241ab8ac6b1969f74d1b6aec8843b21b5205c3e08bf5d94fb901521
+AdditionalInputB.2 = 266a1bf5e66a2427cc4f3695335a7f43b77cdb377a4a14302f16184bbc8d1266
+EntropyPredictionResistanceB.2 = 351acb803f75f15c2362dd4e1f0d2007c09823798224ea1737ec53833982a912
+Output.2 = f0a158d89f61e36838695f99be645a8847c51b12ef0bfa28220d1238dbb5d50210354e66011b3feaf9dd8aac9c1e028e79fef8d04113beec1be4102a4d01c84b521b2e916d447908ab949819f2f0d4eec676335e7d7bb6c25377c150a80e3bbfe7308a07d184b966d193a038cc9ce0ff5caa31390d1346a1add7dca68e5be10abd4f9ab5c2d48209a224ec9b0ddaa46cdd39b9343b0449c07bd5435087f45640568b1c32e92a4ffea9d6967fc1d2bf3af1c65b32c6b4d8af67c56104605106b5f88f697557ced1305fbd412de38df4c8618b56ffb904c09b00205d739532e11250ba565c708939816ed6f055944c8454bb9e5a90de63707ea248fb9de74a2cfd
+Entropy.3 = 27c543eb00cb6246dd9445847fe98428670e3345181b35ae4f2f717c2ed1cf53
+Nonce.3 = cbb0fd9ab3cb8a60ca2b4556cff21219
+PersonalisationString.3 = a8bc6946e2e0dbebbe0858ef84fd316ea0012f40a0d2cb8190b2103b80fd04cc
+AdditionalInputA.3 = 1f774ad3d8b18764557f537f1b85ea5fa67195a20106e85fb99207eb3b24ae0e
+EntropyPredictionResistanceA.3 = 2dfb890f6c19e0c59ce289afe05851d30d973faa08f12c38a7106b6d260129e5
+AdditionalInputB.3 = 137424409b12df12e790f9c3fb02102253095e7f1e41c329f21cd517b97284f0
+EntropyPredictionResistanceB.3 = f2c0419046e4f3b1e28f3e42e13f40faf929cc2d1c7880cbcde7695b75fc01b5
+Output.3 = 8a56b86a10c847e79a61099f54a330a6e12ee052c484c94bbefb9866ce4ade30fadabbdab783a43cb08a6b63bc6ab3ea41f551ba9eff97241ac7907af4d0509d32a409bc86874bde6487bb7a07c5f5e702de547f0f0f0028758a50912c7672d204f6383aa431d3ff401e88e9e3ec6ef09605c3b951333988962c87b4cb882c3fe357d593b5822039a72162e22a111b6281cc3939064aa2025a3d4aa1a4b20ac6791775ebf18a0efbfa05e8821404413ab449dfbbaeb58fd7d45c9cb28e6458f320fb8d8a4582dab0def8f9a1afbc4e9a503239c6bc9a8f942d2f18b8da60ddfe7a397bcda8ebd6bf477c41eadb2ca90a19b07b8007b5a608417ee85e13ccf208
+Entropy.4 = 171134a4a872562747edd604a0ac2a12ac68b5a4b0cc8b14a39aed6b69506a3c
+Nonce.4 = c68f51d13476de72e47be158b71135c1
+PersonalisationString.4 = d62ecb48dd742a9020317f437fa6945683772126d5de8132da7b7380693a76b9
+AdditionalInputA.4 = 3f8c239d8e9244c05fabe5497deb467bf9272e8fd4a89b337f4dcb1de3066658
+EntropyPredictionResistanceA.4 = 393bd5d5bd68007fe69104507474d14472b5f424d8f90f2baf2a966b94e1aeb5
+AdditionalInputB.4 = 7e4571fb772afb016e5c2ca08dbb269f7713cc4ae7a613545892bdb7a3ba6897
+EntropyPredictionResistanceB.4 = 758776d151102102df140456c6a6bca2ba8d3f953aefccf77a4e80dfb3f1b4e9
+Output.4 = adc632d882d782911efc6d33cb7f7f66606fe3c4163a21eb11e1a62b6c5d3ddbf1c7d5847d58c57e681df3ff1ae76f94d010cf302235c2a7108459ba3674e9ef5ccf0139a8fa6cd4ddd2ef7acaa4bf8e3d2d6484ad8fefdd882529e434e3fe2428e24188b3ad67e434042c1a91766978a025fbb626194362a009a4c328f95ce14d1d02c14d6cd78e108ff52fd331e5130625111e5bc2cea6fa091cef5e171f8cf37a3120e88a65aa9b5b679dc49576d6243b33dd2ce47a991c19b24759aa061b2315121576a957e274752489155880e748a156768ee144460b4390896381110e171f5f7745ad7245547022dff8f5b27532257e0eebbd140187f9e647baf4e9c6
+Entropy.5 = b0ee8921e3ade369b7cb3f54d87c59e9c9aaed5da68e31f97a197e04abc4de62
+Nonce.5 = f55138c372fa19398a5d8d7e22be7b2b
+PersonalisationString.5 = c1587f9d20497abff138c81aedfae3fa5b64743e4d69b08754c6afb8099ff4bd
+AdditionalInputA.5 = fb42fe258be5b64fa44bd31152c004272970c5520026908629d762c8cea2b342
+EntropyPredictionResistanceA.5 = c2b76c13e3c8a8679f2c27b2347c1279c1b19fd488931c56940a10d960600332
+AdditionalInputB.5 = 22495abfc56944e9428299537d5937820fa7fea44f02048dd6be968aa88c4706
+EntropyPredictionResistanceB.5 = 0e1e5635bddbc09bcbb4e81f35f2eb9f0fd5aea29d109d8779f76a8e583485c5
+Output.5 = d193131ed2bbce072f133b9aa634f124181f382941039bf7a530ab885abdc471808be66c7e123c3192c79caf8c834aa7f21f60501d9f3b89fa0ae8e9f6ee53f73a7cd9f6909f4f51a71ea65d48d917d28ce578a5beb41ffee2f50766375b4663daa9e4ea9845592a374c0e6ac77e84ff96bf74a1edf9e772a719736444e24e057cdfcaf0b17e3efae29d774169ecfbc276b8855fc2489bd4c1e9a9ebc12de50514cee304cbd9d8550f1a35b953b659caef00949336dcec3eaa2ccb905e1dd542864234b37bfb1996bab6b01e14aa4b424d1e3961f129722cdbebd7aedcd9fa73b5253f35eef1829c28d49e25bec433203fb2e54c047617dd1388350283783994
+Entropy.6 = 0cac6218de9af58b00dd1d0d518800b83de5a0f187b01a8234049ebe3da3b3d0
+Nonce.6 = 15a43eb9f54ba6642fa6876af572b08e
+PersonalisationString.6 = 0174531156211ea9b0becd6f266b7cf3c6e4ab0c5847c615d64969ff49761cb2
+AdditionalInputA.6 = 42f029a0eeac88ed0dc018a537483cd058e0d03361f1735118ec95783f2127fe
+EntropyPredictionResistanceA.6 = 9d70f9f8ea5bdc484d5cf6c637ed607f410fd6d39f857c85f475d427fe9114de
+AdditionalInputB.6 = 390d8f9a69bfc902a634bf4cc57784d3dca5709ac884732fb6e0dff327694b38
+EntropyPredictionResistanceB.6 = 0d912e6813447074b37171f711937877a57a08572fb98468fbb901a5268a9676
+Output.6 = cb331a622c8b2b678461e3d979b71c22060c3085c63fb932065fdc8b788039cb31c6fd227609eeb6c92c52bdec21cf387e84bac9a4f81dbf584c542f90273ed26819fd18d388ab635b65ae59edf1a5480ee9d474fffcd3c96b9a116fa8b7b12421d9fdee2345ab933be1e3d4c09f9cc79824b63db0be9efb7c3c300d942814bcd4b7963d11fb71f6eb35d06b92336954cb7bc70b018564490e7dc69447ae3ac46ad76d7adcf2ecc7519ecdef2a375e1eb07267a9361da4b8dbc5115f805980d0ead175642f89e0b1136a6a3c452d0815fe0b00040097d6cd0c6b3ad98ab28f443246ede7adcd4ccc46a798dcef4c2e22cf3787ce8853b82ca737bfe86b3ef2cd
+Entropy.7 = 6594edc286c68e42b865256dfb83dd4f1301031e7a27e637e64ea13c3d229d6b
+Nonce.7 = baedf4bd82dfc0782eb24ae06d102c36
+PersonalisationString.7 = 9573eb137723edcb211a305d9e233d1cf9d121ebccf78a190e9bb3fdbd15fa7f
+AdditionalInputA.7 = f3691ca76ab869f9bf531ce3ee94ea2787b0e5fa41143e79c440d63dce3e5bb3
+EntropyPredictionResistanceA.7 = 97c0da8c9d1f54af5856e68e0d93da4fa954ad7ba03420bdb69dcfc5c04f08cc
+AdditionalInputB.7 = ddd681ec793e1ee8eca32d97fefff600f846ac0ed9918c90033ec83fb323a0be
+EntropyPredictionResistanceB.7 = 9c19df7ebe00a290c345475d4f93ddc98d32723bc99e3d299c11027eeed21fe2
+Output.7 = 6bfdb3e1d9c38148cbb14f2989580c3593e6a90570dfc28b2e69cb87f7fec7d6265ec07c781d2f41b6fd005046918eddfd34022b3a7fddde404f64b69e81216e41391d3f0af76429d1729bcec0dbf42957c636d4317866c337faebbf64818a94c3c2f93a282ead1c8da1626fd9af8e6d8351f4edc29015976ba07e0836a0420785faa4c134e4eec878b5a81f74921025ba02f4688fdb7f73b347d8f3aa682a1d2cde5ee1e8b2b10c832f7753a03b5abed9633a4630327f451699663116dc925694cb9aa0c135a37851c3343caf3eb07ecee456a582ef294771473c63c058ed7544f8029008d7927ed6361301124af0621e967738ac3552b79df180709ad31c4b
+Entropy.8 = 90c43168483eab8136b73525727d2c02286c9bf27232cc16becc9880ddbafe3c
+Nonce.8 = 916d706a2401965a4ef505e36d1f6eb4
+PersonalisationString.8 = 53f3c8ead0500421aae45ae8ccc082bcbeff7320f9e558597971a84ca599f559
+AdditionalInputA.8 = afa94d1eff7710ff56adc1e0ca814c5c10f94df3418773ca7befadac650d2b6d
+EntropyPredictionResistanceA.8 = 93020a461953d3a60bcecd5e9afe2ad3f29c254d13680dafbb2ea6bd02583767
+AdditionalInputB.8 = 298f15c643f32715cf1d60ac2d4e8d1808d956732c803fb3b89f5bf5d92e0dc2
+EntropyPredictionResistanceB.8 = 060da76346aa2077a95ef2fee3ad675340ee23e9c849f4c54b893d25ab9437fd
+Output.8 = ceff82c4ef14337c9c43a28352fa98ed3429f2b2db194bc8661c9ba011ddaf1db4107ea50f901b66818c2d15cd9d8405b4db36b86a026c4c1fd8a5fd3ab1e0f16e2242082255b0a8f2b612a769bafda69633e1f7379bab72f6d51771eea17dbf28d49ccea197aea9646cf65e621a4ebbd983b8fcfcdfe8a6cf8e363d2d621ee3748d52789792375055b33c724ce98709648f88f4da6f712c7627608eda4ffe955eaa4b7371ece3fa27dd4df24ef782393505c0651d0b36438bca801cd1cd713310e8159fd97e0e6d089c8c2417f12cbf1944fc66425bfdc4e60805050dafaffe3753f90c57f2598e3f00a5463100a75765d794d1344795eb8fe5c9d5370193cc
+Entropy.9 = b8a56bca4a8861e83df8faab203be59a6a190f6fa0d10acb4a4b891db3b03f64
+Nonce.9 = 01ca6c9b989856f3ce6c7c21527d749f
+PersonalisationString.9 = f0044a446ec62198a0bc635d6c22ec4aa76358954c2c03fec7e703dbe02c02d4
+AdditionalInputA.9 = 7478775fe8b9eef3ac2927ebf6c31225f8bc080f2425bffa6c765ad46e6b84da
+EntropyPredictionResistanceA.9 = d5abc00fb880038419395fc8280cdac05ef9fa8d0aad5bc66a7ba66b328f9db4
+AdditionalInputB.9 = 10b28a06ead66090e4b7d9a301597f21ce5df0a66a1cee98774d96f5bae0ee72
+EntropyPredictionResistanceB.9 = 899433a0a83a4c64be3a3b79f6051c400cf7ee8fa3e38499c7f0f5dd8333fbe2
+Output.9 = 17c7bac3a404fbd6e64c89d0d365a88c7c29aaab3a2f50a938a079b11ea911452cf14357ae43f72ecc9a67b9375501e5433ba14f21453411b0bedf2af84517c6130e040e529b6a46cb88612308def37901eb87f32c23871e7bd42295605eafc49b2afc3da9e80406aa1ae777cd4e7395fda800fb5c73b16e745d783542ac882cb67b8ed558e72839cdc45e0f6b4e7bc3c64ff28ce319289f62eb950cb48229f45d660d02c664479f6a33f780bfc22f68e7d6c87add6b925f7ae9fdd32b852bf5bd7700f595ef74e15d2b0ea0814e2ff050bdca8bae5d942638c83a62764bbc47f851a91e759d1dadb06d8f70fb236f291c389ce74a5458c0d16eeb37778e07d5
+Entropy.10 = 889b56236c8b049aa3dc68a8497c848c898358238cf66a14fc2057e789c715c8
+Nonce.10 = ae4bda0f1b3f3653bfedd952982c1ca1
+PersonalisationString.10 = 7cd37c7a5bcf7c7092e36cad7ef214b91de47be1c04adce66200a0ca9ebbf2b1
+AdditionalInputA.10 = 4e43c5be8153ff3f77d495c3f782b5109965487f03110634be7a376b87388d16
+EntropyPredictionResistanceA.10 = a4eea055436b3d4df67437c3cd1ea8dc2bc7f2f0c508631facd631afdd53196b
+AdditionalInputB.10 = 55f4a1e2e045b22ef9b2c0d5ecc18907bb17dd469cdd9b8edd9724fd5cad91b0
+EntropyPredictionResistanceB.10 = d7baad65ced6521b7f15ebf40925c5825b0b177b4ea0d7f2981df87b4d778f54
+Output.10 = 2a84778799fb02f6b2e4a3c8d1cbba5182efae90ae8fdd8e401bae3dbdc8364571e8537ffbc047572fb0b3091e705c29abc3ab03e1823cb7b1bf1777ab767a13beceacf14c2fd5e479ca2bbfdb591ba7e3243c2227149826ab3b1c7ef3e806968c884b18e30d73b60820838d1daa22593d0fd1e3198ab59ee478749ca874a0ee3dcd56db6360d2c9c19f10859aef32eb6cb41df2681ef735935623333fd56813fee2ac6fba80ac39fbd08faec00dfbbd75d54a0589b8afc975540b16e656ee3a08c64ee80d932887b534263b4d52d5de805f55fb70707b2f51af5397fffa1ed208ceaa2cd18f7996bafe3c8e71ab145e2f700bc25bf1ecafe05d0fc2fed6ef1a
+Entropy.11 = 20eb0a6be0a5c0cb6dae76283fe5d5a9a98c5dfe63b7de4ad47cf2650e7fae18
+Nonce.11 = da4fe2e6f6eb32f849dd1562d698572c
+PersonalisationString.11 = ec7837be902db8e470138c9c51016557a11849a2fe53c0ce8d75e2d02b09f81e
+AdditionalInputA.11 = 8ebcaecb39d4e6f0ca4e35ece39c02a0e614791c34b34a1df73603c32d8be9aa
+EntropyPredictionResistanceA.11 = 0e1b0080b6aa9cfc54345b288d3215778d8d7afebf2e58d951b5465074da9d91
+AdditionalInputB.11 = 487d354550a1eb9b23307310be52ef5f7ef52f90a8e30610c97c2362a4dbc30d
+EntropyPredictionResistanceB.11 = 284117dfade4e1c41d64c46b734cd162f4c98cc3117d77880e7687b2e00fa94e
+Output.11 = 185f09664f6694419c7fd662fd95ffae44ec147756e850bf37e86c87cc5b337f8ccf904af20640b3f7d0773f81cdc278764be05ffbca9efd1cd4c675cbe36b99db21c4df023742700a468f4fba67b13c044589fbcbc8fe33860ffd157b5ebebb9f080aa304834a1e2ac0b6decbb274bbbb26fc7aa4dc76b08246479560a40bad925670d76afacafd45c3e7d57fd4d9a7f2168d26259f647a95011e1d8bca1693c6aa47bce11e011ad4a4d02b54b2daae1320b3166aa935f3086b33168cb394518d543be55cdf0ec0fa61eda4142299d6736f5c6dba8147cc4901c3bd5f9a410b3326e4a70b7e0cd9464f62573aa908ba754dddc87658339bc9912ee2b78e71c2
+Entropy.12 = 4397d317fdc2b43e0b187dfaf0177070703aead9fff4a635a08c0ac668131e3c
+Nonce.12 = 514c935552162f622939a2084b1200b5
+PersonalisationString.12 = 794aac20779814c98a4381e9acc5f2c76dd5d4510a162d2e8e5b476f69789a4c
+AdditionalInputA.12 = 0c700ddc01041f45b66053327c08b831365577f02846026fb935f2712a51657f
+EntropyPredictionResistanceA.12 = 921d0dde06deba81565360d134ed279e0a7bdb3665a5e4d403a107ccf4f3460a
+AdditionalInputB.12 = 92eda7ba5c6ea603518eb3eef2af84a92987777240ea0b9d118a4b4f0bb6f2f0
+EntropyPredictionResistanceB.12 = b1416eb2646da06f6182eda0a3aa253cdcecf79dbb2642cef311f95c54281f70
+Output.12 = ab088d2fa7b8e5815718d3ebbea2cd616759fb5bff2f24e400015f74e02f98b97003a56aacd66d9d67450d9136391dd0e1332c4815cad44fe41374dcc34b96e06e147b1b31efaae1d02679f240926889be93f56fffcd7fac4cc43b9e1ed7c117b32a1a17f5b39ffed5c2a94a15d9caa879594193ddda1a4776e29befcbbeafca162ae1abd0ef4399630e09e8d37091ab393806501be69a0d879fffe8c609e16ad0a548a4b1fb9d2f0ba3507a46acae9399c949553c6c2dc7e22e5b11cb304c0db6e585dde46cfc7fd33d60ae2bd5465ecf3e796f8fe4f58cd72982921961eef05d652966c0405f4cad88a4e59aa5feb44d07d09d2ea6b0fb3e166d59fc5948f3
+Entropy.13 = e5f426e0ff26787d025d3ba0f409a853e8d9a43f4bc685bb749e27375eff4399
+Nonce.13 = ab797bb447593de929596b54840bd4e4
+PersonalisationString.13 = 822be7ae44fb585188454f133cee2ce358cff194050a6e5c3029cd4d33609630
+AdditionalInputA.13 = 634c6c4fad592fb0b9771ffdcf506fe1bd1c2985ec5749103930261e097fd684
+EntropyPredictionResistanceA.13 = c3fb26124ef850034f3775c399fd7033d41f16443bb29e793421ceeafcbd53fe
+AdditionalInputB.13 = acfbf5d5cab7adedf8b23c8ed13a956c8f85a88a2cc8df470f33cc757f85fc6f
+EntropyPredictionResistanceB.13 = 9be3b94b73d2fb56f9e4dc040d6b60dd2a41b0bb4014e50ff9c48d6ce5052530
+Output.13 = ed07570fb73f2017c1dd2d4632c398d3e869a4bf43ef6ae3a421d0ec6ee437f63817a0c68d967f2786f9e06f0f1bbcca27df75ab56f1b0ac8b77f3a1fda0f22091c1be5749ff72136c80d27fb72feb2c7b4ffa94eb3f166885ffa61411e39a9c28bc1c27187c672a4b5eec36adc3affedfb811ca8056d2126f8ef79de9ae63c30a2ef2f00f43c08669d0f2af6abc6727c88d03245526e90ce781209706106ebac88a6e04b35a89c6a8f52c8c3492d643092df046c22c0971e7fe19a972c8757d46fed8e7466cfefe782cd90ca93ca068a1574ce026e66591069ed7729904635835526602b0191d8298d80c3527c7e16aab3592d286a6217abac2b47af6c93d4c
+Entropy.14 = c742ca0fa8ad32100dfa258d9b0b800076995fa2fe3540af42e021b1b9b173c5
+Nonce.14 = 426fd44d235cd1ffa5827756183512ea
+PersonalisationString.14 = 23c0fa766e1b2b5b12d2f7b63a7dfce64ec13cc97b0b22ae5aae07bd943101ee
+AdditionalInputA.14 = dcc282a6d651d9857a85d77d49be7675130e9a7171a43af9086a3f0090662d86
+EntropyPredictionResistanceA.14 = 43bcb69207752c8072e51c7550ed71e68748dcbbc9d6bf2447596909d0e7a3c7
+AdditionalInputB.14 = 71aab19c13a0bd57f4fc48bdef7ff566b5a1e785dfcab8b500c6a02dd67b9a0d
+EntropyPredictionResistanceB.14 = 74ae82a578c671b29eaa45c7fc176724f090f52c928baad0f20c369f7c051fb6
+Output.14 = 92fcd4884af614850725b43d0ae017267c9b1d12e9f44eba49d1b7993106609b4286e7120bfcb18759371d82f080cf2dcaccfb7ea1cc2181c4c77a37cdc5594ad1bc805318cb7dcb4517f616f0246b36eb088ac7241fd8cce48e472113d1531f0329f33c8f4ca93fac673fd0120d18ea0ecedf1c7b49e51d5d853b7db54dca76ae740a20f831463e1e1b684f53aebc4af1123966dfa0baa1330e73df126f80cc6e12039d6863b448da371f11137785e89b78f2a4a60abeda9037a10e28708b6a31bcad4741e0922fc5d4a991f23fe71004a15fe3e4f0ccd8cae89eb01042040063a2f17b2b4c33c4739b61b24890ff7bb852a5b48fad395a9b0e441d49ac73ef
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 7792140fead1dc58c29d31b68f8f31dcaa8c1a6554c91f6fe0a285b1652e15a6
+Nonce.0 = 5b3cf1dce4769a7132be48326e29df76
+EntropyPredictionResistanceA.0 = 29dc22b342ec126753529ce7f45f91a863afd616e2094c234afdea40cef5b3a6
+EntropyPredictionResistanceB.0 = 5d34026bb40750b2d53592b094553f89e8008452527f163840b2068dcb5fd347
+Output.0 = 2c97855e0b78dbcb0c3bed185285772ffb5575d88e421ad8510cd2b1b1e0d1f314844167d692d56d5db6374d6b7b4042c0b6e47b955ed988564f21dcd22fe887b64fa8c33cd4da187b6cb56173778762a27278f00a5866037c8c9a3d6b794ab0c27abfdd7958d05f352951a4d005becbeb42c2d0fa2b937f6fe105b0fb524d52932caca3d104960fd9a2c9fb244b68c91ffdf3dd77605615b797d76b0927ce522dfea07c38731fbd97df4bfd4d927eb8bb4ca86831f02bf3a84705a359bd636c63058a680f9f70ef606bca28727d2952a62feb2df82b77a507757fd11b7c1805f93c6a32819fee2efb1c3a08a3f9f1c8c86c55f0a6664858b3fb7d548eb3e330
+Entropy.1 = 92366684d26042377577c64b1ce79702e4ce23473d461056accea9c3c87dfb3d
+Nonce.1 = ace57f89e45c66be0a64a1ba3e88d509
+EntropyPredictionResistanceA.1 = db1c2167cfc728ec879b1529c48b80c2a0ca0f72f1337704802f5f63810f6bd0
+EntropyPredictionResistanceB.1 = 6f888c6216187debec8c2e9780791b417dd8ab33e09dbd632d06b482842e09f6
+Output.1 = ace4af01918a6a57bae373e2a1b68734058867ed701c31cbc5b01689bb542e8e0d24f037be314ba2250edac94aaf91a00fd0c59ceff53001a3c159217ab49102474c6e988fb43558d35693ed993191163f4553429539781c43672ce3c5bb13e27293b5b605f24c88c9f6b22870471813431e9bb55aa3c3ea7216c75bcbd20fa96c9ae4f5f5c07628b6e9c0d51f1c35dc1aa45c57b0ca73404d1bfb0413c7d4aaf30f8be855fdb7a3c39684c20ea5e7ae83b5f5322c92d0c6b4bcd7cce44732839a5d9d54ca600a00944ef769a5e7cfba860b45c28c183007163be081106a1018e79bc45dae897e51eab04fcf89f4468d889e77939582a2d01303207f71533b2d
+Entropy.2 = 4180960d7b5ceb1d6ed0c62c53f1c25324c0f70f88b1903aeb443ac8002c95b1
+Nonce.2 = 6d86f82d0bbd7ec65454e9d990d0c65d
+EntropyPredictionResistanceA.2 = 106496f36e8cd5fcdf3bbfef68e7aa387ed6cee087958c4fd3eca3cb8b5ff58b
+EntropyPredictionResistanceB.2 = c8c56154e7b7a86bbb8d19725f0d9859d7594dd14f93722bda8b1d44498e7b3c
+Output.2 = ffba404e6ccfc5281eec8ecc491bcdda6115badf1f8bbf478dff266d11cfdb4955799a015e2ae0898c1f285add2ec24bb6b6d0fab275137edc2cc0a491719d841ea2c9ce95fa4298be53b20ee05d087405d961322e4e1ccc9ff561a22abf00cfe40de9e0665e8d8cd3c60387ab06209f3a4187cd5f44bad2d541ef29fd52a8e78abaa24b25ecc2d89cade1c2f053d7da94500168c8d7ff74df7688e029e155b2d9ffae84ad3a4caf772131cac81a735e2d507942be456d3072b17f886794ea0fdd06252fbe641937daf68e5944b4706c53adfe406a7fc73d6f8ad9db7168c38e21b19aae12b64a11bbc3f750b65cdfa7dc6503819b0827de7ef0a6e90ce6eef2
+Entropy.3 = 49bd8ed3a51ff36881f0305e717ff6b999c0f7763ab41d586997ec7809eab634
+Nonce.3 = 7b787497f9b696b11439a54cf1aed74f
+EntropyPredictionResistanceA.3 = 3acafdd23f341b36864b80da884b4302632b09ff402b657e4fbfb97c8c3da9f9
+EntropyPredictionResistanceB.3 = ac6e09c1e174f09f8c54b3f5f99b9a15dbe8c376f24d8c141f884aa56ffef0c0
+Output.3 = a4900619780fdab99f240d23c67753196d9a035479bb81a0f592c92b6d17759163fc4af74bd201d2c45b98f38a8dccaf4bddf7fc6e3f5595dc62104142eb96b3fe9df9e99939cb712efcded262ade54112fc56a0b6ab613cd3138a530a967182f6de338e47102bf79c946ac787560b8e420bff558a1b23c270b17da3f4666a739268c8066857f42a95509f07d351999c57c21f10d4fb1157284c480b5a946928cb4f61e04135356dbfef881bba08b69292cee6765a3a8529a5dea53a26faf724d04c02f115f1607f14bcbd60a2d91df43e0cdf9578b8e1df1c53495d87c04fe5f9d1c81337fe1b067a3c57c327d708edd3869b7e3ef96ba897cbfa4333b125c4
+Entropy.4 = b5d83642c2864fab55794ec6c2fb6b7e4f301eff95af394c6a24a1345ecc86f9
+Nonce.4 = c37e85d0746c250c33fe0f81426cd0c5
+EntropyPredictionResistanceA.4 = 7a6e8a85092fe4536af666a33c977c87c0d4bb69fe43f4b67f2de048834b0f36
+EntropyPredictionResistanceB.4 = 5bf25b04480bc942eec6528ba649741618e016e6e9ca6ddf1486f3148080fe36
+Output.4 = 9b482d96a73be4ea3ac5788c877e715f9ab277823e8b3ba82fbfcd783fe4f178af174ff28f67f05594cd84ab65de820c06255a500c524832b68db6d7ee1edb9c1a900b5201d1afc7e83ca40b64a4232b397986c50a4d576d50afe45fe29dbc80b471344bd2bffd720d5eaa70f34e01735d2e280947038938de1d5a76cfa9595df7de3c1d96526cc7aba5dfb98b98df13b2ebc3d9b482a2f4591d7ff80e6b6d11fef0e4dd4be007905e464c664ccc86a72828e7fd7f7c6fb2f4513063b348a820b99d08867731e9c31cf1633c1de30f448e4cc3f06067c5a67029c7240c9fd860156f5ffd1ad244d08046c221165e72b2d8d1dff45fa2f93e9fd1092ed955fc06
+Entropy.5 = 16f4c33663612175baedc021a44a962533586873d12c7e095c5bb43eb9194769
+Nonce.5 = 0b7e9f77aa2e0f96521e5418e581841c
+EntropyPredictionResistanceA.5 = 4368004b5a545940e2b28481993e1472ff05b4f52bf03328329409b4745d5586
+EntropyPredictionResistanceB.5 = df1e8f079ca2f2cb73ac852168065611c9a4511347ff54d435e6a795bcf309ed
+Output.5 = 2cdd5a8c1adec090c0e0c574e362d85c69632e4933cb51a915f3825b54ec971ca9e1ea19a1f4a6f464f63ac77c4af781772721c02e8e80c7909e854069015649d54280db273c98bb4a8bd070fa869a4b84134fd0f4be6adeb1ffdb95ec3b9dfa68c1dbc472e98bb0dd850c46a079a526ae22fb0d41282638b059acb9ab4356e23cde8bd236b027726f1ce9010e83b0296c668c29d587db14b349f61dc8ac5c7e4f68706fec625ed3010d93cda2386da949f969c534101766cf2a55a7b8612eea43ea733ed5696e77d17eb7a2b0127b7f06693bf2c3a2b0629f3521b56b89f23fb19833f31fb89173068e9ad33154c5b5fa5abfb3bfc4f8c00219da1e04df3f23
+Entropy.6 = dc640b41b248900bc1a5dea0d3c837625f050da08b91bf93eae9b11970d86c0d
+Nonce.6 = 921bbb69b986bb62c94ceed68d675df1
+EntropyPredictionResistanceA.6 = 06b580eda72de310d1a140074fb5f654a4398aa88be1db35f8a97f12cd342211
+EntropyPredictionResistanceB.6 = 6eefc59c3189ecbcf72413a1573f71e756490dccfbb54a6d9694373db4ce1606
+Output.6 = 3af0f18452aae4d2caf020778201aa9dad6359a146e8d807799ca776601898aed550103a7cb2835ca9e3283b525f89545e9e1db02362bd22c2718dce9489a78e9b4b1cf912126055b4ca013fad97cddf63b077195a9463865aaecacd26beae7903c56eab0e23fe8e445ac12c188aa6db32238ad67e5ed99770695bf2198b3c358e1ba25b9d3a26ef6563e40bfccbf3bb88277002bdaed783a8e5e8461d9ab70fd27fad99a28a14d7878cc42627d56df1ad5e3289d015409a0106ba666bbd161316cb3e7317124119f97a57fcf17dd65b9a582afdf0504d340e7b1109a28bf653d62fdda102c7b078cca480343a0587cc4fc6f86964d15c898dacce6ae894539d
+Entropy.7 = 5315cdd1cb9cccb7071bb33e668b97a3b6c059287b491316ed4d46f1f878206d
+Nonce.7 = 0d53f1bc6ea9b27a07631321ec38a43e
+EntropyPredictionResistanceA.7 = b61f4dee6bc4d52f43926ec013c8619081625384020e61ab6c9024acdd301b45
+EntropyPredictionResistanceB.7 = 31d7ef2520365fd8957f6b509f4acfdb6c3c7ccc5acc64f11c5fc454956eaa69
+Output.7 = c073c549965e5842215cda79e3299f639a89bc64c9dabb7f3111938772475872102703384b9fe48fb9759f1cfab39b78c64888f8616979c8cf8e398ce9cbfa5d6218cd8555a21063ae5b5e9da2c56518eb8c9718decb5ccee3e13180ae9c0a5aa8bad0a33d9d351aa5f600fa34d85648831223a95f302549d96e9c1e5b04182896e76d06fcd0e9e0cf6cb5d4f37b691615d784bfd53fe4eb6c0d5a6182f3d0effdf9a213db806838c4f4e5fc254bfe009ad803cef0fc6a647acb21b728e396b2b60891a644233bb15e731f56595495ff8b65065da624cf96f8ae7d122a9b7872e7b13f19d467559ff28058363d3dccc84144faa6d9f902193c35e6a12d2a2da4
+Entropy.8 = cc94f8e4f6802d3a07bbe9caf150060fd3ee2bbcd8505aba56fb64845fa3a90e
+Nonce.8 = e1e79410b55793b17baf2ada86663c8d
+EntropyPredictionResistanceA.8 = acd79fae92cc7b410557f9ee66da0bc0013fca9c30d8789d12023920b257245f
+EntropyPredictionResistanceB.8 = bb08679fb2a7b761ec13d69085476babb53cf181e6edbd073fd2bf2dce6aba74
+Output.8 = 1164a85b541dbcbc5dd902bfc3408ea895df10fa85e23528096e6e940895dbdfcd389dfc3ef9ecb511da1227f75791bfc02d42b80d22f47ca4f83864fc773357f50f3aaf1c0c876a5cb69fa97138421608dbeca14c2e42bb250fbf3ffb409568560f8ba88c6a1c8da3b798e236ab48ac59a8d54d2a817838b90bba9c715973d980d4b9a8151896799742ea4c7e148aa0442cb2984d3fd9e193f9c9771b5a436a47cbf17996eda0521d7cc3e8ecd1c6f3b1b17f8e11c06daadb76a231426a5e3259f19857feaa45ad98bbb1410ff9584c8c59c2bc9f7e2d95c8e237b37c5b3c3bdcb233d2699e084a187a02ea55c8c914968d04c644681d9d09f645105d766a05
+Entropy.9 = 5c0689303a9f564b960bd65c5c538ab3de8818f84066f6e5062e3888e3230784
+Nonce.9 = 38fbe3fcc9607c5aef7569faf2f80978
+EntropyPredictionResistanceA.9 = 8febb68f1e4dae432c697bfd82dd97a867a87bae90649f426877d9fed1e2e849
+EntropyPredictionResistanceB.9 = 193a1e5e593961b7d90b6a34c82e4b488bbbd33c95a3cb00b6846f94c6860581
+Output.9 = 4a5dc4cc21b7441d4bde6a9386d79cd986d0741626f8862f0f2ae5a72c8c7cdde01fd1dbf94239391af2f5894491b4fd340c860128e223639abc04a5991077bfb24bf9dce7a962f57fb315b3ebc3711eb92d9ef39b76f39ac57a901c156c6db29ba13483801df3363ea439616977f6bd30fc171274f62fb646622e10382eb4c68920db80ec5b6ae56aafb854cfc9f8f96bdcd7976dac7fa39addcfda60ae215c3e16059eba200072d90cee396ba4a7fc4b291cf8b3a2cc2b89722c7f163ad1667326323a7e0e6abb796a38dc22ed7b2696426cf122a49c794d2cca789f5b4ba0a69d9866ddbd3993654b6da2318fdfbb19daa41fdecf046347cbfee4d5764fe2
+Entropy.10 = 4585f8063c78d4339cc4796eae7f5f40f2d473274a76653574c4188b1ecd4f3f
+Nonce.10 = b02250731eba685e66e21164c853a365
+EntropyPredictionResistanceA.10 = 3e91a0d046fa463856a9a30033dd766f0e168ee9d02ba7d69a2387429279c013
+EntropyPredictionResistanceB.10 = 9009cbf56e249604980bff7b779e36b72b6efdba8172736d8f0b37814b3bd2bd
+Output.10 = fcafac6244140b51b87fa74355787fe4510293fbf53d149213816e1d7d101f2f613558a1e5fd643fa3ff58673371e9f3fdc68257615a6073d38c6b5118ffe99e2a41940f8cdd23d1e4bb05039c1f321b23a04fd411d08da74a646226d9c3261ef69eb3f1524a461a5e08a8d65173440e251d1029dbc7038f49fc0d090844e6f3f618c8d5829fc4b42ed9c02b503ff05bc0a6d7363bd7fd2e878d1ec7de24512939fad5ab8306f52cbd242dd598f5cd4ffde4fac11f4d4cc4e83c047e1dbbdcdd48eca1e7be78dd9fbb8d2cc675abd6321820c7053decfd8380869204aa7dc70e35c237fab85bce53f443346703192be3cf33002d35248c78302fb6767ba50974
+Entropy.11 = 71819114d01a6a3346af421600d1ed8274c7741522f49a9e7426c78a61b913ee
+Nonce.11 = 7d913273d80bb20bdcd34b205a45e9a5
+EntropyPredictionResistanceA.11 = b2c0da017a1e36f6e2dc2711c622b89105880d12c39c797f242fdb3adcdd6175
+EntropyPredictionResistanceB.11 = a15c0500af443607099cff75c951b892d5681a972c325f9e1ec4522112b96bf7
+Output.11 = 3abd2407b1213f4789046eee168eca3ae080b0b6cfb5e6cd5f6f22bbd8de4fc99399521c097a471fa6c7886fd078ced96f86d21499c1e6c2267aa76398ceb95b908b06f91efca70dce4f251698fe8cb1ea8bf9674ae9d08ad754a9615d75438f53102cdacd2cd97b1cb8900b91b1c3a9a3c771c5eb3c41b41d2fd1128f24b2892eeb19991d000d971bd2812f4147ae2485b56eb7e3414d60cfa4edb79528d3d3da2e6f83a00aa017355c6c135d3995183b0dceb6233712d434e1a2eaa53b49aaa0c9109d30f1f5806475684b3f339b7d33292afb201230d433fe577a0708298d28960d6e66683064027bcdfe3b006103f0add1860ba96b51be145eff6a0ada6f
+Entropy.12 = 852710ecb3476b4bdd9ba7b1a3d60615aa9e4186e87d21a94801db22d5255b33
+Nonce.12 = 3884934f63ab03007d2d984925cffbb2
+EntropyPredictionResistanceA.12 = 9f2b582db59fe7268475a7f3e1dd86961ffb967eddb4dd6b77259c59db33ac91
+EntropyPredictionResistanceB.12 = 712f7e0faf7e43a284e6b3fb74837453d9946564ce17410b55f6b91f7981231c
+Output.12 = e0e62924ad06ffdb74396845e341dd353d6ccbacd7077128f35c48a6c29a6eeea74cf7259f0d1a190633bbb87ff8a7143ea159841b78353eee242547f82f41cb95b65bf18515d4482abf8eccd1e5c2c234b92f59237fa6e883bff724304c533a750eb47e6490e4455970be9aa8789f39461a505a0a0650af61870d30f88347eb63a958220abcdd5a4afe6f4cba461edb3088a1f52927b9ed1900d1b118fe96972a1653d046258ba7219e22f41d7c1c06be7d62ffd49f05f2dda516adf89982bcc2b6cc1422224edfebf028da733ee0d77c18e70df67b65480a97e0304f051848dd2d1b50e939f8a35747d58fa1fa82be3486a978dc670578a9db0efd7d189b5b
+Entropy.13 = dcccb1b1204951c729552f2f39d72b7c522c9615b26cabdf11cff762068b979c
+Nonce.13 = c6f8223912d6b7f856c3f99e9270a4ae
+EntropyPredictionResistanceA.13 = be233f41d7ad4079e36bb6bbc7e35b98fb0bde2653ef14072f2881077b7a52b6
+EntropyPredictionResistanceB.13 = 96080284be1ceac9ef32acb88e5270bd4271ad1d4e0e67a97bcce92d15c21eee
+Output.13 = 4103346f97fde33ab669f8b543e20cdb99f18f8a4a7035374d72c2c1e2712ec45c55aaf5d5e3141608c13fc79c915548b5f029daab483c0ce9f33002b8c35bedac5989f9ab7eeb8b9889b2cd0372a51047602fa0dc82b277b7dcd38e033a7b7d68d29b5c6643eff327edfe86431eaf001c5d0139a28f196aa1013b8673950ccd1dd07eb9e45ac901a590b69c7dd7557f7b349c9713169a049e334d6f14063a7bcd1bcf24553f1082566e50fc8bc5f49c1abd189af590167aa6a983ae82d8c4f907e94650c3d82670b62904ca3a70f21ece57c3778fc0b1909deec3be8b09e0f5907e0863a43a3417ef49e3686267bb2896a0b0ea41ccec04b2b578ef3077f3f5
+Entropy.14 = 0634c5f922969da4ff1b576ba5bb1df8f1731591f07e2cdabb397409ea20118b
+Nonce.14 = 2796ea40f48ac10f15e600e0dfc1a4ed
+EntropyPredictionResistanceA.14 = 5391ac5f7d590d42afbe2f013c551d2c113e5b1895d05c55bcd602eb1700008f
+EntropyPredictionResistanceB.14 = 45e00d48e0c20d43553d2e83fae9c740c2f16f3a61a1282555fac2edbb128019
+Output.14 = 9b54375a2e18036863d7a5df0fa64c827d58c1e30b38e49678f96b357023daa723f96931fc36bcef9d0d87302d1be95d137160efb61e7935f508b6bcff251705bb46d581160633040f97884604a61142f66048d5690587739d3a44873b993361ed9008ca1095fcf465a282320b02177cfd32e09ccdbcae86f18551c2c1231199a7d5923f05bf0f89b3dc06dc0d6b02ac2242b85634b56d9ce95df2eca64bad8bfa01874fce09a2495fd86c04943f541720e8d1a3089ab8e7dada65ac0afff2073e938e9c3c18d98444ac8e62f7ae6f3555386c4fc3f49f414ee88dd2f92efa0fb4f2486f3aa942b12282dd9c342349ede3d8bcb304ee0d37b696cb6a3cedb4e3
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 0d250c7a5d8042ab8d57d756605a4bcf1b14fbc1ea50fc5a24de5dd265be528d
+Nonce.0 = a65df356b38d2815e21cdad390312826
+AdditionalInputA.0 = c256e8fc1f057616ccff496d3935f69df86edb552f51b2be3af3814016c8f845
+EntropyPredictionResistanceA.0 = fd03b4d6e21559dabce9adecc2f118e0a3653ce3484a03f73eb3bdab7aa05e30
+AdditionalInputB.0 = 731fba9a368545e233b2f2957e0afdd82304c78598c0101602598729d0ca7bd7
+EntropyPredictionResistanceB.0 = f7e1329688cf7316b393de730fb44a3ed1862762db95df68c58aa682c9551aec
+Output.0 = 76cfc965bc021f4f30d1a7ea178779358aa5936f7064f77a4624ec92caf405870d31ec9fb49925ed5f3ac1287eeb6287332bae3df9fa857e5cfe351805c1346c74375b18586342ba93fb7ec0f2c37923d4dd26c400708ca94002202979cdbb050fe920bdfd6b6b56c24436e530642305e668ab84179cb60ea43b9d3562862ece02a78b885796592979f6ec1daed33ae9ef1dc56d5cbc498f813a33538c8e596fe65a3cbce21497ec01259b26d2dde8300ba923eff83ac078d6c6268fb5607b49a3ac80cb725976bf6a6fdc3900a68812fddf641ea5418ab60fd80886c0b5ac3577d2cb01abd5eaae58d7ddb9c2ffdc2ad67884f81790aa0defd96b5e3be1f3fe
+Entropy.1 = 4fb3c150e0a4edeb3204263f44132c2a0da3270a862b3e65138e8449f6337da1
+Nonce.1 = bafce73c7ea4a7be562f4ce1c88690b2
+AdditionalInputA.1 = 70870f541c31015e75db2ed23432314b08ca3d228a22ea737ba823240ad58a39
+EntropyPredictionResistanceA.1 = f7ca64e571677234879d410c4c3b7deb242509cfa8818d09c151fe6f23b594d9
+AdditionalInputB.1 = 5958dbc25bfc2e4698afb7a57eff89c3400529196947356f12701a71e208fbd7
+EntropyPredictionResistanceB.1 = e39a97ed4823b60561cce3120450dcf6e78d63ef17048fdaf3aab81dabb7d2ba
+Output.1 = 7b051f9c09b7455f8a7fa26af434ffcdce8d569bb30785609c72a1a0dafdc03cff75c6c256866a163630f739f7657700109d9eb65d9a7d2a3b7885b9e5f3eb724a3076e489d7476d7e27fbab278ecdc1a9d312b86d6a9705d6cee312b025c063ed80f95c9db67aeebb78d6549fb901a2a6a043bf92ea974c1d5e3f456af111740487b077424d21254742fccb3384888ee6f38a66893e697aa3529bf1913d83c0ffa924cc1eb58f0a4657ae7f7fafcd1a509652fa8e2eaaf6d91b93cec4d048e139b0e32e3ec34b8995f4770bcaea22138672b468ced89b275feddc72ffcd6a33833630489408d2902d1bc02f46f2d8a65549e617421d49a3282b678948cecc0c
+Entropy.2 = af952d90bfcf1ac9d67c8ba71b2537fe5497a6390cc615ef7d3903a3cb8d4151
+Nonce.2 = c23eaca1d47fa6cdb89ca28e2a62d355
+AdditionalInputA.2 = 9a7a66bbbba704bbe67d0c5ee29af662e0456094d4bb3cab549686982715dd01
+EntropyPredictionResistanceA.2 = 1f3705803987dddd525043ade9d9ad6fcd79756f66e51c358b6c7da14d2b72ab
+AdditionalInputB.2 = 5d20545dc1bf09095c6a14e0d594007b3f87ace44a6c96fd4550494e86b755fb
+EntropyPredictionResistanceB.2 = 990a38c9bf28a0fe4573976b70181561448598ac815b3080cd974e889425f493
+Output.2 = 04c5396ed2827475339786e2d6f7decd525d6aedb6319e0928128735dee951499f37de45d33a8d501f0374651de39aaa9ebee9abbb66a879246d4fcd08b944e532796e5395c10330d29292eaa4e36a7e3a4f4afd1478a61210fee66515ece939af536db2990e4a8a259da0bf9295a924286c80162333de1e58390092aa998e95eae6940ef68a09f946ad592f1f44e79cff25f681ddd12195d76079051ad6600db55f5da02558b985db4f351f1cb61c74b3c175f1cd4222b8db34c8dd63f21d61e4b5878c1fa5f3ed540565162e246b26fdeebb441d4afc61f1436cfcc5d76771e003c9145020d625b03d00d1e552db1f5f043ad6471893bb7507952a80ebd9e4
+Entropy.3 = 879d629cd29d50cf1c8359cd0319a100b49b0827c507706ff0535bc8eca343bd
+Nonce.3 = a0003809b3aa850a0df40f97385967a1
+AdditionalInputA.3 = 97d7483c680d4007ab07e874044be60d247e822bfbe926868e52e199c658a493
+EntropyPredictionResistanceA.3 = 26d1f3504e8aeed6b281791b6ce07cc9082b3d87c58ad465a31d9aefb8c6723a
+AdditionalInputB.3 = 6e2e95c4f575581afffdfac1f11984302aef711e66c53e0b6a79117857aeb6fd
+EntropyPredictionResistanceB.3 = 29ce24bac20ba2a14fab55e9e4da7059e557e227d38e52570cbf7b5db5d6aa1a
+Output.3 = 34175165fd9c319f1b00b1e44247ad8d6ea50809414d8f163657a50d6129073725bb7549be6794776488434463b570ca313131615c0864cf8787f7d47f3c34d545616c2add72881659a09dbdf0ec8ea88ce4dbb31731913708fa53cbb327fe227dc5c0b2a50d9be66888a402ccafbaffa032cc6df40515233dad8893a3358d6b542b4789a974d23cdebf8d104d43a14dfa800fcacd9b4db2f5ce2748616af9a849dcbb9005aa287011051a1f8a576902d6f0db22632afe034b14f0b24cecdf6ee6ee7c33862eb43fc9e1d35d78dfa2ba29dc0d47adc98887db781e84394abba243fa57fa24e2342cb51e20d8b91f7639e736d87ebf82696afa1fce8b802fce34
+Entropy.4 = 4388f19fc506f6831a3dcc8268c3321a582887309aaa74438079e55793a24623
+Nonce.4 = 263268342f8653138257c03960b183e8
+AdditionalInputA.4 = 166157c16329eef92754227da030db6beae2a766a9d831664cc41ef744ccb88d
+EntropyPredictionResistanceA.4 = 25d876e4f636f2a63b79120ac4509509aa43e3389827ea5284abb3452d1d1123
+AdditionalInputB.4 = 64a54a561ba03c5d167bf4f19ffb2cd2dca408dc57b49dc51165a25085b532ea
+EntropyPredictionResistanceB.4 = 076cec93f5deaac1f48e8e483e766cf17f959010c8bba4b81e8b3f18b6242cc9
+Output.4 = 5737e2439e71486678a213198342df0f1eb5495d1906fb83912118581bbaf4b2aba0c84042ddb9e018762892bf7104e7204dc800df0fee34cd5ba1ec9867cc8f3246f582344a88532a7ce66c80cf10950ec5331b19132ff32bb26ae7881155398368cbc3ea0c06c189f0d72136e44d74747dfb19bc6788add87440271381a3a2711d9a9902e3ad1989b8a533036df0db39e3c0a44630f8cbcd4a63b168c091001cdf9dfc3d790694ccbd28901d36e489c39f4a0011efbe8425e713f3f1babafac60265c30cff5d0fd69c870eef9038295f8c87b70761c2616ee45f2635a0169013853b372c07640425cfd75207feff8ce2c5b08e1d8509b7b3c980f39aedd38e
+Entropy.5 = 31db223b2815fc4e36a63d9455294e33cadb24cfb5fb335a91d7149f6a595f41
+Nonce.5 = e347672ee176a9b707bdb6962b7652d2
+AdditionalInputA.5 = ce8a3d7266e478e26c61e6888ef1241f29684aeb522e1f66804cac6632cb10ad
+EntropyPredictionResistanceA.5 = f51f5924e940dd2d5973ebbeee7733d71810f4cc3efddf3784f4f1368b845096
+AdditionalInputB.5 = 64f94d4c9d3ec7242941ce3899e02beb9fb1f6605af82152c669701adab4e2f0
+EntropyPredictionResistanceB.5 = 74875a3dc58bd0cf90a60662f803b1bfa3682c26b118914581bef950bc3fecab
+Output.5 = df7e3ec3f3721ac1409d197579c60be31506d044798c5833a558dfcc04617c3323ac32d71e37ac2a8c2df991260233268de0c0bddcc5c8eeef488eac2448acc54eb3cc990a64a7f6218949348e489d083a37999cc7b3873ceebbd216f14d032a87cfa55f2dd9bc819a649d9f2921c4b905f07bd044851a7f6251075de30925843eaf37b1156d5b1391705032e03382030add7a3bc7f37589adca88e276502a25cb7b4e9c8541cd13d3c1191427f4f557740ed26b0616510e17f27894c3430a0d86eb4b949ea171accd93b3b7624ed963323fe68f8f57beae907ee8b32436c063d719438d7d46ac4bd8c0d0c3b78ec52a1989b58b45f5b428eb1c7ce2e0e1447a
+Entropy.6 = b7954f982d87bf029f37bcf7fcaa4350731f885c89df2dc708f59475e5947ae4
+Nonce.6 = 3d856fb5f240b6dd1f663742bb47fcf7
+AdditionalInputA.6 = 25e58352aa8c50456b12b1bf804c52fb46b1b401d4ab9d4c0b1b2a01be6afa61
+EntropyPredictionResistanceA.6 = ede60d49138c70aae867d2f7a14fe0eb6cf3d2ed021c2eaa6c8b427f7934d43b
+AdditionalInputB.6 = 6168f318007cdf68b13d6013869b098bcefc6c6cdc44677325db363bacfe7f5b
+EntropyPredictionResistanceB.6 = 5a24e17e1e465bfc2361ae0f39d14905b5afff9657e920dcab6b3449f1e46f68
+Output.6 = 9eb697acfc024354f89babbad54bf9c867869a4340518c14d48ac7f9001457c2a5e03046d5dd59d69e02400a199d7b7c06a095e4403eee0f6930a5314042cc06eb1acea15e2e92d897d87d1b93feb42b2c9a459a6339f0778b0c526778858f9a919dc1617081ff11dec282b4cab623cb1b392a4bbffb08febbe8673b76ee36a4865043e94e2dfd3d3c209ec14975f24cf40cf8010c348856a611d863952cdf0e0fe9f8186099455d8a1b352c24460a71fb8910acdc4e9f731d2a7481c30aa888d3ac606f76b491bd1984b939055bedbf94fd388b41d11f4dde5820d7a23925e82761300ba2701bac3b37b086795797f2f3cea154e62c6cd367b5debef818b538
+Entropy.7 = e43577beff7cb2c95e5b0ad5e7f07285e1336f538ce34dc1015cd778a64cf239
+Nonce.7 = 06a09195a682a3fc91fde9650b6888ed
+AdditionalInputA.7 = 039cfc5db23185e8a5f52d6db1c09c49740c00bf4d2307588563b637536f4dad
+EntropyPredictionResistanceA.7 = 8c865692d5ccd56420afd4c40e11444f9f473b92d405158b34d938bf2f8058b6
+AdditionalInputB.7 = 35b57844d790c1c236e7bda195cd210578e7392ab95591f29b2a0aedae091cf4
+EntropyPredictionResistanceB.7 = 804f7136667a6e8c2087b3eb850456caa09958e2da463272ed7338286b86e06c
+Output.7 = 1c83d70590f60c4c7bd71284bd80f2ef5cfa648778f0cb9a44ec0bc5c1229e214f460945841921230a8b06a87985ba79981c2de107053283d63f90cd77bb82efd6ea32a59b473d2bb615449f460fe25c2e0aaef5f87b71fa3ab0410e7161e909e8c29e7074432ea4ab6c86ae80f310f6233b95e2e9d3d4a5b82c675894b7afa5d206af03067dae4844f57b81a97dd22ef82acc0ef5863e0f154120e0ae521f02a92b67f5c513785922b9a8b2f5ddcc4acf1baa59ed76c455360cad9b24e299dbb441cab389b313214dfa347d370b08359c351e16fe99001d3073164ff5be88d5e13d2dba0ecbe0b3a71b9ba32161c90c541c5f124432303c78702cd7c281c51f
+Entropy.8 = c535fe1710b0e59afacdb4a06ef6c65428b34aef06793700ec07b975456eec2d
+Nonce.8 = afbd98fbba797407ec601091f86e25e1
+AdditionalInputA.8 = fc5074b78043437ac6d2a6a2cd54ee941e9efe2f6233bd0ad17012ddf93aa09d
+EntropyPredictionResistanceA.8 = 481ff06b2a6b1226c619ea41b20ccd2a15272eb79951b81140093238673affdc
+AdditionalInputB.8 = d8b21ecdfd051c50fa85accab9afcd7b281da4648d452c443175a3474e1cdeb8
+EntropyPredictionResistanceB.8 = 3a5d5cc676abda5faa1eac9a79481f927e63b1220f674b3c28ff196b227f40cb
+Output.8 = b17dab84e80e94865dfc83efa36d1bdd64114d960fac23f6ac99a97ef57c026a87a205c3de43cc764180061e692216e30d633dee195ea99dc479297010740b1ea9fde4fc40af818c8920c17090b70f1322bee7d9997f2bf05d171b6f4beddbf6c0cdc175235d80feed01f9845a63a50b3566b1bd433a34b3e2aa8b508141a284d3dac035f2272a4d0828bb9bd391160b43479ecd98540fcb3dcf672bce5b19c98b915d2d6d73d578b82f59cebc7573c2782bd6d1fa3e452f57ff57c00bcfa8d923b4da48e5040b25217077d67f0a0b2d0c3ca80c6b48ed556e7cae3df11e20f2e5e03f02fac07c6674ceb2be2e5753afadfcd9f01e207e27e0bd668e2a243832
+Entropy.9 = 17d882225fd619d9101d86711638c1f83497d588578e9c29f52bbb5192bb6cda
+Nonce.9 = 48226d00363b55270c928f59abe7546c
+AdditionalInputA.9 = 1d394bbc6d0d08415fd442bb952273779ec72c9369ea3e7ba181c1d6bf6682ab
+EntropyPredictionResistanceA.9 = ff08ca5fe61d5610bc731bdb82806bf16b5dee0c58228c0d2435ab7f7d53052b
+AdditionalInputB.9 = 63b503a2dd132b91dc039603b8e501df5fd4c49d2a99faadb706940b5a6b4abb
+EntropyPredictionResistanceB.9 = 77f729f1b13a27c7679e64f3a2d99eafc2743ae4e480afaf32e5ad3d10d72568
+Output.9 = d28acd1833fd039c6d872f5421165fb7a4e67522afdbdc4fc9ee116b0d4dd6b1de612bd3338712af83a196e57e6e870f6b19e215fe2fb4d758be71194bcb39f4d31cab61c33d95689bb90b7fc151a8fa4d6bd4cd6c9070dfd2e5a7215061421319f5c41912f02fcdaef7a31d7a1fc4b76c54997db2ffa9e18d840c210d914967ad93acfad48c035f762888122cb59c412f105866eeeb7cb7c58c259ef89acd17a18263a1d46c4fb84c5e4fa83bf66854feed74af4d84d58459e398b6d0007f5c170e0faab143d67637a821a276a97075578d7960381260b48b25d3337fc7a1d23c2f7bd8e06d070bf18420247dd2d97e184f481d4731e1a6e402665bf4c7fc0c
+Entropy.10 = 8cf9d9baca2a9dfe1545160d8c90a4166eb83a4d04fba14c10c85f825ad9d20b
+Nonce.10 = b25bbe4f39f93ab09a547c53403e47db
+AdditionalInputA.10 = 3a1d7e1ece6e019ad855cd1b804c57e573a6b496e6bd010d92358c297cd1f801
+EntropyPredictionResistanceA.10 = 8cbac5809e20b9c80ed1335185da1926591046120f9f36849c7c650a4e147d42
+AdditionalInputB.10 = e6f7efa830459325eda95bda5798e874d8fa4469b0730ca90b431cfe5540fd14
+EntropyPredictionResistanceB.10 = 65408e1d59a64b625915ecc3f2467f6a81b38cb417daf7aed2bb0f5899b77c87
+Output.10 = e913e0f6536e56f7fbe956a9bc7b949ffec15855cfac995914215e63b1edbcacec3e3d216dfff8262c6481e5277cdf2169ceafbbd1c224c442a7b0eb9421739a102f59ae6129be72a478f4382d2bd4ac44b8f16594bdcf0efaf1630d28de567306fc9c6abee17486e192b78aaac3ac368008ea7eba6cfec6b658551f1617a8c7e93b71fb6775a751816d3c2f68eb3f519c9be53d7eea08a51d1e260aaf7845b11373da3198b03b67fc2e6dd08636a662cba5971794d39cf64a339e10a4e572e41874cf30b01bfdffb660a656ed1063c4efa386bb4faba3559bcffc8089524fffc6ab0ee53194f9d1ff4b98828ae40416adbbd7530949ad2853d7d593c86f48a6
+Entropy.11 = d1f74049a5d90809158b532c2f2dacde69ff20ebc489e7220f62f4420267918b
+Nonce.11 = c1291297bd0a9404f8484d8440937126
+AdditionalInputA.11 = bd56257a3dc948e92088f9934c9e8b8c4a58c54d6f825999ab505ad8b34360e5
+EntropyPredictionResistanceA.11 = 64efd7674cd132b78c22137c6085adbb7900398654d126e07f75063f9ea2bddd
+AdditionalInputB.11 = 3f0550e757fd1a2707c75c1269ab6a1d133cae9f97a312be781b049f130c3d1d
+EntropyPredictionResistanceB.11 = e57df308bbe4d5c25a02c749ea98eaf4babc3128531b47b3ca7a1031336eddd2
+Output.11 = 64cb1eef05b6aac3412ba7d3b63d62cbb47ae159dc309ae9b3488bd8dcc0c4d50afa131c3991f7029c99557e509a4f3dd85bdc3467c5f3f2da42036360800c53f18a95d5a0d0d2a78f1d37d27960edd1e28d23e8bbcc17229d23ee1aa590786afea07501d51058bca08bfd58db7e0bc7f6df9ba08acd30283b6fe7c53328c6067f4c4514f06e579013d9cea564f0bfe0606800fdafe94e9b2b395be688901505024b6c4dfab84ea1c92e146507bb8cf47c65bd265a24e5e7ee2807097c90ab1fee6a8e878362cfb51b557671923998642b5323bc1571c2403b4f7dac4badaf8000115da4d36eb0d94e3575ea34c63ab4abb0adfe56d6b4a2e3a4d4eed69fd688
+Entropy.12 = e32e19429c1a769529b67844e2e93e4aa83ba5bce76b9197f59bc32247ccc095
+Nonce.12 = a21c37cd49b06ce6be467e8ff32efe39
+AdditionalInputA.12 = 6bbdd741f4bc0564223ac8e0801620360f7bb379e81862270000b27f9d1f5287
+EntropyPredictionResistanceA.12 = da7d695dd5c04c9b461406a4fd17d39588629b848b1f4796bf870d0ec8dbe3c8
+AdditionalInputB.12 = 157a8925615df00bc0b63531e3c7d452b5caa05dd563ba3da3e5bfde16e2bf05
+EntropyPredictionResistanceB.12 = c3eef6c071e78df3a47a7910c110e63cf47a33e307c98043e9f21e4a056f6082
+Output.12 = 1fbb9164436fbd412488ce481b11525907ac7af0c9aff7eb06aff766841093f903701d81b2d1f0c1d1ec390816eedac8307a97299faa3c27a52b3cad254bb317ac9831ed1623a375434b492fe8c41f7484a8fb0a42b675f3958899942c4bd9e149d059750dcba9d08f0436a77037752ec020cbf2708237bf987aa27f9890eeb3b0cbe4baba66abf945518f129b20a6252c4f299db8579352b589c3c91db984ae20b414ce84db00bfbcf152988353f22cfe66278cdada26e16a9d5f8265996c1680792c6f6144610877f9e54b4472af5658f53ff40e32683a4d0b70124ce40efe7f05b52fe74dd1dc39d318754da1eeb3449ea19b61fd6670c5e7526ca395ba7b
+Entropy.13 = c9628be06676faa328f09629811384d3728c89b566979cfb900787f4a3f35be0
+Nonce.13 = ef81c188e782f56d41bd82b62cdf5780
+AdditionalInputA.13 = 8a6c0f0d72ad539f51fc882f1850a402b4278f9810d0ac24aadfee5b29b7c8c0
+EntropyPredictionResistanceA.13 = 5d59c080423ee74df5837cc981f242066cfe3617edd1b173d152377d812dae15
+AdditionalInputB.13 = dfd9b9e30c0f5f9101db05952777208fdcb47b4dc64444c77b8e8adb480d51b7
+EntropyPredictionResistanceB.13 = dfc05e99ea1e3149c2d77ad5f099565b2d3a9b961ecdac015831efbdc54e1f86
+Output.13 = bd82bcd1114c14b61ade50bd69a14349f50d10d4dca2d8b661a17cf2a0dc93a8112624cb0bbf239eeadb1c3dcd3074f73ea6b494b09f3f1f9b3f247bd3e7490eb262ea419900b3a4befb8a91b1815a71f9a68925514f8346ecc47045c845fd695faa5d8d6a0222b899a99816e1730e78c31259b77269a64b5feddf6e5cdbaaac321c5716b5ecac9e3c4ccecccb0d7015e4bcac2133f04a2198996ca5bc8e6794d6a591c90c21ae36db631fafea7a59d6d233eb926f752f4f3c65c3fad3946310dbc560e531fc3ef588af8da28e083d745503bfb2f5c3a4c6984be9af29f8bfd5c498d4bf9222d383458785c8e6af7be62541233f09371b0d6aecf8ab80ad8c40
+Entropy.14 = a25ba2812513f8958a23c20bdc7750e9c86ef3e42b74c0a14a64166a0977686e
+Nonce.14 = a465d31fa367a8276475f3261ad92456
+AdditionalInputA.14 = 1d4939fe41c6d9f43488a5725d187e40623cc0648926b785ee376c8cad7f273b
+EntropyPredictionResistanceA.14 = 31dfdaa765b6c4efd994ec36166690996ea1f5313fbad4783c5c476afb8366b9
+AdditionalInputB.14 = ad47cc635dc1c8b52e1b0704a85e84c9bc414a7785123a9cc7b0627d064df279
+EntropyPredictionResistanceB.14 = 6082287397faf6840bf88d0ea334ed0e4feca834a4d463bf20944fb563c8eeaf
+Output.14 = cb4299a7527bf3dc8c1414cafe683e91cf3840a9782025e22c044a73b507aee4b5a53341aa5cca2b608a00959a34351142da882c523da72d5b8203184a8e34f533806c30581beb83577efd7aa1a2f507f54cd0e1430a394a01a5447f0f584c18c76c55a8610b8eb6fdf5271e6f9a5266e249c9a33bfab03ff8aa11987fc38d541ee8643fde6775f91fc55e4c405ffd10014dbef060bbc1cd804b95eef93f37498e1dd53f2c36735edf6b6faa47aed117e224c5abcf2dbc9865de1c97317507db73a2f2988b6e230e00cdefb94fe9763c850d5025e8a07b6383d1d6011f5c6856b8fbb880337eb154e8ddd6cce2577b06de575c83086ef74d0d2e62ffee2ecfb1
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 431e8e1835601acdf853ae9539033013e56bc225fa94bcdfb604fd8c84378c89
+Nonce.0 = f7e417790d3f2e3333b48cb4f37c0d26
+PersonalisationString.0 = 0f67121bedc863a2423b874ac356ff1c779f69c7cdd745efd20b5fde21fd8cde
+EntropyPredictionResistanceA.0 = 57570557d011cd43a6e83dbcfd81042587ef7883876e9a299c8bf3ade6b6cd33
+EntropyPredictionResistanceB.0 = 0947483aa05df941ca14a32923dd59c192936e68216308a1af6f950b0fe9b900
+Output.0 = 7ccdfefe2e9e30e95cb953d7e81b276ddff40023687dc5f06a932f8517eb535a47e3795f446c9afa48b1dd050485d0e76b8d813b10eda8e0959d5c05cb67443fc331251daf140b858036438fe3d3f008580b4a2fed0206ad9a2ee55f445fa8a6326e5ff60e4dab6c70c1de649d1dca6d38c93191afb9c23cb4ef72bb793a4057f09997c1c181e105437a8938e27cf56995eeb867cc8c6f40fa7f24650b7e66ef7bdae075abdadbab1f1e64a22ebc4f9d3a8982f56243681dc67a4107aabdbcee07e15013e053184474489917ce3346b01780d6a34d7183dbc7d0a2ef3c62085701ff56d58638167a8370b0e8ec6348ab64874ebd4fe97439cb7f38772edff2ba
+Entropy.1 = e2e2775e181ffc5db5ed51fb18a048b270fad9f1e0fd0ecf191650f59aa6aa70
+Nonce.1 = adf42a29ed0c1a1ffc2e467895c58a58
+PersonalisationString.1 = 3e556d5a1ce106120b944a44496080f7ce06a9be9ad71c0a5d7818c64ff6eb76
+EntropyPredictionResistanceA.1 = 9bf6e4595f2258afb06b88563c6a6dbab291c442b70bf328500c9f71a5deb1b0
+EntropyPredictionResistanceB.1 = 1885aa599fdbe3cb469d3b3cec3908450bcd25bf87ffe4f77c1610e5879fe0a9
+Output.1 = d71cd325f8f847622a7b9a3f2659b685ebf905976ba3e9a8b7d875e938f1a60b03c0b14b086708cf5ebbe875faa282eaae47794d7bfb53e2672f32d7ee6eb02a4987929462acb3aa8e47ed7f9a74ae7971ebe7147da044e725950ed7e60663c3752955f6cdbad20cf7a1e43974f2c46452f30599992c8dba374692e7ff70267d8a9c8044409ea1c0ea77fd9462e866313cfab1efa68f991852f1ae103fd4f993e3afc57ee2a6edd8017511d5058df9a07a6e945a11d09f60e78f9bf8ee78b762bc5986d0e353679ea508cd9d137090a96fe0e3fc0aff0cae54ee4ceb15a16f81e17c3e819b1d61415e052f7632599142deef0131980505b9fef4a93240da5527
+Entropy.2 = a8b9a64515b108d9977a1eac7dbc1f3c4ed363d147647e59aeee746bc0afb32c
+Nonce.2 = 03cb8ca3e45740cdf217b9fd722a7dc8
+PersonalisationString.2 = 8e27c95b42dc9e7625c7b24909036f692dbb7f074cd2a2631e9f59c6f6de4516
+EntropyPredictionResistanceA.2 = a6473f7bcf6a71e049ebfa7a5d04d32eb0fe6e6d36d18c36c1531a444ca2e827
+EntropyPredictionResistanceB.2 = 9faf3290f0927f8fdcf375dd78210b7246f2a1c7b679a02406dfb2f3360d3265
+Output.2 = 5db2f2483688e5beb876fd386de8e43254409098d8ca3d0b66bb8aacc45dd6a613848e2531112bbf9391679ffce19a4e2928793373599fc2e13089c95e4fdf18af987b840ee3c21e3af40fc34bce698794b15d369f2e00545b1a6fbc8b50144a78678e4248e5722a272d649fbd608c8adda2cd204c867dc528dd87bb4982fd25216e8847da40370b2e7ad6f72499f9664418c63070d8ef749a6f75487f55e0cd777acee370ab6cfa980ee150b759731feec3d0f12475d6ba5158b2c27a5a4911465145c84faf0c6d908ed89ea9230fcdcfee382af37fe33c4637b18da0c454840a1738950e37617713c1511e32326b7fe920536108284e704f28ff2c00d4a5a8
+Entropy.3 = 0f2df4df73ced3a4274e646824b6af9319f47bc950cc85588ffc6b6aed709350
+Nonce.3 = c91f6cbba07ea9ff4fc7b797bb9bd79b
+PersonalisationString.3 = fb641b2a3cf54e3b051703c76e7595480455011836f594691bfa3b707dc55f1d
+EntropyPredictionResistanceA.3 = 5a705a59f8a6c86fc2cd2390b83119ea57f7be0f4be5e5091232cf6d59bf4120
+EntropyPredictionResistanceB.3 = 6914d612fa39a2202dc848003d4fe5173e40a8bfdf0f154d9b563ab4509e4acb
+Output.3 = f6602f0f24a51024ad1147f86cee2985abea95c7c091fce4e6334efb61283191431f43350bc77563e0e855f87ba0c76e8b91c3d57fde950efb44f7a68e908d712da807c88dc560ada0216fe33194fed225fc91b2c238b5efd156a5dc41ece4b1e644119c9c52f7a76a47af389aaa55dacc001ab49594e69cf7e216cd8f11608e3bfa72a66de84e823f538c62cbf11fdc9c99148323352ea4c7b1769783942c32518cc203995ada200d047a7769212ed6dd4246519a638a5fc10dbf172a8d8978843d41a7e689c8c963f1f1fa0c14c94c3aba243ef52ff827736f4e007993be58ef9a4d6c344e8376bf76f1d8f1935adf5960df8ea451f88f7aca807f1bb2830b
+Entropy.4 = 4132b2b9f950016d05ca74c20d015f795ab97b6abfe801a18c43d203f105c0da
+Nonce.4 = a345aeedf615181f8fbaea631ca9d23d
+PersonalisationString.4 = 7528c07592bb61917e4a3939f034db1e97e30a487123eb5863c85e6f25d7b98b
+EntropyPredictionResistanceA.4 = f07065e5a2b22f0f5dd8ae0ea3ec354ec2fa0dd247adae00cfbbd117099c08a3
+EntropyPredictionResistanceB.4 = 0bb91e77a727b22289d05f5bce9a2176025d51284f8432aa8f44405667ea30ef
+Output.4 = 0e7a2f4ef9145c78f2849e3dbd54fc0922c29ecdfac94890931b54255187b30ffed38e05bf0e12f695caf2d42729b2e8c2dbb519dd6afaa7ad0a61ae7eb930bb3c5b078a85d85e48631537025f87bc4a3f11d7316f42228a25bdb661e7560ea921059bd4f605dca2fd4799b55f0a6d8cbb6f759b58990672a08c4c673dcdf13d0772d3977b10e742c82924e346c6873a3aba0243ee2231dde014d09987623e8974b8c06973a7a44e98f4f5efa02baaf1011449997a9611b2201fd74e585c112e0e311a90d9284e30721fc04f5efd768cf201442bddf8ac161d3b6f7f910ff517d0b118182a1344fec8805b8b5560c0d588fb62ec0044c04ac365341ddf1f5104
+Entropy.5 = 7e2fb8148b55f5bd20aa279a5f5a4cdf87b4fc7a104af5b0e15c20a83bd889c6
+Nonce.5 = d211474dc13ade58f443e6eb81a0a1a0
+PersonalisationString.5 = 194f49f222597356ea71a8bc7b6765bb4cf5751cba97e1ff49df16790588013d
+EntropyPredictionResistanceA.5 = 9fb44c3932b8f70fa475bc08875a690c6022103a103801fa91fd803240508126
+EntropyPredictionResistanceB.5 = b7f7f3d033d609b22734c92dece79f40cfca5578bd3200a59a5091ee1e7504bc
+Output.5 = d7ac04bcb55fd6e1b5ff93300b92334e6b86c372db4ee119a2c79c18920958cd204f0d46e05d613ad69c7a3adb702387589a5c397f6a2215900f3c8fd4be2d621d2f4c39b61247f7e50be432603d9cf4959690eb95ff8bad5302a2048ed050c5b00044fbdd3ff8dc7c885849c9396e6aa43ae104aa6bba8edde24a18c8b96b22d909dffe133949984dccf71bfa2422775f5bf6a19ba9c81d6664d8f7662ab3fe75a9b5637ae84d4aa0c0983c58eb74f6235d48bb9bb3dc4aa411bcf64c8d0037d6991cf99be034f9152e3ede09c7daa2f4473348055f5f9c8f190a4c6e8d97625878dc836d373f963c16c70f9e158fcb81a575e7bee82d006c5911ac3292e2d1
+Entropy.6 = bb15b6702cd197750af2e72e1f6c51bffe639c911a990badfc21bc6f369ff441
+Nonce.6 = 1df20d34ca84435b56f027f313c67f16
+PersonalisationString.6 = 3f8b7b0eef6d14595174e38d7b812fb42679e06cf9e5272b33d6e5b5f77eac2e
+EntropyPredictionResistanceA.6 = 55153576ae8a5d38d5492c4295f9d3ffe8aeadf8d6f3e9ad2cfb5d54de3c010e
+EntropyPredictionResistanceB.6 = 39c550c38ad0fd0744d71ee0b22812e38e69ae01b948886de7e3abb62ee7cbb1
+Output.6 = ca18eedac7e522d6349fc96da622f693f0ec944d305f6155dfa488cc2cd9cabdcb2f5bdf33d52bce8249890ce2e12cfd525af096f04f3725d8fb4cf900a6fcaa0e4d557d90b188a7607da8b549a67e59677220f5940d516576943e1899bba9a33ec357ee2f2d13edc009b38a2edbfcdee6d843fe50ce2798457785d05d472f15940721cf99899d666f40f31d7ee3dbecd97673a9214b502496acc410ad9240ae97f637f66bef07637fdcb30429c0982344ea355a2afb060ab552c2f74a0fdb098604e8ff87c3746ec4491c683e41c6561c2d8c83b88dde35958d1ac7de978009bd7c35ffd81d5846ab652ef575ee373d04603493459202aa18cf188b550daf85
+Entropy.7 = c0930600684bc3a53367b3f4fc04ddfa458e1f0a5f43ce0178214bb0f9d38f8b
+Nonce.7 = 53ede661653854746183c3fb6d84c1ae
+PersonalisationString.7 = 6819155d6ffbce9a31810c92bd840a580b31c81169d19bf416034b7d765f9f7a
+EntropyPredictionResistanceA.7 = 4c2409fea32a1c0e297741f101278b38619b524733cb582c45665387b581f2ca
+EntropyPredictionResistanceB.7 = 4455f04132e227a52beea409eebd36bbab2826618aac7014f1892c803b54d7cb
+Output.7 = 9f4257d3a387c8acff90f2e8a0346435ffc191bd1267d6c4470f5cc56ffe657fe9d5f638196b2a7e52a1a505b60b5a3758ac4566e7030b2bccb1c0aae4f6ef6315942a31da5423df274a8123f013eff70ad6e6805596d849469e63754d59e80feb57afd557de37447ee3237c21daaa7aa7ef2786e5208178c2554355859ac438c4ffbd8a3d52344a49e2c5325aea76906a595de19e13b08747d5d67ae00c2bb5f4560d81425d38e5ced496c81d8df668dbcd3b9cc44cae671cc3fffb13f92201d73644d98973c5998b2943fdfe2389febc041fe22d47b515e80f7d1c4b8b2d8ae14ac37c349b9a690cd820073bf814325d4bd3755251f9707791179f94e90b5e
+Entropy.8 = 4360158c07a0c6f93b3c128ac9e253e5dad57bebb9a874ffcbc31c4aea810f47
+Nonce.8 = a33c61f0c44b2c3772c4ae59af2af050
+PersonalisationString.8 = a37db6394b41132b17752e0c1b58efd5260b32ee460643b4eea593b3b5b43c79
+EntropyPredictionResistanceA.8 = 62f1fd342ca693edf3685fdd3fccfa495c4c6f63626b08a398041d4152078158
+EntropyPredictionResistanceB.8 = 6375e6161c08024638c72dbee8c45cf3c5fe85bdf83e0c92248208eeb313de6a
+Output.8 = ec797c4168002ce79a15eb33568f6dd1a20ec14a53d92fc83303becba121ac29046ab34cfcaac6743733fcdc1846c340a7085da51a52462d96adb14de4fd8cd35be139b8d7fe999a06d9ecf845b755c089ba995ac518f98935966dcf088725d15a661d8b12f0c241f6e1251ed933f7dcc525f666a40a356775c8b631e38cae1026e0bdbc16231ec2fce1d24daa59816eaf06d188669be1628ef397b549980612f820cc793172bdf7265f35a158d5399e009872f50d16980cf1c19f2444fb78b126549a1a16c072f7b82a58da68a8302de26f743bef7d67ec407953f3bbb775e888f0c705d2c53dd159b64152329b4ab7ef93e94c7cc6fb0ff65c313681d21729
+Entropy.9 = 6fa9adb7fdf9fbcac3125713cf178373b64bbda8383b7247d6dd54a87b27dfbe
+Nonce.9 = 4b724c5a862142a4ad694e82ea906bbe
+PersonalisationString.9 = e2e04964bef33f8f5b8bce3e1e340084bc5722da99afda61d592cd00b61268f3
+EntropyPredictionResistanceA.9 = 174821609e33d935de5f4ee2daebb70d2b9f7ae5dca5146b0766660fd7a8961b
+EntropyPredictionResistanceB.9 = d85e08a87bca7cf1a82a906c241b72455c0889245d4fa80f5f2d92a70734dd0b
+Output.9 = f7fa26d99e1145d44318abb4cd4776371958352ce1f89b0145367d3a3695923fbe45a49102a98ac217e61e669ec1e440876c85c11b78c68449284f4d2f9645ef248a717e57da8049b9d31659ae9f89493886f471aa9f2c67d29bc2b4a73ca922a5a50b775fe785dc3ca7dea5c9924eb51be5223a021395578a6da820e89a41c9725fb84cc174616e98b883b518f7452150d66d46a6f35b9a1d9ea15a5f6e4a45b688fee8c6eac0402ed6d95964aed28e8f694f6339794f18e1d2191975b37a5c61b0f79e10646ca9e5029fa3b259dc0b4f670ff5a22b9d2787de01e99e35943e8f5d48aa2f5caf230ff39133019d949072f5f08c6f03889d4063d4efc900e963
+Entropy.10 = f9bdd57d2fab4af1134ed665949f23f34c2cc81f2d341348007dac10344a31c5
+Nonce.10 = b1f73344bbafe9418438c41909e0c064
+PersonalisationString.10 = a565aaaeb126d9ff54cd2864112c460beec927777b9a749bc65fe75bc8e4fabb
+EntropyPredictionResistanceA.10 = 06791c849eacdc094e32d20bdebd8100b27dc1242e0146d7904f0b7a639e94b5
+EntropyPredictionResistanceB.10 = 608751d0caa6d831ba3f7dc17d8e491e0ad36dd9998d2031899bd111814b99b7
+Output.10 = 059e5f045f7be7f9f0b3bed9c6b12ce677e20e17445578b5329450d719b1415a33a01ba27e6de7423191a3747933ee537b7d28d0b1646ef36631b9a23fe0af853061250fc9e451262aebb42fadf9f48c85f10e010c840c3737a2f10e3dacb456a1d2186317c6999d0ba2c9620284073401a035a6b57e77f521a9a8cc07ad77822f8a2d01728b39089fc398ee03ea198e8eecfd7cb5004385e5d19193cb53a8fe3cdad1d2ff4442d4093a49090224711c3312f5b813c07b00b4cb01331e26d1e93252853b730db1e13d9c819e82c4ec5856f961e66b8b2c5eb2509d561c4d3b7c85f5419ece3dce472dddf76e87195c33a9fee693223178c2309da38f76b6a6da
+Entropy.11 = 218a45be4a818e7ae2d14a8bd20c8c8eebde98d679b2cffe43f785f05fa0f67a
+Nonce.11 = ac43ec60146e67d045872a2e00202bbd
+PersonalisationString.11 = 930c517aa0be45f1f2356f92c6b6c16560e88214f17341f4ba74afd5a792ba2c
+EntropyPredictionResistanceA.11 = c2c6786839634e5665723398700c0ed20ddef138f8a9e952f44b336658e59e39
+EntropyPredictionResistanceB.11 = 24913e09d0a75bbc701532b3cd3ec745b5061453e5c1f3519b0660bf76b118f4
+Output.11 = ccb556b56259389c687e5bec6b1404aa0de17566d427e917f022bf813fa469e86dcf943dd82fdd5991a9348846a1267e0e2e00cbc250d567e0c0b47892472c4a770ffbd44f2c67e78d1a605b86e6a9f3ccc81c912096eee8a040e13c3d0950abf8e45a9e89f738c83c19ccce85235d4c0118266d679f358d969df13d7504ea61c6913ea58ee66ae517234ab10cfda6c7e21c69360fa59c04ebc16ac69b2d506a7f013e9fd50aec13281a92e7af20099bb91a65bd762146f67c504c9d01eb34c903483b035e9456af837598e125863303cf6591019828423d52ffe004e7f4b63967e3673a2f0fcc8c9ce935e20614780475cc0dd0b765785fa9c63efd21334887
+Entropy.12 = 32bc3ec64892924ddf30695b5c4100fc613ccc5e63b785124a402fbad39aad9a
+Nonce.12 = 3e0e4fde5736630c2bba6b23d5c62a77
+PersonalisationString.12 = 3f438b52e4eb295afef5d7c2e74aa3ff34cd119a52e18892127eefdb1244c476
+EntropyPredictionResistanceA.12 = 3f146b50e389c0b2b8b8d2535147948a671b9f17ed0e85251b0e41401110b01a
+EntropyPredictionResistanceB.12 = eb94c05cd84def90a33d3c5dfbf0b70c416f8805c7fea74aeade15ff43e12dd5
+Output.12 = 4e059063a33c04db2c429c3b877dbd0944df1b55d64c26a3f316cd736adac96cd10218e1970f9b1369b6dc09cb326e5a275c49c24683dd3f39e6054d329b1fcc642ec340cd9ec85637f287f344f6fefbcf1cecfd6bc6f4217377f680e79256a58fbe9b6767af305d87ba3cf3f83acb4fbde0688aa79fda42a7f31b9d1350bfc3c21b9ed9cd7d0d69af6c7583b761b90c57358c6b53bed798fa70e1c8c0011153cc2f47665350e7a68f308a41b0d0f5222f87bedbe5f758cdf658fb2f96940407c1d9826d98ac95d43cfe40ff876c14d3df6821e469d47cd2bcefb9e88569574719e36b93f553613962ee059d39a3ec9149aa4ca8409dd61068b19799e9796041
+Entropy.13 = 114ef439e110fbc9560ca52ed4a3ad7983c8f269cc7ef74d69695099b3e00187
+Nonce.13 = 3cc1bc30ccf3802659d4d2dffbe890bb
+PersonalisationString.13 = 6017d518d67447340cca83824980e6b26a1b297f940aad9e3c2345fe114c8d4b
+EntropyPredictionResistanceA.13 = d4135df4ed76bb5c57633e7b4d8bb416e058d3853645c559064717139efec626
+EntropyPredictionResistanceB.13 = 9a57268326dbe698f0a5f1a041059dbab89ccd63874e2ccf4cdce39cef122f8a
+Output.13 = d4d22f8c4bf40959d2377ac247c621ff2290a9f0f104335ac097086e5c7cdc87c7c44f35d118c8e24fb0d0b65800c3e32feda185785b83dc71e61e0b7f8f549236f223e3e1b931657d88cbc58b3fb22c59613135bc1785b56a465ac5c431e713b1c8ccdeb8e399d7ca63db679834c302909e6b2107d976f441a476c500ccb9c4b4cbc30573884bebdf10cc11b8e10a2f7a40566c954bfd7cd208fe4563c3135f7735bec987b917356d200417f84373e5c40b8ffd941cc4564ff58e82abe9b94caed09557484a18a6d6056de2c556638e42dc6e3e2912caace7f708f034dfa8f2ddbcb88160eacd123ace43bd4e6839bcb07c98a4a5af4a7b65e5300c226c1afb
+Entropy.14 = 62e7a4082a45602764617845d60ad9b57dec71bfc1969dd6d1f5cb25953b7c6d
+Nonce.14 = 91a68c234f5e4b4188637f3ccf025ff4
+PersonalisationString.14 = 7eee6f4fcde28c8f57947d04c87687c5006f5f4bc3d3adf01f17ebbe937ae54a
+EntropyPredictionResistanceA.14 = e1c56156fe43e3e1ed238708eee97eb0f317c0dc5def2b9abad2e08f478abdce
+EntropyPredictionResistanceB.14 = 60abceaa71be5ef8f151cc3edf23576e388a79e6e53ac4c31e5fd82ab5076ad3
+Output.14 = dab2ff754b8c80410ea160dc898545baa29be1b3130883866710d9265d9b6c8fe3750bdd5873c8c8a84ef0bdf665181f74ffb55310726cf5ede084251283f52199fc0db66fe4157fb666510e2ea645f83d982dc47f77273d6f1cb662c36eed7c78583441caa1f86ea58d82afacddf881254ef8baf10eefeadc50a7e689365ea78d50e7f42f279fd0b1294c69fbe9196ff772d10717dd3c6e78e7e128800e592be424c4aaccaf85f3d877829dc5d4d10cce08ebb82947d8b905991dce5e0e8a0b483f5201e739cb9280d946bf7d01529ba2551aacefdb6ba330a9f62c5bc75a51037bdf0b02616396b44dca8e3aa8529259ffeac989869240d112194776139e85
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 4c4cf0f8d3a82cc3ff87d14dfc39bf25005854a1d2457fd288a5bf8202e30abb
+Nonce.0 = 42c8988cc32a860e7551f76690248b8a
+PersonalisationString.0 = 7271adaa5c5eaf3a25b0fe972b5d2d754178faf63047bcc0e0600ca94c240117
+AdditionalInputA.0 = 09675687d8dca39538ff86eeb2a2364fa130abb6c82a62b10812c31778e3376c
+EntropyPredictionResistanceA.0 = 1f2b80a1a9cfbcdc8bd7ffe31a2171f20093ac32eb9f3c1f76caf3a2198495ec
+AdditionalInputB.0 = 0d5a763476c59813858c688c392b23b91a367c41b092c4866c0e8037fa2555b6
+EntropyPredictionResistanceB.0 = 2aa8a447d206941e334673341140998d613c317b69d9193f30cdb43c681ca940
+Output.0 = 3f56ddc51508778fa057fcbe2c88a9036e7d9c3f5b4c72a4a3b823ba6101ebaa81e287df92d6d1445ad90d54a7add306bd34e19a682061ec71c5605d858515df0b9e923a19a290759800297ca27f43d0689a329e070c16e91aadb1f4ceca5420a5aba6bf080ff8f74cd1dd099490c66acd65b41429627b8ffafd0f6a62ec60328d6c7ebe2441955361a809336afabff6dc2a37cce80166d37607e04ceda37f2ba86866820db4d1518a75449ca0a9f9182ae7329fb1016e5ac923516242694d572849397708b6fca1d0d7ebb7bb1f2d5a2ed3d7824161a7d4ac473bda2660fc07e0de864421ddee52162d3a1088b5739e3ba3e7e4b8a0f16b0f619f157190d525
+Entropy.1 = a2a101455538467b307f92a2439120281a158004e8229b846b34e2dc9c42aa63
+Nonce.1 = 147658df8a042b20dcacd91acad52e95
+PersonalisationString.1 = 47f1b300b87aa0e0b2bda1036237970be1892620b5b9a5561cc60616d9b091cb
+AdditionalInputA.1 = 74a2e37a6b5545a068ef5cd572cff1611e0ad2364dbfd990e7df7c519d9e88ca
+EntropyPredictionResistanceA.1 = 2a7d1f9d6aa5b430aebb7f4a871d7378589c9280bba7ed053aeb1d3142bdb28b
+AdditionalInputB.1 = 1a06abcba4a87a70b9a12196cb3b1287dec020ef4d5d96d93e801304c53e009d
+EntropyPredictionResistanceB.1 = ed03c35dbcdae6e99b63175a9d1a03c0fb01d66eb26efd944177bb7b4332089a
+Output.1 = 68e53f995a5259db651679bfb453fcaa81dbfd98ac92767c9246af5b540f87b6113fdb0d9c78a00532181df140125d0aeefd9e46153abe52222292bb838a4eaee4a9915fbdac18ad9d8efe943b459a7605ff6fcecc6157df910b4c1c067ea2031a64dde8d8693f0664ae211bb6e51d86247ad0ee38c37a2626e8c3bc864e5504cfc2eabf5bd22afabf33f21e30fa15059848a4af9276b94ad043f7569d8e1c7d72c91260a1f48069243fd4ed5aaf7d087da54e190b3042f9f492c06ea55206c7c84000336df2a29fe9c643fbaa3d9afc5c2260c81da6c53eda4ea529f2d8eb1b301a2489b47155419f7263344f0519644b2d8fdc9bc38f6fa7fbe623ffc245fe
+Entropy.2 = f7d00b571f2185b1696549d90b6e40d9b7526649a20f120260d75472f7518331
+Nonce.2 = d17d5ba589b2bab2afd2ba80b5d01ad6
+PersonalisationString.2 = fd7bb5b1598b250dfa743685e8769ff725bde49f93b1c81d7637d1f1a45a0028
+AdditionalInputA.2 = 9c4490d27bc6eb9f3b7b3f938a8810c68fd0d32cf02a71b0e09f93c62c6d4ca9
+EntropyPredictionResistanceA.2 = 6a007f1abcaafa4e95f9a53b341067cc5481b5229c098d0676f4a10918c95e36
+AdditionalInputB.2 = 8a8b8937a2fe2543fbbe4f4c98502eb6777599345001edae80abee042f9b931e
+EntropyPredictionResistanceB.2 = 93afecb7142f1cea4b5d2ae5fa4f4664bc3915d65e0d6465133054f85bfe2338
+Output.2 = 4adf7b760820bf581cef0615235936a644616c2996c7ccf0e2aae2b318927a3ae69c3fdb4cae75a39343f73625995c92ee1f70901c8fc9001863855174eb0760b5c73d71c120dc62b136be75a24e9f3702e5d96b992a8307a7e7bbf3e709b22c70ddbabd4de516ce9de2a0682bf4bb06ea2097c6d9580d987230cb018d9c48a5dd638d9b065e76e7eafbd2df5a40e25e4fe29c2cd0f4b5d4c6b16e45d2748be9ca1af6722ee3f1cf1d5b2ca1ef26fee0bf0c852d6c5c6af0d82430c9a16f4021f25c282af0f92a2ce364ea6e10edc9b79766f182d018e8c9d426cb640f1b82f92381ce788eba3c399f077ea6a90c1670e63ace2b3375e3c81c233843f4ea6e2b
+Entropy.3 = 37d960689e35bcd2c22fb152d593b2cb20f4e6fd90ff9a666f5bc51099750e9c
+Nonce.3 = e66326082a5b39aefe2ab51ec574c4dd
+PersonalisationString.3 = 0caa40fa0568fe38633588386be12e453fb466aec95eeb7a026baa367053bd92
+AdditionalInputA.3 = e9b97cfd6ec37fa3e35289886fb84d071a16789a30e99fa3f0fab1eb7c222d7b
+EntropyPredictionResistanceA.3 = fade81c5d2a4862b736dcf2c9e9c940edecdefb9b43bf494ea56f9b123031dce
+AdditionalInputB.3 = eea7172d0de4e930342bfe8e6677e366f9bd12a3fd6e6bef17228eb4acb5ca83
+EntropyPredictionResistanceB.3 = 9c9af19e22a157098f21fa6416ab2b1fc3143d5027862d8722497085a56c4673
+Output.3 = a509428f09686ffaffc9a91da6b8c2f91f20d3208056b30b7567a9be6c63854fea333d7b7cd1ee1aad87d90de71b4bfa069d26bc918d6d1befa26b08fb45193b8cefc26b44d8d41de4ec71b31354f9f964caa2c431cb96645ebbd47adcfd6ef68d046d0f3c9d79513a522198db7aaec096d0b3507f3d868866a4a986ac368fe889e45d2c4181563b992fcdb92465e74ac9b2fceb236e134985e0f3558d203142cad2a0b0267d8b5e589718b3d92325bf36d728d4da0eeed2fe86fc2430f3edb4bb901d8e34c5609c2a035a9a6e2e75349852e8a73a96c33a53fb5b3ace770279530ec6f8be895eda45119259007d307b4032227ecbe23da669fdd5e643aed0bd
+Entropy.4 = 913e12f8ec4032dcc857bd23baaa23a712c8d6b4c0052e77612dd41ae042cdce
+Nonce.4 = 28a947d9ef7f0f3a08e1afe318cccff2
+PersonalisationString.4 = 2fe41192e7da5fd72a386c695bcc90bce70e835b62e6da1ddc65a1a0844f39ea
+AdditionalInputA.4 = 3a82067cbe5b6c99fd85a41eef92b8190ad4f00471a19d949ef0432fa9475370
+EntropyPredictionResistanceA.4 = 7727b21507f00599d3362cd3cdd6e60c6e718b0e7e7a98a4827658cc2158ec50
+AdditionalInputB.4 = 846aba9a4313248b7d96a50983763350ddd777312721944fa643336e83dc3a7e
+EntropyPredictionResistanceB.4 = ed41c5fe88d500b67e0b18bc076f4392f18e9421afbc7357bd60deadad234120
+Output.4 = 30ab8093f8e79d635cfaeee862a6c854099d2bcce89361e33dec67ff3cb42391ac9ceaa429f940f07336a204bdda2a751eafb44b6db004dcaa80d2ff401c61cfb6f722de43cc7ca1e896b592b168724ef5413545d5b0b312ed1fb11817f7f97b9b48efc8a4df920e768a51c580fb4d3746f68dc2a0e6517768eb90f0ba019679f15b431f50bdc06c15b829c6c5f0ae54001d775ac211e60a0ef78ea726f132af9ca797cc8084486422b012371e1c9afd5b49ba6c6ba104a74f3b7191f3f917d6c8250209ee37bf1bd52fcdb9f2369c7157a4598a9bc8436be9335a865f11ad25a99ea72c39efe5325df7a40dd5ade2b371641466ca21c26d0d0c49cdcb70202b
+Entropy.5 = e81c1fff6f88a1188301bcade109805f44213800f5f2e215e437323c7b9bb35d
+Nonce.5 = 98d4a58ee5686dec300c03542b723b8a
+PersonalisationString.5 = 1054d3116f1544195a5c604b57c7ff22361adeb2eec73ff87cbf182127c4d00f
+AdditionalInputA.5 = e578927ce4a62a77bc3550605221fc60baef7f79483693e979411c7a45d030fd
+EntropyPredictionResistanceA.5 = a088c181370ca72de3854eb51424d030dcba4d448758378efe27bd95e4085c49
+AdditionalInputB.5 = 577123a89486b5e8a5322333d6b1e122f80e10cf949352d8e5402932c5e10bf0
+EntropyPredictionResistanceB.5 = 19e0f5eaa2a4926da07f9abb8793792a5825ae05f5394d810df6a0d8e96a7ea8
+Output.5 = 989bc15f1b2231f3ac41672020d56e61fa5d601e2a8d3e3c0ac20092af60b467ed1fa8113fbde56e00ff89a0028a3654c0078fabaebe03615abf1727e11d505377901440ee2e8dec000d43dd1622c49ac778323de9bacf54c9e8780799a02fdffc75b8ee1436946e1b06fb77c0093f0a97a834fd09ef76fdae456970b8c1213dc11432311d6ea5df45a3f327271166ae0c358a2e994c2d40a2a52931d3d8ab45bfa34d6d204b317d8150b3172183522651e68815a7379777e52836fe6401057fb67e1dbb30c6a4a48a5f3c587e9f1f84f4f00ec4faed2c631029d3c84f212d12a79ee51ef8f5d50bd1ec6166b7c24fdb7659a47cc9b9731efec2eba09af0761d
+Entropy.6 = 6719eeb3b279f721e780fc56133fc9aa9b2bb5e7d9ff481e1cd736c2aba2bb15
+Nonce.6 = aa0647b00e41da813b54d9e25c0c304a
+PersonalisationString.6 = b2efecc6103a99120911e10667b12bdb7a47418ce1f88e068c7d646101d65ae8
+AdditionalInputA.6 = 1e91732da5a082903816802413e2e5ebe9796fdb7e6f80d9751aa7237cd8c549
+EntropyPredictionResistanceA.6 = 88f17df4b316fd1928fa0ce53536aabefa9a826c4eeae5e8e4c82951af390bf6
+AdditionalInputB.6 = 618241c2c5f303f25e0cd52d2223969cb7202ff7bbd2f7c17ec7073df42572da
+EntropyPredictionResistanceB.6 = 315162e5c598f957121587d18519c3144216ebe4bc4922583dcdf780b895feed
+Output.6 = 612de4f9e3c22716e0c3bf184180e3bb488a320fb55c062dc1e4080322f334ffbc6f7a1db8727b0f284d8223e103a8a3eb97d59b29410695e25e46f2d1fd9115107ef1200380321d97cbdc9ce14c989873d4fbf8b60f50def7f9f2041566fdb1ef6dcb68aa8aeb6f4ac19c58ec01c8d9ec170760b61a45e9540fee46a43eada17477d4c1ec35637149706e2a5766b1ed847d966610a7ca1ac060a257cb7f4d93ee9fa3b5625f8990c1af30029c354aaa2b7d389be7d6fc1164d4d6748ef2798c9b6e6ada6b83d052b3b2d582881934c7a4ad0ac97332ec97fc9b07fa519ed1e519fcb0de4e0e4da61b7920b33d86987ab2a07aeb8b89bc5438a1001014f5cd21
+Entropy.7 = 6132144bde0dbfddcf975e0ff8496a93d200e75b1766959d5ca288a247438cd3
+Nonce.7 = 72f5f8aadd40b9c46b0a14d97aff7aca
+PersonalisationString.7 = 4170d355024c82f6615d1e03ad57a95e723f8e602ff2e591abcf92233581d238
+AdditionalInputA.7 = 4fe16b0aac4a6d9f06f30088d10ffea89ae70188f7b5ed8bbf4ed753038b4a38
+EntropyPredictionResistanceA.7 = e809287954b158fe2b2138029620635bfdf3e5f39f9edb72e3831e027275fb66
+AdditionalInputB.7 = f7f998c6db8db7bb893a4c303d80324d0f25ecfa3eb5954489296b0d2e6a0f96
+EntropyPredictionResistanceB.7 = e2994709b8245d39d764acf18fede940d07cebce789d732f9f97e4f7e0707a1f
+Output.7 = d014f4fffae8317d176f59cd5d5fb0a831c3b6dd9378990570f130a1ee6f9a98651afde7a7828a39a97afe16b3906022acd6af1a2199acb9c1c2554fc6508eb40282493ac14614fd9d6f676680929456aa632749e509af91c3e1185aa3689f507ae7f1933846192e427075094f70d8ad4f0b0bf629861a111297f2898cfd9fe4f5948d585bb4108a373c9635d6492982f1718ab5fd0a0e651f93a4decbb0509dfbb03845825e1d73932589dd47ae652bac9151bac78c1cad9e350153461a2a82887297f828da88aafb1658266109db573a887aa64b1d5757b1e962b66c72e93656ceda516c3d08d58cf6ef5f346dd8c2261e800de1991e2b6d1b85813ca19eb8
+Entropy.8 = 637dd72ff2753d750c91acdebcf7af019da664fec27c60f91da120c39b3450b3
+Nonce.8 = d88128d49d46ffd44727529550a015cf
+PersonalisationString.8 = dff554333bb4690de76feeeb634047503da4a96257235a4c48c481e7652b2ad5
+AdditionalInputA.8 = fa9994cc884f07a64bbced401bb06ad15f3bc24eefe86b1e1e594cedd9ea9671
+EntropyPredictionResistanceA.8 = 94306d1a9b246e48ee6af557e611939bd18be8747156c884d9f7ca21628fcf93
+AdditionalInputB.8 = 14f0d57372f45f8cd4225d0315de23083455e6a555271efc7cda785fc1759cc1
+EntropyPredictionResistanceB.8 = 3f83092823c13a8a3ec1bf505e13c793e2a300422b629ade803d2ec088fd6b14
+Output.8 = a0e1819ba8461b1011fee54499cf6fec43481d198e398abd60eab3799db5dee6d17b003cd715b76538a0a45affc1929cb94d43427313466050ac4edda3fb19f7d066586f0c55e31a31b84867e4a3a595c552782e153832a5ac7a6b0acb8bb4da0c666629c12c627fb1c8d79e42042a2bb32072a1c256e3233be577663724df49430d6908dcf1c472bdad00b69a2dbc67a668935a938214ed4bfe1163179d8c5652bb1ba9689dfba4acae815a31feba8bfd899bbae9ddbcd58007a64dc7292abbef3344c7a10b5e386fcc4539041189996a688bfd14406d1e8d8f2d8129b14d282271662b2fe78fce1ec269c342352ddc6e75228a9c5244eb5915c11a21b3a06b
+Entropy.9 = 555ace15f4e4fb4a89583e55a7257833e9e3e59869e8a88b038010af4b982a46
+Nonce.9 = a19122faa8ff0790473712fc8204b70c
+PersonalisationString.9 = 4dedb83df501f57b5cee5e6f8694f8cbdc8bf4b6aca7325ca8706c51350b9a74
+AdditionalInputA.9 = 69e540ac4b3f55c9d9d2b8a100fa51d2861ce91799fdd2df0f1d8b92dbfa4434
+EntropyPredictionResistanceA.9 = fe321e81f40c0c71897af3ffc0462f554e13feceaef6c12215ab24e7dca83617
+AdditionalInputB.9 = 54d899b0c9c77adac250a34eab8739a9a758742bdb7c20103ee7fd84d31e957f
+EntropyPredictionResistanceB.9 = a3fe73df81b0ba3737bffed13d3c8f5a9ce20c719b99a2599653108abd3ee809
+Output.9 = 054808dac1fa50db521e352f48a6ab0a6cf5c03a63f3ff3f293ad4ae48666aeb77a8ade1b88ff46aa4870a7362e35df6cf0c76036182246b457e52b529f263f20e0025b9bd1f2ebf90d12c2c8cfff69f351bea6314376570e3b798935d6beaf6f63d8ad9276eb1f259670333f4d5c4b058ad27388aa5fbad8b3e4c600fb6a6efbbae8e6ccb23e32e76cd4d90418e9f3f31d09e9c7166291a69f5627cc9cc75cc3a0abec5dae9c70acdfe0f516abd07f97168543c027de47ebc729fd82b4ca3a511d60319dfb89baf3766dd46a2fd7edc10b89c02a4be94010a5e541735cb96cf6adb5e57876ef9182d8ffb187445221e5a5534588662156e2c3c32c9fcbedaa4
+Entropy.10 = 1cfd94fd81afe41d42e618c55b4d4ba822c8ffc16306225a3d6aee6f47afc61a
+Nonce.10 = 823c3b3bdd0988dec9584bc2bca91188
+PersonalisationString.10 = 39ed4dd7e543eb4725d2c90a44233b59e34e562dcac558a4a770322f96c82125
+AdditionalInputA.10 = b9c2ac74c52b892452f06094374dff1eee138e5212d445822df4f4e21f85b174
+EntropyPredictionResistanceA.10 = 85f973a415e1fa40db6014d0e1df7574fc1f34c5339f587539acc47eab5621fd
+AdditionalInputB.10 = c1e7dc73dbd496f30b673173e3c7bc7cc853036af546407a1511d84a5f6c1339
+EntropyPredictionResistanceB.10 = fa9a26e6adad107a1746a27ff910d104775bbdcdcc8ef740a809f22c909c2608
+Output.10 = 90edc7d02b72052bf9a359965986865bc20b6e1b2fec08923073bf4870096f39e5e8faaae7d8b0334bc96372a48e9be2c4a503c133bc5e0805e520da41cc59eab38ae55eb4cd5766cd6a5ba6dd0a747b40129644284e27d961e0b32f55889959963b9dd052bb3238b68adf5ebe132a7c91e5868b3026b9aa13ed3a454e48cb8ac0d901180c7475eb81687c6cbcfbb9a2e1ae99c0b386023b5dafba4374b127f2e3efe2d8795c7f7b1f10a6bb5e9e3ab40723fe49d6172ed8debadf7f1dea5a44164c99298e09df2df0363c7c4a71c8f3b74dc881fc7d8b565bf47bc3da974c927f5eb9c056bf4bee77a74bf5f0c638600b738f626c1e8396fecf735536cb031c
+Entropy.11 = 87f06a3704ed77fbc29f46e40ddf9e8ea85fa3c17cf54a4318265a4cee7b5d7a
+Nonce.11 = 692cd642881da3a527fb319167cb8fb2
+PersonalisationString.11 = c4bb270384a3c14f46e6af12e43c8465d427e43a09e1b8fbeb56a68dd3629cc0
+AdditionalInputA.11 = 95d1e0e707aeb0ad361a3be1d007a578d618e76ceafe39fcb937eae5aa910fc0
+EntropyPredictionResistanceA.11 = 6506fd3337c57218cf3d96a150673613b425023f8a9708f4283fa654878cb621
+AdditionalInputB.11 = 087c11bd18befef9e4d5ced70b93de0dd34489162dfe2f65f747230f2bbd574a
+EntropyPredictionResistanceB.11 = eddef4ec960578a6b5c642370cbaa4b35a398bcb1a96f3b59d66b525cccd0dae
+Output.11 = 3caab7f7ca5b6e4dba91d1c72b730663389b493e064ff08217790261859c6fc8fa28a8ec57d7da1af2a949ea83e1d587ee2f79ee6e3c3194612d86a7648830adff6dbb230e7f42b64fac6a5dfd486cd93647d03427adcfd1ee475b91528ba3e9f5b260d31650da6bfef35b14119a487659bb20cd4a26dc6716f27bbbba1f2f8c7f0bcc8ea0a5824977b82fa16e0e472f002112553f7c181412ccaef7f31df8909edca4b48d8cad8ded24a599ae27ffd778a024f5bbf405bfb7b9af2de9c04bba79c86144702daf34865d79b222f1a1a49008ea299e068a7a950ec523d815cbdc722bdcd9a159e662d754c682a53456d61c643c935a2290e68a7301b9d71755c9
+Entropy.12 = a4c1f8ad3a765aa9f35d9a0fffc16f0c0dd487764533cbe6370cfb8278b367d0
+Nonce.12 = 3c4ece26561e8c5c67e95daf8ecc5b76
+PersonalisationString.12 = 6bc298103568d3f974640bcc54343e17d1bb7c2c96abf381bb03ff6459cc646a
+AdditionalInputA.12 = 6657bd8bd510881efafd9e8054820f22936f79573c2e3f2f07dde17d270c27c3
+EntropyPredictionResistanceA.12 = c0b517212b2d4fcd13109c35bba5be0a9f83e89863a5164ce3c789f4705a8234
+AdditionalInputB.12 = de4449862527877fc7c41318477df7fded48b5c996afeabe8fc5652471fddec3
+EntropyPredictionResistanceB.12 = baae9093179fdf268a4cd21d2725dc8071a17bbc602b665c707ca97856c97e0d
+Output.12 = a4b6a4d39203ee50b3374689163ba8cea5c680f08ecfff00c4783d170f3915d0894c1de98bda92b29fde8875fdc7e8239c142f3ebee0677b8fe693c72dfd31a98a1f0bc186d8c657afc53b4f5904486fe18ab15405f474c6d9b33f0dd0f71101f01f15c82fe87edfef878505743fec7a197a3f6e7fb10596ba6c81400bd7a6f040e6a78560ae869eaea31e01d5543c1a7406e47b572228ea045aa88bf6b6111a673b1960af73f805c48933ee0fcbbf08ef55ceae310155ee27721ceacb291dac909c15c2977d4199ca41d6e31c50d94b0fc93398b3e2faa1cd1ef74287f2226d573be87a157d6665c652ebaf66082ed8c8cead72483ae8d58ea3c3989b707c06
+Entropy.13 = d8b0a526ef96e35bd3a80e7325d118bce49f034a283c2e7266b2af426d7708ed
+Nonce.13 = 570aa35a84faae6611d739a607801228
+PersonalisationString.13 = efdbf20a95fa3f8e7227fabbaed330814bb4ff12d593d7fb28bc8319237774f8
+AdditionalInputA.13 = 424395bce062ef781d7051236eb6b776520227ab621bd496aa2aa3ef4ebce5fd
+EntropyPredictionResistanceA.13 = af69de5def4f1963f3a7950a641384273ebcb203a5855bfff59363c96c1efda2
+AdditionalInputB.13 = c7eacd76673c8a4eac8292c81cf72a922b17b3f23b4c9a121a496e0d3ac706c6
+EntropyPredictionResistanceB.13 = 148a7ac951c13736a3d22effd4502fb653a38bc5f4df4d6c0cebebc43730f2c5
+Output.13 = 13d66ca9fa03d4d72ca8f6477243e8558e81d7cf4a69c5f02d387e5266c39148fdf5c5baa41e427513ca321035bb5925a50cf123c2afe0705687490e41c490e47951e9dd5d950b1c59ce64888d55f374f31e13bd5b16d063405b0eb48ed8f52da77e9514bc02b7f11792cf84f82248dd664fb55c82856f33991986f2dc145206fe231380922b6e5fd0695f5e5b8a7f4352c1d0e1af542cd96a595d43ef2537b0c46f18f8227ed01aea635d0a04ef08e71859dbeb939df492e39daff23a2c5f55b3a3c86e4eb8fd9448befad38533f3d7bf609f57ae2604fd0d19804b556a1a27acfd0a128d38ef109e2aa33f430e33266a71ad596e7dd8735fca9004908dbb07
+Entropy.14 = bd3a1dde089a749ce1b2a9462a08c49c7cd2b27e5f27c93b54a6e4018a4affec
+Nonce.14 = 371493c62f669567010263c35d051fc3
+PersonalisationString.14 = 946555afcddf329b4c9a81cdbfb4550a601db669b3809c99a9c4fd9f27e7a8d4
+AdditionalInputA.14 = 78ec3c19f5fa58e9d294565b078918f913b7da4af5627ed9004cb107951fc366
+EntropyPredictionResistanceA.14 = fb5592f73744ca8b2b319af9d6b61a99b11dbf8a905688f2a8e9abeebd28d185
+AdditionalInputB.14 = e05d841e173a350c75ad4510bb65814df96871b4b10d63617af99cf48b1b4f3e
+EntropyPredictionResistanceB.14 = cf0c2901ee111217b7eb7902f973eb406e0191ff59b424a6cea775b1a5b5f109
+Output.14 = 2b02a43536771c77e5907c249178d79afce56ac46188fe85821d7ad1fca29a95f6201eef6082b406ddb6d46c8588c119ce08333b67bad3df8d90776c52baddb0bb3a416ce2e6e887c43ade7405d48c6f5a6d1e3cebc20b5b749b5525e502c3a095e72db8c3a5bcfd76069503548d77bcba600971e90a8f61e386c945fb0858db60fee3829fc86e940d999d637bf154e2ef861a58b363c01f9cd726f88f55346204bf42e22682df8cce301b6312abc2eb9bbd7046601431c51a578c87b573b8bdab107796e2fceeeeb7e63f8ae5054ad02eae8dcbff47766253c827fabe3e55b1ed3bd12310fcd35ba3acba3e84d5755398a5797a17170903755e8195fda64367
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 833040f0eb4ea4eb67507d6ede705a0e2a264cd4da9d7e60919031048193f6d9
+Nonce.0 = 1993e1a349bab0531c1ff823c5e534b1
+EntropyPredictionResistanceA.0 = 1fb12056d24abe8601062287e5de9285fe4cd099992d4bac972526a745a8c22d
+EntropyPredictionResistanceB.0 = 6e46e3a3d67360bb1b4933a1d996e326c5ac3461b3962e10f1d0c38264c98955
+Output.0 = 4b81b724c19c8c33b03489268bf32c99c64308dac9feaa1dd7df7f9aaa0b7848aaa608c9255c380cc9706aceecf728e19302c0a5df0c53bfba2d47524640c5f77a269099eccb33f6aee2e465714abc255604900a5993c7763e7e911af343bad39bb7f6d754077358626b00046510cf2e54e3c1bb649c6abbdbb661a42c710e035753ce08ceec239c062a3467b5534a51ed8f429fb32b956c7a47b6ae0fdf0278eb94b28a6bfc60723c05a4866f42a2e65c83552ccdab028497af09161efc0b21caa70a5d872b2b5bca03a4b3ec053fc0a2cb9459a9de6a397c2b332e9a84984b5a149b19cd551bc1c120b9678c49ddf0bcf69549e16340d5a933e5fd07bf9f86
+Entropy.1 = 9eebbb32e6db4369c36fba2dfbac0fc3304e4e5c4fe1aa27848592137c40105e
+Nonce.1 = e58a32229c7149118d9d019c8e500c77
+EntropyPredictionResistanceA.1 = a65457f202a8ab0d0eb4c421fea1d3e80c678e3e8ae8b35bfdac42e7d2ac01fe
+EntropyPredictionResistanceB.1 = 8cf210766d6c0fa02c003ebe1039a3b76a45fd9d8c188a85bd4af2e51760c67f
+Output.1 = 48f995948b616609a723c315e53b9c2b2cf3e37a210b90027a49f7f9fadf657d8d03402210295bc58326ba271a953955a67a72f8846581fa5b9d557f5e32ad5be897c03e7ced6adb0b573ffc1aba2addc11153083c086f22bfbf9fb45ce602909c9aadaf2f0343aea3eaa87e82e30a99bdd2158e1e1ea595549087d19830993effb7c7c58ee748851885550c7298499429aca5043ffa3172a2349161186e1fbb4091ba01ca9e4abe9d4867c2c12609ec40cccabe27bb3555fd01961b5c6ea8988ff3654a38475981b2a5143833a160620dd6b74230d570140af307d0172f1edc456bd77407c0d8f1da9d121c94a6e21ac6d249d8cee04623f35c4e10a6be3d67
+Entropy.2 = 723141ac50323dd7d0b251cc251fbc84fef3ba450c3ee4d48bebdadecb963d76
+Nonce.2 = 7b5bbf3e87f1289258c4d8888cabf172
+EntropyPredictionResistanceA.2 = 6ca2e7f31d39ce1003560069cf838243d7c2f1a9bf5d7001cd5af831c8015bb8
+EntropyPredictionResistanceB.2 = bbba160116de352816280504ac14a3c49613fee4381efee6e244b7d95f3794fe
+Output.2 = 6198e89dd4bac355ca669f3f0267e641912c7398be5424aa5426971417d0a4f987eac89a96e5a12f44dcd5a576592f0f77b2899c98c9d2504e89012ac50ef2ad998fc27eaf2254cc2102fef144b4b909d623f6b078c0954a05e83c21c70d846d0b10536761682307da2561016303c0142be953bd8018752a5afaa3bc22a9a0f4f87ce84573ac823c2f40e6caff73f5e8e5e313c91465054c23d5c9802b948141281a8c48fc84dcdc2dfdf6defb2e14165be8331a75f829c30a53e91ce04869385e2b4f1b6c7e91de7032737ebbbaab76b0fa076d7a09ac9df82396230d66a25a78f06e33482a04b0b3f72aef9173894a37a20afdaf1429dfda4135fdcb7420fc
+Entropy.3 = 2e8dc031c3e1763d2a17561c167b570236d5b90307b98dec5ce1cde092d8a342
+Nonce.3 = c9040a20e4a0f4c4d663fd72c1d93edb
+EntropyPredictionResistanceA.3 = 3117402c26b0f955aa1fe0fca924539120b31bab4ea75ab5383546ef7fac7b40
+EntropyPredictionResistanceB.3 = 838a8456836b78c66a058820b029cec7d6cdf993555650967d215b41fb7336db
+Output.3 = 3bb917fe8b5d078f875abab0d7722afc5074334f2b0d7dbfbe986558fc033cb048392f63e9c44ebc36743cf210f1e6cded36e407b863f77fc73008b586b45acfa1a62165855df8f2a0f5f6d9a5d0198f8e12b195eb44986ca6dcc9668d2455f7f002a1f015a1446429f834b23bdeaaf590fb16d11aa3c3838faf9173419fc2a31834b28112cf70c790abca8abdabd8409814b1d2fb477a07412365780eab5186b27f723e49c989cc83468ac73f2b5cf2d883ed897f24b37b69bd091557537839ac9b1be7b6916e24b99cce76c6e235229fccfb4e1791fed77579bbb6f3e524f93f5349bcee9c2df02d228e67ce7c6dbaca44d260e98c9b9646fe948cf78a4377
+Entropy.4 = b81975fcfd0d7497afeb24eebd8285ec8023a16f460ca6031de11b4ac2ab528c
+Nonce.4 = 3b1098a07048250d08d07e02bd1f4d27
+EntropyPredictionResistanceA.4 = ce31cfbe796d92cdfc94d4e61ce0f3bf98c6e19a8a311d0acbadf2906e315453
+EntropyPredictionResistanceB.4 = 01d01170899171dbbc915daf24f70303c369a81981d920352c64a6deca4a2b28
+Output.4 = 4fc1737e9fdb02f1d611db178de4abf347806c12b1ded472d72cb3fdfce66d362c3531a3f2c305f42c40c451da180f9a7e5bd97a9c0f971af6a804c480238c74c3b342a53480d3e4843db1da9f874b1a82b9eef81a9cd0555acf2e58acc26ce80a7e867d7e84c81c5d4a6dc91946e2eee28f4f3008acbfac23dbbd1f9510dd9d067ec986f4bdb3161eaea93681861534856bf0b1ee78a05defe7c88d0c625c84d2b577c00bd160e67ee8aed5124a72daf5659fb777f086b99826bdc7ac6e011688dad9979be6efbd248467290eb599973036b5c72b1d332e0ca9d712208f85e4562a6b57a3674f4e74faeaa304cde2bd2dcd46d3fe38dcbfeb251021ca7c898b
+Entropy.5 = ce8eec8ffee0574a059062ce46ac97b987281c09672ee741309b171d1c508296
+Nonce.5 = 870fa282ce6d1bb875245fbbadd7ac47
+EntropyPredictionResistanceA.5 = 09f576caea25105a4efcb333fc4e4f4d44b2eadc4455ccccb16918927a345178
+EntropyPredictionResistanceB.5 = 759ced376794a9892ac71191a63ff1a045826ae6785456f6ea01caae606b8aa8
+Output.5 = 46237de6aa048d8b69f6d1ffc8fd1141343ab6fd3ec69a170432781345ac956bff9ccecb650a170ba7e8a781119860d9d12a36e7511e072d36f630e789c2ab59407e31f4e3f106faf1db5b387d7a62cc40cee6e6e13dba20733d09aca66e4c571fef01a685ee97b132552b3b810c5c86ad1adbbffe34512a610a027c8905a2a810600b3c3502946c9934749ac76e4a5041bda1df2e6fd745f1afd69448b62c676c148952a6af3ef997f9c3c3d2fe8724b628013a315639bbc098a87dea801ac4d601b69d71b6bcfbb598feceac6a4c3f3a7e5069bd18dbae16b1aa257c3a0c3d2c6494a9ade34321fb55c41b6d40ca686c57b6a2d2fa4017f31bc3510d1fb618
+Entropy.6 = b2297332ef52e31016403a5e17a89a75f78be907bc13b5cb0ffb59973f1fe255
+Nonce.6 = ec1cf72c12ad947c917e4c703c9de239
+EntropyPredictionResistanceA.6 = e95fa547539f16b6474265df76403ffd07646567cecb9569a4be5c04ea4a1781
+EntropyPredictionResistanceB.6 = b946e7a5e712c4b20fe59f00d96b4db1d017134b10a6f25512b71c6a968f2428
+Output.6 = 8e5f1fb0fdb383ebfdfe3ebd997a5b928f6b92392e0643a72f32f35fee8e0260c613d66cb2ed55d0d7bebf178f531835549d8326412851b147fff27d4361470fa65e98df631ef8eca0c6ae031c57b518882549778568aa7b0a4e970fad64d386436831b19ede53d43161da844d138a17cff289e04347acc2ee927ac0878eb7e8c7dbff76e859c2c09913a24b627ba8664d5da4bdd99416b94de3d9615ff16d98a639a9b3ef9d95f49514561d9d71b8b1d02c0d8bd668486ba4011aa0ea584d8c5d41f5fcd5d845afed88975e6fdc14d4626ab2bb47b957a0f292453c9c12e47c08ecbeea4ad3e286bd5fad71c4cda6469a510a2fc2cd5aea950c24796e201359
+Entropy.7 = 232961f98066fe584c23aaa070be91a2063cdcc7f6a6c2531abb068efd5ed69b
+Nonce.7 = 7c167f836c094b2fb59a0288490a5603
+EntropyPredictionResistanceA.7 = 4e9aab0e117c91d64f43c49066446239feb2ed4f8a54a045f0d4f2d864f125da
+EntropyPredictionResistanceB.7 = 88e8a1d6c3774dab38515a122798a67b3a0876d5c0e89a811ae4436fc2a7684c
+Output.7 = 64bf1c4f206477559cf71b229a4f9e37b2469a25cf57d163cf1360c08ee581d73e502d2ed15651635add219d40ff9faf6838125625911509ede040f71893c4076c5d198e8424b27540178ebcf3446e28f0ebacf12794195fea3b6f0fc8a0f480391fbad9877a35acbef4ce956a8f9803c7c561c6c2a9a853778d8d38c12227ea6b36bb6233406b65bbec4a2774c6e052c03b7f12c40e5626ab2ea69dd09badc49c6ea62dca95576d84501633402b0aaf6549be3e9c38daee6eb3c105ef63d9750b667f7386f392434b8a0d9560837eccf92e94e2ecee9aace376cd1e1e85c55972ef3e9d7c595ed46f50a3740a88fa827c3585dd260dcbaaca3da9bb1ca0e7d5
+Entropy.8 = b5fdd150dcd267427ab43834cb576af93e56b279c2a357ae3572b372a5400a9e
+Nonce.8 = 3688d1b131896eabdc92624be625fc4f
+EntropyPredictionResistanceA.8 = 2b0284892847741a7ce89855ed77218d3b755c9d3b5375486eb0bc982051ecae
+EntropyPredictionResistanceB.8 = 71bedb73c6c72b372fe95fccdac6092e4a592b1651b0b9a4e7a49cd67c074d10
+Output.8 = c57c44347efde3ed4e4dbf4a7b7194b048f3a4de9642b35110d7348dbca53df4fef205e53ab799971bb3347f761522add86bf773ba42e7fdfe67295ea5d36a1ba012dffeec685d05ae962eab35d96198d7f53d4fe42ba421e7d65d39c649993d8d81f0864b82b6dc45c88a5d304bc38f9fab252e2d9233850390735d0d6d94dd9b90c3f8d186b1cda7396e68bf36904ef591846fed0e253716f04f1ead01c4e6e21de6805326764d250c4aab5a4513e2306327ac2fcb7f79f7263fc312b42eb41b5dd375de1aad510f2f80b0aca41bfce68520ded4e109b3cf83332275ef97fa3fc017035beec46358b883de560681873a131bbd5c689cfa5afc095253408758
+Entropy.9 = dcfada7988150415cccb9990b0ababd43affb27e5713c313cdb690a005668109
+Nonce.9 = b0ad75cc299af7307e89d099d51a2c13
+EntropyPredictionResistanceA.9 = ee73b0e802e50706ad573630fd6410f5b797ed08abb75b18bed5bc18884b86ce
+EntropyPredictionResistanceB.9 = eadfefd6ddb008943950ff11f570add3d9203eb2cf7c56c02c42be2f5e2e0214
+Output.9 = 351a0debaee13102cdd31b854647e625a7a4b914d3192f79aaaf7705148f15deb6cd77b6868e37a96d70a7b394a310d4e989a47fafe258eeab77ff40a4073d16285029e2be8662601b8496d3fe07708e71696de375f190e05a0ddeff25d5174bd73f8b49a82bc4278674cdc90cd6c80ab4172dc5084583d15f986ceb61b11959a9b913562921ffefcbef47e39c081ceb9315db8591757e4a303b4b43aeb070ea9859d3d727740eddf9dab5c51e46bea78f54c245699eace7f07bec40763b6b5c3e3b9f0729c2beab89ca58f27c4b60ce6bb4c216abc285ac447c7ae9aa24496e5446b049ae96c9f00869e5e4df420655307f88095d359c63e463fbe343bd7031
+Entropy.10 = 0f65dd76245404738f50cea7184ab7b4edaefa0f40e5344176c8e9e5732a5f79
+Nonce.10 = e651b8fdaddd36416ac3f4f2c9cfeedd
+EntropyPredictionResistanceA.10 = ca0542b6cc37326add787ac65650d2dac26f57906bcd396dd31aee0326d44c1a
+EntropyPredictionResistanceB.10 = 3ddf8bd77e399687b1d27c72ec004ff309c630e8a9c9fdc4fb1dcda8c8fe68f5
+Output.10 = cc606dd9b62e7712e8a212dc1de0aad9ed62876a6571e615d52d3f4438e532035267241f5facefb707517de388a92a454842078eee754e06add3dabb37ff9ff00d7d9d3cb9c3979f6bb7e0a82d92869b3d182e21bbcbca32b20b39e1b6bd9150c00e87c88d8c324e83ad189ad83b6d333c09643c17e32f7bb1c5a19e1c7c87319e8adf85ed92a4736eee7c62c0022cba067289b528cfe795285d54389dba2ce0488449ed6d2624de608274781d60a6ef18bd2b69826e1662207c7517badaa99cbd0604d7e65b317ebed1865fa046528c3e85f17a4fb9348a668567b0e6573cc5914117e5ecebae77897b4586f1e783fcbbc436e303cf2b0c52808bf65a3d990b
+Entropy.11 = 73b70ead594484cfc2cd8cae48f746b25012b8b439e8b543a9b5fe9e8a4fc4a2
+Nonce.11 = b7e036038e95911bed960b29cb30dad8
+EntropyPredictionResistanceA.11 = fc14cb05abf40adf50df7ac42bc05cc43e0ef296a96b63edafe8b53fa8606753
+EntropyPredictionResistanceB.11 = c7159c38e80d15349656fed22c4860e7deecfbfbe215d8c99bc0a2f130c8d6cb
+Output.11 = d4db0c7c6bc54fb824910f84181277e263fcbe77e1753f449c840b5ec6df83595bf1d73f001d01dcf03d8071e65d4d5e0a19a1060f651026722b6001f49651e78b033ae2e51ac458c4570462621ede03e184d8fdbdcab0c5bda6fb9748c495ed0f38eef3c6c96d868fbe2c35c9cb86a73091f6a1fc0782900293f3c35283f9ff632ecd69cea050425981c657bd18070fcfa400714ce1317d0b939fb41b11b0843ef25fd482073e54cff59cdfd780082c254372b54a416749043220eba1d191e5ca00d13eb8e69ee6806b27795e7f87ee9767bf4b462cd06682ceab99e35c07296d318d9ce656d8f67762cdda5867f406c356b1fef325bf15b690a3dc52c770d3
+Entropy.12 = 6ae121731b8fd95f4b8d928e5a357fe01c0548bb799ca0a81955acf4d35c3720
+Nonce.12 = 60b564733fdbfc6a0407aad795853e39
+EntropyPredictionResistanceA.12 = e9b91041f75278cc94c6cde634abc019781f683acbf6f6adfd8e595c064ecacd
+EntropyPredictionResistanceB.12 = bc06bb29d91cd5cd29e89387c11d39007e0b54171a1e453e98e771faa14166b9
+Output.12 = df08b1e55e3ba77c3bcf09b7601e8e4160390cb3b11f2a4e7364a969fe0bf1e9654dc8503009881bd381fde075a838b00a7e81cfcaeefd99708794cfd3a1020caa55ba6df06e434228a753694a304afa0463e88d410676f7e1dbe595490e70124c85656b396c1868f7657573af54e1ddeeb3d0a079bfa174bfad4e7c9787f3f2de23cc3af1cb1aebc87e83481c52d2be57cf39512efaef55a15e1856df73b78c3dfb0f3d925b8bd920c07a77e53faf0d137236ceb2298d8688577b2c8f75d4747a309544f013199eab0fa7cb970c215ea9ff1171c13d82db9ff25f4cebcc25b1f8a69874e738c5c96f51ce7f889cda21c056e5405bef2972629143f2f74d1c12
+Entropy.13 = 1209885c3ec6973993c59dbdbcd2bcc03cd9c4c87a56e7dead1c00b88b4ce181
+Nonce.13 = 15bd176248f4020c696905044cdefcd8
+EntropyPredictionResistanceA.13 = 129d8cb1993ad6d6b548a77dd37b16daf53b7f9d7a0f0c7a332155d2dff5123b
+EntropyPredictionResistanceB.13 = 978884cc7a4041c4a32b7e22046c3614e5f382fe2494192a268592a3431c455b
+Output.13 = 9d6ca45b086079ecebd37042f34888094eab6d3bb2b250342f73f5d242df207516b0313c6bcbedad72573e530e33e58aea840f570e4240b2244bfce44f3f2e8994a32a188c91a9bcba2a5d21200a16e6e10fabc060eddcea9d1cb4b6daaf2f4d826b3c9483d9c9c364a915c250555242fbe5a5f2e335b5c1df5086e4df28ea81c03d43e2003ea75edd38cffc8328ddf9efab0da625b2763ce3d084e0010efc66fae5f97528e686d9bd299bc1849c218858989e4a52ca063acd73291326a9ea3652b66c7873359b71ca5c5932986b0ce3b4e481f815f8467a24d9bdd73cb27542b0ffd96daeaaa187215ec8ecb57f45b3b6b3b5f678158ff8fa64669f6b2ff27b
+Entropy.14 = e5b7bd170de98faed0632aaa40d99108649231bb851f949c765b9ff2613a7521
+Nonce.14 = 25672ba6ac9509ea4ee2585ddb84ae4e
+EntropyPredictionResistanceA.14 = 99fbac77bdc5950d2f50b4247f3f1bd830b8e7d6ee000dae642a51a0b14b9a3b
+EntropyPredictionResistanceB.14 = 43002da9a3d7f251be2c75f213a68caa402951444d9534caf3d2a6f95c0203a7
+Output.14 = 344dbc4a13abbb7296e06b4c9ffe0a68441f73bbf2e10f438d4bbd2f469241de34240430b9a835c33467f428582193327e9f0823dade8ba12020f95c2d1e513ba62f2850ae366a9724c6499e262ccb5533a0ad86e6bc2db3fbc263c27f468b6e3c783666c83b3a2b8dfb1f853af9a69b5140f495e7cbfd30845570da109a6ad58a4224373f202758f8074976ac38646520ed489d0b4c4954983d564562f9ee10cc64ac5f9edc639c40375970da7c65eef2c887241ae2fb228ae67ec96a8f9eb727dfbedd75aed54d77766cbd4c49191e06bc7c6a77b1fa264767e983f33d779a80e80512aa5be81800b1b0266ef2d6caa20c1fe346cf8022426c5fd65eb0c74f
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 021f733f01480e83367eb04671811ad7da9236ea75babe9edc7bec5693966714
+Nonce.0 = 2cf9c523064115279363f671c7111496
+AdditionalInputA.0 = 97e930a53cf43f57c2fabff0dc01dbab20a60a16a10b55066b4675d9ad7e10d5
+EntropyPredictionResistanceA.0 = adf0f6567cba9d848fe388e31299f69923228ac9bb8f931568b7e6e06063baf9
+AdditionalInputB.0 = 931e16966b39c2d1b9591f804b935caffdf227fcd2e26ee46ddb644e2867dae9
+EntropyPredictionResistanceB.0 = e251600894f50740d9c16c6314a9476a8942df7165debf7cb32f3e7291c5507c
+Output.0 = 30fa8c49c928b34bcf2db3494fdbfafe9b6d3fc504a11ef233881712ec2a19c625242ab5144766cacd21e87d509c3c1e9afb3ac2b51e5776f46cd4ced59589d48d3803c35493f5754de7d379a43d88ca375033ae7254bded4d4d164805530f6a7ef7cbd10a45c71ebf310bc33a5cd8fe9f6af8b10515130ae53de0799f1fadebe1236e6f49ea8ddcb7b182ba27bf1e7406757f75ef2950b1fcab4a9dbab79bbb6c472746bf5137a38ca4bbd72068ab22e7e2b20a962ca0cb7a75f099248bc2bbc949f651b76be1e2eed26dca94f313521bef40b5fddfd23141f3674db597be0b3849c3cc1aaeef977af2876e59dbb36fc8c6e96b30de1e68b9655ce5771b20e5
+Entropy.1 = f407ab5f936d2a695920fd41f4b02ef989c025323911951785350e2c4bba7433
+Nonce.1 = 4105fc826e14e9169ecd4fa3cc4e8b49
+AdditionalInputA.1 = 8ae09bcc4471c58178635a811f75846806e4896f89f088e5dad2774e476cdb86
+EntropyPredictionResistanceA.1 = 6e5991451f494b1ac0971db84d47f49e6c686381f716d81db203b7d4a0e5d903
+AdditionalInputB.1 = 768ebb99f79d1ce5432902848ce91155717e99cf9a394d90ee62c6f5e6758c53
+EntropyPredictionResistanceB.1 = 6ef97079770c5b40e5da80122023a59d5cca19bacbf5289ca5b13f9b5c22ee96
+Output.1 = 3be374bd6f604eddb2f1123f70b6fc30a3fa99ebf6a9dadc97a72d54050ec0ef440e283470416ec641587260e5f812cad132d1aa537d7e2abc9ac132ee8801c21419cb714e33d7f2e2e45f5ffccada9bb8765597c93e32811159b9d5f80c4fdb87b22719bb9d240731492b2146cdb41a44c49d343fb747350595e6bf37dc75f0f4166d729c7b7df9fb6505f98245d4df32df5d937f142cae74dd5be44968933020d16d220201bf1ff7255cf56717d96a2b4bff160a6c97eecdb75dc87264b81b98937d31ad36b3ce59078d9a98057ef6b9d9720f752f06c654f1c94a0fb6cae1cc3826bfe06bd2b24fe24f0556d24892776a97b66b16779eee3f47ad885eacae
+Entropy.2 = 6e1aeff9fe9ef1be22b82cf51695600152bdc3141222210604ec5a0bdb21303c
+Nonce.2 = fae63510422dd9df13cb5d5835d24f79
+AdditionalInputA.2 = 101885559003dee69098d5615d8b4478eff58b51cf2217435e8288fde466cd76
+EntropyPredictionResistanceA.2 = 4b8896b23dde8e18038168ee7ab155cd676c095fcaa9cc6242c1a670f1a9d625
+AdditionalInputB.2 = 47dadea2112a1d686ec4f73b707a2ce3bc17cd775bc7cb983c7e658b41f9487b
+EntropyPredictionResistanceB.2 = 7a905c0270e2268cdebca2f0b9228d5dd3dfd46ac6272de431db538c5abfc390
+Output.2 = c946408469d8d953b40c0631e8ac48733e0d8f062a02ef4deb942146f3af28ca1745d6bf78e9a90faf6407ad988909a88c76f164826aee7434137f5892d2be17fc2ff0c07a3c535cefbbb5037f2a0ec3bd26e31bb3383787fcd1f15f7ee03aaa831383b617d089e775f356e92635a232a6d392f0223c66cc5ce42259ee7a2bcbd6bff3378b76f56714f553ef80b8c41b784f1469886dcddca33ef2687a5e30ec41096e5b42b330d813b0664ab6468bb2b0babc66e6a68808d8962a2fe9179318d2ac5ddf2bcd4ba8d496cc4982bb27359c4421c61ed603fcbf6127fa2a500dae7a900ca20343d55e195fd5b653930065d0d7e5d7537d28607c6d1750048b2743
+Entropy.3 = 87986608ef81ca353a892b53ef58f3033aa10ed5276fff4e37194cae78fd8f37
+Nonce.3 = 37d0f66533ff0170f79f0a4cf6eed8a9
+AdditionalInputA.3 = 53f8f76f7ff6a5098943defe33375e96e00a8ec7054912b9b76a8ec2446c241d
+EntropyPredictionResistanceA.3 = 4c10136bfdc7dbd7493309e0c703dccf9275b56d68395c8e9b274153174fdb23
+AdditionalInputB.3 = 31328ee160264af804b5d9a7f1a24baed319c950d186376426d479da928457aa
+EntropyPredictionResistanceB.3 = 529c5442d4e8665429fc324ca592654458f1844819b3082008c7468ca29d1e42
+Output.3 = 18b4a4a56fa7646e3ea61a1f9af981da379ee256ec353ea23c846318dab90cb08e63f502a29cfc5459987f09711c9477107e1362a1b466b6bc4bb4e4817abe0a50d96010cdd3c01490fa7bd677c96ec27133b063fb54af9645327b1f155b55b040e6159aa5a408febfd744a492d3244173f847bbbb863aaafffaf1502e34afa236d4be33306fedef8e0cc5806b70f4ed0c22adc98819551c9cad94bb5bfb04d223825e099f8f84397d2284cc79ce3f7bad38e657afa9d30975b1f052c503f013750e9c7cf18e76c389380bed68fbc6aded4f3a2b78adb5c2d089acf1d71fc994ad9189057f164b8561c6197ed9185fc941c757beacccc60c1a61b60eace1cfa5
+Entropy.4 = 4f1548d790b03870e1d2a0e90cd0f4ff7fc4c8b8a646d8b5dd063e4b6866dc9e
+Nonce.4 = 5ec08667617f65e0861d6ac16dc23c67
+AdditionalInputA.4 = 1b5a1dd73e6e5bd33b5cef368d7b77f20c121884d60cfb4a1e1901a1954bf5dd
+EntropyPredictionResistanceA.4 = 154b39f207a3445f2c623b5215a14bd1fb40f4f67d7e50c0cac9689dd5d8d0b1
+AdditionalInputB.4 = dfb83de500e83c392a67284dfd8e7ca891e6a5ecfef3be58bde43c96cde1ec6e
+EntropyPredictionResistanceB.4 = 0ca3d97b5e3b3e8deb980d443cda9e346f0a9eb368b5bfcdd8090bef12668727
+Output.4 = b7254f69c81acbcc5976e63d63c8eff142b49d15a3022d067fc26e204bc0d548203b59a8f5cc2c1e67ca2e92c92ca81d77f13c3be83305fe0aab24402bb6ac0a5def52b4165725444b13b987df0d887b68e99de2544161596704a40ce1c66936ceb153c30915850a21972f5f63b39dff0b05e578ae018ab887e912b624ac76e6c0f747852c4f7f9ea01a6a193d38b0a6d654e9070a71553673a05bdb8426f9d1193ebcb267a606024ee1f007e1ab06a15bd41c2fa4579950c635ad9d1e8caf4bb2932c30779c5a52886d0e6516e030f510f81dd1145b5f0a22eefb72df13b73dbba92fbc8911ec83423a6f1963a56522d43105f381f9687f343c8351cbe077d0
+Entropy.5 = 3fdbe18dc65e9dc9b896985dfc4bdb30ed0ca5da91820683c36321b69932c865
+Nonce.5 = 6c6b44336125b7a94a1f1135a109a2c2
+AdditionalInputA.5 = a2fc35495cdd9a2b321cdbc765bc0d34aa00bcfefccd516e83a6c67103631e90
+EntropyPredictionResistanceA.5 = 2e341edd5aa5874ee2447be79d26d956577f8ec975778891077e71fa37ce61f5
+AdditionalInputB.5 = ccab68466e2401d1b32a42302786053148d3e74df38c3c0744a96b2fa3e97de4
+EntropyPredictionResistanceB.5 = bad236f7489f8a157f5b06b1d2ba08c4b858ff1072cd30bc904abee1f820d2b6
+Output.5 = a1505dbd37c4931f522629fb3eaa8780d5e02da384c07ea8fff78a3ebbfc368d6223c0a9988f86649f913bce4c446593dd7f70991a3a2c74d8fac7e26e5bf9aa2a565f2eb14a04407d134b11a35542f140de2fcff63c54d6503358825b9aca7db4f0eb2f0d81b49782e76c7d3163bbf1ab8f121e7a3d975592d94bb3deb8b414556d82fd2cb8dc5d0d6e7312226c2779b685fee86f51bf5123d245c1ed12234e153caf4b66adb1892015643955973833ae10f05138699e908140d9acb7759cde4c62362077a7093fd6ff6977c47054b5387c7446aa6193d5d097851378c627649c07f299aa96b14b0aed4d66bde60de56cf477632f51401694daa75f0ea1d695
+Entropy.6 = 68706677403a1b91bfafae2a692103b7512c64badd809e785b9f5c211fbfc70c
+Nonce.6 = f37b46a34f21d16680442072f03c5f44
+AdditionalInputA.6 = 0b0324f8cf53df4fcf5fbc93fa201605d6e9a680261db2e3444ab26179079067
+EntropyPredictionResistanceA.6 = c09a442b1a55c4ae85bbb355df5d546f14892d5fb54690d3046f704c91dbe50a
+AdditionalInputB.6 = 098ef7490d059068ebe6d6bca26dd16be29dea9c08a4e608f10c3ec1d092a27e
+EntropyPredictionResistanceB.6 = 135b562a34e7a77bc449a4565e16f78a5ef36de89b59076d1ab278e7a11a442b
+Output.6 = 921b974d9c142f931043a8560f0d87f1df2b7cc42bbe2f8f24f40dafed3f6c91d92d5e92e8b25a7195802fd4f921bbf9ebed1bb05830a8630da42cce6de1422f66b8a0b9ff129e8030829ecdd6a6593bea1fbf4524e2b6801fb45d9acb94f6ca417e59b2a4f5cd005013d6ef5fc3e8e037f1915a04dc43aed2fd0fdf57e58f42fa60fef49c9aea026263ba9ac4480388c973332affaecd93edddd8ecc92f947a8d4e1719590fbd892df52e4798be5385c7837cc35f930453ecabdee17889e7e86e0543bc496fd7201863c70d2e8cf97b690f8384108d2480015ae27f0bdc42c9131b0259551c520072b1c359852253f37e09897504c11056363eda3babd8ffeb
+Entropy.7 = bd08a7f98c7874309869185d80880493b02759c805d5d8f87631beed38b24515
+Nonce.7 = 81f0fb9a7f94b1b890782ddd169b6c73
+AdditionalInputA.7 = 31af01fb66bdac45537761fbb94022570d314814bb6ff5da1d16495be56f1c63
+EntropyPredictionResistanceA.7 = 69958e4dc7a96faa4984a3e598daec0659ec635b3f1a566f10d01cd2d083e725
+AdditionalInputB.7 = 7c5e095b2c929ff276736fbc6e0ac388e50aaa73be65ba559a85edfd2c12e787
+EntropyPredictionResistanceB.7 = 8c5e474c431d13fe6037e7b8925980b41741ab2f3c5ea13bbe06834468316b3f
+Output.7 = 8991849be2debdc105f5731b2d5d3f5ac4f20479488e659de12e073a503e442fe585de66ff112b5074c96652ff0bb38b1675e9282fe15fc6ad7ba8321ec1cfeb5f3ab34880b9757f688e019697ebad6c0b8a044be607a11d3f11279b6b2d76cc186d6887130b55f96efa7e670a80e359e4b01928af347e19e3e5fb6896017cce6bda40f2cf98695d6bcab1e8c89fe439d63c8efaf4e3bafd7835e80ff0760489adc1403246e011fa85cd255c83f6adbecb8e56fd2f540396b66b15a5852407500cc0cdaadd07ff56436a78305173d77ace0d06f2c6b7484e6f17c7a7a215d46b235f159dbc7b368128f8cddee35f4a81b004c38fab9e6b159d6e42a32e478ff4
+Entropy.8 = ce5431137723c2c7af2fbc45f532b9bb4204d1adb5eb79775054e03182f04baf
+Nonce.8 = bf1f332df87c640e9d208f11fa764506
+AdditionalInputA.8 = 21ef5199592d947f5a7e6d48506b0849fdff526d9dd73e26a255097ee08ba140
+EntropyPredictionResistanceA.8 = 45babc12aed933efc5250c25f18a5bcf7b54408f1509b2b8cb2789df261359d9
+AdditionalInputB.8 = 781949b43b632c2341157d9bba01161499b364b9a5e235ca20b3c25b2734bde8
+EntropyPredictionResistanceB.8 = d7efb04110b5ed72fe203e665f5fb5f28635c81e58d7b2f98095beec54339bf0
+Output.8 = 7a51f2027866c68cef5c35e10a5752e33df9178ebfbd9293279c40d343c06270ef59e64ecdff32986ae6a810d4974f15891561da1d002f90b42e61052901425511773a7e48d138abcf66fe01ebc2421691454e5901bd8e1309c33f5df1ed88cfb714f3126a82de7696cbd1eee2813c7f91e0fdfccd5716c72dd8feed4d026772ea058fdaf0f6a8416988cb7ccce928a175a0303793e106ad1ddb997726383746b88d6963bad97346351b95cdf5beacd1de078a360fe6e0cec39e327e00367fd0917414bb99385f91ff4d48199a79238a1e98eee59277cae71cad64cdb98e7b0f642161cb2360d41cc5d270b0ca01ddc5cad4f7c1750c04f7723bab6b35704a04
+Entropy.9 = 5a8c677de0721eff7b4503abd2da2fcf13b66539a9af478495bc28d46c6fb2e4
+Nonce.9 = 1a99241acd00f3df499f1c48810e72d9
+AdditionalInputA.9 = 6b55137faa4e45bbf8390f73e7aaf9456c94f9c6f637c6393f3d09937a2ca7fc
+EntropyPredictionResistanceA.9 = 31c791671a85cbbb47a9a6d95f5ffc76fc67094d6146d6e0a503b550dc29f965
+AdditionalInputB.9 = c7b29f121824e3d638dc7d2145660e348aa8e296ae9c6a2bc4bd0390d444cd8e
+EntropyPredictionResistanceB.9 = be588a74c756c4afbedf4074e6a670e96c3d65bfafa71794b9baeff0952ebec9
+Output.9 = b6512754b83441492a4ac41b2cfd6cb0295d1adc75627f20d4e0cf482543ef8ea0b66d7c784d8a1f2a779a0b04502477501846e25a0f8208a6927a5830141315997cbb3a1f1faa8e47c939b7442ba91a73a740225817bac273d698661d7cab5c1151c42e05c729c967c84bf2007a71318a47d9d0c3361fd407a2e63db0f537efb1e6d0faff9017ba4e104a94e9ca7df81ebbf366402b46cd8e93ef99b063239b49ee3ec24ee41ef8613168af596ccecac0d973dae8d13f3ee58fc11129714e2b65b087932d191c339a3bea107046efd2587cdaeef57b161eaeff2a57fbad49d5d4005672ae5c8ac588821742f0fc8d49ce53d1e960b8e2601506bf7115a438c7
+Entropy.10 = 3afecda47b9efcf015d1682e2696b9c84831ab87a0842a1e2fa731c3c44fdd2a
+Nonce.10 = 056e0572949009d17a5350a9ed7f7f46
+AdditionalInputA.10 = 0935ef7ceed230a85ae32bdb796b93ad549a9bf5974020cc1510febb0518fc66
+EntropyPredictionResistanceA.10 = 348e3cc82d171bbc010e88847a7d82b18391ea3bf79947bf4183d234f6369db7
+AdditionalInputB.10 = 7bdd80e9dd06fafb333cdf1c4a111ffa2c5335e1acf36a739ad81166d987ffa0
+EntropyPredictionResistanceB.10 = 26efa772b0a69c7f98c399693f736c45aeb90896af9c792f273290d63f79c9d8
+Output.10 = 2c0228568fc30c5c73c1a346cd263cf424d997de3f5f80f3dfcd8f1318bdd9cc3b8281ab09d33ae7d2e481cec6d4a5a988b1953cd4cb5d75057825a1150effe6b9961ca0cd17f3dc49d15a6dd09ec0eab4a2e4efecd420ab5596895b52e81afa4ef5c325d097ce7668ef054bf18425a06489ca29021b3a3eeb1827371ceb449b454bf350cb196df74734aced8f75d24060fa078272f30cba194664ad487c6c1b3ae9968d8ec3197f2dc8cb23e1c54392f6228da0d9b16aee104a985edf858eec87e6352a27d024a83a4a3bc1d44e5ec9e8cb61a8a29c5f871e8b5a5ac9491d7078ef7919998b0ba51d447eaec8601ada85ee5b1c623194881eb462fc339f8602
+Entropy.11 = 3164c57d3d1193b68a828333371419bb0145dec0bf53bceda869b90aad07757e
+Nonce.11 = bf1617aa621a81d151545171789656cf
+AdditionalInputA.11 = a98e54b17c4b5226c18258b94aa231403e5f2aebc2f6e06849284257f7e6491c
+EntropyPredictionResistanceA.11 = 6aba1dbda688d395d2fbaec1e744a1f1514baf9557d228018a4a3796b4ededf8
+AdditionalInputB.11 = dd3f37f63b99144abfbce591310266ae9e6e41b07cdb1398e5be1e1de2098969
+EntropyPredictionResistanceB.11 = bca997d5f359202d67248e901348f672a9b805d93edec5a34244007a686d181c
+Output.11 = 38a36087af5a7aae8b1fb582cebfa7f8e969c9f529d768442c91ae8e1a424ee92125d31020758ed871337d32df716a15ec370c1ec939c99ba877c94a99403c5d08d469b3cda18db9b299a788d2211a4fe9ee6d56d98a60bdd10a55149c9be1f21a69ac16816336d6fec4e3951c39e0775376ea5403f191ddc882e5cf3f5542137ebafde3ccdcd5a0926abec7289cecc221245fd69b5ca3e5e13c98c25884ed3b24bfaeda06fb75d1532d982cf2c92991e2632e7a836f0b4c8ceba035020f728b448183473b6dc8d4cf061bd2eee5e0a5a02ddf5f9de6472fa8f08e8d10e6dc7a1f82d409f808926f5f5e1bcd8d49c467d23691697d476242f802a1d6160226f3
+Entropy.12 = 22307315712a6bf824bf936ca410a63d66d6472126ca3a5ea10ed5d9502ec158
+Nonce.12 = 35cb86f863c5cf1b1481400cd5005d2b
+AdditionalInputA.12 = 753d7559076637475e2dd949c92b1816f96b57979729bf73b6a791cf6389e6d8
+EntropyPredictionResistanceA.12 = 8d18648743af512c4158018181d32ceba947f16eafa093ce064690575d9c1309
+AdditionalInputB.12 = fa91906470f43bebdfeae0a83c1d0dbacafe5272e7016d36b3102d5238499b79
+EntropyPredictionResistanceB.12 = e8f379f8150701929ee8b5595543a1548daf5a1f6efbf101397484938df5a8c8
+Output.12 = f657c85db2b8fc27f51919006fdafa9a45c6a7b315ab5e992250c3245aba81f5258679cd371f7b869ea08698ab2f6f74a6ae93729379cdfe79f185ba994c5b6ec8717ae00c28a8434f64eacdf9fab71f8ede5caf713597e48260220018bbdd4496185b48a3aadda8ba61dce2ec2fea1d31bd65834615807555647dc51c335f98c9aa7891a6f5b8abf04f067e4f4b7480cfed729d7b7ebb43eaa220f7d730521526e8a176b20d7b2eac53558f2f0fde15f49b737745eefce7498a18bdb025e743dbdea4df8b0dd038f1669a429ac5a805783d66808084ae0b7d2e82a7e7219ea49a693c38ad32a381178bdd5cac93af9727fba64cd906bda2ec14714717c3d202
+Entropy.13 = c88988eebbce687b464b0e9d56105f0b64899ed6a83294806a4fb3ce70221ab2
+Nonce.13 = c304977c5d921efccb201a544d1ccd72
+AdditionalInputA.13 = 9993771549e0f705f0347757fc631987bc4e7ff1dd6f1ca39120b76f1e97273b
+EntropyPredictionResistanceA.13 = 05028b047108599b65868b4d448d27e9a64d0065e1cc99df1393e037a9b17ff8
+AdditionalInputB.13 = 6ed9590e40fd0dbd7fe7e046d4d325320c63a20f908cc5c1492f181f31ea50da
+EntropyPredictionResistanceB.13 = 297940f6f519737ef80bf0c077674889d232ab48185fcae34883123fa721a4f9
+Output.13 = 0bb15fb2266ce338e74f0ef21ede460f7433e4105f00fe22e79212458b768fbff1540e5557beddaa08df2e6f70232e0fafd6d05eba91d076c4171395c97e15485721d420b70582aa56f583449a03280efa5efdc94c5613830ed7e7e15e50569227f3c6cae40adf0092e436c7ccb87f018d54075e65dd051503e5d5dd3643469f6c677baaa4bc86d65e6b78998a012832e9d6753fe7313c2cd4e6c308d645a9e105c9d2321addfc5ee0adfefcaf25372fa7e532aa68d27880f483a8721b422e0bd3966db6bd57497977d9567eb9b0456858853e8d0fe76eb412e4a50629362a40276cab8d40e7a73fb96e623462eb6c142f46dff48a074f8bd913e4688e672267
+Entropy.14 = 570d42d3f2ed762c21f821378d61277fdfb2d3d2dc6d7ad4eb6a29f5bcfec974
+Nonce.14 = 054424100f5bdf0f871b6b23a748f7a8
+AdditionalInputA.14 = 20f9576a9736a61362e2369d433ec2affc5285ba021c8962c9bd15e284002e0b
+EntropyPredictionResistanceA.14 = d9cc00598295266ecec10179628f95a91bb29e080a6c49eadc9bfc0300ab655e
+AdditionalInputB.14 = 7d024d742d78cb25d647531ab13510ab9460e8461b8220b35a02ab9eb7e949ae
+EntropyPredictionResistanceB.14 = 717608e8965219fc11ac62e7808ac3d8a08c938fd42073b220d13e865f4df699
+Output.14 = 8f066d3300369df4e7e05a26fb280887f2173f8f3e95c152d7832c028c99c8694180b8dd9de7e4e9be0f9db92c4305b6a1e6af87edc5d0faf80b76ff8b879bd9f0bdd61b90b8ffcb3529c4eab3bfd611f49590ba59af638b9a8a0fed101e3b63471d5cc0a904329745db395d68cf87601d7e072695be8c407ed0e495bb06090640d447f871c50a347401fbdad390482eadb255aea1e7b9be6ca068a181f9016f11fb47fbe1549846d90489a59c68391ea8b5d328c0007dcb8919a99c8f21777c5baedd19fb3b4e31023194d59e831dbeffd7edf713c75bb54e1195fe2563c6f1a1cff5915d7b6244085eff0ff61c0e5c3eda71fb3705c6b9ed7dffa99c7ff8ef
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 62ba7f80b778df986a17687fc2d241c17d8ae09d26ef1afe06957bfc1e9414cd
+Nonce.0 = 1acd0ed5aaa6b96ab17e232087b71de6
+PersonalisationString.0 = 5e44976037e2921353141e0ecf0c56206bd85c051943e7b810bd0ef8e5d3a02a
+EntropyPredictionResistanceA.0 = 7bd0f0371b8179bc404810dccfa9c5532fa7aeca7b415db7ee317d5a0cf63cb9
+EntropyPredictionResistanceB.0 = e10bed5782d4e9d151866714dee99797b6409fec81f314fa22bbe646cdb925a9
+Output.0 = de3dddcbfc99c2258a98bd042e571599a311d86b5f23fe50e89a42588d51606f51b35ec7d4e75a492616356a635e7b2d3f1eeaa5db19b8fcb7a94e274f369e73a67bc28a8bf5d49559fadcdafd1faf30ca52411012a5e3ffb66865f41c0c98805061446e62fe6979bc5d095f1d872b96375e335cde538031988fc4ec32abe4dab5ff18f45fb5127a14079f0f0a8251932065b16af28dd4b062073dcb0ba1b2049597df45c17c0bc06a23d24b8fdd66978a24398b5d42637cbb53d198a56b6193b357521db7117b7b442e75bf169e42bb0798fa59fadc19f5d9e1050a4345358bd7e40f909645d80520a093b27890a3d16ed2277990c3a4b36a3a0c5f3745ec59
+Entropy.1 = 2b7f6afc1ebf40b7de8455ee2b70a4cea8a2baa729852e3df80f4ea164644174
+Nonce.1 = 8c1b8bf196a503ed66ee10e6ef083725
+PersonalisationString.1 = f16a9f300040e3aab66f0e056361c0a5908674646154c5b27baf68128ba9d1e0
+EntropyPredictionResistanceA.1 = 185d5baafbdd45543c86b5835910d15dfb647ceaf337b83bd4207b859bd19948
+EntropyPredictionResistanceB.1 = 7d1d5c8ce9fb4bec9314a319bca8c6f11f188eb69d4e731198fcdbc0fab27958
+Output.1 = a13992dc5c3c39f394678c4e0a794fe63a0f0cd4bdac99ee63e62c2208ff271ed7f4ae133214bbfe920b0cda04c43507e42445568c086aee5a6328ff390cb42627e153aeaa2cf919db9b838dfff0557c02c6880640d715f0c3340ba6376246cafb1575d482a4dfcedfc79b302b759c2d39a86abf96f0a8fb5bb13b0fd7db9d597762d44d1b5d467455d1292541b79959ce0206253c5821cc460d0de2ea6b8d0b8eafae3cd20d60d3b47c7d00b5d754504e4c33d5e860eaf192783cc6cabb3e369184bec73fc60b9d18ea527621cf71549ff139274f2f50466c0829efc97fd1610285f1a5d541dd82fb8070e44a5a87cd6ec3ccc8c53da288c40f52d488a06f7e
+Entropy.2 = 58bb7e31f8b128bcbfef5891a39d6cd8848ffd9838ab4459184a104976881b04
+Nonce.2 = 99a7b0e8e3a2c2d475c1e0604bcfeaf4
+PersonalisationString.2 = 7bfb8444e9c38bfc9024d91bc3dcf0e50f2e3420803681d2aecc336f5fd313f1
+EntropyPredictionResistanceA.2 = c5536d4dd66605c35b4977c1e5e19c638f9726f7c572b26fcabb22eba057ac79
+EntropyPredictionResistanceB.2 = aaa9b0b18c92f7af4eb59e95a31aa4850464114a9b4fadd2bf62ce6b6b11f2ac
+Output.2 = 5a44638ec8176dd28bc559e40fdc9389f707aa3552354b1a8836c01cd680427ac975e3d5fae4b54cf2b869d88c134838e868393d6b26caee4807d18dba5f4aa607bea39d5957c01acedb5417db23223ea2dad7e563cfe38dc8af0ee78f9b1c475f57a2fb1a90be7a8922adb7b62e00e3c188b638054ac0f66448ff20d082ad7ca6ced07985397764b7f4179beafbac0050225a6ee9dd3d7a53c01a0dad42f62bd457bc549c4a58f87c3bae7cef893281a350b1147c7cae1423120bb620f57fbbc11c76ff7e3dc16d9a1fa3bb696972b28800673ef3ac34ca4a69f5228948a6400ef8f453dc1e08a6f6ccde85aae27c2c75f7df8b7eb3359c88a6059072954878
+Entropy.3 = 3176da2e43e5e6d6579f0e6d79e8878776e3916053c2c040371b5bc3be2c7f9a
+Nonce.3 = 491685f71a0cd31856ee404757de692c
+PersonalisationString.3 = ec9fa661df79286a5a42bee95a4dc41c94c761a183a3dad37564406628c1666c
+EntropyPredictionResistanceA.3 = a6c828e5efc02e37215b903f2f1e60153c37d7f9951a6fca020eb33d279cb969
+EntropyPredictionResistanceB.3 = 05c900b0ea51e37b3ee84e505b3959286f73a7eac17973bf9af228c7a3b49cfd
+Output.3 = f49d3bed893ab72deb14a39cc098c90dd384b58cce5297c89b89cae0cfee89d613b4e98bed9483f14b7a4227068fb436df10cd8a78caedfd9a5c2e3a253add1ded756182ac868f347f1df76d53e0073712f8998509c414623d3fb4ecb00dc41d1231051621ca3283135ed1e98a368988a259e3071c3df390bbe2f5255b30eaa9639692c170d7dbc1f297083b16158e29f0958e281627b0589dfe27e705234f5a6a00897e38d87417bbd30075f4cee4a69cf1f06e4e6f123cf31d6b66dddef5bc01e14ce3e9533afe5e89ae3aec7153310ebea67916310df3062044545f68f1ad041d9ff09c4577181a93ff935093e9ea79bdc4b97d7dae0bee19f61eee44ed6c
+Entropy.4 = 89a3c4166369d5d2b8ec5342bf1674993c97e2744d1b7a202cfa7592ac61a06a
+Nonce.4 = 2f968f2f5fe0e5c89dd91c92eb97b5c4
+PersonalisationString.4 = d1aadc37f7e50b8861b7ff797fe4524eac66270fe28e1d930d6703d740f5afa5
+EntropyPredictionResistanceA.4 = 7e3962ad5248bff36ee16afd56780a600f82262f7cad29577f92ff82f4610dee
+EntropyPredictionResistanceB.4 = 2f0167b68b297038a269cfde75f7e5d814e53043358f9c7dd5ba5575e4c8bfda
+Output.4 = c7221c5479e66fa1003c462c485085839989e031c2e8872f5ce79612caec7fe67a2f9f0270eeaefd1880b139fd2a2fc14ffd2f26a034a6af52fddb2f6e56f2a7bc12501db3cb6029e8b75c0201fe8da76f84003af062d4e0d78f4f5e6e6de967d49e0463916b7367245156a43902d0ce8a20804da75a345fe1f27deae6c31b1449f7bd868c847f857ee6366f0a892b9d25a867c0bfebf81d060ec4890d096a9a6569f5913bee07604003e11b74b8ffa2df91dcbb69540b7ff648b4c5bb0e11b6f527c6f5730eabf6d8d52625d87dc7af5716e7ad9afaacfdfe3b957a6a00ee521687298302b1e8b15496c3225cd4438dc1c4c87f9b8f7b3fa46a90c91cf1f246
+Entropy.5 = 8b3045a5227723181493b70f32ea6074a224d436d73e6a790f49ec38b2a10a11
+Nonce.5 = 0b5c28482a5d3a2c88df536f65415082
+PersonalisationString.5 = 102e8de4ae05e773215f88a57a68287f80a2802b1455ac0585b31d15dae6133c
+EntropyPredictionResistanceA.5 = 872fa086eb2d4106f146705063211aefff80fe5799dc8a7f1fe168335ebd3b55
+EntropyPredictionResistanceB.5 = 74e4776fc04126eeaa04f721990f3c15f0d516d6145e48b0044e68668d057944
+Output.5 = 976c70606b167f237884e079990e98ed2c27d18aaedaa00fb571779c7fda934537c7980a7779d67549cf376a1371ece95578708b3160e74fb277f0cd738a56e53dc5eb8dbc3877724d6ed6628c4abeebe99307ca9568912aaf0941857a838a139911bba82f60472d922bf6a3a58a2078b892d1f42f9a237daea69f962016da89abe4025ceb358fa7d2c3857dfa7d1336d4a8974ff335302bae6832ac049eca1f82332ca90791821314d73eb222224e044624e4d9b4253a4da7e5baf52d13c9936176411594c29de43ec522498f1ec4bf3ea780a87618b6eec80cc14bc4fab464c9642c443c2a1c695be1070162a54ac1c2a5a3e534409bba579a60f48379b3c3
+Entropy.6 = 7c0e9fbfcddbabe6089bb7c6df1ea2275cab31c3c7449cc90b98a9482cda719f
+Nonce.6 = 5bfceb3d5c691bf537ce269f9834043b
+PersonalisationString.6 = aa79658080b844104775083d6de189b008f8500717ea74d0a3541040379c0ef7
+EntropyPredictionResistanceA.6 = 33af1470b9911f6d4d8af6d9d7802a21dd9254f86b8d9f27712d7e6279b07b4f
+EntropyPredictionResistanceB.6 = b14795536d0071ada55fead3f3836fded0f0a69ecae09b3d366d997c81cabb69
+Output.6 = 1d4ccda2d70fa7d72902efa87d7707ae480630799e3f421f058060bba23aa8a80c40594688ee25be38be9610858c1e8c8fab4ae916ac37e044f830497eca380339bc7ab74a4c5007d35e5cd8d82d96e4e79c558828cfe3d1304c1bbcb42e34173398e7589c210a19b90b1bdf6af93ffe276fed2a18ac169565b8719bd5645a50013b0e83de3bd3de521d89402b1f9fac776857ed1e18de58f64ab99654f676b4a991813f6007fa8022f0d4ef5bdb113e62eb034c58c1e7aa3c465845a6caf58edab04536f758e787ae31ab79f8302beb078192550a7affc566775dd4a160546ac1ad817a9f7938b5c7858510bfe5b09ae344fa729b824fd4dcd2cfa2990dad58
+Entropy.7 = 942180af15d40b7812d45443a7da03307fae40add1d995b9cdb91c392f24962a
+Nonce.7 = 42a229fcf87908318c5fe65d0916ceed
+PersonalisationString.7 = eaccb2d8f4aec910cc0ac29d80635e162a96bfb7178c5d50440cf576b9e38f31
+EntropyPredictionResistanceA.7 = e5e4394ca7ced01f099b9284ad70c340b87b1a19eb9622e2e42b55f7d2fc0703
+EntropyPredictionResistanceB.7 = 6484cdb8b967c71101faf2851bd53d8fda3e35dd522f1b84ff82f9e5d36e38ef
+Output.7 = a30a6d66636d5e3426931285f1a98bb1efa2c82f65682659241600f07731087577fd8bd77a9bbcfbc661c07350eb971345d6b1d60802395ddfde85d52edf9664bdd43c4df44dacd92a70cd98fa330d4bcb490b8b4b231643234c56a11e69ac79d862ee5e6d5f0aeb751dc712ecee017f65278a187dc4b7a32d4262dea2ef9b465229a45aff2e71cdf336b2cf111fd7ab57f60ed4ee116988116979e98cb140f369d19971086b3db77ffb1b9e08d776f8f1db8b24e49545e0f013e639dcd28eea86f28f39d82ab3d9f0650731823a009172f6a1831fc1ceba0312343b2cdbe8aa3813b28178c9126ca3c4a4940449e00d48ac9be35b4ca90115c416cb8a4f2959
+Entropy.8 = e9f952c55ee342119d9c2aef672d214f84584f15fa0d31d8279de35abafe400b
+Nonce.8 = 60db99d2faf51c42cdc360c7c850e5d5
+PersonalisationString.8 = c6090ec1e85aac1a4089d576d1f4916faa188d296d25d1ea8a6baaafb22387ae
+EntropyPredictionResistanceA.8 = 4ec0ef5198887c3d9bd18da5d78e60fbef61a5dbf55d86500a6edb70bf667e0e
+EntropyPredictionResistanceB.8 = aa96e618bb804f57242d3f96bf9f61cf569b04c8143d6e8807b365e011a7b34c
+Output.8 = df51e3dcf68742364d8a3291f1bd133b76c8c5aeb9d795a4b8541bd17130c98d2062eee1fa63bec652ec4688cde2f7d9f7939907f4f495d6248c7a4eae11949529494ef0e7e1757c3821e4ae8bd78fac774cc489fa0b2802adacee8206d7c2d483cf84bbdfbb822b05cbeb610e605a7f1f5bb62f40d7c27a2622e8a83bf4aad4cfebfa7abf7046afd1af93d6cf7ec0aa90ffa48a53d3cff6d49a1d2da6f82e3ddc9bd7fa8dd01f61545c22ae659594d417482baebdb532f70d23d011f011eb51e4bbc190cdfc631ac9a98efb486f3f96276de58eecf462f2a61881ac9bf9ddbb7688a3e3e1103b48892c28bc2ba8367235ff5604aff2748e18ea74761a4cc8c0
+Entropy.9 = f8195b18905773e4ca05ee0b2e296d3d29b367ca2a9bb9aee20dd161b232295e
+Nonce.9 = aa1a916af19ec9c155bd4c8a7dd8101b
+PersonalisationString.9 = 105b314a5708b9212eb1d54e370dba800653fe4605fcd6bfb9bc397e875c7c36
+EntropyPredictionResistanceA.9 = 2791929033c04d00ee8a00ee79f615a4b3ad36374bbe70f964186426a7f3a104
+EntropyPredictionResistanceB.9 = 9f718fe384984e9a78d2a23cf50172129b953c5e360611696e6d31748bd47a9a
+Output.9 = ec5e616c39ee5675e87b21c89aba35cfe5b6c7afe454ceb237356482f588376c109be378967b3c80e42c4ba150db7ac4dab6477dd3a397a1929f18a0d3581d7018689e1a1bf370748223e395e7e8585437e7b5b4702048ed489013299237ea42f2d593884675120a7b087b077c89e29c13754f7a7dbc8fdecfeb0eaa5c804f442c639ac94fe5004c9695f49fb8b49c64bf682a60d4e62a544e015742bafa854a57b42ffde4964bb75084d0f1a85a450196de97126f7edd958e59ba4963379ce5e17e74418daec7aa0bdfb6bcb5475ec40e1729f41314187e328908f2d1d4d7bf0eec87f82cdf37c188dcfe1bf3353164696e3906af3c07c761ea6cea43b285a5
+Entropy.10 = 7248d16a09d854a359abce344eb6fcb6cbc671ce9d87fd6096a7317e13f7fea8
+Nonce.10 = e6878c68281f9f518ff095016d3fc3f3
+PersonalisationString.10 = 54bad236c5584a62a443eae01c7a1cd0f17b69ccb47a37543160a5f4fcdb0fab
+EntropyPredictionResistanceA.10 = a73bf268ed9ad463377cc9f7e841aac0b323abe5765ab1b8d2b654cb1c586694
+EntropyPredictionResistanceB.10 = c80ad69670bbf6f229d4b12bb845cd04cddaeffc67003549eea1b40c8bc5f418
+Output.10 = ee036d854e7b06a95cc4da7be4137ff9b16446def74c6b99fda07d3d7392309f2e8e93ff0c427ee0beeebd80da9b0b4fff472a744cb20561f29bbdb9965d4788e75e5677035b4b219850b7d0132f7559b9da9b2d019d4431da0599a8591c17dc9489405fbacb0115a92364eae92f9c6e40abc021b10bfb50dfbb5f395abd8baf2cda3b9776ce37e454b1f68dd7ddf2dd1368d64a6673bac61019786ca0b9dcd7affc61ff604b47106794e65ac42976cf107223ea7518d6e5ec4a093c76b5344ae70b87498199ba9df27d4c31099f190c49a9a4490aa3dc8574175d4d36071175d8c9535825762f43ff65a32d5bfe21783f04cd24cc79722602ad5e2c8988bbbe
+Entropy.11 = 53011404cd885922eff0f510045c10c1b45972bb1ffa75c00904ac2c57a54653
+Nonce.11 = 71513801ccdea58cd960c1c9f85fc749
+PersonalisationString.11 = e989d674f14f41c7ad5de68bf38123b845c6f7a1458aa964c97628278197f95b
+EntropyPredictionResistanceA.11 = bb6483dc667c2dddad31e9c740ec14f5c1a2af39aa6059675e518055849fa576
+EntropyPredictionResistanceB.11 = 528c57584d06bb64f194fbdde9999b023c7fe556f61cf06822109cb0c629132f
+Output.11 = 54192acfdeb8744c8425ac84d953f792f44b7c4c48c64cca050f0a7631baca92ee341b881c006750bc2cde7287dfb2b07f783bca183968a308468ca2fb8d6824901488591a0a4ad661131962fb5fad897790b868f65d940869002e8c00251d322cc5d0ed471b10b199e7da9faa70949b0406c917a1a6781bd1ddb6b6c1eecc0b234076d3ae1c17e4e516061164e9b1710fd84885c1859c49d23423e4cf2755a2995842cf9a199cef9e1f9fc02b3c72931281cd141d04c6f8e24f0b141010b57f5ffe3258d1a7cf63413e2d5eabca2402b234185724cad033af6bb3db06c45e0ff27b39b2938706929aa2a6d17325d4237a0e6f695cd0663e3196738ee49703c3
+Entropy.12 = 103a7fdcf7357bd47c1698f5920900a0bb70b63ba45f67db775235f9728124e7
+Nonce.12 = 0f8bec7620f94ea0827e2f9d2deda9ff
+PersonalisationString.12 = 16d3f61471d4c4040db0e686f89fe32dfdf3999aa6dd8e58e4b40882514fc8b3
+EntropyPredictionResistanceA.12 = 7dd92234c96551ac7af9b0df695557854df4a64c2f35e58f91928e996b83ed2a
+EntropyPredictionResistanceB.12 = 14b86c3e9eefb2327962625b42364c31ad3bfbf041ab5a1bcca4b656084fb092
+Output.12 = 8c65c3acda753219f23e34c083ed50ca1869ffa6f6cef5cf1445e5c1d06adcc42bcf3ab05214e518e21582aee1fdb6cc56270b20edba1d5b3e565b2435dba87765a885a92fd449742fa42f9c72eb11d70d7c3dbf4960bb72e7fe4fcb82efdcbb04ede43912e101256a47610b9318182f50984c3f18b6c48b3c86209c19c840d0b2349b4332cbe728103f5ec01d61aaf31e82d90787fa0f73cc3ffd1e70ac8b82b842e6eba83b942d41d6ed2fc001a7d17e02276491cc745003491f2520a84872af93898503f7c649bbd0deabf9e9abc49f46c4aec35fd1d679e549fd826f5de45d4971f8a2b1e7aa3784cef04e20ab42bbc7cb89e618cc3672cae46324dccff0
+Entropy.13 = 9dd2e0145f1a1ba067477a971c80b8168dd1d5ef53bff47baba1fce8146b4f44
+Nonce.13 = f7055817a0f206c1d7abcec80d58a5eb
+PersonalisationString.13 = 11c0914355ef41906136eedbd2957b70567314fb1a94507058be59d955882a08
+EntropyPredictionResistanceA.13 = fef80e972cb5da23c502344c92f65a81cf9be3d91e1e67026c6f869048b110ec
+EntropyPredictionResistanceB.13 = 905f5ceaaaeae93fb029fec4f3945288ce7f2d2c2c31f65ccf039489196c98e1
+Output.13 = b761e20a42a05c0df88c26ff525abdb05373f380d585de992c2747c6fb3b09c2c4a8d5ac190b371f2e1b53ecf653335cfd2fa7fc0002a3a89710a9e540599fc51af78830e63eecbcc8829977dbb554a39f486775c1f7f2435689623f54674b812ab589c530c960a58af4945f71a965ada94b58b3f614c2ac9d618b86536616ea4775d2cd12d1c99f6da9778869a0b3be1cc75991a5cbf8f8f22d2d6fad81bbede28e7883189542e7963295798adb37573d28ba854c6090247fc0a8b171c24c7e15bdfe8dbd31b97fef7c929bb9d9f655c5019f72551f460f9768db59c2cd9f83587f4d420a4eb8351481b73f3a543d9f0daff070e3d8d29ea7dfe08f370432a3
+Entropy.14 = c290f0fac197a1577a6fdb237ab39a938cd41fdd2400a401e61b4abce7fcca3d
+Nonce.14 = 22a0917b84af92b26ea53eba5dee7ad1
+PersonalisationString.14 = da37086893466a0d59d1d55d1392132c69d31a9d6bf59735cab7eda1b090ac55
+EntropyPredictionResistanceA.14 = 9cca3b24d4ae9d6a082dc239eb64898f2f9fd33162a0a12ea0a559dd3c389450
+EntropyPredictionResistanceB.14 = a4d0fcbc1712dee5e0fcd49609fd8494d8a2874497ec251d84b407ba36eb994d
+Output.14 = 7a70994f09a7ff930a25e0a4ac97b75a93288a528d0c234d5c2a65fd198f6ace841cd21d3cbd5b64168908ae1572f88b872e5e0bfa09554089f10452644d3291e359c1ecc4e132c59e7f77c61470ea67050bf54070702cd1e5cfb41856df281241cfdabcfccb2a6a73be9bf23b192314866ea45f676c9a601014fdfa1002f82b34dcb93626254b6ca4245b1bf041b009711b82b4ae5f7e5c711a4be7feed5150b6cd61667af678fa85f21c4e04ecd8c745b063ecee3cdb3d388506e4cf06eb4ae0885c2214f4b5f815e7fb50bce398a77fdc7c4b1df6d02b5c9219e884b2563fafb7528dca360b5acb6d53fa4bd579a0ea945d5dedd699dd1df005c10cf1b9a9
+
+RAND = HASH-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = da9ef51ddd08cbecbe1e54b08a0b4264de31a50708f91ac2ce259eb67fdab564
+Nonce.0 = 7c180ffe0d03e17b2a3b357198c2944a
+PersonalisationString.0 = 3e6799187be99e226e4cca9f154c691212e1c8661c4959d945253f9f335aa4da
+AdditionalInputA.0 = 821b39899f523dc950ebbe2c967c5ec1742da07b333169f7d08ad1e6c3e4ae2b
+EntropyPredictionResistanceA.0 = 8f0645c34e858336ff03efa2a1e84e6d766fc30b377801e04f0d3d71d56ed116
+AdditionalInputB.0 = c427f0cc783da6152e97d8dfd4b457abb2e8652261879226f47ae41ec1833949
+EntropyPredictionResistanceB.0 = be1ecfcded160bafcdecc41b3bdc6daf908a9bece29a8a59fa6202df395785dd
+Output.0 = 427975e02ebf4e372f7b2b60d12f37a57f01a942cb7d4ca0c3b40222b5ff7759ce29716a4b56a5d86c0eb72225ec566ebe808bb53b0d91e66d86db250041077fd87b1f443cc352480a22356eac870625bf5b165ef777a516dc96ac7df4cc4327c90bbb4affa1171523fba042afa68f3b60486297d897a3c769680788269a09b9bbb21aaeac2e54207216e4501b7d5a8d8df7d4d5f08b9a2e37c8baddb2ef74b77d9285f200b88a8846835b297e193810720c08aba4b8e31d2feb846944ffaa8cf8b365cc20b58067b15a5397758b7912a9084c5dc7c311f6450879d9c1b3dc7fbc870e93bab523eef2ed84b017fb68bd5633a6a9de56df4e26b76b86581f1f2e
+Entropy.1 = 24126626c8c52cae801a46d57eb30e9830960c725ca0cc625a6eea13d2c06cc4
+Nonce.1 = 0ee3d945a1bc8ec06c091c5f0d800b90
+PersonalisationString.1 = 5176c5f7bd39ebd456d8579e3e8c00955f48cb3c72fea6e11bf9d39e79585abf
+AdditionalInputA.1 = e254df3e400f04c4740f814bcb802171512850c166c147efd5c70e57fc072f55
+EntropyPredictionResistanceA.1 = 472770762302988322937de938cb02aef73a7366f4a3f0033094fbdc01d4ba53
+AdditionalInputB.1 = 9f60233acc704337b89652c84cb7efdf44293fe79ec00a224f9ff2cfc47a990f
+EntropyPredictionResistanceB.1 = e871bcda45593c425e5c894b5bded4bf03aab325a649903aa9595fa628f59846
+Output.1 = e3bc24ac81f154bd9cc754dc0c6cd707521146107120c1e9360c2d90e34d548cffbcf1cb2f8ef0ca728a6bb8204342f4d948970b1d497828d7703559c323402282e4e01359b4003742f73703571b9b98f90a82a50cbf4bebe3260ae6717ef8eb31d97b5aef42135f83a7eb21670f5b0ed74ec8a794c7d32e728f5db3ce7ac770191f29e574da509d81bf976d187a7934be1bb6c1bb21e2272aad390e97967c667d15062127a9d24f4341fa7275fca0864e1ae1ed907aae15a864159d73b7decd300bb712162982363131d9d436d12391235bf84eae606f61f37e0a6e64def07f5e9b1405f47dd574ef0b2d59e5f9e6168d193997d1c605029483cca62755958e
+Entropy.2 = b98386fc0f318de5bd4565fe0a0d86d5964ad7e1ba4f71097c45f86f7732e7ec
+Nonce.2 = 0ac05528822b231a7ddfc51d5a44c2b6
+PersonalisationString.2 = dafb2b47b9ffc8d657efb75f574ee9c7e6cb4288bad88f45bb2d56204f4a5a6b
+AdditionalInputA.2 = 9a85a9bf7680b4f7b87835be0f39d73459ce63af90aedf43b2f7bcf2cb1e64e7
+EntropyPredictionResistanceA.2 = 9d58ad0cb299da5340a60027ee3b773048571f89fe50f5a0951eba3d75d3945f
+AdditionalInputB.2 = b60fae5b0480bd8734c7750a08dbc762f50a23a1b195eda8007cab425edd45b5
+EntropyPredictionResistanceB.2 = 1336a3269a3a6353cfada0b103fe010382bbcbb0d134f2fb3b9cd8be63a7024b
+Output.2 = 339a3c50fdbd99e685aecf97b37fa499349a70cf838c034118b8d34ee62595af135b453c90d9cea6d05c21775dea16b4f1bef038c5faf10d69c387cd53b896a30e118c63f022a73817274f111e9a3765aef10cd2ab73588ba1e80e518026243de6801f6f40b90b5d416c37bac1baf16b1c52fc1c9bfc421c8a7f981e2944898bf9d37cff26cf898895f54eb612f74714c2b106081eeb14d0c519f9d98cf22bb8f57deb85c8f65dae3974e5ba16c139d1989b38ef124146c04b7aafd21b94902696289a084c7c41d439b07b1b677c422aa625636ae2b90208720188645556e53d2dc53346fcb5ac8d4e5bd1dcc0898d234acdb90d70bf906aaed070a1f14318e7
+Entropy.3 = 9045e574e03c13b8ceabf32c76e29def2f15ca55956bf9910af955f8c807bea2
+Nonce.3 = a2cd1f8d0d1727fe83692ef50526e20f
+PersonalisationString.3 = 00fc023cd85abcc56d3a6be0ab4e1ab237fe1288aa811a0b23ff31023125d7c8
+AdditionalInputA.3 = f4cdc5b7abe03c2d69ef0316a550f87d32f27fd251c3e96c9fcc4e4ad7e0b7d4
+EntropyPredictionResistanceA.3 = caa476efe06bbc13686c904873882e160d828a09740ae45e702afbf79696a8b6
+AdditionalInputB.3 = d28fca834e158351d730b0e90f7ba6118fb8f01ba583a910910cb6c0206d5486
+EntropyPredictionResistanceB.3 = b7be5ec63220b9a9ce06e463ba5aaf41591d748f4f4a073776713d5866e62fe9
+Output.3 = 701cf1dc01256662d7c4f23f495f8d5be5624ca25c767aa8e2f4d43e98996d9fdda32f1a416f8219c6a0be14180398bf28e0fdfe3989e8466ae25611a20dcc321d2f4e870ee402a4f3cc31226c34ffe7edfe72db77d2effc3986170bb620e5568809722d158c6261e6558bc2845666c7026a462726baedf42c2aea720309bf305c0643ce824995f108fef679024b41a6b6d3dcb4fea4f0fbd9591484fb63a349565e8eddf9aca8889cec971806a68b8abd5221ee3bcf190eead4441d615a13c9bc05b1920bcac284049cb8cecb2cb4462a856ceb3f64224e8d6f0f15eb3383614aa998ef9fce286003f9a48efae73b8e8ff8098b256c3f83e4d92c179dc8598d
+Entropy.4 = ebcb9ea094742412c6883a63b3bd0686e679335d704b38503665d0a2ce12d343
+Nonce.4 = 2536a46880f53fe11c27f9106920da60
+PersonalisationString.4 = 7504028f8a95984d6fd086015963b3458ae4c036ca83c5c7a1f6e8a756434e4a
+AdditionalInputA.4 = d6af3e093640fa7b38385f39147706e5c139086cf0ee9d0b65eba6787e1ebcca
+EntropyPredictionResistanceA.4 = 59896ab3de5c16d37daf4980be99c9c9a85123e8ec4648720e22dfd5c4de9d05
+AdditionalInputB.4 = 66abeff3612cf55fab80702a58b957156fc8edfeefa8e8c0afd284f975f28c78
+EntropyPredictionResistanceB.4 = 3d2af407d61f645f2c73ef95cb64c8e312bcfc94c3332ad1172aeb896d8c8725
+Output.4 = ac8a9ee5bb03ed3f663a6f70db645d74c382b4b49e63f9494ed0a4d687e39f955e15cef7d4873a0eff69e861d0c0e040596271a032e6c93bd4ac7788076d8a90a52cd36bca8c8075dba695128858ae6dec0853da6f4af59dfdc06f84345f1f44ca9d0690bb683c8d57b1e7dc4a52c00bed92a3c031a3e16203871a1ba54da899ab5109f9428f3894ff7cb87e978ad5784a2311acb3e38fe11768f83e583b2b8683456f6a5654ad4f1739590b2b61ce22afaf5a88b1d0f0275f0cd0fe6b791e675bf35970aa144b6096297675e0855448ecea296201fc94cb431948fa5c263edfbfabb5e3ced171e4b34183e6858d9e2ec72398180a44b9b736844264a874334f
+Entropy.5 = 0f2bc326313536f4c0487691e5e78f15fc3733384270485ef02396dd87d1e3c5
+Nonce.5 = 14f80faa9bbc840189b26c3db293761f
+PersonalisationString.5 = 2a64478d3b6ed75dd9197524c3ddbc7f2401e1f3e84b3596f2832677a4f7f20b
+AdditionalInputA.5 = 06eda80eebf228d1f04a2edf5db05875699e62d55a5d86146d37cd795fa1d2aa
+EntropyPredictionResistanceA.5 = 8b6eb5bcc0763b718adf38bda75db91fb70ff9bd1bf1fcf0c7b459d6a74844dc
+AdditionalInputB.5 = 1376e0c2738d82555f09eef5ae920f49426f8888745bf4f34960b5115bf32189
+EntropyPredictionResistanceB.5 = 734c6a7f637069c951cbfafa346ab7ef7df3aab32383504d9804eec408aba517
+Output.5 = 939084aa8253e803cfc177117254562fcac35b6324ebadc56b505c79ad9d1901b819a00f086ae351697542f7e2da064e7e8b0461b5181f8e250c9c4da60805cef946b0bcbc55723baaedb1f56419c9c2f3d69961813a9fbfa9f1d8c9c3ca1e17af0d5e5b6210a2aa1fcc5bbc12c1c312fee953d8f1b4f6a0852f865826a3a35cf8c0f1b4e54a545731807730899a78de8b429845de565ee05de43becbadb62be8fa4b426a34356df0fab707825613418c9effee900f557da58d40c465cdbafee7f3ea1633124f4b918af0a8404df04c7c299635e221a40799bc51297f6a331c1220c2cf32a65ca8e4734acd777f83d9c6c79057c81b11fbe06a04736f6dec757
+Entropy.6 = e156826ff0e9d00058ad193f3f411c38234fc3d362cdc63cd15ba773e334b48f
+Nonce.6 = 2bbaa18506f0ca24e941f445b14f86ae
+PersonalisationString.6 = 3e75ff6900e65ddaf192e8867aba669ff80de837ba6f89e91adf69477e3b85ec
+AdditionalInputA.6 = 06723280ed45380f387717b4bc0fb564fee8c8562c9647de11561e0b558692d8
+EntropyPredictionResistanceA.6 = eac1ccfb6b36d758f20ea121f74653ca5c1df5ee2b878672b8be7f0a54ee8ddd
+AdditionalInputB.6 = 6cf763796a974c23e0e1beca4a6136f977d567810d1cba5198d903a528ec52e1
+EntropyPredictionResistanceB.6 = 54b4a1d8e7bd5a33309a55638fadcb0198e904bc5e5dfec2d231f5f732ca93c7
+Output.6 = 73731285edf43dcc0c3998d747b5b2830f966153883d20bbc32e60733cd552af89f63aa6ed3d2602f6c0f613250e35770b41f16af82d566ef12fb377ab9a9ef7cc2e3d58b6fc87df4e47e7a39905a855029d9a14702a27d7071291b6380a0e7d19b81bf8dcb2f9ee752a28392759cc8914796969ec6974c20ec215ced1d71d823734d7a3f796b2e0cff002e21c7fb0912ec245a7cdd84f663d82bb48590dc61f03331a78fb7ebb68adc1aa515ffa3ff5b0dce4b74c257d6eca42402d5dc490f43ca1476d75033b6a43e66920367ae8a6924922332264e31c825c53f31a1450e3b68567e47eea5a6f75d0640c15dbe99ab39f90b488880775959e6d75c73203b3
+Entropy.7 = 5f80c154ee7003f3d8c790b9bb20574ebc1364a7e3b6e5210f43c013cf0a4a51
+Nonce.7 = 86d55849b2cf88249ad641b600f46d35
+PersonalisationString.7 = 7e0e180cac9804e4a5e9d9f6bdabf04fbaf3f3fd0bdaae8663720155e0eebdd7
+AdditionalInputA.7 = e34612228f9804c62051154c5705d3d6a9ee4e23482984b91b18bd624f6218c9
+EntropyPredictionResistanceA.7 = 62756e93c273f5745bd0dc66c92c0e86c0c9087fa8da46f1208191586e8294e1
+AdditionalInputB.7 = 907a19907db8ed03e758f64be578ff551f2908c4ec7cbd77d899a5e70a1b137a
+EntropyPredictionResistanceB.7 = 807c628d1df80c0f2ea50910ebfe2e7b4117e68a6ffe7a2e98759938f9169646
+Output.7 = 5d241c013149d4790ed4c393c95b97b733a98f64403910add6567444915cc4eb2851ab71f754c7b4e96b9ce01ff877191ac63bf6437eb67e5b2636cdad74aa774d9e59126185ccfa5f3a7af2d8d8d72d3271cd3552d54b2a1474eb4684461960df84be703a17cafaeba426de1acba251a799452f32252e9c2671ce88e90a7d60f782f1d0095521104c5bf0023cc3a1016dd4479b083f8e39b2233f12bccf19e66570c2f23e36898c83cc2f5cddc120313f7ff39708b75ace73d7bce9dc1f871944a6ef3af3ced2f0d2d31850eb66100f65c5f679b6f80fa765571846910aa0991279128f4e50be7bc3620684fb605fa5a51ae4b82c7435aa6f726026630d96c4
+Entropy.8 = b17c54b1c99713561f8ac64357e3efc6882d4ef26cefd1e057618f84b569b240
+Nonce.8 = 2b587871d97a1959ddffaeec18f3619c
+PersonalisationString.8 = 6cb7e9d2b94dc6f001ca72256fc58c55c8f0903a282185d25c54d8d99ba5d746
+AdditionalInputA.8 = 054582ddb59c61d96411357769e657b35d4cab2136b66c519b3260f83115b994
+EntropyPredictionResistanceA.8 = 6a0f08cee0d77b4776bd80a13692259abf544874e616258943e5549f406d5e46
+AdditionalInputB.8 = 26c3653b14e27eeb14282460627190504a2248935d3e9802d52d333e054c7147
+EntropyPredictionResistanceB.8 = f7c9ad07b9fe507802d86cfc9738d2add0b602995c0e8954a414f47f5023dd20
+Output.8 = 345a20ab5066885c98d771ab379d094b8e73d912fafdfa942f50b7d79b40ede585ca04f942f31dda3949d5fc9cbdc033128a89cfad075058e7dc26049ec0fd72d6a1a0f8f1a202ed1027211d33b29e932b18bdeb1305e3b7e610ab019cddd3de265ea995274fa30c95e1dd62653bbe3fa156308eb4af7d50ee853037ff60fea2e76d173a840f4eba587169de45c9ca447a1ac9be3565b73972575c86b46138cf75f3ada11c25cd8e8c2db196066c1ec592c4ec8d68eb4c55a0efacdf4e72ed97438f0707921416e1fea54260a69224d5ec177cc43cb14cabe9edd90898bd3555b62ac806f4eced058d3af37be9fe02946eeab108f84afa37e3f0bfb182e1a740
+Entropy.9 = a16d04bb5dd86666bb0478eac9602bb17880b2dd279b8b37a8cb755bc499467b
+Nonce.9 = 23dd7875f4eaa8f2623448037855cd36
+PersonalisationString.9 = cbc0803c2e08ac04e435cfb27839c952044c79334288029239530f56e473c059
+AdditionalInputA.9 = 03f2b455a5a9bc27e00ed55c03db35a38b72ccac9e71a6921636f2a208756eb8
+EntropyPredictionResistanceA.9 = 886615745d5ec64e45759821cd7e12df300e2ab00916a34ef76383d471eb3794
+AdditionalInputB.9 = d1280a7e0c4efcd3c56ea25fda1ecac6003f4ecfc64946cfe87a0b5247f74e4f
+EntropyPredictionResistanceB.9 = 123261dc5896e4fe3e7c8752361fbedb3e0c57f5204d7b258caea6f620845e2a
+Output.9 = 8cb8c4166cf42a97cac1ffb9058ad4c28fb49470208f8c83ce6ba3abcf08163dc6567ef712ccc64d774e69cc66607c28ad9320a4873def8807269db5ecc1e3df7d39816679d793f84dcfcc8641946e5eb71ce26e80f21671785f0d91c57bbe99cfad7dcdb368a16f02ebac05b76f5084aa2965793b8aef34dff28d1812873fcfea3901fe408cf72821e0e69bc4c5024a5b9ebc1139f5056ffa0c9683c9bf7165b20e58791c196d166b8e897833beba2303ae49bd59edc576e70938d6dc16731e056a7ad0042da4ad378a05cb99ed9567618a3c4cb0f99b83528a423c6ef0fad3e46ebd5c30aa7f1b0ec199aed7b57e48e41d8bfb03891102c8b8b9b3b0bf891d
+Entropy.10 = 7c87e3f926d15b37b1a77ae23a65d2957453a536168412aa3bfbf91762b6ce93
+Nonce.10 = 75ac189dc52487b062402aaf799d9f00
+PersonalisationString.10 = f52c5d6862138dcdb6dfffa428f57e4d18bb48252f0d0d980ee7899d523d8886
+AdditionalInputA.10 = 013ef98932a022b2afd594136318b3e85e3ea8e584a93999c9ecfce8135b7d98
+EntropyPredictionResistanceA.10 = 960b79eb755f9fc719291f1aeaf850540b3db10053f21c457350519207337fba
+AdditionalInputB.10 = 43bf2350b267f3de1c7c364e9b7217fb9b1f255c8fa2e83569af5aa79eb99eba
+EntropyPredictionResistanceB.10 = 31f7ad3ffbd29a0e7a077a2b610914a0e0488f4463b6a44b76a82620b60b6562
+Output.10 = 8ea342a33590fcecdc6eede4c996609c52ee8899db7b2e909489548bfb0a76075f7ab15b78a2e1046224b71e6fc48d2d60c6ef9df505e5a1d8d27c64ca5cedef6dbe11ee85c38474ae0031016b868a3d6eb14675a6b7f8a47450f0cae7a6eeefaf81d5124124143b010760ac9893d206542175055d31b59765388db3b90ae69d8d3455d20f6c27529a735b176f7bad6cbbfc9bb6ca1d0b72c474ef45268f9e919bd98ab460dfe397f7dfc609e05644bc6c096df5516db478337810e0917f65b6f26bd5b77ddacbe2cf12c56e34a49fcea18762ad18884aff03812505c81413c63bd7b311bbf4e1d56bc87f55f196c6e5a0d14f5e7df5d78992200643788191bb
+Entropy.11 = 37f037117ce0049be6d03f38f71b415c7d0078f16c28affef0ea1b825eb5a448
+Nonce.11 = e3695cbbfd318e8fb358ab1a701e8dcf
+PersonalisationString.11 = 2720e35180850b6a3bf8351e1c245b15185a4ce858c4ad3124e5de75a564529d
+AdditionalInputA.11 = 5beaaee3b7f62cf6efbe5d3729f76c0f5931f6bc6e3de76845e6a98dbe2ab0a7
+EntropyPredictionResistanceA.11 = 2f2c3bbf1e3cb77208e7e7ba8f1eb31e0f4ecfdd9e06ad3297583a058f4abb5c
+AdditionalInputB.11 = 9dea58206c054be69f2497aea3fe9e74d9a0fd6b937fe7a3d330d0a293897c83
+EntropyPredictionResistanceB.11 = 265dc1ef9da4166fda6f91beef0fa86d0963783e0d02ede66d39509846a2c7eb
+Output.11 = 5ef7763f30e6cfca47bb37cb7c0ce647be51c97812e4eec13cab2f2cf94d7de0b7f307571e0dc92d30f9526e6b54ae1ccae85c5e6adf59a045f8f6f08fe010aca56f7df0689ca079324347886aa2b4a018e76354c78fe8672fba10165cf2b5dff9a750142375e3e344e61691274fe28143eb2d2aaea506c36d8df4770aa2c19411b2cdfb8ac243aa8f8eff2ea2a500134f0bdaeebcd3cd7c79dce211362e130ee65f19fd97338add4c9a5aec4d67b522c9cfeb3010f7e1a4645f558f8b1418f3c451eef7ccaccd0c2cb79b39a09d4d1c2357aa0d2d9800226c9fba1159257c2cb1d8a20c1ba229a6763eccd1002f80266eddd1dded6ac02812ce2cc053ea8c83
+Entropy.12 = 0943b96cc2e726dd5414840970c252bd75b0a53945e4fd4ba1122134f0265e4d
+Nonce.12 = 550141da21faba61d0827f4c61ff8361
+PersonalisationString.12 = b3915555ad4e4825579b9e9cc40d7c79c308ba169db4e11f69643a126aa5f040
+AdditionalInputA.12 = 95f71bcda4e6092e2c310b8f1b16aa73ee6f7f11eaf2e41a950eee6a1f68ebff
+EntropyPredictionResistanceA.12 = 49948c1158f91cee4f222273faa7975b22156f903f0015a746d46ffe2d65d64c
+AdditionalInputB.12 = dad5aae1b1eff83201127e3940c8710e2793917b5ebee6cdbfaedf0cf9bd4b12
+EntropyPredictionResistanceB.12 = 2458b559fcf54dd4413297aaec84ea05785aed273b80262b03baa942e43c8b09
+Output.12 = ca2f5154241f2aa0ef2b40cd25a18d8d21e51fd7f2929acf638cac209038e6a1652b3ac144a3ec95a988e98893f7c59e4560988ef5ab5a31686d6f81ff2c90d900489d4db03540060eb51c70cd4130d3fe099d02d108ea377f8a91dc9315b7356e661857512612f771285e554aebdfd3c196e31cbdf4bf50aaa1de0af31806790b4d3784efce17b169fbeec4dd9dd23913a81c8accb1067214f2c269f306520dd28536a6c37f26c0b9e27b22024664a8e770033b91a9b91f0509672be7f735569fbbaa9669220346924d31ff27e3ba9535a6365175aa6130f28c2ed5a7889d498b4f800557d4d0b938af7bf2e2837c6731feacf256f9fae274bcc691eadc7ca7
+Entropy.13 = 8948f023ae1d592906db99bf17abfe40abdc112b82df2a91c32712b88d056238
+Nonce.13 = 7dbe16d3935d1b1f3565de82abd60aa1
+PersonalisationString.13 = f48c551f266cf90adc669ff908938e1fcb2678a8441404a430ce808b5fd9b7d2
+AdditionalInputA.13 = b782c803ffc2ab6db042d2e382057524a65ec659cad737395c09845a6a745525
+EntropyPredictionResistanceA.13 = 3de32ad6c58060740c02226ea57723611221b4f1f7a935f273a532e0ed58cd90
+AdditionalInputB.13 = afce8a1e29052f9614fb685b7a185450e36fee1bc71ca00da05bdacbfc6b6830
+EntropyPredictionResistanceB.13 = 3d22719c8d3852f3f27015736f2785835fd4417ae4f490befdb8d4279e11a04e
+Output.13 = 1bf2e02961522e3cbe23f35d59bcf7dbcc281114e51516cf975fff19871f2fc633f8367d6742c88122131d3adcd8964a6ff008671f45258114fac409cc8c11519efa864d25b6bdd004ff411e433d4c11096217b065488cf340c9debf7a552e98614f1c32d768c48755bd02ce1236804512b098926c661af7fe464e7931f3cc43b5f160ce3a676b7f3bd5005a56e0181767a9450d8f625e146d67236951a21f6c4303127f9d30fbf9a7f940da54cb3603f2bcfc3d947bb4bbfe2fe2ac4afae6e9ccbfa0774363efaf37649626f2f55274eb7d4bc9a6ee99f75de2c8191150cee5da3cabc72a6935b423167fa3988644c158a4dd42fdf99d2903541fd61d6ba214
+Entropy.14 = 19ff497e906d0811a0b7f7758618afab44fce8ed3538abfd101c586a9ceaf62d
+Nonce.14 = 4980cb9983870a35d800fff9327840c5
+PersonalisationString.14 = 2e34bea4c128434aa2859cc33913716bc805a183bb1762fc3ab54489d9bd1c56
+AdditionalInputA.14 = 47dd5c72ea44dbf1d235040b18a821c20fb40b88c0391a5c163f9c902f6c6eb7
+EntropyPredictionResistanceA.14 = be45ca9878247b008e5de8c588b6cb84048c0d90357dbdfc98e9e287912fdb33
+AdditionalInputB.14 = cf2040e9046a69dd9638de941f0090b7535c51cfa9f1c7bb2a56a332326943d3
+EntropyPredictionResistanceB.14 = b871611f8fcb8c860a72c4fd406d4939335a031e0de9f2d436d4736b6b060c2d
+Output.14 = 2d990f0de43d3a4b2930542c27ad27458e8865ca6b8f27fd7a969cf4e2a0323e38fe6f505a2dba488ea6b04365209c6db786cbbf0a7c73b4fd56d24987719db0fdba1a3f07149521dcf5b7759c610da22d151057acefe70df1ccaeb67a975159b8996aca93d7a48096926db4381bbce481277d7ab27cbc0388f0b7cedbbfb8421cb1dc5f2a9c677f62acf96ab25e7e406ce82f5b96bcb471afbdf4b3f5a6fbcb8da45d2258e350e77d4633b0c1da691662dd869909dcfd7c8ed0f54ba7af0f9c038eb32d32b705e51b35bb3c2eeff010bb47ee326c2318b5bcda963c2dad419c5923e368d9b28f25b048a87bdba0a90d98c24c81b6dbde0f58054a41a8293a65
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = cdb6506435ef1c0df49c0af03cb6a1d263fa309df9147e96
+Nonce.0 = 57be9bf8b96f10cdf3718c5d
+EntropyPredictionResistanceA.0 = 4cac0185dad4f8df66fd58c94af70203e4ab5e751c34e24a
+EntropyPredictionResistanceB.0 = a75da23a036ef018750ee7527e88ac1ea6a861fe062491d3
+Output.0 = c1f017b4fd83a3e3ce9eb2fcd6a081da3bb2965a1610a23c225ececae10523db1c7f6aed614f6e70a635b13b198c1da6eeae386fa3e7ed453844f8a1edab2e2b53fc9c27e9cc22e3ed3058e0023189e427a59adeabeb679b82dea9d6c7d66f157320260c50bbd50b30bf32299bbca110
+Entropy.1 = 3b572e052f065ad03fb9949d370db17b179e1333f543b1af
+Nonce.1 = f5673b8f1192cea4349f98da
+EntropyPredictionResistanceA.1 = f6fee99f8e744bbf901093b02743b3029ea956dfa7bb6643
+EntropyPredictionResistanceB.1 = a397ae606bdfb5fc18672907895de94ddc9a990052ed223a
+Output.1 = 700f43d478e66aed154617bf2cb098a56c75e40d48e8127b76989af5f664aa07752c0efb558d9b6ae27ad1b47000e08be9aaf2c14f10b30325b4fa82da4365f032cb8cecbf95011a96ebef0fb9d8cb12a24bb143fc73bc333b20430dc9820ff00c2970676ec3d2670da934827a23bc9f
+Entropy.2 = 68177cc22d31de1685ffd007a5822c2ab6ea531b3464985b
+Nonce.2 = 84f41e2fb6410bd53422c521
+EntropyPredictionResistanceA.2 = 2b390519f8edcfef41c3e987a348b56daa349db3477d8207
+EntropyPredictionResistanceB.2 = 72f9d3f5c446fa2e9b8ddd6a1929e5cbbb637e65e6b57958
+Output.2 = 05052fa76f1200f60fa9dafbfabb69b82cb819626d507d3b7c08c6e9e32587ee24ab57f5038a0dfabc854052648bf5a02945f8586bc0aa99c1b1c42fe08a347e0d766ebe159adceb4ebf697cb6880cd68b65511f17b35997708d44b2fb002f780dcb9022564bae68b588f365fe69a005
+Entropy.3 = 64a1ecdecf4e43cea2aa57dfed42841a61cac44c85b4b725
+Nonce.3 = 3dfb4d70eaead91ee7bd3b57
+EntropyPredictionResistanceA.3 = 2da8c942c0ac3fd052c9263c55360bcaf554230b7092386d
+EntropyPredictionResistanceB.3 = f073c9328fb1ab4b88e7b720843e5809111ee1611144a53d
+Output.3 = 75e436e92240861bd5784dfbf14ba55a79d0636042a4e5f44a36d59de86a3095e87f0035d8e44dfc2322c62b1ebec7c539b370a8ccc697a0c3ac6b264b6d2f711af8d94be4ffe9f535c36b58e44543e92ccdd0dc6eedaa19d789be31226ed740782f573bdc9f9b9c7c03a54251c10f18
+Entropy.4 = 6001ecb5a5ec8c6d086e2eb74b94d267d56649ad117a9a15
+Nonce.4 = a50ce5a745c5d0aa1692d0d2
+EntropyPredictionResistanceA.4 = 84f71c7d469c2950af47159ee8b0cda5a675a078d3dcad9c
+EntropyPredictionResistanceB.4 = 82bc25143343fcf0d9ff31585799af00f4f1b4e3a862d37a
+Output.4 = a13e5435141ef0c855126fddb32882996edeb3be85feeb920c8ab4d96a7fff0651626dd97b47c7543af1b652b7eefbcb322ca8090a86bf8372ad149067096fbd492a5444cc35b885fc5c67f8fd9b4fe49888712c0df645359fa0789ce958716ab46556b8710ec4db6e87ea2fb43a6187
+Entropy.5 = 0e77af4a9ddc3b6a69c2380c318aa7452b00fe4fe9254b5d
+Nonce.5 = 629745fde1014b4433f6fde6
+EntropyPredictionResistanceA.5 = b44c207d59adca21f7459b67a561b4bc7cf2b68b30795e4b
+EntropyPredictionResistanceB.5 = 684494ae15833689dbac9013012d6e28c15ddc73ea014dd1
+Output.5 = 4cf9ac1839e84f60bd383681d47f26191651db43f55b6f95bffb4b6302952b43b2ea760e55afa33cc2a1a1cafdb85015e9646dc22a65c9d53767552999e28b1aa8fac396edaabb1a701453e50836f3835a7649f9f302a1b8d559a43aa081bd3730f33d3b5d3906365bc65c5fe7a75e95
+Entropy.6 = 8e7d612550bd84f2e99371fd64af36e5cb80069f28f46aef
+Nonce.6 = c85dfb18b6c658adeea2be33
+EntropyPredictionResistanceA.6 = 859752fd6e4e92328f63f34b196b28d578765695a5293477
+EntropyPredictionResistanceB.6 = c2a719454edf7188a8a5f5503ae833b4c189c648d2e56892
+Output.6 = 96490a143b72dd6924b7bbb57ce59313a5626642269e7eca82634a6e07351a6999774189ad1fbccf3baf2f66de6ea8f55d49688e1be0f771dd0fc3fa4b7c094cda5caed961fe32466c59ba2818f9114f0de39a140446c841f6b7fe5bef77688240c178bf79fb43a03453537815947247
+Entropy.7 = af9cd1595e7130148dfaa783a4a446d366b0d59dad2a51c1
+Nonce.7 = f5172d4806e03fc0ff8dd933
+EntropyPredictionResistanceA.7 = cdb9a193e49cec18c955f102e022c6b126e40742fc518be2
+EntropyPredictionResistanceB.7 = bb3dd65109b8075c8a106439f4d69bd120756c83465bee60
+Output.7 = 5c41cda996c133b316baf0aa2499b178f94295df4784e5a13a04fbccd12078951731fabbaec45838c59f5ada2f4a6407474c29777e26fd37dacdca1e94e15f5dbd279a9145fd3020cad5642e191fe617a5a58d9a1de9f11b6baf4fb181a7761970d6e15c232a0629853f8bca4e0622d6
+Entropy.8 = 9eec33107dfb12de5b6eeeb4139933ce25fcc8f51e210ae3
+Nonce.8 = 4d5e0cc18cb93ccabe7ee7de
+EntropyPredictionResistanceA.8 = 525f3d3028c1ef43ad2b513df040e20a777632a817b4220c
+EntropyPredictionResistanceB.8 = d01e93ca75450177639a5f37b9a6d9edf30ec5847e3042fa
+Output.8 = 10a6effdb5bd3c1424a2f6b3ea13af4ccf73acec23e7d67c0c857bf270f573504849ad972da3dc06280bf0704c167d81f409a0df0c6634e2cbf613825f9ae9b9d5632ea2f1c5754ce4942dd81ba44382d1ad2580c404b92e3cb04fc9567e4bc2ab2046303e89aceb2e5f5ca7819b99ad
+Entropy.9 = 62c9b1a3346c08114fcc79cba124ba589921dc35bf32d33a
+Nonce.9 = cd75a7efa0f0755d9e0b1f18
+EntropyPredictionResistanceA.9 = e0d787a38923ff098c3523f3112343543bb5c82644cb2942
+EntropyPredictionResistanceB.9 = 00bc8b25265dd274bb771ce21f3605e75a2d32cf4a971a58
+Output.9 = cf7f76bf7bc51f571e078df602120156e422a7f38744a50eda6830e415319ab590b4fadfd70f9d47b28b306aaf31e575e05b9dae47844f1927a4356740bd5546e4587c02a42b3cecff4a945d25c80da20db66e5eed4bcd13a549edf59d82dc4e78199bb6e915d44a08f9776f0e50fa6f
+Entropy.10 = 806339e7f44bb8c0d6714fa50c9356a19e3da2d53ef1f7a6
+Nonce.10 = 8d40ac01a8460f1534116fea
+EntropyPredictionResistanceA.10 = 3704638194db71e90e07326d88d7dd4182c762ae7354c6f5
+EntropyPredictionResistanceB.10 = 4cfe62aea965c5ed36b24e29e92034fddb994408cbe590f8
+Output.10 = 75f1d36b331d091f1a0dab99e95ade4edb2c15a874752c569e91774584c1c8fd77e4cccf600c0e49db94f50fab40ed2cbec275e018015cedf2a8ca5a6f8a398bdaa66e3be2c21edc254a32c600b8264131c19e76c8c7a92657df9cba5b603d9ef01fc2a848f42de324076d067d19df2a
+Entropy.11 = 260dc16db0a509873c2ddd73da2bfde3eb8f71b63c9fb878
+Nonce.11 = b40bf293ad9f27c8be4d5d12
+EntropyPredictionResistanceA.11 = 8b8dec374bc3d47db6d60e639df139620ac1ff43922a3b8a
+EntropyPredictionResistanceB.11 = 5f08eb032f088cd3d4830b0c731852bc16a6add0a7c649b3
+Output.11 = 18b29245903d02af1c97e7ade73ce7fa2c7c568e85f27d96eeb5b8807029c28623c02b715dde012d610a11a248f2923e971847551a5b9fffbac148e4eeb3c1be75f20ce2e10b7cde34d2694ab558017a88e4d33812d38ac6faea7844eb1f35e4dc41bee3ecd6036a204aa9247d9490d8
+Entropy.12 = 36d276c37977e389763ad5c31cee9ffe5a3cea2ae61bac9d
+Nonce.12 = 1002b0c8a20575546e890af4
+EntropyPredictionResistanceA.12 = 574bf94a1ee03b1d4c29d185ba8295500ea835f3c502a7a3
+EntropyPredictionResistanceB.12 = 58c3ebf48a3265f13b6bd5677448c5146ede7678aa0b1850
+Output.12 = 7a398de85417beb6b1fd2a15ca1e470e08d230cc6668a2c87920c843394944db11710ce8e2db96810c43632b7668c64665e430201442435723dc9bd92e59a61fb8ac178480dd8fcb3ffd98152b24abe71438be1420f96c5803d471515de9980a6acbf7a08ba5538fb97d267a4cf53f42
+Entropy.13 = aa7479b83c71b0dbc8e107ee6f7050a0f97b87fb46cb8e2c
+Nonce.13 = 8b3f3bd04532cddad4b304d0
+EntropyPredictionResistanceA.13 = ca396304498f484272c8c53c036c76a01db1502ff79156ce
+EntropyPredictionResistanceB.13 = 51228233bf9c9c9cba61cc007a004bbf72f4c3716ea3ada7
+Output.13 = c7d1105bea60862f745ef39df1b5aec3c424ab10b648d666e3d655460f52eb0a36deabdbbb643ebf31794987b5460b3a9bcfd6dbbc48255a2e9c1b876de1fe810df8b5c96d7542a7e8eeefa17c3f6c9143a34f3a8eeea135e5fa44b0f88b6cd5b743317008967c4b3aa6ae881d1288c9
+Entropy.14 = 6375ba9c67651fe1ec9a9abbd713d3bd098207d877ef55fd
+Nonce.14 = 7e8c52a9266ee24fe6060dfb
+EntropyPredictionResistanceA.14 = c6e791bf03cb41dd67d8d0e6afc88cdb3243c6d8c99ec696
+EntropyPredictionResistanceB.14 = 4b107f56ea9cf896bc58a6409dfab2fa65adf930488f634e
+Output.14 = 9c25b3a34af68768dc47e8521b70dd52bd3243c8c4ca911fc32b6a191e4abb7a56c2ae535ee17899ddd7d3011386c60d4dd1c7a0f3bbc27224e1471e061675d28d726a6463d45612b6b1913136be596255ee2f1cac4f24400bc50ed41a30e4c4dc1a32524617e51ce2fe41a829d164c4
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = cee4b2ffd23fdd02cdd11e9b0bf2b0ca043c750bc75fa271
+Nonce.0 = 1e4fcbe3c2d9a263fbfe9b6d
+AdditionalInputA.0 = 01a38d9c8e8b7d86d9049c31f7746d7e15a13fe704bb42a7
+EntropyPredictionResistanceA.0 = 493097ae458d588319b4ab4611e842bbbc58423442d8c3bc
+AdditionalInputB.0 = 4b613349d9d18bfbcc3d855b00fdc29696cd9988d9f1f8f1
+EntropyPredictionResistanceB.0 = 4f4c4f063884ae8437bf2a023300f6d9fa8a2c52fd4fe8e9
+Output.0 = d15947f645fabd86b691d8b72703ad6890070e0c859109ce03ed99a44202003f7bfbe97e0c14de648895187e4eef480c4dbf0a38983546a5d2d5840f08ed24aea217a7ed6bf3c1ccdf20ebbe81ed3370cb02ba0c0d3155cef036392ad647b5885d991835077b94d42179f46cef2f7ae8
+Entropy.1 = 3d006e90f880dad91087596c28fc6737da6721c3dbe20c02
+Nonce.1 = 5239b56c497917448af87159
+AdditionalInputA.1 = e421c7aa5ce70bc2c413a03cac3cf94fe2aa8e9c9a22a82d
+EntropyPredictionResistanceA.1 = cbb9f96285f42739fd031dea1a1cfa46b079d664132e0f18
+AdditionalInputB.1 = d12448ee5e77fe10b5c031bbdb4f62dc9efe834dc80017ed
+EntropyPredictionResistanceB.1 = 79b9e4425d05b4ca3e165cc009d380097287c59089534f40
+Output.1 = 781728541690b4af7d6f21f7ea53cfdf79983b9cc35d12a1bdecb9a3cbc146c7da4bdd38affab134931e7c1e75b48897bb66625f40adc5a7512d5595bea4b2dcf54df1be5ae63abf260eea4e29e9e3c970ca28294bd2d30d6e1f72a251eb61792d276c36ae7560ae3193f42fd862de5c
+Entropy.2 = 36eeaab6e60babd63f6179ee0258042087f5fff626bfbbc6
+Nonce.2 = 61907a9ef1682a98cccbc516
+AdditionalInputA.2 = 5d540984422bd368a5eff356e93c4ec7b6ace5a7f48a8a08
+EntropyPredictionResistanceA.2 = 1df21473c3e96d2e977f1092a47fd103f28f09ba60c59cf9
+AdditionalInputB.2 = d83dfede6ea0dd84bcd23a648d7eb320b54ccffe0301d86a
+EntropyPredictionResistanceB.2 = 403dc6319e3ce36d7454dfc387bb9c5411734de8cd2db7f5
+Output.2 = a3d3bb9792041434ef77f9cf1f9893f5152ef2d037af5d98224728606c08c470a575f3e61178cf0cebf77e7c043fef405f72661fbdc74abad85d913d1617b6abbc6110cb8c935fa9452ba086bcc4ec310515eff29264e2679f65025ea4ec13d95e1de3f750d32ef708868ebac81f2f54
+Entropy.3 = 70ae82092bef2b765126b70e2843215902d5561694ecfa35
+Nonce.3 = 534544644c59b931d140a152
+AdditionalInputA.3 = 79b7a9787e68aacc8a0f325f638f7e39b3ced90ac0dcff99
+EntropyPredictionResistanceA.3 = bced309a36053a82f4750466880e62f6b34c2688cb927cf9
+AdditionalInputB.3 = e0021fe3958610271930e1c59a9248ea86cce44e581ea283
+EntropyPredictionResistanceB.3 = dd8968933dc025d7a86f60e4cbe1359407bf6846bede7931
+Output.3 = 7b8da81515727aae3832d317f06d8d0d76aa9f698541bfd5c2001828032c17a89c3d3ccf6950e7e4cb96e65fd1f8df8029478bf2a2476f659d7236ccb5dc3e94bd555f8aef932b45a2256041b26a2e45acc344e214c3133bfb5a372dd03176369a6d6456f8c41a371e27c277d589ccea
+Entropy.4 = 54f5a1f47083fd371da3b2b6e026f2b1d6c336e777023c88
+Nonce.4 = fa5b7fabf0965a1980d04bee
+AdditionalInputA.4 = 210066b72db44778f4413ee6b7e0d4e883324f4e23edc226
+EntropyPredictionResistanceA.4 = e26333fd7501e592b8a33de030dbce3b565c8693d4fb8642
+AdditionalInputB.4 = 4623c706bb9b43e747fedf9a0ef5ba756c3206590f447d48
+EntropyPredictionResistanceB.4 = bf6810689c008867c0d5aaf37358a34aff5000fff5beaacc
+Output.4 = 28e9f9b884dd27d0dc8e4b75a0a53f7fe7613b60033ad6667b67b739603dce635a3582c5a043208ea63b1fc4af3edbe6a424a0d273130a60c7f7501146bbd6953d31cdb93f13f09cb4f2511ed0da118ab98df934f8dd14ca31faa948b48aaf687e9115a79cafd5746a31e77df8f30dc8
+Entropy.5 = fd5cbd53ac25db7d80c4f2383d7cc806012214791cd9e84a
+Nonce.5 = 15883b8d3028a8d8c0432230
+AdditionalInputA.5 = c3ee30626c41f9cb6945541acf3fb7e0e4eddd4f05ea0f1c
+EntropyPredictionResistanceA.5 = 6b309c2afe5b8ef5fa08ab33347979801df9c14c96452029
+AdditionalInputB.5 = 316b23a4c13c3839d9b4ba154bb8742376316e506df4cece
+EntropyPredictionResistanceB.5 = a56861f0bd411f4fdcd5a449dffb802cbcc50c7dff76c20b
+Output.5 = 05b94c5265606730e807d9ec68d879461ef5e672029286faa599dbeaea22269afbc45f03e8224c89230a54ebc396997dc340600b0927c433c979000fbec1029df4460fdeb5e0e4a3e5d2114f43e63216ca0d92a37a26980d94495331900c6d50dddc13e170741b0c5d04a5e79fb43c20
+Entropy.6 = 3eb563e9de62ed9e444507993b9d3a9f00d88907b73551f1
+Nonce.6 = 17c7c1804b39a179bc3fe77a
+AdditionalInputA.6 = 96556c0594e4d15c3de10c4910492f45453a5bcca5b878e7
+EntropyPredictionResistanceA.6 = 9331af1376955cfe60612349292b176f1eff606762bf5216
+AdditionalInputB.6 = 555afbca3c94905c6a6bd333b1fd3415dc1186f04b1fcd91
+EntropyPredictionResistanceB.6 = 9e67fe69942972d97b4ded12948da027ffb7d3093fc5532f
+Output.6 = cef5860d76fe43efcc5503b6681cadf664580bee27b1f870c3bfe77f99ece366c8fad8606b34ef4e6dbbeb53a2fee08da5fdebf7f86ebd2fdf00aff77eb7b074d5f1bfc57513e59ccc5e45996efb7399eb3ad96f156448f5f0af9a7b93494363614c89bc5c99ffeca330bf23fea04dee
+Entropy.7 = 759bd314e5c5df5822ef384d69a48acabc83f24c1a1b0bee
+Nonce.7 = 443a51aa720a00f9e99830dc
+AdditionalInputA.7 = fdcb31969336dc92d902a1615f3f885f36447b86dbba0bb0
+EntropyPredictionResistanceA.7 = 61f675078b6a0de88d860c4b10ba6cc5cc32b73b260c5f21
+AdditionalInputB.7 = bc4fd325cedd55e6beac5d55237b174ae7fc9f354fee7cd9
+EntropyPredictionResistanceB.7 = 9d76cb6c129b17b36c1e77dcc44f53ae346a417e1cea3ea1
+Output.7 = 6a0256c5e5a36e0aaa8533ba83753b7087c679a12bc2063cbd84e90178c327b5888c891d066695176114e4645902280aed29d6972053ac2331fd57d4c333ce3b436451479a3cda7bae00eccd06bcfc0c048caaf2b7e5da8fec76b8f7accbfd3484ccd701a27fd66bc3857de30413ef47
+Entropy.8 = 50f022d766e147eaecc48e88d96b729b402436da2884c094
+Nonce.8 = 6d4bbf4db36c8424fdb65636
+AdditionalInputA.8 = 0f52060c80ed37fde5a0148293ce687c8e4674528b80a48f
+EntropyPredictionResistanceA.8 = 546e4a6efba79f63690f909798db105c1ce7d523d14dd3f2
+AdditionalInputB.8 = 307f474aca9f692a4e56a86bb705a41e789b1b98c376cb67
+EntropyPredictionResistanceB.8 = 0fe028f55edcc532193c22ecb362fc1adece281b44950f2f
+Output.8 = 102718b19cebf90178e59a5cb6795251133818ecab7c326eb9ecb3c748a5453ebe9fb111462d9b1675c68b85ce65aa512e32d94c0088ada086362b007051f0af884b801fadd1851671a3638264e7551aeb5475ae5241d37bae969844dda9e8181f66a0e0b96aaffa78dca7c8cc3c1624
+Entropy.9 = 82c800d803e059c45e5e58a58f6edf7802ce595f119de64f
+Nonce.9 = d7d0c1723e4bd29fdc06b3c0
+AdditionalInputA.9 = ba9cc335c1a9e801472ffce6e88af5649e7fa440c48ad401
+EntropyPredictionResistanceA.9 = 76d4d504085e1f5ad9d86d233087ba86230f962e03c389fa
+AdditionalInputB.9 = c8ee498d5a274621c10448ecd34d0a7c4c8268a1f99fa9a9
+EntropyPredictionResistanceB.9 = 50170cd870fc42b073991b9b41befd529e1f2a9497134478
+Output.9 = 49bff71558d2706fc53c41821d5cfcd97c4068c98dde9174dc95944824e561c6a8a8aae5725fe54fb97a2df948207a98c12a4c75f16d932b1d91a9a6ca587d7ea47b2718fcb4c3e7f3bac6662704358a455837f4c999620c85f6255c9e3f852244c36674ec438cfbbb5bb485e3ebb89e
+Entropy.10 = 2bdb171cfb6ce4153b82c34b17b97228fe49f6f19403cc0c
+Nonce.10 = 8e93038f7ea92f0a15833ccf
+AdditionalInputA.10 = d5a9095c21b261de41c8ae0282fc4def8d2a6cd5e54fb889
+EntropyPredictionResistanceA.10 = cb0e7aad1264fed10e811efcb4c247c1766acd259690e6d1
+AdditionalInputB.10 = c9c8558b37b9d8b282f5e8737f03f1bad8d4b6ad5c6e6265
+EntropyPredictionResistanceB.10 = caea6023c2cdfa6bd9ed737d084dff88de1898116bef5277
+Output.10 = 308dfa5d0473a2fc6a12674ee8f2c163d65f090ef9811a92ed0cc50a497a5901c8166e5a66216d5633dace4c975aef9a602ff74846542534fa62f23b80205d2a7760af9b75e275241c74411fcd7ecd4bda4a0f1f0026d471f69e77019ed6f49e20ef7ee7fce49285a4eb1c4ba606b07b
+Entropy.11 = 6b4bd2e8d8b27e108d59b0a7e25fd3137a4f7c6311a994ba
+Nonce.11 = d0e0cf4ae03bef5a1458d8b9
+AdditionalInputA.11 = e3a4673b7b76a9f32d1fc2cc84d78baa40264c2b368dc3c9
+EntropyPredictionResistanceA.11 = c9037f958e9a0c1e79ae37ce2b1051dcd4ab6bb6cb737a7e
+AdditionalInputB.11 = a2bdd3172babc799f09404cef1b0b209980fb5aaf00426b5
+EntropyPredictionResistanceB.11 = 707eec22d0c601fcc1e4f2489a9daf02bc625bf720c9cf37
+Output.11 = 0f7c21ed550b34823703c32b2501aaaf9457aa2d17d58f3eab7b3db78bfdc14a0ec1019dbc6791fa9320db48dd5784df522a502312452dbe7db650ffd90d1028734627302bc50bf2a068f6a2ae8357ceedb0ab329fd4a89f01c34749a85df14e6b0dac5806dddf936cc01046eed8748b
+Entropy.12 = 4ef2b6f4a8ed8406b9ad78d96e140339548e7d19480ebef4
+Nonce.12 = 4aa9109cfe77449eabac3b37
+AdditionalInputA.12 = 5c6c265659cce4c180310648d0ed6ad706ed1e2deaf57f34
+EntropyPredictionResistanceA.12 = 9d23aeb70bb748c02a65ea4357a68defda659975b04f0158
+AdditionalInputB.12 = 70c8eeab8be645ded9c3fc37cca5f9c78346b5ca6fa5ab2a
+EntropyPredictionResistanceB.12 = 223b88ac0785c8f107f6c5d8beeb5dcac8b99e9db7489594
+Output.12 = 5796b10a1523ec0e85b9837c1b149b7d5cee6784c5cc0a390d708a8bd68c817516e33e4356e693e69687a8f194e5604a37bae89ff4fd7841fbf0c9723704fbed5d979408e19513d71485413188c42bcf22f26e420429776e3492ae9a0a0b5efbbf3492e9e02c4be78fd8011c3eba16d2
+Entropy.13 = bceff28b720939719071dde3a23227cbdd323f7cc8fb2eca
+Nonce.13 = 4942904855e7fc5004180849
+AdditionalInputA.13 = 008ff0ac3d1b1b01648331c7bebed4cc1b5ca1fc3f90a10c
+EntropyPredictionResistanceA.13 = 26f865e36d7fbbbc52f7d2ec0a8bf19c3ebee08c25664b55
+AdditionalInputB.13 = 590cbff53cfc8b9696f81a64fe2efbd70ca78426d2bedb02
+EntropyPredictionResistanceB.13 = 28b67943b43c53e1b996500a1e3fe6f164acb32a7b970f1f
+Output.13 = a7190bed054be033425bdfaf8832a86697997a650dc15bcebbc93785550315094e54c5ac8ad5d9637a75e9f3b4d96b60bf8eedd3b13ed9f31a830c85695e9d708479f960faf339df1293c60c6215e16438586affefec9362bde7fdb617b00a9b4f2532d1d094312a43592619a8c2da67
+Entropy.14 = 11c682017d4a5228346cb4a611c81bd76a8f6fba89ab921e
+Nonce.14 = 2f1239f6bdac269b525f4c32
+AdditionalInputA.14 = 2118a01306cb92a3395f27c1470ec485405ca571c6737376
+EntropyPredictionResistanceA.14 = b89bfa970595bafe7dab287e461c908a9fee286dd1dbdef6
+AdditionalInputB.14 = 67333be1a1d8ccfeaf0bb6836abc101f9be86f6584168b71
+EntropyPredictionResistanceB.14 = bc9be23eb198d7a9c821bf848dc659b6c5c7b001b388078f
+Output.14 = 9d45b149af6ddd8231aef5d6ac48dc80cea748f860edbb447c3e181be541c0cc384bd2b3d39a7dbda865cbae5da0e6e9e4230728a819e1dfb9b7ac9b6610ea5fc42554b357f4f4b2d48ece49fb86127d5669cb4d361be9fb22c658264a850bd927252ce83ad57e7373689acbb1b2c266
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 3e2aa7d49ac5120553ce0b2666a3ca5b2a66800de4d18747
+Nonce.0 = 23b16617cdabb21df6327413
+PersonalisationString.0 = f9cbcb7d670f31666f0b94339bbfd3f7cbf49b64bde4c6f8
+EntropyPredictionResistanceA.0 = 60556d46cf8fa2b8fa8e40bb889a32c9bc1cfd6fddf64f26
+EntropyPredictionResistanceB.0 = 759ddc50f4ca3a35d8e82fa3b84ac8cc680fe8b82ef654f4
+Output.0 = 952cc455fab3e14fcde977e120d9f9c6ba9eedfe8dc171286debf10a2bc46e41fcd80da636e517bcd08d36e9dec42819d647529fefbf55814960405c93151f8beae5e179aca4f61b95cf4ee4c4e1b61f2ca1fcfec2046126a37b644020a8cbd22037a878d4ad9dfe9cad3bcd5e8c36e7
+Entropy.1 = a679ebd0b1cac6d0f35d98a450c9364348d4d1a58dacf527
+Nonce.1 = 11f445d6080313a9ed328760
+PersonalisationString.1 = 5e3b7cf645f809939d2191da8c74f0fef63ea9b756237995
+EntropyPredictionResistanceA.1 = 39e368a332946f287f031b541a9f0a8a4436b093985b31f4
+EntropyPredictionResistanceB.1 = 03772466bf31700340ceca5a97a3c08452b4a37e1bcd00a3
+Output.1 = 675416c728d5c02981ca9e8c97ca105ffc7aac040bcb7f9d6b2942f8d691f76ac057f22dbae4b5f743935c306fd9a47eb6503cc3f8ae2f491840a30eab1081c7adb9ea6436625fc19777f6f38f6941152b4dc2da200d6ef7c1bf1985c18cc600b5815cf9080a4e531467776d262c6b22
+Entropy.2 = 707985d93af7b513a7ab76c674f8e1c708f062d7de734761
+Nonce.2 = dd59b05fbc940907b84a715c
+PersonalisationString.2 = 493676e2918a15691c429bd1412b82d14b9f0ae298905dc7
+EntropyPredictionResistanceA.2 = f58a35d2894aed2c1fdd2f90e4380d24d3e271bbd9f19b93
+EntropyPredictionResistanceB.2 = fd73e76837a714e99f2ca5214124aa7ddf9285d2bac29375
+Output.2 = f36a7475272ea97ccad8dda4d11ff4521e1ab168f764d02ed3f7763b884a97123c966c147ecbb283d6b80a90411a432c35233c5deeb01cfb41f982b9b1624c83fc592f953a326e8155fd2b8803e33e9b086c5cf753c8715d7776cc2eba163e7fb2a25d4a64dd5cad62c11cb2639b52a6
+Entropy.3 = 416e38c51f4ae688f4c1eaafc6f3a8d7e597b0101763f94a
+Nonce.3 = 468c86a32ef8b20d0a924745
+PersonalisationString.3 = 03ad60f30435eff8be1e0c45b03b0fe7ce507b09c3404202
+EntropyPredictionResistanceA.3 = 2dbce1fb56dfbbf5979b58dd6ba3ca654a9eb47462ce0f8d
+EntropyPredictionResistanceB.3 = a594755be8d2e8d2e55db227326d7dc328e2a507a99b995b
+Output.3 = 56e28a6399be71df75e3c5033a56a2fb8bc017372b6cb9a2826c8cd5be92557ef5ea4fe6774522ad316dd76c1007a8b832627c096d81a75554639411c44fcec25d55b199891949027161842e7aefa207380520d721d26c2acabb994d833cf9f527476e93748c4a244dc5b0c242e32fb0
+Entropy.4 = 302a7b03fe485e397dfc926956522993327830cb7e67fedb
+Nonce.4 = 7b93d71156851407ecb13648
+PersonalisationString.4 = c57ded54a71b564d3a5440d924946f7db25ddae914142e71
+EntropyPredictionResistanceA.4 = 4d7bcc5fa49bd9501250edb5b963f94406c1f0e546dca831
+EntropyPredictionResistanceB.4 = d80dca86fc5e94a17f3c64eebfabf1ea6e65c39f92e512a3
+Output.4 = 67ffb43197fbc8fbdb51ca45111e6f5ebc75c5a545c85c7f3f2dc6b99d94a7d208384cc822ac9fd5e0ad61990ebd9573a8401ea840e3e2229a3262f1eb340fec9f4625af49bbf4d871c49febb680417b405fa2c24e5c15cc654f487efcf34985b5d2985810641f0498ad3b6847a7595d
+Entropy.5 = 1ba533e5e468889a56956fe4e23b11e3d701a58aba4dab2f
+Nonce.5 = 08a252e156bd5b94324fe22a
+PersonalisationString.5 = 4fedbdd357a8ed78f4df8f89444ca2689e626d85bc89651a
+EntropyPredictionResistanceA.5 = 4823f133ae206397efb67387307847f6d8783dd1b69a6b0c
+EntropyPredictionResistanceB.5 = 89109fd8307f3878d832288f697a361a87272df92beaae36
+Output.5 = a47e308b24b5ec06241687bc8ee1bb4e67dedecd00fc5bb022ef5d80d5dbf7eeab2787fc9c17d6f21708b21e4235da39e28346c2ed8a0716f4dc9d9a196a522fbab8893eb6b670a15127678a966fa3dddfade423cb42d619cf323feaf253af00248b8ae8ed24564b5245250433e3ffce
+Entropy.6 = 67bb0b01f301465279af5c412176071e31de9d29eb92207e
+Nonce.6 = 2f5217b2870dba0ec2636a59
+PersonalisationString.6 = 013e3c2f3282d0fd946dae5ba20d6287104d1e91d1ee1b86
+EntropyPredictionResistanceA.6 = dfaab80c5fdb2c12648dceb170449a52621a4e3826fc16c3
+EntropyPredictionResistanceB.6 = 9c82b18abb5fe1f0172c53688c701636e96bd39984509195
+Output.6 = 636024408086593353f7b4edd9a9097e98d29921ad2a28bc83a5bd26b42513a67bf5373a2e2fb3e322af85981da863647e399d3941026ac1ca8bb55788d9fe3b45bd3324df2965a9b42ce5fec76948fd9adf5c0ac8efdc71f3071b6a0f80ee19761444a10413154cd34b0157cbd95005
+Entropy.7 = 7abc433eaf1ce5c3fc45aad64a65c3acf10338c5d192aca0
+Nonce.7 = 0594a94809315320c30cabe7
+PersonalisationString.7 = 9d95c9e4451395a7cb7415718da0d537adab8795e49d8fd7
+EntropyPredictionResistanceA.7 = f14cd97a6c1067efa55079a8f974c7489f17abd17840a072
+EntropyPredictionResistanceB.7 = 0b369f6fdd3f82c35c42cb69fd55bf494a3b5402cae1894a
+Output.7 = 468db2ed90c2f844fc49218b28009321a224f0ecd38740891e6615defceba514aa132fe206c3a1fb0e5ca5da6c0355746d7b799eb6da81b8e8b509b7f9fc36ba445256c430c40599d199b9bc3b63c1b86a3ba8cb1e4b78b8b14a31ff66ded2953a129311be2ea843537dff9a67a25426
+Entropy.8 = ae29d79da15b1de002e829a94118244aa4d94261e7778d8b
+Nonce.8 = 422a18a83ab5b0854731e619
+PersonalisationString.8 = 67345552b43e4a226b990f30d1e41aa00c69679ba270d674
+EntropyPredictionResistanceA.8 = 2a4343ed66fad40317ca8fa132264f22166a58963c860c70
+EntropyPredictionResistanceB.8 = 8060a3858eec8ac6acd976d028f82b5d2fbdf10cb52be472
+Output.8 = 0d63a2209253119e75cc429fd661b5b3a9e29dddac8efc1a5a7fd551377bc4f43573080b057e11db5551e6b5c1ade11d3b61310ad79f9a521c5106cca6ea13bc645e3093c8a1bb35dc8550d631e184b126c4eb6831e216d5e2997f8024f55dcec60377b6eb3594d36af4be5579f86245
+Entropy.9 = 67dc0c42711931b9661b4ae5e6d754085a6e333191b0895d
+Nonce.9 = 196824f4c81ed15b88a619e2
+PersonalisationString.9 = 71c89a9d8999fef864102ab5070751ab48d39237bac5c57a
+EntropyPredictionResistanceA.9 = 7db510a3c30168ce35a66ac7b32f8111f69ec075609d9883
+EntropyPredictionResistanceB.9 = 4419ef963580a3ae089177da9a97527956bf4867c680f257
+Output.9 = a44d7c5e7196d9b007b95068c6e6a219e8fa0925f49f372221ba179d7233f92ae26935584c903970e1c7bde6973c7c52632d6dd888f3fee3f6e51fdbf730e195cf945fff084e5486efda03e30116773a611231eb3af0b544079995dcdd1c1b4e64307fa4cdb81b8111f61cdea85283b1
+Entropy.10 = 4b50eef05a4cfc1350effea4f94401c77fca3f3cfe8b6bcc
+Nonce.10 = e90567b3e2913a9d65cfeed6
+PersonalisationString.10 = 78c85a5a6aee0a31b550b30a0f3fa51cbdee87316f9f39c7
+EntropyPredictionResistanceA.10 = c4f49ed1053e3413e404dcb02e1cdf0aca280077299d8d71
+EntropyPredictionResistanceB.10 = 3286a086e43103977db53c1e315c73519e7c448e15514df8
+Output.10 = 8a9256587cfd036e52df6db9992f4ce4a2e8bba205e12032d46bee62260fded46b8fd2b1f3619c652c8920a862445a727b0752d17ab888741fd7276547dc16995bf76b878df283b227070bdf996192db444c1f8f8b042ba7aac4a61eed0261fdeadbdecdd671d192ac2abad83cfa4ee5
+Entropy.11 = 0c74d0b1225e7d51e2685354927e633b1d88ae4d0f6c7b20
+Nonce.11 = 14b4d1e5c3ac6c01d984372b
+PersonalisationString.11 = 9d04253198de9fc597cbbf4d7c00b0f1a8257af3e470137b
+EntropyPredictionResistanceA.11 = 1d934bd58a1e2eb37cf665560239d733c5fe05eedccb2ef1
+EntropyPredictionResistanceB.11 = 965f32526fdcff186d8269dc63feba25bfb404d07792213e
+Output.11 = fda2800d807932f6324c6bb089bc997b63a4cad5cdbc5a9e74c29d115cac000c4ed3496698772a3289a790d8357bcb2742aa079a3409f34a854d5273064220ce6633e336147535a7dd2ae6b8fa177cf450f73e5486ea7ac74443d766d4122d70ce9307da94e38ba05d1c2d15fe340e0a
+Entropy.12 = 77bb064598062e55ae952a0db5f05b8d4f4fe75a3b759bfe
+Nonce.12 = 653dbbd9f6fcee776734b313
+PersonalisationString.12 = b3b5b99dcd07aa5f9f4f9b0cd5e3ee8eb47864d71c83c2b5
+EntropyPredictionResistanceA.12 = 5a7dfad2586001c7730de9a16a279689539ab1a02d587716
+EntropyPredictionResistanceB.12 = 1f46411c8bb31b6cfe63a5bd8f0b911b60a29c1808814efb
+Output.12 = 1252d6755847d532d49f61e6121d30b073bfa6728c129ac74826fe5711b032b0e6a6dce903185db9c73a077a970d076ee51fba3d29436f2468d26be9cb8f0fea6355365aa66a0a3ca91125b1edf66145a760460cf45b1fece394a7a15480c19006fea95a08e17da00efaafa1a8633f01
+Entropy.13 = 21b09f390af3745163e64b6bc5370f16278ed74f31996d49
+Nonce.13 = 6fcbd023301861817fca33e3
+PersonalisationString.13 = 02e319b9ddd9bfba2ac132ad22fed543ab536d7e8303951d
+EntropyPredictionResistanceA.13 = 05138798b940ce3811016437e8acd414ef8259c49405c043
+EntropyPredictionResistanceB.13 = 41c0814aaa648f165a6fa11ff59e557d3971567581deb400
+Output.13 = cd176241e48ed9f19226740d67e0a51ea60fed087338f9e6919270b851610dac5e8da8e30de9154403580e9fd8f7d53047818963b552b6230af976fcd74b0ddef7bfdefcc64df43f54e879d4978e9e064aa115c5f616c8815675660840257ab0ccce1261b0e73eb8f983c8fe21195edc
+Entropy.14 = cc1de8bb3b193fb4e1952952514c0ecfdd0242ef384890a1
+Nonce.14 = 9f350b674445b5e9d4476e25
+PersonalisationString.14 = 4d4e6d52e14ba63968b02018a3f8bd3e0fcec18f06eaf57f
+EntropyPredictionResistanceA.14 = 1faaa87f7d4767c15792faaeff52c850e7d1779819fbeef3
+EntropyPredictionResistanceB.14 = 79cf8e36b1ea35077793e4dfe4e4cc736fc8071c72ec9ee3
+Output.14 = 356c2bc25223d3f536b075f7052d29e1f36c3dcef8b09811f3bcc18fcd78fb10115b6779bec0dfedf1563eb9024fd38e9083c1a7b748b05d61c99c14b7a57ebb121b5ca9a83e6bfbd4be01a24185de86a9baca5c9e8b1f59424bf77b9457e3829de9c44ab10c5966dc59ba5884493980
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 3a998d0465ee93c0ac282e46a4a4c19556ac312f1cb8a211
+Nonce.0 = 438d189a78d5e2afff33ac68
+PersonalisationString.0 = e91aae9672fa87862528fef120b69b1e1cf6f1eef75abe72
+AdditionalInputA.0 = e825ec87c694485e64b2728cbcb64a0f15b6b06529da3ea0
+EntropyPredictionResistanceA.0 = 1c69567b6996935504a736d9d5c278dd087be470e7bf7f14
+AdditionalInputB.0 = 5c9b5ba10a0bae855e4d2d8a1c4ddc11cadf1c48e42b6ecb
+EntropyPredictionResistanceB.0 = 50950a6599a33611e048054eba630a55453a33ea9d73f1ca
+Output.0 = 6aa7be17ed068fd877b882b4d712cc8696c4b6408f59e94b292870b90c6dd59f099815f753a19c45d3e663c703322d38a160759b23b13dd032112709660ddcd5727dab39b37edc0ae6ada13b50af53e759da7ef247cabefbe29d433b40a84be3301423ac9fb27d06d961fe958bf7fd73
+Entropy.1 = dace0d229e43f5e3dae5b67abdc2358deeb9181429d4d579
+Nonce.1 = 075eef88fe972f728e2b7797
+PersonalisationString.1 = 6156c4af23ac537bcce4a424779110e02907180d46e45e8a
+AdditionalInputA.1 = 73bf011b39a20983d84b63777710ac255a50df801ddb87fb
+EntropyPredictionResistanceA.1 = d6535e1c5bb9d62e8012c4b9bf2083b39ece2f7e9eed48fc
+AdditionalInputB.1 = 496011a046e58d44d5a1187a0be6d9e877ba872c89272752
+EntropyPredictionResistanceB.1 = cab53cda7e56ce7db5c1faf395aa0cbdad3435370ab37253
+Output.1 = e474a28cdddf9d70e81b10559c0bb1832ca5d86f54c5eda93b52c416915adbaf9f7eb35a4e630e4616b21ffd05a445d5bcd5056ad69974b66c4cf1721d6a20df97123cf0b3a537d44f46a244d6598d2f72d4400045bac19d28ccfdc9903223cc7a08fc50b402528b016cdaf9262ed6ec
+Entropy.2 = aef02b0c9e17db68c92b6061c064a61d62376e49c3487875
+Nonce.2 = fc6f90ca673c35c93203cc98
+PersonalisationString.2 = 8e77fdd12345991664bb310abcd702a74aea0dc949c5a79a
+AdditionalInputA.2 = 5343e3f7e1dd9ca08ecf93d922f4a2942f5cadd3c85ad297
+EntropyPredictionResistanceA.2 = d4c7192d26c057f17323157b846289f9842da56c13dc2171
+AdditionalInputB.2 = a2b833d764f3d9cf880f856c7b0e357347783142e1e48d6e
+EntropyPredictionResistanceB.2 = 3a884ebda9a31a53e5f16bc2dc4758ac6d314c4a6ca72eb3
+Output.2 = a1a8de69d31f48dbf59e902f64fed089050a0fbb7820062a77b1e40e8e79338f93d09b97b08506a79a5647135c2e83b4f45522792496236846cfae99640aae21d6c8148f6cffb0d09898e58e5ac6b2c9d670761054c32f5de0e1e2480946b928a061f33cda9a251e2f6637c79c0083aa
+Entropy.3 = a3e552274771f3fd9fd7302a1c60d86e4c7f663c01cd8af1
+Nonce.3 = a2500c207a82ebf415f8fc51
+PersonalisationString.3 = cde35ac921bf499a8764948324264fe88fc58270d654b7c5
+AdditionalInputA.3 = c9263a1052ae9cae9bfc5a13b33f3e95fd1442c4254de491
+EntropyPredictionResistanceA.3 = e42d2c6c50c14df35d2433de84faca4efb523fa5088c6127
+AdditionalInputB.3 = 9a392d34028a3864faa8d6013eabcc18652c253ffdaeaa23
+EntropyPredictionResistanceB.3 = c652db400bf20151a7f15114ed8d8d6cf48c530525b6fa29
+Output.3 = bd31ed02f7f8cdb26876681c4bb9438e6e8761e8ce8c61bd32f0281a42142e5690d50063ceb1d5feb5e3846a14c6d824cf824de64825202721ecb0d2d9e10880e815350db39e6d7e408ff951365a1805aa2641c4a9c09113b2204de89c594524a115d24dcd4d8a874da7c5118dd62e9a
+Entropy.4 = 7a221beac3ac9e2de0b570777db7139e1ff152076140ff27
+Nonce.4 = 4ad64b29e731e71216d3a35e
+PersonalisationString.4 = f672845c297411a3169a679a2c2bdd6ffbc28668612cb092
+AdditionalInputA.4 = 72a55c21e7276a42b9a06f59892020174b9f118961924f46
+EntropyPredictionResistanceA.4 = 91112cd269e79a9499eaaa961ada9419f50eba1239c35b04
+AdditionalInputB.4 = c5895766c67037cc9999553f0a1d71a5b41245adfb283c5e
+EntropyPredictionResistanceB.4 = c3b4699e6784609e5e83617d42785d352194b28d0c9fba08
+Output.4 = 15a2fc6202078ed93aaa8778051019286b09288c01be4478b7581b6493461facba6d8f396b55b1c06cc4cccc4aa393c839824aa45d9355ec7ee5f4f72d86aa4460e964f05a2fd7c59d7170d58c1d9a48d69fb1989002dcc6faca4647ead13a380a663a909e4e3f16d66af546f12efe5a
+Entropy.5 = e381d984d60aca4670bf2fe4f0a1df13748e141e174751d4
+Nonce.5 = 8de904ba7f0d4f166e71ba7f
+PersonalisationString.5 = 90a1af796731dd2742cd1ac4f31b53aedb0d1991b611c74e
+AdditionalInputA.5 = 520f98813fb89dffb4f83d10e9bb5f6d50767e419d446e60
+EntropyPredictionResistanceA.5 = 2b26410d2f3c9dec0250e8285a02ab307bb3c9b0436e1067
+AdditionalInputB.5 = dda17f17a4da547c92b460ba067ea50c360385c0db3de2e7
+EntropyPredictionResistanceB.5 = c6ce65b089d90dc964dfb93449b8a91c3e4db6cea6234b66
+Output.5 = e00ac31050fafc71b7d17cc2443d311a1b3c44c467a1d4efa8a2777a425645336152c9bd0d9f1354704f65d264542f1df8e8914f6224a0d50a7729fdaf31f04a35a27113182551f21264f10d765188219df4993b5a6d0fec0e0d54dd2d13e4de26abe221035a76e94945d79f18aa811b
+Entropy.6 = 0b1f0a26b9fecd0840045fcd7882caafc38d393dd9b4b493
+Nonce.6 = 502664bd84da9537f1f4daea
+PersonalisationString.6 = 6c38319e80e401356afc38aed791e0e31d8e035ba07d8b3d
+AdditionalInputA.6 = 070920d3a4a904612e3599d2453cd9ce9617d210efa160fd
+EntropyPredictionResistanceA.6 = 3b5af5776101ac6af449e8def6b39649d0e555a72a8acc74
+AdditionalInputB.6 = dd099c4335bfbc14fb71d96bcb6e6852f8e459c104f4866b
+EntropyPredictionResistanceB.6 = 9abf344044dd3c75e685039421f790419cf0f904370d806c
+Output.6 = 24bc2bec0f43d1b066d73ae3297ade591dc18ffe45f88a9719b05fb5a3cb7368b2ce99190eb1b35768b0b905b65f3bbe0a300aac6b7c3897e5d02e2e26acd570cce4b102e404b02f67ac19d46d9e9ae4b3140976e0653907132e9eb8dc3f61a13fbffbbc17863992f17d8e18b184f954
+Entropy.7 = 1734bc2ad491109b9edba683e36616bc54ba632a4fec1b32
+Nonce.7 = 29bcae6645f954a93aa98686
+PersonalisationString.7 = 97f90d389cc8ac5c83ead4d60debd7bd3f661083bbdd29fc
+AdditionalInputA.7 = 74a8825a7eade15f0a276104cdc718e888b9e402dd6ad9ce
+EntropyPredictionResistanceA.7 = 6f3cacca8de108c67ab70fba44d8428482cf97c71a6f6691
+AdditionalInputB.7 = 323b2753794482115788bc4620039b7b49f72280ea9de553
+EntropyPredictionResistanceB.7 = a04f219f1583711ebd95b16da798659679735c9b228ae9d3
+Output.7 = 6243d4f6f55a1b552deda2b68962c1e94b59d3d9bba4f320c151a5ce482cf9b3973f22680acba86a862f2fba2b37a8445485fcf8cdeaafaff745228d41556404fa4a91e4ee88e2a0980fe3b847b6359a0a4bc08ceaaa7f9991a4d9737e8af720d57d0322a2a04f38d95f0e01aa4cd2e0
+Entropy.8 = 4003fbe3eff6c98155894595ee279bf070e16b6798bb7519
+Nonce.8 = 283e748b667b18d34678569c
+PersonalisationString.8 = 98fe15d27b0d782070ef14a4a6d5411e0459680e585b52c9
+AdditionalInputA.8 = f25448fcdaeff2c1b1047e9ea5bab5d44ae2de5beba6b9d5
+EntropyPredictionResistanceA.8 = 2c9d74a9e6ddac38191d9bd5dfaf42335d1139b1b172d454
+AdditionalInputB.8 = 7eb63e78d8dde4d2397ceb45f9ba6b5391fd1266ec031ad9
+EntropyPredictionResistanceB.8 = 65e9ce5fda4ff7af1446e399b35ad905c8a3f31a5358dda1
+Output.8 = ff81ce006a953717dab37cf3e5e98eb9a46512bca78103acf649ecd026c6b93b7ea491f619544d62c8c59ec198ef8e86f8d069cef16488c8261a4c4e1575aac641c970c1c2c308e00cbf65d611d63bcf2e1c5e8963bbe0cb3ad019df3aac05685cacfac2cb2d3b8ef96426db212c9332
+Entropy.9 = d04a85809cc1695e50c6b5692de8047bf7851afe22fd5d06
+Nonce.9 = 3cebfc9634de62bf1be3b8c1
+PersonalisationString.9 = 8a58dfd0a9c975a5738e6bcfefb86031edab60ffb14736a8
+AdditionalInputA.9 = ac9a3302bf81d8eac4bf85e5c43fc3dbc4adc645f200a4d9
+EntropyPredictionResistanceA.9 = 9915ecff12b06f6cb8b16b617f28826ae65c928c23941918
+AdditionalInputB.9 = b9cf6479baf513769342794eef059fbb30506ae28b16c039
+EntropyPredictionResistanceB.9 = 2399fc7e16b694d808b5675e933c322a0c9548f21c095e1f
+Output.9 = 5c30af852ce77d5d6823623b25f0d98d9284dd711dbc265b9c30dae3a6eeeba06ad70285af861219bf1da613ffaa32d4282c091781be4f4e941836230bf46bc7e56b08b071a4490eb19bb458799ce34af85ed85cff9ce34f1d49433fb1b3ea62198232abcb100174816337e0e2585227
+Entropy.10 = fff05697ead91dab26d40238c0f2a0ef29b638ba5ef3c099
+Nonce.10 = a85f845fe1c14bac58495f2d
+PersonalisationString.10 = 128ea269058d445f356533a27e258523e23ed59b14034dfe
+AdditionalInputA.10 = 5e8f5055bb4fbf1062df8ef25402b841ecebaeb38c07dc7e
+EntropyPredictionResistanceA.10 = d64e706c1d27996884881b33eeb3d502e0fc3b37dbf627c0
+AdditionalInputB.10 = 9abccd998a7456631e2aa5f3fc8ed05517b6bfc4f92929c9
+EntropyPredictionResistanceB.10 = dd685bccb2b6997c74d292a58840d034dd98b3578d09f739
+Output.10 = fdd154f82d470cbf8fc976dc5cf7d7c292c2a1558521bf5a781ecaa9529a22d39ab9bad178f5ee65ad310bffbdbf1740b593ff697a68f4b8523277957509db32f5acbc1c194d01314b7ebca2c88e1a3b3d4c0f5ed7e5ceb4a52eb00687e6b6b9f6fd9804537dfe57a2dad27e9c9a1b81
+Entropy.11 = 82d0f41d5deb41aaeeef7eefd979506d74057d80d7ca84a1
+Nonce.11 = 59c3fec1f371e640f94f806b
+PersonalisationString.11 = 77ba579620e8075b5abe5382ab494a3316b6d728dafa2e34
+AdditionalInputA.11 = 508fd96e0f487975a6a38db8662c24ba66c47d86169664d6
+EntropyPredictionResistanceA.11 = 494b18a2dcb8e20bf6ebde5cdf902c2de4c180fe2dc481c5
+AdditionalInputB.11 = 81fe08d6c149fc865b36ecd51729585fcb5e4d327e5ee96e
+EntropyPredictionResistanceB.11 = 0c43809b1c27bd45d7ca2efb1e0458ae921779e152c48be8
+Output.11 = 07a428ac14e9a4f845c65ecfa67a823b37856c12d7ac2c0ab4567a9d5d94938a0fb623f4e9eca0a0b2473870da8f5e2aed833547fa6644dd9d5f2120ebd2b8910e626777a32fcd71e63ac7eee9b15339e162326a459f6d8f0da64eca105b8e280a0d89af3ad28653f6c362efc3baf613
+Entropy.12 = 0f11964361b6ca807863624d04f27c55d6a8a276f79bfb95
+Nonce.12 = be4a9aa795801824ec37c341
+PersonalisationString.12 = 228d3abc1cb0186b7e7d007d203b496b795d2b46623b5002
+AdditionalInputA.12 = 6f0f5b4845ac6c2f67ecaac4f135d86d900e719465ae470a
+EntropyPredictionResistanceA.12 = 9eb241bccd255b3704aaf7f5bd1d56a13dd39105453a16f1
+AdditionalInputB.12 = d7661305f14a9644af41000aaf6a1cc85ade29b0e1ab6bd4
+EntropyPredictionResistanceB.12 = b5f7437ff726736b7e32ceb7bf567798025a257b38b1e5e0
+Output.12 = 6e79b1b5179b9773817abe209722a091e164e8615456520f5814bdd50c8a75c6f55557975d0f486ec7c5ed5173aa5ef7a65b9422b491502beb72d28fb1443b5a4f2514a41007e87e8bcd85f9b838288bb0cb0752dccd8e4232a62c3b98f613b00ba91b63d4c1b09110b7046a8243b772
+Entropy.13 = db02856385275f13f6b31ad8d3c40f921370af65668e3600
+Nonce.13 = 54b20f84dd2bd45de07c09f8
+PersonalisationString.13 = 467556f78739ef92a312adab5f5678965ba998e758e1d545
+AdditionalInputA.13 = 3d51f23dcbfd5af394d121e44786909b3350599f2f326021
+EntropyPredictionResistanceA.13 = a46d94b88b2c0a1681d1a34574168c4448bf5a4ca979f558
+AdditionalInputB.13 = fa2d3869523e5c11f4e5140c30c135fba3c87b219a811c07
+EntropyPredictionResistanceB.13 = 9c7ba1957cd0c6162b265a8946baa9e8355dbb5aeba4e33f
+Output.13 = 5c75607e3e101f39b23e0761d7fd68a4753e976ee387959e206617f685b94108fd5c4ed1f779531b5c49619cb86a59a21efaa2d7250cdaf16867b7070fbbfcdac13a007da323eca31a5f4cb251472a26f62fc63197ae3ac3db474e3b074db5e70d719cd3ca11f6087eee4821e3141c4c
+Entropy.14 = 67c778f3ab7fbaeb52fcd452422f503b715124a141055867
+Nonce.14 = 9e20f47318f608f8cb2879bd
+PersonalisationString.14 = 7a2bc9606163b0999bd88a12b12d323bc85755f9624290e6
+AdditionalInputA.14 = 7646c02daa64886b0beffbe47faea41bc05bdecbf8a6ba20
+EntropyPredictionResistanceA.14 = 49eeecf9f39a61178012295731803611177472ff2111ffd2
+AdditionalInputB.14 = 74b7046dee3b978038195a4ede2e8a0ffd3b8c490c4ea36f
+EntropyPredictionResistanceB.14 = 52f143079094332e20460b6bd1b5a5872348ddd626053d3a
+Output.14 = 58d2c19cd4ad3ebd48e3520d23395b4566e65981aebf6f143f46733d4fdf23e2fe0243674778fe5c5ad1fa4e9389305d3e7c1b99d7f7e163c9ef87a35d34732629ca8d87b7b8878ec95662dd9ccb43b0d2ccee2f4f3c4037925f264fa03b534da0751f45b2df1cb653c379cac512ee5d
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 442589f44d76eb8943f5d5219f2d77824f9ab5b0e2b7e5bc
+Nonce.0 = 65125102a92616ae55d9aff2
+EntropyPredictionResistanceA.0 = a74a570a39b2685e8093f0a049841bdc4fcc39c7d04a7d2b
+EntropyPredictionResistanceB.0 = ea1741c2cd32d22f99af1051dc92ecd17452395a482d93e1
+Output.0 = 397398b485be7b0b634d5c7bd303d7f9b2dee44049e70e66b637d3125ba5be35e401ffb6a0c8a49e2bbd2f8b538301e5f48c43a0a81485e815400a20808338e2c3139bd77ad0acb9e86cb0470e7e9844e184a8e867d659786801b05ea882abe19b9ace5ae4284f6267dc36d6adc50846
+Entropy.1 = 772410665ca92159a8d10963933afe4f278059a34d6da4e7
+Nonce.1 = dce4791737bfba1c5819986f
+EntropyPredictionResistanceA.1 = 69b29b3fb4c5cf887affd0c4de34c8cc49f7b6fbd4076943
+EntropyPredictionResistanceB.1 = 125fdeb9d3f6dd634413a06d6f5807006a705b5eea8a48f3
+Output.1 = a1643302a34c17b4332f00b03dd25ed133b52e1c755f36275c7f145ab66df9459d0c1518f8450d791dde69c83052be7d4ede7ed86375f659451fd1b9be87bd4fa5f92b85f19fc9a0fd2ddaef5f300262b08b090de6b6ced8fdf21e07aa63f60782969dcec56ddaa7cfbcf35585f68798
+Entropy.2 = 62dd571f8d10999d653256158f9dee321c4acf8d88b68705
+Nonce.2 = b34cb15f45e0c3244c1f3137
+EntropyPredictionResistanceA.2 = 39dd851d27d184c9ea14e23b350196d5849953777f9b4321
+EntropyPredictionResistanceB.2 = c928ebcc438545b48ce919020d38d92559b90ea7b0768339
+Output.2 = b482f94ed9d17b93dee172d8743238772c8898d00a26b075c10327584196ab1cad9615386d97648b28a7708e620ecf5ad7caeb723c71df696c3f288ebc53cd86c270800d4313a44a1bb9ccd652215bc4b1484252ebe91d55ade6e5f7659543cc00b0c299075fc3aa7e78dd658f92340d
+Entropy.3 = a5d0acbe88080a6681e4e96430149f4128d0c4665f652ce5
+Nonce.3 = 5a21b094b5f02570db750e66
+EntropyPredictionResistanceA.3 = 0e2dbc0d4c593fef14bdbe355d714e1af1939eaa60cab29f
+EntropyPredictionResistanceB.3 = baae09724b364fc1187bedce04bda67681af089fabe70336
+Output.3 = 04c7b4131c9dad221529585772e3820d9310b40db15bc1638052a881c91b5eaca190f316f0878952bafd7b6099588dd4280c09ba359a0e1396dd4523d59f0f8a615f00907eb6fafcf41f17d14c3689d693dbd701dbc7b86cb56544154e7f9d0b5d100ce8aefe5c1a347b8ab6612249ea
+Entropy.4 = accb2e4c10739c6dd95f5bf532903bce4dcdb054eb462f13
+Nonce.4 = fee3cc1d7ad8addc4f485d9b
+EntropyPredictionResistanceA.4 = 3ca404a29f8cda5030fae5f2fb24629df9de0b5da0a49e9b
+EntropyPredictionResistanceB.4 = 66614966e01f72abf13eaaa6e974b1341ec41f68a6fa461b
+Output.4 = d40de60124bab121327acd4ee4b45cba9c849efd134afa020239d6aedbb0af7201599c79f4b49e0d3c710438ce8d4ba032f34150dc6eb7f6b00e5d621b41fe28963c8d008586acfbcc011bbf6cd81304c7a9a06b569e3fdd141b953fe02221cebb60f38c727d57d5c9a04273a9b061ee
+Entropy.5 = 767b79abb6bb9eb6e298a486f13963ab545762ab9cd62627
+Nonce.5 = 79cd3c93a27cc41f3cedb5c2
+EntropyPredictionResistanceA.5 = 32a56e7a4cbd03fce8e3ad77d0a2b0424bca05a6dc0b1ae1
+EntropyPredictionResistanceB.5 = c4edcda3f266bd6d40c28668cbd134e3cafc8134681a41aa
+Output.5 = 6a3d9ece9b374176aa6cf869e1d918dda64ec0939f7882cecdf0adf55786ffa07d36493f178bb10488a5d80adefc49ad088deba3a0952ff9496a8cb4e978a1fda3fcd8b6f9d769e353790294be6818c670313c1de9acc3d874c8c2d52b39826d73509971ffc68edd8d7b0e2cd2c8b48b
+Entropy.6 = 19cab80efc81a3a08b72978863974eb52f41fb6e5aacd04f
+Nonce.6 = 050b3a4b1ce225e35b9da941
+EntropyPredictionResistanceA.6 = 611acb672a5462071e4433b0e7a4f54535e06934ea55ee4c
+EntropyPredictionResistanceB.6 = 048df994ff44e9b386173949304faa1353300fc209d43b47
+Output.6 = 819d5c4deaeceae6635056f45ce91f4d42ddb5487df8da0226f378f888ac18dc03db2fd153e52475a0d108ba1a63ae8e1434602d9025357cc585ae2118a2b72176f9dbd4664aa693bf4e9c4aee1340b27da0edbf86c773e092d8e47b5103c7dd8960bad1aa47db9979213471a3148b5b
+Entropy.7 = 5f3c52e5a0edbba53f134eaf7e771058da4a2e67257f7c41
+Nonce.7 = fcd2b947aaf6650f68c77155
+EntropyPredictionResistanceA.7 = 04ef780abac4927a31cdb931bcd0141997829c380f59c9eb
+EntropyPredictionResistanceB.7 = 04e668b4c1e059b83d140fb3ab8454245243eeb57d7a58c2
+Output.7 = 0803d6950c616ef440f547da04acb26fc92ed3eb1e55b2210934a3b42ba560b09052f347e797f02c47405d82de752bdafa601c7b1d3587a4ccc8a7893d3acc9edee8f822104fe448cad2ebb6f3d2a7bbab8abcf8f2062665c3b12103c83eb99bbfcc3eea311e49c6b1eaf9c5af34640d
+Entropy.8 = 7807933d9f735b88573c0eaaee983d6b1bc014465b146d81
+Nonce.8 = 2525158ff43a2ba09c92e997
+EntropyPredictionResistanceA.8 = 91f35dfd16dcfee1c3610b51d638e8d7d03c84726321324b
+EntropyPredictionResistanceB.8 = 4642ab87864979a3c3328c044b015af518e75571a2fcac66
+Output.8 = 37b9090763648920fb1891ef1af2fe1f559021957c73e045b28fe66ad67ecf7560d41871900de795edd5d7a71d6f72fbba2bd03072a45c699765968938dfeedfb3a8ac7c4c71a3ed619353ceb9ff376960b65df92ff5e3dbc03f66af9ffe6712282e7c506f09720dae07df79648b494e
+Entropy.9 = 8e024d3cf83e3dadb2a1b61cb0a693ee6ef51280e8bfe463
+Nonce.9 = 9d79e25f5201f867b356dd3c
+EntropyPredictionResistanceA.9 = 7c91c366b4e8abb19998467f6a06fe6c94ed1bb9f1bbda19
+EntropyPredictionResistanceB.9 = 846823aacd30a6f063e529de8791096c2952df49816462f5
+Output.9 = d1c4f3be55da2c88628b9b3b7a43899c6016aa260ec927010b842f80384de3cef9c26a330cb6fe14531e666bfb8f3770ff07f0dbf132e86ef800580b4df8ccfc53978224a52d60acaf4ea56a014de93a353e98c0f6dae0d42522494b26ddace2d71df45fc2520f00928e92f96f4a7b56
+Entropy.10 = d20a849c06b4de9d253923068148cfe2376f4ca22277215c
+Nonce.10 = aa611119d920ca234227f716
+EntropyPredictionResistanceA.10 = 55d1dcb8fe63b52fc9f3383fdcac39ea746c9c45b4aa7419
+EntropyPredictionResistanceB.10 = c26c997d59627e1c146804bd71b987ac2cfc2cfc2dd7f46e
+Output.10 = 8d8362a458416f6e8c2bc9b33370c7dba8e9bb39c633bc5aba85db2d8aec7d4112e80a80ca192195934d8b50e6147b0a78e31c4e9b30853f4e9fee9b91b1db553810ea36dcae52a8cae91b8d122aa4d6ede62e81826bd4d12133ce87e95ab24a33837d219acbfcd2aca2cae322cbb2e6
+Entropy.11 = fc911ccf62e5b6dd4588ba1ff3b7307a11ea8f8ea2cebf85
+Nonce.11 = d69bfc7193168616ce1ef9d3
+EntropyPredictionResistanceA.11 = 3cc0a5b4039af6c2b2d7de1f6c46c8b7d2f3b8679fd20b22
+EntropyPredictionResistanceB.11 = 152b98ad15741de23322f39cdd31434621f47963ed82fbfe
+Output.11 = 99a81db010f146db6cfa44ad65cb02a271628f0d619fc3ecc7c3a85ed81f69a294462e4a0acd711df9f75d35cb14187800238cc9a3ca81d899d88f1f5961f179060fb0ee302790fecd540ad32d9463ffb089656146979d28e9960146bc17f126700c4c8415b2f39096e1b259615b9d68
+Entropy.12 = 760255f543e2aa676cadbff7ffaeed0cf924e86ab57ae8a7
+Nonce.12 = 03c959cdf543bcd6ee5563f5
+EntropyPredictionResistanceA.12 = 69d11a9e59b7640f09391580422a0c86c3a06810cb272c1b
+EntropyPredictionResistanceB.12 = 733153f70c8cd24380871757d1cb57935dc7bfefcf217a14
+Output.12 = 81475285869ad10e0f9fd433b5c1926eaf3128672ece33f7cab4d16747b833469aad8f36d2e37dcc2cbb5ce17fc52ba12593ba8942e63198d75328aae3218874c209e0a3716191bf231b14554def7771736efc5d4cb32080d2e8cab54c9f9d4f8379317702be34e681d8a86b395695f0
+Entropy.13 = ce06b97e9ded01bca7b510e4fdc70fa972d36296d5152af5
+Nonce.13 = 0a4c8223cf027bb5d768fc8a
+EntropyPredictionResistanceA.13 = f1b3813b92c2056288e5d2cf13b13edd644e6a5050e65ca2
+EntropyPredictionResistanceB.13 = e76c0419e6073bcc8ee7c4df1aac7a70f07d0f68ca45c72c
+Output.13 = 392f14f4c912d716c7df2843327eb35b5800eb57991f0aa79ff2382f39ef79f4fd3700279fbbcd28628e3e9d4c3b2339c6c3361baacd88b675f4b9249a9519eff7ca146e863d80926056c2894463b2c82e5b8027fad0c7dfb4dc2553886e38b3a7bddf2b8dadd5988952a030257bb37f
+Entropy.14 = f29433429314edad6a3ba28e8247e9955529a96010a25f47
+Nonce.14 = 4bf9bbe6662080e74c29b985
+EntropyPredictionResistanceA.14 = 2520f0af49912e6973e81e5d3ea1b140664209e1050784f9
+EntropyPredictionResistanceB.14 = da19f29b28f43ff72e579a4a21d979dbf399f0123695227e
+Output.14 = c79b9cb6955eaf7d0354ea81b1e54f3bb7855edea5040fa6ea2f18566210372f9f7b4d08208931c321ea09f44390dcb4939373e96fe3a417b2804b6af94aebc65fb31e7e9faa4113cb4bc1294fbfd19eb078eb300e599beb0a8afd05f10dcbbca84a27dc86a12a998a74d6f532f38e39
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 79b3c03683a387c1cbf1babe4aa0fb09567aeb7dbfb9fb88
+Nonce.0 = 585b9521b5b4c0116393e6ef
+AdditionalInputA.0 = 28628e11dc5caac185e0d0db6af8814ddf191f6376d86651
+EntropyPredictionResistanceA.0 = 320d1dee48785656974efa89f7603e3466b78c1398816893
+AdditionalInputB.0 = 56bd48131a40ccba13c8c42c20e9fceb9ba7fcb78cc9e1d6
+EntropyPredictionResistanceB.0 = f8652f93f88d807a1b2efc70aa06a91cb1aba4c2a0320445
+Output.0 = f01152c9a8951de9650497e743ce13cf204ebe1d4a5bf8816fe74f9d044300f9171c9a3df6383e34d3b9afdc55cd63239123a550854edb8c0062591f0b715c9060b361cf19fb34af27316566004ebefb3ad0fca841185dc46b034d717c9fd422d0e78bee562451aff3610ebe002d55dc
+Entropy.1 = 6e689b6e0d06cf4623e76545468d7a88d16013dff9300097
+Nonce.1 = 145809072616ab7187c30200
+AdditionalInputA.1 = 8e76006427e3cecc729ecc0fa475d8dd652c7baf259c6e2d
+EntropyPredictionResistanceA.1 = 9302c8142bed1086bd2e72bb01241eece870e99debcee945
+AdditionalInputB.1 = cab68cbe864c6e0e74466a3d22a530b3bd75cf744fd17dcf
+EntropyPredictionResistanceB.1 = bfae9fd783e8e7e071bdb76eb43b04fe2c610cb76006f752
+Output.1 = 0c55b88381cab6dc5410f3ec01bac2c0f53bf49b47e6a809c04dea06707489b6057d025c68e0682e8b433642ceba317e3c046555bc3d9016caf5d43946727564032ced6d2c80bbfb975207df814c0004dfc0d93a417f97d27e17e9b32556cece7bc1a958ec64dbe09c5cd45fc51f061e
+Entropy.2 = 667d55d4eaba77e4066c347964dbe1a8a65023aad3919b10
+Nonce.2 = 21bfff2ef5d283177717ac99
+AdditionalInputA.2 = 12a7a658257ab54af1d25f3ac731edd2b215bfcb2fcb4196
+EntropyPredictionResistanceA.2 = 79f38475d3292ee6224b9bb855184b36ff7e27b05a15e5bc
+AdditionalInputB.2 = d5f9224687585924da945ebe611319d0652c13ae0549549d
+EntropyPredictionResistanceB.2 = 75824044b7f70c4424ea8edb37ad55528ea7afe503baf59b
+Output.2 = 7f380b9faa5b384a2460620c0db1d6351f87f92406718f3cb5a1675f0616b12a71b540e8b467f56c583e544544186c5813dcd977be87852bdc2b3d6aa3ea3afcf27adb5f4b505cb2dfa7333edbb3d772ceebf93ec87e22da74200e73aba4af6845d20e6416dbef2713f4c4301714ee50
+Entropy.3 = bdf6443e65f1d9a1a0df77a13b626ee47bb21948437be243
+Nonce.3 = 2a90e0cbdd3fa1a6e2a9287d
+AdditionalInputA.3 = 5d0eb52901bb993ff3ceed5588e2d3af73e04606c4ba6fed
+EntropyPredictionResistanceA.3 = 6c3ab34623881e12dd02f59ffb3a269650a63122955e2062
+AdditionalInputB.3 = ebb869b6c09cdab7e89bda8b3c0888f922d5392407a56938
+EntropyPredictionResistanceB.3 = 388a5e14f0c9d98800709bcc80e450b3b47cf71514528375
+Output.3 = e31c31b73bf8a04b4f46461f3e2badfc416483b1bb42c9b42a65164ef09f5df43b9ae3177c15a3c11c0896cd3f2a9cc6e1c13792c7b7fe51447743ab09698aff18731056bfd9ee231cbc2e7e7a167edc852089ea7ce8b407052bf5e0369a3052eeb91bb409370647327d8b82873da25a
+Entropy.4 = c8fd657a542f0b4ff0aabb117593b45cf768093f156482be
+Nonce.4 = 3d5cac9017c9f535758fdc32
+AdditionalInputA.4 = a272b31ae87631968b3b3ca7edd9a228dbf83e62c9f5dae2
+EntropyPredictionResistanceA.4 = 5ca54aad142455453fd7cb503f4a7cc48a6be5d634896212
+AdditionalInputB.4 = a8ff5f16efced033db682c92a0ec905b7db8cf2a16e4b3af
+EntropyPredictionResistanceB.4 = 4aabb29d8f5c3ea0cde104a43ff96988f4c55cbc705e7d78
+Output.4 = f8640994d8f593ce7e80312bd1eb11944c7e441b47cb6e4a1cf841d5d279f565f83ff4ca1db881a8ff299b5598896de371e6f63a1fe641a84c59a1b07497f0920280360d9fc44e5c15e7d42c0870077ee3a5967acaebd38b8ebbe174411bc10f08b82d02bec0082fa4a59b4d5eebc715
+Entropy.5 = a9ffee6993ae4a9a4fc862a4dc57bdb923b7dafde7c17b2c
+Nonce.5 = 28bad4981989c5736f413900
+AdditionalInputA.5 = 7df1225bc30a3f667940231c4b121e1690c66d63d15932b2
+EntropyPredictionResistanceA.5 = ea878fffb62e2cd9a34c6473aa830602de071016ba0e394e
+AdditionalInputB.5 = db951cbe604cad46b4281f1c41343f0ff1aaffb0e7752537
+EntropyPredictionResistanceB.5 = 67ec1884a339ecf255bb32670942813e2b66a8c3c46862b9
+Output.5 = e85cd84ed1d2d88c82b994307d984a550e4cb581bf83b26b3c32bd98e0a6d94b13013707406235076755272f08df352741f50865ef32d2bca5744d88953852928f9f92b1a6d0edd6c3686af1accb83a86cc9639f59f385a152bcb034b48bbe0095bfcec4eedc67c51bf68154bd1a05ee
+Entropy.6 = 6e512b0d47478a96875e8bbbc48a9b1186bbcca00a4c6b73
+Nonce.6 = 400e1db4d84aaacb46714f48
+AdditionalInputA.6 = 1c0c9b747334ec5ea0939d50a88d4ee98311f045c4a3108b
+EntropyPredictionResistanceA.6 = 2b5731c5f258056fdf4b94268123194a5eac532e204cb7a6
+AdditionalInputB.6 = 60bb83ef9b8438769bf7b81d886c36d9f729b2418df32d5f
+EntropyPredictionResistanceB.6 = f74cc4590e8ae6adb88272e3cbdd886cb5bcabb375750641
+Output.6 = d7ee69da2e4fda57400e9df4338cc966dea166e17ece8767aa7fb7a8bb5904619cb44d822c1d59c46e245731cff3ea98a95fdd728734e1647b9054877ac8f8bd51e8299dafdf5279d4917c143cb09aec7b09a0d129f6ec9297100e2bde648509e2bb8a2fc194b261bf206f67abae7e7e
+Entropy.7 = 6a8912c923e2c6e77b9aa1977cb167f7ac0480b9fcaacc0a
+Nonce.7 = a156b4e5d618a88d8d8f036b
+AdditionalInputA.7 = e17501d5bd2c8e95210ec075e2866747575b06f4a0090784
+EntropyPredictionResistanceA.7 = f0f38c6e68e91487de7fab73fea27da2d52e35d9ad0bceb4
+AdditionalInputB.7 = db6dcf5f6cd05bd8af75202d2357dd095472a2d5916d421e
+EntropyPredictionResistanceB.7 = 8eacd6681df196d2ce92ff3ea28781e479d9f3b3deb22654
+Output.7 = 7b6258b38011e89bf3041c127c0e45d2a5a28734fab20640d9d4c4c2d7a03eb98354ce6cad350af0ce726c47a61c7352d5f661d47fafb833312cd48fd39d1054333808c51ca63c9def25ab9507b45a4a79a12424d55f21bb76495c0ad4bce2f23a46d4a822a8cbd3cb47ce63b308d312
+Entropy.8 = 71844ce553767336ee5209d14eeb322c0cdc7d23a5053034
+Nonce.8 = 9be4e201656a7dc05ff0cd69
+AdditionalInputA.8 = 5075fca114971f1b135f55e95f6657984356de76bc42b4c2
+EntropyPredictionResistanceA.8 = e3677a19e637f15ab468726b3e804bc42e9d7b579c4487fd
+AdditionalInputB.8 = c97efb6090aaa3d6bd8572c0cafb0a90095ccfd7eb371add
+EntropyPredictionResistanceB.8 = d1166a03ea3db75a7d9093482707a5bcaa786c1e0c07ead6
+Output.8 = b1f4433e13ba5d2d3cd3fde6b0aa1a76719a64ca099b0ac07fcbe68e79c71127c2605e0612a154efa8c826f1fbe1b8b4b53806ce9d356ec3998a06cb2ab0a2d3cd3a629fc2c1f8795d01a0bbe728e53c6c46d450e0c4d8ca5f46849da589f954a67b6b3c946c36ca6b6e24e9341e08ad
+Entropy.9 = 822e6a5f9dcdc17f95ed0f7a625b207444aa915c5e76f047
+Nonce.9 = 6117755bd9bca89ae9340786
+AdditionalInputA.9 = c3f9ca2a365f07a1362db8d64bed747008e231fccc1d4d5a
+EntropyPredictionResistanceA.9 = 4bf4f87aa0695d76bb812936c076c14fe896ef4f36077c88
+AdditionalInputB.9 = 136d8ca4f774f5399fa2b105dd9a86d56ecde711f376f14e
+EntropyPredictionResistanceB.9 = 4c3aa7ceaaa95d64809592df61a466fdf573eaf126a665f0
+Output.9 = c46c870bc0436b051cb7f8833f9bb5b4031884e02b24136f1621fcf163381dab7b8ccac729c0e4bdbb004a6dc9ff9597030609de2ff753e9e26d911e987b6fcd4901d282717572756874e7536a9fd057ead6af25fa324a2e6d5b3e67d39ebf05b968877254ec89d0185504987b04c007
+Entropy.10 = 0d92eb8d68c79a090680e530224ba47e7bf395b45bfd077e
+Nonce.10 = e0757265605d919615cb2e15
+AdditionalInputA.10 = daebee133a125f18d01834f716c5bf1dab7b0fd3f5452af8
+EntropyPredictionResistanceA.10 = 97173ee6ea1546c827c61818b1e14d1271ac94b39d5619df
+AdditionalInputB.10 = 755d1d06064ef1b57a59dcdb95072b69cdd2c6bd7a8e650d
+EntropyPredictionResistanceB.10 = a096d6456963427cba6154f3ab6258cd18db95e7e47291f0
+Output.10 = 7f171d3da8b16c61b1fb92d7ee5fdf1364c3b599e3474d0dde2a366fdd0a065fa16330e4c65a1fedd3dbe6a021831ad17e8a756a9e799e05ed3939e8c005eaf212685e4fa4d7ec29769fd5e5101ab3feac6cac5d57396147b5416d3dab39453e8e583deaffb61ac7672bf54fd42c5959
+Entropy.11 = 995f99621e3bbb90b138cfe7dd23a00c09acd0a3002ec67f
+Nonce.11 = 3c763046cfc965fa6e7c3de0
+AdditionalInputA.11 = fa0a81ec06b7c5dd5bb868cdf8ef03bda671012054fe6186
+EntropyPredictionResistanceA.11 = 0cffd85b35e8bef61afab72e7d020fba3829d76a8cac7053
+AdditionalInputB.11 = 2aacfb47329b47d47032252caa4784083b34233b86d8cbee
+EntropyPredictionResistanceB.11 = cb9496e157afd111948b71cc86f3a555d7688b7eccfc7fe1
+Output.11 = 62177b7e651c1746632487b568c050a0bc5d756b5cfb11e5d1020b8b3851724e6b6220999839f75bba8818864f8f836b331b359b90293e0942b999c410cda6dba62e51bbe04775bd83ccaa5e54e8454c138beb9804bd4d37a8a1ee5958622c6d012e6d8fe3edf44146a25518f60ab18b
+Entropy.12 = 1d8e5633a0d857fb4414b0e809d1010b31a87da0831cfcc7
+Nonce.12 = 9f8a2933367844abb7111daf
+AdditionalInputA.12 = b8e57cbfbb4c34eb52efa14edaeef67cde3cddb4eec4d058
+EntropyPredictionResistanceA.12 = 702e31b3d6a20b243062a8614e098aed83d096a62a2b8297
+AdditionalInputB.12 = a989673a28e1b68aff0390d0263f285e91a861dfd47edac4
+EntropyPredictionResistanceB.12 = 73575158f72f0431e4c7ba72f90e791f6a8dc2a9d52e996b
+Output.12 = 156a29c83ef3387feb9ebf1fb8c7d7f53d6401e62286a345b3e9cdb885afca366e2da18722ec67aa13e81500b6623d563c9f80b0f850fab1e51e34aeb6f97b210268944f4a6a68125f7e3a21875becdb09df0d698a0324c65cc0fa60f07c1c5034812207fbd382adcae9d7ea3296a4f8
+Entropy.13 = d8261413e17d7fe52ab35fb8fad19f9c32fecf8d12069b0b
+Nonce.13 = 80733dc0fa7d3e2d05e024e5
+AdditionalInputA.13 = 24527f2ac8775e5ce3ca84ee1d4fd352cfb2501818984352
+EntropyPredictionResistanceA.13 = 38e67c20b429c45125d660c55aec85b344cb210e0729d4ac
+AdditionalInputB.13 = 9ac1b51924b792a85e5e69f4a6c2f79e7f640fc783fd3281
+EntropyPredictionResistanceB.13 = 740636199738cc20e87f981489a01d6a2fdef0ff4fa0bf4a
+Output.13 = 6ecf76f4eeeda87782e6dbd50d2a7cd9ce9b72b27245ce6ec6bafffc9fcf10041b6194b02e5e1469fdcc470bb5d1e9afa92957a0b53b0a4ef1223b55335baf3085f00c62c7b1d04380b6bfd82f60dbd00d17d481743ea8219158da9fc4783d635a0a84b271e56d2a8f466b63496245fa
+Entropy.14 = 5a6eddad9d860063c590ee98ad1418361ed3b720cb6e51e9
+Nonce.14 = fd6865b295b3932ace190992
+AdditionalInputA.14 = 47fcdf14235cbf554106f0c0893e50683466e3bd95b9fb25
+EntropyPredictionResistanceA.14 = 9ddda2638b896f1d80cd44e76202ffe4cf313d613c24530e
+AdditionalInputB.14 = 9b0214621496003a5e48ca25fb008bb7ac7cb9192ccabdd4
+EntropyPredictionResistanceB.14 = 9764e49ef04c1c164bec335e2ecd98ff0f8b7959c4af9ef0
+Output.14 = 8e4a6f42f812bcb71891f6abcb4c19f179f44d6d7ca0be8f84ea4de6227e31f60ba600c0dce0c0cdd6bba0deea6d860b3ee204be73421044cdeb59f3b42a5e4db94e2d06af91e1f2ccea73eeaea40262a5c74b7fe76979bf67510c86c4c5fc55569b6244fd15a49db2768c884102e106
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 7d858507bf675dfd2ba498a2b41329ec462ecaaa747e0e74
+Nonce.0 = 747302463d470545ecf11fa1
+PersonalisationString.0 = f9558c68234206190a79d72d7b90f30f54569e714a21d026
+EntropyPredictionResistanceA.0 = eaa8bf460c2246637d2176c64a697f55654da9e31e238550
+EntropyPredictionResistanceB.0 = 65052dad2559de9c2ed61cab76de6f536c5e31ea09d70581
+Output.0 = 75c2c56700de75565433e1b2d1d99c1c935d332453b61cb015d41bc264484bd06de96363f9cdd5748eb1c353c99ec7eb7bc538f8c195c31edaa39da764264763baabe72b6751b73176fc8fd799c6efe817f92922f87952faf47ed5290c8bf5c16aa93135e9f74928d2d3f86073f358d5
+Entropy.1 = ffa926f84d08861594267101410ccd4b64584ff17ba29d34
+Nonce.1 = 81d7362e4ed1a331d4ac6152
+PersonalisationString.1 = 4e60cf40d60a0d6ebb3ef861cc2411c3448b456a70f20dfb
+EntropyPredictionResistanceA.1 = c379c93ac42d1af2da02ea634a307a2768502f797ca8cd05
+EntropyPredictionResistanceB.1 = 70c163b07900ba0fe17aee90861a2eb0ebe43771d5017394
+Output.1 = f4a48a0cee7e97c3f16ffbec1a25091fdbf592ed674afc3bb31b45aa02c4f9217d0169906e0ca09552a00f1be7874c3a1539b142f1804cfb41cd03d7233f2ef9532d2ec7b0d5d4628b18a1080d4c1e0eeded894813b744d85813196a323f9963be8464b72c387d66dfc1f6866297a280
+Entropy.2 = 8b2b744b7e0469b229f20189628ac29fe90659c20dc92216
+Nonce.2 = efc9ef7392e3d2220e73119d
+PersonalisationString.2 = 2fd5eaffd3b7e4bbed3e506de06238b81bc9a59f007da838
+EntropyPredictionResistanceA.2 = 39c796f350e645e757da076460c3eabe0226b9082abfb9b7
+EntropyPredictionResistanceB.2 = d8a170385c40b98f87d11fcdc0535a442a6e8f20de65ec41
+Output.2 = cf2fdaabace371bc776c6562fbc6248eb5e3f8fed7d6473017fe1a2aba44cb9a80069af205ee8f753e53d57cab092a63c3fd824c919e7c3e9188b03f9053f3c184f565ba607ff1cfb15cb1d87e65423b4c9e6aa8834f29e67af1a265a00ae8a48a9b5dcf96112cbdd384eb9d498376d3
+Entropy.3 = f5f0247d31f2f998a95f6878596d5dac8f87d72704b31b0d
+Nonce.3 = 1ed86060f97b15e1e98be417
+PersonalisationString.3 = 15f95470646f523937c38e582e251a92258113f1fce23d50
+EntropyPredictionResistanceA.3 = a88eaa534e8e60dee869d7433aa3edcd93539499da76830f
+EntropyPredictionResistanceB.3 = 60c45b9a2efdc3a165bf6613b7a82b0d46d717e19411c2e6
+Output.3 = cc70057e6ad581de81d64c9f72e5e66e63838079b916ff0098fcece558e2de658e1f91b77534f10d2c1889749ae20af284ab6e8a2a621c6817281a6573614fe43e4eea049b87f854063ebe85cdcb745592332b62239e298ece6fd2fd5d42a9b6e85897c546c98168ebebab38b5693621
+Entropy.4 = c540fe3aa31a158b8f390f48a3c70778608fad588a973aac
+Nonce.4 = da24568e16ff1b9f0699c79b
+PersonalisationString.4 = 1e2e570bf8a99d8309aaab2652736dbb011bd84a1166065e
+EntropyPredictionResistanceA.4 = 7490e86aed8789fc5be07a706b25a35bed69a117e17118ae
+EntropyPredictionResistanceB.4 = 5416aac6433a3bb3735f90b02f925b453a7f3d4f535a0eb9
+Output.4 = fca2f9987174b59ee36a0c7fb028b4c71cca39053e24f8ff9d670078607a42d60ed68fe7f8c19b8b6dcf7b8342d537c545636800c8a19f11bc7ba7ed02375ff83d423c513a0579c9b7ed0bc8c464d5f701f7579fa29e451e8783d9f009266e2f80e9032393f70bc52c74ecb2a187abef
+Entropy.5 = a48e678d3bb7df00b3e82ade1679c30c2045fbd3bf0ba56e
+Nonce.5 = 2fab92c3d3e13d2dea302352
+PersonalisationString.5 = 5ab0be5fa714945a57e5a2363e38ea1480592130b2c65d9c
+EntropyPredictionResistanceA.5 = fe28c068d4cd48027067e82c0a5e4639a6fe63fa03073ac3
+EntropyPredictionResistanceB.5 = f66fce490a3c052b90371f6390cbd5e4a3dc8a495c05c0cc
+Output.5 = 8f6be93199b3890ed1995810c889e409e9fb2c2acd478ab73fa0286bb02fbb8f8670f7f0a70539c79daa3c9ce6373db3d4515de5c19acad3cdec70eca7151e49048d1ec58aa9dc4e62efdeef98a4db2fd2af57cd90abd05d92a6babfc41b2cec17a620092e44a06ac0e6a1eb6ddddd65
+Entropy.6 = e7e3181938dda2fb8d6a5da5748668dbb60f429abfb8fc48
+Nonce.6 = 9d8f3cc06377e998a41121bb
+PersonalisationString.6 = 26fbfc5984b3abfd746237cbfab75669bb3390a3dc2672e8
+EntropyPredictionResistanceA.6 = d28f7a18868066493c4f0a11bb80f376254e2eb6a8bfa3e0
+EntropyPredictionResistanceB.6 = 11016667897848e733535449296cbf05f0301229377144de
+Output.6 = 533fb0d2bb68a2c0e2e84c7ec102c885a85224ba7338d814b3656e288e4b681454f95b4280cda542ae2fa45af5c18c62d38149f5758e3ca855a11312c34f978a81997f1e14cd1f3ebf025cf97a13dba93947ae7a3901a629aa6097fa9e77226c13edf1cc4de40dfe937c15a899b986ba
+Entropy.7 = 8bb65e173e3200870ac0dbfeb8c32e9f681d53de901c4de1
+Nonce.7 = d57a9c5478db6c2a34a5a4ae
+PersonalisationString.7 = 72b02bf61b0c2090d5352bea671a2d9b0ffbb936c13aad98
+EntropyPredictionResistanceA.7 = 8bb9dbc6c32bf8ca3cb17a94b807bd5be3723acce160bc8f
+EntropyPredictionResistanceB.7 = 3c27e21855ab609863d3a298774f5708beac8200d411202c
+Output.7 = 887e04475c13c25884f540335e345f88390dc7969b1ce564349bf10737575c07d94e31f3cbd9bfdd832ccc17dc5289edb0ae149f42e00c8b98383b7cb71a96f983a2046afe16ec74f2d8ca6e609e594b29cdeb1a3557270b08856f4a2e31f87c0265a4a832f4b7857e1d9dffef6a7faa
+Entropy.8 = 93c0233ad4ddcc0d674b667d8d2f2059df8f576ff19fd5b5
+Nonce.8 = b40f042eece3e74adec49284
+PersonalisationString.8 = 65ffef746c06050753329ed2520ec773c92a645051f1e26c
+EntropyPredictionResistanceA.8 = dfa7540238408fd26bbc77c8cadee91017686fc10749bc92
+EntropyPredictionResistanceB.8 = 6480b3b4c4c3765a9e11166fff4a09389dfdcc52c11d4cc9
+Output.8 = 5d2eb6bb3d86cf5b0627608ede440332bddfba80aed8c7723333504f8a64905b1cf4816407cd0ee0b017c872974e1d256f04aa173d680baa903e5e6047437f28baf70555d3a0e14980af924f1ea158eed542957b6fe74c1a956adc34e23593cd066bbb829bae4276f81504a2145a11ad
+Entropy.9 = 9ae76ba23ecaa264d0c247e7fd3c6c534e8c01ecde1e19dc
+Nonce.9 = 8b4c99b3ea27d037a2659f39
+PersonalisationString.9 = 560e9985dacad41bd7156ca1accd6e30c08ad35e633d16e2
+EntropyPredictionResistanceA.9 = 7f6effc6597c16185c90d9eab84a40a5c8ee686b9e114629
+EntropyPredictionResistanceB.9 = 09155f1ebf28729d8ae172747f2056d9102fd0b902e2d855
+Output.9 = c37c9a904918f3dc35ac4892e21d14e4440646704e8cdb3038829c49a11e88f37e1f92899a9247d2645816842f5ad06c45ea4245054a1ddc37c36c8763f17ba6d2b9a905b42d958822edb675b71bd585495c6067a238500fdbd46833ca15dff3cfe2bc6358d2b6e761b7af482e8b454b
+Entropy.10 = 27e1baf17aae5c22128eebb57ddda7115402cdc25251cefc
+Nonce.10 = dde30abfe27020c087f71020
+PersonalisationString.10 = ebd2e63aed4bbe1684563801bf411d208e18fb27fd01f92f
+EntropyPredictionResistanceA.10 = 8e4a75474243b8af7d7681200272af924c3ae88444fdc0b7
+EntropyPredictionResistanceB.10 = a4dd13a7f8739b05d43c507ff13a84092c67b12265c7fe32
+Output.10 = 573da0b293a28f3364c028ee84254b47765c8a07e9f4f42fc34b5935d192c04a96c3f349ceaa60afb71240f0638bf1a923c4e2e676875a6e5f4c2d901dbaf1b10e1f977e84ce2b3dc1ffc9fbe61361f8fbde7d422f4f715f4744191b1a0469e0ab65938bd5f614b55ce94ed0e70c8828
+Entropy.11 = e19b3707eda0109e911234e88908860001caad549a4b1037
+Nonce.11 = 2325eac082684a563afc9cfc
+PersonalisationString.11 = 9ff174adc9eb634867180bbd6c77e232beb9108c228821e0
+EntropyPredictionResistanceA.11 = 41e1d2bb3f9adecb577e66e1d40c4fe10450a0bc88546072
+EntropyPredictionResistanceB.11 = 7654b52c35eb018b8b846882ebc7aa710a4fe23fbdd05dc1
+Output.11 = e479f002e5eae7297079424ed7f6f21f1a275bc30e2b4d9981e0843f789114b9c41d102f410985fac6cf789127de269fa75f6a1b3f61f0630acbe2d61ca5868c47583871f0c3f1295f3d5e92e53eb12b3289f4df6b6f3104d3be6f11d6901c0f5f99335426ea32c4c985e7ee7e72efe5
+Entropy.12 = 0ca5e2465ec261695c2bef7c88dee62508d8e0324f1144a8
+Nonce.12 = 99045dfcce063e02cbcc610f
+PersonalisationString.12 = 971f191607adfb16a78a03a9adf82ccff0da938dfee464df
+EntropyPredictionResistanceA.12 = 06a228c4c51206af752cebd74ca47763a8b7ef9c2e31f79e
+EntropyPredictionResistanceB.12 = 660e519949471df5b388ae3a9752ac8d37b7e1eb0df5c4b7
+Output.12 = 7248ac8bf7973ae57bd37ed9969529cf99b97667f214b0106a0ddcd84732d965e9f21ceda292f44582056c0e17f469d466569d1e148e6975f7d47be433f68e493709150a1fd85cd755cf8bf174c115bb99f6cad00b7d3014065a877af60a7ab610d58465d1af96e11b59a52347b71304
+Entropy.13 = 2db520e1a933fc796d1213e81b961cb5ab4b560d1fd17e63
+Nonce.13 = 268fece7907914df8bb6c932
+PersonalisationString.13 = ece0fd63dc2ee1f4f4723c84382bc18add990b6649b306cf
+EntropyPredictionResistanceA.13 = 5417b011747fac37c5573dced0111f4764c679d841e23ebd
+EntropyPredictionResistanceB.13 = 890f43e7ea0315be1e71ce9d201e9b26b62cf59251237a62
+Output.13 = 9f923e353543233c2b183eb138e08b9b27c732a84a494169d3013708dfba111ad31e3ab82f1ac90ba90bcec0e07f974a340e42aa43b5fdf85340fe84ff3c1b7fff1bafbe50ad3d9ef459fcb168b854b73368feaf59edcc18cd4ea1030688701e523cf3ff62de01f62d6295a917b8893a
+Entropy.14 = 5afff3dad4ea7255bf8ed0235e7a6ca737c7af0c789b0006
+Nonce.14 = dfa81a9252404b74dc77c99c
+PersonalisationString.14 = f4fac0c01cd1bc8307837eccbaf75de31978f5b91e537a49
+EntropyPredictionResistanceA.14 = 3e5b6735d467912273c38536f7a1be160b1edca1af6dc1cd
+EntropyPredictionResistanceB.14 = 0dec0880ce8e6ef894b9396ef56fd678435ed5b6b39d4918
+Output.14 = 5dbf5d3b2fe59054ab29bd747ac3dfc4026799f493b65a49a528bdd1dfe26ee50f7d8b4a69f96488095d09209f2657d98d2625adfb769188e5fcba1472d8364611e34dbce5160adb642bff5919b54e8ef3c6bf8de8fa0f651fed3878ecee371e312bf71688093a7a625239fb861cd8d8
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 58d8cdb9fc113344e5bd076e040b756612f3084da93f0a5a
+Nonce.0 = a8033ebd06c7208208314525
+PersonalisationString.0 = 3fa6eb8b4011adc97e505de1c2635be8fb444b59fbfb5873
+AdditionalInputA.0 = 8f40bfffd6f3f50a1a90febe120325975eb32f07e200403e
+EntropyPredictionResistanceA.0 = 74916a15c582ac48f34a39fcaeeba3e9248cc252239af7e2
+AdditionalInputB.0 = 0a3244e59895d780272eb12bece118774d9477d19c9f0c74
+EntropyPredictionResistanceB.0 = cc013d2c13fbc5e2e574a0d5691d6715a707e462d114fbf5
+Output.0 = ae1e576075a1a398975a04b8207fab1f548622afcd73d852e4ad39ed039e86cf9309ccbbc246db965066337355c6c5bc76ca699eb17d20a6fff130954e3a52b305a3490ebbf7cfae90314ad47dce9e63202c006f9f0d03a2bbd6ce3c25dc307cc50b849a906c7aa1f6a5f0ee1befc5c1
+Entropy.1 = 624d354a2b4d7d5098704cf0cb6f9a32385c6e4f7205c89d
+Nonce.1 = b023b040367bcc93bfb2eda7
+PersonalisationString.1 = 346e37535d369ea7c88986304da5c42c09b99092529673ec
+AdditionalInputA.1 = 59f6d94c10ee5fd738eb3ca48e25b7bd0c24988c816b1150
+EntropyPredictionResistanceA.1 = 2126e7ae4047c5f11cd9575e297b5f41894175c04b03bcb2
+AdditionalInputB.1 = 60f893b5073ad47a5e7424ad414d63c3cb81650398b71c1b
+EntropyPredictionResistanceB.1 = 53c639ef440fc39b0e60a7e87709ef9c629c9dbf1f35c5fe
+Output.1 = 894c0f8d21775b7761c64f39e57dc240a2d330c8eaf3e4981f4885689cfefc498a4013b312aeda0d0c1d4d33fc3b77624608b8d859fe866ebac351bcd7ac7fa34c53bf0d26f409c46143584f0c285aa17b53ce8dac51b7c4cf29bf3f384b48120dcdefaa2ef1f98fc3ac1cf12d306460
+Entropy.2 = 5afc2d7646401bd21f291e8a96c73af6c9371d365e692db4
+Nonce.2 = d6e6ae82fc3351322c46138a
+PersonalisationString.2 = 3b002c028dbf915cb2d6666452643a0307d3e60accb05aab
+AdditionalInputA.2 = 9d4808b4f3b5e95b42debc9a7f8c17ccadb5c541029aff3e
+EntropyPredictionResistanceA.2 = 58656850e0d7282a1b10867ef5c3871453b2c3a5f73a4289
+AdditionalInputB.2 = 862be6d65ee869bf6120cb276a39d2c44c9f880b052b3506
+EntropyPredictionResistanceB.2 = d9ee799ceb55978fd46142cce4a12f36f070c58f346f90fa
+Output.2 = a94ae64f2be2dfde71808f64e5f71b50c9fb2f428f179666326f13aa2b8478e6437cc8f758c2d800ef517ec434e463c9838a02058162e6a72fd2bf33006df937ff4d228671482de834ede10bf91818f7e228ad48c9b7e1dea013165dc2fd7cd412f5e3674faa3d48dc573b578de559e8
+Entropy.3 = 8971c5b83a099dfdb7d8cae007912d15a09ea98592f044c4
+Nonce.3 = d0d6d97ec6abb51bc234a773
+PersonalisationString.3 = d1f0dce14fd1b68714dc97c8ecc891dfe5f44ccd3aef3844
+AdditionalInputA.3 = ae87c971f827a731ace9506fb05e5cff2d7be7ebb0450fc4
+EntropyPredictionResistanceA.3 = feacbcda6872d25b465e388000790fe1bc2f553e38411903
+AdditionalInputB.3 = 1760f203254f2b900b2ae37ac6bb2c0556dbdc1a1a84d9e5
+EntropyPredictionResistanceB.3 = 5bbaae922afe1a4dccb49ee93a74c6885afad2d307916e6d
+Output.3 = c2fcd97d0d07ff5359faca5d0458acd1b28395b27b5cf5344c9c2b708f41d41535489c687cef15cd4cabe390dfdc761b8c78f9845956c735936bd4b26c9df1e0c0de40ec5f6e7cf5eba72548c890e107cc4c82a5cdb062c1dee41abbcb783929c99dbbacbd5610193e8fa4246feb79a8
+Entropy.4 = 8ce2fa05b5a539546f69223ea644fa1c8dc0226480b06ee0
+Nonce.4 = 86aeabb998ea6a5f5d4ea7db
+PersonalisationString.4 = b87d3cdb00db90a914b3cc11db98b8bf56e77abb4e04d046
+AdditionalInputA.4 = 6588dd1e0da7776e441d89328e3de877ff44711f1173e3c6
+EntropyPredictionResistanceA.4 = 71904a72abaae1a0e3e0fba9337e5bae219c0ece45b2c0b6
+AdditionalInputB.4 = ea1c5cf49884302fdab0fa3dd163802254355beb68886d71
+EntropyPredictionResistanceB.4 = 7fbe8cfaebfa8dbef4d26bc1ab29e96a92c5e06076e3450d
+Output.4 = fda106f10d37ea7b37bb23231b76ff657ef44949cd31a6fe54639ee3e934169ba58b80ecb42ac2e7ce045cbdf042152c1bb581ef4da8a986d5ab1e2e65f557b5893319be10fda33595e05cfb1da4887a0bbd71818abb38ffb2d250ae323c41905cdacd7cee4d616a2d273a071249053a
+Entropy.5 = a9046104fab8b7f11b9bda7119a2657396ab7eb251f7bc40
+Nonce.5 = 3821b3439cbbb1fb50525e87
+PersonalisationString.5 = 85579a769d267b25cd2d41d5b55fe926120b9f468fcc4632
+AdditionalInputA.5 = f8656cf87a0c6a0404587e488d4ae6c38937d411b3ddd3ef
+EntropyPredictionResistanceA.5 = e0a2539c5ac88f764300936b7434081ca4fd2f98c170a1e3
+AdditionalInputB.5 = de2fc5fb89e090ecaa63944dfa85ee5613af76bdb3f499f8
+EntropyPredictionResistanceB.5 = 51e539b18b1a0c650cbaf2654ab62aff137591b519520dce
+Output.5 = f1b92cd98e5ef18e29e3309574c60e2c6c829f77261e6b98796f46bfc926d26b84e96d1e293526be23c28a8ec050804ee2eacdb767f7985c9c36e18746a080e411ed1db5f5757fa9a6722e646a8d9c7f54603a4f989e24ac7b908f433c97717dad0cd836480f8ed9b59785beed1a10b9
+Entropy.6 = 79e18bafacb8186920b24d90bbbeac62a9439e4f88cd2208
+Nonce.6 = b6bc212d4f5662c3aace0ed8
+PersonalisationString.6 = 2f0475ac89dccfcd2e6446a2a8f255b0b2a97fe2c65c5856
+AdditionalInputA.6 = 63115b146fdaa6abd80e8694b4a2cd76f36e364409b26428
+EntropyPredictionResistanceA.6 = 4d53c17091ee2c623ddbc6eb53be4e8ad9c2374d2792b42b
+AdditionalInputB.6 = a17237fec36ea56a3d9c06c5904ccbd18184c1bf0c0281aa
+EntropyPredictionResistanceB.6 = c592faaa015fefcf35258197598e46346bec1aa1ffe4158b
+Output.6 = 3265a06d3baad900618886d5926779337e826edd679a9994bb6444e59e06ed6b56f11ad765734252c6d5f1aeffaeed24c03d3bfc2c42601fc08107917eeb4ab16d76cd920aff46dc1a95cf93ff6afd2313a9f3b7c59037c5df1863f2051558d70fca7d9aa4f8d5fc6d1e042901b3529f
+Entropy.7 = 3a5cf275746d3089d35c63ad7bb6514ada0edb178164b3b0
+Nonce.7 = ef398b92f3405e7579512405
+PersonalisationString.7 = 050c78b852d0be1be3a24879bc917054db8c17fe44b66b32
+AdditionalInputA.7 = 0e2d8d5fcab4e70f3ef09aa65b3941103770e0f0a767b6cb
+EntropyPredictionResistanceA.7 = d3d8d2489293d7b62799e5d7b0a7cf473849619913c61b03
+AdditionalInputB.7 = fc75e64b3792d074093c1546adbfbc04f1409716582c60f9
+EntropyPredictionResistanceB.7 = a2899f2306f91bd69cdfbb1d2ba0251c33df3ef3ff48d50e
+Output.7 = 5ed72360248db678d79dd2e2054ac568239c3bbb15af0cd604686740627ad9856d97b24f7c8bb4fd4adb6adabd04b490a8408cc0991519c96ca22563a81335574c0de331b967fae563473329851b3bdb00ef138bad81e998f91123d00a1aa61b4821db7ebdda586efac8657b3befae0a
+Entropy.8 = d1b295018f7861c49205ad72da78be2a2c89930ffe899f54
+Nonce.8 = 9ed9640a89b382fc56274a4c
+PersonalisationString.8 = c22af82e679a116f00e3e9dc4d71a156affdfd999876cffc
+AdditionalInputA.8 = fdf03a618b1562b7c764f0951f7738c9c79552ca6ae63d8e
+EntropyPredictionResistanceA.8 = f52d933f438f915268ebfbae6068995b5e8a97b41e598ed6
+AdditionalInputB.8 = fc2c921f8fabc564106a0fdd4dd1e86fe9b0dad8253f4684
+EntropyPredictionResistanceB.8 = c6a24b1fe45c7e8eeffe22b9e5ac1ff163ff8c9fcefe383b
+Output.8 = f1c8730426d320b0fcd9f21e2bbac86675c8c9294b5c84910bab085d6e78e62b04610506b2d3f9acbd825a5f37307baeda58a1fdc90d911e7e8ce338f0df8167593d90dbaa11c5d5371aaa98fe190e8310a2b874065562dc920919ce67d4028529f139b4ee980fe453cf4ddac080b728
+Entropy.9 = eceedb9f4aededcbe59eb41469ba00328088c218514304d7
+Nonce.9 = 77d52e58c0f75beecf676d9e
+PersonalisationString.9 = 6e7f7ec60702a3460c839b7fdb1ba98d33d700e01acfbee5
+AdditionalInputA.9 = ca77977457d9660388e52201b57091b9d0965ac55339d6b9
+EntropyPredictionResistanceA.9 = 9319c5360d84aeb178a98600deb119633484a348a1367c29
+AdditionalInputB.9 = c30e3656ee57bc4c29502482f54815f3bfcd65b12e94bad1
+EntropyPredictionResistanceB.9 = 89d920d17b02ba8169581f3d5ab70c483f190d71780fbada
+Output.9 = 29ca33404ca4bad7b1a1ec7c131edaca4bfe563a28e49348b14b30347424013682578ec9d4b9097ead97093d04b40486dd74864324c8a4a9bc05a3a0e4f5f3e118413af8d7ec5a787cf36a9352728c98e86443107a1644f2a725f0d31cddd4ae2c19041e47c23e9f33c69ea5f18a61f2
+Entropy.10 = b26f0367208ec7337100162ab37d637b6b7ba5d2f1d4e6a7
+Nonce.10 = 14a16dfd388aa741722b67cd
+PersonalisationString.10 = 75ea056448f651d02aa30d9dd65a630dc14bbd04f008cccb
+AdditionalInputA.10 = 409edab08f962e1ca02b33650c64e06454dd4cd5310d0f37
+EntropyPredictionResistanceA.10 = 3fd7889e1f61135898ced9539a5ba2e55b46e73fe5241d0c
+AdditionalInputB.10 = 05fc1f1c401836ee7084727681756be9e239f9b676de52f6
+EntropyPredictionResistanceB.10 = 5a9710182388a0a1e9748a970a5dfcaea040494c18da8a71
+Output.10 = e6409b8bab52bb22bc3dd494b7dfb8eed638ef6b3b2492e653bef492c4a58de10aa9ada3099e95051010035c11cddfea14e545a1cc20738a954150ea3161d09d2d457b00157a7184c173e3959cab3645a2397c4de007c505f8b041b294072dd4a9018de4feb18310b58f08c0be83d8fc
+Entropy.11 = bcbffd14a5c8f7f52dab03e300d31c1bb94e3042cbe55c63
+Nonce.11 = e094188641c617110e748f2a
+PersonalisationString.11 = 9d2599483b649a44cf69b425595542841f77664e620a2a60
+AdditionalInputA.11 = 7ebc70273f7571fe640e4c352ccede1d2c783123b64dbd00
+EntropyPredictionResistanceA.11 = 54141d5a8aaa710625d807afd25cbf2847b24e44e6048ff2
+AdditionalInputB.11 = e87816dc7be417cbb1631fc8fa439c5874a15c0eb00a4e5e
+EntropyPredictionResistanceB.11 = 07fbe5b6405e1f1b0469303fc8271c99a68bdbc25aa4d8a5
+Output.11 = eb139412de61b4cbafc14dd3f40caa60dad4c515fa5f3fe15f072e9df6f7e84733667be6acc108431b6cade43677be03c593d54f801af10f691969ed4993734a0363759971fbe520ad025a0cea4f407edabc74cdc798e5d3481bc1a0ff42ca95504f7f3a99d3f818a84adec7961a2ca9
+Entropy.12 = a52e3a233bf8ffdc73e635e9a1e74ec1477b82adbfbe97cf
+Nonce.12 = 6ee3d663e00a785f92cf6688
+PersonalisationString.12 = 5d1b37b12facb3c67d1a9f20f14a7276819743dd615e44d5
+AdditionalInputA.12 = a5627a54267313a3a5027635937f6013477740412d8b4dd8
+EntropyPredictionResistanceA.12 = 9096ada91dfd73d7857eb5900bab426411cd993546434db1
+AdditionalInputB.12 = e7fb7da9edc19c76494d6dd172446f1fb14e5c744cb1b663
+EntropyPredictionResistanceB.12 = 6241a4277ccfe9878b053dcd48261998d12b332e50ea870d
+Output.12 = 6a84d2af928852392bac644940c993570c8284f36c04e574a8481e69f5f2040af757611adb23967600f49580113249ac667793f9384e1e69b5530370e3df36c5d2c87c667ab27ada7fb68ebe10ab22a46a9bbdd1df4b9e5e1d25c474a282e17e7d7278918a3b822841f309e983580765
+Entropy.13 = 0c9f1099552e51352bec9dfafd645a3228eb148f04f69c94
+Nonce.13 = b19d6730a58c8b6e412dcc43
+PersonalisationString.13 = 033290b22a7ec0e00936a528d07439a7f9ee018d416e5ba1
+AdditionalInputA.13 = 1a33ffa4a929e31f764ad33fdc36af815be0a1ada265bf39
+EntropyPredictionResistanceA.13 = bab9aefbe627eb49f1e70d500ccb849bd98675837b92d010
+AdditionalInputB.13 = 625146ef32c76dccf7a3f56df6c371e269aae7ef38d786f1
+EntropyPredictionResistanceB.13 = 886d7239fffa764655abbafd92009ebea3acb8f237cb764e
+Output.13 = 2ca95c7cee0f6631c21fd8e3591a93a4ac4f40a26097615a743173d94c3bc6be225e52f6992e79c80b4b9f9ec36354837687855bdbd12fee7c8ed37d71c458c1f69a6204ef375822476e1c592362277bc29601a3af79910b13dfacad97f6f3edd878ecd012f77ffb3f7714c4f9450399
+Entropy.14 = 143299611094ca53b3455143b0df30ee14e87e360a5c2f1f
+Nonce.14 = 1b62c0fe0e22063e78f7a010
+PersonalisationString.14 = b2f2049e6add2afa10b06eedfbe09d582554a23217377219
+AdditionalInputA.14 = 37064ddd6310168ddad3497db548c67baeef85ec8c948a76
+EntropyPredictionResistanceA.14 = 0e70988ead8fb64ab68af4a41bb332597064eda8da62c916
+AdditionalInputB.14 = c7c8c48d9ab3014e6f94a3ce3e8df9768b3c60f478a5edbf
+EntropyPredictionResistanceB.14 = 00b456fef04acd6dadb600fe9b2735a5d53dc58e9cd3f963
+Output.14 = 6c1d21ef77388dae905c338b72894c8fa3a066d6255e7760eeb307d264948f979a343a25209a3a7d1b6944d013b05142c3fdc155d63ccdf626437298d0a9f0715d6dfd81acc7e45129b6a3b442e8c36527470466f74712b03d03ff1f4cadfa8e2c348639d82919cc9a3e288fc15751c9
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = f188951706812349a7955d5bda1ea9a3f63696daa52f38ed
+Nonce.0 = 5b125d112a19a22a67c2378d
+EntropyPredictionResistanceA.0 = ff0e8dbca7f8775a001fecfb417447391510a5a791289648
+EntropyPredictionResistanceB.0 = b2fe298115628ce2e838cf1ecfa2e915d24a9fc3c20c6a16
+Output.0 = 566e9cadb550e13c3aebb3d94af4f11b1603ef3c81ab03cd0cb223c163adf7bc5a810ca7b71e8781cbb70a8e4e21baf8bb7b109e7497ca9e2aa31ccbb7a26281d38a5c81b70945d39749a37934752fafcee674a05acd14d04134a5a4500178e9190ce471c3f88b72514a7548542f4c9c
+Entropy.1 = b87724dbe6f9cca5fa0e86eae57179c03d9a9baec0e19179
+Nonce.1 = 15808e56497b2dff27f746dd
+EntropyPredictionResistanceA.1 = 12a0abfdd123ae371f1e0bc57e2056633e730863e244407f
+EntropyPredictionResistanceB.1 = ecfc0e0456ed92511f2ff3dc1b1f47f20053e2bcb44c704a
+Output.1 = 3609c4a9be807c07adacd57fcdbda13f25b9185b4fa0ea3aac48a97459662c4bf1d905738abe3f868d3134833d44997ff5455ec0b6d36478513dfdab84c9c1a783abba32781a0e348d5eb33040185627bec85d2e79648b6ada87df85aa59fe4e1443c3f849c44ff2fe2698f33191137e
+Entropy.2 = 87e77a04232e710d3175d2fabbf28b3338e5ad04a9a8c243
+Nonce.2 = 94fad76718f271a839be6649
+EntropyPredictionResistanceA.2 = 8d66c9f7c8eaebc70f2a92095b5b251bd2e074baa6e5d29c
+EntropyPredictionResistanceB.2 = ec45f5021aaaed2f68a9af98e3ae1507fb4fde02f4200b37
+Output.2 = 44aa2a690b559524dc20c73c48f5be59c38adc8b8b4b2373a5a83af95ae388867958084e2420355e0d91aef00cf70c44bdcdef32e042e772529a05bac1ebf3e0d83d6f07579e1a5d471619d47d436e37046baa4ad62c1306681585e108aa6a6f698f346a3321cb73fc703a0a11d6fb5b
+Entropy.3 = 3d235ec77c1ca9356a9c11faa33ef6dff8f25a58531e7139
+Nonce.3 = 5d047e14b2d3dabf7035b06d
+EntropyPredictionResistanceA.3 = 09fb97a3d8de106d14a4b9882bb883a2830f8875ca4be445
+EntropyPredictionResistanceB.3 = f8098d23ec1410b8710536b6f8d1b9afe927072ef1f4d3a6
+Output.3 = b596ef834ab8dfb795a8aa8434a2093db4abb55c63c7845a4bb0924ac912f7af162acee5eb71deba06e18c71c4c29f561875711d8e41c187cde241fa811913020c6ee0213f38bfff7deba7140f6ceed2350329a5a0c33a4760756f6f5f510808aa9eb99735f2d304f83399d4ce5e7021
+Entropy.4 = a4b0cfb1bfa2991715f8d4d686c5bdb83c8cc54928efaa56
+Nonce.4 = d8ad88594eb5c984485b29df
+EntropyPredictionResistanceA.4 = 7d94a95b05d572cdcbbe3e76aa04ebabb9681538a96cd4ac
+EntropyPredictionResistanceB.4 = a22090b9fed7625a599ed8e23e852d52f663a957aa73cf34
+Output.4 = b1f25937840b9e4d392b8458c21aa309b0eeac9d1911dd398b2810ab6b03dcaa3c8a4621c884e37362ad1c1413ca7b631f4cf99e32de2bb436e80bc721275126b1225c54b344df8e41188724157bcdde95f64334354c76b958e736e441be74718f4aab8471552886479f8a804f32dfd2
+Entropy.5 = 2c4bf943441aaf2d473a6ca2382914387a1f1425c8fb3660
+Nonce.5 = 9ff97317ec957a3c112556d7
+EntropyPredictionResistanceA.5 = ad0336accf8641c3854447bd4c31456c88ad0c6bd8f3e163
+EntropyPredictionResistanceB.5 = 66cb8f1cf4a60a6725ea95fa557777c668c22448235d069a
+Output.5 = 2dbe0564a9ddc7afd9dd0a6503263ba245bc70c3ecff76418bedaab5ed85bc8688f5eb0d15dce8c9846b8277c312dceaf7ba39cad16012ef97769ef712bf9a245e38f094d32df557a4b4fa26bfe2e4cb9cb14ede10a2534a978a6d8327cf06439a11b2b94be378a5a0cdbd51e9a3f9ac
+Entropy.6 = 0967d28095c63bc9e85676b9900098f339e06f2cce8293a9
+Nonce.6 = 28fcb9946d62bfc1756f3e98
+EntropyPredictionResistanceA.6 = d2c1820d1b319a1339ac6e0eed1a28e241caf7ab9f3d2fd7
+EntropyPredictionResistanceB.6 = 416eaa1df34486854b3355edec4e798cb84072565fc24f80
+Output.6 = 9e0d4a907bd17586cb1664cb3f279f3d32c3fe8a983866150fbe565f430185e46fe11591b5fd45d7fc2f46769b62610393ca7538d8676da81176ee5e7e7c61021073bafe8a9f60ceb73156851d510f76325b7d4368f4a4fee3305bc7f596bedbd526bddf11ef004fabfb479cc96e8a84
+Entropy.7 = dc1083f0495aacece0eb0bbc61af1d46bfefa14b6a7b88f9
+Nonce.7 = 8dccd19ebdda3ff3ab7a0f53
+EntropyPredictionResistanceA.7 = b3a24d6176b0b5f455ddebf01e0adaeee02e9913d93bcea8
+EntropyPredictionResistanceB.7 = 1b68f7da32ad1b1519a4a09fef5d545b18ca09d5d70d1d30
+Output.7 = fc8257ed4f7224c80c3a0d8c2af292c28b6fd084a85ace8459676a0ca9faeba8b6031c82ecaaa0e733df7f6047791ae7c02ff86a89cf0d3e9a4f75ff16b692986394636feacf61d25c04b22d839a7608cba1dd8fc09220e39244f170d0bdb26e112095c033ea8ecf59c3eef55f611da2
+Entropy.8 = 12925eb862f27e44477428298af664b75788b719f35869a0
+Nonce.8 = a5e994478bd32a118d5d305b
+EntropyPredictionResistanceA.8 = 24e34a162fefba5d6546f03c23a012f118474ff6064b9e48
+EntropyPredictionResistanceB.8 = 2675977d1a7a5e29255d4c47e128988cb18cebfa533023ee
+Output.8 = d7051506046a4f0cf4d2b9b54d8137cd8b633ccb3e3e0a1c24b0cba687f2e77b584fe9e341caaf2200c3b7bc36e6d3f38d8ca06d55786284003de32489fa9f43aedfdd6de1dda615f1445ad291c30f913324913f86372688df0dadf7e50e4ac64cd763e58b5f87bcae7f86e3d924660a
+Entropy.9 = 79f6d2b760ff80407ace04d609e1e2d01e552fea2dd71b01
+Nonce.9 = 721ace1d94950092f839b50d
+EntropyPredictionResistanceA.9 = e0052ad1542353b73bf56db789de8811b5647e53f43cf05b
+EntropyPredictionResistanceB.9 = a7b6c556e04adf732ef181eb7483a33611e6fb5c81461917
+Output.9 = 52c338bc66c577d18863a34abfaf0cf82522eb162a233a1e823996bcaf5ec5d4baafc4872779850cb10f5391b0bbaa567c4f6e9c93bb3974fb99dc08781da49324a0a497ec5ef1111ac52b705463d5efbafdaecbc9a45c4c3368e12b266139a0ac8843465b7639a43b7df8ce141b704b
+Entropy.10 = e388899f6211f6b33a17feff0eaaf288206c7542820dfb01
+Nonce.10 = 322f6c90096db6dc2ad09363
+EntropyPredictionResistanceA.10 = efdd183dcd682d8cf92af429f59ce9528d62259d4f1fb877
+EntropyPredictionResistanceB.10 = 85a60c4b2f7038a13afe16044036cc68d9419e8bc4e0ec5e
+Output.10 = 4e040b34bc8b4c5c9d4a00c0ef5148a18d46e1daef37c0f21afd0ddeb8d712ef1e1c1c0104c1f6a19e1a80c6d2c8ca270944cdf1b387902f1963ff88767598efc72718730c937d124b0b5e1a4c39148a2d54c7f6094092ad22b6961e888d80acb8e8a2ef8bfc6f51a1df2dccad24a18d
+Entropy.11 = 27763dd4c06ce2a5746014e3e4a53a9f611f1fc5c57b1a90
+Nonce.11 = fc3bb9f3bcbe89ce22a4ac8a
+EntropyPredictionResistanceA.11 = af914924b8af008b7f0fa0cbf6d2b554d913723d785c9b4b
+EntropyPredictionResistanceB.11 = 16ab87bd5ca7509f4afbd5c427abe1b415ff8d85990eb671
+Output.11 = db3903e740cd3700d0a4b49c698710486fe6cfb0088454bfa33d6ce8ac12c58c728156e1ad825fb2184a5eea64c77898ef6f3c02c3f1b0276630b0995f55a7ad7820a0773fc93b67b78a047e5db8d5e75f9537c26ec12be8ec7ae891fc91a366e9bc58b3e0a4d72cd66afc4ffe54818d
+Entropy.12 = 2b3f8094235c7f1920cb57ba6367d7a92bf176008ed91dfd
+Nonce.12 = 9b4dded2c9a50337bde61e0a
+EntropyPredictionResistanceA.12 = 87043ad466924d9de995b4ec5dc889214a14fec623fa83e6
+EntropyPredictionResistanceB.12 = 583182a03dc6618235f4414067f05b04b98ec07db694acd0
+Output.12 = 7f29057a2f3b18b3da2ebc9f77baae16d23af6faf65774eed25640a617cd3f7226e92d76816fe5975bbba2e088b9c850c9671c5cfd26118e89cd5098f0f0bb97a38db6e7567457fe3118ab1c3bd8cd4102c4f1de45424dfeb4e301c08fdc5724b1fe495d5303c93ffbd52421bc7acd5a
+Entropy.13 = 4fa72810e52c2b29b91d679c3dee38afe67bc785635a9906
+Nonce.13 = 869a4a0bf4ac724f53eadd48
+EntropyPredictionResistanceA.13 = 0047688f0945a6d94751a3d364d30a9ba32689b590312e16
+EntropyPredictionResistanceB.13 = 1fee54f31a6f022345f1002b7fd8343fb21e6df81be80668
+Output.13 = 4e3832c8c685c871a9e37dfda27d04c4c4b807eba6f2bc809e4155db9bc372da5701c5c6eee74913d0bf37eb7359a242ddc7e5ae6e89ded06d472f2979fb83165107bc70463d2c226c92aea320fd1fe037339f7a4c5146c66cb34eb133199e5e0b2d01a59528cb9c9f8e09cc5715d33d
+Entropy.14 = 41d176b7bc63b29b175e9f0f4c82abd2354c1ef15a843278
+Nonce.14 = 7f32f24d26e1eb2673a3c8a4
+EntropyPredictionResistanceA.14 = f9902e3d878151db3849537f186a7b2fcbcd10576aab5e9e
+EntropyPredictionResistanceB.14 = 9787f601b4a6244569468fe586a67e2e7733ec0f1e2405ed
+Output.14 = 8338c7e93fc15595aa5828c90f064f37221439c1e6d9c51a0986fe9f3e9b719f0a05c9dda87f3f88543b2ec0005ec343b62a3929ef720fb269e8dd1cdec36a8a2b867876752b8aa23d6878d0e9f3a27b06a7782a58ce68fe80cbfe6b5795e7da0c34499dd153b202c5432e37e03638f8
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = a83e9851bf5f10d6640eb949391f3e9f24fd16adc3d47586
+Nonce.0 = 493b9c30b76c7e79bef7d196
+AdditionalInputA.0 = 24b09e95a87918f975ec422c261970d2ac25f3e633c8f407
+EntropyPredictionResistanceA.0 = 10249d3f9e459e5bb001b9c174538e321fc80b131e94dddd
+AdditionalInputB.0 = ada62766e2d07b7e92c5f7bfc689490314e5508331fab00d
+EntropyPredictionResistanceB.0 = 06791378b9975d06955f6291baf670c64f7d39eda1198176
+Output.0 = b86e470262f90762046a8217e3f61d85e140d4b5a13b9a471019ecb384fbafc35f525b355627abfb8ede5680f54013c7055fe63bad77fd77ec4e7ee4d65233041d9ce5137ec9387ab0a1f3f2fe51533a370d03cecbfe77dba5dc57008d90fc84b44cb36fa58fe73730508c6c11b61d60
+Entropy.1 = 881834a907533544e1bf8f139b567e73544909be693d1413
+Nonce.1 = 0dced39a04a6bdd9a5bf870d
+AdditionalInputA.1 = f084b2a4b7c65ea4591e056a0ffd91c9cf68c424bf1afe88
+EntropyPredictionResistanceA.1 = e598c70636b4ad8b8d55ec57b25a58797835d71daaa9ac55
+AdditionalInputB.1 = 7b6b5e211cf556b8f425a3fd4ccb4c87fc148f5a37fd1bc1
+EntropyPredictionResistanceB.1 = fbe79e1a1f77d469c032f74374a19d8c966ee294621af49c
+Output.1 = 3a50e9658f75867d81404d9cc94ea6c7c5447ddda8ce1670f26848fea8839c511a996adb7d21eafc466e559c243aed3c67495539a9fabfce023050069ce22343485753d6f02593dad19eb67f9de48bd1267a5a4e8bb507d7fdd39a56f5dc11dadcea19e0da27a2cc73b9f786eb6a6f48
+Entropy.2 = 4c61874c7af225cb270d2600f8e8ee092e8a2702f9cc072e
+Nonce.2 = b131c69de246acd735e6d077
+AdditionalInputA.2 = 6ca0a1c70a7f8f704f4543580c2c8e42be0fdad5a21dd211
+EntropyPredictionResistanceA.2 = e6af80b6f64e9d474a0f05662e3ab9af9566f4c02f92b3f2
+AdditionalInputB.2 = 76719bf8db7f826ac6801c3b193d88c0e3d8900672f2ffc8
+EntropyPredictionResistanceB.2 = 57d06944f0c48455f85732ff1973843bc2c591a66a244a24
+Output.2 = df6615bba75e7fca7717ecb5e279be822410211d99f53410b4352ea586182a568e5a2bfdb458c9aa87fcaa97caadb2f693f48a9e5bdd6fbf6e61e6e2f55c7b9af78f0dc65b8d8bbf10ac77cc7eb79918ebe043010fab84d2baa2fe60d3d295e7d0bd2d435926e78cb592178abc62168d
+Entropy.3 = 47c5e2d8cdc60f229faad6fe333ac83850abb49c2d69c87a
+Nonce.3 = 168811283c07becf62b9a34b
+AdditionalInputA.3 = 3381e748bc9d538bbdf975ab41a6af5480e8f07e7dfbd9dc
+EntropyPredictionResistanceA.3 = 17d730113ff6d79f7925a477b25ff353e2f9e78ec21a9ef0
+AdditionalInputB.3 = e14f28eb27141ec1fbe836264a7b203a50b85595d2f1343d
+EntropyPredictionResistanceB.3 = 7b28da399cdeb62b8a46bb128f91780dc8811e55658db55a
+Output.3 = aa3ffe4c55b2d824a81598efb14217186bd9b284c5c9d0f2ec2132a4adf5e29e6e846d06c8122021d802a37ebecfe1453a7700365950785889b91b3953d9cd1b3cd5fba6e12b29785bc540b3472e7fc9fe7c334fdc1c19ce198341ead1ca7cfa1bf354738a78ab09d876372be4f5c303
+Entropy.4 = be5660b3d2a022f5dcdeb28d0ff0bb897c1e691f267abea0
+Nonce.4 = 916de8549692a5f5288a26a1
+AdditionalInputA.4 = 124f480c56961e2b2ea18fce1e59983fe5495fac83730882
+EntropyPredictionResistanceA.4 = e3a2e3e14bc510dcdf19ce9ab13c56153f4445eb6a53525e
+AdditionalInputB.4 = c4b57801190cb783128a3a27960458213ee918ca3f37d3da
+EntropyPredictionResistanceB.4 = d2c2b2a4f73b1c92dafe5569b1e3859b3b345b69befde649
+Output.4 = 5b9579ac180741781439d0f7f8c5f062bdb5a96bab8b4fc415106036673378618411cd9d083bae9eeefb6ee50a0efa106638eacd75f046a3782ad045e86fb9bc3e33f4813afbc6447b2dda04f7c16c7200b5eda2f13c629ac5057b31748c8b3eca4cf1b22c7adde2211b6a69740c4a5b
+Entropy.5 = 95973485b76c2cb84e49be11ba0207442e275cd0c59b8e8d
+Nonce.5 = 507ffbefacc41c4f8f812525
+AdditionalInputA.5 = dc2adf9d5d4468b806f4d08657ae2a25c0d04deb821a756d
+EntropyPredictionResistanceA.5 = d44cbed426c0239de48b7ac89de3eb3f0deebeb856cb809c
+AdditionalInputB.5 = 63fad79f6e0905cbdeff0e981713ac7638c7429e42ffe3a0
+EntropyPredictionResistanceB.5 = 9fb233885e4395586ea9847155d59f02ddfe88e31be44436
+Output.5 = 13fa3c5549821d8f58ca5cd88d6a21e37ceaaef286b116dd8d4a4d1fb98144bcf838f547435631ed7054ffe4b4c91046830ee74132706498e8ff9e515b729bf766bbe1fd7eec2f62193fc6747f186e51446d5c758954afee4e65eacde47df119fe922706ed2760a5f83fd1959d0ae84d
+Entropy.6 = 454bd733b9f2cf0509638edf11be6fb4533218d18c72141f
+Nonce.6 = 1d8dc95352c38b2419f3d2d2
+AdditionalInputA.6 = 7be8d87a80b57d9fd8201366def4334bd6fb8af95616c154
+EntropyPredictionResistanceA.6 = 33cf23fd6b0d9dae4bb06b31f60c1d5d140bef53b9ac4db8
+AdditionalInputB.6 = cb6bbfb375b5ca53f14e624146da3a1d7245fd9f07a26fdb
+EntropyPredictionResistanceB.6 = 05e26e134f2b2f96db0af6fee45fca0c73d275e71cc8bacf
+Output.6 = 35c478d5275fc3a590270a4425435790f627c3d1543c14186dfe151b106f07244b692806a15ed57a5d1c9d781f7f61b44a487bba81d56c21af5dec0b47796128545b905a262bf086b53c289e519d2cf45fe7461ec0bcd52accc7b7d90e9ce11dd790ae878f1e5fa6135e9689e980b362
+Entropy.7 = 9043529433be122fdf6317727339adf55f73881bf25431b7
+Nonce.7 = 2122006725e66709c919368d
+AdditionalInputA.7 = 7df48a8a060438a8502303a1b7d5eb24000cf2417f8a0da9
+EntropyPredictionResistanceA.7 = b46b64554ded11b9edac19bdb4524b9a1bc23dc272a36cd2
+AdditionalInputB.7 = e22cc734894c68adb953050b4565a11cf58c392249fda397
+EntropyPredictionResistanceB.7 = 21c8582b2b2734b1489fb3c2101db7dc1572837aceb4a402
+Output.7 = 2bf8d8eb7d762cb713003ccd44a39f3895730990e0badabbe6e6c2d77295a78270cd0503409492e4f303c9203107dfb7d40c64ec6381d4edc5311f32872505fdb61c9c14c15bbd7ded36d2f76e7dfb6c144e6ab472dc67b8d143c364eeb5c0e913e8a4ff7087575ebda9468da7254151
+Entropy.8 = 8ee790dbd766cf5b5cd75a42716912b6f379e47843608e8f
+Nonce.8 = 440d0d471f7c04d59fbf713d
+AdditionalInputA.8 = 0216fcda15da52e4fede7d828fddbb51548cbb85cf0ab6e0
+EntropyPredictionResistanceA.8 = 7b21dbcb5970faa47c33610a52edfd073e6049a4eaec3186
+AdditionalInputB.8 = 48f6cbaa5f9e0913e87c4645b985aee12c50c2aff0d3598b
+EntropyPredictionResistanceB.8 = 26994428fab7fecf4131d5572ee5d182ff77e24037453652
+Output.8 = 1c4b107d11ee5accee3e2cb554f5c0ac77f38e67753e5dbc50ade68dae679c0b945497a0d9b1b07e9d7b78c4bd39913511f486357d7ea92a05e3958ad61b38104dbcef34bf3ea536860570d987e23f86af5dc801b9133fb8fcbbbf792eb8bf6e67e45d94b894d7a829c9ad5e9bd807de
+Entropy.9 = 635815dfb6f45741911e1c90319fe4dca74dbdfdd5d9086a
+Nonce.9 = ca286aab36514d4b9830e183
+AdditionalInputA.9 = 81a19027aa2997cb44ca0625a0ff172d121214a4b37a4df3
+EntropyPredictionResistanceA.9 = c5b9cb540a899763f601a2a740908a40ee3a6e43f1516f0c
+AdditionalInputB.9 = 1cb645c56ed90b42b8ee95695d053b146f021bd8765376c9
+EntropyPredictionResistanceB.9 = b837c90cda1cca0cc74fbe779e1c2ab79b09e36a28d467a0
+Output.9 = a3c2ff0bdecb6c81d0cb8d8208c413f515f3f7d0babd2de455c7ef3c1aac0bc91dc0d5da4aa6102a6090e50d4644c0c5e78327bf83a4cb5e601e32ae7ad894af03f9ffbd0a909f6f0f1d3f95939e7ef63d1b48a8c6528f3fc158ceb3320257a71e3418b85446e54ba390fb4ec8a1fe6e
+Entropy.10 = 2bea3b95c0ac952dd908c2b53f9913a36fd3426349118c2d
+Nonce.10 = aafb170f0c39d37f6344d926
+AdditionalInputA.10 = e5963ccb2e8a3bce8ce5c0cf8ec6dfd204bbfc73f5a22908
+EntropyPredictionResistanceA.10 = 7fefdd5ca5e8b109c6f71c6415d7f16025965f35c09c00df
+AdditionalInputB.10 = 86fb845e535d4b33c444a0dd32b5bf4d021f901f569d273e
+EntropyPredictionResistanceB.10 = 61a03bca0c6cff36357c0da2f578fa23b19404785e7dba22
+Output.10 = 82821f47caa5955f652da30911399f4f12c09cb6b27c0befa71906697a3fd7e956d7eb9cdf274757012a145c70ab2f9d57cf122f8137742a812b5d4aec7bcb56a4893340aa1c406eff6b82cbcb0d420d848848988b76cfced2459c9072b904b1bfe54116e5f7551197a286e5d6722f66
+Entropy.11 = 718a8c8452629e2a40f3ccb0f261fc10b3d3b1a9b273c2ab
+Nonce.11 = aaa8827934b9a53183b79a07
+AdditionalInputA.11 = fb966300aa830504b39758af3277c49233f524671549aabf
+EntropyPredictionResistanceA.11 = f883f1cbe231599e5416f7b484000769fb6c940c37043ae1
+AdditionalInputB.11 = baa77a43770394c26e0b15236bd6bd929a378c0288f5a7b4
+EntropyPredictionResistanceB.11 = 48a79379a81d01646af7a20443742d6b64d640c197db1c7d
+Output.11 = 61531869b4579ec9b6cf948dbd52c127f3886ee74075ea8519273c3f21f7f7b13b4aeecaad9e08bcd257a3b5fda454c2bf44fe83f8d5bb74e133c07bfbb595fd40a7a292af5a246833b67bb01a501a64d5f92787d10879f961540c5b5ccabd1fde72bd241cd8b0035e1e1fe30b62188a
+Entropy.12 = 516e92c300fc2de6324a1d6b03257446b8bddb0b8a3d7f5c
+Nonce.12 = 08c856f043bfc91c7e96ff69
+AdditionalInputA.12 = bd91113db5a167b150cf46544c207c8fe00adfc605f592bb
+EntropyPredictionResistanceA.12 = d54a7bbbaec3473422052de7b53e861370aa0d9c347f2110
+AdditionalInputB.12 = 7d68b5b6c7232b1270ea872ba2ea5e4ffab34b38fdf346c3
+EntropyPredictionResistanceB.12 = 6cbf015a659a4ad82150c7667e96e8222b10f227114df626
+Output.12 = 47d8c4f938ec0d92f8cc522c5f94b29f4ac04829396f6c7d1ee7b19f8fcdb59b3d0397c00cbf9b23679428e478b491a64e4312a87198cb57a195963c71096744ddac02512405d6f300ea1973bda48145988685a54cc4c3a06160617855f3a14c7e1265b1f07dbe0f89ba162dcc8f4351
+Entropy.13 = 98cebd84035f43ed4d9093386d457cfd274f770de077c699
+Nonce.13 = 98c79c32eca4290ac86e4ea7
+AdditionalInputA.13 = 97d389161cf2a20375b3f4131b8f44b22d3629921a40ccd4
+EntropyPredictionResistanceA.13 = 4c995a3656933c321908f04b3b9d8ea522713a74bb814d3d
+AdditionalInputB.13 = 4703a90dbdd4e0a182e9717eb1ab80b108d3b83b8a6dde49
+EntropyPredictionResistanceB.13 = a1b242062ca292eea1ebca6b00bf1e97923bf27ccbf292ed
+Output.13 = 3b41e9aa704bec15104379c6b8f42228d7b7b4c1a95d74043b3858a9ff11da2498717801abe851d99b49fcfff1af1c3714907aacd90b7f4caadc07023832575b00b0680d796db63a42d100fff96f184f1ad0d3d43a74f04573da18f26b6d706395181b06aca71f78c4c99fdc418066f9
+Entropy.14 = 16ffee9647fc83291d60570d08f89183adba86bc58246aa1
+Nonce.14 = 103e11d2194b8862f42c91e8
+AdditionalInputA.14 = b708f571629eeaf7f0adb8f04e084c3104bac5f85d710c62
+EntropyPredictionResistanceA.14 = 88251ca615110df2c348ed5968421efdc83e5dad956e3003
+AdditionalInputB.14 = 69b3ec5d555f1c338f45a72c56ba8f714894c069e47d329e
+EntropyPredictionResistanceB.14 = 9a0350c1885b5f69fdd13e8324b8730f27c92dd96c87916c
+Output.14 = b4a922cfedb084156cc73d5bacf1a78090935fb1a5368e02d1bfcd22ff497defc9784e16b14e19777c50f0db895c3a61fde6f97988315e427b4323c9c0ddee5eefe49677b37bbea5a6c9d43cd7c3279c7502154e8b551538e10c8bdd0cf35ac9379931f0bd7acfa82291702648612815
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 93c5dbed462b2b1cbbc7352eabdfe11f63a959377a689729
+Nonce.0 = 137de982686e3280ed059769
+PersonalisationString.0 = 1538b5eb4eb02d6c3cb4e41b48af209f6f5e9f2ec1292cb5
+EntropyPredictionResistanceA.0 = 4f6a0a706ac26b02170c287baf9ff45b741c11481431c3e5
+EntropyPredictionResistanceB.0 = bb647d7316ba5099bc25059d5b613e0a1d5beb2f15658dd7
+Output.0 = c90a8f1ee382d1459f6014554ef1c196ba67ea362ae4bc0618eb2077de0df6f84dd58bd29568f882dbabc4753757b6b09eb4436612ce25576fd6027af28635205ebf946a7abe5328e48cc1070d0ed178c3b73ba509f9d1d3f7a730aa8f265070ee5d29a89f98d0abdaa8aa2a3402202c
+Entropy.1 = 7f72751c5d2a3ba206a2ac0249da3ae43d9652fcc939df0b
+Nonce.1 = ee7f3c85129357b631097033
+PersonalisationString.1 = a4e462daad2871f7dd54e73216ce525f77cf64909705d29f
+EntropyPredictionResistanceA.1 = e565fda93b932bcbe08c9ab33e2dc15ba698126c37b8c077
+EntropyPredictionResistanceB.1 = 94931b583d0bd2e99bd2acf1bcb5973377b5bce1927c2822
+Output.1 = 507324130c0501da2009eec1889ed1be3a1c090e1aae89eb65f927d08a6d4379059d93e5d32528a7e49b0a8b23826f68673e54d1a4baa0c6576837f4e6f0bbe25dbac8cdd26d5b5f75c676d7460e1e75e4201e1fec64dea40ba3592c6df12d117ebca17a537ee09b3a2118191c34e968
+Entropy.2 = 8d7f0973b44f1e60a426147aadaa509f073ae0dce9911c60
+Nonce.2 = 4433883273182d77efcee081
+PersonalisationString.2 = 011253bf8ccf7170a2124eda2a3ba5df3e3d5106b7b36c09
+EntropyPredictionResistanceA.2 = 8feb2500dbebc61075fd956b0a723a31a18202db23f81b41
+EntropyPredictionResistanceB.2 = 81b7db37f2e8991e46c86392c11f516e5667ad091474b6f9
+Output.2 = 07a9a7de602552523215d63ce0ccc99016ae8939a7d544020a7c4f16bc2a9035a216452ca2f287d222a10c1564b45863473ce76147c009516ec47054a5aacae00986919696128e14293d0ce623a4866ab06cb49f0685dc464a3c7520747c5f8442166518f647b02f0ffb98e6d42cdf68
+Entropy.3 = 6558fa0b66991b77400f6b56638e3012ed3949d14d88eb57
+Nonce.3 = d71d033a4aa034fea946e0ad
+PersonalisationString.3 = 7c00dc2857560702327cde748d014702e9bef5e107aa5382
+EntropyPredictionResistanceA.3 = 5df2ae3f89fd5ec7a15d12d15ad849424269610855adb4a2
+EntropyPredictionResistanceB.3 = 5eb8197beb1f867365e5459cb6742e45237d595593489aa3
+Output.3 = 1bb1dd2a3a74dfb8c0a8929338330b29ae25054357994dd140824be9c65f57909d4b985c9da8d75bdb04b76bf73a3892f88847b1d33fe79cad0258c0222176a6351c6942b527ad63f1586dd2e0a24e45faf35e823d13adf3a399ec546b7e2270b74c3df1fa003841efa53e5c1d2057ba
+Entropy.4 = 5be81d35a9f7740a0f64aa43e370179f6e363cce23a47232
+Nonce.4 = 9b4ae5be9517d7310ebf0bb5
+PersonalisationString.4 = 9ce6537feea39c439206bcbd9e0a878a12a3664cb1c27215
+EntropyPredictionResistanceA.4 = df0cbaebc3eb8746458e11105f1ce36073ce20b82a3b7b10
+EntropyPredictionResistanceB.4 = da6a9195c2720c0d3811a6b5f83adb3a924f78a1dabec59b
+Output.4 = 26277b1f3f6207b1ae9419305e29234aa1ea39c28659634895989cf168065e8faa4a1ef5415af1b3f5d511c776109f38d7e8f274d51a44ae71d745a7afc69740ca5e47055b6a7d58c8678e93d19c529751aae19ef555f9b55ae4e3fa4d3e9c8ab0cca96a27f96ec53ed0e3ecf7baee4a
+Entropy.5 = b74be0b7f4e996f227125eda1e991d4de6bb0568cac2938a
+Nonce.5 = a115b0351766b6dc412e0ee1
+PersonalisationString.5 = d114b923bad838cab22e5e94786daae0839b161d6b6fea5c
+EntropyPredictionResistanceA.5 = b17de1db2b99b7e67de57832227cf57eccfcf68a98aa1033
+EntropyPredictionResistanceB.5 = ac9ed4b227c9a99308e76728c18c3117a76fa05a5213c9d4
+Output.5 = d0b002097e19d1ae704151062f0b7cbdd80d55b134b16061da999a1f72257408ccf64c44af93d16cb076e96c9bdd0972b743ad8d8fd20b8c06e068b76e34e1e09ce81b3afd8aa8766b2491b9c12fd9c3e02b67432921b205924018f0279dc5a29e493cdb9481ff4a4bb1085d77d6f512
+Entropy.6 = d4d5a951eab6207cd815d22d885b51f53a29f7a1cdb14ae0
+Nonce.6 = 53a4f5bdc82134bb8c3808ae
+PersonalisationString.6 = b7725f89c8fff9ac2dbb25230aeb18a4e87c00f31c124d15
+EntropyPredictionResistanceA.6 = ef46e877834d80850c0ecc17e79e7d0117049b69b37292ef
+EntropyPredictionResistanceB.6 = 819e66c2931fb0f6edf7bfb3229899a2dbd03da0e7936462
+Output.6 = 3caf32ceda62ca2d6fa94fb98bd64d2e3a9cf6c7ca0ed51a299dba30bdf0d66cafeca23bb78a54f8970b578ed94594950b5843cf46ccb25e50797b35c8824a4aeea71184c1de61eaa6e9a864903424e74dcde2bed70dbc8cdbde4a55d5b783b83830d22496f3f72c5a7ff1831d12fc6d
+Entropy.7 = 660f6d1b44506ee6c8aafbb5a8e6e6865f2f009bd71c3726
+Nonce.7 = 8e7746454facc22133e8b758
+PersonalisationString.7 = 42e56cedea437e6e346572bcf968ebc538004d5273623e50
+EntropyPredictionResistanceA.7 = 5787b3b694e069f74e4fd85c6efe5ea8a86d4b11dbfed539
+EntropyPredictionResistanceB.7 = ab4a66c5d405ac9fbe337f9fd09b7423ec1991b81153b7af
+Output.7 = 8968959d54c53810369eb7bbf4be83a2095ed2d716c2cbeebc648b29f41b0f6e93923c8358623ba79fb81423d825cbc40670b719dd9fc956d875d6d4676e4c6cc517a6cd57ad24a1776b060694100f6d12e8c86f247cabbdb5f9e98333ff48dc2446d8fd5e766b12185982b944554d74
+Entropy.8 = ef303deccccc7c525326310aa51468d9b2afe76bb857dc16
+Nonce.8 = 536a5a4547903a060c8e8cda
+PersonalisationString.8 = af43081dfdbc5ed37755c133e6ba7f3480edb38cf417c35a
+EntropyPredictionResistanceA.8 = 1670d3039e00e38899b5c0d70f9d2ff9b2d7addcc3f6dbd9
+EntropyPredictionResistanceB.8 = 6c5aff895c24cd500fa114d11c2682041decadf664b0487e
+Output.8 = 19eace5a51f99d4f7ceb0fba15f8df0ca378731d4a3ff69346a2db0411b0bf580eae198e5bc81c879efa29132aa33da01f0c324726a37686082cf9f523cd02c28f8ee5e62ccc1fbf6dd2f12e1818f8f1c5384af55b22c3b1721f72089e8e3799ccb6c5cbc9e522d1ee32a0d519834141
+Entropy.9 = 0f703601471a95645308dd45a8a7e89c0c6f14414cb7fc52
+Nonce.9 = 8d4696affa3286ba9815fc42
+PersonalisationString.9 = 575f3f78feb4fc65c4c53bfa723753ae4988a1ea2af663d7
+EntropyPredictionResistanceA.9 = 43c0188d17fb92b2049f7b6abe74eda505b36932d485aaa1
+EntropyPredictionResistanceB.9 = fcc9d3a0910763c2cd0547e469ca7e508c428dc5fd14322b
+Output.9 = 4cc48e46e58221bfbf50f5412c67239228a5fe9058202ba8307a6ce5544dcbf4ba595b98b04d571d9bdcbfd7288cc89ca232899cebe8d96d1aa35c0e5e5bbc0dfb87cba6dc321e1870532d48cd01a11f10f072adb271eba8dc01d017cc3fd4d2d4b2d58d04a85438bdeefc264cec6351
+Entropy.10 = e51543ab83f16760c3b83f41665d3315fccccff8a2dbd1b7
+Nonce.10 = b5b2e4eaf05868c5559d4968
+PersonalisationString.10 = 77d1fff5200860555396fb8ecfaa9ac4ad673faa80646287
+EntropyPredictionResistanceA.10 = 83f385fd90409ae0c3d6ff739a6404762b3089553ef22fb3
+EntropyPredictionResistanceB.10 = 922a264f2eb2e933e984cf91b2d9abea393f91f17d046fde
+Output.10 = ed35c7ae0c75a8d3d33f937ac386d58dfcd80ea253d68113c32e4b960590a20f4d4b80df5dba5ec1d18e671a093a27bbc4e3579b37f32b468146b8ea6ec9d256da4c834a9fc178193a181e3de324d5fd1a3caf203b91ac127b608225a6a88952ddf4b15558d0540e7fd6512e8ebe6a26
+Entropy.11 = 7a3aa9d742b42ee48d6ab7e74b274990560d1768a2ae362b
+Nonce.11 = bf31d840f8f969db8ccad2b5
+PersonalisationString.11 = fbfde5b6537ff856c9ffedf67cb844710dd07f007f410c8b
+EntropyPredictionResistanceA.11 = 638cb9ab21c1d0cedd865cab4db3835dfb88fcea127639d5
+EntropyPredictionResistanceB.11 = eb80ca885f873fe5c91ff71fb5c27a67cf0779f635d4882d
+Output.11 = f756a33cd16f32be772a35f985397ebc75484142c485ce53c8d86adac13c7f16411e9a9b99901872e844702c17a1cf1b7229afef2caa821a3d0824338c31368c80d1d2c689a5e58a5c6a333819e9ca45514f1c38d5335cd9b10b21b17032a518b9106c01febc378b56cf699d3b2f57cc
+Entropy.12 = 7de784abc71011ac9123ebc40f0d2923d725cfabd49ed1e5
+Nonce.12 = 3fb713fa1282963edccddfc9
+PersonalisationString.12 = 4ef19992b98d065af2d3b8b093da961d54ccf9d0abe6f6f6
+EntropyPredictionResistanceA.12 = 58987a473cacc6fd690b85c82ee3b156e186d51d47fc49cb
+EntropyPredictionResistanceB.12 = f0a5306b2d505ed4f80efc033adb5198a1c8294740a2e37a
+Output.12 = e88fed70bc3db277d596a5c782a49573cec23b087d21f52e103fad0b8d94261c3102e7062df76da86b8282f1ef7ef667ef05893ec7dbaadd128ced94261a390ac614e59b95a63dcf1f02153fbf7148d3c1e561267527e17d933a50821240d207cebd5ad6855be9cdc4e17137fac39a34
+Entropy.13 = f47a9655e1786bd85f376f5054a612214249241394a2f062
+Nonce.13 = 9ef959290360dc09eefacf31
+PersonalisationString.13 = 85a6030a89d5b13d8340d24fb9888e753413171ec0892c10
+EntropyPredictionResistanceA.13 = a1c606897d122513e71fa90bf62cc48ec00d7d3220708fb9
+EntropyPredictionResistanceB.13 = cd67eab6323e253d8a04b592c791d9317a2fc956830b2bac
+Output.13 = c442934ec5ba743c6a12521e5bca0ad8b91a8891604036cc70c1ca99c1f637bb6a6cf8161ddcef8b6d993a8776d9032ed04a558c92d3f7ccbe6547651053e877a5baa0523eb684955c95361d16423c269be3158b49226c2dfa2fc9ddaca0912c7aa0558aed4bfb1d5392059f9b4893e7
+Entropy.14 = 021d53ec5b9adee9202a644e7ddef56bb777b6bcc3f17d31
+Nonce.14 = 075e7b301cf940beb4ff4b4f
+PersonalisationString.14 = dd4fda3b00b6b1e510aa3cb17581dfd7eb4283c78ad2c8eb
+EntropyPredictionResistanceA.14 = 80b2cc6b2d460340d5915e109e434d05ab4861378d65ea92
+EntropyPredictionResistanceB.14 = 42a0f1f0e9a911d0e12948a235d1a125e9462d5bcb605b98
+Output.14 = 38df6537e3bf2a8ce577da82336ccb234dcfa6fae8bec62c1ee38be0f9014f49695e4200389a55291a95b97ebd09ccb7c392320fda66797ab1979ed0ea56772456f36ee287bd683c190c438b1ee0c4c262ebc4b2e5d036b3f50f0630da695b271c3cf746162258a4920be29c25dcf201
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = a6520ae24a8e9ab07852fece17914b2d2e12ce624588aad5
+Nonce.0 = 432af82b3ba0bd4be210b751
+PersonalisationString.0 = fe312e6f7690e02d7f79c97c77336e5cd17d2c869a39c927
+AdditionalInputA.0 = bdd25a1fe6d56267de7e99a0d48e325039606169081a57cd
+EntropyPredictionResistanceA.0 = 576f632cd85d9cd95bdad1c06a91d6473194cbe990954b69
+AdditionalInputB.0 = 3959a2c31500ddb16d0a6ac4cb7df5730d3fb3244987ddd4
+EntropyPredictionResistanceB.0 = a2ac0332f58e49ed4e89b5603e7d72c8e8e5cfad20e8fab5
+Output.0 = 352ca15bc1eb5c4dacadf9335953b8920fdea9a2864fdc43cc025b0c3df7fbbcc239c2188218c37617851a0bef79e18f1fa64078e2e84c072ff00a0cb1bb41ca3c80a4c273c260cf296e9a7104655bfaa6b8eb315109ebd4e22c726e43e8f46b2134f4257cd8da9cad868748739b61b7
+Entropy.1 = 5e2d5dc58f2ff321431b706767e91a2a5338c9117315e5bf
+Nonce.1 = 04f4cdd3536062d991db342d
+PersonalisationString.1 = 6ea2b3f0ee54c14f654b88756e4583f919f5bc9c018766f7
+AdditionalInputA.1 = f40e38bbc200c7f88ac7fedadc0a512bc2ccd2678b59eeeb
+EntropyPredictionResistanceA.1 = d44a344819f2246843cd2f780b781b006b60dce3d0b5d9ab
+AdditionalInputB.1 = 08877ab9859542bde16ee172c16f4ef2692d77d263af4984
+EntropyPredictionResistanceB.1 = 6b78c51fc7d0553b64b44851079433840beb162fdb351c50
+Output.1 = 14c7abfca118584e4656976ba0eede6d7759a6c51f099dc8e3f3b9eabafc356f78b5523e274d19a65ab2ae112618f44eb9d1a14535a1d5b7cda538e0ec78c1cbd004e0a7b3606bd608e0545bbd27911d4ae5cb9202e7633bdc2d16057f80f7063ed677b15f714a97e0101c9b620157f7
+Entropy.2 = 820731e7581198bdf68a38cb222344260aab8d10331dd01d
+Nonce.2 = 85cd8a42d687cc34f2725520
+PersonalisationString.2 = 661092e55e42cb216d6e31e8af97434132125e44630aa7b2
+AdditionalInputA.2 = 913ca946ed469a98fee301698dac6cc20d9d4a0f377c13be
+EntropyPredictionResistanceA.2 = 136281c38d276063a51b1fccf1b949130e226beac25d3ff1
+AdditionalInputB.2 = 45aefed5dbf7e3f819514701e7bce15f206bb3dc0da23aa2
+EntropyPredictionResistanceB.2 = e2714937bcd4ed0c9002c6a731fd3e06148bf38179784c24
+Output.2 = fcb7492a2e8021d91556499d456b0b1c60238249f5552150afbc9e2264095f55dc4c43c22bcda732bc5dd961530be0b619cca0e16773cf7693c91349e94fb8b4cd6705e3fee781112a6a43f8c6ee8d0138d721faee756c346d564596700367676619267c379b10bcd5e35f244cfb51cb
+Entropy.3 = 81fde68c7ba9c2232c8da1af5cf230a8d44bbbdbf0cd57a6
+Nonce.3 = a852fbf748b07faa395a6f25
+PersonalisationString.3 = 79268c0fffb08a8bee9d1d6a2ccc9d01f29ac976b0a784ef
+AdditionalInputA.3 = 64c85cb66f73f5a2ed521efe7f5c3aef22f972cfad4b9005
+EntropyPredictionResistanceA.3 = a0a0f46f72e4a14e1df7130f3d4bb0a408cb408db816d4b0
+AdditionalInputB.3 = 1dd3ceb431e96f556799e062b3c590c47d214afb8f683c97
+EntropyPredictionResistanceB.3 = c6fae6280437d85a2af3e2f28ea13d797a39b65cdeb64b23
+Output.3 = 98cf5960fe6be82731e0db51c2d58b77659ffac01ba77b08f010effb8c63ed6f764cebfc8e97182b8a41404aa8a5349175de00b90df280782ec118130900a4a4de91ec40849f1145e0a9437a5f32482f3fd645c4dc1bbcae2c55d0434bf579532ff251b0f7e4915c4eff5afe5146b388
+Entropy.4 = 4f1349c6fd3e660a748363c927ce280611a18d8c0e6d77ce
+Nonce.4 = 22acc715e1bc72410231a588
+PersonalisationString.4 = 1092b35f6ac5e9daa7bed46d24b5948330f96095b41130e6
+AdditionalInputA.4 = 100b3078f1c716af5ce3f3204bf12a6537790f15fc2410fc
+EntropyPredictionResistanceA.4 = 78eb88ed451a4eb9a07901b95f909849d372236074218522
+AdditionalInputB.4 = 096aa11fe3b30b3f619ba11322d4809ba24c714291342447
+EntropyPredictionResistanceB.4 = 32b0856e4c93657c9699ad0cc518d58a60520e5bd0cb0216
+Output.4 = 3562734993e2767b044655e3e4fd1f03e237307ef93869163374f16eff6281cd2d8c0b1a9d7ddfd819fb5d8d4102cf30960079217a8027308b54c765596125da6e019d63db60c4e750073b3d352b410d8f4c771ee5449565510a3544857aab06eaf61b8e4410a3ae473009703aea7995
+Entropy.5 = 84a399453506ef32db96f425b86e6b71efad677e8c69e538
+Nonce.5 = d40940ef5614f00623702d14
+PersonalisationString.5 = b7959c2f8a8c61eed3d1d16b68716a2f2fb8691b87ad5b2e
+AdditionalInputA.5 = 725aa3fa1e5b506adffa47b31f5918ddfdce9e88206f023e
+EntropyPredictionResistanceA.5 = 4df081949a9fb16e81cdbd4847f3057c38c91433018e0b59
+AdditionalInputB.5 = 8e439b3bdb9ab3cc09dda7661c982ab014e1b6643caeb1ed
+EntropyPredictionResistanceB.5 = 7ded2030b1a04bb3409969cd499c8e5f728a5514127f20b3
+Output.5 = 7605bf0a865080bb57a174a2320700f9b75279a72b062cb97380c18725f96ae5516a7aae93e36e480e4d738992e2fae01c56ec2b544b38b73aae6055f55057a805fadf47574aebcb66424a63d389400645e8661dd629bd04f8d2499c03250554f31333b65963e5642d242e7a031aa4a7
+Entropy.6 = 37a717c6aabbf66b271d9ed63b639a2dc98170da4abfb122
+Nonce.6 = 19b33f39f35ce1ea94336955
+PersonalisationString.6 = f9152a70a4985505bb23c6213d7f26657bdd2053023832a9
+AdditionalInputA.6 = bba5c871b96e1f057a603bc789f36150e843c25cf271fb97
+EntropyPredictionResistanceA.6 = 4db46adb029445c55055befc89c4c69cb3a1ab63675f5324
+AdditionalInputB.6 = b4f173a2fb63c5346eb48560e269c2503692b230967a5e45
+EntropyPredictionResistanceB.6 = db3a43f525e5d994bb698f370ab931892c5b9139598bb45e
+Output.6 = a2b8561560ead2e551ca97586ab3ba2220f73717daf46851928c875697bb6776f3e60c8651d33b099314f93b11369354417a7d3921d82183fb3292a3c678e7e0b65dbff8b1048847de53676acd146f0c3fdb7ef5e452be46dda421e6aa7e782f35e89fc910f7a921634779870f8c9aba
+Entropy.7 = bb80af9955d8f7a7ee555742fdf40505c994304659377333
+Nonce.7 = d718b3e3707dd8a8900df603
+PersonalisationString.7 = 7996cebfade255e25d21aa974d1632f3b2ae5241abb9cb0d
+AdditionalInputA.7 = 67edb5c844f1602506bd5dbf480888f1bb0d969129dd1791
+EntropyPredictionResistanceA.7 = 89560bd2e0421f95d2969dc9b009833db8d80c19b039fabe
+AdditionalInputB.7 = 7861a3e52c9c138da272140d13cf17512164ba7942bb4cdc
+EntropyPredictionResistanceB.7 = 92cb8c9bd9e1afc9cf1fee4f4f8a10e9ccb30cd5ab71ff5c
+Output.7 = dc5ffc68c8193dbee4e1e9a42b6de90f7ec19d700eafe5f2e181d6bd267edb6ac31910212201a596a7ac6ba4933ce1c4e0ce20a3fd8cf0524502223d9c75aba11a8ad7eb02906ceff7113ebcda37c774e2a99db61bad01bd3358f75cc7aecade092909a47bd813e356414e9c5b82ff10
+Entropy.8 = fd2491a23faf83f6a355b2f4d055fb08cbfcd05e5b034bee
+Nonce.8 = 1e767fb88727509e1eeb897f
+PersonalisationString.8 = 39dcda7b1507a732a12a1ed26e0ef9064d784a56c66b69b1
+AdditionalInputA.8 = 63e50c5fe9bb20769f8b853d35d74a4058b9ac808dfd22b5
+EntropyPredictionResistanceA.8 = 48b25bce03528bd2d4e5ba991f70515abf4c89ae4d7f3b53
+AdditionalInputB.8 = 909c00764d957d628755d6b2dd1af848d4f40fb7847a4bbf
+EntropyPredictionResistanceB.8 = 4fc72f9b350abc544a3cdcbb41d8d16ab1edf192eba76f67
+Output.8 = cb54071adf9786872c8c4c27af9b12d04730bd45a0f54839dd2ce1f9a2e2538960fc691e377926e9392b8bbc7f058f02a6a1fcf9b6a83e873b22fb83c47f51ebac42309e30bd9b21ed276a57c196a72c3d8f3d7987833ae51c30f141ba4dec7fa2c9f6155ca7537b22490ff571dc0b8a
+Entropy.9 = 5b669ccb5fd0b8158ca69f5c5e5eab64c1e200d2271fad32
+Nonce.9 = 194e3184a584778d75d20a06
+PersonalisationString.9 = f4eb24cafbc7c1156d4cf1f4912d1f1e745c017bfbda2c96
+AdditionalInputA.9 = 64d7828048bfcc9fc91646ffc4bce606c7004b49847aaf7c
+EntropyPredictionResistanceA.9 = d4d83106ba6164bbb826576ec8a5b78b393527aac47006d9
+AdditionalInputB.9 = 11a2fa761f612c917477acdc5f754a8c47707bc7592f396d
+EntropyPredictionResistanceB.9 = c2455835a585215f21c701396b5857c783a0bbaa9e71c2f5
+Output.9 = 59d7e6d1aab141c10fb27eb04da1884fa0ceada0a54b643bcbba413aad46d8e336ea67ea8922a025b99b27bee8c2f74b2835fe129aebf9937c3590077a2a8acb97da24610f35b0519ca1bf7a959ace6e29ab5e2e4dc3b9de0141d53dba7a8a7684532f2343773af970ea05d33071f1e5
+Entropy.10 = 99d02ea0439acc196aaacf67f2fd0be4b41457eaf01a9a87
+Nonce.10 = d0e67a50a83eb5e84902a791
+PersonalisationString.10 = 70e076410c271d5c0857593e9bb06d75e225c759850ea94e
+AdditionalInputA.10 = 2926583f48dd3026ee3dbc86087052d0eef7149c3a2cb57d
+EntropyPredictionResistanceA.10 = 4a0608f2a421dd180d7b5b7082c3fcffcad74e89b2a0ab72
+AdditionalInputB.10 = 192f551818004fa3b7c904a755491c9609b1af291f597235
+EntropyPredictionResistanceB.10 = d098cb8e909aea41f397cc36aab864e291762a3244bf619c
+Output.10 = fbd682345b736327efb91c6681b2804d482691fea8a70bf3bc1429104bcd652ae61ad83b81594c65684ac4438538c4db907df132006d449dc121a6c70a2f9a29e36881747e9f4e38cbe2efd8b81a39bb2c975ab7208712c47aeff5975187b623d25d2baeca3c832fb019cdbf625cf9b1
+Entropy.11 = 8507b23de5e7d3ae3d081602539982958ec18295d1dc27ca
+Nonce.11 = 12b444cc8f601286a2790642
+PersonalisationString.11 = 2166edef996b4c744adbd7b61858c54b10bd7efc2b532381
+AdditionalInputA.11 = 852b05a4f41b0af6e06e7d5df2586549f1631c40faa45b59
+EntropyPredictionResistanceA.11 = 4136618e3e416db6c7f74665d0c828a8bd5aaac49e899b10
+AdditionalInputB.11 = df6fb8993c9eacbfe57298817751c3d250f1c160b2da8afb
+EntropyPredictionResistanceB.11 = b00d3d0ac1230b5d8ba63b05417149f66c3073ccecf64435
+Output.11 = b48c2f0c252083b41043f17dd034f287efbf726db9ee8f43fdb34561c5ceb678c28664cd4ba4a3e30e1647ffbb7c5e66af5f35a7e35d267601d6eb95b01dc9b140e4e7305435c417cc5e69299174491b45f39a11f65235092410d63e229a6afd98f96e70c8f11b379a3d33e329ad3f6d
+Entropy.12 = 8bb05f672b2f4ba2d29aef3230cf94eeee2db8bca7f8144b
+Nonce.12 = 5278b4786585472d8de9e315
+PersonalisationString.12 = ebf6272c20f34a30d920b63ab519403b719505d4251c6b81
+AdditionalInputA.12 = fd5d43210c5366752c5b11716fcafd86c768383fb95b35e1
+EntropyPredictionResistanceA.12 = 63403c5b18425e8c8cc6a046d8312ff46e3e1da6a95458a3
+AdditionalInputB.12 = 63d04bf131c20760e5630da82b4caa46615ae257f4cf9274
+EntropyPredictionResistanceB.12 = 29ca94a5a7df2fba7bb6137e6166aed1d8b706a8a5baa803
+Output.12 = 157435844ba7929f3c7f4622be7a4c87a3398feb6fb21aaea2f47f6f258b158c319d64d46b2bd2f93468b6f70bfd84979678139e9442ee55ffb691979d9da0f1fd024bad75fe9e675aafa24962314a837fcccc71a833d57a23c86fe75b28ffff68de8077e889d1c9fed12b3886056026
+Entropy.13 = f35e1438d8cebf04b40438834c175f692ca9716ac21e32c7
+Nonce.13 = 41798ccd67714303e54c531e
+PersonalisationString.13 = a8811db73409e255c1da8f03a6c28fcb06a9bbadeba8bd10
+AdditionalInputA.13 = 6d903cca99148d3cfd6c65fb26817b040995778a6426c967
+EntropyPredictionResistanceA.13 = c78548663031461eae92addc2bf4442a2ad0f6c8af0c0550
+AdditionalInputB.13 = 68d057857656c6676b9f9378daa943d5a90cee6e9d9fe5ba
+EntropyPredictionResistanceB.13 = 9b89180e4e142ff530f2e158f8531fa4f193c8578cfde0e3
+Output.13 = c8d3868d525e61c6fa70b4d3b42386435f1666e4c9c702d35ab262d23d92e927a143190b5310aac4721ccebebaae59a388e52eddb9ebcfda3ace0cca5904f96ddcd4559741eb0ba45aeb41c00ee65ac1984574c2521fd2420341f9a9533a901b96d83792e07cacf0563a47488bd7e651
+Entropy.14 = 3f5b9e5aeb32f526f2bc1517fcc10f5fd831946d733d1e85
+Nonce.14 = 2fdae8386dee8b19745e59b9
+PersonalisationString.14 = 9be85a4f698fd36bda0be9c720dd9e8745211522f3f750b4
+AdditionalInputA.14 = a1b39bd7ec42dc627da043fc5bc5c982b20897d49680be55
+EntropyPredictionResistanceA.14 = 510215d72045cee0aa6ef2c8afd0cd5e78c1c456aa0d8600
+AdditionalInputB.14 = e201d55a78452ed3401d92c27247db4801b572b389b2fe61
+EntropyPredictionResistanceB.14 = d50ec469c29891aff7289644413e0bae6954075854c1e475
+Output.14 = 1bc3d11462d9e2ae029afa1b7db585d17c1de83fa1e7d7d9e9e7c015fd85a369edce029a3eb111dec4a2efda8e35bc5d412d31fe2d0d0a35f629609c2aaaaec7fba121a164f4ab20fd65b8bff2ca6f52f171ed2879f129b0bc2ba7dddb0c387a8748ddd2321681655cb2821523bb2510
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = f5d02a63ca98cd57730e717f7f9f987b547735c50c4682f4
+Nonce.0 = a7563d288f833faf6745af97
+EntropyPredictionResistanceA.0 = 78251c1fe9516151adcee7620c61f288b5466a39d3f3e83c
+EntropyPredictionResistanceB.0 = 59d44f7d3bd2923010cae1e86b086dcd4c8cd38eeaf27885
+Output.0 = e355d4f5f4638f7cec7dac505ad0eee8856db4252fae46a4f1a543e1b386027734b9506fcd261dbca9a43d8e13c5b488079e51902cf12b09a6f72dea521aa86302a1ef6feee272c693d6b462feea0b1d8691094fbee7cdd0bb9ef977beb5ba07ff5acb46cba211042f742f478f906d91
+Entropy.1 = 30c0d864e0e0bc419c6eadef9708cd07a8c3570f7ee67181
+Nonce.1 = bb4490305524f205d8c8b8e8
+EntropyPredictionResistanceA.1 = d4e9a8f5081dac4da83ab3c97a36b2d42018db64c219c855
+EntropyPredictionResistanceB.1 = 4d1c3210e592384bb70187cb31e3c18973141ef6f4492a3d
+Output.1 = 2ad226dc203257854b5b276a6eaeca1e760fee1dcf8dd72e368c408a6dd1b35e3cd5eb0b0205a102dc6d2c5cebc0b2b94c2305a91eb6addac7c35106a2b5ecac3b138217b6f5d9ecb41b8a8dc5530ac1154461ea1f8378f099d16ce24e8501e4574bf3b623ebe0ffef0cae6f7a02a572
+Entropy.2 = 05b67b40c33cf97216159186cff8abf23fbb420ed35615af
+Nonce.2 = d9514309ab11cd3e610dcf60
+EntropyPredictionResistanceA.2 = f36b501666b7845df192c561684102b3955ead480534ee32
+EntropyPredictionResistanceB.2 = 5f64e1e9298e2ccdcfd035a21a44636b6d636647cc48ae63
+Output.2 = 29cbb8ef3ad902562c53b68fd6d0c4572c4e2437154e866ca0a9629aee5b49830d1e0f897b5d816c6ccc5e6c9a088b289c8d24f6ec662ddf8a397b777d6ecef0805098b5c4b633a9c8473fc47c249ccaa48bcd42516d3cc4b401786241e2876397d64861250cfb435f17ec91f6072b15
+Entropy.3 = eb8ce2d14805a9378b3de86db91c25585e498f464d503fe0
+Nonce.3 = 267ccd2529e354806839911b
+EntropyPredictionResistanceA.3 = f9e4acb47ab9940d10fd14406b235901a606fd040dcae258
+EntropyPredictionResistanceB.3 = 4979acfca3dc43459d4fd0f5bdd5f005dca72655fd47df75
+Output.3 = 2f72c79fb876a33277cc64dacff589a9b07c1f4e3d43f69dfcb09b1c5a73c5cf2766959999bc1c4d1d6dc9c39f2e1bc9418db437a78fe4029220b51b1afe2a0130b1c11f758cdf0ded6fdba35c34315e8db4c323bbf3daf0375f03f68cecac21c9eaa1150105f013c4643d19fd6239a7
+Entropy.4 = 977db0cc4abd716a125b86f1e074aa0a3f72608f214a879d
+Nonce.4 = 3231b1ab41894f458f568011
+EntropyPredictionResistanceA.4 = a1f52774f17ce8ecd97ff1295676540fb8783e2ff88bfb3f
+EntropyPredictionResistanceB.4 = 1c0ab1b442334899d270885dedcd33455ced9f7cb8cd188b
+Output.4 = 0f6a8530b7d14b77d4fa7fd264f4f57b2945ddfa7fb4cff329b53a36a856c3daa1ec896d6a508b873dffdf6cd1d30b42541f7863f7789b7a1224e6ae6a5d3144cebe749c268f1346c6652576b069ab21da2631da6fc081892d986dbd15424bb97fe13e8570b645c5463714e89ddd6c6e
+Entropy.5 = 5b30a6103f8cbc10a2eac0a4fabbb7f66304cbbdaa92bc48
+Nonce.5 = 1f3d2e6cfe419ba1636e9ea3
+EntropyPredictionResistanceA.5 = 047ab140536daa21ae2f694c5bd10d3054d8c0e98726cb4d
+EntropyPredictionResistanceB.5 = 427ec083a6e2f2b47c53c18d096664513bc63f2610de63e4
+Output.5 = 2bbdc1f062058e9064f35e4852e9474e41ffdbc3e4a873ac2536987dbfa986b608a6ae98e0067962fb11389e454c64be5c8f03d016f9fe41f5952afd48d0f28cdf92827fd20f19d1674c0bd5d287b6fb3b3e2a5142b329ea4a76e32bc5e9b4e2f78a9cc191c20c85f9d1a7263e74fcdb
+Entropy.6 = f5d403159affcde126166507a588cb598d0d7fc9e784e606
+Nonce.6 = 1b859f903547fa7c922206ce
+EntropyPredictionResistanceA.6 = 2f38025f798d158dd250b24e79e1ed890d03fddbe319f3cb
+EntropyPredictionResistanceB.6 = 5b5ce4e346e98a3eff9129c8c8237fba134c74e96a2b07c3
+Output.6 = eaeceaddbe92911abc32dab1092e1a0d7a38083cbe2b338a952fd9c3f6fa18963e183a166b18bb81e68c2de85b4f605c9c5c635cabe0bbf8ab9f032d75f4958c9dd4ecec05d714c1d60e6850be0029b8c305a54cece8a9b98985bc31089487a4bb3562914ecfb2af99092fc92d4f216d
+Entropy.7 = 8ef3f294c300db28a2244f367743b0172520c1a80ffe6a3e
+Nonce.7 = 88625f3ef3604f1d043c6fca
+EntropyPredictionResistanceA.7 = 35f3671bbb13e0ab8b4b92446f0bdc10ef3898daf376e8d4
+EntropyPredictionResistanceB.7 = 334ab0fdf408940f6420c9b9721798e7d6d01e57558666f6
+Output.7 = 798fa0e5268f09b9a326088a43d5415c1fb8b8452b7aac4c535b42240947302038d67910536527b4c247353b525b76412c9a943e3a8efb6f65264e8b0b36e06ee44705ef5c123e74769f5636764e7756540cbb3061eaf6d6a11957f41924dfac0d4b9159d8028dcfcb485459571a97c6
+Entropy.8 = 36ce43c028611a1a12451c8540802b836714c902e7b9fcc1
+Nonce.8 = 80f5aa81b14cee3bf6a78a9d
+EntropyPredictionResistanceA.8 = acc38b7020b5582d95ae9679fef988cf56d4ce49a69608a0
+EntropyPredictionResistanceB.8 = ccb3e21392cee24774a6c50c413a2470b1980ac4996f3bcb
+Output.8 = 1adfb5a5a31429017ced893676d09fbcf8c0e1c1df08d4bf837b7b4c9aafbb5db7baa49ddd9068e23f7c9af5c2bc36a4422bed03568b4c4b187f98d298bfb1a9cbb24e86fa4842c50a58c9382dde15cf1ec6142b19686203da917bfbafcfeeb4543042d3e547327f24f28640146ee080
+Entropy.9 = 5a7e625e46cbeef8c37598b4f9f36d968898f0a8bf91fa0b
+Nonce.9 = 62995e1fc8e1bdfeebe8e453
+EntropyPredictionResistanceA.9 = 7add7d69e46db98391dc423cd230d876b15dbd8e12d1eac7
+EntropyPredictionResistanceB.9 = 087837a2cd903087405a2f3fd592741a1d1b1f9fdaba76a7
+Output.9 = 0c330edd6afaff348a8807f888d3cc384f2f5f21c6222dd726363ca34f3ae8cb62db7b3175ac11a6fb6b833984e79835c969706d5d7aceaa707bb5f9701ecf7ce118ce1df0b73b0344c2cf672ea61c5c1b1161c52ac17cb3d1c6f4efffa3dba8b466b814319ac0767a9723f8c710ae72
+Entropy.10 = 501bd8d57dfd80762846da4a7b8e558e56e81624167a90bc
+Nonce.10 = 4c0019e96929d27cb56de376
+EntropyPredictionResistanceA.10 = 98e3120086953256b321a0b9c7a0351c30ee3cfd4f3e23ba
+EntropyPredictionResistanceB.10 = 752b1a8649c11e30a2dfffa15f1f2b33df23f972f7771c63
+Output.10 = 1c233263d45058fc999c6b5eb95a4be1af5624e3df3b50b47ebf58ead48c7ea7e4481df4531b9814ff325f7cb87684a44730314b8cb0275ed35ab766e8ca8c5b048937648025c8b94402b4710e0d4a95dc71f7a0ceaf3c6728c90b468e1c10a8d9bbaf8f4f0cdd57e36dbff4fa578c58
+Entropy.11 = 2426d20dbf11f4981a6d73421ab5f6625ebc7c66f8d7d810
+Nonce.11 = c58f14db87079ab9a97b2988
+EntropyPredictionResistanceA.11 = e600ea9c917b107d5930cab8a9426d21a26a9e975a884636
+EntropyPredictionResistanceB.11 = 408c50b7e1ee758ecdd3ae2fdd168850ccc1f65bb7da52bf
+Output.11 = 980c4331097804d703c5244663a22926bcf223c79c37914ff222980d50137dde2d6e989e3c3df2b3f9d71afdddf114573c9ca35db58b4dc3ed8cfa86e4dbe1bc1192afdcabccfadebe9c2e6f3eef258c812ce230c7b170c3444205a4a8daa7cdd079dc7c5a1d47b73ece400489dc26af
+Entropy.12 = b42930c3dcc762eb5db1bbfacaa81610fc95abd48d7aaca7
+Nonce.12 = 9c84d7df0d633f3a2b312a44
+EntropyPredictionResistanceA.12 = 7bdd4507ae3453c634440b8f8c96a857ab5d3ffa2ff88156
+EntropyPredictionResistanceB.12 = 951a996c0fe72b5f90531ff60eaf7b093d85f9305da4fb7b
+Output.12 = b69492ea1fa1a0986a20d12057d8f6b762be64160ad97b9e1e2c45bf4bc23d60d6752fb67ca3c447caf8c489eede034f673242ccdd8d943b984de903451feae162d97e981d2f1ab3e46bec6cacd236516ce74c0e980c6b503d7952958ad0cee5acbff72ae99e6069b142d2243abf6129
+Entropy.13 = 0e296b238a81b69ec21526ee4e2cd86f858068548eedd84c
+Nonce.13 = 58ac7e921512a3671d4485f5
+EntropyPredictionResistanceA.13 = 6bfaedfb992baaa745225722f3c1344f866904177e6ee184
+EntropyPredictionResistanceB.13 = ac7d87c8c4511483f9d69e300292fce7a5b06a9ae9326986
+Output.13 = 58e0f8f85ad52fc8827d56580c7a3c996acf1fd3fb837cc602c405ff0afebc6926aaa4698546d0064567368fb0328076401c48f3eaf2274f83932f2e824fa454a0f12bebb079beeb0face61f62e51915b7734515eb3a0c1ddf537094a43c30e1b327ab27c3835c43e79c82f3b9c73999
+Entropy.14 = 62aa250cb919fb72b1ad7f92f1e8a0056a2f78a15f60a69d
+Nonce.14 = e1c4353ccda4704029a00038
+EntropyPredictionResistanceA.14 = d6734f3b3b76bdd8715f1cbc24df30bc8062a0276d954def
+EntropyPredictionResistanceB.14 = c6947a5c4932e357cd296aa8153614ceab7a6c479ba1cf30
+Output.14 = 19f1b2ab68854e65d92318b4e09c74a379c76c096ee460355a977ca08788a8ac83bbe817a8ae4eaaa795a09a49f572fdb471d8f5d2de060016b1b0422905af24018457acc9ded76b66d204ed5d1bb66d77270bc23ae5528a6a05aadd3eb1a194bfd42c88273def6fc24ef677d326c586
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 94f002df9826eb387c1b88fba9143315271ec7feb7958764
+Nonce.0 = d557f573e6cc475c82aadb5b
+AdditionalInputA.0 = 714493fedf8761e43bb0471a98ff436c38944eafbcd83552
+EntropyPredictionResistanceA.0 = 5fe8933d9a5a40c28cb30af0a6599a07f52211887dfbeb10
+AdditionalInputB.0 = bed0fd6370df217db9f5576b8c7dd2426da5ae52e595bcaa
+EntropyPredictionResistanceB.0 = 91108a59af385a9d9c6aa0886c36d0eefb8125ba8223d45a
+Output.0 = 1b8b610021604eb89e8d83794a42895ad05195da518ca94c6d8b7aa148ef74a50b672cf89d9efba8665c3a39729b872323ab5d4dcaa8e7f444d809cc4c80861f993651f64f00c36b44e44c701adfb7b53a661d633cd83162ac7eaaf2c7cb9e8f775938baa98e479320e4f1d3bbde72e3
+Entropy.1 = 8f5f9adf3b9fb0889b5c614f513c5c70901424bb5b79ee67
+Nonce.1 = 135821f76202873b202f8287
+AdditionalInputA.1 = d023a999a184db48427388b6e88c8f3ff6f299ee1bb573c3
+EntropyPredictionResistanceA.1 = 5acd61d142842bf7ba1a8dee3444627a7492788e3ad1fa6d
+AdditionalInputB.1 = 62c2fddf86ec266fb9e03c2dba4478993508443ecd72ef88
+EntropyPredictionResistanceB.1 = 2229bda86f487892c194779e8899378d6175b6f844054fac
+Output.1 = fb2095c599d33b66e8b360e7a943b9820d4bab0c796c21d1b37720fab77013792f7d02b3e94ba1b047a587090bb1090612ce909710fd359727585edf50024e9750daea9116411d9a93fa42a340118986482951f4012abed8c7fd13ded669cc8abbbfc5d91b90f6f08d942cf498d02778
+Entropy.2 = 9793666094fd14f5a9d7158fd53bc765d5dd4f10a47c430a
+Nonce.2 = 15aac43da8a1232d0ceab131
+AdditionalInputA.2 = 744c37d15e1d78b6a49ae76d99b5da76c9dc990ec4e4ee43
+EntropyPredictionResistanceA.2 = 07142330220ea735207b8dbcbc615b9d57ebf110f87d6437
+AdditionalInputB.2 = e3525da3da93a82ecd23ee32eb00052d7a6f85b7fd0fe451
+EntropyPredictionResistanceB.2 = 57b2adbb39667a9fb0e8668ceb31267ed7d5382587e72f7b
+Output.2 = 446dbc185a9401130fde7414e664dc13cd4a59ce2807845aa255dab8e67a2024dc6b417e67f3459f54f33dc346787e7d31d29f17fa8904794e166aa901160a34126d8a50d118090ea64371a32d0a05d9bd614a7c0ba84a4fad3dcf9e9d82913344c29c2a105906e7b64cd745f3d32ace
+Entropy.3 = b12d69d75235e3781c9be73f85886bd830a258184e7d0536
+Nonce.3 = 799d19ccf266f41440512f2f
+AdditionalInputA.3 = 0bec3904ad3b5d36a033d5272a87206ba8f75050f4b0ef5c
+EntropyPredictionResistanceA.3 = 0b34bdc7b2ef381dece9f563a7dc80122e0bb04c03dc3d04
+AdditionalInputB.3 = 66224b19239825435ccdc479b6d7b3532d2aa91e7ba895d1
+EntropyPredictionResistanceB.3 = f01896dfeb514af5965277a8eadd8c14665ccd1aa352a5b9
+Output.3 = 7ec47b0d819e66918334ee375423d48cf8cbb196cd65836380d04cf5315913f8908374f67e6a306917323b52285b6d7b639f32ee6c1fe4d456d60c48ce212ac085683a19916e1187376ed5bd583ed4d966eba627672a92c89409f7e7ca2d26cb758b969a4b8db919d6657db9bda0734e
+Entropy.4 = f4e4d405cd56516963737b4320e172f94655157b4a3be431
+Nonce.4 = 250ee067584e6a44808b21b6
+AdditionalInputA.4 = 05fb2105099f127707a8fc9ac7fdc474387130c25fae9c7b
+EntropyPredictionResistanceA.4 = a155293ba6cccf6c43fe6d4cf0d0276f2192277d212ff368
+AdditionalInputB.4 = 3bcebf4b623792a7691a645df671562290b7e92cb99c13ec
+EntropyPredictionResistanceB.4 = 472de5a4f3149da4154494ecba8441f882440712ddc43360
+Output.4 = 4d7fed97214ea1ec16b5eee6ba85a8d1ea520dc34b9714d86c9ea349e60a82127598276ff93762b82df3a11f2132b977f8c0b3ed3b27d2af05833f853d5b0641941bc3105d6d41951c45a63af1796f49d9b92e3d7c896e44bdf723dc783abf2f357f862c87b6482eff521b47ee7b773a
+Entropy.5 = 249f8443804b7a53e4a4fbd289a90ad9443ef64622c9ec11
+Nonce.5 = 863af06bed7ef0c07bd70e6e
+AdditionalInputA.5 = 9d52b67bbed1a487dd251f650f9bea16b0226cdf6497cf55
+EntropyPredictionResistanceA.5 = 8819e3413bd16c4eb26fc5f70f1e076643b7a8cb2d5de322
+AdditionalInputB.5 = c736683d74c3e69559381911d3123e2f70286bdcd4bf75c3
+EntropyPredictionResistanceB.5 = da8c586d730e4ad2d5bd24316d5749163e6641ddd77674e6
+Output.5 = d8f225e2ecb8d3ccd30bafc2f36ce001af9f65e962859600d82f537aa76392ad6f1f0f33f4ffebdd17e915316e57975e877c0cb2f2f090351b51a031799449065120d7c11f12a8f0f28190357ab7d24b3641bba720796d51c5107759a78c90dc08e2e7bdb35a304094ef73c42b370d50
+Entropy.6 = 14c0cb8e1e3a51b38544fae6937c1ce65a79ccb57b877e1a
+Nonce.6 = 2de699fab829d219888bf8db
+AdditionalInputA.6 = b1e695fd66b999149ad9ebadb1495aa13de81694556c71f1
+EntropyPredictionResistanceA.6 = 695e28e7a6fd84d60be3b06fe6aae22fa6406f40c221a0f9
+AdditionalInputB.6 = 8c617d047c496d27c7721b0c071876861d4ed567dcfeab26
+EntropyPredictionResistanceB.6 = 71fb4610aee794767d2e93112b74a0cba48f437232c31e2c
+Output.6 = 296f185e02babb03def250fc9987d41246c8f1453a246f33424ed5d6aedd5cd25a96d8ef83eb22a315ed1298949deda00933bafdb0004abbb6249afa606c8a58bafd5bfa4ed300b14ee722179d9edc0b7957ec5bddfdc469866fb1841713d20997a26400fb631e74d83a14ebae84303a
+Entropy.7 = 9d86cf6ee766a7706b64c0e5714fba15f6f27a77ebb5be65
+Nonce.7 = 5c0fdc05d2559dae76c4d032
+AdditionalInputA.7 = d1e0410bdaf67091a8961b2288a6b3d9db624fe7344d1552
+EntropyPredictionResistanceA.7 = 8e8867fbbb3b4cecdfcd260247fc60856a2471c171712977
+AdditionalInputB.7 = 8f99e3b774df8a379711afacd34901d650b5658506a5a801
+EntropyPredictionResistanceB.7 = 868b90d7fa3ad5d924b71ac36d362bf5574c783adc218919
+Output.7 = abeb0750c6310b14a9df8f7defaa1e0c485f0e62fe59aaa7357d8bface384611d45c07bbed890fae0c27dd9b0c5b8797e3cda8ad26bc07661c4e83a5689a15e78b97e8f0fdc8962d4e614b1d07a767547bfcf56be4371de7cb0729e96c408ff01665dfa8c29a11b2d15d9d805db9de85
+Entropy.8 = e4dd1b57029b8975e30da5b8038f0f425a372f307f80ec8c
+Nonce.8 = b895928b16f324422e1a1841
+AdditionalInputA.8 = 92db3673649ffc32c5d11337984b39d04e0e270b4b6bf372
+EntropyPredictionResistanceA.8 = 78bfcdc235ae17101b69ee01b7118504cb5d1c28fd8f2dd8
+AdditionalInputB.8 = 1b76f3b67b32947736ec5338c6d8fc02c4db2f61b3f7cd7b
+EntropyPredictionResistanceB.8 = cb66ae07934f653745deb25d6448e5cb6692dec2becf79a7
+Output.8 = 559430489f9ab01806e80a12be066d0b9fd9200d3647661a45395998ef1ae47d2dae7a404e6b18a970ce18ac6f5e655f87fad7dd2e814f26ba5066bb3ea34c602b5353c94827509e5f2353b83bf529a28264ec658c899d8c5fdb3946f7f50765e9b432983a99ef325835ccca45b3a893
+Entropy.9 = 32d343b5ca40b18aba2fff985e18647e78ab5965cfb86a06
+Nonce.9 = fb32f5b509512fa25f830df9
+AdditionalInputA.9 = 9a171e59655aba81fd2d9a1d3182d2f82e1278a7eb8acbb0
+EntropyPredictionResistanceA.9 = f7e7fbc24244ca95f1b48c11235044ec1480bd863235c6f1
+AdditionalInputB.9 = 2c18674ee504063b256f179033d56793c3b13981dee01575
+EntropyPredictionResistanceB.9 = 80477d6b0bbed0c9c4545af4518e10fd3b29e8a32c772b4c
+Output.9 = d2e913cb1476958f506b1de27a64a7784df5053d92244c540034966433b4f0479f793c7fd92369dc006f619bdb7c3c67859f0dbe675311efd010eb2a674f362ceea2b0f2ef525ca49709ee24a02f10441fcba712dcc804918e38e05db93749cea62d15a561a7d44880b5e468b5ae0c18
+Entropy.10 = d8e243c8231f619fd38703e1b9187d2bf98e226c54d1736c
+Nonce.10 = 2cb52e2852238b7c8fe7a9e0
+AdditionalInputA.10 = 55ac9f5d2f36c28e92dc9090490ab5c08e60b08e2b4859c7
+EntropyPredictionResistanceA.10 = 7ceaa47f8e71f7adc77db4101c6a8eadac41e1c49947d343
+AdditionalInputB.10 = 223bad3353b721d927dd5eef900645f167069de7972b2cd9
+EntropyPredictionResistanceB.10 = e1928875edd547945559873b4d275a24cf08fc0e3a6ff901
+Output.10 = 958e8afa7f4d987ff8b24df85adbca488334154f7bf8c4b04b80f4c2d985d49c1c9d1072672f535c50620e3b1a101ca6b7cde3794390191c95b64535d27490ce8296c0c77c2a1558e89e9ab8b4b8072886ac1deda0867e7fb36b5483d77b89cb89bd194fb520b542e2d1bdba2adb58f9
+Entropy.11 = 449606b61e98d23d8bd92a6f45890c02761664787304aa0e
+Nonce.11 = 8826094126655912939eb48e
+AdditionalInputA.11 = 2c4d8e4f3b59020f4a6c74b8fb74b14720df204e73b7f7f4
+EntropyPredictionResistanceA.11 = 287959a009cce3a9aad4cf0e44537c2325d226ceae6fb779
+AdditionalInputB.11 = 4af479415878297dda5e683de74e76404dcbe89ecf36a1c7
+EntropyPredictionResistanceB.11 = 8100f0ab339ff37a3e2533c1a6f5a16cdd4a904449197837
+Output.11 = 58b5da3bf1ecc99f4bab873fa46a8c5c0dd81b76e75dc036112f93e44ecf5d8c8aed5532218eed0229742ab5467b2fce68e1d1dcac6c2b97b2c907883278180ed3ddbf2b1bda6014a1151628d7790f02d6f7696603bfa95ce1dd84159d7e7647e6d5a6c965959a01efb0178aa770f497
+Entropy.12 = acff916c3dca1bcbadd6970b5f599d29b466e3e9068bcdf4
+Nonce.12 = aec7bdd83bcbc5f552a7289d
+AdditionalInputA.12 = c0b553d66b5c8cc9754e72951a12cead0555d60184af1807
+EntropyPredictionResistanceA.12 = 6918d69aa02131e6b3c740653e819b7b35bb73ab7fcc050a
+AdditionalInputB.12 = ebd5c368f213dc877ddaa61e93142e34c12f96abafce9a7a
+EntropyPredictionResistanceB.12 = c42d30268623a41ed26c9323ea19c4a22a5f30be7411bf80
+Output.12 = 2e0775e98fa55a48f84bb6a23cf07cd53b8fe03c22e945fb6347e582f93756edb8d4206059116497b86c846ebeca51b6719b1f592d628adf2ffe5a901cba12214e03dd5ccaaae570117bb5a9106f9a4153a611289c463be8fb7d79c78164e43a4cc048f6f62f1671796c499ff9c8263a
+Entropy.13 = 7205fecb32623fb4769dab9e58f0240d7964ea6d9085f24e
+Nonce.13 = 2be457ce27374d75ba672c2f
+AdditionalInputA.13 = 253c92b63f1cdcae062757b9d636c9492bd1526857be7207
+EntropyPredictionResistanceA.13 = e30893cd86bcba083fd2d039f6b4f5e2d1f8847fe1220831
+AdditionalInputB.13 = d71baeb5ffa546cd62ac1c4758dae7aa33b9550aae980c86
+EntropyPredictionResistanceB.13 = b3416595844caabb74d7fcb137f1154864391aadc3df9f52
+Output.13 = 82908068fe3bc26da121ba2e4d5a1410e13cbbd156b951a6573b3cb6b715cff51f720580be9b1e8d64e162bcdef0810a2aeaf21df30e17033735832575ea8ef2879f5df413047acdb2f18fffe0d0e3a410fa0b7590ad7b3fb3503f05bfc6dbb81036eecfdeb2995669ff9c9c97e056de
+Entropy.14 = 9cbfa2a4e32dee6611c585a1004d6391ffc37cdefbac1f34
+Nonce.14 = e61c027af058ca3b31f5fb4e
+AdditionalInputA.14 = 299955189e495df9f052f825ae4291de5e347654bb7a0678
+EntropyPredictionResistanceA.14 = 8cdb78f8c504029e01983db984602dc6859c3eeae725697e
+AdditionalInputB.14 = add443f0f3064aa799c6fcbc729416a494ace56d2a29eebd
+EntropyPredictionResistanceB.14 = 19b708e95dfcfe56f171ddcc411c63bc2e742cb45873a019
+Output.14 = 29fcc98bb0b08c965dc5ec7de8dbf7a16d234eeaaa262f5ece8f2a1d843940bc663b4f892ca1481155573c4a6754f8b7b398fe12a81409ed7f6165bd16f2ac031d809e6535dcd3561586c038df4aa735c5efa36224b2235d05c12555151b1ddfc2121e806ddb484d19e9db631383e969
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 0af2116d100017b37e1ff367914d255706381fb62255e9e8
+Nonce.0 = 6953082d33949666f0e069f2
+PersonalisationString.0 = 42d0ad9d9204217b07d83704b4f04d14ec1fd1dcc9685a50
+EntropyPredictionResistanceA.0 = a7f4435e9e4e542aaf89cda9e2d2bc0c826c6084837950cd
+EntropyPredictionResistanceB.0 = 96604a3eb1c40f65d9674c0aa3da44f8181adcf51b3d4d04
+Output.0 = a4b8f5bb03637e5a9e15ac7acaf431f4020d491a5d171a8a9c762f6bda10c9ccfa88bb9aefc5c8c37e67869af886781d43df5958969d73df65eb75a99f781f84d84208e8fb2a3edeed7ebbca7d913f27d386329e5ed62fb9dfdc1413c8065ae4ef2e6fe8de23b6e427cba46f42b3947b
+Entropy.1 = eb7bdefdb65d44be9701eefcd6a7a965b1ca58dbb7f8fa51
+Nonce.1 = c093f93975dc272ffdbcd808
+PersonalisationString.1 = 5d787c57069322f0cbd6c46a66c146d7c9b8103c49638478
+EntropyPredictionResistanceA.1 = fd12b9f1d63bd253f36cf9b41ae0177e24fb2aaf5d8abe4f
+EntropyPredictionResistanceB.1 = d115b79572dace4d3bec65bbbebf309c2acb536d6fa7d76e
+Output.1 = d61966bc750a7a1d7540a85eaee645dd034cdad04abe3d314ecf358173b172efdf4644e14739bfb82fc8fd004f71a0ecfd2b459e708f7c122c91ae0ff3f43106907c75a697dcb0f502034675236190508fb8131c5a7237506813d0d80a5bd7e6c5fe11209514d274c9ee3697d50274b0
+Entropy.2 = de8305f51c1c174e0e78d62569d415b34b0bf65c10217768
+Nonce.2 = 06ff83758c51a26c7779c638
+PersonalisationString.2 = 797161e7187ffcdd8481a719124197604e0e5d1bccc1c574
+EntropyPredictionResistanceA.2 = 6dc8eb24d9ba48ebb5ffd867d237b0f1c308ef402e9f88b7
+EntropyPredictionResistanceB.2 = 927ea99b33848e6f500adbbd3f44d3d274b55c6447113258
+Output.2 = ffea949215b0a3746c5263dc3f6ae64269f2c5ac2e11bd723fd29052ec972944ac9086550300e5b6f8a8c32a699b1f67b7d252b4f45ba5e48516d63373d07221e9e0e91fb49ae0013cf46a58981a89048f06a7cbdf51e97bad8bb23613a21293da08e61ed02d35bc7bb39f70451b4ac8
+Entropy.3 = 03b24d8208651ac3012a5a294f96c910936bb7d488a93e39
+Nonce.3 = bd4b9712dd37ebf83640f66c
+PersonalisationString.3 = d2810f219ca777290c16010067700f2dd9b0f4c3d0ccd5f4
+EntropyPredictionResistanceA.3 = f3f7710d476ef1bb1e3cdd73c0e82d6514e676c67e1cd661
+EntropyPredictionResistanceB.3 = ff02f86ca295eaf54cab0cca437d9661ab29314fccf7092c
+Output.3 = 25a4495fa0bfd1a0c0db88cda60209fa17bbc35373b114387439af6864e21d291a01fdc1957d463560264fd67529e672837cbbeea03d79c99168f409e63ef97ec4c9d14eb33117834b20f66e679eee22ce2d63547b6c5dc5d162da3190e65647318de6442e124ee860f6cf82ec982171
+Entropy.4 = 2fb1ee66e2fbdbee5b91cb6791e84f5075d2d42b4aa22437
+Nonce.4 = 8972872dee0a76fe4ab6e9d6
+PersonalisationString.4 = 8bfad8c426aa69cfb286783766c57fbfe34740c02d5fec34
+EntropyPredictionResistanceA.4 = 92e6605deaedfd68d5c3e3a5326ea76edb6cecdd594f7722
+EntropyPredictionResistanceB.4 = e756c07ebb0de2aa5e6a47c0122d966917c1b8022728b747
+Output.4 = 11aa52e745c8c60578560200f5eb1073b1f6ae2e18f34a9b8d3b5c62efed4e5805acba3870b3492d88c24ac0ed282e1d70a174f4efbdac16eb2bb2302a994f43e83d1f5c29f545f939222833df8d783d562de9210d66c1c13de138ed85a154ee6536034e4b0c5375593c8b2cb7913cbf
+Entropy.5 = f71e0b3e68776f7c9aee69562a16141f5bc7279ee1910cd9
+Nonce.5 = 07439aca7b24c722755db58d
+PersonalisationString.5 = d2697c223ec2e222417d3a025315cf97742f38d20dff49d6
+EntropyPredictionResistanceA.5 = cafb0b1d5f03a39622dcd907d40acb0f07a28e037bac4024
+EntropyPredictionResistanceB.5 = 072085933081a9b1445eb6a9fd2dfe5f7ae4af72aab0220f
+Output.5 = 80854aea30107ade233fcd9f30482e8e7c66519994d510c7291e313cf91a1d239b1ee197de767ddbf3acb0fa9ff36eb2203b15aa426f8cf5fb90749b74c00f6ed0dde9da7d912e92b82ceb15efe6700657df80e0a3c55b90fe4e4fd962dc319d221b70a8b502d6594490bf1480bdce4b
+Entropy.6 = 45a9af4150f9bb17def7aa1e71381b969eb1515cd14053f0
+Nonce.6 = 7accf2a64174eb99c15af808
+PersonalisationString.6 = 1b751b5fae21e8a0b7dbf1c33d744f9ac3fab60f2753bcf3
+EntropyPredictionResistanceA.6 = 5bf8932899acf5d4b58b236fab4c4d47e0f664d832b00c55
+EntropyPredictionResistanceB.6 = 209f441559b53a68073530242985c6ed2fc72334717ccb20
+Output.6 = 2a90327593d6dbdc7578ac6062480f15116f752b1261ed6a29e1d6df7fb3a7bc97f751fd2b518958de7ad5626c7b6ef8b7ebbd3e94cda8032673ad02aab929208c5c40534a45a8f8fe80c0bc73beefd88041c4f426664b812828af7c042975447a265e6639348dee4d39b3f39416550c
+Entropy.7 = fffa4b6c60d7d919d9d05c6d56f7e5cc4979de23e6671802
+Nonce.7 = 7204a8a0b68c219bb8701bdd
+PersonalisationString.7 = ba59b114cf00641f30094863faf92bc7c149fa9fc77ec90c
+EntropyPredictionResistanceA.7 = 48c9c3e1d0ed7b3b436d647c8c769f4d5c0e47f43e3b6b4b
+EntropyPredictionResistanceB.7 = ad9df78e7b7a28cef425501ef0f6a6f0cda42314bd363e10
+Output.7 = 97ec622717ef2f4e067a840fe22ec818bcd3230cd4fdccb0bad29ebe44855ce43e0a99f57a9a7dfead0a936a9c8f7fd2ba5108df2b275d5f26bed65ae4c45844fac0050c2b06b0d9bcc898b4cb4a0c21434174b2cc65034a561f9acd08210e4d7a58eb51ec2ac75d6d386fe7fe204e28
+Entropy.8 = 9f5c737a61b3bc3173c2871836f325707eff0c5e81a381dc
+Nonce.8 = 147eb46472217178d072d1e0
+PersonalisationString.8 = be6c83c870af32ff7fd96e91a5f5d520d3bbd0946bb05de5
+EntropyPredictionResistanceA.8 = 920d9fbf7062a25e4a2be4033959a8ff296a36abefce0455
+EntropyPredictionResistanceB.8 = 776763d71a0fae9b8dacaf5b0917f9a2608c81abbdbb93f1
+Output.8 = 1628ced14bf244f1a5801c5e539fa290f1de5c67ba6e77c30ed23599a0f651ba96dcef81ed259d9bfe0b26b05eac84a24dd8351148b45e1ffbf0b5740340740965fd3f1780fb53976edc5c750cff863655e2274f6c7d62df70760e02aaa57a637b772225ecfeef6e68e8ea1a99701a0a
+Entropy.9 = 8b674a50ba485c52b9679cb3a40a2b4f99506c305cc7a237
+Nonce.9 = bc1926a58c103c62f351f954
+PersonalisationString.9 = 93135703be34f9577d0d3f4aa9471facf3c7d0a5f6ad6e54
+EntropyPredictionResistanceA.9 = 4056f3c545c7b8fda0ab946fcfc65a9d2fa8912a59ce2400
+EntropyPredictionResistanceB.9 = ec4919e9ae3b0bcd87fc298da3169797b948081347cc1d98
+Output.9 = 9e55f2f15010b84bb33f6bcc3333453f334fe8a8178179a24cca3dba48c91d1246887512de385c921ed0e830dbd0ef92971dda7bf708babeb10ecb1e1a26324b2a0c2627112eb33c54563e55e72ba44b3b5f0b5d8a6093563ddff20e1d8009ff7b1d10f42a091f940f34e1f2059dc742
+Entropy.10 = 6a6dad3aee63c9b478ee668e97d840d8b6591cffa65ab599
+Nonce.10 = e5dc03fd08ba9c8f94d2ae02
+PersonalisationString.10 = 3ec69325e78b641c94589624afd89b61e9d605e88f6abf13
+EntropyPredictionResistanceA.10 = 460b07bcaadf38428de9e46ea2c272f05497565dbf670c8d
+EntropyPredictionResistanceB.10 = 17426e0aa52fc40f6e2110a1b00ec20bb5d449205d342cd1
+Output.10 = f1e580dfb81aa0bf7ef58c8dc57bb1841d48e2a710541203fa281c0aa63a881ccc9233a8ff5447380d2b32a80a759bc5f2e27ea166c4680a9a7d849e44aaac8ef61410b9e23a1ffe07d940f25a48812b7ab8cdb7bbb9893f86db5b3a9bdd18cefb4dbc98b76897bb022fee4f1ba2ab6d
+Entropy.11 = f287db836841c4ab54c5b5b84e51216e6218ae6f260f0828
+Nonce.11 = c09fb19491bd1a35c47adc96
+PersonalisationString.11 = cd42604d31a38804e6f7077c1598a5c2cb26f8b54eeece8e
+EntropyPredictionResistanceA.11 = 08ea2b04d842541e817b60fc9a85975f487a2377520785b4
+EntropyPredictionResistanceB.11 = 20a7e38e40d0bd34942463fb5db9f505d126c48e5a7dba96
+Output.11 = 6fd30f8282a39dc00573536d9e7e77861a3947b71d4c3a46cae616649c4cc758eae34aa45cb680de1548a4845c5c394187d2e8ce7bc5610949b589bcbb6968fa1059e1ce62a479217237f62ee36481551f4566708b73055d8ddca758656a24da4be48b1976a345adcb0c27b0952eff0a
+Entropy.12 = e13bdb1c373020f4bb7b4e1d3c2661ed77289c89e7b1112f
+Nonce.12 = 719700b269144722a5d90865
+PersonalisationString.12 = a1a050ed8ad78e856133b071048d3608d5196bbc9b8b1f74
+EntropyPredictionResistanceA.12 = 670beff8aa98f5cba8f755c79aef2cbed2edab096288aaa8
+EntropyPredictionResistanceB.12 = 4fd8bd2eb2833abc73eae23b29c960bc0f6b40c9d9c6476f
+Output.12 = d2158f10da0c6e4dcf22416a0738edd3c121d3761df87125594cc486cb266e97f5cf6349875c50e7f1326dcff55dffdf9d556d04c0749d1320a400f2e7957a5740c2320796bddb25b407c3f2d5621b1e9d588a23859eee408e67905095921e399f14104ff91a28a342a12df3a8853e7e
+Entropy.13 = 38e93762b57362ce89160e36900b5520a88b31f149072eb1
+Nonce.13 = 6f13e09b0769c35666c614b5
+PersonalisationString.13 = 7aa41f116502d7b1a12a9496cd018713f620b924f6fb06ff
+EntropyPredictionResistanceA.13 = c21912ad4eed81116f34a2b25d5bf856aa74ccccea4b2cce
+EntropyPredictionResistanceB.13 = 63cb37e8bae6735c51b5d1410ab5fb011a08a9d44a09feca
+Output.13 = 989d69e8a778f78212e7833288468a4633a84fa0e655e48651fd8864ba1e53c6c5bf5662ad7a1be7af2da17d5c8e8d8c26aad3b8cdb1339ecda748d3b369ab5852f1010e61ed0739f0d65c5616b82035d20800c0906aae0fa314d62929fabea179caa020caa02c2f20211aad6f28af35
+Entropy.14 = d9f136bc3d5c44a10214e9c338ba65129c3e97cfb833c760
+Nonce.14 = 3fad6c923c9aeb207a093961
+PersonalisationString.14 = 16c88359d6a60c70552bb3d1dd3470ec1a4e49cb7a690d3b
+EntropyPredictionResistanceA.14 = d9b643ef8cb569c2eaeeacb3d8be9a0b2c93c60f8e112955
+EntropyPredictionResistanceB.14 = 213994f4f3e9382b9b6c0247e74a930043a563d0dc67d05c
+Output.14 = 991659b877318d688fb40a862e4a089f74e60948f853ccc57588ca14a51c8a8af65c7c1e0a5fa1393a2f96d23cf0e6f829141cdbc4229c5576b07a915a59bcae554cc50e6f38264757e29117273792cd9ec6e89a82713db07af8562c24aa80e64f2723e8885ddf3435d96581881ccf9c
+
+RAND = HASH-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 1e3faa413e6eb756092c4924dae56d5d49c52e8c49b12ddb
+Nonce.0 = 3c66a180cb1561e4173f41e8
+PersonalisationString.0 = 002d9128f03dda92c187e9d0dffbc781f7ba81c1d8e5f657
+AdditionalInputA.0 = 421490b623d4bdecf4992bb6f9f58153a7163ea10ca0da8c
+EntropyPredictionResistanceA.0 = 99b43429f800ff1173e8fd3b3a6966e89c206c30b155fff8
+AdditionalInputB.0 = d3163758c0d6620fa2d14105b6353cebe768e70536dc9468
+EntropyPredictionResistanceB.0 = f6aa70d90a5a292f0ff23ce17ddb601db9453322d075aa9c
+Output.0 = f1279a9e9afc267bff127b0e913c6931eea4ca8a06c6eed0301be4be28661ebede80f17d84ea9d09f39ea6a84f6e818dddb7575050f1938cbd038fa1688b56de4a21d65c132ef4e1da661b2cfce94033c76391369f5a28df7aae4056355e419498f5a4fe06445a0f12998aadd191cb84
+Entropy.1 = 04cdacb5b2d9286ad63c71d7e56cad845af0fe40858926fc
+Nonce.1 = 2bd6eb3b563ce526a9618d3c
+PersonalisationString.1 = ddf92cb34f147fe536c7b636b831fd979aaaf863fcaf6c39
+AdditionalInputA.1 = 16b3adba97a06b1dff5e83b797f251501a9f28b8ff6aa63f
+EntropyPredictionResistanceA.1 = 9cf77d2c7eb5ea6670664571e11fc0f9d3e091aa399e4609
+AdditionalInputB.1 = ab6cae5e1b6ea5efb6dfa0436849cf030c0e9adc9686ec55
+EntropyPredictionResistanceB.1 = 9b7f40cbe5c63bc5b305dd71be0d5c3273101fe1a21bf73b
+Output.1 = 1948c1799e62e9ce9929f5949b6ce348cfeeddcc19b44ac5b1f3e5c3075038e10c7cbe9bae4fca67b993fa3e97b83168c62539a4bc840326fc4e02cfb1d57d3c8762dc9a93211fc43396ea9e136c4d73d65394e105a0a9ed48441abf0c8d2ccf162d3487b8ca5f4ff6e90a0787f34f0a
+Entropy.2 = 7a3bcec1774cc94c9c87a5b51d9099d159c3d3ebf66f48cc
+Nonce.2 = 67169cff7a17c1edd6aebe35
+PersonalisationString.2 = 6e91b41722224389388391f79d7dd9ed97b2d4f879df67da
+AdditionalInputA.2 = de30a910b754ab54191504b4db8fe959a537ba5db5391a45
+EntropyPredictionResistanceA.2 = 19e92b5418336bb4e074f0b34c736845ec31ecfd5f9ea08d
+AdditionalInputB.2 = fb1628eb9014d5f1d5b85412640c1e03a1574aed4a3667a8
+EntropyPredictionResistanceB.2 = 4d652128585e542c00c3b6406421e00fbd623b431dbb23d1
+Output.2 = 9d786a90282c6e8bcaa586a518463390f929763da91a303768fc60bb3c8b2e87c3e20f37d53e2df9576ecdf315b36f32e2747d467038afc4eaeb782b3961824e9490f584b650f6b4dcdbd9011e0a6dc6c60d935bad01dcb74c14ee4d7f3125e25b1200490797a293dd21d164583f7287
+Entropy.3 = 9778c705daf8a1a853ba454858bbcc5417e38f78a2baf223
+Nonce.3 = 471752635dc820d4ab99df59
+PersonalisationString.3 = b94baea64e18a2910912c8f9d7dd5cf9c73b47dc043051dd
+AdditionalInputA.3 = ff1bdb0a55a547cc1129de05c944f5e1cf37f2f5ffb6e984
+EntropyPredictionResistanceA.3 = 684ca82b783b07e318663957b88cd2ba3dcf4ee330bc82bc
+AdditionalInputB.3 = 9e4c87a6c6fe5108d37c89a9e99accbd442b848febed7536
+EntropyPredictionResistanceB.3 = 5adec45eb33bc2a67d2a90fde4c18a60cdf11d74f0726894
+Output.3 = 1043265d4ce62153d27800d584de573f3c0f7855ccb915131551c60912c7457cc81a222877a26530bb47bd63abbb3ce1a89aa92d2012466261230a30e77e290096c525ad3857368b5341f10c0ed196f8bc4b9a0751d2cc05cb76502e5c0c7f5aa9515643230f7a3dcc08715248c5ca6b
+Entropy.4 = c799f8659800c2cd6dc6450b072f6657f66d59e3691028de
+Nonce.4 = 3c82b370e0d4ed56eab79185
+PersonalisationString.4 = aee75349f7599f8d5fe7768aaabb9032b149612550093227
+AdditionalInputA.4 = 6392f1a524d95efb78b229ddae419f9f147ffa9c6a972287
+EntropyPredictionResistanceA.4 = 8a449d49ee2ee4e2f9b351bdb683bd5395f83dca2e7ea6bd
+AdditionalInputB.4 = d7356604ecd207e5f0965a671c9c1869472be388fd23d1f3
+EntropyPredictionResistanceB.4 = 661d2d1c5e1fd6dfa0b08ea14a78b6139603473d06f2f59f
+Output.4 = bbeb855dc56cc90bd27c8f384555d0ba6ea6f7110f8bc3eaf85a8a17225a1ff4119facb21aacfea376d4078fc941477bd100dde8550acded5856c2200a38b0cac251aa0f4ec7427598b304c05896a82ac2876a3e64d7da9ae05e4b35eab5793c7c966c9c0c9f483acbfacc2faad0fc7c
+Entropy.5 = 7c6f20099ced2ee3b5e47a9cd17fb7ea74e694559d27400c
+Nonce.5 = 93e0266b2f58b9cf1356f775
+PersonalisationString.5 = 3b1cac42de0891a34bf5c7db45f561eba50e4efd3d3daa49
+AdditionalInputA.5 = f7f8f3ab247d94c6fedc8af607e47fe6463119de2d61b687
+EntropyPredictionResistanceA.5 = 90713fd089b6748324bb593d90452473a800b04321167c34
+AdditionalInputB.5 = bc1f5a5a1a1a2e7725e1b86534398657bd94be5ddfad194c
+EntropyPredictionResistanceB.5 = 4fc2078b265877db8b7e2a8a97e95912037ffa63b4f2b45b
+Output.5 = 1d1499227bd29b42b91143ffea8b3bb64a3f03d0b6b82b8721ff93084707f0c9f38cada7b39eb0ae23d7bb34dfdf4d247043ad40fb303c965c088abd7943119c391062956683d1f0d3bb6f8b744ba32330a5177f8cf1c9628c05daf421d6480f561ffa6e90989dc9f7966a62096b9edf
+Entropy.6 = 97c07b6f9020c8d2de5dd5772740e71f9677106e4fe9bbc6
+Nonce.6 = 83bd076f9a87baed92a41e89
+PersonalisationString.6 = c24cc16287964b163403e938c55636ab7a74d6795d5b6c2c
+AdditionalInputA.6 = 8550729f8bab46aaa618bace2dfe2f54b9df70e97cc76a86
+EntropyPredictionResistanceA.6 = 301049bfa7bde2dd77e16560841eeed643f0738f8b881c89
+AdditionalInputB.6 = 8e817b49321e96e54bfa741ae3f5ced52cecaf5e07472648
+EntropyPredictionResistanceB.6 = 97bcb8158331171413cad3f123d4fd8e12e2042e6edbbd74
+Output.6 = 4458ba29d5ab219750782ed2e415f94f7fa47440eef493af7d992c890c10627617afacce9233cb9e49bb1def397843dac03c31c6d908e5a49b6dcf330b579da06c5014fbc2573f42ee6330f3090ba7523e26d3afbb606b33a4ff69c9bdca81689fa3f29e762a66c69ab2b0da25f3a0f7
+Entropy.7 = 011d4c1149995945485717a39ca2de42e1fecd164c632407
+Nonce.7 = 9bbab3a414e42b00ff35a7cc
+PersonalisationString.7 = fb583f5703a218e5453e224c07f78b4a0a62c12395c37aed
+AdditionalInputA.7 = 8b5cb081720690a2d5f8eaa7f12dfa606e30e8e4718b49fc
+EntropyPredictionResistanceA.7 = e05267ed15e786b3fa97178fb42086d5eabdcbc7b77cc8ce
+AdditionalInputB.7 = 945e77865937d3c21a2a75939cafff62556b008748203064
+EntropyPredictionResistanceB.7 = 25b827ec074494b646a0b75f6313447c4eeeba4ee922c2bd
+Output.7 = 17be9bb0f991aa42ad40dcd2abf04ff0eff42659c278a3946aff341ebbf61bc08688f81a5939374b6444e6f99883d4017b62854b48b98e387d7e935dff4b2350543b541c8b1048cf56279c1c31123d1c662fef96ee5939a0570e293753740d0aa771b1cc6c06c59c5ff6c82148ac3ae4
+Entropy.8 = 55a2c8a5eb90b50edbc59706370dbf1d673db0a24e58bce3
+Nonce.8 = 440bf33919883322f3540db9
+PersonalisationString.8 = b319bc4dc4184221eb6dde7868ec6d523ab80ffc4f22cb6e
+AdditionalInputA.8 = 639c20bdc94c82d341caf93dfc15555098f399fbbc072dd1
+EntropyPredictionResistanceA.8 = f80f77d8fdb2f45d99648da116c4d91d58784137521cc390
+AdditionalInputB.8 = aa317847f21da0ca1391b58b43603a15d05af9a9eae971cd
+EntropyPredictionResistanceB.8 = 64e1b51530df3c0c2721abc7fa128df5a66fe617fd4c1d4b
+Output.8 = a2a7e7c1a5cf5595c894c57dd19a7fc9f1bf1e70eb59c570615a18f592788f420515a9a3b0e1857d5d0418b1166418f274926adfba073ed6b4612188e1314a846a5b1315d870372f3bdddd932a27f03eed7332202c28dc9c494acd609c541f55373bdf09af1bb4f5fbb7217c783f5147
+Entropy.9 = 8d14d9a2b109c0e3113b6fbf3c3e94fdf6cd1a9eec927511
+Nonce.9 = fcfbecb0a74f15c974c839b4
+PersonalisationString.9 = 5547332283f9138547717cef90e0700110ab5bb86b8a737a
+AdditionalInputA.9 = 7768de739b766c3a9570819cbbcc71344ba6fd739bf675b2
+EntropyPredictionResistanceA.9 = 2e1d460eb9513693f55afaf3cccac1454b818077c07998dc
+AdditionalInputB.9 = 30a932c3096340d25dd0308053f643d3bc0bb07da72f09a3
+EntropyPredictionResistanceB.9 = 089c3f895669ebc12d342258740f9ab9a25d5b725b97be4b
+Output.9 = 82f5fb0e383b06056af923781ae84d6dfa1e7324e12f392732635c142dd5198732d1ba61f8ac21571d1b6ef677b72e8f04f6ab752ce93ea158dde2382976a051b8709bddaa6b938d41b75bafcca06483497298e45a695051068751fb172c723cff576023b2891abf9217d3cfeabce302
+Entropy.10 = 92a8f48358c6df64bf73b141925c43324dfb585ab01ed842
+Nonce.10 = 6ff4d4eb5f6e8620d57b8b24
+PersonalisationString.10 = 03d293a5e206f28b33bfa656b548b520e9add8cf017882e3
+AdditionalInputA.10 = cca5fbfc440518db882138e5acb1c1c1d86202aa564227fc
+EntropyPredictionResistanceA.10 = 666e09b57ac81f10fd3409e263c4af40b014df8439293528
+AdditionalInputB.10 = 44e379220e52b59cbf57501814caa85214b87236f8649890
+EntropyPredictionResistanceB.10 = d6d90c9bc96ffac3c3d51a78336f37bda95a1fbf3a9352b5
+Output.10 = 8f2b82f63ea7dff744932bc28bf357ba6f09a80ae0afeb91e32220c8af5f4b404dd66ab4823be8b066d33afc19f5372284e41a5a39666853b4a964bc2ee607b7df534ec45f7c313a5325f4a4cbded62add6971f32c66fb0c7e2458ed8e54531a04d7a46b93fde950a2e7a0bde5b7aaa3
+Entropy.11 = 354724a53d1a6f7c682909801bd50736f3ca2b9a39ccb688
+Nonce.11 = 36af7a5cc7f464a1b46adb4c
+PersonalisationString.11 = acc90ef8a6c99b077df6115ce53a222ff732de4b678f39ba
+AdditionalInputA.11 = 04fa356f6d551e349ad1148f514524bd084ba512ee1d0c9a
+EntropyPredictionResistanceA.11 = 7dcd536b81048fd34bdb6f5eb29a13b07e1536c49a3d2cb5
+AdditionalInputB.11 = 79e0a2f61341a2919405b77895996679369c7a75b6ed1890
+EntropyPredictionResistanceB.11 = 380309997b365526dfc6c9eaac322e022f96da5e92a608ea
+Output.11 = f5c4cf7c1f47bcf6e0ac47d69edd2be83d499fad7f910305c774b5c1833315f9e2386c3854944103bf664787461887a9e8ae31a630edb15d984c4bb40ee1108d364436493aa22a8d27558dd05c6339619691ae3d1da85567ae3aabbc343edaa1ce87f4e8ecaf421bd5b785c054fb8acc
+Entropy.12 = aaacf03ef0a65e5d15ca8edb56d6a83119c5e69af3774385
+Nonce.12 = bec0e0b8794ba4c0a79c6794
+PersonalisationString.12 = e30be7c4f2ea14d2fde8fc94e2d6dd4b6ba04112a8b710da
+AdditionalInputA.12 = 4d8166df435ca222270608c7673997d9693ff02ac9ed57fb
+EntropyPredictionResistanceA.12 = d276c67449b272a7a4e9ccb9a32ebafaf8bc9031566e5421
+AdditionalInputB.12 = ae5837afbfc8696b5a5fda885e5a599d82c16218c5dc2184
+EntropyPredictionResistanceB.12 = b42ec05423c3e4920f62068286d2e9fc470593c31e3fefba
+Output.12 = 20080b7ed5a9faf860f2c8597f7c7a64587ff16719de03f0cac57121e43cb88407def3c8556b39052b6b3ab311940ca263c3f0aa008a0cd174f4e6afcd70f2bc1e258e7324b281c11314fe1360311846d28c43de156940faed3568284538035c317b8c3d2a5455baaaf10fecc89d9549
+Entropy.13 = 86664278a470c3eb771ea4298abbfeab9b5e2e06cb6b8aa8
+Nonce.13 = fd8885e6cedcf2a658a58477
+PersonalisationString.13 = 6687728b57f7243e2489953c6981393f71ba34bfedf1223f
+AdditionalInputA.13 = 244de917ae2742c10c1012add0053e5efda4da17ea8dbe7f
+EntropyPredictionResistanceA.13 = 6fe6f2666bc0d48d10b74c6fc7dbdcd1b1844c880cc8a6bf
+AdditionalInputB.13 = 1f637d59497a311660d9ff2a16bae8309e484b7a0635d008
+EntropyPredictionResistanceB.13 = af4e2825bde2ccb988221a01c7db90e8de60fbcb2eedc3cc
+Output.13 = bdbc48ae4ed5df358d9666dd0a4b73cc090f5b589ce1c2909b70ccd68167b0ed607729300b5f71526a5a2001fe17951595440a65699069817d82232a36d8bac6f265620f748ab0ef2d15b1727daf56a6a6e1b925a8fcebedb3440c0b4f7255a40a695aa642fc424805be79103b80b03a
+Entropy.14 = b7b84c204a152f6a014d10d81e70869ad2eb4f7a7e7edc18
+Nonce.14 = 6b44c033fb82d360598dee68
+PersonalisationString.14 = 7532cb6bfbbfbebd4d4c7af9ad890a50cbe8202c3880f89c
+AdditionalInputA.14 = 5fc82b7c368e0ee345b603c36ab1bb863ad1446e61fe6af2
+EntropyPredictionResistanceA.14 = c077b4c2ceffa7887af909a6f1ea46edc73e0205df68537c
+AdditionalInputB.14 = a00aa12c4a26030b79897e04d0171bbce1cd7257e0cce379
+EntropyPredictionResistanceB.14 = aa9b3dba7376b0a21d34ee6ac8939a625dbfec172a108c4c
+Output.14 = 54fb778fcfc5549e190271dc12389f42ea8128df55e6193e03073888b4be31e2d7a78845c47362c4e96b41fce503fb970f9176bdb9b5d664c386898a0e44ffe12f9480699b7d566d697a4f520268f62e460359a39d091f4c372ad33ef0eef58622f488c9348ab5fd693d4edece794b12
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 2ba723efc4a13a52e8fe06537482d78758af2300c411f9083817bccc49056e85
+Nonce.0 = 84e7909dcb143410a34285170553649a
+EntropyPredictionResistanceA.0 = 5cb0008d9a4cd9ba6dacd5e272c350e9098d5b87019d8889a3c3b99c5db8e731
+EntropyPredictionResistanceB.0 = 8d2a6d181c802711fc1ba84a95ac35cf5ce0d1a850c729ab317427ff44693437
+Output.0 = ed34cd3977ac1ac646d9e03b2e0ed8d301ae602a6361d88c7107d480662af4c3c35398eb2c2cccefc6ef0058f4dab5d204ade3fe40a77bde57a656bb8bbce862622db5fb561e134bfd114094677ec73778e61fab315089919cc663bce70044f1e835abd513a3e0ff964544fa541d88bedf638bffcd3608971849fc83a0d9707b
+Entropy.1 = 1615ba2fcb40d2976f354fd3040070104cff57a145fab1f700efc38ec7bae013
+Nonce.1 = 1a992febd6d98c3a27213cbec34919d4
+EntropyPredictionResistanceA.1 = 5e88cda9b868f707e87db59088dc38d778d94d8e095610c7ea557b1e2fdbbaca
+EntropyPredictionResistanceB.1 = 06a413de6e8d35fb9fd0d0cb6bcdbe60adaca4e4352fd4804f4e5cc2c852baae
+Output.1 = cde7e375224caf43af92ed4860fcae4de88bf3bb195e9b5191cf8d222ae7dfa2b2073bff3a6638cdd502c1afbcf928a8cfeb22f34d4a982fd6ca3b797d9fa797446397feafeafdadbfc2e5fd6279ac63941678ce77ef867cb03c5de38689473afcfa1b177f59811cdc8200b7b7a0b4a9f408da18e5d85f39f5ed178ce9075a19
+Entropy.2 = d9081a95b4fc9f37f4cfcbf471b6577cd7754639f1fd98eaca8edae3e892d269
+Nonce.2 = 1878929327c9fb1bbf8cfacc041d9407
+EntropyPredictionResistanceA.2 = 83cc39c64322e45a240d733461007bab944c1701359da78ffa27094108fff71f
+EntropyPredictionResistanceB.2 = 4b9f8055b7aa9495513ddd704a858b87200d5686f3f83d8bbaf2caee3ac5d88f
+Output.2 = 02d2c60878dced9b7697f5468a0137208f73603241d2a4ee9555e8db8255290cac5266b69fb28eefc0719c6ec8f0c93e37f188adc90fe5662fb03a2234897ede7e65e05e069b0b3459a4ae39dd04aa5015ef77efb1815834614335247c0357d2bf2e2aef7eed66d5e8b09e012267a00dc60527b50ee071acdf1acbf4be594211
+Entropy.3 = fa7bcd3dc632d9cfd6f977dcdc7fdbed165238c46af1cbe7cd56d951eb0daa85
+Nonce.3 = b234434b88e49a7ff6bb318cfd9b31c6
+EntropyPredictionResistanceA.3 = cbc6beb367469e49a637d9a3c4121e49c834a845e29223a68ce0c51be671445a
+EntropyPredictionResistanceB.3 = 0647202e73318d8eaf871b378c61e5420eea0d875da13271040e153b8bd7cb1b
+Output.3 = 8d1963b1963790eb3c635f68c52775f61652055909e007bd6f5de0ff642f38a784c046896bf8887e193c5f1a8eb9ffe6fcdf75f31d6c900d95d6ddb3a40abb5aa5a8ed1d5e6bba9348bcceeba2a5fa62c8a423cf48690e8f5146f3292e462c4029cfa16848fe1217a6700042cbecd874e59b17dad67ab3f2c906fc753acc5ab1
+Entropy.4 = 69ae054f52a3fd680c43b362f0c36e699ddddb313d3deeceb1ad53180bf3c7d3
+Nonce.4 = ce7fc6000cbc2ca6ae5a00476610103e
+EntropyPredictionResistanceA.4 = 4f485fa6ee06eb32dd32b968d60564c9d55e421f648689e250d9eda0a0966a43
+EntropyPredictionResistanceB.4 = 15e1ab7ae9de9df9a5b8f2ac292bb31b4f8a76a7af2a013e32b2220ea8f18cbe
+Output.4 = 4b269eb9a7bafc7914e8e85686f10c96a060125ff357c46a80bedf83db43f41e17f93cfee13848b17b331da1590272e75c9cf9590875ac02aad051b146b52d5c61fd93634727b3cddf691590e6db1f4279e667c194fac6e4efd9f35822a8aa461a272bbd3ed2b73a9738035b92604842eed75a7884bd8a3a1662bffce1980e8c
+Entropy.5 = 5e6a93d12c0bc48a86603e7019590226ba5b314d888c817a20c154d86af555f5
+Nonce.5 = 06469257864db95998cc4731b7773098
+EntropyPredictionResistanceA.5 = 94aee4f8f3baa43a1d070d63adcb15c9171c2978d3c624deb3dc6ebe7098b1f6
+EntropyPredictionResistanceB.5 = c1bbab488f0841736458cab180e92774aa6ce61a910245349cb2b2da321de059
+Output.5 = 480ce8507696c6cfeb331f7b352862dd17aa71a13a75cfe46bae3ee86d0aa7bf4b50d7e369b1e307e5b6261ed92725bb9f0db54eb3436e1b1d58b4df18f7757502ed657db8dceca72a0432d94335f7f19fe083420bd0c8f10691df0772d07510483326abbf867eeade3ba0c31a84b8bd580a2437830000118a79d6847efbecaf
+Entropy.6 = ceddcf18502fe3b2f3e06ccbf5344d6d1ac0b5ba01dbfdc42f6e9e401c3ea639
+Nonce.6 = fbb4e481a395aacf7286a217ee38c61f
+EntropyPredictionResistanceA.6 = 6f9eddffd86b32ae60b858e78d3dd297ca2f7fe8af160a3d354e565baba94c03
+EntropyPredictionResistanceB.6 = 83b7949e5bc75ad4ce731aca19ba160d092188c5f6776078a6c26c12f97cfd94
+Output.6 = e0a28c891efafbf517e2659a47268683401b1de3cec5386a4fda2af5ac091e4844d5dc9a89f70d43db6af5ba07dcc57030f2a99d682205ef0701447dd3ab99cb92518b28be72e19ad245baa9c88fb0f3ae31e027912acafbb48cb73e6cbff8f8c8c28e3e50fd1f7853355b40f079e1741c4c86077f042e9156c349b3bc964f00
+Entropy.7 = e88556cb2f1911fe2d2317d78d84dafca15b48b094a194cba12c50f78087bad7
+Nonce.7 = 90e3db3c76a68b18f616551d80b059ac
+EntropyPredictionResistanceA.7 = 2e7c8280a70ef1bc294fde5caafac8e7fca2169cedcf9d80224c03b795113373
+EntropyPredictionResistanceB.7 = a6ba2a06a8dce579d3ca57c712baa157f06158e514ab7f79f202478e60762ed1
+Output.7 = d73ec24926749416632c01f47f143bcec04d545d659bc803d33df575812016536ada9158787ef71831d35515320639adf69315fa5f31c4fd8df8d48d215d6e9bfc3897bf99f1bfff2328ce9da9752504afcb6017fabf2d115fa240de9d0c2e4e6ead8152e968d9f2208261e9b45edda0069737c192bb284f11fd63e12b60adb4
+Entropy.8 = 821cc7ed31bb8e397f7bf979a5f282e3be8ef0b7943bd75743df865fd2bade2b
+Nonce.8 = b2a16209ad24cfacd4b411ad2b904f9f
+EntropyPredictionResistanceA.8 = 8bd4436a2508ee5e8ec10f703de73b6460ef7aeb57daef74e895086dc633709d
+EntropyPredictionResistanceB.8 = f214033cbce51e78a96d22d6929ebf97cec680d879cba4869a4ca4947c97fc3b
+Output.8 = 646e951a749baff64eea3fe70570808441327cc77ed2cb5e98ccbd7e734d49d4e335d9b69c3cbe3a4dcd645dd6d3799a1de1bf0cf23f0666ecd9ef486d279d7a641c03680edf2363b38f178c45b16aebcec4461e5e404c332c28f3be69fbdd1bf6db21fe5a3defb129204f6b9714b6979e1bf698256e04a8040e5025dcba5b2e
+Entropy.9 = 5f7cce7b9720cdd1c46e8fffb73287c490d5815cdfe94d2110d4ed5a3b191c04
+Nonce.9 = aba7a51d2c4c85e8cb5b780c8b3e623f
+EntropyPredictionResistanceA.9 = 1a9efff25e127ab1150d6eb58f6b6be0c4f0205cbc7566f5f3d2ec988e15b743
+EntropyPredictionResistanceB.9 = 7a1e113d817b56abbfba31add74c8125b298d0130f5fcf20dc190fb2774cb821
+Output.9 = d376a8bc9b9760e2f0c9be23d7e61258710202a0af2b28345cab74b8e90d9c2a73f89a50ed0ddb472db0617a40d82947ffa587752bd35121ff983fc138b1f3bfb7ecc9930cc5ba77b8e9a9cac7ca9d95567a5db5db7937b0377530406be5bde1b1ecf0aba958031f22b2086c927c0547d31052f93e9034fd521840c35d452314
+Entropy.10 = f7a9e4b68642eb6a3176cfdbdc726a8a04376e27ab06e4af57e7bab0e39a85f9
+Nonce.10 = 4852e732ae62edaed41c047922ef5c1e
+EntropyPredictionResistanceA.10 = 29a1b57935ff1a768f7c17017361db8d404ffb47bb3a1bae279b35f20bf0f8c4
+EntropyPredictionResistanceB.10 = ddd2eb06d3cde99378ca3e570662d6c2b3492efb15c1ef26af6878def824add9
+Output.10 = 8d22c6e6a545eeb4dafce2cc0e44adee665783665e58cbd27b8e581f9913664dfcc7b58aa2ab6e96abaf0061938b2987fcab2ad14259ba3053c56137f66dd17aa39ccff38902f60e1c5ede81ab7526afb02751eec34ff561ca8930f79fda51745436a2f4619916d627000030ff10c418bc2a19ffd5e2cc53f3b9ea7b52df2000
+Entropy.11 = a320c8977930e75c1c3a9683352b5369958befed4fc55b696d7be99f289b2b9a
+Nonce.11 = 5d8caedbecaf8b78bc855b23584b9fad
+EntropyPredictionResistanceA.11 = 9daa7f30688e225ad3ac02a86029ff41a886498f27a136db4f84361003e8a75a
+EntropyPredictionResistanceB.11 = 7974bb2071afc42491759ad558524384372fd5487e437c4c53160554c67ecff4
+Output.11 = e2111b706aca01ab348cbe8a7274fff12f8a314eceeed61204039e8fbf3ed9e1d949327a0f87261b83bf07e622ff86bad041f9227ed8019ceeade0b9f99cb9b8a256766a592c7d76a2aa22150da65c34c575754a767b7816632d63e7ec3c81eab382498f419ff770ee8203ac01986af377c0275e5a59e0b12be3668d69dacb3a
+Entropy.12 = 45329aa53a06f5ee95149714e8559f920ebf0d39d185da118c174cfaace11959
+Nonce.12 = 4a85624a0803a1c4b22fd50e928a6ad6
+EntropyPredictionResistanceA.12 = 959cd95cc1caa0c45ab8e4e9794894462861dbd019e3f523ffa137e918c5a847
+EntropyPredictionResistanceB.12 = 2cf33fbbca4ffa978da227516246bd66184ec4c01ff97a93c50a58206459fbf1
+Output.12 = bd6137c10959634732846b2e0136fae18283686f43cd5e637bbe84dd8bc7014fe475c61ef818c7592d67a4c603b3683e2eb4e71860513960c658cf00032669016ab0ff7665d89ec726f6870e3d2b98cdd22a58f1de6508c4d7c831c5b9bba8a0d7e80c90ccd76186732d46650f2bb0111ed0f22edd29ba31012ee21ac335ebd1
+Entropy.13 = 8fd9060b4e9596938302dc595b25d4b48e8b137dd37d5fcd8565c4e4a44a413c
+Nonce.13 = cd1358b3b4eb094a327252b9fc5294f5
+EntropyPredictionResistanceA.13 = fdbac399233b3e0b15bf7043b665b4d66f80d36af830881c11b9ef80a4c79eaa
+EntropyPredictionResistanceB.13 = bd1fc5c3d159ed2c37ca5a615144935506e3975df4c11bc2e244edbb2649163e
+Output.13 = 78aec10bfcec1a92cd0799b23dbee1f3f3193c5b2cfca8df2458a2a7a611c47800d2d3b3b0b8302696e1f6a09264996b424af52f7115e1921945cfabe9265047e8136cf314e0f4148fea2d8045b9d9efd7b89c25cf957e89150c481f105c2f745bf89184ee11e4cbeab4df570949d972189c0fe7490e8c968bb0c3618b510c60
+Entropy.14 = ed2272563487ece23bddf3a4c6d20f421375cdbaf60e0ab99d605f0be6df9ef9
+Nonce.14 = 2a7f1506ce7fd1f15315d370be8bd5ac
+EntropyPredictionResistanceA.14 = bc9fa0d6596cd2b1e020a0f23fadcdbd5ed8730e9187c537d81e222ce71b8cd8
+EntropyPredictionResistanceB.14 = 671405ac5614d316a8f289b50eeff5467be8960feccc46b7eda7d3038f09321a
+Output.14 = c8784cdcf893010849f094a0de5d3325a69b425a8c7b788f96ed2d8209434f9731bec3c590e8982c22b46ab9f28d169933c1ca2c4e4b99a9bbbd74e2182097a7c0e29e84a63363eb3c0b7b9cd730cd0bde121006aa11542b968f4963e84830219c359771a3ab03298e5c0b8a207387668308e2158fd06add5309defc8cb2c0e8
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = c4bef9b07a7142187727217a1a0aac46d458a7228e3a1efe81dde68effcefa73
+Nonce.0 = 5c6da6d6372ef2333b1c297a3d64ad6b
+AdditionalInputA.0 = eb3dea2791961932bd49d1d60c8d48437051f133390aaf7c766512f4de1ae773
+EntropyPredictionResistanceA.0 = 9b1cae17a33aa16f937d3be7e6282fed3279c69eb630bd217fd2ae471b2cf938
+AdditionalInputB.0 = 82b127e81a85faa555f9773af25fdf51ff02acf4e3f0c9e73677e6c02f24b5ed
+EntropyPredictionResistanceB.0 = 65d0c91d6818b9380354ae651fbc8a18ea3c4e1b92808d79fbab9c7fd2982850
+Output.0 = de85330a80b2fe63067478d72f8027de01bf494823785f751a593f2c18ce4bc6722e32d779ae5f5581f85bb671c011b537f46becb79678cf7e7b075bf1140a83218de5a63df3fce2d0265b2fcfca6904492e70ffd826543cde6cf3c95558cd9cea6c9a88340f46b306668160d5a2e0c8fde5ba28943c3fc0f5bc8030c138afcf
+Entropy.1 = f897a876a1653a1fa3a4e6f92a05b5a299c108d1f3ef5c2a68a0fbff3363e571
+Nonce.1 = 7fa64c22dd30d0f0f094eb964e1a0d78
+AdditionalInputA.1 = 370cf41a3f7a1c839d44f2b27147a6a58adabe2334e02f09fadc10f62a2ccd72
+EntropyPredictionResistanceA.1 = 58c9451c4e2a8890eaaaf0ed8b621af3a0fd8647c32b8571eccf986c7f0c9d62
+AdditionalInputB.1 = e152d2ecf86a062d8913dfd90a8b9a2e832624d3274a8afbac5c7643d5a99ab7
+EntropyPredictionResistanceB.1 = bdc8e2c893b121ff4b1f8ed112b43099a1aa9b9de8ca9652c330aec691046ec4
+Output.1 = a2ee370c6202eaa17a4bd54351913c9b7fc39172bd0a18ef11088497b03c847089d259e2953a766ca1d1ec86ab703ce9bc226d335459f3a1f1ff8039852bd06d2896fdf6e1065c683d938ef9ecc684d387a8f5213619cd6b3f50f6c470eb0cb174d461934cc882d23be985facb83149560d358ada62368e25756bbd773fea978
+Entropy.2 = f37b0b0cd67d50653ceb732dfd353f0a89b2e228e16288685f617c2370eb883c
+Nonce.2 = 5d9c65553bf5ad88b110167c84c30b6d
+AdditionalInputA.2 = 9898a76accf878d5a7d0196b4cfbe7ddfdac225f560c1886beb70cef4023ecb5
+EntropyPredictionResistanceA.2 = 09bd6f16df6b36cb534230d5a4b1cd3b6158ef2c19cc625130def569590e1d37
+AdditionalInputB.2 = 20c531ec1d52b1063e856337948c95a4d52f26e4f93d87621ece15272967ac31
+EntropyPredictionResistanceB.2 = 1f9a315542ec616e1d2fefa07d992cf94b93d3401112168752f86b2dd61f8b0e
+Output.2 = 295a243d996454b98fdc3ebdd8412e0859d2cd71a25dcf22083219cbfff5cb48c3fac3ec8c56bc8cae216d52052924182d3c91d4e14951f9d6fb0a06d82553d36a3dfd5d4de18a33ad8d573c9f82388dc56ee437bd827a0fbd70d619703133b2cb6216f35da9bef322aa534bda0614f1eef7c991a79deb625394586d9adbaf2d
+Entropy.3 = 392b3a8c1319b2d78113c9b8216911033958b6b9da0b7ac66df281347292c8fb
+Nonce.3 = 9d0acad42a7ef640f364df4a66f705f4
+AdditionalInputA.3 = 6ac4310f86a20aba88cf2f31fe515c51f26a247f29e8de22235c6c316aa68751
+EntropyPredictionResistanceA.3 = 83f48e8db3c3d6601c700055830f07aa159a218ea107f3a98b96aa86a52a343c
+AdditionalInputB.3 = 244541967c6bfb40d11522c5fbcd7097ba890b9c28cc5680b1918eaa24a49720
+EntropyPredictionResistanceB.3 = d8d3258636fade554eb46c6abf1b1a6b317fea8ebb9271ad66d91cd1f596767d
+Output.3 = 6dbcf6ab147ac9de0e488c6a4fca5b589ae3a6e92af2c4f134439da6a4b41e4aa7bba2f6e5af56b313f5170c6b594425574d30044188fde926e99bcaa842c82a55d26f3fa37608d60c8a4b3a972bfeb428436582ca54bdd4197f3d1004e450954f80c1107b3ec828a55610d127b142aeab57b0f8f108cb8e228fb1512286e073
+Entropy.4 = 680a52003e0001070c5525a7bf450199816ea4a8fa37ac506d7d8d0810da622b
+Nonce.4 = a5e3bcd460f10541a0732325f2c35563
+AdditionalInputA.4 = ca6882c5d4f27e48540b3cf84d4a6d0458c0951ac830940426e634efa18bcfc1
+EntropyPredictionResistanceA.4 = a05ea98e62614bb0b477de92495b4583477b6a0f9a21489d10bb9a7ead8543d2
+AdditionalInputB.4 = d4eb0e2a99290f6adb9ed2bccd50d1e549911960275fb6bbe15ecf245e593c03
+EntropyPredictionResistanceB.4 = df09e00c4e7bc4c10219271977dd888c8bc0e2c497f218d500e3a741c206937d
+Output.4 = 72f01da54ae8c5e44a0b9b67fadb03bcb9e6f90d0a7db3af6c0141816402eb655efcdb36e235748a38c1a8a99e9f43cbcd03d6cf3bd26cf8541d12e44c388433dff6176c523fbc1ed39f58c8551d60420993acba0a573ffb2751f630f71701ddb8c1b05d3df2d0e230be56ab013042156b2f9709e4a4d123ab9e4b6cbb0453f1
+Entropy.5 = 86bf17fe95d575ccb8aa836a5f1c606638038446a42b7ca47abff8b806cec735
+Nonce.5 = 266de28722f190fea9a115503b63696f
+AdditionalInputA.5 = a485f091fb3e331c5813d26e682510eb984904c5cec7acfc0aafad22ab770fdd
+EntropyPredictionResistanceA.5 = 33bed9969b6ea4c56314fc19da9f21ca2805a531a56022eecaec50aec51bcb91
+AdditionalInputB.5 = 6820be50e17bd76ae671eb8cb19621f5e8d302b17b6f39a958bfdf98ae2877da
+EntropyPredictionResistanceB.5 = fbe6bac6546057bee8123d4662bcff12a7c81485500498035677ccd42e07e948
+Output.5 = 998cbeadb5d8aa3882892faa794bb388816b606f7810383473e47f41aff591dcc0cd17e2999eb76ab378ee0c86492e2826db52df711e2f9b396fe1bd233c629ec76d9e55642538324b44ce13804b139038c9703625f43f41b7628b4e70edd3af2aed6621224577dff9e8b0040f365f90998c6dae191849a456dd08db0801c3e5
+Entropy.6 = cbeceb822e90ddaa9c2925a76c64507b878a2e142f8ed47da9bd77e527ff8852
+Nonce.6 = 64b5a83acac31e00656f3d93d4e00829
+AdditionalInputA.6 = 39b5ad5b389fb1d2968970847836f2eaa5a4b39e3b7e3b52b6df2b7c7bf339ea
+EntropyPredictionResistanceA.6 = e3bfbec81ebea5c9a4b6ebfa680f43a19db3822a4283590859ac29ef4baf545e
+AdditionalInputB.6 = 3ecb8f984f29986742fecdcf103d11dbb20f9c1f97e7adb0e51a3a7763f1de7a
+EntropyPredictionResistanceB.6 = 55c1239db25516621be9727a99e8543ca7ffd8c233a448f74e488b1e89584aed
+Output.6 = 6571ee69d6d4dd37d4a0932ff77c01f63415040f2739bc1f3166dffbf4b1724c0ea89f1764652cea0360e55ea4cb390f1828df5482f7058fe2d0c5646728527f8e1ef73ec3860b896a0bcee3ef83a5b19ff74de5cf5e207a728c280b4243af0c356526514cd33c06cf528b01c29c3c276b2a3cba95f6849bd6c641ae4460dee7
+Entropy.7 = b73bfdf280b98f6a777df798344236fd4c35cd997c7451ad7512b1374c0fe809
+Nonce.7 = 3be83a7cd1799ac2c7a0d889509277d4
+AdditionalInputA.7 = a8b3fb6e59efce9f131c4ced6e8d23997b5b376a46b17e11f4d44bef824c56b9
+EntropyPredictionResistanceA.7 = 902d931fa405369b6e6340d36ae710e6e463e93ab3fd8072b36054f0004de210
+AdditionalInputB.7 = 623825a5cc6dec6dd08eb6b94165db121a3a0f109c8cd1b62ad374a019d5c168
+EntropyPredictionResistanceB.7 = 3487d24aa436354ec98b9af45cca9142d570fc321e0ab4dd6bf7558a8664a976
+Output.7 = 8fdef4e40f5effb907f44eb4fc30d47a9025d1936a9dfb97381668af1168346d436cdaea67e8771a7c4d09fd4ca63cbc3ac0c96eb1eb49d3ca80ea76c4b9708e5712bc39a153594865486e8f96e603530de447ba1f10c3944c7f852504a8e1e6525d2f0cb88aa784144ffe99a7e795e81e03e8ddbecd15901b816ee188e5effc
+Entropy.8 = c41df694aabf8bbf1dd3c79974a19a3c5cda7b0d27a8a07bd5af4a5610aa94cf
+Nonce.8 = c9162eab5c1a90f291461adf476a592a
+AdditionalInputA.8 = 511ecefa5fa42d5d99f4d1dfb7ad98cfe9109f39503217a3d01db7d8acffba09
+EntropyPredictionResistanceA.8 = 0815d33e4bf5f3f21c02f51ad336afccd1fe297f383d33e1bae42a3c58a72f50
+AdditionalInputB.8 = 02ab5cd498d057afed22b418811d3580a895a6b67a6317c6730da29a89d44604
+EntropyPredictionResistanceB.8 = 1e98185578b325a911a1808a790f891e325e9a564d21d22e4ecfb9c37b144972
+Output.8 = 0bafff4d4e3c09eb855bda110ba7be633b914dfcad5f5ed17db04611db6da00b28f2bccb52ad52c1882d999c74d434bfc76a4660bf5428bd8284f56f4c3a056a43a3ce49ac4c9e9f080925881e0441b53894b49c8cbf46fe6abd5f12c43ad6a75f4abd825800bb9f3d9e6a41f5a76ce298ec85290a06261f57523b0ce41177cb
+Entropy.9 = 9b72c3c002ada80ceac8a5174b5f67865216221a49e686ac316a51813721bc76
+Nonce.9 = 3c765b63fb2655b6bccb5aff3d801ac2
+AdditionalInputA.9 = 18c545e64f78132ef76d72fade33a7245afd24ccdc196b0c3dbf9bef7aea0a77
+EntropyPredictionResistanceA.9 = 39dcabf3dd1d118fbc95a2fce8d25a15fb6b7a282ddf663720514cd8e5c0441a
+AdditionalInputB.9 = 4b29c37f2b073c186fde3e7ee9dbed497158a44faf3685bb4cd65ea80f245c9d
+EntropyPredictionResistanceB.9 = e306d9e512e554eab2c0a3638287b849b15b7601e67de1574e4723893df92399
+Output.9 = d34e21e12ff629e8b192d2afd466dbbb06f3091c98da942b52601f55512f6c0748960e5cc52317bb97e0eb358da9d2bec4cb8b6e0f1037fbc5f8ba7b8b3dd92ad037e32d4a6b884c44adb11c0519397e8d26aafd23bf67c4013ae4de2eeaeeff24f242c0c78cda367c02a34e0413a0e6b7fbe60b703d6c03b32ca068c7a0b367
+Entropy.10 = f4a640961349c88f0c7ecbd23a7ae73dad28351e0a61754ddb31dab96a24f7b5
+Nonce.10 = fa5473b2289d842386f6744ca044c2f2
+AdditionalInputA.10 = 56b217d541e94d85286ac3be8298f7bd45d81c99f6394439ca240b23e8c72161
+EntropyPredictionResistanceA.10 = 01410a96692915a67f9021e480a8b2502a490ce1c6e648a0d31c8a719db3f8c7
+AdditionalInputB.10 = c0e99a99c89f1f5316272acc71131fe699ac2b3090a49ab734e7a567fa60af28
+EntropyPredictionResistanceB.10 = 7abf815eed1a2f7aeba57cf93252a0766b6af1821c7bdd6eeaf09c39b4d88635
+Output.10 = b312e9597630c7f3c8a60527b138ffea53744da6df35f22d1e87bd749b2e6147e33b641107719c5ec038e254063e63db467ba9f324562b7fa31960df6d792b60d359ddd964c952c9a71301fd0cb5ab595d3719f34ff004e4cfd1d56f83b14538dd60ab6bc158ecc3df2c89ff80d6b8067e22595541f34193b3d2eaa3aa999476
+Entropy.11 = 002b551b5a572ca144a15dd04b2b8b2378d524d8de2ad192fdf0750d23ce86ba
+Nonce.11 = 0e23596326f4550197ec65f4a9919834
+AdditionalInputA.11 = a884bf8220b1d8399319cdfc28a095d8cdf3441e915b42751fc07601e4394b58
+EntropyPredictionResistanceA.11 = 1299b0662330a8aed38ec63f0577d1aa8244a37341c66727ca9f4bf5ca6019e8
+AdditionalInputB.11 = 71fa05097bb2d04019e98487ca07def4111ae06b9ab58bd71ced31fe1ad07cd1
+EntropyPredictionResistanceB.11 = f4f8f0d1e6764d01ab0760a61c0e6cb807fdad41a6c83624bc836e0b94e93c83
+Output.11 = 070b9dee38a1d5c63274158aa86df2100d271ab5e0764b8920457183cfccec5bdad3c44b816e7fcc78d4506193a8814cf8598b9363c4832dbe5eea3ba104126574669b0cce36b6fe760bb0c110f39f6182cb831d5fede089311831dc2ea0ce5ffa2226950f6b0cd79ec66aa3b1753bb7bf17ef598d5d34d6154d2ac96e20fa00
+Entropy.12 = cac8f8a26f6d71c93eddd1fac85d4592eef8ead8c72ffc9fa20f6f5a1996a2dd
+Nonce.12 = 61f9dabfc0d131da45a2f87ca5bc7c91
+AdditionalInputA.12 = 9694cb448f064399a52c4402e92ba19d5d06469336c4a782d1670e38efddf26a
+EntropyPredictionResistanceA.12 = 7ed5de2cf8afd11e4021e86d0632a7a36e4486e65221bcbc66c5c5ec814c28e5
+AdditionalInputB.12 = 0e51d9b9fe18e2d9426e838d14308821a1ad513631b16c4f8108e245f80af836
+EntropyPredictionResistanceB.12 = ac3bfe7758b1706e9e638d87d09efbe0d827503c0bf8735c7ce3df31d716f049
+Output.12 = 69c272964b101a623409eedd18562e00eaa128eaa493abd78af9177193649ad22880bc851628aaab0aca7ff85baf8d952063426151091a56ad625db4645d13dffed9e96ab67f567dd4d703db73095484f7702b5511d5ba619d08c117338d6660eea058659edc20cbb036d6ca61c513fdad63b098c961b781e6e4f10995ea8f89
+Entropy.13 = 775a08576f1d821129a5e5f1abb2a444337ee5b0b65bb4f719ebc0eeaac0e25a
+Nonce.13 = 96461580fc0e57953a99145598f73ce0
+AdditionalInputA.13 = 9548cf513d4ae5ee34075b1a142be6ddef4d31010c971292463e152d623fa09c
+EntropyPredictionResistanceA.13 = 8fbebbf806aea5f5a12359e23bc6590dfb7cbd6ecad3a5ab5d728c7d654ec5bf
+AdditionalInputB.13 = 10a3e8860df6b993eacd0937c35975f9b96491bec7afb0fa00d1f7c03edea081
+EntropyPredictionResistanceB.13 = 171e62fda632cc5253f2436955f812fec2b354acc9328e1a1909538460b847d5
+Output.13 = 0eaa5dc12107e4cd141ab2f3e0a96cbd1066ec7d1ceeca94667d051aeeb0bbee3f11f53a6af0ae31b917d2fbdd139de0df890d954e49370154a8fc64871855375e736d206b48335bf1171593caf32809f6550f6b2bfe151470a44ccf415f271fbadd2c73e29c804e3ee9505e58532bfbed389ed5c5d79d43661c68321608dd95
+Entropy.14 = 76c7d4b415950bb0df0f141ecf9b6da20caf71d9dd3b5d8dac9775fcc93392fc
+Nonce.14 = e821f989af5ed41498fa3004f329ea09
+AdditionalInputA.14 = 58cdcf83a8fdb9fe6f90752d2201441ef0e58a53af12f3c71d1ba1ec850a85d2
+EntropyPredictionResistanceA.14 = 5c63208effca271ba5451e47c3246f8bbd9772b72da552068190fe7ca3b63980
+AdditionalInputB.14 = 7a63a39a4db6161824113f32ca5c4588edaefccb08894b2ba52b6659e0965ff1
+EntropyPredictionResistanceB.14 = c20c5ba1aea693d375097d19b3cfc2b06c9c876e980131387374899d4ab48385
+Output.14 = 818ab1aeac3dd58e54ab686b04e3686a37a1202a19979a3620d1aea5e425472af381677a363ae190acfdbb0372c7ea2d5248cf27b18327e13b91507fc28b9d3e804ca0e618d867b3d892173a19c5918326e6fda277d5a3a34bba1425f4a6c9543f66dec79bc909b3d082c6067df73966d1b8f8a16d07005732e0cc00f9b212a8
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 3cc10ddb2c937d4c1acd2d79bb4c64ecee66be277404fc168706c2216eb819b0
+Nonce.0 = 15ea3424a8caffe35f93dcebc51a03c6
+PersonalisationString.0 = 8d883b1989724ca9c10a5db8044289443a6d9bd78bd3ddb85326ed491d7c0eda
+EntropyPredictionResistanceA.0 = 8666e3aecef949ef639b3ebe5771bc389dc2833fab5d8cbff4b9ae6360144dfa
+EntropyPredictionResistanceB.0 = 9ce5c40bfa3efa3f5735f0999343c675922daab5c60f61bf4e349fd84f119aac
+Output.0 = 3d7475e1045ff4279f29d4cfe5d5de72e098564783ac79f6769008dd13cef8a87d325363389557cd37adae75f377d4bd1e3847f97993e460439d298f4e32a656b8c7d8b04ac7d0a890eb8b9f208fc7dedaff0597215ef6459fd0be80e702868287c398a56550e213aea063665d7c632787368540f94c832223123e6b7e4e4957
+Entropy.1 = 87bf475801c9dbfd9e92daba27c8439de1711a4ff2e214b39193f0428f9bec31
+Nonce.1 = 0a3a4c54d8e8208155024adaefb4c0df
+PersonalisationString.1 = 9d0fef0344ef0b7c573853b2e809ba50d29a882506278b258d1a5fbdb2fb97ef
+EntropyPredictionResistanceA.1 = 479857457d365c978db4a0def4e97aba7e58e52ae067fa92a1f74b579c3e867f
+EntropyPredictionResistanceB.1 = a316f95ee0c8d83fda74f57b8af137457eff856161d30444311524871ed892c1
+Output.1 = 22e41950a4c20e46370e44b5919cf78a0264f75324ffafabdab5db332592a6308e5a8cac1a4ddcff6f57bb62a3daf859b31063a82c681f0adc5c9fdf6b8e23ac9c31072504dbf2be7f2647624c0f7d36b7f18cfc1ead044c38e03da7fc3fd020a056a5a3f3b478de90774703131bfd2a689137dbbc89add9beb531f6dacd5460
+Entropy.2 = cf8a846e405eed68585999aa7b807a4d794ed36074c68e30c44d0f45fd848383
+Nonce.2 = 45c9b23b9a222c5df846c8fbdd77eb76
+PersonalisationString.2 = 896425a18e942fcada59b0af40bb2586aaa8bc029816d2fd524c5f26d65caccc
+EntropyPredictionResistanceA.2 = 48dd8fc7c64f35b14970ca482d9ce5caa0b270b7fdc18c020f7db676aeacb0b9
+EntropyPredictionResistanceB.2 = a934b9f1ddf65531e3b505dd002e595c09982d9639564e9ddef55093738e48d8
+Output.2 = 59613efec02c57cf7f51f6cec52f54ec0d9038b26062161ee0a891e7fdc46a35007a5d300dcbdeb8945cc81b85f4bd241c597778881d8ea56a243372d0d08146be4c23f2fe4e33d5637eb7ab08f1519966245e36e2ab18ebb39b5c5e701e19374b37cfba4bbc64f634d79492c1c079a7da6db0a43b227e17cd2b052baaed95b8
+Entropy.3 = d4e8002573d3667452871bcacecce9b4305a76cb4d77cdb1b1581791dc29f683
+Nonce.3 = e46f53ea595eec10ce64773902fa4709
+PersonalisationString.3 = 5377f35b8c4c536c4a7976655ef60f1c04e76018e531465f9165853f0b4798c2
+EntropyPredictionResistanceA.3 = e30a8d5fe10ff3801a2cef8f5a770cc04f4d6762d8e4cb8823c628df2d0735ec
+EntropyPredictionResistanceB.3 = ececbe48a6bc0504ab15e1135cb7bc9bda781895a8510e8c5847c64a3c4894f6
+Output.3 = 343f263063ccdcee41a3eadb2aeecd442c544aacdaed80697b5903261b53e95c3877ea31f27f61d807234e88f4059febdda371480f45e39096caae96a3a3fbb26141026c9acd9de9ff9464057c6ff77eafd4313362bd22d96358317415b6a47a431fd63b1af7ed9c5dd088a8a85a7abd9a841ca91de14b6573cabace3a0b7f61
+Entropy.4 = 7fb81d06175e47ed23c5c91ab56a919dc2bb5842750b66174e024f95b9738c56
+Nonce.4 = 8a2b304a0dd259099f88e1a5957c0346
+PersonalisationString.4 = 43e95cf5175a2404df321959a8a8bdeebd00c6f118b91a7220341d45a653d44e
+EntropyPredictionResistanceA.4 = e8ad1014c82b507395223c3efdbb71a37aa622368433c557c54ea68c52f2ae1b
+EntropyPredictionResistanceB.4 = 7909e88f15b9ea2e8b4f4985169d6cfa224d353e5c2b05493340c6cd7caed667
+Output.4 = bcbd323904e418346d874a9475f98ccea92bf93da9f21c41488bf2a5ef3e63b671c274b6fde6e5d64ee84f86f197131f395b26117bacf972da62c047869fc0786259af58b49960e2eea02ea6da10cde28b244431d07f24bfe8c0c0f05adce9d6d80eb87f5fe8ec3abe6f70b45b01a4e6be6cd1070852e342a928f90827bcff2f
+Entropy.5 = 85c51ae072d6da19095c7c3247b7b9610bb071a335c126c0fe2cc4b42b2705c8
+Nonce.5 = b2ede8b4d364a996a604ae24cb565bd3
+PersonalisationString.5 = 745601b70d0c833da7a13dee5599261f426119f32e1a717762cda4f32c4d01d9
+EntropyPredictionResistanceA.5 = 318fc8425772987e7fcf31a7ae950fecffb485ac959f0c762a6b96d160918f3c
+EntropyPredictionResistanceB.5 = da094e5688c3dd66d6e68781ddd6f3fcde48243210a303190b2184a67759b55c
+Output.5 = b9527652fc883e55f3ec96cd801ab85094e85e984dd1c655f993a5d4f23282fb1e4fcfc75662e18dfe23a752d841eaaf73b86b9bc1ef0327d13db4435d65c3f5c8492872d4b23c83c13cc7d3a960548226a889fcd751c313b0d8bb080d8f48dd466a73b946fd472a4117c8e910295f223544025c27073973f636cce8f7945872
+Entropy.6 = bdb5de1e14766fa663205dd8c3a23f51ff5fd2d94deb1a15d3a3d462ebff8a54
+Nonce.6 = 2cdc1e0fd077ffe61956726dafeb852a
+PersonalisationString.6 = 80fc8ca6efdd9f1e7d45a926df30b2b99eb393e195cf998719f0abf07feb7d7f
+EntropyPredictionResistanceA.6 = 6ca54014ecf856b121336d6a6d1a260831c3a0d41f2e2ce8432b6dc938528e9d
+EntropyPredictionResistanceB.6 = 6c83d33ae1f2818369e92a34d8ee563be4da3b9bcf115d5e567399cd81a369b4
+Output.6 = 01be78a8439fdb2379de2ad1c552577120fd1706e5bee9ebec714d2b88c1405998dff34111889b4f4798ea75b869db35354fa1d8606320176788ed206f367c1f12abf8dd02ef99c91586373d377188a57d06bc5f8eca922d43b170a4dbe74a805ee10db014e59f1ec455097432f417dc002c2eca08dbeaa6058adb7fa6bb8207
+Entropy.7 = dc0706263a6b7e297cb5f6298c11875caae892667a742dfa2ca78b51af09a22c
+Nonce.7 = 4e8bebcbf3a50c8ee3a649586abcbe5d
+PersonalisationString.7 = abefb347e62f0a09ab1c952edd0dbf98520a4a271b781253cf57588c9435c92e
+EntropyPredictionResistanceA.7 = e5695d39eb0b381d31f3f21d1d279196e9e33a190f701d01f574935cba9bb010
+EntropyPredictionResistanceB.7 = ad0523f423862405af6f3a6ae9a0bc85cb0df9be7584e6ab320f735e47b13652
+Output.7 = 8015ce47fd0ee030d53fdc8f8e5efb01e804d1e56c7d8c02120484609be6e246f8b3a7bc5340c7cbae725d8b121c8cce8f1841f8dd1fcdc5eb7a5c20631274620df45545ef79c7720dd24cd964785dfe344ab55448b003831f9b386fbb6c81d943a78f0db088f43ff72383b01b3893df8c6da5d4b3d23e4a1b69ad6cf3a84b39
+Entropy.8 = 57eeb79698a8c75d3fef875e9315047a7360006ca6c633c6570fef3201886723
+Nonce.8 = 307a2033e2e236e50e44ec7c0e8ba35e
+PersonalisationString.8 = 84d262ea93d5575157d9a4d34e01dfca230da61f700cedb1837fc804c8274447
+EntropyPredictionResistanceA.8 = eac15635c5c5c1ae48fedcb83f4e64fe78468e0e0ddeab8e00ca7250421dc207
+EntropyPredictionResistanceB.8 = 27a9f75d5bf2ed91caa5646e1a0517e6c2d2f7a85c86babd69b3548ff14769a3
+Output.8 = 0b56caec6662d05376d4759af544fc7b106cd17b9cd95cb0dc94cbaf30d51ddb713e703912fa5fc884de2b21379cad61c99d9ae110b951a28a7391a3d9755e07b0d71e19925a443a97d512bda69f97132c16c9c2374bef4917f9971b6a2cf4496705039206a7d7459cdadb46642420d0d066e786e1e4579503388b0308c18505
+Entropy.9 = 7d503473f46b98259309bb5fb0b4c3bc631e98fe816849bf803e7253666df858
+Nonce.9 = 36b726495a0a377bf3bac355db02e68b
+PersonalisationString.9 = 9f62e2fd0e790677dfb5f14e951ea916d4c17e3e735b5e43f383c3c2295b56fc
+EntropyPredictionResistanceA.9 = b3dfad410f39089c8a600f0d76125286515ffe05e66d4002b307912452ea3e0d
+EntropyPredictionResistanceB.9 = f276c3df852e92a40027b9f8bc27b0ede0bdb77501be42fafdf2a7822f219576
+Output.9 = 022dff73e5b62a6194bb698eeeb751ab0161e4e68c3c43cd144da14996cd6d296746be5ada342fc874f368db504e8ac21caea01e6d9812813c7890d605ad5160348a82b05f14a06f861cd95cc6d92ca7b1d3e424142b1eedc121b1d44915c99ac1f0a672d01ac1691e56cb7f83aa507114226edff23e6f5f95794263d7237476
+Entropy.10 = 73a894c8b565059198e3589d1a17bf9a24911c0392afaea1603e61c94704d94a
+Nonce.10 = 81a17162c14467b87689750bac12aa15
+PersonalisationString.10 = 9f1358c29c7c197d108589f2f325c9b656e18c0825393815e15e5d506533ffa6
+EntropyPredictionResistanceA.10 = 024fee6fa03f1ce9e38a93078b812e0bbfe2688d92ec7761c09cc332882c36db
+EntropyPredictionResistanceB.10 = e58e81a0f9622c60f7676402c00813252caa4b6b10d46dfe3664432bfab154d8
+Output.10 = 07ae772d470b2f0726e8f73087a66dba9d38952b2990cba0d517c09b392eaed604e4a67f589cac38dd6ff9f80478a61301a8e6fedf094d8e20b8770b8290bb3838a56320f5fbed83d969f744f92229c5e5fce48be6465e95b621664e6770180d420202105fc682fc41a29cb4a83987581b37c2fdd65584cd61e32fa5c44aaf2c
+Entropy.11 = 6fe9744545baa06ba8199ae3088f9048d4ee33fc3edc060155cfa2f360aa2b9f
+Nonce.11 = 3a8555185f6705a647a7d3ba9fca179b
+PersonalisationString.11 = 89f146709346692e90b2b0d1cb4eb5adc78ead56161fe26c0f7c4267b815be91
+EntropyPredictionResistanceA.11 = 6d0b5e807c2a8eaff45e57e8535705793fc0e7a9e6079338b567ff1007458527
+EntropyPredictionResistanceB.11 = 237e9169974a94e20840720bbb9004482eaef53780bb13277d0dd38d77fb8889
+Output.11 = a0a2cb4751c510d50af70c472317e6a2ddda8648a4813f40217aed11809ff1a6bfd452eaec76b2118468c523ac3f27b044de927f139098615fac549a04583db49e7a20933c5fb40d09bffecb4c56ba9491973784fa65ddc7a75bb8a8690b699e0b06a69fdd381754711059212bf04e3148f1e7d3eeb4c8b1e19c3f6cfe8b4c0f
+Entropy.12 = 2aa569ebf88e861ad45cdfdb72eb5ee16c7e02f161bb1d19eb62a9ba9b6a6553
+Nonce.12 = bf50fa222d569a67e3ff852a00b73a4d
+PersonalisationString.12 = f00b0ea201bfb330add5221e908f298bd2a74709de664fb6db2218f2a52b7f87
+EntropyPredictionResistanceA.12 = 98f01750e32d8d8aafb53a8bdefb28cb8c552fe0f9c9a011d9f8a45ffe8d76b6
+EntropyPredictionResistanceB.12 = 1fed7fdf7593bb4043a56da250275f841a16ca4baf4332f1d64fa3042b8ecafc
+Output.12 = 241b51dff5e2561878d3f64d1b44057c49fa4de1d91b3a79ae7745f507b816256eb4428bb05b7e73cebce950db977462b00fa44cc45bc6a36f712e4e20c628dd056df569b3fbe31ee096c69bddf8282350c576e426298cb6c1904dbe0762f7b6e79fbfc8e0a6eedef2603ab9688c7574ca9caeb834ea9c12932fd7b7aa82c9f5
+Entropy.13 = 42944f9f75e815aef85d71ae73e58b07a542fd35b9f933df3331ad3cfe6ad2f1
+Nonce.13 = b43b91f5ef0da7d85e9af68efb7107cc
+PersonalisationString.13 = 39b3c0bc20fdeb7503f109f5c26634b049adf97cecb6464390cfed7cd820d38d
+EntropyPredictionResistanceA.13 = 9cfdb1de9dc4b7a85d20b645f7b9c5bc5fdafe87742affd5c77c43164c9be118
+EntropyPredictionResistanceB.13 = b74edf67f909b3e6f5c91993a154d9102073b3fc1e5fce74734c4d2e6d4c5e98
+Output.13 = 9653c4297bdfa6e654817aa47e26b5867a25917ad9d398b0e8e3063d57ed038fbb5226f7ed1d044639a7a7a5dc0d38ae3a39b272213a68fcf1651cf1aa21ad4b29238de086fdb13e2bb5bbde720784b1c605a4a3ea64c798b979706f757da50f9baea9138f5a7dc97d55a4c55af44738112c5bce2104cd6f9e7f78af9245cfa1
+Entropy.14 = fe3125feaa6ea116f9e6c1a047465fc30bf8d8637a7aa60ae596ea8e0752e3fd
+Nonce.14 = d6b7bc5a73a0c76c435c2e9522d9f9fe
+PersonalisationString.14 = 68358620781d2293874d9a29df4dd9b73ef919f5aa05413de87eb48224497ba2
+EntropyPredictionResistanceA.14 = a21a3a1e4a6e4ff4c646ee1b19ae20f956cd174001cac1485dfe66c03be917b6
+EntropyPredictionResistanceB.14 = 5f673e1dba2a9c526ebf62d4383da60fd194bee81d405dd719f0cdfd0624a79d
+Output.14 = 718c2bd08da84f897864d2c2a91cab5e6b66251ce71886969271b3b88885cce8f01e2e0bbddb0f5826c68445c8d56964c7f2b641b7f8498dbc293875a422b65bb7aec20b154064b336ebb06dc861fa7e69d683dba33d8a6f71c2b2c76e030db66fcacead182c0f316395c3dd4586a38d56157d8b4138f3039acfaa599df1a096
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 1b9375777a03adbb7fe60a2f3a5aeb41e7297d5d1f6d384bfe826f0375ab1fc3
+Nonce.0 = 44ae3d66a65c8c9ff927e06768f53287
+PersonalisationString.0 = b2429a36cb2cdb6f0b2f331859eac7e9fc2eea4261f6caccfd74e72b875f2464
+AdditionalInputA.0 = 28d011978b56e937594120afe6a8c1ddc28489c32a2bf99c1036111c33851cd9
+EntropyPredictionResistanceA.0 = e8898a7c1e79ea36a942a9b81bbe2799ee403aba4a813e03311b70dbb99f86ee
+AdditionalInputB.0 = 86f269148bb96d7e074c86a739f6bc79903b8117fb5b9010e86ac6d8aac29bbf
+EntropyPredictionResistanceB.0 = e366eab19612a73dc20f96bf0c96092b254b84d4a24785093d5a1da10973249a
+Output.0 = d5582ccaa9e460ff28aeb514d89f48009b45f56b670be3bd04f0bdf1f2239f9c56a2879ecc162b5c2b2ebeed1eca20908f228a7e75edf72230a890e514505295423fa7bb75c550ebfcf024e259a233520738931872d434590054941ff0b51e9dfc04b8172f54da213b75612bd84cd166cc5d7277ca79fff686117f7bcf40718b
+Entropy.1 = e52d186b56914ff82489b5f7b8745b99ad6a2ec9afaae87eb6f9e46c78c4257b
+Nonce.1 = 2f3e3c4edd85d11a8ac815abd9fb70fd
+PersonalisationString.1 = db2cb0851904ab2de4c13274beff2573417a5dcedb51605b6e06ae9421c990e1
+AdditionalInputA.1 = c1592730a0526f631d4223cc99b2cde45d8cc65bcf0e6216f3b1bfe1e5c89ebe
+EntropyPredictionResistanceA.1 = f2fe68a3f126b2d1468707dc0b2f9d032a4a5169750476a5ecce79de68afa8a9
+AdditionalInputB.1 = 0435ce797f280cf43ebdcec41ee97c2d704c4c3fa80ef33a4f68783d6f3be47a
+EntropyPredictionResistanceB.1 = 97d326c3ed127066953db5e92b0e44f3817d47b151b5209a4ad9975b21e6ab8d
+Output.1 = ab06ed68a6d14c03a056f89057b5ef2caa1623a5d5d4df193e31f663180c0eb19ddefcc899ccf2580e1f55647cc697bfc278bc97a4387e8e6ecf434b5b5ebf14197baff4be9408c3b0d524810f19b6844e7af031be2ecadf02a341db163d3d694d4a1f7802e3783a9dced6654f0b41a8305e48b7346bc263ea814011057c495e
+Entropy.2 = 7bd51cbd4c2848c2381258932bea4b7590e34f13573e855781a7ad6774bdbfce
+Nonce.2 = 521477c54d529ec624e9edb12a31e203
+PersonalisationString.2 = 71d916e87531bbbb3a39b166d125da16b2b719613234780a61732b0ef8b17ada
+AdditionalInputA.2 = b554ef86e07d401f8920681037264bcef493d580ba418173f12e01458cd365dd
+EntropyPredictionResistanceA.2 = 232f5f316cdb36958c308d2aaf684442809d2154f0f65650f3867479c9de8df2
+AdditionalInputB.2 = 511789d03be531f7c03fa9a314ee3d93259d9f3ea927e0f798b15514bf04b5a0
+EntropyPredictionResistanceB.2 = ac5f1c7485e8d6ca1885fe9bc41659dc5067ef4e7bf2d8ed3b834fdac7819f10
+Output.2 = 246af03291a70394528b40b65bab1d04fe755bd7a5e925e7611305821947de933c055ff712ab5f237586e6b0ffc1fa976494e82f6e5764c818391fee649d1fb839bc50d867b7e6e25bf9c7ebf0ad54f2d135433e66054f3c2ea2a8b1dfecdb76795900056108f131ff6a4f4786028a2f9d3311dd723211a6bc7c0e912410ba01
+Entropy.3 = 6dad32c9840c425eb814cba24d1c140f21fbe26f333726e4d6135ddbdfc22e36
+Nonce.3 = f32b2e22a5e24370bc4697c7a62b79cd
+PersonalisationString.3 = f97cbf9a6d2938c5aae1959ae27bfa5c66de17b66120ce2ce3f541fc0008a0b4
+AdditionalInputA.3 = ebcce3d9a47bb341b614f033bd06e9e667b06c660b038578f3fd174235da8f69
+EntropyPredictionResistanceA.3 = e1875b27b3ae6bfd4ac24cbeb02bf61bfd85f3bce700a5d102f09004b881cdf3
+AdditionalInputB.3 = 2b4f05692d820f12329dee1c9460effb0e3faeef159d4d2830ec2f9cff297219
+EntropyPredictionResistanceB.3 = e19d479d23062b23cf7eaee8bed20efda200338033e53600d8a270a05a77ca4d
+Output.3 = ac05dbc91f9869c61f37ea09b1d49b90da6147a8c503d0593152fb10b6f5571bb836f2900d472685fb9c2a143f9330b1988f8b3d941c67e968690fd12a948e6a09cd2f9eb9616de985cb0b0bd2f4f7a62a5fa96750ef6e1a5607f0d8fcbd828d62b93fae050f6a7ae77d989a90e1526b02facec67d0e5fd12fb782a7f742d696
+Entropy.4 = 5cc1c3c0321deb72c719cf6ab58d8698e399c6c1b5f7ed627fbf4c98401ee3bb
+Nonce.4 = bd6d15f846c52198a2b0e0c1e13869af
+PersonalisationString.4 = da4069b408eb69f688747abfa79808a85c14ae478048bae9ae821373fd53c002
+AdditionalInputA.4 = cbbcd99c6e17f2a73b66e82e892b82eb33a31018d59d7145e0bb6696288aca9e
+EntropyPredictionResistanceA.4 = 4d156dff53a56d81bf23ea521a73330cf6c7c725e6bba8d1ab31a27d0a71444f
+AdditionalInputB.4 = b71bac919a28fa68376bf57e1eef9f71720a45730fc3ee6a9ea823f48ca6e3b3
+EntropyPredictionResistanceB.4 = b2873162529250ef59161e7fc49360dfa8b0886ef77294f7d4931c66b41ea8e0
+Output.4 = 909b6307eca672d10242a2b1804d09f80b87295139389695aa13f9e250a58d7073d7c3058e838a6e4e45ea4db16ba7151150f88267e9628d96137db4e059617dcfb1ef5e8b4b4efef5a9dc6b1780ddb04513a1cb50e468afab15bf6a9cb6ad9057f439f5ad6decb0436ea132986e5d0aa9841dab50ad4f4317c065ea1a16c4b9
+Entropy.5 = f2dc36859712f8a495342aedb649c93ca19fbd94a759c15344a410f78abb1e12
+Nonce.5 = 0fca43687eff1d7dffed41da76c87add
+PersonalisationString.5 = f12f92e2377f5f6d9c576a94efc3ed91b1543257fc52de0fcc57f5b426b2b494
+AdditionalInputA.5 = 039715b0a129f67f49eb4df55192d594cadd6f8f0f7b256603c4ffa1a68c83b4
+EntropyPredictionResistanceA.5 = 244b8ebfdfaf451e1a15cc27e4a2167b3531f40ec4bd39e6a2118e8e4226a004
+AdditionalInputB.5 = 90f6da9eba91cc14b0389dbb1391e9c6a7cd64bb9926ffad35c82281aa54773b
+EntropyPredictionResistanceB.5 = 638912e2469e519bc6c6540b3d86ad8a8f25aea7272ddea962d21c86cfa625ee
+Output.5 = e7048e49d2e1a7c219d4c9c98fa20a72aeb1b073d97d6bbd6ed55c115730f67a77e31c7712570e39a1afee06da5c530431fd2039d8c0820dd6757ba2070890b280c6f72c83639f79bf53f4be66f609ec0c480bdc6a23ff9a67bb1c905ceeede84055029b1dceec78582aaf149f5c739b0735cdd026eb11257992d4736fdaa961
+Entropy.6 = 2e1ca477f50fd10f20f278bf463d6fd014fec8930fe10b951c3585a464ea686a
+Nonce.6 = f4e357e0cc4e387c645163fc34650491
+PersonalisationString.6 = ab9c99ea0201d463289bc6743852683458440aa128d861ff10d69723be58f13f
+AdditionalInputA.6 = d1b0fb71398d0b58daa8e2b77c48fcfb92bfba0ff2a0145a6ac88efd5faa4d5e
+EntropyPredictionResistanceA.6 = 67f0bee28661ae8d8d11b6954f8863119c070cba98e54bd033ffa3e30bd62252
+AdditionalInputB.6 = 782140fbd0239a49f128a4ab9b707733697ae51af5fb3a1f01cfe4d13e161633
+EntropyPredictionResistanceB.6 = 6bb09aeb7fb6884357e3a6f85234ca90a02fdac3d403aed422eb2ec594943a69
+Output.6 = 49c08e8fb5e18f3c3a81616dad13bd08cece789aeb47c48d9390aaa1c3f833911540b1a29c2ffe847468b7e1f446f16e4d2e0c3c8032ea452735e2342a5c4493f04303fe13d62bc05ceba09331a3bb560ac39b6ca3bcfa45b48d935f3cfd115bd44bb14c2e9d3e3cb7ca69bb86a858d189d12084e688dbaa2d5d0037031d53d7
+Entropy.7 = 289f055bebbadd26d7e73a73207985daa68a0a7f35487086da1e72a9ec105282
+Nonce.7 = bc9c1c4a192ed57dca87ae1c48b3e42d
+PersonalisationString.7 = c8118546c7774feeb9da9e07147d5be42ca0996517bbd011ce1bc93dfd57402d
+AdditionalInputA.7 = 83c09c782c006144a5413c351b3aa1ecb342e74c1ddac79ca6e0ab68244b3176
+EntropyPredictionResistanceA.7 = 199e7c046be3cc2cecf1e7df1fa9c0771ed34b01c5e6435032638562999709ac
+AdditionalInputB.7 = 2661894f5f77921b9db3f2440e16c4e37de8e57bf4714a837cd5885bee870f1c
+EntropyPredictionResistanceB.7 = 20f94b01d7641dbc50726610ee48c8902d2d03342b775e1bcea6cee1d93f01c7
+Output.7 = c0c6a1160b400c591f6abe50e7504686039cda1906b85f8181ccf226c14778ed5eb4dbb747f0b2ac045191da0329c3bfd6b3efe9d23771068c60a53998a5ad1f9237a142a7ac6e72b19f5ee8b6a0a321dfcedeac6872efc25a9a4bead7b01f8bb84efbe38120d1c08da21fb7d37d7463a7df690ef4639be7c74dea0561eadff9
+Entropy.8 = 9fa751e546b6464a07443a12acdb65a277655cd7c7691c9b27450470dbf3cd9d
+Nonce.8 = 748875a61cc8191115df9fc0dec49af0
+PersonalisationString.8 = 63a3c94d16e5ba3e01448efc16d32ad912970526e740161507ff5a9f7f2c7312
+AdditionalInputA.8 = 1cdfec1034d7b972ca1dd54dd73abfad256ac3aeb6ea8b9b102b1d3e8dd3708c
+EntropyPredictionResistanceA.8 = a5672749cef1332f1f6fd907ef00f4df49e4d64bba285837bffeec252fb2b8e9
+AdditionalInputB.8 = 90e61e873bf6800575421807e441e6077c1cea6478f9cb77b7b48f0c899b50f0
+EntropyPredictionResistanceB.8 = 3ed3ab9f1be4280ce6cf4e80425042a922340f090b5df6434e0ab87b69808486
+Output.8 = ace7d24820017b141fc1abe9b3098e1369000ff02a4d6f98070ee87c0ed3b864f3050f406ef61e8fd6865ff4a2a1f5039f6809e39435ff92c7fc7baf7d17ffd7088f0d915938e1a9b35f2a89e2c3ab7ec12cce640b35b913abca56fa140999c27930479a40c2277a8880959316bdb94712164e7de92838aa12be476dc41de901
+Entropy.9 = aa39452cee3aa89a182dc276721e9cf02ba6c6c867882d2a6e91ace0f2664e56
+Nonce.9 = 8c029b9ba6254413706b21befc02eb87
+PersonalisationString.9 = 7c4f6ad6a9b0e2d770dfd21cf31528eeb789ba805ac6df8843a5de7131f36760
+AdditionalInputA.9 = 810b4e891422891305712b3260dea2c02a79ce3c53ea73307b73a1f8b4f730cf
+EntropyPredictionResistanceA.9 = 83d14504add082dce6bbf1ef04fc22545ef74b6ccaf53628a11947efa3c567a7
+AdditionalInputB.9 = 872636a5b4df2398281361a366afbd837a10acc0f57596f948426c6964fba036
+EntropyPredictionResistanceB.9 = 46a7b498e5512758a60acc04e3221103fbd94817591e6c951abc42d8b79e902e
+Output.9 = 2b79c0867ec5b810a9d4046c2ee4a93881565965f15831d7a2e5004c534ecefcdbc623a68381e0ae56c1e7767af8d12cd745d356b5563a16555e7560555059cd3bacf549e0fbeef3926a79153da71556b7faf4a9d7ce5e8bda3ecf842642d608ce626180e2f34c2c5c3aa7c3b6ccaba7e8ca581718434681e9a5b861e0a1943a
+Entropy.10 = b5afcdf78361c0153eaeaed42aa633f57ccdec7933199c2d5592dc52f608897c
+Nonce.10 = dd0d869abcd8cde45249f9798845dfc1
+PersonalisationString.10 = 1d95aaaa857b970bb7e1c9398604d41aaced5ee153436b28d1cf9fd3e21744c3
+AdditionalInputA.10 = 2f91b147c56bb858ce55e2b3117f51be61a6806a32437b27006d231a99e41013
+EntropyPredictionResistanceA.10 = bc80847c4c36a985c12e46d4cc98d9d290639380ef1672e83327b98aa261e7cc
+AdditionalInputB.10 = ff4adcce637f8e7e0b4a65915db8cad7d04d4885c509c17cbd868330060b5355
+EntropyPredictionResistanceB.10 = c600b761013044b1594f758023e607fddb5650ae278bc342f494122a486a2ec8
+Output.10 = 8c42351b5fa0b6223d0be5ff389b126bd86797b758ed24bcec9cc6f7adeda3a3e3a7a85f77e28de0ee80ffd32775d979f69dee3e78884f5b312ce30796fafb58a3d248e1e26e9b8274c1063b2c0b54c1332906a6ab40cda196750456450ef7d00be07d31e47a71156fc4ba59fbf7c0ceef10142afb75bdcccb61d31a7b6ecaba
+Entropy.11 = 4f1b84f4f70b6408bdc3e6d570dbd360700a5fefbc5103b6df433fce2fa2ecee
+Nonce.11 = 5c58688116c6402efb414fe79f8176f1
+PersonalisationString.11 = 9ba7d31f135f18536b6ff40806f8f64f92d3e5698e0a4ed0179623f41a78a2f0
+AdditionalInputA.11 = eb372803ec47c938e18250b21f7f3a1b742668f9fd0e67c98e46e5ba7e83ce99
+EntropyPredictionResistanceA.11 = 9217e9e4dd13449ff5ec77a45581989895f5e64063b34648f749dc12050e0eb5
+AdditionalInputB.11 = d2ddaa15ff116b7f1ab41fdf24e96184b2c84d748d8011305883b90c3653e1c7
+EntropyPredictionResistanceB.11 = 3f0fa53386a3b395e8ec1820585d618f0099561531966e8fbb58f5c9467c29b9
+Output.11 = 9fcf5986e74d6cc35dec198215e4ee6c13d4864aa003e119f4cfefd6e157eb3e2ae6a0926f7176227e58e2ff118b71ee68a49e4498e2521e8c4eb12f8ac24d19e77228c7e0697f67e243dfdeda04a92295e8a3ca470c466b433c672b876ac03d99b6382929d18b9f4af32ca92e684549f45cb57086f8e5fb32dbc3cf7215942f
+Entropy.12 = 8c79e763d369c2c18ceb8a33db74ee58fd64c0360a5b250b31e642c312d5cc6d
+Nonce.12 = 26ee7131574b5890366b9a6d76b5848a
+PersonalisationString.12 = a09eafb303d474700db17d4cc8a67ba5c8198dd79f2f2c05d002a0d6839e89d1
+AdditionalInputA.12 = b33bfa5113a33e6d3dbf442013978db8876aabd0c972a0f5fb87fe2eeef01fcc
+EntropyPredictionResistanceA.12 = f7e87b557d22b0a7b69dd9302dee2fde57ad7e09a4a469c173b6a4b8241a56fd
+AdditionalInputB.12 = b39aa047be39eb44e6eab327bbfe30c0c1147ff6227f8da360601d0602c437e4
+EntropyPredictionResistanceB.12 = e682b00429f1244197335a019c31c2bdae3e6da00f437a504b68e18fdb4d48f5
+Output.12 = a796872aa74c1f0b59e25592f69cbdaaae5dccf09df728f674473814ebc711648ff86fbf5dbf1fe68cb551ed6f6e00736578c98d8cdb27c49f68d79c2a24062cc917b662374ef3cd67e2b26d30e5a7d88454ef5b0b489a6b31130e21cf162600e2ab68a72220528551e665c8003ac6e8141e323aeea40bc1ac8bdb96b0e32510
+Entropy.13 = e820ead0beb3b353f20c6624d48a605bb6ed6edd3bda0a3c5477c4bc40f9aa84
+Nonce.13 = bdf237c8248921d58e5d8e391b8758a5
+PersonalisationString.13 = e01d87c5ce4062f3848f1138739bdbd84d62fe00f98d0f248f0e6ddb151e0394
+AdditionalInputA.13 = 2d58d46235c390a2e6ef5593b41872ebd473d2420bfc9e7dbfc52038c2987253
+EntropyPredictionResistanceA.13 = be63483296b5669e1f0d25ae7e97f9c4ac2060404b0fd50d6e9bfadd02d4bced
+AdditionalInputB.13 = 57687e1c52aeb0b7b34beb39544d681815ad2f341a6420871a0a9c334a8ad409
+EntropyPredictionResistanceB.13 = e038bb7c83af9a693438aec29186e8643e5aee231d85ce00a9421b35f34168f3
+Output.13 = db704cf79f08603d37187ad4e094550c0b29e29dc5e68f1b82a35e233dd1fc75cb850d3315c2446b1bcf6171f24d38415059940eb2758fbbced088876fefde62e757d8caae1cb695fc809d776b59dd67ba0ded5a03521407c5d4426ac64a8186a0d6f2fb6d786dea78957b2fb1b9dcb704e47029855df541063a6b0df093a352
+Entropy.14 = 6fa88ff19c5637b3f31d3a9402308e433f85af7ee611fbba9fc00e3dc817a6d8
+Nonce.14 = 8261ad4e3873d626af7911afc8ed1d4b
+PersonalisationString.14 = db7080dbffa60c22b9868064eef0d912b0ad54d447e08a49abc755478f943524
+AdditionalInputA.14 = 98ca0635a6aa616c8058adb6bce2259190b46d0638c66f5d2ffb5930be9e165d
+EntropyPredictionResistanceA.14 = 9f7677bea78b878a70a4b8eb0523aa77b879c753b4ab2e26297f4b33b1f0e613
+AdditionalInputB.14 = 4a5a23362f631c0b155fb802990f855d684a1d3f54073c7bef2515ee3c4d197e
+EntropyPredictionResistanceB.14 = 73189d6afce0d5724c50cbe257a1494c7e78dd5b3d7509c5509d795d6abea851
+Output.14 = 8c64782c4b34cb5e2ac304ad773adc7a76ff2fe1f43202b01e28aed52ff96b651765d642d5313146f322f3cb067cc274918babc2b35255f048ee74b4c87a4e1c465e3e1098b1053747343123ae5ecb652520d0fb20db17379388249a2d92cabcea7140162f2d9cc17daf718eaaeb8e8a69197689ab206f68fc468982c8f89e73
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = e2c615e6ac36b93c485165e70281dd14f063a7518f2f8cc1e6fb6fb31c324068
+Nonce.0 = 5812820b8056c50cf661b63b1dc8f07d
+EntropyPredictionResistanceA.0 = a4bf2596e7010d839bc3ecd29c8993036c9b470161598b147a0b4fb41cc51f81
+EntropyPredictionResistanceB.0 = d94a3064a59ff260442f2db01ddf20447e21c6fdb677e342050148fb356eb2db
+Output.0 = 89f4614439e8378877e830300902486dcd734eb6959927b01b9b52878203fb6c1f1b7bf41568dd1fac7a77c2a70afb5008805c558bf0348bcbd9d1f15acc4ed57c96d5da476b392006bffe606e3dc0420ba8ac95f0e5d7fd57c663662970dd9237da4e56cb5df6959b85020d2298ea658e8107f4a828f07ebe74f73007e58231
+Entropy.1 = ebbff7605a17fb3a504f2646cc59ab9539fb98ff155dd992c0f1c12b73001aa1
+Nonce.1 = e937095899df31312795caceab649e45
+EntropyPredictionResistanceA.1 = 262b33887a8f5703f8e2d2adafb1a29bda9ebc1b29c222df2f8c22e40f7b6520
+EntropyPredictionResistanceB.1 = dd6bcff65e30ccd123cba08c236d31e206e4a402853a413a628680a55d30f75f
+Output.1 = e576f7f2351b4ea69049f175c4f9f8c1ceff3aee0f445342f78bc7c3e72b09e811236e7d25d5b67d45636dcddfdb13a9d62fab944485a467d0089b3de992b3375f9f86b06a75723644e6d639b87c17a5d3d17084d07ed76b304090b77902fab528a279b69ba07551dd77b79e4fff575442f79d6a5fb149f36844b3b473adb6f7
+Entropy.2 = 4d724fa30e24c4e00fa4fd4a50ff5bdda6ece786dbe476b266000c9bc31fa35f
+Nonce.2 = aa15b3e3da3efa110ace2386bbef2559
+EntropyPredictionResistanceA.2 = d51d9cdf7b78fd79fc2be050f509a2337c72a5d92ba7ae89c2307ff2ba372d62
+EntropyPredictionResistanceB.2 = c9b89fc65106355fcfdedce8b90ab645d764079846baacbca3efdae4c07adf62
+Output.2 = 384e62781b5fa4d668a3b298c080419d0a4b2c84e8569cc70fc69f65d844b410125b8c05da0b3007f93c137afcec6e191bdc5162a94c388262a06b5bc9506457b8adf9ba639af30d8c6cef96950b8a1995c125680039e1b22865736f57a49082f0c8c938e88f6e7c97a15ab9701b5f1ccd5a8257856f2fa3db992115ec78e40a
+Entropy.3 = cb1313f6174c1bb2cd25cf1bf8359f96a474e68afd84896754bc6ceea2cc04d4
+Nonce.3 = 1a2a6915ff0f88c1d83f12d43e00127c
+EntropyPredictionResistanceA.3 = 884de8b363fb4146c2c7ba1e743b91d75fa5041afdda8b8d9c0c01fc7c1a834b
+EntropyPredictionResistanceB.3 = 797f9fc9381bdc61f100f384b12a850a0c41bd684e151cce81213486d24cd4a3
+Output.3 = d1ffa00f809e57833f9b4ccc88c38c4aec6b97b7a2dbbedd4e19b1fe3060cb7a4d15cd27d813fd9eec38ad8dd4ed08d10bbde8be38c477c5cd0daaedc6b7e86af104af575ece1ee5919e0cb98d915300e61c9a60d392bb9df2588a30fd2a8024b60d2cd71a1dea9829ebda6460f4a102ac42b9020c7e9448d8f34cb05fd63746
+Entropy.4 = 05cda94600fbf2d953cf63b334f8058465fde583eb8253031d459190d27015e6
+Nonce.4 = a083ee69258ee68b0d662570c3cba067
+EntropyPredictionResistanceA.4 = 7a7454d45ebd595c85d2f9541df6e0166bd57b10048a1c7c5a314885b1771195
+EntropyPredictionResistanceB.4 = f1d99cd613abed27e086ff7501d253e8b4ee943978707eaf41bce938e77ed58a
+Output.4 = 76ea5b85dccc662ad9e628cf2edfdd432de15b8e0078957ffd7cd380fc02058eb61cd7913a13551d4932791fc088dda4857cd9b57df473e434b8cdf59fc48675d15817386863b76e8c87132d87a8ae02f80b4d70b579400761e49b747c6d89381e276e944ef0493d4f6abcbfd8dd5aa77ad3c075388f4896912d31743ec9c866
+Entropy.5 = 2a8572e6e03bd46539c97490044a35005c4ee428d91b0c1d2e3bbb1b21dd1546
+Nonce.5 = e05a0418143c78370f345bc12b2f6f99
+EntropyPredictionResistanceA.5 = 00f2ceeb8dcfa22bd51edd46f5db0910c5c53177eb130e6c24cce910e64514b8
+EntropyPredictionResistanceB.5 = 4fdcc3a82cbeb7d7a78ec47644e068a39b4eb6a868344c298d30e45c7c607921
+Output.5 = e6d347bda9cab09bf01550bd46b690c52864162d408091594d5c5db419f69bb4e9ea2d4619c832d391b5bf196a3246396311e46725b8b6118bb7806ded99097c1ef0ff87ed2186751e7e02f7389a8871823f754d657ad7b93ead4fc273aeaea17ef94a4717a8e650811ba003b9c3337efe3e84a969d16892f814b57d67a59c21
+Entropy.6 = 8d1d65f4c39df0b8a06ac504aeb4ab3e91566cc25e9e9d13a797a6169d3166ff
+Nonce.6 = bc693d8cbb217d963dccb5b42f61842a
+EntropyPredictionResistanceA.6 = d6f2768779dc17e66f11d64fd654ccfd7c875a6d0ad8cd5b5312281be44ca0ae
+EntropyPredictionResistanceB.6 = dbdd1584354f745423b136524a570994edb81eee4a989b8b54bb267717ecb925
+Output.6 = 15a7824810ef09ed5d1b1b2b1d5b9165df040bc057827bd2b023d1791689c384293a1008f6e92d404ff5a9e26b6bd5ef0bcd5005f5cb8f26f1b5f4e057927c9548cff18ab19121521e2e237273a6fbed84fa846e2a94488eb411ed7c3be73575f3c5085a547ac92672076fd6b0573b9108675e5b3a5a8a6953eff8602adc7ebb
+Entropy.7 = e8a1627177600ee93f8940af3971437b53f6fef1bcdbfa4a4c17728161a3af2c
+Nonce.7 = 1f58da492c7437d4d4351cb1e8fcfe8d
+EntropyPredictionResistanceA.7 = 2d414b0516af1e14b3412a48bd6158c1fb5287e784c34ca3aff3887ee931f568
+EntropyPredictionResistanceB.7 = e7d3142f5cf8d09911b80968036c1ebe253fd8da49fe4b2de357da3671be90c8
+Output.7 = 327841dff5ed358098fc427c7d152c26641e541fa1c5fb868f7558cc65cea6c9b74a0f537ee9582a6a4f6d0773aedabccb6838d1966f97e61c6731b1b062efc0e91b1264c607e2a79a5e65eef448ad1f3bc058d91a003f43a41e0bb75f57f0c677008a52464fd87a3ebb44b89cc2d5ec50242a5f2fd28ec000091b91e46ca6d2
+Entropy.8 = f25e2e874dba9df93c5f1c9a1da266bea197d9064ee88de2d133649df9fbb100
+Nonce.8 = f79ed153ebe07441ad59522e8ab96679
+EntropyPredictionResistanceA.8 = a5a6c6a9caab4f5f9e6fc19e63e6970a920f167453024d49ae8376f5ef3d8f50
+EntropyPredictionResistanceB.8 = 79f13a822aae74f55a2c268946b5905b3f2bd99a2396f8b8829c9c9f6ddaab35
+Output.8 = 40a190c76c346b07fa30382a0573629d3658627ec82d35bb03156b30f66338476149c6c0001f2d0fbefe0200881e8147e0b91b98ef841dfc4904ae6e158ecd5aee80a071f72b7b901d7dc2a117ca59b64059170f5b3ec43aa9e9e6164deecd12de2de00f174a58e57f95cea6a622129f55b14a08cb7720289ea38091212508e0
+Entropy.9 = 38162f05babb2a6f8bfeecd11c6005b8f19184569d8eadeb6a0b3121a59fcb55
+Nonce.9 = 0defbc3848360e1e515e35ec534e9d16
+EntropyPredictionResistanceA.9 = 476175c79e2ee24c6be23404962a9487d95732819fe0deae0b14d54240c69e3b
+EntropyPredictionResistanceB.9 = a9cb9969a65300ae6722d58c54cb41e9be68d9756c160c6d2ff0159134a0a960
+Output.9 = a0032a8a1752fed4ec8f9604158b4e80c83ae0358eff0ce4d61af3416125d0cef972855d85b801e34b2536959bfbccafcdb458a06925aa48f0c337c20a14aaf5c79ada5a067c920cd39e1951284a76ceabdaf2bd33bbc0cfcd9228e67187164f92a604304a48df4a8c7e60291f98029aeebb54aae83826b9a7c9ecba51c456bc
+Entropy.10 = aef795aef8dc9421dbddb0e807b906e8b6d8827fb99a4ec011bed2a295d42a4a
+Nonce.10 = b2b128da27d318b989df45441fd20201
+EntropyPredictionResistanceA.10 = 352f982db91ca87a7680bc0bacaf14953b4284b25a39703f96a99a8c6dd45822
+EntropyPredictionResistanceB.10 = 45d687df26dd425b97cd77c77c5a9de286c88a613947dfdddc1580bad6d5541d
+Output.10 = f18cdd0933468513e4d6c5b7c39e9c69bb1488ec10811cae848915237b9cc120b3180463f1e6831054f360e9725837dc78ee6f422043b9cfbef1e51899bded276cec0842690c3ef91a3bb7007fcf413682be08d96245e0604a98771fe4c6503d204e2c5c9ca9f62a3f55fd39425760c86d216a80659e06f03b9a1b5798785b80
+Entropy.11 = f791c00da9c2e96d9a6c48a11b4c9415fd4f01619f1ef94a19eb83952077048f
+Nonce.11 = 159ed2a1c2d9c4e62343924ef42763c8
+EntropyPredictionResistanceA.11 = b72e41c3356395fb9a862e459ed8bb88d8d0c85f50bab315da1ce3d673c125e9
+EntropyPredictionResistanceB.11 = 1cbc687cb0c2273da08c6e8c03b9f101d6b6fabbeab2ad314a09fa9200181702
+Output.11 = e50254ba4b041f408370019c68d87d94bdbbf1913a62d0bbd0947ff867326075e7af1b8acaeea6da9a919d6039c6381c2ed2b292ab6bba4bf42091582c8b3d60db64c82c54e5be0311f71ccce5a776a6641cb8bf1051ecc745a22de20bf7e8c4d50942151998abe0e003b038ce6599cce51d16cdf68dc1dd23565e79ba3a034f
+Entropy.12 = a425f31dfd92117392f4f4942f25ed55aac62ceb64e05606436d1bfaf59de325
+Nonce.12 = 40845d2fdd23a82f22d3eecbe9da5831
+EntropyPredictionResistanceA.12 = 907240e4b6625e5ebe657fd21590f1afddd1197130fbf8ee7dad28c07c2111d4
+EntropyPredictionResistanceB.12 = 5c539c90c900046097eacd1f65520df697eb52ef9bf69ad4f595ac126c200a5a
+Output.12 = 05b214ad2f7b746bcd7d7e6192aee1cba0a5c8341787c4f49f6a09a49de5bcb40cdad2c39330fddde74240f2d79eee7fb90d5ce0e94c13c49fd00bf1477733a9a011784d58c8a87319c745242235ab57f1a410fd418593e0f7fb753491588edaa9572618da6e5d192f56211f915e9755171a11b66057aeee85662bd05ad80997
+Entropy.13 = 4429abe8b7b58e5713287506538eb4a07247eeff5f2ec9af780fd57c3d43454f
+Nonce.13 = a2074b444a1acb38490aab3aaec2df4c
+EntropyPredictionResistanceA.13 = ebe0837334ed92bb68abdfa1612455d4fb2b50c63b08afc9017a3fa84ef0c7ba
+EntropyPredictionResistanceB.13 = 46a63cc3a558dfc82785b5c3b6c53cff1093dcd5f900839c6ae23bc956fa0e76
+Output.13 = a1f1e54cda784237cb3fb30894752cd168d8ebbcbd1cd4feb4982e2b7bcbdee15eb941bae2e91fdf13273c289fd3b14b7b79ce2b3d47ec4952b97429027ee6d42026697d5f4f6643a5200aaa5beb844217d87748d08cd981cf1a0e77cf00fc7fee6218d7e45483369dff4a7004465279144aa1d1d8cae326861581dfbc1d1b46
+Entropy.14 = 29f218657af1ce140e4c69e50433ffd81e2b07afee85454cd4f04a31fbdb60ff
+Nonce.14 = 2a08752009b661e1fc44db29c4dd9595
+EntropyPredictionResistanceA.14 = e0975b46c5421742148647c5ea8ca534bf23b9cad38fdbe5ebf3d68cc6428e10
+EntropyPredictionResistanceB.14 = 92632b542fbe20c00c8071037c15a2434cc23b3b6ba800dc9e419e105c1a4c4c
+Output.14 = b457c370a8bd4451f4185f7c925b90365ecdf0cf1a4e809967ca9218fc7350447c32d25bb3ac36d8d0de69e2f8d6e7f0276cde6d9a615d5644654be11ccae2a556d331310494ecdb961468ed6283dfd9342be478f0e3d5bbcfcbfbfab86625a3fab5c43296bfe1fd9218ec5cac2da563adef29084fb7906a7284da44872a957a
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = d3539f4168580e97ce2aca31060ed646290c71659bdbcfc89585841d58280197
+Nonce.0 = f822b4d6d8bcd0934f03e8907c83838f
+AdditionalInputA.0 = fb26f7f4302ca466264a6b1396d9916c01517a84edc4d08c8ab19d24a19a6338
+EntropyPredictionResistanceA.0 = 2b4ffeba6159d91ae95fc30d931dafe94e099c32ef68d31b3a724f07b6b222b8
+AdditionalInputB.0 = 980a277c6155621fbc6b1ec41b061729d8a00ce938643c56927b15dcd207fb1f
+EntropyPredictionResistanceB.0 = 78c30931b5980467b494f9c8369f5cecb40ca08f9c215ff0d5b8671229b25478
+Output.0 = 4ce3948a67f3f58c4ee00913b36e849b0057c73dcef6da9ef064b81449eb641556e7aa859921bdc9aea8ddb6273262ce2821245920480c41f093bb83e7f19e3c5f2cbe3bca76f9bc7c6cd4e84b7782a61ce4d6cd18a96fb536673e7323b9dbc7c86d4e5441cc4d1b6ecdc577e3347052456b2e51bd81468d61dbfb52c566442b
+Entropy.1 = f1114d337e496a9e8e1cd2a60ef5d6e8af0fb70c755d5f522226e770aaec7aca
+Nonce.1 = aa2c4decacc7c7c540e6a5ce15de6c80
+AdditionalInputA.1 = c0b16e44b140930cec5fc1f5b2255238e8d72a9a8bd583a06724f5a91503db1d
+EntropyPredictionResistanceA.1 = 5c625d47aadcca20c5d4ef1b66f62728872f91d51581e12540d920b794967f06
+AdditionalInputB.1 = 2fdecfc0e54fb2e47392fd99ec2a32cfee20b3ab4db84be53597a287458bcc4b
+EntropyPredictionResistanceB.1 = 01853eb6742924148bb7eed3abb7d3cc2577f1c415032d08548a08d4848960b9
+Output.1 = 560fbae51bc8a4614ab353eaaaa2f652e2acbe7626cf47d7706023a8b7b121bbc326908bba4bfa8cd0001bfc936187b3757c996be093a703c8266b78be6052b94a5fc7a0b04e6c1b64e2fc101b403eee7c996c7cf42da1b7ca040233f625ed75e6adc24512efb11ce6264b7c3a189ba73a00855211e84244ff6fb3dc7546889b
+Entropy.2 = 5c189772d2f34c98e52f4af3345452e0cb231b0cdc63cbb611e4c525f93dc8b9
+Nonce.2 = 7f1cc09fca2ab6ef949fc663f41b409d
+AdditionalInputA.2 = 52355f838659fc60189b14f1e46ccfba610d379cfb76fb3521ba75dd6e590245
+EntropyPredictionResistanceA.2 = 66dbcf9405a7c7cbc4e84deeafde5a54247c30643bf55af262fbe53a6c9b49d6
+AdditionalInputB.2 = 32ff3edd8332b3cf85121c432ccf59a1d46ba3be8dbb1d102c6da567031aaf06
+EntropyPredictionResistanceB.2 = 86e44498853299ffaa099ee956f7a0ea337e5cf5118b3847270c219989720a2b
+Output.2 = a95d58a2b7f6f28102027ffaf4bc2fc09abc1a95a1a74eb17d6e2a9a2f3145824d7ab43e4f0797f235cd82b04ec625e70919c2f9233b6a0bdeda4085b9c95e99b1f132374bd510642b616ab9a83306fca63afd63e25574750bfe8790dca55aa898f4b52ed1cd026a15714a6c0e58ddd92550c22dddba2a1eeed0a5cb4806f1e5
+Entropy.3 = b901f41c96c19903b520553e3ce73cced067151506d179fbce7b1dafe96bfa35
+Nonce.3 = 9d689153603f297591a0bc270e94077d
+AdditionalInputA.3 = 9db23dbecde5b37039ec8b868245f1615f0ab9d7a551dd799207bea6317fc0f9
+EntropyPredictionResistanceA.3 = 754f62c4c96484a8939404f717e880f7fafd9ebfdf8b6429921c7111c046cd23
+AdditionalInputB.3 = 2396091a4147ece9a3db60be4e98f7a29750a40ca5e2b97d71833aa3acb8b4ba
+EntropyPredictionResistanceB.3 = 5174c495775c1e576208f1b0c5ecc900922592532f09ae7fe5c906736d683382
+Output.3 = 69d72fead31a6931a99f9015df5879cc2c2525063ff75cb43f4a39f137722f6cd5ab9f53119293f0af4eae9c201703a40841558d6c0f8260167f7c3b18ca5658457e2fec2406351c08d3b2d2bfbe7eed2f3069a7bebb2d4534702a78e14a6628b4e2ecca2a60712edde52139878739bce5838c1834502296de03e255cec082cf
+Entropy.4 = f3520f01161966dcb0c3ea47f33a5737867236fd4413bfc54469f03e13646caa
+Nonce.4 = 1b1248136cdc3a8eb619e4293417b3e6
+AdditionalInputA.4 = 4eca90acca1905b52c943c21fc68a4aea463d9b7da5f772bb99d0a30cbe9f057
+EntropyPredictionResistanceA.4 = 540c4fedfc0093027834d0812863930b0ef3ba795be80701d6bb619a4cc80de8
+AdditionalInputB.4 = da469ebda157b282869b149d2ce316f820584786a7485d36f24ede1207d8bfb6
+EntropyPredictionResistanceB.4 = 9daece5a44261bf6f09d40ebc63ee615744cda56b14f2ebaf70e3af8fe48a976
+Output.4 = 9e8447278164de9dc29a22606e57e11f539a20593fe514b88710d0eb3912da2c635ee0814c923e74b2a1b190a878324929d6fae6533c08934039a8eb3f8f9cc72f4b725bf8a810864edaa763eae2dbb4e970d0907023fe2ed50892412cdbf273aaa18912668e4f60286c857ba94e9e7599b229fc156a7a0253a6369a0bbca5b9
+Entropy.5 = b4cfcba9b5daf57a10eae9a996b93935455a5a94be111d0f6e471a04ee6fe521
+Nonce.5 = f464d212ff1d50a7756f1115f7b3a095
+AdditionalInputA.5 = fa9fc41bcf6c7a91d497449be3a908083276bc81c003a9e9bb6e663d0ad9cc4d
+EntropyPredictionResistanceA.5 = f9baa7dd5345dd65fb8e16236ac9458fccbf9c4f836903d9e3033526c5c752bb
+AdditionalInputB.5 = 4d04662410c03a54583c380f952eba9cf5c6ad69ffb94f461fd7155b06c5f53e
+EntropyPredictionResistanceB.5 = 43ca4a4dae3120ee2c820b547923a68b9b09bfc90e2c3f37c9326e3115b86651
+Output.5 = 339df33ed5a93700c1b66fcd426b9424f7eed93c1a19be3e2c98d4c2334440075193b122825d034bca0e9001abbb309bef495e7fdc9c3e364ae6decbe555abc866cc47ee488119c117163526ce02b1206a6c20c26433c62e78e778281c09a04c5dbc77d4d18b28fc4ec0a662890cec3ced9cbba0e64b3554650e39d0e7cd1906
+Entropy.6 = cfee3a3a1b593c97f455079947943f6b19e26ee4d97aa86edbd8e16449aeef2c
+Nonce.6 = bd2a6ef7e94de888bc81969d24297f87
+AdditionalInputA.6 = 591b6b0aa32e0337420ac6fd654f3cd35be14b491faffd34ee1101112a5afd15
+EntropyPredictionResistanceA.6 = d243f098d674cda3bd0ec263a5b3c3c3f2cf39cf99d75807414dbf3cc93fe046
+AdditionalInputB.6 = cf1564d106a98a496e4c268841c34f761274ee6cc9268eba8a4f25e6219f366e
+EntropyPredictionResistanceB.6 = 7750d43e9a323a9ef2db4f373143c757ab2c970916e7e890fe689227999bd859
+Output.6 = 46ff1cff5a22eb2cd2229e1594ad1a9137a36235dce49b14126334b1a00c893c13bad2e0990099fabfbf02c039f13d23a5dcf841d843a8a2e7d82dad65d3d02d07e33b5837dd1fb4b325b487a51eb11ae6e45b176b9c22425041e012cd47980c5b8ba3e0d2bb3cbdd6fc79aecb47f11123b5306be882f7a10522d65d528cca47
+Entropy.7 = 06d91c83eee11f399f8bc6de1d0b8761e24edc9337d6e31c4fbdcc443fae6c5d
+Nonce.7 = 93d20881264ede62388e64e385edb29a
+AdditionalInputA.7 = ed86b7147fe9d70b8384c4342367ac8adab865a49b56f43fdf17865e6e8e5781
+EntropyPredictionResistanceA.7 = 118dea86b96bb4e84cda3513d64a974de8ab9372ce0b8bb0b14e52175c802d19
+AdditionalInputB.7 = 97d68f0874eed82c8da6188467100d6204b3d27bb44920a4c0080af42c2f2e5f
+EntropyPredictionResistanceB.7 = 63be7ebe5b5443904714266d9f56106967c6ea85accc16a5c2d2745752d94494
+Output.7 = 8f44a8aae325f4fb8235a6430ce583c0fe6db30a1fbdb58157370b0bfa13864c5a4be6cc0e35bf06d1c3c056d8e4696463f92b6c527766183cfb862b208d2219ed09432b9bd4258854ef32e97b5bf0f9d5bb879488437cad4a965bcd16d917011224a21e57d1f96703c80ae75ce7a7664640babb164106b18fead5240446c3de
+Entropy.8 = 5845d11ddc5d5d87b5e5b1bc1d1aab633ff390ba0adf46f5ae483f994887f241
+Nonce.8 = 07b1f7c1bbe2582e4c58836b0ee94815
+AdditionalInputA.8 = 8b1efe4916265cdc8fff0f66392103ebd052f8566560e29ec8cb18581b21bdfc
+EntropyPredictionResistanceA.8 = b13390edb9aa4127d1f4fbd77edf8d66029c4ed0815f1ee7b600693f3dc20345
+AdditionalInputB.8 = 6231e6268935adc0cc1499b26caad2125e720573d28250981a55c4fa2119ad2f
+EntropyPredictionResistanceB.8 = e96d84aef936b5a936e55152a3160dc1c44db91b8ece26c4d4075c069fa442b8
+Output.8 = 31158c243e04423d5c0132282b5ecdbf89794fbd6028a1c2d11a958eec97c7c9fa66c93283824c7eba1d6fa8fd93b6caefc7b34bf37566f4f7c9c93066a1d11bd69c69345ceffffc64c634cdc0bae556d4a49b072d3a32dc214242b56066078ca03bf5240909943222ea3fe047652f6e710022ff392069877f62c2b5b6adae64
+Entropy.9 = 15ba4de5ee039bc62afe9f180e1a339b7d00adefa59c68cd9b50f156f032497e
+Nonce.9 = 3262b48089220a15c699f0d8ede0f767
+AdditionalInputA.9 = d3e83ef785ee57e3fe5e575068f63350e129ca8820d34c2c56dd1b0363b1ee5f
+EntropyPredictionResistanceA.9 = 5e77fe0832c7f74bbd240c68079cf558e4ef1c48dd2b09467cd799bc5868b2ed
+AdditionalInputB.9 = 6abd6938fc90716e06566192038462183223bcebb07b3835af6975a8c3421b31
+EntropyPredictionResistanceB.9 = b605307c13339d8701eaa22bbd2037a83e853b6e75c212207b30cfdfa1fde916
+Output.9 = 564abd425f2b2609a2fcd95f0230d8adf12b7df499e26feb0ab44bbf653112b18a55af45fac8d3238a1bba5ab1708d64c42792d9b16d6f20eb86ab95b9e988997eebe8ea9b33f252c2e68f172b8de7337ad95118f383f791688177412fe06bc84aeb542451bf6485d2a36b11ddec239e8afb5346499b8a2ce2679abadac9a0df
+Entropy.10 = 4b5bc6abf4db3707085efcc57556d505e11e0fef7fb216ac273236b1dd5eeec4
+Nonce.10 = 253b96c716de18bfe9032cd06592bd89
+AdditionalInputA.10 = 3238946c6f04b474533c11082ba435a6869f197c7a0223ec13612c8066a5a1f7
+EntropyPredictionResistanceA.10 = 59457f669a3a397fd141f9a5d85ce91e7a38ba46a2310e0c127f65a77d5417ff
+AdditionalInputB.10 = 125291209dcfa1059d7162f46fffe6b5510bdd58d56efeabc04bc787bd687d13
+EntropyPredictionResistanceB.10 = 062040cdfd232e73a0aa6d7911b65c8ae22f6af1b6a14325c18a56e923631d5e
+Output.10 = 392be49ddd545c1ec2470d5637836018f40536c681b1c35d907a7e9d62ec97a9e834da0426c5c65c95507c2cb00b1e2cd29a728debdad357c6bc96c82984e0ee23c57e9f6e61bc3fd2f54f4cfbac8a70fbab7b87b9fff4342cf8e9167f78c8bed293b8f787813b41bfc953a95fe4522561b819849f8bb4f8a367f50e3987c2e4
+Entropy.11 = 80d0ecf3097b2383f4f1ef4cf53419b4806a308cd253e4eb6374b433413b8643
+Nonce.11 = 2d5fa7c5cd8a6089ccebec729ad11730
+AdditionalInputA.11 = fef06bbd376640c957d36d75804bbfa9cb242c686e5f897a3dbd4e30646dcfb2
+EntropyPredictionResistanceA.11 = 1e88d718d614a272afd4835709aaa765e8e2d824841ad24f79e946d1d762be22
+AdditionalInputB.11 = ea18be194e7cbabf4b3e6e8d9ae61f9be429b11695c3be6e0487500d48711d7f
+EntropyPredictionResistanceB.11 = bf508651a978eb0dcdef4f83350c0165854fe7a70fe6ae41b71edad5938eb55f
+Output.11 = 5b5a69c540433b6c787dd8510b6bf7970574fa962c6d66d33abdc2b78bcf508e67671b612c1d2bd2036523403e50ea938a71d188a7bb40ae247d4eedf8621f7606e0a6ce097e65102f115de475dc6b8269c6d74e0772f3702807b04cfaa6da40039a9022aa3278f399f0e09a0dd6c240f965c88f72f7ad6b77ba68e2f6a53bc8
+Entropy.12 = 6b1c113841ea97856270bd5bd06860e306a5e2ada13caf1aaf633f21f771a748
+Nonce.12 = 4ea751d228e02e1c491741c440cb8518
+AdditionalInputA.12 = 0fad5b39ee9af58a9bc35693c219f3c48de17b9099786850cc6eb491d25d8b51
+EntropyPredictionResistanceA.12 = ccfa4c35a89f7380c3f8a545a0edee5d86a1cfd6053b3d25aba2f4dd07dee07a
+AdditionalInputB.12 = 49b4fbeec03deebbaf93dff33acfa71fa6bfded5f7d1688f9d1113bc753700fc
+EntropyPredictionResistanceB.12 = bb65940e7411a6d85b2e5511f1d219d572717faaaba7f43a27247f608654e8f3
+Output.12 = dc22d2227d327604efbe134e5aacdf951d6364e53bffadfd57006f2c5f868ae75acfec0307d2e67be751bd26ed13daf6f00c7e196e01700b2fb99ad34c88f62a5ca8bf2e36e3a21809241e346ec9cf4cc0ef78e8be3dd255a8e3b405f126db4ceeacbb3a4b158538c3ad40d065c7c8450d4d34ab14585b508cfa6b3666e5cb97
+Entropy.13 = 6dc325c9e50a5e2026a19068160c270ad41140eb6731d42bd04c62fe5e557560
+Nonce.13 = 0be8dabb61f48ee94a806682f37006db
+AdditionalInputA.13 = 2ed7ebc982a3b6b3dc25da014fb39034d37d76a49b1e1003c33bcacf73524ade
+EntropyPredictionResistanceA.13 = 08bed3fe295d05a9d34956f63d3dbdc856b54b5f66b322bbb9996a63f1c6a7b0
+AdditionalInputB.13 = d053d4c424d08083871b5480ea7127ffc9780f7192aca55df4c2f2ee064b382a
+EntropyPredictionResistanceB.13 = 4c34bfb20738416852e7e3f83ffd900dc530e21c104ef659eba0ad2ea565d938
+Output.13 = 3293d03fe0eb9cd28a70fe6f0f413fb18611f52a90455ff6dff417c5eeacd7f6df365d73c8a667bdfd362faeae93d9b11c93deef300f669053b9db2a9670a0b76365b4f147901165a6f23c3086c3b00ca1cb5a325883b710439c73bc8853f8ae635026072be39b209a35b243e3eea0fb01455e60bc6d1f92c702b68877b90e63
+Entropy.14 = 9ffe19fc20fcd202de96e5497313451ae2e9292abea01b03fc38a4deee221aae
+Nonce.14 = bfa51698eb57fa08052dce7109c12d07
+AdditionalInputA.14 = 1f434e7991bdec0206042e94e1a474ff8c6e2e69a286fc2209faefae8f86879f
+EntropyPredictionResistanceA.14 = 7b921823f1bfb1e782c86034f72569bfe675870e3d847c7ca7472e7b2a74b6d0
+AdditionalInputB.14 = 0eb21b9dd429b7ccf6183587400ff57ccb84e13513a553c83bd18695eb040945
+EntropyPredictionResistanceB.14 = e65beb2bb257e5b9770af1404e58743540ce7d6338089906464de3350c481f59
+Output.14 = 30ad11bfc18d3fa9c7ca2adf01bca76f8f2513c2aab3e830b1ec8892cd6544ad9e25f2c8369a034a25962634fe86e833aa32baa24ea608c91818994601be78ab1fa772cd80b6eb3006c4c2d4b0b1268f7d8759b7e0193e15a69f7e13def2e4af35536d92c1b8dfe3b7ac72104543a8e99585bad53728899fc5cd4ffa509b4b79
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 2f3c1e38408b59632ab72e3f4d2c8900d4c74bed299a10175bd324205df402e6
+Nonce.0 = 68cb34ec281b2a14035c271f5a9ae68a
+PersonalisationString.0 = 16ff4f2f2107869840fccb1c8e73d0dd99f8a120e1c5f9ba868b065b0803a779
+EntropyPredictionResistanceA.0 = a7c72f5379390928450c6bd6a0a9e2c5171e0c88ea3fe9ff8d57811666df9904
+EntropyPredictionResistanceB.0 = fc623e47b394187a40f6e86b47dcc95574888dcc6bde3c5c3f41ba0fdb11a485
+Output.0 = 8aa47372378adc2b7c630a9ea20319e1dc3c0ff3dc1fc2a6b940668a5d497b729f2b4f160a5d0290e2f709f9ea938fecd162d198e8025c10b5afe5ec0ac3ed467415e600aeb5456c1008c22881b61084e3206af43a77a0a4f6cd37abf2cd99b000b9cd0095a6ea9b7116f281a8b3f2266ce90d8a0251c6edaffb6ff2c87d63d6
+Entropy.1 = 6564550806e0e237bf723a0f3465ccb37296713bcfe650ea77e30d0d4db68079
+Nonce.1 = 863432caf85638690be5820de7efffc4
+PersonalisationString.1 = 09034d56cea66f609ca90482a5b52a39e8f48218dc674a2ff8c9bceb25f8a4fe
+EntropyPredictionResistanceA.1 = 58b8ed0ae7151e2160e187391bcea3e16ff81c9ce36a2ecea6c043f5098611b0
+EntropyPredictionResistanceB.1 = 3b40d51a49e90caa099a0298b85f87d66e04218a15a2470a069564c7c35837ca
+Output.1 = b6fd34f015133883876c64f5635f0147fee9f6064546d5ba5b29d5a95b061bf4466e80c4fb98c5b6bf00aaf59e0bdecc529f79f97ab92318716e68603864ad7ede181668ae12f52170f09113e8cae99726f3c8c8156a23c4fb2eafad57643dcdd012b1eb98e1f5f46428242c6a6d55b178345a9bbf615776f3b085106067b538
+Entropy.2 = b1b41e1f398a59f529a97ce0e99c1d9f351b5c8e11f4f9602d8a50c7cbd2f179
+Nonce.2 = 2c26e88e2d23aa8dfd7903a66beb4e59
+PersonalisationString.2 = 9ced1ab58aac8d1a2e95bdaae2d2b29f0875845fd9a6d97d5b757e8457e3d123
+EntropyPredictionResistanceA.2 = 38d41e1540a822a3b68a510253a12485fcde56e20784b0998d2f34063cb25feb
+EntropyPredictionResistanceB.2 = 43c7edd78776d728fcc8be689eda8b6185768e90751ccb123e143edfacce72a1
+Output.2 = ed0821dbf8f4e2ca0e955048074e349a6237cc402f7e6ec1ef766e12dd8c8ce41e74c29ce60cd63b2fcb23d718c7cb6f8d9dc532ae2c8663dffc13f668dce4eb4d217c9ec00c493163b9a0510df01a478e5f1d8146cca0cb72be8e9adc2c6c6e354c03bdb067f28e8fc60ced551f0dd395345f307fef6c345ac49e1aa843f376
+Entropy.3 = 32846ad76ff551ff647ffa20faee1f2fd2a4d4ea4322dac6d8f27e011c6895b6
+Nonce.3 = 4d4715a91444de44c5f8fe124d841795
+PersonalisationString.3 = 19930a879eaf14644d3daedd6d8ea5cd03068ec59d4793ca3a3e2fa3c4c808bd
+EntropyPredictionResistanceA.3 = c7d75931efd4f1d8ec8813e3fe348823c7f2774aaebef6a270037f1630ba49a8
+EntropyPredictionResistanceB.3 = 8a92a81ffdb688d6e73314f2e4fe8a60adef0beea6aa5af7fc141e2007ea447e
+Output.3 = 928aa0479f8aa7d3a650e113c73336d9e757d9159e4b0cdb1bdc2decf170473b0380d9a3e45fea9c699720cc56139ce5a8602dcbd7fdd72277552b47ebf81224a3d204ff2efce19e83f50871d0cce30a3e14b699392123529d834ba6fb106080b74f003f4ea21d5fffb7ac33a0dafd2765947e896d7be88bd53a9c4cd3700e63
+Entropy.4 = a0e3f0568e6f727ae0d93cdc46ecc4ffd18925bf0834dfb912af3ffb1b1e8d87
+Nonce.4 = 768dd72302b20e38936fd2c4fbbaec7c
+PersonalisationString.4 = 37e6f2460a405963935c515bb4351965f3ce50f7ed8536c5edd333c5a9e18744
+EntropyPredictionResistanceA.4 = bc61967bcdf9de0e61aaacb4c3943a62b09aad05382af6c0d241c80ad1fca248
+EntropyPredictionResistanceB.4 = 9534ad97c015bb67c9e54be00e5958556f26992b5f50f11931d0df9299edf444
+Output.4 = 8ff499ddc89076c5625cf4d268d947a63e3cfc2ad1e5689b0ac9ddb877f4c3dbc1a80facf31284986f386fe18b33f2538596899c8fbca78f408a07aeec85ca5a8a1e25d23bf7b12ebf2db34402dd1b9c9f9a7e85db3dbf20be159a4c47c1d6fda74fa6efe384e039ca0e13d2da0f662ef3270e8d0a4ea6e7e3574b883d94fe8a
+Entropy.5 = d5e713cf2730f63929fc478fb2b1049fe971e309bcf26505650be6b79cd54910
+Nonce.5 = 35d079987e6e591dd203f75b9e9a6f8f
+PersonalisationString.5 = 057c6eb7f5e33dc5e551424236e303be6d9db17d54a904abd21088f916dcbb74
+EntropyPredictionResistanceA.5 = c1b23c069390dd69f826f762d98ddbd700eb20de119443485e9dc53650f75946
+EntropyPredictionResistanceB.5 = 8c49597767a36291385cf5a244862344b3587629fca605e3652b80c5da06cacd
+Output.5 = 14e9aa57be10fced4af8411b91322c08e8545a7de3901d75925fa8591320bd64f4e4639b46710d431026c152cc19fe2b9fcfd4bfe208c55db8a67e33d93a44ac7115878f2cfff9160a1df378893ae512af965d751c1765dd4363703402407c566bf1ea513cc87723e92451f0629fdefc5ccec3834ac4f427cb4eacb22ddccaf1
+Entropy.6 = b59575f33fd4bf41cc926ebc35dc1cab99a276c17d59df94f45e85b0e94965fc
+Nonce.6 = b1fd1be5d18f9cce0db0fdf95e0fb29c
+PersonalisationString.6 = 027a5d6d9104d0c2690297e0457dc9a6e7611858a6d9a7f598fc040162db7be1
+EntropyPredictionResistanceA.6 = 30e8c1a27af2b397e4728a3ffea4f8c685c11fe349bae9a645ac3d152ea403ca
+EntropyPredictionResistanceB.6 = 0ff130a4d42455e38df0c9bee122aef87d0e8ff1c9f01afee2a27cada1dd5271
+Output.6 = 63f1c56a958934c56d13c1ec531a8c62f67a135414fc63b482af6483969bacecb01523ed8fe3232cd7689a9c91f4b9d79853ed25d2766b45e67dcaeb8ec0182e45f9c8f43e02e9c6a4dadfbc9980b85e4ff0b4bd2ecc1301cefa75fee95f4e8aa88cd2048abe61688b67af1c4c0497b4cc98517f5e6d5ce972813507ec2f4180
+Entropy.7 = 01ea4285f2cfcd1111ccace99b97fc07344252a9ee26d82c42d5a8898e6d0ecb
+Nonce.7 = 00083e3a4a6f2ab941176b9289fd708a
+PersonalisationString.7 = 11d4a6bab912edea69fd8988941afaa3c1dde9d4b1265a9c7d82e6c9493d6413
+EntropyPredictionResistanceA.7 = 9f88c89c9f9a02c99216cac4df35f5f6ea753654390f2e8edbcf87b7b9e179f4
+EntropyPredictionResistanceB.7 = e0cc85a9e97d0ae3eaa8006eece88e94a50bb30a0bbc7ed866acf19cec876ac3
+Output.7 = 935cdb9046416dbf0811984fdd8c7e5b497c64b9c4b22c443e0c4538b6ab53ccdf3e4ffbfaec752c5bf997101dd32442ba2b21adc605a838cfce8afa3f6ee5e2fc983fd8d98187711f271429990662ca9f16c5f2dbf034c64e7ea770c032130b6a7bea2fe9b2d108cd0849f6cbab322b0475955c4663f6cb9f5b009dab203baf
+Entropy.8 = 287d0351d794f36d75081b0870704a2545e8e368c7d6d52a5e584b12c9e13e9a
+Nonce.8 = bd8e18ca6eef161c6f39b7e0f9cfa234
+PersonalisationString.8 = f1af5bbc9ef1ead4b5b29a94c9d8a9137dbbd97fd64301d5cff217053f8dd34d
+EntropyPredictionResistanceA.8 = dab97685444a07241c105e43b6475ed198d75e7cb1759784d949d0c6dc0a5904
+EntropyPredictionResistanceB.8 = 1df4e24dc2b18d3a5676fe135cc25f9b7e5ea952d9c2e235a791bb4a4da771c1
+Output.8 = 034d8e4c8ca9e1636512790f0e3bd502dc1ab5f072ce5ecdc33f65aec17fa0629a4b5c663e86b9e5f40142afedb7020e95681e059f6668ab98e0fd96bad454f81d3405b3f237034b281a17340c956895551116790fbde00fa8dac22efd612ac87826684445427032d54f0dec2f806fb7012fc8d13645f9a97d6a66bc50228bc9
+Entropy.9 = d6547f6e9e232e4cda2e88af7ee0cbec2f59408014f16e71170d8a2547c59dbf
+Nonce.9 = eb8266faa3d0b57bc31d594990088e2f
+PersonalisationString.9 = 0906e88a67b07a3615b3154ef4dd81817dd718876601985a1afb1bf931a2d824
+EntropyPredictionResistanceA.9 = e254da0580639e1720c829b7d79b8a3ab6c0f3ca54384121b7a2313e7eb3464f
+EntropyPredictionResistanceB.9 = 3b502a95e01b6ba13f0bdae58fa52589225a7d95b18928cecd5096cb99bd36d8
+Output.9 = f8378aa4f64ede719b4949ae1c54d016ac95370c8088c697fdcd1ffd008fb3f50fbcf801925423b569947b61374006e018f34aebc16b7693cf60bdfde650f5d859d3ee2073f1cd7910a00230eae664929198bbfc5fe5a7573a946ee16c8a6354234497bd5f35c286c32c8cb1ed60b23324f0bffd08a683b5a08bc4cd9b153bd0
+Entropy.10 = a5317f96b34a8a82167c9e0affc3d7c8e3354055b78faa3993a5cde11ebbc578
+Nonce.10 = 51000228141750cef0bd605b60210276
+PersonalisationString.10 = e690f9203b7d37d44250effe73feec397fd738d3198058f4474678dec47ef2a0
+EntropyPredictionResistanceA.10 = af7a096641f0575861ea555e11134d36e30ce918bcdf013df933a21190f98a0b
+EntropyPredictionResistanceB.10 = 77d5d1875bc298128800bdae2b3ae3df5ba09015ec7ee25eff5afe3a7f39c89e
+Output.10 = 96d3dab5051732d30dc11c95180d58b3c75b594239a5db6e62e73937a5ae3cab17d4c241b3443e59417ee3473e5c094635dbd937ecd11ae06c37a9827ca7ad81631592369a75e447d2e9dec1451321d2e0c91ec6288f5cafa936f77897865748aa392078269e63cc0549ace9e1525a3127e45c88a1faf3cd4b896529b8281aae
+Entropy.11 = 3712e376b7cc30b39a80e2f77637fe58413f98d0d2b8937e80d1916eb49af373
+Nonce.11 = b4ae6ff240a981cf971d1f19e03398dc
+PersonalisationString.11 = 6ac59c40b8e9b63804f6a14923fb8dad1e8945d25475cad0b9716bbef720802a
+EntropyPredictionResistanceA.11 = 31f87d0cb4e607518b51cd8e8d8210a06381337d2b34d88c3c718452cc9fe72f
+EntropyPredictionResistanceB.11 = b889d146f87cc81a808e952b6603442a752aec6ed225a150c2adae4c3677224a
+Output.11 = 556e373aedf2154115671b27c79675fbd45060875dfe0c4b542a2c2e7a63b498f3cabaaa684065207c4cd600590d5ff10d961bac1b59d4071a79c8cdcfa5ffec0077c85bab1372b5872b92a71dbd6fcbaf9c40c5479cc755377a75336be3f1e3d06a43cc1fed055955b3dbe65f08d948e2a75066ad24efd43c3eea8430c7651d
+Entropy.12 = d8c805810f37c28936644f2b474da0fcc6f8040987fd42744410fbca5c5e53b8
+Nonce.12 = 998d61589ca68161a0d634f4336da893
+PersonalisationString.12 = c27fc6ae2a16b950ba367fdc0a94db7e828e89ecdb78a253178042f6918f0f83
+EntropyPredictionResistanceA.12 = 5129ffcb75b2c2268f6bd252d79de9fbabb1658f6df4090f7ba2986b2fe4e35a
+EntropyPredictionResistanceB.12 = 6bc9987163d22d0d4143823982ef25e53274f24aba21ea7a97625124b999f0ef
+Output.12 = 283eb1369d1bfa74262df48288cccd92dbf9d8066cfc86fd694b9ceff923a9a20f64aa7cc78eceb933b0ecfb04de1e6734dca731759e6d74804ae13054ff4bcc462663f6f8e81ace404c354b152812b47106f6ee0a3169128a80f21f2795c6a33819b4269910bc63b8c957bd345579395595af32e5ba25cd164f0ef8ea6e2977
+Entropy.13 = 17ec4c32f4bff52901cdf66741fde213768baa27b2455c35f9e1f3843e4de4b7
+Nonce.13 = d8b96c1c86ab34a4b8ce791c9f73260e
+PersonalisationString.13 = 0f5a93fd7baf0833bcd665f6cec3b5eee01832ead533ac6a4c7d88f84de80e87
+EntropyPredictionResistanceA.13 = 29a68bed12ffe68e42ae28a3af5144cc7f45a42e56396fba4ab48e9e2ec7f843
+EntropyPredictionResistanceB.13 = 9ea7ffcab5a904cee39c24b6d11af56f4b2ff4dc07b09cbe917dde4d13481eb4
+Output.13 = 310b6c6e025de919c5881ca5dd78269f1cf633c89f78958c6271d266b64a2afed5c6b07f79ba7fcffaf8dab7146695771bff1ea532138eb7b641fe8def547a74e97e542129895ff7b7a3d14f7a3d7ab83e66c8e975e6cbd35d2e686c342b1a19b937d17166a0603bfb7ca68940846853bbe9af2cc27eb23e911a1d886d1374f5
+Entropy.14 = 7f74d237cfb37c370352ef6a7c9a2bb9cacbbc370dd984a4e3b0037c9d236389
+Nonce.14 = d9881627eec277d8526d3b9f77d9bd20
+PersonalisationString.14 = 26d510df1293ae5ae648a8396185a7fa8baaae80a51f4a0c15ae1ad86d011149
+EntropyPredictionResistanceA.14 = ca849cd2397ed598a1f4a5fe1ac34d9bd72ba79cf44b8979fe7e0b1524ca84bc
+EntropyPredictionResistanceB.14 = bf75a707fe7d86993dfa00386ce07f94898f484a9f936d47e4923bd6bd8e2121
+Output.14 = 63fd0934c1c510ed19955471552a645ebc7ffcb90ec904994fcbe89ad938ca0b6ac3c0bf958d453af8ef7b4cdfa1bf20a5e79a68d1801a91dbe63ca254d8088d7d508971d203fd9dd4fb4fdcd9e8f1f25e899912dee3f59ee1815efe0959c7e4ae06453ae9031a8cc94ae38d7d634fc46233ed8d11ea8e20e326841d3cb40680
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 60bdd4485e7edb63121b218f5df879a9d64ba24150710947730482ac791d21e3
+Nonce.0 = bee01a4a18910cb503dfdc06dd8ce622
+PersonalisationString.0 = 55a08357b2af40c8e1adfe3637531ac53469a158899571627cf06120883fe4b4
+AdditionalInputA.0 = 917a6c8f1794ff43f9709fcffabaf1b9100cf3f617e912b1efef13871f27b2f2
+EntropyPredictionResistanceA.0 = 2fba071c41498bafd0a0c188df307e474296589afcda1bd2e43aa9cde21ce6c4
+AdditionalInputB.0 = 75a3d5482c6faa7ba6f22379350e231eb860b909dc518586ed96dde8395dd026
+EntropyPredictionResistanceB.0 = a13157f1e0004426d5117a82127306d0b0ce1c33eceaffb039bcac81e357b2cd
+Output.0 = b64668e908d670b319ff7dc3a82064b886926c56b340f375491ab8a7858a3c4663911fbb724216ed05acd8fbe8ab51524e7580890b4bc56b6e5fc882742e4dc7ea8241abd45e04cd20347be5849c30d8709f074e0c5c24f59b356122fb4ddae470f58302d7c922c65fa40e95b27553e9cf4e09f24b51f5643134dd5b4dfceabb
+Entropy.1 = 5f76e39c9d385e229a2b3b45042e48aa9718714282df46e5737d7a5fbb136cb6
+Nonce.1 = 10aeab9afef3acd8ee1591b1ce7b8515
+PersonalisationString.1 = 0ef4df739a5bb7de6fc5d8276f89edc7ab766a2349a5385bcd655e1c6edf49ee
+AdditionalInputA.1 = 1d92c5ada54b616439d2a25f6eeed66b463398a14fd54cba49b76c867698631a
+EntropyPredictionResistanceA.1 = 26fcbd9e78dcf1ee5940502d5d206761f7fdf4d4be02dea5d5c92d1208c55512
+AdditionalInputB.1 = 4d85608d537badf7d832d867ffe8aab21cb14f9ef6765efbb3cafc3e4d853216
+EntropyPredictionResistanceB.1 = 2f0973de2247581698945bfbf8f2fd4f88e382ed814b807b8e4824cceabc750d
+Output.1 = a4ec89623c044daa2bf9d01eb4a92689825bc24e0481f6e1d3e0a7081342037089781955d7512c84b12fa533c6e4c560b736009c1cfacc143b3ec881a4b4679c706aeb199b666620f57ffa009069f6e540530825fdd72eff8800fb4c4e2508c0584ebd01016200b1fd6816db37f07ea8185cde8631616ee2c4fd24bb4fa72994
+Entropy.2 = f9da693eea69e363cd62f1f6baa14d2cdd988d9f50170d82a26e3b588f01ead4
+Nonce.2 = 455b784894494eee23c0008c0b265392
+PersonalisationString.2 = eb223a387308e6cfe5c1c648db6b579904f4985d6f982f71c35ca3377315ac05
+AdditionalInputA.2 = ca38c3f3cd5315c2db762b47b9f3b80284ae73858c6c2c979142df438f267b39
+EntropyPredictionResistanceA.2 = 56fef9e01b81c5d1618043952a5dff595d4f1db2f6723bb04c26f36304e41858
+AdditionalInputB.2 = ade8161d7a6ccebc3bb0bf5f9ed2313cd04d7ca04a2860ef5e029cd8794e95dc
+EntropyPredictionResistanceB.2 = 19dd7a74a570993ad1d93d266bb0fd76be7f2f647a438283f687fcce12f61002
+Output.2 = a777b10d5951f7d9136de93d6e8ad988b22b31b3a3077c856ef170d68513a63c9eb0ab92cb51f8d1928a377f3c33bbde21087686582cab9ce130f88076d55a28668999f0fa3466a2c1ff48737df2fe39283c21c7d09704d85248cae448ca600a0dc826f21c114a943aa7473b41a9fcce5836c0508d8df13a3eeda9c339353498
+Entropy.3 = e4e46f25f2732d086cc7d409b124c8db8c2cb4c83cc7a18407b7585d6876a5ea
+Nonce.3 = f2b7b496b3edb096cb13d2014310e113
+PersonalisationString.3 = b605564567004404c4c3f5e115bc72edf2bccc585a120d0fc297dafe10d72a14
+AdditionalInputA.3 = 25d7c33a80e3ba5a7469b8dac31e0e1fb067f0a85982751e9e9a585cb6a000c8
+EntropyPredictionResistanceA.3 = 9c7b8745e3231db0c1230bca736870f100eafab13f0f6441b450328b387fb12a
+AdditionalInputB.3 = 0d4e522010fdfb8975dcc66c11fd99e518395d7ea3f5f893b0658ccf542cc855
+EntropyPredictionResistanceB.3 = adf80918da81fb7f4af4ff6cdc96287be76a81929a52bf732488e4d3bfc22e4d
+Output.3 = 5e13de2199f888127ed24668760a9c8b6c8c3927a8d00cf4b0179b96b489d7a848b01efb11741d2a2c8628be4152679f370568c2e400f83534eb110dc39f60273361a88af6d9862e09d1b07b2f5a05a3c01cffdaf2b3eabfc3532d44c141510c053e12b7892b25b90371afa77aa8540f62071dd7db13f5fde2f5bae9ae49c39e
+Entropy.4 = 9d7ffce0df49b5978fd6eb4f88cd4896bafe247134c9b5fe18d7c337c8b44bde
+Nonce.4 = 77df9a5dd62b1e7143fd19a8c59d9c2e
+PersonalisationString.4 = 333ad159b58db0a602159ae35afca2065a4a97192f889a22a7b882312246ea6f
+AdditionalInputA.4 = ab11400f45a6211a6fa70ac4bc49b82f615a52efef7d48a669cbf5d504233f37
+EntropyPredictionResistanceA.4 = e6e4c1be51282ca8fca1714d31949b06a5c860754683e76e8cc6f94fd15b4f23
+AdditionalInputB.4 = cd8d6e713f7f2c8e9445c10e0d92a7bd1c4956bc324154c078cd3c40416c6e56
+EntropyPredictionResistanceB.4 = 281f7749c4e383e65630d5c55a50f671230e2e71b45ed8689284792ace1b2e5c
+Output.4 = 8c2062c6276b157c74a51dc2a99615eb4670ce98c885f49d5caf1edf99cd5c115636c6d99ad29fb5d571113e76adc3cd7fc92c877c413ad0206f09a72c60fd7862861ded0ae1d253c5f13776308ef392103e7f4c0279d400c168116d953740cc10aedbdfb50d138cd2140616d500372e30c91be5d854fe132334395c0e24f68a
+Entropy.5 = 9460c9651344dd96f947fabb3d857f8d63abfa5e5cc6b97fb108959ddf8d8f7a
+Nonce.5 = 6fcb2ea08ea641d22e37cae223fa9cc9
+PersonalisationString.5 = 1c60424dc9901ded1d0a36d996f2b9f1c63c2cb780ed4bb529ff3d9c8523f8b4
+AdditionalInputA.5 = 262035761137abf9fc121a12e253688dfb2b69bbc6baa5a2c6b243e33c17cafa
+EntropyPredictionResistanceA.5 = 73cdf9b59d985dee11db4e086792c90db90b303a5b51d7f0ee152e5360b0b615
+AdditionalInputB.5 = 5f1f9768d5cc149f4f68b6ba35f5a7e7c31829f8553402593e3f07d94adc8f2b
+EntropyPredictionResistanceB.5 = 7b0f6d02af4d16e598926bfd560de12ad67b4437680142de7a430a53bba0a1d5
+Output.5 = ab16857446387c4490653c6214911e4ad44251105bf6a44a91c4e5e5ab3ec7651412fb609423e1125adb780e07c65a118fd4549b4b0c014930032ff862ee2958f053f7217bc659d8e9780f1598f2c59d460ba0115e24c14f1496a61d2f8e5355afe3b1b5797deb9513e07768d92969777b3c977dba119187f9f31956c1ceeff6
+Entropy.6 = 0b786050890d4002ec96cc0a14f6aa0bc9c5d7edac4c8ec5cec8b3da73db284d
+Nonce.6 = d4890a7c6e806c5d154f7f980c636f42
+PersonalisationString.6 = 3003e66d71d1bd1c3281a61e1b87d616d0999e7ae754d2a2affe4e60be2373e1
+AdditionalInputA.6 = e92f7a3aa5f73792a90094b9e80953393a1847206232b685c360f46a113dff7d
+EntropyPredictionResistanceA.6 = f01365622ecf07fcb5df70528648301e0435d45a552b7511a8fc9b920bc3a6a5
+AdditionalInputB.6 = c1fdddc0c251c82887b238dace901e6093afae4b58502422f378851f95101bfe
+EntropyPredictionResistanceB.6 = 02bda1bd219bb7f477c0dd347563c80fc6fa958b532fd7196c7bba9338ccce30
+Output.6 = 7250151e6cefe948a5ae17d983395a708741f8c1ac1d9a21fd5217dc389209dc0a7f619838396e8ee413fcde41e2fd4af2b66f2856d97c9aa228bbba341fcd7e33638b2713bf7e2cff5b62050a67c4c3db86ed55b81e1e7d1d5f66bac648f825a1b77210c69b72b77f35c22bdf3b352c357563757df7ccef736ea08172a14429
+Entropy.7 = 0aa205bf18dc3b14a1c1d2dad71bc8937d57691869c79ddc9d9ea29383930d18
+Nonce.7 = 618c30e256fcc7c6e36c5799eb6e137a
+PersonalisationString.7 = 1f06269cba4685fcb95968bc0918e4f097f88782f240c541330f51c8bbc6a9aa
+AdditionalInputA.7 = 25a074af16847603dcfac3d956f44b0bcb8414478001b2905319f3c1ffb871c7
+EntropyPredictionResistanceA.7 = eef727110978975536ce5563348156709c7503717836924636d2ba9af7e2fe3b
+AdditionalInputB.7 = a9985a7181b872decf4f7bad89fb264ee36cb523f837da4d3e2c9d975f64180d
+EntropyPredictionResistanceB.7 = 8291cf3245805f23556da753ee8a9fcaf8dd9a36a2b7134d938e805cf29c661b
+Output.7 = 4cb876f608a946466e9d11ce797e3164901d65f2d0d61c2cba1078c8df2ef1444e5507faf049534fa9b3bb015501e1ce357c04cbc89aed40a8d05316aefe5cd576e916a43664453351a3492f2d2026688bb14be6a111487708e1ae498bcbe520fdbcd903f86847348047278d2533c04341a75d8d77c68d7215a2b961e394bce6
+Entropy.8 = 741a119f00689be495ec44e0e2a9e13b55f53c48f6c0fce302c4f6154e3ae74a
+Nonce.8 = d8ffe11e1f476cbd0d4cbeefd6807dd9
+PersonalisationString.8 = d0ece2e462b8abaaf8c30d4a5a439f723cdacedbac3e64ce54ec657be0b60b56
+AdditionalInputA.8 = 75e13cce5981eae37d5422ad8cd411653bfbbc0d6a9a25b82242c5d61c6fee5d
+EntropyPredictionResistanceA.8 = e7e2542bc078d7a15bcde7cccbf4963bbbd522e6828c544b053c3ae410fbf401
+AdditionalInputB.8 = c075ec5f731285b1414f0e1a9900c7c093edfded731da9aa0006e8a86e8c7cc8
+EntropyPredictionResistanceB.8 = 0a36d107e7c9557ee2adeac976b8d1de2365d2af20706a1e5644f3d1885ab059
+Output.8 = 03b08fcbeb299e636ad86c7217f7a4988e3505781e10897e9a38124027878f743b36ebaf09d964dce12f7d18c51e88b2ea5510bb4927601ff99e72c6f6f0e77c1c4b9832f808ce2e5c01afb539dc4d1ab065094a7304dd09738accf3d85c6bc341b8b4a4e60fa58c34a17d296f666ef1a3e3c084529ad41ea68339c75401b904
+Entropy.9 = 3b9eea8ece97aa080ceab631282035058634f9415d747e8cc095c406f389cb89
+Nonce.9 = 152490b28a82c899a34446de1a068d8b
+PersonalisationString.9 = 51b397afcd4e063347bcbe5eea6ee131a7c5992c02e029a7d27e8e24cd853164
+AdditionalInputA.9 = db750970a555a72d369f74062620df6e5dc20b6612b17565ff685ee46eed3ac2
+EntropyPredictionResistanceA.9 = 35a112fc9a60cec71cc3a0395bdd683b032bde6b8eacfc37d64a16c4f5a02cfb
+AdditionalInputB.9 = 6debcc7eae949b4cab856605d96e4169fc053f3d1000f93a508ecf350edc9969
+EntropyPredictionResistanceB.9 = f3e54970c25e4b45a71caf4d95213499044b09d5c065c5c82f02a2db2255eb52
+Output.9 = 1e4734d5469edee5b9c512835fd6c609da7ed97022b60aaa346e686b2ea3c51aa995faf1a15fc4120be01837b4e2b437c856fb16f468cb40e98a0a4b4c79ab5fed8bf3e4135c0c33ade2bad22400e0d5d1d3c8ca060311ef75686baf4aad1cbb519e1e90caa176f6f034f02ca96bfd51a3696277373d1d443d3f6e8a290dc313
+Entropy.10 = ab893f2db62dcedc11b765679950ca344de1037a41107175b21d6c1aafbd2903
+Nonce.10 = e32c0836fe4a27c899a3a65a556d7de8
+PersonalisationString.10 = 0d9ba4420b2c0a7ff123ab189e67992cf675953961e47d5e163f2c8b85ebf18e
+AdditionalInputA.10 = 2e106f538882fe3346936d2b8300a2b375601ca58cec3b34de910a4aa1ea452d
+EntropyPredictionResistanceA.10 = 138c0373da13cc1e4218f87817687069fbeb4be612b7d29f183bfa0fa0885885
+AdditionalInputB.10 = 9dd0819687624697164aa9f7c2733908a55543feea90ff2911b4b45af004a5b5
+EntropyPredictionResistanceB.10 = 965265b65e87af7e3c72e6ffa8a98aadd063577d345844e7b2b2c3ead51f5201
+Output.10 = f1557f46b0e30188bd0514ffd4e4b614147e179173df755565c2f3b4f7cf4690a8d579f5f034cd02e7f18267dbb73019c7bf7c85457c77c44c84094b16c17987c8d067974eecf61b99fb02ed214c4cf857390799c038337abe59a9817b426c2d97fe1011a2ceef6d928ebc34e22eb3d211632b666c0e5812293379555b0da2fc
+Entropy.11 = e2a73481533e93bfe2ee0ebf4fa7f39883712fdd8dcaf5e1eb2994b71d6727a1
+Nonce.11 = 44c446b2e6352a4434cdd1a6a28c0ec6
+PersonalisationString.11 = 6ea115d468bd1d79a7f8be594f70f9b2957dd63922e3fb5a6168bdf09517c148
+AdditionalInputA.11 = 1c1cd37ff82030312a5a9885578cabd7911d7c2c2639eecd49ea9373851c7d72
+EntropyPredictionResistanceA.11 = 6baa0287d9577d167e7091357124c0deb6ef65f461f765dfe91730e21820b11c
+AdditionalInputB.11 = 1ae6821366bfa5c941b576f2d699cbf9e1cf41a0bf89f2d835ef45e2ffa86b70
+EntropyPredictionResistanceB.11 = 72f9d77644b07c5d4b4b43a248b35b45f08db3acc1c738556404f852e90ecf74
+Output.11 = 93e5147fd9dbb8c0881f3a0ef72f9c66ee20c5f6ef86abb661f5aa9ed97d25882250698d7db61e69f304f36821bea5ddb29a9bfbe6d1dd64f94461499bef1ad24521ee37ec73cd3ea919adb8f42cf58a154a3c63b7919cf3d743156ac2e45debc586e3d6b7c0b2a2267a20d94a0037d6193fb1b6aed3aef085e70964cea56cc1
+Entropy.12 = ad3a89a5e8e3b0461e4f2618e165db4dbf3d9a56cd822ff22fde319d99e381cb
+Nonce.12 = b008a853f9d2f548e1f7d10cd901e747
+PersonalisationString.12 = 5997aa0ce010e989929cf5b0786c5f7a471c4ab2eb07fb19d9e9ad07a6e78c6f
+AdditionalInputA.12 = ecd026e8a95e4705c68c7609b9285a065e9d996240a99db43eae104241665117
+EntropyPredictionResistanceA.12 = 9c3ce154bc2f9516d49ce4936f0b22813c137599c85d868ca8979a4bf61f04d0
+AdditionalInputB.12 = 0c06554ab90f2acbcec859f0e8a1b5d75c27bfe1c9ba281fd9cf28967865fac8
+EntropyPredictionResistanceB.12 = 4f8ca01d1bb31125a3e9c4c6179d8dfcf5a7108b338d3c20da5e03fa255a7ff1
+Output.12 = d93f887bd0c2a8d53b0e09e6f6963902e5e97434696727b2ee19d5b4f5b64a155ac05cb0eeec2eb886ad0658a8eda071fe96abfac48aad7b6224578b5bc0a92cc8c470ff04b04e63e3c3648a43bd10d6568b7d4e856bd4bb73ba57abccd199c334185eb60a808d55d31e7d84d2aef6fa903b747c7fd69d5ef9ea90088e934af9
+Entropy.13 = 1fed72ab2a679cb6c6a6429bc39359405d411e9ebbef3c01579d3801a170a604
+Nonce.13 = 565d8dd2871b078ce3af524b94945f0e
+PersonalisationString.13 = 6e5922b5134f27099e6db31c75936b75dd2df18adc3b90449cf61ea03af70f11
+AdditionalInputA.13 = 07226af513cc776810d851af7e4dcad51fb7ea0a43f349d8cd5591d8593d9322
+EntropyPredictionResistanceA.13 = 4180668ce84bbcd27b6705fab3e301917ae6f2ddf6366c7f137191862021851f
+AdditionalInputB.13 = 759dd7893f939ffc34ba51ad5536110c00ab0b804f291c27c0b6e8a8eb4c105b
+EntropyPredictionResistanceB.13 = 8cf36fda180358d1767375d7cf18022cd0bfff97a0bd1ba2c7172a55e369645b
+Output.13 = 1f7c6c47c53bda212dd2b2ffac1409e249655609cffbf79703f2700e11e495715d3af61e5792cf819e28c1a8d7c618c1600c3cb8519c254e3f2f6426d1174918840e7fd0c6537d505e62b4297902f816429bbaa76ed62f196ab817e6b12dcc0c76ffa241e3cdb4b1f671edd43e487af510db3b91695e95edc6157df69f1c6699
+Entropy.14 = 8228d24bfb9459bab314efaa987b014cf3d3bf7a0accd7fabaf913a346052d11
+Nonce.14 = 3e96704f62e00f958928bb4716288a12
+PersonalisationString.14 = 61821eaaf4cf5b90ba98402f8751c88aef1c4901e315cd18c3a69a6ae7d5e969
+AdditionalInputA.14 = c9c790762e9103bec2cc6a41a27ad4206a333226d1784c3cc7a9714a73c46bf0
+EntropyPredictionResistanceA.14 = f4eacf5bf23fc5d7894fa059a052b2ebe1e7bda240b27144e9c517d8df4bab0f
+AdditionalInputB.14 = ca63db9ef242fc5132d291600fbfe99b72649a2c51080bf46501286c278ef0e8
+EntropyPredictionResistanceB.14 = aa1d3e08e011aecbeb852bd054066d44b5f66a71682427d9a49deb6fd43ac6a3
+Output.14 = c44e0709fe70b56c0d612f354f796e33f6008e8dd9346ce75894e3a09186fe54b4a7988060e48488a329387bf1bbde11de1525f14caa0af8d6e4d4b32b5dce06d71b368d5cf181535557accfbd9ae55d4b844479a8c959fd0ef0739f1fcccfa2d4e053194b90b8ab9fa4135db408018c3d4895c44cfefc05951d1cffb8da24e5
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = ae04c48a33349a41b1daf826ef687730d402c8f4660b7d2f456cc6d22fe98474
+Nonce.0 = 0239e0e222ab10478e8e6dcae713f752
+EntropyPredictionResistanceA.0 = 596afbfddb3eca58c8f23ff482657610d96be2b7455ef426b8f80fe9fe83b45e
+EntropyPredictionResistanceB.0 = 2792da52cfb570924edd2e7b86fd777eba6fa86cd8bc1a5956707fa5b3c55a05
+Output.0 = 4ea44e2a7ac84ea9baa2ae201239afdce5714795cee9d36c70c83b90ac14672eaf204a087ec6cb53a0d533fc6a44a65bb47b5de6a97e4b04824d89026c0c2d0839d42f9c17d5e58b01a32b1a305a83e3688fafc31a359b1232e2549de6f2efdb65d2baa29c321213593cccb64ed456e61b0bac257e37135193d4660dea391877
+Entropy.1 = 871c2577451e692d7ca4a97a35b18df6fbc3441a62f3da87567fa8d2bad1455b
+Nonce.1 = 536d769627d6b2ddc5941f19f52f8f15
+EntropyPredictionResistanceA.1 = 0f396f9446b60bee5b4d55928f01d01bc94753245ca817484ee9a2aac8503551
+EntropyPredictionResistanceB.1 = a65c854237f68eba90cf9f48a92eb6269d4d8b7c386937b84d43f7a89598c7be
+Output.1 = 7705a152b7c8ef8b91a2d4307cb4972d78248f173ec74d6119eaaa94674faaace31e48c1aa98c925eee9bee96579fb790b74bc00243d7076a7054b63fca64499d6df28a5b72daa110acf52acf8dd28f22db4f12688bf542dd28c4968cf19770f49015f4d7243a78645ca971207f14d500d77d367c00fffafbb24be82542fcdf8
+Entropy.2 = 09c1c1f67fb3c091efb57aa62997ddaf602bfd213d5797fdc2ba3fa4f138dee7
+Nonce.2 = 2858479a00ac0a34d51f0f94f5004aa7
+EntropyPredictionResistanceA.2 = e18a6bbdc9aa3e1ea2d7bea304caf896c24d62cc5e6c5ffec71d3cd51f393f40
+EntropyPredictionResistanceB.2 = 666c95cf52f712073e0cbdd5a84b6fbc0526170fa44d52bd1b1ea91d4f434073
+Output.2 = 26ffc3b3ba068c0b786bc455d7fe7da7774705ef8da764c04e967eb3511e8edbf4138e99047865a03beca9659a92ed7efb0b9f53bbd4986f67f61979ab447cd70bec01556a084b822d162ed0bbac12d522a7071b87c56f7806ff471b5486b5ecc5c3072d8e263a4dcd3eb081f99200b9609ad75e17daaeae2eb3631c9a717984
+Entropy.3 = 00f65a9bf8aa928629527d6eb160c1a61711e15e292cb9d64ee8f7652f8d1725
+Nonce.3 = 646d2131b0d337e1299c3a108276d176
+EntropyPredictionResistanceA.3 = 691e54d28835d775f4f4f8ec9b68df2cc44883c005b8b19b40ccfebbe60031d4
+EntropyPredictionResistanceB.3 = 14a12cf2bfe03362f6c353c90d6e8152ef3eb84d8ed03791c082c65ca1ec4e09
+Output.3 = c8688574ea8b7a1a2d15e74d1dc3885e3001d9aa450beb6d789ad5467b5fb136b53ce04205bbdaf35e084be948f5d89ec6c02a4474cec5ac889bffdc95b98993e69df57b3a21a4bf6e560bcb6bc51da3ce31270e2c2ff65a7bfc81c7d8498f0ff3d2674a4371e0634272e3f2253836a347e348adeb2039f2ce2d38b72aae456b
+Entropy.4 = 1bce982c9e1f931ad9e9ba5926fce70aac035c90c746484cb2597c26435da80e
+Nonce.4 = 0e34565de16b6c78a51d0cbe5ee9cae7
+EntropyPredictionResistanceA.4 = b617748f117f71576fa896baecca6146ea9cef49b8e620d13ac4db758aac38c5
+EntropyPredictionResistanceB.4 = 55a570c32f0376155a58bba308a3eab414e5da541b182d2f5301629e49552cd9
+Output.4 = 5236d5d4a21e22fc750cd85725b94a2f0c85501b25030f143877e07ab239947f5589fd8133fb8ff9055eea19abc4e486fd24de342ed115c6026a0417868ae2f5ea69b72942a2dce8a521643add8c6ea0d0832fd1a4ca473d1d77f631a2fb8608c47c70dbdab7dab472e3241867c95733200ac4610f71e9461fa416f0ad096d7d
+Entropy.5 = b09da12161a48cdfb1084107a267049eace07c8e89ac3115fdfccb71ca112edb
+Nonce.5 = f2731e2c6671466fd84a54f3f5fcd909
+EntropyPredictionResistanceA.5 = 6e48aad23c93ac4a9f08e4b931a1b2af06ba1575eaa537ca193800ddaafd5e82
+EntropyPredictionResistanceB.5 = e4982c873373b365e268f2bd5df61202a1a7a493140ed5c64a0bfefcd50e95fe
+Output.5 = cc286e4d74501c5cc3549ef5547bd42444669ea73e8da0b788c6c9665feb6eebdbee3ae7c2c6db218fdb7aeb55d03454e5a4fad67c141450398b6bfcf0bc6aecda8d2323b5a7eab9fecf2a10e227b0090109c2416fd182b3557fcd4ea591f76e8f9d68b1e0e0c881c07b440afde155797dc6f04d17dec822fddb3485ac0acec6
+Entropy.6 = ef3521b4171f689a5f98b2d5dc1d293b1f56fc1122bad5b69a2d192133fee45f
+Nonce.6 = e3853b03c19f95bcea0366791bf82725
+EntropyPredictionResistanceA.6 = 1db381cc4ec5a6bf914ab07f63635ef3404a659657e159088a77bc637f8fc6e4
+EntropyPredictionResistanceB.6 = 1ead8a614fd813c2ae39e236f26004ab0aaa7fb57cd3a5dd0dbe307fa3a77192
+Output.6 = 41d64fec2fe67fa8b6a116e169514d7ef8ccc74ee6fc0298f855c285c288f2b992abf916343132a782a6c53580b516b12dc26d8cc1bd6468f3e015390af2e15f8404b6a03c7c7de01cecc16e1e738ec8d853ed1916400bbb9c4372598a4b33fb9eda71c165a836a5cf6dde920a3e63a63f03b950f817241ea88316cee0580a66
+Entropy.7 = 3e225a99a797fcdf7b79af07c300c8dd5611c6d934e47c091d1f9d60a3ac62cc
+Nonce.7 = 98a852fab0e99740792507e2a0030a85
+EntropyPredictionResistanceA.7 = 1ec4f654398a3ef0007a645575646d0964dccf9a380b98a6a83e7f6b6802cbee
+EntropyPredictionResistanceB.7 = c5cde541481be8cc9c0d5151a0dad2f01ec31cd0fc52bdfccdee61a95e786380
+Output.7 = 29b8ee7ee080d473f907340cb599cc797a3c8dbf844dfd136edcd8133c78505af0b939212a64e16a14d4e73199acfcecf81a9c6ce5f087a2e0aa886dd65e832e1cda47000cb1c2b77c266bdda44c83fedf24e7bb554b1d56561d7e88cd1d2d8fe3eab60620f5bc0c08d2a2f70de7f33731d1910cad8def3aa4380f22554aa17a
+Entropy.8 = 91da2c1e91cbe9cea15bf8bcad30ec0c7bfb23ade6734321c6bfd5bce241eec8
+Nonce.8 = 6d1089ffacae7c624c4a6f78c01be5bc
+EntropyPredictionResistanceA.8 = f188f8b9c54e714ee41afd7518114031705dfbf4ced3d4a21aa68695a2e74c71
+EntropyPredictionResistanceB.8 = b9746c6d753d3dc257cede806fc514704f7986e328bc4ba207d0ec208933e6ac
+Output.8 = beb1bea95ac3189a174d722aefed31a245c97ebd9a9a7a6af7f5b5f168fa4056586c7f0b1ba5c9f1864ed498e6b0b560d1378cf5aad275ccad927f7e32898986d29ce5d9e4a519b2ad9dab86e74631995d6d75b64a51c4e0fac1f26778aa8ec5b66ec00af0f68eee6b5a3ca584a5f7a02c8b7f59cc5f449291b5177eab82a550
+Entropy.9 = 4cd74f3cf7a53bb2c590637b1fec237be2018e183247911448b578653cb71121
+Nonce.9 = c3ff01846b4b2c36d62b4e074b35fa62
+EntropyPredictionResistanceA.9 = 79891eb2b953141ea29ead516ecc1aaad59898a7dd9757b6fef592b3961eb4b8
+EntropyPredictionResistanceB.9 = d4ecf8064e1e249ac5e4eda8672a758fbfbe3e2970de8b77ba618122590147aa
+Output.9 = f4ccd2200d562a8bacefdc80eda550f2125a9d688b4205f4059acbf30f946b5609421178c3720ddde3fa1eee6c61f54b35f2071e76cd8eca5c3fada1db090f0fbd9816209500072c9948ace9499dcf829ba674a13c1a0bda412032db4641bd61b88bacd7972baa987d82993ec6ae6dfcf2226419cdee4b4840b880e51740c018
+Entropy.10 = 2a7cc0d0422e7b2151170b4d855ca190e5cad191de88f83bb7844f23fe89fee7
+Nonce.10 = b190e46cf5dc03e02ee36ed7df638f3e
+EntropyPredictionResistanceA.10 = 7042879d73952586fce8664b024975bba6dc31a2cfdfc328fea8b21c384f54b0
+EntropyPredictionResistanceB.10 = 368d2906f6c1e7c6189e5de7dbb38421b8c9f9afb7ab0c0099349c53d2750ade
+Output.10 = eb409983ec872d472b9171ea150c48e0cd84d9773923ca6147f6a4238a6d54395ddfbf84fb974b4b684e5b882cc37a8032c45520adbccae0de8eb98ae483ff871756692bd316075a759827ec9f3a3b035c84de3428b5d39032bd135c6a3b4b85c83d745bf5a176eb89b2645670380d300752e6ac9fcf737f3b1ba4840be38399
+Entropy.11 = a4dc29bb7c81290aa0e6a4b0617421d7f68acbbd045da70a0109944d9181d112
+Nonce.11 = b403fb9e1d2988cf27696220c79b4d24
+EntropyPredictionResistanceA.11 = d5c44118f65e61e2dcfb98ad6bc8316bdbf8c088d8d44e36fa35bec234f4820d
+EntropyPredictionResistanceB.11 = 2bab5f962bcf45837000409f86649619cc1a2921609970cf8690e87cec5bd988
+Output.11 = c61a86a94c6bad291cf52232aabb36a7060251571b571dd32beb8cbe9d0441a92a4f849789241afb9e0cd23b1b93520092b193f4a42c8a24055527e9fb5b5b8d1522c090aee59d115e97291c348fd77937dbced6a0a2967c1c20201df045236c9b30216739ec2207655c1d155b160739d8c61bda5f65a3ab7ff82a9d72d78292
+Entropy.12 = 0e7099d0e29d717afe76fb639943b35d956e6a41ed5a38ba019e5ecdcd5e81b8
+Nonce.12 = b6612d718c92df20260f2c32cff43450
+EntropyPredictionResistanceA.12 = 1d171a3ad15810577ff460e9ec207371a763ee67a29c2e2c17545eae772a85ba
+EntropyPredictionResistanceB.12 = c91dda7c6a3d2770da53a204ed4cd644f7f7061880f8aeaecbc50c658a888898
+Output.12 = 25d3ee9c981bbb095c8b754767e216336d159fbf87eee042c65e9aad7e956caf2789d8f2e5f5a7119447716c12647b39c7fcd750c80ae9cae108f8742d6d221691f8a2b83fd75de22c984e325eee9a576b24cba1d82696266377cae896a9d3dd748d8d00ce211a286d582968e1d25a3b82488dfb220b470aba843ac4e05455f7
+Entropy.13 = 565b7be71fff35e24f4263ee13775f65680a788dd7ec67f9976712e2cb7bb327
+Nonce.13 = 5ce3e42cbc7b1768b1ce31585ddb92e9
+EntropyPredictionResistanceA.13 = 19c5ee22f32e09b37dc1aaaef2851e708d6c8831857b0053aa13fad8fe59cc71
+EntropyPredictionResistanceB.13 = 95a237fbe05650525f99d4d83fe2c465817c2be6af06a4b283e1b146070242a7
+Output.13 = f8424973e1e318c81f7b9331f2290b02bd1c48be490c24fd003de8e02f70fc288161353d2775075a57a3da4ff046e941bfbb771af7c06c4aa5ad52e027c06e91e96dc9a289c8fca634cf839d34cc28eb70a472036d60c6f2107dd9ecc913eb4a561a18ce091ef51815c29cdcaff278381283e7f28c0fd95a246f704dbd36e7e8
+Entropy.14 = da098f6202aba94648ee3b13dab283cde505242efede965c082397053752f689
+Nonce.14 = eab209323006ffe152bb12c1b051baf5
+EntropyPredictionResistanceA.14 = 3b12c8af1e7f747f5307c4a0e7af0efa7a34039b4f2c5f0049cf8873ef9d8c3e
+EntropyPredictionResistanceB.14 = 90e07e1b5ea4915b23d18d52dd1a5d79ed0feaaf4c3b9176ae92c85f28c5ef0a
+Output.14 = 6c2ad7e3738c856374ab4b7a56ef4b3e1aea65f69fd6fffdc0fc06c585eeca2761fda70234b844b37ee8fdd43f8f58b5f73accc0943b8da2544f3a7ea7e7107786d9de4f457519fc80782d0ce64e5b33c82b6935f80d0e1e241ed1c119621d43ce1d18fc016b136ca1eb7907c6fdc14f77d807cd0ff1a1ffef73f6eab009b02c
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = eadf05de42b12597a02bed6ab3a9120ac5cb4721b4d319cf44cad22e4186d1b0
+Nonce.0 = bd74c5d6061c451ab95aaeebd9e865f2
+AdditionalInputA.0 = aeb0e94d3eb5cea0e404e58c88ca81af51c1dba6b877943511c7e087c40fdf07
+EntropyPredictionResistanceA.0 = 9fb98cd6b64252d5cb969e5fcfcef2c90ada8b1183382ebab7e3bc124531b7b5
+AdditionalInputB.0 = 328c4b4edbc2f9ba0e073ba351c37924213db6f56b60a3e38a0afba7ddb19b56
+EntropyPredictionResistanceB.0 = a46022159a64b8ea14d968d3e7d3fe16fe607b6c5e951af14e5377b8949e98be
+Output.0 = fbea7452bf1789f32ef486fa7b21c93d4e59fa536d269729192444c9691d51ca86c4328e54f8797379ad77a95ecd38d6ed58869af6ad2c7aec49d91478b434894048b5883779c8937608fe7b03cad0e1ce3d3de2b40b635dbccd2b4d5f3ac74c735cec34ce00d1880891ceff9df63899cd407d2fe7dfa7b56b7abad6025957a6
+Entropy.1 = 4299ccb0f437cf1c16828240e0ca4c87457820444d1ced20d9b0dce8872bdddc
+Nonce.1 = 1fcfd0e1b211ba04c80685e8e3beeb7f
+AdditionalInputA.1 = 41bfcdeff9646da62b19b6206e19f493e8be29541afd7732e211e9126a22951c
+EntropyPredictionResistanceA.1 = d37fd2d67a07e21695d77fa51f57df37fcd0559d0b6bf6859d65a49611eec4db
+AdditionalInputB.1 = 925f4b210f8be8f7a9bc2aa697ddba249097d460cdc9c7e9fc70d7e8061df831
+EntropyPredictionResistanceB.1 = 637fb07b31945247ba65e5b6c135138bb907d75bcd9b5f90bf29a269da53d108
+Output.1 = d567b2b19a24d8b21d04f0cdf9c5b368d16c67d4f10914f71ba56b33ca6b49c15e2359c9ddb115a5265cc1860d01b905290b5b3f3885feac7181297050ac64a708d79f6e852247773a88079e45f846f8d90334fe6ecc85f8f8a0ec25cc58fae62621c46ab2a25d60936dd0a84643af2c2460f4889a45aa065a3d8ba099ee05e3
+Entropy.2 = c21dd459c2dc2d369a76b17e5e857e94cf6c848672a7813e4add405e1a5102f7
+Nonce.2 = f5b660e294b0157068a2bd05254f5f89
+AdditionalInputA.2 = 6a6b0bfcc2fda8b2b8e81679134b7e7a7e5af2c6761c11ffb5c865638eedac5a
+EntropyPredictionResistanceA.2 = e789614bcd3e2de6db094ea4f8892e0f961f23effe577b2fe37dda67d086c570
+AdditionalInputB.2 = 24784e6eb855f11c51e3fa2f49aa9c35b6e9591fe59ef0f44a6a44e60ed11312
+EntropyPredictionResistanceB.2 = c3b7e1ab438448d505bedf91f59abd81432f048b6978326ed03b888a04be2c47
+Output.2 = 373d7374c313ce3511336fbeecb0a848f37928907ba9e00566401b788c0ff861f170e2ec9ebc7b6095b9b656a03f79e82f1d35cdc0762de982dbfd9dde2483f0d2fce5f8c13e486b52546a46de880071fc869bc2f0a56740a95503b1c5601b21bbaa1e525c26fc3df6a4117aa56fc1714c731288881168d5b4f0f30238e5f2b1
+Entropy.3 = 47af035654e38e6e8154437e663b29eeff4911ebe6770cd5b7baa0d16f9fd53d
+Nonce.3 = 4815ac0bfaf5e604c47c1d3fe828bd26
+AdditionalInputA.3 = 7bd06111fba99428bf57d01e5fcbf13f715123380fd678e46f357a598c321a01
+EntropyPredictionResistanceA.3 = 21e20e34708211848301d672504283aa107d6c97ddc5802a88e2e132c536860f
+AdditionalInputB.3 = 5efcee6c365b1a411e3a5a643d492ca7a8ce38fb4bb31b64660c530cd476d8eb
+EntropyPredictionResistanceB.3 = bbabc16d36146a91dfa26d793816ba807891190436fd8cda7bc956055c990b9c
+Output.3 = 07a732be396057eb47ad8803341f7487c2231f252e1926b330d14447678e747bde29ba393b5f901c729b0c2472300e89e9ac20be80486f30a41df31ca93ea83c37ba292ebadc0150d22c5c9c2312657f828b103e0ee238ad7451b81a69db456f7460680d8901c90384657be573831fd7a82378754673603d4a00623b773c3320
+Entropy.4 = e0d76b13224d0830aa9bd4cbbffb0765aa70c7051d734ab40d8c2e94228142f1
+Nonce.4 = 029ce9a6ec4ea601ee234e9291bc64d6
+AdditionalInputA.4 = 9ba19c6cd1658ca2f4320db010640e0ce41728b151224ba976f81ea9f62cbb12
+EntropyPredictionResistanceA.4 = 783ae9e1a425101ef8ffd74ccba03f61bb22d298c86c100d165cab03efb611c0
+AdditionalInputB.4 = 224b894fea2ed76ff7bb9a22b915a4bdf1094ab065ee19fdbcd9c8a6f3fc7a5f
+EntropyPredictionResistanceB.4 = 8cdf7a41644c6bfd781b408eef9dc13361e2c44652a73b486b71fa7f4c0f577c
+Output.4 = 8e2872cafc09910513c5d4f2f9bdc2b6b214cdf91b2c030779ae1232a51278df366f21b29656d91a4e1b41f558d39c07aac621c729c245469d436b9f6bde4043282907c8ddc36ebed23f9e09de8df1ff90fa1226c39203d05b7a8bd6561ae70aa46ae45ad28ca48253987b8c7379b737044c24976dc5f6e853bbe50dc48d566d
+Entropy.5 = 6a86818f6188a1c115c52c9c97cdd239fe0dafa268f4675b07da456d1350832b
+Nonce.5 = 8c92eef8d33a3d8e45ff79506aef80e0
+AdditionalInputA.5 = 55af20143afc0c7c3a7c475d29ec6aeee2541b636afe754c6f477453be83f49b
+EntropyPredictionResistanceA.5 = a1ffb6865da14aa308d75a6ac22ae4c0f8a77f15f8e1d0d96d0e14fef1ae958f
+AdditionalInputB.5 = 0cea0c6be3f3cf6710a75cd9f42d0347b2be1267f15192a81f90ec2d3a7927bc
+EntropyPredictionResistanceB.5 = 269761430c61be4bab79c8508d71a46675fe35c209b13d0ad9de831de165fae3
+Output.5 = b6815b2cf0310c283dfa0e2878ffb3a66e72ac4d5648ea44132fd7cef8bc781f127df9b42a4d2940ddfb88eb2e84571c51a3fa875ab16700c47977bf52f76dd3733ca3ccf614114a8b169787552dc80cb07dd2e5f1f05129f02abb3630efbba45e9ce539a36f0a5d13c9a100336b484757306f5f1db0f49c01192c7afef71390
+Entropy.6 = 07ae06a1d9ed7fac407f5bf8b30a73ffde6470a7bf5ea9a55f87d859be800659
+Nonce.6 = 00a5185326d903ed05c4ee9a5fb524ce
+AdditionalInputA.6 = 347fd62fa12a745b08dc6d35bab02af120466a029bca68ccf219af8bd5cdf66e
+EntropyPredictionResistanceA.6 = 7791b50061633f49dca6be6f1faf9cdfb111057abd7d545b08c1f77287164498
+AdditionalInputB.6 = 3414bf93e902bb0579ff3ca146310e3ae762897fed6b6b17ea9dbf39575814d4
+EntropyPredictionResistanceB.6 = 28f9d83634b2bcd4d742aa44627bc41b85cfcd574cc6b1e46523807a27126bac
+Output.6 = 3de720d22f2cbb92963d5308e55f924cced5c9589fc6c461102c36ad2f9ffa1aa3a377ccc1830d8a70022e64c4c44cfda64e2a365dd052607007e7c677e248f665a1beb8e9e03e9dfae912b4f6c9d2d14f955dbf61353af95bead1dc73116beaba3bb49a3f99d313bd66cb00ff744aca09493199a48e798a3f2f5955b3a314dd
+Entropy.7 = 34fbc7a2cfd02462949db7637041cf574c4b3641f70a03d72c9123535723ed42
+Nonce.7 = aad628812c1232e1d5b0657606e041e8
+AdditionalInputA.7 = 92f52df37553082dde77ff4507bc5308d07d7df69310be7b2f05ad78cc130a9c
+EntropyPredictionResistanceA.7 = 67bf82b278772fb896a44ed0d9b0640f5e83b4178b4e51be373bfe3a605b02af
+AdditionalInputB.7 = e4c555d74d74253aca416ec9a68f5442684e9d03b07ddf96e8c4edb44678e481
+EntropyPredictionResistanceB.7 = ba66a439fbb5355d2c24813d97ddbc4411d900fa8e1eb832e287d2d058fb89ed
+Output.7 = c7fa925c48d88423851623ab412949a5ee4c1ef1d3481aa3e0078be8cba19d0b8de124e04e06cbd4272f372ef756dd9287c17947093aa89ada99e61861869d7dba53dd3e24d96ee81a4a423d350a91eb8b14cee2ac21a58c032c43ed45b55e1b94354e338b377a54051dd8336b815695b1635818cd427c81965bf942bab0e01d
+Entropy.8 = f8ca2bcfca90dff212e29ef9e39066fe2a36b95767aa5ca672863031d8045946
+Nonce.8 = 176031e5eff1b66e4f9854549c1aaaee
+AdditionalInputA.8 = 10e20ffa5edce26e3211b373a0b1fbd7a6cf5f54b7d1a487d05c63fb54f96583
+EntropyPredictionResistanceA.8 = 159d2337f0036511508428c636f2ed69192310db8e529f405d5565f0d2e42073
+AdditionalInputB.8 = f8d55ab87529701bd4475ecdd0f36014ecb1d309f1a5f0d2054ed72c1aa458de
+EntropyPredictionResistanceB.8 = d3d96423d69d52fa5ea46a73971e31ae2b39122571c160adfe682c8e9c8472a2
+Output.8 = 8cae2bef612b1e838c036c8e56a758ddf9f3c3658c2879cd86a40262ce18e07815622bf70fb56a37b63dce031d8d3e30e4e6d5cfee7c0aa10035404f6ffaebdbff02a918f234e20b27b546fcfba1d649a75d47799fd5d964b90da92d31b4f6580ece8736e005bcacbafadae89ca71efd09aa3e82c24652e7d46e1f4a7d24bfca
+Entropy.9 = 0632c7fec66af4ed3f623ff3fdbbadb505230210ba2a0b80ada62b12bb2a33a3
+Nonce.9 = 2d8ac6c94f19f3d5f159d18e5ae059da
+AdditionalInputA.9 = 31439ffd3254170e5299535bd1e4219d4a0e13a73a52c4ed65e7ee610ca09dc9
+EntropyPredictionResistanceA.9 = 59875221237c0264c2fabc111a909fdcefe6e26cfd90177c059c0eea61ef8a44
+AdditionalInputB.9 = df2f66af331c42f7a11fff7324b12d2a402ea29286377223a6956f698ce6b612
+EntropyPredictionResistanceB.9 = c0075f12dff6464957342716efe944682429f7043bb9cacbe016deba331dfd8c
+Output.9 = 0f0a244ed7ca284a81048f6362945f361f1d04498289e71bf1fe5319274bea16fe15fc4ab3cab314861f8ff10e7236dd3268948af4bb1696dce5a681ab55f46415a87843aebdb4f4d687e4c0f2ccf7391c927fcb21d142c168e254cf652e7010daebf7c9789ee52c73ff7ea35db16855124ee9001e166d0142a45cbe08dcef1b
+Entropy.10 = 035a548af929e16fd4bc82f354f3c9ca78885433b4418f0fc75e3820bd5e7fd9
+Nonce.10 = 3496953df9a59af5c4b5c7bcfac98d6b
+AdditionalInputA.10 = 5a2074db5c846e2963ce310d7d4ad8e2fd2edd8a123b450b546f21e1cba3dddb
+EntropyPredictionResistanceA.10 = 5036cdf08a44038d71c37f8acf277720b9040c742604b92519906825088e8607
+AdditionalInputB.10 = 0ccfb7a9276700a3ab0a9fb840d305a34ecbb34607b550302b2e2ddd1266971c
+EntropyPredictionResistanceB.10 = 0ea72df706ed6f4e2388c2a95fd1b0363bbf2a2d3a0f9399924166d93066f15f
+Output.10 = 629966c94dc8a123e1014ad7cea6027d04526c9362cb3cec20af741bec84c5997d0860e8593d1d2385bb771c18ccc672e4a71ff8e1ee0e57b0dc556c78a10444a8afc4523fc8e68074cfabb5100e729b1209b0de25eaf8ba5a4b93026a5badcd882b4658e94bbde576dc6f86eb5a8e46ca7da17400406b591c3749ff4e0181cf
+Entropy.11 = 9ab91ba7d63e459edf32b9e86d99dccde3ae5af1362219deaf06686d74abe190
+Nonce.11 = bad4ef4bcd529f8339de50177cfabc46
+AdditionalInputA.11 = c9bd22c3275af79c9acc9841d0ee31881ed0a2fa0b66f4119aa49011b628c9bd
+EntropyPredictionResistanceA.11 = b2d9e6d56e7356b032ccbdfe784a39801f519010ed4a4b839f880944a814156e
+AdditionalInputB.11 = 1ff2e753c7a90a2689ea1f7318c6e7f3b4e3b4e3807f96cb9e584499fa82ec67
+EntropyPredictionResistanceB.11 = e23ebf8f20acaa147cbb37bd7bfa265d8dd6e81b9961d0976fe361bce4eb6987
+Output.11 = f68f8bc01ba04c757ad089336eb6c3f161b2944dfb370cf3b87e6bf3c2b44a7640b6c033c5b0553ea6f39ad8d291e2d7c89948374e93411e36dde486de59aae79c7c7e7220a93b707ee37da38171866d8e54f5a6030eb7ab9a67b0b61d3fff1781f09e62fcdb025226792d4eb2cae7cd55f0d3b13dbace290101c10cb8b236fc
+Entropy.12 = e1c413bea63b68ee034b01181982d69b7eb4041568cc9e06bfa1a205b9144296
+Nonce.12 = dc79449197c993dd95b800b219d0eea5
+AdditionalInputA.12 = 6a01f3a4b5a104872450d0b68bec30f9fdae4f8f677bc300927b81dbb6255af9
+EntropyPredictionResistanceA.12 = 101dd2b06dcd7efdbbaa0e86b4e91d3c27814716810265fef9e1b41480337bb9
+AdditionalInputB.12 = 1691d91f0ccc01341290936ea42cce0ba4292393b2eeca43c257ef5f7a706a14
+EntropyPredictionResistanceB.12 = 4236f2581943f8a7facc856d9a55ae6f3c91bfa58088f2321c24fee96c659621
+Output.12 = d81df93ac42c79f5632a77447a0614220d132400e7f4c27da2c5b85baf44d04d1899bf1cb30876eb21358a520fa2e96451b9cd385758a975b2489632ac67c7832e3179e8c8833cb0e8158fc17625cf51d8f0ddb252f65ac7a2375bbc2d38867057be8c41b73270be7fde60715ebb417a4f95b642e2f1842396efc8ac42b4df7f
+Entropy.13 = 40760343c2a6e66de6889f2a53471318a172a9ab730fae8d6bf1c58581631c15
+Nonce.13 = a754f68dac0deccd565c5ffb4b69f428
+AdditionalInputA.13 = dcb0247181b9585704ae34a0f12cd4f37a0cd63542f9d5d422f57669698c3622
+EntropyPredictionResistanceA.13 = acc62ba5fa0235628ba17d22d4fdfe0fae3f56a4ce46e404710db9a4b634a460
+AdditionalInputB.13 = 48166fb4d2c1d3869cdcaf7864436b29f156f3d4168e724859903cd64e93ec47
+EntropyPredictionResistanceB.13 = 003e6a3d98dc119c00ef73c7802d825508d609f7380627817823f6ffe3102121
+Output.13 = 2e5f660a4bd714aa99410850d52d5fb652b6df93459aae8fbe79e64e53ea1970fd1f236be5bd75a2142cf2d78b2e8af517517687b5c9d9962ac3e20c02ccef40d5bf8ac15fd3153a261b1008ead06ed4ef77c66e046379ac9377d1e16dac826945e116f17134b79eeaf73c7b1d6e9a74ad84e267ad885b46ea009bdb2975ff14
+Entropy.14 = 04d86e17adebf15cb617793c7c9ac3de8080d3cc812556b567c2e61d676a6f0b
+Nonce.14 = bcb5b61776123ea073c3d1a0535b1d93
+AdditionalInputA.14 = b1fd35d1d21d366bc614962be6c270f352fcf00fcfe1623eeaa6f6cd31557098
+EntropyPredictionResistanceA.14 = aa70a9e43088e2baef6910d00d55f5e5df7b635f3a516f8cdb59950b4718a988
+AdditionalInputB.14 = 5138951ad6b555496eb1005bc403f5937dae4e05f1254d7ae2406a3f81698242
+EntropyPredictionResistanceB.14 = 9eaeba16579b23aa55adb7f2b33430e5f9006c6247944b16cca7f36ce6eb0cb2
+Output.14 = 60cb8d3a0d921d6895033f75330a82de2121abcc7f0ca1391687a510ee79c7e99154483f20ceee8cd85c6be7dabf93ca5c535b42980dbca8b308375f44ea3c1682d0edb7391e468898eca762b39b2ca5beeba498881e116e45429b49ae3936e1d11baace14b11c64aaa17f4c830ed62df0d66ccf0093c73f705e32067904ce8a
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 113ef0d71776835f62680acbecc2591eed977978b0a10f0110b5b4aa78bd239e
+Nonce.0 = ba727833ab46f22099aeb18f395ce0b2
+PersonalisationString.0 = 5def92be6ab65965f705d8d0881bbbcda4d0bbc11051d089dc6033d4d724459a
+EntropyPredictionResistanceA.0 = 3fec2f45aa46ca57eb5bb4fc85a0f148fc73637b9dd7c1de3a4fcb4dd7be747b
+EntropyPredictionResistanceB.0 = db68b262b51aee333080aeb17c08a8bc937a3041a8de2922d1b792f112643090
+Output.0 = a6b081e0fd1c64f9a08033ce5d743a1e466e70f45a5c738eeaa20856e42e4a9aeaeb4f5e8bd4d4b1042644d5091d117eb56e86b12f28ba2be742a9eb22414cc34417b9a67c772ad4b0c3b7910bb24bf27088fefeb6e7b91f17eba3ba3694e3cc6cab8f3f8a0254c25a62c8cd3ae022feb9e048f79aa3349fd4f87ae9ad3a1d70
+Entropy.1 = 264a54f98cbdcb7e23fe458509efb5a6098d33269420afb68f3d47f83f781a7e
+Nonce.1 = c721760d4af8230cb10a15ed9a69adb5
+PersonalisationString.1 = 0447b70baf31cf3c95acead5b0eee00c56e63edf2b5d53925438bbd6b1d31246
+EntropyPredictionResistanceA.1 = f4c9d83a898ed5c659e020b7bc659188908d5778748f8ee8a2a13db06abb7716
+EntropyPredictionResistanceB.1 = 9156933002ad5055ff95c4a53da37ff9b801ed60a7347062fa8293edee0e40ed
+Output.1 = 46bfc254f0072741877114035924bd60d3d831317dab4675c3aede5261910dd83053485a4d6f5e3851e13be9ae9ceec6dd4fa3820eee316a2543060bf47d2305e6d77462f94f52aed0e5df0ef60dc69ad257c650aa36db02d1f9616814029d9dc991c3d5349c472a0c4854c3f885e43ef10305012b3fb2786efcd02ce2bb05cc
+Entropy.2 = 07f7d321d474d5d019d382e0c2d9d74b3e90f1f69f61dd3fd5697498b2cf0711
+Nonce.2 = 3fdefce6cb7c22b32e5930e054227cc4
+PersonalisationString.2 = e305fe693fed3a81404d6e43d53f41438413adb9b63f2384c1c5329b9d868e29
+EntropyPredictionResistanceA.2 = 7acf51b645a201d5fad785e91b548dc1dff916d2779cb2bea33639cda0343767
+EntropyPredictionResistanceB.2 = 460733baebf10539cf5f3583f6e16e356a637ff009713e8f589e0ff2e86be2dc
+Output.2 = 48d33f97acd14f0ccd583ad4a9023af17744379ad168b51ea646816223e0461c4146b99e5878381abd516debcfc0214445c8b075ee3797a1e0488716fa26a3b4d01b908a1455d4379a8827aad84bed3525d97248fcdaee1953da4906601a722028d2a562b5f9ff33b3b336e6642f586db182ff695be4d51c48e014091a57e0c9
+Entropy.3 = 470a56dda43a29ea5c33a1608ddf19dbde9b5289acc9f9414a684a2dfbd6e4b4
+Nonce.3 = dfa79abc1b7cfe48693362f6ce63f53d
+PersonalisationString.3 = 990a1a8ec42c0df97f0e35d2c62bfca503e7f9d9035e0d50c7709b3c984a8ccd
+EntropyPredictionResistanceA.3 = fb228967ec076a4a0f96dbd804eed80686d59777bf0b95e3d4cb80ecfeec1503
+EntropyPredictionResistanceB.3 = c1b37359786e23ff75a6653af076efff9ffbc8cb627d45aa864f19a87c7c7276
+Output.3 = 3c0bb7f77f1e8c39dd08410c16f866e3ea792b5ca6c2ff16dd86c0ee29be39c6781788c61cd17390cfc19a220699e3eb91cd0da7b2e96359930c1ea52268ce13249ce35beaf80926a7ea00cdf823413821f9557ab18e0f27cb6be4727ffb3f6e023c0f12422680fdba4e4dac5ae26a348df9c377ce4d1f55f26c91d230b74503
+Entropy.4 = dcc3e88dd23276b51f77ad2edad1cd011320e3847c9b7f211f7ab6faab94e4f5
+Nonce.4 = e2ac58a6e9aea254923a0ab58e750319
+PersonalisationString.4 = dc082208b3ce443908e0025e5f9c61a66bdd463938b3b58e83967ecaa0eb0b43
+EntropyPredictionResistanceA.4 = 94b860ed611631d08c3e47c271eddc4fe62ee51ca30eb75d086aef1ec54e0462
+EntropyPredictionResistanceB.4 = cf95e97cc2f3b1422db7bd56fc7d056911c8c91b842bfd550a7b7c11b37a94fb
+Output.4 = 07cb4ef36e55847f6a3f932b0d8b102d2b2231fea6747bf35edfd047c1c0e4f23ccd8695dff643c609ebb0ec2cb2fe94f2d610a2a3359567df1d45aa1091d93ec3b38a6cc7e9bc6bcae7f2f180104219d81641e9532a527af9cbe1c88de873624369758f892cecdafb967f3ff7ce2173657f192f80cf7a2840ed9db9739df2de
+Entropy.5 = 1dee4d38934d01e40dc77d7305c5859018a651befedda8b38f9368c51099ca04
+Nonce.5 = 5e9d13b2917ad9e32db7f23d9966292c
+PersonalisationString.5 = e8792df8dd32440233bed3fb615e7fa61e2d227dde5b94afe577b1a59f349d0c
+EntropyPredictionResistanceA.5 = fbf71d55fcbdb52d458c813575928a3266853486b9e2e99984aa7252dd1e23ec
+EntropyPredictionResistanceB.5 = a7b779f6d0ff50cd32ce71f2f25f4e39c90f95dc614470e955a3533904eff484
+Output.5 = b73e0aff581eb8d71a1d82aa19ca852889e617e858d7fa7241850b78c14c7b4a9d0c87b9e0d1b5677a835f4a3f376ecba0e4a510d2e5818986ab5f7abbdb4de4adf544171b854d197c808a6d11767d92891524aedbadb1b840a03482d6ba5054b12dcb37b577003d67584c4b06e791134a6a3276f030361563799867121118f7
+Entropy.6 = a9350418c65aae304fc32f13d6755803c387dae0af55ae1195bc4c06eb0b2fed
+Nonce.6 = 95a1bcba84cbc4c8090a4fae6457d869
+PersonalisationString.6 = 355271182fd1a6a498974b551191f6a4e7b5911154577d9f2c04c2987f035740
+EntropyPredictionResistanceA.6 = 012295a992263d37cc51d8dd2b93e23d1175a29ceb1336c43e51d23e2052a9aa
+EntropyPredictionResistanceB.6 = 70dffeea8a7d3f4846098c4d7b89dd33aa2babed7e4f99b8d6069c31bff32e6a
+Output.6 = 4ba904f33f1553a710ebe333e722a1e8e00429aec3ecaa2a9864de0e9b47e35b3a5fd4feae0eb3c09bf28fcf4673ce2a9ab87b365827a05a5aa6e20e10a4586c283538ccb4540b35f776af276297ee254c634445246895dab4f55164ba588cf6db4f7ec2776ecd7264c67fb0bbd82ae8ad7601657b6fb92eecfb1ff69a1bbe02
+Entropy.7 = 5c07ad48ae96a6549a3af2bd50aa536c2638304f262036398314f4d14d0b97d2
+Nonce.7 = 9b935ff7b9061898ad13933216ba23d4
+PersonalisationString.7 = 99778f87bd1b30883793cc450a9305d196b115e6ba86313019189af2564a7fd7
+EntropyPredictionResistanceA.7 = 9dd7811e7774c778de0931602ad065d18fea8bf7a241ea3373134f2d04ce5c33
+EntropyPredictionResistanceB.7 = fd49ad116d546f719345ef6ce213826462f6e9fda6430f041f45422114351da3
+Output.7 = 6cd2e57b9fd9ef5e230b81d8c4679b824ab5162b2d5d16e6635f8da3f0a53cbde2dd90bcc8c5eb9c3b67cfdde2f0e2296ab05c483352b81c12b2949ac499237eaf36b041e8989a7cc305ebff55c1e136b532d0a9d1bc14a2deb143bb92e37ce1a12d695b2133ba499dc13dabb5259a56d7802c40706bdcb7a54f30c1454ff4d8
+Entropy.8 = 0415e827a053efc759d73ae27db59088e09ad4e49d62f255c94c050fb7e5956d
+Nonce.8 = 622f99b695fb26b1f16e76b7eb48a004
+PersonalisationString.8 = 55e79f5eb8b236212c0cf7c175e79959d2726b3c7cb9c387d766b2586e72aee7
+EntropyPredictionResistanceA.8 = 69de151a3dd02296e02a99a29984cf3e58978a3d4c46b2d33fff3a897749b672
+EntropyPredictionResistanceB.8 = 0003b0e784d15cb9625b5561f37535b81283e6b2cb40a48e9d0ef509756ba5d5
+Output.8 = 1228b0898a51eab14db2efe29eb6b8b8087a7bda9fafba3f985cf1821d5d59db0aadf83ff61d1b91614fecd8c9439702051d52218d75aa6a6bf5147ab40732c5b49d79cdf1ad195de30789238f5cb5c6c7929f7ed9139d58686179ead5c8de9541a5a2fb58a637f72e17e6cfccfba0c9d2f6bf2f9ec88fb705ead09d35c68e49
+Entropy.9 = 629eaa2fcb4b017566790db0a49983dedac472f42d8a19a7861274e71ed4c826
+Nonce.9 = 09d53e9569756ea702932de593827625
+PersonalisationString.9 = 61076a7ac17189c5ca881aa51ab8e39f1bfa26708a6e577adc451e604a9802eb
+EntropyPredictionResistanceA.9 = cf5c6fc30337059585e06f3c7eec0f25705e49d0006a9dc0e31429985d9267a8
+EntropyPredictionResistanceB.9 = 6aa88394b2846c909d7ba046d4855f57aff65252ace35f4480a3fdaeee956023
+Output.9 = 5fe05d8c9afe5c4488c9ac3897eeb4329aef3274d8cc1e9bbbeab1e9a9a0e0ad322073930c04574b1cae4ac05e2699cd1d88447a4ee0e48867bd42e62e5463fe3b4fa001be633f565f18e4638beccb9201a5341452738e8ba8d6798f56acb7a1fff4c2c5bb220652727d85d5fc6cce277eda58bb5b777a9dd02565df0e57367a
+Entropy.10 = f0ddc21f3b51904e27c6a93f44bb42e888045d42ac2df1003876f923645560fe
+Nonce.10 = 2dac6e228bf823dc1c2711a7b17a7d22
+PersonalisationString.10 = 24e78217673122b9c16d0fec2582392c2f47a9da5517e1fe1df2eaf520eaab73
+EntropyPredictionResistanceA.10 = 1e8a2c188254dbbe6e76d4a2b992500387904a46a68e77c796141bc3fe725c72
+EntropyPredictionResistanceB.10 = 43420e6a7de0549940ffc0ee88a0814cbc6cafba87fe482f840ac1630c691df4
+Output.10 = e7a297ad07e593dff7b01853996a7dc2ca85a01b1b37522704f8572d371962333281323c82a0a30815b4a4a80758e991d2ccd0912f4d73975b9dc4a6e6b974fb6e10c556d1e9e3c9e63f6c9c268069a55f84749208a95f1c8fc8d982f81172e07617c126566d23dfc28a0e8ae093f4db8d1a390b84354ef5854abdbb296b5f74
+Entropy.11 = 0c37c67c95a6cadc076a53c6b09b7bfad91db77de6f53fc977a18aa0f4a9a4fa
+Nonce.11 = 36665131ea2c5a5edcad01f14d2648ad
+PersonalisationString.11 = 5498182ea4a0ee2c8859ef8578209df33cf99711e7a34676a7c6e0a9a4a33df6
+EntropyPredictionResistanceA.11 = f1c9f1e7e85761258339f3ed78998a7d2199dafec0cd02dcff8b42060440c6de
+EntropyPredictionResistanceB.11 = 8cd5f4744829d785d86c73dc1d00bc29830bc332bf6ccaf9f6178a17b314b93d
+Output.11 = 82beaf55b3a33aba2cc25afdcb4cbe47b7a41bbedb8fce6b95d789ce1053507f540145c987c217059eeda8dc095a00f40b02cae398888a0b9e3ad516bd449b09d78eb6600d17822134b4a898549e02064c3a69e6a3e46eb849191f2e1436b3fc5a387d0a2bc5f61ea39bcd2ce7b32fe133d7a96c315759e1853aa51386249a0e
+Entropy.12 = 25a7df25a30bf1980586b5631a42ef114f43de2a03fc3b701c8a407af30ec9df
+Nonce.12 = e29855dad1030795e11f561e13582e03
+PersonalisationString.12 = 35ff404fbd5b138d73cecc43f127225fc8e94c7715311d98c82aa738eac52f94
+EntropyPredictionResistanceA.12 = b63f8a8d103b27784ea3d257cc85dbbf84f9793c4d7c66b6433d53b8709c4464
+EntropyPredictionResistanceB.12 = 41a048bc17ed0388ccf6656e20f6e504b824a0fc9d595d9fd4ce772db022204c
+Output.12 = 9d2c53987bc8b85e8f3daf7d8bffe53f401defa89ef78e77f9f65c29a6ab2d610f6e102be09c1dacb3255cbc919efb6fdaab878f8bc6c42c5f04a830fdcfca66f5f47ead0a573be7c1fdc7b0899a46acb83666b9f6fd93334527f869b58d1dbf7e53b46d407d4b3bb8cad667286695fa9b5ab369d80aa6fd80f2079a0a864096
+Entropy.13 = 7bdcc131be201a5107d028fc235f244ca682476769a84274d599e07b8d6491a5
+Nonce.13 = e827e31ffff9ad5f1eace49871c5f6a9
+PersonalisationString.13 = 448efabc7250f427d6543201385b471bea3c7be27e2c54bea1492043c63fb3ac
+EntropyPredictionResistanceA.13 = 0e3cf1a52beed5fc036143c36a639ed7b5bd13af35fa92eef11eeb0c079fd0ff
+EntropyPredictionResistanceB.13 = 3ce2b44f990a150f5148a55c74aa5900b15bb3cf4c3dafbb878848d9d6cf3bd3
+Output.13 = caec889b01d37569ca5c45224a6e0a9187da09cf08ccf86cf99aa829b2b58039b55b654724cfe4f4d3deef52eeae97e248a7c90e6232470e9d543a8bc53c75427825575a60e30b3b148d65a5089105920de7e779d2a206478bdc7589335ea38cbb05028725019b9d0a88f42cd6cb317ec96f3ee329fc92b03883f902d92c0be4
+Entropy.14 = 42bb8704427e61acd2bbe1b51f90ae609dc47fc5806d6f1c5534533f2efc8460
+Nonce.14 = 1cf29a45064cff269993c04f0763004f
+PersonalisationString.14 = 99fb53344bb0baf8fbd1a18663cdc1c564f46f4f7c3d305848ed85eb1ee027f9
+EntropyPredictionResistanceA.14 = 5dd6463be2b566208350dd70f0d7132cf2249ff1069c97a5fab5a82be8e6b132
+EntropyPredictionResistanceB.14 = b59a5c1e855d888a76aef8a2bdc0e6701eb7cf7d6d0da08c9e9764ac31311d3b
+Output.14 = 69fd03a37b267d6f2a9f338ba844a69f700089f3348c7dce12497ed6637e294b9b958ab36f85d986b1f311400d2e58bf5251cfda4c6e173e0a0eb0c25b529057e458951e8a9ca233f578ede226fcbc16fc95b9421f4db1b939e77110d1e7ba0d486aad8d62f0e417ef3a5f39145d05423113d8901493b866c3dff2a213ab8dff
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 3b774641bc457b791f3741fe5b9c53cab6e70f03a66bbc09d09155645876cbec
+Nonce.0 = 285768c3cd99e97f8027b1085fea17fe
+PersonalisationString.0 = 4f41cc7a12f508626d5f36a27ef28a2304eee5bfa6d450d83fc9fb973b354520
+AdditionalInputA.0 = 2ccb4c1b0e8fc162b3be45da9798951b06ed12b92b1fb4902321a3a07dd7c76e
+EntropyPredictionResistanceA.0 = 3b2dc3d0343518f4d993be852c56b908bd7f9510045352ae8df73597f5ec60c0
+AdditionalInputB.0 = 1e8c539bc7d1589233274ebd7700eb1df1380453df9a3681a697ee2fcbc6c5c3
+EntropyPredictionResistanceB.0 = 41adb3d559c8fec87d1192f0b5cdf72b7eacb8d3848fbfcc1ae01280f1d61592
+Output.0 = 003b81ce7ccf7101f1d47b1ea48918ba3f43d0d61de214df4c50c578a7ae35226f8ab745b2e5026af4328c6e900b6d9d53aaf76e7d88760ef1234ffc62ac67a6e8e16df1cb0d2e3ef42d57d6c6deb3bc6ed1a95022e12894f92ae55e863834b7fe189c94d571d5ce283d0d37d6376ae03deb366c6fb3a6d4456e1dff2d6388a0
+Entropy.1 = 56ecbe30f852bc3c32d75bfdc8b4c6e63a092a2b1e13780921a22cd680d196c7
+Nonce.1 = 3c874b5d844cb4fffd748632ff4f5c4f
+PersonalisationString.1 = ec42b9a1bb8f447ab558bd5df2abe1115f63c18d3e5343047660f576799204f8
+AdditionalInputA.1 = 22953c18b5c98d72e05940f4dbd77457c57a3469ea857e734629c80b57c03cc1
+EntropyPredictionResistanceA.1 = 8ce5fc9436571226ef0716d312fee954ab4ae54bb529fca409ec0c0dfc1d63c4
+AdditionalInputB.1 = 50b3e40ba561452b7257a7a3c5c3346752db05a4d910a524def772f91503756e
+EntropyPredictionResistanceB.1 = 06cd19192e58343737c3c73a5a5320bcd45bfddf19d401b6c59904e60311fad7
+Output.1 = 817edfb4975e9d816ccadaeb7ebaa6b37be18f8daa9e32fc192be65616f50047436932ffbbaf2be46558ce2606d57f830a3eeae8aa2380447609dda0ae6840c39764f614812733aaf40379f4282429dcd3f584b40e9c16a1f1d2cddf2a2ef318eac4bce0812d145304b8e33b37737e63db72724bf6a98fbd164d35b7b4aed0cf
+Entropy.2 = 56fc77c48ca3744fb3034d1b28297ad54af92bbc87d91ec0a7c0de79de66545f
+Nonce.2 = 9dbdc719384180afff92cc71e868d987
+PersonalisationString.2 = 57738ce210c7ae70249d2b75c497f226318e5b061c9f7d2cbc789a91ddc60157
+AdditionalInputA.2 = 15b79bdc36ad9ff051b181b7f1a18797f4f314d57520ac801640b7c3668ea49d
+EntropyPredictionResistanceA.2 = 2275086aa178c82ebe798346869748d499726560d709f127251b66d1c84c3f55
+AdditionalInputB.2 = 68b8257468c5a56b89558c7136cce0c4e1570310e975445470d8e106695f430a
+EntropyPredictionResistanceB.2 = 1b54632b37546cec17886b4d2950979cbeee5ef953385633e2cdc017011368bc
+Output.2 = 97c869f95794edafdd1d0c96cbfba056c3cf1bcf321ec8fa9e445c9382c1ecadd4b6c1eea03a2c7a035396b36e57f447c72e93f8f3e8bd0046a73e433225bfbe616df391b8445266a5e159cd72d64f506d330c6df0d6884c07b58c51375702fa9dc9467ba2bad9f41a61e092609cc511e4e2d2183f9c30948f7c0c9219d15ff4
+Entropy.3 = 22e83f6582ed8ee4f56e05f2babd0f1f397d77b2c4d02b2d8eb747ac87f3d346
+Nonce.3 = e40bcf2069b55d8af0fe29aca8e1907f
+PersonalisationString.3 = 4218f8a1d4bacc500a65b81eb0fdc538cf38b65dbf95eb18a97707a9e0664fb3
+AdditionalInputA.3 = 0cf9ff6fa761688737ed5821b02c6677b08895a41103ad8780cf4287890a9ed5
+EntropyPredictionResistanceA.3 = 048225ff21a99733844f0ddc825e68dfc65efacd02ec2fd20f983c079a49895d
+AdditionalInputB.3 = 6c12aba8e4d318419cb0e1c7aab78a0b5d53d037d9f668d904d1ea426121e852
+EntropyPredictionResistanceB.3 = acb548a6fa3cf904edc33c6724952bb03d7cc01525fe0f8586da0fa90ef13993
+Output.3 = 9fced453ecc2ca59f64ea41b5369b83f28e173ef76c086a306bdfbb7cd4bed702ce7206ce711b8d5e0fefb13046a5090e2ae233d9ea4b7878dac4e1985bee0a47f15a97c2f1f1e502e51b8d8eb781b3ba0563d7973e5182c282fc96d6b993a333c945b926e9eafaae0e5e2c6bfc3bfc9bd2a09c2f6c954e4777db13f67c03dad
+Entropy.4 = 4d265d242a16c95c33e5b19dfed026e9b493390ce432607c4ec34ec89ec7d997
+Nonce.4 = 55a894ad17c540fae0af5498e932c035
+PersonalisationString.4 = 97f03a7ae9c04f3d02f7c5132666e8b16cda0e7f3749e4cf82d73eb8dce07f52
+AdditionalInputA.4 = 032d40b16a93cfbbbe6c1a4c82396ee205f1f5b2a1e32660783a69fe837c8e44
+EntropyPredictionResistanceA.4 = 45ba51d056199a7b0b678727475dae546adefea9d84dabff561a595a2e429beb
+AdditionalInputB.4 = b20456bca7a46734afc062421921c56807e70d69a36c594ffc5aefdd85e5dc16
+EntropyPredictionResistanceB.4 = 81fc8ef7a124bc6cd5fac984760eec479781fa021a312d4db92ba2099a9a6611
+Output.4 = 22ba0bd9271445e0cfe0ffcbb4647d2e8ce74619002b1d10af7ddc8e3afd1e27019b89ea736c538f191125c8e4c7c652e14e45c4cb7b9124b902ed4f554b8100ac13199320557f528b9ccf5883ac1a43c0365915ee6f91b49556808455b89760f4cebf3fb69d0a66e14713a506b31c43ee4410cdfc139dff5128b12e11d559bd
+Entropy.5 = 7b31635c697a0c4c29845bcea9c6913cb9245b48f830069b62f5fcef00a43884
+Nonce.5 = b3ea17ab4be104868eb897496a9dcab0
+PersonalisationString.5 = de1b20e412810ceccb99f154fb3020ab7a777bb9aa9e82566801d465ceaa59c2
+AdditionalInputA.5 = 1641981befcef23fcd619b229e647ca5298a232f14e09b3078392a526b4e4098
+EntropyPredictionResistanceA.5 = 8d2d1a36b6267dff85b5f76612a949f23a8859ebbe6d0a27876528531c40ce3f
+AdditionalInputB.5 = 5a3ffa7f8d4d7802d3d3921030d9835029625fe4911cf37ac830c54caad0b750
+EntropyPredictionResistanceB.5 = 98a10460994ba000f25639ddc338222f17805e0d3d770f29d70ab0c1ea0199ab
+Output.5 = e1a65477f3a5c31503a7d73ec40cb7e518441f689fafc38afe0a2d961a537195d2ad0ac057891f4b8d3de4abb44d9b237b0669ac948ac34ddf1a41d6b3d185bc7782d182c215e39b31eb310b36eca9486f452a3ac163625ed2dd36e2011d9a795a990b062b58b1da7bf1092ca5bffa5d607118b6f64622cc9daaacd084c9f0b8
+Entropy.6 = 6a020afee23fb8cd52d7f9e56442d0d67e1d216e211161f6de37a2a3db174597
+Nonce.6 = 402da5fc991f2651386d4e91bb7fd93e
+PersonalisationString.6 = 3df2f9e8ea2244877069c569512c996a0ca35a9eecf4884905264caf2013866f
+AdditionalInputA.6 = 514f21cd9bce614098bde82ce2615e30deaf125e124e1a362ccef0ca9e2e128c
+EntropyPredictionResistanceA.6 = 706101c22f8a06800319f2cf8704f5045405fda8cf540bff961ccb569f358939
+AdditionalInputB.6 = c464b232c52d2cfb55dd54295fd4b937e90d5c9e034e4a82f81a02ef38417fd3
+EntropyPredictionResistanceB.6 = 578fca7b7b78468316565a82c2146e1706e438f216d9fb3f8b5a862045c0d5de
+Output.6 = 665c428d1c18cba544e24a853ede586cd8a7db77df36b6f82c9719d6e5aa2a38b4a3809b6d9f2d6d5f8c49ea50b9f21aae00554eca69a641023327717172ad96bace308b4a54708590d793f34f9546ce8d444d0ee5517cf55ebea41dfe372253e0ac26778c6b53e990f6a009c2c8aa1bf29d1e83a54334db18eae0896738d9f0
+Entropy.7 = 7cd1e60c431251dd4bf561030d803501e06ec62b9750c5efbf36f197ff378a24
+Nonce.7 = a96d00229aa514f1d8acd4af1b2a7012
+PersonalisationString.7 = 0dc380c3bc7ad062c95be11b56d2109d0ab36139d1862a2f5d746630916f972c
+AdditionalInputA.7 = 66afc4633e9118d0342b4fe670b39c664019b4e539d7247206d7ec214846c07b
+EntropyPredictionResistanceA.7 = fa5316edf72825326b600aa5b8920da473289ffbebdb4eb9a16406243870de25
+AdditionalInputB.7 = f390a0a4d51853f57afc12adb27ae428fa3634e35b06a953d529352b05532e9b
+EntropyPredictionResistanceB.7 = 11128e41221a4db0390a8454bb66fccb6f09c88765093cf226828e749dc7ac66
+Output.7 = 2c0bda2ff5f2e6a82822b71b6b8ac1e6785779a2eb501f6518aa803e1c603775137d5c6d1c5aa49e6862319cb5111a7a2a00f3174da94416314871d31e0bad1d6201e7e70d808fe5ddbd1d90a902a7c730352d2f162c6db20c72b96b650621fac0de7d2c043c3a7fb4cae99aabb0e4ab7ceb7d3e9ed2fe0ed7f2d98a0ea12ee9
+Entropy.8 = 4daec7d905ff7dfaa3bfb8cdc3a946cde42209efa01d7d904b91da206291f603
+Nonce.8 = ccc84555baf4e6b0eac04df61ee8748c
+PersonalisationString.8 = a051950cb3404d8a462d08a155ce0a378ea4f1155b0ae6357465554e5e9d1dbf
+AdditionalInputA.8 = 27bf9aca216ff24a8be2984b224d61ae9232ca2df66fa169a52f87e67a5f1ef7
+EntropyPredictionResistanceA.8 = a00b69a652e010aad658211f5b7ddf62371d14fc2a86b27bdfceb67ebbfaa3ee
+AdditionalInputB.8 = 51fe5232e6402e727d3cb8e3f20153f3b3048d35a1682ef7a96be87f2698ba66
+EntropyPredictionResistanceB.8 = 5739f8ffa4173133ab57b95a01fd4ca9fd27c7f27c983f2ed8a95787a6f0de58
+Output.8 = d464ac9e7dd9a6fc66bc9f33c8a28b16b8d017fc201a9fca2e554afd1cd3cb8f92667e64bfd63585aa9a3c622e5ecab1d595598b859dfae6cb350e211362f6998b22131579137c85bca7c8598d3222352a953f91d35ba7a408d6bf71a70be69ec3b93d16ad4d832dcc13cec706295426153acd653ac2d28bdb40fecee7e3e9b5
+Entropy.9 = aadb12275fdd5b29ad7247cab3f0583d522f6013eb7cba664dd48e01a00d493d
+Nonce.9 = ec8959fa8b63d8f1bcb7dab6e8ab3623
+PersonalisationString.9 = aa4168c6325cb5154143dfc28bac38bbcae4abb8ea7638e7c28b000c01900d41
+AdditionalInputA.9 = 209186e7ebdb55a506424269664681ab63847ebc59605e2f2610fd44b3576584
+EntropyPredictionResistanceA.9 = a78b783d5ac2dbaa70036728706a378aa0b90836faa2aa84067d7afe4c58d6be
+AdditionalInputB.9 = a82478d8200d05f2a6896c77600bbc632c166799b07d7d3815daf9501dc1d246
+EntropyPredictionResistanceB.9 = 42a8373682705305b9b61b6456622681ee5975896546beb98b5fda95d9d6565c
+Output.9 = fa8693a175f5cdcf0978ff95a6499e9c1c0d7997a6a92827fc752ff992b6c26a9c5a0345e87b8cd7c099516b8d85c59417dce82d3ccfa1d545240cbc050953942ae1f663877cee4baba052f883cfe87a6d77e973e40a91261902c2c9fed91d59f7b00d55a1c176cf11b9cb4590f4e7cb2be623f85e6f8ae3b61d135d65195f7b
+Entropy.10 = ec1485fa76cd8281ef01721d2a56c3433612bcd63b6450e721c025e014ad0f8b
+Nonce.10 = e37c449e686a573827c3cf725d45f8f2
+PersonalisationString.10 = 602012963cf51339e83a476d1e533b2bea5a4e1d9969ed8a7947faf266642629
+AdditionalInputA.10 = a418fb57245533d7dda9a4cda8ca2340a0eef19f0f87fbd9d18aaa46c7fbf684
+EntropyPredictionResistanceA.10 = 7173cc2acecd25ee7d1ab33531fab735560c96d145a3e1423b0c271dff85f146
+AdditionalInputB.10 = 2291dc6fa5ec83e261297e8dbea7b490842628f0ee255231a1e567654d2b81b3
+EntropyPredictionResistanceB.10 = 0112fa58bea32bb62206c149135731bca45adfcc182972b679974953cbe69575
+Output.10 = 9e229711c637f97e90df8c43748787148f5ad45ea103b5a1037fd331f4131730f47aa780b3e55020ec70cd5c7ec2b420ed983734c7fa9927afdb75ae8a0bb40ed48a17a508b8f169de2af231c66486d1350e26646427711585d841331b924848dfa1e2093f688fb83e3fb7429b90e56b2888b42b5f38d962a5eab5c41d522b26
+Entropy.11 = 2ee18da6808229e0aeceb83d1b94fb604f80df0368ef341f7942d09d60b376a8
+Nonce.11 = fc6b28eaca4ec8d10836a8a5fa3528c6
+PersonalisationString.11 = e97f2a4bb4413c35565c666bcdb6c0c2cadf308b6488a72f12d811d1b4d1faef
+AdditionalInputA.11 = 385ec67d67e28ceaf35dafeee9b4d975c846e2e45fc4df4d77ad7d2f1df4be10
+EntropyPredictionResistanceA.11 = 7ca3e3c9a7a2d5d1c42eb30f5a14a74feceb9f2abe81475779c19f25aa996d17
+AdditionalInputB.11 = 85a8ef4c13d03f6535b692f7befe799c7053abc278dc0cfbfd8076371bfbb928
+EntropyPredictionResistanceB.11 = 39c9ea6e11df9c99ac2b809ec227fe2d3c0e6f04759126b6572aad3e0a6931db
+Output.11 = ed1fba7f8b672629659c6c5ebe852fd36312eeb8d02dee121ab9aac0df80dc299139ff57733a4be061aa5481b9e7ccd52ce3af26b01735123573ea93fbf4257f757267739177ed7d845ef8c080a8c39be9dd894baadb629de323d9b71a1d23ac4a4923189c64216ee269be7d1c3b4286b04053273773b672134b493e75bc5ed6
+Entropy.12 = 9d71315955e8d936d30ff759ac378f001582acd7e152ac456d7b4397e0a4aa03
+Nonce.12 = bc0285ecf8b7a4baed25e7fafa12464b
+PersonalisationString.12 = 1fc0f93281604ace3663ca5aeecb5c4443f9f165b55cd3210cc94554ef1c2661
+AdditionalInputA.12 = 3c9cce1b037be9ac9effda8531978be26c320ea9355bf1e1684eab7479829f43
+EntropyPredictionResistanceA.12 = ffdee2bc0d1b7a6386d0e9201e66b64683c0eb2b0f06fb96438d7bcf56989e08
+AdditionalInputB.12 = 6bac6c504631aad3e2a05085814f75798fb68cfccc52f2eea27d422df1ae8f89
+EntropyPredictionResistanceB.12 = 18c272822f0e7b704187133ba71e57bf28dbec085526c4844c8d3dee5717335f
+Output.12 = 2a4ab1198cec53ca8e20cd1cc5cf2bff6a1c2e1ccc4c989e591d5285c462f26ff7d003a33c437e55fc6bfa316b207019a103c32fa1dba098e4f9058b2be71faa6306ec4b491d6c76db58989fb09791dd745c044d7072cd57e6b345aa1fbfcb38ac495599c287ad4a91a643e98ca4f31cad4b27cd9693cc2415b423224b2e8826
+Entropy.13 = 57924b8e5fdd094403a1a580990b76f38991127a69450bceee9474c28dd33e96
+Nonce.13 = 6956f3ee57bf3c05303453c0595db099
+PersonalisationString.13 = 81b619171a64ca86f5492fd719e6d71476da1962e5eb8161a24047c09cd95e61
+AdditionalInputA.13 = a79a5ed2f2c3264792b29a5732b0e8b2a9b2fe450450f79d2019d00e114e962b
+EntropyPredictionResistanceA.13 = 4db527ebe6fc6bddf8150671b4e6285c54f72bd7b9821fa5fcd38ece071b6276
+AdditionalInputB.13 = f8cf942da301f2e9d6dfe3f53c46e010202f7fdd62f3e68eb29ba390ac38672c
+EntropyPredictionResistanceB.13 = ff699fa232a35f312c4615dc1bc8315633f980bd09aac5a95ae3fcce0abe6a04
+Output.13 = 92d175a34e7fe402d6ba4798d7897517c10a2a15343f715f5cdeb8557926e3730d4ca4ff5bcd1b970210e28ff96e7cba82b020c382613a4ec54d960b2fdbba778fe917307e4042cc96931ca9bfd618f54987060d9de646734fc559e0472ffaa95ff7c9fd62887821f4e0e7ffdbf8f8ffae49393b324f5b921371b58956690590
+Entropy.14 = a930bad580f00481dbf312fbd687656fb7df571bbbcf828ca45162c49e022802
+Nonce.14 = 1d951a64abef666ae7a72860b3453e01
+PersonalisationString.14 = 5dbb842dd771cf692a928b5c8f9bd7ef11892127e550321ecf00d5f6c26df8b1
+AdditionalInputA.14 = f7d5c3a0669be6ba17ac83513a4e6eefa7f8d6451481b33044746f52a70a4287
+EntropyPredictionResistanceA.14 = 17085c6e692769ca4cf1a4a9b296a1892352042d08b6a041c3fa8c5c54018d06
+AdditionalInputB.14 = cba2a6a01cc09238e9a8e9fe56663a8eb4ebc186f4927042f7f19bc8e8ecf5aa
+EntropyPredictionResistanceB.14 = 4c691865c160d187f5c3654e3fa2eca8e818b2f6ead070dc69b2585d5d4589cf
+Output.14 = 004e5ce98e6f7a64a98ae577c3c702b8aa489148edb61e57cbb980c2383723918bc380e07944049631a8f88044a7954570086cb972c6653ebfa49a5c174f8fbb788005aeb7bbfba2039eb495cad2c23836f94bb6029f3ae3dc2dd8525aef77614d3bf5ad62c48ac56c1cf1155653243d4d10da4c4ad9e8fde33802d46026212a
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 33b6418aab684e7918539cd6b10306255318dab0a2797b633eadaf2eff570ef1
+Nonce.0 = 9fbff3e80b7f92a60b63e2c20989416b
+EntropyPredictionResistanceA.0 = 733c8f266d0053d793bfeb7aa5accd1fb870bdd25891362cd17e757eba569379
+EntropyPredictionResistanceB.0 = 90773f7ed8156c0175a42ec12315ceda8cd26ca29bd43d5658782a8968b0e2a6
+Output.0 = 2bcfd75a76bb427461425f911be489ab09deec6053211d561a9a876031778abbb971e5ae178ccf05fe776413a67f2a6adb18f9a37c7d631d148d2dd06c76de318eb4d9f00bd3d168878d1d2eed92663567b9d93a6761946b29c77798c6329656fbc4315375eef582054cb8b84348ea43c0d10cf651e27b903662e1ec817137c0
+Entropy.1 = fa1c2622347865f32ec2b4c19d7dfd1e04a6db2c010192062826499c1e9f41f2
+Nonce.1 = 113e55264d2357e012e9519e32f31f5b
+EntropyPredictionResistanceA.1 = 666165e1863e6b56010f50ea4c00ef94e2bf79bd63541cdfcfe7557fb840cf9b
+EntropyPredictionResistanceB.1 = 9b284c20fa87a7df42ed7e0d5c7b2e31fc89aba55485c65934facb19e4173170
+Output.1 = ef547aaf707bec810bf624f587e63c3477c5099d229746df28a15e5d2598a8f425354db9d79ed54466c64dd394610576c23a577476912de321df3afde18a78506c2a3c9eaaca3755c72a05bf51395b2661ffbd8119d2ff7b4415d5af3dbf2b4f9e69a764461a9c306ba87f0ee8fa6e42fc70466cecabf59d3e2da102d73d5a11
+Entropy.2 = 2c431ba728e5d883cf5ca11c91befff4de8deee112f0e331f33265f78c5e19a9
+Nonce.2 = 32aa44b282c090be69537a4990b516ad
+EntropyPredictionResistanceA.2 = 67bd926ed6e1639462613d415910f842b74e82be1892f060c8bf5668178181f3
+EntropyPredictionResistanceB.2 = 94f8d048532798bbfbf0b26cc9454084a8e3b00b2e87b7d43503fdbb1d4b9387
+Output.2 = 3bb3a5e9ad3deef7f8f982a6ae780f95fd511ff74070bb1a9034782d90a66e2835703882517804a1fab692a50ad3dffdeaab02f629662042956e76392016da2544d7ccd2deda86af132279ba6406231c17d30d8b45a25755d09e87acf8d5a7a93ceb30bdcd2b109aa4f95995a76bcfa81ddd43bc6033d4646064ab8409a7c1be
+Entropy.3 = 071bf847d65e9f838959c156ca6a6ec159002771c5cc127640ae0080c78365a8
+Nonce.3 = 64687c2856a6c818c8c1478c4108bcf6
+EntropyPredictionResistanceA.3 = 43dfd97f8ad5ef1851b15a03a8135f2d3a1470366622a8c047fd66d7fb942c0a
+EntropyPredictionResistanceB.3 = 4f43beb13973d5adf8b96d5da1676eed6707888d39b377ca61b740773964d62f
+Output.3 = 1eb441cb6df3e76d5dacf3a2a8d88e1adafb157b3396cf65f0ae1f0f477b4e343a666a4dd0fbc3f94093ff4a8f37931832f6fb1bcd7eecefc9edd60a8d4a00c61cd078d11c2eb124c2189d05710c36e3de61753998155aecb46ec88b6364d768464afd42283cc3bdd8f3ae7a49bb8b7199bc662694c3453adc9fc5ce410b59f6
+Entropy.4 = c110c866c072a66fc30712732ee7158b1bf7e17b835a9961e2a0b71c936ffdd0
+Nonce.4 = ad08c3983028e321308c7b43a68f2434
+EntropyPredictionResistanceA.4 = 9dbd5eb2647ae8069e040c2a8c9eb672cecdce191482dee6cfc8a6a9fd5250b2
+EntropyPredictionResistanceB.4 = e29fd2d3bbe31e2e00d769e522de539c54ed2169bcf23641700f7bd7493ba50c
+Output.4 = a3e0a53dd137db80ac10e67a3bd3b6538a98e2f0bd9e2a9ada986bb42448239488fdf33e2719241599b429a50bf3705810b2bf926f2b07cb84994c91d33634e578d4828975eefb42943aaf2e65a93f656a07ba6f2df608d88ca43d29af430ce949f6f6334e524846d1f28ab1a34f3d514ffbab5c2df1c9ad4036c9fb0143d329
+Entropy.5 = 6c71a4e7592e9c339c359be08103e2d1627e649dfb018a3d805c3250de3f5af9
+Nonce.5 = 27e9456093106925d0cee46d486c5940
+EntropyPredictionResistanceA.5 = be6d267af9a93740edd2aaa2e77a641df9834582f2043734afdceb72e1b70530
+EntropyPredictionResistanceB.5 = 81c94a224847f17f38a8543ea48ed344f4fcb3d5d67aa1dd726267c468cff515
+Output.5 = ce2d0ac46ae1a4582365612e9d7cd34809cb8a7b225312ded983eb9a6763018904c73f9d99365b7c6ee44fe78e31bdf79f7cdc61736a131f7360e828d86bbd707c9a11b905f00f4c249aba2ac6ea8da9d4f604f3935da4c38e986766edd8f1b6efff406bb4ce06798faaf6c5085609bf126ad58fcb51858fbc3e9c9427287ad6
+Entropy.6 = bf310635f86d255cfb260dc6c2126c151c2c473165be5f9473d49a0e08866212
+Nonce.6 = 90bd01f549b22d5445bd2b9a5669a68a
+EntropyPredictionResistanceA.6 = a5c599adf92808c8a8a2fc0c2d91acc184802c9ca8017ae95be9181cb6020749
+EntropyPredictionResistanceB.6 = 4a58474c4aaaec0e2a7116b79ea0c88e897beecd54d6f80508cd3aa951cf8bd3
+Output.6 = 21f10b9816a9ade46a558c03a23aa2a3875c3862d034e09665efd1e5adb4a2a6cc2d93861dc76bc052c1badff43d9889b7e9dbdfeaec50e453e4b56cdb0807c81ee4e17c03a77fc4a3a7c859083ad63b83ea44b8f4dcf3583416a2a529f755d4e48cbef30d3e5964a21f1333b87b7369deb18278d17858c5487102031657f6d0
+Entropy.7 = a583455b8fd2deceac712349b4b33953cc77d8c2772d4b7cb87ded1d66b33173
+Nonce.7 = 8df249c98fdd3f20e65d0721fa50b342
+EntropyPredictionResistanceA.7 = 2674a8f07f9f188759d922af0308e8e70e3dab1488cbe6502d7d4638549cb80d
+EntropyPredictionResistanceB.7 = 344a6ee33dba54aed6917ff7d500828c9596d69200341effd6799246ca913964
+Output.7 = 6450aa0d3957e8e9f319b0fdfa2e4f9cbbd8c50aec0e0a357d4acf004cecdfeff4be675f96871c73e6646cba4847d2d5cd6caf01c005aa85f7c3b51da56ab8fff283249938744961c892951e93960a63ac7c800e57defb092db0727d4c0b29c3c24a4c0bf9805bed6b7d83f5c7c6fa4a1dfdc46846d66f4f27e9eb83ba8604ff
+Entropy.8 = a2bfcb8ae25d18d9154122341816ce6301efd24821df7d3ae42be903604d5b24
+Nonce.8 = 302f81083dbb58b89f5b528097f0257f
+EntropyPredictionResistanceA.8 = 24f7205fef16587c2a59098fc48d7784209d733fc2f485b86f50697f7228df13
+EntropyPredictionResistanceB.8 = ca852653c7d46c99de21497dfed719116f4a0d7d95044e1187a7ad1bffad7611
+Output.8 = 7d78b003ccda0d4b46cee31867158973552f80a0eb719ebd331a221fac26f373c5cc7b0f69e8e7d1ea518c0375014023720d52017754ef039e78abe72474e148af257b1ec53a7a67d2a878c27cab37473c2a5b58d862df60e9af660ac204ca157fff844648d0a06785205bb1f7ab51d717037a5fce9e5856d15daf96d0b99f8f
+Entropy.9 = c030a718f8b2f117e2f9297f6e0854dc780aeae2274726ae28b043b9efdfbbbc
+Nonce.9 = c7e207f6ec75b8cccde81ef66078606d
+EntropyPredictionResistanceA.9 = fd96fcd04a84316fb547344df4f3f6eac2e33f563e44955a9b03228ab7b64702
+EntropyPredictionResistanceB.9 = 0fe7dff7fc477fcb8ddaf97047d1cd5e33bee4b3fcf8feb98b0c30bff17b5419
+Output.9 = d43302c17d6a7099237b40d437240cf16af1700d1ec491f39bff37db3780412c19d0f72921dcd94840079d137fadc596bc71a117005a379ca1c1655f7469a29b3f045b3ddc4cd3c5d3ab337d9738a0ddaa24132de74175c13a9c1e7b9b1e2af38df55881cc220f2fedbe8674292b651a52e6a190ad8fed151133a423bddd3932
+Entropy.10 = 9d98ff6cb93e0218cb6be91d808a14a5f2a15053136c4cad633decfed91837c5
+Nonce.10 = 171e8202a2b0385ac40c8d33d911423a
+EntropyPredictionResistanceA.10 = acc7c5efa4de9101585a403aab6e6bb88435a96ce453fe34b2028ff807902382
+EntropyPredictionResistanceB.10 = 1f6c71c37148c977943b258dae78ca30a1487f739806c0b240adea49ea4cdf1a
+Output.10 = 703acbc4e103490319da472ce3cd8c878d0d19b138cd892ba473b4a6057da657f24d78153033461036f18fc71bd2b63d6ad2c6857bb88aa60f7b34572536173eab1080f61fa19b5a7e08d020668520b2367a905bf616c6229df4705f7580dbb034706b7383db9fac08d92533750d8d2cfffe088e1efc6633588214eab3ad52b3
+Entropy.11 = 111f784a864c8d251f4c3ab972972b7a03d3fd7f61dad052fe8079f6976f1f6b
+Nonce.11 = c5483bea2aff06f41f3ffa6edd472c00
+EntropyPredictionResistanceA.11 = 49b4a2657383223d494c41b6145da86e1012bd13c9643837e2e5b48c8b148e99
+EntropyPredictionResistanceB.11 = e6937240725e19a1e99257c1d99c5b713eaab5f31c35334443ed75b5a9b4a5de
+Output.11 = 486bd1d387fd6e7a1122d8686be1d0da0c5f374544ea5a46c595edf58cb1be7ab9b376f63814649fd8300abfc343039f8819135c54ec0b5fcdcd10e06e532ae83d89ed6173bae44be605452d2a9b10232a7163ff3b19f8a92af2adf8ecbd91e6b3f3c7957d72ed6e103193ba7b7afef4ad26461e6726767c8797f759ab6d8e4d
+Entropy.12 = 0ecbc66c6edfa4c2049a48102d62850ae184f5bc502b9c6a61d29974e79a2020
+Nonce.12 = 6a4786c24bebf40def15511385e3ec0a
+EntropyPredictionResistanceA.12 = 1d03827f2286179f8c58a59c29d6db0e7ffb02e432f11141cec3e9b092b8279a
+EntropyPredictionResistanceB.12 = 5cd2617335109981090400d4fa42c4947b82a9bb824651c152bcabde47d794ac
+Output.12 = d1e409b80d2d6522074ee2dcb3b20a68850193afe28439ff55a808f41480c7e24ca10033772ef06bf986cc5a1d0cf7d3748789dd09f64402c334fde23fdb9d66c0a3a0ac2e895a7cbf99fcfbe2c89385622d8a036664145da6543dd58146b84b0016beb6af0fb79314c9843e08f95437b72ae446d70d93e7e18b9573daa941a4
+Entropy.13 = c5b903ad77339bcd3801c5379421b660097e1ef033deaf1863d5d5c6fa967488
+Nonce.13 = 0155ab6be7ff3edcb84f7ed7394452a7
+EntropyPredictionResistanceA.13 = 85110508ec079e35aaa0f4806822f0dedf099ea4875abc789f8c1efd085f8f83
+EntropyPredictionResistanceB.13 = 1ae68c7037ff215c214e4913609c5a903cb4597ec51104ef1cb865dba8b9ed22
+Output.13 = e6a6a59e8474e7d325fd591346e2a93d2a059364209f028634b3d7b6025e66e218f7aa815e91c77585aba51c663e5db2a597aa7ebddfd6a15f20831a44b1d2e05866241f503fbfa78956f67d3f1755a089a61819294181755c2f19055998464ead4d8a5a95620368a143f425d513701961844b51916d4e1d4c438ee332e6dcb0
+Entropy.14 = 15525599dbd7ee06dfe287c87055e2ed1717016f9e1584e7a4f71cfe679ab320
+Nonce.14 = c7759139838066f1fa873cdce6a9c642
+EntropyPredictionResistanceA.14 = e67d0f28c142a83bab1572b0b44c83f0fd9ff3ccc2efbf2ff32b95460e833966
+EntropyPredictionResistanceB.14 = 5b7ae1170e439d0f9b8d5279fb29da66fe280483e0dbfb6e289d63b80c0e9662
+Output.14 = 4168445948f0108eee7c346820bde513375c403736ac22b6b51a0237ce84c9f6ec3f85be5e5af9f1a23123692794704825c4e1935ccf790413725fc44ff64c457a58a700265c04dfd9674ecf952af9105b0b62e9f2867aa15cc18077063f1be603a4fdb0060a272aae224bacd1f45d172c8fe03ae1b4dc4616bb47be9ca6fb3c
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 241db0c65fe93bf86f5d9666a8843193a150bdc236a81d99ea8ce4d8fc0f2889
+Nonce.0 = 9101403358eab7a7b360f1829ead85d0
+AdditionalInputA.0 = 407f32f0d7012562b3d948ecdd4873f4d646eda445adafd0bcf3f96a02f92759
+EntropyPredictionResistanceA.0 = 11bb43c7194260aecc2f90009e8042f0ce6840fc4366d33bbc68c88127d1ca73
+AdditionalInputB.0 = f1d33c82f962242ad053e5b73ccbace8080368776464a9c8cb7f2ca540d8d634
+EntropyPredictionResistanceB.0 = 3476eec28771ba8c5a4e01ef5334341c16ff384698c36c6835d5ad8b21ebf25f
+Output.0 = fb3378ee14ef4e5eccb4cffadd80c54591626c4da22634f85330c94db500ea9a85bacfd5ac1a9cd119ab4bdeee9dbd659dcdee12f0b7d4eb0b1f893f309082c9f98cb1ad03cba517cfe4d5587f70b81251fb9c7cc61f33bddc306be5a3c7a95a845acfe92e55ce4f2709f232ebdcb89bef9939f3608a35184dfef890a7555fa4
+Entropy.1 = b7384aafdd24ed06e2699ea66cf3f34b2c66c354a67184fa2dfd67bf614e68bb
+Nonce.1 = acc8732e4a0866aa5ae9a6e8d008fe60
+AdditionalInputA.1 = edc75bfc8efad1214eed6243b865b1a57055de33185f297598b0b6e650d9df59
+EntropyPredictionResistanceA.1 = 84d9fa09631b77e3f271a6b24f1462c7494b2f50a2c2a04c4fc410625f5b6928
+AdditionalInputB.1 = 7a4da55107e154b627dc3c90b061c9e6349eefdb139bc3945f18522df9c0f8be
+EntropyPredictionResistanceB.1 = 4304be194fd222d851943e6aace2af7d5e0131ebd0e1f589b5a648cebb83c815
+Output.1 = f5cb8d25c86fac77b538a9dd9e06d531f1a5dee96fb098c19da284295de1d553595314d2a3e797cee20d5a9eadc9632a81d527286fa2bab589ff3b8d2d548463a5fd52393a50673423f8137b25230094151c44867f3d8caf9ad61391c114c04c3a08ea08c735d5f401034829ba01b37bd4e2da3ca3fd3b667739dfaaf301f1f0
+Entropy.2 = e93b7e662a48e82b91e2a3cbe4a5b781ba24d4d2e90f841015cc269bf9113789
+Nonce.2 = 084b976912aa9f5bf02d3f1c215818ac
+AdditionalInputA.2 = 5230df15e0f5fa810b90365fb198e88957cbe5732a99444c150dc4a7facbf747
+EntropyPredictionResistanceA.2 = ad6a2b7a025c36d51edee72fb60007a405485fc92b842c68c9d3f96d7d0f0274
+AdditionalInputB.2 = fccf084700b8e47ca1d8819477935f98e503b289a30585277591c2816d4d53d6
+EntropyPredictionResistanceB.2 = e04d4c2e5efb664972eda2635fe7d5b2a3de11d82b8f93f1720def0c927a1aa9
+Output.2 = 4b0fca01272cfafa724843ba43332aacdb6cde730f31fa7bb8647876c316af92225f14ffb75da5abba23fd7692665723e7be16a7adaeb7868e3ebd45195a219d004bfe24b65359bfa6725b4b9ef136f17d0a88155fb2d22453a6119d04a29ac411816e6b6fcda562c8493bbc48a78e181a1f6145a841d849f782b384f5e54107
+Entropy.3 = f04e589e3e78380dd9472f3b7cb475dd9f790aa3520535f4cd97999d5d7e81d4
+Nonce.3 = a5dfe1142afc58001b2ea40453482f14
+AdditionalInputA.3 = 8553a58dc97fa2490c6609188cf8e31b6b7b27d860f7b7de93cca4ee8b6c3e9c
+EntropyPredictionResistanceA.3 = d844e438251af7781892eb415f4eb272c3357ec94e9ea438e538ab17f513cabd
+AdditionalInputB.3 = 0a4d042b26210a03e90c97c1c00c3fe7e77244dd83f8bfc3fcc67efa29cbce60
+EntropyPredictionResistanceB.3 = 5351073fc7da04c103f859b5c28bffcd2b8dfde2522e7e0af6c2bdeb40e6324a
+Output.3 = 0cc727e6e95f8216a5510832320e34d51a4c1371c55efaa6b3f3a9d968b6f4e07e24316b3be682437a75287c78003fc2ac3d4a56b034006aaae423fc573a50837e0f1adda756cfb1822b72314db757bc26b432bae2ee280565643551d2fa78396c0479e5900fe5233a6cd05e7ddc244e0917e3b560d9670ab7d115c00004661e
+Entropy.4 = 3cfbb40665ace01f69d9b0b41c7911e88f76d12ef90ad69735b7978b94ebeaa2
+Nonce.4 = 3facd931a65132d0c85f20151cdf4e30
+AdditionalInputA.4 = 07e91f78fa7d7bc770c36e931cca1f8e3f477a10821d75077b17dcaf9355dfa5
+EntropyPredictionResistanceA.4 = 4ae80a81c06305b7ee9073265d4df42414b7b7294fef8763a2eab0ba099400b3
+AdditionalInputB.4 = d02187b1ae1ba4e2f17b382ee379db0b396f12ac5bcf675d23686500c39994c1
+EntropyPredictionResistanceB.4 = 5fdf7ef5e3845ff961d20c77a733b7be4a685ed6226184eb1822b360c01ade74
+Output.4 = 426aed5278e5e1e95f3102a62643488d7a39e8568cbc0d7f8807a0a6780b5d9ce809fec01767abe14325467a14981c007adac64f961b7de92f80b80476367b87664eeaa33c2613be058ad3a62c7f47f10af3499b561cbf545146ff5f83e23ae0f1a34f10c16395564accfc21ab4f3a748873f846a60fb3f5abcc44716191d74a
+Entropy.5 = cb94a81c090b6b321b942ca8be9beaab76835dd59ba63341f240bcc13da0c34a
+Nonce.5 = 880e0e413a43546ef68a256c19fc43aa
+AdditionalInputA.5 = 001b0f4511f9415236fda1292e8208017830a73289c69dab0a5fc57fc95376b1
+EntropyPredictionResistanceA.5 = b34104e36966473ca8f89bbf4b5393767e4380fd6aa6780d1a4bfad88ab0af5b
+AdditionalInputB.5 = b9e03de4047ac05138b89761c1ea6ef9354b2f942138727ad109195d05b049c1
+EntropyPredictionResistanceB.5 = b5be7aa852f7aaad24cf16b306b927efc9b5c2b71d68e6421067ba5a96da1d46
+Output.5 = 8d791be2172d155317e6d3ffef795fb1cc77a90cf6338949ff0f964d5b98dbb8eca21af22487184e0aab5854778d6b0bce7209881bf1c89c9cb72bec4645272b2f57d04876408fc9a107bb845e850a41f0069aea59e92234f33dd05929bf2a1ec0c05d135e7efdeb95d147f14a235714216a6c9fb5cb25207aea042365f5591f
+Entropy.6 = bd1388daa6db0acd5732fbf4f5bfbe4408d6e55422cc6d3dcec4e61bd51df4b0
+Nonce.6 = aa268b1ec9cc8824f540ba04ecab3226
+AdditionalInputA.6 = c69dce386f1eeecfd279031d23cbd681c693915c92875bebc606d0bd5d050af3
+EntropyPredictionResistanceA.6 = e394d9d3452561dc0eaac4f1e9cce4a44d7d0e73158e9c07db1388fcc800824f
+AdditionalInputB.6 = 00dd9cb62230c971548b447aa8058686736d4fbd74f84fcd2b6e4308733e5fe7
+EntropyPredictionResistanceB.6 = de28e98960c612393a4551c50eab88c5f96de3765489de3b6dcff0345bbee93b
+Output.6 = f5f516a7b77603f07a2033854ec34f60ae74381fccef13e00edddfe92218229ddf7648312c9b8885f4b78de6fa6898d099e09bc2843614a911b0736128b16610d7ec9940f3bc52686005900ba62ac422d34594fb1c722da6b9e4e741b2c2ea407d61d026104517a625b6be8bc69c25e61e4179240706c99b8d020d0a2aa86d08
+Entropy.7 = 183ca4de2f0eb11ceb9e86faaa7d8bed87139af9523423ce0b31342705563a06
+Nonce.7 = 690178585dcfbf011777de42b4dcc53b
+AdditionalInputA.7 = 4b783ba78cd8b0ecd9c9aae8e550e091753ea74dffb69c18d7c46508884c9001
+EntropyPredictionResistanceA.7 = 6cc014ccd798470d453a2c19aacaec56dc85b9894ed4d3293ff99e86ab6b8356
+AdditionalInputB.7 = 82707c52b9a0b73eb5212f08ae85bec349182b8682506f5be3f1579fdcd8ed3e
+EntropyPredictionResistanceB.7 = 417e85b3e3e79405b43eec82da6214abcf64990406504fa3ffc794228fa6a57f
+Output.7 = 484888e1bbdf5f4d5d457a045f0156d4fc9f41d30c40b249232c32f5fcb4b2af3022695d8b04b45fd445f0ec5ecf38666c4defc185b07f1559b5559d87980878144aa9a58f2d6e84ed9cb9a015b0e1463c1942856528622c4e25a114cacc3c646dab78cc66e8237a6b6c606366cca4b9bcde443d2ca9f3cd2a3c4571bada7551
+Entropy.8 = c17ec71a34e4637ec08f21d7f09da76f13e2d6ce3b0a1a4532a8d5e553490fbb
+Nonce.8 = 696fe77ca7bc876e93bc6c04ca588f8c
+AdditionalInputA.8 = 7cdc7e901b184cc41bb7ec22fc4c410249beb83603203aed8245abd678af65e1
+EntropyPredictionResistanceA.8 = 1e4f15ea0a45fe036222b09b3ffac6c8cf5cc1fe21ad8898d5d65524e3479390
+AdditionalInputB.8 = e5d0b2d3ae4e5b34065afe7b4a49dfa9a4f7fff7b25373f2930e391b36ac00dc
+EntropyPredictionResistanceB.8 = be0e709d44b916bfebe127c679a348cabdbb7370c283fec2628a7128e46fbfee
+Output.8 = c8c11cc77463cf8d38b4223cc1f380d6ebf44a2588e7baa551c54423340e1e69e31d5f11301e17008228f8d7669394b51073e3ad437985180448d59c8afbe0ed3d3f7c6790ca5c4cec9b6509d344a0320a14a29897cf39162e3c525460f3a5c71b8022318b2ec2d3d1804124fce222be1d1eccc6f5ed303d075ba92d3e9f6c3d
+Entropy.9 = 7dbf2bbdeef4e35a22d0c42136c62a267acf54afb2c1c6dac487a5625bf8d67f
+Nonce.9 = 9d87943a9faa22cadb7a8b5ae7612ae9
+AdditionalInputA.9 = 53a6cf8ee25a0c9686254cf575aac84ddd45d121b77053c33991644f586ff5ac
+EntropyPredictionResistanceA.9 = 85d99901c51703eab129e19d456c4d01724d38333063b45f0cced830559af262
+AdditionalInputB.9 = 22804d4a65eebd0160e429593f7e241b9a5ccdac803b64b9120de608133923b8
+EntropyPredictionResistanceB.9 = 4a54d8cdeb8d45d4426e21cc7d5c6920d86fc19a2dc133882e743a67ff303786
+Output.9 = f3413093114a47570bf5404dbf138675e30cc2d4e9ed93541c246d6bfcd17f81505fcd8f538ea5cdbd85bd044b61f99c7be4b90f4f40791d19ebada562d373ab8452c34cc5b2faa1db689bba0b37a87908532df02ee3769014a895ebfaecce2851664de367057b4f95b549e915db2e1819ed4c3844500656b223158efa4df5b0
+Entropy.10 = 321db19f94650e37b0a75a6f77c579991de3f3e7ce777d837bb0a77a99b39755
+Nonce.10 = 466f7a4a9974ae8d03defa260a621803
+AdditionalInputA.10 = 2b550058acf4d78090f6c3dfab70abcffa5c1e949c84a8f7c2a334451698f4c2
+EntropyPredictionResistanceA.10 = bc447c46c06d0bdccc91c2ea8c14b77fb95ff00b3b2219f4857f270893745e40
+AdditionalInputB.10 = 9c37a92e6cb71115cf7d0b8630eb919b9cabedec66f5e2af31aaf1a657a30ff2
+EntropyPredictionResistanceB.10 = 671c07334f461f665ad0082eda46e8ca3b159ffc16a6f879d308bd0d0d11f0b5
+Output.10 = 233880a403391bddde191d429d689d9dbdd7f5ae195711cdf6718a61f04bada12eefd4a8cc108dadb24ce6a72f82c80357467d32564548b771dd3a22b66e4d5df72139ac8d855a1a91aace6568292967ba9c2f454dfa510a4a90dd5634f67f370d343cb9cd03e12b3a4d6c80c147c087ec66226b324048fa2d8ac623688200d9
+Entropy.11 = f544a953cf6810d139243bec5075db230618fb00ee04b696609793e8ba653684
+Nonce.11 = 1b0a45fec47dd5e0ba0bb17733f5dcba
+AdditionalInputA.11 = eff681e842cedcd2a719cfc29aa312f4eb5bccb589e9e07bda524ded7c1b25b2
+EntropyPredictionResistanceA.11 = e4a203714c4f44af75f557e775f23124f6e73982f7ae604cadfb48f639235ce9
+AdditionalInputB.11 = 21a611449d5be25171457e4a2f9899a691a7ac8fb034dec084efc0159d833e9d
+EntropyPredictionResistanceB.11 = e9fafe2fddc5d6bc1edf3a979f406945ad7f46538922ca426d9e6f1fd0965f0c
+Output.11 = b89d0cf4dc07a4da5a98e676e86d0a5af76c07365dfb7d200aeab3dd888b7a54c085c83f4cd9cefd99fd657df5a6d93827d093b8910e50dd35833d88f08b7260b4ad5accb4db30709cf8cc1a1608546ce612a298e540d372b88ef8e4026ab3a80f6d6740e10e480125e8e4d0a891ee416a8eb5419129b4daa5cd54a060bc7e28
+Entropy.12 = 84350b20d8981b3a7129109c9ea48a7f8ce164c3b7592d0f428ee754c3a1051f
+Nonce.12 = 59b73fe2d28dea7aa1ea132a1f63011d
+AdditionalInputA.12 = 7b6ae6af81f9cf144d8e4615967c21abb6d919f53d9447b5f3614b92fd765bfd
+EntropyPredictionResistanceA.12 = f7cb64ff854b33af72aae84d05c62d972ef0ea9be35b6e8b464c10934f8e31d2
+AdditionalInputB.12 = a65401e072449a7b350cd9f62fdb2180c4a05b618733abd819f25ad35ae057b8
+EntropyPredictionResistanceB.12 = ec8b8f74c4b274f9bb30f8b3bce59ce5a3c5a2f0ebf4ce07dd05b707269b8ad3
+Output.12 = cfa349a3771fc71f4c50ed6a10f7a0f1aa00f1bc374144c650f080fc966a4afd7a1422ecd13de4b5f2755cf02e0adfd0f43c4c567b3a0c3ee297dcb36c91dd2b7eb581bf2eefb204b73e796262dc31afb3684bb756f43eefd8a11cb1c1e85c3262a91324fdc198ea8c6c1e66f504c1f8cc51f1a71cbca42d4409595cb76e844a
+Entropy.13 = cd0695b21ea6eabe34a05cdbcc9f02bbe39de2103f8164f0424e53170da47e3f
+Nonce.13 = 3cc5ef69569577e86fbf10c5c134c938
+AdditionalInputA.13 = 7ffae2b3329f972962791076338e61bb6c75683f1eb3788a31f04783c6d91613
+EntropyPredictionResistanceA.13 = 93d88f483e8c689734314493de9491655a342cabbe12f386432a3fcccd0267c1
+AdditionalInputB.13 = 7424ee5815d372395cff76ea9a95a9a56709feca0c42f92c8d49f303b08f2e54
+EntropyPredictionResistanceB.13 = b2763c2948ac9bcf68d9d47baed47ef11ef117aeb240ae69b99c9d896cd4b9c3
+Output.13 = 2063036ac59a3806a7e04eff0e5d2fb9a7daaa92c1f6b2a1621fa389e04063308d6a6520188691163d87699372af9762d1c97fb58f8c80c0ab4c0788bd9254ab177ea3050930314923dde81ab00b4b05f6116c3e2fd4149b4e432e0d85489ad056f581af403c723c27a198385c0d927edcc7d9729071a9b7ece9d0a011d566a1
+Entropy.14 = 61d330924ca3684e49515638131a4e465fee0c283277b512dca9fd420c81988a
+Nonce.14 = b4bfa44d364b73a5f86e71d93a288458
+AdditionalInputA.14 = afc5b10ee67d212d20d9381466ae5eac384ceaf0d9eb75b6c9846d0ec9410129
+EntropyPredictionResistanceA.14 = b7dc35809b58fb17bc1e74ffa9f402a27893256aabf4137ff938857b21c7d80f
+AdditionalInputB.14 = e5cbbe21f36bdb46d389a479bc23ed7162ccc9fd07e3c15b2af38da548447ef6
+EntropyPredictionResistanceB.14 = 524506ce82bc8e9813b12258b87eef1021c3df39de0b377529c3614a88a5ef9b
+Output.14 = 942432679f040520258501966ea68fb5044cb44c4d02b0eee3041d3e43e3c283e76d4bab79305d16888b42581ee087dde5e2b0e2c3bfc7d1122c2fc450729343a45331df3cbf7b9a4253a5f8550d37672a73a75b3cc8abd68f98803643b6eb69ec95cf55c2cfa037b69523afdd045c740708f1f7403621c8074d497e0efe689e
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = f7b41eff339ef5bb33c956d4444db962319d447a3f8aa9ee0a2013a3c2da280d
+Nonce.0 = 08631da1ffc94bed96fbf251c8dce3d2
+PersonalisationString.0 = 8a3d0c853cd614f6696b764c798bcd7efab04c9086ef3e777f27bc9fee023759
+EntropyPredictionResistanceA.0 = 31f0d9fe231800e4f2390998e42495aeed62397f10ed7a68894e97908fedaf96
+EntropyPredictionResistanceB.0 = 2da86e01e02d3cec22745804760963d47930d602c4e81c70fc50fc9e5b544a40
+Output.0 = bc3900a2cd71545ca30d31e0504eb353784388984c9c7a7322ef6ab519f5ef615c528b5a3eccfe30d0fff5ff3d4a5449abe0bacff8b4a503f5b4a2ff13107d3da216c54dcfdce32da9212b4bed2d171818b1722d932a352f69ad2c5e5d1ceb709935bc59b234dfc65fd70aaddc7c54f2cb1233f6ac5193e4b390efb194413eca
+Entropy.1 = fb794f98c82e9eb452fc6e0796b4a5d02633d32eb2c2ecf0dd3b9c1c86ad0d71
+Nonce.1 = cf3885b57b0728ad8b02709e4d460e64
+PersonalisationString.1 = 5aa9cb65563c52d50cabe9aed60a8147e05016aeb474e3484d8ba5948d457643
+EntropyPredictionResistanceA.1 = 79bd834d745d2391827f1fea149d9f2ae23953bbd80b42b4efa9b7aba5d92f78
+EntropyPredictionResistanceB.1 = 9461a6727de20cc22db97c32e2ae7e66a9983ee20cf392757f3e6839f9f8f77b
+Output.1 = 7472f5ff6fa14c25d0edb849ab7e1a1224b38be9df5010d6f4e264c9b928dae49d4d59763c447979baa8dd6d0784099ac10834b5a060cbc0a492d467d31304a87aa27dfacc7844b68041c80d27351ef6182b57044203a0c429b3d3a916ca1ff21bedbaed61517b36424149e3e63d1b8e41bdfbf5409ed08a1cd6f66a921a33ff
+Entropy.2 = 62b70654f43bf3f57390cdecd290b35b41ac8a81902e6282982f7796fa0b1e2f
+Nonce.2 = 722e245a90540c873bb19d90003c95a2
+PersonalisationString.2 = b57e8ab426b36f750fb81c4e0c674149a4e68b3de58e8fa72ae96b1673ac8ca9
+EntropyPredictionResistanceA.2 = 0caa4e6f62fc92b25d8cd317ed89f0dfb5d8f58a84a8cf9776ee6dd1f892e108
+EntropyPredictionResistanceB.2 = 2763c8216e58d07d74db30d6061d4c1896d93696704e3aab138fbac8c8e2c96b
+Output.2 = 146bf68e5fa9400e1987766bb520fd0e4986e20a96f406d92fd12a69bfa64ea1d45402bc54796ea40455ef155b278da68a2478b08d0e55596f4c6f85f3f761fe5a147ee3ee3ea47e69708748faa5f70fa228a32fa43ee9ccd56ef86d344fd9435959506d9b03db7996eb7a1621c1b34a4252aff735c579e5b9f3af4a90022133
+Entropy.3 = 8fe5c5d618abd4b6545bdb2d28fb73bb1e6d5cdc5dce6c642b852c786f87cf34
+Nonce.3 = 12780515908250c4b30e19970f5db09e
+PersonalisationString.3 = f796e43219267baf104eea5a2dfb2fcac1c24c98a4d897d7575ca64ea8807d75
+EntropyPredictionResistanceA.3 = 9874ea066b4fcdb24ea26de6a358d58b8d55127ab8e78313c17c80404b6be7aa
+EntropyPredictionResistanceB.3 = 38c7f8cf2fb23479f8834bc13b76961e336ff4bcab07718df0d24f20d8d03880
+Output.3 = dc0185046f9fea15681b59314e238e232411e4cc02c70a6821e69b7ac20da5ee62e22bfb665ca1d7f1cc097dae1dd176ebd37b154c07a361bd9bf718d70a644a325961c74fe244d9454c752ffce97733eef1cf1637a686df1fdb532e307c5c6ad07773cd8d990c550d9a94bfcd082c2ebc73ee319d795d6987a8c0b93572069f
+Entropy.4 = 968448b35aa02db4d70fe7d63e1ea1c26960b603e13c953d2b0dd24f6a6b3834
+Nonce.4 = efcb6df4b3020575cab35f239e4f7e30
+PersonalisationString.4 = ee8b29f3c0f6af9d739d99493670c22471a211eb3d858dd14fd43caeaee89c68
+EntropyPredictionResistanceA.4 = a17a6af97df6c493a80b059113b22b8dfa6e829fb63d22cc918fc362405a7614
+EntropyPredictionResistanceB.4 = 474766e292437ae39adb8654d568ca1d2c7051deac72c9db3d459d66c6134f93
+Output.4 = 0aacb90d88a680f5a42b5c3978ce4497e31b96db7b8d63b590d07f105d31d94df32d8546d35debb099fd7ff4c0300075cca59817c49cea77dc38f6dfaf3879f9232f285d0885f098bd24281a7e7ddb01b9d45cd26bf036a8ca956cce91dde6a0d4599ec944fbca78dd6c37a128bb77540a25fa5fd001faa945147dbd997a80bc
+Entropy.5 = 568182aa8f37a44be138dcc962535e2f319fb04d6609910e3110e11acd2508c1
+Nonce.5 = 5e6caf0a54424593ae8519f854e87498
+PersonalisationString.5 = c6ffd7d4ff8e8221ab64b6a193644c21682abf137d48b9596df021d4e60cda43
+EntropyPredictionResistanceA.5 = 24415a26d22a512d3e52c8765bb2ec5c513500adb08c438dfb1b8b54bd793353
+EntropyPredictionResistanceB.5 = 4b87cc36be7ebe64a618acd3213694f515ce0393994e26b7e35b1e8603619af3
+Output.5 = f9e1fb43b6e381def330b3ccf0f91e7bc9c23fd455e3f0235a0e08ff0f228c592d5a6eded567b0bfcee74c73e9bbf59b8df17cdb9251bee17538cbbf798a5165b45e32ac6b8610ca4ec1467c1f8cd8559adbe189b27109f5ac31900703ffcbce4247baae3d979cd55203c896bb078808e1fee6977753882cd26f7048fbf88cae
+Entropy.6 = 1ea5b221259da80cfdfcb3353ee159a82666273f6753652c07f896faac056277
+Nonce.6 = ed3192ba0fbd6b61e24c48d398375ff3
+PersonalisationString.6 = 303e22d1406e7d9b8feef587adda09395bf9815fa7ca55509c2f514e840b65b0
+EntropyPredictionResistanceA.6 = 505e5811dfd2b4671deb1f3bf21b0a0b537f0f72cd58b64d514789f1c9053e6a
+EntropyPredictionResistanceB.6 = ebf3eb29aa497061c3a60626885d36a153c0814313a28ca7cd32f1e861dd2a5f
+Output.6 = d7c84093d1722dd1dbe829c6ec396343b62c5b0b23f1fd40701205bf0712e23bb3baa3180185886e2bd1576499e3ddfdaf44dbb665868deafb32184191d6772fc809f8c7ae69f96a018b83d5b446b6d36e4f4014f54c7bb87720dfc42101e69142a60e836e69cb642772dff1cb33511b377e685e20efb5bf543872ccda07080f
+Entropy.7 = f4e38c72d30192a31dc434b967d94690222f0ce221e9db991258c65931ec68bc
+Nonce.7 = a9eb85212a43aa2f34581d8d138f1da7
+PersonalisationString.7 = f8c59d45855d3ee29c9faef2e34f5fc4296980d9e4152d6a4adf277d4806cfbd
+EntropyPredictionResistanceA.7 = 4125afb79d4dc7511deb42efaf7a27c448a9c83edfcc6e01dac3f71a32bd5218
+EntropyPredictionResistanceB.7 = fb217223fa7b618397ca7c6da00dc3c2eb4c742315519b43eb0287623c0761bc
+Output.7 = 8d2ff4f71ed5f434092b0ad7f930c22fc4300db51ead82d551199a03262b89d0ff200656358b30f017fd84d104eadb5e8a854a69c60de0149602b2ad22999f24a0c476affac1db3f0dda94d2c0d13098dfa38fd2a4de85f0ed909b534a052abbf00658c2a3e37ffb723830da6c3380574234bf32f3e65d74c9540d069d9c02e1
+Entropy.8 = f52cad4f89c0230363a552c6f26203e75bef30f48530d85404c15badca617fb1
+Nonce.8 = ed3b2259266cb15a6b1d41a5c2baa97a
+PersonalisationString.8 = f858c07a03ca7e2a8c6793edab6e6c09547a7982c520a524977821f3b964cdf8
+EntropyPredictionResistanceA.8 = 786d09c7e89260b92832f6181c964c597a0b047d3b97982b8fab3dd700bd694e
+EntropyPredictionResistanceB.8 = f2dc6c14ee6db0293aef049301ae767ae89f04704e31db72ca3c4e1b7be4a9c0
+Output.8 = 10c9fec3046c969fc8054f5fa5b21b18059c56a102978ea5401b4ed0f9d63bfe358f1225af43caf9e3cdae9e601ed7ed2b00f05013511964b65d67dd882feba85cbaf7c8758239a1eaf82fcd6cfbd55eaf7ca60d511c61d379edc5c863029b8c3512626f1e56b9a1ba3f5fbf3dc6421aaef560365285c2b1624a332f92888938
+Entropy.9 = ffb594e05d5ecc7b28a96b21f92994b56168c04fe1f70fc7e4a3252182a56d64
+Nonce.9 = e806516a36853a9d0837e424e929390e
+PersonalisationString.9 = 5018d8d1c92535d9228728f119852e7177f3cfac44919e3ac14e62b134985036
+EntropyPredictionResistanceA.9 = eb80ad147c84f5c59676537d9a8e86b24241ef073b575b3726762d3fc1cacaaa
+EntropyPredictionResistanceB.9 = 8d36f177882b8d4912db87d9aa0392398580d6b42d38522872c08e1563710a3b
+Output.9 = cb7754009814ded602bd930af2fe8186e762e29c179b88ad10dbded7e54fc68139e39d525f05011515c6d9e16249e2391726f37faeeb097ac011ab9d882f6f9acecbd6959f836666a9355b99710ffe9cd0ee6174d29736d01dfd82559135539d6eafaed7d4f6865609cc5b34a0e4cf0b84610a4778cb1a3315bacc2e763b8644
+Entropy.10 = 7f626cd83fddffcf420647385e86d8e50604209d5cdfe89d784c733c77b652cc
+Nonce.10 = eca344caa2b926368897a3d62f69c2f0
+PersonalisationString.10 = 641945b438ee76557da752ccd0645b775686eceb9c4296978cb93fbfe5ed7f9d
+EntropyPredictionResistanceA.10 = e58d19eaf51d1cf22ae61bb96782975d40d58c09987cff89ad136c3ab56089fc
+EntropyPredictionResistanceB.10 = 368feb3eef042ea2660a6ff38aa98c2706e6dd470bc6fb50209b2b2e44da783a
+Output.10 = 4128337c4921b54ec67e32ae351fded59e30188599a563c7c4e44118e41a61bc27ea3609540eadcf5e4ec99b1a26fe2610b1092268e02de1ed130637cc1f642b3778b2244df28cd0091e13e27e48d766df2b62e1ff3f2fc30d17121a18e2701f4fa6d5753da21eb14a35c8e4739639a536622bca0ec21848b8fe5941d1e0b62f
+Entropy.11 = 9a59c889e2fe6438c9d3fa8eeecb0d50c719194ab9bd990dadb0ad730ce8b978
+Nonce.11 = 1bc9581622b977d7b9962677665028ec
+PersonalisationString.11 = 6008b9d3aa2f9422c7419e1c8178c81bb370d136dd3bb9dc5cc190720cc6a286
+EntropyPredictionResistanceA.11 = 696ff91ff689b4bfb080c1f6f566a111ee7abd353f7f53eac2a5c6543ab2b575
+EntropyPredictionResistanceB.11 = a73c4f96602a91e65e3ce576b20fff00bc315ab542a42d4463db36f52a9c88d5
+Output.11 = 275ea1573d6bceabccde2fbf0b0dbcce63de660d0c991ffc816e3b3d245115e81cae33fe7c3539802dd0ecf816aacedb249c7d03825c7ac19c9fedca8e2ad5bb1a090e68971af193905a867047a94ea3ceebbaf26ef8c69be9145485b97b1607a324780b96e37bf0aad29f8f348e2ef55caeb7efe90d64e60e0ee99c7ee8e20a
+Entropy.12 = e2773e141ea6bf7925482ef65cd3587d97147599d2e5f83cc3b70670dd1f9c2a
+Nonce.12 = 34a445714e8be9af18e92c012ee9eeb0
+PersonalisationString.12 = 28a69bba0f803b8b95762ad6d031389ad63a69103d68787a497cd29bf4a848e2
+EntropyPredictionResistanceA.12 = e2e8553fa4838aacb06b0bb9307b1f3c3f71d789595957abc694df013c554211
+EntropyPredictionResistanceB.12 = 03476eab2ef5e86595c83cfd9ec61d88ac9ae849741a8c685d89835e8f312e37
+Output.12 = d2938abaa90511598804b960308943d3391af8628c02524b04d3b89dbdaebfc8c82f247d99152dcc7d03a7b5b3cacb3fc3c638db79d068c31ba2143af05bd6d361a0c71cb321d198afaaf4d99d853d23cfe4e3b55b736179d1df15018cd4df6a9ab298d71135bf3f3e319a224d3152b34ba450d6e65799d0adc6e1f59244e20f
+Entropy.13 = 42c42d650bfe3198be9a649c93d61eae11b0f2654d7c382b901d8210ce2def14
+Nonce.13 = 5c624dc4b5754922825e2b0d40e72f90
+PersonalisationString.13 = 716a7950c374865f30a83b48df11ed042654a2148102ea7f23ef741de5e0bf9f
+EntropyPredictionResistanceA.13 = df3bd7ceb420d29419faf73905d5b9aa72d08027c510901846b57552d1dc78ac
+EntropyPredictionResistanceB.13 = 5cb654a521684a3e9be94d02b20b7ef9c692d0c185340cd46c6c6aaeb2aedce3
+Output.13 = 7dedbf53a1e6a093c81503a070b85d228ec3a9b247b914aa964afa57b169850993e64f954992a18fbc400038cdab301de70c40347c9cb94d97bcbf31faa23e81f1dfa6a3e69e0f225945823c00e7371c19c7b4ae77f7756ed57584630c3579d705b503d0d8dd10b8943c41df3c6b07efc9913dcbfd5427e5abbed3daab8df423
+Entropy.14 = 6eef023ae584a682a00dc2796baec18bac7ca223952b88d91de78757577c145e
+Nonce.14 = d51c3f59110ae8c0f032f4b37b50782e
+PersonalisationString.14 = 2e10eccda6ea13edffc61774955bee6b92d662361ada42e1f269d2860214856d
+EntropyPredictionResistanceA.14 = 711415888490d7ff523e9883f6bf0226dc6d446901fb41b96130b6fb1e2ff1ab
+EntropyPredictionResistanceB.14 = e15d421f53c1c843c847b2abace780caad977a337d81469d973ddae6aecdd1a2
+Output.14 = 79071920bd431dc5156b6f03932ae2aa4dfa06a61994bd07ed65cea1ec8c08416c7ee5c045f0fc63b4ca237e85d29d8987b65f3e9ad22a984aad16676a9a0b50af959f19b57863c43fd316516cc7d8516bd4705193be20d3ffa42f843905ad64a5288c875f55a8996ecb239700136b6a57a43f2c6dcb11af5e8fba3597fd8870
+
+RAND = HASH-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 00f3bdeb3ccc5abb56212ac9b3f236d1edab2f04fe25974c1a40ed8fc0083606
+Nonce.0 = 0db9b93fca201d68cf2e7c874fbc5d48
+PersonalisationString.0 = caac884852460bb3fd7a7fc88eae442916199fd8e26ff7a27f284b3f6a8aa77d
+AdditionalInputA.0 = 956df20978e625e2f9165f58ad74195a9f73d1b847c67f160c426abe5c627b5f
+EntropyPredictionResistanceA.0 = 1a3acda8618a7ed65ee7fd9d635e13baa0ee38ecc93b711c894b6782056d7281
+AdditionalInputB.0 = 7d67ac1c3a1801b05c9c2512e0c988871ea1219a766d8cf6f2299123e0376436
+EntropyPredictionResistanceB.0 = 536ec1666e964d8d6f79c460539b8f314a1e8f78fb0d8fd6ed6869b1bbaa5487
+Output.0 = 9eac3858e6e71528af045fe0a6229641353ae7d60eff054f343117e425198b100fe20738d5f68cd777184fd4e4f37fdcdc8179aae6b4b30dd02db88097865ad183ce037be7c56f606d274289f6f65b49dcfc053ab034bf18b080b23f1061835a719162620019586c21acf79d142e466df326a79a4219b244500d860f38614eef
+Entropy.1 = a4e5778bdbd78afdfa7b4710d7f88fa3c905f25b67171d6a52068dc78ae338a4
+Nonce.1 = 073037aaab19d03d8ce6f91458fa50fe
+PersonalisationString.1 = a76cd7d726e2bee066f654fe9464421af91f5e192d71d05ff7bb4bd0ce142ebb
+AdditionalInputA.1 = 361588d2f214c2028b20698eceaf243e883e2a308ab20824ce4bea636fa879c1
+EntropyPredictionResistanceA.1 = 17f655c57125a8407bc577b527a84f45b20eb02d7ff9b6829d8c5894c2255b38
+AdditionalInputB.1 = ca92bf59d2e3f9f645d0ca99f8f631549a98fa74eccafc04287c1a102fffd0ec
+EntropyPredictionResistanceB.1 = 64f7c63713d09f28cff871a12e4fc4c09e235d1c1a6b623c742202bc75a9eefc
+Output.1 = 18834f8ecad10b0d37eee2c28f385359ca450e6701e2fbaa0170662a7dc5b584c4c1b0543b3e8673bf16d2b6db4251afff4a288a62fe6ac014e8285462c2baf533fd7cc3f86ee75315b0ff739017e114a5709c0d0ea44b1628fb1431b540c06d21c36c37d109af702138e321c9a1b2455a107999bc833f076dbfb79c694f9b34
+Entropy.2 = f49ad29f60927a5e5926f0daccde0338ec7f19e20d84a65e64f93ec7a2ed9796
+Nonce.2 = 641b2f01c00e4750a7ecbc7d8e106fbc
+PersonalisationString.2 = d05f10f1796b4d9cbea464b7db9915a5a2a602ccea0a65ee5a9567f4bef52d16
+AdditionalInputA.2 = 64e1c42db41c0fe3db887b55162d0d87a9e407fdee24d5367d068dd827aed74e
+EntropyPredictionResistanceA.2 = ec8e4a1b3899375360da0294a0aea05cb9e22093b8b4d0da1ac6b20da82e32bb
+AdditionalInputB.2 = 02b56cd3c03cef16a141ea03b1cecb138573d42905743adf2a829add3661222c
+EntropyPredictionResistanceB.2 = da6713fc2a166d6ca6d942f0ec3689787f6d7c5cddaee9f229bbae016cacb274
+Output.2 = 7899ede75d6ca82bc9862ce2e368c23ed7207fe658cdfd7cbd8c6a748fc9afe002ab2bd8df8ef1b4ab53ca894db77d244d25a41165e726fd08bb5ae789033d1acc728fc2ff60187d42f8291eabfcbeeca72c2018788a70a84034907703cee34b03a433cb7ca4a37f126dfb10add2fe29c3db81498ff2aff2d7b3e79cf2fd8258
+Entropy.3 = 82517ad32f1496514885b18629989894ff25dda4a5fa34d46e343632054e2cf1
+Nonce.3 = 0105d18b3c20954a0a0d35455de2a9c0
+PersonalisationString.3 = 6b284c15a7d8d9f57c973031e3f2efca8325e95189d9f28975f2352e4d7bd86d
+AdditionalInputA.3 = fda9b8ac9a3107b74b8fa649e0ac4a5beeb354500cc2623a3744b54b4584a034
+EntropyPredictionResistanceA.3 = d22b2126eed5048d508e23b0829e9bd99ea61f983b19688527bbe7483be493a0
+AdditionalInputB.3 = 43979ac6ade019a0d52c9a9e3507facb714ecf1bb21af16469c1613926cbb479
+EntropyPredictionResistanceB.3 = 35585fedfd60ffe811a7e9b8da4ca7bda3487975e076c30a2a900015c115bb72
+Output.3 = 8a6b730235997c75a910e2c4fa4735a7c3cbdf77cc51e7c0c917fcebe52e98a8448b442ff0ed7a9b78efbed5a767c7974f684c4e42b40fdcb9cbd327b91ab83bd2ae6b4e45a448f289d450e14b8770b739ec3676d22efce1f0c738a03140df59d78fe0ad1f2a255d5c4e926c5a757c818a8167203cb30e5975fbd94392cd8a77
+Entropy.4 = 9d0c233f60b8e78dc77d4c48e35c5b4fc39c8f850bf0c16ced5ddd5a2ad788b6
+Nonce.4 = 50f0e564f4908b7001a4bcc753357a4a
+PersonalisationString.4 = 709cb9c88aeb006b6b534a98be44b09461ce93eba599fa0a3376e27335ab1198
+AdditionalInputA.4 = ea7b104e8370466ede72a2fb5a0213b6e73e6cbb38743e634ee06ad92177cbcb
+EntropyPredictionResistanceA.4 = 118a11d2d72e26e9e1ed69aba4a73122711f95e95251f996836805aa91cbbf07
+AdditionalInputB.4 = 5f58993034907b7efc0ed07f0bb95b0cfcf3eab02d20b6087642e143b99b5dac
+EntropyPredictionResistanceB.4 = f019159c565caee42706fac97166934e85bd57786005c607adf95ad26dbc842d
+Output.4 = 7cf50aefeb4b4a59ade0a2cb64b7ad8fac7cca1d2e890cf4fd91fdd8fa48d10358fbee7d0acfa49dc1535b727e5279d9cc7a604db7efb38a4fdb37e01e480121faea935638be4e09114f453ff90ce45a3efa90bd2ef6abe8129eefa0ee8de27dbb5ac971f024a9661ca4fce37cc95a8de1cd64e1c53779f1ba9c566b24c684f6
+Entropy.5 = f6d24303387021cff604ef51226e232c4c3f90a3df43f27d8c2ba0316b06f87a
+Nonce.5 = 5016c2037d28d350c2f6189c1e6770c3
+PersonalisationString.5 = c5d1fe5e1ad0c5c2bfdc218288888a1270c35cf0681f9deb26da6fd6c4e17040
+AdditionalInputA.5 = 1f0e1d2128477f956d6aa0eb4a7a0fb389f6c4036f6e0e21e35d71142b43107f
+EntropyPredictionResistanceA.5 = 2295382dd28fc7215a131881db62a39dcc49ee741307b20999fd5fabbd1ec334
+AdditionalInputB.5 = 5e76259cd1690ff0ef40ebd19dabe1942478a4f73820b756e757eca0e04e5fb9
+EntropyPredictionResistanceB.5 = ddcf82a0b1931811ba0cfa40d9acb6566552d8f5e0a3286f23c4c2602864198c
+Output.5 = 5491b4e7c7d5b692a3f9b2da568b649b647544f8cc9108b435641e9220ea4ffaf40f7fa799cfb5814f6e1f124c584caddde29fdabeca6bc87d649e00072724ccd3577d3b68549b66dbda0b75e4161d39f8fa3c651da3a1c395aaf006845d86dfab1d899ad607321f9612b9c2408549d596325525ebf36cb29e30ec0e97e469f4
+Entropy.6 = 9137ee34f967ec75f4d3fc532243928649bc6005a4dddd4697469e8ba04d659d
+Nonce.6 = ff7aa374d27defb4969cd8426d861115
+PersonalisationString.6 = 85d1f0a27b940e3e80783162e0150b21b15189ff79301230da50cad067cf2dbc
+AdditionalInputA.6 = 98e2c1581f133b633f2f30ffe5d62537c6421deb36e104213761dde07a1a5c3a
+EntropyPredictionResistanceA.6 = d9271714ea488012336e2cdbf65877b932f59130b3e0b58e583c407769598c20
+AdditionalInputB.6 = e870257c77fcdd2d8942b18140759dda9b5630e8cc9988871cc0afcb97b43d84
+EntropyPredictionResistanceB.6 = 711079d656a705a0f07307a5efd2cacdf3f1020ea3e163132bf537d26e0a32ce
+Output.6 = 0584425b909891194af1a9759339d68da9d80a0b7d6ace29baf6144583c2e2912227051fb2e09566a65f5fb083bdb6bb2d77e4714ccd13ca164738080a0b400d312b8a83a3658ed5af8b5d6fc78c53fff3434d66e25aef57f027410f407828d492360e171065de31667d0398d225f3bd52427983dfd5b6ae8503e3ef43809498
+Entropy.7 = 14eaad3f314161e7d7e4ff026e7a79e1e2be7d9405014aac53cc43330adaed76
+Nonce.7 = 3ed972bc4657588a59025fdac4fc281d
+PersonalisationString.7 = db76413753d7da171c1a0c64d1be92ab2320fb3df87fba91006ced7a8df28812
+AdditionalInputA.7 = b817b019de8723299b0f0bd258c2486b33383120a6413ed4782a114a74a0045e
+EntropyPredictionResistanceA.7 = 7d9496df1d44729a0610daff1e5d16ab10ed6a72f2a9f6128625dae2bcfc9e7b
+AdditionalInputB.7 = c54a51674755fd15afac52721a3de4c935ebea088b79d10fe8f587b9ca2526e3
+EntropyPredictionResistanceB.7 = 92c48abfd00584cb15f88c4155e238bb46d12c1ec28972e49ef357d71635f81b
+Output.7 = b0cf9bc5e84ab318ce0899f2913f17d43599038ed119f537778f7a7920a4f4d9d563e2751f825d77ffdde4ff194af91a26d7a69813f78de006979b1e4a28a1c08c4b5bc8c8aca40f3bc79268535eb7f66be5baee2602d70ab8dd07ad4540b60b096bb8716bb12f3940edf98d6548c8f86f92da0d769a753655ba05eed8097a7d
+Entropy.8 = 47ec145f11065d50684a6bccc67d050afd5b4107ff7ee5da7bec7fd8f521a997
+Nonce.8 = 95d95949b8842aa8e20a80287fc44c5c
+PersonalisationString.8 = d7693d80f096ed97176495ccfad03ebc0575d39c14b0110a3766cb9d41c64797
+AdditionalInputA.8 = d6a8a3f77edecc6075f3ab7764301cf2712bb2edc5b2c0e616c58a02ac66773d
+EntropyPredictionResistanceA.8 = 3aff6da88362ee4e2741b4a67258270ce78b3cf4354b949b15a9885636aa66e9
+AdditionalInputB.8 = d098461753c6c757dfc38a49ffd7051a49034690ce3e74a2a39f8707fb095411
+EntropyPredictionResistanceB.8 = b322108ff93f67dbdf5655106a12ac3252b4fd78407569a3c9f300856f027be5
+Output.8 = b31fa33feabd44c8a3dae3f094dc380f0f4be33c49eed5b72c9a09b9ee12df10cbfd323e2787aac84c68d324783c58c9ca3a7c7560283e66559861b333d0b92e7ef8e04f571e02841daf0a22f282fcef82964a9fab9866d98389ec48ffb14e28c17faeb7cb3584a0f4b2f9498819081eb4b41a278b4352d45195f5f0cd4f2e65
+Entropy.9 = 9a1d34bdeee91bf0fb3a9541ba6b2a5e0357807285ffcf22a0c8bfa7f6007030
+Nonce.9 = 3692b082646b9355f737e54bd38736d3
+PersonalisationString.9 = d43dc04dd18ed6f3dbaab48fddce5a588d049b33ef6c7b77df6513964717ebb5
+AdditionalInputA.9 = ff3349a10f22384afd7307ed38476256e1b5208a04f1c0745fe9bed48123ece6
+EntropyPredictionResistanceA.9 = 44504f3dcb5da487a1c47129bcb0caac86e47684ded2bde6d4a82a835614b79a
+AdditionalInputB.9 = 2b4240874896281c2838a88080ac841d61af8432db09eca8b198a7ff0ad81457
+EntropyPredictionResistanceB.9 = f8d57b252d21c8c9a6a12c72cb39041a8bca1df1623da202c9cb435114aeb95b
+Output.9 = 443d6460c80c98f257f3e97255578f0e2354fe449d9bb24bb4cbe2f91a089d9cceaac5184bfd142e1fa6a1f826fe55c679e5055d7cf5c5b4551f34456c90eb5b616709d23af69a0a949d4751d94978ebbddec0f150ca44743c1fb77212c1dae98908b8c3d1c6128ae1a4be1a4218555160464938ce1838e307db90983416b46b
+Entropy.10 = 8f27b50d7ef39e86f9b2b14e498c5c7b2f217694bdddfa707acde87f95884f19
+Nonce.10 = 6f076b91f4e482a8e5474ea3c3a27a52
+PersonalisationString.10 = 01908d446112aae4bf2789bfab2421bddba149ec86fb3e2391fa75aa1e137aee
+AdditionalInputA.10 = c9821ead63bb9e1cc18b4ec0f6e5ffbe7075b366167733b7a9641e7819badc85
+EntropyPredictionResistanceA.10 = 8ec46acdd92f9c99dc8599e344a9a8bb47e978ccdb8443e33f720e503bd97011
+AdditionalInputB.10 = ebbc34971e3444406eb615308b6196c14b200f91e51318f40e0d0a2811040d72
+EntropyPredictionResistanceB.10 = 7f880a8b638dddcca38a94251386823f7de27b7943b29c866f5ab7d622ea10f1
+Output.10 = edfda1b8a374f281193a44d6e419983d198e37d51765c80188f5b4d8f3a86d9b4478a58eaa9d8b5213a810f66b5cb05a3f7abf796af58834aac45bd29826a9b1c4b7070321be3349739e264407192eb41a43aa5551cd476c507fc870558e36996bd2b9b6f6a7957067b0d8918faf081d7dd73280a05f4bcd1dc2e34babf85cc4
+Entropy.11 = edb27c16fe52c7fd1b1a231c7996970e69de7d4cefde173260b5e4cec48e552d
+Nonce.11 = 4cdb32800abcff95b4eb3bfc1208d2d2
+PersonalisationString.11 = a12c098457b91c3476a1f260435e6ec83fddad2c9ff0fd4ec6a1661d43b94d19
+AdditionalInputA.11 = 19db8d920a752a08a8c3fc67c4ace9b96ab85de0b4ada4c26ada689ca0b661ff
+EntropyPredictionResistanceA.11 = 00eb5533e689606d67862af52297279fdb250714284f307283dcf9ceca71710b
+AdditionalInputB.11 = c8f93253c695030bf5d6a1adbf0e197f4449c15473b0c53a7f61fb17ec8013c8
+EntropyPredictionResistanceB.11 = 16567ce2ad41836483a35051c82783e2ae3ebf06d935153928ea3a3deab8ba4d
+Output.11 = 53b8ae56730e920c5a0b22a047e5a2a336a145a5236c1cf9c64fe51da1f33f3962d27e48ffb6d1d25e53c2fa5e923f76c487b6e332e43ce4fa141feda1001d77abc68931c0fe941dd0e5e2970081f11b740f761642a93db186dbb0ed7f162fb55c7ce43c8353bf3b4e26c369654d1f31b87f530c63ea38ac67ef2c3b0bebf03d
+Entropy.12 = b21180674d0bf22d2bfeabbd744630c5d2dc3159f3609fc850c75a639b93aa4f
+Nonce.12 = 42416dd901b33447e831d1a41b7b292a
+PersonalisationString.12 = ab3407e0b6c42f86296749e710021445d3875ebd5ed213e4f4990ce135025053
+AdditionalInputA.12 = 3f4bfcad2fde7ad9254772db362c45d9c4951ddb7084b4a0115dbb31b87d8800
+EntropyPredictionResistanceA.12 = 2f049eb3213295b47993b1ecd0876f2a1458a8c852603050f021c7d96da62401
+AdditionalInputB.12 = 88bbc0377a68063ad82dbd14b75c8c1482225e331bed49197f5fcdf453070f5e
+EntropyPredictionResistanceB.12 = cfb1845edf71b34237f115bb07e3e0076fefcce69c90625504b1718cdffe10d3
+Output.12 = e2985001507256878e5161b6d981cea790ff5d3df1799c4c9a563d86c5eec9bfc0da92eb2a14a3378c53d29bb57732e4a897802f2df8e0e784f8a10d10e366a1f6634d4831d36e7f050f68c83dae197c986bed0b034ab88aedf894a120ff5e761083e5746882df5dc97691a1d3bc5e8c795b1070fbd1f8cd22781715bd01fe1f
+Entropy.13 = 35fd6f94f02e00cbb641cea8f65b71d3978103c8e59089178ea33f2469ab71e8
+Nonce.13 = 71046d08ab043354d1599de953116865
+PersonalisationString.13 = 4e0e478eb6e8c8d887082d2b9d75b902dd72d708f9d9af21cfe1cffae86e85bf
+AdditionalInputA.13 = 279c55b9dee6105e7a90b8933aeb797846db27e65633f06ec1244a8aebb36732
+EntropyPredictionResistanceA.13 = 9e65fdb34eb4df9e9663c665f7374118c7732c9a1bc291a6da55ecb9f9050a63
+AdditionalInputB.13 = 931c719e46d536fe51497f61113bbeb041fe535aa21b107e6ed88be7b2accb3f
+EntropyPredictionResistanceB.13 = fa74bf2a589572fd5c187e4faf64378f216b6083458fad4ab943dd36db53efa3
+Output.13 = 16c22c1d699df1a31eda6a3e115988fe613d59d77ed144aa00dacd3e7214a2c9abc6cad2b182c1e18503ca2ff0d98a46a39ab5cb6da6646d230e04a20e079f053a89049c8f52a610b0e1d7c58fe83bb177dcae0e4f388bc9d894e38dc1df9cdb1b65482f860c5405943ed90885a0ab1039d189cb9164613a8108818489e472ff
+Entropy.14 = 29e3facd8f0db525dd97179fba2004782cc745c8dcc860c3458d7bf770e18028
+Nonce.14 = a96e203782ea56f0b9db5588b3ea702b
+PersonalisationString.14 = e6b5c40e320a9707185a05ee91ae7385e7ca2e81f7bf65eed6f9313a959e5dd7
+AdditionalInputA.14 = e78dcf5e29a8393e83e86daef01d2ad74b22eee093d9468bfaa0e8a1b8364495
+EntropyPredictionResistanceA.14 = ff68ae1ffaace1f0e8299831846e1e8379f9f9696aa32c762c56aad2db586025
+AdditionalInputB.14 = 9d067e72f6310a0cb7e9eb2ef7b02e1b8b9bf80c51a7933a5aa69f13529ff849
+EntropyPredictionResistanceB.14 = f6f2296c1220eec3b681ffe7db9bf883bf2a8713238705b948147fd7fc5e5206
+Output.14 = 6af689cec62a633492f6e24b754d38dd6ab0b556e91802d72f14dc8c0e9ff50df728b4e799a036c3c48630be116c8d6f191f30821b4b8c74d716e8a824d6c41b81ccc20cd0215712aaab7e1b9266c141ac66a5bbb2e500455abcbea3918f9fcb4c220bb5a9bf7815cbd2435b67ccf63f8989cbc8636ee81409dbc23af91f16d2
+
+Title = HMAC DRBG Prediction Resistance Tests (from NIST test vectors)
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = a0c9ab58f1e2e5a4de3ebd4ff73e9c5b
+Nonce.0 = 64efd8ca028cf811
+EntropyPredictionResistanceA.0 = 48a584fe69ab5aee42aa4d42176099d4
+EntropyPredictionResistanceB.0 = 5e1397dc404d86a37bf55954756951e4
+Output.0 = 9a00a2d00ed59bfe31ecb1399b608148d1969d250d3c1e94101098129325cab8fccc2d54731970c0107aa4892519955e4bc6001d7f4e6a2bf8a301ab46055c09a67188f1a740eef3e15c029b44af0344
+Entropy.1 = 07bddab06cf3d7f094cc2302abd700a9
+Nonce.1 = d67421aeb711f4bb
+EntropyPredictionResistanceA.1 = e66f59e28a46794213bf3d0c3a2cbbb0
+EntropyPredictionResistanceB.1 = 9205b90e0ef212c7679b37526a806789
+Output.1 = f76fd2a49d9574c3f90864f35f32253b83098ee04a4c8dba464a8035f665ca165c8a038be5e1b100d56752adcf59bea167e15b1d01c419948d2d0a85be66d19bb40e5e0a66cfd76ba7547eba6276ea49
+Entropy.2 = 6d283e7705a2aa4b1abfc1ff8559c9e7
+Nonce.2 = 962df9229000b8e4
+EntropyPredictionResistanceA.2 = 32ac40bad34797345f1ed6d7a0fdea8e
+EntropyPredictionResistanceB.2 = c01e7a20dc436aa1d62153813d59d44a
+Output.2 = 60ddce57be4563b87bb59e848496f42fcef9ed79799040e0eee68fd89b330109cd3b3f761348fc7036c0cf5d69aefecf91e89a7ae0429590569a88922aeff249ea783f00f795aadca729f96996eef76d
+Entropy.3 = 108a1fa539fc471e0a26a8d39633c88d
+Nonce.3 = 1e84c26a62894e7d
+EntropyPredictionResistanceA.3 = ec15fcbeda9dcd1e40619dc03c7d3dd2
+EntropyPredictionResistanceB.3 = db39bc8f4964949b1737b9cd69a8ff97
+Output.3 = b0fbe3f6b6667b88e2a48f3679f21ad83f28107675d43d2a5186dd6a0256afc6acaf995b3f07691325543b37ddd5bfb4934f46ff9783597b69c727c9cae1c6b83601a39227c53c99181ec18d5be60d5b
+Entropy.4 = 1db6fe209a51124f9eba3ae7a5690a31
+Nonce.4 = c9383b0d62abe023
+EntropyPredictionResistanceA.4 = 7fa6ce2b34b320b68d24927d9245a10f
+EntropyPredictionResistanceB.4 = 7216ded701c39f4d10dd6eb4ae912b78
+Output.4 = 10e9661bbe14a0c768f09840979233865296fa801ee8ba97106043c067d3b01a5d3a866eb9b21f730c3ec1f11f022820a2a2db4cd07061acb85b0987e33892064b56626c962d1febe1eb97af6b99ac22
+Entropy.5 = dac7cb5d659646246a2c3cd6cbb8b7bb
+Nonce.5 = 9ede30c88355725c
+EntropyPredictionResistanceA.5 = 16576ca7567f52b51ea3f7e5d456b0e8
+EntropyPredictionResistanceB.5 = b7a33faf21150e5b39999ee53fd05b2f
+Output.5 = 7117fe0c0a9afa75c078b1641ba637ed2a4501e70bf38465914ea185da5a62048910040e70f279ca9f2fd5e478ffd76484f52afa62a29ca9d649f252f27a8eeca1ec95d7898f705421c92b60493e5c77
+Entropy.6 = a422e11d41ed91e458b1dff7844e7a06
+Nonce.6 = eb807b042fec7c42
+EntropyPredictionResistanceA.6 = da9a7d64aea6ec843cbb5dacf8517c3f
+EntropyPredictionResistanceB.6 = 7214d02d432fc64766f6bd40f54290c5
+Output.6 = e6e1b59d47aa47ebd862fa2336d50a920f77aff6d42942a293947c24b044756c9777231aa0ce8a67d2916136cf4477dde78b6fa789b4a570460538a3da199c2c64155692bc1aef3fa94ce8ba4a43bcaf
+Entropy.7 = 8020ccd23e6733f7638a6d68b4954b70
+Nonce.7 = 1dd2e3b33176d5d1
+EntropyPredictionResistanceA.7 = a14b6cd8aead4e152e0726dd16b4d76d
+EntropyPredictionResistanceB.7 = d9cae60e69023d0fd82b0b69b7cbaf75
+Output.7 = c2b22410ddba0466b6635ab98f7690572d7159d66b4f037fa75869276950ea4ab4a92e3011d7c3d50f921a3988906486590706c8e0eeeb487ac85ca924d8b3a4445e2af49365c10c6e99eb17d93286c3
+Entropy.8 = d66ef5d12c778d8b78134704e345b08c
+Nonce.8 = 6839471eb903bd04
+EntropyPredictionResistanceA.8 = 80169d4069d73a669a17dff2e1d6fc23
+EntropyPredictionResistanceB.8 = f0688fdf7867f72a024ae445969458fb
+Output.8 = 91ef2bacbffacbedc11da58d275448692ae26bb9920c0b14d86a42a65a9a79422ed77c3a8f941b428552caf6d15e057c2dd8b5cdee670ee151f674b4a82ff9754cb067c1a1a27302bef2d395379d6009
+Entropy.9 = cb4ca0d6e07b341ea0d105e5128bcd6b
+Nonce.9 = 6fc317bec49394a8
+EntropyPredictionResistanceA.9 = 3c485ce4f8205361374484ac0173ef3f
+EntropyPredictionResistanceB.9 = 08fd65d0a11af2b3f90ee8bd3fcdc08b
+Output.9 = 1727a7f580a267492646fc2c18e3539a131b52fa3d82ac8cb36227ebb94a396b139c0a709301b4f00b49ec63d7f48125e469443b57b16bdab66bdaf0684da425e63a596182de4674416ade17f0cef49d
+Entropy.10 = 7cec0120261bbeddd34eb776464c9b80
+Nonce.10 = 667da732cc82c365
+EntropyPredictionResistanceA.10 = a492b4def218ba2cad59f7b4bc1afaef
+EntropyPredictionResistanceB.10 = 00861c9b62b581444f79b8977e9fbf8f
+Output.10 = 3ad128a75af8144cdf5cace68166dabca9db5d5cac6eeaa0c3d608d99d5da4a2ca90fc080d832e5f97060ab2247dc5dc20bc10be47e6ab03efeb662fc9d52c89d8db340cc4903be59dfd086f6d018468
+Entropy.11 = 29dc07553bb77cad6f321bcdd5c5c758
+Nonce.11 = b6a77588ee43d0af
+EntropyPredictionResistanceA.11 = b15c0d981e368cb2482663aea93ded95
+EntropyPredictionResistanceB.11 = d82a1a2a22cdbdf8de93695862cd9429
+Output.11 = 5e1d53d8db89511fa996ccf513baacee2612da201c21d51e2927dcb99caf3132f6d2ccc3376dbf95520018515b0784e98b4226671cb3f1c7915757d2e59f1c4e843ea9c98004108118b4eb53bef2baaf
+Entropy.12 = 748777316160fc175eafff578481402c
+Nonce.12 = cd5a38508e4ac060
+EntropyPredictionResistanceA.12 = 3f86281576c970d3316ee58a36f809a8
+EntropyPredictionResistanceB.12 = df9ef241861c04093a284d116384d204
+Output.12 = 05f179c71691c0c2c64eda58b63a27772210f0c2c6973708a5f84e6b49f547169a839f2e97ce18ac94696337a9d1c1d450bf27b7fdaf1761ee8da9b55d59031a8516eeaebb1bd48a1e3bd070c5fb4eda
+Entropy.13 = 11e2e3934d23239aa6bf1abb07aadaf8
+Nonce.13 = df05892d126cd4be
+EntropyPredictionResistanceA.13 = 13f2965bdcfcc8396dcb16d8742eed1b
+EntropyPredictionResistanceB.13 = 276b562702915fbb59c01cafb7044022
+Output.13 = 6ec1caa762b5b87ce92ef7d254536f94d41ed5a98696da5c14fa2d29aa95182927b3e2a5ee9e2012c911ecc5e244af1a8200de37cbff2b26d0c2271659bce074d5b3c06743f08d6495286068a1e5435e
+Entropy.14 = ec11e1929e7430b914b385285801e27d
+Nonce.14 = f4aa6783fa1e3405
+EntropyPredictionResistanceA.14 = ae706e740dda50209b20acf90dfa8cec
+EntropyPredictionResistanceB.14 = b4d4b4bc7cba4daa285ff88ce9e8d451
+Output.14 = 74acba48f0216087f18042ff14101707c27d281e5ddbc19c722bec3f77bf17ca31239382f4fc1d4dd0f44c296bc2f10f74864951f7da19a23e3e598ac43fb8bbdd1fca8047b98689ef1c05bc81102bb5
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = d92b39ff610db66427613c111c002b75
+Nonce.0 = 329734372847a88f
+AdditionalInputA.0 = 9980d97c65cc8b3c61b390e48abc6523
+EntropyPredictionResistanceA.0 = 53c1d289b30d3584d34efb884ce6d1d7
+AdditionalInputB.0 = 76213356e359e94984cfa7db15220518
+EntropyPredictionResistanceB.0 = 174a3c20508ca0171ed9610622d454fd
+Output.0 = e0b298f7cd1112527a506201e38f7e60d762f591603db72aca3a2cd1b9d115c3ddbc7dcb7643f2f40f53e96e6ca1590ca27abb77a6234754ff1edef86f75fd5f298872ad1544fb88a62936e238f22aef
+Entropy.1 = 3c56bd6733e9cf9d765f3d5906c60807
+Nonce.1 = bd1c9c11f4a1293b
+AdditionalInputA.1 = 365f1612ecb78ad7b1140dc66082ab30
+EntropyPredictionResistanceA.1 = b4abaefe6a65c978d9c75a704239e500
+AdditionalInputB.1 = 0e5d2013782191581e4a76e0a2b5bec4
+EntropyPredictionResistanceB.1 = 319d9b4b8f9f121caef7fe3c49f9ab37
+Output.1 = 0e509b7b436d085c1080c3d9e6ee3cc563944bba0fad352d13182c87c8c3a0f0ba71e86676729da0d2f4acc2b57e430b8791c4f30d232a0fe48bf91d5824242fb8e36333837173d702e6738291b57efd
+Entropy.2 = 91a44f3e412d031bd47ec8907e32f043
+Nonce.2 = 4a20d784db3f6ffd
+AdditionalInputA.2 = 9f4b3b3f1e2d849753d2cedc8d8c5d17
+EntropyPredictionResistanceA.2 = 78b013ca0b00553698a113d75d8ebbe8
+AdditionalInputB.2 = 64a1f4d2b10cf97a268cae7034ca4d8c
+EntropyPredictionResistanceB.2 = 56554c71aa4b0d48af74bbebc97afab4
+Output.2 = 232ade326de23ec970f66e6a540f306d962769d1b24b0675109ca7514dbc52003d154687f525f4a2220501d6dc92551df9111c8dd398356c560ce44f1959301dedbb197c0161fcad0299a9eef3e799e2
+Entropy.3 = fbaa5e65ce5580d774739340e025eac4
+Nonce.3 = 6550b5d3865829ea
+AdditionalInputA.3 = f0e722190994c66f64ff725e8a9b3be0
+EntropyPredictionResistanceA.3 = ef9b59ea37d094692b9fd15ca25468fc
+AdditionalInputB.3 = 548ed3bbccc8f9f79c70b2e85ee0e626
+EntropyPredictionResistanceB.3 = f7e38f7dcecd5fd85c686057e1ab9bab
+Output.3 = 2c07d2994fbf0bbefbbaf60e0dbc712f12f8ddc3aa6d94ea9e9d3083209ec35c4cf3e62bceb9ab042e60050520e0469961dbdaee0787fda6f1c49755855752753b1e87031a6821c04cda887cdedecc55
+Entropy.4 = 13747421a19855709f3c468a5b1f77c1
+Nonce.4 = 9eb589a0b18c06da
+AdditionalInputA.4 = 3c95ff221ccf82f4041fcf4e8a56de29
+EntropyPredictionResistanceA.4 = 3aae0078b85ee10c79d1925f5ab2045e
+AdditionalInputB.4 = 3471a7ab4234fc6e8678d3613ee10835
+EntropyPredictionResistanceB.4 = ac1f2ffdd850e7602cda7debeb042bea
+Output.4 = c346efd443cec6f21eca26eb5289e0bec5eb3f7c3785842e7690d5d35eddc87d79041aa0a9d5e4ee9ec69a4b67b26ccb70eecb59df582316b8f1b945a25c64b861a6decb59adc1447cea219947f6aa72
+Entropy.5 = 4f72d884628c90261fdfa9b87bdbbce9
+Nonce.5 = 3daaf175d0290ae7
+AdditionalInputA.5 = 8b3a7401800ee1bf5fdc76243b313244
+EntropyPredictionResistanceA.5 = f725e8a9f9b8c98807b57a591d4e8b2a
+AdditionalInputB.5 = cc199f4f43036b0af63fe3f8ef4ab3d2
+EntropyPredictionResistanceB.5 = 5b692a6e310c4851bc4a6d986eba9cef
+Output.5 = 6950a89759b52b6c8416600f9e0d56d19fab12b423d746af9d00a6657f3b8f3a3681c0910343569544b8b537294aa610e89b977c4db21a324317587be8b9232b38d354eb3e4032cacd561dfe42e72d23
+Entropy.6 = 59c23b4073e7c9d2871d5d882953a33b
+Nonce.6 = 17eb2a8b0b9b0688
+AdditionalInputA.6 = a6483a9e5113a45a84f6630869291461
+EntropyPredictionResistanceA.6 = 70c070deb9f1324b8fc29fdb612c52dd
+AdditionalInputB.6 = b93bbb79da7750f44e4561081ac4f29e
+EntropyPredictionResistanceB.6 = 300889913ab120536cf9a389485859bb
+Output.6 = 6a298856c9b25b20de0159890135beddc415802307b87507d62b2ad32b1883e4ba036308a6669a06246d4afc43a29e183ca141f156f7b1975095bf14cceaf71cd2831fac8870d90fe0e1067434783a5e
+Entropy.7 = a4b620abe19aff576cddb8f6d1e83b59
+Nonce.7 = c26d4ba79fb83469
+AdditionalInputA.7 = be26760cfc23c0cad1ad0978c3ec8f09
+EntropyPredictionResistanceA.7 = 74ca841db33e280d59e28e110cfeafc4
+AdditionalInputB.7 = e767cc6694242b003d6d3795415389b8
+EntropyPredictionResistanceB.7 = f033c6a45f443f528a326ed4c2de5cd9
+Output.7 = 89d79211db69679c2269dfb2e599740ff646eb9ebd5f28a68b76665e6087d15fb888bbf899e3d16d711c3db63e3dbf9cd9bcaad6984be04afe5b41c2270431948ddf4486272f136f1c5bdf37cd2a70e8
+Entropy.8 = 994e455c4815ffd4a9ee168d1fccd3b6
+Nonce.8 = 61da827c4e81b102
+AdditionalInputA.8 = 029caa66544f6ae8f6cc5bd3791f86f0
+EntropyPredictionResistanceA.8 = db0b28977c81bc4dd58d06819e293988
+AdditionalInputB.8 = 7f14c05c5d88acafab220aa467e3e3ca
+EntropyPredictionResistanceB.8 = 3983f9ebf1356b0d01e6dc02735596ca
+Output.8 = fde93e19f71fa97fc368f5f4454df8a39b3fce42bd4a801726b296838c3dcc6678bb387687e2c943edab86902e377a619950d36fe78cd7ba3c67aaecafdd9f7faa2076d71fa79646933387bd6bee147a
+Entropy.9 = 2713eb063d3876dd6c3a5903a1ef5774
+Nonce.9 = a180c4123eeeea8a
+AdditionalInputA.9 = 4452362eed6b9c30a01f784a9a06dc5d
+EntropyPredictionResistanceA.9 = 4aa472cf07c278ac367a9a490c7ddef0
+AdditionalInputB.9 = e59780f291461d2665924f3af8bcb6e0
+EntropyPredictionResistanceB.9 = 58d6bf34ec9db314abb119a1a017a17e
+Output.9 = 743f529bee048d0be6f10da0101c63c746fbeed37c6cd0c0ae97854893a00c82b65acc9e6e6ec04357e5e4b3159a4ef3e5e57a38da2e00f0eb3c1538a26ee1a518f71169d59b0d9e8a021f3d623b8fc5
+Entropy.10 = ff2cb4930d26b0ee75bd9edfb77e09f5
+Nonce.10 = 0c80049f75ba95a5
+AdditionalInputA.10 = a52775c066b6e9f7508b30ca22944296
+EntropyPredictionResistanceA.10 = 137ea862d086d6523bdfde203bb8c2a9
+AdditionalInputB.10 = 5e4ad554e65a49685e8527f923cbc0cc
+EntropyPredictionResistanceB.10 = bb588ef2428a173453136bdedec37eb3
+Output.10 = 4e9134db809bd07a46f40bc1a1f6d830808121eed25d17d7ce3eb81bb88ec660b7dd945ebe9fef8bdccda92139f4770ab8a467e0118f24680c6f6e5b9ad6ee94a086118b6cf69aceb8cd809d91429aa6
+Entropy.11 = 72971d13d6356e68fa61d94ae1d76a91
+Nonce.11 = b69d8b39499393fe
+AdditionalInputA.11 = 0e59b74d4ac5ab8bb51c7f4b99ff859e
+EntropyPredictionResistanceA.11 = 9eb2889d14d91a7488207bd8ee536d48
+AdditionalInputB.11 = 232dec60628a43216b75839ac820fe4d
+EntropyPredictionResistanceB.11 = 1b37237b0995a218fb56dd1740335992
+Output.11 = 1f1adb85b8d7d1e022d5a6594ce074242683993ee4d3c5166a2aaf40c239830587b1112af2a4313e363ea4a980b06f20c5ee3207de026aaea9197c95d0e771f4f16a2cab41c0684c15e6462cb7a5a71a
+Entropy.12 = 975c10933f7351262a4296aa6175471f
+Nonce.12 = a34e7c9b3437b5c7
+AdditionalInputA.12 = b7063d6ba3740d5c258303d5393f8f3b
+EntropyPredictionResistanceA.12 = 013e22d2a9002e9e42d27202e0518b53
+AdditionalInputB.12 = 9161780ba6bef05da7290a77416767ba
+EntropyPredictionResistanceB.12 = da23016d1f5b7b63c46c1391886934d5
+Output.12 = b68b4ebb6856af7337745e0a50caa1d34abe27594d56d846794c15bc03973d67d548bbd2680dc749c5171372e27af16900d6bf729a84e6d7626563ef0b4c90c275d9112567b8ca6e0093b34a0966f27d
+Entropy.13 = e1dfa7999006aee12a2349ae1d580f5c
+Nonce.13 = a2a437dc0bc294f4
+AdditionalInputA.13 = d77a830f650a3331a72f0a4b1471dab6
+EntropyPredictionResistanceA.13 = 49f2670afc55e8fa8152c787a014880f
+AdditionalInputB.13 = 37aef81e729ed0b91bf054ce98df4a76
+EntropyPredictionResistanceB.13 = 670c585cfca574ea2d13f28e6a0ea677
+Output.13 = c009a692d7e566b58cc54a45f7d6987a48d96c3664f6034ae3ac0dae9ed5c220c46ef0c638c75353ac790124d88ca54fe43797f1a70422604507a2ab458fed576ccf6d25cf521da8d0c3b7bfa16ee6f6
+Entropy.14 = 310d8d08687545e48493db179e6e92a1
+Nonce.14 = 76cba53ff17cd783
+AdditionalInputA.14 = a1824b07e0d2ada0fadec29beb53a9f7
+EntropyPredictionResistanceA.14 = ba5d38da5f2e51468b0a9489c88b8db0
+AdditionalInputB.14 = ccdb3f7d7f6a4d169f5f2e24ec481fcb
+EntropyPredictionResistanceB.14 = be4a2c87c875be0e1be01aadf2efeef6
+Output.14 = bfcc8f2ece23d22545ec2176aabd083855923ca9a673b54b66a3e2562212aad3cc74c4c8976de259cc95a2f09a85b7acd1f18c343eff0368a80e73a547efdcd954816b38df1c19556d714897e317d69f
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = db8128c27eaf3a39d5019785aa35b20c
+Nonce.0 = 3977437fd75e8032
+PersonalisationString.0 = 4f8060506daf40819c7c58630151edc7
+EntropyPredictionResistanceA.0 = ed340ddbe1b29eb9bedb3048a3fdd06a
+EntropyPredictionResistanceB.0 = a957c5cff00eb87549c307400d4059d0
+Output.0 = 4ac933b7de803c266461493a19dbb00e9db25ee768165781fc9a70c67c4e8a92db36471e3cb1714fbb65e17d74770061b0abae52be34a604d87e56a4ae1e90c6533cc764aa7419b5439e3efa193934bb
+Entropy.1 = 87c80a5e334e02a36f59324befb4fae1
+Nonce.1 = 9e5b73aef691d45e
+PersonalisationString.1 = 6cc5553434148499d65f8e4ab7334938
+EntropyPredictionResistanceA.1 = 8973f58a487b457d73c4312ff890b053
+EntropyPredictionResistanceB.1 = 472d95de538f1512f6432233b7d9c058
+Output.1 = 5ccdcb3d022eb4d72c211594c916dd2d883d2ecc190f6e78ed76f438562059e6f8800ce6d11b3b8603243f4a56f38d41672935ace8d6fab825cb6978a2d0827aa65c70523c48f7b9a8f6fe43cc2ba927
+Entropy.2 = 83c113dabd43229d4a7333147c7d84f4
+Nonce.2 = 8fc29ea3d813c0f1
+PersonalisationString.2 = 77dc45d37d6d401e45c982f2c4960fd6
+EntropyPredictionResistanceA.2 = d45c5184906a02ea4c6f11b149db7f98
+EntropyPredictionResistanceB.2 = 812904be3ee96de25ac9a78ccdfddeb3
+Output.2 = e4f08087eaae11fca94bd7df816980e6608e208032f944f1efc50ac8d47834b9f10c00958837633e61f3ed2351c6885446b72d2634bf6b69f9d7b7a36f3fb8e98294f1e9d92a4a725462e60325dc41ca
+Entropy.3 = aec809c1b7eef916569cca247cd9e7b0
+Nonce.3 = 72df669458c8af4d
+PersonalisationString.3 = 824b11ac7e13f654ff4238e0f28a2f60
+EntropyPredictionResistanceA.3 = 29fecba0c46130ba920fc8bf7d29cfae
+EntropyPredictionResistanceB.3 = da476607f3325566ef52fb69a3defc54
+Output.3 = 514f1adaeb99dd2833f714a53804aca43a99fce45caf5db166b15acb0460f5e7e23c696fdaa8ecd138a937367483dc7bb7a6af51a611aa7b0671559aed14109133738e06bf2190bb85abef3a674e488a
+Entropy.4 = b2f5cacdf871e742c262c7671b59a74c
+Nonce.4 = 6a41242b2225f252
+PersonalisationString.4 = 2cbfb9bc6c318219df86e08ab11419e2
+EntropyPredictionResistanceA.4 = cba7db3bf77d6619af46532eb9c01b72
+EntropyPredictionResistanceB.4 = cde2978ec39e4fe5247ac5f0fea559d8
+Output.4 = 67d393c84d05983f5acfb8883ed44e24406f216efa3d6650807fabd3028fb1f762d6c67ffb0aabe8143fd3ddfda8ca2c7ef13546dcffc4dcf95b610a28f7cc2a25ac4e7ec0944d655c56c110fa931ff7
+Entropy.5 = 54ef54d0425f8cebd127fed0f3958846
+Nonce.5 = 13dc19463664d19d
+PersonalisationString.5 = f0cef260a2f74a425d062bb25c68c539
+EntropyPredictionResistanceA.5 = 02af6baf06de126b55fbb3d7f114728b
+EntropyPredictionResistanceB.5 = b4650839f1335f8c2c3be18ea3beea75
+Output.5 = dd8b96a5f3fbd0f5f69477c5b7e71099b2113888fcfa6acce713a13f040b0b5fd55100a3d0d3a344706a31e796d6999f63cc6357f5ba386f38d46bca9c42a25c4a39afdc7db8d843a032ef35bf4b15ef
+Entropy.6 = 4a1781c483eae07e0a9ddd91b908fb00
+Nonce.6 = a21a4f5e1c6e9da5
+PersonalisationString.6 = c4b7084d73d399c128e0a119217c793f
+EntropyPredictionResistanceA.6 = 8f380f407dbcc982cd0761e5f0fd6d33
+EntropyPredictionResistanceB.6 = 9a646bdc6132addb7ac0cdefb1b91f7d
+Output.6 = e465cbc1502709493de1d3347a07f855b2dd6435a4ebaaf00e7756c1439219546e5fc67093f0eac1055d221fde51297cdc9ff41121d582514c75e9906870f99d58806f1873f0183277510cf1f067a840
+Entropy.7 = 36974a7c276e18ed2704eedef6b627f8
+Nonce.7 = e57e755d554b80ef
+PersonalisationString.7 = 626a8bc0d1fab08c8c6afcdc3dc6ac33
+EntropyPredictionResistanceA.7 = d0f065c236f78964cfd3b661405b9864
+EntropyPredictionResistanceB.7 = 0631fda19fefa8b5b003e8b752ef060b
+Output.7 = 6b9ae340e5e75e1dcf6f181589a1fdba3951417c30467be4b41e9ff4ce03073ef1ba0a19d160abc8e5e23ed433bcc421ff1f428780454defb66511fc94794f3ec1c48c014d783bb173db102275b64b1f
+Entropy.8 = 05f934d668e9630a131ac51e2560e45a
+Nonce.8 = 78ceb8ef6fad7190
+PersonalisationString.8 = 8536223ee0184eb43e84a07cf71d445d
+EntropyPredictionResistanceA.8 = 045cd995039bfb3db624f4687302445f
+EntropyPredictionResistanceB.8 = ad08829815e7407fc962afe2779589f5
+Output.8 = 97142414252556f5d5efafd39852d7a84e70316a0aff7985ed6761798eec57621271977bb950187a290dd4dd514b7a801c98103d4fd4012afdfe0f264bfe3f6e584768503831ea0211fe0415a0f59324
+Entropy.9 = e2ee5b3970ac4cb83061e5692b349df8
+Nonce.9 = 643b6100aac55ab2
+PersonalisationString.9 = 71a4316ea88341dcf3c9280a5cb54b7f
+EntropyPredictionResistanceA.9 = 96fcaf7a2ef7e3a1aa54c3fb1963dfd9
+EntropyPredictionResistanceB.9 = 3781ca34a95d6fc3250762bd1d31b0b4
+Output.9 = bf767ed7e5f11abf1a6aa5c453fa124401297e32f23270c8d78423a98f5e6783f3e8e835aa734b36c2f11be30acf0b598c7a23ac40ce894689a24fd8de3e0812e9a5cc1791091c981bfa9ec2168daf90
+Entropy.10 = 32bd60df5e2b435c922a9e434f5f99be
+Nonce.10 = 9c5437ff159c7e5e
+PersonalisationString.10 = c759e4ab6c8fe8a11a1f8472b06eee0f
+EntropyPredictionResistanceA.10 = 67b81b82f7b5ecdf6e60ec4789820d37
+EntropyPredictionResistanceB.10 = a1071d7b91cf1e3d14f10ef7f34922cd
+Output.10 = 329cc81105343bd74f24c0a59b972892e789ea20e46ead1a74e7af036a836d46c70461c52df5038282e53e2db44143590d6015809db56754b778a2a7278d5050eeec9332fd732c9c714a676563c8c3ef
+Entropy.11 = ac524ec09761670b96563803218a7d35
+Nonce.11 = 89bd8e682b2a5cef
+PersonalisationString.11 = 1531a17d3d89c1d0775f3a630ba730b8
+EntropyPredictionResistanceA.11 = 64d96b968ec98839a97a4704a7a5b2b8
+EntropyPredictionResistanceB.11 = 59f3ed6c370031f1027def8fa0672a26
+Output.11 = 47e3bfaa2cbe4b085603991aa739363a639b064dd9120e0149cb5ba2ba0539c4147897a34d98538935fe25ab36cf50f6a1c3aa2892e2c06591e4c2bccfa990f6317732d5581944c8d2ef96d0329ac574
+Entropy.12 = 2c9a43ef1496352ea62ced1c345de409
+Nonce.12 = 0a9cea6898b8a53a
+PersonalisationString.12 = 00bfb2ff2600fe1dc6a2d85642e9eced
+EntropyPredictionResistanceA.12 = bb2f01a435ec6d2050a692b44fa152bf
+EntropyPredictionResistanceB.12 = c42ce4ea30ef761297c1ef132839d411
+Output.12 = 193d08bfb22121deb22e8079895703e2a518b79bfc3104038c2a220f6babeb8f28f5652d5d1b3a8b468d8a4ed0cb32c69c5519ded85ddc0fea62d77ec5158b6a55caec3bbdf1f6b93e449d6f15cce26a
+Entropy.13 = 0f15ec0c8d3c184d9b2a47bf9ffa2098
+Nonce.13 = 2685161bec91fad2
+PersonalisationString.13 = eaef27215467d7878106ba9dae990bef
+EntropyPredictionResistanceA.13 = c55808ccafd46ecd18081738cf835e13
+EntropyPredictionResistanceB.13 = 47e7df7e3f879f3fbb759c2051e34217
+Output.13 = bcf79ad50201f3498cf18288dc30c32dfbf2739490c74862d5e9c66b16195590075cfe094956e2bcba2009b64a5f8b62d144158180835a7f51b706a12884e309ab4ec198f5bd07efffd591d5cc8569e1
+Entropy.14 = 56a0b6194153e0d2737f49f4e5cb77ba
+Nonce.14 = 4d8fbf9914405833
+PersonalisationString.14 = 81a85cb2b6afa99a1f609f83c3b15105
+EntropyPredictionResistanceA.14 = f324c09f96434ceea7e756fc2f55a0b3
+EntropyPredictionResistanceB.14 = f043b6e11fc2f671ec00f4d478b791c6
+Output.14 = 40e87b822b1000441884a38b8776baa69fbea99962571e8a20d8af012d50c8c211860ad579869ec880320ea8057d5cb0de9496ec57d8b594ca8be5b94219eaa800af7205f8a83b66c87e0fee9aa9732f
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 680face90d7bca21d4a0edb7799ee5d8
+Nonce.0 = b7be9eeddd0e3b4b
+PersonalisationString.0 = f58c40ae70f7a55648a931a0a9313dd7
+AdditionalInputA.0 = dc3663f062789cd15cbb20c3c18cd9d7
+EntropyPredictionResistanceA.0 = 7cafe231630aa95a742c4e5f5f22c6a4
+AdditionalInputB.0 = fe85b0ab14c696e69c24e7b5a137120c
+EntropyPredictionResistanceB.0 = 1c0d7792898827948a589f822d1af7a6
+Output.0 = 68004b3a28f7f01cf9e9b5712079ef80871b08b9a91bcd2b9f094da48480b34cafd5596b0c0a48e148dabc6f77b8ffaf187028e104137a4feb1c72b0c44fe8b1afaba5bcfd8667f2f55b4606632e3cbc
+Entropy.1 = b481041a75b03cdaa07784e372b37689
+Nonce.1 = 7fa9e792e1fa5e07
+PersonalisationString.1 = f8f0f1ed3f0bda164e596ebe123b7f75
+AdditionalInputA.1 = 3120e329f1d55a8c07e7472ac77e1720
+EntropyPredictionResistanceA.1 = 8d4c7234fb9dc3f9804b4e48a32a5db7
+AdditionalInputB.1 = 2b9ff310e63c67b5e0aeb47ff7a102fa
+EntropyPredictionResistanceB.1 = 4990333c4951d02823765f90a0aa8850
+Output.1 = 7d6b3ab84bb6c014dd44eb1266fb3954f1e8ff6c48a4d91514f685f0642497cb1936a0afc40c8ddd1545204e128fd06d4d18bba05d1294e64d57a0593b803a311b37cc2d631487ab03a00fe288e5e745
+Entropy.2 = aef9d310cfced29873b7e2b7be37572b
+Nonce.2 = 76ed84b043364cca
+PersonalisationString.2 = 67e5aa83fa572ca27acfcd27d4f5e49b
+AdditionalInputA.2 = 7ae90f7dc220bf5b387ed44c2425af29
+EntropyPredictionResistanceA.2 = 611917f9b12053f919cdf60ac9c0b364
+AdditionalInputB.2 = 9d750dc13c19acf3cdba10155d3ca5a7
+EntropyPredictionResistanceB.2 = 909f096204f21b58b0bbdcf38a3be7e9
+Output.2 = 892776bfb009fe0b1793c0ebb2ba549cbcc4a29d0374070683990c3f2c622ee08977fe9361c59838f068f6758d7f3f76c383d9f59ded8501f25eff9be4a1e2de3ee484a2e8069c51e886a75a229ae15f
+Entropy.3 = b68686b8cf817da9c93cfcd7aae410c0
+Nonce.3 = 2d3a8eaff57c6ecf
+PersonalisationString.3 = 03cd598585a3a80f9a81e2780c699269
+AdditionalInputA.3 = dc761246e0a74339adb76c729ec1414b
+EntropyPredictionResistanceA.3 = 990f20f70c587166292b5f56cef1ccc5
+AdditionalInputB.3 = b2936022922202757eae4e5d59eb29e3
+EntropyPredictionResistanceB.3 = 018c38a602f811c7cdc16ed59faaf405
+Output.3 = 6e9735b82a9da2074f93b54580aeb76bc75265e525f1b50a8ee0d6851317beb64f477f3b3457ca9c120cd8eab6d37400ae62332bc91cab803b0c44e070666f9389a9d0fbe8baab9cc5c0cd54a397c8e1
+Entropy.4 = cb68eb95bb00beb896048d5d323d7379
+Nonce.4 = 42b1a4795806fc6b
+PersonalisationString.4 = 700dc7725321a0a21a70ff6aebe30d82
+AdditionalInputA.4 = d57c3dfbcb18e280cef81c7118a520f2
+EntropyPredictionResistanceA.4 = bcf67d195862172f49bb319e609965fe
+AdditionalInputB.4 = 6e569776b8a26d8e7d3c87f99f932aac
+EntropyPredictionResistanceB.4 = da2937165b8dffa6560e1fd434a5ea0f
+Output.4 = b017eb98c5d782469658d47569453b8322a8db7a2abe75b4e68637a395f7c67bee75a42b39def3aacb0b1a03677a0bb4d31257964f467b7b3962d912daf6d8441e5952aaa427c246a1f1a623a8498a53
+Entropy.5 = 81e7eccf46acd145d435b80f2a6e72eb
+Nonce.5 = 1b236d02f1255427
+PersonalisationString.5 = 33a186afbc44f3adec590d7e36bd9905
+AdditionalInputA.5 = bcfd99d6931ea9df679d196d8412c9ad
+EntropyPredictionResistanceA.5 = 0c26e8ba13e9306856d6219ad04a8f1b
+AdditionalInputB.5 = 6dd61af0f5077df531c151f2dbe2bad2
+EntropyPredictionResistanceB.5 = e3fa436bf280f579c22b64c91ac700b2
+Output.5 = 41e6ced34a97afee72166239455d82fe020f5464ccbc8e875e06a05875ca844d8b7fa3ec360d31ae57f53245e7c4bed501ebb6f9b4af350ff9cd86a571360804d3a34b9dc11eb4be6427f521bd14f893
+Entropy.6 = 1b76bb8a0dc7067afa193bf5dae1cd7c
+Nonce.6 = 03dcc37b5788d22f
+PersonalisationString.6 = b06bb683dc5018f0678c14b97547944e
+AdditionalInputA.6 = 87ea4f713562b129079b49956eb88abb
+EntropyPredictionResistanceA.6 = e0f4adda99dc6d776fa545aabfb76725
+AdditionalInputB.6 = 5650ef281323b6acec34c51795c67160
+EntropyPredictionResistanceB.6 = 5001063ddd99c7ef656a16e7604c5102
+Output.6 = afeae028a358702743b14dd64414d3350eb1de78702677e30f7ff9e71d6f9b368c53e79b0a353a43ec06e9020c7234232a07d504c163d7a8a63496bdaf670efcf2597b66bd0dea2b827e0a4ce513425e
+Entropy.7 = 117ad3f68248555a2b9941cf0a56726c
+Nonce.7 = a162bf9b531f26e3
+PersonalisationString.7 = 16168c2a54d8dd7150cd7f122482a723
+AdditionalInputA.7 = 4e4cb0001c5288c1538dccb80be01e41
+EntropyPredictionResistanceA.7 = 416be004bcc6fc35be8362c6dbd9771d
+AdditionalInputB.7 = 8177c1d4def6bde093f27a9894d345ee
+EntropyPredictionResistanceB.7 = 42bd6e187868d598f6e2647b536c9728
+Output.7 = 1e407dd8c1dd1436064f2015eab9c5fb9b88b6dd017e1196ce70fd9ec878a8cb02e2d221f4096e7998dbffbf0b392e7f4d97e0d1cdf81755507c04b5a6254086b40d153b10faf0011980bc0911275145
+Entropy.8 = 54bada0b89d9f5bbea78aa8c409dccd0
+Nonce.8 = 39acfd7b1645a0ef
+PersonalisationString.8 = 1c8feb149d98faf15b73622167064088
+AdditionalInputA.8 = a71ee8a522d67194bd1756c2e2898115
+EntropyPredictionResistanceA.8 = 193b60cac97196e4cf9795fede9d898d
+AdditionalInputB.8 = 669ef07679f336f529058672f861b0f3
+EntropyPredictionResistanceB.8 = 082a9731a8ce2168a10420c5d6bd9a0c
+Output.8 = d72d43ff8704248a0d59a111b64128fa6bff265c52bdae38507ce5f302158be902d8380fe247abc0275dbbb502867f7ad1cddde0e404fd9d64ec494daac5d088401b4da696f47a31b4435abbea71c387
+Entropy.9 = 8cd407fc7a36315f1cfef1489a2ecdec
+Nonce.9 = 433b2cbc1fda4ae1
+PersonalisationString.9 = 114a4f3446eb3c98aa9c182d329b2856
+AdditionalInputA.9 = f29994a39804004e7ac50642f99c403b
+EntropyPredictionResistanceA.9 = d967e192ea8942aecaa169deca4c2682
+AdditionalInputB.9 = 40782cf3d002aa603026e26d3bbc6dd1
+EntropyPredictionResistanceB.9 = 46edb421a0092a12091497a5fa159327
+Output.9 = cf381392567f9e0d1f55c642bc64075699254df6b4b375fff8f869f7a10188046276dcf41076c55990b6b997db182fcc88cbacc4782347b9f4ce39351b77e378931d5cd026d997ab104b8b7787b2f92b
+Entropy.10 = dc8d705180e22f8be91aa4bd57a02caa
+Nonce.10 = 30fe8340a53c64ad
+PersonalisationString.10 = 4b51ded198d1b16f80ba9e536a2a046d
+AdditionalInputA.10 = ceacb5b37ca76de240a9f4dea89a0389
+EntropyPredictionResistanceA.10 = 2d460e409c3a2db9fdfde9034a4c8f30
+AdditionalInputB.10 = 73c614b8e273ea9203683d1b0cb2d7a6
+EntropyPredictionResistanceB.10 = 6195fa6653dc29d84d26af5118fb60af
+Output.10 = 6a136d4218255c70913b73af480af86cd8ccb6f319937e075365ef014187c312f9069f1fd05c6e0c44a1b7ba9dd25e948ac155461e425d864cc83b63bd84289b768058f7647a8921e23bfa7c73b4476a
+Entropy.11 = 1796646b48a2b982fcf7a4f49fee7e3d
+Nonce.11 = 6be673106a4a2937
+PersonalisationString.11 = 5297aedbca866d1754c4b6af443ab24c
+AdditionalInputA.11 = 771688574b52154837bdff6ddcf24d52
+EntropyPredictionResistanceA.11 = 1eb8d3598888d53f59572c63c0e4bb18
+AdditionalInputB.11 = f6c627bc84b2c01a9c055d4632ec955c
+EntropyPredictionResistanceB.11 = 3b17e0f67d81a11cc878ef600d1bb810
+Output.11 = 9d1c796a2343ee855859e04ed702fa233da2f73ac9ad632fd17c8c5afe15c5600c6ab2495018f808b1cebc54b14ae2b1f929347be4aed9836e0b45dd2352b23cb28d753045f1ae6aff7598a9a1c350a7
+Entropy.12 = c5aa3b0e9d8f916f18e73daa0cb88a44
+Nonce.12 = 7f7510af40f9dd54
+PersonalisationString.12 = 06c35c446e28f21fb1cdf2d40af53dc6
+AdditionalInputA.12 = 41015c3ef3adb96edbfaea6eb8e0dea6
+EntropyPredictionResistanceA.12 = 0f8ae4d62be2c5754f6eb10410c12138
+AdditionalInputB.12 = e6b60016bb99415640506851c0fe3fb7
+EntropyPredictionResistanceB.12 = 8233201ff9c8121a36ae77e042a98211
+Output.12 = 027ff1ab4c406c048da6a8c24f04d12a5a35a5191b62b496459b750b10066cfbac502b1ac612b58527744f6ac5005d22d3f86c1adeb1c1bf1a26902474d08bf886ed5bb26e6d1b529df0143128b397f4
+Entropy.13 = 57c7e29e0305e6a803a568f47acaed60
+Nonce.13 = d13e192c1e16bd9b
+PersonalisationString.13 = 89199bb960ac741082c5fe5ea34ea2f3
+AdditionalInputA.13 = 53b5b2783d8191ad4eae3ed87bc059ed
+EntropyPredictionResistanceA.13 = c50ef5ebb52c5493bcc4d7a0e5be64d0
+AdditionalInputB.13 = fce4d7f5f0cb2115d4c4be2294deca56
+EntropyPredictionResistanceB.13 = 64b735deabbf67e94395544497e4816c
+Output.13 = b98839a962db8de7a17d35c35bda06c4139db3933c4ee60bf1779b16d804d7c600a62f9c57cef93a79ff281989d90481db863d23cd24c4b566d74e1de6596b7cceefcef1f161e5a51d115128e0b23c5b
+Entropy.14 = 567d3f4c0de396ed67569c070d87f2b5
+Nonce.14 = 35ec874e88141898
+PersonalisationString.14 = 43c16ab49ca5174f907d7899ebd242e9
+AdditionalInputA.14 = 6c0b479d9e847dfbeae230bd4601d0db
+EntropyPredictionResistanceA.14 = 3ec42ceb295b7d312e715e46b96f9da5
+AdditionalInputB.14 = 0d5a2183c9f9ca6941f6a617892f5e47
+EntropyPredictionResistanceB.14 = 998f9cde45b1dc22db6d2d7bfd4f3930
+Output.14 = 934fe82b0951b97dafc5ba16e87b0459691156b42ff2dbbbd8f6ed9b04be952af267c6a17fbfc86de91f9f07eed482a5362b176216a8963af485503ba93b2e82c03a3ee6225077d90cd961e24f6026f6
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 9ed098d75953d82622c719adb2633297
+Nonce.0 = 97c645055b36e04f
+EntropyPredictionResistanceA.0 = 18bc0309fe5da65b7a07d8124ffe64a1
+EntropyPredictionResistanceB.0 = 9579efedd34ce386cdde787055d87178
+Output.0 = 012b3d7a06385df5a9658781cbf8c15be5ca7b2c79882642115df9093da32db4c5a81920c6d3a8e6de64ce2c67fb9869b28e0ea8755363208eea2cead38c8b187c607948630ad87ec04980a859675b67
+Entropy.1 = 150307c3a4cd91d1137f8c86fccb7609
+Nonce.1 = 4123899661672c6a
+EntropyPredictionResistanceA.1 = f0cd57ffe07ca22ad45d8f6b43be350d
+EntropyPredictionResistanceB.1 = ce7b8427215fce350c6662eecdf4a2ab
+Output.1 = b7fb3d1b1b412ceeeaadbdc6a39bbe300425f719adabf8318e4dde29376138ccec563c25601e92b4ba745d37ddc04191a75fe04586870f89b4c56825e8767e47385bebad23c5c510afe877f52fff0f4d
+Entropy.2 = f0a42a0629542a0005e3c68a926a92f8
+Nonce.2 = 0e03319728ab4ba4
+EntropyPredictionResistanceA.2 = 7bf7b180984840a5ba9628a6ec9d9b9e
+EntropyPredictionResistanceB.2 = fb80e32eaa9bb0afc2b7b17ff84de4cd
+Output.2 = 9eb4fdb96c1b1d14a8ca9caeca28aadfa91c245a1d83bfbde32872068f9ee6298c945889ad3468d6f63c588d41f17db6bf0147561adf1891274c5529a394e344684658a45b3132f4be100335477492ae
+Entropy.3 = 57791380fa9a8e88e2ab528a5bae2093
+Nonce.3 = 773a018e4b5dc987
+EntropyPredictionResistanceA.3 = 7b162af5b0ff0abaad485bab5ff789f3
+EntropyPredictionResistanceB.3 = 7d4f9a4229f3410fabb42ab8fc4702eb
+Output.3 = 9f90c928da075d65202333319eca49812340bdcaafab90fe3d193f527a00480b53e48ab26d04f0891ee280b17ea18aa833ebf1b60c5efa990b4c8d74d2ce451514fe9664bc170f9b8519b12c1d50406a
+Entropy.4 = 92844b96347909fbea2ed6de9670aa5a
+Nonce.4 = 4627e81c7e6717b7
+EntropyPredictionResistanceA.4 = 6fea5bebdd5f6b12072ad41173fdf5c6
+EntropyPredictionResistanceB.4 = 85fb2f63cb6a4e475ed92528170f994f
+Output.4 = 957332516cf21bc510378651f244bab0f1f60d84e8271a33db9d3bf73b696086abb38035deba3cb364ade0a3a40a10051c4e7ddbf385b091cb5d081a2946c4ed3bfd1dc64351770a1d677038d5e0ae31
+Entropy.5 = 1c678c55db3cfbfb4fbac8e216d32cc3
+Nonce.5 = 66da87efdbac473b
+EntropyPredictionResistanceA.5 = f66c6a0fd291e67344f94f2c274ef990
+EntropyPredictionResistanceB.5 = 3516d408025be56df7bacef5a5262b50
+Output.5 = ad77f50bd168c82f8b6a74806c6565f392ab2a85486de68086719ddd7523215554ff87efe4b797fbe91b47b4309ff1e1b12e8f0c2dbac35a5c5223a2236ce1aa755087576053c33727a393d4288014e4
+Entropy.6 = c2ac26c2a195cbef08e842d4d2cee414
+Nonce.6 = de78fab1faaa9736
+EntropyPredictionResistanceA.6 = be01634005b4867a735d289d9022e061
+EntropyPredictionResistanceB.6 = b48d3674470e1238c1b6888c285104de
+Output.6 = 1b06d870d720facfab9d22a8e7bdbabaa77245634d430149963d75c058929cb7a046294d302dc84bc684e3ea3711900115c74fd8dee5ab2a115c1a736fd61a4b2f6120ea96354bc25b88f4b27168cc59
+Entropy.7 = a471e342d8022910dcc0711ffcae6dee
+Nonce.7 = be72ab4329b64c05
+EntropyPredictionResistanceA.7 = 7b08f68368d1a9cae2c245dd4b68e836
+EntropyPredictionResistanceB.7 = 021fa0ddc713b20ddf8664b5626b408a
+Output.7 = 55027d6b64c2709a6b1953cccc34638ba9f267dff70ac5a0c28946ad199221ca166a78011887800f761898cc8d39e8b965ecb44165c5230cbce425a297e53e637dcb4c7ca5ed207b148d84655a7891a4
+Entropy.8 = b3886a56f9cdbc0866feef30c333f4b0
+Nonce.8 = 0ebf1569492a0b16
+EntropyPredictionResistanceA.8 = 5eb277e894b50da324992590bdb0d0ee
+EntropyPredictionResistanceB.8 = 12b34926c3b45b4a45727da1f1ae103f
+Output.8 = 8938373b00aba506ac97201dbe48726f2e4988817060a104c572707b2dc7f46828adffd19da9a56826935b972b65e096076772aa87bbf433f809d2a3b38bb6d1739404322d6e4e4dd6f47f0d805315e3
+Entropy.9 = 94956b78153ebd0fe76c5636f7c789a3
+Nonce.9 = 0771d093deb667e7
+EntropyPredictionResistanceA.9 = 093ed4e8fdaa6adcc969346d17f2021c
+EntropyPredictionResistanceB.9 = 497acc44830d697a1cb0b67bdee65979
+Output.9 = 166531d929cb70a46e3e5be6b6ac4e3e5efda47a64abad3ca69cb0d39cf8b9e2c20d7db473833d03d546d27be934140fffdf15b1dcfc92840c502b56061963ef4e4d2fc1af039e789ab83f5231af2aec
+Entropy.10 = 0f0f8b70d5fa21081aec8791cedb906c
+Nonce.10 = dc40c6561c980906
+EntropyPredictionResistanceA.10 = dd3356a9bc982c119b4ea06aacab4e82
+EntropyPredictionResistanceB.10 = 8d98c9357560d3cef9caedcd66a27513
+Output.10 = 6b354fa6c1c0266e2d279fe068514818c2021c8688b23773adf3e32a1e8a3c52607ecea82f9374762537e24ea0112420082c1f4f8ad1760241df57efc20e03ab9ab6c347dd4e17cd1cd796e951cc17ba
+Entropy.11 = d57789a37f7e85ea459f3807763d0000
+Nonce.11 = 96886de36ce62176
+EntropyPredictionResistanceA.11 = be6743d0f6b62fe279bd35d670bd89d5
+EntropyPredictionResistanceB.11 = 7cfdbae282dd8e48fc3bfc12ba0dbe7d
+Output.11 = 8befee1eddefece1196505fe7e96b0f3a30c792fcd4fa8801ab152f483ef49e19df50799fb5db0c2af59875d66617df5bc6c2c5b0dba1afe907b9d3e7cb6d80b731f2d13c0e068e375120b26b97e32ce
+Entropy.12 = 254d5f0802d36da7f5258611e3039881
+Nonce.12 = d2a2631c981acee7
+EntropyPredictionResistanceA.12 = f5cc92c7635e982883abbe42b9256a12
+EntropyPredictionResistanceB.12 = 64d27ad5dd1602bc96c68e7149bad64d
+Output.12 = 33694405e7a4affee2217c395e8caac9d10d46f9df39e9d226bb03ad87e92bd239cc9dd4783f7c159e06ddd336e8211a4fef37725c094c44c3f1503d862ba3f1083ad4a7b8f31702020e4d0aa8398bde
+Entropy.13 = 3be525fbffee424fc827e6421189173a
+Nonce.13 = 59346008f5344a6d
+EntropyPredictionResistanceA.13 = 85d3d16645bd5c3191f50012b1b36f6b
+EntropyPredictionResistanceB.13 = 511bd46607af621babba6fea03df28ff
+Output.13 = 831d5e0c8df3c205ad5ade4f3fd0987d67e853926c81601f9f71ad2480d7e51aa6b0325626365bb38a3e275419aa110f23e52b158cbee027dc6eb55000a0e745cf2071191996f204aaf9b12744df9750
+Entropy.14 = 8951f977b61c9b24c7b12c0a769d16b0
+Nonce.14 = 2152e014ed0b825e
+EntropyPredictionResistanceA.14 = 427b47ed008e489cfd06e1a6e0a9f07b
+EntropyPredictionResistanceB.14 = e5ee8df96c0e929446502a4bbd23ab22
+Output.14 = a544ea7c3362570f48a42635f4b79f615d11a5d8a480d85ac71e4be90074fbd5e2d368d00755e95a262d79ed262003d3e2a26f82c37d091ae763a01fba08c87b3ec0ce817bbab8d1905f91f021b7d7d0
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = e68da35b97a8f5678599d0d4586c45bc
+Nonce.0 = 4c90ad68c243b254
+AdditionalInputA.0 = 39fc61ed83d2908b0683b58c8159c9bd
+EntropyPredictionResistanceA.0 = f52e4d72d212be11f7554f6130ade35f
+AdditionalInputB.0 = 761f1a290a64b2e28adb04b3bfb480d4
+EntropyPredictionResistanceB.0 = dbede6f3ebd40f3fd668d35fa25c32c7
+Output.0 = 70dedb2b0a5ed503c0f7b520e39cbdc39525669a9b60de81f61f3a9df95f4eae3e4f8b21e6f643123c2a38b8667a146bf3952287af731d591b178cdf9c1c2c0a00b3472cb55961c084d3d8cb538c5728
+Entropy.1 = 00c599536ad13af4045f6d8396cf4776
+Nonce.1 = 8e3b935d6127adb7
+AdditionalInputA.1 = 06af37f316e2f4506ac817a5bb844d69
+EntropyPredictionResistanceA.1 = a73bdabe60fbc3c50c717315ed86adc1
+AdditionalInputB.1 = 10fc5bca49939030d41d9a074217a1d2
+EntropyPredictionResistanceB.1 = 253e62dd806e9e15569c6ee941d0628b
+Output.1 = dd11c8119ba90b852829a62ba9396675f6d130c8551ef85e385b186703e481b28e02a24b4e58040fa62c2bb4676b1e5ca170b093ae4dbbf6422c424510b62fbccfa8d12037f523b38f685a00a26a1726
+Entropy.2 = 92b722fbf414585796b99da1ff5622a6
+Nonce.2 = 5c4f2ee2ed9430b1
+AdditionalInputA.2 = 568ef19a827b86a908a2f34982c137a3
+EntropyPredictionResistanceA.2 = d1f75e00e4d1f83ba2c889bca3fd3af6
+AdditionalInputB.2 = 080f1aeeacfa06ea26a34128124f3f5b
+EntropyPredictionResistanceB.2 = d93ee8430cf8163a60223368aad42859
+Output.2 = 92de4251b661b870937ec1a89430732fb7628086aea64298b0a7a72bb479f3cfc15fbc6a02a6706d3d8010a5d110cc4427a13785580f34b7ee2fc00544f5d98c67cbd3e40d00a311d668aa944688b744
+Entropy.3 = cffb8cce3aeeb1fb7a2422ad236db2d8
+Nonce.3 = c3bc7d3464085fd0
+AdditionalInputA.3 = f2f05e26da44b6443d119dc345a55f8c
+EntropyPredictionResistanceA.3 = 454600335a1e686ce29a4ab2e53af9c4
+AdditionalInputB.3 = 8419fec895fcbea4deeec344b750db45
+EntropyPredictionResistanceB.3 = 511e4daf6fc61b60535c95ca302be6e4
+Output.3 = 32fd0b4a0f6bcf866a71c1cb0339bfac1d3d4fbe72c064c56d2a19bb219e63823e2246caf72935389366947df862df1b7dbc9f69f3c2575f90c6e9b5fc77a51270d5df9e62a0c701d708687213e1c250
+Entropy.4 = acac19a4d2af140b0773c7f1da7d7d2f
+Nonce.4 = 1e11627775c0231a
+AdditionalInputA.4 = 4137c18b784e655eacbc109b57ea6636
+EntropyPredictionResistanceA.4 = df11d63b10d4090b77a4a1a1bf5aa399
+AdditionalInputB.4 = 450a0b43192cbb62ec913d0df445817f
+EntropyPredictionResistanceB.4 = b95fee1c5c3eb8ed872a3b60ac07f588
+Output.4 = 07bfcc385180efb62592683fa72b21a9ceb6a7e0fb5721556b3784cd7fb52b7570cf1e8fef585c8cb8a2a93cd0c9c58d3acb3250f6d87f1f59b94e30a5353c2bc752644228dc94865bb7c86fa0c74358
+Entropy.5 = 5344f06f81635a63c525a215c58e424f
+Nonce.5 = 2618760db542a400
+AdditionalInputA.5 = 5b8fc91366a7e254691dbcb37ca448f2
+EntropyPredictionResistanceA.5 = 1efc15a0fb7176154a4292e04504a468
+AdditionalInputB.5 = 60fe2d7f0d142011eb935e29721d44a0
+EntropyPredictionResistanceB.5 = 2ac68167186f10d08b2c11314e02bdec
+Output.5 = 5b026c41d509df726daa7c6858a083263964ca90b1bc3e10b1517580439e56dcdcc18a6ba169b59aea9c28c28261a213edf4bdf243cab550f4a4f0b5d0ad2a27e291cb36982b8b5f8fc7aac433d005bb
+Entropy.6 = fc1228dc0452f3091ae728c5a5b7021f
+Nonce.6 = 6400c0ec0f47b3d1
+AdditionalInputA.6 = b545cbd59bbba21fdf13766862313f99
+EntropyPredictionResistanceA.6 = 25e4d62181b8f8b5f4eb812ef6d51db5
+AdditionalInputB.6 = 9571418647e44bec9c17b0504a854e1b
+EntropyPredictionResistanceB.6 = 721842fd2805754c1f5e3cd67f3be65f
+Output.6 = 62f0a872e8f2d0e7b8b1841db66dcf37658d95867836ad0f46d644a08cf1de50eccb87e1f728e38b4cac87fc36e2fc5ad959d5915151bad2fc8ef1dd144c8e9fcd81e5ea990df75533c96fa1aab07fea
+Entropy.7 = 2040b6dfeae8fb53e5b7e4dd96bbb59c
+Nonce.7 = b599e56a1a5a7725
+AdditionalInputA.7 = 81683667174de7eef24cdb7f3c86d474
+EntropyPredictionResistanceA.7 = 3657fde238549e557285ccdbe699b9bd
+AdditionalInputB.7 = 3d3ca523a4f43c3227b9a12c06d21008
+EntropyPredictionResistanceB.7 = f860f49f00200c8d2f1b4fb47f582d63
+Output.7 = 465f2a05c1447f7721da21bf34eee9e30e6af934dc948e9d8da364064641a65a464aaf93b1438b23d2d6c2e1f465762e35d285c7b8c1e0e055e386f55923b5ee9eba4f5bcc48f5ba379d3bfdfccf92cd
+Entropy.8 = c545c29a46be73d1ab06191dd299da43
+Nonce.8 = f49b272e5a661ff4
+AdditionalInputA.8 = 5b10d814a34392dcf28ff36490a8cc0c
+EntropyPredictionResistanceA.8 = 446acae3cfc89b12a1c83359186d5243
+AdditionalInputB.8 = 3cc655e2a8a9d42e4679aaeea4ae4a7b
+EntropyPredictionResistanceB.8 = 5a02da317f2801531aca3e03e9bc8db9
+Output.8 = 6c8923810457f2138f0eb208350260cd3b0f316fb76cdba9ad56d2ff068305b0acf95d6425b64e7cc21e9a56f1ae27658abd8211a3ee13415354a73e278ac5c2d336c7f6f403307f783cd059c0af5f45
+Entropy.9 = adf2aa3aee9c0d4334c26daf66e5adc7
+Nonce.9 = 543c46158ac3e96d
+AdditionalInputA.9 = 6758b835d8eb1e8039e8009bcb6e94f9
+EntropyPredictionResistanceA.9 = 4a301f9fdabf2872d4acc51d70680b88
+AdditionalInputB.9 = 5dd273677c1e30f4f53a3079bea8f032
+EntropyPredictionResistanceB.9 = 89905662b848f7b62aeb34cdaa407501
+Output.9 = 4b9130ec463e8d53e1dedfe52b0fa08c1654baa292131c872494e0649bafc8abb47e91db576d9bf86b7e04788035f67649318782c8684e9cb735a459bf94075ec5538a4d56ccdae668c5d6e47afb705d
+Entropy.10 = 61e5b8c5cadce9c88637433accd55651
+Nonce.10 = f00285aadd840fe8
+AdditionalInputA.10 = b3b412ee1293dc94227ff4069dbd7a1d
+EntropyPredictionResistanceA.10 = a6a0ebcc6d0dd1c16650d0b01b93c039
+AdditionalInputB.10 = 4989eeb5906013e6d1f5282126f4b2df
+EntropyPredictionResistanceB.10 = b04e24fe04fc307ece0dc7ee07a4ca1f
+Output.10 = 363aa15e02ae5a4b102a19a15d85ec3e994d187d3fb9353f59b729b81437c981fe78e2b340d03e34e0ad03753793597502eea53fb2cabb340149168eae9040beb61237126e16d0499a01db7aebc2f12d
+Entropy.11 = 74477755c1d714865ebd80423020556f
+Nonce.11 = 83bcef6eb45bbd26
+AdditionalInputA.11 = fb77761229b21ab500d342dfe05f457c
+EntropyPredictionResistanceA.11 = 906ea54a60fe1a5b70e4a2412bf3a316
+AdditionalInputB.11 = 76999e13414c969384d4425ebb36fa31
+EntropyPredictionResistanceB.11 = e09004ec4c0793da583d9851207efa3a
+Output.11 = 2ee4e911e77f9228971052cd4ce320c81e58ee52101284c805312dff1e3be9ccbf1c862a55481cb1f666e91887cb2662bcb4b2a1dc6af62343904d4af839f83c59dd6af9b468609ff52547c5c52f26b8
+Entropy.12 = c16e8197b20ebba47a6edd05deaa1b10
+Nonce.12 = a2fe6cd9bd238780
+AdditionalInputA.12 = 79de7776668bfbf7f838c264d760e799
+EntropyPredictionResistanceA.12 = 3f3a0682d088a083c62cf10cbe0b0f68
+AdditionalInputB.12 = b8df4633d816fc6fad75244e9ac38e10
+EntropyPredictionResistanceB.12 = bd4b0eb8ef7eba33d261780fd4247bef
+Output.12 = dfe8a299055405cadbf7243b61a9c6dac4d1eb765ba4791a64f236b64a5557c5e3b09acc7b451ecdcd33d83a6341c686822d50ef47ff5215a6aa780508fc58aba2479560628e4accb611e3c1174c0d3d
+Entropy.13 = 238ac363b9e674dd2e2cdb14d4255680
+Nonce.13 = a05101dda2151a13
+AdditionalInputA.13 = 05b81a94ba70f815ecd90028587f7c34
+EntropyPredictionResistanceA.13 = 165759dfb4b437b5901da70b678fcd7c
+AdditionalInputB.13 = 2d30881194f3f2caf7ad26ddcac353cc
+EntropyPredictionResistanceB.13 = dc09eb1695f891e8952826f258d5b013
+Output.13 = 155f21b0e050ec8925afa0b06525d1735b5a7cb214307fe0e75ae5a0100a7b9c87db4fa0b0def1d5252f99a98e9188252112d64907dd635879241247b0133e1befc47caee7dfc725d2ce261b0208aa37
+Entropy.14 = 8b0ccc49c86ee601a36da728b96bd46f
+Nonce.14 = 0fe7dbc488e0b63e
+AdditionalInputA.14 = f5b258841525c65aaf820dcbb7fd13a9
+EntropyPredictionResistanceA.14 = 6558a38f821b4284268b3decd6545c38
+AdditionalInputB.14 = 3e95f86a7168410eac0c84995c187fd9
+EntropyPredictionResistanceB.14 = fd15dfdd8cfeeb7ce0c76f759dfd47df
+Output.14 = 480d9cbbfa6c923866179318b293c52c9ad86c2ee27faa745873a77d0242afe669d1773fd9c17284097ee8e644aa054deefbb9c73732ba6b5004623df15edeb49ef2e1bc8dbe023f7104ea1395d9fd38
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = be4f74148672a3913811121206c38250
+Nonce.0 = d604ab105c56fd29
+PersonalisationString.0 = c3381caf1bbf25acd2e250516875b87d
+EntropyPredictionResistanceA.0 = 659032d6baf5549f3a24e053ca5a8dcb
+EntropyPredictionResistanceB.0 = d49b95448f73edbcc3bdce95d278385a
+Output.0 = b8e34caba2d194a3f42be87d7cb9b2af82ab5d6f0c899b9a045aa8c589bdef9cbc83f21a9397924ecf54795378db378ced60a65ac6b71548794408cd88bce167a815b16a67c3dab6a3eafa35140f5ccf
+Entropy.1 = 70ad6872ac270dab9aa78f43c1af06b5
+Nonce.1 = 3fc4c172465edf26
+PersonalisationString.1 = 954c240decd78040e739d177adf1d232
+EntropyPredictionResistanceA.1 = cda501d0d6674539ca5d109091b8f227
+EntropyPredictionResistanceB.1 = 0131a8a29eb5734565ecca929bce0ed3
+Output.1 = 234d210fed25183ef856487baf2f9126b75035bc1c2284b34c9cf0ac916d202766ea134b798473781faeca149d0d613b064e87a42e2943ad3c656f9abe005c987644d4ef017a728e4d36a7721f89c6b4
+Entropy.2 = d9262dfd023348b7cd41f31402b9ec6b
+Nonce.2 = facaf6cae8e35b48
+PersonalisationString.2 = 69ac6a10242f07a2799b686c4e90b0e2
+EntropyPredictionResistanceA.2 = f03ffc49e2b91bcdf8d746ecd032a47d
+EntropyPredictionResistanceB.2 = c589ec8af78ae739ac9b5412f2d66b53
+Output.2 = ccb3c1fb3cda24615651dca47ac7c52f446ddc793b2d45f3c36b569e3314eca3152176b0521a040a0ced4b844cb0320307b0ceb3ab3da2cb22b6c8198585f72e491f09010c719dc13eeb05a1f72b655a
+Entropy.3 = 6f8e6b0ebd1ae86fb32946afd8fd44b8
+Nonce.3 = f8dbc22a2f3b5861
+PersonalisationString.3 = b869de0c880985f425ced18c0319789f
+EntropyPredictionResistanceA.3 = 2c9b952438269fd5d8df74b2485c9964
+EntropyPredictionResistanceB.3 = cdd19dbb63b481a6107ab127cab7e904
+Output.3 = d8fc61ff58462d2d06ca9282e3f2c18c1dafb3565996c8748d19790b58464e729a74a29fe98b23b8d49323202226e2b370f075b8ad51ab3ff5204225cbeb9766b0f97e15bad97ac352253acbc21a9b27
+Entropy.4 = c23e5b5c9f451b5cc58897129f3f66bf
+Nonce.4 = 43539b31f9c30652
+PersonalisationString.4 = f3ab2a61e6103dda0446cf19d2a2335a
+EntropyPredictionResistanceA.4 = 2f4ad5be6906b3dcd4a4ef6249abbf9e
+EntropyPredictionResistanceB.4 = aaae2f55a31f1d98937a558f7a14dea9
+Output.4 = 5256a080e0512d1997ba5394c34c56bc405b5cd49f8500831714237adfa837a7b2412966e4e79763f712f7e32422eb0773758fa0b03b992d51841c74210ff6372870e6246b3b2057ade2b58b9d8589c1
+Entropy.5 = 1590cb3b8c163c0d732f6863bb518db8
+Nonce.5 = 1a28a38ee64a333d
+PersonalisationString.5 = 84109bb00e87cb49920c51a8bc829bac
+EntropyPredictionResistanceA.5 = 9e3a546d6373d5c45cbf179acd0c68f6
+EntropyPredictionResistanceB.5 = b369510dd0c80e52b681cbcb9f04cfce
+Output.5 = 7115d10faa04f72b3216d07e89ec6a8b264f25883879fd818021109b56150b28aa1a313c1a65d64644d672cbd5bfff99a5a8bc661d4d1a9c6dbbd9e99cb8ed95d722717091834046e2c8c5658a4d5338
+Entropy.6 = 8aecff0e97d608ed7c535d3e70c4d132
+Nonce.6 = d126f0eb5b2dc1b2
+PersonalisationString.6 = 8c933e032436b3f632b6ebce4bcddee8
+EntropyPredictionResistanceA.6 = a15c0dc7872e9729568b35cd78503d04
+EntropyPredictionResistanceB.6 = ea94012d5e1e90a0ec7b917b1da67585
+Output.6 = 65187ecc97b0e896b5995799740c6820f024155b49de67238adf47fe511699e90e3714ad3a37dbcd23abd2164a7e9cf73b71e9c274480f0c79463691b6ce4e7b1322aebc0ac326f7d655898dc434ba06
+Entropy.7 = ff5ad28175610b6be838624db26a6a63
+Nonce.7 = 44bb9b121af0fd3a
+PersonalisationString.7 = 9484e3a9cd4572997e30dfd612bf6375
+EntropyPredictionResistanceA.7 = 947ad9496fe4f16abfd6d365d5dfe8d1
+EntropyPredictionResistanceB.7 = 6bbcba7bd91081b2b1a9aa486587318d
+Output.7 = a7eab39445fbe9c3f8016e023dd1b37299b7ad56373e353dfc5401dce98ea458cb02369c04feec688afc52652a2b847f78d5b2338d41e33df042642e56189554b0ac76acaf8a44321f8bd86ec016674c
+Entropy.8 = c82a18cac87bb3284430828dbc69cb75
+Nonce.8 = 3cacb19325f535cf
+PersonalisationString.8 = e98c0ab708abaf4f6495e9a78f724f58
+EntropyPredictionResistanceA.8 = 21e0200c76128f0942667561d7d7c2ae
+EntropyPredictionResistanceB.8 = 959852651a3ef7424188c3bf5b71a211
+Output.8 = 2595461ef9a24a8b508dc44f0a89f5bc3306d889023715ad1c743fc9d9ef36192a779da2ea6005475891eaaed12574f56ab3d5eb8efa340d50c1a5bc37f76d8555b21100efff1fb26f52dbd97cfb5b34
+Entropy.9 = 10130c3f04b629b06797fa152a05984a
+Nonce.9 = d5616db865bd69ad
+PersonalisationString.9 = c43f887abd5bb71e249e53c91550667f
+EntropyPredictionResistanceA.9 = 5aaa4f5b37d1459a159cde7b8109d8a4
+EntropyPredictionResistanceB.9 = d29a2eb5f71cdba7e8597dbbaabe82af
+Output.9 = 7c15107f37509c5f2820041830c491b6f012d7c936a7828425961dce55e9c08cef031435435bd5f17eb98391e8039e0d95ccbd23e629a4245433cfc224d5e51d5af074da6af63a97dbc143598d675ca5
+Entropy.10 = 978ac2b9db0af00858037c0fdfcefafd
+Nonce.10 = c6273d2364724135
+PersonalisationString.10 = 86ba851485a2fbc27e5264f7c4865b89
+EntropyPredictionResistanceA.10 = 5366f183e7560ffa13844675150dd6f2
+EntropyPredictionResistanceB.10 = ded7759c4373c01e31e408d99be86b3a
+Output.10 = e94919c97d7437ba7960dbe219f9cf0ccfb5396e658f01cd37ec733c84347a4614a063e51148d41ef836e9adc2b6bf7c364a860dba6bc75e7a003b1bb35b408efe6bf4e741b97d78179cb0c4a166a0cf
+Entropy.11 = b66d53064839d367c9ff24a33ed90237
+Nonce.11 = f1ac793a10529260
+PersonalisationString.11 = 67d00ae73108780b864d1595a998e4c6
+EntropyPredictionResistanceA.11 = 6a2c07d9828e0887d20f3ce910e39456
+EntropyPredictionResistanceB.11 = ea24b43da4e6e6bb2836ff1c1771b430
+Output.11 = 966c62900d40476387520a169796f409018d9bf62d837d6f766012b816529fe4494306de30ef7b453bc372d8d7b25339e37e4b73ff6d6b2357dde639d6d86a29e4a996ff1cc3639da71dd186ef268ef9
+Entropy.12 = c4bb1bfa8e10171c4646f30e5278b84a
+Nonce.12 = 2203d71d699ace7c
+PersonalisationString.12 = e0efcaafa66d881bb1f357c491f22e33
+EntropyPredictionResistanceA.12 = 7c7fcc7bfe321ec42f8b260445263cd2
+EntropyPredictionResistanceB.12 = 90de12058d54407af390dd318af3c176
+Output.12 = 47f73f0925b400aec3300f99dbaf9c0e297b8973c0db400e72a96bfc6b5314f1f2456d2c1bf66325b4ea507ba039a45499840da3c1015fad9b4c5ad1ee04539977b4c4b7ca7ea0573a0d90812b4371be
+Entropy.13 = bf75d1b6737b8eefbd9a518ef68838e8
+Nonce.13 = 6250c884de8d6371
+PersonalisationString.13 = 4744f11b2258841a73e27202716f7ad0
+EntropyPredictionResistanceA.13 = 0e183a9669d844607462d4d743f3d5d2
+EntropyPredictionResistanceB.13 = 59d51a60b2e6715fe9828fc7cef81b78
+Output.13 = 35e0c55af23b77ea014aa6da6c1a397c4d204ac468cf8f183d8d478b8ea217ba3d5ebe91b4e9545e629c5aa0064e56b1e081831e426161eb1aeaaa471d3c8c0a453a21185c43f840f186f682ea475804
+Entropy.14 = 13bf5c7e67eced8fb30e79aee19b2ab8
+Nonce.14 = e0e640ce76d1ba0e
+PersonalisationString.14 = 44f3985e5208a44cb795a1fd9e410ccc
+EntropyPredictionResistanceA.14 = 845decbe6e03e423b3660bfe7db383bf
+EntropyPredictionResistanceB.14 = f4ee7409c076201255bc78ec82ca5530
+Output.14 = ac57a08b77c528b834df2757069b6330f05a9196fbbb17300f9c31ef596f551ecc56fa3256c0ab1534df4955f2da1e8d98026b7c5e07290faa5131a95d0fa35a56b075752656ab61a74f889fbb735c58
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 6926181464c58203427a03e1682d8734
+Nonce.0 = ab79a2c058c82dfb
+PersonalisationString.0 = 603e6f0abeccf679913b2efa9bf4c827
+AdditionalInputA.0 = f5ecf2fbea7af2cb489ffcdc213317d9
+EntropyPredictionResistanceA.0 = 16cc2e14dc61d505d5313e979bf32b57
+AdditionalInputB.0 = 5372caf0a629bfae49c2d0cfaa877ec3
+EntropyPredictionResistanceB.0 = 9abf8c15dada7f15d989f6d6e94d96ed
+Output.0 = da3005f13bc8d8f6dd7653d83b01bca4275a892fb453f8b3506e7b96c6882dcd905d7004269fe60ac1d485b0371ff4639132f25f5e5c68080960f2c351c9c9f2fce2f8b6275ac4da6152028162215183
+Entropy.1 = f3729204156cad6b999bcbde5c9c1b97
+Nonce.1 = 58da67456c97a9aa
+PersonalisationString.1 = ea61a9ac5d3e3c2d40b3a132948c69fc
+AdditionalInputA.1 = aa210f82ffdf3d7e1eb0cf6b05960ba5
+EntropyPredictionResistanceA.1 = 1e734dfb084ca302c74b5b75b476e889
+AdditionalInputB.1 = ac6e0a7a6f0185dfe49f916e01d714c4
+EntropyPredictionResistanceB.1 = 36ec960c767ecd2eac90f5e03d1a4da0
+Output.1 = 499e6aefbea96849342e23fb6ed90c3cc94633e19d31c7385b025c0d82791441c4ea0abd501d3d63f325c8147d080a8a9ea5ec8ddf435e70910622594e76eb17f01c5d782d7625f5f56576f74c00852e
+Entropy.2 = ab0eff587e0a3d94887293186884ee09
+Nonce.2 = efbe38d53259f21b
+PersonalisationString.2 = fd3ab27f35f0b562c71e7e214a19d2e5
+AdditionalInputA.2 = 53098f0f3ea22edee19317a42d979e9d
+EntropyPredictionResistanceA.2 = 7e277e397efbb968ebd88cd33192f1ed
+AdditionalInputB.2 = d7fb45b6b2ca0e777dbe3a9448fbdce0
+EntropyPredictionResistanceB.2 = 1e8d9f7f034f0909c269ca6531b0258f
+Output.2 = c8bb382205836c79ed01ab7c911e052ce69968e317a26e2f88a12d837bb8566939e786ca03556fe238ba71c2cc980bccc265c62e24b58e36cc342434f58511b6908f880db545908dc2b6b10e1b33aab8
+Entropy.3 = 500eca6541dfb41beb8959ac80fd7574
+Nonce.3 = 8f1ccf6cdec06aba
+PersonalisationString.3 = a5110572b2ce48d0fb617f9e42f58d1e
+AdditionalInputA.3 = c039bd70f18d1ce75f2957c77c875683
+EntropyPredictionResistanceA.3 = 62d2811a03bb14c05700dccc4fa0b3ab
+AdditionalInputB.3 = 94b8a3b4633ccc34d37aca3ef8818dfe
+EntropyPredictionResistanceB.3 = b3a78bfcac06e7ceb879d4982743424f
+Output.3 = a351e6d70e3360898940e81458979225d570696d071523f7aa2f48a0b5c67db21e2a4ce088aef433c6516c1d4cbce1578bb2a053dc011364946b18a20a25e0a21a40d82b002eeca6260a1beb9e010a17
+Entropy.4 = b016ae7e81e87870b8c2756ec471cc7e
+Nonce.4 = 8028c30bb84913cc
+PersonalisationString.4 = 76630996485648ddeb00937481bc2e81
+AdditionalInputA.4 = d42bc765a9af73e96311ff421dbae8d3
+EntropyPredictionResistanceA.4 = af3f903bf65c55baea4b6aaea2ad7a88
+AdditionalInputB.4 = c77d6a43c3d0c2dfd31e84baf192a26c
+EntropyPredictionResistanceB.4 = 8f7c44fb56da24678c417a8358f38daf
+Output.4 = de5273d367850504988d3d6f258d69c9bea7c51106f1065c44c20dc2261bfe2d8ec5862a218fc5b11b8671fc43e660f58620c54df91744b775b24f7837435907b62e1ff5861276cd906002fa6d19556c
+Entropy.5 = 76401be58fc8067cd311e49cf87fac2e
+Nonce.5 = d71bb395ee5158ac
+PersonalisationString.5 = 461e0cf3c51e22d794a388ad18d0599d
+AdditionalInputA.5 = 66983bd84f2a81bde80d37e46bf50c68
+EntropyPredictionResistanceA.5 = 6980d9ace1c85cd2a3006b54d09ef52e
+AdditionalInputB.5 = b9a7837be0dcb367e947831a91c6e90e
+EntropyPredictionResistanceB.5 = fada1a7278b7b7e83935896561724e0c
+Output.5 = c1df375df98d267487caf5b817f92c543a52aa0e7d583a1dd7682908b4c115bd2640de3ccd826eac0fcfefc465742d2b8d7e9094b379123aadff9e4c2da631ee48cdcfee6e78d92f0c0bda70ad689316
+Entropy.6 = 5de994f719ab1bb011a70bdeb09528d8
+Nonce.6 = 9258ab182b1449b2
+PersonalisationString.6 = bca7d5eb5d820ee0da3964ed3af3f6a5
+AdditionalInputA.6 = 61d326c100e472160cf791989d58750c
+EntropyPredictionResistanceA.6 = cc3295c50cd535f8908a2d3776416d00
+AdditionalInputB.6 = 0fdf9e909c24a5b18a9820438afabcab
+EntropyPredictionResistanceB.6 = da7fcaa1991d999c4ba07f9496225198
+Output.6 = 0c0d61957b13b2be4ac2cc478c28a7714bcbbcd7a0c3d87c5f38d6236efeff8a3af40f51a28aee983bac0cd0eee2f80cd838cc2e6263e289a350732025ed669eb83c55f3922516a27b498d60f1e95e1f
+Entropy.7 = 36791724eed129e9fffb8d3c25a76090
+Nonce.7 = bdf51e8bc2453c4a
+PersonalisationString.7 = f5ca4f2dd0ab2c3dd5589c219b8abead
+AdditionalInputA.7 = 6f5f8164945d0d7396ee662b4cdb9489
+EntropyPredictionResistanceA.7 = 0204c65e712e078b80d35e5f9ea85854
+AdditionalInputB.7 = 5fe8021d64e89a38265d6e6ae99341fc
+EntropyPredictionResistanceB.7 = 4202559759540cd6c00dd51816de95db
+Output.7 = 3ab1c72a9956641f0c65b470691165ceca2c6c7fff5e84a0ff75e1d1dd841ac1edb44ab6b90f3a9a886124a3483c2098adfa1520bbb0d14fac4bbcb49d9f632adf71fd8d91139b788bca16c069eff799
+Entropy.8 = 4436295fda04ec65d39c989517faf7cb
+Nonce.8 = 1a3675203762687c
+PersonalisationString.8 = b24e630f86fee858ce16d0a658b2be58
+AdditionalInputA.8 = 1d0c0f2ac1e588e8aa738ed13d0e7f31
+EntropyPredictionResistanceA.8 = 650f043e4abf1cac6a9f82e54af2ac38
+AdditionalInputB.8 = e957debf6bbfd367df657a65b9bd7cf1
+EntropyPredictionResistanceB.8 = 88c30593202fd37e583a52a187846fc5
+Output.8 = 457faf8d3598ca03c3b4364c63c78c259de1f4be13b16759f4489f910da0ae62bcfdfc48a676cef63c887b8e8f54188e1df8f4602a8c18f6164c886237807de6e1804856809fbdb06ab90ffbda38fa00
+Entropy.9 = f8395af6017657dfd304c27856215d73
+Nonce.9 = 4636a9faa629b45d
+PersonalisationString.9 = 51f99fb67ac7f9e252114f6197a63258
+AdditionalInputA.9 = 6de95b80fea14d435a5017680a207f08
+EntropyPredictionResistanceA.9 = 43ef04a5f20de0fd35c408e7cd8c492a
+AdditionalInputB.9 = 86f3ee53ddac99518a9210381fda228a
+EntropyPredictionResistanceB.9 = b737fd4c23ed7445af1c55e39e0af344
+Output.9 = e5566266e5cdf83d789414a5ee8f71c474f89da0747fa862cf39db0ef971991bbae16cecdcb13482cc381dc89d7e20e1c174fe7dd54e129385725651c0e7f35b3b640bad748e76a760dcb7ff4295d777
+Entropy.10 = 51cdce58e7009d85119eb118f2823b58
+Nonce.10 = d69e57c07a15656e
+PersonalisationString.10 = 5d21375f8abd72a87b87ab9372c50e55
+AdditionalInputA.10 = 3a5f7e3da12cea6369fb06683fefc9c5
+EntropyPredictionResistanceA.10 = 396289ab3874debfbfe82b256f55912d
+AdditionalInputB.10 = 48b664a05032efcf0953b87f66a4c45b
+EntropyPredictionResistanceB.10 = 6aad47cc0d790c870fe5cd95bc9ce95d
+Output.10 = 3aa64e215b9d71c4221976d844e77e3c7a954df3e839041c9e83fdc397b186fcf4c4e52d2b5aad5ddccb9a2d9b9a1c60fd9cf751afacc53c30b5c5e9ac66f88f37438fb4ed5f40666829103922b79d7a
+Entropy.11 = d85b81237e3c27fa7ff1455788f29b90
+Nonce.11 = 6bb669926c20f737
+PersonalisationString.11 = 5d4f636663552718a3bd50f4f82bdd3c
+AdditionalInputA.11 = 2bb13258c4e13f1ac2e5351f762303f8
+EntropyPredictionResistanceA.11 = 9fa21075a8c7915c78a106f62fcea012
+AdditionalInputB.11 = 546a8a2f2ed81fe139eabb2229a87ce3
+EntropyPredictionResistanceB.11 = f3e8ad46c7ce681a841f3129c26c0d64
+Output.11 = f19aa11f8a7b491457d44b3b8a9f47c0539c3789a21f5c02e6d71446e9b14630f0f860ea156628a3583056cbe9fda4efb623ce7d0ac60f6f2ac8b7080b39040fa53ffe1a3e19df399b0a5bd5502bb817
+Entropy.12 = 055b4742c21360aacb02baa80a932915
+Nonce.12 = fd4868ddfeee8073
+PersonalisationString.12 = 846b257874b8db65be9df28efc81702f
+AdditionalInputA.12 = 7c0c747bd372fc60b171630ffe954bbf
+EntropyPredictionResistanceA.12 = bdabd63b951de3ff18f3dd09cac42595
+AdditionalInputB.12 = e4e77303901a114ee5c13ec30f2ddcea
+EntropyPredictionResistanceB.12 = b79fe77bf5c8422161cdc2f77c3a510b
+Output.12 = b5ecbab99d2b44ad2c02b9e1268078c29b7f7d0c0a0325b1be1b4def477c0a7dde1c792523fbf50267291dfc60bce75a162977a39b2cb649802c7d40d7c576d450b3d9f200f662ad9f853a8b1228fc8f
+Entropy.13 = 91649c2dc6af9818ac1427b630c80ec5
+Nonce.13 = 56b7f5057322702e
+PersonalisationString.13 = ab1650c6a96b5a4f1e90b5208be28b47
+AdditionalInputA.13 = b0d606b804cf9a1922a4f9dd7ca5ceed
+EntropyPredictionResistanceA.13 = 03c9f8f90e61855411db6cce1dbfccb0
+AdditionalInputB.13 = 5cb4e84bf4d76520715db47c1bfbb29b
+EntropyPredictionResistanceB.13 = 3cb5c21b6719a3f70c7d4cca0f9ff1c6
+Output.13 = 03a3c0a79c32e0c858f72bdf2ff72ac518e0ca26a090bcdd081191c40226f7adbf66b8dacd98a24a1898f29286167d7b37a0d8759a0486062ffc54b66ac9c47bd94d1f6939676a67d0dabe7b34e969ca
+Entropy.14 = 627e9b09a03cdb5228730a676ba1e16d
+Nonce.14 = 1c69e1c09210adaf
+PersonalisationString.14 = 9ae5f54c1214b628b134842ca6e4009e
+AdditionalInputA.14 = dc3f49d222f4e78e057711741f12d12b
+EntropyPredictionResistanceA.14 = 74e19c4e19ad39339a5a5c132a333e11
+AdditionalInputB.14 = 063e444dc2990f59e04839fd5e9eaeb6
+EntropyPredictionResistanceB.14 = e059229538a827fe9b7e5caa44fb1e3d
+Output.14 = 62efebd7730c6999fd052b98e2bf26eebc96b617a03fe2f1aa7ea3be1aea833f705a3ef3776adc7578f5bb6955a60853ef267fbc18aa3d57b8e0d9134c81e8ffadd0c66d385e5d535d74a615fa896757
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 7739c86079e6362aa10a5a98216bd7df
+Nonce.0 = 9827c2509111c65e
+EntropyPredictionResistanceA.0 = 80e07f5ca7ae4ba4d1bba311b2f78f83
+EntropyPredictionResistanceB.0 = fc8f714975fa2a134dd6cdc6275f5864
+Output.0 = 8fd01db916df956d9ef1990d6928f47a758ba4f9dfc48e3df9f81e2f74eb930f9ff23d6efa18040f3173b4299a31a4917f241aa0e64485134ed5594a41e9e12715f71860a625a41aca1cfa8c2bca9873
+Entropy.1 = cd977d9839e4518a717315384dc9a42e
+Nonce.1 = 462a769474a611d5
+EntropyPredictionResistanceA.1 = 47ee0e9fa7d606d890174a2f9e542b40
+EntropyPredictionResistanceB.1 = bfc12f5043fba005f30af4335dcaf992
+Output.1 = 15982e0f2a561a9967f4c3f7b24aa27cccb1283f29279eb8567b4c7b68b2115b1faa732a696c27d8fb67cef8903fb24ceecc1717949220bc97abd676fe1ff0695fa1ccbb8c4537c52298fba3ee9f434f
+Entropy.2 = 59cf95b8a3a34c5a52283a2515458591
+Nonce.2 = ac712ddd4b60e912
+EntropyPredictionResistanceA.2 = 7754ccf80aaa86e554a65b3af302a71b
+EntropyPredictionResistanceB.2 = dc388812b4458f0fb547337abad53710
+Output.2 = bee5986782f413af4090dce7490818ab40e87c93df3df18af375128bb6ef5b092802c2e5f47e9db31ce9771c620c9a729b6c0357f2db20ba998361b1cf7d17fe60024afbf8e3fe5e6970d77fc6d2ae2c
+Entropy.3 = 352a97fc552400d326d5b296b8950efd
+Nonce.3 = ecc987d4d6c77e24
+EntropyPredictionResistanceA.3 = b0f8755d67ca2f953d752502e40f2414
+EntropyPredictionResistanceB.3 = 8a8906e20302a78b3f12849cc9dcd2eb
+Output.3 = 4ce2fc5cda449c1729e38473d7aab908b7997aa08a4b865a7a414ff24b96d244803cc4f8bd674418b8e66a12fed5d749b1f0b0e83c7e858277b673e592103b089b0187d07562cde8d2c4553239597464
+Entropy.4 = eeb0dd27095db30f47585b266b5d33ef
+Nonce.4 = a561dbe8f02d6410
+EntropyPredictionResistanceA.4 = 121171887e0f41bd9333d2e36552761b
+EntropyPredictionResistanceB.4 = e4bcf579a644486f210be2b5f40abd52
+Output.4 = 96ace4858558818153e76df185bf21e70134547c0f168cde859873f939e5d220bc81d51f8d9f93d1976b3d100f7af2c37f899930cc4fe20fbc56e8f0a399461e26fb0420bc929a714ebd908343b2b3c0
+Entropy.5 = 1ed67283c7fd03a0315a926a7ff44917
+Nonce.5 = baf1b8f7eef5d6d0
+EntropyPredictionResistanceA.5 = 113a520c4b80cf706bee12583fece43f
+EntropyPredictionResistanceB.5 = 373884d56c5d07bc0fd031707a76715e
+Output.5 = 31035c889e447b4bf559e6b4f05261bb38a9a8af2e248447c75d924037c2253d6bd83e0cdccaae92e26deff566813de5a5a05f85b43064499ebb24dee65df5d070dca556f92a9f2277b46ed06691bd53
+Entropy.6 = 8e1041df5d6ebd4eb61cf58cc89cc896
+Nonce.6 = f5c81cf52cfb55e0
+EntropyPredictionResistanceA.6 = b1c73400543e586ab1f64970a2dd1ac6
+EntropyPredictionResistanceB.6 = 09edb0c72a5c2368eb5105d6ebbbfc4a
+Output.6 = 27072e9ea102a6ded0a597fae6d1a40e45172d4422b6226277eb3f72fd621f92c95c98e3609584c40da1ff0e4f82d9c0f58b7e81f076f889a4f006f45e428a77d6d9217e9922c5f6b097efd502cb7fcd
+Entropy.7 = 89957a3268668c000673570e13da8290
+Nonce.7 = ae746cc706f523be
+EntropyPredictionResistanceA.7 = 81b3bb7760cf1e56716d0f5e71e8e60f
+EntropyPredictionResistanceB.7 = 88062568d63c103cf6c0554c5c66bfb9
+Output.7 = 4165dee2cd4f513ef8f1d01466f36b0cb25f471e4d26046502701779cad6fe0f80fc270875b1f5a48d769cc7f133ae394d7b6dfb96f1fa961525cbf494e4f9156386bb615ff83836b142e41938f8aaf8
+Entropy.8 = 0ab432ec80ffe646d7a758430a4d18f7
+Nonce.8 = 5386da7a518df773
+EntropyPredictionResistanceA.8 = 8a25896bf33cf170f05309749f430efa
+EntropyPredictionResistanceB.8 = f332a542680efc6b526e963881a15775
+Output.8 = cfe2bc802e0b28cccdbb7d828bbda865adcbb99b6d5e166be3d291baf8d012e4676219d0ace07164e2a99f955c3b3cedabbeaaf5eb9eea3983caf2a64df1a03a1303eaef03996b88c888fb89dfc64ddd
+Entropy.9 = b38d13f92393b842da180ede4b55c125
+Nonce.9 = bbad18e652d6edc4
+EntropyPredictionResistanceA.9 = c00533e9cf1138bc142ad8dfc9705680
+EntropyPredictionResistanceB.9 = d47bb0c7c2efb2034e9005fccf412ad7
+Output.9 = 17f6d6c0a5c1c622aaf40daf45e80fbfaa0c0f48933ad2041d7b7e174d31ddb29422a55c9c4c43ef905c646626a919d8eccc6841975809f5a086889d9eec025d56a09e39ea728b14e2dee4f4b25e005b
+Entropy.10 = 1c66b438977d10a0065f58243c8ae354
+Nonce.10 = b4a0458f5b49e3df
+EntropyPredictionResistanceA.10 = 7ab233f0efc5e572810c23c4b4dd7229
+EntropyPredictionResistanceB.10 = 7854ff8bb0c4b88fef9ffcafb5a9024e
+Output.10 = 81b24daf5cf7381b1e32f26798fc3f6288e0a5f58cce0429240af26444d21b44a0c7fc405e610a6e9c5119fb705cb5dcedccbef9910743060178c3d0e1e2930d4062498e8cdc48d246dd80d03e2130b3
+Entropy.11 = 2f60ea5a884c51e9214027cc6b23ea7e
+Nonce.11 = 7223af447c340030
+EntropyPredictionResistanceA.11 = fb5b3502dc7b3a597982fe62f4153ac8
+EntropyPredictionResistanceB.11 = 615444d940ca8193e461f945430b49de
+Output.11 = 8f72d29b358e9de58445bb46121bd3aad4832677dfe2cd5110bf567357dd25d15a7e9d9fadf656029e4dca861c5d41c14049735367a46922a91c9c2d297b30938f544cbbe156219637a8f3f6227ed106
+Entropy.12 = 1f7aa27d58d5d3b5b4d0da626bde0de9
+Nonce.12 = 867ec06942bdf4d0
+EntropyPredictionResistanceA.12 = 4e3d68fc0218b5cc5a7b1911f4cc18a1
+EntropyPredictionResistanceB.12 = 8f669b9c14ae477e0a637101e242611b
+Output.12 = 58229e9748c493bf1398b8b1816fc4a8156d4916615b63efffb374a8ee254258eb09ded55578d28eec084fcfa8acae59d955eaeade75ad691bcb06edf27f9e148b740496faa066245efa8c0958ef0dd0
+Entropy.13 = 4b27a4125828eb13cbb840f8a0f0b37b
+Nonce.13 = 451e5ee0f760fe97
+EntropyPredictionResistanceA.13 = 22f98299bf8951e29069092792cbbf35
+EntropyPredictionResistanceB.13 = 62c031dcfe8a00ca340616daacf9d776
+Output.13 = a6e870a1e9a1478a3714a8979e5bdfce3fc3e0602dc795df942a298652389dd524a2e9784f7658d5e007a6e6805f60a252df9fd5258bd3b44fa1147c7b0927c2f25df3ccaa92b7cab0f355fc1f8c3ecf
+Entropy.14 = cb406c81422778e9b4304bfa50d4fdb6
+Nonce.14 = b30b3ba407c5ef14
+EntropyPredictionResistanceA.14 = 74b72e7e1c5f16bf0389dafed9a86ae4
+EntropyPredictionResistanceB.14 = adef9418a342b4717e93df6450429a38
+Output.14 = eae51f34bfaa2970f41c3211ec228cfccc1d3c0fcc077d1d9ba159b3bac8685bc5783f61c67fdd4beca05dd4f14afcfc4d554ae75f73842637671102c3b81cabc9a0638cecad5a6615171be5265d5454
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 906ebc961f69ee6e091700a514036961
+Nonce.0 = 498feb342879b349
+AdditionalInputA.0 = 740bf6cce30adf10cdccb365769b7509
+EntropyPredictionResistanceA.0 = 45c432d9a716fadef5b4d76178229bd1
+AdditionalInputB.0 = 1697fdd28a47fa6adc22923e89fc1d6a
+EntropyPredictionResistanceB.0 = 724b2f83412cd544d6c5e26af84c176e
+Output.0 = 1901701e5d64515aaacd60362eeb8034ad473a06488609691d858df99f8263fb2dcc35d77da0c0f30e89cba9c84b0602ecf90aa207ff2e429cad53dca4ff00f2805cbe9beafd12580545845669b451c4
+Entropy.1 = 2e766cd9b2f18034f2848fd811732c9b
+Nonce.1 = 7e8e3e25b1d7e51f
+AdditionalInputA.1 = 133acdb5847dae6ba12c88f9216322f9
+EntropyPredictionResistanceA.1 = 5fb0ac5f36076eaa6f86abc98dcd1761
+AdditionalInputB.1 = e257dce8f82e33194dd2f0fd6e01af7d
+EntropyPredictionResistanceB.1 = cba717b5d423f2d5b76b0685ea39f1a6
+Output.1 = 5f7d86a9b11c027602eb831d059cca652b5db32489157bf5ca67a0dc806c03d28894f64c8aa461863a54015153e739bdb6cf3ff7311e4d44e27bd5fc058201aa26f2eae56e7fb2b0980c56043b4865ff
+Entropy.2 = 8ce2d11d26c12d5c3b765cc9b38210cc
+Nonce.2 = ad5ede39400ec50f
+AdditionalInputA.2 = 326fd36f26a1a35b9593af3845dd18b9
+EntropyPredictionResistanceA.2 = debff761324f915ff7c4eef93437cf38
+AdditionalInputB.2 = dc2879a8cd0578c13f777249c7eaa52d
+EntropyPredictionResistanceB.2 = 298af5b0e3c8071d50b942fa1c7fd0d5
+Output.2 = b6df486c1d8c293aba671fd82319e6b1e101164ae456e9feb8309893cd7644001421006f5ab96c0b6f57213e9988d5aabb41666b0e12fe2f34a63d3c06089e93fab2c2cb0eaf5707751bae8fc01962c2
+Entropy.3 = 5efaa5bfef781407568806371139c949
+Nonce.3 = a76eb37835d1b90b
+AdditionalInputA.3 = f23bd15d990e5b4b92e6d0d66eea4f9f
+EntropyPredictionResistanceA.3 = 23cc2adbf6a998f74a7b18e5b654b9a8
+AdditionalInputB.3 = 152e55a3b0efda94a1836c5c8b4baaec
+EntropyPredictionResistanceB.3 = cdc7d2c05466d29b6dbb3ab49405d0d6
+Output.3 = fac2feb2aba895e12272502fb88738f4be05d32e64451a49b0a018905ee7d7619083eabac74b06881db9bce7d47f8520f6dc619b1a3ea6f0db87c6e5c9c7504fad2e2c54a3e0124666d78386d6c03141
+Entropy.4 = fd929b7b59dd5735c0915990dc360e8c
+Nonce.4 = 514c86c9d403dcad
+AdditionalInputA.4 = cf93bb701bf2442630ec18c237d894ad
+EntropyPredictionResistanceA.4 = 6194b6960e138c5b90500f3f47ea443f
+AdditionalInputB.4 = 74625a9140236588522a540a555135a7
+EntropyPredictionResistanceB.4 = 426e90518acf8547e0ac97abca4b622b
+Output.4 = b7ef4a1b103e64c49c4eba6530d2badd17b27d6357ed023b072f5fba95090bc5d8c0f30c1124d2f37614f157bcfaa0c333bceff30a140b037f19346b4a269866aba7862891ea17989f1c4bd8ca70f390
+Entropy.5 = c591b0582b7160f5a8c3b83554afcf7c
+Nonce.5 = f28439916d1c8e8a
+AdditionalInputA.5 = 4c2715bb71cb35f6192312a0c91fea5b
+EntropyPredictionResistanceA.5 = c8cb879fbe1aeb49977384e34a6d43f5
+AdditionalInputB.5 = 0b531342ce4e4e7fc97d23a766102f21
+EntropyPredictionResistanceB.5 = d08402b4e67aeeab660801d4f3f312ec
+Output.5 = 28b01ba668ff9d220f91bb34c428167d27896b24e05e19e10419efb5702efcff3f862d6a34f12a1bcdfcccd204098d3d38f70f43dd4fd6eea252b83e8760062f6509978ccfb0bcebea5acb9f6287293c
+Entropy.6 = 734b342a5de3e593699ea06c3a17d503
+Nonce.6 = cc4e11ffe398be65
+AdditionalInputA.6 = 71baaaf9914118df057d0265814c7a88
+EntropyPredictionResistanceA.6 = d200dbd8bf5ac0961d0749dd289a23e5
+AdditionalInputB.6 = 9d2609d0f846ba9d83041e246acb2333
+EntropyPredictionResistanceB.6 = 0242afec8cdd7f7165cae381e56ecaa8
+Output.6 = e1fd7fd9012debfd731b8acfdf6914472cd1f87bc7c94a5082bdccc33297fa9ee083e3b572e7b422540c923a85edfc037b79f55aade78fd5677e58d7d51010a28e57d24d71a003e0f0e1d5e0bdc75520
+Entropy.7 = d7ad45a80a97696d1e61469aa9049295
+Nonce.7 = e0a2c69246d20b65
+AdditionalInputA.7 = 987478ca25c3cb67912308ef3225b09b
+EntropyPredictionResistanceA.7 = 9ff0883cb24677aabd01eb1dc724eb1c
+AdditionalInputB.7 = de52f116eac0fe64b58a362b039df31f
+EntropyPredictionResistanceB.7 = d3599d4516bb2d3fa27753796d1ed3c9
+Output.7 = 008e49e0f92703205e9bb9f1daacdaff742c78465dcdf7eb910c99953e849c371292fc083a5b5dd319880810c17456a6edae92ec345cdb641981e24dc418ed3b4435601a334d4b6e1f5bf5eca374f444
+Entropy.8 = 30b2a1e8a789ffa8792e428e1f15e3b7
+Nonce.8 = 11dba88b1622a229
+AdditionalInputA.8 = 8a0904e29060fa36c4562131bc9e9dab
+EntropyPredictionResistanceA.8 = 62b15f3ac680f9b98d4751a2b3e02780
+AdditionalInputB.8 = 47c9b080b47e8e794e7091a82b9dbcd3
+EntropyPredictionResistanceB.8 = 6278a8e0ad27a0fc5bbd317fdcf32fd8
+Output.8 = 078acef3de77c63ffcd0a37a36aabf34bccc57316e7cbd07ae1fb79ca22fd2cb07300282ace33e751507595b6701f6cebd07bfe2bf68c4b8ccf2da97b95d34ecd0d3609e6aac7e099fae05f024af9bcd
+Entropy.9 = 08233a7b9f6ab7f7de07d5b40aa24c6c
+Nonce.9 = 00c7d2ace0564521
+AdditionalInputA.9 = 53a93c43ba77d6fa4938788918f23b39
+EntropyPredictionResistanceA.9 = c123bc65e3e48ab28c23f786f2035f10
+AdditionalInputB.9 = 3a16ec45e3c7358eca97d3b57f6dbab2
+EntropyPredictionResistanceB.9 = 191560f44fae710198cdec1507237d9e
+Output.9 = a9074682a05a3a65d741710719ff4aac978d37cc7574243dd6393f442246de10c0650689549c1b2ec7e27c97754c17c9c47db75f144888884822200ef8436d6eab6e3c4d42e60489ed888b635166b46e
+Entropy.10 = 7fd359ce1cda23cca160f37ea8c35090
+Nonce.10 = 03906cdbb8a998ad
+AdditionalInputA.10 = 290fba18d7f075d953d74444b52bba95
+EntropyPredictionResistanceA.10 = afef1fac5fb7d9b1c6650582db4e9777
+AdditionalInputB.10 = 1c6940832cf426efd878ff7498dbaa62
+EntropyPredictionResistanceB.10 = 1e342d0f4ed8d2e4b2da64e1578fc616
+Output.10 = d3c623b450b205256a83ed33e3f4333f14f21be76026abaaf26c130dbfeac277b1f8653409bc0b0f05bdd095df0571024a311ff5db6b15c4fe46fae9efd4cd21d4f8d8d5f6ad4e02728ec9649546f268
+Entropy.11 = 73484501477064af50c0c6755ec32b90
+Nonce.11 = 91a41797e3476667
+AdditionalInputA.11 = a95de8ec1face5e613db4daa9ffac424
+EntropyPredictionResistanceA.11 = f7598986fb23a312653c13de3d31ca03
+AdditionalInputB.11 = e2037863e127447d85cee41eed402276
+EntropyPredictionResistanceB.11 = e7a1e22bf548d6cf53e1ab19986561eb
+Output.11 = 2600110b79f6722ba7db975a372094326074b6a922fadd8ca684621cd595c2ec4b64ebcc7737706f435196d2587d980ad8cfbfe66036284c3b02e4e934186f946be7b7d132e44997a3e218daadc9c5e3
+Entropy.12 = 82276f45db7ff88afbb44735caf8eddb
+Nonce.12 = 84978f31d562e341
+AdditionalInputA.12 = d10e439ca67ea52b6a239207584f0194
+EntropyPredictionResistanceA.12 = 37d50667764a70bac11f570846f55e98
+AdditionalInputB.12 = 351dab5cd56bf99b52a13ecf4c31ae8c
+EntropyPredictionResistanceB.12 = a035472d314963543712d7c15e4ad337
+Output.12 = 7da2fd6e688024bde365e0088dd5f243ae2ddad43092ef5e7f96effc35f9999593ad316ce694e057d0178f3ef1d8ead4e802cbf9f893f10558d5704479141e98fc0f4e897318390e426e2cb009564208
+Entropy.13 = f2f8f3c9d9d9313a7e78d2e928b20be3
+Nonce.13 = 3feb3277bd8f4a25
+AdditionalInputA.13 = 30ca6553fd93152bcb0480c88feadb45
+EntropyPredictionResistanceA.13 = b5f6122729d7406be93e518729b73880
+AdditionalInputB.13 = 944b68e382ede5c58afa8e60522817c1
+EntropyPredictionResistanceB.13 = c60707e14bf7914fa31e0a849ee36718
+Output.13 = 101a8c8ff58eceb02a4254bb97132e5253b1d3ab80f02ab27319f7af46fecad2f6585dce5f3eed80163a731a76dadeddb1f0ffcf7905b7bd3dcf779d57d91e84502049a3ac06d55e93984906e2813b0f
+Entropy.14 = 15936932721672f889ca005b7c47fb07
+Nonce.14 = 3e044066369c6600
+AdditionalInputA.14 = ab2d642aad67d1adc76f5e3a62405d2a
+EntropyPredictionResistanceA.14 = 72257524f2d39a8da02adba7e58c9319
+AdditionalInputB.14 = 696d9380b814b456ca59ed58ea765400
+EntropyPredictionResistanceB.14 = d57fb196a634da13ba8695098ed79f9c
+Output.14 = 069848aef419759b75896cd507a109f685228b5639470afeac0caa853f1c3dbe373f99db76bf06fe8bac356bedf6bf18787043970fb0a185c8a0a4d8482aa3059eeba0d244fc03c9b72857dc5188d44b
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = e12a07ee3d9d404accba84fb3dd628ef
+Nonce.0 = 489f9b26aab5cfd1
+PersonalisationString.0 = 3831b8c005830bc5b30dd3949cf729d0
+EntropyPredictionResistanceA.0 = 3a7dd624f7143be4375519ed2d0eeb74
+EntropyPredictionResistanceB.0 = 2a9a0df235217b9c14ddcd55ee15cda1
+Output.0 = 5228488caaaabb8a362a1fb894df0f1898b37d6b620ad4af065d5c9bf73a66f62aa94becd91a6b9da9598a9989a2aea8345d166b6ce85f83e5f9af0fd27d150d6e362207f3d06c470fcd08d5cdd4a5b3
+Entropy.1 = 4f72abad4278595afb05fb1e114bd586
+Nonce.1 = a304eca38c41cbfb
+PersonalisationString.1 = c86cf0648bb100744ff4343385ed0d8d
+EntropyPredictionResistanceA.1 = 04980b1ec06e6899a5327ac209524ea0
+EntropyPredictionResistanceB.1 = 2a637d5d6366b808099080a97f5876df
+Output.1 = a43d21dde163c3b94080f594cfc51f6d7c9afbaa7b027f7f739317bd7f5a195da454ee06c3636c5d8bfd9c6a311675424436b1b7e3af484671e9f0af0f8e6a59b7a7b755833e5b34ef7a394450b02db1
+Entropy.2 = 00e4f2bd7a2bd83026f79f749f8a2af3
+Nonce.2 = ac0cc26895931478
+PersonalisationString.2 = 5878da800e46b6d0473d061d59fe8335
+EntropyPredictionResistanceA.2 = 301050edd8f2ca70fd784605152e216a
+EntropyPredictionResistanceB.2 = 2dc44ea7703b0df3024d953a7fbe8f45
+Output.2 = 3415d2a0ed14a6ef2b739bf32b3a80f5031ef8b3f279a857412db3fce1dc66ff1b0dbff0251eea3855b5b36e7c74a7f5f74c5f184cf53ced0cb1f0392d31090228e33f7263b14fbb3285a8519339ebee
+Entropy.3 = d4ce836a4410dc59f3f307b06cdac0fe
+Nonce.3 = 7079d501578a8cb8
+PersonalisationString.3 = 6ea85e1a1917fa9fda6c414bc0699f42
+EntropyPredictionResistanceA.3 = 0d147bebc52d7a5edaf458ec64521a60
+EntropyPredictionResistanceB.3 = 8dce5fdfc77b66ee1280e7b3f742a1b3
+Output.3 = 55e0c6012efef9535ab5de25d2574891bde1ddc2f86be13228a8e375b455343ba0ee1f38e9f777a08e89369b9802b3ad883cfee0204de91ae4700ce4d6b18ac057dcfd0dc49c6d8c7310430dc58b3062
+Entropy.4 = 59285d8e0879e05c08730ddc4195e284
+Nonce.4 = ecbe0a0974615e29
+PersonalisationString.4 = 62658390d78ba21c325d6bf9d2405822
+EntropyPredictionResistanceA.4 = 888dc74810e009dae06af66d725c90a6
+EntropyPredictionResistanceB.4 = 78e6a7c8e3ca63509f31b890a8339f8c
+Output.4 = ab538dc6e64fa1c6f79e6d1d808bbab1c4e57b4bce3a8e9d12cab68780062d3ba40ee1c6c9496682e17197be91eca4ff926fa1a4367448c5f2477a135a66b10bf46361ca4c1fde2a0d6ce12ba1d33182
+Entropy.5 = 16e54a9b5232450eb7e770c0874672ff
+Nonce.5 = eb61c6155cc09134
+PersonalisationString.5 = 73524517dd29998f4397faabce018c5e
+EntropyPredictionResistanceA.5 = 2eab17361ff7c02668d275afc07c4195
+EntropyPredictionResistanceB.5 = 1e68a5aaa0edef52c358b51a8df02f5f
+Output.5 = 92c4a2d085e7aa5204d142e3e02681c6b6133d2352666d9e7a98eb61e0f888a2aef54343944ce237b0f46626105076648f5d36b79cfbd108622ddfb5e93ba3ecc07813158bf9ff0e83475a643b9cdb8a
+Entropy.6 = c140f22918020e6829ba5c5b51b3a703
+Nonce.6 = 43e7dd0333d13b71
+PersonalisationString.6 = c597929fdb6804e937b394f6c9b90dc3
+EntropyPredictionResistanceA.6 = bbbaff189e3b5a95fa22d512fe5f5ebc
+EntropyPredictionResistanceB.6 = a174c66681af162a5aef5c114c73b41c
+Output.6 = 17adacfc666de7f4f9223eccb63dd874042aa12dfaf824d35e2362e9be8aec1baef536faf5ee95400fc5ff7a2e86f047170e26969cd150cc6fdd569efa71ae8f3a3ba41835fded87da0ef9062df7424e
+Entropy.7 = ec45da9c24ae729d707c269d572850ab
+Nonce.7 = 0035efcffa5afe62
+PersonalisationString.7 = 6a97334c0b089b38d25f2267323db870
+EntropyPredictionResistanceA.7 = 8b477f01edca204481659622c5adf0d4
+EntropyPredictionResistanceB.7 = fb8b27b080d464917a8466a9bda217db
+Output.7 = 4f168b5731d6d771d79989cad8093c579e0007d283ea6f70ee230e3b2db6ddcde3b3fdf08f403e74ea51010b51caae8da44a66204fc277103491ed410c3dbc14833de78caed7bdb13e741e615dc76c36
+Entropy.8 = c3696cd1487f2b964198ac785fa70959
+Nonce.8 = 3475bd8d80fb64a6
+PersonalisationString.8 = ef6185b0104dfa1c4f51eb8653e47b5c
+EntropyPredictionResistanceA.8 = 657c44d0ad0b7bea84b37eca42faa046
+EntropyPredictionResistanceB.8 = 5773db85574f812405c3e52041282914
+Output.8 = 16e2482be241cb42671f500914ccadc08c5d507a73285636b12ddaea22dfa5a24e20f2cfbffe3409fec92adf64e96fe3ac034de494d62bd7e3a2e8d633c3670a77a9d340b6ed5abec19f08d6d3e36167
+Entropy.9 = cbe8771fe6d33bea4c5d1a0500c0d139
+Nonce.9 = fce935abd0f126ed
+PersonalisationString.9 = 3e432dafa9bc5092f0b4fb7915480c73
+EntropyPredictionResistanceA.9 = 86c9a1f026ce4d31b794d7518ecf149d
+EntropyPredictionResistanceB.9 = 4abc56cee8d1fa982b0017a0fd23473a
+Output.9 = 148197ed0f363b86994ca32a302b4d03ae6230d399c00e225825e2fb40132515355ee53001f67ed5bce24d4447b140936e0e36bc56cb5c49b72aba0be955e9525074c2fb777ac0848c7315f3e60cc0df
+Entropy.10 = e87e793675bea5a4af9dc29b71a4352e
+Nonce.10 = 30db8404e49a628f
+PersonalisationString.10 = 7f273adc4ec48bd9c3baf94941b2035c
+EntropyPredictionResistanceA.10 = b4e4c8c71f3c5977c768e17c7557b57d
+EntropyPredictionResistanceB.10 = cf836924993f0dc60da3581b7d0559dc
+Output.10 = d550860c6e0dcb49782b3bfbe37186e954d7a9888ecea6e02cbadae1f16301a3f8dea2f2c4de5d7d804d57e67d2bb95c8682318c31e63db8e13a097f57f87eb8434da866a87d61b09d6e16214531363d
+Entropy.11 = 08b8a7123cce1be4e35a273072b0558d
+Nonce.11 = 202439604c3e8093
+PersonalisationString.11 = 088fc24e58c3a17aa61053d46d770a23
+EntropyPredictionResistanceA.11 = 17aaf8be73e836aa9cc99986e62b1161
+EntropyPredictionResistanceB.11 = 2f2753a0b98ea2c08c6ef65f32989d2c
+Output.11 = 05a0b9e40c457ff8f4a40c801c0e4d73febd1dea5b08d62e502bdfb2edda886cbdc64b26214530fc71866c9c0463cbbb18404e1524c4ce5934cd99d454b1a6a724134a91edbbde96e7b0144b52c0cade
+Entropy.12 = fb788ba2a525e79ac3b2b26b24344072
+Nonce.12 = 200e700c8a6bbc63
+PersonalisationString.12 = 8194054bcb78271b2adb9340792d5971
+EntropyPredictionResistanceA.12 = 3932a0f954f3a4daf667a477fea748a9
+EntropyPredictionResistanceB.12 = 17613c804e70b2bf48bbcfc41c793c28
+Output.12 = 2f113eb4637ae403f32a6a4ca148828f0d0b985a016f3a43b5600d90223d83616a0ee976f93194b9c303b876ed011f5238e02337ef1fe7ff4faeb560811493b3731dab07c6135d63b2f1e1c0fa1cac89
+Entropy.13 = 24340002423cbd066f416cde1483ae5b
+Nonce.13 = 77eeafb1e802395c
+PersonalisationString.13 = 4662f07c6cea20b4f926983822bd025e
+EntropyPredictionResistanceA.13 = b428390992b7c40ea4b65f3cbcbf8eda
+EntropyPredictionResistanceB.13 = 8fe5de8dd3bc0a5c5bed480552685843
+Output.13 = 71b11c0ebc71a4f1a4583906e388d121f7ab09c3aa65bcf4d6ad39f78b322ba2c0fe39781d45cbbbdfa24f7dc82c92aa2602709297e4e55b21b258d9535f5b39269d09ab4c4ce03f8a4ee3349849a0f2
+Entropy.14 = 4ec106f0c1de9360473c61455f9a75c3
+Nonce.14 = cdeea27162c19010
+PersonalisationString.14 = 205278c0be83295c840f6f431d3977c2
+EntropyPredictionResistanceA.14 = 015ef1f359f60a391b3720d578731070
+EntropyPredictionResistanceB.14 = 963736987090fe71e69b4a2480d9b314
+Output.14 = c75a102bea830a8a58d9a9a43cb03b21aea75d8d2a08c37aaae9180a5e1c78e5700b20a5fe1c7ef0a7e3d2adcf539c4c1357946a328a057e719b97d802b586910f804c166d4884d8bbb3bbc03074c53a
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 7ad015d85687e0fcb596fc3b4e4bbd79
+Nonce.0 = cc0230b58b376761
+PersonalisationString.0 = 2bf4aa63f25a74252615500f222a0c53
+AdditionalInputA.0 = ac5c7280cdc0e4240e9030de919d4380
+EntropyPredictionResistanceA.0 = 9d4ba047c61f592a49f6370c4e97ce84
+AdditionalInputB.0 = 9af4ed70960398eeb3ed96eadd126dc9
+EntropyPredictionResistanceB.0 = 188e1b13cd44a4a13c0d54f68c39794c
+Output.0 = 4dee4f8f758d9db52a0166a4d1aef8f334007e2228033133fc9ff544c4ceda104bfb306465b0003a4d23c36f26747d522cf8b13172a058390d2fc580383f0008cf286cd362d86ffb62b2f9abb3f54fc5
+Entropy.1 = 4d6c42295f8ad120054ab1cc0a2f7cc8
+Nonce.1 = e7ead14711d4d43e
+PersonalisationString.1 = 4d045da3bf73964604f5f103cc8ef123
+AdditionalInputA.1 = 55e348a9c9f35123ed1eb6b95892fd37
+EntropyPredictionResistanceA.1 = 96bd0f7202526519b168fb67ee28e877
+AdditionalInputB.1 = 69018ae94d54351016b4dbf59a68d887
+EntropyPredictionResistanceB.1 = 185a52bbe04cbc5078c4f84be5401b62
+Output.1 = bce650ab17da2aa452cc4dd3b12626d27d702c6bc70f87e78cc2a771e1ab9b8d6146c0fa6e1406f2e3363c947d4a0cb14d8f0d054a7a0be35df264e3bf70f53d338e45c7f62ac180fc323834d4d3b145
+Entropy.2 = a69f0bbf1f4538ecb3e0985f12e52ecb
+Nonce.2 = bde5d261d653093f
+PersonalisationString.2 = c50bf52e340c08855670adbcb300c904
+AdditionalInputA.2 = 379c6c9af7ccf3bd596f059d7e9d064c
+EntropyPredictionResistanceA.2 = a85c852301dd2fdcf009209b5c7b650d
+AdditionalInputB.2 = 1f8c80d6385e5ccb50b8ed636051ed5d
+EntropyPredictionResistanceB.2 = 92d9c95932dcdceec806ca7545677cab
+Output.2 = a93639e5f64892cab4f4c2a17653bd5c2e237b74e79db6d0f8339d589ef12e9eb070ca8137dbbc90ec58be112a8ccb3b826935bfd5ae9507291a27f311f750395c67530b40ff5bda5adc51a1a8a249bf
+Entropy.3 = e2e814dbb851109373bda5a345f9b4b5
+Nonce.3 = bd828e8b668ff0a1
+PersonalisationString.3 = 220429a4b6c9bac286245a01cd70b4ab
+AdditionalInputA.3 = 140197b71f4561eec90881574185c422
+EntropyPredictionResistanceA.3 = 604395fec68b00ab4be63f9a0f5349e0
+AdditionalInputB.3 = edfecd6a1aadc735873dd77ef0d78775
+EntropyPredictionResistanceB.3 = 34b638aaf7ee407578ba5fda187cc4ce
+Output.3 = 0ba14a6ebdf0abab58d68aa68144869a49a15e752839ba11fafb842e56681996735e1d456103a50d2bb425b67367d88d1aedf066ef9eec6166c57e60e77d92a057973cd88560d4c9f043a2826671f393
+Entropy.4 = ab81f4c27426ec0f74da671d540d6010
+Nonce.4 = d9f1401cd09fdbb9
+PersonalisationString.4 = 751e333f2899c32880435f8c6752a750
+AdditionalInputA.4 = 7903fd83ce00721cb3a7b90bfc94e338
+EntropyPredictionResistanceA.4 = 22cdca6f73996a0d2e98d7fe85701502
+AdditionalInputB.4 = 520925e38e75356ca5f782756c4eb1f5
+EntropyPredictionResistanceB.4 = ef95950e75bcdf2c73cb660d74fca6be
+Output.4 = c24d20a82fb010440a929d16ecccd0f765781f22d9bb14134bea813ed54900e9611c6664ea1919759d6d54fe853d51a3ac96adbf9fe8c924d798394f74e3b7c0ad722ea40f9b7e4c0a932b0544f4e3dd
+Entropy.5 = 5733ab1621c1de860bb48642e83ce84e
+Nonce.5 = 51db91b907b126e0
+PersonalisationString.5 = 9c57bc4ade264225610ceeb8762adfa9
+AdditionalInputA.5 = 3a953730b260fbc5224ec288fb67717b
+EntropyPredictionResistanceA.5 = 8f78bbaf70e3f48a6462f5bf49a00e45
+AdditionalInputB.5 = 636f50b88324e2640e4b219dcb992f37
+EntropyPredictionResistanceB.5 = 0992edafd59335596cb507186db2b0b6
+Output.5 = e15b22b84c0d8532367516e32ab938c287ff5b9bec4ecf16abfe9b86d5c1dfdfdaf7bf42a0161061bbb49595e12bcea2bd511a1dc41a7635215803200fcac4d8ee3123304c0af5ef9b1a27cfacde5cad
+Entropy.6 = 5117249d9b33f8b7dbacbd08c34416d8
+Nonce.6 = 18e5c760646bd910
+PersonalisationString.6 = d042abcd16f64f7868cdb3d46cd19e70
+AdditionalInputA.6 = abbcc890a50cb1ae742879d4ccc61e3c
+EntropyPredictionResistanceA.6 = 2a11366098f8ee2d5f6fdbb3f536feea
+AdditionalInputB.6 = 5e8ffdf55eb021e27811335358a18070
+EntropyPredictionResistanceB.6 = eccdae96824d263bee1dfd8f01369ac1
+Output.6 = 522b451aedf163eaddc12bfb567fb6f83568dea214521bf1b7bfcdbdfc22f5533618e9ea037208e49d17208956d08eccb50a46e7a3ae7ece0113f0c1ee6b1770a94fa40b7c7ad130d66f628f0a6cc5ea
+Entropy.7 = b6f407f323fef0314fc011703953d0b5
+Nonce.7 = 1e8afa14d7a912de
+PersonalisationString.7 = 144784e91de69caaada33333a38e9a7d
+AdditionalInputA.7 = c69f68bb8502f0a67c43fe99a0e74fb4
+EntropyPredictionResistanceA.7 = 1d715f975e4fe25bb6306b9f2a47febc
+AdditionalInputB.7 = 1c6cdfe5da4ca5b35a83c184e3d06b5d
+EntropyPredictionResistanceB.7 = 1859fcae74718ed4edce732c654332a4
+Output.7 = 7e2d625a47280c3c20935125d9b14710388d7d10d00db9a291457f05fe583e4431873a6bd8d097ed71414d0dae0346ba59fce0999b612cbf5c498077fea8c404a7f106ca68f6a4898203eed872bbe836
+Entropy.8 = 4e44c6a319e5e2969b0f96a6216a16bc
+Nonce.8 = 47c61a69ce1854f0
+PersonalisationString.8 = ba810a24eb05823d5c179e404f2c8646
+AdditionalInputA.8 = 0bbb8d9152e0639eba7d143f19775b36
+EntropyPredictionResistanceA.8 = 331db9bbc61e1d59a53b8ca95ad892e2
+AdditionalInputB.8 = da0e99fe5716bf5fdd45193425056641
+EntropyPredictionResistanceB.8 = fed873f0a30d9f488eb97016ffa3651e
+Output.8 = bf231fc55bfe034b4e0fa7e9aa8f07fdb51ec9241a85bb34aaae03d47f9f81b1b97e47fc8de52aa9af647c321d5a32397f4fc5131889cec089a75e887fee4b5b353f1b3f75c63bd14345962f481d40a3
+Entropy.9 = 7d28a93e557c4876a6ffcdc974679db4
+Nonce.9 = 271997eb99b8d050
+PersonalisationString.9 = e0e9783b6692b9bb5945aa6c81aaebc7
+AdditionalInputA.9 = 3dfb27765346ba3064a6f32c8f27be29
+EntropyPredictionResistanceA.9 = 36d2e8ce7d605cff66214a7663948a74
+AdditionalInputB.9 = 5e1e8107c11ad94598a9edc114a19795
+EntropyPredictionResistanceB.9 = 4a963c3f18b61eabf35da2d37a8709b5
+Output.9 = 2d3c0f5ba28685d8de9edf8422c8a46dc9c3dbf6ebcfdd539a76fa435e84b46eb8b71787a079b839d49bd64bb71d41338995cecd99ad6080084cad5f985d1098417500e7f7fd4b640d933ba49a52eeee
+Entropy.10 = d2e112927d5f2acb57bb9cdc7f360871
+Nonce.10 = 6c69f56bdfe2019b
+PersonalisationString.10 = 223730bfeaeebf452f0d492189e01b87
+AdditionalInputA.10 = 58038326d777c3588dd5f02ca7fe7419
+EntropyPredictionResistanceA.10 = de96522405987ebac1e3cc46b2d076d0
+AdditionalInputB.10 = 196f5b6d25597dc3254abd56956b4dd5
+EntropyPredictionResistanceB.10 = 007d5acbcfd4cf997db4531d82f28410
+Output.10 = cd513e1b6e870834e01a2f19da885c1381d4f625c161ba37f74b1ec6bf54544653714e4bf599607d63abf4da3b764d66f56a5537da5f9aeae73d8f524cad9dd3e5b469b803d8a98ef45b55f2dbfa673c
+Entropy.11 = e9d68a2714c160942d335c734318221e
+Nonce.11 = 736d6c91c34db232
+PersonalisationString.11 = 3b25d25e8f1aa881d239085f33d790b6
+AdditionalInputA.11 = bc9a5db4e4932778951e446efbbf4201
+EntropyPredictionResistanceA.11 = e1a640015521fa0f4dba88ca68e2a62f
+AdditionalInputB.11 = 295c21a7dc5d80aad4caede912cca48c
+EntropyPredictionResistanceB.11 = b9d839732a5f44a3304385cf20b35899
+Output.11 = 2212cd27f061debdd8e2e565c391d2eae0b02f3d0bebf9f023da5ab4f246918b3eb1e6116e463270f1d1050aad481aed44a5dbe9ef3eea15d5069a57ca6951a2fe37df13f82b01dbdc0f4100bdc06efa
+Entropy.12 = 1b757f638b9754717775e727fb8d24ad
+Nonce.12 = 7d1c8c2d91d50fd1
+PersonalisationString.12 = 0e724192c8ccd94be43c8e3f9ef859ba
+AdditionalInputA.12 = 49fe729847d03079234b01470726d9d0
+EntropyPredictionResistanceA.12 = 2e53998b0c16b9e6edbc35a871349977
+AdditionalInputB.12 = e435e7b9ba682bdfdd00800b377272c7
+EntropyPredictionResistanceB.12 = aeadacfa744aef5f9ac88328e171dfbe
+Output.12 = 14427eb7934a5c7df0d5aa0616d124a102fde836334be7cee4e8e48e55e180cfe2f401efdf49a81980753c96a419948d510f00ddb489072b52f530ac410cdfb6fdc89ccf967251109b389aef77e56a2e
+Entropy.13 = 2576b19da5abc2e74d2aeb2b792f6049
+Nonce.13 = b5f6cdd5c0418736
+PersonalisationString.13 = df3fd4110575ed432a0d02cfd52d3051
+AdditionalInputA.13 = 5832314d987b42efe2c5897b2418784e
+EntropyPredictionResistanceA.13 = 7d048a12fef16191510fb0b75a699c56
+AdditionalInputB.13 = a4b02d0f288b0ea087bf507df96ea167
+EntropyPredictionResistanceB.13 = 1b78a74336edc789adfd7cd1465532d4
+Output.13 = cf4ea7d5e5d5a4153728e2014dca905a654fc2a0f8d9ddcb4e9845c400a71f2df0e7be38d534c135029c6a62d0f181120444afbdcad75c9934c1e52c37fa60eaa47341108dcc194aa7b7b37b29a97f67
+Entropy.14 = e9b50d2d7ce52a9e1c1fea1829ba5a30
+Nonce.14 = 6f28236620ad2d8b
+PersonalisationString.14 = 041c7991e5e7430765d953903e39393d
+AdditionalInputA.14 = b6b00cbe6a83cbfc27d8e202b41ca50d
+EntropyPredictionResistanceA.14 = 5bf82cda294cf3bac6bbc8827eacf115
+AdditionalInputB.14 = e0b7ad60c542e6c2b324652fd2d7cdc6
+EntropyPredictionResistanceB.14 = dc7ea852c3e5467977c7946e77223567
+Output.14 = 0e2e5f47ca8ce1c7fdae1b49d6bc8594da1458eb8dfb35e0602d3812df7532cf6213eba8e75302444529565c40d23d0a336c4cadde37f0def2c3d412984360b65c668ef43263fada16b28860f6ee6ceb
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 2b27688ae58e8e08e7f7ce4df1aa6e21
+Nonce.0 = 3db46c1d2c419019
+EntropyPredictionResistanceA.0 = 1502d331711399ed0ffb8752028d2d34
+EntropyPredictionResistanceB.0 = 039190eef13dca283f4315ad25d80ed4
+Output.0 = fa4b19d0899ea5b2c284595a745b0c9fd9309d47bf6441035103e4dc6ba83521020e970e8cfa2695ef810c724106e7ae3b76c0a7a50208e58fd0c58d7800da1c3302f6304e0a6815d31df6459922ad5f
+Entropy.1 = 3c669e617f799ff4828568ce408f7698
+Nonce.1 = cc43c6a0dc03a19b
+EntropyPredictionResistanceA.1 = 9c41d89ab8c8ff564c85b8ffa4b4eb4f
+EntropyPredictionResistanceB.1 = ab2c448b2477f17ba0f2514296f227fa
+Output.1 = 3beeaa67ad93dfe32e768b4762385e6daa2bc7de4bd115ce1d06c1438da6f9c55624f722758e8dda941262618d7504fc1c69e38715cc0400348368a0e7eb7614b16aca9f1ac6463260c89648a0318c6c
+Entropy.2 = d85fd447b8093b9b395618270ada7676
+Nonce.2 = e9b18a85b7d1ef37
+EntropyPredictionResistanceA.2 = 8a21d2c5d23a9d955af6fdc750289e83
+EntropyPredictionResistanceB.2 = 465ddcaceb4d629424d0a3031addfdd4
+Output.2 = 2f8455c522c41bf1e409fe38d1005bef9d8e082d31524f32029d3e26828e69e401ba2fd3ee47ee109eeeca158b1899c1fa1d74bdaf254629dbbf11ed16cd3e8df159d958f01a1aea3b85cdf3b5eaea54
+Entropy.3 = 2481b860805810e3d40b5fabc25ab4a2
+Nonce.3 = a7346307347bc97b
+EntropyPredictionResistanceA.3 = de22a3bb52713300a73ce7d562c18e64
+EntropyPredictionResistanceB.3 = 31a60738d47ba7fbebc7eabe081cc8c8
+Output.3 = 2fc6496bbef8c06a97f31d80b44c03579b826a42b7b8705d7b1fcdca0d624ce547a0b53d117455fbf7681036b9bf4e57d7b487e4e26046e1ceaac0a8b09c2bc23300781f2421e7f21120a73a4e7bc077
+Entropy.4 = 5b3b419ffff62df98b6da404b8a62323
+Nonce.4 = 3be0acbf7dbf1401
+EntropyPredictionResistanceA.4 = 9d391345d20a93ef060f6c03c81ca33b
+EntropyPredictionResistanceB.4 = ed392a87f568235dff7422797d24cfec
+Output.4 = 1161497f09eed3bf6d47f34273abfdb146bbe1356b6bbcd28f2f060b68c36a2d90ad8d973641321db02045075547841a024c3c5f7f865c91b9e258668a4a2872dfa39ee2ac433db96f4950f2372ca7bb
+Entropy.5 = 8dcd885f563cc2f310570676947ebcb4
+Nonce.5 = 6122e0ced756be81
+EntropyPredictionResistanceA.5 = 23a7cc30a9cba82d125ace0db25ede4c
+EntropyPredictionResistanceB.5 = 8ad6b384c9c60b4b0aae70d0e3196c73
+Output.5 = d66a77fad98359509ef26b683f2401cac5964c1cf20718967756c00b4db25a39930f1d1fb46c0ca0d528a8dce35574b0b94f1ceec6a9f3ea8a923b4ac23d67acaec23ccc9ed6e63e9a0fe7b73cc9862d
+Entropy.6 = 84f83a2584961a89e7d51339d4713b3e
+Nonce.6 = cc9c5817d30f8cfd
+EntropyPredictionResistanceA.6 = 7eb50b8ee8fa7aee40f95fabe97da923
+EntropyPredictionResistanceB.6 = fd9958bd3fe1673fcc4f669436512cda
+Output.6 = 16229da259a4023fc60bd7385f8ecbe04e07eac82d20cdc00c50d6b75fa3b3e5ca2603c6869777a4d8f478249b6f104d7d8501a6845a1a39d44806d1132d3ee9eb06627489bd6ef72c672a6d49e3926d
+Entropy.7 = c31f878e80724cb009151486a0dd7657
+Nonce.7 = c41b1973704ecf1c
+EntropyPredictionResistanceA.7 = fc1ba0b227942f140d48a2fe8bf24dbd
+EntropyPredictionResistanceB.7 = 671a1d4386b84fd9f8e451b5c01b512a
+Output.7 = 0fbaab7414459670ec5c0df5ca53c0a7e1c191ba14e45e2eafa9a8872c22bddff0d1fa8df3884613b6ca53cc6cbcb077984982fed4066c82225fcd278179e87c60b365f1c3f2785e3cc4e502db6803ff
+Entropy.8 = 1a7d3667319e7b83aa113ba5997f3fc3
+Nonce.8 = 58d9fc4606079d8a
+EntropyPredictionResistanceA.8 = 91438d98fc6cc4c43bc8891a820b461b
+EntropyPredictionResistanceB.8 = 872fb02fc19b123d73dc78e65acb460f
+Output.8 = 515096aeb2f29268b3a7427b87cb5fbcdb9d4e3188ee5a32861940eb052d3be326491b0cb058dd6cbace53691f2c6bc56b34864c08430b01137e08579175668ee7fbba5f9712bc2cfcd8525b9b3c49e3
+Entropy.9 = 8302352be573cd5940c1c7fc7bd121dd
+Nonce.9 = 45f9751172930970
+EntropyPredictionResistanceA.9 = 80603d0987a96f9a19623c21bb503257
+EntropyPredictionResistanceB.9 = ef167829de6d07009a659bdf862aaf54
+Output.9 = 51ce3b3d913c6da3a90af3559f6cbcbd889cea4516e72b1ec79e87631ef6079e3e85f3044859b19b6377d006ab937694b4eaf81970178982f7b7984e2a1f286db131c228ee923e300b0c4d431970ef58
+Entropy.10 = 8e53177c43dcb65405c14f8ef6b7c119
+Nonce.10 = 0b32ee10512a7fd7
+EntropyPredictionResistanceA.10 = f296ff1364565f3f49d9298c77b74dbd
+EntropyPredictionResistanceB.10 = 24fde9b94dce0bf259aac1cfae7a3735
+Output.10 = 8fef921c5c2b9ba089741799fa1de53f1ef2468ea81d0353c730be29508e43ae45eebf34b2ebad8bdb74f4e9d23bf535a72d08ba18a91b6612a3f4a5cf3faf21d5b496f20844acda22f0cb91dd41cdc7
+Entropy.11 = 62303b44aa7a78cd203e6d31de2d00dd
+Nonce.11 = 5dc3d13e3425bb8e
+EntropyPredictionResistanceA.11 = e95e51809f227b4ddd2e754ecd38c51b
+EntropyPredictionResistanceB.11 = 0a64c1394927bd2e649b7a5ece95facb
+Output.11 = 314e96325adcdb636c4319baf4f8f4750b814b0176e106bd9689d8b2bacce698b9f54cbd699a84a0ced20e5f49c891114c3852d914ef004ae07e4498a6eec522683f5ded77d7cf66bf5019624b60dd22
+Entropy.12 = 956fc5bb02a419e002af46621d5a7514
+Nonce.12 = cc0f5d945814483c
+EntropyPredictionResistanceA.12 = f5d691d6c4cf441318cc42255a5091b6
+EntropyPredictionResistanceB.12 = fb050f131e27c43cb7f1d16631f86bd4
+Output.12 = 4cfd1aab44da77f4964b230b48c912f1e79ce6d566040e35ac3ecebcc033c08d73d075b126bf738fa741e7b96f96cefd415f3396b2c6c4236a28b9424df268896000cd00c98011108c34265977d36cb7
+Entropy.13 = 66a0b0f18aff5ba794378d3514582237
+Nonce.13 = 76b8a7b5093d16a6
+EntropyPredictionResistanceA.13 = a84c356bcee0f8d73ed5cf4a3111c6cd
+EntropyPredictionResistanceB.13 = 7e0376b2941ea47232d620932c268ef5
+Output.13 = 65b572360bb042081bf42bf7645328ffc4f96b67d91979866142f0eaebc708205db06845809bc8417077f789451bb942c6728b2b51b8e6bf29736b2eae27e102aed8412603035350cb5f4daaced9a6ec
+Entropy.14 = 67dc5eb14e2a47292037140777c8a04d
+Nonce.14 = 3a4d055292a9ad56
+EntropyPredictionResistanceA.14 = 4912a46c447c2de26dbbaec01817d2a6
+EntropyPredictionResistanceB.14 = c182dc35363cd7e04394c28030e6d6b9
+Output.14 = 976daafdf1dd5163e88a928d91933678cda9c8ef9a8251070ee8a6b42efda3c00a73303d0426da4a4af7c587174dce9936bfbb68a73979afee9f3a5b4fb4da2eb2b2f2f1c0948b63b45bf583412b2890
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = dad2b48b49608a410008f1a82f24397e
+Nonce.0 = 3820403fc73ef933
+AdditionalInputA.0 = 11eb84a094b884035b92e5a5e77b4c49
+EntropyPredictionResistanceA.0 = d0a75885b934ece71656c6a250fbcb7a
+AdditionalInputB.0 = a0afccd533de0b2b11925e6eebf9edea
+EntropyPredictionResistanceB.0 = f02de5bf9eacaebd3236a2f7b32a5de5
+Output.0 = cbf885b794e68527e7fee218498c34ab892da507c1b86771a8c1a185280ce446947e6d4b5470773849551dfe857e7d376fecbec3f04b5e6e46cfc8a4cb77ebc24c986e4496ca36e353f57bc63b53d883
+Entropy.1 = 4db0e4ba82163d79f75d0eb549bed8af
+Nonce.1 = 01d51d66ae8f6f54
+AdditionalInputA.1 = f0a72ca3927db8950af456d5c6b33120
+EntropyPredictionResistanceA.1 = 2613beb7a423007d1d4a8109acf07f26
+AdditionalInputB.1 = 51bbca6b45f5b9764ea11cf599435679
+EntropyPredictionResistanceB.1 = e6c658b26e7ac5c9ccfca77a1a719765
+Output.1 = 4fa8b9172ecf8e8abacb74ae98927e9b5d2843c7f521e65aa7ba42ccbd21dadf236c475693dfe2a87133f8ee95423d66dd4ec6fceb23f5117041b91d3ab9816be2f2886dac0385587111dcad602d1fee
+Entropy.2 = d7bcf521c21b3b3143da1f344d728634
+Nonce.2 = 428b3096a10ce395
+AdditionalInputA.2 = da872eda1e065e0fcd30b68e4cbf3f4e
+EntropyPredictionResistanceA.2 = eefb5bfbd9b4772f2febb2679d18f122
+AdditionalInputB.2 = 6b9625cdfe1eb557407730d07c76b8ab
+EntropyPredictionResistanceB.2 = f57816ea3a9784c76e8569713aa7d5c7
+Output.2 = fbe8d5646256934fc558afa57575939d463e5cefbecaecf5a39b466d542e9d0a0fcd67f5b6fb43adb5497d7fcea809b03fbd6cbc2efcf92f80dd925862275746a6361e41d258add8cd9d9c5a660d280f
+Entropy.3 = 45d4f0b24bb86b8b90f74a9cfa1359cd
+Nonce.3 = bfc75f727c4d5828
+AdditionalInputA.3 = 8877a49716f30c5fa52090b383455479
+EntropyPredictionResistanceA.3 = 8929adf254f02e2f1cda46e3a534d5b5
+AdditionalInputB.3 = 20d89eace55cd387c20285279e4d878b
+EntropyPredictionResistanceB.3 = 31417aaacc991fff98cc2c7d9a5d0e17
+Output.3 = 0820897837b7b11d498e1c1c697d878765acf6671f8cf3708694ec339be824c3fb89af2f95065fcc1ab61e4a97c027dfd17a2b7be9a0d188349a78b16fb54a972704dd512bc3de572eab34c5808f3557
+Entropy.4 = ed28fa064873b8254f7976b08fd91f93
+Nonce.4 = de44bef4e0bff2da
+AdditionalInputA.4 = ffa573f26bb461754cc158443c366b67
+EntropyPredictionResistanceA.4 = d42bc896a59a16d1c8672de4b7d68a35
+AdditionalInputB.4 = da2091a4ec4119e1ced20aa929c12770
+EntropyPredictionResistanceB.4 = bee89c424a22ce524590ae59f8655e80
+Output.4 = 5951e755094b467bc72402aae6f3f7b2adcb447ad96b6c7af18ac0e6d871a2f889eb8089a06bb35d53b2498981fdcda2ea4cd1a501176507e6930dda74ae6eeb01264bb1255333b1a7a42f7246302773
+Entropy.5 = 38cc2c24e675286dfe2eeca3adb45e52
+Nonce.5 = 5abcfd27bb7bfc22
+AdditionalInputA.5 = 0dac3a6263bf7271dedda559204e7ab1
+EntropyPredictionResistanceA.5 = cd79ccf530d52232eed0d718dfd7aba5
+AdditionalInputB.5 = f7112b92760558a4179406caa8f764db
+EntropyPredictionResistanceB.5 = 17a05f4180ab7c6e2394c22ed6988284
+Output.5 = 79483a2ba6260d6b2d1ab8f6f4c39152620c787602bcb3147cba438af834a716af675389ba01069d38d50c73d954ab218f7c2fc9d15e1110dcd606f3513bf718df171517cc07b49886dd6280451a536a
+Entropy.6 = 13a53be0e70ef35fc29bb2daa157d7a7
+Nonce.6 = 89bcbf0ebc1d7069
+AdditionalInputA.6 = 6fd0a221263c6dae775626a5a5f21ce2
+EntropyPredictionResistanceA.6 = 36e7dfee34f10dd98379ef8b37466763
+AdditionalInputB.6 = 8d2850b3dfa03d0c24548fdb42944efb
+EntropyPredictionResistanceB.6 = 6fa3eb6237539e574b546182fe284cf1
+Output.6 = b62fb6c897961be808288156732eb93be69cfcae4815cb696ed48f211b38e197f1d57ae5b0be23455bb5a60ec06c9412c310c67428457fcc20d30192070cd433cceca35b4fac3ab35d2585e4710ac43b
+Entropy.7 = e75a88f1573442965708f8070731c1a0
+Nonce.7 = c58c9c4b4762896e
+AdditionalInputA.7 = 354d7219b221e3ae463d913b577587fb
+EntropyPredictionResistanceA.7 = 9be1aefe3f93402a0d940bd0abae371f
+AdditionalInputB.7 = bdc5af5203227f6ee7684b21a49e1346
+EntropyPredictionResistanceB.7 = 1b5918b95445cf4baec4a7b63328db0f
+Output.7 = f2b3f1e550d0de338dfd6e66c775d127965590266361a58c05a54b5926d65e4f0d4b9eae845fbee5cfdfb75c3dec37e1f2350816fc06246621535bd205e683c4cbd59bd72635866a737c6b61c4dabf33
+Entropy.8 = 0eae08766f8016389310f9bc1e1ce7f5
+Nonce.8 = 4ec05eb7a805c29c
+AdditionalInputA.8 = 5b6bfeffb311f5d0e80e3453995e506b
+EntropyPredictionResistanceA.8 = 4a669512d8e95a739b3293fa026d6012
+AdditionalInputB.8 = 797a350d170f8f24f1c2f582ededdfc9
+EntropyPredictionResistanceB.8 = c719b6a63014c32da275ef95fd2cc1c1
+Output.8 = c9cc0bcbc2810eadeda0f4a41e9dc3454ff4b95aaa0614ba68cf78eb7723cb373bb44b80f406d463809820fc98306f8018b819df7fcf3f1a27a213190fd283c2bab251e3b784baefe39a51023513ca87
+Entropy.9 = 4e882d79337d61c6f60321bd71a588eb
+Nonce.9 = f39386d9750affd7
+AdditionalInputA.9 = 99f6cb6dcd03b81f95aaf2ddb85398e0
+EntropyPredictionResistanceA.9 = f3ebe6ee9d4afbefc72891d9421d7e1b
+AdditionalInputB.9 = 396f4626ba2624fd9d7b16d0e12d9b3e
+EntropyPredictionResistanceB.9 = e731d9748def385025c4b01144428635
+Output.9 = 4d3d9bc08bb23bb78324d1cadc3fa584f62bf4ca9b169df3cde590d2f41cd3ce4f8f8431825fadfa497ca8a6fd05b0419cc0b2491d8a603d5407c5758685b7ea4dc0c56d9e3b56ad4e68789483f72d71
+Entropy.10 = 1bc455f349a78eaad689fcda8e7403f9
+Nonce.10 = fe01ad0903afc331
+AdditionalInputA.10 = 1b072cc4179e616c057d9721d6091bbc
+EntropyPredictionResistanceA.10 = 598ef1536539efd2ac3c274af4ba3ee1
+AdditionalInputB.10 = 8efd0f6ffa825d13f8ee47184264191d
+EntropyPredictionResistanceB.10 = 8347932e6937eba30524d37b427803b2
+Output.10 = 7116670187e3b3cb4916bc0ea1bc7a7e12c3f7b995d0be517bc6ada2770637000f9ae82cf132036316461983786177477e7584043a7b24e5d30eaa26dd3c479fcea5d918d15cedd291b2f645332a68b9
+Entropy.11 = e75af7296d6292007d77b09f4e79a59f
+Nonce.11 = 38d17fbb91897f5e
+AdditionalInputA.11 = 122f6c2cb14a557341ddb2b0d6804822
+EntropyPredictionResistanceA.11 = 3e4a16a34ed84dcb73640ae79f8a4a92
+AdditionalInputB.11 = a991f0ba3d8278c2cec1561f2ec36d81
+EntropyPredictionResistanceB.11 = 98d8375b85deea51a44bf02ddacaa1ef
+Output.11 = c87172e31f39fbf0033361f159ff0f4458e3f048fbd7dda25a3106c4a9cf69f1692a0ed9842a85629819b3323e2581a462156304ad3cab907418e5d5d1598caf42e92f34a5877b044da672a418ed6220
+Entropy.12 = b7ef86545cb0a18032155c35f753ea8e
+Nonce.12 = 1b4763993c3f9e9a
+AdditionalInputA.12 = 6138d35b1f9265aafeaad0740314f3e5
+EntropyPredictionResistanceA.12 = 527c873a9dbf6dcc914ea22d6009ba55
+AdditionalInputB.12 = 20d07c990bcee3f482259a64b96e3ea1
+EntropyPredictionResistanceB.12 = b4cce23720ced3e9f10640f29dbd9696
+Output.12 = 0a384779451c97d7897403f046239156f9a85caf19c3b84f097a6ee90e64a18231eced2ab7b314096e2abbc3da903f9d7410da3a649370330bcd868162331c10935a664b6ddb27833a95350bd8fbd801
+Entropy.13 = 247ca84d7bee5f8b5064aaf5eeaf370b
+Nonce.13 = 6ec4bcf3f52654e7
+AdditionalInputA.13 = 0594454c0d51db4b4f372aa538ed08dd
+EntropyPredictionResistanceA.13 = 45b5dcbfc1fc73f00857253da5ea157d
+AdditionalInputB.13 = 22fe6089974c00d2f74075358730cd45
+EntropyPredictionResistanceB.13 = cce63e5163930b60a59a1b9f592812b0
+Output.13 = ddf5cc479c9b9618826e54c5673af200b3f8545633d4107565e6422fdc2e05d04851b4918816df51da92714c16b71b551d4e98461a65c99bfddee45e0496c8a021089f07626767ddb8691bdb0e8b3ed4
+Entropy.14 = 135f2e93c21ad80261950eb4539005da
+Nonce.14 = deb6ac05ad02bc6e
+AdditionalInputA.14 = 72161ae856c25ab77da74cad05350bd6
+EntropyPredictionResistanceA.14 = f06a5a3607a4e90378ca89658df639a7
+AdditionalInputB.14 = 8022a4985c745515682102a25b379301
+EntropyPredictionResistanceB.14 = 8cc2d8a789d343547ee48869f57ae225
+Output.14 = 5707c544445358767b1c4d6c319b6a8d9be38afbf945dd4e869e9136d63c9d74aa872139e8bdd374510ebcf8c36c39e45ff31596fa58721c2a089dea7b418b3f7a00d78c6ba531adbb59ae2ab44bb683
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = effdb992084bcde0727265608ddc742b
+Nonce.0 = 1688afdf17491200
+PersonalisationString.0 = 16590f4c77b772c4c911018b4c9bce77
+EntropyPredictionResistanceA.0 = 6b22ef137a3f8fbe3663e08293db5f91
+EntropyPredictionResistanceB.0 = c6121a9f5e000a97a6ab9c545930a25b
+Output.0 = 41d97daf979c65e2b17da071275c6ce153d6350ee1d06de5f58e18fa491a021d849350702dffa6b34e626263cc355fb690d7b969834600f6873372f6634024f2974accdd3a9a9e817b2808f383e2af28
+Entropy.1 = 576a945edae7f91f855f700ba0d52917
+Nonce.1 = 6915ab46e0f3634a
+PersonalisationString.1 = c8387b123e140c4c5c16b24f559f5ab8
+EntropyPredictionResistanceA.1 = 41197f6951c7fe6ab7cd4bd89993ae19
+EntropyPredictionResistanceB.1 = b33ee02ae17275408e60c3d508f5de7a
+Output.1 = 8a89eb5b5ad69f95b542df5031d0f4c6985ad98402144c7f2d4a53fe4a7ee466b679dd30d1c9d539a89528564c1faadbba191a1cca50bf0f1f51bd36817eeb0a3263f23968347f6d954eaf9934e022d7
+Entropy.2 = 089595d59143005cca814ffe79173b4d
+Nonce.2 = 048ebaf62e6db405
+PersonalisationString.2 = b079adce555efb3d3e0a26b9ce58e47a
+EntropyPredictionResistanceA.2 = 32d4415a54aaea1c52711533def0a348
+EntropyPredictionResistanceB.2 = b74d4e1b6f815476ce0d54e69959cdfc
+Output.2 = fc387ef1dfabd57dafc0c66cc366edcfd17087e8560c89dfbbbd4b85594a7030bb055d785b1a23e3e33732059544f050c99a0404aba680068cdfc7dc2aedcd19a3d11becf9cd3f1fd75f8e41bb376e43
+Entropy.3 = 78a01fdeb1dd45d2c7cb5801af0b85c2
+Nonce.3 = 1f0a9000f875cbe6
+PersonalisationString.3 = 78193c99b24ab17a56af4d76a0abdb67
+EntropyPredictionResistanceA.3 = 235013277efa696150459466a18e48e9
+EntropyPredictionResistanceB.3 = 7521f077e47b50d84b8fea03dd4fdc12
+Output.3 = 954e6bf7e91bce4f503e6498eadd376d13c14cca2d866710818591c5b94a36bc4d1a0673f46f8b832f94c9690d16da32cabf79063fdf0217c42bcd2173b2c658624557279eb90490befe0afc173bd90c
+Entropy.4 = 345578739cfc3400dda4f82c69852617
+Nonce.4 = 96ed766d0264c5c2
+PersonalisationString.4 = 4e5aedb99688b3aa1aa803a5992ee660
+EntropyPredictionResistanceA.4 = bccee185f34492d569c7d9bb251e159b
+EntropyPredictionResistanceB.4 = 2180c9ef74d0f51b9679c1153ffdf2f1
+Output.4 = edaf5b553e7c5de84a10a0f43cbbe46d699fb7593b813f373d991daa77f365898c78129913b7f45ce789a626a650e6d609a892132d3a3312826739fe1833273f5d477ddc08b51b0f20b281a71db81222
+Entropy.5 = 072037646b44a06b1ea9257a3f02227f
+Nonce.5 = e406affa1bc8cc52
+PersonalisationString.5 = 9e3890e5ed5e25ac029b7aedb3c4f9b5
+EntropyPredictionResistanceA.5 = ac73c4792bc234ce693ffb4746d0babf
+EntropyPredictionResistanceB.5 = 6435cb6ac8b9d5013480d414342390af
+Output.5 = e2e8cc3efa419bd52a9225dcd04361841a3cd5634a0ced8533c88357e3aa5a490925fe6c2f9dbdf1f03acaaea8fc7be75600912c273aa80cf59dce4fd4b85142d0c965dc4ef0d4b2465b292816d7e547
+Entropy.6 = e1fb521a8cbb22efdd8cf992dc9de56b
+Nonce.6 = 2777630a9fdd66e1
+PersonalisationString.6 = 742520394946ad8d5d247b91e96fd5f6
+EntropyPredictionResistanceA.6 = c040ca7d0cf6a6eb83f9e623077b66f3
+EntropyPredictionResistanceB.6 = c6d19227f3b89e9282be7b807bcf943d
+Output.6 = 8cb141c21d4cbe1fcbce0d3648f330a12a189e944686a060cd6888070dfa4b3ff53bffc174cb8faa20a3eec2e3be0c981b5516bc14132c09d5db89a2cc207fc1d5ae7b6379b0e910d7925a153826b5a2
+Entropy.7 = cd2eeb21b14b84ec3b85e55c7c2b464c
+Nonce.7 = 6a2c24cc3fcad11d
+PersonalisationString.7 = 312975d1d27049919b38cc88377e00f1
+EntropyPredictionResistanceA.7 = 94494fe3d66fda575fe89d6fedbfac6d
+EntropyPredictionResistanceB.7 = 8fa5f34b0ecef27b2867fc3a1d3fd408
+Output.7 = 76bb60f06b0d50bf410b6b2702716d8e10d31a7afa8bce23b22551fde9873ca25e0ad35b99ae9ed8ae11666896c84c4975958f3e606b0584df622e0c1bbe1ad50d091cc58b9ea3c4909d2d0dcd689525
+Entropy.8 = c13a9a395b1369fbd14bd80573fa0692
+Nonce.8 = 8552ad561b893227
+PersonalisationString.8 = aab807f73cbd6c9d10d4e60948478ade
+EntropyPredictionResistanceA.8 = 7b937a68633c7e89cb5adce83acdb619
+EntropyPredictionResistanceB.8 = 949b85af9aee258e09a38297fe5077fa
+Output.8 = c296ec756f9ecb01e5504301ac16b830cd80159edbf7e132140e73ad2b0c68d6744eea9efe67921698a4d7420cccba1e489f3b3151396bc507c326a09a0c369816d68b125080805053b2d0bb65495d8d
+Entropy.9 = 3319c308b9da9f70d2f5b4ce73fccf66
+Nonce.9 = 052edf6b000ecd99
+PersonalisationString.9 = 812d129a6652e2d704fbc9115eac9f0b
+EntropyPredictionResistanceA.9 = 210d8367f7cde95d2e16ac1231cc209b
+EntropyPredictionResistanceB.9 = 9298b19d0cda18bf95b2739486c21f2b
+Output.9 = c6b65140f84633b33dd146547d02f198520efce6d3dd5d425ffbf74aecd9b7cc1f0db6d57c572b9b98f51d329976d3163c0b95303e21db40c8f9fbe58b20285f5225271ef5fc634c15312f8def900752
+Entropy.10 = fe703bb00df0043ea428ed4f3bc1f67f
+Nonce.10 = 89dcf571a9197caa
+PersonalisationString.10 = f1b6de1f5847aa40cb72d917e32d0c06
+EntropyPredictionResistanceA.10 = b6340b3362fd98576dd335a7ac525c1c
+EntropyPredictionResistanceB.10 = 2536c3b934421d776d22ddae87cb5ce1
+Output.10 = 39841fd3cec3b0909a283fc095d18816e634638d861603fe51daa549d06b82918e68b908947bd5fdbb039c8abe01ac5cfddec866a31bfb5320ef660a0dff51f1c4025761b85545141ec14655eca8ed67
+Entropy.11 = 418b2ae8ff7ec73de11b40dbebdf8327
+Nonce.11 = ba94dbbf2fa3e1a9
+PersonalisationString.11 = 1d0616883c168b17c44df10eeefe2f3a
+EntropyPredictionResistanceA.11 = 1d53116af430def3734e681ab6134263
+EntropyPredictionResistanceB.11 = b6adf9179f4a32ed7ce53e1cdae59a8f
+Output.11 = 338dfcdd5b71d4d0c423e6b30dfc510228a6a98a09aba640368bf71a4e3ac91a503c8a5c5d48d49aa840fe52b1a45c9219de9fd401cab29e4e7d9292d38c29010c17b9d381124c4eaf4fb46f727f15ca
+Entropy.12 = 2da88fc44b7d91e7fae3c35183898e3d
+Nonce.12 = 8e47f38c1ba9363d
+PersonalisationString.12 = a61c5276c2f64df3ad1e615012d96ae4
+EntropyPredictionResistanceA.12 = b798a2d387dfb81f0b3106f4514d6d38
+EntropyPredictionResistanceB.12 = 7c3a1579077c5374d52cb6aaad2555b5
+Output.12 = 49a17af1ab767e31242d0f9cf096ba0e19701888497beb1bf061adcea3b89d4b2d89077f78d72e13f719168e7865dbb6c937b370b7c26d5b0731452f761cc470267fd0d878e8377644c1cb7901df5daa
+Entropy.13 = d03eb0484087235fc3e58b4f635893aa
+Nonce.13 = f3c6305119fcf500
+PersonalisationString.13 = 34e368cbe2cde877557f54fd457bd4d1
+EntropyPredictionResistanceA.13 = 34887fc8d3482af180729480ee71e985
+EntropyPredictionResistanceB.13 = 4a59020c513b33d6ee2b29f718d4c211
+Output.13 = 3efdf4dce1a22f9db7d526b84474151b18dff98f265a3dd1ea57391963b59d0ce5222788ff738fdf3841f88dfebfc3513401a66af1971fd4faf6883d1833b78aaa7c9c0b45bd267817d9e5118e349932
+Entropy.14 = 50db55aee94159539a2d997b58bc4a2c
+Nonce.14 = b6f92ac94a862c16
+PersonalisationString.14 = 6075f94f2b4fe41d00a444535c51977a
+EntropyPredictionResistanceA.14 = 701b8e70583effd1c4e901c50966127e
+EntropyPredictionResistanceB.14 = 40e9ad701b63ee7bd6132d7f056a1f09
+Output.14 = a76b3e058ed1a8ca5860b15abe08a607894207d3d3be5bf6c3dc99c01523c85bf18927bc6d3f66cfef63a238aaef1ee87998100faabeef0d2518f3ccc0423d776a440ec9a87c5601fdf45c309c264dcd
+
+RAND = HMAC-DRBG
+Digest = SHA-1
+PredictionResistance = 1
+GenerateBits = 640
+Entropy.0 = 9e88ba357bb55be57952d818896e9e30
+Nonce.0 = 6b507f1561c4d33b
+PersonalisationString.0 = 865be5e6826a9f1bb238632d8c693d4a
+AdditionalInputA.0 = 885cd526acf852584eb16f96014034d8
+EntropyPredictionResistanceA.0 = 1c3020ff8b8d337e636111077cdd5029
+AdditionalInputB.0 = e4b0fc4ac964b259ef769376c0f05bce
+EntropyPredictionResistanceB.0 = c069c6651b7af9a39d1bcee37d6431d5
+Output.0 = 2fa78d35787052859ee5ac1e34222b1a94ecaedf6abe7c4385e32df461ff4831038cae7b0230daac387742687fbf28d78a5648f458cd3a2bf8e193efdea3e23e587aeef2b46702d3f503f761501bc144
+Entropy.1 = 041802968d12e7cc704bd3c604a9cb48
+Nonce.1 = 570edea19b38efca
+PersonalisationString.1 = 144ee1d9993200389ac410280ac7b85b
+AdditionalInputA.1 = c6768b85e4a594301ad09fb722adb1e8
+EntropyPredictionResistanceA.1 = e153eb04f4fa8cff5bcb4f43fc6febb8
+AdditionalInputB.1 = f272c4e20bf46958ba0bc2314a96f436
+EntropyPredictionResistanceB.1 = 865737bf05afaac2ae813bd8124559d3
+Output.1 = 84e11d80fb28fc94873185bcabcc5ea7da1829798f8773a7ad0bc4841fde29fc8d5ab4e8da2f06279c071e68d30288e4adfe1012f645c00d33f720e8285e4bf0c03f9a69403a9b8efda42e836c6465d2
+Entropy.2 = a26ece707ab8aa26affb4d0a041217ca
+Nonce.2 = fe34dacf75a8ef42
+PersonalisationString.2 = bca34b36ef5fd103989f4767aa4408d9
+AdditionalInputA.2 = 775916d17a73c50af4d30d32ad9b82c8
+EntropyPredictionResistanceA.2 = b6dba0eef37d3b547a2ef04c9f273ab4
+AdditionalInputB.2 = 0fe43e1374c0a9837d0aa3843a29efd5
+EntropyPredictionResistanceB.2 = 04add588cfe9ed2335965810035cb194
+Output.2 = a1ec67096b19f52364815f32298fc2c1cb8206cf04c04d3ddaa2ecba8539e8747108bcf93c4469732f794d7d99b1fb3e0396a60348bcc0fd0aa35834d530c110f44fbfcc8fe4e496b85cc97af533b5d7
+Entropy.3 = 744b64a39aedc30064a955e4e82a0535
+Nonce.3 = 7a5c4a764d1707f1
+PersonalisationString.3 = 758ce14b48de9dfbd5c2654515ae6f3c
+AdditionalInputA.3 = 93da5d0a86251ee173083d5dd8f8782a
+EntropyPredictionResistanceA.3 = c416113bb1540329f616c19b5ef4e148
+AdditionalInputB.3 = 49a791629f2ed6b31d4634bacedb826d
+EntropyPredictionResistanceB.3 = 9bec67be0d6d7793f16e030f5c681467
+Output.3 = 1b0592ac2f6d6d1f307543e24ce650440925778ee31bca354765ed8b114830ea929d28432cc2b4f13f9a19e589df99eb68d00ec6419205e2d904428d2251df9bdfb203d68f83b8ed31ba10e52e4247a1
+Entropy.4 = c1b4a953f6a452d53a0b717d0023e82e
+Nonce.4 = d78659cfc3dc9853
+PersonalisationString.4 = 05667d841810594542ef9a463e61c9a4
+AdditionalInputA.4 = 8641d0d8a22fec093a7229cf1f116276
+EntropyPredictionResistanceA.4 = 4ea02dc22386aa6f64421071afa2f818
+AdditionalInputB.4 = 2f2fe29e7410c1673ce661cb7b1128a7
+EntropyPredictionResistanceB.4 = ea2752e1dc4524f84815e6d84dae992b
+Output.4 = 2f13d9ba8a67aa26efb4d525cac2c77737db497bdc2bde90196afe2995cffd850bf17ec02027035465ec9fdaaab30274923f0a7297e45df82e2e058faddb97db5a76bcaea076b91943070a68d0870d3f
+Entropy.5 = 064f8f44328cd6af690f19c7e7edd91d
+Nonce.5 = 07814cf206ae5892
+PersonalisationString.5 = 641aefbde5626c833809836b2e426c52
+AdditionalInputA.5 = 6494696bfd4fd54cfe231c3a89b60957
+EntropyPredictionResistanceA.5 = 1d4b7608a1c654c33bc32a88cdadad11
+AdditionalInputB.5 = 07f536a783a890477c2ce2aaeaae1743
+EntropyPredictionResistanceB.5 = 1b3e11505c84014aba76b15472309be9
+Output.5 = 7c81b7327dd71e77c96a9e930c449fdd8429c5c2fc8fa476c041764165560560a7cbbf09596b9c41608f49272104b40476ab192ac48c0a4dd835ef995bd290c2416f555c2a0a2637832ebb7b6710098e
+Entropy.6 = 06330d5992dd5b2a0fe4f758ce0a9062
+Nonce.6 = c4b72be157ec6ef7
+PersonalisationString.6 = 301fff803401f6a895ce989735f38b67
+AdditionalInputA.6 = f0b43f283ff670a1a6ecba814e7fc97a
+EntropyPredictionResistanceA.6 = 2bfff299effe863e6dbbf032218cd9b5
+AdditionalInputB.6 = 82a3e1aa02bffad95eff986afad335e5
+EntropyPredictionResistanceB.6 = 594ff55c57077d7a13bac74d88554b0c
+Output.6 = 89ae364c6d8f8f8ac9378d3cc869daa491ba360654906f664e2bdadc067b73f189df34c2e7e14aae3d9f1006feb9e3ba9b83af0b2184ddc5b4e7a72f19c78cd71ff5c58066b1c4e1227ff2f8225759cb
+Entropy.7 = f0381e617ed56a50e8fde4ffae54a249
+Nonce.7 = fe2191eea92c3ab4
+PersonalisationString.7 = 33d8a007de91d9a16d95517a66be6ba3
+AdditionalInputA.7 = 514a26848cdde5764a0f6f9e0738c824
+EntropyPredictionResistanceA.7 = e46fd85eb6ba95a2eb64fef5e4bf4b11
+AdditionalInputB.7 = 816806ef6dbc4e4496aefaffda3dbf58
+EntropyPredictionResistanceB.7 = b0be4626c5ea1520a08a8e15a3e87711
+Output.7 = ec64f475516805a80e833e67e8dfacf04556e4347f34e1a4ec3d6868a521f8d79cbe9a4d97c6bc7c4efe4b595f9cc2af5ac18621f6ac273ff135505b82b689aaa6c9e85dbba966ea3b9f7762e32f6f81
+Entropy.8 = 6e83b32bced092612fecc8c57d370deb
+Nonce.8 = f38858de3dbc9945
+PersonalisationString.8 = a4ae994d7505ff6db4d084b6c06d7560
+AdditionalInputA.8 = 04f728b57cb1d7e866881fd71cec2991
+EntropyPredictionResistanceA.8 = 0101d5e613d128b4ce6dcdbac0c6e7e5
+AdditionalInputB.8 = 079048e4343e8588862ee34616da0097
+EntropyPredictionResistanceB.8 = 0f6f1cc89403a150ccc9983eb5d04f69
+Output.8 = a0be9bfb61a8eab9cd836e7d1337e94d02aacd2ccae2340bb63f89c2eeefa1902f294d65f6979fb95e5a23268feafbe162b2e7a7f25e328b4e1f441a047a613769c43acadf382e3cd9eb95ffb9c5575a
+Entropy.9 = fd3adbc1821296d1c27117d22202d0a9
+Nonce.9 = b22dc82ca28c082f
+PersonalisationString.9 = f7b4d6708fdaabd8c1e05f22f1e99729
+AdditionalInputA.9 = 5ba179c8b4771823edee1b7045c6a736
+EntropyPredictionResistanceA.9 = 29bcd2b6364edd2d68e7c1ecafba576c
+AdditionalInputB.9 = b82f2fa1e12c5ca22cf5128f6d440532
+EntropyPredictionResistanceB.9 = 746d7c1a212636306ef00c03355d93fd
+Output.9 = af030814f78ce95bf93e682509f093d3ab9bb83a4ec76d787ee654de830817053b8b54ccb9e6d94d346faa1323e52d82381ef76b98b621fffebce39fa8ac0ef8c7587a1326caeb49bffdaa9241fe297d
+Entropy.10 = 02c3bafad78f92a771e21eecc50d83cb
+Nonce.10 = a5bb9ce2a2e940af
+PersonalisationString.10 = 46124c96eca72f5d20ae7cce8287fc42
+AdditionalInputA.10 = a18958ff3304e86d063c6ff1d9558b49
+EntropyPredictionResistanceA.10 = e9a111f8c1f151e836b2cbee9abd8bc5
+AdditionalInputB.10 = 10fc0fc2b9e9f63de9c1596e38e2e6b3
+EntropyPredictionResistanceB.10 = 9e2a49a0544c3995a7ee6c229a9094ca
+Output.10 = ff92acd5c78c1f30bdcedabe501cd5d369cf671eb8967ab79d5788b0b605ef08dd3ecd0a50ca2616a3f8ab9421cf8c2bf1f5d6486e8caca2e70f3abc300d37e5c26a6ac1c58bfb05924c2da078bbcf9a
+Entropy.11 = 0e37b2ba24b1519a04cd5316ce199c33
+Nonce.11 = b5040a998100085f
+PersonalisationString.11 = 2cf15f9c7f91165468a3ce3a4f7fad63
+AdditionalInputA.11 = 234a96884cc0ace6193aca62966ab8e7
+EntropyPredictionResistanceA.11 = 4017c933ea087a179c76efaff90ae3c7
+AdditionalInputB.11 = ac5b88d5fff2cfa29352be2b340f9e68
+EntropyPredictionResistanceB.11 = cf031728fd63914df71384f678ddb201
+Output.11 = 89b50c0956d4f3ee8613669d7072de303866aeee5fb84565378b9463904a0153dd88f5ffa0a5d5edf17becec1ae626a047f76e083f2fab928eb4f32ad365db1d23d7a79aa096fa9480ef90c464dc7612
+Entropy.12 = ff5d4914494bb54d3d763d709468d820
+Nonce.12 = a17e3f73194a0dfb
+PersonalisationString.12 = 1a89e7ce6e3bb88909e6e9a7aa135906
+AdditionalInputA.12 = b50894224c79121793d8961d59107cf0
+EntropyPredictionResistanceA.12 = 7d385ae20a3e5ceb0f9ac7e7b280aa19
+AdditionalInputB.12 = c2dbd166542e2294c182b62560ff660c
+EntropyPredictionResistanceB.12 = 15ea90ca9d440bb0686d447ed8e3f07d
+Output.12 = 7420312d399b6d46d0073418c0ac08751b3aab08c4e7b94e21cdd6c2c31ab3ad1b89e511db35f829d2c660a523b5e1b428297e707859c16b8eebb5cb3cf0653e4b4c4cb6318995ecf4c4d8908d2607bf
+Entropy.13 = 51c0efcf6db84e82ad55f4404e077b78
+Nonce.13 = e398e0a4d02718c8
+PersonalisationString.13 = d8f8b6a293e8d262a28b04a51351f3eb
+AdditionalInputA.13 = 66756011af31f76a9bbc8e9b282c852f
+EntropyPredictionResistanceA.13 = b4554fd50bf2fb6627c346621cbe704f
+AdditionalInputB.13 = 79613d6b8a7ee191289b6b1f8d6a7dfb
+EntropyPredictionResistanceB.13 = 162ed67dd8efbfb0038b72d46a459aa6
+Output.13 = 08f45c38465232c6c6c613d980b9306dc86168d4220fa6bef884d5e9fa45f9b697bbc1258da6ee09716635c302e182c8c2f8493f32a7dd517efee93e5c8c9f869be84f619e7d0878d73af39e7f775160
+Entropy.14 = 718fa9825e7308a018efc45ef8ad0585
+Nonce.14 = d77db539eb6cb9c5
+PersonalisationString.14 = 631467e3abc1c3a4d630d56216f82814
+AdditionalInputA.14 = 1812b28fcdf97334d61ec389188b5357
+EntropyPredictionResistanceA.14 = 0459da76837f914668f651eab33e69d5
+AdditionalInputB.14 = a0ee5a3a9a8c5eccb62b9e7ed45d04d8
+EntropyPredictionResistanceB.14 = c588bc21bfe29ac749639bcce28f17fb
+Output.14 = b519ee28f38bcc0305ac49eeaaf9f27eb6af797ac95e13431d1f5611e89930bb2c362a9abbf4fb8d89605e5db756fadaea2f36e953751006361b94f89c893e2505b77e41ba27eb9d56d9124111e7c12d
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = f3a709bb47a36838cb998fb6986ff074c57932a669670570
+Nonce.0 = ff6cd1b202ee1da014a011f4
+EntropyPredictionResistanceA.0 = 3fc02c51ffcb4048cc060763f2c58de2edd494275da14118
+EntropyPredictionResistanceB.0 = c9cb7fd50475c66cc7e792406213a7d00cf7623d931a5947
+Output.0 = bbe3daefa61fe302bdaa6d4d379680acfd0d456b5d35f137c145b72626f2fcf39fdf7f3708d9e88c1710408a3d7ece3b0261ff538846fd5452149960215c0c22beafe6cd24a7c392d5845774b87528912c322119a2adf4d35a0ba61dd36ffc8a7e7475afec58ad4a8cf343afb677f087
+Entropy.1 = 0f508c6330b9673e94861ae2057e200ae8f2b330b74634d7
+Nonce.1 = 9fe8a4c698211080db07e58b
+EntropyPredictionResistanceA.1 = 762a2387379f0c0e2d01b2ca40ef82fec35eb81a5493ccef
+EntropyPredictionResistanceB.1 = 709dbaa0b0e4494e460530062c8db7446bc6af2d852fd875
+Output.1 = 583367bde003eb2061cdb6f51db9c6827cbcefbff0497ba823e112edbf7f2066fcffa3e92d1e8c531007783554e6aa8a633bc925690ca6d579fbedbf9cc4d6cb08133d0cf8d4c25fcd3b6fed95f00b1bb17477cf67b97a557e7da933bdc121481755f628fdf0f0b1189a097c7147169e
+Entropy.2 = 9082871e73b098bbc58f324f12f6a83c321360c9f5b400d0
+Nonce.2 = 0a9bb865ef5265083d930965
+EntropyPredictionResistanceA.2 = 7c40ac94b579995902df0e2084eb4a6410cac605e482ea4a
+EntropyPredictionResistanceB.2 = be5c8eb73bc63f68baaeaa56d47f7d74974d940555fd3861
+Output.2 = 67c2fd4397af79297782af9baad2a26b993efa48c689a74531417ae102d4ea1d6a82cb0321aee3dc2572ad27299e81a7a77f1cf837119e746988f2ec60bb01eb2ac3d110a948c1c33e86833757e2670cc3947658f3b2d32ac59242f152e889d03d03056f0a265ee759d3a4488b55c63a
+Entropy.3 = 4701f34326930cf93deaeb3a9c196e307a890c8ccf44a55f
+Nonce.3 = 84593b3388a196238fdd97d2
+EntropyPredictionResistanceA.3 = 01998ec734821998e7d6bef7b31fa2a81343918056c01d65
+EntropyPredictionResistanceB.3 = f519c8576e4120a3d6b9ce28ccf57eeabd012d2c14e47045
+Output.3 = b499b86b0a25a0fc84a9a1b902972e2bb5aaf9b84f13804d6180491285b9316218cde0e73eacf722b5c664f4e618625ed35c5facbfca153cc184309754ecaad9c3678ce51ade96dfe3290e125d661e2afbdadfa73240c24939bc31d171712c7c987bfb434f1db6ed44b321bcd237f149
+Entropy.4 = a912b6755cd2d677d63268a5203739b0785d7d956738a596
+Nonce.4 = e269128a583921aacbba1adb
+EntropyPredictionResistanceA.4 = 7c6d1714c164143c8f44e76711965514651680235068476a
+EntropyPredictionResistanceB.4 = b137d5962e5e5872f3b899d0e9ca5ae8fe71bdcfaef1d241
+Output.4 = 0f410304b6d88e52c8d6039ca674a06c49a5fa1094cf341c4034e39990236d9e5bb8ebb6e59849e7df82e2d02981d8df21e4ba3381e606b99c16de62860a470109c0123c69ebaf970603f451f9e6acf83e1c5951c3cb87170ef319d9a791110aea0c0dae5623c287d4c454ec93227654
+Entropy.5 = 54fb376707de02a1c385a3da78523485111a0a099066206f
+Nonce.5 = 210ad848f29d3c270d2fd2f6
+EntropyPredictionResistanceA.5 = 68cdd3a57cabed71f9d784c209259d1e4a3eee2046846a55
+EntropyPredictionResistanceB.5 = a46965e495eb29725a86bd630dc43cd60ddb4fc93c59980d
+Output.5 = a2e3ab5390b5b79786ec7b434de48e45f590b85513106008479d8a3b7b236c884b0f871d8dee539c712509bd70de351f3881cd87c9cf77c1a9d8879986ff0f6678549c5c6acd15aeb6bbe653a9bc76829df2f194c5f6e8c7dd3058971ce15273a2d559c1ac60a0014e5e32352d6be2a1
+Entropy.6 = 3a0c24b5a6106d28c02957538e76e96b3ececfa80ba4c7d0
+Nonce.6 = 1fe642a88fc822884cc36ac2
+EntropyPredictionResistanceA.6 = 703e8952ee635948715f78c542e6e3270f2757f1652474df
+EntropyPredictionResistanceB.6 = 4706490b18e649ffd95dc518a8b4259da193600af5d5bde1
+Output.6 = 55dc24206aa59d34ea990ac6b31250f15ac056c8ecd52e159f3464c38e1f28840eec4c6423b0fd9971d11c5ab99225eda5d173c08f9439bb56eb1cc487fdaea934fa816f9c9e0d628f111cbe60a647e03892084f80775248d41cb587617671d99b508644476b66c1c96979e5061e025a
+Entropy.7 = ae7ff70bb69c964f05c99c0e7868210d567bcb5eb02db770
+Nonce.7 = 8de162e6bbfd91fa17f30656
+EntropyPredictionResistanceA.7 = 420dad1ca69d356cbab80456cef922a9206f07d32c3f198c
+EntropyPredictionResistanceB.7 = 1a68e673c5583674bb1df1f2a69c554fdd3411c81a90c83f
+Output.7 = f1f3f79b1d7f988d4caf7308416f3d02371cc029a28eb4f0247c8625c4680a2dcbe9f3d56d92de6ee4d4031a254bda8a657bc147fb90c2f7783a8e3749b60633e5a921d015b846b3cb38830bc7554308af08ee8219e5acd1b699f1ac538930d257da4ef567ca570a7951bfb236d4d36b
+Entropy.8 = 86704ad0286f88dbc60baebc2ed0571de7b5ab64bc8554ba
+Nonce.8 = 8645557fa10159ec03cc9f6f
+EntropyPredictionResistanceA.8 = 299c1c3011c73b2563e571fc24f5b5b50b4bee514d7c8088
+EntropyPredictionResistanceB.8 = 73ca804b147201ba7ed43430d89b066c04b00b0a17694523
+Output.8 = 6b1a26d7d21308d217bc8988067ef3e21f5bc10d34e89937f2a89f8da256acef50b6ea7d9ea877bc1d15002b1766e9bc7fea3d681b147e42359ce29d6d4f8c73e7c29b9ec14277fce2f6a0c518d24aeada44990f7f92b0d1184ff96b20c76d506f6f9d963391abec5bc247a2ac6b24c7
+Entropy.9 = d0b30341b4fd48281f76a83d7de5769d05d5cb9e565b213c
+Nonce.9 = 8e2bc8d4adcbae90107fc12f
+EntropyPredictionResistanceA.9 = c1ed2a19f20beb563de8f05bc5c437637148154a12b1606b
+EntropyPredictionResistanceB.9 = ff071dbb366458b74a07a1c14114fab487772d436d4ce159
+Output.9 = fe2a7ced1965f013d475724eaa7d31b62740be411d899afa79f9fa6e73f18ebe0907f2f21388b6498cd365798f27f882a2c5c2744a9b25e8d351e77b9fa4471ceb1dd6c72fdef75977e4e4a246e24f56a615189e1b2a8d6782e8c5062b744a65ebe1f7c5fbcab333fdc155bfee300503
+Entropy.10 = 4a1a697e41537f28b381e05f11ebc905bd66c2c1d905d8c0
+Nonce.10 = b78c10c26cdf547a1b6f85ff
+EntropyPredictionResistanceA.10 = 58f48298a11bba41e3ec015d41a24d9e335e6e13b06b84b9
+EntropyPredictionResistanceB.10 = f56b3e803bac569dae2d74c444bb58b3a6344bfbb9eee765
+Output.10 = 15060b2bc827dbeefa2170ade633b0f0075a4b9b03fc24f73522174be4e4b08b93b421fa98c7c5a445c3aafed47a2eeeed63f19ef4f67e7726d8ff84bd94daa3338e397d52abea4c7d1191e30f3e8a11864f10ff56b2dbefd860655d34cf63ea22bbb54dfd0c5f64284c303a2ba2f49e
+Entropy.11 = e80b8c8896557d596e192c3226347c336dae455b50bf32a7
+Nonce.11 = 8c61b9a98c949096be51538e
+EntropyPredictionResistanceA.11 = 293d338a464eae0eb18f1ab21f9903d07a8b98ea2ad7f41f
+EntropyPredictionResistanceB.11 = e7ffdc4b4bd0fd06138a84dc5217cc8fe39b92f9558aa619
+Output.11 = 55574491d07db3aff94dcb71f519cffe2f96ef57219262860c3c03f9a5b8a1eb88869e69587f8bc0693c9919bb277dc84fa55187c0dbb20101f0c4e301dcd2fe21664e5a2f0dda3eb4f11df3878c5becddbfc3ca032a17f740d424b99be0a9bedfd99907229ecccbf459f5495533560e
+Entropy.12 = 5c25f02bef1f1319cb6868d836c9cbc182fd8d86ecd87bc5
+Nonce.12 = cba41c163710074e80d1a30d
+EntropyPredictionResistanceA.12 = dfd0f5d88c6682292cd50c68966d15e6ff95e117d342d974
+EntropyPredictionResistanceB.12 = ff074ee872719d15745da624f8503a6141b0ac4b887ead5f
+Output.12 = 9c5204d5471c25203f1d9786d38f71081a872f1c56604dc7570caa5439f17cddb7feff01cadaac8e0f35e7a5433cbbcd2dd4f11cc7dd14f6af629fd72a3145db6924d2bdefc262662367b7258cff36172263460f4dd52dd08faed3460bbffe18eb10ff5b3c6a97faddf65b3e21ecc98c
+Entropy.13 = 68b4e1ddfd16a1c1ecb0f4221306e77ad02b07993457eace
+Nonce.13 = 086f66566afc5f12489633c6
+EntropyPredictionResistanceA.13 = 05d11d53916eee96ed778d6d6518c5681f0fa9b0160da1c7
+EntropyPredictionResistanceB.13 = 1740a94ab33310bc20a18710015af25d3d667c40dc619f34
+Output.13 = 5c4c9b3276d546d3b6277a3a2089d4969146d833e0ace3e1ddbd9f79fa2158531f8bb26a28b08dc64bb1e610f13eb14c9fb23559dc2f38326e145ab509b9f69259a0d1a32f471d5abf154a2585288063845f99306f9bb875ccb0d32e9d49b42900257ebaa532e8ec223aea60abc9714d
+Entropy.14 = d5ee5e2e629ea17487e593914012575daa8baf2d0e9671e1
+Nonce.14 = b8aad16524dbdf7d04c11130
+EntropyPredictionResistanceA.14 = cdc10e50c630ccb235579a72b6eb4502fe146aabdab62a08
+EntropyPredictionResistanceB.14 = 5c820ea46bb9091054d75a892a83c3850da0a31c15e0d021
+Output.14 = e32c0798b2040620fbc5d2a44ec7fa8038444c1910fd4a24312c8c8eadb57a78606449cf05ac51a3bc4d58ce78742c1be3a0fab6e3f5ebc92b82b5d5d64ce29e8c2787ace0f4e718a7f6cb669a0a43ba1aee0d9aef55cb7c6f5dff57c8acfe883ffd8a496d44afe06803e4c9ff62df04
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 6e531842b9b7fe2c0ee66899a1255135f784a2d5259c93ab
+Nonce.0 = 3d63a5cb708e2e6cba955897
+AdditionalInputA.0 = e628db057250fbc6fc5aba01b6c8b47062ec5632a8566730
+EntropyPredictionResistanceA.0 = d9b66c7fab274aa388a5db69713c86faa4a19709e9aab046
+AdditionalInputB.0 = bd12e61e3d5218efb0c103dc49402800cfb863ec8925e76a
+EntropyPredictionResistanceB.0 = 38c670ffaa83806abf79a43e613e62cccafc637e1a1c0c14
+Output.0 = 037650ddf66ed42ea38cf44aaa94884effc5f831c593fb35886b5d601a58f74f868d89f2dba450b9c160e28f69fd24e30fb7a44189810e29afd0d11762d3ef07b4527f4134d6c53bdc9b024cebb6b40fbacd68b6acd4bb4d011d6705ce22f90d910ac4017d2426db7a48db3242161aa8
+Entropy.1 = 3fadabd2d8879bd2298f53c54b573db2584655e08a83289c
+Nonce.1 = b58a4ff5170fdc30d71bb24e
+AdditionalInputA.1 = 742f7022892c2123e62379e9367787302fd18dc3835de0bd
+EntropyPredictionResistanceA.1 = fbb5a50def315dc69146111462e204289a64ce72767499f2
+AdditionalInputB.1 = b60325136fde7c858054983a977262b6390a48419725febe
+EntropyPredictionResistanceB.1 = 99c74c934f0007ddb34bf5183bc1e5afd8c15eebdebba882
+Output.1 = 3bfa419f9bad259b871703681284c5396fa94a323d646ddbf5339398c4d8314a999c230894ac60bf231762acada672f58154a86f80a8c4e3bbc67132e22ef50c0377193cb0d13c7e2c97cb24ce5bb69c73be2e5cd3a07ca2b000b2d7eea940053156bf55d846181e3748a91c342e191f
+Entropy.2 = 0784a499424dd1c2c13f765e9ed88d752fefa83cec61154f
+Nonce.2 = 82b3fd645f642ff103db9c8d
+AdditionalInputA.2 = 9f853db57c3da0421914d2f71f9317817580c1de4ca43d50
+EntropyPredictionResistanceA.2 = 1c10b5979c56a22d58324669d4ace3994927222fa87fd049
+AdditionalInputB.2 = 27071ad475b8541c1a80234bb2d110637fcf4b4e20e06a7a
+EntropyPredictionResistanceB.2 = 558a48adcbd6ad5a2380d2d927be57fffaae037bf8a34384
+Output.2 = 2c879a03bd719595211b526101fe85702161711c67a81184cc42c1f9da5761e853ff4b8d19deb95a2f3323d1cd58a2e066c66e7a30059732eba43a4bf3b22fffa5bea5161fd775160dc53d7cbb4c892bc122e4e0139f8f550219cf6fbccf55d16d8a4d8d7776aa143c00d9e7bd1c847a
+Entropy.3 = addb36bc9ad134c7b8fa54881db1b18e040de4f253be28ef
+Nonce.3 = bd36b12bfcf4721b08c5833e
+AdditionalInputA.3 = e32540418ef68c3dcca1e7a0546e5dc7d4c5e92019b8cb0f
+EntropyPredictionResistanceA.3 = b0a97c668c7adbc7f04a9e0299549126172e25b9e624282c
+AdditionalInputB.3 = 327e31a0619305c93e9b5eef87102d447d21e21e2d8c1cc2
+EntropyPredictionResistanceB.3 = 8e63eccf358c0ef1a71f8fd0a8fc49451db7757eae344e48
+Output.3 = 178bee4059af0282854c833e11e7bba923a1e2f1126fe8cd7e1694602c180802d67b845a88ff786147f22a74e6ffb0f8b86d352cec2714ff8f308b1f9705603faf5b04bea3c75c87c91d5e6cf7583b5c45eb5f5a74d2bac490c8415d2fe07726bc334c88e3fb7284058b006f82e89ae7
+Entropy.4 = 412431badcf06f87551ec63c3860baf4b59667cb4753363d
+Nonce.4 = 0f82fe7c968ea6f8bc5d0154
+AdditionalInputA.4 = d67f94a953e7e4e4bc0cbd517f963e599d68851cc333644a
+EntropyPredictionResistanceA.4 = 18adeae206005725dd9693af6f7060a2d5ba53f66dd49dc1
+AdditionalInputB.4 = 385281961ecf2d8175c0a718347d2132f059964c55f39f57
+EntropyPredictionResistanceB.4 = 48de581737b67acd4bb70ff2f4cf20abc001ae1eb50cb75f
+Output.4 = 357876e78a69cd4bc4e06b2c52ad28434520d54a4a310ee0eb026b87993514ba1442e25eb1ae22a3ce98529625d8db9b0e5b680d7e027523b0ba0184d3f2e4b9cdee027960ac1612295bcdbf570912ed05108541b97e3bb30ae0a122d74cb536e5db34b7d5ee5a042897d5d29fa3c126
+Entropy.5 = ae914c3d74acb6e2d9b8487927db7992b838ede73dc918b6
+Nonce.5 = 0bcc94f0f456f454a6d100c9
+AdditionalInputA.5 = 2afb537c13fee9c4103cc6abb11225046d94df2e9838f73f
+EntropyPredictionResistanceA.5 = 0e119342154bc3ddb059f48db3a8d7b7288eb42d0ceb0753
+AdditionalInputB.5 = 6a9f670cb49cd9ad98a17cc19d00d4766344108f0c86804b
+EntropyPredictionResistanceB.5 = 2a2a357d20506ead28d9bd4a127d437a657a61f5d30b04cf
+Output.5 = 2ed0c4140420c6e3798a13f917cd998b2ce6f98bac27f0fdb09e2538f573caff16904edb371f98f50964b7de552e997007fcd267b36abed12cd95d9a08852a4ca862872edd32c707e7a60e11fe0a7db4c0d34f4c70ff16e5c75e6f5d7ffaec3be383b8790ef0ff3a0d9f79850c9749c0
+Entropy.6 = 38a93c3ede148c91eb7f0cd327cbe8b27ff0e569bc5262aa
+Nonce.6 = f30b86d31be35f83b4ff50b8
+AdditionalInputA.6 = e12c05f2bf463d24da9abe89301d2acefb7957dc1bab9ef8
+EntropyPredictionResistanceA.6 = 4b5dfd649908d0c55cd5be7ad36d4f5f7f22cce066d3b589
+AdditionalInputB.6 = d70065fa713e2d691bf554a00d063222755e7204a3e53968
+EntropyPredictionResistanceB.6 = adef804bfaf52253a0e4c6bb03e000d649541e523ae52f1d
+Output.6 = 3e5ad7e96c8cee899889640d8268cbea296aee96fca7bb60308bcdc08eed36bdc8a5b3126ed8be900577e60ec0f8b3d3014deec41ac650480e08dd3a425843b37fa5d1d621b5053ba4b2fc1804d407849a84e9eb5bfcf94f27c2a535e2756b8202ede1f18e81f65e3f7f51a064b401a4
+Entropy.7 = 384d6f43e7d77a381bc6bfbfbfe1a17aa35525bef01be8aa
+Nonce.7 = f6c488c46517d9b94380c73d
+AdditionalInputA.7 = a0271fd2552e037568cc857a60a550db050680fc03904fce
+EntropyPredictionResistanceA.7 = 3fb45a4f1b4d70375021c7df78eadb61df5d9efc6e08fe2d
+AdditionalInputB.7 = ec095cc9e3bc301071a901d0289b54aefc796bffad6fda8e
+EntropyPredictionResistanceB.7 = 81ffa65df33667c23e3cc5c89893988f04be1d3634ced443
+Output.7 = aca2571a9cf6bcd10429e146e6e94d1ae43a00db28bee2b60eb6a1bc1cde3d452dd6e04617aae7a3f813feaddc0f8fd25890004607f45ec995df970e1a3abb17b416bdbf62b6ba5625a80cb100e2b87260a73ffe15d9e6f24abfe9e6f9ba66bdfbfe71380d832418e2a4b460dd7415f4
+Entropy.8 = 98c8df867d234553e504fcdf807fb8bba51d23ac65dd8b16
+Nonce.8 = 0943bd45181764cf6df0049c
+AdditionalInputA.8 = 3338baea79c06f0d48ec2d47004e61c1c1e5056bf8bbecd3
+EntropyPredictionResistanceA.8 = ad23e6aca490db57d12dc6c631604c943f153927d6d04af0
+AdditionalInputB.8 = 79007bfce109a682b746df074e87c845eebd665532867fa2
+EntropyPredictionResistanceB.8 = 42e1da1b225eb8bdf4ee99dd405e3586acf8e44bb0184d68
+Output.8 = ba7040193e38c4495971827fb1ddb747ea80cd0bb1fd6aaabf85ec1959c29eba8f818ef55aadadc8c34b6a7c00f210a899092b9704f2e03abf3e5e8fe6d127cac0436441d0a6f1b02a00e5fe948539c66a8c78e70f35cfeb600e1cc68c06553f47ca053b64a0534a028a73d0890034fe
+Entropy.9 = 6150b7280b3105b86b66c2a39a1f0461cfbce17e746791af
+Nonce.9 = b241b298741454e174650ab1
+AdditionalInputA.9 = 6ece8aa447d2cf51d8497e303c1a202e39e06bd723c847b7
+EntropyPredictionResistanceA.9 = e7f08500bd7eb096e40d8114e5a60668636b6ff66d262215
+AdditionalInputB.9 = 21d890666d2c8ce4440bb453f4284c3928650f8cf38576d7
+EntropyPredictionResistanceB.9 = 4b7d239eaefc9ab2aa3351eda2af4fe51de36e22e70235fb
+Output.9 = 7554b8cc8e79330ae55575f9157cd10d8eeb58af30eeebe9daa021f4b55ce365fbdf3629be7547a89c78bb9df79d35179e5d2924aa032e60d5a00281f19ee2255c17a69345ed86bf36ecfd694be0405c8b6c077b43a8c8bbea603ddc632a1aea6771a6bc117dbdc365e2714bdaa8b377
+Entropy.10 = cb25eef7230ac2da249fe30ea94d3a3332147022bb2207aa
+Nonce.10 = b4a50822b1564c24a047ebb4
+AdditionalInputA.10 = 2f30b005ea5d5965439bf15220b1c010e6c79306e700e6fe
+EntropyPredictionResistanceA.10 = 6d57f45f6680f909629b43129876c75381e3b7c6d06887f6
+AdditionalInputB.10 = 9937bf3edb3603cbbe190f3616b021fad652011854e6f6d0
+EntropyPredictionResistanceB.10 = 8083fc423f06ecba159a90edd394cc0ca9473e9cd0f23c89
+Output.10 = 040a30b82981f71e4607c20c1f2d6e6854824c90b127517f65b6c7da99fd33dee32dc52bd0dbe902509c50492a88e5963b2b6e27d046334b356e5909f85763af2de70e93a89d6a00e2ef81ddd74f4a33d3f8406d05b383fda569a5a574fb5e3c0c86a5096e94174b79b2a4eadebccc2c
+Entropy.11 = 1d7dbe4e83913bad3fa918262ab0f45cdb9e4e61667694f3
+Nonce.11 = 61ddecace06bf352b18dfab4
+AdditionalInputA.11 = f9c51ff8f264cae722734502f6799e4fc5bee773d31e3e31
+EntropyPredictionResistanceA.11 = c32bff9a013d3b92a2da8ed698168155ddc492f8ad5d65cd
+AdditionalInputB.11 = 6a171a0a8801017a1d924f80fc5d9d6592b8b28a342f30de
+EntropyPredictionResistanceB.11 = a8eed212793cd9aec8acde7e00f952bb5d00c53c5c181e89
+Output.11 = 425024bd1d1a66d4527a3e8a8307b3206923bc1d693f5b7f9017f0d5527cd6591016758794ac89e2f682cb2d66f8d28f9a2f5ae2974a75f4d0de17dcd02e93bf29c69175fceba262378bafbe3eb7e3dabe974889306d0a2ebd0ad9d934c37b1ad89ac1fc28493e6b1f6f24620e40eaf7
+Entropy.12 = a6887fe41ed5a615eb030b31b86315d32d13dd5ad506566e
+Nonce.12 = a23ea3b162b8dd621129736c
+AdditionalInputA.12 = a52036daa8172111e89c8991ca818bdd711095a1602f2f15
+EntropyPredictionResistanceA.12 = 8dde31708a7fa4a4c606dc212b3440617111e94a5c6722c3
+AdditionalInputB.12 = cba427a2b7bb64002e1da3159d643e002516bed279e0d442
+EntropyPredictionResistanceB.12 = a729d84d2e5858c23ba8bb249456a11d63dba9d4260a7213
+Output.12 = cf0f5881032606c21a8ea20adba6a72e176e968f10b08ab6d08f997b24fc2a24f2c5d44d1b99deb7db4f388dc8ac268f966a34c857cc5f43efc601674bc548ffeaee1c13415df6d0240835832cb75840b60711cb636f509dd9b87b698615959688e9afeffa50671ada05faa564c87ad5
+Entropy.13 = a563459889ca29b711086adfbf18f284fdd18601ff69916a
+Nonce.13 = f1ce47510d33f205d4dcd008
+AdditionalInputA.13 = 5fc83f1f6dc0ad454bbacf2df366c803cc1d2fd46bf78d32
+EntropyPredictionResistanceA.13 = 0f9dfedb2bc1e2e60fa0b9cae094102bc7a705cc223279e0
+AdditionalInputB.13 = 1a9654667cfd6ad0aad9383be04ec1480a494262b3fee823
+EntropyPredictionResistanceB.13 = fc3b0020b4facafc2b31b9bca92382f3810d5a4e3ef626a9
+Output.13 = cb45ce96a973728bdade51f91004ac09e155173769063b3fb4712493d8877f088127a3492588e99fef648a101cf1c238fdefd798dd4928b5bb3a851eed693f37d67360a28a2b27c4406e9ddefdffba662529b91a980bbe4eb381cf9734b336e2b64e7482e0328c2e2bf81e39edc30d97
+Entropy.14 = 886d098731abf3140d512e0d348a384d25372667fe7e4f0c
+Nonce.14 = e713b1d2eca7b2ad939b25af
+AdditionalInputA.14 = a4f42d83a492db3fc053d1275c6f264706fa932955c3da62
+EntropyPredictionResistanceA.14 = 03f78edad75bf0ab95b4110710d0e12e714e03f7df35db59
+AdditionalInputB.14 = 4505c0664e59bb4388020470838bb098c4ae1338c268adf2
+EntropyPredictionResistanceB.14 = fc4ef2906cf36c6c8897b802200a83e60d16f7fb064abd2a
+Output.14 = 4f9c3c60ee32042735cc539b9a23d04c2bc6bcd68db04a58240305f165bccebbb98e0f4796b283a0d78bdaccfcc8daf19f21a72945be07996bbb0b606643c7753f76ee6371292d3e681468b714e16bc32db14ad6d777677137ebd3731186ea72b840b8c4ae79ecb2c61352ea056d2d6a
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = a26af93571ba84b58e14e921a6bada73083ec17f21580a15
+Nonce.0 = 2703e1741392fc9ce6046f77
+PersonalisationString.0 = 0627d10b1e5b4f0fff96d0c7e684deb9fb6a4e48959dbc29
+EntropyPredictionResistanceA.0 = d6eda5000f3225ef28425e30cec138a16b0ebd885fef074c
+EntropyPredictionResistanceB.0 = 6da2a7b126fcd1f056e3a5fd5627368c63681cc10fbf750b
+Output.0 = 98d6bc7ec7cd72da4c750d9173518a9a17120fe9af10cd1a7d872fac505d9276c551b821a868cb8b4d8b10eb3b05845827717d2975814b5080a2f4aa50c5b112bd01b8652f2d1b56a88c6c891db5f3f40d1d1f0648d84e6ce2138c2c879884eb4847856198579eac759a065a5d384c46
+Entropy.1 = 5fd08930ba404d13a7275227660869e7eff10e103548e6ea
+Nonce.1 = 15f0816ea93b649f6aba408a
+PersonalisationString.1 = 7a463958302109d5fb9fef1a232b5aea13ba58a60b70911c
+EntropyPredictionResistanceA.1 = c710c49eaddea0b4d1e219577e6f6ba4f193386228f6fdf9
+EntropyPredictionResistanceB.1 = cdcc50d5bdcf6d1f249e9cae0a097bb341e2ba3581a3f2ca
+Output.1 = a1a5c9d90f9340c807efa2068c6a0b872a4ad51a7cf90e14b4797dd894361712fc9507bd61d8ba984ecf1345fa3cbcf3031e2bc4302354cdf3f615c3a1bf43f60a464698e250726c37a7a9a23e1ff7e8d96df03957e3a0b5e6c4c4fdbdcff487e467b12dbc21e07eb8a7c4cd7f779912
+Entropy.2 = 625d6a509ec43c55bbec45b4244fa0bce24c74cc270851f2
+Nonce.2 = d32e4bb4f1961476af40088b
+PersonalisationString.2 = bcfa259c919f6e56c77914a272959cda6d2cafeaff87d91b
+EntropyPredictionResistanceA.2 = 5ea81f7a86efba78abdfb50be09e1a68851899e0e9acd95f
+EntropyPredictionResistanceB.2 = 77f16e8b0aea5a9bf29bc1a18d32158cf69c794f3f47fe61
+Output.2 = b5bc1f03099547ce1a359bede1f9f3b76b38e8b9cc781fb3909899144f4d0a4ba93272552bfb0ddcda51165d0ca3eae47d10961a62692bd9edf2a9339c8ad14469f1834eee3c3fc1074cb1493054f84273e4adc73e5eec6cba284c5b7fd8005f10cb67b0fe16ae0b4ff30d50ca245c5d
+Entropy.3 = bc0c83de31217ff6b22c719de8c6653fcbd8aff7925f0462
+Nonce.3 = 4c76f586ed3bab324b64fa8a
+PersonalisationString.3 = d7ef6b5dd09c08437313871078ac730c2f85a5abae6d6e24
+EntropyPredictionResistanceA.3 = 1ec14efa8d8d0b41eb6735d517f6c647ef8bedf3036a6ca9
+EntropyPredictionResistanceB.3 = 0fa1d2c528722de33f76f7375711b6b4127b86fe096e72cd
+Output.3 = 6d415afc0151c3cb426eb3b90c209feb726c01e28785678bb0b8d9143d4b7f31ae07e384816072e2df31350b133a8f4e3ee18f04b154d194513d9b072a695e52bf03eeb4c9a1df85dd6ef98d2453dc39390bc3a17f3ce499d9b182c89d0591dc3dbdb7aecb626b07f0ad2737bf8200b2
+Entropy.4 = caca2b8631502fbd8bec33e89066e77b97a57b09d21a92dc
+Nonce.4 = c7b65897e50d7a312f287932
+PersonalisationString.4 = 33691da7461d3355659c4ca927b4d3e3bbfd8e775b535538
+EntropyPredictionResistanceA.4 = c529f6a6fd8be6fad5c467f6c15f9bc0f39653a6e4963c0d
+EntropyPredictionResistanceB.4 = 4c4baa9d6ad39f4ad2a1d6587377ec3898e63e02cc0c454f
+Output.4 = 89abe8e656667299705c4c8b208f0fc400897397d15aa3574cf86c0a6415dd30ac5d7d8bc629d8ba52e6e5af63818475874266e98a43ab5d3085d2856950e8d487ea22e01f9ab7fe1862be1fdb9a97cc24eb9ad05beebb202716607e8b164cf63cacb92504e80e68e641af71ad6ee47d
+Entropy.5 = 5d97de97d6f81a858ad6ae0262e58169b27c25adfc2bff50
+Nonce.5 = 6854e6bfd37f3a4d8c4b46cd
+PersonalisationString.5 = a0d8be30a0972002f21ce2d7cf3c8e84907c638e0093354d
+EntropyPredictionResistanceA.5 = 78d0a76b0dc67e0d3f90fb04c2131bc31239defc8eabe9be
+EntropyPredictionResistanceB.5 = 0fc589a554a4b77fa79c64c03bbf87a32031530d99bbe397
+Output.5 = 67536d7352a49a1a49110a1dc1b77dd1924be34123e027aea0ba6064ae0aa051d4470ccbf923e0c96c86f2d440f17f45b67c4c7785a6f5006bf0cadc13269540b2c59bb75f642e9668feb601fc60c18b94d65ebea0dfe5fb284e003a58837f9e9e120481ec2ba972c755c6a9134af683
+Entropy.6 = 9ca7149b0c5ccb7a0f7ec5399c644dba98c418373460c599
+Nonce.6 = 78d91db57ff714897ee71caf
+PersonalisationString.6 = 2ade2ffc19de7fc94767193223aa1fb3461cb29d970c8f05
+EntropyPredictionResistanceA.6 = 459c1dc164655140810992fa6cbbb708ba2e61053d5866ba
+EntropyPredictionResistanceB.6 = 6a1bbdbc639fd21be4383beb4a4d370e86d0e9739ef849ae
+Output.6 = b39d6db529fbb3c6a90d6b7057759c26a9fa26024d2b65e3bf459881ff0f88a5b93b87e0779635022cea81db313329b61613742cc82b52fff1a2e6e24ae0eebc0917d5e4573466e4aee3f0ee0053445566eaa080c3e701bc35d40ce5105b4b6572baa7b4c84a16e4aab501e6ef670164
+Entropy.7 = cc751171d828dba023f430b3f5a7134f733f4cc1ec76495e
+Nonce.7 = 98a6dc2a627d97924716d7e6
+PersonalisationString.7 = 4ba50a75424970526022c7351831c58ee75f1e3aa0c47749
+EntropyPredictionResistanceA.7 = b043cf15c62ce8da1dda2a930c88d6d4d12ca992a501f773
+EntropyPredictionResistanceB.7 = dff5d38e42f150f1c55ee358aba1e73cbebf465baf9fd0a6
+Output.7 = 8b387e55b9c10d0cc336f5445755c0b6dbe971bf69a04682b21c9303a66e093b7dccf33fc685765c6d2bcfa3020892ed09ce6ea3e3355b3bc16741f34d40b5c96bb085c1574801d14b4f71c97cf64e75dcc330fafa1d1e626822609a9af62c894dbdd56307ccf1ebbb7ec09d500096aa
+Entropy.8 = 1f2ccd29bc38e8364a4beb0e89984b88d61dcd31d48e310a
+Nonce.8 = e691c0e146f495b9d8cf443e
+PersonalisationString.8 = e0c49aee71c4c060aac1bab1f438f9e2b0c96d710ebfef77
+EntropyPredictionResistanceA.8 = d12f3ad2da7c59c2a2f6b8df4e0202414791e106c1f87987
+EntropyPredictionResistanceB.8 = 9b7a46ac207f45b5fed69c38309adf15dfd0dd75742c0df0
+Output.8 = 593677f65ca4339c0dd8b1ae9278cc49adaef1cf889760b4631a379d82bc25123dfd2e1436d0b6b890d4155e3236fc1e2cef67d8bc0454099051e220d6925b37c47408fdacdfd54cab7be70f8b3b3dfc5a86f181dd559ff7182f225f7de87dd8bd69143be270ce76d2562c6e01ba4c4e
+Entropy.9 = f1bee9caecfd0397a6cd76f356ecacf1053981c64d315db4
+Nonce.9 = a51a244fe3b22ef997392f65
+PersonalisationString.9 = 9d42670ea4113ae02302cdcc660b497f3ffb19b9aca8babf
+EntropyPredictionResistanceA.9 = dc13cf30f5b8f5edb7f8f55863a30156722536d02440e5f0
+EntropyPredictionResistanceB.9 = 6e503795d2401775a560685f2ad3c98aaaa22726cd6ec45a
+Output.9 = 78f31a24cda43acfbc4db7f17c57805a4b53353d668596247358b47e8f8deeaca312a7f9ce78832bc1da2d6b3727fcb847ca4feb1695a2edfd2ab24c486da125be1c1af4f78b749afdb57f97b4a8b892fd87228f116ba10fa739059581256de4fb865d1115c58284cb9850a24e5b7615
+Entropy.10 = 17b3146ea3ac1afdca446275f3b7539a517766b90e2da2c4
+Nonce.10 = c85db4802943efcd8009a9ff
+PersonalisationString.10 = f3831c1bc859fad452a76ce513575a23e8b790c90de4575c
+EntropyPredictionResistanceA.10 = dd054440da16edb641a050fce3f3cab3d5f03d550111daea
+EntropyPredictionResistanceB.10 = a8841a9c814def76eec9c4e910788c710562428a39cd0987
+Output.10 = c6c85936cd52b5271a6e70410e0b9d960d76f3236b548cfd4fea26504ca8a78e58ee914c6cf248f30d7ee3547eedd3a4d9869b15e326c911aaecb7f0c221f8eb9208a9b355e4b1cc7926380d25bb776f3e89904943b3fdf306012fc95d06b3b7c44ef55c9eee675150b332e2181f2a32
+Entropy.11 = fabe526177dcd476be9950233ec56f9122a9b083e589c926
+Nonce.11 = 4add302d4768c06020cf53e7
+PersonalisationString.11 = ba5858340e6a82b2ecfe1190215bd8da995ee8ef572eed8b
+EntropyPredictionResistanceA.11 = 708bc728582360cbf06a18de38e3da2642dd6751aa686dbf
+EntropyPredictionResistanceB.11 = 11734bd75a422571c9f2420915d7d79d9efea870e72d262d
+Output.11 = 10260dfc2f2322f530192e96a2396694dead62f9b206137108666cd199939184503da75598f54a89dff885a9856140b56687347c2c066a1593bfe02b8bd2cd93e939c424b33683a13678ba5f34df3f2f5f50b2a708d1d5a04683db00a607e2f80e5feb20086e3d64294e9732b0776c51
+Entropy.12 = b7c9a1d221fe10552bb0b799e18d12cffd1f76d6a1e6dc79
+Nonce.12 = a36584ac7e13c355b9323d0e
+PersonalisationString.12 = e563f8c8318862c7117af8946823e8570ebc64b3de1b293e
+EntropyPredictionResistanceA.12 = f2f97fc2d8a26e6c37209a485963788aeab084e923a3794c
+EntropyPredictionResistanceB.12 = 63713c2ee288ba3a99f2d407adfc1b87ba64fcc5a7f98e4e
+Output.12 = 100c460c12e5ab12a72bd4351f7b608f5578060b262f21d735fe79d13c942035a76f001adfd39fe93caa22b6274bec282e640469d3f454d108991a1b73d8acb3d392732fc24cafb15fbe248441462bb2c1278883610ba28486ef82ec2ff3d20eb9601866c7dc4eaf44cdd73e5b5ac14f
+Entropy.13 = 78e5d4818964d748282fa8dd386ea9c920c4fc5ddb9d2204
+Nonce.13 = a3f6285082b8065dd3944ce1
+PersonalisationString.13 = fa058586d35f0d74d2c473e005e7f8ddc33a1f6d5bc79d75
+EntropyPredictionResistanceA.13 = 93722e973f8300783e37991e6c4a6286a1a0fe3703dd78ae
+EntropyPredictionResistanceB.13 = 951c88a0ce47b1a23d91e0926358221713670a78732d5470
+Output.13 = 6b603b098ca74b7fcf3c8f9b42dde5b3b51e84cab4f67f4d87bc6575ad4fa3f1e0ee27085f88e2a5ecf4f57f9ba92638e52941535806d2cd1b5aeb5b7c81b3d44d41cf5b8073b646a9cc1b0a9f7e183b082e9f2270acd928623e8a46b46257e1b827e8b88b55c88a3a3a067cfcb9b2b0
+Entropy.14 = 50241739e3f08c910baea7f9ba481511b6ee5d69bb1a2dd3
+Nonce.14 = 4f3987a231cc25f39a1a9663
+PersonalisationString.14 = 6a7d2f2dcfcae8a284802c97d77917e87c6cf8417c2b16bd
+EntropyPredictionResistanceA.14 = 90e391a33dc21281372589e2a667cdbbe4267710d5244fd3
+EntropyPredictionResistanceB.14 = 42c959b7272b39e5cdf67701d47665b61782541e94aa224f
+Output.14 = 4402afee12048c1c6a44624d2df026798930ec732884899ffd20d17f1c8d7c221cf5edac8679a21ee11b177ecfd61927d4ccbb175ee6b49cc6f371450904c2666aaf2e6cb36cd55cae3af772beb80955cf67b4e8be1fce11250a39693ecb7f8ac05aa23b949ac74bc9a67060cd60cc77
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = c3005cdc5c5b7b25ed78c9684f3faf6278f9a9c5a9fb2020
+Nonce.0 = 14a29882e50b21e56ec8b794
+PersonalisationString.0 = c4506109937e0f9352fc881b0396b0a103626a15addfe525
+AdditionalInputA.0 = 6ee49c76d138eaa3fc10cf411e0b8ad5488d77f74faacf13
+EntropyPredictionResistanceA.0 = 7fe871daec2626f32372123f44a8721ff4339e0a20f978ea
+AdditionalInputB.0 = 8825122b506dd6f3a58811fe6c9a7e9271a6e68dcdd590e2
+EntropyPredictionResistanceB.0 = 27609eb495c2342e9ba719bbd2b44ff503db2322ada1c982
+Output.0 = e818887ca1c84717e277baf00913d65ed58a8f90b8728080a03043bb2ab53f55fa605ba0cfab29b4cb694f6aae6594dedcbe6f74e1f7573c2944f3703b89a52789b0170077ea8e66d8299ba5cc139943ab96254065a27abca2098a85162fb01d294d8671b00206b7f784319384e01b3d
+Entropy.1 = 9bf2ab19aa7e9ffc3461522f3cf85b3292b54bd3e1099a42
+Nonce.1 = dd6f5349d169d59a152b2dce
+PersonalisationString.1 = 38d7a2109c6fad9205abc22b9ff705b7f671c4bde5b662d4
+AdditionalInputA.1 = b46e928cb59eac0cbed65645767e96fd824fa95cb96a1cd7
+EntropyPredictionResistanceA.1 = 675874b665fcff802260ea84b358f6fcf8011b511834e844
+AdditionalInputB.1 = 532c8d3748205cfaa826fba7f240e9926cd3811da8fd1a5a
+EntropyPredictionResistanceB.1 = 7a73c1f675b7598d836dc9fbf40f1dd0f481f47f95f3ef4d
+Output.1 = bc367839d1510316ac3ba17fb7bf633a6eb4b61dc0b03cf1cca564db8248ced0b47ccb36e730c0237b0812af30361b5dce662636b23f87d6ace82cd3e34d45a1133b35ff9b8bde8fb29fe82298820c0c87f0e30887ddb15c9644bfb12578f0878a710771ad22fe16935c66681378f5f8
+Entropy.2 = a3bfbed559c396b807ffa80409fc4e2c23ba952f64a41c07
+Nonce.2 = d3af5e5b78d8ef88171bd502
+PersonalisationString.2 = 4c63bef79f71fa82168928619cd09b003aeb2ba2b04150d2
+AdditionalInputA.2 = c85bb368a82d57c70cd5ad6327187c8550f7c10380b2f030
+EntropyPredictionResistanceA.2 = 2d3e02efefa644f4fddbe207e59397605a0408b0201f6a88
+AdditionalInputB.2 = 5d467e9c06ee058ca066dadd6f6ec6b0da59ecbaa4ddd12e
+EntropyPredictionResistanceB.2 = 2def64d973c0714555d2c7e0a6fddf49558fd1328074ca79
+Output.2 = 1ce311c919c67e151b51ce3060384ca95c071a295f01e54349abaa2da8ef497ea1364454133d20f57da28985bfc6d1d2f58f84d144c85dbe3c9fd5e8958ce06f2f5ad5af7e16bf90ddb4a1e2947f78008467fcc38b5a082eb1612d68e36e3c0abfbfb3a321eef3754ac16c41f96bd635
+Entropy.3 = 1b2c2419e85386716135b3c142d749f1f5bc23edbf8c0a1c
+Nonce.3 = 53b72f474484c545761b21ae
+PersonalisationString.3 = b69011f446e50880a15bb0dd00229f765bf77b2a40040109
+AdditionalInputA.3 = 67eb63a168aad8712a0e7e0f162af7ac7893e902f1aa72cd
+EntropyPredictionResistanceA.3 = ff05cdd35621d104ee393e791737c48c5a6e6b25b58c5c5b
+AdditionalInputB.3 = 23bb752e6232144630e3d3a6daaa1e58a5ca315f21fe1d8b
+EntropyPredictionResistanceB.3 = e28ecf17c410c9c9c3c3aa2b6385f66759f31b61f9fe0286
+Output.3 = cd8e6c6b8a1f7f98f5d796023fdd4f1da2d72eedb96a8e85cac661da24dd0a7810fa04be0491c69db7617712582b43ec4bf112d9e2932288f25b64fb7a2a09ac8747b8f71ce75e3c80b854336a0457b8013ec6dc1268b4c7e8f7d3422a4a5d432f8d9705d6a273a09b9f9273f4928c4f
+Entropy.4 = 62d059e3ecb695167e93b3cfd77f96e681985ab5d68f1547
+Nonce.4 = 3a89f9cbc4012e1c090a5a9e
+PersonalisationString.4 = d8f121b2bbdb8530c6315c63e0a52e383c163c033d3b0854
+AdditionalInputA.4 = 830e2cab11331b761aed55db61681fffad3a61a1a06adfec
+EntropyPredictionResistanceA.4 = 65f738be938f44fd6cb157fd9b737d9389e4e56b6903d4d0
+AdditionalInputB.4 = c7783d7357ff30e88cfdbc90569daf03d3fec8caf89619ff
+EntropyPredictionResistanceB.4 = 15f9d80d96336730fdf57787296d447ea91de7e686c7a81e
+Output.4 = e44c9b35d3b847a928748094ba6754d1c5de3cbe3d90d4e2bd0c0f19dc5aed7228c541044b2b14d7e67dcc148ab04abff7c22a8f1fdbec4d68ad24a7c4b0f0e507bd7f2b4845593363da484b481906fb7207844597238b9d40c14237004e275572aac6a6d84d151fa58abc0987e54e18
+Entropy.5 = fcf3887b4505f7a1273ad5b32e064ff51682bca23ed974ca
+Nonce.5 = 981871a5b7f63e5ceee58131
+PersonalisationString.5 = 9b3e97eed077155cf181829233868d27eb773c398575dfb2
+AdditionalInputA.5 = 75a75a15c622e69eba698a064b0b41c8bc80ef803df0f29e
+EntropyPredictionResistanceA.5 = f9a01fa7c37ab14150c9323a03f694e463496c4159eb8e5d
+AdditionalInputB.5 = 7b6a20a222a81dfa6fd164def816c2b6708bd4c761b2bb8f
+EntropyPredictionResistanceB.5 = 3ebc62f41264beb93098a42a3dd406b983e1fb040d108f93
+Output.5 = 0b3d501f728d2f1d8b0d7dffda0160157b30d0d97932315f77022d1a6fb30d9a0ee4383f2f63377ac6e57b16b0c7480a6f5dd12ed3ec0bc6f104a26c86592daa3f68a499570703306e2c2448e784b67cd6efdb4ae64a2e8ffa5929e74c95b663c9b7fe891633f07d7b50f5f16e9fe567
+Entropy.6 = 7a6a0774f2cb5ddce6b5242782fd3d7b5c7c7e31cb5fe953
+Nonce.6 = 67c06f29a5488fa37feb34d6
+PersonalisationString.6 = fb16aea72967c43b8803bcdd3e794911f6d53f2cb7946cee
+AdditionalInputA.6 = 67d89947396322ca243e2c591a3adc8fd9f1ef448414fca8
+EntropyPredictionResistanceA.6 = 89c646cdb162e258ad636a030ff74f6a7ff876417fb08f5c
+AdditionalInputB.6 = a0d568f4fce862e5e1b22acca29e60d7bc6cdcf6cc277794
+EntropyPredictionResistanceB.6 = 5decdcc98692538bebf9958c627ad8287633f98c587cdaec
+Output.6 = 758b4685b0db1093eebde07ba11085a9dcab64c8d5adacda070fd2b292bec49240f25e158fc96cb1d0ecc9ebcccc360b981d140e3cdba54fc697313014450a9af29d9d55dcbc5bb9a38e4f10c6a3e41874d5c6688f22d0c5714301083cbbd0014880af0f7d088dabeb4e84a64f26d2b9
+Entropy.7 = 19bbbbfcb755cd9dc000abfc03343ef64193141c3d3f4312
+Nonce.7 = 0f55674616e3d96b6086adf4
+PersonalisationString.7 = e77cce9d26d283bb5d6e8300ad0f69df723324d23928c6f7
+AdditionalInputA.7 = 0586c76051462d0483071213804385d01a07bcb27db05e06
+EntropyPredictionResistanceA.7 = 7c906981923c98ef7dd0fbb2f7af0ecbbd2de848f2b25cba
+AdditionalInputB.7 = 1c9363d0b3e9f42b6c722b8d62f9c633066587577fe766e3
+EntropyPredictionResistanceB.7 = 8651b7e3aeaa0c59b605e6d4710a01406565ea30d0c4f68d
+Output.7 = 6d458079264d5f3940d098aae092690b7d04cd46d6d5dde753063b7194118ab67d3848459156b8f0216d85b5c583a1bfc000e68111be459743175fd114253cc24db72ecc978ff8620301ecbf18f42fc4697d91150649a8254a9850d5c28f9c4e187e409e496e2a659b2e79c06074c5c9
+Entropy.8 = c2b577bfd802b8f599ca14bdd5fe5003ee28ae69ca5c246d
+Nonce.8 = f4f62d9e21a7793281c48f73
+PersonalisationString.8 = f0de29d4530b4af75b8defe9b3b24dcb7ce0add4aed6f72d
+AdditionalInputA.8 = 90ac05703a8e0c6057dd2d8b1a6f16f0059e7c70679919df
+EntropyPredictionResistanceA.8 = ffea15f3c3d444ba48367fde04cdf6d62498b8afb24966a8
+AdditionalInputB.8 = 16935f700de9fe529a2bbe811dccad430e27dbc60549c3e5
+EntropyPredictionResistanceB.8 = 662461015135cb55034a63571a032d3cd2c1e6cf4a6855ef
+Output.8 = 56988f9328a91314e4b3ae027bc6f43a01fe471615f3a319afd9bb63f55b13e681ac0ae830d4d3057882fe247ca4decbb26af811282f59ee89ea38642e4ffad9bdfae44bcdbc3a289bf431e0bfc68148c12ced1853e698e74f74e24aa434937390fd41cb4e78f823a262900f2f44c1fa
+Entropy.9 = b5c4acc63ae5c68ca404bded2d36a391e8b2e9ef3b32eb59
+Nonce.9 = 8aa94fd6b5ede6c3d9c33ec7
+PersonalisationString.9 = b3e6df5e9ae10c63da4269de170550b92dde7c6e33af228e
+AdditionalInputA.9 = c9787b641b5c881dae53a69e2b3514ce2ea81e5879765bd1
+EntropyPredictionResistanceA.9 = 7a195abb6f8cbcafb6c492a1d78f04439bdc442168d1eccc
+AdditionalInputB.9 = e4abedcfc4cc69da45467bf2bfb03d823abc19a746e3c582
+EntropyPredictionResistanceB.9 = 783d53a92e16b90ccbdb0284b383cb96af04e81728d1cda0
+Output.9 = e14f46dcab0ba39965f170f01a07308090b051127685ada6601112aa236093f7a760530f856617d9e027c8279ef33d9fbc4b624ae26a277b9e6077ac71e2d2f101b84ebed007ddeddb4286aa4729cb3b28798387b757d8e99a7b6d2631601fe7ab4caad7983dede59b94f4c920ef1b29
+Entropy.10 = 7302ea40e214308136b8427e601ad61132d195f870f2a861
+Nonce.10 = c7b8ce1f686bf325a155d0aa
+PersonalisationString.10 = 58efaa77c9bf446ce8d3f3ce73b7d1f014bdeffea2a2fdde
+AdditionalInputA.10 = 68f9eab1893186d7e5cf3a8c37bf1c229344abdceecd9de5
+EntropyPredictionResistanceA.10 = e1211401bb844893dba2909060c76cf9cda757d9e2cb24f5
+AdditionalInputB.10 = a0d3bf1de632fb19ca5326d936f79aafe59a0e809b13f10c
+EntropyPredictionResistanceB.10 = 602fedf6a7412f49497c82866a8c9b56e2bbaf912f760255
+Output.10 = f2c6a717ab10a9cc89f6d3a07bf6077fa33c2e5d67475ebcdd1b895fd0067941ed3fd8f251352403c2680df2319a882f39a91f8ccb7df2c06a13037f057962e23b8ea0654ef9bfc19b6ec982e539ea6afcd1145cee582d27b708691354b4c397a51d004c61687c1c9c948576009002ee
+Entropy.11 = 48ce334fcdeae603c54fc228461e7173681a8e8387e0c048
+Nonce.11 = c2acfdd6a78c955deb7dc25b
+PersonalisationString.11 = 6bf4c173d264dce03e475fb3bde9fca2474877627bfb0c5d
+AdditionalInputA.11 = 2a728f461ce1067dd38896002724b4967c1a9cfececd3437
+EntropyPredictionResistanceA.11 = ea4e9924c4a2ae22d9fb6b227452addd0b6eda7769f9ceaa
+AdditionalInputB.11 = 2b862cd7a94c1776b26022c27c0e4f2d199ccb782caae6dd
+EntropyPredictionResistanceB.11 = f2ca34568b3c198ebdcf5f6ed11f863097bd56f42d648862
+Output.11 = 07f80326ea781bd95efe729867d6c39465213bb698b5e486e6c5f27d3fac4fda3cfb7c831fe6291062d4db2aff59781efb4f4cf428236aad6a55111b969885a6b851d5462278d0863909a07796e5e0e8448fc0d674a4408cd9e91e98e3adcec2064ad37dcc566faa80149519f5ea261c
+Entropy.12 = b23c748a9c9d206ed4ce6b8bacb6f7e17cacf5649ea8d1e1
+Nonce.12 = 144a96e977a4cb22c0f37139
+PersonalisationString.12 = 325bdbd8c14b766d4a7ff0e14128585b21af76de7ca30ff1
+AdditionalInputA.12 = 2e002a406bb8090eae6c950944a4d6768c89d43cc0d8bd17
+EntropyPredictionResistanceA.12 = c3eedbcc8b9024c6f21412f1600fcde1488f95744446df7b
+AdditionalInputB.12 = 4828622ff56d0867bbad03bac51b8c939a5dfa33a362b129
+EntropyPredictionResistanceB.12 = 6e21a858224b9294a75829a014697cc4b363c3ad0e152ca6
+Output.12 = 58cebdf4676a21ded5eba4dd19452f5dec909c589751879ea4249a4c9fef834d85dcfc95ada82f7fba1476451774036246d7a496d4d427f37647ebc10fc2e1125b0b71da1fa5f1479c5681e9d7acc9b88b527390734d943bff6a76c4b22bb4f6ac331f7710b95f6806fa35a29a2fa35f
+Entropy.13 = 606f388e8ae35faf979434656144370991e89b7457ca5b55
+Nonce.13 = d5bf2b48fe8cb64f549f48a8
+PersonalisationString.13 = 5e039f38d6f9a9c4ecc67158f40d3c8de61808fd7476fbf7
+AdditionalInputA.13 = 21c7d976da71bcde51a3b4bc1b9a79cc6c4ca51ec992e479
+EntropyPredictionResistanceA.13 = 12edbbb4cff895efb21c90eb26c1db239ed72da43504a1e0
+AdditionalInputB.13 = bac1c5904816c3040eb532622f127ac3e28cd78ba68404a9
+EntropyPredictionResistanceB.13 = 9c56fe144f2d09242f2670dbe2561456d938352125b19131
+Output.13 = 5f951dd774bc1a0818b249ffc51348bf1f36aa4b9d6a3348d36df84b5d3e824adcdf8b87ffecfec13fe36ca354625ae8db8a69722254c3f6e7027b866c529f9bed25360e0cee7ce41f996d50d224a08e965e0e5dd67a77142e2a3de0d559b9dae8919ad0387ba5fdef699e42016d7291
+Entropy.14 = be16ca52551a6a0656c40539e3155eebbc416cbfe212101f
+Nonce.14 = 8edc2f7118472907ae9b2b95
+PersonalisationString.14 = ed000ad2e479513861014e8ff45a481a494af312d2dd5563
+AdditionalInputA.14 = feb295c74975f1e1c738988fc70b9d2603c7da93832154a1
+EntropyPredictionResistanceA.14 = 74abe81257533115472610ab401d1ce1f8998884af43fa57
+AdditionalInputB.14 = 764705681b7781573af811fa7751dbc27d667af7a1e59dce
+EntropyPredictionResistanceB.14 = 76a59ae38c88631a066fa85d24dfc9b2547caae598cd0fa7
+Output.14 = ba4a0583d8d6c5b4216a0875cfad594485858dc7f9ef265d4ed0c0f0fbfcaaf5ae318df2d7fc530301813d9f49826030625f7ea02d0630b3573c486b1fa0ef4269cbfb6fb86675c11fb7c0570cf7ff4fc7affdb00625ac453c23c229a4ea5f540c66f031ab3462f7d12659eec990501f
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = fb1439ffbffffcf8e3bb7e6f93559e86cef8c89fa2425d49
+Nonce.0 = b7a306aa29a914a0f796f5f8
+EntropyPredictionResistanceA.0 = 910886cea7fe6cce5104e7965c1e6f498f2f58c921e3f192
+EntropyPredictionResistanceB.0 = b7c7f3f3f014077a211c5a21dfc5a4c259f41d18a1772a2b
+Output.0 = 4779f717ad06a9869611e779cc433af64f187e3081fc04e88f6f330902b5d3c9c1ad15f171922e47a8b8d1bb100466ce9cb7c25b2bed51b9374982e8d2b2e9ee40d4358cb9233742a40b36a84835e815cd7cf1f55f03efdf1968cdb276847820914a44588fd5cd1631ea204738485d5a
+Entropy.1 = 712335ed62c8eb058fe042b78259c779c3f1f6362aebb5dd
+Nonce.1 = aecd453adb0f1b6c18fe1dde
+EntropyPredictionResistanceA.1 = 6effe86c7876c9538d5d84f8e66cb77331453a8f4286e6b3
+EntropyPredictionResistanceB.1 = bfdeaa95c4d2c70c19f26f5d1be44954b35a34e7f96cd101
+Output.1 = 3d3675583c4e889d6a05f02c071a7542e84a9178cc063cd2abb08c95444185d3b8f45c0d9eac6431fa0fcd8ab4ccf140ab5d9eec8ff38c8b6233f92ee114028eec28a142efd1211ccda2b65a801e271fbf1359cfe497e717fe1ea30616fcf42399408862da9b8715b64e6898acad0c00
+Entropy.2 = d30160918178ea989997340ed35e74f33994e6e8e7cccd91
+Nonce.2 = b0364312f7d9d779ccb2a46c
+EntropyPredictionResistanceA.2 = 5335887f2fa5ede99f1f1f4b71ceb25d6842a66355c5e617
+EntropyPredictionResistanceB.2 = 765db4f3192bae9faa55fc1504a4d375ce8970f46b634bcb
+Output.2 = 0f94317047cd35cd834de2f129022542660a1dfab7d6a571d95359ed51e9cc5c72bef5faf207e13dece52bd6958342e2f1459ccdf8c3967a3936b22f9b77af26f8511b8e2d2786261af3aa97ec505da854adcc8c3f3679edfcce5849d5eee9fd0ce9fc52afe47db74c77667134315ecf
+Entropy.3 = f743e0fdc8579d3995145ef7e8c5e7650bb548870a445be6
+Nonce.3 = c7bf4fa0a4296b44d1db2fb2
+EntropyPredictionResistanceA.3 = 14cecea99d630e6d7b05bd0975aa1e408466b23c61a5c431
+EntropyPredictionResistanceB.3 = 92e45708d328f309a7c38f18a44fffdae73279dae09504a0
+Output.3 = cc258ed211cb0c73513ac19dfdf61f8a836b7e84cce1fa16399ee1b3acba1563be7f39143a32130744981abf36fc73d8a7715a793ca7d37de6c4d793fe8a1ed5e2e80e9e6d58bb75242beab4d1dd6cd60a0855a98a595d3acc7a307471a7d4e91552ea6351243508a8944442ffb58db8
+Entropy.4 = 2649482c0fdac8124308a9b78bd0c2325f85c98c5e21f6a7
+Nonce.4 = 2a9caa5b39a36b76d72c2fb4
+EntropyPredictionResistanceA.4 = 74c787e5e28b0b71741ee00b926f6fdc117137687440b4ce
+EntropyPredictionResistanceB.4 = 1bb22c36c3c041d02fe850470f12cf60cc53d8e4b3f89a76
+Output.4 = 2c6476d47bcdd0fdb9c4641391299a9025993bb9ddf65c5cac117e212c22324d10d7c6c0d601a67f72e51e82a91a4b708eba8b7ac815cc18368a5c81f59289d13a0d5e3c16827006416c7e6e8b0107306e30d5788b55d2b58bfb87c81c83421b95185caa231d2865a65d97b8ec477f34
+Entropy.5 = 8643b4231af2b8593adbdb8ccdc009e170fd3e1350904628
+Nonce.5 = 26544835b4fa090490529bd6
+EntropyPredictionResistanceA.5 = 81812c7e0c0e79d9d4f1f664a5dae7dfd413a0acc26f2aa8
+EntropyPredictionResistanceB.5 = 2e2b15088889bb65faed75d4748c79e59d67ac077a9d2e32
+Output.5 = dcea2f9459d394e40c641559b5d7ea8d57c71f94c4d33151a89ba9f261aa34ea0bdda6e93a23344921403a7aa81606714f21f894448cef9777e93e3d92667af939f55ec3242542da6bc4398cd81fddc354aa83619aa2c5144f6440aa75367ebab3cb927477bf87956b6334443b09173e
+Entropy.6 = 29de5d638507e7895393c063a4d5ec2729da6fb79893c57b
+Nonce.6 = 49f1dedb2e52b9cab557f565
+EntropyPredictionResistanceA.6 = d00dd28934c24b8095da6953a8ccd26be4a03f232fc18f5e
+EntropyPredictionResistanceB.6 = 1056b08c420baf71deb5e19677ad5f7ac6ab8ee7b820ae5b
+Output.6 = 657301a7431910ac32409b02d3aef68d7938c590127e7953107603207ea9d5605e4c1098bd07e715478594b71a84c098a1001b2dde95fe92463138c42128f1a1cc7c20106259438a2e921d073f7e0dd12e2fa5c18442badde35e2e2876244923768fa736487b64eaee2ed24d35b944e7
+Entropy.7 = 1d533190cbbb946f8af8e7528b2696fd8c62fceca6636a71
+Nonce.7 = faed94dd98120e92a03f4302
+EntropyPredictionResistanceA.7 = b9b283936cc1ffc008efba7d6f6cf65a3e84861357a588ca
+EntropyPredictionResistanceB.7 = 4b382e3da53e410f6ff52d2d5f80ad51c38811f6d807ca5e
+Output.7 = f3bf1f9ca7cb004995195e193fa2454d75abbebfa11414bfe94acd1f2ff953c64cc326e6059e49e65ea4eec89a5a34a7b33cadf5e70bee196aefb04fb95eee574e04f858cdd7eacf1fe7cd2cf1c5ec02ff41cbbc8ceaea99dfead497b1831fc3b0ef2f22d016dd0f19cd683cbafa6078
+Entropy.8 = 40e119b9091bf9cdf45cf022820356c42e4f4f0c7344dc3e
+Nonce.8 = 1efe946d9301d53f05abe127
+EntropyPredictionResistanceA.8 = 4d47d06c36e2d5d0e63d6bee25cb44ebe46bed5193d24830
+EntropyPredictionResistanceB.8 = 54dcadf0f75b3811525721a3c12cfccfb102f08b8401278e
+Output.8 = 3f73aa5612bd0b2c07d361b08181420ad7ebd24767bc793047adbe9846d2668f519312b1b83d730213282f702e99c22bc8479acfc6f17d2d8f0494f9ba7628e2b3fa6c9fa20c80aafe8bec70f5a301515ab1fd45a6d08fc6f3f48b6cc3a8b5cf9d63474b227b9792eae48242d15de655
+Entropy.9 = 50d8f56233484b8435b9d5313a3eb78881567fbb5b1066e2
+Nonce.9 = ef69f3e3605600b55c9f335a
+EntropyPredictionResistanceA.9 = 10f711f75e2ad7bc457718c0a9ba12b5f19f2346fafba631
+EntropyPredictionResistanceB.9 = 358034dcdb97998f1b7255f37e2d7aa54302bb46420ffc68
+Output.9 = 1d428be22674e940b7abf03938ea4c0b2a3aaffc0c0d52f5cee8488b2c4e91870165035b6afb893febdc0dced2ae25046c09d14fcc9c82e76f8de54329b2b740f7aec8be0fae5cf5d2af15ef8009f363901540c4fd8ab2ff6596337c71b4d8e653169f36864007cfd5560901f5e277d2
+Entropy.10 = 2cceba10166907dc7c28af87d04a78213942a9495811088f
+Nonce.10 = caf520fab24ef60258adc719
+EntropyPredictionResistanceA.10 = 0a567f00cf04ad6c90af0de715a458623bb5338f8d384ecb
+EntropyPredictionResistanceB.10 = 26917d49ae05b1d220800d99881a9d2d60498fd5a608b472
+Output.10 = 042e64ba41181b8ac9aab926dded7c84c3a82068625c47ca5dc281a6898a371dbda0ce0f24ad37c88a3c583f97c4db9a08612cf409c1fda710260c97d8e7c12bdccf678b7c4b62632448dfbcc1ad9cbca98eb8b0c6a0a121c7f2653044864decea7fe338591a932d88bd9289f2e37efe
+Entropy.11 = 1c825e35fa4d6e9d335a7bf16eabce4bd761054ff465efda
+Nonce.11 = 63e613b5fba29dc947866965
+EntropyPredictionResistanceA.11 = abd2a936da7bb127fa2129241ae60a1d5d3d219e54bdaff8
+EntropyPredictionResistanceB.11 = acb1b6a4b640ea175d892dd5e4e89968f97e63663c14bdaf
+Output.11 = 448db6143b4c24e4f24ba726ce0240f97bcbe19446d2875ed3b35e0b54a7adae1f1a91f66421531039c881ecb4834785f08f09d33798c72ebf83ae899cdc73a82ed8ca877225094ed239ca17e138ab08cd026e1f4796cadae15f3826fe25c12d436c54f2d4bfc87018ecbe249008e0d3
+Entropy.12 = 8d63ac56b08ec7e920d7a47fd1f15f0b8dafcdc893913cad
+Nonce.12 = e70fc60279ef0f93f7acc702
+EntropyPredictionResistanceA.12 = 1e3ba43266e9d82f4ee517c906dac7d2488eebd7b238934e
+EntropyPredictionResistanceB.12 = e646d2a2c1f49c51dc67cb3c68033d51795c60d36c331430
+Output.12 = f35e03039074c00dd66a50aab7b1310b0c22fe3ee547185ef556086497e9f3af234df577f5f396466a4411875e34e9ce56d954feadeb0bdb9a815e5fe1cf8d04e743b99e59ff3b9cfd90007f3000485323c922790325023d9a94d52ec60007db28e02471c1637e38f73e23d166f64357
+Entropy.13 = c9eb3100d19a101582675b5b58ac8c03c7b86c556c003def
+Nonce.13 = adf4a3070f62c1db574fdc43
+EntropyPredictionResistanceA.13 = fcfe4ca29529b95047a5076da36ad864f4368ad5278ba897
+EntropyPredictionResistanceB.13 = bbcd00dbf185b1cf76bab52b3d63dfd93cfe103edd63c188
+Output.13 = 11071e0cf662fe88938d90f7a94eefe9e98e1e681d46cf7cf1f588a4d4f6392f42f8b497c0d2d5511e292f43b8b52a614b7926992cf7e389c2c1229d4351aa0194583bbfae37aa7fef20e3cbbd5ac17b62b318c789bb6fe4426134743d3b44b3194ff34f46c8160a594b58236af6a4c8
+Entropy.14 = c7ce3e85ac506658dc0355d675ec5f16f1aa449d02be33cf
+Nonce.14 = 791b3034d8b2cd2080ac0af4
+EntropyPredictionResistanceA.14 = 85ef26b185a0aa99aa8761981cf02a634b62f47baccf276b
+EntropyPredictionResistanceB.14 = 2e9d56a2fb6ca0bef9a286d23e7d38457790f97f2b7ea5fc
+Output.14 = 5c7bb6bedc97cd38837beb0d963d76a953d4c53827e24ffeb278acce8350c43fa6e289672fe6452b769b921937ea8059cac8326332966d3490f57b8fa89aa86deeb3edcdc108d1899eaaa2d568d78e26b8ed674282ce16a0cc03f3c3b1da6d5c73afe8f392b32151e938d99c94bf8152
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 1b22a0f6a615a500c3f671a8b6ae873b68d160f2c9c9cf21
+Nonce.0 = 90054db3c8af138a2769906f
+AdditionalInputA.0 = c49e09d322c9f0be9cefa26cd76ecd32744351cddfe38840
+EntropyPredictionResistanceA.0 = 68b853da4bf4f6e46f12ecb4867d4ca39285f2471b88d9c3
+AdditionalInputB.0 = f7f8731bbee88d6f1e77ed1e4233ab1aed7c92eff07d8041
+EntropyPredictionResistanceB.0 = 1d64c9505e9ed4aadbfd105fd2f4dd2f8588d9c9c7f08c5e
+Output.0 = a27a14abf647eb96ef6e6ab4b0aa168106dc7d1782019c0fb512d62e83f89e2db1983edf55898834af015cb276c2210104cfe59b43920e055b1b4b7e61617b3beae8994c4fbc4a26d1222aabaf2726d3bac586021285e59318086233d83d7e507ba07ee5787793511938b247b7631519
+Entropy.1 = d3aa3a1b1f2068cd42efd2a8e7d59b08a6928b75891a0231
+Nonce.1 = ac196d3fbecbaf88416de27a
+AdditionalInputA.1 = 545c8ed9fdf08f24ac8663880c28d4336c242e96911a3ef6
+EntropyPredictionResistanceA.1 = 95b9a3c59ea6325736036a76ade1270418cafee03ec2c5f8
+AdditionalInputB.1 = d76cbe4799a9f8f1f11669531e3da174290475b812fed4c2
+EntropyPredictionResistanceB.1 = 5abbff5e7f360141d05343b17d966bf9f50c1243af42b848
+Output.1 = f9b2e822c0cc7183af5a664d18afe2a504fc756b247309a8cc121ce0ddca545d3a9517d399a677c97ecbd7e434b7f418ceae5aeb98a450a7f1b761130bf2768a3f4e5066fc86e2b0404865c008e95a385839e73800c7d3082047ac98e117e1b2972587be6f6a207e2854339f7c4651a7
+Entropy.2 = dc408fa370ac01b028b1e422ab84e03082caa754781150e2
+Nonce.2 = d05d7fa9922b713046d397bf
+AdditionalInputA.2 = f13fa55ba96542efb9780781fc414393929f6ce00574f018
+EntropyPredictionResistanceA.2 = 963446c68c0da6c656f720ced0e445ce7d63248ab48413b6
+AdditionalInputB.2 = 41ea438cad605ae1c52e5f3eccca9be7fe39b9a1a5c8c764
+EntropyPredictionResistanceB.2 = 4e8461dbc0d20b21d6f24d8903e5f126e34ddf04b5f3704f
+Output.2 = da36504925fa25421fce3606a6dbfdefa6b826567368ab2f4dc6955ecc4fb357a23d65167470355f784c522fcc2893e9669e14c51ed618fd70cc77441982655b6653fe8955aaaf07ca6cbbda0bebc656c778164f33f8d772200340ec781fe8caf6b3596d0fcab908c9602c7a7b7d5b9e
+Entropy.3 = 2b2520fe8c90e7e0bfe236f08e27dda5a278e540ef7c36df
+Nonce.3 = dd845282673a0cce94e43641
+AdditionalInputA.3 = 682e03b6ed7d1801bcf9427bd7dd1cd32d97ce7707f416a9
+EntropyPredictionResistanceA.3 = 20cbf5411c054dda5e0fadec1bcd2aa55a3d7707ee0ed383
+AdditionalInputB.3 = 77e95ab60fe01acd769aef2c14e29301d53e8f4c76776d7a
+EntropyPredictionResistanceB.3 = c9b45a187164ed81fc29ae1ba73223569219cf2b37cbf986
+Output.3 = a4264cf92e4fb596df1bb50338a0f8703c1b2fa52bfd8af21a0016887007b0bf192928ee7acf181fd2447481a7fbc5fd6afb54496d8e8bb4baeeb9cd7e8cead5238291f5a30994e913af00b342580f89175791bd92fddb643cfa0ddc6ad3721ed0843d783124289bae853c1003f94690
+Entropy.4 = 96aad50afeb0203e5508661e803a9b49f17b60e06431f533
+Nonce.4 = aa46a082423e6193cd6de6fe
+AdditionalInputA.4 = 1af12f8429208b23b4d11f9a15fc0252b48df5a9b13bb6fe
+EntropyPredictionResistanceA.4 = 7929e22ddca7c87494fc8446ec8b5a51b85f74279714d5e3
+AdditionalInputB.4 = b9c862ad1ba1f1da3c43da0445074520d1d3db3f983dabfb
+EntropyPredictionResistanceB.4 = 2449e11a35f4d8afc96c0d44afe4755e7dbf2f4667075cd6
+Output.4 = 37b77e1bf53865c03ff6ab7e4ae86e54e59b58e01487653820df0d9da5c453741e821a4c9617d761f54710ba0dd3d3f317057b2e840297f8e78be85e982cb5d1540894c408c344250097fb9e73783f0912251a2499def71ca1cd55627def5c9d8f60fb20936b5b7f532fb7185fbc18e2
+Entropy.5 = f1c2d3936fa36d1b47e31b7ff880a18c3c6e0a38660cae5c
+Nonce.5 = 5ce75fdb638cf2cd88e72282
+AdditionalInputA.5 = 0f206047f8d5a9f71103a70f8f80f9828e1701751763c6b4
+EntropyPredictionResistanceA.5 = 8a96111ebf691fa4b39625decc882ba84bfe9f72a088bd28
+AdditionalInputB.5 = 7aac0e1c37fcd645d7c68d996ecc3c9828e914733311a3e6
+EntropyPredictionResistanceB.5 = 71c1f9f9a68da95b50f3cc50409eb49e9cdc7f467bcf855d
+Output.5 = d62666888c319ebb6a9a15f13c6b6d46c4bc0a181c2b3a0392bc1eb3c15c3e39d2c4f4caf30a9ebc9b618575d55b2046bf1052316d9750feb924492e580b5034f2fcf0a22aec154fe466543e092521f9e14d0ba5b0e4b676bb4f1a94dc1e588fa106b8fb9f2bd96bc9749124e7e615c4
+Entropy.6 = 211b4e48d39cafeae1a3e28229b3a88f8a5aa647362bb8fb
+Nonce.6 = cbb7ae3f0c050a822d31c8aa
+AdditionalInputA.6 = 692be48a2ef39b571997e3820b940a8be0141521bbdc029b
+EntropyPredictionResistanceA.6 = b30fb4ba9206780236a623e4f8d2654452e8f626732b1e81
+AdditionalInputB.6 = 5c654af26bd9e9cd695e47a46448733cff443e631459a5b6
+EntropyPredictionResistanceB.6 = 400479d4e9d39f03a8de3f1662819ffe03f2a2b882927137
+Output.6 = 8bd8ee0bc9629d0649db223c1fe840c9072cc76d28fda27d6a18299ffe1bc44f0ddb55925256c8ab8f5376be39a107eb1dcbd0ae26bccb789a875ed498cbe1ed8c3a34b05434b80cb5c7758e39919633a1b5a2abd65337e188f9f5d9b94f2ff3cbe0c4ca7d3a89c16f5f6753c07b6229
+Entropy.7 = ad6c445a656a0fbdf7741f612d18b8b5fbf696e87d85194e
+Nonce.7 = 71a8ec0b32324e2b1b93ad1d
+AdditionalInputA.7 = e8d8c5b7ec7dafed419df152d2201ad15a9546d4f10ddc74
+EntropyPredictionResistanceA.7 = a54d7f5965d044469e31ae0d589ca99f5b95e04c734c1174
+AdditionalInputB.7 = 9401820633f67389d3a7710ad7b8618e20380447eb85f321
+EntropyPredictionResistanceB.7 = d80355b42c83f85c94b5bd323556529e93173a5994cca524
+Output.7 = e52a049f44389abb204200e317f3424ae41a93469b0eda72ca9536bcebefe4991c0b0a7560b820b238317b0f5384e659aaedded32de64c27cc56997935c2304571213552a6ea5aa067ea06a3229e9796494384fb1590204accbcdd0189f90c7aeb617254feed675769c2f152973cab6e
+Entropy.8 = cdb33db1e67581fd724f6b0f98ed8df24eaa1f14903369ff
+Nonce.8 = 511a216457ea567aa90f5088
+AdditionalInputA.8 = 8069e6625ed4e41c1223119ab91dc1f873e2531a5e8e9030
+EntropyPredictionResistanceA.8 = 5b5926a6837e79dedba411551d7667527dd7c9286055dc7d
+AdditionalInputB.8 = 5e9f0b8f69ee8ed3aeffed50da4402999b049da16213a08d
+EntropyPredictionResistanceB.8 = fd336250cdbbad50c1dae0fe8a615ada836bc0b9358d4491
+Output.8 = 02418a09292028202ec0e1604c633f073fada42055cb431182a09aa6011a9eb2bcfdfbfac0c84172d1036f93ba59999118dbf707dfc5136006c51f1c1725f1a5c3bc86af55eb0f20404b5abff0d617d9152e6354d827ecded150b6f5e8b124b06e2b15f1c335853ce025827091cbf258
+Entropy.9 = 58442c9210d1ed20125ebb6537885de01a5455a9c6d71370
+Nonce.9 = 0a0aba6c0e6636fff150e10e
+AdditionalInputA.9 = 44411d3ede8cc7474e4cd103c0f35fb2c4fa69e5007be095
+EntropyPredictionResistanceA.9 = ee23f1d898abf45fd5d5be9fabdd63764886f19bd06b79a0
+AdditionalInputB.9 = c17763b6b6ae166b1c8c372b8485de05c688c0db4599798b
+EntropyPredictionResistanceB.9 = 876914c35b50e52afde8b057b90cc743cc29d75b473da238
+Output.9 = caa211bbf989b111c56de06a2822c1aef98d33c049a3f2aa11ebab23f37366905815c17b2a00f6c7375124537134d0accef19c13a86f8f478e479794f89912a5b5abc8dcdb142164f472aa037225a5e998182f721d4e4c88941483660ea6b2379e0c0e68b1a24024dd5d9f27f7908678
+Entropy.10 = 3b5e63126defbdef0d76a4e595edd5eb5a7caf33daae840e
+Nonce.10 = 52be1dd2840ce55e0f124f10
+AdditionalInputA.10 = 9d7991830940393308962b50a266b46e9b118fcb5df036e7
+EntropyPredictionResistanceA.10 = 21960e54bbca360723e5d6615d7b5705566369d27545de2e
+AdditionalInputB.10 = e9195b299b1dd4ea0fdde523862c36e2da8dae82032cd16c
+EntropyPredictionResistanceB.10 = 8d5fea7649e643ffa25113b67bf16eac7b6f80aa13751868
+Output.10 = 612011b3d6962da310e6f12051ae0b3d9c471b05303fe11cf7dec0868ddee0cab414254d9f67efd615d8f54cc570f04e6e913e0ef893340116e42e9d5934903e6e48f9db42aea881cc47718d7e258539dc872ff5a147c53d75ab442e9e6430a96109a1be8f2305f8e994a74f9a10b3cc
+Entropy.11 = efa6b2c3b7335b62bbc3825644b85608da3dbeb9733654c1
+Nonce.11 = f82da3e615b2af01e8b8423e
+AdditionalInputA.11 = 687f34eaef08d4a29a15f505439bf4e945a3a6a2594369a6
+EntropyPredictionResistanceA.11 = 4d913862dced27c8d5d4e58c96ef5f2ddc98f23125363143
+AdditionalInputB.11 = ecef1d5dddaf457bc01bd4420a4777fa1bb6c74122271cb3
+EntropyPredictionResistanceB.11 = 75ec3ff58a1fd16adf261c7318997faf2905d8a168e73b92
+Output.11 = d7f75ba5c89d5887d06849f797433690ffa172b884575abc7986531e84f71a239a15b1c366afcacf13b6e3be86bf9b5a8b07238983f7e8b76eabdf34477a6f24e277abfa2195365058e4800a121f61b059fa2247bff8a1864dff6f1f621b944c641e225cbb859094f6a9f7dd44e6ee8a
+Entropy.12 = b893c80dbaa6d60c05924ac55cd285afe3b8008a0757d96a
+Nonce.12 = f3576eea08f4b95f0645e7e1
+AdditionalInputA.12 = a3ffdcf5233ccfa620fe5f7e90b50d7675a4bee9e3d16c95
+EntropyPredictionResistanceA.12 = dee57243fab1d3b23da479f52b7c43f8476b1cc130e818e8
+AdditionalInputB.12 = 30ccd457bfd7b2eba6b172921b7f8b632cfd9512da3bbd7c
+EntropyPredictionResistanceB.12 = 7bed254b7b03dc50a1cb2f85df4b3f3c4f044f11dee71be7
+Output.12 = b59b094209ec508517bd1c2be1b6d172fe350579cb69a9269f70d1681b4d9990c3fbed542492ddac28486b95f1484db7e4eca778fe6ba216da1bd15e79e1c17e0a1575413dc0f7495bcdf6fb26c708693b8d40bee4ea2c4793702f2d7cda31481791a4e8f62ed1cd6b66202be301ad5c
+Entropy.13 = e198bf14aa05727fcf5982e33398523da6ad304b79dd710e
+Nonce.13 = 9c21b1f628217bb3e8b4590c
+AdditionalInputA.13 = 9295029fdca3813d9583b2e98302be6d47dd7a29c9628b11
+EntropyPredictionResistanceA.13 = bc31400b4fc3a10da28950e8f1403aae6a78e1df23288562
+AdditionalInputB.13 = f74927de2fccc8c84dfbf91fd2f824ec37bb130ee0a96800
+EntropyPredictionResistanceB.13 = d91a406ea02a040b898b82ccda95fe78be8cbc3211ba9a8c
+Output.13 = 9ffb82eb21337bb89c52ed070258b8a9c64dbe3586c80f4111f627ea1e39cfd2abfac4152297164c6d70a6bf6185bd9dd39585ab2df10f5c951194d1571f1f88f6e9e12b5e0737bcd3e215a62817de8002124dfaf285c314bb7c84dc6ae8b23b903846efdd7ba0a1cc43bcd729c05f6c
+Entropy.14 = d1f6dce7c8e8c580cd3ebbee4d65f31a45c66ecb0c65a77c
+Nonce.14 = 2662215cb137e7bdeac84537
+AdditionalInputA.14 = 9e39fcbb7a0a1f6dce3a172c1ea6ccb56fbd308ac30ea70f
+EntropyPredictionResistanceA.14 = 0173e8887596696cc14a8f78d326dbc913310c08a04ea801
+AdditionalInputB.14 = a05a3af78f164652504f38cbb262a93f5fbe72c55e28aa55
+EntropyPredictionResistanceB.14 = 0dedd1d3b74beb9c3ed9a6af24ba4a8fab11aed95d829a11
+Output.14 = 4e6dc09aabcb0fdfded4f1d6ac2339add1b5d7528c3676203b09341a1cf70f0e838301f7a78dfe6960daa674517162f4819a37027845c260186325846604db350969ca2abbabf713159669260b80de6e42bc33a64c796280402da8b3c3bf6e8255a11b82b046f1b3800cad132c2c0cc6
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 14c26440efe78d9b46eafc0b264ca50081a163b5e6fbd075
+Nonce.0 = 90a931d45ad977aba710c930
+PersonalisationString.0 = 386a304f00c52311966a9512ee64fa15bcca7fa4c9abb148
+EntropyPredictionResistanceA.0 = 0aaa11eb1927cca181aea38d1e65f4dbe2be18cc13a8d92f
+EntropyPredictionResistanceB.0 = bdddacf8ea1aa8be7cf350b2391cfc636bb4d03c73070b18
+Output.0 = 1bfa5627c81efc352e92cc1c659e8803c6fc80597913b4d4591cfdd6254801ccbd6550e7637745791bb4d5b9cd96ae97c82c1ceb910a22809b59cb8ab8dc68e2b0e3107f4091ff49e8857f6500731dde1ebe3e1722d3fd6178cc2e1291ce756318f9275d79cd9b297fe19ae1c2809871
+Entropy.1 = 8862ecc3a98d209f205dd9010138377f10fdc4af31521623
+Nonce.1 = 13dbf54e30989bd269119106
+PersonalisationString.1 = 92484de18a57e41f480d0686818d689c0009921eb16f457a
+EntropyPredictionResistanceA.1 = 3f55b010e893e19cbd2c24fa0f7f6f34a559490a88376a9d
+EntropyPredictionResistanceB.1 = d7eca82c22bb8f77e25f76a81495302fad8e789bfdfe0259
+Output.1 = d7fe5dde86d3a1f535866d97253e2bf5e524862861feb714e3d2b35d435ff463f576bdd8a71c4d4541ad4a41983afe824a1a63e2a1d9aef9c7e280356faf2c86c93da63f7dda3d17447be75b763eb6ff834ebed08b895a753686adffee8983a7de7d3d7fc0de30b78d8a56a36adf785e
+Entropy.2 = 5ecabcc609d69a51b57d28497bcb7f70a4c2c5a5d9603035
+Nonce.2 = 985f6396ebbb1e9d1ec298e8
+PersonalisationString.2 = d64e7a1012331d5e21b2275cdfc468ef031ccffdb241b260
+EntropyPredictionResistanceA.2 = f448bba9c119ae2feda93c343e2fffe90b4aada4ca3ce70a
+EntropyPredictionResistanceB.2 = 9afa5ffc88615d489564eb01c59a3157808bbaab9795d872
+Output.2 = cd877a10b8a0791c80f81ccdad9d4e7ed2af72af0b2fb00819854a4d55a91712a2a18d953e504225c8cdcbf0a06f6a87dc66b188e697cc8adb4772f3e3b44243fc0eeaa5ed4e117f63c871750dd01d15e85a9dadfdab949438322e8f43cf577db98ebf5061cc9651fce309defd953a1f
+Entropy.3 = 2a10ed3133632b2e8aedb468628ce828642a2c49f17f07a9
+Nonce.3 = a955ce1ed05ff4651a462bf4
+PersonalisationString.3 = 9c4add5c8483db9f04196f34b5c044e5beea9f6fe844b654
+EntropyPredictionResistanceA.3 = 9322ef14ce84b1318fb6255d0190a418dd12d6abefb77442
+EntropyPredictionResistanceB.3 = 1bf2b9667a8f78842229f003ba8dc991ec6f79d599fd6ede
+Output.3 = 35b0fb4230fd270173481e4c13a5d2f6153c60a7b7cfab6fbd0861a251d426b818d946fd86b1bbfc57d394f011182af20d0a5c4752b890a18a16064b1c1974201afe28952ab1f098e4575ad6e1e5f9e83b2afa6b684ae207469e269074dacbd8333f9104b283ead028878690b20d8f6a
+Entropy.4 = 292a6697f516861226ba77879e42ace8ad1828a7a3d7aa39
+Nonce.4 = a84069be64d16338f4b8d195
+PersonalisationString.4 = 1f43766a4034aa14a508dd0036660a35fee1b8c6cb4746bd
+EntropyPredictionResistanceA.4 = 074485475c582b5cf40ea110fe90705af997557fa510189a
+EntropyPredictionResistanceB.4 = b4df054e089be113f311f63dd7f00a65af341464d23b6071
+Output.4 = e208ed99b466ab05d7ed6db5414f2b6a0e2c1fa3de24e50b2b37a73335cfcd1abffedafa800cb5449088f1e872e2c733b7ce78f06812f5fb2bfcec2c5dd9fa57ea837361380bebf72210472855930ae9f190ac363a139666ffe3aeabafcce862acfbb7dc13597c9feaff7bf9356c0bde
+Entropy.5 = 2d30e17efc1f8e44d9c56da2bcc1d1c8718a07c8dea5d330
+Nonce.5 = 81215f4cf4f6b5d4ee74570c
+PersonalisationString.5 = 07e7d2c65ffd89633da776b910fcb0d65be064d1cfb499f7
+EntropyPredictionResistanceA.5 = e0542682c12356be03b0b8294217ee04036132ec8e66e4fc
+EntropyPredictionResistanceB.5 = e6678b5c483f62d6e168feec9a98cb13847af3586973d1ba
+Output.5 = f21977472272c312cedc9bc58d116a7ed716a1b11114759383eac532451b87e8ea8107845c47123251d82e40a191afaaa985a74aa3480e51fab669689bfc2be0c6ba81282a3baacf1c2058fd3ab14131814d8ff759336c63d7b5b8e5fcf37526fc64cc524b7f632d9615d072f3bc2203
+Entropy.6 = 5d4df0f72fdcb6eff1385c593fbb86f93635817c980b72a5
+Nonce.6 = 426959568aa02a8c82bdc80e
+PersonalisationString.6 = 76ce26902a551e5d11f1f5798a7658470da369b1bab9322d
+EntropyPredictionResistanceA.6 = d284be93ffbbd3507e907df319867add56b687805dd3d05a
+EntropyPredictionResistanceB.6 = ec48371b4627d8942488b7863ff3d969aaff7dc465395861
+Output.6 = c267ea2adfe79ac8fe74ea8942a3bf8d05a07a57176aa1636d5672c7a756b2fb99166134f700e3b8b4066c4ccdf9850012edc5d2bb6e5d762c3515e2b30bb06c6102a34bf527337c7cc70f571422b06eb5ecb6f38f10c84c12926455ea48bfb2aa4e858cbd53e82ef2aa91943ed1b105
+Entropy.7 = a0694902f925b1bbcb8967a62b28d3b69d542630435d25cc
+Nonce.7 = dcff982ce6d5762c6c393086
+PersonalisationString.7 = a2ff9a56aa371618417cd35303b840beb4e710a16249cc28
+EntropyPredictionResistanceA.7 = de662ceb977ca05f85ad6ceee2f5440036d5f638eedaaee4
+EntropyPredictionResistanceB.7 = 90b68186c3e0d0267f928a0237acca26b8d9a5020fb4e221
+Output.7 = 13e453b54b7dea7754b63244479164e9486d8864b6467e41f6caf32ab17358939d04490ef38739f192881b3aba2c5b9fad0bea7f3ad34737a338b3f993e9fe4fb22cd4b92924366d5b1fcdc0d4c62e1fa443273594bd8434cdbd8a51f8fcd6faf635d58708a6834bf37d3ad5959c864a
+Entropy.8 = 98ecc89d8b8840f88180b0b768e4715bf29bbee4f3cc09d6
+Nonce.8 = 4cc9830b09ccc2cef13e1119
+PersonalisationString.8 = 4ceff4323ffae413ee594ab69427db8a312f82306aa2e559
+EntropyPredictionResistanceA.8 = c45ca8c7596a3e3fa27237ac69530d34484cfe23d9977db8
+EntropyPredictionResistanceB.8 = c53e9fe720e9c7ff81c59b48408e8b4d05c85be58a4e02e5
+Output.8 = 83dde6785b4178b99783d121ce458901e075dd7eab97c17e2920e145ff789740507b7169ec7ea1567e22a429ee87ba9f561e651582ede42848bfdf6bcd15d95ceeca2166c0a60f97739ddc65fe2e9eb32473f97de52598269957ccc977d7d1dc8250aac1437566ecd354dd938f06f253
+Entropy.9 = 635f0cad9b3465e62df1695dbf6fcfefccc86513263ddf9e
+Nonce.9 = 07187c9292410b2df2ac3c8a
+PersonalisationString.9 = a6c9f45e05e6f36caf3d03d84db1f07cacfea515a197329b
+EntropyPredictionResistanceA.9 = 505f0f5a9693a807393cedb1d33cc83e372b77612ed8d1e0
+EntropyPredictionResistanceB.9 = 72cdf1df535d863167c7fd44c72ddd10ba836c04a88860a6
+Output.9 = 7020e879e93ec48f3badc2ec2f50796c83a6366579616d1f6642a89539a07ce02666bd03b4495aa2f3afaead8014b982c514eb48529688083fd15b8392e7848fa81f8ab615b277215239c00d1a79c8a1c49b909a5824fb24bc2e8f973ddb3c02f762090ad91b144e8a10a7924b5f2ffe
+Entropy.10 = 0bc657659dc2de9ec16d06c71a192ff97c8459a9280fccfa
+Nonce.10 = 06e66f4df34348d73c5c3f6c
+PersonalisationString.10 = c015534e747efca79dd08d682fbbbb9603e44a4f11ad738d
+EntropyPredictionResistanceA.10 = 860e102f2157b5e04e3fdb95b136d96ca85dfb87974a0702
+EntropyPredictionResistanceB.10 = 97028695037715e39ad23717563b3c82663bce667ba24cfa
+Output.10 = a1d88e71648e9878404a8af9541d2ffce5388672b064112a85dd516b6eabf3d6385ae8119bf9ea20643a89affbd1b89c779a81863591843c9df0d351ff6a757799a899b491174d48ac984c7301e8022c0e88c50b0991a9e6fdf71f9e243bc9d3763cb53827aaf8c9178c844ac8d74ae6
+Entropy.11 = a7fea29809daf830a9f6c2111013b645d65809aa1af7e45c
+Nonce.11 = a7b295b5390dcab5ac840f06
+PersonalisationString.11 = 0ea0360771fabd549bab43ca05fb4116f35901e48bb09cd5
+EntropyPredictionResistanceA.11 = 498bfd7e340372d99d8526c582055037b7657a7053c1955a
+EntropyPredictionResistanceB.11 = 68afca60dd75f2f098bcae94559d8842ee64172861e475d3
+Output.11 = b4324377c11666a6a377780dcd2413a77b680fbe16ce1d7af6709557e9468650a52bbf0cb03cbd2594bd2a41a7996d8a14cbadcb8faeb7c26827702fdb7e08a20992cce5951ba52a8dd0e338216332ef64a7c49e8967c1c81e5b87adbf77cb85d51e8310805802350eafa8f5b0c6f752
+Entropy.12 = ed509120c3d79c42f2da839b070fdf9c1ddb6f8b55a0a0bf
+Nonce.12 = be0f7cddd8c858bccbcadbbe
+PersonalisationString.12 = 28b47e891754df05eb996a9503215a9197d48b054a5bcfb1
+EntropyPredictionResistanceA.12 = d1afbb4a247ff673815d9c98385b8352be8f0da63015c190
+EntropyPredictionResistanceB.12 = 7fbcc7ead6edd6eb5b9bffb76ea4c56bed9075ca54d705fa
+Output.12 = 4e40bee3c13e25aac54c29df01596111abac9bcc2fa832cdce4e031212334fb3300d5bfa880831580d3e197badc004f51dfffd756b56431b76c49979cc18c49b5f488448aa98e9a9918e9ee837bc188d61c4e4842fa900b266678569f0fb3bddb0719d55f3a9f8e3bf2f18e1a2a70b6e
+Entropy.13 = 1e85bba0c61afaa0e2077f45e69c241d1e2092abe1b8bc76
+Nonce.13 = 699113774a577479afc09b39
+PersonalisationString.13 = 07177c55434084c1fd20b281584a455d37dcc09a9baaba0b
+EntropyPredictionResistanceA.13 = 476cb002062e3818d9d32d919ce605e74ac4506aba34ab6d
+EntropyPredictionResistanceB.13 = d2aef022bd4627796c6474a7b7d249d9de7810262e5f6d1a
+Output.13 = 3c3e8d6b11bc7fa6f5bb5018d78d9789f77502df99f0ead07787918e793659501242fe6e7237bf945d24880a1a7ca4118a8106831b1a87fa5c0e562d25d4b2d16dcee0260183ef8ce3e7b209911b73af1363be4cb3e81822065ec71d446b57f60c7221e0ba7929c22bd327e315ba76cf
+Entropy.14 = dcc55c4fa8c11735db51d6648ba212b5c144e67e8c2a146d
+Nonce.14 = 81ae5b598ea9fa642ab320e2
+PersonalisationString.14 = 6c19eeaf4817130f4aac6a1276b8d2f1e439aada0846286a
+EntropyPredictionResistanceA.14 = e5f524fde813bd2478fee8dbbb6284f3863b43a8cdb2f889
+EntropyPredictionResistanceB.14 = 178f885705e506129a137c64daab8870149344d82990e454
+Output.14 = cc687b9fc638af68d71c2e12ff8727f2cb2eef42a888216af09167ee23f5b432ba896ccd508afae8670dac9fae348eff0f8db63c3fe86f6a1e2d97f9b11813a56ddc1d5c99cdf79afb5d281fd1682dfada3c608ac1cd8ed28e70e21d3ecf7c13c410e8e657d7d0714aabef78795e46d1
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = c939624bf4739ed76d42c540a8ae08be4b6e3c227c31c3c9
+Nonce.0 = 3a695d61c3878a767fe60e07
+PersonalisationString.0 = 6ff48f3025225d546dde80417d3d5b2b84299de1c0701f80
+AdditionalInputA.0 = 8ae522c6d1ce2dcdb504ef1bf6b711c175c9cf00a1dff209
+EntropyPredictionResistanceA.0 = ae91b9057a05d83cb53a112d88bd8ac46198ef25386f44b5
+AdditionalInputB.0 = 04f48051159047960379ab7096d1622a4deafad02a87d2eb
+EntropyPredictionResistanceB.0 = fd9e3a444038bc852ca480adfc6936d13d4eeb01dc078245
+Output.0 = b2937a849ea851948115cbe0b6024d61503785d5d8c6d9832fe52573255d13083aadcf8d9decddbf0b896c415da2ff4616b9c180cebb38db1ca91f688f851806cf0d31e8053ecd62bfa8764d4883999b1c27621311cfd36e1ef5fc10794e08c8b609ed52f01e8d8e04e46de04ed410a5
+Entropy.1 = 2380f5e510796ac54a3aa0975cfb0e183739520e8338f47b
+Nonce.1 = 9e25c28a7cdbef82be4019e6
+PersonalisationString.1 = f06a25ab66189a1ca4467114986fbe3980215574071730aa
+AdditionalInputA.1 = eccc3751eae1ec6728a06ca4c5d83652e696b3a14c4b52fd
+EntropyPredictionResistanceA.1 = c18823b4b5b9182566f2150faf74d7bb2b59d161c578fab0
+AdditionalInputB.1 = 129f1634ac8981eb856da720fb5c0c5f3b55b31f9a982f71
+EntropyPredictionResistanceB.1 = a29ea109637c6382676f12ea61d92846df578821133ccf2e
+Output.1 = 1f3961eb5903313abbf18b2043330a3e9b66fcea1a75da9dfa8d5b83a83085c8b91930acb8326a135d088e4d726d117eb2e18aa3d0c58ea01424262cdbe4cf2e56e2e0c69f75ecd68762abd584a58416ee6283d64eebb2f922bcdb02a5884d8b5414eed9eb6715dd33bc31e85cee6516
+Entropy.2 = 2b85b96020f7054f7a88c4575476123b4e59ff2ca056716e
+Nonce.2 = ac0f397056091e298faafbf2
+PersonalisationString.2 = bc014d1b2dca0e49b1a04168f8cebfde2198495829418187
+AdditionalInputA.2 = 3a6885d3ddb414ffec8b265ecff93cf5881dd1f5bff29813
+EntropyPredictionResistanceA.2 = aa56127c3abedfbce2948792cbd1003a7d64675377e1dae6
+AdditionalInputB.2 = 2dece40dbace418dd22b2ad417111ec76239891d80f4b273
+EntropyPredictionResistanceB.2 = 2a4105e42bbb73cb53682b95907257dd7de2b846b2b8c94f
+Output.2 = 1883d1650505dc78f6d4861db58238b7fc7ac88a12c61553cff9d5df485a4c6bf7fb56b59a2767fef6c3f7ea50fde9db4f17d2b40634d9e85e21299f5b352048d3be4e0ac9aaa540ea4b92ce6651965e93d85d778472ec1900bdc87044b362cf2999f8e27983ed8f859f0642ef8ff88f
+Entropy.3 = c4319624042b24b635f9ceb4f0c925c741c000ac0e902bdb
+Nonce.3 = 1ed7a8ee93e079e8d2341ca4
+PersonalisationString.3 = c67538163a21bf10b212af0a628f1dccb9180a750370e9f0
+AdditionalInputA.3 = 100b506fa91ddb1612ea5aa371009551cf3ea688262ce594
+EntropyPredictionResistanceA.3 = aac142d8eb63d8197791ea22fe419a8b20338216371edfa0
+AdditionalInputB.3 = 049efdfa0b72e4782193a6fe24472fa48a6cb90f84f12713
+EntropyPredictionResistanceB.3 = 0b3e2cf8384a348befcbef124a61b18b15ed8939fb161d75
+Output.3 = 0090c26cdb0777ee8a565598bafe67fd99f42852667cd65c6f8a0fde9656ce7a5fca71256dc54e64503b425f143efafff357846c6528895f8e3611937b739065b6f3419efd1903d811cdac74d8a81073ce67b6a18331d26f68b90c05fd248991be69b508a9cf4694ee0060cf5e72be70
+Entropy.4 = 8a641e7b8ff7aae610cf2ef8bcc0996687ccb585843c0555
+Nonce.4 = 0221c56f8b1ed30ee57d45f6
+PersonalisationString.4 = c27d21e1d7d3209b58b70a244e4cce7d1949416db0aecc38
+AdditionalInputA.4 = 42a1d05aced90d5e231792cdb6e45b25dcbf5135500d0c53
+EntropyPredictionResistanceA.4 = 1121c49b68f1f4be4b4f1a3dfa3879dc84922f92da611279
+AdditionalInputB.4 = e6f85bc4c629b69757425dfcbc4a40c20efa10d9a8a08c44
+EntropyPredictionResistanceB.4 = bbe33510a8209a815e77cb17006ec717a92c474785f7da57
+Output.4 = 2a70c6cc66027d2f20f8a6eaa6d4c60f067dda3f690e29cc19a4a63ce988cfaf09d39a9f742a9b535f2af404a68f3c80f488c75546aefa482c847d47a98556d9f8146a845b2611ef965c0ad0a9f4eaa01f3bc96a327ea6c8d934651fc5788439e4b29700db508b45dd3eadb3825ff68d
+Entropy.5 = 611b60f48fbc086201f3a98687cb0cfcf10af5566562d4bd
+Nonce.5 = 006f4bce3e72e7321eec167c
+PersonalisationString.5 = 8c0ec6787a76248a7af7574bbe71fcfbab275ce09eaf9ec7
+AdditionalInputA.5 = 54b73d0f0943f95c99bfeffb1fbc67aee1c872a285c6146f
+EntropyPredictionResistanceA.5 = e336d158464ad1349adcb24b07577dd4e86b6e199ae1bfa4
+AdditionalInputB.5 = 184faeb17cc3defbc0c9d5412123362fe4bceebd8d1b77b6
+EntropyPredictionResistanceB.5 = 392595520e56434cc932997d765ebc51b217a2c5b7506118
+Output.5 = 901edacea2fb6bbe2f3ee226c790ee666d15007a4e4128f3d10eccf2d6ef20a7baf2d1c98cc586de0ff0639fc9cfa3cf374bf0e7c61f57d81cb50ead534ad6b0524f6a7925dffc1e8e97270498a4f3c681c9672a24ab6dfb458ed03a776187f4281baae0d26ab680b0ca74da33c1fb2b
+Entropy.6 = 8be9265f3f0ff56b8f0152e7b88defdcddfdef4ee92998df
+Nonce.6 = 072603815b8fa3b5160bb9b0
+PersonalisationString.6 = 4e39866ff64b852c24d393cfb344fbdbf668338ee0dd9d20
+AdditionalInputA.6 = accaba678312bf3ee6a044507cc2100c24a70c48e7976e77
+EntropyPredictionResistanceA.6 = d7db69fa61bbb196e4561484dce3d841d411a8798fb76769
+AdditionalInputB.6 = 6840b17d6733c83c0ae3b40e79163bb7b61d9b0cd86785e1
+EntropyPredictionResistanceB.6 = 9b75c2c894d7058c9249b005424bb53e304411e52bf6e6da
+Output.6 = 7ab28260643a77bb176f66b35f8fe9acabe1cf42a4d26f2c60997f1d962580b8cf1dd662089fde31598e6aa702d5a50e94f7f15208b1bc8404468fef787db3996858aa1cff2a0db368b38331654e4b2339aad8063d3731e30e8627a38b353557b2185660f729ab96557ba4903fa3ecb6
+Entropy.7 = c6cfa1a7b8f87915aacab45a9f15ab9e25f920952dca0468
+Nonce.7 = 9b936b455053263bb3678a71
+PersonalisationString.7 = 46a1843ecd1c4953246a7f60d2cbde63c05106235f8f8325
+AdditionalInputA.7 = 5158851ab7357d80ae4d8786e90a97d42c6c58fd6936e796
+EntropyPredictionResistanceA.7 = 9ea3fb02f5b42a4ac36e3342109a97b57c79d9a5d4ca63e7
+AdditionalInputB.7 = 6e4de96f3dacb6ee445f233beaf15211123df616a4b3f67a
+EntropyPredictionResistanceB.7 = 1764d42d93ec54016ad1d002e48cc3eb0c88a94738742b5f
+Output.7 = 3c8accb1c827d533b7776b10a6fab8aced8ce18534fbd0d52c16d35cd1240d648dab30113a248756306fb9a59f3d9c50cdff0fbb213892a9f195a897c96cb1929c1f2f6235c2d16ababa5b7e3b3b08f5d403d9ddbdbed0162529effffcebde9595f276b9389d067a8fda544040edfa2f
+Entropy.8 = 1e1adc6d29fe15494026ff93e5b257dee2f16c9452457e81
+Nonce.8 = 57afa1dd42ed024814e9a2e9
+PersonalisationString.8 = f923192a68c6b35b941c959e773f1a4a2974cda431c454b9
+AdditionalInputA.8 = 7e8da314984b42ea39ba3ede804dc583e6df5044dd4e6a23
+EntropyPredictionResistanceA.8 = 4ceac788f700d0152d5ee927e9a5da6c07bc7ac350045232
+AdditionalInputB.8 = 0af520b04aecdff57f7017fae208aaf3ef9849c2fa1c2ac0
+EntropyPredictionResistanceB.8 = 1e2e65a63ee9210bdd4feefa559c09459d995b82aa83f7d5
+Output.8 = e35fa7d4961295ec333020baec0fd6966f915489f8d6464d4de8e6081b17125c15f0399de1f9ee51a9bea985cba7868c9b80fcb90b3d8fe7ff10dbd0dd01076bc317e3847881d72ab793564a6accb21d39f93043a9a4f9014fbe1f1cdb9ce009bac6949756f549013ae47ef60c7eb6c7
+Entropy.9 = be36d4dfa58bfc03e3dfe83c9a0ea4b22c919d2dc95ee268
+Nonce.9 = 3313ec38d83342b9dea6db40
+PersonalisationString.9 = 4c8eeaa1016eb4e2bed6f93ce7e53955b2c7ce5a336d0891
+AdditionalInputA.9 = 42624bfc1a9423ffe3f7d447ac1ad3192d3d88811744d5fc
+EntropyPredictionResistanceA.9 = 8c6f2fb15c5b9a85314228fcf3d67c5fb01062c9ce4d53b8
+AdditionalInputB.9 = c1c51a48a2aa9e7894bb35fb25780f4515e39656a80160d0
+EntropyPredictionResistanceB.9 = a43bbba947055cbfbf8073398592dab2b78b0b330c585e1c
+Output.9 = 1654cb6caffcf164d022e3d1e00ba738aeac9dea989db67725820ced70dc3b8248b0e887416542c9fa5aba7b9b503713f777dacdbb43c7fa43c1b9a44a183c5b039383aa59a6f93e2a92af615372f70f655ff9cf48c53c7fa37df7f2aaa0f86e39118258ae8535b20654b18af584e46a
+Entropy.10 = 7e78271c513d4063c0544d4fbaf437c29fe81bb698601437
+Nonce.10 = 23f8f60a1d1a40fcb6650488
+PersonalisationString.10 = eab1ee9dff7416c03a06317e076106ead0df233c71757741
+AdditionalInputA.10 = c1a851fcf4fa77a8b0d67fb0e462a1ea27c4957314edda67
+EntropyPredictionResistanceA.10 = d208997fed3d478bd9baf5e6ad4d3cd4eda5ee3020acf2b7
+AdditionalInputB.10 = 3221df2f9c7f2fcb14fdd98a6609a1717b597ca64c954391
+EntropyPredictionResistanceB.10 = 52d025d64355c86855596a20182dafa50cead5114a964653
+Output.10 = a14c1642491aad5d69a1a074dfe708ec9683187d341476d09f046cf3039d9a5e7cce5fd245bea2b08891e3cfb6b256658c5a1da74a0d4eb370cfc8dc063f262a6ef5caea5ee30bb00ea2260c67eeae5c0284a873b28e24918793744ea7dfb2715b6f519902feaa4945c16e39eb572820
+Entropy.11 = 9b733c6c6e341c7ec7ca48419d2a742e38eab6829a4d53c1
+Nonce.11 = 87ed057bdc2c144ba5f1004a
+PersonalisationString.11 = ac90bf335afc90bc02af05f1baa50a89bd7a714485a64f43
+AdditionalInputA.11 = dc5c6fcfce87f4d24b6df86998285fc417c1aaffb3bff5f3
+EntropyPredictionResistanceA.11 = 51e0f63c73a58f46751ca2d6b7bca8c5fac0d64d18c0683b
+AdditionalInputB.11 = 2084633895b492f42e350574e1713dcae3abeb920914082b
+EntropyPredictionResistanceB.11 = 4c0c5b58c9b3a16e512fcff899a7a876d8d881266e0caa23
+Output.11 = b03084114146a1caa6383c77c8d54b6a3659e681a9ef46178bc801fb52db5b36b5933a734e03a51e439c01f920559a6c4d5e86ee2e518273ba9d00a9fdfdd5c92373e78778af4fd99e90fef7fd2fd99ee062d425115bd8b882c2e1418de0c6f20b330e7f219027bcf9bea8a5e3b338c4
+Entropy.12 = 8f59189db0dcda43616f0205a7ef6f46e4bd1508f9b01493
+Nonce.12 = affa083efa9432e0a4de6191
+PersonalisationString.12 = 5460fbd2a245c50e7abdc210a6f25766819df8b0dd9e85d5
+AdditionalInputA.12 = 323e266d9334398bac03eece91f33b38566defc08269f66b
+EntropyPredictionResistanceA.12 = 25ed7cabdcc7b2546b097505e39f5e13e6843e8a16774b25
+AdditionalInputB.12 = 01b3b7faf6d5b74c20d3e6034c79abca443a356499599ea9
+EntropyPredictionResistanceB.12 = 033135066686a1b74e097341f7853d67a77876d97c2bf50a
+Output.12 = 04eabdbf2fd0fe0ec178e57b1bce65bc32f8b217b14ff58e92b14dcdbac27a05bf4911de842a6fe54199d617082a77063c92791d8a6c5aa5c9771e1c494cf0f99faf3597f69ce3a0fb2df432dbda06d7b010e6d65d45d072f028859554f7b21fc71d6fcf40dcac7534860289ac216d63
+Entropy.13 = 43632ce9248fa738f8a162fd33d6f50c45655f38e3b6e22b
+Nonce.13 = 550bfcb95de691a58ce03f5d
+PersonalisationString.13 = 7cb7bf42a251bf1cd0386da71b77edd7db6bc74efdec3b39
+AdditionalInputA.13 = 1b6579b6204222a82b35c4c7a6d3a638c79fb812447ad6b5
+EntropyPredictionResistanceA.13 = 0b194e18afe15f7a715d8c1b68814a7e595cbc7dc1b8b99b
+AdditionalInputB.13 = 23af5d081871c981e165475e63fd33a721396439a8675f80
+EntropyPredictionResistanceB.13 = a4a47e2d69c64d7ead0dcfe704e3cb55af2db51f2241599e
+Output.13 = 01b0a4f48dad338cd3801b350960b55c8c2240bfd29c20566ced8513c196716317c3d9998316a4e1379afff55621a20b8769c714bcf5ff661f90eba909d2fee3643b7c3c9e83ed6f9ad67d3703991fbb450182bc652db7ac08ab191a320f1ee9ab99846e100db20ea33241d1a565fead
+Entropy.14 = 69aa0a7b6b9dc7c7ab574fd5ef62f1ce44231b18d7d214ad
+Nonce.14 = 88ce5dfebb0ded5ab69ccfe0
+PersonalisationString.14 = ff5bd4eeb37a46eeed83a66802c76305b6e7ec224a83863d
+AdditionalInputA.14 = 821d1652e15b3ad97c253b276613c29ee853f67fe37ddf06
+EntropyPredictionResistanceA.14 = 0d9425b9cdaf71fa4d6d9c42886118ff379b5b108a2f1e26
+AdditionalInputB.14 = 29729358e5e488ac8924536a8806d242952da8ade0d4e4ab
+EntropyPredictionResistanceB.14 = 0a0148aa002eb800291d3bb5fedcc8a6b80897ce459710f5
+Output.14 = c97f446cd3d9c96f63782925178e879b3fdf0d46a2e67d2489a39c55ded3330d70a7be34128f3e8ea442989ba7ad90ccf7f66bfe1f7c1b17585cfb5786d764a44e39bc021e06a193254ec26b7b93e33fb883408756e651176a098a4b75b3ca48ffc4b66f0f5519592d529500dfb30287
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = fdeb466e4309b8a2228fe81ce1a6595758166101abee05c1
+Nonce.0 = 4b234a5590824facd1209b0d
+EntropyPredictionResistanceA.0 = 82ada646fc4d19146de9f76ed40eacddb9d30e1bf030ce31
+EntropyPredictionResistanceB.0 = 2914d8a6d13999f9cd65cd8bc1c0a58395f5437a9c0b6540
+Output.0 = e89f7a391754360efe9723865c66f030d14147affd85f132ec83f321c33a5e522a8c4b015a7c12ef19c6935ca6412e9b8b68ed736c587e9942fd2aca81a5608f6f1759985e973628575db1dafbe7da10c529ca98ba5e3f0f2b5007f5e148a72d1a5e40f0c221a347aec84a9845f6b883
+Entropy.1 = 427cf36fac4399481f19af280b8a28398ccf1efd108f4cd0
+Nonce.1 = 346ee0c10c087e54c4cd5f92
+EntropyPredictionResistanceA.1 = 4989e4215b19f368427469c10a142b269d588f5f4ea7559e
+EntropyPredictionResistanceB.1 = 87c0eebf8c8fa5296efe67ea92b8afdb9a0d642b40c2ffbe
+Output.1 = f77f27262ca16ec992a1655514f56d08237e1e81444d2550a2fc0941571e0bcf297dbe632b21ff59b0853fe50d7f7e44ca9580f6ee99df5db79cf07e5713aeca1f8677dc1334d8b5355c978dc2d0a806cf39505ca62d6b03caf0ee11980d613d0b72ff419785b08a795404197d883e2e
+Entropy.2 = 503c1fae0752fa80115d3a8f27fbd21689ef0b54e40572af
+Nonce.2 = 58c45ea56f830807b27d28e0
+EntropyPredictionResistanceA.2 = 9200dff78ff8785a7bfacbedcffd1b7382e62834b73b5689
+EntropyPredictionResistanceB.2 = 8e8e95e48c4ac6d2d77b5af3991a3b17705ad3a70fad5db2
+Output.2 = 0508658ffb62fd2e2df49733703ffcc042a9e3dfda75b72c0fb323aae30a83894f96f23df498e2d6c3024f117c87396dd75992b23ac1409c05bd4d88ca62e1e97985bcf74f7e686394d8f2b40e24239baa6c3b961ab7efaad5a95978f91a03fd34859d489b5e75b53b7c1236f4afc5d5
+Entropy.3 = d8b1ddb25d71860a2c333591c32f60d94dd9d4f9af553064
+Nonce.3 = 7c23e5f7bc5d1807e3b7f170
+EntropyPredictionResistanceA.3 = afac0f96310aa1cb1eab50d8a237af31003f4039647d7acc
+EntropyPredictionResistanceB.3 = 7665bd89749212af51aca8c057b7edde03dec7fe3bcf079f
+Output.3 = 766dc170924d58137751382cb823ab478c5a2842679ca1b8582329b0380e2e69481af51e7ffed471d6ea31d714ff9e98463e6dc31306ad41a47815c917965ebca560abb97cf8fd21d17b5056723090323d92e0ebae648b9f87ba8cce45299b17aee9fc91d84fef717fd4d8fe6259f2d6
+Entropy.4 = 95b81e2ca4d5555bd1d0438ad63f371d8dee28273cb3d319
+Nonce.4 = b8903d11931c24cce4189b56
+EntropyPredictionResistanceA.4 = ca75d0d6600899e6aeaffcb4c150e3565bb8b51861b197f0
+EntropyPredictionResistanceB.4 = ddf49645396a2886900692f8ac060bd8432f8044543b49a0
+Output.4 = 08873127e09074fec3808ecf09c1b34b936df217b1843051feeb67c7418f1822aa8fc316e5d7fea192bd1546a007da4a438a2a9b0f295340cb5c3bfcf944352f0c320695597d31da88c6506f0060f877f1b0b327680266119db272ba28eee8eed53b398698325b7934c015c34cb49099
+Entropy.5 = 72f9b89742516e2650c872b20f6e4d0c8c13bfb899e27b8b
+Nonce.5 = 073fc37e45d6e500f3d7d05a
+EntropyPredictionResistanceA.5 = a6214afe6f883ebc1ff5e586a24aa8075f20accd38241014
+EntropyPredictionResistanceB.5 = eb3a2f7ed62a53adfa0c26b10e2a4984447365c875d743dc
+Output.5 = 1bc5f4982721071e134b728f891d452bcbc09b981a6a694de23541385dd75e18df08cc7eabbc93ad0255c6a7763f6a9e878bc6605f9ab8e96c6d0a9b4a79f428a52036728ab46a4245a5039ed473cd1c8ffc85e0de5408e8950572c7d417b40a30f41ae036e6188a25cda28032721871
+Entropy.6 = 62b10195df71d68f9454bc47f233d327b3ec6d84be185a45
+Nonce.6 = fcee395d9beff78ef351662f
+EntropyPredictionResistanceA.6 = 9f6fbb92a37aedf9c033b7345deae9f2d917a937ff0898b7
+EntropyPredictionResistanceB.6 = 0f05043eac8020e39c8614b1336701d9b261bc9e6e159629
+Output.6 = e6050e75278ffdbe91090b6004bb6302a1d9e750f0d10e40237174fad9460ebed2036ccdb193fd692577244202608d20a4977b9c532af7bd802cb4d4e4c0158eaf5cd074d8ef9e6bee260989be8e5bde6b2f27b6aaa241e5d4f58f3d1478910bfd31f4772144104bd96ac79f60366860
+Entropy.7 = f84dea77a2b7032ea11aa62b63ba42d7a3109fecb8109021
+Nonce.7 = dd3282f2cc16ac1bfbc47976
+EntropyPredictionResistanceA.7 = c12cd54dc9d9bc5f0339c1ce2d8708aad82603a0f1ec8e07
+EntropyPredictionResistanceB.7 = 5f91985a1272ddecb1e7628eed46179ad655bcd18d8f31a2
+Output.7 = 77644a16ab4154c02ddc1d657101fa6afd6b68bea48f5f86e616590d04c6b8f33f6cd7cafe75ca98cedee642f5289f31f4b728005aec3a7ced828ff656775ff14ca47bff9cfc6cd3a48a4625afb5247d9a3818e3e027b87f57bc2a1508aaedbe39fccecf16f03dbabd7ce76dcfa4278c
+Entropy.8 = f0c6d98b7caedc931d698ed7d230e7d2b38168979601fe19
+Nonce.8 = 5fb5456bb69dc32be1631386
+EntropyPredictionResistanceA.8 = 29d05d2ca5e06fd324412e27f62e87a8ef1470e903506223
+EntropyPredictionResistanceB.8 = 136c7b1aefdb2bade0a267a2cded2cbef65435411c0391e6
+Output.8 = 1fbcb3d6f99de29215b4c93e57e81a13e15dbd9f416375d6fa95afc676a1fec0b126321356a7e665a12d1503c8325c68f63a0a4741d774b0ecd631d8b654f7f1662ead70ff186c26c374b80d9f29890a8f49d5689d0881174fee5cac3b0edce20b6f087421ce66f21efc20aa55e176d9
+Entropy.9 = 62a02f883c3207fded1c45af70df47d57b7ccba7541f8d7b
+Nonce.9 = cae988edaeec66f5c5d5d5c1
+EntropyPredictionResistanceA.9 = 2472b283403bf9157d950ee2aeaf0b0458b17a49b7214387
+EntropyPredictionResistanceB.9 = 827e830c2ce8c6523ae243ae6ceee6520675246917490b38
+Output.9 = 2c4eab9bdcb01515f56aecc82d7e7acd69ab54d38927fb4e72d624807d04c767930aadf81dbea390de269cf0b53e7ed521730b98c77c900b2509f26861c9133eac060d48fb04a66d92e1cefa880ba66fb8967942fee8f8204bb2af6adf45a3323ed525d85220811a712cce85dbf13a26
+Entropy.10 = e3a302072cb86bb24cc53212db7abd6aa6b3b2348f6719d6
+Nonce.10 = 7b5b75e097ccca008e21e469
+EntropyPredictionResistanceA.10 = d16f812aae5e54f645c1998d07a00bec3dbb5c2997339853
+EntropyPredictionResistanceB.10 = 829f234a36a82e630839693918e1aad88ef27acbac65e811
+Output.10 = 2f44201597a8e12af2707155eacb7d49e7c538d68228acd02bc2a12dcacced7881df4910bf1dd8175e17ad8e8a14cadf2f95ef253fe1962b13684685086a9f726644443cc814ba65513283f2ccf3836ec384d8de796028cbe7b289259fbd0f579aa3993e3c2431152d9d71a535fb68d2
+Entropy.11 = 992902222358d91f30686170c04be288a2131d5cd639ca06
+Nonce.11 = 396554f22a6e4d59d98230bb
+EntropyPredictionResistanceA.11 = 7bf79eafa4d782834b82d5c032c894d079a4eaebd7f41803
+EntropyPredictionResistanceB.11 = feaf6244bd4af84912e4aea7db80427a7ee9da620e01fc9a
+Output.11 = e37ec0e46ca84028b876559e5615aec7d712bf6e7d6005252fdccdd5cb4752d2fbefe0fc8f4a27573fc07242ebf2a065fb9e0b0a8cc51f729134efc6c10345912afed969f87a306425b04ee201a678f4293454cbbe44283cbed72d05da5badb853d32a48135789e2af3925303098e06a
+Entropy.12 = 1aa5389df653e33320f7ebfbaa676b50b1049418b5b7b341
+Nonce.12 = 58b1f19a8a7a915e593ea8db
+EntropyPredictionResistanceA.12 = 670bf0eae0d1db6ddc8db81468e599c62b6cf1459b2a1de9
+EntropyPredictionResistanceB.12 = f0243af7be19c3b930a5338a60cea661810e858fce608c49
+Output.12 = f96560328b4a1331fc32d173da8a3467d9419e8792ccdd611c93bf0f9d2ee817be71692fa721683e39e4a91245bd89967a03dbcf886a0aae132668052a4b1236f8d0c064f26ef9627cb69372ebe9e55227224a03c9d1f60a3a7a613b78cc3dab8ef9e2c38b4c52689d4932f46ab31bee
+Entropy.13 = 038f379ae887f3f62b805a6f9c48414dfb7e473f8a376e69
+Nonce.13 = 7da42b5e5522da9e5f410645
+EntropyPredictionResistanceA.13 = 79d219efa77f9c4a949c2dcbe686d3e9626539ac6d0079b6
+EntropyPredictionResistanceB.13 = 4aa4046949c4289e3938fcc19b4e6474a1d2c9f7e9dd5cb3
+Output.13 = 41b0fb494e9cf7afdcdc2c9aa2d7e5301c06acee537e16bbcaf360d4213018737f8714c718543d2441fa9ec15e765363f0839ec4b7d4acf520166c1b32e62c7900fb5f5fcfa4dfc6a114932eaed45c8f24e8b50692abf458cdbf4f0ce04ab87cffa9b0645c44167ddfbe9b6afcee7e0b
+Entropy.14 = 114d331825217a74c0d8dffc0109b28dafe835834738a31e
+Nonce.14 = 9b5d1df900129ef19e670e31
+EntropyPredictionResistanceA.14 = 3ef188e76f0d26d790b51c9eea46b0a9d15fd631f044dc09
+EntropyPredictionResistanceB.14 = b2d0c40fc7c3e6fa3fa030d54f4548cc664ad604eb9ebf7a
+Output.14 = 966790327a7fd7dad98fbfc5c86d8d678d28dccab766dbe0a10bf917b59e85cfafc1a948b0abcd89fe6cbd30352e8c672a849b2b6b598b495719303d17b22f879361078e1dfc13052879e7fb8613a0d5fe764377e98e8c4d41faf8aac94ebd299caea002a93f5e56b6a78e6869190c33
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 46708a35366035a0286f38fd119669ae724d1e1511f50b8c
+Nonce.0 = ee98e2ab0a20a256bd6d5dd1
+AdditionalInputA.0 = ce86bd8b48220beedf575994cbbb75fda30cd55e088c6bf8
+EntropyPredictionResistanceA.0 = ab621ed77a3cf943bedb82ffbe84e6164986ac7a50d02eb3
+AdditionalInputB.0 = 119561645aface93eb4f095c59feb8ffaacbfd6f683043ce
+EntropyPredictionResistanceB.0 = 20071fd876b7e248095fefffcba3dc3e655dcf07739ac869
+Output.0 = f4d55bbe4ab8f062f2c1ebe848040746d4612b2a9f634e8d207c435ead48e5cb99474491a34c951a2576df4291c586b1a6c862f03b44cd0a7f72c485c71469602568ea7f4e1cca01ed20fa6981d0c8be532c1c07744dc48f8f1e646f1dd9109c17bafd2ac62c0bb1e35ff61ed65f1098
+Entropy.1 = ce7a95fd946818ae342a4590f1e961b44be3da66dbfd957f
+Nonce.1 = dca595991fc10efdef39f67d
+AdditionalInputA.1 = 506ee12752a390651ac8a3344ac4f24412663e94adb2fb9e
+EntropyPredictionResistanceA.1 = 9658e4a12fed7b002029c2faa05f7473b3d65c8aa427a3c4
+AdditionalInputB.1 = da341aeae035667d60ab4187cac677cad0d51d2160acce5b
+EntropyPredictionResistanceB.1 = d7764f883303b7fe0125bf64a507fd8403e5992d0a9f114f
+Output.1 = c312a0d45fc2ae0276b374b38a56c596634b21815ea57b2d715176f4b579bbd8e0515021af644940001d57731a9e8f1ec80ff63b5eb4e8c4267a0301de3ffc724015d71779e07498b4be1059ee3ea611f052824e93c96682c5080b4e6372894c5c73769942c29b28ff24d45d0850e36f
+Entropy.2 = 9f6067441ceb9bb41f664de094a23ab14380ba7986d0d595
+Nonce.2 = ece68eb1dcbb66be6a5fc62a
+AdditionalInputA.2 = 80644cee8e564f033f2b950cbe6720f3134666e9e5575da8
+EntropyPredictionResistanceA.2 = c9e375996e43ab33af2ef0019e7701e2d088f0958b0530ca
+AdditionalInputB.2 = 4709376ee7b62f3c7f946b6d029f73c00a979eca6b661e2e
+EntropyPredictionResistanceB.2 = f37078acd532156f5c88e6d953fa8b85e7b462ecead5f966
+Output.2 = 13284ab4505bee135c47d322bb0ad37460311d3b13bf475e6ccfc73ba325d1f771a4ce7cad05ab727877369ea756d09d36e6000036601c8c96db3b901bead528eaf89efd701fd38633e642faa7098d9ebc9343541c787ea2a9a36a77b280d4f3ec08fdb49d7c13373cd444d6587c3853
+Entropy.3 = 461728b143547c5d08b07faf3ec3b92f47e7f10c5782ba29
+Nonce.3 = fb4fdc18b8a01db878b71094
+AdditionalInputA.3 = d599a27aebdaab9c70e711ef9505785632a9b166fd490203
+EntropyPredictionResistanceA.3 = ed444dcb224a56c8d7d3306dbd82cb5db9ed9a1bf5604bc3
+AdditionalInputB.3 = d94652140a977d72d455d78eb644079f15f30f31ada84d3c
+EntropyPredictionResistanceB.3 = a2c33da9f1be22665df56b0f75f4ae86958f6fb8460568d3
+Output.3 = 113d3c3b3da523c5bb830bf27504344fae6ca105e3851e179082c1d95d84f87b268f0b425085a5e120c6547ba3750161d82d289f2321335e2a67d090dce6b872f557f15756280055a7bfcef5c12ef05e25e9b896666e23b1a2a54ed34d7b784b14fa0f5f4ba1f38d3efcbede9491e5e6
+Entropy.4 = 5dfc8ab1f1aadfdb955b60b9d0016d5e1ad2a42d3460a205
+Nonce.4 = 1c97a1077e4b0a2b0d2861e1
+AdditionalInputA.4 = b2999660e8553762049aef833fc7992c3a4a9b7035ec44d8
+EntropyPredictionResistanceA.4 = 2a753e957603885f4ba5781a1ce240c17a226584f9765a2d
+AdditionalInputB.4 = cb86d9cef4c3d5baf04318517e9249f8fb8f1db8385691e0
+EntropyPredictionResistanceB.4 = 41acf6fb5dc89aec46bd0ca22dd37b4a99af00a0afc1e0af
+Output.4 = ae1ef1c96773e9ad666b63852707cfd0bb5838361e77b3f56faae3c03b0ec3c783c80024c54817e73b1887af8ecb7dc82d5c9563410169cb00493812c72208fc2ca99ee1fb9f39a3b4eade0b621ec0733cdb27fd7b079c4e2f4b518a50091c1ce6aeceb5fd1871b316929e3e906788d6
+Entropy.5 = 068dab0a93d8bb0da42ad87cc97389dd36df98e200fc2b2c
+Nonce.5 = 700631859556ff80b4de5a5b
+AdditionalInputA.5 = 55c90ed8811201fd375537c337f03da1026cfa0a4564d486
+EntropyPredictionResistanceA.5 = 678b8132523ce3abffd30e60cdac519bb50f6d17c9d2dd3c
+AdditionalInputB.5 = fa2d9e9740979ab50efaeaa3aa03a27ceac0e3c4c3bb3d11
+EntropyPredictionResistanceB.5 = 5aab755e9a6f42fd586c01f58ca6f6792f3bfab64a9a8f9f
+Output.5 = 866c6d8376c2247e99edd470ceab3fa265982328e1b754c9719dec644bbac3ee4cb6d5e6a7654e96f214bef77c312e394a52299e95c3823afb77ade23d3870634ae7bbe4fd7f8ad3a00bf83117f8e02736d305e5ecb8c25350a3204efaba10df812be53cd459dadef278a0c730e13160
+Entropy.6 = 4849dfd0f4fd546af1a0440bc2f992202c930fd330d93816
+Nonce.6 = ec74fb19e7c4aa1fe2396a02
+AdditionalInputA.6 = 643f1a6273800708905579775be4cbda7cbe2b8389842fb8
+EntropyPredictionResistanceA.6 = d8c4557bec0f80e302c6d807c36150afa986da0812baec55
+AdditionalInputB.6 = aff3e0aa1c34eaacf67aa77745ed2a4b80290d8786ca2992
+EntropyPredictionResistanceB.6 = 2df4cf2dc5344dc3107d1f902f7c8e6057e4207c33bb4742
+Output.6 = 70ae2cafec24507dde8970ec1c1471a6da44b387b7eec632a3e437050a780f029cdb3c25a20d4ead089c37a4f1fbc61d8e26f6d98db6f11de8389599a440b4259ec105a268e10f976a13bbec3b717b6cb84683becbd1db531b39226abd9656be859bc0540101fadb649cda0709f50e01
+Entropy.7 = f1f8ec1adef2197070815990749dd85f15139c4fccf6019e
+Nonce.7 = 889a01eae0d40a2c9c814de7
+AdditionalInputA.7 = 823a59dd96710850e9d6374870e39f592e5e2c6907fca85b
+EntropyPredictionResistanceA.7 = fe5bc6726a3d53662259a771a9c3da833221d6ef8f4e0da0
+AdditionalInputB.7 = a3db13db6c4ecc392a7add1a22a61fe1790e1bc73126185d
+EntropyPredictionResistanceB.7 = b98987f583224570134bb42dfe62c09042680056ef1bba86
+Output.7 = 28c7f7cf184d5f92ebc0eb955f3a7f3f4dbbb22eabed29f2a66b7d66713609580691463b0939d1642bfc10158f6ee66bdc5c8da38170900e73132ae421b0850cd5612b9d96a0c0ebddfebff13175be164320c2519ca80f81af5546357da548a10329f1c6e637dc3cf6f477034026f651
+Entropy.8 = 574bcbdcd698dd9085e7ef8f70a70d7da8f99a781dce0e2c
+Nonce.8 = ff9a10b5e68c5d077c31a52e
+AdditionalInputA.8 = 0ad69b8906666dfb620d56374c4063a31a231b6ea695cfc3
+EntropyPredictionResistanceA.8 = 63a47dd3e8c04f672efbecc6bacb002219834f8ba1c18487
+AdditionalInputB.8 = 9b4327917f6fcad915741e84092f6e780fec07a8c41a1f8f
+EntropyPredictionResistanceB.8 = 3c19ce1c74c16c94394ae1abd01c70feb8d14bc59ac3ea2e
+Output.8 = 2c81789900c5e9c0e9c0c1cdfc7551aa1193da388e81d0b46c0c6624d883bf12f8c04cb7c529bf5997706adf598a54105c6bdf32a64433387db58369e625420f718b932cd68f061c9b62e3546d6d258968208213efc594eadcab2ec0755d2606a68537463b44bbbd4f34a77d0d91eb7e
+Entropy.9 = bbb5c3d4e2893cdecc3f0069e35eb9089248eb77c5db6c5d
+Nonce.9 = cd11f03eac488379827d795b
+AdditionalInputA.9 = d987a25ce272356b8c4fab8f38855e916e091e0c2a09c294
+EntropyPredictionResistanceA.9 = f5a002c674db5b2fd38a4645fe29eb645b54131bc3f6230c
+AdditionalInputB.9 = d26cf881ba3ed367d669f12c275c5b81f651bd55954b70cc
+EntropyPredictionResistanceB.9 = dc54a58d4b1a5c9a938a9a5641f9b69370ee063fa4aac8ff
+Output.9 = 1233bffd6f8f2ccb9d4b2c1705398813d726a8ed2e1432a24f755983de3aaf0422e11cd28777413ea8df647a387600776d0f0537deabe7e237fc6846de3c7c63c3e262259a7cb669d3569a27a7a58a898249a274237c97f4c5a8e69d5ce47b5eae0062af413e35b38c9e7f9ec0d18de9
+Entropy.10 = ff545a76b45f1d9b14f9442dd56a0a1d045b7c11691bff44
+Nonce.10 = 9d70e7d170d9306dccf76a48
+AdditionalInputA.10 = 5fba52471e1f877c96c550c6bcf3a4f44a11a4749904f2a3
+EntropyPredictionResistanceA.10 = 72b48f02a826b76fccd5473ce20a319087d1ce616bc8924b
+AdditionalInputB.10 = 988c12e78b9a3c274d255a5aeacc1f661a33f041fa970b0f
+EntropyPredictionResistanceB.10 = 455b42fb6cd56df751e3981d71f9aef109ba4845f522c028
+Output.10 = 085e99b74ada18342df1ef5f55cef71ab967e5855a93e28ce340974fe2b01ba1cdcdd888917b2b116771677bdc1a9898dc33cc0abfce9b71cafcd79177d67f7fd466d723f16cd6b2536a6050c4fb578e4bd49ecc70c4cbc24a0a420298b14aa327152d19848e899dba81003c7eeab3be
+Entropy.11 = 1944ab90b5aa97ed63cc9e62f98680ead9ca78c381ff74e8
+Nonce.11 = 5273f83c55a4f365ae7b8550
+AdditionalInputA.11 = 489c0feb923772e438ee543caa5c0b6a78098e44a67817ce
+EntropyPredictionResistanceA.11 = f4ce2d61f875101a88a8d18276e2cdc3b20fcdb21e6353eb
+AdditionalInputB.11 = e6005ada4c0223a1471d429568737ff06c2e4298560e22bf
+EntropyPredictionResistanceB.11 = 81733e3c96d1214b6c7ef124e0f01a6330cbc5c30cd2c620
+Output.11 = 7328612b15ed9eabd9a285c855ba7803d9307b471f43fa76545b735227b4b4accd57fec13b1305ef27cafd2c2637c6b059a18a1ffa519059afee354abcf254998aa3cef6d60736d9440d2dbb4e8edd3b63e4309dd608560fe0702f31c2bd0be1be4569e9ed953b99e6e33fafb8f4dd28
+Entropy.12 = cb75adcae370d197f3d292d08916ee6c12afb9fef103b1a6
+Nonce.12 = e97911fb99286245577f3005
+AdditionalInputA.12 = 774a5b85fe6af1f4d420258546a973878a4e39d240dbc57e
+EntropyPredictionResistanceA.12 = e598213733c35a020ab40e1bc6495dfc51b81d1f2918c187
+AdditionalInputB.12 = 34acb00857403d8bd9f6f0a0d675770effd84c21c7c64385
+EntropyPredictionResistanceB.12 = 9a5d769d7029403b79fe2d706ea4ef6694b6f41d677cfa3d
+Output.12 = 243bf8e5d5ce6abcd56aea493ca3990a4bf6f2bd58eedc900d6b6b6127a2ea5033712f79d7bc2e8cd5eba1ecf3ed150ec944fcbbe981f0221f839a9de1d2fa6e03fda68bd2e1eda8ce789c9bbd33c78533c8eaaf73e68eeb572a72f5f75add5c05d859af2ce3b1c09d05e0f23f5d6901
+Entropy.13 = 1f55e6bb4dd30a15db74a0bac3ca02fc30cf9272f74edf65
+Nonce.13 = 4a1fdcc823671e086210a00d
+AdditionalInputA.13 = 85f5ef38e4fc05ade6b4782e9843f1b5ce1dcb8981a2d5bd
+EntropyPredictionResistanceA.13 = fd5c865dba8fc45933b65c06de14f106c129c3bdf481c6c9
+AdditionalInputB.13 = 283a7aee56bfcabeeb86fb80afb5da1b0a783d96c8766f8d
+EntropyPredictionResistanceB.13 = 74bfc2cacb2ce742c68e8944f2dea0c7876676fe1576f7ae
+Output.13 = 121ba099d510731a7278bb43b9350b69d14b30b3e8748296929b3141d7abdf14712819d6b7a5e525b443cd3f70b3f14e93cd051a022a26da2ebec15c796c93d3833adb4a45c4dbc48c9a1ab44c5cc5c965e03ea3386d16c1fa85c6e9f1f9b04653507a9810af7a5f1d3a0ec9def3b4b7
+Entropy.14 = 0db6a979b230ddaa512e557797b2f55fcef61f302c7f73d1
+Nonce.14 = 3ed49501b5875f05ece3cc27
+AdditionalInputA.14 = b0c9efa845b2da331c4bbc63c656d0a43b285411d190abac
+EntropyPredictionResistanceA.14 = d007a831faacb0e91e38d87123f4cf37eda38bab3c73ad56
+AdditionalInputB.14 = b4c6dec979f2875bd6ab575c884b9c82a7f87b0e8536fc63
+EntropyPredictionResistanceB.14 = 812de24e2801b83b5938cf87ccd697d29e1e47dbb773e8ae
+Output.14 = 42e656b2bd89c6b87eeeb4cbc88da7b7ea63f2d0e34ccfda69f1306982727b65248742030974bc2013af0fc0e04792ac57a6b33f7a0e1c106b4877abcc43649ea67c7706c2c6a32341ab03f35ef5429b634c546ad46e9f4ed65835246047ec510de96d544dcf5cfd5cf38b1191844699
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 95dcd69e0ef1c3a92b9912a8ead267785310ea89a48815cb
+Nonce.0 = 301e56d4c6b5c274ac4f352a
+PersonalisationString.0 = 84f364feed6484723d1ebbcfe656ceebc704ebbc03b4d819
+EntropyPredictionResistanceA.0 = 118c439184ada7eec3a3bdb4463795d67701976dfd0ba187
+EntropyPredictionResistanceB.0 = 5140ec90bd15399c5a53fa9561110b0400b3187741d072f7
+Output.0 = eae00f0d51b0fa25dfc07ae98aa92f714ad1ed7754ff0e0078123984bbd87997ddf65388d017b4437afaa65d0b11106db7fa6e822b1126d03ec6a0cddb11d0064e7a2db9d81a8f40598d4241a18a859cf12d385099848cef491a74df17d007b412bf3124103d55f5502db4e5b0191e67
+Entropy.1 = 6b145d318ae5ac2cc9ea625105c4490a0c95f8afbda1e354
+Nonce.1 = d2d8339997acb7aef36d891e
+PersonalisationString.1 = 6f7beec07666419725e8f04f0dc220f820d20cf7e7e1ede3
+EntropyPredictionResistanceA.1 = 2a2590387103274c0fd681e5a6886fe93bbc7a948bfe71e4
+EntropyPredictionResistanceB.1 = d131dcb41c4a00800d234acbdadbb076a22f5cbcdfd6c51c
+Output.1 = 3c1771b1753e3ed1b35a1cea32738fdcfdf7a90e6f3415897c81cac6c86dc419570ebb8a6c8a1c1f17509ab46e5d2f8e7da3436e0fce941866864c1b342e95ff56edccbe7a37725b6cd3e4aa9399d9699e31631b3516bd8d3f4e75e82cb3c8f2a9c784f92e97f146441268616fabb7de
+Entropy.2 = 9adb81fc2e0a8998b76c0b4b870bd1a89ab8ef3cb0932088
+Nonce.2 = 3e2d2303e7f02f71d4b6ea02
+PersonalisationString.2 = 908988995435fb0702a61e50ceecc79d1d219a4c8bedecfe
+EntropyPredictionResistanceA.2 = 1feb3c83543d38396ce13f3b7be94ed866e48874a09028ed
+EntropyPredictionResistanceB.2 = ffcb380db098b2b7494474e9b79289426d39bfe2ef1f1d9b
+Output.2 = 1d27047f28e4e4fc9de8b6447ee2c15139f1068457c69aca7212289d229e4fe3998cc39165c53bb7997101bd0eb46ea089e059b1a0a242ccb4acd4961753f4865d0b9cbb178de1202e22ae8fff0f97bf9f79c3f4561a73f898e61b4df61eba7b10f3de58ab3a356f7660914f7d85805a
+Entropy.3 = b6f026e55730fbeb31f0259db82893fffe2e2b735cabedb3
+Nonce.3 = 724397e5abde6bdba8fa182a
+PersonalisationString.3 = 7f2ac8fab6fd8c0435e2c02b35ffd57abdd8848b0e94a693
+EntropyPredictionResistanceA.3 = 9d9211a77b4b19db3dbfcf4b3c1b4f808802e322e317d6a3
+EntropyPredictionResistanceB.3 = dcd2c3219e0d3b7e282a2c1b48be5bc0167ceb551092891a
+Output.3 = ba96fe62deb7bfb34c43418f20fc6ff1780f9121469d9ea85dd8f4e4d1d54be36c92104f8f435e76c992b4aabf1bbd5087defa7f5c887e73fc13ab93756dec3a5409025a1424ce218c1c8c3f474067e14278fa6740b7014ef0a8b6a04725226a12aa42bec117b3924118dc6f1bcda70a
+Entropy.4 = 7cf3a8aa57bb52d4e947c5dbb7638e9cd3a495efc04b54c0
+Nonce.4 = 8e4d0ec03b52c1d4a99553be
+PersonalisationString.4 = 84d477cb35ed5accc0affb4f4c7019c27ecfc0ee0b132304
+EntropyPredictionResistanceA.4 = 78005eb28ccc59368ee1e3df115583f8a53257c4ddb540b6
+EntropyPredictionResistanceB.4 = ef4e7f4f5aa9e05f26a11d614e6997e2b7a19b3416db0c34
+Output.4 = e2e3de7a1f7a0f9f1e461c0ab81faa501fc31af92b29c151ace6195d470a5f1b1faedc9a62dc59dd51ba3cb9ec138e2e88de7db6a3eb6f0de3b5a9088ec8067a2359738f9922615f547d8cb89f03d8b969341a405be2b8750859566eb4855483591e0a807d9f49019e9b65de60a327b9
+Entropy.5 = ec40a274fbd9777cfa18ed7f3206e4f2efd88bb81aa8577c
+Nonce.5 = a46ed619e6db1d45f8fe10ea
+PersonalisationString.5 = 9802824a04983ca3b45ca981a9f39c0e10785aff8a5c037f
+EntropyPredictionResistanceA.5 = 7571e7b97e86d89329d881428c2979d7e219addcf698647f
+EntropyPredictionResistanceB.5 = 7ef345cccb06f0b9fd80fa29dd649e823694082859ef00b7
+Output.5 = 5645b7dd11de8df6b8d854f1fa1db5694afb1df7d9b2988b48d97bb6928f59cfd0dfc1cb4d92dd3f638b95d0b1c7a2e4f2f08a6ada62f0dda2474293c49c771ecfb1ea86cb98729ced6f65adfda57de9481aef4b2d2e415d0a521fec4b68ad2cea9e9c62300869e9aeee943275b9de69
+Entropy.6 = abf6647da9b9de119aee8fea8224f39aa67110c779535856
+Nonce.6 = f07c05c16adc5c79b2186c68
+PersonalisationString.6 = a6c323c2023ab4fab333172fa6986c8f5eaa8d93c29c7737
+EntropyPredictionResistanceA.6 = 242394a5f236a7484266ce8183b95e5f61401b131c02b9d6
+EntropyPredictionResistanceB.6 = de6941d06032af94d0ed7324f21bf6962dffcc43471e71f1
+Output.6 = 14c543a9396376f48ab51b9b43a50807b2500489417276c3bbefb5b3bdb7bce2edf935ab1b19a991525e7cc7a14124be99381260e2f2c6b80cf02923a2e47d1466a07500ee8363d5800b791765aa1f036e52fb4c7ef162634efbbb9ae38372f5ac998fe66adc576826b30bb1ca6af48f
+Entropy.7 = 5fabafe19575bd202592114bec86ba3059704361b044820b
+Nonce.7 = c15ec19f17da8395bd348edc
+PersonalisationString.7 = e9302c67fd08a803536063bc71a14bee104385558a9b384b
+EntropyPredictionResistanceA.7 = fc7518b3a2a76812937fc4e2c8b7fc990e4b31e3c156ddd8
+EntropyPredictionResistanceB.7 = 29ec33f3a80be16cf35820ef8b7937951b9596a51e9e0bc4
+Output.7 = e13054a8ae29601cd6459adb552b2e11d696178ef0db4243f7f6b93e755bfa5aff472e578435411196371062ffd0b97d92e7d33fa2d60d735bbe9a87fc688aa3b4af7e757b8188096577e0c3ed4ccaccb9dae27c4b5f573686ab718c13e8adc0d72a59c745f310c151f19768648a49a7
+Entropy.8 = 2e9e53333ee0ad0baed0bf8bb4935156837f8f5140384736
+Nonce.8 = 76c2b3e6cff3f176fd0098dc
+PersonalisationString.8 = e7a318c1c9adf1b7a4c5c14e5080e1152c4b0385de627aa4
+EntropyPredictionResistanceA.8 = 5d6a33514e71392cc89a1194ba17df76952e97ff57c51631
+EntropyPredictionResistanceB.8 = 32cbd0bbc2a5af91ae64c3840556ca2e4f7abbaa60a789d0
+Output.8 = 1648f4eb24a3d84b94ed8826db49bb541d550dcc3eb9805a0595908215f24f28ff8a45ee8b58d81d3746c99c415ff5b850662b7c28893f1f112aa0b4fda663478c4f538dd7f73db62dfee6c6248463962eb1ea92b5cfa90f4c58e97fe47fe5ea9916e95e29f457291cf1863917ad6a14
+Entropy.9 = 1f8ea61a218fd2cd7e225c3702e53466438de78bd15ed871
+Nonce.9 = c22532f0e8634872096416e1
+PersonalisationString.9 = 75eca917f48835c561ae465e7475fea4e12ce16729d1b6e1
+EntropyPredictionResistanceA.9 = a7b3974d0d047da544824ae9b2d8cf7157a9ac515a7b708e
+EntropyPredictionResistanceB.9 = 02a7556b42bc7b98324b9389040b9af6f79b516beb899edb
+Output.9 = 5b7dbc600ca6ac63f5d8241211af0991a7971417ae31b528a719504073dc89892965074fcce1c0c6c04753b0e273453c47e446be67df1180775e52dec71ac5534c84f13db44fc7785150348278de6aa239b53421840de399941c61a696793df902efaa14d7f1ee68ed2276450fbfcea0
+Entropy.10 = 0ca930a4be2649448fb5fe98861d821ded4a3df2f148320f
+Nonce.10 = 740f584b033b9b46afc2ecf7
+PersonalisationString.10 = f8fc0ddb2a4ee8c03aaebd90792ad6826f32b53f8b7457bf
+EntropyPredictionResistanceA.10 = d1af55ee852ae752d564ca9cdb9bc293683bae83a876f570
+EntropyPredictionResistanceB.10 = 366148f67778d942c08c80279a4fee1ea175ce401833ca3e
+Output.10 = 7c87993805144dc6b5df7c0b01b716708168efd5fdf4248045dfbd984f08b976470c443b7718a662235fa121517175ee2dff87b57facee1d7e47b82f9c650510fce25e81ecb1ef09fc62ba9c52e582a91be01a03db0316feb0f29ade3438a05bc2070e28e9a077d481aa741e66941e29
+Entropy.11 = 1dff70cb771da8cb30b1361856d7304c92ad47c6dc1365cc
+Nonce.11 = e6d3b52f3e48a43d2eb68c1e
+PersonalisationString.11 = 34574cfa60b89ba47a237d26c26714d6ebde6faf98e75f23
+EntropyPredictionResistanceA.11 = 56423c60d5e2e6faf15636cb98f55c37b2ad3e1d57efeee4
+EntropyPredictionResistanceB.11 = fff90d2dfd9e304ca71e4bc7bd0bb536a37da51550446ebd
+Output.11 = f45a379843f8f43a421d90a52e7c99eb3ae0588bb758eb3857cd80b0996215b8a6810935f7a01222455fe036557007350f0c38eb9985d139902814725cec51502fb34579f149f992a92dcb77fe0f91fcd48e7a47505b8d47b85428f5e63f937932e16ea008f221368da69165fcb90228
+Entropy.12 = 423619bf2961c67d8cd9f9af29544da8be27b04a49be85bf
+Nonce.12 = 53ce801504e9959dac711e3a
+PersonalisationString.12 = d0357c5537008b0906b27a65bd4ec2c6850bf7b1f6d2d784
+EntropyPredictionResistanceA.12 = 1ce6a479503e7182ab9ea0432c8262432de9cc0125781cbf
+EntropyPredictionResistanceB.12 = b7e7026f2988f5a5eada1a19b3203d9b25f279b0bf900b20
+Output.12 = 1d659f02939ae4a3a97bc20d9afd6dc39493704c45c2dacfbf2767d7fbf40f8f09c391de70d026490bec27b1a146e50b684487b736c37d809b5bde9ff707631c6eef19531d915a155a1cbebeb1feb55f1a54c9df8f25182fda3b1c6b08e00568749fd32008371bc9c656d943c24cf7e8
+Entropy.13 = 080b886f89d13d143af747e75ac27d909dead1720a80cb97
+Nonce.13 = d2be28163b0fd31045e10301
+PersonalisationString.13 = 2af8f08724ad274ab39c0c8b3e34111a338d2d4ba87ecac5
+EntropyPredictionResistanceA.13 = 6062be448900d1db2e5e869fed1439320936dba58126cc9d
+EntropyPredictionResistanceB.13 = 3a861f33fbdf4e5bbe344e2a5e12d41a37254a23d81e00e5
+Output.13 = 19cde4faa6b0676f1778e3bdcd52b13983fbc07e29a17109b02515c07b940f5290e89a1b22836e9675d67f3b4c84ddd7750122f9932f880730dc779ea397c9282342e9b59b0fce5daf30d0024d1119acfd45e9f241558e67e9f4811eb5d5abc5ce8dec841a42d369011fc83e6302a92e
+Entropy.14 = a6fb59fa52717676803d0ea211687212779e251195e45155
+Nonce.14 = 4355aad24b1e3f69fef4fbe7
+PersonalisationString.14 = 32792272546719db07b665d4214a3ab19e8cd37ce63b7712
+EntropyPredictionResistanceA.14 = f3519a57f18c23306e613cd6701a63b476750bc86a2c3e75
+EntropyPredictionResistanceB.14 = 970a0425e52d2ec2cfdaf196d46e132483021785e3be083d
+Output.14 = 92e7614f08b0bd0356849559567fcc18f467f7ef0d31801c9d38d48adfb1a49d464abca4764e5a9da227d20dea34e9d05535de6daba95db7ae42ad94155f795c06ba3241e897ffdcdb1c0cb1ed2767bc8b1259359e70739b52f87c947fc0ed293990fc1a9d452c18afaf5586a7a4e828
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 940f801e248b872dd1ade1592e5a09dfd9378a7dc9b3fb8a
+Nonce.0 = 63207d95277be86ac84230c3
+PersonalisationString.0 = 3655140e67c995d2f77452bd970dc95d5252b882ae4131db
+AdditionalInputA.0 = 44296aa4b0f07eba91084cbaeffe5fc64ab7dd724d961786
+EntropyPredictionResistanceA.0 = 18aa4f7d82e7b89c4e9c4bf44893187631966053003de318
+AdditionalInputB.0 = 8bc8b2d89dc9375e840a0b0606e313ba2d4dbc2c17fe5499
+EntropyPredictionResistanceB.0 = 31cedde43b183b3afc03d2406e284e270b32407bc39d7432
+Output.0 = 04df1c5ebd5e6da7189cc51b94d25367053939ff9054a5873f81e0793c8ac8861a3b0417bd9cd6770186da98a353c6cdb8a7c40be5c95f4bbcad7fa31ab09680fe8c9ad54a502947c2bf410190efa8782f8d682f5c84a8476f77b126643884c9083a90fc19d723b24444138aa49a192c
+Entropy.1 = ff0020133d51a17e690004ff3a99a5432be7f2bee4fbe295
+Nonce.1 = b50de463e0b4034ffbcd1c50
+PersonalisationString.1 = 39bb78435d66bafe9b776f815ea2fb8625d0f2fc77cb25a0
+AdditionalInputA.1 = 64d308f9fea982f60a3044ec97a748821e8e8ddb316f8fde
+EntropyPredictionResistanceA.1 = 48288e7420a7f65c2cba2cd30800526f19ac6dfe18bdf418
+AdditionalInputB.1 = e75d6fc3d92a96fc0fae28088fe314d306ea80fab160053a
+EntropyPredictionResistanceB.1 = f21317730b388ec58aae9e45426da644729d142a7346f683
+Output.1 = 1708d67f66bbb26a08410bf45587f3fabf4ce393d9beeba5d6606458df5e35950a8ec381742d2a243ad2e610cfaef28d3b27fe84cbc23ddca8f5cb6bcc3f5f2dbab114f5aca682ff70b70993109e9b5a389ce35ff5139f838a6447f42d3470b9dfb372520741e4f315705fc6fa8b813a
+Entropy.2 = d07aa2381b54cd5e0b89890bbc9381e78f5f056b7739392f
+Nonce.2 = 55cf1d62e1c1a045ccbfbbd1
+PersonalisationString.2 = d2b6e1a48b006c808f1717026208ef96687fd6ef86e34688
+AdditionalInputA.2 = 5fc7607d452e58d5af484ea89fc43fa0d3622679a17f37a1
+EntropyPredictionResistanceA.2 = 27d557f1dfd8dcf24ac133985722e1753842694e9c594df5
+AdditionalInputB.2 = 9c7d36df8c02effca07538a905d39e086de1330d4bc36749
+EntropyPredictionResistanceB.2 = 1b0eb2fdfbf3f41a2e8fef2b23bc4371a8c6555f32a49119
+Output.2 = b2089d5bdc7ff160abf3d62bb3282e634bf5ebd558700ac20ebe5a348b4743923d10f2fa2669f90b642cadf2157b47db9aa5b685fbf1a92ac6654d09ec936c2eb339e795c20475d4c918db3c3a6fb40c4dd9ae3c98330b571e9e9c54eb1aa69782784398699ed5ae09f7830da86c831b
+Entropy.3 = 291c4aacca417fc5be38ea4ff46d6d802c5d4865542b3751
+Nonce.3 = e9d4c20567cb62c1969b5736
+PersonalisationString.3 = f36d67c29c8e43213dd50d59c4ee6bfda60c4700e14245b1
+AdditionalInputA.3 = 9ddbfdb618557e9ca79ef9fb827b4a0f2df8c01bde77a487
+EntropyPredictionResistanceA.3 = 3909c69a8463c2d6aa9ed6c50d10efda6e156a085e951019
+AdditionalInputB.3 = c566d696b7ab77ff198b02348e36775ab9ace8692ec38e63
+EntropyPredictionResistanceB.3 = 3f4adfc60649c27e44f7d5fbc02f44d7f2ac920d90701aff
+Output.3 = 02fd4bf0d252ff1168dd5401484300a1fe0d660096d7997365f1d3658d250b43e4da7471b2212b7a71c1d15caded255355e6e430b33eb21f3882e7fb1fa7da28359be14cdab8d529e6b00c765f05746109368a60e33654c62f9c57e196bbfd02023a369a87e88e12c5ec46f3282eb55e
+Entropy.4 = 6495ab9aaa4711b8fa8d10d412134274e6b5f96856692302
+Nonce.4 = 9bee40447994ad61d1e96d14
+PersonalisationString.4 = 95dbc695ec669e0777865ac892410c554af4d9bf0f079ce7
+AdditionalInputA.4 = d7d5176dac28c74a6149fbdba108d0f844ffa10e89285c48
+EntropyPredictionResistanceA.4 = e63d048027bb6b219885112f7183d85ca23cdc34c7714153
+AdditionalInputB.4 = 9671508cad795451f602b69eae7e98cf84b4bf67ffa9b3f9
+EntropyPredictionResistanceB.4 = d5727b09b9f9b0b411b8706c27441d4c614728cc7c16a44c
+Output.4 = 06c0077d0b1b484e21bc4afa1f51af0e41626c5ad1088705a3f6439cb34e2521f644f8f0de60a85692fefc99baf0839a90ce243b07537ecd365644d6a5a1535dbf2f822988504569f48863c778cf2a1f2cc02fc0d68c84d902495646322c8a919d27cf7298e7911824eedcea5d6c04b1
+Entropy.5 = b78777344283ce1dec003dab9560fd54b5bb307e874e0c7e
+Nonce.5 = 2eee90b71489eaeb6dccf5fc
+PersonalisationString.5 = e9c86a87debea82fbbe5e29d7935852f8a52ab87d8d90552
+AdditionalInputA.5 = 1dbb788118880ec7d2fd74a1200322827e9e2f156497e9ff
+EntropyPredictionResistanceA.5 = 4beec196a9488da61edf89c2388d69ffc613d31fe604fb3b
+AdditionalInputB.5 = 8555d4f5bef269df4d45db39d10b7c295aeed12edaa1fe99
+EntropyPredictionResistanceB.5 = a39e62d9a000f3326ffd3f13249176ee28258abdd80e76c4
+Output.5 = 7860b1bbe92c8503ded7582e4b2f08e1f3204c6928c9afaa48c6b45a44bcb9b7b9a797171b88de6547b7a0d8342f81bf1d14158642e3f6002bce8dc46a613e141add41ae3a08c9e366ecb44b6a7416386c36edef4c429ed396d1796670d837ad9b68fb6d66c61383682d43b2ae6dc488
+Entropy.6 = 56f8b9d9e284738a8c5925a52614ad21578a268cd3889598
+Nonce.6 = a56ace291993efc1b5caba76
+PersonalisationString.6 = 2f47ab9044827a7bc92428cee2b25fa98991f566a1244669
+AdditionalInputA.6 = ce5b8da669e0f5c9fd03a88d691ef0800ad09aba9e7e402b
+EntropyPredictionResistanceA.6 = 858ed6aa6f9803014ad4c90a35aec2f6929136e22f9a6cdd
+AdditionalInputB.6 = 59e092c2350900d000b3f8f810fa39be0f093a2ad43471b9
+EntropyPredictionResistanceB.6 = de77e98867bd1f7cb96d6cd1cd2e5112bfb1d67ed249fb83
+Output.6 = 1b1036ada521542865621f3a3692504bc4cda894a0edfd11f1989f51b8f743166fdc328c8f9bd46a606b59526fe47db637643181c916edfdb8a8a458bd144236b425561433177a127cdd189418999a79585094fb7e250ad1d716a0cb26cb8d03a2cf56cdefc36706c8d7b2de47444fdb
+Entropy.7 = 25b4b9b5b59554d70c764f536da3e102ccc43a76cee24552
+Nonce.7 = df5b4e4645e84520961ecf8d
+PersonalisationString.7 = 1f6d9b0293a0de7c4a4776aca8b95de0bd59ee4b94d51e8f
+AdditionalInputA.7 = dc09f425d812c0be90cc93d684928d9bc6d58ba25f247e72
+EntropyPredictionResistanceA.7 = 3449d216203d85897d84839996ce179ee13335d479190105
+AdditionalInputB.7 = e19d932ab2b7997fbcbd42ca3ed21e4118d0543fad75bd3a
+EntropyPredictionResistanceB.7 = d5026857a1053e435fb5e8fff0ac79e69710017b37dd8b16
+Output.7 = a5ab037bc24c42c1e902c32ca9437375e98c2fe54dab50f684e660c539e977129710ebf1c9aa7ce65414784573d77bc714b8721fd0c1d964cd8c4ce672b5c1a6d3e1c7f8ca7fd5d293417ef507274a11a4c586a2b2fe43bed5640158d6506c6fef3a786af43380831842ca76bafea372
+Entropy.8 = 8b911325da5d3b4a7635ca61724ac1e3242dabcc2ddd887b
+Nonce.8 = 63b9b773c7e2ab5a88bba48b
+PersonalisationString.8 = 3ecf20ed9be5ea63f5aa19ce4bfe208cd2941c085d161d66
+AdditionalInputA.8 = 98517220b94909d54e4e0c008e1a14c4ec11bffc47440c94
+EntropyPredictionResistanceA.8 = 5340283d31d9d874b8534f99407884d26c979e1c71209eb0
+AdditionalInputB.8 = b47776298b97f4f36c9c95a5961b289bc6499164f93dae26
+EntropyPredictionResistanceB.8 = 7689eacc71239ecc92f49b8a8cda7791ed80445615a636b7
+Output.8 = c0dfe22d986789c7140f9bc09626a6259067d3d8c5c752319afbdda271edd67899dae50364ce6306b65bcbddc5c8ea470b64614f32e93c69051a775d5aea0ddeca324d2f20f8da13979fa8cce9ad0ac4980b993323bc5fedf8a8f9d95205c330a3292ee54e7752a047590bf182c21bd6
+Entropy.9 = 9d44fde3c19d9f0382e38a51f3b9b132846864cf2a99b6f8
+Nonce.9 = b44f7944509328a01c77d983
+PersonalisationString.9 = 38d5c9ff6b714103734a13d5c9e35c8dc2fe4c249eac7ae2
+AdditionalInputA.9 = 8e7049ff11d5c5f683049236e175e5909e62147864bcb2e1
+EntropyPredictionResistanceA.9 = 180302c825349158cf6127785e797d53f179c38e298a86f7
+AdditionalInputB.9 = 3b59e25d04b3ec2fa898a233024311b4eee5a17c9fe0d7d5
+EntropyPredictionResistanceB.9 = 31cb010db137aa135eb4028d7514ae120d0940b2869e3307
+Output.9 = 0e62a9c1acb6ccdfb25c7cb5889e752e058a4404f6fc45e9b2afbf15c2854a36ed8a656f7eaeee89730abb1f416569b144b0db6d7ce89f48ba3ae607fbede29d92298d7c3b0d62fb221dbdc3bfa14926d7279f778fafbb40693941c29dc76ce39f1238c599d9edb73b54037d22c981a9
+Entropy.10 = 117365b4304fc4eead1afcae3d329a6a44d6f7000ac48e32
+Nonce.10 = e6b207e723e876babcf0d2e0
+PersonalisationString.10 = 3bc5f11a5e3b43e1f95128dd8a16f48c14fd0de3d6c6637f
+AdditionalInputA.10 = 77e2b242c5cd89fdc093bec71157491024b138784b36b0b7
+EntropyPredictionResistanceA.10 = 0b0cfd278aab6ad9b0e57d8ad7bb866cd3477607599fe8c3
+AdditionalInputB.10 = a36c5651d6f3c2638deedc98e64af61f1536a6a8e76b9b64
+EntropyPredictionResistanceB.10 = f451176140f1bfaef183f2901b9806a55fba01a68954a19a
+Output.10 = a06ab496ede301ed5f6a8c76f7286437b8222f03a3e2fcd5313935d82a75d9ff82c6140a2abcc08e605b6ac7b8f15b9de8a4869122abc37947e2ba1faa2ac95f54114de98a51467542cf2e89c6d7523a61e101b6cd9f9679df53afe3ee5a8b8f4de0f6d89a6ccec6dbd217e38f747c20
+Entropy.11 = a536c241366c26b0b4adb712bb48f77263bcf7d50d6dc2ac
+Nonce.11 = 0f88263a7fc706bf9fe955de
+PersonalisationString.11 = 89636e6ec9137c7ca5c67f8b4998975c79956c1faaa00e8e
+AdditionalInputA.11 = d6e66abb867c9fa1605376d1786eac96404ae91e6174e31c
+EntropyPredictionResistanceA.11 = 67231db9141732a8e6c489dfcde36ba010bffe6b8b02abfe
+AdditionalInputB.11 = 14654b4d7f7f74e5c16f443c1f5938b62559b65bca7504c2
+EntropyPredictionResistanceB.11 = df69d4c81d3a5390a92328e4f2e798577d284baefb32cd3a
+Output.11 = 3f59b245431c3eb6634c9dd91655686beb49891677c51af925a0c77976089ec5b7aac8304597c9d5e5fd22eebcac23066a56569625261a317e56065fadb8702dadda60d6fc957b18a3376f1204b41bcf37547c866df8a7587b0bf2d5180fad6abbbf4aabc331c8640a82a6f561389f89
+Entropy.12 = e811daafc384b2d66827e07754523b13e335cc739e134086
+Nonce.12 = 51fb51ce1a0610e3ff2b75c8
+PersonalisationString.12 = 4d876dab9819da8360c09d90dc3c02a50330cb1ac7c1ac0d
+AdditionalInputA.12 = dac2dc6650165f33e0c4c7b3760b9271a82aa2b1fb7a1cfe
+EntropyPredictionResistanceA.12 = 210a64fdbb6e750c589989d5990e1e3de982cd3fce7b5acf
+AdditionalInputB.12 = 73d349468fef87ffb0e7423a42cbcc2f3d81dd3128601661
+EntropyPredictionResistanceB.12 = 0146a8b9d8a3b40ad9c319a8f9ecd52a53ee677f848089f3
+Output.12 = 74e37a7d104722ab4b1c422a75e3a89f0a8e2f87c938c04bafd6abc1e49b740d1ad2a5d0cac98f974b0d0673466037ff16b863438ef1b4ea54a8308bf8ee10bbb2e4bd4127affdc36bd680b217a122e8904c301ef652f5b9c100d828bd5857d149c37b0fb05728758127e73501bc42e0
+Entropy.13 = 6c5931637b3af72497baa7ee0e1953579380cff9e117d924
+Nonce.13 = c5a29791f475386906b19968
+PersonalisationString.13 = 82e5ce0a306cbb5febb8691c19621f426c8288d03c89e588
+AdditionalInputA.13 = 782c12e9881ead30c8fd4458899771f5a22fe4718ed71081
+EntropyPredictionResistanceA.13 = 536c93205711c17dc2158763f3cddf32e555ab89e96c2ea6
+AdditionalInputB.13 = 06d829e13a93017ef21de939ba931d5669a543cc303a0aa5
+EntropyPredictionResistanceB.13 = 7e1e5d4f7ac32c22a28d3816ba02259a30487333bae6a8e5
+Output.13 = c19083e18395eaa9770d8e023573069d843b80cabeb1185d930eeaaf93bb0c3a32fb8b70882caebde1ada98f03b21743fc960c103df92741ab2b119e187c21d00152f6b112ba717955d53f90fc9abb561bd709696366da17c578dc1afeaf07aeef3f51cf19bb544366c9de03b5343bd0
+Entropy.14 = 14048810f3bcaaf0301f01e6834718163f17366dd175e7b7
+Nonce.14 = 3395df6ed3893d70ca949d0e
+PersonalisationString.14 = 8a7c58b7fee208c785d6741031520dbc435392578a598656
+AdditionalInputA.14 = 82edabcbc656b06f80d2763e39439926339c34bccca70634
+EntropyPredictionResistanceA.14 = 01330263465cee359599954760b13ffc596f0ec170995bf5
+AdditionalInputB.14 = f7bd5c7a7e998407efc71f4bc2a6c811edf1687b019ceb9e
+EntropyPredictionResistanceB.14 = 84f15292035fcbd61337c733fed157b3e7db3097c2a3bd9c
+Output.14 = d59bde2388f07c18be829b8fd08376a93af24145700238175859ee3f89a7dba009c628d749c9ad72abfa3609dd0a5d38ef1abf261225b988db1d3d3183b5c5ffcc19303f4eea88df2df4b65df1ad28796e9ef1340731ad6c3bef33043c90880e3ed5b8b336d5d125b89df17028983f4d
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 7598423b13a99e502b3726cba1cb288a67d3ea54b109a587
+Nonce.0 = 06264a8d9f158d6f5d79d4cc
+EntropyPredictionResistanceA.0 = 6be9b3c01bb906615aef165705ac94be2ddcf7a6efc76367
+EntropyPredictionResistanceB.0 = dcb848281b373609745c87c055e007dad45309dcf3c9e831
+Output.0 = 779376ab0decf50effc7f46e4453e1e4a50ec13b8c3cca9f442ff1e0f7f2fedf75e0760081b2d8ee69b46e55143a5f0652f22dc19c687a016580e1cb5f8d6dfd972a780c09550a5dccf9704078e16605621f07c655ea4b045da776fd8a8e9bcdfe5c84cd8ca3e407de1efa438bbc3289
+Entropy.1 = 27558fe794ed4ca8a0cda37f8eea1271d83330faa8a2ffac
+Nonce.1 = 7656a56e9b405f9cce4e6090
+EntropyPredictionResistanceA.1 = e436fe22a9f8e94c44377bc2f1e3d9fae5af5b6e965cda3e
+EntropyPredictionResistanceB.1 = 8885cfedd459887c6528856ef61da802fd9dd15f82588d0e
+Output.1 = 08e84140162f77fa89de820768103abbe72522cfae2985315342f61945f6a229afeb2b7fde80e9762fae65f62a02a75f2bd06e6736b46009738bc5e09f5045e28598e970f9c613b5dd363597d50859a2fbb9ffbbc2cebd88a97fe670dd3ab3a4a97484a02d6b95aea5f44efdf18c31c2
+Entropy.2 = a5466da01ee7ab49ae46a93cde4275e817ff294507e96378
+Nonce.2 = bd5175217b272429539b8d97
+EntropyPredictionResistanceA.2 = c1d69b3f46f8571341db81476e8b47a08dc6a3b51c89f6b3
+EntropyPredictionResistanceB.2 = ba80b8de399d33a059c6d431d30d490260d2f867cebaeac9
+Output.2 = 34247f345743473a6265e61414c4b1fc8164be8aafc4500f89cdf80b135453b3fe96b1cfa7cc4d59a7257d8b83212edd573236585b8ec5aad2b586894d3106fd34d286d30d8cebf5296f57dcf2bbaff93e910de00d06192da212b13a7c06379eedf341eaf67cbbde6ade4c25587c06d6
+Entropy.3 = 4d7eea96fe62dcc31b9d5b9204ef4450c666a6b6dd9009d2
+Nonce.3 = 31f78d399ea5f972a5b6854e
+EntropyPredictionResistanceA.3 = f2291e01b1d5707e6f627b75c5927dbcde59913b3738c18f
+EntropyPredictionResistanceB.3 = 14bc473c5050b01028ff55ea6df047d274956686e7c59b7c
+Output.3 = 8511ddeeb6ac3a921d0ffcba1f48b421a204360f672d27f16f12436a0d857c628f9e4d251d62a2c149da48f4e8435b123b9f0019bbb5d0aadc6fb63f514bcbd6f9505418008c735d79b207af54a347738a625dfef5312e84d8f3454d72de99cdd6a338cb41e3103d8a65725501276fc6
+Entropy.4 = 6b5ce11b975f6986c825c5c5bc67abe95b9a560619f7639b
+Nonce.4 = 9a6f1259c4b29fb1c1a1afb0
+EntropyPredictionResistanceA.4 = 069033fd25ecfea17ff22b2e02d7ad62d0146a3a4a4f83a9
+EntropyPredictionResistanceB.4 = 8bbf29bcc7e64b85e489bfa2e3e83c5afd3ed7b6053bba93
+Output.4 = c928b8097ff406c9602c52ca6111ef7b7dca568ef67e812d3af996c08b75b13dfa20820f1ac42ba7763b5bddf945159e7a531d47cc62176148f571fdd6d1e93b1d08d139fd4a3515f6d5ecf67816b9ac1fc8d399eadc10341e2a9fbc6f0bc4d03cd402df9f326360ffd26c8e2186c553
+Entropy.5 = cad96be39d48ccc44929053166f91d55bd7e5d1e048aa28b
+Nonce.5 = 1d05bd12ff60e67adff7e9a9
+EntropyPredictionResistanceA.5 = fc26cf6dc0703d3b01ea969c3457a9711ba791d1c397ed5e
+EntropyPredictionResistanceB.5 = eccf7b4ec109b31f865d5d441f086fb9b1de24415fe651b3
+Output.5 = 4ffd1984c8bed0d2c49830f80bd293357e85b675570e72e482fa41b71d9447834c9135695e913e2e1b38c93c1a842142d7bd5da40cf0fbff30b0471ee307886939d8e4c03304cce6300ec0534a8528ab96d494baa41fc3dc054098e0b536666923544da97cb835b9280a1760a585be8e
+Entropy.6 = b61da05015729fbfb8d42ef54e4e3a1f1f9e1786081f2835
+Nonce.6 = 3ab6312b427fae24f77eb408
+EntropyPredictionResistanceA.6 = ed9da37502bad79beccadfedafea0608562d049c5ada4fda
+EntropyPredictionResistanceB.6 = 67f511c1421f7ee0ae47df4b4a4c9a544284de6ac7f22078
+Output.6 = 3714fbdc199831f825a1e8eaa9a86d9e11d219e683dcc9525e2971370ba8e2a72136f9a0458246b1e2fd191543fe05be5c14629413d5c574df808c024d27a96a08e17dffa80e3d560d5077cfd56045442dead96b3745b7c6ba696d1306fe4a527504a85a68343930693020c968da9fdc
+Entropy.7 = 8d117d92649b356eb1f9195b16e37f9a9fce97dc9de4649e
+Nonce.7 = fe90ab789c8795057604a7dc
+EntropyPredictionResistanceA.7 = 3967b7cdf3ff9f8d46ae4baff47a2d35bae0847065a4a9ed
+EntropyPredictionResistanceB.7 = 74e77721341a491f90c761017a9c3b830bdb5dcfd1908afd
+Output.7 = 37c5578f99bbb6e490c562c0d3a0cee80ea49dce732d9f91edb8476ed5686a321428e7c5ed36d1f774e7c884813a82fbcd4292a2d303ee75771157404d14392b909dc5cda169e5556805140eae3223ebdd02f7df1c86586ee610dccf8721afe162399f72faca88ceb274c31afaab683c
+Entropy.8 = 81165a32f50016423507bb4480b57b8d0fa69632cf073517
+Nonce.8 = 76ecff278a19087b91510cae
+EntropyPredictionResistanceA.8 = 43763a799f1636fa3609688dd25f3d28efcaba8364c07a2d
+EntropyPredictionResistanceB.8 = ea77c519c04abeb37bb6d25fd2e20da81288531266ad8c7b
+Output.8 = 9513ed7c3c4ee6fe6b89c1830e86358f8b2bdfbd0f9c13e137641d76bb1ae39246c1b4307e52b4c530971351ebae8f2d4861e14bc322a579fb8862908f861082e86fdefbbd754e509ef845203133758398a0e4ff2d41d3a7eab6c20369dd7d7a2e052269000fcbd8a318f07925ddbd2d
+Entropy.9 = 4059e2ed89963162044bbe9061951312e95c8e52533b5a2e
+Nonce.9 = a37a1034a45901ff24a4f31f
+EntropyPredictionResistanceA.9 = 72543e420dd95eedace06c389923511a7d632f09b8695e25
+EntropyPredictionResistanceB.9 = 3f64f613995629d08bcd07fa05b36a7c29fe90dd8fcc498c
+Output.9 = d4470c03ca1166229019ba823a85a21d112c3e4fc5a5f0feca5e4eae4ef6a34d39db0d8bdb25fdb006b46129df119dd26dd93f4cd190880f5a55db0ba759bc6cf596c6044ec33922306b6698544bdbf0e1463901764474c2451c264a9df3582696978bf8246903903491a5b61c6b27ee
+Entropy.10 = a685f224362295f06c30f0ff080e7516b31b7525490c4fff
+Nonce.10 = 0e9f84c60cef1563f3736afb
+EntropyPredictionResistanceA.10 = 15511ef52d2483b622f147322087141e67b6c3f648907f0a
+EntropyPredictionResistanceB.10 = f9abfb017dd03e88ce9a373f486248617f27864180f1c95c
+Output.10 = 74e05e3a464024050c53d650ae47e8b94d5c3161d218a2412bd9064d781be692af3651e8af8d991af76f408f0bc46dccf5eba59d13cb08c82aada977708877a8187a96e99d5397a2f6e8ae75416e44d20fdc0bce18566c6b17c248badba0d64ec3677ddc628aba37931a31dae75e7fe5
+Entropy.11 = 4c7ea7df0a3ad49fa7c982024637ee8cc27c61e9aa00cd55
+Nonce.11 = f8329899ef4c71ebdd2d0ad7
+EntropyPredictionResistanceA.11 = d1ca12f25154a24f3261d504d076c3e71218c732b81d38f7
+EntropyPredictionResistanceB.11 = 67131f7c132c69d82928d7387802d8d4bb5a61a5d409e536
+Output.11 = 9758eecf42865e18f0afcf63562d29a950824cda3547b8e6a5b9677743428b6dc2f3e8871dfb8aa0522f459fc0c256703d3eb0cf97ae9ba12a5f64621ceaf0afbf954a2fb75cd61b639b9dba142eac47f79cc046d010ba929089a6e5c1f9e9c3fde0ab4dadfb9f795b182d5b9c4d6411
+Entropy.12 = 7f5225eb65825f6064d528e75fcfe535f1aaea8217a96c5b
+Nonce.12 = 23317ff2468ea504e70677ef
+EntropyPredictionResistanceA.12 = a86e4d75fe3837fbf3127cf98b40949209ef9ed6b8b6b18c
+EntropyPredictionResistanceB.12 = 9f1280afae85eaacdec4b5c526fc927b9447ca574069a837
+Output.12 = 53025c5e90a65e5d000e4638a439368978d31a8f7eeca7da0313c28cd0b53769eab9c37b4237f7cfe902ad41c1716c06701a23e6f33457779e6dc554e401d3655bc7c00cf70472c1d6f1e7826d6268733b0d40957d76f8b2a4a51f7ab50d1c4c81fb04880d0253d9b3cbdc6ad56aff33
+Entropy.13 = 98fd6431d9b9076c90e0105c90a9a29d8b12c70708fda36a
+Nonce.13 = c26ccf77110369bedb3199da
+EntropyPredictionResistanceA.13 = 5288dd866dc6332e12077abe74883382933b162f66cfcaca
+EntropyPredictionResistanceB.13 = 4852664c90fa489b3d5aff2ea527a2a1a6027a2b6710691a
+Output.13 = 0fd764a72b5f9634bd67486c047cc1a43a60971dd72cf51fbb60e1a7989b79df685d4b1eb5b48c5c6f74a60c17a88526b0c9ff7e309e686ac762dbc461d5cede347bf1f83b6c923085119ba3500a2e9b91762b9e88d86116e5f4e63dc2819e21bb98920cc34c01e0cb23a53709738299
+Entropy.14 = 622f170d700b93019465eaabe9c35297f4661d263bef896c
+Nonce.14 = 6c4d3e1590b39ca74ca7c7ea
+EntropyPredictionResistanceA.14 = d16361e926630ea7eab852d3fbaacd4ed8bcd4437311dae3
+EntropyPredictionResistanceB.14 = 15d2ef5b010ae9f49d738919580a99985fa6e749f4f25e4b
+Output.14 = a34007c66a63071fd9b88fcac4e0438961458595c5fa9d39453af1a8260a5810461f55cc8bc9135b24713c82d9a8f7caa720ece42a7a94ba9142c7f25120f2cb57265a83e2a40129357234dff36f320935a2e88559a334e33044d6e6694a9485ffc243fde57a28958975d40342d17c0e
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 71c20317819dbc97c37afcdf97b6c0045bbe9254934d805b
+Nonce.0 = 1dee17eb78d3c93a7da6110d
+AdditionalInputA.0 = cd5f11a5c217e2236f7a8a2dbbedbecef2a7cfe35a87e80a
+EntropyPredictionResistanceA.0 = 455c912f04354f596631c2e698482613da6b6bb12cc79d3c
+AdditionalInputB.0 = 95a48b488ac645529c82abca9ed5ecc62b868748f19c7f11
+EntropyPredictionResistanceB.0 = ff5c3e912f4fd0a9e946e804d3ccc5f78337ba1df198763b
+Output.0 = 2e49b2ee9dfbbb334b5d1e6ecdce1f8b6b5c0cf699faa3632cbb0bcf49edb14ee79c44e3dfda25c53c8ac615332537ffdb27ff2a7201a290c9de291c53840907c58899017c3c41a640e0aa5d56a502e4953842e51526e4c79ec361701ef0cca5a1ba26de0820da2d4ff5d82b0ca8c291
+Entropy.1 = 9e2fe7ceaf3dfedb3731369f87b5d0797b19543d93f19530
+Nonce.1 = 217cec658c5790044439fd37
+AdditionalInputA.1 = 6c3775068814f97ee6fcf0b48adc4cc8f79443530b745c9b
+EntropyPredictionResistanceA.1 = cbab38c121041375324b5ffd2e37273ee1bfe32703487e8e
+AdditionalInputB.1 = f068706143b0e8996088d58d6598ec6d7bd80919dbe2a3b6
+EntropyPredictionResistanceB.1 = f30bac1e42d37ade0c9f4052edceb79a2a85992be264787d
+Output.1 = 0a8fc4e2bfab835f3fabbc9cb8d2881a7d7e1cf1437e84b65a1b80b591f97aa044ad3c95a5e61a0ffc22a5d21fe1181564c004733b20334e668e30388b7c2e6272041fd9ad2212137c525afa8977c3cc3039f738fa854de11d4ad8525bfe52fd4a3f8835652dea6fcb504368ac05f74a
+Entropy.2 = bc4720e859ee9f06b2283c64649b5ce997dcdd071710cdc6
+Nonce.2 = 324977b4ca733cfe572d315d
+AdditionalInputA.2 = f8eae6d29e9a5507ad90c8246912dad09221ce1e0412ba93
+EntropyPredictionResistanceA.2 = a28bcae9943a8ea096fb8596e71b6bca7ce276f1cc81fb18
+AdditionalInputB.2 = bc13ae5090fcf67bea7517427c3583ba56ab239486980b14
+EntropyPredictionResistanceB.2 = 68e9825e95bdaf948d0814d8aab026133266c61832b5815f
+Output.2 = 00b693d79192f7bb173b2c4dffe728545f8c4da264788a16719dbe5bf339ad18b72288bcbdc791d391faa733dae3e8beb1c968c1937ae1b9d3cb74d5971fff2f44ffc42bb20bc8655ab9e9870bd2b4f4a8bca697211ce6a445e0ac822fcd2b31e7aacb490d8c6c2b9f33035817e216fd
+Entropy.3 = bf3f67cfaa8cd1f88d619eaf9308e73082b78a33665ba121
+Nonce.3 = 39f56fc10c182187dd5aef84
+AdditionalInputA.3 = 6e145e0cd5fe4657bb344dd873688e960eeef7bcba586409
+EntropyPredictionResistanceA.3 = 4c5d1c94f35d23656781d4e8ebc637547aff05ad3f5db9d1
+AdditionalInputB.3 = 89b63fc76bfbdf3d1459892b7b69e191d920e1c96503bead
+EntropyPredictionResistanceB.3 = d819934510b0b3cf3cc34e7eefd791aa33fe5c2becb1e5da
+Output.3 = 7bfc5f910c372f373dc807148bdeba8c1c2b21e9a831c05521be5268ff15f7a779cb5cac305d2d1c50b324f5c32a6d39efff4d2695a7d9b5e5cb059ceb30714efaddfed7a86a927bd0df3aab7be4ae83b6aa0d49db64429c4a8f29e50f701ad3bf08aa84a311cec36fda2a4f4add794a
+Entropy.4 = 362670cfd2c6ab0b7c3a85e604a9f2593c45ba81a01c0c5a
+Nonce.4 = 5159250db9ae803a445a4d80
+AdditionalInputA.4 = 2b743d223cd5a67855afb32e3826e53ff6fef430e98c51bc
+EntropyPredictionResistanceA.4 = fe6f070152d1e600505294bfb36d118b889dbbe3289c5427
+AdditionalInputB.4 = 67aba3928346963db9d0b495aebbb0c166c17bf22230114e
+EntropyPredictionResistanceB.4 = 7004ff8e8d9f8cd2f22b6aca89c4be5b7f3905764cfe97e6
+Output.4 = 5b6d0618cbed058a2d5ff6f0a18f90097e720b38f3bda7f85b6153b6dc7cca7a34faedbef57885f2edf13a8343a4e7e082b33392f8b1af7772d12130bbd86ce5e7f403d239e6d2879b3c292568c85afaced1df9979cae8a250112e9c50c3827433ed36d282df02603bfcb4849d76fe1f
+Entropy.5 = b0d5ed464d8117c160cb4504de42a07565e5d2fe8f3443a5
+Nonce.5 = 68d2946e7a42c619c7e8c1ce
+AdditionalInputA.5 = c50fdb8bd099b0fb81d0d6bc06f0c3f433752bacc71fb29b
+EntropyPredictionResistanceA.5 = a41526df1e71e315272d47fa5176ec7cebfa1a4bd3b8ce6d
+AdditionalInputB.5 = da1db11047ad156be3e64f32f12a2f1cf257cbe953d84d1d
+EntropyPredictionResistanceB.5 = de9aec53bed5ab49d9228358ed2958e0dd82b72eb1c13f0b
+Output.5 = c436e863e960e4617538045a1c51307948b57071e1a56e6e4e131a2db1dd58b5127c4b88076265759e9f5d698fbfcb180a9a05d7654f0e97cfd10ce1756c76fb554dd78a53efd3631bcb4c50db5927e2c09cf6494939076eb10c833e2544459bc482013604509c77e2e394ba2032557f
+Entropy.6 = a8fb6ce9131d33c8e84b9579abac5bdb12a7c31668925d39
+Nonce.6 = a2016fa1327105e1c3294ea2
+AdditionalInputA.6 = 9e07d44c4b491c90f8056c0a3aa81130864a6b8c2a30efbc
+EntropyPredictionResistanceA.6 = 5ee1fa96a92793757824d2516a0b0448c1105e6a6ee3c2e7
+AdditionalInputB.6 = 1de2581653b9ca5454a10246407ef97f9302f8e3bb09c573
+EntropyPredictionResistanceB.6 = aa03123d98fdc60d8c13ec9a645b0a63c48f8b223a4eaa13
+Output.6 = b606ef9d9d7557fa4b3baa728cf4408e9cda5650c9eeabcf9ffbcd4d9f9b1f591c7a78f011ea06b5c8be31b13714cf43d03f15d179f72282d6f4acc5f03028e89916fae25551407c67a0108aa5c419a35ee1094672642c6e6362f54cb21c1c121e5c4659cec2fe5efdea8da9af5d5e3f
+Entropy.7 = ecd22580aef2761160ef5034473b02658e3cf92992ddc228
+Nonce.7 = 67b4e6423c9d5a8c4a3f9c64
+AdditionalInputA.7 = b4399b57f3d31b059d749040151a824868d17f3dd6e35881
+EntropyPredictionResistanceA.7 = f4885a1d252d28b7ab6d64738b859e50b94f09b8cc65723c
+AdditionalInputB.7 = cb39f82479d139bb31c7c18d4d4fcba2c7d0a9929f4d48b1
+EntropyPredictionResistanceB.7 = 99ba43dcb1b64967b467eb581a40cfc7ccf0d691b13b00f6
+Output.7 = 64d188f81a9e8b5f4731b5ad9819c4a3a45b84fe24c42a721ac6eba4b159042f297a275e11906f829ec22bf040395a4fdd21e3c5a95573e6746a64e1143c9c496306ca5fa5ccdbd64a09154eb7ddf73eaf0122a70e8f8a063313967be7bcb0bb24695759f556051be1ef1dff1038def1
+Entropy.8 = 3489353fb90b5d4fe2616a4b7fcda4dcb2fb8ae13f532ad7
+Nonce.8 = ff8ed0f0e99458b7b500ef72
+AdditionalInputA.8 = a3d6d0b5ad91c50a9afe18e3c6237dcab74100147348662d
+EntropyPredictionResistanceA.8 = 80f44612c827b56f2cae940fe3ea41b2ab36699bdad86913
+AdditionalInputB.8 = abb3414b92dc14c48300a11650bb53753bf400a312c81741
+EntropyPredictionResistanceB.8 = b5ecac04d48e6e91665f7cbc0a51730ce690b6bf3745aada
+Output.8 = d9fc395b99b4956dd48eadd2ec20a6c0184a7bc0e891e32d1546d7ace55fdee888dcc282a1ea50b5c899d78812f3b3bf5edaae189ce54200e04bed82cdb2ea96d75e337ff19e23430274358385d60f23b97d4b42d41b5d88eb585c9f9880dcb2861823d50ec296e4ad447825946f509b
+Entropy.9 = abbd91513ced38e4830f2890577a586007299c36a00d3f11
+Nonce.9 = c8ff55774697c42e31024148
+AdditionalInputA.9 = ef7423ee53a20893abd7c08812fbcd3c58cd3c45966a330f
+EntropyPredictionResistanceA.9 = c51ea7ff7ea6ba8adedf6fb122d50fcb4b398b613cd8b536
+AdditionalInputB.9 = 649f59b0643300aa35c58451038af11a7e0a644135d4b71d
+EntropyPredictionResistanceB.9 = 782f3941f4f65b8a7a55317f017815a9dda1ea14e97415f3
+Output.9 = f0844454efc6d15e8ba2e4742cad9bc52511aed5c022685ba94b897ac24ed6d386086e06944b51e308dbf2428168115d0d59a8370b6c447c51e617e9316db6847e5ed99c581d5da8ac2778448beed768f40d70bfc8c763a54137e9767c4e71cb13faac38c7ce131a691288f4bfc7be67
+Entropy.10 = b829cbabc7c0b2d015c1a4a9e51abe7229323a4822d6ccce
+Nonce.10 = 0ce2c64c7dd8b87398e8e077
+AdditionalInputA.10 = b746413db4101427e7db364560624a571cfc73dd469f21f0
+EntropyPredictionResistanceA.10 = f2d980672d04f41407d3e386c4884571cce8b5ef5c5b6c43
+AdditionalInputB.10 = f358f990ccf1df04cdaf9e3cc620316adbb06b70a2655d69
+EntropyPredictionResistanceB.10 = 22b44752daabc85e92c6c4fc963d143e76e0727d1b53a0e7
+Output.10 = 00378b201ce27aebc223486460a1dfca87a04ce9f1ade44bfbb07a3cf1a6748b2d8a72db659f2a1f9f6c2e2d02304069cfbb36c556b10fc6effbff4d66bf3eb15493947541883b158ceb2d3b1cfa79b612ecc8cbf00320328c6e64c8b0b1870e32c1a130dc1c0ea14b4af8371fc0ce7b
+Entropy.11 = e69142eebdc36f3248bf8b0081d15412612b7b5ce15736eb
+Nonce.11 = 5d03d98eef1dd3785baf4ea6
+AdditionalInputA.11 = de4ae1292fd729f32a3836f97efe1f073365ce6d42d5aed8
+EntropyPredictionResistanceA.11 = aa0d6f0144fbbb082bbe58f188f6c860cc563c156566bcb1
+AdditionalInputB.11 = 0435eb347746d2b4ee302a6665c30673c1f23d237ad30c1b
+EntropyPredictionResistanceB.11 = 632e5e0d3bdd81477ca14730dbb308a258067cb34dce27f0
+Output.11 = dcdf2d3fe3b07130b15007ce6136f36f24e90286c832adf8916379479ca7bdd4ad677fe49269069c2d0d4803223a86d89859b8e8b431ade00b7150bf8aa4d2acd5231c6b00e93a0194de8d1e0c9959acf484bc30e437541c8e0ea2dafee281cdae827299cf30838a856f94d085524f1a
+Entropy.12 = ac7da26b4d3add360acb38f43683abf5cf569cc1a2294ce4
+Nonce.12 = df203ca8bb0a74fe1ba6f50f
+AdditionalInputA.12 = cdd19b7add9230521746da55e419f3362b0cbb695e2a50d8
+EntropyPredictionResistanceA.12 = 62b7d4115eedd931f7464939f86cd6f73da8bf8dede77294
+AdditionalInputB.12 = 54dc647985e1bf17286a80d6f81b75c31febe407904c449a
+EntropyPredictionResistanceB.12 = 07048d169d53958a6bf401bbf35acc4d9663f8d8fe939d5a
+Output.12 = cec46f216f5638f907c00703eab1458988f408a723c2ec1da2fe2c7075d5b02d1e72a85595bd83594545bc8632474803f8fbf8744a17b62a369d728986d266547ac2ad1cb8d684290778f7936bf0d79673d34e34d60a09b77d9183528a44c25378c28330dbe265a077bf5e6710c2aa04
+Entropy.13 = 99e73cf0ade158f3dea809fcf89144b4255c8f21d80796c0
+Nonce.13 = 4b54f29a52e73892c0869866
+AdditionalInputA.13 = a6b8dac9a6637978e8a3498d553bbfd2127da5c9817fe0ac
+EntropyPredictionResistanceA.13 = 5605b38f462aee826fd31b84dd18fff689a9b0edd4de50f7
+AdditionalInputB.13 = 0b6894646f2d565a30d640b0ca456d5aac23c687514d9afd
+EntropyPredictionResistanceB.13 = 51742f39532dc8d9c278c924dffa8b0d30f2142bde33c623
+Output.13 = fdccadd576a67a51d33c0ccf7763f15290bf8313acf90231b14575edcf6dbbce380915f5bec3b54ea6718ecfcdd90e0e210d5fcb1b65d692232c5b2c531730fc5de82018e1e15a31dfd2f5fd15d1bd7ffb29db14a3533f90cb0828e0da8d5c6e0aa568ebe840ea5a3ff457902b4d1d50
+Entropy.14 = c4c4c22f9e15536c80c1da347865c700c7523c52485461f5
+Nonce.14 = 2d1ca28ad4b27b4f97fc5942
+AdditionalInputA.14 = ffe5ae4491abe6acf1bd4b21b2ba8648a3a96535edcd68c4
+EntropyPredictionResistanceA.14 = 39f9c2c7b1bcc9a79ab0cd3670362dac300a94457b1389d8
+AdditionalInputB.14 = 6a59ff9e4710c11794930434f5084196353fb44fd07b2e25
+EntropyPredictionResistanceB.14 = 7b9f7f89a03e06aaf45b165d68c6275db97352d04c8fc977
+Output.14 = 7f72c56664a786385db6206c39a8fcc6d2ad278abb7270961c79f17f3123b62ac1118a814fc8d22d2f2c0219cf12879bc688056f39d79849c6eb4f3bf2d48939372313d46c6f816205e71a162c8ac3373f39905c19b1003183a14f1a993851a2f9a961bcf3fdeb656d7190c7ed5348ba
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = b630629b871a8bda6ebed1f6fc94b1bd626d182a3d6d873c
+Nonce.0 = 2ddf88df25ff2e5cf86426d2
+PersonalisationString.0 = 448c64287e6ef4da17c046f80c52c006b56e3ce2ffb45801
+EntropyPredictionResistanceA.0 = d101b79cffd8f6efddfe93253ca4a28d2ea8ee579552ed85
+EntropyPredictionResistanceB.0 = 952b72cf71c8faab0fef7aa5659876df51f53700e701935a
+Output.0 = de674d39c024e32f62185434b86c926d457b7e7c576a09f0845469ef4d1f575a5f6f9a7bd3068671ba17590882521eaceaac05f170149938c2fd324dd13f59ae2353428dbc0aaa9a44631d6e809b79ff153d3f23855fd2eb6baae515992f779d5cd0cb501ce304a7348ba85960974556
+Entropy.1 = 40367972d00f87b88e8cc086763666699110dce204f38b03
+Nonce.1 = d12b2205ee18858cf17b75ae
+PersonalisationString.1 = c001b6cbb2792da392aea82ab37a40d69939e4f746914aeb
+EntropyPredictionResistanceA.1 = 164117a6fa99e88b715423c3c7b4cc3bc858c1fd96fa5b3b
+EntropyPredictionResistanceB.1 = da295ff5d3c6b001738c0e8a5e0cba9a7e563522f2d52724
+Output.1 = 534ea82aa9f93bc56034395cf27b194fa4b4fb437a1578475db6f3c2b0b61b50c05f93df5c730c76423bd336dc7aad86ef33a074b141b3c73ddfe1939b9ee8e51495d2ef014439fd63c7b957bdfac052500d4e9dc3d8eaf4774b28453905809453db899d25fd36302b03acd6c0e9704c
+Entropy.2 = 96f80760e368faddab140fe1f8b7ac278fcaa0d5179a3ec5
+Nonce.2 = 8cc349d4b5e85b758c59755b
+PersonalisationString.2 = a2b6dfda8478dfb25e395fd2b1948613ebffad5ecb202e8b
+EntropyPredictionResistanceA.2 = c72c70f1a29e95ec278952e86ec448dc17fac18ef47db561
+EntropyPredictionResistanceB.2 = a4c0dff8c21778570a9c8223048327769db411374e70a318
+Output.2 = 5baeeac55c027564f9e488a4c566a9c0e0088ebf562f6fecdf95f332174c0c53ba87afc90b4f842693194081a0a115b78dc2272e2df771b193007482289d624aecbaf36b848eb66f5c49e0cb36f864a7d3e2617d4163eddbde2214dda2a1418f678b9fa2e44b28d9185fc68e8820460b
+Entropy.3 = d18d63b57ec0205cce182086855a7c894b2c34832f70dd21
+Nonce.3 = 375ef30b9f00991175c57287
+PersonalisationString.3 = 4d705c627114e5fff2f06d1d7f2274e65474c09ae39e4312
+EntropyPredictionResistanceA.3 = ed3d565bbdef638ae90176d56a4355d38d0df5cc67f44263
+EntropyPredictionResistanceB.3 = 8f4495d5c90401929b2903d4fa21a180a579d7bb8ac6ae9f
+Output.3 = dde702d488de3a8b8d6b2386ce00154041c58c4173b8aa02ef06549438492301bd692f102b22e137112a76ab23d1f130d52bb3dc383649f64fc44ca2569d1c86ae2ade330e8b452388e33d7f89a38bb5a0cdaeb5bae094bd8582bb342420bce6816be881937dd0c9e230032c1379b7b4
+Entropy.4 = 0fd1307f71df3f503e53df6aa25a83b519dcbe472eae46b6
+Nonce.4 = 8fdccabb54931ef1ca0d2120
+PersonalisationString.4 = 37ac4c3dec6290278ba67ef6e03becc4a69ffc688b319b3c
+EntropyPredictionResistanceA.4 = ac1249d6c4109523e99031cc40e34007bd30fd77c020abdb
+EntropyPredictionResistanceB.4 = d4aa0c94be2cb06bd56440d2c4e5fc23af019650215d57ad
+Output.4 = 999469456f9f3f0bd2d34b3ed3c3976541971c17b426ad89530588e714d7f75d9af652a10a05d25a12e593a8f80701f879ee2b9d4a0fd81c2914386751ad9da02b823edb20073fbf6b47a3b32bd2f237e7af6b44bdc6ff4ea05816fa96e2b497e938b9a819c283b13612a3a6209338f7
+Entropy.5 = 7071c92bde267cd5f46a30e28c368018fa6b814033355a47
+Nonce.5 = 335710bab94896ac002ad3b0
+PersonalisationString.5 = 978e4d119de67f4cc2f694b979c79951ae7700d3ca6c508c
+EntropyPredictionResistanceA.5 = 859ba9149141fad9cac4e88ee0f70766039c33368cf7106d
+EntropyPredictionResistanceB.5 = 766d1ed8526026fd54f0b5e51123ef1b4b659be1a710ec04
+Output.5 = fc12c9b54931595571cfdcf423a0d4cec25368c6dab906df429710a9f224ca6a254cd53c5606a6b8934d495842d42d7b8b4f60d864304b346c83dbb03fdab27f8a26557db89a404e89b04d7ae3cf9d97f1ede4c39ca1e3afdd9d6d5f3d5f74770d1358315392e767bcfa0ca140d2df8b
+Entropy.6 = 9fd46a88a4bcdea73583b49a493449fc3915a275cb69e0d0
+Nonce.6 = a21ab904fa0bfc255c6702b9
+PersonalisationString.6 = d037c84dfc1008754f52bd58d137a338d7c81b164d569c70
+EntropyPredictionResistanceA.6 = 6fb4b1d3977360a638fb2e72c7dff34d37937b6393b74cef
+EntropyPredictionResistanceB.6 = 2194863058f1ab90ed6a7b38a5f6e69dac5eb5076514d606
+Output.6 = 887e4181a5947c22f34675bf98292414d857ce11972edc5a568a92f0fc21bef08261a9ac46cd1cfbd65d398603988e02def6a44fce85fe494cb90eb5ed960ab7d2f2428184b388a70d2764bb17c4ca6486af929ca3cb6862a360663ad48df4824579310a1318a98a01680f19cc3efe8d
+Entropy.7 = 161e32c971b57ad52d690a9a2249ccaedab0a57023cbef9f
+Nonce.7 = cdd03ffc2edae6df935b94d2
+PersonalisationString.7 = d1019f56eeac4bb4718b20ad8d320c1fc018aa01d0879e92
+EntropyPredictionResistanceA.7 = 410b39006bc95f8993d52ac6f38bfb2852ff8dc1680a3992
+EntropyPredictionResistanceB.7 = 5cb8d78e3db968528a55fb8ff149e8bbe6740c50d2a574ef
+Output.7 = 83a0ca34ee3839b17114b7d10c4d1f4d434df285c51f7112a6da71bbf5612b7d028e7c0d9ede5d79cf506f1054966bc7d72d652f14e410f0648be380c29012b51ca01dd89dc32b649fd5febe774cba2ebc9212bb0e487de4d6cb4b5d46bc807105cc82007ccd67fbc94aa4122d2da351
+Entropy.8 = 2477eb1fccdeccdae87d75046d2cea8609c8443961105463
+Nonce.8 = 98b5f77942f234d8997e64d4
+PersonalisationString.8 = fd967f8744cc853667d89b32159f4c3393f03180283bd0b0
+EntropyPredictionResistanceA.8 = 0d1a497ee5dd92b360b410de3ae29b550d081dd8cead9fd1
+EntropyPredictionResistanceB.8 = d8f04c5dbf6e982164fb553b9ce67f19a48f8fba915358db
+Output.8 = efd14bd43ae104b5128ead357b20072d0e71c6b0db6239ff7120b9be0a2e9f5d01dcdab4581f66f8c742ead944812cfc5d1766c6ce95d36811e23441455f4df55b1126f4ce404621911a0f68625d4ade9c3321202221055de853065358805458ac4674ffdec454ef00b048d3aabbed70
+Entropy.9 = 90e093939d5ea0b9b211890514131c389e580d5fee82d3b3
+Nonce.9 = f05e560ac6a6940f6753b720
+PersonalisationString.9 = 846a102a695ab10aff9d8bdd51a5561849be77cda0ba2c0f
+EntropyPredictionResistanceA.9 = 507a67983417ed907b85b2903d216b6ebfa4e71a5687c43e
+EntropyPredictionResistanceB.9 = 0846081b1f0cc13f210aa52b1d34ed24eea98f0701ed877f
+Output.9 = ce879f6f9191597072fb077a3a07fc040dcbd11b67565361a61e30ece03875bec3d5bf39dcd6bf98aee42e6e9df0b15830082da23cd1b35478baff05ace9dcef161afde96f27f9aff47bb0fbb1297d90fbb1d6a8a329dde0d544a700008a97f243b9df70869c17d2d2e3d18fdb38fac7
+Entropy.10 = 3b9d33dd76ccfe7b990a7267757ac435ba45ffb7e7f4edf4
+Nonce.10 = 5319cbab21060169daa9c30e
+PersonalisationString.10 = eb45a6c48f55611aaf7f25c18d4551b9efe607b1aba7b294
+EntropyPredictionResistanceA.10 = 8a9365bc2c93bf2ce109deb7131300a8422d4f3fd6fb3636
+EntropyPredictionResistanceB.10 = af5352212476dd9aebcbe3247a8a4a98d624058dfef635f3
+Output.10 = 6d5a12641baf4dead216327c818b7d452a81e0aa1f8cbc5bc4c325dd5b503e7d0a85bc3515d9846b3adfc4a8e1440748b514746c71be1a11d2e20fab372b225fef70df84a31ad38db6c26707fd2f603e5556c3775cba6a81a04eec8c8fa41e7bebdd9b5c56b005cb8e9f571cefe3fc62
+Entropy.11 = 835e7094d6923ed86eeb9c3d38b1ffb36238d328b301903d
+Nonce.11 = 667d6cdc3c84b51a7e1d4e5f
+PersonalisationString.11 = 8fd3cfff85611d2c38eb0b972266cb4a5b13d3d072c011bd
+EntropyPredictionResistanceA.11 = 5a7146c81d17ed83f409a63477f8d32eeaa8105453d36c91
+EntropyPredictionResistanceB.11 = a65cc59d97945d7c14a9966bbd9086409269c7fb3a0201ab
+Output.11 = a131cc9b3275815ffbb7d7020680bf04f5e0f5ee57d082dc472ee749a72c2ab00fb3c16592173a268d44adf0da8c35b67fb5ae5b0edb5f1507af5a64690df4bbfb98f91d6c5d22a329be2844e04c3d30efdf9e62c006835f82bdc7dcdb1284b848e6258c7595eaaf1cb41a1f49d929b3
+Entropy.12 = dc1c30d0815d30175d13baeeb0f502f4159b3f9a8b0a17db
+Nonce.12 = 4c2dea91f7bd1f16b55ff044
+PersonalisationString.12 = cc74b6b88bb9fc873ab1a70c4d1f576db66d5521e3922144
+EntropyPredictionResistanceA.12 = 3b2831defbf9b836788ec4141b3bb21a01d31328583c20e4
+EntropyPredictionResistanceB.12 = aaf10018ef4c27b3129bff998ad8bedad34c5f5b280a7499
+Output.12 = 650e855cc8feb4573ccafcf8c8f9338cab2ec9936f5179070d8dbb7c4854c25f78856a0bc21e232b4b24ec78356bb358e6c14769c647278e63ed7f7386ca5c630b74de287dc38f538000b21e6b7e73b87ebce8b95cec605f07d7f2ae98aad78b99230d0a42246b4f8289e778635db5a4
+Entropy.13 = a6b5d540b4f2f4818fbd7cf6edc4ca57905e6c2faa539ab3
+Nonce.13 = 6dbe42bc8baeaf1977b21242
+PersonalisationString.13 = 0b48a264ef981e5ac27c3f614cd9f20f3218deee6ec5bba5
+EntropyPredictionResistanceA.13 = c9968376c0f0eed1862e9459df8019755c656695f0688fe0
+EntropyPredictionResistanceB.13 = dc28b7430b02fe749dbb3d9e93198a25cee8b70b44aa3c31
+Output.13 = b0e418dce0dfe8b4586cc854beebce29593eed7d1810e64e5f258dfa67cd9648ec0bf6b767a9c7f43b641346f2dc0d335509688771aba3f6744a629503975dd11b4da8c9c7e06849a0bd5f8d24f50bfed123a317d7af99cf460fd9c2c798563d19029bdb51c80fb6612ff1ebe377e984
+Entropy.14 = 71ba0a320ad801618e4fac282d38d153886b7ec9b2fe32c1
+Nonce.14 = 749219b4ac7e9fef858b007a
+PersonalisationString.14 = c4d723b668b1d79ce726a214f34f61316b1f14c35cf7b7bf
+EntropyPredictionResistanceA.14 = 40da9bf2a3adce3bed58d5ca64411ace999f0dd1be084964
+EntropyPredictionResistanceB.14 = caa117803af0fe7ded86e010dd37e4945fb8b32256663cfa
+Output.14 = e1468e54df5d693ae5094982e155a74033e4079dd1086d45a91ee213b3ab4486640dac0342e6aa82f76569ae9d395f5161d82d27a7c6a8573e3f42e7c57ae6bed8a45a177dd35a999e322a3538a9b8cec51df28eac49ca8a7022200963aa0d4d66868c1cb8dd90a1564cbbf8bf26778f
+
+RAND = HMAC-DRBG
+Digest = SHA-224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 0b0c825f19529836370a8ef0929d2f8a874bb0ca8be10c1f
+Nonce.0 = 1b17f184aa3b9bb8be099a86
+PersonalisationString.0 = 933df6b9d842ab651aeda739288c70ac0fc6edb0031c058e
+AdditionalInputA.0 = 8a5fb03d345369f81f1cee8d7f01b3fb0d4a7018ce63d91a
+EntropyPredictionResistanceA.0 = e3f8e5b920c75a8a353c609fa35f18fbb5756f63f0dd0e06
+AdditionalInputB.0 = 7df13f67c023c24b238d61685053a16f71704f20694c9175
+EntropyPredictionResistanceB.0 = 9807b8d5b593a8231912b70b552c6faa66e6668e0bdb6a20
+Output.0 = a90172524dd9ddde01cbe03b9fd3be93a4bdb92b86dd9704b1d9099cf5128f0117db644a8e17541ebb8ecff3c011da3ebb89b8a8990be494e6e8d4e2ceb920f762d0c06d9f247af3c073da35b5448ca8e3dd5800295dec2510681b9070e93b48b34cdf846ff99e9f8b1857fd52bcde77
+Entropy.1 = 3e74cfe0222b37503aa828628ffe183be55451a51396a9f5
+Nonce.1 = f1aa4fb906144ecb6f26a92c
+PersonalisationString.1 = d1b73c553ddb394bd5d2ed6241910f746e2fe19169739885
+AdditionalInputA.1 = e02028e69a2fd36f93a3a4b31906a882f79643490be88b4d
+EntropyPredictionResistanceA.1 = a385f77b7847a61b1bdddd8f05d5073afb80b055f51deed7
+AdditionalInputB.1 = 5250b0629f94ba10e0f9184048989873ac2b6cd453984ef6
+EntropyPredictionResistanceB.1 = d88f8b3c456d6c48a0eecea9d2ee53180dd9f2b639967996
+Output.1 = 90f07acd217d30431f163e3ed199cc7fcae4814aa4a1b7719492ec309174b3c1c1d8919b2cbba8fe5ff9b2be9daa10301b394f304b17999a8adceb3b726cc27f02de434fd5148976278fc9e71d47ab4aee18409f2abcb631df4968033c2fa83bd555af8e16ce20cbc91f7c1b52ea8858
+Entropy.2 = 00b1ede28e5d3ca49266ff2deeeb3b5b0fbcf720d9f34156
+Nonce.2 = 4b6e366f8a8563a99f823353
+PersonalisationString.2 = 3061e2f410fa3ccbbc57b62be247da8683aeace81d3b076c
+AdditionalInputA.2 = 6c777483326c05c417c401f409c62e0d9991b670aa8342f4
+EntropyPredictionResistanceA.2 = 58c70a3bfd34a094be48dc7995fd0ba5841f3909c6d9cf7b
+AdditionalInputB.2 = da786437415a2c9a0b78cfc7f4de71570aaef661548fa458
+EntropyPredictionResistanceB.2 = 07c54081b6dc90f493bb9807d065b4a29ec4f08595f479a0
+Output.2 = c1ed944147253ece7813e0166e3125eb430a962b69c1ad4601ed2b1bfc37fbebeafe43753efb1fe3bb1e6ee8df4b1b226c3db1df29dcfc17ad72c519f5814d433a269253df1f8bcbcb840266ba93f74439444acec44eaaf5156312c921b9bdca8cf6fd5ddda0e28808da8fc6bf4b7558
+Entropy.3 = 84de78962cb3b93b4afaee52fde0e279b6a76b355e65c087
+Nonce.3 = 1b72346b141704f9831733c4
+PersonalisationString.3 = 7de0d9958d90940d7f39cafd6edf65f022f387a762886fea
+AdditionalInputA.3 = ec8eebb1329da8e2cbc31da270b1b376b29d40dd4888fc6d
+EntropyPredictionResistanceA.3 = d78da6a6b4970ce567cf9a25870d34d81080c113c831124a
+AdditionalInputB.3 = 91adb15040a0c9f9f0a0257d49cf067e8c967b4e144c50b4
+EntropyPredictionResistanceB.3 = 88de4281c79214a9018507bb8b5bcc07d3fc1feda853a07a
+Output.3 = 88b5195bb3bec4493973e48219a38239e45ebc5c3f0b5504a93ca2b3d74162ce9e5967710916a64c0b44d291eda8b1a9fecb62b9c0d8ddd04908dbc5f4f3c12921bb73fcb27cbe6e1a82ec2dbd9450d39c17bcbd8e16442397688f4b3a8bcedc3ddaa57a5bf25a795fc60e9a8c162116
+Entropy.4 = aab62c37d0582ebba21f6529319ba2b1d2862d0e75ed5dde
+Nonce.4 = 4b8c8014932322d276133d77
+PersonalisationString.4 = 413f63be819b1ad75dc9049b74a27184d67ebeaf223798fa
+AdditionalInputA.4 = caefe35080a6fd6bea0ab4e60b1cc09eba85caaaa131d768
+EntropyPredictionResistanceA.4 = 45bb8dc74ecbd0c67ab94cf368ac16d8e76217a4780ef54f
+AdditionalInputB.4 = aa0ef4aedecffd70dd45f28a35364753c5851b61312819c0
+EntropyPredictionResistanceB.4 = 72a1dec6ffa8db9c87b3ca7c1994029a1328fc269b4388dd
+Output.4 = 958ec46ea901ddb208eb59a767cd101303390e50744a4f7c2359c901172023bd26e2655714fb46a2be061022444337680c41c06eab7c3569595516a15dbacb99a43c84187d1bf2399a53e02706e4d77f5f9fc93ecc1d2121c27abb5d04ac584f0e6df81825613f765c5d46ff7f388e1a
+Entropy.5 = b2e304df6a55d3c3ea383124618b80e039ed4e0d0a017542
+Nonce.5 = a1f7d6f9b99628bd7088b672
+PersonalisationString.5 = 263550101e0eb461cfbcf421e37208ed22d9652d9b139cd1
+AdditionalInputA.5 = 48b2bbe969d455fba9d785d15c05142a347f820ac7a46e82
+EntropyPredictionResistanceA.5 = ea1e25b7bb8bede6d10670828f6ffd2ea443f51332a92fb5
+AdditionalInputB.5 = e36f6d12d11b63b6be639a9cd2766fca5e566b41d8bf63d3
+EntropyPredictionResistanceB.5 = 4784c51ae06b2d2ea4fc3f75711ca3a82fd30740c39af32b
+Output.5 = 9e656ccb09a0cc57deeb199ef581ae951908b1951781f63138b2ba5051ce0f921ace73689914a692672621dd9bbfcc7901325e40268bc0e72ef5ccd14bb6263583b308feaa00974998a4531dd8e0407044c80a10b05f2ecaabb51b6b45092e628f322c830895729ca50bf21a83dd8dfe
+Entropy.6 = fbdd3830df5b9dfe1a3038eff2d03a2d486aa88b3b45d823
+Nonce.6 = dd9b137062eafa3a900b1751
+PersonalisationString.6 = d671805e1e15aeaaf85f22b475cdbb2d0698f0f69a2626f6
+AdditionalInputA.6 = 563538a9436fe53485ec575d25e0da4c5ca89db5ecfa8422
+EntropyPredictionResistanceA.6 = 1d269f08e15c73310be88b443da6c33ede1e9c15873a7bee
+AdditionalInputB.6 = f7bf10aadce980010b35b1fea22d83927e71f336c1d2af72
+EntropyPredictionResistanceB.6 = 98c9cb4e15af5f3a6ca9ad578b43bc2e6a58c415a8bbbe98
+Output.6 = fc0ca884ddcb9772ea9d8b8cf95bbaec4afa96fae8cc44ef50888a01ee3c9b256dcc0946da490c734d6e162cc2dbdd74ceb565e2bec94ba409cfc68f5ef85dfa063ac0766703ddbc3b1b186f8128048313dd17bf17f27e72801a3fa473866b43b05577687765ed2d01f2a184975bfd1b
+Entropy.7 = 5ce0c834883270a1992b22cb3c6bf35453e4d2cf6055876f
+Nonce.7 = ef71bcb16be5bb59bf1b8d7c
+PersonalisationString.7 = 0293bc19c6303117f9e7c7f369a935faf5a903c1358d5918
+AdditionalInputA.7 = bcee90dc2abe25130f842d2cd97f49df75c2cfeb4934c6fe
+EntropyPredictionResistanceA.7 = 3fb870e7da1feeebbc0bd604fcae8908255a5e6b6cfcf4d3
+AdditionalInputB.7 = 5c39574f8e12a89dbedf30689e17f08c293798d27c3112a4
+EntropyPredictionResistanceB.7 = fa1dca4627d335291cff92807e7eee735ecf8c6468ea37a1
+Output.7 = 722c749f6e467f1cc3de1711289f2c786f1bf21bf9c517283f46727d0897346a79544ac196fe09eea649c1486c842debdd36acdfb6f649fa35a301e5b6be7f1f6ce9b582b8361f49e8b1cf8a0205d3e8104621144327ff4c4516bf1c78f747a7a0a37ec30045f3c723ea3a8eb531b59f
+Entropy.8 = 3adb178d50c05c3c1ef980824ebea748d2ee499a34de4437
+Nonce.8 = c56b1c46cb9f0667f7a683f6
+PersonalisationString.8 = a09993581978385ffb42aed880a2f33d8e0bc745ef2b5cb8
+AdditionalInputA.8 = aaca232d8ce75a352814a07b2b49586a8856093a9af4fa4c
+EntropyPredictionResistanceA.8 = ba9af71369bcbcb9d9185f6e1134bdae89b6ad463219ceb1
+AdditionalInputB.8 = c11faa67b7e3d526292b93497e61e836ee244df88384df7c
+EntropyPredictionResistanceB.8 = 83ab4315ecccf2473670af57d07eb3b579a86daf1fe47767
+Output.8 = 2a521096cc7cc1d0c4df676dbff1d772d30401557c1f44e29c0bc57ea7ee82357eedf1471e28667063e615eed9373de7918db6f1a626349b8cd45f57754972a2c7fba010fdbc419d695911cd9fbf353bb2433acbecfad7c36b59ab179d015d042a7cc75aec503ae88c67b9e498e3341e
+Entropy.9 = 56961d5c507f9f7625c8d8545fe231d96d37fcfb72647346
+Nonce.9 = 3012c5b9252cc5fcde004863
+PersonalisationString.9 = fdcbeb5304b2482bbf5a9f0fb14450aeb6be8b68b50f2f5c
+AdditionalInputA.9 = c7fefad6cee356dd407baa092489a9b285fa5d7fdb799e2c
+EntropyPredictionResistanceA.9 = e4bd33437e35c7b2fbb4271d4f2645a209504aa5cfc62b0a
+AdditionalInputB.9 = a65cd621970e73f2df43d5f3dd2063cd1d5b2709860e282c
+EntropyPredictionResistanceB.9 = 85dc19268ee2bea44903b1e7640b8e358470996bc01ffdb9
+Output.9 = 439a51a5476ce4f2d3b064603ee458077413f932cdd7befe369013d0fe5b50e685627922e693896729e09be8ea7b7a0235d72810d0ecb72311ad53a95fb6bfd6727dcb481030bea19bd377b66d9570b69b1d7ddf9353a58848744d9d1f24c249d22f8939e71d97eadca6ca7657c9e315
+Entropy.10 = 3752cd4b328a3bf0ae0d4600ea18544ad2433dc48db7de0a
+Nonce.10 = 65b2c70a20972ad2c00523a5
+PersonalisationString.10 = a6335cb80567c36fc845bbb379fc5ca398b4594add4498d6
+AdditionalInputA.10 = 100ed972d5659b46cb0f227bb301db008503aba6dc43bc96
+EntropyPredictionResistanceA.10 = d4bf4db1f08a62c21fe03fdfccb308f63a74dd4c06b8fded
+AdditionalInputB.10 = b95b31d6b4ad62e1f8615d7c7cdf6fc1c09a35a18f90411e
+EntropyPredictionResistanceB.10 = fd86b88e04065bf468f56f49b84db39e7e3341fab5a04fc7
+Output.10 = fda64fd2e2107ed8349038fafaf09ce411ec4f2332bc2edc125ddc8e2d1a5df5cf81f2860996420c06bfff2d2aa0896fde1f522cc8c1770339f2c873518a6f1449c29d8c956abd10c9868b0b5134fee22be57f7b7f05a336e601a36d22dfdfa0a5663c56c51f682ae623a98c514b9483
+Entropy.11 = ee1d99754647ec88d1d0451b05bb1ac5a167fb08339239d1
+Nonce.11 = e462478e195362ab1c2cc51f
+PersonalisationString.11 = 0fa481ac853d433953010d09f04c38f5f411c399308308ce
+AdditionalInputA.11 = 33d3d075ea54fa2f7ce76b13e3dcfb58f927a91d66671af3
+EntropyPredictionResistanceA.11 = 333a96544014df59c1235651d14df5eca4a33a9d65229f28
+AdditionalInputB.11 = 347d49b12fcfb8f75a5bcccd800cb8e89d7ca26e43a665f9
+EntropyPredictionResistanceB.11 = a23e1d5f615ed87e7b3f1d4c6083af2b687a5114f1a406f7
+Output.11 = 3faae2419ae267ec51cbccc30a858cdf87f26860df4411d08d93ecb62b09f1f74a6e82c7049a78de4c61e55a1d6a7230e8700a4d4554ff8402194240797ede573793f68c141f59b8e118896609216b03c67780052f6387395cdd503e090cdc3e23d894257522846009e96a76dcb75374
+Entropy.12 = ec716d6a622283f8ab49c51e4e61cb07cc4542ed6712207b
+Nonce.12 = c123a6d48fe30ae5e80a9a8d
+PersonalisationString.12 = 8aaec59871675124edafd51869859b48d2b558b755f79184
+AdditionalInputA.12 = ae4ef7adf4e9498b509902398908edcfb9620ecdad64279b
+EntropyPredictionResistanceA.12 = 02099d7f4059dd7cb523cba0caaffb9c9196e497578c819e
+AdditionalInputB.12 = 02ee903a46b92f62f90e81bd8ae4cad9ead8498a9b00ed37
+EntropyPredictionResistanceB.12 = 98585f792ad881731d889972c5ec594ce487917134a641a7
+Output.12 = fad78d5a3fc8e65731f3fc905077ed5ee9b97b3639c850c2d951ca45b5135072776ef717bd9f9973b64b588ccd96841f1ac077ca63cd43f6cb8310bd26231f791b70c039c98713015899c42c4e0cd5c12eff7ba5a13eb8d5968eb7cc2d49ba272946abfa28b479acb050db2822dcb837
+Entropy.13 = 442069ad40223a7db0bded4d811436a9f064fd325cc419c2
+Nonce.13 = ed8b09c6280d12c5d3b306e3
+PersonalisationString.13 = cee3c7fec66307a2e470696106d68372cb49f0ec9cfacfd3
+AdditionalInputA.13 = ae6d92d5de93683bf6251226cf2f7e2acf895e922e6825da
+EntropyPredictionResistanceA.13 = 26496625a166a97578f9250698ca6468ac94892040b18289
+AdditionalInputB.13 = 78417a149f329b1bfc000d4dca63e5d046b33a91c2cd0470
+EntropyPredictionResistanceB.13 = 39ac24860f9e18c3392bb18b2a06d279542cd97920d5d92f
+Output.13 = 042744fc87a338a3d988566ea1ed6eedf7fdeffa6fcaafcd4079d9b707485a584f492e5a219f6ff784cb7c0359f5bf5386ee2c328dc2d352809e350503ef0e6cb05c4a7acc9b0d1a8e471072ac06051567e014035b25a14412f40c648f5d9723d4a76033b97e0ef81a5a8a6fb12ab2cd
+Entropy.14 = 5ae0fd23ce2544ceb293dd723be375ef014f48da560c7408
+Nonce.14 = 621f3c8397d85b9a4cdece62
+PersonalisationString.14 = 4ddaf2e64e06ca43eaa4c995724f1bc30f98f39b918f6636
+AdditionalInputA.14 = fbf683227e9d6a8e464a21c8b9d68d2617f020f7beececcf
+EntropyPredictionResistanceA.14 = 15a85297421f80abb364066b5296bebca87069fa7a6df5b3
+AdditionalInputB.14 = 5b1a787a5a1cd781847df6d8923092034ba39dadcf8bd3b4
+EntropyPredictionResistanceB.14 = 01a57c46b0b64e6f93ee2cae9f48321b441df03deb336655
+Output.14 = 42b111e4a4e6a5cc5447a1b537c3d264e5edd42bcfac223b8c9163fcffb5dfef3a371804373753633c2c63167bfbad3ec0614681c3bad35681951ada5b46cfa13f99e2571898f9f8c74ed8b58628e15f2ebf342ee8fe84e095e7eb5a3bdc573a2e95baf4dedb4a2e6a9db15db0c158d1
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 9969e54b4703ff31785b879a7e5c0eae0d3e309559e9fe96b0676d49d591ea4d
+Nonce.0 = 07d20d46d064757d3023cac2376127ab
+EntropyPredictionResistanceA.0 = c60f2999100f738c10f74792676a3fc4a262d13721798046e29a295181569f54
+EntropyPredictionResistanceB.0 = c11d4524c9071bd3096015fcf7bc24a607f22fa065c937658a2a77a8699089f4
+Output.0 = abc015856094803a938dffd20da94843870ef935b82cfec17706b8f551b8385044235dd44b599f94b39be78dd476e0cf11309c995a7334e0a78b37bc9586235086fa3b637ba91cf8fb65efa22a589c137531aa7b2d4e2607aac27292b01c698e6e01ae679eb87c01a89c7422d4372d6d754ababb4bf896fcb1cd09d692d0283f
+Entropy.1 = 371d2d3a50d8fef465b02d57f0f102e820c624b0e11703bb81badf8b0ca18415
+Nonce.1 = 94b0bd16c1fc0e5e1235dfd414081164
+EntropyPredictionResistanceA.1 = c54ffd056c9cdf688284f615cfb4814cf28ac6dac05756e07e6bc9f56033666a
+EntropyPredictionResistanceB.1 = e35819ae359d53aad14adc9199ea154e45ee2b064955a8f334b9f62cea23d0b0
+Output.1 = b474ddc66e4cac2fdba195cb9c5ee521f4a3ebc24e3722df281774b7c9acfa87bd5b85c1e4e559e2859f2382ecc3a820d76cacdf10ad559691b7059b4e7f3d9a4453ffa241627a3a258b3439ab7f592e95751c826b6f89c92d1f85fc855d231045c405941b9a8b5101f76e6afed9c2032712eb5c60c16a7ecfc26ba0d47adf04
+Entropy.2 = 60e5cc3b260a0fdb9e994bb7c7b7fc32ef0117813a33b4f6af13ed81a61edc3c
+Nonce.2 = 7209beb9336855fe207fcfb77356894b
+EntropyPredictionResistanceA.2 = 4fba0b7c3a93cf6cdfdafdb4b56cf0938f2cc18ed54a02a3551247ee10e606b0
+EntropyPredictionResistanceB.2 = aaa8d30cbe0bdd3781a1b238e19cbd86a2dbdcaa9f94c3d39f9deb8c4a6801e7
+Output.2 = 628ad20bad88e5b0ee30107640248a81f7c1ef77f757a40e53927d3b10adc5b734d379d71a28b3fbc0787d6054cfa926a5a74b464b818f8d185430773e7ab055f9647eec01a71dcf680abf7589329e1248ad9df205d10ceccd1bdfe4c9b3f6d7b804c5114c1406db83c921c828df36f5755e989520274669f7f06f5550c97d4f
+Entropy.3 = 5b9320748b1c4c44624b26504e9e9765a136f965c5a8d787585391782c7432e3
+Nonce.3 = 3e5d97a4c05394d570402b908f54b80c
+EntropyPredictionResistanceA.3 = afe9be7eba6c4c4424ff53adca50b522a0ec1b51efea35bf474fc6a0d6aa67d4
+EntropyPredictionResistanceB.3 = 4582c01f287f8a8a9caeb571e26f86100990e5633139b56f4c733cd5ad08c4df
+Output.3 = 70883300ef578f796d8f85a30cd8b9e4e2c29f84b7b127836450571408c92b5a1b5bb040f83bced508f26d7066ee0b6e6364eeb1c639a5292050f755fc78e828c08054b14e3a9993c2685791e2eb1dbf258cb762ecde1aa2ed41fc004ac989e0fc26e245ec87a96004c5b28c45d8d9e0829bdb696137f9c944f538c28be34b05
+Entropy.4 = 35a17d1251628f82da8b4b35b979783f50e76b2cd77e03ab2f64d29d26b22d82
+Nonce.4 = a7b89cc8ba85c70e10d42adc80da014a
+EntropyPredictionResistanceA.4 = 11cbac5342d46634dcbb33baea277a67afec23b3f50875e4b965b3565de66e36
+EntropyPredictionResistanceB.4 = 025e0db252b1b31e45683a9676b55f462abbf6887fcd770599b123f109e5c9fd
+Output.4 = 86e2bb0f5ddd938978692ef93d19d34865a04484cf82aaacf4546378e2198a2d8050ddf53ab618fb98f9bc59a614e3d60be06a54eccc7e3e54bce7afaf979a6ff4d7fa19a9d7669656fa21fbefa9a70b134c01844c0b85a86b9f98a14255158ae8f5822ee506f88e81f09760810b19f4129d6b47a10d8837d633671558ec3771
+Entropy.5 = 3d6c40cceeaca0633c2dc71b7135be9d64d07aa80e6f3a86f43775855f14d3a4
+Nonce.5 = f5b702ec622e0c84eb3fd4662ae150ec
+EntropyPredictionResistanceA.5 = 364d343fd8068b87a8b29e9da7f181b91aa002639980da5489720068816df144
+EntropyPredictionResistanceB.5 = ce1c01ea38915b6207374cae626f7199a42d47c9232094d16a04c368f0c11d30
+Output.5 = 75eb7a740b6284358f1b2f7c8c1875c027eeb05e0350179f7bfdba23dc823285cbc33cfa6ca22c8e70bba00e903d3f71ca66a1d7081f742574613c2e8854a0d0e59cbac17356b1abb65b533bf563d8169700e196d7d1e25be8e4ed4502298b21dba8ef822c565443c46a8ec08bf3cbe11ac51eb765e53d2b035a8afa29ed1147
+Entropy.6 = 6174ea125101e34850e11dcbb0e48dfed7834efd45dc9d196a42e9bbebc9f008
+Nonce.6 = 53467570badf39ac3366084682491479
+EntropyPredictionResistanceA.6 = ec5e80af6d5e73e0cea43d1ce15c277ccf5bee254c2d4e57623a17653d48bd82
+EntropyPredictionResistanceB.6 = d801b0cab2df27f804e23e4dc1dae0b7eb6160264c8ca4712d775970a8756a0e
+Output.6 = a9d269c3771e1fd3cf2a5f4470c7e6560c4db008cce0f4c0d1ed939157567cbfcc2353c19e5c1b535c02d5601b45ea2a1d8045b42df6508b7389fdf350c107dae05da4e6e1c078a26aec3d0ee5225a680c15c563e3727d352bc257d3a4defda48e6dfdd5c7001439cc587ff033c5afd3b1fb7c618b2113736a362058adf12968
+Entropy.7 = 6a7df1ea8b6d92fb4f1b66b6014c97466a9b9edfc68de647a8a4c36dcb0f4d77
+Nonce.7 = 6bb353bbd5c18ddc5aa274ff29abecc9
+EntropyPredictionResistanceA.7 = 46eeae7eb7e931673c1ba88ec99d3105059dd1f9a7ba8145e0bc86459e525028
+EntropyPredictionResistanceB.7 = dce62564a7bbb5479320d75cafe40b4c7a0daaa2bed5a48a0eaeaaa8d6c76d1b
+Output.7 = 32e66872ffbc6d93da7f923f82574e3273c81a289257246d3e69b94365115e2b91ddcb077034914f0bf3b5871b62ab773decd00121c87439ad5318adeac31ac024b46e7b49cee5fe0f1dae93a4b93d4245c016ae6a7ba7e9e9857a38b4c220c3a30903eabaa3210d93a08f703626ead078d59b28a42d76081e9b67d7ab68b366
+Entropy.8 = 0a9056319735191d4eab3b70f533e59b0a5a70aeeb5c00cdeaa5dd26ba7af09f
+Nonce.8 = 2e259bd4e04cc9f5ba8b5c8dedf7b155
+EntropyPredictionResistanceA.8 = a1ad8112d6b1daead36cdd337266fab65c85824f878219e611d48c4f73ac7c0b
+EntropyPredictionResistanceB.8 = 96e40762c87d1a78e63e3b266f5fd7b9ce86252b9bf46b0855238602c098204e
+Output.8 = 0ea1662f0b95b6c1cbeb82f7b7523eba3f569544b0841f78b1c05809fdffb776eaa6d1c77a8b60ddc680c18eaf9096013d2f4bbd41617e3c482d29aca8d84822c07b55825e46a26abe7c39fe17d2228e399cb88e36e435438ca919b37a0f868fb5243afdc2cccea3b06fd313aba67dc688203878d2be0f4f8864d831622b6f4d
+Entropy.9 = 9ee3fca776f4e7336f5336e426d8208848c854c7b0b271d6ec84dd3e86a86fab
+Nonce.9 = 42c0825cf2be769f7e31924b34a3a760
+EntropyPredictionResistanceA.9 = c94d0db714b2a09ccbe26b2acc8071f083332c3ef50802b2aee1eef195b74e9e
+EntropyPredictionResistanceB.9 = ba52fa49901d67585a766a9465d3db843d3f0a4a3a9d535dd976dd98aedd9df8
+Output.9 = 1c1151e976bdb947bdf7bed108c742428aab2e6f5ac7cbcca6fcf2459d2410bf6ad89636b02337a453a21bf1aa72f393deadc925f9a4dc7ff978ba837c58ea30267cfe61dbca4a366b9ab9904ca6223f76d2d33d8d3deb959c6c57baba368e9e67f2d9d4d3758d072df868d2aebebedfca3bfcc018cdb19ba37b593a0ae80c6e
+Entropy.10 = 1006e3b161fdd1f30442346fc91b3371a29531bc9964f84d3fefd0ea3a340efc
+Nonce.10 = 06096974bbd600cb644db66b738ffcec
+EntropyPredictionResistanceA.10 = 05696a981e50c7f6864a8279e83985ddd42a9c74affdfdc8452ac25575def3af
+EntropyPredictionResistanceB.10 = 3250da95f0182331dcc7d2d50ff71dcde00f92b6874ee902e613779de0789dde
+Output.10 = 3bee9fe6d08899fc7eb6e1f0978c68f5dc9dcc76fbfaea7a652d0ad22632396d6e065fef14aafac7d3afb066ea743f0cfba804cc9686405ac966ba7a291f5dbd54dde5d6a330383b2355319e3ef4056b856386cf8378a5e11d9d36b0207e2cd414f9ade2af057c53c8c31e72fe765f0582da5a685eb42a0fd969dbde2642c4f5
+Entropy.11 = 83d0546d20fe18184c5ee79bea6f5818881d158dcc7780c0350baad7662d3b05
+Nonce.11 = 78bfe5590b9923c3500ccf96a797d9fb
+EntropyPredictionResistanceA.11 = 246f31e6b2454c6a443233ce0264fcc0ffd41f0a3bdccdd9417d1614aee59688
+EntropyPredictionResistanceB.11 = 0571ea5f2e62fd6c6e555613024262a26a169f17380a19f2e5020ad3359e4842
+Output.11 = 0e453a3e0a4d58f418018f09c1b7ee5e3df81d309e54b77567b180437c258b870069c0257bb8db332e9d790ed325633260967e898e7933d38832fe7a677c9484992918421c75d7072b9c04162b202872200e28db3c03d157c8adb077c4c8a661c534ff5c1bdcce80ef047eb197b0bf3939daa8be31d6156e9d573cca4b11008d
+Entropy.12 = fb09b02011b54f9fa2a30783141a520e11fe3e2dd55b25799c19be9fa7bf3c20
+Nonce.12 = e8fbb8fe9e43014516d25c6930865c27
+EntropyPredictionResistanceA.12 = 27827cc01406aaa1827bf2d9272ebe18a44ca74d63b3b78fd67e61d5d96db509
+EntropyPredictionResistanceB.12 = a77c857ae04e06bdcebb7aa491d1b9a99a0ecb8c7dc3d7bc69775721b75289aa
+Output.12 = ef8783f00156c497796d787c018c9c01cfef9357cff2ba8f047109a0d17f719ac46952a7147e7fe8d60fdebe2c744e50522e09aa0d18de258459840ae320d48cb71ba11432169ddcdd15ce081f3ee9719cae4ba601bda1cbbaf9ebe82559b69107111c96e468d23e0268e53c9430cebe7cb02b547d6913b76e4c1643b2a2045a
+Entropy.13 = 07de9e5e57368e7833177066c804575d984bbf9ca4bf03ea3118dce063027b2a
+Nonce.13 = 1da1e930b356722ea0c0f02e09db6e92
+EntropyPredictionResistanceA.13 = f407fd606fbddbcb3e574f0ef548c12b97460e2079a004c1b5f4612ced9f5034
+EntropyPredictionResistanceB.13 = d8ed92d5e98eb176db2eba898915f31af7cd0763e7da1e64ba132a08deb82864
+Output.13 = e780aa6744f592da3fef690e78fe8c4fd40c364cf5f1a8be34f23f7324ab387b09aa3b5c126bbb5fb25fdd26d4e536f2eaca8f0ea8c93ac863c1c5d80314480fd9e2382ee1d9b17828b7f3716ee669b9f369655091f0ee23163996c7c815c3f5e705c9e48c25fec05a485eb39f3814065283dd1d0c37cdb7713acf24e3484afa
+Entropy.14 = 5957069eb143c1526826c15358e0e949096108fc6e09537cf3d6426e155b4178
+Nonce.14 = bff8a8b7c57c3cbf8f9c78b52d76509c
+EntropyPredictionResistanceA.14 = 1ec089e083b29c0adbd7d703b3e0beeb2118a052548fb1e30455b080c111cbda
+EntropyPredictionResistanceB.14 = 6b4930e8fb7daf431060778445bad7d9c3f78dbf811e6c9c58493844d90e73c7
+Output.14 = 2f5b7e172c5e291f68d9f59f0d14ec516e7e80c2eee36d1aa0734e3f819a976c74a565ad03334fbf1c60dacb1a6d150ce1316b5c256ca85c80fcee6ce0c7004a0a0ca8be5dce19a3b68f92f3f6b7f8e9c4a3177b93529b32b78a2d0ca18b27fe80b42546d1211587acee2bd5a63f3ae66b5e5d66a52154b52bea2b71cb05b9ec
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 2cad88b2b6a06e703de46185ccb2ddcf5e0ee030995ebdf95cc4fbc38441f17f
+Nonce.0 = 32310770e04172c0cf91f6590cce44a4
+AdditionalInputA.0 = ef6da5e6530e0d621749ab192e06327e995c3ac0c3963ab8c8cd2df2839ab5df
+EntropyPredictionResistanceA.0 = 448bfbc5ce9e3b9da3e9642daecd994dfe373e75253e8eb585141224eca7ad7b
+AdditionalInputB.0 = 44278b31ed853f0a510bd14650ac4b4971d8b426799a43511d016be68dedbb8d
+EntropyPredictionResistanceB.0 = afb57f69799c0b892b3015990e133698d543aa87829ace868e4a5e9525d62357
+Output.0 = 4c7dfbe509dc5a3ac26998723c6a44cad20b197fc86117c778d1568ab828923862885e97198f77a1cb45113f5d78726a0f120aec94afc45f57c8dcc1cb092b343480012858ef5bc559f57023442209326ec4a54d91ca3a77dfdf9e75f117cef50e6fd2dc9af6ddce8e6515b4a97357a97b6cd274f68a042fa41bbd7b7261b034
+Entropy.1 = b91fe9efdd9b7d20b6ece02fdb7624ce41c83a4a127f3e2fae0599eab506710d
+Nonce.1 = 0c4cb40526c6bdf57f2a3df2b5497bda
+AdditionalInputA.1 = 17c156cbcc50d6037d4576a37576c14a661b2edfb02e7d566d993bc658da03f6
+EntropyPredictionResistanceA.1 = ef67509ca77ddfb72d8101a462816a695bb33745a7348e2646d926a219d49443
+AdditionalInputB.1 = 7c7b4a4b325e6f6734f5214cf996f9bf1c8c81d39b606a44c603a2fb132019b7
+EntropyPredictionResistanceB.1 = 97755353bab4a6b291607179d16b4a249a3466cc33ab0798517872b279fd2cff
+Output.1 = 9cdc638a192322660cc5b9d7fb2ab031e38a36a85aa814da1ea9ccfeb82644839ff6ffaac898b830353b3d36d249d440620a65107655efc0959ca7da3fcfb77bc6e12852fc0ce2370d83a7514b31473ce13cae7001c8a3d3c2ac779cd168779b58273ba50fc27a8b046562d5e8d6fe2aafd3d3febd18fbcdcd66b5016966a03c
+Entropy.2 = a46367f0ca034a86604003faed2ba524b6c0bba8418fb158ba13a8f730d91ec4
+Nonce.2 = 9b3a7e35c619f0e1abda6d140b08af85
+AdditionalInputA.2 = aa020a1aa92f8a426c5d0d44191c6b46f68c1abbd5dcbcff0df2c8e024a3288c
+EntropyPredictionResistanceA.2 = e3cfe402b62a2e893fe0244e88b9a489a1035d287947139af7873e5f7d0485e8
+AdditionalInputB.2 = 38965ad5f163f663b3d90d4f5b67ed2f4db22c90e5878bddcd4f230dc77f4b0a
+EntropyPredictionResistanceB.2 = 7238bb11d4f631090c34365222eb95baf7b865be5f6410ea0aa0484e3de55483
+Output.2 = 6c7edf375281b751383211a3e09e46c61a9c425fe326041063f0f03e1cfc01e8a830f9c4bf77377c4a9946c61a8b7cc664b22973c556437c9f5557b1a1222c45789eb700e1184d5d6e52f597ba5b1deae3dd3cb2d8325ed5b3929946e3fcf9e4f199115eafba9abc87558fcecc63723cd8cdc8dfba48a3c64e8a70995b0c7ece
+Entropy.3 = 08b9db82f179055872383f58203aab4b9b701c6d7a1cd428bc1860cc70e4111d
+Nonce.3 = d5cff962725b20d8121fb4f484a846c8
+AdditionalInputA.3 = 88ebaa296598dd71d22ad5cdbd16603e1982d3b00391e0e83862d765148173da
+EntropyPredictionResistanceA.3 = fcae938683cc1602b692ad88b2edb5ec1c8dd408f4c10ee77a460bbc40c8e365
+AdditionalInputB.3 = 4fe9752a5a88ec1eba5e7d85b193910f1717d166ed16e12676cf9dd417d96f2b
+EntropyPredictionResistanceB.3 = d5b0bab8b6c8fb3d6ae8f65dc91750600592d1f0f9ff661d39436329263b9213
+Output.3 = b4b02be55fad8dae22716f95038cce34f654c3dceac59a39ee85c55c6a10864e19dfa5710231138efdfcfa73652e99fa3febde8b06ad06af23ded42d78bd7e05ffed6b403df2320de419a08065dd254e5c676c16aec3b82774f014811cb6f32f96bb240bca91fb9f05b57c776d4474d309cb08a730c269627b63858821657e8b
+Entropy.4 = 76b0ba5992daab1aa40ebe377ca2e0f6407eb1729961151d216a9989b49733c2
+Nonce.4 = f7892eeee64338d8ff151db27b20e666
+AdditionalInputA.4 = f8b63da99a35cd63334c7f0f101a80b101990f7646d31eb58bd4cac251f434c2
+EntropyPredictionResistanceA.4 = 84015bb1b433a01fd7570e2434bf39d924d19096199e367dcda87af7ac8b9f2a
+AdditionalInputB.4 = 46a417f4938d88406d3ac65dffffff7e3c410b0999e9c6dc7787ac46a0b1be77
+EntropyPredictionResistanceB.4 = 064e8a7bc291a904fc5a40cffb306020d718de11d3cdc5442724f4538d835f76
+Output.4 = d557b0064c6d8feadb23f9752cdaf5e443a295ba97e5fe3db8bdc3a502b12394951e69497638a758e7315323c4d9443ec8f144f9dff421b0feab8d541fdc3b5993dae6db4a732d573d27f4383f825783b8d0b93951719b95ddef703f36c1d95034b4c0b12615aed9314067c35a55a091fdbc3a459a22a75b6d1616e79d551b2a
+Entropy.5 = e82960489c01468263e8fe59ac341af1cedc5595ef1677c00190f87f10679295
+Nonce.5 = b0d64271e860e5e1bc2b7c24c2127c94
+AdditionalInputA.5 = 9d544530ee12e9cb06172d79ae291932e17b240f9cd92698b6a2ec061fc132cf
+EntropyPredictionResistanceA.5 = 57ab6db2495d422d24f3560a909513626cc0e0e8d74171ca51d3d1d31777fcd1
+AdditionalInputB.5 = dd1ad16a1f9decc0cb875ce35c7ad1a3105818679a12b22149b5a7dd0a1b7d87
+EntropyPredictionResistanceB.5 = b771f5b186516d45a270a7c5c96f098c5051cd79ffb04c7981cda36a68eef347
+Output.5 = 9a08d941e9a1bfd9c3e059dd06caf008c636ca08bb2e136d0bdf162c433218045224bfd8d75b8241025f93c4a8203c6ea1fce63c37bb20444c5d4a68b13ee663b262c685630d2a6c40ec224027d75bfd3dc73e1d538400789f2221ffe0ff1bff8f514c0229e684422d77b2b0298c0ba8a2ab02610e880232bf516f8ab507c461
+Entropy.6 = a1982c8ea6aa75e5c0486bb26ab8c9dcf3d13034372207bcf103adca982bd902
+Nonce.6 = b1388afd3745a00be19abbdeb12225db
+AdditionalInputA.6 = 2d0113c4f225e47b5910cbda7d27d98fe2bcc23d7bc293da1028e20848804353
+EntropyPredictionResistanceA.6 = 35ab41471d93c02aaa2414354626246b3ea3d932dd522e5ff0fa81c9bb7bb1f3
+AdditionalInputB.6 = f6d92fe0603e2548fc13a560f4b1009a2cf63ff91c74b17cb4f256611173ef17
+EntropyPredictionResistanceB.6 = 72d851b57043789abc1837d33d52779b638aa2bd1693caa52ec7b0824adb8470
+Output.6 = d26b469920ec26d6891d5243d3c131f129832695a130386511f02a66e92d538bd165d9bcb70ba5e8df479576b4342a27f3ce113584e0262f8eec814f0c97d48988c39ba548e4da78601103abf9c6a47ff3705fcfb7d1a150535d4af2fa219509e94bd8e74f3a90fd0ffa63159b4b62eb533193f9df3c86864f9b5f05249175a1
+Entropy.7 = feecfb3ecb1b1322b34d90f25fffa2ff0c2af010a942a0467c04e9338832c3c0
+Nonce.7 = e5c5876ddf0e3dbdc2d63416fd77daf6
+AdditionalInputA.7 = d1e3da59674d0ce33cc3e6e56292ef47fc1b3f495871f5a74a8c3f61edeb593e
+EntropyPredictionResistanceA.7 = 170d67fd6b7ff621b1e844914711817ece93e5edf428a6e6325193d42bd67659
+AdditionalInputB.7 = 74d491697d72689a19c58982621e68a336ba9f7143c199dacc3f37508ef5f3a7
+EntropyPredictionResistanceB.7 = 8ef4672cf1e4de4b54df68d0fa8d268868813162fa712d294491d338b65f27f8
+Output.7 = 78de8963019611fde15ee0c8c7b8a35c16a5ea1e86fdb435c422184cf0f7bbce3d6dd7aae11b6397ca213c0aca63188d3982c2451401845d02fa0822ad2f9190022f6c099d137c5a44d9d74a77c75bba2350f1269b6bf90507736d8576b53dfa14ccf7c685ea0acc8484d6a5d310b15bf3941666178414aae3d76d6d5f4aea9a
+Entropy.8 = 1d6bdef15811731f6e30d66c79104224c5ed9d455bf9fa2d3442e8d61395d53c
+Nonce.8 = a6e3d5b3862fd0d0b2ecf3577e2ddd12
+AdditionalInputA.8 = f25347f88fb41d65602b99a370be7c8ce1dd6a29a0a7401b4a3279b3e563cf4b
+EntropyPredictionResistanceA.8 = 4f7e33bf11a7ecebcd2b26a117c3805bc93b98ee0e70b8ed51b929cf76f2fa72
+AdditionalInputB.8 = 4e5c80bd7ffc931fb57632935faff2f28c4f75336fd28f14f7fc27a12c7cb41b
+EntropyPredictionResistanceB.8 = b433757da47b1ec92c11fd91921b171ff51a41a996866e8c287ea130f06cd95f
+Output.8 = 54a280962af1a839b470b42456a4381eb8cc26f16303bb97b6f709f91a914ed72a8b85d16ad4d26a900c8fec4148cc42f9416dd19f31fd1afd527f5fb266b6aff100f890b57c8a3f9228462d4dd92dbd5af2f9daf05e5ee2843e56f0e180eba8a2cabab36f739a7fd3c04228ec007ef43ebbc25841b7373f2c06fdfbc66f8322
+Entropy.9 = 294c6459958425d309d4df6617410f34e96efbc1e609178f4105071171d271cb
+Nonce.9 = b698b79c7f83851ab0a4e29a756b0585
+AdditionalInputA.9 = 0e433b8a3920ebe0053e388d0f2588123c6ce644280dba77632bea8de1b6fd9d
+EntropyPredictionResistanceA.9 = 84cd5d446a25f77749e4154628c3d6963c369585a7768baeca0fe21cc40b00a8
+AdditionalInputB.9 = 411a39921ad892db7d38f51c51148296cbf510a59fcf4fd2785c2acf310fae6f
+EntropyPredictionResistanceB.9 = 7144cbdaeba812bb1dd8a18e4d7e50e810885ac520e44c398d1b3c41fcaf6c36
+Output.9 = 04c64a3c4ef8cd3aa322596cfe08e34b435bb55943c6ba7abf72b549d4a057e3bfeb53fa4e2adbee63c88684bbd5b84c4c1358c9c0ff0ffeb1c8fc972c4e79641c9a4ea0901d9c85fb9ac5eeb5d5dbdd324649c0db542e0946d96cec8a990147be80f46685cf8278b8cf89c9255baa566740c4fd12e6bc163be6e52ab7799c2a
+Entropy.10 = 1940c31637da2a1a4a3ad66826e074a0d5ce69dde50b75a55b5e09daf23c097b
+Nonce.10 = b31a4e9d363f3c716cd9e899cd98bbda
+AdditionalInputA.10 = 0e21b2eae0d946c1da14153d9a3945894f43ae5331ab95a07a727b05bffe9f35
+EntropyPredictionResistanceA.10 = f67e6f909077c7051b067d9f2a6ecace36e5053b2e6329ffd364e589403a0be1
+AdditionalInputB.10 = 69646ac749185da00638654c813d45e0dcc842202845cbb0a8158b2609733146
+EntropyPredictionResistanceB.10 = af2b27d258c90e1cb2d8261bcc7bd5f910f15851a87442cafe87aa42031befd5
+Output.10 = f5dc9a88bcb19f74101fb46304bfd66fe0e245357b656e751a9ed535bed3a5b47f4f84c01068763a3fead22c29d7def5d18e32453f806424177082d1d65dbe3ee5d9765fd5364a1cf55dc64ee9f3f313697c2625327373298807a60bb4536c3040e76c9995cfc6eef225a122c98849980d40ea0f86a122756d4390096b4d8fac
+Entropy.11 = 83a44c38f699a883a91ecbbd9db952a62b65cbf75e72a1a2497810a73ea743c4
+Nonce.11 = d15ffcba06cd7a3338b3294afb50462b
+AdditionalInputA.11 = 3f6f8f77f3051c945afad9969af764fcf4ba5b567c0a096bec36f712f0405539
+EntropyPredictionResistanceA.11 = 1eb4df21dbe7107a8b4c6a41b41977f38c33b1ada829517d0902a3bc0836bf89
+AdditionalInputB.11 = 210ab7859b1354f53e143e8b06afe84b12fc1b16aa4e3e818dc56292656eb3f3
+EntropyPredictionResistanceB.11 = 9c257234f7f63219acdcdcdfa510d284e7380348296eaab4074ccfa9037e6b68
+Output.11 = adc004394a5bf98be1ac40123ab1e430bf93046df87d20b04c235d16543c9a2b80f99f841a946e91a4c6f10149f7a703967de651e3af208d600ebc2c6e2c1fbc895760de537a4da2870e128fb10d8fa1f06870d758b9804c49c2ab81f90118042f78a89809b92c2abce87b230587739acbffd082aaba422c88e7ce199691dd87
+Entropy.12 = 7a45d07a2bec078c06031b79e94ba6b34ea1522504f62df3c7543d6a902a352f
+Nonce.12 = aea5251586a8bdc562aebfd9f7175a02
+AdditionalInputA.12 = 16384f8c9eb749fb49fed4a667339f2284634a5f791369739d0401a84d435373
+EntropyPredictionResistanceA.12 = 5406525dab022350d8452cf3e187e30cb54320fe9f13a351e003727278fdd12c
+AdditionalInputB.12 = 1b81f0d21a3da462ec2f81d0bfda1fc0143673b80bc7ecdbe524ceba9ae96ddf
+EntropyPredictionResistanceB.12 = 2ac1bf56556317ad5bffb3c2f89069c7c742be442f64972304a3a97ad40481cb
+Output.12 = a34623e01a14b87c400f681a6fb4ae66b97afbfe040758b99dc807fbac73d22a5cadad262f23ea5d27f726993c8220921125cc78d17a990145bf6845c7719bcbdd195348c40da96fcd60a54cee25af89c3b1312d88635223ea8c27564e918289fd0120b437c42d99a35f198de3e9c092c493a971c8ace8c48ab625a5a92d6fd0
+Entropy.13 = 646d1c1e7c363c4cbae7e6a4f606c95812a7e0f2fb86e33f178f5b502c6457d3
+Nonce.13 = b57644b3bc1ab6ceb09589870c7d54ca
+AdditionalInputA.13 = 78566b2ffd3252772e3bba71f3445497a2150afd48bc130251baeb4332da8a27
+EntropyPredictionResistanceA.13 = 19fe763b481308a64667913cfe25103fe738fc0a800920f0afec70ef86cb8a0e
+AdditionalInputB.13 = 888b33c6abdcd475586e00eef185a69726eb9b024be447e9298b953fd8021906
+EntropyPredictionResistanceB.13 = a2d9dfd3895cbf921c87e64905f81ef61dc231b6cd7a0135003726451cab95f2
+Output.13 = e659d60d17da14043cb919709bbb5b3cc5a203517353c8badc0634ef2f2ea2dab6fb2b327e296ed6341dc4bf431c0c14ec041de50395d25a4a4cd64a6420153a50af886f48a2973523a4ec5baff43526556959a37f3b2452d5753f4d2a3c050b2e8f9f6ac2577959f346ab37404d029ca51a789a5521ee660845f913d2452033
+Entropy.14 = bde2de2b8d3c4b5c4af2998d70da9a21340b98c7630d687d685a71eafccec446
+Nonce.14 = e0194d245d2811a54ef522dcfd96abca
+AdditionalInputA.14 = d903a2271f1ce24f20222120f8fee3b8709ce4fc7ba85b77d6ff049e81d7a37f
+EntropyPredictionResistanceA.14 = 2ecea6d7892dddaa4dcacf7e5ef3fb345c33b23a3de687ab578aac8e6757547a
+AdditionalInputB.14 = 03bffe38ef883397cfe53edf6c79e68493b7a637d1ceeed9d569ac6195b8e4db
+EntropyPredictionResistanceB.14 = 1b3c127a633e58903e8367a805840020d2ce3f6f0372991d7c7f234c3b31118b
+Output.14 = cc317f81c3a6cab42933d1733cfc4504dc0b232dc00502d29b8e6fe78ae11d1d1ae4a1c5c6a7f99543a844ec5413b6dc3c22e3bf0cbf12e7b57a48018c75f6ab25fe78b786d2d035de7adaa3a3b7cf1ca564f342fff4f9e6b3c9d2af384cb70f5abcd28c99a5d10f176dd2f702575bfb81a984db2507434b4a3c8c286e3dfc68
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = f7b90c797a4a376cdd9f5c435f5985e77f36ec1df1145a12072cbb2a0da378fc
+Nonce.0 = d95202986d45896e9f4a65f2f353fa35
+PersonalisationString.0 = 61535c5c045e784267fd0d85f2861778fa53c8e8586af67cf5c9f21a28ebb656
+EntropyPredictionResistanceA.0 = 130ab64f41a5d49d6a241e0260b4bb8a46a16c6ac9e234c84b5b26cdb518d459
+EntropyPredictionResistanceB.0 = f7670e817ac061ac60439be60982492000dc5da8bc6636bdac8b1cab03198dfd
+Output.0 = 8df4e349f9ea43cc509ecb2b1124358cda2de1f5cc9315edca63610a413478d68b8bb49c2814c82ce571f6e0a6780fa21c4b570610ee0c04d3edb92124f580f962d741330200c19885ca716502223247b728d66fbbeb7c6cc25cfe9866b1450b346227c7663074c8b15d189f1c6edba172a53c733d67c1c69bd7aca7e62013cd
+Entropy.1 = 135496fc1b7d28f318c9a789b6b3c872ac00d459362505afa5db96cb3c584687
+Nonce.1 = a5aabf203bfe230ed1c7410f3fc9b367
+PersonalisationString.1 = 64b6fc60bc6176236d3f4a0fe1b4d5209e70dd03536dbfcecd5680bcb815c8aa
+EntropyPredictionResistanceA.1 = e2bdb7480806f3e1933cac79a72b11dae32ee191a50219572028adf260d7cd45
+EntropyPredictionResistanceB.1 = 8bd469fcff599595c651de71685ffcf94aabec5acbbed3661ffa74d3aca67460
+Output.1 = 1f9eafe4d246b747414c659901e93bbb830c0ab0c13ae2b3314eeb9373ee0b26c263a5754599d45c9fa1d445876b206140ea78a532df9e6617afb1889e2e23ddc1da139788a5b65e90144eef13ab5cd92c979e7cd7f8ceea81f5cd71154944ce83b605fb7d30b5572c314ffcfe80b6c0130c5b9b2e8f3dfcc2a30c111b805ff3
+Entropy.2 = d78eab5329fe38a26ce2e54efcf8f0c15cd7462a5878537a1e3615d098b18697
+Nonce.2 = 4f48003172c7204fe6dd77c89fa92fba
+PersonalisationString.2 = e934bec18cf8e9b9293029d9ed60ecde1d46621439c322203f7c22c6b2d77544
+EntropyPredictionResistanceA.2 = d4e81412c8d167bde3857b9e045bcb5c666d64aa990a7d92e46ca533b93de544
+EntropyPredictionResistanceB.2 = 238b79b6a9551ea7dc52bfa1557fd973bf6e594ad4bc0e63b651d5955da37f6a
+Output.2 = 285df697361c284753c94865081c3c25ffcbc77709fc51f37a09624bba67149156a087efa92ae709eff1bd50bed464f4f31c4b66c1cdb71a506779b50645c165a099718d599fc9a166f345abaf8b0b2f9e700c253a454cea49262a334d79a01c208caad5073644b257b2b1577dd973862c6fc7fcc3320e24e1e31063fe6e94ba
+Entropy.3 = fad6a0fcddeefb263c27432ecc6470e44f26aeff2840e8db682ca14ab45c31cc
+Nonce.3 = 89402a698ffd36ca8ffce986568f728a
+PersonalisationString.3 = 352270c867c34b3fb297cb2e5d3a807b087c720026576aa44fad577ec82015a9
+EntropyPredictionResistanceA.3 = fc08bc0077c95ce4cf08bccf50cdafc19004abc3c5ced1cc3e7ce2cfc938c160
+EntropyPredictionResistanceB.3 = 0a93fd50fef1245e7b9cae2834e7104335f8aeac080d4a4fd3e0c0ef0d67b690
+Output.3 = 3622977f8aa0a0ca5f8e1235d03b76f92b2f26eb172b88323558e8f3c756c539ce1061de127247ca7553402c3d5c9439b4c9afbb4c419867baee06eafd856af9847a69247ddf6640a09a360c93577bfc353cdec7312e549bc7873f77796e062ad058ec7f3e52dd1ddafb4bb1186b05b5360200e6ea784be27b8f205de80ba145
+Entropy.4 = be90a07ae616574d36f8366d39d6bf1408626466d40982d97380e44331f9e188
+Nonce.4 = 5a27cab08c6a8595894de22a909dc247
+PersonalisationString.4 = 99b88ac1958d5d62aa39eca8b8f8e598a55c08b49e895737d74b8792ca343a36
+EntropyPredictionResistanceA.4 = 9cf15973a0f0b71c0ba911951f9b444050825a976c391e621c58fd4b59a7a22a
+EntropyPredictionResistanceB.4 = 7dd66d8f59a60c0010fa8aaacce99bc2aa1f365653dc0cd57b489edc2349177b
+Output.4 = ee76c5a6b6b4eaf9ce8dc4ac0ee91cad143f0369a2bfdf40b70fcf14e3eb28855e3c59a01ddee684bf9ce4152be5c70d290b8b780784eadb44854b03cd0a32d0aa8b8f0db1bd47502d2aa61a54e3de7fd7bdb5c74c715ae2aadfe328b4d1128bb19ce7d8166c4c1719c98b6bfeb1ce313054d8f1b6a4c5af842cf3cbea17c710
+Entropy.5 = 31c7b8f0aafa70b4b670f056e24bf141f0bd6683453d17e9b09add3d231cee1c
+Nonce.5 = afe818dfd7d7343f8eb1b4100d80c4d9
+PersonalisationString.5 = 769f2b3e30408856f46fc3a3fcfe05295d876415555906ecf853d59badd48eef
+EntropyPredictionResistanceA.5 = c8e7e4d5afcd3ab82964f121847d4466471df38b849c59630900171580948f53
+EntropyPredictionResistanceB.5 = c41425045dc4db04935aa5264891af031b08cd48670b2b1720692cc6bed3e7b1
+Output.5 = 9b3dc767e1bd9dd67003ec99c334b94dd97c48cccbdbfb2eed4dd5bde96b1e0ea4c24cb0edadcc5386f7bec54ac5ef149374f6225aa7e78466c34b1ea0b286499e4e2a294381e6e065abeab67553c4a2cd0fbda19c59415fee5cc1249692768aebc80ec35c8331f68f1b7245602b3ebff1eaca2fed5898213fbec09acdb60cd1
+Entropy.6 = 3848bad2b0631411f9168bf818a2c3cac10b6d83a82d58011367688c8d30d3fa
+Nonce.6 = 77fe460dd459c7da7d69a3ba5576b2bc
+PersonalisationString.6 = e5a3ebc7d533c214f4cd66d37f1dd4ff718891daef55959915938a177dd97088
+EntropyPredictionResistanceA.6 = 8dc15a0de18f52f79b9120b03a5bd9bb4b45547b94b301cf3ce2442ae5083c5c
+EntropyPredictionResistanceB.6 = 08b455e06fc3f80be972e2868ea019376fdf04721478289440491744df5cc1f0
+Output.6 = 959bf36092622923e96ef5c038ca318048f9447003626a9f5f0c5082f65daf5c5ebdc7328e090fd68ee5d3c161506b86590e2229a479de7bbc3920852647db2a35272c305e9a309c04da1b8e58ee185183681cca89f1b9534c0e15c188f69cbed87326a83caffcabb800e2672691b7642700659ebccff375f284eae1729edcc9
+Entropy.7 = dcd74d5dda3adffcbb54be0e7c48682174b1b460622b52ad4f32bdb2b164032b
+Nonce.7 = c32776da1ad3913626d9e61f5b9f9877
+PersonalisationString.7 = e7aa07cf4a3f90167b486c1c4ffdd5ae45aa59200e4a94caded0b85aaae8fef2
+EntropyPredictionResistanceA.7 = c8bdbc62d984753560f2c292ec0ece8cf0e369b64e14ecb910997b7fd81a8eec
+EntropyPredictionResistanceB.7 = 62e9ef78b1d0de6642d8404cc4cb7bd544fc5a3b3588a16c4e342dc5003d6608
+Output.7 = f931b0dae43703f7ec20bb6c5667191380e7e263efbf30bf4bd4cf6e3cd5976095eb48ddcfe9f72c299dc05ab2d8846e2259600fe3723744f4ee19c75835c07bfb207e70ceaafa355bb6c6b0a4236d0e0830759cc6673af2b4dee9a3efe496e7020556b4f8ed0c08cbd4cac61831bab2f5a81a8121b240a9c6d374172e5a87e1
+Entropy.8 = b72d5604401b15477b659a373caae53a8fe983e2199187546756e039e72efb7f
+Nonce.8 = 2ad472ee90447f616b7ad5bb1dc692fd
+PersonalisationString.8 = c9038b0d468153e8529089c3db418fbbe42afae5613a8eea7c8e3c2a307c4159
+EntropyPredictionResistanceA.8 = 1b9e1000ee6c8ba65f39a837f27a4e5cde8cbdea58ecf1145d53c219369fa864
+EntropyPredictionResistanceB.8 = 02ac05e3fe3d52fd54343179f237ae2055277d76d9276bbf83f97901232ba6c4
+Output.8 = 9c2a9dc2504e2d943d85e1c068f7e578350dfed661cb5d82cd26ce22d083f6e158a39161f303370ee844b4f75723ffb45131223bee8efc32726bbdbb9ba2a0d8177e90e4e1c8f1d3a22e9a9eaef8b7ca4cbaf142aa1da1886d2ef9c1dc3692bb15784cfc906e12b484609403515550cc44e3b0edd42ae9c3f267ae9dd737ef28
+Entropy.9 = c5f5e519283f7d3216f2ed7765ae2c0dd1e22596d7762c1f0707ac99ad3f6ba6
+Nonce.9 = b920e6d0ec15852186b77c3e9318904b
+PersonalisationString.9 = 9835ac84c8f8cc00464ce75891074e20f050b162f73c9e91435aad5929b473c0
+EntropyPredictionResistanceA.9 = 252aa0e2dafc2901a5177449032a7727e523d33d6f4b5f350545e5bf21a2ab6c
+EntropyPredictionResistanceB.9 = ea23f43c73c2cc0982541c298e05e4b2dcc6fc5d1d507232d735b01ed2536317
+Output.9 = 85a747731638e09ec0254e7aa38e08439457e6504de94d00405d417326f3ad47f156b5e211204a83634369beffc128f3614e89e2e288d2de11f7b90bcc2b8d29f149e13a3cbc8d711d24765f480bd6596c8ef605cd72fa64ed8ab1f9a18b2d0b81c0de08a167d537b3d1c51c2a0c9ea9124c6e41613b383f13f1d20e1eaf2288
+Entropy.10 = fb912fcad27bbb2538164f75a79a3d7651c42aba547dad64037b492a87e30180
+Nonce.10 = 9e154f0b8b099a2f584643e4e40ab34f
+PersonalisationString.10 = e3c8eab35fbf90cad2a69cc74a68ac0bd0fc51585231fb9c3eecb49a064043bc
+EntropyPredictionResistanceA.10 = a1466679fd0a8a1f82772ae0c8e9de2a461d820cf37b2e9bd77a609dc367b449
+EntropyPredictionResistanceB.10 = ebaecfd0aff59cabaf224d5610069c888762f92a16553d82c917553a9e723177
+Output.10 = 09b4a47519d4acfda506d64c0b5536fb9e72cb1b6b408da82b4b80ff794f45beb2070b05de67759b8317f40e798bf37d392cb59cbbfecc3056259c9426415df526bf3cb62f4636542689537629c0e91a9bec2a600ede3dcae82079ceaa3522524fc002e82c280724c4179e00dfdd374effa05a71fc856ceb21542be0bdb62bf7
+Entropy.11 = ead7fa32dafaec063474693e98230bfdd61ed5ee88c7a93718fdf17db771673f
+Nonce.11 = 2c3d12d63a08b9acc2ef21531412dcda
+PersonalisationString.11 = fd3da5bb01ea75d7e32c023eec230f3bacbc163768c1c24216028e82660e1bf2
+EntropyPredictionResistanceA.11 = c37c5828d4ab26c1e365c043aad21c52ef9c144305e917dee8a15dd6cd751c2c
+EntropyPredictionResistanceB.11 = 45a2d6e146935458fd2ceba68b49b74bceca4329ac5d30c7a67f614d3b93a6fd
+Output.11 = 8fc78a425f9e846ec2c757e98f0e1f67085bde0184f9ba9e8697811f6c50928de7ec9767a4fbec8bb099f534cabae4bcde69f2632fe4d1c582cb918e3370cabb2153a1d168fce23fafde95660e6987d2e8fcefbdfeb21398a5074ee76f7315cd7c517d3a4df8af26f1857b0d3e5704b7a3e5c15adc5f3c6745c063d45a2bf1ef
+Entropy.12 = 5d79c6ccee050b3c2ed52edcc16fc26ea7b6f3fd2b9199fd65c7dc2345d6566e
+Nonce.12 = 9a0c6e01710e4c71b2820f7aa9203da2
+PersonalisationString.12 = ee4c3cfa5c79b1ff1dec4b9f9ff4ea45c916e46889130cffd7f137e6579af52d
+EntropyPredictionResistanceA.12 = 3515eab85a5812c66756634804e3f5817d32f51dab3ae00443c694c59b72d526
+EntropyPredictionResistanceB.12 = f840a166e566b7f633c7d246192ef82419e3cd733a02684d6a4ca091178ccc76
+Output.12 = 4f53f72462d7e9247e7ad113827d3ea741c35690fa0be027b86660e937c119e7237bbc674e826f42dd6dfa5f54d90542ed2bad21683af4b1f8741ecb75b464345111cc3d383c8b7d088718a353c2d4af93ff59057745a808203d08eba2452a1a9ade75cadd0f49fcd27ac3c024c04c0936c0237fc29dcd061b62fbb73adaa8ea
+Entropy.13 = 35f9c3b0e5947a74d90609e6ab660b4b46177a12886cc77a19aa9eaee86500a9
+Nonce.13 = eaec5de5672c5ee56771d778f5aa9637
+PersonalisationString.13 = b4b5fafff369997074a82e064298859ad2775eb5c5979f81d2118da96e840930
+EntropyPredictionResistanceA.13 = 13ffd39fae8e05ec90843505d5832ec8d999f271812d41db4f223a5d8467944f
+EntropyPredictionResistanceB.13 = 08083a81c29d9a559a960f8349fb0174a8dbcfa171be39a8c36bcb7743c5c5b9
+Output.13 = 87afd3147e61c49d2029b88482eacdace56f27ccda2927799a7dd01ff63d6873804e7b5635645ff3f65b00e1bd65254933e7e57b56177db81548fbac37305d3dcb70a5f76a222999d6ba9c73670ae931b49ccc97b4f25203ee95cd68fa79e2824e2ead8bd4755a5bb4658e02788b9ced166ea9ec5373954ad8da88791e8f1047
+Entropy.14 = cd08363e60e17bbc12d57954ef92ea38af1095ffec417a7f305b7c10d44f1e65
+Nonce.14 = 00649786d5141793f7ee33a913b08f60
+PersonalisationString.14 = b5611807d3070200fc6257cc2b13a84f842ad45ce116fc91eda79ff14f3f25f3
+EntropyPredictionResistanceA.14 = 457cdf6316357035abf57c2e2b19bae6973d01e9e93dac249198188be2f6849e
+EntropyPredictionResistanceB.14 = 5a9636d6b6bf7d1c01c16c03669ab7b5aea828017989c870cac6857bf327b748
+Output.14 = 281e9ceb5a46578dfa2917d9883f1819bbbdc9901d44f3ab48ccfcb807eb596e20fc05060d6a77d92a6f630bd2a012b41232dce411ea046794ab0096b86491d3ca2a59d4405e2831b1f9f69e55542aec89417ee7ecd7a050eb28fd4d7d2739aef7aa6f30fa17c5b2bc1c69ebb10163426b8c6033ec7733cc9ffcae2f23986e63
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 4294671d493dc085b5184607d7de2ff2b6aceb734a1b026f6cfee7c5a90f03da
+Nonce.0 = d071544e599235d5eb38b64b551d2a6e
+PersonalisationString.0 = 63bc769ae1d95a98bde870e4db7776297041d37c8a5c688d4e024b78d83f4d78
+AdditionalInputA.0 = 28848becd3f47696f124f4b14853a456156f69be583a7d4682cff8d44b39e1d3
+EntropyPredictionResistanceA.0 = db9b4790b62336fbb9a684b82947065393eeef8f57bd2477141ad17e776dac34
+AdditionalInputB.0 = 8bfce0b7132661c3cd78175d83926f643e36f7608eec2c5dac3ddcbacc8c2182
+EntropyPredictionResistanceB.0 = 4a9abe80f6f522f29878bedf8245b27940a76471006fb4a4110beb4decb6c341
+Output.0 = e580dc969194b2b18a97478aef9d1a72390aff14562747bf080d741527a6655ce7fc135325b457483a9f9c70f91165a811cf4524b50d51199a0df3bd60d12abac27d0bf6618e6b114e05420352e23f3603dfe8a225dc19b3d1fff1dc245dc6b1df24c741744bec3f9437dbbf222df84881a457a589e7815ef132f686b760f012
+Entropy.1 = c7ccbc677e21661e272b63dd3a78dcdf666d3f24aecf3701a90d898aa7dc8158
+Nonce.1 = aeb210157e18446d13eadf3785fe81fb
+PersonalisationString.1 = bc55ab3cf652b0113d7b90b824c9264e5a1e770d3d584adad181e9f8eb308f6f
+AdditionalInputA.1 = 18e817ffef39c7415c730303f63de85fc8abe4ab0fade8d686885528c169dd76
+EntropyPredictionResistanceA.1 = 7ba1915b3c04c41b1d192f1a1881603c6c6291b7e9f5cb96bb816accb5ae55b6
+AdditionalInputB.1 = ac07fcbe870ed3ea1f7eb8e79dece8e7bcf3182577354aaa00992add0a005082
+EntropyPredictionResistanceB.1 = 992cc7787e3b8812efbed3d27d2aa586da8d58734a0ab22ebb4c7ee39ab681c1
+Output.1 = 956f95fc3bb7fe3ed04e1a146c347f7b1d0d635e489c69e64607d287f386523d98275ed754e775504ffb4dfdac2f4b77cf9e8ecc16a224cd53de3ec5555dd5263f89dfca8b4e1eb68878635ca263984e6f2559b15f2b23b04ba5185dc2157440594cb41ecf9a36fd43e203b8599130892ac85a43237c7372da3fad2bba006bd1
+Entropy.2 = 20f69bc4a308d1fa40146bfb8a3171e81a66ebf4c83fd46b2c8a3b34df499a6c
+Nonce.2 = 92f4bc9699bf6d19d5c3f45245bb0fb0
+PersonalisationString.2 = 882bf0edbb66ebb288ce741997ffcd3380049f5007b30e740ece190a01612dea
+AdditionalInputA.2 = ca1da31810bfa6c02b5863f87d39668d796105430c445db157c41a0152a0d200
+EntropyPredictionResistanceA.2 = 8310eb7a9ce51883b0c36271b5ff0a1c00219a04a6b571362c7a18cabc48f2fa
+AdditionalInputB.2 = c344b0bfe801da37e2320d36b9e6452235e6f6f4cf3190d414e859f4ee90e5de
+EntropyPredictionResistanceB.2 = b0cdf3434c9f72cf5ef6a61feeedc94c72e28fb5a99345dbc7939a3b8e277c5e
+Output.2 = 8ecac7a65cbfb7a849604505d403acaec41c6ffda3009f6080bda79e26d1de3bdfd88fc9bb9ca1dd1cd8d49e3d0cfb0f0a2e70ae1834e8f7d7f79382591e8bea0a0386ad40c98d097122dde0dc2f4fd3258d40dcdd804fdcb72d62ef9041518c34fd8a37684bcabe2f59594382767c2633bf255121ac735852fecf14440cb623
+Entropy.3 = 0a13da2edd9ed097631860dc29cb2d7eff3519910808e7eb0c6ff1485cdf758d
+Nonce.3 = 9793ca69779117a63a47e386433f18b8
+PersonalisationString.3 = 48445b1b6807b261d10569ab4b5d8ab5d97ebd3d9e8194088b10463abf11a2df
+AdditionalInputA.3 = 6b742d07c45a031795a7771eace89fab782eff6a74555fc2eabba00d1d7b7c15
+EntropyPredictionResistanceA.3 = 82ea8c8d3179dcc1b263fb263bdbf2ab818775a881964a5690a6e9af592db594
+AdditionalInputB.3 = cd0493aa84c941c1b7fce37d2e38c199fb8c86ea0c5b6a536118ae423ca7ab50
+EntropyPredictionResistanceB.3 = a39a960e343bd4edb7747d75866e1ca7125797d2bf6a644aed6e3c8443f94274
+Output.3 = fa005c9119a898f2fea35b805a2bd8be88c48cbdaa8582337f1f407ce3e49dee8011bb1e4ae33317ca6d5cb645687a62aed86d5803583a012d96b82e7bbfbebf59fdfc1db0a92586a843f6e57056f49726e89bf98b641ea60a3c91815edbaf415b2c4eb7bb8c56ca5d84a3587c64a945a6e3d625b6763084c2a0917de6bd6746
+Entropy.4 = fffcaaa7ae7787e12e96521a3e29a7c40ae08a7cdea9974cfcb894352955e65a
+Nonce.4 = 27c8b01490c9fa7593734ec27ae242a2
+PersonalisationString.4 = 5b1c1a19b28b09d08bf9cde87b4a6881d38a7961bd7ba6888de06d0c78fbef13
+AdditionalInputA.4 = 5ebc76ae5779fe563362c6f99bba35b4b50eacaf7192c68b82a376fb7f2b61de
+EntropyPredictionResistanceA.4 = 0d0371c3c664bdec7f368bf53a930cfb0933de5d50865cd757b63fa350341375
+AdditionalInputB.4 = 95831949170105e9c022a7711803f9f7d617a8a137145b4c2f6ddda7ebcf3c5a
+EntropyPredictionResistanceB.4 = f132dd2bf9bf8c6d9d2ca5354e284bbac677c269298e1a5bef536091081446bb
+Output.4 = 633cb6696b97f2d4119fe242486e8affdf1b3e25a94e434592caf0270563b210df6a9f9405c2c33cbbb750c0218f718116b67232db874621832ba78b040523b2ebf715082fd23fe7e32599402af95156ebeda98eff2a8f2a4e295b9afb7fadce956cabfc1183f20e4e059d91604fa5d77065c4a006b3fb2c15750206ec936e97
+Entropy.5 = ae8a6a25b266051cd41fd5ecc682b844aa3a09327216eb6ac633902506201131
+Nonce.5 = 24145033b99896c21f8dcf60271ba681
+PersonalisationString.5 = 0acbae3c085d2e5e760b0631c6ad97d935e96b0a90ed4a9867f626951596ded2
+AdditionalInputA.5 = 2d74d07e82a033c0bf65643a6478856c92f33ee55a2682c17e7c42857e8e6fa7
+EntropyPredictionResistanceA.5 = 156406ff2691886972f53c2e4b449dc94fb09a2960a3423d2f4ac66f973b4a89
+AdditionalInputB.5 = a1b397cd826af3fb1b949453e96878e59f0697352929b15cd678142453479e55
+EntropyPredictionResistanceB.5 = f80c00af6fbe4b0bbd430b12a714d40e172e99f909916a27221020fc72259cb1
+Output.5 = c309567edb3d40fd8d828551117964e20041b031e8eb41a8c6e95e25e0f43372585854202c5d5796ca4fd38b7b789b44410ba3e3ab7016cb6793625be27c6c8d39499c402e4d52bf2c0bce21a5f4f16d80d5449d5222aea19b64de25f8f5eb81bea7c491a329ca079a99c9ea00cbf3354b5fef435e8d4cbcbfea7486d379a2a2
+Entropy.6 = e603b02ccd1b3e2cf27a2a5cbbb6e8fd205ed3531ab08ce912f915328ea1c73b
+Nonce.6 = a7a075a9dfd9805101ba2f0f6e42ebff
+PersonalisationString.6 = 27e863c2f9f91e9540f0201dba0fc63c3c623ac89d63368093dec2f17b6868bc
+AdditionalInputA.6 = 93e967f73929f2be339448735c74b571a8b80c10bda2ea7fbea824b188a7db93
+EntropyPredictionResistanceA.6 = 7202687e99e1cc914036146e187c16b83999df442f0ff87b9d82fc7831714d82
+AdditionalInputB.6 = 1ff3a43966a8f64c42dee8889ce2626bb370afef4c0222b926abe1be719427fc
+EntropyPredictionResistanceB.6 = 0c247f1a2c3eca9d32ef0039c4a2ebb9962d844e0032a58c604d630f12884742
+Output.6 = 7ca6867ef568c8c323d216db96b642576de1f5e82d08b84e6a2752000c5175cf49d6096dff7b714a45a72a69e467ee378f4eabb142eddca926a3d01120960cd7aaef1e377f447b0bcf8ee733d961d0c36be901c7f406a1dc81cb2ae2e9f6886f5ba1e481e7c1396d2c89aa456b2fb34f02a91d0eda8784c26ad5a6892ba5ffa3
+Entropy.7 = 222dcb4b31c7bc37d8813be78d95e9d8c0f021363862c6bee5b01e6c9dbdba8c
+Nonce.7 = 2ae81c52b90d4cfeb80697fcf05caa08
+PersonalisationString.7 = bcc19eb476ac96567da10da8fb714c2f9fbdff28b7c74a5cbac80ca480e61de6
+AdditionalInputA.7 = 46fe8bd4c4789c373707050d0e700e50d692ba10ff2fcba20045c9efff7373f5
+EntropyPredictionResistanceA.7 = bf81702a92a6bc90b531b363db5a5fe4f50412621ba390c1cd211a9683c47ec7
+AdditionalInputB.7 = 68c956a95f6a2c9cdd06e461805d5270b0df3c9fcdebbeffb30dad1a852fb35a
+EntropyPredictionResistanceB.7 = ed6d15513bd49d10449f0c450183f5a7b16466a37df5fc79a4ddd3ec6bd0c56f
+Output.7 = 8a54fa9818602032762a45c9f67f668860ed605e371a6382082509249330fc24d13c4acf27782a7d2be42721bbb9c80c6338acb57a715ed17c008928166f9a090331db4fe62a11ab47c966bc3c24a8be942e350a2dee7c7e9f620386d89a1e0bd5298d00f94f9a931e50834a2a85c0175308bc74a34ac37ab21305c511866263
+Entropy.8 = 787c1fe1498bacca291f020f80d6b556e4f0d4fa5adcf21531c447f28e14266e
+Nonce.8 = 4f2e9de3e12557756348d8b0c73a1301
+PersonalisationString.8 = 91f18dd75859c2938edb0d81f9d6095a2bc7565b67403a8777cd059f2631c958
+AdditionalInputA.8 = 92d2d8091cc4fe9f5cdf2ded2e358fa05a7d8e4525333b4c00697ab18dd1f995
+EntropyPredictionResistanceA.8 = f43ce41038cbb7dac60d8269495b62ca7452a9c4edcb54e7d477f0c6c6b7af61
+AdditionalInputB.8 = 2263cbb6e29bb9bdbd803c7224aa039077ba43d1643d4754745f89d8bb6f888d
+EntropyPredictionResistanceB.8 = b3a3784c775a5884cc536f60132e66386dbb911577aef75fc0a68508432e255a
+Output.8 = 620851d2a4c8b6558e18aa5e2d454cec83856d25e619e69928b578ea4d4e41c662a4cd0ae64ee756b184742154d9e7a6283d78bb8b6ce53e2fd2ce93cc12ad78749cab530a7f996c83117df6d217170927d75a0c983194816d2e21f92840791292710178b3f7d9fe1003041d2d9e7c59943b14409abd7956bd5c31190a54ba0b
+Entropy.9 = 1537f9380d97e98f6e02f4b10182b835f224cca2278f37a8cb1411a1c6cb89ea
+Nonce.9 = bcf37a8b159cdee3a55329b3816f8c65
+PersonalisationString.9 = 6d89190aebd160b155d5dff8cc4393f095988a1551bb154fae621739a4378430
+AdditionalInputA.9 = 04a511f1d8e1994879e2372163b5a45289966df680350bbaf9baea52333e652b
+EntropyPredictionResistanceA.9 = 6c7f63835f860b4a5e3c450a2afb5b892b4da708d39614921a82d36cf2351861
+AdditionalInputB.9 = dfd8c8e467628de6c121c403816a65bdca01dcedd05778b925283f92d3cb5251
+EntropyPredictionResistanceB.9 = 8c9bb0f5332492c1740fb385e969d77d5d7e0aa0a4066cb6bbba4e4c7fa8ae73
+Output.9 = 61edfb457546493a43fe1391b8f86da01c1242b3297f3c4ee02e04e37161725f4182b144609335f0183b477744ce3370ff64ae861c728e7526148eac3fb07403a27c3f82fba5ce505233a4e38b8d40c3f44cfe3cc65c6a89127f803b11a3f24397a20409b594e193e443190155da50ff1134c8b1adc5006c7ad201887e6c1ad3
+Entropy.10 = 842daa3d64b3c25210cb0ecbb251333c2ee4e090a992138a5d6f9c455a8a5f0d
+Nonce.10 = 28be9fb51ad223ed196d5c245eeea940
+PersonalisationString.10 = bb9376b79ce2cede150036c0626ddaf8bbd960ec04ade2694be6aea6ce8946e3
+AdditionalInputA.10 = 41431b7537968a2ffedd6d7942ee21565f34a5155de6e096646fc7d41302ed96
+EntropyPredictionResistanceA.10 = f822952bbcf1e2ba7d3dbf526ae44ad7e60e9d99a833b3f372f77adc440850f3
+AdditionalInputB.10 = 946b190e855aa2d4fa7544e9858ec70ca9ac19ad510bd7d625f14d16a80896bb
+EntropyPredictionResistanceB.10 = fdeecf48941dbcecf6f710d99ae54939f9bf35c3ef2b7b6136d7778b95846af5
+Output.10 = b0d45631a104c246a1af31c8bcf7f7bea92cde3c259fc029072c51e662a33c040cfb1d262c705320b7020bd1365288c1ba9b3bde9d0a9df8b9e7275e8637ce9a1896877e34323abe8ca3dd0262d3d75ee3a5af505235e354aab491dcfce11287b7c73dfc4c97c47f0373cb93baaf3def2186a53095fe8b050c94b1cef109c07c
+Entropy.11 = aaba29c12aaa011619c07efca75a186714d97eac18d75fdc8b5b36a9ef247bef
+Nonce.11 = 0f152b758cdbd69256bd8697fce53d2b
+PersonalisationString.11 = 02470d6898bcd119cab49242c95fa97b56a495f6d1c5b26d1e877b70b954e3b3
+AdditionalInputA.11 = e4e4293148c31ca6bbd73706e2dd2f36a22d3af3f862ddae40ad35d51dd6781e
+EntropyPredictionResistanceA.11 = 59ae1210a350319834d6721e9da6b2cc1c0e559a26804d47953e0bd5df66ea2a
+AdditionalInputB.11 = 34c6505eebf018676a039f201507fa38338594cd015fb4d962d1577befc63ec6
+EntropyPredictionResistanceB.11 = 0c449fc0a8dcc16b9b0a82f5e6f85a218cdddaef40c254c1030a9bfa33214ae8
+Output.11 = e1556a8bca38d5c2087b5c61156ab91566a5da784647e220bf4ea0374e187d4a4bc373ec891472daa31aa0dccdb56a8b42fb2805e74251976ffe5e02b446af8ac6a9f0d6f36d857fe6d3772d9fae7ab08b360e8de2529dec80dd31a5a5468034aa53b10b6a73068fd9e046b70e2f03fded8bd85f7df4322d4fa5338c9cde0471
+Entropy.12 = 742fbf9f39f9d8c4279143f88a6d30307492681ccd58e8422277259a0bf87aca
+Nonce.12 = 24c5d6dc4f650f39c3403fe1eac1ecb0
+PersonalisationString.12 = c2c42e63d43a765c2a49d2b35c8ba98a7a67765a0c453d2352d9f224aeb06176
+AdditionalInputA.12 = 794083185e79cf918faa846bd12287e8ff1e620770e0e08b33e8e1da8d23cfda
+EntropyPredictionResistanceA.12 = 79e7b9f363eb44559177701f93da93aa30dc5f4b933209073c825ab2b39b52ec
+AdditionalInputB.12 = ed7b902eb55b7bdb2b8bf70711c1f7a4bc00c4dade92c9d2459db060551336af
+EntropyPredictionResistanceB.12 = 23caf049f760aa385f58983d9af300ec5f831f2449d2508bb5824abb622e00dd
+Output.12 = c83af90a8c7879e98b255e9c6b1852bd759ccf8f9c5be4ea5e9a356df4c43efca41303d5a322a7e42ed12b8b0b715e1d23257aaa366bb261e39f19834c38a7a883bf2f01c47a782edb7905cc61742b8166974f5990330a08168e25d4aab6740b96493ff87a424ac6ed447ad655afcfde1d2ec6ab2ba811351385ea0f8b66e318
+Entropy.13 = 1437958fbc93c701cdd09fe81a90af55f022195388264ef03758fc08bfd0dd80
+Nonce.13 = f63c7bc06945eedd58893df2b5f5f62b
+PersonalisationString.13 = c443f891534c30d8d2b1e2072cb5b824e6d3ddfdd1e6c7757e54372d4420b5ed
+AdditionalInputA.13 = 39f7abd306f127baaf8cb832b67c2564287efa433df8ecabc40b9744637e6bfa
+EntropyPredictionResistanceA.13 = 222ee423dbcc5491d1a57155891406c79e8ef51fe7575db8074c4e40f50024da
+AdditionalInputB.13 = eda6950002c866c61d2e2dfcd9d69e8c5154b45f762efd688e26044adc3957c2
+EntropyPredictionResistanceB.13 = f177548eb130a8c248c2b7df99b6626ee062cd5e82048019b32cd6c7319eecdd
+Output.13 = 8fb758b498feb1c0e961a8f86b821bddde387dac221a8191f71b6a64caa2bcc4a475460823996f8261b8e22125dfeac5c9dbda25525dab249cbe469c5e224478964793bf822446721bf5bc85e5da6ef34ddcb7c94f109193c475904099b06e2a7f53ba6dd94480dd5bc9fff90150286c4d3ccea975925cc8ed4ef9830389b9bc
+Entropy.14 = ef9292f4a7a67ac4d4eba48936391bb45f8810c2ab02ba424cc8e4add53d1c51
+Nonce.14 = 4611e3233cd8cc8f6d69494dc336cbe1
+PersonalisationString.14 = f4a8721a2a873f8fe94e4b3e137e866c79212f9c14f89be156c47a5fbb9aaecb
+AdditionalInputA.14 = b38a6628647a02c0de5b7acb939d0d1896c9c730106c8667d810bd4866ebaee4
+EntropyPredictionResistanceA.14 = cbc67c17520af442933a235c6aa6b8f98128c66fcdd77843ae32e06b7a31689c
+AdditionalInputB.14 = 366370899b2a0d6f049e7d820061599a675cba5d3bc82ad747fa731bead8efb3
+EntropyPredictionResistanceB.14 = 9a6a3c540a19081bcbe850278d50adfac3638ec8cf85148a0547d28d0a7025db
+Output.14 = 1947d468ae4fa4da7f45cfaf32d62a4369796e532f1b03b1495587e6bb95d8330f5b7c962a9b0a2b715d9def79194741870e5c47d15a7308843e10616b891fc9e5cab7db901e0f1efbe1217dd627c71b54c98cec0fe1b25a84caa56f0bde247a9d9183587742a38825234b6b6cc808afde36ef5e17bcdb2c72c7645949289369
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 9e2371af63ce0a2d60f39cee6c78980184b8de108be128b91cefd4cc11445046
+Nonce.0 = d19085ed7d6f9792a457727d0188c859
+EntropyPredictionResistanceA.0 = d156908d7d175943c88c547ee0ed33603fbe9d512026c40abb35d736b72dd676
+EntropyPredictionResistanceB.0 = fa1f8951bbb16009e45178b3172f6fb7fbc2d146866bc2119d48a94e42f0e354
+Output.0 = c3f045d97ca01825c9735815f3788e2b0ce05cb5f8ea0b31cbdb8529d18ffe2c63acb9e8c92373ba752d15f6a832539bdcf154d7b7981b59a7d3b992ce3885f70af21da7f1e5c1c7f2f381c57bd3cd5adf4d2ab135a2f42a706988f9f5b83d955c0611695dae1b21d5ce44e2bf4b25bf7c49d42cdf07d48327caf9285f70627b
+Entropy.1 = ca25736df8c95ff394176cfc419ee2245ba74b1a5c3a676bf0397a8e6b4fceaa
+Nonce.1 = 8f551f86ccb84f331d9c60a0c61e63ae
+EntropyPredictionResistanceA.1 = 5006aa5bdea97a783f9bd28f7bb0bbbf1ce9af7bc41927eac6dc0acaa8bbf2e8
+EntropyPredictionResistanceB.1 = 767ffd3ce969fce15bfa4cd55c3a920d7e537d154f77f48f18e0ae97a72e9fbc
+Output.1 = c47ed83b9b68a16a7a6a1a47848b4de03f848fb55cc50143ed0b4fcd40af5e50eb06d6a7256c3a59fe090ec6436079bfa3b8955d098776109395a4526649a263285016cef2dddc0be74f624f254f2e5f870d4d99fa2eee8364a7ccca1cb0c14eeaa68f87405c5e18e4c6b8c06b329f61a801d14a2a26ebd9cc337b8360636fa7
+Entropy.2 = b0c6f334db6c6ef99b4f4e2874c85eea20ed2d41157b9505e22aa1220cf84bce
+Nonce.2 = 0c4a9b3c5e5a497db133ce1f477cfc70
+EntropyPredictionResistanceA.2 = 19ba88f59e1668c32d96c68290ef71adefd18234a78cbb0c7ab577f9a1169b1e
+EntropyPredictionResistanceB.2 = 506e46a4d6e0e43b2d05af5850e2e95bde6f6c8801aa6b0e5960440d98ac6042
+Output.2 = 9d28c77181270f1be88a2e055a4fa834d24e46c62d3f0bb3e03f2a63da047468f2a74bc9804be56feed14b8d3a42fdfafad880e01fbecb047c9f1a5a444988bc4ccedadc28a2d01d3fae7c8031ec689afc9153adf2f0a378099f97438bebb6516838cc35b5968b51e367dd3aec056befee5886018e41310f244efd9492f2cd1b
+Entropy.3 = 45ed7ee2cba35b6212287060c8df97806cfa1793b4139391cb8d9ce9b78f82d7
+Nonce.3 = 73bb66e92488c6993526666dcb9ef476
+EntropyPredictionResistanceA.3 = 0fcda93fa7f658a93c5502b3a0ca99fdf6b66d4a98d9d27b04e7b2674ae85358
+EntropyPredictionResistanceB.3 = 81dcf32a7866c693cac627cbcffcd1200298f8cc8b8a4ca1a6be641a4f33d227
+Output.3 = e2103028237850ee19f544ca0059abf712d3f1c5a542ad9518274acd505cc1d9d874227d3506522ae52de721c6b1c704e8bf6ae6d820ab6f1890cffaebb9e8914ef438ee30b3323f6545d82fad396387c5fb4d0f1cd8ecb2b504a02bd50c8847a3c68de0420ce0abfbae9671e213a1c6b83682519ab8b0a0ec6242794f4b9e48
+Entropy.4 = 830a0fa17b0c6065e476b3cb359fd8827e33d769ea5a0c02719bd0821ff98ea7
+Nonce.4 = 79bab3de66899949e480ff57a6d02335
+EntropyPredictionResistanceA.4 = c4992e44bc7df5d29cf6647354a052f05d2de3d3d28b794f79e3789b7b61e94e
+EntropyPredictionResistanceB.4 = 1740e67f9c183b3d65abb23f4f2c39a57324444654024c632e84d764b9f6c2bc
+Output.4 = 8e874f811c0cb9b18d30669443b30231098e05bd7c93f7b39fd74329f9b06736ab2376132261ae96a3ed3ba351d1756dc511aa74191aecc994d8a652661f3d9692c40f1f8a877d08cae70a3adcb17e2221198299d46654569449ff76d0c90dcd4c457214599f4f1ce1eb432bd34cd899b5e3d9f9d024715804fcae08ead17e3d
+Entropy.5 = 4fef30f4b133fe1707a8744c5eeffa9b703f6157325083f3b27d5531398a38ef
+Nonce.5 = a036f972d3f7c6760dee2ee3f7e882e3
+EntropyPredictionResistanceA.5 = ac5acd4fa4c38b8ca4b19a5854683d14566d0422a0440d1ab5337cff312bfc37
+EntropyPredictionResistanceB.5 = 682a551316ca120256364601aaf7cd3a01867f128200a25b60832b55682d0d4a
+Output.5 = 26f24b98f0e40fa91419e7d8d3140a43a21f41320ce1e005823bbceae1df4c51d97a0283c13f3c281d53fc9105b9a841cd0e0b1f01eea0d451461b0a04f1d6ff69b59b54cbc802558c824f2585767060bd17a0625e1208c362671a5abdf37090c17ee8f7ad8d8da672f11e5f3dd3851988c5403cd23e029923c09087ca7e6de9
+Entropy.6 = 3a05f1652e6550c233cc4efd7ca364e8c2404f881bf1ef9b8c296b8b98bc55a0
+Nonce.6 = b2d936f36f5f465df828a5d5916c4a6b
+EntropyPredictionResistanceA.6 = b07f158c0556f5d4be973edcd0d50fac3d5422feaba7e56e2c43ffe891b6ae4a
+EntropyPredictionResistanceB.6 = 39dc526bb9d7026e72be03ddd92bb800d1ebf268821e5034b629a1193f289ce8
+Output.6 = bf13c0d08e6447dcaec1a031efe02b1d6bd3c3822f31a8b0153258ecd8f4b1f053f65b56c968cf7dadf3333778528ad84522322beabbc4fdd9f4ab7d28cf1eb294ec00f99be398a7aa2578b4766cfbb44efb20b11e18858ddbd4ac8286584a82ac76e7011b2a9a82e601128debd83eff9927286f48d1c99ea514b0603e15c3f1
+Entropy.7 = 0876fb961133c9ad06579e3dafa49600f06ce1bed355acd7566d11dafd16e16e
+Nonce.7 = e35dff8f481ca25f868b97649935f33f
+EntropyPredictionResistanceA.7 = da70d5faf4fad0de14ff9c583a1b0ba74d935fc90a816851680593ca53e06fd1
+EntropyPredictionResistanceB.7 = 0a3338cb39185a7e4ee13643b9a4bd91f742db08281e07af3390d1a7c4095c6c
+Output.7 = 16ccd78198d64a29cbe19663f35682d3ee6d96c0243db6d42516f7abd7c0e2e4419d7572a4b2a5b542ef4ee041216dc7573a240120ffa02dd4920ee728b53dfbb1a3daeb7735deb639c5cb64a40047c5f1816705cb3226753aba32221969010f0310e479b2c8606333f5a34f552b552e46f293f1ff75a957de553d6f5d0ab579
+Entropy.8 = 03ad8454849df2aa3eda5dd84e8098d48af243de2529ac9892c83f0486d53011
+Nonce.8 = e0863d98a42f19537db4d9286749f615
+EntropyPredictionResistanceA.8 = 73208418451fa1ac3a5ed293275043f299568de23e286073c979bf6c70ee4b96
+EntropyPredictionResistanceB.8 = a1b77a016760538e711d1fd546e9461bb14e8653fd1f3c765b722fc92fe18a0a
+Output.8 = 6e9b57caecd7af4941430b409cd21bc7152713e79921ff30bc4cbe549ed452eee5b0e0068af89fc994bd38f1ae7e572561b4a260ea9c80f70f5073d9b47f5fcbf13054b8abc33d0644b5cf82cbf62bd17d19e97718f6564a3e28f36fa27e02169489f088baff575bc19a0d99613cc0e16bafdbf5ccdc406f6cb2039f56b3ba9b
+Entropy.9 = acbe0c8943f603d32c88766f2437e080aaf975298a96be33976fad0c447e8c18
+Nonce.9 = 437005463109eb0bd5a38e3c1c0a3263
+EntropyPredictionResistanceA.9 = a75736623aff4b11095283dfd9c1a7b77f7c4c4d54f8ee82254ae19ae07b6baf
+EntropyPredictionResistanceB.9 = b476e1d24827d1572d213935b3890eb6b3873faf9f776f812acbebb9e4646b22
+Output.9 = 1ca5e0cbeb6ed423f759c86daf3db368557bf3e09241174dcc8af1cda15fa129921fcdc838c257352e0372b0e287da3a75e26020b5d36fefc27d47649ab0eabd147a0bb1eb0761d67701825e91ce9de01eecb989c084435ea296f354791fa9696fdec158c391d3ea56afbd800f46bf5d4a636edd87313ff4d1b7dc0533d58ab9
+Entropy.10 = a672ae66d0da1d41b20cdc30486cf9c93025148711cac0028398578ad02ea68e
+Nonce.10 = 22dc7a16e6a2996302bd54013278a237
+EntropyPredictionResistanceA.10 = 346def4d4c17886d317e349aa27c69b68b1bd9bc65f749b6b17438a8000cecdd
+EntropyPredictionResistanceB.10 = 7fe1ff26202fdbaeebf700e326cc039b701f7652c5f6b84fe56a09322196e1fe
+Output.10 = 0ad5dbc87bef166639d86931c71017007cd963afc8e9e906bb64810787e475aebaf7c4350f5a2de730dbb0bcad00746c3bb10748c765853d2cf32c9450500a3892549c4d5d6747c654999f16284274106c2ddd1a2db89176d677bbdc8e359f1f376ab1eb80a9a9cf54992f84f5065ff71a4c0c7eb3454133ed2dd5f0ed511c1d
+Entropy.11 = 2811ac629abf9ae6a3535e4a159375c5c729fb99f00223ae5d7389cb1231f0df
+Nonce.11 = 0a399e801efd66f8adfb5d77222973f7
+EntropyPredictionResistanceA.11 = 3d0138b98e46894351b7ea111f89b012626320b4f20c813cc3f21646c198c730
+EntropyPredictionResistanceB.11 = 8086f1e1972c8a41eda75cd46da4771ed9bd257070712e090121672b985bd31b
+Output.11 = cd62c060d26634691cde30148db2fa8852d530eb0eddeecd8fb2c78fe2f43239d8324db455be0d5086ca8b60177a1402135cf7a42fceb968988a576a358b58b1695925159d73a87d04bb2356f03a51489c0ad835a78f2f73e7d4c3b79e4c8d34d7c7c30365622431e7db063f204af7ab54f37a088fdd8d81f10073e282706bd6
+Entropy.12 = 8d3cb7e19347dc1bd1810a810011b722eccf4a36f440a25b557dba4f0e46e39f
+Nonce.12 = ca13dbe87efe0b62b606255192263662
+EntropyPredictionResistanceA.12 = a0aebcf6876ba3b91005dbb8cd718b5d2388fc9a9049229451ec8e714ec5f5ce
+EntropyPredictionResistanceB.12 = d6013661ce1ef96c77f5e08e0c56f72b3e9d3c287278ab826533a5d688f82abe
+Output.12 = 3cf4914a678ffac90d15391a79b47286643f0b47d565040e826b560877a4dcc51ba44f9869b561f5569adb7d1ed69dea80489f70c666c1d91b45e0565a34f1247844d33832ccffed28a6a9efcc00af08ea6a6b8777ec1e8ab8b8bf263d0224dc1545ba7e705cec591f927eec955f046b496e7344fc8dd3bcf9fe28ff2e7a70c2
+Entropy.13 = 570fbec1e4f37362c0349b154b778c365cad4c28bfa9cc92db89f945f1d5b0ba
+Nonce.13 = e60adfc94a39f863b5b1511b31abd154
+EntropyPredictionResistanceA.13 = 5c552141f97025073aad4eeaf72b82831a44385b6a462faee36f29560376b3ca
+EntropyPredictionResistanceB.13 = 1ca9b9da53e63c9df784bd4021ab99dc623bbfd202a6d9ab1001d56b1d409b6c
+Output.13 = afe065687ca6d7f9dc8e08ab4db662f3232ed9dcf15d189c6bee93aaaf179cd64960083ca62ca2fc9cbc9743fb562e9fdda96f75140e12151ab9e330772deb3493c0f3bd020402dc5ab23a7c8a6cadf607c5c55efd8c7acd3c5c9cd34a6acd3dbb3a7529577da191af55db6c6873d93265c011b1bb0ddd68ab5babd7493abdad
+Entropy.14 = ce2394fbd2c035302160731cb86f1e9114d95b616768ff481a64df8db484275a
+Nonce.14 = 9f2b5ba9ee5c832827e2c2ee23b1e3f2
+EntropyPredictionResistanceA.14 = bb4adee7b756eb57b5097d6fcf08cdb3fa5a9fb9efe596e21f44724b962c3fc1
+EntropyPredictionResistanceB.14 = f29738e5d4a8813cee7c8cd89a4f67d15352e65383e3b564f99a71d844e4a96e
+Output.14 = 33e0c557eb60c70996e8b97904bd1746b0d520171f7536094f7c9f2cf6df5d73a09b4233192d842c86f26fca77580740a45a161dd3001250c05b8c18088c6cb5d0d72223e75abb3e0f7b727107a9919c84eea79ef0fc7bf2ac4b6f367c6ef57a9bc01145cad7526acf6099a26b29f09cd3a63cc4da9274a2148a99f11692a88a
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = f751b4d6f05c9759e485afd370372d6ac2b70f50e38b69742a586769162dfefe
+Nonce.0 = 99d82a54ad070e2ac8b5ccd88905dfde
+AdditionalInputA.0 = 316cf45d19bce33d6de7c2a8f206f9383554126b526b51b2d7f88916109af19f
+EntropyPredictionResistanceA.0 = 336bdcef8bbe7dd599c7b404a6b700a65a4d018a2fbd9753e1dbe3b11ba85c96
+AdditionalInputB.0 = bacdc91ed6847104e8547ca14bf994b70709a021480c9e506dbd53f402f34e98
+EntropyPredictionResistanceB.0 = e4b0cc5f564c7f39e319a96a30bdadc78e34f5270a4a65cca0653bb85edbf790
+Output.0 = 604776b9ddee3aca601880341e9bd7d34123a38e73e00c14b89abc64472313ec2286c1b65d01821deb6ffa5b99c5ef7aaf1499edcaed3d97a4d27b35df239e1a9e11b0b5813956f9f85691b73500ff309e65dac64cb45dc5d2b4cfe3b9253ae328ef47ee619c8f63017809b3713ad0dad10950b369aed030540e3bc6f0541705
+Entropy.1 = 5e91de51e9fee68f3cd267dbab0a3651d4f9865ca4a2cf250b17d28dd5af5653
+Nonce.1 = a53840cfe1006408a9cec2aacbd75e20
+AdditionalInputA.1 = 44303540b32f53fbf7d8d14a09339fcb39081d54b97defc54969a50aa19a32d8
+EntropyPredictionResistanceA.1 = e3588d6809202d00da360e2f1900e7ba974327894057fe23d1aa61ec9ad3ffc9
+AdditionalInputB.1 = 2a7ce6100d08a3296da3968f752ce5d3ebea695ab928836639b452168dece95f
+EntropyPredictionResistanceB.1 = 379e9e86477433c58cdd835542a6754907a1754f40e8a5bb7285e2ee1ca00b16
+Output.1 = a92ed52831bb228d0f4e53590d05d8658b31658dbd8d4fa4cbc07eb93a511c7950fa98f85eed094c1bd52698b3e939ed9c3f9aa99ca2599b089d193db2b2162dd366127f8806bd712cd77208b4b547c8e0fd2c73b259445f56df059090cd8eafc11cabb463d410d31326167ff05f510ee66855c6447789f99b55b29812e240b7
+Entropy.2 = 5458741e66ec43cacf0323db996a2efd0ab579dacdbd630eb8fcef12b763cd14
+Nonce.2 = ec01b31577c3a5fe3efc931664c16bd1
+AdditionalInputA.2 = 7ad1bb8bcdabdd911a34c2d29e02e510d8add5e6dde1cb8e6c1403cd9b785634
+EntropyPredictionResistanceA.2 = 02404574e6905240b504521ca470f12075f3beea86de704f35004e43e041e955
+AdditionalInputB.2 = dbc15e7ef49a2d10f250b5c4d0b44ec0fe42c4548572fceffbb93bb84191f687
+EntropyPredictionResistanceB.2 = 2a7b23e054115da7a4ee56375c5713071b20a489b4987ec18592fb8d60c37a73
+Output.2 = 0cc6ba526abcf4011df654d738e592db34075cb4c68cfb46a4ba59fc6f1d28de9b8fb44694f9acbc68980097fc63e539cfa62e694337efa6e5172d4dfec7d692a00e22a04ca0cddf797dc90443d2c472c70c8f6ecef733ee64e3d282f7731311369bd4a2a61eb228d4a2777a8ece096046f6e109f67ccaa12dadb440615d3927
+Entropy.3 = b291e0f6b96605484fddd2fd9216590c4ebc3db55eb149bc12a078e29cf3d954
+Nonce.3 = d46cc6aa53413e9f730896a6d69ec44d
+AdditionalInputA.3 = 6b2a01fca0dca401d52290d310bbba06ea77cec98a394b901182355607aa4da3
+EntropyPredictionResistanceA.3 = 87fb5a9231d39c30a174a4b148f10e3f51af06d30cfd63395c9a994dde360005
+AdditionalInputB.3 = fd8de9e83d1c37f70de6ce5d360cdeb57589cae7173ea6b24986d1a1b4ef0f6b
+EntropyPredictionResistanceB.3 = a19a6c8571e2d70216f9ef3d7f3291ee479bcfea50f7096fd43cd317be52e89c
+Output.3 = 969393b1ad604d7fc72ac776fc71ee417a329cc678471f21f10da03f709c01f94d0c80dcdc9f6393e9a2a4fb5c95d4bbacf522a87ed7596500ecbc392adf8b1c9cd8269552aa363c6ba4b21ac3bfcb67f565d66f793b415e2a78a08d5e19d7ade21b3e8d301b1b048bfeabeb5bb937f057da22a6ccbc4d86c97fb025021db9dd
+Entropy.4 = cb80b2bc4cc78f9c2937316c853a93105f687cc73435f7c9d7a260958785d52b
+Nonce.4 = 38ac548bcabe85400859de3370151977
+AdditionalInputA.4 = 145b5723151ae15e554133c0aaea10b87488f15c193ef520f4f4efc2391265ea
+EntropyPredictionResistanceA.4 = 5fbcb7773972e917c039c8acbb760317dde5c6a21bac4108bf7f500f48e419be
+AdditionalInputB.4 = 1d12f56cffd5d6e7089b7c2d1067ad75a1aae7e0e472edec939c074b60e4a8fa
+EntropyPredictionResistanceB.4 = c80722679af85d5d2d8d24d455404c44f68e7db0bc34bdfb9f41c1cfc9cdcd55
+Output.4 = 01b35932a17e744447869de65e463a0a4498b159654f0a02b994dae43b29d7ddfcb497a17b74bf41d19dbf4d6a77a69e9e1a4558b7eb83624200e52a2cd3abfd0dad24b922ccdad347bc3b2e8b4c0162676be9e56c0035a1fd79dce7aa82260bcd38352409513049cfc72802941e967be0d6631bb5997b2113593d357f72b1d5
+Entropy.5 = f3ab0602f77f778e324176a1b8b1d3dd39a73a9ab0096d7938fd07718f4f938e
+Nonce.5 = c0b7bd6cb992efd613394aefa5bf38c1
+AdditionalInputA.5 = 120bc525bf96f2642c65ebccc9cbc6e861802874a65cf78c0dc6764a384aef20
+EntropyPredictionResistanceA.5 = b94c94126ac7dca0226e127eda5e53754f92cd7a514402e49439753641820137
+AdditionalInputB.5 = a6ada18cce91dca383d21904d38a146a7c8f78f04399f69563a058b21da99373
+EntropyPredictionResistanceB.5 = ee3623a5dde6420668c7407e9667e6ecc00ade9834aaaa17f5dd799853898bef
+Output.5 = 80b02818d82740fcac8e2a66c55ce357adc15f886ddd8d03663f7f8f56a98ae664daaafe4f4efbe7c9f75abe686892421349d4efd8f4dbabb51f80f69de17cc459a4554bd9ca919f229dd8c2e479ca20dc3f564a8c4361358b4db2f9d9e9d6814678462232399685109a2909df09db0e168b21ebd5ebfa0072ce4b728a9ad28b
+Entropy.6 = 8c20645568348aeef1423e9b9da10a835a2f88a8fe309038861678b0ddf074b5
+Nonce.6 = 008c6d7d43614f85e8e26d40afe6272b
+AdditionalInputA.6 = 1b53a4262c4b5d40480075c277fec0eb496d2114943092131ec5cbff0dc934ac
+EntropyPredictionResistanceA.6 = eedc05aa78a6226ebd155c8ff637b12b1de9963a916e7d3dad8d75cb8c44fbf7
+AdditionalInputB.6 = b663f3cc21178f61ea9cf5f0a486f688bfd8f0ad4f483593dd84550daa994479
+EntropyPredictionResistanceB.6 = e46f3f0ce2dacf4b94db51a7455b4710a1004504764989f3a35a3657c2d1c7e1
+Output.6 = d69fe2164b12c1df1daccc6ba3e41744fb87caef934cae7f44d321b61ca3dac849f17af38e9acd8327fa7635bfed482f4a88631e970763e7ab1f092a01f07340a4981d8806266333c1f238f1c9b155a6beac9e9ee1b1b4182e19ca18979bc991b63ccec4dc2a495a77a0f43fbb5a3b7b50f04a4d9ea3e9eb07adcbcdfa825635
+Entropy.7 = 20b40216afe58c72cda2a4f423df30d892e9089166e84531443964a4bac09ddc
+Nonce.7 = 928c76c759c33ef4705d0502ea61883a
+AdditionalInputA.7 = a1b5ed188a79fd3bb22af2965778b591610fc2c3ec68ee565b3bdc2dd8bfa567
+EntropyPredictionResistanceA.7 = b5b38cb02b7bed1071963734396ef4f876571bd54ba641b150d27f5cfc914639
+AdditionalInputB.7 = f5e9bc647066c27fc8b66386f88791942d1facff67c7c2e6a22a26856e21b9be
+EntropyPredictionResistanceB.7 = 61d14d1479c1609b996054127b1629fd85426b25ecf50e91bfadc71d82190add
+Output.7 = 4fae58cc4abd52e5b6f926de117d8ccd7d16a380f89ba1b204461d333c520b2fe4f25a69b7d64418e38b49132bb1c55429bdf68283c6d2c13b0dff9d6e7c1e1bc4478b9a9960b662b76763a9501f08626a5752637f8407c559f62d189d4abbaa3dffad4419d0a9d34e299ea66ef893c67461245523474148de684253435613dd
+Entropy.8 = 359465e0fa9bad467df15e6f383d548f8689b9ec03cab6d09d0127bc268a09c9
+Nonce.8 = 024daac01bd3d3901f40659190dc4f21
+AdditionalInputA.8 = b32b002f9581ef3d0a8b12f36711dd870cbfb52fcd21c59fcadbb4d744e71878
+EntropyPredictionResistanceA.8 = e362d244f8220356ee4644db08b5d2f706d147cc505f7eb9f64d6b6e8329ee5f
+AdditionalInputB.8 = 7bd73b2058aed681194667aca69e6cec73c79960cb8136436225beda4eda7836
+EntropyPredictionResistanceB.8 = 3a4f6fbfe9467d417a5a155186eea5c536fbc433716af0ad4c4b7ab08a308ecb
+Output.8 = 5873f100bda5db80848bfc4dad8d78999fcd589e57c1b8a94f7f351d9044e1b849ca45bee1ca525d6562c363891b23cd2ea567babfdbe0028b30b0b6671c521e8d59d4c656558218a6e6dfc991303c054b6d079b3f20bb80c88c6d494470ddee5e7ed6d8b2d6cb268a1ca20c1b4b7f70c6cd2f571394865301a586c41f0526dd
+Entropy.9 = 6ed0c9591ed804b31d54d47b2acce70f2f9074953bf3c515484d30c1c8928a90
+Nonce.9 = 7cebecf1e181e8fb246a06d512c6d6ae
+AdditionalInputA.9 = 2172d8e1100de0839bea493e3f70b60826c3b4e1ceac3a0b59f110b8ccbd4b26
+EntropyPredictionResistanceA.9 = 9707c1bc2e52d81044ec24dc512007b1da378c8147a3e45bf05c7ba80abd620a
+AdditionalInputB.9 = f74a16357096ffbbb85d3a73336a439386a4ef3b95b76f5ac588be1be5d7d2bb
+EntropyPredictionResistanceB.9 = cadb859397d521368f14f035faec9671db4e02e08b91153a265a27664e93cf3f
+Output.9 = 0adcbec118a7c84b93b4ad2080919f5243d7782a1348fc5ed5348e08976b7283ed769d2535678dd3ca9dd5c60b48b5223fdc89ba680751d033faf3beaf306a93289c2c1518ce303595f5acf8cd968df2fbe7808a68b2960506f6a29c1abc497dd2a0bc2d2352bdb900dff647aaf677d44003cb21904044c06092f5bbfc90a856
+Entropy.10 = dfaa3067d73625c7ea3a150bcc33c1c63396423be7cbc717583486706c4538ca
+Nonce.10 = e5d3f6f971cd74c4dd9e7ca7a39e52c3
+AdditionalInputA.10 = 5fafb882a77c6fd4b3fd55740a19e14a216338c634beabb40618899e440b0d95
+EntropyPredictionResistanceA.10 = f342e8a8531af297f6db6939194c3d0c0e48640da4f9ca8a53605c0c1b976928
+AdditionalInputB.10 = 28b8f5d48223592afea79715c145e4a5368d0315c17a7d6fa29cf8bb5f5ceffe
+EntropyPredictionResistanceB.10 = c6c7b09f255f4396bb5e859905a3c107eef56d0870c05fd7a5e93ff47d3fd5d9
+Output.10 = 3262e849288b928426d4d64677797d33a50379b56929d1c673548cdcab6d746883b1d146c92af2cdac20f0b4bd6ab9f32999141871ba53b35a3fd8bbfa2c4588cfef93e33b082ebd0c0fdd9c6f6ff04b571af0d5da288485738cb72da56c9258cc4b041599ec5a6fd8e9f7240e41907bda9fe14cb3281d114c2049a086a0c587
+Entropy.11 = e9a6fba5171fb0a0bfb17f34424b69db8e5cea79ec080a9108642cbe3f0253ff
+Nonce.11 = fee74fa344cbe682a0508d98d613bafa
+AdditionalInputA.11 = af45dbc0f37099af3eaf9f86a8e2d884d526d7fabb3b242177e3f8b64d3a45e6
+EntropyPredictionResistanceA.11 = 824abd30c1677fb19bfc60ede15cc2d05b843161a70aa15188a5a4c976b35ee3
+AdditionalInputB.11 = 8939265ced11d308724b95db2e6a5e513b05bc23ef10d567d8456402406b857e
+EntropyPredictionResistanceB.11 = 104ef93463668094902e17be0438e4a6a6172491a826974283e736167a531b74
+Output.11 = 4ff2e815f3dc2a234dced45175a9d1aa5c96b5f23ed252fd179cfa7733fcab606a02b04a4b647e91167f5d60a819a78795547b7c04ce8496df2a91c0733ba5f839c231c68b8641db1fcb3816784e0db357a395db7a6cdae1fad9312dfe55996f5ec11b355ce8cd63502dfcd1935935a7f524902366e060da82bc5b77a4cd25a3
+Entropy.12 = ac433683f77c9c79f0e08a80633a492ba04830bafecb83deb1cfbc1505fd4862
+Nonce.12 = 04c18f887c789e0b76322bf0634bdc9b
+AdditionalInputA.12 = 329326636d5738288c4f36be01b8d4a45fd72b642255c6a254c2878a56b6de8d
+EntropyPredictionResistanceA.12 = 4b67fea86369659579ac2419485d55ef55c2156580ed4dfbd71bffce6eb393bd
+AdditionalInputB.12 = a0ac777d1882f34bddfc2e999b81ba866e63b16de8de180dda1b1226a8b79459
+EntropyPredictionResistanceB.12 = 68299ccbaf57bf0697f93b454822b5b9478a8f15cfa08c414e7dea9ad566b119
+Output.12 = 7483e650bd1719a42c8bde53cb0755ffde78db2a316738dc47cbefde858026c9d9520536097908bfe08790897c57c1fd9f059ef98d918b55f70b8dcb7ff8470b95107effcc0e2c5a6a368971fb0b6105fd30536053bcec3ab78e8dc5143f1ccdb739866701442c8ca7b86ae73de00ade0e812bdb36d160d413fb1fa8dbc34b5b
+Entropy.13 = fdd8409acc391a0d35c8d1030716d62869b1ff137a13bfa0ab6325967e0e2cb0
+Nonce.13 = 79a9fec341895f4b825a6ad54a7e01b1
+AdditionalInputA.13 = 8e53b33d9185837485555eb4b1b9185878cbd3c46d603926d32a2a3fb591a2a6
+EntropyPredictionResistanceA.13 = c91798ce6505a527f3570ff2abacf0b7de05a499309fa4992cd61e3b7c617d40
+AdditionalInputB.13 = 000141ef8caed0358a8a389ef7c59bfcf685ef9304d76fc8089535304afdb55b
+EntropyPredictionResistanceB.13 = 934b48e38db395cfb433c821954653060faf4c76835b3f983f137d3c9be82462
+Output.13 = 1ce996a95f52663bb66ad206f3c60dad37453abe27bcdb889e78ffbf1c7d1d8cfc73b4810a0801813b7a3f06378708e80b2040bfcc289897f1afc1d0784c2a413d47caf907f4ef21eda6363d6195f971bc3521c0e2a30f8932c8d8a2d8cb67504fc0ba17c3e69f239ec391616b0f96923abff86adad3cc04c99a6a61ca420a96
+Entropy.14 = 45fb359d6b079ab665b570ae1da9f006775d60cb0878f989eac2a0cb14879d63
+Nonce.14 = 4c201412e23255d029693e161581ab7d
+AdditionalInputA.14 = 0593d76bb9132238c49a123b0e88c9d4dccf4c71c647ab8de1ed9b1491aeab9d
+EntropyPredictionResistanceA.14 = 0f0a27eccacd88f5beec05f30454c5dad07d92efca6042330ae71a56707cb199
+AdditionalInputB.14 = b957370f1caea9ea4dc04906d5ddec43476f41a5ee6f7b9f686941c1909aadef
+EntropyPredictionResistanceB.14 = 423c14e88b3713b17ea6aac4a6896bef5fb47d0ecc9f4042ca830de0e30244da
+Output.14 = 69a84c108d8eea62524cf921c49600cbcf590ae50dd0a2f35118e152244b047a423bae5eebc95976e361ea6b646744635527ab945f2d2419225ff587bc5b34a3dffeb9bb3cf7f5ef80a8e1685c1119b0349ac937d084f1392d0fd25a64f43e0d33f0e8f54db85d3eef1ec5fa840c8232323d7ac3a2efc7ddb9617805367f38c1
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 03b4e89109763050e88f663af66c5ed1b16c6cb2a4ca4ba1985b1091b340f308
+Nonce.0 = 491c20862989be1b158021eb4220b6f5
+PersonalisationString.0 = bf924bcd7149694942f2eae127d6791430d3977154d3faf42b901f380fffc7e4
+EntropyPredictionResistanceA.0 = 469acc0d24b2cb422a64e485fdc768f1ed444d9ade5bfc7576f5bd505d7de67e
+EntropyPredictionResistanceB.0 = 78991884940dedd29099a4056da68299ad6c9f90a10131c91e88cd9c36daa09c
+Output.0 = 65370b7b4d425a8919ff1fa436fc93c16f12acdab5e1576ca452dfc6597ed06bd0eccf78c02711c3cbf7363f6270c7ef376381771fca72eff43e37b2d70357b4406759346a8718bc276cbbd1f1811f8b96aa441c6b6459d2a570e941cd3ff1ccd64470eabe6687404ac502515360d968e819025115e6b015233ecbec58512b88
+Entropy.1 = 4961964abf19c3e44f0459982c1ee3bc31db77f2345282c257a68e4b2ce6a903
+Nonce.1 = 14dd04705026f983120429b3e0b13a56
+PersonalisationString.1 = be099918b1e225221ab5740b93d25ecb3759a70f5bb61aacc2d52a54293d2104
+EntropyPredictionResistanceA.1 = 42c32a5fa25064edb606825bbcfd623f2c166cc448263f92d8c2a27dff56e9bc
+EntropyPredictionResistanceB.1 = 85666c551db2e96727ca88612adae176193226cc4857b83e96a2ee50b76aa4fa
+Output.1 = a46f3f535d7fc1943af47f83feced178a6d8403a7d91ad6ca2cba90e3a74e50f9283af9b01a6aa009520d7e84496527006008670b925bf8823702258f1f272a9bc12a01575b9ba71d6bad496b570fca846c4f8479aebac0073c5ae6cce1f1fec6b7ab4eb9322843b157afdfd6a7495b1e0a06422a2746a72d771b50e24f86f6f
+Entropy.2 = 905da87bf804422b114c2fd965241af78a47dc85a018afc252f6ea9cc11756ab
+Nonce.2 = c339ecc563b621382ddbf343ad5a6d1f
+PersonalisationString.2 = 739e22a585b07c2bb7dc6e3fdace14d437abbf96ab9cccc6f0761cbe2352ae51
+EntropyPredictionResistanceA.2 = 56e839d8e01df8feaf2faa41d3631074444dbdc4f71f0d08c82a526b5c06e559
+EntropyPredictionResistanceB.2 = 6664bcf7b5a24aa4d8dd11297173f40857be10927df1b3b3c664268262b847a5
+Output.2 = a9e11f98601453ea4e86e394f501327b5660f18909288f7091b539c54b2d72cfadc3d52783e5d9db1a1f6fd4de87a8652398f210a0a4685ce92910a16118dd28426fb5eed589485950f483f5ff4b05d312bc51f1fd1831c0fbe597db5cdc9b5e6ff7d51350b4b7d8d7ed658a6cc8625f6b54c9a6d024d9066b4c256ec666aec3
+Entropy.3 = e48778fb1b2858e7fb5ac5e9981de4cf8902d947bed69d4ce60facc9d75dbd7c
+Nonce.3 = ef5b0bccc50d9727ca9960b138f0a2b3
+PersonalisationString.3 = 9bc0dd1fa2eb31783283c2abaada8ea41505a4e87153316d241a866c29cd666c
+EntropyPredictionResistanceA.3 = 6b8bee829e689c34e74fb1955a35f758e8f6ed75e1b2283d84bddab7323f306b
+EntropyPredictionResistanceB.3 = d921ab7ee579d126852e589b5db76aaa7b08855544f0b814fcb3cb0c5f0b7333
+Output.3 = 02bec2ff0f0631368c302215c2baf08217de29a986af6bffc987a93a6b9ca9c0f5a8ceba10716591e228ee5fa58d33acc5ca851a0860fa77c44c3d3c7855c9ff592dd621ea0ab4b6c33ee81a22f90a666face59924ddc0b6bfe6d20dee202806ec835b9f4ebd9aa27d212219bfef83e7ee85215ae7d68b79abec41e0c6251b13
+Entropy.4 = d4cafaf6f6a5b1e8af9909893247416f017a69a8fbe8b7b78a5f78f895c49734
+Nonce.4 = 09ccd20011bf1086377969e3af766508
+PersonalisationString.4 = 691def5a1ce7f8114b78c8a0b3d1e3beca99e97ef3ee1dffc03b07a72dedefeb
+EntropyPredictionResistanceA.4 = a59006c9906ec93d54864d77f60e73fe9d89ad90f2b3cfc9f714f5e00fe3fd77
+EntropyPredictionResistanceB.4 = bfe3b5f895e6627c06d8e0f0247679a985e28cacb4feb759d4b64c70b172d8e5
+Output.4 = 81c00f1fe7c5d273f70c7b0fb7586fd0eeff20bc31f64ff366cc99315085d3824b4e07db390fb872ae4facc70cefb814e67c3ef46cee62a1f5babce3d2e35e1c75513860d79af76b10b64996ed25b9ec78b898fbb2114b7ca58d3817b90d40e592dc01e8928e8c75c37a2f79dfaab2cbec95da4dfb891794df5682db30c6f8fd
+Entropy.5 = c009709a0ebb206953c1d6379796d3e70717cec125194e6846c966e7fd692420
+Nonce.5 = 7efd3477b18b2b181f473409e519e3da
+PersonalisationString.5 = 0ce41f4bc71f5683102c0977b5219d9a9f97a1ee83aa9d9218eb7f5c9358ee39
+EntropyPredictionResistanceA.5 = a22268351f432975e1b209e1146dca5f57bcd182b22af92f5dc8343b84322221
+EntropyPredictionResistanceB.5 = 0e5dfd8e7da69925fc62ab526ef78a3da1051eaaefb9d2560c171a4f8a492939
+Output.5 = 50738946b890e652b01674907985d80eddf0188d26bebff7a2cdc50dfb29892f2fe9541f2ad807a002b71933f63e3750f7ad3b746b4cf3ebe17fa20b6dda379b362ee0499cb5c7259a5798b32b93ac407e1133643d042462719e32105f715225d45f2b1bb695bcaf84b5400fc70568de5da934523f836cca55c60db7b8501a78
+Entropy.6 = 0da3ac76093782475277bab65191ea073569f2d82868570eee3025418347f54a
+Nonce.6 = 82a833990e54eea5bc430e6ac3f8c936
+PersonalisationString.6 = 3ec99bf11a9297e6b3f08042a8cee7480f25f43208a58e96a9c129037f978224
+EntropyPredictionResistanceA.6 = 5c25e3ce83d636a75d39b12589ed10fe57fab3608a83cad488cb05a4da15057e
+EntropyPredictionResistanceB.6 = 376bdf8bdb1442bdd222a13bcc560d6776d941803cfc5a324b89908d8c5f004f
+Output.6 = 5638e7670c036c9c01bdb72427bd854c403a052ecf6c353a6f7a6043109d300e6a0f3d6f330d108bf64c14d25eebcf743e2dab4d5fdb9c610cff5ac03d9a09afbce1146d83e9f3dbb06a79b551926892a554ab47174f8244c4a7061ab1a352a704196b5bc472285bcd1468cd85721431db730bbd7df1e8d1ffd4f6a008c085d6
+Entropy.7 = 25b56970bffa84f34d3a64ec3466159d94bf5788be8ddbbe89bc0f753eb51c7f
+Nonce.7 = 5429fe6e1371a71e241e00510d33f782
+PersonalisationString.7 = a283f20f4095b2deee629dfed8bca53b2e9db6f85e51364e9392986c65245715
+EntropyPredictionResistanceA.7 = 1030e2bc590bd62a8778c64783750a52a06ae7a705e88582e448fe83d02c09b5
+EntropyPredictionResistanceB.7 = 792f4afcf1f8da9af0a87b55fe082e45ff3dd005eec831c417b33164440c505a
+Output.7 = a6254a3c1d540c1573fb78ed60fb81342e1621e43ef4ded2734c730185f6c86c0328ed24de1a0835455f6ceb9cef512d602704f5db8f30c8a2dee37757ff825dd69a2a58ff978f855f625ccd5a9b883e6b0a926874243378bd64723681ec8e5e1d2c72ca417f64b44bfb585297e44a7ce50c6a7b9eeefc12d10205d46f2fb9f1
+Entropy.8 = de1cd398fa47dc56cb1634bbd6c72b30a1f32ba09c897eb9790f22095dc53334
+Nonce.8 = 4b48ce6c112dc0cf836b5a4bfa4330e6
+PersonalisationString.8 = 96c9f052863c33406d09291e2dd1167d3261d51103d3f72d55d7666a96368c1e
+EntropyPredictionResistanceA.8 = cea79ebf914c983fef9ba00b7acdbfa82d80fe3e29c7ff9ed1a6e5987108469c
+EntropyPredictionResistanceB.8 = c9cd57b6ae58b882500292c4bd8ef663cf2df5166dac07428f16ad511736b785
+Output.8 = 212de6a1a04c242421c1ebccd5e2af45a8778c8b7121fec10c9fa217e92467a8f75bf40f21d1e2c3460265f5009640dd8e50e334db0ed2dc39663e183345874b6487dfb43b78af3ebcc1e6b86baa4e48697929d5ad8b9b29e9e84931603d52b0aa3d09063cb42f09fff74a4e8c1d22143007a7c4c5e8cce2e3dd89f14e823211
+Entropy.9 = e6adf4a964992d6736034499f3df5129ca1e60053a699fc2af06d2b06f9e1588
+Nonce.9 = d01ac6e178ae1d51c418f49568ce410e
+PersonalisationString.9 = 2f128f0f4e72cc9807d783b9e6fd9e3e517d21680b3635a8fa908438836e3083
+EntropyPredictionResistanceA.9 = 01a3e263a4dd2ea7ff210ae471df92c505569510dd356b3b2fde41cd6b4c9fb0
+EntropyPredictionResistanceB.9 = e063e078373844b72f5c1b29611e5a28372bf28c8e52301e8120c6b63883fa10
+Output.9 = 4dc8785e4b1c1808699ebd0047eab22946c1cedb905101b107864fbcbb433bbc3365f02e53c2bf28e78fa604c68096421434c0aec25ae82da2c55eb91acfbe6ab3733d46838e4aaac3f3fbd508578e1c014e9ecd01eabbbb81d2a035f48b1678d4bca0a8f6fa9c0f45da6ff6d8a2fc2cf89cb7a51938956a8bd0714acb48188e
+Entropy.10 = 6627c35090aff606c10624cb38f09e2bbbe1ab54835f9922c7df85074b5ad8e3
+Nonce.10 = 210a4ec530884433effc5f7f12b65cee
+PersonalisationString.10 = 011e2f4e2bc03269bb349a0cc1dbea4e82093cd44dae3e3a436e0bdf053e541b
+EntropyPredictionResistanceA.10 = b8cf689f54d5b7df9bc9a41eba76a6d439dd140da7440b7fa9d8d718cb39e847
+EntropyPredictionResistanceB.10 = be5f526462113237d024e0cd01cddde45504ea3f4bffa4420469163b4e7afc3c
+Output.10 = 04b840a82542748bf0741732030fdccc8cea4429d233dbdff4507406c97443f8fa3ae27beca7aa44dd56e2b8eeb893d1a7d62104f8bc0ece428050e259517c8fd98ba12cc85ed83c2e11b41200c488613210d8ec91fe8084957a80c5ee882830893b3c57f58f580353345dd0f3876ed38293839ed1643915dafcc4e3b3fe878b
+Entropy.11 = a2b60ec6d5c7dbb4f45194a97a7a2019508d8a8447bfefd7f11c6b2e3a2ed119
+Nonce.11 = 3b33b322a616ec3b7f739a98bb82894a
+PersonalisationString.11 = 0ae8412d8c09b7a8898bd26acd0483a22838175fd69b9e1fa3a93de22687386b
+EntropyPredictionResistanceA.11 = cc5a89ac36ff4694092bef070a2bd0e804c0b70301a4e0969fe35429d6361b52
+EntropyPredictionResistanceB.11 = 478332f4ce2f77159050c60bd2a13dccfe1a48ff94a02316a76d6532a7b4b179
+Output.11 = 6ce0f518f645d89da4541cc622b6bf241e9604817c6a96e42bebc0422e04dc517fdacd78f992ec3583dfdeba1c7b73be512b02ad9c45f5d972bde3185363c96e0d445a4931cd899980c1e595721e1bb2030bc544db0744080cf6d4492789a9544a770a97dc874823cbbc309bf230bbd2be4823f2ff3dcf7fac632789a7b16731
+Entropy.12 = 4e96eba7102282bb2a74402d8e5dfcca4b8490d4674ef8bddc38d0fcf4946ecf
+Nonce.12 = 8d9c44abebbbf8ea7d5b1f417e8c2fd2
+PersonalisationString.12 = 3645e1b255037114e09520c84d937adb844f71b9621bb765c584d2d620f5800c
+EntropyPredictionResistanceA.12 = 01bf06e71795e8b31857f19584d153c911513c427f5e84fdb22e07ce4680a82d
+EntropyPredictionResistanceB.12 = dce71aba521c878dee0097a3ce062f0475d20bb3f49e304b4b756f789514cc64
+Output.12 = 2df1fc8ed5b222cb27f9084182979c04acfbf89453b9328d0363e4a80b8ec61818926eb68c0c2f7a15b7cd492e7c940427d87ef83801df2ec7a06c9a8b7f53438d1f13ca0bce30409811f34f5e4136c2c92d3608cbc62082df0314cb94d49e954755ce1d68878547d04736ad65d72ba25a20b3c11e8d02bcdf5741f564d27d0c
+Entropy.13 = 5ea1321c8bef7bf0c4e3ceb291cc36330759823a48afac7cc00af405d43a86f6
+Nonce.13 = bdd3046c960c61d122139d60ae93b670
+PersonalisationString.13 = 1c171482f149dbc2870c63b227e643a636fb582a8cabb92c8d0fd770435f1d79
+EntropyPredictionResistanceA.13 = 487b151afe5fa1409f830b2114a5dd0e1b25410ce7f29c94fc2d54a7264c0d11
+EntropyPredictionResistanceB.13 = ba748cd43008c345b77531a56a4f616e56202e151f75ddbe6c05a7625aa4b209
+Output.13 = 017a800b7905fceef05e31dc67a39376c906a16c8a620f077e3c7a98b6cbc9fe4c4f5b0691b689439761a8f096062cb9640e1a99f404c4370f743b00da75971ec90b6551f609205588b835269b95ad12f56aba275f6227157be8a6c95be14b16306107846fb195f7132f42f762bfc80508ebb5ec239c0ee5c290f354451b0a44
+Entropy.14 = 111511e630ec4e81d81cb952a060d73b5b0199e0fb2a19f776d8bb8af166ba1f
+Nonce.14 = ed2c2c5a39ded3cdaf0d3d18645fa8ad
+PersonalisationString.14 = 7cf6e9ce35765dc5915b283c4d9471cf7aded24c3809013f13bb5b90b313a6fa
+EntropyPredictionResistanceA.14 = 883a2bc452d18579056244e6c99904ae8af4a8327ea38f23b3e179c0663d3b63
+EntropyPredictionResistanceB.14 = 6095caf3a2f9cd7861fdba056a5cf11ad0561e999634212052ee72b08c5ce5cf
+Output.14 = 25ce5fda0da1a066f5890ed19b322cb28b9d030f2852faa4b084a497fed09aec4df67f0a05a767d4d8c2677dc004982830510c0c6d62efeed9302259edf99624f332df0282cfa95ea58ee3f3131f938e0710272a8020282f53531254e7ee2eca2febfd72dbe1ca6f46072f595c1194337494fb6e2dfa660664bc76d09f18f324
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = cb05d9611b4abac7314f87090a145677448c0c8e89e0a84c495b96731c10da3f
+Nonce.0 = 7138b0f4b5a604cafc1d048a6a568a73
+PersonalisationString.0 = 97af18044ca160801059268a97d50950fa0c305cdbf315e29c9bbbc9ef194d88
+AdditionalInputA.0 = a7ee3fd3780d26e6304fd9341310f3c31f6f6101961de593a7233f877ead2e3b
+EntropyPredictionResistanceA.0 = 3a45af508904b042a9406efc72957c90a07ef44f9ff939747bf6444bc9d3b439
+AdditionalInputB.0 = 5d3790535f295b1361880cfd9825aa4564726ede97f4401354cdcd671595c31e
+EntropyPredictionResistanceB.0 = 33e5f4b5162b5c80b6e7dfc7d920d3ac5602c81910259cb89f334fa8c541e51d
+Output.0 = a2231c9a7cf4b4947bced3e6831b696696579a4e315d72b798dbceec9cca1f119f41fbcc91e356d5556299d825ba67c97069aeb65711d44de1ba300ea29468673ba867dcafa95909edd2291c4cc8ffd050bcdf69fe6c58c1ca6ad11e9abca6644b259bdb0601d684aa324943c8ead80d349ca632eb8d150ae952f24c1f74e1f9
+Entropy.1 = a9a37e45b2a0df06fd67bad07d82b1152aa6cbcf16bb7cb7d71520acfe8ac9d3
+Nonce.1 = 1249e5b386f75c5eff708db78e1ea7bc
+PersonalisationString.1 = f88a08299daab2942d05069228215847c9c587a3e74b8198ec38d67743ff2480
+AdditionalInputA.1 = bee99382592c7a7396a1a8b7718bb83e08e6cc03abc6177dac0bbd55dcedbed1
+EntropyPredictionResistanceA.1 = 651f3c11af6c769066e8dbfd404e1ff3a1c46d87fe0275c10aa08fa5ba5dfc12
+AdditionalInputB.1 = 0a6318224c433ecc2167212e1a43e5ee2419893020f31220672be4ebe9afb2b0
+EntropyPredictionResistanceB.1 = 9995b24442a4f60f640175f8727ce0a7eab08b5da575bad6fd6a812bf1c446e0
+Output.1 = 303ea5cd08b478d55babcb5d51f8a5d1a7c93a4a8f55b48422afd38eef84b8884b154b7fb489e2106bf9fe8e2f07ad0a70f3811d79bfbc719dbdc43e85c5ab8a29d392905672ee551ffab1c802612e5b00bf104ca551da312629556cf3e200129898ce94433c184d642886c7ec35fc8bf2f7401bda5087ce2f15a30ac8787305
+Entropy.2 = 8f33eeac64f714e2bf970df970e4b8995fe69d6b2404ee6151a0be0b8440e7a5
+Nonce.2 = 28b355caa3917a43d71cd2ffce72bebd
+PersonalisationString.2 = b95f5c1658fd34f0168b0e667cb6fc6a40f56eb39c37b4837870427456d9fd73
+AdditionalInputA.2 = 4f74bc534a25b31ae24a579b18e9477ae2f10e3f080b7fa400e4ab1615593ad5
+EntropyPredictionResistanceA.2 = 6a4750f92869d31320b3af6fbe11a8d4e422d9d1fad596914c61bf7f238baabd
+AdditionalInputB.2 = 9519988f5e3485b2f2979ff69369d6d8d8b66830a7eddfc638fc5779cfec3e0c
+EntropyPredictionResistanceB.2 = 52bb0fabe160088d82434489ca0498088d3c886cc1c953bd2a87d9957506cc3f
+Output.2 = bb628f7752595f40a4a2b285b86082d58b3f3a4834d84f9a3f7b05e0f0974097a224e442dca8ff2febd942b6db243a1fbf849972093b15718126576e4ae92d5ad6b68f1ed5fca76e89228a2df30e9e07a2246485c04583477a73f2ec3592e62ab597b4a087d4df7d3acd70dc7119d6ff9ab0b13fc5778a3301ff6f268ae05300
+Entropy.3 = bfcc3891d50c2c8bd445bd3ab72535ce296367a3eedd2d4061a7c65c0291314b
+Nonce.3 = 9ea1e707fac4454eb618100d58636f50
+PersonalisationString.3 = 484876d2e380e3dbfa509806498cda21b0caa57da2b5f9b69663030361951f1e
+AdditionalInputA.3 = ce9d7c4b7177b5f8e55cf718257ab2bc90f221a4c547e1ebeb4824ed277adbfb
+EntropyPredictionResistanceA.3 = 5a9da74cd9b21971200c038313f8b30a0887332fd2d3b7c517ae8530061e9d5d
+AdditionalInputB.3 = 00f2d1c1b01fc4e82d34048e61eb07cec8cc2159b23334133e8b8bf9d8af230e
+EntropyPredictionResistanceB.3 = 7cde444d8263838bfd7b0f75af0efe10b54ec4cd874e07f52524ca3eedd542bb
+Output.3 = cbefe5391922e772a6a44bfc0925bdbb98afee1e5de3dc8b7e1a963e4a0a366b3f97e302dad03fd533f19928b8f4145f7f447199d46cdfe40bd887903f41428e2e304bab3dc1abdc5cadd2c20b1c35fd099c71b9550dec9ab93b6dd3ef906614a4cde21b9d0f3d0faff83bf1bc198c1ed296e225a7af40fc5227a515ccd3d612
+Entropy.4 = 338e43e57a2908c21b69c8d8990f6153faf88189aa245706306d1271f25d9e8d
+Nonce.4 = b0501f2075a3aee5e98633f393f5029c
+PersonalisationString.4 = 2e3bf3ab453398674d27e162fd9d052c44f21c94396731990d8617f815009a59
+AdditionalInputA.4 = efdb507808fd15a4bc0a419b88dabc6fb0f08ff4f82c7df34d6cc05cd04f7788
+EntropyPredictionResistanceA.4 = 17a0fcd29eabe3c5796f05607789c1d8e2805736d69d7338d02ecab7fd06b77a
+AdditionalInputB.4 = c18204f502269897616a9e52eaf869b6ef48c5f343ea6c152359a38ef3f99767
+EntropyPredictionResistanceB.4 = e1c1cfbba7302dd131b3c28fdee92e2f2673d1b5d67e8edc1e45ebf63f248dad
+Output.4 = 8492057b3a7253ce5a9404d1dedc91aac13352c2078e83fa997b66571bbecaef6b257505769e0c9c29e00b441b9a6d51fab1aa748129d04d844033e0d07278513836ed0a8f28d29f66c29961244c5539ef666cc533b0a7d021e038cd0726258d7db1aa91488743da5bcb0324655120fbeefbbf114da135c40a6cb3b530597ed2
+Entropy.5 = 4123c4678a9e40bffef2fa83c0b0775ce722418c8f9d0a80e6e0e456f5252166
+Nonce.5 = 5e62caafc8dbc7ff2cdcf07ebb4aa6ac
+PersonalisationString.5 = 1f83c8116d2eb2f531eaca77ec003c858a971f1cf7f3789d210c4916cd2b3e5b
+AdditionalInputA.5 = 3d2784c3f8370333b70ddae994e53ae7122b2a43c6ec4c30534af6dd7e24d624
+EntropyPredictionResistanceA.5 = f6b308f8f3bb0d259e54ee96436c6bfed8967c41e5b3d76c7ab188aa865eb9cf
+AdditionalInputB.5 = a0b4baf0fb2bd926cf410ce0b96a50919692a318923353159b41de11f8aa5758
+EntropyPredictionResistanceB.5 = 7f0688e334093b2277d6b5056a9b0d028668308781818886a9a9c752545a42f1
+Output.5 = 4cfb3bc4aa98c5167035711afcd6f3448bbc6f5da86c53229c0b7ef7d03067b89657fac546618800dc54517d096e8b8cdd0d922c9fb66c6a6d4903cd123c54719895fa341f41ec881970f99da602bee5300960498a8ff9aa5a8cf7d4a6be45f534c854b74d8fbf1db0594e2dd48ed749b23a436a602bc653f1c8278a95563506
+Entropy.6 = 9fd838f4ffd6f79a8c75512f20a90fd86fb56513526313ce777a8af927849a77
+Nonce.6 = ac4c356bb33af6f6a80ac9ac9b940fb6
+PersonalisationString.6 = 2d4658812ca4cdf69bada12db425385597d62d34fc4fe8264db3fcf37633f32f
+AdditionalInputA.6 = d845da537a29d667b91b4c88d3da32925e2bbf3b495ba0d1d950aaf8eea2ead1
+EntropyPredictionResistanceA.6 = 9fa055316f239a330eb2bed085f4607b61660c83ab7d3acfede08d301fa0d769
+AdditionalInputB.6 = ae9dd9b29a651f2212710cf29a6348913f830ba6c84e07a036a9f2c74a524b9d
+EntropyPredictionResistanceB.6 = 91d85e49f1d5ed39eb97f0c25d12ae42e54df6bf007895b3f447004cc54b2237
+Output.6 = 410402fde93f67425e7225dd937b268760e9eaff130794fa5323523fee8ef9ef7ff3c4bb79cfe4d09117b9030b619813a977928fd76fc7b940abe0a0bb97ea3001394eb1c81de0ad45481ec309740a1a51a22c93808891013dc23f05150be78884110ab1cfcdb2541b2b233e3536d47485b70612b5936eaa90eaf98c961f197f
+Entropy.7 = ed0459bc2d75ca9f34acc7329096cf7e9584e2ebafd613bf62b2bbd0f8d8b05b
+Nonce.7 = 9905eadae864c47d84af28eadd5f536f
+PersonalisationString.7 = 6b8b5e97fb6b909c5fd9ef34ee038a66bba0a80da55f870edb197a26650121af
+AdditionalInputA.7 = f31190162a1aea2fcdb613dfe0bebb096cd2607904fc2656cbff5f6b788588e7
+EntropyPredictionResistanceA.7 = 9047894bbfcb47f0d4df8a01d786cc6ce2a9a1d214cf3108aeaef4dc0444424e
+AdditionalInputB.7 = 3c88c5a87cd477ddc85029c8a332a8950bc9db46049e086f1ef467b1a98d34eb
+EntropyPredictionResistanceB.7 = cd55186f98062a59e2d02b4bdca5822e74642ea5f67c10152a798d702c8fbba4
+Output.7 = 04da041fcefea65e5f3d3d527ccf07932cf77203d0f13af8b6c4ac8692193044da67aa8695159bc70185c45508ff0f6f80c27ec78a149dafa702bf652b96e1aa20816cbebf8f08adf653beb9ba81e32c30c2f9d43276a1f9e381ed162bd3d63f36592fca55c0d799c4e8cfceb6f568553ab1f8cb85e0d596cbcd2778034cd1e3
+Entropy.8 = b07ec3b7bf30b88d173355ac7d238a411bb52a14216a7700064a690cb6bca634
+Nonce.8 = da323b01cae3293ae56881168218dff0
+PersonalisationString.8 = 086fee3a1713d8bf5f7b8a848886160b977cbbdd5dab92418ba48e9a7407cf4a
+AdditionalInputA.8 = 5b018aedb9d4e4e2d4d84cb0353bf28c62a9e30c57787e3648f3c3413a228211
+EntropyPredictionResistanceA.8 = 23b8a1ee575bd531f6015c3c17de9ca1ab2313faa39bfb5d7fa5e20040232db1
+AdditionalInputB.8 = d1cad786b20784f8d8eb52a54308eebf0dffc294c4f04a4991bff71b758eecf1
+EntropyPredictionResistanceB.8 = 1b4565af6fd397b19714de8f4df504474274f8698078eaf9e3c04f92bed5b72c
+Output.8 = 4a32febc53d8725264d7c82a2dbf842302a1008e1e87037d1a22ca824b43e134701681350153ccb4d457a76d545663229369aee4893221db53120852d135673784e081077938e2f8946f49689412e27aa2a04f0e2ea20d5df237f078e7747e09a01480244cb3b6c5aae4e88cde7c6f75ac03b1320252f299b027a14a09d161ed
+Entropy.9 = 7132d3ac616b21344491960c90313460c6e044fc81b6da667ba65bd908efd2db
+Nonce.9 = 8b0b3cba1d12c0d3eff91e3b037aba8a
+PersonalisationString.9 = d3251fe9f0fed6ca45ae52dbed7948e22ef816e6a8b388fb45fe31904fd65375
+AdditionalInputA.9 = edebb17929caba810476281d9d4dcefecd6cf7728d953b90eeaed41dc0e8aaf4
+EntropyPredictionResistanceA.9 = 8901669ae85113e70f00f0248ade9e1ffa42eccd0de8fe0123cea0f5b101d565
+AdditionalInputB.9 = 64f9c7c7e0c2408722d2d1ddc544da4248a3f5b1825fab2131e5f833e3845f78
+EntropyPredictionResistanceB.9 = 6f800d77358972f1e4a8d2c1ef925b2493d876b90b3ada8c948eb34d9e9b9295
+Output.9 = b97b16486606bee9c7856c61d10673e9f07f2073041de443012dd98b13f2430773ea8ef91b27999a5697b7601d617ec7725ee20b224207bab59c77cf90eb139f52ae43bb4bc2306a7c077cfeeda09498ab1bb347e9cf0a26454dbc5a0770fa6c254c4bdd4587b1fd05d74a4da76d2799307cc9b5864d4278bce8cde53dcb78d0
+Entropy.10 = 05699037e3b54d4179c14f9a9e3b058f7537c90945a33d638a5e868df2de2117
+Nonce.10 = c3643ee091c1f59efbba8299b02a5d88
+PersonalisationString.10 = a608b698a51e76641845a1ae968a452326cc322f3fe6825abb46fd7e375bc7a5
+AdditionalInputA.10 = a0d07cf70c375ef9e538b5819b542fff4773a20e6a60ead879c37cb04f39678f
+EntropyPredictionResistanceA.10 = 617d01d341187d4b01300ab05ccbfdee4545b8182d0c39cc6b1f6c8fd38a929a
+AdditionalInputB.10 = dbc3f3c36a0a155f994121671999c27911b7374fabce1422e4ec450493a5e548
+EntropyPredictionResistanceB.10 = 3f75a7006bf74f4f608e4702262e49724f101a90785253dea79c9adbe0f1cdd1
+Output.10 = 9cb78582af65e9c0b3999a83c98b7a83f95a481e0f66387d93f700a64e5182ce5cd0bcaa27df33e385f8c21d758d7f506181af3407f6c5037ec58522587f0735946f764066dc3c429a8efb00bd3eb3aa4b30017a3cb8eebc46f7dcce97423c56ae4544f219604769b3cac0f2883b86c1ea57d328c6c7e532bde75eb57e55b705
+Entropy.11 = dc44a1eb88e0a3ec2f1c0312640073adf818445a48d7be774a90e0bd12218a0e
+Nonce.11 = df6435690d6206f60890d866fde55374
+PersonalisationString.11 = 47cd0baf6613a1f0cdc125bf793468deabb212e0f2f9cbe5b80dd814328329b9
+AdditionalInputA.11 = 74771c6940cf778c74e762a8c0d27443c6b5fe8b1056e1410b7186084b085b46
+EntropyPredictionResistanceA.11 = 268ea8ef0f23cdf48f3e62385d8d48a38e47e82675573d274434e35c5ab90cbc
+AdditionalInputB.11 = 6729124be0bb86b9e3db365773a75ffebf681fdc8c3eef7c0c2fd6c972fb0b03
+EntropyPredictionResistanceB.11 = 44bbcd241145c15b600798fcdca598a875e1e1b69e46e03b755da80317f1d045
+Output.11 = a99246529a4c844c9e79f8df85a1a9b5b7b4ad1fc59d1b498aee3b8b8aaaaad5c1ea42f4786423ebe58cec53194545420bfc553735f580f7b96e62b8f7c4a17a5971b72569c9ad3a0d774d141f7194a5f20f09bfedfdfe2fac5870642e72848ef7ac881ebad396b9dbd4a1269ba3ef311dda73bf2c002ceeb8b914e61431e075
+Entropy.12 = e7880f3acee7bc518c5ae4b7080fd47bbd59e2f366d66b69bec08eee5eff5d72
+Nonce.12 = b5596a2b9620e97059b8784c8cfe885a
+PersonalisationString.12 = d6f38a6355bd3386ca1a0d463c7a24a4c2c54794a5fd16c65bc22476b18abd54
+AdditionalInputA.12 = 82997ec51690a95609d51449be80bb5d87ddf8d1ea20c7df8cadcdf8b4e2131b
+EntropyPredictionResistanceA.12 = 4f3ba344b7c353efeb3bcc4b6f17e5dfc48e023de1fd42cf7f8646ea66ea6e90
+AdditionalInputB.12 = b7eefe50f7c19de71cf12b939641e19cf3d4686b1b581767ddc60d2d58c026d8
+EntropyPredictionResistanceB.12 = 38cab578bff7903e8a3990f1eabaaaae93c258761910a78adc552882d10fc849
+Output.12 = 9d51a3737c1b2e2431347b1c1745c5314fdc4751ac1252590e69de32bf873914ca7c057d0394d34d85fea093d48a67915284f83d9d17ebb15136a712509ff99aeeb95f5546fb343c2169ef640fed568a37538166a67a07349c58d4b0a64c723a7fb3bc41f81c1ab308f728e958f4211786044656b21b83a2d964d187de15b579
+Entropy.13 = 7f02de07b8196f12e6ce8c5fa98d857480b8527f71fea4f1b753aec95aa07145
+Nonce.13 = b4c8882f1d6650893e7728455f43037d
+PersonalisationString.13 = 2e5ef134a003649e31f9c32c02f8bf75752c1fbbd8159d32ec75e2a2ee9bcaef
+AdditionalInputA.13 = e3a72cd5e80cb01ac1a67043d73c8ecc41b6b8177fa341f5b888876f5541fba9
+EntropyPredictionResistanceA.13 = a7723051ed170f0140baee23510bb056dc676486deb89f6977d9452f8613fab0
+AdditionalInputB.13 = a4a5c4956370abb25f88250945119c4d7a8ba61be9d1bb514d770bf9c69824ef
+EntropyPredictionResistanceB.13 = d9a93e2b940040d7a16eab7ea8c9f779afcb305d86b8d9c248d871f9b7ac133b
+Output.13 = 001dbabc6db87982755c00a749296be5e7e27c7a452a79d03d76fbca5b77e4641ba1e258c31016cd99d5e1c446eec41e54c00fa71e21a9088473c236010ba70a8a2a42206eaf77cb72b7eb79fc7896343dbcd753e8cc78dcde12eeb90f3cc475a41029c98f601a56fc34b40873330ceec0896b5d370950f395409d97b804c80e
+Entropy.14 = e85636661c210eaafe918fbe04e7adebcc678bb7b777cfd5e52b7cf4980c9faa
+Nonce.14 = b4cdeb3df0526fb1775e8cfc35a13e32
+PersonalisationString.14 = 6fc896b3fc0c25f1858b175c9a43669bae1137e17f6e2b15401ab44beed74f74
+AdditionalInputA.14 = 0017ba63edd2eaca8efc6e95addff94b18c18f88e89dfb34e8bb62569aa75021
+EntropyPredictionResistanceA.14 = 687d361f739d1fe25ab2b9814cbc7b782cec4211e9ca3b816c71a64fe2a8dff6
+AdditionalInputB.14 = 70060b308723d33f47ec5c621f8f21a3bba393e4edd26e686566c11e2489695b
+EntropyPredictionResistanceB.14 = db54bbc61ae2ddcb1567d451b398abe5e48a5f8241c68290b6140b654a9605d1
+Output.14 = 9f74e7239ae134f68ff780967a3b62e24d44e79df88ac6db90cf1006f4d054a29aaa937f0124f90c59aeef0094ed2665c5ed96b31a2a6688f05aa237856145e937eddd6e1142b8c2db6093949b6533b3979fc0ddd04ca68ba19182a3bd3cbc9e7dacac6805f36e4d41af18e992825c03bcd88960efddc33f3391b10e784b8570
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 3cfd0ea75d8ef48ee4eaa4cf29c5e69d07bd7c8b518fb298308a9b038308760e
+Nonce.0 = 1e2bdfe38b9ed369fefa70b3d4d9c49f
+EntropyPredictionResistanceA.0 = f63c556c14fc765478d59f579c627f863de944b2d0ff975f90822263d48d67e7
+EntropyPredictionResistanceB.0 = 8fd379f6137c498f1c51fffc19de42c05fe79f9486b3acaeb652b73119ca5a43
+Output.0 = 8e3443d66ca1bc912d07313af9533cf03cc338d812004e88d2ab047cdb0aff72ecaa4ecc574bbb8f836b5ca5943aa21cca92502ae5cb3569ff2a86bf5b04914a278b6447d1a4a7c5c8f330157682d4141a220fbe9dc1053a81954c0b5a637d2d4a6c0ea3ac92c9098f06ed3f33c5e156557f837d1db9984373a02c59aec64753
+Entropy.1 = 346ca0f6c17b79344e06e2ba05e7a4df6cd27440c959ff661a10b937162d6bdd
+Nonce.1 = 88a6d01dccb1265a3c3b83c25b208e60
+EntropyPredictionResistanceA.1 = 03907adfeee9a2b6ec8ce56f8f63b9073633e14526d6e827bec44dc33fae7f0f
+EntropyPredictionResistanceB.1 = 7619308133d8fad877ee6554376dd60f028f071d849cc79d68ed66e84e2189e6
+Output.1 = f770b5fcdc1c62c7326015d9efb8ce7498a8f109d1ab89bffd76017653eaddcad2e4aaabc414e00f00da43d585b3a9f56dd280ecc6fb25d554eec93b74ff5b776b30cc0d3e9957d44bf9fec6d3dbfb20b1f0b98a9b8418394e2dff587a0e1912ff0de854afdb3076ac969ac2cbe3112e7ca86f1740503e5ccb5e236e9f983ac4
+Entropy.2 = 3f79783d4383e0afad300b31a6708fb1422defc5c9bdf0f091da701f401a38ac
+Nonce.2 = d0e34e08d34354a9ff00d677624dc5fe
+EntropyPredictionResistanceA.2 = dc8b56b541460f31d3884bc8a386af2e80af68b6edc512dd7add6a17b9be78c8
+EntropyPredictionResistanceB.2 = 2e82239c08852e5fca2b0c1ed55cbc5e26fe57bdc85fc501161b7bb822fcf8e1
+Output.2 = bbe52897a0d821d411ac5afea36afff984aef1d8e581f2fdec7041f47e38c9dd69df7f39360ee592055b57b2c31607416360ab3699052be05591f3539282d60a6b3aafda88115afef31d7bf5f9ea8b2dfd906f302c1b328c2efb791fc9ce014ffb179b47c719eabab567cbe9344f510cc5178197b2595a1ec31fa4f28938d246
+Entropy.3 = 2e7fc17a6b3ecf2af82baaa11162d29d3e4e34f9ed6530030f12dd3cd699e211
+Nonce.3 = 79197a0db803231144df62a614411549
+EntropyPredictionResistanceA.3 = 697ce60e3a205de8b57d7b900bb2c7105fbd6145397d72351746627575cfb50b
+EntropyPredictionResistanceB.3 = 9bbbfbc2523c3374c3a6713d83288cdddd3c3b009577afa88ab28726805cd875
+Output.3 = 2f7d15efca13fcaa0db354eb40e04ad21dd5846f11a4d27c9be284eae5c6002b9055383ed0c5c04a3438b9a7f7c380f24258595cf764118b3a84a18233fcdfa4e3698d66abe8857ed0b7426db7b672408dcf454ed2729bf9fe3ecc7ffe2ff10fc83d78eb8b8894173be5a9f29850d716a945b2a6f7c5d03763d264a3f50b7ba0
+Entropy.4 = e70fef5ada7f4c12024f23f13fba50cf3ed45bdb0eda4c04bf0c61e9ae27c479
+Nonce.4 = d289f7f023a25f5e7bcefd2a20507b0f
+EntropyPredictionResistanceA.4 = f7a4f6fd7319e32587ddf6370a1a391886ba1c0aa7144e97d8cf25adfa4fa074
+EntropyPredictionResistanceB.4 = 739524c3bded3c5783b1b241335a307274ff8c6fb1c94a8b1ceb94d7991e8ea9
+Output.4 = c778617417bc461b887fb969f0bf97aac936f44abffacc7c780e3f64b96c7a649c07afce1830a38ddcf7446d0e1afd41862dee6c76a5ff2778f258bfc02267fea3cabf9f0932e5ce4d6031f9d9abd7dedd506ca9717c62b1f78891d6e5b34220a877c159690226e077c0a71b713a6e5958fb27e03b3524ed2ce6a1f0c1ed3de5
+Entropy.5 = 7342c112c2ba28961791665006dcfd3ccd17f08ab9ed0865d9530045ab07a389
+Nonce.5 = 5a1505990fa01655feef81c2f20b345e
+EntropyPredictionResistanceA.5 = 8db253c2847745baab6348f02111262cf0b49e944baa6b6f0db72c4099760399
+EntropyPredictionResistanceB.5 = 994eb5f208e9ecd8b49c49928ba9f07b06aaa5e9228cf6e274beed9f4a4a017b
+Output.5 = 762e04567854946566df1f1d95cb4ae22d1a5364319e57116e82eeccca33cdb497fee3a15b4d6f203fce1f50f1f124c9d6c3d06d3ac11087165a5cf38354d55ab1e6833f17c0d521db74f256fc2fddff3414155dacfc0626f13203389ad81af6d32cca6ff16bad9666725cb4619b40e09de22f721548ded9bfe5071031c24d0b
+Entropy.6 = 17115cd352251a40f8668808ef54b5b4d3db1bd50bca798e8061590a2dc79b2f
+Nonce.6 = e7923103ae99d579cd6e60d902bd68e9
+EntropyPredictionResistanceA.6 = 3acca9d027a3e34e95f9fcc3243c7c54fb01c417277ce781a2525c2dea4a0566
+EntropyPredictionResistanceB.6 = 89f75da65b1ed212f325d2595864dc2836ab5d9c459f8716fd64c31d3d43e0e8
+Output.6 = bad050f1eebf5e7503a2a2f7b3726930d2db24cc8795be96fdbfb6dae36ce59520ab40ddaa2c6676ec6360057c3ef167d068ad1d4ea89b8c9f3b485dafab344ae4cbbc5ec00257a14bb4d28eb0265eadaa112db4a40b37c496aae5e0616d7001d78a608f9edf52603637c5f63654a47d397a96d05a003497922645fe239f7dc0
+Entropy.7 = 34d089851a835bc0aa11d22932351c48ae285e277c6d6a48d5112fddf133fba2
+Nonce.7 = 5410b54cfcb7488ad0f10d159ad6fa00
+EntropyPredictionResistanceA.7 = 3294c1b047ad302ff9d3d34a5fea0be8f120cbaecb577cb4e7f4f650727bc8a6
+EntropyPredictionResistanceB.7 = 81473aa7812b4a5f4222d2a89b12bc143eea015bf30fa337e89d65b0924fa4b4
+Output.7 = 562c309b97895cfe5a8b3c45398d3f01e11cd953be868a74533a84297de88ca88f44dc5f249cd049901261bb1bd5aa14f9aecca9d68cdd1eed47169f8c730327a37dccce08b0f99af73d381b6a907db2b7c022bd108bf1109948795c8ca7e3bf628a391df6f7ee99ead43d3ec7d69fc35df00cacb9873b8207079b90a7d23633
+Entropy.8 = fa407ec2c0bcc6347f0cddbc9366138334072c4cadb55b722255f6d002cb0395
+Nonce.8 = fcbbfb5e740a511e39dddc57504c6344
+EntropyPredictionResistanceA.8 = 8f7568b4085b394aca4c9cc271195c7f576ccca076260731e9048e5d7be0d7e6
+EntropyPredictionResistanceB.8 = 08423fd74fd6c0e929e7bce5f8b7a5d1f16fc7e641160e13a49194c7ed7d7500
+Output.8 = 85167ea027026659058cd549e41516ab56347ae8e08b20c583b65953a5e3a922a11abb91d20b953663f694a6eca0b09dc34f12442514b64731f28991eb5db43587ae3252a185ee02b139d6bd9225bc4ae5dc40cafbf5aa69513241fed9cf6859e7a5b7532890609956c78ef6c8217ccaa1c3cdeeb9954d8352b70cd38b017f22
+Entropy.9 = 2ece7a06b1ba2ae820cf4d3ffad6cf767dde56756e3fb28ccaa61ceb25f0e683
+Nonce.9 = bdff5332c5cd86c4171b68ebfbbca6e0
+EntropyPredictionResistanceA.9 = bc915c413afdfbaeca1e2c76f7c963ca8afc2d26a162f0a67aa8e1320b14d4b2
+EntropyPredictionResistanceB.9 = e652b30fe959f92b03c8a68c838fcc28404247bb488976c86ea5e47c9d9d3636
+Output.9 = 94dfd49922746bdee9f5901e47e2199ae2fcb4cb9ad8d906828656b243f0bc431df9ffd3c5163a6aeb09d289005769673439bb4fc11a7d3fc8181e82bfb9d45fc17d1c64a0d349acc0b0f01d3b2a321f963d2078078ea7efb10a2352e17ed6464303bfb28446948c9aaf750919a8905b166582de4f5ad4ce73378a8e44942ab3
+Entropy.10 = b3618d8170ff8a501d8b95f6e22aba05bfe43a1f13ccfa8c03c120e3da5541fc
+Nonce.10 = e0d53f41b9c532704d3d376aa3821a2e
+EntropyPredictionResistanceA.10 = 4517d8fb1094918606acc994820a8f4ca6e9c93872ea44ff3d7578ac3beb20ee
+EntropyPredictionResistanceB.10 = 05ac0796120d67702e7049c33d810d7729950f85dc239ab15cd8fe30ea644f43
+Output.10 = 11d4892195dc0a4da61b8258306bbda666a54dd1d3987cd9778d5a1290a624cb598705fd3c5bca70206a1ea2a4233e8bbe151f83c834ef8abd0792e37e44beec8ee45f6dbfc2811b5f10f566589d8bae0f17ac0447485df8d8e4288888027571c894b4e46a095a0340e88d8f9c3daef42fb94ae796c222f05a1c3ad618cfdbe5
+Entropy.11 = 29565f61bfae9bbce2604448bf785c4c9dc31d8a1943cda9f2da50d1ce422f75
+Nonce.11 = 98e50892d5d515c20fc2d42c03ef9a1e
+EntropyPredictionResistanceA.11 = 08ebf1f90df75fa1f6309f146f964cca8cd30a272e1ef60659e11a73f599b815
+EntropyPredictionResistanceB.11 = 2d039a43990d16673497d0f2c4401d8e6f9beed9c83b6799e12e5d63072a6618
+Output.11 = 998bb09a5f4d95d6118ae898d9e8b49d8f35564b68dc871f360ab87232955d86bc25a881750d5568df0551d934c2140b1691675bd3bea6fc4b94527c30e593839a6d21e879c5c56cf98c3a5340f1c3c8e406a67472573b9c86e57c092131667c9f86206f2c53d3353927bcea93174ed80ca2dadec4ec8c89aa20552ad6d3489b
+Entropy.12 = 205e23f60123cb0ef4500824aebb11bd7c01aa17591409760fa1945baef73fdc
+Nonce.12 = c6fa02d19527a8e531e49b548db7eada
+EntropyPredictionResistanceA.12 = e4d995bb0105fca2a22e323f7f19baea34ad85b43efc48e4f3e46b427357dcc8
+EntropyPredictionResistanceB.12 = dc429a68b7c1551be77f08c4a6ab0e26dbe14e54025156b7e7f65bed13058ad3
+Output.12 = afc07ca78c898b2644344e62ca0efbaac032d5afc540b985e310aa448d84f1d7df3c50d193390901c7f33602e25191055c83e4420be4db2a17d921880447ab1c6fbe70d6a670f55082c6ef23e5700515b66c9f9bf4d4386026abfba1fc14e23f202ec054e56ffce7b92609d0cb5c878abcb9bc07df5dac8b3c8336736a6beff6
+Entropy.13 = d72a324fc47d589c2412279609de0670bb432b7b596be08dc9448194cbe071f5
+Nonce.13 = 8573bae2149dad572ef0c7c6fba10e2d
+EntropyPredictionResistanceA.13 = 8749ba94a215213a52caffcea046fbdd9ad9b36beb63793174e995d744b4d314
+EntropyPredictionResistanceB.13 = 1027368c7444aaaf1698b81b3a3753c4a6cd8d6a13bf23c7321880f05c926659
+Output.13 = 6b6dcf09de830339069a696206b4ba29a9b6bca7d12e380bf63f673d6cdb65ab732e4a11ae388ae6e13c00141f7e62d35f46740b8ed40963b370fdff0c0c427ae9ea6c5568e7abee775af1fec81ff041331a3257bcbaebeae7c16e8159669993ada7ce01ba15365f071b2949a7224bea01e50fc11a62dcc0240c5b54ac7a0663
+Entropy.14 = 525fec3657826de7199a541cf3ed673dbbcdcca9b2fa8a1ac820b98ce2119bf6
+Nonce.14 = 95835d14a85dd959bd7eca5bfab430e9
+EntropyPredictionResistanceA.14 = 6101baadaddb8199b9b1c2c998a733e7f695edc68baccc7dcec378f5b6b89622
+EntropyPredictionResistanceB.14 = 1cf5791b361b6f922624197c637068dcec67a940ca4b11797f53fe155fd50b4c
+Output.14 = c245e3dd38e245e84935cdb3278ac6506e9bddc817c55c1f43c87e23ef96e92c48bc944733d2a756402922f20d6baa7f14bd5b6819b91dfcb06bfd61a9488e6abc79f97f9e578568373a5e1994ff2dc31ba73f57b68c53fa258ad5e1dc2e99d6426386e5fba0b366740f09ae243ba4bda41bcd589a09ddd4f9b709cb60d82059
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = ee997dd55c63afeff72590640cce548a74ac06380255c57176aed445fa30d6bb
+Nonce.0 = be03de59870e9f269c9b53c27ea149cb
+AdditionalInputA.0 = f97f2759ae718f7495dab7490c217b94ff8d09d6cc219489b1d1ece38773a062
+EntropyPredictionResistanceA.0 = 95afa03a0bc6c7c7e0878bb274235bafb1555e47462328996019fb6177a2fa1c
+AdditionalInputB.0 = 6d72c6cef3765d167a59b5ca4803a57fd2a738a9b3df1ead1931784013de1c3b
+EntropyPredictionResistanceB.0 = 563da79bd77ea9d8102e688c5293ff6fc6d3c8da51a6272a73dfef64759cac2d
+Output.0 = 948731ba768520719367b798dea737be2f3a89baccd9338308ab4fbb656334c0776864dae21d8e05aee7ca3420929eea65353b102b4e65d35af2c60003e2132d437ae18b08234a3a28e4d6e494ccc698413e3567dfbf01b76382b3d320f649c0d9011859dfba0cf6a7326896aff04b395c490198fb91c80f82558a39c45360d4
+Entropy.1 = ddc9a5c29a7fa3833bf62a0208ed29f78130865049e12e636525b70f4d0eca27
+Nonce.1 = a43395b43d59e44f4b37942504564564
+AdditionalInputA.1 = 5a63dd2982a6d182c05ccc837550ad530056056cb95dd088eeea8015b934aaab
+EntropyPredictionResistanceA.1 = dd382def05b2788b21eb6a989150fe6804ef09196d05c895ecc31d4970332d05
+AdditionalInputB.1 = b5316a2335bdcc6c650bf9a8ec0814c5c80dd06e7df53c3a0ce2ca17d382aeea
+EntropyPredictionResistanceB.1 = 3f9c25d8a38ebe354dddd089ff055fa62657a66f9ec72b2a4c6bbe95e8b0170b
+Output.1 = 1aed6f7972d8ce0a50818561aeeaacaa10d124455427e65e42baf149a989036c7867aa9e870c9a13b90be508d8413237e850dc48fa669549924c3011a2fba86d53fa10a517530184a94c3ffb02b80ee29877128cf3858e8d96619b923104af978e3f44dda6c8621d9636a499b4be71b71365b118715aac67a2fdbee4def7d802
+Entropy.2 = d7515966271552a636d1bfc08d2f5f3a755f0f7e0df75c0fab5cb3634e8306c3
+Nonce.2 = 2cf23bafc028a8ef19930f8215387c3e
+AdditionalInputA.2 = c93b00c9fc316703eaaf7b1b7ac3bbe20ff7519c2f83f0c0e5e50e5ab3b74f9c
+EntropyPredictionResistanceA.2 = 2ff39a95f3a3c874f3fe1a545167684a998c988f33e8ab0336949f330b1e3731
+AdditionalInputB.2 = 5023dd6672cd789110ae1d39ddd21ba43885da14404f8644bd913196428650a4
+EntropyPredictionResistanceB.2 = bd9a2db55101b41f4709f107911e11c04a922da77a32a9782d70d827be0b5a0a
+Output.2 = 62be3592c816592df8aa2d65b662056839b0342bccc72830d0e2023c0e5d3b89b4e98ee1b1bea603c982ac776fba9e30b74b9f0dbd58cf66e13b949e1d9d9ab2cf1dd663d73955367483f495582fea57ef8078bb9d5b7c56a1e3201c604c12718ec8a001e1ab51fc6302ffbbdf954277ad9fd97d556fc5fd6c6ba899b10be82f
+Entropy.3 = 6c669dca7aab133a97b345f3c843628cdea4bf14c8bab80b62cd8bcb8a6e3449
+Nonce.3 = 832a34517fb1c95fa22a97d80b229010
+AdditionalInputA.3 = 92fa1117ca6930380b6256716be12d1a19b1e8c5efd3079ad77e2d0dceb7f347
+EntropyPredictionResistanceA.3 = 4ce2ec4f9f57eb94cfd2a8fea4a59840e77d1aa53d8f837d4e958c597f658d2d
+AdditionalInputB.3 = df473d768af039f1002bf2feb34b23e79a2eeb58d0f38239875d7940deb4f4d2
+EntropyPredictionResistanceB.3 = 422d76e9d7bc0f6796d950a7baf1a11f55cce61dc4fb577e9493c1f456b1ade5
+Output.3 = e14b45d61aaf9a8f594443e33062117445838455b795762e1ac1865ba2647c394d35651c4c57750263e2fc731a92243bad2066ce0b947098c8f82d1752d9ecad85d7751fc4da2e1a5fd88bd2f447803c4021d14661ec6dc7fd813bcefc94b8d01b26cb6820c4d9f58b6091bdc7434f0baaf3ab72e65fdcb2eeb8e8cee99f0c5c
+Entropy.4 = 696b9f858d018e1ea02993c191b37fbfc2cc41f2527a9f3cc54b410300d3a46e
+Nonce.4 = 61f4bea0211f465a55943730d9529e5e
+AdditionalInputA.4 = 782d3801219356993530f63f699e6fbf6941bb038ddf22ad1a84992e11682fc3
+EntropyPredictionResistanceA.4 = 1447568da15815ebfff663471d4919e2ff2438f5860327cfcc8f7fb8e434b8c9
+AdditionalInputB.4 = 7747b1d187b193affcbecf0829e8ea495b41ca32181c4a6f94650baf4cf6afa3
+EntropyPredictionResistanceB.4 = 011f2866d6f1eb0e2c6cdad3c52f9b592f8229cc2ef1cf265d1e48bf5facac1b
+Output.4 = 3e7ed114095fe140563ded98004517d8700dcd678e9457c57f46d2b176a278627fa55add21abb12e3a9d5dd9104aa37af3522baee83a9cabb983f2b8c0ec873f66c3f7e791c392155329060bd236a4f5cfd029502b1c3b67935d75111a572a5bd3f1d5a38b9479cf00d8ccc4ba2ef8564ae79d084acebc4322be128c28267771
+Entropy.5 = 07275b8c96588f17458e77c3ac3d176457069377e99e0c82d16efe1370a9d49f
+Nonce.5 = 142ef87a05a369b6cf4170b97ae7f0c2
+AdditionalInputA.5 = d62eb13c11d52ca82568c66a5c5a410efe9015147fb1e2bc76e867de24cbfc54
+EntropyPredictionResistanceA.5 = c7fce3131a34f7321376a58162a1b105fabd4c596d99c18c334fca9e03f06b75
+AdditionalInputB.5 = 693db9c2ec2a75fb7c1f8b5a600540349dbe2fcdde8fa7a74676990b81e2f1ea
+EntropyPredictionResistanceB.5 = 291e585b57982db4b4fc7f23cecea8480c3f48ae0dbd576f805d64aa76ba4795
+Output.5 = 71058f540f4c272aa0e439e4543b18f4105a7b69f9054c4cf0d98d731255115dc5630855ffd97353e94d149135625a93e546e55bf0065c824f7c128be9cab717075859c3ea92a519f4800a52bc9813f4081ca8c59061bf359abe175739b3814561cb7ed18cbd6aa7a6beb3f896f0121cd119bbdd1d9a5380f65de4cda5781319
+Entropy.6 = 8316e4fe352d9ce48458499562de554b3aae2fa2bc737695bfa9a00783edf0eb
+Nonce.6 = a355fcde3af91123415af33d7c87d20d
+AdditionalInputA.6 = 6c5b98cb7e1f46abb994f791102c3b6c1b8a98a1fb9a9d08f20f0c6324597b29
+EntropyPredictionResistanceA.6 = 674927202b20f498b6d90accdc673e12b271ccba574893b26c0a8cddc5728624
+AdditionalInputB.6 = e624910bb95f00fe1f385aac4f2db5fcdc3e901869c0d77899734deddb85f6d2
+EntropyPredictionResistanceB.6 = 8e35e4131e39acf27269cc83429225195967a5e17260878ba88ece0a2003e31d
+Output.6 = c0472e057b3430af6211987f636cacb806f4c9de2ee86c6da62af94dc8a07a9d0c9bf9f4b8c9c26a134779b044bdbc2310dd43e0e0e325810df7aa5afc35ab58c694277a2dd82fd555ad4d5c11479503f7fd9a6d8d128c318bf243c2d6e42546819f26c2e62f3bbaa26270516e5e4c77375dcd7ba98fda6c87c881c518b83f42
+Entropy.7 = ac110095edfbd9e798c372d80f9a58c3ee75623d5c98f9182688812f2021b033
+Nonce.7 = cf0fc52731338c38b4dd1610fccba377
+AdditionalInputA.7 = abee466ab1cb462468cd435b7ce98cacdedef3c7802e07cc0bb6c81b79373cce
+EntropyPredictionResistanceA.7 = 317eafcba5b733c642adf139e201ab7aa04c8534d588430ee04b75445b59c9ac
+AdditionalInputB.7 = f62472445c897d1d324a05e47e42c1f53fa5d3813fe259000eceed3811a35a8a
+EntropyPredictionResistanceB.7 = 425b0d92c12221ed2121e13ca62eabf5a9559f61a65134dfe5e12c52f6a474a4
+Output.7 = 005b3f03ad211f993b1d929f6f91bc68025a9b275f4b540b6286ea6c7545c8f90494df44e8348c219b36ee9f882d2cbfcac004614bbc440cd03ed4f661cc27e43886152d8ca0755ae9bb4016f89c3133c9af406dcf8ec8f5bbe24e2e73a9368dff1509a4960a7adbddae5db266bd73ed85050b7b842ac13400ded9cda4b7c79e
+Entropy.8 = 73b7830ee1540e903b9d12723a247f0fc783b4e0324b75a48b2fb6f7d57c7132
+Nonce.8 = bc0b6f76d17aed687888d657b7e514dc
+AdditionalInputA.8 = 0accd1d23f4c3ef0a6380ccef51624fb44c6f421e5edb1cd5f8db9fbacd17595
+EntropyPredictionResistanceA.8 = 9a3053ae26199fa43d3285013dc63b6befa3447ae0f3c4000d5954ca9f0c01a5
+AdditionalInputB.8 = 40b07f92c9a997a57d5b54f5636ed8d318242af4f1e2ea8a34a81574d8fb5de6
+EntropyPredictionResistanceB.8 = cd2e51e0deed305866c6ce5ca3c234e0360f233ba665658fd0f8639dd51155ad
+Output.8 = 7a8378497f4a941bfbc04aa0106becd2132d6081c2b9239bbf07007bfbbd920eac4a2e1d182bbf42a9f3908955aa94ae9b50b49abc11bf1de97f4ba63e6bbc62a0961843a4bbc8171d6a1f34e42811619a2f80b822c610705c840ed00a68e0347bacf67c01c774bf01788bb57e1a5a43f1deaa68dc913c315151462d55330541
+Entropy.9 = e83db40cd9a9d69572f51ce92ba085695498d71a818eefdf472d66d3fb22036d
+Nonce.9 = f8784b6fd67f251d533d50dd909c4a54
+AdditionalInputA.9 = e6dc3b32fd3e54b25d91466c32b6a6fcca57dc8fc8b16de068d09d3ffeb80b8a
+EntropyPredictionResistanceA.9 = 2abd0cbd623b49da92a1278a9dc115586926a3ab9eabcc2b88079e6026954164
+AdditionalInputB.9 = 6116ec1513b9773243783f5f59a8d77ed66492652b7f42763cec834bc961ed6a
+EntropyPredictionResistanceB.9 = b6f1b6ea8a2edf7318d73e90dc787c6816d8c64381fcdd9cd405eec8858598fc
+Output.9 = 5c937c023ccc4fe91d0a0d25f8e3d477c8b6abe9a778ad697a58bd452bce9f17eecad20ff8adf8adced97e7d68daeed7afe788260108a873b6818c68e0978f72af93064bfda81c74b2a45458c250cd4535865ccf94aafbb474898dfad18e01c26368e02e803dac0913a73304df9b2518dc11186f025e0cda40aeaec85e3b62e3
+Entropy.10 = ed6aa0b44adaf7f17b0c6ecc0208f1c1dcb6220c3dd34d4620a88a2fe32ee0cc
+Nonce.10 = caa4257d61c6bee7844c9f6f86a62b92
+AdditionalInputA.10 = 4887735060e6070c723b5d3e6e5ed4aa85ca596dafabd89a152d17932047d8eb
+EntropyPredictionResistanceA.10 = b6d8db9ace7db2431a81fbb8249f50771149dacd97e49aa482dba9e82e6cea32
+AdditionalInputB.10 = fa1e9c6dfeca6b1708415f98d4926388e62cbb6ba8f4267c3075385a94c48541
+EntropyPredictionResistanceB.10 = fe85989f39c9312331b931ada5743e39211000454259501f90176237b2a4a910
+Output.10 = 436f8b13c0a5e496bbe241a7a7e6ed3f1c168900a9ea453891765ff0e40bcd4f0c938b35cb4d074339570bcb578ece2197785d2c4768fc20aaee79f68a25ae892f5c14d97cb8422ebf24b0fe1ea0a1d06d5d7ec4bdcaaba23f095a5abf92577d73360879675f52f5c03b1c67ceebda01247231b8eb68dfe5ad4a292b03233ff7
+Entropy.11 = bd8f2fe47a8fd66ae18d5b5ea48988b7ef8966a42ede98ff6aed7a9e73806aba
+Nonce.11 = 7b5bd529da0a6c210418b4c162daf054
+AdditionalInputA.11 = 6fdc841baec51834b60344c83bfe8c63fb14b1a431f64c011199862ecfea87a0
+EntropyPredictionResistanceA.11 = 6e7c1d4df9ce9ac06cad9b3c79eeeab18a33b7bf2225fe963616ec9475c2520d
+AdditionalInputB.11 = 680e7c8bfb0dec86e3c57c4145ca56054753225ef98279a17b2014c7fe256eb9
+EntropyPredictionResistanceB.11 = 483b6159732be40675e981ac87f19e78d5ac4350d638b2649dc2e906a73c70b6
+Output.11 = ef8f39b7e7a118d7eae6aa311aa541a0d00a22969723cc7a95c9aef31519680d519720944942d3c7885e15722b12903ec36869760243f17de0d0d93a7fddf8e9c310b948d5f3493f5adfc2474a15f6e1881ecb66e777bd7d999057bb910be3dbf20a71bcc229159a6be72c3202fe4566033b95873b99e526a3995907648f6342
+Entropy.12 = 70ddbfbbad68e4d3bbad62082441da88ea7d900a379bd527bcc98d6ca8cb9244
+Nonce.12 = d7912cedeeb9d1b256b7e55d605782c4
+AdditionalInputA.12 = bcd89c55d441296a13209207500665138d1e55215f725e8cd32dd02ecf020c9a
+EntropyPredictionResistanceA.12 = 0210e900ffbe7fc09be8d6b03033212adfcce3da46dea67752d1cd4d398fac82
+AdditionalInputB.12 = ac393afdd59d2ed8af1ad2b5ac2bef7f1f93211570f3125e46d4da0e8a86ddba
+EntropyPredictionResistanceB.12 = ab0909e14d51c22706a128cf6ed7406787a32e21b1000b07adffc3a28d108cd2
+Output.12 = 16a2e12269fe36e2bb9839ffe99c7d3378872b5599ed0adc3dc514c4b04c91a38059195687c7f48424ece6c74422b866317e246f1930b287669600f6baa6ced95c2b6697081dfc84ca1de45551b54d6bfbacdc53e83018143f916aa10c0362cb667c9ae6c7b19a0234973b1d38a178cc3f793d10d4dd83aec4fa96fbf483f4c9
+Entropy.13 = a5fc1cfa489d43a7d51d980a5c3488dc9aaaebbc450901132c2f8a5210c5fb9f
+Nonce.13 = ad02ae98e06897f132e03263ec5d34e1
+AdditionalInputA.13 = 1be80a17664eb3b29eff967eb61e6c5a17ed3b1fe49f6e8f6e71464602810460
+EntropyPredictionResistanceA.13 = 5e54f81035ed540889cba4bbe4e1bb199174277e52fd02c09295e8e039d7e76d
+AdditionalInputB.13 = a3fc2c758348cba975ce35f3ec52671da011988446257e3ed907b523ffcc796a
+EntropyPredictionResistanceB.13 = 556b707ac72d82561fa0815e3cc64929225b38579bfb98bf1d186a1d4dc43007
+Output.13 = f50300e5b6cb45848784d23a11f106a631d3d8026e5993ec0dc51fe2165c117146dc8c142d39aa3a86644888450ca6d6aee64e36a040156114d57831fd7feca35b46d7c96f1eaba73bd8559256c779a846efd6c4876b955ff8b6809e8647d7d1f11d4ee6f142e34740ef742b910379521a2b766f67424af4b798526b2ec48f30
+Entropy.14 = 36d04a164b8bc1e57ab87d1de93f92b0d2bb6b414b2e8064f601e59c3a7f921d
+Nonce.14 = 79b82c563e6ceebc82c5016e2f37815a
+AdditionalInputA.14 = a7ec99cc1283a871a276581677aa4c88f74dbb259be5a6804a3bf91d65010707
+EntropyPredictionResistanceA.14 = d5aff87db7e4ee51ef233e4d72460e17f8f1433bea28aa84136994976cd838ba
+AdditionalInputB.14 = 2d719344e8948f250449506c00845f6a2d507e004daabb0efb46a72f2668c838
+EntropyPredictionResistanceB.14 = 4c390686d1fd4092e56d456a4545a7394ab88f01a494f55b0f7dc60bf196fd56
+Output.14 = 2e91fd848f1a5357d94f024dd05a829d17a15faeb2b271907342b2015a0d351f2013bb41625ae3a1f0fabe055f8c4e4ced6de58353464243dfc07689daaf8a1570c796754845cd5b645559dfc2d9d8b28c2560c17da4632376f26b333d3e825a726ec49778fc7c92d226a4990c5dae558a00a548340ed1f597d5c3e13ff26047
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = ae3773814f89660421a0d5afad2446d19b7c593e331991b27a1fc8a3ef11326d
+Nonce.0 = c024d24055fc0892aae7cdc6ad1f8102
+PersonalisationString.0 = 4a0026b9cf1f3e23017dd0eae89e43a7e95621ff662fe1d58c7df128d4ec7646
+EntropyPredictionResistanceA.0 = 85c44bfb4c0bc8b708ad9b1572d35495388d412e07e05dd216bf2f4f4073ba2b
+EntropyPredictionResistanceB.0 = 727e88f49178acb32ecb8c164c57fa4775e97083820edf1a00ba4cd3e5d3c84d
+Output.0 = 0bfdb529f27f4625f59ee3d49af203aa6d98cca0bdfefa2b68c5cb6c1dbb6ff8199560dc0528202e519cd7675afc6c5db7c2ee26030ebacf8ac91005284c86c2158a96a10a77073b265ba48cc135688a2737c2adc53bf662a93a5e922dcc26e74f79167c161d17a07cce74116a3a4b3fd3299116287760ab5bb9eddd1d6d3eee
+Entropy.1 = 9fb478ddee722c16c7ce80caebc4726a8147e2b867e07ec9a32a8f868d49139e
+Nonce.1 = b6a99f264b03f6a9c7ff5992401737f8
+PersonalisationString.1 = 7beed594d50fb1dd4d4ca8ca3e8561d9120e4ce64805b7478ad8c26347ab7d81
+EntropyPredictionResistanceA.1 = c58e0f1b61d16880d4808719c4fe45c3da24769b9786af8c4517733606ce351a
+EntropyPredictionResistanceB.1 = 25dca593193b868a04e8056e915f23819817d4247bad8f2420a610f02ec95421
+Output.1 = f44fea14f039fd130d51dee10cdd2c36fac21bd00d6abfea6ad1c5594eaf47e14d03dd12e0553bd6c119402219f4af14ea5cc8df47476d52b7528844feddfc60dbc62cd679b907cc6d9e96a66401266cb84b628a4b731d00a8db11006ba7639d07a17d19382faf4ccf27664f1b129e8f1569fc3d6590c328786f1401b14e7f33
+Entropy.2 = 9245d6a63e9dc550f4e181f6e4924cae180d71202a8d360057b359747cc989ff
+Nonce.2 = 0479ccc8e6aa74e2d4a930aec90c7579
+PersonalisationString.2 = ff24da8f897d4545e6306057a227b0c0d645e02efa18c40a5e3319102efb8078
+EntropyPredictionResistanceA.2 = 3a6cd1b8b41c3efa3d562e6e758102a06b44b10ddaf0796f19efcd73edc18804
+EntropyPredictionResistanceB.2 = 8f34883fa22fb028900167aad81b41f87edc282015efbba7529a28038c08d916
+Output.2 = 532f4645adcda54548b3d361bdfa6832ec391c3e6831e60a7e5957f77cfac14bc482b016b25a50f939fa84592b247996e17d2ded0cf8c11832d67614862d74afc937170e541ad972d19f2de3e7da718619c66b77a7283aa2e54422c348e84c9c2d8ca03fb78af64dd53e85ca2cc63849c569a7bebaf016b2f9089b8cc5201a24
+Entropy.3 = f8fa3e3a57e73078781957605bc322837d9423ada84bca69d575c9a9d6f8edcb
+Nonce.3 = 7da9d01ef575925310be8ffe9112f55e
+PersonalisationString.3 = 55f07f160f3cc42c612ae6134640549fcb8d9bd2287b1b25d342f8f7893eba3d
+EntropyPredictionResistanceA.3 = e2f692cc30af6f7a20814dabf0f9e65f5dac69d35ddb3e0c921d6a3eb92d3d61
+EntropyPredictionResistanceB.3 = cfc30451d094780b2387d1818e8512eb69cf87f3b757c42d6c74df85d7a204a1
+Output.3 = 5e40b3bb322d13c5ef4f4073a4f199e3c1885dd33697f09e5c976d121a5f76dc62f9ce116ba41082a7585c58a9c1a611cf11edf1069d16695103fc9f7819c4a888d02dd1b4421efb54388429de19b2ecfbb566bd687881ad4de79f7a20c533a06d1df80e22a8abf557ae439821f0ffec0ae5d9c52b0b75f56308a5548b8fc58d
+Entropy.4 = 5fdbd5e4f29e9882db93eebb668d6532db140b07599da0ec8c64f92b361e2117
+Nonce.4 = 944eabdc793858584dbe3296c6bfdb56
+PersonalisationString.4 = 27c83f22c74e4a5c72e25d8413f253d327c9f81683e65b19790f67ac3433f805
+EntropyPredictionResistanceA.4 = 0f625cfa89d399757e09d80125ca48b46885a3b25623b03aa2dcd02edbb93e32
+EntropyPredictionResistanceB.4 = dad22b99b23323be3bdea4e4d75e4277145e28d0154908a3b2d552f0b25295b8
+Output.4 = 6ea16cb0e42d47881e0461661b040d4686743665c5b6be6c28e382d8f601a1679b223ad2cd92003ae5f9c7b971946060a96a7eee47d5d81bcdc02973276e5a65c1a8305ccfc1f454091764e6cba803b18a1498518b1e51ed359b53fbcfa5aeef9ef67f5705d135f656dfb2fa6428f8b98ad92e82b768342f083aa29b71be4448
+Entropy.5 = 6e705e2a4190b5f4ed8cd4423617c0d91c29d73414701efbcb4d3a44d390dfe8
+Nonce.5 = 65811b02c24ce43c7aa585a05ab00804
+PersonalisationString.5 = 6a35702150ea3182e9c3cee93f147a0aa6132b440cdd4c2b1d6364bb7fc0f650
+EntropyPredictionResistanceA.5 = 4e3e29ff5d091114d48e227714e50f926a460d8b466db17b3fed33977abd106a
+EntropyPredictionResistanceB.5 = 69aba80d72e5d741c3b5b6b24fd49b4f9896455688be62a1855ccf4b14a8355c
+Output.5 = 0c35816c5cb0cd724f6ad7299421934e63ef1597d2774f241448d62763f20baf2ef33d5f45ca34e6a5aec52adad158872e03a43e72cdc8a00e293ebc753bed1b20a2c2e3e3efe822338de1c5651d5902c92457596757c5c581926e8dcfb2d8cf05408de79bf2c051501311fea4fb65838435c5da37c88454fff7104c82c39e7f
+Entropy.6 = 98f296919ec0c7cdd7cec92db69059a8415e8dbe4a7d6622aa6caca80b5131ad
+Nonce.6 = 815937d45b3e22b65749c44445d7a66e
+PersonalisationString.6 = 59f8fa52d152eab859dbf6a876288a33430fff2b5ae95fb476708d23bf010444
+EntropyPredictionResistanceA.6 = 5101bf42b0bf8a6ddbca7387fce52b150b11a475fe8b1447c04a92e9a1087ba6
+EntropyPredictionResistanceB.6 = 2f248a4acc173d8c1d8f412cf8eb80d818c742c83a4b0b9f61d26887261b67e5
+Output.6 = e74a5bd2ba4ab6fc006f8384775dcb91bbe4d89aded3b4e4ad6dda72ad1f864066c88b24498635f0453589234321cf85811ef2e624754ea49302bab8661d63c4588abf214cbe22aa4cd13461f5917ccdc995ab31495fa20164e74fee1ae62bada668da91423846503ca802d76b08d786c68fb8456da328681ffd40729cbe88e9
+Entropy.7 = 3063aeafad438bb49a5a7fbdd04637859861b0651a563bcf09065233a4364d43
+Nonce.7 = 92ff63ef0211a08749b24dd424a681ea
+PersonalisationString.7 = 2b49795b593bf62ca9c405ae76a2e61403b18a9156fad074d93abb9b919c4c04
+EntropyPredictionResistanceA.7 = 53173ef44fd4d73a08f3880166e96147ad5cbc762ca2a3c33c0613f7a8b8f1b6
+EntropyPredictionResistanceB.7 = 2aef037cd88bdce92f96b2272d5b5354a45fbfa8d647db6a38dba3a92da67033
+Output.7 = 2c175037d40bc2ee2eacff426b4365ac16ce6300de987e97863690ec0648bce2fbd870edd01aa13e4327fc8c9df6d29542f8e0a2d1e87bffc1c1b30ddac193a416aad3dd22f3554cb71a4b1d07bae494cd125b1de51b466b62b256d9898c78a697b90ebaa9dda57a24e7060de219c854f37028ddf442a86713f70c547993a9c6
+Entropy.8 = 21d0a61283ddf832704af020f84eae7aa0cc6a357cdb5d8d6aa6cf15eddf0144
+Nonce.8 = 7f9b04e900dfdb3adf6913ddde38fe98
+PersonalisationString.8 = 73d8c8ea67317c36de70afe3774fe5cb741b9e87f7106bba015532b003747ce1
+EntropyPredictionResistanceA.8 = 2ec81b7809b6ca48f45ea860cbd7da30887641238990d4e96a64005501a372cb
+EntropyPredictionResistanceB.8 = 7e7966522c8fe2d03bd112194bbd443c453020cb2b281e2637608b24e693226a
+Output.8 = 6a8ec544e76980261f6748833c8d2d4a285f69699682cc59ddbf875c873eb8299fca3fb073065977dab5535601f13a0baa00f68556e3dc641ad63841742c0ca15da2a13cf3b1b4342c7127cb3d1c0b396cda2707692ea2f70f39fddbd133cac6d304364ee1ff1af03607fc67ea4d10d4ad3199b967b5875e517912f631725b6e
+Entropy.9 = 2b2ea26e12ea862e7a15268d9df706fd910c0cc25537ebfefab8a897a2e717c9
+Nonce.9 = eaaab0a568beb6a051dfef809134419e
+PersonalisationString.9 = e9a242f637b535c2065aa3a581188bf62e1f42c7d5a53932ff8dfec6f20d55bc
+EntropyPredictionResistanceA.9 = 95a70e4394a864cb86ed12994fb6e96e80a185edb3e3c3f59e0c727ffa038db4
+EntropyPredictionResistanceB.9 = e4f11ad7b7f568cde8ebb705d15672fb658c9e93130c299243446894fbac99d5
+Output.9 = 82661e54cf5828fab26e872fe74aec6c6bbd7ae4cd704f4b31b791a9ec3ed8305e70d6dd9ac40ce1008b309c808f8c2abb25eaa7c0286b4181190d2f21d40983569d5a806235587783485c160223475097c6d09cd05cd006387d30c3b99180e9034e0f720fe76c8fee4a8163cff522d9d3986940c25266f7e13080014b678746
+Entropy.10 = dfc6b4330d471d064133c8ec3a470a8986abf0bd5bd2b56d7bc5d8a156c7107a
+Nonce.10 = 45d7b778e1b98180a007ca2b6b03e183
+PersonalisationString.10 = 458dbc02aa2bb8620dd814fc2a08d103fd6ac8aa9aef003bde0a18b609cf66e4
+EntropyPredictionResistanceA.10 = 416737614fd0e5b206bfc177c57b37c951aac2c291302a19988f0bd46eb16d0b
+EntropyPredictionResistanceB.10 = 58249d3edb787df7db7a6df001f66ac4d4e39c9a4e6bd0e754047245392b35c0
+Output.10 = e76402dce31dccab2d915a290352b1ed7aa7d5b46dc7aa49d66afe58abafe25245f1da93b51f2f4a402d8bae605565d058fe146574058f379839e40e788bdc22cbc790dfec868369d966da33342dacc61979ea86ef7a9a576f251ee1c2ee19e1bab61ca1c4d77725a78db5b920c00e207064351460c252c5e3ba2e3925919fb5
+Entropy.11 = 6445ed86aaf1b1e3bbac1f1f2d6f5ccdebd595569aa4f629408de4c7ad7c1f5b
+Nonce.11 = a1628b4cac93b9d5785059e0559a6742
+PersonalisationString.11 = 2b788e6fab6a0b5f12db1b7a24846b3e35c4ceea7ddbef6313a9dfbb8b75fc7f
+EntropyPredictionResistanceA.11 = 67f8abc13f7f4c7675b0f21331ede5b2887a01186b42e9f13814f42cebd74d45
+EntropyPredictionResistanceB.11 = 554569e9fdd8836de0f5f4d3cd11fab6777c0249818e18fda347419b3ddfd8aa
+Output.11 = 1674f8aaf84863f9f1d862370967e946520e7726975b4b0791ce88e9bfaafb200061698ebdc3fa2ba6c7f25d1abfd4d5ae9469a3ae909a24659eb856195e4a5b395694babf52d72d5204fbc8f61d8ac47cb8244e687658ab145e006c1cdd5bd58b94727c67202e2ea8b5f5d33a62a84e2433ba440a081fa47182d5917d4cadf6
+Entropy.12 = 0ee20b10e55b7ae9d01cf1b5dcbc2904754e2c6a80df20ef6c3abf39c2b3b172
+Nonce.12 = e7e920022af8a9caa690cbf4b7f2e0e6
+PersonalisationString.12 = aca472859147e2373df6cd56e7ec884d7075f04a7575dab81df424a9eaff8aa2
+EntropyPredictionResistanceA.12 = 3f041828ebbc52091c3110fd4a22e699d6e043c430ad03071cd2fd07bbead48d
+EntropyPredictionResistanceB.12 = 1ce10cee68d46fcd66446588f008d705f9f414eff3e1a31d7217334fe04e6e7a
+Output.12 = 00a863cb495ff5c09c96391346645e8da71da478c433fb3e4bf4727a7034aced0db3ae3ce2139f40bed2e7b0119df89a46a6889efa91d68807fc61eeae8b299154f006b63285efc456471ed7d87669dae46970c593f36e375a2c6454770c2cb49f40d13ca6df389b9194b3479b1d7ddec73b792ca64ad40b05640cdbc9db5930
+Entropy.13 = 06c369c58825313ca8135b714b07228cff0ec7700fff4ac8640f6eba5bb80f51
+Nonce.13 = 7823fcdd32c1941beb4bc1991f602d77
+PersonalisationString.13 = 3791253e42b0d0f9438fe015eb824021aed021b0ab9340a181958052982f383c
+EntropyPredictionResistanceA.13 = ecb9f1981568ef99d7d8cb5e0cd1fb8e87a764d1e8c90fa0feca1923484a05c9
+EntropyPredictionResistanceB.13 = bb022a61a89b59b4e653ddefc69bd3f62c23f87f1a1b30aefcd85d6584a98fef
+Output.13 = 9a6eae8cfd57e92891e36f9bfe3024103e06bc4893764c5eb96fac62e0e26df4b5f07b038d0c3df6771c530ab36f29c682309e126bb5ea5a3cbb882ddcfcc3f60be6c5d1321ba2429e22f3adcd3111962fe3a613340b627299a8ede3590816c422d682946ac72f20eb06e5c839e7cb5996a96a48085e91eb0e7ba85e28ee9daa
+Entropy.14 = bf5e0c11d7d6b511a3801efe8995875a095ef92c24a4330a8aa818b129c7e201
+Nonce.14 = 19438a1d39f7bb1de8f8abe356e0e8d8
+PersonalisationString.14 = 91231c3ab2e6b61406d01fb17c81702b5b09e5a12ee55e366e8bac1790618a26
+EntropyPredictionResistanceA.14 = e85a8605599590d4405a125c8fd22ac3b494b877379f34ee0abdded190f2d338
+EntropyPredictionResistanceB.14 = c34dc158119795025094db61017a55fa6784bb4822d4a1c13ab91673bc132e20
+Output.14 = baa7aec960a5f874414c4deebcb040e0b7a4414cc98c27c11d52946b7b857be1949c97ee2a03981e9100a588e9a8f2db3aa3ad90f17ecf1da5470c4495ab250ca5baf9fb3401135e683e4ff510e11f8c616962c10de502b43c500cae9bc91672a8913de16868f7d707ef5499232ba7aa715efc2ab35c5e18a372193660eaf122
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 04e6323d8bd245b5c57831e1c56300b178b8d6ed2162a7ddc91963b87a8b4d81
+Nonce.0 = 9da21eba131174aa84d0f8e98605f29d
+PersonalisationString.0 = 70d0d74d7c5aa048b65b4e324f3de7d2ad2aa0b82897472fc9460feac7e796b8
+AdditionalInputA.0 = e44d5262671c8331c2cda2e5154820263b6df4a7e2eb0b3ff65735d4aa332cb9
+EntropyPredictionResistanceA.0 = 979944d614922aa2f8a865a7a1a64702923fbff85b798b3e1651429cb359e14f
+AdditionalInputB.0 = 6e3bbd3a944c9a4db3a125b7a83a444c822ee2d7956f51ee680493650dc9396f
+EntropyPredictionResistanceB.0 = 8bcee4d660bba9e359cc3844859a77c7b81806de06ef1558fbaee8c35acb1cff
+Output.0 = e923a924fa6488219c80ae50a14aa261c832d2c3634e90c225921a32be8c61435ce53f178cb0e0576150b89d782685d6f0236211d8c09a22de30053db25c4b0fe9710ffb60e95e319f1f340f8522b65d4b10704b53eb97aafbade8ae5bedfb1698ea3a0b23df152046420573c7bb4368bad450e49b5e30625b52a33d5975a509
+Entropy.1 = 4ab21e78f8ceac355e50436c37688e7177ea50d43ed17079f8d92e3e98cf9f63
+Nonce.1 = f4222f0e379804f294b3d0a30b713a0d
+PersonalisationString.1 = 48fd7431baced19646dab1707a9569aa93defea319aca1a35634b140fa115c37
+AdditionalInputA.1 = 018ff747e0620f96ac4bbc30082ed068360df214fb3743b6f6fce32f75c64f65
+EntropyPredictionResistanceA.1 = 1391d7792ccf0763f82c8d499d015a7bc16e38205c9e3aef9ecb28be30f12fa7
+AdditionalInputB.1 = e531a15826ac79369fa41e6a2e6306cc11451fb10cfd12b2c002554fd47f153e
+EntropyPredictionResistanceB.1 = 52fe45e72fbaa975e706680d8ceba1b8a90c51932d28aa4968c3219d2001a320
+Output.1 = 75425a223bdb747481100c5fa66d99b7ffd1b05ecee63738801c20482d6f9dd8f4674d8f42e8c4e13f6644fcc1bcdf907348b648cee837e3a3110591377962db2441ef6e7448296f2faa70bc231a35177bbacce4c5c7e6d2e128f2b5eb8e98624156bedc005947699137a7bb59dc20abb90c2e899f16c82ec60819b836621e7f
+Entropy.2 = 6b1225f53ac0870788ebc2b3c6806bf384e5eb29e6e0c06c5bc2b781d1cd546c
+Nonce.2 = dbcb2b80e50294470aa16938972cb675
+PersonalisationString.2 = 76d0337d22156bd204b05fb1556d1ee896a827ab0b627f1f429db01415591884
+AdditionalInputA.2 = 2b4a8a5f389b8bfc0e00879c44e40cfca027e4fd5e77c2b75181abe2565c9730
+EntropyPredictionResistanceA.2 = e99534ec40567b9a017cebb0ba0f3462167266c53d127fc8e587485aa03a0ef7
+AdditionalInputB.2 = 4ff4a4dec9dcdc0628087079d6b0bde95dde159cb30631be26ab1f2c1d1d4c1e
+EntropyPredictionResistanceB.2 = d5cb4196f9d64f23010f35c6f5ef149f38a68fe7ff7263a1e3cbf0e70deebaa6
+Output.2 = 59f0b447f59cdca954141d66ffdc71787ce72a6cbc9804d021515e501d7cfa191feb91ee41764b6f006f17df320d28f3c1164d36e906b070380e83e52890cc9a9c4f5d2aa5df2843e39a076ae99dfd9a59048eed55b3e2e237bfdcfbbc740f447316fc7f0063b17f4a9df8f0d4dd6462dc7c62f8f754b11f89d5b91511ba7ae2
+Entropy.3 = c6dbd9fe1f172c933dba11d3a88b40f91b0405648a7390c02e3004241937a3a0
+Nonce.3 = ac52ef8fe01680798e03bfbb5ba20c55
+PersonalisationString.3 = a73936a92e8b84efcfa6cd2ba8b3ee73cb862b62a82ab44cce260da14c6714eb
+AdditionalInputA.3 = c1347efb00c29155f1db317b88aa34d01c474993641837f19e8454fe0f661934
+EntropyPredictionResistanceA.3 = a13d2f726c1a257a32e5eb7115fe81aab16a3d988875e22000bf2e2f9d251882
+AdditionalInputB.3 = ed41cf8fb10aaf61fb206e709f336843e70c7a56c280b5c859982ec9ab1663f5
+EntropyPredictionResistanceB.3 = 512accdb67da52588537e9409923acc2d42f26f3ec7e0f2e0601468eeaa19703
+Output.3 = fb53bc0d6db4fc8da9dd5bdeef50c56b8e9434fd8a93c6e3afe238197c5e42e2a43f302ea73929a66c2a340c4235ebec29ebb02a566fa492985d43a2db31965cba4ca3637e8d2dbd8e6d8671261eceb2586fdcd983e809bc2bdfeda69eba1f70a54ab748f09092d05e1bba60ba4926d42e5471b5fe5f3a6d11bb4cfe6617e1a3
+Entropy.4 = 28d6482f2189e08f9a15226d8241580927bb5bcd2211350b36dd8dc723ddc71f
+Nonce.4 = a97bdbb5bf690bc5e7fec57bd732d282
+PersonalisationString.4 = 182dac27f8b83d1f6f4b0005542bbe636f8cc2557c84c968dc3121b43deeef45
+AdditionalInputA.4 = c87721ea17cc7f68a4bc32c5eb088ebedf8e8e70ea1754365f03483317c8a26f
+EntropyPredictionResistanceA.4 = 0970deadf9f58523dc2fc7b47083de353ee992ad17be8671caa5c47d40519439
+AdditionalInputB.4 = 3b441cf9dc97aa4f21ee3a80bf7f10322ba7b6e57853bcaf41cc37ee24a60a7e
+EntropyPredictionResistanceB.4 = 82ddc51cebcf927058b592039a57e0bb9341ffba6c3a1aa826dcd11b3bcd45ef
+Output.4 = 7a76e82c41a72953281f056254a8beeb470528d2406a53a80ccd4e0833a5f2e8bf80f9ce2f79b4cb236f134fc67543de5af24413deef4fe53a0a5a2103b3b37c90b7eae1ca441af59bb292f0d03c52539d19034597702ecda6cad2d93af85ec10cc69d14f573e1094e6a22551f7c513a9ab7a3efa08397aca5282c60c422e943
+Entropy.5 = 476b638380c09f1a3642b1c2b668d82bd12b5b596b12ef109a0b021373ed7f28
+Nonce.5 = e177125cb5b34de733cec2a01b5f58b0
+PersonalisationString.5 = 82d66e4ce9d8b39c92552120cde8d60637a3c5aa42566eed4fb1214da6d47e82
+AdditionalInputA.5 = 18270d7f793965814787faa4a0ae267fe0f462ef516d2a48b6aa8379703dda9f
+EntropyPredictionResistanceA.5 = a2b4d565ffbd4c54b6083f55886184e07308cc544a6848e7844a6b166ed1c244
+AdditionalInputB.5 = 30de72516523e928a446c33f8e2936b13c626f453b7a45b53120a962af9dd253
+EntropyPredictionResistanceB.5 = 3b5993545156ff6d9dba1697893d898493c40157157c0f29853f477326636c6e
+Output.5 = 0757b7ef056a1955788a6a070b13fc34e6348da45066a1593ac46c98cf9dd126df7537b74034cc5706d99604c69f91e632a425e9a12d672d2b9c06721a45915c1f039c8ea0111d39b8b52442759e18264650bde2f825a6b3812872636def4ead66e421061d3e3fcf6d3e4412c72f3c0fa6d389297ebc026f1568fa9438b35513
+Entropy.6 = 3a64c45fc60f1351930155ffe8058e550683ceeb216c08fa65a5427dd0dd6612
+Nonce.6 = 1b53343a949c43569955d277faa72b01
+PersonalisationString.6 = b2af759b1282edb02201502e91ac2313e7fc51ebd0410763372b285b18653599
+AdditionalInputA.6 = 8fda86b49c064d41e16f0abb0d147719d745ff2d23995f3039e8878e26932a3e
+EntropyPredictionResistanceA.6 = 8435413a53a8824a77dd7af220f4bbbf352217ae0939a3691ad7cf3d81c631e0
+AdditionalInputB.6 = daa31c6764eedb0eccc040adf2267b15c396bf2d1ab542eedebca4480d139405
+EntropyPredictionResistanceB.6 = e1ed5c8c6b3bc640714da635a24a2150924174755b016c1c455b9238f9db9d1f
+Output.6 = 3f2fd69fad6b9c15d40e40b6b2f7717844e465cbd9c6747b40774a7732d07be9c1b0c1d2cfcdebd2202d8f6ad880e9e85fd1ae102187a5a418d9810b61aa296f76354c718fec726d4f0461b34008e89463cd07fa4ec5d61b743a234c24f146a99ea52b6d83a14c7c753d8d2b99036f800b44bae01680f23a46ce409c7a76f323
+Entropy.7 = cf6d04f9f407a023140239f009eeebd48f7f047f5d4c448a1e0c3138bbae7582
+Nonce.7 = a273163d441f26d0dcca7c8e3df650b2
+PersonalisationString.7 = d2b08621fc5fc06e49342172e67e11b920169e1d6290deb5994765a749badcfb
+AdditionalInputA.7 = 110d02ce24a1ffad4ec034f203a98e89de887499aee874faa2d867ce863bba77
+EntropyPredictionResistanceA.7 = d3b22c237f2c85513fdf2eec1c73486dabbde1e6b4da77b51f39a26730c61f50
+AdditionalInputB.7 = 04bf31756196ba0f4f4b6df17083a08abb9e2352cd8cb1269ebbbb01e8adeee7
+EntropyPredictionResistanceB.7 = 26437cdd80da72db7d18d2fa7289133128f07e63c30b0569a21505e93e0ff24b
+Output.7 = b95e255e993ee0bf5d611e5cd3d1b2a7c121dcf99a948c7ec35d4c9ef0d4694074e62597bf44b3529c14c9a32270db1bc16be7612f183ebf18e0155d728086324459aabcaaf3a4caab34702056ae5b289ccc35d537e2da5fcc6fc071031345a7766f6c2401a1f414d4e56e29fc22683a5f9a9642c7d49e62f6da89ea2d6b0e99
+Entropy.8 = d00ed4a1e9dc5f73587d402ab9e21be959e9649bd569526356c7195ac3494bea
+Nonce.8 = 9629db13e088d37193cf535de68af163
+PersonalisationString.8 = 1987a9c23d880f6e3ea464b45ade75d3337c82962cb37388194548252a278a1d
+AdditionalInputA.8 = 33b2a8e95abd163d4b44db7fef620b84398d75402f58bf54eb808393412b2a02
+EntropyPredictionResistanceA.8 = bc6940a491fb19bd39f44fa2dd42d2de30201ea3530ad776f6ca38e8dc39fa3a
+AdditionalInputB.8 = 139b16e4d50799324370106ca190c804732ee739db299fb90696302b39694557
+EntropyPredictionResistanceB.8 = ee77d9cb7182433e8636f7f466536dc1732cdfdafa481efea60d7f7d65ae0fb0
+Output.8 = 6ae4a71e14c7cf28861767b3a94501cc67c5c9a213e7a3fae24c0b37ac0395807b91312b0a33751be26617d010dc6625450d1103f7a9a0bd60482b1a2264782348ca8e6e446813a822393b78d956112a569dca9ccf0b5d4a72164427553234c66a8f7d9447a43c77228657a7902635d982ddf32a6216e8e4984bd9ee83e29e00
+Entropy.9 = 0734e59bda31c17c4c1ab5ebe3888795b23bd470b089a28a9f2f96da07521431
+Nonce.9 = 9459b5b1d8d8b2392836865f19f494a1
+PersonalisationString.9 = 6392eb851dc34006b112ffa45b2f1a8c9bf93e1b1afb476fd7fdf7bda57257eb
+AdditionalInputA.9 = d61e9b742353011d6ad9ef2b6540481dc2cd6334a1dc162edbc4abe005be6590
+EntropyPredictionResistanceA.9 = 6bf013efe12289ec0aef02da38dff3955301917505fe84dc7757e274bc9efe90
+AdditionalInputB.9 = 8f82b23dffb467f90b6bbc6ca9fffe7507ae81025d46e85c6a3ffd4f1d0d26d2
+EntropyPredictionResistanceB.9 = c6914e8079863db1738478f63667c674be091783f01b64e64af41248648603fa
+Output.9 = 215630ecc7119c8d7862a759f0a69333d7e5d377bdc799ca4d8e523bf77a6482be48445517009e65c5bc73d9a036fa548c27de99416d0530fcbc21a8c61dbb03f8145db92565ff2496aaf0ce163e2590ea1b542c89f9bc81e1db86b047754c0290ddc23257c9f71bf80b1d10ba4a944cfebff8940d9d5cd0957545fc24560559
+Entropy.10 = ff81ff63ffada12cab4e7c68c9ab56d55811bac72aca0ea5d8c37cd86d208e7c
+Nonce.10 = 26e2ed7fbf8b955da107afe8c8398d53
+PersonalisationString.10 = cffa941a2fc258186a4872911955403df4715c3498c9c55749e1ef113fb93f46
+AdditionalInputA.10 = 895cd33953eacb1949309abd160c00be096fdf3ca32642ac5f12b1f9831c7de9
+EntropyPredictionResistanceA.10 = b326b2b47fb3c31c903ceabd6150a3fccff71d5771fb8d4db95cd79e7551a922
+AdditionalInputB.10 = 38fec16d07bf4cfd47000b47754d439415a97694ee705d24301e600682a0f6ee
+EntropyPredictionResistanceB.10 = 4a63493c09f329fcf8a568af266d00806f78ca0cd839a307b41fa22943f0b901
+Output.10 = 3b5c2ce32db37f3643f8a81d05b7920c96ab9255837c806d953acdd436ba359bb81fe238e7ab82c82e763694d91cecf871befd95812bc488f5e54b3f8791875cfcc29f4da7a72ddc92eaa1196f069c3484041b29bd1b424f14d370c259cafcfeb1d619a08e5b341fa83ab25e0ec36656f73b28ac11e0b0c55c3d1df9ea3fa4a9
+Entropy.11 = e578bc93ceef89596c969ee8cffa36b156828a63eb5ffd30aaa85be5b6aad839
+Nonce.11 = c2dbbc1d94ef29ca36489ddbddb75f73
+PersonalisationString.11 = 6badf92adbf1a59ca6873f3283e01d545591b418a56e7f6c93e240b6b0243322
+AdditionalInputA.11 = c4707b7309a054d4982c15108b5ab17ce53be3fd9b204db2ecc6cb7bc567bbf9
+EntropyPredictionResistanceA.11 = deb8a4aae647bb37e32b15b979bd2126f010a0d79f5bb9ba76e246eb19095653
+AdditionalInputB.11 = 5d9c995da40bcca522495b92f4dfa7d1ade3dff3bc0d1d187a89d2147f920505
+EntropyPredictionResistanceB.11 = ece57198162c94a7ae93ee629216e65dfc4e7adb2b711a6b74ef4727f0b99db4
+Output.11 = 17e8ebc1e226ade95f3fc9d7218535f1b295250bd79ff415a0a9b7f0dd6a7d44527110e70f06f35db9fc54f44d587410ea666cbc28457dcbda84cdaa94fe1383517c31cf2119b5674a1e8f4f6669a1202a9e1a9f1ae92dc6f9e611d68bef8a24278f62da6e41804fc4d0e051b5fead90f047fcd8cb2c7f6fd6dddadcc12de8c1
+Entropy.12 = a46aa6e95291416f8e6a278e32f882e90c229f16711d1afd1aec6533701d22e5
+Nonce.12 = c3cf7d1f4fd7c01c89af6c7b9814e330
+PersonalisationString.12 = 95653e77b4b2d25362ffcc7520a740b57d7a1210e14aa5c7f458144cb7983366
+AdditionalInputA.12 = 5f80607398c1c675c775fe437794cfa7c329700d7787e04872a63c78a9ba3e34
+EntropyPredictionResistanceA.12 = 7e86db6de4af03b45179bfcc359474b71fa088752bea7b0bbb0b09275aa37f54
+AdditionalInputB.12 = d3146713c37496f3fdf32dd142615573f580503a51b3b51cb61c8fd6212cfad8
+EntropyPredictionResistanceB.12 = de97f66e2b8877b30e854c7a46b5ff7b6a8ca1ae80cade827ebbf597b5b3c75b
+Output.12 = 3ce6cc11cb0d64f0fa37044a4cc29ccf668fe95f13b2119e80c78f678344163efe9a653630675ae459403a350b75127c7e2729b83092888d7661eb752bcbad742348dfb6b27aa13b329459b24a6734c966a1852937c5c295ecc704e4775069e71422e7fe0b16f2e610c82146c1ed3449f4f7cc4169d30b224533b06f28b67efd
+Entropy.13 = 48158a90c88e7cb5866d80ccfb4ffc7867746eaab95be8ac5ceb317b2ae30cd3
+Nonce.13 = c0beb69fd56c7a7b42ee959c3fe036b0
+PersonalisationString.13 = 5a9b7f11c27ddd5d23347a7fcac6d833dae52799886fd6b7282c301d93dba6a4
+AdditionalInputA.13 = 00b55d3e0b7d23a1b999b7cb1772358320c57fcdf1e3ce444cc0db2847feb1d1
+EntropyPredictionResistanceA.13 = 705c244b40c0edb127a52b954eea81bc493933d4b9abea1ed4384560670fbe13
+AdditionalInputB.13 = 258954bebfd83e48d4f98ef1e510c8c406a5002d933c403a89f4d56d9fc2edb8
+EntropyPredictionResistanceB.13 = 178a47e49d8139c550c1a862176c51d2ae201aa9ac5738c7c1dbe566891059e4
+Output.13 = 78e5e88e69102a4c9eee58e243e6ab80070e17c57e1d83e887144c7d969639ca7e80c589b2094f28675563ff9f10c75dcf15d9e92141ebd7ddcc6bdf851d9274cded30300f1060126c46e30baa4fc77fe0d9598432c47e1869f76b837a6b53e4f802847152dc86223f5b0026b40ff58df9e2815cde216b29e13639d1f1043f0f
+Entropy.14 = 183f95e7cdc6a53759b3f27af0bf2ace1f95e8cb3b5e6de57099818a6b974e3c
+Nonce.14 = 78b103f4cb62d6c3e4ae74eea2f1cd67
+PersonalisationString.14 = 6a8afa5fe4b4d74bd4e077336dccb98561b72618b5dfd8a6d4a07306eb5ff24c
+AdditionalInputA.14 = 7c41c042c4cf254b25df4960bea519ee4ec4e30c90409b778cc7858de1626ba5
+EntropyPredictionResistanceA.14 = b9ec618bbbb5d95630f916a576c78538fb667278497dafc66bae965cc8e3f270
+AdditionalInputB.14 = 26543e24c0c78c5978945285353bdd7c1774ac67d6ce630cea201deda9ac0724
+EntropyPredictionResistanceB.14 = 43890c096bc03fb59ca93f6025d7cc26ee3a27a32227de6d76315042f51ea102
+Output.14 = 6e6bac838e4186721110f6ffb9a2b26d316b12ff27aefe56ee3ce7db164b29b8ca74497e46618d4ccaf7601f84fd4cfb76cac30d10906d61c9dac022cbdacfaf0908ed54bba87f5beeefb52d90fd52bed4d81b84955bbe7d80c6243fccaa7b26871545af88a76cc35cbce172a73a32f3c88987d360c0885890354bbe31351b37
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 0f02d1900573837284ce13529cfb02435a827ec8c83495520909f8d22dd39c62
+Nonce.0 = 77e0eed9762ff72f43b998cffdfb68c1
+EntropyPredictionResistanceA.0 = b2d8be6f1a46e9b46ed0773047129741801c761b17f4fed8e12aa45018478f50
+EntropyPredictionResistanceB.0 = 0d28a50e2fd1eb9ac67213ddbaa4e37b3fc34fe2a2ce9762c01f90018db467d1
+Output.0 = 5a9bb0b77675b2e7a6d2635871469a1610f25c87e9a63601f8c2d7f2d17be3f9d9d2bb5bb3c535a80d33bb882bc8a7e82c9d7dc5361d2a5634bbb983591b3af98baead1cb09da9bd0ad3c01fb03847d05c4216381c641d9a8f624c9b892d1e7ae520055691c90f792b5f8f38fd2e31fb49a4c74d1112b27dc69329a54102cb69
+Entropy.1 = 92326844b51664d9c955530996b4bffed65b35f929604e53d8cc2cc87494413e
+Nonce.1 = 7c5847792c1d62b6daf4a84e7097cb67
+EntropyPredictionResistanceA.1 = 7bd7651a84d2c49920c19de21e919fc0c117a12e2d8ea2a8d0a4b7c9341047d4
+EntropyPredictionResistanceB.1 = da0629b9872c95417d285e4718cb240d55272a4add4e702cfa169ff6674421bb
+Output.1 = 9dc986ae83862559be702b7366f1b1cb362e489709bf70df88523a5dbee91a0306ca7ccea124db3efc2fd198c09b9defe4f9a4b422f04aaa38328233185c5dc0a3c26e88e3b7511e3cd88389d2d4ad2adf006c495922feef1c6081519085ae92fdf82129bc6aa22594fc66e1edc3ee10bf20e8d16a3099b55ccc842a96dfaa3e
+Entropy.2 = 8ea4840d18f722a80b7f1896bec66c49569ae49b7d3aab96dee4450539ef3b35
+Nonce.2 = 74ad6a8d45476ade7f266058321e6e09
+EntropyPredictionResistanceA.2 = cef87e2712e6c6c3f15505f99d3a0f6c9f38ae6d27db2e65e82eec752b1cb3b5
+EntropyPredictionResistanceB.2 = 107c8aacfd4251d5cd4a3ce198d07958b7b5e69cbeb525fdc6b1bd9fd6942a5d
+Output.2 = 7c8d39bc4c72e3f723244dfeda95259deb488038eae29e8c1242088c8a7aae4230e7cd4fb8f53f5c747072dd4fc501c2901c2f39ad151fc5ac8d67153f96da2c0fe6e3c3122dd4f29fccb9e830a7aff800eefaa4e139593fa9066656605c5223b2f617a6fd8d9f8a932bdbc041df62da1630e4a121fe0c1f5cc8c0d940a52c6e
+Entropy.3 = e9da07fdf254194f695bdf942252d298424b88231c2197b2fcf24692c8465ab8
+Nonce.3 = caaff04719dcff2b3e118e27638232e6
+EntropyPredictionResistanceA.3 = 5b7c309fff464bbdf6407dddaf10ead0abfc0443f0e212e312a3383e2565926c
+EntropyPredictionResistanceB.3 = c8101d28a510cc370678000c9cb1d41c70e9b2e1489dc699c1458f58621a8dff
+Output.3 = 9a28a181401d3d1c6cf6f01a0a7225fc6b856f9e7dd0f1ae8281fcea5962ca1abd408c67c6807134025f330b7a5b551c6608c0a8fc8c5dea40fadced443008b693c3bcf7be37741a65c7509f3d7d416f969b46d87ea48b0e3381d3e3e4d2a37eb22292231bfa8f821603045be94495db046ae3eb84d272f8b8f210dedec04152
+Entropy.4 = c2b549f1e6e2b936597e3097d6359c47efd3d28893e9bc94ca315e843781e00f
+Nonce.4 = c33c620434d17793a36ebb18c53884c8
+EntropyPredictionResistanceA.4 = 552468ebbf10dc59423e149e2705f8e5f3823ea3ba69d7a107921d0e4c6c4a09
+EntropyPredictionResistanceB.4 = 0ed1e14464eb23faf6cca0687e7f5d216ec549e8ef95bd6c70cd904ecc281896
+Output.4 = 6e927891fa8302d86099c841e9f19f11abd043d2920dfef14f4513b9bb21a1da98b5861e9682e34de1e56520a33d2b5e6cdf52f5df0d6d9ce54e684143d3801fd80bdaddcbe782fc034a8ac07cf48945b43580e6b1788222c2346da47ed0fea53d4ab741a67889a236477e14b75d1a83e1df3f8331b663a0f5754e71f033502c
+Entropy.5 = 07eb0c353ddd4d32f83d3e9f2a9cabe52a2cd9190aa7908669c006495abee8a2
+Nonce.5 = 87224aab8b81c255c749f1a79150bd22
+EntropyPredictionResistanceA.5 = 49880c760e1849cea27bd28696c51af057cd274cf5658ecf9ff658c54b02254a
+EntropyPredictionResistanceB.5 = 99d98eff45818afa08717a986ea7be6e835999830712bb3c3ac3319ebd861715
+Output.5 = 0ca61a9889edb08ff0d3de0997914ea3b7e7b7c9404777311b23afd068429f45be400dc4e1424b860958afc7865769f5077c9a754e30feaa6214081b5bad90dac088dcd5d3b8362b0d85d9828d97c9a999c9047143db97d0fd7aa9339ebc96f6b710e706ecd8b085c78d57c43e0635ffedb5200f17d43a25547e8d4bfb032a48
+Entropy.6 = beb62ec7acaa1283d9cc9e90917ea4306b17ccca89d59053e7d92e583057d419
+Nonce.6 = b80eb0c41ffca4dca52743f64b15f4b3
+EntropyPredictionResistanceA.6 = ba8684154dc279955a2d9bee911696b1436628c3787f068626839235a6381bb6
+EntropyPredictionResistanceB.6 = b00d8509c35b28458adae4e1314fb56709e3a5f7a823450001b50d05d577b885
+Output.6 = 365a58fb7b39fbbea15aaf530ed7c7714aa724efcd7b8280276edcddd522da54ba6feef9003b574832f79a6e820a434fb990e59b421d65753efe581107597ffb4ccace123749bf7420ca40759fcecf45e0941bdb66d329e0b2f0eed09a7da903d646b4fb226b350c1fd4207666a833719dbbc357524f906e3e324d71bbaf3e33
+Entropy.7 = 290ff8ed1f64d07ced03a7e11532cd30a76a8071b406395d70544694f46563c6
+Nonce.7 = ed369bedb4f32ceb209b04843feccdcc
+EntropyPredictionResistanceA.7 = 678f0ecc2028f42b9dc0bae93165857f954b5c7ba87b85a20611184ff6c3e4cf
+EntropyPredictionResistanceB.7 = 2b29b02afc05da0df6cd7e5a1cb2d8d831612702ae6136bc0ca16d0d52f557a0
+Output.7 = 75074ebeaf71e3094c5f7ee87de20735d6393b7644cec8bbf10fadc47aec31b1a4e9d7063cdabc02e978c4980cd2e6b51b4af2b8b6b6541b668b8cb6018437ac63bf5fd21a2fce523a308db089db95f7dea62f432ca19e50f697d7bf196cf0654db08eb63fb41ca018dd69de8a9dbc3afb9a97662eed1edbb57e4e6951d68b39
+Entropy.8 = 4733d0b1a52492b6e8ee5fd5db4fb093b70b613cdd4aa4fdc775de528027f351
+Nonce.8 = 92a4ac3c8dd0e6f2a39ce878098039b1
+EntropyPredictionResistanceA.8 = 78848116a068f990d8a2e1d0012eb7ee971855b27c338c58b1a1237b9fa3a322
+EntropyPredictionResistanceB.8 = 1ad95d02bd5bf9831120790704e8658205134c2f803f8e2ebf67248728429870
+Output.8 = 408fdc74ee5c68a7eeba73112a7e79d35a62078ff1cd190f19a03ad0125ec9708b3e282c871d24989c09f8f563149c7d35760d2b7b6af2626d5707641e1ca68e34af075c839bf6cbd86bd77d97c50f1018d6cf2f76fd2e1a19e7ae2f10f88cc2d99eccc7264a1ae272a784b4dbd805169c898ac5858f9f38b6e8ab64cf922f63
+Entropy.9 = e4c64148993dd7e85a7025e429d7facfaf9202984389fc464eac7c8b6ca1b227
+Nonce.9 = 9259a31e87900397784de133c1bb2d08
+EntropyPredictionResistanceA.9 = ebf9b798e1d7ef2a2eacb88da1b2e0b80cf08f0cea35b4c055e2e25c429cb4ec
+EntropyPredictionResistanceB.9 = a4b6b5e41b34c7ce5f4a47dcb92e713680cd44e8215b144e2e49742a02a59ae2
+Output.9 = 876d206925e81984942fae7f296414d07f425b4f8e451a2d9443ec9f5748ceafa17c3bac1dfdc1094d606b5d15156fd016ec05c97a11b0dfa817e31eb964a484927b2d575b7146702f17597c4f5642dc455c01347583946da2b385a356974ea68734eb6e05b787ea6000dd2cf3b8625a3c1fb096dc6fcfd651567c620bff5632
+Entropy.10 = aef2a1a2a8fddfff31ae5f2ff8a0bbf91ef46cb64b190d6d2261c0d7cd114f4a
+Nonce.10 = b7bd224ff1d54ca48ba34a28fef7175a
+EntropyPredictionResistanceA.10 = b42472ea9a081289e11bac69994a21ba56eb2d415cf9e145094a17e4c5bb69e5
+EntropyPredictionResistanceB.10 = a79979823e8fbebbbb0a9c32139aa29099859c312eb879a48a735bcf296a4642
+Output.10 = 305e886c26d79876a8f9352f7f5f847bbbae1d3a4e5791677f6dd7392ff8e39580fdfd6c94c45ba20495f67d50c47316e9a00ce1c2acd9e76ebbca4b70890b599140b5a9ca874ddfa28f5092d55c159881e94b80e0e5c45d6f2a16677a8db6bb471a98f6e077eec6302c9151b480575523991f565d907c5f84d7514e19489fd4
+Entropy.11 = 4bf6886beabe14acf504ac3230ec4f94d3d14efcf38fd45e53268fd41e96d247
+Nonce.11 = bf4178884b98db9262f03214246632e1
+EntropyPredictionResistanceA.11 = 59ef99793ac604e00b247f6f353d5b7dd4c32048ca207b20c3ee0e3cc57332d7
+EntropyPredictionResistanceB.11 = fafb1935b9c9b8c0fc3bc8444b61790707b02b206af6970b4f278a476063a83a
+Output.11 = 4755fa9e400e3fafa69d6e993ac01a4a17a2af26d1c536f519f87b82d998011a05a400f48bcba6e45cd52e748b340455a0181319d40cd94bba14b87b01f32fc2d7ceb69f209f9523dee422154180c892f43f6a5d21793370af4dbfcd127452cbbb04bc93aefa529bdeebdde87c4143ebd8579d29073c5ee3104c064a0e4ee26f
+Entropy.12 = b82cd24ef09b6b993a43a2877dd15518cbcc82cb2bd093e56fa8a608d381881f
+Nonce.12 = 913a88935496a67828a1a0984dc972c8
+EntropyPredictionResistanceA.12 = 9e2e13fd01bb35b891eca16ac9bc3a620649e578a81c81b271221e1f3fe1b851
+EntropyPredictionResistanceB.12 = 6f485101605f0e5b6486303d644c06db12e136fbf1e45178ed1c8993284f1e5a
+Output.12 = e78a05111abdcd61f465e570e36eca2076576dc1c983601fe39eb2da5adfdcfd3ccc8c49882ae59bdeb214646aaf54e7bb49b71ab455161de597449a6ee1d8d5f7cb9d4cad026d724ea2a002973225af2be0cf9794a347ddf75b17daebc2454f3c45be2ed7b42ed112a0f22562f8b079fd4fa512867d41227303eddf089eb60b
+Entropy.13 = 95ec7e4e56178347d8ebad3e3d067af641eb6c9ac687d16921775689960f0424
+Nonce.13 = fc6e42176ce23cb9778c4b4ba6f7287f
+EntropyPredictionResistanceA.13 = 51cdedfd13e48c3b76d3e40fe528b079b155b26f89d0b57afe524eaee2b8ae4b
+EntropyPredictionResistanceB.13 = 3d4825ea7573f3f6d8ad78faa37b952570c8c1bdcb2528afa18c382d7a6f99eb
+Output.13 = f5dce846c4a8b44d0cb9a6265371cb1f6de7edb9f71ac31ae98c473749a8f824f7674ba3cf79f16c3bd710c95ce4b669f45ead8df536f65501aa2ba1d28c778bccbd67076aaf905ed21119d273afef1e9f95faa271138480d26e613940096b48242c417cbf3331e715532ee57f352e4bb3976390ab927691da10be665f1dbe25
+Entropy.14 = 2662342d7856d3813415505603c4d268408c90c5147e9745b36a4b90387f2a8a
+Nonce.14 = 9ebe357615a2cc1bb728d7305da0b200
+EntropyPredictionResistanceA.14 = f9137382d5d38dd30beb4b9d88b0599afbdafeaea4278497c8b154716561352a
+EntropyPredictionResistanceB.14 = 69ea19347f2835418b94a7b225b0fd96cc38ea515c0b45e157640196d90586a4
+Output.14 = 286a6850597d79f579b46de79cb35add9ee64beaa794be36ff24dfa49d9d1fced1d4e4fd49e35404988e8a6375979ea1aeb5474697b986d6838d833afa02cd4be8b412020da3d11beb5ab111e9016015e77e1aa0b64975592e0e260390e495c3d69c827ed2fb82340bfd1656dd2defb66d69a287b5aa7695198253908d83406f
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = cb02bf001bef277799da40af3d58deaff905f45725238cd6d26eb68f2b5e5cfd
+Nonce.0 = 5d0f391b84c395ddc9d54e7413aa455f
+AdditionalInputA.0 = fba72b12360d36cae3ffcdb2c0f72b64e6d6fd3546ef81910ff293b16dcaa93d
+EntropyPredictionResistanceA.0 = 80e0c98f769e19c79e8e305f53202b2d04aeccb0581df0207507d45957916c5c
+AdditionalInputB.0 = eb498075fb4d2016abe566cc0a451ce924c679091587adc79b60e09d8543e9d3
+EntropyPredictionResistanceB.0 = 709b41a82a0154197db6dc0bf1ac1c14579473debdd1b1d2483655e97ce51f51
+Output.0 = 6ff2f50eb45a76a206c816e5991044693e53d100df13e2426454c27f0668dfa9aa3fb4dad78d60712e8335436342d367ba48f8f09a5cef06e08448d23f99025725f094cf97fc8bd2af61c0299bfabf6aca415e84a6f10889ad3c969423dd533ac6a559c38c66680392adb3adfa4481b48fb2420eceff684ea12ee46e04a27259
+Entropy.1 = d2e29bb03d6bc1c025e4312fc96ff7ae0ddab1d0a78a8edb4e9fa91b48ada32c
+Nonce.1 = c207d1fb04765414bed32a59500567c4
+AdditionalInputA.1 = 6747734d7fbf419b3da288116ce76bed513d0616b3e44f838b47168613efae41
+EntropyPredictionResistanceA.1 = c746adfa1af0799191e80fa6b7dded276f78055437ce5d4cb122c9c70ce6e629
+AdditionalInputB.1 = aed7bf9efe470af27a53a5016e1996d4c9603a47e5341aa131a01efadef57876
+EntropyPredictionResistanceB.1 = 92bd4cc793012b7027d20126a2df0cbcd975b0b3694b7b7371912fd80b2b862e
+Output.1 = 50737c6ec1940f4566dfc3a640fb247b39e688c0e369a065081a6a70665adc32252f3df0236d3d945f58312a1fe9f6ef592ccb8a9dc99bcae1b51f5423827b95c362cadb8aec9dde0d8d9d2a8a00c0989ef365f1e77635007cacd1f08460e35eb5dd2f5694b44edc854e2d5803dd9de8e8b3eaf9417ae473a04f2faa172eea5e
+Entropy.2 = 078da8cb66d18e036dc0cf0d8ad62c814477e13ee20f75516716c7ea40bb2c37
+Nonce.2 = 928aa498a088ae86e62b17bff21e7c70
+AdditionalInputA.2 = b2f2c66df325246e851fb2d07db1f6a770681ab3966b247fa89a46863c164591
+EntropyPredictionResistanceA.2 = e6e0b01f7961067a393ca0ea39fec3c0ec47ab68c743fb216d6e9089154b06bf
+AdditionalInputB.2 = b1ccc0e98597e2139bf490e5ee834811a6d5af32fd15b070abb7dc5a3cb51b02
+EntropyPredictionResistanceB.2 = 6f4379b441910879d26fa2376cd007b44f613ab9a98c76592e007f2dfad956d3
+Output.2 = 16b13c3e7fdc050b70959bd58bfa415796838533f17e221c58c581d91d03cdc9e755f43a4713155ddf2cde6a8ce212658c9c3edb8e33ed39304d4e3f1fa0793cf915a7965c3ba8bfc569eb7286af63e46b41a2e8c949f0252b81ec6be1ff84596a02d8a0df1aa89007ae729773f5c110c29fe1d8f83de85891882d8e0ee75764
+Entropy.3 = 84a5e5ed7f62a17f9f1f5bb998f712a3fd8185c01c6f8d70e83e28f8b2a028fd
+Nonce.3 = 2e7cfb68adb84ab46ce2cde6d36e750f
+AdditionalInputA.3 = 1d8593dee4e626c6f334d40d245820bd359e99ee76275c3288dfb5b2e7c5d6f5
+EntropyPredictionResistanceA.3 = c951ee74c8e6f25f8cef3531943d27a532be29efd3bb21338b886f6499144b59
+AdditionalInputB.3 = 48051b30622b7e5ebea896e469109eb983cb06ebfe30ae83aa6f6a5079658cc5
+EntropyPredictionResistanceB.3 = b6a2ddd60cb801c067370017b46cee7130e2ad4238c00e1c130728a351b6e4b3
+Output.3 = 898282a69ef9e0036326471758417aa74209f2007d1dad6e403e29a8b47205ed847ac8f3e2c506d094b84834ea7a23f4eb8c154a1a48936bb0d26046e1190146d9d6729c4f847a1c8d65458a108ecfd07efbcc265f425ffb5b8584faceb7e42caba4ffe115f70ca1fa0e3da2b2d8968c21b3a22f694f2ce2e61806bb21b53449
+Entropy.4 = f1f2e27f3a9a0c57a7f923cb57280109853f5930aa47b4a5b22b7e77db111bed
+Nonce.4 = 64cadac208abd7c3bc8fbfb5e18f4390
+AdditionalInputA.4 = ec8ba356f572327a41bd57fef08ef57db76477e625539bd65e1505ede0a3cf2a
+EntropyPredictionResistanceA.4 = 42da020bdc0e220cb314f1378cdb90a8b06c6c0503071dd871f8fbd67ac33a06
+AdditionalInputB.4 = cc545a7d0297462e6334b0912ae0a075ea67097f079a4bd3d8c91d87ae057edc
+EntropyPredictionResistanceB.4 = ddbeef68fe0c4f0e5ec55b03dd936a7619d0fbe25446df6df9354a0464ca1cbd
+Output.4 = 464b8b4087ef5c1b15b043bfc31a19f732804a44ad85b0c998a7fa17c29f1dd6c79fceb074492b83eabce3cc644c6520a02d207b359f61c174b3a722a329aee40f03ebfeda87fa84a92493a612dffe9a1e9fb1a982ed0bbd1edd6451ae731b80b46051c08559d006a5bf3df405c9ff5217ed93d05197e234a9b191dc9fba8f12
+Entropy.5 = 546fbdc2eb16d9f55228ac35c802d42be86b227cf306848ccec1660af81d2402
+Nonce.5 = 2b899056e20f05a3ee21bc3d49c0d5b1
+AdditionalInputA.5 = 431c1023ca088ebcd665fa3f1d8f697a46b94e885cb0ad63f3fa3805cfb35503
+EntropyPredictionResistanceA.5 = d1d5df8c29d9c3cb376e082b970062116d4b899ababc3318ed2259d50689362d
+AdditionalInputB.5 = 64ea396fa8383c637b928d6193d1b2a10bdc7cac8dbd9bd116922d0042ecc97a
+EntropyPredictionResistanceB.5 = c9207f255c68704c1bc8fad4236a04fd948d6ac2b47d797aeb4d00cdff58fa78
+Output.5 = f5001f8747cf6336290ac9c1702bd15be34ead40d4c07f8dcd203baecf3643a9153a051112b06d292163496fbbbeb4e8976dad8b363b8e09d352d459a87445182117365c0120fd0c0bbe1d3bc687d268e9c01dc6744bce571ef301d4bd1373e665c38b528e45a407e53cce442ab8ecf5483431cf6e860d01400de665efd1774c
+Entropy.6 = b378eb07b287facc4cbbdb50e3441b20b77fa53d5a57cd69a94f04ae27fda3d7
+Nonce.6 = 2ec5cb2940f9f51cb1a612f92989fc48
+AdditionalInputA.6 = 53a985e4365401aa29751adec27c553040f3671cbca31bb2335c012b52906bfd
+EntropyPredictionResistanceA.6 = 215471d83f1996d7836ec5290b59b9d766cc0444be8d3ed158410255226e813b
+AdditionalInputB.6 = 676a85603bf7da7e0d4cf1fa950fd6eb1d29dc29f185a378365c0a9428debcfa
+EntropyPredictionResistanceB.6 = fb9044140ad0d5d13cf82b475885ca3073e439a7fafeafc4468e08d0cc8695da
+Output.6 = 0341df51e22a3a7a2b3335f3d5a809ff03a7fe5920e5449c79d181ff975625ec3e1cc273af0fdb4ac7f0a1602b05e8cf81061c80d848d7b75ed239c3dce300d89b13eacaa2ddd041fb3abd6d34100dc2dfd3b3333ec3d4b49e3d2a2789fc58d784c52e60d1659e0bbc2337b4839fb711b7da864475385cd4da6b17413f4f8cfa
+Entropy.7 = cf4a6b5d89f70fa5df2dbe0dce225137aadc8864016439a6c9b4bf8dc9a9c173
+Nonce.7 = 99599e6f9ba8b8b88a02c968ce462432
+AdditionalInputA.7 = ea7bb97bfd49d4cca7fbb7313928b36feaae42fb6538789c480a854190c430b8
+EntropyPredictionResistanceA.7 = 55151675b4a19dea17e40d6163009e817ff1a044cd5be1ad2cc379d11c9fe43e
+AdditionalInputB.7 = 1e363db0b2f178effe26d4276833aa7894f4cb57e5220df9a8e0821b0da95c38
+EntropyPredictionResistanceB.7 = bfe072c0582bef302538914a39ef52360799ac52190a8badc02cfe4866d275c9
+Output.7 = 21adb5ee978506da2732d17ee604020e7a5159c38dc4db7e40a8f4705410ab03a78b6b6121baa580a0ca09b9cbc1f64e020143a1a5f2015cbc80addd8a1e45fd81bf54697cb422e68f579d40ee6c2eb4f59dccece74bf28abe8c8c12a0a63db5657fbaa72d3cce6b99c89ec6c2d6972ba4e7c19992864fb1aa8b448316313682
+Entropy.8 = 7082bc59e5888e2c788e666d8b7cf23303ad422473cce256344acf9f24275d99
+Nonce.8 = 2d084a3813fb9cd6f794585bf64d459b
+AdditionalInputA.8 = b9f5d497607728483ee62d921a0d633801aa1a512b42520585cb1cff8633d516
+EntropyPredictionResistanceA.8 = a3e75491d213989f1610d94209e4157e2fcfb06c8a96cef7fbc9af76c083689c
+AdditionalInputB.8 = 8b270bf5ea626830386ebc117fd2c394be62059d14f51bcf7c7086fe1ce20085
+EntropyPredictionResistanceB.8 = c80409970b36fe40904f609279efcaed9b74fefeb58fd323b139a8f0763a414c
+Output.8 = 73ace6bff0fa330889f0f7b9e6ed51fde370f806c8c2a1db834890ee56de8cd915e46185c2be1b51ee0bd8f2ef662ccd0edb3d4918c7d474ea31e44c885b00116a43d6e12a6f84afaab11221be000346f21d7875438d3b117edd408aafcb478e17cdea2d24cacb2830efcdacbe007a1f455724ec50b0d3bfb84bbf6c41912845
+Entropy.9 = 970c614f083aaf78bc45ec8de09f3b1d2ea7ea69a3e86fcf35e0159e38beeb4f
+Nonce.9 = 12e8ead8c120c30d384f96b746dc5e18
+AdditionalInputA.9 = 697a7f1d9dc066f63ba212179936fce1eee08a87148b2401d07bdee177e4f8c6
+EntropyPredictionResistanceA.9 = 6ca61d33465647fdee189b457391f9e471133b26c2cbae0441f7b99fc1ab51e1
+AdditionalInputB.9 = dcc1b6001d10dbf02647f58d0c1eb3a7bf83c0fcb707705b56186491e9b84001
+EntropyPredictionResistanceB.9 = 7c3e2f70a2f9d73cb0be70490748461963237c7f2d988427bb6346469b7db598
+Output.9 = facba6d319f2dacab22cda48304a0bf0a3b0a83961b033c6585915c3265c2418b0b48a854556f987184e9c41a7cb533165fc850d24bea5a2bf247827916bbdcafc4a093389367e0f7f223452da05a9f855f00322a78133415c7be88fc1abcb56c2e1fa9cae4baee6e539bc3f5751f8a2f82d9ae5d2c7360992e2b6f264e214c5
+Entropy.10 = ba518caf49f7f13a94d090101a2d7af48df8857f8aec5cb295422fd4a7069996
+Nonce.10 = 86c3fc10f1c180d4e8e3c7a4233649ea
+AdditionalInputA.10 = 169a1df4f754ef4304a6d47f7a45405b1ca70323406e7b8e299b024b1e159d43
+EntropyPredictionResistanceA.10 = f18928fc1d616012a17ea4403dccb8a3617e32b5644cc48548399fcfaa585a16
+AdditionalInputB.10 = 6608efc0eb26143fa210eb39a955dd9d96fbc7ab559e137217d2819e26c8e408
+EntropyPredictionResistanceB.10 = 1c2683e90fbc484d45175e3c3c2934c6f485c409c23b32a1e0f8fafcfbe1e48e
+Output.10 = 1b7e50d09a93ecca6f5fe6aac62341e731bc4666cdee2e3b9b4a6522522d039a9b3fc53a7e4298a9ab556c2d1fffee69b9c2dc75943737a1dce9b705a312e4512205698650f4c26b768f33641310d65dd896b86247b4c43f62b455a71b7096fda6b6550481cf80ebfc3a7fd3a8003a43cdfb4cbc6d09758cd995b09c9c937291
+Entropy.11 = 4181bd7b888d80dbdbd845ed533f7ed8b046b3c5b3423e9cf19a6ae9e15bcc17
+Nonce.11 = f4382992df3723e59471f7f49d36be50
+AdditionalInputA.11 = f1d8fa871165c4aed8f505af09690ab31ee5087d0c39831830e50650f2c1ffac
+EntropyPredictionResistanceA.11 = 467ffcafc25c7ee256b8926c4ca16aa7dbf9130cc4e027b826856a109ef2699f
+AdditionalInputB.11 = 164e6279d1a76d08605cf0aa607cca0bac92ab4a059686d001f64bae1f27abf3
+EntropyPredictionResistanceB.11 = 6f8fb2a29ad1712ab89f1055c339d49b3957bb2995a036fb7a3c98c25dcf56cf
+Output.11 = 0e8cb2890a896710c1aed84d13a5c81a1af6cdb40ef0405552cc130e586ad47b9b6414942af7fd171193ee07aa2af55456a3d8da780b948e5faf6720f8816b8b578988a6f4703a2cb80dbcfe7eb9876f1e23c29040ff83d2214e7e50f5fe3d360bd91d3171be1640fd3953ca85f7421ae971ed2e0b492cc46e97706b66f6a2f3
+Entropy.12 = 1cb184cbbe3a2d901bfdc0c5aa13e484c9290b1b7ced4a1dfe4bb6f29b4e73dd
+Nonce.12 = 2bd00954281a67a74fe7642ad1f2cc9b
+AdditionalInputA.12 = 3ec154e5a4deec94c8d8f12411d7513147e53d4ec1fc7d661aa64db403039e6e
+EntropyPredictionResistanceA.12 = 5c869f4fbed40fabbf200dad051aa63654ece602ba1b7b5a55fe80ac7e5ba914
+AdditionalInputB.12 = 1750ca1d7baa238578522436525c3969ec159abd8e524078966fab9b0d298ea9
+EntropyPredictionResistanceB.12 = 2c78f047d63e5f2fdef77c50b09e75a6c3ab748dc27b96c81476692215f07270
+Output.12 = bf7d7a82d9f6c7a3f1de2d567bd98dfd25ec565c1761daa2efe2bdca08c2071793f24f4250cb9c3c9b7ac072f65244754589bc823e4e036a2cc35bee97eea8a7191f592fb72064ac5a6cc9c196892741c0d3997f14c2113b6373040f8b2e55c79d24a67b664f2d1745bdd84844b8e9b6835cb740a645b06eaea09b88c00acf7a
+Entropy.13 = 164cbaeae689ebf574f08963efc8bcad41e96ecc7caad698e792b37343619183
+Nonce.13 = b78dec4b5e8bff018fbc3a7134458a91
+AdditionalInputA.13 = de4c262a70ae1b82f67792007b80dfa6d8a47acfe6077d2a6e6725931d77d381
+EntropyPredictionResistanceA.13 = 5e9ba70eaaa00da98baaece13b88021cc7d4b47cc7e2f415eb36055a0b2d63c0
+AdditionalInputB.13 = 068c422df7779bde0d52af7913257819445451379ad56f371e0070b04eaf07ca
+EntropyPredictionResistanceB.13 = 5eafb5c765b7a6de517b6356ccec5c37d3687aed4d0009fb5ad9a901be7e4945
+Output.13 = a7a7dee958f074891ea0a154207150149291aa3c7b171ab24f69e986166d87a005080ceea579d32edeabbcbbf99800a1c4ee3afcf7ea8cdc5b54c0ec6723ce61d787e1bd56021e15484acd96c310b4d1dba9090835febbfb5f0f058147612a698724d095e1e09c0e850132315597ab20004ce1328a959e0cd7e79cbd0b04dcff
+Entropy.14 = c88b073e98238c744f9b829889251b936f092ef1060c2d3c625ff6a60cb6fc26
+Nonce.14 = 99739b79a01a18e4bf0f62d23a553e4e
+AdditionalInputA.14 = e0188e248cc8efd75a004da8e50dc6c56b4455dcaf34f9f941af87e0442f7f98
+EntropyPredictionResistanceA.14 = 6e5a4ff55b7f7e8455e338761f1768f5f615e9d0050946f9abdc9db8bf9218e1
+AdditionalInputB.14 = a1da7ab029d308bbfba594f19fac0432c9dee45eaf29a0ca597551f5acd43489
+EntropyPredictionResistanceB.14 = d35038bf0b57e10bc7ac6b557454f6400fdafc65711ee3c6ada1157ddea5a778
+Output.14 = 8a61a925ba49a4439a20fb722b2a8ef02f661c929976546719224631095415b727a60b6fe4ebfb80dfb0b3b62c7b2c6a1f78e1bdc1fe8d02022eb1ec89e4b6e1757f86a68d5e40a59e8d2f5bd0186870ddc3e3c993139e7fbfe301cf94b58c09da46bb90f48b5a2f429495d630f718270a0a774c80b5173d08a88c0ba2629a13
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 00f05544fe605e0f78df78574f095d18fc6994e24c40141cbfd9f54f42f86246
+Nonce.0 = 45ad317d1571964bcb780fa2d40f7189
+PersonalisationString.0 = 822c6eddc6b4527236090d89fa62816f54aeb3a4f26e76ccc6a908eb1559e78d
+EntropyPredictionResistanceA.0 = f6b6513322a6aaa318a6437fc8a7a1983718879f3a87740d8e5830b5de1ef3cb
+EntropyPredictionResistanceB.0 = 623f4f6fabaed722a2d9538d5001b9cbe6970eec19bcce0bf9f67594d0fef9c3
+Output.0 = a4068f1e3cbdcc23949f4c0278ffbe20f00cd5155ff5b7f6fe73378705aa585b9a5ec544ab40bd464d28accc183fe623ff892c40d3cbbb577e71aae48c9591cc6c702c8563ff1fe9891c6530ceabb8ad324960d3c9702ff308ba6e85711d0e38509f6ecf0894afb8a7038e4b740b19f85cc0dc6b6976c0ed7f6df6db485c18a7
+Entropy.1 = 42427359ccb3bb4655163427726d0425b7e81aa0c36efd12991513414a494d2b
+Nonce.1 = dfa200bdefd9e53fbd1a2ff1c205f1c6
+PersonalisationString.1 = 84cfe2eb9bbc75dfb42ef124bdc56482c446e82c7ffecbd8fb51df92a95dd38c
+EntropyPredictionResistanceA.1 = 0b741b5193b4e0eb7ccdf8d6b5528d5ac92f2c3c0e1b1bd2373d43b095f72fe9
+EntropyPredictionResistanceB.1 = 6c0ffcc8fc632abdc1549ce827df9c278f059c6e7181b07f24ad4cc51295a2c2
+Output.1 = d105a6067bf0469e70bca1aaa0a498ab3f1227528d0fa8c7f0b2da79e9f19ff59f6a3cfda65399594c13cc99112224e505f95511a7b59c87d6e4fadb945614b9259642a747f2803b2f1c1d9851b10cd0c2f10e7342356f9a5005bac3d0a3d0130dc3cc1ffcda6ef5930df02b0bb7e20498ff57cdb7439473ccefb9c4c77b420f
+Entropy.2 = 8beec8982bfeb03a275d3e3e2ad5dd93f25012c37335d59bb4b8eb33783e793c
+Nonce.2 = ead41b066fba58f23ebbbf280691897a
+PersonalisationString.2 = ad3af05d67a8c65d773a95913987e307ab90ed608b0e563094fce3d7850cee09
+EntropyPredictionResistanceA.2 = 30e9879886a7c60947beeea2af3da124026d1322015edbf51f39cd81b958ef6f
+EntropyPredictionResistanceB.2 = 943597c84fe705d133dd55fae6a19907a395e2286c2b8704db02206c17aa3eab
+Output.2 = 3b15500e2665606ee0606817c2e1b42c07ce1e8b803862996fa7fa679194794bb03fdb385a35c63844a07799e4171e3a4f2a2e27ce918be1d43108e99220f6491c7a7ffe175740c46d50b3dd6f99d34154eaea2c85d1d7b7def17fa737bf03f147afdf1490a528f7c180839ff0491561bed76e8895e4acf77ca988b07e56e268
+Entropy.3 = a444a2e4c8262e1a2da5eb2aa37df0d98615f7dd01ae37ebd9adc65648c79bfb
+Nonce.3 = 5826d3a9a409da80ac3db7591c4f9dce
+PersonalisationString.3 = 97b097b029b00d1b83aacd13fb79b68c55349b6efad92cc16e8d8ec1683a51ed
+EntropyPredictionResistanceA.3 = 95f8cb03f7ad06b3a6542febb216a81a9a08a2cfa08638525912edd62e576407
+EntropyPredictionResistanceB.3 = 58f4f8daf241b9fc3f201daec13a15926d147e7b7e17737edd9e237cb01ed81c
+Output.3 = 9fbfcd33a0537953eb0d3cd9a77d3a6af83231af2b91b47a8794adaf9a8a79679283e00e524c31a0cdf0c8c1aab0c7c5d89704b2be298c3a2489eb308fb6534f7a42d9adcc5fbc557b4ec614f5a80daba04fc0be12ed4cf4af9284f9617150d5680b5931a82ffde28ce0b293090763bf8a880b766f6c27d0b3ef0b83067556af
+Entropy.4 = f17b2b686141277a87ca5f48ee9f48ccf666f735bb443ce70aa88793907440ac
+Nonce.4 = e49516655f79b6df050c980dcd097029
+PersonalisationString.4 = 2711044813d8b62f2f5cb0af96954ce6b7b014dd3552a3c7a970efb2434f2239
+EntropyPredictionResistanceA.4 = 1a56bef601cd11a6a7d9bb711e520ca8cb7edb0e6661712d44ce375e03e72ff8
+EntropyPredictionResistanceB.4 = 1da7122d98a3dd087c7386c17efc8ea6f2e1a8d78192084f4b287b1abd02eae7
+Output.4 = aac11eb6dfc3a79b110929e6e9ef636e9a2dfd43dad04c13a7cbc549f4452b4c4acc3e851d7f893fbfcb9c82c9c5dd1fe165f4760f96bcc5090d7c9b6fe37a125b6c1016d3bae2c7c2c9aff1075118f989fc8fc61c802bdf5bed3b28840a446d2875da556869a59673fd102b454c8211a99fa3e54c812e27b58f81c8120a2807
+Entropy.5 = 5d68ec825da1d4799f4395a8e509aeb3d65f9a813f1f72c488dd1cc1dcf88d7f
+Nonce.5 = 11511f3376f828a61e8652d7ac4d3f2b
+PersonalisationString.5 = 77bcf7b5ec3f4959819999c0e20a61c6bc34757f20e2548e43e2d92817ccd097
+EntropyPredictionResistanceA.5 = dfea5e1452d41a128f12ac384f4540dfdd8809f44148233783e2a71f7675e56c
+EntropyPredictionResistanceB.5 = 4aa53d5c6e6f925caa6b9817618b86bb15ff7b7a1d8a5d0d727d4c13f1ae0350
+Output.5 = 6ebb111a59d4cb8cd642600d10e6a74255d71fc8970d6ac7aa18ebe984de53889dc5bfd7d7897fb06bc6a6e570e385b6d9c13f749649476e771133fd317254bc613a7f84da93ef6c3f1a493401219c18000f4c32f9953aba6927dcdf95a583dce2f6c5c164deb80c112d7f5203bc2cc540dedab225057e5d9eb658e56ac9a4a3
+Entropy.6 = 7f63c36d587cda59e4e8749bec5be715bd57f1a76f351989ea133d2fd9615ecc
+Nonce.6 = 67d3f918ad3f061af16cfc352f0406f2
+PersonalisationString.6 = e5a9b1677f90c64c287bbc962415aec368d018b5ae0131e3beeb1ecb3ae0fae9
+EntropyPredictionResistanceA.6 = 3a2d916b962d03b395b15bc293ffa270bfce26246100c8f8ccef735fc1e86cac
+EntropyPredictionResistanceB.6 = 7cffb9ac9b72c7366fbba12778a78bfc7c88c912c4ecdcaa0b0d16f75ddc0e87
+Output.6 = 363cfa6281ed89cd22c6773e184a350da4bee298e53ce176961ed90b49621699f97a9229809a70697afdf39c6a01df14291366f3590f2be40666dfcbc03ed982d003a6659d7dc39052128e492a4a7664e63aa71c2fb05150c53026ffdc9ec57f456c6713be36e37b817fc0c1a284fe860be1bb60db02f9cd2c9bfee46959e986
+Entropy.7 = f40f2b3e0da1673fa55096d940580b6afd77f062419b52d88a23319caee02058
+Nonce.7 = 2b71c344afc1814a4348e5918900ff15
+PersonalisationString.7 = 61ce9f01e4efd3d940193b3f8bc5c5cb81e7963582255e3cba0f0d3f23f50483
+EntropyPredictionResistanceA.7 = 9a45e66d4a3c06bd7476d0eb6cc37fb9ab51dcf5f7a63bfcee6ab36fdce4a2eb
+EntropyPredictionResistanceB.7 = e6a532b0ddaad4302e0d447489fbb8f33a91b6cd66f6bdf5a10f6aa483d439b6
+Output.7 = ef45b9671853e3fa97e873c0739090c18dfaebf01272e4eff2094a04498dc1d07aa32f3440394d65c7f4ff0b3cdc664ebefb2c001d0db842866de79dc9538e43806781238f1f827b6c2db88f4c532dd7289f83d10276fb1275eea7f02a6dff2674efb209e5e864f351308ab64c1501c579456be38d9e51cf2602b309310b17bb
+Entropy.8 = b56a6fecc1fc0f893054d24eccf14cefe125764abdd0083b46593c5042442b0e
+Nonce.8 = 0f51dae9e46e82f8f108737a6ce9ebd9
+PersonalisationString.8 = b156a0ab31db885384065491b23ed53cc1f2c20e58009d2b62ccd384f492c769
+EntropyPredictionResistanceA.8 = 01d0899678163fcbfba5fc72c933f1a8616fb43e81b37c49d57929c741706fa4
+EntropyPredictionResistanceB.8 = 9c322b29d81ed0a45e8a2d8e2d374b0b0668b7978c6267b2ce939e722c3c9b9d
+Output.8 = 86d225bda669d4dd3f4037e1acf574d8e0b2bc396275f3ec11a203775446fbf96b5469fad2c6b8e814535562a19a5c750dea3855b9681625464f4014f92268d18afc90ef78d0dd2dfda0c10c8d9f9aeee7122c5cdd02052f18ef693647d9bdb1c042646350793436f7d1ca3c617ecdc2dae5fca18483ce14449cc0afefab28bb
+Entropy.9 = e5f42a692d925d741c0c146e1fbf5f7efb2cee09aa6c9be5b0ff09784608c9fe
+Nonce.9 = fde9cee6e72974037144ea8a4b52870c
+PersonalisationString.9 = 203515e3f61889a05c57cb4c558b52c1247480c330e7c52b50f2f1a0f2255111
+EntropyPredictionResistanceA.9 = 19e66651b7ba779b8380d8617b8c5a6d813d619e0f1062ec79330bf76f6d3cf4
+EntropyPredictionResistanceB.9 = 8451e04dfddc5ba838bb68cbcdc80bebc76a2bbb1bac24cd526f4923f677f847
+Output.9 = a15fd02c935da57f85dfdce38a13bccaed10a3b7d0e46c656a4f528675043e2655277ffbca88c526b93fa8aaf13d0609550146e7e7a4fb3e41eda018da03af1f00eb4beafa008bd5796ff94c5ee1c87923fb78092b1730fc7b3709bd1e96aaf4fa0e29929976a4ac000bab1a922a7131ec3eebbf0300900d0ba8efa36dbcf8ee
+Entropy.10 = 7a061ee03dd80fb8a06f2089cee6592106524e799908a2d5d00a3c6e6de8dad2
+Nonce.10 = aea612a4eee37d30ecbedcb94fc9ddea
+PersonalisationString.10 = 46e27907d0af7362ac63eda488bca5f9f77b6228f4bfe589d87b6fc2ba3c272a
+EntropyPredictionResistanceA.10 = 23a6de836cd01b64aae8f482147899c59d31bab711770d7a0b38b934128dfaea
+EntropyPredictionResistanceB.10 = 73cf99ea81b992923a3ae73d9999716999c974c0bace434453eecb41cb02978b
+Output.10 = 7de1bf6485cd239de7a70557245ce50e1c2145ce0fa602fd9a1069609fb00d38c67bcc3d6406f0e976fc978bbb75bfdd60e8c826e1f4b2696ea6d98278908e2aedd5607043cfddb679e3c76b8702a9128c501a4d7c275277db50475e6527bf7fb5749d95528451a35d92e980733f3e7174ea16f242946e65edfcd8c8a6c7cfcc
+Entropy.11 = 0d659e5798288b26ff51b9e9a8ba51dd5c6a2c0e58b0d965427225890a9ef6c0
+Nonce.11 = 4eba527bf2bf5ebdcbcd7a41a40e3555
+PersonalisationString.11 = f4bcd52d3308c7185d283cadd2473dc727001eb8f0b2e555e89a70fd377a3dae
+EntropyPredictionResistanceA.11 = 190ebdd23b588b6eaf477242529b02bf823aab706791ce158b60a293347c9c3b
+EntropyPredictionResistanceB.11 = 932e12f1f1a853880715081d91eaf1c76b14310ab76946af8453280d0b8c693f
+Output.11 = 677033d1bdbd84ef0f41db7a9f83009d290309a093c25e3b53147fe5af84e09d4a776be36df50b2f4c0f2faedf6bbf5e3ee6554cb2a482c0a8c8ac402952b020b858cb8eec60991eb9fd9d7526f9e9ed07354087b0e2c63cd2358d3efefc0f8d7ae4bd66c9c027aed4cd38fc8243075428a6ad944bfb67ab1aee29570a9b8d65
+Entropy.12 = 0c866d96b426860047efcf53469b0969e528c9ad2add5f7f6d65422ab1ed370a
+Nonce.12 = b9644488ae624d81408669a562a47757
+PersonalisationString.12 = e57d8065e046a70312643894e3f2c2dc7f72a1093176071b2b48e7fcceda8dda
+EntropyPredictionResistanceA.12 = 92d495ca9c0c081d7a1d9031f1bde3f11dcc0adff3782f7c0de6689d218deaa3
+EntropyPredictionResistanceB.12 = d763f42f7f2c1a7c7ab78c31b7f9b915b99c8e1892c0167dd2860baec653f2d6
+Output.12 = 65055f3f120ffbdc47fe43aea1f69d63c373e7aa5040a2f49c2b1a5733dd6e444fccdaf5f7ad1305795175c41103b14b349bad8eda7ba6292df1fc2f01b2152ac9663e637c871335bb2354caa73bf6e3d0ee1adf8d0f384185f88e16c8ca61c562a311b69b186f35f1ed981a5d97c76ba31e17e13de09447f04b1790ff3ffe0f
+Entropy.13 = 923e2b4007be5d2c948de2aec152b99913a2ec40aea742e2b48548ad0775c629
+Nonce.13 = 163a8d1b0a229c98bd693a11708ae1ef
+PersonalisationString.13 = d0416778d593c76730f866b0176f253d19fdde21123b53da03c0030db04ce2d9
+EntropyPredictionResistanceA.13 = ba33a27a3e60af4cb8febe9b59c5e9bb107c34947c2e2aef11cc2ae17c0d0932
+EntropyPredictionResistanceB.13 = c7effe4eaf2a4b35f764584eb25cc9b4ab70106b49b03c3e04c29dbd93d86c64
+Output.13 = 02779fc95aa8302d03ea925a7258314615a94a7d47163c3b91f64af42b06e5680e2d81c39ec0c0d7a424e5514bff8aa9dde78a9bc20bf2ea00f6ec366f25cd7d7e694e64ed47701c8ffe8a317aac9bbdb60fdd95dc4b300014b48f49d8058910fee4ff69a00c21859be23a811056a15cf993c936b2bedfe1180bd4cc73eaec16
+Entropy.14 = a3dccb96c935831d4004f7cc5820fd5f3a638b69e91292f271e4da3dd451a21f
+Nonce.14 = c810aa9ed763a2ac46d033c9d4fd55da
+PersonalisationString.14 = d5dbb08e0796618994e8838282ca06dd45b922babfb9ebd7dc18be9a567a288a
+EntropyPredictionResistanceA.14 = 98bf1a0458e1ec44e3d75893f0196da2234b49b00c3a8caef743ca1cf89392b2
+EntropyPredictionResistanceB.14 = b10486e3649f6f4c83f0964bc8fe03b0a21fb6a9e840a57a7722928229f42e1e
+Output.14 = caf22ac0d6eaa74bbe8eb4a175348c3c44e7079414c79f56ddbda3e5514de2d08f1f0fd67c83c8ecda5a8c648704c41c90a5689744d8a6cb3f829dd4eef441e46fb84e55fae07d0d5d325c5d25793b82efcc7a6edbd2497cc57645aadcdbb9802c52f0aa6870b9cd5360d67ccbe00f16c6ce5153173e2b6958288ae38efbc686
+
+RAND = HMAC-DRBG
+Digest = SHA-256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 4b7e3f8a5f270aa2386dc1c1cf00c6dbddbd49f9911c0cb3f14f91ffe23f71f5
+Nonce.0 = 4536ed125240aa60cb3a255ef0e307a0
+PersonalisationString.0 = f293dc63e6e0dcb94bb19929a7935ec71bf16c55258eb66c63ff6d3225a8c270
+AdditionalInputA.0 = 4df6f301c1f2831f18ab0715706fc1e381c1c09a11ffc9af9938bd28a6fe700b
+EntropyPredictionResistanceA.0 = cf064f20b82f991ccec2381aecb0caae50c7b6407f8c76784d42a5af09c06290
+AdditionalInputB.0 = e350cc55cd96ad56aeb81b7b735dc87d48a1a8adca68e3ff0304e9438c00b776
+EntropyPredictionResistanceB.0 = 3cd4ce3f5dc941836afa0388c959b0d3783764f288296ac66960c28a7be1f75f
+Output.0 = a273235f5ec7b38d81fb2ac46a81b9aca8badc379a152bbbbd20fe10d58e55f8123e9909927a628304ad8d582a208b605798ab5a21877f8f9838f3d926764efb63e5eb3033f977ec816c1d462fb0c567e1e8fb029c80e0ddc0ce28a9ff311eebf1689060de7f1060cc59a818d6ddefe9e638f2bf84464d17939eace387b25f24
+Entropy.1 = 7f098b2dd9e106c680f5a6e0d36e503c524055b33df95d34abfe7dce510a015d
+Nonce.1 = 6f9a8b6770e6e929c20f24cb909a4087
+PersonalisationString.1 = f38cdbd9cfcdc924c681ba6e45f0f05326ba4e619ae4914d8fc03da1c7fb9c4c
+AdditionalInputA.1 = 06c044ed00b198882799e9a5eec4b0a9e75b837b8eb844fd165a27450de97721
+EntropyPredictionResistanceA.1 = d6bdd588796ae78ccdb3840464822ab58aa679a75d5c3e7e6c6a3e6d440ae3ba
+AdditionalInputB.1 = 4a0a5c6c550e2bdc8741e77887a6617baff79b98c13a16e4aecec91f3fad4ec2
+EntropyPredictionResistanceB.1 = 27a793e6c7666ba3fdf6e193a1a669b9d57c20b5622d7266144e506b77f60eb6
+Output.1 = 055c38e3e7c89a17bc2a43596fcdb6de0beea72a4ad869f8e06749c1185e27d84e2c0c4f49987a231bd1f79ce149d0b63c5f9ac83d36a7e775a3610391fd059299c31461bf28127fe12f117370b33560c11b27bb4a3096910fc08deff117620ae2f19ea99f05febdcc1f13d588f57988958fe67d53e76d14344564abcb64c5f0
+Entropy.2 = d751b54599c9a3a356634ee8092521d98e2e4f73301b794b50faecb39395d8ba
+Nonce.2 = e9fa0091d0f4cd52ce08cb0e4f021d6f
+PersonalisationString.2 = 5365d874122955e4e1a2bd6fe6a1be42992d1a80dff84ba9d228911fa85675a7
+AdditionalInputA.2 = 0ad8b59fc970523b4da20dc400166f20a11b70ce495dbc7d8a05c06cdd9b1c5b
+EntropyPredictionResistanceA.2 = 248c176b4260fa854a629299c8ef1d47a168c0d40d7342ccc58e9dd2080e9e73
+AdditionalInputB.2 = 55c24ad961bd592bafbc032ce648e5feb9d118441ca94689c4d9f5880727f919
+EntropyPredictionResistanceB.2 = 9d4bfb91b3101f709fe6a2a69f04a16ac2cd52d02ab857ca18114829aa4becb0
+Output.2 = 3875a72a1ad1234b08aa38dadf70ceb525d1f7170f6d829d9d1bf0ff17c4546ceaa8d3bcd5644897aaaab7c76d3d5002d67150847e9343db7416b2233a96972a14d93913520d91d818549087ce3a20b6a16b780df19c046275551d6e4caa62663cf551703a84aea28b90830d84f93eed39bfa4cfa59f20437dac1339801399fc
+Entropy.3 = 4b355dbcc75d9fb522d215e1e0944f34d2a07f98f06d155882e69c2f7b85eafd
+Nonce.3 = 41cd5843469a7d2cc63a17ae2b9c51be
+PersonalisationString.3 = 1d5ccc454c3f86a7a536d571f28716dea85a1d780aae2f1e7d9a0b0c1e45426a
+AdditionalInputA.3 = 9ab19beb2a6e71ce5a71030edf94bbf133171dc28de5bc6fb4d11fd5a2d0ed80
+EntropyPredictionResistanceA.3 = 1b60cf5a838e4e47873ab0dcb77e9fa00ddeaf40a66e1da8fc35a61985293bcf
+AdditionalInputB.3 = 0b74ffd4a0e3fe497eaa171dbc2fecc889f00b78e1fdda64f8e2015c72510222
+EntropyPredictionResistanceB.3 = 0e0ef9e7693fe1aca56345addfc994cf572f2dc32d7a9eb6814b70862b09eebe
+Output.3 = df0011346096f15a4adbc8fcd50f423e7f703991f47ec6c6903e810d50800fa2e98adc0ba872139462282fb0ed6217acbd742f3f97d72f4c5d23522fe8b0814c1afde89f735aceba77f02c0291ce0fe94db7e0411fc6b903b91ab0b773371f6803764f5580c9c1e4618f037f6387d7b7bf3f2ff77137de4e046510a8005bb73d
+Entropy.4 = fece512b5018298abc8131b0cddbc3cc7f7de848be7a60f087c2b1188e32d674
+Nonce.4 = b32d219a0cea22d10df94e4ff400c227
+PersonalisationString.4 = b53b3ea5e877b450ad91cbc82105375c0632eff5507fa12bbcd4541631acabed
+AdditionalInputA.4 = 32471080efbb68078860e2674c2db5a62c5aa475e5d01b6c76798d9117ec14b0
+EntropyPredictionResistanceA.4 = 4f9087dcc17a115adc1fcf2166f2a64999d4759ad4df0e6ea716678bddab9fe3
+AdditionalInputB.4 = 39dd38aa5ec9e04dd33a0446b84ee96db9ffb1cebd1d85f8d4d346d9f5b40b5e
+EntropyPredictionResistanceB.4 = ca28834edf532e09929ef68942db8917ea0e10b0d2e3788a1bc44ae1904c7e25
+Output.4 = 8e10982192c51f59db1d4c2acfc9fef98022039675cf1ead79be9b1b608f023ec8573a5fee9958f27addafc8b766f05baac1e066e5b1b1ecacf259ea3cf5ebcd758945672b9c0ab1521fb1fa6c1b2f6a4a91927db31678bd44618498ce6c3a2c1d61d31e21fdf9b10bc3ac586863ce5246c100f338974dccfdf386640ba7608f
+Entropy.5 = 4b439b83ae2ef20bb68457aad5528bdcc587941a512a91dac9a2a1870d471822
+Nonce.5 = cd5c4cd9c592c3eea18a2b25694259c0
+PersonalisationString.5 = c84ce5bde7f9dbf6da6d084b855c31c2e424c46521e25530ce3a1c130043950a
+AdditionalInputA.5 = 43e28d3e7742ab218f5e3dd39d697bfd712eda4de85ada3b8dd5123a829ef317
+EntropyPredictionResistanceA.5 = 4f8de8aadb6a05ab1dedf3c0b5dedd3aba4a02e1697e05a2ddd4dbc83552b2b3
+AdditionalInputB.5 = a24a2413c5f33c2298ecb047b9bfbd6ea629c36bfe67432507483a99ab2c22eb
+EntropyPredictionResistanceB.5 = 4b1fb64a1e3f14a631c44596bd21b88ca924547e99319110847f1917beb6b3f3
+Output.5 = ff373fb98917e09954f5dfd57a55d73c4304713fcc60ede49a3e7c09a3242d561f1d0b3a9487be5dddbaf3a23187327ee3df15060790e953add41420f957852c7c4ced340cc56210bbf379f57ed15da2800fe2dd8afb1f3641be7e204ab0d85b8edb7a7adbd972a6069958e436796a451fa770c39eaeb6a6bc9d313c3ab6f58d
+Entropy.6 = 0f81573db94ca04c35d6533e058990bf907057f526fcba5960599b0393ff1e70
+Nonce.6 = 74858fc1af429a9c16559820ddbf67d9
+PersonalisationString.6 = 6ff2eea628877ccf39e89c6e722518a65e9b929e3493693dbccce6f1fc4eb383
+AdditionalInputA.6 = dd8373f12d976b79846ac032e568743f2ff474089ebd76af4361e9f0303e34ee
+EntropyPredictionResistanceA.6 = 05f29ee84ee13b62b801bb110166c08fe4304097d64d0b835775587d4773e352
+AdditionalInputB.6 = aaba6bbf74e1cccdac39dfae8f4a4102ec3e8ac018b8f035c2f647d6fd31763c
+EntropyPredictionResistanceB.6 = 2cc99e4cbcd95c1235754dd58ca91169ad2346b0ecb9158844899a9069e45eb4
+Output.6 = a851a9dd09b65e12c5e00ad7af8437bad7df7f727755a51386cb093cee149b792dd4a46ec1c49fcc267177eecaaee19521f1942f1fa286508fc8ac08d92e5a6cdad3e62da93e0bc1dda7ab668bde712e78be2ef9f2d75a25ddff369826c240fb0687a7786aed5e57615b5d6b4fd9dc42315649895cafa54ea9e6b6561e572717
+Entropy.7 = 8a3062214a27a73cd70aeef2e944be52a5e63a76b65b25415c18b265e2c48f69
+Nonce.7 = eeaaf76de6729908a66ef52b8d8deaf0
+PersonalisationString.7 = 3c54be49c5e86da17c15dba5d465710cc652759bc271c68441d9c8595c5b7529
+AdditionalInputA.7 = 5f8e367cbc949ad38164c204ae00becfc22a2434feee73d267c9e35dbcb48a2f
+EntropyPredictionResistanceA.7 = c2db5be6ebc16be02f594ec5d26b7a2f6d2162a32dd92bc76aa09e112a33310f
+AdditionalInputB.7 = 0663f4c01e89cb91a779cedcfa1f76d0ab54329924d69bc2df3b8fa5eb4df83d
+EntropyPredictionResistanceB.7 = 4d26c595f3e9b04704ec66c8643ca5571aac1ba5ae44c788a245a1ae5b7c8b74
+Output.7 = bd4d0282e04054dcd64b24b5ebde18d5c4a2ad096496f65e8ca33c02e227f1f8e7f1a6a356689d3d731529f6c8aa178082bda9807798f36b18dfe5d1efe67a6424dc21c487cf40761ccb6f0e8079d51076e386a5f9cce74aee6d41a0f86317f5c4b29034be747466d65c8372ea92eb13267f882026dc3480911def40b82d44f3
+Entropy.8 = 61e0e18d899b9288be765d180266dc4650d777d86575f1d82f8094e68025b86a
+Nonce.8 = 6d14660e26e6c7f7151cbbd6a0869d57
+PersonalisationString.8 = 999a719132b8d2c826af329bd655aa63d02d0bc663ef50feb4a4e04a00e0eba1
+AdditionalInputA.8 = c666fb2f4f1f00ddb54360c4987e18b5051358e1f7ba8485a036d262622ebd58
+EntropyPredictionResistanceA.8 = 74029ba62cc97a9cd048aa13fe819bf758c773d41a05d0363235a2c676c7f5cf
+AdditionalInputB.8 = ec690bc2b63059500b6df2399b097371154940ffdc13af2e6039c4674c7360d5
+EntropyPredictionResistanceB.8 = b2bba3440d9947eb5311f67fbe37465cb0637c634d84a1c5f68b6eaf4e46fb79
+Output.8 = f7b558285246dc73a6cad83aeb2658bbb9f2a41760b3267a07b967ec3a4d19cb8cd531e19836104640be38a0d1201e8961e0218a781452b3b88c80b785b680ceaa077f129eb88fd0b2f503c9605ea970a62a7911bee159bea72fde92d722351e1d628c2ce77ef263ac9f08033e67a2339571c68b61ea09c16a24505137b4e1c7
+Entropy.9 = 4032ccd4b4dff87124a0c7cbf86892d4b6567cb4569f4f1f061553f43863b5ad
+Nonce.9 = c55fc373452cbd3f118c55402c6538e2
+PersonalisationString.9 = f4cc13ed6669832595a44aa02e04f38cbbe1addd8425eb70a18be4911f029bac
+AdditionalInputA.9 = b42a6e29d641a0e114784e0bb80d794da0279fb97ef433fdbe2cdbbf6a175ea9
+EntropyPredictionResistanceA.9 = e0aaa6f262b0d985b57e310da9b38076033c46e4fe59b405c1eb54666787a071
+AdditionalInputB.9 = c6d65c2c7a3571c23a46fc9091521d662c41adbfe4b38cdb1f2ffb6818696090
+EntropyPredictionResistanceB.9 = 1122b0fbe7df13d726ec4efaac03eb11ffaecec1bc94e4959e88ffa56972ec59
+Output.9 = eb17790c8d196c9dd8c0fc5991e2bdec228bcec1b57e5fa71065d8cc080f638787aafc99242b67cdf47b3ccac7496baa764634e113b32931d6de5f692efe1b1e7f1d02572beee59148cfff47182d0f7f91b31d8e44d52d301bad7f3850d90c158b82d7d5674917de2894767a1f3e492dc6478321f6736905188ec11e16e161b6
+Entropy.10 = 375d6a61a8f7bebebdc5c52294bd2e522043d1f263b4a3c718fbcce4208b4d77
+Nonce.10 = a6afd2cc4a09606f70cce41fa2320891
+PersonalisationString.10 = 9d8fcf6daaf36c41904e4d60ffb34edbc6a7b7b542a476c6b45e20bc5d66121b
+AdditionalInputA.10 = 7b36f3b45205eb2274bb6f3108a0a5ec8e891a35e94dccc955d660a7e31324c3
+EntropyPredictionResistanceA.10 = bd002988188527f1e2fd1b21130dc63ccc476f39023dafe349bfc61d65c915c9
+AdditionalInputB.10 = f961e4b380f88ea0ec64fdde48675d56cb594e82204ff15308c7c46c679a2d19
+EntropyPredictionResistanceB.10 = 7cbf197245f269d3876e0ded3d425714e982f1edb642b3afd072d76d0762a278
+Output.10 = 4fd1cfd04231e061e0df01c5156a89b26ad443e0a499a4fcdf23e87dec8315b6747aaa98af254a61ed343dd2d873f68788e12c3e1b0473e9fa18a8b9d9330ecc94b4dbe6b461dcccc4024358fb71ddd6489669d0e2753b3d086533312139044163f4cfe60e8538a57eb2f6907053465359dc62bf54c4dfb451386f49c13823f7
+Entropy.11 = cce7c45fa71fc956dc8d28e5c06ec03ea013352953e522e0df7b0a3842115e8f
+Nonce.11 = c5a36a2f54b0973755200c85ebecdb26
+PersonalisationString.11 = 3498a4fdf9f18675d10b6d456398105852e19d8ccd8042dc2f4562f7364dc518
+AdditionalInputA.11 = 86b89a0eda54e34f0402895973c9115f95d09e20ef2c0fd254ae0369e41a6ce2
+EntropyPredictionResistanceA.11 = 2887e15779865e18d6e10b9b6aec2a67891387d21b2e6331aa8671f0f0c15997
+AdditionalInputB.11 = 0cb6c82fd67e0c10b3c408b9052cb88df0e1db0c6dffeffda129038e71430bea
+EntropyPredictionResistanceB.11 = f8da5ec72a838e59f24aba4e853c6d768a23d7751936e412c76b227c4dd4cce6
+Output.11 = 946fa70ecc123bf09701e7471be084b58769499be3feb54034691424c0fa062a0bfd01199af6d9845df535619843f6f8f854291041315e0c8f786ac00839082b11f763dc84f6f8d35b382155a316b14eff7ae68e53455578ffd1db00f57d3da27bd7efc8ded61b104baf920c191c1fa7dfd0a206fbdd65a808a820e7fd418833
+Entropy.12 = d900eaa535220f478b9a1e48659e1e2dc657fcdd4f5dd7bb0792ca9a4512f77d
+Nonce.12 = 7e535c86510e4cbcabdca3a3525ff676
+PersonalisationString.12 = f4e5a8910ab20a20439841fdce56841102f11a58c108ce91862d2d82d335033f
+AdditionalInputA.12 = 37004e9b7af9ecdbb4ae11be8131d5854729177027d9f95bd039166dab7d1ae1
+EntropyPredictionResistanceA.12 = e5b084839c4cfd491e8e9a94a2fa071bcf3d73ebf5fec556565e0ee7260fe0ad
+AdditionalInputB.12 = f1335ed92143a56cd9a2befaf12ec1c4582c707098256486b8c6d9a1dd593b2b
+EntropyPredictionResistanceB.12 = 12e7dab6da2d034636b43c8ce568b46df17ee41a465630160030ce777ca4d2b7
+Output.12 = 7cd88811c73a567e35223e26a25ae84315ccf145ad0b178221561418ef5acebcb90127f98fc1fa9ae794ea04d672e740a2fb8644873bb2dec8b767b5bf3295bc646ff9bfc4ea0baca3502d1cafd02527bedce86ba5ddef7ba1166158f890b47b1ad9b55f7d787c6e2fda8987c4b7e7d34ef775b6ced82f0ac714491a1a598cdf
+Entropy.13 = 306fc2a4011083090276b24326095265ced04b7cf231abd208c37ab8e8fb649d
+Nonce.13 = 5e4550a88f7815a6c1552700a3bf1f2e
+PersonalisationString.13 = c7c07b1a47971150e59741e2a824a5e8f902b2a8e45384e02761b56e9d36bc58
+AdditionalInputA.13 = 78fa6685100740ad8791dffbf3460ce6c18336f5d866391b07cfc6546fec6724
+EntropyPredictionResistanceA.13 = 530b3619a0ebe596cecc49ab727cf249b8c32dc471063abe76c712f57bfcb0f0
+AdditionalInputB.13 = 885cf32f5b012edce64c491ebc68182b8ae94b5bfce11c16810ce8f90676f777
+EntropyPredictionResistanceB.13 = 942e33dfebc1599f3daed22a1665c28fcf3563ab70f07d6b68f4d9b4dc8908cd
+Output.13 = 9f2031a033d6f90f7dfffe865db00085f8da8c9e2301cf4bcf2ab82d7aab6fa5a9c8f96d702ef9ad83b06a5569519e2c404a187b8c534755a5e5cdfd46dbda143cb749accbfa6ffb53b487d5a8a64d0fd922b58903d01fcbd45f70c23b83128e7fe43ec8b7cdbe50141db603c725cf4d9c12cc7284bf42d392af00ba9409564d
+Entropy.14 = ed687c48a4a62e6fce8259d7b142506ea373da6ec868a2d33306416153b7a9a5
+Nonce.14 = 1025e4d4071b5f3faa66d7d9dd60f6d1
+PersonalisationString.14 = d5a5b4988310a8960e7e7328719af16b0579e1c4fd3a980ba6f581166e8bbe0f
+AdditionalInputA.14 = 2557f2c8db7b947263f90295602b5fa7df5c28bd99751fc6cd9913d5fe1c7f98
+EntropyPredictionResistanceA.14 = 0c608ad00f2a0e6541b5a896c9726e15937f12122e1b8be6cd89147612f8e0dc
+AdditionalInputB.14 = 666ab44b022bd295bb6b516390e14c1a7e746acb6437e33b203779116f30ec1a
+EntropyPredictionResistanceB.14 = fb25b91fb031adb53b1d175a68a9202abdd6b3da5d658b7d3d5e815e62d440a5
+Output.14 = b02cd3e20a39877aa2b5288236990b77e0e9e21987583fbabd6ddd9ae2c5316fa51602d06ae57a55a784dcb163504014a21a1ac2290b6232e8e97d186e6f6a8508f7eb6958a0ffff454f91e1c0b2831a594d31445918c92268b380c017f9911e81c82ae23449976252add67ea901463848696eb31453189fa88d2c999b6d9d81
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 51ec4987ddacbcf6348e4a891fa571c6e3aec02879eb0181a121a4846344a687
+Nonce.0 = cdff9798761875320256e5a59bc94663
+EntropyPredictionResistanceA.0 = faab8864cc0bb1e64343c0b978fcc0d6e84d0d17c1c1f4093fac3b4c01837c6b
+EntropyPredictionResistanceB.0 = 37d189d7608f0c335eb38fe1f43573e0c525093f60ef618bab297b8a4d9d8c16
+Output.0 = ade04730059471b1829bec8dfbb0ec708be7b4e77d688ce7cfba9ddde059a52f969407291440aa79492f827fe1a2f6568989fd36b4fd84e6699152536bff15388af319fb306f07de4309eb92ba3da5f7007948335993698d398bac42029912bec6ba39226c2bf238733b5081aa0a2ca392a719385184be619d9ca56771d8e3716a46cfb339f93ff48abe406ef788db2ada45ab5fcb7f689bd801a5ccad855b52cd4bf1d6e338f2c3eac94ce9fdd0dd06632d01ded3753e87957e8569a67eccad
+Entropy.1 = f8dfa70524d46f3545db3c687fe85a8ea35e32eda470b4e14b8b12f4e9c6bbf6
+Nonce.1 = c08efa9ae1df90ae6f14b895c342ae07
+EntropyPredictionResistanceA.1 = b5e8d563199a141c34e709c6e743260b573f88186f40f800c4c0ec9f9fbeba49
+EntropyPredictionResistanceB.1 = f103bfa2d62d7ed8fc9ff88cb1ddc5d4ca4d074e0053c069393d70a5b3f1df3e
+Output.1 = 05f4e609b085d28958f5702eb7b99f2e0c7a80f095907abd5b7329628aa6dce2e2f8bdb7a2992261ea414e6434dc98162d02c51936542218a31c6072ed55c9ed83c79698de7ffd3835d5e4d0f3a0c2a70bef2b6c602d1e0cc814c71b2fb1a001fb83a0e2befdec7e4749629693629ea2397b299cdf491415dda446817dd7d28da431f95162de83d917f9e9325774e2f7ef02fe8067cf4bac47e2f61ba235b532af3aa95a6517e9f1286e065ccf9b3eefa6cab4c940c83ee9a11da55ee21c8d06
+Entropy.2 = 7ab7da47ff7a95ebf2367de0a25c7885d80931447d2f5cc73ae7f66844910e48
+Nonce.2 = 1e05f53ca993b0266b7cde89960d681a
+EntropyPredictionResistanceA.2 = 3d3c568d9a6e35347cf52d2e0ff7ad1142983fd7d2c848674315ed3e009adb71
+EntropyPredictionResistanceB.2 = 54fde1f2d90019cac210dbfc06279d48fc7c2e900652b5cb638c1260acd896ea
+Output.2 = f00714df243103f54b4c0c516a7a631431dbefdecc30c09e8e834f09882100c1d0276273568cc6352c3028c156371389078236afe57d00edaa226262f1a7f6e0011ba48d4b8f089cd257b6b7cfe80ca2bbeee99635c277254546d4adbf046935791be21c48a7882ef6cb81f7bccdfcf9bc430d21cef1d788d4f4df6bd6ef5bcbf48e35f116d482d880f597bcbcfbbf68bc77f591bd7346d7a1085fbc1c2707c17bb288ce6bfb0a78a54731421762f18142975b8b3b79dec0d852dca80f1638b3
+Entropy.3 = 40e83cb1fbbefb44426350916b0995fb6a1c5394f2fd625774459548cfab27f2
+Nonce.3 = f92e2e889d3deeb33dfd6c40f610b71b
+EntropyPredictionResistanceA.3 = 70387af8d70768c52b36bb2a59f3ad9a16be98c726c2d65af457b2f7d81c75fa
+EntropyPredictionResistanceB.3 = e82523c977cbdf6138b1cbe5a9b3ad402ba197a3009dba459d3f534ea143e5dc
+Output.3 = 52cfd4a4741b6575578a1b7aab91a366341cfd483799ca08b851bb0dc2f2bf640e90c1406fd09fbf9166bd55d46aaaef38e0449b7187d019e68a3b98a7dd9cdac63ae9c966db4d901d37cc147835d017915902621216bc1835d70dc2101ae50e0541f796bd6bca2e53260ba3353e6aa4eee56f80aa329173e347d83d050ddeb465d8e1aa5450e6e7eb515a92fbcdfd8530f04fae3d1a41b13151a4827f0634d6e80424c1e934ce0e2077f5f31fd177e9a42acfcaa67d4043fd31a8ec72a39e6b
+Entropy.4 = 39927d4fd0c3eba2044002e65b60d3994c3aad0c705bce2e9e41aca30a7c2f03
+Nonce.4 = e7b4968d8e729e868f5fd57b49a4b862
+EntropyPredictionResistanceA.4 = b0bd169a4e2d77bd59745e778ca6fd762901ae3c0fcc48a0d6ee22bc8520ec45
+EntropyPredictionResistanceB.4 = 0630055b3b66bdd2dde9f5215d241fa266d24342b50d42e2db5436a478c7ebaf
+Output.4 = 96194dd1b6ac5efb3d4787bd1fb4c9cc32c29b67ee34369a7aad9a56f64f53526e9207c1d4c541c6e0df4960c54e10168284891841fe554adaa5012f325b3aea79fa4db8c36e67a0f914d9ab361d8ba0b3d6ca4904103f14a30a90dd6fd7c3f679c272dee7f01110f7229f4f5b6ed152a0149dc5a7185bf637d10899bca417cba8f919a2800d8a72d5575f0c174f98f77a1afad850334204e66156eff4572a6703aab50b850a8df498d1d96b1e2bc1ac34aa4399f3b13e97b4989539ca78e97a
+Entropy.5 = ad10dbbedf980a0c33576f7606e14785b2a903788b9b7cb4c29cf74a8bbec877
+Nonce.5 = 999ca28c36c835b60680bab9005d8e4f
+EntropyPredictionResistanceA.5 = 341b97213fdb6a52e783d19850906cb643bcf48c291cd186ebcbf0a287e459d1
+EntropyPredictionResistanceB.5 = 795e29ffb0c7c84b0f6dfbe219b4f85d9fb893c0cf9134263a9e6a36c76d02a9
+Output.5 = 5db269714c4ab774c2eb14eb95e9b60c6ccaa6e90f9f879e295cc007069dd231894cd8fe0c09bf748e26940160cd0cad75dd2e305ed1f2527ba857c42c3d0662d25cbbcfe342910498ced309cda1894a1186ab935fb614646d299ca56f86defdd0a0f52baee1b9b9be05df85a05c225475a7ce1cc58ebc488a4f57fd1f983881754dcfe3bd78cac529e9945c89383e331f0177e721644b3a8d82deef548d161e085cff59645a345cf7af3f3582bed5b81c7de7a6a216403bb88804f7d16ceec9
+Entropy.6 = e9506dd05bac4750f5d5b43e0663ecba6444455ab6f662802897a493ca11ff05
+Nonce.6 = f76045b621004f4a88fc6b1ba859ae79
+EntropyPredictionResistanceA.6 = 5e4846f17c3b1c127a8ef16d32381e27eeca77ec062a8a8f811f5dd7f9073714
+EntropyPredictionResistanceB.6 = 7f5fca2b7cc89009b0350292b88d1de5de94e1e82bd5f7bf2e06882a925977ce
+Output.6 = abc3d68bb9b0d29655ee2057a60e59fb84afbaf9c75ac5d146a9856384022e4873a6abb963d8795ded5ce33f8df9275f8ae4c3da0037973487348645415ed51458529bd7c4996128c943ddfa21484521fc645723802318ffd5191e957ec453a8e922d48b1e83681c1463a03c34175a5d610f8f3709b3044f45084f901704547e301f9807a7d92036e08a3eef791f67659816fcb28922b9b52e2a4a2e81cb848f9ae579cba346b0507e91f26b70d199acb6da5d3544b8caea762f6f30178636d8
+Entropy.7 = f1f00ebb7cb4bbb3b0a083a290d4d3cc4db53aa9eb3f2feb1d428cf6d8104bdc
+Nonce.7 = 56b2a30e75782693d7565c5d1ad6edd6
+EntropyPredictionResistanceA.7 = cc22967eeb5f159989c2ed7fdb62103c055456f5e1a3163bfa034c502ccbd9aa
+EntropyPredictionResistanceB.7 = 75385d4777d03a82606a890c89a207494d082becc22efad8fe69c367fa9e3350
+Output.7 = 6b75aa14c129d011191b9016b089af15b806a494e8e763a7fe902479155704e1a92eab48ce29fd0f1e9d5a2014757c3cda6e021defdb91c796cbad709658edad6c8f7ab6aebe978d507459198e0719eec49b1926a7c4e33e34e8e366966e0e4e7f3ce0aed6e51d7804d803aab57257ff1250ae8b76bfc48a505d4600bccdd992d564b39c3519db0c7dd26f5dbabdf3c098735688aad1af8525e8a6a343835bed094708b78faa300c08600e638e6f24f4b2b78df0d747ffbb9521cc6786b9c89d
+Entropy.8 = 1f3bade86f64dc0770dafd6a4900f61baf003c6dccec496856b7b08cb99db8f3
+Nonce.8 = 71f1c9606602ad397e0c757f56ec6176
+EntropyPredictionResistanceA.8 = c04e832302fd6fbac3519af6d2cb9da5a85ee70efc19c7350145e904a7fa9d31
+EntropyPredictionResistanceB.8 = 99e1f6213999ee3bbdbcd1200b4dd4e7a8f112f3a37865e494bf8549349e9e78
+Output.8 = 1a420c51052534d5d77347ed5751e44817824ed75467791c9717875dadcbceff2ffe024952958d4718b2b4028af83ecf363d57349a36476c0203fcdf4952794aa66b3692e7b0810ce060601817ad0794574b1ce12d6a7b6ec1d0b1e0acb2a6c453be81bf2d17e1fca7dc1c9ac5fe4a64069285a8cb9408051ba5ae4dc0c8897b4a216109b22ec56aace995a453f28dd7d2c38c7d44739b9f09ca0e52d62f204e7f4a09c3e231c8cdaf54f941e8d5565b25155be21cb316417a4c005f7e834d0e
+Entropy.9 = 1b288c94a8aa7499850d7bf82177024f20e8ccd502b7b0f529c47185aad4eb82
+Nonce.9 = ca1efc0104f93cc35885e9894671b9d7
+EntropyPredictionResistanceA.9 = 4fa8237f5d740fec09e90b88bc75124e564f1f198081d51c950dbef6a6ebb2b5
+EntropyPredictionResistanceB.9 = e1aec008d8a5a4c692f6467c740f5026807bafc0710dc8e9197aee4372b429cf
+Output.9 = 3daf72d94056e6c7138787004f40a4a0c81a244c8aa14c332675e977330b63315916d8fe6ba8f0aea5a22def342d4136d1d6c787b3a6c6c05a44ee1cf9b2d8911974974cbf7a14ed5b83fceb8dd8d3ed59194d3fb6cce579a97244091731a4c1ca1d6e4c9d2623a41de665ee3c8236e0da8710208cee948f248329781f40f6f4b4010508c219755b6df752b9523ed0c9644b17250bbc88b4338c688e97e952a924da894fc986f7e807fca4477be94dec993cd6910709d8032fd3a5b97612cd65
+Entropy.10 = 1e1837b46486b6e65713327240bfac6c618e817787c277b995c92dbe03b9b01d
+Nonce.10 = e8e100b303ce5bf5048dccfce4d24087
+EntropyPredictionResistanceA.10 = 8ffd5ddcb6754292291d1a79ee1e62b6da6b23d7a83d0fe9e84757dcfa51d057
+EntropyPredictionResistanceB.10 = 09d54142b42dc876506876b136b6df34b485c0c129581972bcbc674b893ad61b
+Output.10 = 23c258b93d4e9943783e88b244a52cde6747d8d7ff28b77e2ddfaa2edcbb29eaf41dc75cdc2c5b581b3a59fe20e705223bdd90e786f6c6498330ec9bd7ca7303e53c0b21abef1497210f8222850ca7f01e0af4fefd36d82e711fb17f581b951e949876a5ef0a212fb73af4d32f6bf9fe8c9e60849fd2311f3b5cb8a4abe856b3dd629fbac41e6dfb502d1894088fc52832cefff807555457c03ba7b7daaf02830d9ff8c9e8ed09ddbb68d6530af0cc5ae9383acd34c89ec189f5a97abbf3ed5d
+Entropy.11 = 67b2a6e09bf31ecee8fe9c719491baf3c6efc0e27519155f99c94667d7274202
+Nonce.11 = 65254ee6d34c6b9c03414452d6892981
+EntropyPredictionResistanceA.11 = 2f1d23aca44adfaf6b02f519dfc3f034bc32c1b763a129a97c7258e5e77ba69d
+EntropyPredictionResistanceB.11 = 6eb459be2cc96fd6150b6040babcc406143bdc2c1862c7bf6607b4be95f3151f
+Output.11 = d0f71e56e975e443bd7364eaffa9dbfb60a82bd0ea6405de0b1301911449ae6ac0dc8792acd2b0ca3e68c2abb982362eb2a7a8f95d2960579f9932070c9cd7abd57a36759b2c6f12e20dbda8a16a17c29b70f5bb8db0efa9451d9a349b9917b7bc39af6c6be8217e0a6fb52e6a4c46dfe41e6a9cfba84335d0254cad07557fd7aa3fea185c8c88a921ea665e410067395791785ebdf1793038ceef6c590e64af00ac4ce69ac3d0b497feb93b4fee7d55cf0fa40dd49ea748b33f038b5097578c
+Entropy.12 = 379d0a38c8897a6524d6a59df4f09ba975c146be7a398c3cbde8c222fcf99810
+Nonce.12 = 2e98223b81dfca7fb5bc92b164afbaf5
+EntropyPredictionResistanceA.12 = 0f58b8df04889dbd69acd59f7d5ac08f81984910ee20a4d58c51512a3ed893d7
+EntropyPredictionResistanceB.12 = b736da894a0b52f75c5208d14f858dfd42290f4181b7aa249097b93fb2bceab8
+Output.12 = 166f643609dcb8951161ca15b3660759b69da616b45761b8cfec01a8a7f51a0bb1cf256c9fabe69b29552f8e861cbb3160b905d24845d368a17ebf911a839384c3b3aa6c8dedf1fde12384ec9535ab9d008728978ca58ad88780cdc3d272d1dcf2059b9bdc0d2311812fb1b559e31f8e5a89efcb2b33c705555ee0efb23d2c4d312fe02b998eb78af85e3839963afd98c1c644ed4493c3f1af0cb210e660748cadcfc9ef85fa3b5fafe345756ca34e7b7f88d3aff8783e92da00dbead5d51f89
+Entropy.13 = 96041c211e97d480d149e75c876886a78fee171e0f395a952a0e873af4dc22b4
+Nonce.13 = 6cdb68a60dd1d5753027e544643c5764
+EntropyPredictionResistanceA.13 = cd65e202eb821804300ea618e8ff9785f3bf2fbf1b1048cd4450399e2f642af3
+EntropyPredictionResistanceB.13 = 8bce41df8fde3208055e34d356b1aa1b0180673e8507af2035f75e9fe629f979
+Output.13 = 51475ffba32991781b17e38ea58b08bde40f03b64824187b9506153f41c233f34dbdc52b63cfc71b120b4fe6c2866d11e9aaf44f82deddaf998caa56a4dd58a6ea2e8f5e3c4ec7fef73e5620cb6a77313a4bc0b135c57d18085010a4a026059c2abd4b6d2048393c5400341928f5ee6c5a063d679e185eb9be2834a1009d03d298b9abb09f993a8ede54bdc4d9a95c2af5552aed9fb02cf598a18b5cfe6c811d1ca4ed764d0756fdfcb5d03aac1ed80fc86595539c105da6b66a00a91caf44fd
+Entropy.14 = 423cf6fb44605cf03e3063bceb92c156e38c5badfaac35593139df46d325242c
+Nonce.14 = 84908baef2f824bf3ea66e74bb4127a0
+EntropyPredictionResistanceA.14 = c5650c33f68b5d33502b1f55e06fe2c1169fb34688a09291d1e12e5390a73da1
+EntropyPredictionResistanceB.14 = 25be4cf15692e3e6ad0ab6ffb22cf3f77b00333517ecb2239c9b81e59a72d087
+Output.14 = 41f335cf727ffec9ebfe7cb348d11cdb4e5e49a9a047d8342a6656e5d235219a5d80715166698cc1f16e34f743811b820e6ea55c2bdd0db1b97ea2269fbf60c739feed818282f447bfe2bd0b9a7c479144f0016703aff450abbd87a50e5e5af0d2d9469175542737bd116de2a73acbb74d9f0077a227704f271fe0696f071914dcb9c0f0191fee35eb66248eb17991b538649457d5d5f9d4bb9cd81c33a14d2becce003c143c9cfe39ccac51048ef169f6a22143eca721d04f6e147749a44a75
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 0b2307c32f34d3f3c3d6887fb17ff68b01f158ef07438a41cde27d2d6725277f
+Nonce.0 = 33f60888aa32b9b7406f78f47bd877a1
+AdditionalInputA.0 = 16815bf5482abc969179152f79aa34a04c28d483e6ac81aae14f7e0e051a5662
+EntropyPredictionResistanceA.0 = 795496f759d693f3f8bbd65cb5b2562c4a8d4a717b6bb8eeabc4d8f56118a97d
+AdditionalInputB.0 = 938c363df2740ba9ccd39168f9bbcd7d421566955f141e13ed039c4d86195392
+EntropyPredictionResistanceB.0 = 3787d3065f1e20e6d71a1dee563fdb2d56561128fa83d8602fe0da3e89b019e1
+Output.0 = 959517e0b27d461d678ba2dd528bfb7e844f7bf14a15fb176efabb3a5200ff2b373c7c0683f095798951dc7ffd62b172ed814954c44087fc7a6695a5a275bc8aecd3a2ca8ed631a9ebf5e1d1c515542c67f31e16fd3ebc7e2333c7dffcf385f0d6ebe16b9ed42994be9f83d0cc1e2b3b5773cd2963639ac74ce64a311ac0726014bcd213818cecf5d562cd1c5e97be4028f64400cff31fcd587a004cf60f03c6f3222e4dabae5c4bdef8819670f77f9227eaf55eba5238f90c4bea4f03588b66
+Entropy.1 = 062f2aa7b48c983c1c6d00d06aa523a67d4e86e5bd266451bb286dcc5888f0f4
+Nonce.1 = 940c3b022cc76d68e1706d62fea84d05
+AdditionalInputA.1 = 4a217bf136c3894ff7a3ca07eafafa286fafc8a827328b105b3a8aff28e49d14
+EntropyPredictionResistanceA.1 = 2a019b921335f69ed5dcd902632116759b68e09b531de276c9238faf3a980280
+AdditionalInputB.1 = e433460e9414b21fc3d5e2705c08a21a36acde4458e24b78dcc51199b97c7a9a
+EntropyPredictionResistanceB.1 = 6750454a5260bd808b796cb12116354b9a7ab9ce33f8dbd40ae7e74a07cfca02
+Output.1 = 5c980247a1fa16ea086d54084281c5fd114777ed21478beee9edb175be7c4066b197065da5f4c15750783039eb4b5e2cd4ccdc2a45c49ce535f03a36657f218fc616b3e8ef0c84b78b0cd1c57477242bbddbbde098be573e20d6ddc76649d706e7f6c7ca3f44c845c2c9c9d316ac8b7389f7264c6f8cd6c56ca5503e5b37f52d19e8d47cc85a04a0196b9387433bca3c18dc30b47030fd297705101826840991eaf5b856a5ab75d2bbb70cb13e0dd1876802fc2bd776a518b9dcb9484c499644
+Entropy.2 = 0fc79576bdba77a815108bc9cd2d168ee30f9ab76db70600ac95fc40c1f6b724
+Nonce.2 = 068c12b99cb4928247e64b2ea8e75c72
+AdditionalInputA.2 = b0c200b6f8548643529fd414c693054d4fe04d8f76c3fb8ccc6992ffc25e6b19
+EntropyPredictionResistanceA.2 = 8ccb3de18adfebe24ef99e14ad54bc1b3a486891b00b1c55172d16adb00ae58c
+AdditionalInputB.2 = b91bf188cbaf4b01350d726585c6f3601a26b3654db2e2690a14f1989f83ad85
+EntropyPredictionResistanceB.2 = 9d8ae0fa9809245a56c9118048199767d35c026e6664773562af011c2ca7025d
+Output.2 = 7c64e503eea5b3df44dc0eb986188c312a0f5fe1f113239984608a69ccadce8a7c7f3136169e075b0c61812b1e74dfe6ab2e7d6f247f73859da5a1068c92ef8e6aedd94c3904b973ab887ca3c38de70b8b312e32a702710829ddf962f0e08779ed9770975536557e3f912ef0d5c4969202af50252117eca8182c30389c9b84fda95118f8c748f0b1752c1e58b8e0af530376aa34cd874cf49628bebbd7353ab4a5f64bbc8e3537762fd5556c680290b2c523153432a2e0df1658f2a5507a30a6
+Entropy.3 = ffde7e2726e89cce816ab3e22572fe31434f3181d0578d51161cc77305e2562b
+Nonce.3 = 755008c7e4ccc8ec62806bdfbcd8508a
+AdditionalInputA.3 = bda1741b0b39d9248dd062870334e33cecde5c5f63a07a3030f98b021c6849fa
+EntropyPredictionResistanceA.3 = e418fcb0b57a4d1007469ee3d959a07e949094b0a3e5af69aea3a90a22263097
+AdditionalInputB.3 = 1b5336fcbb0ed183e0f80cd31ede4f324997ffb842a83957f41d291612c55e8a
+EntropyPredictionResistanceB.3 = 8af9139027a656151225a2183b92e980fff9ba9876824bafcf18d63c916fe7ae
+Output.3 = 61d542e4794e9bd4acefef4b325d954c8ec6a29138476ab1bb037507cf52c17edbd511579be5c232a67269ef42364cfb4e2aaefb31d9e8e260a04e51d95c2ed6c5e0f095efd92fbd36edcae4393659af6bb98b0b71b281e91e1df37c353987a6a9e259f2735fd16b8c1277df651b26ac3d9f292c9252be7fe09ab7851f515325a078cd69a7573a4810ab460c4c9e7604e54242ab956fe471e90f86613ece7372f1aa934a50dbd0457033843b887c279f14ad6b4960f401b7fb777253ca5e295f
+Entropy.4 = 7946fe7ada4b545090d7647c99f71594fa094593115c23888146b27a7ccbfd77
+Nonce.4 = ce305c1ae4fddbb75a65dba4f0ea1889
+AdditionalInputA.4 = b29a506c7bc8b2282570223230664193216dd47f7d20ccdd35943a88c58c0503
+EntropyPredictionResistanceA.4 = 7bb7e9aff3138ba030005a7d1c5802838ebb20848f8e81e7e8018cd0d0dd9212
+AdditionalInputB.4 = 3a4c00cd2f278f0e82498d33fb6ae9e020f4d3793e832afc9864c0b7b6cda43c
+EntropyPredictionResistanceB.4 = 43c094aa710f6b0b2ea004bd684799e3caed8c3c8944d5da995b88fa071d7526
+Output.4 = 8c0667d913b13866c7eab98471109d966901fdc66fa4dff8996ce81ec5185ce374b118da34e07bd82833f20fa4e44ef159f9b0c47c046307a484b3f52822a596bcfb49b555ec8d481fb30e13dc9898f093d34cbb4d696d70161315c48def73bb1c8b4947c8ddab101d4918f5cc00b890b7450e4e10c17c46ea7f5e0a1df65a1fe74ad2577e592e7bddeadb246fa62cfa5bb8620220b18fff296a19a5a3ae6b833321ca779b7cb5b55658931610d8b7776087c41ee4d077400753681c7da5c5aa
+Entropy.5 = 5459500d5a709b88bf067b4c390837eef5ae2e5f109c110a84cf32f561d26ddc
+Nonce.5 = 567c5f4cf0f418cbc2a56d4325b2727f
+AdditionalInputA.5 = eaec7b75ee03cdf0508c0ca171b005077954e2cec7230b0aedfe32a15cb1c855
+EntropyPredictionResistanceA.5 = 875cb1ceed3167136f0d93940417f616a3843b686ab4f5dd3d808801054c510f
+AdditionalInputB.5 = cdafe409b871625ab1b06a93c4d5a1f8196777370df18643f97050d7756adecd
+EntropyPredictionResistanceB.5 = ca5ea8fa0465f9d1afd8e0c68affa10f5af61e594e66b2bdb2372caa0712bff1
+Output.5 = 486aa4063b3840f0417034c65676d20da22c510d281bbf407855cb58a87ac9b33511d692315d88d27bd5d1ad5c35ec8b99018b5ca64897aff48544a5e578124ddc00f785deb60b0a60dc4873fa9a148da4dfa1557baa3aafa22680a40f650e4992d21e35fab3be5458dae13eb2caeddd8704d662b221bda01ac6329e2c451e865af9701a7ccb69c0ed0baeb226e6fbd2b871b99420949570bf5fc61c673aacb58feabdb304f870939d705426aae55cb3a2f3206c33abd453e077c4565c603a18
+Entropy.6 = 7e74b0a5413ee2ad8de814ea1f556ca5c54c6f11159f1fbc78faa86a74c4871a
+Nonce.6 = 11658e917fed348e779aae510d383290
+AdditionalInputA.6 = d152b0aa1946cf177aafc7d47322f8c756831550ec79adb40f34681fd6b3840f
+EntropyPredictionResistanceA.6 = bc6c4f13391709f8aa9bd79f38f310e2ffbe7fb1be3e6e3aac9d879f1e5fb3eb
+AdditionalInputB.6 = 152229388caf5dc50454c2514d9ff1a4b70e3d1d9b8b29a228d59ce67e8bc586
+EntropyPredictionResistanceB.6 = 1fe81675cbdd098cd287f66fb9b28d50e12a64b9e08f28a40ed446fc3a12585c
+Output.6 = a1e2046729e849482bd693e21779e18370a542e2fc7baedbed054476f35447e069bfda33fa2723ad425717c027e8b30d57dd2fca8cf268849358354478cd8bb42e8f9a737c2e3d5490991e4902a52e86d1bafc1751f5908a36afca2b6b4663ccc9f1aa46e857e2ee61e4dc19d154029da48d59519dde64410b1d7daeb5b7b93213cba1bb059637023f928f16e5944e0ed2ca07be3674fed6e0da72313b3cb80b7a2d6533fc8785587366ca1b6769db803d6d840c5d1b6c4589272a3fe9371b0f
+Entropy.7 = 70b5cab63391c5777e4e60516b7095dea3cf26d72b27c19f5a08de6634306d99
+Nonce.7 = 2de4c3f70bf2849a4c3dbeafb163f5d5
+AdditionalInputA.7 = ab042d23accf9a9473b43e82683e30f436fa492ba4a8911e4ed2622d481e0cd1
+EntropyPredictionResistanceA.7 = 0dcbbcc8e6f4bd973636da95d71d39d6ffc9e67332088bf906921b9c48a7e3de
+AdditionalInputB.7 = b707e2d5a5020d37656009713bb100c55819a98e220fbdfd921c6c0724ba7238
+EntropyPredictionResistanceB.7 = 158740a9c0f29a7b69d5545e390030965e305ac1653958360d01607bcbc39fb9
+Output.7 = f3f82b7aa0639bcabecefc7b07b3eecc9962884250fad11b9351226f138e06e3e953e052792d0127618a28aaaa1bf5374a06393c18a326f8d3471010f9840dd16ec997f53fb981aa2b689bf1cdbf265b4ab698f9e8e9c054255147e04654b8fb1d0fd3a0b64d3880ee6e9fa87e0184f6ba307f4d3fea651556e0baeeb75f308fa32925f8c55ae0f355f8db8495ec6c46003763ad4ef36590ec40239b5e8530aadaac931feefc8e392c550ad4d89f5b314a53a0633c7a93bc05b588273e6d1d56
+Entropy.8 = c17914dd6b73d65e5af112536f52b046d4963f9c9098c77d9dfe35ca7ee6366d
+Nonce.8 = 4c0fed576ba4cd14caa3d0c406fffad2
+AdditionalInputA.8 = 4a61ee9349d53f8b3c1af36fe0a9303ef89705fd87e06e5f34b61e1350111279
+EntropyPredictionResistanceA.8 = f0748362166975f5bcb9a395d568b8dbde3383c5654bd24f26890b21ee1f1cb1
+AdditionalInputB.8 = a9ad1cad4ca7a5af4bfb83680d4b914c23a6cd551e8b002c50f30be0d8693edf
+EntropyPredictionResistanceB.8 = 0f3c93cf2df64cd764187c840590a54babc9c281de88ad1a1dbc2677fa8687f9
+Output.8 = 9ab30e3729dd8b2af987dcb793d7a3e1fc4ebcfe0a4ac976d91bd3897777effb210c8076e9fd135991e54abb4bb8c7b183a80ef37077692e519d38df4a04304fd83fe1d67d32147fe0a249a6c8bc603d99878039b873588c3781a193437f098094fd8c12945ef99036442c80cd1f544725040df980c548f0a675afaf62a1b7c225c9cdf0703e613c7a5d72c8b00d8ba199b8ecb48b6e0b0d103a3b0f57ff1a4b9189a20dedeac6eb26b1f66ea0c34ddded10af2b0133f4b5b95ac2239dd94919
+Entropy.9 = 2aa5423270d0859a6e3aa3069a88f3ac4c30eda7f6e52aa891e4f995244a80d7
+Nonce.9 = 3d73f789561b00ceddf721ea59a7eda3
+AdditionalInputA.9 = 32cae3ff757b79f2305a8b5f5fff5a77afb581faf5a3796c5ed7054d7c048017
+EntropyPredictionResistanceA.9 = 157090ec192c578fc53d232c36453c5e8bc3c9c22f3aedb6a93f7aa63975d9bd
+AdditionalInputB.9 = 632eb6f1c827cf299f3403bf80af721fe5ff8245331f1ccfbb8f4e61ef5edadf
+EntropyPredictionResistanceB.9 = 3369cd518e570f6af0ab162e4c938d17dcd4f3ae46d7cd502ef73b2d40f50e2a
+Output.9 = 1a85c36131a8c271d6c805233098bb29f9104e6254e0680c6e264a76f79ec17c7ac65c8a97610a0a7e5304b37d1ebdbe02cf9daa9e45b81d75d8c613afb974eb38dc49041eafa7462b4c272fdd3d7fd4b05b1e6142305ffd6fa634ddde90e273b51b02c0b68b823c77ddf3e93a2ab9436d0f4801f08a113eefeefefb9592683981423f83235f8e563ecdb4e44daa9afa5e1728204dde1bd254c7985e6d56897c570b0c6307fd49ae4dce18ea55eae846af2a5acaae17a71f8369b64f47b0e54d
+Entropy.10 = c69c61689d1f7763d43b22b6bc2262c377c62db60835114442fd5bd65c665705
+Nonce.10 = b5563b3b6e9e793d0f4128696eefc5ac
+AdditionalInputA.10 = 15cd6984fab6ae7db72a4c099a064cdfbd141dce361fab0021872c91b1bb65ff
+EntropyPredictionResistanceA.10 = 603b3edb35b705ae39845cefdf8fde23f5479ae4f033442aa958e979c89bc41d
+AdditionalInputB.10 = 86c295fcc7f9c2ec9fad377e0e4d0119334080f59fa68c21c19d7a1212dce03b
+EntropyPredictionResistanceB.10 = de68d92f05b28c3644133d19788624bc970019a10f6b3c6c5b8dd22b0cee3e26
+Output.10 = 97b971ec13db049ccd72bc597ebc2e33fe4da647d0f74855f242884d35dcf92d0349fdb3527c87c5431c10fa85569285096d3369bd1917c8c7c8650024acb88e5b17c42b50a75419e29757a9e1ae09053cf0b51dac437883cf3f5b1abb40a71f40d279bc9d596d0f59f4c70f81087b4446c402279f4486198ee3294d0a5f72eba7ba52cd552906371aeeedb47122bffb0d5ed27c3cbb86a6fc2d83ab4db7b6e1ee467dd1ec20dc15bcee168f2e200179714cfc04eac651a495a718e1ed985bfb
+Entropy.11 = 4dcc7427dff46b7db7e2d3273e0605ce85c460cfd4269fce9ca3b10399b99e17
+Nonce.11 = 8b12f28786b9e3df457ac0015004844d
+AdditionalInputA.11 = 4c0ab67b952186f2f85a0dbd4b2c1b0dd009dd794260ee7f321b2d2b3d994e09
+EntropyPredictionResistanceA.11 = 6f6bef29ea562856ee82246d24982393f770d0b65d0ffc660d9d8359f10904fd
+AdditionalInputB.11 = f5be66009b79f51f6aa0cd1a5a24a72c6a6c4263263cbcf80e8e0d514a2bbb1e
+EntropyPredictionResistanceB.11 = 8cbb76e648df60ec43237ff7dc46bc34920bba637a2c1643a53e8a88bb7bb97b
+Output.11 = 211ca57a321cae2c6d1ad755ac924c92dd09bb1c6334ecc543ba78a18608479457bebda63f707fc28190b2d56e4cfd96d8c49fd146ace867236c57761ea28326e3d241d1dc35d7ca971df9d292f2563d33c5f32abe86367cf5f2f06628376752b353f72b501ffa94a50f146b8174cb7946ab8c8be382237334f37594418850a233c536d72763f10b06f728e3e60d3b4f0377d51b0de11d110a28b6fcb7c42b77e5f6b771c8e5d713a0f6c4d82ab2311cadf16b7cb441a417b2f595f32ea822ea
+Entropy.12 = b72f34bf8209a28168ae7692e4c7d6f19feab9346971b85fb9f377f6e4a77dfb
+Nonce.12 = 370a10addae744ac03f2f277c8542394
+AdditionalInputA.12 = e919d983beae4b687bb393d90ad4104146e86564845800ecf82085d5b269f1dc
+EntropyPredictionResistanceA.12 = 5f486830cd410f26e22c23a136d41800850113339242e1a0550bef81a239a289
+AdditionalInputB.12 = abc8b519db05c1de8794248c5741627cc00ee35a972ecdec045a0cc557a2d967
+EntropyPredictionResistanceB.12 = a8d020c14298854f0b17abb0bc461ed6d39ab2d9cfb03b835916c2a8e93710a0
+Output.12 = 9777504473adadade14eefc0279f8347bb178a36dbb5fb028f0315b4309fad4ef554bf34b04146ba4bc260a89cf78195ad1c23c6e473a14385c66ba2a1c005cdfe336999245f00ffeaa41dfa3d9e68294e5d676f01f213c6d2d8a69b43e36f2a568999c0a8c07e96d7daf90f3e2e668eb9fc8e5c812a49a39507d193eb7c95b947aafe658a1065efe9370cf81014e4ffd54efffe5f863e6e4b7d875565617d8b72854ecf09263c55d1c3f1a4f4862214fafe7f03da5572095a7befcfd8e6ee63
+Entropy.13 = 35d5a6cae5aefdbc62f1efb638c15dda387a8f651810bf068a8d92601fd37e0e
+Nonce.13 = fffd95196c09c668ddb05eef3de33922
+AdditionalInputA.13 = cd603812a8444925993f2c1a0691bb4459faedd872f43852f9970675f579a1eb
+EntropyPredictionResistanceA.13 = 2a0bd0d3b721a27e2f29be84a846c3964eb9a84cf69b214f612df3b414729df4
+AdditionalInputB.13 = 1441b6d4876b050fa4d969f1845d3f119cf5d8720c35da9c489000e6b7165db4
+EntropyPredictionResistanceB.13 = 99da4d3ad8bf3613bdad3a70c73cae80556c16f8ab83adf0f2bc9391094bfd98
+Output.13 = 259828d05b8e735fad69527cd2322f94e8e7ac2791607ccf2a74d070bf7d5574ffd8d6e447cb4e02bb15a87aa88d8f1667edc0905455b116ef7f08ce727d8f266965242e0042810f946e52acca6348d70e012d998322a18a2f3b4c4c6d6b66cfe65385312344e3eed14c6e7277eac9a4d09ddc5dcf8fcce6f79a23d34c80cb78aaaf1347ecce8c13efd450d59506513e62f527179b95b9b5d9df821c32538f8e1ccb17e911826e944ec44943ad8e726d54fa98ebc4d012d34a23771ba497ca2e
+Entropy.14 = 66abf17d907a134232faaff93bfe361223b5b773980cc261fd19caaca022fd0a
+Nonce.14 = 081c11efee01fb1f7abd0145b32a51b3
+AdditionalInputA.14 = 1e51f2b67538f84440912c6fa20fbf009100fc3008b5b8e1308d95e7ca53b460
+EntropyPredictionResistanceA.14 = 237d6ace877ca6392bcae2fd2aa5b865aabfb1d1d1da33f42319a088c8dbed11
+AdditionalInputB.14 = 301f91c659f73b618cb46a4343772f1eee9fb4949ec6328109823749bd8b0b11
+EntropyPredictionResistanceB.14 = 24a71d39e627d5efaa1e8f3e5f70114bb03b71ce54e4f8d34e838106b2467cca
+Output.14 = 34c532082926e6d530b3a58282eb4666ac7374e8befaa4999dfc9f409e40ff966652295d2940db97061800583bc7d47b053553ad29c89ee61803c1089d30592270d2927031353592d4aa71f59a4bf3f2147cb406322367544c38fa5a3c8ccb534bd884355b06145db62161260162091c795874a2e99e01292a2e39e107738818a211750f858edbe0c2ea4734ad14f1c45bcc9f733f027616926558587f7332be55044dfd6fcdb628ff7d7d581820a217bc64aa092e450722686e0cb291eca45b
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 37dc21c72dc7c82d5e13c51ecaf5a8ae06402500d92caf96c0555a95069f4f01
+Nonce.0 = 44a961ead5d6d9bc317afc8206202bdd
+PersonalisationString.0 = 41e3b89347bd035bde510ab8ff83d5fdcc9d5f2de648bdb468a714f2c1083c52
+EntropyPredictionResistanceA.0 = d57fc02a2a500df1fb5c4d9d8837b52a5220fdf068fe2b8b4bcc63fbc9bfc94c
+EntropyPredictionResistanceB.0 = 8e21d987e8b6cb0f4cd37b144c668f18b7a36ed4e9758ee7b96029aa0ab2196a
+Output.0 = a929ee23c5832e5ab93ccaa40bf775593d7d04a1a8411dfa07b4c8a2da2dc91b1bcb9c27a0ba5a7152ce5ded5f76cf6b83c04c0f8a4f6b43383ae3e7d497280c0f944be91b0bca6a56df2d00641bfc1ec549b538898e559407b076164278c0eb7afb6d6f4495a50d4da178c04b259d21bb745692d3bd186edf5bb3da6f66b4418fc3d9b085b0a6c1a5e54696272c305c4b8887595b391dd6ed8da03dc9fdb2728d8c40a2defd8af05ef1c443a72323f2e0b0d268109fb7e7ee70192fa06bc6c2
+Entropy.1 = 0dcbeb660cff703e059913eebff4f639a24b611a078bae8f01320ea4af5e8e0e
+Nonce.1 = d93b8dc4e84d224036b5da645c147359
+PersonalisationString.1 = 1debeed9ba5790437a6c56dd3c9e2f6df0912aa0ce2e57fa8eec9652e2eccfc1
+EntropyPredictionResistanceA.1 = c6123c54cc2367262a7594bc9a7dc69f76549ab803af66de8f253d338d48ab82
+EntropyPredictionResistanceB.1 = 7b2b1918d636d6ec92bfd9123f1f5fb59b6c37eadca0ca7792e2b7932e1ddc33
+Output.1 = 5bd815b3c3bb73a45dba72c68457ccc17212af905607d827e8b5ddbffa34a058ec360abbeb6c8ba16c770ae4826135ac7e4faf208da8b5fe3b26c16fa7c7ef4000c3dfe1b8b707dde64b415c671c4615d56e2648908e047ac978a389e346cebe9228daa7bcdf5e341f72c3c7ff74672edd60c7c6341726450ffbf9e3e7a16580e7e602f9ddd3f3556129052de05991907d81a87467ff5842c6e5dcff4543e24ee48149f16e9107a9aa40cbce367d4b76042d77ef1790b0a7701b2f04873d245f
+Entropy.2 = d9bd99128fe2771918afc6db6b2514eea0b617d9bd4599a238d9d99a7ce18995
+Nonce.2 = e8d85542f3f9dd89920b0f79b94d7f55
+PersonalisationString.2 = eb701a9d119cc6dc0d735254067dfe161b1052ba3f93ab0d6bcc19cc0387027a
+EntropyPredictionResistanceA.2 = 1fef4a330e9de24eb197bc75677bc13d8361104997af99ea2c6da03f4e71c89e
+EntropyPredictionResistanceB.2 = 03191bc5e320f057afee98e98facb99d15142c61ddd71666cdc38146fbc3ea4d
+Output.2 = 67b86213a84778a9a38eb9913b9db8508b53ac0a81ff85dc78c966d638255f8f7c63ce06d4a66f5d9213ec2b32f7e63ce5dcf01b59d3b30433f0cf4c06c171d839953de913093ec845670b38ecacd81162dd73501b2e4c2d9dc69b97d49bd6d9f6250070ef6b360305fcc5ff392d1adad98d6bfda67d10b725c7cc8ef6b4fc206fde1871712b96dcbc2df4f08d79f1adf7fbb01bfd8f20e76956ed4b9dd1d7e5fb4f922ad2a529bd871490e741843d839e876c4b475e2fa140f28ac8d347a07b
+Entropy.3 = 0de3fed3b363d20ec5018d4aeafb25c8e0e6aa42ee8b56843043f8d9c40b9bdc
+Nonce.3 = 8ed427d29c469d8976a5b785d050f3d2
+PersonalisationString.3 = 82b6a44b0f35f946fa0fd4628738e61a0bdd421a8de73f3d2efa25216c789080
+EntropyPredictionResistanceA.3 = e5eb287a064c54311bab32dcd5f240682babef59c6ffa602669f3ce4590b054e
+EntropyPredictionResistanceB.3 = 2550444f249b56666b7b2fbec29b33d1b29ee653e388f9fb54b00635ff526dd9
+Output.3 = 1f7b951d147ddbf21fef9d4849044c44b757309da8f0244f71e4d8301e1fd50c5e46407f5bcbed83eaefdf8983c330dd0a67568e866b20b48c2bc97dc63a7c0d3eb60f2488b1eefdfaa7b8dd43132511b4a2ca80bc9e82851584ec4ae463444aadd3c8e6db2d4469ad9750e18a31337613975b3fa0629b9a22bccb235d20157a4427acd619324e881e68f5615c65e59a566a73e4ce9d484fc5b0b29137c4f339be84781cad67d17de03099b1d03ac45106c1f2eb5b380ec84392b7ba5c91df4c
+Entropy.4 = abdc2ac24ba7d92ed9f518d9576510969f8d22074bed9b7639299d2137532c50
+Nonce.4 = faa49b5e843f417693a2eebd0ffd3f27
+PersonalisationString.4 = 8c7b18ce389664fb72e777e70b533ced4c04b0c290fdd45b86b6b95708d74187
+EntropyPredictionResistanceA.4 = c0ad2d8bbfdb912ed4d1ec85165d4ae577a92b1affab63070e25dca8bb1b035c
+EntropyPredictionResistanceB.4 = 8bbc5d3a07b4fe094690e4a45b99f9e5bb6b0bfe823f3c2a148732fd43db5e5d
+Output.4 = c3d1420055f71a43264ab8da92829fa1b8937346375349d2e256705d933a21352ddb4eeceb36cdeab38cae58da81bcbe6deafeca5d7f018a0514bbc285f436b574ffac2547d26a3f9aef21b66c1e70b45d372e4dc2281182ae94667e442f39e1b9b2fc2aee06ab306095a904614613b513cf1af5a9df12b996cbe88cc3b25401790034ad0622df43af4cdbf9cb681538c79189a8260cf9c35378955f2ea859faa78773854883cd94bde4c0f50d4c998c278e47787e3f74f3dbb98f710366d315
+Entropy.5 = d20353e175f4ebd0ef5fe77f7f6fbf5340ba07934828dd296c041a63de841002
+Nonce.5 = db0d21ecbfd5eda2bce80bed6f73c23d
+PersonalisationString.5 = f38f23461c471181a4179323aed247299df11ce145fbab9834b85b3cb42a10f5
+EntropyPredictionResistanceA.5 = 3f18900bcc02791ba9cae668fc33fc60ba84c6eb40afbbfff18be5c4960ce57a
+EntropyPredictionResistanceB.5 = d67dfc8c1eabe61a299881c0f326f7093c1a232c80467772e707dbe75b5558d4
+Output.5 = 76a4994edba3d0d9ffee9ccb7e12a75e79c5ec1213f45ca4c50ad629ac533e5e6dbf58f8fac193755e74f9e7a75eedf89472e91d394e32eaed86efa4fb2f9e7fe4bec1d9c7a30fe9bd17c2cda73d136e752a9b818cee6f1262028031bc09cb81b89156138b571f03afa69dd388a807a8cbe9c4de66cad764114f9a4a6419ea70ccbbbff9dd774aea8a2d6b1d20d0a577c59953661f0a87b4d795c2626a025d733f43bb5cd1df37f5cf542c7c8b6bda061cf4693e0384060e63090415d7470cb0
+Entropy.6 = a58ca5154659ba58fc1b468c909c667e1b5087884c01ab15f86fb5a431e982c1
+Nonce.6 = c041be0aa014fb310019fff65f40ff13
+PersonalisationString.6 = dc05980e40f07a02fdb150af580a7d195ba26f4fa72a1fe513ccc2cf6e4f699f
+EntropyPredictionResistanceA.6 = d4469b123223ae44f4f4ac0fb6877a7890f969d39047e39ab23882cd7838e16e
+EntropyPredictionResistanceB.6 = 64bc361fe18136471dea2e71a86ef2d9f8f7e1d24643d7df292409ff8cba0f13
+Output.6 = 6ad4543c218cb6aafe65e6a50c4f9ee9d5c7a3b9a0112bce262f49f5b0d20dab7225fd0acffa25165729d8fbba038eb65f7e72f136e5bb82e8d94698dd9b763c38f3041ccece3b04189aaabed79e4d4213e24218c5fccf5f9a0c3902875564431f4d670e6e60e1dbabcc4642c3ef895c115e28702927cb98d509f9341ac7ae2c6ef6c2dc4537e909c81a9804057b6e24fa63ec5edce835e624969a969e2c47c6dcb7e9bcb2bb8f344d2b9855a43e26c0606466887b28b67ffd7f99d374812d11
+Entropy.7 = 9d6e99a11d63cab5aabb1462abef66bef31a2886cd172651bbf30f65b16fb8f3
+Nonce.7 = b93b5042a908510d8518330538a06253
+PersonalisationString.7 = af631e7990394889b84d851920ce8877934e706b780908a07211d45b247584a6
+EntropyPredictionResistanceA.7 = 959da557d2b390c6fe0b7ac6b18591e5791d275c7e3d558690719d5967d026a8
+EntropyPredictionResistanceB.7 = 0604a389946e2a55486b5c49c2984990a2e14824aa2922e6a59892c5e6d969fb
+Output.7 = 9f33ba9083c7f4088c9505622cd5b4937b7189b0cbcdcf352c54ef72057594b8568cd4b13a4bfeb61261d27f5febbf2cbbf902a8d55f6bdf669238ae84b8abc58826841f7f62a0c5bd9f74125cecbf8e3b4c1ec88663114e7c248c41cce92e73b05eb3f826100c1b2683cbba985d2ab694b5de1ed8624628917ec9bb97733f337298c0459f198c7a138f1670dfac0d58f287b8244f0605f97406ef528099aa2ef290db202baa7fb221a8523344ad836c9a2bb25e1ff3fb4dc20f69ebc9f0fdd9
+Entropy.8 = df7c57519ae3914c75174b3107b7ddab95df936c5cd7c296b1cb1ea06249915c
+Nonce.8 = da22bac19ccf2d522137989d5a425498
+PersonalisationString.8 = 10a198b05830cff2fb4f5b0317c258129396edb943769292753095b58bc8fece
+EntropyPredictionResistanceA.8 = 09277ba155d04b3353520f4b5c2f18120bb4b8442130db58e9d46a1a41f5627c
+EntropyPredictionResistanceB.8 = 40a6b65a4f9075460b7053202a6e5b12b9e07ae6ee9b4945d4235d0b736e88f2
+Output.8 = 17b9fc6419c17534ee16aacf32550cbf58ea1f073b8e72fb9ae6e94094e797f216703da428394a1da8236f725b191cbec11531a1f87946c70fb1440a55be7d7d18c9b5085d626dd0cd9b3bd63a9014e5d14eef636beb694dfa7f781e83f3c1b4fe5519ab1a505d1be5b812514f3a39814601db104afe5726086f6bacb61c00ab8210239b2891938e97fc53de069f18a6469999727a904403bc53c6c73c7b3a5f9f37f380563f1281cdaa1b4bb4a636f849717c307848748172ae0191997abda8
+Entropy.9 = 2e403c307a03d766b61001842f85caf91a5eec97a49934547b2ce63411916495
+Nonce.9 = f3e102d333269e04381bbf140a28a2d6
+PersonalisationString.9 = ff1d9eed8cf59f5708e41924cf13fd5d30ccb7dedce3062dfbb2c4bb4d36b65b
+EntropyPredictionResistanceA.9 = 1fa6a5f2286079619f4f4fafeb5c520c602d0ac3190fd500a3402e7c0647ac76
+EntropyPredictionResistanceB.9 = c901e7c58e012cd6b9e83d2a969f0d0ae4e08ed5cb601fc72596a72b4854f246
+Output.9 = e5e20f2cb063c1587583a381536aecbf0b0cb4400c99a74bbb6aa15f338b3e67187316865cf90e691d99466e34bd6612985575122c6c79848d4e2f26801d98e49c002f4063019394f4b3eee908f2d6b56749c260e56ece4e0431650a8bd9735879ee6c9bfaa5d44c07e7ff6978883c36597c31126386dafbbe035579819068bb060348629f74420bd411f2dc858d46dff0bb4f79946af96046da2c2cb32e0aaded4eb1ebc8748f277317f9ffb9aadac1bf5e6654ae7131d5ee0c765ff3d49d9e
+Entropy.10 = 4b1240cedb84ee3f395317e177efcf03b0fb57be1e01e3c206170877a06ec2cc
+Nonce.10 = 077e9751b4eec964a4422d010ef14874
+PersonalisationString.10 = 9043ef3c775f32dce1902b9efdc481f61f29220eca53bb904155f2aacc3b3706
+EntropyPredictionResistanceA.10 = 56fc16b3e6e7ccb8a06230144535274215f00afe175d394cb04518b630ba7255
+EntropyPredictionResistanceB.10 = ada0c6676885801a8f503c55c38850de6f7904b40cf03fa195cd16ea2999347c
+Output.10 = 4facd2fff1828b9f4a63f639503cf6533a4d242f316ef7168fba44b52b876056bb0fd040d5e331d2746169cdc88ccef74dcf6c642c1d1a0db4130f8be9ff88555de4c2a7a5824f005cccdfa6074df3385672eca57a45679d69dfec232cc8b1bca87f6f9c6cac2f630498d52449a5d1b328a6d2ac1a9054a0658be589bc277b7750ab5d647a73a15a059d72608f9d299d11f9fb417a37ddc1b52c8b8859c2949e5ebae650b9cf8b4fd771288e582dee38178b154e681eaf74d4d3f35daf00a309
+Entropy.11 = c2027d8c084e2c6fc5d535726312bc6362372872cd37bf07cc1c3870f3b59a97
+Nonce.11 = 0c62b84a10d1498b2e02027d854fd84d
+PersonalisationString.11 = 8c5c93583dbba016531aecc1da7b010b9559785b2e8cf660ce17022f8d86be78
+EntropyPredictionResistanceA.11 = d615e29e7c204579968569386b6f08393322c4fb36da4398ec4881ca9c17905b
+EntropyPredictionResistanceB.11 = 7b2fa28722c98d404e93fbaadb165411d41256a0dfc806a19df0f526571c80f0
+Output.11 = 54074cf184040f57716e9eef80ed0e006cd029b99ca568fd7639c4c1b0f7431933516830f5f87b157fdbbb2af7ab57f6faa26323f096c8e86136e49d833665a6cb3a22f7d5d38290c2e9a23c62dea6c51b958460b263566c5c0e4be9adcb1c123b55879f405f11b3c34c24852d33c64d6563ee46cad14ce08d5919ddbffdfaad0bef8d8ed9974f1d95917e2b108d9519b13c4f6929429d2dc44ecace7799839ffcae035904b576e71e92b0a89f39e3b3444b75ee0705419c3b3533c793605eb6
+Entropy.12 = 02ef640b9f087fa48457918d7bd6e910d7379bdd89e1549118ec67880dc3c4be
+Nonce.12 = 3ad95397b8fc88bfced5aa76941716bf
+PersonalisationString.12 = 38e664b930fb072112e6d47bfc5538b0d48672a12769f3eb860243bbc1c5db75
+EntropyPredictionResistanceA.12 = 4c26696e9540d759c8c6b8603d5c40df267056c79bd8a3497b77052e49895349
+EntropyPredictionResistanceB.12 = 3eb853b56c41f3286c09f1ec88637f95a1cb7e6e0efd3acb8a8fa4de63d10727
+Output.12 = c399e8c39ab174fa8cabb7e73845d8d434dcebc21062edc69d02928b0de4471517496365bbd59062a43408215f5b0f35971f4c48077623860206e0e6af8de751e6fe45eb6648a66e8ac5e603043c5365be3015af858fa2709c6c7b1cd22701dbbf4ef27fa45e6d7f9df4e8a558517a38e26bdd82960db9a92a0deee98657ab514913f134cb9362756a78ae4afed3a6c89e86341a8fb20b5cdfcd56933363f83e8c55c69adbf8e8d7199bc4f93b72ae1c4d0939b564d98e7f052c66e1e0988ca5
+Entropy.13 = 2f280ffe3306764839899faa89213139a40462039f4d9c55feaef6728c24cc63
+Nonce.13 = 6819357f6ea65badc8e493b99d5af1d9
+PersonalisationString.13 = e3d99860e8b1e9297c60b17904be8525be831d71dbd3f454f085d1758ebe7160
+EntropyPredictionResistanceA.13 = 95d14d81e39802711977d0a1c5783bfe3c290bc469bb9af520b0faa06f230fe6
+EntropyPredictionResistanceB.13 = c4ba3804e39e3226f0731f09579e105d726b089d1c37c72e3faeb33768d3f20e
+Output.13 = 45400ec700a4cf8309fbea94aa4fcbdd22c859e0f7defa746085a2f4ddb9db16efbb0c2fff798c99ff4e9e11986f4c330f3658e34a146f8d9071467228e3b0ea486cfbc81da3e739a301fe51b620d7d27fe9da0e4b875efe3c2bd0fde31f608015ad71cac9c95bce33e516c62fc45a9fc85a78c142416d7fbff3a83602dcce3add6301ca6b9be565e3cf06ad6f22855d57d9c184ed7214adc1bb014a1b6dafb86989283fa3a4be10c410442d761c98d2d3f94bb0d97ba1d5c8966eb47b0fe6ec
+Entropy.14 = 8f3ddc4230f8320bd18cf078c04c62e248fcc326980301174617a9e54351c667
+Nonce.14 = ba4c31a4c0e7dbd7336c27c0b8a034f6
+PersonalisationString.14 = 9bfe9bc055b3215560cd285553372c47cca422fca574c0d22d7ce5f2dd40b084
+EntropyPredictionResistanceA.14 = fd947b0a21e580e6c2dbfbd44d01f5fb4a51dcd2199df9f1803f24c5e774f048
+EntropyPredictionResistanceB.14 = 815302e016aad33254d308c5457f368965c15b6204e191c2a252e4fe88dfb978
+Output.14 = 34f550231d31c1b3a3db331d341ada3b987120d94e431831eea67e8d208f9cf1800549d445fc7befbdcc2488cc7f4340560d574fcd2396e9ecc9a232f1015cfb26db451623fe47ec8bacee1756573e74e519adc62b23ce86fc191ea5e13da9c7a14496426c6c53dfa7c7ccdb67d6164dbe88cbbe7f48d4971993003ab24f3eff18bd52c2661992e8f8da93bfdd28f01fc32edb439ad130352463084041e9871c431ba26c676ecd7812991833113cbbe687651e93aeb22a6a44cffc7a3fb214b2
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 8b285ce6b4da70c83fd72aab1b4be62101bf9b29e168726ea2f670aab0deaefc
+Nonce.0 = 5da3404c494c6019ea33679e37cec308
+PersonalisationString.0 = 723c0f287db4af285c195cebb1104a106f22e8b243fdcd0566228ab5f227a9e3
+AdditionalInputA.0 = 881a1874c800db068b5913d195058d0726458de3782ff530af1a761f9628547f
+EntropyPredictionResistanceA.0 = dab13e0cb060f66c1c83fc6fba46477d1a3c802edd7594db0b297dedb9ccbc80
+AdditionalInputB.0 = 0c27cf271bd7931d187ec6f56038519674468fa2e7e6f994904c9f1afa346939
+EntropyPredictionResistanceB.0 = 0c817f05658fb9b4c99938ae2140160c4a16d548634a353bc285cb38d0e93243
+Output.0 = 51e042dd56a193908c9018c25f1c1a8b5e2734b055c3b7fde6a8ba9ec2b959349df29295abb0a24b4715f98d31de0a369e6262c2b2cd49c5462b7ae284e921f5ad2ec013edc1611343c228683f4170f34a75854b1b656d226e294172d488c10a415f09dee70984b9c49e8d36863192301d1762145e0d9e94e99bd30ce8490438ed050f418cf4ba0b07fe90a82d1ccf38578d99edf0518c4a758a199db4d3533c4dbc55b1da19840b8f365a574aa01647819032dc0ad641388c2093ebd4ab5d99
+Entropy.1 = 5b5c670d3e0e97a21cfd5bc3d038f0c3d2578cf3147f5545e5118a04c4eac727
+Nonce.1 = b50734939e2fd0aba704932ccaac42af
+PersonalisationString.1 = 4cb0e590a1d575b6a2df9cb0243895263c894a990b6798424bea9ef199761d08
+AdditionalInputA.1 = feabcecf0648665b08a7c690add6ff75744de3916d5573145c35517808605beb
+EntropyPredictionResistanceA.1 = 316525e3fc5f1dd224131d65f8d44ff8420891c0af7c78f9cf766097fbf0f8bf
+AdditionalInputB.1 = fe81cf8978798311ee6d1c5d6145b3832d9ad1a1266fdac0f4fa230c631e9ba0
+EntropyPredictionResistanceB.1 = dd131db1801275c28081e6063c0c4d6242f96e40fc513608289f378bc4f18518
+Output.1 = 62aa5e9b8a07bed2a5d3eef0c73bbc841bb8cbf544d32a2889806ba501c6768aca98c19b83fd4fb2cabf120c05716b9eac9b77d561ffdd69682308f80fcf1c78409f3b21749bf71abdb209660716a39c2562e8ae1b3478828bf35ec9d3f9712d95f49a36b9eaddaf1b249f023c36d09ff1b6f3df6d10e4e336763edef9501827d5171c507eec405bae52d56fd62f90f5c58a2f1a7310530df15ca6b7841a2871a37cae583e6b388978c118b9600840f5540af529bce0a24da8f906f601fc270f
+Entropy.2 = 64cf47e52f758df802c2b37a4841c73a3228738d14b439a7d02b13fa3024715c
+Nonce.2 = 744721e49f25a0e73e821f69786fe2d9
+PersonalisationString.2 = c3f0b0471d5273f40e74ccd71712071fa411b72b0f5a98c9eea9a5f7f176967e
+AdditionalInputA.2 = 4df90039bbb54d8753b19ccb6250ffceb7279c05f6d69b5c47801c6fdeb1ddf8
+EntropyPredictionResistanceA.2 = 1ec1cce1d1cbf2dcbe5bdd2371c0a5df050841b6f07b1a2c0d064bc5e06ecf2f
+AdditionalInputB.2 = 181d12bb126ea840bbf9e6ff5e68f8ef53f69071d223bff593a63e4e0c65ee1b
+EntropyPredictionResistanceB.2 = f9904928febe0bfaf3626df5bfb79fee1474cc8dfc3ae268570df2811bc3ba3b
+Output.2 = 8cec490ebe0b4837f040663de29e2c6dc801d7953cb2416d245ef66173e5d7baafbb77fd2c5ce69b4b8995bfe51f5f33cfffd9e9b1284fb8657bb7a3c26f5aac500cc7d3737fc81418c94d3db1a63f4922ca49803c04fdbc9488e21d9c4bc381c48bd9f7e5cd1ed6c6fa9e889e463dfc3a313812245a66be220266707a5358e25807ccb11f24780e5ef82c84a8803f72dbd21f55d96362d7cd8abbfd9d21f4e3dfac33326a4e538476508afd87e030d92328a91c91ffb16b054740dc3d0a2130
+Entropy.3 = 690a8be904c75e41342c8e2548abde2e465612a632710179ccb9c1dab76c4615
+Nonce.3 = bdaeda1587772638a61747738b96cfc9
+PersonalisationString.3 = 5dd031fb2df56c510b3cc3c02fdcf6cf3ffa4a881e7475a8631073b3ed5e3c62
+AdditionalInputA.3 = a0a861238b2b9ea03582eb4703bc33921b5376c27004710d416ff921d6e6fc60
+EntropyPredictionResistanceA.3 = 4879325d2cf1cc0269d877eab8aa233ba8d7f1ff44e9118a128bcd8cc687eef5
+AdditionalInputB.3 = 3cef66f75aa682ad5430bdf0f01dd1f2c3492fcacc6f80ab351cfacc1c6b6ce0
+EntropyPredictionResistanceB.3 = 8940343d27ba1d800aed9e2e911a8c83b8460f9d72c7b92852cc178d3d0baf6a
+Output.3 = 92b337a3364059acfcaef789ac1ae09c9ed05fdf69f5d5da7a1c9b6962d3a3c71a4041dc234f7be58fdbb728f8f5fb10404558f21d9b4c818fcadf5d6bac8bcb044e5b2fbd26ee08398dc8904c271e8d3d184bbf61f77c62fd3c8f1cc1ee2f8c4620c513f3abf5e312b431e8608b29cdf528d892ff03bc0a9cbd202b9da1d052ae2bc2dd8723198a1b3017ade2803c3dc8733ac33ddbdcef7a9948d64f72da0716b32dc6eea224bd49a7349a1c32e8e325ac11e5fad8353cf85d9eb4b72b1954
+Entropy.4 = 0eba7b06309f0dc4e2bfabea57e1d01a5a3e711398320925647008abf19cae19
+Nonce.4 = 4efbff93968c0a7d1c7623ee1e3987cd
+PersonalisationString.4 = 69adc69e03cd113c34ae6b89c7c2fcfbe987e426da865f7c8e052da4bade343a
+AdditionalInputA.4 = 729489cc7ba4f3f96f77ff365fd5380cd83cc7b17b150d327c5b7632f1cb0460
+EntropyPredictionResistanceA.4 = 95c3dbd1b2ba94d0b2d416fe2f2f6faeab46646a378e931bb5daac049333129c
+AdditionalInputB.4 = 59892fcf99ce719819774539ed4f10edb7cd35cd66969137a88ebe6336da90f9
+EntropyPredictionResistanceB.4 = e7e20e53117a0f68baf4c86a3ee5e787b02b53b1e0140430e77ca86f242d7f90
+Output.4 = 565e3e392a9f364df0b575d9444aac262f58ce12312d5ac9832ae6351b6aae0398e0bedd3074f57bd4e9f0e89a50d627ecfe11fe9aea09fce563eb34efd27610a3255f81f953bb3f222b15c019b9d812150f7a1f19126994c505d9ce5c948882a1f6c5cdbc7050461ccdbbb7aae597dab53a12ea6bfaa4d4710188d690fb0a0a34df7fb6bba949fd6a8565fded8e4832ff7f6b08a653a72b8b88782b8d77c1f217e8487163fdbddcc88a83d8bdad479ca75fdbcaf02250db39528456942119f1
+Entropy.5 = 9dea5f271193aef61bd72c76a581d65eadc8002b258a4d548c7ad1cb587a5f68
+Nonce.5 = 1e9709eab5e146833b01a79a34c352aa
+PersonalisationString.5 = 895e5039eeb3ea1d197614a683c84d7780ac8724192bd6c35fe81137bc23e4bd
+AdditionalInputA.5 = 9e8669a67bf80c695889a7e875a9ad1954b91e4bddd0848313b4efb4b00b14fc
+EntropyPredictionResistanceA.5 = 642a7a376595347c0203a8a0456af4e9859aea62c887166b3483e0c7acdd5b99
+AdditionalInputB.5 = 2e93a8b96ae1966e2a052db0d5c2d5b76cd7cd23494bb1170a33a9ddf39b21ce
+EntropyPredictionResistanceB.5 = a1b1a466dc0709cc6ba133abe29ecf3f3150d664d04baef8854fd86a5d8cab19
+Output.5 = 71a0ea8b9884e979f4ed546cee3688ebc399b41be38578f15b99d9621de0da3e671182f6da612334edb8d3a6d5e34c2872e277942854350526c3e000834bbe18cd5f2f336bcfabb42c4aaeb19b8cefa3f7066a89593960fabba244812d15c5fa7a7281067c789745127ee2b63b14237136c54864bf86ab7c377414a7933b829fc3052e8c26c698459a83b1990c093305372aa608c967bfda719e98c4c177764b72d184586f7b63a8e75f78c9e5e1dc045c3eb5b30c7147c69100c2cf910d4f3a
+Entropy.6 = 2b4c85aac528f5cf44e9018795a1e8f810220ce318aa174bed9db372602c00f6
+Nonce.6 = 8ac33625739f299241d1a8381372537b
+PersonalisationString.6 = 799a4b3c9f62c2f6aa9e91604e742dd06ff9f77b15d3799684e1dfcf029d807b
+AdditionalInputA.6 = 1d15f59cb3e102d5ff47ad4c0aae13631ec4d300de4247137aec5b43e5aa4f79
+EntropyPredictionResistanceA.6 = ac392411a1d6849aa6610a177743afdf45cc524838fadf1b5feaaa9983ca79a4
+AdditionalInputB.6 = f43801851946f97208909f1ad0f79d6577eeda70067886b270f55d626d966fbe
+EntropyPredictionResistanceB.6 = 508b5e4a275514ef4c04c233c3dbbca32a00d0a1628323b91dacbe499c1ba928
+Output.6 = f05e50192528ba1185cb964324141c1d195f6e26c42164052a7b7244797c3084d48bc5e6e1a27e64562cf2fa36b4de30132a082de2f927059731d084e2042eb7720932ae8e1741f05f4c75079586924cc43a6cf3f5525e037b089674121c2741f836372f219a33bfcd910884abb166eeeed1840672663e0455b18bc7c9fcf20967b25dd77eb37e00d8fc40b0788c08280b0bd8878c504d982db4d3d2476f5fe6785b1959d1bfa2762c00efe436cd217b6d01adbf7da08d23254f1be1991d200a
+Entropy.7 = a716af9e058eedbe937ef79ee21cbaf4ac1ed0e2f4863eef4ca1e3e972f33326
+Nonce.7 = eb6ecfa7bc9bacd3d90215a3db843b24
+PersonalisationString.7 = 648aa30cb2687d857d309f702f6dae1f30edc824493d6e83a9e26d94f28948a2
+AdditionalInputA.7 = 39c5a6514f3d399ac41b2640fd619312332fe053abf1b2a19472a58c28345347
+EntropyPredictionResistanceA.7 = 343edf7ada9e440a206df7f38f8cbd1d38159b8511f2a93d1f0b5ace8a89c0d8
+AdditionalInputB.7 = c912a1bb84f7aeeef79d73347097e09f6b8fb7ec593176cebbbb56af866bc309
+EntropyPredictionResistanceB.7 = 23fe001656c3dde659874df88dd60056ced293cc49d64a71ee6b23199c9b20e6
+Output.7 = 5387674cec52da2a9743b2556fa9874c0866e579079954cb357f17fc069c2e345c1ca80081040d620fba150c22eb1b8b2c7df082f637855c396ad6417fd383f8e93b7bd91693408e951b7572269c0ae65be8bcc9844f9fd8401e68f6fafdce195162154b34fdd5db8559dc11cfd3cbd3d391a45065761372f60c5182fe4cc162304061f86e666326c3332010fd388626cfa9ce1252982cae7b6eb1b8208c79b7b689aae9084fd180d00962fa4eea79f612ab7ec5fb51394f6f498528ad5860e7
+Entropy.8 = af405b42f8a67c349bc10d4d0b97f56cce433e1d34cebcc75c2850010d20cf74
+Nonce.8 = f61b23e1d2f964ad6c9a8d65c9f87749
+PersonalisationString.8 = 1cbd963d49b2553a9711687bc50743d820588049cf097c100739f857b3928fc0
+AdditionalInputA.8 = e0d336ea552a6dbc132f194ac9ab80a34a54f4d331a55a070dde6601d6d9084e
+EntropyPredictionResistanceA.8 = da279902d5c30fb67207d72be55451337f34aaa8e598b9ef55fd36224ebee4b5
+AdditionalInputB.8 = 91e882daaa304874fb0c063718984ac53e1f0716ca8c9210bdcdddc142c84082
+EntropyPredictionResistanceB.8 = 524a93f1513fc21fa984f0a76c2bcc98ddf39823d0a87d501b3515e3ee9fd4d6
+Output.8 = 0acb19f2a65bf0e1d9f9561d8731fe0f0c178443f00faf427973ad45f2df4f4d21a4fdecdf96c34be28e389d8caed96b515ecb215ca915b38c715015e1b07949263fb65517ea4bcae361d76c418cd2c58d29010ea79b9420d1cedf937d3aaae7e29c2170ba88c8328664d884ace90e88c66200033d19ffd52f668b00b0df088b7942377c1aec37b3c304521c394ec749efbb252669e0c0415b8b04b995fc224903b0843fbaf0be1ce804c9f14a5e97afa70d0fca9cb708ad20388730aa9de020
+Entropy.9 = e9ecd00efafeba4fa9cbab22b1b5288c98a36ff1d6856592a288325968c31d7d
+Nonce.9 = 88fd2be5c82d79413b33c1dbe9728598
+PersonalisationString.9 = adf1f50a295d88f68e8c07a180897d8e7b49f7cc6cb78a3b25ee10b0583a0f0b
+AdditionalInputA.9 = 82de6a73568ade5e5b0d8ae37c40ff25e858a7055346020c5e47feddfef75680
+EntropyPredictionResistanceA.9 = 22ca2c8a92e7812479c14fa292a627a8909c3a953a2758d42f22a18682ffa219
+AdditionalInputB.9 = cd0e15d764d2355ac9f1cbd5ea519ed1756a3bfaa55e3783b738c03bdb42e371
+EntropyPredictionResistanceB.9 = aa9908e06f521be8fb59ad58e5651aa9d6b95983e23e54cd57dfc82b2077bf96
+Output.9 = 1e592e5003fc0f3f81a7aef2272527980cc5a9ac7286a621513b9c7ce2ea94fbfa255ef2654d673bb8cd13f3a033a7701304acbbe8d19b82a61d2e77e7251f98b0e28e1a694f9cba2c86c7c8cb20d9c2986e52052f701596e3c837af95b166cd227f2fc00edd3ea62b57f60262712b2f71479569c119cbce9d771f8a2cfdf832aa8d70e0a912978fb2bb33b27a185fb3a4caa3a18913aeab095ac088d14381802117af0cc1d97c06fe9730bebbff0adf2ffac5995d299e4defb0722bd93f0799
+Entropy.10 = 898a6c47a5cff500ea0f5b18b5f0b4bcf7e75d6d7c92025f9920c666dbc1c5ff
+Nonce.10 = c48972e1d519428f8d61dfb5e300b48f
+PersonalisationString.10 = 9e16568a225b80e9011571f3b55102cf6362e26b8a60fd33680d4e6625738e5f
+AdditionalInputA.10 = b1c65d6e51ba043f63b4251ed58e9a8eebfc289f6285705f8ef44c202c9b4a22
+EntropyPredictionResistanceA.10 = 2660ff53e1ffaa3950cffc50e17a874182236fbb555d35ced33302ef87b84c0a
+AdditionalInputB.10 = 245ee741a2041eda22ce7053f8576c0a43eae868fd95ad7d58bb921c155b1b53
+EntropyPredictionResistanceB.10 = d31e87441ae365350452a39470567bc009871a3c9785bda4569af33d03d46f08
+Output.10 = b076210688b06ab6b57edf68126dcdfce82b6f9285ddec102ed60730aa7530863076186a3f7affbdd4ef081b7f5a32fb461bc5755ab4f860012631b74ae357fbc3cbd64f0eef8789c6c9dca894a41a005d272b4a57e761f91d221636d0ec7a49f10bb1b4264938604ff4dc7bc97eb799cea9e3e1d7a9b4bd66d88d244e22120bb311f502e66e60c5c9e42731ad320b23d6b06ae92a132b093ad924a1a7e08b5dccdc50e257bfdb63bf5705350588f61e93e4fc5042a2cad1bd6d9fbc82e875cf
+Entropy.11 = 8e92836dc5e4bbf9598803efb0d3871e5418cf18f379479bbcbd9262558af6cb
+Nonce.11 = 6d97e73decb8781c30f69b61c1f5c91a
+PersonalisationString.11 = 6d9afc769985218745235e5af280eb45cec81a2e920c284ed5c77105489e8f4b
+AdditionalInputA.11 = 711672f2ca12e7d8f32445a87163bc00f5d0f52c2f6799ba513b68c07c350de5
+EntropyPredictionResistanceA.11 = 5ea1f10fb1eef74b480e583710d9a6a2e57f8cfc9d0215fa73d1ce9c1562f3cc
+AdditionalInputB.11 = 426aeab2cfa56cd3146c0eb9facfbc048a504eec3273256b5e4db3d66c89560f
+EntropyPredictionResistanceB.11 = 34be187940cd317b69139ab9aa58d064b6bca59ee6460c3db4e8b57fab0186f1
+Output.11 = 56325373099fc1dd194555c3a1e69358fc7f80fe6610412cb31c14cdc70c73a74d040746c6cf388fb9718e7446888c6162de73ac097c32f8b4b00dd7f115fed1821d3786baaa1f64885cb93c75531e99171f98d3c3576337c1c41c5bfe83f94cef2adebc88c0790398d4c071488699edd599797c1f8f394b3e00e66bc4b68a7cacd209695961713c3bf2c9a5c8589d935e171f775f366217e2634ddf0db5f01ab31760ebd9ed9724292bec89db06d0145fb824a76292a35f39b01a06c43510a6
+Entropy.12 = a4f1fd83e53a406163862260fb9e2ec64d4af74f5fa41ff56c07c791b6bb6abb
+Nonce.12 = db203670b1849afbf0931206ad639379
+PersonalisationString.12 = 39dd79397f91a97432e5124e7b9b85928f62c598ecd19626070a81a5a8ed564a
+AdditionalInputA.12 = 985724541d44c8b865672759c8d36ded75c2189c2281731888a741b305eb4161
+EntropyPredictionResistanceA.12 = 8ff06fba8dca3318c29d9161c0ec18ec5d7d66847b1a618bb0e4f69fa1331fd1
+AdditionalInputB.12 = e2dae75950e417c18f1c3e5fbd66b1cc9fa617aa695c9d03d8768b9e197fea80
+EntropyPredictionResistanceB.12 = db5d5fffdeec5a2e045c588dc95a5d5eac6d35502ebe2e6a57318f15af53e001
+Output.12 = 703ab1f6a5332f01fa788cf73922a9f6cf856319772eeab07b4795702562cde350a8cf9395976fd227b08134feb469ca34f675c9b6f176ad684a5b0d02b4c135a7174bf0604a1546e7d8d978ecfd8cb6ae5efce3b228dc95cb413b010732c3e7f9ef8e547a93540e5e4aaaa3b0e5a8f45b83bb11209a03883c54f41e494fcbc66c2d57c01002137567ea2f99f7a1ed6c4c6080bdaa299d18f57bb3b386278a78b2ef23a03043e850bd9fd742527c45308e5b910fc586f9f21de7022d02b1493b
+Entropy.13 = f331ebcdbc0d2dfbf54758680dd49dd0bd666d0505ef6ba1c4bbfb7dee62edc3
+Nonce.13 = 4ea9063632c8e6719bbe140c3c840aab
+PersonalisationString.13 = ec299e456cd1985a3f1022d5c05f0ef9040cc8b8297ba5e404d92a6d36c3578f
+AdditionalInputA.13 = 954f464877f7258f99acbfb9adfe4eedc89da71ca82e3581fb5bad127b2069e7
+EntropyPredictionResistanceA.13 = d66e7702c384700921dc1838c6c5a832c650a474e74270c378abff021d60d1a1
+AdditionalInputB.13 = 515f9e746c7407196610bbae963b9bc15b1658972a30e62be6f78caee1287e88
+EntropyPredictionResistanceB.13 = 884939bbdc51c547c72c929c0c73ca7f78668d33fba197642be8ac2d41cefde4
+Output.13 = 5aa30a796d46e789c498352ade179f0cd3336418fbeafae0d10fbf7798917672288b3b2a12267fc0435d88b4e99809c1e3067f0d65c910b12a330334b6a23d6d30910d301438c2c999353e1f78019ba7b20eaf68b499ff1e88db0431312a66f35305c4f3c3a2750c95bbc07ccbdf1e4d123eec378b9be8894b597bcc029c664e59e2b3c23fd72841af0ddc9374ecef21885a0b54d13186dc0a66ed3c3caca9e41753813ae61015a952142bd4d7ebbaa3193598be1267be937745fb0de09aa70d
+Entropy.14 = d99ddbd82ce9937cda083e30b3da47a6e6ca08b8f59f2fc934bb3f78e748bb28
+Nonce.14 = cfabddb375efc5f2025a53fd073a89b0
+PersonalisationString.14 = ebc2193d4a97b97d298f1305b2f7a54dab466f7c4e444831651cac29a6c5bd88
+AdditionalInputA.14 = 6826aad41f8ac29e272884cb6d21300c7b0b3ca37205e1720afaf9f716f337ec
+EntropyPredictionResistanceA.14 = fbec391290863ad862aa56fe6d945044e879ca05c3c019313f810dd559fa0e68
+AdditionalInputB.14 = 5a7434648de82a3552e12aff800093776ca3e86565b29c0b3ad6c0bc3180623f
+EntropyPredictionResistanceB.14 = 2d6b77ff7e612c7c40cd5231eece4018c5b3c0d8181ab44703f7a04c0a1c7c5e
+Output.14 = cfc79a89a0a55dc9c6c6eccdfab5a9935335e806b73bab7f5eff5f9fea6aa3f47bf31f06d987a94e2bc2a4a6144ebe94d6f5aa8fcaabbf86a37c8d412207864322d3057b89fef358740c5962cf9e7c37072847fcaa6db693a5238ef270e8414e2b29448bbcc37dceaa75479c2ac5fee2d6fe9ed68516f6dbd90135ddcae8a12d1c1595e0edc34ea2bf00bee7ae773c240c2bc1ed828b7ff91a676891173eec1dabeecb2184df9186c3bd833e349351481655bda91bc0f4e419fb78e426de6b39
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 60baedae92a802a4d55ddeff506edb24f144af3e6876f0c40df5836bc37f55a0
+Nonce.0 = 04fd59b88601f91860346eb07c372227
+EntropyPredictionResistanceA.0 = 04056f0b7d2313db41098f2de950702c40891711c78acac97bd60f36aa9cc60e
+EntropyPredictionResistanceB.0 = 19e530ceddeb670d2fdf47c23c70dbfc2fd1d31ccf533082f7c617fdb300681c
+Output.0 = 1a2d5613f3b182b4d32f5001e49b33208ecf9fd57eb496afd66607e4f4c9a127036dcb4cb0c418de022ad9a221e47b45c5cfef05b4a3fee13aa3945340a81fd453f966c0a2f6be3408cd9575a5f3b6dd34806a7f1d44f66c42b2bb72bee50c9a5eff95dac73561116e7240509f8974fbbdac92a2bfbf3484ff52c43821e2421f17bfc9bcceb3524874adbe490c176e267d6521f2dc5550136bfd2468a948d11294e3aee9388585bd90967ebcbca033ff13d3b092a4a80629f413948a11403897
+Entropy.1 = f27a80668241ccf2d4b3af07bf5f745ffc6fe53d4aec4797e3e5a5c8d98efd46
+Nonce.1 = c359573c1cfcedcf01fd0004f435a8d3
+EntropyPredictionResistanceA.1 = 4960f72deee1a5afaad7f0739421adef37a2b9d752cc522de90aa43ea84680cc
+EntropyPredictionResistanceB.1 = 30b0f94baf16638ce18c77f12c16ee3a537a27b1af13fcfac36ba38754f7ec22
+Output.1 = 8cfdd40e86bb43b5879fb6ea499e7d8348134f598b0e3d625a5bbe6ab70735c51be1d9e7ed86d6b32df8af8fbf40a09f3df397730fe6ad4ef5b66b5defe862c466729a162bae99d36289dd3e10a6050be83d1b3282990a8660d147662cc2cb290effa315de17c294c06216bd3c81ce2a05c702fc1acbdbf2d92d9192bcd40866e955a6c54ebb7a667c917b775f33d5638aa22bec385abc0449079c870808c87e021426ac8a09af95c7912785da75665f5d038ec503204c6cd42526b653b4e3ce
+Entropy.2 = 15a16c7391a9a9fa10cea424a7dcc5d82288ce12c3da020723f6b9caa07a688a
+Nonce.2 = 84d9f0ac01ae0144aa52f1cf551a6db9
+EntropyPredictionResistanceA.2 = 3db85fcda7f9002885555c1189468dd6328ba5c5c88f6c7de8ae339a46c6125f
+EntropyPredictionResistanceB.2 = 2420837ccb62619812b4d1593cd094fbdcb814eb0d0528d1c2ec6b64e2fa54dd
+Output.2 = 50d1eeba701fbf4ae1d686b3f48a2b4681f2448f7347095a339d8f6071ace73a569fd8c0a322c3aa7056d8629c7d4ab3b9ff1346b8aba2fede466158863f7cfe7f83a980991120333eb5c29720f2de7f3ba255c0221b366dc064265580fabe7c5c3f7f722143615d573cccc129fe59f33faf13bd5b561ecfcc8d2cc54e22c03158479a5adc89a5914ec6f540062d0c8157db76662e22915c4353ed5ff6b357b151b74b5d302d076a075d3eae2365dc8561857b59d77f76c49da981d4ffe239ef
+Entropy.3 = a712c579a9b05e2abaed0daea0bd7587fc4764ab2f0c01b997762cf256727c90
+Nonce.3 = dad1e6c80902f356de3526a0929c2ddc
+EntropyPredictionResistanceA.3 = 933bec67cdca7be18bc037deade85995c1b7bdf79deee95a8821ac691a40c2cc
+EntropyPredictionResistanceB.3 = 0f6ac83caebd305c570d6807f1fd56a50db4b4ec92562387bdb56543bea47039
+Output.3 = 4942e80e5c6e9063fa30bcd7d79e70d51c30eef57160dc9562ef56758f9fab10791ea290e13a5abb934071186adb688ec1d9cd4cc03ef7a4f1e014d79bd241b79516a4bc838937be244e492183afb57f96f02e9236ec90eb4e763f68978f28bae60182ee8f7c0d0782ede363a13938ba6d967f7ecc2cdbe8ab6e020209da95f3f2ef832e4dc6c96d369ee380ea7584b72551c7cef55d576bca51d493a6c5584bfd8b5233b699e19c939001de725f46c131a5c0b09def5fa93b8d23a3c724f941
+Entropy.4 = 6905635770b001ca529c254657705675840b15b5adddcd60f09349e43ca6289f
+Nonce.4 = b3e6305163d49c324c039f18c51c3e2d
+EntropyPredictionResistanceA.4 = d8246558c296938614ed4218d51538075fb4331157c57b1183b66d943b8f7ff0
+EntropyPredictionResistanceB.4 = 87a4db12e3dbc895aa814e6501ed0da546ac134df8997da65b4162d808ed778d
+Output.4 = eac4568b65f92ec773a2f8a56f94d02d42a9571103e57a7c4dbcd713ec2934a4cea13978918d486f9d2a4f0a32a0f53f24587a04481bdad4d2db80fcaa11013f5f87d493b5ed83237f4d8204f085348956c3fadcd082017fe768355e2ded50f549fc681fb9cf62b56c392851cf30ce92cf3a6396fba4c31e9b3c23f7ce42620243159ad4b998400faa3ad90383e432889d476beedaf002b3132d135e563922a0e46a052323761604d2a8a8e82c2b185aad9b7a3168c6100dc7ccf5a650ab0250
+Entropy.5 = 2119a6ee0d54fba281f860572e433626a21bfa77cf6455254035f97f9b3932fc
+Nonce.5 = 3a6dfe6344a38bcc30348b034c06d163
+EntropyPredictionResistanceA.5 = 80de1f6f8f5776d03d2ec7c9e416ccd244e1229cd835ffe82d8d61e01446bac0
+EntropyPredictionResistanceB.5 = 81b15b6a76b66d97eec1b3804c25841d242e6381f24d1ba8708623a0482c36e7
+Output.5 = b9c70d841a9031b1d98003b2256252ebe48547b5f064d680c85cb95f4c29c5dc46cac98cc628d08b7a9d634eeadcc307f2a8ad9a56695c4514edf2c037189c96f1955ae7db0fc775024acc0eab5b8e34c8c75e9b014c8fe355a365039523344f65a2fd1785507688123b9815b32da9a59a52e58bd93795d8d284e7e66ed158433c84a4b28099b306aea1640030ff9fa863906f34e2866b2776af413eed5fbf0d04f1be248f474845ad82a44d7de87eab354850df5a53196328eb01feef576acf
+Entropy.6 = 5e0382387df58cc893865d6d7f422ecea1449de8d70ce1f3e410e8f9e6c2ebfc
+Nonce.6 = c1c73a62815df26bd2566f10c37fe855
+EntropyPredictionResistanceA.6 = cbf89b5184aa2ecbf832c09e2d5a1a670328f1302c430595ba82df3ac5f77f6c
+EntropyPredictionResistanceB.6 = 3c1491bbf063520a3f3f4e4c94e45e15f40d7e4f71b801745bf7e2de75c93736
+Output.6 = 03095523fdd0b378b844a10a272655e02e88ec2a8bc78218271be7034d5840126610930db290b734d45b00948db0016e102e9acadb4fdeb25d4f306f867f9306e66c8e369923118836e4af5c85d03300d75b461cb5eede1e5899dc13a8e07d032892d0cf1905c0c4554043af2004827a4cf4ccc47b6b3d046655b3def41cea8396a37d013917ccc234ee6d500caa70ddb2f95940ad6628e098fb529d4922683b631ba8ac71f9d8ce73a001680ff5f352b0093e71db048fff11049511539e1204
+Entropy.7 = a926615e037efdd010ff994e32e5b2315c43c77bfb8b640b24c1e3528eaa9d28
+Nonce.7 = fd765818523737d5378ad9f47a21bd9e
+EntropyPredictionResistanceA.7 = 41aa619d3e7c9fa74c747e413c7c42fac9e9e1bda46b18ae504a851f6e74db8e
+EntropyPredictionResistanceB.7 = 65ade04275d5a81a1d43a3e3d287b921611ce9aaf483fcf865a3c2cee0081ef7
+Output.7 = acf170483087074ceb7aa4bb47f11d023ce198c6a9c7e494e529238b4d91b74cb46ea80e40aade60941167330fe690432b6d0e759028dc3df3268d3f1f22aa800057b9aa0fbb021272c3ec124a48822b78e3ab4f750df408ae072de1949367cbafa4510085a2b7401574db3b4641b78a478bf1e7108f4c56b8d96191cb84fda69e58f94a8aef4d3419431b4756ad198a86ae51793af654714541f154853afb50b5c2bd9a1f0734170aabd57201fd914eaa614f6a65e3ff868759377b8708c986
+Entropy.8 = 16ac4aaa698de6f6ad164727515152dd4cdaf8a46622f01a8ab21b365ab4f628
+Nonce.8 = aabc06bc5fb9104fa46278b39defb9c2
+EntropyPredictionResistanceA.8 = caa38666e75e45ea1e4ed4599fcd3c162b9acc8ba9d7dcbf37880a5f3965e9f5
+EntropyPredictionResistanceB.8 = 5406a62e560133a9fbf7d62e423aa2157edabacdff3288916f0202fa380e865e
+Output.8 = aec261cb3d5b6ae499f25e6f524fa9648a97ba03cd12f737611c65d4183238a5fcfb79f73374b262aa486363fe515ab985e52aa83cdde60d4120a91c6993978075e81b70660f55fc843e3d3f5983ecd0e3af7253ceb9085b9c333be0eb41f686f1d1403cfc14efee0b310d28b4e0f8910bedb63d3a69d0fc2feb35bee5bfe9cca82d01a599e76cca62a769c1915feaf17516ac0e71b1eb9b3632a8781f7f748bad9eb125dfa0d26a209b8a39657f111f4bf4abda88c8b216d491397aed3a73f0
+Entropy.9 = 44bf1fc049f5cf6959c6c8e5754689f552de97c3f4720221dc32fc4e49261aa6
+Nonce.9 = c4f29f53b9387234d1324f4fa2a38137
+EntropyPredictionResistanceA.9 = bc4855777d4fac4098d10c66bc2bf8fb52d848070a58afd4e713d5fd668072fe
+EntropyPredictionResistanceB.9 = f63f1176e8b7ed89e9147d3b8edcf7fa175c017ffaf0a2c247dbf86d9147f9e7
+Output.9 = 498c2205c5c96c0dba24bd6706a9294952664481f62bf5df99b07c891b7f591829c24aa9f819a8684dba79c91a493b12dcfe907a11fdfc99ba572a1deb5ee0a3fac249a47b4a4c7073acd481863c56385b02261dce01918ac3b25e4c13dbc320868d3f15d42583a0dab89ec6181a88202ed6f5af196cd019e3348ae0eae5091f7f283b0b85da8c6459b39c5e7116eddd14663055c108a45e07c4e1a8114e787891944cd820943ee3cfd1fe1b96bf88da9715e3cd52086109d7101f2a0d2b3d78
+Entropy.10 = df949809c25f02212e6e9bec751e2c82593cb47279773079c2ae3e3de182e7b0
+Nonce.10 = 852d291d0ed8065fb222a0533b5d242e
+EntropyPredictionResistanceA.10 = 2f499ee8623f29bd7871bee02fb9af704181aaa3dee345daecdd22f3d1c4c031
+EntropyPredictionResistanceB.10 = c8b73a945b0b4627a57a8668a8531f0e11656dbf472c4e93ea27821bb5709c52
+Output.10 = eb3e7e17cb031069268742a4627e120f25d9f239c3a3ebd07c0b0d3a3fdb227f0d263dc010f6607c810b5626eba016acba0077a0904eed71a6adc020a3c78090ef04cea635553386edde3d3d9ff0a04a5caf87e5525549f43b131b1207ae2f36ebabd161dfdccb4cfc27b01169063f5129235dbfeab921b15d6ac5e4756d7acd74499fc90a9e82a5033f5732a2b92b0bb2ce3a60dbd73e4ea4a8367de885e2db2c781b59c14a20116a4e574958be51e9cf19a0b73e950c863b56678b742c89d5
+Entropy.11 = b6c38829969079ae9d87f705780e46af5b6d82fc2dca9ce88af6810f143f54b8
+Nonce.11 = 4eb880cd63a4fade7e3c4d287193d073
+EntropyPredictionResistanceA.11 = a219d764129e0ddf5eab663e26ec11575572658b45123db0a355a5ffdf307010
+EntropyPredictionResistanceB.11 = 47a0ce3468f3540c11dd20457f9f8a46a9cb83f1e1f0313a79db913a0fd9e820
+Output.11 = 711dbe683150b289f95d067242e7267cff22683e99deaae940df5ff30cf2258f36612ef5b5115d2142ddd69c03d15836d3ff6e7c55477acf08a05c63ba14039f5813f44dc3a262e721bef07a28a1136342302903172555e668d01877d9c1abb35f51a1b24563c7ec00b229db00a885d401aac247a1779adc5d019662d0fdb82f7b2bd81006b54f3936d93e212c16028ffa1fcadd233be29f80763fd2d432063fad2d9f3d4c2668726262840017955c50eff07d0ddff3ecf486b7e3b3d5b9df64
+Entropy.12 = 81c075d45b5b9980abb74cf25654704600e16fdd9573b4a3ea2d4efd7a2a2f21
+Nonce.12 = 24d86fdbec8867866a508f2785bb9309
+EntropyPredictionResistanceA.12 = 307ef5a04e9bc732f0546423ff586ba0bcce0aed59502cb02687a0913a63c701
+EntropyPredictionResistanceB.12 = ea3f79a8b9c1f38b89ce247a96a87761ee7d432785c8ed50b47e0724fd993280
+Output.12 = eb638672ccec9a875a78869a400408a9fafaf0a07d7ffcaa28420feceaad604911bc1c831d6b050da4a00ff91a0e0ec7449b3596e8d5945ecb24a269b62d607e0a36408d7faf831cecbea671c121a54e6802af91e050301c11e8e8076c46158b5d1e3b7825e869233bbb00da93dce4f7f1fe810199a8a3fc71b9678050360315867440c27428a6685f113ee4b001de2f268138b89ef78ea16d3a6e26715dd45642e1caee58ffc94b17a9f4e97b5ccfcffd55235dbf1c449f9edb10be19c2241d
+Entropy.13 = be4d5acf5ea8bfccb729e7b78fb8b0a49d7f1d77c4c117c57ebe38cf6ab39adf
+Nonce.13 = aaf88454efc8a9e56c8ec5d54d4143d1
+EntropyPredictionResistanceA.13 = da5e2a785056123baf93731dc91c5f6e6bb391f7aa82d0525d70cebc9b086c16
+EntropyPredictionResistanceB.13 = 32e0140b31ea2a60b9ceecb4073ec90be9acc1b400695d475052cbe96694c523
+Output.13 = 502e02d5044e7bc38a16539338eb268c2f67f721e0ec26a1331e1be4870e1f8d1617e944d6006d244fcef51b1f054015be083df23174dd5b898317b027a5543939cf9d0e656a9d8faa8f735167c91618488fc5bfafeb931999fac3cb05693fd9248368fb056f75b48652b13771629cc07b0afb95338358db5865c15300a6cbe7d37e2f95607465f5eb7137146ac6343e520667997f16785f7c172e2ce692b73d047b78c41357cc7ceabf32469c8d9ddb029615454b55d2668eaea25148c3c510
+Entropy.14 = a57ced7574b5817459d1f09bb8c4a2df39c79e94798137e3d85ab33a21187eae
+Nonce.14 = 48e7394e98c4e7a2e60b90e6a5a9f854
+EntropyPredictionResistanceA.14 = 6cc5f9e579d80eb1e93876513892307c462383f1b5e59199fe41211a74634047
+EntropyPredictionResistanceB.14 = 2672d3be2c1b741a8a60662e24e2bd6a674def98b16994189c08d7972d275f6b
+Output.14 = e7f7f113778234b68dbef00b74b656a52eed3cf3aadab8e5d96d1daa5c253f5ffdcbddbc8dac0acf43a7e2a18303a6ca389db0bd0c5118a869e7e06115df5315ab9962a782281c5c46823d1067a8a5cef28c7ab7aaa70c069841875f02f294e557158da3adfc6c11407d5dc3c783332b4d3e25001b5b1e48dbb45a5ec0c8fbc0343f8d73963b7928e501f5dae8716746a835e121ac748243c90d3d3ba22e11cffd76f53a6e372546e0fd333e46df1056197e5a44a8b69e5b923637212635e6d4
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = a055bf416a4f0cc5f0b7448021a35a61474f83bb4838bb03c99d6155b4365e52
+Nonce.0 = ada8b65b7163ad7eaf98974e48ea7843
+AdditionalInputA.0 = c6066112b2292cf49cc340b4876377c550f50f514769200f5801458ecaacbf63
+EntropyPredictionResistanceA.0 = 025e3ba882c836418219c9c8b379ef22e89a7d47d7227242c7660d177e1386fb
+AdditionalInputB.0 = debff2563e349212307b9a6d7c2b4d7114742a02dda5f65dfcf74cef421cd5a1
+EntropyPredictionResistanceB.0 = cbd5f2c1b60870fb9528e0255ea163538c03825e90e6801f381b606dfaef8803
+Output.0 = 3fd08a1823f4504a403c6499c57246dcdb2bcc9d6ebbabf37546a0f6298308bdff2b4b831e8cbda93b4cd581331632349f333b6e0fbb627b9426b4447f432c8455e21dc465a20b509e4e0a4951cce8580272fa659c91d30c8a0d100100f5339f639140542794dd86b9a91381e609e0eceb93ac7b5dd771834043b06d4a58c0fe0ba23fefa15b77cc8804bd0fec91f951ce62d7c54578480e88668fe35422db16523d0009b7d4ead6508987bcd424ae51fb1bb599b248375d5f623019980fec8d
+Entropy.1 = d8cd09ee241403eb1d534e9d2386d13e6727d087e5f7f8a37b149ee8f13c172e
+Nonce.1 = cbafe9e7144f9ba09449614fc3d0ca0b
+AdditionalInputA.1 = 9c47d55129b43631bf13d9b3322bf25208d795933956b8e79b86feed81872cb2
+EntropyPredictionResistanceA.1 = 34cff00369cfaf96362e31bd0e2d39d4323347823b407b1ccec5e41ca5a1a531
+AdditionalInputB.1 = f1d838d7a744ea1cbf1898bf9d4536caaacfb52e95eb7fe560cc25e6f586c8ab
+EntropyPredictionResistanceB.1 = d4a68fdbaf4f5ce6a75f66133b902881b00c82307e0374314141c88253eb4e7e
+Output.1 = b64f313ede226dbc888940fc6a2948f7e1fe90dd9dff5b87ba855bb9a7d3f250176964323a49a41c356b6c5e21b76ff8add17b71237abcf87190ccf44ab90613bb55f0bb242d9ad2b7d43bef75a5f92212b2f682e4c3786f44146fc32908c911a7ec0b2a268f106672f1a702fb16203598ec37bd8870b5a16b077b47eedd3fa1d6bfea14284f4bd56ac7fda19738dfa123c44149b713db80f6cc25bd904d78519b812c8673bd6cb7f34b7ca972a1d0a95bd9ec863152d38be02f74b09f6043cb
+Entropy.2 = 6a0deeeae85e01c9abd2ac09a90d2917277ff9b3dce5270a3818ca2d86559293
+Nonce.2 = b1d3329d7343cb96cb803f4b1e76c176
+AdditionalInputA.2 = 48f783e3f0334eacdc536d05273a8f0f29f40b65b46c289979e74d978fda1079
+EntropyPredictionResistanceA.2 = b3ff64155ce016a6003fe2d628875b8c3c0a009c3ada3493e5be80facf5db72a
+AdditionalInputB.2 = 0ea8e9601be38f975013e122fc3501ab73cd124eda7cb3ef633a90c2a1774866
+EntropyPredictionResistanceB.2 = caa9c02c2180780392a95797cac628eebecef1e1228784704a8e5bea79d92f75
+Output.2 = 680b5b82bbaf3ec937bd059fed6d558f6d4fbe982a2a0fed42ab503ee11d7cabfdd674509be9b06d66c6ec5178e5ba76243ee9fb044b0e30cd13f662ef646dedb8d24960cf53bfc4227471f50727cfd8a9986f73817816eb46d7cdff1b799f9fbb8007e93a642ecd542f23b5e86dbfb86a9bfe5f2b9efe5e3ea55d99e6fc9d1eaa46b7b9ce812619244e8f88194bc4930dd36462cfbff003f323d387d62bc127c14cceb97cae0f77aec51a4c02c4d8131b3eaa03c45a604491b3168e18dcc9f3
+Entropy.3 = b69a2279ad784cbae9e58d5bad4cc59d932894eb7ecf9ee72fd5a6f010ccc004
+Nonce.3 = 4dbe518ca5352c322818f8536b0be7ab
+AdditionalInputA.3 = 78fa8c032c57018e1b8d38b4b8b62851b2a2553803a203b6a3a0330b0c572f8c
+EntropyPredictionResistanceA.3 = 79a5851cc1b8629cba5a3e9cc58ddac38945946de5d3ca452b5642eeb18cabcc
+AdditionalInputB.3 = 76eef0cc79cd73e24854b197ef40950781676fc4715031e91045d2ea6eb2df20
+EntropyPredictionResistanceB.3 = 1568fcecdf601db29f9129f19c280e3181508ac365a1f56a9d253a1e82c8e57b
+Output.3 = 67ebf558614ad9901b8060c7f2964476a1af0fa9385b05fffa4b4bd737ebbecc4f2a7227a36577388eb337e03cc3e42195160f708634e3b64885d90dc906084547d97e87e5a8f5ebee0d99624f4cf2a9ebbebabfe7a78df12071e53a653e2105264a718f4ef2121efcb9c4c513e7bff6e77ad1fb0587ce90b6abc29493c2991c0149a838c6f3a1d32ada15f36165f244d50a2598002bcd5df1d92252916a61279a42b25ae13d5e04d5e33869488b0687bba3de9179543d03d70dc114d7df08e7
+Entropy.4 = 789cc87e838142d777defead70062aba14ff590c9a6d053cc77aec1bbc923421
+Nonce.4 = 60650806d734549c42cc794fe6aa5404
+AdditionalInputA.4 = 391a4a77d93c6c40a25bf7524d6fcca50ca14a3735e5d6bcf572c008d13c1a31
+EntropyPredictionResistanceA.4 = c02c1eeb5cd39fb729ccd1cda2ec0c1c770e46893bbdb5e6e388122f14d71a4a
+AdditionalInputB.4 = bc7063de887f79960e42f7cff6ccaafee76e027b71806b4e42317982ca33662f
+EntropyPredictionResistanceB.4 = 61991a1c3a8f6fd5812490f119f87d026dfab3aec99db43da2b77e14ce5dcf23
+Output.4 = ac2f83bc80f87e388356b67583f439a201795c92c8a2baf7dd2e852b8221a7a7a75ddcd03f426eadff821e3ac01a9191ad5e901906123bc5df5cdaf2bc332783e5766e30f9f22a7d3c0333fe6ee591b2c2361ed595e9ffcdb950b9bcbe0e5821b0946041a6a0632efea4428e0eebaf13f4d7f80d07e480cbced3900aaf3ce6f514e7f16eb7d39292e81e09652fb237ca23e9fb24f279e84ffc5869bc5dc60be8b389ae0d9cf10e15c689b05b495e4be8461ad929349c0c99e888d96c29d407dc
+Entropy.5 = 30d14fa6ac987e50bfd419830a90d592b8f35902b374d0b3033845b19d21c8f2
+Nonce.5 = c6ecd4f28233f531ae86cc425e0d6bea
+AdditionalInputA.5 = fd73212373770bc786ece83d53b7d8cb4afe82a053923e14ee41beca6d5d8237
+EntropyPredictionResistanceA.5 = 0aad12b863ca18f59882490242dcc5ed4c126b6a771ccc4ed2f261508fa4da82
+AdditionalInputB.5 = d419a4a81905cc578502d593a3a02c92f58e440ce9d271c1f5643cf4c4dba66c
+EntropyPredictionResistanceB.5 = 8c6c3fad3e412f9f44b103cf0cb71a2b8b67b50279c373eeb76f130f4c25e8b8
+Output.5 = 14acb1573cc062b16e0d4e5e9ae65524d86a7f0aa5a64a84c7cf5bd6c157cfcca16d72d3b120475f9643277862553649f85dafd1f9c89c7e3a05bff0729f4c4a69d6f389ad0dabe80e98645b9825b53013571466caa66f2ac1ce7751b4402b97c3dee98165f260911d1f62fe5f48a62dbf492f0858821c360b9ece61b004aaf6a4cb01399106c4d296400975426a3c1bb4aa1dbd86d8b148e9abda345dec566d2792b4accd57f00a8dbb76fdd0693b6256c34d425c9020a9cb2117906615997c
+Entropy.6 = 779506d4a8058c997d1f247db4e77a50f501cffced962d27f6c397f0291f0eaf
+Nonce.6 = 32400f061f72e28407adbce63827be60
+AdditionalInputA.6 = 1cba68c69f04e619371bc44eb259cc275d4ef74c67e1529c9689d3b24db5ff24
+EntropyPredictionResistanceA.6 = ea32beb473565ddc243bd2afffcc5c910cb33979d4bec6314da49ae252b725a6
+AdditionalInputB.6 = 2e420aa9148636eabafd0f2e846d54a869e2d6aaa340737ea0e0c4abef899dd2
+EntropyPredictionResistanceB.6 = 164f943d288f50c58bbade11b2cf9c106da81e4a5eee03024b40e81477889d15
+Output.6 = e154a85a07999dc8f95160a5920fd8aea3d634c7e6faabe8c232ff180a328338864531ca70989e9ec21be20dbe6a199054a4a4901070deb1ea720199a33130e48d01d3ca831d1d5a18ebad665441fe131ca20a9b9b84c0c772de9e91d2141ce3f87674baafcb3588dc02699951c2f869e6c069c40563b7544459fb710abb38653a3eb8a4e6e251a732b694fe9c77ff8da5a2b93b3aab7a6764e1b7487ad7f551cb53e707fbf2ef38d78a308648bc05c3b0ba338dcb95e4f6a5f150a4af612d61
+Entropy.7 = 37b5e8adb949f0d640481070449799624d7a8d8e497d5c727bcb45a0a61a545a
+Nonce.7 = abcb2c80c7415e32410d8dadb21abc47
+AdditionalInputA.7 = 78e9397f3e76df1791c44ca45282f8e51f1f736787b8cfccfcec95692f572393
+EntropyPredictionResistanceA.7 = eb9ff264119cb6f81731068a34f6cd48ffa9f216d7d7fc02e773a24e2ddc0233
+AdditionalInputB.7 = 68ac70be92e43661753f94e08d0279bcd48e498a31f2ee8f81fed73e2592b940
+EntropyPredictionResistanceB.7 = dbdcb7c899d81e7ce419eb6731d488a4b29567ca3210628235be09235ca02b4c
+Output.7 = 4fae4a30ff89e98eec9d2bbf5daa91545b569fa7f0a2e5e258a53c1e8f2460dee6e8fc2caff1ee47485eab7ed24fa8d85a33765343e55ab407f2c6ed1fda712193baa2f083787891d6d12187d8d2230b3f3373013785f9e8b249b5616e6e3af725b55508c2ebac35ace63af62d1490657c48b55deaea0b0b2a5860cd626a60217c1e874f3a3c1584fd6ab75c9e7211a122871c43d92955830e7ddd60d00586cce6a00bf3b2583e8757d466b038a2cc6c0ded266f9ec989eb4040f82795e8a50e
+Entropy.8 = 801262cb392e6c8c477c37abba57165a06996df9707e8497aa2b067de982ee8e
+Nonce.8 = 654e549675f371dbd753c959c3f8a673
+AdditionalInputA.8 = a50f5e0410af182fd50f79e7fc47721553e3b48f0ee5d6591e9f9dff29df06bf
+EntropyPredictionResistanceA.8 = d466d999f5bf2d6dfa60fc2e2f18c965ed69c85e58d965108808025ca7a6ba45
+AdditionalInputB.8 = 7f5018b735f5588dbe6d08c183d23b5a32d62d121757cd21b8f965ac6f8814ef
+EntropyPredictionResistanceB.8 = d3dece5ce93fbf188529d1239957d21d8fb35c677d17d68877ff956f4cf7352a
+Output.8 = 597397611b8f02e75082c2dc7030f9206ef9a2e06e9e7cc0c6c072b32cd84cbab80c66184255f4e237757d0067f5742ba6e09b8adfd5f7cdea885614ca221ed3e39b83537764f372765147dc14626cbd50209c4a0379740a8ce4ef8c4f44ec553ef5d96d0230349f75ec7b9311251b605a63720afff7b2a2bd842600457a2227b843b7592c0a1b3431fbcdfd72a8ff16f6c0c40d421293849164be5f80c3f1136ea429e64267270439c86cf70b53ac86ccb7fb9241e1daba9d5c51c5330aba96
+Entropy.9 = a1a5283b2f59a0d89170a8614092db59bba23403e7db77aa88a568ca6e2c4bfc
+Nonce.9 = 6b46e289d0f0643a7280771b523abe49
+AdditionalInputA.9 = 239100fcac910f9f34634416ed557ca752a0226b8731201a385535f8d7b6a393
+EntropyPredictionResistanceA.9 = a4047aab69112fede8ee6829dd5f3a4b7f9ecaf8f568ce7ab6c73438ee6e2b57
+AdditionalInputB.9 = c168c02119727c89c41addd781f601c6611dc62bce8730fb9cbd92c3d8d9cc2a
+EntropyPredictionResistanceB.9 = 18d4cf208fdcbf15e2cc9d6f45ad9a903f4701a8d9e421cd74cf05496a08ded5
+Output.9 = 98a130c32753f70bbef58986e159742eee4ad4611b09a094744aa6b475fddbd2fe54692bc4a3995dbdf11dac50dc2961a6d7965bfd0916e517d75ad0c6ead64db34092438f9a993af6f0b30e464fa99667f392d280db7241b75dd52f5e4be5495fd2f0b50b8eaa5b1717b0e53118e3ad491df15bd4e7c7cdabda0ea5d7c27734abc1e69077f2cccf564a65a6a54f8b6623040edc3f811bb6694cc80b43b4254c99e2f264ba37a91ddea10bc32802360e793e19540334b21226fff85fe2664244
+Entropy.10 = 72dd5cd9e43f5b77faf9f56c826622b724bea72ba17f96cfeb5cd65fb189042d
+Nonce.10 = 31f024ca3583345f88b3b9f902ab0ebc
+AdditionalInputA.10 = 328d6e2b0dc86fe9d7a5e97bf2f1fa5133b436d3ec24319e5f65bd30430f1e18
+EntropyPredictionResistanceA.10 = 683a8c1fb445c04a22c4c362c12bcec801bbd34a8b1351095ea9246202a58c19
+AdditionalInputB.10 = 1bfdf2fcfed69908cd03ecaf598023df000513e037d3ecaa71f887eb9fea99a5
+EntropyPredictionResistanceB.10 = c002f2d394fea5131bcd09fb7093d6cb94182b5520bd2a29f15fbd45588d7121
+Output.10 = 834c441c6aa5dd16910c022138b45d9a4510072a7c71746a600e023feeaa82ee58e5cb250a6d483da267b65940ad36a69f510050465b7fa74151d2c8585e4357e7f4fa8c8bae2bebff1ad7254f76ac96fd27355aa9f827b8ae5568231502d848c2d47806d369f0a591326044c93dda54829751b451d8409905e21efa41693d84b52f7323be7981a11e4b0763c63604d5b19abc37bece237aee82c4b549ac950de943cdb3df318e6187d04791dd9e34b4dd0282b0d09444abeaac5667b858bd90
+Entropy.11 = e95f04edb201774967071f3bc75d9de803cd0dc3af8a07b10f7fb80d02e80256
+Nonce.11 = 51cdbee1beda554c8cc694f97b71ac18
+AdditionalInputA.11 = be30674d192e3eb6efbf2c021d6d703abe8bc76309ed3dd3fe008febb945f2ec
+EntropyPredictionResistanceA.11 = 704efb11142defdef8c0cd2f6cb88f3357d68b3dd46468efab0810d53b3d2817
+AdditionalInputB.11 = c91d5bbef752ba2cefb4321b37b2756bd2cdbcb72ce2034de94e1d0c7a595253
+EntropyPredictionResistanceB.11 = 879b2840ed9745b07521f3b3b6001bbbec507ba015e550705bd107f2d2e20ae1
+Output.11 = b0054030e99eaa30ff41af57312f74c3c4b6117a9e9d15bb5331e4087c50ba3fdfa6cc4afceed96428dffd7f74870feb89fab6affee8f1bb134dbe32e25f6e109c679bb9d82a9c852123c69b4b468b56f07e633627e69ec127dacbe3975f9314d7087376954f13d2c80f4db2711ce17794d3a309a51554cbecd0e01e9514d2a7e8184f261161126131a403f02a1a7b9247b40e4cd117c0a1a430762508f419d08e782bffa5ac95ba7b23196d2bb3936bb068f1d3eb4a6d56805597ad9406e10b
+Entropy.12 = 1b21f2aeae5fdeb416ee630f2ce510ea3e37eb4ef6475f3b9d42d9215ba4e914
+Nonce.12 = f7bd2c45c7f5fe5407955b5028eb25cc
+AdditionalInputA.12 = c2d6da31673f832e3d034150497c42ec09da2fbad82097e2fc45d4407be56b1f
+EntropyPredictionResistanceA.12 = fbaffd9dc8dcd9cb67b05151e5805ccd300f75d383756dc42e529c9763b0cd1b
+AdditionalInputB.12 = 311baabfaf7351e5dc5944a10db950b979124ee1e93588e8acf4b4b4fd733172
+EntropyPredictionResistanceB.12 = 190b3c1e73072a267ccbb81c0fcd7f20b0d7f4c9e9d3cf6eec16856374e85da9
+Output.12 = 68f4e078aa0750246f3c12e651e8c7542d6fcb3a18559595d528fe7e071a36154a7ec6743fc6790d013cd2c9fa0561f5c5305507546462234cf2111f60b1a1b52711d59a648d50a5ef3b7e31cbeafbbc17176114a7dbfcb4bb7742564572a49b901c7517698cd0867491a5e3b463215551cd1f3da34eb845c8e5f08705a78685554638f236f29526527b6bbe19f6716ceed925ed674a1cc8c1e2af6f62909b0587b7a1458b3d62c4266f2cd9ae9d4a0bc23aae09b1097d7075fed1960fa6e6b2
+Entropy.13 = b88d02253e1c8eb64922ce681ba7dc847d542f38caa462fee12f89d77c7487df
+Nonce.13 = b55dcab1d88883a0aff132b7437a57f8
+AdditionalInputA.13 = 19fe56403e00dde7b92c9279fc88fe6a30dc690660d9d816933c9d7e41605d2e
+EntropyPredictionResistanceA.13 = d247265d99f8151ef9b2a2174ecf0a2b1728d471fb203c4fdb77fc679a23f917
+AdditionalInputB.13 = f1175906b8c81215c5df2ce6a9e679f703ffae34259e35effaa2dff63af8019f
+EntropyPredictionResistanceB.13 = 7a0a937dff839e5d30321b13b6e63e9321827b80b4b01b118db65b12025b9962
+Output.13 = d5c2dd4c2b003284756ac35d40d7fd2121e5d2f2f672073326ea8ab79b944b3451c5e0d5073117bf77956461e5b438f59879e91735c70e72a0cb64575a528cad14813ffd6019ece8c7450a63b1849acb430eeecc6e22b463dedbe1ee8fab85c4d713b4169758f6d2ccc8747bdd0294cd8d481d7d27e2c312a138ea1793c1a2502033158eb327e433def7d5d82ce0dc7d7500331a7d05e33ea7e651d0518b10a942a48970f97118921d325fbdd6e353f668ed400cf93aece49966ace0eb61baed
+Entropy.14 = 63cf2a03ca026821bf4bfffba5ea26ad4afddfc5362db4b6925efe62c2ba358b
+Nonce.14 = 6d29d1f724c9dd690554f80ba27f9e5e
+AdditionalInputA.14 = f9035576cd6972d239f410dc28ff52a3063b2885062b5b9646952815720f5031
+EntropyPredictionResistanceA.14 = fab6150f311fdf26c12ee958da8a1b6ae80269a103894daac0bc42f6cb3d8612
+AdditionalInputB.14 = c81910a207597a0657cb06cb89897f9ca67aaa5e3289159fab1f36cb2f5403a8
+EntropyPredictionResistanceB.14 = 0fe27d8d5ab415f1332cf42f7a6eb23033a9c5eed085b3646ac3fd288de95b63
+Output.14 = 080c95ae4f89185591db9f06e68ec25774ebb1fe9e5cf9acb4a6190341d40c78c1b92dfcfc142bd8719da2d09d879875e5eae3a0f7e4030a61904e45dc5f059e550e85f4f2e081f2b7ff22c47eff29944d5f17396cd1712070a2e1c565253a032e15432489c093561ff61b2729ad785e7d3da276a860d40ffec5f766997260ca2f0bfac1a3d20da5602357d9b8c92c97f8830fc1c93ecc68ad2edf2a559a7f52325ee7c7f9c85205016af24e0833fbd54bac2f6bf42266d3b90c0431783b8a75
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = ac246b636936c3e98ae7217d1e0fc43efe7d84c7e66e4d240c3e319516270a8c
+Nonce.0 = 7b5b53b7d332e4b12110964979b1023f
+PersonalisationString.0 = 9fa45d32717626c4be509698f0f57ff6756d530fcfc30dd782f15a54520d5d7d
+EntropyPredictionResistanceA.0 = 0b01f16dbc516f23b0f119214ce9fdfcf655bbc1b42e25695ba01d3e2a3770c6
+EntropyPredictionResistanceB.0 = 15e0d1f55c1af1445faeb1fa03544fd8fb34ee5ec6829ad5ecdb4a37b03d4be6
+Output.0 = 12b656cde913317b3015f3f5bc061547e9918df814bc239650fe32c39f8a295d58fee8960a6cb8f221224f1d9ac9ef4b28431396d8a56b1ac7e30d5615b1dbbe5b7487f91bff80d4f93454eb77704397965158f35d917b86a829c5570f4aab1bad4eb0cb89402eabeb49640057674aed9af706978430da43044afb05db46d1e56bbd358e4e9fe1f11b38851f3500c341af0d082a5401e069f7917362b18fd09fd81c53705b11447746df68dcd112c7bb941ba393b51f4dea21f96f61bdb30877
+Entropy.1 = 69d09c59b9542ca4bc7ff7f1afd5fbb40a5b6b3720b68976d5323a2fb1ecab89
+Nonce.1 = 2a3938b35cd45e3a806388a400175aac
+PersonalisationString.1 = 58dcda904304499ae9093846b4e5c4884881771b303fa5c54532647ad3975f6d
+EntropyPredictionResistanceA.1 = bee6e2e739c38615a00290218196cea5103bddb80a205003e7f489857f41c8d3
+EntropyPredictionResistanceB.1 = 03573b16cd4f5af2e3987573a8b07b7d2616eb83f4c58e440e0b68cb7f4ae27f
+Output.1 = 9b107e52c746f582bb252165bee46ad92219607b5a133edda59bf64cb9bc20449db122b4b602338c104ed3eea25da365ada774cda09db2ae21d91c7d1445a86ecb6376ecc1833637854f81619143d9baa4ee3a7ae36a2ae2bc396dcff00461d4574049a3840c2c06d229b4ee44009dd99efda4d560b1a987376df88421678c5a4ec6f6905640835895b8bf80129f8c0fd4356a49fe65111e5ffe7ea8526ab8461064247faef1a4148d8ff22efee4a9678cfc0aabadf2e657c54985319d6babc0
+Entropy.2 = e2b6fd9797181272ca6d0405c1338d985d333dac75ae900a5b237d2d05c23165
+Nonce.2 = b816f222f4621a0cafba1f1353abe9cb
+PersonalisationString.2 = 1fb5e33d53209ea8e106ed71c053838e55232bf5284653b21b62cc733e859681
+EntropyPredictionResistanceA.2 = 4503c9f551eeaed3e564a56da8535f1a62b5a1df2307f0cd36b8c9893a57a24a
+EntropyPredictionResistanceB.2 = 28c7ae029113c43bdd25294a9d98167a01d64c07aef830e9b8dd82c30cf8e914
+Output.2 = 5db6ea426db55d35ab485d6d5378567df7aaacc073517cad8c66f8c2c481a1640664492d2d5f73398b0d0b8f796e493c75d7398adae371a30f97ba73e17dea5df7d5680786fcb9ea9e24a5afe91029f04ea49eb8244869a7f6faa792d8690b03c1b02e2384bcd903ce62c67e5240d9013e50e7d59ddb6c69d867aa36897fb914ec1b9eb9709f8dcd7d01012eee07be41c1d780055958eb7602e262e7b66874919868fb896a36a21348b3289d45ce132234a3380c0ff0f09b56c6ca6470dfd5cb
+Entropy.3 = 28c6d13bbf9127437dbba7c530de49081e57b16e5dc5b942047fddd3f654be80
+Nonce.3 = fe4865c08cd2defbb762a7315cd81fd3
+PersonalisationString.3 = 3d44ee234b94efcb900b119c62bcf73086ee85122f7a97c0f16c0a7df7657aa4
+EntropyPredictionResistanceA.3 = e546326a6f48473c3ef1de558239ded6813bc41700f33cb24e1a7ef36fd80303
+EntropyPredictionResistanceB.3 = f9213e899e7f94806d999a84d6f715f97cd30cd427f5e1c156afca134d9835ae
+Output.3 = 8264007424adb0c1e580239f92829786f85ad53e992c030f0b7e95e184d55a98dc902a95e1efa7e9b5d89b10923dc1df4fbdb631d5e355c2dec39a93396cdb798bba7ed59f9ed503b75173ca0a058e2a58be15bbca05014c73f25e5768bd1841fb873d36ccb1860902ff2eaaffcbea328e67145e08137969cdc810abfeeee0e816c6c4c087f4e5409afedea07e49cc4f20a51fcae58ae7df00b83aaf6559fee9e613f020a28dc2be22faa1bb952716fe543cdd1695f6564f88deac0f2e45553f
+Entropy.4 = 6b6f7185fa5c557e800d586857d09d53cceac2c3c209c86aa819a48db5fca7df
+Nonce.4 = 44d622ad7027ed45023000b5e3acc795
+PersonalisationString.4 = 2fad58983e7bf238d2044da872dae8dc71962eaa82aa90f6632376712f0237ea
+EntropyPredictionResistanceA.4 = a970dbc972c802da97cd4188f19d5a00e4cf9af0321f4c44cbb36ab207dc7ba1
+EntropyPredictionResistanceB.4 = 2cfc3729af15a2e3a5b2bd35906f55f3d2a4cdcfbf1cfecd4e03fd563d3a52ad
+Output.4 = c2707cf163d96cc4a0807f9a17051a66e2c29c2f9a970c84f189148f6d0ba09c5b977343e06e8e0291f1e214640b4bc3a2ea8a821d8d3e33505e84692ef2f8adeeb4af6a6169e892d076d000786859bb8334ece0004bc60c8603fd1295eca7ab8a698ecf1751e0659f1032e1bfc13702fa035f876f97f8d494f25a3a65b436553e79901ffc73d3e6f233854ff0cf1cbb690cad73e3f2233c87c79801337e8712aa0795801df396f4a431f874a7d18e54374156c4848efd97114c935467da7783
+Entropy.5 = 5c6ada064623bf4b569b9d7e2586a418327d510f628ed4c4ddce517b4c7d28cd
+Nonce.5 = c1293668620d4deff8c0ac4a1f1fde9b
+PersonalisationString.5 = e9b0f18075dedd80e0fe0b7e8d593d3061dcd753dff487094afbd9d3eac110a1
+EntropyPredictionResistanceA.5 = da9ffc454088c3af2712db17383327df0cf59d8b3849c3082d6671bf61ce2089
+EntropyPredictionResistanceB.5 = ed77b7923a7cac0f951d2e7ad2f90147208b81740e2535e354866b8e3b70ae5b
+Output.5 = 47b5babf97d7f88c71b9ce40a1537a91662fd55fc8d38b65797af861243a87f95f2e69807b959292368477ec02a69fc9c86517c8ba32aa13a1e9f9ea1ad33b5081b4fdff5166f65363c623c8c26b513db3fce8e53a5a254acc27439fa7733fb04cab956224b92877ec3ed5471f1292b849e0e37360c3275063823a3370fb9633816598aac90810eaab2ccd32851f56eeaaf3beb1dd9078529a7f0e56f8433065bb2498d7d473da1dfdc51172ad34f1c4edbc8d6f5db6006beb8e9ac4b5a7828d
+Entropy.6 = e1972d6a23bd6c76133e32886ac6067f017766f112614a075fbb36605964285a
+Nonce.6 = ac2564026c56fdfd538aeafc16104571
+PersonalisationString.6 = 411fab714a89fad48d4957e214b761782666eab189e1c3684d0ea015ce354411
+EntropyPredictionResistanceA.6 = dea6cc380726d263c189a5a57b63e562c09ba29814b5d70076fc4f08d85e4ce8
+EntropyPredictionResistanceB.6 = d0f5c30f21c9574a071fd9aad91e59a3cb6aa018ebe043b2da08699cff6da8e3
+Output.6 = 5a8b2a31d1c4e5d1208a2f34e2dc93b4fb5deba630e7e89e4dddb3a9ee13557a6a9f8edea931323b83b5aba411d20d3366061774a72af23d711b149a8b4ebdf117bd63612bc5c20d62befd73cffceebf464b10e73c1897f5db5f603e32c8da01b07460c3be5951c611695cb66a9c19d27d50aaa6192cf16465f60bced3046c6fdd68f5bcf262be0196c903832c442c9a2aa281759f611ca3f0877e5ac7dddab4bfdb21645b3899bb97a4cb75630cce68fde2af83adca26320da916578a5a98d0
+Entropy.7 = 9add9f3a5aa606f688375f34ddb8dcbf2145cb74fe42d62bb12bf7071c5e35c0
+Nonce.7 = 624056a29c9e479895e0ed9cf0b09da7
+PersonalisationString.7 = 2481ac5af8b2ed261058ea9c4876aef7a645e8aab1ebb71e736ce052a5b26502
+EntropyPredictionResistanceA.7 = 322a47e977da27200964d0f48b427b26d30fc441083985b2c3f15decd4e22ad7
+EntropyPredictionResistanceB.7 = d3f43b2fa8ca5b1745960e3735d7648c382da65bf665be36646c33c49cb750ba
+Output.7 = 74798ffd0b210b84fb7e66610e1920d01fabf0681aa6d2164eb98778f0e706744410d087b23ce780037f81792366f239afff33413128cbd4b6264f56723884257bdd343141baf69ca7cda321b78e7c7a4ea3af4f813b49bc7f491d7d499901574c72061fa28cae35f73af8336e223d87358be75c2e94ada157577f1da286d3269b315dacf060e3f57ab67514e72bbcc5a3c9f1c9e1a69f530d5b28a9bd464b7c291dfb46a21eed32a3ea2ac83bcbdbfd1fc61a516ea25a787b58c1fcfbf0be66
+Entropy.8 = 52a815b6a854cd1394350f7ea9b7eda23633856b2550f1b7eff9514d47e2df04
+Nonce.8 = 530d9571eecd0dd82378ffe403760fe9
+PersonalisationString.8 = 3770d42bb73ee7e21634452502e35493d9cc32d2f7bd1355b29ffd0277c17220
+EntropyPredictionResistanceA.8 = 13f6478dd0092c5a7c1eb8a783433917ea9b22d941fcfb70589248479804dd42
+EntropyPredictionResistanceB.8 = 19d70469a05fbeb0ec16035eda92bfce371359918bfc5267695fe309ec319ebe
+Output.8 = 43deba47622f2b7af2e250b9a7a7cc61a30fc2575d8e171d663cf22a0920d59c8f20687ef495a4dfd16272c76d9377ce6a518da0b4166bea6a1acedfc3dc272537dd8c960d1c1b5980384c040abbf1e2b5abc51e95407afde854ff00699ed14d5baae52ecbf2a7b5352fb4bb4e12f6174a3fe5c5968845299662abefcf70f4112c821b8ef42a574b967641fc6ac1c7a4b77f84ba785bc6ba939dd30cf300cf8fa31e4b53d1b3d2cfb4a644be5857ef4728b4c7b77f05a741b2e54d12e09ddd83
+Entropy.9 = e802088696fe5696ae5e9ef2296e0131306c449e27df31e74713990e7794edd5
+Nonce.9 = e3c9423455a16660e512c16d71fc3ebd
+PersonalisationString.9 = e12c18c1c455d445ecd4d07cbdd29be1bb0ca9b854eddbfaa91d8fbc504f1e60
+EntropyPredictionResistanceA.9 = fb8867b0e29734444492d50ee91005f38a22b6b6990803ce4118abded72df6b8
+EntropyPredictionResistanceB.9 = ffff4b2c88088232304b75de7a9638f72424867b99b5aae38917d3802cd300f9
+Output.9 = a15369373f266b32001022253d120ed6cca79b3a923d1840825f537524dab412b0eaee660c0de8769733bf5a6857c46f20454d5d609d15cd6219c6d7f32dbfeee82e3d5bfc6486d69aa27478f911afa1746f1662132e0c9b2068d91309c45f0577abc469f4736ebd2a951ed762cb6b085101ddd4f8d3735e61fa630b3c47cb7cea604b542219b3a4a034178819af2671ce2b7650afba72058f62a0ed19218e654fa3b12a830af4d7f897ae08cf09d9fa3693c50b57199cb2cf21862fe2c9447c
+Entropy.10 = 9123782a2cf0e8f8de1e247ac8292fe18d9f73fd0171d410c54df98a7feaae91
+Nonce.10 = 5db4f2d640ba7d5ceaf2f774668477dc
+PersonalisationString.10 = 5976d5d9d536ed9957dd5e916775e2e5940bd849ece35961bf6a9abddc840f32
+EntropyPredictionResistanceA.10 = 027af57c8ed21843ad20d7ade57807a680386de5a0e873baefbec5447733e267
+EntropyPredictionResistanceB.10 = 342b0e562344565b12bd7874a55f0b217ac50f60e683ab0c531f118e927c022c
+Output.10 = 4831d0fa0e62381ba42aa1cb9e19042adc0a7feba2f971b0ae0759a23c7ba2ab9a531389db73cefe181f0dae176aad7bc51b275159a9a7f7f35716f6bdcc9669874a49527d49c88cf4b5608c3fa50591aca8d02689027679eff2ef16a213f2a4b1bf11add4f884b325bee65864b593b775eb68410461cad1956344480510797d15fe477c025d7218a732ac3da6fdcd5ab0c84209637c2d0cfa90f6408c6b7dba7da18cf6bf556e5f35c87d2c14e3bb389677739d0dd9629ede46a39cd5779b00
+Entropy.11 = cd64ac724eb43a70984ca25ebf42430c25808b2d0b6a70fedcf83f3bdc9f58b0
+Nonce.11 = 9a42830e146d6782be98d89cf45c190e
+PersonalisationString.11 = 029d4b9da5e2601607df3800b8e62351313254a78936e7f0965dd9dc5288e5ce
+EntropyPredictionResistanceA.11 = f7907e47d689387830aae60f33f0b4f382761c7624fb47bf154c0c7a3c996c42
+EntropyPredictionResistanceB.11 = 719601090073e4145dcb9f8032399f80fafd14ce15edcc203f952a3449655c4c
+Output.11 = c768cf4c41129917bde52ec7462c436eac7f7fe62a126c31d6ac111e6e9650ff51706244215a19695dde3383e637ea4426b7e18398d73cf8519cf5ef829ecbe1a0d93761c21b011b1569c607855457c049e3259ba3b3c85d39ea6a300bdbea97253613170439b82b5f97219bc459caad24f5f420d166b43ba3129242a4268dc2454ff8947b166205ee452594cdec0e36dad5ca9faec99dcd5fe7fcd9eba71f032418efda9e18b6a68513ae93fa68e6ca2b4e617bbd695273b618d26d1657a500
+Entropy.12 = 339a297972dc10fd4c342d84d31373bf3ef80eeda063db3a4745b6deb199e8d3
+Nonce.12 = 0a2ec2b66cef0e76c378b736f6869a15
+PersonalisationString.12 = ec1cfe2e634fba246141c2b3357acd4e7124e6bd480c3df234805292325388aa
+EntropyPredictionResistanceA.12 = 2ffb9902a3ca6937feea0ae0bf20c7074f043d3409b2560b4792504227001f26
+EntropyPredictionResistanceB.12 = 9dcf4903d115308617db338ca479c80eaf4681765ffdf711bc015467678cfd7a
+Output.12 = ee9dae8d3069b63f39caedf0c6decea8eb62cd545a487ba830cb49fa54058b05f9bc68b6c9c423b640a5b337942363e8c5d84ec8390d7f9ba0911ba5f924fe2080fde2c9919d9abe1a29dc8b3a4f388f7b5b859fbaf8708017189e54699a4e408978a7492cb45828d2d4ec3d736d3d9e6414ff1ecde445fdf043acacbf909ecec6fa2a57695b57f0834674fe5279d9bc92185c99583366ad95f740bdf4b59404d3e7048511e6918085840baa85d14b56dd7ee58bed5037b64110dc28892ccb5c
+Entropy.13 = acb8f9b9349cdf59fc78539969460b80f0680f3b925ed4e90d0ae772ebc01146
+Nonce.13 = e2aba8f0fd76e40f27af543266938926
+PersonalisationString.13 = a360f3333bd4da31f745871ba3b15cbab42e07c5d20572cbd260b45d733647c7
+EntropyPredictionResistanceA.13 = 91ae9c5249e267024f6cbe3203da4faa469b985f50678c722510fa71cc4f2145
+EntropyPredictionResistanceB.13 = e968c1b2f713873b029c2386df4d61a6a7ffa44023fc50337832c76bc3ff6bbd
+Output.13 = 5c6398b6d56a1819d62a338ab6ddb73b837ae3408f729aa3e2ea121f4f37fb98e67c8102edf27f8a261f19e151d28fe1b6f12f4b7d86070568cec70f3d6b7b95a37e02925711e463f9f6bb7dd72065285ee65a21d2ee3d3f7e874fadd33f00de4fd23167d71b99eae9a910b11bc37bfde65468792b28e46bc36ea1550d9cfd323a5df51a76dfe822bd397467240988397579347ca4aebf5ddefaf03f7378626ca7f5106f70b12083dfba4410c20fa0e072275dc5c8b72bd3c8b8565529b1edd0
+Entropy.14 = 8fc5ccb70e57f2de4a242075ecf0712779f650f28db4558cb5c77be085e54187
+Nonce.14 = 845312446f44061920720f295c8863de
+PersonalisationString.14 = 08bc4a7458fd721f155541084b0bd4fa3e4fd59c95e6ea409fff946e4a1cd28b
+EntropyPredictionResistanceA.14 = 0877707fdad56cc9c9de7e9fdb0c0314316ebd529920e95e9671d974bb5408ff
+EntropyPredictionResistanceB.14 = 208e73cb7f1d5cedab1c8b3b53e0e8677e3ef4664cab9a305fec6dc0246256bd
+Output.14 = 97d899881e4f6bd01a6030d211643b3c4d27dd7df30956495497b8748998c7bfd74373293f1c992ca303f0d59e46ca98f97acb101113bf97682ff75de95fcbd9c511f798ff76d7a17ded50948aa2ffa15013e1d486de1368c5ff009a2c0ad062fb9045f89d8867aaf8799089bc9b7eebd5a9069690076538a589483c7af29c48b6726982ccecce027b87b1ded6875015195c60604d2e564ee3014d9114f5a2d900829d449a69ae4dc23e5df063c103260163509bfc38690f8d274c620b53feba
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 2ddb7250216e3c96297f63cdfda6b1ef5a6e16409fe4b405cff8263d54f6143e
+Nonce.0 = 863320172ade01cdcd9249ba9a0e3a24
+PersonalisationString.0 = 2fd3eb5f14f8536a7e6fcf398e16b0dcc64fab057dfadb5cb6f5a90c61b678b3
+AdditionalInputA.0 = f09fc43ef50dbf5f8c60ae8fee70f9472900b3504c66e65171be603eef8be443
+EntropyPredictionResistanceA.0 = 37a4f10cb99ba0a884e1f46797b2eda73a626ff43e1097ca5b08fa1fc0341ecd
+AdditionalInputB.0 = 65f6df8ee24269a49864680765fd45443ec34e68007241aa90cf444b73288993
+EntropyPredictionResistanceB.0 = d5931835343ca97134b2530be0f1decf59044f2a1b525d9da8c0e210e192fa9a
+Output.0 = 6ff6d47e75f0913a9f72ce2122b0de1e8d3294332f4162af7891ed195969d58d00244ad42f16148caf3f2fe8bb3f4e2b14bd541c6158aa21f533895235a0fc7ba94f8f872f490f6031ad03838bd69904503a68c5c76fb615040330a502580bde533881868d4f045f81cd6d008698d98cf36db46b6ecd8294ba0cfd23faf22f0b9ba939d3413d39756f2c611383b222f7e7ef725ab6d71a3cebade71cd9b55815d2f0c5940f75e772006b00a22ec9db2ee840ad395b4299e422bbde8f9c5caf35
+Entropy.1 = 779b229296f5a0bfb9195862408016936a2095ab555d2e364f8beb78c55ee50a
+Nonce.1 = 2d64cc2745fa849eaa299359aa2d8e11
+PersonalisationString.1 = d6eec1c6d0b4796bc9cbb143e7c1c6bb5c6646ad77f0129407576b6d7b789789
+AdditionalInputA.1 = 8f19ca39090252edf4708c7e52125d90dd2fd4fcf38993af70b741c49fc13c13
+EntropyPredictionResistanceA.1 = e3fb75ef1bebf49ea01208dbed171e99855edcd127d440a5b6a4db41d08b6593
+AdditionalInputB.1 = 4f9ea2e4e7fc276e9ccb5df49a2cb0f4b5b90400f2ebf20d9527c3ecf618ebad
+EntropyPredictionResistanceB.1 = 5aac94673a0edceb28235e38434b642323a8b13ea996ded7850556d1a1d9b010
+Output.1 = d23646fa3b895f873a4af49ac577eab7f5a13a77e2d3e0f465a139e82cd452c63f47303d52d2b9faae6b94a7decb351ae3000a154b465ad7d7b35b31e6cde3bead2dbb65d8c8b2c04a7f65fa0d00ee6818fab18747b6f15c98b133c208974c1c67d022054ee062099e144cd5de1d101ea6754603e3f0fafa98cfe1eecac92be766ddd5ef2c7aa87c8417dc786bdf95e4424d37a86e80b81ae430c1e81e0f718d13a9842fe2e1697c3bbadad3dea9d52aa1ea556c3e53b176513ba2fb72bd8661
+Entropy.2 = 479983f8b1b37a3db0dfdd1c2bf9efc19fac36c912552093f3d6b47f7ea39efc
+Nonce.2 = 29007b1c5161a28eb6a22284adb5bb2e
+PersonalisationString.2 = 3cbd01e2db5de841a4aaac6a11bf1bb0b94ebb259218849f91c7ca2c7e4bdaf9
+AdditionalInputA.2 = 127dc8cbf09f7a100a8eed5afd58b07143363c6265156d35eb48e6537a91d2eb
+EntropyPredictionResistanceA.2 = 17239478912181979ab38f7b8f0431d41dbeb88ff4fd518a8e97659245a14e19
+AdditionalInputB.2 = 69f3bb484eb43c9a8b79e711df6c653823e970bb0cd6d8f9782b56e450ad05d4
+EntropyPredictionResistanceB.2 = 70e4ae4ae8c297585d4e3ec47e840b12fbac14027a77ee666e8961a454ac0b79
+Output.2 = 54200bc6b7951201fd72a7b2a62981cfe0c7e56a52a12e70c9580319a025553909379c56982b10aa52b60077a3099d6a056e05f5c85a10ff9f662f694675624d9c8c5e6cf5833255c7b2b8d20c0e2201113390a4ff05b4551fb77d24ac64fa2a7109465687425e8cf9bf917f3f10a94e706e35d5d8db317c097f7b377bf72835dba1753affa3f859f7e1a32e138f3635470645cdf38210675e513c01a1f7faf303442f986d24eec30844782ff9fba6ab16467ccfcc142a03c3ad7d3f14720594
+Entropy.3 = 2b631c02683bad38ea163f5dc1a7b7ee7b6cef5aabd46999c0ebdf08282dc6d1
+Nonce.3 = 26a4580b2a1b5714c0a3e07aced5206c
+PersonalisationString.3 = 20bfcb9072992d228b6490caa74bc9e25c6b35879965fffaa8faac1085f3f7b6
+AdditionalInputA.3 = c8af608d28869c07d7faacf6fbd1ff196c08438275b7f9d56d342c181f0e5f2c
+EntropyPredictionResistanceA.3 = fd77dea2639be3fb01c2538d5d23055060aeec51eda0a4da3011d87d082ea78f
+AdditionalInputB.3 = be1235805668c95e263d46e52d8b746d24e931bec698f1c86cefdda7a2a067be
+EntropyPredictionResistanceB.3 = c70a67f288b666b7f95a74bbd481d0feed92feca81cbc4467e89a76e24e72b7c
+Output.3 = 56babad967e226732f018ff744993d0aa8dd343a9b678d6b4011c4f59df20380a6a05813406eb84c08146bff079372ad7786ac4432f9e7b0a5ae27cad7a3fe039be2b7a6337a0fcb7f2e34d70890ea0ec53762ec05f25f6d6d728b2e70026d236bcddca554590d9cabe3729a799c95f24c9a3ab6c4ae49e101dc4009d0eac6d69b25d7932af5defbe4404419a5780b7e0765f5cc7aee6f5bd827060a18be0ef68679194f0357db2f09d44a58179dc7970a1ba8d3967ed808a900ae807e77f2b2
+Entropy.4 = 1560ddcf370f4f613e5d7dd073d95162ab169bbc801c240b8ef36b8866e3ab86
+Nonce.4 = 601467463d047619273c240ce8c27865
+PersonalisationString.4 = b3f2294e94a6b817b67ff11fcf868636f8506ea52051ca7ac9ef0db8cac1ecb8
+AdditionalInputA.4 = 9f213d700434386f47d2fc4c93aee06bb697de6447d77294d9bfceb0ef9a2896
+EntropyPredictionResistanceA.4 = 6d58903e3096d03cd9c00ae80877c83257faf22404dba754d478101002dbd10f
+AdditionalInputB.4 = 48b97b4c440a61ac9d149d49e3d38abf9b9d8a7e4b0556d5f3a59898fb09018b
+EntropyPredictionResistanceB.4 = 56ea43182e5e4a9d435a9924b45acc1ea4af487a8012ee33578bfbbcd2021f63
+Output.4 = 0c71ae78c1599a19fafa859eacea27eccc8b19ae868b81905c00efb1e3c83e59b8643b30f07acb0f6394f8e16c0751242d8c4cf5a664013ef03cd4ea6688d8a149475e41ad164b49727df51f6fd7970eb44d638b75d122e0170b91986c6635c294013999ba4dcff666ab60b9da71f909d22317715ddfab2f4dea20a91f3fefd71a2d01f190545e81c97edde9222c81a8a79719ea7cd4ee236d161dd1283e17f9e6dfc741d679a828cf4e3c35aa69c0204e45fadfa77c03542c583ab5537d87bc
+Entropy.5 = cda91a0ea205c2e82522887b20d9f283f91bf55777e43816d153db724e607376
+Nonce.5 = 49dc6f3fe1f31aa0085a19b382adddd9
+PersonalisationString.5 = ae67cadd6dc9c6b61d7de283d7730e536c3e1f16ad8c035eb24f0e0d100117bc
+AdditionalInputA.5 = cb4ce726346a070db8f84b1e63b224f0ee37bca11d08d06130d9e13391f172c7
+EntropyPredictionResistanceA.5 = 6e79c591a4fdccc7c101cc086450664ffed9bfec825d19fc75a19aa94d3ed204
+AdditionalInputB.5 = 37eac800ec6c4a66392ad467aa3fefc9a0abeb565c9cfad14df109dbd4e72a53
+EntropyPredictionResistanceB.5 = c840d3a5fa58e1a59ffa246f7ba26fa85e3a31cfc85419ad43a33b26d8cfcdb7
+Output.5 = 2fad6c853b29bcbecf5c6150bcb1eaa8b93e05bbc516ac52ddb72d888607913f6b15ed257e9dbd1da30dc77b724dd641c2a44162b4eea2bc48243388772216b77e25db655a731211daa78e553cb899e47a870ce1a78c3e2f0bbf4392737f1184b322d79b109a24d3004a6359211a3ee9cf9d76bb2bef9e750f81258c5a4e33a5f6ba23dc4f6977708d93703dfd3afc7b0d9edd7fa4077fb248c7001fba4256372bf8d2083bfe47ba0adb2423070301f129beefeddf5df93b0207e9887a6ee47a
+Entropy.6 = fd1a09678543afb0d221142ced0f4f0678394da1af12694ebf39f99316e71b41
+Nonce.6 = c191e7450c01fbd9ec98472c091255b2
+PersonalisationString.6 = 99111d7d936ea733a289f3e34c0c500d0725ea59f08358b23d0febd43eaf9d04
+AdditionalInputA.6 = 43fb0fcc112dd8fcaf7cdaa4985f7a649da93dc50050eb530084080832ded8ee
+EntropyPredictionResistanceA.6 = 1946dc250de26a6afa98e3d134861aa5c6cfd54a9000a6e0bff55a131c7f1930
+AdditionalInputB.6 = 51941d7d9f837c9e41e597cb56c036f560e049fe0c60d5ff0fde5b3597a866d1
+EntropyPredictionResistanceB.6 = c40d3218bddb5ddda7453fc72f2cc40f9108c6668a2f16c938db80bc942a9f35
+Output.6 = 403ff3ed900d966246b3f1c4bdb9843b7f5607503b0a5f0338d78f1192856e26964c5774ad112301daa9799416ecfcf09079ee3d146faee9208ed7cb4993dae98ef73d8f5c63badb1e9c7ce671660bba8f28150178e97f48b5cbd3dcdf79b9468c99a8ddde7260c06b75ab92a5d361b978dfa6c992ce0039d1d00fa3d86bd7de4d10c160edf05d38b437016fae93dd1a445052de7a7e171966af48880b3ba8438fb42ae16f089636439f8487770b78b6c1d4b1ff8cd6c0b5994dcd39e2a232d0
+Entropy.7 = 40690e88f2ba65312109f9ca39ed78db5d21c8d339202a9dacc7e03882e22fad
+Nonce.7 = 7e0794edb1ee6db6d0c48e7a58267d9f
+PersonalisationString.7 = 5c5217e17a7f53b890bb89f8d7bfd2119ce9ee329e94aa1c2b85931fa15c2d38
+AdditionalInputA.7 = c57db725dd469f6c6675e6229a26cba7b17c2eb88b8f1af0b0b03e83234c4924
+EntropyPredictionResistanceA.7 = 57b605420fac49bba8bb2edf4dbb0f921daa5c00db33b2532453db5451c04abb
+AdditionalInputB.7 = aa2e3513918eb23008a987cb6ded3a560a6fe93caa0f42f2845df00c54bb97ec
+EntropyPredictionResistanceB.7 = a940f6d2c9fe0aafa21a737a2d473603eb852eff1785c69e15eb4c7a7b5c730b
+Output.7 = b995dbe2bf6c69b82d833ce1d36c637cf63f44217fbc6ea92e76eab7b779e5d44b7f7094e27ff33738fb08da77182685d445bb9eb714888414cd9f23762af32991881d53584a4fbd13001883a0a7a7ec6187b29ff82f3dea8d4810489dd8f952b70c6d3b34c769ec62a364d875971a0179ba0c22e1ba70fa5ea8a0e2a0866292088e5ad5d32a2cbaa5090767cbc7a2df64447e0d6cd311d3a664cb6dd0832085fd3edaf7712b20e86688b4773b88ac5f1b600ff9628743e24ba4c77552ff5341
+Entropy.8 = e634c450e17c0816880777b2e45574dccf8f0f3b28440f7284b1a65c60fab496
+Nonce.8 = 26a460beda87519e81648014a08572f4
+PersonalisationString.8 = c9d4fa7c93eb0ee3d27baa1de759ba9c4dde50b746f33337c02feff91df8d413
+AdditionalInputA.8 = 2e93ad847288552cb6b6325dd96d27b14b0f49ff93be524ab3485db6424f3748
+EntropyPredictionResistanceA.8 = 6b06957aa44d8aac918d216a2484f42ed0752c530cad9dfb550e48fa5f0830b5
+AdditionalInputB.8 = ffd4fe817652341b046eea6135fdd918eb73d6a0b90fc8e121612fb195482427
+EntropyPredictionResistanceB.8 = 1c946f7df3bd8dbb15fa2845c4b4037d64e37811a6fbf353cfeb402c024b5796
+Output.8 = ad78b8b4e5af61ad03ec9ab70848e2f514cb1c41a276b5f1a160dfb4fbcf6334e5b909e798e26e109d092ba7649e84b4e8d7194f4e1819829c1eaa0af43bd4ce60899710431a8e8082a7ea1ca4035bdc51fab87cd83eb0361026950c55a51faa8b1a8e8d1447b91cd49369e442e3321d2be0c79a0c6c618d430054636409f36f13f41734106c74d438f629b994c4263413251a138f161c01b5c159db5bb9227bce359f328a78865332e67f7a5193f4030b8b56c77b3d68b97af96db8ba74dabd
+Entropy.9 = 4618a0c3dddb957ba1052af01297325983a26610f34d51071cfd6a18d1730f6c
+Nonce.9 = dc5fbd20eca60cfecb30c773f31aeaf7
+PersonalisationString.9 = beba24e6ccb76481d613621e2ac637d5b2eb3effeee1ca884cb97f64056b1a59
+AdditionalInputA.9 = 64970094339f6e500f01263cac5ceaf9b47b25a5a5e785d1a8539389bac25492
+EntropyPredictionResistanceA.9 = a347dc810b6f52b7020ecd1fdcbba1c86d77babc031c8c3397ef852dd49d8b35
+AdditionalInputB.9 = 4de33299d744bad2c7251c648b619d81b1361bcc870b0cf6cd916acfd9b3d6c5
+EntropyPredictionResistanceB.9 = a38431b80059f1eea6d1c2acc37872bc3dfc95b210c81c9bc2a9076a65f293cd
+Output.9 = 3deddec1fbe73a253efaac170f25600b24de67995838527b4d9731f0eb7ebb71622d49a8dec1f32b24c05c78d373c3adac18038edb168e56967aa1a8c8f0164ef12c63aa95a7e114d2a87efbfac463b94176415fe1f9272229d2df3a09e3b9c43701fdd39a654e9ea1fe0c1a4edeb678eeaa4013305981a523980c38840deb9a1e71a3427eaca1e3220df2c0f3b8aa757d5a4170456451e7167262524177a3b10f9052f67d938a760f2edb5c3d6248cb88de1afa825d7bf1464d5ace3ec959db
+Entropy.10 = e29d51b6b64c7b1b67d25b27077ba9475a8f8b8f36aabe1f4f55491f92a7d2a3
+Nonce.10 = de4ea4ad841fc8ee0e10597f366b3e35
+PersonalisationString.10 = 9082277942c05699896450d6f7ff421a7d576514c9f9f96523519aab9d0d2535
+AdditionalInputA.10 = ec4bde8cfb30ea3958e072cec88a246cfb473d63ac41f88b9b8ffdfcbc19a8ed
+EntropyPredictionResistanceA.10 = fa084bacb2e4090e8b810e1e5cc2edeca583ed9a47ad67d7af9e27549a437cbe
+AdditionalInputB.10 = 55a9dae212d90c39032272e60d8f0aa9096f3fbb1830f3413ab628822c3dcb59
+EntropyPredictionResistanceB.10 = df3e5649b86eb8779c8934d3285ce8924aea827b60da7941d2c224b200361a15
+Output.10 = 5ea62ca38ef62be9e6e05c99feeb6d4558a019ca95067086ca779818b38f27ec4443cbfa12dde86212c4567e1146980e3ebf20193f6d2fb13335b0126c9b412d28ad3fa665d0722570acff57a82ae40ab253e4991e0edaa0eb1dd7877a57901ce7764a54a8e5344983c7a91ce0519332b8f80f17e83aa9a591295f352adf8702226205ef94fdfe564f0c74ea7a67f4dc970043a923946e7992243eebf3b5e12f9f5262ecdd2343b2ccf68f950248c7cfa684b19c5360d06ec0b3263e3a8039dd
+Entropy.11 = efe6b04fe49503b01a74d76e646f728f30247754e20b4b4a72a97157fb4e3e5c
+Nonce.11 = db7ad98beef3c87d7747abc6cfbb09b0
+PersonalisationString.11 = 6bf451eb1ef7ea08da5887e5d3e0da10d4901104a9d1aec7d62b714c8d28dd7d
+AdditionalInputA.11 = 874a3eed5098767beb357d5b119dc52e66497f66c306d0997a654e06d5802b32
+EntropyPredictionResistanceA.11 = 837c355c11efb39a9ee0c560d1aabf634de566d705736dac2db2c4f796160655
+AdditionalInputB.11 = 5cfdfaa3d5461380cc5addd515ba04b639301d7747b24a67258c5808bd450f02
+EntropyPredictionResistanceB.11 = 454f0d54ae82048c2180ad6879603a7d6ebd3b4d3d27282febe6dac8425d4885
+Output.11 = f5a0a5f7a291defc7551b6093f06ab642cf7bdb626cd34e7b77da32488ce790a82dc48eb80c777dd08045ae2a48696d640f6c534741cee91a6dd3968a7729b9d84766c029e0c3a3d77d3bf7cd4543888b0f04e2dd11c043e7fcb4607dc1d2df4ed06f71061b177a2c78f6089754680d4e2137e14aacc33853e65f75c88adb17d41c025af41505adcac6f6c893396ac0f739f842ef76d7a71fd288bb27999a7de59a1d89ceba5694bce8e94885f561792e7f65f5c3f20148b96f8db24bc2f6fc4
+Entropy.12 = 0ebb3f613fa25dd2eac671beeae92a3bc7274aa7f664738a0987e2f746058cec
+Nonce.12 = f820406c4138a7ac709e6f72bebbbcc9
+PersonalisationString.12 = a426ef5bc5e4248c52c92e4a0ca3a6e1988f29aa976196880d52d1db675dae56
+AdditionalInputA.12 = 2760cd0d1c8f0d3b3175d511ad6b5522ebff60170c1ec3b8a281ee4dd1d894ac
+EntropyPredictionResistanceA.12 = ba47102db25122c4894dc2d482973b801cc6e885d1c0c298fd3ee09bf0592c1d
+AdditionalInputB.12 = c345f465a4bf9af1af26e7ece1ebb8579f5d54b7bd5e161705939f7852374b15
+EntropyPredictionResistanceB.12 = f84ae7eaac67b813d6b73c66f02afc9265d18a6e1beba6520468c2df1a607ad4
+Output.12 = 68fbcdf8b0210b11ab195a20e87dd887ea72fd42600cff59e5cd7983201d805d1294b8ffd033f1c00e4f1d36dadc7aba1b6b170b9fdef8ae1d137d5d03d8a60995e52d9ad4a7bc8cd1d643dc92b33abd5e325556713f205f31328e8dc7f408c4817b5e114e151e81c1c802b50ed187f509520991e41c849bd266c6a675721ea12da3be0d9606a0b56f372b4b3b64ee9e5f5cf7f23df176743e502168ed62f920f71eb0523e46dbe91dca269702d18a1da873a94ceb51da027ed834372a78e509
+Entropy.13 = 1fac3299e9507bbea0b62d3e541aa0a74649d9276e80483268715a5a6d0b404a
+Nonce.13 = 0537192994cc193238e8106fa940ac43
+PersonalisationString.13 = 1879ad7c47c3376424c4d2d734683d5086b56b9c2be11ba3ffc3e3efffcd37b8
+AdditionalInputA.13 = 71f174653a31f7b16f7ce23f21c8b0ddbaec54a203a1dbe90f4ba5e250ad3721
+EntropyPredictionResistanceA.13 = e9645eb7044a185d6a3352ffdece1d932ebea615e3f92a5794f04b70f8bf03b2
+AdditionalInputB.13 = a5f4bbfd3652472cfa88f82f0a6e2da1a015c9fafeccc4f4b16e6ddf4519b050
+EntropyPredictionResistanceB.13 = 98c9dbdc60cf4d4755d4dcfa77db0fb6443c5964709ca30f67b70a9e25564a03
+Output.13 = 514dc091ac225c0b29e53667fbc77e5d123414ffd6be79e09fee482616a896e2a1388324ae054c27e04eddce681162e8954e83c6aa0b89f269c26d1b92f7b167eb616f074c6e4528b96ba28346b1380a9f9f47bde3a362e5475bd7df3d429cb6175fa6f120acceee1d8a5fcb26943c951a55c52c0e3c245703b7239d228b4bebd5c7ef0b060f689c006e39e47e658cd13cf87c98fc1973f6a50e32033e582aa971d92c68fcc0de803cc74d4345c333202637a2422e46a311f0489a256fb29978
+Entropy.14 = d565db58548b251e978b47b906d8c649a5e9165fcbf7a7ebadf9f61120691e7f
+Nonce.14 = 27a7e59937e63ad0dc53c4a7afec76e2
+PersonalisationString.14 = 5e4e49c92306d24378a546db4ec4f592fb847765493bdf57829442e9b2c0ce90
+AdditionalInputA.14 = aa83be0ebe913e01eea7ebb86d60b8be8cf81c1d20fe1092fd68d90e00ce866e
+EntropyPredictionResistanceA.14 = da77f3d06b879208676411752b329a9ec216c85849b1a778fcfa121d130aba55
+AdditionalInputB.14 = 30dd5a23a1cc9acb87060b151274df28882f3d442d1b9ee6ca58dc118ff41e0d
+EntropyPredictionResistanceB.14 = d980c14049c6d9e9bfa9340c92ba188091416e7eab2849f347f72840d79f9f59
+Output.14 = 97db825c1019bdd33f0f67b32adb6490a8f38e96fa34658f93edaf6d000ca806bbf7fe6af0b5b17c9e850a6dc41f8899355849f04e58ba0f75872021cfa7cc4410160324312fe8a7b6e9d8f42778a1b8496d9f0bb40eb336039ea3f762147fdef0d53603591b0fdb9f4d0b345c8f1cdbaecca96e5411a960933f52ba9b3457a0058ac464cb30118ce65f027e8a7584cf9eba11754ad3d26d3600a3af3bbaa9caff6ad4a28a8a76abff9c5d710530270cbd9972b90bc767ad7e76eca03dd13549
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = eef78763515911a2a6347e1ac8313581be588adac916c1d298fd3a2c28781e0b
+Nonce.0 = 6cdd9e6fbb4306376791754bbbed3a56
+EntropyPredictionResistanceA.0 = 5e20ba1818d8bd249278d108e54febaee14ba5f9b4792c90134217356c0492f8
+EntropyPredictionResistanceB.0 = e256cf9773fe62eede03ab531dbdac80c51c66c91f20c0405b25b12f79bf0ee6
+Output.0 = 679fa85dbc5d3d212393081ff61120fafb970e097e2e22cb980a61bfb5a7fd584ce70265a8679d871072be3ab600602b9955670bc40dd585e35a4c7af208f77fe830660fdc345d430a9effa21d953755515df03bcb73aecb495886a66104a4139ffd90041fb0f1f5035bcc7f3f4dad13e6549df3cf5e6a3bf54e2ab0dd58a1d0c4849b0710c2119b6f74c93d56937635a2d3753a1ced3d7436a5eaa558dd6a68dd89321b78b3c9d06b91fd5764d94cbf5d1455fd1f81f212b8902d4cf8db6997
+Entropy.1 = e18a4ccc05d3e3235c67522460a80dabc95bd5a971edce534a0687e1636dd311
+Nonce.1 = afb7b18cd9eec9a20f44f6e24d250a6a
+EntropyPredictionResistanceA.1 = 1c8449f78acef9619723f9e1d962f318d592421e0f57f97e75116f0b4b357f15
+EntropyPredictionResistanceB.1 = 01c69af3b52cede508520d3a1b4a3d1661bef0bef079a049cbec99794114d626
+Output.1 = 65d4971d56cb6acad7d5ad43ed01a41e67825998c0990a364e8c3af11debe4d1f1828e6528d4f814abeec8ca8a9358a1023321ef5a74b4357a0eb4f1ac20b282329a05e22f60467eae7cc545b7adb71720ae5886a227f8b444ef9df05ec9ce4514eb8202d440beae8c140050cc60038064c202f086508aca5815f8c59c021a84a9ea37510e8fcd5506b213064b82ae85b29eab9bf648560a18c52bcb162284a1c937c783f4500d9ea189547f28d4e25c50a1f35660286c9a086e88b420534134
+Entropy.2 = 46d9f61b720458e65c73bf3fc5365b539c9aca25901a67f3e73c4771c3a55889
+Nonce.2 = 4fbacfe26e0e4126cc7e1bd4d1fef0c1
+EntropyPredictionResistanceA.2 = 113aa64f1b49520a51c3265e79eab863de1271896d5315b47437d31361387fa0
+EntropyPredictionResistanceB.2 = 9067549be4065e9f2d549e7435bfec576767d6e44aa0a71b50709fff994139eb
+Output.2 = 6687323881ecf1f3a61ea15477c56a5e687ef714adbaaa35c2e0a46340acd717bb89950ee3c71da1810cc5f6b0ca96aa503b6c9960c772a414dbec386e44be54faf3878999bdf791e2743aed6d4f964112273124452b61d26ef3da1f42add5527b731234353dbeb94ccbcf39ab5dd78bb0d67ae7f6ca2303181eb419c02077a3e38ff48d7850a902998814e9d554a47e7886074cd74bc58f13d95835064d21aa6ddfcb9230b443a6a3cbb17668240e3fc0dd9b9ee65e071a77cfd62497de9ddf
+Entropy.3 = 70d42f9067512d1666f99b8de2f4e89b08ca6bb628d059d5641de516276aa33b
+Nonce.3 = 11d0b414f427f9dfd2a55a2c56ae88d9
+EntropyPredictionResistanceA.3 = ba7818a3ef27663d9f808acc252a254a46fda8d15114fca193c12372c4fb628a
+EntropyPredictionResistanceB.3 = 609e7f1f9d7d95d31c8297b25dcb4618db4b9d3e854a0220b7e193138793451f
+Output.3 = eef0419b3eff9f0757125a2ee75168d90c88948031e327992df742b225ee07c7028bef0c4b00d1968123d00391aa62c6fa22990e4998192bc74d44defba5f64af38858ba5552c1f7d6160366a1fdec0d59c9bc31cec0412dbc985e88597b1b0bc6aba96fa99141b7ccd528b532b8ebeca5a096cb0d328b3db7d5a796d3dee3a83bd079f41d3cb0079e6625583c6f02d439c5d7948d9808fda0745acbfa3d1537a3d3caf3a526709a1216e101fec5d46e9f65b76cbb8c6ccc57f4f422aa7d0f83
+Entropy.4 = 6c75b545101af2be82e3499d4831c7a4b0fe25024618b73a62cfbc616e34e717
+Nonce.4 = fa873ed785dbf976f53c48f051c396a1
+EntropyPredictionResistanceA.4 = d149ff4b0d65dd7d62ab12ac05b9b3955fa2d9eef2ac8bb4cdb3cc516729620e
+EntropyPredictionResistanceB.4 = a60b28f2880c7866eefd8a9754ca95c18780120d2ce0c7dcf8e39224bee690db
+Output.4 = 06cc80aa2a0c01d6674d93df8624830eb2c98bbbc987c6c91db0c29e01912bb20a28ee1105ad4414776722bde656f8e1afb1f4af38e6ee01d8752f3392452fb67f4dd53389638d03b3d9c17a8f195c7f01743cffee35ea84ab66d1f173da4ad0f6a7f508a0a52800c9941e5ea7e8b72dbd6c291a0fd74a451646c6d2ec7e75d992c5c15e850adfc482a0d808d3250f6c09575796064a4849a4d5ea382a9c7df49630ccf751fe71b3b1475b200b7c577e2e4f858a33105c29a1d99be50ad29711
+Entropy.5 = 55f791a1eedc4ca546b43d32086d45954c75e5c4df12d65ed443d6c613eb2b29
+Nonce.5 = 34b67e70b33095dbc22219821f533e79
+EntropyPredictionResistanceA.5 = 76eb68084f29674e5b88102550149b0e00f96487c0617b6638a2386c65ce1be6
+EntropyPredictionResistanceB.5 = c607a52bf1701e1fdac076e2f950205f2713b6ebc5903f41f3755621a7c5bc9b
+Output.5 = 41fc8b872e4c73ca13d891735b2e7711f7e03348e107330bde18cee169e3bed49e39dee0b2a5dce4761a7ce7ef8dc7b6724019482f7e56ecc20a70bc200cfd0a35039f3e14741e3849caf18501fdac0282ecbb699128e345993038a3f7d55076b53ec848d5e504144aba8185f73565f60b586ad6a93f8f98aad0c314001e83b03f0895b28095000864deb52a142bc3bb32d45d3b1d24a7bc84d414c9de361070dd1d1e03cc09650fdd5e22155a3dfbd786e4715fdc6a6c457e76a4323595295c
+Entropy.6 = 63858603ded670b3bd35c2e24160c4bf56cb1f50cef6d07d177f79611d666226
+Nonce.6 = 6dbf8cde5838c435166719ca43f15110
+EntropyPredictionResistanceA.6 = b7c9b4f9ddca768cb918edf7e49273487d5e5e8e0cd331ed49ac325c7454ee5f
+EntropyPredictionResistanceB.6 = 4ccd58a79fa731f13356a98f9dd8558326fba61311bb4330a01a92578500dc30
+Output.6 = 07548628deccacc9e284d5fcef2b456badb68be9392cc9f8adffe737b546d5358df37cda59d4196ac9743d5e48230b736471bb7b49dc8c6c8bececdfcdda8b54b852313840213c3608771de1c34bed87b907f46bd51f539fa3b1bcff1724516b3dbd862e402a479a6f7be7fa57e28289268c4cb5418266a38616793a8f0ce66ab6ddd7b793a35f55e46e8a222e6a4dc4513af235a1d8aeed7ba94a8836a84392ded682945b238c787da7e7349ed5d03ba859ab5d299f163c534cd1960d4cf7bc
+Entropy.7 = 25558abd405202338f7e14c2562e34d9d3f337579ff800dd9836bae6acbd93e5
+Nonce.7 = 41c79af44eaf4f3b7c978f5c81d18a30
+EntropyPredictionResistanceA.7 = ff226c9b3f340861607715bfead1b299858441313046854cdbfc01b2db65fceb
+EntropyPredictionResistanceB.7 = 98503efd9679e09597caa3bea11ca6ce4e3cdb8db1bab6e0a420a7611f345588
+Output.7 = 7784cae2a276a9e0288a38c68c514e088c8ba175af07bd6f668d971b8c7c2d78c20526136edc6bbe038d49cca9bdbd6632f2e898c3649c92e3a082023aeb55951cfb6c95b6605a36d725d1b3ee69239c706713eb6a2a7d9df795d7982539d188be1088f941e0703095057e065802095a6bd69aa6dc73be654b5dd5db5b8db22f849f88544a2e45be68f55ac5b36567a3f903a76916e50e2d7dd58b828a8c82cc4eb51bec5079374d32f2670f5d910056b97b003e156944e6c76fd300463772e8
+Entropy.8 = 0dde2e8d2737d031552fb335cc3cdc5943eff7f457cf4cd1d47eef2852bbc225
+Nonce.8 = 947dac0fbb020bfa2f47a50420092913
+EntropyPredictionResistanceA.8 = 6493467bdbbb5b6c0a446c51055bb14ed798d59395d0025bca02ad537cb8845c
+EntropyPredictionResistanceB.8 = 8c13ca591967c7b8fd90dded3743686b5950b560e4e25342906a45d2f37366aa
+Output.8 = d179257c7a16671a126b8283a335323e763fd1af5249b7d7ff56c3e7391cfef447483edf97dbd3171213ef128da9ebc7e156b7f407c5a218d02f82b2cf1e277a4ea1a52a30a1db1ce4a58f39f1ac61924b109dbd38f0cba5d0acf65beb32e9a43d14ac5a526e79488958585765f09c75980746c1800b1eb5625ae23c628d96f6b09f2a395a912333ec8321c955aba715c16cfe117c7071c9a2798144194b5965b24eb4e75f05af0db3bcac183354f84b28874de87f4839d25ff4d543fdd130fd
+Entropy.9 = bc32c43e766cca6a405d0eb68819be1bed979bfb925ae729c124c644e2a2aaf0
+Nonce.9 = 54ed38564181a28729be0f2043fd8a63
+EntropyPredictionResistanceA.9 = 650f9e754cd8c95c14c76db4e2a12aacb7a8484a298de61d6c510ccec2d67d25
+EntropyPredictionResistanceB.9 = f58090c544dd3b108d0e5a4f65ad46cca27935d92937bd4117ae4f81fe0b8cfb
+Output.9 = 169b594a26df2eac845cc1f78ab13aab2bdefa993558eee9e9111fd263a9b025be72f89f0b5f0d64aa6df596de9d22fde4f84b507a4b4a1d0642de8f4effda2c10042e56b1067d981aa05e2c7521301e4a028b1691044b0f465025055e6861ba703ab296a8ea5e2373ac57ed6adc832fd8c7dea38518d02f3bd104a58b0c26a3966fbe1f6f4a70ea0b93e0207fb277dc911bbbe983664e38350c2886077b571be91aec9523d54c04b0bceeac2f367aa3ec5371c6d6b83d85439e680d19fb0254
+Entropy.10 = c2bc45c9f177792566d1bb7451954a17903bd86fff41b859bb7ff5b6548eed56
+Nonce.10 = db10c8b79ebc6df7a145e369c1ee462b
+EntropyPredictionResistanceA.10 = caaf4adbbee1d24c8523590a47db23e33dd176631b9dbf0be3312a026a3557a9
+EntropyPredictionResistanceB.10 = c2afbad0dd3ba68f839a6b135efad8af6033038aeccec6f9d163c8fea6cd1a29
+Output.10 = 1472fbff8b37a868cd240baa8948add0ba21a69b9ef39ebcc2f070a79315249f4187d8166f637964b9d618cdfe4236594c02c0e925307cfeba798902ab7b184e60127c130f6b4ac71b0c6d6cb1f2a65c0c2ecb93efbd48a203369f3ee9542ef8a7ce2d0db499b477cc23d961544e5a70046c60bf391e74e98dd720ca8b54579b828c73adafdfcdcbf20eb2a620b052cf3cc968332274a91636f4697a43d3dd25de8625f1de40c42ac85b9a9c7b2cad1a2afa9fe4b21faeedddb37fe9c4a202b8
+Entropy.11 = 3fd19eb37a0008de12e1918da34d592081f21b3f10325b2746fbd1caad561fb6
+Nonce.11 = 1f7ceda49a9acae9e4f5aaa2f5b467bc
+EntropyPredictionResistanceA.11 = 7b1b4e7c869801f5d46eaf0ee2541a4718a4594040b605d033c6e1af7125d74a
+EntropyPredictionResistanceB.11 = d2da1f24aff8cf30bde722e9aab38ced60d3d016623f33e9530ce9f0b302c909
+Output.11 = 6e8b8e7176786ce5b92f733765fc08ac308ef354847906f6ebffa4406a0b991a5f9dd022457592d3e683d40d347d2ed263c2bced9f6ea0f69ca49f5b9ff304801250ce96918608f84cc07eafa9853121ed22aa86b2904dc42d05c750dd019cb849a6b94af7b97b985f8cf7c83acd0ad27ba30e25d27de0ef2b4605ccba486a2a2aec5032e0474410cbb1f61255a6f2deab5bbc172360ebd7f1d285365e3ad804e9ac11031e011277afcbbc9d68498f61bf0655f5e1c29df8b7f14c19272485f6
+Entropy.12 = 9c080345c945182bb0fc6863c635a40f37d83c90138535af711328e164400769
+Nonce.12 = e78250d35365668e528b29e5a15316ae
+EntropyPredictionResistanceA.12 = 40323a991d052accb9908572cec12e97a30da067e45960b64043b9058a0899e9
+EntropyPredictionResistanceB.12 = 30dc646886c6396529ee2f0c0dda6fb1a6fc96824e382eedfcd004a023934eb0
+Output.12 = c5e823f05af28ced3a87f7cc93d3e492a27610e613d90320ecaa755317ca037725e20e5683474506dbd72ba4e6b992ef149e401f76db7c4d8b360747218731bb8861092894f61c71c5e07ce7146381d8e1fb4fe0d6849621014e17795d71a886d486dde7d4b551f2eda97078cb072ce4c7443506a2f3ceeb578e116099b293b0604e68628a1095b78086c01ee49f7758a96a8f7f19788adc93ee27e75a6ed70a7881e10f509155b98b80f6cf3a07cbf74362a37f9dab9c986884f99b1d34c750
+Entropy.13 = 46ef4d853d0e08030e7bf8c440613a314726c46282f405c8240f1025404857fd
+Nonce.13 = e076002b965710211327bd388fcb62af
+EntropyPredictionResistanceA.13 = 2870fe62b2bef204a5af4ab18f855f9c48796c8e8639d5d7219466ff2f9e5ee8
+EntropyPredictionResistanceB.13 = 32bef94f623bc02c7f3be4da2d8465465aba6bb858616ecda634ec7b3bc50a40
+Output.13 = 2c210f4e5ea3b3d8c4a203ea2471b67226b0c099fc5aae0ff3bca8dfda66e0d20fc767151dc406c35d229e702ccc3f3231af15baa50ed0538d902a3d2a755cfc2f8922545baa6daa3982ff1bef2399b082c4624028f33f9c37eb1dbaf265e19e21aecb78a5916b6315d8efae3158218b1e7f65235d7ecb20fa72968243c69ff6c2893c8565f42fbdc6280a12bb76a677f600ea0cec8ed836d37cf601b8ce71649201670d734c3e0a86753039d78eb654b18daf2ac23ca6a8b4e9073f9585c901
+Entropy.14 = 1ee324c994c67fe57aef2515a95143038b7f004944b0f245e6d582c8752c3063
+Nonce.14 = 7015e449de6813ceadc810796b6de052
+EntropyPredictionResistanceA.14 = bd108a354d8b8448d8add8059b0c40ce026bbd85209c878e01da0c111de79be0
+EntropyPredictionResistanceB.14 = baddefae7c08ddd069296022aaedf0eb70e44df7a1aa04a030bca6cf9ad89211
+Output.14 = 8360787a7febcd2965a605f03a76a46bc3b842097936c0df13fb778feeeb3f7c12af610fc1d845ef71d5b4b834f1659004834c107e084de52e2303fd81930eec8aea7fa86893e58ae764f1894965b04bd8bb65a308e4f38d390ab11d93dc77c69e86650bdc20e7a3fc616a996f4a4bd5668d31c6155644867ad93e31f8d78f512a99b6b368350c53adc5de36fc13052e600dffeeaefd06b2a4b969782c046087ac07a4e02aa5302e499ac11e26116186f32d4169454eec4eb29f2e75e544a0e9
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 31a00bdcefa6d1cdbf11773ed1c0b18b845fb19baf39d2a79c977f7c71c73bf3
+Nonce.0 = 335ce5791f65435044046e2471a6ae7e
+AdditionalInputA.0 = 90028e75f2188f67771e9514ea896d1e27244ae227e5339483f5bf6336433809
+EntropyPredictionResistanceA.0 = df49c7adff5c9b3c117ea8424ecb3d0935e107fb1e82c8a6557ea591f4a40d76
+AdditionalInputB.0 = 2e81913d5897cf4d523fbae4164ffe3828d7734a8a7ddd112cde0db3b38d710a
+EntropyPredictionResistanceB.0 = 85111f6d99587e23178f6a22a06201d87eb1c44037b2f817ea489b2e8afafdb6
+Output.0 = e6631bb9936046fffa652281e992c77ea46044af132cffce92d7091ccfe1920b1c03c90a062ba0045d9150de65f67bc830426be0f5c0d6e21551f3b5959782d591bdc19fa9b7b658b027cbb6af129e7226d663df3f4106c16c71e1da422cfc5e3e7dd68505fecd8d72d39593566241ed4555f9acd40384b88e451c6ae6f2f0b407cebf80a1610dcd7292e50ec86b5f71860b7cecdde5f90ab7f3cad84d6b93fd7384bbb5f25ba1336a8ef98297ecffe4902d481023c4ffc883d801215559b497
+Entropy.1 = 70230de3523d25ae2f4cde28b2d9be268cd0befd73289fb4ab64c4392bf25273
+Nonce.1 = 65483045b05749d53ec603c7691f4e01
+AdditionalInputA.1 = 0eca44de743e8eda9e8ed1c216562f9c53c8a97e7c72dbd7c0f2dfd9463b5859
+EntropyPredictionResistanceA.1 = f2ea4d6b1a8474adcb07159a90b9d4dcd087bd7c1bd248b15fb4ed9519b423e4
+AdditionalInputB.1 = be40b22d4950a5468adc2715002e0d110019b56adcebe393224d96ec619a4a2e
+EntropyPredictionResistanceB.1 = f443403c16273bc02749d4554772d5a8f20e52fd334cfbe6150890463546b4ac
+Output.1 = bafd13ae0d60cfeffab38ac6ef386d213e80c035473cf30f24868a0ce3a7b75fa7e678a5a7e7813d21df88c5220aa7ca72e667f667add11447a14932ce9fae67ee6df35d662dc2a324a2d8149538dcbb98be6a6bdc9c2bb72b0c4a64cf9af2152b8403cd69a3dfafb4b1fe2f074376a937a8c672f2b875a7f4123bd91a2f04cb4f9ad175b232a5de131a83a3a4e2bd3f33321d3687c2ce0cd7f830222436e49f692a8fc95d5b5868ae5d208475f8828f9e9e895cf78522617ff4bca2f2219891
+Entropy.2 = c0b42856527c77ff0e10a906efaa48db7943bd07254c32389c37d260d11c23c8
+Nonce.2 = a471a66fc43e292ee09b892f9aa2fcea
+AdditionalInputA.2 = 770061a2e792f0f09e99b8c7f7a63673a3aec4b0d9a16a99a6e10042eb5fd60b
+EntropyPredictionResistanceA.2 = 7c92e5b38aa124650cdb978b2d2a80af1f8d9636437f6799cf45936803591440
+AdditionalInputB.2 = f1c38cd14fffeb8e03cedba50aae28a2398f89ea0a5a147a079964d7bdc97503
+EntropyPredictionResistanceB.2 = 0037096f4263ba13c075938f2be4d5efca47bef76c66a204d87b71c9f6a98cd8
+Output.2 = cf94a43eab4245d5b2d5439c13054c2b3a4f4c16855cd6ed5a89fa6d007a2f94b725299c274373b19d38a47ca37ce6cf815044385146e2a352a9ba75558e0dc5fa786314b42b41322d19e2c0cf6b272d08034eb90660b56f395cb0e7a5881102f73b93f6c34dd1c7d3f1cb76e4e404575002179d324675ee0ad25be03b2303b3dcfb333bf21ffd34b821e4b1e6cea298383e41fbdebf8de80e0537f653e380bf8ef4ec78739178dbc8b605e873d2e7ee7a492594448a5e924e6dca3ddf6d547c
+Entropy.3 = e31e7b155c257cb3a56f0f79364ca708039c55b8a95d1681780279551360afc8
+Nonce.3 = bed8b2c68e48f408a07e755dc560505a
+AdditionalInputA.3 = a4ad528ffc333a13eb0d7f91a03b6d50a4c70f666579d7540e05d19c99f1fc60
+EntropyPredictionResistanceA.3 = b251517c28a6a7eee23f801c1e8373fdb9108feae4d6dca37961362f01cee8b8
+AdditionalInputB.3 = 4aef8a8799b72023e4151a9f9c166e4e5975a38aa514951fbbc5a11f39fd2652
+EntropyPredictionResistanceB.3 = d44b931dcf21b2e086e1ddf9a6e3ed3c69f9612cf26abe0b992f2a5e1312c67d
+Output.3 = 480bc91cb825bfba9f71ef17d38a3eb83695ec20c3b4b662fcf3a945dea96c174484f089351ff2f9b0d03fe2a70aea18cc7f0b452d1ec17fd33f42a5ba8f7722ad2779a0f54c8373ceb3c25a0d6730b0e50082a3a05ecf6482f49a0d3d56a504767b023653fcbd8b4313cf66e1c07b0acedda776373c0d8b43ecbaa10c539e4673bdf5a53d0efceee71a2b65b6e46a983c53955cb4bb0ee7d858e9b19769cee8c95204555e46204802df8ade1e3c053f3d4163ea1267d9f5744b62ec3664cfcd
+Entropy.4 = cd06ea452da31d519b4cda90a2e25c1e59ab51aa27be71cd5579407908fe981f
+Nonce.4 = f15d6656c175a0c756c6897c311815e4
+AdditionalInputA.4 = ff3c495d8914c05fbd56085d9b73e118fa1fb4cdbbc9ede80d3a60b95fdbaf4c
+EntropyPredictionResistanceA.4 = d5ec084cb5d882145a87c4834d0a8bda5448934406399e75a648f449cbbe803e
+AdditionalInputB.4 = e558822df2eb42f8ef8df4d850f1e41a53189e1c5b681da77c7e4a4193909b95
+EntropyPredictionResistanceB.4 = 9cdf5cf507bfe2d80223f0922d0c2583c179f46270bff28f4f5dd7dd33942466
+Output.4 = b308c672ba2455a7b4bbc27c82b865c38e79e9ccd59f58300c77e3920bb9451242d973f2b66ae6727a9e85e15bd8232420861b3f0063d353f8264edb062a9506774faacf04262ac292c80f781f12a1154f728ae104c718bb29b28caf104a8e4d8702ca9789a7ec41f0c9e9f0ccde275f90980483955f005e2ba42b865acb1e42168b3f3463ba4d8fadc4c1378e8c97d1345bcb8476173aa4a76077850e51fc767559cfb38551a8388e557837b5a018708903936e6e1e69a37781c9336a061fcf
+Entropy.5 = dfa7d00dfdb50764602c82ab037467afed3ce326a0929c34026c1fcf2ac67534
+Nonce.5 = b2af6a264587285a212fe306983f68d4
+AdditionalInputA.5 = 789b64400ef10298b934d9eae35c6dad4d000ece6884040ba88d509e626f1058
+EntropyPredictionResistanceA.5 = 3081c8382e81d823e6a7730a039210fbcea693f67f41c9422b6f747be8f4790f
+AdditionalInputB.5 = 14bbaeb195d530e1cbbecd635d3ce657e9455f8447a4cc40eb046bc578cad248
+EntropyPredictionResistanceB.5 = 0fa63d2a0ada1d17777456f78f0368caf6199bb8ed65be16c01b2d28b8d3963e
+Output.5 = 5a5e48bb35746c0f08b7eebcbeeb0f73e9fec2a13fc7ffc07e23ce90edd008b1e48f0bc320816974c4a898da0751b23bbd2259fe57c7b690e6ee37df5c4d865b0988be93aa3abc859a15132887bd969a89e2c46bad64535b820c43f7e3c76fcdc687759e37a53f9fcc5bf1b0002a800d7979adeb4ef4c03e8eac523e6c9213cfdd651e6294efbe4ecbce3da373fb0926a2d8819310c82664cc457fb670a4ef4cbf3f415b99ffec52ee2ef8067a57674250e292d227efddbc9368fe49ca116f21
+Entropy.6 = 12a877558a39e8e3fcd8c7bd5ae58c0ed5849acf1990ee8eb47eacd7b85471f1
+Nonce.6 = 25af1402a6cf3624a77fa599356b4c13
+AdditionalInputA.6 = ce1ca392f5f74593c46161db7a567659ef9a00364a2b0263e40f9a4330278f12
+EntropyPredictionResistanceA.6 = 6d53e2fcf9dc8562a75f17e416adb9f3a282efde8c931c9d9fb02785473cabe5
+AdditionalInputB.6 = 4d2981565b5ce0348ff554788178f8136863138879ec29fee4b101f4864d29f4
+EntropyPredictionResistanceB.6 = 651b5f25918ef75074ea87106c2111ea3fbc6b23d817ee2d37d845d3a366a1e3
+Output.6 = f6b1d882efbb7506319b275849827eb0fd28eef97db0216c527c94d19fdd5dabe92352b423b5066808b5789b5d6347970aeaf6c0b058d6f6b612fca1a5864b35a22f3de2b1f10cf1004c0fb7be563c34ee842749410f692bcc01b00ed4cf8236160d7c67a45ad0868f2df9a56d857526944fe622cd6a17ba8c7fcd8b02083857971a69325ceba008fe784415ed30d3f30e57849c72c91a398c11f736e261aa3724cb11ed0f7e92349fc3e53b5278d86ed6edf654fa233ed7a86a2c5d58a92684
+Entropy.7 = 7e65c3c58741590afe2099d6671f142bdbe4fea0d855881c4cb199a5925a7394
+Nonce.7 = c7a6d4fa9e0b40fb8ed27fbf34305916
+AdditionalInputA.7 = 7eb8ea131b45108da3da9fc55070e5b65b8ce786cc40e66ab688855d2c8c1d47
+EntropyPredictionResistanceA.7 = 4c1734508f2addbbb27a7d4941c26af3c8c7fbf84ebaa1bbe7da6e7a11bcfa94
+AdditionalInputB.7 = 7285522841b4ff5e1f5a528309539df1c72bd01cb027118d64267dd98eba209c
+EntropyPredictionResistanceB.7 = ad9793aabc91372629298635eb7145bfd294f44ba1341e848b79e427f09dbc9b
+Output.7 = f01c0332ddc6273bc79c9cac7adfd45a4d253f95c98e49628fb1029b886dbfaf0eee70dca30dcfa6a3aa3bf08a45e45740ec4b514f2ac896dd01465fa28efcb2ffaadf4e0c43cb7823f2d4c2670ec9375e81b601aa47b2ae2eaecbaea3c71207f4765082110005343ddf01b5963d3865f8319e2dcf212d90a3c8dfc8a17add6012076ba6b6ae74c56b9b2da3eef7956404243dc3c0a4f62f6017d7e28887ef928551da591eaeeb7a7fd6abf0ee8ea52340816d0fe760e3fcb2e4ff3db917c31e
+Entropy.8 = 63c3f36886bdf2103b738fa47ff9d922d6e6323aaebd748943e53185e2036472
+Nonce.8 = ceff33a59f3e7fe9fde3a3f017751886
+AdditionalInputA.8 = 35eaeb027e310a5a0361ea32bc8d4da2fb6b37b6ac24427cd0e2f8e510f53410
+EntropyPredictionResistanceA.8 = b7bde8485e1d9009dacc00e8577df52a8e5a14a3019b9128162ef474cbef49c6
+AdditionalInputB.8 = 14c811d7dc161e39976a288b9ffce5b4a5acb7ec29a4cde18dc3efb1da32cccd
+EntropyPredictionResistanceB.8 = 46c3414aa1a0d065477b9cad4bbb9a469c1fdd039776eeda09ea2b571b964178
+Output.8 = 2d73a470a5610a672d1e5ce3d0b4ed63dffd2509362e72aeece18eca218c2260347578de980541b44224d6bc332541faa9667f4cd6140d9a1520275bd3f2a873aa93664c20dffccafaeda1386cbe0a67acbf4de2da11a4249caaccbf34250935094938ba4622ef485064e80203dd4a88496dc89eb1d607019585bfa5b4e7a3cd68588205a09902ec953318187dbab86b75d6f4f5f74b59adf8cbdaa30b823234b743f77d1548cc3720e9f47ba61693897ba69f18f5d38e92427225d82a207f2f
+Entropy.9 = 9cedf5d790e14b36ccc5208a7aba17961a918c93fe2691ed9de5654de65ea725
+Nonce.9 = a226a25acccb819ab75ef53b7157acea
+AdditionalInputA.9 = 63227631dcf079b195b354fdbe52bb1b58ac4c75ad17f3763445146ec8ca38dc
+EntropyPredictionResistanceA.9 = f7683289946c47bebdad2ee7ff89e38a64ea08edc51315897adb921b278895d5
+AdditionalInputB.9 = bcb5fafadd82055ff7f5b665330a1fe04476694c051253b6be37871d50b59e77
+EntropyPredictionResistanceB.9 = 52ffd69371d29969e824c3890607f702031cc3a9a745cf9bce36579588da4ba9
+Output.9 = a4de41716dafffa5b93b068230d37b203f48221f825168e2f06a1720b928d41164ff05483b6fd23d77070adbe3247c67a10f6ff0240c53ceadcfcd65bb2fc56ba786fc7830a495a99ad3908d9bcd150e051a8068ded2dfdbbb9c1bf36edaa7f88dd09fd99a6cbd05fc5c5c1e4b7bc5e326cd3b819120b73262ba47978c6e2597e9d457c6ea82fa2042314dd3817beff56397d94294b75f40cfb21de117dda52e144126a74366659e1c0575291f90d38b9c1a5ffdd3130ffa6ca74b544921c930
+Entropy.10 = 8ff398da570404bb294516e7f1ef4211b6bdc603404929f1ac5e6ace2b34dc91
+Nonce.10 = eb6fd55a0a894d5cb5484f057f3d9133
+AdditionalInputA.10 = 629d930c997fd9e39aab0c7ad6694648ba8d1c5a1cf4c98057fe4c4d2f722b42
+EntropyPredictionResistanceA.10 = d2356213c0c9b1ec5ded13636699c36b399891585c8a8a470111ebcde2e2b201
+AdditionalInputB.10 = a529d2840792eec239a7adaf7a2be8b4ba8e00591635412839e8364f9d3071d0
+EntropyPredictionResistanceB.10 = e98817008399b72353bd6bff7e9578c22d7c8309b188f52d473a38e27b39c535
+Output.10 = 00acb6b8f8b75c4aad3f823174b3296298f5ffcbe88de61f210fa83bdf9fb371093fa1b258117041287c5a27b49d0bd7f13a270051db26ff3cfd2b41ac62ea4f798f911d2f0589ab87a86a9ab526377acf5bdab10a69514b01249242abf6ec47d3be9b303fae7d8f1f6eb6cadba9baae0b7ede6b1c6378dd2c54090a83032b74dec38158dc5c9e9c408676e9dcc926e78d96df16c6f1ae072b1ebedbf63efba997449ee6f49f2ea7751b2ca11dcc13bab579f6f90a7284374b3dfde51455aba5
+Entropy.11 = 597a0938a50d9039b3adc0a2f583ef597c4e535b9af81bdd3f5cc90a1b69c141
+Nonce.11 = 6b8a9853e2fe1c020b872e8ab9f4df72
+AdditionalInputA.11 = 4dd960904e0dcda33c3bcd34b1e47e611c0cdba053cce86b71696142d0031ccf
+EntropyPredictionResistanceA.11 = 16f5a05b5368743c5c6763baa453a79a61a72228b39f358d4798a63c59144f1f
+AdditionalInputB.11 = 28e04bc96babe5ed0a218adf6037afd81c741d3fbbe80faab2b6abf3c22e1c65
+EntropyPredictionResistanceB.11 = 93fe60e11bc8672d220aee30fec8e5e7a151a77824478404c32ed4dcddcf4624
+Output.11 = 558b836cc926568df201b0ae6bb9c5dd59187599a7d1f231ad3803f95409da311f4b1d136a02ac30e74ccb1623c6a8ccc481e18b56e69834ea85ad6052e39fe3f39d325cc560a95759e0c710738e91d9c95b3c486dc381f92b77a46a173ee451932fc22014b769f8d9d440ea58034cec7db4c8e77fb3b97d4bbbe08872a7076a94189d883965731ba0bc7ef1070f072cb837e0a7685c4c11b0dafe6f723635acbe46a763c458b987dc88847416e3984bc8b5edbe0fedf4d4d0e74de6578f43b3
+Entropy.12 = 96a4ba544a2cb9b1b05fc148fdff4936490477d9aa8864ce02081e9a0a70eb80
+Nonce.12 = 13c5bc8d9466de92114a564063a43098
+AdditionalInputA.12 = b7e737ff91fbec2f875470db6e73720cb19eb5a3404265008027266807a43f05
+EntropyPredictionResistanceA.12 = f1d6efbb8832a07b097a6e5187629744050c0237f1c63e05b99aa03f0ce1af25
+AdditionalInputB.12 = e8e06b63276c85e6429932f7a7158923bc32c5896d99bec4c8682180fb1aaf9d
+EntropyPredictionResistanceB.12 = 5f231019340bfb4cc6740aaa3150dfda757e1b9728cc31f878509f18759e8ab8
+Output.12 = 455c000f0f6de560e6a5d3935bbb2a11287649efb474cfb6b28da7ecdcb0e458dd62786482675d7745c5fba387e912d8f55ee2a575ed68fe4a190537e78d3da79a99784058b75ed49f713901042b361fd275ccffc2c94fe907fc091e6c7bf164683105678086054a9c7372c24f5322014e7384f937dd89ff9edcab2363a5bf52fb09303d88568b4c9f9bc018b585d54cd6337beb66401c8d64f73cec059e0b92a7779a78c9fc19b105a82bd9bc09488d46633f724a0602f079e2f7d21c4968fe
+Entropy.13 = 29888298c43acfb0c000cf52635bc06613b70e9e7991535c51f75c360498912d
+Nonce.13 = 32d0142d93933a1e6864d8b1b045a242
+AdditionalInputA.13 = 0d6220fddaa79664f8162d961becd9b031f44be6cc3468919de9f108d0e85582
+EntropyPredictionResistanceA.13 = 4af970a06b4c6c718cd33e94398efb72b086a7b2a4caf1853be754930efe8bdf
+AdditionalInputB.13 = 34c230cfea01df33a1e256eab5a1f956f335fdf5e88fe55fa6bbd2b3ef0dbf76
+EntropyPredictionResistanceB.13 = 937459ca64d73b3bcd0bcc95b3e9eef18cc242f4704ad2aa30548ed5dbe55274
+Output.13 = 7491f193a05d3b6b9a3d2111b166ba41a9fb660bb849bfabf9a93eb114d957f4bae41945f6bdab8bafb92e32563bdd457e3806f1e2755d19bdb5028b9531341470d4ec02adb396755229fb8acbfd710f57e2f32df2217810ab0e53a5d3ab21663891ffdcf3c7d8738ce52be3dff7ca4e123ecd031c082c8282145a81022aeaac841b54e6f9da153aa5743c5b9b45839a471f049838bde9f8a478c5d12c69a589e0a4a9ebcae7a34580ea434eece2c121c1e8529a830a0f3c6b0e4f61ac39f7b0
+Entropy.14 = e3d910a22683276a45518ea949fac20a51718de6fa53c8cee404e7f602048ffb
+Nonce.14 = 1b95d11c78b6d112d7373afc01b412b3
+AdditionalInputA.14 = fe198563906374a24381b73435b181f844bee4f00820bb7338306081358a6af1
+EntropyPredictionResistanceA.14 = 8eb5bf130ce2b2fd98c34cc72f58f58427990fe50e14c4c1e3dedbe6527dccda
+AdditionalInputB.14 = 8316fb114ead33f4d6cf236cc711432f42a699c1c8207865428de36375cc60d3
+EntropyPredictionResistanceB.14 = e4e9129ee1cc84738d8eb8db7404da8c0f9f16a5dfe1b2cd99ed2b08bfe635ad
+Output.14 = 18daf46771e8acd38c2cb82aa837a239a145c48c303dc26feef47d5cd74b01cd53546fe54e300bd3212e1c13c1bf3a9d17165c89399539c07e30816ab1c7bd1b598e1b07cfd4ad0785cf6f6a5b835d8f212c825a4ed2d7821bb29255428c468c84ec2e609cfe23f79468f60b236ed228b5252a95bd4c0bfef62f2b640c7823e32d72e5f1bddd56835e0b8428ceafada24efe0de582678545de63cbdeee77d6b3929d83d9b5db2134349444926c6fdf2422c786a67e017a8f98659b9c80ce95ef
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = c94f8ac452a0cdd12fb373c90ea623c3ba1dab7258237b71c2f32bbadade8cb9
+Nonce.0 = 568afd245c726e187715a9b59b62fa51
+PersonalisationString.0 = 35b26f771ae7f58feec7509e089acb1aedf039ceb6879dd2348bbde7b67d5e50
+EntropyPredictionResistanceA.0 = 0c5596184485ae2a70568404f076370a798ba331def2407ae1798749ab6bf1c0
+EntropyPredictionResistanceB.0 = b31f102418a2ffcc0eaf0c556e06a7d0b885ca99a864fa5272e2dd5c500296c4
+Output.0 = 4a53f128282ad1c11a3f2d09851e7ce171fc9feb8b33bdd9b18edca8603df5f7deb8518fb471908fa94e15a4bc4371c157afb868f0bcb7a8029f72f04a9c20d2f7a31d8b46447b04e610b944e0e4db73853503ec579beb61d5fe35677c29e13aa3a8280a44a771de0f2c60033ee2f806f5685acae4b38976c210af525ce217ab984d214b60d839e61602ada6b927df10dda0d7dc961e6b599ec962dcf0ba1448fbd2f755d681a4fb09a097c7703662cb81bdf75695efabb07ea19e747a24dfa5
+Entropy.1 = 95860df50db3c24dbe05dcd6bee5750a4d848802f1df4fe675e00a5ea3c5efde
+Nonce.1 = 4f7a4f5478b9961639729db8ff5fa2c1
+PersonalisationString.1 = 9dbb04024536acf916f90cca824d429b46392bdace44f81522e408f74ea461ed
+EntropyPredictionResistanceA.1 = e40411d36f0f33596803372e7d2095c059fed6ed70eb4a3d86064a49fd34de81
+EntropyPredictionResistanceB.1 = db7b519beb6f2fe25fa95009f1ee02024ea75b445a3dc22ce36319b066cc0a67
+Output.1 = 4169b21c272f56222009422b3c0997eea1745f8f76ab34fd487abc1e19abf43bc6b1631cef2d7c35e7928b7da2f5c7420ca6c9d898f46721cb6a448f194f64de0c596affe2989e9d4e532c0f3a1f36edbc0cb35e81541c45184c65a9d82a56d84d97a09bcb47f1d5a100acd43d17d8822711dffaa6bd0def62b9eabf897bd82e46445bb0626f964e2cf7a459514386a0fe09d0aa00bd7a1654509460729d2f928c494e385bfa8c65d6176c5c70111ee5e0035c62d32e412e8095e8f15ff132a6
+Entropy.2 = da4214519f3c575614864ef03a13a734711b522f1e8644705f2842337ee5eaa2
+Nonce.2 = 1ee49018769748fa19de188d89a7af36
+PersonalisationString.2 = 147f64918eb9a605028678b6ea74c670a2bc8428574ab7ec6e9a39880e407285
+EntropyPredictionResistanceA.2 = 8756dd1af991fd3c7bf22da4fc4babc631780c0ae56c8567df747866df94ac4e
+EntropyPredictionResistanceB.2 = 4f1dd91bc033da4eb2392c113ac566b3489ed2c92aaba607595b6dda38fe32b1
+Output.2 = cce19594c297f932ba6d338a8a27e6b4548bc4c494620241a925a7dd05ce2f5a66b431bf6718f6eb8005276f135c4aedf701dab6da0f6bac736f32661c9902e755eaeaaf6a1cc1e4579d202855d5e64b64cc8096de61dc36fc8721ad99a24f6d081ac8671052fe123b7c113ae1f6d27ba5227196dcb2279bbe40488ade6d3389d5e97a7c9966a8a46492a2f0db751c3a3d8804bd5bfb822f03144396c0ecf96aba40abd069b9fc2a9242911bce2aeb159f555f4c8c6bb59b661f009f2d1cabd1
+Entropy.3 = 3913be6fc6bdbd34fc3251f0f2c15d68ed93a6a87f08ecb7328683a1719de37e
+Nonce.3 = b809a8dc9072ad7a2f7225fb7eccf1f3
+PersonalisationString.3 = 70b53887b2072587cdcc02cd0d19bd6458ae9e75c2d61471f025e8af02b89bb8
+EntropyPredictionResistanceA.3 = c4bfbb14fc446f4e2cdc2ece3d87332aad536c9de3cb8f62174a67360ee7ff5e
+EntropyPredictionResistanceB.3 = fffd0e76d564a92977c7e87843e9134b021542be862362361476645be325117b
+Output.3 = 864938712a3cfce20c91e3c0be963af5c85f5ee86b6036908eaa10aaea4ebb1c2d742d4d89f68eb9d229e4a1f0f005af8f4f7f7bd909467054319be66f5713bbc134460664b7f0c1bb3dd4acd5d381e74d03018a970bfaa38f2282a53d933725fea7ae6f4d0b81ce50a3324763639be9a160d7822cd31161562c8a58d0a6012a1c956cda0644a34e4133f87388a1c294610e2ec91bd05e45ecd23df86e3463b8d907bf63174aeb7f57083a38901d186ea3ee4e0a58f9ad2756cea692b00a56f8
+Entropy.4 = d41e26e4c8d468a618d5b99307050ff9377c257577dc85273449f25f474fd335
+Nonce.4 = 30dafa0e265828b02c4efd07e500e09d
+PersonalisationString.4 = d5cd17ead287fe3f3642e15bae9f14ec0d49d795982f2724c59e0b4a0a8bd0e4
+EntropyPredictionResistanceA.4 = 461cb19601451354ac6425632bd568bc7d4ddd0726cf0ad1bb3f25c00397437b
+EntropyPredictionResistanceB.4 = ef9f5d769b0338739a7193fbb4813e36609fba348957b96b98aff3eef52ec205
+Output.4 = c45916f98d29428095ba496f1d53e2f0176949878f318cfc77d973e592d6e3046fbbcafd1320337ca8e3731ab22e9e45e64e8f359bf87d51586299b4f982dfe5f0350c166a5bae24376948a7661b0f1439306926d5acea06615c6ad7a250db1c990a286a72e9f14258613fd7781f2ca47fdb17c06918e3428ac0afc3bcd07c7ea3ec3d2a37486a5b8cf69925a1a8d55cc45013a764f8e7d682d319f0f798baa958313937f236cf4cf3c6191e7ccca82486700fc6122fd04bda00fe5320bd7d78
+Entropy.5 = 523a924752f855547a99c2e5e23be8d1af3612e7539469c23bae1f78175c1fc7
+Nonce.5 = f28763040a8a7c9693cd5e255e16a69d
+PersonalisationString.5 = e03d1490ed20eb35e7f719a9b8712dac885c213c913d8dc4c4c9c772dafc4cf7
+EntropyPredictionResistanceA.5 = 1c6de88416964cfea518814ae38248b68e4038d46223525fc325ea88b0a41c54
+EntropyPredictionResistanceB.5 = 08d53cf9e7ad8b1e1ab27d416a8a05dcb5e608f4981c5a56d8fa8bc5b42c5c9c
+Output.5 = 23d3184c2c3f1b5f3b79c735483f385c29c6c3499ab4f164af591d4cb05cc6c87233b3391baab2140e91a5c16d2bd7f4b27317658bd2553e93e7f8f5dd37ad03a940b23caf4ea0dd727b8275b22f7084ad2dd3dfa2e9c92c83761313eb53eb2e7dfc0d83e68c68ebfeebc4df49362c02644b2edde5c290a6ccc6a9516495170e729499ba1904019a7a4f43cbf59fbf500a3310a7a84b99d701dd8af07708bec553d0b1c0933927b3164afcd502838ff3255f407d52cefe991c205a8d59a00ff7
+Entropy.6 = 62e75f79a9ae50f6182f386408d31b9ef822d969f472a8559bc20738285f440d
+Nonce.6 = 77b96538982638ff2f88b927e555f61b
+PersonalisationString.6 = 6fcb96b6ada4bf4cb8b4eb175d919f302ae21d784f20cd1fea3424fe8fda6eaf
+EntropyPredictionResistanceA.6 = 736e997dd05be880387fc5f8467d651b908d4fe6772e4c9c08ca390d3c67365e
+EntropyPredictionResistanceB.6 = 62180459da476456d5181376ad7c376fae1eccf2cf31fe40f245c2181d4a8891
+Output.6 = 49d96897d40590ad1973bac9e034519ea77aa93c4691cb3c51cc293943c5163973b569a8aae7117ca1443fc44853872b8bb5a2a462d356e1ad444ca818de96469a76d8d55c908fcc3752b227d74bff98c72182353bdd6aee291505ba77b05b2d53a42fdf39729d1d1fa8c9ccda8c4e8f90d56b80f815fb69e05e02d092ddcc97992b041ea7ebb8ef9dc72f628c3bd9359cb4b76e4e5f20707d2950b42c57e5eeafea4d0d69116b325a4f8429a735640cf1f43c8c4ca22538a3d7709b68f69697
+Entropy.7 = 2f7f879f6db406b496440b2235d4c3b5861a3b0eb23a288bb6c2625f27ee09c8
+Nonce.7 = caba8d338ea91570f2d76805d0f6a708
+PersonalisationString.7 = 98b29e595062336e8cb4ef9ffb327bee252f632e67da09c88cc8e4328b3439e5
+EntropyPredictionResistanceA.7 = 5d7b949c9225ffe5089ab1e9d843571b5a6a102bce1aa639ba960ee91570bc62
+EntropyPredictionResistanceB.7 = 2d86ee20a48c54a5cb270ddd3f305dbe778dc607581e4547565861f99443a97b
+Output.7 = a5b2650d8860245ed670dc852c39879be9d47202a1f1c54868882566aee7fb3510008b557679f6351758f6a5b23e41e4141208e1b5056a6b0c8e02fdfa7e0c6cde60c246c6d84987033086c58b39ec1b79153c16cc449663794e0a5e66412ec8eddb6d7b6cac26e74c8ef5594f24958d7b0a3caaecc0b47b299b1e109bf1390a4bddaef8ab970c184a09e3a5af1e0bd365cd61972bc468b944c51bcba5cc064ab845fd7f0d2061675af81df5857a8a417766212a74a020e97543d26962f125a0
+Entropy.8 = 19595e57ff1079e929aef648de1e99e9462198607e8cc0ba727e150c6def6d5a
+Nonce.8 = b799dc3a380e13a65ad302ec5cd08fd6
+PersonalisationString.8 = 4cdf0994d16b74d17b53ef18951c40b3dead3514db6b0a32ca2cb8e4c74af843
+EntropyPredictionResistanceA.8 = eb3b47214ee1b5bef48da4a5d7067e43678bee43737b8a4969eb168dd0ec6290
+EntropyPredictionResistanceB.8 = 4c9fd4bf1ba02d070388938de9b9ac7b875cc1929e1157b88e1d25f6407b8a63
+Output.8 = 29614e1eddec72808b3eeb14daccce1bec07c61b0d79834e68fd043e2c3133048720344a7b80b366b92bee8f2b5f57d2942b4999739c6efdd3af5956dcfa6796110ac704fb547262f5661c93132274827c03cd20a65fbdde6103c26e1e12b2841cf30d425f26ba8e54289b919579485d4f2ce111b4c3d6d4a253c8e5b4ac26a4fae1cac841a85e792eafe0d77510073933f795039bf49bb611cae413e85527ec9d0bb8aee839265ab058e019ca2365a48a8924e673cc65bc46e89973b6e9f75b
+Entropy.9 = 55e697fa9d8336b93341942cfd06560336c930b0808d0fa7de00bc1d6c8452f4
+Nonce.9 = 5b27eb547cb1f074723e4f2823793276
+PersonalisationString.9 = a8c19a1cf564e6e15063d220a7cb5d7663dccf72500cef3e43b24e0c59fd90f0
+EntropyPredictionResistanceA.9 = 0149ea5f83c5ee5cfeb087cd1caadc3fe5969ffbb520da6a5ac4fbe1eac0c9e2
+EntropyPredictionResistanceB.9 = 8e678c7e312c59ae045986e8c2d10eff2e7154d774b44485f09fc603b9e910ff
+Output.9 = 228315334404e8738b6d4aa260edf5ff2cbe443ba3e5ec99a60da5a0caf6be5eafabf8bd90383b873bc4241e71f0b3d7ecae59705d7b00e877e97306b000dd4fd90b25bdcbe5373616448b7e0fbbc1b2a5b3e2f861fa7b2c0cbcc307bb0ff2b3e0aa63c86d958e3d0b61ee8ce62d314b95eab0ca8662a2b4aa365fb464fd1c62ac244ab645b792a0d137271c026313f26f8fa3cde42cbd147ebb87d66a3b156be7c40753222bd325c3e06ac69c9d921a5dd721e1ebdb5e0670b74f62cb7f93b2
+Entropy.10 = 90b2e588a7bdb1d6a7de5b499743bf298c5d77418b397e9be743e7996ade416e
+Nonce.10 = dfbd312db71fa2abdb593145c7f9fc3b
+PersonalisationString.10 = 47751086206f1c8f44a0d648a9da4aabae16af527d321d279701fe0650d610bf
+EntropyPredictionResistanceA.10 = 03a13c02e47159f2a8730f0e5954c70fb9cc1653cf430a5810fd172bab5865c9
+EntropyPredictionResistanceB.10 = 3ad3996ec6079a71b5d6351cfc755f5af28d3e3e70124ca52f2a15307dde9974
+Output.10 = 87c81a8aa27ec31551b0596228bd99aa4e70e558b10f3b06852a6575199966aa48aa57bd230be8756dda8f8e39ae740fbc68fde9343f63042e97f8d5e0498d3268473494e499622357da6ff415da62026fd4ed223c5624dad648d5f25b9fb989ecf04d4aecc79dc5149e87eefee0032ab4ccacb55fb780d71bc92f495d7def54bdfa5b80723c10436010159d85907ce3c99f27cd96b857e9ff7ba95b0dc89bee204554fb146a8fe5bb8b34115c523d3ef0a50cea1057ed101026805f1ac5bcd3
+Entropy.11 = 6de7c0076c5469afb55b02458980e604de57623817e79d51375b5ffd62d33b6c
+Nonce.11 = ec252108f6a3048f2604e2365d69ed5d
+PersonalisationString.11 = 223c75a1464d5c1a3ff49b25362ef7c97a4b61ea4c9ae2db9adeea8fc7561296
+EntropyPredictionResistanceA.11 = d0da8a706069eac64e15053df54c88155928b09cd3d7ed6bacfc0dd898938740
+EntropyPredictionResistanceB.11 = 087969147a9d36221c57f170f4d1a467e877b63cefa233f38613fcea237d990b
+Output.11 = 397e7083f6475884aaddf21a9d680c9b25ec7a8180c95592c30f645d341f3b3c2d270359c23cfc862bb6148ec7a0ece94b8ca8cb33e2cb7e8f03863d31b21bce7ba48535836390dd62e9e5c87f9848cccbfd39acdeea771294cda3ec09308b1234e715cc2108f45893658072a076226fcc9cbd104ce2d1077fa646f61ec5eae9f2cd9994606e84c538aef9a1957bbad38e815d45606941a637e24b4b4a6562ced5ff733b2cf71f4e1a762214e50c40da341e9d85cb60c1a2f3ddb7cf4d579812
+Entropy.12 = 13d74a95a6ab9a0772f7876ff4177084a87c4859afa7a514fd37d1c0b4160b0d
+Nonce.12 = 0cb11bce7e6b03de916c88d19e068f06
+PersonalisationString.12 = b2a288c5d59cbf36d90b7160928c8c0ef8ec004d6c41887d6ec31d7bca70cc60
+EntropyPredictionResistanceA.12 = 8c655a6974f6833737209ee113b66777d152f56e210fdb9edb3cda72439a1508
+EntropyPredictionResistanceB.12 = 000fc1fb4e678f8e8cf4bec71c8100327cbb430132f6a1068c63dd62654e384d
+Output.12 = 6d5f3020aa18efceb0d5965a15ba1fbf142a71e769eced80a0c17081b797d565a5af55701a3ca2fb77492a9aef2fa9d2ee5700ebea65eedec404369f53acc8784116ad1819f435aeacbe8d8a129c152ff16e4fcf500e55c7403c51467c2396b04adbab9f323e25e9851d2b8067ce6533a8d7d88d0eb9eb5c04194c8e1afd3b65a47225725e4700014a5ef16e113e1966358631e1412521229e5b34eeeb3157b1cdcee3b3ee52f8e92f4b57e146fabb60d4deaac6d553cc4ec04c814ae652da85
+Entropy.13 = d2ff49abda324575e93ebe9af0a4d253dc416df6ccc01056d4a79586c23a9c75
+Nonce.13 = b6c01120127a31f39836a74027e532fc
+PersonalisationString.13 = 503117c8d86ae2e2c0c3a2539befaefed473f2258b8ff99cddb48feed9357d0d
+EntropyPredictionResistanceA.13 = 809c20a2b2547b8a44ad16456a51599b8e087b3704968dd416eace8a73c44a50
+EntropyPredictionResistanceB.13 = ca99dc15f0eedbc029758846fdf03b7b41168882d65202ef7b3e1d345a5be864
+Output.13 = 941138f5d75db0075b2086f142492c729e9af45990593d1a88c55910975166728425e8bfb4cdbd2dd23dfbbd48cae8a95a4a656646481d148a7e8db026fa20f085098286fb1aafcc95d6de5ef131432559554b8457d4b51256df2aa15eec0ef9c88438a44b169153592147b339716992c4e7b03fa8824acc4e38006fe8bd402a2d9ff4dad24cd392bdeb2d668e7804b7b310737fbc5d737ae4f8e84a03b39baf9840eb9f345dced4c9ce9b870c02847d4318b1b380305ab09dffb6cbec632519
+Entropy.14 = 9e7f8b4461ae68136676aff9726dcdc270f8d95123af6f89c240a4dc8a57a187
+Nonce.14 = a657a769aae958061976c03777ad38f2
+PersonalisationString.14 = 1ce127ab500866e9f478cafa4a0ae1b8ed995869dff387c1a333ed264e140059
+EntropyPredictionResistanceA.14 = 7a7721ea04f0e15f08ac5bc6f52ba3cc2c9f62f0bd8adbb3ca07e486954e7503
+EntropyPredictionResistanceB.14 = b38c8a67366b0aa435d71cb0050039a98447b1a40a0eeec63b33eb6b37e2edda
+Output.14 = f5fd860edbe302d1448ff77d56b368c4eb156490aaf07a640a87a7036201fb816bf24066b7caa9cdd709da7234882939e717298193f9dcd634c8975dd95ab56c38e8407db56dd8713b0c85842f85516640d3faa7b5e12a390ddf0d4d80c96a407b9a2a4767fdcf9c37d504134dfe0a90c8b10ec9bbcdbc56e54180022461c69379c7aed3f5732e1e56d03d078bd8b6e7c621f518a631f0eb493d5b747877a9cfcd06e61674a2f5295a91830b5dae43e30c1e72fc8c91528acd13566b723acd6d
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = ab4214a19da156cb4c0b48234e70c1e3496b30469bd6ac02993d5e777857557b
+Nonce.0 = c7559e7051a8d3fcdf7120e5e40a77b5
+PersonalisationString.0 = 45b505510a7af9ff1704db382614cdd194b6c0f3489ae0ea985278a61398c91e
+AdditionalInputA.0 = c759d60d15625227f94acb98956469c57460811dedc7f73d192d9165189063a3
+EntropyPredictionResistanceA.0 = e36a93b3a4dbe86308abdfe9bbb59ff8d50bb6b61aa4de2ae380ca43a7dcac99
+AdditionalInputB.0 = 3e52f5803eba7c4978e903b83eabe382dcf65c27d70a50a8caf5c3b47d1237c6
+EntropyPredictionResistanceB.0 = 5a4ad168bcba4be6927e9fbdf1523a4479bbb6bb39d9efcdbcd69b008005670b
+Output.0 = 388e777ead105386ee23d826296788e9d2d6930275716facc31b2ef271f3a650db65495085b0a029bfdc9c4a40f9ef15fc6832a1f51b196de653ee5b0df713a60d7173a9944b9657789c991a1c637ae4706be7355d6649bc7e59766ddfc30e189eea67bf9cbca423d1ef203e98e1c1713b52886c94e5e980561e3eff85ab42b418b10944745a5842ecc3fadeca07c3fd750a235b4761db9b9537cf79a77c1eed3fe4856052717f409e41af6791dd197da33f45f3a21feceaaa7b7a86a8baff21
+Entropy.1 = 9984bbea7302941f8c10192d0e202602f40509fbf49f3a9b3706f581416b224e
+Nonce.1 = ec7f56458bc0f557fd67c54bde731e69
+PersonalisationString.1 = 2d67f4dd7849da241b52a179eaca33b5f593cea89879c0049e9c3b3fcc83bb46
+AdditionalInputA.1 = 898aea471dc4d19f3a5e0f0cbaa52073810b5eddd49be5fe2c81296eb424ee9d
+EntropyPredictionResistanceA.1 = 2d99614813408fece065c9223cd0b22710458310995ec296f6e7e2506e2f3b7e
+AdditionalInputB.1 = 601fe001b5699487ae04986f65cb8edf0f71c54576e360777e48dce90d7916e7
+EntropyPredictionResistanceB.1 = 14f90918bdbf7aee074ef4307d7ad31fe6350704451774f55d7202fcdf5573fa
+Output.1 = aa560b943740d8526b9e2747f1dbe68f1330f3c8cf3e05e9e08b1d1db0ef556731f5dc3570526a2d1bc8fbaeba27eeb23d65a3ac2aebb162e7b212e48a6ffcd2b350b5266316983eb259728cfc9676ea63282320dcef9295373ca0eddc475dcdb62750ea33bc52960965916266422716b381ae51093513e777a7202f13efdb54f99497aaaa41ebceaa96eb6b742f475ed576aefe7dc3be8daa8b4d031601fced445f16307a5e958e4bf927480ab243dafb7294b0c934840298b6eb03179e8cfe
+Entropy.2 = 9b5959a5c62900308a5dc609dd7111acac0ed599eb8baa9a987c82377f33f629
+Nonce.2 = 499401056c996a7dbd7585958a493d8b
+PersonalisationString.2 = 61299947b2b3ba3c60e89c6d839f33be85b67946aedee968955e775eabd15ca9
+AdditionalInputA.2 = 83d257e9574c3b46879f25c27e8b6b4c2cb07f28a975a14f96b39aa1f4b0dc60
+EntropyPredictionResistanceA.2 = 739955f6c13bd12d90d7b2c0747ae113c76422be21198da43103a5c986646eb6
+AdditionalInputB.2 = 4a156a7910d504ff458853fd7784789c503ed5c18f4b7523c739e5274f5c6e05
+EntropyPredictionResistanceB.2 = 45a6163a5390cf6a71316754d7df2afab5f811f0ea8b5b507c3c263c010054aa
+Output.2 = b61b3c7ed8a25bc589394ba614493a154061c30cb458d4be2ce5b0e2a45acda5ac2afee87b728acb8dd4aeb596a2a7d1538d8221b7286993c4aa65b4b44fb9048c9114fe92769faabdd4cd7138236cc271934953e8428ecad006827da4480cb6ad6e23c470db8cd5346c2c711cc6f016b13d1f25488ed3d3fa038fd0396dbebae8968c8ce159822f227a14953a6b3e12233bc6bbc0db8eb4c8036bdcecd5b14c8372a2bd6b5c11fa3842372288200ebf722d043a943dfff4820de6dc81371510
+Entropy.3 = 0df8d3596dbd0db278a1c814f9105333baa619383c9f452f36ac30232432764f
+Nonce.3 = 4eb85a0645a29c4af6d074aad07381a6
+PersonalisationString.3 = 81e4e460bd379ef7a0cab095d16dfab897f77a5b375023b6e527952b994aaa42
+AdditionalInputA.3 = 65e1c1096174392ee4c7d530405e9a8caeb220d8a50f63728b8510874e5358a7
+EntropyPredictionResistanceA.3 = ba5c87f57f1c4997427a485962b96ac85245e6214d759e859cae20af69202582
+AdditionalInputB.3 = 5de23b6912900d0808e3d2a81a8a515fdb6253d32f53d8694b73a477feb97237
+EntropyPredictionResistanceB.3 = 5001cfb349c648c3d645c37dc4c47248f8f3eec260cbed55a2608c78eb4ff38c
+Output.3 = 6aae33c8ce9bc4241266e45990fbc8461ebd5591c3149850bbd60882ef6421821653a9520b66fd1ad96c3df9cff2782cce20ad94dde03d1881955a016a94fbbf9b46cc515ec2d2d003296d0ba663cf3bec0b6e193ba91f587d0b1bb9416129966005a29786ec51424b1881c0baa7dcdfc4919e2c6ba7592c1fa181e104bb3d8c8295d1ab67962999c8d01c3bbd7c37bf8fb88ff8172e19d8f4b82b6eb082964fc95d0381aec0b0ef1c30803c242db9c4003fb13f68c144ecd6b71a573a467fdf
+Entropy.4 = 85e839738709573fcdf0549533aadde3f7e65071b32db345f4c10c33684ec179
+Nonce.4 = 466104004790e8fa54a0774fccdabf9c
+PersonalisationString.4 = 594f3ff8466f1a0187c5326115734cb609d93513c4adaf469f5d8c2e8c49927e
+AdditionalInputA.4 = 183b096d0deaddcca9429e173e94d7fcf55ede5632016cc2e1fa78fa2cb2bb3e
+EntropyPredictionResistanceA.4 = b54d71018dfcff8a1f5ddbe22de524558b73123ce6d3445fd2ac4a4dd29ae588
+AdditionalInputB.4 = 67b685074d60f4a8307819ec28dc2ede334fd5442a4cdf702683fd61147d2713
+EntropyPredictionResistanceB.4 = 684de153eb4738ea1d70a18f654c834cb41e03849bfed078f437997455c265d1
+Output.4 = b4bba1e553fe7f5c8801f86c729e3bcdb38451de3d073244b0c27a8f41491b68bf769b27bc1938d692516713ca810e8fc3bf496d08ecae40cae189f9000d1dcc3aa9c453f44e0e7cf119e782b015b0061f9c1d87cd68a4198eee2f9ea878e3c5bc54b90d46d7ed117692107d115dce1273dc7b38ea4b9264a179e7b113238026e4152dab883ca40c857507951cf40d5a4b5c15c6aa5fbb9e6d720320f2c92ae3bafa2a580eddc480294ba95379b2eef2d252b6f73d04b43cb17dfb262120c24f
+Entropy.5 = 37462edeb789f6275f8c41405e7c0b6679447a48a920c781e96ae1007e7f2d4d
+Nonce.5 = 9c32f7703cb049a1274a7519f259ffa6
+PersonalisationString.5 = bc1b41caf63dcd63ff59908c42ced804b15d2e8de557c9eae733b6054845b898
+AdditionalInputA.5 = 63eab957e0a738d2fbbe61a35e774ed65f37b5493b25758e750c9e098429307d
+EntropyPredictionResistanceA.5 = 627755096d3ed67262b7b6c23141282ebebd0b0882a45fc8ea98f6e28e15ecad
+AdditionalInputB.5 = e94b9e79eca13f78c37a46bb88227473645d586b65d3285bc1641aa3e2edc607
+EntropyPredictionResistanceB.5 = dda56fabaf1907183656160e2d9a153d7e025fb79e72da57938ded0d63434446
+Output.5 = 6d3d2a094985594a62e6d5c19083e0651a9addbd7adafa9a7cad9d61b640ff86e922c0efa864e7b098aa82984949a37422536d884bcf777b96c357e7a5efb83bd5ad7ea71df284dd82cdab4094be3455b622b6fc8ad74754ba8fae2652963f57e61a7267dbf5898a789fa8cefaeefd0015e0cdc84cb1aee0057283eb9f87cd76c71f09430c0c752990d4e90530bb7346dde1b37d6300bcdc5c29ce80e142b36d9b6b69c014a2a10d710b1bb7459fce97fc0e193a3c6c902ac2aa55469ffc6b91
+Entropy.6 = 8689902b46f2a6c24772f19634228bd52f2d73675dee616165e372e8873399b0
+Nonce.6 = ece76b070d1091dff693b8b5f5bbe7f9
+PersonalisationString.6 = 09a4bc09b29d3b56c18981b2cb823d8f44d3ea939fa66984b846e088f855c7e6
+AdditionalInputA.6 = 0cd84528f3277fe6e1b287dfd38d6838112f68c7d1cda10cf83dc2de1b6d28d6
+EntropyPredictionResistanceA.6 = f59dd149f3020340d5af8eb89007baac5db46ea3be53e875e87b561bfaf8f301
+AdditionalInputB.6 = 8d1ff3be775ec836ef53fd84e0b9ab7a0c0c186fa8ae95edf7d3c1b32f87950e
+EntropyPredictionResistanceB.6 = dcae1c7a9887bc58cb69d050ce17b86ae5c781309368d73e11c7d7a4a43644a7
+Output.6 = d2f8f8c2921ee347355a581fd9a31a7c09a3ec66f25609733f6a8333cf66607443bc397478961d4d12bc7ac5602d189d27cc4bb385d42c872f9ca5a10cdd0ea54998569a04f3e6bc63ea970000142f384797b56a60360050f2e0f46c36dc63616ec1b16aaa4f01a4c6d7ad27d3a2ec2bc9a0284ffbcf63454e513ab0ba1e81144283db1b57ab698799dc9b8d07d55c1bb954dcf9949b5c04b36b054017f206cf4449858817c5dabc24389af1de5c5c6ee671608bba5763b7cdc6040f03dbbbb4
+Entropy.7 = 77a218b31e79533d351e21405219dfd7e6ca2b27f949d90de9c546bd71b33745
+Nonce.7 = 33e1e658b3af29ee5f0392384ad646be
+PersonalisationString.7 = 4215e35161372d252b973db7b69e92e52b1ae5a855eaaed3e16e7718c3ffb0f5
+AdditionalInputA.7 = 21c3a18af4968a1f4d1b460446370b501aec3cde5928bce9254eb4ba86aabee7
+EntropyPredictionResistanceA.7 = 7aa6b664ff911fcaa193f45f0f1f91c982423ae412354682a04b0556a48dd76b
+AdditionalInputB.7 = 6e174532b02f908ce427b7cc8624a29ed89d3ec82cf4f6aba99866b39d8e6668
+EntropyPredictionResistanceB.7 = eca012d4e97fd978a3751035d291f10cb6fe07cdaa98eddb741d23b2bd082037
+Output.7 = ce75deb2b8c30de7acfd91812c658608138f850a9e802de91a6f38b33ee8832c5363d59da9984385b8d6c9bd56288a88ca3c2a2cd816ff99d55206ae6f0f91889887d257e7307cc51202065f127ed2cce439bd1d800008c2115a87470836f2d502aa6559fff98412760477f0c4f1f4e9b85294ba572b5f6e95bbb677a2c67d0b08420cca0a4cfded6d63a0dcf48971873bfcd33f852160edcd5309bbc86ac6ce0213cbcd189870d82a64d134e2237a7892fa045ed71a460782462f2463d3dd42
+Entropy.8 = 200101cdeecf28a69f9a5a38e3caad5ec1d5482e18400c8db12313c0836f4990
+Nonce.8 = c76841a6c6f1a019fde6532309c801b3
+PersonalisationString.8 = 6dbae4c94a46dc1e60827a5c7cf9fef672e0e30142bd362bdf0aff6f429d1869
+AdditionalInputA.8 = 54a88580789c903eb530608d17bd55add1d043c3936c925ac1016e6dfa3bc39f
+EntropyPredictionResistanceA.8 = ce7fb96d7c26f3ce793cbabeb7d003597f826c63f78221719270b76be4280cda
+AdditionalInputB.8 = 7c1d821fad483631d36127ddc79526ce820f4149662d310d3e0b74d2d415b56c
+EntropyPredictionResistanceB.8 = a6e43afc25fbda66152413097f65dce104a4a23984b7ae5073f7c43add2387c1
+Output.8 = 4e04c72e22d7e4a86e5bbd00553a938add7e3b37516c503279d73f598119a1311e8409378f67150aa948c169425224fe1c472a02594dcbe2b9b08611ab828508457f10841111b74811d441ebc6a58776dfd1571e7bf9cee5bd3f256820ccd92717edaeda0e9fc56019f6e58c166a421a5adfd1a042679dcce388338748639614b77221dd7e65e4128e3c0e80ea217177af70f0145b2afc5b3e869d23661a6032e4f99853f57ec588c929cb42af7da3cd74714fe4610f83477716958b773e9765
+Entropy.9 = 7cb7a43a4c22bf40b565e4ce69c6677941790074d94b680fa353564dca2bda05
+Nonce.9 = 9446d37f3e304d1b41f8c26c896d89c2
+PersonalisationString.9 = 470f3f63d8e99241369b6b32070ff862783c94e3cd08809416e9d6ecbd56ef2f
+AdditionalInputA.9 = bec0966d7e6b28422a7d0029bcea8d5cc8afabb2f86afa668e25dfa514669991
+EntropyPredictionResistanceA.9 = 2d5d4fa2c816c2eeb2c1349b19fecc3b073eb5a30bbb14a7029dcfbac4fb4c48
+AdditionalInputB.9 = 20e201315eda4e56453b561e84775494dd4f5d93bc17d68c545b619321ec8af9
+EntropyPredictionResistanceB.9 = 8b009154a7befc78ecc94903032ef1e0e567bfaa3621a9eb90e6092a248d3fa2
+Output.9 = bb3f2a6b5cdb44160d0d396229ab6733f3dd51b9321db4b65e73739a267d57af09d9c3cddb614367cc8fdc1e78437c3089d38ce5dd0e63608784357f12660f499b7592a6b9864cdd014063f542522799df59d1275e102222f66006eeb4e244d6fc0c5fd265f521221cad506317bf6c01d243fffd0a7d9217c56d5c02d8103b7c9c91b745fbe89564340aa2834f7378c019d1e2311663ae71ca97d940330bd6491f13fe88432117355374f4ece2608d0a305d66b93397985dd8e84b63b4a7e9f2
+Entropy.10 = 9dc3668bca0907fbc8e22ff5c0cf1dae0dcbf850628e6b1b68f5c3e65e15b5e3
+Nonce.10 = fa91a44a6de86a5bd7e5b1ba46b41940
+PersonalisationString.10 = 899514d3bf6d1df88e379ff5cda0159e85de6395d07e063ab366d43d68702246
+AdditionalInputA.10 = 66dff335899d65cc39080861d14b9621287c26d980bfd29fa26dbe85a9be74bf
+EntropyPredictionResistanceA.10 = f5f87ba48d0adfa44e571244280a4118cfa496117a966d9c134f10910bf99950
+AdditionalInputB.10 = c7c8a1bf27d1e1259c4227ec2a5f1ea3e657faa3b0fafa15f4c927894d29f133
+EntropyPredictionResistanceB.10 = 28fb846dc3a5d553d2afeb981016ba1dd4e244ca5fe30587af9f175c950d6215
+Output.10 = bd941aac5f7845b59116901156aa6f27937f6e2962035a546733329669889b2ad513e42f9dcb24524901ee6d52a4de110b1a69b65f7cec3f2311774e7657dd24ddeb9918aad268830fdb475f1e67d0b953d5883da2b9de3c889d5cda116bd71a1a260a4935ff8f8165f3514afbe8cfa2c6e2620d3b85687f7f93d787159e7714aa4aa695c848dbac171267c524b24e878577c20ed71b115ff4aa85c7eee285b0e4bca20e9beafc1ee525206917677abdb2e95a769bd419d7e07deb2d2dc5d035
+Entropy.11 = 5d749b273101c5b5341599335e12499a448a423e8722edad5c21b202cf6ef610
+Nonce.11 = f909c38f856b851314d2395b7f70ac83
+PersonalisationString.11 = bc6d3bcf3f2f734277d1d14bdfcac438f5da4c2621926f86617f8418d550651d
+AdditionalInputA.11 = c975bfcf4abad79e1ad6445017232af98f363f555f472ba52e0c9928c6f75dca
+EntropyPredictionResistanceA.11 = cdd2ed2c8e5b9979e0c9327428455bbcc1757aec535f1d658460d9b9dfbbdf66
+AdditionalInputB.11 = 116ef19ce87ab9652bf45d9ecc97b853367f74e81389105666e011388b1f009f
+EntropyPredictionResistanceB.11 = b7e15c5bf887fe1ce475bdee3a6ff6c06a090b32dab71b46b04a5733098bb813
+Output.11 = e45672ab3377b43f136a2c257f97be21021eae34433d6fde5221b28fb8a07b678d1e0838484ff976934089aa6972532b2588bca12ed44870b6538a4e7d92b3a959b37f64c4620bc5c9483c5a316051b85ea5f68594871c1c3af5c8e61a6122b949964381d1f0a983141146603ee8e3359ff31fec62d54a802e19a6dbcf15b596b77f1283224a80340d7be3cdd379238d2d181db6ad25a78dafcb9abee8adf8742ba6325f7148180cedbc92629a90c312ed12309805d25a2a3674789da4738ecd
+Entropy.12 = ad5605a92006469956c6497da69d8a6b6ec7ed899f537592ca9017579c290ad4
+Nonce.12 = 7c78e6cbbc91d2c91bf28e6b2ba8a507
+PersonalisationString.12 = 79207d3aea7b37b94c08d58d69616840031e25de90cb438eeae30edc1a34e02b
+AdditionalInputA.12 = c7e666b453ec579930949611f81432abb42beea92497cf10d14e5881641bd584
+EntropyPredictionResistanceA.12 = b6606bce1c978e9c39c8bcd3bb6bd01ef6a688489c6d353023873650113d9551
+AdditionalInputB.12 = 9f265f0bc973c5f55140220f75a2e1c08e4239ecd0a55de46c81a66d96c0fd5f
+EntropyPredictionResistanceB.12 = 2f73089f1f88b469a678f2cffd2ec464c2f3b804abacaf7de21ea6da6399e50c
+Output.12 = 63efc227e9308877ddbf94b24c26d3888900e5dc74fdef3529074b71d9618aef47682de7c884678618886b938b0e001e832533e84a8afc76d562106a224d7ba1581c78c9979bcaff5092bbfba8f7e279f15029c3cf81d6ea3ca4529cbd29b33d38c00675cba471c6cf98e009caf4f10c1f47066bba632784d97e7ca6a999d7ee8566331cc8c14b22d41a07a225d5b48d5e6ecb2e7353c001d86e8fd64628e9296bf0e67d1efe22cd8248aef3c37fba344d778b6a6946b413b8fabdd9210f998b
+Entropy.13 = f06528e4d7a22972aaa2a7bcff4f253853e5aa02f359b5edbeb905349784892f
+Nonce.13 = c0accba9e987ef8f8c6a0db887b4cc96
+PersonalisationString.13 = 9cf1920d683bb50e1850a270a65b7fda5c65d8e6cd3c84340af8fdc550237865
+AdditionalInputA.13 = 03d382891b5c06d45f960de3e211e293ef0fbf123e1f1aaa590dadfaa9f6a820
+EntropyPredictionResistanceA.13 = 533ac9b52ab33b20574b776f13b548d600b7ab325a665a4c7e4a61a4f9011139
+AdditionalInputB.13 = 97a3be6fa288e33ebd189bcbf8e3a535a285b0d2b22769d1f068eca3f4fbe5bf
+EntropyPredictionResistanceB.13 = a0733957d6948ffa2201c3c7431388a1495d75d83981664a863a4636b8e5cdcd
+Output.13 = 7140fea3b11f9e54b45b9b00859578762b52725f23d67ac2dba1ed7d06be12f95923eedd5f7352e07f9cfbaf5e3907a0e261872bf8666a0eb286f6e6f3d7ad95ad041e73c5538f12bd8b0d620f2fb247009cd5a9a6bed54afbf89ded3d5e170b495996679b1ddc93765af7d36382f11fb8ac302d1c9b680b03fd14dada5fe9fb32cce90eb9b92a995938ed19e45a5527ccb3135e76312d30158562b808a9bce9e608b9212c2828668fdc8808c528ec068a8be620a9146a3607ceb7660d076a84
+Entropy.14 = c060f556aaef31c8c6c0621b22e0540060fc967e0755547d3d931aeec562e39e
+Nonce.14 = 8eff7c45a82ef34743e229af7c519370
+PersonalisationString.14 = e74c57159c202735fbca0c34da1cf251e7437c9efd7a6f168318ee119d271329
+AdditionalInputA.14 = 27aadcc829cf42298f72f81baa4452818a157d39e9042b11cfe6e8148c5e222f
+EntropyPredictionResistanceA.14 = 2e4193a6628b4aeda6e276552d3f3eb480113305102c2e00861c2d3aa4f8c497
+AdditionalInputB.14 = 9fd99df9cba9f0cd2445ad2d4b2c6d34c112d882b7c364b1d52f47d8802fafef
+EntropyPredictionResistanceB.14 = 3c2b67fcb3929cbfe60ea272a0295c1a59c631ba2f9619c0c93337646731a8df
+Output.14 = cb3c238037a3165f17d416dc04fa07a41eeb7041afb26f5d02de1ae45a9ddf37eef688c9c29ac05fa9dfc35947123cb3db0125f5bd5453f4e48a3b2cb027465ca74f9952456d3bb0efdbc047f96a201e78d813ee37e213240eac293479444723d63148333d93dd7cf81b2e19a7c6feb217c32b25a4cd184a8bf7c2aaac149744cc53134d38eb4a2bcdec0d69950171847fa97d0766a19c3f96e9076520d25b1741a9c4fa31bcfd6b3ad8e4aad6f0c33751d128b9bdf4975e0819985c3b00dcb0
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 2608d67227d0074e7ae04ce5be3f6e6ad12e6494fdc9649e6e2d86da2aba5e23
+Nonce.0 = dd56261ca99ae26ba62e2ce121f3b1f5
+EntropyPredictionResistanceA.0 = 12ab0c2030f06cd4e81b5a3a70f25966d3f99b7b09f8e13ddcfec66a06fac3c1
+EntropyPredictionResistanceB.0 = 46ee40e897a09fb87b96b24bd75e2689e23d5fb74527b6a0666dbce702b6a1fb
+Output.0 = b6c09db6047c0bef1ea4350c30479d2a7570aac9932583a9e3f76318f7679e93b1a3ed21b777dd78c34eb2ac6cd287faa4358183599159a2fc24d931e7cb02e4fcb29638562f612324695d01f5a77e46d5a16d01c828e3c377d4a1ff5357396c04c5ca365f23b504a2b2ae8c0930e550548e301aefe998890a16704b0037d22d71b0aacdaaef72b6d05de577a9648b00cab3c9c995ad05a913a2cdc2280f8f2637b4855a549fc3fadcacfcbcb0a488f75b8bcb00842309c53d9601064f1a36a1
+Entropy.1 = 97eb65c7f13834822affb73583d24414bae213734c4e05b9fe6e8d5582c522d3
+Nonce.1 = 0927ca392e5fe4df34e978a8083d8adc
+EntropyPredictionResistanceA.1 = fae1454ae4a08c54cb69069c14e9eec348edc3af50ccfedc5eabc1d7074c4b39
+EntropyPredictionResistanceB.1 = 745545c6c9b4ed82fe73996dbf0e39a11e5bf04465ce9f1ca6c3145249a2f72c
+Output.1 = 37b496d886cb496e9c84ed12c307f9fa34aadfbe1020da5c0d4fc73c7b9458b37f27bf4f062d5f415f6e2e02fd2c7fba1af0b662aa68d8fc6bf084d5dcfda29566ae54e9f8aaa7b167fa0223f2b6d268eabda9a1ed05a7390b886dfc98b78c55dcd5c685dbd36e43ed3fefd8142b48735c56aac80a8165a6baca6384aa24ee4ae1c3d9f3536bf48b3750c43bfd0d56170112a7125e978884ea05041a689dd7113b8f78612cf6d97ac72eb1a9073ea1cb0e8b240811a4b11c9bffd970bd94c199
+Entropy.2 = ddc482c1daa19fa8e8e2dd96a1385d3d0600947de538284e7b0590734b4104ad
+Nonce.2 = 80e05a7c7de358ce0e7749e565df30ba
+EntropyPredictionResistanceA.2 = fb4c2187e6568521c69fbf9d3dcd666c9ccd88a4b20c14109122cd150f48c551
+EntropyPredictionResistanceB.2 = a933c5b975a68fc7eee3851b86cc2b5bfb6d74267e1e7a69d7661d06d076655b
+Output.2 = 7a6cd85576f96eb90d2c6554b24ad4fa452cf9a9419f8f3d94d23517a4c815a3cdd9aba9d40b023f62ba5b3f8db68bfbd194cfedee1ea78958511eeb6ca9ab856b3788e77f0995ac45f4d4447486d7d7f4700ee2d1821ec1b55e89411eca3c7e3804c260753fff66467b1cf76d50ca0d6fc665d62392a72c82fb8416b4a707d6964f07bd79726bc087f347cd160bb4f60b28cab91a1d14ba9f1eed8dbfca0fa58b59f273c1e99e81a231c4dc57f3623a6e55b9d2bc4416dd274c6396e898fd2e
+Entropy.3 = a68057353b69601255ef9da28a6f97e27f2dc8d30c44aa7b1fecf44373e3a0aa
+Nonce.3 = dea94e0b24015a806b2e5e6787cfbbd7
+EntropyPredictionResistanceA.3 = fd6e1508aba78bf8fe83a37a07f073c94df01c76d32023ea679ff887ebac578f
+EntropyPredictionResistanceB.3 = c70fff5f7d7d6d0b96963619effbe81ec0f0bb65bc5dd3fa51d742c74cf337bd
+Output.3 = 31c6c03980e2218689c32d6d316fac94cbc32c87c56751686d5cd2eb5935d7ca83911d02dfd60af4e9c1b5233ff0dfc73b57b4e36c760d279e25b2bbaadf4c753a1a408825312513a061d1cfdb4c0aaafe10d6e605770afe3915db63511bebf5dd82a01d7bfdd43dc453a9eb15ac2a8b558c8405a81970f67bf8f933ccd170a8f2114c9a8659027dcd14a63069f44bac445be16e155784416a79264a880049b51644e9b658ebe49d95ec9b8786de5c87e63ce4e648bfa78f5b3f9d56b9bb2e6b
+Entropy.4 = b33557e3d720b03253d2f5c914e1f382d46cae08a452226fac03d93a3a41e6f6
+Nonce.4 = 11deb11a6e55aae220aaaa438d5fe88f
+EntropyPredictionResistanceA.4 = e7ed0c05ae9f9d2974fce3503a88a1e93022b1dcfeee8701d407e958a5a72206
+EntropyPredictionResistanceB.4 = e351c86985255677151cd01a2f8f611371382f6b168cef36df8ab9aacec33261
+Output.4 = 63d1b30fc02342b304f5cff75dc757477be8bcf663b9462c910c3145d74dec6701c539818c55412c7982360514bb9a664e4f304eef97a603897e2b9e0909aef606f35c97b550ed4d3fb1d14e640ba0a62cdc4cfee0a734aabe7bd615a490f722793bbdba73f669b2bec17b6c2d9c60a9798ca289faf8977af782c135c65a6c688d5c52eaa2c41347244a8da293f23d92e1d5b20841b71f295cd5e9e894552f2bbc23c82da583218635e2f87d0e454bc80767760b6906f09232e442167a5e7352
+Entropy.5 = fc736445d397733f3492a3b05d6c79ce433a63e4dd3542edd8bcd43b8722880b
+Nonce.5 = 408427c59ce51134face08bd4f4d6282
+EntropyPredictionResistanceA.5 = 772e80fcdd6e4163ade87904f0cd3adc3e27e6f035936d8625d4b6164b33eff3
+EntropyPredictionResistanceB.5 = 9320e91886b362e5fbee95c836467dace66763a239de3aa1c722845db3cd3301
+Output.5 = f0cd89cc08fc36e2178f0cf16720f85b752b07f59421da3b679988a46d3d23f9770146fda24df967f6571d345ae0f73c6a0d5f84212dcf7482eb2c22bf7edb42e9b59fdf6d6ad52fa1e5c61d31202ea8e2ed573b5818bb4347c90320f0f866bf2dad20e7bcc3e5cf9cddaee8bbedfd9e67aabac56fffc619998f3bc3346decf4e448cce85576f0f2f594dc3bdb70079d3a18e01604cce684bb867faf8e34c0e066cb703e54ca74a0cb00f0fddec3a95190db06d30e46a20e5f292d5ef5fe22a3
+Entropy.6 = 736d5a69b74a3231db85e677d6d3b135aab0307de4f79d4315092eb3a6d08759
+Nonce.6 = 80fa1391f7ac3fb95e88a4a94c749a82
+EntropyPredictionResistanceA.6 = 4e14dfd650d14d8cd4fe4b60d8e385704f20fb68d9e844ec5ac540d6a1f6c167
+EntropyPredictionResistanceB.6 = c5696a56421370513082a28949011b3a8eebb7dd86a0aedf5bc6281f067fe109
+Output.6 = c544c2680336dc2b69ad1365d56f703dc001c6a8d669ff53c3fd2028327ce72a63bbcb16f9699e49db32de76321efe2418230aad0a9918ff0848e105b633b5f7e4c9fb4e2e611464bef54225274ef49c76f88bbb048fed25d5b9dfc459836d4aeca555800f9fc393321b1aa41f53fb7b296378fdac8aa491eefa079c98a4803ff15d46faed2ad571fe0bff363367c90f05a068e79f55ce2aaa80ad651a67f20720fe78e59ea586f4fd24c1fbd9e60b702dd49324b78d7cc523e87deeeb7c6e2d
+Entropy.7 = d7d5cba59c5178c3badb363d0fbc7d010322d8a23e16f3f6449b68cfabf760b4
+Nonce.7 = 94bfb6b4ddb3e512c80df627f764848e
+EntropyPredictionResistanceA.7 = b9aeedd63e75f525fc2711d2e58c85c454a2379c6426988be5ee7791bed3a255
+EntropyPredictionResistanceB.7 = 28042dbce2c2735cbb3568dce0306f9d9f1ab2894809ebca96b6d925ca569957
+Output.7 = aabbbeaddb8be030311ea7b61dda9a0a16f47b5be4198945486120a1a2698e1281adf0116adae2e4e8c0df9c38e0b5e12bd3e41a660ce60a7bbb05dd35d4d14049df806474cee59cc3dfc62b4c00aa523ec4006cef47d14fc2678ed8da397718dcd56aaf09fdaf0c5fe744aa6dc3a1bb899fd8cb3b13120b4be20064ae1c1beee640d1bc07d21690fc599b090f4c8615d47858d93fd48ca5de42f59b331dda23be57975defa493c20a7a91529a8c35a880024296d1db8dab84d71846e960c538
+Entropy.8 = c63ffe7e4b2af521452fb56333f628803da9271b6f639e07a5682b8a55616c17
+Nonce.8 = 4a04eb3abb74794842068e1771703fa7
+EntropyPredictionResistanceA.8 = bbc0333897dacc571f2211a76006e77fa83f1ca41237774a5b5cac4e287fc36f
+EntropyPredictionResistanceB.8 = a0f7a35a71f27bc9bc0c843cfe5a778a25737d3f3d84d951acc1a60a9c734968
+Output.8 = 2e0377a8b54443e81f9460e195875667d96501889438c43edd09fd47bbc5e6dba099587ce9d525a19c2bdff1962f791e4bd46df2301b6e02536aac30887b23a58b027c9331803e2027d129f5d58cbc0ac9d0ead19dc1ff7f4921e3eab448a560c32d8080579d3171a530443a2a7e3910c1a95debe9c5ab87a3a5461aa38f2f6ccc96230a9541bffb65073f962f5a49fc435118a748ec8647bd2479cc6398485a0bbcec96f29cbc769b89352ae7d9934f7322bece313dd74549bed7a30811dcce
+Entropy.9 = 55591ac4d5b8288cdd21a70d89867ae4b2dc854a025cfaf17c09d34e276d25e1
+Nonce.9 = 1b205c584faba7b1ea25439465e822c9
+EntropyPredictionResistanceA.9 = 725aeeb636d38556365962e3778a1c0ab6e425d7e4c6de34f8b60e0b2534b601
+EntropyPredictionResistanceB.9 = a02ff6d592f5319f6451ea0a3175244a299fe9eaf9cd19674aa3d26654ece988
+Output.9 = d0e9d3fc41d58eaf84442e30d9489b2177628a716d978bbf4c6f5672a12e601606c82d14f3b0c6fe2a1f9ce3b21fc7b418cac2bb3317752c4fee8196a173355d6a839ab9e40a2285ebdc783272ce701cb026c3cfcc69cdb54ee07908131019ca57661b1c7233b0e2397827dceda5e95c05e83a2f8000dc10bebfb38505c8123670fedc9ef81268336844228b1219d16a50d943e7e18e239be87e02dc36c1cc7a8436e88541a00ed8d902a6de5e6413d1551136c57d14c7acd3f169d05a404fba
+Entropy.10 = 2b27d6670605b891a642989443abaf11e214878f4a6352de6985d6eee0a4d868
+Nonce.10 = 0c19664fec3004475ca9122ece4b4a90
+EntropyPredictionResistanceA.10 = e208c9fd1787c3a58910512622458311c4a8358fa54de59d8e23424838b92b92
+EntropyPredictionResistanceB.10 = a4898d0f9e737a534682bbd5c5e451f889ce578fd2d67c0dd3eef93e632ed5cb
+Output.10 = 60881f5d5382744cece15aa67ff8f7251be4ce4ac04088f014832ee28a9af4cdd6230344bd25d3481a538ad9581ab9dee050af7df8d3c496c91da029e38c06c74e731d674203aea51bff89f629724a0043d69061a759f3b37736e9b540d4dde0ac14fa0579d4e7b7fbdcd7d3cda166a3fd34244b48516c2d98363eeb1b7525e713fd3d35ef7016f5f98905fc55232aac44093e0aa37a36bf7918f2c897266ad9c1ab6ce277baca2a7e6ae3c47ece3f48d396d90aa00c91fa615f65bd79bac6c8
+Entropy.11 = 9d1eb59160b850c057e7f4c13f0671432efa7c374cae0c6dcbe9e227e6783e8e
+Nonce.11 = e15fc5586e62c618b63635c7c7df5136
+EntropyPredictionResistanceA.11 = bcb3d76b2ad4343687bdb68f7d58e80d2aa7831e0c443d7d4a481dd555c7a3b6
+EntropyPredictionResistanceB.11 = dede8a9e22979498538b692079f0fe9630e7520e88b1c24c0818d20eafe5391a
+Output.11 = 93bc370ccb02e5523582251e7d5a15de19e91b0109f7267a9d35afa65573870513c3d77c990dbe839b9fe8dd4fe2e77fb861db3bd179ac00a8448f0fed9d49cd069aa4d9b5c3d5f7bdadfe58cf890d49bc5cfc6df08e796f6623d4728d182a6ef35506cad3a40c37f0d37ed2582264487c9277cb5eaebad1bd5e51ab542ab6e5e9b03af7e0c8d6c2d615e3093210f33bd0bd1b2ce6fa6f00bbd3505be1a8d1bf9908d72e5c654510bb2215d86b43a3a0f501fca7cb0c87026148444aee4c306e
+Entropy.12 = 06da468a681de4fd0a748fa06607419584f69e4e982dbd187886efbe6a6c64ca
+Nonce.12 = ac9521054bbdec525e8ffba621692048
+EntropyPredictionResistanceA.12 = 21fc83458af0a302cf101a3a792edd368afb2f48ab3e6b416897df50fd42d1ce
+EntropyPredictionResistanceB.12 = d9d49ec8ec78cfc5ff92d29da48df551fc3409094a3e60290a09d5c0acb5ee14
+Output.12 = dabde39f2e8ee0614710cfc3e0aabf918bfe35518ee48443dfb93d62ff902cb2e943e2b5685095df1699ab7ccd972c22c03d6c9eee91f90432d98ff7bbf27cb0d0bf685c13a7fc76ef59b13e38216de72914819ccdf1c001d22dee52c8d930e419525670fe6cf75560c403b60f3ed4be46f4952a6bbec1634eadea07e29e1246981f1fa7ebcc99b9452aaffe48f0c8bd63ebe8fc007c0408cbf54101f0b71371ac43df6963bf6f687706bb4419e209ef67181b46b077357aeed046e28b0108c3
+Entropy.13 = 25c9059c1c55d73538c4fac636d67ffead5c9d5a013380ebb9ea6615ba44e988
+Nonce.13 = 5e02b82b370497c08b373d5f6d85d89e
+EntropyPredictionResistanceA.13 = 01154b602397fd099e02fc4b68d19ddad5d720f99ae6647c622b56b8da1cbca1
+EntropyPredictionResistanceB.13 = 0dd4aae53e919a8f33b9b49e4e6a1cb90c5392b785e45a86719c75080ab30e6a
+Output.13 = fdee1e9b9d6d81faa89e3e5fc5e3741cf1f699c2ec1b01c072acd21897a991702cce45b7b58a2fd965afa54b4b2b483c9b5c8cdc4883ce91c92907936f0a1cc82f29dab9d2dae4e418e7b251c4e3cdbe65c93887f0ef47c272f12127ceabac3c5a051fc523dae624766d83ffc8879d1d51fb3fc970a9ec45a9a502f66d5687f0cff06021a9bb8f3e35490720409c4150124c3620d69a600d829582702c2fda6e663c1e07b171262cbcd55b2c766777475eae224c60e16ab85e1cd50938ae8026
+Entropy.14 = e5f5262a8d75db476bea42407082078c95d89e9ba677c1138fa024456acadf7d
+Nonce.14 = a2f5944cfc4af931511c683042ecf7f8
+EntropyPredictionResistanceA.14 = d5029f8d6b538542043669856f1f443d1b0cba26f5a0753e0f6d1aa2559e3564
+EntropyPredictionResistanceB.14 = e184b0afcf6bc3bf9c121b0df5aeb8f8fb94eeab939de04b5deea470ab94de15
+Output.14 = 86c8cd6a92b103b0d88e54be7d4c1a9f8e2ebfebeb66cd812298fcfef3a7eb84dd84d0683a12497716c4325e8105b39c9841dca2d60da1dc875b904839b18d1681805d058faa0ae897bdcea8528b8e99bc6899f96ce635f3176a645224d668afedaef3d65336b91c78cbb7f0a5090e95938e15f0e43d827bc22a4cc714aac95d69b90553b06a9f3a76cdc0e04d0f6e24a91ef5468bee2f77b631d5a5bd95d74eb91be516027c86a17240611746aa99c6c84003aad7b809c0ae72f221c564c8ca
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = b75a2b6ae272193daceaa08ad0b920e21081e1a201d0096afbc2dfccf4b97dc3
+Nonce.0 = 1a532d0b9a94da4c1a4cedb4cb955c9b
+AdditionalInputA.0 = d292235834cdf00ef661fa80e04f3a7e56501bc155d9efccab39ca19fea0bee5
+EntropyPredictionResistanceA.0 = c25b1d038e8ec01150a9737064f4ef5ecf05ceb84803afc15b85a49022eb3df3
+AdditionalInputB.0 = f00b1d113518a83edcd2237f2fc8b79495421d7eb98730cc2051715e33539335
+EntropyPredictionResistanceB.0 = e603b176a8c39b9ca9b8f12e6831dab55580c0271a5a4a0e1c9af1c0bfba201e
+Output.0 = f648415bb85dfbe9b53ea2873c16f420b1cb4201ef9ede7e6dc4e58e2ca52f04530aef385cadc7d2c938f1ef4c85d55e76d5db01e09e1321ffecbcaeaf55c644c7e793b838ec8039855a2585cae5320616b3d353a48c3631575b66aecc10f7934835daf849de61926cf37d3bef1235a59c2b7287e79cb92cfb125c350f78007f0da377a77f1ad0c5a2c1d13510eaf217bf672eda5d335907afa8ca8f8cdb162186e4e22e3b56375a0485b537e3fcfce18b789095811e3b03247bb50c4a994998
+Entropy.1 = 8f503194b31c758f7b1d6937a98c0d4fe0dbaccc7688ab67ac2f12acfc53f5a1
+Nonce.1 = 14c083f538f5527f5fad8c985d961cd0
+AdditionalInputA.1 = b1c57d84990ecad934ec3ad3edbd614760fd93ac45439daf230e4f045d07e665
+EntropyPredictionResistanceA.1 = 76fd2dbce09043d7f938abb1d83194a0aa73524a007ab02f20a7dc2c9b4378af
+AdditionalInputB.1 = 1e0a3fbcf09a90ef21ea3fa0b7bd296bea4079600d4f4bb780a3154284dfa64e
+EntropyPredictionResistanceB.1 = cfcb7f9fbb774752b4ef48c0b22c18c331784306385a1faad2c7cc0295d9665b
+Output.1 = fe2a72e25745518f2dd1b9fa479e4d2d4b54f281b336f9c19efbcbe3d0efbb03c81faa5c30a5e8d5a63613d1c2233ae55b659bf00ab35d555e387a773bc93d6cf60dca91b6a5db5504eeaac062fa5a02118eceef7127c77a2fdfe113a85ed6942500eda6b3a14fb4f3b29ffc3a803cbc35e2776f08377057b6c6207ae25eaf664649d97112703368636dfc6f19c88c8771820e5b17384725cf12392ac05cfe3050ec402a7260126855d61369534755dfbc583914dd0cb227cafdff16c544be63
+Entropy.2 = 58252318870963e68f914a6bac38f84d39f72d0ee8c817c24dc0950eceba3cea
+Nonce.2 = 5ffc34a04012ead379e89d20432b5f7d
+AdditionalInputA.2 = 3ff46e18816993f067e92c4528c18b12a1c7eeca59c338b0ab6e615e3074e5c3
+EntropyPredictionResistanceA.2 = f38a31a1b33a3ce1175b5aa4392558f0faf30d171f744fb2cb3b41e60875d5a1
+AdditionalInputB.2 = 2e58c59aee606ac1c809c75d6e827ae87539ba740088ab150c403a3ef852c068
+EntropyPredictionResistanceB.2 = 7bf4a750acd0d4f9fe9f7842617e97feea6530447854430a3ffbd72f22a64c75
+Output.2 = 08756e16480f40cf1d5c835761a5d535ab7a6d09a3903ab295ea9c3b126ee0c614b614db576ab0f16987cebdd48e2e2c817be8290781a21a37539e9bf4c3a83cf9a4397f0de3afc71b77493d8cc595452bb004cc88399e5ba2732ab3fdcf312d93d36877c77eaea1700f5d9b7657c400e278589bf6ccf52b793a4a6b1e007b7448a93a2f646a98531547e9edc5d0a88e4c2bdcf01e3e64d5b85cdc5dac2e3cb69529612007e750a84d13dc38bd77c60da8623f5481cd9c3a1f7145e2fbf236c6
+Entropy.3 = fa02ec27ca2e5f27e08b5637e1275d824a2af314907ccdc9a6e0e51a16f9a9d5
+Nonce.3 = 83f18498e9be02836eb6dca8df64e43b
+AdditionalInputA.3 = 85f31dcd87d9b73960fea0db86fbd2872777ff42b1c2458e799c22dbaf0a3da4
+EntropyPredictionResistanceA.3 = 8af00e6c977672aca7d20a83494c23bd63a431ac3b332c7b6de261d2581825d9
+AdditionalInputB.3 = 329bfb195c25537ac2e27f21e86764459567c3e960ffe5a20c3f1822373ca5dc
+EntropyPredictionResistanceB.3 = 8a7cbd71d63b6df084a9b849cdb3b360df7cf9b76b30f9cfb5947e9a3ef950a7
+Output.3 = bdd5e4c63db1f1e9ac6aec19a2d597d4105c733923107ec43a10919c18f11204552c9740e0af13d74476575b041a5dc91a5209a401fef81801dca9940454d5af3c42f303657c50132e4283c7846fa09f9663b66babd6af7e59bf4c8562627b5407654ca5309ceec9591fd8ebe79f5e07fab2db275b9f84721156d431c6c92c2fa99b49a3212f8fc902ea56121ccde36ac906b94c38f52f88833624d52bfce37d57dd86410b8f72b2df167f5869d43b5b8ef8b1834595a5580dca7c1d16049446
+Entropy.4 = d52229efb48df3a4209c5804276bf4a6d823d235c8e1c8f0729f6b090d713836
+Nonce.4 = 3d7c80d9bc4c1579945695be52b83a70
+AdditionalInputA.4 = 9f306112c239e4dc1b935482be9ed17c6bb67f23d20b980cec977ff819c48155
+EntropyPredictionResistanceA.4 = fccb8d14c7e73aa8aa1c3b29c4b0f7439b94c47b0d071828c5b83fdff2861cfa
+AdditionalInputB.4 = 01f03827bc447712e9a1880723fc48d6d970dd964faf1acddbc597466cf9612a
+EntropyPredictionResistanceB.4 = 2cdb906907dad45a0404cd1d93968b7a05ffabada1a42cc839e0f87f47a56983
+Output.4 = dd3d609ab83f92c0910034e5e59386e3fffd1869909ee348877f93ce53de0280493263c9ccbe0b709358bda997ef9d301ffed2dfe1b35b4898abef060afc0df9ab933d77d3bee5914638d1a9961aeaeeed4e4bf85abaf1a9751c2c650f7245a276de55700939e6486921b3d91fa8b006951d5b654099d30179000a401326313c3f11912b7d17342a109c98187c3b464c3c65876e845e04b7d6e3f1bc25d42f8dc6066200127d270421f44df7e29ba6688de48d2ecf9533cceb3aaff803939231
+Entropy.5 = 0a55f9de7aaabbb18f084b07291a6a5c01b69bb370f83653c6f3c7505e37601a
+Nonce.5 = 26e5e4d90382d242e74b3ccb196eba61
+AdditionalInputA.5 = 28c7be8106974edf9f235b17a9588c89493f8a36286b87a6fc20e13f425ea70d
+EntropyPredictionResistanceA.5 = c38a50469fd4dc715f713b176a8cff3045a2a9a354644d26530f8fea95dfa664
+AdditionalInputB.5 = 65da67df450b17a9e86e5271df652f6e455518cfeeb60858a1b44b944c7cc6cf
+EntropyPredictionResistanceB.5 = 4c93b3cb8a4fda701e739807fcb50df716f0a16d94a2e3ced3146696fb466e23
+Output.5 = c9f38e6ca2984325a9e0fbe8081e13232c674b794c6c15d686dfc8bf6cf0d894c14387f5c117577368a178e77d1baebb6cc79ce2e9e341f2c5a3fcde9726eb9f394fdd4e9a0be59c6d196e7eaadee17b5487e2a071cb779505c11a31ccdd853795aecfbd39d6f1035d5e0176273a5b565ef12de48859a730fba1efb3617bff456c500b36a2a512472940c0153351e47691bd1ef63cb8e0144d6349e4060f9c301d2fc77328440b3b213e0bb7e3ed8a431abcf3fe0bc67165e26efaeccdadad0f
+Entropy.6 = 20586f0852c1e39ae6f8d2e50390a9ac2262cf16a39175cc1f56c33bec6a92b1
+Nonce.6 = 7f7fa28c284dea0ae728769cba06e6c7
+AdditionalInputA.6 = 03a5dc49534e543510ddf8b14ccea2dd5f84898a36bb415e443cb21de693b891
+EntropyPredictionResistanceA.6 = 04ab0dd2aec3f273c7321013d181b99af4c1f4338c1128e1e372152bcd2e50b5
+AdditionalInputB.6 = b0fc0cf3a85adb6757e94e72b43ba4faf3bb53d451149676b1801c38d5d4b11f
+EntropyPredictionResistanceB.6 = 11b26085482436ee0e6a9efac391bfd2a9769be3407612acf9635c982e6b87cb
+Output.6 = b528888f3820a267df4eb19fcc8c23436f03220ff43293105f81846c5cf5c8d96ad1dc8a277cccc33dc88c01df94a3bd677774d4062a8b79af35a652a8c51e16ef7b57dc8e8a9429f496f9cdbaccbd417fa97f8a2e6ae6d86c78ae39e15ecc096872a5c00c0b42be15ca836d0067a6459c274683dd188ddbb5eba97371e9b30e7f46bfaa495afa2f960a0d220af7a58d2b20ae96ca9c886dc41f2de5aa76d4a29b3040d3cc102df9f9637ee0a417378c8a42648371e37f9e9c9fd91a88b807b2
+Entropy.7 = 35e68eaab4097737c7068401be4327dd23563148a4f8d88279c733b32f2dd0dd
+Nonce.7 = 603bb9a4df56050c93ef17ce3b7a3791
+AdditionalInputA.7 = 4d157303d9199fae801a3671324da3ff580a04f744ae462a98e91a30e574a315
+EntropyPredictionResistanceA.7 = 886cdb279e1e869ab47f05b2a7cfea815076b1badb08e95cedb7913647a946bd
+AdditionalInputB.7 = aee2cdb1d753723de89d76142e2a6d49c5dc44f369f5d319f9ff7d3371414e40
+EntropyPredictionResistanceB.7 = a0b2ed63ec1bfa3589cc06bc6db25fe3d1658c131a2876b68af0f0bf543dd5e9
+Output.7 = 61c378c68b6d4109b69b7e067a2af00c897ff28ae0ee330344f499a505f1c3e406a3571648a5927cf3f6981cb03192d66f5cc3a68ddbaf6bb6f54cba685038d9ed638a4b6bfa529dd8f31c362668885829d5fbcd949e37b75ec3f16cd0e5ffd3e574a3e758d687e2e0d90b30d933c6480f31b99fa1f1cef8c59e8ff7b77db9d599707c188e9604267195edb4ce7721bc01ad2c9a67ddd8cececa80fefad28d03edb682e75837b9fcb9f7f95cdf13508b5f1a55b036413cd7273c4bb3749bf1c0
+Entropy.8 = 529118a36084e66671787c404db8bed20c8daa9555aeebfdbf55285fe448ef84
+Nonce.8 = 43f11e38c1a01606e9e065dadd44b336
+AdditionalInputA.8 = 09a3fda86dd06ed394ac14985eb367ede95ed5ae6f2bd5de77c7601102227dce
+EntropyPredictionResistanceA.8 = 9f348485fe1c39566fad3bfeffd68403fbf2086c4e1f9c42a65b8f3b324199c5
+AdditionalInputB.8 = 806c8b04d9bf689cd8ee12ef539dabfaa0046fe7d223dfb1e59ef8eaf91e2f65
+EntropyPredictionResistanceB.8 = 7c8e5e6ac89e185d04f68cd5df9dabc160a573c5d4c5e2b2aeb28148ef30e4f2
+Output.8 = 73b404aa83e258e95f1f5d86459ee11edbc3e8184d8b73e239bb66dda43da35fff9f8581ce8a5bfe3469d5d48a7b1959552e51d23412c696881ef112c0431a516a8f3f185f2152a83bc1bae2e6943075341089004a9381f01230ef1cb5ee93a5c8c79613dafe00ec62bd191779f98deff3efdf5c2bb8ffc2334f948ac007855ca59f7d9f7984f1f1d444c0ab5c213899f0dd7f611a2505f6644120d53830de3d7440226d25355c4efaa4eba5997a2fd0eca5800f6a8fe65d9ed0bd8986c3ae42
+Entropy.9 = 803ed9e0a913d8716f5b957d2fedbdd530bba50efda1413d09af8655fe1afc32
+Nonce.9 = 0b3f2839dd063321488e8f99a62e271c
+AdditionalInputA.9 = a4775e61ade98b44675cd59a9d432a6ee4a0c973c5e4c81a7f72e99f614bddcb
+EntropyPredictionResistanceA.9 = 5b89e84ef044641e2edd27d49de252c5f38e8cd214a940936c8d46ad97257e3a
+AdditionalInputB.9 = a4b13c3108148849c47d9c2d5dc83207cb99ac9768d0d28148a590ee62cae429
+EntropyPredictionResistanceB.9 = 1f7da7395c10612c8dffb5d3af559e3c19ec3dba6450e6dbcce83b47f9746212
+Output.9 = 11e95e33cd4b7d44bb54e5b71b7bd49c7afddca22ac4f0d177656035c3c9769ac6dc114c96cd3d66ee710a05ece3a9ee7283d7788848c9257083ab6e5bfa573988cb2356806339aad2a4de12470d51a8460ed18e60339d0986d6266b5698ae246b3db0e009079fab6bb94cdbdaffd790597f2f529e16ba0dde3cf1b31c6228f2023cf36f9d97a51cd264d583816134293704137c253207a752b13bae095fa1ab8487e4e238326f4ffef3af7383b55bee2279dcf87e84802a40ab41a7911c66ea
+Entropy.10 = 04b50c1eb78198d85dcda70fee889b7a7a8c0e1747105f9f82a421e8a9c7a119
+Nonce.10 = 9473ca0385de1f4d180aa7271776613c
+AdditionalInputA.10 = 83aa23f7776510ea1a61665154a4ba13795a5221785c220108178c87822f9a4e
+EntropyPredictionResistanceA.10 = 568f8990c0740f09be147df08a70c3d391281cf5a501255497a17d626b9064a3
+AdditionalInputB.10 = bcbcf958c153a4daf6431855fa14e1d1895b0c666b2df524d77ee8eca6ebd591
+EntropyPredictionResistanceB.10 = f218fb9921b118a1b683bdcdbc429de8e974c1e0d299fb0f5f19619008b4a9de
+Output.10 = 6ed089f46f4b243974af8456f0b7389fb0835f67911dc4e548bffd842dc729e98681f21cbac4b6ae2270edd010936ec0082da4a4e3a04284dd9533ea02d9d4bb756b279b5d7890b104eae60665f7fdde95cf389419f560fda9af6d51a0fb59fe167ff57ad7b3ff19583e83f4534ff6d504f26305a56929d3e1eb1d09a49f8ebb6bbd4f60399894f2adf63f2d1cc97861019881196962563d668cf87535992331231eafe4a0012d6a93c43ca97fcf876d98aca3bafa12bea5c197ff92e708713c
+Entropy.11 = 28c394c22ae57d4e00553cfd3f9b52370fc1984ac1e0ebfdcf6431902e88eca0
+Nonce.11 = a60be7726d901a5a5271f71bed5d156d
+AdditionalInputA.11 = 8921df8693e34df0ab783d853a8f2c51cb3b021f8f94d486782d4c871348f47d
+EntropyPredictionResistanceA.11 = 0372adfac8c2155dbfce7f3f00a1f5adbc909257e5348f12ba67cc8df6f965a8
+AdditionalInputB.11 = ef252c3f743b3d7f4e4d9c6b71afd5facf3995c9aa5c8d7ed7e2496928ef05f6
+EntropyPredictionResistanceB.11 = 4692d4be685a38a34facf185a7e705ece2dfbea09d4faa03423ab3b69009b06e
+Output.11 = a3fdbb4d84cc7f7c747bf3cf123b5f0903ba8e24c57ee94d7aace47423210219e15e74789408c118a960dd16928824b15bcbe77c578cc2a1f98af41573abb38b60749208c054de84740ef326ccb7da2346e8247d08dc42a1e7d01d0eb505a309d26a43d22f2cb09d6b1b69df15c30f45a9fffe897a10c60ece8013bbd19d3d1f63affdd8d086d2d757fec6c5c51178215170e65f2a26a7b7af52bc220b8a7b9f4da2feb5663d6c23b89aa28c0fe7b4b449a55ab3d26a9e54516b75abdd5b8546
+Entropy.12 = 23e4f85f8596aa550021498f7ce0d6e1fe64022536c2286b3a24318d6cf5d2c1
+Nonce.12 = c56f1b0183fb180acec47a235353aaff
+AdditionalInputA.12 = 7e4d9c66c72214ae56a26c0f7055f7341ed67b4a0d994e3fae6ec59dc5dad07d
+EntropyPredictionResistanceA.12 = 959bdc6876705a8fe1f38dc72e59642e16cde1b0fc32726c32b0a64226f82f1a
+AdditionalInputB.12 = 7c1af6b976041c65503ec2131ec920b2d7839481718e80ac2dc342f076758b88
+EntropyPredictionResistanceB.12 = 260b72bb82ea39926d77e4e864a6253d462e797108d2d86375ebe4c5ef84197d
+Output.12 = bf3b3b1efbaec95c3678177334a0145e01e3b14968593d4369224e3efe109e8b6e5a7c023ddc97bf153865fff2a2e4b9caaf8148b31e6ed19eb827f7f4561101bbae51a6c8f55b5cbe1a5d96416dbf80c24b05562171cec2a6dec56da2c699d2f28ccc36cd4bea3f2699c894cf4a78e152e398e29cfd7502ebe09dfa833248188311e273c1a58f913ec6ff724f24c6b32c6068f98efc0c6c58c88d0964cd9aa3939da60583744afebc2d1d294b49acf2c16f54384e0d312c926206e870a8c223
+Entropy.13 = 074ef18364e4a69bf27ff50d721a4d277b50a9a08c59aa7284245b13cc0e6d7c
+Nonce.13 = 83efc63a56d9d1556eece151e4ca2214
+AdditionalInputA.13 = 7e64f3a687fa22600c7f7c86be1d60517718cc8bdb908efd47e02a837900a4e4
+EntropyPredictionResistanceA.13 = 4cbc4b2b8e8dc9b6e00b58f5acee03b09aa6bce82570e0c33369a6a26b17eb69
+AdditionalInputB.13 = 04fc77a1169cd1817f89a7bd8eb1d832e5a21204d4d92e0fc3a1aae42770c04f
+EntropyPredictionResistanceB.13 = 19b7842c32742254981f0546eeaae2d04f163a9f0a7e2c7317dd47e4dd3aac03
+Output.13 = f8edf75d9171cfa086436a8b8b617e7ae1d9d2eb9eb68f2f960e0fbc5a7eb9ffecc310ed6e4dbcbbe98ddc6e402361e496fe39febb601fc8998a5501834ef49e0a52132b157e19a41ecbccbc9fb93876d24afe03f0b7d342fb08c75a9a9fb436225d2a2173fe054d446b272ef4d5fa62972c27dc759da6947ae80cdb4ff56aa9876ba344bc6f5e33fd96195088fb0fb82e11221cc332b9ef039a45c16668b38f2dbf43f774396fc1be88ee8ac544ccf74511a5759676c8136617646d9b3afa31
+Entropy.14 = a3fde2f9afad53b1ddac0bdb489774419b1d7ec50fe994704f325a6a555e8477
+Nonce.14 = 6d31a66239dd7dd138a8f0eb0eb7e450
+AdditionalInputA.14 = 4c0504c89ede9d08c0fed1af90ad9b00b06caec88d0ed15635cc1bbe3613bc1b
+EntropyPredictionResistanceA.14 = 3de29ff1672e45c8c97a0b5ec7f9069f2cd1b950c4648a1c8ab9fb3f2104a185
+AdditionalInputB.14 = 1161d440c1db4c8bbef4967dbb70d8054c1713dac5c1bf62866e1f0327b83687
+EntropyPredictionResistanceB.14 = 5cf03ac2109ac324991b13b84b25d44bf6edd86f634a2358c3eccc9e3f477ee9
+Output.14 = e0793def2fb3674f7401517bc0645973b7f97091c3b96b3bdcebd96b882ed393ed38f7b7f5a6e381dad287f642c99e9cc6b6eb090092e468c96d743b20c7c71371a1c64637256d041211300213a9aa330c05e80db3456de1d55e6d7e3aa3d7a501450ec24c74da213b7184f4ee481c416f6b7e0877d947393921b72a6636d642c8d33b9e57a35efa2490d37f8fe584644e0c19a54941248fbbd2fa31310a4592926db7092f5e8b3ad1111454e04705f79e46f4f6e4d109f4c0fc67a253550bb4
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 43d33ad23634751440ba4eb1ad4037329d7de2edf9dd1f12ad5d685a08b7280a
+Nonce.0 = efd5c2fe2aa6dfa13b1e82637ff98fbc
+PersonalisationString.0 = 310c886008b8476ce1a1048741abfbad5456dad1746cd23d44bf0232f2562689
+EntropyPredictionResistanceA.0 = 2bee5e94741906e0edddd061b96e711ad89ea086401f867c8d8e3a87f731e3aa
+EntropyPredictionResistanceB.0 = a1a30971526aecbace1dad7d36f34af27a3a4cd9daf180fce119e3047927b490
+Output.0 = 6020b1685104daf8818af04c4c35884d3fdf8d5f8807a482adf37e924b1a2ad51a5b29908e0de8008022617968fd9f62647c187ca7380d0f16eef275f0938c7cb6821197b3f7844c90a673647869ad7bb069b669865e41a05278979d1f95e94145e6a62bf5a6a703b1b001c7d0fec126bbed7565ce60657557b3b24c54a5afdff2c4ab5523947fb2a73c9ea44b8cb3ce2ee16385a22b799541b397ff1a687a544c65052eb3399a1c7b7d0505d7a4774272b6d8838ce8ec65b0bad8b22a5109c1
+Entropy.1 = 362ce21ef8a78e0bc85ef8ee74161cc6f9694ac766ee2e82f705e7aa1c8bf79f
+Nonce.1 = a7fed8aa88607c45dca7cb3a482352b2
+PersonalisationString.1 = 54e7e4a8e41f1dcc4112283acd5c53baa87f74df8be3120d17dba7e699faa6ca
+EntropyPredictionResistanceA.1 = 1f6f7653d8108572bf25231fb6c802d964d0dd76ae7c055c704bfa491af0b684
+EntropyPredictionResistanceB.1 = 75608e6c8ef37524d21cc166cce945a61e9f5d7c3f025738d088c306556e1a0c
+Output.1 = 3161b30b31e4ae58255442bb3e2860356864660910872f97b68861b3d69141656444cc6f421625778a8d7f93cbcb91008000acec1cbcffb762f51e7a8ea9cc214ce134086a94422fb03088e14de7976d6e56d54efbccf628ea0a05e781443505014c18ff1c70ee4c1fa302f139ae4ec1f492677dd93c8ef2a341073662c59a19a3ccb702d83442ce8a45689a0f42ec6c28a5b3f489a37809465b4d76d11bcd0aae697f287402a72e51120459252bfae240c6159150a8a3fb9b0b603a5a94fcf2
+Entropy.2 = 813e466f3f3ce706a2257c4ac1058de184db807c34071c8f5a850062cd017526
+Nonce.2 = 8d86f402e73b9f4fea60136171dc95a0
+PersonalisationString.2 = a021677960ef26a3c73adc5c08d05cf4750065253693393faf6ca1398bee2ec0
+EntropyPredictionResistanceA.2 = 3b0565f9b9b604f214577dcac6aa0774aef85c6ef80f9be8d440e026130be48f
+EntropyPredictionResistanceB.2 = e8d1c44883612f8e3e2b6a1c20b25741f3343b227253a550cc882603e9218a1e
+Output.2 = 60faec15bfb083ab52b88a54f393ae57dc1bda54ca72592df8bccd86d1e6be22c372325d71307ebd0afd443966ff928e6b1efc40a39da83d07579ba089feab59eac8b85005b1c61422607c87bca6b7d37e3c52af5fa451b13065afaa81a1cf1ebd8f978a5767ddde411fb1d17eeb5e7b7c90a979f61a0aa7640a1b3b87c1301619cd4577fa64f1230132879aa48a7e0980d205a5db04619648baa2c6a6d59b3f7dadc2a4a2fa2ab3fbc4589d3c8cb1df5dc752b120cf971776f474428a315c5e
+Entropy.3 = 07be7f1501c8264ffb6c784bc06c8aa69589a5787a153450c8e47b0f74521711
+Nonce.3 = e194388539545fb79fa29ac5e9701815
+PersonalisationString.3 = 6684e60ae3c6c04ac072e2d4bc696e36f20e66d1734589d90f52d7691da36e47
+EntropyPredictionResistanceA.3 = dcd745cad60c67eed65139c631899c18e7d1f87f28257547a3cfdcacb88dc102
+EntropyPredictionResistanceB.3 = e3ed08f22c181d7cf0d36713906eb06a289196b9fd22b2896aea77450bd7a2e4
+Output.3 = f3d322eecc6d57280cb6e80d337f97e806930977ce160fd5bccbced7cbf3b0c38172179472fb680b17d596e100c73617e6bd15d9425acf146e58489c0859d377fd9e53c2f016c9ae1a4bc71ccd2966e5b64ef20811df6980bd187c1bb3a3e9be4e6e235ded9587abdef60269e5c295b802cdd718a3982bc10c5405a50bf00347f8bff19758b6ccce8b3a85042bc6cbde1a567365a05d9bb61de5c3cd8bedf28de1d989cc10b8df4ee7500a0c6277b0ffbcc223d34fe7b7c76ee46b2c906ab44c
+Entropy.4 = d8d81b49de3b54c34b345b3f54919de9a6d3949de8d32f04c9dcce16d4e101a4
+Nonce.4 = b1741a55c996b1e069f52e866cec034f
+PersonalisationString.4 = 475e4ea39c3e38ccb766e59f6ef1cb5d3ce08b4ae269e4b462adea1e40377e3d
+EntropyPredictionResistanceA.4 = a0b1cdff2604bbf950cb7459a51543622b37c7a3dbbd6e51e1956dce9e4ab5bf
+EntropyPredictionResistanceB.4 = 60ed161c6afd9827fa9013b5b0ace50f365576d83fdb1851065291a88470c9d3
+Output.4 = 31aa588e87c1217516826d36da0b81d1899c29aacfa4790fc9927176ac2e67ead6fd60e99c39e54096dc0409494d6e27fb47f69397f0caa4c0077d77641e3daad1027005097c97a902d17173ddd12ad1f6111a682e6ee9f4df59fb3082692d617ee9a0718f9aaff11378186856e72e01807782d4405137b9a544f245b0fdbca21df7a5d7c01f1f568e1305a67086a05ba8b16bfd281baca5af8eca3003125010329ad0be8ca7b7162e982811909eeeaf1ae64a93945d51f2362e0af9294c94d0
+Entropy.5 = 3565ea4fbf0c8fea376d503449244ca8100afe8232bdc13a2d74b8fc14bcf499
+Nonce.5 = 74f5d8fcf9f98439c3c39207424511e8
+PersonalisationString.5 = de350de94a2eb8a8efa925495e2eb9d390693cac3a63646aacc22a3f5e0a54d8
+EntropyPredictionResistanceA.5 = 0775ade9d54bd1aa2b284f4ce5a41166bb5109e3e624098b55801036831824d2
+EntropyPredictionResistanceB.5 = 2e7f1e7d913ce170bfdeac22def9ef47953b29d4188a6ecba6af23d68131bbfe
+Output.5 = a1b36cb99f20a2fa1816ec448bc4d89319a06ec7d2558776efa3f2481b5c3e0e47daabc94adb18503526dc2e4aecb4be309bb486e25b4e869efd1adf7b90f9d8faad1c8ad7d76d260831d05b5c1d9825a04b6a798d3389b4b141052ab5a8e7499cf38d8e52f905b4727c7e010e54d7eb7802f94ecbb1258824fa8e072e4c7ec80dd169b965f41512077d73483cecae840abf27c6c9a5ba74ace5c4ca0a4faab68c91ef4125750004d823d3d5a183f4d437e2acb330e5806baa649a1ed4a36ed1
+Entropy.6 = 29d5103f0da3f4975034e5f38db453d3cf12051b59dde9bf81f018191c7aec93
+Nonce.6 = eb243d4731c9f81655695d7620b8ca72
+PersonalisationString.6 = ed56ed8f799d7a1a61810931b7c733b3c3f76fad76157a9b9b4abe6aec5f1e59
+EntropyPredictionResistanceA.6 = 613861f38560b7ac0f2a33576aa0fe0e56637b12ca053645ac9c71f581c8101f
+EntropyPredictionResistanceB.6 = 3cdc2603fd459a512844766e2b63f0a027f2dc0ec59fe157c110ea7f757a8a6c
+Output.6 = 63ef8b17fe4914de01b3ee93af6ddaeb5c41f7715c8db7851f820c2c27064b3678dbc856f8534100de4a38ac215c371a91cd21b556b231796e66ff36520a0dacf4e6733fdbac1b9f49857717efb009a7fd7077af6e53b15fa37750feccac398f772834eeb4507770b841c21339c4b8b0a59077c9230cde50aae6bf3206214e34402b01e7a8a7f799f886a5dffffd5bb5210de00aed8c63faf7f9af94f196b6e198ed5ea3755b8dc76e9f960e1919c24eed79bd9af28484d88bcb68306807bdf0
+Entropy.7 = 2e094e2ccd873a46f892ff1ccffb9447ecdc7606f81b048767ae0109dd3008eb
+Nonce.7 = 0ddf26cc04a6b8bbbdff5f91bb4ce46c
+PersonalisationString.7 = 28d8620ef5e37845e12d7f8dbf6f8ba6ab3e70e2b384a8565bd38d21161e34ae
+EntropyPredictionResistanceA.7 = dde6488afc626328cda802d74d2f8e8d6a4954629be4c745bc8b98c18d842191
+EntropyPredictionResistanceB.7 = 18d925a318e8f7a611c32a4fb8f31c9769acd7b27ae01ef6775f35fa13c7930f
+Output.7 = 1a872171e4b6f81ac1bf13e213e3bd3685465d0715178f6bf6a8e1307cf5e82f0b665277c2e992da4cb8583f05eb81eba0aefe1a2080a4ee7c69bcd0f2f074207f43597c0d34ac7bd3612e11af434ad052dba023dc2d987df3e41714688a30cade49de79f4708913fd458e90015dff1cbbdcd8246398eb920f4004166753f82efff4e211f70941073fcf2bf26d4e21b5d744138a15e80f092f823bcf3348421ac6505a9098bb1e2158f2647fe34d5357528fe91685ab66d0f77959624074788c
+Entropy.8 = 8188e1c61cb426fc627a5ca0d3686777022b5ef2da89da61e76083c1561c846f
+Nonce.8 = b50bcf791700e414069e334f3a49d7c2
+PersonalisationString.8 = 265a25b7b732dd3bad3f1c33ddfcc1530774ff9089dedddf6d1b810a4bd3651e
+EntropyPredictionResistanceA.8 = 5665acdaa177a095465779f778a4d64c3dd5c29e3b05d694eccadb6f289217fc
+EntropyPredictionResistanceB.8 = 39baca9272ce2bbf193d438868756a647c817635c0c3f90f58b7e57809c792b6
+Output.8 = 428bac07945e08164200be0b82ed6316f3164b77f0ab30a44eee0b560f2b21b985b84e9680fbaa37121f2f5cc3eb4c66d901180fa8c96769e165d80a4fc4d7c3a234f5a55403fd5237ee2bf16ac8ff4c6edc716e0b05cadcb7ac8853eda0748f9146ef231953485db5ee9d242374fb4136deb8e5edbd85612dce4aaa73080f42f21ff6c50d2fb6f14fe0ce22a4466bb5f04409f8e9f13127a0d57e858fe5daa7f5b5df6579025a2c20e8b8d4c3c53e894ae510d943ec51e758cea34d57f8a511
+Entropy.9 = f9ec93a658d6c8601145da57bda6aa289aafd02b3fcd1a175a54eadd1bbe7c1d
+Nonce.9 = 0f8bf09ab529e15c9677d1200f0ff92a
+PersonalisationString.9 = 7bac57ff60cc63b6413a396f47c915651f0eeb010b2a904575eaa68629bedaef
+EntropyPredictionResistanceA.9 = 42392f65927c8267e21181cb9bc603b00699e5a08ba2318cd76c8be378e0f76f
+EntropyPredictionResistanceB.9 = 7ab4c6a1606a869c0c734f6238e5a9c9f328767d60de7659a9639b5e9327c7a5
+Output.9 = 725644d87154ddc299dd5d7a7d86e3868c1c5dfffacd71e16426736e4fe26af3b2d0cdaa4d55f758beb31e233409f725f8e21d68e446d48a1613970ebfc50a26202c8afaee718fd94eb0f1d749c72d8900dadbf4f101f91abbac0d870cb262dd543264f3c968c1f933168e9f187896aea42d2265353cc52bedf5d79d7080a763686deb1c11b57924bc9fccad0737f4385dc7b830af3c054e148b14a541f84e852614927b791daeb9b19cd06a17b2d69109f6ff32f058557809ba284e8f748c97
+Entropy.10 = c2dcc1b0df16e11fdf97f40a2da3891af9cca97a1e086167c39f7d7269d6a007
+Nonce.10 = 82208059c2fbd6a3c91b25d068e67075
+PersonalisationString.10 = d7506dd0761e3c6dfdc0e4064868d5c25401734f4f41d82a09b8c454a9708fba
+EntropyPredictionResistanceA.10 = 0671af5f484bc37861303bd9f1bdca4668b93f0c53890331bf77246a5b386a79
+EntropyPredictionResistanceB.10 = 4b3f0500878a1df8e0a251d2122ce4447f60c66e286d599a0c2b139618b95050
+Output.10 = 8423bbbc7efa29fcc624d87c7762a465d7f2f2b1102fc96fc5840f7c6256850f3be04a73cb2a687024a091054f35cd4d0ff0b4c096e019717f19d4d5c620cdb2463cd040ac2621e26ab7d6ecd6772dd10c910a97b9cb20dfea936809b10274a5f97f56a79feb428de5b3aac397849c8ceff2bc48352012b4788a02e6a705a8da5465c0ffcd4cd82b6a5e6b391355646888d55a15d61ecb6110e96fdd4ecb795191d1b59da2feb08ca9e9a444b73c81110cc07d9506526e6df5181d01a7f6edd0
+Entropy.11 = 6e2de77fd0debc55d7afa14da69f21c5de2affb4f2e206d16bfcd1e949666626
+Nonce.11 = eccbd5b3a81e6c5b0c48bde7bca1ce47
+PersonalisationString.11 = 12ac35cd994b11ebbd38ff68bd33f188d2a5be5ad25c5a2d8f613768d8879dd2
+EntropyPredictionResistanceA.11 = a68f72be98aacfd813746820b8a9f6a8e6ab0b99b3f23d4b2c819584cd63105d
+EntropyPredictionResistanceB.11 = 596f203e2c8768680fe2cf64e53ec4a15ac22ba9270fa2e5308de731b972f568
+Output.11 = 4792e978f98dff96d48ced55c6bbdc1c2606be7066b27503be7560ff2c626bec5a61ed3d96e906c26386d5c158cae6ddebc1fc9a487178bccf3be516c5b307080191f08c54a3d13bde64fe3665c646a1771ae69dde8fd61a0766a15ecc0600dcbf73c41d4d3da298e08ae0a8078730cecb246c294112eefd3402c1a220e191f3f6a7f6f3dda3f83cfacd5a73a59f46e139d6703e93c4ab73dae6fc3d70f7529298e77ed7dd91ed41210f9bf3efe6cae86003161c47406008e0b191a51d8895ab
+Entropy.12 = 62d81c45dedddbb72fb43554f5afc4eb7eb6aacfe77cba42ece6a6071f69a510
+Nonce.12 = 4b12367078e175cc79caddd338ea429c
+PersonalisationString.12 = 33ec718aa73a8c36ef04f371d8a1f9d063a402df75d89e87df1397fcc46bde23
+EntropyPredictionResistanceA.12 = e15330adad26f6aac5e6d5d48627da5c21beb54ae77df6f2f920c672ba9c7f91
+EntropyPredictionResistanceB.12 = c146a9caf20cf81d49397350459577f4746f1fa98b32c9c4bc8fc563148e52b4
+Output.12 = 14e0cad37aa9d82ad0d89d0b90d437b7bb4d5048bfc4ff72176ee7c49de4c7c3ed2bfe19e28926d8ac9476286634297a2b2c5f18947491526549ff5f45f9c1d22411f3388ce99999106f7255bc77e54902cacd0649bf5db4cb2b8047ee0633915158f0db751db426a8604dc414bf3b7902e72d74c12690c6eddd51802732c3e19dbf52a76cdba568ac538b94c0b724a94d256a05042266c05d622a5ef179e61d19afebd49f0271e601de009d70ec531184fcc90897836280ebf63f81355f5149
+Entropy.13 = e2ba88a0f103d4556b6b0676a4291a896764d50a6f1f9fb0edddb8e205972c5e
+Nonce.13 = a6f4d9da9d3b298488a307c163fdb80b
+PersonalisationString.13 = 78826ec49a533268c089998dd5f0e3d88ed087efcc0781a2654c1f990ebd76b2
+EntropyPredictionResistanceA.13 = 8216f4c9938759bb051389bb94ce7741642abac51ed90a6dd9a155079d13b4b7
+EntropyPredictionResistanceB.13 = 492f88f46107a9d1dbcc22cb8fbde593c313acee2ae9e7352a30af405eb62c60
+Output.13 = 4f5274f3e88637741b19c4be82a8d7eed782b8cbe4194c4301c8e19365d3ad8cd3c0687099f8c38c3503b134a10274d47fadc94fa59e2ac27cc6bf12bcc0cc28bdb42404e71a2170d7a3def1214a7e1a2092a910fa116d052f7d330f8d25f3a794f4fb6ec83e139d8258fbeeb41d33fc9d17b004388aec53c3336a0fe0d4c984d753c022a59d6c359889de598df3bced0b397f707aafb9fc48140b1e87dd6b0fb4527e8fe6e90a157eb8ed5101c16008ef61a1a0fd9085627f4714ad77e7a929
+Entropy.14 = 6d40500e50ca0f43ad439a3cb711a7d5f20f45840c4c53137047b7d67ac52095
+Nonce.14 = db7611c337b16de1f84ff6569baed2b1
+PersonalisationString.14 = b683fbe7fde0a1716b5e1ca4091d9a7c5c2a4031ff05afb47faff9af593f9937
+EntropyPredictionResistanceA.14 = b35a6d3ba1b4b3d62389ff2dfe1a8a9ff527d4fd3b2cbabb63945210597978a8
+EntropyPredictionResistanceB.14 = 325043f919f312cac2102d97cdc26a58637120c01c09448be861dd97751e8672
+Output.14 = 32ccfedd45cd80172e146ce0982f6046a96735237e6df0033eb5d61d134383efe454da37a8ff31689613a808ef649f5eada3214ea50ff21b673bd407662006c157f98a36418bfe72493134f6d8e2b5276610d6626977cb725d43a526ab523ddb97ce76e6802c60da568402ed854bb9e1af9cc74f123493b19b765aed7dca28bfed8bfaa58601c1f2d1e1b782b83337cd42c0c304e7415da0ddffc9078d42fe6b59e5454dfcd71d59cdd453303018c28015d88c914b62d8c3fcb94eaf5654b02d
+
+RAND = HMAC-DRBG
+Digest = SHA-384
+PredictionResistance = 1
+GenerateBits = 1536
+Entropy.0 = 7351663efd88f6f80c750b27ec0a7791b2fc4dafa70eca426400e87c0aedd2be
+Nonce.0 = 9a3453c3ae4fc1478f227e00247e4010
+PersonalisationString.0 = e604b1cd9284cc1950a0b17349d003b00f51983e518957f62ecbb26af1d05671
+AdditionalInputA.0 = 1bc291d9c596d31fa7928ec5d9cc5e1dca54a4295a98dc08d321e919fea16eec
+EntropyPredictionResistanceA.0 = 5e0211fa89ab7367e63a6bb4befd6372e566e69e706948e5b34f630500375ec8
+AdditionalInputB.0 = b86251798a321248e6ed17637ab78116472d52a02398259be1cf6e298c88ff48
+EntropyPredictionResistanceB.0 = 64f1064412646ed56b098e6fe11e92bce68f688b76849614cc45d482b736fb81
+Output.0 = 6f010a9c6ba4cb2ef16bf03346793321814059a02ebc846c2edf386b6f136a8b0b4f7e68c74cff874547b37de0257b1ed0470ee1d17064d1ca9f3f48cbd0de4ffe2546474f241a7909e70fab21077a727dbd11d22fa81ccffa0e365a02dd0e33f2de4ef88008400818aa06f986739bddc92ec719818e8003551fb5bf4e36b1c2b980c9d2eceb63f5874fc67a1c590377254dcc2ecb3f70f851607db3972a1104b0ce83ce2d6ea861d0b269502942c9916ce4da57e146c6eb99cb9991032431d7
+Entropy.1 = 08cf6a9ecd3c50cb2da805f577ee5a087aee4ca7ad9b4a55b3d59c2080c2f8ef
+Nonce.1 = d914163e340cf6a04c23856147112ba6
+PersonalisationString.1 = 56cb306d0f913968825665da48eb3c0adbcdb282993b64af3c0a9285a6de110f
+AdditionalInputA.1 = 44639eca0e28e69c471ffe85a4aecb134afc539ca4ec1328ceef39c407485a40
+EntropyPredictionResistanceA.1 = f51bcc6b5e362a143633279558bd61d9e3770d581f5e155dfd723b15bd497ebf
+AdditionalInputB.1 = e09581dab88d63ef7d45e134db237f9d90f53657bc1f13690528403054315711
+EntropyPredictionResistanceB.1 = f336a54622ed4074dd9cf564d079d856453ad83c6dffd7d67a630bff7673a45c
+Output.1 = b9fa84f4e1ff6fd32b9488accb6cb4738b9e7c8b066a70d413a8ebee811f19cedafe4c365bc04c8539c687b44b396ce6a8756257d90f1985c2dddd3552f8e8fb5a106c7eb8ee18c480cf01b10d8a8542a1e58957ec9b0c97c3d5e7454ba01a021e6e3beb1d689f32e1fc166f4981834cb2bd229e775ae1a74aeffa2c5bd4ec6a94f50b217c4a6930fa72b3a8d0d733c4ff7b82c9f4ea351689d62097fd80049af1e3641d30d82815df193c5cf89ad6e97faed51acdd0d4d1b8c2527cb8871225
+Entropy.2 = 566b40adb759f8539026becbe2d6c47419f2743a4ba2c38740a58b0150f489d1
+Nonce.2 = 898dc383b91540ec020d8920e7f96517
+PersonalisationString.2 = f20743fb498a3844836e5c831d5242bd00998856238ed0bb0ee216d874ac07e5
+AdditionalInputA.2 = 998b39be0ad8af6d4e3a0999aa39345fc1243ed5ab2833702fbe2ac0f8ee78b7
+EntropyPredictionResistanceA.2 = f10ac15740f3c83fc08019a69e41f02120b1bdfa3943aed8aba30245b2fbba9f
+AdditionalInputB.2 = 1def5cf5ec2528d96c8f00b442e236e0bb1729f71a66d12e9a9549bd471bae49
+EntropyPredictionResistanceB.2 = f3b018f77c8f87af4802d0a3e48942ce2f76afade4a4a156349d7822a41f69f7
+Output.2 = ae7f99ef06011a99a9580ab8aca7da7c787d5801b89eb95443186defc1414e56c39d23731c55ca8de963e2eef487166c475eaa84157a21462dc8990168df789df7c4f8181df79ab416e38c7bd959d52f1b45591441af696748fbc7cfbc903a27592508299bf616fa9b67881999cbe5982c4357ba11b1524c58fb4e583734e7ee345fbca686c22022513df4231bc2df4ddb57a128dbd92b6384f723d8ae3b34177164e71c7ecb3ece7a2d57ba13452643a8ee1c269308843d368f8315e01b6278
+Entropy.3 = 31c24c4ba38df4c6402d0046c010c1058eae66a8bddbd18259ca1421d4d77c8f
+Nonce.3 = 6433cf9cb948e9ae9dd0b42541d4c012
+PersonalisationString.3 = da562f8492f285454ce0adf6af1ad68e03f035865c61d1568c8220a57b0d1443
+AdditionalInputA.3 = aa81467e773746b5151de5bf8703e12508ea16479433cbb686f93c141dc10faf
+EntropyPredictionResistanceA.3 = e074fb21e87d89a08da4707261c9575ad9537c9ee4457ecb20b80963f736f0a0
+AdditionalInputB.3 = 1fca7b8624d6febd96feced7623a9528ede665d5af6b4ed4c5515a7ba37404b6
+EntropyPredictionResistanceB.3 = d00c274df121e14249ade8b4a317eb9c513c33feff8f834385df2c73351e7eca
+Output.3 = c98559b12834b2f70248331cf9ab8cc9513568d7575ef06f6cb6190395216088a7efc8cf6a7e9d3fadc226a1fac68447bb3411806ba88f5beddd48775b01a22cfd833c1533e8be57f55f8780581773912aeefa99dc687c89d5b950ecc9e77309a38b4036abf44c37d549a25cb7887d7b9f5d20dc3a2cc62bfc3a9fed879b16cfb67abdf524d8e4c5204803330c181a886869da34a3606114410e836b194c0d28a6a6aea6542b9529d05c40e671b3d2d5d989ab5b0f65672ee0ce672fd68fa6c2
+Entropy.4 = a16cd085ea84e2cbfdcc373236019e77f7b3cde68fe02ffd94eab49ac0224435
+Nonce.4 = c68e169d6d35ed1c8c443399ac237342
+PersonalisationString.4 = b416c9d8c2fe3e2cef9d1714f748a41712d03ec157c8e780873939a5625f1441
+AdditionalInputA.4 = c9c6c0848a0ac27d8fab3dfa37422b03ff3c0310a6e8f848c0108c4a202b62a4
+EntropyPredictionResistanceA.4 = c27cc1a799a1787192cccf10c57d2d4fcda92b78bd72fa8c3cf5d6ab57a04224
+AdditionalInputB.4 = 19069fe854d8ac779f85350b655e5828fdbeb0c0907e9700d23f7c9feff51bfa
+EntropyPredictionResistanceB.4 = af4925430d231f75b6c1a8160c9dfe30c7be79c3eb7f2a9c5c8423ae7dee9601
+Output.4 = 4e27543eb3df2768e9c33ad608424bb192c10ae2d4aa9189365a8070a36372bd03261e33d6ee7337912d735c9fcc6da143ea8ff6348a1900cdd29b1abe62eca2989f054e0faa5c73d75e377ed148ee4a5c2827ffeada18583fc0dd37cb17454c6807d7f2f8c4c6e58bb61bdcf9c6b0b8ac9f31a007868f2e8f935189908cf0fea5d6f6824f143b00f42720944ab03ce1a79ab0612ce7ec9d8dfd089c52e507f74b1d02ee82a75999148f2d74dea51d6a7eea6daece1c5387ba931b16d1a3fb51
+Entropy.5 = b2fa667c5f442a5de00a42ce8d575bbb58dbc96ad16e9ae43c8ccec1b31e5b96
+Nonce.5 = 1158801f61a0beb32f6d7811b0d0cf4c
+PersonalisationString.5 = dd4456827e7d9ed6ed9b4d50270350754366b19e83efcf86106438d22a80de2a
+AdditionalInputA.5 = fd44f7992c2a74221b8a1d3c1c4b1d3436718a65d20947c619745684ac0d7201
+EntropyPredictionResistanceA.5 = 068e3658d9f07b3db8860ca6311c36757ea77fac53fb9c0f28f3e6ccd8c83ddc
+AdditionalInputB.5 = 7b638a00d6991dc9e083c1878fe2dc2df425d82a7eb203da28f85425e30a409e
+EntropyPredictionResistanceB.5 = 3acc444321de3a13c3406fb3c1e17003f78d278a7d4ceb23455a3ca0c6eecab8
+Output.5 = 29fa96645aa94918abaead1d014d60baa6e42e5029263fc1129596d7930ed04e10dbfac3f46d11f3f8359aa5b95e663f00c730f7e821ca4cc3487beb6cd7f796fa4b7f24c6afebaa3b3c685fc25647616b3288390667f9e0c8a5880b8f02e769bf588f1484bbe60d9726cdcb908c58c6367fba451fc4721413342ef37a32c72224ce135f95df56bdde3e4593e975f52ccfe35772f6e93fe066ce4b05d3f48163dbdf39c213925fbe670b544ac489cb7563c334ea9e52ac5587551deb89620856
+Entropy.6 = 67d80714a3438936752ad2f75411803fcf4263c50d1d0ff10f7ad3b89e5f1e01
+Nonce.6 = f54139b7d759ba3a969640f93875b171
+PersonalisationString.6 = ed3a59794dfc1e71a99ba4123bd496305f89427ccfa723dec45891005780d38e
+AdditionalInputA.6 = e5820da87fa119b05e228027386a484e08ad4a944e0a5c6ae5d92dc9283b9f26
+EntropyPredictionResistanceA.6 = 85aab48b00e7a0f18eb3cd91b619e13877cb6d5c6d8d3df493ed5b50f1b22d60
+AdditionalInputB.6 = 9266a9a1d10cec6cad5ffdb6d2ecc02bd66bba66cf51f781bf0c08e18abd5925
+EntropyPredictionResistanceB.6 = 93f5f1e4008d6d7fd06eabf29617c4ed584a74629315cef531768b86a21e019a
+Output.6 = dbb6a15fdd98966486ad037cc3d059bd6c1e025f7bb017317420dd37e94aaf934d07c660c0772e46a4bf1d6e99fdbf99eac9f3fcf49fa850e6f10fc1b24a046e75d47ac63b61501d4d3f18c65d6fc9b4c2ec73a58a6fc9ca3b793be0bceedfd6ff75cfb6010946860cd0387c61adb620a91eeebd01c7d8404df72adb59f26934b8f82cbe32c19c8bd2bae409ad5c90407d02383f80624c09957371234b00f7eb04efda3cbc888bb122ed74b9d09957ef1faa3d521c54bf8a4fc3649222d0c844
+Entropy.7 = 620650c63ed4509ea94f45d4a5470c24b0c210a20340c71e6672b91ef7414ee5
+Nonce.7 = 72142c7ec26c1f906eab96ae2ada58c3
+PersonalisationString.7 = 8bb5900f05d339932de3c1af4264af5b4c6a2331e6e8fdca489c8df746dddee6
+AdditionalInputA.7 = 75a1188dffb0bc53b443587ec81deabfdfcc17ea52d16c3d09276485b872e2a5
+EntropyPredictionResistanceA.7 = f8b88412cc2e3fd322f96cab30fb55ef070c2eef134c48d17707e992e01882e0
+AdditionalInputB.7 = a436b451541784a855eddeab6b9b432a8dce0410d809eb02ab07fe7d0cfa49e9
+EntropyPredictionResistanceB.7 = a5971766ec8f15d32a6f1c696740e460e0174e02840b0db2c4521a6dbb5a75b7
+Output.7 = e007c5e73096a062e0ba4d0c1767e025c4e1c4d883c5ed4a0e29ff4bb3f124fd75e9224e360cb078138e08240f25a7e80c479850574cec6076997bcafc77985fc41960a20e8e129cd4b4225f50f3aa1483cc050f7f87b77216bf46f9a0cd4324635de154baf0106514902a03c2f8fc46d800d41cf4ccc5658b3715d92fb85330e918e22a1747cdf653d231e00dabe6219b6f0b8ba2d7e99c9959eed22a7e3fb5e208d6bfb95a35fc370ee622617699ecba5bfa848b9d365c783b7ce734df0b22
+Entropy.8 = b7a7f81950ca22cf8b406c79c3ff7772a560603c0f18146a8db62bbc543db16c
+Nonce.8 = ac6139594cb7b6b73b4a0f032287fd69
+PersonalisationString.8 = a4530a0ba7495d7601c5a369f5d31927961f1406c4d09eee6b67cfae7fb141a7
+AdditionalInputA.8 = 0e61bc906ca3a8bb79d15ef6ad1bcbb8d183bed5c67796b521b8e5429cea1257
+EntropyPredictionResistanceA.8 = f6b7bb877bcf8b44f0945f478e1cd57054157ce48d501fff326648eb8d7ce225
+AdditionalInputB.8 = 73e4e2995db1cc24778da2ce0d6dde912c91e3bf17f3f854f64a6e6c2947e6ef
+EntropyPredictionResistanceB.8 = 54d62a1bafd079c70d6447fad0099b4dac4ec44fd9486ee0068f2dedbf505d42
+Output.8 = 92b8e5e4457d51b56693a65144a5cb84dbc6e053ae8cbdb7a460c19993298a7a049ab41d37dbabedb3b6962f5e219604875afb527aa3ff3f293b984269355fcf9ea7d7f1cc9b171d83b75a03bb42f40bf1201bf8cb989308b2b5e523834f17695f742c07b26a6aff4a522931cec238bf1eb1496f37583ecc4e64a76b62a4701ec48ed95f395d7453bc0b7776e7f4020e98a0230dc3b927307efbc75e362a5392b46c923026f54dabd68f9848169166fabce54a1a7ac418f5ee900224bea15c75
+Entropy.9 = 2d81aef19c201191d2ad7203c1392aae49244ab4da60255e24d18e5dad1efccf
+Nonce.9 = 0da47fd83cbe18d52e56cff874409e16
+PersonalisationString.9 = d28887cf103cb21b8606a38cabe487bc423d37f287be1e21a45affaf927b1725
+AdditionalInputA.9 = ceacad26c16cce2fc67293d26ecb6c0a453e2c353fb185da9d5c67272ae27706
+EntropyPredictionResistanceA.9 = adb6f37eb6a09739bce46ad48cfa651f907ccc815998dae013ef25202a1f1d42
+AdditionalInputB.9 = 1d127ccb6ef8ee5734f98fe5c798f9e2efadeb37dfdfce2c10788cd7823b63f0
+EntropyPredictionResistanceB.9 = 6707515dd4d8a5ca4949e9796bca6226051cd777021653c073476abadbf096c8
+Output.9 = 57ab9365bfbbf77834a30dbeababffec8a32f1aebc3e60a826da255990ccb8d84ffbfcaa1264a5c4e65efc31b787a2e1eee27b22f32e10b97540dbee036d68dd54a4ad58d8784eb4400098572341e0492aa70d3b50da1b057bd61da2ce208eb188c4c434e6a09771e4f39bdec912d1033833ed9f3c3f4c90e64c46e122135b43a9f82c42c0d85db6e72db70edeb0db5665062c55533f833ba2f90c29252cac09194df0b9ffd137aceb9c2f506d21dd3973f559bf046323b3af21d692a4705051
+Entropy.10 = 70cb3e8ba9b18adf0b5f64874fe16c8b74b0ca7ed0c15d7233ed701f0d7dc302
+Nonce.10 = 4b8096f022b6f2d8c3de44318aa50b82
+PersonalisationString.10 = faa4d3f9740afd82141ee2697ce035d02a532f67c0d055e486aed86e73fe49de
+AdditionalInputA.10 = 00f080b02d2eb2e65926b900f24abe821d36940b98ea8c22ad3a29f86fbb1e20
+EntropyPredictionResistanceA.10 = 30794344204328cbb085a4fdfbcbd499276e7aff6126f6f6b5cbc99c4150251d
+AdditionalInputB.10 = 067cb0ed5ffa24f4691439aa81d8b670638c4c44bccd37dd074fbd3fe94bbd45
+EntropyPredictionResistanceB.10 = ce50bb3f9e7061f6e86ee720b3fc5e532bccdf837ecbe463407b9205b6e18b37
+Output.10 = 540e61d932952d2082010eb13aab4d7155201bf4918cd82abc1551fbe96ea3b77265078b05d5a20c323d159e81abc933519b5a7a3fd660ee752e91ef52a6060b6327f7da51641443c4d0d65aea9a769d6dc95cddc54755329cca32bb33adfb60049ca9ce73d80f08cc29972bc7c32e684ed397c7f8a86813dadc683733aa262098832f5b23f9db79494b142795d561e233841d4b4969da6f579b62b170d507780f3f0b143c95ed7feff1e0a00d6db64218b8f64c6e3e47c27a6ae54647bb30e7
+Entropy.11 = 676184ed679c6bb77d9a740f8b95f70b909fe0e8503eeae596b1c13f827c0c68
+Nonce.11 = 380ebb19cc930433be5594da05546647
+PersonalisationString.11 = 86eb8b7b35d2e5ce92ceb0139653bceaf1ed1fabf5f45b58e53633207d4ae08f
+AdditionalInputA.11 = 0b2a24205ba8607c8fa18c85a734fb6f473aba8ccbfde8e5f09234dc4260900d
+EntropyPredictionResistanceA.11 = e6c2705a165b3bdb09b939c0f75f960f4183f4da6c18a339729db48b15c7676f
+AdditionalInputB.11 = 88bf1a4a5549b4da3dca43e869745d52247e1253c191e808b8777fb0adff7593
+EntropyPredictionResistanceB.11 = 29890e852385383e69dc5ec6f13ff985ad7a29d2d1658f63b0d225771088ce63
+Output.11 = 6271cd27a22fd314d3fa08e52e984abe2299cfd6b20905fb5ce5ce14fb8f9aaa3c0c5e2cb8e9cb7f86b759602987e34cb68b0d9717a40deecd384aadf5f79f43d0ff3590110b3aca9ffc490ba871bc00d5169a971c0c59d2d935dab3d40ec8da21eeecc69e962199fa9f4cd444646affb43c34aefd2ff131c3438947dd96ce7170bb08747296dcf90aa574d592651d77563f19cfb1ecde3f07a11dc323aacf19eb326c391a0b989efbdaea4ae2d9cff936792ab236536b455c7158c930b4d0a5
+Entropy.12 = 685dcdd4e7beaa7e59e5eb867ec7e1847f1637c3dd43749def3b5228b02fc8c9
+Nonce.12 = a8806544dfb1a680d71913ae8515d34b
+PersonalisationString.12 = c0dd747d5a3e6d86358b61d4e909c92ffae213303756428cbb0792988af6919f
+AdditionalInputA.12 = dd9ec7604bfba9414bd471c29dc9d553523b12b7f31fe637695afa44ee7159b4
+EntropyPredictionResistanceA.12 = ce602327a64b0819b2bc4dd0a925397246b73d8a3bba7b8b7a0b289376ac14a3
+AdditionalInputB.12 = 719e3c8d9d7162824396886363f653206c6fded44eeee1db850610a47bcab784
+EntropyPredictionResistanceB.12 = 9c353b63bf03a9cecf71ddeda4e018bd1961569c789a8615ef661ebea0285b8c
+Output.12 = b5e078a7cf834f6626391cf10c028e5554a516f35c8b0aad01d8b4e5cb0723be73226a4a7433b54e2075b11683e6529471878522e97b9dc54de4e8c0989ec92fe4e8f4e01b571ad6349c128940a013ff4073ad0dcb9517424381a96acf49af2fdaa89c5e5640b34f347a05d96ea119ad1e67d8c02a9cf84bb9ba59547a41abfccebbb47f1e0d6093d9e4cd26d7b8126618ba1079e9fc63ea02576caa901044b418474bf82d93363eb26417aa5918788437502ef62adb95d7d7924ad3c23f4dd5
+Entropy.13 = 9afa355f0d80e3481067fae026ab295fd198f850c7846c1256677060a2427f0e
+Nonce.13 = 84c490c97e8c79b70e8b241d574d0b81
+PersonalisationString.13 = 0571e4b1fcf0aa8a04bc6966e5c330334effa1e82347d5d64c0409fcb5cf45ca
+AdditionalInputA.13 = 2db13d3336689140d8b986ad0c09e5e5738c23629e76deeac7c62a95fdb465f3
+EntropyPredictionResistanceA.13 = 5f12a9416254b00767f65f8029d18340752985d0b16b85c19d8656853083b8a6
+AdditionalInputB.13 = ef86efaf477d2b0b04a63628f1d278c16f73d4463fb5890f2a0f727b44c044bb
+EntropyPredictionResistanceB.13 = 7b3dd2b1b059fcfe51071e90bdb22d7a019fd533990da48c72380509b915fd47
+Output.13 = 5dd82407318fa52e21a5990f89cb4452d6d46b758e153bf5adcb85130363c99ea1e4ba7816cae0dff3a45435e2de8c91d8aa0da5e255554146e39008350e051e7a6d8b02aea41cbb41d729ae014cbd9538f5aa58c60d53179c06b4502cd8c347967f6823aef48f7a1214bf72751ca34f37f27938be9196205a56bec735eca1b35221c970adf39efa3bd51d82e75c0c532aa2f8bbaf957997f6b96c37124f936840ebd43aa76e0a124d5338b8bbca32e54a5e080aefb6278f936a1489ef2c25e7
+Entropy.14 = 0279ec1a07e29f66e3c36890b16f3435d15b159e208835e813b6eeea3211a5d2
+Nonce.14 = b5b54fe18708856dfe1a68de93662f7f
+PersonalisationString.14 = 5b8c68af29928d83b80525439f95a6583a66bc55d6d435e2b99e3ec1797194f8
+AdditionalInputA.14 = aedd029671b99dee66fb0fa49aaf73b792bbc52506080585464d84f697463b22
+EntropyPredictionResistanceA.14 = 4b65231c1462f2f43269b8e9baf26c8cd3eee220f4cc3e56529514d0ff4abeeb
+AdditionalInputB.14 = 506d6cd8b85ed0436e4d3acf30ee322832ace0b3d38e168a27e8e1affe8818e3
+EntropyPredictionResistanceB.14 = 47f2ef16a053397ba65e5123afcc0c1236eced05aaf112790044dda603286a63
+Output.14 = fbc0577cb1f3dd606eaf8c75f1a60bc148a82e6a47b67223a8b53f97a1d22de119679c1f58bc4f9981af5e6c7970cabe4f60af89d7a2ccf1a50f33215dbdcffa018ad02faaf7b8811960c7bc6f2146683bdc87146f0a83030aa2a63da97a1bdafcbd48ae9c02d7b429bef6c767186dfaca60cedbf5a29033270f091042cecf0dd3f712056a6772eae9606d7e4aebf522a143fd55f1ac0dfc3ea1ac490f5d3f455b916555b43bae78686c8c16e41f14c2f0d5c6036b98d48383fce92e2e22668b
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 64a8afb71975256b6196f3f93038ba8b7a4d7089f7f268134cb3f5926868e4d1
+Nonce.0 = 04c60b44fbf3bc198f4bc58bf1260d12
+EntropyPredictionResistanceA.0 = 3a5aaf8749136a86c4e5aba81692d587133d29d3b7a63fa6204ed84e93be6aeb
+EntropyPredictionResistanceB.0 = f50472d313ef5797d1a290a7cae086052b57e8d5a20ed22ec7702dd424d935ea
+Output.0 = 4f61f6b5d46ea351dc6f8ff55bcb915d998c8e871b5e122dd95196da241c49a1170b1fc16ffa31a6dc4f0c4068ecc6e5cc0fa6966aedf72bcb19e666b191979f22580b6505c09a784e76f58d30af3abcbe840497ad88621a893ffe13af6aef0f8276f9540068943bb6bc51498a465129880df4c517f7fe70ec239c055102a78b8b0f26d36bc2634a0e61a1431850980c258326197cc80d07c3cafc49a20316a0fa2703f850b66ce274e839d6dddba4d3e744306d768b7437ec9c54ed864c7bca4ea8d0987d815e64f685e0726eb4223aa5eac1a0979fb335248ee59819c36c7c94dadf14474c7e2f10678da59f255474ea50c3ed5ccf86a399ba7f54ae96bff0
+Entropy.1 = e5b8dbea654b559f025c008c1f3b2eff92fe98932b0271228e3f4efa3303cd4f
+Nonce.1 = 112660f48057fc56ed0eebacf559cdd1
+EntropyPredictionResistanceA.1 = 4f523a3e948e8037427e65dd25c1eb41560f2f78dee139b3d721ba1c278c3855
+EntropyPredictionResistanceB.1 = aeec3fd3a44a5331c8f54396ec3b9ba73c22da8ae1adc9748178d7d21341f7c9
+Output.1 = 9bc5a8c111d4586131faef63689d0a7342bf601f04926f18cca7aeeb8edb129e33cae10e9e08fd44065db2aed4480b75878c6d1400d38fa2c9e836e4a6bc1d66df571ffa1dd0a073b89580005a09d1ce81492131771ec4ff987cf8a3260c9f90fb3ec07b82ab1db526b97ae856282ff7c62efeb2cedaacb75fda0b74df5e0e766a3573a829c32f53ef3b16ffb9d4cc1cfefc84e08aa1864f5d0fbe593abb26b488c90e351816e2d1073bcbb599b65b196b33dab9095bb28983172f3a61c992d44345f2947e1acd2df96ccaea3f6bc4c024a4e36868e358e5bfb9047ff11daeb34571051f0823265a15be9e4e4d64f7073bd5dc3b43ad0a4b39a5fb6bf4b154eb
+Entropy.2 = abe7121c768208f174ee9e545250014d031ebc647497a60e18e3462517027fea
+Nonce.2 = 1c0e3854cfe5429bc105916e63a0d5a7
+EntropyPredictionResistanceA.2 = 585cfba737f887852f23a41039cca6e33de94901cc1aae91ac42db0ca34724b0
+EntropyPredictionResistanceB.2 = 7368b1a3ab733dad24aee03bab50eaaf2acf15c2c700e5e070097132a92ae7bd
+Output.2 = 7e082cce6774a3d21ff39db1ef9ed0251a6434462afd29fb8e05458b9ca7bd181a9e362ab4986c19fa1aa9bb1d00f1c3479b2b4be1512b2b5eb94b9ec0493266b6efce73d02d6acc653db9e4c194c7d169781aa78de7839e010adc7fd58efc988a5eec2feb89f2d0dc45ac6a7d4bedf11bc1294b4f312c723acbd664f28f85f676f3feb7d2d2db14b0acca2ac6d83d2877319cedbf816378365dc51368e1686f2e3cb0bd670c125cf484cca7d28cba04a25479dcfc3f80910422a583c35553ac7dd6d5a43c6cec465dd6c7ec33712c9f2289206b0f1e620ed23a335a95a1392d143fceffbc2f43a18c3426de0f2f1716f7234bdc880f61e3a1c1c2c57fe29336
+Entropy.3 = 07e570fa7cf079e066c5c30b6d24fd37906ab7aa07b1551be605b31f86dbc3cb
+Nonce.3 = 3e95a0723e9344922d14185824c483bc
+EntropyPredictionResistanceA.3 = 5dc8341f10d698629736838fad6a190825a24482413b388265fb20b2a8e7c078
+EntropyPredictionResistanceB.3 = b91090c97db01e6c6a72d1c067bedd73da1d7b1575b05870b8eee4343bc42213
+Output.3 = 3cf6099489d2eaa6bc427cae2bbb4a1b121041bce2a4f8e747a3b4217910905156189420fa8b9698a8a316c537229a42509be9e75f7dbd5241de932475114fc9232c3325ee8d921aaa680078493856c2d0b14e6593bc3f36e0615143fc336054442e196dd152f53634a2fa3e74417aa2dfecf4367cbc1584cafcf583cbddf1283b73b35f9d1f1ecdb7104b80b838f2c1464ede50bca05e960efc6b62f5546a0d02e3420cb857050b49cb1e3b4ff8a936ae4aa7b1d774089c641d96a732164ee5b0cf77f2f729303c53de66e9d1b6f5eabde7fdd55bb7030671a274e3f7a41047d84f307dc1996d6efb671df8a01ca6ffef81950beab98a3e480cdda5241b6d69
+Entropy.4 = 99fa882ea5aa55ec9682719721a8e79d6afeec5cbb3577f1df7fe97e4edc4790
+Nonce.4 = 40efa1e51f8893210c302f2a2a3abbac
+EntropyPredictionResistanceA.4 = 2ddb3fa31758c8473a6f7c50d98e423ccf360a2f6a5d94f7ec6af04f656ad06d
+EntropyPredictionResistanceB.4 = 20e2be7e09f728b64f81d736ac3fb8263b0f7808abd5d7b0bbae1d4b3f445957
+Output.4 = 5807f478399eb17159b096f7be7788769cf56beea8cf4604400f77b1035ce0b3c5d9afc256850445397d5c75d087de12f10889649d4e749ca891f30bc397b58a9b3c6321a08b89845e186e9a697377aebe36486886f74ac3bc353f033d458ba5d94634b162086b4b74563860f1f079be32789f8bfdd561e486839996db8e1de25583e2e64be914329bdbb0a42a13d668e47e4ff635d01a1daaaa29ae8459752d04b7c8ff5340fc8c97293f2b7b91c2c8e3f0519878c82a61a32687f693a64c3c1a222b664b83570ebedd96e8722ba6125f04a8ebb079597394de9de36ca42d828f90c7a5fc74d1ab03be73f7c5ffd332b90517aa6ef8c19aefed182de688cf5f
+Entropy.5 = 75336fb0006f7aad995ae01b3f3ec24cef46d3f7ad07798e52f609ec34b266f1
+Nonce.5 = cb51865817281103b3be2c2bece85487
+EntropyPredictionResistanceA.5 = e979f3a31ba75d6e6e4b357811b4aaf5fc958406721693eeec21e8c9808ceefb
+EntropyPredictionResistanceB.5 = d17a0a6d5664162e7b988c19dbc911b6e3b68e90a1e6a3c9c5a4662d954ef5c5
+Output.5 = 7e13788c362ebb6e6ae794ec50d39c2cf2bd25d8769ee91df5d210b3bae5021801e0d59ee503ea177dc01b3c606daf67a2fc8afa9f06b2d03759e2191d6dd0e916b5d21125322bbe9802259366a43d64f94c5408e62709d806970a83dffc4d78ff86dbcc7540f34dbf026dd308ee28971ee5e88681b342d15dbbbaff92a51e4b40e4c50e0b1e48d153d5d6e950de8a37326ddaf504382e20ffa85bcc91fb3f7f56130ad67250c7a9f1ee5f76cb265d567d448c50eec4f35c222331bf2dba2b00cc660e7015fc1e6a7161a01ccce02b5800cc1516c330e76f33789fb47ee8e13870ed588d145c016c3f73c6b64892b4faa7dea4fe536c5349fdd171019442680c
+Entropy.6 = f6d7401663547661563e5b2da208f1f8a4a0c17b97ddf0d4a4c1a17c23ee8c7d
+Nonce.6 = 00d037839f2d95dde6a96886cd67c9a9
+EntropyPredictionResistanceA.6 = 2fb7fbf77ca088d1e46f2dc386e16fb6f1d178f7c1a3dfe202f05d52ca20fe29
+EntropyPredictionResistanceB.6 = b8084a9d597fd6b0e53f41a13fcefbb8aa5d539c7b09d8e7b8f687b3df92c606
+Output.6 = 4fe6aabcc40e158316e49160ac523c41d4df8cb041e11549dec0a40cc854fe4b160fe38a1cc22b779789ef07012735f457fcd2a5594b344783cf6661d83b046cc403b1feb96cf81b05038dfdb40d2a027ea4ba93caf77f53fdcabc361ce48abba784fd9feb722c477cb9d9651d9db6d088e097a93e1dbaa2c3db1503d65680bd4b47352b04387f9c15a1c3a434e93ecc39647dad810ed96997f107e5131101ce20d4be82cc67d05309373792e15e2974aaa9aa9bc9e681815e07111f1f980fc8ca882478c32fcc3765b8e422a5369dbf36f72390ac8d3b728b8e5deb3d48e9ea85a31a0432b813471e6b02e4a12ed1aee0ab9dbb3c3e66217c45a174f9b4ed3e
+Entropy.7 = 98bd225cfaa81e2111f83b4b3b2dfdf3507fe18aa97100062bcb5a1f665c0910
+Nonce.7 = 02fba3d84e3886048f67bc7f06750a19
+EntropyPredictionResistanceA.7 = a65503d83a48045cd9b128c56c3e474b7d658fc590348bd9c14013fd20d2df32
+EntropyPredictionResistanceB.7 = dbe9f9b73d47e43e58a6ecb5f85f93b3546817134746016f6886f6b63be830e1
+Output.7 = 05cddb6391c5c2de3db999426f31238b5d3e14a35623272d6a72c73947b3521017cef377415dcdf09ededc0d34d9880b9c44f28099f270844e58f9a97f7388df83717ad48972036968e63f281fc0abe53135867cace0e427ccab04e0dfa8108d87a0b7cf7be14ab50e59e4aec8d367f54805c534a9ffa2f3686712caaead514caa30b1ca06c668b5f271ad8fd84909ef122d2fabde7b524d42b925a068d0bb265cbd7c6505a4c2c0bff7d47068b76f350fc85c745d099c78bc73f9ea0796381903e0d3512283b7fad05850e1bdf63b9cd52eebfed270f1622f057f102d6ab19c63ed59cf2cc1e5876257ab03e20e62f3a77761da32a5e1c2f8c95bcc7534ee00
+Entropy.8 = 7a324a646b53f28808f7c44303221ab36324d1c97660f7c333b3baa7537d1e1e
+Nonce.8 = a038b8ca6c159d91d02f3b206eb92757
+EntropyPredictionResistanceA.8 = 0aac85674b59f419af2660cca8eb0ef996bac65dc33c08a946fb2abb9348dd7e
+EntropyPredictionResistanceB.8 = bce4c71cb9de11b8d59aceaee2c9a29b154633df643f3787c2672ea7e789a2b6
+Output.8 = 3c09f50bdc35e0ee8bc033da716f68fb71a68a339e26711e63f564723a70a0b9b4b01ae5422c8ce7cea7be0b35f6bbcbea110afc9c448d85e7a87d43c54ce117dba86d4b95a754c77a4c8ef5fbc11c2525173aef82f11f482611c426887643da6daf51bb3bc462bd5efc68b4b5e7e07c7cd991a2fd8672a8a5d8490a451d8df92057df0bbb8a6063489b84bbb0a75813ffcd498b146f11c5f16580dffd38812e305caf60d133679c2b8c9564aba044ae0192a9a5789c99cf5ec40a3c775d5976391d6adf9e4c77ecb0a8f3169bb3cb7e5f2112e18c44fb7505e7d5c4e6c0f425e8e552f75a340923a3186e49d7df1a3dca3df907115c075d39844548dcbc7655
+Entropy.9 = 59b84cf5a29b45a3f8e0ac384bed20d970f2b6d89661bbe2af90ef073eb061cb
+Nonce.9 = f323a13d0643dcdba902df168ded7b60
+EntropyPredictionResistanceA.9 = 94e18381181d91d3734cfb4e44cd4462de81aae064a9ae9d156bbb14079b78e2
+EntropyPredictionResistanceB.9 = f612c2e0965d15b2563d888e2034d06e55f939ac2345c2638443f83b59152696
+Output.9 = 88ceb600d0c319c5f22e4e91c5a1319fbc752ae314868f1fbc6a4d1c0aa4b5c7054d64924f841d06392294866ce399d9fa2475a4f53f42853b68f9851db002655dc96cc799fd6ee1d4498f005e25f76efb4c0478957de4b26deb3102c602fa08179c8ef26ee29e9c9e896c122e02650dcaf622fff729825aa87026ed8dfa96e9fb1510d9be44123dca5b9521ef9500f6e3832a7897a5e513e971f18726d32848a6452ff7347d5d8df6d401eca2b83c71a1d806a5374bf6e6a98013beecdeeba9b637f23808ebd39fc726061ad3ce44b02f73b2e6e7c558b74bd4a085c445100c627f2b71c54e5a43b7d36c131274c04a0941fd8cb584dff445037f622f4d69c5
+Entropy.10 = 64688640a1d3f610528eabe2948e2eab2b453a8cbbccf58bb02a72b1bb466b82
+Nonce.10 = 77f2c2f829fec66872cc8d6c03280b50
+EntropyPredictionResistanceA.10 = 74136e7f3e123d6fb72786fc29d1b55782b7283285cb53c4185801d2d7333b8c
+EntropyPredictionResistanceB.10 = e76c1c661c1ef65864b8dddce781f5db520c666fe07fcbe4bd5ccacc115fbbdb
+Output.10 = a7dea45bfca9c6fe4ce5650369eee402b747034ce93272ffc44eb715e49e6fff83ce884956ed4eac3c76b5e664403040cce0d5343916a93bbc16933fb451432f14891473c93be2e17813f8119f579bf7207348020b2aeb7cf725a186db21fa9c16c27d63ae28b5d5299f163ce8d28739a1d583579a1c462f0f73ab2b6b0eba5b493c2dbc7d9d6e0819d80868a6b001971e8c205cc3b472ab62cbed1e3a1a0c0a6f95c5694f513654d7a240bb6672eabb745bc60024cdfcd8179fd3d5300b878ec93df4da38e00fd66809bcd8f9be8384cb16aead77de833e90c034ce24b18b096a84bf0281e0462e9e3a43497514b8eb283edde2108d425839aadc9e68ea4728
+Entropy.11 = d77985d85e130fa02ee13b55cc7372c23565a56f588c70154b7d81dbfb8ef66e
+Nonce.11 = e861c781fa258019ef91d101367726ca
+EntropyPredictionResistanceA.11 = 46a60c705e0e3a305ab6a7c5179e6a14c6e7de93e5c95956660ba7357003f08a
+EntropyPredictionResistanceB.11 = 25a42e9bfc38fc882a063586285eebead74a78296c7c3e8112062d7fe1adb232
+Output.11 = 94307b991cc83f919caee64c25db23bd3f456585b6edbd6c8256cbd9d12b8430d0f3be857d42f1437228be13ad5013e4539bef591a818c5efc7644da270857f61373008c614a06a6fd5fb5895f08d5ac4c84b5060498af63459629ad038d2f436cb5efbf258f9d2f1e491ec6d0bc0450c092939b56a489a89649c1ea700fadfcd9c36b8854320013de6c569234f8ca0ab171b25ae93048fe77e72a0730f6b3edc2fe103c82b78698c497db534000db2410c7945cb36da5a451834abd5035b0d4a6938116eb46014368aab7582352e2788691ade1dd337d7610cbc327f3664415c870a022f75d290c83d917c212ae517339d596c3a1cc4a1cc83cc7a1bd94d6b7
+Entropy.12 = ad321095c835f2c49f3abdd0f9117cf8ea30b237dc3f1eff7728fa9b08d4c0fc
+Nonce.12 = 073c82bfae1b5771728917ae78d5e22f
+EntropyPredictionResistanceA.12 = 4989019b13c5f04a420f134d1cfcf1be81408a143e1372a468c1303292f717da
+EntropyPredictionResistanceB.12 = f4f18ccdcb81d8c7ac6562deb4e07a9e146900123f39ef49a91e30e22cdca22c
+Output.12 = be680715dc989f5f1c459695603b2b97644dfe17f305beadf7cd3ff23a523aa61f3074f5c533cf8e88ce74888f95cc5e463de4ccec3aea10498efc0c335692fa648a1d7eb774037b993f7622a43f9fc4c75ef3d1a473c18216746dc7341dc9d78e7431291467af9a8c95d86ff407335226601541da1fc1220b5385d18833f792ee13f11641e2efb56237ae9b7ab9c1a87aa03a442f06cd7a18d8518a029e36e85369c2b52e351d3b435579938a05fee87c44496c4ff044f267f31e6d80f149d54cbbef4cfe5f249a6724c53f0a2082865eec01cb78ddb07667b40ec7391ca77fb48247b31b6dbc15fdefabaa6cc97d0bf8ebd34ef75cc48d5ac47899c89800e1
+Entropy.13 = 67569721ff02c3862cefa68283ecb5b9afbfeb8395ae944c55e5da1b21b6c227
+Nonce.13 = 0f0100b2cf014cef7a2e85dbf2738e97
+EntropyPredictionResistanceA.13 = f8ee97eca692130d6541fa900eeef6b9858497faa2cd47c6874590190da6d5fb
+EntropyPredictionResistanceB.13 = d36d2a1e124a94311c8508b9f70f34b97c32df3947aa4a0bf197b1ab35172233
+Output.13 = 8543aa086777415188ef995fd4bf5ce52776c6574b7b769aa61d1e83a4c3ac4483bf90b492341443d6c92e14fe7114558d1855826e41772eefd54352a38da94293e317e0a05345a567e30e2299aeddc4980b3e797b7c980b822ff625db3ffed1f0acc314c11e2b62972750b0f448cbeeb08b7dcff21761b17fb63fd1655efadbdd6793e27c47588638c03348ad0fbc8b7772b7f7882b66b9cf4947c93443f793de5c2a4131dcbfe982ed2787a5cb0d99ae001707d12cadf5059eb4f373e7b5e4a99a28ff18841f9edaed7558ac0d062589cb3ccecaad4d9d6dc1a7dbcb35aef7a1738c6c66ba04e08f693d28f7499f57bd8b02d97eb3fb36d8bd767eeee07096
+Entropy.14 = b19d6916dd39eab11165ff2066fea53f72488a78eba473a0e141de1d5b13fecd
+Nonce.14 = 79e678b4b108c65f9c38fb2a2e5c29c4
+EntropyPredictionResistanceA.14 = ea9dd450593b6b3c7be76ed2cf8baa1b44794ebef1c1105a445b79aafe471d9f
+EntropyPredictionResistanceB.14 = 9881be7e81282bec46431b505ca8bc5049da52cd4cb075cc818bb79697b739e0
+Output.14 = abf29caa9bcae107ac382204baa2f46ca2742090a3c895e41b345a6cda8660e44000984173f57e79cc7ab869d8d9f7f2d855b171c3007ff9c82f2a5291d509b6584f04346361de9aa373f587b6ce8cc43d589d876c95e813890c26ceae61bbe0b88072cacd0b857d6b33ad9e562c8e1aa1592ff16cf683e81142caf493896fdb325eef5ab6ef3238cc3eb3baea05825e57533ad8cb707b373d2d0a2c048a07bb40a5a68d14d21a796fa97db06331b480bdc39701bf2298fd3405a42f5f6b76b9f40dc8671db632c588ba89210767bc165ce88accc78424216e357cef52a31e7601d3f1cce1b5b5d71c3d622c9f68092f66787b32d241716996b2392376c48909
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 73afadfdf46ac9c528059ec5e4f940f120c19beda8d5b12ae692c1d3b1252675
+Nonce.0 = 4ce532c291c8ce823aeaf923b3be8c43
+AdditionalInputA.0 = 7172619bf78c088c4f0d5b358f63cbcc019620c6ea9ffa31e040ec0d51665989
+EntropyPredictionResistanceA.0 = 8d8b2a82162bce020237440d3445d4ef91793b983202b0f8532be2d78c34469d
+AdditionalInputB.0 = a0670a6df2033cb19b082a3c83fd2eecddd9b9caebf3aed0b781ae9d4ac8bbe2
+EntropyPredictionResistanceB.0 = 2c67fea05495feec67b76615967efa6f6bcde5bcf18285dd3d8f9b97b3463813
+Output.0 = 38ebc242f240569f792379afe393a76698fd07dc05d5c86d00791c1b9d1d79f180c4360fc8f2e5332a961198d7486750671e14d39a2b4852aede2ae9745484ca05d7421191571d334cd714b9433ba026a058cab5619208f2e54f2d48286e49bd0b528d05785beb4ff8953fe875cd2c92277494f2e315ab2790a1cd58f02224387470bd7edb3181d2b587e5c319a262c7806f8b75e59f2857871d8a182ba0366cd3a968023c22582ec7bad2a204de0eba3d24566f213c1d88ca2b2ca8cafd8149193949da885bd744323f31b39956fdea7bccb1d64d3f14afd03e1755962d9df1f2507098455584358e951f7ff8619f1aab96e1481ede5289224053f603a98ae6
+Entropy.1 = cd453c328ae68152e074e18b660f03668cf264eaa4109afb941816f7bf1f73cd
+Nonce.1 = 4043d4692942472482f44e7d6ba5486d
+AdditionalInputA.1 = c6c23cddded140a30079f35cf9e2dda6bb2b277d8a212d2fca1a83b507808e79
+EntropyPredictionResistanceA.1 = beea1cf1de6ba6ea1606cac41a92e34839fb26b5a9bee5f4f475558a5d8f673d
+AdditionalInputB.1 = edb8c8657883a17093ffd355e8145e26f65ce7071ba38c89fc031040996a9705
+EntropyPredictionResistanceB.1 = 838247ab81aaeeb2a72be405c3d24a625df7476b1133b56f6e7aeb184f73eafb
+Output.1 = 635a7dbb7ff1dc4a90ce91ba13d79e09819ec7387c277c91946b59fad4bf5d606fa75cf03b6904c60f9a70697e662aeeebc7ba2e6e94632c4c5f3e1686e6e9497945c8889243719ad066847dc11efac141e58ac29d6d2779f702cd1d5fd0d82d232a004dfdc13c09147a77d71774761ab4e760a9d2714e9ffc52402633c8c3020b7b9822b177976f21b7e98cccea4a7eebe1cf9a604bdfa36f19e44cf4308172258576c3615cc26418e86a7269e0f88af7f15a114c5b8c6f96b8be098572aec4129fac371736b2fa0a88f1b5480c7c8657dd515417edbcd902b3d3e9f7e10df45160a37284933dac5fb105da145ff13f677d99c494e279b0b1990234fb8ed9d3
+Entropy.2 = 3c4fed3a265818f6a323b9d52c04a92698223f3136c77428b29e1cd6fddc7e4d
+Nonce.2 = a48d9115c5ad18a4182df480eddd529f
+AdditionalInputA.2 = 7271afbed1b1f2be5643c5bdf0b6218247a6128bfbe2ff4d745a926a3f35d0fe
+EntropyPredictionResistanceA.2 = 35e2bd1908dfd05964cc3fefe53c38615f04ca5e12c06872a695971f9144f6b9
+AdditionalInputB.2 = 00022d8acec09266a84673d056e7b235f0608d15989ddfd7059647522cf3c3e4
+EntropyPredictionResistanceB.2 = 7bd32c620083a379d4f56e820105c5f5b0f98539936d05d57f6afdc191cce7f4
+Output.2 = 610901399f45ef5a1b747c57b73706509f569e3a2dc84c6603f403cd49e99e288c9ab77d00e974eea625435dd126e9e783566a71396b1bf6364b36305d1986157eb59fd231b6aae35190347e1560f91bb388823504e563cd69f84535559a446ef83ae625cbd1c5a4d114ff394d407f19c8f9f906290dcd03a7b47091ad07f3b190b83de5787dff47cc54a3d53dd31f756eb5de9f7c965d70176a8ee71fe869e960ad33cc492e9568e5748f9ca869ff143252f4c9ec8a0bf937f138f7ad268abeed27e1d80bed0cb7b74411989b313043b1c65c8847cc3dd6d48509852d33903253ceb074dbc3d124749d8a8e41d27f96f7fbc9908d4ecbf04f60187f1a42c33c
+Entropy.3 = 229b3318cb25189e12ce9ef25acd08bf56c631c6058daae6f377d58f7574576a
+Nonce.3 = 4c0b7c634e11da5ccc02be824e6effb8
+AdditionalInputA.3 = f8f98c65ba1f619d376d41d1dd480d4a0446de56e0b3dd007ef7e1cc2bb98def
+EntropyPredictionResistanceA.3 = ebc0d5403d79bb30572be47a5ef88fe35a0421dcf9547437cd3a563b6be7a158
+AdditionalInputB.3 = b3bed7c4c2e1a762209b1fd2ce9ddda8fe47eb70225e60d5c5887a61bdef0009
+EntropyPredictionResistanceB.3 = a7f601f75347509a12dba8d7f2abc7afdf89c43fc5538318654fbc90c3f51c5a
+Output.3 = 2467978b293afe33a96a7291286eeae2b1c8b5753ed4d45b3d5be906cf30a6051095cbca79d2871334e049b729068924a036ea914a5244fc71005385ed6ad7c7cdaabc267a8ef0074b14189763b5de2115d30da70eb815262aa511e9859b9d1cf2810c910bce18d179a0308fed6f6f911cde79031ead39f499ef85f7525140f1c497fabd879ae130f73fbbfe8c3fa749df48e484cc2fc313d234b5d0b49690988421611206059b42f6d72b0e5fde6bc11291b8533a9aa2c521e54749bc1929b71ff05dfc8f1716c9fb13cdad16b35d194a48ae377625300df479d3facd20c3b8fdf18b88b57753065e542f147248064278611e99ab92b33c68aabc4da08a49bf
+Entropy.4 = 4cfbfda3fe8ae7ffdd8450a52c78388a6c9d93c6e3ab537c91dffe23b5693158
+Nonce.4 = b7919e875d9ed6827a33d5ec5bdcf061
+AdditionalInputA.4 = 9d155d6754ddcebaa3dd28ba27946ce3e22de29dc1db8359378390295e5aa287
+EntropyPredictionResistanceA.4 = c311aee36953d13c16f0e50f455705a9ab7a436b039551187a0f42e5f90b40cb
+AdditionalInputB.4 = ec634fc86bfb45f49a1197a70875d7addeb257f1245375aa1f01b3bc359ed73b
+EntropyPredictionResistanceB.4 = d44e98cd5295550cc46e33be6f073a9e6c02ace6b0f896f9ec56ab7e8be7a07b
+Output.4 = 46f5a6402ea9e8a008925c8f5540c4366c599166baae8ac762da101550352f35ed9d34f82e7e2ce042cd3569be557e02aa87163d1e453904c5fcc998fa64c8e18fde61a8e54c21ad4da060943aa79de14317276414e71a8c132053c4dd35da0da1fbf7f0cffd264d887c8ae4f358afe7e8a1bec60fe7b4696a6b1c00fbb46012937b715ba8eb173e09c1316cc361819b24f7284f983b6824c39eddf3d0ba58e82a2c603d854cadc41d5b12af0a67b367f411c5c91820e414e30b3d2cfde6876a3d144a900eb2dcfcb750bdcf09c0a01db79aabf53e7f045b9c824c8662283bd4376c7179096c5c9c784d6c3b998c4d11b7ebc01a4a562852b9b82bd313fae0aa
+Entropy.5 = 3351a083c1f6033be5cc879eaf34e25542ebabb2671b65f726e76ed711ae073e
+Nonce.5 = 9bd7ef6d7888d6fc31e51dc7f60e8b07
+AdditionalInputA.5 = 9497a1c85796846de8d8b70d66d369ef59bd91203660d6df2935000e8bfcfe71
+EntropyPredictionResistanceA.5 = cc6fe94ea0f22cea1ad54ffad09700596f6320d980488ad48527f4e00937b6f7
+AdditionalInputB.5 = 8a681d6cbe1cda5e0f9eeaed12fdac75b7bb33d28d6855d498b6c61cd7ebca57
+EntropyPredictionResistanceB.5 = 36ebf1b9166e20c5b812c8b85a2a29d91ebb021b19d2374ed4e2895d1518e6cf
+Output.5 = 5148fcd7c01eed1da1d8f68a706268b5028e4f3435ac5bcef9231cc81c6b6823156ff7432e51651d0d02d92e22297dfd12a9d507dd3137ca8ef216f969ab67f54c8d5fd5c22c9154b6caba4a147ce4aa20647e2bcdacb727cb0810e4106494db0e25e7e6f939d29129b0c5cf47adb35629006e6f5c7c1946c1e647d9aecac7fcc488a1c868378e014fc68afb684e1e043f53fda4431ff031107cc23833975bdac060783f9cdbe96ca164ed75c3280ff355e25e165eb36cdd4d651cdbec053a38b6406c26ab6f16cd0ffe1e8e5a017e25c5c93fc7ba11385164337d54123ba03e65c261e8379f2ab24aa0d27f57b9d7e0fa825f06986a4fb9b9973adb87914cc6
+Entropy.6 = 3439b57a2d19db8b7e10ff9a34ac1d29b8d789b05f4cd2bcb0376c6e184cfdc6
+Nonce.6 = 95c6e26a0b15b11a685438f48dbd7433
+AdditionalInputA.6 = dd1602f833057b77a8c763ec5aa302326920bc2dda46b4b83b3600673c1f4627
+EntropyPredictionResistanceA.6 = d63119fffb5e317d97a5b3e23fa6228221caadd163b66e36e41d1df89473ad3a
+AdditionalInputB.6 = e2328a109a4546f4311bbe3decb53b3a1028984ae73ef8849bf682ec29c9b5af
+EntropyPredictionResistanceB.6 = 114d25c8093128e2219a7f2206621b99ebe673bbcaa9a369aad3339927773b57
+Output.6 = e02326b477271366128cff2c88b703814c52547936ba90e776e383620eaa6f2a0aae1cbc6bf9fe8c395c088edf27ed3a3ee6f242dd6a6c3deeb19fbd7ab3e7d26b8c6f42f86803b885c733aafbd1c59e77e43277e244c0e9afb0629af510d03f6eb547bb0d455163d14beca53afb4e756b82ab5610502c1d74406222142f1cc1a41b4188d7994397a7ee7195482f22cfd997a611816e331cc62387c8d28177ea6727fc773c16278194b419f7e99fff2593bb0e6644ad653b63de83b244fcf531eb6db5716e60dc260510920754504146e4c727aa29b5659aa97a3ec63d07f9387277d487e4b855a6ec053289af6e17284a6deaefbd526dc3a379e5ef4434c698
+Entropy.7 = f7c4995379079e036b9b10db6f163db23bce7399fa8b6268099fa5f2795b67ef
+Nonce.7 = 06ec674197c73fe47eaf0c4986dd3566
+AdditionalInputA.7 = 23ec7d6ba9a666ab49df45eeac006ad1f4f0e2aa4da2061d0429b510ea43d93d
+EntropyPredictionResistanceA.7 = 055eb14934bc8d5272baa751267c1dab1d52da6204ace6c869bef56eac006abe
+AdditionalInputB.7 = 299253ffb0481d2a1dc2ccfa666123a3bda652666a77b52a32e4cf92a65f0d61
+EntropyPredictionResistanceB.7 = 8eed565693e1854619266d400cd3f70222b6c671120173fe918d229d5e566886
+Output.7 = 4e4573833f4ee5dcfc4fb057e3ff8a7cd621b1c7a51fa4db8d02e6b62462ea9ab62414cfc3262569192a5960f8c3ab164ef2974ee03815281159ee50272730881d997a28ea2f9bbb2d7f2eea719416b80c73598e524f5fd9b41d17f386a30c194e2788278a61fe3f5633395e28a8f142e897d3b6cf34c00fc84a4407e0816518b218eb08a9d161981c84bfd3e47f3ba36f54587d62060e0fca65324a332a9aba7cc1d0e842bdbcc8b1bc57432f9d70e6475959da2fff2590438bd7b4faf19ebbaab175655189050781b7c7a27e9867073e1efe45b47ba3f86414229f5d2cc08a1d801f731c3099b747c68c1e6ca863a82265d3b2819cb0d2d4e80078ee7584e5
+Entropy.8 = 376829aa929aa4fcad37b41f3a23bec28386329ca689317c49bdc2beccd5066b
+Nonce.8 = 92e763dbe8a80fa1a1d21c38130fd999
+AdditionalInputA.8 = f14c07e0ca886373c563ca544c3ed069de697c538afaf009bbfbd935995955f6
+EntropyPredictionResistanceA.8 = df05446bbf128bf23834d8c7cf89ceb5ee6b21124eb6d4966f0f5cdfa59ef585
+AdditionalInputB.8 = 4d71578fb5a3211d3bdda82396507fe5193d21a2f70e6c2b03828fff53f5f6a4
+EntropyPredictionResistanceB.8 = 92dd2deda2f611b6c1ac8ea1b1dfb3a51dc5760c3a7e82fee6f09cc2b7a74d7a
+Output.8 = f6df98f9c4f7dc64208aa5804be843ae9a989bab73f6a36b603d1549ba0a58cb6511bf5776a786141e48305856b1db6f641975d0cb5102b51b539496438cf4cb905738c919e1b06092f1af89382fcab4e365688adddf02fc7ff640e111d5f3bb2c06da91a77242e1055c0b56f17abe0807b18f6a93f613899d37762bab607c05467dc89e58b21ac50bc01fa52d1e649bf74841b9643adb4699ec6ec0bb4d297c138fcec1f4249b9f9ab60c2743ab18ea5e202114260edff93f4148ca772f94572398bb387b78ccf50d6200f7369bdec44ba6403ae363f3b710d464b6f9389359030b61b2b6261addf488483e0c5e4cf854d9b601a1b1aada803af8feeca913df
+Entropy.9 = 981da820fa53e7184a1a214a114a943953eedb39e5bf2c3aa7028aafe57e482b
+Nonce.9 = f4c0dbdf862d55afbd0f0a97f6c61204
+AdditionalInputA.9 = 2f4d6b4724cb715b0d553ae1ca6f3055d7c398c1c031a3a69946f099116d13f6
+EntropyPredictionResistanceA.9 = 711b46a8f5d1a69089add789f39cc3d6dc7fd19af6a630f03b1496d84aa83f1e
+AdditionalInputB.9 = 76c1d679786f1752bcde1108b9977311f4af9e3d5f5fb9eb52565d0eff90b4f0
+EntropyPredictionResistanceB.9 = b24c0d354407fa9664ee5f4c8de4ea75f05a17621aa9dc58ef38cdb9184d24b1
+Output.9 = a5b531a51e8118f33b20edc76adcc36fb0ba8e7f752518b84ce712479ce749ea893fd31368b10dd6832f9f2bdbae488dd9668a80c8091dde61e58336a8160fd7a167aae7a1d0f0af077f600b5ea21e64847901ba658fe40f20083907b25b30cad314cbd3f194f8be407359b94be74b34e2b4e2ce7371c12c28c7c7bf0032c03371a6247b60a113d56cf938d1e4eef85785fea90ed45a1b50fa40228fb23f154175fb0d436ad726306659e2e9b6a816e9f0716781a774b2c3386812e872fea9192fd9fe148bfd7a987f74d1c7e7b60a00bde3e4ab53d3fba5df0e2cb7a3cc6bd462e43b93871b3e238634174322a88078cf386fb210aa4df2c69ced8a4f72b2d1
+Entropy.10 = 909f30f7186bfbae0615a701e3fc362fc6e8ce42162cd16fed11ecff70760d7d
+Nonce.10 = 0679e0b79fec33f83bd722f2bca339e7
+AdditionalInputA.10 = 1fcffb9b047f2e904899eb6aa815b2eb51ed696db2478118c4225b7b308ce069
+EntropyPredictionResistanceA.10 = 91e5db7af16fa629c84d1f4778d1b1dc24c9813711507349c26319e18084755c
+AdditionalInputB.10 = becf0c41d3930f152260e0e6f06355bd0c1701b81e699fff7d8e5a750d57b980
+EntropyPredictionResistanceB.10 = c392c9c2f2241406ebef3985a4ccb46b2d7c5f8b79321163bdfc3b5e21eadc89
+Output.10 = 405cb18185e295e35bb8f758b0392d8e323555529b84e1dd0823586dc35f25e27c5a26da87ca57b1544d04b94cca967df7d7d89e00d3c919960e486e6f4cec6eac1951064efb3311e4be348558bb693438753460c65ace14479fcc44915dc6b223900fc84add04c48c57b2e9aa13c69a2cf2b0bdd2b2cc70c49a32e5fa0606fb1523b1da894dd7f6973050471a726fab3ba99de3033ea5a0c21e687a5ec9d66ca8460d74e5b1b99143ddfd4af6d95f6683b103133caae77649f00652f1e78295134ee42cf35bceb7d52f6cacb41effbb2ed661d8f89bab51a90c70862ee5fd5d3c6060ba0b5a5897f796f4107efb08e5d82501692401732abf5237e0585c9483
+Entropy.11 = 9586ebe27de089218433143fadc74eec6ef7c8d077536f7ecb62d412ef0e1634
+Nonce.11 = 37f6d84e8bc6e97ec02097815a99c338
+AdditionalInputA.11 = 65d08da7a1fc390f2400efb57520e16da932bbd328a236163c40a540de585488
+EntropyPredictionResistanceA.11 = c8f3434b286ef26b1c234ebf1bb1d216b14b4c3b3df48ac3283b3ec9e50c9124
+AdditionalInputB.11 = a1ffc217e71d1f1047a9657d61ffad559da3ebb75d5af74f3a1ca9fc5b964f76
+EntropyPredictionResistanceB.11 = a717eb398941ec0801f95ba6108bd9f89d9fbd72d6248ae50961354280d92df3
+Output.11 = 0e2958169b413044917124f867d8fd4b865587505d4a18040012319dbd472688bd90a28706c56bd1549271b1237a5cbff1844b8e1947ab97d0b1d33bec5ea32ba3bbb5b0986d95b8aebfeaa80b0a132ccefe9013cee4fe84597cd2c3deec46e5c4419ce2060433cfb696e34c6f3d6298f501a56dfd85ab8a9ae8163e5d09c707cd69a3db0a1ef4a1cbd9a75396f7face5eae9d63875898107e3043cdff7f6a7fed48362792b7a43771f06d97085525f5f38aaf38d5b668dbf84276c258029cea7435aa107334e69ecd50ddddfc8cf592373fdd7cc28eb73e9fd2d2d541d0d88f9fa1bb62ede17667f4c32cc9ae2038fb7763b922c34d70d5805d3896bf8319cd
+Entropy.12 = 90b824b7aa16b4954d99c3fded669a83d67460ca2fa861468f0ff6e8ef61aac7
+Nonce.12 = eff878ac34c2bc59a14dac9659cb558b
+AdditionalInputA.12 = a76ba2ac232a282b3829d9442587fcff4693350232e976439b5b9dcbc1b704c9
+EntropyPredictionResistanceA.12 = 11989f8e34d1f27c68ccd71f45f7a848c94ced0b18c175c7e1eb50fe0204cf63
+AdditionalInputB.12 = 06eada44600f5d5eeac046e16cf576d59c1bbe6c608d7684453f353a644cd031
+EntropyPredictionResistanceB.12 = 0e39ba3deddeae5de4f2c3d254d6d9a747f486e20106f5a6d7b05a67fe474e57
+Output.12 = c6d51f9aa217655be89a7b85241dac0cf4f59d983303c3c5e7c279cedf298072fa1cd70a2180c3b3a58f553d6d7dfdd01f995401993ed6f2cc3778f780262f93755c9f8d54d94e702dd6df82a737d57cb5784f035e7b2983e6253d0b2c26e4dc7182d5d06628bf7ff8be110f28b274bf2b9cdbc14d16fa1c9f2fa020b0470bb7744d04332c23bb198d2d7f98f15fdab1ae8bf310dc3b90d132d722ab183f806cdb324c503898f91d9ce12f8dd1942867b1a169089cf24f1508079db6184ab4fbc80292c439f7fc2230c22bcf022aa8ef29f23fd3cb8eff8fd9f033b5620d5845d4ec5d0c8f5d4f7d02dcd2e9feb143fa62885bf140aacc7a3160508ebae8183b
+Entropy.13 = 0ad0edb50bccfc0fb68b5e7b5edf8ca338e5457cfe44af3fb5d683db120c6a09
+Nonce.13 = b9907dccf135c5cd0a97200abe245e14
+AdditionalInputA.13 = f9880c0023486c8c8dcac2b40100a6e2bd78b9289e20a72f4cbf46fc156619f6
+EntropyPredictionResistanceA.13 = 4fa70365cdb06dddd7b59a557831ec9c3ac14b3de791421cbaacc609bb7659c4
+AdditionalInputB.13 = f5bf191309d298ce4a39daa668d8c99935df9ae31f5bd1fbe77a3682858d5c0c
+EntropyPredictionResistanceB.13 = e178a7158d7651369655f9c570674fee2c5aed961f3c6baa0a092363b388add5
+Output.13 = febefa9a23eb4f236d1321d9abedbe0bda5de6fb8ae4259512dbe3f4df7e006e571d8b55db6a438de63917a2e476435ede5af77630241e7a213005f205d3857348b8282e790972e4a5983009e052cbc6bfd00c08306d346c351f32a7c01e5142cc65d5e951fd9186a098f6f22a5e4d5abd80982d1da86c39b1529e36d2341e18859518a425cbc198e9dba895591a1ae395b148f033e1375903fdcb478e8438e0622544d6cd990e5a4633698dee50a623a2b7d8596ccd647db9be1c2e6f383e5316081f2c076dcc98483279e87594ddca5ec4ef4f9f52439571f671087bba02708af107b771cf59bdd38f4f5b6c36aae8112f85a9b2828e048988bcec68098660
+Entropy.14 = 0425754d1610c14f6be928608ea3ce731ae818b200c54341aeb178f69e145fc6
+Nonce.14 = bd38473928da0d3638b0625d06f6b94f
+AdditionalInputA.14 = f746e854338d81d89e81ba3655eac565866b56b2faccdc50a36156fe2faa661b
+EntropyPredictionResistanceA.14 = a009d920238b591c97ef48bdac9021fd85f19ce809a9627183e3b621036fd7e3
+AdditionalInputB.14 = 06e81c2ff61b7c7e51f5238babc38887bc10d5fecd86b7a6d7c48baf4aa5adcf
+EntropyPredictionResistanceB.14 = bfe1dcf51b07ad45ea924e2d933f15c1172432b359ad72149e51e86e56ba7768
+Output.14 = cf9bdaaa8be06039de98833ca92947aee84ab5a43b71a90855b2bcde9b6e69255a5a5e24c1bc8ade2b6338babac8fc0b90674bb700080951425ce67c51636f35025171f584f62ca49933f11883c9fec666305d88ad2d359ac2e0f2472e368332da2f5a15f857c8e8bc7b4897f7e12187ad9395a47a9f271541537ae1bb217f88f9b689933e5c6fcbbc2c39f5924862a4a68e068d06a485f2d80583eb6606f177f9ca7618e0ec018596e0b98376c95fc159fd68aff1a0ef3514529d4a717b8efb7b4764d11c0619ffb0b20106a5a541cfd4e68c002b99bae85f0e99627c91b3dc7f27c2415f7ceed21c542af170bb1398338041c181da40dc95bb0deec6decb48
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = d7d2a9a0b97f4564e05de6db7bf170d2a726e0f5eb2970839c4a0c686ef372fa
+Nonce.0 = aa5d8afc07d7e9a44904fe9f7359d8b6
+PersonalisationString.0 = db994880895242ced06eb29157756b25052257bd49ca08c7208d51e7b0ddeeb7
+EntropyPredictionResistanceA.0 = 205c7ce06021f5dd60656247503694960c78aa5e3b3f5008d48c6a264bb94e1c
+EntropyPredictionResistanceB.0 = 2950f734611e3e10291cdc0199ab9000a9c2eb74081b3c2cb4461ad6406a38e7
+Output.0 = 6a45639360130d0a679f9addcbf6f46b9945b3b1e5a72eb175144e62786dbcbc8073cc2be8cac421b9576ec496452ecc1a611b1e5ac41500c4213404a2311247c5e828738a8cb55f67b97f39d05e36eb29871e3d709f3bc7c72567e776ae736b63c06f5b57c1127e305387b115f117e302727d042c2c0979b70e2a0674ace2922bcc2839c1a75044f740790b62b078bc3cb056a34a9ad7271e02a1fa86ec85226ecbb9b126c4a9b3b0b0f4ac6915c641af28b34d7b7da6bbf4ce280671c52eb919100e198a3feed6b4fd48c01d836c363904d640e475e0d0e6c6ce5f25d0b174c561ecbbae201bac53d8499706d83da43c268bc2c57e2405ed016d6198964c60
+Entropy.1 = 82037584f80266988ef6d15fa6003478c20d33265530c1767e3c23f0a0a95d61
+Nonce.1 = c9262c26dbd37083066bacce5f93dc86
+PersonalisationString.1 = 52a6cc9fe891945e5039e95271ccc44ba9ab57f62086837ee64409d0fcaf1973
+EntropyPredictionResistanceA.1 = e2cb95521fa6dcc9e4d01c469c4a3fee33579c21058975dd91f9043d5ddb154f
+EntropyPredictionResistanceB.1 = 5390c4ca2c813938a8270b954a7c7197ec382f02c50dd19598017d2abd1e45ec
+Output.1 = c60f3bca5d6b1130c6fba93e3da9b81dd763828caa5ce81fa528e1326b675585bcec1b4284d9ecd46343000c1e2d6ea06f2d95f483ffea1902fa3935bea0e9adc40e85dfd1b59a597f2c498068af0ef4c15b51d535e4ed1de28b1b1250963dc00a70e199b48d8d7921bf6cbaf268e801eb241bf659dd38643f39de8b9e0710c22eb45780036ed3a86fd4b9c745d26e2d3a5b7e87ef6ac54d8d4f9d7d01412d940299fa1979716de0ebd7b26bb6d8ba4217dc4a660ee24a683440a12b00ac310b1acc6481d42656ad0b08eebe4883db71a6c64603e07f402829c2677663ec68fe1e7620b6fed23b7cf2da0f09773b85db63221fbc6550a7182d7b9d8b72ef1ad1
+Entropy.2 = 5aebe22736577e69c5027cbd1dcc95146f8dccadf961020cae23562d70e9f015
+Nonce.2 = 5bfced0ce2053114972614a45932eed8
+PersonalisationString.2 = 3422191ee68de00c779434aba239e3cd7ad535c13d118bb226e1e013ea6e9511
+EntropyPredictionResistanceA.2 = a6b4f4e746d8d9e8b25cc9d9fa67ee0b15cc5b3e3a2e4371a448c9f6bcffacb8
+EntropyPredictionResistanceB.2 = a0a8f2c05e8a3a0abfd5d803a77a80fba75ff12cc0649af9bcb94fa5ae2edd2a
+Output.2 = 6bbaefdc1aa307ad401b6040da2036d6beb5c53bab45d72f4c679bc88c911fd2754a09f2f4b4ff37e7fe3cbd9cd788ea89436bf78817fcb3a6472198b675c837624de8525dedb7a3b7901faf8dd09db1216f55205e3719d31103379abac3a0806fcad0474b9bddd81e3fec33488893ead828e08291b0fbb37a12b74347d35131f1bd51aa4e4873096b1a35ee3db7b027fc5654e5a0352c22ee35d70f65b39a5b8f4a206970143d55f0e538fe28114fe3963cff7331e59dd25c1676bcea40c7074073a95b9cb044e114456079594d5c570da4e948bc35be44a524d79bf4c8155720418b8e7ad60990bebf67ec5fc083dff0fadd3e94ba110de23e8ba699c81548
+Entropy.3 = f5340f1fea08877edb309b9b43228f11dfca26f340fa433f0b18eb9e6e07ccbe
+Nonce.3 = 96f7a1d745a9b2910e21bc9522a989db
+PersonalisationString.3 = 98f5b7af38c1fbac43fa9cb358bec11923d103720a73591de2c6ed245e86e028
+EntropyPredictionResistanceA.3 = b2db642c5e4b2d59ffeed6c9e667b378588849338b385625f03a226389081858
+EntropyPredictionResistanceB.3 = e86a222876f18a0d7ff69d0fede620a83caf254eb9376dac8ef99837dc491dd4
+Output.3 = 5293ce6891b5641a33199c0a52c2b5ac46b261ed311d15a6eaa8df6478b217aeec221d488af74a347ac9a14d51e07a239c2a52d2db6d75dcd901452fa3b3403a15c449c2f1f9770501fe10884ddc3ef6db2d89ead176dd9d240446b5eaef3737666750f56dcc4370720419136b0e6268efa538c7468f6b21699d68fbca51a3c941df46fe9564d395c54d829a681864837fb2b6eeecc994478210317d5908886f6056293d53501a726cf4e786c6294381fc4af6e1109186759ec90999d8a21ab09053938fb545692ac03c776803868134c3e4f7ed87c9284cf16a7651458d7e68b625272687944e2e6c7ccb4fe8e003abbae93f98f694a8385a295c336b5a404f
+Entropy.4 = 82738d1234a9393fab94ab99b841371f7046c6852bcdfce1b2d56825f5c58786
+Nonce.4 = e599005a8a79a30d89a4251d3a797cab
+PersonalisationString.4 = 3fa319b90a1038b544916123534aa5cb10f4da16cb12c3e00bc1306423742bad
+EntropyPredictionResistanceA.4 = 8b3f30950b9a15d686f1259a11a516d399551928cd3cb5734c7839847bd584c3
+EntropyPredictionResistanceB.4 = 64b95b8feb390567cb2ec23746543ace1371a089ed97f9968e83e75636203574
+Output.4 = 9bba6c3cef2838d115f1030925a01db7881df7e7b5d461a5f8dfa2a40795322df746a25ebbeff272d064aca9ae284b50b6f93fa566ea519e712c82f5ceb481f2ff873e73043352c7647238fe339336cd7aa3765882429a09293267613e29bcce17535efd1cbdbe5e40bb21bdde402e6ba7d554b30635d05f581dd1bfef0565c3f5dedc8210b5a01a10b58130442e3f8eb11b9a40e599ec8d5e1089ef1f5e6587b4120d1fc39576282c80c825e6e9507a0ceb3d0460832ffa079fb8492a3518f27f09c0bbf06f6ec00d80e145b5e848b688418419cec8ae52cda766da84a856f94a4bfbec26a97e2810fb1dec3b48f285fa4b0e2794fcd28455bb178b3d55340e
+Entropy.5 = e554287587131cc3297b05c8adab4610cc3d1634eab65119d8c546d13e996159
+Nonce.5 = 4f9e6cc618ea0d782547d54aae466fa2
+PersonalisationString.5 = 2a5741cd93041be381636c081f44a9410647961ce5265211ba69e09beb6e5cd3
+EntropyPredictionResistanceA.5 = 43c2265aae6d575f8fe22edcf71b3e77fd9f9ebb11c9e2e81c70abfb193239ad
+EntropyPredictionResistanceB.5 = b73e4fd14c93bd84bf79c328a86a433427b305a6425dd5711d83006dd2db95d6
+Output.5 = ab0f85e64e334bbc741b064a31aa9cda9049dee0d6ea68d1483a60e0f48999527042b7994d7a7131423bbd5a6cabb35b9c78628034fe31e5cc2b8ea2b94c91a488fd34fd344bdc862db00e234677fd0fb5155ac892c304361e0f5453cd2598115cff6a3341200ad7469fc5ea1eddbd85511cf20b842c997dbdf95e4841aaf0d365080a24faa003fba9226bbbf609086a6a378e5a5c2682ffd93234dafa69c2594cb53e77d04ba80367ee5dc92cc606fdf102d265d52a83511e2cc1d166f3b84586b2fb01f8c7ed39a344a40ff884e6a3f97f9474977b74318d88a6c70b8cb7d2489e655189fc97cf1384cf3927f608a1f451c77060f4309ff913f89d21398917
+Entropy.6 = ee071e3f09552a53b8bd98d9e4b4b460577bae8629ca6e8461111a1ec08d5188
+Nonce.6 = 654042148dfedabc409caeb5a03b26e4
+PersonalisationString.6 = fdbdc11a4f71667bd1561e87ee34d925b13d1e79967fcecee8b2656f04d6d379
+EntropyPredictionResistanceA.6 = 22113d79729e75ccbe2466ae8197cf8ed14dd2a9382596da6daee3314b12ba42
+EntropyPredictionResistanceB.6 = cd9ed90aafb911598d1863c9a72625d0ba9d711d1fd3dc462516a6b6286644dc
+Output.6 = acf342f6537c1c3a8f050359730c185e2beaaba5686d2ffc0101e3eb2b153cc80ed5e8404bc849e330e980c0c2ee5df6e630b0d2e28ea50f9f8c06acc0c880304e321ed7205e673e4bb44ccf12ee27bc6f168b636d4297d53462db1c4816ac5ad684e532f35a21ccc6226dc6481d649158e75a6eb012eb95ff4b460b41f8ee1335fcc43f0cb9b5ee76a471283ffe0880e5cfa2ac200b18149712aa10b76fe3850dec22ef4639beeed69f01a4c25ce6110a2eb0a69c479c97a6ff2be4adf3c725511f932f86419ffffd0306bcba149390e1d30679c4d70d15637665419d17e508c0509bc4a1e73448c29df6944c00ce8e32ca8964418739734e8ba0aa4de20585
+Entropy.7 = e0bc8c0b53acd8cf5e4c87ad24455bc34d456367bd2e71674d5ac59d0901a07a
+Nonce.7 = bb52c4f264b0607bb8f1ac0efa4f9749
+PersonalisationString.7 = bc98fdca1133a21a2b4435105b1f96be16333f5ecc6618c54d28aab599b79549
+EntropyPredictionResistanceA.7 = 47bad42b482868d84208f064fa27f465865b910d8e536f011097bc0cfea07a93
+EntropyPredictionResistanceB.7 = 4ae5023ac7098985c4e1e2d173bc835f7f6fca3200e38482a36c871386ff9b0d
+Output.7 = ec616993a60d7971858ab2ecbf86f613ad0d9edfaed88645565159ded90cbdcaeca3dec081f55857df77a3724f34e797729493e995594de81bd1d14f55fc76ff1c99e86f4bab5b01cc849180bc0721bcd7a1c694a523baaed436949882daefdb9f555ba163bc01780831c06fdaff5bcd58c61c08b39d051da943a1a3f831808ae982e3bddf40cdd47d580d3be6603c7818614eb0cbf303c6e6f7b52183e03e42b57153e9e0644c5ccd1018e242fb384d8327475b6c51c32b3dca5f32069539631747757301051a0eb4c2e4bfe6576ace08efc5b4ad888a4b8137797cc74625b847a5b6fe515ce186fbfe7a68ee1dd5796e7aa94e78a85c5bd46953d8c4fc0ea7
+Entropy.8 = 9c61a730a0ab38830f36a44181988afa24fa5de5f298db058fb4a3443d3b7141
+Nonce.8 = 2ebe35851a12f942b7fc379ca1e14c63
+PersonalisationString.8 = a60b8962b18d686ea141e0f4f01572a25b69acf19740bde9588ea63a11e904ba
+EntropyPredictionResistanceA.8 = 19cb485e125dde2482c5632976a2a9c11221a9fb6e65bad990a5b77b55b2b862
+EntropyPredictionResistanceB.8 = 3a5509cd919819e7f8adb23a99b27c2d05fb6a3fb3936d5fbfd44cf2b24a7a87
+Output.8 = bcad32168d8bec01482534ef7dcf27ea111d6b2a11311572e09bc2cdb376f30157ed19b90baf8e4e3c61e6f8dcc05839fb1b3f1a723c3ba9dd1c7cd49463278a6b2190dde8ee03242d1be9a40b570dd4c30437f0b15798874ac940dda5bed2c93323f1e79d54ae9bc86d82601987f048976a557c6173f9d3eb16649bf0044947206f3958af2cda743fc40416e645b9596b1ef4e7060c690d75efb4acad24976869627c20993d89359d39cb3a97799f9c9d37dd79d212c690cb148d2b3006cab6d43e798aae2a35e8094a21d632bb05a89ab1b6853f27b7e064041f140870a6bd9513bae4c18e791e2d8f1b3c7bcfbf82d28c9d6cd8ae224034c306e51d362e9e
+Entropy.9 = e3d186a9a4d9530906c58f9d1f3b415d1b60e2f12ca34a428d16fde09c700dc5
+Nonce.9 = ea9d104a92831936136691232ef64c88
+PersonalisationString.9 = c33655a0e2973ba13785fe4edfb75749d84d818752f7658014448b7719982726
+EntropyPredictionResistanceA.9 = 7b71383be1523478c67387441c67fd7761e9f75fa0636e5a3caa845219f3582b
+EntropyPredictionResistanceB.9 = ddbd0017b9b95984cea6a3ddbeb0820f4f55ff15e22c00e8db7dd8fbea8f6526
+Output.9 = e002203e9dcb191c5c0c3ca2e143e689ca9925337ae04c29547a56d4144b2657f826742c2af60a2ef56b4f76e68ecd423ca04eb79e92473c2b2096072918a2390b5e1ef596ed6a4302c181b03257f9defacd58796e10b5601ba9a1be767440ac0aadd4f647bbd81a084bbd8bed5a0091892bafba61259a46cea95f7be6ac76492a52957eb62e0c96f5dc74dc3d949e74310be664cc21b9c76d39101b76b7130f2cdf444e07bdfca000819dfefc2eedf897b1de0ab92e3d04f6dbe9438c71115e5d14fb663d712027be4c1348cc3c5c30bf8dc0f7f5a2456159a542e58aed5d10affdfed5b6eae77f3af607354ddfc4f1d7afed90463486f60dd9fbf10b32f6bb
+Entropy.10 = 38eccee965505ba5136a8ab868ed1e741d343ad713075233bfebe196fcef6f40
+Nonce.10 = 57a21d8b2d6c68abdf52633d54d9609e
+PersonalisationString.10 = 7bf2914afa8ff9c3b384cb495d0a08bf7d8f0b7198df96db7371dfe987b2b73e
+EntropyPredictionResistanceA.10 = 87542efa8f4b46f40a4e60a2dbcf3338138d46c1e14d6f752954a8fb992fb026
+EntropyPredictionResistanceB.10 = 0ca8890300556ca7092a7661b65fbbbf0c56e2d49875528aed1ebb0133f13c55
+Output.10 = 830a9f61e8af4f322a46f3e75d475f9f6d076713ab98b2b9d1196e8fea098bb7a840ca4d7f32a850cbd7417297211fc37b47b068aba349d26a47b2d6d41e5883f656c287804fbc854521989c5de99b61c58d5144440ccffea4a0d9c455a40d4718cc1e9dbdc9c77c4848f466257f99ab6073dee83cf862511b68c2bba8bc907b88822fb1ba310b3901d7aee1eb3eeeb0ae5e8da38276886cd8a218d26a8d899afdc233944c97baf7b27444e27f9f3600b6d908fb179e504c5091e2febb7478b34bcf881c55fd9fc74e9eae1203e097ca67fcd62f03a1579d898d890c57445d9f6ee1b65b2e1542f490501384a8b98cc598dc8eacfe2260db6d65c54ef915f2db
+Entropy.11 = 19222f7886766642da4a80b97b9ab8b157b58ed63dcea2512f088644791475a5
+Nonce.11 = c6a33a2cce394d45da2f84b02a0abcaa
+PersonalisationString.11 = af34763c141bc212271d52a260c6d6d40e9f40a8a4cc3fb7ce6359bc71941f89
+EntropyPredictionResistanceA.11 = eca4698d50d5bda435778b808397315654878e866ba0136f9c4e206f7749b60d
+EntropyPredictionResistanceB.11 = ed4198d69d1d077564a894375291991eb125d394547d226c2da17e8cd98853e1
+Output.11 = 5914df97ca36accfe40009f033bc6cd2195d0b1d354960d152157f2b868db4cbb736cdd0f077f230442ba0101789c5cc2ac727b0704a10b41c87d79c8aef748567a2eb6e61a7c499a6a1cd6a9d958cac18585b2e697dae4ff92bf913480968f3b2b8ca2e0cd85f1d9303e3a1a3830a30d6ef0a1e02c682958fd186e1be8ffb2a4a69d34bcbe617c3ecca0a77d460e3782cf10143df34adeaa7cf74d1d86fb1ed35da217f00cdf27f1637d2a188c3ce7ce6cfafda3adef4463a0e7e668eb1268ada8465ce909f368a0b12a439eb4d43a87cbf98f83a4f8c422ac90851ed081d74f212c854522437b2655959c081fdc8ca2945271821182691f6ee5fa0c13dcca8
+Entropy.12 = f314eba7451a0b721622be298659a3d253ea5925f5912196c62ed149daa11e26
+Nonce.12 = cd94e8e647da38bcbbeeef1da21ad92e
+PersonalisationString.12 = f8b1e97ec680f637a4792a0d50fff9a0edb028619a9dac05b8ba6d57e55a1a4a
+EntropyPredictionResistanceA.12 = 0b9a5f1ad72826bf55097621314f9859f8f8d4d62cc9a00b3e9d95e996509d77
+EntropyPredictionResistanceB.12 = 413449aac8f9d8b311577a083f80364ad1d489262058aa11ce9fd3dcc6b1e4cc
+Output.12 = 93db5a7ed48a819e9a237ad4eaa33946880ae85266418a264ec17b41a8c97c16c446f91c6d901871e70b6d9c10aaa07077c1d40242cb7c5cb89a137094aa81628278b9e453d7f0f034724110acf8a08fa244da256bf3e41960013e70974dc8c228218cd88ac4d7448bd13a4343866b656b16aaf42ff678dfb960523cb95776bfadde24e16ab0070305e084cd970093fcd08431b815f85fdc4f6a43fcad105965b6fb1661c7709a166ae6f3d1fb463689f752811fe7d6665689a06c60aae8a051abfbada40fc602fea2ced51aa910c09b78d97a4e85242c3d206cf31ccfee11c5dc141ebb5278b55de7e7aa9a08048d5cad072da32c449bd0dad2f7d6188a5b9a
+Entropy.13 = 841cd7bfc5d87a0fa624f474af6d8ae9f2b5a1426cf1b752ddf11f792169f2f2
+Nonce.13 = c0b60427bf62df1b373302d91fa8dd89
+PersonalisationString.13 = c35726206d18f9fd3b8423fa9ee2fc5a896a013a95d052ff495b9cc6759d58f7
+EntropyPredictionResistanceA.13 = 1fd7542bf6425a7308f64e96b0c3e372d4addc747898731517a418210813f6f1
+EntropyPredictionResistanceB.13 = 4d56651b2599bb2899b109b9c21367126ed5bf099f455ab5b67f47a1a3abc3f6
+Output.13 = b3eb113c19f33eeee3dd53fe58acbef68b652121f39e9b88472e9162f3429c8d98790405afe1368619366c88a487518e1ba7896eee2b4625a987d138569892b8f977798d6931b5d2fda6b8cdf314063e45a22c957a1b96a249c431bfcc2864fc00157fe6c2ced99a1cea466944f675e52cb8fa0027ce78f4e3ed72d19f125045aa824b57526ed20d527d371475f389c66a15e35c2ad1bb8a79842217a422e4b73a3ab5bc8cdac32eb4b12045202b1ff1323a6816c29ad0d65c9dfc8e9bb841ae0c813c0bced097877bf220961c0447162262a96b95dd93ee707393fa5eba4aba292982c216b05a8c2cf165b54e1bb50a9ec20151b229df3d32f54ea62648b340
+Entropy.14 = dd62ed0d54d930fed1cd7582e376ab47da3138f77daadeda32fab95bf881fe90
+Nonce.14 = d9ab4dc5b1cf0641ad966ba1761aaede
+PersonalisationString.14 = 366c8ff666c2b42d735dcca5c0b12e352afa483d48d57c908b5263ad3d2affbe
+EntropyPredictionResistanceA.14 = bad9ebc3f3b24688e16251c409267bec9b02cca6b8ea7969a5991ef647fdbe28
+EntropyPredictionResistanceB.14 = d3126c505bc0d9f8241fdc49e8674ffd6bbdcc5f99c6e20d4271b4215e224156
+Output.14 = a774564295c318615e4d66e0d857dd6290ae074cb38b6322d8867f2c7bfb7b3bfc50c715c090794d794aae12b6aa1a91ce503b549d79435fd1f407fdbe286e4d607c624b44b5f0b91e65aa59a880c695a0fc2c9d53dfe0662944ad458ee6c364e56e6537ccb62deabf1321e8443cdb58e8833b708807e53ad86eca98e7cedb9bcabcd998f975b9b8722125da2d7f8e611b48e7df63ccd44439c615fc3bf237561345d85378a34c46b65bf5cada2e1c591f5a5ae4cae06bd2314bb5e5ba067eb65205aa2e4f625be97321a91d964c4be9896ecaf20aa78338627ea90578cc900d2abff4b50aca44b24088747e7e27ba9605bbd6f30c99d6697be460da653a1f37
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 3aca6b55561521007c9ece085e9a6635e346fa804335d6ad42ebd6814c017fa8
+Nonce.0 = aa7fd3c3dd5d03d9b8efc7f70574581f
+PersonalisationString.0 = 4bc9a485ec840d377ae4504aa1df41e444c4231687f3d7851c26c275bc687463
+AdditionalInputA.0 = b39c43539fdc24343085cbb65b8d36c54732476d781104c355c391a951313a30
+EntropyPredictionResistanceA.0 = 4cc19fae5a456f8a53a656d23a0b665d6ddf7f43020a5febbb552714e447565d
+AdditionalInputB.0 = b6850edd4622675ef5a507eab911e249d63fcf62f330cc8a16bb2ccc5858de5d
+EntropyPredictionResistanceB.0 = 637386b3ab33f78fd9751c7b7e67e1e15f6e50ddc548a1eb5813f6d0d48381bf
+Output.0 = 546664042bef33064da28a5718f2c2e5f72d7725e3fbe87ad2ee90fbfe6c114ed36440fbbccf29698b4360bc4ad74650de13825838106adc53002bc389ee900691649b972f3187b84d05cecc8fd034497dd99c6c997d1914b4ef838d84abf23fae7f3ac9efdcdc04c003ac642c5126b00f9f24bf1431a4f19ef0b5f3d230aab3fdf091ba31b7ddcacdf2566f2cfab30f55b3123e733829b697b7c8b248420ab98ba6f11b017175256368e8d8361102c9e6d57386becbeabda092dd57aec65bc20ebee78eea7294571e168c454066d256b81bb8b7bb469207a18ebedbb4348fbe97a4d86d2bd095c41f6de59aa0800e131e98181886a2633cdcc550914d83b327
+Entropy.1 = 2531c41a234821eec46f8aa7dae8e3ae12d167d289bfbfdca928643b343eb951
+Nonce.1 = 015c066e2d278ea39d2a459e6434e234
+PersonalisationString.1 = d1952b7d0c4c94185adc025e67a29fda50f577770115c0931bfb03e8101d1d3e
+AdditionalInputA.1 = 0be3f61ece380d63c68ff0d4bde36f58233358ce62c7bc588728cf1babbd4342
+EntropyPredictionResistanceA.1 = e55fa1145583ede74e632ee8bef2a2ff76ca3b8c9c977a5813c4041f3f9328be
+AdditionalInputB.1 = 01e76a0c9addb4dc2001bec231b72e2098a6e9e8d39ada13ff0c493aec8ba65a
+EntropyPredictionResistanceB.1 = 6c67f1689d878e8ad61bfe6a39f5b034b75c40c9b305c1eeb92a3f4169ae1720
+Output.1 = 12336758fbec11ee264b06969bb37ff1d37034b66f8b823690758da074d4e09d84ffb493d0610b5c32f68b1a144ca654ab4f0e89c89c6ee6b872b6be4ed06a77b9809e68329addf4ebccb986dd48cf33469362af9d8f7b24aa1cc65bdb814c2e04b79860f2d53b3895b5f92502befe31729e40ceaeeecef456dbd723f485082ad475e46f6023dab6bab0eef61394823122c262baf562d55c687c3c3408c837e6383e11535e950e604df59cc0af1177283fedb5fe30966460dcf6b1625b39b590d455b9182097cfc143290556d68158fe20211effab9303115ebc5b699dc1613c195956dc61348bbb525e571c5407326a6e1628515c9275a6a5e35650c953d68f
+Entropy.2 = 4d65ff2fd260eb6290b02b1fd71cffec840cc01807e984f07da64e6ad80ad37f
+Nonce.2 = b5810ed012d2ceec3a0418003a033435
+PersonalisationString.2 = d75616aa0190a56af573e43605157c0e0d5275bca959f2c75d0e777943b200e2
+AdditionalInputA.2 = 954fdc652d0bd8eea37342f5547241afb67f8d4c587bc2402c435a260144acd1
+EntropyPredictionResistanceA.2 = 02219bd422c08e0321bbb86d923bbd04082f939ded421657f929b37e21604a26
+AdditionalInputB.2 = ed07fea3a07e8846b4c3aae8cec0bf6df7c8ba7817e3e9699943e2d2e778c4ac
+EntropyPredictionResistanceB.2 = 68b57d5606ac36456da916df82a8753d224b4f7c829d285254e9e851937b54af
+Output.2 = 20c1c41c0809e694b5ddcb8089946d74571144473dcd68af68cea5881859ac803c0192304966a3a6f4c24de0451451128663bafc20c9842bcf72f3d6294dc59b850dde77ec9b7b37d8e5a99ef1719ac29bd54027278db159476849d22d2b46ddc008cf76878eac8c709066aab5f1043ea588815aa48456d89d2657d2905422857f6b741218d22fb7a2a67e7efe5c2c56c9224170a75db10b9d7b93509a6b1c5e9b6d5faf354f79394151eaea71c83c8fa53446eedf70582c4976a4c16311f92cf7d1758c1d1f48e6d58b588b3cec5f2a7f8552dcd7a72cfa8f109c3f734a708304bdcdd6b25acc00899717a05fe98433f104b6fd268379051af36b111ba179f4
+Entropy.3 = 313680a6ef5cc85924575195608f3b9cd852004343ab708e89d61c2469624616
+Nonce.3 = 6b0dbcdf61c59b0041fd2c55a829c99c
+PersonalisationString.3 = cda08cd76f3bac2c30bda2069a1a7a461f2462ad2b2ab6a727da6836896a4d2f
+AdditionalInputA.3 = 431c4fdeddd3da1de6fcf19a25d74af811f72fc2367a7f33cfcdf17cf38fcb6e
+EntropyPredictionResistanceA.3 = f8468552aabddd993687c2b4a6017024c41100510ee10034ba4f66563db4d338
+AdditionalInputB.3 = 4750344c23e4686b2bfe2dbd9301705d06969fedbc77841bf6591540aebfebd7
+EntropyPredictionResistanceB.3 = 8a7f6d475e080faa23ed43c674254bf9ed25f73109630647fa3c85575727d2e1
+Output.3 = 40deadcd87a8e07ea73bb1f29157c7ae8a35e02ee60f9f62ebe3ec4bb325c81c2a17bcf6b863cad6ae29356c0e7f3d82052802fd7a14dc73954c78efd49b2d32f072b137af16a05bc97034b2102c25d6ae68df7141b101f468d79078033015763326dc3ce8bb2e960e7fed09905044ba2164deceafefd545e67a5715fe7e5a1fe51cc356096344245d431dc19eff99b402981b8531a8702f2ff1bf268716793367db8d0f6f454db57b6ae9164596850811fa2bf01dfdf91799b1b54c9773ddaa23164484fddc2cc781c1ff31393ea203420ab2cdfefe514d3089df1b20eba32c003576da5a9712c5c0ad744fa03df197f2ca8463df44d16135f05e1eab014073
+Entropy.4 = 95b698a454070603efe15cb4c359ae946da756d124939f916d67d77aaa0608d8
+Nonce.4 = e577b5f5567ba3c075128b528a6ecbcc
+PersonalisationString.4 = de401ad1d2c339934a47822421eba0fb79c89863d1df0ef5d47e6be5bb3a8c48
+AdditionalInputA.4 = a002954ae5f7676a3230533dbdf59252ef051acc76574bd519ad56882bbf46e6
+EntropyPredictionResistanceA.4 = 2ff6d8d15ddd68039173c4b70df3651f4cb5ac62957781ac91563324a56b4740
+AdditionalInputB.4 = 5e3de2b53936a7890db7248802bb95e9093d9d7a15a9378d8f4ba42c52e679dd
+EntropyPredictionResistanceB.4 = 9b02699662f68022be2d93eac367a21026ae95ff0cba67a630e4bd8e53469215
+Output.4 = 772a05c279c7fd85750793ee81bfc32719573ec519f5b64b0386e6414b73b153163fdd1dab6d22c637397a30adf86594de90c32f6482d50539eae8775799b89e4c6471493df4f90ce0b694fe1a81fb5b93bfd2719ee69cc576e632cc886824deb7622d487af450e95bd55a609ac30e95adde47b83ac654474c18f615dbfda68267cec8bcf70d094df6301e858d3076db2a85b2b4b3d94de82a6e0720d535d36d6e952811cc371b1e828b86fe00870aa5c55e575a6903303f9e2dbca40e5b66326192f1728bb89fa7d77e6d32cbf5f18b3306206c39697b71c404e38d496c52639f98eef9203baff52837a872f7688b53318c870d3b8cb024c865c81c3ad8b71e
+Entropy.5 = d7d3e83dd979bcfb524074f12a90f78873e983c2aa90e0241f00d2c691a4702b
+Nonce.5 = b452dbcc69a7793cc2081b984033295c
+PersonalisationString.5 = 5612ed7d790419dceab4befdce6e4e687d335a3aa972d8809db6291e3001f825
+AdditionalInputA.5 = 915028d0610160a2516e926f06ed34b18ad1064b6efd56566494a92a3fa0eea5
+EntropyPredictionResistanceA.5 = 4435495713c20295aa97bf42babb66edb4856370b9701020a8a79df7381650fd
+AdditionalInputB.5 = 86cf5bdf061711d2361ab6d79c731c2fcf9aa47ae5bb5f6294486a14081b1862
+EntropyPredictionResistanceB.5 = 7a3aa5ace4bf54b3331a8d4092c19fde08cd51a06146cdfab9e3a32e5cd02b35
+Output.5 = cf1b0dbfc3f6f3ab526299b7f7d8ce1a945bdeb0c0f6305cdd6876d40d5649ace9e78fbe2e1df6511145635f5acae90b6b9a38393db4bdabcb2fc5e93d252a2098fc082917b1485d387ac5e2efdb5fce0e82bf200ce0d1f6c7b5d22fba062574d9234fc9185f096848d10141ad39571035b3769a521165f7b63a0050a22485d8a47870028d3f3b6437938c3cb51781db9fda64019c049dbb7335dcf7c9c71f1ccf27cff4d379a274fea0d026f5de1dc8866f1dcf883e2e0fdb6316059d5172a6c1faa3203969969defcd8f367ce859aebf998349ba979afa5e63d94588ff02e3a428e93b98464997829cdd4b605a44393057fa27a2fb780b7daff4b64ad73b91
+Entropy.6 = c1e64b99394e1241b31ffb7b482cfaaacf5f2fbc251f954e7e3dc0866aa81856
+Nonce.6 = a16ce83d9ce70b71479ae9ccd6c59ea4
+PersonalisationString.6 = 42be743f8a9c0187d2d54b596caf64dfa630d60bd8c6de0b126d6a151d823cdc
+AdditionalInputA.6 = e925684793bf51a8a4a46c2ac5b91ed40843efd0878336f983f1001722231f1d
+EntropyPredictionResistanceA.6 = e99986d1e09ab16eb1f48b99cb9bc9d63701f6a9a1af0b1d8057339d5d7ffeac
+AdditionalInputB.6 = df019e78efc5d3a85fbd9056ad05f97de81be05c069b32e68792ba8f5a775fb3
+EntropyPredictionResistanceB.6 = c8e5729134ef2148663227e348dc31b9d56626c0d43478d5d53bfe998fb85b1f
+Output.6 = cc3df6f1cbb0e1bd937e64b2d8be12c07cb256369040d834037226b96e4b8e7232c2abfcbbdc0bc2c432414845c5ebbc35fa4e903d5df19aef62dc702b20d0346daf20caebd8819df9210a721be34d9df72603a4370c0c6a653979d19282505d64ae09e0922149759ca0f5324f665eb83ceaf6dd46771c520b96885a8503b6be333ef6aa8d83d370edf100edb13b86724234442a15cc23f89359f629a2a15b645c2510099c0263d25e310567d822bf03aebbd4bac392b999414bd013fdb00b4fba8e30afb17f50145d11302d71dddad30ce6678fbede83e567a97f4deb3b1759e191319697efd9486f2b502a94e01c00a9b5b76230036665fc5d87f8c9e2fb4e
+Entropy.7 = 071b46d52085a658309f2c35bdab443e1509aca159c1fb9c222951affaf1a243
+Nonce.7 = d0bdcfbcaa247fcb8da53fed8e5f8b3e
+PersonalisationString.7 = 7ca33e3345bb333a5b1f412a6d57f8ebad65b427ccbbd7fe3ac837691da39219
+AdditionalInputA.7 = 60efb3c75aeb2f4fb208659f20e79eb41d8d9b422066c235a14b9420bdf6f172
+EntropyPredictionResistanceA.7 = ed2fd022c96bdd6e86bff89beaa99f2bc34963d3ef118df9a5525a910c9540ae
+AdditionalInputB.7 = 4e2675c8009b5bde9882ce940d42daefe402fb11379e07db9a4c0c763e97f319
+EntropyPredictionResistanceB.7 = ac5166f65f5d05c6277260081aa9b71ac58cbb5f1ba5000d4d8078c5a30d282c
+Output.7 = 80b56a4bbea08b2bb09fda9cb04b1ee7bda0164c2f12271d8857ee3af102ab25c56836354052e3d85bb02cf13607d746a62b24eafc989b35d4ba25449823bc1e7b14937523f96713c9098ef2ac3f9765070076f28d76c7e3c2a0fe7b6afd0ac2167ae070a7ff19c5bbce52948abbe94f0d55a5d1beb31a665e97f56f3b92314cad9ba764cc2e3d0c00064ca1b4f3efda14e7e0aca431b427dfef2443d9e3b8a6567c26eb0ddb166f9dd247371407676c6a46fcaa0f9f67f49276676369b725da29aa9ebb7c3e186de460452cc81c02266bb6e79a119c54f4bed8bc3de709bf6a62593273f4680136e95d6d121727d9fad55c4a110a08be1e0a06cdef98aa04eb
+Entropy.8 = 06c7a8a74b6fe9e14fa2475ef8b8a1ff9610bfc1b4b93cf53a8c844d7dbac08f
+Nonce.8 = f743ea1bfc6c10d7707b5172a29af054
+PersonalisationString.8 = 1a33793d255386d47952bfc1f63ec15caff3603d5c28b2acdd799673affab589
+AdditionalInputA.8 = 7eade98e717aaa32f74b033163ad76489a7d682783d2db67b9696ecc7b9be57a
+EntropyPredictionResistanceA.8 = 491b573dc2cde1a3e74262f4fd2e9ec819ecae830db4f0c7021028737ffc5bc0
+AdditionalInputB.8 = 58369a241166bcc87e713b28b4ae216a8e61f8cba83969d42b91e55283286af6
+EntropyPredictionResistanceB.8 = 25a216f658065e27314c30c04925051c0d7caf6ef440cae263f49148c0398007
+Output.8 = 7bc84544b68eadac9cf1ca907d9166e094844b396e5d54672ec88dac573418125d50befe1097e2f3438aaaf3f13182ccf4593bddd52d6a41a5e58f267c6f0817d8d1ce3327a611f9fc591ae64c7c18d61958a598e0ec4383e25b46dfd34db10f609cf53ed76c86116018fc8e9027aa2f0b0fb3f22d6b86b11311daa5e78d1f4105ae4ac67f63707400b0f054b6f3d71f26ca5d463192952fb39ae00326db9cb1dc028525c31aa9beb7c3d299070cc3ed8279b8ca32940b21273afe8016d8069a577acdba6bf6d2fe327b2f6dc9c5c7875da6c3f584516db0365d16670db6d90cc1e5bb5309ce9fc8234326ddd68706e1d76830202cdba770bd40046b751f3c15
+Entropy.9 = d5552efbb7f33481a574589c4bb56dbe43000ffe9ea67fd0c8d5638092c84699
+Nonce.9 = 44a150b0dc1315ab0484976b128ccc96
+PersonalisationString.9 = 345b4acb2b0cac82139fd516ec3d39292438a916d2d2c8e97ef265a1192a65a9
+AdditionalInputA.9 = 732451ce7bf5acc84a05de3474b622d07bd3d01eb6e3724538e454c4d669a994
+EntropyPredictionResistanceA.9 = 1734d226d66c77dab3c22558ff2225e32191aa2dcec8e47a56f757f71c081aca
+AdditionalInputB.9 = 7c7ef660cebee96b425485296a8e88c37c66e385eb1cf7389a95c46fa68a34f6
+EntropyPredictionResistanceB.9 = f5df357c07952cf6de2e3564813ded982f72069ed1bcff6b48ba4b4625ba247b
+Output.9 = d82473db3bd554cdcb2aadbaaa9c919087d9b7bc8d883f99bc95a19fcf96f25698fca8a134ce441414852166998a6ee2f6a18f9f667907f8f8bcd0d2ade7dfcc03cbd6ecbcf3dec46558154dab59717f386bb33c9df9456b258feea593ae1d9bfe70799fce4b25cd6ffd0815e849cf93b496d6ef36cce4e14fc3de1506dbf34f7111b48027ce2aded4140bea8311d5de9df5290e80fb65462fc5433e00c344a3657f47f6a7b992c6ae362afd462280e7830d317192bd8dd26dfefe779dfd69ebfca34038b078c01644857c60c1f6db9da9877cbd2721d0b26a67c4eee1bc43f6d632110759e1e31e7c3d6105e3da30d297b69eb04e880d1f2bff2a54ea798178
+Entropy.10 = bee5dd72828806929757afa02a92c5c54d86c5015047379b717c6608a71239b1
+Nonce.10 = 5255de5a2bd27e9c6ef23046c8a8217b
+PersonalisationString.10 = 4c3c54284845fb2a494d1e452b2ba1eb0d3456cfa9560ca7c60878e8458eb7f3
+AdditionalInputA.10 = a8a333527a2158a087879a6f950d2af8d093c4f67945a140549a5e93e405b886
+EntropyPredictionResistanceA.10 = d89744552137b24d93e5ed41250ecbcf6ec77734fed7a40680e801ea277e8c6e
+AdditionalInputB.10 = bfa0025ac9774ac767a4d3810c27a3c8e3e48780cd0597a5a401f6c9b0067e7e
+EntropyPredictionResistanceB.10 = ae57b4328acb1e1dfa04d0b5f799ce1e2f111c3fe8c9f954fdad6aceac7d27cd
+Output.10 = ef4c169fe5fdb37142c71734b5b5c855a3b7693a0d78f48d76199aafa3d399b057ea78b2f1187bbd3215bca52e3bcdfbb74d1d0c1fbf91e7a81f7c3f6d8ff5276ca906704d2d3556ec8ec1d6d7ba9e7dd73738a7e90b1398d800617f3a5487179439e25d0a9d4ec4e38699b3703020a99c533a6282000544296e63b6ffe12dcaf3864a8502a68482f90fa7fe9aba6ca9e9a74c6e3f89541d18f2a909737280ac8e772fcce6a117411f36c9e82f2d77fc7a03e2f13f97da5bfd6bf69f1d46a64c519046e6d0d379964723bab2b89be9ec91a3e5a33c53a73304c1e89620188aa2e0b8e4112c5699e6a99d66b395cfbd2502e567a0a9e35ede140681b2ffd95fe4
+Entropy.11 = 754e542dbb453f10f41e1361164f5e1ffda67a024ba26701cc86066caf2f9477
+Nonce.11 = a074690faa069cfec6fa38d8b2506aca
+PersonalisationString.11 = 3a9193fbb67a0fdd732a788d3ae5783de84968794b8c4c0b5ad4de067a5d1fe5
+AdditionalInputA.11 = 034db3c40c2c181cb4d635aaf08f05e724f418ecf7b3d2ba6863e9ede616857f
+EntropyPredictionResistanceA.11 = 34fd27d66708876f28d8ac08d28eeefcb728fb6226559d5a0646a8e183807a8e
+AdditionalInputB.11 = 50058bcdd53c9d257dab7846fedca4ef99ed069604002cf58ab27014ca7100c0
+EntropyPredictionResistanceB.11 = 08469cc5535712a4426ddc5a340b6c71607ee1e2df489528a266b141d7c977ca
+Output.11 = 1d30904d8cd4e37357b1b9b4ad060fac12d1cf1d05e2b5b2fcc48bff12643b60f5e40a3f3e542e46804ddb904581cbd576f0dbb4b83b49af83c48b6c68051d7c7f4bbf09d3a4f999db4776089cbed57dd2a75be826ee34e13dd802d7dfa4442a0a0fe154ec9efe6684d6a400d04fa404123ba54d6b89b7dfeca4d4547e3197218dc36be5c0137c94b889c1aa22b7567887551eab168d365d11a5fbd0eb15116e929468e8eb445608d91388a9b3b05c95b9733bb3ff08d96c0899b50b47c570d75323c4d24062820b0a9afc7bb2771fe163ddceb411470f33554822e30dfceeefd0798ac9e4a48b8d30c8f725a4df6568d15a750131998e252dbf9199135f817f
+Entropy.12 = 42824bd8944f49479f07cf6af8f02aeebda3ac074ab72a9eca8850c99b909d08
+Nonce.12 = 1f2382d4ecc9e923bf1a588f8db10bdc
+PersonalisationString.12 = 2b573345c4fbdb8382bbdac1d3e2c38fbafbcb599c67412296fb6912e1a640ac
+AdditionalInputA.12 = a5f43abb4634bedf1b199dcf6394bd3504ffa0cdc151b4e53cd0772d86a43f60
+EntropyPredictionResistanceA.12 = e61c6f452c8e15c0f003d2231ce5cb69292ae1a37c602aa889f0d56df049717b
+AdditionalInputB.12 = a2f1ac52ec46d93b3b944055b7205da8fee95c9a3241418cfbdfb0e9ece9143a
+EntropyPredictionResistanceB.12 = d99005ff353c08eb29ebb8cee3aafeb52b3867a61a76335d86c2d7808ac94bba
+Output.12 = c751240283ec2480f6c7720c31e1f9f70c23907b38602ff74f707a14ac10989e29d1ec2e81d4cf85a9bd3440f445fdb9ef7955bdd2beecb5f3c69475b71abfb4ebd5134144b24b011e2fa6026d84f8fb511c7a44f2ad7cd212acf089dea4bf2db5be9a24cded5be8ad0b8ed17bbf0c5668fd644daa863616f68278b5f6dd95ab238451966bb5ae6679d1e99bad610befd419ac6bdab3440b7001139af8a2fca35c74ae65d05f490a480caafa1e3487b78450a5ba59fc0a59220395e14685d02f6b4180c72977f095e33c5cb5048b63bcca2767061c97c616f494c775c5d37a67c5ce996e94bb8ffde4a8dd3de97b74493c9b2d985a2492e1f97fba947d2940c5
+Entropy.13 = 9d899a56a0660f18b98c921b0d409550fc225ffcfb975e9ec6b2315bc9a1eb3f
+Nonce.13 = 68fc77abc3452380e30ac761a20a9156
+PersonalisationString.13 = 67bf61b3eca94013fc165b110eafcb9126917a0ce7e2d9bdf7ef1b38bab6ca4b
+AdditionalInputA.13 = db144f531cee5efadc505f4d37a6e5413f638d46d419fbac76f81ecb63ea2809
+EntropyPredictionResistanceA.13 = 5f5ce875a82ee08a46a1fc5d4aaa8918fb23970428c863dd1b24606b0118476b
+AdditionalInputB.13 = d737b2ba62c1ec1c766f30a5dea7363b5c570c1e7a33fb65c3fb89eab41f748e
+EntropyPredictionResistanceB.13 = 150f7a47f3962dfdd8ddec93fc8f82df7cda58cb3bb5623610eec69bdd0722a0
+Output.13 = de518ac3034859a43cf6701722555be929a5ab2658de326696068b970ff2f77c75083fee45a6660b82fd1e960b472a50d96535559f60b3e3131a2e051af118063c1cc8b1356014538e6ed0e2da05c90baa041085f8f1575fc3103293a0303751077438a081fa3bc5c64aeeea5c4b34fb6957e91db47bc3f73710087db9843efa1a62e9f615843f69f3f450d6c58b33b1a4d55509df2f34b8a14407cd1a87dc9581dbe180e2d839417a4f6ca6a731aae3f08b515df8200890baae9b79db798c8e530b6a03ad13c3c08baa4cff0b055f35dbbc6cd08fbcac7c0fb78f8754921e000e622ce3042e740c64bc935aca85d7132723de8453c543d5cd5a40748e286b8f
+Entropy.14 = ae767959378e9f031c8f68d778cfc0dce1f9b4cc176c5f9f9f4c9c3aed9435f4
+Nonce.14 = 82585a0711812c3c79bda619b942c6eb
+PersonalisationString.14 = 830f178cf5f544140d2d8c0737790b97bc6f150784865548d73f1f37a5a39a65
+AdditionalInputA.14 = cb12a2b9a02aaaeae4c7c76cad9e006186d978bc046c1ea81532bc51601ede00
+EntropyPredictionResistanceA.14 = 8f5abbe8540aaeeedeaaeb52c156d07d8669179fc6967884db69c17186cb8fc9
+AdditionalInputB.14 = 2d3dde3b3581b863e1590bdc638c33bfd170555445e225f3a450d9e9762abec1
+EntropyPredictionResistanceB.14 = 6f2de9b0ac5922ab53c595df1e3513bb3f2642b458d96e3782dbb975a8b4faed
+Output.14 = fddf7f1b906861d49da9660e7716b5ef987163e7e2f51f4fef2cb3e8d01b736067765aaea11a7d193266b2e0071e4d4c8cc776399464563adb9deae22bd721ed03b148516100b9f340a00d2632c80c5b3e1f93825ffeb112fb90e658d638740e62d8031fabfe40f79c20532e667aeacc6be635f64a0580236d7d978c5db017c76a6767dc419ba2f89102a88e53254f41205866e875225380ae04943bcc8f152c9fd79a680557d1f2a0a8ac7b27900bba33db63e26e0d7363034af1430b6546a3ce2c01c8cfe0e152f106baa5b2fae1fe00cef10154b735fdfae354ececc7da44c914b054cd97d99866a9d5df42765cd62eaf1b8adc885fa2263911c837b4643f
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = cdd73879ab02dd2ca8bd22c3ca9a668214f48cde641c377deb8f812cf4df2638
+Nonce.0 = 82dbf2d011ee6f713d1bf5f8bec70df4
+EntropyPredictionResistanceA.0 = 47c9d95dfcf48b0262ed9488924e3f97ec4d512d967ef4c93391fcf44f186462
+EntropyPredictionResistanceB.0 = 52a3cd9e752acdaf03f8d0337cb1fddbc81e9f61e28cbcbb9917617f8796607c
+Output.0 = 68c88ecaf8ed5c35cd46bffad5aeb1581f27bc9e9b5dfee30d0f4815133a6874228bd353ae0914191f037e603299ffdb934268d2889c1a28aa74d977ec1ddcd55b2bc4765e6ec9f4c4efb9fe0eda4e5fbb7686f1112de6f91bf19309b83961d0ce62deeb0b34a46a502bf48770fc94c2a5142cd32fd9e828c66401beb3a5e55e3ee8b0a34473cc5d3cf5cf84e8ea43663205aec2e7ee73fe19972dab3f8846461d5227e219f7715546f9a2dc96f5053ad1e8f8545118ba8432f03342f0ec5904d2d9e3c97309e1a6e3b7f53e35fc656f42d5e8595c9633b917f209520dad5946eec5e26955b82774b273712bcf48f314d4ec6b0b04b943c7a99a237400e47c66
+Entropy.1 = 68e94856ac1833eeffe50b51f4018e45520e4392790315bff5fb5be28a830b50
+Nonce.1 = de0d71b7e84b824212f94e91ba601f06
+EntropyPredictionResistanceA.1 = 7461cbcfa35479468b938a61beac5e26fc35da32fa0af2a1078b00eab2911596
+EntropyPredictionResistanceB.1 = bfd16b333021372ad488f7640a9617c24cbfbbd31b51bbe87db1cbba9b919dce
+Output.1 = 4a5232d70b67f88bcfcdb521e4e0253c3e7347282903b766d6c73ab317ccc88e2af2e0cd50467de54a4678d9b61889a32439c43eb546139d50c7bd00defe81ccd7644680d7f50bc683647dae3cd2f6fd1f703f756cdf6dccabd35ab99716690ee300692d5dde96d251f3df71f327b72ef1e0a6d42410cbd830066f7b7d5210f01370e80462adc68478ff731d6c7d5cac68721ad9f0c16476f328dd349657287da9b3e9dbbecfa51523069352df36b4e05e51edaff4fbe6afbf493e74552554f0d7e81b81bb6e6a96584268e2da5c48b3f8dd2eed37034ad5e1a411be31967787107d2b33fd9c9ed9b8ead3a33112755c3277d317cd8ec32f911b3fceecd8be6f
+Entropy.2 = 94804795c1847a9fd4ec22511bf57e054f9a37dbe39fe595bfd4c182378396a7
+Nonce.2 = d2954a8701817bdc8027a380370a07e9
+EntropyPredictionResistanceA.2 = e60784c3cf9d89d9ff383293a6b29e48afbd966a0ab9062a4f2f67839cca3aa3
+EntropyPredictionResistanceB.2 = 8eae10cfddbf9a654292a03b3392a2d958aae8a9639fbeb776b337765fb0e15e
+Output.2 = 5126e81a3ed8ff6e82fae224052f22fc43c77e20cffac09b1b5f3d34ac5c01a438429c962ecc1aee1c083720040fb6d2724996222d6f8f511c3d37850ceae065588acf6c81ed8bb2b964def80d7f57367e4eb94e59b37545af7831c9d4d8728c37c519b126a3513bfd5e03272813ef160a2bb9f5fb677e4c34dca332422b33ac9081e6f238c5b8972b89f7ad3fffbcd297dd9144bf398c80a630af1563b8d1d390434d423d3bfcca8a51f6cb55058981d446c0a81b1ef2c3858995323d594734d376297c2c3b94db456872f76d6e00a8f3bc94d917028c8b04d687cbb18a6e82b476daded28b953d18690a5cc7e260e54f8304d537b3170974e6acdcb66f5e78
+Entropy.3 = d56a2b989e24756b7923e4bfed8b778c0f789e05b0e812ea14231dccccb5642a
+Nonce.3 = 211fae8272f76b31fbf1378c11086ec1
+EntropyPredictionResistanceA.3 = aa4434c4a9d2798aa392219d468cad6883f9aebd732668acf1fc76ec8f175092
+EntropyPredictionResistanceB.3 = 7f574384c7ec86e9801fa2ea758c17aee64d426d07063152a3e2a19921d4f285
+Output.3 = 31add083ab80bb403efb27395d94a92b990ccc003ebda10da2de7954d0e57fc1f6c0f9ed2b44581688f1a0a7e81d5db0c08ddc3e53863787d8b569ab0a81412eb45b91ee0756db3fe7ceed68bcadbedb239e896e2c6ae6a3c688e2fe5574b5092a560078d884fc1d0c771d93ba2c9672bf1f16e281dc93e8058a822aaad9df67479110fa4faa5520ed1b76f026483d88dd777a5bfbb178e71b5affb3b3c33ef34c6cca5d284b3ccd1290874d41bdd6bf2d594db95b79d9cd22f988c1cb428ac7ad1d46502e3ce6c25e4d699d4b9e2cb46d9b97ea774cce0ce51862bc6b34490e8eb0d529655a0330aa3d11ee246edca13970bec9b6db2ffbdb7a8d12ee8c0dc8
+Entropy.4 = f6a2e67e5d1f4483d12963c10e434c883bd5926d48b4c1ecc96b7972417faa54
+Nonce.4 = ed26a9bf525c7b2ea7fd3570333a3fbf
+EntropyPredictionResistanceA.4 = 830f76b3d45f2ca25c84c69017eca6aeab6f16f02acca3713464991a4565109b
+EntropyPredictionResistanceB.4 = d14d217134c97e48fec5159cdd6c4f505157cdd4dbb4ceb9ca98672ae7109ac4
+Output.4 = 8d60af6959425608444b4cc6d2f579c10948993bc1fc701e3c14e91c7ef87bf0503a0df1d3ca7be293f3e4dc58b10bff1419130ac6e67c65b2d5a72e4b121c87043be412789697ddcf8158b05c4f32bcb25d3421fa0a75b7e04f6dabbf147846fc8db080dbc9e249a5d0d6aedb4606435326bdf0fecd76a92afccf09898a18e7825bca2cda46ec5f5a973ba182546bc818628173e59d348703798b6b538995fbebb4047a1c008ebb8ff73b0d961fec65b5f36f0c730b278cbe81d26d3bcdd2e60d8e3ef070fccb860ac7b9f1624e4b010978efe2d7416e29e971f7fc1733151c307a1e773f71815c179009296027e39eedbd206da7a930f33e51bd1ffa0f0abf
+Entropy.5 = 48ae2dc8faaba53ca5f43ac507d5b31bcf2140c8a1118882bde2aa1a216065b7
+Nonce.5 = b7c4d0d0d6c20b2ff405f91552c1cacf
+EntropyPredictionResistanceA.5 = 3658cbfd912f873e2aa7a921af25c937393a05cb63591920a3440b88ce500625
+EntropyPredictionResistanceB.5 = e690af017f25624995e9361b8ecee825279b18beee1d9976496c4bf1b7dc2085
+Output.5 = 6c650fe46e18c8ea07bdb96678f90c99512c623ebda1f2cb156c0937e98edb51c7e3f13c62d91dab7c4e43c976cfa4b24daec8b1b47855418ea8863b7adf91b63064332890ad96e07c61e8ef46693ec1cdf0268b0e01a65041f77843bd0a9a0c8f1a37d1e82f864ad42bb23425baa10ba29cafcd5be78d25ee5bd6f317811565dbcb48cda4add8bb92a6e8d383d9a44ea557a25b38a1350bccf3528607851c483d6ac40dfd5bdb3de4c13c1f41ed6a9c8e181a428717d11b2d1ee63d2c64d24d2b76cf5be85b8ea275be306ec3d9ee2a659b5304fd5aca4ec8ebda69b050ce865a45cac2ae50a58e01accfcd8bef872c9f222b7d03fb33616867c538be0c8550
+Entropy.6 = ecd9c66a37ff4d53025bd44d939ee22653735708e84cf0c217e1f18694a4b3a3
+Nonce.6 = a3ea59e8b315dbc5bd14ef4082d04e41
+EntropyPredictionResistanceA.6 = c31fcb23e0fe5fd6f302d31a267ec4f3683a821d3afc6bf9059f851a2026a6f6
+EntropyPredictionResistanceB.6 = 80eb7cb121a197948525990e0378f6d20244bbaa66b2abc651eace813714b8f7
+Output.6 = 870da6530dc833e8b84ef873ab07fd912c215dc7fe40a0cb61e4d89d405918a8c0af1a4e0c4b5e160b292dcea739b45382f590c8514b12c60059518d36a9748ea29fb4ee933f75251c10bca841d86bf077831d7f1d6170e630e6b3803c7a88f57e1f718dc391c93006ef0dbb1da0fcbdf209d1cfbf4eccd43af591f80c3b940645e6eb87441c5e3755e77d0d0199984e24d1bbac14818493e3798384426786ef1405039bb206df3ef4e394c5a53de7ec2060378297d47adb02f07b5100e440230fa19b220a2e1711fe8e309151ffeac8632b3d292388f5c00a27fbc4ffeaaa41f90e737457a13c992f56d71549e53dc3f71c3ca80ac3550a47a4333113364993
+Entropy.7 = f4d2f5c08ec9c332fcc15f993e65096f18e165a4e137f895ba3fd6b896fe3620
+Nonce.7 = 4aac295aeead34f2080a9aaee9665f84
+EntropyPredictionResistanceA.7 = fecf3b471461024899f9f6d6ec7298f0888464b945639807c09d37b800c10c4f
+EntropyPredictionResistanceB.7 = 1cd81e4182f85a7e6ac3d20b2edb3d7fbe0cc30eacc5c22db276de0d08d35378
+Output.7 = 4b5c702970c23978356a4562185b89feadb82a9047a1027c373ee1a54570f764d8fcdf9f260a4c5b829a7d567542f32cdaf45d2232a8b466662887fe0dae98f675dfb308d6e3c7fa7d27a91657b3b69defa23f021d3faec68887df2bd3b61470a27d41f2736ca5b9f0f326e2a7892f2c3566442ec7015d4e86231abeecc22d64944a2edcd873f192e27959c976c37def0b925678082d5bf6e36e1617c45fdf1aa2139ebbaf52aaa0769ee3deea9b0f07b233fad0bcadb9b2494b370dec441021cc94fbf429405e91f73b33e30a7981fdc16d3c3ee783a4659617491194c3eb33dc41c52c105284405c48aed4bf4364ff12b434b26f8de758d25d8e5a9c91a365
+Entropy.8 = 1140f75ea8eb7f5a9c46121be7f87b93cf02b4f8334e3b70cce3385438078a64
+Nonce.8 = 085e9265d85d1afe35153f87eaa15e3d
+EntropyPredictionResistanceA.8 = 3ef48e8375d6fc2c0741ee109d6fc67eaf76b56c658e7339279d5c464897929f
+EntropyPredictionResistanceB.8 = b5c8a4e9b6ca884c2392c2f0ce317af54cad89f71225dac03e8d7604a30d00e3
+Output.8 = 63aed8513f0d1ce160ed5be6d46f602c8ca126c8ca9999935aa4df9260106aefec47fa225815c1de70127257bcb0425197c67579b4468d223fd291eb63f000b4698cb956f965630a1376277c39dbfa7623161489535de53ab00f7d600648bd9729e4e50b4391e5612e481651323bd61feaeecf9bad388e482cb7111a87e1b00b347c0d70ecd1058589355f146f8c6b93b9cdfce3c2089ea350681cfc125f65f1d068e25e2c9dcc6883858dbfe4e7696dd63b9da2e44531e9bb55dda7450fdda1008724445665c4ced497f8c43f0d02e83f9b030efa9bb97eeb19d15771d0e0bb8c4ef94edbd38ba4ff69a5d519426df18e438bc762907ba7539f0d8afc6acd48
+Entropy.9 = e1cfde02d4da300481fc5e7fae19d46531b30ed94d45c1dbc22383e1a6c9f9f8
+Nonce.9 = 438f31be51cf3820fba9a417c313bead
+EntropyPredictionResistanceA.9 = ee62f70e7f73f38df70d57aa18bc62f781692000b24d20029fa7e35585e5c1ce
+EntropyPredictionResistanceB.9 = 557a2f8f3d0fc86ae7ce151167362636f622287b14c691033d3a32218c5e4b1c
+Output.9 = 0c0823b210c9c584e6d3c0c70a4d43b169db2d5b420ca87f6db24586803a2630e3c79ef4027bb8d9338008e662a1c01631518698f8be0e4a8bb550df6374e1e2600d737a5807566fb7c3217f72e554e05e83800d465849e129f22aa70ab6a6877e38f6ca656991510c2abe7227341b65a4f113d5962dfb5e18dce365b4b30cdcbd8169260b650379bfc135b2ff1cb67474c6320ea937522b63cdd234fd3c8ddda503ab9c50567ea3ba39e6349c26eb7667915b8f110ac5d0fbadaa3388efff486adcccfdfe667592a1cbc7049a5d1ed39235e372f8145a27f78580d51a1b6ffe4af0ee37648c94aa7257c7dc90e88830e99417fa742deda5d6a10e662e1b6c5e
+Entropy.10 = 4cd9c3e0a7cb763b080ed16ad6ca73557392e6c86f8c8fe50969ecef45146eba
+Nonce.10 = b1f647cc8d536d4d4daf259a1d8e7885
+EntropyPredictionResistanceA.10 = e52e5b82968bcad83e97117a5dac5f3cdd9d68bf436796bae8ea9227cb4f6fc6
+EntropyPredictionResistanceB.10 = 8f43970c8800e605860bd7b73bd754851dc317d2ad3ef6868afc622bd7b2fcbb
+Output.10 = de487245207b7cef44fc0eae062b779ebb01a321cdf9a3b1ae6a338904c73b49d60181090562e33576eac1b4873e672fb21b3ed03a85d33fa945d79b46eee81771141533dc2552cd62a5dbe4e8a610830ce203219be648eee76a5858a87ec4fd0c2df269eeeb19aca41a12e5bb1b9c6ca0692fe4cdb43cc9ac29703498999de1b3affb5c3dd97fc5079d6d474e52f753b4a73e51ceafb099dbd3123f0b742f40747ad6e24469aaed5e6c811621233ff2b1bda6bd192f10560bf0a21bf7c107552dc9a1cd8f5b57c914e8c5ded0fe887a8ac959a1ba3247e72b0fa92c89393a56fdcb1b5c036ff75bae74eea36eef1eb3f3d77382fbd35779c0d9a140e17b334a
+Entropy.11 = e679a6d1b23b5dcff91c4ee16d835d21056bc6ac256eb206dc7534793eece021
+Nonce.11 = fcf9cbdd5de03ca1ada6901741bcfabc
+EntropyPredictionResistanceA.11 = 5573dc4ab12703c4b7b6160f6ddae34ff7b57706587ae815f055589b8b7953e8
+EntropyPredictionResistanceB.11 = 38b02ce67075cb9a48b0fd3bfd7a3e7350eea68395d46077505b87872dcc8288
+Output.11 = e6d1d35b3965723278fa9d82c9641ed1905ad64568acf44a2477409eb435b52fada9339a2009bdf3f177257e8996bf22b5bc73b26a65d636c63bd4238d3872c2f7ee3af04503575b532e5b5a4c01623e0c7de72d7aeccaece47850b9e7fd8869868ba304332f3610fba22e45176c49bfb24938eadf273d6243d4babf9c3e039c903991abd8ccf78bd33c4b362fc38460a74806461c822a41775d399af9f81b0060617dfe033dda3dbbd266033b9de2babf283c5ecd769372b0994ab6afaec7c440b789630b46764e98177b09d3873858d5c80fb892fd0d5448bfe104b970aadab9d518fa4b521095a9359e08221b38f6f6e619208277c469146135d6cf3443b7
+Entropy.12 = 5dbf758b12842d7512e98d3affc78f6c36db81a57eda5c6d4923f21a360d6e76
+Nonce.12 = 556583ef6122cbd130d307a2696cd34f
+EntropyPredictionResistanceA.12 = 867dc2aa35939b2c24b146286df71f8e7b6f97ec00932e0d95f50aa191e3b7bb
+EntropyPredictionResistanceB.12 = 45df25ca5b64c61e158d2e9af730e3b326d0c1d1145623a11801c00b64a743ca
+Output.12 = 59bf0c252ca063bf9bd3693f6eaafead9291cb9eff0b732bb749b3e71b4e723b2541e79beafe3f23b19a465094e3f7dff28bfa5cb142021babba0ad0e661b8a8adc05edbcec26ea3c3031c8b6bacab9c1e45823a44fe028abfd6ecb9774965c9ce1630fbfa9b5cc9b25f0442dcf476f5ac957a7ca955402a90ea24a7b69871484bc6c9728c37284a14371306eeee5758fb85ab505038934252ec3a3c521e59383071ba88d0b07a80ad55dda6ce41bdeb594c1376682203adc879f6fa6a615a6c2be2547bcd1f16c0e627a6136a3178b74ae60546c4f5399cbef85fe80efb326f3585409a90e49250181dd98e217375ba628a16cbc0f378ea00b2ddd2ae010460
+Entropy.13 = 8c5c6281ed0611784413a28f02fb9932b95abfacc9be46fcaf7c30a3ccfbe8f0
+Nonce.13 = 44b316b50699b4205c06ffd133db8e8c
+EntropyPredictionResistanceA.13 = c5fef4c4c49ff75012bb0503987be0f60b29b73418fd603ba1cb862944f628e6
+EntropyPredictionResistanceB.13 = bd32f923fe68c85bb4c3ce7ec41d8348fef00f5548eed070501d0d9588635b3f
+Output.13 = eda374654e77b7c189eba72565b18c9aba84546397d5be478a91d67da64c208a588c5439369da0359a8d4bef8e507f6c43c0e7e372ca55442a3f7d236a9038e6cc51428cd095848a8d260ad90cd2626cc14d3f556adadeee29fbca6a015f1b246179f034379b44345f7eb0df140816d1736619d9a10eaf6cfa912261118a7fb81b5879bfeaa512cc3625a2c70494cd2f66e371ef927663cf14d840240c5423369918f20b41227f6923361d8d32ec88a432f6fa223cf8a0e233dd760078f55eb2ed015d99183c041467566e8d46d8e15a5bc1c493bb68e3f667a79c4cf49844de84c6edee5b18a9bbb73dc75902110dfbad3b92467292ffd95ba88c0fe0c2cf1b
+Entropy.14 = 56790ad1ed413fc3decb9322d1558e80c5745b1780b49dc06648222976f297fc
+Nonce.14 = ef5d7775bb70a31d4bba0fb3732a2581
+EntropyPredictionResistanceA.14 = fb4c93b74dedf31319de0be276e4b83ae996dbeb37c8f2c248ebba8a9d01e5f8
+EntropyPredictionResistanceB.14 = 1d268a55e9e9eac24819a0227b03d8c70cef34b664afc8a2fd4f3105f69cc0ae
+Output.14 = f784514ccd4b04d49c473b1f8aa6d0384333a2e96d3471af766bef7e30cb426308d74c920e9ef5b07ca2047ae5a59d9b0dee0196ec53dae0b137a3cface1eab1059785b5d7e443d2203a250227dc1dbb36907c8922253b55e1209f13ed45b83e5baeaaa14dc1adeaa43302a0ab64304a8163463e873c723fdac3ab9669ee5dda2ed8f02624ff0672fa024ac8683a5516b54634a562182427d02c28173ecabba3e5cbc5654d2151a4210cd8cd8f0af058069177327fe9724919a5799ecb2064fbed5827175e1e3de54daf58cd94e2db0dd3e04af167ca93d359ed5b8983223b7e3dbac7fff643188664b1d77d3380920956a9c9ae5ce75be24268109e21206407
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 45e9dcd1bc03910e30bfb6bfae0a9b0013cf3dce9b41240eb17fcb7c3de4e8f2
+Nonce.0 = d8b6a61ad4533d50d54cef8a89a5054b
+AdditionalInputA.0 = 3e33431cfc61eef6f731595ecbc73f4db6fc0db29923db0bfa4ae18bb3e33996
+EntropyPredictionResistanceA.0 = 8279deee64332ab0c1e85e3475edec4679d71e6c79833beae5a0095f359ef492
+AdditionalInputB.0 = e8a03358746082e005613929dea1853eb3b5c0a0e7cf9aa8996d36c3cc32c7d5
+EntropyPredictionResistanceB.0 = b956ddea0f5f93065cb694d64501c503a537f0015fd10409da5416b6b8987a5e
+Output.0 = 7a8dfb68e045e18afa394c17481799e887e49e5adae941060c8342b2d45f7ca86a0b7121d986e8bb2401c6a5dbba41083bdcb272d0874055812a1d446934ce16666cc342ef34197bf6bcfef23a99991b395144305009213d44d880be9d1f928718acfc8deaebc2adde2291f064a278e9359f4d65ae06fd8f208e630cb665512c052ab8075807f27a609d18c5641af8ebaa6ac6749a5309a44207e76d47c20a31dc8eaaca2f87b34a0ef07b5e1874de1d1cd0eec21c96ce9b4cbe978f079a4a5c52ad888b8e754680a3ea7ffc68211a39835159b5e679cebdfd61c205a7e89f11661dd961cfe498cf395accb7b15bd1701e319b75834a7c68ab88531971787601
+Entropy.1 = abca14e49de12b737fa2844da8b108a1a40ce4836e2dd98c72ae3d9313299e49
+Nonce.1 = 0ec22c76d98b51ac609c3d5c57f020a9
+AdditionalInputA.1 = 1003c2ea3ffea459a61befc571f960ae6f00c3eab23a8ba520a930ce44a87c6e
+EntropyPredictionResistanceA.1 = c18fa49894ee7814e9f6ef14542c034611016a412323b05f32dec0ea711d3c96
+AdditionalInputB.1 = f9a756338ebf5b6238ef82a64135f9ca9a6e33a136a0d110d9a6e5db5ed9ee42
+EntropyPredictionResistanceB.1 = 0df32a86a03fb35d38b94b2661f9f968402e7862d148149c4ec55500bcb8a541
+Output.1 = ad1fbbf956867a1812673f8db92dc6e2016691d607327aeef91358d655c812d9d113e8112d60d90ecdf885185d9a2324033c4ce44f44d1d5e742160f8c734178991626ba10a3c7fae13ce1a839421ee8533fb0257d32d7f4d92a07215bfb6be0794eab0b399396feaa5108db2df0a0fe377ebf81da2b9573576db24517b100a428ae1e360565b60a8372c13c253b3dd64f4db1bf5865b92365e4de8ec974cff54f62f837c2a0fec49cfee81938afb52c7ab95a0a85ce8c08e34f432506e87b3e7be61b9cf331e6cc517da5f8a821a6e28f5a24bea32c45420862f1fe9cb48f136d117d77c74b4d922331e6a19dd04f425f744a14136cc35a13cb95491df73a3e
+Entropy.2 = bcabba19d942b09acd9bcab9b268067ebed50a616dacdad8c48446e2ec92d57a
+Nonce.2 = 03e8194f58c3546d473033bdb1cfe60c
+AdditionalInputA.2 = 684feff3b6380ed548d3b3e5708aa1089ccbb42d45317dc7b720c7732af14554
+EntropyPredictionResistanceA.2 = 1daa7de2788ffca1c937388b2ff35b8b2751f3eb9777c7a0ec3360e41aa99ad9
+AdditionalInputB.2 = a81fec415e6333d3a92b01ce2ed32a10479632b5f0bcd90debc6bfd127cbc9aa
+EntropyPredictionResistanceB.2 = b2dfc90fa45b27d8390a3dc8fc534835382b95c5c232d35be9cbf41d1fd54fec
+Output.2 = f3975f116a5daba331a01ffd3a47477ec1cf63278692b7f2d8488f8630587b38ac9e1463b90d36aab31273535cf57bb67a3f6b5208c6f1ff88b41c1c66e1c15b79a8b0ede95150359240fbebedef6c2d05b6e6fa35580c63c0fd9f7fa1566d0a01b824adeb86b77ab35a299364d3fa9935df353dd91e8c680750b6ab595a3631d580a94afe7c93a53a64841bbba1db50fa8b21ada73669dd20f38644e7378007d683b0ee7c6b0e9847e38d61fb10d8a1ab1c6fcbf2227bde5067cbac03e1de66621e564284d192330029ec1eab472575c0002ef06bf72823398e62a87a55ca266c1325a53fc528247294ac1b0570eaca6a5bab96790bcd9017494a9a95496f76
+Entropy.3 = abe2f95c1f7a64712a02a69e4c0f3c61c2456c682cb0d052a69ea15333389320
+Nonce.3 = 81215f10f38301d5ed6999468b4b0acf
+AdditionalInputA.3 = f42a4000481bb883abbedb2da60d002996508aca80d8de5c5ec0a074aabb186d
+EntropyPredictionResistanceA.3 = d975eefb14d58f5924df605a18659105689f44045e5170ccd01693b6f8db147f
+AdditionalInputB.3 = e148e13b02ef8b90a03d4e23f57658b82e4d65a05a280a8bcf44e6d3fb4608da
+EntropyPredictionResistanceB.3 = fb32dd94eb0d8046a2ff27712ca41b43b0fd0ca2914f00d6de28a727925a4146
+Output.3 = 668ca65a9747811610fd7691174decc96bbcfc53208e0de3de6272722db03373e5819c46700025a9cffa0fbc2bfec064e094bd60db5901722f43e27f89fd7818ccdbbaceedd88e23f295d795c94ae896a10f5cd79ab4aa825d3aae94a5bd0d5bfca22ea1111fce8cb316b771d300d1004421150d791964722025da49c69a4dbc741b7242f93b546057d227a96dd2e0823597e8267466b48930a2208f87f284cbc8af84f54bbdb6611d99a43509bffbece6d9c31278d4c11e27b804df41d816e0a558b5ee9a9c893e68c21967a5d70a49b9b31126bf27750e05baa7de1900f7a627eac8d5d7ae77498f1ea94492dba505c77b6de1e8f50b26a84b17afc2c56eba
+Entropy.4 = 28658c2f620e3fe00cf17094871690760451b31f7dcc5c9ae6087c9729b9929c
+Nonce.4 = aab3a8cd1d9e8c8c793fe51518ab8154
+AdditionalInputA.4 = 656d9a0a48acdd0f08d5ee4c5bc60d19ab7918eebb2636880c9ac2e013e70547
+EntropyPredictionResistanceA.4 = 8df2db9d92563c281a80a6ede59cdbbda401f89ad0bd09e4fcce20e83d4e9060
+AdditionalInputB.4 = d25c32bb2a591d53f6960c1dd3d729b3032570db2b1cd1577e7e5fd971b673ab
+EntropyPredictionResistanceB.4 = 6d76ad90333952687312c5e04e77e8c4d3e377f17ac51641f4c11abbe63fd100
+Output.4 = be9fe3121d2f947895f77d73f3668f1660719fc3a458b994b5b4afca9945ffd5254311e699241f6a813d4c38c12bde08df751d4ad3f1775c026c695148a234e60765565d4936ec3080b2af9fe1f8798ffe1d02477251b1af2ed1ad23ce777002bd6423d16a6f0a72aee4e32c4e17ad34d64c740e1d739ade66397dc1ffeadbd59d5ffed69b0659e38858dfd0526486b0f577ac909f312db8be32617937073bfc43a71a56bba288089d0b0c6e8457774f271c3cc3cf8390f56b6276ece2965f5165d3d464c9f67aa1927929b51f38acac0875378bd55bc1de43ff5025bbcfffc376db6be86290a5e15f4667679195a4c43ed77eb0e293992440fe6f1df5e25321
+Entropy.5 = 68982a835c111f870630aeaa195420d7d5c1593e06b031ff3b31c4d817e305ea
+Nonce.5 = 6bd5794f36f6b72571231fa266ba1aa8
+AdditionalInputA.5 = c1f73131d170f348725b711039198624f0f5084dcafb3ac1f0a681bd8c71b248
+EntropyPredictionResistanceA.5 = cba01cc910ec288ed759f5731bf4241bb5d21e4489928866a8c3040ab35d716c
+AdditionalInputB.5 = 7a05c9303bd7e1fad963c5ca5b22a6e2f0096d78b9c62557125348fe51f12107
+EntropyPredictionResistanceB.5 = 7e5930ef292daa020c1478b0d6a9de9fcdc53ab2f82939adff6764fba8ea9d04
+Output.5 = bea6b56c3c469fc8846ab1f30e6aff899fcccb02f1ff7e4516e4cdc0a6b2d23e2ee6ac24cde0b63e3c2c62a2b8957fac13a9228cbbe6ba37caeae8b5c00be3cd390a0beab79208ab976ddb3f28f0d626f6df4667661b3df2c93c65976faeda98549976aecfdc18cb61ea0a148a57db27ee480a07df112bd639444db997d7e2b96998e8f4c1054a1a4ed4bd939a7e5b8bd3625c67905db804f911a8a931c21e2fd53a6eadd8dae1859188456a0197a9bb089584825bc01e679a77297485f15ec113ada9953cc7e1c279d5f890b3f29c973be141a5633c1c09fdb24382176369548c4962e45c015d0ae143971c9c833b7992021bc41d53bdd1b3b4b63757119a66
+Entropy.6 = 4e2772cb3fc43436192e8a6db35c39bc8c8f85e54c7ff8f1feb62327dbb2e42e
+Nonce.6 = 22f7db88539111b39405d3b622530858
+AdditionalInputA.6 = 6e18cde1b77dc5bec4e821d0bf13a208932cdc4448f9b6cc178bedc49301e041
+EntropyPredictionResistanceA.6 = 4edb043a2a18a406b2afd4226fe5b217580736d5cb28877ec6d0f697ad39bea6
+AdditionalInputB.6 = 3fc291b6810950e3170dba7bb6f7bfd90453400b406971f17c7e60faa615736f
+EntropyPredictionResistanceB.6 = 9cdb4064a919fb011fcb184e3cdabc97997bb00558a7094a36590948bcdc8d30
+Output.6 = 7836a8e221dc8aadd50d997012be79ac8dd1e5a2bd319b3fe3c31736bc603f71c4451fad18e1d401b8caa1a4fcf934f09d28fa1c11bc1a72e041001dc5e331f5fe520efce611997c5e92658495d13d90fdd5a9a912b107c9c1105238bc62bc2243a435fff06b6964b904759cd15605113a46d8f8a44bee670b0a233e5226e4dcdea7c09061e2edbebf2451d96ffe1d5222a2c93db28a221b4e9038a243db0b9803b53b52104c590615354d1a54914915518b3cba1c6c7fbff404812bc9519fd0d87382e01e1b595ce627622cf3dd700e10b941c7f5f77bfb2e5e4595f9636e8b812ce9e32a87d0e2e035d25351ca9c94f2d6d1500af895fd83393dcdbd65c5d4
+Entropy.7 = 14d55d17b3df53f8f690f46831b34f1d0ba33ad9bbf92aaa144f267e5ccdee46
+Nonce.7 = 22fa1700031d29b5a931373fd684b8ed
+AdditionalInputA.7 = 8c256113d6b239b8d70fc243db3ef8e76c9e364f123398dca4d6177d94f71f37
+EntropyPredictionResistanceA.7 = 1ab80ddde9ac04a003da943cd6d9deb127478b86358a5325cb4aace5ad91efd6
+AdditionalInputB.7 = f6ae1128b92f109f1ca2920d3c55ac7706881fd00ca03d5a0771189b30a59028
+EntropyPredictionResistanceB.7 = bf39ea3d654a5ff3f90e05a9256f40818990dc574629b9386db0e2e6d79c9d8f
+Output.7 = c0d1aa9a1063dd487581918054d74733c7884d32de64afa8bb53efafbcc68d5d705390b9cfd7f3ca563152f66a2e27e3301009ebce40a8ece606104f615566dff75e9ef36e34812c2001a00a0df5d563265f804eeb8a89f975329a10fba91d61bfc4f78afdd637f0113fc9dea0dd714ac153fd81426e1eb65253731ed0707281719360c0446a2b7c6fb7f7ec8b62e696cc437e9953f3c7eebe38fe3c9c91dfc0455f4bfa11136db985995a96f69257ac25fc6997b14906d14ae6c6ccf8531688ef77f7b79190562ba6429547edf995c3015424b7fb46db580500285f9519526a62007549c368efa068a5bc532b93d07bc2c15b9a2312d45bc034d537c6d02a77
+Entropy.8 = 64e28057fb2e075edfb4ff8034971fb3da8df0d607f7d6f361179f4cd6bdbae5
+Nonce.8 = 6d7e6793a435b2aa08a049b34aa146be
+AdditionalInputA.8 = bcccec94d176af0e0acc7f8fbe996893ffbc98b5f468bc35e20c5d27999bfed0
+EntropyPredictionResistanceA.8 = d29432501c95476d522dafe05364b57077fe185b4e3df7e6d4329db3f6f6da45
+AdditionalInputB.8 = 5ba375b2fef384be5d98541ebb7167a07fa04ce5454f755ff085e8c2ea0a40cd
+EntropyPredictionResistanceB.8 = 16571e0a9dbbb244166c872f6ae7195df30e7d1cec6fea2313401f9e6334ca79
+Output.8 = 0d57132ca22b722a16bd827b5ec86aaf69a233bf1f835ace0de523c8d4ca7912f76ceb69f62c1dab17488077d6d762b94da9e6e622f689a00c81c38dcaea53bc00ec272794302ab09b6456e992509d26ca6e7a40f5097601f0dd30de15aeadbead6e463b7214fb5b250b2ed5a1609c7ce8d27ecf0f0d25edc74afc7b4b4486cb3cd712ea41feee081f8c83c286276fd6a440101504736f4c5ed3d6491bc926a1502febf6be0322611ab144aaa459c8d699c646bb0a159d2e96f65fe55dbdbd19e5228db9a128a1d7074fc002184bb8faf5ba3c7f940daba1f6aa6009c02bc950196a93140063ce130650f6a51c3642e592ef12b654b36b879f4277d9bf1ea0e7
+Entropy.9 = 079a67413cd8e81682fceb54a90b1500453e1e0f8bd3e57163a58c874c06d4a3
+Nonce.9 = 68b1ec4e52c674ea805dba1c95655633
+AdditionalInputA.9 = 8855d9f854397309aa14adfec8ef10b64efdb0eb5ef10241f0801b46cbbf014f
+EntropyPredictionResistanceA.9 = 9c5dbea30efe64c6d71ad6c0ff3bc5e9a24ef638668cae78a3c0ba361a138acc
+AdditionalInputB.9 = c8b2b2a4260ff6d9517b5b21c5439035dc7b63ab071fc527f023b29d72bfcf29
+EntropyPredictionResistanceB.9 = 0d59fb20310d506eaa9f60016c390e58a4cb14746b65cf3c3d1d97ff7458dfa0
+Output.9 = 27c1fff4b1f7af9386263a1d7ab31833d74579c5bce309483f2517b8308524690f01a6e4c24982c403279ee505d2931a0d3ee2b11c8ac394eb7698214f856cab039c2ea53606d94d709e64b0aac9e8bc5da196a959e744787c30dcdacddfacd0200b1b6bacbff5a9ed6f2de9bdc71f066582ab9379b0ba9fe5f81359ebe7e55043141ca8607d4a576e7da3f1580373fea09328bbbe6411d666de1e8952cf23cc9beb746c810bdb35518a239ee785896ce65030e60ee7abc21c60091d8d57e6d35d024834293f21aaf1e1fa4fa2f59fcb490c8c6136daf12697efcbe503eda3e297ddc276284bc5226926a4dbb908d364ec10682be9ff862e0e0c7d5c212f619b
+Entropy.10 = 27081981633f3c292fce563fe7fa39fbefacb3cda522db9ae00afa19d1b88dcf
+Nonce.10 = 919472f4e4c674a412708f542d412ba2
+AdditionalInputA.10 = ca3ac04fa2899f7f9bff2ed598203e987d937bbcc13a1189b75450197f8b941c
+EntropyPredictionResistanceA.10 = 4e9f92550349f12c5c958a3049fa4bdbd95b90401e257068fdbd315f9e22ddf5
+AdditionalInputB.10 = fcb1ec3338b67c801ab0754ce0cfb5d8affc5aa79dae8ca98de196056a392a95
+EntropyPredictionResistanceB.10 = b8eb3c255f3afb110cc02b6a2acf09e4466ba48fecde753cbeb5b2492fc09167
+Output.10 = 9ecb8de41b5bb112c87e60c2a48f53db1defc5ce02ad1c42ec7245b986cd8c51f9ec3cb312ad3c5583b6e7b9e4ddebe8598047cab6fb92158f4fe528f1f3298f5023f13a4c2ee155cfe4558b2ce9f7b1cb9c11c8d9d49e459fbc4b311fabbc3bad33bf1208f56c1a0addece53837693443161f55c9078aabd5543e7b4e4bf5ab977673086007ee3a5e66cc7e950028bf103070b5a7337e94d11551ea4a2d1b55bc2e962e8962196f8f8f2d86d584aa09a45859d999994f528db42605f63ef55802cb6892ddaef4c3272daa2b18cb82692d76091b4c90dd04a8bf0d84996a44e915d8a3cc84f24f335c1bbba17ace199159ee4a9b487041f7b5a95882b25b377f
+Entropy.11 = a0f0f39cf8f9192deead785c0610f1a030f2f7e5b8feb0cc29ccd3b71cca9450
+Nonce.11 = d9079ec17654f655dbe1d5dbb0f46350
+AdditionalInputA.11 = 3b091cb81eaaf64874637c38b4f14813c9df1138bf4f2ad5ec08a01283bce89a
+EntropyPredictionResistanceA.11 = 3fd50daf3fac1fbb4bbef886780ccdd025847d5c4eed83683c6206fd6fd2cf9a
+AdditionalInputB.11 = 046486a08e1f2a049992ee3960849f1a0e20d1aae83d97afd63ecb6762099125
+EntropyPredictionResistanceB.11 = 3893091765d275be7f232e9b2ca1c53e798837d9f28c883ca141323704ce4c35
+Output.11 = 28ced94aa45d536b52b4b155bda5164f595ae350b27572585ca09f90f7006c54d78652d2525784bd29fd2a0bd66fac1e22bebb850abe69ce1cb143c44d684c6abf9fdca47d9ea4bfd410220314de468cb52bc2d206ee72e75d8cf8716e29680c236ba25b0a1fe920464aeeed84d35f8dd09c16fdcc65542be8e644d7188c094ef90dc311dc22a97aeb02bc043e67899b963af17a7aa6e8c1593967195261d8c4d8859b0860b2867d15b26515c2e8552d3da7db70a0b934dd88929ea8533f9f424fd2ad644aa3f696578c2048e3d4153303f5504b33007ac2a91662ef10ae8cf3274f161312ce79c0745139c3355cd40f5468acb840d49d15e37e9f9a2a12c826
+Entropy.12 = d968ed68cf95dcd630880c0a6e2be8ba9d9070a9d4737c86440ae5cecc633b28
+Nonce.12 = c713a40332fcf76f7430d039e6951544
+AdditionalInputA.12 = 174b697e2b7247f8f30be75d79d082d48fccf27cd538c5a735d782845a156764
+EntropyPredictionResistanceA.12 = 3b7a7a939f0694a74bb0a6c2ab8735b970db854eaa1a16d744fffa06fcf2f4e7
+AdditionalInputB.12 = abff5a842d93c502dda2e2e53bbf1d73f2858f49c1e7c29ca1db8e2674ebba7d
+EntropyPredictionResistanceB.12 = cf39240bb9c639230c756b18c300ecb4353442ae02ce9467c9de1cfd19086579
+Output.12 = d7874a40a4fa2109f754a3fb18249dceec8832bc9a9f7485c6414ab338bb6b1f36fecc2bf3584ed441be74372ac8769edb83087da31c9c0cd87e1c75c4704a4c1c65f514ac36efde41250e8dedb0a6f45ca1d39e610defbe938984b5675e13f3f8c905e9ce637abf08330b5e05dd0542d0bc52a23570fffe4331bcc9b9633068c71d317f1684f3107e5805d9e215d3781db00eaa6f18212c6dc8b514c28194af403c3eaf0c9d5286a37243a9edbb2426404d6b177e7f0bfd391e6c26a1b107d24b32e2eadd0b2b500b7ddf1e317f7720eb51df35fe7e830002a6840c7ba7bbb08f061a269c2666d18b25b6ef894b607ce905ca2232782952cbb65844ad9949a2
+Entropy.13 = a2dca769cd51876bbe5ef806bb8caab7350becfabebff8baac21efba673c7b83
+Nonce.13 = 91160b3dc87253af72bb42a9d6279418
+AdditionalInputA.13 = 8d1fa4d55950ad3e3dbeae2d12de7b2b4b5410224b832d5c53c0d585e08180a6
+EntropyPredictionResistanceA.13 = 8abcd57d0cc2ec575bc8afee1fac23ab9d236b1dd18c3a2f7a5a41697738e92b
+AdditionalInputB.13 = 213c081659853decc51aab0b3c600f222eb999a35ecf8deee03aa925835f2013
+EntropyPredictionResistanceB.13 = 03dbf9c9aa91313055affc323d60ccee735be8c4655382e91a3180011a96c0b9
+Output.13 = 8d004ad94d39202d57ac5d7c369180b16f93d1c76383d376a264f12f2063ea72b12ce95fb76c3cff812a348544c5f88ff69d22b0d76c54861d873b654e4e9b2594dd73ccf3b56e216c5930268b1637261e5aaabd67c2c668ccfd7852f0f555d09e0bd0d533828a75773b94a8b96f08c7e42790d7440915da3390ae053fd845e7eb117baeb55b45d280e75167d6a9b46ef5ec63571e92f3974520e4352ce01c9c2b23324a052afa76e6ccbb3c4352c3aa8286992c1f88f51c4be1e4e60ec1e8aae40bc74de1856485d4a02272ffee3a1ed1ca8ef219b888eb6e18958f9f51289db23a9137ec298a0f5e6b7d8ed3fbb6a10f7c43315dccf03ed9bb7219e7e79a0b
+Entropy.14 = 1331c5f41f10de32d41f5901755cb8763f26a9cac02ccba1fc1e4bf83563ec97
+Nonce.14 = 9ba891853a68b13027b6c2a17aa5cd1a
+AdditionalInputA.14 = 71c8560342fcca7bce506db6a9739cc86335166e10cc33160ad66b9c0b4dee60
+EntropyPredictionResistanceA.14 = 60cb842de035a256fc297e254ad663cb0e474e919fc2b4800cf69a2cb477d274
+AdditionalInputB.14 = e5288e9ca2dde972497390a51d83fb449fb409c79f77b2f6430bb0a64dd5c31f
+EntropyPredictionResistanceB.14 = 71d6bef0bdf83197b2a894c612e34681ceb7a1a4d1ae1fffe20467d4f30b6bc7
+Output.14 = da327d7443f481c9ec27d1d6f6c55d7e5ce99527ac66a1849ef9be981aac9723d3401de9dfba7c4b62100e9584f14d3c07c958dd3c961818c649f5ea088227d2ac0648ae82e771704bb28df21fce49bae4fddd3d76b6f4bb6668bb2272036d9a90bb818ce256b877ae0c7b37c8be909cdf61a741d5ef5341fb532ab80885f3a148c9a416f886776aaeb1f64feb41921da2c6ebf37969a920d00d8a508ea8f436a8d7639162fc522433ef1acef2297e32e8541da6aef2bfe0f5605345c0ba12e2ac0f48a1f49d6f72093f064a82156545aac915302ece0644ffd7cb0875c6bd1c000097a5bc3193d4602ad55e73aaf54bd48f6d6c4049f538df28cc3b3273f2be
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 5a83fe936f39c3a53bbbbfc772a075762b0572d612db517d30d0fd31e44eee0a
+Nonce.0 = 53ab8ce8bd062b983d37cd39de0bc3c6
+PersonalisationString.0 = 0980325e606e32cfda8a2857550dd105d61bcfca85c66948abefe894fff979d8
+EntropyPredictionResistanceA.0 = 50327335644f3411213ad2f29935d157fd5a379d755de93715022db0799236d2
+EntropyPredictionResistanceB.0 = c2b10384696345b8568f6a24e26e488a9d10eac809bdd80cdf4722f4efff6f53
+Output.0 = fcdea47908022b955897c359c83e4cc5396ca9e64174414d91bf55407eff8038ece61c5f2638cc419d9e321cc85412eb0ed0eb0b0e655223053e90222a0964bcae75a4738ddff156c88840a40ccea7e3fa98d0f3c16e74e2956580ae860080323abba1599ac90c2b3724af59a0e6fadef8af3e654e9b689a0b63ef716ca864e02ec0d2b275ab6d18b9907c918ceb4ee6ee9d1ec9fdd7be8b2daedb390dcc30c77779219e739874853e0de283952e2d63265c47e7405e3e6a91984ae9d75c88c74661fae2a241beb872a70c36bf10f8a12d2206245b7556694e7fcc4c0d2d893657d4f65c4fbc27e7ba52baf95ee6c9e87fb706f0707d6bae4d357977b58a6e4b
+Entropy.1 = d7753b3a4bd34caeec28ce3ab8a2a7e4a9e94e0bf7791aaa3391bc1a36397ce4
+Nonce.1 = 5af5c195bb6d3b93ef090349dce981d6
+PersonalisationString.1 = d9b6197e21436e160d05f8a8ba0bdf3abb8b842fa4649f2db67ce15840a1dabd
+EntropyPredictionResistanceA.1 = bc790083a5286937912f0a012ae24c3a26aed4dbafcef8e5bd7c67e06caf0bd3
+EntropyPredictionResistanceB.1 = 922256de0bb9b1af3a7fd4646cbdff7d30069d5d027449fe73b19be530dbeb51
+Output.1 = 2c4467a3c187c87e2d9d07b3b8a0c4502afd49fb3b29055264aab11a185914dd7131596e5c36b81109c608a50ac6effd8e04e598a40b94476ea7a408e361c96cad1b376919dccfd8f0a558f6282391f794a2e32f7af874c0b17b9daa660ace2db1d59b0ea410018c384c3b51b1bed3b74c5570f74624f0ca13cdd55d2aecb6842883f1ec62f92fb052aea4e17a9184b64d50546ab3ab573b59914579459c3922c33ad90cd3c9fea000ec2450e24f4250de8188fd19f5eca040f221e0e0f8fcf5a07cea8fd0123bd294293728dc376d4dd49c9a0cfc83b988e1969303c7e7d64a93689dac1e9be8bb10dfcc2987bbd25076556a602463c25bb0c89803db6645ee
+Entropy.2 = 3bbc591b87523d2b0f7ddbe6a223478d98fd0f6bf39a85d648f428bf1e5ae2b4
+Nonce.2 = 6e9568b233446c3352ccc813215b47c7
+PersonalisationString.2 = 5ac224ff6a73f85e7c2a5f2b99bf83781611bf6b5653ea90109a68a8b516f019
+EntropyPredictionResistanceA.2 = fb60b07444624fdf878552ab89974e393de7892f1dd706bd8fb0a75f1415c96c
+EntropyPredictionResistanceB.2 = 48c4cdac7285ba5ea6f66975b6bd612aad0eff5682c49ac4f5805caa2aabb075
+Output.2 = 18b84baa2ff95cedf6839bc5485cce9442a7c995267acf96d08dd8913c2713ad1e13a2775620ea78521048e32e90811a1085f194c4325cc0f1e1381d0ded5f2ce330aae728af5eff173c2e72a9d28b506dd1c1f3607e8489c3437c451efd7e24d8764715690fff566bcc80dbfb21c14537d8ee97de07b42c73550ef55b7040a48fc23a778f261132e7cc2ad5e387b6318e39352d498ec941c81e43a512fc956f987e5ebdda8f10caaa1bf7498e63d16466d4f35936ea6f6b82878f8994c01389c0d6ed62bd61c3de496ba632c37e0aa5356a534725dc2f2337e57588e332f7c5b9e21dc347fe7e4d6bba860125125a747a71da070455c56c76042c932b60824e
+Entropy.3 = e6de53094214cbb4812d6552dd543331ae6b0ad69911365a6fcd36a6e4a91c2b
+Nonce.3 = 7439ccdb8c6e8015e5eae3c1e67ba567
+PersonalisationString.3 = d804e0ab6685575287809214b22d4db9b73d4cc356c56f67daecfc0644cd39df
+EntropyPredictionResistanceA.3 = 9cdd2193c0f89fc4b21389f2b16af9fd394a4b7e842c96a1b881851318c0534c
+EntropyPredictionResistanceB.3 = de287b64155c1d46e4fc82a80dfcaf0484917ff558191015edce93f6ce19f9ef
+Output.3 = a68be737fa4ed45ad16f60043ac2bc9b03b8aac9d4ed38422882c23baf46ad42aed4a2ae26b1ffe10412bb4bc57f3e2e26f10caec04b71d8bf084783b6c94d0a128dc7171acf8fab5d3c72a5fa20b2a2b26c8ba3fca656fa01170740120d733b371fbdc319c83306fc515800c0f753d038c291018d8ec5465c1e52204f04481d77888d74d0b40d79772d22b4e6aa24696cba1039dee322f50192c5eed41b12b3f900d6058e2492b276d638451234a797edc757a26eeca144194621e8959f1459d4ee1917a153b05d6c602a47ce8347e19d066a3d79c5aaaa2d3a5237ae1a42f0d2e76c9442edcbe4b939999b435b6df9e44e2b0a6a494cd86699f607bf875ef4
+Entropy.4 = 47455166650007eb34e0a6788d84336b2f5e4589cb7272e0bfc471aa0c52e525
+Nonce.4 = 4888359783a5fb1c313ac587a154b48f
+PersonalisationString.4 = 8cd963ba1c585f2eda8af52392f3ab6f93e0c09b95c0edbc48418c27acbcf7fc
+EntropyPredictionResistanceA.4 = b362026afd75209a8816fff2bb96a7dee4c93742ac51628e40025ae2ac1db3c7
+EntropyPredictionResistanceB.4 = 7295c2bb5ab5f8cd8e8de21b8fc37d7663a3a009aec3a88bad32e4c47c06cb94
+Output.4 = a63bdc04bd919ec724b6eb0a87b63b034ec7c72decdf1955a9458ca60ff6570fe8def725a75d3b3af2382e16bb772e05d6da3ff3ae8c6ee1a21df0aa4f16fd3e88bdf5362e22f550ba94226bbe603a7ae2a15edaea21de6507aa265c22d8d42e19f26345fe20972f5c02b2894b5e9190c551453166e0b875540279358c782d16b25182bb32caed0bbbbb5e08b052b3b373b6dc26fc0dfd36fc7c05a33b476ce68daab0970ddfc38e5d9312f6dd9cf1ac6b9a8166b3d61fa610e89727f885eccbc2f33f0943417a8844e7386f6c9667b203d8c2312f741a1b91a2c0b798e9a4e07b353e3d4bda692319011d81edf21773c748962974dfdccbaaa3a8fd29ca5ba7
+Entropy.5 = c19ce7c1a0a19a067502eea2bb9a0cd86cf99004955003208fb9017b65b44a08
+Nonce.5 = 2a089b82d9acb892b3f512d1e4fdf190
+PersonalisationString.5 = 9f72c41929504937d3139284ec9e238fbdf75012810e623c573d9e8760b7a32e
+EntropyPredictionResistanceA.5 = a5eee1aa0d29ef196fcb6ca3df3ddaf139523a4ea5081de4a852bf3015a44b13
+EntropyPredictionResistanceB.5 = 3a1efa25af52a875f095ddec30bebda2a0861cb8efe2edbbc0fa079a96590588
+Output.5 = c5b4c53181fad3e79663e4088b5cd165516d3b5422b23898c62a8a5a94f9ff6d5b516e1555d02ec7287150c1a56a030618b58ceae0631ba54bc122749fa66f0fc6b0c3b3a5d039bc2126bc367911e9a6458fef3702b66057234ca9997da47189689c175c8ec1ed8e6fdc72da8c1b61b852ad0a79fa08f9e7557e5ddadd7896e09b113c8ee4704ec3276d05a7b31960af427ebdd2ad21726d837a51404f28fd9da97afa5736ccc87ca0f1a6ccbd39888562bf1245229b118f0c7e16885371963cafac1e0684e3bb6f4700736df18d1f7a51bb8a04a9ea31a52b326a2b8521dc8f13c44df5a238141d1f948ccfa9df0d0c355a7d1d4d703c739ed2745be56f231a
+Entropy.6 = f566305983a206c8780f9cceea4ab774a3f01485919be03faf5aee1862b35593
+Nonce.6 = 13dc6cd5540a364b0e84d661f0863b59
+PersonalisationString.6 = 1cae994769230ee958db6e232f83303acb770e2f4ba1dedee62b716804d4b691
+EntropyPredictionResistanceA.6 = b8ebe7c7693285f65649e6f94f5860179c4782238377fb44e941be992197eef0
+EntropyPredictionResistanceB.6 = 4a4d7f6c7def18672f3f4d040a2d1db6b2b2e5fac95e2f0d1f419f9641787095
+Output.6 = 5d906b907b63264dff46cf3187af45af15c02fe508cd9f3a718e6e7ba9550723c3406bc71cccf8d95984d19e52452a9c07c2c4fbe9211f63661f47f8ff8549d61a7d33f23fdd06366c0955774a93de5aeb91bfc8df04cb8fcde7902ef9db19e2a80efa9b97e1a6d9b45126266366204e835e7b395f3662b09f03d18a3f43fda69b23177211ffbab5201c8edecab510af58bda7197eab42c4891146a4307324eacfbeac6266fb3f7ce6d285fd2ac4ae918f8b091221313dc1e8a489e4370fbc6a4079249d031cc6465abc190f33acaf3a62830ea230ad45053804b23fcab966b28befe378ae169d71b969dd33c5ab201732063384013a95a828df6d982d4cf350
+Entropy.7 = 406104a4bd0cc62c8b1f67ec2e2b1543373293fba4fcad0c1e1223edfef1cb9c
+Nonce.7 = 44baf607815c1c8684b588769bf45ad2
+PersonalisationString.7 = 51a4a32db2548a088b0a9da60ac1fd75899e5fae3ab1ea3094857f653f423868
+EntropyPredictionResistanceA.7 = 2fadc69f48d20f16ab6ffd06cf9821fba6995c8cc9107a074eff0cb5ad708442
+EntropyPredictionResistanceB.7 = 9694a5f368d8d611aeb6564b03169e8298a6cb2334ac744a1b300c35f630548b
+Output.7 = 3651f83b6808bb1a20a275d3a9ec1224ba742a94a5f8b687d6fe0ab68fab12eb54135ca02b5d783760ca99c8f5ee25251384216714de35ae84ebc345b1c5d9fd33f42d5c886a5ca27bf3f0342474bb7bf499af9b9c8b8a66985e00a8eb99705acdab9b8cc0c9838a0e26da91f4c04c830e8fb517d51ad8690e60a5cb94bb0b1b1e8868036999fc2262081430580a85797ec7a9e127e60a29113446508fb4006f7c7519d569b8aace9422e224f71c8e59cb6ef5b40d1e2191171ebc4c65bd81abc00cabaee55367672f0577becc6090ee43b944350aef948bd650717f512a4178e2086d2d3aceba000f3d8ccaf63af88b0ae2167921fb56116e5d7ca4f283dfb0
+Entropy.8 = 1b92c4bb92fdcf0d78451793f66f3dba0d6087dd0cce5c052adaf931eb25cecf
+Nonce.8 = 4f71bfb8d6637980e072275e79ea9f3a
+PersonalisationString.8 = b0d1169ce46bafdcc47f06dbb610242123851e99d307aecd0bb02fdc03657abe
+EntropyPredictionResistanceA.8 = db865f019491740107462fa4ac54134729beede7c306488e99028b36b3fb4ed8
+EntropyPredictionResistanceB.8 = 5979032f4f5c5cbdb53dd86766575b196a144c6987ab3b6cdc114ce28ebfc29b
+Output.8 = 237a862c60c82c50a92eba699eb7a8ccf09ce9a5f6923450c131fb793238c8dc500d932f082314b33e7bc1e2a9f3a2e9c1bd388e91c80331ac56ddc23896f8fd050dec7775616b32706d5cd69c8cfd370b1b571811ebf6686899fd962d0c087c571bd0c7c38e6be61a1b0cde4c006635f78a728bafe2d2dec003a59ae71f2bb98a87bf78c5b009d505183803c6711413a1d8380cf4ee04112404c46484617ee56bdf11ef41e37af30bbed769f78d31e79ef4aa2f8455c898e8828eafd53ffe5b0cab7de7c6684ec25ca14aa641a3cd94933999ef57e191475c45c026080011863ccada391466b377092c1a3cf2f6c40c997e8e491fe2a8afb670ed1268ff96d0
+Entropy.9 = 9d008a7327321c06bf0346ec0e47e6dcb1ab7c3f58e8f2ff2b38c28128c8ef14
+Nonce.9 = 108df1d7580adf5105423e5424e4c11d
+PersonalisationString.9 = 4cb46e8d0677a5c2ee4c852cc75497060acaa936c706c0eea2695d506db0735f
+EntropyPredictionResistanceA.9 = b04fe29f35bb868caf606067ff80ca877482df1e529a080d5a337eaaad027102
+EntropyPredictionResistanceB.9 = ff93628dad15dd866484b227b28c5555b5f465ba20f94db53b965b364feed209
+Output.9 = 780df5ee4cf2171929ed5583126dc023aeec965fb469db725aca190e258c3eac5ea1f67fa6000f1b52de6bbfa555567e3bdb3a4a18c12cc2e573a66a078fcaf2fc44e7c7518e1eed6419a2ce273334b4941597e1b0502b027b909c58f7d2502f310a1095ef04ede8672ff723e796f7abc9a3e362f9262a208128c13b48cb7191dcf87179477db6326903267b1a54a2f132b44fb6389715c671bc2aaec122cd9cf7d073c54930879897e1cf07516cfa7d4803cd52e71854087436c85ec8a5a9ce44c3eb5e06a7cc3196acbcb1fa66b1af14034d25a945a314fe630ad68c01ba9fc5af9de5b727043c8d3a3648e9195f5d00557477fb5a9bde3d39ce664258b176
+Entropy.10 = 8eb327fc5112a5695780a6b991d9de0cd4cff0d458cdca6f138a04be8de4d41a
+Nonce.10 = bec22db631f1868245e10b3140888304
+PersonalisationString.10 = 8c7382022500864d9a6e50846795849a55c1d86b13ea55aef302dbad234d78b5
+EntropyPredictionResistanceA.10 = 0ede202a16e3320ca4fa539092bcfee3b46b7912ce68bd131a6bf016b7a824b5
+EntropyPredictionResistanceB.10 = 09f8254765ce2e138fef5478f1b400240d1c7ff6d516c7a1d4a4ceeeeb1ef4b0
+Output.10 = adc68cd6b596b57e9015f31cae4e6a9d84badf12b41817bd94db0628ce2e581141fe848e6cbbf468c6fa3f85bc56be5a624e51db09c1eaf8046e16e8641e81af6dd30f9f5fec136fc1cb9c3005cd39928522da14db8a5f4e415196c07e5560ea66eb8b544ab873db326e2ab9333dafa137c06bde0e6f837042d876110abc6505c680b3eef6b6d10a2f098d165c222654d2d6288b8e212ed5a8d58307e7a129b5e072b852ec943fda1f1a3c6d063efe14c599c8a5c54e1ef0d74fb8eb5a6ea8a091a03cce887a397c0efbe5382fdf2a99787b52b54f4ea6aea87d8c67bce91d2afa063d91991416f3f266f234bacba19d45c2d9f7e566462bca7e9023da7eff58
+Entropy.11 = 3ca1f1908aadb6d42ecc731cceee6acb4687a9a13bf93272e66aa784c2feb587
+Nonce.11 = 7419d61299946331476c9f74f4847af2
+PersonalisationString.11 = 41fc9622de5899f25dae2a96f213d6a5d5cbae585306232a65483f1c704f47f5
+EntropyPredictionResistanceA.11 = f6c3a0e12af327d344dbbed64189789241d125b1b608feed837dde6ddcc38022
+EntropyPredictionResistanceB.11 = 37029b38467b6fd50f765baa64d1e795989a79180a0714b023b17b3392a9cfa2
+Output.11 = d8a9e54a5fe2661be41386b378a669668ed54dac0adb188f85b36e3153fc0d83573fed94d95edc9d806e9bedc564a7c1fe6dabadd0ee8d867d01c8048b9162566fa77c9429288662d77ea87099f21787f3ec61731fd3836c68eabfea5e383414cd89ccc61b2012aeb994b9417ef290c9dec46281c5a3fa0d87188a6201e4305673b8bfc6fcf3297625916cd2c9766262ffaf216512abc9bba754c4c4a62c91d8105f6586748142ea4a37ba2d61089fdef32a684daa526bb58553d62fd99bd301efcd70e4a057aba96537069493624fc19b9ac55c3647c46219992300891204ec4ade3379b07b552d39c65eb6a7eb9ad216cb2da5f73b75771baf93125aa0b5b9
+Entropy.12 = 7b1a2af64d4c3cddcf5c2492aad161f6a5b9208f73669029a889198c4cccc44f
+Nonce.12 = f981fdd70916865b6ad4e5394274eea9
+PersonalisationString.12 = 8e0a7bd837fe38df76dd79761f4bf4ec824402692b5b10996bcc0d652c6de6ac
+EntropyPredictionResistanceA.12 = 44d4ca8b1c56e0e3eee8b18ce7e52057e47ab107b9b574655e5fdc91d9800605
+EntropyPredictionResistanceB.12 = bde8f8d438c114bea008bab05be7ac796c086bad5b25b339c5bdac572acd6c77
+Output.12 = 48721919c2a984d81a3fe92d130846481b1e05b393cba2e09a1e17fcc9ffe7a444be0a79eb8af074d7cea4fb3a07735c545b33c73a78b8ac188d165226f2746c4875bf5bb05ff50a3c49336d281f48eef7dcc3983d0986508b9d5793945fc2f0808f7004c8edc235ed910c2b6096eb7d001a1226f4b28a3dcb6065cfbe7332e1e01fb2d061fec56d26223b4e7c9d78687e9534b66d84ebc6d66b7dc9cdc290bb84db985cfef7e91da27f10c9f5e6102864071be44f5caf1ec257886f82269c4939369a04fca358594faa00d463088a04c0e658af4b8c77627ef1fc24fb2ea670867e16b1a2a47c56efc32ad86cff312f123b47fb3f2d9929433e3aa301833363
+Entropy.13 = 68fd25aa5e3b0cfca71a683c62048db15bb2a7187e3f4467173b3a627923f56a
+Nonce.13 = a7535f241e1bc56b56eacee6e75fe1ca
+PersonalisationString.13 = e254b4ec4520e818ce2daad3c25488cf42c57feb511d53ddc6bbf72887267959
+EntropyPredictionResistanceA.13 = 49f1accbdb35bf996c43be9e4bf4521a932b2576afcfb4ebb49fdabc87c1bf08
+EntropyPredictionResistanceB.13 = 229b4bc08f606a1ff35e76bdeb4d73052a93eb3433fd680c46d3eadc3a888169
+Output.13 = 3973293a6270b3cdd836ee28db658d0a7f6af3ce015befb2d03e2dcd91cc1991f549a7dc1c812abd35ff39c364c477b0dd8aabc0fd3e395f94eed2ee8c3eafae3a0786ec1397fde98a437b92f2ee91b44ffbd1cd87f9fa32d9dd123e862c7d1f5152106fc0170250bd9961731ab2d65beb04cec660c932607caec32318345f73de49ff610dd6413b1c524e4a2aaf0cd9a45a13b5131970ea29ce8f44dab7bf8f6e7d189b93509b9681b52abb776ba8b5dcfa956779035d494866a8b6a3be7c128197a9d42adba33b47f00738f88f43a778b51a9721f2cb9f0ed3c8ce67a665c0c46acade70364c89dfec70c0090e5c7d4ed6e7de70edb43858290c2838ff1362
+Entropy.14 = 438c4f8004d60bf9710bc661dd2778f53b89d02f3aeb34ff9b62742eaf9791bb
+Nonce.14 = fc0da9b023f97ff6821066a46212f265
+PersonalisationString.14 = 2bb4dcfaea8e5780f48c11aff0c753aa65ad07e2f59cf5caadd15c647dbfa746
+EntropyPredictionResistanceA.14 = ee854da73d009998f28c1c218018a5239723fdf09601b23ef26aac38d483fabb
+EntropyPredictionResistanceB.14 = 10369aa237875935a56ed543c1e7c49d0155363dd721e52b2bd6cec88e59b2c9
+Output.14 = b2771696b82b8b97ccf3d5799708ca27342b20e273a5f6fb6d6c3482dc7e0e3c703dc8bd0fde74743caac22005865ed29b10bd78a39ff0ffdb5369fb1e4e51ed929c20db0e260d73f1f7d98178cddd37aec3d2ef9a1c475e3caa7e8fe50e56defad5b86018936f487e059c0185f3f5f3275e847f32e6ce3b949ffcead25735bf17b5e5a81749fd64b7a9b9c703a5107415e712f80c8ee9e18da906adeec1547e45c316fd1fd009c8d6f4ab2da5c798bf9e23ff6608b29c6f14c34e1aa719a5889395634ef0b06b1701c855647d095ccf8f15cb442b318a9b4161df1e923061ca0f99aa9545b90ee2d83d87fc0baef059deb687bb23a7f8ad3ef36ea13f02f623
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = cc4aafdf63718a924d23f17a8ff7e79c6baf5e5bdc1dad594ca93541b69a08ef
+Nonce.0 = 270afd9f6fdea15bbb877c2d8a86286c
+PersonalisationString.0 = bfb2ecf4c8314a51abaa388bce7b9a2b3ea8310dcc0534502b5da2ab84401822
+AdditionalInputA.0 = 0f3248308fb15fa68e195b853c7751f04f665a5d32abb51f06e71734ef54e348
+EntropyPredictionResistanceA.0 = 7f884f0dd736eaf61b09a88849df2224448fc5a8c8cb92064c0933b2442eb9a5
+AdditionalInputB.0 = 7b5e0b6ca28dcf4f3388d0dc223579e363b5969f633c90a60b4dc0edff0858ae
+EntropyPredictionResistanceB.0 = ae18338594afc73112cc5926c5ac90e24a83fe2eaef5b846ec7ccd46fc556970
+Output.0 = 86cc054b2cd088c72d9083bfb92121bb72f680557530a75acc9122b94a9ebf10f774842955ec0313ba1ccfae4f8232698d5f2cf7ad39c355d4f3d55e56c6398ab02c12558a39ffed1d01f45432472fda954cce983eb0408f6f3f506ddf2ea64e38133e493b8fd3a5c250ca961a88cac033cd587549b3257833f50ceadea8f4e19e5b6d81b1ba5d3efd0088325551010b592a8e471d9aa20a758f5e023f21663f13d7976132ec19536ddf919244893cad917d3e17d70482bcdd789317aaf9b8638bb20903b9a82fcc2b2f17fe209281c7fa34766dbb00b0b1303d6e0b88bc75b1a13116040cec6bca40cc26603050a9ff7d70650128608f7f378ec194c4d970a7
+Entropy.1 = 546d6a33093b4bbe27fa2332ce55a2c1d55d81f6d8f71d81ab59ed3fa6b0a2ca
+Nonce.1 = 1d9d270d86e379cc31435ae6b6b232b5
+PersonalisationString.1 = f211495172d49303d7088cc85b2d41d110ed77f56c33e3b6fc449d31bd6d7a18
+AdditionalInputA.1 = 5cd9c97c9bd4cc0bd81af31a62cf0ca8c7e79b8ab8929d00c2f2f9ca4344159d
+EntropyPredictionResistanceA.1 = f4775d4e0308b60faa6986a7554dff3d9b86720901bf44b25204c326a752ec7e
+AdditionalInputB.1 = 96063febd27e9745ee61cb756b41b1853a7f9f6ec9753abe36c1f0da838beec8
+EntropyPredictionResistanceB.1 = b0b5877079894ab2d8d3bd3e146cff3500bb35b286ecd6a4a16cd2be8daae7df
+Output.1 = 158d674c7dca4d30de7e934499076537dee3af0e5b56d57213d644b61c3d09dffd6286a8cdddbd5f594b55af42fe25bf0fcebfdc585d1169af0da11b9e2e6133f766a68fa9d9825a1b3427cfae8197676cbbd5c5633b86b348c16a2cb99de554f37f2602acd59c9f4b29a28910114ce62b13d8b00074206d6410303fd275d69c7c4020afb7d35f7a94dc53cf91085a662058dc52389cab2e8f4c3e2097da1e8672b9a1e40bd1c95d03aca2d597a9b3e79cc4623d91d1cdaabe60599980ef6de961e952d2a7444882c7cda6de342dc66c79929a9db94bde79c1df228b0b12b94727ab98a309b484a14f6680c6f69409ff019ef93b38486320b6ddeeeaf386bc94
+Entropy.2 = dc62c15cfe6e76724c492833a7cd6fbc6c504b653d7c852833636dca014ad826
+Nonce.2 = 2bd0733f3f904b503e2c89e04d512976
+PersonalisationString.2 = e69369db9270ddee8d53d86ef9acfd993659af618ed169ee1de9f9a0ae5e808a
+AdditionalInputA.2 = a29ca66411e0d474b017d285d70967d0dbce24d606ba7b2f5a28d95f6aaf2971
+EntropyPredictionResistanceA.2 = b737cd8c550839ca075bd563f142c9bc0b06cbf4e2a3f010e5320adf6f679511
+AdditionalInputB.2 = 89b6de7eb229fb7fde5e682211a3df37286d814f62a941c227303cb630a9470c
+EntropyPredictionResistanceB.2 = 94b120ff5319edee0c1e0c421e2453a61ec3d41543d7d07dc1a6646a5230d818
+Output.2 = aad863af80cabb2926f4fe88e70ba3eba3a78ab0c39b529e40d5078a1b31313357aa23fced2d55bda199f1f50c3ed6e84c35321a84cd581a3c4a6ed3f06f836401632a17375caf1f5bb96c8f1b3c390f32e3de0d81b8746a8ff8079bf757f22991e7c26e4792c8e9a04a6507bb14a3d2bbf82d8669d19b79ee19b1de4978e044aa537d8153f4d007448e235f4b6c1f0ef7d4944a2080cdff8b5353db8f4bc2c83d868b3742540755285ef44737f2eb0fafa5507ad254ea80c5ba0d731583413256c9001a0cbdbaf5516019012bade37d666e6518fab4ff9b184caef876a5b02c126ee191f6638ef06c6e937eeefb16532341f2e717a8f9520d12cbc7a9037329
+Entropy.3 = ed73c67992050257c040bac513a284720efdb719086fdc73d91f728dbbf2c6bc
+Nonce.3 = eaa146eebe06f887e9ec69684c6671c3
+PersonalisationString.3 = c150ccb7a46b30a8cdd6ef89225e5aa6a2624f28944b964cee2af684910f39ad
+AdditionalInputA.3 = 511a9fa083b30cfbe2cb39c3a329ab2b6634615dbc3c57efff633176187b7956
+EntropyPredictionResistanceA.3 = e0f2b803d1e3180455d589d1743115771ccfc06ea9cbbd48f88f220d6ad97d81
+AdditionalInputB.3 = 88d45e7208c91bae2ce2e0e278112fb3cdbe8b91ea4704dbfba1d17f7cad76fe
+EntropyPredictionResistanceB.3 = a5d96e9e17b72e69bf86cc2acab0db280429ea5b3847ba98ee25929244e496da
+Output.3 = d56e3b91d002869004647c04ae89190d17e64fda914663e19d4932dab0dd872e273ee6f1a2fed432aa42db57b19703ef05b32ae368b234e2755bee6676e5cfaef99b84cecf4a06ee770ccb95d86ed094e75aefb799b30d780420d64d542556cddf3ad98b881c2ccd1b11b95acd45361d74df40d7d8b9b5315ca8a559f890b757c36fabbbff4c52d5d7d7265a054ac6ed773bc3711a0cf2ac8ef7b51fea277eed3d773f1b9768403c529dc0f65071f01da4f9655c85531ffc3e1c9d97b8e1a46a5eab9e946f73adabf0e284e8926ee9a7eb24eef41beab08129325f635186c2ca0dde543aa99b31241be25076544bf52e7fd6e99b41e356b4855ded99cb98365c
+Entropy.4 = 0cc4f5986f0e4bb6d7abee03668f3b0b2f51134e5774785222399e97d0bf6d48
+Nonce.4 = d319a28761248acd8c1a35c7f6828c52
+PersonalisationString.4 = 2d1392ce14ebe7a8891141d6290f8c2e6c334e736407b5c80bd12bd54802bdf1
+AdditionalInputA.4 = 8cf2642783263c666e0760a4f3585589ceab72b164c6ad3152632a740d3afe24
+EntropyPredictionResistanceA.4 = f3c663d9bc2999ac123845a1242b0a04981831d41933a0d625df7dba2a80843b
+AdditionalInputB.4 = 1b48087ecc09f09c8a4b37fc235d519dc9b967a0161b337069b563b0cd92b29d
+EntropyPredictionResistanceB.4 = 6f8e95e84ced8b8a09a7358f2baf39306dec39e3a6911ce368f82e5fcf02203b
+Output.4 = 9e8abd44eb0475405ba19fb50f9563469065f1046eea3ac45cf8a9c22a390cfa8af671f41191c8d6ee699b1938b69d714a220e127965b6dd330a2db401718174f962090720eaa9e5e42797afd2abea264dec1aa598d36ac2fe993e0bf536ae2d13bc2ad52ffc4c74d67ad04bb89a231e8f66466876b6618f7a469295a5829ca82b2c2f84bfc6e9a0db5aacfc66c8149423349b4ff5b639d303d0629aae48d4130458f490f77119bc4f1629e0d627b926c4d29a04be0f19398cc6bb812d0a79e96c0947d08c5930e4e8b12932661e367ecc852cc2334e4b323be5f117e9ab0a3bfafdcab1a407a9738e1466099d6ea5e1e0715faefd8ef535c3e4be5205a85613
+Entropy.5 = 6a317f9e4084421b278aaafdb8a0cc5ffa62500686d127c2cbde6423a2f76143
+Nonce.5 = 7edf62a885170b8f2fa7846d687f2f16
+PersonalisationString.5 = 393a1bf47789e9225c3c031144902d93947b56e2e208b0b7723c285bf6e782d6
+AdditionalInputA.5 = 09aa869bf83d66329c46aa372e1e3633aa75b43f31c50fc8e21ed9873b0816cc
+EntropyPredictionResistanceA.5 = 0e7923da1a2a236c9768667f1f82864fe3a4c67300a6e5c82c8b5d4ae353d420
+AdditionalInputB.5 = e9b136e6face4c9fd5fb3e76b62d400fc676cc9c960e2acf6159e2d979452da4
+EntropyPredictionResistanceB.5 = f681790e553d939e9952b94d36888b6f754f95f40de15d3c3956e4f73e9db165
+Output.5 = 268744b543ffb1ac74a65051d59bfa1d8084daafcdbfea97c19cad1b015cbc033e424c521253c080384dcf10367d6e4a0afd6c6e41dbaf5ac6e6a0f87647971cbecf9cd0ffb6092b23ef5642be4473feea5949ac4fd87646ac650ed4e30aa3148f606945804b76571c073938018cf51268046c3882863d0a1d9e949c566752d5496cd821a799aa97032d6bab9d10a3be83c5aba8f2a5b30505c4a93cfe472c6c03618f0580d5581df8c7b9ce356d2458e2882280118af0bc449149bdbba5404dfa180f165125ec3b9f350cbd2ad1ca1a1d6ede0f48d0797ce4eeac57ad3aa95404c7213cb0125b144c97f3f257f92b4126f969138410d9974f0b9c2686889ecf
+Entropy.6 = f4451838bdb707677b37e5c506257d54c72d17519e5e260de12958696032cc33
+Nonce.6 = d14b477f4d501d072d76ec6dbc012746
+PersonalisationString.6 = 67197666fbe91f5f6b5b4ea5b97a15f950def6dfa369e79030642d7337814cbb
+AdditionalInputA.6 = 084ff195b814b901f4ddebdba89baca877d48f093769c759bab0e5f06a39336e
+EntropyPredictionResistanceA.6 = 3f4905972ba33d8f20ada38d4e5b2d1a162c73538504eff56aa2e3bf5767c123
+AdditionalInputB.6 = 4856583c2ddb00969acf28a508dd5bad3e2b74430acbee6adf4f42e0c20e1c96
+EntropyPredictionResistanceB.6 = 544a903434634dce5799fc4cf3747c4367f1189531b7715c096db4de5e629c08
+Output.6 = a641aefd283d90c94728f90d15e9360750fc224cecc15f849d79fb76c9a83c614cd884652729b591a1caf14d8d74d15ea46018426ec0f9af6a3b0d3b756d5f764ebe59ed0fba28dae487b225791f6767baac3e119f54afcd06e31022fc026ebc8f4a9bdd6a32922fc25529317a4fc1337285f31210c66c0886a99b4629f988f1f5209d47fd7223fe54fed2fad43c6c8ba7391f9eb2beadbaace4ef9f3ae7383a636ce46a9da09b322bd4f57c0f76bc4f136cf3ffce4d58ee5552e499fa31baf5a483f017748bd2cd3dbc8d36e36daaf816c611be92088f151618747aa7cf53b1b85278e5770f34c667c8d34ec18594cad2c983b9730ce953cdf6f108d9ef3c89
+Entropy.7 = 93d9348c84c46d28fc721bd607ab6df5bbf1c50583a4d27a8dd111308711b6cd
+Nonce.7 = 6eb02e240fd40660aa7839a0996f6e23
+PersonalisationString.7 = dd7690a4caf62624789a3409e0264183d1b3b44b9aa0eb94e53f0734ff494df0
+AdditionalInputA.7 = 42adc2a9ea4dd177b19b160e2bf9142b5a60560cab4a06b6b95473d06273401f
+EntropyPredictionResistanceA.7 = ea79736b2203737e94c71af84e6674c13456300ba581ab6741c3d4c016f5d4ba
+AdditionalInputB.7 = 5eef68ff734618871c298762f42a07b7479c216f21367168489768a01303dc5f
+EntropyPredictionResistanceB.7 = 39d6765b0fe4d6ccb044bc1cdc017de6432dea4130e77b1778053888d9e88a67
+Output.7 = 0ceb34a4c54f5d221f142391570e40e50a59abb7b16c2d4530cf660f9a5e7d2c2924703212164253f0b792433f6c487778d98e0a51bca7d972ae18e10839e926ce222a403f5426678b67dac5d3c12a91d03e248f1ec1e829827b7b04be4101705eccbcad5862477c3f5cb974feca2e7fc1281dc236f6a2efeb4cf8d569d77e9b9123cb9911033ca0d2f72a19232ef86a8602056facf02c914d51529ff17ad0ce7baf73d4822462570e4fcb5fc2d7ebf943d4bc4019f326bc05cb548fc16208fa269bad88216022e1f235e57464edbcfe5eb353ce7b51b8246712c2fea589e4670a2251df99cf08757ff384890c6dc7bd55441428c54934f635a19c754b719516
+Entropy.8 = 11c37071cd1fc5e773ef6aebdb8a460d0df315055c1e648d9bec614ecd69f294
+Nonce.8 = a5a07624881c22ee77abf1c2e566f191
+PersonalisationString.8 = 7380554339645624877db78c77c47b939318baf43dede8c4cc42b8aebb8ba43f
+AdditionalInputA.8 = bd564fe41e27bf691ec3a9c3492254d195f1fc03917477384535c5b68f0a68df
+EntropyPredictionResistanceA.8 = 5ed3cef8a9c26ffc9db6ff7edc3224ee34fc85b026698d6f97fa907b666c1ae9
+AdditionalInputB.8 = d9cd61e2beff683b2971f757b3fa84e3e3ef518857a15e6060e30e4bd07174cd
+EntropyPredictionResistanceB.8 = 70260b0a9b02e572ab077422d9dbaf1d562d0c10adccff6510ffde93861c71be
+Output.8 = f646b1a75dbd8325d3de194ff84e22b4bd33fa4a6fab1b967a9a47cda9c87cb5c231abae4d94b4184ebb1e5cee018a30c4d550f21260e0db1e382055cde8200fb22b9818b73a3d5fdfdc6b887c4201658e332bcafb161bce400bb9029008ac79813fbbb8c1ae94264ef0a3458272b65e633873db44d68c99a922e80b5e623bdbffd78d53f6717a1e57e610f14a3885cdfa9b2a1efac05f78f415bb89fdd16a919640bdd1213b955d882d6838c0b342f061fb88c034eefa562f1c240717f77b3ce7aa56cd517959ce4e4e6cf4e87d3dcc5db677b0e5f701cb9e1b9f2cc5c6c48f6d6473e0b879b58e3ff2c9842e9a1c9d77df7296247dc9b034bea8884529b95a
+Entropy.9 = 502d8383f14a23f313ce63d2da8f896b0a89ecd2e517376c68172f6617a72b04
+Nonce.9 = d7a94e10c039c8670116733d8918104f
+PersonalisationString.9 = 720175b5040e699c73f8f8294bf2001a514c3894f42e5e8b51408987c74137ca
+AdditionalInputA.9 = 0aba1b8fb27ef3c36799bc09c093791d8cf87f0ba8b440fb616dd39d79b00f84
+EntropyPredictionResistanceA.9 = 2cb4a036ed750db40100bf8c6fa9c8728032170fdcc75930416ebf9e672c333d
+AdditionalInputB.9 = 170c8cc3d5c4222846811970bdbc0f80ad573dd85ac0961e4cba7d6514ad3b3d
+EntropyPredictionResistanceB.9 = 7e44a664c5b63e5a0818279f8292daca4024d11a72081fa53993abfdcdf014a4
+Output.9 = 39df19b5f04a30bbb4c775e3236b363567e760b4bac12da1087d9804bd07a53cbfe31e653b5f1fdd15bcbffa1ad17c61dd9a57ab21dc736c2370f44c79f9361b9cb1d2958b73e4ca17ae5e4522665c1e001fad21b77d1421b771e76c5167d6508ab04787dfe74f6a74448841a83e1c297ec09b78f9a6bb98f0fff7db5cc27ea05e7531b314459a271a8ce3ac1746f3fd80dac04fb9df337cd6cf792f601e8ef04efee6f8340f471ffed6affc5ca4bdf8b63f5f6ecacc4ef9bede4ed612ba9ca63e0d9f68c1d27a1df0906740e7bc290d14efab3679eb87b0a75855d604d431231d1b0e479517703168e312641bf1ce3f79d68ec0c61d001df36323d504dc5f73
+Entropy.10 = 2c9745119b01ba5c8db524789870d4e7a9fd885e97d943d26cd746b5bb8592a7
+Nonce.10 = f9e020f5aed453e202b255930955db57
+PersonalisationString.10 = 6caa90036d65ec738c3bc52f9dc170489c405c44154515e713e8cf291613c3b7
+AdditionalInputA.10 = 072a9be42f03a93838b9b75ae028089e6aeae1c7c78f08657f4432aa6987be21
+EntropyPredictionResistanceA.10 = b949392564705f22e030e2b541aca018c889deccf83c14492ff5e940bb9b0785
+AdditionalInputB.10 = 14a2689d5b7ddfb8188cc05223edf3c1aef20a5462d57619fdb3152640200171
+EntropyPredictionResistanceB.10 = c81c53ebc67725d375b11b514fc5eaeab529f1bcfd4f7f2b713d6c87356d5403
+Output.10 = 452a25c4e07974d53923e438cb3d96f3bae70633a3cde6488162348b4a46710d790e133bd8efa8397e9a68235e79dd19dad9ee1ab41c65e1fad4be67911120a16adf6120cf55c92450865ea15daeaff1fa55f40a7c602c9adab970994c45994c61b8a3b05502961be676ffa8d461e12f7e28544d50c9f537cf3c13df6cc0b818687a1aada0f8bb07601a32829c4019933035438a38b04f69ebf5b9da9175390a97813f2144e6966e1fd652d608f86458a2e26ea64166992eff54a6c3d57e73242d31f34bcb6214ea3c7dd0adb07311345b6617bd1492b6c01beedfec4775a220c66db9f1b5435676ec442cf6d86cf769a3b893bcc209039499688b914c7d00ba
+Entropy.11 = a329c95ee99fa07ce8c98b390942d10ca0c6c425e52e665556aef99f2252f12e
+Nonce.11 = c37531a8c23bab75a6aa092008aa03dd
+PersonalisationString.11 = e007140108e50baffb5be99139c026071044a8cedcd2390357497eede70da3b1
+AdditionalInputA.11 = 209780a4eb1b4f9cc33074a712ab4cbff8de8ec1317899840290ec6288138cf2
+EntropyPredictionResistanceA.11 = 7f7beb87d9ff7b5eaf5d33e5c469587303da8129cf6ec467b0f78570ab7d6918
+AdditionalInputB.11 = 15b8941da2a81321ac51ff0f734dfeac86be8316ac8360f76346696866f6e409
+EntropyPredictionResistanceB.11 = 9862525706730dc98ed088b0b6bf44a85f4aa23e17184fcfeb14e1e6e608bf70
+Output.11 = e39df8aaa1e1fd2000c1bf6f52162a6905dff94215fe907d5166bfc8b724138f4ea6a5419c62b43ffcef2e8dc1d6156cb9db4969506a943a7fb62ccefb997d2d84e117daded410da1a067cc5f3f3e5464c6ee1240d9c961496b236036c18f51d23f0ac2a8664fb948785df936073dbf7a1472aaa2c31a9ec7cf283167b2d1c01324fcb303b3a8491794b3514ec7195a0eb341e4d4c96e701ef41f35b499b286618b9b6e79d3e6600e05081c7e9c8acc711af34babd498105f840abfe2f299db6088a5d9dc6b0fcd0edb9b9a3fd3137924eb43645b152105673bfe2a76fa9e31e62832515bdef173a0eaaa095b7cbcbd3546f64d9bb1776d5a1500ac8daf5d483
+Entropy.12 = cbf19c03a2566d38ef68b6cd841075f6b85c204474b6b0f71dde59553ad14d54
+Nonce.12 = 0100c54e4d5834c3c79c54ed2a5c8444
+PersonalisationString.12 = f06144de7910ee841222eeebb32a6892a8effb0bf32faa0b1f039bf449152125
+AdditionalInputA.12 = 71555afd96f0387fa864aa2d89a1e46f52281be8acf10122f5c119a3920e7d64
+EntropyPredictionResistanceA.12 = 699e897ac49e39927691fb0b13366596bdc701e85f89fc8cc7c01a755109cb3e
+AdditionalInputB.12 = c8310d7257952fddbe34bba5028fa07931ca52d6244eb074a0a90255729acb08
+EntropyPredictionResistanceB.12 = 2a63604e6eea4e83eefd17e07094cb1135d543edefb726685fb656f728a0da26
+Output.12 = d684a61ef5a8b09a0926bf73866d56879cb79ef84db61f678e152aa2d60e20936b972167e328cae1dd3ee319611c5cd1a8d81cc07c153bb8b3934578bbf62ff1dbc0a63a314630cba0b091ec078f2774f2ea25a923695f7e2c4d2c6e62974acc8e9a557a54297000213af0730eaa3fa6ecbc433ea6bf7c446fa16fc13bc45cfa5b785cb835f7064f4765fc55c249f111914e8beae18f5b59a649e7d2510f374baf5fbc68728e1fb5404b19488bde6d492fd7867d67cfa8357da010ea07f997b9fe4ec4179c813f74eb6df8d0a1d4bf83adb591264e8f575df7c51e713cd824baa6052feb5795d3f23e8cec4d19da3cc4d266a8cf3213bce4599026dceea98d69
+Entropy.13 = a6215068db2d7508a8c3c13a300673fdbf8af281135470833dad007520b23ce8
+Nonce.13 = fa28486eff6011c552a995fa849d17e5
+PersonalisationString.13 = 14f07f3d25edbe49efc5b33267c403944e168189616493d437443d1d305c8233
+AdditionalInputA.13 = d47658c3532c2d02d5e7ed1b0bce8c2300664f57d2498120bbe3093ef8a09692
+EntropyPredictionResistanceA.13 = eade42f70cb37f471dcc01f9abb211ab60a6bfe65b3a890a379428ac831b7ec5
+AdditionalInputB.13 = 228ddec902c8229af4421252366135a7c18ea82194fdbdaa490529072aa1be27
+EntropyPredictionResistanceB.13 = ce71709b889cac1e261ad56bb722b0b45182f055fca89fe1f743619030ac50ca
+Output.13 = 00524da21459484e2e1f9818fbc11a6112e8167a369823c75093fc4ca253d67e858c852db612e86009895a929665e913aac0656b91ecde75e753094584e08dece63b83f4f9ef9f68a5be319b17e0559c2eea4fcf345790e03dda03813456e2c752da25aa702505bd1b40567c4e2728b133054489036877ed37d2773f3f0cb04c379a9d89aa39b2499ba0ce33beea91200de341e02ef4392c435d723d0cef6c2a08a74fcaf081b3238003f62a9d63aa4dca0c0b5b3f71d4853388bed9c8d42615c75342df060ae444c8657f325006e01f6cdffaf5ad2fde443bdc66d4f41126a43088e59f909a676796464d7d70642e96d0a2110ea0c2f7515a68936ca012690b
+Entropy.14 = bb6d3fb4edc25490647157f84581f636da6f00260d526d34e975b02ba2215cac
+Nonce.14 = f40b96bacb3a1b2acfbc2882adeabd9a
+PersonalisationString.14 = a1e68ef3bbbb81825b0f540f60f4ad52f3efc28c94ba51eb89950479b4784e7c
+AdditionalInputA.14 = 58ef177bd36c7316ea23a303f50ef6f84f972bd428d6cd0e2c2bb58ac38eb16b
+EntropyPredictionResistanceA.14 = cfea54c9e8c167b6a00dacef6aa0b048a6f56f979fdb8694cdde5d69e5d66348
+AdditionalInputB.14 = 48d879681f0f3ac187939552662fcd2be68bef597766b42a456a589d49839218
+EntropyPredictionResistanceB.14 = 71f1999d479e577e4b0c34f999cd3f7c45a1dbb442532100ec19324f1da3ef58
+Output.14 = 6c321a84a9b00c9215d335d83e59564617eca15c7e29552a5e4509e8c3b75ba4da7c76915262442a0c7117464cf63454dd31485eb612a28de34a59b372cee2cb4f9e322e5403ad0728130e5068fe6c08d3a2f0648dff6a6eb7767f7a5a34eb117ff1036989baf3ca62f89897d63a9b4c410ef4ca61119ef4351c5b41f5a46fc233c3d59b69291aefc1791c11d80bcf790278a802a38d0b990926248d6e06cac3c7014def7aa0c0299c441251ae67b1fdd93e48f49435c83e4c66368621a680e874ec2aeeb8396d7a5248ccec639def8405421965b0bd7a029a24e1723fc2c9d13c0ca5a942a8e9fb7dfd5638df7cb9d6db9aba21403e5a90439f61115c05555f
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = b676d7f359dfec85d63be3f82881f5f33b9b73e9e4cb8b77231535437819efd4
+Nonce.0 = 293f06ca93fb6bfd18cdc0b1d576570e
+EntropyPredictionResistanceA.0 = d232007a1604afa6d627bea5bb7da9f5390e3fe5934f2687ccc737e5729741ab
+EntropyPredictionResistanceB.0 = f1d22b027c4de06030f84555ab423101ef3b2030ccc1eb55532deb59b8f7c93b
+Output.0 = aabc0b65927f7329bfee5241ec92b867164b51a568795599aac7f380b9d164826dd909e37701b9fb6b08886437a498cec9e67ce15d5e8d0e73e36ae4dfb28f2bda7ac125f9a0d6244bc1a8a5c2f52f1379ee807e1492cedd3df460f324182c40a7f737a486d705197b6bd270f2bca367da8ab74fea438a1008c1e1ff6a3ca5bc33b3a5c5dcf6ed0db8b3d0beb2d69897421e0774d414f0c30a6989fb0f5c4f3272b69ca9905500da467257471b12902680884edd3e21135ebdc4b9f5c4b0e0dc2ca833794c683ae114a87577555200f3f17ec0c645858c0c2f53033176cc1ceddff7c245cdd1151ca5961c924440be98cbe58645904e6670114caa1a77f1ac93
+Entropy.1 = e9605661062048ed6a4bee5f5d053c297f164bd1bd0e7d185747817800098406
+Nonce.1 = be9d1d5c966239a8f070caabe9f8cdf8
+EntropyPredictionResistanceA.1 = e359472a6ecf73ed816e36351ea5e6392491b3813680c7ec884a294fa13b880e
+EntropyPredictionResistanceB.1 = a635f6036b4790e3cb557e11615ab5ea9e0cfda215e693da4ae1cc2eb18822e5
+Output.1 = 09ec14c6621e6de45e87e65d04a60e843e92a0d25f3caab51d65f3c23d957e002c2eb422dce546b50bd62015462c0930b747fb52f160aeb124dcca1a91e3d29d0b74e496cc4e08be0163959c8538ec8f6417ab07c27bcb0b20737dacb78100632b449c2d29013a9dd5fc42cd0c5735ac63f772cf737a6bca344945dbbd61a01827f494ccfbe09a3708e33ae546be7e42b975c4e48705901808095fce98953f6c0a1261da64754fcf905ca5364654678018a49c5dbebc54661f4257a36ae9cb16fe9b1b1ff4a6c65e40de9eb2a97015d9d9a6b2943cde6c683e13cae5192e6675afb285f3aaef5960dd53e4dc4a66778a9e7816aae1d88dc597fe44af6601ab13
+Entropy.2 = f2a28196e33c45fbb52ceadc842b3ba774161e422b67b3a6916afc6291aac475
+Nonce.2 = a0fcc840a42cd28eddb542517fcf7b4d
+EntropyPredictionResistanceA.2 = 76c0913c92aa9cd497c73eb995ac64e4952760c7dde84d61096ed031715ebadf
+EntropyPredictionResistanceB.2 = 73ff5e8dca89755e53f6ffda37c2c30fec50e795f31d9b04166dbf0b815148b0
+Output.2 = ad655a32270cbaf68adc738bdca7820210e17f2454c2673122c5ebc50ee74390feeb450d9fb85ed4f06c90195f93f274142fa62bd661179db292fe07024378186b24a8951fd1a3c8e2fcdd19ea1150cae2832f64fc8f16a2a7bb1034b2f1e9bc091479bbed43ceb7df477a11d1401d724a12a81a5d12f0a46629a2258d37535a6d96e6c234a757df073b172e1aa6c9ccfb406debc43210c552d1cbb4785664d1959548002185416ae816931ec6508044437f11367cb054d30f26a1875dc568ea71f0e15a7eb8f3f1433376619ae1f592699d086e3a9e4e0f855c8be03fd5c28ccc80eed575e29d19227f99936458a90b056d9c323328ca309c14cab68e587023
+Entropy.3 = 2df61bb2aa25b63cc4b8bc90ba61ebc6d76042cb9ce59d5000fa815a160e9395
+Nonce.3 = 39aebc41386e9aa3f597cb8499e8c14a
+EntropyPredictionResistanceA.3 = bb05eec8cf720761dbb8a0f42e8b48bd50826e268fcdfbc3220a618866da9cee
+EntropyPredictionResistanceB.3 = 1d471208c17fbf1478f7c355874f60b39badb6de2c1c96b05881e8fe23471435
+Output.3 = 95e653ef180425851f34e07b0e54e470be91896f003206f77a5503c3326fb6c47ed61220f5a8a577ce98c09197af2655d774dbe17b69c8cef43a2a2f6321478d24d341cef16d2737dcb5a2b4585b2681325a34a2826fcaac3c9fed9df504f44975c2773886af8b1f8171938a8af4f2a91249c509174217860381fbb71de51e60801ddc88242bef58aca87403ec1ef96d4a7ed437b5b6ff013b9b657110b179f8a264a587760569458bb6da83beb6aac199d195e5c10813358ab173c290d494a2ebdbafa9177eb42730200b2c76496f6a9a1385ea2bbf7c935af6834995af93449421949025bd0871f6cd1eac91899573c6ff55a14443029e500624619d4c2b66
+Entropy.4 = 5311f4edb6ac265d0921cf22d709749a125a2305ad4ed9bd199c0218c5de18e3
+Nonce.4 = aaba13e72935a1f078259f880eb9f27e
+EntropyPredictionResistanceA.4 = 5dafd82a8cc4835dd69f6578e8c342617e197546447a7a684d171a729a4de3b3
+EntropyPredictionResistanceB.4 = 299b52d22f20c671e4bd9df0c55a72273c3dae73f2ee7e7e2a08e484eb410ddd
+Output.4 = 744672ee1bc3fb2bafefdd83cd89d2a6795af92fe5ea12a70cd11649c5893cf903f3cba69d985b22fb280ebb1948e4fa5acc4e90a12ccdde1035226cd5f794e86d299bc80808aa83e634ac044dfd241c9f1a7d9339ad2b66deef55b0e6b4250df266ae8fadb3d1a0417bacddc41ad81ab132c7403bcb77eb02549c2f35c5abeffe7595f3996f59c4b65133899b83da02e9fbd855fd32955bd738285d466c989156f721a862c0e6d6062c18861e5e1092b0628a2601de25a129cde75d1a2cd41ee6230789d229b4fe7c77ebfe78fbae70d57c40d520553274f4fee9d173c60e98250aac3cfc82a4eaf45f5638053f621dc25bea5a6e7a0a6f1c16f24e19920147
+Entropy.5 = bb9fad7e12f90d55b08afb0ec85e0faa125403f5119981a3896421ae89eb2d64
+Nonce.5 = 1e71110973b6816a9dce66be2994c341
+EntropyPredictionResistanceA.5 = 88491c5c7685d56ee7a71923c8fbd062a7d9e92a283a135149f9148483309c49
+EntropyPredictionResistanceB.5 = 639e72486b23882909c6aef51ebfe8643760483bcdf623d32d806d68ef0d6a63
+Output.5 = 0bb9486579849ea12e91313c064926dc9c144cc328e4711cc976d2a182e64ebb3077b7c3c3bbc0b2ca1ef0e8853b252f708760b152ce0136f978b2bbc3fbe1edd09fbee9a084a879a82a907a0c72b3089e5d2278718f32f55798b89891c8552662a676faf31e2ddd91457b29109b21143d6fd47f7e59dba014b35a3446f8134bd707c42a825d2ef50e785f221d80b6e6b05e9c2cc0ed01ed71a42aeb0aec66dbba502a2c6732bf126ed106f8e1a832f4fcbed374bde0d685e17809dfa39291783b96f133e7043229d2739a0429f2cd550ba99621f499746a27e9dd422edfbcf92f8871b4debef0b0b0703230f25936ca78d0ab3f5edcf6e1c94d99bca35d4a58
+Entropy.6 = fb666cca620dd1d2f222f3e959420aaa645ceb4121c5f99058f91f9362eb516a
+Nonce.6 = d7d5e363e42d3ead77f9d55414daa5bf
+EntropyPredictionResistanceA.6 = aa287dd1844ca4273a58661f6a6cfa9546cf88480036ac402755ecf1b298a036
+EntropyPredictionResistanceB.6 = a11495de1ab7b0dde78b86c0b8881040d8df95f7f907a16e16d81f03f6d2f40a
+Output.6 = 44097b4cde85fdc3bb2031c151850d30e25aa766bab6890df681a92856bdf80c638426c843d95395bfe7563798a6e99792520ba2c796445fc856d15439a0e0ad5f95d41a03c2032094ebdaa1d848c244e2ab0c08a3937bd7c1e743bfd29272792139e78128e05ba4007ad737d60c3e79560a8fc0fa85457583bc0385fcd98969fa3a7bb793e139b7ddb864c7639cd109fc9632eb79caca180166cda6bd4764bc9a60dcffc7ecd20911c8335597c28b3ca5a3ac2a6d559067d1c04dc129929a8c6dfb0413ac1002d6d136de2c2311b86e77e6a394c1b8f7fd50d9b5345d6a2c6052e3c14ae65ab83ec0070655d7130591165d950dbf7ed321f696bd74c3136748
+Entropy.7 = 4b8cea888a618ecdad9e1573cc4f55e6f0a3b991d981fadc813f93132a37baf2
+Nonce.7 = 1dccae234c5ec5d1d8f55c7435a733f0
+EntropyPredictionResistanceA.7 = 778391f9b54bf6693123c8a8d1ad88c71488782df5a93972e2b0867f8e74e60e
+EntropyPredictionResistanceB.7 = 9c722422dda05d8addc330cfdab1cf44db251d7e8a8ef371a9dd8e9e6375fa56
+Output.7 = 16af9ac5f4f241993d4b9a80ac292bd2dc009a99476049a9091b1a4d6bde55f45d6c8d63b28b9253d86ef71973ec450151b495073c5c73b7709c477fc728f2af669542e3404928e74ef4922743d2cbbdcf6f13ce532d4bb819ec02799ac8a3aea914507479f9a0fbc2785ad33960dbee70f7356f3d01b2f945579521c5c23a360fef78055df567cb3efa61e0479578427281214b827774e8f03c55b574fb680842c8f0c5147c21d2ebc651e5db79f4320d81bdb328c7e6fba7f4e5386f301af26874f1969e4743692369542d4a8e7d6fbf25a1f9a8f6be056de381a78ce3322c460a56ea581f5c59fc0b9d8809026597bc886422ec8a975257f85e126bc50c69
+Entropy.8 = e03f3f78cd24afa5d9f2147449b4333f6a72001cdbac1104d0ad18c6b0407479
+Nonce.8 = 40274bc771fb5481f113b141a3a399d1
+EntropyPredictionResistanceA.8 = a4124cb1ba3ac9712c46c5adb8ae7ca4083b2c9339c083e4a86ad8fa79272242
+EntropyPredictionResistanceB.8 = bef9dadc0bfc000fd973c3232cdba8a8d55846a1e7fcb17d9bb95aa7c4e07f82
+Output.8 = 4c895deb4edbbbc62bfb4ec71cb0d9e163399e7e9eb2d7657331696b5b53fbbdbd1d86a1d9259f4a7da891a06fc3e0699ea21f5640765afe0e8500737841be5ed296e3786eb71276c76718b0b100c6bd9dd15c75ec0d64ca2ad27cbc35be58bde128a2e7cbefeb082b139df474469bfa506bc76510142b02db1995da7ac5af8a55eb325e6ec8f70f80868d5bf97d14c4c99b5d9ba07c0dddfff88fc1959852a1e975c4aa1a2ff34d13d2654f76cdf93ab8f2d172d9edb35e0b9ba830674b1b27ea77edb9104542df20ef08711e1adf0e256f3e055b368296de705c00fc000b9cee3d3ef374ac1050c7195e0d3d398748ecc53254f321032add5f54a41819b2f7
+Entropy.9 = 0eae91c620a5ce025c16eb90df3d2748228de616cf672a3f43c171e04794004f
+Nonce.9 = 55a4b0abea07c58a8c03dc1c7cb14a81
+EntropyPredictionResistanceA.9 = 5f97a0ea90fff6dd13fe251e9a34a2487a37a294692e596d5c885e9735224dbf
+EntropyPredictionResistanceB.9 = 7b6ebb2703b041e914c9e21d8ed7eb99105d8c21f1afdaebeba9f996083faa45
+Output.9 = da0e63fc5af8f5c7fe5177602e7d07fde576fd16fd8ac069227a40756fdaa33dfc2177ed54447b07f7f20b534e3b461d5037eef9cf0d748267fef7a34479deab7b085d1c6c7d1e75e7b35a4bd1e553ceeeed6aec4115b4ab87188a42bed90df0df5179caffa273c805d6c845993d46c48687192f8159754a2fa12b368733f2e88763337c36513a005869d00ca22702e4fd4cbf1778c4286f5ba7c536629b02d15d0a4c202c6523d321b1208907f22d6051c97a30fcc0009090d9157804d0c80b35935acf7fbf2518f8206668574817b91a318b41fa27bdfe9c1e6cdd57f70406b7a9f89c691ff9968862dab47dedfe056831e4c064ac83714362719133cfd1e6
+Entropy.10 = 411969cb97c458e124956da859aa7f3fe8641aa7171a182c20908a1a7992c119
+Nonce.10 = 02ed4232f11a64d54584561c34c66bf6
+EntropyPredictionResistanceA.10 = 5c8e4575140689102e2ff08388df17c08c20984882cbe1d643a36e62ca664684
+EntropyPredictionResistanceB.10 = dfe5d9b5a0f5d16f1ca907aaad6d6725de596daf0e2d7e5633e3dc97c2132431
+Output.10 = 6931f4cc0e05e921c2a3cbe7724a6f0c7bc1bda35c2131214f34dc58dbaa74f411d5f93112df1db97a315a89155356db5f7adc8571a5f0ab343cc6b15db2882dfa8ea8ea41ec2d54b3c4f82de76e9753a0cb651be15fa3e4280da8a14e876e355d76d266f4ff2bb38dae72c4aa341343edd5e0957637bdf3f5c52b926af462ab6bcd5219b236813bc39888edd264fc4fd11cf3f67557ba54e7059a7b2e964b140b18f4f38a1f1076d75ebf8408b7a441bf4cae1a6852a771aee35fbd6a6a3d9dece36bb083f63f552b15ab28d433b862548f0221353d68d8e2ebe750d9bd289c079a47456d7875166a1f4c8749812151c9f0534687afcf3207fa999fa4fbe258
+Entropy.11 = 653c950bd4c42267d4872404eab853e6fa8268069eacddaae434f5147e4e85aa
+Nonce.11 = 84e4454b724b059ac4bbd252ca298170
+EntropyPredictionResistanceA.11 = 8f4f4bee5daf3fde0d261d3e2ebb6f0ca73c542a8c66cd3024abc6c15c4cd953
+EntropyPredictionResistanceB.11 = ca457ae2e03fc6eb6fcf9937acaa0442743dfec746485f58a881bcf478ada05b
+Output.11 = f7d0bdab04bc91f7dc01a7709b749b10d1702a9f5b601bc2bc6135be50fa86e05c79112925e0dd7c82c1772ded70b0e2203cc5b0d747624d5d598c8b6c8942b0fa52cd6fbb6d13d8bb7b42da84489814e965fc79a799e0ce200d0f4517d3167213a8d1d35aae1ec93999c742089f761569d345a3b0240251f8ca714d41ac2f8a1f016ed0eb61901f7ff77cf8a00add155e203de62aa514ee7e5badff40beb27893690a894d80b5cc072a87b33f4996d2c72ef8e13458e11b18b2eb87f09823a57bf65472a992aef57d37ba09d08a635c386de98bd88a644c323b58f9b6317e58e63c33f4826ed1a22d032777a4d1d7011640f58c63d5d8588037a530b2d39c82
+Entropy.12 = ba90192a256ff9ee87e6419a8f43ea175c3645f4ca4d53e851cdf39fc53c74cf
+Nonce.12 = 32021f59476065608bb9e6744badd56b
+EntropyPredictionResistanceA.12 = 60e547df238a213a81b201bd93f2ab001b70ae7644eb4e2f9ed249bbd437a459
+EntropyPredictionResistanceB.12 = b86e78f9ed5226795a7abd911883dafd6d83161b1656309306c7e229738f855f
+Output.12 = 397b94bbb560d9f20ef87aefa7034259b4dd69477b38f2777db33aad72d33ebf6db31d242c91f1b989914d8c0da48aa6684ea38135c51ff48a4930a7e0fe1871dbdeaa66df886f9dbd7bbe8df80119bef02920694a210d654c92bc80df43dbf412b503a26f343c13cbb5804d8186d3d9429087740c5d8c8dc65a8ad18bbb58eaca0751c23a65fb65cf84e2ea05f7ab9dc5c63dee54bc08b5ed382cf320904093ea459bceb4326408843f9182eda6134ca53f7be849166a8c3fc97d284f7b2b66be0a00ea8c4ea6f1a566c7fe4bebbc0872d234137491fa8316a41348036024de4d738a3830f2f0561b1bcb7c1564e6f7abec3b81f3fe8ad5854241401825cfd3
+Entropy.13 = 3fd2aaf0a56f0a6ecd52b86ffc47040f43ef2b8445dd4d602cdde4ce6568c90b
+Nonce.13 = b4a578e4654f2a0ea0ae5625cf605e47
+EntropyPredictionResistanceA.13 = 7a3dfc48580ede6531ae6a67c289ce304be2692d7ddb71fb445abd080ea3fadf
+EntropyPredictionResistanceB.13 = 4d5b10ff8684710db1721461cbc98e653ca4cae397aeb9c7eb1eefc045e54cef
+Output.13 = d485459fe6542a357a8c11fddcddb9ddaa876e69809528508ad4d7f314c2c9f8c4fad0f6e2ce335e3bfe320d183bcb8d1f14f9ed9327bab454785fa533cd6c98f3475628814396b1fd55483c1ebdb37ec5bb007d9f47ecbafffe7e3f3997a1053ec208c187ab085c96c0da00a5578d15816000f277c2723cf359102c030424ba0896bdfb1a6076fc5b397827581c5dc78d2d65a0a3a42e203334632b67e67cbd73ed5d7ccd19b44781b54804785f621d9887818f280e181d3e38a458768133da544ff9c08d295b7c46f3a6a8be8d7569418136d25295598732ab7bf170513b8ea4bf5adeaac5135330897e6abbcd6491ec92d3c685bfd3fefae0e982ee0bb6d8
+Entropy.14 = b9c1995f2bd5f158e3867017ce2f43098cb6e1de49b3c121a235f5f91840bb52
+Nonce.14 = c0979d08d2688134d9d7434dddd82287
+EntropyPredictionResistanceA.14 = 88d3b6710b195620de358c8d5b14cef44aeb2dc05b94743de7044b97340fb9fc
+EntropyPredictionResistanceB.14 = 7575f7de6b84b2123ed93dda1a45a12c711465c1e891a83dd0ad35d313048fa4
+Output.14 = d7494ee337cef7ffd5b30bf4b69007004e9b98d72c4bce2b1a86bd4cc45aafa2a26eed6f3283fa27d1aee8ec42f63e8431aa8530d9a7fff1797705d849c86ca40c0f5c158f6ee7ad268cc8b16fa199770056cac37642cba3c69053542785a2dd5041441979bc174b7b75babdac0da34e0c7b6a4da4e620fda25aa1f4b98718a84604d0c77dcc31343c41d501b9c6896a05fec9811a78204895d14340d31258a1a6f8890c77322b5489b835889807a6dd8ec00e2a4130e0758c0bcd15c466f88495c1c15a0831cc4d3ef75d9e826f07d7dbca32a0a58b6c80f77f42e7a46e7baad4fa450324b85efb9fddcae63d5ba37e9574baa01a5b97d76c880a3a9acb4187
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = f2e48f38559a389426c1639230cf7a159187876ee9a247d5328eaabc95a57ec6
+Nonce.0 = 1bbf726b6a9703509f4ced91c72d07a6
+AdditionalInputA.0 = 20bd9af8818809de025435d7f356de0e28a669e0fff5d9fb466696d31aa71831
+EntropyPredictionResistanceA.0 = 1088c4a589e4f2a9b68145cb52dc1ec7e3c0329171fcc944b8b2782c78c7b824
+AdditionalInputB.0 = 50156c7cd86febc9b236d1ccbbfdb597bd96028889bd66bc0716156719b9e004
+EntropyPredictionResistanceB.0 = feade90e68fe2d9f6dc19790f750f695c8b87516042f1f2bd5052b0cba56799c
+Output.0 = 16db46faef2fbe98c628913a9f98be6c6dc29e91d78a2a76300fe4844e470d8c4859a9f5a19260880c93c9aa9a3730412eeda9504042185ae12573c1b51988fbd6dc4fb9b809634f857e80d3970e6ae86a2497d51b56f6b05649ccd68bce193c8fc93aa87adf87ac192e63b4a3cb2e82422013039aa508f5eba7630dd80910cfb9b8974d431fd927690be65950d0a6ed28b376fff4179abff230f91d72a118f6b94bfa29057d9b5595d383d432cb1683448dafac26b4ed2b0df7d0b874809e927558fa4583812645c950ff4181229c0d81ffdcde640afbe5d475b568e78b01735af0db0c712d15d9ff94d4c803adc7175390a133e706531495324f94146b18db
+Entropy.1 = 6a1f8b7c3a02f16284ee7fa6210e805c683033dc8b5742d557ff18649d1cd78f
+Nonce.1 = 6c40e5455dcb8094d7afb9c6b275a5a2
+AdditionalInputA.1 = 857e33bd51afd2fe9dab83923585ab619f37fccead8c25cb15d6f360b53d100d
+EntropyPredictionResistanceA.1 = 5a3492c58c290cb0d9409ea52906774140354684ba69a55e6d3b57a87c8583e2
+AdditionalInputB.1 = b41f8160711fe0c46bcc141b60cb71572428231874a590c95cf47ab88c45b8cc
+EntropyPredictionResistanceB.1 = 7d2c6f91e7935766afd92b8d7e6bf0549804909decf17b44b18c3aa2e582db0e
+Output.1 = 088a7a798e26cd9690cdfc2d486ec8e5abdcd0675d2d06ea05376e65b02bf89d9b1475fc0a8f0a596afaa54ba6c6253b6260ec9374f68c4dfc3b1876309a3b85fdc326ebaae8a15be5b5fcd8097d178141712d329a33d2c970abe451851715d7db68503bb904ff2ede26e6d38cc9ed30380ec744d220855b4a6b3372025dfacf5a2995337129bd265e65dbd4a82920745631e1cf2529fa72fe1b82b13c1e4a51cc9af3d959c930245f72720ce173680e71bbdc795246f240611beceb91fd655999d67ee98547d55391d945e44bb96bc452fc20f7140d62e8168f079c3b4bd6c3cb0f63ef94c2d1c9c5b4fd0c0fbc2b453d11da59f318aefd9f9e28d993683d79
+Entropy.2 = 9b44f21cd4e512576470b56e40eb0e01ea0becbe0392081bd851c83a73836c31
+Nonce.2 = c13f4c089b37b43d0c9c526f9240aab6
+AdditionalInputA.2 = ed7903a1eceaa5c32f4b57ecb09735271acb640224235176108210cea1113e28
+EntropyPredictionResistanceA.2 = 9993216be9c4a0248a8e48234581d1dd6b3d058f9d7d031a569db3c1ddbb37ec
+AdditionalInputB.2 = a5809c29f98451689d1db362507b5dd98cf2addb4d64b42c92d68f6df3c29874
+EntropyPredictionResistanceB.2 = 9f71ac30118d1940b24d10af0bab4bf7864216c2bce04c2e42a441644f776955
+Output.2 = 2a7a49bacb3b47ebf8741d8e576fe82e7bb91873026fd695047057e4f40860ca5aefbead0dae8c7a73d877ce39bd1171e524b234aa4971821627179bcb00495e8cfc9c716d78eed906957035d5eac4898ab0b90fa3761a6dbf143cc1b5b7eca48ed8bc594019a5efb176eb520b21bb77216d824ae1820c060bd5c018683ff6308c8031d20de5d88468feeee1daf611e323860c114e05295cfe3086fd7fe86c447f6f7625ccb6e269d23f5ce572a335b4bc11bf885e8237b27cd25287cdab8136c7acd54c08866e80ff75b8630fed48b54d4fbe0d7fdcdfd0445b99f102124efaa4f545df010dfecfae9a20fe16f5913eeaf2e9377efc2e4d4ae864a660f13bd3
+Entropy.3 = 674d677c0e42485a283538b2061c6425943596aa44a1f672558f6dddbc31639e
+Nonce.3 = c8e82c9810af18fef2c5fb27a6f06ac6
+AdditionalInputA.3 = 0e8d6cb92c3796888bcb8c70466f92d48754870ad35a9f0e0cced3e892dd0fb0
+EntropyPredictionResistanceA.3 = b6c931d6b4a4f8b945d58051ce287f6d8acdb8f6e9f26dc78f2027bc659634fa
+AdditionalInputB.3 = 03ae63ad6f5df8954b26b2db4c09c81b087833fa114853b1d88716d8d0392571
+EntropyPredictionResistanceB.3 = b631707dedb966c6eb30b3598032d1f14d5f5eceb3d881752665e596de683573
+Output.3 = 72657ed8264cbf3a528bf5359f42d61e2e3d745878577cc86f47758c55d2405a8669fee62a0c1a107c9cfe27545fd60896f0eb34c6031f081afebd152018071bede64a1f68eb2faaada729020cabfee79f123bda0a7f4adc8a4df6fda3228ddabf8bc54d88289e2d976adfa08150eaa31f650be1cd7c7144a25237de429b6607a05ce68a48f74cae23f5fcce5bba3d3c0bab1f373cef5369bf030ffff3a1637c73fcd0033ca62f9c452fe38f8adf8ba1f7a40c6603d8c18bfdeee7b16393e5b2a91ef40a55b5a1c34f45b60e5f75e4e853a05efb03dcfb8a4e820122646ce3905dc7038489f8ad3da958ce79a74fc714b36ac393256822d4aab61ac7f4106180
+Entropy.4 = 8db6e3e497f5daefcccd4a28c8d761a80f92a77d1c9279a976fcc61952212fad
+Nonce.4 = cd146c80fcbdd340fdde315fc196d8fc
+AdditionalInputA.4 = a884f094f97f6e0f00d9755ae70ce425a97c6e3a9ed1d47e457174ce4d2c77f9
+EntropyPredictionResistanceA.4 = c590bb874e09c7eddc5934c78986067c857932c4045a53970b36151df086c8ca
+AdditionalInputB.4 = 3536ec0d71133b7ebd2f1f6549a650232d407caeae4e24ec5b88b795451b4748
+EntropyPredictionResistanceB.4 = b470dacb7840f6dcfcd171279110bd4aad7a527c7c29bd9f50306ec0cf693cef
+Output.4 = 70d60a4cffb0612a3a08a9a19c971bb0fc28f2d085d93cc47c1ec8df4ba3a25724fcd64e24e710c054fe9dc4c0e71b2e953713a30c09c948355d6798db24871fd11f6cbde9e581114ea67c865e050b06bc3baf6fbf3b7baeec7d7976cbf321d51809bef80738073d49ce758895948179261e00f65c25cc1e68458827db29b450ef63909fcb870bd490a515a82e25225cfdeeb340309d50550a0bafa2c70d21f51ca606c515534543fdd971fcb71e40c02452948710b38a2dd19f3eaf15d4da21e1d6762910104ea5778462b471c6f0a45b258aae3706f92f67113edfa5bf981beaf3cbe74d03d169ad9d2604f7a358fdc20d0ae4ca27a2e1042e8788550d986c
+Entropy.5 = 0200be474e2f60e3547b2990969a466044270933dc5e35c4d7e78175dd118a98
+Nonce.5 = ef4f4146702c8fe62409cc28117a7b44
+AdditionalInputA.5 = 77c99ea0bb689baca510c303662db4cfa5539a45f02324179a54f9e61188cdf0
+EntropyPredictionResistanceA.5 = 30bb8e801d359714ec035f5a5b7c593b59e9465b421b086c6398911cc7492c50
+AdditionalInputB.5 = c5915207ce4d208bd659066fd44ab3113a6843650d6ef67c3aeda7890f666aea
+EntropyPredictionResistanceB.5 = 2d085afe600e4711b1093f73aa31de31309bcc06fef91204416ac2689949b79b
+Output.5 = 8c730db709d17517cf9de4d21b3709863aec41d43ecb2dbe791a4b24b2c6075e2e0770d65b5e0eac37e8f4e4f4c8119dde09635ce23721aca91a1521b2187c3de4def282c989f14bd32464f4d80c90487fd56c99cc40d2751ac0cb944ce01152c9204393ab63e9d40756b5c844d216a54a9557cd79a969d5cf91e44fe212314945667935d026f4b936d6e698947b304762c3f61fb8d3cb3350aa56a0ab89d6e01485e8b16294cadae01bd48c9a53195a12cfd2662fb26fd9baa8b5d649c8156fa083b15897878dbe7b4e281f2619b0605040502301d41f37e857afe5fc602e1126bc732906116cd4b9d5308954159a881a5d1f2b0f37dd72afc5556dcd2dbd8f
+Entropy.6 = 7b8bf84239e44dda51319aeee7305f87574d7d5627c9b754abaeee5fe293bd20
+Nonce.6 = f25cff02669e428f89a2514dc28e9405
+AdditionalInputA.6 = 8f209408681607c484c15a23a470bdf004838c887ea4b07396ff08de62ebaec6
+EntropyPredictionResistanceA.6 = 2a32de766c181e44f48fce347d1ce308ca3010dd0698c0673847572705880d4d
+AdditionalInputB.6 = e223bdc6fa98bb088e9c7aa82f36a8d69b2d747bb76f3d20c47d27264e48b6fc
+EntropyPredictionResistanceB.6 = be72ab79cbbe84429f4a5cf32140952b64343c533f3d76d9e18c0d54a22f39ad
+Output.6 = e80c531491bb73e0d93db5bf52af698a17d930e018fc91c32c07ba657aea86c813b2f214543326142dad062ef62d378a52743e84221e19adc18fc16f7819f8ecae0de72f6aebaa6f1b8239d512fbfd0c1dee24d3ebd478a7236a3680c676b42450fa0d38408ebd2aadbd615f4946a80599233482b8b0e93abbc2e06f70a8d79f915315a9063bd9c7992670238a941300896cda5f238580c3a96d50f79ed78bc0ff558722107bd3d2024d0489b0d3d419c62f481e5d42325ce2120f7a9a29b9be9049b31228b9620c3624c04907a8cd394e33064a46e511da622f71c061968273f860c511b5525db0b3c30000f103cea93f187dfc66a62efdc2e2f8c0295fb010
+Entropy.7 = 7e1dd3673cafbdd32917988a30a97f254703856b319597fe9f86e3f2f9633b54
+Nonce.7 = ea0f46a303edffaecc096b56d8ef04d1
+AdditionalInputA.7 = bbf8b39383759ec09e999375b9f28d067000dd0eed8ce56e776f35159ffe24d9
+EntropyPredictionResistanceA.7 = c58fe21bef5df7b367f6125a884ab6a2470acbc14e9133ea49e716832b021a18
+AdditionalInputB.7 = 63b9fbbf9d915c0fc526571d784185956ed2276baea205bcaeeb323a7a3287e1
+EntropyPredictionResistanceB.7 = 579cd2f2abe5629c4bde4ea4d359be109c26be115b967493653d3e5652244057
+Output.7 = 81944abbec9e8d98df7a68b3d199897cb4afd42a0d7b825bbd4b44eb75e622cbb0b9e26bd5dbf6f65f0f628883cd7bff7737bde7edddae3c7d4b87da39e0ef7c63eddc882637406eba6a4971a061fe16daef25edea1038ece529cd5886b185d999b5fc93f45b8c7e592bc396b5a90426d51cc9ceae607d49cfe67a63ed05e4807cbd101a3f4bed445f2c4067c88d54acc3cedcb196c2c00fcf2a148d0d73e3f253bc17a60396afd7dcc1886987933aabad074509729d1b6cea3c187b4b98522deeeb0005bd69a0ccd9c2603f4f9e0ee5b8322e0f06dd7ccdb9cd95575892eb9aa9fecbd5cafcb64227b176b181ebbd7c6054069ded3beaf6df13015b876eeb32
+Entropy.8 = 65645c6646c46963d330805bbe3d6867e2e8b30a1141d312905933b5aee32f36
+Nonce.8 = a906c9d012db7b59cd21ead418600c0e
+AdditionalInputA.8 = 36f5559c5541103df9338aad0e647bc825c6c96b9a2ea718a1b352660122feae
+EntropyPredictionResistanceA.8 = 0973f510f57aef124d6c607f2bbbd211b2c9a6d635edeacf6d144f879d05c01b
+AdditionalInputB.8 = 4eddca3aa86af80cf71a39231cdfc42a46e690d86259a3b3356129b977bb1cce
+EntropyPredictionResistanceB.8 = a00ad6f54259e12abfd3a59a4fc6eafe54db58434a74914711d4905db02aca8d
+Output.8 = ba3a423fc79ba9aed1a32ac079118b421ac069c3ec6eb114deedf8cd5f0a0543579cc5a357f9d250ff6e27e0f4914c33b06405f0adce659f0395185150c64177a1b0639aa4fceabee6c80f9a4796b9340fead310d0932e9708dd1636406b8d9f2d52bb3cef32569582228f5153c88869a405da6cc3a926b3e4bd13856a0bb9d99134e4314387e25b4dd1d00311da7a4bb7f6896810840a6308f700493df42bd05057998de2432094af4759807e64a12702ef83cd339c4045bbca37d8947547227b96404ec4f069596ba6b8163ed8d21be08f88f3607781ff344bfdc1dca9df023596215eb1f3f8908a0b0e5fa3dae01120c6d633d03538f840a9f8514cc57caa
+Entropy.9 = 4acaba3c1fce38d9133b7f15f7319d7d1ae5a1afa6ee2dbb4ba5a373ad9c3b0d
+Nonce.9 = 0579cda7908b04586a88f365075dfd76
+AdditionalInputA.9 = 2f3031cbd32c4dcfba6f9b35d7769bebaab127f5e03c42feec7b2d52a4cb89e0
+EntropyPredictionResistanceA.9 = 510a1f10ab86849237329afe0f5d023086fc47124fcfc92d24cae61bbbc6d4e5
+AdditionalInputB.9 = a664f04e731c306156ab9baa608a19f09d7ee303e5f894a65c62bc03d5c431f2
+EntropyPredictionResistanceB.9 = d990776a0aee74d5a4c9d3ac5998af5a4682510c76c1e4c1a2e313fe7e7cba46
+Output.9 = 5e55ba3dbb6ffd483bce006f5b8d2526cfb8317b72aef253661e8a5f52c8615db1a68f6913fa684e9852fb7735b98f7e7d0e36260bafc57474e80fe07a8967f4222e77621fc79c2233d3505ba8b5a05315f50609ce4c5fa42d7403443bd261a0995878b2044e6a413f982aa3adbc0bb6a75c230492dcb02104b584515d0ec9568369f336c78c2bbbf0f1b19e46eef9094916638db429fb0f18e6cd6a414637b8b478be90b9632147010dae56d01d52eed740942a96364f6657af1c75fdd798a86162356ddc40abafc1817f0bfc0c64089153a2ee02ffb2ae1cfc3b3a167fb7f90ed53e04995bd13eedf507f9a3497576d9bca0771a7abe790a5158acd4de5401
+Entropy.10 = 6e974911222bd1e9aed5ae87a8f3bd5760ec328fa7f5bf2bf9532ac8c3cff281
+Nonce.10 = 3c11661ae123ae8c226bac1c0027a58c
+AdditionalInputA.10 = 29302885fa42872a604686618d24e19d3196816b491a9af045adc1252a65cb02
+EntropyPredictionResistanceA.10 = 0f889ace57797662c17d5f2ef63a9ac9d781d85fae143b4f9f47d01f265fba9b
+AdditionalInputB.10 = 8ba3e0d1d577d070832e7c064c08df8859219f5a47f3ea532009515eb6c8a415
+EntropyPredictionResistanceB.10 = 599ef82321b30c53bd5606cceab8a287f9e0c8bef84204b6b177c6d09c579d03
+Output.10 = 8ef1ca24df7244ed58d0fcfd012e2e5a803a3d071f398fbffa57b7c13f9b0fbcfeee6ea9723804f4f92ce21c6c2dd8b28db12316dcdf7fce5dc3a8e823a50de63118f9986b5ec4cbb6c034a5fc4cbb65dc1b84f50a6d5222e37c2c4d09a7c09aa7d96cb27fee381fb782df552280dd34a08250eea96370f0f45ee50501e4de401c3bf364797201ca610f00e3804b4d597f54ad21e4df27887ca946fa4c3b22881200ae8039bcba6fb1d87c230f3c03e0e82629c17c1906f7a888d284b9ba9747d5abf8e3105b91e4a7350fa0dac1c36365ebd4c964f3cbbfa4999be5ead8fd79281453b68c5578caf31aec3704bf81ae9d60319b797b477e40080a55423769c3
+Entropy.11 = 7150b6518603304ea5da35805a1eb2562775efb1adce0838a771d21b87f468db
+Nonce.11 = cf0c2603ee72afc45150b8848d6ff620
+AdditionalInputA.11 = a1286710317fc9069811fac1cb33f26b66dee2f08ec5ea2d8b0447d2f5181c83
+EntropyPredictionResistanceA.11 = 87d45cfc7c2652d2e48a9dcff2daca949a78ea7caf62f7b0c7bfedb34d3d226d
+AdditionalInputB.11 = 9437e2feddf9e216c190211ca8f276a1ae57b404571e16609e2cd19c5540b33f
+EntropyPredictionResistanceB.11 = 542035d26d1bb9118fa19677c3a619dd24bf5ee048f15394d9d4da8cf274318d
+Output.11 = f4dae73f95038e4cd8977f37c42e45ddb8747a0fd821e7aa10a01234e294e892dfa7ee01639608d2060f3561fa9a791adce77aca9893190e386bd42a76546ff904a7315835d92c39f6fc311f46c3e9e5651690e2d910cd4d5da381052a80e9e42f2e8ecce7bb7dbeedcfbeaa48df00ae78ff9c2b13e4aa7460cb96b75a9705b394622a48530ac7451402f265b6673a2acc3f966e865f899582ef0d69a241898a806193fe7363e10652dd194cf5cbbbd9e1c75af6d9a02edae0a1c879ef9b2dc74758b811864917eee65f0fc860ae690ce42a431c34384f48d1d29628ec0fbe95fcc933b1dd50bb81a98a9ec48d084b20c9f37d211cc82ecf6a1109104251d9c7
+Entropy.12 = 9ed33e6731f8556dac1c1a12da1e2365b61996c14f572942a621d993051444a5
+Nonce.12 = 9a7cd7d5725f8db1152cd96077106e3f
+AdditionalInputA.12 = 1be5857b4e5397ba78f038c07216d7cfd21b8b38d3d571a2bbcdfcf5ca8efecc
+EntropyPredictionResistanceA.12 = 2d4b6a9cf90dc7bc4bc3fe126a37c9f61e26b65043eb54a68d330733441d0f63
+AdditionalInputB.12 = 76f7eb1c7c2e291e1fd767a8b8438cbe0560685619578c2679fa05aee27e7b5c
+EntropyPredictionResistanceB.12 = e297503bceec19f59e5410a215e6f834a5854c84c7037bc63feb6b13ca5b25e4
+Output.12 = a9f48d18f64d1c4f9c7223a6e0bf4c4092745b32f5387b76d2cc3a3797b863656c95302388c0e176c164439ef8e09161014c95cb7560b17ddd26adf8f96f701630cc85bedcc1203802ae81b440afed132b6be01c620658fa54688c699076b69074efe111e1def5622c06d70109926ea50de294ff909a21cdf7a7ded11f35ddf7b7cbab01a81a6c9d4e91ec833c8c60a16755230dad6511822f9e276537e8ff1c24e041b364f1dda720851ecea420fc10faf5438f42b1be8d805b541ae5a50296e5ceaa284b90ff6eac18f8238eb6eadccd55ed654df658140b63b138bb28729a79811a63167b4331fdeee79beb9b83d674e7800cb67897e8d9c96cc5b5a55979
+Entropy.13 = 3be9640739ef86fe3a2d07b51b8a79c0a963727fdf5d6cab0f1f24144d4ae934
+Nonce.13 = fd5925e504a75fa7a2227604b3c0d35a
+AdditionalInputA.13 = 33ca00ee4925520a13696e2313b2e90247726bc32d1347fea72281bf1ef5ad33
+EntropyPredictionResistanceA.13 = 8374141eb6677e151e5f4c1fd8795497abe6f295b17a8d30e13da3b6b1d5c8d2
+AdditionalInputB.13 = 308616e3379e9c6b2e2a578bc890a58ffd39f0205a76b064831f13be0f5bdd36
+EntropyPredictionResistanceB.13 = 7f32ad196f910f7bf0e51074bb5d90e2273262b076b38f1e56eadb60abaef92e
+Output.13 = 354b40a8a04be669ba76aff04a74dc201d63079240f171f9d4cabfe7b47eb6b933c0e5d49611effa26ca5992329cb84ae77236c1b048bc0be038a7d987c9aa244930e69e196dc9783285bba62451f9917f78573c15956c0118e81da34d7333c1af460ef76f36ac0287529f23e6372bbad163d5e12107e1529081a4ac151142bcc3ae4ffdf190f02638e0b351b10ba88a377c686055c1b0721de98b5565460325c26e12f1bbc3259a7fb1f3c3b2af6f8dbf376a7cd25948d04342b6831e00befa1d4718b47e4f6aee494e33ba52ee2e1205d4b9b5030a02952bd8315c44f075e229e957d9c76b5f3103e3d3f84b973f02a0458e064a9afaefa4ec79c25acb5de8
+Entropy.14 = 3b7e05218415e098ada45f7fb8edd51922e61952b262342ce4a019a2017c69b8
+Nonce.14 = aa4af1371638fbe9c890847b610eb6c2
+AdditionalInputA.14 = f31fdcfef7f5695d707f461c5b6bd6c6fed75f26cb2b461dd9e2256353828560
+EntropyPredictionResistanceA.14 = 8e29789c4a2bb82827be65c3367192b3770a3ced8e78032d4efa4e0d924714b7
+AdditionalInputB.14 = ff5b76881d8e73799caa98305ff4783b455b55c950c53bd93caedb66e1316245
+EntropyPredictionResistanceB.14 = ef236fe971c5b8ec4535a744c863d9d5142fd5e2b1504072e5cadebeaf649380
+Output.14 = 485e9f557166c8b33cd74a74525e3955e5f13243fa4a8bed4363b2a840ca71af347f589500824aecfb1a5dcd461305eccdac6f7986cabce286892b5cc4435f2a841cd5076333f235da550a849c539e573d1b771ab215450b32759170178384ff9528d0f1327cd58d4aab4ee294aa618d9fc58df7f9cc2a58c0dfd0d308b136739aee3bea364b5141e22528844452e9d6b4a0181aed47f48a71ba27c605ea2eed449227b60990d8baf59873f3989dfafb3a8bc045cf2e242b859baf37053e0c55dd886b5699f6652e2970d2583f5d68b52e4eeeef2074876a63c378b732566d39a89db5ad7fea8aa35caeb84e9bcb7da5f2dd4cd168db3b00cf1ee33357241b4d
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = c21ecea2446272344138b764313eff2744d79b0e1d59aa223f71c5dabd98fa84
+Nonce.0 = 42eb3df3b856260a843c87f03c90dd8a
+PersonalisationString.0 = 3b68c46f7b83e9d5cc347a4f88eaaba3e47b666b6c3f2539fd58726b2ab20ddd
+EntropyPredictionResistanceA.0 = 6c967808607347dbd9c9b5e2527f78101512c14a35970b8d6a8a993af24ddcb3
+EntropyPredictionResistanceB.0 = db9898a1a0be5e85debf98fcce2904cf2f942de1e7ee19988d393e7d74667851
+Output.0 = fd0981aa183c9f8f2db38c53831e7b21eb58644eb8858d459f0f72b46117941e15e258fc42812e25cb39d29978b9d5dfc7f110cd27b1bc122740a6dd5ead69a2e496c4399dbb466689458968b648cefb341319c43883fbb57ebfdec8306f6ffc8b52798d16c43c3da599769d8aa2227779b84ce460514a0b7431be17bacde71daf0b5328e9bf292be6c2ba53d393ad70687b043259bea3e7b2da168f44aae2a2aa16c7b4ed1f82599f5230caeeafb0adab9a340fbd324758b026082871f2b2b31e95e663f769e4e676de175affb35577e21c06394d47f732454d64fa8a80478729b5448350c18036366f2ba0b3bd39570e1edd01044237c189b2d46d35a8d7fa
+Entropy.1 = d8f8e8e93da930dd2b0afd814ed787f040d72c381e7b0624c501f39e8d6bc250
+Nonce.1 = 6dfce90d12cdd44a3d02f7730fe6ddb6
+PersonalisationString.1 = 68d47335f9817a53bbf0dcf5eca263c07dec7c8e49ab2171348bfe2dbe713a0f
+EntropyPredictionResistanceA.1 = 5b2c192d32db82c3b5c7ea0a0e464ec6e4dfee79d817e110c0bb32f815581cbb
+EntropyPredictionResistanceB.1 = 2d1f4a8258b3062162c0ab64a0cd2ea533f90e9561ae9fd02b1b073e72c187bb
+Output.1 = 6da7aa82ddd44ee1c5fd27262aafd98bca4315f32f8bdb784986909b83ab65e624f8810c6805980f7aa64b95100dae11e2cedeeff39d0737fe60f0310daf27649f4ddf49a0249de21ce8e48af59452e96a3f05f1f282ff79aa147e12c4ccc274568aaef50fe552e8a2380c23e10b07a82e1dfd59daed027fe3509eef05287a493ccbda9cc323a2c43d38e30f060133dfc78fa09ff3f95906ab7c7b8424a1326d5784c5d9d0fb7c651e6ec29232b66ab61af6bc6b51451c0142e1c3c7eb0a7a0a90fb6397f342815d9ca6dfc049d536e80fb31cf088aa02470ed7a2d9c0ec014f68a0f5d5e9db40793745d6c967a6e7dbec98afc4252b684732195c31ef53d67a
+Entropy.2 = 5bb9daf135513e36878d69ce8138af26192f547df7b66ae9e69e41e1b6b6b05c
+Nonce.2 = cc05b8e038519e123dcedd87be728b84
+PersonalisationString.2 = afd8a0ba2480e152dc2fbd646230737997f72f2d188564fdbf4b37fee31d9839
+EntropyPredictionResistanceA.2 = 5ed11591ade8e8c0b4a3adbe028ee3c8e456fdc5110bbb86073206c2d9ef5898
+EntropyPredictionResistanceB.2 = 66e4e91f5d99dfea9b27cbc56d7b4a0e9f932551ee3e89c271840dce904cbf69
+Output.2 = c536082008c1085eaef60234a4812cb7cccf0e57dbd4b5d29f8c8099bbf6b1d5a0d044f96d1d5b33d6be0d2bc427172bfc0458d6ff48b7c2e6f296ce6ebcdacf163cfee593e2ec7e4c4bddaa98c74bccef52eaae6c037e56d908740150ce34a282a0eda059dc389a3ae90aac4c60e212dd0054fc8475478ed640e3d23771c767c557b4007b47a25b1c660e6244d5cffa9028e14aba8a6b436e2da1e4932fd192c18c54c993e34f904a8cede47836fb70fe781c4b9d967843c448fb0e2088f4cc39e4197396de4a18807eebf13c6a6e753017843eebb715d69b951a78bc399ec094b525ac9b672fe749a8a81840b94f463651e4c7860f15683204ed3cb4c65c35
+Entropy.3 = 619f0355ebd015cc22b79053146ed6ef03670f987fb53e8de09e1f2e1ba142bc
+Nonce.3 = 3915cd91a2bdf785b7c5a29b748a0c3d
+PersonalisationString.3 = 2ef1e7a4e2c3ff67eba1824e3b52b3f51c581798f4c0ebff7fd92315771cb8a5
+EntropyPredictionResistanceA.3 = a2f28d5f1bd20f48d7b98439da1a9768c141e8a45eb999b58384c42ecd5a808d
+EntropyPredictionResistanceB.3 = 4b7661d2c1774204ba7ee49226c8e7099c8d09758daccd6022fb95a0c45c9057
+Output.3 = 0239d5c635db7a03e75fa5da56ba88c22da9bf7015153baaf571173e1e4ce76844bc46492d0264a89568b9839b1702de07677fdd01ef579a8af9c821c249e8484e4a502c19604cc029770a0c95e85d2e7eb7c78059fd7d8ee1993ffcdef3955454117f728efd1ed2d1fab2eccfa3afa02d58b8b3f87cea4b0776305cbebb93567317bbc4426c7c02d3d4558e05f8d00918d25fc369d84a7b00a3792d8f22f7beb2e9f14dabf30d838f0d7f1da596233ec3a03e2d8ca3d476272ca558cea0eae8da98b8cf970be590d00fdd7f5c57c23adb7c0ae4f453f9748a463db652943d3126ae9160b3f7e1c50f78ceab0ca21192ae9fbcab65194a9174a0032d8bc3edfa
+Entropy.4 = 39422d7627c6d476e6da8e90917445d913278d05bec9218fdf74ec42b67a02b6
+Nonce.4 = b024a699ff327f5181dc65668a942eaa
+PersonalisationString.4 = d72288e8f2e99ce3431c37d7815433ff5a26b77e559a62a0ca9761a0e57194e7
+EntropyPredictionResistanceA.4 = 5a347798923ff20c32bf6ad6b3c886fb26fc43c9746397593bdac3170971fc2c
+EntropyPredictionResistanceB.4 = c5202e02923aca4634e1e180d829e5fa10df55e4f649596b73f93c040032a2b2
+Output.4 = dd5b7483dd43cd9d04e8f4b327091af9e16d946eee7c04b59f9fd78b3694cab1c6aca94dcf379de81942bbda538ffcf94f2fd9564c563d401469f5c66fd2ad2f9929c39f8151a151e4f4a53411ef66440f538ba420ea02fb6157bdc290fc5ebce5e6a1716723b550c8aa78a10240702b0edee24e78c425f91a16ec6be45117f7d114fc28fe5b61c0e3e69eecdad3465e48b8ad5e87b22d0c61306e6b78d86fa8494ece1119a84881253c220683163b3b23c3daec8f601c303e1316abb45ab64ed432515d78924edcb8a7ff6f4353a15c81d998501a8cc74442de9b1f4f06c788f341beb2272d03d8b26ed034aff9c16e1d4fe60116a8b7bf9b6eeadaef9c8120
+Entropy.5 = e78c88ddabb2d40da276fff338d2bc2cc1fb3114d94303e8009294142d0e6158
+Nonce.5 = 4da07ef4dcbfadcd67c8c68609de3016
+PersonalisationString.5 = 96765581144291782eb436f8bc00057fc7b0ad080d12400cf73b3440b88de2c0
+EntropyPredictionResistanceA.5 = 1e28fc03d1abbca04ad34ba071041a5b07f13154c2a7fde802aeef3b14910df9
+EntropyPredictionResistanceB.5 = 3e3c8f8eab74cd3e84d38ffca861b7bd785dcd02f6c97baf006e690d398b2970
+Output.5 = 3b8c75e750e9a18aeed07e8fc91b28c309d34a5e50a777499d148c3c109b96ca82594fa0c0c08d112e39d5ad48cd30d648e9f02ed4c9de3c9e5f47d0796ba7ead5e561d40f652e50f48901b06d537e69e8963f4f7a2622e18f9e81b84f8bb63ad3731c9c694c47258da4c018287135b87c570f81e5c26ed84930488f8b37996a2fb4bd4637f25b1e16ffb8b9da14cdba3d89e44396947db858d1433e1f2bd3a1d102f49300d838a429588e5cfe158748a1b3614de3eef5bc4aa5e90d3bebae0faf77ebfc74a3e031d043857ab36b445728a7a010368da95b45e2da44c22914574629afb73fb059032ff448bb3301129230b8eea1b219c9e3a395910bcb014140
+Entropy.6 = f30f8635768ae5e086e5d88357059d912cb4f704fd8315943da7d9d4980c4e91
+Nonce.6 = 47b98b4abdd48a09f06786515197d00f
+PersonalisationString.6 = da39d9dd306e21b4c16e0158497f6027b4d011130e3240b8506161fe4ece7949
+EntropyPredictionResistanceA.6 = 4e042cbca43a499c64997726a89bcb61561f0b49d6e906971ec709d446d1b00a
+EntropyPredictionResistanceB.6 = 4d80df45183c7b284dedf95a000ed60f21aa2f8d69133858fae6e98cb5a7d6da
+Output.6 = 7be4496d83c97889bafefa6a5e2892f597d7feda6a24496e8bc52014805a68b3562ea8de95ae71dfb33aafa0c2441e8e95c88ae8c24def41ed06fca25914f247cfdbe527ec876127becc779677f23e144bc0e238f71de9126db7f5a658501c0687fe2aa78dac6ed46a8b6680d386d8bd007817cc0a189c111c790dc566cf971a265e51a3d50d948d0f715f64e85d7e5806e1a30adffd792c1f6d0178afeeb40cdbf06e58ee3a9c5a0341ab55445bc8bfe5650905d6eb70e70bcb80cc81056599220471141d2c67eeed96e240690c4c1f7b03b66b8879875e08b0e6008397d2d714f90a9875ac247e3ae7ccc19784bc2a077b67dda1fb6f866a36864a752b507d
+Entropy.7 = 2ce045479120878c914565f63e3c7533614e84d0e86ae9f45b1339c283813f64
+Nonce.7 = 400c9a245d4ecd10b1b2e00478df3d04
+PersonalisationString.7 = dd9c586c8bcb12301144f178df3f50f7b327687ec951af47a744ae43b0dab1d2
+EntropyPredictionResistanceA.7 = 05708b9c033796d7846ad3c1df59ef5b78344f5886cf0b0b9f727b1a31015b46
+EntropyPredictionResistanceB.7 = 8681bdee4af28009abeba1ff99ea4bc69ebaf2c9452e824708d19696e6d19491
+Output.7 = ef960a6a53f741845b11cac23f847a36a5b9d397dca50f45bedb3d656b70a9aad542b3061896816733554ad7297d14eab10371dc359566c9c49270ba37b9c705b8317ccb2c6c7076e6b50df828d5548540b50b8944603764cd84bf703a3f0e1159a29b8d510a0e8447f0b4eb44014eeec8c949e948915939d721f420420af46a6226603dc8998b440eaff28123c138c53daead95164332890f7e9f636463a1d3b818e0e0f586cf27c4ece1695a8ccbdebe51a209bfbe67e7b3c09e4b915f24601d043b4913874541b63cf0c0eb33453e0d5005eb00968acf5685bb03e11436caca6a52ee52fd87764b404d1717ebe0cb899a6445d4191d606ad00b3ed5afb0e5
+Entropy.8 = bc1283ddd5a78c0b2d88168c3167d164cf0a2b0436ca92126c7fb8beb221edd9
+Nonce.8 = a44df9ee185326cdf7a3d2d023281f8a
+PersonalisationString.8 = 7459941d65dab9675ee46fe357554fc0921a76df47ab63e5050dfe3322a23242
+EntropyPredictionResistanceA.8 = d16daecf20d0ea6020e21ca3acb7aa460d894d43f84588069d9bdaef3cc9444f
+EntropyPredictionResistanceB.8 = 9fb83b746b49beb108d6e0e42c6d81779eab0cdb0cf69ad6f0e0ccad8b42cc06
+Output.8 = 984d0dec568985c1cce1a088bfba7720ecaaed79eced219d601fb6ee36aa6a65bdbb13e2b766bdb5bcbda3f24a72bd02ce2e32dd3cd664cfa3364312f2c17483fe54f5c2f11dbae8557e673d010fd1961842fbc39dd80aa84f738a708144ad62754034582e41de4d3ea09801d99998e06c949f8bb5a240d3b96354ab5ae0e3b361f6b36e0a89827c9dc5d58b755efd1e6c3f18c2716c6b09ae933abd9495bcc9140e027624e03b918597c7d264055ad9f4920f13dca3c69be216491defaf931bb7d973dda39aa17b49b777d5b84cd9cfd28fead678a0972a9a69c0eed99405105d48f42c332a04edbc26534a975c477982aac8acf87b7bcf9d72a9a49b69c9e8
+Entropy.9 = e4c2799f2af05f04c657649a3c421f907f470e3a03ed7da8a078f71023a2ac78
+Nonce.9 = 9a71e4bd9516d9255e83bf49c2463b8e
+PersonalisationString.9 = 95987cc20d61c893367b6af019ffbac9e355a061530e15c5b5cc229ff9065be7
+EntropyPredictionResistanceA.9 = a0b9b47429ffdde4e6f25d6985361065205aeef8743134d26bdfa99de79da03b
+EntropyPredictionResistanceB.9 = e50a4640452a2fc24ce6868429c900dd874655360a87d652de1d68ee19f300d9
+Output.9 = b6f34976e750e596b37a41cf8a4db2a4434cdd9d505e5898e6971e669862182f97e042ecd467e5f5407ea5ba5f72651fa73fe1052c42ae6591c40e09accbeb69a144f6f3d20adc78c53244ac9fc7c353b5a0fd3475ae5a9156b8f710f1d432246c9e35e81e70d2ad81c1da97087817a3aaa03f5b8a1e56b6c6b17808e6c4983df6d51222a6e8b8787e7dbdc41350b69f64cfb83be818e8490c4337ca0a76feea8ba06b95cf6b22533f65206cff35be3fbebeb457b298654a487aa41f55109762a0c3a3ceb2f6ab80108ba47f05a6ad837d86fb66104a92c3691f744fd87a9b94e3e3539ae0e63e730e66f71d83e7ca0c5882388be2ced4a51fee3e6e14b71094
+Entropy.10 = d4eb018b4d986c8920549daac8120fa7cac1180411364b03e467b4170b450b22
+Nonce.10 = d55bb2c72d102e35ff4951dbde094d27
+PersonalisationString.10 = 74d527c92c37ee5704e53c2ac128e51148fadf83d40a98293ed2f0532bc23cd5
+EntropyPredictionResistanceA.10 = e37aa2f6e97f17bd263696b0ac68af62acb7d521ea577f570f8c4b2bebeac694
+EntropyPredictionResistanceB.10 = 86d06f3a4f58fa0c9167e40c3715decdd55e4beac3995a60b80b35c9dd3fae15
+Output.10 = 53fa8a915799297600ef3a199695a3449d141c7d4852f1c8bc86370ea20a49d7b6decb4b6f098bc3cb3f3dc5a468cb43129b8b01b5cafd2a0a0e99942a4e81a51411ff99f9ad3f60ba3124ce1e5169e7b3189cf31652ac4f57ba863df3b77a35a4470488ff9307855f2e417bfa262f0e876d9d7b7ec3b55687eb51558c0238a536ea415032203c9b07206da9d25507bca26b50a82659d7d5eb512ec499305c978d8f7b4ec538fe5b36ba9ce237a7940130e30926867058657f637cfc082da82a0733f219148d5616b3e0b4f5ebdcd112c0e884bc76ad337f1fc3bac3fac5670b36d9bc65cc44246f496b914f6c8639da7ea26e968cc30267c6ee25db8b782349
+Entropy.11 = f86e1d91951781802b7655826cd4cedca6af3953d6893d5533fac5b123bffad4
+Nonce.11 = 2dd62b5221d85cefe2d849812d687e4b
+PersonalisationString.11 = b68dfefffac6d6bfe9113d11e181b99cfab5c75bd57aa7deee6f33cb44c9dd7e
+EntropyPredictionResistanceA.11 = 5c00073d91f8602c5c810bfb8378ab60bcf14d4b0457220b966b0841d2b8d0b4
+EntropyPredictionResistanceB.11 = cda5446d00db005394841cdbc80d401a92cbf2b2115666075f592bf5892cd966
+Output.11 = a39284319a0978e1692545bb725be1641fb178924dd002b9806787bcdb75c2557b3bb8ee2012b3745573740845d40e599cc39ef9fa311e39192ebe052d4ffd938546defece7a929a6f49499ff9d03d048e7e25cebdd667e1ad7e4ceadd8df7fd2af4088a0bd6050414ef6a57a9e5ba66fcfd30a3982fb9f85688c96bd2dd8c53f91fa85253f7c520ebbd215f5512ff3197fa1abee22f7801d315a79c5b6648d57ef77196377ad8cacedaeb17c3dbcd483f757f5aedd0ebc4e2d51d715294882ba2775c051f5be7bdc79d90369afdd9454343259f59fff2f9e53d5189ab57aa584f981f98b68d1fb2ba9cfc390212b86261cc9465141a15e6dd38706bd15aca17
+Entropy.12 = e9427c11bd79aae8c0cca3f41f76f4ecd065c36823121fa3fe39fc6008ab83c7
+Nonce.12 = 7474241c41b86f1e771b2b21980a9989
+PersonalisationString.12 = 3e2cda68d14da54b17e4ea76b8007ac7a3a3a2af5042cae9f53f76d546e08188
+EntropyPredictionResistanceA.12 = ea848c711de043d3f300df64662e0be5e87defd7761c89088bb6c49f11ca4587
+EntropyPredictionResistanceB.12 = a48b703112cb075c8125b0851b7a9e5f7b15b7c55ffceb74db063034ff1677df
+Output.12 = 5059bbda67f7aed372431b6fe71dc04578956a739159b6afacf8ef537047b75090701ca87685a3f484826d9cb14108cba0e81fb70d2f07b41e2fe5fb0cbe361902a112efb52a248597b96bae4f8fcbd270e12e175ce1218d957031c53e649a4406ab0154d3d946901dfe6fbf0985f5e275a941493b1ca25316b82718b5efa7dc7a3ce977d49a1e8dac996c38023786d104a921ba1f9e206662009d6750e9da97fb65865adc8785ac51626aa64472ba49d0da4e3f1b891bfba9942f0675f4beebf7eff0f60bb7de8e92998510a5abcad913f90a0d6c9d384a2858b812bf3c1e199433917f8bde76f6fc7be5ec26be0b4d6e7c279fc86a239d9fe049994affb05d
+Entropy.13 = a49458134cff00de53c45ec9c4913baab863bdcfc7c22b021c36938bd2d6b808
+Nonce.13 = 4cc43b585c92dc5437adba139df459a8
+PersonalisationString.13 = 4efed6855cf39f580e07a678dde228aa47247c603e8e49e9a52ab74d74eb720e
+EntropyPredictionResistanceA.13 = 04b937a16147a873ccc21573d30aa57ea4b2f6c5dc338d7a8f0769744cb4df05
+EntropyPredictionResistanceB.13 = 0803323aebfa4be743bd1ce63265d70112f839711481789c4dbcbe1e3c960423
+Output.13 = a482b0c1945b772155be9cc2d51335533ad7b7b1a1abb8d6f7fd4b2092bedc51b3ce27d3b2ec35abbd5006c118892928c3c345bf8d4f0b16726274916374a15384dc893a89729dd490d6f08952aa70b6c36d8f770317f662442efa84db607d1c64632efbfb8d709fc5656f1cf2fd3416c41ae82026af78c256e17f0c24fdbc3938bc5df5bf8add9f98ec65bb3d279965d4d1f23606a6522dc75d14e3c148b6a1464cac314986387ed2f348fa116dd2f797c0abcbbf8cc14f32dd343ee9929e981591724d81a9c0ebfa12e9ad8d7cd7ff15a33ef9d4d375d7b780576cfe8396f89a21637f6db525573cde9bae5d31e082e47f69e7a5ae50f109d49786cf64713f
+Entropy.14 = 4cb91f1a8beb452b6d4b968d5a0e753ab6ebd22a41022dcaff19a6d66b445848
+Nonce.14 = 777fceb78515f88f329e636a4296ac49
+PersonalisationString.14 = 5010a9d56c7cf39a85965e0608b7ce8d3eb7141687279e8c87002a4fa81e0abb
+EntropyPredictionResistanceA.14 = 17d4db847eaeb650ae28fa9aee6ff91774ab3cb019fe4956558a9dc8ca16b60a
+EntropyPredictionResistanceB.14 = a9643dfbb60133920f7c47d642f4c6aae22ecba0d1c3ae7f8d9504f106df72a4
+Output.14 = 988a3f6670a9ca0f94f7ca96d21af282f79bc04b5c29ff2b597b765609a3d1e698837207c979f689606a6fe13724a1fac26711c314b10fd679262be03cd7573d5cc4fc5b5fc49d87fc1b6dbdad7987956c39ceb95501e88f559b101d87ee753bad4c192cbb692ee54f29e07baa3ecc3d88d9f94a67a4211bf3b389653e6b85dc17a7d35b367f6684c43b7d3b0daef7f2ff248e284d688f39d68c9020f6cf06398fdfa1181ca30abfde551ff76d027bcae3305a7866157d183fd1f5041de8ce8ffde14aac6cef436a7da023df38c0cbd48dd318c879cb98cb3a9022519469db62b17f03027ad838d132f9d6616e484ae1edbe5ff631c1f59d256e31e70eaf43c7
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 2183694d5eaccc8002212375798f8574b341ac6b543a85156b98e8fd43aa466d
+Nonce.0 = 5f06496a38e455e87b5e8a4d9242500f
+PersonalisationString.0 = 820f1903be678661ec196faf4bd1b955dd3c8cc9080fce7f80f5871c07b353b2
+AdditionalInputA.0 = 9da7f7bac9bcae6c550901a0554c4c997c77fb0311455605ae3bd7f3ffc6312e
+EntropyPredictionResistanceA.0 = b7d63728d41ffe000c7e77cbf8dc2d338664cc9416ed1e3bb718d77c368176b0
+AdditionalInputB.0 = b6c5d5bb863bb5be409fb45b851c7ef713fb642e516d752ef005ee958b46a43d
+EntropyPredictionResistanceB.0 = c5bd6151ea31d126e909dda5ba5b3eb20b339c5097cedf93e2082863dbfa55d9
+Output.0 = af4ddb8abeb5e6a9ed328aa78500d1c7fc41a9d2ff70a1154a93d8b79b122a7cc258079b491d7ef5430da41aeb033f9af638d15b25375915a8f851a754b8dccc396d933fcf38548d13c377edb7f85877c730af03dc22e5e7d30271e5e194b79a743a2d3f6f71f6fab3704180ff69b0439baa66cd2af01d47e0b2d5d1bdc5d4103d38d8820f3dae56b2ab019d58c012d19df14b67c8d88bee76805f3967bad41402e95b86dde8159101d47b37a33c726d9f67ac932ba346ece50eadb50b02bfe949c3a94dc56f14df56e1eee686e37e7321de97a6ff285a3b87b65e6a173e503086e33568090a912d3a868b8dfe395f5ca85786a633b83fc7d07f40a193d6b82a
+Entropy.1 = 040ecce9e508aa41256c6fc5ae516e987e1a33e83d98af5c44217e8ea425a28f
+Nonce.1 = e10a828710a06df54771d51b51e37c2a
+PersonalisationString.1 = 061ecc62e4b4c4d1b376876bd8199b1915bb212ce07ef627016fed285e926b83
+AdditionalInputA.1 = cdf746162992c6d4492c276ee5b04b6e7eafe26fdf49375cc47a483e72af1e69
+EntropyPredictionResistanceA.1 = 5defeb7dab26b8e1dfb43cb7b02eee4fde5980a2be602cf0d192106e1537805a
+AdditionalInputB.1 = 617562e0dceb75506da973cdef8018dee14baa86af76edda4b07a2f9f9346a5b
+EntropyPredictionResistanceB.1 = 6b31adf63bd301199fcc9ed7d326d184462eb231009cb1a68533e0a8f3e726a2
+Output.1 = 8fe58a31e4351f5d05a8312d19da9fa97808afcd86871e78c58830f2d534a561efa4b352098ee1c6ea755f225682119e7cdd1869a945b567bc57f1fb101982ddcf8b7043c32381ef5aaca21532fd737cce81b7e6556c56cdab36a4f9bf7a06742f3733b4396fcb72840f7ff2be50c96495e858402de44748c5e60eed861d76bb73cdd39d3c579c04040c41193df381a4c512adce5af76a5aafdb7e933acd70ad916d196e835c3d41907e3b968e93a956e14ceec7e82503c9e0ed3816a76f72c9ab0c10d061a9113e541cf8ef020d632ace1bcab691235e47aa2fe0c705da0185b172a8a06d87f11939c2fc18295f3ddfeb6e9c8e3ed7cdbae5b9abdd6027293c
+Entropy.2 = a9d89737e86d80c06abc6574e12c2f950960f2e7745af48aca58618fde61f278
+Nonce.2 = b37e90cd28aa26c0ada734c5bb867b8f
+PersonalisationString.2 = 67606f368f5160186cbb5c69293d0ae63c88f33a6d07b0ae4a1965d71f9499b4
+AdditionalInputA.2 = 7ad258448c4ae5bd3b1949f20c2d0c7890c12fca1aef0cfc8f23308603aaa963
+EntropyPredictionResistanceA.2 = c608277519eaec996933af119b0ac322947668b5f44c46681af77acced38e051
+AdditionalInputB.2 = 8eb6f8f4d571aa47ec009b299a1aa641f29f8a283b90473a393f5281fa4ed286
+EntropyPredictionResistanceB.2 = 913669b288efbf3397617c5d0327dfe1d3c2c55c815f6a653a1197faacc67a57
+Output.2 = 87fd97691e918227aadd8a9d0af1ccb96e2c25501559eb89efeb8eb6090251f8ea14ef9d26f0a6bdfbc6effd1fd9357bb3b7b88ccaf2e86b594283542415a571151dada37016574b6ef9eaa6915dd8b8ecf1ee68eb3c7b5584774d24d609a2c7d5b8f9d45cf8b3f877828fa50d505a8a1796c1a7c39e7f031f376f0e8d820abd3f6fa707fc71e48363ae4af87e00f2187b335db743ff705bc2aacec3627fae4227f21b34c0ec5ef2ac24e7a5797d02120dcc0aadb4766cdbad95809dad197ab8d26215129391c9b7edd8ef7c6e5413cefff3a9e8056603dfde90fdbb311ef0d6606c410fc22d3d339c74a7952a604add233b6816d3451ef3416a4315edf4a9a8
+Entropy.3 = 7319bfaf647e29e1e887c42fd4c8832f0cd3dd943cadac347cf02c5dfb1ac66a
+Nonce.3 = dcf71713dd32e725b9e179811f0af1f4
+PersonalisationString.3 = 527074f76e91559b0e17f04a092f1db9f8ad1b33f815387575577fab01358243
+AdditionalInputA.3 = 0aea946c841dd35568f901e53d3a7afdf49bd0da595b9f27b2a3f274c25efaa9
+EntropyPredictionResistanceA.3 = 9a5324b50ed77ea04090742f3c553900587e451394cba8e504b1a470e06a5b42
+AdditionalInputB.3 = 13c286558aaf1a5994c2795180d0f31f307cba3fde631b436ba4afe2e7622de6
+EntropyPredictionResistanceB.3 = ebdbc5e6ae691b272661348539ee3487df89804f4559f8e3115014c4f0782b5f
+Output.3 = 005b72127c2d2b59a260efa131212f4c0d83e266caa31693848f41a14b7dc8f7804eb6cd43dc9b0f84c954153bcc14bec4d4b1279c2ebe1f737d8c453c48edbe2d93d8830efd12994dd5265ae54f7eb48f15803065bf9f64a347060d217cbc5ccbefa040ac8b4603eae393e91b82fa38b9cf4845f67531276f03c5766c7e9d7aa311eae416cdd6d565e458ba487c8c2213fffa88b8c5eb23267402f4ef1317e1e2d3490d050325702595c9506605d5bae8e7a4e89768f12b806b591577dd1cbda05ae174cdeea5a86fe65c022cc200953c31c7b6b5c2c5ae359db43404dce93de9a214b3c9985b3005b3287f8ce14901901101363d03583c899d36ad64afb35e
+Entropy.4 = 320d06d3720b7918021d74c6be813e90cdb0221b19867cb106f076a8ee06ac3f
+Nonce.4 = 7062cd588e4114423016ceb1b8d655f6
+PersonalisationString.4 = d9887ff6bc7c2be80819167f20f4d6aadc54b5635f1863370400a4065dfcd578
+AdditionalInputA.4 = 38e60fa20323382e3b35fe525b41d81db2d9e75988212e59c06303a973971fc7
+EntropyPredictionResistanceA.4 = 71d6b90fcac44a7dca523776bacc705773964b7269ad403c35a17be4dfb791bc
+AdditionalInputB.4 = 80ce3efba83a9df2225a57ae2b3e8310c910088c18dacf5721a6a00c17fa3a35
+EntropyPredictionResistanceB.4 = cac9f179283fee3f5c9ee2aef37aa7d6517c397a92d57fded0c32a55110ab04f
+Output.4 = 28a4295d56537e831e3328def2f19f8380f9f5ecfa4958548bee254a2a9a779d9299e85051b09af76faa4e0e100fbaf56de4b27ab8f44fc52c56e27be147278f561623641b3166c38f8ef8a71a1512e5940633668b9b53dc6d86e7bef695492679e2077f46a98192e2f916051e075fece4a076571b129e42e99586503b89bc8ad2e0cf7281d221073d23d9ab8c121aaeb3f40833ed53ad1333db1eea72bfdc8a9a6e8157c25d578b66a1e9246615eefe38e914da4c5c70453f9754d608da0b8feac0e7dc5bb6b38d74824642bebd6975a89ca6691faf1edb1cf813f75f27ac92156d024518e95734a196cb1ec5f5c56ff72730e67daf9507f530faa7229b7e2c
+Entropy.5 = d24042e8c505bc2eacccf03527237642b4ac3cc7b98b42f1fb95b8bf93fb8f86
+Nonce.5 = e5d7389296b13385b9a6cf5b532c6324
+PersonalisationString.5 = eb8118c0bbfcb62883eb883cde3aed8789b6268a5f264ac88d11ef000df04c87
+AdditionalInputA.5 = 0ff68bc3c5f6a7047e684a1572cb18c27f6e2686684b8cae46928e825e47810a
+EntropyPredictionResistanceA.5 = 05e2694d9eb48e6e81e0da01d45a17ee48a7aeadf87b66e9b08fa75078054407
+AdditionalInputB.5 = 6066d97db694255f014465e6ca7fa197e76460c41b88a77f97d1c5a8030b14a9
+EntropyPredictionResistanceB.5 = aca059a0a7d66648f09ed9d5ba8a61a9b86603f8275a8681018177cf44c4b556
+Output.5 = 25c1f4bdbc1d51b1df482c6ca705d4812f08d59045a2d392e5ed016b29860daa5e5e953081046668d268abd8045c07d4b35e353903fabdba7e3c5dd41dcbd2df03bfe004abda85e9a4b2c7ab53a8209e0a53f131ece8c9d78f1dc58c15e17ed30fb4dc83d1a4b2ea4f6eca3e588740a7419f672e9e9b1cfba159486886c27af5f80502bfc6b86dce8d504047ac1ecb4f36993810d06f630afecc5bea412f68196b394e5409b6b370727ce59f3b97dae7c6d98965d10179744de58e39bc66aa881ec394afcf5138e0a0b2a3eee9ed4973ffba185c8cd4b7dde2f5f93e5bc2ccfdc83d712c14c0dd7aa5a19053e0320b7d30cec5ec73ac975c729ea464650fddc8
+Entropy.6 = c9c53a221f075e1ecdf2ab9c341fa2ba4f92a012927e0ec535cbbf8abd002dc5
+Nonce.6 = c39c638e0b539885d06ad0df1fe005b1
+PersonalisationString.6 = cb01cd48f91d180401526c987e77281b95fbad7e18f912bdf0ac8449328496a8
+AdditionalInputA.6 = 99327825d2282356af9d735656b8d995158a688fe8a2d1af517c1fd5186e4f62
+EntropyPredictionResistanceA.6 = fc5e7861c637c8e3a8b273a3ef30bc84125b62a3f63cccd953a24200bfe6e77f
+AdditionalInputB.6 = bc9399f1b66369c7faf50f8020bea5b16983781b6808032ca01bed1a373b0680
+EntropyPredictionResistanceB.6 = ac97d24b5fee9e17c9c1708861e81a26803c30d0f937bf50b7c3d80fde1e88d6
+Output.6 = f4195dfc79e4c23d729cf54ca72ce9840fd826d11514a20f2e89403d7db13df9e74f21bc7b6e21a4f23dc7498edbbad4cfe0124375dc8a14650b65dc3988ef043554aedd7baeebbdb32cac72efbf4cb35ae213520025bf35316aff15ca6c35e22ab4ba1d2368140dfbeebe2c278f23b5e08f2ff5d188e0af27f640a2c004aaa261f41fd61b1394837123213f967bb3f2a3819a24fb41d88d2139cb89296313ab30ed5afc220b50d2c631dcd7eb24f529f6d6e2d9af17e99819816f75618efd588db3cb0c88d58639409c00e33d5b830c1c27c7f1fc88c0cd03f5cd36a524c35be0332bcf85d2756318127aa75cd5803553785d13e688146c135c2b082b115838
+Entropy.7 = a30bcab52c9cc94ff6c50967a776f252d262a28420704f020376f3fdba87963a
+Nonce.7 = 41f6bd637b1868b7d18bccebd8463856
+PersonalisationString.7 = 5911c16945e6b2f4dee480e79f7a4e8dfbc43dbbfff425cd7ca18cf2bcba0bbe
+AdditionalInputA.7 = 6c4d837c877bc2c9f33695434b19dbbb86f6d5781cf622ebed45b20a3d85f4be
+EntropyPredictionResistanceA.7 = 4f4cb76790f16448f238ddb439425414c7febf4bc4d0e3e0f09e6dcdf3b4318f
+AdditionalInputB.7 = 1dfe538ad7f961982e33d8cf57c8cf3e0fe76ecff334a5b1846ee8a7aba45699
+EntropyPredictionResistanceB.7 = 22785850f796731648dbc7e6e94968b405eb8cd89949fa4b999bda91f9ec3510
+Output.7 = 575b8b73897e0eb1c9fed6a20330dc944aecfd7380116b077a1d9e050c7138e976d3afe4f065b242098f13c380149948f26fdb8a5d6c59e771b8f535f7ceda9a856361ea41c20af0b0b9b6b191e5ce1c5742cff4c1471bd22d7ccabcd5b205657b802219bb74924484454c5e520ee5389a362302ed0f7d2e4fbd099d1cc096447e0950373bbfd2a831d00c35911e4937a52ba1163f4cd137a735f0abd43c4c8853ed919a8116c157e39e6607acecc5b5b8bc7fb64c6b26ff4c8e47ac147a731b0abe525d5abcf1fa5dd94651fd09cd136a084ba9b23875300989f23e14eee4daa78494d79132cc6f1beb9fd710de26d17f360eaec8c0e51c511e43336e92804d
+Entropy.8 = 31850fa373b6503e08b620cb3297298c7b72dcd02a53a99e22bc6011efd0e69d
+Nonce.8 = 4e2141d8beafdd84cee5d69685a85564
+PersonalisationString.8 = 5b89222ada75a464dc3bbf538be111a771dc96ca79c54e258a83afc6f9b92d09
+AdditionalInputA.8 = 0c1b18ce575eaa14e1816b69345a5148588eaa6f02548deb182c3a47cf891e26
+EntropyPredictionResistanceA.8 = 9eea0beb6f9f212fee82b691f5804fe751be6e0856b59c75d4d6ff2804dc0307
+AdditionalInputB.8 = fdd0385c7fafe7b13fe0e1f9a62a12cfdf9fcd9bcdb0ea3cb8542a8c6c73415d
+EntropyPredictionResistanceB.8 = 94fc4c78cd8c2894dc746e44ec463d61e17c90e7ca642c4670978ebb1197fcfc
+Output.8 = 2af26c8a0633f0969d653709877e9bc23b5338fc7c4c9cc6842d3f6a9405ba5f9cc9948ea6351752aefb6c893b06a3ddd69633e32b30ddc78c9fa595c67277e721df33ed660e5f3f091352c297e69c85a435e6da67dab5f0c81d3ef45703396028e2b70d855dd0ed5a5b3dda731529e2354aeff0362e4d8ecdd75973ce74718fb92befce8eba63cfe195b759d126bc0ac23fbb085c0b08616f132b768ada0e65c95dec426859ed581a341b5b1cce7b50519b9649e464e53c9c2c318a71dca38c427e10657b134a8e0e5eb3f3b5eb3c7063bbb986d29568fc55db58bbd24db78cae4a866a292eea8e6f388099d1812899fc491d34787e1473615e8ef7639b25a1
+Entropy.9 = fcc057c0f11798cd8dc6417b36d0e0e752ff7edcfabbba861555a7e2b1f45688
+Nonce.9 = 06724840ad0cb3b4901bc6afe26bdd19
+PersonalisationString.9 = 1c699c6ecf9d622b12c5c104642bb85cdec6fbc27ba5775c063e2fbcf789bcaf
+AdditionalInputA.9 = 3ed7ac9c58b3d6ca89a61e96f9b70ec59f718ad9a5f40555e4d0d09b809678e3
+EntropyPredictionResistanceA.9 = 270eabf7b78c80ce4f25b2d4a8ab60fd9196bfd79f1313e575e7eacdb6fa337f
+AdditionalInputB.9 = 87c1ce0e2cf4fc0692f7fa1516db8908afabde043b5c74a5ab9b56f0fcd44ae3
+EntropyPredictionResistanceB.9 = 5920961ad39cb49bcaadd98f363d03f3cfea1f745972ebc3935b566f5f5f9635
+Output.9 = bc78e7c4f0796371de87d14523bd6623efea0cdb8effaf791c372f37995702ea71c5014474e5239b1d3b7676b964eb19d6473e853cfeaf02dbdfae49e4a43d6aeac842b8615e6938459082f68c9184ceb5a62bd2028ddc3a078dd57ce7e0b88af9449caf5a8aff5bfca4f23627e8137ae6d7842df0fa3dff6595bff235db74beceba4c210f74e11655f56e05d8ebb9ee9443b1ad55537c0c8807948d82889fb16c13809f2c57c27f5de87e2f13e3a701b37eb1dde3934a76a02c00c62f9a48e29602510d1f14466c0b289499dd64967986b27d4c0174d92be5136a8d798fcd01c5bf1998dbb406280294596092bcb21f674e2e07adc50d0925945d0219d84677
+Entropy.10 = 88ac9877a19238a00c1b8051e28ed90bb9c302678033fb172b64981148031ff3
+Nonce.10 = 93537615cf23a87d0d68f48ad542e713
+PersonalisationString.10 = ff1b6c88c60db1de054563438c2be241eab5943a7616f43c3e113d72ded9dfd0
+AdditionalInputA.10 = 15589228d2dee0551eec157a6f4ffdfd93e66aa98abbab669cc5442cee241407
+EntropyPredictionResistanceA.10 = dcc03a9d49f04b68cc07fb2919c1f39a0ffacc5c571d27c27d650ef60cca5e69
+AdditionalInputB.10 = 543e151251397598aa159de11b3b7f699685ec209a577f821dcdb41bae18cd2c
+EntropyPredictionResistanceB.10 = 0f61e20e5ea024da3ae95acdff71e685eb6e8cf6316b8601643f2bc2c2f45628
+Output.10 = 523a7b40fb5b1eb5b07e910b93985842bd6c918cc035552c8393dbda0fb9222fe2fea293e3ee4b26a114bf3660375242a9598cb36bed86175f25b74406c503520fc9894bfe8b1a5d1c46c19c3a602b8fd96b4ec233cf0c4425c13b85f07ccb8a2526ecb0128b56a23f3358acb9c3b752c3d8c82ceeef0f5da89e6f0eb7532aabf563222abbbe30686a0ae07b3e99561e6ebef1c9426e8c663a2114f870ee10b0df3269f1c30991867210990d4f679bdce6b58d7be4a9c5205c1fd4503be0a9b90ac38e6f1f4113cb0ca68daa3926ecec35fd3ac9e15badde04b92c596ba12233ada551dfa5c49cc50c7c32b8fe6c29bc3d15df162fe6a9540875cfe7f4a3dcce
+Entropy.11 = bcf79aee5f78ca71b102fbf2cb73ac23002246854ee409335747ec5361575b3e
+Nonce.11 = 133b78c10ad1af7b0b9af2a5fd537d48
+PersonalisationString.11 = 8b3981e4db226635871910da53d08ff71a54083831228b35c60c74b771288dfc
+AdditionalInputA.11 = 1ffa71c1039905da4d6a251e97ba0aa50434eb4ea58a90560f0c59aa33bba8ad
+EntropyPredictionResistanceA.11 = 51f7b11c90d20c223b78f42d351ea0f7e55b6cb65a0904d7d3631240c5f43cd0
+AdditionalInputB.11 = 52ff8dd4599b3e40884c427790b0226d6b6f510cc552afd996915a08c5d06225
+EntropyPredictionResistanceB.11 = c3ac0f382767845c828014d95277bd224f959898b0cf73eb5b1761c06cbd35a2
+Output.11 = a4545b18e6742de07980d377c2d5f4256c93d3256c2114844da29b58be9dd9ca3b69081571e8adb460bac8973da0e986adbc9a3b8e13cba2d4afe11076d43f1d282098fdfaa8171eec99d82839393a3250b0c2cdc49442e2334d9bbf0e10a359514ebf0cae2cbcec3c71749a0211781e7ce2ab83b494aff439728ab7a45a8045ef8ace5ce7e9ea3747446add89ebdff6c8aed213b65a89d13d14d9a7553b412437cb66d870dcbd9aa44ab812fb38b5e1b3cac7173cc8b72f2a9235482800e8e469a4af8e9427006eea9ae309959f56ab8e139d454a4cba2257a1329c1508fa8da5ba8a13054f26cfa785bfaa8273b59dd996bf9c377a9cb3656ac743a3ebbba2
+Entropy.12 = 45f1b1d2ca8bf623d637fc9c26331e49e02d611658a32e3a7c04e1f9f82f365e
+Nonce.12 = 925d41ff7924055ddce8c9194dc020c6
+PersonalisationString.12 = b9ac663a4e88fc82b211f00e92dc2a584e6ed3129c762b1968385422b1c4dd1e
+AdditionalInputA.12 = ef469d841e6de1a630465ae52af9a89128bd13a82a40b719f3526e371ef2f01c
+EntropyPredictionResistanceA.12 = 095be73eb14523d57bb05fc119e73eb666a2b5ed5869d9a212d7504fc04eb355
+AdditionalInputB.12 = 8275ec320bd771352b1a69354776e0c52c49aacdd8076aac2a160cfeccd06186
+EntropyPredictionResistanceB.12 = 6588debc2d4dad30cd0a81d7d8c4d1f9c3caea942a11f04ed98b4e17e5c96529
+Output.12 = 5c4e34afca31d7bc445aaed5c89f21c11b7fd7439b3dfe60fbfa08f957d2b5f8abec8beaa93dd6e294c8887ed25ff50bf95c8aea1a7f3bc6afb68d9caa762fec6cf7702cd5bd670ea45d91616d14523c3a0f4aad7307f57b4b8539defd132733649378cda4125d664040205b6711a2e67d8a75c7fc30ef7fb9314c66ba2bfafc57ee15e3ff1d58b5586d9c616216577525e94096901d6c351387235fda9e67bb4d849a0a36bb766a3127d524ebb2a935cca979e4159d569e3c3ab20196ddc59d132db30eb126cd961b14c24ffafbd16a43f005a5935ade5f0d586f4feded5207c739beddd91a0f1e0368fe044b2c12dd185173f7507355313a70db4925428da9
+Entropy.13 = c0ca71ae09fd0077052d3c9f2b71d9067f8bea8f4381c18e9777e81efd563746
+Nonce.13 = db4e382f41f012347c74fadf0b1c02a3
+PersonalisationString.13 = b25277020d77c6d72bccd97ac463a962fd07c66bdfa4d39872fd0f8a2cc00866
+AdditionalInputA.13 = 01e0663477fcb26523601e12b807d9983d595073517eb28ae1c5be52fd3783f2
+EntropyPredictionResistanceA.13 = 6c32cda1c3f39f2b7a8058cad974e47c8a3fb47b69c5bbf628ad37e0537e13ef
+AdditionalInputB.13 = bdfadf321209caac277e8342063b7ed290b91f8f0680ea97929ef8c0b78839de
+EntropyPredictionResistanceB.13 = 957c3b8f0ac7c19c559889e4c47d8dc1b329a87b7e05f486fff713c7e8d37602
+Output.13 = 8540bfce69b9cf24b42ecfb30d72ac65edf19055a3c55d34065a2442223ee2e16c35b911193e3267b307be522af4cf225bf2ebad20ea944980850e8a99193dcf8f28d88cb8676e4d9b62d52012d8afbaa5d14723bb4eeec4f7a82daf0550ceafad0a8428acd1d87aa64d51e5f7cf1cc03fb937d317a2c559fdd8330055d623be4726420c8d7c44896db19384440be6503b541c91b1fc310f40003f19aaf5fa9bb856e4cd2c5c6a5b5f85321f5b0fa8e55de144b02e9c669a82083e26990538281561aad85b7b4460b19d242f9c807304b7275ef5d3d0e6fa1d5c649a27dd91dcb77f3bc17534fbf2b0f799faeeb6f91215f3f1793dbf9ebc356d5f867d54e42e
+Entropy.14 = 5b6991ffb111e56bc84004d334d4b962ce1b4b63bfcde9f37762f47ea40b0afc
+Nonce.14 = af4e1f02f193317de6d98e3d9ccaebb4
+PersonalisationString.14 = 7afec6db85262bd511c6837ca757bdba790b47f0f0f02bf8e9a4ea4bbcaf82a3
+AdditionalInputA.14 = ef2b89785767aa46adbe31bd075f907c7331de060e7f9cc83e7809fc5861abf2
+EntropyPredictionResistanceA.14 = 4645844969b1e6567329842eb82ae79925af6433e105ecbc5c05b225fbd4fc8b
+AdditionalInputB.14 = 579317ea1328287f604f2c537b4a6d44440303747ec2fdaf559c5b11b4ff42b8
+EntropyPredictionResistanceB.14 = 7ab78fdaa05859e3a560418374a31f9e23af78becd0875feb5bb0764c2996efb
+Output.14 = 57924351f587ebe2181fcf40ec22b8b80950adcf6dfcb78c895c4d3e29f8a9942235c8d0c4645ee9b599c0b4d903a86cf85c4fc3d4406accbe55ad3c0f553a0db7e6580012ed04c82f97a7a724f37fe40b6404f63a37178f485ae07ec2745efd6692921c4453d00ad89109b2782918489844551abf696493a93d51c35b6815ec1fd1971a526808503d1c8ef1f75b1060b64b554fc8cc3921f7281ac25e70be1438fd259529d8dcc37f45d4accc66c78c36e69b3c5730c4125572a138da80fe4a636e8ed02c763be6f93a4b8cbb33086540e1b41b1c334a5f4fce0e53129f6dbdac9d3a0b48f805bebf8d506f71a1d0efebdf0f2f7844b937851423fddd69c9f3
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 1b2829a002a73aebfe426d2e5af4af665403c40041564abaa9b9b40f0d3b5651
+Nonce.0 = 45cbd6e96412b1e2e7b442473923ac86
+EntropyPredictionResistanceA.0 = 57f5f251d51e0eff5fb104fffa7881de8ec87aecd3b80df525927e453b1740fa
+EntropyPredictionResistanceB.0 = 7cd86f4f142983ec2a04b810d97268a7c3624db2e80ee3bef84f49f4b574c467
+Output.0 = d035b1556fc7adb650766ea57dabee2f4855a9da832fd291ee567797af42d35059ea8bb76df030cc0d605657420d24ad8ba290a0faab87e6e83ec9857a242e7bd791e1f075eada678f3a78ebfb3de377e700b4bb77f30963913ff353751435ab992783de85f3ccfc02344251142e91f18bbf299afd0bde9c7b0872bc1b177808bf1444dc9f73003bb4f1cb76642a408edb540caec7e08eeb6161e525e3ad2bf69347dfb0650f9f9acd3267f554989301b4ed44262a46bc3a87a137453f1497784a1b513dc8a064debf3cda89893bb3399ab69da8a1258d1e282056dfd890b1bfb68d870249a29194203575d4d2ecca661d7d67d2fc9729085d00cf6998abf0e3
+Entropy.1 = 37f209e52607c554545982d8dd6e7b80651039848c5ef5f6bc1c09d3be73995e
+Nonce.1 = 5a175b8d07ff8d363794cc9cfeb721ac
+EntropyPredictionResistanceA.1 = 938dafa85fce9e3ed1673eba819b5182cbe7770f1115301107abc718c20330fd
+EntropyPredictionResistanceB.1 = 097f5c74d83e11be48741d3dce0d5656510af28804ec1d0ab9ad991bca991502
+Output.1 = 8d8101aa6ac42a7da3c7e04a8cd77a23ea35fc5dd21df6ea08c1f7f598721b400feb3fbec0b22ba5c72f350428d7dc938379c93d9e1541ed23b4eaedd02e9ef3a1c5eaf42fcae4fe0d887766821f6534c619120937dfd9fb9686abdd29c4ebf4b686a4f4a3f2224e32f8e7f0d7b708b0d36339535bd06b3ebb480beab9d1253d2fad45e457c1db27d6de85a61571375c18a37bceb7725585a3078740ed787c2e74d162997040b1c66ed4c08d4a9411dc882c0ffe9b7bc296ee3761e7fabd3152c559527751356293b3e04dbad2f750fdf666ddf916f6256e945c1635313344a609c71a18514ab058315fbe0226072467312138a18623d230a484ad552f263f5e
+Entropy.2 = 9af8bd58ae975258f798634925b82726afc12f5a0ffc3a1bba81ff749237f7b2
+Nonce.2 = af897e08bc6cbf23ace97b6998898157
+EntropyPredictionResistanceA.2 = e89e2aa76f3cba7dd7202da601d9ec7fc988bf522a25d0bc25e38e62d7c852b2
+EntropyPredictionResistanceB.2 = 5429189cec4664df688c82712e6508d749c33c1c3df73d5697d0ca5ba258c069
+Output.2 = ebce0075eb274805f570952b069c0454b939c2f0eb56c99e35041dfcce3bf65badeb74d6b099a146076530d49b2679bc728ad51992b65d1f0b7faae5b0252f10b5566986cd1a7ae56d26aa3f27debbcada73add21ec0b19498f28df6c812b1652ca2fdb20b48cc462b6ecd68ef810cc1cc641acf8dfd9cd4a6d4ec0248557c1e57087e0fc2dc240fb0ec643766db364f73a1bf9cd504ebe4431ec23874164d3612b339dd51ac32bf20391fe734965573e1d0f9512ee4e72a0e2e88c0e69b215fb7608331190059e3b8ed40901c776a4e36e8cab00acd70b9856fb9c8e4e8fe961919e93e693fb547fbe2889348ccf3f7327aa283d58b4f68548b6c6841c4272a
+Entropy.3 = 7d45d9b365ee594dc53bee07f495c8c4b54059b6398de6675960e486c0f793dc
+Nonce.3 = 33b88018e33c92a27e7bbe61a52f22d4
+EntropyPredictionResistanceA.3 = eb2342cb643eb2bcd43602aa82e1504913fa969e8aad41f01568ecb4117dad8a
+EntropyPredictionResistanceB.3 = 16e610d0f608946802e800eea447719f4b4f7643a12ff464f29a3468600d972c
+Output.3 = a1da9a9685179ef8991abf6c41413ae3b6fa808840a5e4985268bcbcf9e249c3252c42c57c4da3a6ad3da76e95234ab87ef222c5479e4fa8324420f1cfe03333042ad44881864c1b6bd36d1b653d0cf8d13036ccadf704116e49c41a617a79cae830489c3641134fc8da7684268c6e94c8915487a21aabc7c02eb5d935ff5336ea19d5745874f6a11ea4cb426f40cec1334ffd22d223e40f2a80c2aed935f2f1ec0bc8401f402ff44807cf6b4dabfdc914c0717c9f404381c62bbe59b3e9d9caa80c25fd61261c48192088e60784ae4f9a78195185b4d4334121c917b687a8adaa17991416f1dd6bb561725dd4f985561b5bcc272fbdd2d159faf89f3fb57864
+Entropy.4 = 13549dde1fe5294854fd097a4506051c1d9c56f5897fc0315089de59daef139f
+Nonce.4 = 1c6ba0307e642ea4415166bbe356af86
+EntropyPredictionResistanceA.4 = 3965bc97d8823cafec6205917b212e25a4401b6ae0f9177cbc0a573002258980
+EntropyPredictionResistanceB.4 = 27086665d03b61da58f327660df38472d17e033bfecb447d796230c00b009641
+Output.4 = 2383b496cc93ff99833e628e488078ed49191e30f124a36035e81f1d234fb43970075b49de601055c026a383b8674bec1d5f9a3c6e363e638ff29fdfb7ef81ce9f0abe65230f122ef2e2fac8829bb92a3e62776cecc599141f654ef7df6a211e5f9570c4acf49f6cd780836e20eb52800590c0f17556b24c412f4c8b351d15ae34da6cf026cf6b5932bfe90971126b916f0cb21479380db98dc637ddcb18211d590f71f776911964557a559975f872046835d3215d941f2a8b25dbf4ac3c30605b81a36e4a4f413213b1795157190c1ea7c6de10f74659e0d4487d0f7d17efcaf66d90bb8db8d1f5d724978e53c7bdd62d2fcf98e7b62ab3f53b20ecdd7ad840
+Entropy.5 = 230df46d31f595953a30a56d217a66d84cc9481c0751fada8943e9433bb030f5
+Nonce.5 = 685238db815ce61f129802ab6d691a1a
+EntropyPredictionResistanceA.5 = 244b7292c691bedde6f190e5166c39fb7c1f2a2a7aefdbdf39d0663ff686eb72
+EntropyPredictionResistanceB.5 = 4d1aa89f1a1bc1b3b5e3b94f25ff00703306b794bce07919a74f6a9b1967cc5b
+Output.5 = d6060cf9eb6384b9559a074868ff53bcfd64a623a7802abd73ba8af08def70c1a5a98d0acdd2b756a00706d515942b11c6555834691d02cdc269afa6c82cf4f16b52c00f21c83b21953c1ba3ce67b21196f1bfbc7bc795105b2e85bad9485dd2a3169945c1f7d7e362d50bb96cceeef62b78474bc34036c9887b759cfee5ecbd52ae3f56da4231ffe09a255ffcf134a47712a9abb2c63281fb3a65f021deafe55973c7fbc24c438184ff4d08c0ed45a6457d1ae1520b771a75c14304f4bb8df67553dba43c6fdf76f870fd62c7d77090d5149aab589d55bf4bc900c66bad5088097af621fac8446e7ee28e17caa039468d87cf81952c044c04661733876dd78e
+Entropy.6 = b13132ff1a97cb6d6eb89d3b811445f907c8599d7469a89bf8603953b2d27355
+Nonce.6 = feca5ba009276e5889eaf3260b05397b
+EntropyPredictionResistanceA.6 = 2273cffba1f76c3a7b5c50e2c0b7c9a965566b62d9ece283f6de4ca87a5e5272
+EntropyPredictionResistanceB.6 = ef2ca7488692d56b0c5327c26ac3b83462e0920371f803407833ea12c3470e2d
+Output.6 = a7a4ca6126199b6ffcdce6fdf9d1c1b0d4d93ff6ef8a03ff4fb3fabfc234e2f2a9957599872c55d5ec5fcc3089043d4a95620089d57a29e9c0a455f53f4c85eae8d1721f6aed4b36305ce436e8ca2dbf8df823e3a413bbd7b31146e8d7e0dd5569ad7d36548ab4d26f9a6b4102d6fca97a4c7cb21cb10323ae4a479c05499eeb11ab98414bd7c57ab25c0c5978a25abc6d3ad35c41048b95beb0a7c9c7257d843e9d98ae8696c9b00cd6c03f7073a06f76f9812295c90bc741c9c792ad3c1432bb7c70bf9b977669473a032bab4b93889c1b3da31229fe09ad704255f99c30f2cbef0b37fb2a265e5bf539ea940e63a3176e1dcbf3dd8bcb51377261c84264a3
+Entropy.7 = 495bbb88cb0d66837af921147565e3d2cef0654b5b1efe5e783f9cf707ae22ff
+Nonce.7 = f72dadd4fe17757f446a47a62d6a291b
+EntropyPredictionResistanceA.7 = 34f852023633afa8dea49dfd86e612e6fe4b2e73e5fdd4ac4d6392f9a202f777
+EntropyPredictionResistanceB.7 = 58b15e2a3cb28bd55df2cdb0910250c70fdc9a2e007dc3da1ee0a7cf878564a6
+Output.7 = cd4ae263e096f9ed5ec3d28918c957bffa294726e34f5f04bc6aeb38b1446fe7a007ac00140235039ce2c7f950734ea8ad473da4d3d27054a626b615cbb843b6f9bdd8aef4f5b9b98117b6b14f76638d60f2d640212cc412c02f653ede2916ae73b9fbabb9bd44ce1c90a404856c4feee25bde35ebfaae0593912a999286f75cf207d62f33074b7b53bd91fade21e68404b95494abcfa0608c09f8e30834660cec0518758251ce9f3091862809184087f55db26b6f7879ccbf5e8d1beba24859574e6f721c59a29d23e7f428eb8cc31a3d99bf8879dca7eb72542d743ec2b3ee1b85d78057d82fe61cc2fc707d6c406dad20aeaf3481c5292e2b53d7b79e5f67
+Entropy.8 = 839ad75c27bfb9e8d5388d32f5a35c2c6004425808320c1c03f648c6b26ff9b7
+Nonce.8 = 1afb07a9ecc1f6a233ef11b45e09b833
+EntropyPredictionResistanceA.8 = b6a82d5098832505d49d7769db804e5e0b68b28c1e7f410636858abed78ba066
+EntropyPredictionResistanceB.8 = 16f280e1082da73b3fca3e8bd6a3aafd87c8423dd979057054fe590a817e6451
+Output.8 = 2acf13b17dd277b5add2ae0c866bf2385a5c254cd082feb3b66ae73ad8d2b9a663684d39bf78cfd6f11d3906df61d1fe4b1ee86537093c1e82ea5b30caa6df18be4ef1b8444cf6ecaf436545f457e13bed097b7c0574554b2573a8ed2bc9943bf9eb401b73efa0c168c9c29fd7fdd5b80e4473599b1da51ceda377bac512a6665ce6f1031c01cae13d3031034fe1e1ff5f2f9d71d138be9e355898098049f3d963f796dcfeec7b3671ae845a7a40ac6b5213934e30580731ae38b898dec6f81b996de63b67a97e0b04158504b4d5c52da420156e66216e7c29fa2aad0b2bf5aa15d861f315dc9c51796a441c51b272a8ba3dff76b1b84c497658ddb54c23ba35
+Entropy.9 = 7931034704b783374c10cc211d8f20b3c99fda6e3343a8615d6310401f3e232f
+Nonce.9 = e954ca90b98124c80a4f0a733916f787
+EntropyPredictionResistanceA.9 = eb657902f965e542ff8a7175260c453fbb064c3872d0be2dea09868b6842781b
+EntropyPredictionResistanceB.9 = 07fa50526954fe7fed482c478e8fa8e657a80b58dd119edb853b7a033833d502
+Output.9 = 2a97d404f8263df3310da2a594262c2f8b863be84a591dc908f436f9cff6ebf40f91a42de82573a1bcadef81479e52c52c4073d520d913d79fd585f5f7b43d59bf6867049f4e1e9f39d20fba59537e67152a414e51728d78aef368d4a58da2935917c29eb52c94c82e1b459e49ae0ab68a02e2449b3d8056105ac417a13a7e832bc8fe1ca1e5420abbc9a7bffb8cf58e785040a888e8c54d071c8b1518bf1c8118a384fc4c4550b47fd09009342ad06fab93b12198650fc513640736a7a421fb784044598c62d6fa5e5d1554375041a64a40bd65e5fd50c3a62e5e5896f4e3595cf2a03e4d0a81dec41629d26c7f052deac865aac620d71a6325e2b2926f09e2
+Entropy.10 = 91afd3c2ba359acb0c2ea71fe28fcedf1303a49126373e5deb0f6906f220b7cb
+Nonce.10 = 2f66472d06c197fe8a670419d0cf854e
+EntropyPredictionResistanceA.10 = dafcb4d859919704a635a03dce7df8f51b872c447bc16649accee071bfbd5493
+EntropyPredictionResistanceB.10 = 93abb513f24093d60f5d6db75b564cc9d2e25fe41c819e1251e4d134de9dc671
+Output.10 = 2122d442a79a22f0d3be722a61f414630d89180ff15ade9fd235ac77eed6c3fb7f5759bac3a9b0bb6f9de915a0f3528c2e10b7fda79f8024ce03a3dcd196262a3a2e9b9cbdea1a0dd5a890c9dfa89744209650e44d3b70afc7c38b378d826643accd0bfaa5c3154e363c1474449f83c9038b2b93f6b3befe56bb00845c5ca65ca91acf041daafc86e3d39d2e1be7d9be49b1c9178c1120d85a34d476fa4fa2da9ad35ff14735fd10e1f513f3fb37dc42b14e404274a2554cfc05303171452791eb7c24e0d15b16f261360fc4144d69b0a81db09da2ebc0fe1a95d1fcd3379668a12bc221057173f124dce29573b7c251f822a43feb3a8b4aeff19b30f87e7b53
+Entropy.11 = 623c8885a66946eff753ec1b6e52f7bc865db6dec50904fda08280839459dc33
+Nonce.11 = 15248598ab5164ca65af5888eff710a7
+EntropyPredictionResistanceA.11 = 0c2c50bec4ee6c8fb59d43af9f201efdbc20b683f6c61267afde6c5cf2331fde
+EntropyPredictionResistanceB.11 = 9d3459f37351ac92921c5bb7473fe8eb7f6f453d5e0cc3d5ec9f9b5435aebe22
+Output.11 = ca765ef9ff089fef4e56f2d6fcdadacb2c63a6ba5c002d114189261b42172e597dd31d582bfa1833bb84514dc6b81e664fa6148e2f2fb46208961a9c969d7065573763986b7099f7bf0e93159b2b9b5e44536e43d551338a85d3cf243bbefae33329ea4922497be8d24ba2c5fb83a43f389da6fd615f5feaa6c65fcd902e4069efa353ce35bbc65bbe83bbcd129ba0160bc320f133cd73d27de7329335eb7fe1555670dae4d41224bcc69cb2a22e58a73285c22738c9c9bef980764db4f4016d22ff76904c75ad3ff11bad292ddcc69042d1abda3dcb6f108ddd8c1f116d5beace7cc11cd80cca7fc36da6a696d46780155a100711cdcad60edfb4e56fc252fa
+Entropy.12 = 0053ac4e46bd8953b1544e740c983f5e3e88678dcf2fa764bf7ed4a1c76319e4
+Nonce.12 = e04c97e356ed4c446742255e206b7ff8
+EntropyPredictionResistanceA.12 = beb93f5a72153e0c1f85c51cf18ff2c4438654ea9b2a5133fc8c141e0a873c62
+EntropyPredictionResistanceB.12 = 8ebc55bcdbfa73e19b50d066cd7c8434e4781d2d09840c1bbf7b920fb09d1007
+Output.12 = dea2e143e5ee6eac95adf080e6d3bf003d3c8d070e8178419c5648e2905b31ee9012345c981f60d09e6b7943fc7a5c146608a6d9c26493e5780836cbe9b1af9e2b76e01f095575c62a61b8ab9cb36a87a91a4e8c5ee65d68bd952f650642505991f30b7067510abf1b03cf98e120f5eea792f9d3baf971acc1c86a25a991bb6e4fcb1731fbe04d34606c86b908ca5cca124b0d303b63078519ab287a7dfe9f8ec3c901ad3ba006df44826bfe39094a0d6f49af379fa0c568433e9cb40ee84eea98718168c11b176c2990e1f4e02e5fa6fdcfb472c6982a0a4e11820c83595808aeb70d20eb30aa584737962c8831187b86842e7b6d3278bc03321db5421998c7
+Entropy.13 = 609a2954c672d04170a3d390bd4c67c2f8c483098a03f4ad1b4ff95fb277733b
+Nonce.13 = 88fea58b5cfa4dec5051cd5675e5ce2d
+EntropyPredictionResistanceA.13 = f611ed0681fd96cb70ad62eb13d716a11bed0a435028e4d8f5a011b76ee41f39
+EntropyPredictionResistanceB.13 = a1102dd682b496fdb5ea2b7155fee9466ecc4bb08bbab4035c95e5542b4eb78d
+Output.13 = 072f9f7e761999af5c5f36e9d3f1bc3e25faa43fe1fc09ab2e41d94213cf02629710a326f5440941d2e40ab71607ad87e250c849c201c3b182c2f456a80a5b706b6bfb0dbd42c34beca1ca663924aa725a54fa01a6c31b27c178d35b8d94d21d715aee92238ba0c240f94fddf53b27d3c7f21bf7cf64b739a0b3a3306bde5eb445e02b2931e861bd77cf410f48a4f8f16a9b0ef7719b5dd46f8ea3bdde452043a8d48f1701e729ab27c99e66ba8a303a5deeb54fc0fa48f09164b4a62c35604e4797479cca77c599071c53e9c7df0976bc8082769ebddffac32adb7ab874efb946611579659ae831b871d05dc7aaff6947ed432a9786c06e6d93af8617c83707
+Entropy.14 = e2d9ba7660d8b710feb1292360cbc64126ba803354653a32ec5c4dfdf6dbddd4
+Nonce.14 = 14439ac88d94ff0275a6c19e4d401e46
+EntropyPredictionResistanceA.14 = 3ed8d71d76caae25c91ad0e26a26ad22aa0445553392e8f7a35a0b210a46b260
+EntropyPredictionResistanceB.14 = 2c864c3511e49dbac6c52c8e036c63a389d9d598dc13f1883abbf9c946bc679a
+Output.14 = d1364e1237c7ae16f7e5c39f28b67654a81449686aeb19ac3fdbecd6cadec661a7a54d3a085cc421b7afe7c41fef799a0d2ded9dc388a8f10d1ae42800f1dbcb95fe85022b7f59ac53d9d1a8a4c9d6b8ab66f2dfe723718c5646a59454730ee6920da0ddfc5affeb0002405c21bb2350a8217e4ffae1ab2b3b4d9286cae64904ee97b3e9e994845bef8c4fcf0871dbc38e5335efe92e18995ff8a04d004f45eacab013fe7642bb02082b33e71f8fcfbdc7fdec549cd0977106036f18c4a3a83cb4fe95a509affbb5351948ebf395f369e825eb72e817a8030a7b51255c8e9d75a6b3c0e4141732e43788ecb7dc3857fd509a71550656eeb66560b74e4ea4b2d2
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 895f444ed02e49709b90db329ddaf2185a0eb80bbb0aa118931a77ed11bb82a7
+Nonce.0 = 8b760c899119f33d8e28c580007beb1a
+AdditionalInputA.0 = 233f7d5b2741f6b48817902f265701c4681ab8cb85c02028f119ba916a65aed6
+EntropyPredictionResistanceA.0 = 59c7c6bce96ec542562e285e5c8edaee59d55331b34963f1bf73d0cf3960becb
+AdditionalInputB.0 = 90d8dc9bbfc8d51dc91bc58a618120bdbe48bf35b28e4ff5bf6acdd49b7d37d2
+EntropyPredictionResistanceB.0 = c532f3095a9ab6a2077885ae6a030ee796d9ced83b5711d96c155a017f36210e
+Output.0 = 744d762d017340df2c3a0198b3183f8d2ad480b7034fc0ecec5479213f0fc074ef74f528ded65c47f69246b9a08b622bffa4732626ea7f53b8578f09a5c136188c809226696aa96cae61d2e75ee20b042815704a14f0cfe79dab527925516a000b447e1f66723b28441f81f9cfc80600a71a4d11a380a010c391fea627d9802c446780f4c95db4e578bd6fafc9cb3b6afab3968843b53bc43e6bb306aa40903cb2552ac57882e1b2f140cbfc0a0d1c85ae09506d9cd1c211be3c1c11776560b5bf4564d01f3f246ff0579d69b8343715aae4da504321eb1b7742523abe6de762f232a326fe505e71982924c02a7421aed9f23774d9d14f6406c19dba4524fcb5
+Entropy.1 = 79c319f0ddd9bef48d06e1f32f7582feb7ab1007ce4639b06e1ae93078d0046f
+Nonce.1 = 009ee1efa6233cb0b762522637cccf70
+AdditionalInputA.1 = ba565c3450efebdbffe433c04c82e4cb33d327a5937acc846cda015866ca3219
+EntropyPredictionResistanceA.1 = 45dd9254a1437381b145cefec662b2f51e8417a6011c15c1dfde8f8e03179798
+AdditionalInputB.1 = 83b8653f4d68f5f29905882b272b48b1b65c78ca945bc6b83281ab960ed606cb
+EntropyPredictionResistanceB.1 = af75457bb6e3ec1ddd29bc33bbfe19cf5d1949c7c3b4bba7680e9c160c0841c3
+Output.1 = 7a4f4dcb47e84126fe5f8dfeb163e8628ac311956f014340c2b0b337f2fd844e8ee0c15b5207e52cfbb6d43382e1a910b6f1ddf475f448b73cc8e9c1d216726c9730b124ede32371bd5b2f2a510ac0d9d59ca43bc41a52eaec4a3fe8fc1bfc71a44f258a966c5e958609dd37633fd39e77e37886571189109738a8102c2d41cd14b8fb9eda01363638d0520f1c79a1c6abcf97adcada42f3c1f637745adb36592fbcaf70c08b5c49fe98aba5d44638191e9ac2f44d9ba0bc1a60aff199f8f975f9b6bcb3f80e18b78b1e911f770e87ccaf0a09756c6611289f738a771715edcd9a721f04e2ee22fa542e31ed3d9ce4bf53edd89454e0ccb80afb26cb048a0fd3
+Entropy.2 = a297b8e2f2157e7951f263b016692765936697cf5569ced2b1ace1fbb1381c74
+Nonce.2 = 4aad4aad765332bc326dce952288ba24
+AdditionalInputA.2 = afde857037439f2e665fc0fe024455a4a05e586f96d0ca325d30dfcef12c1eae
+EntropyPredictionResistanceA.2 = d6f91e93abd314d4a2399bb05ddba0151c0c59089aedff5464207d61b1004520
+AdditionalInputB.2 = 3c32aae0150fd4bd6d9e5348d406afe8e9c812a07c6fe49505ef55caff63ba8a
+EntropyPredictionResistanceB.2 = d34e54a877fe510003d265b052b84a3ec9ac26f0ff56775853efc16aee0bc2df
+Output.2 = b8c8f4bfec98374fe633f2e4a2f53449a0333111782791b336e70740e270bf531a5ae2968275abd8269965bbff64a88b51a3e3724a917fc6796f6f336e3b146ff421b61ad9330104bd873bea1b22752674c2f93e194cfd6058d113243b0fc5b15094e3b0105540c8a52e27ff32c65786a68f8f8a468ac170dead45830d092bcee5b06ae5ac75860182301dc8a7ba8912104e10484d5d0b5f78f79ea74049670ec39acc3e1cd7f9fc42f912178b08e42ec7e87a0797be29f3480ee9322ba8c1305051c010bf1d8599c5cab77720db7f370953b1ad1182046ebf8bb695e61a862bf06dbd663c981102f17fd1c8fa0ccd0e3b14883e577854ed4ca067a27b82f5f0
+Entropy.3 = 6caed77db67ebb8e2de3d024957fd693ca2f144e81f6ff6e6fd0d10c50a41060
+Nonce.3 = fe8ccfad41816a22f6ce962c2bddeb4b
+AdditionalInputA.3 = 54a1be3bb1520df15976698e71da1ac8d0d51af7103a487cd256500898a7628e
+EntropyPredictionResistanceA.3 = c53ef173b7cf2157b79e654fe107b41a1512fbaf669ca5f2844a17065157602b
+AdditionalInputB.3 = dde379a8976b99730695ad569540f18312cff6e15d5ae4348473c25f5da08f16
+EntropyPredictionResistanceB.3 = 975f49986c0e950d65d7c1f0ce8982d93e15b47502d1cab84a3362ecdd47e8b2
+Output.3 = db711754745ec7f92a0a7d0dee528157950f4727d9c91aea8ec3ac742acadf254e8929e8f91f279113108956e5b482a829759adf5f4471b2d6a29230622fe55cc0e1985261b5003bfda82a19ada76c854582249d3569205ce9a6421ef77744dd82967668858dae95b2b20f2a4d177f4aa0c7379efd85d2becaeb4604d1130ef9179ba403614cca75bca973ea419bad031cfb83b698e3d6d1d337b3fdacd311794742bdefef9860f215e0d665f1332d150fa24ebcdf3423038d84f69e767f4ba3a73874380968998fabd0a8c71a8b53868408fcaf2d65a4ed1261c171e700d210b012353deb96bb38fedb1b3c8aec7559a1cda1c45eecb617965a769f59bbe926
+Entropy.4 = d4cb8e1976eca25b878941e5c5cdde538bb539fcea41422b6068c997143b8a96
+Nonce.4 = f306c25061403613882792367a98e21b
+AdditionalInputA.4 = 851242333a8dce7ad19f1ac6a20efbd3a31ce8c3808e058bbc343a2526bf7f63
+EntropyPredictionResistanceA.4 = ec76d62d6ea0187a143498188f534c1d1ebc9bd7a3f7236411eeb42d2f9a4ca7
+AdditionalInputB.4 = e7e13c8ab80d86c238c4a62c030ef892d34aeb7bfad2dbb9ee2f602b8d524313
+EntropyPredictionResistanceB.4 = 2012ae9ba40a0c2b65699cb36131c661b0a4448774777fa4a678b8f528ced400
+Output.4 = de5f5095e164f92d30c6c2d9942c6c29d894bd4930086aad7f74b208fa2dc712e059a842edad135a1154bb50b94708e02dfbb857214a54ceab88e95c6cdde62d994bc7081fe54910191db503d9b19c949f929cd530c7e22e96d42046b9cb1202bec6290d9992ec3baa03ed069de64e215d012a6357411a2a5c76b14e8b304928fafe63c39fd0a262b0f798d9e1a684eb92005e1c369ee2c599b38e475a23fa0e9eceef4dfd0d8d2ab25339c01d5196e8cffd2f18066282a249710b258f4a88ee0c1adce2106f06d264e995b268cdbd69a341d81512dc3c7a3d99f1d339914b246c69003b2014b6e7a1c5348b2c31f877c43f83957ecee5dcbb526ca00be06250
+Entropy.5 = 2c5e729457c4fd5b999064ccf3fe4f6a3152770d05b4ccc1a9bf3585dbe43615
+Nonce.5 = 5ec62fa2a18f21618f2dc3595a5c6403
+AdditionalInputA.5 = 8ee3a49f566e8cf3e976004d33cd9b038812b7defe27ae84769c5f400803015d
+EntropyPredictionResistanceA.5 = 5a511856705c819b3c42d3a9077d94348cae51411c9465af009218e701066766
+AdditionalInputB.5 = 461ad0b182c2207cff2c7d1cccd41718872e30bf588ab4afce1d73ff0d34ddbe
+EntropyPredictionResistanceB.5 = 61bbcebb1f5d027ae1f31e07c5ca3e55fc5723183dc569b902163e03223eb13c
+Output.5 = b323d4841be70d2e45ef1711afecfc2e543404dc23c5f1c004de00f446932da4ff824bfa77328ed847ee46728d70a36e04269fced71e32f454a13107a5dfc5c54f5733d738036dd9768bcd74b62a10fb03daae6b41604b8709e1892b5db12952e6151f8ad1c0b3ff8637db777db933634ebdeecafe9a9f5aa4f26a1c2d075629f31df5a484a21cf441d8925e65a1981847d9fe7d3446f8090afafb61cb713b820af85b308432f95fb8117391c6f84be7fa45d932fbc7861d1d0ba467115592071b6642d0a12d16d232048d558dfe8fbc5196e199bc55ed4538a365826dd8336d5d7c5ae7cac3edf612c956559da6f5ae1921a873810792af368bc5dde3770338
+Entropy.6 = fe67ad260ed5c74d28bfd0a6de459b19e5a27d4b60ab1b19c7c9c8a7ef47f43a
+Nonce.6 = 27ac36b5fe0fd51b45021f6df6489d10
+AdditionalInputA.6 = e3714730db143a7f2032c0e13936816817318a0bb04f6c1d6445580ab30cf4de
+EntropyPredictionResistanceA.6 = 21c9b1c4daa022b02011689c358892960f862075eafb688575b8043bb8c76d04
+AdditionalInputB.6 = 8f9b059d0b8fce0b5c2697193aa91c0fe615add7fbd6d4c45a21ba89701bbe01
+EntropyPredictionResistanceB.6 = c45a7d898c4914e105902d17efea1294660adf9a0c0539d1e2d51bf9c66238a3
+Output.6 = ca27914ea61529f3084532d41850e1976b6a205653ba62bdec56654b4cba93765e552464f5ec972023c2f2f836bd255c169594bf43cc6f6ae5171e75ec5f205e026bb3e2a89eb396267707b70ef8cd21e240cc07ce14e38815e27829af45034d26be3df26a8d7867603d720ab120492b5aaff7cb619fdd3b4f5835cf567a3709ab41e3b761ccb41d0464052ba0a3fa132b44ae54d688b991c4c2c80f7aedd06de1a06d232f369ddde190b94e5a1f867c09557c25c6f2b3213a4fa430d07125fcfa3b3338c8af15fcfdb576470fa5468bc6546a6253024d9b122742387b8d1a752f3a96ca5dc99ed29086c30fe307a8f4541df2d760579e281f2b3e6af5036884
+Entropy.7 = a96f3d62d7153987699496c9c1063916baddd28e607637f0907dcab4481644a0
+Nonce.7 = 06f7b5b74f77a7d38d7fab125c49b075
+AdditionalInputA.7 = 4d9bb3616585ebb2b1aec8e0317047395ae04c7a5eda5b986f5697f571dd8541
+EntropyPredictionResistanceA.7 = 6ebaef0d8b1d8484a37aff7724f8208f212947637fb6767c0463ed4ad328bfac
+AdditionalInputB.7 = 20df9b1d4f63919fef2d0e06531c5a6b1d37cb0d96e719154287b1c7fa05231a
+EntropyPredictionResistanceB.7 = 18aa9d47f33a35ddd91f24aad7ce835f6aa7beb73b63435fcbf2df2ee371c7c6
+Output.7 = b0e4c7ecf0602aad44a39029136456cebba343f5a1fd3c93c4806f647a02221c6e94e865afdaf68f696db7057a32b8e0bed70a5149a68ac621024a5cfbb303bf4d71db23c2e3f329ec09a31f34a20aedbc969b7063437b9e557385262c3a947b4286e9bceb54d5f07dd530e892480bec043d0aa6b19fb617b53d783d58a99cc7d53005a96d43a66f3871b13a4e1f2808fdb4b168b8776f7fdf4ecf1c9f429b7f68b9576b767d935a81595354cb78906829232ad8c2e3d83a219ecf858b3e737117063bc4ed7340203b76fa30d6d5c8b66905c6a0f69316ce87025bfd88d5b008a634579de752d9e7b7b8b09dafb57dc073026ad5748d91595283608c1c0f22a7
+Entropy.8 = 40331a65d954a427498d1af2d473b18d0e1623825a85673da7747bde97ea60ab
+Nonce.8 = 4ee1d590f7d1a0a5106605c1b24b7e0d
+AdditionalInputA.8 = 213889114ca1ccc9b5f1f5aaeee926321adee36d376745ff54b152a0b28952fb
+EntropyPredictionResistanceA.8 = fbcdda392e6fcf50cd5feaca3fc789cffaa40b994d562d06204d2700f41c1d75
+AdditionalInputB.8 = 88540fb4b75ec3ea7352e1b79291d5d9d25da9436f552c389cd90f52c3fdc9a2
+EntropyPredictionResistanceB.8 = 14ed320c11c704b19078ea63b7b1a7300fa4fc5b65aa1af02883a5eb25fa7b93
+Output.8 = 193cf02ba8122ba18891b3f6ab67488563620fa4f4196da5432628f6f1f50d9bd4640eb974bccfdef3feef51e6aea905a1d389bda8af9c4a5273fc9ff5373361e8cd7f10293cf8089d13c1a0c6d780b9f7777d8f290aac888a044127d88940f52d41189e9c428d86e663629f8c28f9daafb9f7d3ecb99767dafa1eda160c07b205fbfb5c387a1eb7a060c33054d64a7f20e4b39a2a759dd05da0c10276794c5cf2b90e70c6ee0042e795fdfed6a40fdea3f942202bdfa0cb78ad34fb4eb0845400a40e472bc8a689e71d2d3ddaffa5ebefae1e61af76f9608045313667858e7294950ba20bd0f2a86b55f774813da44a2a793d94d682fc32a295a9c456bc066a
+Entropy.9 = 74e3b5398671c61bf96645aabf8aef0b298c696e34d8a4709ec112f9f9c304d2
+Nonce.9 = b1a8765dc812aa85c7a87689154c6b80
+AdditionalInputA.9 = 0416355e17ee045ac61c59ae044e0f5c8db92f95f913807e96c751bc217200fd
+EntropyPredictionResistanceA.9 = d3add97d9911938a049dd2e9766d3b63e52eafd4b43c0bf792fb465f3c72a2a7
+AdditionalInputB.9 = ee7e559706c586679eac9fc3e0d43a014842f8b5cf2c7cf8cbb9d3ae211d873d
+EntropyPredictionResistanceB.9 = 3503c646ebe9042dd68168fb7bc99a5d77c6d8b61c82eba4e2404e96b36c6323
+Output.9 = 5e525590e0a49dd4325aadc0d895252df87d6bf0bf9eecdb8c4a5113657beadb83c283df5fe077997a7e63f8a34d45edd43b0e7a074c40d03390aa401d899cf0afa1a32d8eb74cdd45c39fc85a777579d3ecb1fc05affcfc28b42ef4cd134ca90c59ba8a35a576d33ec30f864375201e204820ef6bdfe23f8c094a058f2a76fe93e43ba14f5f4da619bd2a919b3a8ef36b81b4a4fdd25785c741b3c211de897261b6ea3e5543ba8e6ab5f9df4b22ae6dee1ccb21708550f03becfaf3c9284a0fd3c2ae27b03a351c07509fa82491f1ae50db1d3bdb2075d5adc16209ee79a2a5e5bcb998a42b5a3cf3e74b9baa258900c3b05dc9114a1b094d109943fc185373
+Entropy.10 = ff5a6c8bf1e5f17dc4bbcac8ddfcdc7e560859223d68986271766c92c6aa4f75
+Nonce.10 = 3e76f3272bff23282a7cb2a0abbb01f6
+AdditionalInputA.10 = 0ab43870350625cf85dcbadd2428d9b1141b8d1ce94818e861285b8685c299c6
+EntropyPredictionResistanceA.10 = 569b48fa95fd23a563f9745a8719b9174b466fc847758091cb3a81538bc31aa7
+AdditionalInputB.10 = d097b0e7fcb23db21093326885c3391f0c796d85e254c906df0d57a99ecb301b
+EntropyPredictionResistanceB.10 = 9bfaea3a9ff358f329ba83cda3a3844c3057cc5b25db9c0171dd2b5cdcc3b35b
+Output.10 = 3333a1c5359708633c484c1c1c652ff29c4c19c2794526656c5dda1ae532d2a2738fdab714e776dd9277dd2782ac3676f4023ff0156f0fb47254d316020ccac6e1876439fe0c7d784ca2057ff581c6dfd571b54c30948d9491cb62ec54e9a5f0df6f85a959386a9870a13b326e7d190645bd370ba94be5ae232b03beecc19d37a0385bbbd461bce55fd5ffbcc21305000b2cace189212ec3bb46fb2b459757602c85db32ab7dc2464588e0483e8bb9521a51f4f2f7b0d5ae77f9a35edeae8b26f1c44ee0ae9bf98316349e876e91e1bca8cd6070cd15113f2f0af071576f4c5a12342e3104271818e3cef6bbc7a5c221debf9f9cff5aa9a1461c3db0f0d7955c
+Entropy.11 = 8b4578d20c2d523a9ac51649a062b072bc7c80362814bf4a477e92399077c1fa
+Nonce.11 = 6952ddcfb9214d6c73be25a90e8b7d44
+AdditionalInputA.11 = 066d58d5a6b114fb13c1fe1298c21d248cd61f1ffa33163a0bf327edd22af564
+EntropyPredictionResistanceA.11 = 3a6da6ede7c30ab0e7bde533e9510478a25c6249d696c6645dd97f4b2fe2e92a
+AdditionalInputB.11 = 6fc78b68a8b38eebc277a200c5734b8860572f8bc3f39c5a97c913605796a008
+EntropyPredictionResistanceB.11 = 814ded0461fb68538b5f071d4bd334ba574a335d8a6568d30e0bb2be705c5c80
+Output.11 = cacbe516489c017288d115bd7563af0bf2092dd7da19a0cf93cb88ed1303f34e842982b1332483afd17955af3ac1382ad8a9391c7052364c77aceaa2cecbe42478165c672f4cd743838403acb2e918bba2e0e2746f9d56a5e2c740d1043295df8e18d1a67a40702ed79335388c54016cafd0136211ed1432e2722ec98c9843325e437dedc44bb51ce17f7bc7a3fff2b48eeaf7ee15a767aadbddcce514e84292995a372bd5e5b0ecdf56abfc8636290892ed32b6bfa3fdc8e3fafddbc0c7c402c893c3b07edbb28054e72320dcb3b716daa5b2a6dd9e43072a81e4f337f315f6f2e123ebbc22e5d591f5596c1a757c5b0f74a40ec8fdc06eed230642fd54e827
+Entropy.12 = 1a9aacc27e3512f90aa663cf1005f2423e8080a2eeca0787e5abe1387d98fee5
+Nonce.12 = 1d732e937396de065579400fcc51dfd4
+AdditionalInputA.12 = 4069ff15905fbdbdb1ef366125f503b9062f099b7a13db510f33273718fd0835
+EntropyPredictionResistanceA.12 = 4c80bb0923fab65a093fc9dedfa98db213d17584d52f253005fe271653a610b4
+AdditionalInputB.12 = 8999570f28b967e0a376a40e45689c9ff880f2755cf637f76b0d5e06c1572db3
+EntropyPredictionResistanceB.12 = 04d060f1caaadec9dc88b51fa2faa04907f5da2c08afdf52df951f0f6c7226e1
+Output.12 = 6eb5633baa68ef14509ab475b7c49099ce2e0111f3b932720f95cb9d2e6a23053bdbe25d279c5f3920642e353276cfd4937a9f57fda322fb7840e7faa1c84f76c4c9b88c5de0f2c12b8aefc0cf36ea732bd7d99c72db2c8106fa6b0f947bc2d5989ed157a4248558840c0c3faa11a116bf3e365af1e4853c68ad8004844d3701d62eef39247fc09fe0d162b657d1176cb65ea259665d17e6da878e88fc5b5cbc47427cbc878bd1b09b01ad7006e72ceb2ebe0a27220ee0c59310d077a30ce772d99aa2ca66d25dcd90624517ac6087a998febba0b40641037a79452ebf610dae679e5d4c4da4109d76df21a40d43c4f9363709760fddd81a8530b8f0252427f3
+Entropy.13 = 818a27a912439dce55f60dd4e883a4b7cbf231e3a63e51ed3725cb60c12a566a
+Nonce.13 = 0cf6c369065ceadd1fbf6c6b4a71f49c
+AdditionalInputA.13 = 347b343bf63007c00ab535d7432a129dcd5de88e3f60d6f4029fcf55d3810e63
+EntropyPredictionResistanceA.13 = f8f065175a4f0c76a5153f8172361aa5b40c2d8ebf884184588b936f2fdcb980
+AdditionalInputB.13 = e54ee573940c651001203a8f903cdbb5c4e1e4b382d69ea6947253c64676f3cb
+EntropyPredictionResistanceB.13 = db86bb1776d9c19a89918a3aef97971e5b4baadb853bfc83b3eee68ac8995798
+Output.13 = 9d73ccfa0ae2fe4b2198cea871bdf5b91e7cab757c37e8ce93b075b8530f2d203228448a39340f976fde473a14e3484b2fe520a556cd3c38fd9db39a6090175764e0307033bac93b523849210dd9c1f39acb70eeb2ff48b89178ab9e23d7a82c6258871bc593cc66cac891327b35bb918f6106ca8b53c012182952b36231a255d94545e64b82bccabf78dae6082ea785503717c0f02c87fa413fa8cd9221ec4b7e0e8a176cf68acae74adfb12b76ddd6b58797ad30c2cda7aeb9b8c4816287e399eb22d9f5496b4f94d272f41f954cc38dab7837092610993d3af0b8edb06ea6598a8692fba417831e0d90bfa89ff4155977c5e330c52cfe7937dcab1bdbb177
+Entropy.14 = cdb333fd4b434bcb3ea8f25b26e4cf6bc160c88dea7991bb85a24b7af3a3271e
+Nonce.14 = 507f8d016f6fe237d6b41aad1db449ca
+AdditionalInputA.14 = f779d9ac7042fa70c012abae61b8b763c4bb2ca9764de2c530a8a55e4bd9da21
+EntropyPredictionResistanceA.14 = 57baca2b510a1fa42fdb83c2c994b008a045927527a0001b5881a7cd2a47afb6
+AdditionalInputB.14 = b321b5491863d42a5acec205593a455a4ea7052f35327c646ea3e13bcbc84ae1
+EntropyPredictionResistanceB.14 = 3d3b7a2fd24fab77b8c8a519f120430343975218d7f927c0a1a38911086adafd
+Output.14 = b554d4e5baa4c2a4aef4b551da24f251d2cc0ce663e3ddc5a9c616a6cece0e41d8358480de4f24cd595b83c54d90993899a571265cf0871ff1e579eb7253520823e11638f37ba8be35225dd1f23501ee7b63270880988e3c684da7a08c98c75a7e442b963795488afb3e1218274c7405f3eedbfedf1829aabdc28079a39c107c065d5c00c9202246b6cdb09ac9f86d48c7b0ee843351c6ccfd3d81e85c8407c2bd2b63c7f55f6afadd00609100b7b4dc88648cdd32018b32e3a78b890473f2a6755280afb18bd34a14bebc027db392c53921e696d8b59e9ee82c67a86289cbb5f70019fb9f59ae30c5c332dad95b48c437302707a7b414cdfb22c666305e2f25
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = 7e8b7e3ea2074d4eb3423ba7e6ccbcee7a2a9a52c68ee6d7bc77a87b0792eb4b
+Nonce.0 = 1c0d7f8181c6813d3146495f2ef4cc8f
+PersonalisationString.0 = e9f25fb0788fc7dc986747c60b49f61cbecbc4c656e78e4affbcb61c716951e2
+EntropyPredictionResistanceA.0 = 9a09726d9f5f99b240ec4b7aab8f400916c32d04925f7f2fc1de03d9ed874606
+EntropyPredictionResistanceB.0 = d0b0b2ddf03065db154c48dd23878cc2bccb819dc3306739e970a9c32b243c2f
+Output.0 = 5c379238a3fbb8169cfe7bee0c3970bc0d65ef3951a82eae8f512e3ee77365a7eaaa213753c4009f335cf4c253ea78918b42d864992ecbb64b3759798daee3bce8b275993ef4a9bb53138b0f81381b1064a011fabb863c6bce1a6231261885c7616eb2bc1f830201b89800c544d3a78cfe27eca4c9619aee92b5c56fda69b54a255bc33489dfbc34dcf5c624af59b9c4dc868d41c65121d655ff3ab793f2fc634debfb98b4b0361c69337f9f3dae36304d60a6fe166a70392bea5844d94437b4289ed36f26e65e42f9c3aa2a4a8665ce20f9b93610b6716aa76fe79b156476e6e012673b373eb296e3a763c7e245002db8447411a0091de6375fa1c346349918
+Entropy.1 = dfc2ecade76bbae3977c1dd40914329b7d934d3d40c1b2507184f40a9c31f888
+Nonce.1 = bccd414930efb139173f6f80c6d3f62e
+PersonalisationString.1 = 180e11f691d77a453464cac2ecca90b8a55c58a47c5df776152faf91ea5a8967
+EntropyPredictionResistanceA.1 = f3de31ba8c11c8b0f7e815abd68a77f697d53e0f0d83f9eaa50f7c3097fd6dd8
+EntropyPredictionResistanceB.1 = adde4e32689abfe624b84ad2721fe8fa8849ae7d85ec1125464aee61d9306852
+Output.1 = b64a3ff0df49408f6a926e4fc639ead40ed8c0d4eb9326b845a293a1770dda64bb83921ae844966f4b39da149df7e5ee9c0dd0a2bfdaf6057bc2469ffc29246648c1af812aeec14ed0a890c7f3b1467e843d1d5e15a787cc467fc462a5934c72ff113c26346eddc9d3229f12afa4a928c58ff3ec9cbe686ea1cd0c913c151cad0a215587be3815b2ea41ce40c0cfcc18739d4794e2279b7b347da4976f75996352a5198150e9e5a748f39e02f0d6878409177223046a87a57c3c83ef00c5894312e5d273791e23a0fab9e23cf625167d31e408f4c90da4c951837c0bfcb9966b26cbbab1df5777fa0d86032bec9389058c0f8bbe1b2e1cd61eae2fbeb626774f
+Entropy.2 = 9febbe05da461e4bf2fb21f4c4fc142b8cbf99876ad21b3ea8dad489e700dae3
+Nonce.2 = fd8f164b51aa54532f932a2e90330105
+PersonalisationString.2 = 6bc037e548ceb1b46e7616719c58895edd1357d6ad5b17ae5369d21d4325c19e
+EntropyPredictionResistanceA.2 = 12c574f9ab2a4e30092f9a2580db2cc22b45ce184e5bfc53fcc39cdda201831b
+EntropyPredictionResistanceB.2 = 2ce2492a6980a79924731fdcdd6071c72893f7361fa92535f591d3159e97f42e
+Output.2 = 0fc695eaca8db02860413c8898e72915685b94bf175b0d7739d2a98cc9cc822ce14340d03aff0cd1719296dfde425e40b6f7f1e9081dc9540de9ba7359ae6873b6fcb47e9922d08decb245823f86324f02945622d8b6bcb789e61a0f3f7bbb0b5dc57c36140e4d88a725db25d7c641092504a336b676f8f6d1c88d3be181d07fe2dbc317334ecea554478bd57eecc244f7021b7d337f0f5cfcf6288c6796ba1ab5485fb385713492ecd18fa4a8288a11c48d2c4667a3e5aaf3ae5e742b170cbd67b4f68f0e472730e7b0c990f8d88a4d8dbb2e18facbe21b3eef2718ceac4bae8b8178be868d520336a8388b31b20e3b6adf04428ee8ac574881540e909b0c1a
+Entropy.3 = a58d9d5fb31210c8605e7e040c71981566c7c96fb2759a73ef850d9cbaccf057
+Nonce.3 = 388be0f96ae7f48f4ef3f7840fb19c8a
+PersonalisationString.3 = c8a66bdd5c22667b702edcb49df4e2b38c12bfc6ff56c0eef70ade20edeefc29
+EntropyPredictionResistanceA.3 = f869508e2dc5535d631f366f5a1c5263cd0972d002791d58ce21c7e861375419
+EntropyPredictionResistanceB.3 = 54e34504c36fb184a3d1c54825ecd82190006778f5c998adf2a91760638c26d0
+Output.3 = fe651657afd1a67e5da21e566cc45cf9e24ca4d796e0d66eaed0f2f3d2cc88857ed2e287ce76e8b3241aa8e823aea56c0a7b4651041c690c3098587d11eca480b9be098b5a0ec7b39974aa700d8aed3e7f918d6c31803b58bf395177a2cd9fb97b6efe1e49e387aa8dd4a73135fc048babc2b725c1935ab1a5e4792a71de2036cc801a3e0563dd751269e6d4706ec34b54ab4fac721154f8629a5f63ee6a4f04c7fc4a1db31795c8adbaf7af9ccf7febfe0fed1208e95397477cb3775c1192bf19f514198275736350f3eecf5f09391fb18a2828c293eee95caeb8f5d64c1693314a768d0dd0219622ceba6946f7b436e453dde6080a28ceb130f72941d4c63b
+Entropy.4 = 6c6fea7884d64f36190c2501ede67be745c317fcf16ec3a0543b9bbac3e351a4
+Nonce.4 = c9cfef28966ef2a45db5d11de16f7df0
+PersonalisationString.4 = bf273bfec7e644c202b6b37eb019632fcb866df02cbca98bd799125dff4d0952
+EntropyPredictionResistanceA.4 = a3f1fe18bff125c564ca4a0d9b0a4a0607de74cd77bc7a5e322115a3247db251
+EntropyPredictionResistanceB.4 = e1ff3232e0ada3d89007a2f24d69eabafde1cdc5ff9753a76a362beee551813b
+Output.4 = 75b0882c89005133b6a9536acf25c30ee22d4da6ebb8360d4c3a6c3559dad3bbe496ac4201681992d175ccad116924de3983d17920365aa37a010c0049b3668ec99c8068c95a5efabab25cd5aa4f92c14360b7b07012e89702d99f8c79d016ef4318e7fe7fa7ca745c7e86779b42cb85f3fe45cc69d4917db0aa927ae5b2cab07e3ddc84dceb9701ba626231d85838709b5099e8da311dd835480aa1612bf8cc7c806da71410051e9704d5be1b1702c44bdc3276f1173da7ee3b67f532f432f150f3f9694383035d58589b0cb449d57856abd9458a40afc09916f458132aa026bcc8290d405030ead12599a9a2b9c71b3e8c74ea86b72ed1bea9952fe7852f2c
+Entropy.5 = e17e219ba5ff90bf625cb59c18faf1f37d557738aaed24f9659c36fba359dda1
+Nonce.5 = dca0005375ab4f49845a67e95d5e9dff
+PersonalisationString.5 = 1f49a44e6b1d95e87a6384fd5dff6f3c2aad0762954490df66fd5ceb144608df
+EntropyPredictionResistanceA.5 = a578d3387c52e86d489a3aee88e2a17e8c4fd07d8d6f8bb132081ca733af74c4
+EntropyPredictionResistanceB.5 = 85d324fb84253e8bc6b3652d6683a565473fb70f2311d3b86c92849a2ef3146a
+Output.5 = b6cf7f675bc746c1d78e11c164e9a8aab679db9f4f40b046f74b17b5f518617d8193a83eb815a6abca7ff25656af8077ab67b378da106cc7b7ada38004f7e6b45eb42527f449711610974d76c6869e911665274d7e0003e9aa59c10ac4d270bbed3ad01ffc8d70ef38182c4e1b8af79fb399f87fd214c45be7c39566b894b1f55b0ac2128d49f34534d09efd9e88820bec681680c1160c0813904acbb337736fcb5be1f0728e0cd5033e9bf4c4e647f83681b6b90851a306fb036d0b5fc950c3e77aa07f79073a39825082b5e01cf25243b932089548b6cc90ddc744f22f2034c7fecb2c70479ed0960a24e6c41a40de206ccb30ed0b9d73d06f42b854d2c299
+Entropy.6 = 3c923d795b516d222681001780a8fee2b8ab9656b217694b67cc961e44c4551e
+Nonce.6 = c9b7f357c9cea71a539667e12372dbd7
+PersonalisationString.6 = 1d80e0547045511870d92eb5cd04804e275a1272708c61255134d4657434fa9c
+EntropyPredictionResistanceA.6 = b99c83ce95b17f7f4760ec9f0dece2a281906d81c176578e8955280f35340dac
+EntropyPredictionResistanceB.6 = 1fcec085d220ea927f2ff92b1377cded61fa19f7e3cbb659c7c5b7c39c20d623
+Output.6 = f5e49781ac513179daa57acdef9852a5a21e6b90e1d376af33a6aca1293262e725c4662bdcf0d3946e1db4bc65c4f1a4f1a2649d9876f2bf6bb9461bd8041790c7ecf176f3ad4183c52dd2f5fd389b81563374dd44d4d25d096479ce9791d6045a9af9f632313e02fb38a6fedd01897b9f17dfc36643b38e22b5121ae036d51e4b49ddc787150815887990786dd1375b08edf5d0a595ace480058cedfa917d9cba34b46fbe6c1121490f7396754473348b6fe02f0e011db49893bf4c7a5c5a191042b565af6aad01c97465e7169390c43ab79e99c1c241688dedc887c4585f39d489e7bdbc4ffbf9814e1ef9b72242e60bc8580bebe2732221a00f0cabcda9e2
+Entropy.7 = 7f982f3017534091308f9be711f0a57bdb49aa5024cd4389684693d806c6fa88
+Nonce.7 = f89dcb7b45fb56e5dea9c0852add26fe
+PersonalisationString.7 = 6bee9ae1e1da249cfa2bc4fb3788cf84f07dc1ff78a22ccd32c52cefb5975b2e
+EntropyPredictionResistanceA.7 = fe52e2d0ceff4f6be9dbe9d20d85a172cac748237b8393f4e4f41d477aa19c84
+EntropyPredictionResistanceB.7 = 6834dcb334d07cb8e1972ffb57ae4d7bd3adfb70208158c8295da88ed8a6d78d
+Output.7 = ee8cf5d27ff1457ba0a486e660f85c308aec89a94a593cd597b0eb34312efd06ad8ff9a6f5925a07f54fdbd6ee9074bd905180cda3a074078ed376b940c574a3b27e43a3a35855eecf78065a5731204296dcafddc33ef33a5864f346aafbd701ed3d13ebd4bb1c8df735c6f87ce9af38bf06809f4f8ace9a0ac0a8058b5c505378e774b20115006db4957cdc48dfcf8efc4616a1141e348ae6ab7a23ba8b9bfe4ca296ad591f5e1c8df3767e432283978f8c31dec606db303b43e290af8f960eda425906f025200919b2cb3b761b9f42351dcfe15be7f2ca09f2b26e2210d1b52a1f9e9f3d489058fcb4e38efe6d6527f2f55a79ca8aa5126fe02c9dd5ea9edd
+Entropy.8 = 7ff0942f83cfd0ff6abd71ba7f577791703ffe9fb82b4aff71daa3887afb6dc3
+Nonce.8 = 08de6ed2b54b2fcdf932f9e21fe7b87d
+PersonalisationString.8 = c10cbfa2186b47dcba27017c44c2f1d37ddf0d5f4e8cd7c8000106a207d34b32
+EntropyPredictionResistanceA.8 = 4d539cc5726243fdac26b26db0eff7e6457cd729935732045ed486184041e473
+EntropyPredictionResistanceB.8 = 7bae206ca6e9c5d639701389bebe03709bbad73c8bf921a84b91d9dc5c4d8536
+Output.8 = 229594645e0ce3a82a2033c1d445f4eae2dc5fdeebe817143cabefd033a4e93e689e6cdb30fa81361f3f3fa250d5d08950182f8858ee7ce2d1b4cd726b97980cddc42cdeb48bb46d884622f38ab1165f458da57f11d3fac96eee18f100b0c71c897605a1272a87a3508589e3a4e304e370320baebd6120c85d9d62ba8370e4558c530369abef41164ce2a63d8f442ff74341f70941f3ce5d16bbde45d5cbd544b0cbb990d43179b0abb28af480222441e9c01f27e72c41767a04060b09e4804c5443cd26a692ea70a402a3baf279e09b570ada48fa1b1c17a121dd5e2edcd65f764defb4ff28eed38ab4cca2fab5b4f28b79749ab405b603db637023057ace31
+Entropy.9 = b00c02606cd3cde2bb9c5955d2fe9f211abd959ab4bc57bea217175ad7acb339
+Nonce.9 = d0728177d9ac49f4e2b46343db72f8a3
+PersonalisationString.9 = 69bf80398db23361e203ef5a05c5ba4acf07399d02b15474b4ce2f89522b42e3
+EntropyPredictionResistanceA.9 = 11c665072a0b59158557731ba0842f94ed974ed53cbae2c93125558b04427143
+EntropyPredictionResistanceB.9 = f39224713e1f8d1195eb9094245343ca3acde56fe3fe10f71bc172342d2ed88b
+Output.9 = c2ae464af122a837f66287ef8c4a937e3402bb9634cde8aa84fd43a4d8d6e24b2030a01da893aea9656aa36e9d5b01ed8e5b680b18200df5f8ab913d447a0dd60f1f05f0c5c69e8d8cde1a0b4a1a050f508ea9f60c70adac40ece3024c4d3350e99120bf0aa3a4bf8c705306723ddd9262b9bb370ad0b65b677f4933ac10f61d6b00cb1b5690bf2acf318657f05a9389fa46b7d67b854ecee6ec292d32855626547b956fb634e2a60e2ac04bcaa77e976ca135f441ca3934351bb46130e30f84c4f388fb58ce8e1f6cee7c3650ee3391bf83b9d24a71e259bc9c4b87a7bb5b42f4671c284871c3ea8bd2831545b2e9acaa3655e43847cea06d28d2efdd6c410d
+Entropy.10 = bf7f0edeba3def6d9dfb44c937d9e4ece76803f233930f2d54c581dc74f45f39
+Nonce.10 = f5155aece9728fc77de16074df77aa24
+PersonalisationString.10 = 6001d86c46cd6197e3395cf8cf1c4caad4ba3a225ffae9e60c7d486954e57b3c
+EntropyPredictionResistanceA.10 = c7fd9772a2f9d9b7439156fe871980b21c03afa470a7cfbe180303d41793cdaf
+EntropyPredictionResistanceB.10 = c17eaa6ebf98e8dd3aacec8933ed4abe7b7113382d1c0fb41dac5f40e3b7d216
+Output.10 = 8805ed0cab2548d886eaeefbabe54101919f896db0b4d3465cc06d0d51cc83e0c7ec4e2508daf34089b9642f55e0c46b5373bcd8d604f65cbb0a4b6b0d643523b5c37e93bea0922f0e851ec3a86f976001d955b7c19530d1e9f0030bbb059ef123071bbf06972b52efc6a07f4cf3d56343fa3e9b70ca2e50720f36001c165f7fd6b65a77233e54efecce92bf599b653ebf8abf0bfc5f9533ff149d6419817fb606d1209112efe63aadedae0cf5f7f590a72b400890bf15e106b4bbf0406cb4059886d4fa8df617a8f66bce3bf4897e8ad4766052593a2dc3e89373d9171833283a45bf8280e8cf2cb27263d555546700bd94e4e3b316cfcf75384d1043fcd422
+Entropy.11 = 91f3fe96dd1ca448f01dee6891cd422363918cc2ae9693820a8bf5a113cf68c4
+Nonce.11 = efe7ecce2978566029d4d76026b35758
+PersonalisationString.11 = 959dd866a296b25cb7f99956664a21d3579acc5e92404721f85a9ba5440d8aa9
+EntropyPredictionResistanceA.11 = 15116a03e11a5679cc5e6dc50cdcb1be29f0cee60e0c29909d0762c133c5df7a
+EntropyPredictionResistanceB.11 = 3aef1256a8f9a6ddadb03d429acc4d0499eb246d861102c149d2e3402443605c
+Output.11 = a08f7a3e7a65fe453fb8b96179674c82d69116766ddf6603be50248d34f7fe70447ebd83cbd544db15beed6e7d91cfe3094b18ef778de84661eef2773d6c8f43e73802829ebd2fb0397edffcb3e3f599d5573bb2418efed408459c53b5368cd6be7714d5705748d1421189be27d67f5797e7f6a52952c790d9651d5c9e2a6ac1e0f3763ddd01300e1abf8d094eefae9cb25349f72553cb1071bc794d53496d1cc29f6212505e094fe8982a40aa5c2dcf50a28deaab2e10ef33f7d0c44b22a9b39c0df696e55e7ea311811119fdca83c589f08b81891a81d118b5bafa959443cc48938c8f1ef054fcabe4c6980136e73de33e2526413ba5468cb78538d8ed53fe
+Entropy.12 = c37b252409513884de89054242650b3cef41c476692e6c4c786b3885aaa90601
+Nonce.12 = f56f12ce9ecfb6915bbd1941188f4b90
+PersonalisationString.12 = 83e311541ed73e5df5045f6c1c5f2c603cea813aeaf4a94751eef5f9cf71db29
+EntropyPredictionResistanceA.12 = ea9116aa668344c75f416305bb151248b26f9e3b970e00ecc74399e8a7d3e456
+EntropyPredictionResistanceB.12 = ffcf89bff58922f511b63de1f087266b48ce5c6828af0b166d139b92c310d1e9
+Output.12 = df44674503a561a8e3a917c15d9ff196f997acdeaba0b4651b7fc6b39ffc8bc5a4cc25bf82c54f1a3c60497b59a9d7060b4640005184f7fbd7611c14d22bc4c7d176dc4d190115773d07a17ec6e4cdd99e268dfc7d73952a7b69441cefb290246445e6b850b45683a34d72cd12c67937a2214abfdbae604d0f558cd485318d48ee8ba111aee39b5d593b61be81e8dda3ab18771a31873b85c45bc0d638c7d3f98ce88ea2bf68a9717aa6ef51e79db6228b5980cd22984aa7b51b8165be0683adac5dcd8a83712f0db71f70bcd1783023c47cd910e52b5317caa191eb236320baf1597a4851df27089fbb55560e30fb86a3c98d1e6b442881206737ca08e749bd
+Entropy.13 = 9e6206636add5d1e4b4099d2ed930624a1cbb289a308fea213bf87ce7b1d5407
+Nonce.13 = 50eaf95db9bdf334708c41e556a48e2a
+PersonalisationString.13 = abe4f12095c169952de63bd73da631135e46fa8be66d815d3bc5d871bcf3cab3
+EntropyPredictionResistanceA.13 = 3552ec9b7ccda9c442db90ce4b183d6a794cfa79d2886728a0ac6d08a2d7594c
+EntropyPredictionResistanceB.13 = b8225ab8d5b0697b05052704a4d50beee7ed21959e03c5ae98ffcbbaee41581c
+Output.13 = 14fcbc98bbc285371a17ab16bd31c79542c58136dd4216024ee91ebf34461f2a75ef951376847654141d7eced6a83bdddd965555b8809e228e57f724f4b79228eec45c7e37714af0ed8650187a0778cd11bd2e012a24f68a5941b26b037fd55282bb4d8531e0d69041b9f648cdda5bb1e9cc1fe16dfbf575a6077848a61e61f04e3b3e2d74a9d141e12dad3f862b171742bc0f1879ad4a7a85268ad6e33cbc86b1c47425a360acbb4a1c863d459628347a0398dee39ce4c8cb733a1c9d95fd729f552c168f6d8724d27df94b7ab74d60c1152d69c7bc88da6a45bfb2b908f7ec562bad316b0374fe1f6f42f595862c0cbae393f0224f1d0c8dfba27315ba14b6
+Entropy.14 = 841183ba38cb053075aa05682ff1092f4bebb9568dca28e2480f9ed281c822fe
+Nonce.14 = f23b3f2669ee3675a69242b5d03b3bb4
+PersonalisationString.14 = ed70f476b0bd1abc8c7fdc3e9a42b616630302dd5e6e58b5a1e04d00531b0c81
+EntropyPredictionResistanceA.14 = a918ec35414b0bf1d9ba3b80ef838e75b9504fb6b77e4029cea0b0c6a8c4f282
+EntropyPredictionResistanceB.14 = c25de5d8b1f17acb7303c4a652ea1bcf284bfdc08a12c40ece16e3125fc8757e
+Output.14 = a3072880e72e76ec1e467d7c4f4ab8013eca926c96f075a0a25f5550931f4d6b3aff2057ae6fc1382d579e8963ee24459d76d7414d250aaf5b302a539775862e26596176de2891589defa7aa66f763126c7fb7ced0fa80f3f5e1f0d15295e6025fad617e554838876c8c8efb4bef1e1227a1c967afe99540c1992328a70798167eaea5a768f1f4395178dc914cde01b8e6b98266a66c5c079e19e5d3b6599c6dec24e8e155b310164299d1b4d31ab2e0c3b917b0cb627a4cc19c86061c74c849aab764feacd33de7472b7c4e1403cb38f8f1c3062e75966b2e2c0b2d7d966271f3d180440aa2ed2194bbf7d8b9415a5c5bb7f3df7cf2d02740cd4366ee3781a9
+
+RAND = HMAC-DRBG
+Digest = SHA-512
+PredictionResistance = 1
+GenerateBits = 2048
+Entropy.0 = c33ed1f4ad1432c07620e91b6e1b55ee5b060d363af0471084addb7a6e7a286a
+Nonce.0 = 300f5da29ca6437a2c283c95265cb965
+PersonalisationString.0 = ceb0f248674277fbc79e0ee0f4750e944765e27561ac4d87ace6b8254fcb8f59
+AdditionalInputA.0 = 1f345cea153dc8dd43d7d5538ede15e7bb180a9ac92a8f9d3e395cf74becdec0
+EntropyPredictionResistanceA.0 = e558a34d278ad8df9ae0dd1ab911be2577a58ad5182a486afbd101c4c4f86494
+AdditionalInputB.0 = 512b0be510edc7c85b7a2ea72230e2de2d2065a7a573af0ecc9d163617cdc556
+EntropyPredictionResistanceB.0 = 90e57dab0896f2fc8e4324f96d2ff772842252e9be2ab8ec750cf181d7ae4fe6
+Output.0 = faa35181137ff07e94273d6178721ab2dbceba792ece88e263e9ac29379ad0c4a0476e0b7aba958254dd40ccea975d46270d6e4c258e5f0be340aa5c7f599fbf99510d9350d455218731d51c842135ca7f6eae5ee5a8c61881a3de852e545d89fe9be7035e9267bbea890748c97983f090f2cd941399016f907868aa89cf9d132e240aa131eac0353278a8baebc478c3f5dfc5040e2285aa0cad4fdef9a75095332536a2d2e2ff2e9b0e7f9b3cc1a166f69011834bc1b146ae8698fe89ef60667e49a2ba52e2fefacbe0413b25ce0180dc46a78bf69647ad521a2e61058883af9c0a3c07516f0277cf2e29dbd9918fcc89da79c9199943f80ff16a8363357452
+Entropy.1 = 85f237b3a24880b62a43d84cffe013ecd5d99ef8c72642e098c0adab20863b8e
+Nonce.1 = 469cc48201fc61b7424cc3636b7d0e5a
+PersonalisationString.1 = d70a3251ee3fa23876beef9ac0abafaec8e6d03a84df6a7575d8eb132ac7d754
+AdditionalInputA.1 = b9cb05aa91e7d408bb54d5cbeee7dc821fdbf816ddee219593066b5826377329
+EntropyPredictionResistanceA.1 = 48e83fd7ad8c84b39fdcf9c295f5728bb9e2a0e4d9d9d1c060a6542c398f35e2
+AdditionalInputB.1 = 33c5dc7944d4fb2aa61d4f31de940b588a3c761b0fbfde2be83263b11933f888
+EntropyPredictionResistanceB.1 = bff9b7cffd6063416d58c3c9e94b194ea205839cf99ae478c94fae1d1c2bf125
+Output.1 = 927d6e044ba7a8ff8b8c48ecd25351f47dd598578ff14e494ebd30ad3d01468e2ec2c8ad9da57dcc0636d94e08842ca3b5334297b1970abbda67f881929d91bf1a8bb94107761568f4d8fa089e595834d811d3d6e05ec20a7fa64fc4482f024c3d4ba9472b0db78a8cf5df65402704b98a82760a4dbb285bf806f8baa0725e5c5ddfd613a8b970cd252bb0384a0c9c267e0cf514fbb01e05bf407a3d452208200b7f74c7b3ed2539d0ccd4f4f39ece63b7443ed384f791b9883e43c4c1cb0af8066c8be11e66fb88deb8c88c6db4281995dccf69d6903fb601fa9ce3e2bd7fdc7fcf4a6a95c5528ff5764018cff5662b900a07652c3ea47532b4f61aae681733
+Entropy.2 = ac78d3c06e43b6e24c8702f84a23461fafa1dfc7d4a319915559fa9e72441433
+Nonce.2 = b3707684a6737192856a66f58e8486c2
+PersonalisationString.2 = 2d87dc248c7a3f7d0c5622e5b38407d50c2efe78adf5e2a58ea93f4acf6a525a
+AdditionalInputA.2 = 9d3b49e3e83533242848f42ebdcc2f438b3e1e6d809a6c1680c5d3971c8b5a49
+EntropyPredictionResistanceA.2 = 8766a51fd732d4f8e383103541896929e2b016e163c545a29d9c35f0a84646b2
+AdditionalInputB.2 = 61d91f64c694ee2a7056e04b8fac3b98c0dbbffdb023538c383eb140b2a849c2
+EntropyPredictionResistanceB.2 = cedf223c45013e3bdfdca0491e5b198af2a25015ea735d85ab7dcf0cc83e9de5
+Output.2 = dfc0cd646c246b2c31dff79bf493a0137b9c7084a81f5ab9d3378268677612179b08f3bfd77525895a72b979262626fdcf1fbcdf44314a485dd4602e5b17ec33fa10a21778d5ff369160a040644858399a75a20adf3f0fa827aafea5ce31169bd7f19028c4dc84a89b287c7c9c25534e887c53812d225af5b3fb43eb09aea15eef9032e8eaa7fd835a16d85234ccc5bdb554f529b0637d2841cbcb156723344933b27aa1dc08e2f718a581ab1f531634aeb226f9b8240c12577977622cf10c4fa0b6761f0f0ec1c833f494d6b738afb45b6fd5e376a3cee1102abb2418ca10a1a42214c00660ec590fb26e392cebc84bfd44d92e5cac2df92f8c517cc1006e38
+Entropy.3 = d84fb815046d6d1b77cc7200bf5e35a508df307da9cc3be5be078fb98381ec13
+Nonce.3 = 0c127d9fe9ff51a2ac37c30bc5aaccb3
+PersonalisationString.3 = eaa930095036f64d0b6789178b2f99bae6be458793f82b10735eaf705bed51f5
+AdditionalInputA.3 = cf35540f4129d6e04466f56a2518a4af041b5f6a895acccd680fc77012659891
+EntropyPredictionResistanceA.3 = e5765e013075bf6cfc79e34779d4388881906e8603632fa47912c6e517f4a620
+AdditionalInputB.3 = 5200555eaf934186d69681ce1c89a6629fdfed29eb55183acc35ec4fd98009fc
+EntropyPredictionResistanceB.3 = 8917323d78c9c72e142cc1fc35382f4dee1a9cc8f6257a8263268ac83bd51a8c
+Output.3 = 3ce8debdc354ac83867bcd734b882d5ca632325a2149ad4e6b3c3f6bc4ec65992cb1cd1dfc0f8cfcafeec8a84ddfe6471aff736c7ea19ab7d97ab449d934c96c9f5a1be970efd0f091c68d217b005bbc996d5944284de981fc0eca513d2056f4d95ef9f5ef98cb81dfc77c21771445157aa93d8a371980d8e81fdbc8ea80a111c4f38e08af10b8ae9df0ee6446d284f03b9c0270b65fa1be09d3f3f7227fec102b47f6f089217e556c731e0a9d6fa3d3b7a4df38516b77fc2cfcffbc6739bb2407e5e0c8456c1859e878cd3d971207bcddcb44147b37e6be288ff99029c0190dd8a72378a5ee0cdefdfd8ea1cfac8544afd308e5965b2f1bf35b85bb4a07bcf8
+Entropy.4 = c8dc1f4f5ee224246f7345e957288364559079f263ee565f6735e00074237be0
+Nonce.4 = f8a9e1a78d8376c53a2a20eceeeda4e6
+PersonalisationString.4 = 5aebc314a4d36207bef9b46266135ab8db16ac1c726e391fe2b80669d8d13c89
+AdditionalInputA.4 = 9b3da1d6c87838051cba92181931873a1569a94d7af3aab6f73d3aff2315eb50
+EntropyPredictionResistanceA.4 = 5583599a031fe720023a7cc3e64ec4e556079ff1cc1a4188dac8865985c862aa
+AdditionalInputB.4 = 33a81150ed1024c59693a2c814f371e1ca295bc07fc215d5e9f79ea8cdac3244
+EntropyPredictionResistanceB.4 = c17061bcb0d34c9675d9d6978c135d06ff58a96206371f97a2399894bd3a1bde
+Output.4 = 51ba10a56fdaaf5bf93a66ef2a85eccf71f25fb011ca96a8312b9f9bc636f1445506c70de46ccc367b648b9692d96572b196f7b8f2c0cdadb606446e6a70874f16b3eb19331c23cb65c685c87fdfa258ab89c42dc0d71fe9488d6d9457314ec6b3ea6ddbf4c471201da789983f164afa4334b047dcd2ae7800a1a4a5ecbbe9b4752737de70ee93679db3ffa4b25a90ed3c4a087299c4c9c8063129d48da708b23c6c87a20a7daedf434e6bbae9f1a5e60ada821ad6cafab54d16b17ace314ab3ea32740c7e82e312900ba7779ed13ac41082881b82ffea9cdd85448485c91ff47c643070de252491af9b0cbbbfc9c7908901ecbc4bc6740e9bf300d265d3ce40
+Entropy.5 = 591d6b9f460cab93393a7227976c2ac4986a66be0d0e32b74e00a48718b718eb
+Nonce.5 = 1b486cc23913385ef9cf2a1a64831545
+PersonalisationString.5 = 612a5489c8ea266039b30fbc4252ea465d80557454fbd5d585c25ff5d49ad930
+AdditionalInputA.5 = 766b36d34fcd2dc1c45d5871d99410f6ab1d3c7c9d278421075d15ff3f15c42b
+EntropyPredictionResistanceA.5 = 86ea748645296c5dcbba3456a4bd68bf7665fe2468909c1ca14d7a1978bf19cb
+AdditionalInputB.5 = 5a34c07d12758f1caa442d72b91dcb3ca10105c7fbc2ab90f8f8578bb414ba41
+EntropyPredictionResistanceB.5 = c2082a27f5b4a1359e8e92e2bb528925a22e949775e14f0d72f81d185e2885f4
+Output.5 = bb631f0fcf8cd2a3ab0646196e3afa21ffdb375fc22a46583c43228afe5dc1542375a681196075b85418bf62520aa613f0b7953cf0e56536f7d19be2dd8847ece44977312a3de718a767821cc96a94b63a124446606709d9e4a584f0e9e340a178dfb4c3278c4c74ea7cf954dd7a686418b7df7ce54614e8a9be0f1dc6ce66b6bd017618763e1ded406727a3d25b86890974ab603997a2718e1f665e247764740eb9886e8c200273435cc83c829b38f084543057a1dc39b40a347b6595c1afe30dc172d8a9ff3d8c94bfe3a8908f053bce4ad593fc96bd237571c855723b3fce7ce69ce151d57a7152553d78dea570a9172361f939c556eb40461683974d88e7
+Entropy.6 = 4930c9cb8623c096660b9c3f4a1244ee9a84c2dd377875dd7f49ef6cdde7dcfa
+Nonce.6 = 38410dfcf70868e99a107a82e90b1c41
+PersonalisationString.6 = a49fe87a631e7308c0f55b98299f85f6dd6a797eb1416e17dde3bda25a8b5468
+AdditionalInputA.6 = 8e371b7f539e4f771dc66d1c8af22b236d3e1e67da46188f83368ed696299207
+EntropyPredictionResistanceA.6 = 425dacf577b0c308d939461e37c9a3d52de20d2ed63c856520f14b6f9abaec44
+AdditionalInputB.6 = e8b50763b7f8bb72460663d5d5e53f9243227ce14e309d6e5a139e5b7a73f73d
+EntropyPredictionResistanceB.6 = 5a6bfad6b37d186dd6a110f51d902936433fc376efa4936b12bb1e7743d61eb9
+Output.6 = 21093371c8441c6f62f9ea348859f32fb5b1dedc2eb8a313f029c5704354065e0927ffab36663a759436b570adbca47d6939707e8a9a72df0b9f26ba8bba0094537f51765f1124be4c26b89eb6fed29ef5c522d0f6775baaad94eec062119dc8d95378fa5451d00845a5976c99539be98ca8af0dbe5c4591e30ea16f3e25a1abbfc0aa7231680d2c9cdca865872834645c762ad93c60d728031aeafa37d3f20e79dad955ac96f9ba16ffdaa871143ac47df0b36adb8b3c3cf10fd3713faa66a965e4ca8addab03e04ef3908a0588101efdce168fcf9c88310ce201253bb6a562be1e54de99eb0a8a2f629034709970a146a5cab4638dd0bd41d62819b2e3628d
+Entropy.7 = 6508e9f1ea751522fdac9a5cf8bc4a475891d50a8037c22433e49e46de9898a9
+Nonce.7 = 3372514ee3409c46ec255995390a1688
+PersonalisationString.7 = 07f25e8f77f1ca394b9f3b4e982ca3775e128fcb386cccc0442faf6356c46ad3
+AdditionalInputA.7 = cc12aecba9a5834bf7c22a0dc0e09980d38fd0472c815ec410f9131ab2a4ac74
+EntropyPredictionResistanceA.7 = a2cce814eedd7b4d0eb039f15772f6eea2bc698c05fe747dc632b62b3754fba9
+AdditionalInputB.7 = 541c0cc11c4d4b5e1ad90c0f45f199e54793b849fee7e9c5b32d2a3a51eff063
+EntropyPredictionResistanceB.7 = df377cac9cfaf244ddf4a1a4e2408fbfb8c1464de6210b8ee242c1fe8400d013
+Output.7 = e0242aadc8b92934f6d105252857a3a2e0a71b5428043ad0f21454fa9a55a2a479fcf8a5ad63dc6aa657dde50b64fdd94334f1d48378fad19f4c10271d5795068a9831b20ccb07c39a161a2af91c1f190d18e04673868def991a49895c108d77365dfa5ac7a929dbbf201f9bba7e9fd6dcbea597bdb29f1724566019d598fa2a7b93358592540727562a6f343dca25bcd973c77eb9699028816315a2062a4983e6b475e638a2ead5aa86a4e8c0f5ac9b1c096e037f29f079559a65b0da8eafa7c2f4419733f7dd24dd0852c34dcf094a8134ff5187f20327e3d35b93fb96e388b3eeaf1643b27bb79528139634569bdeac4550cef6e8e12178c5bf074ffc517f
+Entropy.8 = 9a5bbec56c9e103c80ce96704358c2e7e56affd738454dba1a2e00097bd35504
+Nonce.8 = 769f95602fe4424050cfdb76fba1ed6d
+PersonalisationString.8 = 609d8b8ec7174b8384a1db512f71f7b9974f40e97df2dbeca0d9219e932230c4
+AdditionalInputA.8 = c77c0880a25ff3282dad1f4cd8e6c670a59b943e5a7fdb2a2b45ff685dcb8dea
+EntropyPredictionResistanceA.8 = 2334f4f1fd319896b2ccb2bfa6f53d19d4f72d0c2507cfc8b2c7627f10502039
+AdditionalInputB.8 = 6303cbf76365c3f7196257e686beff1c2cabd55cb3c3196dfff05506e7848f1e
+EntropyPredictionResistanceB.8 = 7f2acd55230828513aa3f9fcf4367cd5e043a8c6adec696de6d53eb83ff54889
+Output.8 = 71959bb2622d6f1aeebede40b9263e0f123586e238f98c5f98d8af3e4f7c9d0ec917048858ff2244821171e78cd9c2a9316bf2f4c576feebb0bbda9f25d066786774963eb83bc0762a3024537b35f628ffdf30484dc0b764ac3d0c88c71b61e85930c434e99ad892a55bc53f463c3908462aed8e69cc506b45f7961eb2a7e57260b52062d260b88599509aef567fb8de97d7a2f613112d008b680bdb1adbbf152fc03683169cd187d2ed5371878a66778b547e3a350282dc9f2c532f737cd5247949b073c97e7a3ef358b90ec74cf1b24c1a04fd993ff3f54593a6d6652c3e3c60a1cd50a2913f56ae388b2b5b1899007332b8364f70443173a48fd3a2223bdf
+Entropy.9 = 4b1f99953f704ca52cbc1bb84945aa9909b28ce5e2dcdf3792c057e01fafde65
+Nonce.9 = 1195a1c53310a20e0ad6c11263df4b68
+PersonalisationString.9 = 42915f864f3e1c42ef0f91b52a5ddf5f223c4e071be02d7aed239879d5b0d09e
+AdditionalInputA.9 = 4b567d52097f98b7b4f15252cbbc9929923f7db3ee79e5a59b463b738c35f12a
+EntropyPredictionResistanceA.9 = 0ce20b11623c9afb67594971fe96a68e2f39b19ab894227060dbbc078d124e18
+AdditionalInputB.9 = 68b9b294399289a5c2da4d032d73463126c70ce3b611889856f351d676bdcb6d
+EntropyPredictionResistanceB.9 = a5490e9ae2d20a047435dd93e6731150207f6c1d8bcb5be5768b4772c4f2987c
+Output.9 = dee9dd65eadff71db5d0ef68adff00c79421cbf373b1c27580840dd4fd503b426c3127e8393600573b29d5d6bdd118eb8f8eb0cc402ad80b7eb138fd18036a66a1c46852ba7031c3ef7badeccf341cd8db767e3be0967af368129a434ccb976ec0ee456b9860bdec9619c382f1ef13caec9a2f619cc89bb0686f9bcdf0dba8a6589a29c1bec79780315d10dc49ef778209af0fb2651e665f8647f047703f87686472f4aaac757f8af350fb12309983f13671d48e03fd799c9ba76a9fe478ee6f2a88e2b3421081d3ce8fc3a9a7414ab6ba199d1ea14795492726782ee59f672817740e3a4a5c34ebe1de446331ce496d2f88257f49299ff95887d1d007048f16
+Entropy.10 = 3d85aa068ce4148dab455a88744cb37111b082581b9c815c80959df2a74110db
+Nonce.10 = 337efae06b2aada043a314c7059bbf92
+PersonalisationString.10 = d1530f07e8b7c3522c2df83fa51f22fa5b7128f2fe1dd14b695bea5fcf07a9b3
+AdditionalInputA.10 = 134e9b88f52c85836e7a756af1a6ddc6b15d83281c7ffd63acfcef52cb2a8be9
+EntropyPredictionResistanceA.10 = ae9ff858787ce9d6c9c046703a54e983f46bf3ace22d7254702a43cc28c1b021
+AdditionalInputB.10 = f705ee4cbd121b9e9a410fda6d64b9f16aac91c850e688631c9a3a21be3d7180
+EntropyPredictionResistanceB.10 = 155cfbde8e498ead377ae8874a31ee026f8fae538ae4e5f6dec61ed63c4e9a04
+Output.10 = f309d62ae78b06a4a594b2df2abadc6798ce2ad09cf22f4c92b4cdbf4ccc2112adacc4842302f46e1d3f035e4ac91e76c57e9662d17747b4a86e655a773f5933a7897573193f184640aaee7918e5d40ba1544e52eb128f10ec269cadaa4888f2e3477baa8596f7a8943d88c6fb395521d9f57647140d231b5827892ceb6c8028516111a6115e9652d05cca956dbd809bdafeb70157f7adccef349517b459395cfd11f71c0800ecde18064f493241437dd76db67325d0263b38c21ef9dea914a71fa218975b0e151a8d4ceda988a5858d7c9b49533f76d56ecd8401998cd445ac56e911addd17df7f32f4718394338062eb0666a08ce68948312deb866a3a2708
+Entropy.11 = bd49cffa0abebef5dbfe196237b2db9e5c8e655e4d181d4ede9fa0e6e16c3b74
+Nonce.11 = e0a4f74910a94a136fd2b72af14b9235
+PersonalisationString.11 = d97bff97c345d7cd77186b6ca70aadd089a15499a2fd415d5dd1f565bb1f7d9b
+AdditionalInputA.11 = 3c0292ece8bf51aa389bc5b4534a934d9e33beeec80a79b6da0a0b8d85556d2a
+EntropyPredictionResistanceA.11 = 35564afc844fe7333f854b6277e958b813e719c56cca30bfe9c2a47731a24737
+AdditionalInputB.11 = b7e55f2bdad2cc22d20a33f00fae8dde1c367815abb750298738dddfbcdcb2ea
+EntropyPredictionResistanceB.11 = 03616a107e75bad132a51baa08e773b414351da9f489e5be17656e7e9b6ced71
+Output.11 = 2a7fa4618d2d3fc3b4fd875518b02c40ab38663a4223b817410b526c7f98c6d63cf9274d14a26d17a9d6a352fafbac54a318bff488e756aeec78e405a9b105e07d5f9f752ed86711d97f7285eac9e3a7524d0ef52e527e7b56d7e8191b1a2dc21b29affa8720136283a253748771a80ea606082386ac4c9aa935fafe89948711657d36c38cd4395d6b9eb8a8fcbc036e806d28a27a6166a91fe735f91e663873a8745475af4d2734a72a777cb71627c57fb583682c194eb7b0a69f9160ac9854b2aa247829391ce3ccd6fc491af71d656ec9d0f0be859ed99ae722a8a35399bab443507247cf2fc76b386483e132942df8c15f04b9e37aea82fa50c53b1f9e08
+Entropy.12 = 56e35c78e4c01a2e23dfe9733555904d4849b85af1c64b7bd01892cb4623e3d5
+Nonce.12 = b9e814e7e8ff8488153d76e055fb5d79
+PersonalisationString.12 = 466e3b623f65f15773e0a73d7ba52b3b3797a6c78eda3528a58b4fb43dc6841f
+AdditionalInputA.12 = c1bdd84ef61732837896d2babf5aac73a05ea48c84dd3317825fae8a8164b252
+EntropyPredictionResistanceA.12 = 0b380b82c7361da786976ce5a14b93371e75d970a81774e343aac6aebe84ff4a
+AdditionalInputB.12 = 4bb5b3c9bf043e5e57e3089b86f0aa46f209f49f4c6faed09f4a5f882ce6700b
+EntropyPredictionResistanceB.12 = 64a926e1304bf9275672e5254a41d380f8bf506c1cbcdd3caabf53015184cfe8
+Output.12 = a906c084a0178c65f4775a5ba737f9f0b6c01a37d618cf9ae2a85c53cd483f7445161caba4a4c6a95d4f1549684b88f595e12dde4e57befbbad09c076be6ccb0adf2aed0e96b8cd0fbad9bc2698b2eda60b5f96d9b2ea388806820a5ab1ea166c5ec5bd329c93b2d6d01bd9c27d316874dd797493eef30187d4b8567ca3992509e82daf0a2170f3b8a4ca135f9a0b2cfa7b525c56b6e193c1e2b8b71e237d5310872e8ee2b0b3332d5db512252eed997e3b70d5fafd53c17b41a8e0a007765a8b4ee88f85e5b252d1788c8e1fc425f94e39aa32bb7077fee5b641fdf8a1adeb14604d3be71b19f771546ab7a3f1e1c6df8ea0ce6fcfc2d75bb77d952194cd01e
+Entropy.13 = d1c270ace5286940ccb1abd2bbe82a7573b1b6a0270f37c4b1679c8822ef4e28
+Nonce.13 = 394d57b1bca552f2850fa92559f0e9e2
+PersonalisationString.13 = 05db86b076d4baec0b265206fbe02f7a2a3b66d46d23f8a7c40d38a14137b1b9
+AdditionalInputA.13 = 8480836cade3a6b16ac4742d8ff5ecde5d7955746a7a15f0ca6380432279d797
+EntropyPredictionResistanceA.13 = 6b224f202d21f3aef67c284916e109101e131615ee7610dd82b20f8a328712d3
+AdditionalInputB.13 = 85de7d3d77263115167f6ec244a551ae247e040f4dcef36d7eea9612fa912b38
+EntropyPredictionResistanceB.13 = 2f7cb92942300c7d8a7cf614af93fafb7aed1d6029c318bebeab2ea103841da1
+Output.13 = 0732b29fe2b6a9778e89fbfabb5b80bf25f682e82867096b00e0b1ccd444ea56a1e5aab5163218f83e8643e4ad0548f62eeb3b621251e5741d44888026a5b354ac091de68ffa7fdf960583d6f1bad55261502acf0861611e98c7add83ef432fed9fd974b7fd4a1c111b6f12a49a1526d193f5bc40340e6ce85392cd283342bc2b8fae3dd548dfe5446bcaf25d47b09139baa0833ddb38b471a71f49ff67bef479c1a05ea33f45d99ca7847db0ce10b1678e2abce44f27ec73664c552ab0d705b222eb28fccf46c00013b0a3c8f5f8186f517d1c652ec12e644ba8867d7381ece370516995b9ca3ba2244a36479b6b1ce6dfc6a0df40bb188b75527940c4d3232
+Entropy.14 = ab749eae80b3bd740f28f942a4d2a907afb69c6d5575ee585fd1c1b4fb9ada03
+Nonce.14 = 4ff0a76e805a26b4b4deaca650ace6de
+PersonalisationString.14 = 071a91ec389ec464e68467bf4255b43f799c631946bee6efaf675e475047b497
+AdditionalInputA.14 = 545093aa397ac7b69eb385ca13021ec44a5adff3a41cf4bbddfafbd4f657ea47
+EntropyPredictionResistanceA.14 = 5b12fd3e66d1225ea3b3c4d5870f5a2f48b259c44afa5a086e91e619499c2471
+AdditionalInputB.14 = b969d2503e5dea21ce90fe8ce89cf9e6e9165313fbf44286ca91a689b48ebf8e
+EntropyPredictionResistanceB.14 = 0735d5d8322df6f7568e2bb29a8d63461d8b28ed9af5f7323ab96292c31cb59f
+Output.14 = 7ecd4eef593d3c8c2ad90851d17501e666cf22ade15471b3739882cfbf0b03acdb6b83288f22f4a6246fccb608c98cb906a5e9a42fdfbefa52e968e903d175b90f51369d21bd8f408a723768d6de02606a15f37e9a16469146de7340d8c6e58d293a2fce0de7217f7a16e9bb7000f54f35b5b58ab24c0dea43508f52a718eeb46be9618461afcbfc2ea4ad3a38ccb180db88a0fcdfb2d883f82e27fc119a249e668ced1e33dd66ba23ddd0ecef668e91d17654ba13dccb5f8b858f44171f4629ad4a91459b6c257eb20cfeb814e289518947d94f9827514aaad7036bc19cb0b73857b1d9ca3ef069d2d20eb5ada8505fcf404052d9889138cf51e137e70468f1
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 3f1a050ebd246f53c8e036b58594f8d4c395dcd314414528
+Nonce.0 = 956fb1a0f2cd5ade8dcae866
+EntropyPredictionResistanceA.0 = 983bc4987f862e6d0d9c537febc0c0894f282446d9193931
+EntropyPredictionResistanceB.0 = da02efc12960675af2612d514277976cb3f1276b13d9e96a
+Output.0 = df822ee514fedde93b6c9b7240ea27c63ed355235c928812f6e9d5ab94d899716c755d887cdb2023cb6989de631b0e4fca13b3b0be1a2bac9b17627a2131ed6ae8ed4f977b16b22c6b3ac68e89534db5ffa04933a196143e324d86904603a7f3b1199ea5d3163a70b5f214947f8fa349
+Entropy.1 = f46ead7196844f5d177b1534d93d021c9a013be5e8b9e6fe
+Nonce.1 = 262ea512a6faf1b24ddad423
+EntropyPredictionResistanceA.1 = 7ac702d62e962d06269dd41bbe5b85755622816a41dc741f
+EntropyPredictionResistanceB.1 = 9192df1a8c50d7cef1b88dbe39bbc4ab324935c67986fecb
+Output.1 = 071d0493c91fb03b26f637b6c174598723ae4325661830b405ff64f4669f9058e862fcd32b6f5157864325f5cc6d5847d1b55cc16d12d3ea336dd017d373a75fe892f8018be4e70159d040796a5a2cb90ac265a22b7c1d7394416dab694fff1710ea2e7d81305d6b32fea9671f5a1573
+Entropy.2 = ff2325bba5ffeb066cc017be14f8d7deb1d684bd592982b8
+Nonce.2 = 997609f9680495f00dcf0af2
+EntropyPredictionResistanceA.2 = 80bc1042c34885d9f54b156cad94a724416f9d0aca602914
+EntropyPredictionResistanceB.2 = fb110d65535808a53f74176d0e9374f338dd45501c9f6c14
+Output.2 = 415a7eed07e837055bedd03db04048277cec2a5e33346071ca6b094dbb6470df28abf70f777e753ad2eb3841953507e27d7d5d22109e97dc5bb596e691cd46d474ab341bd1e24a95ab4d3afe1bfedb2da89e6f003610886ee2ba89be94bb43e76e695d63df7a98b3f86dd8016f24bee2
+Entropy.3 = f5461dc45b85e752a8d811d3853140eb75fddb280ba839f5
+Nonce.3 = 7a5bbd71fa5ca180444e5889
+EntropyPredictionResistanceA.3 = 02d7272a1bc0ec315046dada971b2e8b3dfaf0cb3b48f9ca
+EntropyPredictionResistanceB.3 = 84eefd43604e0d231783e74752c51d9d39f26c0fcac1dffd
+Output.3 = 091357b1f2438f8ceed00dac713c660001d8670596247bf5e13670b6fed733f099995f61423b62cf54bf1192234281612adfb7dc6caf0c9edda33a4cbc8b02cdb6445de1004119dfc17ae0ead31044997bcba7417829016c668cd3c44223ab386863c10e29f44b6d082a3d02cab7f2d0
+Entropy.4 = 0a16bcc94abc6eec94e8a4697c20ea88e5a1cb41723ebf23
+Nonce.4 = 252f9734fe22ce6ba54cf34f
+EntropyPredictionResistanceA.4 = bf1a1b063a0c7f45273be180c1a5c92cda80c141a503160e
+EntropyPredictionResistanceB.4 = f8cecb99c26969a78677c113584d5a82a45dd39af4c14448
+Output.4 = 99aaa67c2d7e7dcf577928aa4ba0b69192d0e6faf96329f2ec1b1a123651b16422f4147e325b3ebe37587d1350de7239d1e2343c77712c1342c3ba82380aa71a19c40d7b9d721cb1454508cb7d06525c6245a61aee1f37069c31d8a59e3ebd13ea3d914c62c90d040796ada9f14cccb8
+Entropy.5 = 2dda16ff26b86aaafadef0452d363f2f1b89fdeff69c5502
+Nonce.5 = a9f2fc852e5e71dc84139c77
+EntropyPredictionResistanceA.5 = cea7a63d7e0d2aca9c99ae61a09680586081f38bb2aaedbd
+EntropyPredictionResistanceB.5 = ad0a5cd53a4d9c97beada9eca9351de1f5d17290cacc8c7e
+Output.5 = 6f7af4348c3fa9ad9839974acf73a82dcf2db4919bed5b4acd84707cc21c23e32a434a295da7aa5c3a3b0c304ee21e4cb0aa6597edc32492c728388d0e8d00342e01e0bcff7bf83e4208c6d06f681eeb7bf8a07fec8b178124b1a43994937201be00a99e01f0433889bf4195fdabc71e
+Entropy.6 = 4cca8ab7a14870984e5ca6a9ba31c55906fec740308035a6
+Nonce.6 = 3c3b418e56957e6b02378965
+EntropyPredictionResistanceA.6 = b34cd172c51ca2820fb8883d3bf6abe3f97600e8df010d08
+EntropyPredictionResistanceB.6 = cb5291b15d2bcf12889e634efe51dbf0ecf265d74f060e6c
+Output.6 = d3ca9a6e02072790d4a7ee73d51e174783032b60bc616a3f0fd777ae68d49131d30061b43c7699b75e60c61690353047a9bf7b81be6ee2bedeb05df2eb819b95d4702f2f061b48b1f6994f7c27182f8629c9f6ae4c3d031d01f468209ad04268db5a1464685eed885eecb3bba7536473
+Entropy.7 = 0a94fa84cddc459571b5e904c00cf56a3bb0357c5efc25f6
+Nonce.7 = 7c396fa4532820c9b3d4e77e
+EntropyPredictionResistanceA.7 = f680ef167700f006722791c434d56cd0c7c9aa67eca27889
+EntropyPredictionResistanceB.7 = 2108048951a702c82a2ec1b370a78a0408ca267ab51fdac8
+Output.7 = 511137aa690b191f2f5c02baa362cddd6c7d6e2393ede878b47cf843dd980bfdbc4c2dbe1b9aa943c10b07f939a88239ab47e0bd3c0082771ceb64d78d9a1472e128a987e98580588693730bbe30326e7541f0c85a94c3cc79b68fa1d6464eaf13eda7aa1e4e6b5e4345d4cac0da83a4
+Entropy.8 = 78f899ae1d75559dac2df94a8e5af731812ef622367e50a9
+Nonce.8 = 91939dd1a9b80586b46a9028
+EntropyPredictionResistanceA.8 = 0cf5ed2b8ec8a39b8467bb4db9c501c3b0f97afddd30b967
+EntropyPredictionResistanceB.8 = 400bd3a71697652879a24d76ee48c5b5f80fef9a5c66dd44
+Output.8 = b4d723baef345f1d5f81539ab13ca46e8e13eddb885b9f6b49f7de17b61f04014fa6f8bb34593f36fb8675e4691417429afb9c2d781f7d3ef53f33626b64d897e1bbd4c48d488125e9c961644f8c76153a59a902141a9a696f5ef8cec62b7cad8cfcbe024305501360380bcc1f6e1b15
+Entropy.9 = a150dfbaba2b940290100cb3ffd3df92b59d37eaf669b5e1
+Nonce.9 = 497180407e6a2d5019d4b3ef
+EntropyPredictionResistanceA.9 = 5459b0f5c8020eb6a2737e470fbe8ad5240f43bf18b10f4a
+EntropyPredictionResistanceB.9 = 3292970fb616c6e7711a4ae2226dea2b8d87692b1ecf14c0
+Output.9 = 3c716dba8f508e480d24f93da0051c17ed87dc31a0cd289a124b29e77a304118837e4014c1baf2ee3757928c452ce9d4ce93b8fe1b6a78eec24b5d555aab9f66b53a956147d1bb2481e759e8ae61a93fe45a2bc5494374933590e201fd26e897a13c04f65bc26594275efde94980cfc0
+Entropy.10 = 2352430137ec8c625210091add6d0c4187c7fb9d327ce946
+Nonce.10 = de4b472c8e751705742e6f62
+EntropyPredictionResistanceA.10 = 9580372a9ab3e05fc46fecc13c6f669e2271a1bf52a4c460
+EntropyPredictionResistanceB.10 = 8532c610b5c94265dc3e3e228df882e0f7b688ee7bd5f3d2
+Output.10 = 9f482503220e820e8a5c16994b2d3b7ed009e84fa9cd8215165813017934507681530ec014665b870c17797a9daa261cf6d49ae8870a3cf515e988cda159ce3191a0cf789c7354994e4925db24e41b5954894ab5f4d0927cb95e4db57d8b38570504ebb48112a0784388ee81a3153d94
+Entropy.11 = 4224dbd9238fb7e1a12ee4a49e989868de1d4ed089201eb8
+Nonce.11 = b3f5c7bccb7e205c220ba03d
+EntropyPredictionResistanceA.11 = 6cddca262e787d1c00c74a8e214e9ec9686df63a85887e7f
+EntropyPredictionResistanceB.11 = 1c1b04c48739e3a25daba29b056d09d3b2c4539279c69c50
+Output.11 = 3c16852bdf2fa329815638390eb5847d3af7534f42da5619e774d3d79f5635758d61321c0524781b53d3f3e88caaab169f5c3f43dacb1caf51909ad565822860e49ff6a53e72ec38e22c82da36cdb5ae8056900bdac0283da8aab25648dbb8e698bf94118c89746314b631f67b0fac3f
+Entropy.12 = 00df4266390ce18fd809bacdfee3beeb66d83f38db52d9c7
+Nonce.12 = 2e0594785a8dcf753a87d2d4
+EntropyPredictionResistanceA.12 = ef08e7dfe6b61b49ac7d126bb526a6a7abf72c7d69d0d6a6
+EntropyPredictionResistanceB.12 = c326bdb823cfa971d5f6c5e92c6a36ad154d98239d91fd71
+Output.12 = 998398f39faf661564963d0642a3309253faed84f5317e4bef034af3babc851026bf84730effe4086a1429c6e4ced49e75630b66a2e8f5a29854ecb5010430c623b2617f964abe959dba294403e1aaee7a6b6307242c8b1a3d39744507364fb799829c5f1c7a4e49338e250a872151f4
+Entropy.13 = 9e7340f7ccfa8e9e1b7bcd52b863930ee9cd434d89c777e0
+Nonce.13 = 6d52d0da47e8cb3e0ff3304d
+EntropyPredictionResistanceA.13 = d254a222f1c1d84686b60cd45b339c17bdfbcf5b88b03716
+EntropyPredictionResistanceB.13 = 42b6ddfa0749ed5f7afd33a65c78fe5855779181a6ebc97d
+Output.13 = eb744ff69ec789915ebdb9d83f3b459ccc6825891830d2951e44a0179b5d34cc9b86911f1dc49e7191d071187d037b8ac138f0d11819699d78354482da541ad4cc8d40b661d05aecb2b1cc49003924444f28c4813e70bee9f1d2f22c37667798f855c9b081be62bbd666b2469df90558
+Entropy.14 = 509e48b0cd4294cc50add4d5b460f9b103cb41cf8714b32f
+Nonce.14 = 3708ef27f3f1fc9b16a6df88
+EntropyPredictionResistanceA.14 = f80eee174bd5b1b8abdcbec30c62b3aa85ade4d9a43e2ac2
+EntropyPredictionResistanceB.14 = a150d5528a5f79914074a783738af08eae5c95b49f407929
+Output.14 = 88ff82264427067d717027de8edc886c01c782379ccb937cd6434703d4f0ab13acb4142149372fffc793813733ebdc9058c85d900f4e442a2369c16057e4dec1a75f5c5858d2fd1d69a48227b293a953b24fe38adda48f080a9cc5666e299ce301d2f230ad5581fb05aa78a00dd35a9d
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 3cf279b3eadf2895cf6cdd0c819068cf83df36fd87e6c21a
+Nonce.0 = 4b1eca762f149276647490ba
+AdditionalInputA.0 = fa22d2d25c927bce4a239dac9bfb1af2aa7c495d704a1f01
+EntropyPredictionResistanceA.0 = d158f916b0f9cc60afce386a41e0fb1f725827d84773c5f7
+AdditionalInputB.0 = dc9ee98479342f37612b5487a6c9c7c67b8e07a96782da64
+EntropyPredictionResistanceB.0 = 10226331dbc98b943e0109c7ea74db2c92c07716a93dd159
+Output.0 = 4a6fc94526cc774675c5f89c46e55521e110ca4401f6a46c606e929387c6e9ce1e768ab47c36f7534ff7032ce7efd5cffda214c8145fd58817ea37a3b7286795b12c152e1795c307f0fd05604d2dd36ef64da0823cb94d7bbe2da16db4869ede930df7752b1846c767ea955540c93e99
+Entropy.1 = 86af71bc125bf60171cc156cde16471a76fa2509db9d6bca
+Nonce.1 = 0cf3ae2bdd46169222bf480d
+AdditionalInputA.1 = e14dfbce37bdef5f7a2d5cf924ebc7bb606caf6c54280417
+EntropyPredictionResistanceA.1 = f7853ce299769ca37f8bc6ce50fec229279e7c63a6b8c784
+AdditionalInputB.1 = 1e90a686694cd2a7a22c8e0782e405f457cdcbd761faa4a2
+EntropyPredictionResistanceB.1 = 7dab882c073403dc5e0a5fbe82397dae9ff4cf31cbc345f8
+Output.1 = 6efe2d73006aee70d7fd10b7e87d186d9f326bbc91c3f30ac8aa23979721ea9b01013a895ba23e086d33b65edfcf307eefe4988945235b7300b8d0de39756debaba6f7e249584c11b23266f86ee7432c94f892c98ae0dee4a801000e96f7a86a74c6c6d6b9a7e7a633a08d67a86d0e84
+Entropy.2 = 4dc5b543bb9eafce05315824d46f2fbe4f002719a7753a1e
+Nonce.2 = 7a875dcb7914e8f4887ace1e
+AdditionalInputA.2 = f62ead4d4b086735d1f2e83e89d3ada5a938314f0f8195d7
+EntropyPredictionResistanceA.2 = bf7a93fe4dc95548cba9e3e77fad0e06008a456df2321d98
+AdditionalInputB.2 = b40fb35fc8ee549175c9f57a50c932b654cc908974cfb8f0
+EntropyPredictionResistanceB.2 = bd54eb50f28115166458efec5c306f48499739b9d5505708
+Output.2 = 38be15f763f715bc6d290882b648adc34201ee1b73128b136f0ea1fe3725c87b6489717eec1537706fc830a1e45f8c1efdafb716002510bc99bea3a892ba71c1b23bc67bf99c99997a3c090afc0cb7df12086e4a292e5aa3572e7166fd358041964d45a9d908b7d2cd807c9b60d3249c
+Entropy.3 = 547f72cdf0f0a6db76f7b231221c0e4d3a380fc6d7ca69c3
+Nonce.3 = ecbf12661afceb8a059ec3ac
+AdditionalInputA.3 = a2a1ed57b414c9628d07d735b58c7d52c025bc03551140a9
+EntropyPredictionResistanceA.3 = 9fb81dcf027cff8c30d14443f55e29f84f8001e09fa2d940
+AdditionalInputB.3 = 55847ca77505ac68835d8c45268e68e42793e3933561bc4f
+EntropyPredictionResistanceB.3 = 7a8320ffffb9b22ea41b9853fc8fe18a181e9da724c100f2
+Output.3 = 32d04e66fa01e1820d7b3307d5820a4d9ef0384b3601461e1b4be5596ab1b9025010daa578ac18934826695a34ad1b1573ee6dc9a20b51b7dd2678da070fb0068cdc01c646cfd19d22f9abb15cdd4959c153ad6be81a46a2f41dce360417fb06a8be896f4e54d219e5fbb5723b6ec090
+Entropy.4 = 2e8b7722433be9f40569be61a52830b4f4d71739ee4db212
+Nonce.4 = 6d7bfd5864644b6631e2a621
+AdditionalInputA.4 = 8cd10f91a5b8122d1c30feb262d6d7393a54c447e0a507c1
+EntropyPredictionResistanceA.4 = bcf925e8fe62c042cc0bf701a81a0ea6f05920710f64461a
+AdditionalInputB.4 = b3f83b5c588006b905d865098884b5923e836cff31cbb101
+EntropyPredictionResistanceB.4 = 4ddcaf524d4be59efcae83d60b93efb006951b6548ae4044
+Output.4 = 281a5132d2be78e176316f4338aced12ab17aa4ffe9c9947360d760a45c49a4f82aa319dd1073bee142a757ba008dc8e5eec740e5e2c32f2774a4707e25fa0a100770ad306de4ba0a8e0c257fa23df951e00d28bbf4962f1f34bfae42f1e0e096d5ce2d78273502e1de8d6a21f92d19e
+Entropy.5 = 75db65cb4bc999e0a6c9abb421cc706b504c03174fa69e07
+Nonce.5 = 2ca14a547b09619e56999aa1
+AdditionalInputA.5 = a5b38dbe6bcf197712cccd14a835921690aaa7f6380bc6df
+EntropyPredictionResistanceA.5 = f919d70b19e4c8139dab57ba68bc01bf8e7e8d52a4319c8a
+AdditionalInputB.5 = 857fcb807ed8343cc7dad2cd8ef4d629dea9c38153b21095
+EntropyPredictionResistanceB.5 = 2cc68565334825b44101acdad1c78b06e6045c1c14f68eb2
+Output.5 = 47a89849823b583f197da7981bdc88a807843017c200ff1c144668ce0c92bed8ef7541d56c93201b68da91050d99381b1402fd35404658c1b740777a2db19cf37445eea5f97446268f7ddf9a4f2f96cdd7aa3eac4dc77b86db3f4ff6d0d7ef72672c29599ad5f397ad7b39e957148fbc
+Entropy.6 = 88d205700d53519ad46b96770d1a51065ed09b53f26e9a9d
+Nonce.6 = 387b6d04db024589810ee397
+AdditionalInputA.6 = d5da7ae77a256bccb04220c88049feb923a3d8af00097670
+EntropyPredictionResistanceA.6 = 7f56988c959bf49e0563bfce16e07c16b9ef89b374f777f2
+AdditionalInputB.6 = 06d6dfb466621768105ce8d7374580c453ec37c8ee4aa9d4
+EntropyPredictionResistanceB.6 = 41308285a73f1f7c359e63243ee97509af02a0ba3868250a
+Output.6 = 363055e07232fa08e4e36a7ee7f9367ee4873ef19de7f8c34661cbe060dbba3bfcadf43702787416df00f6bffdf5a024f3fe7cb280d93f590375e61c73fac95a6fa97e4389d1796bf8aa16cb00f3a4999ce914243f96b8231fd52d32dba99b61e95348adcfcbaaad505cfc49da71e752
+Entropy.7 = 43d8799a4a21338fad23a00dbd4df528111af0f3af8f7069
+Nonce.7 = 5eaf308bd7c8a649924504d0
+AdditionalInputA.7 = aa176f266f5eca467f2120623eae53a4702d20eaf8274f54
+EntropyPredictionResistanceA.7 = 6f8de078e263565348ea1d4ac724818a5ae26e6e0481d902
+AdditionalInputB.7 = 7197677eaca72d33b342cd584004d65f0d9ab1b9902ff11b
+EntropyPredictionResistanceB.7 = 2eef01f5b7f9fadc4e58c5f0e09f98b3f26a40b903c253d7
+Output.7 = cc4d036286ed9023c266a53edf8a1bc0d119e8ac25cfbdbb87265bc7550000c2fc0aadc11a043f8b2d0296d48f0fa4b6ab4ef6e8df02778445f6afa1fc1d0124d30e861e008907a9c39a15044cc86852305e0e03071f8e59979f9be51a69fc8f513b2ba67e66085bb7747a6a1f2f3a21
+Entropy.8 = 5ea195a250a3fb3cc30098aae5a57a9cceaf09cad27821c2
+Nonce.8 = f2446983ae377cb3569e0aa1
+AdditionalInputA.8 = 0805dbd7da0a114f01bda7dfcb90fee8436bab3bd305d596
+EntropyPredictionResistanceA.8 = ebe7e0ab162c1cad9f7ce6bd48f5092738bdc23b21ea6ea3
+AdditionalInputB.8 = 48a686e598bf6c4ad6742bceb46a2396d38d50aec0eebdb0
+EntropyPredictionResistanceB.8 = 8a7d0202157e46dc0a73291a9cf0c28a8c1767d40214ea52
+Output.8 = c97a699ed50fed6f55386cb353193f8f94a7df20df7bb29ce2888f38a50369e106bf3c2ada67a424e7cc7068c1a4ec4c0155b6850ee93e311a0a3d380839072df18db15819bce5bb315c59514d8d925fe5bba1a507e90df921d0b6fa77ca28f31235ebf93fba6a2a294f147036b9da09
+Entropy.9 = 1947a0334f581703802a789257cc657e0d96b5e8230ca904
+Nonce.9 = 59289dd6b8db913fc1b54bc0
+AdditionalInputA.9 = 7da3d2cf4ab99eae4ff91890213f5e6feb8ae876cd1dbee6
+EntropyPredictionResistanceA.9 = 2db470aa48c5302fedc197e2bc8050e3b97920c13903cb53
+AdditionalInputB.9 = a02dea929e038967e9706ca62ac9d97bc2384c68f4d352c7
+EntropyPredictionResistanceB.9 = ea64c3e96318766a7cac615731f89c8a7541939515de4a3f
+Output.9 = 54a22a944fc2494c7323b6cf7c3aa0c390c7f0115b366473f41835865d7815a3081028d5c0ced52861a1882053ea9b36a3d91028171af63ba969f894b4a250b2dd05fd4c86dce2370c0e5a3aa814d573f71e38e5319d9708effc68874b8d7f3d492274187cc80ce55c9b39a17ba0be25
+Entropy.10 = c2ae006c066f1acdd0647af1150dee1cfacdae78ded04170
+Nonce.10 = 8c28bf54b272f0c7071b1955
+AdditionalInputA.10 = 68247823ad534919a955c3f5a63ba35a46bfe9552f539315
+EntropyPredictionResistanceA.10 = 0b459029af31436337f376fbd86b16076f44c377c71ef1f5
+AdditionalInputB.10 = cb4a506250e165d35d9dae8ff9eaf37927b147ec98b71fbc
+EntropyPredictionResistanceB.10 = 62b43fc8a8ae58bb813f4581cbd12fbb69e72060cc4a9be0
+Output.10 = e64c3920c969eb439c2bb126176517b12c7b3a9bf1f76be7158d26b791dbd7f18559f056e527f7a93d27f6058b5e39316cb66f5d5751f9aa587de80d0623b9cc436c5747852b4bdd5ac478e2586138da6171b6d8b1cec8ef3468ee9f651376a02963b37d8038f02f226b7440bb739489
+Entropy.11 = c7ea16690d8228dbf1015b584e9bed4ccdef5553a178be82
+Nonce.11 = 5153de07631829a42c3b583d
+AdditionalInputA.11 = 4226dba9a263a67f4bc17fbc66f9fee3287b8979afd2a503
+EntropyPredictionResistanceA.11 = 1bd95f3fb5ed34e88d1404d040a0d36fed0b2a22c8a20cba
+AdditionalInputB.11 = 0d113ef6e6be98db56d08adbabf26ac5f73bffd440365c87
+EntropyPredictionResistanceB.11 = 98d14dfd4ec35119d4f34acb35953a7e3ca2eba2efb782a6
+Output.11 = 9d4da6a463d01cc00d8cda34ba166fa8f6f05a9889d2614dc92820badc651ddc5d363a117ee5b65e4e6b3cbc678161ca8cbac6257d606796073aa6406a927f818444bc139126be3574bfd9b3be2889c3dc2b1a7bbe65cbeb8be32d199864a9345827802fde3edbb81f14e473f3903ee4
+Entropy.12 = 30999b4732241103f12e792873a6c815aeef4d75efc4c116
+Nonce.12 = ccfb523910f489dc12ab033e
+AdditionalInputA.12 = 27f8f7d0aebb31f54a95733b7969aedc8b6e6c7e4b130130
+EntropyPredictionResistanceA.12 = 1237edbb27ad996a626fda63677bed0f35987f512ccd43d3
+AdditionalInputB.12 = 57716924a404da69d66eedc45484730f57833a44d60c65e3
+EntropyPredictionResistanceB.12 = 3a2eb19471249b59c0a32a0e55b682c90ab173069830f646
+Output.12 = 8fed61d2d14015c296671ce0caa2c5865200b77a36b355cab45430d7fc89314a7a435393c6c0d51edb13593ce4f30da00d1eb71d204d3c362aff3489e84023ce7cef61ab12d16a13e2bd3b53544ef62e32f3c4292e5e3405db60299519112dea3dd065397637814d163c32a8c970505a
+Entropy.13 = a79323a3248cc45aedf0cf99dbe55be7b1cfbca86cd81568
+Nonce.13 = 3ed5999c5f64797ee4dcad4e
+AdditionalInputA.13 = 4989454d3179957adfbd220c901a0c61743c67e2f26a050f
+EntropyPredictionResistanceA.13 = 3598729ff20c8143c77a54e31db69ef2bd89c718be013a04
+AdditionalInputB.13 = 269f25338c52c3f7c3f6baceaeea9e579074dc4780fd3290
+EntropyPredictionResistanceB.13 = 8793a54eb41ae4e5fd3e40aae925943bb7cac48da7b12095
+Output.13 = 5539d0f5d8796b3e24c9174aa46caeb615c640aec25b3a00a1ed07bbde8b7bb6d0af10969ac3e28d0a3fbb047a06b9e750f31f2011ddbf8f152d439d7f0fd0b9ef01d8edef4d4a1d5e682b860b3ad216ff2e4b79988a48defb08adfee271ed35561a3d4fda044b1dd6db29d9932daaf0
+Entropy.14 = a0d44faeb468c273134189740548f5e2855f479bd04346e2
+Nonce.14 = 0d9884e8011e17c5d8bfa271
+AdditionalInputA.14 = 4ce634a68532e93f6767d3c68c512d39aed6d95881742721
+EntropyPredictionResistanceA.14 = 0bf7cd19e4f0681b900c9a452f51c5dfef6a54d413f3763f
+AdditionalInputB.14 = ee19a759562c231ecfc777c588087e790d5e170956b11c08
+EntropyPredictionResistanceB.14 = 4a004a5c4a0ec328a0ff26ac0aca82ce35ee9064add86094
+Output.14 = ae21ee878e4664c73f22e88ec4a646c0192b5c52a7bebb7b17a94a7c4630568b81da000983bf0d1a96e96432175a214ce7bc9332bb7e99f2a81e588ee4c1120c1eb22cc6b24a386ac5a11c4d63de4f20bfc8d9e4094613730f900ad7b54498954040a1fe7b53cd2a0989b3bf8946aa1e
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 1e48129b9eb4bd5fa6fd7775f0813d3928c7d21de4d06c34
+Nonce.0 = a18e9fda78f5134ba2a264d4
+PersonalisationString.0 = 558ca5ae37effdb8cee4e5204b17bfea686c8773d97a78e3
+EntropyPredictionResistanceA.0 = 3ca0289962abb8a5f1d138d69ebdcbf68d73185d98f77745
+EntropyPredictionResistanceB.0 = 9f213f9b53769b1ebdba3841c6c05a83919ad950639e0b7e
+Output.0 = e33dcee09e13999b9ac710a8880a24eb4c745fbb1fab37b541039dbbd121e4c8049e3c4e31535fd3b9b1d97a7cfd586bbf2ecf973f03b08e379ddc1d996b71e026d62b1b0ae4ea0fe7e36cc507711df502ac7e5b3124a4c13afda69b06d7e39660b5bd13a17aa6723c4a953cca9f0e6c
+Entropy.1 = 0399f63d0a0d72d81ba1794ac6fd22f0f5a2ebcd97dcd954
+Nonce.1 = da9a04a163e75416ca11f70b
+PersonalisationString.1 = 01a8b8b2f184315c72f5e84e0972d319a231513995808201
+EntropyPredictionResistanceA.1 = 13c66b9bb7ba481f82931655b629e2472cb894de4943b170
+EntropyPredictionResistanceB.1 = 965a48cde828c1702b66ca1bf025d1079862738590450dcf
+Output.1 = 7876bf7f09ebf625da611884b818ae0da8eb1a1fb52e301056ea1bb288ac2e4fb3b9e25e6c21d67e8ee8ec5ccb1a6b98b97b495a4f6c413e5e69e72b303f949b634c73327b60ff824c7250b05253ae8514bf38e190f45c25850d6ab019a02cf60113dc69dd1f248f70c1eb7ba0cc4737
+Entropy.2 = 3026d306f7d7bb1b3574b57d4f9e7627434ed08ce95fef1d
+Nonce.2 = 207f7360f4056bbf97bb4303
+PersonalisationString.2 = 7b2cecd9d95349f67261f79d5b0507ad3cb1e0600d04397e
+EntropyPredictionResistanceA.2 = 5e79229aed4189ede2f82f955d62188ca62ca1154501ac84
+EntropyPredictionResistanceB.2 = b3a20d9fefbe83d275aa0421b6398706a9b6219ec8cb13b3
+Output.2 = 6032486676b63ba95add1b05df8347603115bde0b7a3f50984d7a79b17e63c9d82df286bfcf865198c8da0d82b0a69902df845da74015a616d83be0afca9c335ca345878931a3d1e1f76f8eb5336b314067f8ef508310e02099f92884c6184ffb590b88c30edb645b2217177ad1f87d2
+Entropy.3 = 15ddb5a3ab069be55c6053366d8c703014323c7210903e6c
+Nonce.3 = 0564e187fca7259221ee46e2
+PersonalisationString.3 = 5db91debef6c8581b8391a772ff8e3ed9513caefe0c0566c
+EntropyPredictionResistanceA.3 = 665efd32d576a1a84dbb1257ba3079c4521fa96ca4616313
+EntropyPredictionResistanceB.3 = 9f90b03a090901b4c9845a2a7e7fe505faf43dde188993bf
+Output.3 = 5b5425c88260cf49f277b1d908b91ee28bff15959051ac7603978ff58474504c2941391b9c7483bf072e7ab85d278b6a785fd21cc220ab8eb1050119cdc1becc30aa9aef16fd47c0202c29f1e5786003617173cbe028b5dea244e3603d291e33a76a27d596232d197ffb019c95c3350f
+Entropy.4 = 7cfebc16dbdf999c5b7f461ab1b8a6d23175f1f2ea8071d5
+Nonce.4 = b85cb4b5799b036e675a4970
+PersonalisationString.4 = 88840f8ab9cdc92a2590f1fc0993c2f92ce800dcd7439c0d
+EntropyPredictionResistanceA.4 = b48e59427d8ca5900621a0c07bfd016cb2affa8c4bbd6f87
+EntropyPredictionResistanceB.4 = 727f04dca980ce90a61b45a1f29daccb6169707e2b1b4aa3
+Output.4 = 0424ee04f2294eedc24230c276a42c9176eb165f2cc44a1c7efe2ca141e651d85b5e82adb84aafe5467d2f93b20204d78dcd9cd49a0cf7c0ca9e54f10e4956263e55dc277463e404ab23a44a4b05972d282e4597ed3d7254b66f5c418b4dd335b903afb83532a621365827cbf180669b
+Entropy.5 = 33316ece60991d70f56d1c88a3f2a0a031315c4e7ef2004f
+Nonce.5 = d1065ce6454d0453186dfe91
+PersonalisationString.5 = 782bff1ca1adbea1839e0ab7a47190c9a95c935b28198184
+EntropyPredictionResistanceA.5 = 2147d6e7beb6d9af18679c23d8f9e45e624cb5206909092d
+EntropyPredictionResistanceB.5 = 7223b82a7ebf1ca218f30406f1c375ed24acc599f65ae65b
+Output.5 = 3256cfbabe9d7cf7d6842bf443c0ac7e060b1c8dead004696394af6aa215f466f53bff17a4faa8d632a707e7f54b4a6964781bd1f1ca5566bbf446e4d4534698f8c362fa9488929f0d701c117465cf0e662f1ebb198e5f721f495b8dcbdf076187a115bc6deaa5e3585f3b148737c160
+Entropy.6 = 3aa752646d207cdeb97bf85fc92519d391f76e2537991a15
+Nonce.6 = 54fcdc049a2289388e0542a0
+PersonalisationString.6 = a00caa710fa9680ffbbca98d2fec1b926fc539235c7419fd
+EntropyPredictionResistanceA.6 = d7ecf5e6618fe08b568ec98e97b86bdcac4b19596fc2af0f
+EntropyPredictionResistanceB.6 = 5ef55052f331c060a4a42eba499f2778f056aa4135eb4c68
+Output.6 = 07e66de61ab968d82e41a137172c87e3d015afbcdc9d26ed40bc7f4d38a934081e8071843ef4c976720495c799e30ec55cae0afac4c46b79c9ff083bdfcf7bc95050fc9868f3e897850ffe8b8656523a9d5040578891f515a89973f9e253529228040184adec99e78f409d4a14fbb490
+Entropy.7 = f0538ecb909e6375228b32ee9e233aaa02d6a2b6d00d2398
+Nonce.7 = 375d1411742b08f16a5242ad
+PersonalisationString.7 = 8a13dc4fae688f6fe19e6cc380e86748fdb29c093ddae555
+EntropyPredictionResistanceA.7 = 19119fa4af6b32698b29d8ab323ffcb35e5665cc998ccb3c
+EntropyPredictionResistanceB.7 = 8726b668fd54e2f9c1884025a36dc0acfd035e76c88fe97b
+Output.7 = 784eaa71b1b35910a9d9cf54bf85f307875dc3d4f96a1a6a0390d97dcb08700212b81505acca3cddab0f62050c1d0aa33552c188ad093a6bdc78d2a67315ae2f2ffe8887c48bcb96574da73dc53ed19f99ef04e71325ce0a33a9171d5edd92263f209a900392f422f65f3602f3b8fe15
+Entropy.8 = 93f8cfe95a001fe98ea20f788ffb53f648cb98fc7258f797
+Nonce.8 = cfe234bb251052f1810a13a6
+PersonalisationString.8 = 675a5f574af50f19248cb4a7b521380723dff96fd0cca845
+EntropyPredictionResistanceA.8 = 4e333e5730d03d33577535c4612c1fe0b5aa09d04c779c68
+EntropyPredictionResistanceB.8 = 3dcc6c14bed5399cf3c6f09faba1a88b1788570cc4a554e1
+Output.8 = e699dde447fa3940b8ca2b2841d15ad59f53d5292ba1b6fdf3fb783d2a3ed5718c149a5158a2e24f0f7e65d1fc7a9b26e15d83b090004a3666160ad4aa5f3d3fe7e19ae71cacadd5eaeecff3a07be6d4e173cf6c5445da96bf40ba6b33665a08d8592b5dc1853d460f1ca3d89725416e
+Entropy.9 = 77bb64d997669b65002396b5412010c5262a2a9af7d93bd6
+Nonce.9 = fde6b839b5b3c6621c4df859
+PersonalisationString.9 = 9af5859a12dca9599eb67ed63eec9732c5e6b4c92c72c9c6
+EntropyPredictionResistanceA.9 = 4b62ea500b4b84c6e35fd3359a824fc4662b2d39ba0a72de
+EntropyPredictionResistanceB.9 = 717fcb21be89c8bccdf313d08cc2adc9d31455e7a57f26cf
+Output.9 = 861e80dbc170cea58b832f66fffe09c5f326eef60ddcc89ef26809561ae26e277c49e860a853f7f1fb3a0ea67c1c64ebb34cd7a0b8878b5a3abe8ce24ed468abd63bae1cccdce10706908f2e42f405b2c0e85e64a2ba91803d4a0c7b3db8aedd410d87a86200059caac266ae3151873e
+Entropy.10 = 2bd8a920e8bc5aea9937695ffb58cff000e0d616595078fb
+Nonce.10 = 5f7987c047a18cd41a162c6a
+PersonalisationString.10 = 1e3ce44de3fb32acc33be1034924e22306574860014189b1
+EntropyPredictionResistanceA.10 = 05139a439b65e271d3b7bc4d468b2be617070d88133a93e5
+EntropyPredictionResistanceB.10 = 6240fb36819636450f405c73333824eb5426818852e1905d
+Output.10 = bde0709b30a1dc94452b3e2991a067b92537e93681ddfb8241a94438bb504e9aaec5b7345bdce863de08765d9ed5f57b803e4f1d3cbd93efdd56ba0d0bb471967c6de524211de78715e8da1c09685131e4d743a91f6ffb6d51711c62fd1badc4dff34ee6ce70bf9f3ac11d9a4572006b
+Entropy.11 = acaf781ec5337c5875c4253d0d7b77829624f053608b947b
+Nonce.11 = c9aa7f0e0f9558e8caf8fd70
+PersonalisationString.11 = e281c7b4f83253da3791eebc38d8265456b0de5c4e05f975
+EntropyPredictionResistanceA.11 = 5d8bfc8efd3cb22664815fcf82154ccb6761d985a38e6527
+EntropyPredictionResistanceB.11 = 5a7623c381f14fbfd120d696fca0678ac3872aa3d0577b98
+Output.11 = 4fdd2a953707d285c5a1f86bca59a65cdd260e3d4469ceddc031420669e1ab3b3a676b02b100d0750772aaf2fcc926e9c8ad30a67188d238e685f5da1df9ce479900916f97fdbffbc90f03f826d68b7faebf95e07e81e69457c834ffc5b6c0eb3d5e993f394c4510e7ad1f9ed8d95535
+Entropy.12 = b9ab74f19152f14edd2bf3da977526189d33c241a0fd03a5
+Nonce.12 = 753ed36c56045b869dbcac7b
+PersonalisationString.12 = f5beceb54aa709c3a1cf8b137b762ab5f17e66375cfe6558
+EntropyPredictionResistanceA.12 = 61a608dc366ad90799a879f80ff122052aca0ae46d7fe1ea
+EntropyPredictionResistanceB.12 = c61828b7ab70104114692cc5c3b174859cf948691b33475a
+Output.12 = 757db12ea09bdea3455ced7abb37e7dcc20e6d31c0a9b432a3d505718f84f282babae10b25323696aba15014b649c1e2e5db599ea36e213f33974ba231a9d6a94f39a03acf3623d6e710636c60026f3582416151c23464afbad84dca53078e4ba3a972914a2a7a9fe32d8d983ce06b20
+Entropy.13 = c46006ec8125b7deb3080bd0c6c012fb3e61d8582789cbae
+Nonce.13 = a1ff853e07c7c65f0a67580a
+PersonalisationString.13 = 43c36e19634e32b7008c1b8dd2f048c94457c3dfd0b76ee3
+EntropyPredictionResistanceA.13 = 38cd2662b1a94283eb9d0fb13b7177d38c9d17bc4e66253d
+EntropyPredictionResistanceB.13 = a4ac29e38635945fcf3e2273ceabf0a62deacd4edc3e8775
+Output.13 = a0d86b6e727f8d88fc9037a2d0e73a2baa93aaec7ab1e998e03cf259153d6e2ef221e0fcd221448de7272ef5908f8fc044468f569d41e8f3534031c7164529bb0bf19485cdd223fd32ac88353cb609faa2808ad434bcf1a9117f86b23dab02c07913bd9069663d1331bb1265c0278a33
+Entropy.14 = 52fca8d6e744308a34f0cb282f65a302906d77e59f085991
+Nonce.14 = 894e98ad2c1e5e033ac721ea
+PersonalisationString.14 = b83a5fe6111300ffc1790437e1c2708345c948a6494d9658
+EntropyPredictionResistanceA.14 = 4f0d9e7c269ab360dbdf47e9ea7d655c204dce8008245101
+EntropyPredictionResistanceB.14 = 8290ade448d2d83445b96ac682366659b228f952faa1f9a3
+Output.14 = 0d6bd0196ae2b3af4a750e4ea529b353979b30ab1bd05e96bf3c6f0c40b527ad07d90db5a1f392fef1d33bac5cc2a47cf4d9f20b8388a922d869f073e65ce6340cf30d45645a03a951dadbe81cffdcd145a32519658d0efe9f28175871b45cd6ca16e4efbd37802a1b88682819e5800a
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = db894f4f3771b21d0cce44d72f71a626c0de4b579c1e7d62
+Nonce.0 = 437596dee2e9721ccdc2f57e
+PersonalisationString.0 = 74c189761c986de646decab9494ef0ea19a4dad57e0b871a
+AdditionalInputA.0 = 1cdf3a23969e99cc353b23b753c9d74c05605576c74dcb7d
+EntropyPredictionResistanceA.0 = 602b459b4bf61efd8c1fefbf904c3f4414789cd9786382ec
+AdditionalInputB.0 = 28ea3150d4e2099b2b0b21b58757319c4f6cb60870c9784c
+EntropyPredictionResistanceB.0 = 1582da0de13712d1ef4a3d98ed123ad277138df89f753be2
+Output.0 = 188665daa26ac92bcac35690fb8d28b08e066131dd53806b7c3ce685f5e148043e5cd262845566389e3a19fb324d83d85412d83f9034d93e47e1ceda429ca80a376ce82d80b1dcf60986b4e92eea46806048a768c6c0ef64f1155b7c3e6cfd08288163a5d09e4941481daceae6a67810
+Entropy.1 = 10e7d867d72c82aea197092481346627fe393a6faed7fae3
+Nonce.1 = deeb956a6acb6c4d9f84f402
+PersonalisationString.1 = 054c837bc4754b3a713835a231c9fb4562e1ef626757c9d4
+AdditionalInputA.1 = 09a5c818672266096c0258794bac5452b8b60c9475bc206b
+EntropyPredictionResistanceA.1 = 2a241a8efeeda8162fd800314ed69700ecf1ea39ebe90533
+AdditionalInputB.1 = 22395f20e1b2018bae6606e8d2f6fb5fab5394439573c071
+EntropyPredictionResistanceB.1 = dbac04372b4dbb6b66dffba340f8fc14c0da7844fb75a344
+Output.1 = b01c458eade36dad680835ad4d93fe91e927aee81098dac2844b1092f37df63df97ef839b302e2b2942030a18a168f5ecf32fae0efa9ed525a867a76ca2df2aad2fbd28a2ee1fe216e5ae42700f76cb8879efe382074274442543d4e0268b08dd364df21b009c211fda427cd514b203b
+Entropy.2 = 09761ccc22334b1ef29fbe2cebed2fc0ef9ca0087691b32a
+Nonce.2 = 80fb4a7ac73d32b9155dc42d
+PersonalisationString.2 = aa812fe062ff2af636ba6816567dc3bab46a0bf569bc121f
+AdditionalInputA.2 = c74067d36dcd8ed11d8b073fe76e7ba3928f95541d73bc83
+EntropyPredictionResistanceA.2 = 74b68dbe86b37987323d0f6ea09f48c676eeb3d9f9465b87
+AdditionalInputB.2 = 353ca8ec6f4d1a15791c515a03faa4ad0f856a1dfde3c059
+EntropyPredictionResistanceB.2 = c06bd5efc409d42540202ab2ffb0ec74af517039e1fcf810
+Output.2 = 7339900be874436c1c41004f1db58ed04a2556d8aac10bc21401430e42f37c0e85847228e675ccddc68a232695808fe36d2744ce58f394494d57e92b3c48ee7cba26538979fa2c3fe5c4ea2f1ec3687a64b5e340ad3cfe71e580684188891551ddf2bed1ad56a2493a6e2f39c8c10a5a
+Entropy.3 = 2fe43b1bd7660db8ec0c0c66235093867022cdabd1434de1
+Nonce.3 = 8e3c2a528a8ec9a35d155f3c
+PersonalisationString.3 = ac38d42abbe6fdc573bf7880794a929caec5b13c6b52ab5e
+AdditionalInputA.3 = 57a65a31938f34d656bbe6bcb37d2783439be624c36dcf7d
+EntropyPredictionResistanceA.3 = b1b15d2314361c4e11f278ddb5806c2ad5b7f29642b46e32
+AdditionalInputB.3 = 381658bd8ab76c744c0fc90f7fc69c5d6b62ab9ac4945976
+EntropyPredictionResistanceB.3 = a8c75f0b0cbcc976e70bf4ea4151ffd59a921efe1fd854c0
+Output.3 = 64ede13aed16b7dd89ab166a62422a00a74fcf9db1a1da6e6d759eee91864e668bf67008c8cdbb049105d0e5c0e42ff95072f262c15fa6d213b7d1d89b18b04344e82389841596bc50b9eefaef86745bff4fe7fb2426e398f44ad334323b2fdf4b6878b28ae9b89e85146ed0a8cf87a9
+Entropy.4 = cf9e5a03ec3e1d051df2c0e2380e56a8b100102c5b7df376
+Nonce.4 = fc3298ac678ecf26ac395d3e
+PersonalisationString.4 = 7dd16cf6e3cf9b7b5e0b69b68f92448dcba2d2beed5d1b03
+AdditionalInputA.4 = f0758fcba5c96a53d1c08e20fa28dd5b8b68410a257835aa
+EntropyPredictionResistanceA.4 = 224526ea8d10fa968775391a92efba234ab72cc26a8c6cf8
+AdditionalInputB.4 = 9ad60275ba6dfe65bf9cf4c69a7d7f46a6fafb8b2bafa7ba
+EntropyPredictionResistanceB.4 = 4e1887f96b472578f7329dd93d4b414a4c5f7fa2b6af231c
+Output.4 = 8e39902dd0d5871ddf552f0ad78a3aec34e7ddb3b4e5e66dc9aa87852b550b91e24431aded1c5b9b99ab4db7415fbd4a68f9f30c16f84cbd0986dccaf13e0b1b1908c1841fd8eb25547ee2135569221a2b74ae46e5d6c943bc59001ef7ce2f4e34a6c10182a1ee821e6ab888ac238fec
+Entropy.5 = 2bec2683e91909038d8c69d0529f854d0d6b41b05e68a709
+Nonce.5 = 450b6454d0643b8b8690c5d5
+PersonalisationString.5 = bb9780179b98ea0c4dd8880fe5b617eb1f89af6b12a9897c
+AdditionalInputA.5 = b47574bece75ae030c767722a11554d44e570143fa85ce3d
+EntropyPredictionResistanceA.5 = d72fda118647b40a1b5672ce5a01a15b7501991b1fa17689
+AdditionalInputB.5 = 6ab7e8ab35dc7f14aba5a517343fac64f12af16c1d231fff
+EntropyPredictionResistanceB.5 = d604e009256e0dfe2f8ac486271290ac3c59545e09facb05
+Output.5 = f1c7f5d5a421c8292f4dcefbff3367c48e25ceef97ea486b41d46dd959a8e24817f947c17a5dc5f6027ec55c688f597347a22077b9c04bbe141ec945ea58764974c2229af8e27b8a1aca7b69c4f3a0563c5a33e979f21309ec0041041aada24841eb1c9ed741076228c9a6a4cb9769a6
+Entropy.6 = 1d613aca612a1026ea34b13afd10757c3c20c9ffae3ff0db
+Nonce.6 = f8b06644d7ca29ea79d9b7ae
+PersonalisationString.6 = f576729e8f6e90e1984b0d18bfede95491d6fa33fdae263e
+AdditionalInputA.6 = b74fd5b22f94606eaaf6826810ffd79230ad7852ddcdbfdf
+EntropyPredictionResistanceA.6 = 05f6c16535c2f2bc6ebfd2bb048d739255fe90a045ddbfe5
+AdditionalInputB.6 = a157ccb0321e2606f86f0265fbb4b0bb0d30c88524344590
+EntropyPredictionResistanceB.6 = 66b78f0341fb1e3e5e7426ea26837d9309cd290ae1e44dbb
+Output.6 = b28bf9481a32faff5ca493edf3235f31730359d88b3dfcd1e551fdb22d6e13137f5b0042c47017ee9457d1451b638194a7cb49154be03ee4c21f55708bd0ac27d9cbbc5862cf35292f2c65218333f833962b31b4a95239546e3f2fff9e54de670c6f875606848187bf958eb0224b59c3
+Entropy.7 = dc30d66078fc2e8f5f53f1341629042450c7669eb25943fa
+Nonce.7 = 524f94dfb7af563bcd430627
+PersonalisationString.7 = 19d9b0101760b2e32dc57fe963385b5f0e7a9cfb2e9750d3
+AdditionalInputA.7 = ad8ab97c389715fd121bcd5112df5704b3d4fbcf89f9940f
+EntropyPredictionResistanceA.7 = 998161387bd93ccd17f7553faa062a7d8972c7676aa05c6b
+AdditionalInputB.7 = 0430de39006b363d298fb6d150feee8c30617f7c918efaa8
+EntropyPredictionResistanceB.7 = 3d92e47e3410b31def0ac128f4bbc5c72eb7bf77bcd8815b
+Output.7 = 7d2b39b57f9289282adecbc821b23c4e6889d06c7e9641e789ff683c12f384060f8b626c99fe307b05eb3efa0aa595a6ff1705886ed51ff448bf1d96e60b0b330ad436eb6990421bd2f9888151f514cc626f7329d3de73f9b1f469ae1278b705631d7b23a55af08cfa5c824a712bccff
+Entropy.8 = 179d44801bc61224bf8320989f9c87d457f23da6b9c9a9d4
+Nonce.8 = 736c5a5360ce8784e195e7f6
+PersonalisationString.8 = 3c39e0333259549ef8b37618e9b0ea6399c96b0cbe47405d
+AdditionalInputA.8 = 1797199a3844cafc465b775321d5c777c5c1af2bfb6ec54e
+EntropyPredictionResistanceA.8 = a8f94fac582982795d7062a109514b3ceef326a80ca82744
+AdditionalInputB.8 = 9154eb23e2a40166c0edec90d0b533b0a435c18d673182ca
+EntropyPredictionResistanceB.8 = 00c626362b912e616eff8f5d3cfb73ad9ecf3fa05a2ea0e2
+Output.8 = 84fbdecd5d38a38e6c8fc61761b7ecf00e31fa123c376cc267289b945c12879c9e244944eeb9e707f213e0346b750f28b265688054ad3b38643186a95b1c71d23c04ed365a72829d9fa97336d230dcfe28073b6007cadbc37bda83cf73aac8f6f1198de5c9239edc32573d0735e0ccd4
+Entropy.9 = 2421617d871fc4ce0394a25f8da533da3c0ef0b5fd125406
+Nonce.9 = 414ea0a9ac342bbb5766db4d
+PersonalisationString.9 = 002efe8e782c09031ee28949be0c75d4c36c2e0a9dce004e
+AdditionalInputA.9 = 782c0170c9f1bca1e6afb728d42dec7fbd6e78e8638682e3
+EntropyPredictionResistanceA.9 = e8802d7d2788557fc934fbcf5e5bb41c32c1833960e889be
+AdditionalInputB.9 = 0133cb72b925bb516466e8615bf1fbb92e8f1ee9ae5d1cd7
+EntropyPredictionResistanceB.9 = 16a6f75c124c74f507044d4465557fd2079355090620dedb
+Output.9 = abce5294f35d751fa5a54dfba7e80210fe0ed089cff899ec546bbea9767d08eff11f6f440205abd14eabd7a9baf29fd864d0a58f158837c7273635e616f8ca88513c2a0cdddcda2692338b179a592554fb7da024e8a4b4c48f52daa1b76795893edf8eb7304ffd8f597e7da462b818ff
+Entropy.10 = c75064a7244beb615aed882b7c8b0e2c210db94be51131b1
+Nonce.10 = eb30fa1634b214a86c3e1441
+PersonalisationString.10 = 14defef15a672e33bbf6905a3caeab95cba5e6f2234228cd
+AdditionalInputA.10 = b089299ffe44879029c3dbb30f69053d89eaeaa8ac887ddf
+EntropyPredictionResistanceA.10 = a73f14700650df0d56553d9a8d9d13f4939215c07e4e6aad
+AdditionalInputB.10 = c3edfd41565349deadabe2d04938d8e72937d73f6e2b2ca4
+EntropyPredictionResistanceB.10 = b66a2f7b65060222a255943cd368a89767f9f12bf4dd647d
+Output.10 = 68aa06b86c86d7aa7b51edff50c2242eba6e0cec292c547585e4b976940bb1c087d3ca0530f92ec459f42f2458851e204dda32ccb2e30214c52322e78536daa3d1805313d8a1508b52e2e1feea484881e76a3e7e356182f82f91e67d70561b74e7fdc24a67e2f3a9c8551f87b992a3eb
+Entropy.11 = e2b3c12e5e57df70f53e53436a02d8691d949c166b71eae2
+Nonce.11 = 55f88d29be7da26b9175a758
+PersonalisationString.11 = 3fcedefe6f3d68ad4f8f28036ed989edb8bd93870ee12b5f
+AdditionalInputA.11 = 280c319692f9a423bd536becd7d287f250868a756a90d51d
+EntropyPredictionResistanceA.11 = 319a41c29493d11d483c5d285cdc47787389f21f5cd14f13
+AdditionalInputB.11 = 814fdd61401e44dd1ccf44e5f92e7253fd1a71773aff9283
+EntropyPredictionResistanceB.11 = 3e2fb1648d45dc1ef591619c60bcb0829db40d238ca5899b
+Output.11 = 0fce1a7eaec81ea1269bb88b16b716fbf1e23805d6c176dd32db09f98fbe0b30ecf165d808b83577a535698d2b33dcedad4ea75bf279692fec95e82a16a9ac18de4afc870d8149bfdb3dadd25123d775bbf26222479dffeccc94a0417f366708b1aa7ed3a9f533e7262a131d9263f7de
+Entropy.12 = 9b432d9b0456e141ad4f83cf7c0c88c956f58976b0a8d564
+Nonce.12 = 1b037e59f42c3aa44c713392
+PersonalisationString.12 = 86d4678ee6b85d53b4658542b035fe30be32b90217cbbe4d
+AdditionalInputA.12 = dd523113c6c520ea23d2cde90fb39af24360586e7ac248cd
+EntropyPredictionResistanceA.12 = 4635eddc1082fafd97fa2f418169637699d05b3e1ce98b55
+AdditionalInputB.12 = 114357a470f08accedbc1855f60fc18c776524baad64c3f9
+EntropyPredictionResistanceB.12 = 833522ef99b1b9e4a20551b5e924f3dda1269b3e7afbeed9
+Output.12 = 79507125130fa4d761980b169b9cc71ee5f259cf4d17dd483021f381366f70f3ff1a8e97dcb03f4637294f780fbf71a8404e197733e1884213d79224e30fa57ea19cbfce50319ff3e762adf2220743a8d4cce2035d8c91a0d836b6986a6cb58bc6b626280495873d354a2884b812f12b
+Entropy.13 = 059251e0a1aa88982bee6b237fe25ebcc97cdbce614bcc09
+Nonce.13 = a009c7a416aada09b4ee0c61
+PersonalisationString.13 = f5a9ac1308bf51f921d1ae8d94a393e87af50b2e27d66a01
+AdditionalInputA.13 = ec8a78a2fb55463410fba9770c443086ef5abb85d478c524
+EntropyPredictionResistanceA.13 = 530f620d2a5dd777974f04b6fdb735bcf7a1573f64c84fe9
+AdditionalInputB.13 = da70d19a32066a1241d522fbf2508469164ab6d6a7551bb3
+EntropyPredictionResistanceB.13 = 269b2061553e029c56661006b6cf5d499193d4082fa2ae36
+Output.13 = 7ecda369b68a5b556652fbd832a897f1a9abf2953b3208b5cf8bdf998974194097a32c640623347c3115445330bd766caf33cf205e62b0f22477f5d13b5c63b71b5a715e91a7a47b7f7d0f4c52f70e77f94233d723c091316dbcaec171fbb2f5e36821ac30335895003d534cd51ffb81
+Entropy.14 = a8101c3f6ebc6734267a4bd44192a1085fd8c13d18d7c51f
+Nonce.14 = 2977851c4add7cf0a5d0b049
+PersonalisationString.14 = 506c344684f442d6689a683d3e18bb5d2e4a8574dba72cec
+AdditionalInputA.14 = f2b4a8e53a7fa4aa2fe478c9c3a81fe4164409efbfa775df
+EntropyPredictionResistanceA.14 = 121e141eee7ac0f319e98396c54f5f7abd78aba0456c69f9
+AdditionalInputB.14 = 4e29e32346671af3b726d7030ccf470f72ca369687b489dc
+EntropyPredictionResistanceB.14 = 21d5eebf3f54780f046fe2cffb2cc9b52eed850d1b44d675
+Output.14 = abc8ffaebfda52cf3a9bc037b965f9e97ba7aafbe1575efe8fa7182229d58a2d1282776225af0ea87dd79de7b210f654388c718f8dfe22aedbb4cfe92a964664904b960f2577f43f6c48783a8423788de7aa693ed859c8269e3c8b8b59eca1659c0473aae8b0a444d4aaff23991709cb
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = b21afae7675dd85026018a49a523801e51e788046bfe54cf
+Nonce.0 = 7cf6957b0777550a98ef4d67
+EntropyPredictionResistanceA.0 = 05ae6ce2107688e304caf550fe846d3a787bbe4d184b68bf
+EntropyPredictionResistanceB.0 = b0aeafccb151c961b0e07293f3bb353b2f4b8fb72ac6bce0
+Output.0 = e84a38f28152db1bf660f199781b0b4c446c8c86ea3ab9aa1f5f460dc9f9b0693780394482823ac5e489b5709603ed258dd5444e4733fc0862304b724d1e3bd2ebe14ead9d842ec7b3be71ee58beb209947de02f88147c975a61127aed11d58723ae8725b1ddb51452a01dd7249b2617
+Entropy.1 = 5d75a4e8b1e677318c00525f72c85be1c86350e38407a837
+Nonce.1 = d849d23b4697c9296ba1f755
+EntropyPredictionResistanceA.1 = f669754d15e4a8b3545b88d0b474736db53fa3d693b26291
+EntropyPredictionResistanceB.1 = d992ca1e6ee3bdd1fb0f14e2dc53de634b97984088c3b67c
+Output.1 = 4643e61de5096741189a0c07f67f2cf4f14f01bbe7f5dd7fce295d392098e75127790946d4d9909d45ed7a806f0eb8d74cc9f118e65a37d3bd8ad4929838cc00d3b6baf277e0d655a91d5b01e2cd798e9699194611c8e294aeffe01af0c9a9983a727ba988fab819c26deca65cd39dbc
+Entropy.2 = 0d3c943d3f6fe6a6c1fa88c9805faa4a7d33414cfd6ac3ab
+Nonce.2 = 4cd027faa05ff6cbf2e926bb
+EntropyPredictionResistanceA.2 = a17b6cf809664003d269fb42b7332bf6be6e41473c4a8ef6
+EntropyPredictionResistanceB.2 = 98f9c0e064b481db2e3df4afb0eb46e53da9a2506c54444c
+Output.2 = f06cf3397931c637fb654d31416b9d8767b5cafdab65be0f0fa3100a5ca3597e83556b6eee8c006de89d199ef540b1ebe91d72fe78e36cfa8b58e32ee0bf0aae83c5e525a466db6558067041caf750c701bd786cc91f427dafa1be97946cdc7e7bfa59ec82953652417ff6dcf82a505e
+Entropy.3 = cbde03a2b47d1c9feae3404162d4dd7ad5dbbff76cdf7f17
+Nonce.3 = 646f39da8f5083f45ca936a5
+EntropyPredictionResistanceA.3 = ae65d999af650d9500d47fc6178ea7532b69ac5f6f7c4e9d
+EntropyPredictionResistanceB.3 = 3dde3efbe9c6832a4c52a7b8d6b977fa501c33d3c8380686
+Output.3 = b708e85286e460efa2cbf3be68b84cac6561d2d068ee4357fd94202ddf6e896e49b30a305531c6a77c067310fb4a6a39919a1cc0c9651526c2f39b9b8d8308bf4f3dae834d5b974d5488fb2b50938398b501c71e39450d566062696c610dc35392bb54e46868a05f7792a4c22d9f0685
+Entropy.4 = 7e3109f4d6e4d87deecdd9884f4a2e66e3287cd29c1e3eb6
+Nonce.4 = be718a43225ef208bac5dead
+EntropyPredictionResistanceA.4 = b700dc039a2889116440fb29a3fae2d9e9d1b1b141811ec0
+EntropyPredictionResistanceB.4 = 661c0beb6d61098267285606926fe2e6ae110f00787819cd
+Output.4 = 0232209c69d98cc0aae4aaeb62e5a2054b05648942a111947b5037b3e3c24cbae8aa776dfc421edf30147fa7bdc7727d6d2e7b2c79d767fd92631fb15c0278b693d819f04435da0542c9f08c144c8dc893bf5396973be1c661ae122ae197d0cd33baaea3431cf85207f7c04a80d9b88f
+Entropy.5 = 8a16250ee6c704a7c50251d1c1f9bb6855abcbbbdfee7122
+Nonce.5 = 439e28de289bbd4e523f62d3
+EntropyPredictionResistanceA.5 = d44a65ad5d36c53e2e362ce8c28f15140d136d26fbc3219f
+EntropyPredictionResistanceB.5 = c167e3e42d05e7c7ddac51c8f9e16635184aec44af08039d
+Output.5 = 3767ba4e8c20ff16127a23d6c8907ff3422b0a7d0680821ec3b37705beeae02c4d45190905c085aa9bf6847499b68d9e846fc10ce5ffb73f038cf69d045b2d70cb9bfb4ae0d307870a4f43fec0176a561239bfdb66a80d440be83bc0764e8d96f86b010af5afc241a067e41fd827f5d5
+Entropy.6 = f33718bd91ba52fc3233a7e43ee16ae77bbdf1524cff8895
+Nonce.6 = ea15876ab71f47a64df68445
+EntropyPredictionResistanceA.6 = 366daf95ba5d507ba3bf8bf50f87056b6ea7bae896deb553
+EntropyPredictionResistanceB.6 = 07057a28453b808db2c09261cfaa1dd485941d086065be92
+Output.6 = 0674d3a04207d1801903f105621cc79f77fc41de8a78dd6a96d22544b4c3154c3a7635943f45b3a6d41741338221f826e7190d421ed8a67b032650e2186864bc7ee6b71a6d3641e632aa3d20d1532994144f163c00cc28d58fdffacbb0c7e3cc1d8870002cdab79dd39ebdedb8ed34d2
+Entropy.7 = a08b32387196f4da59f51f7f1c727908e31fe690fafbf89c
+Nonce.7 = 3a2a39631cff97f568bc9d1f
+EntropyPredictionResistanceA.7 = bdffd64be2f0dd3796ee614738d869013f127a97557e693b
+EntropyPredictionResistanceB.7 = 30244084c2ecdb2dc0b794e4e1f841a0b605d39e1084370e
+Output.7 = b6f8b6c54f5f673d29bef76e66a1a40b0b020275a24080d0c14f60f9a83b2a8a7acb2b0889a5a4fa73bb1d7ca42969da5ab2b9653739e05b4275822a4ef40467069f6be77cc384cf723831bd2143b7e822fdee22cdb91802c16dbb8a8f18366f0eb152e65eb02ac401da570cf778f0cc
+Entropy.8 = ab5aee26653ebe0da18f8313ec2101082786805b9e66d89e
+Nonce.8 = 31ba581db7ce64b66e222dcc
+EntropyPredictionResistanceA.8 = 2f73b4994ed82b097f7a00983feff026ce9a624f04c9df46
+EntropyPredictionResistanceB.8 = afce4bab765a3558c8e445accb230ce1db448997a616bb93
+Output.8 = 7bd3dc1f9bc2a631bb33ea4ec33f8e20e69b30e2c8090d0b675cf648a9426209f9b7e65052e471578522949b03dec863af15e8e642120e0131ddfee4625915b912d22adb91bdcce8d3e140837636130feb935d506931a4838c9c97c08652f2f14e32152e69845ccd07608bdf96bce97c
+Entropy.9 = 3a86b6627053f1f38ab1a678419cd5debafe4d9fe65193a3
+Nonce.9 = 1e24521a0e83eb725ea48499
+EntropyPredictionResistanceA.9 = 0861a604a270b105bfa08554fa73d0d4a1cc5cf5436bc143
+EntropyPredictionResistanceB.9 = 06954d4ca6e9b4d012ec4efdb4088053e482d0f2c3a4f774
+Output.9 = abf71160316ac212977735c89d86a65922b1f6fcfe1896aafc8d881e96acc8dbbf0ea3ee1a27ec6df7d6c50bfff2eb036123f948e5b1232e1f15c64066a908b212e10df083482cca9f540fbbb7c092615a241af0820342f940c016bc2cc52853690ba51a2968dfc000d5df8f0c04ffa2
+Entropy.10 = 8f8ecff2ea696934b8c5247d430f3cc5593e8557c56fc053
+Nonce.10 = 1f4d00603ce5d90ccac65f4c
+EntropyPredictionResistanceA.10 = 30dc50040b259361c70bd76ad703f481d7bfa63dbf0442c8
+EntropyPredictionResistanceB.10 = c3854f6e2cbbdf7c2910916dc554f8474ba0025bf38d64e7
+Output.10 = 0bd4e7987dde83db31a85b4dafd35d625323fedcc4bd5cd2f55d8bde90a2ab600c4afb85425da7682b12f581557d7c6f4d0841f222c39b6e2d9d909b1ca123644d97e271614b2e9e44c9792ce8769b0bd5c6eb55cf1bf9749f874319ebcf39ee0a7116bb601afff6c25dc918029e8d5c
+Entropy.11 = 4e147c8766cee9599f1ffe3d30480fd9b8958984fed8aa91
+Nonce.11 = de51fb44c4b1c6335bafa244
+EntropyPredictionResistanceA.11 = 2f19f1cdbaf02890f8a841efbdc2106d69c7eea44d81c80a
+EntropyPredictionResistanceB.11 = 365ab4974618898a0ff4e0ecd64574f88d1a4234850a2e6f
+Output.11 = 9e3f578e1022f756278b3195be7f2dd3a512e57aa991dfdbf07886885a99fb18ca3c592ac11eb610815231df4d59306ed7ab617b7768b62e2b4d481bad014e5f69c9a753c248e8313f0d349af6d2d59172c677da1bfe8c9a3d71b6dda1dfdcfe7ad7cef81bdfd2f128c61abf1134585f
+Entropy.12 = ef3b08641f0f8a1784030b39a222629ae71442aa13c8e824
+Nonce.12 = 58648405986e888f265f1d88
+EntropyPredictionResistanceA.12 = cd77e5e174906c5a3d64b3d334cab1eb0f7879b311099195
+EntropyPredictionResistanceB.12 = 3294398f1525b5dd2fb0287758fa47cd360720d4b2703135
+Output.12 = 2c9dd2f329684bf3648ec798e80acddab1486d1d190562970fedf8fce7cf4265a3fb9075cfb2b47a9cb9570e72b100b7d2d69c2d388846b364da39638f8dfe696b2077618dc0dbbe8924440fe95a5de81422eec8ac923ad79850dc03f1c8af8ce41bb5eee1185d0aa7a4541c4b91d660
+Entropy.13 = ca55eb1e93061dc8fa5bd92f27a0a462639b99a78bfa92ff
+Nonce.13 = d16857c187c259fbf33fa306
+EntropyPredictionResistanceA.13 = f3dbcca269499eb49f0df450d8d7d5ae506a5334007e1d0e
+EntropyPredictionResistanceB.13 = c8c8d3dd189ddcd42ed2bb1b0e343035cd18f4f1b4cbeae1
+Output.13 = cc4351033ffc5646c64253b794d50a65ba32a2aa9d059a055f86220d05d7463ed81de7cfe97672da61fe5aa4bf68f752f2c90828299794d335047a5d7e8162babbee3c75bf4839c35c9af9f945e048550245d69b9ba4ecb24bf388230d6731197f39a3371211383bbf3547db653c470c
+Entropy.14 = 5017c9e096f065f1e4e0391b64f6b43c101fdc20528843cb
+Nonce.14 = a1ba707f3fd6baccb48ebc46
+EntropyPredictionResistanceA.14 = 02496883d50bc28e037a370890edab9be1a69e003e70a785
+EntropyPredictionResistanceB.14 = db072d2518f7b6b73292f7e167bec9cf5fcbeb265c316ae5
+Output.14 = cc01e951f15bdcfe94288a0de84ce187bad281683773f1b8341efecba656d62528ba91ca864c440b085be142dc565c1b7a326dfc9ac47a84623c2cff20b6c047d2f39e3db0b02fab4c1ac82e63bcc06b032c16f6e9ddd8c60f03f5b55cc40acb3b5e2de6ae3938f0e2fe21d72134346d
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 378eb0ccc3eb9db61b10dc08235378b6f199db342d39943f
+Nonce.0 = 3265cdae3cd8b704ea2fd0f8
+AdditionalInputA.0 = 5ea05f2d80dd93dd8cf3a9df6871494d5698bdb04c6ac342
+EntropyPredictionResistanceA.0 = e789d4d0a42087fe36584593791ac38d55c5faa59a876502
+AdditionalInputB.0 = 9ed727a62dd5369a59e7a987cf540b66a4b774a26e1e8895
+EntropyPredictionResistanceB.0 = eb8eb198d59e0d58f2a15a0f1a93bf831bfaa7825016c863
+Output.0 = b26e534f660f2643df2e8a199d3ddacc0d3dddddcec877e89b132865b763c4c7e4086af6d9e8d41738c3972b8c1e2eb507ac37976c9d00010a6ecfe5cbedf5bb4459e9c1d09b522ebb6ac3d2d41e7982322162dfe9fd0059aec3e851a24ff05155401bde6af0193f6605c926ecc6b308
+Entropy.1 = e0c95084e547623d42301c71486512217a420ee71184f448
+Nonce.1 = bed5ac98f404638799d83f85
+AdditionalInputA.1 = 022f8ed03e3bb53d94ee3fdacfd3f9eb85c75817b5b0d424
+EntropyPredictionResistanceA.1 = 387479c3dbda09509f437dfcd35c17ab2fca19cec36ad6c6
+AdditionalInputB.1 = d4086fa2115dac4a15d235c03d9a2fcac333ae7d88487db3
+EntropyPredictionResistanceB.1 = 01eb3b16b4a5686a9a94a86e1bab23973f2ecbc4985cf790
+Output.1 = ae0e293ea0ba8463f3c5c7fa41a468b26b68ca3363f4c79ff87d16fda689a798c603a70bbb20b5b2ca355e86573a97f7dffc491f2231e36e063023af57f54180cc5a643236abccc0edc2de01723d8230d07dfe610ffa0a101d37c91944bafef3ececfa5be8503c663e93ed673ebe789d
+Entropy.2 = 6fb8eb15e97e99489aebe2fd8161454200a441b328a90d17
+Nonce.2 = 87358eddba1a102303650049
+AdditionalInputA.2 = 936fa2fc84f83bd4bc4630c4ec77e10ab07d969661ce8871
+EntropyPredictionResistanceA.2 = 37cb14bc5ca6b35743119eaaf1ba122ec3e12d4ef975140c
+AdditionalInputB.2 = 678d554319221b8bc7cbb0d14eccbc46d588c935dda186e2
+EntropyPredictionResistanceB.2 = adca01f5a071523546278a3d9187412423c561f83f247305
+Output.2 = 686ec3bc67cd34b97e988198cffdd2dd5068f0a9ef753cc84a8709b8645165d3ed7e46b7687d3e3073a8dd0090cf6d8b400b10d0e691fa92da97bb5034df231270ca129f531b21051a520d728cfce4b5d5a326d86413e6a5107899201c47556d9921de6c38de3bf8747f280f155c9f15
+Entropy.3 = 0c5dcb979e161fe0838c619b5c203115b7a6d8d3fbbf0f69
+Nonce.3 = cddeb951b28fba1d91bc44e5
+AdditionalInputA.3 = 2ed88eb2cb5744190ebdbfeee21a6737df3da12d4ca7d2e7
+EntropyPredictionResistanceA.3 = c89b7bfa759a82ff820a14f4a66fa2ed0a966c4e131b87cb
+AdditionalInputB.3 = b9ef5afc136cb7fa5597aec9319a34b88ca50a8bab11d3d5
+EntropyPredictionResistanceB.3 = 4e918b1a333da5e0626084ec98cda6dea167c7abcee135b5
+Output.3 = 1ae999b94cc664bfa766bb1bd5798b8bda39a1a50f92fc9326b0fcece280508d9e483309ed7533b6cce3983444355c94be86a5be829ea6bf5ceb27097c070545bb60573729b8c54043f01638f366317be07489d321cf73143a9bdf0a0fccbefd43ece007a851a6821c14ac02c4bf95af
+Entropy.4 = 56a5157e5b828105600ebf6e8dab7e39d04fd67268db8b3e
+Nonce.4 = 1e6e8f40a193da08b1e64080
+AdditionalInputA.4 = bd0e247209c36f895f4230c34665b92527f6979157fc8955
+EntropyPredictionResistanceA.4 = 7faa1c542cf70fbd5b14ca43cf9707d096f28ec5a8a420e0
+AdditionalInputB.4 = aad9715c6ebb40b577fa23159806e8f37f9fa340d4998b3a
+EntropyPredictionResistanceB.4 = 6065fbc10116c31583cbff43193e3fd9a80d2e599cb5d5dd
+Output.4 = 2923046f8e73044dfd08bb837d55cb6ec2acef89c31a2244557267bf8fccd743c48efaa9b187b6367a272f0367e16db20d5d70780c4fd0a226b29582959addb7206895a15247120e5f52733de2f306cb59c3c15bbe3edbe7a4640c6b6a5421e471276de01b81017a8d89664fdea657f6
+Entropy.5 = a560a6dcf1d9703ebf467ead6f017c8597b2de44d87310c8
+Nonce.5 = a5496dbe18c52c3fb684f8ef
+AdditionalInputA.5 = 0324300958bf91d3a6cf9316c80195a0014505a1a9cbfd34
+EntropyPredictionResistanceA.5 = 14bdbc0dc8c1b1060bf440d097ed08c90e62b01d4d4d8f4d
+AdditionalInputB.5 = 70cd58af115089d8b546f4f1a59c7e1c0994fcc44850c810
+EntropyPredictionResistanceB.5 = 9eb8d09f913ebbcc43f8f1670c3da0874d63aadfa3f7a884
+Output.5 = af3fddbbd267e9e445cb5ac060e60d856807737430bf778842e97bd18012a1d1f35af0bebc85bcddf3893db85e264f453a4ec1f894c35b1d278fbe1bc2cefc265e78a936d05a454b0664a6f293cfb1c5462a840e2efd4005000707863c99957de7314e986c1d92db303e1abe970cbea9
+Entropy.6 = 0630bd3d45dc27199b9d21c4c50616007d763a6dacd2446b
+Nonce.6 = 86da0dcae575db94c1d1dd46
+AdditionalInputA.6 = 0ff7a782baa58cbea323660dfe3ece64792bfaf4d82cf9dc
+EntropyPredictionResistanceA.6 = f04b18494be9a415cd80d44f47b645ee99cc421ce4c434a9
+AdditionalInputB.6 = 82e3e48615b580aa7f719a419927aaecc0a38bf8bf4841cd
+EntropyPredictionResistanceB.6 = b7a05ed308b71e7c4150e3470e4d888d3a592c51ff39e363
+Output.6 = fab165d53b87628e1cb923d052092312d0d0fcd1caf5f3a8f680fa387f803d66779711169787b60b9eb72aa0be0a90d4b50dafc43f3716a312dfc78fd97eebd3e0c71a2e6184d687625b629ca7b04a90cfc335ed0b4a81494843069b2de23a5a94fb1e1b4c321315f497b4b3a785fb15
+Entropy.7 = db56008ea603a04722184e8fe7b8c1bea7226c72d06e0d3a
+Nonce.7 = 1d4ead6c91b7ac4ac604e949
+AdditionalInputA.7 = f77e2e1c4ec8c40de32c63d8d743c6cec6aa0fc5667ecbcc
+EntropyPredictionResistanceA.7 = bb846588bdec29573c626d9565955918602fcd24f62e9479
+AdditionalInputB.7 = 2ab76c42e8570189bd7631889b72c0f14366805699bf6290
+EntropyPredictionResistanceB.7 = a1261b3352d77f2d7bf83dc1b5781e5bd30a0a9fcd7b6269
+Output.7 = a1aac4f1b40a0e3754980fb0b23215597060601749f584a9bde6dd2d6399241d6e855c3ad0a83608fd9e5bc6eeae3566a5ab19d16459fd4b0590764a0e5f5c0f1d28a255c34a4c8a425cab4ce3d7f4bcd58fc9edcd3cff03b68d1973ff87be5c2b87a73e91bd73ae46e8f6f3f9ee46d8
+Entropy.8 = 71a24e265ffa1ef824c06374dc0c145d444653286a251bf3
+Nonce.8 = 247d15696e53904b6ac19ae5
+AdditionalInputA.8 = 1c6ca9d26d166934c02a69fec6d3c522184327f4fd3a41ab
+EntropyPredictionResistanceA.8 = 1fb5827b2d9207896aa9b23555f306ec91c066b68cb2315b
+AdditionalInputB.8 = b8288c39391ec0f0d8a1d8b630e41847c3931838bd5d3456
+EntropyPredictionResistanceB.8 = 359de2164a74993a70e2644ebb35620e738ceb038b0fa927
+Output.8 = 92584bf7739236315ffcbcead7f9847e4cb55d9bf30c87b61c9ec6c5719e958f6ab4cab07d1040471e9c5cd029f36ac70e3961021cb79830d9cdd8a9191abe662b129d6a23296f83240e9b46fd882172f13ff2131e3f4ad815d45a804348c1a6301dae0b75ce91bb6e768f1c89cbd2be
+Entropy.9 = 3cd138e4d4aa408d4f993cc661fff496cbf5f9ec6db1d69f
+Nonce.9 = b846cf33feb34508bb7decf0
+AdditionalInputA.9 = c3373a3cf3da25e844eed3304af883b98bc590533dbd333f
+EntropyPredictionResistanceA.9 = 713bafa05725148ed4f52144ce024672efaf310572921c3a
+AdditionalInputB.9 = dc7fda9d6dca77455ad1bb6c7471f7829c5c84c89f766f2b
+EntropyPredictionResistanceB.9 = f884e3a94ac7fc6f17f34ceb31066d7fbd6f0d373bf30365
+Output.9 = 8b3fa6033f4c57e1511417a9c21c47baf7f5f642a945516a4810ac94d2065950b66f850f367fb7ba4b8f23d165d9cf675c0601ecdf9fa34b86df14ad0765e526993c5e62f9dea9730fbb1693b18b0a105ce09b3b1ec23e052e7c68a624591430f3689f14e0d3612d6a3dc5aa7be9b51e
+Entropy.10 = 262b7ad95b4221c7b6ce9ed4b637cf61809c529ebf92644d
+Nonce.10 = 41b4ab47555aadc48cbd7b31
+AdditionalInputA.10 = 1320878952b02ec687c816d9b108f2880f554ef2254164ab
+EntropyPredictionResistanceA.10 = 744d222f26df20c48b5ce66eeaa09dbcc5fef089050b6f18
+AdditionalInputB.10 = 8f6cdcec0f26e21be65529b1ae8c336a663ddeddb977901e
+EntropyPredictionResistanceB.10 = 4c33f2daa1ad84d8ebead707a177cabed0336cd3ee2261a7
+Output.10 = 2698237491fdfa81e7486f45680aa0f843eb80bde21e2b3f5fe9d842edc18e5bb50ee316f1cddbf51b70e61f2b88220ea5b2b7f16b742768e30eafa2566ae9e859c762a1a8e8c75058b9c3c72d0c60574b9acc778d7b392984a04608fe8ce4b443c54d785cba25ff07c48f06f427792b
+Entropy.11 = e2b2fd4e28c918f503d4876e013c6bfc455e73c1cac053ff
+Nonce.11 = 9187013d9040d43c83d35282
+AdditionalInputA.11 = e4cc2b7ba57da3adce12592ae1f206c1fefd3c7f2b525f18
+EntropyPredictionResistanceA.11 = 6913bb498f0fffa57efeac7ceef82ab8aa49d14d2592ad83
+AdditionalInputB.11 = 1ceff5123ac5f9971e15213ca0e209a2f4576f182f9d17c3
+EntropyPredictionResistanceB.11 = 78d861641d85fc6bf0c81880bda200436cfa6f0d7ceed4fd
+Output.11 = 32e2c6e22808142c7c577fca6ef7d0ed5feaa6e563fd96fad101a5a5c8af0efd853f11579ac30f7cfe1e926b14eb46bbaded1f49292daee7115afcb1a0828aee4795dbe36c38c5d46d81919891e2f8744864e1661f595f7dd893b1bd3279812646574e2a1f71190457a578d8736c473a
+Entropy.12 = 100119734c6bb0142715ba91429396d89f1219e89adb10c5
+Nonce.12 = 14a997bd7cb3ab4949b30a9e
+AdditionalInputA.12 = fe9fb2b7b60b9ff1a26278b2717533649ff8a60ef9f2b586
+EntropyPredictionResistanceA.12 = 23fd4f08059924708558cb8b9c6f8b3f9d95a9b1208a67e9
+AdditionalInputB.12 = 79f34f952babc3bc8549c4a8fcfb3694b898068987b776fa
+EntropyPredictionResistanceB.12 = 4b58e977d93b2ba3e14b6f80e38414022832c07eb3364987
+Output.12 = cb5ab2dfbb11cafb3c1894a54efd1a630024ca40bfba34885f364f115724deb7c8ce5a23f568daf3c6c204194f86a53a5df43f574de9b868fd98146b43ab5cd2b24ef4b814434509fc7a21e8db5e5ffa5dddd83d27159d79a40254478a5ba86d77d6de70f54568dcc68df50142b241ee
+Entropy.13 = 36e17a3f7846469473e01c24a76d6f52e117df81a0dba888
+Nonce.13 = 06b5029dd854b3e29ccb9321
+AdditionalInputA.13 = e30d537201e5dcddb906b13d282ad1f1c7a0f60332daf5da
+EntropyPredictionResistanceA.13 = a507696ec8e9f37392e82b50f976d7cb302d188581c0335c
+AdditionalInputB.13 = e2592068817444a7246f479f496e47ee39cf55c59ff7781f
+EntropyPredictionResistanceB.13 = ddb96ab3c18c01714410c5e59f011acdfe7e3b97d551f3cd
+Output.13 = bdaa98df4960c6375da3d640063a6a1ae13045be40ec6b8559e84bacf3d1bf4b5bca0e3abd6dc90428cd9f741dea7462c8235652ed043ff9a4d91e75691001277f89d97bf6a52212e4116c7be19296e8c4993c375c771deeb04c3f424da1ae206d361930470b53f25598afc89bf7ea1f
+Entropy.14 = e69982ac65ca2de135db0f4565cd96134ece1aa53a4a3474
+Nonce.14 = 9fbd9d33c01bd815ce04db72
+AdditionalInputA.14 = 9602002a462e202afdefa1a5094bd73d04ffd6abfacdf829
+EntropyPredictionResistanceA.14 = 28852da9c393cccc4161852f5cb9b7582bf0fe8e7592fa56
+AdditionalInputB.14 = cad366cc562a45f74fda0bf6fd3eafc0f3dd59c666b33881
+EntropyPredictionResistanceB.14 = acbf8dcb97c61718c9cc8adeca8873e31b794086d7b84cc3
+Output.14 = a6ddaf00876c5bf50d7a2f5b986a770685f64ef54e2273c51ec1e594378fcd08f16316d1589f1c5948f524b3fd57d40b4ad732ae06f3bfb5359e6282105bc70fdddc9d1920c5092cabcf0c8ec14642d50be19de439ffafdedf3ec9e0672eb7754814eeea09430d65ba181525c616c31d
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 2fb2587ac33f9bc563a1f33561d6ae5bae73a5811f8b868a
+Nonce.0 = 4eb7383c565e87eaaac8ef2e
+PersonalisationString.0 = 567beb6d938116705d23a519d0d7439076f375f04826af02
+EntropyPredictionResistanceA.0 = abf21de40a6e8e398ddbe21512cb98fd95d352ff98a53b2b
+EntropyPredictionResistanceB.0 = 0a2519ff6138a1da4acc19769fad1dc6ab3cea4979910bd1
+Output.0 = fb7ae6a01a680277819fe773815261cb0495cb5e9245403024c35e186a4011742e28a82e33a4cf75cfe8b9b4285ed52cab4b0b66d1351d779da61de8e9287569d6b4fd2eeae11d2d9b8f886407e070e8420c6eb8097711fc33af5eacf66b66b820f9d9db1fcd78f6458235c8a8786e24
+Entropy.1 = cfb7f4ef95e8413c2dedd9013cc510a786d6c72427668fa5
+Nonce.1 = 1e31512d4f0176b5e45d54d8
+PersonalisationString.1 = fe7cfc8059fcfea76ea0310c5158fc17ee948eea547fba21
+EntropyPredictionResistanceA.1 = 0ff3edb1766cc071f7244e3c67225b66f894b7fd787e186a
+EntropyPredictionResistanceB.1 = ea3a3e3ecb20bc53c1c17ad0e125746470cb3d54872c5221
+Output.1 = c53e6517cdef35ea79a9844ad13d24cb47c14ef596077706422e1bfb48414c05373a083ece18b20e757b04951eee892fb1035d3654cffc2ff5381a4310fd15db397f6d067c3f93bbf54d173bb086fd22f8f7b8b994b000344eb14d149b8d7956b7f2ae69349869aed400c54c3c331c16
+Entropy.2 = 1c62de9a88481eaa31d9d5a27d9870f51126849e2e3964a3
+Nonce.2 = 574664cf159b9cd327d46c35
+PersonalisationString.2 = 75000cb07790eb0dbccdcba45dab1821f541f534ca567e29
+EntropyPredictionResistanceA.2 = ef32fdcfb69ebb303ffd403e4a27886c559885d141e9a264
+EntropyPredictionResistanceB.2 = dbbab83d10b93f3e74777a16f6d386f18146d670a270fd0c
+Output.2 = 9e90a245f61e7768b93b38f2e36f574db278387c4c248cefda45004356cad479eaa1d147775afc049ae5162ac9643bba0fecb2a6b29feedd14f3cb6df63774a4ed31e5777ea0631450d94c12d2b1a9e6caa584f69fbf6421cee3a2002be8cfc78373dc5106ff1436964f9df8427cb4c8
+Entropy.3 = 55661d46bf4c80d3cdba6ea5aa3c0c244082b54faa67b0f6
+Nonce.3 = 89be9043e7a7677e171abfd4
+PersonalisationString.3 = 7b62487f40c47ee20adfdb3c655a5879b27ee938c07fb425
+EntropyPredictionResistanceA.3 = a1b581d93683588fc6641adec9fb63d008112266f904f218
+EntropyPredictionResistanceB.3 = 2d85806ad210f5a3098397509e4175d8d6a098e45de8f71f
+Output.3 = 85b6e311b5ec2f89611c9db34ebb2b30526f073158d3edad43bc274e04cf615e3e438cd966cb0b0295edc999513be6a8f679f20eb22c6d54f08fda530b09f36a7e1bb3d968b33dc98d328f3e5699d32560dbac3c38497b541f762a17f57f1961f50533a541eac86269c7435a5299521d
+Entropy.4 = 5d92c278ff0b8e8c7920a1d1fd86b832b5369e1c66f66a7d
+Nonce.4 = e24c7fcf5919ff6eee03e2ce
+PersonalisationString.4 = c00b59bb77303b93913caa7c18270fb0697cb6ab354bba0f
+EntropyPredictionResistanceA.4 = 891d24d6e541c3f6d49024b29d44ca217a38fca224842dd9
+EntropyPredictionResistanceB.4 = 399d282d359d177082575b8c6851416e7dc518ea5d3d4209
+Output.4 = 2b277bff99d3cfd77988bf9fa8ee500216e0392300eb8f6027092be6ff7b401f5d7cc7a4d541e85fe481fbf299d6775ff000383756db30660f72f95a8b0fdbd4cadeacabb5e58062536ecf3c548c391a23ad5be4561404b3d23f899d7993e996feab38b64a5f40bf9c50b9ab895cfbcd
+Entropy.5 = 24aa2bebaa9414d1c9865440fddb00d203ca2c3ef6b692f7
+Nonce.5 = cbceada5a94573cc439152c8
+PersonalisationString.5 = 9050ab37e5781bdb8b8d76d869e186ebff31b343a424c409
+EntropyPredictionResistanceA.5 = 098f57e3e79d2e002cd7f523bdec1dadea4a10ff3fef6bb1
+EntropyPredictionResistanceB.5 = ff7dec9af77713a4909a16318f2710c497869a3335a12b67
+Output.5 = 811864a4198b43edd9a139d012bfb9670e2b88e8c6e7195c70e3ec99e3be3f16d267825181d575b266d05d15c96c8b538a17577b387eeb730460d27c61d56c124f0e5e39973c94c6fd4636d4c81889b0d5a17129e1bc4ae4c72a60625d574cd55652db9e8f9bb64b824b4eb5bc666696
+Entropy.6 = adf1323dd0bf87dd5d45edea808ff6b550d98221ada6b334
+Nonce.6 = 51f7105f550f1b4dd8d987a3
+PersonalisationString.6 = 86a11a03296fe3552f1e253da0a864d2700ed2b6efd97fb0
+EntropyPredictionResistanceA.6 = 4b241029305a8c06bacf5a0b137d385242204cd1b2399432
+EntropyPredictionResistanceB.6 = a816d511c88baf33d8f74992899ef5e822fb0a8e8e53bb5a
+Output.6 = 3d386795c17539200610cafd0ffcf31a4747545de28e3c08d07c71c4108f676febf5b73a66e93ea63418de9f449c73c0785eca83d56a09304596118f3e83230bd02189f77a58c672f29a9bead86c95b22665b752c43d30fb346264cdf0bd0caec9234777b75d69d8358736957e5b25eb
+Entropy.7 = 3331a5894cefd2e5641d28e5ef14fe1fe583402fecb36b70
+Nonce.7 = 53c22d3b2d06cda848e24d2f
+PersonalisationString.7 = 38b1121aecd13e620b25d9260c261ebfebc197d60e222340
+EntropyPredictionResistanceA.7 = c01cd59f9f0cc67b851e640683a526948ad6fd5f5faa3699
+EntropyPredictionResistanceB.7 = deeb1d85af164eb5a6c4e553a2789688164f27e2ad3aaf4c
+Output.7 = 7e7a2ca380941348d918dbc4bf4334d4c5b2dcebe98bf4fa5718e4bb3e94a841583462cb27fc41c8de710ad93fb47bb44dd7f137cfc79ed54392e94779a8416b0461919f56436696ff110c4977b85529801e47b0bf9ad9da7f65d5678415809b0d28a0df273df9d3e1df786ba1b08e68
+Entropy.8 = 6ce02c07809704055bc14f48d37efb72466beaa7c945ef51
+Nonce.8 = f959d4f793aa35c19b452ffe
+PersonalisationString.8 = d38adc4ffee17698608a4d50538da9e46b69b1433d88655a
+EntropyPredictionResistanceA.8 = 012ec552c46880ec8cda872d5d790ed1b3213bca11d47a37
+EntropyPredictionResistanceB.8 = 933493827370096fd786061b555ae7e9043c7d0ec41a5acc
+Output.8 = 5b747b8c1178ab05fbef4ae910bdc9f8d64fabcf1f05eca2d441693228f6f7e31c19d3f7d8ecf57a85c337913bd9f4066ce692a36938ffd3055399d3b16851f7c65a7be66976957d29533cd7aca2f07c574c78e237c650de4c5af6873773dddf08e0670ec89b134150ffe342eb6eb4de
+Entropy.9 = 5a9561f2794b603972c55a68c2459f3591ecbf21132f66bb
+Nonce.9 = c28b1abee7f55f1aca947441
+PersonalisationString.9 = 4b882bee44a3617e891249856a33dd735994e45908606b50
+EntropyPredictionResistanceA.9 = 02e8f635bc46dce0d95115d6dfd29b822d6bb014abe56726
+EntropyPredictionResistanceB.9 = 082580565f98ac4d9e0c67243b5e0ba16b957218aea5600e
+Output.9 = d40b397927f27564aeb9e853f0713083f994317d61e81534fe936dbf155ee4e02b5a29f73b5717655c3205abac3223c8ec6c9180de23b369610d00e8633409060f3151b9b85ed7ef1a2b32944fecd34dc2729130de8cdd23b4a2caa047c310e418503146da042db37bd318692ecb7e45
+Entropy.10 = 370538f83fc3d68d375eccf2e934e2b83db4d57cafa29ad2
+Nonce.10 = 1f50b0014c97d9d416654319
+PersonalisationString.10 = 013e6bc68636174af6676eb3e5b9a96aefffb8d1d4e223bf
+EntropyPredictionResistanceA.10 = 84016eea24c10ccf14774bfac297bdc2c1dd4a6ebec6b053
+EntropyPredictionResistanceB.10 = 692a9afb7a161028c928a057336f10a94b973c52219daab4
+Output.10 = 2720ca98e4dd279a28bc15827d2f0a15d9f7483c2f0752c0f25a42ad843ca0c10ad5a9e192b9f8e996ebf3ef5fc0b7ded2120cfb3352abe29088bc439d19712aa666f0b828d4656403b5295c8db3bfb8eb99446aefd5be3a35e9d8ee95ac485f852669be1b8db1d63e4701b18aba4488
+Entropy.11 = 75a5546356a801777af76479c537ce96e9cfe72f465e776c
+Nonce.11 = c919b88735df275feadc1df8
+PersonalisationString.11 = d8eea08d38183bf2e92ad5d5d39175dada6e5d32f444d641
+EntropyPredictionResistanceA.11 = b6918b4ae0cc94775d4c3f823145a83c54b67c5c1f2146a5
+EntropyPredictionResistanceB.11 = fac529bc8b8f49ac0d3b293a861db328e4672ba6339c9a2c
+Output.11 = 8ef0ad7e4d3a22a5b244e303742bb210259542cb0ea95aaf6fd87966d5840b7679ece05991620721062bc195b156766bd7adf489cc608affe853062947e57fa649f768afbb09860ea90fa4ff74f013e9e55e524f530e7098d5ea54f7621f519e08055bcf77ab703cddb68b9f62066bdb
+Entropy.12 = b5ed000d4681ed079e128d75769f1660c6702882c2dab1c9
+Nonce.12 = f25e85f88a91a8672cb339f2
+PersonalisationString.12 = cd1f28f10b2f130c2f7c636d927fa63bf57d97461d5bdb81
+EntropyPredictionResistanceA.12 = c41f73ee2abab9b546e39efeef6286bf1fe80e25b490c091
+EntropyPredictionResistanceB.12 = f6fca353b5cc6515cccba9294dc61dac5963535c946b965d
+Output.12 = 787569aa5a26d4e0b872a129f6d9477dd10cd4736971ad392a5cb8d898faf09f8fe55ddcc0c79807064de6a13397fed01288170783c2e5d4bcd2c583d07c54d1657632c7f6fa622262d49afdbc65c20bf327e97de34d3cabe438f2368e55496be1ab70f8fd98877c74de731de831b8f9
+Entropy.13 = 4fe9f6631ce66488f8e5cad282934145cd8f75796d1745b1
+Nonce.13 = 2c9e086bff681261e50d756f
+PersonalisationString.13 = a0972c6f5c0de06704b1fbae8ffd2fe5fdc1b1c8f91958e2
+EntropyPredictionResistanceA.13 = 14e94f792bb0fcadab84bc9d634a370b8c4f8b01bec2ed41
+EntropyPredictionResistanceB.13 = 27b967e12a0d89602a36de763a77b6ca469200008c16efcc
+Output.13 = 80a5e4eab416503a02e7afece63912f87eabd9f65132c2daad291cdfaed3aff11128250fdbcefd739d27f6959309bb70712b9034df5a7030e72c03fca38157836cf3525d10ab144b4c35a79fdda14b77ed00e6b6be7eb6607d5f6d1e0fb68ab68b7bde43d59ddeb70c90942c797191d4
+Entropy.14 = 3ae859e3678ee3e56942558d8b6fe1e1afeac69201df2a22
+Nonce.14 = a307097e671a5a8a984910f2
+PersonalisationString.14 = 170595791b668296d5d56a551930221196f03526c6b34228
+EntropyPredictionResistanceA.14 = d1c3175c4853102ed4b306eea013cc448d325938c5294008
+EntropyPredictionResistanceB.14 = c0139e13d5d7c5bbf9c2394973d00487d49d4241ae7e90cc
+Output.14 = df70ba5809a640b8fa1ab712d6ea7048f8609944d63bf4fa958556ae020d95a9011ddf0041a75b708a372a486e9ca8e0d2c361e4f75171710ab42d49ba3c0b6dfc4b3614b3577ddca5adbfb2d096acc4a72bdf1c6113cf6f0bfb5e8f1d69ef0a4a4edae75ccafd614ae1e718f60e3196
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 89af090258c3890cd055c4d971877fff374a2f2ccd6c0c2e
+Nonce.0 = 24cd21b03d572a242e2beace
+PersonalisationString.0 = 02f88981cb5c3dbd04547b3a07e3b45b15e21fb03b3d9028
+AdditionalInputA.0 = ff2476392d976ad0aaca2879dcf01992e1e13d52b641ea09
+EntropyPredictionResistanceA.0 = b983c10108dd8e1c959c98471c30c18ad59075449e387bfa
+AdditionalInputB.0 = 1d7cb0ae7d0f769313160d3852011be6e5baa09690ce44b1
+EntropyPredictionResistanceB.0 = bbf6bf906f523bb8d68be86f308993acecdc5c38db8c92d2
+Output.0 = bc2331cf8c31cb1308bfc908c6c6a1eb06155d987a3104973e7f3d280d60c2308dcda2a5501ec0bca1b954f4c1aa271d72863041857340072a8694685720f9c25dddaac1d1bcac09dad169bc3df25f2b2a5ce80651707c15832bc84b4af074b7c32e5fd2aa18ec726c7d20bf123529a3
+Entropy.1 = 0e9b43ada02c96c9004d0dedfde014f84f9fb53dbd8e0311
+Nonce.1 = f1d48b40e05a5f3c8c0b6ef9
+PersonalisationString.1 = cb601ed0530e0fba7feca3bb222138a8762752d6fa65a9cc
+AdditionalInputA.1 = 31d0d556315c29da4bdcc46ac40846deb70c1521fb6fd54e
+EntropyPredictionResistanceA.1 = 25f0bbc0b4863c1bcbd58fbe981d64d07cae9cb7498f2cf8
+AdditionalInputB.1 = d229fbc076a053d612b98e222338028efe09af0bb5f161d6
+EntropyPredictionResistanceB.1 = c03d42e1c096a0cdfbd0093456e6cf8d742b37ca90c4d223
+Output.1 = 6bf06f4411f6658725556f2b291c15e0c2a4710007e17f6320518e1f4709c76c1aca7d8e8e5044a95311fd831a1abb0957cca5efc2779def8b6e0f51d1d15f38ab46d85e1a46d8c78176a48f1d23627c1f1601a938da4bd5ca2102b9eac674fc3e06cd3899e3c5b87d58498956e210d4
+Entropy.2 = c4c9216de583ffb8cdc3590489aceacdea0e496b3aca9c37
+Nonce.2 = 15d35b7f03422670ac0618ed
+PersonalisationString.2 = fd1d9c045518da034f974fffad9fe5615e87bb6a516175aa
+AdditionalInputA.2 = 060a9b4bc635f3ab3c7212b8ce0da20487018aa74ff34458
+EntropyPredictionResistanceA.2 = f50f95eba2c7759bc340e0d691d2e21a865707e0c7df3e7b
+AdditionalInputB.2 = 253d6b102c06487f772b4072e408bf1b92e4690699ac6369
+EntropyPredictionResistanceB.2 = cf1e78ae32aeb5257619fae65c9ceb7e432b956a5b2178a6
+Output.2 = 1fbb97bd8a2767d9635e3b6bb1da54e0c61f9e224fe257327d9dab9fb2231df752edab47cd41eb28086057ab5064ee34ae3bc45abc69aa93d7c490cf9ef2d9af7475ca0ca5d1c7d9a1886664037438a8d49d9e3bfc23a6f24c40fcbadd200d1ab656e5600343deb2fd616004be770b62
+Entropy.3 = 792b589dd7e5f3cdebfc867a45adafd4a5b1eb2e3e46dfe0
+Nonce.3 = 6baeb227b51bed5931fc5d5d
+PersonalisationString.3 = fc75ad6aeed7c21a627ee9d6d50ae5dd5d9a8d406cd71e0c
+AdditionalInputA.3 = 26f2fbaace113e00a15aaf6a1c4870777ea74d16ee8f7931
+EntropyPredictionResistanceA.3 = 0d10248c8c7f00b3f8c82333cee6f40cb1084bfef3729f40
+AdditionalInputB.3 = 683c4134cee085a5908f232be33217a674cdef2604ffddf5
+EntropyPredictionResistanceB.3 = b1024e829e0c3975e3713ee3bdb09c57c9a918a2634d3b11
+Output.3 = 391e116bfd7c3fc4b14d322a825aa51948817c21c9c9438f4ef26387e66f4bd517b35b6b4f8ea75485df302e438dd8b3273b2b00b5f207dda7e1341a35c7f4c9525a17058bbf7a5ed7b91cfac017a0d42be6545417b58fed64432b7533ae427af470733c46c7b7171daef80879781b70
+Entropy.4 = c83b2fe1634f858e2b7e8b8baa0ac9cc69184c6325b7d7bc
+Nonce.4 = 6758e406ee19ae17cffce067
+PersonalisationString.4 = 28526fdb0796924b0ec9c3b82fa10f4f1299f5fdea0cf585
+AdditionalInputA.4 = 2a180df03d49dc94f61adedf684360662458337bc2f2f9f2
+EntropyPredictionResistanceA.4 = c1dc185bf468625ab13782c6500add6eb0baf99b80874647
+AdditionalInputB.4 = fe139d560114ff2eb79a741a550c9d7ee753151e8253ff5f
+EntropyPredictionResistanceB.4 = c145a98787db6d033623946efcc3e8a50b019b6983221f7f
+Output.4 = 23697f7c564ec388ce17c017519daf90573163aaa2e39f5f3fee149f8b2368a722edd780ee348cd28d9e836413e800bb77af38901f6d6defc9dd2a70f6986fafb5e7c2def246a18bba3109ab518bc82734ae24d990fd0aca5c36becd938bcc6c76c3870c28cbb23ac8eeb341639e9b5f
+Entropy.5 = 0c28cf67a8f66e1fd040088b7dd295f056ba66f55311de67
+Nonce.5 = 9417c71e2c3b5d197f0c4aed
+PersonalisationString.5 = 4a7ea6fa49ff8f5a95b3ff19e4a800c79df5cb6fc0f16c03
+AdditionalInputA.5 = c966828d60394409260e95878a37efa190c4166668917875
+EntropyPredictionResistanceA.5 = 87be2a119acc9c6f4679a150de71e8a57c4b64648dfa8984
+AdditionalInputB.5 = 01a6ef3ee01fef8acc4b5aeeae06db2f0e0b60aa4fefb1f2
+EntropyPredictionResistanceB.5 = 3326f1114f7326e718bb5ac3d7836b2ddad46ce1bc0d93b7
+Output.5 = 203674bb32488dcc8af9808f0565b740bbf5b4aabe25982c861da48b499a8e32be2381f01480673ebd671be7c8c95ba45ce3e5543b8dc4dbe5085fed20f7330e686ed7ff914affafc93f02c2bb506be319a59a7eb647b66e48726bb8aa2ddc9783fe94bc263a9b44b965411e75930bac
+Entropy.6 = dc011194f417c16608d5b18c31691a1b488ec297cbe94b13
+Nonce.6 = 6b2045412b3e157057ff1ad5
+PersonalisationString.6 = fc4dcf29135607ff4ba55547f7dc79c37b2e757cefc60faa
+AdditionalInputA.6 = d1dba8fc8ce4f16212bfd22dc40540c0a03604c5b95a8b71
+EntropyPredictionResistanceA.6 = 921c471da94e87cbc42eac4244226b6dcf4293a4ad98a583
+AdditionalInputB.6 = 41fa0173d95ba33bee1067202f1720ded6870278254658a5
+EntropyPredictionResistanceB.6 = 92dbfa74c3a8eadc327991997cc7ef9dadd626f1a7895980
+Output.6 = 10b28d9beac68226b69f00d06bd771c72d5819e5c18fa5e98cc9cee2ac72f9ab30e509413c55df2ea504aaf425fbaa1ae716e629c883beb44a4022749e0565751a1f3a2df7013872452c041e75f6d76f986e36f14ed5c6b07870aad2ebe75c54e001fbed0bc631306335cd32e9aeb39d
+Entropy.7 = 65d33145e5c9e2d9c655b06a37df79ef9d0616b43d916b69
+Nonce.7 = 3f8c4a5342c4f979caccc03b
+PersonalisationString.7 = 0382a70ce8522538892cfda9894a9625fa432a953cc420bc
+AdditionalInputA.7 = 57d533f9f7cf65403c2e4ad7c9bb999b10803ce4de296c6d
+EntropyPredictionResistanceA.7 = 85598906607621630a3e4a2f3d0295a42cca875b2c0db30d
+AdditionalInputB.7 = 4eb7b0fc46503f68cd6a62de69d1c8067598abab9a768fab
+EntropyPredictionResistanceB.7 = ab2658c65dd1ee567b299e2979718858d6db4338b57c29a2
+Output.7 = 2806edd8c058d479d076d628beb31438a2aa19835a40fce280c9f79ee9b96316107e3dc832f98bd41d24be0f416d83de4b3ac70666113e8df5b4695d563959fff22614498db12b20d2c75ef4c460c1c09a31f12de02cc5f0295780bf3c940683fa47fe5691031826dcb98f7859a824d5
+Entropy.8 = cfb688966b40e7de59d0c0d63ca0b38657a7188420732bf8
+Nonce.8 = 4cd5396108485bde1a6171c0
+PersonalisationString.8 = 8895da225e4230140776c3bd6c19ff300740b58795a6371b
+AdditionalInputA.8 = c9c15d975ae358cb6f7ea378c5e65b5801a93e6028ba2e93
+EntropyPredictionResistanceA.8 = ec294fd38c355cda6124556db570944340ba14b0961cb8a1
+AdditionalInputB.8 = 9bfa7efe8bbe3bf4acc1da6a29a62ba7909a3900aa53f7f6
+EntropyPredictionResistanceB.8 = bef70240a1ffb02996b156e5eba7558f9372d20871db983a
+Output.8 = 4035fb11e07521d0c8a3d6299cf7b250d3d801a3000281e75a40830d3729fcc8ac0854b389cda47af841d5f3c1b6941622459069f2dcc8de4f573e5b14c4ed09b1bbdbc120c11848722f08d62e22dd90268ec46f553b991b0390fbc057a43a271b114f9962ae78bafd2f3858c43c99c6
+Entropy.9 = c5c57e8d395230f01861aa170775b75067b3d9b9528c0ffe
+Nonce.9 = bf78f06ea29d8fb9bd4e54aa
+PersonalisationString.9 = 0b5d5a63943ffc7d8eacfec141493c2030c9dc7382d0385c
+AdditionalInputA.9 = 1015228ad92a4b9a03385b43df5e4c098c86a43f44157a81
+EntropyPredictionResistanceA.9 = 96853fbc90687c4de70f6631257adea26e06f4c06daebf84
+AdditionalInputB.9 = 2209192423601b11734ca9369c822327d77344301c7dcb26
+EntropyPredictionResistanceB.9 = b5a10640c306f1a5ca19025c5f5aa8bc208e89f442d68471
+Output.9 = 80d1ae6b581788e2b0779d7ad5f2e45dfba25f8b94908619803bd8b5eef2d0124c9a2a945e9da2cbd4753a477abc0e005f1b4531732ed1b41254e62f398a72ac7119c8d0206ceec433d1111941bc5e55c6437aff6cb0da39ab72baf6ad1908f283ee3fee36d39667a2db01825e6bf279
+Entropy.10 = fc08a337a2023eb646f553adbd88019959f021a0a7c38951
+Nonce.10 = e10a34099db94cc2e1a8ba83
+PersonalisationString.10 = 569dd23f740fc513b80eccbe4685118b8991df41ea030c97
+AdditionalInputA.10 = a54ee7b10fbad07b923ef7001c22f1ffb925a335c4de4024
+EntropyPredictionResistanceA.10 = cf7861f25bad4e56e867bbe2532cc9d45f974a0506ab8768
+AdditionalInputB.10 = 288df39628129479906ab25cc9ad6bece76be7ece0235e77
+EntropyPredictionResistanceB.10 = 632eaa399bbc801d96c8ea853211f0e95baab99dbbf6e94a
+Output.10 = 3ef6c4a7003bac81653af97d5e16eb13c73a67955d6e640e1916662359fbc3751778cbbd9a7dbe35b001b8f9da429f651000a3bfa14ae7c90f9a5237c4035bf572d55fd7dc2b1b121164736004f0610567bb6b8937db91265f9fe887a9c42d6b5a0a8443af3e97b33ff04faa010f76f6
+Entropy.11 = 64a4362594061b793f8db0cb624081df45791bfb54c31fa8
+Nonce.11 = 6046e073b25ef7deabe09d04
+PersonalisationString.11 = 9233fd86d1e989018e7e0c0d7b06a5a715895612354518c8
+AdditionalInputA.11 = 235eed47df5c9b08ba6d2fa3284057b18bbace60146ded0b
+EntropyPredictionResistanceA.11 = 0ce34b5b53e4a1c9990dd24986d438434bbb10ec246dbf86
+AdditionalInputB.11 = 175bc85f59d0dd4fa062d4bd227fe21d64602985577da7ed
+EntropyPredictionResistanceB.11 = 0f83ff51127c6e8581fbee0516994e107d53d817def335b7
+Output.11 = 3cccadc8e0dc3607d3e7f0d34d65b9a08be37d925ac26cdbbf8d3ff16e195e9f4a0f51e26fd7b71bdc53f7db1d5a16232db06ab8329f0df3caf8c995c908d54c6e230c683d091af495ef41faa108d7a67e89e48d5ce2c05539075039f9de204351a19e81c56df54916801d65df1d5901
+Entropy.12 = 3d3a132eef257a88d04f1afeede1f2ff55b2aa6819fddbc3
+Nonce.12 = 5866fbf4d6f6bc5004c6d1ef
+PersonalisationString.12 = a8419f69cf3a20d8626e68ba7acbfc543688f5d6df132c76
+AdditionalInputA.12 = a520ce46bd662fb9502332ee9dc2313fbc2f0bfec00652c7
+EntropyPredictionResistanceA.12 = dafb69c8752b6283887e01701857a9f734983b1e1a2f462c
+AdditionalInputB.12 = 3f3e72d8d53ff3d0f7f32fd1b199c42dfb6e571f24169a95
+EntropyPredictionResistanceB.12 = c58ce19abf2c3f326f5ba318f9f3d468a1e7d33c5010b9f7
+Output.12 = 2520eff103004b44d9a79919df1c6e34d284bb10217a080435ec3a4156295de5e26f1b675a7dfd86671ee2ad6cb32d36ca1454b280c6b5d77e07bc4010f2c4c7d52218fcf76cfd0ece816c9b9cf0e499e4149adc0d520a35024ca4def9ceff5146ac86d3f417f287e306f54bf838b4b2
+Entropy.13 = 8c8a4e9b647e2061637225f12515e7c3e5f3f8a983ec329f
+Nonce.13 = 0b713329706238355febae75
+PersonalisationString.13 = 2a770ddd38a2adf612ce0bae799ee7af60d5495731be511c
+AdditionalInputA.13 = 8513f75bcb681683975a3bc8248efd7a65a82422d5323abd
+EntropyPredictionResistanceA.13 = 7515678769941048721ca2f944b0f63a8314c2e3fbe8723f
+AdditionalInputB.13 = 5f7aa9dd733b26aeb504740c5712ad1ac6fa7e22dc538abe
+EntropyPredictionResistanceB.13 = 31ed26a72f8c18df90ccbcad1a9581f4f9b03b8dd948c03e
+Output.13 = 140387504ce59da114b8faa10bde08a3dc8b8441bf1452ed5a5ff545d9e1e1c5008e4e7bd451e7e0db94f4e2194e7dd57f35a6d8ac6e4cbe63b5d96062450ed4e6681f6ef87fdedb0456e921508349cb358c0342d1dc43ade235d8fa95d0048832a1d64c3f2fe3b6806744bc75f30b7f
+Entropy.14 = bfefbd95d6f76d77d72fa1052997e77d63b50976b5ad21d8
+Nonce.14 = 29c492d8a0c571a37a9c2bb7
+PersonalisationString.14 = d698b3f07a7ce48efe7e761e6b3ce9e5eb20535d6fe2e15f
+AdditionalInputA.14 = e2a4e0082c3d8776ffa318c0ded04837bf385878e14ad25e
+EntropyPredictionResistanceA.14 = fcfceaf3dfed10f32c710bb1970283997f3079e368466549
+AdditionalInputB.14 = a3c2f11654592e478c8ac1a1fce2224627ca37bd0efb44ab
+EntropyPredictionResistanceB.14 = f986d7f33aad227e98d9087fe30c34f1c18b42f85d56b72c
+Output.14 = b1fad8f7950787c949b41dbc5581069f0920058614c3ea7bf1edf3812027a4c989d8b029e08c4ee77c76c4457aaa3d89dc775c6c60bb125dfb969729fe669152a173256b4d2181e84bbc63bcad8ae645f4371682a39ae65d00f004e344ddff5374b257d8881f63d4ab960017258815c1
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = f6400d53c63c9dde13275dfbd78cf4bc5d491b7be1581672
+Nonce.0 = 6b81dd9ea9cf6382171cd820
+EntropyPredictionResistanceA.0 = 19013d79ee2f11a06c5656a5294c9348f991e63cb9361c75
+EntropyPredictionResistanceB.0 = 50545976cff370cf503f0fb01eb4e4ca8976b2d1d4c9e62c
+Output.0 = 69689db19898cf28c650de4764c6d242ee9f5f767347f20c37d462539da93ef0a6b618ed32a9d2b9dcaaeddc7c2a5b1a52dd30abab2d1477de504a14b9ed41f9d7063337f81ea71eea245242ecee9580f7aa26c57bb25e3bcca66bb2768663ee20333b82af0f2fbaef76f71e30d75e40
+Entropy.1 = 25e0242ebbc82ed22ab915277aec8a78a74db61afc81aecc
+Nonce.1 = 496a878eef2db30c7d4cf641
+EntropyPredictionResistanceA.1 = 6f4970cae6cd97c8aafb30b8b7c92e67b6eb920ffd2e3df3
+EntropyPredictionResistanceB.1 = 461e0d943ccf96aac901e4d2634c63527f9b266043e56065
+Output.1 = 6901a574c665dd7eec25e2d6a4f3924ed97e93829665cb28a1edd04ac0010e1ba79d4c7846c411f629def8f76918333fb3362b45a98ca39804e729f4830b4bee3433b98695186be2f474d826d8680db5cc1b58491757c5fccde02e1cb72e62b95d153c4161981f546002fd8514fbc1a4
+Entropy.2 = 9c29898e991bc2c3e6f31499e575440c754c81234882ec8e
+Nonce.2 = 68d18653e3daa71ed60857e6
+EntropyPredictionResistanceA.2 = 7d96adc7235ab8bf7053f34764a96443c207f5017084f885
+EntropyPredictionResistanceB.2 = 3c9009b8a5ca2ecdc222744f7965916c19939680bf9f3fc0
+Output.2 = 3acac7b98466dfd22dd12bde3dff47ec229f649141b089b717b8a744bdc139bc931620d098cea003c7b3953e222057f4fd4ce121ba4bb4b92871447d0c53db5cba1b1b09774441c8668b5aaacc6acdcd210778dfc0b91734b7b32ad3763973f1439db37a5eed429bb98fc05173c72f15
+Entropy.3 = b3ceafe84b612b9e5d6c1af28ba40e95dd3fa263afdd381c
+Nonce.3 = e598b95aef745a43dac2fba3
+EntropyPredictionResistanceA.3 = 758e969fa6470e041854e2c5b0ba55f9ddf4bf5d820111f0
+EntropyPredictionResistanceB.3 = 00dab02b39f9609ec6449aeb4e9dbeee72bf4b4234208719
+Output.3 = 9430f5d6ad213feb8bd716a51653202cf5b1a1f96967b175fcf333ea0f30e0263ed04bb0304727bd31bcf993f0755894ebccce9679be419ef318dc29bee37600e797a048514b27b58debf233df83f6c717667ac1f1e8bbfd8d8a5858fd012787cec236de60abd67c7542f495549a26c4
+Entropy.4 = 825782f4e91e00ef2081b0b025aac938d54882a9edb4503b
+Nonce.4 = b235377dd8f4465c4419367a
+EntropyPredictionResistanceA.4 = dc8171c5e96644b013b9ea4eadee43518ba50bd5dd1ffe97
+EntropyPredictionResistanceB.4 = 1926fbf89880f755c79d8257568d26b8be3cc34c7005d7b4
+Output.4 = 6e5bba5468de24ea049c4ab12c04abe9506d16b8c8d95b5c040f028ed2f0fd1d46a6ceb1cddad052a92d3954c48e4f4a59ac63c5ff917c120265a8cfc0bffbaf82955afba505e27d9d20471f2f749efed2610385edc3e897593eddff21a606059ca25a8ddbdc8a2b125baeeae556849c
+Entropy.5 = ed84488d05f0edc3d02329de78fdac7748ec4fa4126c1408
+Nonce.5 = ed614b13c27243c73f739883
+EntropyPredictionResistanceA.5 = 97c9680d2821ac9a0410e2f98103faffaab7ff132a25c460
+EntropyPredictionResistanceB.5 = 9d62d931dddff9102b7cddf76c536a890fe9efe50c1e6278
+Output.5 = 7a42d791a9f20642bdaade0242433209fa23b638d7d1a9ae367766db3d8fb2202d92cd733e0c5d07d0a35d20672e45b4d54cd6359c332d27bc1dd8808f5eb6a3b47e80bd8068906edce7a88391703d1f3002d491c2af30a12f51d67af70fcb093116083701e9f177014e29c7a6074bc1
+Entropy.6 = 851f3260385191f5722c79ddbd80709b6c2b083689fdbaff
+Nonce.6 = 99c175431462808ce1c4df3f
+EntropyPredictionResistanceA.6 = b03e34dadc40c435eb24223c772902241160de15904fc308
+EntropyPredictionResistanceB.6 = 2bdeea61f8adbace1dec7f44fe9ff9f14eab09218dbeaeab
+Output.6 = 27885fe2c4b112d72343479ae870193f675fc6f8c329c0fafc853296a891f2a8793037196e940f0b86509a099e6204dd8db74b4b5b81733ce218949ccc844dafdd477056eb6962ec73d2418c4e9dc9accdc4cff74fe99eedc6b3958181b23c2a113692445253eff6baebcdb58f2f3166
+Entropy.7 = 15b85fa9aeed2f601739600764908cc9736c978738767823
+Nonce.7 = b7e22844ed3cc99f96b9a8fc
+EntropyPredictionResistanceA.7 = 5cd3e73ffe6dcfeab8f2248e30130685aca66d5517dee361
+EntropyPredictionResistanceB.7 = 0db4f8ba0b65b2225caf33900b0575b4bcc04679965401e9
+Output.7 = 3a278ff8711e6c650e29f0279d183785c39781decd223263a8e3b8687cd9631416087c74e752049bc50ea5466f258801d4450addec7da877d5eef863b8462c62d398822b04d6484ae3fbee62c7ca79b30dd9aae90e9bd6da5ca07044447105e6c8d6850b708e01fad2053997f5fd3607
+Entropy.8 = c4e0f363d3449281c229f961c6b39fc52f9da3d4cb44d312
+Nonce.8 = 085a3b9bf54b6061f443cd10
+EntropyPredictionResistanceA.8 = c45f86ae5eb93a3017f23fbe94177625c62d947d5a1f2102
+EntropyPredictionResistanceB.8 = 1390a9c202e74bd208918445f74dcf9c7e1abf54fc7390f0
+Output.8 = 99d9bb990fa2e0963130b7204606a6ee56937919ec60174cf2426a6f1a75364914c7a6d7e55accb5bd4792a95edfe97ae242155a889c3781823fb78a7135afb227d15fe6dab913cadbf2526a5e495998614aa143ace707d25b2fca23cb288a7446f98bf4a0d1d4b24aad54bd693fe2ac
+Entropy.9 = f6a0229cf21cada91c7c526eb9e01aff5623bbb6124be7e7
+Nonce.9 = 56d1e4cfe69f088af0b5fae7
+EntropyPredictionResistanceA.9 = 1c8c73395962d1406973da3696b3b9bdd80a25af3f829a76
+EntropyPredictionResistanceB.9 = d36abd5f1ec10b2267a2f29da392bd5588f84af5da8e283c
+Output.9 = 289c598fce236a1f1068fb85a70dc2b56de7cd2097a1016a3fc3089afbcae84ba7f5c4ed5c777504aa14684c0cd6900b77adb1bfde3b38e791679eeaae97a384360bb11f176036d3d7cf1f8bfad646d55cfe8f374dc0e0010f3e798a25754b3b87dcadc2e7f69815ebd445538257f3a4
+Entropy.10 = b377ece8a2cfc54c93acfed7e385104535db10271b9d8d2b
+Nonce.10 = 0d6f5668d0051537783c0811
+EntropyPredictionResistanceA.10 = 8c6c49008e5eb3850b864bec0698df812cabeeb1f88a5c34
+EntropyPredictionResistanceB.10 = 0242ffdbb8f3ff672ebbf9efe4dad2e70b04aa3d5b7bd957
+Output.10 = 83aed9cbf7434a6ac80f877b016b1cbde4de7a5868c20e3218820fcafba32454917cc22a80d6709fed1888fdeafc44370d8c13f56d1855f466ee3a47f42c9ec459aeff80885d23d089c29ceea21177f8f73f3860339cb59c3d0bcfe64afe3b15bf73b35898271a83b0f38ce438553d1c
+Entropy.11 = 7574b8ee1de3f8da340b92795483987c556cf68ae3f1d44f
+Nonce.11 = 86adfdec0b49100da771fa22
+EntropyPredictionResistanceA.11 = dda6b44d5df3fe746e30d50f74f214fd10cf5c164ae6bfe1
+EntropyPredictionResistanceB.11 = d12811f10ba4a39afd66a9b024e3b0c383b21abf4b40f743
+Output.11 = d90ed8403e56f663091428b939071d29a3c217d33f7b104623adf4b8314241b7e088bf142a34c5755b911a06fe4be68dbc3d1ea995bfdd8b069782c3cba4e5d8c9fb219d5733b421a82e75af29da93a6b1c375305c592be3f2fc1153fc2cac324623d6fd4025d7e1c376b46cff67dfa6
+Entropy.12 = 47e36433d793145be7564d1cebfea375ffd14345476d3428
+Nonce.12 = d9bff90d37d7e37ef6b80537
+EntropyPredictionResistanceA.12 = e9570a38fd47dff7ae65fa2e8274f11a889fe985c02c4214
+EntropyPredictionResistanceB.12 = 5bc74f508eabd098f502bf32abd84705bdc87fa9a482413c
+Output.12 = c0f58a9289f05270a4d7be3ce6190ce8eb9a7afbe1beeca4cbd57962e615ecfdb21c973cf40469c9af2b3f8c938bdb942fc0dc25edb19ce297931dbc3d00b96b66c45cc4edf006355af8f099d98cb6b6cc86af4e61bfb1f5e6401ee66b0f5cb7c10bbaf3d4a6027b8bb34565c263582e
+Entropy.13 = 602562847dbdd94c9fc0e921c8ac828e8a0fafb7ec1474e5
+Nonce.13 = ddfd7c2bd38c62a33b7d1c7e
+EntropyPredictionResistanceA.13 = 66e68fd9a031376582d4e6f82400dd2799d05981fa970434
+EntropyPredictionResistanceB.13 = 6d1736fa8744a9f7084abe6e6d517679867fb0171b41b062
+Output.13 = f8c822a115484d289c9ee84e928ce3d2582023ed4f637dd160c05c791beaa2ea8c35730aedc8159c94d60ff1f95a8c3c1361bbc26d3438ef861ceb3b288e699eca2a89249a97a10186fef98c5aa0a0d2caec7415dce976af83db0a6022e09f2dba2fd86b6e7fbbec0d6fdf7c67def2a6
+Entropy.14 = e85a5b2d5df8ebc2c1c79ff2be8b353ddfdc97f3a4c20524
+Nonce.14 = e374f084c792ece59d0c4fca
+EntropyPredictionResistanceA.14 = 42d19ff5c985c31c955a0aed5ed02581ffbf2a0ae62d7875
+EntropyPredictionResistanceB.14 = 7f9af6a606c9b315c04faf5ce3c0412092edb19f9463784c
+Output.14 = 219072e8b6d939f75ab90edc91ade50b8e40f2c1fae68aa5fb5bb297506ebc5f18d20492b55fd73ec118e6d74e4796c1dd28d50f903dca70960ba66b33b0a6c3d06e2ba79eada96b613324914b19224f0c710af7793722687f9d464093fc651a5d613b03c6d71bcad9bf2c74a4844718
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 7e3f13bdbbc4b8bf4e3586b560671dc7eaa935a71148ce52
+Nonce.0 = 945dc29e8ea74758b74b57fb
+AdditionalInputA.0 = f9fe1349e4fe833858d88d008738a10e3f611633297ec1c8
+EntropyPredictionResistanceA.0 = 330561dfd8f3141e27fdc333068baa9f3d141ebbc4583e3d
+AdditionalInputB.0 = bee4bd98914877c15ee88b8819ba416c9145c41e88259c22
+EntropyPredictionResistanceB.0 = f62d7434f8a43a22ddd84eb1a6e27c484ecfc300880c2456
+Output.0 = c578fb0152dec21299722177bc7cf1c3d5d2e79256cf35de09034bcf59d8279864d2a0719e8d76719ba1259539dcb73aaa6e9f39e22d0627c4fb1b9ffc09ee648db7a63bd8f03d308824a49c000e0c2d2d44d32b00a118634839cfb7eba8235278c710cb2491ca433896349a59f47e74
+Entropy.1 = 1c87c394f994ea5ccf3eed366c6145ed203682d622f49d66
+Nonce.1 = 4a8dda922814371511660661
+AdditionalInputA.1 = b54c2f747b22c67b7f4e15be98bdeacdf755e1295f9fc2ee
+EntropyPredictionResistanceA.1 = 63d9e71981286befcd24da21152c361f3590836a1df42e71
+AdditionalInputB.1 = d367e4dc94b62c50820a31656c6eebee017f1efdd3f6668b
+EntropyPredictionResistanceB.1 = f644ac13744a5b67ab1dc08f7452fdd7af332fb6844e6e50
+Output.1 = 9647a6e25cce9a2707c06d90ff9f01709e3ce9248ce68ff45f7be10361935bd37a7fac3c53559040a2264bc39be50e8454e583d369cd0937b2145339fa01ad44d7cd4dbfae7631b825977cdb306d9afaa2f02ce4cd00d7d799178648cc23060c2e0d8034c08d8ba64e734a450220673d
+Entropy.2 = 9981329f50d7d408403f0f56b2ec0daa44eef9c8dcf07afd
+Nonce.2 = b1da23a8dac4594d51bb649a
+AdditionalInputA.2 = e6c8c153f31a75b29b8d43b790637c45a0f6aef454844c4a
+EntropyPredictionResistanceA.2 = 0a3f6ff51677795940856e92a87b563411e8b60f6982b332
+AdditionalInputB.2 = 5a9b00e4d0e90b3ec974aabdb20ae004a8f8e472ce9893b2
+EntropyPredictionResistanceB.2 = 90103645ace88c04e7130747f67108f985c05d08d622e00c
+Output.2 = 7633bac43b646cf94f464cfa56be59b8182fd538f8a3ea7387d8059011e70ad870e556fa4f99bcdb2613a9b961b787ce6e3322e9739c4d755777233c453b4f3a787a28b4450eb756b7afe43e6a5f8f22b280e129b7e73dc1fb5066ea81c1d2ef4833a71ed638883ee73e929ec588950c
+Entropy.3 = ac32c2d37698dfdd062e1defad3296297673465bf45c9433
+Nonce.3 = cde6c0080082115f6bee99ea
+AdditionalInputA.3 = 396db8b46b06b46b8e0d619717f9da0bc38a0ac69137bfb3
+EntropyPredictionResistanceA.3 = 9cc25c4616d68ad5f48553ec7afceb88dd11f4ca98580385
+AdditionalInputB.3 = bc2337c624af69454e2602ac003623c483d219dab3a8e055
+EntropyPredictionResistanceB.3 = 7efc77c93428df85d7c01465cfc0250df7a5242687bedc89
+Output.3 = 3270bcaecf7e312bb03b6d08a595bcddfe19fb959735afd56dd4c2654ce6fbf3f7fbcc6f9715a9cea5723bf121e49d2c9c148c47bb8ce208a22b56f93a451d078883435ec40308a3c7ad186efb54f7731f7716d63662bec842a17bb55eb680b18cbc7ba3e8063cfca73799798ffd9d10
+Entropy.4 = 23cd33091132bfe7f73a8a3aa0f0e8b1b7e3d5d3430805cb
+Nonce.4 = d4b826e827812490e7a65402
+AdditionalInputA.4 = ae4b7bca2224e6a5521ba2f02106257ee8d9c4d7fb5b6225
+EntropyPredictionResistanceA.4 = 8fe973a631cf7665dc78e03416bde134fb459f1f35287ed3
+AdditionalInputB.4 = 5f3ea62f6e96dc3c011680c26d1baeb6608d90394517f9bd
+EntropyPredictionResistanceB.4 = a25578f02e291e0a8222d4e9917d34d2cda92dd3506f7076
+Output.4 = 9b1998d94294970ebaa7b160fcaebfc57029ce86ac2c025e92ca3682361013d732871bcc4e4071f84c7ca22c18f41a98c1ee20ead187d96ce5f19a59c1eb01f427a55d3fecfc18c060eca447f4d878443ed2a5b747a2f8d782b8a799fadf75f5470e312efa5ac3a56b6367aec288428d
+Entropy.5 = 3ecbd733cbbe5fbdd20919e4e7eac6f311769334409ddc02
+Nonce.5 = 3be704128978737cb509f0ed
+AdditionalInputA.5 = 970d1a6c5c4c8829d57a8378fb99059cf4dd9228a3d38284
+EntropyPredictionResistanceA.5 = 71c873def99f97562c46383127ae5df1216adfc9f900fc74
+AdditionalInputB.5 = 6a4cb81ceda3cbdf9bdde5cfa3c4a90975c51ad1f8f0d126
+EntropyPredictionResistanceB.5 = 745c02cc4153e4e12bf776e6c90f6fbee4da35f9d39dcd3c
+Output.5 = 1410165118ba4282d52521eb74df20d0e9a52a2ae304fb5a1d6d38a80c26313bbae81b492440e1f548291fbb52f211315841eb9473d4493e38ff56726639aea8ca63169ab0a6ed9af851137b7132440134bb97255ef79c26ff92a66a1f04ac105aa599899f179d5113e4d2dfcc9765de
+Entropy.6 = b99fcabb0c8f89a6cda2cd4a623fc8487aba9a6b9aaba2e2
+Nonce.6 = bad16f80b9e0efad8e2910f5
+AdditionalInputA.6 = 4db31a8e7fa9b92e8df3bbfa37a25d5a5a143bb696803511
+EntropyPredictionResistanceA.6 = 8c593f3cd41964cb8468e00b338839861cc921479c7048d6
+AdditionalInputB.6 = 2b8cc69918256c13bf141f8bda422aa795c9eed1ded5c795
+EntropyPredictionResistanceB.6 = 5204bbe52a335e35710f67e0611172b6e6b77e8e745483ad
+Output.6 = 61a2da2a87b396bc0d507711c25d7533c2655cd56b49c3c933c5f037a687fafa7924927bc67804b890d6dd017c5332bd88a9c27679d5e08feb3217badbe6beae4054b1e56855ac48d2b51113a9daadf369394a970dff9cfcf45e1e580ba3e053316989614c067ecf361bee36f5f853a4
+Entropy.7 = e54eabe7f527e4d80d0b9bf6b139f3af209974de2e69e911
+Nonce.7 = 224b3d152df79c172980f221
+AdditionalInputA.7 = 6d67825eba13c8bc3088d34bde21e3bca61932ade7136bfc
+EntropyPredictionResistanceA.7 = d59cdbf5e9b731decfb4ab75f2c5296efc5d2fce5e8f0f52
+AdditionalInputB.7 = a0cb95f11726597f13500435a8ffc5568466197fe7be2299
+EntropyPredictionResistanceB.7 = 96c82e50404066a0ca495e47fdacf8c0a8868cf865203c15
+Output.7 = f6822eaa130b17f45c13e3837fab186e30425b2d6532e68f231174acac4de733a096444f131c21049f513f0b793ba2ee8662dc8970e2787de90fbcd5f1c01e3f05a00af817339c17e608c1a189f338d0817f9921e1ad939a8813695a74eacea1029c8d9dfe42ecad62d0816c9d7e9b2b
+Entropy.8 = 7ce9a6a8e76962573adc9d7cf5a23a8aca051f72b68d9171
+Nonce.8 = 4518bf20125baaf521584ebc
+AdditionalInputA.8 = ff99689d99286444d7ff771e9bb34bd25db108cfa2a5b9fe
+EntropyPredictionResistanceA.8 = ded63845dc5a133b9a59a51d43ed8a13e8a2d0ab2563c113
+AdditionalInputB.8 = 7905d1b3823335fee1500ff7d4bf1cae6934833f80ceff35
+EntropyPredictionResistanceB.8 = 2d58a7220c5d61df507f52944be8badf2fe61453b201af71
+Output.8 = 74c8cfc505dfab8e82613bca97054dd2b7a6901f3b731cb8f3935ef2181f5fa4234ab1ed5d6713607a93d01447bed6ecc2afc0590e45f42b2be3c6fdf47ea21ee75bb1678cc25bc582674b085f4d0231ae099950583ca6ac08a3d029de76a27cb2135b8294efcef5c92542e7ad5f0aee
+Entropy.9 = cb50d6fe267d30925d24599a9941cdcf588df6fe2f536812
+Nonce.9 = 322d373070afe1c051f75b1b
+AdditionalInputA.9 = 6331b9064b3437f4bb43963df36502348aee2e62c54646fb
+EntropyPredictionResistanceA.9 = 592c1c022b9f0cd7f70d8cdb24453f85a2a728885de65b56
+AdditionalInputB.9 = 1522ed500f02f66ca08b4fdab4762597265ef0447b0769fe
+EntropyPredictionResistanceB.9 = 2e539f99d00fcface89d7b10356d1827f1e64192e51f3230
+Output.9 = 63d7531b40132544cfaa373448fc34384854b81860d587dcce2758879d7a481d04b5d8103a488fc354957be879c3384c12b2b0118e04bf61a79bce4b8ad3044a704201b2ee634ab1fa246a310aaaa15b62ca5f8c148a97fe0b363d9f9b1432106e5a755e3ce33c665fa4e38c427acf5d
+Entropy.10 = 05adfca994fc3fb238373bfd508c224183706805332011b5
+Nonce.10 = 9c138fadbc7b30614abb27f4
+AdditionalInputA.10 = ac86ffc8f7b80bec36337a388b9910031cc2d24c206359e0
+EntropyPredictionResistanceA.10 = ca67008bb3bfb8fa47034fee1fb6ab9a59f43e3c4f54d0d0
+AdditionalInputB.10 = c764142e5b1a77a028faa8df053f15cca73afb3a84aa6257
+EntropyPredictionResistanceB.10 = 2d091ca15f09610190ee6d27c5026318072b1717a520ab63
+Output.10 = 1384c8e0191183e8c34dbee02610bb7db00841c74c9765a982ab7ccd74fb4152f59880a91817cca25ef6eb99a47175f752dada4f2a1a60996c849c923558a2b945a9075d8a7439bb7fbe2f621fa75637266ba17a869bd746678a75de2bf648f0f93ab6c1a3ab78be0e1d2c7fa22fc60b
+Entropy.11 = 253dc890694ee23a2214e4e4c108b0a5828ea529399fd165
+Nonce.11 = f7d4e413760cd33ba5c0a53e
+AdditionalInputA.11 = 1c3b742c574a31305663c9b95e308a28c520096b687b2fa8
+EntropyPredictionResistanceA.11 = f74577926c2da03c8a0234f45e704755ab1f59b296b33375
+AdditionalInputB.11 = 60f2bf9edb925decb13b5909627ce715124b35ca89bb1736
+EntropyPredictionResistanceB.11 = 05ac9b65ad06da6833407f13bbb4c8068e41ba86ac272e79
+Output.11 = 009aba8491eee193d68f3aa11c6ae9261aa3dcef93397b76f62a68d963b34b15428d74ec19fc2e8b9360faa2d1e79fad9b0309ed2ffef62f0fbe6cdb05a077af73a4a6b32042b5defb3d407dcfbf4e70b06c12036c7d136d59735883e46baa4be3109729b38857f46bb8a01a9df2c5de
+Entropy.12 = adf339371d11315d47f4b1f6015e6595cf294927d743fb43
+Nonce.12 = d740bd78c33d77c8bff29e72
+AdditionalInputA.12 = e77b3d6f6babf945f8f52555924a4b72f50640e47af7f2b5
+EntropyPredictionResistanceA.12 = db3b8a765c0dcdd9f946b4d3709e4a66c338be703926f804
+AdditionalInputB.12 = fc30de75d3c66f6acd6b8982210ef45593606aa20624bfb5
+EntropyPredictionResistanceB.12 = 92b7368f7c89f839f544ee00bb4b879f588eb0549ced4272
+Output.12 = fba3521c3e30bac2b1aeef0d278d30c027910d9f78072aa88586f3b6ebdcb155bd6940faadf30a2f61979f42eee49211471166efb3fe7eecf92858a1f0a972fe361fe32fec8690625810141d347cc82bf0afacd001e9e4c63d4ac86e1c9d3fb9b035463af025498fb7620ab048f9f176
+Entropy.13 = a3dd10b0e81500e4f0005231688889bdcad7d3d9f1c2162a
+Nonce.13 = 7229b8add54063167588c43a
+AdditionalInputA.13 = b8b8e925ba080cd25d84e49d175ab1b077ab0bc1ddf025e9
+EntropyPredictionResistanceA.13 = 522cd02111248ea8d0b55cdbfbad388d80713d98c6784dec
+AdditionalInputB.13 = db02bc5aa2193b052ad453d23fd2f8fec15a79cb8da71e1f
+EntropyPredictionResistanceB.13 = 17518b5db900ac21677a79591fcf709b0d2addd885d87eeb
+Output.13 = f58fc69ff2bece26e9ffd92e9b5a3319e945117ed35f8c2be86d4e83be9c8c0db55d4f94e951db7bf34b3ac5562012a0466035e82e78cedb3b5ed3f164bd2f9336cd94645e065290d99cd2cf2667f1899287c8cdb0c3521494636950555a445a0bce01df9d8e177e73fda01e33794bf4
+Entropy.14 = 3620d81a9a6792b45ad2d700089fbc2572edb59a9b6d8b1a
+Nonce.14 = 69a04ca1233af557c7a1e1a6
+AdditionalInputA.14 = 9e16f3f3a2c63622892d1e47e7d2db88d99665992d6054f5
+EntropyPredictionResistanceA.14 = 9dcd4fc90542e3044ed9ca6bc1e9ebd48cc150a32f4b8b41
+AdditionalInputB.14 = ecced4ace2d11cb2e02c253d81d15ecfaf555a51189d2051
+EntropyPredictionResistanceB.14 = cff57ef512d7da05e7ea7d197c797962099c64ad89f52a24
+Output.14 = 40f8480b22c24bde9c66f91761b1ecf25a6486024315b58028ddb8a88088f7deffc671a9465671c370f7877527e72c4259669890abc4efbdbb09550a84fa2f60a41d74c9d7960d5fa05e9f66ecd5ac344970aacc23ab1361d364eb697abfd6cd621773f4ea7ec2dc7795cc533abe664a
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 4c7505c1e503b4d9e4acf8f379ca2197705ae845920b31f2
+Nonce.0 = 4cf325ae51982da9aa4656f6
+PersonalisationString.0 = ae4c39e0da2ab126770c0ac1c42268e89daf0ed28dc3fc7b
+EntropyPredictionResistanceA.0 = c5ad8b3283b79934bf900606ffbe5f9cf1cc6a5590b0a539
+EntropyPredictionResistanceB.0 = ba5b739655989450c44f600162b7bf67909a919d6afb6266
+Output.0 = 4f943f01f93205664bba70f65822f748c27c1370cd202e34ab288dec820dfd0ee6476fb130b87a7bae72f555be04e51fa9e98b2a78f1c791fd92e927b4cd9166a06a7ddd1fdd0f35c8ad9eb0d1e3635e3becf14946a337cee1832f7b0a4d30fac0945426d6e5709fe58427197cc3656f
+Entropy.1 = aaf0deee0d6db1b5f59f1d0b15f246d6f4053e51c0ada16d
+Nonce.1 = 900e43f229f89b76afe387d3
+PersonalisationString.1 = b4ab0429b397bc07505844f7adbfdff2fcce284da51c557f
+EntropyPredictionResistanceA.1 = 1f06cf263ac449b0887ed28ed58f223f53e33c8e5ce7a34a
+EntropyPredictionResistanceB.1 = 3fcdc31ce5d4f9885a3b5f3410f71611da591ecc5c52a3f4
+Output.1 = ce5e89a4d16cbf7001a573c78e014b1ac5d53ef503ab3553339048949c523d921514acd188c410b8481da5b464e1ed1d13a49ee13d1bc33b939a383aae7c5f4516da169445fd335e03a7656754cbbcbd894535447814e558c405ef1ee8751a671866af86197f01e3510f58dff878e891
+Entropy.2 = 4d11cd6ad5f86e6f4a33ad005d319efdc662cb6de42c842d
+Nonce.2 = 98cc22c2ff2fcacc30dcdde0
+PersonalisationString.2 = 48e25911ab5ec682d4f590e293c873d455610464d9bccb4d
+EntropyPredictionResistanceA.2 = 0a69ae6ca15185a68f1b41af9c6b3dbddb47d12292398cc6
+EntropyPredictionResistanceB.2 = 25dd93af15e52a27a7b9a5edc6e2825292b69958ccb1cc12
+Output.2 = ab70cc4c60571df080cd60233c7c0d56a998cdcd72673974a4ff44613f0f5f041d02ef7a62a6b6b3823b4eac08ff7a97aae2e63110ca212dca3b21a95a5e2ca0fb08c257b60ed4e92b2ed0f427974f62be23aa4d4788b5a1e3b19a45e34b8b33b8a0583161f135855458e45ae2ce2e9f
+Entropy.3 = 659ec0df64529e71a5b3acaeb7583bcc00640b006bcbf3ae
+Nonce.3 = ae0ca3c538cf2c2d5d77944c
+PersonalisationString.3 = 3f85bd8b6b6227c27e9008caea0b395aebacaf6ba722c16a
+EntropyPredictionResistanceA.3 = e85838d5240c5b34b11c756e0f6bd09e1350a5282e26adf2
+EntropyPredictionResistanceB.3 = 8c58d89a1ff54b3d0f7a83705e44c729aeac57a92b09126f
+Output.3 = dfba5a05b085737564deaea7c7ea8ced0ae94c439749d9f2fd02b49a647a9cc2331f0dadf203a333c296f82546b903e00eddaaa6ebc64bb5cc307f86377c7ef23295bf38513934e1a63de7ca3f465b98127e203c462e36051e2de7e9d8802394538ef31a11f47c3d758e266a10bf19ff
+Entropy.4 = b75375ecc82caba30cbece96dcaba0669cc758e9c3265157
+Nonce.4 = 2917f7d55b7aa84004a22702
+PersonalisationString.4 = 6473bef97bab675da5bf92380a382535068ebb8679f72e9f
+EntropyPredictionResistanceA.4 = 211a9b03141cbc37efb55144c0c9596cb7a4faf77ef31fee
+EntropyPredictionResistanceB.4 = acf9596cb7d4823753b6f82b9659958ec7c3e14849e12cf6
+Output.4 = a3e02de94affa885246002aa5b53f853cac4630d40e161811fee4dd5631c2e268a1e5d68bf8f71e26db589af68d78639c79e5c12b495ab7ac0a0e769b16841d2a324988d04afc3012be002da6f42c386a87d2a1a08c7ec20f99c86089bf389d159534a974d75e98d03ef12872149fbab
+Entropy.5 = 5652aaffe65903861a62cd02fd151ecabb9ddcb7f3727c4a
+Nonce.5 = dd49a2c4b47e002b4cb1e233
+PersonalisationString.5 = 4bab2a92013dad2edb0fa651ae63c2324757ea21ed02c5d4
+EntropyPredictionResistanceA.5 = 804b3aac20e2eb4da7e876c06652a0c5a4e6762c13689f26
+EntropyPredictionResistanceB.5 = 6c518094d6175e8e0554dd2502c594970e447ea63a1d8dc3
+Output.5 = 59eed8f297d01cbc05c3d5f5acd7e682e61469ff17df782fb0a244c154aee6f1e28622206d8dcdf10677cb54635aa5a89f78414f085982d9fe529d51ae911021fe3caa03416b86e67c1c05731d2822f66c8adce7501c47dfd271e4e30ec6067aa50e7ba9f4db4f2b65bd44d5fdb53b28
+Entropy.6 = 6016343ef281b7b00095409d04e82b9ea05c1d77c6406f14
+Nonce.6 = bc1f861f9fdc2e76d950aec2
+PersonalisationString.6 = 2bf2b23572cb84850583cf114d7faae63200e3f38c9b3334
+EntropyPredictionResistanceA.6 = ab7653e42cbbe3cf67ce991bb26e8b7610899743d27762d8
+EntropyPredictionResistanceB.6 = ef8334846f070c02af20b6e3e8878bca280109637876ee37
+Output.6 = 2fd73eae6cfb9ec5cc2ccde24e7821f24e50ce5afab05da6f835163f11d0179c7cc79ee345d678f023ac844d70dc90df5fdea4cba29e2ecc73e48908b60adb9482a841ef706d8575eb3f28ad9d0e878bb530b91f3d48c18aa2048046512edbce68ddd7cb64d47a13086653f418519fef
+Entropy.7 = 9ff982afefd6bc3919d3fad2544c494573ef6ece8791aaa3
+Nonce.7 = 80be7e30e432109802ed3892
+PersonalisationString.7 = 1ea2c29b1abfa186a5cf390496f06f6f7fdd456e9008b12c
+EntropyPredictionResistanceA.7 = c9426ccc6f352a8eda6d6c4fe121efb873eb49ac32340faf
+EntropyPredictionResistanceB.7 = 00b8d8ed1f3d9d0585079997bba66c2948b24123645ae87a
+Output.7 = 7600350fc5ed8ec8977ef9e3cadaa8311c4421eaa19ac5d73cb81ebc10dc959f3277d5f89cf23a693e4d218346fe4ec3c0dc97a6cc4f4b71608b25a73373bd54884c3f040e84137ccf6dd25ff6f26535dbb780732b2e372396c15e5423bb7fec32a5efd63b3de5041cbed73d36a22d5b
+Entropy.8 = 39e4580a05189a80f968b4540e7424870e7575c7b6bfbb8a
+Nonce.8 = 80eb28ff53922d98deb18930
+PersonalisationString.8 = 62162d3986c2e6af5b81a446d6ea99a07a8e9ce06baf7930
+EntropyPredictionResistanceA.8 = d16e3d20c8b805cbf2ce356e3454cab910a3dcbaac1b7eca
+EntropyPredictionResistanceB.8 = ee778a18d2b59ba8e72455ba50fd338ee0f9736c475a7f48
+Output.8 = 45d2c2a277073e3d9f3950d433d2e965a52a334dc37eae31b8b71ba3d99a26de11a081e9e114d66c3b25589518d1659b4f36c6d8d3b258fd1f6137973663c551ee3ba8494f1302e1933c22fa9638755c001977df6f4e9b72a5a342544fb48e4aa061f8bd590cd5a6539e1fe755f664b9
+Entropy.9 = 6685c0ab7a25137894dabb372209b13535b4744fe3ff375d
+Nonce.9 = bd21e8d1e950505e2d07d921
+PersonalisationString.9 = d5eaec2a41045f86bcb07c8d3d35aa40ae327fd6bad7625e
+EntropyPredictionResistanceA.9 = b1cfd52c7f088a2473cb8914229e620f4294c6687b3946b9
+EntropyPredictionResistanceB.9 = 00075e03ca4f17d927968d1b0a101448e0b11c42c441bf06
+Output.9 = 8e3920780aea41b06d97c2f5972860400fd3de054e373954fcef6ab9f29e10afe03e4e735bbe3b8b3a6856ff01aa71192fd8db35c725d777ac84d1393776172e6386a0efe67414129e78307235cfce330bf8a90802d5e78ab579128beb1ce02e8be92eb384e262fb423c34897f0c621a
+Entropy.10 = c0c282e30deda5937f7d99ac2167714cdb338cd7169337ba
+Nonce.10 = 5bbc673fcdd56aa1a680c006
+PersonalisationString.10 = 16218105eb085b1127cb9c73777a65e0e77bf3083e6f8771
+EntropyPredictionResistanceA.10 = 54e5602c3f9c6b0a397fcfd2f1c80d30c770bde07b371da3
+EntropyPredictionResistanceB.10 = ffd82e4a2505e19131a315dc5012d51c764e6bdf9540a330
+Output.10 = 33d336bd19309d3b3a8a90de8bee28eb6e9582a5018b9db2269ac0a9c9f2fe991a20e11451c439cdb29cc24996261b8c6c6e30b7dffe3f120dc5387145d0a452d0a0384dbcab0f37716c42bad5462815072ce71d7d1a1bd980b4e02d6fd2f0968113434459791131edcce14a538a91b2
+Entropy.11 = 3da333f8c375f9be21f298079a1cf7a374a65cd33bb7be0b
+Nonce.11 = c7599d772b987e3b1eec4b40
+PersonalisationString.11 = 542374ba8a1f75393ef6455dbe32b2a8fd59a8e78c1945d3
+EntropyPredictionResistanceA.11 = 89dc3bba0e5aa72a300459fffe4e3abe6992e2044e6ca408
+EntropyPredictionResistanceB.11 = 77bd2d8d90addbfe439a7cc74e7b1ae017ab0594f0e76e2c
+Output.11 = 090238f3657cc50e104487c145ed123bc9671452bec983ec356a2be1bacf76c7af54b12b7d9157f1dc76be81cbfed6e1c955d217171d16a512a45330316ce0e6ae6592587b144f14d722aeab07e8a4fc6d562a86359c164fcd325c96a55f1652bd5b2433fd4058ad685bd33d48364405
+Entropy.12 = e29dd28380497b06a942ffa5dad0009d459100f5ade74be9
+Nonce.12 = 33d6b84f368f01141c193186
+PersonalisationString.12 = 881bc6432837c5f6cd81aa79bf9e0f9ef7ee0112fa8fc228
+EntropyPredictionResistanceA.12 = 3fa8806e65eed7eca4fb0bc634f1763eb8baee9a051110c6
+EntropyPredictionResistanceB.12 = ba5b461e4a8ae6d34c39cf0353563a182a66023f3e37cd6c
+Output.12 = 2abc08d86c225cdb18e917e63eb783030c4da1718a24033576fbf598d46ecab00e5aea1ab620920e75b23c8da1cf8d6dc3762f9462d876df5d5c739a0c019b39ee1a870dfb44aa7f29fb29a2cb26cea094f49af2d1cf2d3e24dbdf01446a74f099669273ff60e5aaab15f09bd7fb4a69
+Entropy.13 = 47a1b94959a5639d2466c0088bd0fe963c25539772f6ca4d
+Nonce.13 = 1f2a1de50c51231c7d11db91
+PersonalisationString.13 = e2a84441939e9ae7daacefe7572c06d059b57169880ecd39
+EntropyPredictionResistanceA.13 = 76d5353b8fe764067eaf21bd4085ba45af183f9a777e735b
+EntropyPredictionResistanceB.13 = b0dfeb4883c8fbc2451103b869691395482cc90bea9203ff
+Output.13 = cb631ab70c41217ec385edf3e5371881742456d9ee441e9d1d6db1b4f0ea923025be62a760a061abeffcc8559f26fc36f18160eb181390473d3527f7d3cc85015b853a7e118422323f2a5f706e03444910dff044ab65ebd1b32cf3d5f7c343a5e2e6e89d2c189639684f6d42de04e6ea
+Entropy.14 = 6b75272cf75b2c92f0c2360c331b75f1eac07e715ed8b74e
+Nonce.14 = 941ba136d1e7dc98eb07f297
+PersonalisationString.14 = 00da28ecf990ff6096c03d72e07b5fb17cde1c77c8f91e37
+EntropyPredictionResistanceA.14 = 4de293b3ea5c26925d39d5376ed5fd43b9b775b80c6cac08
+EntropyPredictionResistanceB.14 = 4e7f27a772fb8de77031b24cc514c06086de59989856694c
+Output.14 = c1ec91ec7585ffc05d765d0a9e30f62bcdc115426af9947eab68b6c9a88e6a11890704b623eb7acaec77bc6988da9246e10aa3eaf65380f3083bbecd4a41ccb09879ed9c46669a78102b7822b157d0d2a3bf09b452300ccac217db03b455382d8990e3bdd9a2a6461b19dfdfbad5910a
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = c38b887a0fdb2b64d783672802553659923701f1f608f4b6
+Nonce.0 = 5f0bfafbdf7ba4ee2d7324b5
+PersonalisationString.0 = 52c72a7b704731d59a0a4356a3d9bb081b1b3a75dd7b0ca1
+AdditionalInputA.0 = eafbc4334c88b2b4c5786045ff4400f2549aa2c164b11246
+EntropyPredictionResistanceA.0 = 250bcfcfa8a5a13d44e05e3bce07dbadbc77f8ddf8b6a0d4
+AdditionalInputB.0 = 54355449eaecdbb79ab1db3c3cc7ff9068f0975ff64c6701
+EntropyPredictionResistanceB.0 = 953fef1a3bb6f426beacd3b9cfa57bd24258f2a30c7c6179
+Output.0 = b831b4bb2ac5e9b3fb7718c751a5e4db0bf8aabf0124d34096fc91ce70073779dce58c420507b1839fd316bf3d1672ac5b6603640a0ad653b76397c5ac0a993caca9ac6525de141b175a3fbcc4229ad13143fe3aaf3604148a2000f9182245e9faaf1dc51cd5f27f50c7dbd465fce80c
+Entropy.1 = 81d3ddc03f4d4b5c309b117eaac0cd387bcf613da7ac91f2
+Nonce.1 = 93c208911d4aa3951f2f29dc
+PersonalisationString.1 = 405b6a5db9f01f0b44316e40293568119b1a2309737a5d4b
+AdditionalInputA.1 = 0d855c7580f595b61cd60c25fbd93c4a749ee2dbbcb1ffea
+EntropyPredictionResistanceA.1 = 1d0dd804c0591e1b76bb738695e6a09f4caba56ca38ba333
+AdditionalInputB.1 = c657b6d3d4a4deb0b4994e7ee9f30278d971571f7ae16dd8
+EntropyPredictionResistanceB.1 = 3b1dd2ee27f2e333ecb47689ee9fe4d41767885b9526cc9d
+Output.1 = 706123469a591e31473c0c42bda10a3887e21cce3f21534d8cb6bf585579b58ed5afe5ed04da01138abb706ccd9802aee3f11cb83e7a3ee32e3749518f70b70aa520c0ed3f3f376722fbc2770cbcf0a88d69c7cd018fbb3ec6e49705f0853a496333bb55316afe3f419888c3f684885a
+Entropy.2 = 1f81b747fab196e9bedf883e664b1d1294be1fb48a189411
+Nonce.2 = 151fd4410c019aca5033e5c6
+PersonalisationString.2 = 8a3d7f12f99260348fccf8ae485bc21f832182380b894413
+AdditionalInputA.2 = 67f16b824a17179c1779295f9cdd8ba6a68cef52f955cd72
+EntropyPredictionResistanceA.2 = f3fc58fb45adc820f442fc2bc4a0a677dc0dd0494bf756aa
+AdditionalInputB.2 = 937dbe2099e16a571c7a4a650899f27e29d62833e5599581
+EntropyPredictionResistanceB.2 = bf50464548046a70313aba1ed0bcb2bb7b76d12bf7de4b2f
+Output.2 = 35bfa648b9ad375de90ecd6acf5b66e2aedf9bb50248dd21c56a07a73966eb22b588f1fa3c42b2a23a73e09b1481a6fc6a84625020f25d8d7aa1e787897b0ae07411c9b6c100c1bb405830b4da8e78432c41ec0bec2fb7b155c04c98998614af587114893864a16b84f19da18c2efc0a
+Entropy.3 = 68d6a4258ebe219a01c94c80027e28a2582133b5fe0941df
+Nonce.3 = fb709342c1688bd4f5c98af5
+PersonalisationString.3 = 84584d16cd6ee3eafc4605b07a5a1416a7acff91c65892f3
+AdditionalInputA.3 = c389d718705016bef7567ffdc4ec2d039f0a241e12eab513
+EntropyPredictionResistanceA.3 = 03c256ca219cb3cda4861f8df2b93f145b934b8f660408d6
+AdditionalInputB.3 = 343e2fbcc46ffa8bf923058ff833dda6852784527dd612dc
+EntropyPredictionResistanceB.3 = 3c03cc189b109abb6ea5ea15346cbbf56354f9deb24b85da
+Output.3 = 6e5f7e5d57dfd4b6e546406101d0b4b798efd123bd11c30c60f24feebfbc4c8d56d7dd9dee472d4bc9e77c07b38a09aa513898c9bc5ece7e6252e76809f5e9a45d903c2c24e73c57b1961ee97a6b3dcf56d67d5dc6d3d6f9b304dac1b6b20080554fdb184106da32c1723fb3a961ed92
+Entropy.4 = b9cbd7225fa9de1b13cba5036308276c703bf4a749b4d47c
+Nonce.4 = 19bf0264058c28cd43fb99d8
+PersonalisationString.4 = 479407217cff93db0b9e3d4334a4e2ef13bc567a355f3aaa
+AdditionalInputA.4 = 58d90ce7a08ee00f11e6ff54722ed5c15719cf5d23f1fc97
+EntropyPredictionResistanceA.4 = bf839abdf38552c141511ecfbdc845bf10b27429afa00a38
+AdditionalInputB.4 = 655dc69bc12eb97ad49277d9b9d5343693ecfad83c905331
+EntropyPredictionResistanceB.4 = f01d205ed4356a19371d9b044fba0054d9156e6a6bc62bd1
+Output.4 = 18778137b6067e0161f24028fa24b1e69e0a84e603b09ff2193bbfa71b46b17621cb299eda8b3cdc8c5131223c108372afeb45f61e3628660ed5ce241c786a2de17681e6500caf3b38e159b376052d215c687ad54866dfcd1456d845bc0c353e6ac8749542d9d5b21e830520d93cb378
+Entropy.5 = f6253845152cf5bf66bc947279f168d1d21df8cc56500555
+Nonce.5 = a3d54cec8a0c459ab3c91e19
+PersonalisationString.5 = 2d21b2df4595e18011e5297934c3c281a2351396a40b7edf
+AdditionalInputA.5 = 4684a76bf3c24b5c059bbab039cd236fc4fa32d2804eee95
+EntropyPredictionResistanceA.5 = 30183b51526d8002e2a44afaba4fcb8713491c93bb983644
+AdditionalInputB.5 = b8769ea62e27c048299b244f27c987ceec513c1c778be8fc
+EntropyPredictionResistanceB.5 = e8c12b370e0a37ee7fe5848ab249bafd6e47e739757861fb
+Output.5 = 2d1d3ca3307d6b0856d4ca436c3481af9576b14fed8050c1a9681bc2108ae8757ecf669aba5fd1d964635bc740fe70e3180ce0f8c6fe007c3eea61bbdc79be06be5af050376922aaf36e3aee31bf3ae5d2df1135992a0cdeb4c0c8b723072a018cf6576348be326bc0870ea1ea6603e7
+Entropy.6 = 55d0c2017331139e3d42ef44b45bce557e618361cc027001
+Nonce.6 = 22c9a1003be712e1e3096b2c
+PersonalisationString.6 = 785b1f90cacb1f06549aaee7e43519f95439d469e6bc7f08
+AdditionalInputA.6 = 06d94e3775119b5f0c5147f2d05ee0dc3030b4ad9579aa99
+EntropyPredictionResistanceA.6 = ea572a57866b6e51e31936a90e093498beb83bae8d7b0fb5
+AdditionalInputB.6 = 535d88e20669bf680f98123e48a7a8a0656c7c327b9cd6e3
+EntropyPredictionResistanceB.6 = c965fd2cc8e02a61fbdb4d2b1b7ea07199a3aeab18b93982
+Output.6 = 5ce98ca62fffa9f3d80c1970b53736d782ab0ccfeb2aa249520dae23ddbd743204a82cfca482e2b44d6d23a1ee3e06a245daed370227f6e2fc3e7564ee2f73c677e5a24875fea2b716753f45a42443c09de4b5d9cc3592c7440b294bfde88f14028fdeb95f4bfa94e8f94ec5c732dfb7
+Entropy.7 = 0e830f9bda693d9a7e92cfedb9e4dd18d3b2a1335dfdcef7
+Nonce.7 = 7f5cc5266b8d67ed590187ba
+PersonalisationString.7 = db050df33e78b0533a939b9848c3e3d53d991ce7b55f7164
+AdditionalInputA.7 = 8f49bf21d4054d32f7144a4ce830ea88b9ee59c3d0520985
+EntropyPredictionResistanceA.7 = 28a262a9ea3b7fcf94239003576cec503378cc674ce172d5
+AdditionalInputB.7 = 8636a575821311e26804b64c36ee6cf40706f11aeead4585
+EntropyPredictionResistanceB.7 = 2dc27839734b7fbf7a7c784a4016f4817a055a48ae1b32f9
+Output.7 = abebed75ca1ecec3e940ead59ecaf8af614224602c6558b47927f6237f90caf6ce05aafe0711d7582933a876d81a9c59e0768baa510520591ed229a7cc6c2f0ec4c80eb52396afa7de9199eb1b8ce1a608051f2af16ca71500077c1a12757555b5f46c9fcfb04332fc53f8547564b89a
+Entropy.8 = 20076e61098ad6d6f7eefa0df09276483aa8c3466831aae5
+Nonce.8 = e7bdfc49c80c8705a3c2b48d
+PersonalisationString.8 = fa9b7b60a705e8e19607e6cb316316b61079e75c76546c94
+AdditionalInputA.8 = 2e345f231ed3858a0deff6c21c6d92c41349f01160423afd
+EntropyPredictionResistanceA.8 = aaf7f9d575d5afcb06fc7d2464409c5442555a15416faf6e
+AdditionalInputB.8 = a8547e940999941d04f5bb420f49cde85d407dfafffdc5c3
+EntropyPredictionResistanceB.8 = 36d9768d043eeded306dd1dae86b469fd1c6dc879309d2eb
+Output.8 = ab0bdbe0cf9a51c0eaf88cea262a26cb1d593dbd19cd66cae0eafcc903452b9a63810cb9095920a64441f3e55f9bb106e29b4ed9d8091c000ee8a0421d756f969ce0f188d54409127865d34cc9998700157b59234c97cc999d332102f5a9fa016163cb6831b8d4e269dfdf1cdfdd699b
+Entropy.9 = 2eb8eebc82d0440d758d4fdbdd4deaa795f33d09361a73b9
+Nonce.9 = b6b4324e70bfb9c1efd1949f
+PersonalisationString.9 = c87c3bc8845125f45194fefc8571507781b58a29e5b36d37
+AdditionalInputA.9 = 73c7b7e7234236572ddbf0d6beafe340ee2592604e2cc969
+EntropyPredictionResistanceA.9 = 930263a2a764befcc7813cd25d7fd7173221a286eff4cf28
+AdditionalInputB.9 = c0e6e1d657b46b2a2bc215803fd0dcd6afd2e4dde8ab8d43
+EntropyPredictionResistanceB.9 = 6fa33a0b206f2505f34443e4121ec354cbcb66b90c2e2489
+Output.9 = 8bc2762931d62db5ce0504d5bb4de9e5db7f42f1ca3a91d4ad307f9b1b9317153ca6e7d3843d9de43da0735c811aa676a60f4c7398e3b84b57ae7c11b5d568f9f29562ca04e16e37bc1d1775bba0ac3402e1dd51bfaa34a9696b3f25db70cebf3241dd8f4a5637dc67e2521186ad3f33
+Entropy.10 = dc139cfda5c9b973a225b761d042407c439684e4fd0ffeea
+Nonce.10 = b3b2458878aed493d34188b7
+PersonalisationString.10 = 1ebc97c18d3d57042c20f232282d55d475a3716afad19cf3
+AdditionalInputA.10 = f78872ef8bab975f5e25fd5737173d10a9897dbe20f9e008
+EntropyPredictionResistanceA.10 = 6a3b7f704923348e7b7b7544a761d832e32b8bc02fa5a8d5
+AdditionalInputB.10 = 6452d9685cea725075bdcf27d54fd05f933a4014968dedb6
+EntropyPredictionResistanceB.10 = ed9fd7eb91bbdfb6c8c27ce275124c56468f2a4a26cf11da
+Output.10 = 60439649c95cf72525ee1198baf010274d49a99d2179f153b86e52eb755d93272bdfc49ccb586fb80783180d04f6340236496dcd7440a9c4ac1024e0f2048d6b1cc5ed0f7d3c810b945f829073232ff1b30d2160140515241d28e7b2ba7ad15a72485ffbf702ec38c43a3e5602f5fc1e
+Entropy.11 = e156203a7a55851174e3fa7eaeb14b776938b2c5447c9fc3
+Nonce.11 = 10b694bad3cc0d8d1b3d0a27
+PersonalisationString.11 = fab1640c7739dc1a3d85d0d3f8468041a370ded8b9e71c54
+AdditionalInputA.11 = 998285e8c942b7dba3a4ae0a300837971f627890934b4545
+EntropyPredictionResistanceA.11 = 86f0e2ead27158c63d9299f8b5487896445980de541fb42c
+AdditionalInputB.11 = 3ef9e326097546b05e96bae7338237bae3b037a6571ce603
+EntropyPredictionResistanceB.11 = fde2dfd053d957867b36eedab75216f5686801415c55a6a3
+Output.11 = feafdb5fd77e6539fafe60d04c84c452dded14a97204838d7794f562fc51e6438095de8c96bd81a2502a5d229d060563590e6f0e1caad6b35c30adf362c79984a24a9a2d2f1b7c89207e2df9aff7b7f8cc407ef8ab5067dee5976f63b80609aca42962a01c312fbad6fe06598dcf9be5
+Entropy.12 = 68768b6cbb5872141ee97f465f58f9af04b6b6c11ddcc40f
+Nonce.12 = ac4472c171c5c68e53f910ff
+PersonalisationString.12 = 9cf787c2fc73a80a976ce404adff503f313ac25d6fa31959
+AdditionalInputA.12 = 8055331e6c61d476dba6cc98614143e43f567fb78a0dc8b3
+EntropyPredictionResistanceA.12 = fedd2f81b4d8f21db41463483e95f28f0e1a2b1950e8cf97
+AdditionalInputB.12 = 2930346a33d14863b70ddbf30d074f60f559628f4c89493a
+EntropyPredictionResistanceB.12 = c4814697bef57045b9089e76d1123886b052ecd483717ba0
+Output.12 = a24fcf9e4a0238988a7239bf9000bf5c65d88d8e8d975bfab78bf24a6427fa897a64a88cd357c377ad65e42941433c36784d46a41f1bcc4019213594b7125fd9b031f66951b8d245f7776bb99c3b6c94c7bfba20b187398d6ff2cc1af5694b626aec1387952feb724bff5f8e994ef5b1
+Entropy.13 = f567c0abc3b0f1c4cf2d606bbb342604111827644716f9af
+Nonce.13 = 895aea269a33b67a729f217b
+PersonalisationString.13 = 0097c49b5702ee56bdf3400321e2e089ed35a62089a305d1
+AdditionalInputA.13 = 8d3a2981cba1f5440c38d943168cb9784ef834e5af39edf3
+EntropyPredictionResistanceA.13 = c5a5bf48eaeae03d0502cca284c36e78ecb35560b9dc0305
+AdditionalInputB.13 = ad89afdbce78b0b86648737ac17dd589001a29ca5c06ed2f
+EntropyPredictionResistanceB.13 = d3fa98f0246163e115bae12823c86fdc0773b6796cad6b9d
+Output.13 = bbb4bab0288f8b3508381673429df54281f786b8a3fa5a89eae791ef6d3cca194ff25d23db8bf80605690607d66c0b3566557d46f935269cb95b1a7ce6a377cf3ce301113f4ae98b8fa8b066d7e87e28747931690264d89171ab86eea0cfba20c10ecda25decdf96e65a4fa9a41bb679
+Entropy.14 = dd40f792e84da49232d4fdb303b966e8c8dfb40f00db8e62
+Nonce.14 = 671451555f48d5f2fe4a0a64
+PersonalisationString.14 = 6379513104560f044800f5122ea7b060f4bc88243d17ca72
+AdditionalInputA.14 = 61a1f7ec7948a0b0f6914d2d7f3aee68e91a0bcf8839fe5b
+EntropyPredictionResistanceA.14 = d18c375fb7db2bb3760f03c34d9beadd4f5a75b62cd4fb70
+AdditionalInputB.14 = b87bf3d164ac955913ae4a780ac654d9a67c37c8df1f79c7
+EntropyPredictionResistanceB.14 = e2b5224119118410592ae0b238dfd75ad576b3eaa1848313
+Output.14 = cbf31760cbefcebf50289b9ad8e9443cde14fd6beee80c0bae83cdf77deb6e9c77ddcd0316667373b28b9431857e6e7cdccd8b6906927f66b362452325339a035b23baca8ce1697663e4879cc2084fceed28e9bbb2dbb91f868ba7626f6b7e5ea87eaa48ca50f9b76ac2c74b39bc9a86
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = c668037857e4754529de0658fbffab4c366069979a248dfc
+Nonce.0 = 4be751807fd142760ac440c1
+EntropyPredictionResistanceA.0 = 550801bcfb77b24d9fe751ec6917332bb17600f0c518c04c
+EntropyPredictionResistanceB.0 = 48b36a4b1f84a5cafae3fda1e11c9c06d635964098ab9c08
+Output.0 = dae723110697db5632513aca5e50f94c2ada5655f63add983a8c42ad7965345c460a1ac703027629adaf7fea0e57a5a80922ce6a795919127b58b78fe0027144a60c096e349fbedfdccc185b31da83efc056f91ed30d47d09a966fd8b6abe190c0f2e4c77f690951edf7fe8d8e9f28a3
+Entropy.1 = 224e5c34872e05c5ffebf5f3d4b676186fb4ca0d3cb7a885
+Nonce.1 = 219577ac9933a2e0cc3d2c21
+EntropyPredictionResistanceA.1 = 191c2e0e8770c2898a59f3a3dfdafe49f4f48b6e720f1360
+EntropyPredictionResistanceB.1 = 919de9d275ef531ebe95489f175880a3e97edba0cbfe5f6e
+Output.1 = eaff787711919add49192c4001cf2ed015079a00b6f3ecaad663b6ebae34425eff311c8c239574f9b608ce21abe44dc4826fa1051eed1b8d94bea6c744a3939052ab0e8ffe982f44dd90ef1cbe94f91e9fd2ddc5a891e97a61df7f5651b891dec0b415cbcfc672f94d5e1ed13e76c56b
+Entropy.2 = 0817be067d28d8bd5aac79a784d1c8609572e026a52a6e54
+Nonce.2 = cfd164d50347a378d7ce8566
+EntropyPredictionResistanceA.2 = dcb54875bbfb365f3c40a4e93381ee942fcf14ce07a67133
+EntropyPredictionResistanceB.2 = 0e270bf06c1de84a16470c574bfeb3fbde1829fc7db2a54d
+Output.2 = 35a78b6c17e3925076a5d707a42c5d833c923358f102b24028f62dbd1e8bd5ba3a3c75b605170737ec74a71bdc7bde00fa5d1b2eda5a199db405b090ad68f81c61b23238ae34179dbb88fb518e1fe5eddbc73a5646828014b5514c17688217f69663369b174842025d688e020e194e97
+Entropy.3 = ea0b09d0ebe1b3e7cf771c341a385cfc6ed32b2176ba3f14
+Nonce.3 = 1d6f8c36e79a73744c2afab3
+EntropyPredictionResistanceA.3 = ad5974da7744a8070835913087f4099b09d79279fe257a6a
+EntropyPredictionResistanceB.3 = bf328ee78576e396b28802974f132a7cd000a64e1992fd9e
+Output.3 = c5871027e567e9c676f3ebefcdc32d53d4cd6228b0a5267246123b99651a2b485bff047d711796381c77d39bbd9aee4b6883d0f3080f93977876fd833f349f377fd3c0b922c4dd870a54118b79376e0a805d353cb3e6d0dc6ad395c0e17cffa8647ffc209253b64c5dc2d0595bf771b0
+Entropy.4 = b4a62ab848307e499cfeba7b297e5b00f3de6954b953a025
+Nonce.4 = 046bbe02341f5b460e377e0c
+EntropyPredictionResistanceA.4 = 889edf0fc6af66933e156231d8a7323cf9e97da5d57c86cd
+EntropyPredictionResistanceB.4 = 811857b363f447350b34f437b63fb5595a32e69a850a9dcc
+Output.4 = 5a2655a947c8649c55552a85f8cbb2be7235a8b1feb1826feb1a85538815b4aef7affa619109f325f36c594e65b61eaa0987fc6199036d56190b4834f863b94ff2d661a3ed77736a8fe5c1fdbd5377cf6bc4c39c4d3264121dded25590be2bf8593b8fabe430f52eb2411d5696812785
+Entropy.5 = 98ab95cd6a443949b9daf535cefc9ffc32fbed00f4ad4c3a
+Nonce.5 = 54f580a283307964811dba8c
+EntropyPredictionResistanceA.5 = 0a2e974a11637d90acb7cf07c5274ca34bc7ea394661d7b6
+EntropyPredictionResistanceB.5 = b2a8261ec470990693b057e660c805cd0e108a10d452b62f
+Output.5 = ada1d81e12fb5e5b5985e6e93732c5af8310e0ea01b5b79d9625e0774c94a06f74289f7fa4f0bbba9b08bcab916549cabbb0de57b7b046bbb33e03a0e6cd4e28b31cbb448497ea55a0ee863b033d57b42b7fbcdc7efc217717e0c8a7e740be29a739caf3ffb046c25f4acafd8799907c
+Entropy.6 = 8ef4cb2d5c78ce43cd021acb87b8f9ece0dd562c56206114
+Nonce.6 = b30779b6ed0395ea2a8c5700
+EntropyPredictionResistanceA.6 = 53cba411a9bc507a7c141aabad87b79587b2d6b86f8da6c3
+EntropyPredictionResistanceB.6 = 8bb88444d3ff43f7dcb486a22ab8ecb8893b1b01b944a5fb
+Output.6 = 14f4d4681956e3f2700cff94c37e53d8fe4fc39bdd97b6c0ad4359fa65a35a8dc6eb0cf5df97f8e5b19187ad6c5b77d00ada9aa765634fb3f4d66b63ab2ac2246df80218fbf75acd9865c7efb25d1155d679e1ebf697306beed9aa2f59e08a689da180ec23ab3ee196395eaf7d864655
+Entropy.7 = fac20a0938668af155b5d1d547bfc516c1f4b4966a035f4c
+Nonce.7 = d6fd7129dc01ae4205223a09
+EntropyPredictionResistanceA.7 = 020dc66818cb3d996a733c22b0b09cdfc0fffec04c6d7a33
+EntropyPredictionResistanceB.7 = 69be4f2867ba6c139c9208becf5b0361dd6f8e865de6c841
+Output.7 = 74bf581858bada7f3ce7a929ddedab4d13e8ededaaaa74c7e4e1c522ec60aa63ec6a52632e9c9cf71e2321015a163122d869b87ef9a485a3c49463607ff313db76fb826395875d9a5608c275454803ac7dec6c15a8978d7b81f0197a4426769924fd919ddba11e403a247fbb888611bb
+Entropy.8 = 4f933993b7f036b548559d948e9a5c7a9975458e6df2978c
+Nonce.8 = f50699343b5617e0150e04bb
+EntropyPredictionResistanceA.8 = 8f49fbb361c2d3b4b4eb3ed051378f3b47ef8640521cb20b
+EntropyPredictionResistanceB.8 = 51d8a523357e92a079323393a4d206980418965dbca58dac
+Output.8 = 0d48dc8ec75804298daddceee2ad4689be30c645d3cca23a1742fcef2b101482de59b0a4c0e6b3ecc3a42a04c8f10ef215f7818565318a23db04b9953bd2437539f3b029990e758e2a16ea14256d422d222e58caac6a0ce75aa02c6d6416c0b82b9a75528dd02bbf162e8820d4669612
+Entropy.9 = 826407e86bae74d022455711917f446e3bfe663c87a3efcf
+Nonce.9 = 00b8c0f8a2cdb477f69066e2
+EntropyPredictionResistanceA.9 = f9f285b29cfc031db364b7a5d06cb60840768dbc1c0f028e
+EntropyPredictionResistanceB.9 = c832a95556dbf6dd570527f7bf5de5f9c35c39d43de73e56
+Output.9 = 1fef53ddceb79ff69ac78d8a71e5c7e52d00fc12fd3e0518c37ce62a057754499ddaedb13a50f021a19371eb9b2289553f46d5b1a1c3171ed8b206851893681272778857e778f7b45b1d1668ee721f04aece09b7a97cd1a1735c32b80880d80dd58f1af3c9c1ccc74578bef2a2980877
+Entropy.10 = 0573e7e47023c311035a6698fa495c13336453422a80e69e
+Nonce.10 = 0c76e79c8edc8bb7f6ba6916
+EntropyPredictionResistanceA.10 = 874d2fba1ddfe0d5d4a3ae7f95177d40fc5565dfb8f1201d
+EntropyPredictionResistanceB.10 = 2e9e97dc2b17b9d35919992cb127addc6bfe53157800f3de
+Output.10 = b37b8df091e4c6c69655e6139ad4ea067c198ceda735dbd2225ea3b00d61047d5c7608e9e9f414ed7d46d15756c235c05582d8aa5617f74a4befbfd15a32daa9c68756dc4a8c002db35cefc067f696c810cdfe48a34008001b55e36db211e752ec8c5e8dac999f9a1f2a65d0932c68e7
+Entropy.11 = 7a616f8b6bb190b7b83b630b4af4d8be1bdbfca5dbe2b389
+Nonce.11 = 48f9c8b9aec0e2a37145e730
+EntropyPredictionResistanceA.11 = 30a61f7a52eabf88c020271759e4c4073b6fa7a51e1f35e0
+EntropyPredictionResistanceB.11 = 326e5ad284e764acbfff9348c93886ddc3c65679d74715ea
+Output.11 = 2a926d4b337a38fd4544d411a358268e1ea979d85ed7add113c0675fa7a83a9b005b4b9b2d8b5adaa808203f82022f1b42e4fa439becdedbbbd79d1aeb92caf5709bb4c139da6fda0ac4503fbbada8204d04b53a8a96bbb5f3ecff3464fa4dd96ccf5b377b336790f0e7b221a036affb
+Entropy.12 = 0e36b0c40fc87e0017d82d9a1b755b3e8b399d59d4c99233
+Nonce.12 = bb3fd125f750c4ee2fbeb578
+EntropyPredictionResistanceA.12 = a5fb5762aabb19af0c877247329d55ccc1606218062e10d3
+EntropyPredictionResistanceB.12 = 96332dbd1a6006f291f1f25d32aedccb554edbb58ca094d0
+Output.12 = ad44d9ff21152a418161d86800331415d9ef0b7696ce7911bde3df0ed7c05ad7084f002293fdce0e9964c37a05bd7a1e6461e5d7dbf7125f7a4ee1a951228f8a9747baf44781cb20ae0505fed7d9ada2608f5b52ecb248d8f85ac8eff33e39c23ae27bcc63ba71d09322ce47b33637e0
+Entropy.13 = 50f0a64b4067623c6deb75c7be9ac8f3121a0942692aaa5c
+Nonce.13 = 55c8ac7a7d4abebced43287c
+EntropyPredictionResistanceA.13 = 22d46ca16137f13dd507b05b4f6629e611ce397c346c422c
+EntropyPredictionResistanceB.13 = 143b5895ca5e83bcaeb316953329f9bd3083587de0fdf446
+Output.13 = 3bed4679778af12c2f5d8aba96ba5d08fe002a86a71181f514a95ecf0124662a38091cf4e9ba6f18fd19df044f39d754847d10c8195ec95b6ea79460ded25c0a932cdc2721d588ab69c70c118eab7f0ecaa2e81b9567c7413f4026a9893a3d7184ddf7a9abe4cf7e87451213102f06ef
+Entropy.14 = fe1e0df4e9319737ac9f702d13e04ddac5c72ca1f1483e45
+Nonce.14 = e0a39b119790edd33ffd0bda
+EntropyPredictionResistanceA.14 = d931a0cbda3985a34b0a2eac42e9bc5ead10520de4e7d172
+EntropyPredictionResistanceB.14 = 518e2480b742f9c30098a6d543d1669678084b3208b5375b
+Output.14 = ef57d91db4d94aef743f1528e0c27b69654e3a854fb7479d25a8796b06c85884f328db9a09deb9be55cdeb9cca2a5a00ba56e28d2fa0057ef1ccb00b22a0a747bf15e7b303b990bf2fc3903f96cc55e69d8808c9da93231e5e859f7ec9edc9961dfc9b30b30ce0f43a3d65da93a82377
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = b621bb5c4d800723213f21e618cacbb4b480fb42619c82de
+Nonce.0 = bb315832729f200669d1d55d
+AdditionalInputA.0 = 73bf5c448096828985b9b70b831f68dd7615e5e4164b9016
+EntropyPredictionResistanceA.0 = 4a8b17dd32a3f98fb059a1b1d9afcddc430471add4ce42cd
+AdditionalInputB.0 = f6c39f4d4305caa9d2a33bd2ab70d69ee134db9b9f71b64d
+EntropyPredictionResistanceB.0 = 64034030e475e55f6a51ba9a047a4ae3bac609029f1d667b
+Output.0 = 1f7a74bb39404f10a80ffb8913df1da42e9f567c9996ef09ff47469530bc98e202ffb2d36abb290adb040fb8cf5c8789f40faa4c81ae7c365a4cc3b47ee285a9646ea50ad851dac80ca20305e40d5bef6e5188af8bf8c5cd8a698a51a8495b71533ddefd0179a68c5073b942d18ebaa6
+Entropy.1 = b809dbfeeb06891b8f59bf22d787311de89763a96cd1a028
+Nonce.1 = ec9dd660367d27839beade74
+AdditionalInputA.1 = 69f5223a321369d877f4e26c3f13831e69b8317f698dfc9c
+EntropyPredictionResistanceA.1 = 1e10d13cb1608ac337cbd72655849a33c0cf54b52ec7ca8f
+AdditionalInputB.1 = 06ce5ee6a5b47d130854ec0d56e3a1fe7657ee284eb6eecd
+EntropyPredictionResistanceB.1 = 49f3bf143f36ac721899c124a202c4e79e66bf26310a7447
+Output.1 = 6369b9d0663303a33e1410b2c586d92f67026726fa66bce81d3675570383e0631953d31872a25d8d9eca67fe81de0c512ecd31f20cd582cb046cdd1d6ffa788cf452c83daca444ced0b82732b227d1cb735899cf0dd2e49b825c03fccd799d534255466a8cc690da2d277f3d855b36bf
+Entropy.2 = 38904a3f1403bc54bb9658de8f045541e6ca7248cdf56905
+Nonce.2 = c304427ceab87f5297533a71
+AdditionalInputA.2 = 2e5cfb637ac98129a890a95a83a483dbcf6d5867bdc78faa
+EntropyPredictionResistanceA.2 = b0ac92da0decfaeca66484e251781ab1a7817ad20067682c
+AdditionalInputB.2 = 60500fb1b0c28d315fc4ed991de821d71b365a038a316a0f
+EntropyPredictionResistanceB.2 = 3f4cddcf37793db0af55f1b975827c1e8a4181ac66f89cc0
+Output.2 = e01c5d64db095d9e3e18aef2d74c4f998c6c255a3000d650b8f1da80e6d5f58c6a2813f097ca3b32c950740cca816a3b11df46c1e6a6bbe7da74e6bcec209e042a7ffebf256940e5a9d587c53ded18bc6476e2985c6aafc381fa37d6f6866f573c1826dc0d2709db0fbfc7d0374443a5
+Entropy.3 = 15a4086e7f4be1ff487140dab02c5520637f43d26f9e1ba6
+Nonce.3 = f1ee825c1c798b7e48358f72
+AdditionalInputA.3 = fdc78d567c83267849bf846e4589b56a254cc3614af3358f
+EntropyPredictionResistanceA.3 = 51e6e18bf103d8a82c28522904cacdfd82ea5b08c17429ee
+AdditionalInputB.3 = 5699787e673e733536672c59e1b49bba0ca6b2ff713fe0eb
+EntropyPredictionResistanceB.3 = 076999ab6d58b1a9d52bd128c4dfbfbc67bc1343552373f3
+Output.3 = 548431de303c64307bb077643e92822d33e235094c350ce9eaf2fa6eb3bd11170a29ae1a1d3c2a50f031f02cd63d2910f4bdff7aade504e5269584b30e52c6146f751281460e00d70eb5aed4a3fe11fd5c469045399b68dee7747260ca1fce4119a44a9c962b6594dbfecb531ddc64f8
+Entropy.4 = 27f593cdaa4acd69da4182d89f60305867a033e835dc2487
+Nonce.4 = 063a6440bba4c128a8571583
+AdditionalInputA.4 = be673368b4bf54feab15c82204d6b0ac1511e4119b328c53
+EntropyPredictionResistanceA.4 = f81288d5736c462d49265222f74dea28286197c492ce850e
+AdditionalInputB.4 = e96d17eddfd839f3d34ec6f5ace89db0a9db14b9642820fd
+EntropyPredictionResistanceB.4 = a94db4a4b4d4e9a404194f6433977e313f548e2d25d928bd
+Output.4 = e25940698e70b31ad2bc02d8a315e3dad4ce4c89022fedb45ba1fca57c9b5f6df5a98b64bf57058cd0106fc8caf2e943d4b21961dc36363d5b939a9d28c95375a04b9211e7b9858b193bd9f966f5d73dc368d7604f4141e246d194bcf4f07cba80bfb26cedffe94fdaa86a895a915df7
+Entropy.5 = 92841ccb234a0fb6639ee43b8997508349bc2e97be8ff8bc
+Nonce.5 = cc45a4630e12b470659ea12d
+AdditionalInputA.5 = 9d38fe44ef93718495ae454d9b8cf0c2ac33c933195495cf
+EntropyPredictionResistanceA.5 = 5c9ad907c625980b06ef91dc09eb4b5e4b03a7bb86ce4e14
+AdditionalInputB.5 = 94322677198410cabaf43d55fdbc047bc2b431616ff1194a
+EntropyPredictionResistanceB.5 = 339181d4c5270a19061d725ee20ce2f3b5ef8cfa30ce75a3
+Output.5 = a9b32a5d90be04fdae0cd37f62075c16593e1805da986260ffebe6566f256550192ee239d764c1cfbbd1f88e25832448423fdd3e0d555232df3e79467e99622bb86556e7b72ede938d4d41da35e2f8322521b42a4d89387e60878077e55255f8e71c74d7e39b3be407de68877b48608e
+Entropy.6 = 12e5649ed226c867aecc9d31e3d492a035f33c41e1470738
+Nonce.6 = 15d4363a19dc276faf6febae
+AdditionalInputA.6 = 262dd82bbedc48708365263738b0bb144b1854bd81a0cea3
+EntropyPredictionResistanceA.6 = b228376a4178227deacc7dc4dadb0e9abbe4a1d2e207d8cf
+AdditionalInputB.6 = a418d0806a2bceb3fb0e634b311a00800a42a131194234b6
+EntropyPredictionResistanceB.6 = 7e98fc5bcf47c56ef3f851df5bca6e00368101cad9a90e9a
+Output.6 = 54ff8d83fe80089c6298dbce3e6640ffd1ce0abd05c5785bdae3edf4ba10b60b0e907342f953ddea78dd3f25bad8a50e3ee52190400b9828012858c5d5d9435901ebe12268a27088f84607c1b141acae9519cca84258161dad6ab4ff584195c77ac408ac14cdb438168ea9989d9ff8da
+Entropy.7 = 1e4ef310d907779062b963d5c71de82a0a3c043a2607c1c1
+Nonce.7 = 3eca29d3df8205fa56e467c2
+AdditionalInputA.7 = 7e0019fab12351cdab8f71150d0948f0c9fed697f2e86cc5
+EntropyPredictionResistanceA.7 = 821e3f1e03c66f9d185bd29000bf8dd207d48e8b9a7718b4
+AdditionalInputB.7 = 9c0c9c8229bf5f59ca2d3ea338bda63334f50930a3db99cd
+EntropyPredictionResistanceB.7 = 45a66c0b5ca119a204a54ba5f3d704da9b91f1a4a5a355b9
+Output.7 = 686a35b69642683f90c77ff1f9e87e717b1ce3841e4836ef079d35dd18ed9029606b6dcc1f8e5e527f4c75705f07063bb58cd1567dce8a98aa3c67c58b1574b0ad35f64ed5e17ec078629bb197b78114bc25a697583c31b30a03d8cc885389d3ef105e7ce12cf50177da221168ed5300
+Entropy.8 = 7a6785281c3f307fc2a6e8cd0e6a7a6aa151c3998dfb2dae
+Nonce.8 = a0073dd8a3e496e6a2efad2a
+AdditionalInputA.8 = 69e9a7630e188e930fc940a4b66eb5e3781bb5b2c19774be
+EntropyPredictionResistanceA.8 = ac5bcdd302735dd00139ecd5965cc2d051c1ae7591b1acd8
+AdditionalInputB.8 = 5e934aaa1e26a9a718267dde99edce74f4a96a9151168060
+EntropyPredictionResistanceB.8 = 3da62ee467e38eb2f4d86f43a5aa37b37feeb221aa36124e
+Output.8 = 5a9a70d2141fb55d6ddf26be07526e3bcbeecae58fcf93e467fcdceb307b6543235e90aa675a3d121b03605d159838b2e088be657bc31da7689dd49719bb43539f4aaae3db6500d96b6831476e8cb420877368c8eb07fb2edd70f0b86297d7776967d87f877e6bc11234519f82a265d5
+Entropy.9 = 2521d35f9b90558aad8e48426f19dc55543c78d100c4d5d2
+Nonce.9 = 392f6b2d7f59406c5501302e
+AdditionalInputA.9 = 826e6f1ced4b5bf41158ee6212fc2d7fba004b5b762fa418
+EntropyPredictionResistanceA.9 = 492ae9477be2f3d1f7f9db51695b4b7ddb6b318c8890c4fb
+AdditionalInputB.9 = ff8bfb58dbf042107438195f0bfe87e5df533a7c0b7e13fe
+EntropyPredictionResistanceB.9 = 1e9b3bfa016405fe9efdbb76f0aee727f533557db211c13c
+Output.9 = 683a627e2c20d573c65d86d2f536d86e757ee2b846f515e0f98b06c56b7745493041c7dd416dba0307e5770e8a99839c7c903276d65f1c895e2f0a3e3de65f1c8fbca48f637c45608ed625a87e093336821fc27b46254c8e661a11940beed7bd1e6d3ddee161f7cc856a98e9152a296d
+Entropy.10 = 4926393b3347890edb6645ea808be052969583593abe2cbc
+Nonce.10 = 901a4653d0beb6c9873d22ee
+AdditionalInputA.10 = 4b137d7c87f968067c69e4c8d10260101f7eecca17511e08
+EntropyPredictionResistanceA.10 = 65aeeb290d516660fe14da28943efadfa8f3d46dbc305b1f
+AdditionalInputB.10 = 994d873da42e56ecceae620d64684e0bf6466a6f2313ce1e
+EntropyPredictionResistanceB.10 = 05eb4d4f4314ed8102a4494ae05485a60dfe3597be140236
+Output.10 = 9e53e02c9a487f5df527c23093afe9992ab1776e067045bbfc09126d7a3fe127ba0154500011082f854653eee6e0827b1ae2f2e38349377bb9af4d8571e69faf2d125abc6dcdfb48aab574b69543fa1145303f81bfe5e803ef736e3819a2cd6adeebb1eb1640cc114a846265ff880cc5
+Entropy.11 = 58e69e1bf646030fad26a96e8809d302f18dbcab52e02792
+Nonce.11 = a06ac9c971abb9170b85e299
+AdditionalInputA.11 = c0007d261cbf6a116966bd7b6f6110d8f7382e60a9d97809
+EntropyPredictionResistanceA.11 = c95022c89c4c21c8e2cfda1a9adeb085f018f9956eda8d31
+AdditionalInputB.11 = b7b21529087eda7dd87bf22516c0ba75c7c82a4d0f44e2bb
+EntropyPredictionResistanceB.11 = 9cea5a1e32b67f6555bec44999597323fd59ce480cbdc89c
+Output.11 = 42a5d28db168f14fde04bcc83ce20d50398e4f30b8d27cc718ed6af375947fd7332e9b27b2d904fb4f82797015de8decbf988863e75fe1c991d17b1a0b5ecccf8a89aba0939803e62b27d302eee9c03f042679083d4069971b559d5bd088b506cc8b831eac23dac9bf08d68a8dc87df5
+Entropy.12 = e844c9f500c32d24d7c9c0adea49ce7dc2c9ccf8e1848398
+Nonce.12 = c49c7a0ecfe19510b558c788
+AdditionalInputA.12 = 48cc5ce4f97acfaf6d49ae69baaa7b614539b072957fe3dd
+EntropyPredictionResistanceA.12 = 0581b075490787ebba544ee101f7d7d6f27bae4fca5868ec
+AdditionalInputB.12 = 1d5a299deeb98f65a0ed3257ec629ce3b65660fa89f827cf
+EntropyPredictionResistanceB.12 = 11764717c9b669c3bbd8de72341726bfe7543bbf498350cf
+Output.12 = 808663533560e041376fdac5d5ceeee8ed082c055c9e1d21d6b7364439c2f18db210bfb27444a88019ad098c40fa4e952c014b56d64b6487461697fc5691d16992373f575892c76f9527a8773e9c00d578162c8090bddfa21093ab81b81af4021143ca847d11558a0e648d14fea19678
+Entropy.13 = 63635a1f22a4fa501ef5394985678d7698085c02914b80c0
+Nonce.13 = cedf77656b542a1900707486
+AdditionalInputA.13 = 426d59539c656b0a89063fe258901f63a3e476f9e8e6aca9
+EntropyPredictionResistanceA.13 = 2b3804fc9406e9b9cccae42043821d0f6843f79efb05d724
+AdditionalInputB.13 = 931df8311fd32ae9c5d3a267fb353612d00a3d13295e4e86
+EntropyPredictionResistanceB.13 = 0802b18ddac8fd83e4c297231e5d9ba56e81090018dcfbc4
+Output.13 = 202375ec291ddc0adb1c6a606d7217fa65266f4476872c036873b4d0012df62f3a7889771210bad625b1544e625db91a53b994e34104b3ba8197af0c266f5837132a5c5c520e54437f40907c3dfce1ebe74430b7518942695f3f2888d5c3496da5961ca8dc1e2258ee46dd7b487430b3
+Entropy.14 = 59e1822b9145e49fc9f439c5f91eeaac87e1fc7c95a19d5a
+Nonce.14 = 59ef7b2c0991e6bdc938194d
+AdditionalInputA.14 = 41d3928bf491a5d4426b1a90763b2a50b0c2b22795ffecc7
+EntropyPredictionResistanceA.14 = 49ac0d83e4499f88bbe6a67ec34d753837b3ee0cb11e1ef1
+AdditionalInputB.14 = 51f6a64ad57705cbae6b92cdeb622a0701f5500e6ad7eb0a
+EntropyPredictionResistanceB.14 = d5f8c2ba94bd849bd1434ff9d0b72517a7e6d381f13387a0
+Output.14 = 15d882c8ec0a8ff1544813ba2a6cebe81281117628fc4e79371b7e84027d0d9322a76e42c733c73ba90c4b204bbe329a4ff344c3fd8204e0c220154ca9cd04c80457cebc33f9466c33358fe1c05d49bf83d174f8abf530b46b701c0ba24b081dda46ae38f58815a996fe878fa6884845
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 3abe00cbcf70ef217c1c7aa8cc8a1e40d79e7183ad5ebdcf
+Nonce.0 = 6f0b52a4484cb821a6b831ae
+PersonalisationString.0 = 7eeeed6da6aaff012a6d95f0a9e477ce4adfa1350680ee23
+EntropyPredictionResistanceA.0 = a61ed9ee181e08fce9965155265c2803f3000d618c6674ba
+EntropyPredictionResistanceB.0 = 79a15638e6e718757a218cb5e0997e0945f94ed149c749c6
+Output.0 = f34ec45cfa5f61049dd4f4f0403ae08e148ee0245e9920605a420b6eaa39d3fc2401353c1e80222533c733d78d70d029376f139259c07d13614170b645c3d9300d0a2e0a6d04e16aef53dd09661e76f6a454de1cb4b8e8f3ecbb95b608aa4e8d60196ec3fbaac204d49978c099001ddf
+Entropy.1 = 48490053e4ec7033205f4b7d591d2ea088a5e22bc4d62cee
+Nonce.1 = 69d7dd0976beb15abd2fb0bb
+PersonalisationString.1 = 313ef045cae7adfd54adf9d951f1aa3db6f1ca92f3d5d510
+EntropyPredictionResistanceA.1 = af9973862fbf683aceeb520dd5004684acd005e0b166148d
+EntropyPredictionResistanceB.1 = d07cb13d9326e3d9a14e8c3a4fabedad299a25dd82db8467
+Output.1 = 4a0eb701c75b1f8ff63f6ce80df3d89b012500e13a0834b63efd16ca3dd32cc202f54a86df0f3f10551b740ffcddc6a49a1e4879815ac728d87333d16873a464d813b8007c62eeba913f6d87f9129ba71186da1b2d02703b02148739d4cc8fad99f9da79064cbcb0c6fc85204d805ceb
+Entropy.2 = fc9f4106413a6e19f9779952c4f3f3f744581ad3a525c3e4
+Nonce.2 = 9b0f2cda4ba9666d29175787
+PersonalisationString.2 = 1c4354ddf88975934b75374fabb8e4f26f650895d9d8a426
+EntropyPredictionResistanceA.2 = db4f63fcd1985f9a56c1c2ad371e733401e9b75357e0680a
+EntropyPredictionResistanceB.2 = ffaf06ab81967915a120ef73e68ee55ad61018bd6f81cdc7
+Output.2 = 2708bc6128973588dc69627ebe0d0c3cfd9abd21d0e6768ac3db24a3483db466fee5cb98d7c7689bffa0d6a498ecd7cbea8d6dbcb74482a0fde3953f640b17b1e4558f1a2feccee01211e9b3ca025b1a336410757f623f1dbb1f0652010c5faeb1be864ba7a757ca03e554e6ed1e7e09
+Entropy.3 = 1815edf16c92fb245180ebf31eee36ad3fd74ce765f7c8d9
+Nonce.3 = f50cec696cb399540258bd2d
+PersonalisationString.3 = 327953e950af7325a9ea6e84468eb0aab1afc7de9fd731e0
+EntropyPredictionResistanceA.3 = 120b40d7f1fad728edf3786989711a3f55003cea3495228b
+EntropyPredictionResistanceB.3 = c6dfce4f7d22d3090c6f3aaad5004178a24df6478443e3eb
+Output.3 = cdc2e25529de9940da47bc61d7f3efd95ab84638e8f957fb041334b185aadcea3429973b91fc0b458288540cafd812b7586de6bc2fc3412aa02e7fdc7b3b795444f2a4011323b50635d1e8a46dee43de242e15c10a3dcb586f06f37561be999f808bdea42feaefc5f9bde6df454b6fe5
+Entropy.4 = 6e0a56be6c980e57cf7ba3a63af3b239092045bc8c1f0cca
+Nonce.4 = 8def799b0d6987356f7f0b08
+PersonalisationString.4 = 4142f56ce5b067125c6f3f54afebee22783532f530f58e1b
+EntropyPredictionResistanceA.4 = 0aa1eb008692910387610644595c250ce6092248708fd445
+EntropyPredictionResistanceB.4 = dfab74fc0b965c3885319c682b1af29df4f06a443e55f13b
+Output.4 = 9ba21252db12648132c14aaf955d69f6d916a4d0d4a5a63a1f395e3b8201c0c3de6ee2d8ac1e4db0237493f52bfeeab65318e34e4f7d1783b7f7c8bd53b16b0131528d6752a54d0ffdf52ce0722e92a3ef4ea8be8c99ded7aa720b8357a0fec6b11e5405d005e9b4bd166f4314d1e929
+Entropy.5 = 2e9fe7ef3fd5f84a67ba52d20461658917a25046b8a9f586
+Nonce.5 = 0700d379bd64554bbbfd6fcd
+PersonalisationString.5 = fbe7f6ba3c7eda8348dc1859d35e2888b700a9c3c453e9ff
+EntropyPredictionResistanceA.5 = 75d2ddac913186a7595286403789eacd31412faa4191929b
+EntropyPredictionResistanceB.5 = a7f1f1438e2495b85122b707da2a21b2f0752a0e6c3a4b78
+Output.5 = 6dc3d2a938c331772963251a39255cd94c6b5ace25549d0bcb4b496cc283d0e5ba0a8c75e231153d34c9b5a433a7d9d4143fe1daf370cb58104379db17017a678e5611c30f99d5ef11a4691692f1fe23d3383320dca1f3646fdbc1f8a521e5b44fe9cc8793d58c30c3a0c6fb3cc60583
+Entropy.6 = aad62743ae7489f5c538689269015691d9bb5d6a095ccfb5
+Nonce.6 = afc2da5fc14b668da6fbe0dd
+PersonalisationString.6 = 3565d1d29cac496cf1075ffbb1c764c69e01d6da02b9bbf7
+EntropyPredictionResistanceA.6 = afedb8b7b5a729ba7e37925f86c7041b035f90f206bd2a42
+EntropyPredictionResistanceB.6 = 7889f59a1a4ac52c334b1b8868d4e1d67c78bbe32041e459
+Output.6 = f498f4ef35d8fd64119e4d0df4066a14a411b030da102ff39bdcd40bb58c61dee32529bc335bdcc05cbd0e67a56494d48b44a4d2180cf5ae3471a881a85cb7a338501a9e59c85177eed4128a2a6dc4bc96246c088a1127f24e4a4711a59dcaec4f5aa80925702953dca4dd3750f53f2e
+Entropy.7 = 5966dc3c063fad518dabef47520ca51afd626c54b835e42a
+Nonce.7 = f0b32a09011ffcd2f7a6062f
+PersonalisationString.7 = 0d73a1c67a2172a34bba2be5c589e8a782be26c0540fb6c3
+EntropyPredictionResistanceA.7 = b5de6742e369fe1e3391793803e96e112fc7959baf2fe501
+EntropyPredictionResistanceB.7 = bc2340b1899353eabf82649886f3e3ab41e50c81b467b87e
+Output.7 = 05c4384d0fe1eace9e6fdb0adca5647aed3b869bc8cccf673aa02b95595719156bd37f9e0e492d6403591e3a2cecf306727dc4d52ea85183347a1490d02472fcbaff5ddbd51cfbd56fa19e91bc90e68192848cfe8f6dc3cf4a16e474ccfac28defdeac7a9faf665ed12288643c98c949
+Entropy.8 = d3a2b737dd33e7b593a976d8ce7fbaa5849d3dc53ea33a9a
+Nonce.8 = 868f52c82e5c731bad043beb
+PersonalisationString.8 = d3e8667044dfa35771f9ea81dbdbb6ca3a820a4a085a7ee5
+EntropyPredictionResistanceA.8 = 7d292bd51c87b35bd4d610c1376c842932ba76530a7655d5
+EntropyPredictionResistanceB.8 = bd0c25b26a84e4956d6f99bc7985c7be237af39d7e9a46da
+Output.8 = 99f814036d5561337fd515eae8e9d0297f64dc390fc27dba43c72c8297c16e729849cd6b1d8a4eea70ed4b517df9abd896dd67766269366bd3dbb1956ee7283a598085299472499b96a5bca2158f2b57a21a11633ad8131aa01cf960f3dd3501ec9ddac409efcdcbfc89378942130f0a
+Entropy.9 = 37976f3dd02391eab6b5de97da688301798931519927f2e4
+Nonce.9 = 9eb9ed27c9c025c95fbfc1a6
+PersonalisationString.9 = b3086681195514455d0dea7f43bb6207b2f6d293ef597f93
+EntropyPredictionResistanceA.9 = 401a36fd636c8f00a54699b55de27b737f22c710c1ee9945
+EntropyPredictionResistanceB.9 = 4a71de894a1f0b0e00f61fd70ca6feb32e43ec8757ed0c25
+Output.9 = 509359687b5cfa7cd9b61bbe9efa1d9ad08b7bc6e8d14c571327711af6b6fe9120ee4c05afc58f8fba8e62a0335bfdc091ed52b9be75d231457643b537ee74040cae421c783f7dc9b8630cbcbc7bb22e19e2fbf1eabb7a8fb483e82c58330cf83d60e0f569b25a19d1637332e035413a
+Entropy.10 = 0cf8182fe738f4f7e5841b152d95392b08056c32c44727f7
+Nonce.10 = cdcd129a21166a1154ba0a2a
+PersonalisationString.10 = 13a20062b2fd56caeb2c4981c9776f13e65bd2d3c39b2d42
+EntropyPredictionResistanceA.10 = 7cfb253ff6c1b86f4dcea4859b3921de99030341bf1adc5e
+EntropyPredictionResistanceB.10 = 26c7e96f23f66ab577215eb5cae9a0545c5721ef75293005
+Output.10 = 0fd24455584cbb85b8184e4437e16dd89853c997f869d0c277edc1cb43f1f1dd4c043a913b3a0d5e9221870c464473683a6d76cb915d029c2a496cfbfdd11fc2778e967d1e7a99ef605e213f02fb1bd5e8e5457abbc3fcc5743a4e654cea213ecccfdb6bf873d31eba5bd0dcf15679ff
+Entropy.11 = af19dc6541bd9e9906c74b46fab81365e70f2be6ea75b472
+Nonce.11 = c5f342a923b55a6127414ced
+PersonalisationString.11 = ed73e7f1ef1b629a15a84479f8c7c44050b547b4b65436eb
+EntropyPredictionResistanceA.11 = a67cef83f372169299ac38f8fe853432ff725bc2300025ce
+EntropyPredictionResistanceB.11 = 66a2f35d802fe2bb770f5ac1a9f0ff625199a7e239480c69
+Output.11 = a91fe741900920a46415ac0ef2ea9f3d69b592fe7c2016a8ce0773b48232e950012fb69192c09f71699cf889bf8654689cef5ff52f5648703f2c5c01c2dbd5714b4cac08e23c0b2c39e61f2672d4a26a1205f64f691a2a2e90a2472d870bde344cef69b853217a6b50eba7b1f16e8c4c
+Entropy.12 = d71eb0b9b34684765dc11daf3a3116c5d0f9e99bbebae636
+Nonce.12 = 50907b82834825f8eab7bc07
+PersonalisationString.12 = 1090b0b0e3bfcc1ffd1684b013c63af078d0795f28601bdf
+EntropyPredictionResistanceA.12 = cedf7012ff2f2268e50a8df3438a9fc727b9a6744ad88ee5
+EntropyPredictionResistanceB.12 = 36ca669bc25341b431cad35409db60f427943b5e91940150
+Output.12 = ebfaebd69a58bb8892e64977c6cb195c04623ff4099f532741bf9fa59b8d89c7a7692c4d2410cf1d0f2441d0b037389a6e9aba37fd733e588e3dba6933f523de13ce2abd950eb3c52c09da9f346a0cfe5230a151486d5bb1d02602c6d796e796671881ff32f710c7456787af5da641af
+Entropy.13 = 42ac14363ab2ae1e3add772ef50dc8b87bdba8b62b2cc2a0
+Nonce.13 = ae92395d84329bb834b931b9
+PersonalisationString.13 = 929b1be56d3b780d83175c351747047d84c12dcb4eb0fe9f
+EntropyPredictionResistanceA.13 = 676b3ab9c5c2226a9a862823f77f3f39ccb7b7688778d10d
+EntropyPredictionResistanceB.13 = 6187d76756a739e2a6fe9cd260b3ecf0a6218e986b2c881c
+Output.13 = 54a042694ba485d6e2ea8d7689be5a79581ba237fc7a6583e1340c12305f5d003e0a9cf595135bb5d9281adca7255998988953c32d36cf5c2d37fcf13e91858093fe1bc3a232763d98a1fa388ee37c4086566646b894348b640576c9bffa5c619da35cbb8c21156020356b62552e1bab
+Entropy.14 = 44b852c21fcec96db3f144e2f3a98ae82f2730baff0ca742
+Nonce.14 = 73345ec9917c0a0d521ac776
+PersonalisationString.14 = 6761b48427d4499085c13b1da58f2bbd594cf18245db7b2c
+EntropyPredictionResistanceA.14 = 7ac8115615a29c535ce9b45d3e57d6f9ab0e6d4a021fe9ee
+EntropyPredictionResistanceB.14 = f6ab8840edeb3c20d7bddf7fdaa5c980c58bfd116551d1ae
+Output.14 = a85a3ede0e85ce593be2a2a2c650d49a740e9b8f07c24348d2bd968c917d442ed8de8a0d8ec8ff09ff86e6f279159001382cdb92f4625d12365443881df226c9a3833ba051a92f29fb55b788ab4b2d01958b9c067b43bb86c4e547b24e609e0d86aa3b75ea8d73e2c90092a50bcc6ce9
+
+RAND = HMAC-DRBG
+Digest = SHA-512/224
+PredictionResistance = 1
+GenerateBits = 896
+Entropy.0 = 42328327868db81a8b308bf0fd4de1fdc751f3bfd9a136fe
+Nonce.0 = 3ce54020697c13a1614dd93b
+PersonalisationString.0 = fb92d4e66b3a6c8eaa667fbf48fc7a6ae2cf43cf17a9f2e1
+AdditionalInputA.0 = 37e4f781e9623e618b0a559fab418f8794c94dcd787ba83f
+EntropyPredictionResistanceA.0 = 2c58207c244d693330fd19dfc7006d65b4974f330d6363aa
+AdditionalInputB.0 = af30ef47bdc63a2eac763c0bb76b9cc64ac421c43f1b56fd
+EntropyPredictionResistanceB.0 = e9e070a888266282b6785a72be22a2dc0e75fcb58e0a78b2
+Output.0 = d7ed0cd35da1d2f3c6b1e2a413b27f41b75247dc2c2a2fd6f5333e1f5b6471eeb8e3a489b3a63c7bb7018b3aaad65a21452cb0ce647d31f6395ac45f38d8ff004fbbad37e9c53b02febdb2fc449834ded067ad92d4afe1a2870aed06806e23368f04e639de440442621a42cc90c5890a
+Entropy.1 = 71d90627d67c3e58ff8c3698654b4070c6ada9e2db2e57f1
+Nonce.1 = 3a0023d1f68a9d3d1601720a
+PersonalisationString.1 = 00cfbd0c7de3f34ff906f6589de97a64d015b46f09981e5b
+AdditionalInputA.1 = ca8afaccc9b57f964551d0f7463b7affa66db3d1d7a5d196
+EntropyPredictionResistanceA.1 = 6e36ae77230043c5652baa21f1557f662c9fd936546e7482
+AdditionalInputB.1 = d809d3f6e5edbd2442fdd003334fa326f5aa8dc6bc5245ad
+EntropyPredictionResistanceB.1 = 703b92177dce45ca838c56863c03b7e1ad83d6802a7962c7
+Output.1 = 36ab9d255055a7a04a90a3a2c2a698dffaffac43f03f2ca4165b0454330f339c7dab2b92300de8de6759309a44e5fe630225d1653f0759f44e94a96cf7bfa044c6af7bd89ef95de75423feb56871578a8353624bab718e6dd8644e975ecff6eddfa578dd02ec6a6d04cd2ae400c1ef1b
+Entropy.2 = d36144c1bb726db6b132182464a7f715a75587a763d0d3fc
+Nonce.2 = 1e1c93ebbab0c8168d473c1a
+PersonalisationString.2 = 9b382e6a271304300b24e01f5240ed2b334c0a2061185cd6
+AdditionalInputA.2 = 58d05dbead3a46c57aa94efc0d90585bb7dc65af4c9e77b6
+EntropyPredictionResistanceA.2 = 2bc2d8bd92a27ae500f0bdb1d2e2274ce7bb5e4cc54cb940
+AdditionalInputB.2 = 1cfba1b1b1f12600dc45d2189780490d04a7367fd419c7b4
+EntropyPredictionResistanceB.2 = 1326875c96998756891f85e3d42b4f3011ffdc651dbf4743
+Output.2 = f1698f9b3d608498239140df5fdd520c8ce398fb03a7f087ce05d49d8274fb91485220a22884e0ae22edc7a7e35e197c560a543a2bf3360a78498cdf88ff3a4cda38b94e7288d7304f93a20a793499e73c91d743b0529f8b34ca57b8911110615ffef335e1d75b8e8b468452aed5e399
+Entropy.3 = 545f57a5c6d507dc8524a6f64dcb3b5d9bf3a24934e73e13
+Nonce.3 = d2ff5c522a6a877e8aa6c1f3
+PersonalisationString.3 = 5d3ade2df844c19a3459723f8fa6d5e9d77b22df41bd44ec
+AdditionalInputA.3 = ef70957653833072b8d943b83eda12cf4002706056269939
+EntropyPredictionResistanceA.3 = 01ae6b21a0949eaee67b9b792982671dc997205dc60d0dbe
+AdditionalInputB.3 = d8d92c2247b53e0cb9d5578ffa7b1f1cb4bfd7afec5cbd93
+EntropyPredictionResistanceB.3 = 204391f7676c21fdd8c4923edfc603daab91f0c92c00f1ba
+Output.3 = 61167459a4bac04bfd4ef66ed53cff7dac8cff41660d56dae2d663050af6da636487436f00a9a5280f5f26aa392859ac2cb626bcd033ae411db31c0859e6538052abce5c14dc113324484cf67223da2924f0bad1d7385c79b7451a662c2bf406c6b23e56dad6e61bfc7ae657d586508c
+Entropy.4 = ccb233724aaa329f4dc5ffe43f8369bfa7fbac96a33600c2
+Nonce.4 = 941332ab2a4107d359a67e75
+PersonalisationString.4 = 58acc8c852a88625966eb8f789aa19288bcd0eafe4a70937
+AdditionalInputA.4 = 405b25fcb3ff656fbe86ff7bb68ccc8eed4f1ec66b7d2175
+EntropyPredictionResistanceA.4 = 3785bad93fe2a99156a04060498dbada6d7caf4a7be19175
+AdditionalInputB.4 = 385fd3c47de191c85be6dff23c6918355bb5890936809f10
+EntropyPredictionResistanceB.4 = c6b2636a79fe9400a2494db7ed89f6c574a7482c46b8b126
+Output.4 = 7a0ca52ef7a43c82849672d52b82872e3d45512e5f166d8ceba0f2a2470d679657b50cb2787bcfac28cebf0f964e406c603fd99aacd3724a66bd5c97f520bc57c5d3593e7a9d5708179c2e47e06c3354df610ef231dd885d02e4531d525f6b251c65a64f45dd8461a78f325ceb07de06
+Entropy.5 = c28b010ebabd96efb648c8cd073dfbd8187de80c1f96b862
+Nonce.5 = 5ae117563f41752e6dc56c31
+PersonalisationString.5 = 0e1c7a54e00da3525bae002b5a998ebf6b8f19a22bcc2b4a
+AdditionalInputA.5 = c8b6e06035750231cbc7b87eb7c4dfe5152dd7940101c20b
+EntropyPredictionResistanceA.5 = 281f39b117b13b56979d207b9672cc5c6e7a4d2ab6b290e8
+AdditionalInputB.5 = a6c0ab62325cd84fdf7f024333b7e569acb7ba76122384ca
+EntropyPredictionResistanceB.5 = 153b8f669efd6ed16584edf89847293697f7273fd5bc86df
+Output.5 = cc21f6fc67277fda999ef4217cd419ba5f9091ba784360ff1530e0cc1e20f0f155872d7c085d9745090804fa6c42284cc8b28cd1d6d6f5909e89a5b12707087bd3ad3ee7a495c79a4e62c179e889549463b04c091ca814081c0166252e3a0dcee89418728320188fd066b92545399583
+Entropy.6 = 3d9337a8dbe6840ede0b5035c2888c3b7b0c0798e602850f
+Nonce.6 = 554d0cb979b265d11350ecd3
+PersonalisationString.6 = be7af98890e00158ba4904c4eece2e3bda7703d32c06e045
+AdditionalInputA.6 = d99e75bc2b6549363b2778344ef61562bc6eb05287cc7f23
+EntropyPredictionResistanceA.6 = 1116ef7e10faa06a7171451946604f318145bc92ed9f71eb
+AdditionalInputB.6 = f20128c60cd8d69a2a989242aff113ae0970d28e46227763
+EntropyPredictionResistanceB.6 = ae230aa8d9b1e195a67d04a0c551502040e501ec51b8bde4
+Output.6 = 24b0107b266b13155dcf369e1d84c5456de11c756d805288345b74c04d703ab4fd4f095ffdd880144269ebff03309e2538068df45bbf3e12ff39972ad301d42fed0617b1af7918447eea2ecc059bc2b035a821d2154aa0fd0896c9dda827323561bfdd378639c25a24fa1c2ea1831a26
+Entropy.7 = becdf134c1c9a9790eec0179fff1cda3bf01e102d5d274b9
+Nonce.7 = c91738f104a882f8bd164a12
+PersonalisationString.7 = 07e55097cbdedf11910f43b26253edb0196a18b02c72500d
+AdditionalInputA.7 = 267b7eb22c2cded69b85a63add61954b965a41bf33423b86
+EntropyPredictionResistanceA.7 = 583e445067e37773cb2586b7c8f9ce08a54cd327ea196dc3
+AdditionalInputB.7 = 6984d95acc6e2c07c438b889d3bbb00164b08c9da8bc08b3
+EntropyPredictionResistanceB.7 = 5e4dbc201ea46ac259226bbd75472c8d189fa22731ebcadd
+Output.7 = bc3da2b2591e18919876948b10e6740e60a83d15241c91cc552e02b70e6680f15b73a5aac51585e88c47762479331ed61fb1bd041dd813404bc1a42c37540af825e244f068ec5b280a41b3e130d892ece228f430f23c011a1f11234241721f364efacc2d4f93ec98bcda75497f26d4c8
+Entropy.8 = 50ab48c4a81df510886faf70d8db165ab7f0ba5551898008
+Nonce.8 = 8bcf4b57839c6276a8f16b9a
+PersonalisationString.8 = 1ed70a80f083fca50c7bc09a1616f3a10c8f54ed4a83bebd
+AdditionalInputA.8 = 512f2aa156d471eb42a6998b903a2498b360c130bda323f7
+EntropyPredictionResistanceA.8 = b1c39288854d85dae4d5b40bf653f22ad1bd1c2e1b05b4f1
+AdditionalInputB.8 = 2eeaf95764bb5b6e04abaf27512610e9cb2336184fc2300d
+EntropyPredictionResistanceB.8 = 12b1f746d61291021bf57b4d5d9399eb5c3a9b1167a1efc9
+Output.8 = 6d68282a45cb796ddf5168d35fe050403c18a514da75d96406a73e6e5ea60e1408a8c9484ef6ec5b2b531e3c1ad09d4993e8db3cfb455191957461196240e5b815cfb18f6f46c0f0eef0fc4c9827bd97040442f88e322a212f71af1dca78626481fe34e8fb619eebdc5241732afb8167
+Entropy.9 = 71dd55c8cd911eae12d63885d0b8d74bc3c6b8f2489ae355
+Nonce.9 = f7a612d67bd6260e564c92d4
+PersonalisationString.9 = 0d6fbd3279772792e09955ea8ecf991b5051de993f222c7d
+AdditionalInputA.9 = 03c0cbb0b2a9667ceff0ecc866d9c3aad1c4039202025670
+EntropyPredictionResistanceA.9 = 5bc702b2f6e761f3eea5485a6190c09aead71cb4849be6a9
+AdditionalInputB.9 = a4d0b0656dc67b03bbf1bab41de87fe7b5d503b447f06f37
+EntropyPredictionResistanceB.9 = abb41bcd45ac179461c797b5ea238dd4dae55e75d29de460
+Output.9 = e4e51955bf7b08c2a635b3950c9d68ac9324dcf6c6ce65c7bcf7581041414ee3bd8a1029d1273bfe65bf4f7e5ca290d730c3348a9a0e855843be6af1002574be515baeaad7189ee115d65157c9199bf0a1dd3832412e92a43cb62926632f3a597b506145f1fe1381b432acd764a76438
+Entropy.10 = 6f6a0f89ea7a4fd5002b3f9bac763bad9cb6a1106670b3f9
+Nonce.10 = 3861703040d17c3e1b111409
+PersonalisationString.10 = 43a938cc3e002708443ebe823418bae2cd831b0cc949a1b0
+AdditionalInputA.10 = aa5430806f938e18b9c19f65b4197f97d688d9b7da84f24e
+EntropyPredictionResistanceA.10 = 594f52f56555d63146fedbc5433e9f598468928a6298d072
+AdditionalInputB.10 = 4a0554f056296193b07d658193802404c1d74e725bd2e980
+EntropyPredictionResistanceB.10 = 5ecf8cee50e86c1a4e17f618892ee7ac552058bdf402699a
+Output.10 = 1ddd9e861d19c06c7798bb730b1ce35fbecafbd236bdab6ca2a528f3a3517871049bb90d6053d1266587cfc1f5bf2e5356b997d5c48f42bf6d2c6d06000033cd41e786dee55dfb1924c3704f85bb08b4f1a6e7d0985ad4bf3e05102048c99131988bfed02d712b8beb38f055e6707657
+Entropy.11 = c9f17f0a558884a86da79831c4e8a51f410e7b5d85f8ae31
+Nonce.11 = 95bcd73f733f0cc94451be09
+PersonalisationString.11 = 07e9735af740c650cd67b6849243360bdbd9fc5ebe726e36
+AdditionalInputA.11 = c4b833858701bea53fdcf7d97260f7b6371a55b560952254
+EntropyPredictionResistanceA.11 = 816f8a5edabb6ffec8757c4169ed0e6ea10645ef1d92598e
+AdditionalInputB.11 = f9d450166cf1ac450961c05c696bb5a05dff09d78005207f
+EntropyPredictionResistanceB.11 = e6d1824fbf4aa5bc3d08703b3300f137b04ce5190f154aa9
+Output.11 = 7684b9cc0ceabb23081809345e770d7d187413d8bb19ee953cff44835c085ad37807a4b48ebde05e96e6939b2bc0af3dcf088f93cb8376796a911f3ba08da05c4300d4eae5a976fddaa848e507ec9987fd9b9497b1564f91eb55f593be5c24625cefe1b167aa5f68f804e66fd197f1e9
+Entropy.12 = 843b579e99e0963a7f26f7494cfc51c70d126ba1577c18f8
+Nonce.12 = 73f27ffe72ffae21c86c4043
+PersonalisationString.12 = 5dfff714ea61f927acee50b4aa8b1f66196b0ca3b60ffa33
+AdditionalInputA.12 = 7d7005a61d45773fa9931ab38e5117fb8591774bd51cfe89
+EntropyPredictionResistanceA.12 = 40bd3533e4dd6f2832e8b8ff37331420d6e49d542fb3d5f6
+AdditionalInputB.12 = 50775a9228e0d774cf11d622e44fb7383d57fd4f0f589803
+EntropyPredictionResistanceB.12 = 8bd71b01f00094314d619e6d88281a4351d88b6887cb1e7f
+Output.12 = 33e9fb4733335a29a002db71cf77464302b6d20f17b011b2fa2f427594077bcd4eb563169d927b91d7f13e9dd542069e6dcf796c6d84899cdc8dcf78946412f9a7eb8c2155c051d3c3e74a3e02c15284da5f5a755971de382b1908cd9d93bf5d7176edddcf1d83b3b0cd7a8371d420c8
+Entropy.13 = 0a3c4185a9c38fa1d79549f1226ae3d9460b38b77e94324a
+Nonce.13 = 1a18b318a07d415dae653b54
+PersonalisationString.13 = ba9314b9c92455201e6284ca8b844a9b0fafec6934f0d0e6
+AdditionalInputA.13 = e89c3692a525c475d0fe7ebed1bf52566b71ed6eba44d2cb
+EntropyPredictionResistanceA.13 = b9a1a8f7ba78b00bcfa33f322edd3a0c9ac00aa5345d4226
+AdditionalInputB.13 = df99e5be1147995b2f65b22529cc5af1556697a43dc20c9b
+EntropyPredictionResistanceB.13 = c557e91538768751bafd105a04f5d4118ad4cbf69430faa5
+Output.13 = fe5d374f5e2accf9c6c5c33074c70c6b6a5d1e181440e6f9920f3c99bd85f47d514ffa2d777fe4e749c9208492e57a181964e0d0f17762c672f6422ebd4fd51743437bfd2d67bd7a1d643173330e1194be66029a4e9dce986a4e708a53a90a53e325c0bc6bfadd491ede1489c78c443a
+Entropy.14 = 8918f1ffc6555e65bee97b8a4a1920511f5caa863d0b07e3
+Nonce.14 = f7a42525c8f0803afe01b599
+PersonalisationString.14 = d31b5fe7ebae934d951ab6317d0e4fe4b78da52a9fcf2a73
+AdditionalInputA.14 = 124df78cc12e36872e964ab8eca06f7efffeaa6f02e88753
+EntropyPredictionResistanceA.14 = 1bd6bbfc215cf24c8da6b250cf6d5172657306adbefbf735
+AdditionalInputB.14 = f0431c9d8925aaaf8f28d112773e5f5fed7feff633c9b056
+EntropyPredictionResistanceB.14 = 5e27635c34a1b793b2b1f23c9a72eb3e58c6ad63ac752dda
+Output.14 = 20a84f074794921d7c1ba7463c4cd5f165ef6ff003555a69a71d529ea8177b3b4845898f031428b320b9dc59b16260d80baab34e7cc6daba5463cb496e4a6588ca5f3547412e63d36d560d9549f87a3ca346968f4dfdda3d0cf9b82384b3e830a8368c659c5aea26b03c4bbb8bbd3878
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = bceb3e2b96e3cfebfdc65baf3ad3d33183f2fc5f634212c9951afb098fb6491b
+Nonce.0 = f195010065dc299f08aaf22d25cabf39
+EntropyPredictionResistanceA.0 = f89d46b0587c441238131c569f0b3441ede3ff8f36e1e656e976d8c79e231888
+EntropyPredictionResistanceB.0 = 89d638eaa7c29052b73afbcb1228e2747850da2e87c5440ee7ef35ced9d0d835
+Output.0 = f3538461534087d3ef13c3ace2fdaddaf73352b52f8ca22a6d8eca9bbd0aa4c5cd522f063e5e54d40adf10d4442a6afd9ece7322248c156dcf0b4d8421581ad9189a08e246b1ed592f4bc668c68dbf6a9537e273c1503141b44f30e00137ceb6fa4d81ca20b9a3608895ce088d9a8ca2b2842f1996ae9227f8c4edc58f97897b
+Entropy.1 = 9196936ebd447539c3d677e95f61099612eaa3b75d3b34d717663c65799d73f5
+Nonce.1 = 023fb2c6764dc6dd47bbc646f723568a
+EntropyPredictionResistanceA.1 = ebf68e9ae844609ffcb0ad51e48cd5c3554688fb9619c0f016faf05bf9996c01
+EntropyPredictionResistanceB.1 = abf4bea42244525619d0eb7cd0a58b939cef87e2c745d6d2db12df4bb1a98923
+Output.1 = 5c2cf14776d1b1dcac9222ce99d04e0a40ba637f736f32fad3dede1e2758486cbae59e11d304b70a678516efe5f8af2fbc9fe0211b24e4431eba78d246eec8ef0ec50eb9ea8ac6650af165b47f107123b8d2a78547e302782e93c936df3daaa875454f9e07dd8b2cccd40d8e17ffb342ff834a9fd36a68b6cdde2fa1f06946c1
+Entropy.2 = 6307c64c244fcfc69339f2ead9acb4ec5312c138e5d896f480459bf7ad4e8aa0
+Nonce.2 = 1453eae741d056e1ca4f107024bc0a65
+EntropyPredictionResistanceA.2 = 6a55b303dd1b9ddf0835e33c9a93323d646caa7ac1ce7f91bf9fea1ba8048533
+EntropyPredictionResistanceB.2 = 812ae95c514786425765bc5864cfbacb0ddaadd4f603aad724b88d70495b3061
+Output.2 = cb43407847e85899d3275216fe64dd94092b9d30a640b249542d49f3e32c700ef1b1d0ad3d2c474435cbbcba63dd109c52fa2f970a14612df984aaaa8bba88f104a6b216b8e29d2a737d20066177ec5b14f9d59535fafe121b7b447ea469c33c4c7487d49df5985ff2973d2af5c5bc729fdc205b39362411867e08c2bb065408
+Entropy.3 = d389573b5d15466da2964c61564f7b13fce8c6f3f0a320d893e0ff52b0767377
+Nonce.3 = 748e6e52b715386eab20aaf9d0e62321
+EntropyPredictionResistanceA.3 = 438d8b5702ffbf8b252b5f0314a275885d6a92445c3386b3ddf56dc204addbca
+EntropyPredictionResistanceB.3 = 2a28a629e790c567a91ff618b76d3cdfe26dcc608932b4b22621876e4f083c69
+Output.3 = e85a39f40fca3b30e3c7c19c40a70707c93e93dd3c7fabca4ae8fd9ab9b3c0499e16004c8513593e966cfda75e415dcfb682806001a533c3cf51eadf00b1cf011dd0a0b68b0919eb5ef27f0a0999e3d47bd655dcd7d92e4a5aaed74b9de66496dabf55ce9cb054960856949670805a52af80bb310ff61379697a4a856ca67a98
+Entropy.4 = eb542fe90221991ad76b8661ab00bd065a9f31b80534193592d48601becb2a0d
+Nonce.4 = 9a132e6d410394fa3f0ba52c46376df5
+EntropyPredictionResistanceA.4 = e9614899cc7b769ebf783ea6e42ded95337397f9fda33094707d128196c3c236
+EntropyPredictionResistanceB.4 = f6259b369d45b92ff84e9331d6e1784660676df996c7f0e6ed3c3cda8144ecc5
+Output.4 = af840119b26bcab898c271ecf25eb224be6040d8937a994d4a6ec25c69a8a33c52a1c9c31a5d249f48922b29114f55fef80b3a02ebbd91ad2ba9c367667ea71dd01bd47d34b8771347e45cab3d50cb570fc33d35e437b3df8b23da871fb5a4728f83b87b24f1047905dcdbec40c4289d9130c96d9b5e08d0e5c6e71e119b6683
+Entropy.5 = 39413bccb8fc85e9a7ae1bd959768e1a7e800a11891b597ee378ae58aea1d857
+Nonce.5 = 9e4c3144baca0fd9c266a01090a287db
+EntropyPredictionResistanceA.5 = d26d5d920ec9c80a2ea435801b576bb931b382055d024be409b8644043b12533
+EntropyPredictionResistanceB.5 = 73517ed82ced94c612e232281201dd53bfd426703e11b7ba09231b0f1a4e00a4
+Output.5 = 157cd5a025e4f51948270f09c1c775a8f0b8ba59081e1eab3c6281a276daa2d39f0a5d5a5935f9cc24eb52aeda6556b5df5668796022dadb889bec7263523181af6cf0b878043d53cabc63e2c34276c21fa8eb33cdb0112a617526136eb81b62c2ec9e399a7f1c6649bc4e48aa6267c61ff6657ee2de5851f2a74a2cf793e20b
+Entropy.6 = 32f3830a5823d3d0290cc49ce808188ee0d2b6ea75500e67bd27415ee2760178
+Nonce.6 = f9cac3b2b62b98979aefbb3b9e4c3165
+EntropyPredictionResistanceA.6 = 411718382b64a54a0126e9d3ce8dfd2ab5c7e20322df1fd98b74d6cc7242f6f8
+EntropyPredictionResistanceB.6 = 72534da627b03c042eb4f46d15db47feea8b2a5bf4d79b04313110d8f3028c55
+Output.6 = cc113ff69ef411216a354e709d29ba770e95bac3569c5a56cefda9dd8eb0ec6918055f9ad7c632b109bed02e403652455a8cce0da874cef3d947673c91a8f2dfc6fce4b5060f27adb680c9fac98f542175894cedeef57bfe10bb1544580106b32b5da0579283c318043c6f577813c9326a34eb078e2ee9754b14a8339ce2e721
+Entropy.7 = e7ca1bcfbaec8b7b3d413f672653806e3930f6aa98f58464dda5397aef3c9e55
+Nonce.7 = 43d00cbc31d3fcab534985722bc37289
+EntropyPredictionResistanceA.7 = b1b0153c91ef60ea7bfc637b147089b7724d0cbd8f4de2b6f56687e5a420b8b4
+EntropyPredictionResistanceB.7 = 2e23f1f194a4509ea5b7eb3621b9a7e93e45b8e62af12ac0d951fee78eddf04b
+Output.7 = 59080fe519cd61f61c0869ce2b0749a91011884d65e0445083b95430737a04a16291a9d115e1499d9ac0378b2bbc9d3d7da335b0b7e9d97ae27de4801e5177e04b687a2313a32f02eb8737cd658f71fbdaf72a5176e933eb9bc7792cce7f5b987358250a455155d68a9dd26ea178a66c7ed3fbe37cfa95f435ebb5044f50fd1d
+Entropy.8 = 1ec0fbb15792ef91be3f627a070aa64d1a3084307970aa0575bccb6148dd786f
+Nonce.8 = df05a2bc392fd65e61111a2c9b1013d5
+EntropyPredictionResistanceA.8 = 5ffb747dcfce6ea0ca221e6d8d1d4b169c2d5d70fb2cc978fa9e1b0b4284a60e
+EntropyPredictionResistanceB.8 = 6c1fae5accbbddf6cf59868ef7a83a1315c809ed341fb581b10594aab3369ccd
+Output.8 = 35d18350f3c2ece6d78193b5f1f4fdb9b980d7b0cf06087f5a6f43241fec583327a4e9f6bbf06928d5161db5d77a9400e4dbbfd9ef3fed58917410312c3d7653823a6f091cf20d34b00f5acfb505103bb71fd96cdfb67f9cd108adcac4f8ea0a4d8f792b62cd2e3424f12767f9efdb26bb5882f37d9a28a06f19aafd87aa21e2
+Entropy.9 = ea0f7008c1e1a29a75223c8cb2298f3c7eb562fb1fc579585a73b42797d05380
+Nonce.9 = 4afe81a93d884850e55a21d53dceec31
+EntropyPredictionResistanceA.9 = aa26a46ffb44d1209eb9d4d1f9af8b86b1c480d06fc3804e597f37c4ea1792e9
+EntropyPredictionResistanceB.9 = 3ee292b50549bfe5d1cb444d202beaf09a3b9d4b3f95244f79a3e4ec33b62e9a
+Output.9 = c831442c2d4aa85ff865563f95e25bb38314a9581e6049945c086b500903a26e411bacd3936f81309c2108e13e95dcef457d5d5ba55bd1d5049fbc634067d0dffb99a6cc2922f362408802513574745f2ac34e58715c9cf7f0edd1d14dd8884c12bd52ac57ecf0d0fc176ac4f07521f80b76907d4c03016925640136e31298ce
+Entropy.10 = f34948793a38b0eba8730100ae53776e06ad992ba68b97bb73b27492f4a4d38e
+Nonce.10 = fec6928e2e3bfbaff39e9e8101d7dbbc
+EntropyPredictionResistanceA.10 = 1b5af9a42305bb70fd71f55f37b778f9291c5f281edec50a33b488817ee1bc12
+EntropyPredictionResistanceB.10 = 51abc02a731e7c6d0a6921cf5fee0be933e11fcdebb74e1c8057e9e6709d67ad
+Output.10 = 002644348f9cf857dabb31ec33054dee9be3cfb2ab732baffabf1b6dfa5e4b6ef4cc7fc17b3dfd0ab3b2acb0f9f9953f89774bdaefedd4bf44ea9961957e7f4c6544abee9ef4c2f6954c9bb646d8c7c176348abd48d80623e3240946f880c43c081004bcafe3f001431fd4b7de30c6146a3f592c91794cecaa0a5ce8919919c4
+Entropy.11 = 7dd058597430301aa20c13fde3743a32832e5bc2b70f1ed05762a22547a28059
+Nonce.11 = cdb1e3cd4d23211bb19f0126473cc970
+EntropyPredictionResistanceA.11 = 9bbcd6336400b562e0f53fd5b1dcafb8a707be0be2da61c4b4e491f00100150a
+EntropyPredictionResistanceB.11 = f56cac5350e2db005bdc7e295d19fb197561ce0e11a373c43a5c279387a38acc
+Output.11 = 0140c8edf55b0bcf26fda6f9c36b9c0c2a905c43aa283a8de892c80a55eb860cd76c1b125ef4a48be2170c4b7e1f51c1736d18edd5339d5d9ca6dfa85d26b0b367fd98b5e1031265dcb782fb28e88212053813ed8f30b2628ab64d8013f2a5c42cd79649628fbc88d67ad90e668e7b777a00ea05c35708443b831cb818b5a826
+Entropy.12 = ca0fcf98623cf62d8e5d36e93c547785685e7cdd23053baa5ca542a207cd8044
+Nonce.12 = 01487fa80905f94a70d9e96fe96013ab
+EntropyPredictionResistanceA.12 = 0752c448238f9eba174099bda0c577eb112cb9908b97c9f6c55a56f2b0e068e5
+EntropyPredictionResistanceB.12 = 051ccbca0b700778cf650e9e78efddab50d922cfc2a82843dc9953395cfe9605
+Output.12 = d1e4fe18bd5b1852df05ee1b3d1acdc3e17506576f923ec167c30685331a7a442ba1d873a84cc00645e7d38a0ac376cd769f2fe5bf49a104831585c90dc200a8e45e6f72974f1a7fba08c97ebac5755f20bbb4b85ac7b36ee5629bc3f97c0fec2e4aa90deda81185890fadd5a5f811b4d9fe1bf2e70460342436f0e1f8de64b6
+Entropy.13 = 7d0a1c580b039dbeeba9cc441ea00641b1c4d5d2a6987679fb83dd3495cc724d
+Nonce.13 = 943411db8f1065bf38b6a607959c4e7c
+EntropyPredictionResistanceA.13 = 37f51c0b8fc4243cdb17efc200157d1cc60c07da771dc1cf976f42e25998bf89
+EntropyPredictionResistanceB.13 = 0e1b32888eaa1775053974ddef211d412c15c984eb8b92cfd122ebb573cf1fdb
+Output.13 = df6c4e7779532bfa0fd39b002d6784c967a552ebc21c0cdcc7e9897c5c18db3d605ccb1c1f4db473dad38a878ab689f085bc071799f22a91672fdf51aad13c55269a041bab5a6d247fc59dc601a10274f40d69e9a6691d5d9efa2a082a34e0c54ce1c44e795a58cf928345ac598bb971ccfcc2722be2a3b44a9207efdaaac49e
+Entropy.14 = ae6a7642282600157b6d6afc4b8f5538174b51ace92f7a57becdd36ea8051d59
+Nonce.14 = 71c79c0582713e6bc511a41fa6bc77db
+EntropyPredictionResistanceA.14 = 33fd3300d120786b2f756459b222b72728c1b2c53d09aacc82c6925f39502975
+EntropyPredictionResistanceB.14 = 96aa233b407f0cb14d6ecf2a243efcd7c1b7ed3fede97dfeb269cf8331189412
+Output.14 = 6a34b428c4ff416d3ae907318928663ac8683ef6328d37b19bd2c179aeb7e56a73c6ed096ebfeb85a263f2c868fb4a2d977d5d41fe12b135b1c9017555b36a9f6775a43c42be37a78eb067f520f091ccd94b38c62fa7d48c494b05b072fee34ba262a4fe1a70c98fea2fae40513723a52d6ea44f5fa168f4c03ae2c73d793ef0
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 9537d18c1ee448757e29db5344903a58e73e7558f3511c2dbdcf9433bbad6263
+Nonce.0 = a185925d718f156dde2d557c78a55507
+AdditionalInputA.0 = 5ac15db7605e7a2346520ff5627962f970ede8efa3fa7639884d56ad4db2ce29
+EntropyPredictionResistanceA.0 = 86b1bc17ed6e9e213524614b2850052b4c6f7ebe30159cc4b81aa193a255b9b2
+AdditionalInputB.0 = 90fe8db2d13c3ed7fe0a6e1ccf0fceefb032ddc9174fd294e206a0a12412f5db
+EntropyPredictionResistanceB.0 = 7bfb4bb691e61bb93becf00265c867723a7603decfa49d3d2e23fadcb2c98721
+Output.0 = 3855acee3404e56549edee4be084cd58372a7d82e1e116341090b4c32e77aa417a35b861a735aabf242e8acf2ffdf67c4ee06b1048afaf933497df9c3ea1aab2f789a3a8e8e54e743f4f1a62bfe4060a6ac0f9a9fcae95c751b77b31aec22c59eccac42cd2153145d57fbd7d2bf88fba8da32b575bc66803043a7a309d7c8f48
+Entropy.1 = 223f82b5ec4b37e2ff417d837a702ad28f34db8b854fa5d12877212f274596f0
+Nonce.1 = f8e987b2578391770aaf9acea69f838b
+AdditionalInputA.1 = d8b71a9ecb5366d686376ae901d84ca07aca86b63a75e95872e1b9bc8a5f13e1
+EntropyPredictionResistanceA.1 = 9a654c9451b68b696e4349cb14a3fc8b858a7c959d5fd95c0b0764da5c44b85d
+AdditionalInputB.1 = 4714f5623a291ab4280ae92acbdd70c6dda3fe48464fb549c4a2aaa98fce1328
+EntropyPredictionResistanceB.1 = b2e9ac2c4abca6fa91adb32b1af31abe555fe89d736c3345c8f3c6d3242faf4f
+Output.1 = 6b8aa0f28684dd50840d13ed4a555beeb370260e73c98843e844e4d202baee92875b649e40f86f47bf8c718aca4cd5e199bed2382555b39eaf006e7c79bd924b16de7cd62301363a937d299797612aba7389de05e996ccd0636d6e3e3111bcf19915736230c0e576d0ef8f03d89a5fa144b7705f5f81de3deb2f36f38142982f
+Entropy.2 = 99b4390e609e1e3bb7cb7e793c81743f2d9bff3f84102f5a07b82a6e53229da1
+Nonce.2 = 846d46283dd3daab1f69b8a60e8272e4
+AdditionalInputA.2 = c98e871f2ae185a35bf22887a6bc94342223c8d34759f9b0d48349172393efa3
+EntropyPredictionResistanceA.2 = 045d232922b6ce6cb7bb8ad7d7ee5c297d77025429f19b409358991a73501fd2
+AdditionalInputB.2 = c7d49c105c680d44ecea0f4a34842f8b81f7c617a7d169b904feca84bbd905b8
+EntropyPredictionResistanceB.2 = 245be3b177096a1a04099561709672726c14102ad7804acebaed7636d33d2843
+Output.2 = d5ef3d166911e3ed5df7a61d49ac32d6b96e61bd69ba9ac161f28c2d568a2fc4ced311fc2ccbcc74fb888e581b055d148bdcb3b4f4e55b72dc9b725c4af015ce3e640924090757144f35ee740e129b37dd8c6a52e4ec5a5868c4c3d34444f870ff422da50d6a18da9d29a3cdb09a45ed41fa659e3b6a166c65962d64ce78f2c2
+Entropy.3 = d2cf6eaacd4e25401161b2beb22d0a9eeb00efbbde1900fd32f260a2e9af8c9a
+Nonce.3 = b5ac6098df3feab01eb5a0f205b1dbda
+AdditionalInputA.3 = 09323bfaa8abe4bd0a4f7a2374bb770d18a15f065583108156988afc23e5fc17
+EntropyPredictionResistanceA.3 = 9d0ad7ed8009a562768aa0b2fcee7dabe47cbba0d1074b09cab0195bb2657d26
+AdditionalInputB.3 = 56a232d1ea3dd99a33c115009d102ff0f5cec7d0a54712795b1bbbbbd455913a
+EntropyPredictionResistanceB.3 = 0bb16ec4207620ca135859edf791970d6c8109770b6ce8ce5cc4b316afd66c37
+Output.3 = ec7f788a3e836879b09b154217d3774425f06bdbe62ffa2b11eaf8bdbffd8b6f9c513afd1926e0160ec337a4582eb7e2a8194a90b937a6f6e195c36d85451476dd936e89f50c5c1d7945b17ca4f46eb3f983907680a5eb339d1c0cb07f7f902a31ecd13d678af403089ebeade6ca86aea5eb714caf6aa98bc9c3335e2d9c21b2
+Entropy.4 = aad6626c58adf6dd79c7751155ddfd5a3896830f79812769669292c0d3aacb08
+Nonce.4 = f7436a87255fd61db7f77c5c7ea4cf83
+AdditionalInputA.4 = d1abb7b7d946e2d8936c0de1a48b2f456eae44a7b9441278af4511fd91dcf902
+EntropyPredictionResistanceA.4 = 777abd15e9932026bbea6e35543c0d4b96a406f63f31cc71e2831c19b2aeaa62
+AdditionalInputB.4 = 66a8a6b5c7d890dd5f4f3450665d7486b1848ba096fc7be70c19b7fec0cbfe64
+EntropyPredictionResistanceB.4 = 1c59a35088cce9815925cc7dc73f3cb66b120fe767b3dd4cdfc50e6d2be56422
+Output.4 = 703801ec9f1f88de961b77fde86e73078b0427161ca6c716bf7deebe8cbef46dab02a70b57b6622b9cc134fd8d6aa83074cb48906123d8856a97ca8aa72bbce752a6ded4df6d7001913bfb44eceb20c40e392e79abfdac9e8635164dde3ed93cfdf357d0812853f3b5728d917ae052d4c347523d2945259196de6b34214664fc
+Entropy.5 = a3828ff2dc5b420e4707b4d4dfd43407f3e50556dc04090c4042cdcc3386b101
+Nonce.5 = 7a7b56f1faff1b35969a590a8de1b92b
+AdditionalInputA.5 = c022d8ff3c18ea2889d7cfcb2b8d991f19e677c0bfb36b1c3dd5de3e5eb3db6e
+EntropyPredictionResistanceA.5 = 91a77b666eb364ba6889f87ae6403c96ef1445f0b9d1760fe657585b6f2e1c57
+AdditionalInputB.5 = 1284b2b6de0f455e6b4b2d405721d12d8a520fcc86fce12d61ab424c640c19cd
+EntropyPredictionResistanceB.5 = e5c23fd0ecc68ad67750d8c8a9b14e0760ceb61541a444d7cce10ab5427d360e
+Output.5 = f3c01fff259d22af5946f5d75c72dbb5a0cb8b5cb09234146ee0eef8dd7db84acd3b9475db1608c1883e23ce5b081505a75386a5c031d6d57c5bd0fae10fe49ad1186e03b65fc32bc94679679f558e7b516b45c8b3a3f11592e463fe6ffa2b655c514c73a2018351efc0172b266ff95bdde3430dff5c4e8782448756fe193271
+Entropy.6 = 546fa96d477a30fa13ba193b497f7790060d46ef56bd5e7e38cb5937fc89194b
+Nonce.6 = a6b1fba4514ea3f3a604a44c43798910
+AdditionalInputA.6 = 7a376fb6e7b19ec866e25089aefaec782b9e899fdbfdc09f2c01274abd51a17e
+EntropyPredictionResistanceA.6 = 248a88f774f59f27ae70207e19465aac00ca9a36e21404977818557abec81216
+AdditionalInputB.6 = 5cfd2575c5c176a291ca0f4e40cd8f519f6ccaa5ee166a08cbd39cb160ce6cbd
+EntropyPredictionResistanceB.6 = 955483ac28450c8a99216e145df6becc643bae6a30a81e8c3509dac4369d7577
+Output.6 = e8fae5f15718e87b2ffd17d3885af6b33ac3dd3b8e6b18195ce7df1a7766707c8caa9b944115434fa491ca1dd0d5af3437b8b583c480f809a0cbd8cf6fab0dbbfa6462235b4c9285f9a90a615ea576e12c2fa054dacc502d66408ec16ec0a72e637558c25df8650647b166d04562946bb125da0d185a0fcf2df4e36fcb0db74d
+Entropy.7 = 68e263a11160cdade4fe5a16c1f3e72403953c9fc66ff7ccbf56866a4e3512ef
+Nonce.7 = 81d467ae73265a984ad339a9ea62ae66
+AdditionalInputA.7 = 271b7e866d2b2cc1645e2e8b33af379c551eb19981aec1a30ba0d452cfc5a692
+EntropyPredictionResistanceA.7 = 40c214d16da18eb3422afa1548453b8269d7c4515504e7bda736ad4c5ad08430
+AdditionalInputB.7 = 645c27b741161d0c85337c9f0861c0ba5d63bb9bab921c9d66dcf066cb3218ed
+EntropyPredictionResistanceB.7 = f0e392910f24b9d7a3e48a1403c09ee69d7e43fc1f493379962b7cf73cda03ec
+Output.7 = 08eed78591458393b752d344beb749d7a6641cf80b19bae1fe8c862e6584d993998fed7bd7fd892208fd9308172f95f098745fda048e4ffd10fc92b020e437f8018e1bd6280b0eed24e559f0d9bd4af2924cdf5b2e898392606bcea5983ed6e10d4b0d1a1a0273dc7f1ca198c3075a8e817fa27135df304a0f0c0bdda6999d1f
+Entropy.8 = 102ed6483fbbb0db9ad44ea43f1d61f33861a60e4e6fd8ec3064fc85d7018125
+Nonce.8 = 6bf5984b6a5c8e981eaf2d0addda1a4d
+AdditionalInputA.8 = 83c6a874acbc530e8e083663c5be113924aff05719d3c1fb3de8efefc70a8ecc
+EntropyPredictionResistanceA.8 = e8a5d37f5845d0bd6e7a606c34234926bfd9b3fd38e8a51bb467eb3d36340166
+AdditionalInputB.8 = 88849459abf5bcc06c477ee3c0aec339af3ce1fe99eb0eddbd83f9aa935636ad
+EntropyPredictionResistanceB.8 = 1a9777c0f9d0acb60d17bd1e2f05723e62ee31b4103a6b2ee3e36390322511f8
+Output.8 = 349fd01c131b68ac2b391ce48f4b2af3a1e310c3f335aba82852684beca8e77f7fce76b3153985d69b8d2506858c62eb48302da249191eddc42377b9b274dfef7788af21da4b71ab8a88cfd1d9c981fabdd6a9c97cd6a36676fcb0bce0358086b3e88705c52a053d519ed9fa51254215cabf8448bb2827bbb8aeb7a476c6005e
+Entropy.9 = 115cf07b3f0aa3ca7fe38e7ed93cf3ca9e2c9115c2092922710dae509ddcea68
+Nonce.9 = dcf0b3e89f76361bf5ac4bc8ffdc3078
+AdditionalInputA.9 = f00a4b2c0e7dbc3b5b58dd49c1c449a4f24a53a4ba50a389d9e159ac0dd9ed55
+EntropyPredictionResistanceA.9 = fdca265148fab3161279635d18df0d02991370c1249799d6597adee4cd8753b5
+AdditionalInputB.9 = e7bdc0123ad7494eafe48677b91592adf7130228f02a3f0380d96ca9b50c44af
+EntropyPredictionResistanceB.9 = 2df0f76de0ccad858758703db1e8e005a24622a24c7b251a325e6f6f023e1596
+Output.9 = 104547d715dcd83ea26aa7b9f6c42f31efe1a5a5562e769958c44bf942379ec558464d21a744c950783d4c342c89f1833fa1e429c003184ac50726d913ef27bf032275d288314752a6aafae4b2e4f082e32e63422dcfdcbe4aae86211484ece568216efcd9ce90f43ec6855d5bb436df35556b8b1b600b367613b3293a76492e
+Entropy.10 = 973846a673aac4404e3ccaba1a97bb709554524a8c023b7992d7dff4ecc5df18
+Nonce.10 = dc8a585513d39bb32ddd4665bb35cc29
+AdditionalInputA.10 = 301ced97960b56a4216e51945009df95ce345456e7d3bbddd3a6f2aa91ca4af8
+EntropyPredictionResistanceA.10 = 8d73638fc3d42f00896eae8afd932db15613747dab5b1c46cb5580d2fbfdbbad
+AdditionalInputB.10 = 83ec0151b1fe1fdf81fa5f76344a17d9b2abca162678e0954149a286fc100c14
+EntropyPredictionResistanceB.10 = 332da7a257020f57aab7fe80753e0076d96850681e5668525e4bb2e306890402
+Output.10 = 60ad5ca6c2e9dd1bb2e4fced1d1eff717faf92104eb3450fe54b4405609fa2290e649668edc91a35fbd616b31dd6cfed9ccd448f078b49a1817353062aad1336808a469f9f2260af6db18ed3639eb1108378c29f26e701febc8490060061de00f97d72cf6cc985e93b91511435be99d81639654dbfdbfb9b58294eb8448a6ebd
+Entropy.11 = aeed9cae8262c475c8219743a84410e4334a0636da54707539ef14063fe84af8
+Nonce.11 = a3cfdc1acd96a26f4973f1f431ab480d
+AdditionalInputA.11 = 3fe39ce6d8507ab6e5bad5e5996545aa5f7ce7bda3bc8fbd58f24e56b0a4b5f1
+EntropyPredictionResistanceA.11 = d9885ba1d14095386e384a777fca71f5390b118201d99d7b312d2e3e402886e0
+AdditionalInputB.11 = 0f0d4ee10f57c2e95312325d5d5ec4c30be78d42a51ce015fc0d2068802aadeb
+EntropyPredictionResistanceB.11 = 0002d7e2b84258b78183d6d1f061221132f43fbe27e7f0a64af3fbd8b7c956ab
+Output.11 = 519aa6e5fee832c8ee1c97ce869adaf4008ad09b0d77fcaf8ad4c5bf12d0a3e88c63a26df7f9c0917922db8dc1f3b865f56b081470a27934b6360d0aa4645903a3f0b79652b1665239f2e23e3c413e4ba3c104a8ab20dd02e97c1da6da4a5009e87308867bf6be3b29da1f302576fd637ac4cbbfff051d53063df9d415b09180
+Entropy.12 = a610e231f2cfa6756d0200f0eea7281c6def8b415fd027daf2ed7c2c1644d8a4
+Nonce.12 = caeb2ff025528b0f10cb7712c2120e2e
+AdditionalInputA.12 = 3486242ed68be004a7f3d7b16f3f15ea1fab00c0b608f99f42fbe100fe4f47ed
+EntropyPredictionResistanceA.12 = e83a2fba84601363c91678630e49e21f5f73bf22905d616abcc9b6a2a29e0930
+AdditionalInputB.12 = e5528c5b4b63f87132ffc0974f066ec9192fded9f781b78ede18bec9a99f915c
+EntropyPredictionResistanceB.12 = 8bbcf6a8124a6cfddf3151ef2ff051948edb81fafbb29c7ccc7e1ec466baaa5e
+Output.12 = da3bd1352c2cc8da1064019c30463126825a08af6e5f8f4d78b116467d087a65cd2bb8191c3f8d5deaa3d48dad9535f874b30637a7f5afafd01d632df82349e0b8f638ff5640b1e89f1c897f3f1455995f79404f32a93dd2d946dda47385b2961a3562fa9910cd48da1620556efa640d68de0a708f34e687021d29f014097ce0
+Entropy.13 = 413ea1282f42857978f26423cbc1d282c67bb19d22353a9e009eed012f9df62f
+Nonce.13 = c3926b3d13dbbd8b1dd172d72150822f
+AdditionalInputA.13 = 3062f0b6ba4f09efc747666f40c2383447bc72c55d924cf3eaa1992d5de82f4b
+EntropyPredictionResistanceA.13 = 9e517ee2e5eefc3ef586de5af422a661a89166437eae06caf1c4eb1efd8d88be
+AdditionalInputB.13 = 9f82b4f70a701d148bcd55c7504fae8349e464858fe79e69cb3e50cd21f8fb7f
+EntropyPredictionResistanceB.13 = 9545bdb6c9cbed808bd50901a415fbbf806f108cd6af7dd8e4ac05722e987f8c
+Output.13 = cbae3853451a84825d7ca1e27b6bf7416506695836b1625b2ddc523eeb6489cf63459cf88c36722a7b924f81ac29fe1e3736a572394c200ac83e299060d8debf280cbdfa4bd8b7ccf128ba448c014303c24b17693b10856cb4c9ed5de94f7c37756a1842bbf9228a0f628fcb76a73f3076c03e0263fac8970ab9a9e643c1ad88
+Entropy.14 = d351d5368b0fabd359565074a6034ac7360ac2d8ffe3260f972ed5f1b8157c62
+Nonce.14 = bca05f6e7e0bbdbb0c3116109d1af650
+AdditionalInputA.14 = 3a43533c5f6652652c19e110c5cf75040baa515137f2c902f7ede59abda4f7d9
+EntropyPredictionResistanceA.14 = dd99b0f41bd73b00de6bf2188b9c3263f3acd524ef8374f14714f199b4e6e263
+AdditionalInputB.14 = 2563ad078ad8eda919ed40a81b634073064c22f2b21926bbd9cc1d7c2aff4f07
+EntropyPredictionResistanceB.14 = 45ddc44189bbcd60713c40e811d6b2acdd1659c670f715703f5b80eb4152311f
+Output.14 = c2554fc1931b72acd98e4949707802ab471c4f2eb62813f87f137e698cf89a13fa7366a97b49587d9a0c4d42a62eb0bce27e2ce0e67324739c49eb180216beb51fc82d45b7900fa1c2d3db3a0c781ef93ee57f6a186a61e0f0fd25a8d8d2d9170bd18714cfc1a6e7fb6dc992579cfb0306de5b67c01522b3ea3955d63a775cce
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 850f9e31805c8a62d7fb6fe416d99d7018fdbc03418cc288f57d228e52a07d2c
+Nonce.0 = 61140916e1351220e703d7089f1389bb
+PersonalisationString.0 = 569fc1a13483136e350e865d6b291d70eb8895d42fe6b4af564b7aae8628ef08
+EntropyPredictionResistanceA.0 = e9484250991414673395a9c700177e51252d4316fd79e25613b6a681fecce48c
+EntropyPredictionResistanceB.0 = e7255e59bab76bb37c21f997f49eaa9d400644b5b52a33eb521d623300125e00
+Output.0 = 1b95d3b9bf38758830deb226be160c715a6e8980a13db56c35a7d8367ff1d7120e538fa109725231d33196a0c856468bb8c03f350a322b0664a65df284f247c5640f03056b9dc25a7636e4354fd16418211a7e1de623e5452faca17236469cff90428bd39a994aab4d09b68864e3fd001ae6057635b2c9b0a91acdc3598e9457
+Entropy.1 = 5ce550a9982a5341c819fe2900195ff21805af5aa7c8c092124b44701449d34f
+Nonce.1 = 1678c346ef3605d161c87f08fe632ccd
+PersonalisationString.1 = 4ea4f52645a61b4ccf718b5322f6e998be8f8eb601d7888aa714319934fd715c
+EntropyPredictionResistanceA.1 = 194340f16e06736c0044c93d4f7327ff5c243364c29dcaa051d8698e62017b40
+EntropyPredictionResistanceB.1 = ae200bce34613916bb333dddcca2c9e2180c788551a06fd6775747916abf6c78
+Output.1 = fbbf77e8ff91a7e305b5cac7a512cd2124d4fe0bbbdf24fbca35cd6f29a0b6376704423e7d509ad7e0687728e157981c3aa8592d9e16209848ca3e0ba2957ae7d852ffe3fb58626454b6291492f243b6006c9805b3586ae700f554cc43c513457a47c9c08b394785488e6697d1a4e0dd7d467854fe5df67993f1fd6565298136
+Entropy.2 = aec67e7adf46ba178041a4c2574eab804f253bfd4bd21b469bae4a7ef4e2d7a8
+Nonce.2 = 000f7d77024bcb6ecfb3a28098f83f36
+PersonalisationString.2 = 63d5f1aa2daca97a50abbcaf2745968e6f63dff47d0b3fd2bfefcfacd2027f3a
+EntropyPredictionResistanceA.2 = aca8b93def0014acfa200e4fe01814d15af570e77d62884ec7745f40c9af69df
+EntropyPredictionResistanceB.2 = 8a9402ca272238c7caf227bffd7eab924d970ff8fff4f487bece6769aeea1de7
+Output.2 = dc981b925586b9b0c24210e66ca6156cc3c9d97a230e7b2aebfd36c4a815bee8df4791fcb7b55efe364a7471c5cc6b181446e47d21592ee915d64faaeb53030c168c56055f003b26c6fb016bec30cb59096bd00a64b2e9e3a6383731cd4fe56d89a9df87263ba757377dfda9f5b9234dcc35a8132deb4736438e6deebf72ec5b
+Entropy.3 = e4898510813e5f40f5cd97877dcbafdfb90a512df708fa0aa502b792cf37255a
+Nonce.3 = 5d0b62fbca516ed07d844f53324a4195
+PersonalisationString.3 = 37e70757ee3ed3ea05ad6039e313f565cd24ea550323549ad338f734969f5aa2
+EntropyPredictionResistanceA.3 = bee691cb6596942f791b57f816f99f827b5b76816d5a9bd258f5dac61d060a2e
+EntropyPredictionResistanceB.3 = d1f8a99292ce19893dfc316783dc48c9cf5545a5465a750b71d97b19246169f9
+Output.3 = f66fd3435cfa8526f430b9fd00a74837c70fd5aeba462de3c8ea796d424246f89d3d10f806629c42fa2403ab855bc7e3a93a2b936c7dca43e00ef714eccc8e34cf1a841e4211cf1ea6ca42037577b511020720ca2f47920d3dd8c762bbf61d05725da031e7a2bc8ac1a1fc000e61b8613f5ba44e2fc406ea8394ee63ca70775a
+Entropy.4 = 54cadf4c572fd9d1359a83941b9b4444c28abc146fbb9e78f37a21d677966174
+Nonce.4 = 8d48da35762a9509c3380da38de457cf
+PersonalisationString.4 = 1cb49d717d8663252d999be7e169e8d6f0386514800ab8ca4082e62b33cdd6af
+EntropyPredictionResistanceA.4 = a56fc11c63f9dc38fb5bdb83edd176ffc4f57ea014013f066a6f20e268471335
+EntropyPredictionResistanceB.4 = d1285f2db65b6ecd1a34cf8e1e77fe8d90a4fef64c0899a6d2f24aee021542bc
+Output.4 = cf045eda7a0df7b710726dc06cb1301c5e8d546a9e2df5f0022532e4778bf39e143bff68900c8f7d95ba6ffa25a6245ad417354dc6671728d5a71cee4ca2d4187fed5754fd7b6de1ab8dbf727c55c6b964f527794a5b5312eacc017f4d09a7b59786979f18a514cd44c89f340303bc10bdb22f3a79949c59d7412740ae37b46d
+Entropy.5 = 324ca8a49a073aa6ff32cde752dd9e98e87753d8aad3acd76c2f2a08f3559ed3
+Nonce.5 = 4cb3c93baf03ea3dad3599b010648eda
+PersonalisationString.5 = 888580f2747d0bf3d68550e7b03658cfd85d6a7e3cbf490525ab307cafc84d3d
+EntropyPredictionResistanceA.5 = 454082975877e344dd5d9551de52cdc9cbb2fa485453e0662d50acc85121a570
+EntropyPredictionResistanceB.5 = 6ce578db713a10db1d213fb7523259981a62da6d743291c73f2dc55375f5e847
+Output.5 = d09e601dd59bb32c4f2241db27bd94be4a8a1db5c818c6c63aed792a8a1cf779ba9b7e9bba00dc78903af97feb0806bc8e2fd07520979c27456764375b5bb93ce0ac421917f2790079622395faffc05c8c7b66725ce420b66907dfd51e7d951ae41c8ffd23799d59caa59ef29015ee21278260c1b8f9317ada8cea72068092d3
+Entropy.6 = 1f80ff2a49ee8cd612effbd2006ed1566da8efe069cecd5d0a247cf81d7d857a
+Nonce.6 = fd0800caffe9b9249651bd4125d0f7e6
+PersonalisationString.6 = 31a39d7976ba1fa2905050f9c559430302e0eca33d8de98565fab06436181f28
+EntropyPredictionResistanceA.6 = c4b00141d44ad5d3fe7caafc715ad57fa6cbca78f232b5c711e594bfb29984f7
+EntropyPredictionResistanceB.6 = b1493324ff9e711d56b5c63dfdef8822e368404f9e2a5969078a67cee5fa7a6a
+Output.6 = cb9a39ee0571c1d5974fd020a79947a96939143f3fa9ea63c884aa57a6bba4de028a06adaf1bc177d7e3aa10105a78446130726a52a5b01565acaf115f1cea5acc7e55d51ed2f7a7f278ea0e309aa824242378391681db9ca4825c08144277d87a2443a26b40f9890bfb649c90b0898429a9c232a52b354a960397cac6ce1adf
+Entropy.7 = 16715764b7afdbfc746f81db2de3f50552733b1d8def2950496c240a20257f82
+Nonce.7 = 436431a20a1e47d9721e167d993f228f
+PersonalisationString.7 = ed3c3817699a66efca563f77c6e7e4af64bb33cafc0388c3a5590cad72d47693
+EntropyPredictionResistanceA.7 = 1e0e23d52c7578f06150ddb64133a29e9ea93566c3ee8fd8140cc217402f8fdf
+EntropyPredictionResistanceB.7 = 8e437ea547736caedbef7c413d38e816486449a4600b8aaa5aaa11da4388995e
+Output.7 = 9dac13d151c72562e145820d28f4fffc931dc4c3d8cfe8d5b3aec252f7f1443de80acd70c2c8eaf61e5834cffe101f3c4c3a5420fc05be5460f0274445c8f27f83b477be63486f333261db7cb97ccae8b836606b1df60590e2d02c41ee8e6197db3cdf21f3b51667ba8cea6c51fe6b0bb29fa204d3eb2a70348aed4771727fb5
+Entropy.8 = 8222449912ae532cb0ad1b893618cc4d1e6d3b7eb5380124bafefa3469938dc2
+Nonce.8 = c7f41d36a0d8349f4ceee8cb7224623c
+PersonalisationString.8 = 72af1dc596a07454337adbbf2be6b2cdd2e840abd83cae17e9835413da284cd8
+EntropyPredictionResistanceA.8 = 00b67359f86980fa386ea27f2025cdf9a9c6cb9e287a9aad614acafee32e4bbe
+EntropyPredictionResistanceB.8 = 24c342acf6b073ff1340aefb0379edbce695b2a7ea81679426a6a732a6a959d2
+Output.8 = 1521a82732558afc22a420e766c542c9213edd1d93c136d637389c42be425442d9a70635d1b270dff285d859185ed8ee20bd96d4f5edf3b4ae4d4164047deba9f61ef0675cee0b23055bbb56b1e9f1de16e6ee535082cd038889c1961a62eca2f6565f9d10626f6bfe7b291a82225a01aeff460c25ed6ecba080a9fc10f6f4fa
+Entropy.9 = 347307a22e90d2ea96c740c80f0a1c364d82901b931951ddb03549baaf0cd1da
+Nonce.9 = a9753c42c99d53f7b2d5091f8f8066da
+PersonalisationString.9 = 55b4c37eb68e378a2bde9a6c71a733697155ff71ac330776ebeaf66f3af2b0f4
+EntropyPredictionResistanceA.9 = 5e80d791e87f643e5b61dd532f062b49ac2bc568697540f578da4b8770748bfe
+EntropyPredictionResistanceB.9 = d61b9650646984fe2f83bde1a40969cd30147cd15bbf6d26b5a8782e610df640
+Output.9 = c008a6b3d9bbbe1b361612d4f850e60d191a5c3700b3bb013b7f64ebbcd6565b963480a3b38f508852d93f481c47b4500ba96718d26aa260c2628aa87c63f9e78d348dbc974e49b000a4ba32720cbb78a5c7bbcbb1cc777e47ed356b710ccbec9b293ff42583a9149899879fe7eee63a93c7a7d3bcf79400286038c05b6a923c
+Entropy.10 = 540ddc9230f7dad83d4ba95b30e55b3e2f3015fc27d795d1871004632e8519b4
+Nonce.10 = 1713b9fb769c47f1c8015d48f29b85fc
+PersonalisationString.10 = 7e3debef9d8811f3d578f86e1e098a95237734564254129bdc633e00b0cbcfcc
+EntropyPredictionResistanceA.10 = 23606c2c14316cd866fcf00c4194db971038242d452a5515ef7de8bb2caa814e
+EntropyPredictionResistanceB.10 = ab96acc0ae65c2e8dac60d4450e025bd40b15b3919205e310e6d13f22a6e8daf
+Output.10 = 2bc3cce606dbf8694ced44b57c174f09cad1e242300ed1a939ed72a5c00bce17d4a5b5e1186aa46c0b2c66f110d85bd719ae82e0dae562fe5a6d2d161ce1044a6f6fb23a650cfe18dcdd03ab35efacccfd8cdc4ce793dbb0c1c250ce26ae10d3c51d1c2219d8b83df9d7c991614f664f6cd98c4cac01a75d95ae8f4ad04b9425
+Entropy.11 = 5c66cd8902f700fa15893d6efb973fb66cecf5f4972814f1118b6750027fd0e9
+Nonce.11 = 48fd2446790868eb80a8851d0216f59a
+PersonalisationString.11 = bd718bb17fa33790fdc1b59abc02f22480acd44ed5afa01e63770f65de5fe90c
+EntropyPredictionResistanceA.11 = 89390f0fce39fc7a8099114311ffafd4fbd16984d45e8dfb9a72f0984ee3561c
+EntropyPredictionResistanceB.11 = 03e84655828ea55fcf22f1d4f87c8f4df2382019927fbd815189765e4932a384
+Output.11 = 24320a327f73b9fbdddd6f1855dc2484f007dec6f4dfdefc10a1b3656010c4011bb8830726032956074e112ac3a6939bc77c1b518a36f0d3c12f0a97503fd847226194a0ed160d32a66a1d10948b67b49ef673302899b84f86d985503033be5fa37e16b6681b9df0eb6111149f143824172bfbd484fc381a05d0112650b6cf19
+Entropy.12 = 862fa0da83869f6bcb949586ebd1e2dd8affd2f405d22e9ebaf9fe4d9df5d8d0
+Nonce.12 = e060c2479f7956637b59dce3f38b0a85
+PersonalisationString.12 = 19dd4080c4c0963892c19ea48fa896644fe33e2cdc4cf8d0a79db7dc1cb7c0af
+EntropyPredictionResistanceA.12 = 423577c977b64399470217d8b7ae3070cfc5beb21c396d91f4df1f6855f6bd00
+EntropyPredictionResistanceB.12 = 5eb1b315b0d9ac9f080f9cf3d41e6789fcc3c68e37beb4d64e6aeb95c2e42844
+Output.12 = ffcf312cd63131d3591632b8d482adf5fc5dcec4b295207a51dd7a5fc5823868a9747f475c92c4b09ae4b39c35b3d62f56730a07178121f837e0d6c3013e1a56bd9c4d4568a17c8bdb8a0040520956f9cffcb818c906ed225b29550069d868cbbd0c71da1883a3da178f1bc65ef9736848f8b6c9187dbe8a48a41f143efce883
+Entropy.13 = 7d4d454df8234225f8fecf698e859361aff4f0d9332c60ebd4bd9f3e21bb4344
+Nonce.13 = ab15f6921189faca83f42e5403ef60d4
+PersonalisationString.13 = 287e1abce10969db23cedb0f2dc0c5ae44c098a923e8b677551cb7982dc3b46f
+EntropyPredictionResistanceA.13 = 754598e5362962e50c1ed1f2c5fb3bc5ecd647b4b348a32468c2b66c5411d3cb
+EntropyPredictionResistanceB.13 = a0adfbe614c84632c5432f4763d229bc3fc2add19d6e0b41f4fcfd60b3e2760b
+Output.13 = 5c2fc594c3818408867015c70f3669fd440265f651baf53ce129c2a749293824a5c0359a1e87d1313c63e04e94fb1228db65963e0ed710b4cdde4b2e5a8598141ee68c13529932728228eb7bbada52bafac6d063fc31f56bd587a94c09d96fa6168c76f6ea22760394b6d29b47184046344c28e8317bc7383e1770f6d890abcc
+Entropy.14 = de3eb5045537e79718cb0abf45a1c1c6e9ccb85bcc93d6968c16e2b66a47bdf8
+Nonce.14 = dc3d43831d3ba8531f5006cedd5fe4bf
+PersonalisationString.14 = 616bee9bb1b30f93dd1a15f43d3e7f70fe63fdc3bf927a6b56174841d322b95c
+EntropyPredictionResistanceA.14 = e43ba5b540971c4f02f0212bbc0ba521f3e64a627c1d0a30ccd7588c89bc2555
+EntropyPredictionResistanceB.14 = 3ca4a33a72e7aed850e64984c28407327d94e6858a65d42b16f985d010b783bd
+Output.14 = 2567b74d4d1eeceb6321817f5ada210954643e1212b766bf2eb84d2ce6231c58e346ed57824c409f3c73de40395608a7d3c52708f07ee7e721b7c42ccce5b0baae67364e1cffb7fb0e363eadf3415c99bdc7b730b8c66201da1f8a2290cbd6165912484def03a96b237b793b76b76043cf9fadcd5e66ea94e6110c4b2b025232
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 8fba04662d11203823179e5e92daa25e58a3d179c014dfe23033dd5d45b03116
+Nonce.0 = 1f41802eafe1023796b4d0ea8ee1624a
+PersonalisationString.0 = 0de0ace1f5fdb878b6407ecb9bbd85ba2bcac4dda8d9bb4705275ee74a0972d2
+AdditionalInputA.0 = bd2c057997cfb7437daf88c72ab1913aa7dde606ec1e1c66d465353d3eb7ae93
+EntropyPredictionResistanceA.0 = ee46249955835a0a4979cf320e12d8ca3b092ce7262b6517a67aca1a95c52c99
+AdditionalInputB.0 = 6bcbed4ac1cc5009268e18b5500ea82f821c5debcd35a3672daf594db0a840e4
+EntropyPredictionResistanceB.0 = 7a6988c887886d5bd54f5170c63a94416b9e1e1b07c566e713f97ae9149f92cb
+Output.0 = 5eb5f2aa880ef9c00193fa27a093dd4683547111f05f92ef090dafec280b8cc10d873748c1d303ef3eefbb8d54601649a91aa8f100770d1ca37a53b42409d0151c4f8b45c2f402ab9d7e8b705278927b0ff01079fbdf3b2d1fc25e0c43685e965cedb3994d8b14ed7e4b6a2be89ea81888742351608163375ed89477c61a2e3d
+Entropy.1 = a2fbfc6808bf465abbebab81940be519a44f6b8748a04743b4bebe9b4677c74e
+Nonce.1 = 93ca22dadc31266141ad539bf0986740
+PersonalisationString.1 = 9370d6cc0d9019acb29cdeb6775be3fbfedb1c22cfb9cd006ab6a6c6f0f18544
+AdditionalInputA.1 = ae0efeb7b744c234ba5701627f9cc39b9f069be98eb3e8d8c866a1393afd54fc
+EntropyPredictionResistanceA.1 = 083ff728dd0b9b32a7203151b48c9d494747d98e978f493fed8c1b053cef6ecf
+AdditionalInputB.1 = 6d06363c4689f78cca1a344c6271fe297bdf4aba7dce674bef481346fcafe3af
+EntropyPredictionResistanceB.1 = 1dbce0dd1a30f0d0d5d23be54278aba34932637a4044b848d563095d95788151
+Output.1 = 0549b71819766c66b188a838936368c8c9f2fcc6ae3a48c991299b3222760dc61d0c310411eaddf72008e8130ee90debc6dee9c03cce960ae96872fe927dea5f6258e29d356c33e7fdcac5f06b1c0ede5c88b6326f347d72ffd47db8faeec855a3381b57c59530ff11318f80334d664df5903bffadcbe31607099a77a517b668
+Entropy.2 = e95c86a86597f7064b8555e1ab73c62d926205a360db12ba007d4d9df2779dc8
+Nonce.2 = 1d6b26e5f744ae6b9fece945961e1ca3
+PersonalisationString.2 = a4d1dc474ce6e02af34311e2e5c5390639a5a76bb6fba2edd77ec84eca74fc7f
+AdditionalInputA.2 = 714191fb77f7a66df3ee86d1ee48ed9c07f5c997285175028edf190237902857
+EntropyPredictionResistanceA.2 = a0de293acd37f896dd434b8816a5d602a99d185cdf8b690a6fccef4244ae7ae5
+AdditionalInputB.2 = 6ffd020c7a6fabc8502c7a0408d491429b6faa765bc3c87a788bae221797ee28
+EntropyPredictionResistanceB.2 = 9eeee97fef588de4cc2c64a6acd49e693b14d14eac50383027de28784d1d18d8
+Output.2 = becb0a7a94daff22dbcb7e72f1c1c56f1dedf434ffc2eabe58f17b449d36b032e4c8089a07fb36425de3f63457b97935b95bc3d6c948ebd8c3f2fe4c3ed7a8e234b86478416420680542219353baf870f78a9168c9f8b7f835e930cfc7eb32cd385c64ffc9f9cbeb1ce09a4ae423f7cc5b8da51168d0f4059fcbf509eb60a41f
+Entropy.3 = bf21fb5fdc93ec490cabcc6c26bb0c98eb8564a9b85fd8921c326c4306faeefa
+Nonce.3 = 7f6fbbee2d3ab02d96add7e55a1a31e8
+PersonalisationString.3 = 880ea1aeec325b93812f921d6472ab9e672031531aef56421f4fbc9f42181f57
+AdditionalInputA.3 = c304a9628f20c3698f15f25d6ab60807f5eb31e9d9c10353dcb03ac59f54ec85
+EntropyPredictionResistanceA.3 = 6cff46c1d730a828eb9404abe076da5c3b8717954be98775ba50e2802c3caac8
+AdditionalInputB.3 = 1e0119544966e038d38eeec612e5b2e793cfd08a876bc0b077ae777d0c7592d2
+EntropyPredictionResistanceB.3 = 61093c1a201540a906c2e8ee0dc1baea64b2a12216a168a7247939dda20d9b2d
+Output.3 = 34de4cf0b8cf94c858e8722f95d55579bb6dad6e191697a406dcf250b78e0c681e418c40f027776a3652d6df1d74569004172be24812d55abd2558854a849257c5d7ae554bd1b8c5557ad02cc2dd1192290f93ab2aea2f68cd4e45974756ad581a672ced221733f8f84bc9bb33481bddfb6eae50182e95289a87d1c7a32c2fc9
+Entropy.4 = 6d4b2b10d6a5c0047edf70a8cb2e4d9cc76e767d87b35e0a97c567aac8517c6a
+Nonce.4 = a648a19ecddc8b2024dfed50a7c29c70
+PersonalisationString.4 = 964c7e3d576dc6489684ff176e77eb66d0c1e3212fdebefcf912535d2a4c9884
+AdditionalInputA.4 = 96abdb464f5658ed1225ac255cf220a5de10f7d6c36a0716f7fe0edeceeaa28c
+EntropyPredictionResistanceA.4 = 12eebefcc78b697912ff8981e8dfda176e64fed5e37319cd885fc1fda3a36c64
+AdditionalInputB.4 = 9019257c7022a62464c4a298274382228fe22802cd7884df766e5a278e4aa403
+EntropyPredictionResistanceB.4 = 68f84ef0d773c8f128741f35f000270370fd83268804a0ccf80cc80f4c26e7d4
+Output.4 = 9c2550ed0049d7c755a41b52dcf06c7d6f81c727e57114de5bf199b2aca21289fc55c2ad95599a16fe3d5a17fd59ad6161925d8dae8bb58188bb2f11de35371d6c88f881897080c236a616a129c1e7f4ccda4db07e0629d33c411b8d19dad8fe99a37bf369913642d64dbb02ec7888aa376bb92acced359f01d63106d2b0cb7a
+Entropy.5 = ee5552f26b5a5836bddbee040aa82f3b05ba6a60ef2536a481c8332c50421f07
+Nonce.5 = 93567658358bd9d7b4734d4909a2e30d
+PersonalisationString.5 = c2246d2be91c4d8d5ecd6d79cfa9e2d602ff4a841f8398485ec758f8a3a11686
+AdditionalInputA.5 = 359327b6a382fde3853bb7ae9e0cbdf1f18153e2acf4f872e1eae6557477d87e
+EntropyPredictionResistanceA.5 = ce1f40842adae3e9c3acd435b908c214cf4093ff0e5d45d100192a0d1dfc4b23
+AdditionalInputB.5 = d79bef94fc9eb4c80612169f1643d09fa5274a6a03d1ca0a8c54885206ef99e7
+EntropyPredictionResistanceB.5 = d52bf74f8b34686763331c63707d3be0db1422ae4c5bb2594db0529f81c656e3
+Output.5 = d8d3c1b806658b8079ff8397eccd4568048f1c6e83e5adfb0d913b7200829bef6671a27edc879ee401b5fc2e6430212418cdc840c0a3e5f3a968d09d2f2e0da3d6ea4abd73a27ecf59879044a51abfc256baced25bb61202d1934a95aab29f8e86dd1e5b073bc1a692d387fced70c0b65e69e81cdbc5815a51e88070967f2841
+Entropy.6 = 623973f2e5bcf9430ce8db43b7cfaa5a8265bca974453a1c04ecc647296d8865
+Nonce.6 = 259042ddfae10623355f1369647b8bf4
+PersonalisationString.6 = 2cdd0e18b9736ca67813b6511640db3983c4d473004a07de42a63acbb9132d89
+AdditionalInputA.6 = 1cd649f9d3704f3795fd2ad88799f8121a5b8855fcde48e2a93b535e7ac1f859
+EntropyPredictionResistanceA.6 = 244e180977e1dbdd950d053877eaa88e59a3a6141f99e56ab2f138baecd3ea0a
+AdditionalInputB.6 = b39380d09f34d8fc076290a29ce263b9aa6047d46a6e67156ae38e505a5dc7ee
+EntropyPredictionResistanceB.6 = 35e5929596ee4c20fd6e690ebbb362afd43e2854fd557c0937482aaa6d7695d8
+Output.6 = d465ead7bc6293c4c402b0a4e81520905f1addecffe79246d44af557314dea3a9e9c6f0e93191f59fc3f3941cb9347abc4a16cd606a8649f296ebb10e9c9d0acd4237fec1bc193a3dde941a12e4ae431033441a598433b73adbe571905fbfb3f34deab949f3b466997267f55824c6532ff8735fbc48a4085f92efd1794b23b45
+Entropy.7 = 7381480be37aefc60529b96028a0819e363bcb39c3e03c60b01fb618b6ab08c2
+Nonce.7 = 1c3bab642df3cb0e72693b0cd30803b1
+PersonalisationString.7 = 2f2b1552acf56b012d91596f1427faf3c3e2fd7e2fb59aa2465da460ccdd33d4
+AdditionalInputA.7 = 00b8120362ec42a4de27b7ab25f9c43c5a9682b1b6acff1570a6f655134711ec
+EntropyPredictionResistanceA.7 = e6adcb660960f60d07c2c0b9e5d68f438bda9a7ed97eb9fe2fe54124f45b79b5
+AdditionalInputB.7 = 7e2b00c5d27c71ef09eed4bc4feaddb9717c5ddbc6f1374c05106b4c90d9611c
+EntropyPredictionResistanceB.7 = 92c6bb0c4d39b610f098b9725c1ec3c92faaab4da6b389634ebf2a0fbd34f259
+Output.7 = c6ba13e903c2971a3e28668ae64ff9ed9b93fc96b7734a2031ee005e7ba415a45b7233d224a024ba4705603648f8e24710d0026a6ed87df61ce50e71f6de1b37f992fb7919f2d7a589cef84fd258c791f12822d3a5dccffcd433126f80507d765aae6cc5485e6b55c55edc8495131c8f31e650a7e448b7eae57e5b99cacdb87c
+Entropy.8 = 80ec42696cb47729c40a1cc876f26a61bd23ebf37cc690fea0d760ae67b91c28
+Nonce.8 = d9d390ce7450715060192fe85f324a6a
+PersonalisationString.8 = 9a5670f158cb77923203014d466ef3fc0a0fdf860ac0ead5c6888f900e621334
+AdditionalInputA.8 = a4a7e4ee0d2e2ffa35932d1752af762aaf338c7dc71fc5501c7e3a86e961cee8
+EntropyPredictionResistanceA.8 = 4c734f081f602c32eafe80af56fc93450061a14e738684c10f374e0f31f5dd61
+AdditionalInputB.8 = 557f60dbcb28ec9d391110c002dc9893b57274fb5c905d17ca2c40d9c64a49cd
+EntropyPredictionResistanceB.8 = 3a20651eebeeaf55ca9838845ba93af6bfccaab2adeaf683af287473c907a340
+Output.8 = 5970e37c2b3ff62bde2b91fcf3429494410654a4cb86b5f3c1fef0dc65dcaca33ac3fe28732b075a8396d4a39c207e521c4242e60f1d865038722a86b42a5aa70dc8b66e1285ecfbac34fd18699fcb24df9d1ecc865fd921b8a1d7c26aa8c9be45b3c1b77c3e503e527d24a732e5fefcb332344db202ad378ff7ab532e45a474
+Entropy.9 = bac3428760e3bc1ed3f3726079fa654001466bc98bff333364e3f2ae0b60e9ea
+Nonce.9 = 4fdf2a4d0736ed3b24017def6f636a62
+PersonalisationString.9 = dc380139d01ca65540ada44e408c9930a63432a56e5c6ba7c0e9c7aa95a8d1bb
+AdditionalInputA.9 = 840efb75149fb35ca7ac27d6f9ab01c17cacd933271a98d509c068037e451295
+EntropyPredictionResistanceA.9 = f045d92863e07af2bbc6a67cedc3cbada189294c327c11501171a00f77a5df9b
+AdditionalInputB.9 = d370a9d1fdfb2ae5a4c05da8e46b63494fbbd9b329152691f1817b5fac169ed4
+EntropyPredictionResistanceB.9 = f6e66ae9ca74be3d08f3cfe10622ee02b65dab906a41d0ac9b2556239e8fca13
+Output.9 = d827e4339084b229ddb057b1496ce82933aa7b846d86649596866d28de9af83f8d6c8bc947340d7d89d09138d527e297a995f857ef0a5cc65e2c94ea836fe0aa31a20d68cc82950bc34b2526eed532cc4d94c8bacd5c69331aa9314318eca62d7fa358d23bf4d711b32b464c4b0a77d6a63325390bc4bc8d28fdcab4df99632f
+Entropy.10 = cf583cbcffdcb67f55f19b2996f269a4b8ff44e5dd21693dfbe6160c66cffc33
+Nonce.10 = 3c60b6dd6cd8523131b5997c57b4f574
+PersonalisationString.10 = 62f219e04dd7e93a5dedae7cbd56a8dcea806b2fcd23a98e333a6b0fe3396a75
+AdditionalInputA.10 = 288857cd4b43019798cda0c28fa5f4710137ca83704b558a66225e7188c30917
+EntropyPredictionResistanceA.10 = 4ec4760078bb0e15195657b25d9e9c528696a2f14a2314eeb741b20aec75b9b5
+AdditionalInputB.10 = cb18ff792eb4b7d310d7508e4bdd3393bc10f45f8e8a6a06f3417a2deeca99e3
+EntropyPredictionResistanceB.10 = 6494103aa207d962a31597f712b0114e95c87fa6902c6a5b667d72218d8098da
+Output.10 = 08600a2a0b01deefa6a5fb9383621f3b7e328bef80638f05d5945c09fb9ebf60534e23d1dac4127598a1fd2071d8d125b365d9b5d4cd81587544753e8dabeeaad8834da75bf7032fe10cacd81d968eca99abbfeb52dde1cb4a01efec7225388e3e85765107450e291b3fc34499abc2eb0c89271d1c7cad7613f0da32c64655bb
+Entropy.11 = e91c31e83b883d8959021c2044794d489304be279a22d2ea2879b9d00197ac40
+Nonce.11 = b045539eabf5b4a3b9995d600aa71261
+PersonalisationString.11 = 0fcda2f2ae71378790f88933a42a28f026d24052d099e6c80dbb4604c219e512
+AdditionalInputA.11 = 00f9bd78a4e011d428bb24c0a6e38a28ad1854a49db2c4beedbe69babac7048b
+EntropyPredictionResistanceA.11 = 316114aa9bdb9949c8162ac43705fab1edb3f2f4b4f9172067da0f57a5c93a71
+AdditionalInputB.11 = e78656dbba3ac849cd6d27ce0bc46f62f9254464f8a9e864d01a22c46a59b0aa
+EntropyPredictionResistanceB.11 = ee873818b2466834899a249e0263da47ea63566ab8be78dbb3c20f4ac0ceb2a6
+Output.11 = 9de513df7f456c38cd4d793668c5dd30f2305a3d129e2c1cd775f303d48f88b2bbef4883d182ea70b26f0fe0ada55b53bd1ca3682c33528f86c7b2a6ba0034e20f2f7e1b5dc27cf1f5bba71851d487f8690e417676bafd6e099943d31690126b03feb23d674d584173fe34caf3ef035833db16f415d7b95859134a750a42bac5
+Entropy.12 = 0c61caf52b372e346e120b97929eae01e216a24d65e7f9ed05b13b8aa582b0d1
+Nonce.12 = ff3378a61f2e5bc53f3db02f0bcdba51
+PersonalisationString.12 = 57d537fcdd9b42193e0c20e47b847bfad4f18a1f8696102409f1c77fa8b74e7e
+AdditionalInputA.12 = 1295f5815005d095fabf11049d4183a4e271154150e77daf4b563e61ce95d746
+EntropyPredictionResistanceA.12 = 700adb63049d6dd39bf9d8d0bad414f24f2e43cf58e133efadfba201b07653e5
+AdditionalInputB.12 = 51ba745a6684c82c72053b0cea2b61f27e6c8d08d294b7cb599136f88267a572
+EntropyPredictionResistanceB.12 = b778572b9eeaea3d8643983c7a4215174c1dcb79b9f37e5aaf598a9177c7c6df
+Output.12 = 732448c8441f9cd884c9a5db5d3bfa2f0b7ceef12afee569c3b92cdf43beb6e7f412ea644d63cb279f1e1bdbd045702f124c942680588458e5eb82f55325dc08bb9ba5eeb4ab70967f24f1bc1087e921a1dee7796d9c0931afdbb1f0ef18ccc0a7115cef35105afcca169351ef16a8204ed9abc32b5dad8c61298a6a1a6be0e4
+Entropy.13 = 08abeb259dbb42948ef5fcd0fb35ffc5f490bc276a7b2aa6fcc2fb81f56c2d54
+Nonce.13 = 05a05ee615e8cc91890a419e94e6b617
+PersonalisationString.13 = b0a8355657eeafee0aa12dad9fe0c15b4f5858dcd953cfd3fe59a766cab14f2c
+AdditionalInputA.13 = ef6bc1f5f66ceb5548aea47868fb5f7f2f6a1c0e1074106032bec3d100e0993a
+EntropyPredictionResistanceA.13 = 8977f73098fbd7adb9101c6dadf6d234b07314a5a19a99fdf2bd5ff8aac4c4d2
+AdditionalInputB.13 = e71454de084e2ed17a641b476d49d29afb74847ccabf3925689d285d159f5b71
+EntropyPredictionResistanceB.13 = ebccfbb757cc2d0160609153f3fd5c3fc11c334774425291a036ec43a34dd3da
+Output.13 = 0aacdad890f507317a19ab36a6cc593bbaacec0090a7d269faffc12e7134db0cca612001a63663c61eb6e3bbdec2df942f9955b4b64059a1a50e9f222c9f1ddba79551a4831c99ccd34d8f85b390a10f83e473f80736586cc109f942142bc278925af50177a866f1939f5ddf1d2e3fc0f8db4f944182cbe389debaebf4d7dfbc
+Entropy.14 = 03841c25ddfaa43aa58ca1b65fa64fa932dc533fd5d27cb67425443fe42290f4
+Nonce.14 = 9db2cd5dc133e4951f485cf95494be19
+PersonalisationString.14 = c7f9b0f9f3038f5f35aa91033b5a3542d971f21b27aea89acbfa51f1a2c85a16
+AdditionalInputA.14 = 100904bf878be7a80f8de87ad0e9c55e00999b2ec08327c909f5921a895b7ba8
+EntropyPredictionResistanceA.14 = 17b452d2d7b3f43258e36ab9cc03ce70fe68c8f94f53a27ec5930a817f092c9d
+AdditionalInputB.14 = 7978071c7a648cf7f02c9cdf544d6ff9dbe3c5636f73fe50deb7e89695396b5f
+EntropyPredictionResistanceB.14 = aaf9320ee7c103d51512232305aab44b946a73ddb13270f42903a37f84c9da01
+Output.14 = cf5ed4b6208a0db15373d472e240dee04a34e630000f9751cf8d3f15dd6a4fa3a4602ec539dbb1811978493f920e84b2e3ac78bcfd619b6c4e7e0072381a7bc150a91b31a0280dd843ca1c4332ba0757d6f6f0f2f830a623cb78011dec8c4d844f71427b09be4e9fdff4bc1cf3a72a773e06121cd8792232d387170a66ca384b
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 58229dd48724bc2af44dc984be3efb81923b9def60cdb11606b027374105f65a
+Nonce.0 = 0ad6132efd0371bde65bd8ec8adb585d
+EntropyPredictionResistanceA.0 = b43df3af187f8b4415b8d8046647497eca401ca898850e392fb6c9a05e3fc945
+EntropyPredictionResistanceB.0 = d0950c0b90275af33904238980bb2e1d91e0b897e7000abbc12d7c6a00908f0a
+Output.0 = ef1cf38b7e221ec178fb8a92ca438c00c6f27417bf721f0fcfd1b89f16c9feb3f42458de980d086b80ebd8b47d2224f82aae4b65a61919fa38c5f1c67ac52e58eb63589449a8fe05b301b5f5bbcaf291192e470d85ec1a7891fbb3ffc73a811db9f3ed6d0f7fcf529851518c5a0931e7d82dde732e84b028d2ddd50e80dce9f1
+Entropy.1 = a9629abafdd84a659a8377aca4be92ded5b769503d629f11abfac04a028930a8
+Nonce.1 = ad2b536038f2db4d77c6206611dd4499
+EntropyPredictionResistanceA.1 = 96b71d12b7908ca614c9606be2b3e3ade9e406c57aabfa4abfb6f4e7da454873
+EntropyPredictionResistanceB.1 = 43676db41997d95ea032b1774d35b337bbd520438891b73d5b42b99e6f84d6df
+Output.1 = 8e234be058a97b53ab066e27a299b63304c805f22300bdf2e8685fff2263d8d003a966eb2a77ab3d45ed40945090285e8c3346df5335f1107bd4e0a4ba3562770ddd517be860110f2d6a7f3a9a4e8bee37870f2f9dd189682850af963bd0bb42f20d943c9e1f31043684a54125d1518d2b0e60da7c3c317ec3c71d766cda09d1
+Entropy.2 = ec6e3457e161fc1a2bcc33304499d021786eacda3a37af1c91ae2a343fb396b5
+Nonce.2 = 3a1923abbcc9a77def7638a64230c54e
+EntropyPredictionResistanceA.2 = b4703fcc519ea45c464a10e7552030c51436b2a24c471a0d8f1c21f3288622fc
+EntropyPredictionResistanceB.2 = 30be1729e69026faaed04e52a4d581fc83961ad11077e9781690e227a70cb6f1
+Output.2 = 6a658e4edc98e68804ca8fa61343dcd7dab844473d95aab69318940bf1c95ba090872649d36f608932e43f6d58c17f6c25c3c73898d5929f68f818b6e2ab013fc32fce719e38807e24534817957ad939f06869c0db7e417a626c069cceaf6fb849871916f6b415b77953e6de514af1528d1028b858a45781e18a8e8fb7aebe36
+Entropy.3 = f1974426ea6d77bec21fe12d74269818507de2dbca865a512ea7c52460117d87
+Nonce.3 = a70e8dab5f34f93575de60e9af88f78c
+EntropyPredictionResistanceA.3 = d5080b6d17020a344bee3bac711a8c7111da6f3afa81f231edd6afb8e071bcf2
+EntropyPredictionResistanceB.3 = 98c34db66ecaae4a8eb093370a6ac48ee10f8f51a8ce6aba2e1f7746c1078eb0
+Output.3 = 0c4ca62fa6cc19853ae6d44acf82d911befb72443d42f90ee4c99adfdbe83591201922e01a47d3ca9ece27e67c26c669fb609e3fe9cd75337919dc3c958423c209f935c55e94bb7791f4fbb590ca87e8dd67f17b7243a40359d43aab4f24b4f15f9c60a7f15c30258cc41339fb4a58866bfcbdf56bc09c49282beafaa0f8868b
+Entropy.4 = b52fbf3298ca242b6bd51f4efc2665d23da1101d9aac45efae64f29a2ce8fecd
+Nonce.4 = ff10ac452c9583965d3a4c4732374fef
+EntropyPredictionResistanceA.4 = 4389d72eaae82fd61320e7a4478c9892a7a783c478e1d629f20c22b2e141046d
+EntropyPredictionResistanceB.4 = 2d024fb9aedf24e619e4144daf7392776ac3968577f219661fe5700a667ffc65
+Output.4 = 2ee434ac6c33b4ef2cccc0b3a7f1405d511235840ca6c6d0609eb65abc95191851744e68e05df26a2b3abbe4c3a6c7595e2f53bf07420f600894be77a4320740c913fb15c5eba065965560b82b4f6461f248ea7b5cb8bab1efe1902188f21b9be59dfcedb05fdc00e98a6e8079e60947851d0de14e6b76cc5a2899d104194314
+Entropy.5 = aa08fcba19383935eb17ffd3789249b20d6bfce4c24c5407986af60f0b0049aa
+Nonce.5 = 4e68370263c16cc0ad19d12384431165
+EntropyPredictionResistanceA.5 = d4e80237489154c98647962cb4451f1e3ecf8004ef9cfac14f200a32d6e45444
+EntropyPredictionResistanceB.5 = c6158be6462f69e22a1aeb70534fec30522dc094c79b5afbe2c344965545a993
+Output.5 = e859c2581d395443b532eaf281511dfe88706cadcc1d747b32f15fb9299b4d48bf82b9e81ca6b91c97309c79b9c60775b3790c43a48ebe8528d8abcd07ae0d8631c867918f19d0ebf285df29fb839b7016444ad8a25e91926abecf939afcaf1e1c41280928f844fb10359ba20b94ce406948908769c94981bafe97bc75af39b7
+Entropy.6 = 322e70a8e9f6e1053f96bcc9167e36113d7591b2f78f7e3732ddf1b338f56171
+Nonce.6 = 23d433854c4dd722ddb3a640d2350022
+EntropyPredictionResistanceA.6 = 48a3349ba5c99b491d319f0d2f296ae44ccc4f3b2bf0ca9a9587ac742559c742
+EntropyPredictionResistanceB.6 = 01ea8bb46d5fda59f34d5144825c008d215c07d050218e7957861b2efe38e1ea
+Output.6 = 57d65af54c47e021329004d16ca32be64663ffb9aeb8b2ad197ac016127de41c511692793cacffadacc5e6b5e91f43dbeff72a71c9ee1386a53bc18d4a1d6780d1697a7056a071b9ecdd5d0b1d2491f5ae0d423691bc20198525ca1383fc893c4893454d112e72915729be4d640d4112d65d9697831b8383ee47336174552521
+Entropy.7 = 567c5c91741f827655161555e2958daab27dca766654ada5e454525dcf7eb879
+Nonce.7 = 3285eba53e748dc5c19e92d481f6efc2
+EntropyPredictionResistanceA.7 = 8daf50f792c1c7475be24bc3aaea75da38fdc72178425a7a8cea62a3a8dc7ec5
+EntropyPredictionResistanceB.7 = 93a02058d879f9d81d8fc8ed5c99747a92b806da4c2d0f3ee2966527d879dd94
+Output.7 = 0555dbcc2bc7f900278733cc036418a5cddd6c25644b67712acae9be91f88d730d05cccdd73d57864c528c2f53256fbe8ecc4c385bff9555a977b0eae442ce52c8eed67d387612d54eb0aa62d5e35fcc516358f4de063c63c8f2f2dcd46f3207f052286d9e7f7fc785b194e84efe06272303bbdddc19805b6f9ee3e13dc645cd
+Entropy.8 = 167c0bd1b413eb68ff9f4361b760c52f6da1bff03f3533c36d8fb9a048e99568
+Nonce.8 = c5d34b605771e3ddcbee6acaf056d778
+EntropyPredictionResistanceA.8 = 8521307e8c2a9720269391e7ae45f5671cd548018200ed72b3b5a79ffeded2b4
+EntropyPredictionResistanceB.8 = 36acb485dfb3df47aa47b4080c88ddcee74def0c3a8409c8d4cb3f6c5ea529e4
+Output.8 = 70b267b77f07cb5bd32bb4d3ef5068cc90fd9c936ef2760c586a47aacd04d885f8c89c48a33e608383813ed674d34ef6ae2f99fd8202b8e2c5288cca97735e2f2b2610efe17cbd63ba05c13868f37acc4eb3cefac1fe4c4e89f090b89d1a8f63a2422f04dc4c4d3deb4034aa07197cec4f1043b78d44c6d9a704a24e77e90cf1
+Entropy.9 = 198799f95d518f51e49196a8b169260572f016efb865076296b3a8d0c6a51a12
+Nonce.9 = 3d7e7745cca1ccea2eb75b6a61fb1cb1
+EntropyPredictionResistanceA.9 = 616de1c68d385d8d4c08e4bb0f87ec5dbdf81a0b5834de9a32c231d49a125264
+EntropyPredictionResistanceB.9 = 43890822b8f89b0aadefd7d177ded5d8bd807e348c5b57dbf0a8a90fc68d4f54
+Output.9 = 08b9065e5a2dedfeeee7db4d9b0966f415df948875f1dafb73f24637e83def01263255d5ef51f6419fbaf62a46af0a13cfe0fa636d9458a9b1ba024c622a10f2ce12c7a6561a826d8c8d04fa42ce2222a73629dbc8b723736a3345543a1fff92dba22e50ed719e98b060cb10825e02b04b3e405368f4480d4b9f08278a531536
+Entropy.10 = 613093bf5f70ab7a5b18f3bb7207d9f098058a55033df2cbfa7ec4a1a0f3cbf1
+Nonce.10 = d4ce85286f448b3a2173d51f459b3adb
+EntropyPredictionResistanceA.10 = 3c80537dfebb18a42abd4dc5c6aa08fc3d75a89754adea18cabf2a6595e4ae67
+EntropyPredictionResistanceB.10 = 4705f9b983058e2ad09456f46fea741259b9850c15189432a0e40ad9400c88ef
+Output.10 = 337b88f2507949d441dc5ae0f8741065fa03246b698fba98e316e41d58890973e5d10cb15b2f678709fc5adca7642d4b695742b5bce0d0d12197ce89e85a01e93f290781d2819135096816f9cff77035279068282feb3f22361df623d81a991f71604240bcd681e05657686b37c581d46a473c9b96fdcc199faf69f10578e36b
+Entropy.11 = 8ed2f40fcb9689b457501bbeb30d287e5296bb39fe6ba3dc94a431bb6fb176ef
+Nonce.11 = 4921612790ee0e90f6bbd1e958ce9ccc
+EntropyPredictionResistanceA.11 = 1f154b31004d85b7034bb2dbf49263aeef3f11c171df6d27069264b70a771297
+EntropyPredictionResistanceB.11 = 6a447610a2d510bb1528f90e6876c3ecaaea8f55a0a23031460780cecf3b1b92
+Output.11 = 5d2fa56a5ee756c0392788b5ab233c5cda16ab4a908e96492f431a5ba5207e5c3c2ba3b61116623b65086cbe6a458e936709f64829f0b9e93d3f892403c4bffa1a33f6ad3964da2cb7cb85f2fcad4d551b5a88582d92080095e47025cb4d85a7a496a14add96dac85da4a57dbd2067f5e47a74c3caa66ab0a462039f8a15668e
+Entropy.12 = 74d70d532e047a0bef72b2b7e3d30986ccbbc4de1cde13d19c2e072e3ad61d4a
+Nonce.12 = 8e86a29b91677141a43ebc36d805130c
+EntropyPredictionResistanceA.12 = 671af5b54ba9ff0e2d0a61aa35816d93c8c11cd91fa1217c3bedb7c37e7d935e
+EntropyPredictionResistanceB.12 = cd4827e4c25b14eff7be73f5ff9547b29125dc64687838a46217e7df90ef13e0
+Output.12 = 6dde83639569b99af225d1e8ccb273aafdd481dff6aa89f63eda56a4c25a76ac24cf8fc3754b2fa08dc78146e66b88283b4bae41922a57b60007367a40668a6f2fddfd1269f8bfa36f7102cb95c251694547edc7b3133188d42ecd5e410309ffe9a563589ac4ca80fb3c9a8c012777ea708d29c202d9e66127edc79f4dd1aa21
+Entropy.13 = 2a534975b2ddbaeb3490348c3afca501daca8b1ab38d4da172a83b1167b62994
+Nonce.13 = 1882ee7596ae33f344b97d1b79eedeca
+EntropyPredictionResistanceA.13 = c5f0b5a57a7bce2084919089e57a80e28a2aa2381f3d5c09348a23b9d2e44253
+EntropyPredictionResistanceB.13 = 78b731796858b39fc1d5697dec99f1334ea672cb5509926a93cebd8ea8ef40b9
+Output.13 = 69756e46b022d7aaaa595979f5c5c594bab1642d5a22f7ca9427e62d778a878993b1602a0b7cf0be67615b711830714b708ea65bf643f6225db78bfbab70460be912f4e85b8982bb7c1b70628a0909037a82c5b086d0856fe2c7d11dc8fe88219831924ecdde0c99e049e9d2229d833f9d5f09626aa521009c0d8493ba050828
+Entropy.14 = 83663bbcb794229dfcaa66019c096e819eb52e70a6548a56410bb7e563d8f7af
+Nonce.14 = d12da8115bd1b0ae8686ddc536b0974d
+EntropyPredictionResistanceA.14 = f124c88bad32cf4ff49ccc4271c7f4046f277c0b1fc73c0e317fd995f7b318a0
+EntropyPredictionResistanceB.14 = c32b11359b7ed121c87b85716c2ce83aebdd46cd4c19168ad3930be351ea1ff9
+Output.14 = 9f382e0382f2e6b3ba85ace2cec7301ea6f7d0d3b0895937033df9f710471e468b8162492d18ab45ca809e8aa2f37c15ec599d4b2774947b90c269bc2f8553e639f21e1c371f7a49edb4cb4e51bd1e9fd7d66e3b313ce227373dd2548870378206b4b5fd0d22c48ce03a72003be53ec378d9eab25bc432c7a8bd0eed89adf941
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 4243a94d7f7e873b8750e4a72860e988c9708f64bd46d3ce3780358cc45ece86
+Nonce.0 = 15ee795d27ab540a25d2e91a7142d185
+AdditionalInputA.0 = 27d4ec0e544f392e9e0e4e6f4a910f977dbf7e1e64a9669bb7b6fbf06662321f
+EntropyPredictionResistanceA.0 = 4547fd9909de7260922413f892ea9646bfdb07bc5ac61ac8b149b5a1f9bf1db7
+AdditionalInputB.0 = 476f53deb41cc6f756d8321a3a7fffa42eeee144566a366a96e385915cf87214
+EntropyPredictionResistanceB.0 = 327d894a2b793381860d19a863a439ba4f9a3b494cbc0e12bb21201250c50401
+Output.0 = 77b19ae291a19e9e8ea5e873412c3fe6338868c7c7de218141e6eb9fc0bc5787d995509040ed34e784306aaf6c845a9401ae175adf1819e4ff9b58332556f13d9919140a1701953a180fc614bbcc8b766b6b65cb6fc4b2df1fd05282c42fe45b89b2adafdd2f505ed973f3b5337edbe619f00a1f4fcee61a520371b846704edb
+Entropy.1 = 7e3820f8ee9f52dff83463146cdd7a84defe7b309ab202cf65f55765ba3fbe4d
+Nonce.1 = 1bf085be005984982057ef4195904813
+AdditionalInputA.1 = 43aa5850be70574d62042a448ca10568706b84eaa7167075de77b3614f80e41b
+EntropyPredictionResistanceA.1 = 02e3625d7d6692ed3bee02b08566c6f941087b45087e7b5c87790f270d00a2be
+AdditionalInputB.1 = bd84df48c78ea5f40769bc758a155b8a3e68cbe69cf0ba41689a309f2eca2656
+EntropyPredictionResistanceB.1 = 0c6f768ff0d911e4ea8cf14574960efccfb973ff3546c9ad1d3b3eb157be79f7
+Output.1 = ff87b6043d46cd5be457d7234ee962042b02904b6ba311984f7bf91248824978fd80a83b759823dc5204c49e8cfde4ead9068cc9c3d74efb16825c43d5483bd6d333e37d524dd285aa96575880a729efd79862c70f6885f003519f756ecb017e863da6d348f85a95c8a55e1626791d5e462d453615dbfa126dcf53dd6444a7f3
+Entropy.2 = 653600c01701556d3c1c072c00367d2b26b946ae2167e72aeb948fe78b658b38
+Nonce.2 = 8ee8026bc6a0b732e1e18c9db7bc6db6
+AdditionalInputA.2 = 114436f675cf0fe9390aa2cf022293644455041f89613a0add11c4d49b1355e1
+EntropyPredictionResistanceA.2 = 981f063ba7ceea020c99a1c876ae5a0caf601b260b13d42dd60cf314d9526172
+AdditionalInputB.2 = 541a79395cbb8d163ebe54672db195711fb332676ba8adf9b3638ecabf28f3d7
+EntropyPredictionResistanceB.2 = 0e0c95e8d4b8044901e6f05a0807c8b2d82f6d5a3669fc25addfdd512dd041dc
+Output.2 = b75cfcded5ec25138b0a9c78e2cae152efb9cf9d80e33634d44eede8d26c9e0aea96d2e0657f9f54f220eff575d610373b9c150b707815871482e05e345b424e6ece92eebb207a044cb0e4830b7b0d1a272f75099f214764e2d1acfc27b4a529d6c21fa20a59d21e946c3719fa5a312c56293c90584b2b9bc6c082ecf2bba42c
+Entropy.3 = f0f94867c35290446362ea411a2f47edb4346b0889329e75fd2f777a5e33a644
+Nonce.3 = 590bd0515528e4d5ee64aaf8da6735f2
+AdditionalInputA.3 = 0da6c981bf1c2f191e20a261bcead31000bb163bf6c6710566e03446b0d23252
+EntropyPredictionResistanceA.3 = f0f48714e97df7ac797e22d8940642c108abf1036582c4a4988efa695666d299
+AdditionalInputB.3 = dd1a92962a61415a75161e9ac021993070b847f55e48b43cfacc9ec0efabe2a3
+EntropyPredictionResistanceB.3 = 36971272141bd7fb8e03bc8ffcc28c8067de19047465be57ca47a4eb56a1dd8b
+Output.3 = b6a3f3619472c640354e66bced6703a2d550f17081d88769a34916939e69b855d27e6927f427ed6e7f07a92d97db570222ed28e00d75b2b0c02f7bb32c69c59592a3d5f41d444b1d9db6b2bda1196b6aebe03c09b60491e5889132ecbeda3de0c61f4acb2f97648c8f9cf05ec184ba4c0b5144bc84f6c0e28da5b98039c884e8
+Entropy.4 = d35758d25ae1e29edeedc26a242ad387d6e7ad9d36fe042df623facef865b403
+Nonce.4 = 95c96e0118bd47cc7d1d8caac17e6da6
+AdditionalInputA.4 = b90f1ea56f9e9dcaa8a52d0aaaa15c2e5f2d58b70a08cddbdec8755c32cd2b7b
+EntropyPredictionResistanceA.4 = 5c802177b04d784a6becc4a1af30a5c7a0810d18c6e63becd1154be6c219cc3b
+AdditionalInputB.4 = 18becae97ee1ae18b713a3e7b22b63fe923dffa1ddc041b7146888d64d998ca7
+EntropyPredictionResistanceB.4 = 0a6ba4968f0bf6326db2c6d6be942c0deaef78747912f44da2acaf9f25afec87
+Output.4 = 2984618f2a250785fa72358dff5c31e4e6973457d0a1b71df05a92738e78d8516dec5a3beab8226c8f5deabce84e015778128493066bfab116c21b1659896814879b8954eac42f0fe34de2527415f6321bddeb4284dbaa104e9357c056839395f2ceb01649dad288a2457cae44cf1359017818500ca9886270c321a932231f28
+Entropy.5 = 3decb7ba41e824f00cbbc6558b1bc36530ff46292a05a1ef63951ac3522b941d
+Nonce.5 = 7d2ff42536d1a03e8150fc6ecf833d8b
+AdditionalInputA.5 = b002fe41ce16c75613ec08b374584c12465f77e78878bc9a56726a34f730a48d
+EntropyPredictionResistanceA.5 = efb34f4bbab06bcb394ab17081d4bedd026690dd4011e352aa513d6ff2f01ac9
+AdditionalInputB.5 = 6d20c6785c03c6481620d2e997f8fb3e86589e882a0cf6bf58a6b1116ac945d6
+EntropyPredictionResistanceB.5 = 9e05b8508f36b68deafd364ea153afe9d1bdb2c0384d132a0a74300f72500ea9
+Output.5 = c0e7870abd5568a9644f83ab9d48328d0880debcf141c7c5b77f444b043b5c36a4ac70ba7727ddacba2480dff0c5ad67375390e3d8480b6e2e59780826b82ed79b22227c87a56fdaa6a16ac80beda6667f188dbd6658fdb39adcb996dd61f0bbea377e15c5413fc6ae8f0c0d8a98ce528951c8e5ed5ab8d3a9f96b0cbe4a8bde
+Entropy.6 = 5540207fdb7b1a28fabdea57daa5d3924b7e06dd7e30b3a802bd8c46edc78a44
+Nonce.6 = 9018b00c509a096d9d3036af93d18a24
+AdditionalInputA.6 = 87239dec7893b30183ee526977d05376ede00d32e72a6501eacf84c3a5780f67
+EntropyPredictionResistanceA.6 = 798c569dd3d3ff6b9d261e14866704e79e91ed433e0ccd52827e513ac5803483
+AdditionalInputB.6 = 11b77c3c81748c19c4dda546a5f0f5584a1df2ec1d682ad74ac7ae85e289d657
+EntropyPredictionResistanceB.6 = 8e55a1eed31fba00132ba78839d4586ee5f3244800e361bc852d9a0555bc5f91
+Output.6 = d841345be2c33acb760dedc22881fef21838c5b81ae1332eb8c110f1c4bcebddd9fba6d51612ad9dd334acb3370ab1bacdf1bb3ea37b0ef6dcbc12631a569c98b9e5bdbad46513742c5a7005c9bcff8e3c8a3f0767b0f3a473934add779157b2d6a2cb1d9397528132227b13fda8cf754c22bf1364434ebadf58f83bf54fcd8d
+Entropy.7 = aa9ae6ffc82d5759cfb175271b9a3cc4b3fff7e8a9fc357f594a026f10ff774b
+Nonce.7 = e930c5f196f6602c25c72b6235c86d59
+AdditionalInputA.7 = 34fa8630eefdccb04ef8e9a0334dbc8c70222a002036e196687b3134ff8c9173
+EntropyPredictionResistanceA.7 = f542dea8d20fa77f3ca7e73b5ef16ebed722b60c6059a762e979e3690666b2c9
+AdditionalInputB.7 = be747ccad1e5be46ea3dc3ff41e9ca969d6c8beb8c5a4b3b603aa8ed5bba7edf
+EntropyPredictionResistanceB.7 = fc2740bfdf2741dca25adc08c9f031375b0ff3f18a762b687ec49298d55a97a5
+Output.7 = f0063d1aac1fc6f203bfa8ea088bc506c833626602fdcc40f3cc8059e8018741836a7308cee86666900a2d7d7e23cbbbc8eeaf6d445b4b356815e360e0e79129283350dd9b4deaf7984e4212215599fd605d4cc833e6213703da3d97bec65cfe690a5c0da9d0aee4a7091166b94be165fc7ab341d0e15094fe0c16221b741104
+Entropy.8 = 03f0fe68671d51b3bc3a3cbbcaf67da8489e46dd0ae9015165d3d5674c06ad02
+Nonce.8 = fddfa60a7857c40687d53d9f2c293520
+AdditionalInputA.8 = e2ce00aff63695651c1d0d137f7a819477f8ca2d9ed012a93b6d6430282f0652
+EntropyPredictionResistanceA.8 = dca2928bad470809f5f1085dbcdaeb38e2a43c43e089eab99294a44093e88b20
+AdditionalInputB.8 = 3be7f6f6d69706753f03f88dcbda816e0379216f075c84bf643ba1147f6a2fd6
+EntropyPredictionResistanceB.8 = 21e32cfb4b201db41bc9bb1ec5930602d65da46d7eab0dff4c2d5935e82b5fe4
+Output.8 = e5f807a86353e360cbfbfbad4b90e62684c8b73f01a0dc5a9713ed4e043ff9551388d86400ced2fcabd271e1db32702babb51fe3efe42a6563177824c357784092d69abfd0c54b47aa130f1794e3e9afbc049875b911ca80b3cf8c2d55f1c611ecaad67c747ff12b84b8b8c09850594057a7250d942009a167852ff8a913654e
+Entropy.9 = eaf500990e179a1e18851d163768f645cd1f601c18d472a51b011fb31e31847a
+Nonce.9 = e1200a20843bacfb2e2ae191a459bd7d
+AdditionalInputA.9 = e2912fbf2c0431c15713a22f86cba8ad42c40d22ce84143ce87c5eead63afb3f
+EntropyPredictionResistanceA.9 = ea4a939d309820ddc92e05a649d5fe0d699bb56271c223a0ac527007fa43882d
+AdditionalInputB.9 = faf3213c0a571de25d0dd87c858171cbdd9668c961b8dd222d8dfcc71d945279
+EntropyPredictionResistanceB.9 = 6332aacac644624afa382bf628847c85a3e0abff67b9be73ce184cfd4ca2563e
+Output.9 = 51ee9ac4370ac32349155dbf38fd5d415028ca353a8f2960b042794fcdad56ab6a90a43c1ab7bb823e729b572a172774ebddab043677b3417f5ac18514078444a4eefd545715a08c07bcbff2e234aeb70cf91d738b67eaf34857117515eae7bb98c2a39f5b448f51edf6ecd0faf5190162cf79fb854636b5e4b848354587a5ed
+Entropy.10 = ec5afa4d479da979e31604b1e1943e60bb7899850fd353500da26ec428fa176c
+Nonce.10 = 7cf1f346971c7581d2f444215b27cd77
+AdditionalInputA.10 = 0f92996d4929ce33301cd8b52d163a6ebab711bd2d4d662c02d5308fc39eb50d
+EntropyPredictionResistanceA.10 = 4cf029d8b3ffcbb9c20ebf37460f77b3efe7f6e33a81e1b364a8e482b1ca5302
+AdditionalInputB.10 = bf241f7ee3918a813b1dd869b376409cd13daaca1eceb4560d474caf61e3bb43
+EntropyPredictionResistanceB.10 = 1846cdaee4f3c2846747d921e48861a7e9d8c98fc8269ae3bd5890b6a8ce2802
+Output.10 = f2abe8f9129ad4e0893854630a1b416aa8b9b219c77328b9ef77e91fc87056610b570d9bf057f1bb338e3ea8974d8e096ca258626fd4c539b37686bc3b72ed46d3c1ac95a8241c1f049e6f35d5e6a3e8ce4bd0386944090a6161a3105841611539f70e0d0a567fb782a5613e3be47d41d158271faf8644b55c6d7b800720ee51
+Entropy.11 = e33cc9dd86becb42c396097cd2fef45cbef4cfed92b3a454c8d7c35258ddf59a
+Nonce.11 = be7654cfb4bd017b897ef0ee4ba88a16
+AdditionalInputA.11 = e1768d5172e85b1989982e10f21768c03617ff92e26af6f35de00ca0624904d4
+EntropyPredictionResistanceA.11 = c5d4791761f97c648400b442a4df05348cc1babe48fc0a8be6fbada205260a5a
+AdditionalInputB.11 = fad5c7658d2618cc2cd2a7e55a82274e042e812f36c91a8ad2315e8535442a4f
+EntropyPredictionResistanceB.11 = 5927b8062e4b7a13efa1260465e183eec4db5f98f453bd5157a8492fe9d21c35
+Output.11 = d034a4d24a53eeee61a6b615a0c4ed8513f5d8f1dd6e1f6ee0b93092313ee0146f548ed6a5c0c1a3eea52df362b0d866a06f4023f8de63c38808313a860deee0a0a76e4a8ad25254a91eda11c562fe5e6c50955c31fbd5b2c1825f033b0373e72f85989bfd7ac0fbacbfc3fad28b6902e9a283eb045bc239c50a598f40feed38
+Entropy.12 = c488fa3dfeec0033c04c9b448805bc35a9abb55ffe6bd767a009ff51e4813bcd
+Nonce.12 = d310be4800a4822a24d4f0e07e5b260a
+AdditionalInputA.12 = 211ce3402138fd96ae0509ce4d845e8636de42b8bbe98c3efdd946d2114b53db
+EntropyPredictionResistanceA.12 = eecb5c251322592613d2e0d955deaf7330362a2e65fc4e80cf297562e195cd88
+AdditionalInputB.12 = 43988e33962e83f9f3ec0051be641a01ae29160f3fbc3186de009a583258cf57
+EntropyPredictionResistanceB.12 = a12b69630a4a6fd01f7a402175c197a018aeadd17688e440623aee39863b81e8
+Output.12 = c977c60d5b805d1b78a56b4f081174a3fad048de5b3063f897cf8d374dad15fd31dfc45808cdce2e7a53a0eda15f12e020c419690d654717ae80e149e88128148a3da5c0e78d50a9db40e290446b447b0b38ac943f8b50e974bc674c53b1d98477750a09825f3afe0acd3a953ee650fe21eff6be5ccad26cff97f6587d805e91
+Entropy.13 = 0dfffd15ad2055efd4182b39a7332630abf4e9cb0f50c152cf80cc060a13a41e
+Nonce.13 = d0fd00a85ac6b49ec27bd98541f5755a
+AdditionalInputA.13 = a0306b8b0ece0704467a1d9c72fd42be094c0d12a958e416e2ee08913b71bdfc
+EntropyPredictionResistanceA.13 = 4c5d0d150b2fbc9775ab5518d637df07c62e17dd8c1c81085bd1fb481ef880e2
+AdditionalInputB.13 = 3ca5e31da2f86a74ad0422b5c2de4db587a8f7ce129c5a9d2aa2f9d08ab1bc9c
+EntropyPredictionResistanceB.13 = 8f07227cfb823b8c7428faa43ee91265b9497b36da541b00326be7ee8a9cb9d9
+Output.13 = e425e1a3159194886acabc543ec68713e808870316a22af0009df0ce219a2d0ada68f3d49773abf495dc63949c1911e01bf9ff37800266c883d6c4b895a6b295200ffb6691ef596db10dbb1f8f7c422769d499ede84a33f6011182e6dcb6cf43547c8b408192ee61e3153a6e545891c397b2c74cf0595814c3b19b3ee6a497a8
+Entropy.14 = fcf9b84c08395cc018ac845687fc738b38053ec5395e77b0fc70d98dffb961cc
+Nonce.14 = 3e5531d69064f61f7e9157a32c37748d
+AdditionalInputA.14 = 48afa65aa8690024ec8333c72dc5add28c85b64a02ab530e51307b0390ed0905
+EntropyPredictionResistanceA.14 = b0b73cd937ec8a0cbb5214e38cac1bcf9c37fd9748584464e5e45f8fb725c9ff
+AdditionalInputB.14 = df48314d76c0d698923dabd3d23024ac2aa5fd236ad3c6e3b4cf2244a82fb76d
+EntropyPredictionResistanceB.14 = 3387fb65c8c1dd5e3d4f64bebb45da1a7e288a22e16f2fbb882dc2f9534717e5
+Output.14 = 31998e0784579bc7aaf5130b747eb295a089a12c1844406aa18c06f19607a2e497adf5352e10c145b3cd2a2532389f771af3028042605f0abe705f8540561c4e376d405c6f2dc23b3d3fe0c14790beea99705e69fac2518154613680012c5a140d45fba7e381f55c61ec7f3850dc586bb1f3cf928685a9d60e06fd93eb1fd8cb
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 37406d25daee6d6684470647e2cffc2f50805c0d0aa84196e67c42c01477bec0
+Nonce.0 = 523ba550bf291988689a104973462c02
+PersonalisationString.0 = ccc11737da141f687e9f0118c6a6338f49f2322a58b97598e596dc24d464f081
+EntropyPredictionResistanceA.0 = 638efaa23ea395bea9636462cfc02fb7c4a3e94db1c508f5d0051e092b1c9adf
+EntropyPredictionResistanceB.0 = 6222e1d557b549ab7469114d14ce0c24d5453ce85ea98faf6a579cda5e148184
+Output.0 = 55417aecbfeb848037c32142e62ae914b7121c007a60e1a080c8234f741b2f1cc134f0440ce7696f5f42a8a063344c8c7cdb42f05dd10d108942e00d2c4b73a322b6778fcd5718cba41ae1be5b6f12da15ca6174653bf793e5c406a908db35cddf1d260c5461f2b5f3676783c86452abcd4d36ecdd2b0384737185585b9badea
+Entropy.1 = cf3791ef869c9f3a0df318ac3ff5529d062e32eae16227b044d3bd15490b12c0
+Nonce.1 = a557799b05ee1d3109340392c27f2834
+PersonalisationString.1 = 8f0ccd4a4935fb556a9a36b786c1237ae3cac1f12fb3b8806d6b13f47896a18e
+EntropyPredictionResistanceA.1 = 5ccfc2655858dda1603fd7814166c2bcf75b8b02cc93f3da362a7c36dafca99b
+EntropyPredictionResistanceB.1 = a476b0d5e25488503649750b65e791a0b1566fcc2e693ed08efaf58a3baf050b
+Output.1 = d89868aaee15c88912fc4683a4b4a62d1db29a348c7df4f36db1b4504f0f124148fc35873efe38576f59f22f4895aa5475837cc419384221c3eebc2356e96f92aa287d2b943ebe1ecb2b17327379777e36b71eb2cd69fd783601d1015b1884edd5df0a58d31b3823947dc660f9dd26d1ff3c0c3accd0e34e73436e6eb44279ff
+Entropy.2 = 081765eea4025583590777a094f15cc7bd0abab87426ed0c5f9f25301cd7ecd1
+Nonce.2 = 61bd928d12e8c3479bb83f56b25da5d3
+PersonalisationString.2 = 24ca96b632c885927b920ee41869306362514c7da3e4cbae12725add10639a71
+EntropyPredictionResistanceA.2 = 543b2cf992ec88fb5d5b2e0656f3acc1d81f2d94b39b7e3849e9064226f23ca7
+EntropyPredictionResistanceB.2 = 1eabd9126e98c2cb080dad25e0b6ae45b4ada19a4b228a8efd8e6c5684ec6e77
+Output.2 = 08fc0e75f81b43c329dee7bfd2107ac11beb0c3b2e8cb1d69ba07711aeb09a03ba87eca959438e69fb98df904b7a9b73b681b27d8c3d31e26947070b5f51c42c0414ec814b0d78b52c11298290dbc64b200e45fe51a0373cdfaf7c300e162bd8b7f4f19be3ed0f48ebc72c808456f57f2c2e4885955e7b33859d0bdad7f76750
+Entropy.3 = 8bdf61987aec2283d58aa443918109e9880b72f4bb63bc01c3a59a7d54effc6f
+Nonce.3 = a41b5946aa8e67805f618ca34cfbebcb
+PersonalisationString.3 = 39bb9a6af2a07af83a5394cbdb00a84ed9adeac0042c074049da10a77fd37f5a
+EntropyPredictionResistanceA.3 = 305d757d41dbe5f43c985e60029db93571420597bbba6d42ec0dd075b7837549
+EntropyPredictionResistanceB.3 = d38bd552b288d6583f7d0d8b7f6a9e1ff6f2a235ef77d0a439d3561775a37040
+Output.3 = b48529783e1ec6d66dda7d41715dc1cb5af48abc6cc8af6b674d26eb297d9a13d0f4169def7e6fe6f23245fc58618075b8aaa562993ba0e9508a6056f96920d4b5fcac747d6e0ec64f02c75ee042dd2827e3b5d070ba286b84711e379fa636ab355604f4bea6751e17da6fd30c1e573060622d9b3d38014e23e494cfe87b222a
+Entropy.4 = 9abd761f2465e7d09b9a719a2e676e16bdae888174399ffab3ba2f1ff20b33d8
+Nonce.4 = e24f67694710fd3c8d169382c7a59ac0
+PersonalisationString.4 = 293c8aedde64c5722040e26ff85a97de7c5bdfa5506348c2d29b16d793b33a73
+EntropyPredictionResistanceA.4 = 5e558165d6d36effe06add3a57aec441550c0e6e7d1c7ccd43d8d67ce392cc1d
+EntropyPredictionResistanceB.4 = e2b563fe022d22410cfa84c4778cdcbf42bb2055399e23dbeaa39eaf484b39e5
+Output.4 = 13e279355131476afba850987168cdabdb30a8ede337d2f0540b0f318b2dfce81ba05adbdbfab4a066e87203954d62de1b9ad7a1216e1344e459810b040f295adf4a285fe55a88e0b0119e5335b13f64f3ac8efaddee1f2b3655c29ade4c03d2935e5f8f3ab53dc79239b38a242dab96fed503ccfafe96ff2e8000df93bf0d26
+Entropy.5 = b5029c6d65ed544d80b346730abb1c26e6f9bd7a98fe99069fdcc0850dcfa488
+Nonce.5 = d89e568b8d2e688a05de84d5abd1ae7e
+PersonalisationString.5 = 574d9b199c39f163ca4b2790560fa3704cb3c360fa94e1ee65236b91844d3195
+EntropyPredictionResistanceA.5 = b2a2b0f37d9c3f02f021efde5cb143c7a9efd0ed29fbb321b1352f65c471f276
+EntropyPredictionResistanceB.5 = c14407e56f2640351fff38bcb66ef30a67c29c1842e0aa7ed9ce576391ab460d
+Output.5 = be112b6cc77ebb2f5013bd707716047ba1d5879a4d63e25aaae5b2a6c532e03a5b0c4bb99804d47c99d83f6eb897ec1087cfa01dc2b61eb80cf643e0fd2a11e55fee87c3549dad3773a2c1b3939585c1650861e95522335a68bfd1770af7615d6f3ba98c531d4b05deb8392ca83cb6b10e8ee209381b438fd1e190cc3b34dff7
+Entropy.6 = 1d17c6d21200beaf2e36db799c4ed8451d35e3a6487e10745ea1dd846959ee40
+Nonce.6 = 176327b6ca0c648291fb8056640d17ea
+PersonalisationString.6 = ae165328e3ad46238dd878ce740df9136895fb01895a962e09c0d31e1b8beb86
+EntropyPredictionResistanceA.6 = 162db4b8292023f365b8fe48fec2bb478aacf1cb1ef6bbc0b8cc393a53b80ea6
+EntropyPredictionResistanceB.6 = 6fe9edbcce83b863a25d2cd739fd2ad0b2c24c9af056ddcfc30d2b32b9a9f84c
+Output.6 = 74097bfda8437d05c2fa232c1ebea05aa8f3362f9d399b93b5340b123e179373b7110096d171048c6859073ef0a4bfc95d1bf834c339efeb2f307f1a127ff3ef2f585cf15edae3577db79552887ba478c3d09f7987cbecf2acad3ffc4d55aef47d9a2cdb3200d546aa539fdc2b6d36cebcc1e8700c3e54c1092f4923e630dff8
+Entropy.7 = 67be745bf9fa75d86573d886b059a87bf8ac0c7232216ba9220107f01ba38fe4
+Nonce.7 = 8098646c90b2aac7266fd4be8c5099fd
+PersonalisationString.7 = dace124bb7935005d2127f6bc585d36762f2190a8bbff322482decf63c186368
+EntropyPredictionResistanceA.7 = 3fce0daa014e1415733ca39e8c2a83d0e34b106919945bf27e10e2bc5aaa6b73
+EntropyPredictionResistanceB.7 = 8881a2be6c6f946469e8bb92c502e0ede8cc25bb03d4492236b925b64b4fcbf3
+Output.7 = f8e3f51700b52fc3dd6ec7bdfa676e8eea6d801655bd6d6f330c7e2771a52c6455f269c9b1cdd8e63ff6e27b80bd1c27c2221734c53da0711ae7c02bd0aadd1f858f03e68c2d523e1dedcda166126cdfe86812870837e7f4ffca9723872d673c198b5a21ebd1ce7b38deacc86e1846f5546a988cc213496b3b4f637f0321f512
+Entropy.8 = f6c7a5d95eee8d9f33c4ddc7d2b32385f6a6f6b7139ccceedac748f5227f97a3
+Nonce.8 = 9de7d20ba8396f443820c146c1553500
+PersonalisationString.8 = ede7f2831023eef22b73473e299bb7fbe103b9d279a84940e0c30877a58bdf2b
+EntropyPredictionResistanceA.8 = 9b4ab1945620d8eb72fb6c8b84bd92a738bdabc073ab5fdb18121b33bed6a008
+EntropyPredictionResistanceB.8 = 21b4ab588ff36375393d4328e2dd7fd7803726e5562933d9b0e0ceeb18941815
+Output.8 = 25b59e31b8baa315a20483cbf31a010d9e6b03459eda9c11a42d1cf38d42000f52ca852c40d0254ec457140c787f5605268ed4620b02436748f343713cad61878eff67ce0dc36207e0e3a2382229304af90318c7337e9f4adb72ade2cb5d4ec90457dc2c74f07b44d207c858a141fa8b253c3e3c61325a1a6236632cef0f55ad
+Entropy.9 = cda46e9cf080428032fa901616c2cb0f401551fe11d1c404c76273008d5ac411
+Nonce.9 = 212cde9b09ffef098b494af32d675300
+PersonalisationString.9 = 5c1784dc7f624191f45df8661c7fd5e11825278ca632e2cf29ac493ce811b153
+EntropyPredictionResistanceA.9 = f0a30b7cde48dec6a988e9475a00bc540d2536cb4fe97bd10d15849df19a200a
+EntropyPredictionResistanceB.9 = 60cb2cdca4948bf7cb1afb5e2a37723b3dffdc5356d212809018fc596a7384f0
+Output.9 = 8e7a6dcfc4b8c1187da40fb087ba0ebd38e14feb19ce936a0c9b1cb7e9cfb3b016d17cd9863eecc991674a7f0f266008634a1d1f8f2260c00a0864060a59a0b7de378bce9aa048cec10a22c8d5a15ea4dcd28a1ac758fb1f6ce4bc8c63979e814b1f72718272720aaa0ab4e874f44594f4b04df5421d8ff0b152eaa781a952ba
+Entropy.10 = 62fc4ff8c8033356e843e2fe66f98aadf57ba699735c36ba11106417d92fa0bf
+Nonce.10 = 1673ff31f14fa0462e96fc32f6472b99
+PersonalisationString.10 = a2a060ddce8c6adc12488cd59538730cc7a851be9d5af1fc88806802891c55bc
+EntropyPredictionResistanceA.10 = a0c93ace2b33a3c87ed6142c704c074df22e3ce97c8eec0a6f10b3b61e946969
+EntropyPredictionResistanceB.10 = 7a01f46b2f81d120fe9faa027b009ae962cf3d6f4cfaa859406e510c4df25900
+Output.10 = f0f5d997c157b2e0c6ddde957e92ed4457e1603c7fc3895e96997d08a1df5c00b39ad4854b82f747669bd1bdf54c9e6107b89a693b56b29f40c151979f247a50e145546a7b9be5e53711ffd11f4c9a33ebe0d4d0c3c8a37bab7ec0d00742ef671aeba6d3db41a5a3a83363dbd28990b9b5a49103859522ca0c5130b24b96e86a
+Entropy.11 = d660aedb4467dd6eef436bf5d4daa14f8175e9304cd0736622d839b85b654436
+Nonce.11 = 143056ac5c54776c58246f4c617b993a
+PersonalisationString.11 = 727fc8d845113b854a95a781f0fd2451dac85594b7af6d97cb808585440b358f
+EntropyPredictionResistanceA.11 = b960914e8491284539d251854f8fb593340d5e05b22affef9926409973f75c6b
+EntropyPredictionResistanceB.11 = 1b93826f248f7bebf29a6b722b5f3efce282b4547b185ade2d821a4835f295cb
+Output.11 = a45c373eeb9b074bb2830a917b9c0fd4218c8bfe9d16cea8586a4578ef05d6da8b85d192ab05b6c28d46a5951ded94ab793ad2c866a151260d2694c8bdbd94e60e4451418652bfb56973bf8f1844c67af11e66ee3e2424866aac5f13ada08e144bfb093563179db164e070488312b010e02767921ce5177c79ace6d214c0e982
+Entropy.12 = 18796f8b0a68b810a1eb52b39ac7853b56a0dc2fd20cfed71d44e133d98c10e6
+Nonce.12 = de4ce9dcc252661166f2f99e5d05fdfe
+PersonalisationString.12 = 5dc22adbbd969dbbf55539e5cdf99fe021634e3f7971a027159447ec55af22fb
+EntropyPredictionResistanceA.12 = 255bbad7e3016a9befffcbd1f46abd18faa40db80025342846c4019ad03bb1f9
+EntropyPredictionResistanceB.12 = fc21c86af90113b9c63d7ede16887c65c56c754e897141dd9a645c5a1c965be4
+Output.12 = a31d248aa9359ba919cf2a989a6d311b4843542ec8ef289bd6b9531d32db7251e7a9b402c33b0d559b794705699cc5daf72575c37fc1fd74734f5ae7eaac45879d233f6d44ce01386c641f5c1e340a2dc0bbd2d8f90f7c0cf4bcad1842d98eaca07022f4a0991965bd4b187a67ec6ea9d43e6bef5f7e4477a44cb45d34555e47
+Entropy.13 = eb82c3bf2086e47d71342932083b1495cee1e891f91732c937ff1045cbf162a0
+Nonce.13 = 639bdbd662a8625a822aeac72496b2e2
+PersonalisationString.13 = ff3cde2ecfee0ebc1a08d7a47569a9d63884f979109fdceb53fb7e3abeaadb12
+EntropyPredictionResistanceA.13 = 81681cf097a0c8ebc2aa749f919eadb177cd2f22e3ef0ec6d3975e80b84bed4a
+EntropyPredictionResistanceB.13 = f92d4e167c5214591ed01186ef84a6b47d3e080fba45e906fcce7d08470a25b0
+Output.13 = 26f564b0eb521f40670d55b658ba1cd96841d77e402b08a9ac6c8d74213942c166b70dd29a9546bbb4be1794ff3ee4301a5a8f1111489b14047142eda2349cc55186b6497bd4ca79bfa30d3d8fce4a1a2addc3ef7e7c841d168436fedb1a6cccf6ecc151f644ee43447e7d86c0ca79cdd41699796a41f6e8ff314097b8426bca
+Entropy.14 = ec8e7b469361140c16ec77909df4add59a26e69e984ca82f3444d7ed655391c3
+Nonce.14 = fa2d4506df64934d67d880a268ce76cb
+PersonalisationString.14 = 9f8a804240ec6b8f8e3a3e80e73ee07c7ef69e248c02aa02a3e51988b6365771
+EntropyPredictionResistanceA.14 = bf2e966737aaa8abbccaa45ac5371db4c4dd0bf2b3c9f1b77a8aa5864b04e311
+EntropyPredictionResistanceB.14 = f316f2613b068f607c2fb5218e037c5ab1d80b7d75fda419a7e0caedcfd7ce1a
+Output.14 = 36e385da783dd146364fead3dc2dc71bdaa6d30c6ab5f94e007b1ced51b2f45947c57652e305204a0cad2ba7b43056461aed10132d89aea8f9ec7ccf0e7487aa2d97fc40f65b399df732b03f8e6834903c60e2e5d6f5ab1b3a034b3eaaa73936770324ea02bd2830e6b26e00d7b49022ce0454afcecbfb912511cd13090d9693
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 72e8ce93c2bbc5b33fbd077f19725c367dc5a637dd68b131ebf51daa0f419dfe
+Nonce.0 = 747313c60e3c3c44392a3995b044db2c
+PersonalisationString.0 = d3dde5d17e9ec336ab59c9fb9a07debd269a97d5a66c98bd3f98df6786c73332
+AdditionalInputA.0 = 094db49716ea1c6d341a8301ff0f46c6d2d34784a86f739ff8d8a30915c65f0b
+EntropyPredictionResistanceA.0 = 5131b369e03c80a51ceed6db974dcda446e381c168bb4000dd8f8118d6c2e415
+AdditionalInputB.0 = b0bc51ca8a0a995cbd2427a0c06f2b8f6403d539005fe2a85d44860c8ddb0e2b
+EntropyPredictionResistanceB.0 = 6a38e3835fdc84ec8eb0edf592fbf0b09d345cfd223f9a90f408e7b14ef38934
+Output.0 = db5bb4cd5fdc48044103845500b580ba57f6a4d2e808c53b4f60f1d9eb3d17a3e53ed54fe723a7c857fa12c43fe05b91266fa1abe526beae37bbcb6026adbf17727905516775649084d5294d9062dc4a4b094c0294c63ea68a681dd62ebbfd19bb974015bc38b887cbbf73cc8d70e98cc6c2e5817f93e9f01907c78c3fe76843
+Entropy.1 = ddd8f60cf67d233afe5ba56917b3342024ad8acce40a321579c4b57d201109e3
+Nonce.1 = d1d22a147c89ed6d10999045aa0be980
+PersonalisationString.1 = 132aa273692c000725bb91a5ada2074d8577cee50a451aefcce646ebf7a4e14a
+AdditionalInputA.1 = eb53c237d232f9801c112474e6cf3ef5ca9bc144a5ef761012f8aaac30df6a8e
+EntropyPredictionResistanceA.1 = ff94f1b91e5335f5fbec6e64b971a5c9907bbd28d75745fb05690190db2dcb13
+AdditionalInputB.1 = f28a0d9aae78b0c5d33f01873004ee3e081ad640f865ed8acfd05f04e4e747c5
+EntropyPredictionResistanceB.1 = 4cb32840365833c2857b1beb1fc50b5dd6b0aa6d0dc8a5c6e3254c435de2d381
+Output.1 = 6638edaa7309ffb419a5cfbd80924f3984ab2d13bcbf86e3025331a106d68843935f84325a5ce3e030630cc7f306504c2ca5abbfaf85cea844a0dddef6043595f6235b1d7e00bc2ac440068bf07e33dace12fd0356c3ac107132aa501659e28cd280d3b38256009c551117047e36ac3b0a5f9f5443fad5afb0c975ab933b7f0d
+Entropy.2 = 80c7758cd707592a3fec4b226675d8bcecd1d19e58b4f44511cc9cd9af8cf07b
+Nonce.2 = f3dcf5840e19f45b92fb15db0cf46816
+PersonalisationString.2 = 83156a5900d5a11aa1fcab178f60bccad9d06fdfbf88ee8add860a02fd954804
+AdditionalInputA.2 = 737c91fac46e3ac82c0dc21a9db7ac8e4b94df6f348ac91a5258be9d06fe3add
+EntropyPredictionResistanceA.2 = 743f47403620f6f6151973310664291cc3637dee9a99eee570a5e25a4101b15b
+AdditionalInputB.2 = 3bae652e469d631fa89de3c267af9328e023eb155fad4b4f7d4400aab5c543b8
+EntropyPredictionResistanceB.2 = 5cd7cc39c4f30fd0c6e25a3c2121593ec6a872bfe1161b64b6a1405da30e3356
+Output.2 = 5f5154343fefc020b7e7842b0ee661107275567e52789a7d4e69fbf07f2d8809ac78d3cb0a5c28b7058964c92cbcb007a5cfce46673749cc9b16c8d12fdf46405f6e0dd00fb72c074d2f25a7b7394e3a77a6c4c6c6e78ab54b2bacda231aff4cac04ec394e54d9c0b37ec9a35e47d616472ed8ade29c788958e2fbf4f109fd1c
+Entropy.3 = e35a4a63ef04d298b395dd8a919a2798ffff7cd14014eeba9ffc089b7dd92382
+Nonce.3 = 91b1de0792f247ee3151de4015a72edc
+PersonalisationString.3 = e0180c78c1ce8c6458d26eb9a7c0ccba429240089c593fdb814760c9876a2f5e
+AdditionalInputA.3 = fa2df2f7480d5e4a8152f96c5074cff63da5ea30ae1610b585c80c62f73323b5
+EntropyPredictionResistanceA.3 = 48113251508fb3d2a1a445f465b31665cf40184c210b12eebb9b83541fba9e1f
+AdditionalInputB.3 = 0f8c38836b491c68fca94c05d9f4dc24251b8b6769246c66c21980acd41c4da5
+EntropyPredictionResistanceB.3 = ee01daf6460591d8138b056a76058090ed43332e0713f3a6d8180f2e4e7789a9
+Output.3 = 4992a5a5871d9ab4a9b436f89dcbeae5075ef7b1d13c8f8c00c503fec955b170542b4440c0618698a15bf9ca1caa61f03d549fdc35189cf7bf4513c8cee72377b8594f56d8a43867445fb815f10468dea44039298e63b42efb6358d8d4f7097294ed742ef010d79d92dc1e1ca329442b5a3f847fa6978d4fa7399df7d1b13a41
+Entropy.4 = cb26f5500281e85ef221e1cc9107595f66616664ac0cee1925ec46aa9badf93c
+Nonce.4 = b49d0bb3605e8aab994004850bba5890
+PersonalisationString.4 = d95f07bd85d2589e4b3a64390a2eded72ae66e1566d02fea7b91f16a02f493be
+AdditionalInputA.4 = 69a37b49087f90335864838c5f9e5e0af42db59e13b9157866c762d78edd9887
+EntropyPredictionResistanceA.4 = 85f65b0b584f326297044c52c5bdee914ff6b7d2ae536d289aff10be33631c28
+AdditionalInputB.4 = a023868dba7c6c9f8532371fb600026ca1aa22d0b3a35f4959726b5923f408e7
+EntropyPredictionResistanceB.4 = 21aecd8baea91ae741800d318210ff913d967077f6d2a968d8abf22d8ac78fab
+Output.4 = b2a5b25477717c382d7207cceb881f71a7aee766593e0103727d0c1bf5ed296c7631937ec88956249d56c10d87348dae2950d44cc012ada10ce845201962584e6fdadfcf09af70fa14073fc7da966eecd949f95ff96ad696d5cb2d71a42521522675d79ad6d67f1daa1661225a15efd6c7cfe478edcca89aff3f1b196bb249c6
+Entropy.5 = 842d4f4fdd4c55dc32b41e9d974747474146884e1026ad644383fca5112ddba9
+Nonce.5 = 69874327392e2eb83219209b1640f8e9
+PersonalisationString.5 = f6544c426770b5ed556495ea3db72571aa288f5509155b77e9254b3498ef4c32
+AdditionalInputA.5 = 83622fd8ebe1be2ae34192d61698f5be0c60b1c4a8b703f5aa836a6dbd606cc1
+EntropyPredictionResistanceA.5 = b704ab38783d62a6a877edad8ecda675a1a4b5f777bd90a3c8d03275cd85c091
+AdditionalInputB.5 = 9891f5f51241417d6d29a521ac97eb8195be3313e25f0c6d900805456ee6ce38
+EntropyPredictionResistanceB.5 = 34fe4b5294c4485a9bfd8bfecee0badf73d5ab0f168c4702cd0f8977b5a2e503
+Output.5 = cf57e9c44c49cee468b4aa0c142a5bfcffacb48b95556ef73ad07a3d101bf4310f3e7a46ad9bb0f60f01e4b7aaf2e3c0cafbb1c6134187680eeb87fce8e68b2a82f3b113461c2198e20d53d14e28c1e3f8e98e1d1511eac333eec785bfee7ef1fa7d2aa0f6a3a7562879b44eeade9c510744eacdc10dd0f1ab0dfd7e838d4eac
+Entropy.6 = ab721a5d942b790e4065042e31ec63b89b19a1c8188a28eddb51206b0130ac29
+Nonce.6 = 433073aea59f808a9294417191805a7d
+PersonalisationString.6 = f1cc637313e9de7fc86c44572e616b102a48e3735cc657fa96480da309fe7d42
+AdditionalInputA.6 = a9572e9db879eb484b9ae7e8ecac84e1b895a804b203466cd77635cb6773128f
+EntropyPredictionResistanceA.6 = 579a8c7e3b07e51ee93f4af3ecbc33b27144622cf4797b8cf8806a8d05b467c0
+AdditionalInputB.6 = 0ede0c69f55bf72ae0b76423b77e2feed5dd17596b6da5780ff0c69880adfaf6
+EntropyPredictionResistanceB.6 = 7d26cb97b154347e8c28b78dddc267282a9d9bd8ae0e0689227f9f7c9b0b0e50
+Output.6 = 8d203d5b7ad692149ecb6e45a83df1b49d4efd27d00a700d3d5298f6abf769534d9388451e7a2abc7cc910f45b02aa16b74efd59eb524da82ecb0dd5424c5fb3d776d95d026ac48dff43d0767a59774a315ede04b90b57a5f6b675abe40a4544d9c0ffff5496b5927ec5f4c13449e60eca2412c7f68531cc884745d8c8dbe03d
+Entropy.7 = 4a2f53dd2289d27aacf50d74632bcc12e913a96bd4a7ffbd8a3e6b394314e839
+Nonce.7 = 47d452cf8306fffd140703a290359308
+PersonalisationString.7 = 44da341402464295e2ae6317ed49256fd857b4bfbef113d2e30419da9fa9eff8
+AdditionalInputA.7 = c9ba53060be5138277209a36e8fbb29340e0aa13ff8a904dec685ec8c7d0c0a0
+EntropyPredictionResistanceA.7 = 71ea69947ca4010bf15f6f32c1761311f223ec11e7839e25485576a1ec84b0ad
+AdditionalInputB.7 = cde44a568c0c754b63a4f24241d9fa9213eff1fb860d9790c9c6c49430ba039b
+EntropyPredictionResistanceB.7 = 24b4a1edceddeaa2c2ab1e264d4872ec0f382d632b8fed65f8dc0776fd59d82c
+Output.7 = d32e9fce7de50a0506220ccc21748d7182c7958b73f4cb2ab7456818bea2b08e56eab62863d3c5a734e4ebbbcd1600aa68ab00da7c8db11eea8bc1bbb0b1a8ef508e77b77a24441faac9f187b52a3375f61e7c47d65b3c9b0881b5e7074597aed76a116dc99923f4e2d26de85637380e3eef77175d698a116e6880d755df0e3e
+Entropy.8 = 77ce0f38e727d1555015946c882a0cebfc429c1288cb2e504850d83718868963
+Nonce.8 = 49bf947206599db9e536c721fb1e6467
+PersonalisationString.8 = 7a1905a0d9afc458a0970270f35ed0e376b7c388096707e1803d0d142f4113b9
+AdditionalInputA.8 = 0dbe37fe55e9de7929eb2e6609e3119074ce8fae7aa35fe5d68c32e8166c0af7
+EntropyPredictionResistanceA.8 = 219ef4ab1d2cadc0256aac9ec5f04d512d3d829c2958f8c5062294d9f3e15f64
+AdditionalInputB.8 = 50dda8b169c180d82814b42102590e75152f17a960017de5f252c9923e076871
+EntropyPredictionResistanceB.8 = 582a33d7546516e1a4ffb1a37a3e806807e5229967fe9e431118f8ce0476d786
+Output.8 = 5908735c04d55fcca72ddfd82afcb87dcd04dc80e574833dabbde90423a5493297677e5b5a2dfa0048c036732232597a72f7b666c8b039f563a5595cea714eca5363db8d74c8e1f84ed8ae7a62226005227bc1c567041df5a65b221bada6573c8f4c2ffd5157d9bdebc011afae07bc73748f81353f5b5f5322c206b44a22d56e
+Entropy.9 = ec53fc0c02132b9da686c053f83b361ddd6855c55b09552c9432eda5afc416bf
+Nonce.9 = 9e7d17dcd54bc5b0eed1a34d6bc5c53c
+PersonalisationString.9 = 18e777e2b93b4bb6b93440113f98c5ee9031cfdfbb4609e0a736984dd6589385
+AdditionalInputA.9 = a39cc9ef03ffd15a6633f2f99d97572b3ad20aca0176337b203f605f85abe41e
+EntropyPredictionResistanceA.9 = fc163a69833cb03ef511ca0b1a36495175f7e6a823a97ea385c34dae107b9b88
+AdditionalInputB.9 = bbfa5dcfd3e8572526454cc6ccb94d2d7680e9016c789e7f1a4349a64a457ef2
+EntropyPredictionResistanceB.9 = ae24d948ac7faa3b9b3959b4fe92a968a869b7c0cb9f5dc934efb56501adcb7f
+Output.9 = 39b18f46b2d60b9a610e80ffe6084a4aaff6de48572f1bd9daf4501b89613bb012cdd1edbcdf828f532fc8cb4323616984d07b3c43d80b5497af03244a1b6725d10c0793563825d96684827d97907d6128bc67bfd1cf3ddede0e2f9661115147a2da134ec74ba9b77d58a7c80577e333f4dbbaeaae7e368acc3058c778265c47
+Entropy.10 = e4af53aa17fbdad508d82027e309943e03d470959681703e485d63f8d390a229
+Nonce.10 = 997d48dcced9d8afe2f51829bd8f3337
+PersonalisationString.10 = 594fe96ec4ad1b40ec76516079ff9f48c413f5ba251d95bc746bd97eb9d4e885
+AdditionalInputA.10 = b1bd9c5e2c68afa0d24da02487006c8f5f39db59f0c59e4fa463046096eb554c
+EntropyPredictionResistanceA.10 = a74ce0ab260250c34ae0d496cec7c50b598eb02033650b2ddd8a0db1636a8f61
+AdditionalInputB.10 = 8df1d327a431a6ba7b42b16ad71d7a23e925ab824c3f280761e357c77e9b97f9
+EntropyPredictionResistanceB.10 = babcc18da65a13777c6217254e26135331394e686d3362d4d9c45df2619506e9
+Output.10 = 4ac5d24f432d220ecbb2bde30cf0ec80aa6295cd12beaa77ffb58b9087c2105c4d25ee85c9a3ea4703d4f42cea08c4fc9b1b989dcb4ef7ce68440887c2a97682fc0e26b97f3df9bb015e15e9dfe095cd0770185049f2295a0ab974e162bc8421fbc90532bba39ebe33ec963722068c8a191e4705f2e8e994073437f44da5865b
+Entropy.11 = 9f87d8b3c0e2d670eb13db803bc6827d904d056a3f7626a18897f331b436bf4e
+Nonce.11 = 5e2092355e5f4198b1abee3df8f39ea6
+PersonalisationString.11 = 0ab3e417f3a4f59013b871442916f4744f412146704250a1e771b36a6e3ffff3
+AdditionalInputA.11 = c65e00c74b49055a8b21213b2c885dd86acf4ca273fe5fa262e4e025e4b28510
+EntropyPredictionResistanceA.11 = e62ca4194c715414661aa7f737c8323f7436721a001bbacd692ef0b5c81cd495
+AdditionalInputB.11 = 80c8eb64d2586950702ea30ffb24eb3d9ef5fbf2b43a6d45c7010b2ee5f1e1c0
+EntropyPredictionResistanceB.11 = 266461450249953eb9414dab4ceb92c1a37c7d4272dfe910346b9ff5611bb453
+Output.11 = 025e5175539b8f80c335915e2c9111cc5eb7c3d0aaf8f3bb2ea2fc73d64d856dc474ef10b06fa6a2ba1542b9a2ca7101066d491c7f0781025c9999db1f24d81d5299ba6e255cd5f433f588cb7aac97ed41072fb4e7cc34a344233ed22b8ac048a8032ae59b47bb7d4408382cb328d3eefb7e72628389579edf5abb99fa25ab65
+Entropy.12 = 0afd3ece88d24ec911c21865f01662887b0025ab23825928a6839773fdfea85b
+Nonce.12 = 4831b277abbd456814cf2bbed00ba30c
+PersonalisationString.12 = 679d6f27acf2141753652c1368586057bc7ffe5284751dd3d33736f9fa03381b
+AdditionalInputA.12 = 292b93322b1a651d20bf60605075b7e47839328b403cff4a197eefbca5a655fd
+EntropyPredictionResistanceA.12 = 0725a9256caa2f952c71dc75ea6f80c72e59902d87f2c8790a3310171dfc7134
+AdditionalInputB.12 = c7506c2b9ce3fdac59411d3a909a4b50be65eeb38e55e8b2ae40b0e6dbec3593
+EntropyPredictionResistanceB.12 = aca5e900aaefaf127a4f11d0606cc0454a852cd2f45c30c72aa64425c28d8734
+Output.12 = adad262adc6a9dca674d7ba97b97d9f72d604c7efac629b37a9f960f64735944f5c27e3f0d5d2bc7227083759639e775301eed11b1aa664b786dc79a24fc80d03ff1592b245b6d0a4727868ddfe99adfad2c7f2c008a14dfc24d0573fb2fe393fd9c4dfbaf0c6259a4155a62b095bf8238b166d21872dfcd4f691ccf5c6b8486
+Entropy.13 = 79579a1a437ec39f9b6005336e7f3d5dba42f5d61305d5c8e5f7f554d6364d26
+Nonce.13 = 91215741b815b729580d10143378b6ad
+PersonalisationString.13 = 92cf0d845266f6a085dff26d8685993629b214690f376b448d2998f8a00d6811
+AdditionalInputA.13 = 393fbb095629da4942ad8b7200a0aa86d15f55a3e63343843e580a5f1f8dfacb
+EntropyPredictionResistanceA.13 = 68f00115e69a76e9d7ad12e46020b0d68fb7bc8d111d9f6aee5f7b4609aebd69
+AdditionalInputB.13 = 679a36ebbe76db27ae190511c69ac02898fe65a3b2a30bd5f09ce65d5760b2cc
+EntropyPredictionResistanceB.13 = c78d73a88c1243de4be1f890ee86571be7f9789aa19dc480fba487e59e205b01
+Output.13 = cdbad3e529ad4b97b780a1c3b8eb78a818fa4bfb6f9e32322364d0940a9b9a7ae28ac54fb62c4b8eb6fdce0e520b0f7d7a289eec677f9870f844293128a736742f65ae738fced003d5e5e8aa7f1280b68959e5ce25244f62047d39d0fb422830fe964db42f20f85069145325edb20eae15bd196aad535be40d252fe4c94402c7
+Entropy.14 = beaf411317721faf994cf0c11ac018c316a4e4da234f4d9b1df91398f0f35c3b
+Nonce.14 = 74ee876ffdd213668623c4dddc2346a9
+PersonalisationString.14 = 815ee3ec33142d9c1f976fdf47ae41628b059917e9e89e48a645d54bce055900
+AdditionalInputA.14 = 981e1299ed0871c324f6f718cd67483e62118b0d5102f625f3767e1b94350938
+EntropyPredictionResistanceA.14 = 0540ba58f6dd8531604a6217cb95560adaf8061f5511563f4bf40f52bf17b1ab
+AdditionalInputB.14 = b395f988467a2a5f4f3ddef792f16f2461886caf9d6f12c4d643d207754f31b2
+EntropyPredictionResistanceB.14 = 22f2693142e42848bf4c00f65337ec2405cd22bc06c6d035a5acec0a5b7d5d9a
+Output.14 = 3edeba227da675e1b9e684317e54c4537691f9a412102a21e32e699ff0c6e95655d3342e94daf37dd08114d16b45328795e24d7381195711792226769975167ccdd10df89410e485c880865676a081ce6a61641fc805d6d06cb4aebbc731de0a7df69ed1107da07821d64e9f8bc124f094bb799fe50a001914a47221a45ca2c9
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = bbfa693d65672abe31fae3e65354c283405c752da2fecb5dbd47eb2e79984c3d
+Nonce.0 = 0e55aa9de8f2515bb2cd256c291f42be
+EntropyPredictionResistanceA.0 = 86bc8a525f04e26f12540f20814b1e8278e7b8bd928c55fc90f8dc060aa32feb
+EntropyPredictionResistanceB.0 = c642adab320327c95f5b3d11f2ec013a494b08858c460db3e5edf3371ed846e2
+Output.0 = a0777ae3201f8567b802fcb81b67b1a777aca294ad83efa1794d5cd7ad30d17ea2c9077df5c4e61435c4b69bd952ec78231c5cb14934a02aab49717f996d06f1bc9ff829765f44b85c0597947368955b702df105ce82ef37b8d1e67cb614b5517333afa65983b4749bd1a912370bbe901ad7141165d1aa8c0dc7c2d0cbf07497
+Entropy.1 = 383189dfae3849b46f6ad2c5e2def84fdd7e102441ab7cc638d38ba6a84b848e
+Nonce.1 = 91c6b3a7795079e39e82220dac009efd
+EntropyPredictionResistanceA.1 = accadcdf684a301dff72531852f406b9f5126c75473dde4da1828f7537de8552
+EntropyPredictionResistanceB.1 = 34683047be8ae7761dd3943007793117aebcd4bee5a7973faced2f5b31dc7ac9
+Output.1 = c1b4cb60af74710585ab4860cef5087d98e0c5da0fb493db93dbd751b1e1b3381f69024717f6712a8b06b3c41603d86e8baa23ed3f42ccf90f6a9e59b2af8450c550ea586bc6abae3ff5349e46317e5dd60a85b376efdf17f3037304429d9dd9906ff8bbee880890239486233fb7c11d55e89db3fa8aedd5c04f5986f667a351
+Entropy.2 = 5eabded664e84e1b64e6dc16d2b6f4a92877574a523d7281fc0adbf545dcb37e
+Nonce.2 = 33a48a8537ce47ecf435144720e6467d
+EntropyPredictionResistanceA.2 = 72a86f7467367a9d31373aa4a0198cb58ac1b3dee87768c1cbb332e70b1600c6
+EntropyPredictionResistanceB.2 = 08f474e1e88c2522ebb16c6d4a3831948c1ae45104fc22d2fef268f781f2b07a
+Output.2 = f6d91f27c0668937ad459f02e67ff8fa0b96cecf821247f7fbd29462b5adc231383704e4917cf287706eb57a9d72b1bd706aa445e0ad3eb8577710e2efe3aed2ce2f14d9aac583b69f2407727a598aaffba570d75e4954359b14d716b38ed3ec0b0278aae50dc372c3b44c28ed71c9e93a8805bc82aceb3353e1e4b92cc60116
+Entropy.3 = c758a550a7de3c5af404f80828724fff5d9e7968646e022e2089d5d5ec008f20
+Nonce.3 = 747604dfb033dfa686f95ae13135656c
+EntropyPredictionResistanceA.3 = dd27eeee76dc854fe638df007f213d729a69d3f2dede5764893f30e7b6cca506
+EntropyPredictionResistanceB.3 = 2670b3f65cedbde6c9db35e7fb5f09a5442d7df2a9857875b891986b6541cbd9
+Output.3 = 385dea41264d3400ee34fc0e1d68ea3d60c7da6e02c2915b5967f42e9467f433f1ebd8c0e6a8da6ca43be8795b97bb852bc61ee8d8855e0d67778437d686c9637361c00cd3320dcc51475d6a09e6e133795b35195cd8e4397d9895c5067465c212b171e93b0148acdd53bc67b683fde8d38084973d3bc6c79838d95c146fe89d
+Entropy.4 = f742ff623109f2a18c7fb8cababe644b9275cc7b44ec45bf6454cd9eae1ec851
+Nonce.4 = b1524e6ad7cde8501d356b821e530cac
+EntropyPredictionResistanceA.4 = 2e3fb4507152bd5581e167d63e4932366a3b07491da542909e9ff58a5e809042
+EntropyPredictionResistanceB.4 = 196033359a061fd1c8fb088a6e09280d3efa73dc6ff38bfb485884bb8bdf83d5
+Output.4 = 4445953610b2d5c4946fdf3908088c1f89289ff28843fdc44d8db57c5baf18799698c015aa1ad822501dd51e325b6bdd0f2a0965b55c489db610bd56daf205e49f04cb9c15a8c688e0104a9019d909c4084e965cc35bdbbca3fd3f851576274a495030e1176c7fe4d746e2aa70b075ef9725c91a8a0c6e6c51c3ebe9655c287a
+Entropy.5 = 74b575a31f013b96aab578c5c01ef87ce045eb974d906818dc755e851ec4da59
+Nonce.5 = 705c145f5082aaff0bfc866071b4d083
+EntropyPredictionResistanceA.5 = 573bb956f1cdaa008dfdac3570a54696bcd9c20b22b5e57fef0747ee8e95a401
+EntropyPredictionResistanceB.5 = 406ee259ac0c912e37a91c5e4879a7e6675c8619d3e3816908d0aa9be5e74290
+Output.5 = f2caae2b55eacabc3a6022935cf58815aa06e73b3c2de2d0fde997599d85bf01003edaf030f64c5759936de5c261c449c2bd1c2f69a126b44b056b6f416bc7cf27dcc5ef7b2b6d2805d6e75de26c80d960b9e1cbe514d7dc64470f7df7aea846fed33a3c881c5b9a38208c1620f4e3e48ca93dd3fd29dcb3473a2c67c66258f0
+Entropy.6 = b749a8bc7579b7909a2ef0840167a7d6918256c9675c897936dc3e5b9d2d28bc
+Nonce.6 = d1b28e2b5fd39f179620713da31ed21c
+EntropyPredictionResistanceA.6 = 8056c5563ae65cb55ffe57420570e35c1a753c0e9dcd45458d441bf095a37a48
+EntropyPredictionResistanceB.6 = aa31feaab115b1ff13138dbea516d031fd3671004830bbb0cf27732878395dd4
+Output.6 = c98a826bd3aeaf3c9ec8414a3a0b2b8a41180752b8f6501f41c89d57a6ece159bbd271ddbd201aa6e202755acd5e4bb7f1b5f2a850843c08e968a526a0a54983247bffddc42d686dff128056e3205553795aade42f3ef4683f4bda822706d448cef97cbdc85167a7a2f050207350da336a6534fe28d72d739cf3cff3669d97ae
+Entropy.7 = 99b1109772ce99c4664d30168b151ca58cb02a3f82d035c2c11cd322092f217f
+Nonce.7 = 9ba9286f566d764be5fe69d5819f2ab2
+EntropyPredictionResistanceA.7 = da454fd47b5115e230f3742203fe4e9b264ba138ce7e04aff6c2fa94d400e7f7
+EntropyPredictionResistanceB.7 = e12cc6bb20ad7b6a7aae2c1ab3791fde16058dfeef296b70e45f2949cec465e2
+Output.7 = 259907582be6952e0c5a3d448d53f377a5d4894d096e83ec5f1d4cc2d1597df611e6d2245cf7104f67acc392c3d6c4f7ca36d27d624a0102a1cf7f0e18bbed2b278e248230f669a455fab04ae6d2d86d89bf12e529a5740752049a101550b94ab8b2a35b6f734f5d27be2fad80e14c1c947ac98eac85c03f166800c63abebf60
+Entropy.8 = f86c95ea14b68d8bad354964be833e05f727ce54f6ac273f25f93b8cf6ce0b9e
+Nonce.8 = c964ff9c2a3347b1e6703fbceaea603f
+EntropyPredictionResistanceA.8 = 866ca5218b929233a3154dda994416793b90b5ab8584b758175369cdef8066b7
+EntropyPredictionResistanceB.8 = 6a43e45a15310e40a8cb7701ce6b1c7d9fa974b5adcc8d7bfeb94d97fb22f951
+Output.8 = 9af947c4c0e68b0cd1778d9cb275b78d83bf8090fdbdcd44d2157d5f402477509c07d6ef49f2f3708ccd1d929c68fad6ceb94d51e860944b01e62d6e4f027a38be7f3b395ba71ecfdd02b9ea78d623ecf54ea12ed0377d4c15fb29d0f73624fb05615cdf1e6e413259e38eaa78f7627daf6ac3ec55011c0722f1e07fc3c4abf8
+Entropy.9 = 7e45db7893fc12e4c7cf0dfc8e247f3872719f92944ff6e1f82d466c4c7d22b2
+Nonce.9 = 12046d7a31ab9692e935d9656a3c0a12
+EntropyPredictionResistanceA.9 = 3b1ebaece893611298840398bb02bea11de5e89d14dc020ed5c9e6d8c18b701b
+EntropyPredictionResistanceB.9 = 62e5a645a31d69bffab37bfaed0146d428cb066669acbe6ebb4d47b02eb473d7
+Output.9 = 9166873de7dbc749fc2efc64533b5f088b033c1519b500b79571115a81c0a8b232d004694aa934e68b65501ea452b3776a93c23d894fc00cb27e68979516137f25c8aaedba85bab2069e728aa9aab825dbb6ac12ad2c9b06658f5bbb914a7a4bd0a27e3d73f19053a3f28d8999a2416e572b694b78f78810cfe65b22279d0f7a
+Entropy.10 = 63f19f98beae6669060eace5abccbbb4a0280b64beb3e13e0d3007865bb9a6d5
+Nonce.10 = e16cb823ccca5ff76c2c1b36af529484
+EntropyPredictionResistanceA.10 = aff76e465b5c80186af0b705f169d5c166533b44e084e90cfa679e971f051a98
+EntropyPredictionResistanceB.10 = 4611eae511555e3326f99df48bb4faa482126989e629fc54b62c213afbaaef55
+Output.10 = 56258ad5132ac20ea4e8d9d60b33ad9d7dc9f74f539ec8f62ed6532466b7750a1dcd802260aa27e5d14a33d83e04162b029aed013b10f09a5055d89f9a71750a21bd806db19e5820f95f818b0e16283fc58a3b34148e9416c9f76bafa9bc6ddbc2f2a57cd3a38488e27f43cc514d342980627cda1660bbba60f16f505ca135aa
+Entropy.11 = e4a2b73624380c95dfc3b521ffabe1c541436fac0e3a035ccd1c58d8479e7cd0
+Nonce.11 = dea73018ce7875870620f828e083d5bc
+EntropyPredictionResistanceA.11 = 2c0f0b751ba6e433788fb2b258b161faea6f9f1f6c8551bcbe59a4a3ba157f4a
+EntropyPredictionResistanceB.11 = 8d9ad0bb58321f8754a03f6c93fd4d08d4755b9856c6fa15605d1669519650c0
+Output.11 = 3f72caddb3c912b71f3e3ede2daadac15c18c490e3e9fc2f5f282e26b526301c3b07e214f01b035a02e785cf6d87dbcc83c0d2ea795cf932f870ee1a2ed63f99529cf38c165864083c4dc778d9fd4d01a603a80d2ed608f5c2c9022ff2fa56166bd7fcb20144ae0fc75629d198f8e22c924bcb6a201842d13ec8960e7b14124a
+Entropy.12 = efa9010851265f278d257833c843b0b45942001c120e4254e916aeb4974fc74e
+Nonce.12 = 16766dde08e74918253ea14f359ede8d
+EntropyPredictionResistanceA.12 = bf20b4c96cf367b556e0055b876a7b5be82ad122d4a851385ee7d914080fa335
+EntropyPredictionResistanceB.12 = 789505fdebb2878011a05b2772acab1155ce47700fbe6f159efc5c97b5c7d8f2
+Output.12 = 65161afd5613cf6f5afe5a868949a391d85434596fa29e214dd2e1a4d4693bece6a0f8d4dacf3ab3302e3075e8af6df5e0bb36701e86d034e45ed350d635640054004351060ade661f0c63e395eb756c1d31d388c2c24cbce5a994abae2b779ca3812ef2b59376cad4927f6bf900613bb9f9c9f7299d4754d16ffbaa2a13f185
+Entropy.13 = 79c43373112160ef5224bdf152b8122f4aebc940ed8358a83839c8bf0962032a
+Nonce.13 = 31e3065c187df1f8b6563600233f3185
+EntropyPredictionResistanceA.13 = 7993bd55a6f0efe2c4a550b4d76788b5fa72d20707b6382346147cd3119c93a6
+EntropyPredictionResistanceB.13 = a3288e91e9307ed2c489dab7c819cc04f5d86a14fbe6b1be7628e6f4c27762a3
+Output.13 = 2101af7f0a0ba56b63f2ec012a5225a7b77305ede810b294271ba0bb6d6ad3656dd4d80b7295a365d4882ab259b6e962aa22b39aabc767be76519b6ab01f707a7f77308a750bbe96a8b828c4cfe09506ec6a67cf0c66fb93842c07ca66e6009659c5c865212685364de9b9fd960c614b9b57517147675571eff65bdb546c6aaf
+Entropy.14 = b786edfbfff140dd6229a610b5e2d26207ef320bf803878be5c77904042f1288
+Nonce.14 = 75fa4a6797d9f36cd84a6a91ebe5bdc0
+EntropyPredictionResistanceA.14 = dac0795c36fd9cb6eff0cd7137190d573dde7148fc19c211c290a67c8ea9f381
+EntropyPredictionResistanceB.14 = 1a29a4fb16a73c2c187c6d1b5a1a1394b63b6878abcfffeb94aab5dcd593037b
+Output.14 = 835efa36b1ff38ed845f3c2e8f5ec0f89a60f7def6d36f8577192625fb89cb634be535a791e28b1c27320e40f594b1705e712e43856a1a5aba0e98b987fd1b5e6ca78458c98b3f8de449f4f23d0dbfe374e8241a2f12b6cdaeaa896b9953c32d756fc2b70e1edcde45aaab0df6e816fe0d04b2cec88ea159dadbae9b1eed3125
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 357bd51273ed2c6793a54fc80aa7408c8b4a1d05361cb2bafdac4b9b0766e41b
+Nonce.0 = fb2b5bc9daa5916c8efc7d37b37a5616
+AdditionalInputA.0 = 6c7a8651e3bc3964c637c505cdbc42c09f6d8fe9b2665cc0c7d6986ee2c25f4e
+EntropyPredictionResistanceA.0 = a70d6af35c38df355757322109b4c6917059472fb43a0c5d160987758640fc5c
+AdditionalInputB.0 = 256f3a8be801f4834bc7602237cae595f7a2111084ee7db807d060376a53efe3
+EntropyPredictionResistanceB.0 = 935eb63c82b190e521c3ddaea4fae9106f59eca716efe4250ca18b2976054980
+Output.0 = 1771021fbfde38f3dac9144d642f22f7b93f449a92f99e6b33b05dd30ddf0ed493f7848c04550bd2641dde0d64fbb7f2cb7683d1653e94610497b6213a068bb00806aa8fb23d3c86d483c77ef5752a5f17edb747aea4c04178659d4369a6683bfe14df8ed9edf783db4a4dc5bd8d726d8c4870fb5f018a0361e4d593364fce0f
+Entropy.1 = d51e122930deabd19f3233d8bd99395783a69ce6c87a5bf956cc812463194a2b
+Nonce.1 = b71e62cce379278ffe5d2c53859e34a7
+AdditionalInputA.1 = 2dcdd48509263e20a95e5061068a23a8e413e53e2ebcf6df8d2a92d32e62bfa1
+EntropyPredictionResistanceA.1 = b5e8346a61ca9190f6829af99facb6345fe0f3bb8c20a2ee5fd29254e834988a
+AdditionalInputB.1 = 8e75e42a36d1ffeec2a4197df62cfc489005d826dae5e4fbeb612a12f79f2fd6
+EntropyPredictionResistanceB.1 = 32d9ab98585d66225c7a457b7870fb990ac66045eb942b425a4bf0cbdb24de2f
+Output.1 = bfa2a064c3184375bd73863022950aaef7a0cd4faeace11fa3ed114ad16c1c9f5e5498f78b6c519c66f70ab760b35b1a2678377fe64cb8354c6f8e1c6f4d5f067129f0ac1515741374b4525c956cde9b3119651d1298a9534d95ac1db0aaa4d4dadad4253432dd606e9d81ce1897146d6a65cc58497dc45d8d3e193c6aaa7e3b
+Entropy.2 = 5f48b321df9917fc5a74d7831400440da28bad97ab30da9fb9f63bb4aa82938f
+Nonce.2 = 85a7cdbb741f83b2fce28ae61b4a458e
+AdditionalInputA.2 = b74af6b6cf5efa229189976ccdf840304601a96b2d968e28e32029ab43966c1b
+EntropyPredictionResistanceA.2 = 3b22496ef534a3925e4a7f713260edf99c247847cf0116bc89529ac16a7b73ff
+AdditionalInputB.2 = 33406021ce3503e47d00a98f1432b79a1d14a56f261e0d44507b3d6e54f14d48
+EntropyPredictionResistanceB.2 = 8a71b6d21f473a455dfe624dc06072276ffed73c8bf572b634d8931db879be1d
+Output.2 = b48aa6967f223ea37b5a570993ce2c24f8596d96bc68aacf5ab6eee0b46725f98943fd27b342a77266406c32f049c5e1dbf57e712ce0591707d15993b1357adc11b729d8fd19e37106c637b8807c2a068378a024df8ef878d28c25e65e98df654c77fa44ff8c64cf58a2cbc8c2d6c2863bd61e9d2c6f74d539e3ae62df896711
+Entropy.3 = 7debbc6f04c19d33a698192ac976f7517ae137d6bf185d3960b9e64b366faa99
+Nonce.3 = b3434c9aff2c9bcce272f010bfc6e262
+AdditionalInputA.3 = 8f637bf770c3121e2ed7cb9c7383a8811055038fe289d1748a24b1b9f6b1bc35
+EntropyPredictionResistanceA.3 = ca0f5111c7e033669c0699a0868629a6172b07854f5198528ec8839ba80a2fe2
+AdditionalInputB.3 = c62f1582b31d5926e12ac8f7d07f63448c845283db3c186f83003618c3289336
+EntropyPredictionResistanceB.3 = c43a73a5c4303c72b274891075ebfab4fa234ec88df3457c7dd7778f8b8d9632
+Output.3 = 26d7c4b42a186b98210f49e35aae057f9ab2019df0689fe09c16672338595e47bee527612fc358ae4daa7da48963101165c34d99ff6f2fe46f99034471e35f7e6c86d6ad380d0d1cb433fb704b627fdf0974a6cdc9df2b1fd7cc72ae86fdc1647ca83d9a2989035ea724fe8864b569784f079071b4abbf0f6ae825cece37e75a
+Entropy.4 = 4f2056d76f9bbb7d255034a21a1b2bd2b3ff4e9288764b90d33a8990bf99bed7
+Nonce.4 = 3240c2f2904345aeff4325855b4c2137
+AdditionalInputA.4 = f3fef13927ecffc7184f6b7f3cb2ef434132c057e09658a650c164379ce6b08e
+EntropyPredictionResistanceA.4 = fc7ed82c6f6a2a8dade8c4319059164377cc109fd66d72dc7bedf5c1fbbaf774
+AdditionalInputB.4 = add4fcc1dae0dd0225f61164ad1b7549c5ab0f59a7dbdf2f8b81d675b4009fbf
+EntropyPredictionResistanceB.4 = 4af84af1051d2d3e0837d8854e5f48a4729aedc4a9e20f8cfcea4ad8529ce2da
+Output.4 = 00a572b00f2dbd17fdd3d1dce81077dcbf344cdda12755b1ef4abf69da4238c860e0a3e6b38bf0d8d21e1f3518f88c2ad227dbfd191b089905c88810ebacf72343ed19011a2fcd9f8a3a7bdf5728eb153eb033ace9f9e9c2c4905e3a1ee23bacde6a62e8abe4e325ac582cb3f7ad0f93d359355b2f72e5864bae7179b3187d1a
+Entropy.5 = 9c3df963c0977eecbaa3b825dbd8ad0471ac4a45f26db5b1de493a6ed8e6bf24
+Nonce.5 = c1b3fe2c477bbef657f4bb4c0474bad4
+AdditionalInputA.5 = 5c2277c8fc92b5fc32ac72df275dafb19e2ff82915fa4e49beab56fc1f6995b8
+EntropyPredictionResistanceA.5 = 845f745d29bed9b5c1f62cd180d79adc7d33c794f3593c6b6b6599516af88354
+AdditionalInputB.5 = 99f7d2d18434ca4fe78a400b8de2a47f0a4435cc3ac79f89192d4dc484ffa71d
+EntropyPredictionResistanceB.5 = 2a70779d3dbc199994b0ef548622cf11dfec5aacd3a060419f1e9679e779f976
+Output.5 = e39f4649d8caa5ebdd5976c4d210bb5a643922847237e2e410b05a27a3c76f529f3758923086bd799cb8f31d41810855a48c1614d5df14c231abe6cb732e956f08b8e89bd41c34422678cd4f08112a108b91eb0e4d65ffebc474eaa2471fadb12e126f6d5a0279b3a097cbd203e2914b2623d8b1abc4d62e8363e67758c4f7d7
+Entropy.6 = b75b5c1e35b70dc64a0f72c64956a6129cdf1c15f89373c91c058dcd9ff72cfd
+Nonce.6 = cfbc58ff8e9e3bf69bdb7a5da3befc0e
+AdditionalInputA.6 = c7fe0acfd952931949e957b3aa928dcb900212766344fa85a09ae965b90d1ef9
+EntropyPredictionResistanceA.6 = 0acf99c4f3aeac6a197393e80ff3223413ae59cf00b4577fb3d00232a62b52f2
+AdditionalInputB.6 = 4ce73611f0f58189264bf6c35657ee896ad3f8cb96614f872769cf379a0e4015
+EntropyPredictionResistanceB.6 = 7d88f0aff222eb69d299db375d94933ccd2fb375ac2bbf199b79960b89b54e32
+Output.6 = d64b89ee14ed807b5308c54ce97c6c142712bedf8fcdd9466eba47fabee10ecc915214720bf9f84e8a6665f15a691172aaa576a454c2b498dd237add82376c0ae366082abd8d51bd089327479dd1a003d3bd1e896f269efdca8871e7a835d1b6d66c4cc084d369bc071393a0e6287bb199054c99ee47a17f57eb05515cf39f6f
+Entropy.7 = 95d0f00426560a2fde5c28ccbe5b08d6de400f63225429109a9c4dd3ec836031
+Nonce.7 = fa25fdc0d5d9e21c37a8aee9b55f0cb4
+AdditionalInputA.7 = 72e48c88fcdb93fc606452bfca96272054a0d508b60233e52296b6d2df782449
+EntropyPredictionResistanceA.7 = 1552b0ea2b08a206b0f05b415bd535d78a7990562c21a6a49e2d34d52738c900
+AdditionalInputB.7 = 0c909dc9cce2d17f758174654fbe3ab8478f343682adc3d1d5123129b39cd761
+EntropyPredictionResistanceB.7 = 9825621ed31075a8e7c9a7e43c5c6e7b360158b0e6d74df18ce6ef7b3e144089
+Output.7 = 5196f94058ffbfbbf446f9574d7ec2c2052b5f01248e4ffd1ff1566cf71817f977aa1e69bbef7c39ca95c65049ba35cd84979b9e82cc5fd87f1104c86e3ede25df478649cf0eec6b3b6628e09f1cba65870c6eed8fb1e0415058cf9a7d102ecda041365c2ec12f9306a5d388ce987e6f78c23f1f6d2d73d23111c1a41ecb0047
+Entropy.8 = fba8dc1605c8dca6a7adc2e9f332b9a983a660fc33be92fb36f550e2bc8ad65c
+Nonce.8 = 7da1ec25507b3c048dc1fff5ebcc506d
+AdditionalInputA.8 = 9f663c56a95f28a51a8f2044bbbc63b58461b8b67735787e2982223b17a0fc31
+EntropyPredictionResistanceA.8 = 34c7cb822c1a00a6508ce5a8e46c044800595ed00399a0d785ab9a9dce4f6d2e
+AdditionalInputB.8 = 832f185f36c6c323420dffa94a7cd67cc875a25f9e56567f26ab4b53821bfa3f
+EntropyPredictionResistanceB.8 = ef4a736a7149e7e23e02a490c7f615b4d15cc4070e8efb73d81afea7bf2e9fb6
+Output.8 = 8a2d0c946838d4df2809266f05f51a5416c8c278f3748e67fd4f49be6049aaf13ffd14a2f0622d2ef84ffde457ed6a7d30268da33c5d227cf8e666dd8854f653261a959fa275682702dcec5de3a31fa2b60ea40a25f6c9a4ba3e98d7174a6c739b67d9a6f48b9fcfecdc280023112444645fb92c588ca3eec1c43efacba40599
+Entropy.9 = 538ee17bb1930962485867078e9e7fc2c88d41ac8eb1a5947d1f02e847beb340
+Nonce.9 = cd3db82f13d6d8513bb793c05d238049
+AdditionalInputA.9 = 4239d12f56355738854c473fae10f95ab1719267e17944d92ae8b289b6a6a7de
+EntropyPredictionResistanceA.9 = d08f6e9abd85378942827fcee151e261f91acb728c6f6e506c6c0cab22947558
+AdditionalInputB.9 = a9ebd404838122cea89f85648ddaac0fe2a3da560ef762529782d45e74d839b0
+EntropyPredictionResistanceB.9 = 7bd4010142f3c462c7be868a7b7cf8254dc8b0cea3b9d5d44efaada0b13c3875
+Output.9 = d165435609f2b544596d37f69bfb7a58c5dfa8a0ab1df92d16422574ce5e5423f8e7eff91e1c73c07938d05b55165af91187ae094a2c17680407ca93e2a390232411ec7d152448a3cba2879a883cbbefd248ebb3e2f2dba48ca68f7bfd2d8dd26c6bff64d1a937f0624b2399bb9d70caf823f79416f7c44c034f37911d170194
+Entropy.10 = 3532cf92c39cc70f346ba28d55d7e77ec90bc147c912414c6c55c2ebab648417
+Nonce.10 = e974b2894e028a3764384666217e97aa
+AdditionalInputA.10 = f80c4590ef76d02397aa2fe0f1ddb7034f891c59b77368e962553ce2fc9c55ec
+EntropyPredictionResistanceA.10 = 2b7b2534fbba8338117af1feac106a686494885468ee01d6b8f9b2fe5bf5b79d
+AdditionalInputB.10 = a48d11803b24642c4bf939c3c2548dbbc7f63e9f359dd6382c17e069f18a3d45
+EntropyPredictionResistanceB.10 = e0ad5d3500c68eaa35b2c47fe86e9ecb1a5d94fa45ae832f2515853d7de121a8
+Output.10 = be37e1b804279d044c9364f3b314d7763a2704bd504b374ba236a50de94a1c6c9108e53ebd29eb83e14ce0f12927787356832391d46eed42162080ab1835730c44f13bebb7bdf1e432a99d6138c9d9d5d5c65d0ed6dd9f71995db229272f71ec0712122611aeba2f18b718f3e067352860bebc7c29e553fd71909559205aaace
+Entropy.11 = f04a13508ddf2deaae8dc2be88139b10c6b9071851ee0eba7e254433ff306ba5
+Nonce.11 = ddb634a5c9e5fbe531acf23701a021c5
+AdditionalInputA.11 = dada0d06c71d89a5ea3323dc3d96c529bd9163eee10267c1c5cdab62b2e25db8
+EntropyPredictionResistanceA.11 = 6348993b84339c5c048b960b4010dfee7135b86ce421fe7a076bc0c07d1ddc5b
+AdditionalInputB.11 = 9fe0aac704875bcbbe58d747e377f339af899c4dc8fefcdfa9cb264265ba46ee
+EntropyPredictionResistanceB.11 = c82a9e71e7bef10ed54c9b309720c6667f44e195261f599b61bf7baab6597217
+Output.11 = 3121b55fd5ea68aaed78d7c77f025b5b2d2c22bbd0fc8931145faf9342321e2b0104e8e7e20c03f6606393e5c81fe0fb4df8dde53c1b37db222a047bed77cf631d0e9436623120abc6150b369d0396616d7e444f1463e307d4d41022db2d8d5d9b9e8006aabed17db0b9a2fc59ca967abb7821497f4e240013b0594d862ddb93
+Entropy.12 = 869f022a8d5913b561323407ef7086a9ec8f3026c015e5842ab13bfd37663409
+Nonce.12 = b449b44d5eabde7385d4cf9cd67ddab0
+AdditionalInputA.12 = 732a16b62e92222324ebbad040ea75fcf9cfef723361a95a7c7bd5ecf30a2b0a
+EntropyPredictionResistanceA.12 = 383cbad716a7692289f5bc9f14f35feb5a70638007be32a3b3d06f15c9e84be4
+AdditionalInputB.12 = 158d64247dcf30e9cdbdfc14f959b15d432af7faa4f97686955b0dceb1fe005a
+EntropyPredictionResistanceB.12 = f2579eda1da6cb73c4908853d3a460d2beb642c86ed7a10374360c30c9391106
+Output.12 = 94949b1185f193cf2a8df448faf0c0a5b7da26c4263df0d081c5bee39478116dcdf506abd545f132fa226ccf136a6030dc08624b4d25075d8cfec6aca162f694f2ef64c8c26cff988f5504d6b87549833f0184a92f94e8f38244e876742bd38a092325c3e97b43dad977c0ae3d3495767cca8a95bb92d410e39032a0ed1e4856
+Entropy.13 = 5450c061672b4d02676f2ee06eff6a5e9d2dec2a747ce145266059ea61d02e83
+Nonce.13 = adb11fb7c31653f1713357cedf20b0df
+AdditionalInputA.13 = c69299ddaa5a2b09904cd52c7683d1d4771c434373fa91e41607902fc4eac39a
+EntropyPredictionResistanceA.13 = 82fed7add10fbff819a94ae10abdc83f1df74115ebb8c5edb99e0908a0ae910a
+AdditionalInputB.13 = aa3f3892c7989aeb89654cc9802bfcefa0c7cac970b6504f031c6ae4e19258d8
+EntropyPredictionResistanceB.13 = 9728a0565891e427b74fc0bff3806fb6e3644fd10719bbcb52d5d240efad2c8f
+Output.13 = f866d83d797f6953b09f61456be41f43a6383f3398dd0c0074bb1f2cba4c45aa82418e3bb9789a5b7892d23c68bfea4b3e71087995681156f38784d926a201ab0441ea89ce319a315d781499e503a37fd24432319ec5bbc313e69eb3f0c63e729e8285c636da8675580a9e2fd69d11cbd5c3824a5b67b9579ea40c8433522e44
+Entropy.14 = 83dba00b2f08c12b927a382047369c7bf6ce3fa69eab44b4da64958c4b9c894a
+Nonce.14 = cc3a3ff891085f7759572240f979dd56
+AdditionalInputA.14 = 8d47b1f3730620ce57538b3697148b1395663a2cfd3b8e1efdb0d0ab0e886d29
+EntropyPredictionResistanceA.14 = 68cc8523f480ab2bd00c34a8476e501b5e691d0d61ee469e3e0275be7b073567
+AdditionalInputB.14 = a908058d07b69a7e7f53869d81128e47303fffa4f0400b3bee7acc4e45af6031
+EntropyPredictionResistanceB.14 = 040c9859c26e54e9d5f92485888bb67acc5092ce679e6a54730ffebaa0fac226
+Output.14 = 3caf4baa5fab5bed4d50b0b4ace9c2ec8c21a1e952d81ebcf23a6cfbd177f53168a876f7e5b7d2c63cd7bba4a1b61b3ef59e1cf87b353ff64c7f798fb0c5d6e375fc1e8653f8d22be965abcc87f178e4023d1ef85baa278faa1eb205e4c05219222f543c5b9ac6a86b00071e34a7b2b9c6983f8ab6f187295f5095b801466a76
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 4797ee7407a9e2ad2dc2027982de58becccf92de219acdbe9ab54d00fa25657b
+Nonce.0 = c4f98bff2670537da6f0a61201580577
+PersonalisationString.0 = 689728cea28f5f8ada98914571b30e90252db47ef8c748451f11a25f7bdaa322
+EntropyPredictionResistanceA.0 = cc40b61b1b080fa21e7cbacd8c8efb7db19f74d1021c8428182e2293cad90686
+EntropyPredictionResistanceB.0 = 7490e43fc2e2893e0e93475f5e68eb28d5ab6d08fc689cce2f53a3298476852c
+Output.0 = 9a9e147f51ef54fbb3b537497ce9ae86fa367c603dee06aabff59cbf42bd79929bad5419874d4e28fa01202aded00bbaa94c02846caf055ac407f67060ba5de08c29867a9e55457bf1a355f4ade63d87f627d43eefd6867bcd936807752646f4a4dfd8937d46e9f814b7c22e3b5316b0c99289418b4ffa4f09f51089e887f960
+Entropy.1 = fada784660f2aff40531b252ff9d38e3b81042c43b41e37f94209b82f641e14a
+Nonce.1 = 4b92564db30d45797839045735fb49a7
+PersonalisationString.1 = 1d575f5e34e69a0a3e3f66f73d4ab8ca45efcd373e16ffc8d3aea3a454b18bfe
+EntropyPredictionResistanceA.1 = ed7f9614dbd230b25d918c8e733790ae7a972d30f1cb924686753c60b3f46c34
+EntropyPredictionResistanceB.1 = 54656c79029fab55b1150db948c0ee47b10f58f4ba569d8a6019447fa948f6d3
+Output.1 = 3d5fb162ed125f4f41e457d35fb7c8ac817134f7fc9618f4ac47872744d5e069d3f6d2bad2c9e3e3fd3a18fc6a4e91a8222adcf78e26d4f6bdc27246a869638fdbcf1ba51d04dba6880ab5c8a736f8a3c93cb322ec66bf4a74950e94636d5e692419977768eea2d91eacbc29969b89bc26b6f814c0d4b6b02bea5624380bd200
+Entropy.2 = 9ac012412d7223fcf8f07b5fd0f6b4bb93e6d79f63e793f79f112e6610eb35d3
+Nonce.2 = 07a6d84f7c8626bf9bf660c55e49fcbf
+PersonalisationString.2 = f2d70f819d5600aa24d2653307c727050aa56fac0f3d5db355270a32778adf02
+EntropyPredictionResistanceA.2 = fbef283c89f623cbad1ffe0c5b559454f5631f2c39db580d4cef5500319b70f4
+EntropyPredictionResistanceB.2 = 061765f7b26c9b7cb251bc4683f147d8082ca7b9eb989a5c46c20771aee7d552
+Output.2 = c71e034da1c925d7eaa1f13a74a9dc84f8a134000f1893d34fc7af9922e3c93f79c235e42767a0519e34974e0be7b98b147b36369bffd9ac8e471bcdbafe51248067b4e32bdd2c2c352f3952ccde5623eb0ddd0b268ae85a03d8d7f93327a76056ecc17ad42dbcb1493205e7954f084622323933559551856ca8163f3d1e0d4f
+Entropy.3 = 3844802e7f8642ae71b2bbb433694e09cd6151b2ce1112763874be307120b1dc
+Nonce.3 = d268523e5c525f8bb3d223a764254cb0
+PersonalisationString.3 = 6a4dd60ec312ea560c6f8f77ce01933c49b07fe0dca3032fc09f9ef0148629ae
+EntropyPredictionResistanceA.3 = da9ebd22bc026c7813ed9cffd356b9aa070e44ea73206396477b6d5c4a7bf3aa
+EntropyPredictionResistanceB.3 = 6e93a04674b12298c21e3dffb974701d8faa79004d7742ce6518cbfb77aea74e
+Output.3 = 782dd1aa218850c4a9a1d4b7dcc0e59f7bd347551d93399679624e9acffe340de11dac1ec410a9642bb791b53c6ee8d4cd2a0fe05a78af8941b838629ef636b7b391d5fe1f298dd8f9064f6ad7c97e5340f9322cad1c384676b4f41f005769af6005836634d868b0ffc87bf9929f31c3b2ee540180a235a2c9b410bc928183e4
+Entropy.4 = 36308416cdc28687dd6d4ba8a595492263a837b2e730d4320d1dc4bbe5214a56
+Nonce.4 = 7d9811b7a59763058583e7c21fd15e60
+PersonalisationString.4 = 362da89d41762649964ec0cf718575b1564541d5bd9693a504d59968b9d3b98d
+EntropyPredictionResistanceA.4 = fdf99342af83da0c54fab313bcf5e1bd6343e8c1edef0ea7b3ec44ca0eebeb2e
+EntropyPredictionResistanceB.4 = 46dc5a702da0242af653473ab43c3a56daf930bb615e73ef3316eadc31f5c360
+Output.4 = 7c82513a46d5e636908dfc5fac7cba68bb36838d380bc801bcd38956dc536f9f1115a8d6fb238f1fe7c1c3309916454bc238b8717f27d39aa88938cc53693e5a41b88da0d436b943a811a6908dd1b3378ce6165b6455811f6986daeec881903f1f9d859fddac762ded9493be40b747e544de73a9b985123ee06c01c006bb5752
+Entropy.5 = 9dc28a47abea23fc4dfe2f5680cd6e5a9c1028a6d2a760f1bea5818e9fdcfc2f
+Nonce.5 = 42bf567a6c5b388b5c811030d667cf60
+PersonalisationString.5 = a8041dc791415f32894dd1ca53ba67011d3ae5539c5fd6f54120e256b1df7339
+EntropyPredictionResistanceA.5 = 9f497da0d00440ede657394bad74b73430268b7b7ad3662f7117dbaf47723ede
+EntropyPredictionResistanceB.5 = 8c576c4a659b48586b854f7faf6de82cd0458133e5c26589840df2959f22cbd0
+Output.5 = 60c6a766dc7e8351b2b78d13aba0871523148cca059760c73384263b54c22af6cf0be78fbf3761fafd4f3f4b7d626a356d5ac956febd8a5615c9116b65f1e9816eecdbb747703e5bad19e2af96400cffc90ce837066135f90041f0dd44280088a62ba4714e46045918b0c0fc2048dfe50963b4ebbca01d147fd9e3ad38f56f4a
+Entropy.6 = ca33f957dc25699f18252abc43467ba8ed9e0e5c1debbce70b759a3275045f79
+Nonce.6 = 0309d4104a8d05325efa13fe8bedab80
+PersonalisationString.6 = aa20da01432cbd63f6f2e615ba95abcaff8a9f52860c0432e6e40cf63da36b8e
+EntropyPredictionResistanceA.6 = 93272ed1ed4ab9810958b19a76187ed5264f353b2954da13b1ff8fb5aa938735
+EntropyPredictionResistanceB.6 = a955586e77ce81d40360ab96c9718346c92d4af8bce8168ecdc73c9bcd74b5cb
+Output.6 = 395c7e075d1ad7998e29e19ef9f1e3fe5c7b402f3ce8ee363bc99683b1e8343627f672cf665e12cf8b5ead033ec1a740d6bc59efd8186ca994ce7a8f4798bf648e359a70bf33c56ac291f03b52fbadd6ec488dbb07da9fb1514cfb70362064aef683ca89280ce0851e4e49e20bba61362d31a3a4c3cc821c84a71cb334c0acf4
+Entropy.7 = bd1d4af1b38b8b6d64a7dfd26de44122bf51d3d3b5cde11d2c9509f43b7a707d
+Nonce.7 = b4edd5491e3513ccd6d727e5a7dd694f
+PersonalisationString.7 = 0708f5a2d8aa90b79d7fbeefdecc2e5792e837f5625bcdb18101458e66d8a16a
+EntropyPredictionResistanceA.7 = a0f32e7626ee986e31653658812a9baea92f700701d98a96b894120301b8c2a5
+EntropyPredictionResistanceB.7 = b33234bde026a3e690cbb6e554b05974d93ff6e479d2d74deb90a9636e01581e
+Output.7 = 9ccd5a0fb723bcab1f127f9ddf0edf33cd04190b5df0346b58d672f75958301165bfa5094ee2f8dfd813d2a2696e700dbf417ebec5b30feaae334c3407b78433a71c974bf1dc755532083034ddb29481c150bded3d0d07d815c6406936c602fad3b2d8fa3f6570adafea6042829cf00f87339b494fc3e240b75817a34f974967
+Entropy.8 = 12a0653df1e269e8daaf7a2c811973252e0b88b1deb4a3b0c8517df67eaf9298
+Nonce.8 = c9085ddc00cd5746014722367a095784
+PersonalisationString.8 = 9902e5395f7d96cdac913714ad9a5fc022b30b29a5ae1d2bdc28e5b5e9c5c92d
+EntropyPredictionResistanceA.8 = 71e71023c101e19344837651f7d1d4a0a173ff5d35a394c3edfb628d1155ca4c
+EntropyPredictionResistanceB.8 = 2046bb52e62a9dc2c562d6043dc84ca18cf1b5256de715e973229db150b669e7
+Output.8 = 6e5361c9c5f70a5915fb0721af3f1dd7aa90527bd38249874f580200e8e3b7d4f8696b257526b9b6309664d73caeb2527d0c8e2764f1a363523ad8de733f45990d43fc3df5e7963185f8288d734013b1785cbfd9f9ecd60ee5d860985ddd2fa3aebfcdd89c107b50561cb453f2986439cf899e14911fae3d07e0dc665cb56582
+Entropy.9 = 63cf1b06e01ca6378f4124e0bd65f803add5425098a1ee0835b944edcaf4b96b
+Nonce.9 = d2aa677d376e7030c7301a22058c150a
+PersonalisationString.9 = 9486ec594fd4b734b419176ebf21e952b75f29a1b485fd0656a9a9c052c9dddf
+EntropyPredictionResistanceA.9 = 8d8818232a86ca0e00ab5762f65b996a685ab96b860fb9db206be06d80764398
+EntropyPredictionResistanceB.9 = 3a757a4a5f037117d69f7f312a1168e96feda10e62514f64c390d0ee7afe4bd2
+Output.9 = 817c161568ae428e62f4d0730485093bbfa606484572b906845ee156be044643e9211d02249030d65aceba2bcbf44a3ae5db58fcd5510d01de541a80e230a7bff6bad30f10e426123d65576ac863a09597a6eb5589c8b9b60b8965d707a333cafec1773e974bc1c6b34536527450b1b80aaa9a9a062e510799d866bc8a41f8e4
+Entropy.10 = f6afa8516de41b11fa33ca2ed5df5e8cb4180298ae7662912236004cbdfd0eb2
+Nonce.10 = 654c9692c45c3ec639d8cf834b17daef
+PersonalisationString.10 = b764dc06a11b2035b9cc125565732ebe4bb152feaa011ee164579985ffbfad98
+EntropyPredictionResistanceA.10 = e8c769b74c75ac80d747a3bc4287d92a55bde6b540d2dab51854702eb5260159
+EntropyPredictionResistanceB.10 = d335802cfb595a32d408a9b15fdcf9e2924050468f2b9ca0db95fc3d6b9cd811
+Output.10 = 861da3eee0ffceb1ca7777128eecccd76aa99b4f3411f10de61aa2fe01ae607a4ab3170b0626ad7485d9eef67daac66c226f0a3950bcb5fc8fb663afc7b2f5c7dc2f6c59771ccbfc23b6cb2d930c9c8d574653610fea901aa49df654ce0c7e6746017b7a456901ba786cd72417bb2ea9272cbbebd5e703ad165b56e53447a131
+Entropy.11 = eda70bcb9f68e3ddd9af6656d859cd4e4933573d53140b323cb8ba757e4cfb3f
+Nonce.11 = 95c4df86e36fe0723e04417fc0ae9647
+PersonalisationString.11 = f072d309cba55ea0f0bc3c91ae3357620295b3bd3c132a356a792434ccc9130d
+EntropyPredictionResistanceA.11 = 782abaf20f992dbc59f69ba2a4ed35dc62130d8d3d6e9ab421034e51fe7f94cb
+EntropyPredictionResistanceB.11 = 5cbf3249fcf9827b56f2941f94120c2a3c934ba324b71f7c0922e305f0dbfcc4
+Output.11 = caf735c720001be615eae311b8798ddc7e91febb788fe986138142fed71ea064edccbec0693d38f999ba2f62ea87e8c3c5a2ba228ae36ffd2c2152e44572de49226ed20f05e395fdde701097f65134b974bd70e715f0c8f467fba5b977ce3feb63459186291441dbe5d6e3fa5f7555817a872fb66253e29b541ff99ec5a2b550
+Entropy.12 = ed12199b7dc956674b9957e627898bea6a9c1490df2d87f817537b94106a35ef
+Nonce.12 = a610b377cdd2281dd31a3bb2021eab27
+PersonalisationString.12 = b3db83360a8fc0fd44180428db1f799787497b33712de8bcb250f32128524c92
+EntropyPredictionResistanceA.12 = 01b2094ef054d874abaff96df0e8b26d829724a7257eefc0a8d873b847edc810
+EntropyPredictionResistanceB.12 = 33574c6cc9a9365958b02cba3bbbc8b577d04f0c009a732b81a0f65dbe19e3a1
+Output.12 = be1ceeaee0c69b8e1d1d4bbc49ca32f875b8807179463608d14e541a35ccbcfd68049e06721cff88de8a2a3f4181afd65b41a4415e0b4faec214d18e9c85c2a611c1a21a857d7b69c697d81e71c8e6c25e8677bc0c527a73887faa68892d894156ae6106794d386f6ecc9ca6ec93e38460c73d6b92c601be16dcb637d9286c0f
+Entropy.13 = cbb700f4be3846fb039c2eb79909d057d9317876d3b15cfe9048fe9d5d8cd5f4
+Nonce.13 = 265a40d0e94fb7f41283122af760366d
+PersonalisationString.13 = afca749c5a0fcc32afd8bb24f36157c7ab4fa06720fa70a7a9b7612991c47e7c
+EntropyPredictionResistanceA.13 = e3f78a93002bad8757e8e50f7a02b536469a5ba385168a4f66e265f74f2a38d2
+EntropyPredictionResistanceB.13 = 6aae9cc62ff3ce086a84e1aa4d4f76bdecb333e18043d764debf36ec41e7b306
+Output.13 = b8aad071741ec744d3252c08bb6bb720ebff8c8119c3f4be7890a7f079bdb7adc64677d206a0f6a8a4bfe72fe86aad11b6c70c96760895e53878afe52186c804f587306042b33620141c91906651c937f6a85bac54a5e6ddaf05f35de1d200353449a886aefa9193427dca975a008811e6b69f7b9526c2593e60086666e4ba0f
+Entropy.14 = 76e060b1a348c940eff43a3df856ad0c39cdb714034ccb03a3a520c3ccfa8231
+Nonce.14 = 0155a24d5e0442d2a9b47cbb5ae39fe9
+PersonalisationString.14 = c9a0de3eff70f49270ba7cb9ea7f272240d0216328e6e26db4d1b61300a578d1
+EntropyPredictionResistanceA.14 = c689be45ecddc94daaf823c6ddd6491b028ace5c25c407b5677addc39f2606df
+EntropyPredictionResistanceB.14 = 2f81e665f02331531ca37635b8664ba5641b8a200031677aba00253f8f1fe035
+Output.14 = 9bfdeef565b0979be0f88e3b9e283433bd1fa2333662445302aa84332aa601a61a5b3d449eb5fe33db385254571eedff49b8d2f49ade41c12133263d447e7edf49998f5c05582504775f5b18bc7a0c075c6bfa4596178d95a019402937712afe69f3ad534fd44259312c63f1970b3d8bd404e758c9e884b19330350020896b37
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 6414d14b6b08f5afbdadc32dc3b581054fc0deeb8605d41d193889969deee934
+Nonce.0 = 083ddd03ba24ee9827fa8c609dcce483
+PersonalisationString.0 = 72607fced3d4f1e4291fce57fcc4a565e360dad35d3c881313e231ebf077eccd
+AdditionalInputA.0 = 106170f7d1184ce7afa3e2f4331e65fcfb3b22e97ed3c41e2a6553f551d4891f
+EntropyPredictionResistanceA.0 = 332e544a10ee3920803fcc2a203f9140b70da34ebe765bda39df3fbe57563ff2
+AdditionalInputB.0 = 8fc8c58c77b95fca771abbc53aa4ad2a70c0439c897d7ea4a0e80fca070fdbbd
+EntropyPredictionResistanceB.0 = dba5b9b6b0b2d0810ec4ffc0c22aa9ee58d2a705874623b384f2a6a924b8c897
+Output.0 = 4e854158dca40033e874a9194e230e232641ae16d0f641f5666cae81fae61e49360083a03139225dac8a705eed00b9a6226c23c67a501c14f6ded5b0141cbc827cb5b802d1e88150ed9a1bf3d4beba683ee7742c6c0842f8686f6e6f2b89f4619a447cd006a376d646b44fdcfb178ed0f0f366f7653516a79d72ffe3e2227f9e
+Entropy.1 = b16d33c003c75360f867ad46514c7aaa77cf507d9ddf6466f7f6099ecfad0329
+Nonce.1 = a350a8e707cad0d8100f6d6b0f51d5eb
+PersonalisationString.1 = 3af67fbe4cf2eb8937e9fec9ba4f01d6714bab39082eae863d06dfd05494a849
+AdditionalInputA.1 = 0c491da488abff5e9231b8466c6af3130a748d269b545b99de63b47c3f45cfcc
+EntropyPredictionResistanceA.1 = c85df8683555da7128eda31ad9b50eb873dd6c811a3a780beba02054aa2f468b
+AdditionalInputB.1 = c4cb3da2809b3f228c12ccd58ce8e66ad27e5e5bedd29d5ce1bf4adb434cb92c
+EntropyPredictionResistanceB.1 = ec82979358cd69d05dbb0d3bd59a06ced3011d180a5d8815cebec1f8487177fa
+Output.1 = c0fc7425524ae1015f42855d9b6c177cb62e88f958bd222d6905824dd3fc55abd2d946e770444db20d450d1777ee66647979ef5ad801fa39de9ff3090fd96bc881729ffd1864d5cc5083dfaf0a2e592b461aa401ad7c368fe7a52f6ed0b6bf383cb43f02099f588a8acebb0414700ef20937036317d6f8e3947f031e37bfb78e
+Entropy.2 = ebb08c29731cb4f815c3409e3764938cdf13ed93d4da976630692b10e724949a
+Nonce.2 = 6b17c3bb56fc20d807ab58e185076c4a
+PersonalisationString.2 = ea90b37cd0aedda586953099c01f0460d3355393b9099befb717d5b088d2705a
+AdditionalInputA.2 = e515198f7295330256accae92fc577cfce3a0aa3c9572e3c767370db9f2ae13c
+EntropyPredictionResistanceA.2 = 229417e99fc9061576724c745d28913d9dee282e293aae89f00163389881f07d
+AdditionalInputB.2 = 972095a2cc836cfcf513a062421bf089882fd7f674798f910fb5e7ad99d7e742
+EntropyPredictionResistanceB.2 = 128cf88344af321cdb0d034b4176f2a4e9b2a43e83f2d88e800686e5057936fc
+Output.2 = 795541cb8bf765cfca25c74260dcea895d64429e03634dd2917204579093d30343a23822969aaf6855c22214473b7f9e45175ad0c52a66ed9d6d3aaec24c1556605c9e8348801655c5ef0769db1518d83189fec73543eefa27421846ee6faeca287a3f5adc1506c77e88608e37002d33d5c9bc526dd5ec566708bfe619cfbd39
+Entropy.3 = 59e8502a8467780711dc3cd9070395ff3d345fc633f0fab0231c95970f1cf3e5
+Nonce.3 = 16955fe354b13eb5c52113b3358da51f
+PersonalisationString.3 = 7b221d2b7309a4eb8758279a4c76fded50a7f1cabcfa81b912545eb146fe7835
+AdditionalInputA.3 = 3a20671080c9e942ec237e786fd7fc2381eadd2d059bde2d074f87a7f93cbdc5
+EntropyPredictionResistanceA.3 = d7c8decb6d79d8a36756af75c9415b84565856a33073053d4a29aafc93c0112f
+AdditionalInputB.3 = c5744720ffcab3f9b627e89396efa9c976e13f9a8c69f120736926fa2b3f4a9f
+EntropyPredictionResistanceB.3 = 1afdad9e1b8c4347772e5c4df0842dcb7511ae443bd25dbb381fba5e10bbbb27
+Output.3 = 1448a88b64a8e99ba029d26a88596ca1bb3b69a30228d19f603f67089206f128f288b9d3ad37883d0d15712e17c3599194a78c236ddb61055b58d35a1e9124672063f252c8e28b05e2eead7f3caef850fdd404628e457fd57031f79bdab70b92776cea9144d4abfb6551eb6dd1e741a398d101239adbbdba77d69c97ce72fb5d
+Entropy.4 = bf9eb14a4c793453ef8b76c5083ae874a1921cd84172dbe6bf3c59a9dfa48340
+Nonce.4 = 0dc09e023842b36e140b8bcacc0e73a3
+PersonalisationString.4 = 94f526820df675d10270ae1ac12859b1d9160d7d6c85b2db0b43bc2d4e911084
+AdditionalInputA.4 = fdee8a1926a1f3a0fd182acb589638213fc3989b66d83197dbd737ddf54b5141
+EntropyPredictionResistanceA.4 = 3479be64e6ac6f65bd236b498bb90aae9cbc704f1527ccd043d6f4404a03a8b6
+AdditionalInputB.4 = 9f3b731ba64d9360e400578c53e7686c5a57e4197ff08b50e4e75310916dbc9e
+EntropyPredictionResistanceB.4 = 357c75e216c7e4495c21ad4cd048f8b3741fae6c41842df598f3d5ebd72fe2d8
+Output.4 = 8ee938cc84ed67c34ce19d48c7f8e8c1b438d0d60cf23894c27a9a8a9986dd2edce19c6da568c8818dd91a466a077c65351077563fe33002718be97f70723ff6561cd414fd324636e3bd70c8495aeb1abf67b3c9edb045f755d1ef081882db0045a5e8f4a91f2c22845f913d61515d86455d93759efd1b781f3b7c30a26d4e16
+Entropy.5 = 89766d907f91c64b1f41fa220bef65ffa6151c6350bb2e70b746ea567de54a33
+Nonce.5 = 2c4f0a66027192b6c32335a764b8ad48
+PersonalisationString.5 = 6b9de5f50910a0d63f03fd3e2cfcd7e1f9bd808b453f246bb1519238f17f8f6b
+AdditionalInputA.5 = 80a01518cc94ce8fabfbbcb52c1214b00d71884abb86a4242b00fca2317204f7
+EntropyPredictionResistanceA.5 = 1404fb9781afefb60c3725313bef9f0c71d45958bdf8b293a4b78926d749152b
+AdditionalInputB.5 = a071f7f5dea8a0a7da434a20e4efe390713d5850264ea63701b8fac064260566
+EntropyPredictionResistanceB.5 = 958413204d2e15270432bd1a1b2f2fa2ee303cf5a2949e842519b7052e1a3c69
+Output.5 = 9cf9cee6ded901fd317cc84735481b054c4be342b8d95b231a75ae8186e4523fe1ee7f7e6b3d4f0cf64daea1b0b9a1c50ededb2a9f0aaec8c936ad5d7ca83dec1ab98002844f090ccd2d8f0bd8523a88d8e5453c18a185beca6755463524ecb84c64ba39d261585ac76b57502d87aa9c97a43809dee27b25399030b671a927be
+Entropy.6 = 58e5e8f595197d9e06991d6edfcddb36f8ebe7f15c0b32ba5ed8e2ead363ffcb
+Nonce.6 = f502532709cd42576bc0e80b6e8aa135
+PersonalisationString.6 = bee2fa025c8cbdca316083a1eddd2051cd62ed28fe5b2098ae84f19a2f2622ee
+AdditionalInputA.6 = bbabccfabadd8dee91a24a901eaf3a52e9430fddfb2012a198664ee599c00d86
+EntropyPredictionResistanceA.6 = e2e52d020553ee47c0a75673c4267b675278e37326b74a2b79838f20b3de256d
+AdditionalInputB.6 = 294732e0f6217cb68f6f2bd6cc98b3e3f9fb0344fb372a008be9ed2378536aae
+EntropyPredictionResistanceB.6 = 2ae902dd0f40977f15341ebdca52a3b1dcf4a8466121100e00adbfae88009769
+Output.6 = 0f781ae7d48faf53dfb7b2638dd04773935408d04a6852d573edef4b7ca9daf2d55c79b11f827a776f50368b92665eeb295f397715995cf3a898b32f0e54de2dd3f8beed4abc9e73c846243e5eb69bc6fd4a03a5ef72b0b4ed3d205a7a937d2c9840d7d8549ac44666c663a31995990ec2deb9a5787b976b8d9fe4cb83becdf5
+Entropy.7 = 12f320e71eceadb21adfc2a771cef0fed214eff5dd0da47fd123241d75a0f947
+Nonce.7 = 114e0c2a7a793396191f4dccec375af4
+PersonalisationString.7 = 6caef1a1160820fbc4663ba5ca3cfc445a36a394d2cda7b12538ea645efd5a51
+AdditionalInputA.7 = d46bde2464fe17c23e5b2b773fdf3af55dc9a40d31acabf8209fb274175f0e2e
+EntropyPredictionResistanceA.7 = 58a5ad56a7053759d2f04c12016425f504f578095e8f0c71f5ef54a1358027e4
+AdditionalInputB.7 = b9c19b3453ad97fb9e5025dc172b2e5a83bf7e74eae94780fe4b9d200b7d39dc
+EntropyPredictionResistanceB.7 = e34c2b598b492fc772c3d622e8a27a334eb8737a65d3d4f5bc09cfa458b16140
+Output.7 = da4599565ba12de1d1f20d945078b96a318d7c6ff57e4417a538a7faef3e1be637d8a6dbe219d4f9b16dc589cf5a7c600055091e59cf80f9c79f0ca8c02a82463747c3f64e57da70eda25493bf7f63949ac2706eb4e20d560b012014f953f7b226847e7c48ece9c05d6a5df5aba27edf92e81822d1bd73d41586d9284e202d27
+Entropy.8 = bcbd1047bfda7177c3fca0921194c5a04a3d050bb5865a1af412605c86b20bbf
+Nonce.8 = a1dbd4c6d9112e28f8bef88499749bfc
+PersonalisationString.8 = 6561c5a430d739f1054a9b2fec8603fdc0d7a82d6844297648da0a1d410b64a3
+AdditionalInputA.8 = 718b6e65b7c102391946a7db737675284ef7019e77ad2d7e91f8d7471fee3048
+EntropyPredictionResistanceA.8 = cd6a7ac8f258bf3c658b6a7b66ec08c154229abdc87f7c42b737d20038db5664
+AdditionalInputB.8 = 6c4eed47c9ce8b5cc0359d0a2c76fdfce0701d64a26420014c8cfdc69021804b
+EntropyPredictionResistanceB.8 = 53baae53f0790f33d9347ce6c5bc7a403f23cf283b69efd0b9215d420fdabd29
+Output.8 = 36227abaabc2f97e8ac67b63eb85dc992010d467c2f670c5de9e56411c47332aa31be3fa1ee0233f2f0ee0bd542e3112c8bf1ade774cba2488a3e249b348c497129f289c27176312aa46512684956e2128433812d4907a6ece95b4ec389d6f539a95b66428c401b5ff79cd839741b2a7fa450f541efcf9d55e40a67e2c2078ef
+Entropy.9 = eaf4228741d5137e994b0cd096c402678307bac938190ac266892378146663f4
+Nonce.9 = 51ea1902d46c2cebd2d42dc398f68129
+PersonalisationString.9 = 75a7fbb8a1d7a1e4f972a87e1e18f16af0f1cc8abfe295f528c9dec6ef7736fd
+AdditionalInputA.9 = 90f13073fcfebaa3e539e9ac5463de5e1cef4231702b4d9b60c5fef18de33ca8
+EntropyPredictionResistanceA.9 = 006b24cef90b1709e30644dfe27bfba198e21c26b54977063fe9482fb9b77bae
+AdditionalInputB.9 = aab6bd2248ab894233c72df94ef3e99eac3472f76d801eca26267d6210150c3e
+EntropyPredictionResistanceB.9 = 6a88a0933f4f9a1a7f1da0c1015727c3be248bc98a99dbff0596308d47f81cba
+Output.9 = 295a36a2b4a97a7e59a4975d86c97de2aaff92d836a1a37d5e5567040cb7b65a2275b0a976dc547f05eed96811f57effe58a959a526c5893608965efbdbc5f8f953295948d17466437a179b32d748fa6542533bb1aa1d6a3181f48d233e8a9fbcac78ccbb42d5f2e7cb60788a31476f3e7eee1f9877a577a8eda22136fff8960
+Entropy.10 = 2604e98245b970000facd20188ba7dda0de6d1cf12906a042046b87cfd81526d
+Nonce.10 = 0285c5a5f0fdb4163ae5308a63761326
+PersonalisationString.10 = ddce662d89eeeec8da94137b1f8983eec491c15f5fe38edbe32ab2db971c3dd7
+AdditionalInputA.10 = 6c0a6a3772ae208fb162b693f15ec0dd8b3fc0858ec839f83d2f9a4747beca69
+EntropyPredictionResistanceA.10 = 627f32d145a4d8fb68e4a754a5ade8327537b831f6a31786c0731206617ece89
+AdditionalInputB.10 = 2d3a2449124982b53b0d9b575d7ee46b23ec386fb8d3a4b011c1137d07aa93f9
+EntropyPredictionResistanceB.10 = 7c05187ed4535b3473323999ecb4a021573cf3c77536099ba9c7434129a37427
+Output.10 = 909f866f121c1657b1d65772114048ffb7a77e271012688484515ec28879ad11aecd9cb2e0239dfde41c9837a35eccf99eaa443ddbeb514c3580d484c7f2fbb0c680d2a62d04430bac9388c413f1ee1281260cd7760c89141d3c4dc670dd3681fc0f7b151503fd988504f65d977498c9742bf21a5821b1c10d5bb661cb4c9fe9
+Entropy.11 = 78172c428865d988997910782cd84f835b391ee7f74662fb5b35ff1c3180fa39
+Nonce.11 = ee3ebcb5ba83971f6c348dab977fe4c5
+PersonalisationString.11 = c80b7f06511030ad25278b2b15cfa978d279c58ec0ad3402d7a28ab1778e8c01
+AdditionalInputA.11 = 613e46dda9ba87976784ff0260b43f35f397930f5ead04376fb818304f6c959b
+EntropyPredictionResistanceA.11 = 4bbc5191271c5edbe361de0a5adba9abf56c2ac8891d2958f10face4065e8809
+AdditionalInputB.11 = fddd138c35aea8733fe8a54d67a633b0d61a26aa67b940767d8ab4b318b0c3ae
+EntropyPredictionResistanceB.11 = 204a97e7eb77286d725e1e6f0e4b9b9be8b36263f3cb2b86286876bc23942100
+Output.11 = b99586598716be9b87be785fccc725f79cbf847524bd37803df1dc40b9ef6e0e4f78e5dc944aef41150aa72944068ed70311059846c13db6e962118540417ac8ffac029dd10cb093493b5bbfc3d1ed73ab7de80b8eaef24aa8abf8c623a53e7b2acadc802ec96636084a60b0dca3f835ab0045db6e76fa06d2e849cb4db14b8c
+Entropy.12 = e74fca53dc29a114618f06d38068052cd74efbd67a01ab7355e875855d7aadd1
+Nonce.12 = 4eb5755848b83e246e1c0760d8cf52d1
+PersonalisationString.12 = fc17445544c000191417911d4905e91fa999c8b10cdeff03b2e1b3cd56abfb98
+AdditionalInputA.12 = 8a5bca08e61a13fcbfec02888a77ff164618baf953af860801c9ce7b3110a709
+EntropyPredictionResistanceA.12 = fc9bf1214f854abdb8fb2eca610f4bbb5bbff49e9af9692a5a6dbb427296f1d6
+AdditionalInputB.12 = 7349ecbbe4e6cf1eb622e95401084f827d4ff1874315bb8302c56147c61b8b51
+EntropyPredictionResistanceB.12 = bc214821f90c16f6599c20397a4e7fe5398f1652781908e76e94a1bc5a59ac2f
+Output.12 = 0ca4302f254993d7989c9a06aa1d01b38eb2ed31bf29e985b43006cd50c1b33cd6c9d71444df10a1af69919d23bb7a3d135639328681e0a2a29dc4a959c2679be41178df63feabc21367654c6790a9dbcf3edb98757a9ca873600603041b18e1ccb00f29a42dfeaac4fd11cf652a4f787c08a3943dd772ec68f5d663a30df323
+Entropy.13 = 22be1d0593b6668884656aa5e40b3eeaeafbba34c6ae7b9e812b158e182611d1
+Nonce.13 = 26de02a2ee511af6f75e3b2cb992b775
+PersonalisationString.13 = 19c6f287f33d268ea442be7a377b75dc46e93b1a2d235e80c6ca4d76dfa55ed0
+AdditionalInputA.13 = 3e6f94143f26ae18263be12f45dd527a9ee51d12117597f941e8a648ec719742
+EntropyPredictionResistanceA.13 = 4e33b8c05463c3882e990bfebe38df4d8a00180681f69c85e65ff39195d0c63f
+AdditionalInputB.13 = 27dfe97a94d95556aacb4e7d04e27f8b04a9a23d1f4ef3debbb03b797199879e
+EntropyPredictionResistanceB.13 = 5957d606170092b13a988d195a29481c69f002f52b5d0b6fdaeb37dfdb1bcea4
+Output.13 = 03d8bb6ee1ac6c24b5b7d4a9807998a46d4cdde19542beb29618d1f18bb8f99883eb37db1f2d720d485f558b864095b59d17f02b2c491ca46321105fd49c5d3259bbb88f8d2a7648d43299f0be246d5b324422d54bed92d9ff79a9f24581a15a31e0bab064d6de8bae69977089b6c74d54364d81f1ac98f237819b95f02b7e2b
+Entropy.14 = 973a254892ba55ba07765b1370501835cd7e7afeabef1c1349ff2f042a83781a
+Nonce.14 = f035efe47a608cf6db94a932bd7df0ff
+PersonalisationString.14 = c1a0b1c8eb0bf23bbcd81c135cac447747f84c963fcec83fc4b040d861c90037
+AdditionalInputA.14 = 1ba50f69e4393d49b0d4f3c7bff259b2040e4b5e21f67fccc3173eb715a55dc3
+EntropyPredictionResistanceA.14 = a607b9e9b77d35ee72ec5b17d4f78ebbb5dd57fc8aa3891279fc2b2b0cd52f92
+AdditionalInputB.14 = a63bd3ef8cfeca1e2552bc111786a992526802e51cd30f0e9e7b7a398a66a62d
+EntropyPredictionResistanceB.14 = defd0a8320a31b94998e74e0e5e40422e80735b281b9901e9fd1c8ecc50ff2b3
+Output.14 = ffc830d5029f42c1c9aa10d6d90d94abf3bc39269bf4fc4a4ed14435a985cb14da64d79ad4d8951e582b0b793836ef3380dff4d063682a4e8ac8796ca74e74d3933e5111bb92d219b72b28f4198b23446e422aaa7f33ade182801506aec4293fd69c3fc86cf39297867d16b98738740f1b7465043e0eaf7480d1c328ce2b4cfc
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 5fce780a368b6016d6ece48a97332304525bf9759d1b9d6b02d69f9bd8a5dec5
+Nonce.0 = 594c2eb01beee551081f2cae34f83a45
+EntropyPredictionResistanceA.0 = 76632ca6180fec205813b382ee08f2f529ed7eb7c4f0d50436bfc06baeb96c2b
+EntropyPredictionResistanceB.0 = 3c503957cae00d80b2306ce2a8804e5dc7fc86f2191f62f7111bc1efd0df3610
+Output.0 = 1875f983ff6bbca47a7f471306d640d173487d712c5f005813f8f80eb532e615eef600a7a47d0d4189b6c28c433590c0dc1df7991cb3e268d7b7112f47bd69a650ad952df8e742783e053bf2524b599da21f7c350927a4401c12b83200ae6ea34487820ae995a674260658356dc8ff032f484efa0c94d40e8c4e505a75c7db16
+Entropy.1 = 5f987108444f0930289b9f49fb9e7ab7f06189ba0909e902e17f51199a68ade1
+Nonce.1 = 17d5b2cd01b41019235d9458c9e261a0
+EntropyPredictionResistanceA.1 = 772b9bb2dd48f6f09b82afa2cb665c487c7ea225b73fa5b2535125b7e1eafd01
+EntropyPredictionResistanceB.1 = 68fe6f1c66680001a957d36f2e83299f9c95a0c4059452f3395588f6d89f11ab
+Output.1 = f3065be9c9923f1a35e3af15d9ac8879400d30c483d72803e65fb5b3dd4dec746a0decf182ceca3d7695bdb205ec919c8f975a4d160a0554a3875ba0d216abd9f41fb757a6a240995582b1b7d91246561f4b44648a7a0c5867bf1dd0330a31b9f3e96595509ec88173e9904d18ce3a232ee63450756fa728e47a51dd238fc80d
+Entropy.2 = de512e57ac13436b6153d1b7bc649a0531bcc5ad08c0d3db2d2f4779ae8fd77f
+Nonce.2 = ee1bd16ee43a4b957daf87b57f21446a
+EntropyPredictionResistanceA.2 = ddfa71003e17d48aa1a765d33e644d6444962ba8d07cd77be7ffdf52773e55b0
+EntropyPredictionResistanceB.2 = f0534bbbb0363a9dd93dd9f9ec219ad4d08809c6d1bb197d3722f8ec0cd26df9
+Output.2 = 35df076ee8dc9c9a18d2d184de31239161312a01c40e861f2f145c81667e7414d2c990eab0f672617f60192774c0eaeca39b860fe1b67a12bce4a2f87f6f90c497232e245eecf6ed57001ae86ab5394976708bdbb659eca14710762128767f47dd40a31797ac50335e7d2c46a660a0fd5621e9ee7af33279c82900868c359f8c
+Entropy.3 = 3c583c2f78e24b0add4580d9026453ae8cf34290842b6cd3ae7e661ecd656125
+Nonce.3 = ca8c85968d40b66e121f28b572159d40
+EntropyPredictionResistanceA.3 = acbc6c1b40ca8ef2a81cba796dbc752b991238649530fa7b8f9cccfc2b9655a7
+EntropyPredictionResistanceB.3 = 8e5ff8a5a772b479a99ddece371896378b2f775c8295aaca6aac4f205751ee28
+Output.3 = 43efd696c425a3478d5f000dc4558acb27a8591ba03518cfc108ba2c3720396c749fea2b6707e3ffba242528e121f50d47ae20d97b85222ebeb064898bf99252aaba607ee5489571df3d63dba435600d93a05dbddcacf17adc1af3a271921c6ca76c44825077917def0dee55fa44d476130d72929465ff8c3655856ea86a5b12
+Entropy.4 = 6a4fac51c61b23850fc395ee86bf9080e7919a2b24feb42bafd80ac551de1908
+Nonce.4 = c925876183a99dd990bb5b1b518ad5aa
+EntropyPredictionResistanceA.4 = 0c0ee07cf52f42c8724a9aa6f4175c9516e266d706f884e90ab69ec5e0482fb9
+EntropyPredictionResistanceB.4 = 2b0cc50ec483bbc044fc905fcc56ea238fa7b59914b07a844911e602365749de
+Output.4 = ddd2b24961c4525482451fe78577c649d882c3191905e88c3c7a8d038fde7d5c7451a34516674046a523416994964630c3dfdf31826ba5c9c841f323b59806c84ce18e144ca5d91a9280b02e20ea6ffa909183ff3d2c4930556ee24229275f4fb2fb87ae69025c15b0ac5e4f855183d1e184bf5cd329672ddebda7329523ce3a
+Entropy.5 = 45b4e001c9632ca1bd01ca91cc52e7e1605681be58f7e849055f79626891ccce
+Nonce.5 = 4edc94e8e0a704be6e96687502876a29
+EntropyPredictionResistanceA.5 = 5cf03c9487574a564cc6515d70813408e0fd5a5ae2dfdcafd641a6d58492856b
+EntropyPredictionResistanceB.5 = 181da15b7635169ddd60d8dd7fce70c98149f9fabce683d1adfa8af8828b55b1
+Output.5 = 854b0862469429a8cb2436652296142698cdc20a8266064e42acb3fa621a4f9a775cf25dfd19e821f8497301e9d29605dd89aa91511b30725765ef8aba4f3e25b6ad432dc456ee7abf68b7eb4fd0f4b7dabb3cd459085352acef09a45d84e2de51b99fdbfb3b3ddf8d68d66202479be23e6c9a2337d8f09fc082c0feb5d5e2a2
+Entropy.6 = a410d0b5fe9ff66dffcba1d9c4bc1eb9174d7b57e85270b1d9d4ec18a699683d
+Nonce.6 = 8ac3e9e507cc57659ba1c05ae231e188
+EntropyPredictionResistanceA.6 = b3d87260a68f5d2550c34d86f01925eabb81b465ef67e64a1305dbbb95255ced
+EntropyPredictionResistanceB.6 = 0c52ee5980e301e57bc52cd224946d85cd05ea96ddb0c235d3f7046dad8f438c
+Output.6 = 778a029138180a9508e1991a386f859c082a95712a0f2d62d96e22eb1bb9f99dfc797bf190e0eeb602103af1323803ea9941240839f14ae73907607a7e7d6d09ca523147a1892bd4c41c6d802e9940460c3192dde3357133d1763d81bd92d565faaadebb3166a23b943162ecb09218cf368b8a499e500b3c911369a462a964d6
+Entropy.7 = 69cadc5ca502f0cd00689967db78da977fc4c8ab54c7684566e8811bdb91264a
+Nonce.7 = 88ab67da05b38a151a382ac8fb97620b
+EntropyPredictionResistanceA.7 = c633961ef2764d0989edb8a6f781d90fa2f6df3ee7a2f0a1b24c449d8053bf0b
+EntropyPredictionResistanceB.7 = 8f656f34b8d5f505040f4f5aa69fa548c8b432d2e2d885b9ce6a4664b9a311bb
+Output.7 = 404472702a53bdfe7e693b642ea43562cf67d09cd2375e4c648321017eedfc69e3952632574b8920a2ef1be8d22f33e1d21e3bc6991c97a628a154d7384a5ebd926b6c0269dd62d71ea29b204125554a7747097206e5eb79adefb0422ef2e1e8d301dc123a21524e6fc782b4e8c1172a38ca4d6ba2cd46579aed56c58c08b2f9
+Entropy.8 = cbdd484fcb7a3d680f33d76057a7fc6b856dd0c892dbd5c9a5e1cad414a3a119
+Nonce.8 = 370dc52382bc8393998c2873d47dc504
+EntropyPredictionResistanceA.8 = 44bba9ba74a7c8964a4a1aa9e36041f91f14e5d4800d83046b2436aadefbc053
+EntropyPredictionResistanceB.8 = 89fbdf3af1cb0d233c028e3e10be482cd79a3cdb7511a203a54f1196f50b7435
+Output.8 = 060bbcde663b9affb75bb4809cd15a7073fdeb832d154b7b4c65dbc75e97dfe99050f49132b1b9e5225514a8c4e93b5428b4f79907d3513a2128834207b44753903309f19f4d7b7254815775c6c2e4fd0a5231c9ee0e5bfb93f97f61641b377b5a4443ffa4cd62647778a77e094ed75d7260ff21a2058ca4f485c35e32a541f7
+Entropy.9 = 71daa982036360e7ee02e7ef22f984d790c4ea99cab9d8a4e19686abea576d35
+Nonce.9 = 46c6d1d0eff516e736ee2f5baa5e2cf3
+EntropyPredictionResistanceA.9 = 48fcb557c33bcf01ce023a636d494e09a10d0a268b2085459700dcedc036d167
+EntropyPredictionResistanceB.9 = a209e49f0f1fdf5365225f5b9a651746d66c80a2c0e7c8f950475c4d00740fc8
+Output.9 = 9d0b7df2a3974b3f4a05e4c56cf0e9a8210ea74f9cbacd2174702b3eea151626b30f91107e24ee430e19676425efff25d467f1cde79b9def4801c0ca5815f858e20a51383a326f86286bcf40259be6700fdf6d6d425fbb798e4ce4b89ac06e8cbd199e5aabc1fb137c121a9a11e25a12bbecc23af1508d2b85318e7807fd6db4
+Entropy.10 = 201d3e3c328330419f4ddb436d0d0f2f751ad7e86da878da7156eed5fabab41a
+Nonce.10 = 9734dd394f4023961e98e0ce478e5927
+EntropyPredictionResistanceA.10 = c911ca9cf922c24e404aeb01a1d3c7c929fa78f3e1f9dffddf9c83a99fdca8d3
+EntropyPredictionResistanceB.10 = a46ff5d1fbc510ba0259538bcdec128e0bf0dcf320ab58d953f562d18bac4de8
+Output.10 = b81230262a74d671bec5a39402175f912d61f8ceac3f42769b2d996a59b08a81f77a62a124d2d7c9ab3791f0003bf880dd1035b9aa7d633d1b01b77a2f87dc21b918475bf83f4ba856085b5a3db34e5e14414ac9f280a2e2c3e66093f6f61f836eea258fdb5b9f74f6f82b61e0c133a0c325fc64fbbe1a5d4e96d5c443bf2f47
+Entropy.11 = f6863f8b25f4afdbb4a43d17dd1828210bda365e476da6652534ba271fc92c72
+Nonce.11 = 09993047c4c2e7b0e39e9d937835c14d
+EntropyPredictionResistanceA.11 = d7c5da55e61968d9bfdd5e9b3bf3a6239862e94e6d0ea9fd3503f5f4a4ff5ddf
+EntropyPredictionResistanceB.11 = 75b384ba283c06105a2929dce7a50dbccb49039af83cf6110cef790810a23e6d
+Output.11 = 2bbd4b44ac89cb671e94923cfbdebcc364c60b0e408cc2d92380b022a67a44b673e8d80b3a1155700ad21b6d8d5daea5313e0b6537b31315ce26cc01d6b4a0553d25f4251d5e0288db04e36e3dd52d1470dee1e612b5e42eeb851411f4b54fa20dcc0f0dc860807d3af0f76f26ab481081a994b05c485ffbccce11e9191d4e74
+Entropy.12 = b7b7218655aac0e1aa124c7a39c60b78d259a9fb47698cdf4a0b5dead3a9e9de
+Nonce.12 = 17901d7cce3dcb1be73d9b1dac930867
+EntropyPredictionResistanceA.12 = 6c6ac45f080d434f818cbaccf3a7c1bad951d5227313852e0325e6f1784d7dcf
+EntropyPredictionResistanceB.12 = bcbfde8c4b06ba4c286c5ad8d75b62b6b8157fccc8b6cc8ba282770195030afb
+Output.12 = a525c68beaa9b25fb332378c55cd3dd9a6f550bc1f1d07add7453f21ef888485789446a24b7f9c095f5bda755c977990a5acfd220ec88ad0b0bf1f5a312fcc740518209140c409fb7f6732d7a6a05717b0edd12029e4e24445b9840846c70e5293fe24219671760b1b3e850fb67d5208eded5ded70965243f317604f04dfee80
+Entropy.13 = 365dd996e4979952bc0b02516e72a521d117e43934ffd5ee73e19766a089e879
+Nonce.13 = c4a6e95ef91db7ba85a63133c635d495
+EntropyPredictionResistanceA.13 = 21a82dd750c9dddfaa305b8e0056336c9542bc55f5fa36fe4add1d7050cc026e
+EntropyPredictionResistanceB.13 = bcf959dc6644d4cfd033175ddaa07cc2ea2ddcdb6ecb75790eeb211f6a809208
+Output.13 = 79abde90c711096e4bedf3204da2366b9aa08821d5fca03c0ac9c399e9a12470f6266a3018cedf81d05b059e16e04fc9858542ca6ad79a8951f8247b3fb8206102bd3f9d7077a614fb325495847d3987ed6e04c032d29678b18b0ff11e43eb27026f6cb7c1cade42a0702b671ef16de65698ce89e11683b61f891b5e7347e245
+Entropy.14 = e4829b889ca894cdea20dfa46273c7a7d26db7651aa4aa692f23a349155ea994
+Nonce.14 = 5c8e6dbd6ed4b426aa2d85d6b893cb45
+EntropyPredictionResistanceA.14 = 29fa15be2259b4b164b3d232809cd7eeb3c5c24aec81c7252f5bebaec7363c7e
+EntropyPredictionResistanceB.14 = babf7813c6a24d4e68e09025a0d3b0242e9a98779ecdcaa64baf1ef82e8d4a77
+Output.14 = e6528c03849f1535b6f443e30817d3deccc7ea4699fc88ec9d6f3e28e72cc4b199afa5db7ba2da1ffd1a1ce7aa1a15be4892d0d98e27332f6d45ed63a2636073d12b8a99089ac5b55c93aecdb5e584e32ec75e44390016421822158d3596daaca561245bf1b8740d1f3c885be5149505f9591b0679f9b88df45741b767f423ec
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 43513301b2935e84e046101b2f9aaadd7730a4a23808267547fab2ae206b5bf4
+Nonce.0 = 3f01d56807bcccf9fdb6ba5b74f33356
+AdditionalInputA.0 = 81d177499643b2d43ffc0311b752e736b5794a2d747e53d295a4ae945af6b7c4
+EntropyPredictionResistanceA.0 = 3fad2176af35070c50d499cc9ff2f903fe594ff35a52c0beac916611b0737b23
+AdditionalInputB.0 = f298a860796a8f11a0e00b3d52bb3591f866747ced4a8af542fd7f9d105cabdc
+EntropyPredictionResistanceB.0 = 22fdac9fbccbbe6f53c10aa469d86edf2e155c903e5a14c5ccbc56ca94a519f5
+Output.0 = ee6ad6be51b4055aa24e106c8f152f54f6982738bf5e723a0c3e49360caceeb9029d361d954f461abf32f4cd842f984ad7f13a4a35e3c5afea0126b93a255905f2c44350b817e8c87e887d2017655b77b58f2f4e010c0ed2c7517aa47ab0e4ab3940a165e3ec604fabf970f07d4809c04a86a5acc0abe82c998b8cdac7c101f4
+Entropy.1 = 240749fa444b8f03d4f02b3454611d175174a0dd214e26dd066374242cffe74e
+Nonce.1 = 32b9e24fbbbc103a9c4562fa086bf4e7
+AdditionalInputA.1 = d0ccaed55f1d306abce1a2743426ee25273fb6f230b615cbe810d3b471b20a84
+EntropyPredictionResistanceA.1 = fc48b30386e22e81de29b25554c6c51405f2802ad456510e5cc51f6007847acc
+AdditionalInputB.1 = 5ddcfe76bbc04551038ca6324bb0531825855980c50f64df91fecdf076a089d8
+EntropyPredictionResistanceB.1 = 71ea526ec6b170dba6eeb4e9a7da89402a0a97a1d232b37f0a301cf769271593
+Output.1 = aaa962b305230cac14b8718384447dc393879cdcbbd91afe3072bb8cafe673c0e5303fad6ad362aed0577320b97cbeaccdd508357bc793b0741a8aa6bbe99667ae1d1b70521513a0f42bb2b19d588aa8753e2fcf5242977fa7a8439a6c1bbdd36fe2d779b03e4f5b9e46b2182cedebe3852e8dc9c1262fa363ad20d54bc6d9a8
+Entropy.2 = c15a0ba482774e3b0e3e636ed38dbc3b933e96c4071bbe99f1eba0008df9a456
+Nonce.2 = e90a7db3af24f77d4974a392265b4d4c
+AdditionalInputA.2 = 057f83264f742ed92e952c04a1d62955b2a0282ee5e034c57418b3736cc3f32d
+EntropyPredictionResistanceA.2 = 38fca2057ee49612f2b6d450c35b9f8ce7cdf151942d53aaeef6060a14612a23
+AdditionalInputB.2 = 1d2792fcdb6688f61bdb0fafbd7ae2d7f65dab9b1afa106d59449d24d7363bf6
+EntropyPredictionResistanceB.2 = b13511dd83ef8ff7c1070326171e1a14841217f113e2d8f5d7bb36df029b6ab6
+Output.2 = 966dbc2ab51af1b2b063c529b44625fc21879ccafc29889b1499d74854f55bee72049feba47acb39210607a51adcbd82f39a9798f565cecfe1cacad355361f6d08d8f34b45486abf8bb3c6192e5361228a53413092bec7284f37574c7935a343dd88a537ad782258f5efb093f8e3ea45656a6ee99764b7bd551138a1ed5efa57
+Entropy.3 = a8ec3b965a8051ab939e8a9fb84ddc6a3e836c287ccb0b409813ac854a89eb1c
+Nonce.3 = 5ecbcc75e2ede01c5c101cb196da8545
+AdditionalInputA.3 = ddfb26831a904ed636ea30adf45c0adb3e8cb1ee343b9a17705afa082c00bcf8
+EntropyPredictionResistanceA.3 = dfb8c4149e241544134a2e38d82ebad5b3f898dcdeab1c43d0c1b759ed20d15c
+AdditionalInputB.3 = 4c6ade9b018992ff119fb342c32d5e90c0b7e76bcad3aec8fecbaa13cbd81191
+EntropyPredictionResistanceB.3 = 91e4a09b41bbf7c4ee7c3fdb833c93af5a97ba733c6ad27925de1de6170b3444
+Output.3 = c82cf1e7edf239ce12efb5f0954f4cc4690464ad68deb86994d067c9a3ea045c5e5e9b7f0872ea21b9ffd4158b281705bc834336b712103d9dfd80d15135e928a212c7659e813db5e42327bea7414dccc42244f8912de8d73d2bfbd911455995cdf8a1bcbdcc51356f0d5abc2314ff2a365e68aa280080cc6b0b358050f1832b
+Entropy.4 = 6c8524263b8595c41d341d950041fced37238c7f91c7cd59c869459704fff9b1
+Nonce.4 = 6f2c3955e438388dc488cd6c3ce05fa4
+AdditionalInputA.4 = c2ca5f504a9e20ff186cba06d0d40ce1edc35c0bbecef7f05d5abdb895088a10
+EntropyPredictionResistanceA.4 = b71800af1d776337cefe89e3555cf8d5e5d22a724c630f1a295ce789063b0215
+AdditionalInputB.4 = 1b021e1d5a1ff4e70112473de9238cf548cbe2333a2bf2e420b30155f0704788
+EntropyPredictionResistanceB.4 = 83dd6d4af3423cdf31f762c4a00f860eaa10a73fd3f150db0738d9112ba4c73c
+Output.4 = be09c7b0239883316d160202d424419a63a44eb3c799d927fb48070614f86b64f7b3c3e33f6a5271a0a1a65e1c61c651654dba6e983db1e222af83b4dd53b87c391ab38785b3588d3a43f3c40dcef5f31846f8ccd3c248ff3d35d713b4da5522b2c0c9943aabdf6dcb701282de5142ad382eab06a754e22e6426119ec0d7c644
+Entropy.5 = 4c298dbb461fc7b5c9829f0c52b019ffddb80dd6f56957ed51ce09399ace21ed
+Nonce.5 = 1d350b9e19f69c42acd8725b6c676e2d
+AdditionalInputA.5 = 8220f87361861948b82e28357bfeb2f111ece0218aad659b7f15215f5135ee1c
+EntropyPredictionResistanceA.5 = 83384f5458d03db3c5f10ac16da5463f0fec2acb8f64c30216587033e9bfc8b6
+AdditionalInputB.5 = 9301b7c606dc623c4b9e60c45b7b3b59e32606bc5daf6e3fe89f82ced0571217
+EntropyPredictionResistanceB.5 = e3a93e331067c6f5b89da92515fef0ecf277934c2cd27315c3f8f69388217967
+Output.5 = 7f449a0c10f5ce87bd4e891c693558422dacf6e4b16fc6e9e9b65d6e1fea0fa97ab53577322810fadaaa6aa198c93704dc644cbdd0aa084baf2dc0dcd3a358681c907493643f9f0ca3bc6564e0e3caeace774209bc0d8d7c8347f4882564e66881cfdeb81bf4a14067a1726a3be807d25d362a3ca174112158d8c7156ab3aeaa
+Entropy.6 = ba04273057dd51de20af34492edab63dd562f61ab3fc0a6afbd30937fc607dae
+Nonce.6 = d31d00d103fcbbc02b91406533a536be
+AdditionalInputA.6 = 577e9467eaf3b5ea3c6cb18bc4a6e64824cf30f2f10f334ea7267202c60feda2
+EntropyPredictionResistanceA.6 = 32e9f9d3dbdd3e7d228bbf7d9d98b2705cbd2b6cb6aa3a06068bc8179929d964
+AdditionalInputB.6 = e4eebe27c68b6f8805a0efc395b10bb73b8cb66e6bc48783146fd759d683e3b4
+EntropyPredictionResistanceB.6 = 82a4ebc84238841d5ff23ae1318198afd96a91e31dc79dc0bebae3995b771f9a
+Output.6 = 0af308f69810947c4216c7acd0865de1acb9f66b92b90ce19c7b61b4e80b0c61049bb6f3cac7220258b9aa3fe13f904c434565d74498f53add262f1cace0fc634f9fcaa4dfc428800f49ed1de193cc517e12ec8106fcb799d8ac1e6cde1a360b29df41efc5ffb463050a02f4b5a0d7370b8a57b2b4fac38de4e8111700c9c9b1
+Entropy.7 = 36820d2154c149afe1a8c2d5f8785df2dd8f902c445decf675222f1e8fb6b8e2
+Nonce.7 = 2647eb39a12392dc95b8579ea8e6dc21
+AdditionalInputA.7 = 4c1449350457ef9801b220d53f6e867ab82130bd3cd345f43cc7b6ccc6dc8176
+EntropyPredictionResistanceA.7 = 86feccf15e8256d0d772d029bae7b37a4181e7dad32d8b8ed79f26db3d6fa865
+AdditionalInputB.7 = dd227e7737668c8f412656c6b57cdfed66a30564450169baafc40be5922ffc34
+EntropyPredictionResistanceB.7 = 65cada883d9721a25639c0f680d12773d8bac9d2df38bde9b3e58f093ec58074
+Output.7 = e9a1bfca24d176e46fc0a3602fb0a66c3596096e436896de90ac01f2e5b268de1d2c9df7fb9a712a7347d7badc2099c7a44469c129547e759facd419a46a53110eded7b181db9a8a3347a6ed1e436222c5b3471bba4b29dc280e4c635d7e47e399285ee278448a3fce32bddfd4958cb778835ddd55a41ea87c9e4d4f029b5592
+Entropy.8 = 2a5528c92450577d359374b04e36453c7d2d4d16af1aba06ec2d2eefed9bac48
+Nonce.8 = 846311caeb36729373ba01cd5031ce16
+AdditionalInputA.8 = efd27a8cfb281bb736148363e659f3d5fa33fb41bd4f55e28b5dbc0d3c01d839
+EntropyPredictionResistanceA.8 = f34ee5c248f969350734c6d8342e71488429ef3fbb92025ee001ebf22aa0939b
+AdditionalInputB.8 = ce2dde83a5458536201d65b600f7913cf2644f45a692c54555c45b7e5c993d86
+EntropyPredictionResistanceB.8 = ab029267615a05621ba011a3c6d7ff483294f270b6416ac4a737b5196b4631cf
+Output.8 = 72190c683164c918e31a67ee217d241f6db34610682b3f245390bd629315531847c3bdd1d7c6f3d57b0381b8e5d86e4127d703c870eef3a31c7ed136aba45278217667ac90f4b0435dc42b22f03040aad2993555196848ae413e851a68af87ab5598ee80f51e93c07e37f70c4b3d8cdd39c44ba6a81fe4ca3ccaaba010240c8b
+Entropy.9 = 6dc1fba8fa987e396bd187066bb8b186a0a3f729dc7169c9a66781688332f269
+Nonce.9 = a8a656f3623cad74677c1226078520c2
+AdditionalInputA.9 = 331c9d9b748db83a5bd5636238f7cf7ad7bcd5a684afb6adbd4ee859ff45b288
+EntropyPredictionResistanceA.9 = 70c7f2014bf8253aa076aaf1a5091663d89770cd5aabe09db8ce8786b02fe3b8
+AdditionalInputB.9 = 788487950f19de2c3fe6cad752889bda115405bfe01284b31fa451ad4b12e069
+EntropyPredictionResistanceB.9 = 3ebaa83052a1bb9b9ba6cac597345541374e4f42eb2163be141c77fd7f940a80
+Output.9 = d5e01987d8044d1cf89223c86208c004e563aaba2e250120d8589acfc949a4d9bc63ca51095a00e9d874297bac74e5fe00afb56a49ecc584ba63065961648fda718668f4e661405fcd9491916b872d004444a6be38bef1d1bcc3ccf68ba5c35fcd84a2dee114685407e54e9b37ea0f9c6b79f4efae96853bec2eb324edee2bd6
+Entropy.10 = cfe3a9340331e9d4a9b56eb5e07e725e1bd215baaea2e99d6df8465cd17c15d8
+Nonce.10 = 590ddce33d4259868f0f3d9f6cc0130a
+AdditionalInputA.10 = 3e131eb6df40d9b38d3a9f976d154d9e9c086d6746fe23440edc05ab090a11af
+EntropyPredictionResistanceA.10 = 4118e65341ce5be4fb39c4526259e135c8b35acda3a03766383c40391257fc38
+AdditionalInputB.10 = b21a4663e026df98b109d5f3494debd52dc40ff1fada2782749dbe50b437d102
+EntropyPredictionResistanceB.10 = a05d8bb10bb647cac81d5c62589cd42d820d7581e22ec5ca3a194136cc62f687
+Output.10 = 1510634ab7c4752c12bd252b01aff9d424c58fd41c668cf22229af1927eb3c4148d10b1f7a5ddb24dc1a7da3b94053ac8bef28033ef08d4762a6f0d7d44cf4757ba1c87bd3e72e4f42b7d7ac1dcd2f1a305c4ad37b7a87f61920365972471918d30e3a923d4e7aabf36a98f9fc8273c3424875f7be486744557a6c7c519eb395
+Entropy.11 = a2948ab5db3c9ee4e8687de776d942875d72b621cdf8f1050f840887cc7e528a
+Nonce.11 = 5196ec2557d8899f9abca3576fdf2e3f
+AdditionalInputA.11 = a23815ed84168be20f51baf8aba5ad7b20f58a8a4d225996f68ff24a4d2242ba
+EntropyPredictionResistanceA.11 = 3be38bb35681eb1db0ef4502503e0a22f298b1ab110873ccef848ef334e243b5
+AdditionalInputB.11 = 1fe3de6926486ca16a84ca33f636521f9e1cfea35b1b349c100a4343ef3de245
+EntropyPredictionResistanceB.11 = c0927c72add7b0d2017bd55dab2f26dfb3fe551d12b45e060e215b099e86d16d
+Output.11 = 41fa68d616b3246d0519e0745d4de31b129e2627909587abd2a9b0d3d78ca9e8b64406108f870309eaed80a0c36ac6ba807b9c2a2f207c08b718f2d850003190bb003cebe34a51ccbbafaf27d7dc83d3aa80bd25250ebfcc5026bcea225ab5cf5bffb6edd6c491091eba859572298e97faaa48b1c8d76ccdf0f15ed32663c964
+Entropy.12 = cdd939b3b86a2f9fb01867fa149b7b69c2471f085ea370fe3b50d85b318690ae
+Nonce.12 = 08087d0f4322780a88dd8210dcba8e3b
+AdditionalInputA.12 = 15c18f86791d4796c743c2c69b43b59a3109d5cc0e6705754c84a7b65309036b
+EntropyPredictionResistanceA.12 = 7fa258fb7b511a1329887a5910586cd2fe59701a98c2c0f4409ef6f2f6497fe8
+AdditionalInputB.12 = d751de1dd7f1799d628bbfaffb332485e9910e3f115bb7ad64f1c67dca45c225
+EntropyPredictionResistanceB.12 = 66decc82b51c0bcccf05a3eacd484b695c3643272bb459fe17296c8646ddf856
+Output.12 = 1f9d51422a8e52e7022a48c346b29e88eecad5c5e13e12fb1d473fe051c79949eff401c991912692c24f31508353e03a18a6cd94abd7c42ba630b43c5857056e548fcce3adc76c0eb4b0d139c9bdf59199f492830938d22fd1c5db1c9156d0f54702d6435609f0a0f13395c8f8b78205c555f6f60c9624785f17623868b85952
+Entropy.13 = eec62a65ace8aabd29ff549294c7442afe523b2aa326333822b20322ed21ea2f
+Nonce.13 = 1fa4866fe9b03d82c878f86c5bd4d876
+AdditionalInputA.13 = 0e751b5565599b2848db84dbadd2ec7bde4786709758ab5813141a200d1741ea
+EntropyPredictionResistanceA.13 = b890270719d27a41427262506f42e295ec664c8028ea746e273771730892e07d
+AdditionalInputB.13 = 0fdbe2ea5651bc4258e830d5ba3f9209990df2f5458049d37efdb051c5596586
+EntropyPredictionResistanceB.13 = 337dfc65079964735f179e49155591fd0d40e76a13291a6d792dd62e7c095577
+Output.13 = 75d329b96ff314c88789efb9dd868028a4a0162e5f029e7b707b03a1994e69f8ab936ad33b0ba8ea533ebf85704b9a8ea597e61d675dd2f44cd3e78615ca70fb06e0d10a19673f6c5e3c89d52e1f30b86900c7f46776e79b3fe07284b1226f1b0a0ff8f7d00cb8571915e85ff9fbe2cf7c41efc83d7fe6356356aae762ca44eb
+Entropy.14 = 6eeb6b515bdcaf36da8614f9c6fd30c0549ebcc1caa1c7ad2598211d31d91426
+Nonce.14 = d887651d355a8276e2955b4229a7ccbd
+AdditionalInputA.14 = 0b4f975828468549c04bf17cda89185080008b356ca619d9389d85e2b7294fe0
+EntropyPredictionResistanceA.14 = b13e153961d96ce27ee38b4a61b9f5d9417a7afcfa366abc712f1332c194fa22
+AdditionalInputB.14 = 711bf57411337724960392a9319e580c226abff909e28d4696fcf5f0e7bf5ae9
+EntropyPredictionResistanceB.14 = 9fac27583fbf9335c2a8d7f1edfb99b18ee5f8e58e537749fb674bcb46ef537a
+Output.14 = ab08f911c4c87135c3f9de33cda823f91a1a8cdfd10f59b81f77dd2158890634f7c5373bc40e158a7881f62a18b0b553d3f075fb96112a04e39ad6918fb2f139ae6fe11856e6a0f17a2e1c0cf88ac49563c08ba5c9c48ad6a7a99825148132ccf3a9a46b92597d0a971f33e43c5a3746c0d8564e19d1681173f24e22fa54521a
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 5e4a077be704e8f8f63f8c4162d3f8321da8bff1b972cd08015747c91e73e777
+Nonce.0 = 8325b3aa8a8aa1646b9f587d23700551
+PersonalisationString.0 = eada8b051eeca2b9e531e7f97fb80e6070c10acda6c6916e56175df75cea4860
+EntropyPredictionResistanceA.0 = 96506ce80ec7faab5a170cd9148964c771beab50ee61c58c95fbdb6d5b91e786
+EntropyPredictionResistanceB.0 = adc4dd5f8317d65aea1cc1f78738b610280e82c4d3bbdca5b912fdb00986a5a3
+Output.0 = 99cde7e39927d6eb01053c21cb170f34132b5e02cefebb6ac2a327f7902f5021a6e91b276529e6b4652f42f4539c7bfc1f2f7801e324be04e2fd10a6a1196da564b34492927af07353f87e1997e06478dcc6212cf71b4ebf38a1570cece530d6534e5ea75b0324de3058146d661d1c951515f643ce98c6e0cdb0efc7c94c07c0
+Entropy.1 = 44bfe70b9bcdd6a630874c562650d1630dd2b02c5d68147904d0e9e77d5b6472
+Nonce.1 = 05baf86363673946f3d50fccd117f64a
+PersonalisationString.1 = 143cb1fae0462a355ff949df705bb1721f6d462890fa99a0304bf4dd41c3c37b
+EntropyPredictionResistanceA.1 = 6d056236d76e1752421d1f3d4b51120f2f21ad9c568d7a57a566abaf813895e8
+EntropyPredictionResistanceB.1 = 2d9e7617be7a34043523333eb6ff46022c6dbac0ee863c08111e536e12ec86bf
+Output.1 = 81670f1f2d67d32fad624514c15e2c50853c212b70e03cd8a8988847c6386f137fffbb78bb7ce999ec0afd7ccb479faa07393fe6118df7cd4373c41961d6f77020fc7bd9bc687c2e3c373fdc252b18763b91936c1070063cf9a030e6a80ff2291cfe1e90a506fef1c4a013d951bf010b3a205f33ee93939a708570921f677e73
+Entropy.2 = 5f10d9748a7e7653ca8f7a787e384d95608c4f2b4f7eec88d3d171eb88325155
+Nonce.2 = f9d84b532f593f175525c9ba329a2a58
+PersonalisationString.2 = d0a22331ceb9433d58f1e1abae633d21fb7ef0e3a4985359c78c545e03bbe713
+EntropyPredictionResistanceA.2 = 00aa849c42c4853293b4b8786d6ef861b9e29fc2119ef1404ddbd4a33a76cbca
+EntropyPredictionResistanceB.2 = bf13ee4fc0376b57ce53146921572650833f6a94b8f74d2a4d546faeda02a478
+Output.2 = c2257f563ce529666e0a01d37cb5ad85958b5e5fe44740e3884a46c9e32a0dce1c96b86147db8ef070e93988bc8cdcf07c71c093beea3a86c41749749311ae35ba367ac1b9c08b8b5d8d062ca928e030aabd67105fe634d66eac129a6dd4eda16a93738a3e8ab77ae7fcabdfc8029eccf5d5d96bec55ac88afc5a592535a0d39
+Entropy.3 = 501125196257ef05382619be2359b652266a16d07690d56652f682b1afcebb54
+Nonce.3 = ae56b74cd641ea8450e93befe1f95740
+PersonalisationString.3 = 3a10070d4010d9bf1b47ac326cf90f23cab1d2cb13371d4d336144062fa76fa2
+EntropyPredictionResistanceA.3 = 4c4f99e8a44ade8b58810ab8fae21a34fec02210f478c1ae8387d16079e76e48
+EntropyPredictionResistanceB.3 = 873e89ba5d7ea1257e692666d40be8057be69220e3c4a4750abb0f30c2126cd0
+Output.3 = bc0aade08d1e095af8441c3c48d7ad70ec74bec202eb7a82b4a5d9f47f2f335815a5f0f55315e5a683ccec847175e3388672b04f502f35dc6112a3bebdaa1d6df156289e0b76e2bf7c45b45af0f822efe5a221bac1ae714a82d090dd66df1a2368af3986885dd5e3e5a3574cec40ed58e94421abbfe5e52bef35083567ff3378
+Entropy.4 = fe8f5daef48113ae138f06904a2e7314e5f1a59c5cebab5558c4b4a9093b85f6
+Nonce.4 = fa346a5e483ef6c16c9afd35d4ae1431
+PersonalisationString.4 = 229ea5be9522113dac56c01ae4050c38e8abdc67af76a62d74aa7ea03f526ba3
+EntropyPredictionResistanceA.4 = d06ab4ce7cf781f27bd761fd380006e11ca76678fb5ac0e562f280057f97f274
+EntropyPredictionResistanceB.4 = fbf20230b5c03b5050a469ca2782bbaed39cf92b5f127772336aba20603457d8
+Output.4 = 6dc6dcf889a232cc737d9d43e9932d412e7c497bb400c52f62bcf30f62df46057234eb9150c09680b591dd4fb5e98868b95ff6755683a7f1ee45fcf5c34148e693b781b3a58bb30ac5ca74a56c0734274d2a715902ed46cb2820cf38903161b1e13a64507263252126a13f6b9e82b4276b7f6aae271844ef50c5f78491642b1b
+Entropy.5 = dcb3907bd92f60290d8808bfba12d9f8a4e307cc7ad57e8c2e603ea57ada970e
+Nonce.5 = efb6327b0116c6d57c753ef4427f38f3
+PersonalisationString.5 = d9cd9f1ca53cf294c25464354d17cbd929114f534ec07b27d190c8831cbe3c11
+EntropyPredictionResistanceA.5 = 4baa9bd8d97bd51837ccfd688f52884829ca7b23c38b0f591da9e4c71ffb0b86
+EntropyPredictionResistanceB.5 = ad06b25fab46662de3884d8a1e922a19b7109f1b45bf4c716aa80908e80d86e5
+Output.5 = 6ae7cad5a7d8ac2c2b0ec98f57f09824582b704c5bd261ef8abccc02bebdda9d00e5fa646c61602df14411c67ee167cf71b6b3e00c3b0912527d00a9e83bf37ddb18fe5ccdfad53fa8c07e6eb67b53f7d80138d2669a3a86dac504bdd741dd36463c9a8993aad012e19d1d967cd57f4dd1846696e196a19402954ee5e75132d4
+Entropy.6 = 08a136a3c14c37c8e19e73cd0fa2249d78fe249ea24e8b4f4a618d30870b6a22
+Nonce.6 = be133de7f2a13333870a1968cf61867c
+PersonalisationString.6 = 67905c17e99e4cc39a482b33645f9a6aa140f370ebd97cd40c36878b53a32499
+EntropyPredictionResistanceA.6 = e17be55e96f56b683053453c188efc84e73b4dea59ab3f8e0dcf6b3dadc4122c
+EntropyPredictionResistanceB.6 = 2e5574a4de348d8803a570fd9bf26cd1f8d7f143ffef7b9e0599fb0dc8e03b67
+Output.6 = e8e9174d405cfe8a1412822406db5be20f38a8c120e2676eac12f6cdd8d6413b6bfe3b5cca6416f95a8b2af4843a192465cc1973a1a342d81e34c28c2be4e86ee09b99feafc4df42a0189548567fa6874a0483a8ae91c11eeba927b7ae5feb25b1aa675ae5f0de78a5e69aec7c142c9878c6dc62dd8d6b7fb685eb57fe31257e
+Entropy.7 = b13e5093390b77a3370bf3256e96e5c7a5ba47b795b5100777660c351976236f
+Nonce.7 = 19064548ce328aac68bac85cf71ad27b
+PersonalisationString.7 = f464408e1fb3941f84fe39d3cff61b8cfa48dfd5774b2e2c40ea35a8d8fe4621
+EntropyPredictionResistanceA.7 = a887613978806b02a556912a75b57d23af377087c93a40913c68dd0001288521
+EntropyPredictionResistanceB.7 = 956b0168fbf2c27f90881575456e936b3f5fbb68889b3989a19016b180723fd6
+Output.7 = 5d27d4bab1b8839785481e5fd4aa1fe0e7b2cc45014cb0717418e5d8137e1820ded7a05790ba38bfa383795552a2b74d52b340d7b3627ff8d2b9359354d51ab75be68c75bbde7ded23eea0284d7df8bfc9b42fc085bacd0fe6d669ec7ae29084d3c5a797c4438e2c3968187c5421a5f31f762fcc3d8606b4d3aea66ad63ca70c
+Entropy.8 = 6c5392ade9edd9e16b3d4d7ecd561268308b4703547390193c602d340c74cc63
+Nonce.8 = 53bf00d5b89646f88a72528e7161fc47
+PersonalisationString.8 = ab5b9d3e2aee4423295e153725acb726a1473dddfb2784d0bae15a8870fd3f16
+EntropyPredictionResistanceA.8 = da4556afa93ef143cdcd2a5592e633c9d61f49bcbd58761e1289ec5192db1d76
+EntropyPredictionResistanceB.8 = b0093fcc56d5c7478fe7c9609281052551eb7feca9a0528cfd690f8033629d25
+Output.8 = d0c69ae92135734f7e032566809dc8f161b156aba24be3281a2c2c2ae576d1401e20431a27f16e61978092641bc7c2d013afc09de6a395b54cf8c1df9f50eaaf9dbb32870ce255df02f22ee7514e59212ee77403b3602908cbe29b95842f88716b2498bec2453e73967aa7e9dac75f9884b0124349ab5bc3185065ba752944f5
+Entropy.9 = 760d66c6d70222dfee0728e3dc29476c2c581dfe1ebd4ba7dee8ba900963fa7d
+Nonce.9 = 20c4cc9b7a842035e0e68458111f1712
+PersonalisationString.9 = 02c0202dfeeccb4c4970cc59f74924a6bcaec7ee6c1531477d29347a18795f4d
+EntropyPredictionResistanceA.9 = 23188e1c9b1795c0f647a553ef06ad4113b2b2931474c131da0258f43003dc04
+EntropyPredictionResistanceB.9 = 4d8550454e03f10a513ba07627aa12c2fc9239936b6b90ba89242950ee243f7a
+Output.9 = 4cabe2cb42fbeee470d70dd600fa05d8e9115941499736a924cc23b9680574f3b70ff074a5d778a2058a706b1faff82648e534ad7e50d4284f12152f2d839542d0247b4fac7ef29c3b30932fe9f5517510dba41d3b3b9019f403004aaa9a5acf368aa51a33c89a8d5b71b0337e100a9c1f8f91affa40bed459e4879a68950ed9
+Entropy.10 = e1aa53598d4901646715a73fac2b272082651423827bd66e861c780859755159
+Nonce.10 = 8087e6ccc8c1a7d79b6628c41de69e47
+PersonalisationString.10 = ac17a4eb2dc0231857cbcb64b22a89450f282659385e8a2ca0ab97b0bf7f1bb2
+EntropyPredictionResistanceA.10 = 80773d5af5809bb141ae0b90d49f9938eba3ca8eaba9a7600a8056f46c06ecc1
+EntropyPredictionResistanceB.10 = 0bfd675349620680503877ac80e738a5990ad60d1dfa2f37ab62f143309e94a1
+Output.10 = 69ff89a5399af81b4590c5f648b399796e8e46a948caaa468f34d6dc4fc780dfcdb7fc56de523023e58e88ff452caaee0af731eb389ca7530cb442332f389f1fab97e171e5c981cf39c49979524d698269977fb05856b3f9ed328a0d08979bcb9aa7337c96cc04202df8eb1cf2c4139f51f4f5f9db7da6ff9a89010a3ee56668
+Entropy.11 = a5b3cc0304bb6e0d6f943ce675e65490b24efaf63b48f2f795b884f6b1f32c75
+Nonce.11 = a7264defe99b8ed5698f2991ce6ca762
+PersonalisationString.11 = 617ef33c4cf04572714ed3961d935a1bfecba8049a12d5e98634d606407222f0
+EntropyPredictionResistanceA.11 = 108db8cf26b00ead7483aaee0057e735565b3d717a6306cfe1e284d416ef3493
+EntropyPredictionResistanceB.11 = 0a1d16ea81a3bc8fd4c3f48c9abefddd85c78f2083748b4d773c1fd79cd5244f
+Output.11 = 0473248067d67429f63637e948f5d7bd48512725366f5845bb16a70335cb03d24665937ec419a813d974a52cbeb55c226dd5c279bd9ccf2a072584d94744bab1b8ef257c358dd04bc4c50e782f15ab99454e971ad1c6579928e315ec8b552477fc0ad700c2735d3bb5e7c2afa5ee24a9ae098de3ccb3bc40238f507b25aac2e1
+Entropy.12 = dec8313a73e5453ea6f568979df0ab3ad5f185dec25fdd06b8faa6e2f2403668
+Nonce.12 = facaf42f20dac67bf90e73a2316a7c47
+PersonalisationString.12 = c550d5dd6b746ebb9281153646ca0b5bd389e60f6d97e478133f6a6a62f7bda3
+EntropyPredictionResistanceA.12 = 1ea0c25b45ba28ce3ff6f35bfe70572bd54eb3c9a4ce32e584a5d90204b3dba9
+EntropyPredictionResistanceB.12 = c36c437b8adf1c246b8a870c4dad693b09f7d64c221c58eb3ee6a173265f9e21
+Output.12 = 0febb1c08864106b85084f1d5e7feaf3e0e966ec60ae8126b9c4538e05004b26352ae0cd40423e48fd456637a0224677d1d3f4e9ddc418129375a47ca685086dbbb16efe756923acca3637bd19828557d9f8d00cb2e6ad944d497040612fdf20dab4d113b9c5922f83b50596c98e7f084362c8a7cd84797bb0891973c9eb4020
+Entropy.13 = 9ae5ca55e9306b006239057e381cf0e0e6d4280a50b61a5000fadecc1a92b516
+Nonce.13 = 8872836ee301adeb3e998c0c9a7c5287
+PersonalisationString.13 = 00367b02cc7fb7527f76c8eeb91006812ca2cc49271c7e2fec0c28550eacf0b3
+EntropyPredictionResistanceA.13 = 67c46f314b8b4a8c82e575e7f28c5c10f83f961945d5a348b164b1a11b7d3464
+EntropyPredictionResistanceB.13 = ed6f8bf1cc051a06f93bbed28c91829076fddceb99002f4de3c2a05bd2c1b97a
+Output.13 = ca2899d5ee161e6db5772d8ff1bc4fdac04ceedc6912bb43ac6fa1fb6c745d61bc83b6c89b6b59350ce41185e31e7c07c3a89db76f31dfe9f46d26dbb5b89c7b2d311533b692dda698626fe54634822c7fedde25b134805e0a18ae692a3adf80792c040962a98507d34d351737d921944177b25a0d219eb38bfdca687ffc0ac3
+Entropy.14 = a4424fb6839a0f3765385801dc2c612f47f600c55b05f9a96bd9ee5db562c94d
+Nonce.14 = fcb0fcd9c58281e7019ba06fa8fb7972
+PersonalisationString.14 = 7400c461c7d387b3b8e1bcd14cf708edaaa7bb14e1da905c8d4e75274f8b2dd4
+EntropyPredictionResistanceA.14 = ed3bd1e78d7f3cadcf45170dcbb605913140f68bdf4e367079f106387330e36a
+EntropyPredictionResistanceB.14 = 214b7501096bf1d7605e9082a9238334ca15522cf2eed77bce6dd3872106dab3
+Output.14 = bdd8721d12e9cafb73070a13d70db1020e95cac5f93037716ae10045007f5ecb8ea90c529e9aa8b0f312a2f81a5086713509e7909bd7081d0c25a33971904e3b90b486c71e185c752311dfa309b53c8cccd9cde63868bced00af0113eeaa77395c717792373ea708973a2f084dfa050cfdd0e73a8c51cc25651cdf8b6b8b3a02
+
+RAND = HMAC-DRBG
+Digest = SHA-512/256
+PredictionResistance = 1
+GenerateBits = 1024
+Entropy.0 = 34a917002710c7072604103c510bd2476ab11f55d6b65d146d8ac74c831d1e0d
+Nonce.0 = 047c08896061db2764a74d2e907ca97c
+PersonalisationString.0 = ebad05f876d95e00e170b7f6fbb43ec56be7775a3bf0e5cffb210fd96f53bdd2
+AdditionalInputA.0 = a991643f6431386a9b59c15b4fd3dc08a9a859d4b172f2f1aa105a3fe1e3ddab
+EntropyPredictionResistanceA.0 = b8514fbc8fd274bfae236912502143a79d85df203a1894655e890a9b2f3acb1f
+AdditionalInputB.0 = 2685875ce3930f54e32286b4dd3c5695b2cb718bc7f72da59631b72aab9b5e58
+EntropyPredictionResistanceB.0 = 584eda3823010c634392509087fdc70f44e524acd5de66a2fa6af6dec3d65274
+Output.0 = dc225a7b3ed41ca8133a6ded902cc5abe51d419a0944e89101c0ea1016d012d0485695809591a2461c1ffee49aa4914c2d287f5604de064583ef17aaaaf451ad998605eaa961362cd1386a519f9ff0a566a9965926bbbdf64fcc7f4e508b16c68dd5c3e704859ee6600a56f0cbdbeb1ea9b7e86433722a17c62da99639fc6da1
+Entropy.1 = aa816124d7f7497da5e67aa45b624603e919ce5c705e6265a7a9713ba36faa34
+Nonce.1 = 47b3dc94cb1ace1e029b3bb49678570d
+PersonalisationString.1 = 4988cffc3f89d407fbf54a602ad409d9e07903b161a6b9f84899f61bd621f58e
+AdditionalInputA.1 = f02b5c13d7352781f657fcbfceb9e1fb4ab0952864511125bcaa8587ee664e89
+EntropyPredictionResistanceA.1 = 26cc46806798416b62e2d467e42776def5fb0cb75ef4196d0effb2bedf74a4fa
+AdditionalInputB.1 = 21f8505ce708e2635201f5100422aa70dfbeed6250eed5cb3d8a8b5dde041870
+EntropyPredictionResistanceB.1 = 4a7512865c0f9c61474180a0d991e200cf74e6585879f2b15465367359b07bb0
+Output.1 = f498959599790561d4212f93523723b89fd2a6b550b6693ea5bd130ec2e59dd37f7a26a31bd363e57faea6d46499a260f5a6094f6870a60fc01916d6c7426513a284ec5a76b4e76626d7309c7385f9634ec05adb82615c2040386b598ff417901a8958080b2ff2d00c1c121d6dadeaf899e6e806823bb77ab6143f283268adfb
+Entropy.2 = 7c22c4bcc8d100ad39ce23c9a84be347708cc33302f3a1bd1dc0176f5cae76f2
+Nonce.2 = 01bcbd6e551ca12defd061890a092b35
+PersonalisationString.2 = 6d44f0b15ed7a902c5971aea8af9e646e0073217b5c4d029cae54b901fa68069
+AdditionalInputA.2 = c2cff0a8cd028d899efd78b4cfd7a05830e62296c1514062b0d3b24538301b09
+EntropyPredictionResistanceA.2 = 5c48e075f5eadb68634c153b81ab80fd40c2d664d057fda03fc5937c0049bdf2
+AdditionalInputB.2 = 0d6e341e82c2d4d190dc934cccaf2dbe7609c5c8f0ac312aee54b2ad86224a15
+EntropyPredictionResistanceB.2 = bbc2c9f11caf38be33f4ac311000120cef20bfc195427be726903e14ff4796f0
+Output.2 = 0cb156a9f679ddc3a8831fb069e1dfdc7520b59980ec536a5a2ff56bfd9342a9c7807abe4db427f97588062deb937ab71164dfb133bbf2a141a1fc3afafd1a2d81a8d0b22cd92e4a5a626631c84dd8517609e6360c16bf8eda3a0c8ff2886989b0ff3c19169ff2e5e9fc1d51dcc68caf7cea004c0bb1179e63a4502f159ce268
+Entropy.3 = 1642ec672501597501be21288ffd145e0f7f62fdf30382ec019d8cc2196c326f
+Nonce.3 = 330989e594b2a567efc927d7bc3475cb
+PersonalisationString.3 = 16287b1713765ddf7de9c0f314277811eaf1f7b420ef7dd706ad90fea6309008
+AdditionalInputA.3 = abb9da07e5a6768139ecb5c4c4103ae0b64cc3f4b6275ed3e8b2bb7a07943df6
+EntropyPredictionResistanceA.3 = a786e4952056e81c98197822e29676979f5c00c193e84bfe548ebdbe33f2f3cb
+AdditionalInputB.3 = 08439fdb5e1ae8418d1ad8ca26f9fd870a835b2f7e1f7b566ffbcab052f90780
+EntropyPredictionResistanceB.3 = d1e9a858ef4f187e55d68ccc5c9e14293ad3d48deafb1324a01b54bf4e699288
+Output.3 = 14c2806062da762769bcdaaf6e3cf712f2852aba7f73454af3d223de5d45304435e5cd5bf5b61fbcfd9e402f17637b5df1838f6ec1444163822a9367221ef134e0317a383b7eb2acdb3deab989debde11246fe1da739251d11c616930e9d88a5a236dbdbf98d1dab5dfb7e6822b8fe993a8e11960bbceedd33a338967ed0f33c
+Entropy.4 = c4c0223de27ac0684c1fe3cb2ae429a2239d7f1577c7454f89458eba7059cbc9
+Nonce.4 = 8808153eaa4cfc3b1018bb8b2a70ef48
+PersonalisationString.4 = e1a3a12aa919f3d7bca27938676ad391583553e073557a7ac3db88b282c3f8c3
+AdditionalInputA.4 = 916a51efe6beccf837237b472a16bc2f10cfbbfcc695e51ddb516af5fbbad233
+EntropyPredictionResistanceA.4 = 3269719ad5e5d75c7d38d6ddcaab88923059be19bf0d2e9304e29def9588b65f
+AdditionalInputB.4 = 7785510405be10bcd9560f7fd741d2d2e0851fb77d0a3c67ba960ae461e5ed36
+EntropyPredictionResistanceB.4 = 7214a7113939bd8706ca70206102a0e3dd346771cacc3344443e089260c4e861
+Output.4 = aec5114b12284a9e40d0e57c6929e10c8a5fe633658260c22b29a57da3c2dcb5e399d0397d369d6c134de32e02f09f54bf7aa023e8b3c03f5082a02ef7213ad02e98c3336ddad950ef9c61785b3f2bb5990fddabd7c0798e02d68288abe02f2cbc99587e8244707c4c38f22cd2c222837b185d746ed7b8dbc143010241587e98
+Entropy.5 = ff8de6d095d0fd2169de50895873c62164ce71b247e07c37869bb7ab4dfb7a2f
+Nonce.5 = 5d77899abe31ea0a9293ce62d20283e6
+PersonalisationString.5 = 444302a1f26f27d9272f4df663cf240a2c3b03a39c90f6e6860fef8f8bd3af78
+AdditionalInputA.5 = 356fcfe97106e3132b348b5fafefd63a44f67999dfba24df04c0a9a8f524ec2f
+EntropyPredictionResistanceA.5 = 50c7cbc271e378f500ba31bde7db48f9008613377098bb2ec148cda3de09fff5
+AdditionalInputB.5 = 46eb9e7230180fc701ddcbe42207d371d8ef2c2e61113708b83a85c89a1cf060
+EntropyPredictionResistanceB.5 = df49363bdad89cc070a5a894479a605cc95d6684e56bd89ffeaf3f7bb224f847
+Output.5 = 6c3658da58c14032cda63daf67ac6623f158ef83ce290d70120d1c4381a3182f3fbf0e49b749ecafc4a6a99c86f48b0e00a08b4726e6e8449452f2f01024a3834964cebade94953497ff604a66abb64faab0f17dd1394d50e17b16b943c8a5c9d7f44dcf1b1e92f0bd5dbd5e8c721adbd7b49746430135f1fd9947480f72e23c
+Entropy.6 = b729e9e0f6bcb08f692e9e7a86d5b146e873f876e3e039814b4cc6bd068ff56d
+Nonce.6 = cda0d8c93a7c51bf57b851ab4235d573
+PersonalisationString.6 = 793775ef69886b992af87b284ce039fb269dc3525189cacdadf8cc1e70c6bdd7
+AdditionalInputA.6 = 8767d7cbcf22b65af0206ac68045ea220389fdbddcacd87e13c6ef2f00928c16
+EntropyPredictionResistanceA.6 = 455c0addd37952bf065eca8a53b9682d3fbebb145800eb607c935869f76e1e8a
+AdditionalInputB.6 = 4320f2dba4e9a10aa0f5e9d133a8fdecf6c860ef64255fc11252c0af55e91e0c
+EntropyPredictionResistanceB.6 = 7f18666102124e5b6f98bf86c34ab4a21a033e7471ac19839d2be31aa1cef4ab
+Output.6 = 78c998e2c85c7bb2da1b26c02b332bca12d2f880798a19153d33a4036292292440c48e26dcf8ee38e476ef260df9e8c77d9ee119d57c47dc67da52f62fdb31a00e1ae463f78e4730db0d1c51b6b7638c176cfa3cd3feed994d91ef0cc7e1ef714cc70d211588767e4284000d9f6213aca6c549016528f5bcdeb454e8838d3634
+Entropy.7 = 69925b096ee9cf12ab46527774217f78441acaaac9351249fe41d7e07644de1d
+Nonce.7 = 5d3d2efb60cda3f104da094ef6700b43
+PersonalisationString.7 = a1bdd23470b584a4dad36410d18aaab6f6ab0ac5a5bc711d034c7c356ac7f155
+AdditionalInputA.7 = 4561035e13204687eb063d8ce84ed4d0e5dcc7348f76a501fb0be3adfcd9076c
+EntropyPredictionResistanceA.7 = f94cf6bbd2fa9470e31f8136c7286ed3760b889d749d6fd8a618b4e4857bac73
+AdditionalInputB.7 = 691e2977a4437af69243ebdf9e3808f281c082e3d0409fafc26f863dcf611964
+EntropyPredictionResistanceB.7 = 6adaa92bc55e1353c32fca9e5d831357dcaa3364409d5587b62e7030f6d66fda
+Output.7 = ecb82125813b23571f59032f22a61af4b64836fade0e5d35a75290392d3b4dc6ff0f54f1dfa2c959acf1a0a5b8e4254d546a51e3139cf6c2d19264ca27fdbd74534152dac3c943bce66c324dea36328b3d9bc09329da99de6e65b7e1a8010a776c105d4629368bcf8f970859bc41c46e6a1329bb2b95d2cb45aad2c197b25982
+Entropy.8 = 55f577306b63a262c2972653b7e0ae9d23a7f7ca65a9f8161bc7e3bae03742a6
+Nonce.8 = f06aaceb79434ceee6df69a7b812979e
+PersonalisationString.8 = 3ba4d8e6589b964c3eaa0b395ffacc6a3f8e8a6acd84cae980e06a7254a26de4
+AdditionalInputA.8 = 9f7b9d0ee16371789142f09907f37962d5a4f54accecae0101961f0c5f48f05e
+EntropyPredictionResistanceA.8 = e48c192360c7196b0f642f8ad61359244f0e94b0f3568521acc8a9dee5524dd1
+AdditionalInputB.8 = 8545ef2287205f19f16aa0ef3162191a09ac9ed171d76ead17a45317d1765670
+EntropyPredictionResistanceB.8 = f9fdd9d835c4039fab18428d1b2e2bbe9d36eac814dd27c128ccf492cc81e5f8
+Output.8 = d2eb46ecfff92b0ebf0f730b16a6942567ff1c2ad145264364d2725bba6b6cd009177a20490732944aa38ff5a939b6fb5561a9965892733b830eaed15d997f7b222e6de1f7d42f5a0de6d3378883b31cff2ba2be15d7242962183d64b7bfad3fd51b3062d8bb291531978d07bac06fa65f8e62c6b821a3d4113d7ca1e2db425a
+Entropy.9 = 645c8f3ac5128efecf29112328c905c46ddad557de3ebd7ebbe51353dbf398c1
+Nonce.9 = 55802909b1d2fdb7f7479b89cbf9bfa6
+PersonalisationString.9 = 2fdc0b876caf2e222cee34aab71ec467242db2d1caf7a9293b52cf21f2ad5725
+AdditionalInputA.9 = b51130581f93617d402d770d74087d7efbbe960fe80ff4807633038a38e228a8
+EntropyPredictionResistanceA.9 = ffdffac0c39632e16065a030eeca2e75203d11688b0571a9aca330c177ffb08e
+AdditionalInputB.9 = b4d20cec5926008b8dc11cf7e9a21aa826edcfd933b717f02d31c2c91c25653c
+EntropyPredictionResistanceB.9 = 30fc1881987cbbffd776f6339d707f84b1eb929016167431b2a171c252496e5f
+Output.9 = 7798d0cfccf3359509dc6d543cdd7af3b49fee03985a3e915bf853b752035f7a075b67792a48711c1608936dc42120cc7ee6f725aaedd7c97be209af44623b25dd5f1c51353a20eb105cb5f4e15b33fa1fcaaf54b57f37b5ae436630771d35e7ef18624fd1982915346b847a5f7e012f2ed4f1866fec1225811695e2e310ab12
+Entropy.10 = 74a5b9f893c4866cf500b9365ff802f5ca2f16989a6fec8bc1567bfb447da6fe
+Nonce.10 = 19d8ae6b5d875deeb22210d790a8c402
+PersonalisationString.10 = a590df7780b6797f0d96e8d900fcca2bb2c9e60e7681d19081b6080cc5fcbf9e
+AdditionalInputA.10 = 24061d38c01a6ed4860b61a75450784ad5967009f47e05cb3721c822e553a8ea
+EntropyPredictionResistanceA.10 = 97324b85623203eb8c5cf0eed3726669605af9d296eb63ab7a3a84ad9c8dd873
+AdditionalInputB.10 = 301583399d744381b6d5aa0a2f78656c161ee25f76640cd6703a9f28c4f78a55
+EntropyPredictionResistanceB.10 = 376fb159278cc4cdb37e25779fa96b732ffdac42cbdce42e687832db84717a74
+Output.10 = aeae818e1942ac2dccf3955f6c2b4bde604c5b692aea38c22985a63544137eee6b9a7825fff77faca920e86c893419ec8d3e49171eb0bd00272034676b690ca3a04d1eedc574cc5d1794f2ca6dd07015e5e49375dad5618c4554d841bfe6cf9b638a2e2cbf886f4a54381afc0cc74dd5515c1ff106dade1bf2157b26887fbb54
+Entropy.11 = 1a3cbe953988aebb23c8fd514f526c7082aba12a168e60788e9ed1c2b5667bc5
+Nonce.11 = 08254701936d5b0889d5f37f1de29151
+PersonalisationString.11 = 2617c877a50687d5e23237f4113446b69e8121053ac94f33f59d0495563afc8b
+AdditionalInputA.11 = 82f90720ede97b50931d6f11f6068dba7b117dba82f873ec17e03a82f433c332
+EntropyPredictionResistanceA.11 = 73e61f2420d434aaef4f7615d2f56433d096fc702d517a84197eaaee9f9478ae
+AdditionalInputB.11 = ced00ef18d2eca034c06d9c6403268c855f5f1efcb1e46639e86d1cfa6edaf84
+EntropyPredictionResistanceB.11 = 216dd0ff09f203b5267a85514fd028cc787569a1978e0074d6f805a389fe838f
+Output.11 = 08c273ba1605bdfe432f231dc280f9facefcbd3e1cea7d2c2738bf1b58517081546a8909f7e53253e31fa3e01d0e92c65582d6a401ec9853489f3a4e6b75425e85306a2980019148507f604f75c95913d5f2d2d3b776d248f259abe2e981313026de797dc57682c41338b4d4ab7a2a15869a80da0b1aec8ddd0d2f9389346fff
+Entropy.12 = c8f5fbde1a55935351ad87f5fa0ad9263cdef5b3ff840f3b98975541b49f7971
+Nonce.12 = 52a01278ec97c112f193849b9eadeb70
+PersonalisationString.12 = f38a2f8815db808ed37fdf1013bb3ca15dad36e269a45e574c68d47e86907f8d
+AdditionalInputA.12 = 7b7139890bc93683206e286397ee2bd032178a85cf4c030574cb3b23cad1581b
+EntropyPredictionResistanceA.12 = 35a95177a0237c1c1c7abde3aeb714986bb4c8f0d553f6693aec597c1ed65293
+AdditionalInputB.12 = 77e5f7a57c8fbf1cfd0801e5e8a3ad6717271f927fd540c7af2dc43af84119ee
+EntropyPredictionResistanceB.12 = 032aa7a2e4a21a98c79f76bcfcb5630c828a5ed958bd444569bef0badf4186b7
+Output.12 = b01a5c4db118e289f47efaec1ef318db5f3c6bbf1b1d8c94ded11ac1c77047f60aba9e409e13dd0f63adee42313cac2f3bc42901f088d9e43b64ef52dbe4deedaa8b89f092a5d22f7239562bf7d66b05ca0c2fa934a7b7fbb90dd3e783ef08bdb80f74b6bbaf0b10a4783a4104d22b16a8943e9cbb7e1b0692211bdf263c6d44
+Entropy.13 = e99190a3ed3b4829269b0baf0c4caba33e4c3a36a8fd62291f195da71cbe328f
+Nonce.13 = 56e02fa42a14c68fea845bce69989f83
+PersonalisationString.13 = cd45814adc9aae4dc0e9b668885a0a0cf8eaaba56cf6bff796ea9f65b148d17f
+AdditionalInputA.13 = a803f5fb4ba4bd3957205267701dc64f8f8fd8a91f92541adbf4c75a24e15dd2
+EntropyPredictionResistanceA.13 = 77049cd375f4d724da6033d92cb5ac8b03c0f44e1467c0a344023e83d215a51f
+AdditionalInputB.13 = 3ebf6ad6836855f320c4a96377d33dcef3f128e9346cc823f6e9d6db648877e6
+EntropyPredictionResistanceB.13 = 33cc064f149d66208042024ed75c60a206c16fcc21918389b1f966d29e16b466
+Output.13 = 504cdcef55a7a061d0608a50bcc3c315ebd15ecfbf80f30b220c9f9d7ddef5f49ac212f3e83b9f75f27ddaf246f007347ef8d9a2562be60b5d232a60c26f60644d7955ce5bc867153c16b72412fe87ce2818a3eeece466cf60433ed45d9af0929ceeb97d03eb4673fca3dd89c55f744c50340594e8532c40df37b5092cd6613b
+Entropy.14 = fa18c7949cd5bcbe49c96f4d6670c84f55aee00f36a46cbfafbe54e66b326423
+Nonce.14 = c6fdec4246bda3e2b69ff602675f7e6d
+PersonalisationString.14 = 9b31eebbe8bc023cb8193ce5e15a629d2920a0c49169d298924bdba2eb3bcd46
+AdditionalInputA.14 = 2e0883a88021b7ca2e8be9b7b208eec4107864605f718510323d89c8146ca893
+EntropyPredictionResistanceA.14 = d7842e7ad0cbac6b9404e8e942fabb77974b353a7f9633880695fbffcb4d3279
+AdditionalInputB.14 = 0155dc73a36c160d9e13c023e732798b4fba3a9fd849c0edf899765c5ff7349f
+EntropyPredictionResistanceB.14 = 96a30d8593cce5febd4f034ff97479eb8808e81bd7b8f7b44ae945fbbf503572
+Output.14 = ee191dc6bef025e36302bb8ce0e6a949f7b0d2944b246fc52d68a20c3b2b787595ca9d4bae2f55a13924fabbef8f700abc09d7dac1c1eb3a63c040867519e6724faeb532d01cd38922e4e0973566fc23f5fbc067f496cb97fe3ce97564f0010d6cd2b5d81a3e79fcb85f010191a76b4d796ea8c85b119dd24210f64725c09689
diff --git a/test/recipes/30-test_evp_extra.t b/test/recipes/30-test_evp_extra.t
new file mode 100644
index 000000000000..25c2509ed88b
--- /dev/null
+++ b/test/recipes/30-test_evp_extra.t
@@ -0,0 +1,24 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT bldtop_dir/;
+
+setup("test_evp_extra");
+
+plan tests => 3;
+
+ok(run(test(["evp_extra_test"])), "running evp_extra_test");
+
+# Run tests with a non-default library context
+ok(run(test(["evp_extra_test", "-context"])), "running evp_extra_test with a non-default library context");
+
+ok(run(test(["evp_extra_test2"])), "running evp_extra_test2");
diff --git a/test/recipes/30-test_evp_fetch_prov.t b/test/recipes/30-test_evp_fetch_prov.t
new file mode 100644
index 000000000000..63082dd311f4
--- /dev/null
+++ b/test/recipes/30-test_evp_fetch_prov.t
@@ -0,0 +1,127 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT bldtop_dir srctop_file srctop_dir bldtop_file);
+use OpenSSL::Test::Utils;
+
+BEGIN {
+setup("test_evp_fetch_prov");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+my @types = ( "digest", "cipher" );
+
+my @testdata = (
+ { config => srctop_file("test", "default.cnf"),
+ providers => [ 'default' ],
+ tests => [ { providers => [] },
+ { },
+ { args => [ '-property', 'provider=default' ],
+ message => 'using property "provider=default"' },
+ { args => [ '-property', 'provider!=fips' ],
+ message => 'using property "provider!=fips"' },
+ { args => [ '-property', 'provider!=default', '-fetchfail' ],
+ message =>
+ 'using property "provider!=default" is expected to fail' },
+ { args => [ '-property', 'provider=fips', '-fetchfail' ],
+ message =>
+ 'using property "provider=fips" is expected to fail' } ] }
+);
+
+unless ($no_fips) {
+ push @testdata, (
+ { config => srctop_file("test", "fips.cnf"),
+ providers => [ 'fips' ],
+ tests => [
+ { args => [ '-property', '' ] },
+ { args => [ '-property', 'provider=fips' ],
+ message => 'using property "provider=fips"' },
+ { args => [ '-property', 'provider!=default' ],
+ message => 'using property "provider!=default"' },
+ { args => [ '-property', 'provider=default', '-fetchfail' ],
+ message =>
+ 'using property "provider=default" is expected to fail' },
+ { args => [ '-property', 'provider!=fips', '-fetchfail' ],
+ message =>
+ 'using property "provider!=fips" is expected to fail' },
+ { args => [ '-property', 'fips=yes' ],
+ message => 'using property "fips=yes"' },
+ { args => [ '-property', 'fips!=no' ],
+ message => 'using property "fips!=no"' },
+ { args => [ '-property', '-fips' ],
+ message => 'using property "-fips"' },
+ { args => [ '-property', 'fips=no', '-fetchfail' ],
+ message => 'using property "fips=no is expected to fail"' },
+ { args => [ '-property', 'fips!=yes', '-fetchfail' ],
+ message => 'using property "fips!=yes is expected to fail"' } ] },
+ { config => srctop_file("test", "default-and-fips.cnf"),
+ providers => [ 'default', 'fips' ],
+ tests => [
+ { args => [ '-property', '' ] },
+ { args => [ '-property', 'provider!=default' ],
+ message => 'using property "provider!=default"' },
+ { args => [ '-property', 'provider=default' ],
+ message => 'using property "provider=default"' },
+ { args => [ '-property', 'provider!=fips' ],
+ message => 'using property "provider!=fips"' },
+ { args => [ '-property', 'provider=fips' ],
+ message => 'using property "provider=fips"' },
+ { args => [ '-property', 'fips=yes' ],
+ message => 'using property "fips=yes"' },
+ { args => [ '-property', 'fips!=no' ],
+ message => 'using property "fips!=no"' },
+ { args => [ '-property', '-fips' ],
+ message => 'using property "-fips"' },
+ { args => [ '-property', 'fips=no' ],
+ message => 'using property "fips=no"' },
+ { args => [ '-property', 'fips!=yes' ],
+ message => 'using property "fips!=yes"' } ] },
+ );
+}
+
+my $testcount = 0;
+foreach (@testdata) {
+ $testcount += scalar @{$_->{tests}};
+}
+
+plan tests => 1 + $testcount * scalar(@types);
+
+ok(run(test(["evp_fetch_prov_test", "-defaultctx"])),
+ "running evp_fetch_prov_test using the default libctx");
+
+foreach my $alg (@types) {
+ foreach my $testcase (@testdata) {
+ $ENV{OPENSSL_CONF} = "";
+ foreach my $test (@{$testcase->{tests}}) {
+ my @testproviders =
+ @{ $test->{providers} // $testcase->{providers} };
+ my $testprovstr = @testproviders
+ ? ' and loaded providers ' . join(' & ',
+ map { "'$_'" } @testproviders)
+ : '';
+ my @testargs = @{ $test->{args} // [] };
+ my $testmsg =
+ defined $test->{message} ? ' '.$test->{message} : '';
+
+ my $message =
+ "running evp_fetch_prov_test with $alg$testprovstr$testmsg";
+
+ ok(run(test(["evp_fetch_prov_test", "-type", "$alg",
+ "-config", "$testcase->{config}",
+ @testargs, @testproviders])),
+ $message);
+ }
+ }
+}
diff --git a/test/recipes/30-test_evp_kdf.t b/test/recipes/30-test_evp_kdf.t
new file mode 100644
index 000000000000..9e43d6d25934
--- /dev/null
+++ b/test/recipes/30-test_evp_kdf.t
@@ -0,0 +1,13 @@
+#! /usr/bin/env perl
+# Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2018, Oracle and/or its affiliates. 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_evp_kdf", "evp_kdf_test");
diff --git a/test/recipes/30-test_evp_libctx.t b/test/recipes/30-test_evp_libctx.t
new file mode 100644
index 000000000000..0086cf22c961
--- /dev/null
+++ b/test/recipes/30-test_evp_libctx.t
@@ -0,0 +1,46 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT bldtop_dir srctop_dir srctop_file bldtop_file);
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_evp_libctx");
+}
+
+my $no_legacy = disabled('legacy') || ($ENV{NO_LEGACY} // 0);
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+# If no fips then run the test with no extra arguments.
+my @test_args = ( );
+
+plan tests => ($no_fips ? 0 : 1) + ($no_legacy ? 0 : 1) + 1;
+
+unless ($no_fips) {
+ @test_args = ("-config", srctop_file("test","fips-and-base.cnf"),
+ "-provider", "fips");
+
+ ok(run(test(["evp_libctx_test", @test_args])), "running fips evp_libctx_test");
+}
+
+ok(run(test(["evp_libctx_test",
+ "-config", srctop_file("test","default.cnf"),])),
+ "running default evp_libctx_test");
+
+unless ($no_legacy) {
+ ok(run(test(["evp_libctx_test",
+ "-config", srctop_file("test","default-and-legacy.cnf"),])),
+ "running default-and-legacy evp_libctx_test");
+}
+
diff --git a/test/recipes/30-test_evp_pkey_dparam.t b/test/recipes/30-test_evp_pkey_dparam.t
new file mode 100644
index 000000000000..647413ecdf67
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_dparam.t
@@ -0,0 +1,11 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_evp_pkey_dparam", "evp_pkey_dparams_test");
diff --git a/test/recipes/30-test_evp_pkey_provided.t b/test/recipes/30-test_evp_pkey_provided.t
new file mode 100644
index 000000000000..d9efbeaa664a
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# 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
+
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test qw/:DEFAULT srctop_dir/;
+
+setup("test_evp_pkey_provided");
+
+plan tests => 1;
+
+ok(run(test(["evp_pkey_provided_test",
+ srctop_dir("test", "recipes", "30-test_evp_pkey_provided")])),
+ "running evp_pkey_provided_test");
diff --git a/test/recipes/30-test_evp_pkey_provided/DH.priv.der b/test/recipes/30-test_evp_pkey_provided/DH.priv.der
new file mode 100644
index 000000000000..d77f50d8c646
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DH.priv.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/DH.priv.pem b/test/recipes/30-test_evp_pkey_provided/DH.priv.pem
new file mode 100644
index 000000000000..2aa5f49dd413
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DH.priv.pem
@@ -0,0 +1,9 @@
+-----BEGIN PRIVATE KEY-----
+MIIBQwIBADCCARsGCSqGSIb3DQEDATCCAQwCggEBAP//////////rfhUWKK7Spqv
+3FYgJz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT
+3x7V1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId
+8VihNq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSu
+Vu3nY3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD
+/jsbTG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhKFyX//////////8C
+AQICAgDgBB8CHQCIheef7m3FfHivY104KtDtVktHISv6VfqH6Kl7
+-----END PRIVATE KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/DH.priv.txt b/test/recipes/30-test_evp_pkey_provided/DH.priv.txt
new file mode 100644
index 000000000000..0dd83429f5b6
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DH.priv.txt
@@ -0,0 +1,25 @@
+DH Private-Key: (2048 bit)
+private-key:
+ 00:88:85:e7:9f:ee:6d:c5:7c:78:af:63:5d:38:2a:
+ d0:ed:56:4b:47:21:2b:fa:55:fa:87:e8:a9:7b
+public-key:
+ 00:d6:2d:77:e0:d3:7d:f8:eb:98:50:a1:82:22:65:
+ d5:d9:fe:c9:3f:be:16:83:bd:33:e9:c6:93:cf:08:
+ af:83:fa:80:8a:6c:64:df:70:64:d5:0a:7c:5a:72:
+ da:66:e6:f9:f5:31:21:92:b0:60:1a:b5:d3:f0:a5:
+ fa:48:95:2e:38:d9:c5:e6:da:fb:6c:03:9d:4b:69:
+ b7:95:e4:5c:c0:93:4f:48:d9:7e:06:22:b2:de:f3:
+ 79:24:ed:e1:d1:4a:57:f1:40:86:70:42:25:c5:27:
+ 68:c9:fa:e5:8e:62:7e:ff:49:6c:5b:b5:ba:f9:ef:
+ 9a:1a:10:d4:81:53:cf:83:04:18:1c:e1:db:e1:65:
+ a9:7f:e1:33:eb:c3:4f:e3:b7:22:f7:1c:09:4f:ed:
+ c6:07:8e:78:05:8f:7c:96:d9:12:e0:81:74:1a:e9:
+ 13:c0:20:82:65:bb:42:3b:ed:08:6a:84:4f:ea:77:
+ 14:32:f9:ed:c2:12:d6:c5:c6:b3:e5:f2:6e:f6:16:
+ 7f:37:de:bc:09:c7:06:6b:12:bc:ad:2d:49:25:d5:
+ dc:f4:18:14:d2:f0:f1:1d:1f:3a:aa:15:55:bb:0d:
+ 7f:be:67:a1:a7:f0:aa:b3:fb:41:82:39:49:93:bc:
+ a8:ee:72:13:45:65:15:42:17:aa:d8:ab:cf:33:42:
+ 83:42
+GROUP: ffdhe2048
+recommended-private-length: 224 bits
diff --git a/test/recipes/30-test_evp_pkey_provided/DH.pub.der b/test/recipes/30-test_evp_pkey_provided/DH.pub.der
new file mode 100644
index 000000000000..a2d373050376
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DH.pub.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/DH.pub.pem b/test/recipes/30-test_evp_pkey_provided/DH.pub.pem
new file mode 100644
index 000000000000..b71c143f268f
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DH.pub.pem
@@ -0,0 +1,14 @@
+-----BEGIN PUBLIC KEY-----
+MIICKTCCARsGCSqGSIb3DQEDATCCAQwCggEBAP//////////rfhUWKK7Spqv3FYg
+Jz088di5xYPOLTaVqeE2QRRkM/vMk53OJJs++X0v42NjDHXY9oGyAq7EYXrT3x7V
+1f1lYSQz9R9fBm7QhWNlVT3tGvO1VxNef1fJNZhPDHDg5ot34qaJ2vPv6HId8Vih
+Nq3nNTCsyk9IOnl6vAqxgrMk+2HRCKlLssjj+7lq2rdg1/RoHU9Co945TfSuVu3n
+Y3K7GQsHp8juCm1wngL84c334uzANATNKDQvYZFy/pzphYP/jk8SMu7ygYPD/jsb
+TG+tczu1/LwuwiAFxY7xg30Wg7LG80omwbLv+ohrQjhhKFyX//////////8CAQIC
+AgDgA4IBBgACggEBANYtd+DTffjrmFChgiJl1dn+yT++FoO9M+nGk88Ir4P6gIps
+ZN9wZNUKfFpy2mbm+fUxIZKwYBq10/Cl+kiVLjjZxeba+2wDnUtpt5XkXMCTT0jZ
+fgYist7zeSTt4dFKV/FAhnBCJcUnaMn65Y5ifv9JbFu1uvnvmhoQ1IFTz4MEGBzh
+2+FlqX/hM+vDT+O3IvccCU/txgeOeAWPfJbZEuCBdBrpE8AggmW7QjvtCGqET+p3
+FDL57cIS1sXGs+XybvYWfzfevAnHBmsSvK0tSSXV3PQYFNLw8R0fOqoVVbsNf75n
+oafwqrP7QYI5SZO8qO5yE0VlFUIXqtirzzNCg0I=
+-----END PUBLIC KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/DH.pub.txt b/test/recipes/30-test_evp_pkey_provided/DH.pub.txt
new file mode 100644
index 000000000000..491f9d9d5e1a
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DH.pub.txt
@@ -0,0 +1,22 @@
+DH Public-Key: (2048 bit)
+public-key:
+ 00:d6:2d:77:e0:d3:7d:f8:eb:98:50:a1:82:22:65:
+ d5:d9:fe:c9:3f:be:16:83:bd:33:e9:c6:93:cf:08:
+ af:83:fa:80:8a:6c:64:df:70:64:d5:0a:7c:5a:72:
+ da:66:e6:f9:f5:31:21:92:b0:60:1a:b5:d3:f0:a5:
+ fa:48:95:2e:38:d9:c5:e6:da:fb:6c:03:9d:4b:69:
+ b7:95:e4:5c:c0:93:4f:48:d9:7e:06:22:b2:de:f3:
+ 79:24:ed:e1:d1:4a:57:f1:40:86:70:42:25:c5:27:
+ 68:c9:fa:e5:8e:62:7e:ff:49:6c:5b:b5:ba:f9:ef:
+ 9a:1a:10:d4:81:53:cf:83:04:18:1c:e1:db:e1:65:
+ a9:7f:e1:33:eb:c3:4f:e3:b7:22:f7:1c:09:4f:ed:
+ c6:07:8e:78:05:8f:7c:96:d9:12:e0:81:74:1a:e9:
+ 13:c0:20:82:65:bb:42:3b:ed:08:6a:84:4f:ea:77:
+ 14:32:f9:ed:c2:12:d6:c5:c6:b3:e5:f2:6e:f6:16:
+ 7f:37:de:bc:09:c7:06:6b:12:bc:ad:2d:49:25:d5:
+ dc:f4:18:14:d2:f0:f1:1d:1f:3a:aa:15:55:bb:0d:
+ 7f:be:67:a1:a7:f0:aa:b3:fb:41:82:39:49:93:bc:
+ a8:ee:72:13:45:65:15:42:17:aa:d8:ab:cf:33:42:
+ 83:42
+GROUP: ffdhe2048
+recommended-private-length: 224 bits
diff --git a/test/recipes/30-test_evp_pkey_provided/DSA.priv.der b/test/recipes/30-test_evp_pkey_provided/DSA.priv.der
new file mode 100644
index 000000000000..d10a69db0d7a
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DSA.priv.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/DSA.priv.pem b/test/recipes/30-test_evp_pkey_provided/DSA.priv.pem
new file mode 100644
index 000000000000..8836ac1f235e
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DSA.priv.pem
@@ -0,0 +1,15 @@
+-----BEGIN PRIVATE KEY-----
+MIICZQIBADCCAjkGByqGSM44BAEwggIsAoIBAQCgtwLErKZCq/I0CyJHHzPP1QTk
+PuyhIchBK++4HwtbiItn+GhtfE2WXzxm71g01/aiG63IElK46CpjzOrnTsg0TFhZ
+CsJK5LRkIPT2Cs+GAWx/I0pRB5lCKHr/GGdSZPKaYjDDAN4j6RGVftE9jbQOn56x
+MAPwc6hASEJ7YKDE8jstCgy4Gfu0+OAqx/HAxoYUYBIPwN5KZ+zH3nYhGlV/hsOX
+mM71zfDnEtaT7hubYe8FjEVG2WRvvieqZwHMcbFgziHYURcnDZA9GHyHFY5ITGzF
+cuu3VvVrYI/C/T9GXACRhXlFWxyCxIdQebrMHDJ+LrguxU7Rm9tmeXz+r2oFAiEA
+qM30M3sTCiTB3koEe0txUTLpR3S9DCFAhBIKF3PbKccCggEAbMakPmGEwf9vShpr
+sCRL0pJbKVxhuMkr1vdZ/dhwZnf8waTUsB7Vv1mYs2aL9C7mEj7M+AK4xsNH0vWq
+DF9R9dBMVT0Hc6ZXzlqtQgwTD+IxJY5yEnMQ239561n8/vcMGoFTliK451jYZ4Bg
+rYtVHJHwcpp+rTfxdxiWimhw/HGpoug1J3jy71k2bXy2mNge+iVzl0VY4669UlQF
+2CYmuroFtenldq4l3fwQiVqp7lnFeYvrHixhqw3REASRMndKpmRT2kzXOinU84Il
+HW9Kf9MIO0IwENjQlzrrkmPskytvMtjNgNPATAPVyryPx0NTZGYcgi37/zm61kJi
+Am+WNgQjAiEAj8We0PcqC2bxMnOu9tnU2y2WVYn/76hfR4/KAorhNZA=
+-----END PRIVATE KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/DSA.priv.txt b/test/recipes/30-test_evp_pkey_provided/DSA.priv.txt
new file mode 100644
index 000000000000..1b1b758b03aa
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DSA.priv.txt
@@ -0,0 +1,72 @@
+Private-Key: (2048 bit)
+priv:
+ 00:8f:c5:9e:d0:f7:2a:0b:66:f1:32:73:ae:f6:d9:
+ d4:db:2d:96:55:89:ff:ef:a8:5f:47:8f:ca:02:8a:
+ e1:35:90
+pub:
+ 44:19:c9:46:45:57:c1:a9:d8:30:99:29:6a:4b:63:
+ 71:69:96:35:17:b2:62:9b:80:0a:95:9d:6a:c0:32:
+ 0d:07:5f:19:44:02:f1:bd:ce:df:10:f8:02:5d:7d:
+ 98:8a:73:89:00:b6:24:d6:33:e7:cf:8b:49:2a:af:
+ 13:1c:b2:52:15:fd:9b:d5:40:4a:1a:da:29:4c:92:
+ 7e:66:06:db:61:86:ac:b5:da:3c:7d:73:7e:54:32:
+ 68:a5:02:bc:59:47:84:d3:87:71:5f:eb:43:45:24:
+ d3:ec:08:52:c2:89:2d:9c:1a:cc:91:65:5d:a3:a1:
+ 35:31:10:1c:3a:a8:4d:18:d5:06:af:b2:ec:5c:89:
+ 9e:90:86:10:01:eb:51:d5:1b:9c:cb:66:07:3f:c4:
+ 6e:0a:1b:73:a0:4b:5f:4d:ab:35:28:fa:da:3a:0c:
+ 08:e8:f3:ef:42:67:bc:21:f2:c2:b8:ff:1a:81:05:
+ 68:73:62:df:d7:ab:0f:22:89:57:96:d4:93:af:a1:
+ 21:a3:48:e9:f0:97:47:a0:27:ba:87:b8:15:5f:ff:
+ 2c:50:41:f1:7e:c6:81:c4:51:f1:fd:d6:86:f7:69:
+ 97:f1:49:c9:f9:f4:9b:f4:e8:85:a7:bd:36:55:4a:
+ 3d:e8:65:09:7b:b7:12:64:d2:0a:53:60:48:d1:8a:
+ bd
+P:
+ 00:a0:b7:02:c4:ac:a6:42:ab:f2:34:0b:22:47:1f:
+ 33:cf:d5:04:e4:3e:ec:a1:21:c8:41:2b:ef:b8:1f:
+ 0b:5b:88:8b:67:f8:68:6d:7c:4d:96:5f:3c:66:ef:
+ 58:34:d7:f6:a2:1b:ad:c8:12:52:b8:e8:2a:63:cc:
+ ea:e7:4e:c8:34:4c:58:59:0a:c2:4a:e4:b4:64:20:
+ f4:f6:0a:cf:86:01:6c:7f:23:4a:51:07:99:42:28:
+ 7a:ff:18:67:52:64:f2:9a:62:30:c3:00:de:23:e9:
+ 11:95:7e:d1:3d:8d:b4:0e:9f:9e:b1:30:03:f0:73:
+ a8:40:48:42:7b:60:a0:c4:f2:3b:2d:0a:0c:b8:19:
+ fb:b4:f8:e0:2a:c7:f1:c0:c6:86:14:60:12:0f:c0:
+ de:4a:67:ec:c7:de:76:21:1a:55:7f:86:c3:97:98:
+ ce:f5:cd:f0:e7:12:d6:93:ee:1b:9b:61:ef:05:8c:
+ 45:46:d9:64:6f:be:27:aa:67:01:cc:71:b1:60:ce:
+ 21:d8:51:17:27:0d:90:3d:18:7c:87:15:8e:48:4c:
+ 6c:c5:72:eb:b7:56:f5:6b:60:8f:c2:fd:3f:46:5c:
+ 00:91:85:79:45:5b:1c:82:c4:87:50:79:ba:cc:1c:
+ 32:7e:2e:b8:2e:c5:4e:d1:9b:db:66:79:7c:fe:af:
+ 6a:05
+Q:
+ 00:a8:cd:f4:33:7b:13:0a:24:c1:de:4a:04:7b:4b:
+ 71:51:32:e9:47:74:bd:0c:21:40:84:12:0a:17:73:
+ db:29:c7
+G:
+ 6c:c6:a4:3e:61:84:c1:ff:6f:4a:1a:6b:b0:24:4b:
+ d2:92:5b:29:5c:61:b8:c9:2b:d6:f7:59:fd:d8:70:
+ 66:77:fc:c1:a4:d4:b0:1e:d5:bf:59:98:b3:66:8b:
+ f4:2e:e6:12:3e:cc:f8:02:b8:c6:c3:47:d2:f5:aa:
+ 0c:5f:51:f5:d0:4c:55:3d:07:73:a6:57:ce:5a:ad:
+ 42:0c:13:0f:e2:31:25:8e:72:12:73:10:db:7f:79:
+ eb:59:fc:fe:f7:0c:1a:81:53:96:22:b8:e7:58:d8:
+ 67:80:60:ad:8b:55:1c:91:f0:72:9a:7e:ad:37:f1:
+ 77:18:96:8a:68:70:fc:71:a9:a2:e8:35:27:78:f2:
+ ef:59:36:6d:7c:b6:98:d8:1e:fa:25:73:97:45:58:
+ e3:ae:bd:52:54:05:d8:26:26:ba:ba:05:b5:e9:e5:
+ 76:ae:25:dd:fc:10:89:5a:a9:ee:59:c5:79:8b:eb:
+ 1e:2c:61:ab:0d:d1:10:04:91:32:77:4a:a6:64:53:
+ da:4c:d7:3a:29:d4:f3:82:25:1d:6f:4a:7f:d3:08:
+ 3b:42:30:10:d8:d0:97:3a:eb:92:63:ec:93:2b:6f:
+ 32:d8:cd:80:d3:c0:4c:03:d5:ca:bc:8f:c7:43:53:
+ 64:66:1c:82:2d:fb:ff:39:ba:d6:42:62:02:6f:96:
+ 36
+SEED:
+ 64:46:07:32:8d:70:9c:b3:8a:35:de:62:00:f2:6d:
+ 52:37:4d:b3:84:e1:9d:41:04:da:7b:dc:0d:8b:5e:
+ e0:84
+gindex: 1
+pcounter: 53
diff --git a/test/recipes/30-test_evp_pkey_provided/DSA.pub.der b/test/recipes/30-test_evp_pkey_provided/DSA.pub.der
new file mode 100644
index 000000000000..7432479d5b2b
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DSA.pub.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/DSA.pub.pem b/test/recipes/30-test_evp_pkey_provided/DSA.pub.pem
new file mode 100644
index 000000000000..98242b49bb86
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DSA.pub.pem
@@ -0,0 +1,20 @@
+-----BEGIN PUBLIC KEY-----
+MIIDRjCCAjkGByqGSM44BAEwggIsAoIBAQCgtwLErKZCq/I0CyJHHzPP1QTkPuyh
+IchBK++4HwtbiItn+GhtfE2WXzxm71g01/aiG63IElK46CpjzOrnTsg0TFhZCsJK
+5LRkIPT2Cs+GAWx/I0pRB5lCKHr/GGdSZPKaYjDDAN4j6RGVftE9jbQOn56xMAPw
+c6hASEJ7YKDE8jstCgy4Gfu0+OAqx/HAxoYUYBIPwN5KZ+zH3nYhGlV/hsOXmM71
+zfDnEtaT7hubYe8FjEVG2WRvvieqZwHMcbFgziHYURcnDZA9GHyHFY5ITGzFcuu3
+VvVrYI/C/T9GXACRhXlFWxyCxIdQebrMHDJ+LrguxU7Rm9tmeXz+r2oFAiEAqM30
+M3sTCiTB3koEe0txUTLpR3S9DCFAhBIKF3PbKccCggEAbMakPmGEwf9vShprsCRL
+0pJbKVxhuMkr1vdZ/dhwZnf8waTUsB7Vv1mYs2aL9C7mEj7M+AK4xsNH0vWqDF9R
+9dBMVT0Hc6ZXzlqtQgwTD+IxJY5yEnMQ239561n8/vcMGoFTliK451jYZ4BgrYtV
+HJHwcpp+rTfxdxiWimhw/HGpoug1J3jy71k2bXy2mNge+iVzl0VY4669UlQF2CYm
+uroFtenldq4l3fwQiVqp7lnFeYvrHixhqw3REASRMndKpmRT2kzXOinU84IlHW9K
+f9MIO0IwENjQlzrrkmPskytvMtjNgNPATAPVyryPx0NTZGYcgi37/zm61kJiAm+W
+NgOCAQUAAoIBAEQZyUZFV8Gp2DCZKWpLY3FpljUXsmKbgAqVnWrAMg0HXxlEAvG9
+zt8Q+AJdfZiKc4kAtiTWM+fPi0kqrxMcslIV/ZvVQEoa2ilMkn5mBtthhqy12jx9
+c35UMmilArxZR4TTh3Ff60NFJNPsCFLCiS2cGsyRZV2joTUxEBw6qE0Y1Qavsuxc
+iZ6QhhAB61HVG5zLZgc/xG4KG3OgS19NqzUo+to6DAjo8+9CZ7wh8sK4/xqBBWhz
+Yt/Xqw8iiVeW1JOvoSGjSOnwl0egJ7qHuBVf/yxQQfF+xoHEUfH91ob3aZfxScn5
+9Jv06IWnvTZVSj3oZQl7txJk0gpTYEjRir0=
+-----END PUBLIC KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/DSA.pub.txt b/test/recipes/30-test_evp_pkey_provided/DSA.pub.txt
new file mode 100644
index 000000000000..0cd037294c44
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/DSA.pub.txt
@@ -0,0 +1,68 @@
+Public-Key: (2048 bit)
+pub:
+ 44:19:c9:46:45:57:c1:a9:d8:30:99:29:6a:4b:63:
+ 71:69:96:35:17:b2:62:9b:80:0a:95:9d:6a:c0:32:
+ 0d:07:5f:19:44:02:f1:bd:ce:df:10:f8:02:5d:7d:
+ 98:8a:73:89:00:b6:24:d6:33:e7:cf:8b:49:2a:af:
+ 13:1c:b2:52:15:fd:9b:d5:40:4a:1a:da:29:4c:92:
+ 7e:66:06:db:61:86:ac:b5:da:3c:7d:73:7e:54:32:
+ 68:a5:02:bc:59:47:84:d3:87:71:5f:eb:43:45:24:
+ d3:ec:08:52:c2:89:2d:9c:1a:cc:91:65:5d:a3:a1:
+ 35:31:10:1c:3a:a8:4d:18:d5:06:af:b2:ec:5c:89:
+ 9e:90:86:10:01:eb:51:d5:1b:9c:cb:66:07:3f:c4:
+ 6e:0a:1b:73:a0:4b:5f:4d:ab:35:28:fa:da:3a:0c:
+ 08:e8:f3:ef:42:67:bc:21:f2:c2:b8:ff:1a:81:05:
+ 68:73:62:df:d7:ab:0f:22:89:57:96:d4:93:af:a1:
+ 21:a3:48:e9:f0:97:47:a0:27:ba:87:b8:15:5f:ff:
+ 2c:50:41:f1:7e:c6:81:c4:51:f1:fd:d6:86:f7:69:
+ 97:f1:49:c9:f9:f4:9b:f4:e8:85:a7:bd:36:55:4a:
+ 3d:e8:65:09:7b:b7:12:64:d2:0a:53:60:48:d1:8a:
+ bd
+P:
+ 00:a0:b7:02:c4:ac:a6:42:ab:f2:34:0b:22:47:1f:
+ 33:cf:d5:04:e4:3e:ec:a1:21:c8:41:2b:ef:b8:1f:
+ 0b:5b:88:8b:67:f8:68:6d:7c:4d:96:5f:3c:66:ef:
+ 58:34:d7:f6:a2:1b:ad:c8:12:52:b8:e8:2a:63:cc:
+ ea:e7:4e:c8:34:4c:58:59:0a:c2:4a:e4:b4:64:20:
+ f4:f6:0a:cf:86:01:6c:7f:23:4a:51:07:99:42:28:
+ 7a:ff:18:67:52:64:f2:9a:62:30:c3:00:de:23:e9:
+ 11:95:7e:d1:3d:8d:b4:0e:9f:9e:b1:30:03:f0:73:
+ a8:40:48:42:7b:60:a0:c4:f2:3b:2d:0a:0c:b8:19:
+ fb:b4:f8:e0:2a:c7:f1:c0:c6:86:14:60:12:0f:c0:
+ de:4a:67:ec:c7:de:76:21:1a:55:7f:86:c3:97:98:
+ ce:f5:cd:f0:e7:12:d6:93:ee:1b:9b:61:ef:05:8c:
+ 45:46:d9:64:6f:be:27:aa:67:01:cc:71:b1:60:ce:
+ 21:d8:51:17:27:0d:90:3d:18:7c:87:15:8e:48:4c:
+ 6c:c5:72:eb:b7:56:f5:6b:60:8f:c2:fd:3f:46:5c:
+ 00:91:85:79:45:5b:1c:82:c4:87:50:79:ba:cc:1c:
+ 32:7e:2e:b8:2e:c5:4e:d1:9b:db:66:79:7c:fe:af:
+ 6a:05
+Q:
+ 00:a8:cd:f4:33:7b:13:0a:24:c1:de:4a:04:7b:4b:
+ 71:51:32:e9:47:74:bd:0c:21:40:84:12:0a:17:73:
+ db:29:c7
+G:
+ 6c:c6:a4:3e:61:84:c1:ff:6f:4a:1a:6b:b0:24:4b:
+ d2:92:5b:29:5c:61:b8:c9:2b:d6:f7:59:fd:d8:70:
+ 66:77:fc:c1:a4:d4:b0:1e:d5:bf:59:98:b3:66:8b:
+ f4:2e:e6:12:3e:cc:f8:02:b8:c6:c3:47:d2:f5:aa:
+ 0c:5f:51:f5:d0:4c:55:3d:07:73:a6:57:ce:5a:ad:
+ 42:0c:13:0f:e2:31:25:8e:72:12:73:10:db:7f:79:
+ eb:59:fc:fe:f7:0c:1a:81:53:96:22:b8:e7:58:d8:
+ 67:80:60:ad:8b:55:1c:91:f0:72:9a:7e:ad:37:f1:
+ 77:18:96:8a:68:70:fc:71:a9:a2:e8:35:27:78:f2:
+ ef:59:36:6d:7c:b6:98:d8:1e:fa:25:73:97:45:58:
+ e3:ae:bd:52:54:05:d8:26:26:ba:ba:05:b5:e9:e5:
+ 76:ae:25:dd:fc:10:89:5a:a9:ee:59:c5:79:8b:eb:
+ 1e:2c:61:ab:0d:d1:10:04:91:32:77:4a:a6:64:53:
+ da:4c:d7:3a:29:d4:f3:82:25:1d:6f:4a:7f:d3:08:
+ 3b:42:30:10:d8:d0:97:3a:eb:92:63:ec:93:2b:6f:
+ 32:d8:cd:80:d3:c0:4c:03:d5:ca:bc:8f:c7:43:53:
+ 64:66:1c:82:2d:fb:ff:39:ba:d6:42:62:02:6f:96:
+ 36
+SEED:
+ 64:46:07:32:8d:70:9c:b3:8a:35:de:62:00:f2:6d:
+ 52:37:4d:b3:84:e1:9d:41:04:da:7b:dc:0d:8b:5e:
+ e0:84
+gindex: 1
+pcounter: 53
diff --git a/test/recipes/30-test_evp_pkey_provided/EC.priv.der b/test/recipes/30-test_evp_pkey_provided/EC.priv.der
new file mode 100644
index 000000000000..2f74cfc1ae3a
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/EC.priv.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/EC.priv.pem b/test/recipes/30-test_evp_pkey_provided/EC.priv.pem
new file mode 100644
index 000000000000..953b7a619c0a
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/EC.priv.pem
@@ -0,0 +1,5 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgM9BDg6mJVgPS1/5r
+AW/kWcwNmiRshhsu3EtNNUPhG62hRANCAAQbk2dVHFWfY9EipNjRCmBtAqV3V8ij
+R3M6aggoOb3J0oDs6acIKXEvyVaC7pqFD21/WV+M0ZYL3yk+SQeIP5op
+-----END PRIVATE KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/EC.priv.txt b/test/recipes/30-test_evp_pkey_provided/EC.priv.txt
new file mode 100644
index 000000000000..9360d892afca
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/EC.priv.txt
@@ -0,0 +1,13 @@
+Private-Key: (256 bit)
+priv:
+ 33:d0:43:83:a9:89:56:03:d2:d7:fe:6b:01:6f:e4:
+ 59:cc:0d:9a:24:6c:86:1b:2e:dc:4b:4d:35:43:e1:
+ 1b:ad
+pub:
+ 04:1b:93:67:55:1c:55:9f:63:d1:22:a4:d8:d1:0a:
+ 60:6d:02:a5:77:57:c8:a3:47:73:3a:6a:08:28:39:
+ bd:c9:d2:80:ec:e9:a7:08:29:71:2f:c9:56:82:ee:
+ 9a:85:0f:6d:7f:59:5f:8c:d1:96:0b:df:29:3e:49:
+ 07:88:3f:9a:29
+ASN1 OID: prime256v1
+NIST CURVE: P-256
diff --git a/test/recipes/30-test_evp_pkey_provided/EC.pub.der b/test/recipes/30-test_evp_pkey_provided/EC.pub.der
new file mode 100644
index 000000000000..b08f9a745f2b
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/EC.pub.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/EC.pub.pem b/test/recipes/30-test_evp_pkey_provided/EC.pub.pem
new file mode 100644
index 000000000000..16ec838271a5
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/EC.pub.pem
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEG5NnVRxVn2PRIqTY0QpgbQKld1fI
+o0dzOmoIKDm9ydKA7OmnCClxL8lWgu6ahQ9tf1lfjNGWC98pPkkHiD+aKQ==
+-----END PUBLIC KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/EC.pub.txt b/test/recipes/30-test_evp_pkey_provided/EC.pub.txt
new file mode 100644
index 000000000000..612ba89bb63d
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/EC.pub.txt
@@ -0,0 +1,9 @@
+Public-Key: (256 bit)
+pub:
+ 04:1b:93:67:55:1c:55:9f:63:d1:22:a4:d8:d1:0a:
+ 60:6d:02:a5:77:57:c8:a3:47:73:3a:6a:08:28:39:
+ bd:c9:d2:80:ec:e9:a7:08:29:71:2f:c9:56:82:ee:
+ 9a:85:0f:6d:7f:59:5f:8c:d1:96:0b:df:29:3e:49:
+ 07:88:3f:9a:29
+ASN1 OID: prime256v1
+NIST CURVE: P-256
diff --git a/test/recipes/30-test_evp_pkey_provided/ED25519.priv.der b/test/recipes/30-test_evp_pkey_provided/ED25519.priv.der
new file mode 100644
index 000000000000..71783b74d3d4
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED25519.priv.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/ED25519.priv.pem b/test/recipes/30-test_evp_pkey_provided/ED25519.priv.pem
new file mode 100644
index 000000000000..7cf2b728c969
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED25519.priv.pem
@@ -0,0 +1,3 @@
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEIJ1hsZ3v/VpguoRK9JLsLMREScVpezJpGXA7rAMcrn9g
+-----END PRIVATE KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/ED25519.priv.txt b/test/recipes/30-test_evp_pkey_provided/ED25519.priv.txt
new file mode 100644
index 000000000000..43ed486f40e0
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED25519.priv.txt
@@ -0,0 +1,9 @@
+ED25519 Private-Key:
+priv:
+ 9d:61:b1:9d:ef:fd:5a:60:ba:84:4a:f4:92:ec:2c:
+ c4:44:49:c5:69:7b:32:69:19:70:3b:ac:03:1c:ae:
+ 7f:60
+pub:
+ d7:5a:98:01:82:b1:0a:b7:d5:4b:fe:d3:c9:64:07:
+ 3a:0e:e1:72:f3:da:a6:23:25:af:02:1a:68:f7:07:
+ 51:1a
diff --git a/test/recipes/30-test_evp_pkey_provided/ED25519.pub.der b/test/recipes/30-test_evp_pkey_provided/ED25519.pub.der
new file mode 100644
index 000000000000..5b33e7546de5
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED25519.pub.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/ED25519.pub.pem b/test/recipes/30-test_evp_pkey_provided/ED25519.pub.pem
new file mode 100644
index 000000000000..9749b691defb
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED25519.pub.pem
@@ -0,0 +1,3 @@
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEA11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo=
+-----END PUBLIC KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/ED25519.pub.txt b/test/recipes/30-test_evp_pkey_provided/ED25519.pub.txt
new file mode 100644
index 000000000000..7456dfc252b1
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED25519.pub.txt
@@ -0,0 +1,5 @@
+ED25519 Public-Key:
+pub:
+ d7:5a:98:01:82:b1:0a:b7:d5:4b:fe:d3:c9:64:07:
+ 3a:0e:e1:72:f3:da:a6:23:25:af:02:1a:68:f7:07:
+ 51:1a
diff --git a/test/recipes/30-test_evp_pkey_provided/ED448.priv.der b/test/recipes/30-test_evp_pkey_provided/ED448.priv.der
new file mode 100644
index 000000000000..5718a5473444
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED448.priv.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/ED448.priv.pem b/test/recipes/30-test_evp_pkey_provided/ED448.priv.pem
new file mode 100644
index 000000000000..98af16420ad4
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED448.priv.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOWyCpWLLgI0Q1jK+ichRPr9skp803fqMn2PJlg7240ij
+UoyKP8wvBE45o/xblEkvjwMudUmiAJj5Ww==
+-----END PRIVATE KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/ED448.priv.txt b/test/recipes/30-test_evp_pkey_provided/ED448.priv.txt
new file mode 100644
index 000000000000..071ee6c5f7be
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED448.priv.txt
@@ -0,0 +1,11 @@
+ED448 Private-Key:
+priv:
+ 6c:82:a5:62:cb:80:8d:10:d6:32:be:89:c8:51:3e:
+ bf:6c:92:9f:34:dd:fa:8c:9f:63:c9:96:0e:f6:e3:
+ 48:a3:52:8c:8a:3f:cc:2f:04:4e:39:a3:fc:5b:94:
+ 49:2f:8f:03:2e:75:49:a2:00:98:f9:5b
+pub:
+ 5f:d7:44:9b:59:b4:61:fd:2c:e7:87:ec:61:6a:d4:
+ 6a:1d:a1:34:24:85:a7:0e:1f:8a:0e:a7:5d:80:e9:
+ 67:78:ed:f1:24:76:9b:46:c7:06:1b:d6:78:3d:f1:
+ e5:0f:6c:d1:fa:1a:be:af:e8:25:61:80
diff --git a/test/recipes/30-test_evp_pkey_provided/ED448.pub.der b/test/recipes/30-test_evp_pkey_provided/ED448.pub.der
new file mode 100644
index 000000000000..bd2a95530bb2
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED448.pub.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/ED448.pub.pem b/test/recipes/30-test_evp_pkey_provided/ED448.pub.pem
new file mode 100644
index 000000000000..640da6f2be14
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED448.pub.pem
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoAX9dEm1m0Yf0s54fsYWrUah2hNCSFpw4fig6nXYDpZ3jt8SR2
+m0bHBhvWeD3x5Q9s0foavq/oJWGA
+-----END PUBLIC KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/ED448.pub.txt b/test/recipes/30-test_evp_pkey_provided/ED448.pub.txt
new file mode 100644
index 000000000000..06a2967b44de
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/ED448.pub.txt
@@ -0,0 +1,6 @@
+ED448 Public-Key:
+pub:
+ 5f:d7:44:9b:59:b4:61:fd:2c:e7:87:ec:61:6a:d4:
+ 6a:1d:a1:34:24:85:a7:0e:1f:8a:0e:a7:5d:80:e9:
+ 67:78:ed:f1:24:76:9b:46:c7:06:1b:d6:78:3d:f1:
+ e5:0f:6c:d1:fa:1a:be:af:e8:25:61:80
diff --git a/test/recipes/30-test_evp_pkey_provided/RSA.priv.der b/test/recipes/30-test_evp_pkey_provided/RSA.priv.der
new file mode 100644
index 000000000000..08925e43aa7a
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/RSA.priv.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/RSA.priv.pem b/test/recipes/30-test_evp_pkey_provided/RSA.priv.pem
new file mode 100644
index 000000000000..548b3f56d96d
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/RSA.priv.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEQCAQAwDQYJKoZIhvcNAQEBBQAEMDAuAgEAAgUAvHR/xQIDAQABAgR7EzOZAgMA
+6WMCAwDOtwIDAIWZAgMAvYcCAwDMOw==
+-----END PRIVATE KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/RSA.priv.txt b/test/recipes/30-test_evp_pkey_provided/RSA.priv.txt
new file mode 100644
index 000000000000..d34e9ef2f78f
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/RSA.priv.txt
@@ -0,0 +1,9 @@
+Private-Key: (32 bit, 2 primes)
+modulus: 3161751493 (0xbc747fc5)
+publicExponent: 65537 (0x10001)
+privateExponent: 2064855961 (0x7b133399)
+prime1: 59747 (0xe963)
+prime2: 52919 (0xceb7)
+exponent1: 34201 (0x8599)
+exponent2: 48519 (0xbd87)
+coefficient: 52283 (0xcc3b)
diff --git a/test/recipes/30-test_evp_pkey_provided/RSA.pub.der b/test/recipes/30-test_evp_pkey_provided/RSA.pub.der
new file mode 100644
index 000000000000..bff32528a31a
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/RSA.pub.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/RSA.pub.pem b/test/recipes/30-test_evp_pkey_provided/RSA.pub.pem
new file mode 100644
index 000000000000..a1366b70b19f
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/RSA.pub.pem
@@ -0,0 +1,3 @@
+-----BEGIN PUBLIC KEY-----
+MCAwDQYJKoZIhvcNAQEBBQADDwAwDAIFALx0f8UCAwEAAQ==
+-----END PUBLIC KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/RSA.pub.txt b/test/recipes/30-test_evp_pkey_provided/RSA.pub.txt
new file mode 100644
index 000000000000..f6dad2a0f73c
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/RSA.pub.txt
@@ -0,0 +1,3 @@
+Public-Key: (32 bit)
+Modulus: 3161751493 (0xbc747fc5)
+Exponent: 65537 (0x10001)
diff --git a/test/recipes/30-test_evp_pkey_provided/X25519.priv.der b/test/recipes/30-test_evp_pkey_provided/X25519.priv.der
new file mode 100644
index 000000000000..d8d244be76af
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X25519.priv.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/X25519.priv.pem b/test/recipes/30-test_evp_pkey_provided/X25519.priv.pem
new file mode 100644
index 000000000000..ff18c240265f
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X25519.priv.pem
@@ -0,0 +1,3 @@
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VuBCIEIHcHbQpzGKV9PBbBclGyZkXfTC+H68CZKrF3+6UduSwq
+-----END PRIVATE KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/X25519.priv.txt b/test/recipes/30-test_evp_pkey_provided/X25519.priv.txt
new file mode 100644
index 000000000000..a18bc1dacb4f
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X25519.priv.txt
@@ -0,0 +1,9 @@
+X25519 Private-Key:
+priv:
+ 77:07:6d:0a:73:18:a5:7d:3c:16:c1:72:51:b2:66:
+ 45:df:4c:2f:87:eb:c0:99:2a:b1:77:fb:a5:1d:b9:
+ 2c:2a
+pub:
+ 85:20:f0:09:89:30:a7:54:74:8b:7d:dc:b4:3e:f7:
+ 5a:0d:bf:3a:0d:26:38:1a:f4:eb:a4:a9:8e:aa:9b:
+ 4e:6a
diff --git a/test/recipes/30-test_evp_pkey_provided/X25519.pub.der b/test/recipes/30-test_evp_pkey_provided/X25519.pub.der
new file mode 100644
index 000000000000..4945db18f124
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X25519.pub.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/X25519.pub.pem b/test/recipes/30-test_evp_pkey_provided/X25519.pub.pem
new file mode 100644
index 000000000000..4ccf96098c14
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X25519.pub.pem
@@ -0,0 +1,3 @@
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VuAyEAhSDwCYkwp1R0i33ctD73Wg2/Og0mOBr066SpjqqbTmo=
+-----END PUBLIC KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/X25519.pub.txt b/test/recipes/30-test_evp_pkey_provided/X25519.pub.txt
new file mode 100644
index 000000000000..a57851b1519d
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X25519.pub.txt
@@ -0,0 +1,5 @@
+X25519 Public-Key:
+pub:
+ 85:20:f0:09:89:30:a7:54:74:8b:7d:dc:b4:3e:f7:
+ 5a:0d:bf:3a:0d:26:38:1a:f4:eb:a4:a9:8e:aa:9b:
+ 4e:6a
diff --git a/test/recipes/30-test_evp_pkey_provided/X448.priv.der b/test/recipes/30-test_evp_pkey_provided/X448.priv.der
new file mode 100644
index 000000000000..8875333a5bab
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X448.priv.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/X448.priv.pem b/test/recipes/30-test_evp_pkey_provided/X448.priv.pem
new file mode 100644
index 000000000000..c93235cc063c
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X448.priv.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEYCAQAwBQYDK2VvBDoEOJqPSSXRUZ9Xdc9GsEtYANTunui66LxVZdSYwo3Zybr1
+dKlBl0SJc5EAY4Km8SerHZrC2MClmHJr
+-----END PRIVATE KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/X448.priv.txt b/test/recipes/30-test_evp_pkey_provided/X448.priv.txt
new file mode 100644
index 000000000000..f91620ccf31a
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X448.priv.txt
@@ -0,0 +1,11 @@
+X448 Private-Key:
+priv:
+ 9a:8f:49:25:d1:51:9f:57:75:cf:46:b0:4b:58:00:
+ d4:ee:9e:e8:ba:e8:bc:55:65:d4:98:c2:8d:d9:c9:
+ ba:f5:74:a9:41:97:44:89:73:91:00:63:82:a6:f1:
+ 27:ab:1d:9a:c2:d8:c0:a5:98:72:6b
+pub:
+ 9b:08:f7:cc:31:b7:e3:e6:7d:22:d5:ae:a1:21:07:
+ 4a:27:3b:d2:b8:3d:e0:9c:63:fa:a7:3d:2c:22:c5:
+ d9:bb:c8:36:64:72:41:d9:53:d4:0c:5b:12:da:88:
+ 12:0d:53:17:7f:80:e5:32:c4:1f:a0
diff --git a/test/recipes/30-test_evp_pkey_provided/X448.pub.der b/test/recipes/30-test_evp_pkey_provided/X448.pub.der
new file mode 100644
index 000000000000..15da4b71463c
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X448.pub.der
Binary files differ
diff --git a/test/recipes/30-test_evp_pkey_provided/X448.pub.pem b/test/recipes/30-test_evp_pkey_provided/X448.pub.pem
new file mode 100644
index 000000000000..559bf68839db
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X448.pub.pem
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MEIwBQYDK2VvAzkAmwj3zDG34+Z9ItWuoSEHSic70rg94Jxj+qc9LCLF2bvINmRy
+QdlT1AxbEtqIEg1TF3+A5TLEH6A=
+-----END PUBLIC KEY-----
diff --git a/test/recipes/30-test_evp_pkey_provided/X448.pub.txt b/test/recipes/30-test_evp_pkey_provided/X448.pub.txt
new file mode 100644
index 000000000000..d2b6659f3e66
--- /dev/null
+++ b/test/recipes/30-test_evp_pkey_provided/X448.pub.txt
@@ -0,0 +1,6 @@
+X448 Public-Key:
+pub:
+ 9b:08:f7:cc:31:b7:e3:e6:7d:22:d5:ae:a1:21:07:
+ 4a:27:3b:d2:b8:3d:e0:9c:63:fa:a7:3d:2c:22:c5:
+ d9:bb:c8:36:64:72:41:d9:53:d4:0c:5b:12:da:88:
+ 12:0d:53:17:7f:80:e5:32:c4:1f:a0
diff --git a/test/recipes/30-test_pbelu.t b/test/recipes/30-test_pbelu.t
new file mode 100644
index 000000000000..5bb34baa25d6
--- /dev/null
+++ b/test/recipes/30-test_pbelu.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_pbelu", "pbelutest");
diff --git a/test/recipes/30-test_pkey_meth.t b/test/recipes/30-test_pkey_meth.t
new file mode 100644
index 000000000000..b34dcc77c934
--- /dev/null
+++ b/test/recipes/30-test_pkey_meth.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_pkey_meth", "pkey_meth_test");
diff --git a/test/recipes/30-test_pkey_meth_kdf.t b/test/recipes/30-test_pkey_meth_kdf.t
new file mode 100644
index 000000000000..aeda7457748e
--- /dev/null
+++ b/test/recipes/30-test_pkey_meth_kdf.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_pkey_meth_kdf", "pkey_meth_kdf_test");
diff --git a/test/recipes/30-test_prov_config.t b/test/recipes/30-test_prov_config.t
new file mode 100644
index 000000000000..7f6350fd84e1
--- /dev/null
+++ b/test/recipes/30-test_prov_config.t
@@ -0,0 +1,35 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test qw/:DEFAULT srctop_file srctop_dir bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+setup("test_prov_config");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan tests => 2;
+
+ok(run(test(["prov_config_test", srctop_file("test", "default.cnf"),
+ srctop_file("test", "recursive.cnf")])),
+ "running prov_config_test default.cnf");
+
+SKIP: {
+ skip "Skipping FIPS test in this build", 1 if $no_fips;
+
+ ok(run(test(["prov_config_test", srctop_file("test", "fips.cnf"),
+ srctop_file("test", "recursive.cnf")])),
+ "running prov_config_test fips.cnf");
+}
diff --git a/test/recipes/30-test_provider_status.t b/test/recipes/30-test_provider_status.t
new file mode 100644
index 000000000000..2b2e242a5fa7
--- /dev/null
+++ b/test/recipes/30-test_provider_status.t
@@ -0,0 +1,49 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT data_file bldtop_dir srctop_file srctop_dir bldtop_file);
+use OpenSSL::Test::Utils;
+
+BEGIN {
+setup("test_provider_status");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan tests => 5;
+
+ok(run(test(["provider_status_test", "-provider_name", "null"])),
+ "null provider test");
+
+ok(run(test(["provider_status_test", "-provider_name", "base"])),
+ "base provider test");
+
+ok(run(test(["provider_status_test", "-provider_name", "default"])),
+ "default provider test");
+
+SKIP: {
+ skip "Skipping legacy test", 1
+ if disabled("legacy");
+ ok(run(test(["provider_status_test", "-provider_name", "legacy"])),
+ "legacy provider test");
+}
+
+SKIP: {
+ skip "Skipping fips test", 1
+ if $no_fips;
+ ok(run(test(["provider_status_test", "-config", srctop_file("test","fips.cnf"),
+ "-provider_name", "fips"])),
+ "fips provider test");
+}
diff --git a/test/recipes/40-test_rehash.t b/test/recipes/40-test_rehash.t
new file mode 100644
index 000000000000..38798b79e574
--- /dev/null
+++ b/test/recipes/40-test_rehash.t
@@ -0,0 +1,98 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Spec::Functions;
+use File::Copy;
+use File::Basename;
+use OpenSSL::Glob;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_rehash");
+
+#If "openssl rehash -help" fails it's most likely because we're on a platform
+#that doesn't support the rehash command (e.g. Windows)
+plan skip_all => "test_rehash is not available on this platform"
+ unless run(app(["openssl", "rehash", "-help"]));
+
+plan tests => 4;
+
+indir "rehash.$$" => sub {
+ prepare();
+ ok(run(app(["openssl", "rehash", curdir()])),
+ 'Testing normal rehash operations');
+}, create => 1, cleanup => 1;
+
+indir "rehash.$$" => sub {
+ prepare(sub { chmod 400, $_ foreach (@_); });
+ ok(run(app(["openssl", "rehash", curdir()])),
+ 'Testing rehash operations on readonly files');
+}, create => 1, cleanup => 1;
+
+indir "rehash.$$" => sub {
+ ok(run(app(["openssl", "rehash", curdir()])),
+ 'Testing rehash operations on empty directory');
+}, create => 1, cleanup => 1;
+
+indir "rehash.$$" => sub {
+ prepare();
+ chmod 0500, curdir();
+ SKIP: {
+ if (open(FOO, ">unwritable.txt")) {
+ close FOO;
+ skip "It's pointless to run the next test as root", 1;
+ }
+ isnt(run(app(["openssl", "rehash", curdir()])), 1,
+ 'Testing rehash operations on readonly directory');
+ }
+ chmod 0700, curdir(); # make it writable again, so cleanup works
+}, create => 1, cleanup => 1;
+
+sub prepare {
+ my @pemsourcefiles = sort glob(srctop_file('test', "*.pem"));
+ my @destfiles = ();
+
+ die "There are no source files\n" if scalar @pemsourcefiles == 0;
+
+ my $cnt = 0;
+ foreach (@pemsourcefiles) {
+ my $basename = basename($_, ".pem");
+ my $writing = 0;
+
+ open PEM, $_ or die "Can't read $_: $!\n";
+ while (my $line = <PEM>) {
+ if ($line =~ m{^-----BEGIN (?:CERTIFICATE|X509 CRL)-----}) {
+ die "New start in a PEM blob?\n" if $writing;
+ $cnt++;
+ my $destfile =
+ catfile(curdir(),
+ $basename . sprintf("-%02d", $cnt) . ".pem");
+ push @destfiles, $destfile;
+ open OUT, '>', $destfile
+ or die "Can't write $destfile\n";
+ $writing = 1;
+ }
+ print OUT $line if $writing;
+ if ($line =~ m|^-----END |) {
+ close OUT if $writing;
+ $writing = 0;
+ }
+ }
+ die "No end marker in $basename\n" if $writing;
+ }
+ die "No test PEM files produced\n" if $cnt == 0;
+
+ foreach (@_) {
+ die "Internal error, argument is not CODE"
+ unless (ref($_) eq 'CODE');
+ $_->(@destfiles);
+ }
+}
diff --git a/test/recipes/60-test_x509_check_cert_pkey.t b/test/recipes/60-test_x509_check_cert_pkey.t
new file mode 100644
index 000000000000..6e7112b4cf3e
--- /dev/null
+++ b/test/recipes/60-test_x509_check_cert_pkey.t
@@ -0,0 +1,65 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_x509_check_cert_pkey");
+
+plan tests => 11;
+
+sub src_file {
+ return srctop_file("test", "certs", shift);
+}
+
+sub test_PEM_X509_INFO_read {
+ my $file = shift;
+ my $num = shift;
+ ok(run(test(["x509_check_cert_pkey_test", src_file($file), $num])),
+ "test_PEM_X509_INFO_read $file");
+}
+
+# rsa
+ok(run(test(["x509_check_cert_pkey_test",
+ src_file("servercert.pem"),
+ src_file("serverkey.pem"), "cert", "ok"])));
+# mismatched rsa
+ok(run(test(["x509_check_cert_pkey_test",
+ src_file("servercert.pem"),
+ src_file("wrongkey.pem"), "cert", "failed"])));
+SKIP: {
+ skip "DSA disabled", 1, if disabled("dsa");
+ # dsa
+ ok(run(test(["x509_check_cert_pkey_test",
+ src_file("server-dsa-cert.pem"),
+ src_file("server-dsa-key.pem"), "cert", "ok"])));
+}
+# ecc
+SKIP: {
+ skip "EC disabled", 2 if disabled("ec");
+ ok(run(test(["x509_check_cert_pkey_test",
+ src_file("server-ecdsa-cert.pem"),
+ src_file("server-ecdsa-key.pem"), "cert", "ok"])));
+
+ test_PEM_X509_INFO_read("ec_privkey_with_chain.pem", "5");
+
+}
+# certificate request (rsa)
+ok(run(test(["x509_check_cert_pkey_test",
+ src_file("x509-check.csr"),
+ src_file("x509-check-key.pem"), "req", "ok"])));
+# mismatched certificate request (rsa)
+ok(run(test(["x509_check_cert_pkey_test",
+ src_file("x509-check.csr"),
+ src_file("wrongkey.pem"), "req", "failed"])));
+
+test_PEM_X509_INFO_read("root-cert.pem", "1");
+test_PEM_X509_INFO_read("root-key.pem", "1");
+test_PEM_X509_INFO_read("key-pass-12345.pem", "1");
+test_PEM_X509_INFO_read("cyrillic_crl.utf8", "1");
diff --git a/test/recipes/60-test_x509_dup_cert.t b/test/recipes/60-test_x509_dup_cert.t
new file mode 100644
index 000000000000..fbeca7839b6f
--- /dev/null
+++ b/test/recipes/60-test_x509_dup_cert.t
@@ -0,0 +1,17 @@
+#! /usr/bin/env perl
+# Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2017, Oracle and/or its affiliates. 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
+
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_x509_dup_cert");
+
+plan tests => 1;
+
+ok(run(test(["x509_dup_cert_test", srctop_file("test", "certs", "leaf.pem")])));
diff --git a/test/recipes/60-test_x509_store.t b/test/recipes/60-test_x509_store.t
new file mode 100644
index 000000000000..c5fd76bf8bde
--- /dev/null
+++ b/test/recipes/60-test_x509_store.t
@@ -0,0 +1,53 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use strict;
+use warnings;
+
+use File::Copy;
+use File::Spec::Functions qw/:DEFAULT canonpath/;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_x509_store");
+
+#If "openssl rehash -help" fails it's most likely because we're on a platform
+#that doesn't support the rehash command (e.g. Windows)
+plan skip_all => "test_rehash is not available on this platform"
+ unless run(app(["openssl", "rehash", "-help"]));
+
+# We use 'openssl verify' for these tests, as it contains everything
+# we need to conduct these tests. The tests here are a subset of the
+# ones found in 25-test_verify.t
+
+sub verify {
+ my ($cert, $purpose, $trustedpath, $untrusted, @opts) = @_;
+ my @args = qw(openssl verify -auth_level 1 -purpose);
+ my @path = qw(test certs);
+ push(@args, "$purpose", @opts);
+ push(@args, "-CApath", $trustedpath);
+ for (@$untrusted) { push(@args, "-untrusted", srctop_file(@path, "$_.pem")) }
+ push(@args, srctop_file(@path, "$cert.pem"));
+ run(app([@args]));
+}
+
+plan tests => 3;
+
+indir "60-test_x509_store" => sub {
+ for (("root-cert")) {
+ copy(srctop_file("test", "certs", "$_.pem"), curdir());
+ }
+ ok(run(app([qw(openssl rehash), curdir()])), "Rehashing");
+
+ # Canonical success
+ ok(verify("ee-cert", "sslserver", curdir(), ["ca-cert"], "-show_chain"),
+ "verify ee-cert");
+
+ # Failure because root cert not present in CApath
+ ok(!verify("ca-root2", "any", curdir(), [], "-show_chain"));
+}, create => 1, cleanup => 1;
diff --git a/test/recipes/60-test_x509_time.t b/test/recipes/60-test_x509_time.t
new file mode 100644
index 000000000000..a04d395b1b0d
--- /dev/null
+++ b/test/recipes/60-test_x509_time.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_x509_time", "x509_time_test");
diff --git a/test/recipes/61-test_bio_prefix.t b/test/recipes/61-test_bio_prefix.t
new file mode 100644
index 000000000000..c77bdbfa3244
--- /dev/null
+++ b/test/recipes/61-test_bio_prefix.t
@@ -0,0 +1,55 @@
+#! /usr/bin/env perl
+# Copyright 2017-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT data_file);
+use File::Compare qw(compare_text);
+
+setup('test_bio_prefix');
+
+my %input_result = (
+ 'in1.txt' => [ 'args1.pl', 'out1.txt' ],
+ 'in2.txt' => [ 'args2.pl', 'out2.txt' ],
+);
+
+plan tests => 2 * scalar(keys %input_result);
+
+foreach (sort keys %input_result) {
+ SKIP: {
+ my $input_path = data_file($_);
+ my $args_path = data_file($input_result{$_}->[0]);
+ my $expected_path = data_file($input_result{$_}->[1]);
+ my $result_path = "test_bio_prefix-$_-stdout";
+ my @args = do $args_path;
+
+ skip "Problem prefixing $_", 1
+ unless ok(run(test([ 'bio_prefix_text', @args ],
+ stdin => $input_path, stdout => $result_path)),
+ "prefixing $_ with args " . join(' ', @args));
+ is(compare_text($result_path, $expected_path, \&cmp_line), 0,
+ "comparing the dump of $_ with $expected_path");
+ }
+}
+
+sub cmp_line {
+ return 0 if scalar @_ == 0;
+
+ if (scalar @_ != 2) {
+ diag "Lines to compare less than 2: ", scalar @_;
+ return -1;
+ }
+
+ $_[0] =~ s|\R$||;
+ $_[1] =~ s|\R$||;
+ my $r = $_[0] cmp $_[1];
+
+ diag "Lines differ:\n<: $_[0]\n>: $_[1]\n" unless $r == 0;
+ return $r;
+}
diff --git a/test/recipes/61-test_bio_prefix_data/args1.pl b/test/recipes/61-test_bio_prefix_data/args1.pl
new file mode 100644
index 000000000000..e7038dc50d28
--- /dev/null
+++ b/test/recipes/61-test_bio_prefix_data/args1.pl
@@ -0,0 +1,6 @@
+(
+ -n => 2,
+ -i => '1:32',
+ -p => '1:FOO',
+ -i => '0:3'
+);
diff --git a/test/recipes/61-test_bio_prefix_data/args2.pl b/test/recipes/61-test_bio_prefix_data/args2.pl
new file mode 100644
index 000000000000..2fe2b7bb63c1
--- /dev/null
+++ b/test/recipes/61-test_bio_prefix_data/args2.pl
@@ -0,0 +1,3 @@
+(
+ -n => 1,
+);
diff --git a/test/recipes/61-test_bio_prefix_data/in1.txt b/test/recipes/61-test_bio_prefix_data/in1.txt
new file mode 100644
index 000000000000..257cc5642cb1
--- /dev/null
+++ b/test/recipes/61-test_bio_prefix_data/in1.txt
@@ -0,0 +1 @@
+foo
diff --git a/test/recipes/61-test_bio_prefix_data/in2.txt b/test/recipes/61-test_bio_prefix_data/in2.txt
new file mode 100644
index 000000000000..5716ca5987cb
--- /dev/null
+++ b/test/recipes/61-test_bio_prefix_data/in2.txt
@@ -0,0 +1 @@
+bar
diff --git a/test/recipes/61-test_bio_prefix_data/out1.txt b/test/recipes/61-test_bio_prefix_data/out1.txt
new file mode 100644
index 000000000000..484e514ba48b
--- /dev/null
+++ b/test/recipes/61-test_bio_prefix_data/out1.txt
@@ -0,0 +1 @@
+ FOO foo
diff --git a/test/recipes/61-test_bio_prefix_data/out2.txt b/test/recipes/61-test_bio_prefix_data/out2.txt
new file mode 100644
index 000000000000..5716ca5987cb
--- /dev/null
+++ b/test/recipes/61-test_bio_prefix_data/out2.txt
@@ -0,0 +1 @@
+bar
diff --git a/test/recipes/61-test_bio_readbuffer.t b/test/recipes/61-test_bio_readbuffer.t
new file mode 100644
index 000000000000..e10ab746ae38
--- /dev/null
+++ b/test/recipes/61-test_bio_readbuffer.t
@@ -0,0 +1,29 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw(:DEFAULT srctop_file);
+
+setup('test_bio_readbuffer');
+
+my $pemfile = srctop_file("test", "certs", "leaf.pem");
+my $derfile = 'readbuffer_leaf.der';
+
+plan tests => 3;
+
+ok(run(app([ 'openssl', 'x509', '-inform', 'PEM', '-in', $pemfile,
+ '-outform', 'DER', '-out', $derfile])),
+ "Generate a DER certificate");
+
+ok(run(test(["bio_readbuffer_test", $derfile])),
+ "Running bio_readbuffer_test $derfile");
+
+ok(run(test(["bio_readbuffer_test", $pemfile])),
+ "Running bio_readbuffer_test $pemfile");
diff --git a/test/recipes/65-test_cmp_asn.t b/test/recipes/65-test_cmp_asn.t
new file mode 100644
index 000000000000..80f64143198c
--- /dev/null
+++ b/test/recipes/65-test_cmp_asn.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2007-2019 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_cmp_asn");
+
+plan skip_all => "This test is not supported in a no-cmp build"
+ if disabled("cmp");
+
+plan tests => 1;
+
+ok(run(test(["cmp_asn_test"])));
diff --git a/test/recipes/65-test_cmp_client.t b/test/recipes/65-test_cmp_client.t
new file mode 100644
index 000000000000..c6c66fe54c31
--- /dev/null
+++ b/test/recipes/65-test_cmp_client.t
@@ -0,0 +1,42 @@
+#! /usr/bin/env perl
+# Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT data_file srctop_file srctop_dir bldtop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_cmp_client");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan skip_all => "This test is not supported in a no-cmp or no-ec build"
+ if disabled("cmp") || disabled("ec");
+
+plan tests => 2 + ($no_fips ? 0 : 1); # fips test
+
+my @basic_cmd = ("cmp_client_test",
+ data_file("server.key"),
+ data_file("server.crt"),
+ data_file("client.key"),
+ data_file("client.crt"),
+ data_file("client.csr"));
+
+ok(run(test([@basic_cmd, "none"])));
+
+ok(run(test([@basic_cmd, "default", srctop_file("test", "default.cnf")])));
+
+unless ($no_fips) {
+ ok(run(test([@basic_cmd, "fips", srctop_file("test", "fips-and-base.cnf")])));
+}
diff --git a/test/recipes/65-test_cmp_client_data/client.crt b/test/recipes/65-test_cmp_client_data/client.crt
new file mode 100644
index 000000000000..c74d52e96586
--- /dev/null
+++ b/test/recipes/65-test_cmp_client_data/client.crt
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB6DCCAUkCCQD6PZPVVOpOKTAKBggqhkjOPQQDAjA4MQswCQYDVQQGEwJERTET
+MBEGA1UECgwKU2llbWVucyBBRzEUMBIGA1UEAwwLdGVzdCBjbGllbnQwHhcNMTkw
+NzI2MTE1OTQyWhcNMTkwODI1MTE1OTQyWjA4MQswCQYDVQQGEwJERTETMBEGA1UE
+CgwKU2llbWVucyBBRzEUMBIGA1UEAwwLdGVzdCBjbGllbnQwgZswEAYHKoZIzj0C
+AQYFK4EEACMDgYYABAHClvNEi0aAVuM3CrR5Pwj3TFKHRXfd04MCSs/p9bzMFlMT
+l6SGCGbFh9ZbU+J2jXYGBtTSSs4O/27lqzXCS8DjQAHMrFq69i5VuUmGXe7jQcfY
+iyKIb+3It0GstBa0hDssxWvBUJADMd+p6R0pA/XjCG0ZqkkHwdzCxEby/oCZPp1g
+3jAKBggqhkjOPQQDAgOBjAAwgYgCQgEJiQwLbHH6E9dLpy+BsZ3m+nfwSvPulS/n
+DMm6ZRi57iItAey9eywxpsKV7DKT+SPjjlAt+l083Smz42Gwpdt+cAJCAXQ2NHqm
+hPYo8Qk5a+Y15PYqm5g5qZ1b5E2FtRHNK8EJzSMrQEzDiI3jO0sgcvzr7kwOsZ7X
+Z8y+DTE4HOoYo6oo
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_client_data/client.csr b/test/recipes/65-test_cmp_client_data/client.csr
new file mode 100644
index 000000000000..c9b6ad4cfb11
--- /dev/null
+++ b/test/recipes/65-test_cmp_client_data/client.csr
Binary files differ
diff --git a/test/recipes/65-test_cmp_client_data/client.key b/test/recipes/65-test_cmp_client_data/client.key
new file mode 100644
index 000000000000..56ad079927d0
--- /dev/null
+++ b/test/recipes/65-test_cmp_client_data/client.key
@@ -0,0 +1,7 @@
+-----BEGIN EC PRIVATE KEY-----
+MIHcAgEBBEIAyT6geQkerhMGSj1ZG0ZhFa1Q5kYEBtnEE/bs5Gdm9L3v0OukExzm
+Nx1XJATGBnCyOM5IzPw1TWXT+BNhSxJYtvOgBwYFK4EEACOhgYkDgYYABAHClvNE
+i0aAVuM3CrR5Pwj3TFKHRXfd04MCSs/p9bzMFlMTl6SGCGbFh9ZbU+J2jXYGBtTS
+Ss4O/27lqzXCS8DjQAHMrFq69i5VuUmGXe7jQcfYiyKIb+3It0GstBa0hDssxWvB
+UJADMd+p6R0pA/XjCG0ZqkkHwdzCxEby/oCZPp1g3g==
+-----END EC PRIVATE KEY-----
diff --git a/test/recipes/65-test_cmp_client_data/server.crt b/test/recipes/65-test_cmp_client_data/server.crt
new file mode 100644
index 000000000000..ed1d43333eb3
--- /dev/null
+++ b/test/recipes/65-test_cmp_client_data/server.crt
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICpTCCAY2gAwIBAgIBATANBgkqhkiG9w0BAQUFADAWMRQwEgYDVQQKDAtvcGVu
+c3NsX2NtcDAeFw0xNzEyMjAxMzA0MDBaFw0xODEyMjAxMzA0MDBaMBYxFDASBgNV
+BAoMC29wZW5zc2xfY21wMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZAJHnq0ypW/PZccrWj
+o7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVVpLicMnItNFElfCoh
+BzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuWq/vWW9r96/gBKKdd
+mj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SOZf9bH1olBVsmBMsU
+shFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6GvZ/i5KOhaqgJCnRKd
+HHzijz9cLec5p9NSOuC1OwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQDGUXpFCBkV
+WgPrBfZyBwt6VCjWB/e67q4IdcKMfDa4hwSquah1AyXHI0PlC/qitnoSx2+7f7pY
+TEOay/3eEPUl1J5tdPF2Vg56Dw8jdhSkMwO7bXKDEE3R6o6jaa4ECgxwQtdGHmNU
+A41PgKX76yEXku803ptO39/UR7i7Ye3MbyAmWE+PvixJYUbxd3fqz5fsaJqTCzAy
+AT9hrr4uu8J7m3LYaYXo4LVL4jw5UsP5bIYtpmmEBfy9GhpUqH5/LzBNij7y3ziE
+T59wHkzawAQDHsBPuCe07DFtlzqWWvaih0TQAw9MZ2tbyK9jt7P80Rqt9CwpM/i9
+jQYqSl/ix5hn
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_client_data/server.key b/test/recipes/65-test_cmp_client_data/server.key
new file mode 100644
index 000000000000..232426679845
--- /dev/null
+++ b/test/recipes/65-test_cmp_client_data/server.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZA
+JHnq0ypW/PZccrWjo7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVV
+pLicMnItNFElfCohBzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuW
+q/vWW9r96/gBKKddmj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SO
+Zf9bH1olBVsmBMsUshFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6Gv
+Z/i5KOhaqgJCnRKdHHzijz9cLec5p9NSOuC1OwIDAQABAoIBAGiYVO+rIfqc38jG
+sMxJED2NSBFnvE7k2LoeEgktBA0daxQgziYXtIkOXC3jkwAw1RXLuGH5RTDuJt3/
+LX6nsCW3NCCB6lTGERNaJyKg4dLHpzA+juY3/2P/MKHD1bGncpV7jNk2fpV7gBY1
+pu0wld1Oi+S3DPCaxs3w6Zl39Y4Z7oSNf6DRO5lGN3Asc8TSVjIOWpAl8LIg+P2B
+ZvFeHRANVXaV9YmF2uEi7iMgH4vGrK2svsmM9VThVO4ArGcTRTvGYn7aw3/H4Pt+
+lYuhERdpkKBT0tCgIpO5IJXMl4/5RSDTtcBwiJcReN5IHUAItBIPSHcMflNSKG/I
+aQf4u0ECgYEA8+PAyzn096Y2UrKzE75yuadCveLjsUWx2NN5ZMohQru99F4k7Pab
+/Te4qOe5zlxHAPK3LRwvbwUWo5mLfs45wFrSgZoRlYcCuL+JaX0y2oXMMF9E+UkY
+tljMt/HpLo1SfSjN2Sae4LVhC7rWJ43LtyRepptzBPGqd26eLPGAMr8CgYEA7P8u
+RGkMOrMzEKAb0A9smrzq2xW88T1VejqEt6R8mUcNt8PFHMgjuzVU4zDysrlb7G/0
+VSkQWnJxBh1yNGc1Av7YgwicIgApr4ty0hZhLcnKX2VrNw+L/sSe/cnwVAc6RtPK
+RR6xQubuLlrCGcbYXmyn5Jv+nlY0S3uCyDFHqIUCgYAwtpLxhJf7RwWeqva9wNJl
+ZpUcHE9iPwtwxXx/tyfBjoI4Zv11HyS1BQYrJm2kXCYKeHBB4FlREXEeKDMGluZO
+F1XocP+GIDtY71jg6xLXNtY76yt5pzH6ae4p53WtyKhrO1UyRFaDh3bkwuK3b8j6
+wZbuLCpjGGn2BPAvBeWXPQKBgEewKN6op/pZmmi9Bay5/bAQ1TnQKYcPdnuyl9K0
+/ruespeTsFw0bhqC11qhw8gsKZIri0z3TusNEwM2hQU08uQlEnkQcaoXQoTHOcQy
+4NJo575Tf0r4ePBnqXA7VWcViJtEFTszPYtvLzz2VyBU9b4aP+73AN4EVW0/vx+v
+SG3BAoGBAMzESFA2TXwUFmozK5zowIszc995Xqpi7mXKk77WESOpoS1dQ1wF1dSg
+XOwxzFoYovLxcc1K9lqOrod8BV+qGuEfc/PIJ2aiXjvEDeZYX2eWaANNmj4OSLoJ
+MNYj9tZxbq56slD7snf7AgUBnwKz0Pj6H6UsbE3gdJqZWCDyw/bB
+-----END RSA PRIVATE KEY-----
diff --git a/test/recipes/65-test_cmp_ctx.t b/test/recipes/65-test_cmp_ctx.t
new file mode 100644
index 000000000000..d3476736408b
--- /dev/null
+++ b/test/recipes/65-test_cmp_ctx.t
@@ -0,0 +1,24 @@
+#! /usr/bin/env perl
+# Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Simple;
+use OpenSSL::Test::Utils;
+
+setup("test_cmp_ctx");
+
+plan skip_all => "This test is not supported in a no-cmp build"
+ if disabled("cmp");
+
+plan tests => 1;
+
+ok(run(test(["cmp_ctx_test", srctop_file("test", "certs", "ee-cert.pem")])));
diff --git a/test/recipes/65-test_cmp_hdr.t b/test/recipes/65-test_cmp_hdr.t
new file mode 100644
index 000000000000..5737ace589d6
--- /dev/null
+++ b/test/recipes/65-test_cmp_hdr.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_cmp_hdr");
+
+plan skip_all => "This test is not supported in a no-cmp build"
+ if disabled("cmp");
+
+plan tests => 1;
+
+ok(run(test(["cmp_hdr_test"])));
diff --git a/test/recipes/65-test_cmp_msg.t b/test/recipes/65-test_cmp_msg.t
new file mode 100644
index 000000000000..d104576a9d60
--- /dev/null
+++ b/test/recipes/65-test_cmp_msg.t
@@ -0,0 +1,41 @@
+#! /usr/bin/env perl
+# Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT data_file srctop_file srctop_dir bldtop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_cmp_msg");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan skip_all => "This test is not supported in a no-cmp build"
+ if disabled("cmp");
+
+plan tests => 2 + ($no_fips ? 0 : 1); #fips test
+
+my @basic_cmd = ("cmp_msg_test",
+ data_file("new.key"),
+ data_file("server.crt"),
+ data_file("pkcs10.der"));
+
+ok(run(test([@basic_cmd, "none"])));
+
+ok(run(test([@basic_cmd, "default", srctop_file("test", "default.cnf")])));
+
+unless ($no_fips) {
+ ok(run(test([@basic_cmd,
+ "fips", srctop_file("test", "fips-and-base.cnf")])));
+}
diff --git a/test/recipes/65-test_cmp_msg_data/new.key b/test/recipes/65-test_cmp_msg_data/new.key
new file mode 100644
index 000000000000..990b20d64237
--- /dev/null
+++ b/test/recipes/65-test_cmp_msg_data/new.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDIHp0kAPnBtK1B
+/gcTQSGV20NKE1VD+OEO7qzYprfQV0/iaXX5zY/Ls4NRKNIJ6BdoEg5cID5HTNoE
+Andl6pfHdSsT0+JdodEZlyg+1fiYr0g4eEh3HA9Rrpx5I4mfhwdj6nRwUun/ludQ
+SungipsvVsx3i/x8XEnRkMYlqF8uK6udhTJqVo0Icr6Erb5Fp5GA+Wxd+JT+/CGG
+MWF2GLFs+byX5L7bE3JJXUkADOtS8QN01nSIG+5VxLaaWFIpOG3ll6D7QLruRhir
+Ez0JVkLBxX9pJQibCN4Ww0wmyX+cXIRpy7q9fPSuO8vA/NMB5VhnLn3YbC9qRY62
+IN1qntYlAgMBAAECggEAJgHieHcS+F43VcRIVbjWBx8orYX0eL9pByv/efpYCOK8
+UlUTSglnmRmUBDMLiUQiReq//XFGQsZu1boeMSYYA5LWRqLEaGIWU5To2N5Mo7sO
+rWLy6GRU6H+QSlWcisbbeXeK+9ZTiO6BKjfAKZxJkvkaRk44+umQP5QOfhJ3WU4t
+0wkwYOfm8uOEg48yZTgjUVzhIORHAq5RHH/5goLrNwO2bIqOHOqzSrXGQJJ+oDaL
+JykccyVAElUGd5JaSpm5z0a43C4A5q770ppiByGxJv1L3ID1hkik1ZpWfMtwPH1Y
+FIAINqlhVoeAEwOCpL9axZ5OCGQrgWLNV4LfJyG4NQKBgQDyHGDyp+ZpMJRxCtDt
+8QWtthuoOfwmXOR81ZJGD3GA8rEGcG1zH4F+B4Z76/Kwb/uabH9FPURS+kcDpsuM
+9Avx88JTg6YFhtpQQCcmhY7awgc+B4ve95ziz6DOMhCD8Yb36UjM7B1jY+zVLIYt
+yQhZOKQEzPFqfPMrzEDsabT+GwKBgQDTmY35/l13zYi21xmCL+309KzjbZEyX0NF
+SE2JjIdwcWvKSMPFlWv7l1ssIg1fF0Hu7mEbLB74eUU0fe4D0LPeoEX3ihjYej4N
+M/EdKv7+WhCr11lnWwWTM+aeeFAmwdD95Gdvv0hTnG/GqxiOt19HhGhMHJueAKDL
+Tmci9hPAvwKBgQCkjbM62fEZp4IMvtw4DKveYDq2AQsnC9XkHsh3Q8HScaDuDnXl
+XBGIFhdKnJhrYQEx+PIbnkOU3jRr/+6zE6AWx6VZW834TaqOBrxVS0tH1b5UY46m
+ccc4xQO3gYGGHB+u2ei4Fvb2eZEbZlKgRdWdxoh8FssypFAmgYHS7Rmt5wKBgEYu
+symM1aGL2WGTnJFSpmFN2h4g1DzZ3e0X2yfZJX8FD5RraAub0NIE1Kehr7+vbh36
+kNi7XJZbWrnbXtuDGHWpwSsmcbEzcmtcpAdhoGvqoYbtiWi/huzZFQ/Qpf0E4fWk
+ES6+ShX5WBWT4DRN29tTrmg4QOE6IhrsqUauScTvAoGAKxEzsSHPgZm5rGOfVPcI
+cFeSJFCsaPfVk97T9aNievhMMChKBV8vT3Unlk0RObcsMweo6OMmfnRxrHhgfVz8
+elpLOlzEHfELlR8HELvxCeWWzuPgNCAPcG3BmjRnm8g5xmmkfQuRKlkQTcGbHotI
+wIPT+bHg3fjx7CemHl+rZeo=
+-----END PRIVATE KEY-----
diff --git a/test/recipes/65-test_cmp_msg_data/pkcs10.der b/test/recipes/65-test_cmp_msg_data/pkcs10.der
new file mode 100644
index 000000000000..510a4fc5b04f
--- /dev/null
+++ b/test/recipes/65-test_cmp_msg_data/pkcs10.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_msg_data/server.crt b/test/recipes/65-test_cmp_msg_data/server.crt
new file mode 100644
index 000000000000..ed1d43333eb3
--- /dev/null
+++ b/test/recipes/65-test_cmp_msg_data/server.crt
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICpTCCAY2gAwIBAgIBATANBgkqhkiG9w0BAQUFADAWMRQwEgYDVQQKDAtvcGVu
+c3NsX2NtcDAeFw0xNzEyMjAxMzA0MDBaFw0xODEyMjAxMzA0MDBaMBYxFDASBgNV
+BAoMC29wZW5zc2xfY21wMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZAJHnq0ypW/PZccrWj
+o7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVVpLicMnItNFElfCoh
+BzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuWq/vWW9r96/gBKKdd
+mj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SOZf9bH1olBVsmBMsU
+shFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6GvZ/i5KOhaqgJCnRKd
+HHzijz9cLec5p9NSOuC1OwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQDGUXpFCBkV
+WgPrBfZyBwt6VCjWB/e67q4IdcKMfDa4hwSquah1AyXHI0PlC/qitnoSx2+7f7pY
+TEOay/3eEPUl1J5tdPF2Vg56Dw8jdhSkMwO7bXKDEE3R6o6jaa4ECgxwQtdGHmNU
+A41PgKX76yEXku803ptO39/UR7i7Ye3MbyAmWE+PvixJYUbxd3fqz5fsaJqTCzAy
+AT9hrr4uu8J7m3LYaYXo4LVL4jw5UsP5bIYtpmmEBfy9GhpUqH5/LzBNij7y3ziE
+T59wHkzawAQDHsBPuCe07DFtlzqWWvaih0TQAw9MZ2tbyK9jt7P80Rqt9CwpM/i9
+jQYqSl/ix5hn
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_protect.t b/test/recipes/65-test_cmp_protect.t
new file mode 100644
index 000000000000..631603df7cf8
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect.t
@@ -0,0 +1,51 @@
+#! /usr/bin/env perl
+# Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT data_file srctop_file srctop_dir bldtop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_cmp_protect");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan skip_all => "This test is not supported in a no-cmp build"
+ if disabled("cmp");
+
+plan skip_all => "This test is not supported in a shared library build on Windows"
+ if $^O eq 'MSWin32' && !disabled("shared");
+
+plan tests => 2 + ($no_fips ? 0 : 1); #fips test
+
+my @basic_cmd = ("cmp_protect_test",
+ data_file("server.pem"),
+ data_file("IR_protected.der"),
+ data_file("IR_unprotected.der"),
+ data_file("IP_PBM.der"),
+ data_file("server.crt"),
+ data_file("server.pem"),
+ data_file("EndEntity1.crt"),
+ data_file("EndEntity2.crt"),
+ data_file("Root_CA.crt"),
+ data_file("Intermediate_CA.crt"));
+
+ok(run(test([@basic_cmd, "none"])));
+
+ok(run(test([@basic_cmd, "default", srctop_file("test", "default.cnf")])));
+
+unless ($no_fips) {
+ ok(run(test([@basic_cmd,
+ "fips", srctop_file("test", "fips-and-base.cnf")])));
+}
diff --git a/test/recipes/65-test_cmp_protect_data/EndEntity1.crt b/test/recipes/65-test_cmp_protect_data/EndEntity1.crt
new file mode 100644
index 000000000000..4e0544988912
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/EndEntity1.crt
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICnDCCAYSgAwIBAgIBAzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwdSb290
+IENBMB4XDTE3MTEwODE1NDgwMFoXDTE4MTEwODExMTkwMFowETEPMA0GA1UEAxMG
+Q2xpZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtNiWJufEotHe
+p6E/4b0laX7K1NRamNoUokLIsq78RoBieBXaGxIdbT6zmhLnLmZdb0UN3v7FUP75
+rqPN2yyj3TbS4o5ilh5El8bDDAPhW5lthCddvH/uBziRAM5oIB4xxOumNbgHpLUT
+Clh49sdXd4ydYpCTWld5emRouBmMUeP/0EkyWMBIrHGSBxrqtFVRXhxvVHImQv6Z
+hIKql7dCVCZbhUtxw6sLxIGL4xlhKoM2o31k4I/9tjZrWSZZ7KAIOlOLrjxZc/bQ
+MwvxVUgS+C+iXzhCY8v+N/K37jwtAAk4C1aOGv/VygNcN0C/ynfKSzFmtnfei4+3
+6GC7HtFzewIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQB3GYpPSCCYsJM5owKcODr/
+I1aJ8jQ+u5jCKjvYLp6Cnbr4AbRXzvKuMyV6UfIAQbrGOxAClvX++5/ZQbhY+TxN
+iiUM3yr5yYCLqj4MeYHhJ3gOzcppAO9LQ9V7eA8C830giZMm3cpApFSLP8CpwNUD
+W/fgoQfaOae5IYPZdea88Gmt5RVNbtHgVqtm4ifTQo577kfxTeh20s+M6pgYW3/R
+vftXy2ITEtk/j3NcRvOyZ7Bu1mAg7wNeUjL+gDWAaxs16LsWsCsUGwfr/Z2Rq1CF
+zB0XwIyigkVLDLqDzUShcw0Eb/zYy2KXsxNWA2tb27mw+T+tmmOszpn7JjLrlVks
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_protect_data/EndEntity2.crt b/test/recipes/65-test_cmp_protect_data/EndEntity2.crt
new file mode 100644
index 000000000000..ba062107941b
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/EndEntity2.crt
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3zCCAZSgAwIBAgIBBjAKBggqhkjOPQQDAzAVMRMwEQYDVQQDEwpad2lzY2hl
+bkNBMB4XDTE3MTEwODE2MDUwMFoXDTE4MTEwODExMTkwMFowEjEQMA4GA1UEAxMH
+Q2xpZW50MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALTYlibnxKLR
+3qehP+G9JWl+ytTUWpjaFKJCyLKu/EaAYngV2hsSHW0+s5oS5y5mXW9FDd7+xVD+
++a6jzdsso9020uKOYpYeRJfGwwwD4VuZbYQnXbx/7gc4kQDOaCAeMcTrpjW4B6S1
+EwpYePbHV3eMnWKQk1pXeXpkaLgZjFHj/9BJMljASKxxkgca6rRVUV4cb1RyJkL+
+mYSCqpe3QlQmW4VLccOrC8SBi+MZYSqDNqN9ZOCP/bY2a1kmWeygCDpTi648WXP2
+0DML8VVIEvgvol84QmPL/jfyt+48LQAJOAtWjhr/1coDXDdAv8p3yksxZrZ33ouP
+t+hgux7Rc3sCAwEAAaMNMAswCQYDVR0TBAIwADAKBggqhkjOPQQDAwM5ADA2AhkA
+qASBLwTauET6FGp/EBe7b/99jTyGB861AhkA5ILGkLX4KmjRkTcNxJ3JKB1Sumya
+cbqF
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_protect_data/IP_PBM.der b/test/recipes/65-test_cmp_protect_data/IP_PBM.der
new file mode 100644
index 000000000000..d0890712e6db
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/IP_PBM.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_protect_data/IP_PBM.txt b/test/recipes/65-test_cmp_protect_data/IP_PBM.txt
new file mode 100644
index 000000000000..177f2601a318
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/IP_PBM.txt
@@ -0,0 +1 @@
+Reference#: 3078Secret Value: insta \ No newline at end of file
diff --git a/test/recipes/65-test_cmp_protect_data/IR_protected.der b/test/recipes/65-test_cmp_protect_data/IR_protected.der
new file mode 100644
index 000000000000..ce0a7a46dcf2
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/IR_protected.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_protect_data/IR_unprotected.der b/test/recipes/65-test_cmp_protect_data/IR_unprotected.der
new file mode 100644
index 000000000000..41a649691ff2
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/IR_unprotected.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_protect_data/Intermediate_CA.crt b/test/recipes/65-test_cmp_protect_data/Intermediate_CA.crt
new file mode 100644
index 000000000000..3416cdb9593e
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/Intermediate_CA.crt
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCBv6ADAgECAgEFMA0GCSqGSIb3DQEBDQUAMBIxEDAOBgNVBAMTB1Jvb3Qg
+Q0EwHhcNMTcxMTA4MTYwNDAwWhcNMTgxMTA4MTExOTAwWjAVMRMwEQYDVQQDEwpa
+d2lzY2hlbkNBMEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE9bJcmZWj2CmO6aW8
+9Qylkj1WgPREf9/s4Z1VYqFODeJnebPXFBLVH/aoGxnds9E9oxAwDjAMBgNVHRME
+BTADAQH/MA0GCSqGSIb3DQEBDQUAA4IBAQBwQD4NTIWMMevEsSrBpKjjQEWc81Ct
+eXoyAXr/d8wgVyuIZe9C7ekxPQCwowcmONUyeYQv9N2eYpdhkAQuk6DS4+aDR4s7
+I6rg5R5CUGGla5NUxM0BKIS3ZIezvEGlP1NFN+HBgJI7ZIIYQ3zDr0EYgo4J7Xvm
+5p58pcCZSsbVyKwKs6T+rTzOVVmJ2L1bWzywZEDmzxMkPmA6fP9XtB4Kx/b4oviw
+TEQl3Jf9EkBvBkKX2rRJs7aMJo4MwOnE4HHOV5GAQqhGrXltsuXmVfIQPtRN4xlK
+oNf/FukI1NcBh4A/iY4PmbyxHYmKy6qjFjng2u2VFtH15HDT4XlLP5gq
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_protect_data/Root_CA.crt b/test/recipes/65-test_cmp_protect_data/Root_CA.crt
new file mode 100644
index 000000000000..6ccf362546ad
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/Root_CA.crt
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICrzCCAZegAwIBAgIBATANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwdSb290
+IENBMB4XDTE3MTEwODE1NDUwMFoXDTE4MTEwODExMTkwMFowEjEQMA4GA1UEAxMH
+Um9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALiHdLAD2Wu+
+C5UDMK6WCL53Wz0CeU61RRRlGEVSqHrQOWnffgVutgftzsddxxgJJyGsqKo1B+nQ
+vapyJyugYJWYNQLN5+iffe4y1UBPnHMQFHiZ4cNR6PB0eHja2wpcN3QmJzOcpRYE
+xf+QQwJNFqhRi0cZGfd/JfFi/ybJalqClbnYMPcJo7g6S7M3lWbOnEOUWnbM2EBp
+h849mC+kd80vXcRcb7U/3MJKK3Ee72TDye5/kWFf9zcxj2ac0oCiS66JKYobiVJr
+NmbGM0I9U6T6ejXVUu2J3pGUFlcf3RCUYf1aWhkmzEzbm/FGMRJ7vVyCXm/OWIh9
+bqtwH5YfljsCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
+AQEAF7tSa9oVan7kPR5/TXB330Ca1xQt5C38afaJbacR9mM8ZkL0HceQTuJGrnAR
+4kK7CaB5iraU6Lxyql7drq8aixz/7TXna6c172J6HxDeFhQMeSt1LAh7XN5Ir6Y6
+iO7XD5I5lw3Xv6qvhoD0ktkNk/WtF7aBw2ZAi+RcDMgWzWjoS4WqMbvWEHw10j9b
+s8R0YG4yi6wb89UNIMfQtC2XviHKcRS9MzIJQHw73r2EY2t6o9TO+5ukHYDB6/Zo
+/CLXu21MzsFvhupHgX6zdptU324tq2za1+4LvmOHSW+D36jEPT22SndXmHo5VmAn
+6bQ52MhBI0rrWwju9aBpVzsUUg==
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_protect_data/server.crt b/test/recipes/65-test_cmp_protect_data/server.crt
new file mode 100644
index 000000000000..ed1d43333eb3
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/server.crt
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICpTCCAY2gAwIBAgIBATANBgkqhkiG9w0BAQUFADAWMRQwEgYDVQQKDAtvcGVu
+c3NsX2NtcDAeFw0xNzEyMjAxMzA0MDBaFw0xODEyMjAxMzA0MDBaMBYxFDASBgNV
+BAoMC29wZW5zc2xfY21wMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZAJHnq0ypW/PZccrWj
+o7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVVpLicMnItNFElfCoh
+BzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuWq/vWW9r96/gBKKdd
+mj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SOZf9bH1olBVsmBMsU
+shFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6GvZ/i5KOhaqgJCnRKd
+HHzijz9cLec5p9NSOuC1OwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQDGUXpFCBkV
+WgPrBfZyBwt6VCjWB/e67q4IdcKMfDa4hwSquah1AyXHI0PlC/qitnoSx2+7f7pY
+TEOay/3eEPUl1J5tdPF2Vg56Dw8jdhSkMwO7bXKDEE3R6o6jaa4ECgxwQtdGHmNU
+A41PgKX76yEXku803ptO39/UR7i7Ye3MbyAmWE+PvixJYUbxd3fqz5fsaJqTCzAy
+AT9hrr4uu8J7m3LYaYXo4LVL4jw5UsP5bIYtpmmEBfy9GhpUqH5/LzBNij7y3ziE
+T59wHkzawAQDHsBPuCe07DFtlzqWWvaih0TQAw9MZ2tbyK9jt7P80Rqt9CwpM/i9
+jQYqSl/ix5hn
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_protect_data/server.pem b/test/recipes/65-test_cmp_protect_data/server.pem
new file mode 100644
index 000000000000..232426679845
--- /dev/null
+++ b/test/recipes/65-test_cmp_protect_data/server.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZA
+JHnq0ypW/PZccrWjo7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVV
+pLicMnItNFElfCohBzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuW
+q/vWW9r96/gBKKddmj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SO
+Zf9bH1olBVsmBMsUshFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6Gv
+Z/i5KOhaqgJCnRKdHHzijz9cLec5p9NSOuC1OwIDAQABAoIBAGiYVO+rIfqc38jG
+sMxJED2NSBFnvE7k2LoeEgktBA0daxQgziYXtIkOXC3jkwAw1RXLuGH5RTDuJt3/
+LX6nsCW3NCCB6lTGERNaJyKg4dLHpzA+juY3/2P/MKHD1bGncpV7jNk2fpV7gBY1
+pu0wld1Oi+S3DPCaxs3w6Zl39Y4Z7oSNf6DRO5lGN3Asc8TSVjIOWpAl8LIg+P2B
+ZvFeHRANVXaV9YmF2uEi7iMgH4vGrK2svsmM9VThVO4ArGcTRTvGYn7aw3/H4Pt+
+lYuhERdpkKBT0tCgIpO5IJXMl4/5RSDTtcBwiJcReN5IHUAItBIPSHcMflNSKG/I
+aQf4u0ECgYEA8+PAyzn096Y2UrKzE75yuadCveLjsUWx2NN5ZMohQru99F4k7Pab
+/Te4qOe5zlxHAPK3LRwvbwUWo5mLfs45wFrSgZoRlYcCuL+JaX0y2oXMMF9E+UkY
+tljMt/HpLo1SfSjN2Sae4LVhC7rWJ43LtyRepptzBPGqd26eLPGAMr8CgYEA7P8u
+RGkMOrMzEKAb0A9smrzq2xW88T1VejqEt6R8mUcNt8PFHMgjuzVU4zDysrlb7G/0
+VSkQWnJxBh1yNGc1Av7YgwicIgApr4ty0hZhLcnKX2VrNw+L/sSe/cnwVAc6RtPK
+RR6xQubuLlrCGcbYXmyn5Jv+nlY0S3uCyDFHqIUCgYAwtpLxhJf7RwWeqva9wNJl
+ZpUcHE9iPwtwxXx/tyfBjoI4Zv11HyS1BQYrJm2kXCYKeHBB4FlREXEeKDMGluZO
+F1XocP+GIDtY71jg6xLXNtY76yt5pzH6ae4p53WtyKhrO1UyRFaDh3bkwuK3b8j6
+wZbuLCpjGGn2BPAvBeWXPQKBgEewKN6op/pZmmi9Bay5/bAQ1TnQKYcPdnuyl9K0
+/ruespeTsFw0bhqC11qhw8gsKZIri0z3TusNEwM2hQU08uQlEnkQcaoXQoTHOcQy
+4NJo575Tf0r4ePBnqXA7VWcViJtEFTszPYtvLzz2VyBU9b4aP+73AN4EVW0/vx+v
+SG3BAoGBAMzESFA2TXwUFmozK5zowIszc995Xqpi7mXKk77WESOpoS1dQ1wF1dSg
+XOwxzFoYovLxcc1K9lqOrod8BV+qGuEfc/PIJ2aiXjvEDeZYX2eWaANNmj4OSLoJ
+MNYj9tZxbq56slD7snf7AgUBnwKz0Pj6H6UsbE3gdJqZWCDyw/bB
+-----END RSA PRIVATE KEY-----
diff --git a/test/recipes/65-test_cmp_server.t b/test/recipes/65-test_cmp_server.t
new file mode 100644
index 000000000000..ba09fbe924e3
--- /dev/null
+++ b/test/recipes/65-test_cmp_server.t
@@ -0,0 +1,40 @@
+#! /usr/bin/env perl
+# Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2020
+# Copyright Siemens AG 2015-2020
+#
+# 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT data_file srctop_file srctop_dir bldtop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_cmp_server");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan skip_all => "This test is not supported in a no-cmp build"
+ if disabled("cmp");
+
+plan skip_all => "This test is not supported in a no-ec build"
+ if disabled("ec");
+
+plan tests => 2 + ($no_fips ? 0 : 1); #fips test
+
+my @basic_cmd = ("cmp_server_test", data_file("CR_protected_PBM_1234.der"));
+
+ok(run(test([@basic_cmd, "none"])));
+
+ok(run(test([@basic_cmd, "default", srctop_file("test", "default.cnf")])));
+
+unless ($no_fips) {
+ ok(run(test([@basic_cmd, "fips", srctop_file("test", "fips-and-base.cnf")])));
+}
diff --git a/test/recipes/65-test_cmp_server_data/CR_protected_PBM_1234.der b/test/recipes/65-test_cmp_server_data/CR_protected_PBM_1234.der
new file mode 100644
index 000000000000..fc1c0aff9beb
--- /dev/null
+++ b/test/recipes/65-test_cmp_server_data/CR_protected_PBM_1234.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_status.t b/test/recipes/65-test_cmp_status.t
new file mode 100644
index 000000000000..5fe0f309c359
--- /dev/null
+++ b/test/recipes/65-test_cmp_status.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_cmp_status");
+
+plan skip_all => "This test is not supported in a no-cmp build"
+ if disabled("cmp");
+
+plan tests => 1;
+
+ok(run(test(["cmp_status_test"])));
diff --git a/test/recipes/65-test_cmp_vfy.t b/test/recipes/65-test_cmp_vfy.t
new file mode 100644
index 000000000000..f722800e2765
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy.t
@@ -0,0 +1,51 @@
+#! /usr/bin/env perl
+# Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT data_file srctop_file srctop_dir bldtop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_cmp_vfy");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan skip_all => "This test is not supported in a no-cmp build"
+ if disabled("cmp");
+
+plan skip_all => "This test is not supported in a no-ec build"
+ if disabled("ec");
+
+plan tests => 2 + ($no_fips ? 0 : 1); #fips test
+
+my @basic_cmd = ("cmp_vfy_test",
+ data_file("server.crt"), data_file("client.crt"),
+ data_file("EndEntity1.crt"), data_file("EndEntity2.crt"),
+ data_file("Root_CA.crt"), data_file("Intermediate_CA.crt"),
+ data_file("IR_protected.der"),
+ data_file("IR_unprotected.der"),
+ data_file("IP_waitingStatus_PBM.der"),
+ data_file("IR_rmprotection.der"),
+ data_file("insta.cert.pem"),
+ data_file("insta_ca.cert.pem"),
+ data_file("IR_protected_0_extraCerts.der"),
+ data_file("IR_protected_2_extraCerts.der"));
+
+ok(run(test([@basic_cmd, "none"])));
+
+ok(run(test([@basic_cmd, "default", srctop_file("test", "default.cnf")])));
+
+unless ($no_fips) {
+ ok(run(test([@basic_cmd, "fips", srctop_file("test", "fips-and-base.cnf")])));
+}
diff --git a/test/recipes/65-test_cmp_vfy_data/EndEntity1.crt b/test/recipes/65-test_cmp_vfy_data/EndEntity1.crt
new file mode 100644
index 000000000000..4e0544988912
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/EndEntity1.crt
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICnDCCAYSgAwIBAgIBAzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwdSb290
+IENBMB4XDTE3MTEwODE1NDgwMFoXDTE4MTEwODExMTkwMFowETEPMA0GA1UEAxMG
+Q2xpZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtNiWJufEotHe
+p6E/4b0laX7K1NRamNoUokLIsq78RoBieBXaGxIdbT6zmhLnLmZdb0UN3v7FUP75
+rqPN2yyj3TbS4o5ilh5El8bDDAPhW5lthCddvH/uBziRAM5oIB4xxOumNbgHpLUT
+Clh49sdXd4ydYpCTWld5emRouBmMUeP/0EkyWMBIrHGSBxrqtFVRXhxvVHImQv6Z
+hIKql7dCVCZbhUtxw6sLxIGL4xlhKoM2o31k4I/9tjZrWSZZ7KAIOlOLrjxZc/bQ
+MwvxVUgS+C+iXzhCY8v+N/K37jwtAAk4C1aOGv/VygNcN0C/ynfKSzFmtnfei4+3
+6GC7HtFzewIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQB3GYpPSCCYsJM5owKcODr/
+I1aJ8jQ+u5jCKjvYLp6Cnbr4AbRXzvKuMyV6UfIAQbrGOxAClvX++5/ZQbhY+TxN
+iiUM3yr5yYCLqj4MeYHhJ3gOzcppAO9LQ9V7eA8C830giZMm3cpApFSLP8CpwNUD
+W/fgoQfaOae5IYPZdea88Gmt5RVNbtHgVqtm4ifTQo577kfxTeh20s+M6pgYW3/R
+vftXy2ITEtk/j3NcRvOyZ7Bu1mAg7wNeUjL+gDWAaxs16LsWsCsUGwfr/Z2Rq1CF
+zB0XwIyigkVLDLqDzUShcw0Eb/zYy2KXsxNWA2tb27mw+T+tmmOszpn7JjLrlVks
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_vfy_data/EndEntity2.crt b/test/recipes/65-test_cmp_vfy_data/EndEntity2.crt
new file mode 100644
index 000000000000..ba062107941b
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/EndEntity2.crt
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB3zCCAZSgAwIBAgIBBjAKBggqhkjOPQQDAzAVMRMwEQYDVQQDEwpad2lzY2hl
+bkNBMB4XDTE3MTEwODE2MDUwMFoXDTE4MTEwODExMTkwMFowEjEQMA4GA1UEAxMH
+Q2xpZW50MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALTYlibnxKLR
+3qehP+G9JWl+ytTUWpjaFKJCyLKu/EaAYngV2hsSHW0+s5oS5y5mXW9FDd7+xVD+
++a6jzdsso9020uKOYpYeRJfGwwwD4VuZbYQnXbx/7gc4kQDOaCAeMcTrpjW4B6S1
+EwpYePbHV3eMnWKQk1pXeXpkaLgZjFHj/9BJMljASKxxkgca6rRVUV4cb1RyJkL+
+mYSCqpe3QlQmW4VLccOrC8SBi+MZYSqDNqN9ZOCP/bY2a1kmWeygCDpTi648WXP2
+0DML8VVIEvgvol84QmPL/jfyt+48LQAJOAtWjhr/1coDXDdAv8p3yksxZrZ33ouP
+t+hgux7Rc3sCAwEAAaMNMAswCQYDVR0TBAIwADAKBggqhkjOPQQDAwM5ADA2AhkA
+qASBLwTauET6FGp/EBe7b/99jTyGB861AhkA5ILGkLX4KmjRkTcNxJ3JKB1Sumya
+cbqF
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.der b/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.der
new file mode 100644
index 000000000000..76888e84f73f
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.txt b/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.txt
new file mode 100644
index 000000000000..89837972c9e1
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.txt
@@ -0,0 +1,2 @@
+Reference#: 4787
+Secret Value: 9pp8-b35i-Xd3Q-udNR
diff --git a/test/recipes/65-test_cmp_vfy_data/IR_protected.der b/test/recipes/65-test_cmp_vfy_data/IR_protected.der
new file mode 100644
index 000000000000..ce0a7a46dcf2
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/IR_protected.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_vfy_data/IR_protected_0_extraCerts.der b/test/recipes/65-test_cmp_vfy_data/IR_protected_0_extraCerts.der
new file mode 100644
index 000000000000..1c26028082d4
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/IR_protected_0_extraCerts.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_vfy_data/IR_protected_2_extraCerts.der b/test/recipes/65-test_cmp_vfy_data/IR_protected_2_extraCerts.der
new file mode 100644
index 000000000000..56faad4a0fb6
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/IR_protected_2_extraCerts.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_vfy_data/IR_rmprotection.der b/test/recipes/65-test_cmp_vfy_data/IR_rmprotection.der
new file mode 100644
index 000000000000..e84c64d8e0e8
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/IR_rmprotection.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_vfy_data/IR_unprotected.der b/test/recipes/65-test_cmp_vfy_data/IR_unprotected.der
new file mode 100644
index 000000000000..41a649691ff2
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/IR_unprotected.der
Binary files differ
diff --git a/test/recipes/65-test_cmp_vfy_data/Intermediate_CA.crt b/test/recipes/65-test_cmp_vfy_data/Intermediate_CA.crt
new file mode 100644
index 000000000000..3416cdb9593e
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/Intermediate_CA.crt
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIB1jCBv6ADAgECAgEFMA0GCSqGSIb3DQEBDQUAMBIxEDAOBgNVBAMTB1Jvb3Qg
+Q0EwHhcNMTcxMTA4MTYwNDAwWhcNMTgxMTA4MTExOTAwWjAVMRMwEQYDVQQDEwpa
+d2lzY2hlbkNBMEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE9bJcmZWj2CmO6aW8
+9Qylkj1WgPREf9/s4Z1VYqFODeJnebPXFBLVH/aoGxnds9E9oxAwDjAMBgNVHRME
+BTADAQH/MA0GCSqGSIb3DQEBDQUAA4IBAQBwQD4NTIWMMevEsSrBpKjjQEWc81Ct
+eXoyAXr/d8wgVyuIZe9C7ekxPQCwowcmONUyeYQv9N2eYpdhkAQuk6DS4+aDR4s7
+I6rg5R5CUGGla5NUxM0BKIS3ZIezvEGlP1NFN+HBgJI7ZIIYQ3zDr0EYgo4J7Xvm
+5p58pcCZSsbVyKwKs6T+rTzOVVmJ2L1bWzywZEDmzxMkPmA6fP9XtB4Kx/b4oviw
+TEQl3Jf9EkBvBkKX2rRJs7aMJo4MwOnE4HHOV5GAQqhGrXltsuXmVfIQPtRN4xlK
+oNf/FukI1NcBh4A/iY4PmbyxHYmKy6qjFjng2u2VFtH15HDT4XlLP5gq
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_vfy_data/Root_CA.crt b/test/recipes/65-test_cmp_vfy_data/Root_CA.crt
new file mode 100644
index 000000000000..6ccf362546ad
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/Root_CA.crt
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICrzCCAZegAwIBAgIBATANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwdSb290
+IENBMB4XDTE3MTEwODE1NDUwMFoXDTE4MTEwODExMTkwMFowEjEQMA4GA1UEAxMH
+Um9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALiHdLAD2Wu+
+C5UDMK6WCL53Wz0CeU61RRRlGEVSqHrQOWnffgVutgftzsddxxgJJyGsqKo1B+nQ
+vapyJyugYJWYNQLN5+iffe4y1UBPnHMQFHiZ4cNR6PB0eHja2wpcN3QmJzOcpRYE
+xf+QQwJNFqhRi0cZGfd/JfFi/ybJalqClbnYMPcJo7g6S7M3lWbOnEOUWnbM2EBp
+h849mC+kd80vXcRcb7U/3MJKK3Ee72TDye5/kWFf9zcxj2ac0oCiS66JKYobiVJr
+NmbGM0I9U6T6ejXVUu2J3pGUFlcf3RCUYf1aWhkmzEzbm/FGMRJ7vVyCXm/OWIh9
+bqtwH5YfljsCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
+AQEAF7tSa9oVan7kPR5/TXB330Ca1xQt5C38afaJbacR9mM8ZkL0HceQTuJGrnAR
+4kK7CaB5iraU6Lxyql7drq8aixz/7TXna6c172J6HxDeFhQMeSt1LAh7XN5Ir6Y6
+iO7XD5I5lw3Xv6qvhoD0ktkNk/WtF7aBw2ZAi+RcDMgWzWjoS4WqMbvWEHw10j9b
+s8R0YG4yi6wb89UNIMfQtC2XviHKcRS9MzIJQHw73r2EY2t6o9TO+5ukHYDB6/Zo
+/CLXu21MzsFvhupHgX6zdptU324tq2za1+4LvmOHSW+D36jEPT22SndXmHo5VmAn
+6bQ52MhBI0rrWwju9aBpVzsUUg==
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_vfy_data/chain.txt b/test/recipes/65-test_cmp_vfy_data/chain.txt
new file mode 100644
index 000000000000..1b55c25abb4f
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/chain.txt
@@ -0,0 +1,4 @@
+1 - Root_CA (self-signed)
+1.1 - EndEntity1
+1.2 Intermediate_CA
+1.2.1 EndEntity2
diff --git a/test/recipes/65-test_cmp_vfy_data/client.crt b/test/recipes/65-test_cmp_vfy_data/client.crt
new file mode 100644
index 000000000000..fa6cdec436f7
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/client.crt
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICtTCCAZ2gAwIBAgIBATANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQKExNjbGll
+bnQgb3JnYW5pemF0aW9uMB4XDTE4MDIwNjEyNDYwMFoXDTE5MDIwNjEyNDYwMFow
+HjEcMBoGA1UEChMTY2xpZW50IG9yZ2FuaXphdGlvbjCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBALf0KDl07RlJlQVQcibB+JiUyXthFz4nzIkFVNISORCG
+JpTUMLLWxhF7Sc1li7gzvMAvx77SUThaNEOd0d2MJBbOXmZ9MtAOy8yHzRejBpw1
+mn9e0FKCI8rz3ttivspsGUIsRDhvMxuOol3lQ93QjfI593D7BOfBGdhsivD8m6+P
+EzF400iOSsbo3VPlArA+xTHiCyJ+E9p3yFGvzQrmK/MjM3lW3l3tARJmbXINIOio
+PnVmh4nsc9awqDGQdQTup/EjuY15AR4Vck7Zf9e+6U9t7Ow7aaZ5gX07FNnnqlVs
+48Lj/5a2Qgh482SQNvvRWAkPwTQNZ40ThKvOR/sB3iUCAwEAATANBgkqhkiG9w0B
+AQUFAAOCAQEAUSZBAR22ICoO7oPKMpfxwIHDAODv6jEHx2fSTpwxqodVqwF8ghAS
+PvJwQ4+7+yny4ieX9iVicRdXXT8kEOQL5/3/Q+cBj/BzYE0VGxo4YloHQwWNdSg0
+B1oQ/4dAnDntGnXHDJMSZCGq/jj4/56XSrPymzR2jgOQNqnEkMM9/SpW7MirixJA
+ZBR5Oc97vKaAH89ucsTu0neVMTXgywdBiy1W8bo4XxquK6VDRHlLj4gMLBpaG0mW
+r5ST1gs8j63nK/eZ7AuTV/tvI25reXT+2wOKAgPEcd02Fh61TO4IPD4GDidEHvAw
+6m66U9eFVezkxDvjE0X5voFnsBl4qTSZ/A==
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_vfy_data/insta.cert.pem b/test/recipes/65-test_cmp_vfy_data/insta.cert.pem
new file mode 100644
index 000000000000..4a25699f0588
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/insta.cert.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEHTCCAwWgAwIBAgIEBtqJKDANBgkqhkiG9w0BAQsFADA6MQswCQYDVQQGEwJG
+STETMBEGA1UECgwKSW5zdGEgRGVtbzEWMBQGA1UEAwwNSW5zdGEgRGVtbyBDQTAe
+Fw0xODAxMzAxMDE0MjNaFw0xODA0MzAyMzU5NTlaMBAxDjAMBgNVBAMMBXRlc3Qx
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoiNNxo5pwk1lD1em3mad
+bpKz86GSYyGlQtd0ZhIX1tOUFo9lFex7n5Osv0A99pKb+7EKqB9Ghg6mJ29kIUUm
+LACnfZJ/q+U6s9T4zFrYyXweUNJvQgbA2ojDPyVoRp2T1ekahPh4DpxPWNKfYECD
+RbrxkHMM3WiIqYFLU8hYvEMGSWRHHbnS/vG7MTaVDkR8d0zixTOp0fST5c1UUTqp
+pYlThac/BG1kk3hyjIjz5o7lspfX3s/eAYgT9GhYHL6Uy4o4OqCleR39aVc0dMrr
+jb7hsmX6ecNwqJOE5AHHOG4Ti6CbweSOcdH5PRFzdpao5rlTErsFHlUSTca4mfVe
+WwIDAQABo4IBUzCCAU8wHwYDVR0jBBgwFoAUPHjduMGNV/UFKl5t4FhySvpEJWEw
+HQYDVR0OBBYEFD0oLwov3vSGa1f9bIKGzWoPP0A1MCcGA1UdEQQgMB6CBGFiLmOC
+BGRlLmaCBHRlc3SHBAECA/+HBAQFBgcweAYDVR0fBHEwbzBtoGugaYZnbGRhcDov
+L3BraS5jZXJ0aWZpY2F0ZS5maTozODkvQ049SW5zdGElMjBEZW1vJTIwQ0EsTz1J
+bnN0YSUyMERlbW8sQz1GST9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0O2JpbmFy
+eTBqBggrBgEFBQcBAQReMFwwWgYIKwYBBQUHMAKGTmxkYXA6Ly93d3cuY2VydGlm
+aWNhdGUuZmk6Mzg5L0NOPUluc3RhIERlbW8gQ0EsTz1JbnN0YSBEZW1vLEM9Rkk/
+Y2FDZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAbIRfAbU0v2RWZg6lkjZg
+58fi4lT7Xk64sK4G/QLZ8TR/jg5UR0J5IvYt52YBjs/tjwJokkaW7+DyhVKkPrGs
+oexpdLRSnXBv33+Yj+MZbSfrIX1Ox7up+ovs8le4viSlUqIDWBuuUBfZ16BFMmnB
+UwDar8p/ci9ReKJH+FmvxlHbTHdMznZooSxTZm96HTutuiULL/SzZ2FpUsd7G5EE
+mRA6uRVV1tuysD15H+9paqVwd0RaKee8Z63cDi3NXOxUcCnpINHrjVsdcW47/73V
+IgfU4t39BKNiQNL0ADYpCyrpntTpsyZWrNmYzXMgLYEXxi4s6obusY0I3Qg+U31o
+Uw==
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_vfy_data/insta.priv.pem b/test/recipes/65-test_cmp_vfy_data/insta.priv.pem
new file mode 100644
index 000000000000..8612994d158c
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/insta.priv.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEAoiNNxo5pwk1lD1em3madbpKz86GSYyGlQtd0ZhIX1tOUFo9l
+Fex7n5Osv0A99pKb+7EKqB9Ghg6mJ29kIUUmLACnfZJ/q+U6s9T4zFrYyXweUNJv
+QgbA2ojDPyVoRp2T1ekahPh4DpxPWNKfYECDRbrxkHMM3WiIqYFLU8hYvEMGSWRH
+HbnS/vG7MTaVDkR8d0zixTOp0fST5c1UUTqppYlThac/BG1kk3hyjIjz5o7lspfX
+3s/eAYgT9GhYHL6Uy4o4OqCleR39aVc0dMrrjb7hsmX6ecNwqJOE5AHHOG4Ti6Cb
+weSOcdH5PRFzdpao5rlTErsFHlUSTca4mfVeWwIDAQABAoIBAQCUYAZevBjgbP8c
+qTPVtsY/WBVB0Qwrl7CqmIy2k7wpJfoRIyx4ga8n+3ZMlredm9EO5ZdA/04EhAdd
+czyIjcU+42JjMduQLPgpda4xJLnauLDteYXDQHbgBePXN55TcQTG7skMAm2rwTOD
+r0uWQ7Nd7pP9gqu1OmJF7EJI68D4llCU1FrOrliwSDzHWP3p4QmCW3M9PQJ68xw1
+gE7X1QflROGivcFoRgcgeoJDzpxveGvPbEn6Q+05/FMRVxjqWhpxdZ9/SL7iRz1e
+45T+P9a8OLgTyErT3Lp/f/vuHA1tlbAYumhSnxXsb+nHi80aDcImOrNQHAp076Ik
+bkZ1NpOxAoGBAM3Ulgi2hUPdoAMFtHZF8eBHRzn+4uTfY2s33wObiUJQ8VbGDeJY
+ifCfOwLThiAXAqktrs7ItwWDYmzd5xPYGQeWoKcBEoZ+dvaaOe8H7TCMnjB3R3i1
+ACSDHo/3c+NfFOnPJtXL85jeAqGYH50uOtYmYaBVe6xASTBgNvP7snYHAoGBAMmo
+ZBQqgIhoqMRapGh6n4OpzH0Nt9ruOTJoteAfbLdAu7X+wAaMuxEaAmZQRDYj0lzX
+Ty8DlKSy7vfvXtghxMBEv4+dsYpagXcUOeEZSPfu1c3e253dAov6C0MdREKWBT7P
++NwPBowPy0CP/yBeHaw7d/P7/SYIoPXLGraGl6ANAoGBAMmmce7LUjgw0mjjl+8f
+i14cts08x3FO4YnTTOut34VW43oNwuBzuYBBn4CfVpHtuS+hj9cKkTQXib/6jj7E
+wZDLo0y6Ijodf9MNOaDSdS/RM9Frqlu5iBA9XR3SYnjpWAXQas2eaGLlblJ+RMqq
+1f2j0JVR6j3RJWL9gBj8B9TVAoGBALYZrs4bF1iXEhfGNoL2gIdX1QX0VluIFfR0
+ZBDQr87H0Ppm4qbHfMHTt+kGgKJXNMaL08CDvj4AKxWPfhk0XUS2kDmzUDi8w/5x
+MFcaCy+A6Gdw4OcsRfl7QaJIknSCnpf7HCI0G1hthsB1iBCFjMwUI50ap54p2pg6
+4ZOD9PYdAoGAERi5Hlq7+rJeDi3VunKHySqV9mvbOPNclEUmAdKi1yuu3INF1Zgv
+Lf432ZI/Ufk2g888ed5ZGE1IMULc2tgSIAMzdX4ZYI4uGFLkHWzSOM6a7NCeZuVt
+W+NgUYa2qsqFEd9kqaoDbNry+nPvLM7fWXvBoE4oNkeJhHjOIabBPvw=
+-----END RSA PRIVATE KEY-----
diff --git a/test/recipes/65-test_cmp_vfy_data/insta_ca.cert.pem b/test/recipes/65-test_cmp_vfy_data/insta_ca.cert.pem
new file mode 100644
index 000000000000..4b7e31b86de9
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/insta_ca.cert.pem
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkDCCAnigAwIBAgIDCZU1MA0GCSqGSIb3DQEBBQUAMDoxCzAJBgNVBAYTAkZJ
+MRMwEQYDVQQKEwpJbnN0YSBEZW1vMRYwFAYDVQQDEw1JbnN0YSBEZW1vIENBMB4X
+DTA2MDEwMjA4NDgzOFoXDTI1MTIzMTA4NDgzOFowOjELMAkGA1UEBhMCRkkxEzAR
+BgNVBAoTCkluc3RhIERlbW8xFjAUBgNVBAMTDUluc3RhIERlbW8gQ0EwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDF57bSwj+hZnkgLyLtFsoNIN19qBv9
+GIoqFaCiPvw6VQgMXR15t+Z5sdYHdydGp875yJD4wDq2K7cjMoCXALxLeyp6dCY6
+WPC6Hk3QvZtMRuDAz8+0Nb5qaC4+O+7c7j1h/Gs8Jpj+TUuSkmtlCVIGPSWkWaQl
+FhLWeUnKRW8bj1CJQguV7igF19kGQKUZ/VZj+n5xIXKHc8njC1ZrS/s0IBFViQkZ
+63nTdNPLHQ4Xu8uKrbJbYEK1S4KVNH3L9yA4ut+brqX8n6OulTsKntvMdwNWZdor
+KoM15D3lmM7QUGDflJdSQ/qvBVTda+ccrT21sp4hdwwiU01vxQguT26JAgMBAAGj
+gZ4wgZswHwYDVR0jBBgwFoAUPHjduMGNV/UFKl5t4FhySvpEJWEwHQYDVR0OBBYE
+FDx43bjBjVf1BSpebeBYckr6RCVhMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8E
+CDAGAQH/AgEAMDUGCWCGSAGG+EIBDQQoFiZJbnN0YSBEZW1vIENBIC0gb25seSBm
+b3IgZGVtbyBwdXJwb3NlczANBgkqhkiG9w0BAQUFAAOCAQEAuVRmRimTxVTZMNXi
+3u4bRCq7GxJ4Lonx3mocxYiwBjCYwqn5dPAd4AHrA1HWYCEvIPo52FibpUNNljqH
+v7CSoEBg2f4If6cFtwudobqNvf8Z50CAnxlwpPy4k+EbXlh49/uZBtu8+Lc2Ss7L
+QaNHHiOeHxYeGX7pTcr6fnXQWAbbn4SLyqniW7ZTqjNJvC79Ym7KowMYzCbmozzv
+3xqElA+g/MLFfxn52c/vl/obOVk5eBf3f7V68qKL2IDEip3fyZyoelhfTypq944m
+sSJFQjoVzgd7ykgouEwOceOT8YMWWigNsWl/hsVJ03Ri7TxRX4+v8dMEbat+SsTL
+AqTTgQ==
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_vfy_data/server.crt b/test/recipes/65-test_cmp_vfy_data/server.crt
new file mode 100644
index 000000000000..ed1d43333eb3
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/server.crt
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICpTCCAY2gAwIBAgIBATANBgkqhkiG9w0BAQUFADAWMRQwEgYDVQQKDAtvcGVu
+c3NsX2NtcDAeFw0xNzEyMjAxMzA0MDBaFw0xODEyMjAxMzA0MDBaMBYxFDASBgNV
+BAoMC29wZW5zc2xfY21wMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZAJHnq0ypW/PZccrWj
+o7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVVpLicMnItNFElfCoh
+BzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuWq/vWW9r96/gBKKdd
+mj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SOZf9bH1olBVsmBMsU
+shFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6GvZ/i5KOhaqgJCnRKd
+HHzijz9cLec5p9NSOuC1OwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQDGUXpFCBkV
+WgPrBfZyBwt6VCjWB/e67q4IdcKMfDa4hwSquah1AyXHI0PlC/qitnoSx2+7f7pY
+TEOay/3eEPUl1J5tdPF2Vg56Dw8jdhSkMwO7bXKDEE3R6o6jaa4ECgxwQtdGHmNU
+A41PgKX76yEXku803ptO39/UR7i7Ye3MbyAmWE+PvixJYUbxd3fqz5fsaJqTCzAy
+AT9hrr4uu8J7m3LYaYXo4LVL4jw5UsP5bIYtpmmEBfy9GhpUqH5/LzBNij7y3ziE
+T59wHkzawAQDHsBPuCe07DFtlzqWWvaih0TQAw9MZ2tbyK9jt7P80Rqt9CwpM/i9
+jQYqSl/ix5hn
+-----END CERTIFICATE-----
diff --git a/test/recipes/65-test_cmp_vfy_data/server.key b/test/recipes/65-test_cmp_vfy_data/server.key
new file mode 100644
index 000000000000..232426679845
--- /dev/null
+++ b/test/recipes/65-test_cmp_vfy_data/server.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZA
+JHnq0ypW/PZccrWjo7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVV
+pLicMnItNFElfCohBzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuW
+q/vWW9r96/gBKKddmj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SO
+Zf9bH1olBVsmBMsUshFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6Gv
+Z/i5KOhaqgJCnRKdHHzijz9cLec5p9NSOuC1OwIDAQABAoIBAGiYVO+rIfqc38jG
+sMxJED2NSBFnvE7k2LoeEgktBA0daxQgziYXtIkOXC3jkwAw1RXLuGH5RTDuJt3/
+LX6nsCW3NCCB6lTGERNaJyKg4dLHpzA+juY3/2P/MKHD1bGncpV7jNk2fpV7gBY1
+pu0wld1Oi+S3DPCaxs3w6Zl39Y4Z7oSNf6DRO5lGN3Asc8TSVjIOWpAl8LIg+P2B
+ZvFeHRANVXaV9YmF2uEi7iMgH4vGrK2svsmM9VThVO4ArGcTRTvGYn7aw3/H4Pt+
+lYuhERdpkKBT0tCgIpO5IJXMl4/5RSDTtcBwiJcReN5IHUAItBIPSHcMflNSKG/I
+aQf4u0ECgYEA8+PAyzn096Y2UrKzE75yuadCveLjsUWx2NN5ZMohQru99F4k7Pab
+/Te4qOe5zlxHAPK3LRwvbwUWo5mLfs45wFrSgZoRlYcCuL+JaX0y2oXMMF9E+UkY
+tljMt/HpLo1SfSjN2Sae4LVhC7rWJ43LtyRepptzBPGqd26eLPGAMr8CgYEA7P8u
+RGkMOrMzEKAb0A9smrzq2xW88T1VejqEt6R8mUcNt8PFHMgjuzVU4zDysrlb7G/0
+VSkQWnJxBh1yNGc1Av7YgwicIgApr4ty0hZhLcnKX2VrNw+L/sSe/cnwVAc6RtPK
+RR6xQubuLlrCGcbYXmyn5Jv+nlY0S3uCyDFHqIUCgYAwtpLxhJf7RwWeqva9wNJl
+ZpUcHE9iPwtwxXx/tyfBjoI4Zv11HyS1BQYrJm2kXCYKeHBB4FlREXEeKDMGluZO
+F1XocP+GIDtY71jg6xLXNtY76yt5pzH6ae4p53WtyKhrO1UyRFaDh3bkwuK3b8j6
+wZbuLCpjGGn2BPAvBeWXPQKBgEewKN6op/pZmmi9Bay5/bAQ1TnQKYcPdnuyl9K0
+/ruespeTsFw0bhqC11qhw8gsKZIri0z3TusNEwM2hQU08uQlEnkQcaoXQoTHOcQy
+4NJo575Tf0r4ePBnqXA7VWcViJtEFTszPYtvLzz2VyBU9b4aP+73AN4EVW0/vx+v
+SG3BAoGBAMzESFA2TXwUFmozK5zowIszc995Xqpi7mXKk77WESOpoS1dQ1wF1dSg
+XOwxzFoYovLxcc1K9lqOrod8BV+qGuEfc/PIJ2aiXjvEDeZYX2eWaANNmj4OSLoJ
+MNYj9tZxbq56slD7snf7AgUBnwKz0Pj6H6UsbE3gdJqZWCDyw/bB
+-----END RSA PRIVATE KEY-----
diff --git a/test/recipes/66-test_ossl_store.t b/test/recipes/66-test_ossl_store.t
new file mode 100644
index 000000000000..3740bee80407
--- /dev/null
+++ b/test/recipes/66-test_ossl_store.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use File::Spec::Functions;
+use OpenSSL::Test::Simple;
+use OpenSSL::Test qw/:DEFAULT srctop_dir data_dir/;
+
+setup("test_ossl_store");
+
+plan tests => 1;
+
+ok(run(test(["ossl_store_test", "-dir", srctop_dir("test"),
+ "-in", "testrsa.pem", "-sm2", canonpath("certs/sm2-root.crt"),
+ "-data", data_dir()])));
diff --git a/test/recipes/66-test_ossl_store_data/DH-params.pem b/test/recipes/66-test_ossl_store_data/DH-params.pem
new file mode 100644
index 000000000000..21d1f61b5925
--- /dev/null
+++ b/test/recipes/66-test_ossl_store_data/DH-params.pem
@@ -0,0 +1,8 @@
+-----BEGIN DH PARAMETERS-----
+MIIBCAKCAQEA/uDak+qLI40JfWdgM/eWp9Wg1yjCH1psOeyxSImj09DOdvOPKXhI
+vBjvwyw76vn+HDBg0R90FbA1VmJBXwFqm2qAytpySgPniFWRoIN38SWrZ7FwlXuO
+SPWgXxtRQCIuN7SfIvFoncQ41aa9rJTJ1VXNT22keTe8DbF8tZaALwiaTWmslNa/
++qI/1/a+R4/SqLmQQBFJ10NfNQ7w66tmzsL3mcoz1vOrl+mmOgKHiKaTnI7oiL8y
+qWbnCIdRUPVImNGur/oKRk7Ye/66cgras9WXjXRr5ExVh4+wBYTvJ2H7THRoBgts
+0g1y1Zu5uGJQttPbgC18guqH6NH6xPin+wIBAg==
+-----END DH PARAMETERS-----
diff --git a/test/recipes/66-test_ossl_store_data/DHX-params.pem b/test/recipes/66-test_ossl_store_data/DHX-params.pem
new file mode 100644
index 000000000000..f4575d560559
--- /dev/null
+++ b/test/recipes/66-test_ossl_store_data/DHX-params.pem
@@ -0,0 +1,14 @@
+-----BEGIN X9.42 DH PARAMETERS-----
+MIICLAKCAQEAyT1xEPjk7PmoJKqVWgn//oVibfMGT9eYVcVOBpdvHK5bUPDO2c3Q
+IoClYdbKfiiyAGCTIsykTI+SaY4x3PsK2G5H2kk/+WjY1Qt3D60I0ltGhJZ9HH0Z
+XTZ+XE58MDUPplkVeOiwgZSzUi4Cr6MhkD10ixJfH3TfrZaKsDUV76JeBiXTuYxR
+TUQoeb196h0VvjsbLkAgmNR0y/z/jlxhYrJGulYHAEB1qZzFwR7puja5HkBlrcbP
+Sm79jIrWTP535zHpkPp7HggjBVUTlXm2fEPEy3IxjeS2IZls4jAlU7gBajWTn5x1
+xB8puPwR3bEM3KwOtrOB7LxyeSAi7ZsuDwKCAQBeX1BH6sLltd2PfF/LLl5c87pA
+NIoluZqpx7YTyTwjuKyzbCcl/12AMsXJPsRcOJToZlyfjiWqO0VHEE2BMLEEDV3J
+xnKCGyxqWGDohtJvGnMQtLFG8fIDroY6pGxZvCMcX9lsFhcx6V613Livv9krGpJk
+E6uJeybPYlKxznnsd0C38fF6csGQ6XA5Jk2ZMY4NUDRWKPpYn5R/aUf9QCmXEaQg
+U2tb6a/GldEoB6oKad/2QwoCkzOhSOrVkzNq370hC9kdkY2jS6H+D6Vb1Kht2HvE
+SqoGzlAULgju9EwRHhKQYHjl9Hvf0b6xiy0COstxXi7TlSAXNQ+wvxRdOOVyAiEA
+2Y0jIv7Bg/ezKBIDgHS6DNMiVjpK3IQyKoKMdKiWdLc=
+-----END X9.42 DH PARAMETERS-----
diff --git a/test/recipes/66-test_ossl_store_data/DSA-params.pem b/test/recipes/66-test_ossl_store_data/DSA-params.pem
new file mode 100644
index 000000000000..7c4623269f61
--- /dev/null
+++ b/test/recipes/66-test_ossl_store_data/DSA-params.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKAKCAQEAkCVbIEa67wJYbxPJRmA+NYY67GfktNggaxbhMaL+jyR7U1uPpOEa
+/tTBgql40zj3W+QORevWOjo4ECxCpWmttG81r1+jhlG/a3Bk+CJB+CZw+ZC8NBXV
+46v03q+MR3AjLOr/k/sgBabVc6I4K6IFC5ZmlwS0+8F4VudOq4lLqHZXFp89AJWi
+HhtPbcD+jYYtrL+3MT7rwQJ+5MoXUgzfTnJFR5hpBuqgYubTGHc8nEG9KkXnE97B
+as0hTWaYuLe/RwHEhabZi7pcFqD26fCJC63gzT6zK73R2GD0qRwPD0pxh/adu2uu
+h314G2y03Fstnc8q5i/NYofP3Lg++0yJNQIdAMi9Wu0rxBvq5Je+TXliYygyKa5E
+/KKOwvshJ2kCggEAWLdQjAIb/Jtn1YZNGZhrif6NCHyO+qxq2B4Ajrw3TUMrmEbt
+avfWoHNkoJCTE10ZzWTZqrVWqzfytK8VnG7XRfMftjMdiXTKg4amG8wvNCC3at36
+WouWYsZx50PWXHOyRiFENcmXDiyzvz2/NcZmKIDdlII/JF3sTjn2HtzpwAIEduEV
+1YnyY9E6MiP0jeMaHvo5zSHAdSYTu0eBZ3ThxCyyW+sIKRA96+yBUtCrGOb+UUu6
+udVKAj8sauSBsIbLGf/qrw86u/qSZbqr+keY6ozSsCCHeFMUIhGxv4a9E0XcAX0r
+VLgYFtiO5DyuXSRACmCgmHYAlvyiP+E5xDs4Nw==
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/70-test_asyncio.t b/test/recipes/70-test_asyncio.t
new file mode 100644
index 000000000000..c5b39128eb51
--- /dev/null
+++ b/test/recipes/70-test_asyncio.t
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_asyncio");
+
+plan skip_all => "No TLS/SSL protocols are supported by this OpenSSL build"
+ if alldisabled(grep { $_ ne "ssl3" } available_protocols("tls"));
+
+plan tests => 1;
+
+ok(run(test(["asynciotest", srctop_file("apps", "server.pem"),
+ srctop_file("apps", "server.pem")])), "running asynciotest");
diff --git a/test/recipes/70-test_bad_dtls.t b/test/recipes/70-test_bad_dtls.t
new file mode 100644
index 000000000000..7abd84a893d7
--- /dev/null
+++ b/test/recipes/70-test_bad_dtls.t
@@ -0,0 +1,20 @@
+#! /usr/bin/env perl
+# Copyright 2016 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
+
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_bad_dtls");
+
+plan skip_all => "DTLSv1 is not supported by this OpenSSL build"
+ if disabled("dtls1");
+
+plan tests => 1;
+
+ok(run(test(["bad_dtls_test"])), "running bad_dtls_test");
diff --git a/test/recipes/70-test_clienthello.t b/test/recipes/70-test_clienthello.t
new file mode 100644
index 000000000000..0ccbc8ef5605
--- /dev/null
+++ b/test/recipes/70-test_clienthello.t
@@ -0,0 +1,25 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_clienthello");
+
+plan skip_all => "No TLS/SSL protocols are supported by this OpenSSL build"
+ if alldisabled(grep { $_ ne "ssl3" } available_protocols("tls"));
+
+#No EC with TLSv1.3 confuses the padding calculations in this test
+plan skip_all => "No EC with TLSv1.3 is not supported by this test"
+ if disabled("ec") && !disabled("tls1_3");
+
+plan tests => 1;
+
+ok(run(test(["clienthellotest", srctop_file("test", "session.pem")])),
+ "running clienthellotest");
diff --git a/test/recipes/70-test_comp.t b/test/recipes/70-test_comp.t
new file mode 100644
index 000000000000..eeee29ac5c0a
--- /dev/null
+++ b/test/recipes/70-test_comp.t
@@ -0,0 +1,110 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
+use OpenSSL::Test::Utils;
+use File::Temp qw(tempfile);
+use TLSProxy::Proxy;
+
+my $test_name = "test_comp";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLSv1.3 or TLSv1.2 enabled"
+ if disabled("tls1_3") && disabled("tls1_2");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+use constant {
+ MULTIPLE_COMPRESSIONS => 0,
+ NON_NULL_COMPRESSION => 1
+};
+my $testtype;
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 4;
+
+SKIP: {
+ skip "TLSv1.2 disabled", 2 if disabled("tls1_2");
+ #Test 1: Check that sending multiple compression methods in a TLSv1.2
+ # ClientHello succeeds
+ $proxy->clear();
+ $proxy->filter(\&add_comp_filter);
+ $proxy->clientflags("-no_tls1_3");
+ $testtype = MULTIPLE_COMPRESSIONS;
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "Non null compression");
+
+ #Test 2: NULL compression method must be present in TLSv1.2
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3");
+ $testtype = NON_NULL_COMPRESSION;
+ $proxy->start();
+ ok(TLSProxy::Message->fail(), "NULL compression missing");
+}
+
+SKIP: {
+ skip "TLSv1.3 disabled", 2
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+ #Test 3: Check that sending multiple compression methods in a TLSv1.3
+ # ClientHello fails
+ $proxy->clear();
+ $proxy->filter(\&add_comp_filter);
+ $testtype = MULTIPLE_COMPRESSIONS;
+ $proxy->start();
+ ok(TLSProxy::Message->fail(), "Non null compression (TLSv1.3)");
+
+ #Test 4: NULL compression method must be present in TLSv1.3
+ $proxy->clear();
+ $testtype = NON_NULL_COMPRESSION;
+ $proxy->start();
+ ok(TLSProxy::Message->fail(), "NULL compression missing (TLSv1.3)");
+}
+
+sub add_comp_filter
+{
+ my $proxy = shift;
+ my $flight;
+ my $message;
+ my @comp;
+
+ # Only look at the ClientHello
+ return if $proxy->flight != 0;
+
+ $message = ${$proxy->message_list}[0];
+
+ return if (!defined $message
+ || $message->mt != TLSProxy::Message::MT_CLIENT_HELLO);
+
+ if ($testtype == MULTIPLE_COMPRESSIONS) {
+ @comp = (
+ 0x00, #Null compression method
+ 0xff); #Unknown compression
+ } elsif ($testtype == NON_NULL_COMPRESSION) {
+ @comp = (0xff); #Unknown compression
+ }
+ $message->comp_meths(\@comp);
+ $message->comp_meth_len(scalar @comp);
+ $message->repack();
+}
diff --git a/test/recipes/70-test_key_share.t b/test/recipes/70-test_key_share.t
new file mode 100644
index 000000000000..91ca8a4ff997
--- /dev/null
+++ b/test/recipes/70-test_key_share.t
@@ -0,0 +1,475 @@
+#! /usr/bin/env perl
+# Copyright 2015-2022 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+use File::Temp qw(tempfile);
+
+use constant {
+ LOOK_ONLY => 0,
+ EMPTY_EXTENSION => 1,
+ MISSING_EXTENSION => 2,
+ NO_ACCEPTABLE_KEY_SHARES => 3,
+ NON_PREFERRED_KEY_SHARE => 4,
+ ACCEPTABLE_AT_END => 5,
+ NOT_IN_SUPPORTED_GROUPS => 6,
+ GROUP_ID_TOO_SHORT => 7,
+ KEX_LEN_MISMATCH => 8,
+ ZERO_LEN_KEX_DATA => 9,
+ TRAILING_DATA => 10,
+ SELECT_X25519 => 11,
+ NO_KEY_SHARES_IN_HRR => 12,
+ NON_TLS1_3_KEY_SHARE => 13
+};
+
+use constant {
+ CLIENT_TO_SERVER => 1,
+ SERVER_TO_CLIENT => 2
+};
+
+
+use constant {
+ X25519 => 0x1d,
+ P_256 => 0x17,
+ FFDHE2048 => 0x0100,
+ FFDHE3072 => 0x0101
+};
+
+my $testtype;
+my $direction;
+my $selectedgroupid;
+
+my $test_name = "test_key_share";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS1.3 enabled"
+ if disabled("tls1_3");
+
+plan skip_all => "$test_name needs EC or DH enabled"
+ if disabled("ec") && disabled("dh");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#We assume that test_ssl_new and friends will test the happy path for this,
+#so we concentrate on the less common scenarios
+
+#Test 1: An empty key_shares extension should succeed after a HelloRetryRequest
+$testtype = EMPTY_EXTENSION;
+$direction = CLIENT_TO_SERVER;
+$proxy->filter(\&modify_key_shares_filter);
+if (disabled("ec")) {
+ $proxy->serverflags("-groups ffdhe3072");
+} else {
+ $proxy->serverflags("-groups P-256");
+}
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 23;
+ok(TLSProxy::Message->success(), "Success after HRR");
+
+#Test 2: The server sending an HRR requesting a group the client already sent
+# should fail
+$proxy->clear();
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Server asks for group already provided");
+
+#Test 3: A missing key_shares extension should not succeed
+$proxy->clear();
+$testtype = MISSING_EXTENSION;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Missing key_shares extension");
+
+#Test 4: No initial acceptable key_shares should succeed after a
+# HelloRetryRequest
+$proxy->clear();
+$proxy->filter(undef);
+if (disabled("ec")) {
+ $proxy->serverflags("-groups ffdhe3072");
+} else {
+ $proxy->serverflags("-groups P-256");
+}
+$proxy->start();
+ok(TLSProxy::Message->success(), "No initial acceptable key_shares");
+
+#Test 5: No acceptable key_shares and no shared groups should fail
+$proxy->clear();
+$proxy->filter(undef);
+if (disabled("ec")) {
+ $proxy->serverflags("-groups ffdhe2048");
+} else {
+ $proxy->serverflags("-groups P-256");
+}
+if (disabled("ec")) {
+ $proxy->clientflags("-groups ffdhe3072");
+} else {
+ $proxy->clientflags("-groups P-384");
+}
+$proxy->start();
+ok(TLSProxy::Message->fail(), "No acceptable key_shares");
+
+#Test 6: A non preferred but acceptable key_share should succeed
+$proxy->clear();
+$proxy->clientflags("-curves P-256");
+if (disabled("ec")) {
+ $proxy->clientflags("-groups ffdhe3072");
+} else {
+ $proxy->clientflags("-groups P-256");
+}
+$proxy->start();
+ok(TLSProxy::Message->success(), "Non preferred key_share");
+$proxy->filter(\&modify_key_shares_filter);
+
+SKIP: {
+ skip "No ec support in this OpenSSL build", 1 if disabled("ec");
+
+ #Test 7: An acceptable key_share after a list of non-acceptable ones should
+ #succeed
+ $proxy->clear();
+ $testtype = ACCEPTABLE_AT_END;
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "Acceptable key_share at end of list");
+}
+
+#Test 8: An acceptable key_share but for a group not in supported_groups should
+#fail
+$proxy->clear();
+$testtype = NOT_IN_SUPPORTED_GROUPS;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Acceptable key_share not in supported_groups");
+
+#Test 9: Too short group_id should fail
+$proxy->clear();
+$testtype = GROUP_ID_TOO_SHORT;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Group id too short");
+
+#Test 10: key_exchange length mismatch should fail
+$proxy->clear();
+$testtype = KEX_LEN_MISMATCH;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "key_exchange length mismatch");
+
+#Test 11: Zero length key_exchange should fail
+$proxy->clear();
+$testtype = ZERO_LEN_KEX_DATA;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "zero length key_exchange data");
+
+#Test 12: Trailing data on key_share list should fail
+$proxy->clear();
+$testtype = TRAILING_DATA;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "key_share list trailing data");
+
+#Test 13: Multiple acceptable key_shares - we choose the first one
+$proxy->clear();
+$direction = SERVER_TO_CLIENT;
+$testtype = LOOK_ONLY;
+$selectedgroupid = 0;
+if (disabled("ec")) {
+ $proxy->clientflags("-groups ffdhe3072:ffdhe2048");
+} else {
+ $proxy->clientflags("-groups P-256:X25519");
+}
+$proxy->start();
+if (disabled("ec")) {
+ ok(TLSProxy::Message->success() && ($selectedgroupid == FFDHE3072),
+ "Multiple acceptable key_shares");
+} else {
+ ok(TLSProxy::Message->success() && ($selectedgroupid == P_256),
+ "Multiple acceptable key_shares");
+}
+
+#Test 14: Multiple acceptable key_shares - we choose the first one (part 2)
+$proxy->clear();
+if (disabled("ec")) {
+ $proxy->clientflags("-curves ffdhe2048:ffdhe3072");
+} else {
+ $proxy->clientflags("-curves X25519:P-256");
+}
+$proxy->start();
+if (disabled("ec")) {
+ ok(TLSProxy::Message->success() && ($selectedgroupid == FFDHE2048),
+ "Multiple acceptable key_shares (part 2)");
+} else {
+ ok(TLSProxy::Message->success() && ($selectedgroupid == X25519),
+ "Multiple acceptable key_shares (part 2)");
+}
+
+#Test 15: Server sends key_share that wasn't offered should fail
+$proxy->clear();
+$testtype = SELECT_X25519;
+if (disabled("ec")) {
+ $proxy->clientflags("-groups ffdhe3072");
+} else {
+ $proxy->clientflags("-groups P-256");
+}
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Non offered key_share");
+
+#Test 16: Too short group_id in ServerHello should fail
+$proxy->clear();
+$testtype = GROUP_ID_TOO_SHORT;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Group id too short in ServerHello");
+
+#Test 17: key_exchange length mismatch in ServerHello should fail
+$proxy->clear();
+$testtype = KEX_LEN_MISMATCH;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "key_exchange length mismatch in ServerHello");
+
+#Test 18: Zero length key_exchange in ServerHello should fail
+$proxy->clear();
+$testtype = ZERO_LEN_KEX_DATA;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "zero length key_exchange data in ServerHello");
+
+#Test 19: Trailing data on key_share in ServerHello should fail
+$proxy->clear();
+$testtype = TRAILING_DATA;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "key_share trailing data in ServerHello");
+
+SKIP: {
+ skip "No TLSv1.2 support in this OpenSSL build", 2 if disabled("tls1_2");
+
+ #Test 20: key_share should not be sent if the client is not capable of
+ # negotiating TLSv1.3
+ $proxy->clear();
+ $proxy->filter(undef);
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->start();
+ my $clienthello = $proxy->message_list->[0];
+ ok(TLSProxy::Message->success()
+ && !defined $clienthello->extension_data->{TLSProxy::Message::EXT_KEY_SHARE},
+ "No key_share for TLS<=1.2 client");
+ $proxy->filter(\&modify_key_shares_filter);
+
+ #Test 21: A server not capable of negotiating TLSv1.3 should not attempt to
+ # process a key_share
+ $proxy->clear();
+ $direction = CLIENT_TO_SERVER;
+ $testtype = NO_ACCEPTABLE_KEY_SHARES;
+ $proxy->serverflags("-no_tls1_3");
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "Ignore key_share for TLS<=1.2 server");
+}
+
+#Test 22: The server sending an HRR but not requesting a new key_share should
+# fail
+$proxy->clear();
+$direction = SERVER_TO_CLIENT;
+$testtype = NO_KEY_SHARES_IN_HRR;
+if (disabled("ec")) {
+ $proxy->serverflags("-groups ffdhe2048");
+} else {
+ $proxy->serverflags("-groups X25519");
+}
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Server sends HRR with no key_shares");
+
+SKIP: {
+ skip "No EC support in this OpenSSL build", 1 if disabled("ec");
+ #Test 23: Trailing data on key_share in ServerHello should fail
+ $proxy->clear();
+ $direction = CLIENT_TO_SERVER;
+ $proxy->clientflags("-groups secp192r1:P-256:X25519");
+ $proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+ $testtype = NON_TLS1_3_KEY_SHARE;
+ $proxy->start();
+ my $ishrr = defined ${$proxy->message_list}[2]
+ &&(${$proxy->message_list}[0]->mt == TLSProxy::Message::MT_CLIENT_HELLO)
+ && (${$proxy->message_list}[2]->mt == TLSProxy::Message::MT_CLIENT_HELLO);
+ ok(TLSProxy::Message->success() && $ishrr,
+ "Client sends a key_share for a Non TLSv1.3 group");
+}
+
+sub modify_key_shares_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello/SererHello/HRR
+ if (($direction == CLIENT_TO_SERVER && $proxy->flight != 0
+ && ($proxy->flight != 1 || $testtype != NO_KEY_SHARES_IN_HRR))
+ || ($direction == SERVER_TO_CLIENT && $proxy->flight != 1)) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO
+ && $direction == CLIENT_TO_SERVER) {
+ my $ext;
+ my $suppgroups;
+
+ if ($testtype != NON_TLS1_3_KEY_SHARE) {
+ #Setup supported groups to include some unrecognised groups
+ $suppgroups = pack "C8",
+ 0x00, 0x06, #List Length
+ 0xff, 0xfe, #Non existing group 1
+ 0xff, 0xff, #Non existing group 2
+ 0x00, 0x1d; #x25519
+ } else {
+ $suppgroups = pack "C6",
+ 0x00, 0x04, #List Length
+ 0x00, 0x13,
+ 0x00, 0x1d; #x25519
+ }
+
+ if ($testtype == EMPTY_EXTENSION) {
+ $ext = pack "C2",
+ 0x00, 0x00;
+ } elsif ($testtype == NO_ACCEPTABLE_KEY_SHARES) {
+ $ext = pack "C12",
+ 0x00, 0x0a, #List Length
+ 0xff, 0xfe, #Non existing group 1
+ 0x00, 0x01, 0xff, #key_exchange data
+ 0xff, 0xff, #Non existing group 2
+ 0x00, 0x01, 0xff; #key_exchange data
+ } elsif ($testtype == ACCEPTABLE_AT_END) {
+ $ext = pack "C11H64",
+ 0x00, 0x29, #List Length
+ 0xff, 0xfe, #Non existing group 1
+ 0x00, 0x01, 0xff, #key_exchange data
+ 0x00, 0x1d, #x25519
+ 0x00, 0x20, #key_exchange data length
+ "155155B95269ED5C87EAA99C2EF5A593".
+ "EDF83495E80380089F831B94D14B1421"; #key_exchange data
+ } elsif ($testtype == NOT_IN_SUPPORTED_GROUPS) {
+ $suppgroups = pack "C4",
+ 0x00, 0x02, #List Length
+ 0x00, 0xfe; #Non existing group 1
+ } elsif ($testtype == GROUP_ID_TOO_SHORT) {
+ $ext = pack "C6H64C1",
+ 0x00, 0x25, #List Length
+ 0x00, 0x1d, #x25519
+ 0x00, 0x20, #key_exchange data length
+ "155155B95269ED5C87EAA99C2EF5A593".
+ "EDF83495E80380089F831B94D14B1421"; #key_exchange data
+ 0x00; #Group id too short
+ } elsif ($testtype == KEX_LEN_MISMATCH) {
+ $ext = pack "C8",
+ 0x00, 0x06, #List Length
+ 0x00, 0x1d, #x25519
+ 0x00, 0x20, #key_exchange data length
+ 0x15, 0x51; #Only two bytes of data, but length should be 32
+ } elsif ($testtype == ZERO_LEN_KEX_DATA) {
+ $ext = pack "C10H64",
+ 0x00, 0x28, #List Length
+ 0xff, 0xfe, #Non existing group 1
+ 0x00, 0x00, #zero length key_exchange data is invalid
+ 0x00, 0x1d, #x25519
+ 0x00, 0x20, #key_exchange data length
+ "155155B95269ED5C87EAA99C2EF5A593".
+ "EDF83495E80380089F831B94D14B1421"; #key_exchange data
+ } elsif ($testtype == TRAILING_DATA) {
+ $ext = pack "C6H64C1",
+ 0x00, 0x24, #List Length
+ 0x00, 0x1d, #x25519
+ 0x00, 0x20, #key_exchange data length
+ "155155B95269ED5C87EAA99C2EF5A593".
+ "EDF83495E80380089F831B94D14B1421", #key_exchange data
+ 0x00; #Trailing garbage
+ } elsif ($testtype == NO_KEY_SHARES_IN_HRR) {
+ #We trick the server into thinking we sent a P-256 key_share -
+ #but the client actually sent X25519
+ $ext = pack "C7",
+ 0x00, 0x05, #List Length
+ 0x00, 0x17, #P-256
+ 0x00, 0x01, #key_exchange data length
+ 0xff; #Dummy key_share data
+ } elsif ($testtype == NON_TLS1_3_KEY_SHARE) {
+ $ext = pack "C6H98",
+ 0x00, 0x35, #List Length
+ 0x00, 0x13, #P-192
+ 0x00, 0x31, #key_exchange data length
+ "04EE3B38D1CB800A1A2B702FC8423599F2AC7161E175C865F8".
+ "3DAF78BCBAE561464E8144359BE70CB7989D28A2F43F8F2C"; #key_exchange data
+ }
+
+ if ($testtype != EMPTY_EXTENSION
+ && $testtype != NO_KEY_SHARES_IN_HRR) {
+ $message->set_extension(
+ TLSProxy::Message::EXT_SUPPORTED_GROUPS, $suppgroups);
+ }
+ if ($testtype == MISSING_EXTENSION) {
+ $message->delete_extension(
+ TLSProxy::Message::EXT_KEY_SHARE);
+ } elsif ($testtype != NOT_IN_SUPPORTED_GROUPS) {
+ $message->set_extension(
+ TLSProxy::Message::EXT_KEY_SHARE, $ext);
+ }
+
+ $message->repack();
+ } elsif ($message->mt == TLSProxy::Message::MT_SERVER_HELLO
+ && $direction == SERVER_TO_CLIENT) {
+ my $ext;
+ my $key_share =
+ $message->extension_data->{TLSProxy::Message::EXT_KEY_SHARE};
+ $selectedgroupid = unpack("n", $key_share);
+
+ if ($testtype == LOOK_ONLY) {
+ return;
+ }
+ if ($testtype == NO_KEY_SHARES_IN_HRR) {
+ $message->delete_extension(TLSProxy::Message::EXT_KEY_SHARE);
+ $message->set_extension(TLSProxy::Message::EXT_UNKNOWN, "");
+ $message->repack();
+ return;
+ }
+ if ($testtype == SELECT_X25519) {
+ $ext = pack "C4H64",
+ 0x00, 0x1d, #x25519
+ 0x00, 0x20, #key_exchange data length
+ "155155B95269ED5C87EAA99C2EF5A593".
+ "EDF83495E80380089F831B94D14B1421"; #key_exchange data
+ } elsif ($testtype == GROUP_ID_TOO_SHORT) {
+ $ext = pack "C1",
+ 0x00;
+ } elsif ($testtype == KEX_LEN_MISMATCH) {
+ $ext = pack "C6",
+ 0x00, 0x1d, #x25519
+ 0x00, 0x20, #key_exchange data length
+ 0x15, 0x51; #Only two bytes of data, but length should be 32
+ } elsif ($testtype == ZERO_LEN_KEX_DATA) {
+ $ext = pack "C4",
+ 0x00, 0x1d, #x25519
+ 0x00, 0x00, #zero length key_exchange data is invalid
+ } elsif ($testtype == TRAILING_DATA) {
+ $ext = pack "C4H64C1",
+ 0x00, 0x1d, #x25519
+ 0x00, 0x20, #key_exchange data length
+ "155155B95269ED5C87EAA99C2EF5A593".
+ "EDF83495E80380089F831B94D14B1421", #key_exchange data
+ 0x00; #Trailing garbage
+ }
+ $message->set_extension(TLSProxy::Message::EXT_KEY_SHARE, $ext);
+
+ $message->repack();
+ }
+ }
+}
+
+
diff --git a/test/recipes/70-test_packet.t b/test/recipes/70-test_packet.t
new file mode 100644
index 000000000000..6cbffc39a63e
--- /dev/null
+++ b/test/recipes/70-test_packet.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_packet", "packettest");
diff --git a/test/recipes/70-test_recordlen.t b/test/recipes/70-test_recordlen.t
new file mode 100644
index 000000000000..9adc71cb8fc7
--- /dev/null
+++ b/test/recipes/70-test_recordlen.t
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+# Copyright 2017 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
+
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_recordlen");
+
+plan skip_all => "No TLS/SSL protocols are supported by this OpenSSL build"
+ if alldisabled(grep { $_ ne "ssl3" } available_protocols("tls"));
+
+plan tests => 1;
+
+ok(run(test(["recordlentest", srctop_file("apps", "server.pem"),
+ srctop_file("apps", "server.pem")])), "running recordlentest");
diff --git a/test/recipes/70-test_renegotiation.t b/test/recipes/70-test_renegotiation.t
new file mode 100644
index 000000000000..b7bc9c025aea
--- /dev/null
+++ b/test/recipes/70-test_renegotiation.t
@@ -0,0 +1,151 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_renegotiation";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS <= 1.2 enabled"
+ if alldisabled(("ssl3", "tls1", "tls1_1", "tls1_2"));
+
+plan tests => 5;
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#Test 1: A basic renegotiation test
+$proxy->clientflags("-no_tls1_3");
+$proxy->serverflags("-client_renegotiation");
+$proxy->reneg(1);
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+ok(TLSProxy::Message->success(), "Basic renegotiation");
+
+#Test 2: Client does not send the Reneg SCSV. Reneg should fail
+$proxy->clear();
+$proxy->filter(\&reneg_filter);
+$proxy->clientflags("-no_tls1_3");
+$proxy->serverflags("-client_renegotiation");
+$proxy->reneg(1);
+$proxy->start();
+ok(TLSProxy::Message->fail(), "No client SCSV");
+
+SKIP: {
+ skip "TLSv1.2 or TLSv1.1 disabled", 1
+ if disabled("tls1_2") || disabled("tls1_1");
+ #Test 3: Check that the ClientHello version remains the same in the reneg
+ # handshake
+ $proxy->clear();
+ $proxy->filter(undef);
+ $proxy->ciphers("DEFAULT:\@SECLEVEL=0");
+ $proxy->clientflags("-no_tls1_3 -cipher AES128-SHA:\@SECLEVEL=0");
+ $proxy->serverflags("-no_tls1_3 -no_tls1_2 -client_renegotiation");
+ $proxy->reneg(1);
+ $proxy->start();
+ my $chversion;
+ my $chmatch = 0;
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ if (!defined $chversion) {
+ $chversion = $message->client_version;
+ } else {
+ if ($chversion == $message->client_version) {
+ $chmatch = 1;
+ }
+ }
+ }
+ }
+ ok(TLSProxy::Message->success() && $chmatch,
+ "Check ClientHello version is the same");
+}
+
+SKIP: {
+ skip "TLSv1.2 disabled", 1
+ if disabled("tls1_2");
+
+ #Test 4: Test for CVE-2021-3449. client_sig_algs instead of sig_algs in
+ # resumption ClientHello
+ $proxy->clear();
+ $proxy->filter(\&sigalgs_filter);
+ $proxy->clientflags("-tls1_2");
+ $proxy->serverflags("-client_renegotiation");
+ $proxy->reneg(1);
+ $proxy->start();
+ ok(TLSProxy::Message->fail(), "client_sig_algs instead of sig_algs");
+}
+
+SKIP: {
+ skip "TLSv1.2 and TLSv1.1 disabled", 1
+ if disabled("tls1_2") && disabled("tls1_1");
+ #Test 5: Client fails to do renegotiation
+ $proxy->clear();
+ $proxy->filter(undef);
+ $proxy->serverflags("-no_tls1_3");
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->reneg(1);
+ $proxy->start();
+ ok(TLSProxy::Message->fail(),
+ "Check client renegotiation failed");
+}
+
+sub reneg_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello message
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ #Remove any SCSV ciphersuites - just leave AES128-SHA (0x002f)
+ my @ciphersuite = (0x002f);
+ $message->ciphersuites(\@ciphersuite);
+ $message->ciphersuite_len(2);
+ $message->repack();
+ }
+ }
+}
+
+sub sigalgs_filter
+{
+ my $proxy = shift;
+ my $cnt = 0;
+
+ # We're only interested in the second ClientHello message
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ next if ($cnt++ == 0);
+
+ my $sigs = pack "C10", 0x00, 0x08,
+ # rsa_pkcs_sha{256,384,512,1}
+ 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x02, 0x01;
+ $message->set_extension(TLSProxy::Message::EXT_SIG_ALGS_CERT, $sigs);
+ $message->delete_extension(TLSProxy::Message::EXT_SIG_ALGS);
+ $message->repack();
+ }
+ }
+}
diff --git a/test/recipes/70-test_servername.t b/test/recipes/70-test_servername.t
new file mode 100644
index 000000000000..f5ea9473c214
--- /dev/null
+++ b/test/recipes/70-test_servername.t
@@ -0,0 +1,26 @@
+#! /usr/bin/env perl
+# Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright 2017 BaishanCloud. 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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils qw(alldisabled available_protocols);
+
+setup("test_servername");
+
+plan skip_all => "No TLS/SSL protocols are supported by this OpenSSL build"
+ if alldisabled(grep { $_ ne "ssl3" } available_protocols("tls"));
+
+plan tests => 1;
+
+ok(run(test(["servername_test", srctop_file("apps", "server.pem"),
+ srctop_file("apps", "server.pem")])),
+ "running servername_test");
diff --git a/test/recipes/70-test_sslcbcpadding.t b/test/recipes/70-test_sslcbcpadding.t
new file mode 100644
index 000000000000..7a1b3ba995a5
--- /dev/null
+++ b/test/recipes/70-test_sslcbcpadding.t
@@ -0,0 +1,133 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use feature 'state';
+
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_sslcbcpadding";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLSv1.2 enabled"
+ if disabled("tls1_2");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+my $proxy = TLSProxy::Proxy->new(
+ \&add_maximal_padding_filter,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+# TODO: We could test all 256 values, but then the log file gets too large for
+# CI. See https://github.com/openssl/openssl/issues/1440.
+my @test_offsets = (0, 128, 254, 255);
+
+# Test that maximally-padded records are accepted.
+my $bad_padding_offset = -1;
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->serverconnects(1 + scalar(@test_offsets));
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 1 + scalar(@test_offsets);
+ok(TLSProxy::Message->success(), "Maximally-padded record test");
+
+# Test that invalid padding is rejected.
+my $fatal_alert; # set by add_maximal_padding_filter on client's fatal alert
+
+foreach my $offset (@test_offsets) {
+ $bad_padding_offset = $offset;
+ $fatal_alert = 0;
+ $proxy->clearClient();
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->clientstart();
+ ok($fatal_alert, "Invalid padding byte $bad_padding_offset");
+}
+
+sub add_maximal_padding_filter
+{
+ my $proxy = shift;
+ my $messages = $proxy->message_list;
+ state $sent_corrupted_payload;
+
+ if ($proxy->flight == 0) {
+ # Disable Encrypt-then-MAC.
+ foreach my $message (@{$messages}) {
+ if ($message->mt != TLSProxy::Message::MT_CLIENT_HELLO) {
+ next;
+ }
+
+ $message->delete_extension(TLSProxy::Message::EXT_ENCRYPT_THEN_MAC);
+ $message->process_extensions();
+ $message->repack();
+ }
+ $sent_corrupted_payload = 0;
+ return;
+ }
+
+ my $last_message = @{$messages}[-1];
+ if (defined($last_message)
+ && $last_message->server
+ && $last_message->mt == TLSProxy::Message::MT_FINISHED
+ && !@{$last_message->records}[0]->{sent}) {
+
+ # Insert a maximally-padded record. Assume a block size of 16 (AES) and
+ # a MAC length of 20 (SHA-1).
+ my $block_size = 16;
+ my $mac_len = 20;
+
+ # Size the plaintext so that 256 is a valid padding.
+ my $plaintext_len = $block_size - ($mac_len % $block_size);
+ my $plaintext = "A" x $plaintext_len;
+
+ my $data = "B" x $block_size; # Explicit IV.
+ $data .= $plaintext;
+ $data .= TLSProxy::Proxy::fill_known_data($mac_len); # MAC.
+
+ # Add padding.
+ for (my $i = 0; $i < 256; $i++) {
+ if ($i == $bad_padding_offset) {
+ $sent_corrupted_payload = 1;
+ $data .= "\xfe";
+ } else {
+ $data .= "\xff";
+ }
+ }
+
+ my $record = TLSProxy::Record->new(
+ $proxy->flight,
+ TLSProxy::Record::RT_APPLICATION_DATA,
+ TLSProxy::Record::VERS_TLS_1_2,
+ length($data),
+ 0,
+ length($data),
+ $plaintext_len,
+ $data,
+ $plaintext,
+ );
+
+ # Send the record immediately after the server Finished.
+ push @{$proxy->record_list}, $record;
+ } elsif ($sent_corrupted_payload) {
+ # Check for bad_record_mac from client
+ my $last_record = @{$proxy->record_list}[-1];
+ $fatal_alert = 1 if $last_record->is_fatal_alert(0) == 20;
+ }
+}
diff --git a/test/recipes/70-test_sslcertstatus.t b/test/recipes/70-test_sslcertstatus.t
new file mode 100644
index 000000000000..41c112ae6d57
--- /dev/null
+++ b/test/recipes/70-test_sslcertstatus.t
@@ -0,0 +1,67 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_sslcertstatus";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs the ocsp feature enabled"
+ if disabled("ocsp");
+
+plan skip_all => "$test_name needs TLS enabled"
+ if alldisabled(available_protocols("tls"))
+ || (!disabled("tls1_3") && disabled("tls1_2"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+my $proxy = TLSProxy::Proxy->new(
+ \&certstatus_filter,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#Test 1: Sending a status_request extension in both ClientHello and
+#ServerHello but then omitting the CertificateStatus message is valid
+$proxy->clientflags("-status -no_tls1_3");
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 1;
+ok(TLSProxy::Message->success, "Missing CertificateStatus message");
+
+sub certstatus_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ServerHello
+ if ($proxy->flight != 1) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_SERVER_HELLO) {
+ #Add the status_request to the ServerHello even though we are not
+ #going to send a CertificateStatus message
+ $message->set_extension(TLSProxy::Message::EXT_STATUS_REQUEST,
+ "");
+
+ $message->repack();
+ }
+ }
+}
diff --git a/test/recipes/70-test_sslextension.t b/test/recipes/70-test_sslextension.t
new file mode 100644
index 000000000000..c1893b8f06e7
--- /dev/null
+++ b/test/recipes/70-test_sslextension.t
@@ -0,0 +1,270 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use feature 'state';
+
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_sslextension";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS enabled"
+ if alldisabled(available_protocols("tls"));
+
+my $no_below_tls13 = alldisabled(("tls1", "tls1_1", "tls1_2"))
+ || (!disabled("tls1_3") && disabled("tls1_2"));
+
+use constant {
+ UNSOLICITED_SERVER_NAME => 0,
+ UNSOLICITED_SERVER_NAME_TLS13 => 1,
+ UNSOLICITED_SCT => 2,
+ NONCOMPLIANT_SUPPORTED_GROUPS => 3
+};
+
+my $testtype;
+my $fatal_alert = 0; # set by filter on fatal alert
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+my $proxy = TLSProxy::Proxy->new(
+ \&inject_duplicate_extension_clienthello,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+
+sub extension_filter
+{
+ my $proxy = shift;
+
+ if ($proxy->flight == 1) {
+ # Change the ServerRandom so that the downgrade sentinel doesn't cause
+ # the connection to fail
+ my $message = ${$proxy->message_list}[1];
+ $message->random("\0"x32);
+ $message->repack();
+ return;
+ }
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ # Remove all extensions and set the extension len to zero
+ $message->extension_data({});
+ $message->extensions_len(0);
+ # Extensions have been removed so make sure we don't try to use them
+ $message->process_extensions();
+
+ $message->repack();
+ }
+ }
+}
+
+sub inject_duplicate_extension
+{
+ my ($proxy, $message_type) = @_;
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == $message_type) {
+ my %extensions = %{$message->extension_data};
+ # Add a duplicate extension. We use cryptopro_bug since we never
+ # normally write that one, and it is allowed as unsolicited in the
+ # ServerHello
+ $message->set_extension(TLSProxy::Message::EXT_CRYPTOPRO_BUG_EXTENSION, "");
+ $message->dupext(TLSProxy::Message::EXT_CRYPTOPRO_BUG_EXTENSION);
+ $message->repack();
+ }
+ }
+}
+
+sub inject_duplicate_extension_clienthello
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight == 0) {
+ inject_duplicate_extension($proxy, TLSProxy::Message::MT_CLIENT_HELLO);
+ return;
+ }
+
+ my $last_record = @{$proxy->{record_list}}[-1];
+ $fatal_alert = 1 if $last_record->is_fatal_alert(1);
+}
+
+sub inject_duplicate_extension_serverhello
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ServerHello
+ if ($proxy->flight == 0) {
+ return;
+ } elsif ($proxy->flight == 1) {
+ inject_duplicate_extension($proxy, TLSProxy::Message::MT_SERVER_HELLO);
+ return;
+ }
+
+ my $last_record = @{$proxy->{record_list}}[-1];
+ $fatal_alert = 1 if $last_record->is_fatal_alert(0);
+}
+
+sub inject_unsolicited_extension
+{
+ my $proxy = shift;
+ my $message;
+ state $sent_unsolisited_extension;
+
+ if ($proxy->flight == 0) {
+ $sent_unsolisited_extension = 0;
+ return;
+ }
+
+ # We're only interested in the initial ServerHello/EncryptedExtensions
+ if ($proxy->flight != 1) {
+ if ($sent_unsolisited_extension) {
+ my $last_record = @{$proxy->record_list}[-1];
+ $fatal_alert = 1 if $last_record->is_fatal_alert(0);
+ }
+ return;
+ }
+
+ if ($testtype == UNSOLICITED_SERVER_NAME_TLS13) {
+ return if (!defined($message = ${$proxy->message_list}[2]));
+ die "Expecting EE message ".($message->mt).","
+ .${$proxy->message_list}[1]->mt.", "
+ .${$proxy->message_list}[3]->mt
+ if $message->mt != TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS;
+ } else {
+ $message = ${$proxy->message_list}[1];
+ }
+
+ my $ext = pack "C2",
+ 0x00, 0x00; #Extension length
+
+ my $type;
+ if ($testtype == UNSOLICITED_SERVER_NAME
+ || $testtype == UNSOLICITED_SERVER_NAME_TLS13) {
+ $type = TLSProxy::Message::EXT_SERVER_NAME;
+ } elsif ($testtype == UNSOLICITED_SCT) {
+ $type = TLSProxy::Message::EXT_SCT;
+ } elsif ($testtype == NONCOMPLIANT_SUPPORTED_GROUPS) {
+ $type = TLSProxy::Message::EXT_SUPPORTED_GROUPS;
+ }
+ $message->set_extension($type, $ext);
+ $message->repack();
+ $sent_unsolisited_extension = 1;
+}
+
+sub inject_cryptopro_extension
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ my $message = ${$proxy->message_list}[0];
+ $message->set_extension(TLSProxy::Message::EXT_CRYPTOPRO_BUG_EXTENSION, "");
+ $message->repack();
+}
+
+# Test 1-2: Sending a duplicate extension should fail.
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 8;
+ok($fatal_alert, "Duplicate ClientHello extension");
+
+SKIP: {
+ skip "TLS <= 1.2 disabled", 4 if $no_below_tls13;
+
+ $fatal_alert = 0;
+ $proxy->clear();
+ $proxy->filter(\&inject_duplicate_extension_serverhello);
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->start();
+ ok($fatal_alert, "Duplicate ServerHello extension");
+
+ #Test 3: Sending a zero length extension block should pass
+ $proxy->clear();
+ $proxy->filter(\&extension_filter);
+ $proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->start();
+ ok(TLSProxy::Message->success, "Zero extension length test");
+
+ #Test 4: Inject an unsolicited extension (<= TLSv1.2)
+ $fatal_alert = 0;
+ $proxy->clear();
+ $proxy->filter(\&inject_unsolicited_extension);
+ $testtype = UNSOLICITED_SERVER_NAME;
+ $proxy->clientflags("-no_tls1_3 -noservername");
+ $proxy->start();
+ ok($fatal_alert, "Unsolicited server name extension");
+
+ #Test 5: Send the cryptopro extension in a ClientHello. Normally this is an
+ # unsolicited extension only ever seen in the ServerHello. We should
+ # ignore it in a ClientHello
+ $proxy->clear();
+ $proxy->filter(\&inject_cryptopro_extension);
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "Cryptopro extension in ClientHello");
+}
+
+SKIP: {
+ skip "TLS <= 1.2 disabled or EC disabled", 1
+ if $no_below_tls13 || disabled("ec");
+ #Test 6: Inject a noncompliant supported_groups extension (<= TLSv1.2)
+ $proxy->clear();
+ $proxy->filter(\&inject_unsolicited_extension);
+ $testtype = NONCOMPLIANT_SUPPORTED_GROUPS;
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "Noncompliant supported_groups extension");
+}
+
+SKIP: {
+ skip "TLS <= 1.2 or CT disabled", 1
+ if $no_below_tls13 || disabled("ct");
+ #Test 7: Same as above for the SCT extension which has special handling
+ $fatal_alert = 0;
+ $proxy->clear();
+ $proxy->filter(\&inject_unsolicited_extension);
+ $testtype = UNSOLICITED_SCT;
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->start();
+ ok($fatal_alert, "Unsolicited sct extension");
+}
+
+SKIP: {
+ skip "TLS 1.3 disabled", 1
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+ #Test 8: Inject an unsolicited extension (TLSv1.3)
+ $fatal_alert = 0;
+ $proxy->clear();
+ $proxy->filter(\&inject_unsolicited_extension);
+ $testtype = UNSOLICITED_SERVER_NAME_TLS13;
+ $proxy->clientflags("-noservername");
+ $proxy->start();
+ ok($fatal_alert, "Unsolicited server name extension (TLSv1.3)");
+}
diff --git a/test/recipes/70-test_sslmessages.t b/test/recipes/70-test_sslmessages.t
new file mode 100644
index 000000000000..abb0f5aff905
--- /dev/null
+++ b/test/recipes/70-test_sslmessages.t
@@ -0,0 +1,430 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
+use OpenSSL::Test::Utils;
+use File::Temp qw(tempfile);
+use TLSProxy::Proxy;
+use checkhandshake qw(checkhandshake @handmessages @extensions);
+
+my $test_name = "test_sslmessages";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS enabled"
+ if alldisabled(available_protocols("tls"))
+ || (!disabled("tls1_3") && disabled("tls1_2"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+@handmessages = (
+ [TLSProxy::Message::MT_CLIENT_HELLO,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_SERVER_HELLO,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_CERTIFICATE,
+ checkhandshake::ALL_HANDSHAKES
+ & ~checkhandshake::RESUME_HANDSHAKE],
+ (disabled("ec") ? () :
+ [TLSProxy::Message::MT_SERVER_KEY_EXCHANGE,
+ checkhandshake::EC_HANDSHAKE]),
+ [TLSProxy::Message::MT_CERTIFICATE_STATUS,
+ checkhandshake::OCSP_HANDSHAKE],
+ #ServerKeyExchange handshakes not currently supported by TLSProxy
+ [TLSProxy::Message::MT_CERTIFICATE_REQUEST,
+ checkhandshake::CLIENT_AUTH_HANDSHAKE],
+ [TLSProxy::Message::MT_SERVER_HELLO_DONE,
+ checkhandshake::ALL_HANDSHAKES
+ & ~checkhandshake::RESUME_HANDSHAKE],
+ [TLSProxy::Message::MT_CERTIFICATE,
+ checkhandshake::CLIENT_AUTH_HANDSHAKE],
+ [TLSProxy::Message::MT_CLIENT_KEY_EXCHANGE,
+ checkhandshake::ALL_HANDSHAKES
+ & ~checkhandshake::RESUME_HANDSHAKE],
+ [TLSProxy::Message::MT_CERTIFICATE_VERIFY,
+ checkhandshake::CLIENT_AUTH_HANDSHAKE],
+ [TLSProxy::Message::MT_NEXT_PROTO,
+ checkhandshake::NPN_HANDSHAKE],
+ [TLSProxy::Message::MT_FINISHED,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_NEW_SESSION_TICKET,
+ checkhandshake::ALL_HANDSHAKES
+ & ~checkhandshake::RESUME_HANDSHAKE],
+ [TLSProxy::Message::MT_FINISHED,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_CLIENT_HELLO,
+ checkhandshake::RENEG_HANDSHAKE],
+ [TLSProxy::Message::MT_SERVER_HELLO,
+ checkhandshake::RENEG_HANDSHAKE],
+ [TLSProxy::Message::MT_CERTIFICATE,
+ checkhandshake::RENEG_HANDSHAKE],
+ [TLSProxy::Message::MT_SERVER_HELLO_DONE,
+ checkhandshake::RENEG_HANDSHAKE],
+ [TLSProxy::Message::MT_CLIENT_KEY_EXCHANGE,
+ checkhandshake::RENEG_HANDSHAKE],
+ [TLSProxy::Message::MT_FINISHED,
+ checkhandshake::RENEG_HANDSHAKE],
+ [TLSProxy::Message::MT_NEW_SESSION_TICKET,
+ checkhandshake::RENEG_HANDSHAKE],
+ [TLSProxy::Message::MT_FINISHED,
+ checkhandshake::RENEG_HANDSHAKE],
+ [0, 0]
+);
+
+@extensions = (
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SERVER_NAME,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SERVER_NAME_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::STATUS_REQUEST_CLI_EXTENSION],
+ (disabled("ec") ? () :
+ [TLSProxy::Message::MT_CLIENT_HELLO,
+ TLSProxy::Message::EXT_SUPPORTED_GROUPS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS]),
+ (disabled("ec") ? () :
+ [TLSProxy::Message::MT_CLIENT_HELLO,
+ TLSProxy::Message::EXT_EC_POINT_FORMATS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS]),
+ (disabled("tls1_2") ? () :
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SIG_ALGS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS]),
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ALPN,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::ALPN_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SCT,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SCT_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SESSION_TICKET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_RENEGOTIATE,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::RENEGOTIATE_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_NPN,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::NPN_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SRP,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SRP_CLI_EXTENSION],
+
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_RENEGOTIATE,
+ TLSProxy::Message::SERVER,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC,
+ TLSProxy::Message::SERVER,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET,
+ TLSProxy::Message::SERVER,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SESSION_TICKET,
+ TLSProxy::Message::SERVER,
+ checkhandshake::SESSION_TICKET_SRV_EXTENSION],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SERVER_NAME,
+ TLSProxy::Message::SERVER,
+ checkhandshake::SERVER_NAME_SRV_EXTENSION],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST,
+ TLSProxy::Message::SERVER,
+ checkhandshake::STATUS_REQUEST_SRV_EXTENSION],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_ALPN,
+ TLSProxy::Message::SERVER,
+ checkhandshake::ALPN_SRV_EXTENSION],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SCT,
+ TLSProxy::Message::SERVER,
+ checkhandshake::SCT_SRV_EXTENSION],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_NPN,
+ TLSProxy::Message::SERVER,
+ checkhandshake::NPN_SRV_EXTENSION],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_EC_POINT_FORMATS,
+ TLSProxy::Message::SERVER,
+ checkhandshake::EC_POINT_FORMAT_SRV_EXTENSION],
+ [0,0,0,0]
+);
+
+#Test 1: Check we get all the right messages for a default handshake
+(undef, my $session) = tempfile();
+$proxy->serverconnects(2);
+$proxy->clientflags("-no_tls1_3 -sess_out ".$session);
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 21;
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "Default handshake test");
+
+#Test 2: Resumption handshake
+$proxy->clearClient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session);
+$proxy->clientstart();
+checkhandshake($proxy, checkhandshake::RESUME_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ & ~checkhandshake::SESSION_TICKET_SRV_EXTENSION,
+ "Resumption handshake test");
+unlink $session;
+
+SKIP: {
+ skip "No OCSP support in this OpenSSL build", 3
+ if disabled("ocsp");
+
+ #Test 3: A status_request handshake (client request only)
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3 -status");
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::STATUS_REQUEST_CLI_EXTENSION,
+ "status_request handshake test (client)");
+
+ #Test 4: A status_request handshake (server support only)
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->serverflags("-status_file "
+ .srctop_file("test", "recipes", "ocsp-response.der"));
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "status_request handshake test (server)");
+
+ #Test 5: A status_request handshake (client and server)
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3 -status");
+ $proxy->serverflags("-status_file "
+ .srctop_file("test", "recipes", "ocsp-response.der"));
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+ | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+ "status_request handshake test");
+}
+
+#Test 6: A client auth handshake
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3 -cert ".srctop_file("apps", "server.pem"));
+$proxy->serverflags("-Verify 5");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::CLIENT_AUTH_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "Client auth handshake test");
+
+#Test 7: A handshake with a renegotiation
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3");
+$proxy->serverflags("-client_renegotiation");
+$proxy->reneg(1);
+$proxy->start();
+checkhandshake($proxy, checkhandshake::RENEG_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "Renegotiation handshake test");
+
+#Test 8: Server name handshake (no client request)
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3 -noservername");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ & ~checkhandshake::SERVER_NAME_CLI_EXTENSION,
+ "Server name handshake test (client)");
+
+#Test 9: Server name handshake (server support only)
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3 -noservername");
+$proxy->serverflags("-servername testhost");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ & ~checkhandshake::SERVER_NAME_CLI_EXTENSION,
+ "Server name handshake test (server)");
+
+#Test 10: Server name handshake (client and server)
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3 -servername testhost");
+$proxy->serverflags("-servername testhost");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::SERVER_NAME_SRV_EXTENSION,
+ "Server name handshake test");
+
+#Test 11: ALPN handshake (client request only)
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3 -alpn test");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::ALPN_CLI_EXTENSION,
+ "ALPN handshake test (client)");
+
+#Test 12: ALPN handshake (server support only)
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3");
+$proxy->serverflags("-alpn test");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "ALPN handshake test (server)");
+
+#Test 13: ALPN handshake (client and server)
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3 -alpn test");
+$proxy->serverflags("-alpn test");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::ALPN_CLI_EXTENSION
+ | checkhandshake::ALPN_SRV_EXTENSION,
+ "ALPN handshake test");
+
+SKIP: {
+ skip "No CT, EC or OCSP support in this OpenSSL build", 1
+ if disabled("ct") || disabled("ec") || disabled("ocsp");
+
+ #Test 14: SCT handshake (client request only)
+ $proxy->clear();
+ #Note: -ct also sends status_request
+ $proxy->clientflags("-no_tls1_3 -ct");
+ $proxy->serverflags("-status_file "
+ .srctop_file("test", "recipes", "ocsp-response.der"));
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::SCT_CLI_EXTENSION
+ | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+ | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+ "SCT handshake test (client)");
+}
+
+SKIP: {
+ skip "No OCSP support in this OpenSSL build", 1
+ if disabled("ocsp");
+
+ #Test 15: SCT handshake (server support only)
+ $proxy->clear();
+ #Note: -ct also sends status_request
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->serverflags("-status_file "
+ .srctop_file("test", "recipes", "ocsp-response.der"));
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "SCT handshake test (server)");
+}
+
+SKIP: {
+ skip "No CT, EC or OCSP support in this OpenSSL build", 1
+ if disabled("ct") || disabled("ec") || disabled("ocsp");
+
+ #Test 16: SCT handshake (client and server)
+ #There is no built-in server side support for this so we are actually also
+ #testing custom extensions here
+ $proxy->clear();
+ #Note: -ct also sends status_request
+ $proxy->clientflags("-no_tls1_3 -ct");
+ $proxy->serverflags("-status_file "
+ .srctop_file("test", "recipes", "ocsp-response.der")
+ ." -serverinfo ".srctop_file("test", "serverinfo.pem"));
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::SCT_CLI_EXTENSION
+ | checkhandshake::SCT_SRV_EXTENSION
+ | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+ | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+ "SCT handshake test");
+}
+
+
+SKIP: {
+ skip "No NPN support in this OpenSSL build", 3
+ if disabled("nextprotoneg");
+
+ #Test 17: NPN handshake (client request only)
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3 -nextprotoneg test");
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::NPN_CLI_EXTENSION,
+ "NPN handshake test (client)");
+
+ #Test 18: NPN handshake (server support only)
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->serverflags("-nextprotoneg test");
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "NPN handshake test (server)");
+
+ #Test 19: NPN handshake (client and server)
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3 -nextprotoneg test");
+ $proxy->serverflags("-nextprotoneg test");
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::NPN_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::NPN_CLI_EXTENSION
+ | checkhandshake::NPN_SRV_EXTENSION,
+ "NPN handshake test");
+}
+
+SKIP: {
+ skip "No SRP support in this OpenSSL build", 1
+ if disabled("srp");
+
+ #Test 20: SRP extension
+ #Note: We are not actually going to perform an SRP handshake (TLSProxy
+ #does not support it). However it is sufficient for us to check that the
+ #SRP extension gets added on the client side. There is no SRP extension
+ #generated on the server side anyway.
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3 -srpuser user -srppass pass:pass");
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::SRP_CLI_EXTENSION,
+ "SRP extension test");
+}
+
+#Test 21: EC handshake
+SKIP: {
+ skip "No EC support in this OpenSSL build", 1 if disabled("ec");
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->serverflags("-no_tls1_3");
+ $proxy->ciphers("ECDHE-RSA-AES128-SHA");
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::EC_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::EC_POINT_FORMAT_SRV_EXTENSION,
+ "EC handshake test");
+}
diff --git a/test/recipes/70-test_sslrecords.t b/test/recipes/70-test_sslrecords.t
new file mode 100644
index 000000000000..318c9235b0c9
--- /dev/null
+++ b/test/recipes/70-test_sslrecords.t
@@ -0,0 +1,721 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use feature 'state';
+
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_sslrecords";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLSv1.2 enabled"
+ if disabled("tls1_2");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+my $proxy = TLSProxy::Proxy->new(
+ \&add_empty_recs_filter,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+my $boundary_test_type;
+my $fatal_alert = 0; # set by filters at expected fatal alerts
+
+#Test 1: Injecting out of context empty records should fail
+my $content_type = TLSProxy::Record::RT_APPLICATION_DATA;
+my $inject_recs_num = 1;
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 20;
+ok($fatal_alert, "Out of context empty records test");
+
+#Test 2: Injecting in context empty records should succeed
+$proxy->clear();
+$content_type = TLSProxy::Record::RT_HANDSHAKE;
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->start();
+ok(TLSProxy::Message->success(), "In context empty records test");
+
+#Test 3: Injecting too many in context empty records should fail
+$fatal_alert = 0;
+$proxy->clear();
+#We allow 32 consecutive in context empty records
+$inject_recs_num = 33;
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->start();
+ok($fatal_alert, "Too many in context empty records test");
+
+#Test 4: Injecting a fragmented fatal alert should fail. We expect the server to
+# send back an alert of its own because it cannot handle fragmented
+# alerts
+$fatal_alert = 0;
+$proxy->clear();
+$proxy->filter(\&add_frag_alert_filter);
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->start();
+ok($fatal_alert, "Fragmented alert records test");
+
+#Run some SSLv2 ClientHello tests
+
+use constant {
+ TLSV1_2_IN_SSLV2 => 0,
+ SSLV2_IN_SSLV2 => 1,
+ FRAGMENTED_IN_TLSV1_2 => 2,
+ FRAGMENTED_IN_SSLV2 => 3,
+ ALERT_BEFORE_SSLV2 => 4
+};
+
+# The TLSv1.2 in SSLv2 ClientHello need to run at security level 0
+# because in a SSLv2 ClientHello we can't send extentions to indicate
+# which signature algorithm we want to use, and the default is SHA1.
+
+#Test 5: Inject an SSLv2 style record format for a TLSv1.2 ClientHello
+my $sslv2testtype = TLSV1_2_IN_SSLV2;
+$proxy->clear();
+$proxy->filter(\&add_sslv2_filter);
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3 -legacy_renegotiation");
+$proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+$proxy->start();
+ok(TLSProxy::Message->success(), "TLSv1.2 in SSLv2 ClientHello test");
+
+#Test 6: Inject an SSLv2 style record format for an SSLv2 ClientHello. We don't
+# support this so it should fail. We actually treat it as an unknown
+# protocol so we don't even send an alert in this case.
+$sslv2testtype = SSLV2_IN_SSLV2;
+$proxy->clear();
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+$proxy->start();
+ok(TLSProxy::Message->fail(), "SSLv2 in SSLv2 ClientHello test");
+
+#Test 7: Sanity check ClientHello fragmentation. This isn't really an SSLv2 test
+# at all, but it gives us confidence that Test 8 fails for the right
+# reasons
+$sslv2testtype = FRAGMENTED_IN_TLSV1_2;
+$proxy->clear();
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+$proxy->start();
+ok(TLSProxy::Message->success(), "Fragmented ClientHello in TLSv1.2 test");
+
+#Test 8: Fragment a TLSv1.2 ClientHello across a TLS1.2 record; an SSLv2
+# record; and another TLS1.2 record. This isn't allowed so should fail
+$sslv2testtype = FRAGMENTED_IN_SSLV2;
+$proxy->clear();
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Fragmented ClientHello in TLSv1.2/SSLv2 test");
+
+#Test 9: Send a TLS warning alert before an SSLv2 ClientHello. This should
+# fail because an SSLv2 ClientHello must be the first record.
+$sslv2testtype = ALERT_BEFORE_SSLV2;
+$proxy->clear();
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Alert before SSLv2 ClientHello test");
+
+#Unrecognised record type tests
+
+#Test 10: Sending an unrecognised record type in TLS1.2 should fail
+$fatal_alert = 0;
+$proxy->clear();
+$proxy->serverflags("-tls1_2");
+$proxy->clientflags("-no_tls1_3");
+$proxy->filter(\&add_unknown_record_type);
+$proxy->start();
+ok($fatal_alert, "Unrecognised record type in TLS1.2");
+
+SKIP: {
+ skip "TLSv1.1 disabled", 1 if disabled("tls1_1");
+
+ #Test 11: Sending an unrecognised record type in TLS1.1 should fail
+ $fatal_alert = 0;
+ $proxy->clear();
+ $proxy->clientflags("-tls1_1 -cipher DEFAULT:\@SECLEVEL=0");
+ $proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+ $proxy->start();
+ ok($fatal_alert, "Unrecognised record type in TLS1.1");
+}
+
+#Test 12: Sending a different record version in TLS1.2 should fail
+$fatal_alert = 0;
+$proxy->clear();
+$proxy->clientflags("-tls1_2");
+$proxy->filter(\&change_version);
+$proxy->start();
+ok($fatal_alert, "Changed record version in TLS1.2");
+
+#TLS1.3 specific tests
+SKIP: {
+ skip "TLSv1.3 disabled", 8
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+ #Test 13: Sending a different record version in TLS1.3 should fail
+ $proxy->clear();
+ $proxy->filter(\&change_version);
+ $proxy->start();
+ ok(TLSProxy::Message->fail(), "Changed record version in TLS1.3");
+
+ #Test 14: Sending an unrecognised record type in TLS1.3 should fail
+ $fatal_alert = 0;
+ $proxy->clear();
+ $proxy->filter(\&add_unknown_record_type);
+ $proxy->start();
+ ok($fatal_alert, "Unrecognised record type in TLS1.3");
+
+ #Test 15: Sending an outer record type other than app data once encrypted
+ #should fail
+ $fatal_alert = 0;
+ $proxy->clear();
+ $proxy->filter(\&change_outer_record_type);
+ $proxy->start();
+ ok($fatal_alert, "Wrong outer record type in TLS1.3");
+
+ use constant {
+ DATA_AFTER_SERVER_HELLO => 0,
+ DATA_AFTER_FINISHED => 1,
+ DATA_AFTER_KEY_UPDATE => 2,
+ DATA_BETWEEN_KEY_UPDATE => 3,
+ NO_DATA_BETWEEN_KEY_UPDATE => 4,
+ };
+
+ #Test 16: Sending a ServerHello which doesn't end on a record boundary
+ # should fail
+ $fatal_alert = 0;
+ $proxy->clear();
+ $boundary_test_type = DATA_AFTER_SERVER_HELLO;
+ $proxy->filter(\&not_on_record_boundary);
+ $proxy->start();
+ ok($fatal_alert, "Record not on boundary in TLS1.3 (ServerHello)");
+
+ #Test 17: Sending a Finished which doesn't end on a record boundary
+ # should fail
+ $fatal_alert = 0;
+ $proxy->clear();
+ $boundary_test_type = DATA_AFTER_FINISHED;
+ $proxy->start();
+ ok($fatal_alert, "Record not on boundary in TLS1.3 (Finished)");
+
+ #Test 18: Sending a KeyUpdate which doesn't end on a record boundary
+ # should fail
+ $fatal_alert = 0;
+ $proxy->clear();
+ $boundary_test_type = DATA_AFTER_KEY_UPDATE;
+ $proxy->start();
+ ok($fatal_alert, "Record not on boundary in TLS1.3 (KeyUpdate)");
+
+ #Test 19: Sending application data in the middle of a fragmented KeyUpdate
+ # should fail. Strictly speaking this is not a record boundary test
+ # but we use the same filter.
+ $fatal_alert = 0;
+ $proxy->clear();
+ $boundary_test_type = DATA_BETWEEN_KEY_UPDATE;
+ $proxy->start();
+ ok($fatal_alert, "Data between KeyUpdate");
+
+ #Test 20: Fragmented KeyUpdate. This should succeed. Strictly speaking this
+ # is not a record boundary test but we use the same filter.
+ $proxy->clear();
+ $boundary_test_type = NO_DATA_BETWEEN_KEY_UPDATE;
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "No data between KeyUpdate");
+ }
+
+
+sub add_empty_recs_filter
+{
+ my $proxy = shift;
+ my $records = $proxy->record_list;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ $fatal_alert = 1 if @{$records}[-1]->is_fatal_alert(1) == 10;
+ return;
+ }
+
+ for (my $i = 0; $i < $inject_recs_num; $i++) {
+ my $record = TLSProxy::Record->new(
+ 0,
+ $content_type,
+ TLSProxy::Record::VERS_TLS_1_2,
+ 0,
+ 0,
+ 0,
+ 0,
+ "",
+ ""
+ );
+ push @{$records}, $record;
+ }
+}
+
+sub add_frag_alert_filter
+{
+ my $proxy = shift;
+ my $records = $proxy->record_list;
+ my $byte;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ $fatal_alert = 1 if @{$records}[-1]->is_fatal_alert(1) == 10;
+ return;
+ }
+
+ # Add a zero length fragment first
+ #my $record = TLSProxy::Record->new(
+ # 0,
+ # TLSProxy::Record::RT_ALERT,
+ # TLSProxy::Record::VERS_TLS_1_2,
+ # 0,
+ # 0,
+ # 0,
+ # "",
+ # ""
+ #);
+ #push @{$proxy->record_list}, $record;
+
+ # Now add the alert level (Fatal) as a separate record
+ $byte = pack('C', TLSProxy::Message::AL_LEVEL_FATAL);
+ my $record = TLSProxy::Record->new(
+ 0,
+ TLSProxy::Record::RT_ALERT,
+ TLSProxy::Record::VERS_TLS_1_2,
+ 1,
+ 0,
+ 1,
+ 1,
+ $byte,
+ $byte
+ );
+ push @{$records}, $record;
+
+ # And finally the description (Unexpected message) in a third record
+ $byte = pack('C', TLSProxy::Message::AL_DESC_UNEXPECTED_MESSAGE);
+ $record = TLSProxy::Record->new(
+ 0,
+ TLSProxy::Record::RT_ALERT,
+ TLSProxy::Record::VERS_TLS_1_2,
+ 1,
+ 0,
+ 1,
+ 1,
+ $byte,
+ $byte
+ );
+ push @{$records}, $record;
+}
+
+sub add_sslv2_filter
+{
+ my $proxy = shift;
+ my $clienthello;
+ my $record;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ # Ditch the real ClientHello - we're going to replace it with our own
+ shift @{$proxy->record_list};
+
+ if ($sslv2testtype == ALERT_BEFORE_SSLV2) {
+ my $alert = pack('CC', TLSProxy::Message::AL_LEVEL_FATAL,
+ TLSProxy::Message::AL_DESC_NO_RENEGOTIATION);
+ my $alertlen = length $alert;
+ $record = TLSProxy::Record->new(
+ 0,
+ TLSProxy::Record::RT_ALERT,
+ TLSProxy::Record::VERS_TLS_1_2,
+ $alertlen,
+ 0,
+ $alertlen,
+ $alertlen,
+ $alert,
+ $alert
+ );
+
+ push @{$proxy->record_list}, $record;
+ }
+
+ if ($sslv2testtype == ALERT_BEFORE_SSLV2
+ || $sslv2testtype == TLSV1_2_IN_SSLV2
+ || $sslv2testtype == SSLV2_IN_SSLV2) {
+ # This is an SSLv2 format ClientHello
+ $clienthello =
+ pack "C44",
+ 0x01, # ClientHello
+ 0x03, 0x03, #TLSv1.2
+ 0x00, 0x03, # Ciphersuites len
+ 0x00, 0x00, # Session id len
+ 0x00, 0x20, # Challenge len
+ 0x00, 0x00, 0x2f, #AES128-SHA
+ 0x01, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6; # Challenge
+
+ if ($sslv2testtype == SSLV2_IN_SSLV2) {
+ # Set the version to "real" SSLv2
+ vec($clienthello, 1, 8) = 0x00;
+ vec($clienthello, 2, 8) = 0x02;
+ }
+
+ my $chlen = length $clienthello;
+
+ $record = TLSProxy::Record->new(
+ 0,
+ TLSProxy::Record::RT_HANDSHAKE,
+ TLSProxy::Record::VERS_TLS_1_2,
+ $chlen,
+ 1, #SSLv2
+ $chlen,
+ $chlen,
+ $clienthello,
+ $clienthello
+ );
+
+ push @{$proxy->record_list}, $record;
+ } else {
+ # For this test we're using a real TLS ClientHello
+ $clienthello =
+ pack "C49",
+ 0x01, # ClientHello
+ 0x00, 0x00, 0x2D, # Message length
+ 0x03, 0x03, # TLSv1.2
+ 0x01, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
+ 0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
+ 0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, # Random
+ 0x00, # Session id len
+ 0x00, 0x04, # Ciphersuites len
+ 0x00, 0x2f, # AES128-SHA
+ 0x00, 0xff, # Empty reneg info SCSV
+ 0x01, # Compression methods len
+ 0x00, # Null compression
+ 0x00, 0x00; # Extensions len
+
+ # Split this into 3: A TLS record; a SSLv2 record and a TLS record.
+ # We deliberately split the second record prior to the Challenge/Random
+ # and set the first byte of the random to 1. This makes the second SSLv2
+ # record look like an SSLv2 ClientHello
+ my $frag1 = substr $clienthello, 0, 6;
+ my $frag2 = substr $clienthello, 6, 32;
+ my $frag3 = substr $clienthello, 38;
+
+ my $fraglen = length $frag1;
+ $record = TLSProxy::Record->new(
+ 0,
+ TLSProxy::Record::RT_HANDSHAKE,
+ TLSProxy::Record::VERS_TLS_1_2,
+ $fraglen,
+ 0,
+ $fraglen,
+ $fraglen,
+ $frag1,
+ $frag1
+ );
+ push @{$proxy->record_list}, $record;
+
+ $fraglen = length $frag2;
+ my $recvers;
+ if ($sslv2testtype == FRAGMENTED_IN_SSLV2) {
+ $recvers = 1;
+ } else {
+ $recvers = 0;
+ }
+ $record = TLSProxy::Record->new(
+ 0,
+ TLSProxy::Record::RT_HANDSHAKE,
+ TLSProxy::Record::VERS_TLS_1_2,
+ $fraglen,
+ $recvers,
+ $fraglen,
+ $fraglen,
+ $frag2,
+ $frag2
+ );
+ push @{$proxy->record_list}, $record;
+
+ $fraglen = length $frag3;
+ $record = TLSProxy::Record->new(
+ 0,
+ TLSProxy::Record::RT_HANDSHAKE,
+ TLSProxy::Record::VERS_TLS_1_2,
+ $fraglen,
+ 0,
+ $fraglen,
+ $fraglen,
+ $frag3,
+ $frag3
+ );
+ push @{$proxy->record_list}, $record;
+ }
+
+}
+
+sub add_unknown_record_type
+{
+ my $proxy = shift;
+ my $records = $proxy->record_list;
+ state $added_record;
+
+ # We'll change a record after the initial version neg has taken place
+ if ($proxy->flight == 0) {
+ $added_record = 0;
+ return;
+ } elsif ($proxy->flight != 1 || $added_record) {
+ $fatal_alert = 1 if @{$records}[-1]->is_fatal_alert(0) == 10;
+ return;
+ }
+
+ my $record = TLSProxy::Record->new(
+ 1,
+ TLSProxy::Record::RT_UNKNOWN,
+ @{$records}[-1]->version(),
+ 1,
+ 0,
+ 1,
+ 1,
+ "X",
+ "X"
+ );
+
+ #Find ServerHello record and insert after that
+ my $i;
+ for ($i = 0; ${$proxy->record_list}[$i]->flight() < 1; $i++) {
+ next;
+ }
+ $i++;
+
+ splice @{$proxy->record_list}, $i, 0, $record;
+ $added_record = 1;
+}
+
+sub change_version
+{
+ my $proxy = shift;
+ my $records = $proxy->record_list;
+
+ # We'll change a version after the initial version neg has taken place
+ if ($proxy->flight != 1) {
+ $fatal_alert = 1 if @{$records}[-1]->is_fatal_alert(0) == 70;
+ return;
+ }
+
+ if ($#{$records} > 1) {
+ # ... typically in ServerHelloDone
+ @{$records}[-1]->version(TLSProxy::Record::VERS_TLS_1_1);
+ }
+}
+
+sub change_outer_record_type
+{
+ my $proxy = shift;
+ my $records = $proxy->record_list;
+
+ # We'll change a record after the initial version neg has taken place
+ if ($proxy->flight != 1) {
+ $fatal_alert = 1 if @{$records}[-1]->is_fatal_alert(0) == 10;
+ return;
+ }
+
+ # Find CCS record and change record after that
+ my $i = 0;
+ foreach my $record (@{$records}) {
+ last if $record->content_type == TLSProxy::Record::RT_CCS;
+ $i++;
+ }
+ if (defined(${$records}[++$i])) {
+ ${$records}[$i]->outer_content_type(TLSProxy::Record::RT_HANDSHAKE);
+ }
+}
+
+sub not_on_record_boundary
+{
+ my $proxy = shift;
+ my $records = $proxy->record_list;
+ my $data;
+
+ #Find server's first flight
+ if ($proxy->flight != 1) {
+ $fatal_alert = 1 if @{$records}[-1]->is_fatal_alert(0) == 10;
+ return;
+ }
+
+ if ($boundary_test_type == DATA_AFTER_SERVER_HELLO) {
+ #Merge the ServerHello and EncryptedExtensions records into one
+ my $i = 0;
+ foreach my $record (@{$records}) {
+ if ($record->content_type == TLSProxy::Record::RT_HANDSHAKE) {
+ $record->{sent} = 1; # pretend it's sent already
+ last;
+ }
+ $i++;
+ }
+
+ if (defined(${$records}[$i+1])) {
+ $data = ${$records}[$i]->data();
+ $data .= ${$records}[$i+1]->decrypt_data();
+ ${$records}[$i+1]->data($data);
+ ${$records}[$i+1]->len(length $data);
+
+ #Delete the old ServerHello record
+ splice @{$records}, $i, 1;
+ }
+ } elsif ($boundary_test_type == DATA_AFTER_FINISHED) {
+ return if @{$proxy->{message_list}}[-1]->{mt}
+ != TLSProxy::Message::MT_FINISHED;
+
+ my $last_record = @{$records}[-1];
+ $data = $last_record->decrypt_data;
+
+ #Add a KeyUpdate message onto the end of the Finished record
+ my $keyupdate = pack "C5",
+ 0x18, # KeyUpdate
+ 0x00, 0x00, 0x01, # Message length
+ 0x00; # Update not requested
+
+ $data .= $keyupdate;
+
+ #Add content type and tag
+ $data .= pack("C", TLSProxy::Record::RT_HANDSHAKE).("\0"x16);
+
+ #Update the record
+ $last_record->data($data);
+ $last_record->len(length $data);
+ } elsif ($boundary_test_type == DATA_AFTER_KEY_UPDATE) {
+ return if @{$proxy->{message_list}}[-1]->{mt}
+ != TLSProxy::Message::MT_FINISHED;
+
+ #KeyUpdates must end on a record boundary
+
+ my $record = TLSProxy::Record->new(
+ 1,
+ TLSProxy::Record::RT_APPLICATION_DATA,
+ TLSProxy::Record::VERS_TLS_1_2,
+ 0,
+ 0,
+ 0,
+ 0,
+ "",
+ ""
+ );
+
+ #Add two KeyUpdate messages into a single record
+ my $keyupdate = pack "C5",
+ 0x18, # KeyUpdate
+ 0x00, 0x00, 0x01, # Message length
+ 0x00; # Update not requested
+
+ $data = $keyupdate.$keyupdate;
+
+ #Add content type and tag
+ $data .= pack("C", TLSProxy::Record::RT_HANDSHAKE).("\0"x16);
+
+ $record->data($data);
+ $record->len(length $data);
+ push @{$records}, $record;
+ } else {
+ return if @{$proxy->{message_list}}[-1]->{mt}
+ != TLSProxy::Message::MT_FINISHED;
+
+ my $record = TLSProxy::Record->new(
+ 1,
+ TLSProxy::Record::RT_APPLICATION_DATA,
+ TLSProxy::Record::VERS_TLS_1_2,
+ 0,
+ 0,
+ 0,
+ 0,
+ "",
+ ""
+ );
+
+ #Add a partial KeyUpdate message into the record
+ $data = pack "C1",
+ 0x18; # KeyUpdate message type. Omit the rest of the message header
+
+ #Add content type and tag
+ $data .= pack("C", TLSProxy::Record::RT_HANDSHAKE).("\0"x16);
+
+ $record->data($data);
+ $record->len(length $data);
+ push @{$records}, $record;
+
+ if ($boundary_test_type == DATA_BETWEEN_KEY_UPDATE) {
+ #Now add an app data record
+ $record = TLSProxy::Record->new(
+ 1,
+ TLSProxy::Record::RT_APPLICATION_DATA,
+ TLSProxy::Record::VERS_TLS_1_2,
+ 0,
+ 0,
+ 0,
+ 0,
+ "",
+ ""
+ );
+
+ #Add an empty app data record (just content type and tag)
+ $data = pack("C", TLSProxy::Record::RT_APPLICATION_DATA).("\0"x16);
+
+ $record->data($data);
+ $record->len(length $data);
+ push @{$records}, $record;
+ }
+
+ #Now add the rest of the KeyUpdate message
+ $record = TLSProxy::Record->new(
+ 1,
+ TLSProxy::Record::RT_APPLICATION_DATA,
+ TLSProxy::Record::VERS_TLS_1_2,
+ 0,
+ 0,
+ 0,
+ 0,
+ "",
+ ""
+ );
+
+ #Add the last 4 bytes of the KeyUpdate record
+ $data = pack "C4",
+ 0x00, 0x00, 0x01, # Message length
+ 0x00; # Update not requested
+
+ #Add content type and tag
+ $data .= pack("C", TLSProxy::Record::RT_HANDSHAKE).("\0"x16);
+
+ $record->data($data);
+ $record->len(length $data);
+ push @{$records}, $record;
+
+ }
+}
diff --git a/test/recipes/70-test_sslsessiontick.t b/test/recipes/70-test_sslsessiontick.t
new file mode 100644
index 000000000000..ad145774704e
--- /dev/null
+++ b/test/recipes/70-test_sslsessiontick.t
@@ -0,0 +1,273 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+use File::Temp qw(tempfile);
+
+my $test_name = "test_sslsessiontick";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs SSLv3, TLSv1, TLSv1.1 or TLSv1.2 enabled"
+ if alldisabled(("ssl3", "tls1", "tls1_1", "tls1_2"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+sub checkmessages($$$$$$);
+sub clearclient();
+sub clearall();
+
+my $chellotickext = 0;
+my $shellotickext = 0;
+my $fullhand = 0;
+my $ticketseen = 0;
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#Test 1: By default with no existing session we should get a session ticket
+#Expected result: ClientHello extension seen; ServerHello extension seen
+# NewSessionTicket message seen; Full handshake
+$proxy->clientflags("-no_tls1_3");
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 10;
+checkmessages(1, "Default session ticket test", 1, 1, 1, 1);
+
+#Test 2: If the server does not accept tickets we should get a normal handshake
+#with no session tickets
+#Expected result: ClientHello extension seen; ServerHello extension not seen
+# NewSessionTicket message not seen; Full handshake
+clearall();
+$proxy->clientflags("-no_tls1_3");
+$proxy->serverflags("-no_ticket");
+$proxy->start();
+checkmessages(2, "No server support session ticket test", 1, 0, 0, 1);
+
+#Test 3: If the client does not accept tickets we should get a normal handshake
+#with no session tickets
+#Expected result: ClientHello extension not seen; ServerHello extension not seen
+# NewSessionTicket message not seen; Full handshake
+clearall();
+$proxy->clientflags("-no_tls1_3 -no_ticket");
+$proxy->start();
+checkmessages(3, "No client support session ticket test", 0, 0, 0, 1);
+
+#Test 4: Test session resumption with session ticket
+#Expected result: ClientHello extension seen; ServerHello extension not seen
+# NewSessionTicket message not seen; Abbreviated handshake
+clearall();
+(undef, my $session) = tempfile();
+$proxy->serverconnects(2);
+$proxy->clientflags("-no_tls1_3 -sess_out ".$session);
+$proxy->start();
+$proxy->clearClient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session);
+$proxy->clientstart();
+checkmessages(4, "Session resumption session ticket test", 1, 0, 0, 0);
+unlink $session;
+
+#Test 5: Test session resumption with ticket capable client without a ticket
+#Expected result: ClientHello extension seen; ServerHello extension seen
+# NewSessionTicket message seen; Abbreviated handshake
+clearall();
+(undef, $session) = tempfile();
+$proxy->serverconnects(2);
+$proxy->clientflags("-no_tls1_3 -sess_out ".$session." -no_ticket");
+$proxy->start();
+$proxy->clearClient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session);
+$proxy->clientstart();
+checkmessages(5, "Session resumption with ticket capable client without a "
+ ."ticket", 1, 1, 1, 0);
+unlink $session;
+
+#Test 6: Client accepts empty ticket.
+#Expected result: ClientHello extension seen; ServerHello extension seen;
+# NewSessionTicket message seen; Full handshake.
+clearall();
+$proxy->filter(\&ticket_filter);
+$proxy->clientflags("-no_tls1_3");
+$proxy->start();
+checkmessages(6, "Empty ticket test", 1, 1, 1, 1);
+
+#Test 7-8: Client keeps existing ticket on empty ticket.
+clearall();
+(undef, $session) = tempfile();
+$proxy->serverconnects(3);
+$proxy->filter(undef);
+$proxy->clientflags("-no_tls1_3 -sess_out ".$session);
+$proxy->start();
+$proxy->clearClient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session." -sess_out ".$session);
+$proxy->filter(\&inject_empty_ticket_filter);
+$proxy->clientstart();
+#Expected result: ClientHello extension seen; ServerHello extension seen;
+# NewSessionTicket message seen; Abbreviated handshake.
+checkmessages(7, "Empty ticket resumption test", 1, 1, 1, 0);
+clearclient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session);
+$proxy->filter(undef);
+$proxy->clientstart();
+#Expected result: ClientHello extension seen; ServerHello extension not seen;
+# NewSessionTicket message not seen; Abbreviated handshake.
+checkmessages(8, "Empty ticket resumption test", 1, 0, 0, 0);
+unlink $session;
+
+#Test 9: Bad server sends the ServerHello extension but does not send a
+#NewSessionTicket
+#Expected result: Connection failure
+clearall();
+$proxy->clientflags("-no_tls1_3");
+$proxy->serverflags("-no_ticket");
+$proxy->filter(\&inject_ticket_extension_filter);
+$proxy->start();
+ok(TLSProxy::Message->fail, "Server sends ticket extension but no ticket test");
+
+#Test10: Bad server does not send the ServerHello extension but does send a
+#NewSessionTicket
+#Expected result: Connection failure
+clearall();
+$proxy->clientflags("-no_tls1_3");
+$proxy->serverflags("-no_ticket");
+$proxy->filter(\&inject_empty_ticket_filter);
+$proxy->start();
+ok(TLSProxy::Message->fail, "No server ticket extension but ticket sent test");
+
+sub ticket_filter
+{
+ my $proxy = shift;
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_NEW_SESSION_TICKET) {
+ $message->ticket("");
+ $message->repack();
+ }
+ }
+}
+
+sub inject_empty_ticket_filter {
+ my $proxy = shift;
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_NEW_SESSION_TICKET) {
+ # Only inject the message first time we're called.
+ return;
+ }
+ }
+
+ my @new_message_list = ();
+ foreach my $message (@{$proxy->message_list}) {
+ push @new_message_list, $message;
+ if ($message->mt == TLSProxy::Message::MT_SERVER_HELLO) {
+ $message->set_extension(TLSProxy::Message::EXT_SESSION_TICKET, "");
+ $message->repack();
+ # Tack NewSessionTicket onto the ServerHello record.
+ # This only works if the ServerHello is exactly one record.
+ my $record = ${$message->records}[0];
+
+ my $offset = $message->startoffset + $message->encoded_length;
+ my $newsessionticket = TLSProxy::NewSessionTicket->new(
+ 1, "", [$record], $offset, []);
+ $newsessionticket->repack();
+ push @new_message_list, $newsessionticket;
+ }
+ }
+ $proxy->message_list([@new_message_list]);
+}
+
+sub inject_ticket_extension_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ServerHello
+ if ($proxy->flight != 1) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_SERVER_HELLO) {
+ #Add the session ticket extension to the ServerHello even though
+ #we are not going to send a NewSessionTicket message
+ $message->set_extension(TLSProxy::Message::EXT_SESSION_TICKET, "");
+
+ $message->repack();
+ }
+ }
+}
+
+sub checkmessages($$$$$$)
+{
+ my ($testno, $testname, $testch, $testsh, $testtickseen, $testhand) = @_;
+
+ subtest $testname => sub {
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO
+ || $message->mt == TLSProxy::Message::MT_SERVER_HELLO) {
+ #Get the extensions data
+ my %extensions = %{$message->extension_data};
+ if (defined
+ $extensions{TLSProxy::Message::EXT_SESSION_TICKET}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ $chellotickext = 1;
+ } else {
+ $shellotickext = 1;
+ }
+ }
+ } elsif ($message->mt == TLSProxy::Message::MT_CERTIFICATE) {
+ #Must be doing a full handshake
+ $fullhand = 1;
+ } elsif ($message->mt == TLSProxy::Message::MT_NEW_SESSION_TICKET) {
+ $ticketseen = 1;
+ }
+ }
+
+ plan tests => 5;
+
+ ok(TLSProxy::Message->success, "Handshake");
+ ok(($testch && $chellotickext) || (!$testch && !$chellotickext),
+ "ClientHello extension Session Ticket check");
+ ok(($testsh && $shellotickext) || (!$testsh && !$shellotickext),
+ "ServerHello extension Session Ticket check");
+ ok(($testtickseen && $ticketseen) || (!$testtickseen && !$ticketseen),
+ "Session Ticket message presence check");
+ ok(($testhand && $fullhand) || (!$testhand && !$fullhand),
+ "Session Ticket full handshake check");
+ }
+}
+
+
+sub clearclient()
+{
+ $chellotickext = 0;
+ $shellotickext = 0;
+ $fullhand = 0;
+ $ticketseen = 0;
+ $proxy->clearClient();
+}
+
+sub clearall()
+{
+ clearclient();
+ $proxy->clear();
+}
diff --git a/test/recipes/70-test_sslsigalgs.t b/test/recipes/70-test_sslsigalgs.t
new file mode 100644
index 000000000000..48b9e43c3b39
--- /dev/null
+++ b/test/recipes/70-test_sslsigalgs.t
@@ -0,0 +1,496 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_sslsigalgs";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS1.2 or TLS1.3 enabled"
+ if disabled("tls1_2") && disabled("tls1_3");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+use constant {
+ NO_SIG_ALGS_EXT => 0,
+ EMPTY_SIG_ALGS_EXT => 1,
+ NO_KNOWN_SIG_ALGS => 2,
+ NO_PSS_SIG_ALGS => 3,
+ PSS_ONLY_SIG_ALGS => 4,
+ PURE_SIGALGS => 5,
+ COMPAT_SIGALGS => 6,
+ SIGALGS_CERT_ALL => 7,
+ SIGALGS_CERT_PKCS => 8,
+ SIGALGS_CERT_INVALID => 9,
+ UNRECOGNIZED_SIGALGS_CERT => 10,
+ UNRECOGNIZED_SIGALG => 11
+};
+
+#Note: Throughout this test we override the default ciphersuites where TLSv1.2
+# is expected to ensure that a ServerKeyExchange message is sent that uses
+# the sigalgs
+
+#Test 1: Default sig algs should succeed
+$proxy->clientflags("-no_tls1_3") if disabled("ec") && disabled("dh");
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 26;
+ok(TLSProxy::Message->success, "Default sigalgs");
+my $testtype;
+
+SKIP: {
+ skip "TLSv1.3 disabled", 6
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+ $proxy->filter(\&sigalgs_filter);
+
+ #Test 2: Sending no sig algs extension in TLSv1.3 should fail
+ $proxy->clear();
+ $testtype = NO_SIG_ALGS_EXT;
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "No TLSv1.3 sigalgs");
+
+ #Test 3: Sending an empty sig algs extension in TLSv1.3 should fail
+ $proxy->clear();
+ $testtype = EMPTY_SIG_ALGS_EXT;
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "Empty TLSv1.3 sigalgs");
+
+ #Test 4: Sending a list with no recognised sig algs in TLSv1.3 should fail
+ $proxy->clear();
+ $testtype = NO_KNOWN_SIG_ALGS;
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "No known TLSv1.3 sigalgs");
+
+ #Test 5: Sending a sig algs list without pss for an RSA cert in TLSv1.3
+ # should fail
+ $proxy->clear();
+ $testtype = NO_PSS_SIG_ALGS;
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "No PSS TLSv1.3 sigalgs");
+
+ #Test 6: Sending only TLSv1.3 PSS sig algs in TLSv1.3 should succeed
+ #TODO(TLS1.3): Do we need to verify the cert to make sure its a PSS only
+ #cert in this case?
+ $proxy->clear();
+ $testtype = PSS_ONLY_SIG_ALGS;
+ $proxy->start();
+ ok(TLSProxy::Message->success, "PSS only sigalgs in TLSv1.3");
+
+ #Test 7: Modify the CertificateVerify sigalg from rsa_pss_rsae_sha256 to
+ # rsa_pss_pss_sha256. This should fail because the public key OID
+ # in the certificate is rsaEncryption and not rsassaPss
+ $proxy->filter(\&modify_cert_verify_sigalg);
+ $proxy->clear();
+ $proxy->start();
+ ok(TLSProxy::Message->fail,
+ "Mismatch between CertVerify sigalg and public key OID");
+}
+
+SKIP: {
+ skip "EC or TLSv1.3 disabled", 1
+ if disabled("tls1_3") || disabled("ec");
+ #Test 8: Sending a valid sig algs list but not including a sig type that
+ # matches the certificate should fail in TLSv1.3.
+ $proxy->clear();
+ $proxy->clientflags("-sigalgs ECDSA+SHA256");
+ $proxy->filter(undef);
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "No matching TLSv1.3 sigalgs");
+}
+
+SKIP: {
+ skip "EC, TLSv1.3 or TLSv1.2 disabled", 1
+ if disabled("tls1_2") || disabled("tls1_3") || disabled("ec");
+
+ #Test 9: Sending a full list of TLSv1.3 sig algs but negotiating TLSv1.2
+ # should succeed
+ $proxy->clear();
+ $proxy->serverflags("-no_tls1_3");
+ $proxy->ciphers("ECDHE-RSA-AES128-SHA");
+ $proxy->filter(undef);
+ $proxy->start();
+ ok(TLSProxy::Message->success, "TLSv1.3 client TLSv1.2 server");
+}
+
+SKIP: {
+ skip "EC or TLSv1.2 disabled", 10 if disabled("tls1_2") || disabled("ec");
+
+ $proxy->filter(\&sigalgs_filter);
+
+ #Test 10: Sending no sig algs extension in TLSv1.2 will make it use
+ # SHA1, which is only supported at security level 0.
+ $proxy->clear();
+ $testtype = NO_SIG_ALGS_EXT;
+ $proxy->clientflags("-no_tls1_3 -cipher DEFAULT:\@SECLEVEL=0");
+ $proxy->ciphers("ECDHE-RSA-AES128-SHA:\@SECLEVEL=0");
+ $proxy->start();
+ ok(TLSProxy::Message->success, "No TLSv1.2 sigalgs seclevel 0");
+
+ #Test 11: Sending no sig algs extension in TLSv1.2 should fail at security
+ # level 1 since it will try to use SHA1. Testing client at level 0,
+ # server level 1.
+ $proxy->clear();
+ $testtype = NO_SIG_ALGS_EXT;
+ $proxy->clientflags("-tls1_2 -cipher DEFAULT:\@SECLEVEL=0");
+ $proxy->ciphers("DEFAULT:\@SECLEVEL=1");
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "No TLSv1.2 sigalgs server seclevel 1");
+
+ #Test 12: Sending no sig algs extension in TLSv1.2 should fail at security
+ # level 1 since it will try to use SHA1. Testing client at level 1,
+ # server level 0.
+ $proxy->clear();
+ $testtype = NO_SIG_ALGS_EXT;
+ $proxy->clientflags("-tls1_2 -cipher DEFAULT:\@SECLEVEL=1");
+ $proxy->ciphers("DEFAULT:\@SECLEVEL=0");
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "No TLSv1.2 sigalgs client seclevel 2");
+
+ #Test 13: Sending an empty sig algs extension in TLSv1.2 should fail
+ $proxy->clear();
+ $testtype = EMPTY_SIG_ALGS_EXT;
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->ciphers("ECDHE-RSA-AES128-SHA");
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "Empty TLSv1.2 sigalgs");
+
+ #Test 14: Sending a list with no recognised sig algs in TLSv1.2 should fail
+ $proxy->clear();
+ $testtype = NO_KNOWN_SIG_ALGS;
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->ciphers("ECDHE-RSA-AES128-SHA");
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "No known TLSv1.3 sigalgs");
+
+ #Test 15: Sending a sig algs list without pss for an RSA cert in TLSv1.2
+ # should succeed
+ $proxy->clear();
+ $testtype = NO_PSS_SIG_ALGS;
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->ciphers("ECDHE-RSA-AES128-SHA");
+ $proxy->start();
+ ok(TLSProxy::Message->success, "No PSS TLSv1.2 sigalgs");
+
+ #Test 16: Sending only TLSv1.3 PSS sig algs in TLSv1.2 should succeed
+ $proxy->clear();
+ $testtype = PSS_ONLY_SIG_ALGS;
+ $proxy->serverflags("-no_tls1_3");
+ $proxy->ciphers("ECDHE-RSA-AES128-SHA");
+ $proxy->start();
+ ok(TLSProxy::Message->success, "PSS only sigalgs in TLSv1.2");
+
+ #Test 17: Responding with a sig alg we did not send in TLSv1.2 should fail
+ # We send rsa_pkcs1_sha256 and respond with rsa_pss_rsae_sha256
+ # TODO(TLS1.3): Add a similar test to the TLSv1.3 section above
+ # when we have an API capable of configuring the TLSv1.3 sig algs
+ $proxy->clear();
+ $testtype = PSS_ONLY_SIG_ALGS;
+ $proxy->clientflags("-no_tls1_3 -sigalgs RSA+SHA256");
+ $proxy->ciphers("ECDHE-RSA-AES128-SHA");
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "Sigalg we did not send in TLSv1.2");
+
+ #Test 18: Sending a valid sig algs list but not including a sig type that
+ # matches the certificate should fail in TLSv1.2
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3 -sigalgs ECDSA+SHA256");
+ $proxy->ciphers("ECDHE-RSA-AES128-SHA");
+ $proxy->filter(undef);
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "No matching TLSv1.2 sigalgs");
+ $proxy->filter(\&sigalgs_filter);
+
+ #Test 19: No sig algs extension, ECDSA cert, will use SHA1,
+ # TLSv1.2 should succeed at security level 0
+ $proxy->clear();
+ $testtype = NO_SIG_ALGS_EXT;
+ $proxy->clientflags("-no_tls1_3 -cipher DEFAULT:\@SECLEVEL=0");
+ $proxy->serverflags("-cert " . srctop_file("test", "certs",
+ "server-ecdsa-cert.pem") .
+ " -key " . srctop_file("test", "certs",
+ "server-ecdsa-key.pem")),
+ $proxy->ciphers("ECDHE-ECDSA-AES128-SHA:\@SECLEVEL=0");
+ $proxy->start();
+ ok(TLSProxy::Message->success, "No TLSv1.2 sigalgs, ECDSA");
+}
+
+my ($dsa_status, $sha1_status, $sha224_status);
+SKIP: {
+ skip "TLSv1.3 disabled", 2
+ if disabled("tls1_3")
+ || disabled("dsa")
+ || (disabled("ec") && disabled("dh"));
+ #Test 20: signature_algorithms with 1.3-only ClientHello
+ $testtype = PURE_SIGALGS;
+ $dsa_status = $sha1_status = $sha224_status = 0;
+ $proxy->clear();
+ $proxy->clientflags("-tls1_3");
+ $proxy->filter(\&modify_sigalgs_filter);
+ $proxy->start();
+ ok($dsa_status && $sha1_status && $sha224_status,
+ "DSA and SHA1 sigalgs not sent for 1.3-only ClientHello");
+
+ #Test 21: signature_algorithms with backwards compatible ClientHello
+ SKIP: {
+ skip "TLSv1.2 disabled", 1 if disabled("tls1_2");
+ $testtype = COMPAT_SIGALGS;
+ $dsa_status = $sha1_status = $sha224_status = 0;
+ $proxy->clear();
+ $proxy->clientflags("-cipher AES128-SHA\@SECLEVEL=0");
+ $proxy->filter(\&modify_sigalgs_filter);
+ $proxy->start();
+ ok($dsa_status && $sha1_status && $sha224_status,
+ "backwards compatible sigalg sent for compat ClientHello");
+ }
+}
+
+SKIP: {
+ skip "TLSv1.3 disabled", 5
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+ #Test 22: Insert signature_algorithms_cert that match normal sigalgs
+ $testtype = SIGALGS_CERT_ALL;
+ $proxy->clear();
+ $proxy->filter(\&modify_sigalgs_cert_filter);
+ $proxy->start();
+ ok(TLSProxy::Message->success, "sigalgs_cert in TLSv1.3");
+
+ #Test 23: Insert signature_algorithms_cert that forces PKCS#1 cert
+ $testtype = SIGALGS_CERT_PKCS;
+ $proxy->clear();
+ $proxy->filter(\&modify_sigalgs_cert_filter);
+ $proxy->start();
+ ok(TLSProxy::Message->success, "sigalgs_cert in TLSv1.3 with PKCS#1 cert");
+
+ #Test 24: Insert signature_algorithms_cert that fails
+ $testtype = SIGALGS_CERT_INVALID;
+ $proxy->clear();
+ $proxy->filter(\&modify_sigalgs_cert_filter);
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "No matching certificate for sigalgs_cert");
+
+ #Test 25: Send an unrecognized signature_algorithms_cert
+ # We should be able to skip over the unrecognized value and use a
+ # valid one that appears later in the list.
+ $proxy->clear();
+ $proxy->filter(\&inject_unrecognized_sigalg);
+ $proxy->clientflags("-tls1_3");
+ # Use -xcert to get SSL_check_chain() to run in the cert_cb. This is
+ # needed to trigger (e.g.) CVE-2020-1967
+ $proxy->serverflags("" .
+ " -xcert " . srctop_file("test", "certs", "servercert.pem") .
+ " -xkey " . srctop_file("test", "certs", "serverkey.pem") .
+ " -xchain " . srctop_file("test", "certs", "rootcert.pem"));
+ $testtype = UNRECOGNIZED_SIGALGS_CERT;
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "Unrecognized sigalg_cert in ClientHello");
+
+ #Test 26: Send an unrecognized signature_algorithms
+ # We should be able to skip over the unrecognized value and use a
+ # valid one that appears later in the list.
+ $proxy->clear();
+ $proxy->filter(\&inject_unrecognized_sigalg);
+ $proxy->clientflags("-tls1_3");
+ $proxy->serverflags("" .
+ " -xcert " . srctop_file("test", "certs", "servercert.pem") .
+ " -xkey " . srctop_file("test", "certs", "serverkey.pem") .
+ " -xchain " . srctop_file("test", "certs", "rootcert.pem"));
+ $testtype = UNRECOGNIZED_SIGALG;
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "Unrecognized sigalg in ClientHello");
+}
+
+
+
+sub sigalgs_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ if ($testtype == NO_SIG_ALGS_EXT) {
+ $message->delete_extension(TLSProxy::Message::EXT_SIG_ALGS);
+ } else {
+ my $sigalg;
+ if ($testtype == EMPTY_SIG_ALGS_EXT) {
+ $sigalg = pack "C2", 0x00, 0x00;
+ } elsif ($testtype == NO_KNOWN_SIG_ALGS) {
+ $sigalg = pack "C4", 0x00, 0x02, 0xff, 0xff;
+ } elsif ($testtype == NO_PSS_SIG_ALGS) {
+ #No PSS sig algs - just send rsa_pkcs1_sha256
+ $sigalg = pack "C4", 0x00, 0x02, 0x04, 0x01;
+ } else {
+ #PSS sig algs only - just send rsa_pss_rsae_sha256
+ $sigalg = pack "C4", 0x00, 0x02, 0x08, 0x04;
+ }
+ $message->set_extension(TLSProxy::Message::EXT_SIG_ALGS, $sigalg);
+ }
+
+ $message->repack();
+ }
+ }
+}
+
+sub modify_sigalgs_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello
+ return if ($proxy->flight != 0);
+
+ foreach my $message (@{$proxy->message_list}) {
+ my $ext;
+ my @algs;
+
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ if ($testtype == PURE_SIGALGS) {
+ my $ok = 1;
+ $ext = $message->extension_data->{TLSProxy::Message::EXT_SIG_ALGS};
+ @algs = unpack('S>*', $ext);
+ # unpack will unpack the length as well
+ shift @algs;
+ foreach (@algs) {
+ if ($_ == TLSProxy::Message::SIG_ALG_DSA_SHA256
+ || $_ == TLSProxy::Message::SIG_ALG_DSA_SHA384
+ || $_ == TLSProxy::Message::SIG_ALG_DSA_SHA512
+ || $_ == TLSProxy::Message::OSSL_SIG_ALG_DSA_SHA224
+ || $_ == TLSProxy::Message::SIG_ALG_RSA_PKCS1_SHA1
+ || $_ == TLSProxy::Message::SIG_ALG_DSA_SHA1
+ || $_ == TLSProxy::Message::SIG_ALG_ECDSA_SHA1) {
+ $ok = 0;
+ }
+ }
+ $sha1_status = $dsa_status = $sha224_status = 1 if ($ok);
+ } elsif ($testtype == COMPAT_SIGALGS) {
+ $ext = $message->extension_data->{TLSProxy::Message::EXT_SIG_ALGS};
+ @algs = unpack('S>*', $ext);
+ # unpack will unpack the length as well
+ shift @algs;
+ foreach (@algs) {
+ if ($_ == TLSProxy::Message::SIG_ALG_DSA_SHA256
+ || $_ == TLSProxy::Message::SIG_ALG_DSA_SHA384
+ || $_ == TLSProxy::Message::SIG_ALG_DSA_SHA512) {
+ $dsa_status = 1;
+ }
+ if ($_ == TLSProxy::Message::SIG_ALG_RSA_PKCS1_SHA1
+ || $_ == TLSProxy::Message::SIG_ALG_DSA_SHA1
+ || $_ == TLSProxy::Message::SIG_ALG_ECDSA_SHA1) {
+ $sha1_status = 1;
+ }
+ if ($_ == TLSProxy::Message::OSSL_SIG_ALG_RSA_PKCS1_SHA224
+ || $_ == TLSProxy::Message::OSSL_SIG_ALG_DSA_SHA224
+ || $_ == TLSProxy::Message::OSSL_SIG_ALG_ECDSA_SHA224) {
+ $sha224_status = 1;
+ }
+ }
+ }
+ }
+ }
+}
+
+sub modify_sigalgs_cert_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ my $sigs;
+ # two byte length at front of sigs, then two-byte sigschemes
+ if ($testtype == SIGALGS_CERT_ALL) {
+ $sigs = pack "C26", 0x00, 0x18,
+ # rsa_pkcs_sha{256,512} rsa_pss_rsae_sha{256,512}
+ 0x04, 0x01, 0x06, 0x01, 0x08, 0x04, 0x08, 0x06,
+ # ed25518 ed448 rsa_pss_pss_sha{256,512}
+ 0x08, 0x07, 0x08, 0x08, 0x08, 0x09, 0x08, 0x0b,
+ # ecdsa_secp{256,512} rsa+sha1 ecdsa+sha1
+ 0x04, 0x03, 0x06, 0x03, 0x02, 0x01, 0x02, 0x03;
+ } elsif ($testtype == SIGALGS_CERT_PKCS) {
+ $sigs = pack "C10", 0x00, 0x08,
+ # rsa_pkcs_sha{256,384,512,1}
+ 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x02, 0x01;
+ } elsif ($testtype == SIGALGS_CERT_INVALID) {
+ $sigs = pack "C4", 0x00, 0x02,
+ # unregistered codepoint
+ 0xb2, 0x6f;
+ }
+ $message->set_extension(TLSProxy::Message::EXT_SIG_ALGS_CERT, $sigs);
+ $message->repack();
+ }
+ }
+}
+
+sub modify_cert_verify_sigalg
+{
+ my $proxy = shift;
+
+ # We're only interested in the CertificateVerify
+ if ($proxy->flight != 1) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CERTIFICATE_VERIFY) {
+ $message->sigalg(TLSProxy::Message::SIG_ALG_RSA_PSS_PSS_SHA256);
+ $message->repack();
+ }
+ }
+}
+
+sub inject_unrecognized_sigalg
+{
+ my $proxy = shift;
+ my $type;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ return;
+ }
+ if ($testtype == UNRECOGNIZED_SIGALGS_CERT) {
+ $type = TLSProxy::Message::EXT_SIG_ALGS_CERT;
+ } elsif ($testtype == UNRECOGNIZED_SIGALG) {
+ $type = TLSProxy::Message::EXT_SIG_ALGS;
+ } else {
+ return;
+ }
+
+ my $ext = pack "C8",
+ 0x00, 0x06, #Extension length
+ 0xfe, 0x18, #private use
+ 0x04, 0x01, #rsa_pkcs1_sha256
+ 0x08, 0x04; #rsa_pss_rsae_sha256;
+ my $message = ${$proxy->message_list}[0];
+ $message->set_extension($type, $ext);
+ $message->repack;
+}
diff --git a/test/recipes/70-test_sslsignature.t b/test/recipes/70-test_sslsignature.t
new file mode 100644
index 000000000000..a9a77d5b8f1c
--- /dev/null
+++ b/test/recipes/70-test_sslsignature.t
@@ -0,0 +1,146 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_sslsignature";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS enabled"
+ if alldisabled(available_protocols("tls"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+use constant {
+ NO_CORRUPTION => 0,
+ CORRUPT_SERVER_CERT_VERIFY => 1,
+ CORRUPT_CLIENT_CERT_VERIFY => 2,
+ CORRUPT_TLS1_2_SERVER_KEY_EXCHANGE => 3,
+};
+
+$proxy->filter(\&signature_filter);
+
+#Test 1: No corruption should succeed
+my $testtype = NO_CORRUPTION;
+$proxy->clientflags("-no_tls1_3") if disabled("ec") && disabled("dh");
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 4;
+ok(TLSProxy::Message->success, "No corruption");
+
+SKIP: {
+ skip "TLSv1.3 disabled", 1
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+ #Test 2: Corrupting a server CertVerify signature in TLSv1.3 should fail
+ $proxy->clear();
+ $testtype = CORRUPT_SERVER_CERT_VERIFY;
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "Corrupt server TLSv1.3 CertVerify");
+
+ #Test x: Corrupting a client CertVerify signature in TLSv1.3 should fail
+ #$proxy->clear();
+ #$testtype = CORRUPT_CLIENT_CERT_VERIFY;
+ #$proxy->serverflags("-Verify 5");
+ #$proxy->clientflags("-cert ".srctop_file("apps", "server.pem"));
+ #$proxy->start();
+ #ok(TLSProxy::Message->fail, "Corrupt client TLSv1.3 CertVerify");
+ #TODO(TLS1.3): This test fails due to a problem in s_server/TLSProxy.
+ #Currently a connection is counted as "successful" if the client ends it
+ #with a close_notify. In TLSProxy the client initiates the closure of the
+ #connection so really we should not count it as successful until s_server
+ #has also responded with a close_notify. However s_server never sends a
+ #close_notify - it just closes the connection. Fixing this would be a
+ #significant change to the long established behaviour of s_server.
+ #Unfortunately in this test, it is the server that notices the incorrect
+ #signature and responds with an appropriate alert. However s_client never
+ #sees that because it occurs after the server Finished has been sent.
+ #Therefore s_client just continues to send its application data and sends
+ #its close_notify regardless. TLSProxy sees this and thinks that the
+ #connection was successful when in fact it was not. There isn't an easy fix
+ #for this, so leaving this test commented out for now.
+}
+
+SKIP: {
+ skip "TLS <= 1.2 disabled", 2
+ if alldisabled(("ssl3", "tls1", "tls1_1", "tls1_2"));
+
+ #Test 3: Corrupting a CertVerify signature in <=TLSv1.2 should fail
+ $proxy->clear();
+ $testtype = CORRUPT_CLIENT_CERT_VERIFY;
+ $proxy->serverflags("-Verify 5");
+ $proxy->clientflags("-no_tls1_3 -cert ".srctop_file("apps", "server.pem"));
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "Corrupt <=TLSv1.2 CertVerify");
+
+ SKIP: {
+ skip "DH disabled", 1 if disabled("dh");
+
+ #Test 4: Corrupting a ServerKeyExchange signature in <=TLSv1.2 should
+ #fail
+ $proxy->clear();
+ $testtype = CORRUPT_TLS1_2_SERVER_KEY_EXCHANGE;
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->cipherc('DHE-RSA-AES128-SHA');
+ $proxy->ciphers('DHE-RSA-AES128-SHA');
+ $proxy->start();
+ ok(TLSProxy::Message->fail, "Corrupt <=TLSv1.2 ServerKeyExchange");
+ }
+}
+
+sub signature_filter
+{
+ my $proxy = shift;
+ my $flight;
+ my $mt = TLSProxy::Message::MT_CERTIFICATE_VERIFY;
+
+ if ($testtype == CORRUPT_SERVER_CERT_VERIFY
+ || $testtype == CORRUPT_TLS1_2_SERVER_KEY_EXCHANGE
+ || (!disabled("tls1_3") && $testtype == NO_CORRUPTION)) {
+ $flight = 1;
+ } else {
+ $flight = 2;
+ }
+
+ # We're only interested in the initial server flight
+ return if ($proxy->flight != $flight);
+
+ $mt = TLSProxy::Message::MT_SERVER_KEY_EXCHANGE
+ if ($testtype == CORRUPT_TLS1_2_SERVER_KEY_EXCHANGE);
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == $mt) {
+ my $sig = $message->signature();
+ my $sigbase = substr($sig, 0, -1);
+ my $sigend = unpack("C", substr($sig, -1));
+
+ #Flip bits in final byte of signature to corrupt the sig
+ $sigend ^= 0xff unless $testtype == NO_CORRUPTION;
+
+ $message->signature($sigbase.pack("C", $sigend));
+ $message->repack();
+ }
+ }
+}
diff --git a/test/recipes/70-test_sslskewith0p.t b/test/recipes/70-test_sslskewith0p.t
new file mode 100644
index 000000000000..9d2442fa1233
--- /dev/null
+++ b/test/recipes/70-test_sslskewith0p.t
@@ -0,0 +1,66 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_sslskewith0p";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "dh is not supported by this OpenSSL build"
+ if disabled("dh");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS enabled"
+ if alldisabled(available_protocols("tls"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+my $proxy = TLSProxy::Proxy->new(
+ \&ske_0_p_filter,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#We must use an anon DHE cipher for this test
+$proxy->cipherc('ADH-AES128-SHA:@SECLEVEL=0');
+$proxy->ciphers('ADH-AES128-SHA:@SECLEVEL=0');
+
+$proxy->clientflags("-no_tls1_3");
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 1;
+ok(TLSProxy::Message->fail, "ServerKeyExchange with 0 p");
+
+sub ske_0_p_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the SKE - always in flight 1
+ if ($proxy->flight != 1) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_SERVER_KEY_EXCHANGE) {
+ #Set p to a value of 0
+ $message->p(pack('C', 0));
+
+ $message->repack();
+ }
+ }
+}
diff --git a/test/recipes/70-test_sslversions.t b/test/recipes/70-test_sslversions.t
new file mode 100644
index 000000000000..2123860d9cb4
--- /dev/null
+++ b/test/recipes/70-test_sslversions.t
@@ -0,0 +1,190 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+use File::Temp qw(tempfile);
+
+use constant {
+ REVERSE_ORDER_VERSIONS => 1,
+ UNRECOGNISED_VERSIONS => 2,
+ NO_EXTENSION => 3,
+ EMPTY_EXTENSION => 4,
+ TLS1_1_AND_1_0_ONLY => 5,
+ WITH_TLS1_4 => 6,
+ BAD_LEGACY_VERSION => 7
+};
+
+my $testtype;
+
+my $test_name = "test_sslversions";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS1.3, TLS1.2 and TLS1.1 enabled"
+ if disabled("tls1_3")
+ || (disabled("ec") && disabled("dh"))
+ || disabled("tls1_2")
+ || disabled("tls1_1");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#We're just testing various negative and unusual scenarios here. ssltest with
+#02-protocol-version.cnf should check all the various combinations of normal
+#version neg
+
+#Test 1: An empty supported_versions extension should not succeed
+$testtype = EMPTY_EXTENSION;
+$proxy->filter(\&modify_supported_versions_filter);
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 8;
+ok(TLSProxy::Message->fail(), "Empty supported versions");
+
+#Test 2: supported_versions extension with no recognised versions should not
+#succeed
+$proxy->clear();
+$testtype = UNRECOGNISED_VERSIONS;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "No recognised versions");
+
+#Test 3: No supported versions extensions should succeed and select TLSv1.2
+$proxy->clear();
+$testtype = NO_EXTENSION;
+$proxy->start();
+my $record = pop @{$proxy->record_list};
+ok(TLSProxy::Message->success()
+ && $record->version() == TLSProxy::Record::VERS_TLS_1_2,
+ "No supported versions extension");
+
+#Test 4: No supported versions extensions should fail if only TLS1.3 available
+$proxy->clear();
+$proxy->serverflags("-tls1_3");
+$proxy->start();
+ok(TLSProxy::Message->fail(), "No supported versions extension (only TLS1.3)");
+
+#Test 5: supported versions extension with best version last should succeed
+#and select TLSv1.3
+$proxy->clear();
+$testtype = REVERSE_ORDER_VERSIONS;
+$proxy->start();
+$record = pop @{$proxy->record_list};
+ok(TLSProxy::Message->success()
+ && $record->version() == TLSProxy::Record::VERS_TLS_1_2
+ && TLSProxy::Proxy->is_tls13(),
+ "Reverse order versions");
+
+#Test 6: no TLSv1.3 or TLSv1.2 version in supported versions extension, but
+#TLSv1.1 and TLSv1.0 are present. Should just use TLSv1.1 and succeed
+$proxy->clear();
+$proxy->clientflags("-cipher DEFAULT:\@SECLEVEL=0");
+$proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+$testtype = TLS1_1_AND_1_0_ONLY;
+$proxy->start();
+$record = pop @{$proxy->record_list};
+ok(TLSProxy::Message->success()
+ && $record->version() == TLSProxy::Record::VERS_TLS_1_1,
+ "TLS1.1 and TLS1.0 in supported versions extension only");
+
+#Test 7: TLS1.4 and TLS1.3 in supported versions. Should succeed and use TLS1.3
+$proxy->clear();
+$testtype = WITH_TLS1_4;
+$proxy->start();
+$record = pop @{$proxy->record_list};
+ok(TLSProxy::Message->success()
+ && $record->version() == TLSProxy::Record::VERS_TLS_1_2
+ && TLSProxy::Proxy->is_tls13(),
+ "TLS1.4 in supported versions extension");
+
+#Test 8: Set the legacy version to SSLv3 with supported versions. Should fail
+$proxy->clear();
+$testtype = BAD_LEGACY_VERSION;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Legacy version is SSLv3 with supported versions");
+
+sub modify_supported_versions_filter
+{
+ my $proxy = shift;
+
+ if ($proxy->flight == 1) {
+ # Change the ServerRandom so that the downgrade sentinel doesn't cause
+ # the connection to fail
+ my $message = ${$proxy->message_list}[1];
+ return if (!defined $message);
+
+ $message->random("\0"x32);
+ $message->repack();
+ return;
+ }
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ my $ext;
+ if ($testtype == REVERSE_ORDER_VERSIONS) {
+ $ext = pack "C5",
+ 0x04, # Length
+ 0x03, 0x03, #TLSv1.2
+ 0x03, 0x04; #TLSv1.3
+ } elsif ($testtype == UNRECOGNISED_VERSIONS) {
+ $ext = pack "C5",
+ 0x04, # Length
+ 0x04, 0x04, #Some unrecognised version
+ 0x04, 0x03; #Another unrecognised version
+ } elsif ($testtype == TLS1_1_AND_1_0_ONLY) {
+ $ext = pack "C5",
+ 0x04, # Length
+ 0x03, 0x02, #TLSv1.1
+ 0x03, 0x01; #TLSv1.0
+ } elsif ($testtype == WITH_TLS1_4) {
+ $ext = pack "C5",
+ 0x04, # Length
+ 0x03, 0x05, #TLSv1.4
+ 0x03, 0x04; #TLSv1.3
+ }
+ if ($testtype == REVERSE_ORDER_VERSIONS
+ || $testtype == UNRECOGNISED_VERSIONS
+ || $testtype == TLS1_1_AND_1_0_ONLY
+ || $testtype == WITH_TLS1_4) {
+ $message->set_extension(
+ TLSProxy::Message::EXT_SUPPORTED_VERSIONS, $ext);
+ } elsif ($testtype == EMPTY_EXTENSION) {
+ $message->set_extension(
+ TLSProxy::Message::EXT_SUPPORTED_VERSIONS, "");
+ } elsif ($testtype == NO_EXTENSION) {
+ $message->delete_extension(
+ TLSProxy::Message::EXT_SUPPORTED_VERSIONS);
+ } else {
+ # BAD_LEGACY_VERSION
+ $message->client_version(TLSProxy::Record::VERS_SSL_3_0);
+ }
+
+ $message->repack();
+ }
+ }
+}
diff --git a/test/recipes/70-test_sslvertol.t b/test/recipes/70-test_sslvertol.t
new file mode 100644
index 000000000000..d41085c9eced
--- /dev/null
+++ b/test/recipes/70-test_sslvertol.t
@@ -0,0 +1,138 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_sslvertol";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS enabled"
+ if alldisabled(available_protocols("tls"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+my $proxy = TLSProxy::Proxy->new(
+ \&vers_tolerance_filter,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+my @available_tls_versions = ();
+foreach (available_protocols("tls")) {
+ unless (disabled($_)) {
+ note("Checking enabled protocol $_");
+ m|^([a-z]+)(\d)(_\d)?|;
+ my $versionname;
+ if (defined $3) {
+ $versionname = 'TLSProxy::Record::VERS_'.uc($1).'_'.$2.$3;
+ note("'$1', '$2', '$3' => $versionname");
+ } else {
+ $versionname = 'TLSProxy::Record::VERS_'.uc($1).'_'.$2.'_0';
+ note("'$1', '$2' => $versionname");
+ }
+ push @available_tls_versions, eval $versionname;
+ }
+}
+note("TLS versions we can expect: ", join(", ", @available_tls_versions));
+
+#This file does tests without the supported_versions extension.
+#See 70-test_sslversions.t for tests with supported versions.
+
+#Test 1: Asking for TLS1.4 should pass and negotiate the maximum
+#available TLS version according to configuration below TLS1.3
+my $client_version = TLSProxy::Record::VERS_TLS_1_4;
+my $previous_version = tls_version_below(TLSProxy::Record::VERS_TLS_1_3);
+$proxy->clientflags("-no_tls1_3");
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 3;
+SKIP: {
+ skip "There are too few protocols enabled for test 1", 1
+ unless defined $previous_version;
+
+ my $record = pop @{$proxy->record_list};
+ ok((note("Record version received: ".$record->version()),
+ TLSProxy::Message->success())
+ && $record->version() == $previous_version,
+ "Version tolerance test, below TLS 1.4 and not TLS 1.3");
+}
+
+#Test 2: Asking for TLS1.3 with that disabled should succeed and negotiate
+#the highest configured TLS version below that.
+$client_version = TLSProxy::Record::VERS_TLS_1_3;
+$previous_version = tls_version_below($client_version);
+SKIP: {
+ skip "There are too few protocols enabled for test 2", 1
+ unless defined $previous_version;
+
+ $proxy->clear();
+ $proxy->clientflags("-no_tls1_3");
+ $proxy->start();
+ my $record = pop @{$proxy->record_list};
+ ok((note("Record version received: ".$record->version()),
+ TLSProxy::Message->success())
+ && $record->version() == $previous_version,
+ "Version tolerance test, max version but not TLS 1.3");
+}
+
+#Test 3: Testing something below SSLv3 should fail. We must disable TLS 1.3
+#to avoid having the 'supported_versions' extension kick in and override our
+#desires.
+$client_version = TLSProxy::Record::VERS_SSL_3_0 - 1;
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3");
+$proxy->start();
+my $record = pop @{$proxy->record_list};
+ok((note("Record version received: ".
+ (defined $record ? $record->version() : "none")),
+ TLSProxy::Message->fail()),
+ "Version tolerance test, SSL < 3.0");
+
+sub vers_tolerance_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ #Set the client version
+ #Anything above the max supported version should succeed
+ #Anything below SSLv3 should fail
+ $message->client_version($client_version);
+ $message->repack();
+ }
+ }
+}
+
+sub tls_version_below {
+ if (@_) {
+ my $term = shift;
+ my $res = undef;
+
+ foreach (@available_tls_versions) {
+ $res = $_ if $_ < $term;
+ }
+ return $res;
+ }
+ return $available_tls_versions[-1];
+}
diff --git a/test/recipes/70-test_tls13alerts.t b/test/recipes/70-test_tls13alerts.t
new file mode 100644
index 000000000000..44d026c20224
--- /dev/null
+++ b/test/recipes/70-test_tls13alerts.t
@@ -0,0 +1,56 @@
+#! /usr/bin/env perl
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_tls13alerts";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS1.3 enabled"
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#Test 1: We test that a server can handle an unencrypted alert when normally the
+# next message is encrypted
+$proxy->filter(\&alert_filter);
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 1;
+my $alert = TLSProxy::Message->alert();
+ok(TLSProxy::Message->fail() && !$alert->server() && !$alert->encrypted(), "Client sends an unecrypted alert");
+
+sub alert_filter
+{
+ my $proxy = shift;
+
+ if ($proxy->flight != 1) {
+ return;
+ }
+
+ ${$proxy->message_list}[1]->session_id_len(1);
+ ${$proxy->message_list}[1]->repack();
+}
diff --git a/test/recipes/70-test_tls13cookie.t b/test/recipes/70-test_tls13cookie.t
new file mode 100644
index 000000000000..a4b2a6222b10
--- /dev/null
+++ b/test/recipes/70-test_tls13cookie.t
@@ -0,0 +1,121 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_tls13cookie";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS1.3 enabled"
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+use constant {
+ COOKIE_ONLY => 0,
+ COOKIE_AND_KEY_SHARE => 1
+};
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+my $cookieseen = 0;
+my $testtype;
+
+#Test 1: Inserting a cookie into an HRR should see it echoed in the ClientHello
+$testtype = COOKIE_ONLY;
+$proxy->filter(\&cookie_filter);
+$proxy->serverflags("-curves X25519") if !disabled("ec");
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 2;
+SKIP: {
+ skip "EC disabled", 1, if disabled("ec");
+ ok(TLSProxy::Message->success() && $cookieseen == 1, "Cookie seen");
+}
+
+
+
+#Test 2: Same as test 1 but should also work where a new key_share is also
+# required
+$testtype = COOKIE_AND_KEY_SHARE;
+$proxy->clear();
+if (disabled("ec")) {
+ $proxy->clientflags("-curves ffdhe3072:ffdhe2048");
+ $proxy->serverflags("-curves ffdhe2048");
+} else {
+ $proxy->clientflags("-curves P-256:X25519");
+ $proxy->serverflags("-curves X25519");
+}
+$proxy->start();
+ok(TLSProxy::Message->success() && $cookieseen == 1, "Cookie seen");
+
+sub cookie_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the HRR and both ClientHellos
+ return if ($proxy->flight > 2);
+
+ my $ext = pack "C8",
+ 0x00, 0x06, #Cookie Length
+ 0x00, 0x01, #Dummy cookie data (6 bytes)
+ 0x02, 0x03,
+ 0x04, 0x05;
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_SERVER_HELLO
+ && ${$message->records}[0]->flight == 1) {
+ $message->delete_extension(TLSProxy::Message::EXT_KEY_SHARE)
+ if ($testtype == COOKIE_ONLY);
+ $message->set_extension(TLSProxy::Message::EXT_COOKIE, $ext);
+ $message->repack();
+ } elsif ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ if (${$message->records}[0]->flight == 0) {
+ if ($testtype == COOKIE_ONLY) {
+ my $ext = pack "C7",
+ 0x00, 0x05, #List Length
+ 0x00, 0x17, #P-256
+ 0x00, 0x01, #key_exchange data length
+ 0xff; #Dummy key_share data
+ # Trick the server into thinking we got an unacceptable
+ # key_share
+ $message->set_extension(
+ TLSProxy::Message::EXT_KEY_SHARE, $ext);
+ $message->repack();
+ }
+ } else {
+ #cmp can behave differently dependent on locale
+ no locale;
+ my $cookie =
+ $message->extension_data->{TLSProxy::Message::EXT_COOKIE};
+
+ return if !defined($cookie);
+
+ return if ($cookie cmp $ext) != 0;
+
+ $cookieseen = 1;
+ }
+ }
+ }
+}
diff --git a/test/recipes/70-test_tls13downgrade.t b/test/recipes/70-test_tls13downgrade.t
new file mode 100644
index 000000000000..9e10a9c9c4ca
--- /dev/null
+++ b/test/recipes/70-test_tls13downgrade.t
@@ -0,0 +1,129 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_tls13downgrade";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS1.3 and TLS1.2 enabled"
+ if disabled("tls1_3")
+ || (disabled("ec") && disabled("dh"))
+ || disabled("tls1_2");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+use constant {
+ DOWNGRADE_TO_TLS_1_2 => 0,
+ DOWNGRADE_TO_TLS_1_1 => 1,
+ FALLBACK_FROM_TLS_1_3 => 2,
+};
+
+#Test 1: Downgrade from TLSv1.3 to TLSv1.2
+$proxy->filter(\&downgrade_filter);
+my $testtype = DOWNGRADE_TO_TLS_1_2;
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 6;
+ok(TLSProxy::Message->fail(), "Downgrade TLSv1.3 to TLSv1.2");
+
+#Test 2: Downgrade from TLSv1.3 to TLSv1.1
+$proxy->clear();
+$testtype = DOWNGRADE_TO_TLS_1_1;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Downgrade TLSv1.3 to TLSv1.1");
+
+#Test 3: Downgrade from TLSv1.2 to TLSv1.1
+$proxy->clear();
+$proxy->clientflags("-no_tls1_3");
+$proxy->serverflags("-no_tls1_3");
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Downgrade TLSv1.2 to TLSv1.1");
+
+#Test 4: Client falls back from TLSv1.3 (server does not support the fallback
+# SCSV)
+$proxy->clear();
+$testtype = FALLBACK_FROM_TLS_1_3;
+$proxy->clientflags("-fallback_scsv -no_tls1_3");
+$proxy->start();
+my $alert = TLSProxy::Message->alert();
+ok(TLSProxy::Message->fail()
+ && !$alert->server()
+ && $alert->description() == TLSProxy::Message::AL_DESC_ILLEGAL_PARAMETER,
+ "Fallback from TLSv1.3");
+
+SKIP: {
+ skip "TLSv1.1 disabled", 2 if disabled("tls1_1");
+ #Test 5: A client side protocol "hole" should not be detected as a downgrade
+ $proxy->clear();
+ $proxy->filter(undef);
+ $proxy->clientflags("-no_tls1_2");
+ $proxy->ciphers("AES128-SHA:\@SECLEVEL=0");
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "TLSv1.2 client-side protocol hole");
+
+ #Test 6: A server side protocol "hole" should not be detected as a downgrade
+ $proxy->clear();
+ $proxy->filter(undef);
+ $proxy->serverflags("-no_tls1_2");
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "TLSv1.2 server-side protocol hole");
+}
+
+sub downgrade_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ my $message = ${$proxy->message_list}[0];
+
+ my $ext;
+ if ($testtype == FALLBACK_FROM_TLS_1_3) {
+ #The default ciphersuite we use for TLSv1.2 without any SCSV
+ my @ciphersuites = (TLSProxy::Message::CIPHER_RSA_WITH_AES_128_CBC_SHA);
+ $message->ciphersuite_len(2 * scalar @ciphersuites);
+ $message->ciphersuites(\@ciphersuites);
+ } else {
+ if ($testtype == DOWNGRADE_TO_TLS_1_2) {
+ $ext = pack "C3",
+ 0x02, # Length
+ 0x03, 0x03; #TLSv1.2
+ } else {
+ $ext = pack "C3",
+ 0x02, # Length
+ 0x03, 0x02; #TLSv1.1
+ }
+
+ $message->set_extension(TLSProxy::Message::EXT_SUPPORTED_VERSIONS, $ext);
+ }
+
+ $message->repack();
+}
+
diff --git a/test/recipes/70-test_tls13hrr.t b/test/recipes/70-test_tls13hrr.t
new file mode 100644
index 000000000000..9d0694c3d6ec
--- /dev/null
+++ b/test/recipes/70-test_tls13hrr.t
@@ -0,0 +1,176 @@
+#! /usr/bin/env perl
+# Copyright 2017-2023 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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+my $test_name = "test_tls13hrr";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLS1.3 enabled"
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+use constant {
+ CHANGE_HRR_CIPHERSUITE => 0,
+ CHANGE_CH1_CIPHERSUITE => 1,
+ DUPLICATE_HRR => 2,
+ INVALID_GROUP => 3
+};
+
+#Test 1: A client should fail if the server changes the ciphersuite between the
+# HRR and the SH
+$proxy->filter(\&hrr_filter);
+if (disabled("ec")) {
+ $proxy->serverflags("-curves ffdhe3072");
+} else {
+ $proxy->serverflags("-curves P-256");
+}
+my $testtype = CHANGE_HRR_CIPHERSUITE;
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 4;
+ok(TLSProxy::Message->fail(), "Server ciphersuite changes");
+
+#Test 2: It is an error if the client changes the offered ciphersuites so that
+# we end up selecting a different ciphersuite between HRR and the SH
+$proxy->clear();
+if (disabled("ec")) {
+ $proxy->serverflags("-curves ffdhe3072");
+} else {
+ $proxy->serverflags("-curves P-256");
+}
+$proxy->ciphersuitess("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384");
+$testtype = CHANGE_CH1_CIPHERSUITE;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Client ciphersuite changes");
+
+#Test 3: A client should fail with unexpected_message alert if the server
+# sends more than 1 HRR
+my $fatal_alert = 0;
+$proxy->clear();
+if (disabled("ec")) {
+ $proxy->serverflags("-curves ffdhe3072");
+} else {
+ $proxy->serverflags("-curves P-256");
+}
+$testtype = DUPLICATE_HRR;
+$proxy->start();
+ok($fatal_alert, "Server duplicated HRR");
+
+#Test 4: If the client sends a group that is in the supported_groups list but
+# otherwise not valid (e.g. not suitable for TLSv1.3) we should reject it
+# and not consider it when sending the HRR. We send brainpoolP512r1 in
+# the ClientHello, which is acceptable to the server but is not valid in
+# TLSv1.3. We expect the server to select X25519 in the HRR and the
+# handshake to complete successfully
+SKIP: {
+ skip "EC/TLSv1.2 is disabled in this build", 1
+ if disabled("ec") || disabled("tls1_2");
+
+ $proxy->clear();
+ $proxy->clientflags("-groups P-256:brainpoolP512r1:X25519");
+ $proxy->serverflags("-groups brainpoolP512r1:X25519");
+ $testtype = INVALID_GROUP;
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "Invalid group with HRR");
+}
+
+sub hrr_filter
+{
+ my $proxy = shift;
+
+ if ($testtype == CHANGE_HRR_CIPHERSUITE) {
+ # We're only interested in the HRR
+ if ($proxy->flight != 1) {
+ return;
+ }
+
+ my $hrr = ${$proxy->message_list}[1];
+
+ # We will normally only ever select CIPHER_TLS13_AES_128_GCM_SHA256
+ # because that's what Proxy tells s_server to do. Setting as below means
+ # the ciphersuite will change will we get the ServerHello
+ $hrr->ciphersuite(TLSProxy::Message::CIPHER_TLS13_AES_256_GCM_SHA384);
+ $hrr->repack();
+ return;
+ }
+
+ if ($testtype == DUPLICATE_HRR) {
+ # We're only interested in the HRR
+ # and the unexpected_message alert from client
+ if ($proxy->flight == 4) {
+ $fatal_alert = 1
+ if @{$proxy->record_list}[-1]->is_fatal_alert(0) == 10;
+ return;
+ }
+ if ($proxy->flight != 3) {
+ return;
+ }
+
+ # Find ServerHello record (HRR actually) and insert after that
+ my $i;
+ for ($i = 0; ${$proxy->record_list}[$i]->flight() < 1; $i++) {
+ next;
+ }
+ my $hrr_record = ${$proxy->record_list}[$i];
+ my $dup_hrr = TLSProxy::Record->new(3,
+ $hrr_record->content_type(),
+ $hrr_record->version(),
+ $hrr_record->len(),
+ $hrr_record->sslv2(),
+ $hrr_record->len_real(),
+ $hrr_record->decrypt_len(),
+ $hrr_record->data(),
+ $hrr_record->decrypt_data());
+
+ $i++;
+ splice @{$proxy->record_list}, $i, 0, $dup_hrr;
+ return;
+ }
+
+ if ($proxy->flight != 0) {
+ return;
+ }
+
+ my $ch1 = ${$proxy->message_list}[0];
+
+ if ($testtype == CHANGE_CH1_CIPHERSUITE) {
+ # The server will always pick TLS_AES_256_GCM_SHA384
+ my @ciphersuites = (TLSProxy::Message::CIPHER_TLS13_AES_128_GCM_SHA256);
+ $ch1->ciphersuite_len(2 * scalar @ciphersuites);
+ $ch1->ciphersuites(\@ciphersuites);
+ } elsif ($testtype == INVALID_GROUP) {
+ # INVALID_GROUP
+ my $ext = pack "C7",
+ 0x00, 0x05, #List Length
+ 0x00, 0x1c, #brainpoolP512r1 (not compatible with TLSv1.3)
+ 0x00, 0x01, 0xff; #key_exchange data
+ $ch1->set_extension(
+ TLSProxy::Message::EXT_KEY_SHARE, $ext);
+ }
+ $ch1->repack();
+}
diff --git a/test/recipes/70-test_tls13kexmodes.t b/test/recipes/70-test_tls13kexmodes.t
new file mode 100644
index 000000000000..6385885057d8
--- /dev/null
+++ b/test/recipes/70-test_tls13kexmodes.t
@@ -0,0 +1,375 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
+use OpenSSL::Test::Utils;
+use File::Temp qw(tempfile);
+use TLSProxy::Proxy;
+use checkhandshake qw(checkhandshake @handmessages @extensions);
+
+my $test_name = "test_tls13kexmodes";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLSv1.3 enabled"
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+plan skip_all => "$test_name needs EC enabled"
+ if disabled("ec");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+
+@handmessages = (
+ [TLSProxy::Message::MT_CLIENT_HELLO,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_SERVER_HELLO,
+ checkhandshake::HRR_HANDSHAKE | checkhandshake::HRR_RESUME_HANDSHAKE],
+ [TLSProxy::Message::MT_CLIENT_HELLO,
+ checkhandshake::HRR_HANDSHAKE | checkhandshake::HRR_RESUME_HANDSHAKE],
+ [TLSProxy::Message::MT_SERVER_HELLO,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_CERTIFICATE_REQUEST,
+ checkhandshake::CLIENT_AUTH_HANDSHAKE],
+ [TLSProxy::Message::MT_CERTIFICATE,
+ checkhandshake::ALL_HANDSHAKES & ~(checkhandshake::RESUME_HANDSHAKE | checkhandshake::HRR_RESUME_HANDSHAKE)],
+ [TLSProxy::Message::MT_CERTIFICATE_VERIFY,
+ checkhandshake::ALL_HANDSHAKES & ~(checkhandshake::RESUME_HANDSHAKE | checkhandshake::HRR_RESUME_HANDSHAKE)],
+ [TLSProxy::Message::MT_FINISHED,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_CERTIFICATE,
+ checkhandshake::CLIENT_AUTH_HANDSHAKE],
+ [TLSProxy::Message::MT_CERTIFICATE_VERIFY,
+ checkhandshake::CLIENT_AUTH_HANDSHAKE],
+ [TLSProxy::Message::MT_FINISHED,
+ checkhandshake::ALL_HANDSHAKES],
+ [0, 0]
+);
+
+@extensions = (
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SERVER_NAME,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SERVER_NAME_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::STATUS_REQUEST_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_GROUPS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EC_POINT_FORMATS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SIG_ALGS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ALPN,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::ALPN_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SCT,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SCT_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SESSION_TICKET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_VERSIONS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_PSK_KEX_MODES,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::PSK_KEX_MODES_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_PSK,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::PSK_CLI_EXTENSION],
+
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SUPPORTED_VERSIONS,
+ TLSProxy::Message::SERVER,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
+ TLSProxy::Message::SERVER,
+ checkhandshake::KEY_SHARE_HRR_EXTENSION],
+
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SERVER_NAME,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SERVER_NAME_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::STATUS_REQUEST_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_GROUPS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EC_POINT_FORMATS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SIG_ALGS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ALPN,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::ALPN_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SCT,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SCT_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SESSION_TICKET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_VERSIONS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_PSK_KEX_MODES,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::PSK_KEX_MODES_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_PSK,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::PSK_CLI_EXTENSION],
+
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SUPPORTED_VERSIONS,
+ TLSProxy::Message::SERVER,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
+ TLSProxy::Message::SERVER,
+ checkhandshake::KEY_SHARE_SRV_EXTENSION],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_PSK,
+ TLSProxy::Message::SERVER,
+ checkhandshake::PSK_SRV_EXTENSION],
+
+ [TLSProxy::Message::MT_CERTIFICATE, TLSProxy::Message::EXT_STATUS_REQUEST,
+ TLSProxy::Message::SERVER,
+ checkhandshake::STATUS_REQUEST_SRV_EXTENSION],
+ [0,0,0,0]
+);
+
+use constant {
+ DELETE_EXTENSION => 0,
+ EMPTY_EXTENSION => 1,
+ NON_DHE_KEX_MODE_ONLY => 2,
+ DHE_KEX_MODE_ONLY => 3,
+ UNKNOWN_KEX_MODES => 4,
+ BOTH_KEX_MODES => 5
+};
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#Test 1: First get a session
+(undef, my $session) = tempfile();
+$proxy->clientflags("-sess_out ".$session);
+$proxy->serverflags("-servername localhost");
+$proxy->sessionfile($session);
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 11;
+ok(TLSProxy::Message->success(), "Initial connection");
+
+#Test 2: Attempt a resume with no kex modes extension. Should fail (server
+# MUST abort handshake with pre_shared key and no psk_kex_modes)
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+my $testtype = DELETE_EXTENSION;
+$proxy->filter(\&modify_kex_modes_filter);
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Resume with no kex modes");
+
+#Test 3: Attempt a resume with empty kex modes extension. Should fail (empty
+# extension is invalid)
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$testtype = EMPTY_EXTENSION;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Resume with empty kex modes");
+
+#Test 4: Attempt a resume with non-dhe kex mode only. Should resume without a
+# key_share
+$proxy->clear();
+$proxy->clientflags("-allow_no_dhe_kex -sess_in ".$session);
+$proxy->serverflags("-allow_no_dhe_kex");
+$testtype = NON_DHE_KEX_MODE_ONLY;
+$proxy->start();
+checkhandshake($proxy, checkhandshake::RESUME_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::PSK_KEX_MODES_EXTENSION
+ | checkhandshake::PSK_CLI_EXTENSION
+ | checkhandshake::PSK_SRV_EXTENSION,
+ "Resume with non-dhe kex mode");
+
+#Test 5: Attempt a resume with dhe kex mode only. Should resume with a key_share
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$testtype = DHE_KEX_MODE_ONLY;
+$proxy->start();
+checkhandshake($proxy, checkhandshake::RESUME_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::PSK_KEX_MODES_EXTENSION
+ | checkhandshake::KEY_SHARE_SRV_EXTENSION
+ | checkhandshake::PSK_CLI_EXTENSION
+ | checkhandshake::PSK_SRV_EXTENSION,
+ "Resume with non-dhe kex mode");
+
+#Test 6: Attempt a resume with only unrecognised kex modes. Should not resume
+# but rather fall back to full handshake
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$testtype = UNKNOWN_KEX_MODES;
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::PSK_KEX_MODES_EXTENSION
+ | checkhandshake::KEY_SHARE_SRV_EXTENSION
+ | checkhandshake::PSK_CLI_EXTENSION,
+ "Resume with unrecognized kex mode");
+
+#Test 7: Attempt a resume with both non-dhe and dhe kex mode. Should resume with
+# a key_share
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$testtype = BOTH_KEX_MODES;
+$proxy->start();
+checkhandshake($proxy, checkhandshake::RESUME_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::PSK_KEX_MODES_EXTENSION
+ | checkhandshake::KEY_SHARE_SRV_EXTENSION
+ | checkhandshake::PSK_CLI_EXTENSION
+ | checkhandshake::PSK_SRV_EXTENSION,
+ "Resume with non-dhe kex mode");
+
+#Test 8: Attempt a resume with both non-dhe and dhe kex mode, but unacceptable
+# initial key_share. Should resume with a key_share following an HRR
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$proxy->serverflags("-curves P-256");
+$testtype = BOTH_KEX_MODES;
+$proxy->start();
+checkhandshake($proxy, checkhandshake::HRR_RESUME_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::PSK_KEX_MODES_EXTENSION
+ | checkhandshake::KEY_SHARE_SRV_EXTENSION
+ | checkhandshake::KEY_SHARE_HRR_EXTENSION
+ | checkhandshake::PSK_CLI_EXTENSION
+ | checkhandshake::PSK_SRV_EXTENSION,
+ "Resume with both kex modes and HRR");
+
+#Test 9: Attempt a resume with dhe kex mode only and an unacceptable initial
+# key_share. Should resume with a key_share following an HRR
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$proxy->serverflags("-curves P-256");
+$testtype = DHE_KEX_MODE_ONLY;
+$proxy->start();
+checkhandshake($proxy, checkhandshake::HRR_RESUME_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::PSK_KEX_MODES_EXTENSION
+ | checkhandshake::KEY_SHARE_SRV_EXTENSION
+ | checkhandshake::KEY_SHARE_HRR_EXTENSION
+ | checkhandshake::PSK_CLI_EXTENSION
+ | checkhandshake::PSK_SRV_EXTENSION,
+ "Resume with dhe kex mode and HRR");
+
+#Test 10: Attempt a resume with both non-dhe and dhe kex mode, unacceptable
+# initial key_share and no overlapping groups. Should resume without a
+# key_share
+$proxy->clear();
+$proxy->clientflags("-allow_no_dhe_kex -curves P-384 -sess_in ".$session);
+$proxy->serverflags("-allow_no_dhe_kex -curves P-256");
+$testtype = BOTH_KEX_MODES;
+$proxy->start();
+checkhandshake($proxy, checkhandshake::RESUME_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::PSK_KEX_MODES_EXTENSION
+ | checkhandshake::PSK_CLI_EXTENSION
+ | checkhandshake::PSK_SRV_EXTENSION,
+ "Resume with both kex modes, no overlapping groups");
+
+#Test 11: Attempt a resume with dhe kex mode only, unacceptable
+# initial key_share and no overlapping groups. Should fail
+$proxy->clear();
+$proxy->clientflags("-curves P-384 -sess_in ".$session);
+$proxy->serverflags("-curves P-256");
+$testtype = DHE_KEX_MODE_ONLY;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "Resume with dhe kex mode, no overlapping groups");
+
+unlink $session;
+
+sub modify_kex_modes_filter
+{
+ my $proxy = shift;
+
+ # We're only interested in the initial ClientHello
+ return if ($proxy->flight != 0);
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ my $ext;
+
+ if ($testtype == EMPTY_EXTENSION) {
+ $ext = pack "C",
+ 0x00; #List length
+ } elsif ($testtype == NON_DHE_KEX_MODE_ONLY) {
+ $ext = pack "C2",
+ 0x01, #List length
+ 0x00; #psk_ke
+ } elsif ($testtype == DHE_KEX_MODE_ONLY) {
+ $ext = pack "C2",
+ 0x01, #List length
+ 0x01; #psk_dhe_ke
+ } elsif ($testtype == UNKNOWN_KEX_MODES) {
+ $ext = pack "C3",
+ 0x02, #List length
+ 0xfe, #unknown
+ 0xff; #unknown
+ } elsif ($testtype == BOTH_KEX_MODES) {
+ #We deliberately list psk_ke first...should still use psk_dhe_ke
+ $ext = pack "C3",
+ 0x02, #List length
+ 0x00, #psk_ke
+ 0x01; #psk_dhe_ke
+ }
+
+ if ($testtype == DELETE_EXTENSION) {
+ $message->delete_extension(
+ TLSProxy::Message::EXT_PSK_KEX_MODES);
+ } else {
+ $message->set_extension(
+ TLSProxy::Message::EXT_PSK_KEX_MODES, $ext);
+ }
+
+ $message->repack();
+ }
+ }
+}
diff --git a/test/recipes/70-test_tls13messages.t b/test/recipes/70-test_tls13messages.t
new file mode 100644
index 000000000000..3113294f0631
--- /dev/null
+++ b/test/recipes/70-test_tls13messages.t
@@ -0,0 +1,392 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
+use OpenSSL::Test::Utils;
+use File::Temp qw(tempfile);
+use TLSProxy::Proxy;
+use checkhandshake qw(checkhandshake @handmessages @extensions);
+
+my $test_name = "test_tls13messages";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLSv1.3 enabled"
+ if disabled("tls1_3");
+
+plan skip_all => "$test_name needs EC enabled"
+ if disabled("ec");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+@handmessages = (
+ [TLSProxy::Message::MT_CLIENT_HELLO,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_SERVER_HELLO,
+ checkhandshake::HRR_HANDSHAKE | checkhandshake::HRR_RESUME_HANDSHAKE],
+ [TLSProxy::Message::MT_CLIENT_HELLO,
+ checkhandshake::HRR_HANDSHAKE | checkhandshake::HRR_RESUME_HANDSHAKE],
+ [TLSProxy::Message::MT_SERVER_HELLO,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_CERTIFICATE_REQUEST,
+ checkhandshake::CLIENT_AUTH_HANDSHAKE],
+ [TLSProxy::Message::MT_CERTIFICATE,
+ checkhandshake::ALL_HANDSHAKES & ~(checkhandshake::RESUME_HANDSHAKE | checkhandshake::HRR_RESUME_HANDSHAKE)],
+ [TLSProxy::Message::MT_CERTIFICATE_VERIFY,
+ checkhandshake::ALL_HANDSHAKES & ~(checkhandshake::RESUME_HANDSHAKE | checkhandshake::HRR_RESUME_HANDSHAKE)],
+ [TLSProxy::Message::MT_FINISHED,
+ checkhandshake::ALL_HANDSHAKES],
+ [TLSProxy::Message::MT_CERTIFICATE,
+ checkhandshake::CLIENT_AUTH_HANDSHAKE],
+ [TLSProxy::Message::MT_CERTIFICATE_VERIFY,
+ checkhandshake::CLIENT_AUTH_HANDSHAKE],
+ [TLSProxy::Message::MT_FINISHED,
+ checkhandshake::ALL_HANDSHAKES],
+ [0, 0]
+);
+
+@extensions = (
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SERVER_NAME,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SERVER_NAME_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::STATUS_REQUEST_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_GROUPS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EC_POINT_FORMATS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SIG_ALGS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ALPN,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::ALPN_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SCT,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SCT_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SESSION_TICKET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_VERSIONS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_PSK_KEX_MODES,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_PSK,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::PSK_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_POST_HANDSHAKE_AUTH,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::POST_HANDSHAKE_AUTH_CLI_EXTENSION],
+
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SUPPORTED_VERSIONS,
+ TLSProxy::Message::SERVER,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
+ TLSProxy::Message::SERVER,
+ checkhandshake::KEY_SHARE_HRR_EXTENSION],
+
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SERVER_NAME,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SERVER_NAME_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::STATUS_REQUEST_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_GROUPS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EC_POINT_FORMATS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SIG_ALGS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ALPN,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::ALPN_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SCT,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::SCT_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SESSION_TICKET,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SUPPORTED_VERSIONS,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_PSK_KEX_MODES,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_PSK,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::PSK_CLI_EXTENSION],
+ [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_POST_HANDSHAKE_AUTH,
+ TLSProxy::Message::CLIENT,
+ checkhandshake::POST_HANDSHAKE_AUTH_CLI_EXTENSION],
+
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SUPPORTED_VERSIONS,
+ TLSProxy::Message::SERVER,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_KEY_SHARE,
+ TLSProxy::Message::SERVER,
+ checkhandshake::DEFAULT_EXTENSIONS],
+ [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_PSK,
+ TLSProxy::Message::SERVER,
+ checkhandshake::PSK_SRV_EXTENSION],
+
+ [TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS, TLSProxy::Message::EXT_SERVER_NAME,
+ TLSProxy::Message::SERVER,
+ checkhandshake::SERVER_NAME_SRV_EXTENSION],
+ [TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS, TLSProxy::Message::EXT_ALPN,
+ TLSProxy::Message::SERVER,
+ checkhandshake::ALPN_SRV_EXTENSION],
+ [TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS, TLSProxy::Message::EXT_SUPPORTED_GROUPS,
+ TLSProxy::Message::SERVER,
+ checkhandshake::SUPPORTED_GROUPS_SRV_EXTENSION],
+
+ [TLSProxy::Message::MT_CERTIFICATE_REQUEST, TLSProxy::Message::EXT_SIG_ALGS,
+ TLSProxy::Message::SERVER,
+ checkhandshake::DEFAULT_EXTENSIONS],
+
+ [TLSProxy::Message::MT_CERTIFICATE, TLSProxy::Message::EXT_STATUS_REQUEST,
+ TLSProxy::Message::SERVER,
+ checkhandshake::STATUS_REQUEST_SRV_EXTENSION],
+ [TLSProxy::Message::MT_CERTIFICATE, TLSProxy::Message::EXT_SCT,
+ TLSProxy::Message::SERVER,
+ checkhandshake::SCT_SRV_EXTENSION],
+
+ [0,0,0,0]
+);
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#Test 1: Check we get all the right messages for a default handshake
+(undef, my $session) = tempfile();
+$proxy->serverconnects(2);
+$proxy->clientflags("-sess_out ".$session);
+$proxy->sessionfile($session);
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 17;
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "Default handshake test");
+
+#Test 2: Resumption handshake
+$proxy->clearClient();
+$proxy->clientflags("-sess_in ".$session);
+$proxy->clientstart();
+checkhandshake($proxy, checkhandshake::RESUME_HANDSHAKE,
+ (checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::PSK_CLI_EXTENSION
+ | checkhandshake::PSK_SRV_EXTENSION),
+ "Resumption handshake test");
+
+SKIP: {
+ skip "No OCSP support in this OpenSSL build", 4
+ if disabled("ct") || disabled("ec") || disabled("ocsp");
+ #Test 3: A status_request handshake (client request only)
+ $proxy->clear();
+ $proxy->clientflags("-status");
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::STATUS_REQUEST_CLI_EXTENSION,
+ "status_request handshake test (client)");
+
+ #Test 4: A status_request handshake (server support only)
+ $proxy->clear();
+ $proxy->serverflags("-status_file "
+ .srctop_file("test", "recipes", "ocsp-response.der"));
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "status_request handshake test (server)");
+
+ #Test 5: A status_request handshake (client and server)
+ $proxy->clear();
+ $proxy->clientflags("-status");
+ $proxy->serverflags("-status_file "
+ .srctop_file("test", "recipes", "ocsp-response.der"));
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+ | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+ "status_request handshake test");
+
+ #Test 6: A status_request handshake (client and server) with client auth
+ $proxy->clear();
+ $proxy->clientflags("-status -enable_pha -cert "
+ .srctop_file("apps", "server.pem"));
+ $proxy->serverflags("-Verify 5 -status_file "
+ .srctop_file("test", "recipes", "ocsp-response.der"));
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::CLIENT_AUTH_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+ | checkhandshake::STATUS_REQUEST_SRV_EXTENSION
+ | checkhandshake::POST_HANDSHAKE_AUTH_CLI_EXTENSION,
+ "status_request handshake with client auth test");
+}
+
+#Test 7: A client auth handshake
+$proxy->clear();
+$proxy->clientflags("-enable_pha -cert ".srctop_file("apps", "server.pem"));
+$proxy->serverflags("-Verify 5");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::CLIENT_AUTH_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS |
+ checkhandshake::POST_HANDSHAKE_AUTH_CLI_EXTENSION,
+ "Client auth handshake test");
+
+#Test 8: Server name handshake (no client request)
+$proxy->clear();
+$proxy->clientflags("-noservername");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ & ~checkhandshake::SERVER_NAME_CLI_EXTENSION,
+ "Server name handshake test (client)");
+
+#Test 9: Server name handshake (server support only)
+$proxy->clear();
+$proxy->clientflags("-noservername");
+$proxy->serverflags("-servername testhost");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ & ~checkhandshake::SERVER_NAME_CLI_EXTENSION,
+ "Server name handshake test (server)");
+
+#Test 10: Server name handshake (client and server)
+$proxy->clear();
+$proxy->clientflags("-servername testhost");
+$proxy->serverflags("-servername testhost");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::SERVER_NAME_SRV_EXTENSION,
+ "Server name handshake test");
+
+#Test 11: ALPN handshake (client request only)
+$proxy->clear();
+$proxy->clientflags("-alpn test");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::ALPN_CLI_EXTENSION,
+ "ALPN handshake test (client)");
+
+#Test 12: ALPN handshake (server support only)
+$proxy->clear();
+$proxy->serverflags("-alpn test");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS,
+ "ALPN handshake test (server)");
+
+#Test 13: ALPN handshake (client and server)
+$proxy->clear();
+$proxy->clientflags("-alpn test");
+$proxy->serverflags("-alpn test");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::ALPN_CLI_EXTENSION
+ | checkhandshake::ALPN_SRV_EXTENSION,
+ "ALPN handshake test");
+
+SKIP: {
+ skip "No CT, EC or OCSP support in this OpenSSL build", 1
+ if disabled("ct") || disabled("ec") || disabled("ocsp");
+
+ #Test 14: SCT handshake (client request only)
+ $proxy->clear();
+ #Note: -ct also sends status_request
+ $proxy->clientflags("-ct");
+ $proxy->serverflags("-status_file "
+ .srctop_file("test", "recipes", "ocsp-response.der")
+ ." -serverinfo ".srctop_file("test", "serverinfo2.pem"));
+ $proxy->start();
+ checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::SCT_CLI_EXTENSION
+ | checkhandshake::SCT_SRV_EXTENSION
+ | checkhandshake::STATUS_REQUEST_CLI_EXTENSION
+ | checkhandshake::STATUS_REQUEST_SRV_EXTENSION,
+ "SCT handshake test");
+}
+
+#Test 15: HRR Handshake
+$proxy->clear();
+$proxy->serverflags("-curves P-256");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::HRR_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::KEY_SHARE_HRR_EXTENSION,
+ "HRR handshake test");
+
+#Test 16: Resumption handshake with HRR
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$proxy->serverflags("-curves P-256");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::HRR_RESUME_HANDSHAKE,
+ (checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::KEY_SHARE_HRR_EXTENSION
+ | checkhandshake::PSK_CLI_EXTENSION
+ | checkhandshake::PSK_SRV_EXTENSION),
+ "Resumption handshake with HRR test");
+
+#Test 17: Acceptable but non preferred key_share
+$proxy->clear();
+$proxy->clientflags("-curves P-256");
+$proxy->start();
+checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE,
+ checkhandshake::DEFAULT_EXTENSIONS
+ | checkhandshake::SUPPORTED_GROUPS_SRV_EXTENSION,
+ "Acceptable but non preferred key_share");
+
+unlink $session;
diff --git a/test/recipes/70-test_tls13psk.t b/test/recipes/70-test_tls13psk.t
new file mode 100644
index 000000000000..d24d52e35c9a
--- /dev/null
+++ b/test/recipes/70-test_tls13psk.t
@@ -0,0 +1,159 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
+use OpenSSL::Test::Utils;
+use File::Temp qw(tempfile);
+use TLSProxy::Proxy;
+
+my $test_name = "test_tls13psk";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLSv1.3 enabled"
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+my $proxy = TLSProxy::Proxy->new(
+ undef,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+use constant {
+ PSK_LAST_FIRST_CH => 0,
+ ILLEGAL_EXT_SECOND_CH => 1
+};
+
+#Most PSK tests are done in test_ssl_new. This tests various failure scenarios
+#around PSK
+
+#Test 1: First get a session
+(undef, my $session) = tempfile();
+$proxy->clientflags("-sess_out ".$session);
+$proxy->serverflags("-servername localhost");
+$proxy->sessionfile($session);
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 5;
+ok(TLSProxy::Message->success(), "Initial connection");
+
+#Test 2: Attempt a resume with PSK not in last place. Should fail
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$proxy->filter(\&modify_psk_filter);
+my $testtype = PSK_LAST_FIRST_CH;
+$proxy->start();
+ok(TLSProxy::Message->fail(), "PSK not last");
+
+#Test 3: Attempt a resume after an HRR where PSK hash matches selected
+# ciphersuite. Should see PSK on second ClientHello
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+if (disabled("ec")) {
+ $proxy->serverflags("-curves ffdhe3072");
+} else {
+ $proxy->serverflags("-curves P-256");
+}
+$proxy->filter(undef);
+$proxy->start();
+#Check if the PSK is present in the second ClientHello
+my $ch2 = ${$proxy->message_list}[2];
+my $ch2seen = defined $ch2 && $ch2->mt() == TLSProxy::Message::MT_CLIENT_HELLO;
+my $pskseen = $ch2seen
+ && defined ${$ch2->{extension_data}}{TLSProxy::Message::EXT_PSK};
+ok($pskseen, "PSK hash matches");
+
+#Test 4: Attempt a resume after an HRR where PSK hash does not match selected
+# ciphersuite. Should not see PSK on second ClientHello
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$proxy->filter(\&modify_psk_filter);
+if (disabled("ec")) {
+ $proxy->serverflags("-curves ffdhe3072");
+} else {
+ $proxy->serverflags("-curves P-256");
+}
+$proxy->ciphersuitesc("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384");
+$proxy->ciphersuitess("TLS_AES_256_GCM_SHA384");
+#We force an early failure because TLS Proxy doesn't actually support
+#TLS_AES_256_GCM_SHA384. That doesn't matter for this test though.
+$testtype = ILLEGAL_EXT_SECOND_CH;
+$proxy->start();
+#Check if the PSK is present in the second ClientHello
+$ch2 = ${$proxy->message_list}[2];
+$ch2seen = defined $ch2 && $ch2->mt() == TLSProxy::Message::MT_CLIENT_HELLO;
+$pskseen = $ch2seen
+ && defined ${$ch2->extension_data}{TLSProxy::Message::EXT_PSK};
+ok($ch2seen && !$pskseen, "PSK hash does not match");
+
+#Test 5: Attempt a resume without a sig agls extension. Should succeed because
+# sig algs is not needed in a resumption.
+$proxy->clear();
+$proxy->clientflags("-sess_in ".$session);
+$proxy->filter(\&remove_sig_algs_filter);
+$proxy->start();
+ok(TLSProxy::Message->success(), "Remove sig algs");
+
+unlink $session;
+
+sub modify_psk_filter
+{
+ my $proxy = shift;
+ my $flight;
+ my $message;
+
+ if ($testtype == PSK_LAST_FIRST_CH) {
+ $flight = 0;
+ } else {
+ $flight = 2;
+ }
+
+ # Only look at the first or second ClientHello
+ return if $proxy->flight != $flight;
+
+ if ($testtype == PSK_LAST_FIRST_CH) {
+ $message = ${$proxy->message_list}[0];
+ } else {
+ $message = ${$proxy->message_list}[2];
+ }
+
+ return if (!defined $message
+ || $message->mt != TLSProxy::Message::MT_CLIENT_HELLO);
+
+ if ($testtype == PSK_LAST_FIRST_CH) {
+ $message->set_extension(TLSProxy::Message::EXT_FORCE_LAST, "");
+ } else {
+ #Deliberately break the connection
+ $message->set_extension(TLSProxy::Message::EXT_SUPPORTED_GROUPS, "");
+ }
+ $message->repack();
+}
+
+sub remove_sig_algs_filter
+{
+ my $proxy = shift;
+ my $message;
+
+ # Only look at the first ClientHello
+ return if $proxy->flight != 0;
+
+ $message = ${$proxy->message_list}[0];
+ $message->delete_extension(TLSProxy::Message::EXT_SIG_ALGS);
+ $message->repack();
+}
diff --git a/test/recipes/70-test_tlsextms.t b/test/recipes/70-test_tlsextms.t
new file mode 100644
index 000000000000..20f980648d1b
--- /dev/null
+++ b/test/recipes/70-test_tlsextms.t
@@ -0,0 +1,257 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+use File::Temp qw(tempfile);
+
+my $test_name = "test_tlsextms";
+setup($test_name);
+
+plan skip_all => "TLSProxy isn't usable on $^O"
+ if $^O =~ /^(VMS)$/;
+
+plan skip_all => "$test_name needs the dynamic engine feature enabled"
+ if disabled("engine") || disabled("dynamic-engine");
+
+plan skip_all => "$test_name needs the sock feature enabled"
+ if disabled("sock");
+
+plan skip_all => "$test_name needs TLSv1.0, TLSv1.1 or TLSv1.2 enabled"
+ if disabled("tls1") && disabled("tls1_1") && disabled("tls1_2");
+
+$ENV{OPENSSL_ia32cap} = '~0x200000200000000';
+
+sub checkmessages($$$$$);
+sub setrmextms($$);
+sub clearall();
+
+my $crmextms = 0;
+my $srmextms = 0;
+my $cextms = 0;
+my $sextms = 0;
+my $fullhand = 0;
+
+my $proxy = TLSProxy::Proxy->new(
+ \&extms_filter,
+ cmdstr(app(["openssl"]), display => 1),
+ srctop_file("apps", "server.pem"),
+ (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE})
+);
+
+#Note that EXTMS is only relevant for <TLS1.3
+
+#Test 1: By default server and client should send extended master secret
+# extension.
+#Expected result: ClientHello extension seen; ServerHello extension seen
+# Full handshake
+
+setrmextms(0, 0);
+$proxy->clientflags("-no_tls1_3");
+$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
+plan tests => 10;
+checkmessages(1, "Default extended master secret test", 1, 1, 1);
+
+#Test 2: If client omits extended master secret extension, server should too.
+#Expected result: ClientHello extension not seen; ServerHello extension not seen
+# Full handshake
+
+clearall();
+setrmextms(1, 0);
+$proxy->clientflags("-no_tls1_3");
+$proxy->start();
+checkmessages(2, "No client extension extended master secret test", 0, 0, 1);
+
+# Test 3: same as 1 but with session tickets disabled.
+# Expected result: same as test 1.
+
+clearall();
+$proxy->clientflags("-no_ticket -no_tls1_3");
+setrmextms(0, 0);
+$proxy->start();
+checkmessages(3, "No ticket extended master secret test", 1, 1, 1);
+
+# Test 4: same as 2 but with session tickets disabled.
+# Expected result: same as test 2.
+
+clearall();
+$proxy->clientflags("-no_ticket -no_tls1_3");
+setrmextms(1, 0);
+$proxy->start();
+checkmessages(4, "No ticket, no client extension extended master secret test", 0, 0, 1);
+
+#Test 5: Session resumption extended master secret test
+#
+#Expected result: ClientHello extension seen; ServerHello extension seen
+# Abbreviated handshake
+
+clearall();
+setrmextms(0, 0);
+(undef, my $session) = tempfile();
+$proxy->serverconnects(2);
+$proxy->clientflags("-no_tls1_3 -sess_out ".$session);
+$proxy->start();
+$proxy->clearClient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session);
+$proxy->clientstart();
+checkmessages(5, "Session resumption extended master secret test", 1, 1, 0);
+unlink $session;
+
+#Test 6: Session resumption extended master secret test original session
+# omits extension. Server must not resume session.
+#Expected result: ClientHello extension seen; ServerHello extension seen
+# Full handshake
+
+clearall();
+setrmextms(1, 0);
+(undef, $session) = tempfile();
+$proxy->serverconnects(2);
+$proxy->clientflags("-no_tls1_3 -sess_out ".$session);
+$proxy->start();
+$proxy->clearClient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session);
+setrmextms(0, 0);
+$proxy->clientstart();
+checkmessages(6, "Session resumption extended master secret test", 1, 1, 1);
+unlink $session;
+
+#Test 7: Session resumption extended master secret test resumed session
+# omits client extension. Server must abort connection.
+#Expected result: aborted connection.
+
+clearall();
+setrmextms(0, 0);
+(undef, $session) = tempfile();
+$proxy->serverconnects(2);
+$proxy->clientflags("-no_tls1_3 -sess_out ".$session);
+$proxy->start();
+$proxy->clearClient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session);
+setrmextms(1, 0);
+$proxy->clientstart();
+ok(TLSProxy::Message->fail(), "Client inconsistent session resumption");
+unlink $session;
+
+#Test 8: Session resumption extended master secret test resumed session
+# omits server extension. Client must abort connection.
+#Expected result: aborted connection.
+
+clearall();
+setrmextms(0, 0);
+(undef, $session) = tempfile();
+$proxy->serverconnects(2);
+$proxy->clientflags("-no_tls1_3 -sess_out ".$session);
+$proxy->start();
+$proxy->clearClient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session);
+setrmextms(0, 1);
+$proxy->clientstart();
+ok(TLSProxy::Message->fail(), "Server inconsistent session resumption 1");
+unlink $session;
+
+#Test 9: Session resumption extended master secret test initial session
+# omits server extension. Client must abort connection.
+#Expected result: aborted connection.
+
+clearall();
+setrmextms(0, 1);
+(undef, $session) = tempfile();
+$proxy->serverconnects(2);
+$proxy->clientflags("-no_tls1_3 -sess_out ".$session);
+$proxy->start();
+$proxy->clearClient();
+$proxy->clientflags("-no_tls1_3 -sess_in ".$session);
+setrmextms(0, 0);
+$proxy->clientstart();
+ok(TLSProxy::Message->fail(), "Server inconsistent session resumption 2");
+unlink $session;
+
+SKIP: {
+ skip "TLS 1.3 disabled", 1
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+ #Test 10: In TLS1.3 we should not negotiate extended master secret
+ #Expected result: ClientHello extension seen; ServerHello extension not seen
+ # TLS1.3 handshake (will appear as abbreviated handshake
+ # because of no CKE message)
+ clearall();
+ setrmextms(0, 0);
+ $proxy->start();
+ checkmessages(10, "TLS1.3 extended master secret test", 1, 0, 0);
+}
+
+
+sub extms_filter
+{
+ my $proxy = shift;
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($crmextms && $message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ $message->delete_extension(TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET);
+ $message->repack();
+ }
+ if ($srmextms && $message->mt == TLSProxy::Message::MT_SERVER_HELLO) {
+ $message->delete_extension(TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET);
+ $message->repack();
+ }
+ }
+}
+
+sub checkmessages($$$$$)
+{
+ my ($testno, $testname, $testcextms, $testsextms, $testhand) = @_;
+
+ subtest $testname => sub {
+
+ foreach my $message (@{$proxy->message_list}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO
+ || $message->mt == TLSProxy::Message::MT_SERVER_HELLO) {
+ #Get the extensions data
+ my %extensions = %{$message->extension_data};
+ if (defined
+ $extensions{TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET}) {
+ if ($message->mt == TLSProxy::Message::MT_CLIENT_HELLO) {
+ $cextms = 1;
+ } else {
+ $sextms = 1;
+ }
+ }
+ } elsif ($message->mt == TLSProxy::Message::MT_CLIENT_KEY_EXCHANGE) {
+ #Must be doing a full handshake
+ $fullhand = 1;
+ }
+ }
+
+ plan tests => 4;
+
+ ok(TLSProxy::Message->success, "Handshake");
+
+ ok($testcextms == $cextms,
+ "ClientHello extension extended master secret check");
+ ok($testsextms == $sextms,
+ "ServerHello extension extended master secret check");
+ ok($testhand == $fullhand,
+ "Extended master secret full handshake check");
+
+ }
+}
+
+sub setrmextms($$)
+{
+ ($crmextms, $srmextms) = @_;
+}
+
+sub clearall()
+{
+ $cextms = 0;
+ $sextms = 0;
+ $fullhand = 0;
+ $proxy->clear();
+}
diff --git a/test/recipes/70-test_verify_extra.t b/test/recipes/70-test_verify_extra.t
new file mode 100644
index 000000000000..9db3014dcfbc
--- /dev/null
+++ b/test/recipes/70-test_verify_extra.t
@@ -0,0 +1,17 @@
+#! /usr/bin/env perl
+# Copyright 2015-2022 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
+
+
+use OpenSSL::Test qw/:DEFAULT srctop_dir/;
+
+setup("test_verify_extra");
+
+plan tests => 1;
+
+ok(run(test(["verify_extra_test",
+ srctop_dir("test", "certs")])));
diff --git a/test/recipes/70-test_wpacket.t b/test/recipes/70-test_wpacket.t
new file mode 100644
index 000000000000..97b196ef3f49
--- /dev/null
+++ b/test/recipes/70-test_wpacket.t
@@ -0,0 +1,20 @@
+#! /usr/bin/env perl
+# Copyright 2016 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
+
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_wpacket");
+
+plan skip_all => "Test disabled in this configuration"
+ if $^O eq 'MSWin32' && !disabled("shared");
+
+plan tests => 1;
+
+ok(run(test(["wpackettest"])));
diff --git a/test/recipes/71-test_ssl_ctx.t b/test/recipes/71-test_ssl_ctx.t
new file mode 100644
index 000000000000..800132dcd6af
--- /dev/null
+++ b/test/recipes/71-test_ssl_ctx.t
@@ -0,0 +1,16 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+use OpenSSL::Test;
+
+setup("test_ssl_ctx");
+
+plan tests => 1;
+ok(run(test(["ssl_ctx_test"])));
diff --git a/test/recipes/79-test_http.t b/test/recipes/79-test_http.t
new file mode 100644
index 000000000000..b3ac70fdebb2
--- /dev/null
+++ b/test/recipes/79-test_http.t
@@ -0,0 +1,28 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_http");
+
+plan tests => 2;
+
+SKIP: {
+ skip "sockets disabled", 1 if disabled("sock");
+ skip "OCSP disabled", 1 if disabled("ocsp");
+ my $cmd = [qw{openssl ocsp -index any -port 0}];
+ my @output = run(app($cmd), capture => 1);
+ $output[0] =~ s/\r\n/\n/g;
+ ok($output[0] =~ /^ACCEPT (0.0.0.0|\[::\]):(\d+?) PID=(\d+)$/
+ && $2 >= 1024 && $3 > 0,
+ "HTTP server auto-selects and reports local port >= 1024 and pid > 0");
+}
+
+ok(run(test(["http_test", srctop_file("test", "certs", "ca-cert.pem")])));
diff --git a/test/recipes/80-test_ca.t b/test/recipes/80-test_ca.t
new file mode 100644
index 000000000000..eb025f4d591f
--- /dev/null
+++ b/test/recipes/80-test_ca.t
@@ -0,0 +1,287 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use POSIX;
+use File::Path 2.00 qw/rmtree/;
+use OpenSSL::Test qw/:DEFAULT cmdstr data_file srctop_file/;
+use OpenSSL::Test::Utils;
+use Time::Local qw/timegm/;
+
+setup("test_ca");
+
+$ENV{OPENSSL} = cmdstr(app(["openssl"]), display => 1);
+
+my $cnf = srctop_file("test","ca-and-certs.cnf");
+my $std_openssl_cnf = '"'
+ . srctop_file("apps", $^O eq "VMS" ? "openssl-vms.cnf" : "openssl.cnf")
+ . '"';
+
+rmtree("demoCA", { safe => 0 });
+
+plan tests => 15;
+ SKIP: {
+ my $cakey = srctop_file("test", "certs", "ca-key.pem");
+ $ENV{OPENSSL_CONFIG} = qq(-config "$cnf");
+ skip "failed creating CA structure", 4
+ if !ok(run(perlapp(["CA.pl","-newca",
+ "-extra-req", "-key $cakey"], stdin => undef)),
+ 'creating CA structure');
+
+ my $eekey = srctop_file("test", "certs", "ee-key.pem");
+ $ENV{OPENSSL_CONFIG} = qq(-config "$cnf");
+ skip "failed creating new certificate request", 3
+ if !ok(run(perlapp(["CA.pl","-newreq",
+ '-extra-req', "-outform DER -section userreq -key $eekey"])),
+ 'creating certificate request');
+ $ENV{OPENSSL_CONFIG} = qq(-rand_serial -inform DER -config "$std_openssl_cnf");
+ skip "failed to sign certificate request", 2
+ if !is(yes(cmdstr(perlapp(["CA.pl", "-sign"]))), 0,
+ 'signing certificate request');
+
+ ok(run(perlapp(["CA.pl", "-verify", "newcert.pem"])),
+ 'verifying new certificate');
+
+ skip "CT not configured, can't use -precert", 1
+ if disabled("ct");
+
+ my $eekey2 = srctop_file("test", "certs", "ee-key-3072.pem");
+ $ENV{OPENSSL_CONFIG} = qq(-config "$cnf");
+ ok(run(perlapp(["CA.pl", "-precert", '-extra-req', "-section userreq -key $eekey2"], stderr => undef)),
+ 'creating new pre-certificate');
+}
+
+SKIP: {
+ skip "SM2 is not supported by this OpenSSL build", 1
+ if disabled("sm2");
+
+ is(yes(cmdstr(app(["openssl", "ca", "-config",
+ $cnf,
+ "-in", srctop_file("test", "certs", "sm2-csr.pem"),
+ "-out", "sm2-test.crt",
+ "-sigopt", "distid:1234567812345678",
+ "-vfyopt", "distid:1234567812345678",
+ "-md", "sm3",
+ "-cert", srctop_file("test", "certs", "sm2-root.crt"),
+ "-keyfile", srctop_file("test", "certs", "sm2-root.key")]))),
+ 0,
+ "Signing SM2 certificate request");
+}
+
+test_revoke('notimes', {
+ should_succeed => 1,
+});
+test_revoke('lastupdate_invalid', {
+ lastupdate => '1234567890',
+ should_succeed => 0,
+});
+test_revoke('lastupdate_utctime', {
+ lastupdate => '200901123456Z',
+ should_succeed => 1,
+});
+test_revoke('lastupdate_generalizedtime', {
+ lastupdate => '20990901123456Z',
+ should_succeed => 1,
+});
+test_revoke('nextupdate_invalid', {
+ nextupdate => '1234567890',
+ should_succeed => 0,
+});
+test_revoke('nextupdate_utctime', {
+ nextupdate => '200901123456Z',
+ should_succeed => 1,
+});
+test_revoke('nextupdate_generalizedtime', {
+ nextupdate => '20990901123456Z',
+ should_succeed => 1,
+});
+test_revoke('both_utctime', {
+ lastupdate => '200901123456Z',
+ nextupdate => '200908123456Z',
+ should_succeed => 1,
+});
+test_revoke('both_generalizedtime', {
+ lastupdate => '20990901123456Z',
+ nextupdate => '20990908123456Z',
+ should_succeed => 1,
+});
+
+sub test_revoke {
+ my ($filename, $opts) = @_;
+
+ subtest "Revoke certificate and generate CRL: $filename" => sub {
+ # Before Perl 5.12.0, the range of times Perl could represent was
+ # limited by the size of time_t, so Time::Local was hamstrung by the
+ # Y2038 problem
+ # Perl 5.12.0 onwards use an internal time implementation with a
+ # guaranteed >32-bit time range on all architectures, so the tests
+ # involving post-2038 times won't fail provided we're running under
+ # that version or newer
+ plan skip_all =>
+ 'Perl >= 5.12.0 required to run certificate revocation tests'
+ if $] < 5.012000;
+
+ $ENV{CN2} = $filename;
+ ok(
+ run(app(['openssl',
+ 'req',
+ '-config', $cnf,
+ '-new',
+ '-key', data_file('revoked.key'),
+ '-out', "$filename-req.pem",
+ '-section', 'userreq',
+ ])),
+ 'Generate CSR'
+ );
+ delete $ENV{CN2};
+
+ ok(
+ run(app(['openssl',
+ 'ca',
+ '-batch',
+ '-config', $cnf,
+ '-in', "$filename-req.pem",
+ '-out', "$filename-cert.pem",
+ ])),
+ 'Sign CSR'
+ );
+
+ ok(
+ run(app(['openssl',
+ 'ca',
+ '-config', $cnf,
+ '-revoke', "$filename-cert.pem",
+ ])),
+ 'Revoke certificate'
+ );
+
+ my @gencrl_opts;
+
+ if (exists $opts->{lastupdate}) {
+ push @gencrl_opts, '-crl_lastupdate', $opts->{lastupdate};
+ }
+
+ if (exists $opts->{nextupdate}) {
+ push @gencrl_opts, '-crl_nextupdate', $opts->{nextupdate};
+ }
+
+ is(
+ run(app(['openssl',
+ 'ca',
+ '-config', $cnf,
+ '-gencrl',
+ '-out', "$filename-crl.pem",
+ '-crlsec', '60',
+ @gencrl_opts,
+ ])),
+ $opts->{should_succeed},
+ 'Generate CRL'
+ );
+ my $crl_gentime = time;
+
+ # The following tests only need to run if the CRL was supposed to be
+ # generated:
+ return unless $opts->{should_succeed};
+
+ my $crl_lastupdate = crl_field("$filename-crl.pem", 'lastUpdate');
+ if (exists $opts->{lastupdate}) {
+ is(
+ $crl_lastupdate,
+ rfc5280_time($opts->{lastupdate}),
+ 'CRL lastUpdate field has expected value'
+ );
+ } else {
+ diag("CRL lastUpdate: $crl_lastupdate");
+ diag("openssl run time: $crl_gentime");
+ ok(
+ # Is the CRL's lastUpdate time within a second of the time that
+ # `openssl ca -gencrl` was executed?
+ $crl_gentime - 1 <= $crl_lastupdate && $crl_lastupdate <= $crl_gentime + 1,
+ 'CRL lastUpdate field has (roughly) expected value'
+ );
+ }
+
+ my $crl_nextupdate = crl_field("$filename-crl.pem", 'nextUpdate');
+ if (exists $opts->{nextupdate}) {
+ is(
+ $crl_nextupdate,
+ rfc5280_time($opts->{nextupdate}),
+ 'CRL nextUpdate field has expected value'
+ );
+ } else {
+ diag("CRL nextUpdate: $crl_nextupdate");
+ diag("openssl run time: $crl_gentime");
+ ok(
+ # Is the CRL's lastUpdate time within a second of the time that
+ # `openssl ca -gencrl` was executed, taking into account the use
+ # of '-crlsec 60'?
+ $crl_gentime + 59 <= $crl_nextupdate && $crl_nextupdate <= $crl_gentime + 61,
+ 'CRL nextUpdate field has (roughly) expected value'
+ );
+ }
+ };
+}
+
+sub yes {
+ my $cntr = 10;
+ open(PIPE, "|-", join(" ",@_));
+ local $SIG{PIPE} = "IGNORE";
+ 1 while $cntr-- > 0 && print PIPE "y\n";
+ close PIPE;
+ return 0;
+}
+
+# Get the value of the lastUpdate or nextUpdate field from a CRL
+sub crl_field {
+ my ($crl_path, $field_name) = @_;
+
+ my @out = run(
+ app(['openssl',
+ 'crl',
+ '-in', $crl_path,
+ '-noout',
+ '-' . lc($field_name),
+ ]),
+ capture => 1,
+ statusvar => \my $exit,
+ );
+ ok($exit, "CRL $field_name field retrieved");
+ diag("CRL $field_name: $out[0]");
+
+ $out[0] =~ s/^\Q$field_name\E=//;
+ $out[0] =~ s/\n?//;
+ my $time = human_time($out[0]);
+
+ return $time;
+}
+
+# Converts human-readable ASN1_TIME_print() output to Unix time
+sub human_time {
+ my ($human) = @_;
+
+ my ($mo, $d, $h, $m, $s, $y) = $human =~ /^([A-Za-z]{3})\s+(\d+) (\d{2}):(\d{2}):(\d{2}) (\d{4})/;
+
+ my %months = (
+ Jan => 0, Feb => 1, Mar => 2, Apr => 3, May => 4, Jun => 5,
+ Jul => 6, Aug => 7, Sep => 8, Oct => 9, Nov => 10, Dec => 11,
+ );
+
+ return timegm($s, $m, $h, $d, $months{$mo}, $y);
+}
+
+# Converts an RFC 5280 timestamp to Unix time
+sub rfc5280_time {
+ my ($asn1) = @_;
+
+ my ($y, $mo, $d, $h, $m, $s) = $asn1 =~ /^(\d{2,4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z$/;
+
+ return timegm($s, $m, $h, $d, $mo - 1, $y);
+}
diff --git a/test/recipes/80-test_ca_data/revoked.key b/test/recipes/80-test_ca_data/revoked.key
new file mode 100644
index 000000000000..3ecc5660187f
--- /dev/null
+++ b/test/recipes/80-test_ca_data/revoked.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAvpWG+nFMaupRmFBLmaEsZhXzYPPh/2n7zkgBHf7hLDiw472P
+S0infjrGc+Orv+Habpb1/sPktKitvFY01JYldCfDENs1ECUcjkuBm/tCBHxvPeI4
+bA7kLo4qGG0wzWcqI2s3zwWfzLdZWH+6xAo/jKSty5icwPKPaWcPwU4zz/yFXrte
+z5Owz9n0UnmHsfhNFWhl1bcZCGN/XrE0rQWPWvDk4Y8l8lxcYZWwVi0xKwhleeWx
+O50+uVJLrF3EWGaFjYGzBCj0Py+skgFi1f2OC9oCDHrHbgkcrByyTNdUuCYzsl8U
+87H5PWJNQJlrtueJWJfW1E3qS2hS8zyosTWI2wIDAQABAoIBAAqWkhYt3zn9ZKUa
+qOiTHL1bMNdNFVw0TioKtA0vkOD9EU7FxEVBdxS7PTVJC8ywRotoVahex8EFsglJ
+nMvGv7PxVZQFKbCI70o0hbHdxrArHZ8Jh2rxdNnlSg9rWY+/0IaBOWuF+3fLI+qX
+xg+IJjmxGHq8MtFBaJhJgoWRy60dWNpbIDmp4Yk8E3MqtNCZQU+UMXesVpC3UZ2Z
+k7V+zJaC3clvQaE3vNRl7d2si94HyxHIhA0cdWBDc8+vwzrsUJhQYHZw3QH5yX4g
+3CDVe1wwljts2Jdz6YN1JaqHP1R6Cw8mihnkGEoF10mIM0YFm9pGQrFscVQFOuQQ
+WK0aiwECgYEA4qFjAdorYqnAPM6YnHyJtwheTKEbq5duF9JdSnpkV63usWB9a5B4
+d+QADhmaq6YNh2rjodNwn3oxCqlceV6PhE/sTWLkjXD8+r6wPiR06BFJszBt8BKi
+CjW1IjaMGAEpOa5f9vqhv0xgahpNBjWKfFIj4hHX6ha3N3RScwPep4ECgYEA10hH
+qKCbDiiErluUbCLveKxBx++ldxHoO64iLwbKadsHqhi5w+lIONp7P7B8MfNAHbgi
+NCKZ/Z9llyHUuNKjgFFFwEXXP5Vm1PyQeZRh5Mn7pG0qTNMbEanBRSi4pmkg3ha6
+MfsoroH6aaCIqojTHFxvP2GQUHe6iQTE5KXe/lsCgYAGd3Bpxx3hzNItaf+0x2Du
+lhCKwzYU6Vc82sXKsD9YuR/Mc+JgRVkKorjVrilZqH1OVeB056GZC1WG5lo7JFWY
+AufNNXssBgNR7Er/Gu8zB/tAX6tjZES3YdzvQvswXCge+zjFxVUELlu561IzUSfI
+cFeRxcyRY2CK9oi7u2qJAQKBgQCbwbfW0RxeCgK1A51G/5+y9y5AsapNk68qPrqM
+u6UHIWlSL8F3dPjD6Y7ybYXtvcjNt8NHZSF01jZyOg/mCMAyvppwmhc58aYMww7k
+Z+7L0Tc3p6PLIZGcHe2vU98Ex1r4VAky0DyGxZOfiH5Yo9XZ1ybF/JilH3reV4z8
+wOWtsQKBgBD7oJRC7V+DEiDN7/7SxfOBBDI66LGpOlsnuSFXM++G+Q9yhg4vvpW1
+pnNLQoMazqrub7Iemz2YVp/XBh8R07ISvSMDu0QMzSprxs254UYxpi1SfhUDf5Vt
+HPCAQTzvjohzWfPQVWy/GQxPWtttW8DHRYmcIel3O6XvlH4SYSj9
+-----END RSA PRIVATE KEY-----
diff --git a/test/recipes/80-test_cipherbytes.t b/test/recipes/80-test_cipherbytes.t
new file mode 100644
index 000000000000..69c4220004a3
--- /dev/null
+++ b/test/recipes/80-test_cipherbytes.t
@@ -0,0 +1,26 @@
+#! /usr/bin/env perl
+#
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test;
+use OpenSSL::Test::Utils qw(alldisabled available_protocols);
+
+setup("test_cipherbytes");
+
+my $no_anytls = alldisabled(available_protocols("tls"));
+
+# If we have no protocols, then we also have no supported ciphers.
+plan skip_all => "No SSL/TLS protocol is supported by this OpenSSL build."
+ if $no_anytls;
+
+simple_test("test_cipherbytes", "cipherbytes_test", "bytes_to_cipherlist");
diff --git a/test/recipes/80-test_cipherlist.t b/test/recipes/80-test_cipherlist.t
new file mode 100644
index 000000000000..2d62898dff45
--- /dev/null
+++ b/test/recipes/80-test_cipherlist.t
@@ -0,0 +1,31 @@
+#! /usr/bin/env perl
+#
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test qw(:DEFAULT openssl_versions);
+use OpenSSL::Test::Utils qw(alldisabled available_protocols);
+
+setup("test_cipherlist");
+
+my ($build_version, $library_version) = openssl_versions();
+plan skip_all =>
+ "This test recipe isn't supported when doing regression testing"
+ if $build_version ne $library_version;
+
+my $no_anytls = alldisabled(available_protocols("tls"));
+
+# If we have no protocols, then we also have no supported ciphers.
+plan skip_all => "No SSL/TLS protocol is supported by this OpenSSL build."
+ if $no_anytls;
+
+simple_test("test_cipherlist", "cipherlist_test", "cipherlist");
diff --git a/test/recipes/80-test_ciphername.t b/test/recipes/80-test_ciphername.t
new file mode 100644
index 000000000000..1a9db5d4cff3
--- /dev/null
+++ b/test/recipes/80-test_ciphername.t
@@ -0,0 +1,27 @@
+#! /usr/bin/env perl
+#
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright 2017 BaishanCloud. 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
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test;
+use OpenSSL::Test::Utils qw(alldisabled available_protocols);
+
+setup("test_ciphername");
+
+my $no_anytls = alldisabled(available_protocols("tls"));
+
+# If we have no protocols, then we also have no supported ciphers.
+plan skip_all => "No SSL/TLS protocol is supported by this OpenSSL build."
+ if $no_anytls;
+
+simple_test("test_ciphername", "ciphername_test");
diff --git a/test/recipes/80-test_cmp_http.t b/test/recipes/80-test_cmp_http.t
new file mode 100644
index 000000000000..0ca547354fc7
--- /dev/null
+++ b/test/recipes/80-test_cmp_http.t
@@ -0,0 +1,298 @@
+#! /usr/bin/env perl
+# Copyright 2007-2022 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+use strict;
+use warnings;
+
+use POSIX;
+use OpenSSL::Test qw/:DEFAULT cmdstr data_file data_dir srctop_dir bldtop_dir result_dir/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_cmp_http");
+}
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+plan skip_all => "These tests are not supported in a fuzz build"
+ if config('options') =~ /-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION|enable-fuzz-afl/;
+
+plan skip_all => "These tests are not supported in a no-cmp build"
+ if disabled("cmp");
+plan skip_all => "These tests are not supported in a no-ec build"
+ if disabled("ec");
+plan skip_all => "These tests are not supported in a no-sock build"
+ if disabled("sock");
+
+plan skip_all => "Tests involving local HTTP server not available on Windows or VMS"
+ if $^O =~ /^(VMS|MSWin32|msys)$/;
+plan skip_all => "Tests involving local HTTP server not available in cross-compile builds"
+ if defined $ENV{EXE_SHELL};
+
+sub chop_dblquot { # chop any leading and trailing '"' (needed for Windows)
+ my $str = shift;
+ $str =~ s/^\"(.*?)\"$/$1/;
+ return $str;
+}
+
+my $proxy = chop_dblquot($ENV{http_proxy} // $ENV{HTTP_PROXY} // "");
+$proxy = "<EMPTY>" if $proxy eq "";
+$proxy =~ s{^https?://}{}i;
+my $no_proxy = $ENV{no_proxy} // $ENV{NO_PROXY};
+
+my @app = qw(openssl cmp);
+
+# the CMP server configuration consists of:
+my $ca_dn; # The CA's Distinguished Name
+my $server_dn; # The server's Distinguished Name
+my $server_host;# The server's host name or IP address
+my $server_port;# The server's port
+my $server_tls; # The server's TLS port, if any, or 0
+my $server_path;# The server's CMP alias
+my $server_cert;# The server's cert
+my $kur_port; # The server's port for kur (cert update)
+my $pbm_port; # The server port to be used for PBM
+my $pbm_ref; # The reference for PBM
+my $pbm_secret; # The secret for PBM
+my $column; # The column number of the expected result
+my $sleep = 0; # The time to sleep between two requests
+my $server_fh; # Server file handle
+
+# The local $server_name variables below are among others taken as the name of a
+# sub-directory with server-specific certs etc. and CA-specific config section.
+
+sub load_config {
+ my $server_name = shift;
+ my $section = shift;
+ my $test_config = $ENV{OPENSSL_CMP_CONFIG} // "$server_name/test.cnf";
+ open (CH, $test_config) or die "Cannot open $test_config: $!";
+ my $active = 0;
+ while (<CH>) {
+ if (m/\[\s*$section\s*\]/) {
+ $active = 1;
+ } elsif (m/\[\s*.*?\s*\]/) {
+ $active = 0;
+ } elsif ($active) {
+ $ca_dn = $1 eq "" ? '""""' : $1 if m/^\s*ca_dn\s*=\s*(.*)?\s*$/;
+ $server_dn = $1 eq "" ? '""""' : $1 if m/^\s*server_dn\s*=\s*(.*)?\s*$/;
+ $server_host = $1 eq "" ? '""""' : $1 if m/^\s*server_host\s*=\s*(\S*)?\s*(\#.*)?$/;
+ $server_port = $1 eq "" ? '""""' : $1 if m/^\s*server_port\s*=\s*(.*)?\s*$/;
+ $server_tls = $1 eq "" ? '""""' : $1 if m/^\s*server_tls\s*=\s*(.*)?\s*$/;
+ $server_path = $1 eq "" ? '""""' : $1 if m/^\s*server_path\s*=\s*(.*)?\s*$/;
+ $server_cert = $1 eq "" ? '""""' : $1 if m/^\s*server_cert\s*=\s*(.*)?\s*$/;
+ $kur_port = $1 eq "" ? '""""' : $1 if m/^\s*kur_port\s*=\s*(.*)?\s*$/;
+ $pbm_port = $1 eq "" ? '""""' : $1 if m/^\s*pbm_port\s*=\s*(.*)?\s*$/;
+ $pbm_ref = $1 eq "" ? '""""' : $1 if m/^\s*pbm_ref\s*=\s*(.*)?\s*$/;
+ $pbm_secret = $1 eq "" ? '""""' : $1 if m/^\s*pbm_secret\s*=\s*(.*)?\s*$/;
+ $column = $1 eq "" ? '""""' : $1 if m/^\s*column\s*=\s*(.*)?\s*$/;
+ $sleep = $1 eq "" ? '""""' : $1 if m/^\s*sleep\s*=\s*(.*)?\s*$/;
+ }
+ }
+ close CH;
+ die "Cannot find all CMP server config values in $test_config section [$section]\n"
+ if !defined $ca_dn
+ || !defined $server_dn || !defined $server_host
+ || !defined $server_port || !defined $server_tls
+ || !defined $server_path || !defined $server_cert
+ || !defined $kur_port || !defined $pbm_port
+ || !defined $pbm_ref || !defined $pbm_secret
+ || !defined $column || !defined $sleep;
+ $server_dn = $server_dn // $ca_dn;
+}
+
+my @server_configurations = ("Mock");
+@server_configurations = split /\s+/, $ENV{OPENSSL_CMP_SERVER} if $ENV{OPENSSL_CMP_SERVER};
+# set env variable, e.g., OPENSSL_CMP_SERVER="Mock Insta" to include further CMP servers
+
+my @all_aspects = ("connection", "verification", "credentials", "commands", "enrollment");
+@all_aspects = split /\s+/, $ENV{OPENSSL_CMP_ASPECTS} if $ENV{OPENSSL_CMP_ASPECTS};
+# set env variable, e.g., OPENSSL_CMP_ASPECTS="commands enrollment" to select specific aspects
+
+my $faillog;
+my $file = $ENV{HARNESS_FAILLOG}; # pathname relative to result_dir
+if ($file) {
+ open($faillog, ">", $file) or die "Cannot open $file for writing: $!";
+}
+
+sub test_cmp_http {
+ my $server_name = shift;
+ my $aspect = shift;
+ my $n = shift;
+ my $i = shift;
+ my $title = shift;
+ my $params = shift;
+ my $expected_result = shift;
+ $params = [ '-server', "127.0.0.1:$server_port", @$params ]
+ unless grep { $_ eq '-server' } @$params;
+ my $cmd = app([@app, @$params]);
+
+ unless (is(my $actual_result = run($cmd), $expected_result, $title)) {
+ if ($faillog) {
+ my $quote_spc_empty = sub { $_ eq "" ? '""' : $_ =~ m/ / ? '"'.$_.'"' : $_ };
+ my $invocation = cmdstr($cmd, display => 1);
+ print $faillog "$server_name $aspect \"$title\" ($i/$n)".
+ " expected=$expected_result actual=$actual_result\n";
+ print $faillog "$invocation\n\n";
+ }
+ }
+}
+
+sub test_cmp_http_aspect {
+ my $server_name = shift;
+ my $aspect = shift;
+ my $tests = shift;
+ subtest "CMP app CLI $server_name $aspect\n" => sub {
+ my $n = scalar @$tests;
+ plan tests => $n;
+ my $i = 1;
+ foreach (@$tests) {
+ test_cmp_http($server_name, $aspect, $n, $i++, $$_[0], $$_[1], $$_[2]);
+ sleep($sleep);
+ }
+ };
+ # not unlinking test.certout*.pem, test.cacerts.pem, and test.extracerts.pem
+}
+
+# The input files for the tests done here dynamically depend on the test server
+# selected (where the Mock server used by default is just one possibility).
+# On the other hand the main test configuration file test.cnf, which references
+# several server-dependent input files by relative file names, is static.
+# Moreover the tests use much greater variety of input files than output files.
+# Therefore we chose the current directory as a subdirectory of $SRCTOP and it
+# was simpler to prepend the output file names by BLDTOP than doing the tests
+# from $BLDTOP/test-runs/test_cmp_http and prepending the input files by SRCTOP.
+
+indir data_dir() => sub {
+ plan tests => 1 + @server_configurations * @all_aspects
+ - (grep(/^Mock$/, @server_configurations)
+ && grep(/^certstatus$/, @all_aspects));
+
+ foreach my $server_name (@server_configurations) {
+ $server_name = chop_dblquot($server_name);
+ load_config($server_name, $server_name);
+ {
+ SKIP: {
+ my $pid;
+ if ($server_name eq "Mock") {
+ indir "Mock" => sub {
+ $pid = start_mock_server("");
+ die "Cannot start or find the started CMP mock server" unless $pid;
+ }
+ }
+ foreach my $aspect (@all_aspects) {
+ $aspect = chop_dblquot($aspect);
+ next if $server_name eq "Mock" && $aspect eq "certstatus";
+ load_config($server_name, $aspect); # update with any aspect-specific settings
+ indir $server_name => sub {
+ my $tests = load_tests($server_name, $aspect);
+ test_cmp_http_aspect($server_name, $aspect, $tests);
+ };
+ };
+ stop_mock_server($pid) if $pid;
+ ok(1, "killing mock server");
+ }
+ }
+ };
+};
+
+close($faillog) if $faillog;
+
+sub load_tests {
+ my $server_name = shift;
+ my $aspect = shift;
+ my $test_config = $ENV{OPENSSL_CMP_CONFIG} // "$server_name/test.cnf";
+ my $file = data_file("test_$aspect.csv");
+ my $result_dir = result_dir();
+ my @result;
+
+ open(my $data, '<', $file) || die "Cannot open $file for reading: $!";
+ LOOP:
+ while (my $line = <$data>) {
+ chomp $line;
+ $line =~ s{\r\n}{\n}g; # adjust line endings
+ $line =~ s{_CA_DN}{$ca_dn}g;
+ $line =~ s{_SERVER_DN}{$server_dn}g;
+ $line =~ s{_SERVER_HOST}{$server_host}g;
+ $line =~ s{_SERVER_PORT}{$server_port}g;
+ $line =~ s{_SERVER_TLS}{$server_tls}g;
+ $line =~ s{_SERVER_PATH}{$server_path}g;
+ $line =~ s{_SERVER_CERT}{$server_cert}g;
+ $line =~ s{_KUR_PORT}{$kur_port}g;
+ $line =~ s{_PBM_PORT}{$pbm_port}g;
+ $line =~ s{_PBM_REF}{$pbm_ref}g;
+ $line =~ s{_PBM_SECRET}{$pbm_secret}g;
+ $line =~ s{_RESULT_DIR}{$result_dir}g;
+
+ next LOOP if $server_tls == 0 && $line =~ m/,\s*-tls_used\s*,/;
+ my $noproxy = $no_proxy;
+ if ($line =~ m/,\s*-no_proxy\s*,(.*?)(,|$)/) {
+ $noproxy = $1;
+ } elsif ($server_host eq "127.0.0.1") {
+ # do connections to localhost (e.g., Mock server) without proxy
+ $line =~ s{-section,,}{-section,,-no_proxy,127.0.0.1,} ;
+ }
+ if ($line =~ m/,\s*-proxy\s*,/) {
+ next LOOP if $no_proxy && ($noproxy =~ $server_host);
+ } else {
+ $line =~ s{-section,,}{-section,,-proxy,$proxy,};
+ }
+ $line =~ s{-section,,}{-section,,-certout,$result_dir/test.cert.pem,};
+ $line =~ s{-section,,}{-config,../$test_config,-section,$server_name $aspect,};
+
+ my @fields = grep /\S/, split ",", $line;
+ s/^<EMPTY>$// for (@fields); # used for proxy=""
+ s/^\s+// for (@fields); # remove leading whitespace from elements
+ s/\s+$// for (@fields); # remove trailing whitespace from elements
+ s/^\"(\".*?\")\"$/$1/ for (@fields); # remove escaping from quotation marks from elements
+ my $expected_result = $fields[$column];
+ my $description = 1;
+ my $title = $fields[$description];
+ next LOOP if (!defined($expected_result)
+ || ($expected_result ne 0 && $expected_result ne 1));
+ @fields = grep {$_ ne 'BLANK'} @fields[$description + 1 .. @fields - 1];
+ push @result, [$title, \@fields, $expected_result];
+ }
+ close($data);
+ return \@result;
+}
+
+sub start_mock_server {
+ my $args = $_[0]; # optional further CLI arguments
+ my $cmd = cmdstr(app([@app, '-config', 'server.cnf',
+ $args ? $args : ()]), display => 1);
+ print "Current directory is ".getcwd()."\n";
+ print "Launching mock server: $cmd\n";
+ die "Invalid port: $server_port" unless $server_port =~ m/^\d+$/;
+ my $pid = open($server_fh, "$cmd|") or die "Trying to $cmd";
+ print "Pid is: $pid\n";
+ if ($server_port == 0) {
+ # Find out the actual server port
+ while (<$server_fh>) {
+ print "Server output: $_";
+ next if m/using section/;
+ s/\R$//; # Better chomp
+ ($server_port, $pid) = ($1, $2) if /^ACCEPT\s.*:(\d+) PID=(\d+)$/;
+ last; # Do not loop further to prevent hangs on server misbehavior
+ }
+ }
+ unless ($server_port > 0) {
+ stop_mock_server($pid);
+ return 0;
+ }
+ $server_tls = $kur_port = $pbm_port = $server_port;
+ return $pid;
+}
+
+sub stop_mock_server {
+ my $pid = $_[0];
+ print "Killing mock server with pid=$pid\n";
+ kill('KILL', $pid);
+ waitpid($pid, 0);
+}
diff --git a/test/recipes/80-test_cmp_http_data/Mock/12345.txt b/test/recipes/80-test_cmp_http_data/Mock/12345.txt
new file mode 100644
index 000000000000..e56e15bb7ddb
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/12345.txt
@@ -0,0 +1 @@
+12345
diff --git a/test/recipes/80-test_cmp_http_data/Mock/big_issuing.crt b/test/recipes/80-test_cmp_http_data/Mock/big_issuing.crt
new file mode 100644
index 000000000000..e96f3cf78802
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/big_issuing.crt
@@ -0,0 +1,1577 @@
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = subinterCA
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAmygAwIBAgIJAJkv2OGshkmUMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMTB2ludGVyQ0EwHhcNMTUwNzAyMTMxODIz
+WhcNMzUwNzAyMTMxODIzWjBaMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1T
+dGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQD
+EwpzdWJpbnRlckNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/zQj
+vhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb2ARVkYZP5e9gHb04wPVz
+2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1nJeSv3na8gyOoCheG64kW
+VbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/CpdCHE3DKAzAiri3GVc90
+OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMywtz4hhY/XZTvdEn290aL
+857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRFHONWZG1T4mRY1Drh6VbJ
+Gb+0GNIldNLQqigkfwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBTp
+Z30QdMGarrhMPwk+HHAV3R8aTzAfBgNVHSMEGDAWgBQY+tYjuY9dXRN9Po+okcfZ
+YcAXLjANBgkqhkiG9w0BAQsFAAOCAQEAgVUsOf9rdHlQDw4clP8GMY7QahfXbvd8
+8o++P18KeInQXH6+sCg0axZXzhOmKwn+Ina3EsOP7xk4aKIYwJ4A1xBuT7fKxquQ
+pbJyjkEBsNRVLC9t4gOA0FC791v5bOCZjyff5uN+hy8r0828nVxha6CKLqwrPd+E
+mC7DtilSZIgO2vwbTBL6ifmw9n1dd/Bl8Wdjnl7YJqTIf0Ozc2SZSMRUq9ryn4Wq
+YrjRl8NwioGb1LfjEJ0wJi2ngL3IgaN94qmDn10OJs8hlsufwP1n+Bca3fsl0m5U
+gUMG+CXxbF0kdCKZ9kQb1MJE4vOk6zfyBGQndmQnxHjt5botI/xpXg==
+-----END CERTIFICATE-----
+
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = interCA
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAmigAwIBAgIJANnoWlLlEsTgMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE3MDVa
+Fw0zNTA3MDIxMzE3MDVaMFcxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0
+YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMT
+B2ludGVyQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7s0ejvpQO
+nvfwD+e4R+9WQovtrsqOTw8khiREqi5JlmAFbpDEFam18npRkt6gOcGMnjuFzuz6
+iEuQmeeyh0BqWAwpMgWMMteEzLOAaqkEl//J2+WgRbA/8pmwHfbPW/d+f3bp64Fo
+D1hQAenBzXmLxVohEQ9BA+xEDRkL/cA3Y+k/O1C9ORhSQrJNsB9aE3zKbFHd9mOm
+H4aNSsF8On3SqlRVOCQine5c6ACSd0HUEjYy9aObqY47ySNULbzVq5y6VOjMs0W+
+2G/XqrcVkxzf9bVqyVBrrAJrnb35/y/iK0zWgJBP+HXhwr5mMTvNuEirBeVYuz+6
+hUerUbuJhr0FAgMBAAGjUDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFBj61iO5
+j11dE30+j6iRx9lhwBcuMB8GA1UdIwQYMBaAFIVWiTXinwAa4YYDC0uvdhJrM239
+MA0GCSqGSIb3DQEBCwUAA4IBAQDAU0MvL/yZpmibhxUsoSsa97UJbejn5IbxpPzZ
+4WHw8lsoUGs12ZHzQJ9LxkZVeuccFXy9yFEHW56GTlkBmD2qrddlmQCfQ3m8jtZ9
+Hh5feKAyrqfmfsWF5QPjAmdj/MFdq+yMJVosDftkmUmaBHjzbvbcq1sWh/6drH8U
+7pdYRpfeEY8dHSU6FHwVN/H8VaBB7vYYc2wXwtk8On7z2ocIVHn9RPkcLwmwJjb/
+e4jmcYiyZev22KXQudeHc4w6crWiEFkVspomn5PqDmza3rkdB3baXFVZ6sd23ufU
+wjkiKKtwRBwU+5tCCagQZoeQ5dZXQThkiH2XEIOCOLxyD/tb
+-----END CERTIFICATE-----
+
+
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/big_root.crt b/test/recipes/80-test_cmp_http_data/Mock/big_root.crt
new file mode 100644
index 000000000000..6f0124cc2f3c
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/big_root.crt
@@ -0,0 +1,1554 @@
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = rootCA
+-----BEGIN CERTIFICATE-----
+MIIDfzCCAmegAwIBAgIJAIhDKcvC6xWaMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE1MTFa
+Fw0zNTA3MDIxMzE1MTFaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0
+YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMM
+BnJvb3RDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMDxa3eIrDXf
++3NTL5KAL3QWMk31ECBvbDqO0dxr4S4+wwQPv5vEyRLR5AtFl+UGzWY64eDiK9+i
+xOx70z08iv9edKCrpwNqFlteksR+W3mKadS8g16uQpJ0pSvnAMGp3NWxUwcPc/eO
+rRQ+JZ7lHubMkc2VDIBEIMP9F8+RPWMQHBRb+8OowYiyd/+c2/xqRERE94XsCCzU
+34Gjecn+HpuTFlO3l6u+Txql4vpGBeQNnCqkzLkeIaBsxKtZsEA5u/mIrf3fjbQL
+r35B4CE8yDNFSYQvkwbu/U/tT/O8m978JV5V1XXUxXs6QDUGn8SEtGyTDK83Wq+2
+QU0mIxy4ArMCAwEAAaNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUhVaJNeKf
+ABrhhgMLS692Emszbf0wHwYDVR0jBBgwFoAUhVaJNeKfABrhhgMLS692Emszbf0w
+DQYJKoZIhvcNAQELBQADggEBADIKvyoK4rtPQ86I2lo5EDeAuzctXi2I3SZpnOe0
+mCCxJeZhWW0S7JuHvlfhEgXFBPEXzhS4HJLUlZUsWyiJ+3KcINMygaiF7MgIe6hZ
+WzpsMatS4mbNFElc89M+YryRFrQc9d1Uqjxhl3ms5MhDNcMP/PNwHa/wnIoqkpNI
+qtDoR741wcZ7bdr6XVdF8+pBjzbBPPRSf24x3bqavHBWcTjcSVcM/ZEXxeqH5SN0
+GbK2mQxrogX4UWjtl+DfYvl+ejpEcYNXKEmIabUUHtpG42544cuPtZizLW5bt/aT
+JBQfpPZpvf9MUlACxUONFOLQdZ8SXpSJ0e93iX2J2Z52mSQ=
+-----END CERTIFICATE-----
+
+
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/big_server.crt b/test/recipes/80-test_cmp_http_data/Mock/big_server.crt
new file mode 100644
index 000000000000..82e46310fcd5
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/big_server.crt
@@ -0,0 +1,1550 @@
+ Subject: O = openssl_cmp
+ Issuer: O = openssl_cmp
+-----BEGIN CERTIFICATE-----
+MIICpTCCAY2gAwIBAgIBATANBgkqhkiG9w0BAQUFADAWMRQwEgYDVQQKDAtvcGVu
+c3NsX2NtcDAeFw0xNzEyMjAxMzA0MDBaFw0xODEyMjAxMzA0MDBaMBYxFDASBgNV
+BAoMC29wZW5zc2xfY21wMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZAJHnq0ypW/PZccrWj
+o7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVVpLicMnItNFElfCoh
+BzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuWq/vWW9r96/gBKKdd
+mj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SOZf9bH1olBVsmBMsU
+shFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6GvZ/i5KOhaqgJCnRKd
+HHzijz9cLec5p9NSOuC1OwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQDGUXpFCBkV
+WgPrBfZyBwt6VCjWB/e67q4IdcKMfDa4hwSquah1AyXHI0PlC/qitnoSx2+7f7pY
+TEOay/3eEPUl1J5tdPF2Vg56Dw8jdhSkMwO7bXKDEE3R6o6jaa4ECgxwQtdGHmNU
+A41PgKX76yEXku803ptO39/UR7i7Ye3MbyAmWE+PvixJYUbxd3fqz5fsaJqTCzAy
+AT9hrr4uu8J7m3LYaYXo4LVL4jw5UsP5bIYtpmmEBfy9GhpUqH5/LzBNij7y3ziE
+T59wHkzawAQDHsBPuCe07DFtlzqWWvaih0TQAw9MZ2tbyK9jt7P80Rqt9CwpM/i9
+jQYqSl/ix5hn
+-----END CERTIFICATE-----
+
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/big_trusted.crt b/test/recipes/80-test_cmp_http_data/Mock/big_trusted.crt
new file mode 100644
index 000000000000..3bd3458e10e8
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/big_trusted.crt
@@ -0,0 +1,1552 @@
+ Subject: O = openssl_cmp
+ Issuer: O = openssl_cmp
+-----BEGIN CERTIFICATE-----
+MIICpTCCAY2gAwIBAgIBATANBgkqhkiG9w0BAQUFADAWMRQwEgYDVQQKDAtvcGVu
+c3NsX2NtcDAeFw0xNzEyMjAxMzA0MDBaFw0xODEyMjAxMzA0MDBaMBYxFDASBgNV
+BAoMC29wZW5zc2xfY21wMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZAJHnq0ypW/PZccrWj
+o7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVVpLicMnItNFElfCoh
+BzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuWq/vWW9r96/gBKKdd
+mj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SOZf9bH1olBVsmBMsU
+shFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6GvZ/i5KOhaqgJCnRKd
+HHzijz9cLec5p9NSOuC1OwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQDGUXpFCBkV
+WgPrBfZyBwt6VCjWB/e67q4IdcKMfDa4hwSquah1AyXHI0PlC/qitnoSx2+7f7pY
+TEOay/3eEPUl1J5tdPF2Vg56Dw8jdhSkMwO7bXKDEE3R6o6jaa4ECgxwQtdGHmNU
+A41PgKX76yEXku803ptO39/UR7i7Ye3MbyAmWE+PvixJYUbxd3fqz5fsaJqTCzAy
+AT9hrr4uu8J7m3LYaYXo4LVL4jw5UsP5bIYtpmmEBfy9GhpUqH5/LzBNij7y3ziE
+T59wHkzawAQDHsBPuCe07DFtlzqWWvaih0TQAw9MZ2tbyK9jt7P80Rqt9CwpM/i9
+jQYqSl/ix5hn
+-----END CERTIFICATE-----
+
+
+
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIcFzCCG4CgAwIBAgIGR09PUAFxMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNVBAYT
+AlVTMRMwEQYDVQQKEwpHb29nbGUgSW5jMSIwIAYDVQQDExlHb29nbGUgSW50ZXJu
+ZXQgQXV0aG9yaXR5MB4XDTEyMTAyNDEzNTczOVoXDTEzMDYwNzE5NDMyN1owZDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50
+YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxEzARBgNVBAMTCmdvb2dsZS5j
+b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMNn/Rw5irMPscWpYsExcGQT
+wqdxT/U9Pfybt9ttPYlXVbCd6yux0jWGNBHN+f4kCc5pwrbjmA4QSRY2uVa4T8f2
+g3NucDDveUi29WVN+FJcyhj+V38lEkYbdhpIZL149dK5fAN1zzwCo10Nk+lhebcY
+fCtMHLmuCX2D6mJ2CnPVAgMBAAGjghnwMIIZ7DAMBgNVHRMBAf8EAjAAMB0GA1Ud
+JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU0Qp1w0hi4nhbaJEB
+h/wuZwO4OyIwHwYDVR0jBBgwFoAUv8Aw6/VDET5nup6R+/xq2uNrEiQwWwYDVR0f
+BFQwUjBQoE6gTIZKaHR0cDovL3d3dy5nc3RhdGljLmNvbS9Hb29nbGVJbnRlcm5l
+dEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS5jcmwwZgYIKwYBBQUH
+AQEEWjBYMFYGCCsGAQUFBzAChkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2ds
+ZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNydDCC
+GLYGA1UdEQSCGK0wghipggpnb29nbGUuY29tggwqLmdvb2dsZS5jb22CDSoueW91
+dHViZS5jb22CC3lvdXR1YmUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tggh5
+b3V0dS5iZYILKi55dGltZy5jb22CDSouYW5kcm9pZC5jb22CC2FuZHJvaWQuY29t
+ghQqLmdvb2dsZWNvbW1lcmNlLmNvbYISZ29vZ2xlY29tbWVyY2UuY29tghAqLnVy
+bC5nb29nbGUuY29tggwqLnVyY2hpbi5jb22CCnVyY2hpbi5jb22CFiouZ29vZ2xl
+LWFuYWx5dGljcy5jb22CFGdvb2dsZS1hbmFseXRpY3MuY29tghIqLmNsb3VkLmdv
+b2dsZS5jb22CBmdvby5nbIIEZy5jb4INKi5nc3RhdGljLmNvbYIPKi5nb29nbGVh
+cGlzLmNughYqLmFwcGVuZ2luZS5nb29nbGUuY29tggsqLmdvb2dsZS5hY4ILKi5n
+b29nbGUuYWSCCyouZ29vZ2xlLmFlggsqLmdvb2dsZS5hZoILKi5nb29nbGUuYWeC
+CyouZ29vZ2xlLmFsggsqLmdvb2dsZS5hbYILKi5nb29nbGUuYXOCCyouZ29vZ2xl
+LmF0ggsqLmdvb2dsZS5heoILKi5nb29nbGUuYmGCCyouZ29vZ2xlLmJlggsqLmdv
+b2dsZS5iZoILKi5nb29nbGUuYmeCCyouZ29vZ2xlLmJpggsqLmdvb2dsZS5iaoIL
+Ki5nb29nbGUuYnOCCyouZ29vZ2xlLmJ5ggsqLmdvb2dsZS5jYYIMKi5nb29nbGUu
+Y2F0ggsqLmdvb2dsZS5jY4ILKi5nb29nbGUuY2SCCyouZ29vZ2xlLmNmggsqLmdv
+b2dsZS5jZ4ILKi5nb29nbGUuY2iCCyouZ29vZ2xlLmNpggsqLmdvb2dsZS5jbIIL
+Ki5nb29nbGUuY22CCyouZ29vZ2xlLmNugg4qLmdvb2dsZS5jby5hb4IOKi5nb29n
+bGUuY28uYneCDiouZ29vZ2xlLmNvLmNrgg4qLmdvb2dsZS5jby5jcoIOKi5nb29n
+bGUuY28uaHWCDiouZ29vZ2xlLmNvLmlkgg4qLmdvb2dsZS5jby5pbIIOKi5nb29n
+bGUuY28uaW2CDiouZ29vZ2xlLmNvLmlugg4qLmdvb2dsZS5jby5qZYIOKi5nb29n
+bGUuY28uanCCDiouZ29vZ2xlLmNvLmtlgg4qLmdvb2dsZS5jby5rcoIOKi5nb29n
+bGUuY28ubHOCDiouZ29vZ2xlLmNvLm1hgg4qLmdvb2dsZS5jby5teoIOKi5nb29n
+bGUuY28ubnqCDiouZ29vZ2xlLmNvLnRogg4qLmdvb2dsZS5jby50eoIOKi5nb29n
+bGUuY28udWeCDiouZ29vZ2xlLmNvLnVrgg4qLmdvb2dsZS5jby51eoIOKi5nb29n
+bGUuY28udmWCDiouZ29vZ2xlLmNvLnZpgg4qLmdvb2dsZS5jby56YYIOKi5nb29n
+bGUuY28uem2CDiouZ29vZ2xlLmNvLnp3gg8qLmdvb2dsZS5jb20uYWaCDyouZ29v
+Z2xlLmNvbS5hZ4IPKi5nb29nbGUuY29tLmFpgg8qLmdvb2dsZS5jb20uYXKCDyou
+Z29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJkgg8qLmdvb2dsZS5jb20uYmiC
+DyouZ29vZ2xlLmNvbS5iboIPKi5nb29nbGUuY29tLmJvgg8qLmdvb2dsZS5jb20u
+YnKCDyouZ29vZ2xlLmNvbS5ieYIPKi5nb29nbGUuY29tLmJ6gg8qLmdvb2dsZS5j
+b20uY26CDyouZ29vZ2xlLmNvbS5jb4IPKi5nb29nbGUuY29tLmN1gg8qLmdvb2ds
+ZS5jb20uY3mCDyouZ29vZ2xlLmNvbS5kb4IPKi5nb29nbGUuY29tLmVjgg8qLmdv
+b2dsZS5jb20uZWeCDyouZ29vZ2xlLmNvbS5ldIIPKi5nb29nbGUuY29tLmZqgg8q
+Lmdvb2dsZS5jb20uZ2WCDyouZ29vZ2xlLmNvbS5naIIPKi5nb29nbGUuY29tLmdp
+gg8qLmdvb2dsZS5jb20uZ3KCDyouZ29vZ2xlLmNvbS5ndIIPKi5nb29nbGUuY29t
+Lmhrgg8qLmdvb2dsZS5jb20uaXGCDyouZ29vZ2xlLmNvbS5qbYIPKi5nb29nbGUu
+Y29tLmpvgg8qLmdvb2dsZS5jb20ua2iCDyouZ29vZ2xlLmNvbS5rd4IPKi5nb29n
+bGUuY29tLmxigg8qLmdvb2dsZS5jb20ubHmCDyouZ29vZ2xlLmNvbS5tdIIPKi5n
+b29nbGUuY29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIP
+Ki5nb29nbGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5u
+aYIPKi5nb29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNv
+bS5vbYIPKi5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xl
+LmNvbS5waIIPKi5nb29nbGUuY29tLnBrgg8qLmdvb2dsZS5jb20ucGyCDyouZ29v
+Z2xlLmNvbS5wcoIPKi5nb29nbGUuY29tLnB5gg8qLmdvb2dsZS5jb20ucWGCDyou
+Z29vZ2xlLmNvbS5ydYIPKi5nb29nbGUuY29tLnNhgg8qLmdvb2dsZS5jb20uc2KC
+DyouZ29vZ2xlLmNvbS5zZ4IPKi5nb29nbGUuY29tLnNsgg8qLmdvb2dsZS5jb20u
+c3aCDyouZ29vZ2xlLmNvbS50aoIPKi5nb29nbGUuY29tLnRugg8qLmdvb2dsZS5j
+b20udHKCDyouZ29vZ2xlLmNvbS50d4IPKi5nb29nbGUuY29tLnVhgg8qLmdvb2ds
+ZS5jb20udXmCDyouZ29vZ2xlLmNvbS52Y4IPKi5nb29nbGUuY29tLnZlgg8qLmdv
+b2dsZS5jb20udm6CCyouZ29vZ2xlLmN2ggsqLmdvb2dsZS5jeoILKi5nb29nbGUu
+ZGWCCyouZ29vZ2xlLmRqggsqLmdvb2dsZS5ka4ILKi5nb29nbGUuZG2CCyouZ29v
+Z2xlLmR6ggsqLmdvb2dsZS5lZYILKi5nb29nbGUuZXOCCyouZ29vZ2xlLmZpggsq
+Lmdvb2dsZS5mbYILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmdhggsqLmdvb2dsZS5n
+ZYILKi5nb29nbGUuZ2eCCyouZ29vZ2xlLmdsggsqLmdvb2dsZS5nbYILKi5nb29n
+bGUuZ3CCCyouZ29vZ2xlLmdyggsqLmdvb2dsZS5neYILKi5nb29nbGUuaGuCCyou
+Z29vZ2xlLmhuggsqLmdvb2dsZS5ocoILKi5nb29nbGUuaHSCCyouZ29vZ2xlLmh1
+ggsqLmdvb2dsZS5pZYILKi5nb29nbGUuaW2CDSouZ29vZ2xlLmluZm+CCyouZ29v
+Z2xlLmlxggsqLmdvb2dsZS5pc4ILKi5nb29nbGUuaXSCDiouZ29vZ2xlLml0LmFv
+ggsqLmdvb2dsZS5qZYILKi5nb29nbGUuam+CDSouZ29vZ2xlLmpvYnOCCyouZ29v
+Z2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5nb29nbGUua2mCCyouZ29vZ2xlLmt6ggsq
+Lmdvb2dsZS5sYYILKi5nb29nbGUubGmCCyouZ29vZ2xlLmxrggsqLmdvb2dsZS5s
+dIILKi5nb29nbGUubHWCCyouZ29vZ2xlLmx2ggsqLmdvb2dsZS5tZIILKi5nb29n
+bGUubWWCCyouZ29vZ2xlLm1nggsqLmdvb2dsZS5ta4ILKi5nb29nbGUubWyCCyou
+Z29vZ2xlLm1uggsqLmdvb2dsZS5tc4ILKi5nb29nbGUubXWCCyouZ29vZ2xlLm12
+ggsqLmdvb2dsZS5td4ILKi5nb29nbGUubmWCDiouZ29vZ2xlLm5lLmpwggwqLmdv
+b2dsZS5uZXSCCyouZ29vZ2xlLm5sggsqLmdvb2dsZS5ub4ILKi5nb29nbGUubnKC
+CyouZ29vZ2xlLm51gg8qLmdvb2dsZS5vZmYuYWmCCyouZ29vZ2xlLnBrggsqLmdv
+b2dsZS5wbIILKi5nb29nbGUucG6CCyouZ29vZ2xlLnBzggsqLmdvb2dsZS5wdIIL
+Ki5nb29nbGUucm+CCyouZ29vZ2xlLnJzggsqLmdvb2dsZS5ydYILKi5nb29nbGUu
+cneCCyouZ29vZ2xlLnNjggsqLmdvb2dsZS5zZYILKi5nb29nbGUuc2iCCyouZ29v
+Z2xlLnNpggsqLmdvb2dsZS5za4ILKi5nb29nbGUuc22CCyouZ29vZ2xlLnNuggsq
+Lmdvb2dsZS5zb4ILKi5nb29nbGUuc3SCCyouZ29vZ2xlLnRkggsqLmdvb2dsZS50
+Z4ILKi5nb29nbGUudGuCCyouZ29vZ2xlLnRsggsqLmdvb2dsZS50bYILKi5nb29n
+bGUudG6CCyouZ29vZ2xlLnRvggsqLmdvb2dsZS50cIILKi5nb29nbGUudHSCCyou
+Z29vZ2xlLnVzggsqLmdvb2dsZS51eoILKi5nb29nbGUudmeCCyouZ29vZ2xlLnZ1
+ggsqLmdvb2dsZS53c4IJZ29vZ2xlLmFjgglnb29nbGUuYWSCCWdvb2dsZS5hZYIJ
+Z29vZ2xlLmFmgglnb29nbGUuYWeCCWdvb2dsZS5hbIIJZ29vZ2xlLmFtgglnb29n
+bGUuYXOCCWdvb2dsZS5hdIIJZ29vZ2xlLmF6gglnb29nbGUuYmGCCWdvb2dsZS5i
+ZYIJZ29vZ2xlLmJmgglnb29nbGUuYmeCCWdvb2dsZS5iaYIJZ29vZ2xlLmJqggln
+b29nbGUuYnOCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29nbGUuY2F0gglnb29n
+bGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUuY2eCCWdvb2dsZS5j
+aIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJZ29vZ2xlLmNuggxn
+b29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNvLmNrggxnb29nbGUu
+Y28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxnb29nbGUuY28uaWyC
+DGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUuY28uamWCDGdvb2ds
+ZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KCDGdvb2dsZS5jby5s
+c4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2dsZS5jby5ueoIMZ29v
+Z2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51Z4IMZ29vZ2xlLmNv
+LnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29vZ2xlLmNvLnZpggxn
+b29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNvLnp3gg1nb29nbGUu
+Y29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFpgg1nb29nbGUuY29t
+LmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1nb29nbGUuY29tLmJo
+gg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29nbGUuY29tLmJygg1n
+b29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUuY29tLmNugg1nb29n
+bGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29tLmN5gg1nb29nbGUu
+Y29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVngg1nb29nbGUuY29t
+LmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1nb29nbGUuY29tLmdo
+gg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29nbGUuY29tLmd0gg1n
+b29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUuY29tLmptgg1nb29n
+bGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29tLmt3gg1nb29nbGUu
+Y29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29t
+Lm14gg1nb29nbGUuY29tLm15gg1nb29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5m
+gg1nb29nbGUuY29tLm5ngg1nb29nbGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1n
+b29nbGUuY29tLm5ygg1nb29nbGUuY29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29n
+bGUuY29tLnBlgg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUu
+Y29tLnBsgg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29t
+LnFhgg1nb29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNi
+gg1nb29nbGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1n
+b29nbGUuY29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29n
+bGUuY29tLnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUu
+Y29tLnZjgg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aC
+CWdvb2dsZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29v
+Z2xlLmRtgglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUu
+ZmmCCWdvb2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJ
+Z29vZ2xlLmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29n
+bGUuZ3KCCWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5o
+coIJZ29vZ2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtn
+b29nbGUuaW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXOCCWdvb2dsZS5pdIIMZ29v
+Z2xlLml0LmFvgglnb29nbGUuamWCCWdvb2dsZS5qb4ILZ29vZ2xlLmpvYnOCCWdv
+b2dsZS5qcIIJZ29vZ2xlLmtngglnb29nbGUua2mCCWdvb2dsZS5reoIJZ29vZ2xl
+Lmxhgglnb29nbGUubGmCCWdvb2dsZS5sa4IJZ29vZ2xlLmx0gglnb29nbGUubHWC
+CWdvb2dsZS5sdoIJZ29vZ2xlLm1kgglnb29nbGUubWWCCWdvb2dsZS5tZ4IJZ29v
+Z2xlLm1rgglnb29nbGUubWyCCWdvb2dsZS5tboIJZ29vZ2xlLm1zgglnb29nbGUu
+bXWCCWdvb2dsZS5tdoIJZ29vZ2xlLm13gglnb29nbGUubmWCDGdvb2dsZS5uZS5q
+cIIKZ29vZ2xlLm5ldIIJZ29vZ2xlLm5sgglnb29nbGUubm+CCWdvb2dsZS5ucoIJ
+Z29vZ2xlLm51gg1nb29nbGUub2ZmLmFpgglnb29nbGUucGuCCWdvb2dsZS5wbIIJ
+Z29vZ2xlLnBugglnb29nbGUucHOCCWdvb2dsZS5wdIIJZ29vZ2xlLnJvgglnb29n
+bGUucnOCCWdvb2dsZS5ydYIJZ29vZ2xlLnJ3gglnb29nbGUuc2OCCWdvb2dsZS5z
+ZYIJZ29vZ2xlLnNogglnb29nbGUuc2mCCWdvb2dsZS5za4IJZ29vZ2xlLnNtggln
+b29nbGUuc26CCWdvb2dsZS5zb4IJZ29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2ds
+ZS50Z4IJZ29vZ2xlLnRrgglnb29nbGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRu
+gglnb29nbGUudG+CCWdvb2dsZS50cIIJZ29vZ2xlLnR0gglnb29nbGUudXOCCWdv
+b2dsZS51eoIJZ29vZ2xlLnZngglnb29nbGUudnWCCWdvb2dsZS53czANBgkqhkiG
+9w0BAQUFAAOBgQCROJdKT00d96BpNG4j3Xf5Kz7kJENMTYtgsGQW5E6y2yjRaguD
+LPO+y4IH9KiVXD+qO8koye9yOMNawN9r/DFQd+t2nDmvlpcwJBNguiuqxl+rJaU8
+KKgswikGaaM4z+i4vHuXcCKZtM/ELAaJlSaBPip4GBAkgv7D9hwh+sWvYA==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/csr.pem b/test/recipes/80-test_cmp_http_data/Mock/csr.pem
new file mode 100644
index 000000000000..f8591522b0f5
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/csr.pem
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIICszCCAZ0CAQAwVDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUx
+ITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDENMAsGA1UEAxMEbGVh
+ZjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9EKPVgvwSgO9C7UCXc
+FRkl6q/Xbrd3EJohc02/0mlpXYzk9bETQxcUs3UyY1P/HCAxGb2kyMEcT/3bVUC4
+3PuI861MM/dzbmWJbBFlBFIOC6537NDc+dMh5OKyYVcVo2/CIv8EQVYlhxRMT+ws
+E5F4k3JQtWwqk7lpI8Rd7YU307LbUcmO6jZM9iaTcdILg/L+KLUKGIwOQBGbyuCF
+y8DsMaJecQUzLyK77339pJIfnOzgtkFW1E6MP6KaY6iCgsdpmjRwrSxUyRC3938L
+USSybMuHyhj9P+pKWXPEqfPFiuAeBWrhfSFdQpqACVAtbycYWoByCn1bRY1FrPBj
+6G0CAwEAAaAcMBoGCSqGSIb3DQEJDjENMAswCQYDVR0TBAIwADALBgkqhkiG9w0B
+AQsDggEBAK7GB08OLpPGY2QWJ++vZhqbFZAO4Y3/PsfnzKjM7OFyA6lJafqGXjmO
+U+R63oHAJYhThKrpo4X91YTUgL8HI8eicM+vn3HQDRw2DKgoQcpTk9y3Hqj4YEhA
+gRLzvd4Pe7kowVtNKzqjQA2WcerZC+5XEYd88JisB1Vxijm7KmYsmili3MbR3row
+idelrt6UfyH23ytfurZvOOvawpm3Z8bilh6SY1WNSlRKwSntY9DOw8izTiimGlru
+A+TwtQ5zObWfxB5oLQib13ttCh+0rZ7zAy35txFkiOAmUUYIyng6A8zsE4RO2RCa
+BYjeQvaCjBl0fn24JCWKxuT7xtkCzXc=
+-----END CERTIFICATE REQUEST-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/empty.txt b/test/recipes/80-test_cmp_http_data/Mock/empty.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/empty.txt
diff --git a/test/recipes/80-test_cmp_http_data/Mock/issuing.crt b/test/recipes/80-test_cmp_http_data/Mock/issuing.crt
new file mode 100644
index 000000000000..1ec7377481ae
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/issuing.crt
@@ -0,0 +1,22 @@
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = subinterCA
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAmygAwIBAgIJAJkv2OGshkmUMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMTB2ludGVyQ0EwHhcNMTUwNzAyMTMxODIz
+WhcNMzUwNzAyMTMxODIzWjBaMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1T
+dGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQD
+EwpzdWJpbnRlckNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/zQj
+vhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb2ARVkYZP5e9gHb04wPVz
+2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1nJeSv3na8gyOoCheG64kW
+VbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/CpdCHE3DKAzAiri3GVc90
+OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMywtz4hhY/XZTvdEn290aL
+857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRFHONWZG1T4mRY1Drh6VbJ
+Gb+0GNIldNLQqigkfwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBTp
+Z30QdMGarrhMPwk+HHAV3R8aTzAfBgNVHSMEGDAWgBQY+tYjuY9dXRN9Po+okcfZ
+YcAXLjANBgkqhkiG9w0BAQsFAAOCAQEAgVUsOf9rdHlQDw4clP8GMY7QahfXbvd8
+8o++P18KeInQXH6+sCg0axZXzhOmKwn+Ina3EsOP7xk4aKIYwJ4A1xBuT7fKxquQ
+pbJyjkEBsNRVLC9t4gOA0FC791v5bOCZjyff5uN+hy8r0828nVxha6CKLqwrPd+E
+mC7DtilSZIgO2vwbTBL6ifmw9n1dd/Bl8Wdjnl7YJqTIf0Ozc2SZSMRUq9ryn4Wq
+YrjRl8NwioGb1LfjEJ0wJi2ngL3IgaN94qmDn10OJs8hlsufwP1n+Bca3fsl0m5U
+gUMG+CXxbF0kdCKZ9kQb1MJE4vOk6zfyBGQndmQnxHjt5botI/xpXg==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/issuing_expired.crt b/test/recipes/80-test_cmp_http_data/Mock/issuing_expired.crt
new file mode 100644
index 000000000000..c2168edda06e
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/issuing_expired.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDjzCCAnegAwIBAgIUdQqeLAGVa/bud7qeTcfwfhpeKdQwDQYJKoZIhvcNAQEL
+BQAwVzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoT
+GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEQMA4GA1UEAxMHaW50ZXJDQTAeFw0y
+MzAxMjcxNzUyMzhaFw0yMzAxMjYxNzUyMzhaMFoxCzAJBgNVBAYTAkFVMRMwEQYD
+VQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBM
+dGQxEzARBgNVBAMMCnN1YmludGVyQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQD/NCO+FtTtFYOxFoSRVQFlZH8+pnj0agT2nc7JE3imS3VzXJvYBFWR
+hk/l72AdvTjA9XPb4VjL7aY2SX64BltwrnDl9Y7dYkgSfnuF7gyRa7d7DWcl5K/e
+dryDI6gKF4briRZVsDZgv3aZHtChIKjhI/tGbKQuvCPpOUPGqAfoPEpIP8Kl0IcT
+cMoDMCKuLcZVz3Q4kCzNgeWN7j+ZpUg5rIZE5URPfFrlxu1EmXwgGCaqEzLC3PiG
+Fj9dlO90Sfb3RovznseTsmOiADuYsqLTvIrOSczEdX6TolfvEkS22Rw1BEUc41Zk
+bVPiZFjUOuHpVskZv7QY0iV00tCqKCR/AgMBAAGjUDBOMAwGA1UdEwQFMAMBAf8w
+HQYDVR0OBBYEFOlnfRB0wZquuEw/CT4ccBXdHxpPMB8GA1UdIwQYMBaAFBj61iO5
+j11dE30+j6iRx9lhwBcuMA0GCSqGSIb3DQEBCwUAA4IBAQAb20F/gBkHu8E7Jg1e
+dhRBia9GaXARuKidZ0D9OnT0eYpY4TjpMli21avVJF+eNOBvEGdlVaYdnUKGkyk4
+8mjPq0vZj1ikK2CBprhv08/Lqxt2aDBsGZ14LbP2BAvckiFBDmBcD+AClmnuTIOI
+O/3v5IwQCNQF6duBp3T7RbfY2ACg7TNf405atmfmrJcVOtLNbDYvUhUuK7W9wiRX
+nKnWsrThw7pCTp/ZAOnH5L5/rcoys28hOXm+GAlQaIDsg9NXcNtUJvjaLQTNib7c
+iFCIUsQB7u8+hUJOZR/mIFPgh3M+amCaTTCihQzlUx/aJV3yovw+oVt06esoZBKd
+poqi
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/new.key b/test/recipes/80-test_cmp_http_data/Mock/new.key
new file mode 100644
index 000000000000..a1b1721245b7
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/new.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAv0Qo9WC/BKA70LtQJdwVGSXqr9dut3cQmiFzTb/SaWldjOT1
+sRNDFxSzdTJjU/8cIDEZvaTIwRxP/dtVQLjc+4jzrUwz93NuZYlsEWUEUg4Lrnfs
+0Nz50yHk4rJhVxWjb8Ii/wRBViWHFExP7CwTkXiTclC1bCqTuWkjxF3thTfTsttR
+yY7qNkz2JpNx0guD8v4otQoYjA5AEZvK4IXLwOwxol5xBTMvIrvvff2kkh+c7OC2
+QVbUTow/oppjqIKCx2maNHCtLFTJELf3fwtRJLJsy4fKGP0/6kpZc8Sp88WK4B4F
+auF9IV1CmoAJUC1vJxhagHIKfVtFjUWs8GPobQIDAQABAoIBAB1fCiskQDElqgnT
+uesWcOb7u55lJstlrVb97Ab0fgtR8tvADTq0Colw1F4a7sXnVxpab+l/dJSzFFWX
+aPAXc1ftH/5sxU4qm7lb8Qx6xr8TCRgxslwgkvypJ8zoN6p32DFBTr56mM3x1Vx4
+m41Y92hPa9USL8n8f9LpImT1R5Q9ShI/RUCowPyzhC6OGkFSBJu72nyA3WK0znXn
+q5TNsTRdJLOug7eoJJvhOPfy3neNQV0f2jQ+2wDKCYvn6i4j9FSLgYC/vorqofEd
+vFBHxl374117F6DXdBChyD4CD5vsplB0zcExRUCT5+iBqf5uc8CbLHeyNk6vSaf5
+BljHWsECgYEA93QnlKsVycgCQqHt2q8EIZ5p7ksGYRVfBEzgetsNdpxvSwrLyLQE
+L5AKG3upndOofCeJnLuQF1j954FjCs5Y+8Sy2H1D1EPrHSBp4ig2F5aOxT3vYROd
+v+/mF4ZUzlIlv3jNDz5IoLaxm9vhXTtLLUtQyTueGDmqwlht0Kr3/gcCgYEAxd86
+Q23jT4DmJqUl+g0lWdc2dgej0jwFfJ2BEw/Q55vHjqj96oAX5QQZFOUhZU8Otd/D
+lLzlsFn0pOaSW/RB4l5Kv8ab+ZpxfAV6Gq47nlfzmEGGx4wcoL0xkHufiXg0sqaG
+UtEMSKFhxPQZhWojUimK/+YIF69molxA6G9miOsCgYEA8mICSytxwh55qE74rtXz
+1AJZfKJcc0f9tDahQ3XBsEb29Kh0h/lciEIsxFLTB9dFF6easb0/HL98pQElxHXu
+z14SWOAKSqbka7lOPcppgZ1l52oNSiduw4z28mAQPbBVbUGkiqPVfCa3vhUYoLvt
+nUZCsXoGF3CVBJydpGFzXI0CgYEAtt3Jg72PoM8YZEimI0R462F4xHXlEYtE6tjJ
+C+vG/fU65P4Kw+ijrJQv9d6YEX+RscXdg51bjLJl5OvuAStopCLOZBPR3Ei+bobF
+RNkW4gyYZHLSc6JqZqbSopuNYkeENEKvyuPFvW3f5FxPJbxkbi9UdZCKlBEXAh/O
+IMGregcCgYBC8bS7zk6KNDy8q2uC/m/g6LRMxpb8G4jsrcLoyuJs3zDckBjQuLJQ
+IOMXcQBWN1h+DKekF2ecr3fJAJyEv4pU4Ct2r/ZTYFMdJTyAbjw0mqOjUR4nsdOh
+t/vCbt0QW3HXYTcVdCnFqBtelKnI12KoC0jAO9EAJGZ6kE/NwG6dQg==
+-----END RSA PRIVATE KEY-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/new_pass_12345.key b/test/recipes/80-test_cmp_http_data/Mock/new_pass_12345.key
new file mode 100644
index 000000000000..e1aabfeb79a5
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/new_pass_12345.key
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIuH8X1xWl9ygCAggA
+MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCw27UHDuBtxWa928AXEEb1BIIE
+0A/aH/nMGoifA4TKpLg1SobskugzWV7+N2qh3j9LZrz6GxB9jR64JBx8+eKBu5lv
+VeMp/cIuGZscJ56QFZ01tTEyIiP1eeD68eQol2n7KEwk9DKkR2QbQuLDOaR4voqM
+rm02uehLnNPJ7d81CrgfqIRi5OF4cWVV20jN7pQMxn8KqW4OYPdOrV1i6mTnsbNz
+M5hL9YMud4wppWwA93MLD4TGvQBQSTvreYtLNy1atq1uK4k2KZh2tw/CTNiCo47R
+N6Ft+CDJblikodpj/a6ZPJ84qBMonTbc7IMvkeWP0mnzA25ohOW7RfhgWzz/mfx3
+/ypX8xqLd8JzmdRFOcc5MFdVcYPmgFzFVtEJ0bBZx6WCW+6OszLkt/7p7raRKirA
+/zJJSBmEvQKvwtZ6I/rG6SqMFiTseRuWq0sXa1NX2zlH9y+g68K+7Bt5816l93WD
+p0GQgWxXV2J+QJ3fGvxMdQG7qmGWx6dc6yZkFw9e94sTHH74fShTv53OekCgWg2B
+58pFBTK9NGtiG5LawtDKMqlYcSKvfqjvKwDokQS104DwM+om0QBLTH+RRxh05jYv
+2hx1uwSXoo8oO+AYaYsEQE8z7mYxQr5Ea1gKbtyYPE0Eo5rrH9fYzXN8A1LH7wbL
+ywQIZq/lthuJGarTPCFjoHrPW9O+FiQBLsn5Ej2VVm2MQpS3v6m7SnHTWBaPZvkq
+GEGw/MZiwkzyULsg7zRKfnNhYBfxdg+gmwIR6x1e4vT6hAFjZbvn1eOlFTLqIBpE
+XQCqxaITtW6bCEhvl/c0AKkAWM39XEs/ff1giYza+6SLgLQObHApp+Q/Hk3PaUDq
+Wnm/5w8IyQcGDAik0f6JqbQ+licBk5lHlOifO0GFKqePlKLY/Mvx9al2UflzOydG
+u9BpXx8sLooLuyycXFhgpZZLp19+79KgPm+ZrXKlKKwTDQwuB+eGxr2wKWCbJb2y
+gmnBCtml5apTQx+l630GldMjkhwxOSZJoXy6XKQew85L/J9Jknta3bjGbyL2lEeW
+/gfT+L6WrmG3Hf4xGhpkkx6UITzujJbE2/YyxJ+sXlRuYd4ld0Hfn6Ihsajknj8G
+jvLb77FvgNndf5SXlqU3sMGcOPizQkMr/AmtHPzBLT8O6OxpeAOWzG3jOvznRsmZ
+27nmW4cM/6t/86PvnAssPETFcrC3GqFYWnzdVaWunCz5zn4xIot3633VGR1lbxX4
+kTQLBzgBjKuajgVim5Q4obfaqnJEvHkbJaAFJg0y6uId2RIzYo5/onHrVOQR5ulB
+qyR8YJjWu3pyq8t5q9Iw3L+pWDOh4AH7/ay0IBu/qxapvybqEXyol3kAJIsY0AKZ
+Y5dPA4duWjW0MHNDgliAssKr2t3CTALU9nrBVX1fEPR4Y05JZ9f4OIueu/IGdDIE
+snLdqtkY0sOTma9FhKDv1RwsumT/UfOqUJ3ZSJCaKgE/RnzS3YN+j5BYv788micZ
+S9nl5KX+q/VSVXxial0nxkGiqs73mASF5JP4iarRihSntGMvn4PPB7Oid5SVLrqk
+JFFy7pjL8xuERx0hlShUl2q8/C3DSi0u+QkIhNrUBKZRADzNDkJcfWmKwbhq7HPp
+ghzvaDrFtH/4o8t7kd+TVdKjnS0cna43Sj94w3J5/y5Y
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/new_pub.key b/test/recipes/80-test_cmp_http_data/Mock/new_pub.key
new file mode 100644
index 000000000000..b0e08583eff5
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/new_pub.key
@@ -0,0 +1,9 @@
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv0Qo9WC/BKA70LtQJdwV
+GSXqr9dut3cQmiFzTb/SaWldjOT1sRNDFxSzdTJjU/8cIDEZvaTIwRxP/dtVQLjc
++4jzrUwz93NuZYlsEWUEUg4Lrnfs0Nz50yHk4rJhVxWjb8Ii/wRBViWHFExP7CwT
+kXiTclC1bCqTuWkjxF3thTfTsttRyY7qNkz2JpNx0guD8v4otQoYjA5AEZvK4IXL
+wOwxol5xBTMvIrvvff2kkh+c7OC2QVbUTow/oppjqIKCx2maNHCtLFTJELf3fwtR
+JLJsy4fKGP0/6kpZc8Sp88WK4B4FauF9IV1CmoAJUC1vJxhagHIKfVtFjUWs8GPo
+bQIDAQAB
+-----END PUBLIC KEY-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/random.bin b/test/recipes/80-test_cmp_http_data/Mock/random.bin
new file mode 100644
index 000000000000..1df23d4da0bc
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/random.bin
Binary files differ
diff --git a/test/recipes/80-test_cmp_http_data/Mock/root.crt b/test/recipes/80-test_cmp_http_data/Mock/root.crt
new file mode 100644
index 000000000000..30fb8317e4b4
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/root.crt
@@ -0,0 +1,22 @@
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = rootCA
+-----BEGIN CERTIFICATE-----
+MIIDfzCCAmegAwIBAgIJAIhDKcvC6xWaMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE1MTFa
+Fw0zNTA3MDIxMzE1MTFaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0
+YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMM
+BnJvb3RDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMDxa3eIrDXf
++3NTL5KAL3QWMk31ECBvbDqO0dxr4S4+wwQPv5vEyRLR5AtFl+UGzWY64eDiK9+i
+xOx70z08iv9edKCrpwNqFlteksR+W3mKadS8g16uQpJ0pSvnAMGp3NWxUwcPc/eO
+rRQ+JZ7lHubMkc2VDIBEIMP9F8+RPWMQHBRb+8OowYiyd/+c2/xqRERE94XsCCzU
+34Gjecn+HpuTFlO3l6u+Txql4vpGBeQNnCqkzLkeIaBsxKtZsEA5u/mIrf3fjbQL
+r35B4CE8yDNFSYQvkwbu/U/tT/O8m978JV5V1XXUxXs6QDUGn8SEtGyTDK83Wq+2
+QU0mIxy4ArMCAwEAAaNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUhVaJNeKf
+ABrhhgMLS692Emszbf0wHwYDVR0jBBgwFoAUhVaJNeKfABrhhgMLS692Emszbf0w
+DQYJKoZIhvcNAQELBQADggEBADIKvyoK4rtPQ86I2lo5EDeAuzctXi2I3SZpnOe0
+mCCxJeZhWW0S7JuHvlfhEgXFBPEXzhS4HJLUlZUsWyiJ+3KcINMygaiF7MgIe6hZ
+WzpsMatS4mbNFElc89M+YryRFrQc9d1Uqjxhl3ms5MhDNcMP/PNwHa/wnIoqkpNI
+qtDoR741wcZ7bdr6XVdF8+pBjzbBPPRSf24x3bqavHBWcTjcSVcM/ZEXxeqH5SN0
+GbK2mQxrogX4UWjtl+DfYvl+ejpEcYNXKEmIabUUHtpG42544cuPtZizLW5bt/aT
+JBQfpPZpvf9MUlACxUONFOLQdZ8SXpSJ0e93iX2J2Z52mSQ=
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/root_expired.crt b/test/recipes/80-test_cmp_http_data/Mock/root_expired.crt
new file mode 100644
index 000000000000..f3939af29051
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/root_expired.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDaTCCAlGgAwIBAgIUBUv9qdSv5TiDPA9vqqcKeo5H4SUwDQYJKoZIhvcNAQEL
+BQAwVjELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
+GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1UEAwwGcm9vdENBMB4XDTIz
+MDEyNzE4MjgxOVoXDTIzMDEyNjE4MjgxOVowVjELMAkGA1UEBhMCQVUxEzARBgNV
+BAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0
+ZDEPMA0GA1UEAwwGcm9vdENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAwPFrd4isNd/7c1MvkoAvdBYyTfUQIG9sOo7R3GvhLj7DBA+/m8TJEtHkC0WX
+5QbNZjrh4OIr36LE7HvTPTyK/150oKunA2oWW16SxH5beYpp1LyDXq5CknSlK+cA
+wanc1bFTBw9z946tFD4lnuUe5syRzZUMgEQgw/0Xz5E9YxAcFFv7w6jBiLJ3/5zb
+/GpERET3hewILNTfgaN5yf4em5MWU7eXq75PGqXi+kYF5A2cKqTMuR4hoGzEq1mw
+QDm7+Yit/d+NtAuvfkHgITzIM0VJhC+TBu79T+1P87yb3vwlXlXVddTFezpANQaf
+xIS0bJMMrzdar7ZBTSYjHLgCswIDAQABoy8wLTAMBgNVHRMEBTADAQH/MB0GA1Ud
+DgQWBBSFVok14p8AGuGGAwtLr3YSazNt/TANBgkqhkiG9w0BAQsFAAOCAQEAVvAx
+iBaBKxY/oN48TSbu4yUJeb9scFqBwto0SdCKPie4y17fgcssmcxfU0+/RV/NeQhN
+JxNDWnTOsAd9HGPeOYPYwNLv8fb0psZ2B+EM+k3WZRLiFrzKw+qWcl1koyqVAjRg
+RNpAH/vcDK5MMBxYjLuAsdvTMVjlXVjmguCNhaFQbm4FY7aU61G+okaAsY73bpwJ
+pA9aHFVYQj+nlA+EfVP2UFYNWi5qBkL1+iSZspl2iK9c99174BA+nYiEma1ihAXG
+tN/v3L8jccZoZTSpDdIykqRLW78JOnUx34lQS4DFCFn5LPnVDQZM3bN3PlLHthbC
+hMlygwUn44JvTKI50w==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/server.cnf b/test/recipes/80-test_cmp_http_data/Mock/server.cnf
new file mode 100644
index 000000000000..774b34a7f513
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/server.cnf
@@ -0,0 +1,16 @@
+[cmp] # mock server configuration
+
+port = 0 # 0 means that the server should choose a random available port
+srv_cert = server.crt
+srv_key = server.key
+srv_secret = pass:test
+
+# not needed: accept_unprotected = 1
+no_check_time = 1
+srv_trusted = signer_root.crt
+
+rsp_cert = signer_only.crt
+rsp_capubs = signer_root.crt
+rsp_extracerts = signer_issuing.crt
+
+verbosity = 7
diff --git a/test/recipes/80-test_cmp_http_data/Mock/server.crt b/test/recipes/80-test_cmp_http_data/Mock/server.crt
new file mode 100644
index 000000000000..07eab2e63b8e
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/server.crt
@@ -0,0 +1,24 @@
+ Issuer: CN=Root CA
+ Validity
+ Not Before: Jan 14 22:29:46 2016 GMT
+ Not After : Jan 15 22:29:46 2116 GMT
+ Subject: CN=server.example
+-----BEGIN CERTIFICATE-----
+MIIDJTCCAg2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNDIyMjk0NloYDzIxMTYwMTE1MjIyOTQ2WjAZMRcwFQYDVQQD
+DA5zZXJ2ZXIuZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ANVdYGrf/GHuSKqMEUhDpW22Ul2qmEmxYZI1sfw6BCUMbXn/tNXJ6VwcO+Crs7h9
+o95tveDd11q/FEcRQl6mgtBhwX/dE0bmCYUHDvLU/Bpk0gqtIKsga5bwrczEGVNV
+3AEdpLPvirRJU12KBRzx3OFEv8XX4ncZV1yXC3XuiENxD8pswbSyUKd3RmxYDxG/
+8XYkWq45QrdRZynh0FUwbxfkkeqt+CjCQ2+iZKn7nZiSYkg+6w1PgkqK/z9y7pa1
+rqHBmLrvfZB1bf9aUp6r9cB+0IdD24UHBw99OHr90dPuZR3T6jlqhzfuStPgDW71
+cKzCvfFu85KVXqnwoWWVk40CAwEAAaN9MHswHQYDVR0OBBYEFMDnhL/oWSczELBS
+T1FSLwbWwHrNMB8GA1UdIwQYMBaAFHB/Lq6DaFmYBCMqzes+F80k3QFJMAkGA1Ud
+EwQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4
+YW1wbGUwDQYJKoZIhvcNAQELBQADggEBAHvTBEN1ig8RrsT716Ginv4gGNX0LzGI
+RrZ1jO7lm5emuaPNYJpGw0iX5Zdo91qGNXPZaZ75X3S55pQTActq3OPEBOll2pyk
+iyjz+Zp/v5cfRZLlBbFW5gv2R94eibYr4U3fSn4B0yPcl4xH/l/HzJhGDsSDW8qK
+8VIJvmvsPwmL0JMCv+FR59F+NFYZdND/KCXet59WUpF9ICmFCoBEX3EyJXEPwhbi
+X2sdPzJbCjx0HLli8e0HUKNttLQxCsBTRGo6iISLLamwN47mGDa9miBADwGSiz2q
+YeeuLO02zToHhnQ6KbPXOrQAqcL1kngO4g+j/ru+4AZThFkdkGnltvk=
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/server.key b/test/recipes/80-test_cmp_http_data/Mock/server.key
new file mode 100644
index 000000000000..0d7e4049fdc9
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/server.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVXWBq3/xh7kiq
+jBFIQ6VttlJdqphJsWGSNbH8OgQlDG15/7TVyelcHDvgq7O4faPebb3g3ddavxRH
+EUJepoLQYcF/3RNG5gmFBw7y1PwaZNIKrSCrIGuW8K3MxBlTVdwBHaSz74q0SVNd
+igUc8dzhRL/F1+J3GVdclwt17ohDcQ/KbMG0slCnd0ZsWA8Rv/F2JFquOUK3UWcp
+4dBVMG8X5JHqrfgowkNvomSp+52YkmJIPusNT4JKiv8/cu6Wta6hwZi6732QdW3/
+WlKeq/XAftCHQ9uFBwcPfTh6/dHT7mUd0+o5aoc37krT4A1u9XCswr3xbvOSlV6p
+8KFllZONAgMBAAECggEADLTt7A+A2Vg2jamf0dztejY0e42QWjstI2b9PZc67fXq
+gyx+WYkX07t+uWegYWliG/oPJ9guXiIpE/5sJHToL37S5kmFP2CtynVcJ4wVo4DD
+nY0n9+kLX0bgIuS+2V6wpoRcbbbjXM9NHrH8kfe5ftT4UtEDlLI2qLX6IcDd7p4u
+OYjILChR8GSGTw96yIy2Ws/1Uq9PMw64JoT4RcK5QqnkcPMDFRH1SeLOL+zXP2c4
+nEl9yOy3HauZKxwl/Ry/XK1s3DdjopIAU29ut+hAuMiTb06kzZnumL9NoplKoZtU
+otw/gVcCKhT+Ep+p6i8InLF0XEME8A0qUR0niWebgQKBgQD6vkxR49B8ZZQrzjw4
+XKs1lI9cP7cgPiuWlDHMNjYou3WbOaGrMeScvbB1Ldh9A8pjAhxlw8AaV/xs4qcA
+trmVmSISVMVyc1wSGlJXWi2nUzTNs9OE3vj22SyStihf8UUZtWwX2b5Y4JrYhA/V
++ThGGqHR03oLNLShNLtJc2c7YQKBgQDZ1nkibEyrepexw/fnwkw61IJKq9wRIh1G
+PREakhbe9wU5ie0knuf9razt7awzQiwFmlixmWqsM7UEtLuXNnNPciwdrKhhbvrd
+vD/rkbIEHEPllIhFlDtOzn3hRBWTzWmXFjpou/2LvHTSbVis4IYVZymTp2jb1ZLs
+7VbiG9JTrQKBgQDc6n75g1szzpdehQT/r33U5j/syeJBUSU8NPMu9fB/sLHsgjlT
+SNEf2+y1QSBE/Or6kmiMrIv7advn30W+Vj9qc5HWTsPrk4HiHTjA553jl2alebN5
+lK4LZspjtIQcC8mS3goPdXPEgJdM/gWpwzr2YQ6DfOxBJT2j7n64NyoT4QKBgH7/
+yx+GhCx1DHtXBPDZFhg2TL+78lEK0oZgk9gp06up2CHzh44SFq6O0oLkTcCUk5Ww
+poTkLIy4mJBlzfgahp+KsK2cO46SZS9g0ONFzcMXt33hWpE2Gl2XhUwPpYTF/QlY
+rDTjZK5S8Mi9dzVSsNlJi7PJphiEK2R1+nFYRwcBAoGBANWoIG85jpXAOnq/Kcgx
+Rl3YivR0Ke6r1tFlP58rT7X3EkiboXyQl5vLIFCAwUte6RGrLl1dy3Qyh80B9ySL
+Jx6vj42CK7vgv6A96TuVYhnXTnEI6ZvwAQ2VGaw4BizhjALs/kdSE/og9aSCs3ws
+KQypwAFz0tbHxaNag/bSAN0J
+-----END PRIVATE KEY-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/signer.crt b/test/recipes/80-test_cmp_http_data/Mock/signer.crt
new file mode 100644
index 000000000000..cb72e33bff76
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/signer.crt
@@ -0,0 +1,68 @@
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = leaf
+-----BEGIN CERTIFICATE-----
+MIIDfjCCAmagAwIBAgIJAKRNsDKacUqNMA0GCSqGSIb3DQEBCwUAMFoxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEzARBgNVBAMTCnN1YmludGVyQ0EwHhcNMTUwNzAyMTMx
+OTQ5WhcNMzUwNzAyMTMxOTQ5WjBUMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29t
+ZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ0wCwYD
+VQQDEwRsZWFmMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv0Qo9WC/
+BKA70LtQJdwVGSXqr9dut3cQmiFzTb/SaWldjOT1sRNDFxSzdTJjU/8cIDEZvaTI
+wRxP/dtVQLjc+4jzrUwz93NuZYlsEWUEUg4Lrnfs0Nz50yHk4rJhVxWjb8Ii/wRB
+ViWHFExP7CwTkXiTclC1bCqTuWkjxF3thTfTsttRyY7qNkz2JpNx0guD8v4otQoY
+jA5AEZvK4IXLwOwxol5xBTMvIrvvff2kkh+c7OC2QVbUTow/oppjqIKCx2maNHCt
+LFTJELf3fwtRJLJsy4fKGP0/6kpZc8Sp88WK4B4FauF9IV1CmoAJUC1vJxhagHIK
+fVtFjUWs8GPobQIDAQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQcHcT+8SVG
+IRlN9YTuM9rlz7UZfzAfBgNVHSMEGDAWgBTpZ30QdMGarrhMPwk+HHAV3R8aTzAN
+BgkqhkiG9w0BAQsFAAOCAQEAGjmSkF8is+v0/RLcnSRiCXENz+yNi4pFCAt6dOtT
+6Gtpqa1tY5It9lVppfWb26JrygMIzOr/fB0r1Q7FtZ/7Ft3P6IXVdk3GDO0QsORD
+2dRAejhYpc5c7joHxAw9oRfKrEqE+ihVPUTcfcIuBaalvuhkpQRmKP71ws5DVzOw
+QhnMd0TtIrbKHaNQ4kNsmSY5fQolwB0LtNfTus7OEFdcZWhOXrWImKXN9jewPKdV
+mSG34NfXOnA6qx0eQg06z+TkdrptH6j1Va2vS1/bL+h1GxjpTHlvTGaZYxaloIjw
+y/EzY5jygRoABnR3eBm15CYZwwKL9izIq1H3OhymEi/Ycg==
+-----END CERTIFICATE-----
+
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = subinterCA
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAmygAwIBAgIJAJkv2OGshkmUMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMTB2ludGVyQ0EwHhcNMTUwNzAyMTMxODIz
+WhcNMzUwNzAyMTMxODIzWjBaMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1T
+dGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQD
+EwpzdWJpbnRlckNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/zQj
+vhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb2ARVkYZP5e9gHb04wPVz
+2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1nJeSv3na8gyOoCheG64kW
+VbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/CpdCHE3DKAzAiri3GVc90
+OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMywtz4hhY/XZTvdEn290aL
+857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRFHONWZG1T4mRY1Drh6VbJ
+Gb+0GNIldNLQqigkfwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBTp
+Z30QdMGarrhMPwk+HHAV3R8aTzAfBgNVHSMEGDAWgBQY+tYjuY9dXRN9Po+okcfZ
+YcAXLjANBgkqhkiG9w0BAQsFAAOCAQEAgVUsOf9rdHlQDw4clP8GMY7QahfXbvd8
+8o++P18KeInQXH6+sCg0axZXzhOmKwn+Ina3EsOP7xk4aKIYwJ4A1xBuT7fKxquQ
+pbJyjkEBsNRVLC9t4gOA0FC791v5bOCZjyff5uN+hy8r0828nVxha6CKLqwrPd+E
+mC7DtilSZIgO2vwbTBL6ifmw9n1dd/Bl8Wdjnl7YJqTIf0Ozc2SZSMRUq9ryn4Wq
+YrjRl8NwioGb1LfjEJ0wJi2ngL3IgaN94qmDn10OJs8hlsufwP1n+Bca3fsl0m5U
+gUMG+CXxbF0kdCKZ9kQb1MJE4vOk6zfyBGQndmQnxHjt5botI/xpXg==
+-----END CERTIFICATE-----
+
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = interCA
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAmigAwIBAgIJANnoWlLlEsTgMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE3MDVa
+Fw0zNTA3MDIxMzE3MDVaMFcxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0
+YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMT
+B2ludGVyQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7s0ejvpQO
+nvfwD+e4R+9WQovtrsqOTw8khiREqi5JlmAFbpDEFam18npRkt6gOcGMnjuFzuz6
+iEuQmeeyh0BqWAwpMgWMMteEzLOAaqkEl//J2+WgRbA/8pmwHfbPW/d+f3bp64Fo
+D1hQAenBzXmLxVohEQ9BA+xEDRkL/cA3Y+k/O1C9ORhSQrJNsB9aE3zKbFHd9mOm
+H4aNSsF8On3SqlRVOCQine5c6ACSd0HUEjYy9aObqY47ySNULbzVq5y6VOjMs0W+
+2G/XqrcVkxzf9bVqyVBrrAJrnb35/y/iK0zWgJBP+HXhwr5mMTvNuEirBeVYuz+6
+hUerUbuJhr0FAgMBAAGjUDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFBj61iO5
+j11dE30+j6iRx9lhwBcuMB8GA1UdIwQYMBaAFIVWiTXinwAa4YYDC0uvdhJrM239
+MA0GCSqGSIb3DQEBCwUAA4IBAQDAU0MvL/yZpmibhxUsoSsa97UJbejn5IbxpPzZ
+4WHw8lsoUGs12ZHzQJ9LxkZVeuccFXy9yFEHW56GTlkBmD2qrddlmQCfQ3m8jtZ9
+Hh5feKAyrqfmfsWF5QPjAmdj/MFdq+yMJVosDftkmUmaBHjzbvbcq1sWh/6drH8U
+7pdYRpfeEY8dHSU6FHwVN/H8VaBB7vYYc2wXwtk8On7z2ocIVHn9RPkcLwmwJjb/
+e4jmcYiyZev22KXQudeHc4w6crWiEFkVspomn5PqDmza3rkdB3baXFVZ6sd23ufU
+wjkiKKtwRBwU+5tCCagQZoeQ5dZXQThkiH2XEIOCOLxyD/tb
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/signer.key b/test/recipes/80-test_cmp_http_data/Mock/signer.key
new file mode 100644
index 000000000000..a1b1721245b7
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/signer.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAv0Qo9WC/BKA70LtQJdwVGSXqr9dut3cQmiFzTb/SaWldjOT1
+sRNDFxSzdTJjU/8cIDEZvaTIwRxP/dtVQLjc+4jzrUwz93NuZYlsEWUEUg4Lrnfs
+0Nz50yHk4rJhVxWjb8Ii/wRBViWHFExP7CwTkXiTclC1bCqTuWkjxF3thTfTsttR
+yY7qNkz2JpNx0guD8v4otQoYjA5AEZvK4IXLwOwxol5xBTMvIrvvff2kkh+c7OC2
+QVbUTow/oppjqIKCx2maNHCtLFTJELf3fwtRJLJsy4fKGP0/6kpZc8Sp88WK4B4F
+auF9IV1CmoAJUC1vJxhagHIKfVtFjUWs8GPobQIDAQABAoIBAB1fCiskQDElqgnT
+uesWcOb7u55lJstlrVb97Ab0fgtR8tvADTq0Colw1F4a7sXnVxpab+l/dJSzFFWX
+aPAXc1ftH/5sxU4qm7lb8Qx6xr8TCRgxslwgkvypJ8zoN6p32DFBTr56mM3x1Vx4
+m41Y92hPa9USL8n8f9LpImT1R5Q9ShI/RUCowPyzhC6OGkFSBJu72nyA3WK0znXn
+q5TNsTRdJLOug7eoJJvhOPfy3neNQV0f2jQ+2wDKCYvn6i4j9FSLgYC/vorqofEd
+vFBHxl374117F6DXdBChyD4CD5vsplB0zcExRUCT5+iBqf5uc8CbLHeyNk6vSaf5
+BljHWsECgYEA93QnlKsVycgCQqHt2q8EIZ5p7ksGYRVfBEzgetsNdpxvSwrLyLQE
+L5AKG3upndOofCeJnLuQF1j954FjCs5Y+8Sy2H1D1EPrHSBp4ig2F5aOxT3vYROd
+v+/mF4ZUzlIlv3jNDz5IoLaxm9vhXTtLLUtQyTueGDmqwlht0Kr3/gcCgYEAxd86
+Q23jT4DmJqUl+g0lWdc2dgej0jwFfJ2BEw/Q55vHjqj96oAX5QQZFOUhZU8Otd/D
+lLzlsFn0pOaSW/RB4l5Kv8ab+ZpxfAV6Gq47nlfzmEGGx4wcoL0xkHufiXg0sqaG
+UtEMSKFhxPQZhWojUimK/+YIF69molxA6G9miOsCgYEA8mICSytxwh55qE74rtXz
+1AJZfKJcc0f9tDahQ3XBsEb29Kh0h/lciEIsxFLTB9dFF6easb0/HL98pQElxHXu
+z14SWOAKSqbka7lOPcppgZ1l52oNSiduw4z28mAQPbBVbUGkiqPVfCa3vhUYoLvt
+nUZCsXoGF3CVBJydpGFzXI0CgYEAtt3Jg72PoM8YZEimI0R462F4xHXlEYtE6tjJ
+C+vG/fU65P4Kw+ijrJQv9d6YEX+RscXdg51bjLJl5OvuAStopCLOZBPR3Ei+bobF
+RNkW4gyYZHLSc6JqZqbSopuNYkeENEKvyuPFvW3f5FxPJbxkbi9UdZCKlBEXAh/O
+IMGregcCgYBC8bS7zk6KNDy8q2uC/m/g6LRMxpb8G4jsrcLoyuJs3zDckBjQuLJQ
+IOMXcQBWN1h+DKekF2ecr3fJAJyEv4pU4Ct2r/ZTYFMdJTyAbjw0mqOjUR4nsdOh
+t/vCbt0QW3HXYTcVdCnFqBtelKnI12KoC0jAO9EAJGZ6kE/NwG6dQg==
+-----END RSA PRIVATE KEY-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/signer.p12 b/test/recipes/80-test_cmp_http_data/Mock/signer.p12
new file mode 100644
index 000000000000..5bbb1e205f73
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/signer.p12
Binary files differ
diff --git a/test/recipes/80-test_cmp_http_data/Mock/signer_issuing.crt b/test/recipes/80-test_cmp_http_data/Mock/signer_issuing.crt
new file mode 100644
index 000000000000..ebecbb79cd17
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/signer_issuing.crt
@@ -0,0 +1,45 @@
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = subinterCA
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAmygAwIBAgIJAJkv2OGshkmUMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMTB2ludGVyQ0EwHhcNMTUwNzAyMTMxODIz
+WhcNMzUwNzAyMTMxODIzWjBaMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1T
+dGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQD
+EwpzdWJpbnRlckNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/zQj
+vhbU7RWDsRaEkVUBZWR/PqZ49GoE9p3OyRN4pkt1c1yb2ARVkYZP5e9gHb04wPVz
+2+FYy+2mNkl+uAZbcK5w5fWO3WJIEn57he4MkWu3ew1nJeSv3na8gyOoCheG64kW
+VbA2YL92mR7QoSCo4SP7RmykLrwj6TlDxqgH6DxKSD/CpdCHE3DKAzAiri3GVc90
+OJAszYHlje4/maVIOayGROVET3xa5cbtRJl8IBgmqhMywtz4hhY/XZTvdEn290aL
+857Hk7JjogA7mLKi07yKzknMxHV+k6JX7xJEttkcNQRFHONWZG1T4mRY1Drh6VbJ
+Gb+0GNIldNLQqigkfwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBTp
+Z30QdMGarrhMPwk+HHAV3R8aTzAfBgNVHSMEGDAWgBQY+tYjuY9dXRN9Po+okcfZ
+YcAXLjANBgkqhkiG9w0BAQsFAAOCAQEAgVUsOf9rdHlQDw4clP8GMY7QahfXbvd8
+8o++P18KeInQXH6+sCg0axZXzhOmKwn+Ina3EsOP7xk4aKIYwJ4A1xBuT7fKxquQ
+pbJyjkEBsNRVLC9t4gOA0FC791v5bOCZjyff5uN+hy8r0828nVxha6CKLqwrPd+E
+mC7DtilSZIgO2vwbTBL6ifmw9n1dd/Bl8Wdjnl7YJqTIf0Ozc2SZSMRUq9ryn4Wq
+YrjRl8NwioGb1LfjEJ0wJi2ngL3IgaN94qmDn10OJs8hlsufwP1n+Bca3fsl0m5U
+gUMG+CXxbF0kdCKZ9kQb1MJE4vOk6zfyBGQndmQnxHjt5botI/xpXg==
+-----END CERTIFICATE-----
+
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = interCA
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAmigAwIBAgIJANnoWlLlEsTgMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE3MDVa
+Fw0zNTA3MDIxMzE3MDVaMFcxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0
+YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMT
+B2ludGVyQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7s0ejvpQO
+nvfwD+e4R+9WQovtrsqOTw8khiREqi5JlmAFbpDEFam18npRkt6gOcGMnjuFzuz6
+iEuQmeeyh0BqWAwpMgWMMteEzLOAaqkEl//J2+WgRbA/8pmwHfbPW/d+f3bp64Fo
+D1hQAenBzXmLxVohEQ9BA+xEDRkL/cA3Y+k/O1C9ORhSQrJNsB9aE3zKbFHd9mOm
+H4aNSsF8On3SqlRVOCQine5c6ACSd0HUEjYy9aObqY47ySNULbzVq5y6VOjMs0W+
+2G/XqrcVkxzf9bVqyVBrrAJrnb35/y/iK0zWgJBP+HXhwr5mMTvNuEirBeVYuz+6
+hUerUbuJhr0FAgMBAAGjUDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFBj61iO5
+j11dE30+j6iRx9lhwBcuMB8GA1UdIwQYMBaAFIVWiTXinwAa4YYDC0uvdhJrM239
+MA0GCSqGSIb3DQEBCwUAA4IBAQDAU0MvL/yZpmibhxUsoSsa97UJbejn5IbxpPzZ
+4WHw8lsoUGs12ZHzQJ9LxkZVeuccFXy9yFEHW56GTlkBmD2qrddlmQCfQ3m8jtZ9
+Hh5feKAyrqfmfsWF5QPjAmdj/MFdq+yMJVosDftkmUmaBHjzbvbcq1sWh/6drH8U
+7pdYRpfeEY8dHSU6FHwVN/H8VaBB7vYYc2wXwtk8On7z2ocIVHn9RPkcLwmwJjb/
+e4jmcYiyZev22KXQudeHc4w6crWiEFkVspomn5PqDmza3rkdB3baXFVZ6sd23ufU
+wjkiKKtwRBwU+5tCCagQZoeQ5dZXQThkiH2XEIOCOLxyD/tb
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/signer_only.crt b/test/recipes/80-test_cmp_http_data/Mock/signer_only.crt
new file mode 100644
index 000000000000..bb94d126e93f
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/signer_only.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDfjCCAmagAwIBAgIJAKRNsDKacUqNMA0GCSqGSIb3DQEBCwUAMFoxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxEzARBgNVBAMTCnN1YmludGVyQ0EwHhcNMTUwNzAyMTMx
+OTQ5WhcNMzUwNzAyMTMxOTQ5WjBUMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29t
+ZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ0wCwYD
+VQQDEwRsZWFmMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv0Qo9WC/
+BKA70LtQJdwVGSXqr9dut3cQmiFzTb/SaWldjOT1sRNDFxSzdTJjU/8cIDEZvaTI
+wRxP/dtVQLjc+4jzrUwz93NuZYlsEWUEUg4Lrnfs0Nz50yHk4rJhVxWjb8Ii/wRB
+ViWHFExP7CwTkXiTclC1bCqTuWkjxF3thTfTsttRyY7qNkz2JpNx0guD8v4otQoY
+jA5AEZvK4IXLwOwxol5xBTMvIrvvff2kkh+c7OC2QVbUTow/oppjqIKCx2maNHCt
+LFTJELf3fwtRJLJsy4fKGP0/6kpZc8Sp88WK4B4FauF9IV1CmoAJUC1vJxhagHIK
+fVtFjUWs8GPobQIDAQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQcHcT+8SVG
+IRlN9YTuM9rlz7UZfzAfBgNVHSMEGDAWgBTpZ30QdMGarrhMPwk+HHAV3R8aTzAN
+BgkqhkiG9w0BAQsFAAOCAQEAGjmSkF8is+v0/RLcnSRiCXENz+yNi4pFCAt6dOtT
+6Gtpqa1tY5It9lVppfWb26JrygMIzOr/fB0r1Q7FtZ/7Ft3P6IXVdk3GDO0QsORD
+2dRAejhYpc5c7joHxAw9oRfKrEqE+ihVPUTcfcIuBaalvuhkpQRmKP71ws5DVzOw
+QhnMd0TtIrbKHaNQ4kNsmSY5fQolwB0LtNfTus7OEFdcZWhOXrWImKXN9jewPKdV
+mSG34NfXOnA6qx0eQg06z+TkdrptH6j1Va2vS1/bL+h1GxjpTHlvTGaZYxaloIjw
+y/EzY5jygRoABnR3eBm15CYZwwKL9izIq1H3OhymEi/Ycg==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/signer_root.crt b/test/recipes/80-test_cmp_http_data/Mock/signer_root.crt
new file mode 100644
index 000000000000..30fb8317e4b4
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/signer_root.crt
@@ -0,0 +1,22 @@
+Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = rootCA
+-----BEGIN CERTIFICATE-----
+MIIDfzCCAmegAwIBAgIJAIhDKcvC6xWaMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBnJvb3RDQTAeFw0xNTA3MDIxMzE1MTFa
+Fw0zNTA3MDIxMzE1MTFaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0
+YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMM
+BnJvb3RDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMDxa3eIrDXf
++3NTL5KAL3QWMk31ECBvbDqO0dxr4S4+wwQPv5vEyRLR5AtFl+UGzWY64eDiK9+i
+xOx70z08iv9edKCrpwNqFlteksR+W3mKadS8g16uQpJ0pSvnAMGp3NWxUwcPc/eO
+rRQ+JZ7lHubMkc2VDIBEIMP9F8+RPWMQHBRb+8OowYiyd/+c2/xqRERE94XsCCzU
+34Gjecn+HpuTFlO3l6u+Txql4vpGBeQNnCqkzLkeIaBsxKtZsEA5u/mIrf3fjbQL
+r35B4CE8yDNFSYQvkwbu/U/tT/O8m978JV5V1XXUxXs6QDUGn8SEtGyTDK83Wq+2
+QU0mIxy4ArMCAwEAAaNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUhVaJNeKf
+ABrhhgMLS692Emszbf0wHwYDVR0jBBgwFoAUhVaJNeKfABrhhgMLS692Emszbf0w
+DQYJKoZIhvcNAQELBQADggEBADIKvyoK4rtPQ86I2lo5EDeAuzctXi2I3SZpnOe0
+mCCxJeZhWW0S7JuHvlfhEgXFBPEXzhS4HJLUlZUsWyiJ+3KcINMygaiF7MgIe6hZ
+WzpsMatS4mbNFElc89M+YryRFrQc9d1Uqjxhl3ms5MhDNcMP/PNwHa/wnIoqkpNI
+qtDoR741wcZ7bdr6XVdF8+pBjzbBPPRSf24x3bqavHBWcTjcSVcM/ZEXxeqH5SN0
+GbK2mQxrogX4UWjtl+DfYvl+ejpEcYNXKEmIabUUHtpG42544cuPtZizLW5bt/aT
+JBQfpPZpvf9MUlACxUONFOLQdZ8SXpSJ0e93iX2J2Z52mSQ=
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/test.cnf b/test/recipes/80-test_cmp_http_data/Mock/test.cnf
new file mode 100644
index 000000000000..c68095661384
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/test.cnf
@@ -0,0 +1,141 @@
+[default]
+batch = 1 # do not use stdin
+total_timeout = 8 # prevent, e.g., infinite polling due to error
+trusted = trusted.crt
+newkey = new.key
+newkeypass =
+cmd = ir
+out_trusted = root.crt
+#certout = test.cert.pem
+policies = certificatePolicies
+#policy_oids = 1.2.3.4
+#policy_oids_critical = 1
+#verbosity = 7
+
+############################# server configurations
+
+[Mock] # the built-in OpenSSL CMP mock server
+# no_check_time = 1
+server_host = 127.0.0.1 # localhost
+# server_port = 0 means that the port is determined by the server
+server_port = 0
+server_tls = $server_port
+server_cert = server.crt
+server = $server_host:$server_port
+server_path = pkix/
+path = $server_path
+ca_dn = /CN=Root CA
+recipient = $ca_dn
+server_dn = /CN=server.example
+expect_sender = $server_dn
+subject = "/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=leaf"
+newkey = signer.key
+out_trusted = signer_root.crt
+kur_port = $server_port
+pbm_port = $server_port
+pbm_ref =
+pbm_secret = pass:test
+cert = signer.crt
+key = signer.p12
+keypass = pass:12345
+ignore_keyusage = 0
+column = 0
+sleep = 0
+
+############################# aspects
+
+[connection]
+msg_timeout = 5
+total_timeout =
+# reset any TLS options to default:
+tls_used =
+tls_cert =
+tls_key =
+tls_keypass =
+tls_trusted =
+tls_host =
+
+[tls]
+server =
+tls_used =
+tls_cert =
+tls_key =
+tls_keypass =
+tls_trusted =
+tls_host =
+
+[credentials]
+ref =
+secret =
+cert =
+key =
+keypass =
+extracerts =
+digest =
+unprotected_requests =
+
+[verification]
+#expect_sender =
+srvcert =
+trusted =
+untrusted =
+#unprotected_errors =
+extracertsout =
+
+[commands]
+cmd =
+cacertsout =
+infotype =
+oldcert =
+revreason =
+geninfo =
+
+[enrollment]
+cmd =
+newkey =
+newkeypass =
+#subject =
+issuer =
+days =
+reqexts =
+sans =
+san_nodefault = 0
+#popo =
+implicit_confirm = 0
+disable_confirm = 0
+certout =
+out_trusted =
+oldcert =
+csr =
+
+############################# extra cert template contents
+
+[certificatePolicies]
+certificatePolicies = "critical, @pkiPolicy"
+
+[pkiPolicy]
+policyIdentifier = 1.2.3.4
+
+[reqexts]
+basicConstraints = CA:FALSE
+#basicConstraints = critical, CA:TRUE
+keyUsage = critical, digitalSignature # keyAgreement, keyEncipherment, nonRepudiation
+extendedKeyUsage = critical, clientAuth # serverAuth, codeSigning
+#crlDistributionPoints = URI:http:
+#authorityInfoAccess = URI:http:
+subjectAltName = @alt_names
+
+[alt_names]
+DNS.0 = localhost
+IP.0 = 127.0.0.1
+IP.1 = 192.168.1.1
+URI.0 = http://192.168.0.2
+
+[reqexts_invalidkey]
+subjectAltName = @alt_names_3
+
+[alt_names_3]
+DNS.0 = localhost
+DNS.1 = xn--rksmrgs-5wao1o.example.com
+DNS.2 = xn--rkmacka-5wa.example.com
+DNS__3 = xn--rksallad-0za.example.com
diff --git a/test/recipes/80-test_cmp_http_data/Mock/trusted.crt b/test/recipes/80-test_cmp_http_data/Mock/trusted.crt
new file mode 100644
index 000000000000..23406e998d8c
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/trusted.crt
@@ -0,0 +1,23 @@
+ Issuer: CN=Root CA
+ Validity
+ Not Before: Jan 14 22:29:05 2016 GMT
+ Not After : Jan 15 22:29:05 2116 GMT
+ Subject: CN=Root CA
+-----BEGIN CERTIFICATE-----
+MIIC8TCCAdmgAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
+IENBMCAXDTE2MDExNDIyMjkwNVoYDzIxMTYwMTE1MjIyOTA1WjASMRAwDgYDVQQD
+DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv5oV1s3N
+us7SINg7omu5AxueEgK97mh5PU3hgZpliSFaESmL2qLGeP609oXs/68XDXVW4utU
+LCOjLh0np+5Xy3i3GRDXgBZ72QDe23WqqQqqaBlQVVm1WxG+amRtZJEWdSIsiFBt
+k+8dBElHh2WQDhDOWqHGHQarQgJPxGB97MRhMSlbTwK1T5KAWOlqi5mJW5L6vNrQ
+7Tra/YceH70fU0fJYOXhBxM92NwD1bbVd9GPYFSqrdrVj19bvo63XsxZduex5QHr
+RkWqT5w5mgAHaEgCqWrS/64q9TR9UEwrB8kiZZg3k9/im+zBwEULTZu0r8oMEkpj
+bTlXLmt8EMBqxwIDAQABo1AwTjAdBgNVHQ4EFgQUcH8uroNoWZgEIyrN6z4XzSTd
+AUkwHwYDVR0jBBgwFoAUcH8uroNoWZgEIyrN6z4XzSTdAUkwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAQEAuiLq2lhcOJHrwUP0txbHk2vy6rmGTPxqmcCo
+CUQFZ3KrvUQM+rtRqqQ0+LzU4wSTFogBz9KSMfT03gPegY3b/7L2TOaMmUFRzTdd
+c9PNT0lP8V3pNQrxp0IjKir791QkGe2Ux45iMKf/SXpeTWASp4zeMiD6/LXFzzaK
+BfNS5IrIWRDev41lFasDzudK5/kmVaMvDOFyW51KkKkqb64VS4UA81JIEzClvz+3
+Vp3k1AXup5+XnTvhqu2nRhrLpJR5w8OXQpcn6qjKlVc2BXtb3xwci1/ibHlZy3CZ
+n70e2NYihU5yYKccReP+fjLgVFsuhsDs/0hRML1u9bLp9nUbYA==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_cmp_http_data/Mock/wrong_csr.pem b/test/recipes/80-test_cmp_http_data/Mock/wrong_csr.pem
new file mode 100644
index 000000000000..02a966d3bd36
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/Mock/wrong_csr.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIDbTCCAlUCAQAwggEmMWMwYQYDVQQIDFpUaGUgR3JlYXQgU3RhdGUgb2YgTG9u
+Zy1XaW5kZWQgQ2VydGlmaWNhdGUgRmllbGQgTmFtZXMgV2hlcmVieSB0byBJbmNy
+ZWFzZSB0aGUgT3V0cHV0IFNpemUxHzAdBgNVBAcMFlRvb21hbnljaGFyYWN0ZXJz
+dmlsbGUxSDBGBgNVBAoMP1RoZSBCZW5ldm9sZW50IFNvY2lldHkgb2YgTG9xdWFj
+aW91cyBhbmQgUGxlb25hc3RpYyBQZXJpcGhyYXNpczE9MDsGA1UECww0RW5kb3Jz
+ZW1lbnQgb2YgVm91Y2hzYWZlJ2QgRXZpZGVudGlhcnkgQ2VydGlmaWNhdGlvbjEV
+MBMGA1UEAwwMY2VydC5leGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAuzDiK6h/mSCYmXa6CjK3pSjEr70SoNjBII/7MfU2hx6qysrOAIi+Eav8
+m0BIoBQuhvJqWVmwa1Przdki69WbD37QhyGNdixeetFi2E2Dag4BeQXQmQq4ydoY
+Tfl8DC9rYGHVoqFfxHsvEiUqlLJH9NzKXMJy21X0qYcJqMKjX4hBRajwQn+xPCFW
+qxlnLWzKb5TGwDOaMITHr/wnJqqrfNTRZG9VlXo7zeb/ySr9uN/13nX+CO2Sb+8y
+nrMKD/aYhc1h1wnfUiFc1qhe+7v3Kx7nyIaBGuzZGYUgtmqLEBetfYip35NJ6lmi
+wydfNggl5BxEaEAu6vV9iBiwy6ANFwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEB
+ADgIOZ6OL8SDAGcDTkHuE7d9xOIeiidMU2JU1Dxxk7iZh6JAHxjdgwwUew0nDdPR
+74u84uGzecotX9MByAhmCflhwN+aTQcntxY1R44uAmeE0WJLrCYWQIKHh27YI/2y
+9mMHX9srTtL+Ggrs7s1WLzcFitDpUWB4B+9a+KGJ0fbWPpjNcxDwwjSEiKwzHhpv
+3PdTU2eC5/uvu1BoU4ms//JftvbWlTwHqf4J4P/FZeeOwoTay5d0K5qWDs9hEexP
+m9wRUnCc8L7xPElYvIC9mpgMFvwJ3xMOpE1qAh7WSeAlTX6wE0WvxgCwhgEExISQ
+vRMcwsXoc5VthqU/E8fc9ls=
+-----END CERTIFICATE REQUEST-----
diff --git a/test/recipes/80-test_cmp_http_data/test_commands.csv b/test/recipes/80-test_cmp_http_data/test_commands.csv
new file mode 100644
index 000000000000..1e574b2f7114
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/test_commands.csv
@@ -0,0 +1,64 @@
+expected,description, -section,val, -cmd,val,val2, -cacertsout,val,val2, -infotype,val,, -oldcert,val, -revreason,int, -geninfo,val
+,,,,,Generic,message options:,,,,,,,,Misc,request options:,,
+,,,,,,,,,,,,,,,,,
+1,minimum options, -section,, -cmd,ir,,BLANK,,,BLANK,,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,
+0,no cmd, -section,,BLANK,,,BLANK,,,BLANK,,,BLANK,,BLANK,
+0,cmd missing arg, -section,, -cmd,,,BLANK,,,BLANK,,,BLANK,,BLANK,
+0,cmd undefined , -section,, -cmd,abc,,BLANK,,,BLANK,,,BLANK,,BLANK,
+0,cmd incomplete, -section,, -cmd,i,,BLANK,,,BLANK,,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,
+1,no cacertsout, -section,, -cmd,ir,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,cacertsout given, -section,, -cmd,ir,, -cacertsout,_RESULT_DIR/test.cacerts.pem,,BLANK,,,BLANK,,BLANK,
+0,cacertsout missing arg, -section,, -cmd,ir,, -cacertsout,,,BLANK,,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,revreason unspecified, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,0
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,revreason keyCompromise, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,1
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,revreason CACompromise, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,2
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,revreason affiliationChanged, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,3
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,revreason superseded, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,4
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,revreason cessationOfOperation, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,5
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,revreason certificateHold, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,6
+1,revreason removeFromCRL, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,8
+0,revreason 7 (invalid), -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,7
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,revreason priviligeWithdrawn, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,9
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1,revreason AACompromise, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,10
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+1, --- use csr for revocation ----, -section,, -cmd,rr,,BLANK,,,BLANK,,,BLANK,,BLANK, -revreason,0, -csr,csr.pem
+1, --- get certificate for revocation ----, -section,, -cmd,cr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+0,without oldcert, -section,, -cmd,rr,,BLANK,,,BLANK,,,BLANK,,BLANK,
+0,oldcert file nonexistent, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,idontexist,BLANK,
+0,empty oldcert file, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,empty.txt,BLANK,
+0,oldcert and key do not match, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,trusted.crt, -revreason,0
+0,revreason 11 (invalid), -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,11
+0,revreason string, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,abc
+0,revreason out of integer range, -section,, -cmd,rr,,BLANK,,,BLANK,,, -oldcert,_RESULT_DIR/test.cert.pem, -revreason,010000000000000000000
+,,,,,,,,,,,,,,,,,
+1,ir + infotype, -section,, -cmd,ir,,BLANK,,, -infotype,signKeyPairTypes,,BLANK,,BLANK,
+0,genm with missing infotype value, -section,, -cmd,genm,,BLANK,,, -infotype,,,BLANK,,BLANK,
+0,genm with invalid infotype value, -section,, -cmd,genm,,BLANK,,, -infotype,asdf,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,,,,,,
+1,geninfo, -section,, -cmd,cr,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,, -geninfo,1.2.3:int:987,BLANK,,BLANK,
+0,geninfo missing argument, -section,, -cmd,cr,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,, -geninfo,,,,,
+0,geninfo bad syntax: leading '.', -section,, -cmd,cr,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,, -geninfo,.1.2.3:int:987,BLANK,,BLANK,
+0,geninfo bad syntax: missing ':', -section,, -cmd,cr,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,, -geninfo,1.2.3:int987,,,,
+0,geninfo bad syntax: double ':', -section,, -cmd,cr,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,, -geninfo,1.2.3:int::987,,,,
+0,geninfo bad syntax: missing ':int', -section,, -cmd,cr,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,, -geninfo,1.2.3,,,,
+,,,,,,,,,,,,,,,,,,,
+1,reqout ir+certConf rspout ip+pkiConf, -section,, -cmd,ir,,-reqout,_RESULT_DIR/ir.der _RESULT_DIR/certConf.der,,-rspout,_RESULT_DIR/ip.der _RESULT_DIR/pkiConf.der,,BLANK,,BLANK,
+1,reqout cr rspout cp, -section,, -cmd,cr,,-reqout,_RESULT_DIR/cr.der,,-rspout,_RESULT_DIR/cp.der,,BLANK,,BLANK,
+1,reqin old tid, -section,, -cmd,ir,,-reqin,_RESULT_DIR/ir.der _RESULT_DIR/certConf.der,,BLANK,,,BLANK,,BLANK,BLANK
+1,reqin new tid, -section,, -cmd,ir,,-reqin,_RESULT_DIR/ir.der _RESULT_DIR/certConf.der,,BLANK,,,BLANK,,BLANK,-reqin_new_tid
+0,reqin wrong req, -section,, -cmd,ir,,-reqin,_RESULT_DIR/cr.der _RESULT_DIR/certConf.der,,BLANK,,,BLANK,,BLANK,BLANK
+1,rspin, -section,, -cmd,ir,,BLANK,,,-rspin,_RESULT_DIR/ip.der _RESULT_DIR/pkiConf.der,,BLANK,,BLANK,
+0,rspin too few files - server must reject, -section,, -cmd,ir,,BLANK,,,-rspin,_RESULT_DIR/ip.der,,BLANK,,BLANK,-secret,_PBM_SECRET
+0,rspin too few files - no server, -section,, -cmd,ir,,BLANK,,,-rspin,_RESULT_DIR/ip.der,,BLANK,,BLANK, -server, """"
diff --git a/test/recipes/80-test_cmp_http_data/test_connection.csv b/test/recipes/80-test_cmp_http_data/test_connection.csv
new file mode 100644
index 000000000000..33a572a29da1
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/test_connection.csv
@@ -0,0 +1,49 @@
+expected,description, -section,val, -server,val, -proxy,val, -no_proxy,val, -tls_used,noarg, -path,val, -msg_timeout,int, -total_timeout,int, -keep_alive,val
+,Message transfer options:,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,
+1,default config, -section,,,,,,,,BLANK,,,,BLANK,,BLANK,,BLANK,
+TBD,Domain name, -section,, -server,_SERVER_CN:_SERVER_PORT,,,,,,,,,,,,,,
+TBD,IP address, -section,, -server,_SERVER_IP:_SERVER_PORT,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,
+0,wrong server, -section,, -server,xn--rksmrgs-5wao1o.example.com:_SERVER_PORT,,,,,BLANK,,,, -msg_timeout,1,BLANK,,BLANK,
+0,wrong server port, -section,, -server,_SERVER_HOST:99,,,,,BLANK,,,, -msg_timeout,1,BLANK,,BLANK,
+0,server default port, -section,, -server,_SERVER_HOST,,,,,BLANK,,,, -msg_timeout,1,BLANK,,BLANK,
+0,server port out of range, -section,, -server,_SERVER_HOST:65536,,,,,BLANK,,,,BLANK,,BLANK,,BLANK,
+0,server port negative, -section,, -server,_SERVER_HOST:-10,,,,,BLANK,,,,BLANK,,BLANK,,BLANK,
+0,server missing argument, -section,, -server,,,,,,BLANK,,,,BLANK,,BLANK,,BLANK,
+0,server with default port, -section,, -server,_SERVER_HOST,,,,,BLANK,,,,BLANK,,BLANK,,BLANK,
+0,server port bad syntax: leading garbage, -section,, -server,_SERVER_HOST:x/+80,,,,,BLANK,,,,BLANK,,BLANK,,BLANK,
+0,server port bad synatx: trailing garbage, -section,, -server,_SERVER_HOST:_SERVER_PORT+/x.,,,,,BLANK,,,,BLANK,,BLANK,,BLANK,
+0,server with wrong port, -section,, -server,_SERVER_HOST:999,,,,,BLANK,,,,-msg_timeout,1,BLANK,,BLANK,
+TBD,server IP address with TLS port, -section,, -server,_SERVER_IP:_SERVER_TLS,,,,,BLANK,,,,BLANK,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,,,
+0,proxy port bad syntax: leading garbage, -section,, -server,_SERVER_HOST:_SERVER_PORT, -proxy,127.0.0.1:x*/8888, -no_proxy,nonmatch.com,BLANK,,,,-msg_timeout,1,BLANK,,BLANK,
+0,proxy port out of range, -section,, -server,_SERVER_HOST:_SERVER_PORT, -proxy,127.0.0.1:65536, -no_proxy,nonmatch.com,BLANK,,,,-msg_timeout,1,BLANK,,BLANK,
+0,proxy default port, -section,, -server,_SERVER_HOST:_SERVER_PORT, -proxy,127.0.0.1, -no_proxy,nonmatch.com,BLANK,,,,-msg_timeout,1,BLANK,,BLANK,
+0,proxy missing argument, -section,, -server,_SERVER_HOST:_SERVER_PORT, -proxy,, -no_proxy,nonmatch.com,BLANK,,,,BLANK,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,,,
+1,path explicit, -section,, -server,_SERVER_HOST:_SERVER_PORT,,,,,BLANK,, -path,_SERVER_PATH,BLANK,,BLANK,,BLANK,
+1,path overrides -server path, -section,, -server,_SERVER_HOST:_SERVER_PORT/ignored,,,,,BLANK,, -path,_SERVER_PATH,BLANK,,BLANK,,BLANK,
+1,path default -server path, -section,, -server,_SERVER_HOST:_SERVER_PORT/_SERVER_PATH,,,,,BLANK,, -path,"""",BLANK,,BLANK,,BLANK,
+0,path missing argument, -section,,,,,,,,BLANK,, -path,,BLANK,,BLANK,,BLANK,
+0,path wrong, -section,,,,,,,,BLANK,, -path,/publicweb/cmp/example,BLANK,,BLANK,,BLANK,
+1,path with additional '/'s fine according to RFC 3986, -section,,,,,,,,BLANK,, -path,/_SERVER_PATH////,BLANK,,BLANK,,BLANK,
+0,path mixed case, -section,,,,,,,,BLANK,, -path,pKiX/,BLANK,,BLANK,,BLANK,
+0,path upper case, -section,,,,,,,,BLANK,, -path,PKIX/,BLANK,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,,,
+0,msg_timeout missing argument, -section,,,,,,,,BLANK,,,, -msg_timeout,,BLANK,,BLANK,
+0,msg_timeout negative, -section,,,,,,,,BLANK,,,, -msg_timeout,-5,BLANK,,BLANK,
+1,msg_timeout 5, -section,,,,,,,,BLANK,,,, -msg_timeout,5,BLANK,,BLANK,
+1,msg_timeout 0, -section,,,,,,,,BLANK,,,, -msg_timeout,0,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,,,
+0,total_timeout missing argument, -section,,,,,,,,BLANK,,,,BLANK,, -total_timeout,,BLANK,
+0,total_timeout negative, -section,,,,,,,,BLANK,,,,BLANK,, -total_timeout,-5,BLANK,
+1,total_timeout 10, -section,,,,,,,,BLANK,,,,BLANK,, -total_timeout,10,BLANK,
+1,total_timeout 0, -section,,,,,,,,BLANK,,,,BLANK,, -total_timeout,0,BLANK,
+,,,,,,,,,,,,,,,,,,,
+0,keep_alive missing argument, -section,,,,,,,,BLANK,,,,BLANK,,BLANK,, -keep_alive,
+0,keep_alive negative, -section,,,,,,,,BLANK,,,,BLANK,,BLANK,, -keep_alive,-1
+1,keep_alive 0, -section,,,,,,,,BLANK,,,,BLANK,,BLANK,, -keep_alive,0
+1,keep_alive 1, -section,,,,,,,,BLANK,,,,BLANK,,BLANK,, -keep_alive,1
+1,keep_alive 2, -section,,,,,,,,BLANK,,,,BLANK,,BLANK,, -keep_alive,2
+0,keep_alive 3, -section,,,,,,,,BLANK,,,,BLANK,,BLANK,, -keep_alive,3
diff --git a/test/recipes/80-test_cmp_http_data/test_credentials.csv b/test/recipes/80-test_cmp_http_data/test_credentials.csv
new file mode 100644
index 000000000000..ce508a101db6
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/test_credentials.csv
@@ -0,0 +1,46 @@
+expected,description, -section,val, -ref,val, -secret,val, -cert,val, -key,val, -keypass,val, -extracerts,val, BLANK, BLANK, -digest,val, -unprotected_requests,noarg
+,,,,,,,,,,,,,,,,,,,,,,
+1,valid secret - wrong cert/key ignored, -section,, -ref,_PBM_REF, -secret,_PBM_SECRET, -cert,root.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,-server,_SERVER_HOST:_PBM_PORT,-expect_sender,""""
+0,secret missing arg, -section,,BLANK,, -secret,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,
+0,wrong secret without ref, -section,,BLANK,, -secret,pass:wrong,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,
+0,wrong secret - correct cert, -section,,BLANK,, -secret,pass:wrong, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,-server,_SERVER_HOST:_PBM_PORT,-expect_sender,""""
+,,,,,,,,,,,,,,,,,,,,,,
+0,ref missing arg, -section,, -ref,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,
+1,empty ref but correct cert, -section,, -ref,"""",BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+1,wrong ref but correct cert, -section,, -ref,wrong,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,,,,,,
+1,valid cert and key and keypass, -section,,BLANK,,-secret,"""", -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,cert missing arg, -section,,BLANK,,BLANK,, -cert,, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,key missing arg, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,keypass missing arg, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,,BLANK,,BLANK,,BLANK,,BLANK,
+0,keypass empty string, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:,BLANK,,BLANK,,BLANK,,BLANK,
+1,keypass no prefix, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,keypass prefix wrong, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,wrong keypass, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:123456,BLANK,,BLANK,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,,,,,,
+0,no cert, -section,,BLANK,,BLANK,,BLANK,, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,no key, -section,,BLANK,,BLANK,, -cert,signer.crt,BLANK,, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,no keypass, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,
+0,wrong cert, -section,,BLANK,,BLANK,, -cert,trusted.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,cert file does not exist, -section,,BLANK,,BLANK,, -cert,idontexist, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,cert file random content, -section,,BLANK,,BLANK,, -cert,random.bin, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,empty cert file, -section,,BLANK,,BLANK,, -cert,empty.txt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,key file random content, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,random.bin, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+0,random keypass file, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,file:random.bin,BLANK,,BLANK,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,,,,,,
+1,correct extraCerts, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345, -extracerts,issuing.crt,BLANK,,BLANK,,BLANK,
+1,extracerts big file, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345, -extracerts,big_issuing.crt,BLANK,,BLANK,,BLANK,
+0,extracerts missing arg, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345, -extracerts,,BLANK,,BLANK,,BLANK,
+0,extracerts empty file, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345, -extracerts,empty.txt,BLANK,,BLANK,,BLANK,
+0,extracerts random content, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345, -extracerts,random.bin,BLANK,,BLANK,,BLANK,
+0,extracerts file does not exist, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345, -extracerts,idontexist,BLANK,,BLANK,,BLANK,
+,,,,,,,,,,,,,,,,,,,,,,
+1,default sha256, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,,BLANK,,BLANK,
+1,digest sha256, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,, -digest,sha256,BLANK,
+1,digest sha512, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,, -digest,sha512,BLANK,
+0,digest missing arg, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,, -digest,,BLANK,
+0,digest non-existing, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,, -digest,idontexist,BLANK,
+0,digest obsolete, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,, -digest,md2,BLANK,
+0,multiple digests, -section,,BLANK,,BLANK,, -cert,signer.crt, -key,signer.p12, -keypass,pass:12345,BLANK,,BLANK,, -digest,sha256 sha512,BLANK,
+,,,,,,,,,,,,,,,,,,,,,,
+0,unprotected request, -section,,BLANK,,BLANK,, -cert,"""", -key,"""", -keypass,"""",BLANK,,BLANK,,BLANK,, -unprotected_requests,
diff --git a/test/recipes/80-test_cmp_http_data/test_enrollment.csv b/test/recipes/80-test_cmp_http_data/test_enrollment.csv
new file mode 100644
index 000000000000..83b8ecda37ad
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/test_enrollment.csv
@@ -0,0 +1,114 @@
+expected,description, -section,val, -cmd,val, -newkey,val,val, -newkeypass,val, -subject,val, -issuer,val, -days,int, -reqexts,val, -sans,spec, -san_nodefault,noarg, -popo,int, -implicit_confirm,noarg, -disable_confirm,noarg, -certout,val,val2, -out_trusted,val,val2, -oldcert,val, -csr,val, -revreason,val
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Misc,request options:,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,newkey, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkey.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,newkey missing arg, -section,, -cmd,ir, -newkey,,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkey1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,newkey is directory, -section,, -cmd,ir, -newkey,dir/,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkey2.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,newkey too many parameters, -section,, -cmd,ir, -newkey,abc,def, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkey3.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,newkey is an RSA key, -section,, -cmd,ir, -newkey,test.RSA2048.pem,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkey4.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,newkeypass, -section,, -cmd,ir, -newkey,new_pass_12345.key,, -newkeypass,pass:12345,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,read newkeypass from file, -section,, -cmd,ir, -newkey,new_pass_12345.key,, -newkeypass,file:12345.txt,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass_file.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,newkeypass no prefix, -section,, -cmd,ir, -newkey,new_pass_12345.key,, -newkeypass,12345,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass_no_prefix.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,no newkeypass, -section,, -cmd,ir, -newkey,new_pass_12345.key,,BLANK,,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,missing newkeypass parameter, -section,, -cmd,ir, -newkey,new_pass_12345.key,, -newkeypass,,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass2.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,colon missing and no passwd, -section,, -cmd,ir, -newkey,new_pass_12345.key,, -newkeypass,pass,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass3.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,newkeypass double colon, -section,, -cmd,ir, -newkey,new_pass_12345.key,, -newkeypass,pass::12345,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass4.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,newkeypass double passwd, -section,, -cmd,ir, -newkey,new_pass_12345.key,, -newkeypass,pass:12345:12345,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass5.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,newkeypass wrongfile, -section,, -cmd,ir, -newkey,new_pass_12345.key,, -newkeypass,file:random.bin,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass6.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,wrong password for encrypted pem, -section,, -cmd,ir, -newkey,cmp --help ,, -newkeypass,pass:wrong,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass7.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,newkeypass ignored, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,abcdefghijklmnop,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass_ignored.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,newkeypass invalid, -section,, -cmd,ir, -newkey,new_pass_12345.key,, -newkeypass,fp:4,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_newkeypass8.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+0,subject argument missing, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:, -subject,BLANK,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_subject1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,issuer, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,, -issuer,_CA_DN,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_issuer.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,issuer missing arg, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,, -issuer,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_issuer1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,days 1, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,, -days,1,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_days.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,days 0, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,, -days,0,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_days_zero.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,days 365*100 beyond 2038, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,, -days,36500,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_days_far_future.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,days missing arg, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,, -days,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_days1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,days negative, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,, -days,-10,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_days2.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,days no not integer, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,, -days,1.5,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_days3.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,days out of range, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,, -days,0x10000000000000000,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_days4.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,reqexts, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,, -reqexts,reqexts,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_reqexts.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,reqexts missing arg, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,, -reqexts,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_reqexts1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,reqexts non-exisitng section, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,, -reqexts,invalid,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_reqexts2.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,reqexts malformed section, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,, -reqexts,reqexts_invalidkey,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_reqexts3.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,reqexts and sans, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,, -reqexts,reqexts, -sans,localhost,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_reqexts4.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,sans 1 dns, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,,BLANK,, -sans,localhost,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_sans_dns.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,sans 1 dns critical, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,,BLANK,, -sans,localhost critical,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_sans_dns_critical.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,sans critical, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,,BLANK,, -sans,critical,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_sans_critical.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,sans 2 dns, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,,BLANK,, -sans,localhost test,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_sans_two_dns.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,sans 1 dns 1 ip, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,,BLANK,, -sans,localhost 127.0.0.1,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_sans_dns_ip.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,sans 2 ip, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,,BLANK,, -sans,127.0.0.1 1.2.3.4,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_sans_two_ip.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,sans 1 uri, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,,BLANK,, -sans,https://www.sample.com,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_sans_uri.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,san_nodefault, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,,BLANK,, -sans,127.0.0.1 1.2.3.4, -san_nodefault,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_sans_nodefault.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+1,san default via oldcert, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,,,BLANK,, -sans,127.0.0.1 1.2.3.4,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_sans_default.pem,, -out_trusted,root.crt,, -oldcert,_RESULT_DIR/test.certout_newkey.pem,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,popo SIGNATURE, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -popo,1,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_popo.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,popo RAVERIFIED, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -popo,0,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_popo1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,popo missing arg, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -popo,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_popo2.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,popo too large, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -popo,3,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_popo3.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,popo too small, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -popo,-3,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_popo4.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,popo NONE, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -popo,-1,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_popo5.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,popo KEYENC not supported, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -popo,2,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_popo6.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,implicit_confirm, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -implicit_confirm,,BLANK,, -certout,_RESULT_DIR/test.certout_implicit.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,implicit_confirm with parameter, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -implicit_confirm,abc,BLANK,, -certout,_RESULT_DIR/test.certout_implicit1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,disable_confirm, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -disable_confirm,, -certout,_RESULT_DIR/test.certout_disable.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,disable_confirm with parameter, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -disable_confirm,abc, -certout,_RESULT_DIR/test.certout_disable1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+0,no certout, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,"""",, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,certout missing arg, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,certout too many parameters, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,abc,def, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,no out_trusted, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted.pem,,BLANK,,,BLANK,,BLANK,,,
+1,out_trusted bigcert, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted_big.pem,, -out_trusted,big_root.crt,,BLANK,,BLANK,,,
+0,out_trusted missing arg, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted1.pem,, -out_trusted,,,BLANK,,BLANK,,,
+0,out_trusted is directory, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted2.pem,, -out_trusted,dir/,,BLANK,,BLANK,,,
+0,out_trusted too many parameters, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted3.pem,, -out_trusted,abc,def,BLANK,,BLANK,,,
+0,out_trusted empty certificate file, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted4.pem,, -out_trusted,empty.txt,,BLANK,,BLANK,,,
+1,out_trusted accept issuing ca cert even with CRL check enabled by default, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted5.pem,, -out_trusted,issuing.crt,,BLANK,,BLANK,,,-partial_chain,-crl_check,-srvcert,server.crt
+0,out_trusted expired issuing ca cert, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted5.pem,, -out_trusted,issuing_expired.crt,,BLANK,,BLANK,,,-partial_chain
+0,out_trusted expired root ca cert, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted5.pem,, -out_trusted,root_expired.crt,,BLANK,,BLANK,,,
+0,out_trusted wrong ca, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted6.pem,, -out_trusted,signer.crt,,BLANK,,BLANK,,,
+0,out_trusted random input, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_out_trusted7.pem,, -out_trusted,random.bin,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,oldcert ignored, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_oldcert.pem,, -out_trusted,root.crt,, -oldcert,_RESULT_DIR/test.certout_newkey.pem,BLANK,,,
+0,oldcert missing arg, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_oldcert1.pem,, -out_trusted,root.crt,, -oldcert,,BLANK,,,
+0,oldcert non existing file, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_oldcert3.pem,, -out_trusted,root.crt,, -oldcert,idontexist,BLANK,,,
+0,oldcert empty file, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_oldcert4.pem,, -out_trusted,root.crt,, -oldcert,empty.txt,BLANK,,,
+0,oldcert random contents, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_oldcert5.pem,, -out_trusted,root.crt,, -oldcert,random.bin,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,pkcs10 converted to ir with privkey, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_csr1.pem,, -out_trusted,root.crt,,BLANK,, -csr,csr.pem,,
+0,pkcs10 converted to ir with pubkey with popo SIGNATURE, -section,, -cmd,ir, -newkey,new_pub.key,, BLANK,,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_csr2.pem,, -out_trusted,root.crt,,BLANK,, -csr,csr.pem,,
+0,pkcs10 converted to ir with pubkey with popo RAVERIFIED, -section,, -cmd,ir, -newkey,new_pub.key,, BLANK,,,,BLANK,,BLANK,,BLANK,,BLANK,, -popo,0,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_csr3.pem,, -out_trusted,root.crt,,BLANK,, -csr,csr.pem,,
+0,pkcs10 converted to ir without -newkey, -section,, -cmd,ir, -newkey,"""",, BLANK,,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_csr4.pem,, -out_trusted,root.crt,,BLANK,, -csr,csr.pem,,
+1,p10cr csr present, -section,, -cmd,p10cr,BLANK,,, BLANK,,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_p10cr.pem,, -out_trusted,root.crt,,BLANK,, -csr,csr.pem,,
+0,p10cr csr missing, -section,, -cmd,p10cr, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_p10cr1.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+0,p10cr csr missing arg, -section,, -cmd,p10cr, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_p10cr2.pem,, -out_trusted,root.crt,,BLANK,, -csr,,,
+0,p10cr csr non-existing file, -section,, -cmd,p10cr, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_p10cr3.pem,, -out_trusted,root.crt,,BLANK,, -csr,idontexist,,
+0,p10cr csr empty file, -section,, -cmd,p10cr, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_p10cr4.pem,, -out_trusted,root.crt,,BLANK,, -csr,empty.txt,,
+TODO,p10cr wrong csr, -section,, -cmd,p10cr, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_p10cr5.pem,, -out_trusted,root.crt,,BLANK,, -csr,wrong_csr.pem,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,ir + ignored revocation, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_revreason.pem,, -out_trusted,root.crt,,BLANK,,,, -revreason,5
+0,ir + invalid revreason, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_revreason1.pem,, -out_trusted,root.crt,,BLANK,,,, -revreason,11
+0,ir + revreason not an integer, -section,, -cmd,ir, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_revreason2.pem,, -out_trusted,root.crt,,BLANK,,,, -revreason,abc
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,cr, -section,, -cmd,cr, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_cr.pem,, -out_trusted,root.crt,,BLANK,,BLANK,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,kur explicit options, -section,, -cmd,kur, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur.pem,, -out_trusted,root.crt,, -oldcert,_RESULT_DIR/test.certout_newkey.pem,BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT, -cert,_RESULT_DIR/test.certout_newkey.pem, -key,new.key, -extracerts,issuing.crt
+1,kur minimal options, -section,, -cmd,kur,BLANK,,BLANK,, -subject,"""",BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur_minimal.pem,,BLANK,,, -oldcert,"""",BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT, -cert,_RESULT_DIR/test.certout_newkey.pem, -key,new.key, -extracerts,issuing.crt, -secret,""""
+0,kur newkey value missing, -section,, -cmd,kur, -newkey,,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur1.pem,, -out_trusted,root.crt,, -oldcert,_RESULT_DIR/test.certout_newkey.pem,BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT
+0,kur newkey is directory, -section,, -cmd,kur, -newkey,dir/,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur2.pem,, -out_trusted,root.crt,, -oldcert,_RESULT_DIR/test.certout_newkey.pem,BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT
+0,kur newkey parameter count no match, -section,, -cmd,kur, -newkey,abc,def, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur3.pem,, -out_trusted,root.crt,, -oldcert,_RESULT_DIR/test.certout_newkey.pem,BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT
+0,kur newkey missing argument, -section,, -cmd,kur, -newkey,BLANK,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur4.pem,, -out_trusted,root.crt,, -oldcert,_RESULT_DIR/test.certout_newkey.pem,BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT
+0,kur oldcert not existing, -section,, -cmd,kur, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur6.pem,, -out_trusted,root.crt,, -oldcert,idontexist,BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT
+0,kur wrong oldcert, -section,, -cmd,kur, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur6.pem,, -out_trusted,root.crt,, -oldcert,root.crt,BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT
+0,kur empty oldcert file, -section,, -cmd,kur, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur7.pem,, -out_trusted,root.crt,, -oldcert,empty.txt,BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT
+0,kur without cert and oldcert, -section,, -cmd,kur, -newkey,new.key,, -newkeypass,pass:,,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,,BLANK,, -certout,_RESULT_DIR/test.certout_kur8.pem,, -out_trusted,root.crt,, -cert,"""",BLANK,,,,,-server,_SERVER_HOST:_KUR_PORT
diff --git a/test/recipes/80-test_cmp_http_data/test_verification.csv b/test/recipes/80-test_cmp_http_data/test_verification.csv
new file mode 100644
index 000000000000..ad28108be25c
--- /dev/null
+++ b/test/recipes/80-test_cmp_http_data/test_verification.csv
@@ -0,0 +1,50 @@
+expected,description, -section,val, -recipient,val, -expect_sender,val, -srvcert,val, -trusted,val, -untrusted,val, -ignore_keyusage, -unprotected_errors, -extracertsout,val,val2, -opt1,arg1, -opt2,arg2, -opt3,arg3
+,,,,,Recipient,options:,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,
+1,default test, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,
+0,recipient missing arg, -section,, -recipient,,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+1,unknown attribute in recipient name, -section,, -recipient,_CA_DN/ABC=123,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,wrong syntax in recipient name: trailing double '/' after value, -section,, -recipient,_CA_DN//,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,wrong syntax in recipient name: missing '=', -section,, -recipient,/CDE,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,wrong syntax in recipient name: C too long, -section,, -recipient,/CN=ECC Issuing CA v10/OU=For test purpose only/O=CMPforOpenSSL/C=DEE,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,
+1,config default with expected sender, -section,, -recipient,_CA_DN, -expect_sender,_SERVER_DN,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,expected sender missing arg, -section,, -recipient,_CA_DN, -expect_sender,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,wrong expected sender, -section,, -recipient,_CA_DN, -expect_sender,/CN=Sample Cert/OU=R&D/O=Company Ltd./L=Dublin 4/C=IE,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+1,unknown attribute in expected sender, -section,, -recipient,_CA_DN, -expect_sender,_SERVER_DN/ABC=123,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,extra attribute in expected sender, -section,, -recipient,_CA_DN, -expect_sender,_SERVER_DN/serialNumber=123,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,double attribute in expected sender, -section,, -recipient,_CA_DN, -expect_sender,/CN=ECC Issuing CA v10_SERVER_DN,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,missing attribute in expected sender, -section,, -recipient,_CA_DN, -expect_sender,/CN=ECC Issuing CA v10/OU=For test purpose only/C=DE,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,bad syntax in expected sender name: leading double '/', -section,, -recipient,_CA_DN, -expect_sender,//_CA_DN,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,bad syntax in expected sender name: trailing double '/', -section,, -recipient,_CA_DN, -expect_sender,_CA_DN//,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,bad syntax in expected sender name: missing '=', -section,, -recipient,_CA_DN, -expect_sender,/C=DE/CN=ECC Issuing CA v10/OU=For test purpose only/OCMPforOpenSSL,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,expected sender empty attributes, -section,, -recipient,_CA_DN, -expect_sender,/CN=/OU=/O=/C=,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,
+1,explicit srvcert, -section,,,,BLANK,, -srvcert,_SERVER_CERT, -trusted,"""",BLANK,,,, -unprotected_errors,BLANK,,,,,,,,
+0,srvcert missing arg, -section,, -recipient,"""",BLANK,, -srvcert,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,wrong srvcert, -section,, -recipient,"""",BLANK,, -srvcert,signer.crt, -trusted,"""",BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,srvcert is empty file, -section,, -recipient,"""",BLANK,, -srvcert,empty.txt, -trusted,"""",BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,srvcert random content, -section,, -recipient,"""",BLANK,, -srvcert,random.bin, -trusted,"""",BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,
+1,no -trusted but srvcert, -section,, -recipient,_CA_DN,BLANK,, -srvcert,_SERVER_CERT,BLANK,,BLANK,,, -unprotected_errors,BLANK,,,,,,,,
+0,trusted missing arg, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,wrong trusted cert, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,signer.crt,BLANK,,BLANK, -unprotected_errors,BLANK, -secret,"""", -cert,signer.crt, -key,signer.p12, -keypass,pass:12345
+0,trusted empty file, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,empty.txt,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,trusted random file, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,random.bin,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,trusted file does not exist, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,idontexist,BLANK,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,
+0,untrusted missing arg, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt, -untrusted,,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,untrusted empty file, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt, -untrusted,empty.txt,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,untrusted random file, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt, -untrusted,random.bin,BLANK, -unprotected_errors,BLANK,,,,,,,,
+0,untrusted file does not exist, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt, -untrusted,idontexist,BLANK, -unprotected_errors,BLANK,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,
+1,ignore key usage, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,, -ignore_keyusage, -unprotected_errors,BLANK,,,,,,,,
+0,ignorekeyusage with parameter, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,, -unprotected_errors,BLANK, -ignore_keyusage,1,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,
+1,no unprotected errors - no errors, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK,BLANK,BLANK,,,,,,,,
+0,unprotected_errors with parameter, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK,BLANK,BLANK,,, -unprotected_errors,123,,,,
+,,,,,,,,,,,,,,,,,,,,,,,,,
+1,extracertsout, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors, -extracertsout,_RESULT_DIR/test.extracerts.pem,,,,,,,
+0,extracertsout no parameter, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors, -extracertsout,,,,,,,,
+0,extracertsout multiple arguments, -section,, -recipient,_CA_DN,BLANK,,BLANK,, -trusted,trusted.crt,BLANK,,BLANK, -unprotected_errors, -extracertsout,abc,def,,,,,,
diff --git a/test/recipes/80-test_cms.t b/test/recipes/80-test_cms.t
new file mode 100644
index 000000000000..31f9fbd1280a
--- /dev/null
+++ b/test/recipes/80-test_cms.t
@@ -0,0 +1,1071 @@
+#! /usr/bin/env perl
+# Copyright 2015-2023 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
+
+
+use strict;
+use warnings;
+
+use POSIX;
+use File::Spec::Functions qw/catfile/;
+use File::Compare qw/compare_text compare/;
+use OpenSSL::Test qw/:DEFAULT srctop_dir srctop_file bldtop_dir bldtop_file with data_file/;
+
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_cms");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan skip_all => "CMS is not supported by this OpenSSL build"
+ if disabled("cms");
+
+my $provpath = bldtop_dir("providers");
+
+# Some tests require legacy algorithms to be included.
+my @legacyprov = ("-provider-path", $provpath,
+ "-provider", "default",
+ "-provider", "legacy" );
+my @defaultprov = ("-provider-path", $provpath,
+ "-provider", "default");
+
+my @config = ( );
+my $provname = 'default';
+
+my $datadir = srctop_dir("test", "recipes", "80-test_cms_data");
+my $smdir = srctop_dir("test", "smime-certs");
+my $smcont = srctop_file("test", "smcont.txt");
+my $smcont_zero = srctop_file("test", "smcont_zero.txt");
+my ($no_des, $no_dh, $no_dsa, $no_ec, $no_ec2m, $no_rc2, $no_zlib)
+ = disabled qw/des dh dsa ec ec2m rc2 zlib/;
+
+$no_rc2 = 1 if disabled("legacy");
+
+plan tests => 19;
+
+ok(run(test(["pkcs7_test"])), "test pkcs7");
+
+unless ($no_fips) {
+ @config = ( "-config", srctop_file("test", "fips-and-base.cnf") );
+ $provname = 'fips';
+}
+
+$ENV{OPENSSL_TEST_LIBCTX} = "1";
+my @prov = ("-provider-path", $provpath,
+ @config,
+ "-provider", $provname);
+
+my $smrsa1024 = catfile($smdir, "smrsa1024.pem");
+my $smrsa1 = catfile($smdir, "smrsa1.pem");
+my $smroot = catfile($smdir, "smroot.pem");
+
+my @smime_pkcs7_tests = (
+
+ [ "signed content DER format, RSA key",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER", "-nodetach",
+ "-certfile", $smroot, "-signer", $smrsa1, "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed detached content DER format, RSA key",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
+ "-signer", $smrsa1, "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt",
+ "-content", $smcont ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming BER format, RSA",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER", "-nodetach",
+ "-stream",
+ "-signer", $smrsa1, "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content DER format, DSA key",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER", "-nodetach",
+ "-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed detached content DER format, DSA key",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
+ "-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt",
+ "-content", $smcont ],
+ \&final_compare
+ ],
+
+ [ "signed detached content DER format, add RSA signer (with DSA existing)",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
+ "-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
+ [ "{cmd1}", @prov, "-resign", "-in", "{output}.cms", "-inform", "DER", "-outform", "DER",
+ "-signer", $smrsa1, "-out", "{output}2.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}2.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt",
+ "-content", $smcont ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming BER format, DSA key",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
+ "-nodetach", "-stream",
+ "-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming BER format, 2 DSA and 2 RSA keys",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
+ "-nodetach", "-stream",
+ "-signer", $smrsa1,
+ "-signer", catfile($smdir, "smrsa2.pem"),
+ "-signer", catfile($smdir, "smdsa1.pem"),
+ "-signer", catfile($smdir, "smdsa2.pem"),
+ "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, no attributes",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
+ "-noattr", "-nodetach", "-stream",
+ "-signer", $smrsa1,
+ "-signer", catfile($smdir, "smrsa2.pem"),
+ "-signer", catfile($smdir, "smdsa1.pem"),
+ "-signer", catfile($smdir, "smdsa2.pem"),
+ "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content S/MIME format, RSA key SHA1",
+ [ "{cmd1}", @defaultprov, "-sign", "-in", $smcont, "-md", "sha1",
+ "-certfile", $smroot,
+ "-signer", $smrsa1, "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed zero-length content S/MIME format, RSA key SHA1",
+ [ "{cmd1}", @defaultprov, "-sign", "-in", $smcont_zero, "-md", "sha1",
+ "-certfile", $smroot, "-signer", $smrsa1, "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&zero_compare
+ ],
+
+ [ "signed content test streaming S/MIME format, 2 DSA and 2 RSA keys",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-nodetach",
+ "-signer", $smrsa1,
+ "-signer", catfile($smdir, "smrsa2.pem"),
+ "-signer", catfile($smdir, "smdsa1.pem"),
+ "-signer", catfile($smdir, "smdsa2.pem"),
+ "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming multipart S/MIME format, 2 DSA and 2 RSA keys",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont,
+ "-signer", $smrsa1,
+ "-signer", catfile($smdir, "smrsa2.pem"),
+ "-signer", catfile($smdir, "smdsa1.pem"),
+ "-signer", catfile($smdir, "smdsa2.pem"),
+ "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, DES, 3 recipients",
+ [ "{cmd1}", @defaultprov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ $smrsa1,
+ catfile($smdir, "smrsa2.pem"),
+ catfile($smdir, "smrsa3.pem") ],
+ [ "{cmd2}", @defaultprov, "-decrypt", "-recip", $smrsa1,
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, DES, 3 recipients, 3rd used",
+ [ "{cmd1}", @defaultprov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ $smrsa1,
+ catfile($smdir, "smrsa2.pem"),
+ catfile($smdir, "smrsa3.pem") ],
+ [ "{cmd2}", @defaultprov, "-decrypt", "-recip", catfile($smdir, "smrsa3.pem"),
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, DES, 3 recipients, cert and key files used",
+ [ "{cmd1}", @defaultprov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ $smrsa1,
+ catfile($smdir, "smrsa2.pem"),
+ catfile($smdir, "smrsa3-cert.pem") ],
+ [ "{cmd2}", @defaultprov, "-decrypt",
+ "-recip", catfile($smdir, "smrsa3-cert.pem"),
+ "-inkey", catfile($smdir, "smrsa3-key.pem"),
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, AES-256 cipher, 3 recipients",
+ [ "{cmd1}", @prov, "-encrypt", "-in", $smcont,
+ "-aes256", "-stream", "-out", "{output}.cms",
+ $smrsa1,
+ catfile($smdir, "smrsa2.pem"),
+ catfile($smdir, "smrsa3.pem") ],
+ [ "{cmd2}", @prov, "-decrypt", "-recip", $smrsa1,
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+);
+
+my @smime_cms_tests = (
+
+ [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, keyid",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
+ "-nodetach", "-keyid",
+ "-signer", $smrsa1,
+ "-signer", catfile($smdir, "smrsa2.pem"),
+ "-signer", catfile($smdir, "smdsa1.pem"),
+ "-signer", catfile($smdir, "smdsa2.pem"),
+ "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming PEM format, 2 DSA and 2 RSA keys",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "PEM", "-nodetach",
+ "-signer", $smrsa1,
+ "-signer", catfile($smdir, "smrsa2.pem"),
+ "-signer", catfile($smdir, "smdsa1.pem"),
+ "-signer", catfile($smdir, "smdsa2.pem"),
+ "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "PEM",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content MIME format, RSA key, signed receipt request",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-nodetach",
+ "-signer", $smrsa1,
+ "-receipt_request_to", "test\@openssl.org", "-receipt_request_all",
+ "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed receipt MIME format, RSA key",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-nodetach",
+ "-signer", $smrsa1,
+ "-receipt_request_to", "test\@openssl.org", "-receipt_request_all",
+ "-out", "{output}.cms" ],
+ [ "{cmd1}", @prov, "-sign_receipt", "-in", "{output}.cms",
+ "-signer", catfile($smdir, "smrsa2.pem"), "-out", "{output}2.cms" ],
+ [ "{cmd2}", @prov, "-verify_receipt", "{output}2.cms", "-in", "{output}.cms",
+ "-CAfile", $smroot ]
+ ],
+
+ [ "enveloped content test streaming S/MIME format, DES, 3 recipients, keyid",
+ [ "{cmd1}", @defaultprov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms", "-keyid",
+ $smrsa1,
+ catfile($smdir, "smrsa2.pem"),
+ catfile($smdir, "smrsa3.pem") ],
+ [ "{cmd2}", @defaultprov, "-decrypt", "-recip", $smrsa1,
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming PEM format, AES-256-CBC cipher, KEK",
+ [ "{cmd1}", @prov, "-encrypt", "-in", $smcont, "-outform", "PEM", "-aes128",
+ "-stream", "-out", "{output}.cms",
+ "-secretkey", "000102030405060708090A0B0C0D0E0F",
+ "-secretkeyid", "C0FEE0" ],
+ [ "{cmd2}", @prov, "-decrypt", "-in", "{output}.cms", "-out", "{output}.txt",
+ "-inform", "PEM",
+ "-secretkey", "000102030405060708090A0B0C0D0E0F",
+ "-secretkeyid", "C0FEE0" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming PEM format, AES-256-GCM cipher, KEK",
+ [ "{cmd1}", @prov, "-encrypt", "-in", $smcont, "-outform", "PEM", "-aes-128-gcm",
+ "-stream", "-out", "{output}.cms",
+ "-secretkey", "000102030405060708090A0B0C0D0E0F",
+ "-secretkeyid", "C0FEE0" ],
+ [ "{cmd2}", "-decrypt", "-in", "{output}.cms", "-out", "{output}.txt",
+ "-inform", "PEM",
+ "-secretkey", "000102030405060708090A0B0C0D0E0F",
+ "-secretkeyid", "C0FEE0" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming PEM format, KEK, key only",
+ [ "{cmd1}", @prov, "-encrypt", "-in", $smcont, "-outform", "PEM", "-aes128",
+ "-stream", "-out", "{output}.cms",
+ "-secretkey", "000102030405060708090A0B0C0D0E0F",
+ "-secretkeyid", "C0FEE0" ],
+ [ "{cmd2}", @prov, "-decrypt", "-in", "{output}.cms", "-out", "{output}.txt",
+ "-inform", "PEM",
+ "-secretkey", "000102030405060708090A0B0C0D0E0F" ],
+ \&final_compare
+ ],
+
+ [ "data content test streaming PEM format",
+ [ "{cmd1}", @prov, "-data_create", "-in", $smcont, "-outform", "PEM",
+ "-nodetach", "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-data_out", "-in", "{output}.cms", "-inform", "PEM",
+ "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "encrypted content test streaming PEM format, 128 bit RC2 key",
+ [ "{cmd1}", @legacyprov, "-EncryptedData_encrypt",
+ "-in", $smcont, "-outform", "PEM",
+ "-rc2", "-secretkey", "000102030405060708090A0B0C0D0E0F",
+ "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @legacyprov, "-EncryptedData_decrypt", "-in", "{output}.cms",
+ "-inform", "PEM",
+ "-secretkey", "000102030405060708090A0B0C0D0E0F",
+ "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "encrypted content test streaming PEM format, 40 bit RC2 key",
+ [ "{cmd1}", @legacyprov, "-EncryptedData_encrypt",
+ "-in", $smcont, "-outform", "PEM",
+ "-rc2", "-secretkey", "0001020304",
+ "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @legacyprov, "-EncryptedData_decrypt", "-in", "{output}.cms",
+ "-inform", "PEM",
+ "-secretkey", "0001020304", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "encrypted content test streaming PEM format, triple DES key",
+ [ "{cmd1}", @prov, "-EncryptedData_encrypt", "-in", $smcont, "-outform", "PEM",
+ "-des3", "-secretkey", "000102030405060708090A0B0C0D0E0F1011121314151617",
+ "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-EncryptedData_decrypt", "-in", "{output}.cms",
+ "-inform", "PEM",
+ "-secretkey", "000102030405060708090A0B0C0D0E0F1011121314151617",
+ "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "encrypted content test streaming PEM format, 128 bit AES key",
+ [ "{cmd1}", @prov, "-EncryptedData_encrypt", "-in", $smcont, "-outform", "PEM",
+ "-aes128", "-secretkey", "000102030405060708090A0B0C0D0E0F",
+ "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-EncryptedData_decrypt", "-in", "{output}.cms",
+ "-inform", "PEM",
+ "-secretkey", "000102030405060708090A0B0C0D0E0F",
+ "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+);
+
+my @smime_cms_cades_tests = (
+
+ [ "signed content DER format, RSA key, CAdES-BES compatible",
+ [ "{cmd1}", @prov, "-sign", "-cades", "-in", $smcont, "-outform", "DER",
+ "-nodetach",
+ "-certfile", $smroot, "-signer", $smrsa1, "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-cades", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content DER format, RSA key, SHA256 md, CAdES-BES compatible",
+ [ "{cmd1}", @prov, "-sign", "-cades", "-md", "sha256", "-in", $smcont, "-outform",
+ "DER", "-nodetach", "-certfile", $smroot,
+ "-signer", $smrsa1, "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-cades", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content DER format, RSA key, SHA512 md, CAdES-BES compatible",
+ [ "{cmd1}", @prov, "-sign", "-cades", "-md", "sha512", "-in", $smcont, "-outform",
+ "DER", "-nodetach", "-certfile", $smroot,
+ "-signer", $smrsa1, "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-cades", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content DER format, RSA key, SHA256 md, CAdES-BES compatible",
+ [ "{cmd1}", @prov, "-sign", "-cades", "-binary", "-nodetach", "-nosmimecap", "-md", "sha256",
+ "-in", $smcont, "-outform", "DER",
+ "-certfile", $smroot, "-signer", $smrsa1,
+ "-outform", "DER", "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-cades", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "resigned content DER format, RSA key, SHA256 md, CAdES-BES compatible",
+ [ "{cmd1}", @prov, "-sign", "-cades", "-binary", "-nodetach", "-nosmimecap", "-md", "sha256",
+ "-in", $smcont, "-outform", "DER",
+ "-certfile", $smroot, "-signer", $smrsa1,
+ "-outform", "DER", "-out", "{output}.cms" ],
+ [ "{cmd1}", @prov, "-resign", "-cades", "-binary", "-nodetach", "-nosmimecap", "-md", "sha256",
+ "-inform", "DER", "-in", "{output}.cms",
+ "-certfile", $smroot, "-signer", catfile($smdir, "smrsa2.pem"),
+ "-outform", "DER", "-out", "{output}2.cms" ],
+
+ [ "{cmd2}", @prov, "-verify", "-cades", "-in", "{output}2.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+);
+
+my @smime_cms_cades_ko_tests = (
+ [ "sign content DER format, RSA key, not CAdES-BES compatible",
+ [ @prov, "-sign", "-in", $smcont, "-outform", "DER", "-nodetach",
+ "-certfile", $smroot, "-signer", $smrsa1, "-out", "{output}.cms" ],
+ "fail to verify token since requiring CAdES-BES compatibility",
+ [ @prov, "-verify", "-cades", "-in", "{output}.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ]
+);
+
+# cades options test - check that some combinations are rejected
+my @smime_cms_cades_invalid_option_tests = (
+ [
+ [ "-cades", "-noattr" ],
+ ],[
+ [ "-verify", "-cades", "-noattr" ],
+ ],[
+ [ "-verify", "-cades", "-noverify" ],
+ ],
+);
+
+my @smime_cms_comp_tests = (
+
+ [ "compressed content test streaming PEM format",
+ [ "{cmd1}", @prov, "-compress", "-in", $smcont, "-outform", "PEM", "-nodetach",
+ "-stream", "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-uncompress", "-in", "{output}.cms", "-inform", "PEM",
+ "-out", "{output}.txt" ],
+ \&final_compare
+ ]
+
+);
+
+my @smime_cms_param_tests = (
+ [ "signed content test streaming PEM format, RSA keys, PSS signature",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "PEM", "-nodetach",
+ "-signer", $smrsa1,
+ "-keyopt", "rsa_padding_mode:pss",
+ "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "PEM",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming PEM format, RSA keys, PSS signature, saltlen=max",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "PEM", "-nodetach",
+ "-signer", $smrsa1,
+ "-keyopt", "rsa_padding_mode:pss", "-keyopt", "rsa_pss_saltlen:max",
+ "-out", "{output}.cms" ],
+ sub { my %opts = @_; rsapssSaltlen("$opts{output}.cms") == 222; },
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "PEM",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming PEM format, RSA keys, PSS signature, no attributes",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "PEM", "-nodetach",
+ "-noattr", "-signer", $smrsa1,
+ "-keyopt", "rsa_padding_mode:pss",
+ "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "PEM",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming PEM format, RSA keys, PSS signature, SHA384 MGF1",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "PEM", "-nodetach",
+ "-signer", $smrsa1,
+ "-keyopt", "rsa_padding_mode:pss", "-keyopt", "rsa_mgf1_md:sha384",
+ "-out", "{output}.cms" ],
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "PEM",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming PEM format, RSA keys, PSS signature, saltlen=16",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "PEM", "-nodetach",
+ "-signer", $smrsa1, "-md", "sha256",
+ "-keyopt", "rsa_padding_mode:pss", "-keyopt", "rsa_pss_saltlen:16",
+ "-out", "{output}.cms" ],
+ sub { my %opts = @_; rsapssSaltlen("$opts{output}.cms") == 16; },
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "PEM",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "signed content test streaming PEM format, RSA keys, PSS signature, saltlen=digest",
+ [ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "PEM", "-nodetach",
+ "-signer", $smrsa1, "-md", "sha256",
+ "-keyopt", "rsa_padding_mode:pss", "-keyopt", "rsa_pss_saltlen:digest",
+ "-out", "{output}.cms" ],
+ # digest is SHA-256, which produces 32 bytes of output
+ sub { my %opts = @_; rsapssSaltlen("$opts{output}.cms") == 32; },
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "PEM",
+ "-CAfile", $smroot, "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, DES, OAEP default parameters",
+ [ "{cmd1}", @defaultprov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ "-recip", $smrsa1,
+ "-keyopt", "rsa_padding_mode:oaep" ],
+ [ "{cmd2}", @defaultprov, "-decrypt", "-recip", $smrsa1,
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, DES, OAEP SHA256",
+ [ "{cmd1}", @defaultprov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ "-recip", $smrsa1,
+ "-keyopt", "rsa_padding_mode:oaep",
+ "-keyopt", "rsa_oaep_md:sha256" ],
+ [ "{cmd2}", @defaultprov, "-decrypt", "-recip", $smrsa1,
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, DES, ECDH",
+ [ "{cmd1}", @defaultprov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ "-recip", catfile($smdir, "smec1.pem") ],
+ [ "{cmd2}", @defaultprov, "-decrypt", "-recip", catfile($smdir, "smec1.pem"),
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, DES, ECDH, 2 recipients, key only used",
+ [ "{cmd1}", @defaultprov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ catfile($smdir, "smec1.pem"),
+ catfile($smdir, "smec3.pem") ],
+ [ "{cmd2}", @defaultprov, "-decrypt", "-inkey", catfile($smdir, "smec3.pem"),
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, ECDH, DES, key identifier",
+ [ "{cmd1}", @defaultprov, "-encrypt", "-keyid", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ "-recip", catfile($smdir, "smec1.pem") ],
+ [ "{cmd2}", @defaultprov, "-decrypt", "-recip", catfile($smdir, "smec1.pem"),
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, ECDH, AES-128-CBC, SHA256 KDF",
+ [ "{cmd1}", @prov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ "-recip", catfile($smdir, "smec1.pem"), "-aes128",
+ "-keyopt", "ecdh_kdf_md:sha256" ],
+ [ "{cmd2}", @prov, "-decrypt", "-recip", catfile($smdir, "smec1.pem"),
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, ECDH, AES-128-GCM cipher, SHA256 KDF",
+ [ "{cmd1}", @prov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ "-recip", catfile($smdir, "smec1.pem"), "-aes-128-gcm", "-keyopt", "ecdh_kdf_md:sha256" ],
+ [ "{cmd2}", "-decrypt", "-recip", catfile($smdir, "smec1.pem"),
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, ECDH, K-283, cofactor DH",
+ [ "{cmd1}", @prov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ "-recip", catfile($smdir, "smec2.pem"), "-aes128",
+ "-keyopt", "ecdh_kdf_md:sha256", "-keyopt", "ecdh_cofactor_mode:1" ],
+ [ "{cmd2}", @prov, "-decrypt", "-recip", catfile($smdir, "smec2.pem"),
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ],
+
+ [ "enveloped content test streaming S/MIME format, X9.42 DH",
+ [ "{cmd1}", @prov, "-encrypt", "-in", $smcont,
+ "-stream", "-out", "{output}.cms",
+ "-recip", catfile($smdir, "smdh.pem"), "-aes128" ],
+ [ "{cmd2}", @prov, "-decrypt", "-recip", catfile($smdir, "smdh.pem"),
+ "-in", "{output}.cms", "-out", "{output}.txt" ],
+ \&final_compare
+ ]
+);
+
+my @contenttype_cms_test = (
+ [ "signed content test - check that content type is added to additional signerinfo, RSA keys",
+ [ "{cmd1}", @prov, "-sign", "-binary", "-nodetach", "-stream", "-in", $smcont,
+ "-outform", "DER", "-signer", $smrsa1, "-md", "SHA256",
+ "-out", "{output}.cms" ],
+ [ "{cmd1}", @prov, "-resign", "-binary", "-nodetach", "-in", "{output}.cms",
+ "-inform", "DER", "-outform", "DER",
+ "-signer", catfile($smdir, "smrsa2.pem"), "-md", "SHA256",
+ "-out", "{output}2.cms" ],
+ sub { my %opts = @_; contentType_matches("$opts{output}2.cms") == 2; },
+ [ "{cmd2}", @prov, "-verify", "-in", "{output}2.cms", "-inform", "DER",
+ "-CAfile", $smroot, "-out", "{output}.txt" ]
+ ],
+);
+
+my @incorrect_attribute_cms_test = (
+ "bad_signtime_attr.cms",
+ "no_ct_attr.cms",
+ "no_md_attr.cms",
+ "ct_multiple_attr.cms"
+);
+
+# Runs a standard loop on the input array
+sub runner_loop {
+ my %opts = ( @_ );
+ my $cnt1 = 0;
+
+ foreach (@{$opts{tests}}) {
+ $cnt1++;
+ $opts{output} = "$opts{prefix}-$cnt1";
+ SKIP: {
+ my $skip_reason = check_availability($$_[0]);
+ skip $skip_reason, 1 if $skip_reason;
+ my $ok = 1;
+ 1 while unlink "$opts{output}.txt";
+
+ foreach (@$_[1..$#$_]) {
+ if (ref $_ eq 'CODE') {
+ $ok &&= $_->(%opts);
+ } else {
+ my @cmd = map {
+ my $x = $_;
+ while ($x =~ /\{([^\}]+)\}/) {
+ $x = $`.$opts{$1}.$' if exists $opts{$1};
+ }
+ $x;
+ } @$_;
+
+ diag "CMD: openssl ", join(" ", @cmd);
+ $ok &&= run(app(["openssl", @cmd]));
+ $opts{input} = $opts{output};
+ }
+ }
+
+ ok($ok, $$_[0]);
+ }
+ }
+}
+
+sub final_compare {
+ my %opts = @_;
+
+ diag "Comparing $smcont with $opts{output}.txt";
+ return compare_text($smcont, "$opts{output}.txt") == 0;
+}
+
+sub zero_compare {
+ my %opts = @_;
+
+ diag "Checking for zero-length file";
+ return (-e "$opts{output}.txt" && -z "$opts{output}.txt");
+}
+
+subtest "CMS => PKCS#7 compatibility tests\n" => sub {
+ plan tests => scalar @smime_pkcs7_tests;
+
+ runner_loop(prefix => 'cms2pkcs7', cmd1 => 'cms', cmd2 => 'smime',
+ tests => [ @smime_pkcs7_tests ]);
+};
+subtest "CMS <= PKCS#7 compatibility tests\n" => sub {
+ plan tests => scalar @smime_pkcs7_tests;
+
+ runner_loop(prefix => 'pkcs72cms', cmd1 => 'smime', cmd2 => 'cms',
+ tests => [ @smime_pkcs7_tests ]);
+};
+
+subtest "CMS <=> CMS consistency tests\n" => sub {
+ plan tests => (scalar @smime_pkcs7_tests) + (scalar @smime_cms_tests);
+
+ runner_loop(prefix => 'cms2cms-1', cmd1 => 'cms', cmd2 => 'cms',
+ tests => [ @smime_pkcs7_tests ]);
+ runner_loop(prefix => 'cms2cms-2', cmd1 => 'cms', cmd2 => 'cms',
+ tests => [ @smime_cms_tests ]);
+};
+
+subtest "CMS <=> CMS consistency tests, modified key parameters\n" => sub {
+ plan tests =>
+ (scalar @smime_cms_param_tests) + (scalar @smime_cms_comp_tests);
+
+ runner_loop(prefix => 'cms2cms-mod', cmd1 => 'cms', cmd2 => 'cms',
+ tests => [ @smime_cms_param_tests ]);
+ SKIP: {
+ skip("Zlib not supported: compression tests skipped",
+ scalar @smime_cms_comp_tests)
+ if $no_zlib;
+
+ runner_loop(prefix => 'cms2cms-comp', cmd1 => 'cms', cmd2 => 'cms',
+ tests => [ @smime_cms_comp_tests ]);
+ }
+};
+
+# Returns the number of matches of a Content Type Attribute in a binary file.
+sub contentType_matches {
+ # Read in a binary file
+ my ($in) = @_;
+ open (HEX_IN, "$in") or die("open failed for $in : $!");
+ binmode(HEX_IN);
+ local $/;
+ my $str = <HEX_IN>;
+
+ # Find ASN1 data for a Content Type Attribute (with a OID of PKCS7 data)
+ my @c = $str =~ /\x30\x18\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x09\x03\x31\x0B\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x07\x01/gs;
+
+ close(HEX_IN);
+ return scalar(@c);
+}
+
+sub rsapssSaltlen {
+ my ($in) = @_;
+ my $exit = 0;
+
+ my @asn1parse = run(app(["openssl", "asn1parse", "-in", $in, "-dump"]),
+ capture => 1,
+ statusvar => $exit);
+ return -1 if $exit != 0;
+
+ my $pssparam_offset = -1;
+ while ($_ = shift @asn1parse) {
+ chomp;
+ next unless /:rsassaPss/;
+ # This line contains :rsassaPss, the next line contains a raw dump of the
+ # RSA_PSS_PARAMS sequence; obtain its offset
+ $_ = shift @asn1parse;
+ if (/^\s*(\d+):/) {
+ $pssparam_offset = int($1);
+ }
+ }
+
+ if ($pssparam_offset == -1) {
+ note "Failed to determine RSA_PSS_PARAM offset in CMS. " +
+ "Was the file correctly signed with RSASSA-PSS?";
+ return -1;
+ }
+
+ my @pssparam = run(app(["openssl", "asn1parse", "-in", $in,
+ "-strparse", $pssparam_offset]),
+ capture => 1,
+ statusvar => $exit);
+ return -1 if $exit != 0;
+
+ my $saltlen = -1;
+ # Can't use asn1parse -item RSA_PSS_PARAMS here, because that's deprecated.
+ # This assumes the salt length is the last field, which may possibly be
+ # incorrect if there is a non-standard trailer field, but there almost never
+ # is in PSS.
+ if ($pssparam[-1] =~ /prim:\s+INTEGER\s+:([A-Fa-f0-9]+)/) {
+ $saltlen = hex($1);
+ }
+
+ if ($saltlen == -1) {
+ note "Failed to determine salt length from RSA_PSS_PARAM struct. " +
+ "Was the file correctly signed with RSASSA-PSS?";
+ return -1;
+ }
+
+ return $saltlen;
+}
+
+subtest "CMS Check the content type attribute is added for additional signers\n" => sub {
+ plan tests => (scalar @contenttype_cms_test);
+
+ runner_loop(prefix => 'cms2cms-added', cmd1 => 'cms', cmd2 => 'cms',
+ tests => [ @contenttype_cms_test ]);
+};
+
+subtest "CMS Check that bad attributes fail when verifying signers\n" => sub {
+ plan tests =>
+ (scalar @incorrect_attribute_cms_test);
+
+ my $cnt = 0;
+ foreach my $name (@incorrect_attribute_cms_test) {
+ my $out = "incorrect-$cnt.txt";
+
+ ok(!run(app(["openssl", "cms", @prov, "-verify", "-in",
+ catfile($datadir, $name), "-inform", "DER", "-CAfile",
+ $smroot, "-out", $out ])),
+ $name);
+ }
+};
+
+subtest "CMS Check that bad encryption algorithm fails\n" => sub {
+ plan tests => 1;
+
+ SKIP: {
+ skip "DES or Legacy isn't supported in this build", 1
+ if disabled("des") || disabled("legacy");
+
+ my $out = "smtst.txt";
+
+ ok(!run(app(["openssl", "cms", @legacyprov, "-encrypt",
+ "-in", $smcont,
+ "-stream", "-recip", $smrsa1,
+ "-des-ede3",
+ "-out", $out ])),
+ "Decrypt message from OpenSSL 1.1.1");
+ }
+};
+
+subtest "CMS Decrypt message encrypted with OpenSSL 1.1.1\n" => sub {
+ plan tests => 1;
+
+ SKIP: {
+ skip "EC or DES isn't supported in this build", 1
+ if disabled("ec") || disabled("des");
+
+ my $out = "smtst.txt";
+
+ ok(run(app(["openssl", "cms", @defaultprov, "-decrypt",
+ "-inkey", catfile($smdir, "smec3.pem"),
+ "-in", catfile($datadir, "ciphertext_from_1_1_1.cms"),
+ "-out", $out ]))
+ && compare_text($smcont, $out) == 0,
+ "Decrypt message from OpenSSL 1.1.1");
+ }
+};
+
+subtest "CAdES <=> CAdES consistency tests\n" => sub {
+ plan tests => (scalar @smime_cms_cades_tests);
+
+ runner_loop(prefix => 'cms-cades', cmd1 => 'cms', cmd2 => 'cms',
+ tests => [ @smime_cms_cades_tests ]);
+};
+
+subtest "CAdES; cms incompatible arguments tests\n" => sub {
+ plan tests => (scalar @smime_cms_cades_invalid_option_tests);
+
+ foreach (@smime_cms_cades_invalid_option_tests) {
+ ok(!run(app(["openssl", "cms", @{$$_[0]} ] )));
+ }
+};
+
+subtest "CAdES ko tests\n" => sub {
+ plan tests => 2 * scalar @smime_cms_cades_ko_tests;
+
+ foreach (@smime_cms_cades_ko_tests) {
+ SKIP: {
+ my $skip_reason = check_availability($$_[0]);
+ skip $skip_reason, 1 if $skip_reason;
+
+ ok(run(app(["openssl", "cms", @{$$_[1]}])), $$_[0]);
+ ok(!run(app(["openssl", "cms", @{$$_[3]}])), $$_[2]);
+ }
+ }
+};
+
+subtest "CMS binary input tests\n" => sub {
+ my $input = srctop_file("test", "smcont.bin");
+ my $signed = "smcont.signed";
+ my $verified = "smcont.verified";
+
+ plan tests => 11;
+
+ ok(run(app(["openssl", "cms", "-sign", "-md", "sha256", "-signer", $smrsa1,
+ "-binary", "-in", $input, "-out", $signed])),
+ "sign binary input with -binary");
+ ok(run(app(["openssl", "cms", "-verify", "-CAfile", $smroot,
+ "-binary", "-in", $signed, "-out", $verified])),
+ "verify binary input with -binary");
+ is(compare($input, $verified), 0, "binary input retained with -binary");
+
+ ok(run(app(["openssl", "cms", "-sign", "-md", "sha256", "-signer", $smrsa1,
+ "-in", $input, "-out", $signed.".nobin"])),
+ "sign binary input without -binary");
+ ok(run(app(["openssl", "cms", "-verify", "-CAfile", $smroot,
+ "-in", $signed.".nobin", "-out", $verified.".nobin"])),
+ "verify binary input without -binary");
+ is(compare($input, $verified.".nobin"), 1, "binary input not retained without -binary");
+ ok(!run(app(["openssl", "cms", "-verify", "-CAfile", $smroot, "-crlfeol",
+ "-binary", "-in", $signed, "-out", $verified.".crlfeol"])),
+ "verify binary input wrong crlfeol");
+
+ ok(run(app(["openssl", "cms", "-sign", "-md", "sha256", "-signer", $smrsa1,
+ "-crlfeol",
+ "-binary", "-in", $input, "-out", $signed.".crlf"])),
+ "sign binary input with -binary -crlfeol");
+ ok(run(app(["openssl", "cms", "-verify", "-CAfile", $smroot, "-crlfeol",
+ "-binary", "-in", $signed.".crlf", "-out", $verified.".crlf"])),
+ "verify binary input with -binary -crlfeol");
+ is(compare($input, $verified.".crlf"), 0,
+ "binary input retained with -binary -crlfeol");
+ ok(!run(app(["openssl", "cms", "-verify", "-CAfile", $smroot,
+ "-binary", "-in", $signed.".crlf", "-out", $verified.".crlf2"])),
+ "verify binary input with -binary missing -crlfeol");
+};
+
+# Test case for missing MD algorithm (must not segfault)
+
+with({ exit_checker => sub { return shift == 4; } },
+ sub {
+ ok(run(app(['openssl', 'smime', '-verify', '-noverify',
+ '-inform', 'PEM',
+ '-in', data_file("pkcs7-md4.pem"),
+ ])),
+ "Check failure of EVP_DigestInit is handled correctly");
+ });
+
+sub check_availability {
+ my $tnam = shift;
+
+ return "$tnam: skipped, EC disabled\n"
+ if ($no_ec && $tnam =~ /ECDH/);
+ return "$tnam: skipped, ECDH disabled\n"
+ if ($no_ec && $tnam =~ /ECDH/);
+ return "$tnam: skipped, EC2M disabled\n"
+ if ($no_ec2m && $tnam =~ /K-283/);
+ return "$tnam: skipped, DH disabled\n"
+ if ($no_dh && $tnam =~ /X9\.42/);
+ return "$tnam: skipped, RC2 disabled\n"
+ if ($no_rc2 && $tnam =~ /RC2/);
+ return "$tnam: skipped, DES disabled\n"
+ if ($no_des && $tnam =~ /DES/);
+ return "$tnam: skipped, DSA disabled\n"
+ if ($no_dsa && $tnam =~ / DSA/);
+
+ return "";
+}
+
+# Test case for the locking problem reported in #19643.
+# This will fail if the fix is in and deadlock on Windows (and possibly
+# other platforms) if not.
+ok(!run(app(['openssl', 'cms', '-verify',
+ '-CAfile', srctop_file("test/certs", "pkitsta.pem"),
+ '-policy', 'anyPolicy',
+ '-in', srctop_file("test/smime-eml",
+ "SignedInvalidMappingFromanyPolicyTest7.eml")
+ ])),
+ "issue#19643");
+
+# Check that we get the expected failure return code
+with({ exit_checker => sub { return shift == 6; } },
+ sub {
+ ok(run(app(['openssl', 'cms', '-encrypt',
+ '-in', srctop_file("test", "smcont.txt"),
+ '-aes128', '-stream', '-recip',
+ srctop_file("test/smime-certs", "badrsa.pem"),
+ ])),
+ "Check failure during BIO setup with -stream is handled correctly");
+ });
+
+# Test case for return value mis-check reported in #21986
+with({ exit_checker => sub { return shift == 3; } },
+ sub {
+ SKIP: {
+ skip "DSA is not supported in this build", 1 if $no_dsa;
+
+ ok(run(app(['openssl', 'cms', '-sign',
+ '-in', srctop_file("test", "smcont.txt"),
+ '-signer', srctop_file("test/smime-certs", "smdsa1.pem"),
+ '-md', 'SHAKE256'])),
+ "issue#21986");
+ }
+ });
+
+# Test for problem reported in #22225
+with({ exit_checker => sub { return shift == 3; } },
+ sub {
+ ok(run(app(['openssl', 'cms', '-encrypt',
+ '-in', srctop_file("test", "smcont.txt"),
+ '-aes-256-ctr', '-recip',
+ catfile($smdir, "smec1.pem"),
+ ])),
+ "Check for failure when cipher does not have an assigned OID (issue#22225)");
+ });
+
+# Test encrypt to three recipients, and decrypt using key-only;
+# i.e. do not follow the recommended practice of providing the
+# recipient cert in the decrypt op.
+#
+# Use RSAES-OAEP for key-transport, not RSAES-PKCS-v1_5.
+#
+# Because the cert is not provided during decrypt, all RSA ciphertexts
+# are decrypted in turn, and when/if there is a valid decryption, it
+# is assumed the correct content-key has been recovered.
+#
+# That process may fail with RSAES-PKCS-v1_5 b/c there is a
+# non-negligible chance that decrypting a random input using
+# RSAES-PKCS-v1_5 can result in a valid plaintext (so two content-keys
+# could be recovered and the wrong one might be used).
+#
+# See https://github.com/openssl/project/issues/380
+subtest "encrypt to three recipients with RSA-OAEP, key only decrypt" => sub {
+ plan tests => 3;
+
+ my $pt = srctop_file("test", "smcont.txt");
+ my $ct = "smtst.cms";
+ my $ptpt = "smtst.txt";
+
+ ok(run(app(['openssl', 'cms',
+ @defaultprov,
+ '-encrypt', '-aes128',
+ '-in', $pt,
+ '-out', $ct,
+ '-stream',
+ '-recip', catfile($smdir, "smrsa1.pem"),
+ '-keyopt', 'rsa_padding_mode:oaep',
+ '-recip', catfile($smdir, "smrsa2.pem"),
+ '-keyopt', 'rsa_padding_mode:oaep',
+ '-recip', catfile($smdir, "smrsa3-cert.pem"),
+ '-keyopt', 'rsa_padding_mode:oaep',
+ ])),
+ "encrypt to three recipients with RSA-OAEP (avoid openssl/project issue#380)");
+ ok(run(app(['openssl', 'cms',
+ @defaultprov,
+ '-decrypt', '-aes128',
+ '-in', $ct,
+ '-out', $ptpt,
+ '-inkey', catfile($smdir, "smrsa3-key.pem"),
+ ])),
+ "decrypt with key only");
+ is(compare($pt, $ptpt), 0, "compare original message with decrypted ciphertext");
+};
diff --git a/test/recipes/80-test_cms_data/bad_signtime_attr.cms b/test/recipes/80-test_cms_data/bad_signtime_attr.cms
new file mode 100644
index 000000000000..048a49358140
--- /dev/null
+++ b/test/recipes/80-test_cms_data/bad_signtime_attr.cms
Binary files differ
diff --git a/test/recipes/80-test_cms_data/ciphertext_from_1_1_1.cms b/test/recipes/80-test_cms_data/ciphertext_from_1_1_1.cms
new file mode 100644
index 000000000000..1f291931ecb5
--- /dev/null
+++ b/test/recipes/80-test_cms_data/ciphertext_from_1_1_1.cms
@@ -0,0 +1,20 @@
+MIME-Version: 1.0
+Content-Disposition: attachment; filename="smime.p7m"
+Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
+Content-Transfer-Encoding: base64
+
+MIAGCSqGSIb3DQEHA6CAMIACAQIxggHwoYH1AgEDoFGhTzAJBgcqhkjOPQIBA0IA
+BAePxHUnwKL0d8UFDKE1Ey90FGDkwsy1iTttSmKeUB2ZJoM1TwbPUI9YVsSttJNV
+x+25aQ1Qnw3FnY03rcUcy94wHAYJK4EFEIZIPwACMA8GCyqGSIb3DQEJEAMGBQAw
+fzB9MFEwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAb
+BgNVBAMMFFRlc3QgUy9NSU1FIFJTQSBSb290AgkA9oQ6WVaz+mMEKFSg1EdBE4qA
+rh2DJVuTJfopaDXM4ih25kIGcxz+zRTo0+8Z7XgjE1KhgfUCAQOgUaFPMAkGByqG
+SM49AgEDQgAErpcZ+4D3r+tERXL9c8pvtyRmNlYeMa7iCaVJ+YdLFtohdfrQ017/
+8CR+Q/q5ibL+eqDeg6KOxytDs2GpD+WoUTAcBgkrgQUQhkg/AAIwDwYLKoZIhvcN
+AQkQAwYFADB/MH0wUTBEMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBH
+cm91cDEdMBsGA1UEAwwUVGVzdCBTL01JTUUgUlNBIFJvb3QCCQDZOZbupksgRgQo
+6OoZPATNvHJTypifw4rBfVlmDvUYcE6S7VmeEFDW9ALPw1XDa58lnTCABgkqhkiG
+9w0BBwEwFAYIKoZIhvcNAwcECKGDGhF9W/7SoIAEUJW5dEUWWwA6vIO1Db9aLJry
+Wx1zNmkFzJnkCUdsgrZxEIdT4kG5E+gLtGmA0+OO8RcoULhAWLf+s2yNN3vLTshN
+YJpevytIYpXQQgzJ8x+5BAjSDDgrrWnBugAAAAAAAAAAAAA=
+
diff --git a/test/recipes/80-test_cms_data/ct_multiple_attr.cms b/test/recipes/80-test_cms_data/ct_multiple_attr.cms
new file mode 100644
index 000000000000..974db6ef9a43
--- /dev/null
+++ b/test/recipes/80-test_cms_data/ct_multiple_attr.cms
Binary files differ
diff --git a/test/recipes/80-test_cms_data/no_ct_attr.cms b/test/recipes/80-test_cms_data/no_ct_attr.cms
new file mode 100644
index 000000000000..64b688b91c3a
--- /dev/null
+++ b/test/recipes/80-test_cms_data/no_ct_attr.cms
Binary files differ
diff --git a/test/recipes/80-test_cms_data/no_md_attr.cms b/test/recipes/80-test_cms_data/no_md_attr.cms
new file mode 100644
index 000000000000..d0a3afa523be
--- /dev/null
+++ b/test/recipes/80-test_cms_data/no_md_attr.cms
Binary files differ
diff --git a/test/recipes/80-test_cms_data/pkcs7-md4.pem b/test/recipes/80-test_cms_data/pkcs7-md4.pem
new file mode 100644
index 000000000000..ecff611deb0b
--- /dev/null
+++ b/test/recipes/80-test_cms_data/pkcs7-md4.pem
@@ -0,0 +1,32 @@
+-----BEGIN PKCS7-----
+MIIFhAYJKoZIhvcNAQcCoIIFdTCCBXECAQExDjAMBggqhkiG9w0CBAUAMB0GCSqG
+SIb3DQEHAaAQBA5UZXN0IGNvbnRlbnQNCqCCAyQwggMgMIICCKADAgECAgECMA0G
+CSqGSIb3DQEBCwUAMA0xCzAJBgNVBAMMAkNBMCAXDTE2MDExNTA4MTk0OVoYDzIx
+MTYwMTE2MDgxOTQ5WjAZMRcwFQYDVQQDDA5zZXJ2ZXIuZXhhbXBsZTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKj/iVhhha7e2ywP1XP74reoG3p1YCvU
+fTxzdrWu3pMvfySQbckc9Io4zZ+igBZWy7Qsu5PlFx//DcZD/jE0+CjYdemju4iC
+76Ny4lNiBUVN4DGX76qdENJYDZ4GnjK7GwhWXWUPP2aOwjagEf/AWTX9SRzdHEIz
+BniuBDgj5ed1Z9OUrVqpQB+sWRD1DMFkrUrExjVTs5ZqghsVi9GZq+Seb5Sq0pbl
+V/uMkWSKPCQWxtIZvoJgEztisO0+HbPK+WvfMbl6nktHaKcpxz9K4iIntO+QY9fv
+0HJJPlutuRvUK2+GaN3VcxK4Q8ncQQ+io0ZPi2eIhA9h/nk0H0qJH7cCAwEAAaN9
+MHswHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4HmCKX4XOiMB8GA1UdIwQYMBaAFLQR
+M/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYBBQUH
+AwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1wbGUwDQYJKoZIhvcNAQELBQADggEB
+AEG0PE9hQuXlvtUULv9TQ2BXy9MmTjOk+dQwxDhAXYBYMUB6TygsqvPXwpDwz8MS
+EPGCRqh5cQwtPoElQRU1i4URgcQMZquXScwNFcvE6AATF/PdN/+mOwtqFrlpYfs3
+IJIpYL6ViQg4n8pv+b/pCwMmhewQLwCGs9+omHNTOwKjEiVoNaprAfj5Lxt15fS2
++zZW0mT9Y4kfEypetrqSAjh8CDK+vaQhkeKdDfJyBfjS4ALfxvCkT3mQnsWFJ9CU
+TVG3uw6ylSPT3wN3RE0Ofa4rI5PESogQsd/DgBc7dcDO3yoPKGjycR3/GJDqqCxC
+e9dr6FJEnDjaDf9zNWyTFHExggITMIICDwIBATASMA0xCzAJBgNVBAMMAkNBAgEC
+MAwGCCqGSIb3DQIEBQCggdQwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkq
+hkiG9w0BCQUxDxcNMjMwMTE4MTU0NzExWjAfBgkqhkiG9w0BCQQxEgQQRXO4TKpp
+RgA4XHb8bD1pczB5BgkqhkiG9w0BCQ8xbDBqMAsGCWCGSAFlAwQBKjALBglghkgB
+ZQMEARYwCwYJYIZIAWUDBAECMAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMCAgIAgDAN
+BggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDANBgkqhkiG9w0B
+AQEFAASCAQAe+xlm/TGg/s/7b0xBc3FFnmmUDEe7ljkehIx61OnBV9ZWA+LcBX/7
+kmMSMdaHjRq4w8FmwBMLzn0ttXVqf0QuPbBF/E6X5EqK9lpOdkUQhNiN2v+ZfY6c
+lrH4ADsSD9D+UHw0sxo5KEF+PPuneUfYCJZosFUJosBbuSEXK0C9yfJoDKVE8Syp
+0vdqh73ogLeNgZLAUGSSB66OmHDxwgAj4qPAv6FHFBy1Xs4uFZER5vniYrH9OrAk
+Z6XdvzDoYZC4XcGMDtcOpOM6D4owqy5svHPDw8wIlM4GVhrTw7CQmuBz5uRNnf6a
+ZK3jZIxG1hr/INaNWheHoPIhPblYaVc6
+-----END PKCS7-----
diff --git a/test/recipes/80-test_cmsapi.t b/test/recipes/80-test_cmsapi.t
new file mode 100644
index 000000000000..af00355a9d66
--- /dev/null
+++ b/test/recipes/80-test_cmsapi.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2018-2022 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
+
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_cmsapi");
+
+plan skip_all => "CMS is disabled in this build" if disabled("cms");
+
+plan tests => 1;
+
+ok(run(test(["cmsapitest", srctop_file("test", "certs", "servercert.pem"),
+ srctop_file("test", "certs", "serverkey.pem"),
+ srctop_file("test", "recipes", "80-test_cmsapi_data", "encryptedData.der")])),
+ "running cmsapitest");
diff --git a/test/recipes/80-test_cmsapi_data/encryptedData.der b/test/recipes/80-test_cmsapi_data/encryptedData.der
new file mode 100644
index 000000000000..4421d08a3e31
--- /dev/null
+++ b/test/recipes/80-test_cmsapi_data/encryptedData.der
Binary files differ
diff --git a/test/recipes/80-test_ct.t b/test/recipes/80-test_ct.t
new file mode 100644
index 000000000000..33cb71583b22
--- /dev/null
+++ b/test/recipes/80-test_ct.t
@@ -0,0 +1,17 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+
+use OpenSSL::Test qw/:DEFAULT srctop_file srctop_dir/;
+use OpenSSL::Test::Simple;
+
+setup("test_ct");
+
+$ENV{CT_DIR} = srctop_dir("test", "ct");
+$ENV{CERTS_DIR} = srctop_dir("test", "certs");
+simple_test("test_ct", "ct_test", "ct", "ec");
diff --git a/test/recipes/80-test_dane.t b/test/recipes/80-test_dane.t
new file mode 100644
index 000000000000..3191f964dc16
--- /dev/null
+++ b/test/recipes/80-test_dane.t
@@ -0,0 +1,28 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_dane");
+
+plan skip_all => "test_dane uses ec which is not supported by this OpenSSL build"
+ if disabled("ec");
+
+plan tests => 2; # The number of tests being performed
+
+ok(run(test(["danetest", "example.com",
+ srctop_file("test", "danetest.pem"),
+ srctop_file("test", "danetest.in")])), "dane tests");
+
+ok(run(test(["danetest", "server.example",
+ srctop_file("test", "certs", "cross-root.pem"),
+ srctop_file("test", "dane-cross.in")])), "dane cross CA test");
diff --git a/test/recipes/80-test_dtls.t b/test/recipes/80-test_dtls.t
new file mode 100644
index 000000000000..9c3ec0ab2546
--- /dev/null
+++ b/test/recipes/80-test_dtls.t
@@ -0,0 +1,20 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_dtls");
+
+plan skip_all => "No DTLS protocols are supported by this OpenSSL build"
+ if alldisabled(available_protocols("dtls"));
+
+plan tests => 1;
+
+ok(run(test(["dtlstest", srctop_file("apps", "server.pem"),
+ srctop_file("apps", "server.pem")])), "running dtlstest");
diff --git a/test/recipes/80-test_dtls_mtu.t b/test/recipes/80-test_dtls_mtu.t
new file mode 100644
index 000000000000..501c42c8a147
--- /dev/null
+++ b/test/recipes/80-test_dtls_mtu.t
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+# Copyright 2016 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
+
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+my $test_name = "test_dtls_mtu";
+setup($test_name);
+
+plan skip_all => "$test_name needs DTLS and PSK support enabled"
+ if disabled("dtls1_2") || disabled("psk");
+
+plan tests => 1;
+
+ok(run(test(["dtls_mtu_test"])), "running dtls_mtu_test");
diff --git a/test/recipes/80-test_dtlsv1listen.t b/test/recipes/80-test_dtlsv1listen.t
new file mode 100644
index 000000000000..e40b120ef1ac
--- /dev/null
+++ b/test/recipes/80-test_dtlsv1listen.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_dtlsv1listen", "dtlsv1listentest", "dh");
diff --git a/test/recipes/80-test_ocsp.t b/test/recipes/80-test_ocsp.t
new file mode 100644
index 000000000000..c2299962523a
--- /dev/null
+++ b/test/recipes/80-test_ocsp.t
@@ -0,0 +1,228 @@
+#! /usr/bin/env perl
+# Copyright 2015-2022 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
+
+
+use strict;
+use warnings;
+
+use POSIX;
+use File::Spec::Functions qw/devnull catfile/;
+use File::Basename;
+use File::Copy;
+use OpenSSL::Test qw/:DEFAULT with pipe srctop_dir data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_ocsp");
+
+plan skip_all => "OCSP is not supported by this OpenSSL build"
+ if disabled("ocsp");
+
+my $ocspdir=srctop_dir("test", "ocsp-tests");
+# 17 December 2012 so we don't get certificate expiry errors.
+my @check_time=("-attime", "1355875200");
+
+sub test_ocsp {
+ my $title = shift;
+ my $inputfile = shift;
+ my $CAfile = shift;
+ my $untrusted = shift;
+ if ($untrusted eq "") {
+ $untrusted = $CAfile;
+ }
+ my $expected_exit = shift;
+ my $nochecks = shift;
+ my $outputfile = basename($inputfile, '.ors') . '.dat';
+
+ run(app(["openssl", "base64", "-d",
+ "-in", catfile($ocspdir,$inputfile),
+ "-out", $outputfile]));
+ with({ exit_checker => sub { return shift == $expected_exit; } },
+ sub { ok(run(app(["openssl", "ocsp", "-respin", $outputfile,
+ "-partial_chain", @check_time,
+ "-CAfile", catfile($ocspdir, $CAfile),
+ "-verify_other", catfile($ocspdir, $untrusted),
+ "-no-CApath", "-no-CAstore",
+ $nochecks ? "-no_cert_checks" : ()])),
+ $title); });
+}
+
+plan tests => 11;
+
+subtest "=== VALID OCSP RESPONSES ===" => sub {
+ plan tests => 7;
+
+ test_ocsp("NON-DELEGATED; Intermediate CA -> EE",
+ "ND1.ors", "ND1_Issuer_ICA.pem", "", 0, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> Intermediate CA",
+ "ND2.ors", "ND2_Issuer_Root.pem", "", 0, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> EE",
+ "ND3.ors", "ND3_Issuer_Root.pem", "", 0, 0);
+ test_ocsp("NON-DELEGATED; 3-level CA hierarchy",
+ "ND1.ors", "ND1_Cross_Root.pem", "ND1_Issuer_ICA-Cross.pem", 0, 0);
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "D1.ors", "D1_Issuer_ICA.pem", "", 0, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "D2.ors", "D2_Issuer_Root.pem", "", 0, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "D3.ors", "D3_Issuer_Root.pem", "", 0, 0);
+};
+
+subtest "=== INVALID SIGNATURE on the OCSP RESPONSE ===" => sub {
+ plan tests => 6;
+
+ test_ocsp("NON-DELEGATED; Intermediate CA -> EE",
+ "ISOP_ND1.ors", "ND1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> Intermediate CA",
+ "ISOP_ND2.ors", "ND2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> EE",
+ "ISOP_ND3.ors", "ND3_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "ISOP_D1.ors", "D1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "ISOP_D2.ors", "D2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "ISOP_D3.ors", "D3_Issuer_Root.pem", "", 1, 0);
+};
+
+subtest "=== WRONG RESPONDERID in the OCSP RESPONSE ===" => sub {
+ plan tests => 6;
+
+ test_ocsp("NON-DELEGATED; Intermediate CA -> EE",
+ "WRID_ND1.ors", "ND1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> Intermediate CA",
+ "WRID_ND2.ors", "ND2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> EE",
+ "WRID_ND3.ors", "ND3_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "WRID_D1.ors", "D1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "WRID_D2.ors", "D2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "WRID_D3.ors", "D3_Issuer_Root.pem", "", 1, 0);
+};
+
+subtest "=== WRONG ISSUERNAMEHASH in the OCSP RESPONSE ===" => sub {
+ plan tests => 6;
+
+ test_ocsp("NON-DELEGATED; Intermediate CA -> EE",
+ "WINH_ND1.ors", "ND1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> Intermediate CA",
+ "WINH_ND2.ors", "ND2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> EE",
+ "WINH_ND3.ors", "ND3_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "WINH_D1.ors", "D1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "WINH_D2.ors", "D2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "WINH_D3.ors", "D3_Issuer_Root.pem", "", 1, 0);
+};
+
+subtest "=== WRONG ISSUERKEYHASH in the OCSP RESPONSE ===" => sub {
+ plan tests => 6;
+
+ test_ocsp("NON-DELEGATED; Intermediate CA -> EE",
+ "WIKH_ND1.ors", "ND1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> Intermediate CA",
+ "WIKH_ND2.ors", "ND2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> EE",
+ "WIKH_ND3.ors", "ND3_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "WIKH_D1.ors", "D1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "WIKH_D2.ors", "D2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "WIKH_D3.ors", "D3_Issuer_Root.pem", "", 1, 0);
+};
+
+subtest "=== WRONG KEY in the DELEGATED OCSP SIGNING CERTIFICATE ===" => sub {
+ plan tests => 3;
+
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "WKDOSC_D1.ors", "D1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "WKDOSC_D2.ors", "D2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "WKDOSC_D3.ors", "D3_Issuer_Root.pem", "", 1, 0);
+};
+
+subtest "=== INVALID SIGNATURE on the DELEGATED OCSP SIGNING CERTIFICATE ===" => sub {
+ plan tests => 6;
+
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "ISDOSC_D1.ors", "D1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "ISDOSC_D2.ors", "D2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "ISDOSC_D3.ors", "D3_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "ISDOSC_D1.ors", "D1_Issuer_ICA.pem", "", 1, 1);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "ISDOSC_D2.ors", "D2_Issuer_Root.pem", "", 1, 1);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "ISDOSC_D3.ors", "D3_Issuer_Root.pem", "", 1, 1);
+};
+
+subtest "=== WRONG SUBJECT NAME in the ISSUER CERTIFICATE ===" => sub {
+ plan tests => 6;
+
+ test_ocsp("NON-DELEGATED; Intermediate CA -> EE",
+ "ND1.ors", "WSNIC_ND1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> Intermediate CA",
+ "ND2.ors", "WSNIC_ND2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> EE",
+ "ND3.ors", "WSNIC_ND3_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "D1.ors", "WSNIC_D1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "D2.ors", "WSNIC_D2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "D3.ors", "WSNIC_D3_Issuer_Root.pem", "", 1, 0);
+};
+
+subtest "=== WRONG KEY in the ISSUER CERTIFICATE ===" => sub {
+ plan tests => 6;
+
+ test_ocsp("NON-DELEGATED; Intermediate CA -> EE",
+ "ND1.ors", "WKIC_ND1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> Intermediate CA",
+ "ND2.ors", "WKIC_ND2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> EE",
+ "ND3.ors", "WKIC_ND3_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "D1.ors", "WKIC_D1_Issuer_ICA.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "D2.ors", "WKIC_D2_Issuer_Root.pem", "", 1, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "D3.ors", "WKIC_D3_Issuer_Root.pem", "", 1, 0);
+};
+
+subtest "=== INVALID SIGNATURE on the ISSUER CERTIFICATE ===" => sub {
+ plan tests => 6;
+
+ # Expect success, because we're explicitly trusting the issuer certificate.
+ test_ocsp("NON-DELEGATED; Intermediate CA -> EE",
+ "ND1.ors", "ISIC_ND1_Issuer_ICA.pem", "", 0, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> Intermediate CA",
+ "ND2.ors", "ISIC_ND2_Issuer_Root.pem", "", 0, 0);
+ test_ocsp("NON-DELEGATED; Root CA -> EE",
+ "ND3.ors", "ISIC_ND3_Issuer_Root.pem", "", 0, 0);
+ test_ocsp("DELEGATED; Intermediate CA -> EE",
+ "D1.ors", "ISIC_D1_Issuer_ICA.pem", "", 0, 0);
+ test_ocsp("DELEGATED; Root CA -> Intermediate CA",
+ "D2.ors", "ISIC_D2_Issuer_Root.pem", "", 0, 0);
+ test_ocsp("DELEGATED; Root CA -> EE",
+ "D3.ors", "ISIC_D3_Issuer_Root.pem", "", 0, 0);
+};
+
+subtest "=== OCSP API TESTS===" => sub {
+ plan tests => 1;
+
+ ok(run(test(["ocspapitest", data_file("cert.pem"), data_file("key.pem")])),
+ "running ocspapitest");
+}
diff --git a/test/recipes/80-test_ocsp_data/cert.pem b/test/recipes/80-test_ocsp_data/cert.pem
new file mode 100644
index 000000000000..f70e7925e704
--- /dev/null
+++ b/test/recipes/80-test_ocsp_data/cert.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDLDCCAhSgAwIBAgICFs8wDQYJKoZIhvcNAQELBQAwSzEQMA4GA1UECgwHT3Bl
+blNTTDETMBEGA1UECwwKVGVzdCBTdWl0ZTEiMCAGA1UEAwwZVGVzdCBPQ1NQIHJl
+c3BvbnNlIHNpZ25lcjAeFw0xNzEwMjMxNDA4MDlaFw0yNjAxMDkxNDA4MDlaMEsx
+EDAOBgNVBAoMB09wZW5TU0wxEzARBgNVBAsMClRlc3QgU3VpdGUxIjAgBgNVBAMM
+GVRlc3QgT0NTUCByZXNwb25zZSBzaWduZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQC81prq23FY2YDuwiXetb/NCs/cSm/afVnPsdSseRKi/GHi9d7b
+EEgWnQOJmz4zTuU+Bw2duHZ1X2WUR/Pjy4CvWNRq417aJ3IfyQHf8cxEplk9Ifd0
+5VEq6WzWVWAX6ki/CZIJUihzj3AAn/SYfvXw2wd319OQGvwYiQVt3Is5k4E4rAI2
+zXf5BdE9XkayM3jq6Ewc/VZ05EA/LaBLy5ujQljjfAFEy/qopYx3AJ4G8t2a5rvM
+dbNOyJCx9NNeryZMv2wRzEaYp6jYao+xxqbm5lgnwfE3jJ4aA9/oC1sUM8FokOGW
+9KAK3UEptoxux8JHH9R8X5bTVE7HADHhG5s7AgMBAAGjGjAYMAkGA1UdEwQCMAAw
+CwYDVR0PBAQDAgXgMA0GCSqGSIb3DQEBCwUAA4IBAQCPkojVPBFNT9DGpLq9Y/Hl
+XhcA+vSdt83EFzPD/nxIMp/QYSnZ9w2SWL21AH4C+HWd4JuKX5Zlsd6qYobYZLcT
+TyVfw0OMwwPUI6Mxbz395EAnVLmtddN2RDsEYvThSMMoSfhtUwyANpA0Q6M8RcGt
+LwnaC69iXhBh1xcTVVg97yEJ22yIrwQ1GhX4F1PRJIAQ/QmQhnoTGlhl2VAQ3LIk
+lNFxkWbx0rqPIcor27QDNa2DPqioyvHMlkjC1h5EPhL9Ynu011r4Dn9A34+vFxeu
+Q+emRwl/JjCNZX4l/AripU/Cy/+J2YGKilKzRcB1QMMVSl0VaeLSCwkNDQtdlwWO
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_ocsp_data/key.pem b/test/recipes/80-test_ocsp_data/key.pem
new file mode 100644
index 000000000000..cd211dc31fa0
--- /dev/null
+++ b/test/recipes/80-test_ocsp_data/key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC81prq23FY2YDu
+wiXetb/NCs/cSm/afVnPsdSseRKi/GHi9d7bEEgWnQOJmz4zTuU+Bw2duHZ1X2WU
+R/Pjy4CvWNRq417aJ3IfyQHf8cxEplk9Ifd05VEq6WzWVWAX6ki/CZIJUihzj3AA
+n/SYfvXw2wd319OQGvwYiQVt3Is5k4E4rAI2zXf5BdE9XkayM3jq6Ewc/VZ05EA/
+LaBLy5ujQljjfAFEy/qopYx3AJ4G8t2a5rvMdbNOyJCx9NNeryZMv2wRzEaYp6jY
+ao+xxqbm5lgnwfE3jJ4aA9/oC1sUM8FokOGW9KAK3UEptoxux8JHH9R8X5bTVE7H
+ADHhG5s7AgMBAAECggEBAJLp946eeVmhpiCa5XGWPwlbzwlY1BrNCRGADbC9ZRVu
+ew1jMiWGTj9hmr31DHhIeis+u4YoW+jG9jVdoU5pJc3Fs0URbdsVc0FtVcsPyFbk
+gGsCQQ4t1m8nOaiqtV8Fw+D0piwgQh5dysqBp374z4i6Lt47CHqFs/m2qIWnXp3E
+YF3xX2Zz9rIgejERRxrUnp5998NqxSYHPF7Ts4VQ/+UezUqEpA2jBs6cJ2tWVNR9
+uf+3Fklpo7Uau+xG5xkiRYxx4mSIg6EREz5+XMPkSOcXi6tyinoKsafxTNQDil0q
+pdurVlHNgZb2QdJjHugVmbalydHIQ5c0CU1RO5CP97kCgYEA7RqrRooniil0iAKR
+6scFct0juVBW1Uw05Ejt97RtwQRf/m9SU5mSs0PfFx/l3PeNDSWnpmwunL1igYQb
++tVqDQQ9xR4owyl6/qDJSP2bS84jb+3MCR4UE/b2YR2rCDBllXeyQsDT7KMoW8lX
+gliWmYd6HYddRDOKNM/tzccFG1cCgYEAy+M6yv0ublrpTj4o8DcOi6JJrQbPSAWx
+R7zKDXSvSq5lLjfXmqX4s/jgZWgQ+kYoYZrIOqIygcZ2U6tBMCP2LAhbf86I6r27
+loMyQg7lhC5GCztpGes4/JmUvnvjTUIFspB6ReaXlBFAstzzJirgI1wmoO6+GiG/
+OUDmvCjFdL0CgYALQGa8VDYIImt7QNP31jX1+3SEiMF2IcWox6UzSgajUDfV9SZs
+/S6u/xuJF2RrFfxFkXHhPeUAXyRbjQ9e2d3MfFUKE6JPkJpblvm2UwKZmFCqMRir
+nhfJ0sBiX2wMWW+YpjN5Y3krE5sIsAdNEjMjWgB7gj70y5VVaECasUUWxQKBgQDB
+aauqSIc1VLSh7sGzLudzet5db2pPLmdAYE1kel6Xf9yn/X1gTTYitGNaj2Abq1Y/
+US/Ev30eMwCo2nqaimLK3pq+IVUtKhO78nVIyQzdWXBE03Uei0+iAKdkE+5Kqejx
+vbDggqEka0Fu678VY/MAWDikzhY0f/MBAxpfQGYgGQKBgC0tR1ymvCLkk6J5e4/G
+OD1D9m2JJjcK4eWUS4rAiEH61sI5CKQRU2pQ3f3cIGekDZZt3XzHLYwc9W2UnN2J
+glMmKXp0qqt2HoE/XKLrIc1dEDXsZxFnMZ6nmWKsl4AHxM/gyXqfDo/AUXyEGcVu
+8TbVs3nlISUy7vwjpaW1KOs1
+-----END PRIVATE KEY-----
diff --git a/test/recipes/80-test_pkcs12.t b/test/recipes/80-test_pkcs12.t
new file mode 100644
index 000000000000..4c5bb5744b8c
--- /dev/null
+++ b/test/recipes/80-test_pkcs12.t
@@ -0,0 +1,172 @@
+#! /usr/bin/env perl
+# Copyright 2016-2024 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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file with/;
+use OpenSSL::Test::Utils;
+
+use Encode;
+
+setup("test_pkcs12");
+
+my $pass = "σÏνθημα γνώÏισμα";
+
+my $savedcp;
+if (eval { require Win32::API; 1; }) {
+ # Trouble is that Win32 perl uses CreateProcessA, which
+ # makes it problematic to pass non-ASCII arguments, from perl[!]
+ # that is. This is because CreateProcessA is just a wrapper for
+ # CreateProcessW and will call MultiByteToWideChar and use
+ # system default locale. Since we attempt Greek pass-phrase
+ # conversion can be done only with Greek locale.
+
+ Win32::API->Import("kernel32","UINT GetSystemDefaultLCID()");
+ if (GetSystemDefaultLCID() != 0x408) {
+ plan skip_all => "Non-Greek system locale";
+ } else {
+ # Ensure correct code page so that VERBOSE output is right.
+ Win32::API->Import("kernel32","UINT GetConsoleOutputCP()");
+ Win32::API->Import("kernel32","BOOL SetConsoleOutputCP(UINT cp)");
+ $savedcp = GetConsoleOutputCP();
+ SetConsoleOutputCP(1253);
+ $pass = Encode::encode("cp1253",Encode::decode("utf-8",$pass));
+ }
+} elsif ($^O eq "MSWin32") {
+ plan skip_all => "Win32::API unavailable";
+} elsif ($^O ne "VMS") {
+ # Running MinGW tests transparently under Wine apparently requires
+ # UTF-8 locale...
+
+ foreach(`locale -a`) {
+ s/\R$//;
+ if ($_ =~ m/^C\.UTF\-?8/i) {
+ $ENV{LC_ALL} = $_;
+ last;
+ }
+ }
+}
+$ENV{OPENSSL_WIN32_UTF8}=1;
+
+plan tests => 17;
+
+# Test different PKCS#12 formats
+ok(run(test(["pkcs12_format_test"])), "test pkcs12 formats");
+# Test with legacy APIs
+ok(run(test(["pkcs12_format_test", "-legacy"])), "test pkcs12 formats using legacy APIs");
+# Test with a non-default library context (and no loaded providers in the default context)
+ok(run(test(["pkcs12_format_test", "-context"])), "test pkcs12 formats using a non-default library context");
+
+SKIP: {
+ skip "VMS doesn't have command line UTF-8 support yet in DCL", 1
+ if $^O eq "VMS";
+
+ # just see that we can read shibboleth.pfx protected with $pass
+ ok(run(app(["openssl", "pkcs12", "-noout",
+ "-password", "pass:$pass",
+ "-in", srctop_file("test", "shibboleth.pfx")])),
+ "test_load_cert_pkcs12");
+}
+
+my @path = qw(test certs);
+my $outfile1 = "out1.p12";
+my $outfile2 = "out2.p12";
+my $outfile3 = "out3.p12";
+my $outfile4 = "out4.p12";
+my $outfile5 = "out5.p12";
+
+# Test the -chain option with -untrusted
+ok(run(app(["openssl", "pkcs12", "-export", "-chain",
+ "-CAfile", srctop_file(@path, "sroot-cert.pem"),
+ "-untrusted", srctop_file(@path, "ca-cert.pem"),
+ "-in", srctop_file(@path, "ee-cert.pem"),
+ "-nokeys", "-passout", "pass:", "-out", $outfile1])),
+ "test_pkcs12_chain_untrusted");
+
+# Test the -passcerts option
+SKIP: {
+ skip "Skipping PKCS#12 test because DES is disabled in this build", 1
+ if disabled("des");
+ ok(run(app(["openssl", "pkcs12", "-export",
+ "-in", srctop_file(@path, "ee-cert.pem"),
+ "-certfile", srctop_file(@path, "v3-certs-TDES.p12"),
+ "-passcerts", "pass:v3-certs",
+ "-nokeys", "-passout", "pass:v3-certs", "-descert",
+ "-out", $outfile2])),
+ "test_pkcs12_passcerts");
+}
+
+SKIP: {
+ skip "Skipping legacy PKCS#12 test because the required algorithms are disabled", 1
+ if disabled("des") || disabled("rc2") || disabled("legacy");
+ # Test reading legacy PKCS#12 file
+ ok(run(app(["openssl", "pkcs12", "-export",
+ "-in", srctop_file(@path, "v3-certs-RC2.p12"),
+ "-passin", "pass:v3-certs",
+ "-provider", "default", "-provider", "legacy",
+ "-nokeys", "-passout", "pass:v3-certs", "-descert",
+ "-out", $outfile3])),
+ "test_pkcs12_passcerts_legacy");
+}
+
+# Test export of PEM file with both cert and key
+# -nomac necessary to avoid legacy provider requirement
+ok(run(app(["openssl", "pkcs12", "-export",
+ "-inkey", srctop_file(@path, "cert-key-cert.pem"),
+ "-in", srctop_file(@path, "cert-key-cert.pem"),
+ "-passout", "pass:v3-certs",
+ "-nomac", "-out", $outfile4], stderr => "outerr.txt")),
+ "test_export_pkcs12_cert_key_cert");
+open DATA, "outerr.txt";
+my @match = grep /:error:/, <DATA>;
+close DATA;
+ok(scalar @match > 0 ? 0 : 1, "test_export_pkcs12_outerr_empty");
+
+ok(run(app(["openssl", "pkcs12",
+ "-in", $outfile4,
+ "-passin", "pass:v3-certs",
+ "-nomacver", "-nodes"])),
+ "test_import_pkcs12_cert_key_cert");
+
+ok(run(app(["openssl", "pkcs12", "-export", "-out", $outfile5,
+ "-in", srctop_file(@path, "ee-cert.pem"), "-caname", "testname",
+ "-nokeys", "-passout", "pass:", "-certpbe", "NONE"])),
+ "test nokeys single cert");
+
+my @pkcs12info = run(app(["openssl", "pkcs12", "-info", "-in", $outfile5,
+ "-passin", "pass:"]), capture => 1);
+
+# Test that with one input certificate, we get one output certificate
+ok(grep(/subject=CN = server.example/, @pkcs12info) == 1,
+ "test one cert in output");
+# Test that the expected friendly name is present in the output
+ok(grep(/testname/, @pkcs12info) == 1, "test friendly name in output");
+
+# Test some bad pkcs12 files
+my $bad1 = srctop_file("test", "recipes", "80-test_pkcs12_data", "bad1.p12");
+my $bad2 = srctop_file("test", "recipes", "80-test_pkcs12_data", "bad2.p12");
+my $bad3 = srctop_file("test", "recipes", "80-test_pkcs12_data", "bad3.p12");
+
+with({ exit_checker => sub { return shift == 1; } },
+ sub {
+ ok(run(app(["openssl", "pkcs12", "-in", $bad1, "-password", "pass:"])),
+ "test bad pkcs12 file 1");
+
+ ok(run(app(["openssl", "pkcs12", "-in", $bad1, "-password", "pass:",
+ "-nomacver"])),
+ "test bad pkcs12 file 1 (nomacver)");
+
+ ok(run(app(["openssl", "pkcs12", "-in", $bad2, "-password", "pass:"])),
+ "test bad pkcs12 file 2");
+
+ ok(run(app(["openssl", "pkcs12", "-in", $bad3, "-password", "pass:"])),
+ "test bad pkcs12 file 3");
+ });
+
+SetConsoleOutputCP($savedcp) if (defined($savedcp));
diff --git a/test/recipes/80-test_pkcs12_data/bad1.p12 b/test/recipes/80-test_pkcs12_data/bad1.p12
new file mode 100644
index 000000000000..8f3387c7e356
--- /dev/null
+++ b/test/recipes/80-test_pkcs12_data/bad1.p12
Binary files differ
diff --git a/test/recipes/80-test_pkcs12_data/bad2.p12 b/test/recipes/80-test_pkcs12_data/bad2.p12
new file mode 100644
index 000000000000..113cb6f1cd52
--- /dev/null
+++ b/test/recipes/80-test_pkcs12_data/bad2.p12
Binary files differ
diff --git a/test/recipes/80-test_pkcs12_data/bad3.p12 b/test/recipes/80-test_pkcs12_data/bad3.p12
new file mode 100644
index 000000000000..ef86a1d86fb0
--- /dev/null
+++ b/test/recipes/80-test_pkcs12_data/bad3.p12
Binary files differ
diff --git a/test/recipes/80-test_policy_tree.t b/test/recipes/80-test_policy_tree.t
new file mode 100644
index 000000000000..1ddd65e89797
--- /dev/null
+++ b/test/recipes/80-test_policy_tree.t
@@ -0,0 +1,43 @@
+#! /usr/bin/env perl
+# Copyright 2023 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
+
+
+use strict;
+use warnings;
+
+use POSIX;
+use OpenSSL::Test qw/:DEFAULT srctop_file with data_file/;
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Glob;
+
+setup("test_policy_tree");
+
+plan skip_all => "No EC support" if disabled("ec");
+
+plan tests => 2;
+
+# The small pathological tree is expected to work
+my $small_chain = srctop_file("test", "recipes", "80-test_policy_tree_data",
+ "small_policy_tree.pem");
+my $small_leaf = srctop_file("test", "recipes", "80-test_policy_tree_data",
+ "small_leaf.pem");
+
+ok(run(app(["openssl", "verify", "-CAfile", $small_chain,
+ "-policy_check", $small_leaf])),
+ "test small policy tree");
+
+# The large pathological tree is expected to fail
+my $large_chain = srctop_file("test", "recipes", "80-test_policy_tree_data",
+ "large_policy_tree.pem");
+my $large_leaf = srctop_file("test", "recipes", "80-test_policy_tree_data",
+ "large_leaf.pem");
+
+ok(!run(app(["openssl", "verify", "-CAfile", $large_chain,
+ "-policy_check", $large_leaf])),
+ "test large policy tree");
diff --git a/test/recipes/80-test_policy_tree_data/large_leaf.pem b/test/recipes/80-test_policy_tree_data/large_leaf.pem
new file mode 100644
index 000000000000..39ed6a7fa66b
--- /dev/null
+++ b/test/recipes/80-test_policy_tree_data/large_leaf.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBmTCCAT+gAwIBAgIBADAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgMTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowGjEYMBYGA1UE
+AxMPd3d3LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEp6Qe
+jrN6A0ZjqaFbX/zO01aVYXH5kthBDTEO/fU4H0CdwqrfyMsFrObwssrTJcsmSFKP
+x1FYr8wT2wCACs19lqN4MHYwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMAwGA1UdEwEB/wQCMAAwGgYDVR0RBBMwEYIPd3d3LmV4YW1wbGUuY29t
+MCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMAoGCCqGSM49
+BAMCA0gAMEUCIDGT8SVBkWJEZ2EzXm8M895NrNRmfc8uoheP0KKv+ndHAiEA2Onr
+20J+zTaR7vONY/1DleMm7fGY3UxTobSHSvOKbfY=
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_policy_tree_data/large_policy_tree.pem b/test/recipes/80-test_policy_tree_data/large_policy_tree.pem
new file mode 100644
index 000000000000..5cd31c355b18
--- /dev/null
+++ b/test/recipes/80-test_policy_tree_data/large_policy_tree.pem
@@ -0,0 +1,434 @@
+-----BEGIN CERTIFICATE-----
+MIICEDCCAbagAwIBAgIBATAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgMjAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATgyLz1C0dD
+ib5J/QmoE4d+Nf5yvvlzjVZHWIu7iCMEqK67cnA1RtMp1d0xdiNQS6si3ExNPBF+
+ELdkP0E6x26Jo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSs+ml5upH1h25oUB0Ep4vd
+SUdZ/DAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAOME8j1/cMogNnuNCb0O
+RIOE9pLP4je78KJiP8CZm0iOAiALr8NI67orD/VpfRptkjCmOd7rTWMVOOJfBr6N
+VJFLjw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICDzCCAbagAwIBAgIBAjAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgMzAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASIdzU/FF3Y
+rTsTX04fRIN2yrZwxvOAfZ6DuEgKRxEimJx1nCyETuMmfDowm52mx/Cyk08xorp8
+PhGEbacMd9kio4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSwok/8RfJbVGTzyF5jhWLc
+hO7pcDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDRwAwRAIgYVF7bXxUuOzAZF6SmeIJ
+s+iL15bLSQ2rW7QDc6QYp9MCIAup6YokIcr8JaGttHmLaKbASQLxYDGHhfFIVZuI
+BDvT
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEDCCAbagAwIBAgIBAzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgNDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ38Llxxj32
+H3NN4Z1V8IuRKXLNhdU4z+NbT1rahusEyAHF+z9VTjim+HHfqFKV1QyNOJZ4rMA9
+J/gODWsNCT4po4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS11YgFNKTx3a6kssIijnA9
+DiOhoTAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAJXNZHMpvlnMfxhcG6EF
+Vw1pEXJ+iZnWT+Yu02a2zhamAiAiOKNhALBw/iKhQrwLo0cdx6UEfUKbaqTSGiax
+tHUylA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEDCCAbagAwIBAgIBBDAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgNTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATo81HWQ/we
+egmoO/LMntQK1VQ9YzU627nblv/XWoOjEd/tBeE8+Un4jUnhZqNrP2TAzy48jEaT
+1DShCQNQGek7o4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS6/F38QgbZSHib0W1XtMfs
+4O5DTDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIgXMYCQWi5/6iQw+zqyEav
+CE7kOfTpm9GN4bZX5Eau5AACIQD0rDZwsjWf6hI2Hn8IlpwYVVC9bpxrAM/JmYuu
+79V/uw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEDCCAbagAwIBAgIBBTAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgNjAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARsPMjOkmzJ
+2jwT30mKUvAFYVgOlgcoXxYr61p54mbQMmmH49ABmJQMu5rjwjwYlYA3UzbEN9ki
+hMsJz/4JIrJGo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQeflZRWUze+7jne9MkYYy5
+iWFgJDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAIN6BjMnPlixl3i6Z1Xa
+pZQt52MOCHPm0XzXDn2XlC9+AiAn146u8rbppdEGMFr21vfFZaktwEb0cZkC9fBp
+S1uKwQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEDCCAbagAwIBAgIBBjAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgNzAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASVmpozZzxX
+f6rFinkqS0y8sfbOwcM0gNuR0x83mmZH5+a8W4ug5W80QiBaS3rHtwTsFHpCeQKq
+eJvfb/esgJu8o4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQPuF2sXR0vOHJynh57qefK
++h7RGDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIgDX0jHPq1alZoMbPDmbZp
+QYuM9UQagQ5KJgVU1B0Mh2ECIQCtdyfT2h5jZvz3lLKkQ9a6LddIuqsyNKDAxbpb
+PlBOOA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEDCCAbagAwIBAgIBBzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgODAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDcwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASb+9fN9RLe
+SHGynsKXhLWGhIS/kZ6Yl97+h23xpjLaZUOzhn5VafXdmLrQ4BmqSMHqIKzcc8IB
+STV3NwO4NxPBo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTBF9x+MrsyqoCaTQ2kB7Bn
+tpK2qDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAI37Di/5MrSj2clr+2pX
+iXzeDIvlaxzVetyH3ibUZZBSAiA41aPIssHi9evv2mZonEvXY8g+DKbh/3L2mSub
+/AyLoA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICETCCAbagAwIBAgIBCDAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgOTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDgwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASrRS12/zEP
+RUNye9SLadN4xK+xfTwyXfxeC+jam+J98lOMcHz6abnLpk5tJ7wab4Pkygsbj1V2
+STxeW+YH23dto4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQYpYFLhosbir7KoyYdehsQ
+6DdLfzAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSQAwRgIhAPTCN+zWFG2cFzJ+nlfg
+JMY4U2e3vqTQmFeBXYlBASb9AiEA0KvsyNwloF1YeeaYcP5iHoRGRo8UMD3QWKEE
+vWI14Uk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEDCCAbegAwIBAgIBCTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTAwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBYxFDASBgNV
+BAMTC1BvbGljeSBDQSA5MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoR4udEgt
+usb9f946+Xznm7Q3OaW4DTZjO7wqX1I+27zDp0JrUbCZwtm0Cw+pYkG5kPpNcFTK
+7yG3YgqM1sT+6aOB8jCB7zAOBgNVHQ8BAf8EBAMCAgQwEwYDVR0lBAwwCgYIKwYB
+BQUHAwEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjgtOHvFBcUQ03AKUbvuJ
+IWO5lzUwJQYDVR0gBB4wHDAMBgpghkgBZQMCATABMAwGCmCGSAFlAwIBMAIwcQYD
+VR0hBGowaDAYBgpghkgBZQMCATABBgpghkgBZQMCATABMBgGCmCGSAFlAwIBMAEG
+CmCGSAFlAwIBMAIwGAYKYIZIAWUDAgEwAgYKYIZIAWUDAgEwATAYBgpghkgBZQMC
+ATACBgpghkgBZQMCATACMAoGCCqGSM49BAMCA0cAMEQCICIboTAzG1DvCY/0tA/o
+l18zrW9qKVnt4mxih5JQe4fOAiBOF2ZeUT2/ZtdFhZmg+zl/fGrQ1xEx09/S956k
+Ig4S9Q==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBCjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTEwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLxetqJp
+VR6apJytboxFCCooQ7jVcc7yoHhjlH8HsaJS3GrWpyMgiqOfyWt4KFMynKkgCU1K
+1QcU9aC5BfRQpyWjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFD6etMtD6Qpa7TjVQBgV
+/4PhZP4DMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEA+5uiOjJoq5nU7lKN
+rZtBdYNqUKvHuYB+jiNEfWvxx2cCIFZEJCGw8fzqkAyGWkLe10w8PUzPM64nh757
+pEtxCzZh
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBCzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTIwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPQuXEeo
+BrbyENdz9HqAoWMSQx1BErsUcQaneq3L0/VHHJBPKihb8s4nB/2yZaEarr8LFAvi
+ofx+4egydkP0mJ+jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIoC4qL79Uy3+m26Y+ch
++sE6gCOMMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEAx/vMDhaH4EYTM2v9
+GeM1xTP9pNRgak69JQLKLu1VM1YCIF1RYC8Fma5Bc0cZAYY+Gj7dEf9qHj1TODA5
+C9es2CPY
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICETCCAbigAwIBAgIBDDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTMwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDlEv73o
+ej8Xvc3UodhSHkech80DbuBKdeldOTrRp6ZaVUP3vMgjNUJkh4WkvP3UVTe5SV4D
+zQXDIiwAEJu+zdmjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCAn0wYXyRdliJOBFvvJ
+eZoGTiyOMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNHADBEAiAo2PPmLBZpcT0bst/C
+SXvnl3gztIZu89O1MKsNwFcM9QIgIzqZx/o9MF/fP7zbLWErVcUQViOGiCRBLVh7
+ppb7CoA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEzCCAbigAwIBAgIBDTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTQwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABB8mgAoN
+rmFo937IBKXKuxHedUjOL7y3cpDYD1H3C4HRDBQDVOL31lC5kJUhS4HBLvJQwebR
+2kW35E3AnhbY/oKjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFBGbO20Xp/q0fPChjLHL
+WuJwSNc1MCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEA3qGzdevdYfmiSBj9
+t9oE8hfEP+APqGiStlOLKD6xVK0CIQDq9cVa2KXMEz7YwmMO3lxoQFDPEXftbRaC
+edFB7q/YXg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEzCCAbigAwIBAgIBDjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTUwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxNDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHDiOMtx
+5sfJs/WDnw0xS5NYlkbgy2eOZHAmC/jhRp6cjShZrr2/S4IJsH8B2VMcYAHgum6a
+eMjqWFIMxIjN5xyjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOWtYUeAPk66m0o6Z7ax
+1RN42wmkMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEA+AcazVKKPfqkpcJw
+rkXWIyZrTe+1PNETQzaJCooGNGkCIQDdfHf1I78e+ogaDcjkDe0s3R9VhkvjCty6
+uKKFtNGHMQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBDzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTYwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxNTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKCkdSYz
++zyHItG2rQSyCh018b4bu9Zrw8nzkCBgkT2IyycNtpabYkWhxcEL29ZFqBnB+l7N
+5fYmHl5CmflJPh+jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNanrmjMEN3PndPGeucm
+mST9ucNWMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiAFt48yhTTv0rP29N8H
+yRhAQGfnV4t1b8JucixLSfe32QIhAOef6iiwLxbBOMUn5ZN/WAK5TERem6DLSzWN
+/PTXHAAt
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICETCCAbigAwIBAgIBEDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTcwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxNjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH5txyDp
+DfRsIyYPTAQ+fuxk08E3/tpChVWoog4XQvod61wcUO1/nhoTGNKZZOhN5uhKWJWb
+1futz+XxV2QxTCyjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHSlcxgh3gxgVag1JvAk
+zbHlgMbEMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNHADBEAiA9Ee47PnxqW0QmELB+
+dd90Fz8wcQFZlNmkPW4Oq2xr/wIgGlxfutQq7l3TU5hyyO0Lh01AHn2DC5KPFPwE
+l8S9VeY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEzCCAbigAwIBAgIBETAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTgwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABAJvlQKB
+gJZ+Tysa6iwhllPXCeJrkan6WUm+oqOIY02/SpI5Mba1Kwg73Fsswx3Eywt8sxA2
+4fiaqwg+xZoil06jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFM/udZ1ib8qDfShdfdfX
+8gL6w7VMMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEA6kK7vAYF2TPXzywn
++SDLsiGbU6Sj8aTtsJZf9DmhKr4CIQCt4FfI7IWinqNlURXe4HSBPsekcQkOpwjK
+PuJRx3fuFw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEzCCAbigAwIBAgIBEjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMTkwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxODBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEerejCw
+gAy7GecLVbQw6eL8k1cGWwLt+wl3sn8he8fA0I+KoFfcOCgtvOF59RMXnjZ1+7OC
+kz3mNDVSbKY6KO2jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFM0OUOtOKTcTMRXGQwbw
+GOoLCOEYMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEAziPsm2dArB/3ILqm
+04mZl8/DX6dB4EmU+FPF2UpAeLwCIQCofc27tisg3L1mPNeiwZ26+rDe5SdixiUc
+S3KWOJ1cTg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBEzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjAwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAxOTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPmB5spr
+C64/21ssufcbshGnQtAWbk2o2l+ej6pMMPIZhmNyvM450L3dFX12UBNcaERCABmr
+BEJL7IubGWE9CVOjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJCh/1mh0Hl2+LE0osUv
+OJCmV3IYMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEAtxMIkO4xCRSQCU6d
+0jt+Go4xj/R4bQFWbZrlS9+fYUECICuWAgT3evhoo34o04pU84UaYOvO5V0GJsTt
+hrS1v3hT
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEzCCAbigAwIBAgIBFDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjEwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHdvTDYo
+M/padIV3LdTnrzwMy1HSTeJ2aTUalkVV17uL2i3C51rWM2pl+qlRordq6W2GboMz
+/+78HhKMcCrMWKCjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFAbZN0eSPw3MyvWIEix6
+GnYRIiFkMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEAlaapLXHwGNkeEwc0
+jsY2XhuR3RlVhD4T2k/QyJRQ0s0CIQD5E+e+5QTe5s+534Lwcxe2iFb3oFm+8g81
+OBVtfmSMGg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBFTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjIwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLTu8R5Y
+7Po4W05hWperfod6mXezwWgAVk2RW2EG2vy4NeZeML2EFhg2geNc6N5Goep9t7pn
+d+BtORRvR75oCDijgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNs0d2vXsRj3YYsBrWDo
+jrvcEA+eMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiBB603Ui+L60FcUWPrB
+Ch06hmgle2u0P07Go/XjTk00ZQIhALGhNArJFEY0gu+XUtyKEZt7BZ0/sh5dtLDP
+xkRgR6Wh
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEzCCAbigAwIBAgIBFjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjMwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPXpzC9/
+KGblQyjhdcS0a8KBPAiS7c0n+V0i9JItbyze38Ncrctp0wIGHZLjRoB4DZYX1I8e
+K5C7KVeUPEE9eOGjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFISsw9orkX/cBVWcK5KA
+//kldz8HMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEA1gazdApLS91ql8Am
+4gb4Ku7Lgll4jV+BrLkbABE2cI0CIQCEH1GUJ6ARJB1GdcHrPyaLgeZ5jV2p63UW
+UV2QL6aETA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBFzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjQwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKdweprb
+RZmuUk4og1Xa9Skb1vu7jsLozlm9CtDhKLbJ+cDX/VeKj/b8FuvakBO3L1QV5XU0
+iFswsIVBVZ3m+TyjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPgcEbHfKHt0o/PCS0kD
+XWW9XkqMMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEA9XDj0w5qMS/tLlr9
+Z2j8JtVR4M7pF/Wx2U43vmPFJEACIBAlAiUnCm1Nfj16t2cojrW+m2t1cU80ihmj
+Ld1U+dRD
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICETCCAbigAwIBAgIBGDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjUwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyNDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABAq2PphK
+4oVsc+ml3zskBLiMa+dz64k+PrrfKIGSG2Ri5Du/orj0dO9639LeCkkMwWpXAfSx
+wxHHQX0I1KwsudGjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEqcfkso+ynKq2eFaJy8
+mzNBdN2PMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNHADBEAiBZ71jDD33HFFqMkLAW
+gTAGMmzh9b/vZ8jAclPDKHRghQIgf2GBOF1eEF8Ino9F1n1ia5c3EryvXnvVoklw
+cjMIQ5g=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBGTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjYwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyNTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJRoDkj7
+iDlIygt4YmMgw4pizu2sx4436MGtw5fFHhjy7T+pPMGjYFg3dixxUOu1NHORpdJq
+8Y7SN8p8Y0XsDpijgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOutMoKSOv5lEGZaqYZM
+zNFwpX3KMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEAks62lsAHmN6xkZsF
+6ocGONpH/XmHLpoO6RfMoRCnWkICIFNFD+W6pSSvdDB96sn8jnZ7W/Y0hyLzscBO
+WtkzqqJJ
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEzCCAbigAwIBAgIBGjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjcwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyNjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE3seRj5
+LVNKi9sZk7qv5cBVUG8BLXXfDRUhCUzT10YAU1J0yd2wmLTbwPyYm65GaecvAHSR
+SExOzX6bC35nNt6jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNx5XhDdoflDgPrW/HyU
+tCokuJ0AMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEApAQVb0KQedyAw1SJ
+J8At4uxxm2b8W13s6ENapxw+lwwCIQC7326NFPsDjbfBKhFDQhCIMkAkYq2wzRJ7
+ubTwkdT19g==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEzCCAbigAwIBAgIBGzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjgwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABC+FQF2E
+TrZ4YGNyxFxzpTQBjlu9QUrwgHzabAn47toqRkWUGAS68jBfSdR+j2c7/oehQHhO
+relHcbQilhZnh4ijgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIOlwsa4FjZWhzQYTAY3
+c2TSYhsEMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEAwxNBi+8baAU76yng
++XvMpY62aqPO4bAe/uedaxBb2jMCIQDJHXqibgIAm1T4/YHimllVlLQudQL5OkbF
+Krj3uVHtBg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBHDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMjkwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyODBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBmhjGvk
+C3QfSVdY5zuHEY4Rf3eKVro6vcKymgdBPFjjDggZNktR3OMnayCabJB51g2VL7Fg
+MegdwzJWzPvQreyjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEvevGIfitXek0IStYIR
+5ne2SkJwMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiBzlv0TggDJWUWx0UHl
+cqxuMpoNdy+ifizQIlcjWcrzvgIhAJdQfkPaZdc4/j/HfGaVNN9InJuBWGrPYU6A
+iwsSB0jY
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEzCCAbigAwIBAgIBHTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMzAwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAyOTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCrC5p+Z
+ywMukm1LRuXeJ5V1M6V+8A8PjqB3tgHVeEn973HOfia8lt2/7EoKaLKzP8A7D3eC
+aBJUmTgHauaolYOjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFGG5D5h1FRA+aZMbSXfZ
+Mp8pjYUEMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEAnI2IhyXtBCRiv+Xs
+EzsO497oVf1U8SJiVR8SaEx0gzgCIQC0+un/Hcb0OWvpvoeHKcRi7e8SZkX+vn2i
+u+KsPqlfzA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBHjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMzEwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAzMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHg1qbhT
+bpV0agLQkk6di7EdwrrqIn7yCiBCfPwoDI7czY1bHwkR2E8EdrG4ZLBHHFXYNHau
+kEo9nueljxbA6MGjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFGXSqDk/Zov8a62kkXDr
+8YhtqdkTMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEA1D2Fm3D8REQtj8o4
+ZrnDyWam0Rx6cEMsvmeoafOBUeUCIBW0IoUYmF46faRQWKN7R8wnvbjUw0bxztzy
+okUR5Pma
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEjCCAbigAwIBAgIBHzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg
+Q0EgMzEwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV
+BAMTDFBvbGljeSBDQSAzMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIwGMmHl
+/QJSpu6KHakSe4gkf3L+NpsrtQpxu6sNfmSjO++dGv6sj2v3+DZNeyagVUJRVHaD
+IZzpoyVVrBBO6vijgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFA+f9g1sP2kM5sOT/8Ge
+IDKq5FcUMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG
+A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB
+BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD
+AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEAvQlbAmF3pS041Zo2
+eHrxMO3j8thB+XqHU8RatCZ60WACIG1vUFPH7UwzTTann7Sgp4s+Gd/jLOkrJnEk
+W3De9dSX
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_policy_tree_data/small_leaf.pem b/test/recipes/80-test_policy_tree_data/small_leaf.pem
new file mode 100644
index 000000000000..c40ddff9e036
--- /dev/null
+++ b/test/recipes/80-test_policy_tree_data/small_leaf.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBmjCCAT+gAwIBAgIBADAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgMTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowGjEYMBYGA1UE
+AxMPd3d3LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER7oh
+z+MnwilNhyEB2bZTuYBpeiwW4QlpYZU6b/8uWOldyMXCaPmaXwY60nrMznfFJX6F
+h8dC6XIzvQmjUMdSoqN4MHYwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMAwGA1UdEwEB/wQCMAAwGgYDVR0RBBMwEYIPd3d3LmV4YW1wbGUuY29t
+MCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMAoGCCqGSM49
+BAMCA0kAMEYCIQC2km5juUULIRYsRgHuLFEiABBR0pDAyTbl9LRjlkSeEQIhAO9b
+ye60dMNbhY1OOzrr4mDRv0tuNmbGBErcFs61YZkC
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_policy_tree_data/small_policy_tree.pem b/test/recipes/80-test_policy_tree_data/small_policy_tree.pem
new file mode 100644
index 000000000000..040542d16a0a
--- /dev/null
+++ b/test/recipes/80-test_policy_tree_data/small_policy_tree.pem
@@ -0,0 +1,70 @@
+-----BEGIN CERTIFICATE-----
+MIICETCCAbagAwIBAgIBATAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgMjAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQu7GyNFjN6
+Sqwk1CZAt+lzTC/Us6ZkO5nsmb8yAuPb6RJ0A2LvUbsmZea+UyBFq3VuEbbuCoeE
+KRbKkS6wefAzo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSQkJvfn8gFHIXVTBJ4hrtP
+ypA9QTAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSQAwRgIhALn6/b3H+jLusJE5QiaS
+PiwrLcl+NDguWCnxo0c6AfduAiEApkXUN+7vRfXeFFd9CfA1BnTW3eUzBOsukZoN
+zaj+utk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICDzCCAbagAwIBAgIBAjAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgMzAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT+p+A+K6MI
+R3eVP/+2O7lam32HU10frEKpyQslZAabYJwkc9iq5WatMbTMPQibuOIWHFl02uJ8
+cxGKy/Hke8P5o4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSSOt6HCXw+L/4uzJsInqqA
+XrWt8DAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDRwAwRAIgS/vh3osFy+q1MLuVnAdg
+gMINfiIJw1+3zbYsJYlNhWgCICu6Qgzee4NwIrJagcdVA0RAfnCOo6wfvikpl0ts
+EepA
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEDCCAbagAwIBAgIBAzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgNDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQONHKgpAJ6
+vE41FYBekpLzybpBQp/gUmgRPKrcL0z4lLTDjCG3j6yIbZma8u2bPM1MBXw5otZ7
+xVFhQ1AkZIOco4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQ69465BL89BXORf4sSnneU
+exkm0jAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAPK9PqPxgme9x6TPFh2z
+vv+qVEM2WxOTdRKOPgUYzCp9AiBl8qO3szv5jNDzb0fRIqVp37v9yBjWcgO9Wl02
+QDCpGw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICETCCAbagAwIBAgIBBDAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgNTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASLrUP7BFi7
++LE2uDVCZ2Z2HK6BpL/kjBbwKkLxlJe+LqNolzu53b8+WtHwrvPPVkD9t3KMdWXU
+K7NtHYgXUz07o4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS0kaY2oJVEBLtjkqI8pXsv
+eqm3VDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSQAwRgIhAJuTMvMUda4Y29V1Tm5O
+jCqBThR2NwdQfnET1sjch3Q7AiEA7nEudfXKMljjz608aWtafTkw5V5I2/SbuUKr
+vjprfIo=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICEDCCAbagAwIBAgIBBTAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg
+Q0EgNTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE
+AxMLUG9saWN5IENBIDUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ9RuYVzUGB
+FkAEM9kHe9xynDo/NcsiaAO3+E2u7jJQQN50d6hVEDHf9961omldhKhP4HTNfhqj
+VMIHKGMhXCgKo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF
+BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTVrjWaVjkfMpilq5tGZ4zZ
+iJtaSDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV
+HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK
+YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB
+MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAPVgPpACX2ylQMEMSntw
+izxKHTSPhXuF6IHhNHRz7KFnAiB8y/QcF7N2iXNZEqffWSkVted/XOw3Xrck0sJ6
+4eXNcw==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_ssl_new.t b/test/recipes/80-test_ssl_new.t
new file mode 100644
index 000000000000..fe03607419a1
--- /dev/null
+++ b/test/recipes/80-test_ssl_new.t
@@ -0,0 +1,188 @@
+#! /usr/bin/env perl
+# Copyright 2015-2022 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
+
+# For manually running these tests, set specific environment variables like this:
+# CTLOG_FILE=test/ct/log_list.cnf
+# TEST_CERTS_DIR=test/certs
+# For details on the environment variables needed, see test/README.ssltest.md
+
+use strict;
+use warnings;
+
+use File::Basename;
+use File::Compare qw/compare_text/;
+use OpenSSL::Glob;
+use OpenSSL::Test qw/:DEFAULT srctop_dir srctop_file bldtop_file bldtop_dir/;
+use OpenSSL::Test::Utils qw/disabled alldisabled available_protocols/;
+
+BEGIN {
+setup("test_ssl_new");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+$ENV{TEST_CERTS_DIR} = srctop_dir("test", "certs");
+
+my @conf_srcs = glob(srctop_file("test", "ssl-tests", "*.cnf.in"));
+map { s/;.*// } @conf_srcs if $^O eq "VMS";
+my @conf_files = map { basename($_, ".in") } @conf_srcs;
+map { s/\^// } @conf_files if $^O eq "VMS";
+
+# We hard-code the number of tests to double-check that the globbing above
+# finds all files as expected.
+plan tests => 30;
+
+# Some test results depend on the configuration of enabled protocols. We only
+# verify generated sources in the default configuration.
+my $is_default_tls = (disabled("ssl3") && !disabled("tls1") &&
+ !disabled("tls1_1") && !disabled("tls1_2") &&
+ !disabled("tls1_3") && (!disabled("ec") || !disabled("dh")));
+
+my $is_default_dtls = (!disabled("dtls1") && !disabled("dtls1_2"));
+
+my @all_pre_tls1_3 = ("ssl3", "tls1", "tls1_1", "tls1_2");
+my $no_tls = alldisabled(available_protocols("tls"));
+my $no_tls_below1_3 = $no_tls || (disabled("tls1_2") && !disabled("tls1_3"));
+if (!$no_tls && $no_tls_below1_3 && disabled("ec") && disabled("dh")) {
+ $no_tls = 1;
+}
+my $no_pre_tls1_3 = alldisabled(@all_pre_tls1_3);
+my $no_dtls = alldisabled(available_protocols("dtls"));
+my $no_npn = disabled("nextprotoneg");
+my $no_ct = disabled("ct");
+my $no_ec = disabled("ec");
+my $no_dh = disabled("dh");
+my $no_dsa = disabled("dsa");
+my $no_ec2m = disabled("ec2m");
+my $no_ocsp = disabled("ocsp");
+
+# Add your test here if the test conf.in generates test cases and/or
+# expectations dynamically based on the OpenSSL compile-time config.
+my %conf_dependent_tests = (
+ "02-protocol-version.cnf" => !$is_default_tls,
+ "04-client_auth.cnf" => !$is_default_tls || !$is_default_dtls
+ || !disabled("sctp"),
+ "05-sni.cnf" => disabled("tls1_1"),
+ "07-dtls-protocol-version.cnf" => !$is_default_dtls || !disabled("sctp"),
+ "10-resumption.cnf" => !$is_default_tls || $no_ec,
+ "11-dtls_resumption.cnf" => !$is_default_dtls || !disabled("sctp"),
+ "16-dtls-certstatus.cnf" => !$is_default_dtls || !disabled("sctp"),
+ "17-renegotiate.cnf" => disabled("tls1_2"),
+ "18-dtls-renegotiate.cnf" => disabled("dtls1_2") || !disabled("sctp"),
+ "19-mac-then-encrypt.cnf" => !$is_default_tls,
+ "20-cert-select.cnf" => !$is_default_tls || $no_dh || $no_dsa,
+ "22-compression.cnf" => !$is_default_tls,
+ "25-cipher.cnf" => disabled("poly1305") || disabled("chacha"),
+ "27-ticket-appdata.cnf" => !$is_default_tls,
+ "28-seclevel.cnf" => disabled("tls1_2") || $no_ec,
+ "30-extended-master-secret.cnf" => disabled("tls1_2"),
+);
+
+# Add your test here if it should be skipped for some compile-time
+# configurations. Default is $no_tls but some tests have different skip
+# conditions.
+my %skip = (
+ "06-sni-ticket.cnf" => $no_tls_below1_3,
+ "07-dtls-protocol-version.cnf" => $no_dtls,
+ "08-npn.cnf" => (disabled("tls1") && disabled("tls1_1")
+ && disabled("tls1_2")) || $no_npn,
+ "10-resumption.cnf" => disabled("tls1_1") || disabled("tls1_2"),
+ "11-dtls_resumption.cnf" => disabled("dtls1") || disabled("dtls1_2"),
+ "12-ct.cnf" => $no_tls || $no_ct || $no_ec,
+ # We could run some of these tests without TLS 1.2 if we had a per-test
+ # disable instruction but that's a bizarre configuration not worth
+ # special-casing for.
+ # TODO(TLS 1.3): We should review this once we have TLS 1.3.
+ "13-fragmentation.cnf" => disabled("tls1_2"),
+ "14-curves.cnf" => disabled("tls1_2") || disabled("tls1_3")
+ || $no_ec || $no_ec2m,
+ "15-certstatus.cnf" => $no_tls || $no_ocsp,
+ "16-dtls-certstatus.cnf" => $no_dtls || $no_ocsp,
+ "17-renegotiate.cnf" => $no_tls_below1_3,
+ "18-dtls-renegotiate.cnf" => $no_dtls,
+ "19-mac-then-encrypt.cnf" => $no_pre_tls1_3,
+ "20-cert-select.cnf" => disabled("tls1_2") || $no_ec,
+ "21-key-update.cnf" => disabled("tls1_3") || ($no_ec && $no_dh),
+ "22-compression.cnf" => disabled("zlib") || $no_tls,
+ "23-srp.cnf" => (disabled("tls1") && disabled ("tls1_1")
+ && disabled("tls1_2")) || disabled("srp"),
+ "24-padding.cnf" => disabled("tls1_3") || ($no_ec && $no_dh),
+ "25-cipher.cnf" => disabled("ec") || disabled("tls1_2"),
+ "26-tls13_client_auth.cnf" => disabled("tls1_3") || ($no_ec && $no_dh),
+ "29-dtls-sctp-label-bug.cnf" => disabled("sctp") || disabled("sock"),
+);
+
+foreach my $conf (@conf_files) {
+ subtest "Test configuration $conf" => sub {
+ plan tests => 6 + ($no_fips ? 0 : 3);
+ test_conf($conf,
+ $conf_dependent_tests{$conf} || $^O eq "VMS" ? 0 : 1,
+ defined($skip{$conf}) ? $skip{$conf} : $no_tls,
+ "none");
+ test_conf($conf,
+ 0,
+ defined($skip{$conf}) ? $skip{$conf} : $no_tls,
+ "default");
+ test_conf($conf,
+ 0,
+ defined($skip{$conf}) ? $skip{$conf} : $no_tls,
+ "fips") unless $no_fips;
+ }
+}
+
+sub test_conf {
+ my ($conf, $check_source, $skip, $provider) = @_;
+
+ my $conf_file = srctop_file("test", "ssl-tests", $conf);
+ my $input_file = $conf_file . ".in";
+ my $output_file = $conf . "." . $provider;
+ my $run_test = 1;
+
+ SKIP: {
+ # "Test" 1. Generate the source.
+ skip 'failure', 2 unless
+ ok(run(perltest(["generate_ssl_tests.pl", $input_file, $provider],
+ interpreter_args => [ "-I", srctop_dir("util", "perl")],
+ stdout => $output_file)),
+ "Getting output from generate_ssl_tests.pl.");
+
+ SKIP: {
+ # Test 2. Compare against existing output in test/ssl-tests/
+ skip "Skipping generated source test for $conf", 1
+ if !$check_source;
+
+ $run_test = is(cmp_text($output_file, $conf_file), 0,
+ "Comparing generated $output_file with $conf_file.");
+ }
+
+ # Test 3. Run the test.
+ skip "No tests available; skipping tests", 1 if $skip;
+ skip "Stale sources; skipping tests", 1 if !$run_test;
+
+ my $msg = "running CTLOG_FILE=test/ct/log_list.cnf". # $ENV{CTLOG_FILE}.
+ " TEST_CERTS_DIR=test/certs". # $ENV{TEST_CERTS_DIR}.
+ " test/ssl_test test/ssl-tests/$conf $provider";
+ if ($provider eq "fips") {
+ ok(run(test(["ssl_test", $output_file, $provider,
+ srctop_file("test", "fips-and-base.cnf")])), $msg);
+ } else {
+ ok(run(test(["ssl_test", $output_file, $provider])), $msg);
+ }
+ }
+}
+
+sub cmp_text {
+ return compare_text(@_, sub {
+ $_[0] =~ s/\R//g;
+ $_[1] =~ s/\R//g;
+ return $_[0] ne $_[1];
+ });
+}
diff --git a/test/recipes/80-test_ssl_old.t b/test/recipes/80-test_ssl_old.t
new file mode 100644
index 000000000000..8c52b637fc82
--- /dev/null
+++ b/test/recipes/80-test_ssl_old.t
@@ -0,0 +1,651 @@
+#! /usr/bin/env perl
+# Copyright 2015-2022 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
+
+
+use strict;
+use warnings;
+
+use POSIX;
+use File::Basename;
+use File::Copy;
+use OpenSSL::Test qw/:DEFAULT with bldtop_file bldtop_dir srctop_file srctop_dir cmdstr data_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+setup("test_ssl_old");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+my ($no_rsa, $no_dsa, $no_dh, $no_ec, $no_psk,
+ $no_ssl3, $no_tls1, $no_tls1_1, $no_tls1_2, $no_tls1_3,
+ $no_dtls, $no_dtls1, $no_dtls1_2, $no_ct) =
+ anydisabled qw/rsa dsa dh ec psk
+ ssl3 tls1 tls1_1 tls1_2 tls1_3
+ dtls dtls1 dtls1_2 ct/;
+#If ec and dh are disabled then don't use TLSv1.3
+$no_tls1_3 = 1 if (!$no_tls1_3 && $no_ec && $no_dh);
+my $no_anytls = alldisabled(available_protocols("tls"));
+my $no_anydtls = alldisabled(available_protocols("dtls"));
+
+plan skip_all => "No SSL/TLS/DTLS protocol is support by this OpenSSL build"
+ if $no_anytls && $no_anydtls;
+
+my $digest = "-sha1";
+my @reqcmd = ("openssl", "req");
+my @x509cmd = ("openssl", "x509", $digest);
+my @verifycmd = ("openssl", "verify");
+my @genpkeycmd = ("openssl", "genpkey");
+my $dummycnf = srctop_file("apps", "openssl.cnf");
+
+my $cnf = srctop_file("test", "ca-and-certs.cnf");
+my $CAkey = srctop_file("test", "certs", "ca-key.pem"); # "keyCA.ss"
+my $CAcert="certCA.ss";
+my $CAserial="certCA.srl";
+my $CAreq="reqCA.ss";
+my $CAreq2="req2CA.ss"; # temp
+my $Ukey = srctop_file("test", "certs", "ee-key.pem"); # "keyU.ss";
+my $Ureq="reqU.ss";
+my $Ucert="certU.ss";
+my $Dkey="keyD.ss";
+my $Dreq="reqD.ss";
+my $Dcert="certD.ss";
+my $Ekey="keyE.ss";
+my $Ereq="reqE.ss";
+my $Ecert="certE.ss";
+
+my $proxycnf=srctop_file("test", "proxy.cnf");
+my $P1key= srctop_file("test", "certs", "alt1-key.pem"); # "keyP1.ss";
+my $P1req="reqP1.ss";
+my $P1cert="certP1.ss";
+my $P1intermediate="tmp_intP1.ss";
+my $P2key= srctop_file("test", "certs", "alt2-key.pem"); # "keyP2.ss";
+my $P2req="reqP2.ss";
+my $P2cert="certP2.ss";
+my $P2intermediate="tmp_intP2.ss";
+
+my $server_sess="server.ss";
+my $client_sess="client.ss";
+
+# ssl_old_test.c is deprecated in favour of the new framework in ssl_test.c
+# If you're adding tests here, you probably want to convert them to the
+# new format in ssl_test.c and add recipes to 80-test_ssl_new.t instead.
+plan tests =>
+ ($no_fips ? 0 : 5) # testssl with fips provider
+ + 1 # For testss
+ + 5 # For the testssl with default provider
+ ;
+
+subtest 'test_ss' => sub {
+ if (testss()) {
+ open OUT, ">", "intP1.ss";
+ copy($CAcert, \*OUT); copy($Ucert, \*OUT);
+ close OUT;
+
+ open OUT, ">", "intP2.ss";
+ copy($CAcert, \*OUT); copy($Ucert, \*OUT); copy($P1cert, \*OUT);
+ close OUT;
+ }
+};
+
+note('test_ssl_old -- key U');
+my $configfile = srctop_file("test","default-and-legacy.cnf");
+if (disabled("legacy")) {
+ $configfile = srctop_file("test","default.cnf");
+}
+
+testssl($Ukey, $Ucert, $CAcert, "default", $configfile);
+unless ($no_fips) {
+ testssl($Ukey, $Ucert, $CAcert, "fips",
+ srctop_file("test","fips-and-base.cnf"));
+}
+
+# -----------
+# subtest functions
+sub testss {
+ my @req_dsa = ("-newkey",
+ "dsa:".data_file("dsa2048.pem"));
+ my $dsaparams = data_file("dsa2048.pem");
+ my @req_new;
+ if ($no_rsa) {
+ @req_new = @req_dsa;
+ } else {
+ @req_new = ("-new");
+ }
+
+ plan tests => 17;
+
+ SKIP: {
+ skip 'failure', 16 unless
+ ok(run(app([@reqcmd, "-config", $cnf,
+ "-out", $CAreq, "-key", $CAkey,
+ @req_new])),
+ 'make cert request');
+
+ skip 'failure', 15 unless
+ ok(run(app([@x509cmd, "-CAcreateserial", "-in", $CAreq, "-days", "30",
+ "-req", "-out", $CAcert, "-signkey", $CAkey,
+ "-extfile", $cnf, "-extensions", "v3_ca"],
+ stdout => "err.ss")),
+ 'convert request into self-signed cert');
+
+ skip 'failure', 14 unless
+ ok(run(app([@x509cmd, "-in", $CAcert,
+ "-x509toreq", "-signkey", $CAkey, "-out", $CAreq2],
+ stdout => "err.ss")),
+ 'convert cert into a cert request');
+
+ skip 'failure', 13 unless
+ ok(run(app([@reqcmd, "-config", $dummycnf,
+ "-verify", "-in", $CAreq, "-noout"])),
+ 'verify request 1');
+
+
+ skip 'failure', 12 unless
+ ok(run(app([@reqcmd, "-config", $dummycnf,
+ "-verify", "-in", $CAreq2, "-noout"])),
+ 'verify request 2');
+
+ skip 'failure', 11 unless
+ ok(run(app([@verifycmd, "-CAfile", $CAcert, $CAcert])),
+ 'verify signature');
+
+ skip 'failure', 10 unless
+ ok(run(app([@reqcmd, "-config", $cnf, "-section", "userreq",
+ "-out", $Ureq, "-key", $Ukey, @req_new],
+ stdout => "err.ss")),
+ 'make a user cert request');
+
+ skip 'failure', 9 unless
+ ok(run(app([@x509cmd, "-CAcreateserial", "-in", $Ureq, "-days", "30",
+ "-req", "-out", $Ucert,
+ "-CA", $CAcert, "-CAkey", $CAkey, "-CAserial", $CAserial,
+ "-extfile", $cnf, "-extensions", "v3_ee"],
+ stdout => "err.ss"))
+ && run(app([@verifycmd, "-CAfile", $CAcert, $Ucert])),
+ 'sign user cert request');
+
+ skip 'failure', 8 unless
+ ok(run(app([@x509cmd,
+ "-subject", "-issuer", "-startdate", "-enddate",
+ "-noout", "-in", $Ucert])),
+ 'Certificate details');
+
+ skip 'failure', 7 unless
+ subtest 'DSA certificate creation' => sub {
+ plan skip_all => "skipping DSA certificate creation"
+ if $no_dsa;
+
+ plan tests => 5;
+
+ SKIP: {
+ $ENV{CN2} = "DSA Certificate";
+ skip 'failure', 4 unless
+ ok(run(app([@genpkeycmd, "-out", $Dkey,
+ "-paramfile", $dsaparams],
+ stdout => "err.ss")),
+ "make a DSA key");
+ skip 'failure', 3 unless
+ ok(run(app([@reqcmd, "-new", "-config", $cnf,
+ "-section", "userreq",
+ "-out", $Dreq, "-key", $Dkey],
+ stdout => "err.ss")),
+ "make a DSA user cert request");
+ skip 'failure', 2 unless
+ ok(run(app([@x509cmd, "-CAcreateserial",
+ "-in", $Dreq,
+ "-days", "30",
+ "-req",
+ "-out", $Dcert,
+ "-CA", $CAcert, "-CAkey", $CAkey,
+ "-CAserial", $CAserial,
+ "-extfile", $cnf,
+ "-extensions", "v3_ee_dsa"],
+ stdout => "err.ss")),
+ "sign DSA user cert request");
+ skip 'failure', 1 unless
+ ok(run(app([@verifycmd, "-CAfile", $CAcert, $Dcert])),
+ "verify DSA user cert");
+ skip 'failure', 0 unless
+ ok(run(app([@x509cmd,
+ "-subject", "-issuer",
+ "-startdate", "-enddate", "-noout",
+ "-in", $Dcert])),
+ "DSA Certificate details");
+ }
+ };
+
+ skip 'failure', 6 unless
+ subtest 'ECDSA/ECDH certificate creation' => sub {
+ plan skip_all => "skipping ECDSA/ECDH certificate creation"
+ if $no_ec;
+
+ plan tests => 5;
+
+ SKIP: {
+ $ENV{CN2} = "ECDSA Certificate";
+ skip 'failure', 4 unless
+ ok(run(app(["openssl", "genpkey", "-genparam",
+ "-algorithm", "EC",
+ "-pkeyopt", "ec_paramgen_curve:P-256",
+ "-pkeyopt", "ec_param_enc:named_curve",
+ "-out", "ecp.ss"])),
+ "make EC parameters");
+ skip 'failure', 3 unless
+ ok(run(app([@reqcmd, "-config", $cnf,
+ "-section", "userreq",
+ "-out", $Ereq, "-keyout", $Ekey,
+ "-newkey", "ec:ecp.ss"],
+ stdout => "err.ss")),
+ "make a ECDSA/ECDH user cert request");
+ skip 'failure', 2 unless
+ ok(run(app([@x509cmd, "-CAcreateserial",
+ "-in", $Ereq,
+ "-days", "30",
+ "-req",
+ "-out", $Ecert,
+ "-CA", $CAcert, "-CAkey", $CAkey,
+ "-CAserial", $CAserial,
+ "-extfile", $cnf,
+ "-extensions", "v3_ee_ec"],
+ stdout => "err.ss")),
+ "sign ECDSA/ECDH user cert request");
+ skip 'failure', 1 unless
+ ok(run(app([@verifycmd, "-CAfile", $CAcert, $Ecert])),
+ "verify ECDSA/ECDH user cert");
+ skip 'failure', 0 unless
+ ok(run(app([@x509cmd,
+ "-subject", "-issuer",
+ "-startdate", "-enddate", "-noout",
+ "-in", $Ecert])),
+ "ECDSA Certificate details");
+ }
+ };
+
+ skip 'failure', 5 unless
+ ok(run(app([@reqcmd, "-config", $proxycnf,
+ "-out", $P1req, "-key", $P1key, @req_new],
+ stdout => "err.ss")),
+ 'make a proxy cert request');
+
+
+ skip 'failure', 4 unless
+ ok(run(app([@x509cmd, "-CAcreateserial", "-in", $P1req, "-days", "30",
+ "-req", "-out", $P1cert,
+ "-CA", $Ucert, "-CAkey", $Ukey,
+ "-extfile", $proxycnf, "-extensions", "proxy"],
+ stdout => "err.ss")),
+ 'sign proxy with user cert');
+
+ copy($Ucert, $P1intermediate);
+ run(app([@verifycmd, "-CAfile", $CAcert,
+ "-untrusted", $P1intermediate, $P1cert]));
+ ok(run(app([@x509cmd,
+ "-subject", "-issuer", "-startdate", "-enddate",
+ "-noout", "-in", $P1cert])),
+ 'Certificate details');
+
+ skip 'failure', 2 unless
+ ok(run(app([@reqcmd, "-config", $proxycnf, "-section", "proxy2_req",
+ "-out", $P2req, "-key", $P2key,
+ @req_new],
+ stdout => "err.ss")),
+ 'make another proxy cert request');
+
+
+ skip 'failure', 1 unless
+ ok(run(app([@x509cmd, "-CAcreateserial", "-in", $P2req, "-days", "30",
+ "-req", "-out", $P2cert,
+ "-CA", $P1cert, "-CAkey", $P1key,
+ "-extfile", $proxycnf, "-extensions", "proxy_2"],
+ stdout => "err.ss")),
+ 'sign second proxy cert request with the first proxy cert');
+
+
+ open OUT, ">", $P2intermediate;
+ copy($Ucert, \*OUT); copy($P1cert, \*OUT);
+ close OUT;
+ run(app([@verifycmd, "-CAfile", $CAcert,
+ "-untrusted", $P2intermediate, $P2cert]));
+ ok(run(app([@x509cmd,
+ "-subject", "-issuer", "-startdate", "-enddate",
+ "-noout", "-in", $P2cert])),
+ 'Certificate details');
+ }
+}
+
+sub testssl {
+ my ($key, $cert, $CAtmp, $provider, $configfile) = @_;
+ my @CA = $CAtmp ? ("-CAfile", $CAtmp) : ("-CApath", bldtop_dir("certs"));
+ my @providerflags = ("-provider", $provider);
+
+ if ($provider eq "default" && !disabled("legacy")) {
+ push @providerflags, "-provider", "legacy";
+ }
+
+ my @ssltest = ("ssl_old_test",
+ "-s_key", $key, "-s_cert", $cert,
+ "-c_key", $key, "-c_cert", $cert,
+ "-config", $configfile,
+ @providerflags);
+
+
+ my $serverinfo = srctop_file("test","serverinfo.pem");
+
+ my $dsa_cert = 0;
+ if (grep /DSA Public Key/, run(app(["openssl", "x509", "-in", $cert,
+ "-text", "-noout"]), capture => 1)) {
+ $dsa_cert = 1;
+ }
+
+
+ subtest 'standard SSL tests' => sub {
+ ######################################################################
+ plan tests => 19;
+
+ SKIP: {
+ skip "SSLv3 is not supported by this OpenSSL build", 4
+ if disabled("ssl3");
+
+ skip "SSLv3 is not supported by the FIPS provider", 4
+ if $provider eq "fips";
+
+ ok(run(test([@ssltest, "-bio_pair", "-ssl3"])),
+ 'test sslv3 via BIO pair');
+ ok(run(test([@ssltest, "-bio_pair", "-ssl3", "-server_auth", @CA])),
+ 'test sslv3 with server authentication via BIO pair');
+ ok(run(test([@ssltest, "-bio_pair", "-ssl3", "-client_auth", @CA])),
+ 'test sslv3 with client authentication via BIO pair');
+ ok(run(test([@ssltest, "-bio_pair", "-ssl3", "-server_auth", "-client_auth", @CA])),
+ 'test sslv3 with both server and client authentication via BIO pair');
+ }
+
+ SKIP: {
+ skip "Neither SSLv3 nor any TLS version are supported by this OpenSSL build", 1
+ if $no_anytls;
+
+ ok(run(test([@ssltest, "-bio_pair"])),
+ 'test sslv2/sslv3 via BIO pair');
+ }
+
+ SKIP: {
+ skip "Neither SSLv3 nor any TLS version are supported by this OpenSSL build", 14
+ if $no_anytls;
+
+ SKIP: {
+ skip "skipping test of sslv2/sslv3 w/o (EC)DHE test", 1 if $dsa_cert;
+
+ ok(run(test([@ssltest, "-bio_pair", "-no_dhe", "-no_ecdhe"])),
+ 'test sslv2/sslv3 w/o (EC)DHE via BIO pair');
+ }
+
+ SKIP: {
+ skip "skipping dhe1024dsa test", 1
+ if ($no_dh);
+
+ ok(run(test([@ssltest, "-bio_pair", "-dhe1024dsa", "-v"])),
+ 'test sslv2/sslv3 with 1024bit DHE via BIO pair');
+ }
+
+ ok(run(test([@ssltest, "-bio_pair", "-server_auth", @CA])),
+ 'test sslv2/sslv3 with server authentication');
+ ok(run(test([@ssltest, "-bio_pair", "-client_auth", @CA])),
+ 'test sslv2/sslv3 with client authentication via BIO pair');
+ ok(run(test([@ssltest, "-bio_pair", "-server_auth", "-client_auth", @CA])),
+ 'test sslv2/sslv3 with both client and server authentication via BIO pair');
+ ok(run(test([@ssltest, "-bio_pair", "-server_auth", "-client_auth", "-app_verify", @CA])),
+ 'test sslv2/sslv3 with both client and server authentication via BIO pair and app verify');
+
+ SKIP: {
+ skip "No IPv4 available on this machine", 4
+ unless !disabled("sock") && have_IPv4();
+ ok(run(test([@ssltest, "-ipv4"])),
+ 'test TLS via IPv4');
+ ok(run(test([@ssltest, "-ipv4", "-client_ktls"])),
+ 'test TLS via IPv4 + ktls(client)');
+ ok(run(test([@ssltest, "-ipv4", "-server_ktls"])),
+ 'test TLS via IPv4 + ktls(server)');
+ ok(run(test([@ssltest, "-ipv4", "-client_ktls", "-server_ktls"])),
+ 'test TLS via IPv4 + ktls');
+ }
+
+ SKIP: {
+ skip "No IPv6 available on this machine", 4
+ unless !disabled("sock") && have_IPv6();
+ ok(run(test([@ssltest, "-ipv6"])),
+ 'test TLS via IPv6');
+ ok(run(test([@ssltest, "-ipv6", "-client_ktls"])),
+ 'test TLS via IPv6 + ktls(client)');
+ ok(run(test([@ssltest, "-ipv6", "-server_ktls"])),
+ 'test TLS via IPv6 + ktls(client)');
+ ok(run(test([@ssltest, "-ipv6", "-client_ktls", "-server_ktls"])),
+ 'test TLS via IPv6 + ktls');
+ }
+ }
+ };
+
+ subtest "Testing ciphersuites" => sub {
+
+ my @exkeys = ();
+ my $ciphers = '-PSK:-SRP:@SECLEVEL=0';
+
+ if (!$no_dsa) {
+ push @exkeys, "-s_cert", "certD.ss", "-s_key", $Dkey;
+ }
+
+ if (!$no_ec) {
+ push @exkeys, "-s_cert", "certE.ss", "-s_key", $Ekey;
+ }
+
+ my @protocols = ();
+ # We only use the flags that ssl_old_test understands
+ push @protocols, "-tls1_3" unless $no_tls1_3;
+ push @protocols, "-tls1_2" unless $no_tls1_2;
+ push @protocols, "-tls1" unless $no_tls1 || $provider eq "fips";
+ push @protocols, "-ssl3" unless $no_ssl3 || $provider eq "fips";
+ my $protocolciphersuitecount = 0;
+ my %ciphersuites = ();
+ my %ciphersstatus = ();
+ #There's no "-config" option to the ciphers command so we set the
+ #environment variable instead
+ my $opensslconf = $ENV{OPENSSL_CONF};
+ $ENV{OPENSSL_CONF} = $configfile;
+ foreach my $protocol (@protocols) {
+ my $ciphersstatus = undef;
+ my @ciphers = run(app(["openssl", "ciphers", "-s", $protocol,
+ @providerflags,
+ "ALL:$ciphers"]),
+ capture => 1, statusvar => \$ciphersstatus);
+ $ciphersstatus{$protocol} = $ciphersstatus;
+ if ($ciphersstatus) {
+ $ciphersuites{$protocol} = [ map { s|\R||; split(/:/, $_) }
+ @ciphers ];
+ $protocolciphersuitecount += scalar @{$ciphersuites{$protocol}};
+ }
+ }
+ $ENV{OPENSSL_CONF} = $opensslconf;
+
+ plan skip_all => "None of the ciphersuites to test are available in this OpenSSL build"
+ if $protocolciphersuitecount + scalar(keys %ciphersuites) == 0;
+
+ # The count of protocols is because in addition to the ciphersuites
+ # we got above, we're running a weak DH test for each protocol (except
+ # TLSv1.3)
+ my $testcount = scalar(@protocols) + $protocolciphersuitecount
+ + scalar(keys %ciphersuites);
+ $testcount-- unless $no_tls1_3;
+ plan tests => $testcount;
+
+ foreach my $protocol (@protocols) {
+ ok($ciphersstatus{$protocol}, "Getting ciphers for $protocol");
+ }
+
+ foreach my $protocol (sort keys %ciphersuites) {
+ note "Testing ciphersuites for $protocol";
+ # ssl_old_test doesn't know -tls1_3, but that's fine, since that's
+ # the default choice if TLSv1.3 enabled
+ my $flag = $protocol eq "-tls1_3" ? "" : $protocol;
+ my $ciphersuites = "";
+ foreach my $cipher (@{$ciphersuites{$protocol}}) {
+ if ($protocol eq "-ssl3" && $cipher =~ /ECDH/ ) {
+ note "*****SKIPPING $protocol $cipher";
+ ok(1);
+ } else {
+ if ($protocol eq "-tls1_3") {
+ $ciphersuites = $cipher;
+ $cipher = "";
+ } else {
+ $cipher = $cipher.':@SECLEVEL=0';
+ }
+ ok(run(test([@ssltest, @exkeys, "-cipher",
+ $cipher,
+ "-ciphersuites", $ciphersuites,
+ $flag || ()])),
+ "Testing $cipher");
+ }
+ }
+ next if $protocol eq "-tls1_3";
+
+ SKIP: {
+ skip "skipping dhe512 test", 1
+ if ($no_dh);
+
+ is(run(test([@ssltest,
+ "-s_cipher", "EDH",
+ "-c_cipher", 'EDH:@SECLEVEL=1',
+ "-dhe512",
+ $protocol])), 0,
+ "testing connection with weak DH, expecting failure");
+ }
+ }
+ };
+
+ subtest 'RSA/(EC)DHE/PSK tests' => sub {
+ ######################################################################
+
+ plan tests => 10;
+
+ SKIP: {
+ skip "TLSv1.0 is not supported by this OpenSSL build", 6
+ if $no_tls1 || $provider eq "fips";
+
+ SKIP: {
+ skip "skipping anonymous DH tests", 1
+ if ($no_dh);
+
+ ok(run(test([@ssltest, "-v", "-bio_pair", "-tls1", "-cipher", "ADH", "-dhe1024dsa", "-num", "10", "-f", "-time"])),
+ 'test tlsv1 with 1024bit anonymous DH, multiple handshakes');
+ }
+
+ SKIP: {
+ skip "skipping RSA tests", 2
+ if $no_rsa;
+
+ ok(run(test(["ssl_old_test", "-provider", "default", "-v", "-bio_pair", "-tls1", "-s_cert", srctop_file("apps","server2.pem"), "-no_dhe", "-no_ecdhe", "-num", "10", "-f", "-time"])),
+ 'test tlsv1 with 1024bit RSA, no (EC)DHE, multiple handshakes');
+
+ skip "skipping RSA+DHE tests", 1
+ if $no_dh;
+
+ ok(run(test(["ssl_old_test", "-provider", "default", "-v", "-bio_pair", "-tls1", "-s_cert", srctop_file("apps","server2.pem"), "-dhe1024dsa", "-num", "10", "-f", "-time"])),
+ 'test tlsv1 with 1024bit RSA, 1024bit DHE, multiple handshakes');
+ }
+
+ SKIP: {
+ skip "skipping PSK tests", 2
+ if ($no_psk);
+
+ ok(run(test([@ssltest, "-tls1", "-cipher", "PSK", "-psk", "abc123"])),
+ 'test tls1 with PSK');
+
+ ok(run(test([@ssltest, "-bio_pair", "-tls1", "-cipher", "PSK", "-psk", "abc123"])),
+ 'test tls1 with PSK via BIO pair');
+ }
+
+ SKIP: {
+ skip "skipping auto DH PSK tests", 1
+ if ($no_dh || $no_psk);
+
+ ok(run(test(['ssl_old_test', '-psk', '0102030405', '-cipher', '@SECLEVEL=2:DHE-PSK-AES128-CCM'])),
+ 'test auto DH meets security strength');
+ }
+ }
+
+ SKIP: {
+ skip "TLSv1.1 is not supported by this OpenSSL build", 4
+ if $no_tls1_1;
+
+ SKIP: {
+ skip "skipping auto DHE PSK test at SECLEVEL 3", 1
+ if ($no_dh || $no_psk);
+
+ ok(run(test(['ssl_old_test', '-tls1_1', '-dhe4096', '-psk', '0102030405', '-cipher', '@SECLEVEL=3:DHE-PSK-AES256-CBC-SHA384'])),
+ 'test auto DHE PSK meets security strength');
+ }
+
+ SKIP: {
+ skip "skipping auto ECDHE PSK test at SECLEVEL 3", 1
+ if ($no_ec || $no_psk);
+
+ ok(run(test(['ssl_old_test', '-tls1_1', '-no_dhe', '-psk', '0102030405', '-cipher', '@SECLEVEL=3:ECDHE-PSK-AES256-CBC-SHA384'])),
+ 'test auto ECDHE PSK meets security strength');
+ }
+
+ SKIP: {
+ skip "skipping no RSA PSK at SECLEVEL 3 test", 1
+ if ($no_rsa || $no_psk);
+
+ ok(!run(test(['ssl_old_test', '-tls1_1', '-no_dhe', '-psk', '0102030405', '-cipher', '@SECLEVEL=3:RSA-PSK-AES256-CBC-SHA384'])),
+ 'test auto RSA PSK does not meet security level 3 requirements (PFS)');
+ }
+
+ SKIP: {
+ skip "skipping no PSK at SECLEVEL 3 test", 1
+ if ($no_psk);
+
+ ok(!run(test(['ssl_old_test', '-tls1_1', '-no_dhe', '-psk', '0102030405', '-cipher', '@SECLEVEL=3:PSK-AES256-CBC-SHA384'])),
+ 'test auto PSK does not meet security level 3 requirements (PFS)');
+ }
+ }
+
+ };
+
+ subtest 'Custom Extension tests' => sub {
+ ######################################################################
+
+ plan tests => 1;
+
+ SKIP: {
+ skip "TLSv1.0 is not supported by this OpenSSL build", 1
+ if $no_tls1 || $provider eq "fips";
+
+ ok(run(test([@ssltest, "-bio_pair", "-tls1", "-custom_ext"])),
+ 'test tls1 with custom extensions');
+ }
+ };
+
+ subtest 'Serverinfo tests' => sub {
+ ######################################################################
+
+ plan tests => 5;
+
+ SKIP: {
+ skip "TLSv1.0 is not supported by this OpenSSL build", 5
+ if $no_tls1 || $provider eq "fips";
+
+ note('echo test tls1 with serverinfo');
+ ok(run(test([@ssltest, "-bio_pair", "-tls1", "-serverinfo_file", $serverinfo])));
+ ok(run(test([@ssltest, "-bio_pair", "-tls1", "-serverinfo_file", $serverinfo, "-serverinfo_sct"])));
+ ok(run(test([@ssltest, "-bio_pair", "-tls1", "-serverinfo_file", $serverinfo, "-serverinfo_tack"])));
+ ok(run(test([@ssltest, "-bio_pair", "-tls1", "-serverinfo_file", $serverinfo, "-serverinfo_sct", "-serverinfo_tack"])));
+ ok(run(test([@ssltest, "-bio_pair", "-tls1", "-custom_ext", "-serverinfo_file", $serverinfo, "-serverinfo_sct", "-serverinfo_tack"])));
+ }
+ };
+}
diff --git a/test/recipes/80-test_ssl_old_data/dsa2048.pem b/test/recipes/80-test_ssl_old_data/dsa2048.pem
new file mode 100644
index 000000000000..fe19703445b1
--- /dev/null
+++ b/test/recipes/80-test_ssl_old_data/dsa2048.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKAKCAQEAgs47OPFxfQkX45kHL/B2S3nQciJ7n0KeYc0QQx/wJn5XSQN1/K7F
+Jn70pXFg4xvj6TyATGbQwwkIf8faGA4lN/RWeNfhjW8nieXa1OtQQ/8oKU+LJWyT
+mabObd6mMtD/8itrdozGxaLgSTOIqdqXY5wC28FWZP5NRmaM4IR4e3/aCcHHQIM/
+n9jAornTNnkluB/iPTVfZtsUht7coM2d00TP2rxTW0ROiq6IcCNjEj66ENL/N9eP
++Pud3xNIqBVXWw8gp7WnpZwO0fBj/IpaldfMpv68AA/61qkv3GkAVqPHmNSu/7cV
++n+cota0QoCUXKFsW5H3wPqfbrPc/nDrsQIdAO08IJyljQlKs85MWKSOW8WpG/j3
+Wf4H1Ri0SAECggEAT82XewPGwVOIK/Y0PzrAlLeYN/jicIVNqjKcZsaRKMzvO/g9
+yJa4HTLslvH6fFyGEoWMC96b+DxtRayJ09beaBNFbFdB0H4hqF7ayiImQ+ROERcG
+geFUew0x0pYuNllWkB6gctA0Z+olmLR3YI0l6qUGewFms/RA0eokgZJyLusPLlgY
+tkrd75dxZ0Wdz6uHFzIVQwroubcrA7TBDSSbS6FjPPQC+tLCM3VcCH6OG9x1hHUq
+pt9QI1//WwWrYDLc/bP0Gi4NHfPByMSnckNqPmREqXrhngeLyfjlQZnhWbrwPwwT
+pC3Y8Wfzb9cs1jXO1tswXEMh+4CDyQ6ndCf9SQ==
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/80-test_ssl_test_ctx.t b/test/recipes/80-test_ssl_test_ctx.t
new file mode 100644
index 000000000000..ba908ca91648
--- /dev/null
+++ b/test/recipes/80-test_ssl_test_ctx.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_ssl_test_ctx");
+
+plan tests => 1;
+ok(run(test(["ssl_test_ctx_test", srctop_file("test", "ssl_test_ctx_test.cnf")])),
+ "running ssl_test_ctx_test ssl_test_ctx_test.cnf");
diff --git a/test/recipes/80-test_sslcorrupt.t b/test/recipes/80-test_sslcorrupt.t
new file mode 100644
index 000000000000..3bc973f01382
--- /dev/null
+++ b/test/recipes/80-test_sslcorrupt.t
@@ -0,0 +1,20 @@
+#! /usr/bin/env perl
+# Copyright 2016 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
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_sslcorrupt");
+
+plan skip_all => "No TLS protocols are supported by this OpenSSL build"
+ if alldisabled(available_protocols("tls"));
+
+plan tests => 1;
+
+ok(run(test(["sslcorrupttest", srctop_file("apps", "server.pem"),
+ srctop_file("apps", "server.pem")])), "running sslcorrupttest");
diff --git a/test/recipes/80-test_tsa.t b/test/recipes/80-test_tsa.t
new file mode 100644
index 000000000000..a76d4a9d05b5
--- /dev/null
+++ b/test/recipes/80-test_tsa.t
@@ -0,0 +1,250 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use POSIX;
+use File::Spec::Functions qw/splitdir curdir catfile/;
+use File::Compare;
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_tsa");
+
+plan skip_all => "TS is not supported by this OpenSSL build"
+ if disabled("ts");
+
+# All these are modified inside indir further down. They need to exist
+# here, however, to be available in all subroutines.
+my $openssl_conf;
+my $testtsa;
+my $tsacakey;
+my $CAtsa;
+my @QUERY = ("openssl", "ts", "-query");
+my @REPLY;
+my @VERIFY = ("openssl", "ts", "-verify");
+
+sub create_tsa_cert {
+ my $INDEX = shift;
+ my $EXT = shift;
+ my $r = 1;
+ $ENV{TSDNSECT} = "ts_cert_dn";
+
+ ok(run(app(["openssl", "req", "-config", $openssl_conf, "-new",
+ "-out", "tsa_req${INDEX}.pem",
+ "-key", srctop_file("test", "certs", "alt${INDEX}-key.pem"),
+ "-keyout", "tsa_key${INDEX}.pem"])));
+ note "using extension $EXT";
+ ok(run(app(["openssl", "x509", "-req",
+ "-in", "tsa_req${INDEX}.pem",
+ "-out", "tsa_cert${INDEX}.pem",
+ "-CA", "tsaca.pem", "-CAkey", $tsacakey,
+ "-CAcreateserial",
+ "-extfile", $openssl_conf, "-extensions", $EXT])));
+}
+
+sub create_resp {
+ my $config = shift;
+ my $chain = shift;
+ my $queryfile = shift;
+ my $outputfile = shift;
+
+ ok(run(app([@REPLY, "-section", $config, "-queryfile", $queryfile,
+ "-chain", $chain, # this overrides "certs" entry in config
+ "-out", $outputfile])));
+}
+
+sub verify_ok {
+ my $datafile = shift;
+ my $queryfile = shift;
+ my $inputfile = shift;
+ my $untrustedfile = shift;
+
+ ok(run(app([@VERIFY, "-queryfile", $queryfile, "-in", $inputfile,
+ "-CAfile", "tsaca.pem", "-untrusted", $untrustedfile])));
+ ok(run(app([@VERIFY, "-data", $datafile, "-in", $inputfile,
+ "-CAfile", "tsaca.pem", "-untrusted", $untrustedfile])));
+}
+
+sub verify_fail {
+ my $queryfile = shift;
+ my $inputfile = shift;
+ my $untrustedfile = shift; # is needed for resp2, but not for resp1
+ my $cafile = shift;
+
+ ok(!run(app([@VERIFY, "-queryfile", $queryfile, "-in", $inputfile,
+ "-untrusted", $untrustedfile, "-CAfile", $cafile])));
+}
+
+# main functions
+
+plan tests => 27;
+
+note "setting up TSA test directory";
+indir "tsa" => sub
+{
+ $openssl_conf = srctop_file("test", "CAtsa.cnf");
+ $testtsa = srctop_file("test", "recipes", "80-test_tsa.t");
+ $tsacakey = srctop_file("test", "certs", "ca-key.pem");
+ $CAtsa = srctop_file("test", "CAtsa.cnf");
+ @REPLY = ("openssl", "ts", "-config", $openssl_conf, "-reply");
+
+ # ../apps/CA.pl needs these
+ $ENV{OPENSSL_CONFIG} = "-config $openssl_conf";
+ $ENV{OPENSSL} = cmdstr(app(["openssl"]), display => 1);
+
+ SKIP: {
+ $ENV{TSDNSECT} = "ts_ca_dn";
+ skip "failed", 19
+ unless ok(run(app(["openssl", "req", "-config", $openssl_conf,
+ "-new", "-x509", "-noenc",
+ "-out", "tsaca.pem", "-key", $tsacakey])),
+ 'creating a new CA for the TSA tests');
+
+ skip "failed", 18
+ unless subtest 'creating tsa_cert1.pem TSA server cert' => sub {
+ create_tsa_cert("1", "tsa_cert")
+ };
+
+ skip "failed", 17
+ unless subtest 'creating tsa_cert2.pem non-TSA server cert' => sub {
+ create_tsa_cert("2", "non_tsa_cert")
+ };
+
+ skip "failed", 16
+ unless ok(run(app([@QUERY, "-data", $testtsa,
+ "-tspolicy", "tsa_policy1", "-cert",
+ "-out", "req1.tsq"])),
+ 'creating req1.req time stamp request for file testtsa');
+
+ ok(run(app([@QUERY, "-in", "req1.tsq", "-text"])),
+ 'printing req1.req');
+
+ subtest 'generating valid response for req1.req' => sub {
+ create_resp("tsa_config1", "tsaca.pem", "req1.tsq", "resp1.tsr")
+ };
+
+ subtest 'generating response with wrong 2nd certid for req1.req' => sub {
+ create_resp("tsa_config1", "tsa_cert1.pem", "req1.tsq",
+ "resp1_invalid.tsr")
+ };
+
+ ok(run(app([@REPLY, "-in", "resp1.tsr", "-text"])),
+ 'printing response');
+
+ subtest 'verifying valid response' => sub {
+ verify_ok($testtsa, "req1.tsq", "resp1.tsr", "tsa_cert1.pem")
+ };
+
+ skip "failed", 11
+ unless subtest 'verifying valid token' => sub {
+ ok(run(app([@REPLY, "-in", "resp1.tsr",
+ "-out", "resp1.tsr.token", "-token_out"])));
+ ok(run(app([@VERIFY, "-queryfile", "req1.tsq",
+ "-in", "resp1.tsr.token", "-token_in",
+ "-CAfile", "tsaca.pem"])));
+ ok(run(app([@VERIFY, "-data", $testtsa,
+ "-in", "resp1.tsr.token", "-token_in",
+ "-CAfile", "tsaca.pem"])));
+ };
+
+ skip "failed", 10
+ unless ok(run(app([@QUERY, "-data", $testtsa,
+ "-tspolicy", "tsa_policy2", "-no_nonce",
+ "-out", "req2.tsq"])),
+ 'creating req2.req time stamp request for file testtsa');
+
+ ok(run(app([@QUERY, "-in", "req2.tsq", "-text"])),
+ 'printing req2.req');
+
+ skip "failed", 8
+ unless subtest 'generating valid response for req2.req' => sub {
+ create_resp("tsa_config1", "tsaca.pem", "req2.tsq", "resp2.tsr")
+ };
+
+ skip "failed", 7
+ unless subtest 'checking -token_in and -token_out options with -reply' => sub {
+ my $RESPONSE2="resp2.tsr.copy.tsr";
+ my $TOKEN_DER="resp2.tsr.token.der";
+
+ ok(run(app([@REPLY, "-in", "resp2.tsr",
+ "-out", "$TOKEN_DER", "-token_out"])));
+ ok(run(app([@REPLY, "-in", "$TOKEN_DER",
+ "-token_in", "-out", "$RESPONSE2"])));
+ is(compare($RESPONSE2, "resp2.tsr"), 0);
+ ok(run(app([@REPLY, "-in", "resp2.tsr",
+ "-text", "-token_out"])));
+ ok(run(app([@REPLY, "-in", "$TOKEN_DER",
+ "-token_in", "-text", "-token_out"])));
+ ok(run(app([@REPLY, "-queryfile", "req2.tsq",
+ "-text", "-token_out"])));
+ };
+
+ ok(run(app([@REPLY, "-in", "resp2.tsr", "-text"])),
+ 'printing response');
+
+ subtest 'verifying valid resp1, wrong untrusted is not used' => sub {
+ verify_ok($testtsa, "req1.tsq", "resp1.tsr", "tsa_cert2.pem")
+ };
+
+ subtest 'verifying invalid resp1 with wrong 2nd certid' => sub {
+ verify_fail($testtsa, "req1.tsq", "resp1_invalid.tsr", "tsa_cert2.pem")
+ };
+
+ subtest 'verifying valid resp2, correct untrusted being used' => sub {
+ verify_ok($testtsa, "req2.tsq", "resp2.tsr", "tsa_cert1.pem")
+ };
+
+ subtest 'verifying resp2 against wrong req1 should fail' => sub {
+ verify_fail("req1.tsq", "resp2.tsr", "tsa_cert1.pem", "tsaca.pem")
+ };
+
+ subtest 'verifying resp1 against wrong req2 should fail' => sub {
+ verify_fail("req2.tsq", "resp1.tsr", "tsa_cert1.pem", "tsaca.pem")
+ };
+
+ subtest 'verifying resp1 using wrong untrusted should fail' => sub {
+ verify_fail("req2.tsq", "resp2.tsr", "tsa_cert2.pem", "tsaca.pem")
+ };
+
+ subtest 'verifying resp1 using wrong root should fail' => sub {
+ verify_fail("req1.tsq", "resp1.tsr", "tsa_cert1.pem", "tsa_cert1.pem")
+ };
+
+ skip "failure", 2
+ unless ok(run(app([@QUERY, "-data", $CAtsa,
+ "-no_nonce", "-out", "req3.tsq"])),
+ "creating req3.req time stamp request for file CAtsa.cnf");
+
+ ok(run(app([@QUERY, "-in", "req3.tsq", "-text"])),
+ 'printing req3.req');
+
+ subtest 'verifying resp1 against wrong req3 should fail' => sub {
+ verify_fail("req3.tsq", "resp1.tsr", "tsa_cert1.pem", "tsaca.pem")
+ };
+ }
+
+ # verifying response with two ESSCertIDs, referring to leaf cert
+ # "sectigo-signer.pem" and intermediate cert "sectigo-time-stamping-ca.pem"
+ # 1. validation chain contains these certs and root "user-trust-ca.pem"
+ ok(run(app([@VERIFY, "-no_check_time",
+ "-queryfile", data_file("all-zero.tsq"),
+ "-in", data_file("sectigo-all-zero.tsr"),
+ "-CAfile", data_file("user-trust-ca.pem")])),
+ "validation with two ESSCertIDs and 3-element chain");
+ # 2. validation chain contains these certs, a cross-cert, and different root
+ ok(run(app([@VERIFY, "-no_check_time",
+ "-queryfile", data_file("all-zero.tsq"),
+ "-in", data_file("sectigo-all-zero.tsr"),
+ "-untrusted", data_file("user-trust-ca-aaa.pem"),
+ "-CAfile", data_file("comodo-aaa.pem")])),
+ "validation with two ESSCertIDs and 4-element chain");
+
+}, create => 1, cleanup => 1
diff --git a/test/recipes/80-test_tsa_data/all-zero.tsq b/test/recipes/80-test_tsa_data/all-zero.tsq
new file mode 100644
index 000000000000..60d9574e6133
--- /dev/null
+++ b/test/recipes/80-test_tsa_data/all-zero.tsq
Binary files differ
diff --git a/test/recipes/80-test_tsa_data/comodo-aaa.pem b/test/recipes/80-test_tsa_data/comodo-aaa.pem
new file mode 100644
index 000000000000..33c71ba9db77
--- /dev/null
+++ b/test/recipes/80-test_tsa_data/comodo-aaa.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
+YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
+MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
+BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
+GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
+BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
+3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
+YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
+rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
+ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
+oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
+QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
+b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
+AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
+GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
+G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
+l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
+smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_tsa_data/sectigo-all-zero.tsr b/test/recipes/80-test_tsa_data/sectigo-all-zero.tsr
new file mode 100644
index 000000000000..a65f35fceb2e
--- /dev/null
+++ b/test/recipes/80-test_tsa_data/sectigo-all-zero.tsr
Binary files differ
diff --git a/test/recipes/80-test_tsa_data/sectigo-signer.pem b/test/recipes/80-test_tsa_data/sectigo-signer.pem
new file mode 100644
index 000000000000..6adf1338fab2
--- /dev/null
+++ b/test/recipes/80-test_tsa_data/sectigo-signer.pem
@@ -0,0 +1,40 @@
+-----BEGIN CERTIFICATE-----
+MIIHBzCCBO+gAwIBAgIRAIx3oACP9NGwxj2fOkiDjWswDQYJKoZIhvcNAQEMBQAw
+fTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSUwIwYDVQQD
+ExxTZWN0aWdvIFJTQSBUaW1lIFN0YW1waW5nIENBMB4XDTIwMTAyMzAwMDAwMFoX
+DTMyMDEyMjIzNTk1OVowgYQxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVy
+IE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28g
+TGltaXRlZDEsMCoGA1UEAwwjU2VjdGlnbyBSU0EgVGltZSBTdGFtcGluZyBTaWdu
+ZXIgIzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCRh0ssi8HxHqCe
+0wfGAcpSsL55eV0JZgYtLzV9u8D7J9pCalkbJUzq70DWmn4yyGqBfbRcPlYQgTU6
+IjaM+/ggKYesdNAbYrw/ZIcCX+/FgO8GHNxeTpOHuJreTAdOhcxwxQ177MPZ45fp
+yxnbVkVs7ksgbMk+bP3wm/Eo+JGZqvxawZqCIDq37+fWuCVJwjkbh4E5y8O3Os2f
+UAQfGpmkgAJNHQWoVdNtUoCD5m5IpV/BiVhgiu/xrM2HYxiOdMuEh0FpY4G89h+q
+fNfBQc6tq3aLIIDULZUHjcf1CxcemuXWmWlRx06mnSlv53mTDTJjU67MximKIMFg
+xvICLMT5yCLf+SeCoYNRwrzJghohhLKXvNSvRByWgiKVKoVUrvH9Pkl0dPyOrj+l
+cvTDWgGqUKWLdpUbZuvv2t+ULtka60wnfUwF9/gjXcRXyCYFevyBI19UCTgqYtWq
+yt/tz1OrH/ZEnNWZWcVWZFv3jlIPZvyYP0QGE2Ru6eEVYFClsezPuOjJC77FhPfd
+Cp3avClsPVbtv3hntlvIXhQcua+ELXei9zmVN29OfxzGPATWMcV+7z3oUX5xrSR0
+Gyzc+Xyq78J2SWhi1Yv1A9++fY4PNnVGW5N2xIPugr4srjcS8bxWw+StQ8O3ZpZe
+lDL6oPariVD6zqDzCIEa0USnzPe4MQIDAQABo4IBeDCCAXQwHwYDVR0jBBgwFoAU
+GqH4YRkgD8NBd0UojtE1XwYSBFUwHQYDVR0OBBYEFGl1N3u7nTVCTr9X05rbnwHR
+rt7QMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoG
+CCsGAQUFBwMIMEAGA1UdIAQ5MDcwNQYMKwYBBAGyMQECAQMIMCUwIwYIKwYBBQUH
+AgEWF2h0dHBzOi8vc2VjdGlnby5jb20vQ1BTMEQGA1UdHwQ9MDswOaA3oDWGM2h0
+dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1JTQVRpbWVTdGFtcGluZ0NBLmNy
+bDB0BggrBgEFBQcBAQRoMGYwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQuc2VjdGln
+by5jb20vU2VjdGlnb1JTQVRpbWVTdGFtcGluZ0NBLmNydDAjBggrBgEFBQcwAYYX
+aHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEMBQADggIBAEoDeJBC
+M+x7GoMJNjOYVbudQAYwa0Vq8ZQOGVD/WyVeO+E5xFu66ZWQNze93/tk7OWCt5XM
+V1VwS070qIfdIoWmV7u4ISfUoCoxlIoHIZ6Kvaca9QIVy0RQmYzsProDd6aCApDC
+LpOpviE0dWO54C0PzwE3y42i+rhamq6hep4TkxlVjwmQLt/qiBcW62nW4SW9RQiX
+gNdUIChPynuzs6XSALBgNGXE48XDpeS6hap6adt1pD55aJo2i0OuNtRhcjwOhWIN
+oF5w22QvAcfBoccklKOyPG6yXqLQ+qjRuCUcFubA1X9oGsRlKTUqLYi86q501oLn
+wIi44U948FzKwEBcwp/VMhws2jysNvcGUpqjQDAXsCkWmcmqt4hJ9+gLJTO1P22v
+n18KVt8SscPuzpF36CAT6Vwkx+pEC0rmE4QcTesNtbiGoDCni6GftCzMwBYjyZHl
+QgNLgM7kTeYqAT7AXoWgJKEXQNXb2+eYEKTx6hkbgFT6R4nomIGpdcAO39BolHmh
+oJ6OtrdCZsvZ2WsvTdjePjIeIOTsnE1CjZ3HM5mCN0TUJikmQI54L7nu+i/x8Y/+
+ULh43RSW3hwOcLAqhWqxbGjpKuQQK24h/dN8nTfkKgbWw/HXaONPB3mBCBP+smRe
+6bE85tB4I7IJLOImYr87qZdRzMdEMoGyr8/f
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_tsa_data/sectigo-time-stamping-ca.pem b/test/recipes/80-test_tsa_data/sectigo-time-stamping-ca.pem
new file mode 100644
index 000000000000..f65021c95cf9
--- /dev/null
+++ b/test/recipes/80-test_tsa_data/sectigo-time-stamping-ca.pem
@@ -0,0 +1,39 @@
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgIQMA9vrN1mmHR8qUY2p3gtuTANBgkqhkiG9w0BAQwFADCB
+iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
+cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
+BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTkw
+NTAyMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjB9MQswCQYDVQQGEwJHQjEbMBkGA1UE
+CBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQK
+Ew9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNlY3RpZ28gUlNBIFRpbWUgU3Rh
+bXBpbmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDIGwGv2Sx+
+iJl9AZg/IJC9nIAhVJO5z6A+U++zWsB21hoEpc5Hg7XrxMxJNMvzRWW5+adkFiYJ
++9UyUnkuyWPCE5u2hj8BBZJmbyGr1XEQeYf0RirNxFrJ29ddSU1yVg/cyeNTmDoq
+HvzOWEnTv/M5u7mkI0Ks0BXDf56iXNc48RaycNOjxN+zxXKsLgp3/A2UUrf8H5Vz
+JD0BKLwPDU+zkQGObp0ndVXRFzs0IXuXAZSvf4DP0REKV4TJf1bgvUacgr6Unb+0
+ILBgfrhN9Q0/29DqhYyKVnHRLZRMyIw80xSinL0m/9NTIMdgaZtYClT0Bef9Maz5
+yIUXx7gpGaQpL0bj3duRX58/Nj4OMGcrRrc1r5a+2kxgzKi7nw0U1BjEMJh0giHP
+Yla1IXMSHv2qyghYh3ekFesZVf/QOVQtJu5FGjpvzdeE8NfwKMVPZIMC1Pvi3vG8
+Aij0bdonigbSlofe6GsO8Ft96XZpkyAcSpcsdxkrk5WYnJee647BeFbGRCXfBhKa
+Bi2fA179g6JTZ8qx+o2hZMmIklnLqEbAyfKm/31X2xJ2+opBJNQb/HKlFKLUrUMc
+pEmLQTkUAx4p+hulIq6lw02C0I3aa7fb9xhAV3PwcaP7Sn1FNsH3jYL6uckNU4B9
++rY5WDLvbxhQiddPnTO9GrWdod6VQXqngwIDAQABo4IBWjCCAVYwHwYDVR0jBBgw
+FoAUU3m/WqorSs9UgOHYm8Cd8rIDZsswHQYDVR0OBBYEFBqh+GEZIA/DQXdFKI7R
+NV8GEgRVMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMBMGA1Ud
+JQQMMAoGCCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0gADBQBgNVHR8ESTBHMEWg
+Q6BBhj9odHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQ2VydGlm
+aWNhdGlvbkF1dGhvcml0eS5jcmwwdgYIKwYBBQUHAQEEajBoMD8GCCsGAQUFBzAC
+hjNodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQWRkVHJ1c3RD
+QS5jcnQwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJ
+KoZIhvcNAQEMBQADggIBAG1UgaUzXRbhtVOBkXXfA3oyCy0lhBGysNsqfSoF9bw7
+J/RaoLlJWZApbGHLtVDb4n35nwDvQMOt0+LkVvlYQc/xQuUQff+wdB+PxlwJ+TNe
+6qAcJlhc87QRD9XVw+K81Vh4v0h24URnbY+wQxAPjeT5OGK/EwHFhaNMxcyyUzCV
+pNb0llYIuM1cfwGWvnJSajtCN3wWeDmTk5SbsdyybUFtZ83Jb5A9f0VywRsj1sJV
+hGbks8VmBvbz1kteraMrQoohkv6ob1olcGKBc2NeoLvY3NdK0z2vgwY4Eh0khy3k
+/ALWPncEvAQ2ted3y5wujSMYuaPCRx3wXdahc1cFaJqnyTdlHb7qvNhCg0MFpYum
+Cf/RoZSmTqo9CfUFbLfSZFrYKiLCS53xOV5M3kg9mzSWmglfjv33sVKRzj+J9hyh
+tal1H3G/W0NdZT1QgW6r8NDT/LKzH7aZlib0PHmLXGTMze4nmuWgwAxyh8FuTVrT
+HurwROYybxzrF06Uw3hlIDsPQaof6aFBnf6xuKBlKjTg3qj5PObBMLvAoGMs/FwW
+AKjQxH/qEZ0eBsambTJdtDgJK0kHqv3sMNrxpy/Pt/360KOE2See+wFmd7lWEOEg
+bsausfm2usg1XTN2jvF8IAwqd661ogKGuinutFoAsYyr4/kKyVRd1LlqdJ69SK6Y
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_tsa_data/user-trust-ca-aaa.pem b/test/recipes/80-test_tsa_data/user-trust-ca-aaa.pem
new file mode 100644
index 000000000000..cc2d08bdd216
--- /dev/null
+++ b/test/recipes/80-test_tsa_data/user-trust-ca-aaa.pem
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFgTCCBGmgAwIBAgIQOXJEOvkit1HX02wQ3TE1lTANBgkqhkiG9w0BAQwFADB7
+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD
+VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UE
+AwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTE5MDMxMjAwMDAwMFoXDTI4
+MTIzMTIzNTk1OVowgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5
+MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBO
+ZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sI
+s9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnG
+vDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQ
+Ijy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfb
+IWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0
+tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97E
+xwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNV
+icQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5
+D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJ
+WBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ
+5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzG
+KAgEJTm4Diup8kyXHAc/DVL17e8vgg8CAwEAAaOB8jCB7zAfBgNVHSMEGDAWgBSg
+EQojPpbxB+zirynvgqV/0DCktDAdBgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rID
+ZsswDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAG
+BgRVHSAAMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29t
+L0FBQUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggr
+BgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUA
+A4IBAQAYh1HcdCE9nIrgJ7cz0C7M7PDmy14R3iJvm3WOnnL+5Nb+qh+cli3vA0p+
+rvSNb3I8QzvAP+u431yqqcau8vzY7qN7Q/aGNnwU4M309z/+3ri0ivCRlv79Q2R+
+/czSAaF9ffgZGclCKxO/WIu6pKJmBHaIkU4MiRTOok3JMrO66BQavHHxW/BBC5gA
+CiIDEOUMsfnNkjcZ7Tvx5Dq2+UUTJnWvu6rvP3t3O9LEApE9GQDTF1w52z97GA1F
+zZOFli9d31kWTz9RvdVFGD/tSo7oBmF0Ixa1DVBzJ0RHfxBdiSprhTEUxOipakyA
+vGp4z7h/jnZymQyd/teRCBaho1+V
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_tsa_data/user-trust-ca.pem b/test/recipes/80-test_tsa_data/user-trust-ca.pem
new file mode 100644
index 000000000000..2795cf31307b
--- /dev/null
+++ b/test/recipes/80-test_tsa_data/user-trust-ca.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB
+iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
+cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
+BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw
+MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
+aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy
+dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
+AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B
+3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY
+tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/
+Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2
+VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT
+79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6
+c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT
+Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l
+c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee
+UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE
+Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
+BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G
+A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF
+Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO
+VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3
+ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs
+8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR
+iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze
+Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ
+XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/
+qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB
+VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB
+L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG
+jjxDah2nGN59PRbxYvnKkKj9
+-----END CERTIFICATE-----
diff --git a/test/recipes/80-test_x509aux.t b/test/recipes/80-test_x509aux.t
new file mode 100644
index 000000000000..a721a9e0ff36
--- /dev/null
+++ b/test/recipes/80-test_x509aux.t
@@ -0,0 +1,30 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_x509aux");
+
+my @path = qw(test certs);
+
+plan skip_all => "test_dane uses ec which is not supported by this OpenSSL build"
+ if disabled("ec");
+
+plan tests => 1; # The number of tests being performed
+
+ok(run(test(["x509aux",
+ srctop_file(@path, "roots.pem"),
+ srctop_file(@path, "root+anyEKU.pem"),
+ srctop_file(@path, "root-anyEKU.pem"),
+ srctop_file(@path, "root-cert.pem"),
+ srctop_file(@path, "invalid-cert.pem"),
+ ])), "x509aux tests");
diff --git a/test/recipes/81-test_cmp_cli.t b/test/recipes/81-test_cmp_cli.t
new file mode 100644
index 000000000000..77a83c2bed8c
--- /dev/null
+++ b/test/recipes/81-test_cmp_cli.t
@@ -0,0 +1,89 @@
+#! /usr/bin/env perl
+# Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Nokia 2007-2019
+# Copyright Siemens AG 2015-2019
+#
+# 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
+
+use strict;
+use warnings;
+
+use POSIX;
+use File::Compare qw/compare_text/;
+use OpenSSL::Test qw/:DEFAULT with srctop_file srctop_dir bldtop_dir result_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup("test_cmp_cli");
+}
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+plan skip_all => "These tests are not supported in a fuzz build"
+ if config('options') =~ /-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION/;
+
+plan skip_all => "These tests are not supported in a no-cmp build"
+ if disabled("cmp");
+
+# Prevent MSys2 filename munging for arguments that look like file paths but
+# aren't
+$ENV{MSYS2_ARG_CONV_EXCL} = "/CN=";
+
+my @app = qw(openssl cmp);
+
+my @cmp_basic_tests = (
+ [ "show help", [ "-help" ], 1 ],
+ [ "CLI option not starting with '-'", [ "days", "1" ], 0 ],
+ [ "unknown CLI option", [ "-dayss" ], 0 ],
+ [ "bad int syntax: non-digit", [ "-days", "a/" ], 0 ],
+ [ "bad int syntax: float", [ "-days", "3.14" ], 0 ],
+ [ "bad int syntax: trailing garbage", [ "-days", "314_+" ], 0 ],
+ [ "bad int: out of range", [ "-days", "2147483648" ], 0 ],
+ );
+
+my @cmp_server_tests = (
+ [ "with polling", [ "-poll_count", "1" ], 1 ]
+ );
+
+# loader_attic doesn't build on VMS, so we don't test it
+push @cmp_server_tests, (
+ [ "with loader_attic engine", [ "-engine", "loader_attic"], 1 ]
+ )
+ unless disabled('loadereng');
+
+plan tests => @cmp_basic_tests + @cmp_server_tests;
+
+foreach (@cmp_basic_tests) {
+ my $title = $$_[0];
+ my $params = $$_[1];
+ my $expected = $$_[2];
+ ok($expected == run(app([@app, "-config", '', @$params])),
+ $title);
+}
+
+# these use the mock server directly in the cmp app, without TCP
+foreach (@cmp_server_tests) {
+ my $title = $$_[0];
+ my $extra_args = $$_[1];
+ my $expected = $$_[2];
+ my $secret = "pass:test";
+ my $rsp_cert = srctop_file('test', 'certs', 'ee-cert-1024.pem');
+ my $outfile = result_file("test.certout.pem");
+ ok($expected ==
+ run(app([@app, "-config", '', @$extra_args,
+ "-use_mock_srv", "-srv_ref", "mock server",
+ "-srv_secret", $secret,
+ "-rsp_cert", $rsp_cert,
+ "-cmd", "cr",
+ "-subject", "/CN=any",
+ "-newkey", srctop_file('test', 'certs', 'ee-key-1024.pem'),
+ "-secret", $secret,
+ "-ref", "client under test",
+ "-certout", $outfile]))
+ && compare_text($outfile, $rsp_cert) == 0,
+ $title);
+ # not unlinking $outfile
+}
diff --git a/test/recipes/90-test_asn1_time.t b/test/recipes/90-test_asn1_time.t
new file mode 100644
index 000000000000..889354c319f5
--- /dev/null
+++ b/test/recipes/90-test_asn1_time.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2017 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_asn1_time", "asn1_time_test");
diff --git a/test/recipes/90-test_async.t b/test/recipes/90-test_async.t
new file mode 100644
index 000000000000..bdf2413c332f
--- /dev/null
+++ b/test/recipes/90-test_async.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_async", "asynctest", "async");
diff --git a/test/recipes/90-test_bio_enc.t b/test/recipes/90-test_bio_enc.t
new file mode 100644
index 000000000000..9fd287b73c8f
--- /dev/null
+++ b/test/recipes/90-test_bio_enc.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_bio_enc", "bio_enc_test", "bio_enc");
diff --git a/test/recipes/90-test_bio_memleak.t b/test/recipes/90-test_bio_memleak.t
new file mode 100644
index 000000000000..f61d2a8d8e2c
--- /dev/null
+++ b/test/recipes/90-test_bio_memleak.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2018-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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_bio_memleak", "bio_memleak_test");
diff --git a/test/recipes/90-test_constant_time.t b/test/recipes/90-test_constant_time.t
new file mode 100644
index 000000000000..2a7d5809147c
--- /dev/null
+++ b/test/recipes/90-test_constant_time.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_constant_time", "constant_time_test");
diff --git a/test/recipes/90-test_fatalerr.t b/test/recipes/90-test_fatalerr.t
new file mode 100644
index 000000000000..a52878373e55
--- /dev/null
+++ b/test/recipes/90-test_fatalerr.t
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+# Copyright 2016 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
+
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_fatalerr");
+
+plan skip_all => "No TLS/SSL protocols are supported by this OpenSSL build"
+ if alldisabled(grep { $_ ne "ssl3" } available_protocols("tls"));
+
+plan tests => 1;
+
+ok(run(test(["fatalerrtest", srctop_file("apps", "server.pem"),
+ srctop_file("apps", "server.pem")])), "running fatalerrtest");
diff --git a/test/recipes/90-test_fipsload.t b/test/recipes/90-test_fipsload.t
new file mode 100644
index 000000000000..7537e2cb75ff
--- /dev/null
+++ b/test/recipes/90-test_fipsload.t
@@ -0,0 +1,31 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use OpenSSL::Test qw/:DEFAULT srctop_dir bldtop_dir bldtop_file/;
+use OpenSSL::Test::Utils;
+
+BEGIN {
+ setup('test_shlibload');
+}
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+use platform;
+
+plan skip_all => 'Test is disabled with disabled fips' if disabled('fips');
+plan skip_all => 'Test only supported in a shared build' if disabled('shared');
+plan skip_all => 'Test is disabled on AIX' if config('target') =~ m|^aix|;
+plan skip_all => 'Test is disabled on NonStop ia64' if config('target') =~ m|^nonstop-nse|;
+plan skip_all => 'Test only supported in a dso build' if disabled('dso');
+plan skip_all => 'Test is disabled in an address sanitizer build' unless disabled('asan');
+
+plan tests => 1;
+
+my $fips = bldtop_file('providers', platform->dso('fips'));
+
+ok(run(test(['moduleloadtest', $fips, 'OSSL_provider_init'])),
+ "trying to load $fips in its own");
diff --git a/test/recipes/90-test_gmdiff.t b/test/recipes/90-test_gmdiff.t
new file mode 100644
index 000000000000..31cdd8710644
--- /dev/null
+++ b/test/recipes/90-test_gmdiff.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_gmdiff", "gmdifftest");
diff --git a/test/recipes/90-test_gost_data/server-cert2001.pem b/test/recipes/90-test_gost_data/server-cert2001.pem
new file mode 100644
index 000000000000..e287821f8223
--- /dev/null
+++ b/test/recipes/90-test_gost_data/server-cert2001.pem
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4jCCAY+gAwIBAgIUNKO10+LkPoYGkOqNJ2wv1YI8RpQwCgYGKoUDAgIDBQAw
+RTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGElu
+dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0xODA3MTMxNTAzMDFaFw0yODA3MTAx
+NTAzMDFaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYD
+VQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwYzAcBgYqhQMCAhMwEgYHKoUD
+AgIjAQYHKoUDAgIeAQNDAARAyDUhXsZP1JSLkvZ3xaU4aHXxAGKDwpawJ89+3B+N
+lD7FS48QUIeoQrv9hn1B/kVuVxJwU4CeZRQohLvc5IkzJ6NTMFEwHQYDVR0OBBYE
+FEz6BbScOOWYqklNGMTbyikZG/cRMB8GA1UdIwQYMBaAFEz6BbScOOWYqklNGMTb
+yikZG/cRMA8GA1UdEwEB/wQFMAMBAf8wCgYGKoUDAgIDBQADQQAbkdWo441FqSbB
+13JTW498NOzHZn69wnjYsOmMHLCdEHBTHVCa/g1wHPc4CyYk4UfMRWz5awzb6zNB
+TncjMl2a
+-----END CERTIFICATE-----
diff --git a/test/recipes/90-test_gost_data/server-cert2012.pem b/test/recipes/90-test_gost_data/server-cert2012.pem
new file mode 100644
index 000000000000..85d13c6388fa
--- /dev/null
+++ b/test/recipes/90-test_gost_data/server-cert2012.pem
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB6TCCAZSgAwIBAgIUVF/ajykAyHqQm1n6K1JdMFX/O6owDAYIKoUDBwEBAwIF
+ADBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwY
+SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTE4MDcxMzE0MzcxNVoXDTI4MDcx
+MDE0MzcxNVowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAf
+BgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDBmMB8GCCqFAwcBAQEBMBMG
+ByqFAwICIwEGCCqFAwcBAQICA0MABEDIj2JgFybRexBIdkG7bI//Z8woXbpC/hpg
+62qflBE/dHnWVnbzpJUVeSd5sAkP7Ta0qrrs5YdW4MBIM/VPbDVOo1MwUTAdBgNV
+HQ4EFgQUFZtRh6plQ3nHf1A+7ayjYw9B1X0wHwYDVR0jBBgwFoAUFZtRh6plQ3nH
+f1A+7ayjYw9B1X0wDwYDVR0TAQH/BAUwAwEB/zAMBggqhQMHAQEDAgUAA0EAMttA
+fMPa3YFO9db/xIS9wMB7ntbtibeZEJlngaPu5gvfdNmCY0uzjY2c3yPr9dDq84j7
+gSqY1VwVBLuKrpLC+w==
+-----END CERTIFICATE-----
diff --git a/test/recipes/90-test_gost_data/server-key2001.pem b/test/recipes/90-test_gost_data/server-key2001.pem
new file mode 100644
index 000000000000..92a59d8e686d
--- /dev/null
+++ b/test/recipes/90-test_gost_data/server-key2001.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIJgoLqJR/05zND0f
+8Wnma1MFMxE7ezisZhkS/DL4DXb6
+-----END PRIVATE KEY-----
diff --git a/test/recipes/90-test_gost_data/server-key2012.pem b/test/recipes/90-test_gost_data/server-key2012.pem
new file mode 100644
index 000000000000..e932f0dd77ac
--- /dev/null
+++ b/test/recipes/90-test_gost_data/server-key2012.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEYCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIEILemtIak5CeX
+Jd75HfVqAMi1MfhxW7kGvGDj8l1/nF45
+-----END PRIVATE KEY-----
diff --git a/test/recipes/90-test_ige.t b/test/recipes/90-test_ige.t
new file mode 100644
index 000000000000..30456e878dd9
--- /dev/null
+++ b/test/recipes/90-test_ige.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+
+
+use strict;
+use warnings;
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_ige");
+
+plan skip_all => "AES_ige support is disabled in this build"
+ if disabled('deprecated-3.0');
+
+simple_test("test_ige", "igetest");
diff --git a/test/recipes/90-test_includes.t b/test/recipes/90-test_includes.t
new file mode 100644
index 000000000000..b931d4ec4a0a
--- /dev/null
+++ b/test/recipes/90-test_includes.t
@@ -0,0 +1,30 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use OpenSSL::Test qw/:DEFAULT data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_includes");
+
+plan skip_all => "test_includes doesn't work without posix-io"
+ if disabled("posix-io");
+
+delete $ENV{OPENSSL_CONF_INCLUDE};
+
+plan tests => # The number of tests being performed
+ 6
+ + ($^O eq "VMS" ? 2 : 0);
+
+ok(run(test(["conf_include_test", data_file("includes.cnf")])), "test directory includes");
+ok(run(test(["conf_include_test", data_file("includes-file.cnf")])), "test file includes");
+ok(run(test(["conf_include_test", data_file("includes-eq.cnf")])), "test includes with equal character");
+ok(run(test(["conf_include_test", data_file("includes-eq-ws.cnf")])), "test includes with equal and whitespaces");
+if ($^O eq "VMS") {
+ ok(run(test(["conf_include_test", data_file("vms-includes.cnf")])),
+ "test directory includes, VMS syntax");
+ ok(run(test(["conf_include_test", data_file("vms-includes-file.cnf")])),
+ "test file includes, VMS syntax");
+}
+ok(run(test(["conf_include_test", "-f", data_file("includes-broken.cnf")])), "test broken includes");
+ok(run(test(["conf_include_test", "-f", data_file("incdir.cnf")])), "test includedir");
diff --git a/test/recipes/90-test_includes_data/conf-includes/includes1.cnf b/test/recipes/90-test_includes_data/conf-includes/includes1.cnf
new file mode 100644
index 000000000000..5959b23e4b4b
--- /dev/null
+++ b/test/recipes/90-test_includes_data/conf-includes/includes1.cnf
@@ -0,0 +1,33 @@
+[ default ]
+#
+# SSLeay example configuration file.
+# This is mostly being used for generation of certificate requests.
+#
+
+####################################################################
+[ ca ]
+default_ca = CA_default # The default ca section
+
+####################################################################
+[ CA_default ]
+
+dir = ./demoCA # Where everything is kept
+certs = $dir/certs # Where the issued certs are kept
+crl_dir = $dir/crl # Where the issued crl are kept
+database = $dir/index.txt # database index file.
+new_certs_dir = $dir/new_certs # default place for new certs.
+
+certificate = $dir/CAcert.pem # The CA certificate
+serial = $dir/serial # The current serial number
+crl = $dir/crl.pem # The current CRL
+private_key = $dir/private/CAkey.pem# The private key
+
+default_days = 365 # how long to certify for
+default_crl_days= 30 # how long before next CRL
+default_md = md5 # which md to use.
+
+# A few difference way of specifying how similar the request should look
+# For type CA, the listed attributes must be the same, and the optional
+# and supplied fields are just that :-)
+policy = policy_match
+
diff --git a/test/recipes/90-test_includes_data/conf-includes/includes2.cnf b/test/recipes/90-test_includes_data/conf-includes/includes2.cnf
new file mode 100644
index 000000000000..aa5e67c06037
--- /dev/null
+++ b/test/recipes/90-test_includes_data/conf-includes/includes2.cnf
@@ -0,0 +1,53 @@
+# For the CA policy
+[ policy_match ]
+countryName = match
+stateOrProvinceName = match
+organizationName = match
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+# For the 'anything' policy
+# At this point in time, you must list all acceptable 'object'
+# types.
+[ policy_anything ]
+countryName = optional
+stateOrProvinceName = optional
+localityName = optional
+organizationName = optional
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+####################################################################
+[ req ]
+default_bits = 2048
+default_keyfile = testkey.pem
+distinguished_name = req_distinguished_name
+encrypt_rsa_key = no
+
+[ req_distinguished_name ]
+countryName = Country Name (2 letter code)
+countryName_default = AU
+countryName_value = AU
+
+stateOrProvinceName = State or Province Name (full name)
+stateOrProvinceName_default = Queensland
+stateOrProvinceName_value =
+
+localityName = Locality Name (eg, city)
+localityName_value = Brisbane
+
+organizationName = Organization Name (eg, company)
+organizationName_default =
+organizationName_value = CryptSoft Pty Ltd
+
+organizationalUnitName = Organizational Unit Name (eg, section)
+organizationalUnitName_default =
+organizationalUnitName_value = .
+
+commonName = Common Name (eg, YOUR name)
+commonName_value = Eric Young
+
+emailAddress = Email Address
+emailAddress_value = eay@mincom.oz.au
diff --git a/test/recipes/90-test_includes_data/incdir.cnf b/test/recipes/90-test_includes_data/incdir.cnf
new file mode 100644
index 000000000000..0d882eddcf2f
--- /dev/null
+++ b/test/recipes/90-test_includes_data/incdir.cnf
@@ -0,0 +1,6 @@
+#
+# Set includedir and expect to fail
+#
+.pragma includedir:/
+
+.include includes.cnf
diff --git a/test/recipes/90-test_includes_data/includes-broken.cnf b/test/recipes/90-test_includes_data/includes-broken.cnf
new file mode 100644
index 000000000000..d38e18c5e5d1
--- /dev/null
+++ b/test/recipes/90-test_includes_data/includes-broken.cnf
@@ -0,0 +1,5 @@
+#
+# Example configuration file using includes.
+#
+
+.include includes-broken3.cnf
diff --git a/test/recipes/90-test_includes_data/includes-eq-ws.cnf b/test/recipes/90-test_includes_data/includes-eq-ws.cnf
new file mode 100644
index 000000000000..38109a7ab3ad
--- /dev/null
+++ b/test/recipes/90-test_includes_data/includes-eq-ws.cnf
@@ -0,0 +1,5 @@
+#
+# Example configuration file using includes.
+#
+
+.include = conf-includes
diff --git a/test/recipes/90-test_includes_data/includes-eq.cnf b/test/recipes/90-test_includes_data/includes-eq.cnf
new file mode 100644
index 000000000000..9d3715854b51
--- /dev/null
+++ b/test/recipes/90-test_includes_data/includes-eq.cnf
@@ -0,0 +1,5 @@
+#
+# Example configuration file using includes.
+#
+
+.include=conf-includes
diff --git a/test/recipes/90-test_includes_data/includes-file.cnf b/test/recipes/90-test_includes_data/includes-file.cnf
new file mode 100644
index 000000000000..1737b70d1809
--- /dev/null
+++ b/test/recipes/90-test_includes_data/includes-file.cnf
@@ -0,0 +1,5 @@
+#
+# Example configuration file using includes.
+#
+
+.include includes.cnf
diff --git a/test/recipes/90-test_includes_data/includes.cnf b/test/recipes/90-test_includes_data/includes.cnf
new file mode 100644
index 000000000000..345eeb9884a2
--- /dev/null
+++ b/test/recipes/90-test_includes_data/includes.cnf
@@ -0,0 +1,5 @@
+#
+# Example configuration file using includes.
+#
+
+.include conf-includes
diff --git a/test/recipes/90-test_includes_data/vms-includes-file.cnf b/test/recipes/90-test_includes_data/vms-includes-file.cnf
new file mode 100644
index 000000000000..f3b72e709a44
--- /dev/null
+++ b/test/recipes/90-test_includes_data/vms-includes-file.cnf
@@ -0,0 +1,5 @@
+#
+# Example configuration file using includes.
+#
+
+.include vms-includes.cnf
diff --git a/test/recipes/90-test_includes_data/vms-includes.cnf b/test/recipes/90-test_includes_data/vms-includes.cnf
new file mode 100644
index 000000000000..ed4367bcf00e
--- /dev/null
+++ b/test/recipes/90-test_includes_data/vms-includes.cnf
@@ -0,0 +1,5 @@
+#
+# Example configuration file using includes.
+#
+
+.include [.conf-includes]
diff --git a/test/recipes/90-test_memleak.t b/test/recipes/90-test_memleak.t
new file mode 100644
index 000000000000..76f1dcb06d92
--- /dev/null
+++ b/test/recipes/90-test_memleak.t
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test;
+
+setup("test_memleak");
+
+plan skip_all => "MacOS currently doesn't support leak sanitizer"
+ if $^O eq 'darwin';
+
+plan tests => 2;
+ok(!run(test(["memleaktest"])), "running leak test");
+ok(run(test(["memleaktest", "freeit"])), "running no leak test");
diff --git a/test/recipes/90-test_overhead.t b/test/recipes/90-test_overhead.t
new file mode 100644
index 000000000000..e9319003b246
--- /dev/null
+++ b/test/recipes/90-test_overhead.t
@@ -0,0 +1,17 @@
+#! /usr/bin/env perl
+# Copyright 2016 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
+
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_overhead");
+
+plan tests => 1;
+
+ok(run(test(["cipher_overhead_test"])), "running cipher_overhead_test");
diff --git a/test/recipes/90-test_secmem.t b/test/recipes/90-test_secmem.t
new file mode 100644
index 000000000000..764391b42ad6
--- /dev/null
+++ b/test/recipes/90-test_secmem.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_secmem", "secmemtest");
diff --git a/test/recipes/90-test_shlibload.t b/test/recipes/90-test_shlibload.t
new file mode 100644
index 000000000000..8f691dee38e8
--- /dev/null
+++ b/test/recipes/90-test_shlibload.t
@@ -0,0 +1,74 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use OpenSSL::Test qw/:DEFAULT srctop_dir bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+#Load configdata.pm
+
+BEGIN {
+ setup("test_shlibload");
+}
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+use platform;
+
+plan skip_all => "Test only supported in a shared build" if disabled("shared");
+plan skip_all => "Test is disabled on AIX" if config('target') =~ m|^aix|;
+plan skip_all => "Test is disabled on NonStop" if config('target') =~ m|^nonstop|;
+plan skip_all => "Test only supported in a dso build" if disabled("dso");
+plan skip_all => "Test is disabled in an address sanitizer build" unless disabled("asan");
+
+plan tests => 10;
+
+my $libcrypto = platform->sharedlib('libcrypto');
+my $libssl = platform->sharedlib('libssl');
+my $atexit_outfile;
+
+$atexit_outfile = 'atexit-cryptofirst.txt';
+1 while unlink $atexit_outfile;
+ok(run(test(["shlibloadtest", "-crypto_first", $libcrypto, $libssl, $atexit_outfile])),
+ "running shlibloadtest -crypto_first $atexit_outfile");
+ok(check_atexit($atexit_outfile));
+
+$atexit_outfile = 'atexit-sslfirst.txt';
+1 while unlink $atexit_outfile;
+ok(run(test(["shlibloadtest", "-ssl_first", $libcrypto, $libssl, $atexit_outfile])),
+ "running shlibloadtest -ssl_first $atexit_outfile");
+ok(check_atexit($atexit_outfile));
+
+$atexit_outfile = 'atexit-justcrypto.txt';
+1 while unlink $atexit_outfile;
+ok(run(test(["shlibloadtest", "-just_crypto", $libcrypto, $libssl, $atexit_outfile])),
+ "running shlibloadtest -just_crypto $atexit_outfile");
+ok(check_atexit($atexit_outfile));
+
+$atexit_outfile = 'atexit-dsoref.txt';
+1 while unlink $atexit_outfile;
+ok(run(test(["shlibloadtest", "-dso_ref", $libcrypto, $libssl, $atexit_outfile])),
+ "running shlibloadtest -dso_ref $atexit_outfile");
+ok(check_atexit($atexit_outfile));
+
+$atexit_outfile = 'atexit-noatexit.txt';
+1 while unlink $atexit_outfile;
+ok(run(test(["shlibloadtest", "-no_atexit", $libcrypto, $libssl, $atexit_outfile])),
+ "running shlibloadtest -no_atexit $atexit_outfile");
+ok(!check_atexit($atexit_outfile));
+
+sub check_atexit {
+ my $filename = shift;
+
+ open my $fh, '<', $filename;
+ return 0 unless defined $fh;
+
+ my $data = <$fh>;
+
+ return 1 if (defined $data && $data =~ m/atexit\(\) run/);
+
+ return 0;
+}
diff --git a/test/recipes/90-test_srp.t b/test/recipes/90-test_srp.t
new file mode 100644
index 000000000000..fa64951a069a
--- /dev/null
+++ b/test/recipes/90-test_srp.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_srp", "srptest", "srp");
diff --git a/test/recipes/90-test_sslapi.t b/test/recipes/90-test_sslapi.t
new file mode 100644
index 000000000000..70fa7e50e2d2
--- /dev/null
+++ b/test/recipes/90-test_sslapi.t
@@ -0,0 +1,54 @@
+#! /usr/bin/env perl
+# Copyright 2016-2022 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
+
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file srctop_dir bldtop_dir bldtop_file/;
+use File::Temp qw(tempfile);
+
+BEGIN {
+setup("test_sslapi");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+
+plan skip_all => "No TLS/SSL protocols are supported by this OpenSSL build"
+ if alldisabled(grep { $_ ne "ssl3" } available_protocols("tls"));
+
+plan tests =>
+ ($no_fips ? 0 : 1) # sslapitest with fips
+ + 1; # sslapitest with default provider
+
+(undef, my $tmpfilename) = tempfile();
+
+ok(run(test(["sslapitest", srctop_dir("test", "certs"),
+ srctop_file("test", "recipes", "90-test_sslapi_data",
+ "passwd.txt"), $tmpfilename, "default",
+ srctop_file("test", "default.cnf"),
+ srctop_file("test",
+ "recipes",
+ "90-test_sslapi_data",
+ "dhparams.pem")])),
+ "running sslapitest");
+
+unless ($no_fips) {
+ ok(run(test(["sslapitest", srctop_dir("test", "certs"),
+ srctop_file("test", "recipes", "90-test_sslapi_data",
+ "passwd.txt"), $tmpfilename, "fips",
+ srctop_file("test", "fips-and-base.cnf"),
+ srctop_file("test",
+ "recipes",
+ "90-test_sslapi_data",
+ "dhparams.pem")])),
+ "running sslapitest");
+}
+
+unlink $tmpfilename;
diff --git a/test/recipes/90-test_sslapi_data/dhparams.pem b/test/recipes/90-test_sslapi_data/dhparams.pem
new file mode 100644
index 000000000000..6bb2cf89e7ce
--- /dev/null
+++ b/test/recipes/90-test_sslapi_data/dhparams.pem
@@ -0,0 +1,122 @@
+-----BEGIN PKCS7-----
+MIIIGAYJKoZIhvcNAQcCoIIICTCCCAUCAQExADALBgkqhkiG9w0BBwGgggY8MIIE
+cjCCBBygAwIBAgIQeS+OJfWJUZAx6cX0eAiMjzANBgkqhkiG9w0BAQQFADBiMREw
+DwYDVQQHEwhJbnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNDAyBgNV
+BAsTK1ZlcmlTaWduIENsYXNzIDEgQ0EgLSBJbmRpdmlkdWFsIFN1YnNjcmliZXIw
+HhcNOTYwNzE5MDAwMDAwWhcNOTcwMzMwMjM1OTU5WjCB1TERMA8GA1UEBxMISW50
+ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJpU2ln
+biBDbGFzcyAxIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMSgwJgYDVQQLEx9E
+aWdpdGFsIElEIENsYXNzIDEgLSBTTUlNRSBUZXN0MUcwRQYDVQQLEz53d3cudmVy
+aXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMCBJbmMuIGJ5IFJlZi4sTElBQi5M
+VEQoYyk5NjBbMA0GCSqGSIb3DQEBAQUAA0oAMEcCQA7LvHEIAiQ5+4gDYvJGnGAq
+UM5GXyG11diEXmIEZTHUZhorooX5sr8IIjSXiPY59YYUFSvAaharFM1xaBN8zNEC
+AwEAAaOCAjkwggI1MAkGA1UdEwQCMAAwggImBgNVHQMEggIdMIICGTCCAhUwggIR
+BgtghkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0
+ZXMgYnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0
+IHRvLCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1l
+bnQgKENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29t
+L0NQUy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29t
+OyBvciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4s
+IE1vdW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04
+ODMwIENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0
+cyBSZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJ
+QUJJTElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQEC
+MC8wLRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEu
+AzANBgkqhkiG9w0BAQQFAANBAMCYDuSb/eIlYSxY31nZZTaCZkCSfHjlacMofExr
+cF+A2yHoEuT+eCQkqM0pMNHXddUeoQ9RjV+VuMBNmm63DUYwggHCMIIBbKADAgEC
+AhB8CYTq1bkRFJBYOd67cp9JMA0GCSqGSIb3DQEBAgUAMD4xCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEWMBQGA1UECxMNVEVTVCBSb290IFBD
+QTAeFw05NjA3MTcwMDAwMDBaFw05NzA3MTcyMzU5NTlaMGIxETAPBgNVBAcTCElu
+dGVybmV0MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNp
+Z24gQ2xhc3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjBcMA0GCSqGSIb3
+DQEBAQUAA0sAMEgCQQDsVzrNgnDhbAJZrWeLd9g1vMZJA2W67D33TTbga6yMt+ES
+TWEywhS6RNP+fzLGg7utinjH4tL60cXa0G27GDsLAgMBAAGjIjAgMAsGA1UdDwQE
+AwIBBjARBglghkgBhvhCAQEEBAMCAgQwDQYJKoZIhvcNAQECBQADQQAUp6bRwkaD
+2d1MBs/mjUcgTI2fXVmW8tTm/Ud6OzUwpC3vYgybiOOA4f6mOC5dbyUHrLOsrihU
+47ZQ0Jo1DUfboYIBrTCBwTBtMA0GCSqGSIb3DQEBAgUAMD4xCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEWMBQGA1UECxMNVEVTVCBSb290IFBD
+QRcNOTYwNzE3MTc0NDA5WhcNOTgwNzE3MDAwMDAwWjANBgkqhkiG9w0BAQIFAANB
+AHitA0/xAukCjHzeh1AMT/l2oC68N+yFb+aJPHBBMxc6gG2MaKjBNwb5hcXUllMl
+ExONA3ju10f7owIq3s3wx10wgeYwgZEwDQYJKoZIhvcNAQECBQAwYjERMA8GA1UE
+BxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytW
+ZXJpU2lnbiBDbGFzcyAxIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyFw05NjA3
+MTcxNzU5MjlaFw05NzA3MTgwMDAwMDBaMA0GCSqGSIb3DQEBAgUAA0EAubVWYTsW
+sQmste9f+UgMw8BkjDlM25fwQLrCfmmnLxjewey10kSROypUaJLb+r4oRALc0fG9
+XfZsaiiIgotQHjEA
+-----END PKCS7-----
+-----BEGIN CERTIFICATE-----
+MIIHBzCCBO+gAwIBAgIRAIx3oACP9NGwxj2fOkiDjWswDQYJKoZIhvcNAQEMBQAw
+fTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSUwIwYDVQQD
+ExxTZWN0aWdvIFJTQSBUaW1lIFN0YW1waW5nIENBMB4XDTIwMTAyMzAwMDAwMFoX
+DTMyMDEyMjIzNTk1OVowgYQxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVy
+IE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28g
+TGltaXRlZDEsMCoGA1UEAwwjU2VjdGlnbyBSU0EgVGltZSBTdGFtcGluZyBTaWdu
+ZXIgIzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCRh0ssi8HxHqCe
+0wfGAcpSsL55eV0JZgYtLzV9u8D7J9pCalkbJUzq70DWmn4yyGqBfbRcPlYQgTU6
+IjaM+/ggKYesdNAbYrw/ZIcCX+/FgO8GHNxeTpOHuJreTAdOhcxwxQ177MPZ45fp
+yxnbVkVs7ksgbMk+bP3wm/Eo+JGZqvxawZqCIDq37+fWuCVJwjkbh4E5y8O3Os2f
+UAQfGpmkgAJNHQWoVdNtUoCD5m5IpV/BiVhgiu/xrM2HYxiOdMuEh0FpY4G89h+q
+fNfBQc6tq3aLIIDULZUHjcf1CxcemuXWmWlRx06mnSlv53mTDTJjU67MximKIMFg
+xvICLMT5yCLf+SeCoYNRwrzJghohhLKXvNSvRByWgiKVKoVUrvH9Pkl0dPyOrj+l
+cvTDWgGqUKWLdpUbZuvv2t+ULtka60wnfUwF9/gjXcRXyCYFevyBI19UCTgqYtWq
+yt/tz1OrH/ZEnNWZWcVWZFv3jlIPZvyYP0QGE2Ru6eEVYFClsezPuOjJC77FhPfd
+Cp3avClsPVbtv3hntlvIXhQcua+ELXei9zmVN29OfxzGPATWMcV+7z3oUX5xrSR0
+Gyzc+Xyq78J2SWhi1Yv1A9++fY4PNnVGW5N2xIPugr4srjcS8bxWw+StQ8O3ZpZe
+lDL6oPariVD6zqDzCIEa0USnzPe4MQIDAQABo4IBeDCCAXQwHwYDVR0jBBgwFoAU
+GqH4YRkgD8NBd0UojtE1XwYSBFUwHQYDVR0OBBYEFGl1N3u7nTVCTr9X05rbnwHR
+rt7QMA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoG
+CCsGAQUFBwMIMEAGA1UdIAQ5MDcwNQYMKwYBBAGyMQECAQMIMCUwIwYIKwYBBQUH
+AgEWF2h0dHBzOi8vc2VjdGlnby5jb20vQ1BTMEQGA1UdHwQ9MDswOaA3oDWGM2h0
+dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1JTQVRpbWVTdGFtcGluZ0NBLmNy
+bDB0BggrBgEFBQcBAQRoMGYwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQuc2VjdGln
+by5jb20vU2VjdGlnb1JTQVRpbWVTdGFtcGluZ0NBLmNydDAjBggrBgEFBQcwAYYX
+aHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEMBQADggIBAEoDeJBC
+M+x7GoMJNjOYVbudQAYwa0Vq8ZQOGVD/WyVeO+E5xFu66ZWQNze93/tk7OWCt5XM
+V1VwS070qIfdIoWmV7u4ISfUoCoxlIoHIZ6Kvaca9QIVy0RQmYzsProDd6aCApDC
+LpOpviE0dWO54C0PzwE3y42i+rhamq6hep4TkxlVjwmQLt/qiBcW62nW4SW9RQiX
+gNdUIChPynuzs6XSALBgNGXE48XDpeS6hap6adt1pD55aJo2i0OuNtRhcjwOhWIN
+oF5w22QvAcfBoccklKOyPG6yXqLQ+qjRuCUcFubA1X9oGsRlKTUqLYi86q501oLn
+wIi44U948FzKwEBcwp/VMhws2jysNvcGUpqjQDAXsCkWmcmqt4hJ9+gLJTO1P22v
+n18KVt8SscPuzpF36CAT6Vwkx+pEC0rmE4QcTesNtbiGoDCni6GftCzMwBYjyZHl
+QgNLgM7kTeYqAT7AXoWgJKEXQNXb2+eYEKTx6hkbgFT6R4nomIGpdcAO39BolHmh
+oJ6OtrdCZsvZ2WsvTdjePjIeIOTsnE1CjZ3HM5mCN0TUJikmQI54L7nu+i/x8Y/+
+ULh43RSW3hwOcLAqhWqxbGjpKuQQK24h/dN8nTfkKgbWw/HXaONPB3mBCBP+smRe
+6bE85tB4I7IJLOImYr87qZdRzMdEMoGyr8/f
+-----END CERTIFICATE-----
+-----BEGIN DH PARAMETERS-----
+MIIBDAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
+87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
+YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
+7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
+ssbzSibBsu/6iGtCOGEoXJf//////////wIBAgICB/8=
+-----END DH PARAMETERS-----
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDNAIHqeyrh6gbV
+n3xz2f+5SglhXC5Lp8Y2zvCN01M+wxhVJbAVx2m5mnfWclv5w1Mqm25fZifV+4UW
+B2jT3anL01l0URcX3D0wnS/EfuQfl+Mq23+d2GShxHZ6Zm7NcbwarPXnUX9LOFlP
+6psF5C1a2pkSAIAT5FMWpNm7jtCGuI0odYusr5ItRqhotIXSOcm66w4rZFknEPQr
+LR6gpLSALAvsqzKPimiwBzvbVG/uqYCdKEmRKzkMFTK8finHZY+BdfrkbzQzL/h7
+yrPkBkm5hXeGnaDqcYNT8HInVIhpE2SHYNEivmduD8SD3SD/wxvalqMZZsmqLnWt
+A95H4cRPAgMBAAECggEAYCl6x5kbFnoG1rJHWLjL4gi+ubLZ7Jc4vYD5Ci41AF3X
+ziktnim6iFvTFv7x8gkTvArJDWsICLJBTYIQREHYYkozzgIzyPeApIs3Wv8C12cS
+IopwJITbP56+zM+77hcJ26GCgA2Unp5CFuC/81WDiPi9kNo3Oh2CdD7D+90UJ/0W
+glplejFpEuhpU2URfKL4RckJQF/KxV+JX8FdIDhsJu54yemQdQKaF4psHkzwwgDo
+qc+yfp0Vb4bmwq3CKxqEoc1cpbJ5CHXXlAfISzUjlcuBzD/tW7BDtp7eDAcgRVAC
+XO6MX0QBcLYSC7SOD3R7zY9SIRCFDfBDxCjf0YcFMQKBgQD2+WG0fLwDXTrt68fe
+hQqVa2Xs25z2B2QGPxWqSFU8WNly/mZ1BW413f3De/O58vYi7icTNyVoScm+8hdv
+6PfD+LuRujdN1TuvPeyBTSvewQwf3IjN0Wh28mse36PwlBl+301C/x+ylxEDuJjK
+hZxCcocIaoQqtBC7ac8tNa9r4wKBgQDUfnJKf/QQSLJwwlJKQQGHi3MVm7c9PbwY
+eyIOY1s1NPluJDoYTZP4YLa/u2txwe2aHh9FhYMCPDAelqaSwaCLU9DsnKkQEA2A
+RR47fcagG6xK7O+N95iEa8I1oIy7os9MBoBMwRIZ6VYIxxTj8UMNSR+tu6MqV1Gg
+T5d0WDTJpQKBgCHyRSu5uV39AoyRS/eZ8cp36JqV1Q08FtOE+EVfi9evnrPfo9WR
+2YQt7yNfdjCo5IwIj/ZkLhAXlFNakz4el2+oUJ/HKLLaDEoaCNf883q6rh/zABrK
+HcG7sF2d/7qhoJ9/se7zgjfZ68zHIrkzhDbd5xGREnmMJoCcGo3sQyBhAoGAH3UQ
+qmLC2N5KPFMoJ4H0HgLQ6LQCrnhDLkScSBEBYaEUA/AtAYgKjcyTgVLXlyGkcRpg
+esRHHr+WSBD5W+R6ReYEmeKfTJdzyDdzQE9gZjdyjC0DUbsDwybIu3OnIef6VEDq
+IXK7oUZfzDDcsNn4mTDoFaoff5cpqFfgDgM43VkCgYBNHw11b+d+AQmaZS9QqIt7
+aF3FvwCYHV0jdv0Mb+Kc1bY4c0R5MFpzrTwVmdOerjuuA1+9b+0Hwo3nBZM4eaBu
+SOamA2hu2OJWCl9q8fLCT69KqWDjghhvFe7c6aJJGucwaA3Uz3eLcPqoaCarMiNH
+fMkTd7GabVourqIZdgvu1Q==
+-----END PRIVATE KEY-----
diff --git a/test/recipes/90-test_sslapi_data/passwd.txt b/test/recipes/90-test_sslapi_data/passwd.txt
new file mode 100644
index 000000000000..b611aed2ad93
--- /dev/null
+++ b/test/recipes/90-test_sslapi_data/passwd.txt
@@ -0,0 +1 @@
+V 1auIY/NQXwKWVeWaYg.YV0AaU.mpHSsZw8PWfrYT0oMTPYekTqGXu6ElyTN64DmK03V3P2yVRdhN0UBxMBujLnTauROkuEep/vp7S5xhW1VK8zg1gtJslTqOp4l.GTJF9x0WYmS6VNRnj5AVi3mgfVJ3nmzlMJUMm7niQxm5awLZZ8xykox1j6MFRa80y02Ub87A88DwqA5wrIM/Uojx9VBxUhTHC.353aBA/rL4O/179rgIBbhID08RA6uLv7pIJQVl5OjYsRu/XzQsgFFW6Wog7PaB.AATqArzXZieZxs/teOiFKPSgKI.76vvVEMQIifSj3hRuVK/immK.9hBCTHYjAv96MUmitb0ErPYJRl2MeBC8M6aHJ8FaMmak.Qv.bwyiqpEjlX1a9KjdBAKIaAswECjeP6G0Gk5v1g5D7ZmP5JUK7Wp/X9sKuZZYOsDwEGfXNmmJG6Y3TETx105HT2QMJ5ti5QCbrd71VWABmVWpHJc03YLUExw6WtYdUW0YHTbRKVntgVe2hOQD.XPtFPn2SwxbGonq1bwEvdCp22uTb5HFSC3I7amCUTZteVmMgqJAcx.x.2yfliESVvpmG.dnDFkp6vsQxch6Q1dV5rDmR4GGSy8FoPSFXc7NS0kCSs.qsTqLSmHN1XMzwrwYuVbItXBwetwxcIcdi.sFG6OLuwRUGaNOXiMwhlDHyQtVfEm3L/KIjPpzLlYRAJWF9M40FIcNsI6xiMNhvUGNO7LaBHKSV3oHlwUWWUnL7Uo/ePH8lBpGadYPxObXZ1/wOcWdJ1Rb5dB9orSSTSvoNrZyALKO.swl7pP7beYq6bUx8qtBJLaqI2zQzr1tnmJi8azVicuFtsDs363ntCRtd1LLT3CX3EBVXMbEy6xgAKWI2GL3HO6v8k3Gv96UeGFN/w5yAz61mbajDrSeJekUaKgfucV8h9tgHNlTA1kGowd2Yn/EQdVc/qSETddySqNC0mXlPW1tgb2ixV6sWbYrb5TLBUdztdw5L2D62Aal.9IjpTEKc4F/gMjYsazIX6nzpXZtWnYP7dIOpSi4c.48B2RIeDrZVMzUF.9QOF9Dk1fy5Z2X91z8J2I0GuqIWKKfwnx4xA3RbGUds1Cv2XvUA1tP7eqtvs/mTsC8KWApNSpL6K.U.Pt0ee6F76CV.ZcBXTbXl9zJZ0H1peiehzZpbuIPLZPtzIHClRQovjqdrlEUzS5VdSgCfNhEUr3ZOpG3cCKO4Lk25jZuQtoFmyxUuRAIXejLizCd727hO7rHZoD.GGm4HiNaH2jgZaftoFhfSBXvPRGYfcj.ZkiLyurNlumMXTduHImB1ZMkZ1af5dggKaQG4bJe9WbF6KYxmeRwV 1oFJIzMwXA0RFKXCGcSV0nAToL5 test 8192 A test user
diff --git a/test/recipes/90-test_sslbuffers.t b/test/recipes/90-test_sslbuffers.t
new file mode 100644
index 000000000000..7168034ebd62
--- /dev/null
+++ b/test/recipes/90-test_sslbuffers.t
@@ -0,0 +1,21 @@
+#! /usr/bin/env perl
+# Copyright 2017 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
+
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+setup("test_sslbuffers");
+
+plan skip_all => "No suitable TLS/SSL protocol is supported by this OpenSSL build"
+ if alldisabled(available_protocols("tls"));
+
+plan tests => 1;
+
+ok(run(test(["sslbuffertest", srctop_file("apps", "server.pem"),
+ srctop_file("apps", "server.pem")])), "running sslbuffertest");
diff --git a/test/recipes/90-test_store.t b/test/recipes/90-test_store.t
new file mode 100644
index 000000000000..12a8a32d9846
--- /dev/null
+++ b/test/recipes/90-test_store.t
@@ -0,0 +1,604 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use File::Spec::Functions;
+use File::Copy;
+use MIME::Base64;
+use OpenSSL::Test qw(:DEFAULT srctop_file srctop_dir bldtop_file bldtop_dir
+ data_file);
+use OpenSSL::Test::Utils;
+
+my $test_name = "test_store";
+setup($test_name);
+
+my $use_md5 = !disabled("md5");
+my $use_des = !(disabled("des") || disabled("legacy")); # also affects 3des and pkcs12 app
+my $use_dsa = !disabled("dsa");
+my $use_ecc = !disabled("ec");
+
+my @noexist_files =
+ ( "test/blahdiblah.pem",
+ "test/blahdibleh.der" );
+my @src_files =
+ ( "test/testx509.pem",
+ "test/testrsa.pem",
+ "test/testrsapub.pem",
+ "test/testcrl.pem",
+ "apps/server.pem" );
+my @data_files =
+ ( "testrsa.msb" );
+push(@data_files,
+ ( "testrsa.pvk" ))
+ unless disabled("legacy") || disabled("rc4");
+my @src_rsa_files =
+ ( "test/testrsa.pem",
+ "test/testrsapub.pem" );
+my @generated_files =
+ (
+ ### generated from the source files
+
+ "testx509.der",
+ "testrsa.der",
+ "testrsapub.der",
+ "testcrl.der",
+
+ ### generated locally
+
+ "rsa-key-pkcs1.pem", "rsa-key-pkcs1.der",
+ "rsa-key-pkcs1-aes128.pem",
+ "rsa-key-pkcs8.pem", "rsa-key-pkcs8.der",
+ "rsa-key-pkcs8-pbes2-sha1.pem", "rsa-key-pkcs8-pbes2-sha1.der",
+ "rsa-key-pkcs8-pbes2-sha256.pem", "rsa-key-pkcs8-pbes2-sha256.der",
+ );
+push(@generated_files, (
+ "rsa-key-pkcs8-pbes1-sha1-3des.pem", "rsa-key-pkcs8-pbes1-sha1-3des.der",
+ )) if $use_des;
+push(@generated_files, (
+ "rsa-key-sha1-3des-sha1.p12", "rsa-key-sha1-3des-sha256.p12",
+ "rsa-key-aes256-cbc-sha256.p12",
+ "rsa-key-md5-des-sha1.p12",
+ "rsa-key-aes256-cbc-md5-des-sha256.p12"
+ )) if $use_des;
+push(@generated_files, (
+ "rsa-key-pkcs8-pbes1-md5-des.pem", "rsa-key-pkcs8-pbes1-md5-des.der"
+ )) if $use_md5 && $use_des;
+push(@generated_files, (
+ "dsa-key-pkcs1.pem", "dsa-key-pkcs1.der",
+ "dsa-key-pkcs1-aes128.pem",
+ "dsa-key-pkcs8.pem", "dsa-key-pkcs8.der",
+ "dsa-key-pkcs8-pbes2-sha1.pem", "dsa-key-pkcs8-pbes2-sha1.der",
+ )) if $use_dsa;
+push(@generated_files, "dsa-key-aes256-cbc-sha256.p12") if $use_dsa && $use_des;
+push(@generated_files, (
+ "ec-key-pkcs1.pem", "ec-key-pkcs1.der",
+ "ec-key-pkcs1-aes128.pem",
+ "ec-key-pkcs8.pem", "ec-key-pkcs8.der",
+ "ec-key-pkcs8-pbes2-sha1.pem", "ec-key-pkcs8-pbes2-sha1.der",
+ )) if $use_ecc;
+push(@generated_files, "ec-key-aes256-cbc-sha256.p12") if $use_ecc && $use_des;
+my %generated_file_files =
+ $^O eq 'linux'
+ ? ( "test/testx509.pem" => "file:testx509.pem",
+ "test/testrsa.pem" => "file:testrsa.pem",
+ "test/testrsapub.pem" => "file:testrsapub.pem",
+ "test/testcrl.pem" => "file:testcrl.pem",
+ "apps/server.pem" => "file:server.pem" )
+ : ();
+my @noexist_file_files =
+ ( "file:blahdiblah.pem",
+ "file:test/blahdibleh.der" );
+
+# There is more than one method to get a 'file:' loader.
+# The default is a built-in provider implementation.
+# However, there is also an engine, specially for testing purposes.
+#
+# @methods is a collection of extra 'openssl storeutl' arguments used to
+# try the different methods.
+my @methods;
+my @prov_method = qw(-provider default);
+push @prov_method, qw(-provider legacy) unless disabled('legacy');
+push @methods, [ @prov_method ];
+push @methods, [qw(-engine loader_attic)]
+ unless disabled('loadereng');
+
+my $n = scalar @methods
+ * ( (3 * scalar @noexist_files)
+ + (6 * scalar @src_files)
+ + (2 * scalar @data_files)
+ + (4 * scalar @generated_files)
+ + (scalar keys %generated_file_files)
+ + (scalar @noexist_file_files)
+ + 3
+ + 11 );
+
+# Test doesn't work under msys because the file name munging doesn't work
+# correctly with the "ot:" prefix
+my $do_test_ossltest_store =
+ !(disabled("engine") || disabled("dynamic-engine") || $^O =~ /^msys$/);
+
+if ($do_test_ossltest_store) {
+ # test loading with apps 'org.openssl.engine:' loader, using the
+ # ossltest engine.
+ $n += 4 * scalar @src_rsa_files;
+}
+
+plan skip_all => "No plan" if $n == 0;
+
+plan tests => $n;
+
+indir "store_$$" => sub {
+ if ($do_test_ossltest_store) {
+ # ossltest loads PEM files, with names prefixed with 'ot:'.
+ # This prefix ensures that the files are, in fact, loaded through
+ # that engine and not mistakenly going through the 'file:' loader.
+
+ my $engine_scheme = 'org.openssl.engine:';
+ $ENV{OPENSSL_ENGINES} = bldtop_dir("engines");
+
+ foreach (@src_rsa_files) {
+ my $file = srctop_file($_);
+ my $file_abs = to_abs_file($file);
+ my @pubin = $_ =~ m|pub\.pem$| ? ("-pubin") : ();
+
+ ok(run(app(["openssl", "rsa", "-text", "-noout", @pubin,
+ "-engine", "ossltest", "-inform", "engine",
+ "-in", "ot:$file"])));
+ ok(run(app(["openssl", "rsa", "-text", "-noout", @pubin,
+ "-engine", "ossltest", "-inform", "engine",
+ "-in", "ot:$file_abs"])));
+ ok(run(app(["openssl", "rsa", "-text", "-noout", @pubin,
+ "-in", "${engine_scheme}ossltest:ot:$file"])));
+ ok(run(app(["openssl", "rsa", "-text", "-noout", @pubin,
+ "-in", "${engine_scheme}ossltest:ot:$file_abs"])));
+ }
+ }
+
+ SKIP:
+ {
+ init() or die "init failed";
+
+ my $rehash = init_rehash();
+
+ foreach my $method (@methods) {
+ my @storeutl = ( qw(openssl storeutl), @$method );
+
+ foreach (@noexist_files) {
+ my $file = srctop_file($_);
+
+ ok(!run(app([@storeutl, "-noout", $file])));
+ ok(!run(app([@storeutl, "-noout", to_abs_file($file)])));
+ {
+ local $ENV{MSYS2_ARG_CONV_EXCL} = "file:";
+
+ ok(!run(app([@storeutl, "-noout",
+ to_abs_file_uri($file)])));
+ }
+ }
+ foreach (@src_files) {
+ my $file = srctop_file($_);
+
+ ok(run(app([@storeutl, "-noout", $file])));
+ ok(run(app([@storeutl, "-noout", to_abs_file($file)])));
+ SKIP:
+ {
+ skip "file: tests disabled on MingW", 4 if $^O =~ /^msys$/;
+
+ ok(run(app([@storeutl, "-noout",
+ to_abs_file_uri($file)])));
+ ok(run(app([@storeutl, "-noout",
+ to_abs_file_uri($file, 0, "")])));
+ ok(run(app([@storeutl, "-noout",
+ to_abs_file_uri($file, 0, "localhost")])));
+ ok(!run(app([@storeutl, "-noout",
+ to_abs_file_uri($file, 0, "dummy")])));
+ }
+ }
+ foreach (@data_files) {
+ my $file = data_file($_);
+
+ ok(run(app([@storeutl, "-noout", "-passin", "pass:password",
+ $file])));
+ ok(run(app([@storeutl, "-noout", "-passin", "pass:password",
+ to_abs_file($file)])));
+ }
+ foreach (@generated_files) {
+ ok(run(app([@storeutl, "-noout", "-passin", "pass:password",
+ $_])));
+ ok(run(app([@storeutl, "-noout", "-passin", "pass:password",
+ to_abs_file($_)])));
+
+ SKIP:
+ {
+ skip "file: tests disabled on MingW", 2 if $^O =~ /^msys$/;
+
+ ok(run(app([@storeutl, "-noout", "-passin",
+ "pass:password", to_abs_file_uri($_)])));
+ ok(!run(app([@storeutl, "-noout", "-passin",
+ "pass:password", to_file_uri($_)])));
+ }
+ }
+ foreach (values %generated_file_files) {
+ SKIP:
+ {
+ skip "file: tests disabled on MingW", 1 if $^O =~ /^msys$/;
+
+ ok(run(app([@storeutl, "-noout", $_])));
+ }
+ }
+ foreach (@noexist_file_files) {
+ SKIP:
+ {
+ skip "file: tests disabled on MingW", 1 if $^O =~ /^msys$/;
+
+ ok(!run(app([@storeutl, "-noout", $_])));
+ }
+ }
+ {
+ my $dir = srctop_dir("test", "certs");
+
+ ok(run(app([@storeutl, "-noout", $dir])));
+ ok(run(app([@storeutl, "-noout", to_abs_file($dir, 1)])));
+ SKIP:
+ {
+ skip "file: tests disabled on MingW", 1 if $^O =~ /^msys$/;
+
+ ok(run(app([@storeutl, "-noout",
+ to_abs_file_uri($dir, 1)])));
+ }
+ }
+
+ ok(!run(app([@storeutl, '-noout',
+ '-subject', '/C=AU/ST=QLD/CN=SSLeay\/rsa test cert',
+ srctop_file('test', 'testx509.pem')])),
+ "Checking that -subject can't be used with a single file");
+
+ ok(run(app([@storeutl, '-certs', '-noout',
+ srctop_file('test', 'testx509.pem')])),
+ "Checking that -certs returns 1 object on a certificate file");
+ ok(run(app([@storeutl, '-certs', '-noout',
+ srctop_file('test', 'testcrl.pem')])),
+ "Checking that -certs returns 0 objects on a CRL file");
+
+ ok(run(app([@storeutl, '-crls', '-noout',
+ srctop_file('test', 'testx509.pem')])),
+ "Checking that -crls returns 0 objects on a certificate file");
+ ok(run(app([@storeutl, '-crls', '-noout',
+ srctop_file('test', 'testcrl.pem')])),
+ "Checking that -crls returns 1 object on a CRL file");
+
+ SKIP: {
+ skip "failed rehash initialisation", 6 unless $rehash;
+
+ # subject from testx509.pem:
+ # '/C=AU/ST=QLD/CN=SSLeay\/rsa test cert'
+ # issuer from testcrl.pem:
+ # '/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority'
+ ok(run(app([@storeutl, '-noout',
+ '-subject', '/C=AU/ST=QLD/CN=SSLeay\/rsa test cert',
+ catdir(curdir(), 'rehash')])));
+ ok(run(app([@storeutl, '-noout',
+ '-subject',
+ '/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority',
+ catdir(curdir(), 'rehash')])));
+ ok(run(app([@storeutl, '-noout', '-certs',
+ '-subject', '/C=AU/ST=QLD/CN=SSLeay\/rsa test cert',
+ catdir(curdir(), 'rehash')])));
+ ok(run(app([@storeutl, '-noout', '-crls',
+ '-subject', '/C=AU/ST=QLD/CN=SSLeay\/rsa test cert',
+ catdir(curdir(), 'rehash')])));
+ ok(run(app([@storeutl, '-noout', '-certs',
+ '-subject',
+ '/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority',
+ catdir(curdir(), 'rehash')])));
+ ok(run(app([@storeutl, '-noout', '-crls',
+ '-subject',
+ '/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority',
+ catdir(curdir(), 'rehash')])));
+ }
+ }
+ }
+}, create => 1, cleanup => 1;
+
+sub init {
+ my $cnf = srctop_file('test', 'ca-and-certs.cnf');
+ my $cakey = srctop_file('test', 'certs', 'ca-key.pem');
+ my @std_args = qw(-provider default);
+ push @std_args, qw(-provider legacy)
+ unless disabled('legacy');
+ return (
+ # rsa-key-pkcs1.pem
+ run(app(["openssl", "pkey", @std_args,
+ "-in", data_file("rsa-key-2432.pem"),
+ "-out", "rsa-key-pkcs1.pem"]))
+ # rsa-key-pkcs1-aes128.pem
+ && run(app(["openssl", "rsa", @std_args,
+ "-passout", "pass:password", "-aes128",
+ "-in", "rsa-key-pkcs1.pem",
+ "-out", "rsa-key-pkcs1-aes128.pem"]))
+ # dsa-key-pkcs1.pem
+ && (!$use_dsa
+ || run(app(["openssl", "gendsa", @std_args,
+ "-out", "dsa-key-pkcs1.pem",
+ data_file("dsaparam.pem")])))
+ # dsa-key-pkcs1-aes128.pem
+ && (!$use_dsa
+ || run(app(["openssl", "dsa", @std_args,
+ "-passout", "pass:password", "-aes128",
+ "-in", "dsa-key-pkcs1.pem",
+ "-out", "dsa-key-pkcs1-aes128.pem"])))
+ # ec-key-pkcs1.pem (one might think that 'genec' would be practical)
+ && (!$use_ecc
+ || run(app(["openssl", "ecparam", @std_args,
+ "-genkey",
+ "-name", "prime256v1",
+ "-out", "ec-key-pkcs1.pem"])))
+ # ec-key-pkcs1-aes128.pem
+ && (!$use_ecc
+ || run(app(["openssl", "ec", @std_args,
+ "-passout", "pass:password", "-aes128",
+ "-in", "ec-key-pkcs1.pem",
+ "-out", "ec-key-pkcs1-aes128.pem"])))
+ # *-key-pkcs8.pem
+ && runall(sub {
+ my $dstfile = shift;
+ (my $srcfile = $dstfile)
+ =~ s/-key-pkcs8\.pem$/-key-pkcs1.pem/i;
+ run(app(["openssl", "pkcs8", @std_args,
+ "-topk8", "-nocrypt",
+ "-in", $srcfile, "-out", $dstfile]));
+ }, grep(/-key-pkcs8\.pem$/, @generated_files))
+ # *-key-pkcs8-pbes1-sha1-3des.pem
+ && runall(sub {
+ my $dstfile = shift;
+ (my $srcfile = $dstfile)
+ =~ s/-key-pkcs8-pbes1-sha1-3des\.pem$
+ /-key-pkcs8.pem/ix;
+ run(app(["openssl", "pkcs8", @std_args,
+ "-topk8",
+ "-passout", "pass:password",
+ "-v1", "pbeWithSHA1And3-KeyTripleDES-CBC",
+ "-in", $srcfile, "-out", $dstfile]));
+ }, grep(/-key-pkcs8-pbes1-sha1-3des\.pem$/, @generated_files))
+ # *-key-pkcs8-pbes1-md5-des.pem
+ && runall(sub {
+ my $dstfile = shift;
+ (my $srcfile = $dstfile)
+ =~ s/-key-pkcs8-pbes1-md5-des\.pem$
+ /-key-pkcs8.pem/ix;
+ run(app(["openssl", "pkcs8", @std_args,
+ "-topk8",
+ "-passout", "pass:password",
+ "-v1", "pbeWithSHA1And3-KeyTripleDES-CBC",
+ "-in", $srcfile, "-out", $dstfile]));
+ }, grep(/-key-pkcs8-pbes1-md5-des\.pem$/, @generated_files))
+ # *-key-pkcs8-pbes2-sha1.pem
+ && runall(sub {
+ my $dstfile = shift;
+ (my $srcfile = $dstfile)
+ =~ s/-key-pkcs8-pbes2-sha1\.pem$
+ /-key-pkcs8.pem/ix;
+ run(app(["openssl", "pkcs8", @std_args,
+ "-topk8",
+ "-passout", "pass:password",
+ "-v2", "aes256", "-v2prf", "hmacWithSHA1",
+ "-in", $srcfile, "-out", $dstfile]));
+ }, grep(/-key-pkcs8-pbes2-sha1\.pem$/, @generated_files))
+ # *-key-pkcs8-pbes2-sha1.pem
+ && runall(sub {
+ my $dstfile = shift;
+ (my $srcfile = $dstfile)
+ =~ s/-key-pkcs8-pbes2-sha256\.pem$
+ /-key-pkcs8.pem/ix;
+ run(app(["openssl", "pkcs8", @std_args,
+ "-topk8",
+ "-passout", "pass:password",
+ "-v2", "aes256", "-v2prf", "hmacWithSHA256",
+ "-in", $srcfile, "-out", $dstfile]));
+ }, grep(/-key-pkcs8-pbes2-sha256\.pem$/, @generated_files))
+ # *-cert.pem (intermediary for the .p12 inits)
+ && run(app(["openssl", "req", "-x509", @std_args,
+ "-config", $cnf, "-noenc",
+ "-key", $cakey, "-out", "cacert.pem"]))
+ && runall(sub {
+ my $srckey = shift;
+ (my $dstfile = $srckey) =~ s|-key-pkcs8\.|-cert.|;
+ (my $csr = $dstfile) =~ s|\.pem|.csr|;
+
+ (run(app(["openssl", "req", "-new", @std_args,
+ "-config", $cnf, "-section", "userreq",
+ "-key", $srckey, "-out", $csr]))
+ &&
+ run(app(["openssl", "x509", @std_args,
+ "-days", "3650",
+ "-CA", "cacert.pem",
+ "-CAkey", $cakey,
+ "-set_serial", time(), "-req",
+ "-in", $csr, "-out", $dstfile])));
+ }, grep(/-key-pkcs8\.pem$/, @generated_files))
+ # *.p12
+ && runall(sub {
+ my $dstfile = shift;
+ my ($type, $certpbe_index, $keypbe_index,
+ $macalg_index) =
+ $dstfile =~ m{^(.*)-key-(?|
+ # cert and key PBE are same
+ () #
+ ([^-]*-[^-]*)- # key & cert PBE
+ ([^-]*) # MACalg
+ |
+ # cert and key PBE are not same
+ ([^-]*-[^-]*)- # cert PBE
+ ([^-]*-[^-]*)- # key PBE
+ ([^-]*) # MACalg
+ )\.}x;
+ if (!$certpbe_index) {
+ $certpbe_index = $keypbe_index;
+ }
+ my $srckey = "$type-key-pkcs8.pem";
+ my $srccert = "$type-cert.pem";
+ my %pbes =
+ (
+ "sha1-3des" => "pbeWithSHA1And3-KeyTripleDES-CBC",
+ "md5-des" => "pbeWithMD5AndDES-CBC",
+ "aes256-cbc" => "AES-256-CBC",
+ );
+ my %macalgs =
+ (
+ "sha1" => "SHA1",
+ "sha256" => "SHA256",
+ );
+ my $certpbe = $pbes{$certpbe_index};
+ my $keypbe = $pbes{$keypbe_index};
+ my $macalg = $macalgs{$macalg_index};
+ if (!defined($certpbe) || !defined($keypbe)
+ || !defined($macalg)) {
+ print STDERR "Cert PBE for $certpbe_index not defined\n"
+ unless defined $certpbe;
+ print STDERR "Key PBE for $keypbe_index not defined\n"
+ unless defined $keypbe;
+ print STDERR "MACALG for $macalg_index not defined\n"
+ unless defined $macalg;
+ print STDERR "(destination file was $dstfile)\n";
+ return 0;
+ }
+ run(app(["openssl", "pkcs12", @std_args,
+ "-inkey", $srckey,
+ "-in", $srccert, "-passout", "pass:password",
+ "-chain", "-CAfile", "cacert.pem",
+ "-export", "-macalg", $macalg,
+ "-certpbe", $certpbe, "-keypbe", $keypbe,
+ "-out", $dstfile]));
+ }, grep(/\.p12/, @generated_files))
+ # *.der (the end all init)
+ && runall(sub {
+ my $dstfile = shift;
+ (my $srcfile = $dstfile) =~ s/\.der$/.pem/i;
+ if (! -f $srcfile) {
+ $srcfile = srctop_file("test", $srcfile);
+ }
+ my $infh;
+ unless (open $infh, $srcfile) {
+ return 0;
+ }
+ my $l;
+ while (($l = <$infh>) !~ /^-----BEGIN\s/
+ || $l =~ /^-----BEGIN.*PARAMETERS-----/) {
+ }
+ my $b64 = "";
+ while (($l = <$infh>) !~ /^-----END\s/) {
+ $l =~ s|\R$||;
+ $b64 .= $l unless $l =~ /:/;
+ }
+ close $infh;
+ my $der = decode_base64($b64);
+ unless (length($b64) / 4 * 3 - length($der) < 3) {
+ print STDERR "Length error, ",length($b64),
+ " bytes of base64 became ",length($der),
+ " bytes of der? ($srcfile => $dstfile)\n";
+ return 0;
+ }
+ my $outfh;
+ unless (open $outfh, ">:raw", $dstfile) {
+ return 0;
+ }
+ print $outfh $der;
+ close $outfh;
+ return 1;
+ }, grep(/\.der$/, @generated_files))
+ && runall(sub {
+ my $srcfile = shift;
+ my $dstfile = $generated_file_files{$srcfile};
+
+ unless (copy srctop_file($srcfile), $dstfile) {
+ warn "$!\n";
+ return 0;
+ }
+ return 1;
+ }, keys %generated_file_files)
+ );
+}
+
+sub init_rehash {
+ return (
+ mkdir(catdir(curdir(), 'rehash'))
+ && copy(srctop_file('test', 'testx509.pem'),
+ catdir(curdir(), 'rehash'))
+ && copy(srctop_file('test', 'testcrl.pem'),
+ catdir(curdir(), 'rehash'))
+ && run(app(['openssl', 'rehash', catdir(curdir(), 'rehash')]))
+ );
+}
+
+sub runall {
+ my ($function, @items) = @_;
+
+ foreach (@items) {
+ return 0 unless $function->($_);
+ }
+ return 1;
+}
+
+# According to RFC8089, a relative file: path is invalid. We still produce
+# them for testing purposes.
+sub to_file_uri {
+ my ($file, $isdir, $authority) = @_;
+ my $vol;
+ my $dir;
+
+ die "to_file_uri: No file given\n" if !defined($file) || $file eq '';
+
+ ($vol, $dir, $file) = File::Spec->splitpath($file, $isdir // 0);
+
+ # Make sure we have a Unix style directory.
+ $dir = join('/', File::Spec->splitdir($dir));
+ # Canonicalise it (note: it seems to be only needed on Unix)
+ while (1) {
+ my $newdir = $dir;
+ $newdir =~ s|/[^/]*[^/\.]+[^/]*/\.\./|/|g;
+ last if $newdir eq $dir;
+ $dir = $newdir;
+ }
+ # Take care of the corner cases the loop can't handle, and that $dir
+ # ends with a / unless it's empty
+ $dir =~ s|/[^/]*[^/\.]+[^/]*/\.\.$|/|;
+ $dir =~ s|^[^/]*[^/\.]+[^/]*/\.\./|/|;
+ $dir =~ s|^[^/]*[^/\.]+[^/]*/\.\.$||;
+ if ($isdir // 0) {
+ $dir =~ s|/$|| if $dir ne '/';
+ } else {
+ $dir .= '/' if $dir ne '' && $dir !~ m|/$|;
+ }
+
+ # If the file system has separate volumes (at present, Windows and VMS)
+ # we need to handle them. In URIs, they are invariably the first
+ # component of the path, which is always absolute.
+ # On VMS, user:[foo.bar] translates to /user/foo/bar
+ # On Windows, c:\Users\Foo translates to /c:/Users/Foo
+ if ($vol ne '') {
+ $vol =~ s|:||g if ($^O eq "VMS");
+ $dir = '/' . $dir if $dir ne '' && $dir !~ m|^/|;
+ $dir = '/' . $vol . $dir;
+ }
+ $file = $dir . $file;
+
+ return "file://$authority$file" if defined $authority;
+ return "file:$file";
+}
+
+sub to_abs_file {
+ my ($file) = @_;
+
+ return File::Spec->rel2abs($file);
+}
+
+sub to_abs_file_uri {
+ my ($file, $isdir, $authority) = @_;
+
+ die "to_abs_file_uri: No file given\n" if !defined($file) || $file eq '';
+ return to_file_uri(to_abs_file($file), $isdir, $authority);
+}
diff --git a/test/recipes/90-test_store_cases.t b/test/recipes/90-test_store_cases.t
new file mode 100644
index 000000000000..05b00e6b4eb1
--- /dev/null
+++ b/test/recipes/90-test_store_cases.t
@@ -0,0 +1,36 @@
+#! /usr/bin/env perl
+# Copyright 2023 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
+
+# This collects specific use cases, and tests our handling
+
+use File::Spec::Functions;
+use File::Copy;
+use MIME::Base64;
+use OpenSSL::Test qw(:DEFAULT srctop_file srctop_dir bldtop_file bldtop_dir
+ data_file);
+use OpenSSL::Test::Utils;
+
+my $test_name = "test_store_cases";
+setup($test_name);
+
+plan tests => 2;
+
+my $stderr;
+
+# The case of the garbage PKCS#12 DER file where a passphrase was
+# prompted for. That should not have happened.
+$stderr = 'garbage-pkcs12.stderr.txt';
+ok(!run(app(['openssl', 'storeutl', '-passin', 'pass:invalidapass',
+ data_file('garbage-pkcs12.p12')],
+ stderr => $stderr)),
+ "checking that storeutl fails when given a garbage pkcs12 file");
+open DATA, $stderr;
+@match = grep /try_pkcs12:.*?:maybe wrong password$/, <DATA>;
+close DATA;
+ok(scalar @match > 0 ? 0 : 1,
+ "checking that storeutl didn't ask for a passphrase");
diff --git a/test/recipes/90-test_store_cases_data/garbage-pkcs12.p12 b/test/recipes/90-test_store_cases_data/garbage-pkcs12.p12
new file mode 100644
index 000000000000..1a9f2578f33f
--- /dev/null
+++ b/test/recipes/90-test_store_cases_data/garbage-pkcs12.p12
@@ -0,0 +1 @@
+0[Í0 *†HÎ80¤1 0 UUS10 Upo \ No newline at end of file
diff --git a/test/recipes/90-test_store_data/dsaparam.pem b/test/recipes/90-test_store_data/dsaparam.pem
new file mode 100644
index 000000000000..60563cbb039d
--- /dev/null
+++ b/test/recipes/90-test_store_data/dsaparam.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEArjV9Th2W4p8AlmBabk0HjaV8vPmt15/V6e6mM1Hee3LSdapxd/Fj
++7bsWroNcqIaHGS45YkJbclvC3/Szp/vh1q2Zy/v7utZ9V7/qCiEnls3CRGAfAhc
+1eFIS9Jo+z+fK2tsDUgbGoDC6xEbN3nWjItyPmelBQ5Bip41ULTSQCdr/eBka1s4
+QpS1Sdrvbng3zTCJw0VQe5yM5xyYcHFdeV/v6JSFUz7voyzOGqt91l4UzVFUiZ13
+5Pgi8DUQdQVxUU+MTFwNLCy+bDTuEoKHAxkGEqiq9A08ScxwWtgy7jJQhXDoGP10
+gFMyV+5Qya7rrrYiMhZrjFna7h0z30yiPQIhAK0tbhew8+vHuO6VePIX9TMBZ7ze
+k//uQOh/8ZNtS4cTAoIBAGZv2mOljtJM1UUtdl1fzUq0GkI1hjpvqfonq94DITYK
+BynJL21JqPfG9JLXc8HYdg5hpwtulrjIyzg1EiB5pQgoNVy8UhavUroPw7FjEicL
+dKRHQ9YwuJwuQBTNmX/ojjewqT9U6WYiYUz4SQNXFDIdNz3ikviOoGpmY/Cwbgcr
+Pb/QhGqqHzB3ZeX89exVznPbvqeNOp967U+vooBMMJ4oSWVA8ANFVpmikxucRt69
+qKtfkD+3P9RvjVow4dRjOmp8jyT82RQoCeSEThdDVrjUS6IpRdMT8MJ2mwGggG6T
+Y16HJCAq/7ufqJlsp5oAuX3aZsnAcnIiDxrMI9m3Xxs=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/90-test_store_data/rsa-key-2432.pem b/test/recipes/90-test_store_data/rsa-key-2432.pem
new file mode 100644
index 000000000000..b5e37f4b8a5e
--- /dev/null
+++ b/test/recipes/90-test_store_data/rsa-key-2432.pem
@@ -0,0 +1,32 @@
+-----BEGIN PRIVATE KEY-----
+MIIFlQIBADANBgkqhkiG9w0BAQEFAASCBX8wggV7AgEAAoIBMQCrCYwxGQmujZVF
+lnZeobOyrk+JiHh4/6IjpepHlb1hRMZbDS2V2kZAupNr3oV14Dx4bDwbxAMOvGQr
+sVDiM+LAAZtxXXq6sQNOrq3yTPuCdW6IbsHaB5ZuPwz4cNWOOHs19Jx9UufxoFZ+
+1Cj3WG0joTCTbPNe08llJ67YKCj4b3l19AJKauPFWyLl8sQE5f29rBGGnnJYzrf3
+ZRrrZApbXy2PxDVKfkjLf89la6Hcr/RihgPiZHLoN7TyAPOL4OPY+Jv6fVG9PTrf
+3hwoTRD9Wp0ZdmOSCiU93vvoTFovnBMpfh7Qb6k+ufqZV0cvdDWYV7UQO1MBx24R
+mqcVGwHzPCMET71GoRNKvtMI3zrN/ZN8lyyqKU3pEPcLvykZ8Pi2lZB31uLA0x6Z
+zUe+rEavAgMBAAECggEwM8aFIMvCiYukl1cv5/+tRTbNLwYX6hEAhSgRnq/uj0Zh
+gWig1w8nWyrfu7S10/QYeh/RploUzt4quKtJn+AzEQqrgorYvzEcnjH0yDeTn29r
+EXPtzNGlMSR3CbImg5IHglLVGH8DZbqy1FvnNtEW4MVHzikaFyenfK6hmB+4H1Sn
+gRRnqR1oa/LlwpRV0GHLCSLQf17xoH4chaLLZXi3kdIOIcg9bzDef7APQmKHdu01
+hlAhFZ3rPib63anYtg9jG4hLrZCUHwEwHsOaDEh9QVNSxqZJS2KTtMbYIclK3hDG
+wZFmlv9bemE+KiR3EAJt9/xMROjLTNDgTOZZujR/O4IObszQ6obExiL0Z37K0AAz
+f0hhMbweg0W1hC3j/pseOZpEvfoK5QZYY0nbdNqVkQKBmQDczLiFYgDEcCbc2ak4
+VGDA/N+R1lUFvfBoBKLlWaOFSnfYC9XrGa1lVe5nMZN4OAgkR4Ogvo1uh5BzXptP
+s+fYfh40JS6RFXeO8/K8meFOUnjKiMZroBuFcJHSCDDJZFyfEM1vVqnsaLsqQHAd
+casa3PewKvUbUDMWQFNImW6dMuDL3GpKpGc4/eU3208JnpoApcnp2qLPlwKBmQDG
+TexoAiQLKRlSHrZcZJTemrTZQFoCPEoXZjbzXHERYoSOcriINWWVuhvAtA64WY/+
+lOYXb3H1kD+CccR1NLUu9lrrFbizeHl9ovrvhLCR8smgVhwP4QjW1fjNYEOfIXXX
+BPLCizKSdqDLID/Jph+ym29vOedbjHZmr6Pto3fVBKQPpkLkQmyj061pmknE8DES
+k6GFHAAkqQKBmQDTVtxzRwfm/lYkY+417YWikyhHRfihg1k9ptpoXnFG3q1xTHrY
+Cf7PFP4ZJfm6Qx9/4jeaP2nOVtGrq+1Kz69lp+mvDbvRwNNsMBGx9jQSrJvTeDE7
+yMcu5T2d5JsV2QtScVnBbRk+IEytt3nYpPkawFAP/j4Xg58yeCV/QuT+cDl8x5+x
+jEUE5vhki3TOh1Fut0FZphzaRwKBmHPpKkzlK3JGlKFWiFtbA1VWcm0mWzZBTUF+
+IpJ/LyvtPPQShGBBbd5lyUELPittVmiFWjTKlH7n0OeLXjzwEROhNiWBLdPhkInq
+UOjd02OL2WTZ0E9LxyHkMijBouUJ5tpG7yrduDK6GmSAtihE7PQ2PJ1z6BKv+Kku
+8w+9ZBbkPo1TLnhDh0L/QLagU4xEpTpphpjKdB75AoGYcaonPrYPhvM+EAe4DDTf
+qpxI6wX6P+ws9Fx8VuD/UN3DB8AhE+tlFYQYJQkgqpAvNiOg9ix0mwNDe6oB4xwB
+iQKxoBtCKYhwwP7AvXrzyqe73aWtvW9VFYUbdiVQQVqR/+Gd1wL572qFTcnw56je
+wxTi4bfTajt7O/nY7jYs3WWstBh0wyl5XNZ14Acic6ZsSp+PLCEfpLo=
+-----END PRIVATE KEY-----
diff --git a/test/recipes/90-test_store_data/testrsa.msb b/test/recipes/90-test_store_data/testrsa.msb
new file mode 100644
index 000000000000..0249d6630a7c
--- /dev/null
+++ b/test/recipes/90-test_store_data/testrsa.msb
Binary files differ
diff --git a/test/recipes/90-test_store_data/testrsa.pvk b/test/recipes/90-test_store_data/testrsa.pvk
new file mode 100644
index 000000000000..c311244d63b4
--- /dev/null
+++ b/test/recipes/90-test_store_data/testrsa.pvk
Binary files differ
diff --git a/test/recipes/90-test_sysdefault.t b/test/recipes/90-test_sysdefault.t
new file mode 100644
index 000000000000..308a592abac9
--- /dev/null
+++ b/test/recipes/90-test_sysdefault.t
@@ -0,0 +1,23 @@
+#! /usr/bin/env perl
+# Copyright 2017-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+my $test_name = "test_sysdefault";
+setup($test_name);
+
+plan skip_all => "$test_name is not supported in this build"
+ if disabled("tls1_2") || disabled("rsa");
+
+plan tests => 1;
+
+$ENV{OPENSSL_CONF} = srctop_file("test", "sysdefault.cnf");
+
+ok(run(test(["sysdefaulttest"])), "sysdefaulttest");
diff --git a/test/recipes/90-test_threads.t b/test/recipes/90-test_threads.t
new file mode 100644
index 000000000000..d373fcbd166f
--- /dev/null
+++ b/test/recipes/90-test_threads.t
@@ -0,0 +1,56 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Simple;
+use OpenSSL::Test qw/:DEFAULT srctop_file srctop_dir bldtop_dir bldtop_file data_dir/;
+use OpenSSL::Test::Utils;
+use Cwd qw(abs_path);
+
+BEGIN {
+setup("test_threads");
+}
+
+use lib srctop_dir('Configurations');
+use lib bldtop_dir('.');
+
+my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
+my $config_path = abs_path(srctop_file("test", $no_fips ? "default.cnf"
+ : "default-and-fips.cnf"));
+
+plan tests => 2;
+
+if ($no_fips) {
+ ok(run(test(["threadstest", "-config", $config_path, data_dir()])),
+ "running test_threads");
+} else {
+ ok(run(test(["threadstest", "-fips", "-config", $config_path, data_dir()])),
+ "running test_threads with FIPS");
+}
+
+# Merge the configuration files into one filtering the contents so the failure
+# condition is reproducable. A working FIPS configuration without the install
+# status is required.
+
+open CFGBASE, '<', $config_path;
+open CFGINC, '<', bldtop_file('/test/fipsmodule.cnf');
+open CFGOUT, '>', 'thread.cnf';
+
+while (<CFGBASE>) {
+ print CFGOUT unless m/^[.]include/;
+}
+close CFGBASE;
+print CFGOUT "\n\n";
+while (<CFGINC>) {
+ print CFGOUT unless m/^install-status/;
+}
+close CFGINC;
+close CFGOUT;
+
+$ENV{OPENSSL_CONF} = 'thread.cnf';
+ok(run(test(["threadstest_fips"])), "running test_threads_fips");
diff --git a/test/recipes/90-test_threads_data/rsakey.pem b/test/recipes/90-test_threads_data/rsakey.pem
new file mode 100644
index 000000000000..0d7e4049fdc9
--- /dev/null
+++ b/test/recipes/90-test_threads_data/rsakey.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVXWBq3/xh7kiq
+jBFIQ6VttlJdqphJsWGSNbH8OgQlDG15/7TVyelcHDvgq7O4faPebb3g3ddavxRH
+EUJepoLQYcF/3RNG5gmFBw7y1PwaZNIKrSCrIGuW8K3MxBlTVdwBHaSz74q0SVNd
+igUc8dzhRL/F1+J3GVdclwt17ohDcQ/KbMG0slCnd0ZsWA8Rv/F2JFquOUK3UWcp
+4dBVMG8X5JHqrfgowkNvomSp+52YkmJIPusNT4JKiv8/cu6Wta6hwZi6732QdW3/
+WlKeq/XAftCHQ9uFBwcPfTh6/dHT7mUd0+o5aoc37krT4A1u9XCswr3xbvOSlV6p
+8KFllZONAgMBAAECggEADLTt7A+A2Vg2jamf0dztejY0e42QWjstI2b9PZc67fXq
+gyx+WYkX07t+uWegYWliG/oPJ9guXiIpE/5sJHToL37S5kmFP2CtynVcJ4wVo4DD
+nY0n9+kLX0bgIuS+2V6wpoRcbbbjXM9NHrH8kfe5ftT4UtEDlLI2qLX6IcDd7p4u
+OYjILChR8GSGTw96yIy2Ws/1Uq9PMw64JoT4RcK5QqnkcPMDFRH1SeLOL+zXP2c4
+nEl9yOy3HauZKxwl/Ry/XK1s3DdjopIAU29ut+hAuMiTb06kzZnumL9NoplKoZtU
+otw/gVcCKhT+Ep+p6i8InLF0XEME8A0qUR0niWebgQKBgQD6vkxR49B8ZZQrzjw4
+XKs1lI9cP7cgPiuWlDHMNjYou3WbOaGrMeScvbB1Ldh9A8pjAhxlw8AaV/xs4qcA
+trmVmSISVMVyc1wSGlJXWi2nUzTNs9OE3vj22SyStihf8UUZtWwX2b5Y4JrYhA/V
++ThGGqHR03oLNLShNLtJc2c7YQKBgQDZ1nkibEyrepexw/fnwkw61IJKq9wRIh1G
+PREakhbe9wU5ie0knuf9razt7awzQiwFmlixmWqsM7UEtLuXNnNPciwdrKhhbvrd
+vD/rkbIEHEPllIhFlDtOzn3hRBWTzWmXFjpou/2LvHTSbVis4IYVZymTp2jb1ZLs
+7VbiG9JTrQKBgQDc6n75g1szzpdehQT/r33U5j/syeJBUSU8NPMu9fB/sLHsgjlT
+SNEf2+y1QSBE/Or6kmiMrIv7advn30W+Vj9qc5HWTsPrk4HiHTjA553jl2alebN5
+lK4LZspjtIQcC8mS3goPdXPEgJdM/gWpwzr2YQ6DfOxBJT2j7n64NyoT4QKBgH7/
+yx+GhCx1DHtXBPDZFhg2TL+78lEK0oZgk9gp06up2CHzh44SFq6O0oLkTcCUk5Ww
+poTkLIy4mJBlzfgahp+KsK2cO46SZS9g0ONFzcMXt33hWpE2Gl2XhUwPpYTF/QlY
+rDTjZK5S8Mi9dzVSsNlJi7PJphiEK2R1+nFYRwcBAoGBANWoIG85jpXAOnq/Kcgx
+Rl3YivR0Ke6r1tFlP58rT7X3EkiboXyQl5vLIFCAwUte6RGrLl1dy3Qyh80B9ySL
+Jx6vj42CK7vgv6A96TuVYhnXTnEI6ZvwAQ2VGaw4BizhjALs/kdSE/og9aSCs3ws
+KQypwAFz0tbHxaNag/bSAN0J
+-----END PRIVATE KEY-----
diff --git a/test/recipes/90-test_time_offset.t b/test/recipes/90-test_time_offset.t
new file mode 100644
index 000000000000..e8bf271a1739
--- /dev/null
+++ b/test/recipes/90-test_time_offset.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2017 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_time_offset", "time_offset_test");
diff --git a/test/recipes/90-test_tls13ccs.t b/test/recipes/90-test_tls13ccs.t
new file mode 100644
index 000000000000..25be04f72e83
--- /dev/null
+++ b/test/recipes/90-test_tls13ccs.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+
+my $test_name = "test_tls13ccs";
+setup($test_name);
+
+plan skip_all => "$test_name is not supported in this build"
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+plan tests => 1;
+
+ok(run(test(["tls13ccstest", srctop_file("apps", "server.pem"),
+ srctop_file("apps", "server.pem")])), "tls13ccstest");
diff --git a/test/recipes/90-test_tls13encryption.t b/test/recipes/90-test_tls13encryption.t
new file mode 100644
index 000000000000..06b33229d4b7
--- /dev/null
+++ b/test/recipes/90-test_tls13encryption.t
@@ -0,0 +1,20 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+my $test_name = "test_tls13encryption";
+setup($test_name);
+
+plan skip_all => "$test_name is not supported in this build"
+ if disabled("tls1_3") || (disabled("ec") && disabled("dh"));
+
+plan tests => 1;
+
+ok(run(test(["tls13encryptiontest"])), "running tls13encryptiontest");
diff --git a/test/recipes/90-test_tls13secrets.t b/test/recipes/90-test_tls13secrets.t
new file mode 100644
index 000000000000..72bb60fdb14d
--- /dev/null
+++ b/test/recipes/90-test_tls13secrets.t
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+my $test_name = "test_tls13secrets";
+setup($test_name);
+
+plan skip_all => "$test_name is not supported in this build"
+ if disabled("tls1_3")
+ || disabled("shared")
+ || (disabled("ec") && disabled("dh"));
+
+plan tests => 1;
+
+ok(run(test(["tls13secretstest"])), "running tls13secretstest");
diff --git a/test/recipes/90-test_traceapi.t b/test/recipes/90-test_traceapi.t
new file mode 100644
index 000000000000..a63bcf9984b4
--- /dev/null
+++ b/test/recipes/90-test_traceapi.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2022-2023 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_traceapi", "trace_api_test");
diff --git a/test/recipes/90-test_v3name.t b/test/recipes/90-test_v3name.t
new file mode 100644
index 000000000000..0be8855d6d4a
--- /dev/null
+++ b/test/recipes/90-test_v3name.t
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+
+use OpenSSL::Test::Simple;
+
+simple_test("test_v3name", "v3nametest");
diff --git a/test/recipes/91-test_pkey_check.t b/test/recipes/91-test_pkey_check.t
new file mode 100644
index 000000000000..93369777a949
--- /dev/null
+++ b/test/recipes/91-test_pkey_check.t
@@ -0,0 +1,106 @@
+#! /usr/bin/env perl
+# Copyright 2017-2024 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Test qw/:DEFAULT data_file with/;
+use OpenSSL::Test::Utils;
+
+sub pkey_check {
+ my $f = shift;
+ my $pubcheck = shift;
+ my @checkopt = ('-check');
+
+ @checkopt = ('-pubcheck', '-pubin') if $pubcheck;
+
+ return run(app(['openssl', 'pkey', @checkopt, '-text',
+ '-in', $f]));
+}
+
+sub check_key {
+ my $f = shift;
+ my $should_fail = shift;
+ my $pubcheck = shift;
+ my $str;
+
+
+ $str = "$f should fail validation" if $should_fail;
+ $str = "$f should pass validation" unless $should_fail;
+
+ $f = data_file($f);
+
+ if ( -s $f ) {
+ with({ exit_checker => sub { return shift == $should_fail; } },
+ sub {
+ ok(pkey_check($f, $pubcheck), $str);
+ });
+ } else {
+ fail("Missing file $f");
+ }
+}
+
+setup("test_pkey_check");
+
+my @negative_tests = ();
+
+push(@negative_tests, (
+ # For EC keys the range for the secret scalar `k` is `1 <= k <= n-1`
+ "ec_p256_bad_0.pem", # `k` set to `n` (equivalent to `0 mod n`, invalid)
+ "ec_p256_bad_1.pem", # `k` set to `n+1` (equivalent to `1 mod n`, invalid)
+ )) unless disabled("ec");
+
+push(@negative_tests, (
+ # For SM2 keys the range for the secret scalar `k` is `1 <= k < n-1`
+ "sm2_bad_neg1.pem", # `k` set to `n-1` (invalid, because SM2 range)
+ "sm2_bad_0.pem", # `k` set to `n` (equivalent to `0 mod n`, invalid)
+ "sm2_bad_1.pem", # `k` set to `n+1` (equivalent to `1 mod n`, invalid)
+ )) unless disabled("sm2");
+
+my @positive_tests = ();
+
+push(@positive_tests, (
+ "dhpkey.pem"
+ )) unless disabled("dh");
+
+my @negative_pubtests = ("rsapub_17k.pem"); # Too big RSA public key
+
+push(@negative_pubtests, (
+ "dsapub_noparam.der"
+ )) unless disabled("dsa");
+
+my @positive_pubtests = ();
+
+push(@positive_pubtests, (
+ "dsapub.pem"
+ )) unless disabled("dsa");
+
+plan skip_all => "No tests within the current enabled feature set"
+ unless @negative_tests && @positive_tests
+ && @negative_pubtests && @positive_pubtests;
+
+plan tests => scalar(@negative_tests) + scalar(@positive_tests)
+ + scalar(@negative_pubtests) + scalar(@positive_pubtests);
+
+foreach my $t (@negative_tests) {
+ check_key($t, 1, 0);
+}
+
+foreach my $t (@positive_tests) {
+ check_key($t, 0, 0);
+}
+
+foreach my $t (@negative_pubtests) {
+ check_key($t, 1, 1);
+}
+
+foreach my $t (@positive_pubtests) {
+ check_key($t, 0, 1);
+}
diff --git a/test/recipes/91-test_pkey_check_data/dhpkey.pem b/test/recipes/91-test_pkey_check_data/dhpkey.pem
new file mode 100644
index 000000000000..aa5b8630a750
--- /dev/null
+++ b/test/recipes/91-test_pkey_check_data/dhpkey.pem
@@ -0,0 +1,14 @@
+-----BEGIN PRIVATE KEY-----
+MIICJgIBADCCARcGCSqGSIb3DQEDATCCAQgCggEBAMwWCRizXuSpEcD1rlHABvnQ
+NzZarWoOCGfuYe2NzM6b0BiR13l7zrcBocQLE401xxLUn6qkFfFMJOP3x6tbDx7w
+1DwsHjplqVSW8sLDipf37940aLjvcjhJ0ZSDOwkpUeO2WSJLZdNSxvygHG5bZ/e1
+V5c5BToWUzHsbx3It4EgddtRfgELgl0K6kY7YsxfeVKc+bNA40elhk8/gGr5xLko
+0fUSk4xPIqbHEkKVuusYvaxXrBXUmFdCuY/dokhhrahp3CFSEzxMCKrS75Kq+6Jx
+Xc4qJ1QsgHWxwO5C+KPRhWsePJ5zmGI/D++TAXKu70QgcQs8fnM61cXhUylnchsC
+AQIEggEEAoIBAGj8dNturd5CiUbDmzc/zMuSW+wIZFtH0XTlhie6Xap8ybXs53Dd
+vr2QwKbZpvbwpT+GrQM8K6lTYSW2AqeV29b23KstGGRDxyF9nrTM2a+la+m+YCuy
+XG3AeildriXHViJHe9BnpvqsArkv2kIMLsXwsrvJsbUU3ENJUGyTehOglmoiESW1
+kVq3PoYTuls7ynRDnZAcFZidMJmOynU182klgqjxy0Md0X1cX0SXdYVBtai+iwH8
+kNKnbs2nn0Dfprau/OlmLFL4JpiagOWBJCwZafELpXzLor4t0m0t1Mzy/XkxtmKT
+e6L4veD6kojaU7H8iCTjA6d7hPBWmXoslZI=
+-----END PRIVATE KEY-----
diff --git a/test/recipes/91-test_pkey_check_data/dsapub.pem b/test/recipes/91-test_pkey_check_data/dsapub.pem
new file mode 100644
index 000000000000..0ff4bd83ed3b
--- /dev/null
+++ b/test/recipes/91-test_pkey_check_data/dsapub.pem
@@ -0,0 +1,12 @@
+-----BEGIN PUBLIC KEY-----
+MIIBvzCCATQGByqGSM44BAEwggEnAoGBAIjbXpOVVciVNuagg26annKkghIIZFI4
+4WdMomnV+I/oXyxHbZTBBBpW9xy/E1+yMjbp4GmX+VxyDj3WxUWxXllzL+miEkzD
+9Xz638VzIBhjFbMvk1/N4kS4bKVUd9yk7HfvYzAdnRphk0WI+RoDiDrBNPPxSoQD
+CEWgvwgsLIDhAh0A6dbz1IQpQwGF4+Ca28x6OO+UfJJv3ggeZ++fNwKBgQCA9XKV
+lRrTY8ALBxS0KbZjpaIXuUj5nr3i1lIDyP3ISksDF0ekyLtn6eK9VijX6Pm65Np+
+4ic9Nr5WKLKhPaUSpLNRx1gDqo3sd92hYgiEUifzEuhLYfK/CsgFED+l2hDXtJUq
+bISNSHVwI5lsyNXLu7HI1Fk8F5UO3LqsboFAngOBhAACgYATxFY89nEYcUhgHGgr
+YDHhXBQfMKnTKYdvon4DN7WQ9ip+t4VUsLpTD1ZE9zrM2R/B04+8C6KGoViwyeER
+kS4dxWOkX71x4X2DlNpYevcR53tNcTDqmMD7YKfDDmrb0lftMyfW8aESaiymVMys
+DRjhKHBjdo0rZeSM8DAk3ctrXA==
+-----END PUBLIC KEY-----
diff --git a/test/recipes/91-test_pkey_check_data/dsapub_noparam.der b/test/recipes/91-test_pkey_check_data/dsapub_noparam.der
new file mode 100644
index 000000000000..b8135f1ca94d
--- /dev/null
+++ b/test/recipes/91-test_pkey_check_data/dsapub_noparam.der
Binary files differ
diff --git a/test/recipes/91-test_pkey_check_data/ec_p256_bad_0.pem b/test/recipes/91-test_pkey_check_data/ec_p256_bad_0.pem
new file mode 100644
index 000000000000..64c273901f0b
--- /dev/null
+++ b/test/recipes/91-test_pkey_check_data/ec_p256_bad_0.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCD/////AAAAAP//////
+////vOb6racXnoTzucrC/GMlUQ==
+-----END PRIVATE KEY-----
diff --git a/test/recipes/91-test_pkey_check_data/ec_p256_bad_1.pem b/test/recipes/91-test_pkey_check_data/ec_p256_bad_1.pem
new file mode 100644
index 000000000000..5171958a27c6
--- /dev/null
+++ b/test/recipes/91-test_pkey_check_data/ec_p256_bad_1.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCD/////AAAAAP//////
+////vOb6racXnoTzucrC/GMlUg==
+-----END PRIVATE KEY-----
diff --git a/test/recipes/91-test_pkey_check_data/rsapub_17k.pem b/test/recipes/91-test_pkey_check_data/rsapub_17k.pem
new file mode 100644
index 000000000000..9a2eaedaf1b2
--- /dev/null
+++ b/test/recipes/91-test_pkey_check_data/rsapub_17k.pem
@@ -0,0 +1,48 @@
+-----BEGIN PUBLIC KEY-----
+MIIIbzANBgkqhkiG9w0BAQEFAAOCCFwAMIIIVwKCCE4Ang+cE5H+hg3RbapDAHqR
+B9lUnp2MlAwsZxQ/FhYepaR60bFQeumbu7817Eo5YLMObVI99hF1C4u/qcpD4Jph
+gZt87/JAYDbP+DIh/5gUXCL9m5Fp4u7mvZaZdnlcftBvR1uKUTCAwc9pZ/Cfr8W2
+GzrRODzsNYnk2DcZMfe2vRDuDZRopE+Y+I72rom2SZLxoN547N1daM/M/CL9KVQ/
+XMI/YOpJrBI0jI3brMRhLkvLckwies9joufydlGbJkeil9H7/grj3fQZtFkZ2Pkj
+b87XDzRVX7wsEpAgPJxskL3jApokCp1kQYKG+Uc3dKM9Ade6IAPK7VKcmbAQTYw2
+gZxsc28dtstazmfGz0ACCTSMrmbgWAM3oPL7RRzhrXDWgmYQ0jHefGh8SNTIgtPq
+TuHxPYkDMQNaf0LmDGCxqlnf4b5ld3YaU8zZ/RqIRx5v/+w0rJUvU53qY1bYSnL1
+vbqKSnN2mip0GYyQ4AUgkS1NBV4rGYU/VTvzEjLfkg02KOtHKandvEoUjmZPzCT0
+V2ZhGc8K1UJNGYlIiHqCdwCBoghvly/pYajTkDXyd6BsukzA5H3IkZB1xDgl035j
+/0Cr7QeZLEOdi9fPdSSaBT6OmD0WFuZfJF0wMr7ucRhWzPXvSensD9v7MBE7tNfH
+SLeTSx8tLt8UeWriiM+0CnkPR1IOqMOxubOyf1eV8NQqEWm5wEQG/0IskbOKnaHa
+PqLFJZn/bvyL3XK5OxVIJG3z6bnRDOMS9SzkjqgPdIO8tkySEHVSi/6iuGUltx3Y
+Fmq6ye/r34ekyHPbfn6UuTON7joM6SIXb5bHM64x4iMVWx4hMvDjfy0UqfywAUyu
+C1o7BExSMxxFG8GJcqR0K8akpPp7EM588PC+YuItoxzXgfUJnP3BQ1Beev2Ve7/J
+xeGZH0N4ntfr+cuaLAakAER9zDglwChWflw3NNFgIdAgSxXv3XXx5xDXpdP4lxUo
+F5zAN4Mero3yV90FaJl7Vhq/UFVidbwFc15jUDwaE0mKRcsBeVd3GOhoECAgE0id
+aIPT20z8oVY0FyTJlRk7QSjo8WjJSrHY/Fn14gctX07ZdfkufyL6w+NijBdYluvB
+nIrgHEvpkDEWoIa8qcx0EppoIcmqgMV2mTShfFYSybsO33Pm8WXec2FXjwhzs1Pi
+R/BuIW8rHPI67xqWm0h8dEw11vtfi9a/BBBikFHe59KBjMTG+lW/gADNvRoTzGh7
+kN4+UVDS3jlSisRZZOn1XoeQtpubNYWgUsecjKy45IwIj8h1SHgn3wkmUesY0woN
+mOdoNtq+NezN4RFtbCOHhxFVpKKDi/HQP2ro0ykkXMDjwEIVf2Lii1Mg9UP8m+Ux
+AOqkTrIkdogkRx+70h7/wUOfDIFUq2JbKzqxJYamyEphcdAko7/B8efQKc61Z93O
+f2SHa4++4WI7wIIx18v5KV4M/cRmrfc8w9WRkQN3gBT5AJMuqwcSHVXBWvNQeGmi
+ScMh7X6cCZ0daEujqb8svq4WgsJ8UT4GaGBRIYtt7QUKEh+JQwNJzneRYZ3pzpaH
+UJeeoYobMlkp3rM9cYzdq90nBQiI9Jsbim9m9ggb2dMOS5CsI9S/IuG2O5uTjfxx
+wkwsd5nLDFtNXHYZ7W6XlVJ1Rc6zShnEmdCn3mmibb6OaMUmun2yl9ryEjVSoXLP
+fSA8W9K9yNhKTRkzdXJfqlC+s/ovX2xBGxsuOoUDaXhRVz0qmpKIHeSFjIP4iXq4
+y8gDiwvM3HbZfvVonbg6siPwpn4uvw3hesojk1DKAENS52i6U3uK2fs1ALVxsFNS
+Yh914rDu0Q3e4RXVhURaYzoEbLCot6WGYeCCfQOK0rkETMv+sTYYscC8/THuW7SL
+HG5zy9Ed95N1Xmf8J+My7gM7ZFodGdHsWvdzEmqsdOFh6IVx/VfHFX0MDBq0t6lZ
+eRvVgVCfu3gkYLwPScn/04E02vOom51ISKHsF/I11erC66jjNYV9BSpH8O7sAHxZ
+EmPT2ZVVRSgivOHdQW/FZ3UZQQhVaVSympo2Eb4yWEMFn84Q8T+9Honj6gnB5PXz
+chmeCsOMlcg1mwWwhn0k+OAWEZy7VRUk5Ahp0fBAGJgwBdqrZ3kM356DjUkVBiYq
+4eHyvafNKmjf2mnFsI3g2NKRNyl1Lh63wyCFx60yYvBUfXF/W9PFJbD9CiP83kEW
+gV36gxTsbOSfhpO1OXR90ODy0kx06XzWmJCUugK8u9bx4F/CjV+LIHExuNJiethC
+A8sIup/MT0fWp4RO/SsVblGqfoqJTaPnhptQzeH2N07pbWkxeMuL6ppPuwFmfVjK
+FJndqCVrAukcPEOQ16iVURuloJMudqYRc9QKkJFsnv0W/iMNbqQGmXe8Q/5qFiys
+26NIQBiE2ad9hNLnoccEnmYSRgnW3ZPSKuq5TDdYyDqTZH2r8cam65pr3beKw2XC
+xw4cc7VaxiwGC2Mg2wRmwwPaTjrcEt6sMa3RjwFEVBxBFyM26wnTEZsTBquCxV0J
+pgERaeplkixP2Q0m7XAdlDaob973SM2vOoUgypzDchWmpx7u775bnOfU5CihwXl+
+k0i09WZuT8bPmhEAiGCw5sNzMkz1BC2cCZFfJIkE2vc/wXYOrGxBTJo0EKaUFswa
+2dnP/u0bn+VksBUM7ywW9LJSXh4mN+tpzdeJtxEObKwX1I0dQxSPWmjd2++wMr9q
+Unre5fCrDToy2H7C2VKSpuOCT2/Kv4JDQRWwI4KxQOpn0UknAGNmfBoTtpIZ3LEb
+77oBUJdMQD7tQBBLL0a6f1TdK0dHVprWWawJ+gGFMiMQXqAqblHcxFKWuHv9bQID
+AQAB
+-----END PUBLIC KEY-----
diff --git a/test/recipes/91-test_pkey_check_data/sm2_bad_0.pem b/test/recipes/91-test_pkey_check_data/sm2_bad_0.pem
new file mode 100644
index 000000000000..5ad2bd184b77
--- /dev/null
+++ b/test/recipes/91-test_pkey_check_data/sm2_bad_0.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEECAQAwEwYHKoZIzj0CAQYIKoEcz1UBgi0EJzAlAgEBBCD////+////////////
+////cgPfayHGBStTu/QJOdVBIw==
+-----END PRIVATE KEY-----
diff --git a/test/recipes/91-test_pkey_check_data/sm2_bad_1.pem b/test/recipes/91-test_pkey_check_data/sm2_bad_1.pem
new file mode 100644
index 000000000000..d094d4d29647
--- /dev/null
+++ b/test/recipes/91-test_pkey_check_data/sm2_bad_1.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEECAQAwEwYHKoZIzj0CAQYIKoEcz1UBgi0EJzAlAgEBBCD////+////////////
+////cgPfayHGBStTu/QJOdVBJA==
+-----END PRIVATE KEY-----
diff --git a/test/recipes/91-test_pkey_check_data/sm2_bad_neg1.pem b/test/recipes/91-test_pkey_check_data/sm2_bad_neg1.pem
new file mode 100644
index 000000000000..36adb93fb9ea
--- /dev/null
+++ b/test/recipes/91-test_pkey_check_data/sm2_bad_neg1.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEECAQAwEwYHKoZIzj0CAQYIKoEcz1UBgi0EJzAlAgEBBCD////+////////////////cgPfayHG
+BStTu/QJOdVBIg==
+-----END PRIVATE KEY-----
diff --git a/test/recipes/95-test_external_gost_engine.t b/test/recipes/95-test_external_gost_engine.t
new file mode 100644
index 000000000000..37daaf7ecae8
--- /dev/null
+++ b/test/recipes/95-test_external_gost_engine.t
@@ -0,0 +1,28 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT data_file bldtop_dir srctop_dir cmdstr/;
+
+setup("test_external_gost_engine");
+
+plan skip_all => "No external tests in this configuration"
+ if disabled("external-tests");
+plan skip_all => "GOST engine tests not available on Windows or VMS"
+ if $^O =~ /^(VMS|MSWin32)$/;
+plan skip_all => "GOST engine tests only available in a shared build"
+ if disabled("shared");
+plan skip_all => "GOST engine tests not supported in out of tree builds"
+ if bldtop_dir() ne srctop_dir();
+
+plan tests => 1;
+
+ok(run(cmd(["sh", data_file("gost_engine.sh")])),
+ "running GOST engine tests");
diff --git a/test/recipes/95-test_external_gost_engine_data/gost_engine.sh b/test/recipes/95-test_external_gost_engine_data/gost_engine.sh
new file mode 100755
index 000000000000..54ebd5796c33
--- /dev/null
+++ b/test/recipes/95-test_external_gost_engine_data/gost_engine.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+#
+# Copyright 2020-2024 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
+
+#
+# OpenSSL external testing using the GOST engine
+#
+set -e
+
+PWD="$(pwd)"
+
+SRCTOP="$(cd $SRCTOP; pwd)"
+BLDTOP="$(cd $BLDTOP; pwd)"
+
+if [ "$SRCTOP" != "$BLDTOP" ] ; then
+ echo "Out of tree builds not supported with gost_engine test!"
+ exit 1
+fi
+
+O_EXE="$BLDTOP/apps"
+O_BINC="$BLDTOP/include"
+O_SINC="$SRCTOP/include"
+O_LIB="$BLDTOP"
+
+unset OPENSSL_CONF
+
+export PATH="$O_EXE:$PATH"
+export LD_LIBRARY_PATH="$O_LIB:$LD_LIBRARY_PATH"
+export OPENSSL_ROOT_DIR="$O_LIB"
+
+# Check/Set openssl version
+OPENSSL_VERSION=`openssl version | cut -f 2 -d ' '`
+
+echo "------------------------------------------------------------------"
+echo "Testing OpenSSL using GOST engine:"
+echo " CWD: $PWD"
+echo " SRCTOP: $SRCTOP"
+echo " BLDTOP: $BLDTOP"
+echo " OPENSSL_ROOT_DIR: $OPENSSL_ROOT_DIR"
+echo " OpenSSL version: $OPENSSL_VERSION"
+echo "------------------------------------------------------------------"
+
+cmake $SRCTOP/gost-engine -DOPENSSL_ROOT_DIR="$OPENSSL_ROOT_DIR" -DOPENSSL_ENGINES_DIR="$OPENSSL_ROOT_DIR/engines"
+make
+export CTEST_OUTPUT_ON_FAILURE=1
+export HARNESS_OSSL_PREFIX=''
+export OPENSSL_ENGINES="$PWD/bin"
+export OPENSSL_APP="$O_EXE/openssl"
+make test
+make tcl_tests
diff --git a/test/recipes/95-test_external_krb5.t b/test/recipes/95-test_external_krb5.t
new file mode 100644
index 000000000000..9b8067d5d116
--- /dev/null
+++ b/test/recipes/95-test_external_krb5.t
@@ -0,0 +1,27 @@
+#! /usr/bin/env perl
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT data_file srctop_file bldtop_dir/;
+use Cwd qw(abs_path);
+
+setup("test_external_krb5");
+
+plan skip_all => "No external tests in this configuration"
+ if disabled("external-tests");
+plan skip_all => "krb5 not available"
+ if ! -f srctop_file("krb5", "src", "configure.ac");
+
+plan tests => 1;
+
+$ENV{OPENSSL_MODULES} = abs_path(bldtop_dir("providers"));
+$ENV{OPENSSL_CONF} = abs_path(srctop_file("test", "default-and-legacy.cnf"));
+
+ok(run(cmd([data_file("krb5.sh")])), "running krb5 tests");
diff --git a/test/recipes/95-test_external_krb5_data/krb5.sh b/test/recipes/95-test_external_krb5_data/krb5.sh
new file mode 100755
index 000000000000..eeaa59f9610b
--- /dev/null
+++ b/test/recipes/95-test_external_krb5_data/krb5.sh
@@ -0,0 +1,23 @@
+#!/bin/sh -ex
+#
+# Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+# krb5's test suite clears LD_LIBRARY_PATH
+LDFLAGS="-L`pwd`/$BLDTOP -Wl,-rpath,`pwd`/$BLDTOP"
+CFLAGS="-I`pwd`/$BLDTOP/include -I`pwd`/$SRCTOP/include"
+
+cd $SRCTOP/krb5/src
+autoreconf
+./configure --with-ldap --with-prng-alg=os --enable-pkinit \
+ --with-crypto-impl=openssl --with-tls-impl=openssl \
+ CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"
+
+# quiet make so that Travis doesn't overflow
+make -s
+
+make check
diff --git a/test/recipes/95-test_external_pyca.t b/test/recipes/95-test_external_pyca.t
new file mode 100644
index 000000000000..a3d09c118cb4
--- /dev/null
+++ b/test/recipes/95-test_external_pyca.t
@@ -0,0 +1,28 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+use OpenSSL::Test qw/:DEFAULT bldtop_file data_file srctop_file cmdstr/;
+
+setup("test_external_pyca");
+
+plan skip_all => "No external tests in this configuration"
+ if disabled("external-tests");
+plan skip_all => "PYCA tests not available on Windows or VMS"
+ if $^O =~ /^(VMS|MSWin32)$/;
+plan skip_all => "PYCA Cryptography not available"
+ if ! -f srctop_file("pyca-cryptography", "setup.py");
+plan skip_all => "PYCA tests only available in a shared build"
+ if disabled("shared");
+
+plan tests => 1;
+
+ok(run(cmd(["sh", data_file("cryptography.sh")])),
+ "running Python Cryptography tests");
diff --git a/test/recipes/95-test_external_pyca_data/cryptography.sh b/test/recipes/95-test_external_pyca_data/cryptography.sh
new file mode 100755
index 000000000000..b33af504d01d
--- /dev/null
+++ b/test/recipes/95-test_external_pyca_data/cryptography.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright (c) 2017, Oracle and/or its affiliates. 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
+
+#
+# OpenSSL external testing using the Python Cryptography module
+#
+set -e
+set -x
+
+O_EXE=`pwd`/$BLDTOP/apps
+O_BINC=`pwd`/$BLDTOP/include
+O_SINC=`pwd`/$SRCTOP/include
+O_LIB=`pwd`/$BLDTOP
+
+export PATH=$O_EXE:$PATH
+export LD_LIBRARY_PATH=$O_LIB:$LD_LIBRARY_PATH
+
+# Check/Set openssl version
+OPENSSL_VERSION=`openssl version | cut -f 2 -d ' '`
+
+echo "------------------------------------------------------------------"
+echo "Testing OpenSSL using Python Cryptography:"
+echo " CWD: $PWD"
+echo " SRCTOP: $SRCTOP"
+echo " BLDTOP: $BLDTOP"
+echo " OpenSSL version: $OPENSSL_VERSION"
+echo "------------------------------------------------------------------"
+
+cd $SRCTOP
+
+# Create a python virtual env and activate
+rm -rf venv-cryptography
+python -m venv venv-cryptography
+. ./venv-cryptography/bin/activate
+# Upgrade pip to always have latest
+pip install -U pip
+
+cd pyca-cryptography
+
+echo "------------------------------------------------------------------"
+echo "Building cryptography and installing test requirements"
+echo "------------------------------------------------------------------"
+LDFLAGS="-L$O_LIB" CFLAGS="-I$O_BINC -I$O_SINC " pip install .[test]
+pip install -e vectors
+
+echo "------------------------------------------------------------------"
+echo "Print linked libraries"
+echo "------------------------------------------------------------------"
+ldd $(find ../venv-cryptography/lib/ -iname '*.so')
+
+
+echo "------------------------------------------------------------------"
+echo "Running tests"
+echo "------------------------------------------------------------------"
+pytest -n auto tests --wycheproof-root=../wycheproof
+
+cd ../
+deactivate
+rm -rf venv-cryptography
+
+exit 0
+
diff --git a/test/recipes/99-test_ecstress.t b/test/recipes/99-test_ecstress.t
new file mode 100644
index 000000000000..347fb94daff1
--- /dev/null
+++ b/test/recipes/99-test_ecstress.t
@@ -0,0 +1,23 @@
+#! /usr/bin/env perl
+# Copyright 2017 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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_ecstress");
+
+plan tests => 1;
+
+SKIP: {
+ skip "Skipping EC stress test", 1
+ if ! exists $ENV{'ECSTRESS'};
+ ok(run(test(["ecstresstest"])), "running ecstresstest");
+}
diff --git a/test/recipes/99-test_fuzz_asn1.t b/test/recipes/99-test_fuzz_asn1.t
new file mode 100644
index 000000000000..41fc541e9e7e
--- /dev/null
+++ b/test/recipes/99-test_fuzz_asn1.t
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "asn1";
+setup("test_fuzz_${fuzzer}");
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_asn1parse.t b/test/recipes/99-test_fuzz_asn1parse.t
new file mode 100644
index 000000000000..8a008bb89b01
--- /dev/null
+++ b/test/recipes/99-test_fuzz_asn1parse.t
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "asn1parse";
+setup("test_fuzz_${fuzzer}");
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_bignum.t b/test/recipes/99-test_fuzz_bignum.t
new file mode 100644
index 000000000000..190c37bc8f98
--- /dev/null
+++ b/test/recipes/99-test_fuzz_bignum.t
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "bignum";
+setup("test_fuzz_${fuzzer}");
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_bndiv.t b/test/recipes/99-test_fuzz_bndiv.t
new file mode 100644
index 000000000000..4932840b7cd0
--- /dev/null
+++ b/test/recipes/99-test_fuzz_bndiv.t
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "bndiv";
+setup("test_fuzz_${fuzzer}");
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_client.t b/test/recipes/99-test_fuzz_client.t
new file mode 100644
index 000000000000..5d147cf9b602
--- /dev/null
+++ b/test/recipes/99-test_fuzz_client.t
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "client";
+setup("test_fuzz_${fuzzer}");
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_cmp.t b/test/recipes/99-test_fuzz_cmp.t
new file mode 100644
index 000000000000..0fc1d156da06
--- /dev/null
+++ b/test/recipes/99-test_fuzz_cmp.t
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "cmp";
+setup("test_fuzz_${fuzzer}");
+
+plan skip_all => "This test requires $fuzzer support"
+ if disabled($fuzzer);
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_cms.t b/test/recipes/99-test_fuzz_cms.t
new file mode 100644
index 000000000000..9c76f46a3daf
--- /dev/null
+++ b/test/recipes/99-test_fuzz_cms.t
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "cms";
+setup("test_fuzz_${fuzzer}");
+
+plan skip_all => "This test requires $fuzzer support"
+ if disabled($fuzzer);
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_conf.t b/test/recipes/99-test_fuzz_conf.t
new file mode 100644
index 000000000000..c96565f259e7
--- /dev/null
+++ b/test/recipes/99-test_fuzz_conf.t
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "conf";
+setup("test_fuzz_${fuzzer}");
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_crl.t b/test/recipes/99-test_fuzz_crl.t
new file mode 100644
index 000000000000..1a5281a07285
--- /dev/null
+++ b/test/recipes/99-test_fuzz_crl.t
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "crl";
+setup("test_fuzz_${fuzzer}");
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_ct.t b/test/recipes/99-test_fuzz_ct.t
new file mode 100644
index 000000000000..bbfb4ace938d
--- /dev/null
+++ b/test/recipes/99-test_fuzz_ct.t
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "ct";
+setup("test_fuzz_${fuzzer}");
+
+plan skip_all => "This test requires $fuzzer support"
+ if disabled($fuzzer);
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_server.t b/test/recipes/99-test_fuzz_server.t
new file mode 100644
index 000000000000..0d0f021387ca
--- /dev/null
+++ b/test/recipes/99-test_fuzz_server.t
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "server";
+setup("test_fuzz_${fuzzer}");
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/99-test_fuzz_x509.t b/test/recipes/99-test_fuzz_x509.t
new file mode 100644
index 000000000000..b0b86365d101
--- /dev/null
+++ b/test/recipes/99-test_fuzz_x509.t
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+# Copyright 2016-2023 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
+
+use strict;
+use warnings;
+
+use OpenSSL::Test qw/:DEFAULT srctop_file/;
+use OpenSSL::Test::Utils;
+
+my $fuzzer = "x509";
+setup("test_fuzz_${fuzzer}");
+
+plan skip_all => "This test requires ocsp support"
+ if disabled("ocsp");
+
+plan tests => 2; # one more due to below require_ok(...)
+
+require_ok(srctop_file('test','recipes','fuzz.pl'));
+
+fuzz_ok($fuzzer);
diff --git a/test/recipes/fuzz.pl b/test/recipes/fuzz.pl
new file mode 100644
index 000000000000..3f03eef4f724
--- /dev/null
+++ b/test/recipes/fuzz.pl
@@ -0,0 +1,26 @@
+# Copyright 2016-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
+
+use strict;
+use warnings;
+
+use OpenSSL::Glob;
+use OpenSSL::Test qw/:DEFAULT srctop_dir/;
+
+sub fuzz_ok {
+ die "Only one argument accepted" if scalar @_ != 1;
+
+ my $f = $_[0];
+ my $d = srctop_dir('fuzz', 'corpora', $f);
+
+ SKIP: {
+ skip "No directory $d", 1 unless -d $d;
+ ok(run(fuzz(["$f-test", $d])), "Fuzzing $f");
+ }
+}
+
+1;
diff --git a/test/recipes/ocsp-response.der b/test/recipes/ocsp-response.der
new file mode 100644
index 000000000000..31351a0e3c89
--- /dev/null
+++ b/test/recipes/ocsp-response.der
Binary files differ
diff --git a/test/recipes/tconversion.pl b/test/recipes/tconversion.pl
new file mode 100644
index 000000000000..78be03178c32
--- /dev/null
+++ b/test/recipes/tconversion.pl
@@ -0,0 +1,160 @@
+#! /usr/bin/env perl
+# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use strict;
+use warnings;
+
+use File::Compare qw/compare_text/;
+use File::Copy;
+use OpenSSL::Test qw/:DEFAULT/;
+
+my %conversionforms = (
+ # Default conversion forms. Other series may be added with
+ # specific test types as key.
+ "*" => [ "d", "p" ],
+ "msb" => [ "d", "p", "msblob" ],
+ "pvk" => [ "d", "p", "pvk" ],
+ );
+sub tconversion {
+ my %opts = @_;
+
+ die "Missing option -type" unless $opts{-type};
+ die "Missing option -in" unless $opts{-in};
+ my $testtype = $opts{-type};
+ my $t = $opts{-in};
+ my $prefix = $opts{-prefix} // $testtype;
+ my @conversionforms =
+ defined($conversionforms{$testtype}) ?
+ @{$conversionforms{$testtype}} :
+ @{$conversionforms{"*"}};
+ my @openssl_args;
+ if (defined $opts{-args}) {
+ @openssl_args = @{$opts{-args}} if ref $opts{-args} eq 'ARRAY';
+ @openssl_args = ($opts{-args}) if ref $opts{-args} eq '';
+ }
+ @openssl_args = ($testtype) unless @openssl_args;
+
+ my $n = scalar @conversionforms;
+ my $totaltests =
+ 1 # for initializing
+ + $n # initial conversions from p to all forms (A)
+ + $n*$n # conversion from result of A to all forms (B)
+ + 1 # comparing original test file to p form of A
+ + $n*($n-1); # comparing first conversion to each form in A with B
+ $totaltests-- if ($testtype eq "p7d"); # no comparison of original test file
+ $totaltests -= $n if ($testtype eq "pvk"); # no comparisons of the pvk form
+ plan tests => $totaltests;
+
+ my @cmd = ("openssl", @openssl_args);
+
+ my $init;
+ if (scalar @openssl_args > 0 && $openssl_args[0] eq "pkey") {
+ $init = ok(run(app([@cmd, "-in", $t, "-out", "$prefix-fff.p"])),
+ 'initializing');
+ } else {
+ $init = ok(copy($t, "$prefix-fff.p"), 'initializing');
+ }
+ if (!$init) {
+ diag("Trying to copy $t to $prefix-fff.p : $!");
+ }
+
+ SKIP: {
+ skip "Not initialized, skipping...", 22 unless $init;
+
+ foreach my $to (@conversionforms) {
+ ok(run(app([@cmd,
+ "-in", "$prefix-fff.p",
+ "-inform", "p",
+ "-out", "$prefix-f.$to",
+ "-outform", $to])),
+ "p -> $to");
+ }
+
+ foreach my $to (@conversionforms) {
+ foreach my $from (@conversionforms) {
+ ok(run(app([@cmd,
+ "-in", "$prefix-f.$from",
+ "-inform", $from,
+ "-out", "$prefix-ff.$from$to",
+ "-outform", $to])),
+ "$from -> $to");
+ }
+ }
+
+ if ($testtype ne "p7d") {
+ is(cmp_text("$prefix-fff.p", "$prefix-f.p"), 0,
+ 'comparing orig to p');
+ }
+
+ foreach my $to (@conversionforms) {
+ next if $to eq "d" or $to eq "pvk";
+ foreach my $from (@conversionforms) {
+ is(cmp_text("$prefix-f.$to", "$prefix-ff.$from$to"), 0,
+ "comparing $to to $from$to");
+ }
+ }
+ }
+}
+
+sub cmp_text {
+ return compare_text(@_, sub {
+ $_[0] =~ s/\R//g;
+ $_[1] =~ s/\R//g;
+ return $_[0] ne $_[1];
+ });
+}
+
+sub file_contains {
+ $_ = shift @_;
+ my $pattern = shift @_;
+ open(DATA, $_) or return 0;
+ $_= join('', <DATA>);
+ close(DATA);
+ return m/$pattern/ ? 1 : 0;
+}
+
+sub cert_contains {
+ my $cert = shift @_;
+ my $pattern = shift @_;
+ my $expected = shift @_;
+ my $name = shift @_;
+ my $out = "cert_contains.out";
+ run(app(["openssl", "x509", "-noout", "-text", "-in", $cert, "-out", $out]));
+ is(file_contains($out, $pattern), $expected, ($name ? "$name: " : "").
+ "$cert should ".($expected ? "" : "not ")."contain $pattern");
+ # not unlinking $out
+}
+
+sub uniq (@) {
+ my %seen = ();
+ grep { not $seen{$_}++ } @_;
+}
+
+sub file_n_different_lines {
+ my $filename = shift @_;
+ open(DATA, $filename) or return 0;
+ chomp(my @lines = <DATA>);
+ close(DATA);
+ return scalar(uniq @lines);
+}
+
+sub cert_ext_has_n_different_lines {
+ my $cert = shift @_;
+ my $expected = shift @_;
+ my $exts = shift @_;
+ my $name = shift @_;
+ my $out = "cert_n_different_exts.out";
+ run(app(["openssl", "x509", "-noout", "-ext", $exts,
+ "-in", $cert, "-out", $out]));
+ is(file_n_different_lines($out), $expected, ($name ? "$name: " : "").
+ "$cert '$exts' output should contain $expected different lines");
+ # not unlinking $out
+}
+
+1;
diff --git a/test/recordlentest.c b/test/recordlentest.c
new file mode 100644
index 000000000000..2cc52ed232ab
--- /dev/null
+++ b/test/recordlentest.c
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2017-2022 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 "helpers/ssltestlib.h"
+#include "testutil.h"
+
+static char *cert = NULL;
+static char *privkey = NULL;
+
+#define TEST_PLAINTEXT_OVERFLOW_OK 0
+#define TEST_PLAINTEXT_OVERFLOW_NOT_OK 1
+#define TEST_ENCRYPTED_OVERFLOW_TLS1_3_OK 2
+#define TEST_ENCRYPTED_OVERFLOW_TLS1_3_NOT_OK 3
+#define TEST_ENCRYPTED_OVERFLOW_TLS1_2_OK 4
+#define TEST_ENCRYPTED_OVERFLOW_TLS1_2_NOT_OK 5
+
+#define TOTAL_RECORD_OVERFLOW_TESTS 6
+
+static int write_record(BIO *b, size_t len, int rectype, int recversion)
+{
+ unsigned char header[SSL3_RT_HEADER_LENGTH];
+ size_t written;
+ unsigned char buf[256];
+
+ memset(buf, 0, sizeof(buf));
+
+ header[0] = rectype;
+ header[1] = (recversion >> 8) & 0xff;
+ header[2] = recversion & 0xff;
+ header[3] = (len >> 8) & 0xff;
+ header[4] = len & 0xff;
+
+ if (!BIO_write_ex(b, header, SSL3_RT_HEADER_LENGTH, &written)
+ || written != SSL3_RT_HEADER_LENGTH)
+ return 0;
+
+ while (len > 0) {
+ size_t outlen;
+
+ if (len > sizeof(buf))
+ outlen = sizeof(buf);
+ else
+ outlen = len;
+
+ if (!BIO_write_ex(b, buf, outlen, &written)
+ || written != outlen)
+ return 0;
+
+ len -= outlen;
+ }
+
+ return 1;
+}
+
+static int fail_due_to_record_overflow(int enc)
+{
+ long err = ERR_peek_error();
+ int reason;
+
+ if (enc)
+ reason = SSL_R_ENCRYPTED_LENGTH_TOO_LONG;
+ else
+ reason = SSL_R_DATA_LENGTH_TOO_LONG;
+
+ if (ERR_GET_LIB(err) == ERR_LIB_SSL
+ && ERR_GET_REASON(err) == reason)
+ return 1;
+
+ return 0;
+}
+
+static int test_record_overflow(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ size_t len = 0;
+ size_t written;
+ int overf_expected;
+ unsigned char buf;
+ BIO *serverbio;
+ int recversion;
+
+#ifdef OPENSSL_NO_TLS1_2
+ if (idx == TEST_ENCRYPTED_OVERFLOW_TLS1_2_OK
+ || idx == TEST_ENCRYPTED_OVERFLOW_TLS1_2_NOT_OK)
+ return 1;
+#endif
+#if defined(OPENSSL_NO_TLS1_3) \
+ || (defined(OPENSSL_NO_EC) && defined(OPENSSL_NO_DH))
+ if (idx == TEST_ENCRYPTED_OVERFLOW_TLS1_3_OK
+ || idx == TEST_ENCRYPTED_OVERFLOW_TLS1_3_NOT_OK)
+ return 1;
+#endif
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (idx == TEST_ENCRYPTED_OVERFLOW_TLS1_2_OK
+ || idx == TEST_ENCRYPTED_OVERFLOW_TLS1_2_NOT_OK) {
+ len = SSL3_RT_MAX_ENCRYPTED_LENGTH;
+#ifndef OPENSSL_NO_COMP
+ len -= SSL3_RT_MAX_COMPRESSED_OVERHEAD;
+#endif
+ SSL_CTX_set_max_proto_version(sctx, TLS1_2_VERSION);
+ } else if (idx == TEST_ENCRYPTED_OVERFLOW_TLS1_3_OK
+ || idx == TEST_ENCRYPTED_OVERFLOW_TLS1_3_NOT_OK) {
+ len = SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH;
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ serverbio = SSL_get_rbio(serverssl);
+
+ if (idx == TEST_PLAINTEXT_OVERFLOW_OK
+ || idx == TEST_PLAINTEXT_OVERFLOW_NOT_OK) {
+ len = SSL3_RT_MAX_PLAIN_LENGTH;
+
+ if (idx == TEST_PLAINTEXT_OVERFLOW_NOT_OK)
+ len++;
+
+ if (!TEST_true(write_record(serverbio, len,
+ SSL3_RT_HANDSHAKE, TLS1_VERSION)))
+ goto end;
+
+ if (!TEST_int_le(SSL_accept(serverssl), 0))
+ goto end;
+
+ overf_expected = (idx == TEST_PLAINTEXT_OVERFLOW_OK) ? 0 : 1;
+ if (!TEST_int_eq(fail_due_to_record_overflow(0), overf_expected))
+ goto end;
+
+ goto success;
+ }
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ if (idx == TEST_ENCRYPTED_OVERFLOW_TLS1_2_NOT_OK
+ || idx == TEST_ENCRYPTED_OVERFLOW_TLS1_3_NOT_OK) {
+ overf_expected = 1;
+ len++;
+ } else {
+ overf_expected = 0;
+ }
+
+ recversion = TLS1_2_VERSION;
+
+ if (!TEST_true(write_record(serverbio, len, SSL3_RT_APPLICATION_DATA,
+ recversion)))
+ goto end;
+
+ if (!TEST_false(SSL_read_ex(serverssl, &buf, sizeof(buf), &written)))
+ goto end;
+
+ if (!TEST_int_eq(fail_due_to_record_overflow(1), overf_expected))
+ goto end;
+
+ success:
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+OPT_TEST_DECLARE_USAGE("certfile privkeyfile\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(cert = test_get_argument(0))
+ || !TEST_ptr(privkey = test_get_argument(1)))
+ return 0;
+
+ ADD_ALL_TESTS(test_record_overflow, TOTAL_RECORD_OVERFLOW_TESTS);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ bio_s_mempacket_test_free();
+}
diff --git a/test/recursive.cnf b/test/recursive.cnf
new file mode 100644
index 000000000000..505733ae4565
--- /dev/null
+++ b/test/recursive.cnf
@@ -0,0 +1,8 @@
+openssl_conf = openssl_init
+config_diagnostics = yes
+
+[openssl_init]
+providers = provider_sect
+
+[provider_sect]
+ = provider_sect
diff --git a/test/rsa_complex.c b/test/rsa_complex.c
new file mode 100644
index 000000000000..c86d912340a1
--- /dev/null
+++ b/test/rsa_complex.c
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2018-2022 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
+ */
+
+/*
+ * Check to see if there is a conflict between complex.h and openssl/rsa.h.
+ * The former defines "I" as a macro and earlier versions of the latter use
+ * for function arguments.
+ *
+ * Will always succeed on djgpp, since its libc does not have complex.h.
+ */
+
+#if !defined(__DJGPP__)
+# if defined(__STDC_VERSION__)
+# if __STDC_VERSION__ >= 199901L
+# include <complex.h>
+# endif
+# endif
+# include <openssl/rsa.h>
+#endif
+#include <stdlib.h>
+
+int main(int argc, char *argv[])
+{
+ /* There are explicitly no run time checks for this one */
+ return EXIT_SUCCESS;
+}
diff --git a/test/rsa_mp_test.c b/test/rsa_mp_test.c
new file mode 100644
index 000000000000..5405df342422
--- /dev/null
+++ b/test/rsa_mp_test.c
@@ -0,0 +1,296 @@
+/*
+ * Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2017 BaishanCloud. 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
+ */
+
+/* This aims to test the setting functions, including internal ones */
+
+/*
+ * RSA low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include <openssl/bn.h>
+
+#include "testutil.h"
+
+#include <openssl/rsa.h>
+#include "crypto/rsa.h"
+
+#define NUM_EXTRA_PRIMES 1
+
+DEFINE_STACK_OF(BIGNUM)
+
+/* C90 requires string should <= 509 bytes */
+static const unsigned char n[] =
+ "\x92\x60\xd0\x75\x0a\xe1\x17\xee\xe5\x5c\x3f\x3d\xea\xba\x74\x91"
+ "\x75\x21\xa2\x62\xee\x76\x00\x7c\xdf\x8a\x56\x75\x5a\xd7\x3a\x15"
+ "\x98\xa1\x40\x84\x10\xa0\x14\x34\xc3\xf5\xbc\x54\xa8\x8b\x57\xfa"
+ "\x19\xfc\x43\x28\xda\xea\x07\x50\xa4\xc4\x4e\x88\xcf\xf3\xb2\x38"
+ "\x26\x21\xb8\x0f\x67\x04\x64\x43\x3e\x43\x36\xe6\xd0\x03\xe8\xcd"
+ "\x65\xbf\xf2\x11\xda\x14\x4b\x88\x29\x1c\x22\x59\xa0\x0a\x72\xb7"
+ "\x11\xc1\x16\xef\x76\x86\xe8\xfe\xe3\x4e\x4d\x93\x3c\x86\x81\x87"
+ "\xbd\xc2\x6f\x7b\xe0\x71\x49\x3c\x86\xf7\xa5\x94\x1c\x35\x10\x80"
+ "\x6a\xd6\x7b\x0f\x94\xd8\x8f\x5c\xf5\xc0\x2a\x09\x28\x21\xd8\x62"
+ "\x6e\x89\x32\xb6\x5c\x5b\xd8\xc9\x20\x49\xc2\x10\x93\x2b\x7a\xfa"
+ "\x7a\xc5\x9c\x0e\x88\x6a\xe5\xc1\xed\xb0\x0d\x8c\xe2\xc5\x76\x33"
+ "\xdb\x26\xbd\x66\x39\xbf\xf7\x3c\xee\x82\xbe\x92\x75\xc4\x02\xb4"
+ "\xcf\x2a\x43\x88\xda\x8c\xf8\xc6\x4e\xef\xe1\xc5\xa0\xf5\xab\x80"
+ "\x57\xc3\x9f\xa5\xc0\x58\x9c\x3e\x25\x3f\x09\x60\x33\x23\x00\xf9"
+ "\x4b\xea\x44\x87\x7b\x58\x8e\x1e\xdb\xde\x97\xcf\x23\x60\x72\x7a"
+ "\x09\xb7\x75\x26\x2d\x7e\xe5\x52\xb3\x31\x9b\x92\x66\xf0\x5a\x25";
+
+static const unsigned char e[] = "\x01\x00\x01";
+
+static const unsigned char d[] =
+ "\x6a\x7d\xf2\xca\x63\xea\xd4\xdd\xa1\x91\xd6\x14\xb6\xb3\x85\xe0"
+ "\xd9\x05\x6a\x3d\x6d\x5c\xfe\x07\xdb\x1d\xaa\xbe\xe0\x22\xdb\x08"
+ "\x21\x2d\x97\x61\x3d\x33\x28\xe0\x26\x7c\x9d\xd2\x3d\x78\x7a\xbd"
+ "\xe2\xaf\xcb\x30\x6a\xeb\x7d\xfc\xe6\x92\x46\xcc\x73\xf5\xc8\x7f"
+ "\xdf\x06\x03\x01\x79\xa2\x11\x4b\x76\x7d\xb1\xf0\x83\xff\x84\x1c"
+ "\x02\x5d\x7d\xc0\x0c\xd8\x24\x35\xb9\xa9\x0f\x69\x53\x69\xe9\x4d"
+ "\xf2\x3d\x2c\xe4\x58\xbc\x3b\x32\x83\xad\x8b\xba\x2b\x8f\xa1\xba"
+ "\x62\xe2\xdc\xe9\xac\xcf\xf3\x79\x9a\xae\x7c\x84\x00\x16\xf3\xba"
+ "\x8e\x00\x48\xc0\xb6\xcc\x43\x39\xaf\x71\x61\x00\x3a\x5b\xeb\x86"
+ "\x4a\x01\x64\xb2\xc1\xc9\x23\x7b\x64\xbc\x87\x55\x69\x94\x35\x1b"
+ "\x27\x50\x6c\x33\xd4\xbc\xdf\xce\x0f\x9c\x49\x1a\x7d\x6b\x06\x28"
+ "\xc7\xc8\x52\xbe\x4f\x0a\x9c\x31\x32\xb2\xed\x3a\x2c\x88\x81\xe9"
+ "\xaa\xb0\x7e\x20\xe1\x7d\xeb\x07\x46\x91\xbe\x67\x77\x76\xa7\x8b"
+ "\x5c\x50\x2e\x05\xd9\xbd\xde\x72\x12\x6b\x37\x38\x69\x5e\x2d\xd1"
+ "\xa0\xa9\x8a\x14\x24\x7c\x65\xd8\xa7\xee\x79\x43\x2a\x09\x2c\xb0"
+ "\x72\x1a\x12\xdf\x79\x8e\x44\xf7\xcf\xce\x0c\x49\x81\x47\xa9\xb1";
+
+static const unsigned char p[] =
+ "\x06\x77\xcd\xd5\x46\x9b\xc1\xd5\x58\x00\x81\xe2\xf3\x0a\x36\xb1"
+ "\x6e\x29\x89\xd5\x2f\x31\x5f\x92\x22\x3b\x9b\x75\x30\x82\xfa\xc5"
+ "\xf5\xde\x8a\x36\xdb\xc6\xe5\x8f\xef\x14\x37\xd6\x00\xf9\xab\x90"
+ "\x9b\x5d\x57\x4c\xf5\x1f\x77\xc4\xbb\x8b\xdd\x9b\x67\x11\x45\xb2"
+ "\x64\xe8\xac\xa8\x03\x0f\x16\x0d\x5d\x2d\x53\x07\x23\xfb\x62\x0d"
+ "\xe6\x16\xd3\x23\xe8\xb3";
+
+static const unsigned char q[] =
+ "\x06\x66\x9a\x70\x53\xd6\x72\x74\xfd\xea\x45\xc3\xc0\x17\xae\xde"
+ "\x79\x17\xae\x79\xde\xfc\x0e\xf7\xa4\x3a\x8c\x43\x8f\xc7\x8a\xa2"
+ "\x2c\x51\xc4\xd0\x72\x89\x73\x5c\x61\xbe\xfd\x54\x3f\x92\x65\xde"
+ "\x4d\x65\x71\x70\xf6\xf2\xe5\x98\xb9\x0f\xd1\x0b\xe6\x95\x09\x4a"
+ "\x7a\xdf\xf3\x10\x16\xd0\x60\xfc\xa5\x10\x34\x97\x37\x6f\x0a\xd5"
+ "\x5d\x8f\xd4\xc3\xa0\x5b";
+
+static const unsigned char dmp1[] =
+ "\x05\x7c\x9e\x1c\xbd\x90\x25\xe7\x40\x86\xf5\xa8\x3b\x7a\x3f\x99"
+ "\x56\x95\x60\x3a\x7b\x95\x4b\xb8\xa0\xd7\xa5\xf1\xcc\xdc\x5f\xb5"
+ "\x8c\xf4\x62\x95\x54\xed\x2e\x12\x62\xc2\xe8\xf6\xde\xce\xed\x8e"
+ "\x77\x6d\xc0\x40\x25\x74\xb3\x5a\x2d\xaa\xe1\xac\x11\xcb\xe2\x2f"
+ "\x0a\x51\x23\x1e\x47\xb2\x05\x88\x02\xb2\x0f\x4b\xf0\x67\x30\xf0"
+ "\x0f\x6e\xef\x5f\xf7\xe7";
+
+static const unsigned char dmq1[] =
+ "\x01\xa5\x6b\xbc\xcd\xe3\x0e\x46\xc6\x72\xf5\x04\x56\x28\x01\x22"
+ "\x58\x74\x5d\xbc\x1c\x3c\x29\x41\x49\x6c\x81\x5c\x72\xe2\xf7\xe5"
+ "\xa3\x8e\x58\x16\xe0\x0e\x37\xac\x1f\xbb\x75\xfd\xaf\xe7\xdf\xe9"
+ "\x1f\x70\xa2\x8f\x52\x03\xc0\x46\xd9\xf9\x96\x63\x00\x27\x7e\x5f"
+ "\x38\x60\xd6\x6b\x61\xe2\xaf\xbe\xea\x58\xd3\x9d\xbc\x75\x03\x8d"
+ "\x42\x65\xd6\x6b\x85\x97";
+
+static const unsigned char iqmp[] =
+ "\x03\xa1\x8b\x80\xe4\xd8\x87\x25\x17\x5d\xcc\x8d\xa9\x8a\x22\x2b"
+ "\x6c\x15\x34\x6f\x80\xcc\x1c\x44\x04\x68\xbc\x03\xcd\x95\xbb\x69"
+ "\x37\x61\x48\xb4\x23\x13\x08\x16\x54\x6a\xa1\x7c\xf5\xd4\x3a\xe1"
+ "\x4f\xa4\x0c\xf5\xaf\x80\x85\x27\x06\x0d\x70\xc0\xc5\x19\x28\xfe"
+ "\xee\x8e\x86\x21\x98\x8a\x37\xb7\xe5\x30\x25\x70\x93\x51\x2d\x49"
+ "\x85\x56\xb3\x0c\x2b\x96";
+
+static const unsigned char ex_prime[] =
+ "\x03\x89\x22\xa0\xb7\x3a\x91\xcb\x5e\x0c\xfd\x73\xde\xa7\x38\xa9"
+ "\x47\x43\xd6\x02\xbf\x2a\xb9\x3c\x48\xf3\x06\xd6\x58\x35\x50\x56"
+ "\x16\x5c\x34\x9b\x61\x87\xc8\xaa\x0a\x5d\x8a\x0a\xcd\x9c\x41\xd9"
+ "\x96\x24\xe0\xa9\x9b\x26\xb7\xa8\x08\xc9\xea\xdc\xa7\x15\xfb\x62"
+ "\xa0\x2d\x90\xe6\xa7\x55\x6e\xc6\x6c\xff\xd6\x10\x6d\xfa\x2e\x04"
+ "\x50\xec\x5c\x66\xe4\x05";
+
+static const unsigned char ex_exponent[] =
+ "\x02\x0a\xcd\xc3\x82\xd2\x03\xb0\x31\xac\xd3\x20\x80\x34\x9a\x57"
+ "\xbc\x60\x04\x57\x25\xd0\x29\x9a\x16\x90\xb9\x1c\x49\x6a\xd1\xf2"
+ "\x47\x8c\x0e\x9e\xc9\x20\xc2\xd8\xe4\x8f\xce\xd2\x1a\x9c\xec\xb4"
+ "\x1f\x33\x41\xc8\xf5\x62\xd1\xa5\xef\x1d\xa1\xd8\xbd\x71\xc6\xf7"
+ "\xda\x89\x37\x2e\xe2\xec\x47\xc5\xb8\xe3\xb4\xe3\x5c\x82\xaa\xdd"
+ "\xb7\x58\x2e\xaf\x07\x79";
+
+static const unsigned char ex_coefficient[] =
+ "\x00\x9c\x09\x88\x9b\xc8\x57\x08\x69\x69\xab\x2d\x9e\x29\x1c\x3c"
+ "\x6d\x59\x33\x12\x0d\x2b\x09\x2e\xaf\x01\x2c\x27\x01\xfc\xbd\x26"
+ "\x13\xf9\x2d\x09\x22\x4e\x49\x11\x03\x82\x88\x87\xf4\x43\x1d\xac"
+ "\xca\xec\x86\xf7\x23\xf1\x64\xf3\xf5\x81\xf0\x37\x36\xcf\x67\xff"
+ "\x1a\xff\x7a\xc7\xf9\xf9\x67\x2d\xa0\x9d\x61\xf8\xf6\x47\x5c\x2f"
+ "\xe7\x66\xe8\x3c\x3a\xe8";
+
+static int key2048_key(RSA *key)
+{
+ if (!TEST_int_eq(RSA_set0_key(key,
+ BN_bin2bn(n, sizeof(n) - 1, NULL),
+ BN_bin2bn(e, sizeof(e) - 1, NULL),
+ BN_bin2bn(d, sizeof(d) - 1, NULL)), 1))
+ return 0;
+
+ return RSA_size(key);
+}
+
+static int key2048p3_v1(RSA *key)
+{
+ BIGNUM **pris = NULL, **exps = NULL, **coeffs = NULL;
+ int rv = RSA_size(key);
+
+
+ if (!TEST_int_eq(RSA_set0_factors(key,
+ BN_bin2bn(p, sizeof(p) - 1, NULL),
+ BN_bin2bn(q, sizeof(q) - 1, NULL)), 1))
+ goto err;
+
+ if (!TEST_int_eq(RSA_set0_crt_params(key,
+ BN_bin2bn(dmp1, sizeof(dmp1) - 1, NULL),
+ BN_bin2bn(dmq1, sizeof(dmq1) - 1, NULL),
+ BN_bin2bn(iqmp, sizeof(iqmp) - 1,
+ NULL)), 1))
+ return 0;
+
+ pris = OPENSSL_zalloc(sizeof(BIGNUM *));
+ exps = OPENSSL_zalloc(sizeof(BIGNUM *));
+ coeffs = OPENSSL_zalloc(sizeof(BIGNUM *));
+ if (!TEST_ptr(pris) || !TEST_ptr(exps) || !TEST_ptr(coeffs))
+ goto err;
+
+ pris[0] = BN_bin2bn(ex_prime, sizeof(ex_prime) - 1, NULL);
+ exps[0] = BN_bin2bn(ex_exponent, sizeof(ex_exponent) - 1, NULL);
+ coeffs[0] = BN_bin2bn(ex_coefficient, sizeof(ex_coefficient) - 1, NULL);
+ if (!TEST_ptr(pris[0]) || !TEST_ptr(exps[0]) || !TEST_ptr(coeffs[0]))
+ goto err;
+
+ if (!TEST_true(RSA_set0_multi_prime_params(key, pris, exps,
+ coeffs, NUM_EXTRA_PRIMES)))
+ goto err;
+
+ ret:
+ OPENSSL_free(pris);
+ OPENSSL_free(exps);
+ OPENSSL_free(coeffs);
+ return rv;
+ err:
+ if (pris != NULL)
+ BN_free(pris[0]);
+ if (exps != NULL)
+ BN_free(exps[0]);
+ if (coeffs != NULL)
+ BN_free(coeffs[0]);
+ rv = 0;
+ goto ret;
+}
+
+static int key2048p3_v2(RSA *key)
+{
+ STACK_OF(BIGNUM) *primes = NULL, *exps = NULL, *coeffs = NULL;
+ BIGNUM *num = NULL;
+ int rv = RSA_size(key);
+
+ if (!TEST_ptr(primes = sk_BIGNUM_new_null())
+ || !TEST_ptr(exps = sk_BIGNUM_new_null())
+ || !TEST_ptr(coeffs = sk_BIGNUM_new_null()))
+ goto err;
+
+ if (!TEST_ptr(num = BN_bin2bn(p, sizeof(p) - 1, NULL))
+ || !TEST_int_ne(sk_BIGNUM_push(primes, num), 0)
+ || !TEST_ptr(num = BN_bin2bn(q, sizeof(q) - 1, NULL))
+ || !TEST_int_ne(sk_BIGNUM_push(primes, num), 0)
+ || !TEST_ptr(num = BN_bin2bn(ex_prime, sizeof(ex_prime) - 1, NULL))
+ || !TEST_int_ne(sk_BIGNUM_push(primes, num), 0))
+ goto err;
+
+ if (!TEST_ptr(num = BN_bin2bn(dmp1, sizeof(dmp1) - 1, NULL))
+ || !TEST_int_ne(sk_BIGNUM_push(exps, num), 0)
+ || !TEST_ptr(num = BN_bin2bn(dmq1, sizeof(dmq1) - 1, NULL))
+ || !TEST_int_ne(sk_BIGNUM_push(exps, num), 0)
+ || !TEST_ptr(num = BN_bin2bn(ex_exponent, sizeof(ex_exponent) - 1, NULL))
+ || !TEST_int_ne(sk_BIGNUM_push(exps, num), 0))
+ goto err;
+
+ if (!TEST_ptr(num = BN_bin2bn(iqmp, sizeof(iqmp) - 1, NULL))
+ || !TEST_int_ne(sk_BIGNUM_push(coeffs, num), 0)
+ || !TEST_ptr(num = BN_bin2bn(ex_coefficient, sizeof(ex_coefficient) - 1, NULL))
+ || !TEST_int_ne(sk_BIGNUM_push(coeffs, num), 0))
+ goto err;
+
+ if (!TEST_true(ossl_rsa_set0_all_params(key, primes, exps, coeffs)))
+ goto err;
+
+ ret:
+ sk_BIGNUM_free(primes);
+ sk_BIGNUM_free(exps);
+ sk_BIGNUM_free(coeffs);
+ return rv;
+ err:
+ sk_BIGNUM_pop_free(primes, BN_free);
+ sk_BIGNUM_pop_free(exps, BN_free);
+ sk_BIGNUM_pop_free(coeffs, BN_free);
+ primes = exps = coeffs = NULL;
+ rv = 0;
+ goto ret;
+}
+
+static int test_rsa_mp(int i)
+{
+ int ret = 0;
+ RSA *key;
+ unsigned char ptext[256];
+ unsigned char ctext[256];
+ static unsigned char ptext_ex[] = "\x54\x85\x9b\x34\x2c\x49\xea\x2a";
+ int plen;
+ int clen = 0;
+ int num;
+ static int (*param_set[])(RSA *) = {
+ key2048p3_v1,
+ key2048p3_v2,
+ };
+
+ plen = sizeof(ptext_ex) - 1;
+ key = RSA_new();
+ if (!TEST_ptr(key))
+ goto err;
+
+ if (!TEST_int_eq((clen = key2048_key(key)), 256)
+ || !TEST_int_eq((clen = param_set[i](key)), 256))
+ goto err;
+
+ if (!TEST_true(RSA_check_key_ex(key, NULL)))
+ goto err;
+
+ num = RSA_public_encrypt(plen, ptext_ex, ctext, key,
+ RSA_PKCS1_PADDING);
+ if (!TEST_int_eq(num, clen))
+ goto err;
+
+ num = RSA_private_decrypt(num, ctext, ptext, key, RSA_PKCS1_PADDING);
+ if (!TEST_mem_eq(ptext, num, ptext_ex, plen))
+ goto err;
+
+ ret = 1;
+err:
+ RSA_free(key);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_rsa_mp, 2);
+ return 1;
+}
diff --git a/test/rsa_sp800_56b_test.c b/test/rsa_sp800_56b_test.c
new file mode 100644
index 000000000000..b17dafe399f2
--- /dev/null
+++ b/test/rsa_sp800_56b_test.c
@@ -0,0 +1,548 @@
+/*
+ * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * RSA low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "internal/nelem.h"
+
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include <openssl/bn.h>
+
+#include "testutil.h"
+
+#include "rsa_local.h"
+#include <openssl/rsa.h>
+
+/* taken from RSA2 cavs data */
+static const unsigned char cav_e[] = {
+ 0x01,0x00,0x01
+};
+static const unsigned char cav_p[] = {
+ 0xcf,0x72,0x1b,0x9a,0xfd,0x0d,0x22,0x1a,0x74,0x50,0x97,0x22,0x76,0xd8,0xc0,
+ 0xc2,0xfd,0x08,0x81,0x05,0xdd,0x18,0x21,0x99,0x96,0xd6,0x5c,0x79,0xe3,0x02,
+ 0x81,0xd7,0x0e,0x3f,0x3b,0x34,0xda,0x61,0xc9,0x2d,0x84,0x86,0x62,0x1e,0x3d,
+ 0x5d,0xbf,0x92,0x2e,0xcd,0x35,0x3d,0x6e,0xb9,0x59,0x16,0xc9,0x82,0x50,0x41,
+ 0x30,0x45,0x67,0xaa,0xb7,0xbe,0xec,0xea,0x4b,0x9e,0xa0,0xc3,0x05,0xbc,0x4c,
+ 0x01,0xa5,0x4b,0xbd,0xa4,0x20,0xb5,0x20,0xd5,0x59,0x6f,0x82,0x5c,0x8f,0x4f,
+ 0xe0,0x3a,0x4e,0x7e,0xfe,0x44,0xf3,0x3c,0xc0,0x0e,0x14,0x2b,0x32,0xe6,0x28,
+ 0x8b,0x63,0x87,0x00,0xc3,0x53,0x4a,0x5b,0x71,0x7a,0x5b,0x28,0x40,0xc4,0x18,
+ 0xb6,0x77,0x0b,0xab,0x59,0xa4,0x96,0x7d
+};
+static const unsigned char cav_q[] = {
+ 0xfe,0xab,0xf2,0x7c,0x16,0x4a,0xf0,0x8d,0x31,0xc6,0x0a,0x82,0xe2,0xae,0xbb,
+ 0x03,0x7e,0x7b,0x20,0x4e,0x64,0xb0,0x16,0xad,0x3c,0x01,0x1a,0xd3,0x54,0xbf,
+ 0x2b,0xa4,0x02,0x9e,0xc3,0x0d,0x60,0x3d,0x1f,0xb9,0xc0,0x0d,0xe6,0x97,0x68,
+ 0xbb,0x8c,0x81,0xd5,0xc1,0x54,0x96,0x0f,0x99,0xf0,0xa8,0xa2,0xf3,0xc6,0x8e,
+ 0xec,0xbc,0x31,0x17,0x70,0x98,0x24,0xa3,0x36,0x51,0xa8,0x54,0xc4,0x44,0xdd,
+ 0xf7,0x7e,0xda,0x47,0x4a,0x67,0x44,0x5d,0x4e,0x75,0xf0,0x4d,0x00,0x68,0xe1,
+ 0x4a,0xec,0x1f,0x45,0xf9,0xe6,0xca,0x38,0x95,0x48,0x6f,0xdc,0x9d,0x1b,0xa3,
+ 0x4b,0xfd,0x08,0x4b,0x54,0xcd,0xeb,0x3d,0xef,0x33,0x11,0x6e,0xce,0xe4,0x5d,
+ 0xef,0xa9,0x58,0x5c,0x87,0x4d,0xc8,0xcf
+};
+static const unsigned char cav_n[] = {
+ 0xce,0x5e,0x8d,0x1a,0xa3,0x08,0x7a,0x2d,0xb4,0x49,0x48,0xf0,0x06,0xb6,0xfe,
+ 0xba,0x2f,0x39,0x7c,0x7b,0xe0,0x5d,0x09,0x2d,0x57,0x4e,0x54,0x60,0x9c,0xe5,
+ 0x08,0x4b,0xe1,0x1a,0x73,0xc1,0x5e,0x2f,0xb6,0x46,0xd7,0x81,0xca,0xbc,0x98,
+ 0xd2,0xf9,0xef,0x1c,0x92,0x8c,0x8d,0x99,0x85,0x28,0x52,0xd6,0xd5,0xab,0x70,
+ 0x7e,0x9e,0xa9,0x87,0x82,0xc8,0x95,0x64,0xeb,0xf0,0x6c,0x0f,0x3f,0xe9,0x02,
+ 0x29,0x2e,0x6d,0xa1,0xec,0xbf,0xdc,0x23,0xdf,0x82,0x4f,0xab,0x39,0x8d,0xcc,
+ 0xac,0x21,0x51,0x14,0xf8,0xef,0xec,0x73,0x80,0x86,0xa3,0xcf,0x8f,0xd5,0xcf,
+ 0x22,0x1f,0xcc,0x23,0x2f,0xba,0xcb,0xf6,0x17,0xcd,0x3a,0x1f,0xd9,0x84,0xb9,
+ 0x88,0xa7,0x78,0x0f,0xaa,0xc9,0x04,0x01,0x20,0x72,0x5d,0x2a,0xfe,0x5b,0xdd,
+ 0x16,0x5a,0xed,0x83,0x02,0x96,0x39,0x46,0x37,0x30,0xc1,0x0d,0x87,0xc2,0xc8,
+ 0x33,0x38,0xed,0x35,0x72,0xe5,0x29,0xf8,0x1f,0x23,0x60,0xe1,0x2a,0x5b,0x1d,
+ 0x6b,0x53,0x3f,0x07,0xc4,0xd9,0xbb,0x04,0x0c,0x5c,0x3f,0x0b,0xc4,0xd4,0x61,
+ 0x96,0x94,0xf1,0x0f,0x4a,0x49,0xac,0xde,0xd2,0xe8,0x42,0xb3,0x4a,0x0b,0x64,
+ 0x7a,0x32,0x5f,0x2b,0x5b,0x0f,0x8b,0x8b,0xe0,0x33,0x23,0x34,0x64,0xf8,0xb5,
+ 0x7f,0x69,0x60,0xb8,0x71,0xe9,0xff,0x92,0x42,0xb1,0xf7,0x23,0xa8,0xa7,0x92,
+ 0x04,0x3d,0x6b,0xff,0xf7,0xab,0xbb,0x14,0x1f,0x4c,0x10,0x97,0xd5,0x6b,0x71,
+ 0x12,0xfd,0x93,0xa0,0x4a,0x3b,0x75,0x72,0x40,0x96,0x1c,0x5f,0x40,0x40,0x57,
+ 0x13
+};
+static const unsigned char cav_d[] = {
+ 0x47,0x47,0x49,0x1d,0x66,0x2a,0x4b,0x68,0xf5,0xd8,0x4a,0x24,0xfd,0x6c,0xbf,
+ 0x56,0xb7,0x70,0xf7,0x9a,0x21,0xc8,0x80,0x9e,0xf4,0x84,0xcd,0x88,0x01,0x28,
+ 0xea,0x50,0xab,0x13,0x63,0xdf,0xea,0x14,0x38,0xb5,0x07,0x42,0x81,0x2f,0xda,
+ 0xe9,0x24,0x02,0x7e,0xaf,0xef,0x74,0x09,0x0e,0x80,0xfa,0xfb,0xd1,0x19,0x41,
+ 0xe5,0xba,0x0f,0x7c,0x0a,0xa4,0x15,0x55,0xa2,0x58,0x8c,0x3a,0x48,0x2c,0xc6,
+ 0xde,0x4a,0x76,0xfb,0x72,0xb6,0x61,0xe6,0xd2,0x10,0x44,0x4c,0x33,0xb8,0xd2,
+ 0x74,0xb1,0x9d,0x3b,0xcd,0x2f,0xb1,0x4f,0xc3,0x98,0xbd,0x83,0xb7,0x7e,0x75,
+ 0xe8,0xa7,0x6a,0xee,0xcc,0x51,0x8c,0x99,0x17,0x67,0x7f,0x27,0xf9,0x0d,0x6a,
+ 0xb7,0xd4,0x80,0x17,0x89,0x39,0x9c,0xf3,0xd7,0x0f,0xdf,0xb0,0x55,0x80,0x1d,
+ 0xaf,0x57,0x2e,0xd0,0xf0,0x4f,0x42,0x69,0x55,0xbc,0x83,0xd6,0x97,0x83,0x7a,
+ 0xe6,0xc6,0x30,0x6d,0x3d,0xb5,0x21,0xa7,0xc4,0x62,0x0a,0x20,0xce,0x5e,0x5a,
+ 0x17,0x98,0xb3,0x6f,0x6b,0x9a,0xeb,0x6b,0xa3,0xc4,0x75,0xd8,0x2b,0xdc,0x5c,
+ 0x6f,0xec,0x5d,0x49,0xac,0xa8,0xa4,0x2f,0xb8,0x8c,0x4f,0x2e,0x46,0x21,0xee,
+ 0x72,0x6a,0x0e,0x22,0x80,0x71,0xc8,0x76,0x40,0x44,0x61,0x16,0xbf,0xa5,0xf8,
+ 0x89,0xc7,0xe9,0x87,0xdf,0xbd,0x2e,0x4b,0x4e,0xc2,0x97,0x53,0xe9,0x49,0x1c,
+ 0x05,0xb0,0x0b,0x9b,0x9f,0x21,0x19,0x41,0xe9,0xf5,0x61,0xd7,0x33,0x2e,0x2c,
+ 0x94,0xb8,0xa8,0x9a,0x3a,0xcc,0x6a,0x24,0x8d,0x19,0x13,0xee,0xb9,0xb0,0x48,
+ 0x61
+};
+
+/* helper function */
+static BIGNUM *bn_load_new(const unsigned char *data, int sz)
+{
+ BIGNUM *ret = BN_new();
+ if (ret != NULL)
+ BN_bin2bn(data, sz, ret);
+ return ret;
+}
+
+/* Check that small rsa exponents are allowed in non FIPS mode */
+static int test_check_public_exponent(void)
+{
+ int ret = 0;
+ BIGNUM *e = NULL;
+
+ ret = TEST_ptr(e = BN_new())
+ /* e is too small will fail */
+ && TEST_true(BN_set_word(e, 1))
+ && TEST_false(ossl_rsa_check_public_exponent(e))
+ /* e is even will fail */
+ && TEST_true(BN_set_word(e, 65536))
+ && TEST_false(ossl_rsa_check_public_exponent(e))
+ /* e is ok */
+ && TEST_true(BN_set_word(e, 3))
+ && TEST_true(ossl_rsa_check_public_exponent(e))
+ && TEST_true(BN_set_word(e, 17))
+ && TEST_true(ossl_rsa_check_public_exponent(e))
+ && TEST_true(BN_set_word(e, 65537))
+ && TEST_true(ossl_rsa_check_public_exponent(e))
+ /* e = 2^256 + 1 is ok */
+ && TEST_true(BN_lshift(e, BN_value_one(), 256))
+ && TEST_true(BN_add(e, e, BN_value_one()))
+ && TEST_true(ossl_rsa_check_public_exponent(e));
+ BN_free(e);
+ return ret;
+}
+
+static int test_check_prime_factor_range(void)
+{
+ int ret = 0;
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL;
+ BIGNUM *bn_p1 = NULL, *bn_p2 = NULL, *bn_p3 = NULL, *bn_p4 = NULL;
+ /* Some range checks that are larger than 32 bits */
+ static const unsigned char p1[] = { 0x0B, 0x50, 0x4F, 0x33, 0x3F };
+ static const unsigned char p2[] = { 0x10, 0x00, 0x00, 0x00, 0x00 };
+ static const unsigned char p3[] = { 0x0B, 0x50, 0x4F, 0x33, 0x40 };
+ static const unsigned char p4[] = { 0x0F, 0xFF, 0xFF, 0xFF, 0xFF };
+
+ /* (√2)(2^(nbits/2 - 1) <= p <= 2^(nbits/2) - 1
+ * For 8 bits: 0xB.504F <= p <= 0xF
+ * for 72 bits: 0xB504F333F. <= p <= 0xF_FFFF_FFFF
+ */
+ ret = TEST_ptr(p = BN_new())
+ && TEST_ptr(bn_p1 = bn_load_new(p1, sizeof(p1)))
+ && TEST_ptr(bn_p2 = bn_load_new(p2, sizeof(p2)))
+ && TEST_ptr(bn_p3 = bn_load_new(p3, sizeof(p3)))
+ && TEST_ptr(bn_p4 = bn_load_new(p4, sizeof(p4)))
+ && TEST_ptr(ctx = BN_CTX_new())
+ && TEST_true(BN_set_word(p, 0xA))
+ && TEST_false(ossl_rsa_check_prime_factor_range(p, 8, ctx))
+ && TEST_true(BN_set_word(p, 0x10))
+ && TEST_false(ossl_rsa_check_prime_factor_range(p, 8, ctx))
+ && TEST_true(BN_set_word(p, 0xB))
+ && TEST_false(ossl_rsa_check_prime_factor_range(p, 8, ctx))
+ && TEST_true(BN_set_word(p, 0xC))
+ && TEST_true(ossl_rsa_check_prime_factor_range(p, 8, ctx))
+ && TEST_true(BN_set_word(p, 0xF))
+ && TEST_true(ossl_rsa_check_prime_factor_range(p, 8, ctx))
+ && TEST_false(ossl_rsa_check_prime_factor_range(bn_p1, 72, ctx))
+ && TEST_false(ossl_rsa_check_prime_factor_range(bn_p2, 72, ctx))
+ && TEST_true(ossl_rsa_check_prime_factor_range(bn_p3, 72, ctx))
+ && TEST_true(ossl_rsa_check_prime_factor_range(bn_p4, 72, ctx));
+
+ BN_free(bn_p4);
+ BN_free(bn_p3);
+ BN_free(bn_p2);
+ BN_free(bn_p1);
+ BN_free(p);
+ BN_CTX_free(ctx);
+ return ret;
+}
+
+static int test_check_prime_factor(void)
+{
+ int ret = 0;
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL, *e = NULL;
+ BIGNUM *bn_p1 = NULL, *bn_p2 = NULL, *bn_p3 = NULL;
+
+ /* Some range checks that are larger than 32 bits */
+ static const unsigned char p1[] = { 0x0B, 0x50, 0x4f, 0x33, 0x73 };
+ static const unsigned char p2[] = { 0x0B, 0x50, 0x4f, 0x33, 0x75 };
+ static const unsigned char p3[] = { 0x0F, 0x50, 0x00, 0x03, 0x75 };
+
+ ret = TEST_ptr(p = BN_new())
+ && TEST_ptr(bn_p1 = bn_load_new(p1, sizeof(p1)))
+ && TEST_ptr(bn_p2 = bn_load_new(p2, sizeof(p2)))
+ && TEST_ptr(bn_p3 = bn_load_new(p3, sizeof(p3)))
+ && TEST_ptr(e = BN_new())
+ && TEST_ptr(ctx = BN_CTX_new())
+ /* Fails the prime test */
+ && TEST_true(BN_set_word(e, 0x1))
+ && TEST_false(ossl_rsa_check_prime_factor(bn_p1, e, 72, ctx))
+ /* p is prime and in range and gcd(p-1, e) = 1 */
+ && TEST_true(ossl_rsa_check_prime_factor(bn_p2, e, 72, ctx))
+ /* gcd(p-1,e) = 1 test fails */
+ && TEST_true(BN_set_word(e, 0x2))
+ && TEST_false(ossl_rsa_check_prime_factor(p, e, 72, ctx))
+ /* p fails the range check */
+ && TEST_true(BN_set_word(e, 0x1))
+ && TEST_false(ossl_rsa_check_prime_factor(bn_p3, e, 72, ctx));
+
+ BN_free(bn_p3);
+ BN_free(bn_p2);
+ BN_free(bn_p1);
+ BN_free(e);
+ BN_free(p);
+ BN_CTX_free(ctx);
+ return ret;
+}
+
+/* This test uses legacy functions because they can take invalid numbers */
+static int test_check_private_exponent(void)
+{
+ int ret = 0;
+ RSA *key = NULL;
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL, *q = NULL, *e = NULL, *d = NULL, *n = NULL;
+
+ ret = TEST_ptr(key = RSA_new())
+ && TEST_ptr(ctx = BN_CTX_new())
+ && TEST_ptr(p = BN_new())
+ && TEST_ptr(q = BN_new())
+ /* lcm(15-1,17-1) = 14*16 / 2 = 112 */
+ && TEST_true(BN_set_word(p, 15))
+ && TEST_true(BN_set_word(q, 17))
+ && TEST_true(RSA_set0_factors(key, p, q));
+ if (!ret) {
+ BN_free(p);
+ BN_free(q);
+ goto end;
+ }
+
+ ret = TEST_ptr(e = BN_new())
+ && TEST_ptr(d = BN_new())
+ && TEST_ptr(n = BN_new())
+ && TEST_true(BN_set_word(e, 5))
+ && TEST_true(BN_set_word(d, 157))
+ && TEST_true(BN_set_word(n, 15*17))
+ && TEST_true(RSA_set0_key(key, n, e, d));
+ if (!ret) {
+ BN_free(e);
+ BN_free(d);
+ BN_free(n);
+ goto end;
+ }
+ /* fails since d >= lcm(p-1, q-1) */
+ ret = TEST_false(ossl_rsa_check_private_exponent(key, 8, ctx))
+ && TEST_true(BN_set_word(d, 45))
+ /* d is correct size and 1 = e.d mod lcm(p-1, q-1) */
+ && TEST_true(ossl_rsa_check_private_exponent(key, 8, ctx))
+ /* d is too small compared to nbits */
+ && TEST_false(ossl_rsa_check_private_exponent(key, 16, ctx))
+ /* d is too small compared to nbits */
+ && TEST_true(BN_set_word(d, 16))
+ && TEST_false(ossl_rsa_check_private_exponent(key, 8, ctx))
+ /* fail if 1 != e.d mod lcm(p-1, q-1) */
+ && TEST_true(BN_set_word(d, 46))
+ && TEST_false(ossl_rsa_check_private_exponent(key, 8, ctx));
+end:
+ RSA_free(key);
+ BN_CTX_free(ctx);
+ return ret;
+}
+
+static int test_check_crt_components(void)
+{
+ const int P = 15;
+ const int Q = 17;
+ const int E = 5;
+ const int N = P*Q;
+ const int DP = 3;
+ const int DQ = 13;
+ const int QINV = 8;
+
+ int ret = 0;
+ RSA *key = NULL;
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL, *q = NULL, *e = NULL;
+
+ ret = TEST_ptr(key = RSA_new())
+ && TEST_ptr(ctx = BN_CTX_new())
+ && TEST_ptr(p = BN_new())
+ && TEST_ptr(q = BN_new())
+ && TEST_ptr(e = BN_new())
+ && TEST_true(BN_set_word(p, P))
+ && TEST_true(BN_set_word(q, Q))
+ && TEST_true(BN_set_word(e, E))
+ && TEST_true(RSA_set0_factors(key, p, q));
+ if (!ret) {
+ BN_free(p);
+ BN_free(q);
+ goto end;
+ }
+ ret = TEST_true(ossl_rsa_sp800_56b_derive_params_from_pq(key, 8, e, ctx))
+ && TEST_BN_eq_word(key->n, N)
+ && TEST_BN_eq_word(key->dmp1, DP)
+ && TEST_BN_eq_word(key->dmq1, DQ)
+ && TEST_BN_eq_word(key->iqmp, QINV)
+ && TEST_true(ossl_rsa_check_crt_components(key, ctx))
+ /* (a) 1 < dP < (p – 1). */
+ && TEST_true(BN_set_word(key->dmp1, 1))
+ && TEST_false(ossl_rsa_check_crt_components(key, ctx))
+ && TEST_true(BN_set_word(key->dmp1, P-1))
+ && TEST_false(ossl_rsa_check_crt_components(key, ctx))
+ && TEST_true(BN_set_word(key->dmp1, DP))
+ /* (b) 1 < dQ < (q - 1). */
+ && TEST_true(BN_set_word(key->dmq1, 1))
+ && TEST_false(ossl_rsa_check_crt_components(key, ctx))
+ && TEST_true(BN_set_word(key->dmq1, Q-1))
+ && TEST_false(ossl_rsa_check_crt_components(key, ctx))
+ && TEST_true(BN_set_word(key->dmq1, DQ))
+ /* (c) 1 < qInv < p */
+ && TEST_true(BN_set_word(key->iqmp, 1))
+ && TEST_false(ossl_rsa_check_crt_components(key, ctx))
+ && TEST_true(BN_set_word(key->iqmp, P))
+ && TEST_false(ossl_rsa_check_crt_components(key, ctx))
+ && TEST_true(BN_set_word(key->iqmp, QINV))
+ /* (d) 1 = (dP . e) mod (p - 1)*/
+ && TEST_true(BN_set_word(key->dmp1, DP+1))
+ && TEST_false(ossl_rsa_check_crt_components(key, ctx))
+ && TEST_true(BN_set_word(key->dmp1, DP))
+ /* (e) 1 = (dQ . e) mod (q - 1) */
+ && TEST_true(BN_set_word(key->dmq1, DQ-1))
+ && TEST_false(ossl_rsa_check_crt_components(key, ctx))
+ && TEST_true(BN_set_word(key->dmq1, DQ))
+ /* (f) 1 = (qInv . q) mod p */
+ && TEST_true(BN_set_word(key->iqmp, QINV+1))
+ && TEST_false(ossl_rsa_check_crt_components(key, ctx))
+ && TEST_true(BN_set_word(key->iqmp, QINV))
+ /* check defaults are still valid */
+ && TEST_true(ossl_rsa_check_crt_components(key, ctx));
+end:
+ BN_free(e);
+ RSA_free(key);
+ BN_CTX_free(ctx);
+ return ret;
+}
+
+static int test_pq_diff(void)
+{
+ int ret = 0;
+ BIGNUM *tmp = NULL, *p = NULL, *q = NULL;
+
+ ret = TEST_ptr(tmp = BN_new())
+ && TEST_ptr(p = BN_new())
+ && TEST_ptr(q = BN_new())
+ /* |1-(2+1)| > 2^1 */
+ && TEST_true(BN_set_word(p, 1))
+ && TEST_true(BN_set_word(q, 1+2))
+ && TEST_false(ossl_rsa_check_pminusq_diff(tmp, p, q, 202))
+ /* Check |p - q| > 2^(nbits/2 - 100) */
+ && TEST_true(BN_set_word(q, 1+3))
+ && TEST_true(ossl_rsa_check_pminusq_diff(tmp, p, q, 202))
+ && TEST_true(BN_set_word(p, 1+3))
+ && TEST_true(BN_set_word(q, 1))
+ && TEST_true(ossl_rsa_check_pminusq_diff(tmp, p, q, 202));
+ BN_free(p);
+ BN_free(q);
+ BN_free(tmp);
+ return ret;
+}
+
+static int test_invalid_keypair(void)
+{
+ int ret = 0;
+ RSA *key = NULL;
+ BN_CTX *ctx = NULL;
+ BIGNUM *p = NULL, *q = NULL, *n = NULL, *e = NULL, *d = NULL;
+
+ ret = TEST_ptr(key = RSA_new())
+ && TEST_ptr(ctx = BN_CTX_new())
+ /* NULL parameters */
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, -1, 2048))
+ /* load key */
+ && TEST_ptr(p = bn_load_new(cav_p, sizeof(cav_p)))
+ && TEST_ptr(q = bn_load_new(cav_q, sizeof(cav_q)))
+ && TEST_true(RSA_set0_factors(key, p, q));
+ if (!ret) {
+ BN_free(p);
+ BN_free(q);
+ goto end;
+ }
+
+ ret = TEST_ptr(e = bn_load_new(cav_e, sizeof(cav_e)))
+ && TEST_ptr(n = bn_load_new(cav_n, sizeof(cav_n)))
+ && TEST_ptr(d = bn_load_new(cav_d, sizeof(cav_d)))
+ && TEST_true(RSA_set0_key(key, n, e, d));
+ if (!ret) {
+ BN_free(e);
+ BN_free(n);
+ BN_free(d);
+ goto end;
+ }
+ /* bad strength/key size */
+ ret = TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, 100, 2048))
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, 112, 1024))
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, 128, 2048))
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, 140, 3072))
+ /* mismatching exponent */
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, BN_value_one(),
+ -1, 2048))
+ /* bad exponent */
+ && TEST_true(BN_add_word(e, 1))
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, -1, 2048))
+ && TEST_true(BN_sub_word(e, 1))
+
+ /* mismatch between bits and modulus */
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, -1, 3072))
+ && TEST_true(ossl_rsa_sp800_56b_check_keypair(key, e, 112, 2048))
+ /* check n == pq failure */
+ && TEST_true(BN_add_word(n, 1))
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, -1, 2048))
+ && TEST_true(BN_sub_word(n, 1))
+ /* check p */
+ && TEST_true(BN_sub_word(p, 2))
+ && TEST_true(BN_mul(n, p, q, ctx))
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, -1, 2048))
+ && TEST_true(BN_add_word(p, 2))
+ && TEST_true(BN_mul(n, p, q, ctx))
+ /* check q */
+ && TEST_true(BN_sub_word(q, 2))
+ && TEST_true(BN_mul(n, p, q, ctx))
+ && TEST_false(ossl_rsa_sp800_56b_check_keypair(key, NULL, -1, 2048))
+ && TEST_true(BN_add_word(q, 2))
+ && TEST_true(BN_mul(n, p, q, ctx));
+end:
+ RSA_free(key);
+ BN_CTX_free(ctx);
+ return ret;
+}
+
+static int keygen_size[] =
+{
+ 2048, 3072
+};
+
+static int test_sp80056b_keygen(int id)
+{
+ RSA *key = NULL;
+ int ret;
+ int sz = keygen_size[id];
+
+ ret = TEST_ptr(key = RSA_new())
+ && TEST_true(ossl_rsa_sp800_56b_generate_key(key, sz, NULL, NULL))
+ && TEST_true(ossl_rsa_sp800_56b_check_public(key))
+ && TEST_true(ossl_rsa_sp800_56b_check_private(key))
+ && TEST_true(ossl_rsa_sp800_56b_check_keypair(key, NULL, -1, sz));
+
+ RSA_free(key);
+ return ret;
+}
+
+static int test_check_private_key(void)
+{
+ int ret = 0;
+ BIGNUM *n = NULL, *d = NULL, *e = NULL;
+ RSA *key = NULL;
+
+ ret = TEST_ptr(key = RSA_new())
+ /* check NULL pointers fail */
+ && TEST_false(ossl_rsa_sp800_56b_check_private(key))
+ /* load private key */
+ && TEST_ptr(n = bn_load_new(cav_n, sizeof(cav_n)))
+ && TEST_ptr(d = bn_load_new(cav_d, sizeof(cav_d)))
+ && TEST_ptr(e = bn_load_new(cav_e, sizeof(cav_e)))
+ && TEST_true(RSA_set0_key(key, n, e, d));
+ if (!ret) {
+ BN_free(n);
+ BN_free(e);
+ BN_free(d);
+ goto end;
+ }
+ /* check d is in range */
+ ret = TEST_true(ossl_rsa_sp800_56b_check_private(key))
+ /* check d is too low */
+ && TEST_true(BN_set_word(d, 0))
+ && TEST_false(ossl_rsa_sp800_56b_check_private(key))
+ /* check d is too high */
+ && TEST_ptr(BN_copy(d, n))
+ && TEST_false(ossl_rsa_sp800_56b_check_private(key));
+end:
+ RSA_free(key);
+ return ret;
+}
+
+static int test_check_public_key(void)
+{
+ int ret = 0;
+ BIGNUM *n = NULL, *e = NULL;
+ RSA *key = NULL;
+
+ ret = TEST_ptr(key = RSA_new())
+ /* check NULL pointers fail */
+ && TEST_false(ossl_rsa_sp800_56b_check_public(key))
+ /* load public key */
+ && TEST_ptr(e = bn_load_new(cav_e, sizeof(cav_e)))
+ && TEST_ptr(n = bn_load_new(cav_n, sizeof(cav_n)))
+ && TEST_true(RSA_set0_key(key, n, e, NULL));
+ if (!ret) {
+ BN_free(e);
+ BN_free(n);
+ goto end;
+ }
+ /* check public key is valid */
+ ret = TEST_true(ossl_rsa_sp800_56b_check_public(key))
+ /* check fail if n is even */
+ && TEST_true(BN_add_word(n, 1))
+ && TEST_false(ossl_rsa_sp800_56b_check_public(key))
+ && TEST_true(BN_sub_word(n, 1))
+ /* check fail if n is wrong number of bits */
+ && TEST_true(BN_lshift1(n, n))
+ && TEST_false(ossl_rsa_sp800_56b_check_public(key))
+ && TEST_true(BN_rshift1(n, n))
+ /* test odd exponent fails */
+ && TEST_true(BN_add_word(e, 1))
+ && TEST_false(ossl_rsa_sp800_56b_check_public(key))
+ && TEST_true(BN_sub_word(e, 1))
+ /* modulus fails composite check */
+ && TEST_true(BN_add_word(n, 2))
+ && TEST_false(ossl_rsa_sp800_56b_check_public(key));
+end:
+ RSA_free(key);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_check_public_exponent);
+ ADD_TEST(test_check_prime_factor_range);
+ ADD_TEST(test_check_prime_factor);
+ ADD_TEST(test_check_private_exponent);
+ ADD_TEST(test_check_crt_components);
+ ADD_TEST(test_check_private_key);
+ ADD_TEST(test_check_public_key);
+ ADD_TEST(test_invalid_keypair);
+ ADD_TEST(test_pq_diff);
+ ADD_ALL_TESTS(test_sp80056b_keygen, (int)OSSL_NELEM(keygen_size));
+ return 1;
+}
diff --git a/test/rsa_test.c b/test/rsa_test.c
new file mode 100644
index 000000000000..18345b431a7c
--- /dev/null
+++ b/test/rsa_test.c
@@ -0,0 +1,516 @@
+/*
+ * Copyright 1999-2023 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
+ */
+
+/* test vectors from p1ovect1.txt */
+
+/*
+ * RSA low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "internal/nelem.h"
+
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include <openssl/bn.h>
+
+#include "testutil.h"
+
+#include <openssl/rsa.h>
+
+#define SetKey \
+ RSA_set0_key(key, \
+ BN_bin2bn(n, sizeof(n)-1, NULL), \
+ BN_bin2bn(e, sizeof(e)-1, NULL), \
+ BN_bin2bn(d, sizeof(d)-1, NULL)); \
+ RSA_set0_factors(key, \
+ BN_bin2bn(p, sizeof(p)-1, NULL), \
+ BN_bin2bn(q, sizeof(q)-1, NULL)); \
+ RSA_set0_crt_params(key, \
+ BN_bin2bn(dmp1, sizeof(dmp1)-1, NULL), \
+ BN_bin2bn(dmq1, sizeof(dmq1)-1, NULL), \
+ BN_bin2bn(iqmp, sizeof(iqmp)-1, NULL)); \
+ if (c != NULL) \
+ memcpy(c, ctext_ex, sizeof(ctext_ex) - 1); \
+ return sizeof(ctext_ex) - 1;
+
+static int key1(RSA *key, unsigned char *c)
+{
+ static unsigned char n[] =
+ "\x00\xAA\x36\xAB\xCE\x88\xAC\xFD\xFF\x55\x52\x3C\x7F\xC4\x52\x3F"
+ "\x90\xEF\xA0\x0D\xF3\x77\x4A\x25\x9F\x2E\x62\xB4\xC5\xD9\x9C\xB5"
+ "\xAD\xB3\x00\xA0\x28\x5E\x53\x01\x93\x0E\x0C\x70\xFB\x68\x76\x93"
+ "\x9C\xE6\x16\xCE\x62\x4A\x11\xE0\x08\x6D\x34\x1E\xBC\xAC\xA0\xA1"
+ "\xF5";
+
+ static unsigned char e[] = "\x11";
+
+ static unsigned char d[] =
+ "\x0A\x03\x37\x48\x62\x64\x87\x69\x5F\x5F\x30\xBC\x38\xB9\x8B\x44"
+ "\xC2\xCD\x2D\xFF\x43\x40\x98\xCD\x20\xD8\xA1\x38\xD0\x90\xBF\x64"
+ "\x79\x7C\x3F\xA7\xA2\xCD\xCB\x3C\xD1\xE0\xBD\xBA\x26\x54\xB4\xF9"
+ "\xDF\x8E\x8A\xE5\x9D\x73\x3D\x9F\x33\xB3\x01\x62\x4A\xFD\x1D\x51";
+
+ static unsigned char p[] =
+ "\x00\xD8\x40\xB4\x16\x66\xB4\x2E\x92\xEA\x0D\xA3\xB4\x32\x04\xB5"
+ "\xCF\xCE\x33\x52\x52\x4D\x04\x16\xA5\xA4\x41\xE7\x00\xAF\x46\x12"
+ "\x0D";
+
+ static unsigned char q[] =
+ "\x00\xC9\x7F\xB1\xF0\x27\xF4\x53\xF6\x34\x12\x33\xEA\xAA\xD1\xD9"
+ "\x35\x3F\x6C\x42\xD0\x88\x66\xB1\xD0\x5A\x0F\x20\x35\x02\x8B\x9D"
+ "\x89";
+
+ static unsigned char dmp1[] =
+ "\x59\x0B\x95\x72\xA2\xC2\xA9\xC4\x06\x05\x9D\xC2\xAB\x2F\x1D\xAF"
+ "\xEB\x7E\x8B\x4F\x10\xA7\x54\x9E\x8E\xED\xF5\xB4\xFC\xE0\x9E\x05";
+
+ static unsigned char dmq1[] =
+ "\x00\x8E\x3C\x05\x21\xFE\x15\xE0\xEA\x06\xA3\x6F\xF0\xF1\x0C\x99"
+ "\x52\xC3\x5B\x7A\x75\x14\xFD\x32\x38\xB8\x0A\xAD\x52\x98\x62\x8D"
+ "\x51";
+
+ static unsigned char iqmp[] =
+ "\x36\x3F\xF7\x18\x9D\xA8\xE9\x0B\x1D\x34\x1F\x71\xD0\x9B\x76\xA8"
+ "\xA9\x43\xE1\x1D\x10\xB2\x4D\x24\x9F\x2D\xEA\xFE\xF8\x0C\x18\x26";
+
+ static unsigned char ctext_ex[] =
+ "\x1b\x8f\x05\xf9\xca\x1a\x79\x52\x6e\x53\xf3\xcc\x51\x4f\xdb\x89"
+ "\x2b\xfb\x91\x93\x23\x1e\x78\xb9\x92\xe6\x8d\x50\xa4\x80\xcb\x52"
+ "\x33\x89\x5c\x74\x95\x8d\x5d\x02\xab\x8c\x0f\xd0\x40\xeb\x58\x44"
+ "\xb0\x05\xc3\x9e\xd8\x27\x4a\x9d\xbf\xa8\x06\x71\x40\x94\x39\xd2";
+
+ SetKey;
+}
+
+static int key2(RSA *key, unsigned char *c)
+{
+ static unsigned char n[] =
+ "\x00\xA3\x07\x9A\x90\xDF\x0D\xFD\x72\xAC\x09\x0C\xCC\x2A\x78\xB8"
+ "\x74\x13\x13\x3E\x40\x75\x9C\x98\xFA\xF8\x20\x4F\x35\x8A\x0B\x26"
+ "\x3C\x67\x70\xE7\x83\xA9\x3B\x69\x71\xB7\x37\x79\xD2\x71\x7B\xE8"
+ "\x34\x77\xCF";
+
+ static unsigned char e[] = "\x3";
+
+ static unsigned char d[] =
+ "\x6C\xAF\xBC\x60\x94\xB3\xFE\x4C\x72\xB0\xB3\x32\xC6\xFB\x25\xA2"
+ "\xB7\x62\x29\x80\x4E\x68\x65\xFC\xA4\x5A\x74\xDF\x0F\x8F\xB8\x41"
+ "\x3B\x52\xC0\xD0\xE5\x3D\x9B\x59\x0F\xF1\x9B\xE7\x9F\x49\xDD\x21"
+ "\xE5\xEB";
+
+ static unsigned char p[] =
+ "\x00\xCF\x20\x35\x02\x8B\x9D\x86\x98\x40\xB4\x16\x66\xB4\x2E\x92"
+ "\xEA\x0D\xA3\xB4\x32\x04\xB5\xCF\xCE\x91";
+
+ static unsigned char q[] =
+ "\x00\xC9\x7F\xB1\xF0\x27\xF4\x53\xF6\x34\x12\x33\xEA\xAA\xD1\xD9"
+ "\x35\x3F\x6C\x42\xD0\x88\x66\xB1\xD0\x5F";
+
+ static unsigned char dmp1[] =
+ "\x00\x8A\x15\x78\xAC\x5D\x13\xAF\x10\x2B\x22\xB9\x99\xCD\x74\x61"
+ "\xF1\x5E\x6D\x22\xCC\x03\x23\xDF\xDF\x0B";
+
+ static unsigned char dmq1[] =
+ "\x00\x86\x55\x21\x4A\xC5\x4D\x8D\x4E\xCD\x61\x77\xF1\xC7\x36\x90"
+ "\xCE\x2A\x48\x2C\x8B\x05\x99\xCB\xE0\x3F";
+
+ static unsigned char iqmp[] =
+ "\x00\x83\xEF\xEF\xB8\xA9\xA4\x0D\x1D\xB6\xED\x98\xAD\x84\xED\x13"
+ "\x35\xDC\xC1\x08\xF3\x22\xD0\x57\xCF\x8D";
+
+ static unsigned char ctext_ex[] =
+ "\x14\xbd\xdd\x28\xc9\x83\x35\x19\x23\x80\xe8\xe5\x49\xb1\x58\x2a"
+ "\x8b\x40\xb4\x48\x6d\x03\xa6\xa5\x31\x1f\x1f\xd5\xf0\xa1\x80\xe4"
+ "\x17\x53\x03\x29\xa9\x34\x90\x74\xb1\x52\x13\x54\x29\x08\x24\x52"
+ "\x62\x51";
+
+ SetKey;
+}
+
+static int key3(RSA *key, unsigned char *c)
+{
+ static unsigned char n[] =
+ "\x00\xBB\xF8\x2F\x09\x06\x82\xCE\x9C\x23\x38\xAC\x2B\x9D\xA8\x71"
+ "\xF7\x36\x8D\x07\xEE\xD4\x10\x43\xA4\x40\xD6\xB6\xF0\x74\x54\xF5"
+ "\x1F\xB8\xDF\xBA\xAF\x03\x5C\x02\xAB\x61\xEA\x48\xCE\xEB\x6F\xCD"
+ "\x48\x76\xED\x52\x0D\x60\xE1\xEC\x46\x19\x71\x9D\x8A\x5B\x8B\x80"
+ "\x7F\xAF\xB8\xE0\xA3\xDF\xC7\x37\x72\x3E\xE6\xB4\xB7\xD9\x3A\x25"
+ "\x84\xEE\x6A\x64\x9D\x06\x09\x53\x74\x88\x34\xB2\x45\x45\x98\x39"
+ "\x4E\xE0\xAA\xB1\x2D\x7B\x61\xA5\x1F\x52\x7A\x9A\x41\xF6\xC1\x68"
+ "\x7F\xE2\x53\x72\x98\xCA\x2A\x8F\x59\x46\xF8\xE5\xFD\x09\x1D\xBD"
+ "\xCB";
+
+ static unsigned char e[] = "\x11";
+
+ static unsigned char d[] =
+ "\x00\xA5\xDA\xFC\x53\x41\xFA\xF2\x89\xC4\xB9\x88\xDB\x30\xC1\xCD"
+ "\xF8\x3F\x31\x25\x1E\x06\x68\xB4\x27\x84\x81\x38\x01\x57\x96\x41"
+ "\xB2\x94\x10\xB3\xC7\x99\x8D\x6B\xC4\x65\x74\x5E\x5C\x39\x26\x69"
+ "\xD6\x87\x0D\xA2\xC0\x82\xA9\x39\xE3\x7F\xDC\xB8\x2E\xC9\x3E\xDA"
+ "\xC9\x7F\xF3\xAD\x59\x50\xAC\xCF\xBC\x11\x1C\x76\xF1\xA9\x52\x94"
+ "\x44\xE5\x6A\xAF\x68\xC5\x6C\x09\x2C\xD3\x8D\xC3\xBE\xF5\xD2\x0A"
+ "\x93\x99\x26\xED\x4F\x74\xA1\x3E\xDD\xFB\xE1\xA1\xCE\xCC\x48\x94"
+ "\xAF\x94\x28\xC2\xB7\xB8\x88\x3F\xE4\x46\x3A\x4B\xC8\x5B\x1C\xB3"
+ "\xC1";
+
+ static unsigned char p[] =
+ "\x00\xEE\xCF\xAE\x81\xB1\xB9\xB3\xC9\x08\x81\x0B\x10\xA1\xB5\x60"
+ "\x01\x99\xEB\x9F\x44\xAE\xF4\xFD\xA4\x93\xB8\x1A\x9E\x3D\x84\xF6"
+ "\x32\x12\x4E\xF0\x23\x6E\x5D\x1E\x3B\x7E\x28\xFA\xE7\xAA\x04\x0A"
+ "\x2D\x5B\x25\x21\x76\x45\x9D\x1F\x39\x75\x41\xBA\x2A\x58\xFB\x65"
+ "\x99";
+
+ static unsigned char q[] =
+ "\x00\xC9\x7F\xB1\xF0\x27\xF4\x53\xF6\x34\x12\x33\xEA\xAA\xD1\xD9"
+ "\x35\x3F\x6C\x42\xD0\x88\x66\xB1\xD0\x5A\x0F\x20\x35\x02\x8B\x9D"
+ "\x86\x98\x40\xB4\x16\x66\xB4\x2E\x92\xEA\x0D\xA3\xB4\x32\x04\xB5"
+ "\xCF\xCE\x33\x52\x52\x4D\x04\x16\xA5\xA4\x41\xE7\x00\xAF\x46\x15"
+ "\x03";
+
+ static unsigned char dmp1[] =
+ "\x54\x49\x4C\xA6\x3E\xBA\x03\x37\xE4\xE2\x40\x23\xFC\xD6\x9A\x5A"
+ "\xEB\x07\xDD\xDC\x01\x83\xA4\xD0\xAC\x9B\x54\xB0\x51\xF2\xB1\x3E"
+ "\xD9\x49\x09\x75\xEA\xB7\x74\x14\xFF\x59\xC1\xF7\x69\x2E\x9A\x2E"
+ "\x20\x2B\x38\xFC\x91\x0A\x47\x41\x74\xAD\xC9\x3C\x1F\x67\xC9\x81";
+
+ static unsigned char dmq1[] =
+ "\x47\x1E\x02\x90\xFF\x0A\xF0\x75\x03\x51\xB7\xF8\x78\x86\x4C\xA9"
+ "\x61\xAD\xBD\x3A\x8A\x7E\x99\x1C\x5C\x05\x56\xA9\x4C\x31\x46\xA7"
+ "\xF9\x80\x3F\x8F\x6F\x8A\xE3\x42\xE9\x31\xFD\x8A\xE4\x7A\x22\x0D"
+ "\x1B\x99\xA4\x95\x84\x98\x07\xFE\x39\xF9\x24\x5A\x98\x36\xDA\x3D";
+
+ static unsigned char iqmp[] =
+ "\x00\xB0\x6C\x4F\xDA\xBB\x63\x01\x19\x8D\x26\x5B\xDB\xAE\x94\x23"
+ "\xB3\x80\xF2\x71\xF7\x34\x53\x88\x50\x93\x07\x7F\xCD\x39\xE2\x11"
+ "\x9F\xC9\x86\x32\x15\x4F\x58\x83\xB1\x67\xA9\x67\xBF\x40\x2B\x4E"
+ "\x9E\x2E\x0F\x96\x56\xE6\x98\xEA\x36\x66\xED\xFB\x25\x79\x80\x39"
+ "\xF7";
+
+ static unsigned char ctext_ex[] =
+ "\xb8\x24\x6b\x56\xa6\xed\x58\x81\xae\xb5\x85\xd9\xa2\x5b\x2a\xd7"
+ "\x90\xc4\x17\xe0\x80\x68\x1b\xf1\xac\x2b\xc3\xde\xb6\x9d\x8b\xce"
+ "\xf0\xc4\x36\x6f\xec\x40\x0a\xf0\x52\xa7\x2e\x9b\x0e\xff\xb5\xb3"
+ "\xf2\xf1\x92\xdb\xea\xca\x03\xc1\x27\x40\x05\x71\x13\xbf\x1f\x06"
+ "\x69\xac\x22\xe9\xf3\xa7\x85\x2e\x3c\x15\xd9\x13\xca\xb0\xb8\x86"
+ "\x3a\x95\xc9\x92\x94\xce\x86\x74\x21\x49\x54\x61\x03\x46\xf4\xd4"
+ "\x74\xb2\x6f\x7c\x48\xb4\x2e\xe6\x8e\x1f\x57\x2a\x1f\xc4\x02\x6a"
+ "\xc4\x56\xb4\xf5\x9f\x7b\x62\x1e\xa1\xb9\xd8\x8f\x64\x20\x2f\xb1";
+
+ SetKey;
+}
+
+static int rsa_setkey(RSA** key, unsigned char *ctext, int idx)
+{
+ int clen = 0;
+
+ *key = RSA_new();
+ if (*key != NULL)
+ switch (idx) {
+ case 0:
+ clen = key1(*key, ctext);
+ break;
+ case 1:
+ clen = key2(*key, ctext);
+ break;
+ case 2:
+ clen = key3(*key, ctext);
+ break;
+ }
+ return clen;
+}
+
+static int test_rsa_simple(int idx, int en_pad_type, int de_pad_type,
+ int success, unsigned char *ctext_ex, int *clen,
+ RSA **retkey)
+{
+ int ret = 0;
+ RSA *key;
+ unsigned char ptext[256];
+ unsigned char ctext[256];
+ static unsigned char ptext_ex[] = "\x54\x85\x9b\x34\x2c\x49\xea\x2a";
+ int plen;
+ int clentmp = 0;
+ int num;
+
+ plen = sizeof(ptext_ex) - 1;
+ clentmp = rsa_setkey(&key, ctext_ex, idx);
+ if (clen != NULL)
+ *clen = clentmp;
+
+ num = RSA_public_encrypt(plen, ptext_ex, ctext, key, en_pad_type);
+ if (!TEST_int_eq(num, clentmp))
+ goto err;
+
+ num = RSA_private_decrypt(num, ctext, ptext, key, de_pad_type);
+ if (success) {
+ if (!TEST_int_gt(num, 0) || !TEST_mem_eq(ptext, num, ptext_ex, plen))
+ goto err;
+ } else {
+ if (!TEST_int_lt(num, 0))
+ goto err;
+ }
+
+ ret = 1;
+ if (retkey != NULL) {
+ *retkey = key;
+ key = NULL;
+ }
+err:
+ RSA_free(key);
+ return ret;
+}
+
+static int test_rsa_pkcs1(int idx)
+{
+ return test_rsa_simple(idx, RSA_PKCS1_PADDING, RSA_PKCS1_PADDING, 1, NULL,
+ NULL, NULL);
+}
+
+static int test_rsa_oaep(int idx)
+{
+ int ret = 0;
+ RSA *key = NULL;
+ unsigned char ptext[256];
+ static unsigned char ptext_ex[] = "\x54\x85\x9b\x34\x2c\x49\xea\x2a";
+ unsigned char ctext_ex[256];
+ int plen;
+ int clen = 0;
+ int num;
+ int n;
+
+ if (!test_rsa_simple(idx, RSA_PKCS1_OAEP_PADDING, RSA_PKCS1_OAEP_PADDING, 1,
+ ctext_ex, &clen, &key))
+ goto err;
+
+ plen = sizeof(ptext_ex) - 1;
+
+ /* Different ciphertexts. Try decrypting ctext_ex */
+ num = RSA_private_decrypt(clen, ctext_ex, ptext, key,
+ RSA_PKCS1_OAEP_PADDING);
+ if (num <= 0 || !TEST_mem_eq(ptext, num, ptext_ex, plen))
+ goto err;
+
+ /* Try decrypting corrupted ciphertexts. */
+ for (n = 0; n < clen; ++n) {
+ ctext_ex[n] ^= 1;
+ num = RSA_private_decrypt(clen, ctext_ex, ptext, key,
+ RSA_PKCS1_OAEP_PADDING);
+ if (!TEST_int_le(num, 0))
+ goto err;
+ ctext_ex[n] ^= 1;
+ }
+
+ /* Test truncated ciphertexts, as well as negative length. */
+ for (n = -1; n < clen; ++n) {
+ num = RSA_private_decrypt(n, ctext_ex, ptext, key,
+ RSA_PKCS1_OAEP_PADDING);
+ if (!TEST_int_le(num, 0))
+ goto err;
+ }
+
+ ret = 1;
+err:
+ RSA_free(key);
+ return ret;
+}
+
+static const struct {
+ int bits;
+ unsigned int r;
+} rsa_security_bits_cases[] = {
+ /* NIST SP 800-56B rev 2 (draft) Appendix D Table 5 */
+ { 2048, 112 },
+ { 3072, 128 },
+ { 4096, 152 },
+ { 6144, 176 },
+ { 8192, 200 },
+ /* NIST FIPS 140-2 IG 7.5 */
+ { 7680, 192 },
+ { 15360, 256 },
+ /* Older values */
+ { 256, 40 },
+ { 512, 56 },
+ { 1024, 80 },
+ /* Some other values */
+ { 8888, 208 },
+ { 2468, 120 },
+ { 13456, 248 },
+ /* Edge points */
+ { 15359, 256 },
+ { 15361, 264 },
+ { 7679, 192 },
+ { 7681, 200 },
+};
+
+static int test_rsa_security_bit(int n)
+{
+ static const unsigned char vals[8] = {
+ 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40
+ };
+ RSA *key = RSA_new();
+ const int bits = rsa_security_bits_cases[n].bits;
+ const int result = rsa_security_bits_cases[n].r;
+ const int bytes = (bits + 7) / 8;
+ int r = 0;
+ unsigned char num[2000];
+
+ if (!TEST_ptr(key) || !TEST_int_le(bytes, (int)sizeof(num)))
+ goto err;
+
+ /*
+ * It is necessary to set the RSA key in order to ask for the strength.
+ * A BN of an appropriate size is created, in general it won't have the
+ * properties necessary for RSA to function. This is okay here since
+ * the RSA key is never used.
+ */
+ memset(num, vals[bits % 8], bytes);
+
+ /*
+ * The 'e' parameter is set to the same value as 'n'. This saves having
+ * an extra BN to hold a sensible value for 'e'. This is safe since the
+ * RSA key is not used. The 'd' parameter can be NULL safely.
+ */
+ if (TEST_true(RSA_set0_key(key, BN_bin2bn(num, bytes, NULL),
+ BN_bin2bn(num, bytes, NULL), NULL))
+ && TEST_uint_eq(RSA_security_bits(key), result))
+ r = 1;
+err:
+ RSA_free(key);
+ return r;
+}
+
+static int test_EVP_rsa_legacy_key(void)
+{
+ int ret;
+ size_t buflen = 384;
+ size_t msglen = 64;
+ unsigned char sigbuf[384];
+ unsigned char msgbuf[64];
+ BIGNUM *p;
+ BIGNUM *q;
+ BIGNUM *n;
+ BIGNUM *d;
+ BIGNUM *e;
+ RSA *rsa;
+ const EVP_MD *md;
+ EVP_MD_CTX *ctx = NULL;
+ EVP_PKEY *pkey = NULL;
+
+ unsigned char n_data[] = {
+ 0x00, 0xc7, 0x28, 0x7a, 0x28, 0x91, 0x51, 0xa5, 0xe8, 0x3c, 0x45, 0xcf,
+ 0x1d, 0xa9, 0x69, 0x7a, 0x0d, 0xdb, 0xdd, 0x8f, 0xe2, 0xde, 0x85, 0xdd,
+ 0x85, 0x6d, 0x8f, 0x78, 0x20, 0xd6, 0xe, 0xe5, 0x06, 0xcb, 0x9c, 0xd6,
+ 0xd3, 0xca, 0xef, 0x1d, 0x80, 0xd3, 0x18, 0x23, 0x91, 0x5c, 0xe5, 0xc8,
+ 0x44, 0x37, 0x56, 0x1b, 0x68, 0x7f, 0x08, 0xa3, 0x1c, 0xf6, 0xe8, 0x11,
+ 0x38, 0x0f, 0x2e, 0xad, 0xb1, 0x89, 0x8b, 0x08, 0xe8, 0x35, 0xaf, 0x3b,
+ 0xfe, 0x37, 0x8d, 0x21, 0xd5, 0x3f, 0x1f, 0x4b, 0x01, 0x30, 0xd8, 0xd0,
+ 0x24, 0xf7, 0xab, 0x57, 0xad, 0xac, 0xbc, 0x53, 0x6d, 0x84, 0x8e, 0xa1,
+ 0xb2, 0x5b, 0x8e, 0xe7, 0xb3, 0xac, 0xfc, 0x60, 0x22, 0x10, 0x1e, 0x99,
+ 0xfa, 0xa0, 0x60, 0x00, 0x69, 0x5f, 0x8e, 0xca, 0x6d, 0x9c, 0xee, 0x5e,
+ 0x84, 0x4e, 0x53, 0x83, 0x42, 0x76, 0x4d, 0xb8, 0xc1, 0xeb, 0x4e, 0x3d,
+ 0xc3, 0xce, 0xac, 0x79, 0xbb, 0x29, 0x5d, 0x92, 0x33, 0x6e, 0xcf, 0x8f,
+ 0x5a, 0xf0, 0xb3, 0xb5, 0xdc, 0xd5, 0xa3, 0xaf, 0x40, 0x4b, 0x0f, 0x05,
+ 0xac, 0x46, 0x53, 0x2d, 0x5f, 0x20, 0x96, 0x42, 0xa8, 0x47, 0x61, 0x54,
+ 0x05, 0x2c, 0x8a, 0x26, 0x5d, 0x92, 0x1d, 0x01, 0x2a, 0x27, 0x8a, 0xfc,
+ 0x64, 0x24, 0x5c, 0x34, 0xde, 0x92, 0xc6, 0x82, 0xea, 0x4d, 0xe2, 0x52,
+ 0xe5, 0xad, 0x62, 0x00, 0xc6, 0xc8, 0xe9, 0x0c, 0x22, 0xf0, 0x9e, 0xbe,
+ 0xdc, 0x51, 0x58, 0xad, 0x3b, 0xba, 0x2e, 0x45, 0x65, 0xcc, 0x5b, 0x55,
+ 0x46, 0x67, 0x18, 0x4a, 0x80, 0x67, 0x5b, 0x84, 0x7f, 0x13, 0x37, 0x45,
+ 0xd8, 0x03, 0xc6, 0x22, 0xc3, 0x4a, 0x46, 0x6b, 0xde, 0x50, 0xbf, 0x16,
+ 0x0a, 0x23, 0x0b, 0xaa, 0x50, 0x54, 0xf6, 0x20, 0x83, 0x74, 0x33, 0x97,
+ 0x2e, 0xf2, 0x8e, 0x7e, 0x13 };
+
+ unsigned char e_data[] = { 0x01, 0x00, 0x01 };
+
+ unsigned char d_data[] = {
+ 0x09, 0x2d, 0xcb, 0xe7, 0x87, 0xbf, 0x10, 0x1a, 0xf2, 0x80, 0x33, 0x2a,
+ 0x06, 0x4f, 0x56, 0xb1, 0x41, 0xd3, 0x65, 0xd8, 0xca, 0x71, 0xb8, 0x02,
+ 0x78, 0xc8, 0xb6, 0x7c, 0x28, 0xf4, 0x6c, 0xe8, 0xd1, 0xc4, 0x92, 0x40,
+ 0x23, 0xa7, 0xbe, 0x9f, 0xdb, 0xda, 0xce, 0x74, 0xda, 0x27, 0xbb, 0x01,
+ 0xad, 0xdd, 0x39, 0x99, 0x28, 0xd5, 0xb0, 0x92, 0xda, 0xac, 0x5a, 0x72,
+ 0xcf, 0x7c, 0x52, 0xc4, 0x0e, 0x77, 0x4a, 0x7b, 0x4d, 0x52, 0x1c, 0xbd,
+ 0x3c, 0x39, 0x34, 0x78, 0x7c, 0x16, 0xc8, 0xa1, 0xae, 0xeb, 0x27, 0x38,
+ 0xb4, 0xf3, 0x80, 0x30, 0x80, 0x78, 0x13, 0x8e, 0x46, 0x20, 0x3e, 0xc2,
+ 0x96, 0x26, 0xb1, 0x76, 0x1e, 0x00, 0x69, 0xbb, 0xd8, 0x2b, 0x58, 0xe4,
+ 0x6c, 0xb4, 0xd0, 0x00, 0x0b, 0x47, 0xec, 0xfb, 0x7d, 0x52, 0x9d, 0x27,
+ 0x92, 0xe6, 0x95, 0x73, 0xa0, 0x39, 0x37, 0xcd, 0x1f, 0x60, 0x13, 0x1c,
+ 0x87, 0x9d, 0xa7, 0x91, 0x90, 0xf9, 0x36, 0xc5, 0xfa, 0x3f, 0xf9, 0x7f,
+ 0x50, 0xf8, 0xb3, 0x54, 0x65, 0xff, 0x6f, 0xa6, 0x22, 0xcc, 0x4a, 0x1e,
+ 0x49, 0x3f, 0x07, 0xc6, 0xf2, 0x65, 0x73, 0x13, 0x1b, 0x2d, 0xb6, 0x15,
+ 0xff, 0xcd, 0x9a, 0x1c, 0xea, 0xef, 0x58, 0x56, 0x91, 0x2d, 0x47, 0x81,
+ 0x56, 0x0d, 0xc3, 0xb0, 0x47, 0x58, 0x8d, 0x05, 0x7d, 0x5b, 0xc0, 0x22,
+ 0xa4, 0xf0, 0x2e, 0x70, 0x36, 0x01, 0x89, 0xa1, 0x71, 0xed, 0x76, 0xe9,
+ 0x8d, 0xf5, 0x49, 0xaf, 0x11, 0xbe, 0xe4, 0xd4, 0x48, 0x92, 0xb6, 0x5b,
+ 0xc2, 0x04, 0xd4, 0x0c, 0x5c, 0x8b, 0xe3, 0xfa, 0x29, 0x63, 0x86, 0xb4,
+ 0x10, 0xad, 0x32, 0x07, 0x85, 0xe2, 0x43, 0x76, 0x16, 0x90, 0xab, 0xdf,
+ 0xb3, 0x36, 0x0a, 0xc4, 0x49, 0x7b, 0x95, 0x48, 0x50, 0x72, 0x8f, 0x7d,
+ 0xf4, 0xfa, 0x60, 0xc1 };
+
+ unsigned char p_data[] = {
+ 0x00, 0xed, 0xf7, 0xa7, 0x00, 0x5a, 0xbb, 0xd1, 0x52, 0x65, 0x9b, 0xec,
+ 0xfe, 0x27, 0x8b, 0xe2, 0xbe, 0x40, 0x8c, 0x2f, 0x6f, 0xb4, 0x26, 0xb2,
+ 0xbe, 0x45, 0x4b, 0x3b, 0x5a, 0xaa, 0xc6, 0xaa, 0xfa, 0xc1, 0x3a, 0xa9,
+ 0xa1, 0xba, 0xb7, 0x86, 0x1a, 0x98, 0x15, 0x5f, 0x5c, 0x1c, 0x57, 0x78,
+ 0x78, 0x6a, 0x13, 0xc2, 0x40, 0x7d, 0x07, 0x87, 0x47, 0xc6, 0x96, 0xd5,
+ 0x92, 0xc9, 0x65, 0x2c, 0xfe, 0xbb, 0xe0, 0xd6, 0x76, 0x25, 0x5a, 0xa3,
+ 0xdf, 0x97, 0x4b, 0x64, 0xfd, 0x3b, 0x2b, 0xbc, 0xfb, 0x80, 0xad, 0x3b,
+ 0x7d, 0x1f, 0x48, 0x56, 0x27, 0xf7, 0x2f, 0x8e, 0x92, 0x07, 0xa8, 0x9f,
+ 0xbc, 0x5a, 0xce, 0xfa, 0xd5, 0x67, 0xad, 0xf4, 0xbf, 0xe0, 0xc9, 0x3e,
+ 0x8e, 0xb5, 0x90, 0x58, 0x54, 0x92, 0x9f, 0xda, 0x36, 0xc0, 0x0d, 0x57,
+ 0xfe, 0x6c, 0x23, 0x63, 0x8b, 0xd1, 0x1e, 0x4f, 0xd3 };
+
+ unsigned char q_data[] = {
+ 0x00, 0xd6, 0x3f, 0xf5, 0xee, 0xff, 0x4d, 0x7d, 0x8c, 0x1a, 0x85, 0x5d,
+ 0x3c, 0x4f, 0x9d, 0xdf, 0xc7, 0x68, 0x27, 0x7f, 0xe4, 0x4f, 0x4f, 0xd7,
+ 0xa2, 0x3b, 0xcd, 0x4a, 0x34, 0xd8, 0x55, 0x4a, 0x3e, 0x8e, 0xb3, 0xa8,
+ 0xe9, 0x8a, 0xc5, 0x94, 0xd1, 0x09, 0x32, 0x4b, 0x79, 0x8d, 0x7b, 0x03,
+ 0x0b, 0x5d, 0xca, 0x91, 0x41, 0xbc, 0x82, 0xc3, 0x89, 0x67, 0x4d, 0x03,
+ 0x68, 0x03, 0x2d, 0x0e, 0x4e, 0x97, 0x6c, 0xf6, 0x3e, 0x1f, 0xf4, 0x50,
+ 0x06, 0x5d, 0x05, 0x22, 0xf2, 0xf8, 0xf2, 0xde, 0xad, 0x2e, 0x9d, 0xc3,
+ 0x97, 0x1b, 0xc3, 0x75, 0xe7, 0x86, 0xde, 0xc5, 0x11, 0x89, 0xed, 0x6a,
+ 0x13, 0x14, 0x23, 0x4b, 0x98, 0x81, 0xf7, 0xd4, 0x1c, 0xee, 0x30, 0x92,
+ 0x85, 0x20, 0x4f, 0x35, 0x02, 0xfa, 0xda, 0x14, 0x77, 0xfa, 0x08, 0x34,
+ 0x60, 0xc7, 0x93, 0x72, 0xdc, 0xc4, 0x18, 0x70, 0xc1 };
+
+ memset(msgbuf, 0xef, 64);
+
+ ret = (TEST_ptr((p = BN_bin2bn(p_data, sizeof(p_data), NULL)))
+ && TEST_ptr((q = BN_bin2bn(q_data, sizeof(q_data), NULL)))
+ && TEST_ptr((n = BN_bin2bn(n_data, sizeof(n_data), NULL)))
+ && TEST_ptr((d = BN_bin2bn(d_data, sizeof(d_data), NULL)))
+ && TEST_ptr((e = BN_bin2bn(e_data, sizeof(e_data), NULL)))
+ && TEST_ptr((rsa = RSA_new()))
+ && TEST_ptr((md = EVP_sha256()))
+ && TEST_ptr((ctx = EVP_MD_CTX_new()))
+ && TEST_ptr((pkey = EVP_PKEY_new()))
+ && TEST_true(RSA_set0_factors(rsa, p, q))
+ && TEST_true(RSA_set0_key(rsa, n, e, d))
+ && TEST_true(EVP_PKEY_assign_RSA(pkey, rsa))
+ && TEST_true(EVP_DigestSignInit(ctx, NULL, md, NULL, pkey))
+ && TEST_true(EVP_DigestSign(ctx, sigbuf, &buflen, msgbuf, msglen)));
+
+ EVP_MD_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_rsa_pkcs1, 3);
+ ADD_ALL_TESTS(test_rsa_oaep, 3);
+ ADD_ALL_TESTS(test_rsa_security_bit, OSSL_NELEM(rsa_security_bits_cases));
+ ADD_TEST(test_EVP_rsa_legacy_key);
+ return 1;
+}
diff --git a/test/run_tests.pl b/test/run_tests.pl
new file mode 100644
index 000000000000..4384ebe28e0d
--- /dev/null
+++ b/test/run_tests.pl
@@ -0,0 +1,339 @@
+#! /usr/bin/env perl
+# Copyright 2015-2022 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
+
+use strict;
+use warnings;
+
+# Recognise VERBOSE aka V which is common on other projects.
+# Additionally, recognise VERBOSE_FAILURE aka VF aka REPORT_FAILURES
+# and recognise VERBOSE_FAILURE_PROGRESS aka VFP aka REPORT_FAILURES_PROGRESS.
+BEGIN {
+ $ENV{HARNESS_VERBOSE} = "yes" if $ENV{VERBOSE} || $ENV{V};
+ $ENV{HARNESS_VERBOSE_FAILURE} = "yes"
+ if $ENV{VERBOSE_FAILURE} || $ENV{VF} || $ENV{REPORT_FAILURES};
+ $ENV{HARNESS_VERBOSE_FAILURE_PROGRESS} = "yes"
+ if ($ENV{VERBOSE_FAILURE_PROGRESS} || $ENV{VFP}
+ || $ENV{REPORT_FAILURES_PROGRESS});
+}
+
+use File::Spec::Functions qw/catdir catfile curdir abs2rel rel2abs/;
+use File::Basename;
+use FindBin;
+use lib "$FindBin::Bin/../util/perl";
+use OpenSSL::Glob;
+
+my $srctop = $ENV{SRCTOP} || $ENV{TOP};
+my $bldtop = $ENV{BLDTOP} || $ENV{TOP};
+my $recipesdir = catdir($srctop, "test", "recipes");
+my $libdir = rel2abs(catdir($srctop, "util", "perl"));
+my $jobs = $ENV{HARNESS_JOBS} // 1;
+
+$ENV{OPENSSL_CONF} = rel2abs(catfile($srctop, "apps", "openssl.cnf"));
+$ENV{OPENSSL_CONF_INCLUDE} = rel2abs(catdir($bldtop, "test"));
+$ENV{OPENSSL_MODULES} = rel2abs(catdir($bldtop, "providers"));
+$ENV{OPENSSL_ENGINES} = rel2abs(catdir($bldtop, "engines"));
+$ENV{CTLOG_FILE} = rel2abs(catfile($srctop, "test", "ct", "log_list.cnf"));
+
+my %tapargs =
+ ( verbosity => $ENV{HARNESS_VERBOSE} ? 1 : 0,
+ lib => [ $libdir ],
+ switches => '-w',
+ merge => 1,
+ timer => $ENV{HARNESS_TIMER} ? 1 : 0,
+ );
+
+if ($jobs > 1) {
+ if ($ENV{HARNESS_VERBOSE}) {
+ print "Warning: HARNESS_JOBS > 1 ignored with HARNESS_VERBOSE\n";
+ } else {
+ $tapargs{jobs} = $jobs;
+ print "Using HARNESS_JOBS=$jobs\n";
+ }
+}
+
+# Additional OpenSSL special TAP arguments. Because we can't pass them via
+# TAP::Harness->new(), they will be accessed directly, see the
+# TAP::Parser::OpenSSL implementation further down
+my %openssl_args = ();
+
+$openssl_args{'failure_verbosity'} = $ENV{HARNESS_VERBOSE} ? 0 :
+ $ENV{HARNESS_VERBOSE_FAILURE_PROGRESS} ? 2 :
+ 1; # $ENV{HARNESS_VERBOSE_FAILURE}
+print "Warning: HARNESS_VERBOSE overrides HARNESS_VERBOSE_FAILURE*\n"
+ if ($ENV{HARNESS_VERBOSE} && ($ENV{HARNESS_VERBOSE_FAILURE}
+ || $ENV{HARNESS_VERBOSE_FAILURE_PROGRESS}));
+print "Warning: HARNESS_VERBOSE_FAILURE_PROGRESS overrides HARNESS_VERBOSE_FAILURE\n"
+ if ($ENV{HARNESS_VERBOSE_FAILURE_PROGRESS} && $ENV{HARNESS_VERBOSE_FAILURE});
+
+my $outfilename = $ENV{HARNESS_TAP_COPY};
+open $openssl_args{'tap_copy'}, ">$outfilename"
+ or die "Trying to create $outfilename: $!\n"
+ if defined $outfilename;
+
+my @alltests = find_matching_tests("*");
+my %tests = ();
+
+sub reorder {
+ my $key = pop;
+
+ # for parallel test runs, do slow tests first
+ if ($jobs > 1 && $key =~ m/test_ssl_new|test_fuzz/) {
+ $key =~ s/(\d+)-/01-/;
+ }
+ return $key;
+}
+
+my $initial_arg = 1;
+foreach my $arg (@ARGV ? @ARGV : ('alltests')) {
+ if ($arg eq 'list') {
+ foreach (@alltests) {
+ (my $x = basename($_)) =~ s|^[0-9][0-9]-(.*)\.t$|$1|;
+ print $x,"\n";
+ }
+ exit 0;
+ }
+ if ($arg eq 'alltests') {
+ warn "'alltests' encountered, ignoring everything before that...\n"
+ unless $initial_arg;
+ %tests = map { $_ => 1 } @alltests;
+ } elsif ($arg =~ m/^(-?)(.*)/) {
+ my $sign = $1;
+ my $test = $2;
+ my @matches = find_matching_tests($test);
+
+ # If '-foo' is the first arg, it's short for 'alltests -foo'
+ if ($sign eq '-' && $initial_arg) {
+ %tests = map { $_ => 1 } @alltests;
+ }
+
+ if (scalar @matches == 0) {
+ warn "Test $test found no match, skipping ",
+ ($sign eq '-' ? "removal" : "addition"),
+ "...\n";
+ } else {
+ foreach $test (@matches) {
+ if ($sign eq '-') {
+ delete $tests{$test};
+ } else {
+ $tests{$test} = 1;
+ }
+ }
+ }
+ } else {
+ warn "I don't know what '$arg' is about, ignoring...\n";
+ }
+
+ $initial_arg = 0;
+}
+
+# prep recipes are mandatory and need to be always run first
+my @preps = glob(catfile($recipesdir,"00-prep_*.t"));
+foreach my $test (@preps) {
+ delete $tests{$test};
+}
+
+sub find_matching_tests {
+ my ($glob) = @_;
+
+ if ($glob =~ m|^[\d\[\]\?\-]+$|) {
+ return glob(catfile($recipesdir,"$glob-*.t"));
+ }
+
+ return glob(catfile($recipesdir,"*-$glob.t"));
+}
+
+# The following is quite a bit of hackery to adapt to both TAP::Harness
+# and Test::Harness, depending on what's available.
+# The TAP::Harness hack allows support for HARNESS_VERBOSE_FAILURE* and
+# HARNESS_TAP_COPY, while the Test::Harness hack can't, because the pre
+# TAP::Harness Test::Harness simply doesn't have support for this sort of
+# thing.
+#
+# We use eval to avoid undue interruption if TAP::Harness isn't present.
+
+my $package;
+my $eres;
+
+$eres = eval {
+ package TAP::Parser::OpenSSL;
+ use parent -norequire, 'TAP::Parser';
+ require TAP::Parser;
+
+ sub new {
+ my $class = shift;
+ my %opts = %{ shift() };
+ my $failure_verbosity = $openssl_args{failure_verbosity};
+ my @plans = (); # initial level, no plan yet
+ my $output_buffer = "";
+
+ # We rely heavily on perl closures to make failure verbosity work
+ # We need to do so, because there's no way to safely pass extra
+ # objects down all the way to the TAP::Parser::Result object
+ my @failure_output = ();
+ my %callbacks = ();
+ if ($failure_verbosity > 0 || defined $openssl_args{tap_copy}) {
+ $callbacks{ALL} = sub { # on each line of test output
+ my $self = shift;
+ my $fh = $openssl_args{tap_copy};
+ print $fh $self->as_string, "\n"
+ if defined $fh;
+
+ my $failure_verbosity = $openssl_args{failure_verbosity};
+ if ($failure_verbosity > 0) {
+ my $is_plan = $self->is_plan;
+ my $tests_planned = $is_plan && $self->tests_planned;
+ my $is_test = $self->is_test;
+ my $is_ok = $is_test && $self->is_ok;
+
+ # workaround for parser not coping with sub-test indentation
+ if ($self->is_unknown) {
+ my $level = $#plans;
+ my $indent = $level < 0 ? "" : " " x ($level * 4);
+
+ ($is_plan, $tests_planned) = (1, $1)
+ if ($self->as_string =~ m/^$indent 1\.\.(\d+)/);
+ ($is_test, $is_ok) = (1, !$1)
+ if ($self->as_string =~ m/^$indent(not )?ok /);
+ }
+
+ if ($is_plan) {
+ push @plans, $tests_planned;
+ $output_buffer = ""; # ignore comments etc. until plan
+ } elsif ($is_test) { # result of a test
+ pop @plans if @plans && --($plans[-1]) <= 0;
+ print $output_buffer if !$is_ok;
+ print "\n".$self->as_string
+ if !$is_ok || $failure_verbosity == 2;
+ print "\n# ------------------------------------------------------------------------------" if !$is_ok;
+ $output_buffer = "";
+ } elsif ($self->as_string ne "") {
+ # typically is_comment or is_unknown
+ $output_buffer .= "\n".$self->as_string;
+ }
+ }
+ }
+ }
+
+ if ($failure_verbosity > 0) {
+ $callbacks{EOF} = sub {
+ my $self = shift;
+
+ # We know we are a TAP::Parser::Aggregator object
+ if (scalar $self->failed > 0 && @failure_output) {
+ # We add an extra empty line, because in the case of a
+ # progress counter, we're still at the end of that progress
+ # line.
+ print $_, "\n" foreach (("", @failure_output));
+ }
+ # Echo any trailing comments etc.
+ print "$output_buffer";
+ };
+ }
+
+ if (keys %callbacks) {
+ # If %opts already has a callbacks element, the order here
+ # ensures we do not override it
+ %opts = ( callbacks => { %callbacks }, %opts );
+ }
+
+ return $class->SUPER::new({ %opts });
+ }
+
+ package TAP::Harness::OpenSSL;
+ use parent -norequire, 'TAP::Harness';
+ require TAP::Harness;
+
+ package main;
+
+ $tapargs{parser_class} = "TAP::Parser::OpenSSL";
+ $package = 'TAP::Harness::OpenSSL';
+};
+
+unless (defined $eres) {
+ $eres = eval {
+ # Fake TAP::Harness in case it's not loaded
+ package TAP::Harness::fake;
+ use parent 'Test::Harness';
+
+ sub new {
+ my $class = shift;
+ my %args = %{ shift() };
+
+ return bless { %args }, $class;
+ }
+
+ sub runtests {
+ my $self = shift;
+
+ # Pre TAP::Harness Test::Harness doesn't support [ filename, name ]
+ # elements, so convert such elements to just be the filename
+ my @args = map { ref($_) eq 'ARRAY' ? $_->[0] : $_ } @_;
+
+ my @switches = ();
+ if ($self->{switches}) {
+ push @switches, $self->{switches};
+ }
+ if ($self->{lib}) {
+ foreach (@{$self->{lib}}) {
+ my $l = $_;
+
+ # It seems that $switches is getting interpreted with 'eval'
+ # or something like that, and that we need to take care of
+ # backslashes or they will disappear along the way.
+ $l =~ s|\\|\\\\|g if $^O eq "MSWin32";
+ push @switches, "-I$l";
+ }
+ }
+
+ $Test::Harness::switches = join(' ', @switches);
+ Test::Harness::runtests(@args);
+ }
+
+ package main;
+ $package = 'TAP::Harness::fake';
+ };
+}
+
+unless (defined $eres) {
+ print $@,"\n" if $@;
+ print $!,"\n" if $!;
+ exit 127;
+}
+
+my $harness = $package->new(\%tapargs);
+my $ret =
+ $harness->runtests(map { [ abs2rel($_, rel2abs(curdir())), basename($_) ] }
+ @preps);
+
+if (ref($ret) ne "TAP::Parser::Aggregator" || !$ret->has_errors) {
+ $ret =
+ $harness->runtests(map { [ abs2rel($_, rel2abs(curdir())), basename($_) ] }
+ sort { reorder($a) cmp reorder($b) } keys %tests);
+}
+
+# If this is a TAP::Parser::Aggregator, $ret->has_errors is the count of
+# tests that failed. We don't bother with that exact number, just exit
+# with an appropriate exit code when it isn't zero.
+if (ref($ret) eq "TAP::Parser::Aggregator") {
+ exit 0 unless $ret->has_errors;
+ exit 1 unless $^O eq 'VMS';
+ # On VMS, perl converts an exit 1 to SS$_ABORT (%SYSTEM-F-ABORT), which
+ # is a bit harsh. As per perl recommendations, we explicitly use the
+ # same VMS status code as typical C programs would for exit(1), except
+ # we set the error severity rather than success.
+ # Ref: https://perldoc.perl.org/perlport#exit
+ # https://perldoc.perl.org/perlvms#$?
+ exit 0x35a000 # C facility code
+ + 8 # 1 << 3 (to make space for the 3 severity bits)
+ + 2 # severity: E(rror)
+ + 0x10000000; # bit 28 set => the shell stays silent
+}
+
+# If this isn't a TAP::Parser::Aggregator, it's the pre-TAP test harness,
+# which simply dies at the end if any test failed, so we don't need to bother
+# with any exit code in that case.
diff --git a/test/sanitytest.c b/test/sanitytest.c
new file mode 100644
index 000000000000..aba9149231f3
--- /dev/null
+++ b/test/sanitytest.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2015-2022 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/types.h>
+#include "testutil.h"
+#include "internal/numbers.h"
+
+static int test_sanity_null_zero(void)
+{
+ char *p;
+ char bytes[sizeof(p)];
+
+ /* Is NULL equivalent to all-bytes-zero? */
+ p = NULL;
+ memset(bytes, 0, sizeof(bytes));
+ return TEST_mem_eq(&p, sizeof(p), bytes, sizeof(bytes));
+}
+
+static int test_sanity_enum_size(void)
+{
+ enum smallchoices { sa, sb, sc };
+ enum medchoices { ma, mb, mc, md, me, mf, mg, mh, mi, mj, mk, ml };
+ enum largechoices {
+ a01, b01, c01, d01, e01, f01, g01, h01, i01, j01,
+ a02, b02, c02, d02, e02, f02, g02, h02, i02, j02,
+ a03, b03, c03, d03, e03, f03, g03, h03, i03, j03,
+ a04, b04, c04, d04, e04, f04, g04, h04, i04, j04,
+ a05, b05, c05, d05, e05, f05, g05, h05, i05, j05,
+ a06, b06, c06, d06, e06, f06, g06, h06, i06, j06,
+ a07, b07, c07, d07, e07, f07, g07, h07, i07, j07,
+ a08, b08, c08, d08, e08, f08, g08, h08, i08, j08,
+ a09, b09, c09, d09, e09, f09, g09, h09, i09, j09,
+ a10, b10, c10, d10, e10, f10, g10, h10, i10, j10,
+ xxx };
+
+ /* Enum size */
+ if (!TEST_size_t_eq(sizeof(enum smallchoices), sizeof(int))
+ || !TEST_size_t_eq(sizeof(enum medchoices), sizeof(int))
+ || !TEST_size_t_eq(sizeof(enum largechoices), sizeof(int)))
+ return 0;
+ return 1;
+}
+
+static int test_sanity_twos_complement(void)
+{
+ /* Basic two's complement checks. */
+ if (!TEST_int_eq(~(-1), 0)
+ || !TEST_long_eq(~(-1L), 0L))
+ return 0;
+ return 1;
+}
+
+static int test_sanity_sign(void)
+{
+ /* Check that values with sign bit 1 and value bits 0 are valid */
+ if (!TEST_int_eq(-(INT_MIN + 1), INT_MAX)
+ || !TEST_long_eq(-(LONG_MIN + 1), LONG_MAX))
+ return 0;
+ return 1;
+}
+
+static int test_sanity_unsigned_conversion(void)
+{
+ /* Check that unsigned-to-signed conversions preserve bit patterns */
+ if (!TEST_int_eq((int)((unsigned int)INT_MAX + 1), INT_MIN)
+ || !TEST_long_eq((long)((unsigned long)LONG_MAX + 1), LONG_MIN))
+ return 0;
+ return 1;
+}
+
+static int test_sanity_range(void)
+{
+ /* Verify some types are the correct size */
+ if (!TEST_size_t_eq(sizeof(int8_t), 1)
+ || !TEST_size_t_eq(sizeof(uint8_t), 1)
+ || !TEST_size_t_eq(sizeof(int16_t), 2)
+ || !TEST_size_t_eq(sizeof(uint16_t), 2)
+ || !TEST_size_t_eq(sizeof(int32_t), 4)
+ || !TEST_size_t_eq(sizeof(uint32_t), 4)
+ || !TEST_size_t_eq(sizeof(int64_t), 8)
+ || !TEST_size_t_eq(sizeof(uint64_t), 8)
+#ifdef UINT128_MAX
+ || !TEST_size_t_eq(sizeof(int128_t), 16)
+ || !TEST_size_t_eq(sizeof(uint128_t), 16)
+#endif
+ || !TEST_size_t_eq(sizeof(char), 1)
+ || !TEST_size_t_eq(sizeof(unsigned char), 1))
+ return 0;
+
+ /* We want our long longs to be at least 64 bits */
+ if (!TEST_size_t_ge(sizeof(long long int), 8)
+ || !TEST_size_t_ge(sizeof(unsigned long long int), 8))
+ return 0;
+
+ /*
+ * Verify intmax_t.
+ * Some platforms defined intmax_t to be 64 bits but still support
+ * an int128_t, so this check is for at least 64 bits.
+ */
+ if (!TEST_size_t_ge(sizeof(ossl_intmax_t), 8)
+ || !TEST_size_t_ge(sizeof(ossl_uintmax_t), 8)
+ || !TEST_size_t_ge(sizeof(ossl_uintmax_t), sizeof(size_t)))
+ return 0;
+
+ /* This isn't possible to check using the framework functions */
+ if (SIZE_MAX < INT_MAX) {
+ TEST_error("int must not be wider than size_t");
+ return 0;
+ }
+
+ /* SIZE_MAX is always greater than 2*INT_MAX */
+ if (SIZE_MAX - INT_MAX <= INT_MAX) {
+ TEST_error("SIZE_MAX must exceed 2*INT_MAX");
+ return 0;
+ }
+
+ return 1;
+}
+
+static int test_sanity_memcmp(void)
+{
+ return CRYPTO_memcmp("ab", "cd", 2);
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_sanity_null_zero);
+ ADD_TEST(test_sanity_enum_size);
+ ADD_TEST(test_sanity_twos_complement);
+ ADD_TEST(test_sanity_sign);
+ ADD_TEST(test_sanity_unsigned_conversion);
+ ADD_TEST(test_sanity_range);
+ ADD_TEST(test_sanity_memcmp);
+ return 1;
+}
+
diff --git a/test/secmemtest.c b/test/secmemtest.c
new file mode 100644
index 000000000000..d0f9ba2e9901
--- /dev/null
+++ b/test/secmemtest.c
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2015-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/crypto.h>
+
+#include "testutil.h"
+#include "../e_os.h"
+
+static int test_sec_mem(void)
+{
+#ifndef OPENSSL_NO_SECURE_MEMORY
+ int testresult = 0;
+ char *p = NULL, *q = NULL, *r = NULL, *s = NULL;
+
+ TEST_info("Secure memory is implemented.");
+
+ s = OPENSSL_secure_malloc(20);
+ /* s = non-secure 20 */
+ if (!TEST_ptr(s)
+ || !TEST_false(CRYPTO_secure_allocated(s)))
+ goto end;
+ r = OPENSSL_secure_malloc(20);
+ /* r = non-secure 20, s = non-secure 20 */
+ if (!TEST_ptr(r)
+ || !TEST_true(CRYPTO_secure_malloc_init(4096, 32))
+ || !TEST_false(CRYPTO_secure_allocated(r)))
+ goto end;
+ p = OPENSSL_secure_malloc(20);
+ if (!TEST_ptr(p)
+ /* r = non-secure 20, p = secure 20, s = non-secure 20 */
+ || !TEST_true(CRYPTO_secure_allocated(p))
+ /* 20 secure -> 32-byte minimum allocation unit */
+ || !TEST_size_t_eq(CRYPTO_secure_used(), 32))
+ goto end;
+ q = OPENSSL_malloc(20);
+ if (!TEST_ptr(q))
+ goto end;
+ /* r = non-secure 20, p = secure 20, q = non-secure 20, s = non-secure 20 */
+ if (!TEST_false(CRYPTO_secure_allocated(q)))
+ goto end;
+ OPENSSL_secure_clear_free(s, 20);
+ s = OPENSSL_secure_malloc(20);
+ if (!TEST_ptr(s)
+ /* r = non-secure 20, p = secure 20, q = non-secure 20, s = secure 20 */
+ || !TEST_true(CRYPTO_secure_allocated(s))
+ /* 2 * 20 secure -> 64 bytes allocated */
+ || !TEST_size_t_eq(CRYPTO_secure_used(), 64))
+ goto end;
+ OPENSSL_secure_clear_free(p, 20);
+ p = NULL;
+ /* 20 secure -> 32 bytes allocated */
+ if (!TEST_size_t_eq(CRYPTO_secure_used(), 32))
+ goto end;
+ OPENSSL_free(q);
+ q = NULL;
+ /* should not complete, as secure memory is still allocated */
+ if (!TEST_false(CRYPTO_secure_malloc_done())
+ || !TEST_true(CRYPTO_secure_malloc_initialized()))
+ goto end;
+ OPENSSL_secure_free(s);
+ s = NULL;
+ /* secure memory should now be 0, so done should complete */
+ if (!TEST_size_t_eq(CRYPTO_secure_used(), 0)
+ || !TEST_true(CRYPTO_secure_malloc_done())
+ || !TEST_false(CRYPTO_secure_malloc_initialized()))
+ goto end;
+
+ TEST_info("Possible infinite loop: allocate more than available");
+ if (!TEST_true(CRYPTO_secure_malloc_init(32768, 16)))
+ goto end;
+ TEST_ptr_null(OPENSSL_secure_malloc((size_t)-1));
+ TEST_true(CRYPTO_secure_malloc_done());
+
+ /*
+ * If init fails, then initialized should be false, if not, this
+ * could cause an infinite loop secure_malloc, but we don't test it
+ */
+ if (TEST_false(CRYPTO_secure_malloc_init(16, 16)) &&
+ !TEST_false(CRYPTO_secure_malloc_initialized())) {
+ TEST_true(CRYPTO_secure_malloc_done());
+ goto end;
+ }
+
+ /*-
+ * There was also a possible infinite loop when the number of
+ * elements was 1<<31, as |int i| was set to that, which is a
+ * negative number. However, it requires minimum input values:
+ *
+ * CRYPTO_secure_malloc_init((size_t)1<<34, 1<<4);
+ *
+ * Which really only works on 64-bit systems, since it took 16 GB
+ * secure memory arena to trigger the problem. It naturally takes
+ * corresponding amount of available virtual and physical memory
+ * for test to be feasible/representative. Since we can't assume
+ * that every system is equipped with that much memory, the test
+ * remains disabled. If the reader of this comment really wants
+ * to make sure that infinite loop is fixed, they can enable the
+ * code below.
+ */
+# if 0
+ /*-
+ * On Linux and BSD this test has a chance to complete in minimal
+ * time and with minimum side effects, because mlock is likely to
+ * fail because of RLIMIT_MEMLOCK, which is customarily [much]
+ * smaller than 16GB. In other words Linux and BSD users can be
+ * limited by virtual space alone...
+ */
+ if (sizeof(size_t) > 4) {
+ TEST_info("Possible infinite loop: 1<<31 limit");
+ if (TEST_true(CRYPTO_secure_malloc_init((size_t)1<<34, 1<<4) != 0))
+ TEST_true(CRYPTO_secure_malloc_done());
+ }
+# endif
+
+ /* this can complete - it was not really secure */
+ testresult = 1;
+ end:
+ OPENSSL_secure_free(p);
+ OPENSSL_free(q);
+ OPENSSL_secure_free(r);
+ OPENSSL_secure_free(s);
+ return testresult;
+#else
+ TEST_info("Secure memory is *not* implemented.");
+ /* Should fail. */
+ return TEST_false(CRYPTO_secure_malloc_init(4096, 32));
+#endif
+}
+
+static int test_sec_mem_clear(void)
+{
+#ifndef OPENSSL_NO_SECURE_MEMORY
+ const int size = 64;
+ unsigned char *p = NULL;
+ int i, res = 0;
+
+ if (!TEST_true(CRYPTO_secure_malloc_init(4096, 32))
+ || !TEST_ptr(p = OPENSSL_secure_malloc(size)))
+ goto err;
+
+ for (i = 0; i < size; i++)
+ if (!TEST_uchar_eq(p[i], 0))
+ goto err;
+
+ for (i = 0; i < size; i++)
+ p[i] = (unsigned char)(i + ' ' + 1);
+
+ OPENSSL_secure_free(p);
+
+ /*
+ * A deliberate use after free here to verify that the memory has been
+ * cleared properly. Since secure free doesn't return the memory to
+ * libc's memory pool, it technically isn't freed. However, the header
+ * bytes have to be skipped and these consist of two pointers in the
+ * current implementation.
+ */
+ for (i = sizeof(void *) * 2; i < size; i++)
+ if (!TEST_uchar_eq(p[i], 0))
+ return 0;
+
+ res = 1;
+ p = NULL;
+err:
+ OPENSSL_secure_free(p);
+ CRYPTO_secure_malloc_done();
+ return res;
+#else
+ return 1;
+#endif
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_sec_mem);
+ ADD_TEST(test_sec_mem_clear);
+ return 1;
+}
diff --git a/test/serverinfo.pem b/test/serverinfo.pem
new file mode 100644
index 000000000000..cd3020e3b8c4
--- /dev/null
+++ b/test/serverinfo.pem
@@ -0,0 +1,16 @@
+-----BEGIN SERVERINFO FOR CT-----
+ABIAZMevsj4TC5rgwjZNciLGwh15YXoIK9t5aypGJIG4QzyMowmwwDdqxudkUcGa
+DvuqlYL7psO5j4/BIHTe677CAZBBH3Ho2NOM5q1zub4AbfUMlKeufuQgeQ2Tj1oe
+LJLRzrwDnPs=
+-----END SERVERINFO FOR CT-----
+
+-----BEGIN SERVERINFO FOR TACK-----
+8wABTwFMh1Dz+3W6zULWJKjav5TNaFEXL1h98YtCXeyZnORYg4mbKpxH5CMbjpgx
+To3amSqUPF4Ntjc/i9+poutxebYkbgAAAkMcxb8+RaM9YEywaJEGViKJJmpYG/gJ
+HgfGaefI9kKbXSDmP9ntg8dLvDzuyYw14ktM2850Q9WvBiltpekilZxVuT2bFtfs
+cmS++SAK9YOM8RrKhL1TLmrktoBEJZ6z5GTukYdQ8/t1us1C1iSo2r+UzWhRFy9Y
+ffGLQl3smZzkWIOJmyqcR+QjG46YMU6N2pkqlDxeDbY3P4vfqaLrcXm2JG4AAAGN
+xXQJPbdniI9rEydVXb1Cu1yT/t7FBEx6hLxuoypXjCI1wCGpXsd8zEnloR0Ank5h
+VO/874E/BZlItzSPpcmDKl5Def6BrAJTErQlE9npo52S05YWORxJw1+VYBdqQ09A
+x3wA
+-----END SERVERINFO FOR TACK-----
diff --git a/test/serverinfo2.pem b/test/serverinfo2.pem
new file mode 100644
index 000000000000..792d5c0313dd
--- /dev/null
+++ b/test/serverinfo2.pem
@@ -0,0 +1,8 @@
+-----BEGIN SERVERINFOV2 FOR CT-----
+AAARgAASAPIA8AB2AO5Lvbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAAB
+Wxp+yVkAAAQDAEcwRQIhAMhZ7Se2olZ35Mqze2NlDsW35ttyIrRuHyi6F0KlzsSp
+AiBDT8YLjNCUByVrD9jhoRbUy+t38fx9WbOWgRVxZ5xk2wB2AN3rHSt6DU+mIIuB
+rYFocH4ujp0B1VyIjT0RxM227L7MAAABWxp+x80AAAQDAEcwRQIgEz/5SC+JA5Ko
+0ivxGYf5XBCqjfcIrp2BpCVxyYA2ys0CIQC1kcCeihwwbiVFTjR8UecLaCd1l1ix
+nopZ9ljhG018+g==
+-----END SERVERINFOV2 FOR CT-----
diff --git a/test/servername_test.c b/test/servername_test.c
new file mode 100644
index 000000000000..b417f8bcacba
--- /dev/null
+++ b/test/servername_test.c
@@ -0,0 +1,268 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2017 BaishanCloud. 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/opensslconf.h>
+#include <openssl/bio.h>
+#include <openssl/crypto.h>
+#include <openssl/evp.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+#include <time.h>
+
+#include "internal/packet.h"
+
+#include "testutil.h"
+#include "internal/nelem.h"
+#include "helpers/ssltestlib.h"
+
+#define CLIENT_VERSION_LEN 2
+
+static const char *host = "dummy-host";
+
+static char *cert = NULL;
+static char *privkey = NULL;
+
+#if defined(OPENSSL_NO_TLS1_3) || \
+ (defined(OPENSSL_NO_EC) && defined(OPENSSL_NO_DH))
+static int maxversion = TLS1_2_VERSION;
+#else
+static int maxversion = 0;
+#endif
+
+static int get_sni_from_client_hello(BIO *bio, char **sni)
+{
+ long len;
+ unsigned char *data;
+ PACKET pkt, pkt2, pkt3, pkt4, pkt5;
+ unsigned int servname_type = 0, type = 0;
+ int ret = 0;
+
+ memset(&pkt, 0, sizeof(pkt));
+ memset(&pkt2, 0, sizeof(pkt2));
+ memset(&pkt3, 0, sizeof(pkt3));
+ memset(&pkt4, 0, sizeof(pkt4));
+ memset(&pkt5, 0, sizeof(pkt5));
+
+ if (!TEST_long_ge(len = BIO_get_mem_data(bio, (char **)&data), 0)
+ || !TEST_true(PACKET_buf_init(&pkt, data, len))
+ /* Skip the record header */
+ || !PACKET_forward(&pkt, SSL3_RT_HEADER_LENGTH)
+ /* Skip the handshake message header */
+ || !TEST_true(PACKET_forward(&pkt, SSL3_HM_HEADER_LENGTH))
+ /* Skip client version and random */
+ || !TEST_true(PACKET_forward(&pkt, CLIENT_VERSION_LEN
+ + SSL3_RANDOM_SIZE))
+ /* Skip session id */
+ || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
+ /* Skip ciphers */
+ || !TEST_true(PACKET_get_length_prefixed_2(&pkt, &pkt2))
+ /* Skip compression */
+ || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
+ /* Extensions len */
+ || !TEST_true(PACKET_as_length_prefixed_2(&pkt, &pkt2)))
+ goto end;
+
+ /* Loop through all extensions for SNI */
+ while (PACKET_remaining(&pkt2)) {
+ if (!TEST_true(PACKET_get_net_2(&pkt2, &type))
+ || !TEST_true(PACKET_get_length_prefixed_2(&pkt2, &pkt3)))
+ goto end;
+ if (type == TLSEXT_TYPE_server_name) {
+ if (!TEST_true(PACKET_get_length_prefixed_2(&pkt3, &pkt4))
+ || !TEST_uint_ne(PACKET_remaining(&pkt4), 0)
+ || !TEST_true(PACKET_get_1(&pkt4, &servname_type))
+ || !TEST_uint_eq(servname_type, TLSEXT_NAMETYPE_host_name)
+ || !TEST_true(PACKET_get_length_prefixed_2(&pkt4, &pkt5))
+ || !TEST_uint_le(PACKET_remaining(&pkt5), TLSEXT_MAXLEN_host_name)
+ || !TEST_false(PACKET_contains_zero_byte(&pkt5))
+ || !TEST_true(PACKET_strndup(&pkt5, sni)))
+ goto end;
+ ret = 1;
+ goto end;
+ }
+ }
+end:
+ return ret;
+}
+
+static int client_setup_sni_before_state(void)
+{
+ SSL_CTX *ctx;
+ SSL *con = NULL;
+ BIO *rbio;
+ BIO *wbio;
+ char *hostname = NULL;
+ int ret = 0;
+
+ /* use TLS_method to blur 'side' */
+ ctx = SSL_CTX_new(TLS_method());
+ if (!TEST_ptr(ctx))
+ goto end;
+
+ if (maxversion > 0
+ && !TEST_true(SSL_CTX_set_max_proto_version(ctx, maxversion)))
+ goto end;
+
+ con = SSL_new(ctx);
+ if (!TEST_ptr(con))
+ goto end;
+
+ /* set SNI before 'client side' is set */
+ SSL_set_tlsext_host_name(con, host);
+
+ rbio = BIO_new(BIO_s_mem());
+ wbio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(rbio)|| !TEST_ptr(wbio)) {
+ BIO_free(rbio);
+ BIO_free(wbio);
+ goto end;
+ }
+
+ SSL_set_bio(con, rbio, wbio);
+
+ if (!TEST_int_le(SSL_connect(con), 0))
+ /* This shouldn't succeed because we don't have a server! */
+ goto end;
+ if (!TEST_true(get_sni_from_client_hello(wbio, &hostname)))
+ /* no SNI in client hello */
+ goto end;
+ if (!TEST_str_eq(hostname, host))
+ /* incorrect SNI value */
+ goto end;
+ ret = 1;
+end:
+ OPENSSL_free(hostname);
+ SSL_free(con);
+ SSL_CTX_free(ctx);
+ return ret;
+}
+
+static int client_setup_sni_after_state(void)
+{
+ SSL_CTX *ctx;
+ SSL *con = NULL;
+ BIO *rbio;
+ BIO *wbio;
+ char *hostname = NULL;
+ int ret = 0;
+
+ /* use TLS_method to blur 'side' */
+ ctx = SSL_CTX_new(TLS_method());
+ if (!TEST_ptr(ctx))
+ goto end;
+
+ if (maxversion > 0
+ && !TEST_true(SSL_CTX_set_max_proto_version(ctx, maxversion)))
+ goto end;
+
+ con = SSL_new(ctx);
+ if (!TEST_ptr(con))
+ goto end;
+
+ rbio = BIO_new(BIO_s_mem());
+ wbio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(rbio)|| !TEST_ptr(wbio)) {
+ BIO_free(rbio);
+ BIO_free(wbio);
+ goto end;
+ }
+
+ SSL_set_bio(con, rbio, wbio);
+ SSL_set_connect_state(con);
+
+ /* set SNI after 'client side' is set */
+ SSL_set_tlsext_host_name(con, host);
+
+ if (!TEST_int_le(SSL_connect(con), 0))
+ /* This shouldn't succeed because we don't have a server! */
+ goto end;
+ if (!TEST_true(get_sni_from_client_hello(wbio, &hostname)))
+ /* no SNI in client hello */
+ goto end;
+ if (!TEST_str_eq(hostname, host))
+ /* incorrect SNI value */
+ goto end;
+ ret = 1;
+end:
+ OPENSSL_free(hostname);
+ SSL_free(con);
+ SSL_CTX_free(ctx);
+ return ret;
+}
+
+static int server_setup_sni(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ /* set SNI at server side */
+ SSL_set_tlsext_host_name(serverssl, host);
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ if (!TEST_ptr_null(SSL_get_servername(serverssl,
+ TLSEXT_NAMETYPE_host_name))) {
+ /* SNI should have been cleared during handshake */
+ goto end;
+ }
+
+ testresult = 1;
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+typedef int (*sni_test_fn)(void);
+
+static sni_test_fn sni_test_fns[3] = {
+ client_setup_sni_before_state,
+ client_setup_sni_after_state,
+ server_setup_sni
+};
+
+static int test_servername(int test)
+{
+ /*
+ * For each test set up an SSL_CTX and SSL and see
+ * what SNI behaves.
+ */
+ return sni_test_fns[test]();
+}
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(cert = test_get_argument(0))
+ || !TEST_ptr(privkey = test_get_argument(1)))
+ return 0;
+
+ ADD_ALL_TESTS(test_servername, OSSL_NELEM(sni_test_fns));
+ return 1;
+}
diff --git a/test/session.pem b/test/session.pem
new file mode 100644
index 000000000000..ea0b0bcec238
--- /dev/null
+++ b/test/session.pem
@@ -0,0 +1,31 @@
+-----BEGIN SSL SESSION PARAMETERS-----
+MIIFSgIBAQICAwQEAhMCBCAUv8MKab5ruWM6I8xtEH++u+bb2B1OznYnDrRcpLll
+6AQwzwJoGXOQ3uCa7bCy07owBiH4Bf13MiDtwaHSnNTEyfLEZBy3SgCE06wa5TJk
+Fx8aoQYCBFsWdRqiBAICHCCjggPrMIID5zCCAs+gAwIBAgIJALnu1NlVpZ6zMA0G
+CSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdy
+b3VwMSIwIAYDVQQLDBlGT1IgVEVTVElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQD
+DBxPcGVuU1NMIFRlc3QgSW50ZXJtZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoX
+DTIxMTAxNjE0MDE0OFowZDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wg
+R3JvdXAxIjAgBgNVBAsMGUZPUiBURVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNV
+BAMMEFRlc3QgU2VydmVyIENlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQDzhPOSNtyyRspmeuUpxfNJKCLTuf7g3uQ4zu4iHOmRO5TQci+HhVlLZrHF
+9XqFXcIP0y4pWDbMSGuiorUmzmfiR7bfSdI/+qIQt8KXRH6HNG1t8ou0VSvWId5T
+S5Dq/er5ODUr9OaaDva7EquHIcMvvPQGuI+OEAcnleVCy9HVEIySrO4P3CNIicnG
+kwwiAud05yUAq/gPXBC1hTtmlPD7TVcGVSEiJdvzqqlgv02qedGrkki6GY4S7GjZ
+xrrf7Foc2EP+51LJzwLQx3/JfrCU41NEWAsu/Sl0tQabXESN+zJ1pDqoZ3uHMgpQ
+jeGiE0olr+YcsSW/tJmiU9OiAr8RAgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAO
+BgNVHQ8BAf8EBAMCBeAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVk
+IENlcnRpZmljYXRlMB0GA1UdDgQWBBSCvM8AABPR9zklmifnr9LvIBturDAfBgNV
+HSMEGDAWgBQ2w2yI55X+sL3szj49hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEA
+qb1NV0B0/pbpK9Z4/bNjzPQLTRLKWnSNm/Jh5v0GEUOE/Beg7GNjNrmeNmqxAlpq
+Wz9qoeoFZax+QBpIZYjROU3TS3fpyLsrnlr0CDQ5R7kCCDGa8dkXxemmpZZLbUCp
+W2Uoy8sAA4JjN9OtsZY7dvUXFgJ7vVNTRnI01ghknbtD+2SxSQd3CWF6QhcRMAzZ
+J1z1cbbwGDDzfvGFPzJ+Sq+zEPdsxoVLLSetCiBc+40ZcDS5dV98h9XD7JMTQfxz
+A7mNGv73JoZJA6nFgj+ADSlJsY/tJBv+z1iQRueoh9Qeee+ZbRifPouCB8FDx+Al
+tvHTANdAq0t/K3o+pplMVKQCBAClAwIBFakEAgIcIKqB0wSB0EMQ5938LY/ASVsV
+0kStjTVOps9p3VT071bTjD3RR211+gLzBwGCk8gWNH1glJXjLAenh9E2ivDK1tYQ
+3ODRdB3V46t9E78r0uAmSG/WMJ9OvkFlXyIhseYwvWW0P1cAYPI/j3Evgcyu9GIs
+HSDVEKbBy9CJYCkW/SrT+2A3ouqp+wSW0XgDLFFB+mBte2Hg7wv2uILrYZ4Y0fNe
+CUcTq8B+0EFEiq7p0KRGXwpSKYxNw7qZgg/Us3W85BYMnzYjfDzN0KHf+BI28VRT
+Rjxuud2uBwIFANHVD/k=
+-----END SSL SESSION PARAMETERS-----
diff --git a/test/sha_test.c b/test/sha_test.c
new file mode 100644
index 000000000000..4285e703c58d
--- /dev/null
+++ b/test/sha_test.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/sha.h>
+#include "testutil.h"
+
+static int test_static_sha_common(const char *input, size_t length,
+ const unsigned char *out,
+ unsigned char *(*md)(const unsigned char *d,
+ size_t n,
+ unsigned char *md))
+{
+ unsigned char buf[EVP_MAX_MD_SIZE], *sbuf;
+ const unsigned char *in = (unsigned char *)input;
+ const size_t in_len = strlen(input);
+
+ sbuf = (*md)(in, in_len, buf);
+ if (!TEST_ptr(sbuf)
+ || !TEST_ptr_eq(sbuf, buf)
+ || !TEST_mem_eq(sbuf, length, out, length))
+ return 0;
+ sbuf = (*md)(in, in_len, NULL);
+ if (!TEST_ptr(sbuf)
+ || !TEST_ptr_ne(sbuf, buf)
+ || !TEST_mem_eq(sbuf, length, out, length))
+ return 0;
+ return 1;
+}
+
+static int test_static_sha1(void)
+{
+ static const unsigned char output[SHA_DIGEST_LENGTH] = {
+ 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a,
+ 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c,
+ 0x9c, 0xd0, 0xd8, 0x9d
+ };
+
+ return test_static_sha_common("abc", SHA_DIGEST_LENGTH, output, &SHA1);
+}
+
+static int test_static_sha224(void)
+{
+ static const unsigned char output[SHA224_DIGEST_LENGTH] = {
+ 0x23, 0x09, 0x7d, 0x22, 0x34, 0x05, 0xd8, 0x22,
+ 0x86, 0x42, 0xa4, 0x77, 0xbd, 0xa2, 0x55, 0xb3,
+ 0x2a, 0xad, 0xbc, 0xe4, 0xbd, 0xa0, 0xb3, 0xf7,
+ 0xe3, 0x6c, 0x9d, 0xa7
+ };
+
+ return test_static_sha_common("abc", SHA224_DIGEST_LENGTH, output, &SHA224);
+}
+
+static int test_static_sha256(void)
+{
+ static const unsigned char output[SHA256_DIGEST_LENGTH] = {
+ 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
+ 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
+ 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
+ 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
+ };
+
+ return test_static_sha_common("abc", SHA256_DIGEST_LENGTH, output, &SHA256);
+}
+
+static int test_static_sha384(void)
+{
+ static const unsigned char output[SHA384_DIGEST_LENGTH] = {
+ 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
+ 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
+ 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
+ 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
+ 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
+ 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
+ };
+
+ return test_static_sha_common("abc", SHA384_DIGEST_LENGTH, output, &SHA384);
+}
+
+static int test_static_sha512(void)
+{
+ static const unsigned char output[SHA512_DIGEST_LENGTH] = {
+ 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
+ 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
+ 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
+ 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
+ 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
+ 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
+ 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
+ 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f
+ };
+
+ return test_static_sha_common("abc", SHA512_DIGEST_LENGTH, output, &SHA512);
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_static_sha1);
+ ADD_TEST(test_static_sha224);
+ ADD_TEST(test_static_sha256);
+ ADD_TEST(test_static_sha384);
+ ADD_TEST(test_static_sha512);
+ return 1;
+}
diff --git a/test/shibboleth.pfx b/test/shibboleth.pfx
new file mode 100644
index 000000000000..9c5cc546b893
--- /dev/null
+++ b/test/shibboleth.pfx
Binary files differ
diff --git a/test/shlibloadtest.c b/test/shlibloadtest.c
new file mode 100644
index 000000000000..5dc42a039712
--- /dev/null
+++ b/test/shlibloadtest.c
@@ -0,0 +1,292 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <openssl/opensslv.h>
+#include <openssl/ssl.h>
+#include <openssl/types.h>
+#include "simpledynamic.h"
+
+typedef void DSO;
+
+typedef const SSL_METHOD * (*TLS_method_t)(void);
+typedef SSL_CTX * (*SSL_CTX_new_t)(const SSL_METHOD *meth);
+typedef void (*SSL_CTX_free_t)(SSL_CTX *);
+typedef int (*OPENSSL_init_crypto_t)(uint64_t, void *);
+typedef int (*OPENSSL_atexit_t)(void (*handler)(void));
+typedef unsigned long (*ERR_get_error_t)(void);
+typedef unsigned long (*OPENSSL_version_major_t)(void);
+typedef unsigned long (*OPENSSL_version_minor_t)(void);
+typedef unsigned long (*OPENSSL_version_patch_t)(void);
+typedef DSO * (*DSO_dsobyaddr_t)(void (*addr)(void), int flags);
+typedef int (*DSO_free_t)(DSO *dso);
+
+typedef enum test_types_en {
+ CRYPTO_FIRST,
+ SSL_FIRST,
+ JUST_CRYPTO,
+ DSO_REFTEST,
+ NO_ATEXIT
+} TEST_TYPE;
+
+static TEST_TYPE test_type;
+static const char *path_crypto;
+static const char *path_ssl;
+static const char *path_atexit;
+
+#ifdef SD_INIT
+
+static int atexit_handler_done = 0;
+
+static void atexit_handler(void)
+{
+ FILE *atexit_file = fopen(path_atexit, "w");
+
+ if (atexit_file == NULL)
+ return;
+
+ fprintf(atexit_file, "atexit() run\n");
+ fclose(atexit_file);
+ atexit_handler_done++;
+}
+
+static int test_lib(void)
+{
+ SD ssllib = SD_INIT;
+ SD cryptolib = SD_INIT;
+ SSL_CTX *ctx;
+ union {
+ void (*func)(void);
+ SD_SYM sym;
+ } symbols[5];
+ TLS_method_t myTLS_method;
+ SSL_CTX_new_t mySSL_CTX_new;
+ SSL_CTX_free_t mySSL_CTX_free;
+ ERR_get_error_t myERR_get_error;
+ OPENSSL_version_major_t myOPENSSL_version_major;
+ OPENSSL_version_minor_t myOPENSSL_version_minor;
+ OPENSSL_version_patch_t myOPENSSL_version_patch;
+ OPENSSL_atexit_t myOPENSSL_atexit;
+ int result = 0;
+
+ switch (test_type) {
+ case JUST_CRYPTO:
+ case DSO_REFTEST:
+ case NO_ATEXIT:
+ case CRYPTO_FIRST:
+ if (!sd_load(path_crypto, &cryptolib, SD_SHLIB)) {
+ fprintf(stderr, "Failed to load libcrypto\n");
+ goto end;
+ }
+ if (test_type != CRYPTO_FIRST)
+ break;
+ /* Fall through */
+
+ case SSL_FIRST:
+ if (!sd_load(path_ssl, &ssllib, SD_SHLIB)) {
+ fprintf(stderr, "Failed to load libssl\n");
+ goto end;
+ }
+ if (test_type != SSL_FIRST)
+ break;
+ if (!sd_load(path_crypto, &cryptolib, SD_SHLIB)) {
+ fprintf(stderr, "Failed to load libcrypto\n");
+ goto end;
+ }
+ break;
+ }
+
+ if (test_type == NO_ATEXIT) {
+ OPENSSL_init_crypto_t myOPENSSL_init_crypto;
+
+ if (!sd_sym(cryptolib, "OPENSSL_init_crypto", &symbols[0].sym)) {
+ fprintf(stderr, "Failed to load OPENSSL_init_crypto symbol\n");
+ goto end;
+ }
+ myOPENSSL_init_crypto = (OPENSSL_init_crypto_t)symbols[0].func;
+ if (!myOPENSSL_init_crypto(OPENSSL_INIT_NO_ATEXIT, NULL)) {
+ fprintf(stderr, "Failed to initialise libcrypto\n");
+ goto end;
+ }
+ }
+
+ if (test_type != JUST_CRYPTO
+ && test_type != DSO_REFTEST
+ && test_type != NO_ATEXIT) {
+ if (!sd_sym(ssllib, "TLS_method", &symbols[0].sym)
+ || !sd_sym(ssllib, "SSL_CTX_new", &symbols[1].sym)
+ || !sd_sym(ssllib, "SSL_CTX_free", &symbols[2].sym)) {
+ fprintf(stderr, "Failed to load libssl symbols\n");
+ goto end;
+ }
+ myTLS_method = (TLS_method_t)symbols[0].func;
+ mySSL_CTX_new = (SSL_CTX_new_t)symbols[1].func;
+ mySSL_CTX_free = (SSL_CTX_free_t)symbols[2].func;
+ ctx = mySSL_CTX_new(myTLS_method());
+ if (ctx == NULL) {
+ fprintf(stderr, "Failed to create SSL_CTX\n");
+ goto end;
+ }
+ mySSL_CTX_free(ctx);
+ }
+
+ if (!sd_sym(cryptolib, "ERR_get_error", &symbols[0].sym)
+ || !sd_sym(cryptolib, "OPENSSL_version_major", &symbols[1].sym)
+ || !sd_sym(cryptolib, "OPENSSL_version_minor", &symbols[2].sym)
+ || !sd_sym(cryptolib, "OPENSSL_version_patch", &symbols[3].sym)
+ || !sd_sym(cryptolib, "OPENSSL_atexit", &symbols[4].sym)) {
+ fprintf(stderr, "Failed to load libcrypto symbols\n");
+ goto end;
+ }
+ myERR_get_error = (ERR_get_error_t)symbols[0].func;
+ if (myERR_get_error() != 0) {
+ fprintf(stderr, "Unexpected ERR_get_error() response\n");
+ goto end;
+ }
+
+ /* Library and header version should be identical in this test */
+ myOPENSSL_version_major = (OPENSSL_version_major_t)symbols[1].func;
+ myOPENSSL_version_minor = (OPENSSL_version_minor_t)symbols[2].func;
+ myOPENSSL_version_patch = (OPENSSL_version_patch_t)symbols[3].func;
+ if (myOPENSSL_version_major() != OPENSSL_VERSION_MAJOR
+ || myOPENSSL_version_minor() != OPENSSL_VERSION_MINOR
+ || myOPENSSL_version_patch() != OPENSSL_VERSION_PATCH) {
+ fprintf(stderr, "Invalid library version number\n");
+ goto end;
+ }
+
+ myOPENSSL_atexit = (OPENSSL_atexit_t)symbols[4].func;
+ if (!myOPENSSL_atexit(atexit_handler)) {
+ fprintf(stderr, "Failed to register atexit handler\n");
+ goto end;
+ }
+
+ if (test_type == DSO_REFTEST) {
+# ifdef DSO_DLFCN
+ DSO_dsobyaddr_t myDSO_dsobyaddr;
+ DSO_free_t myDSO_free;
+
+ /*
+ * This is resembling the code used in ossl_init_base() and
+ * OPENSSL_atexit() to block unloading the library after dlclose().
+ * We are not testing this on Windows, because it is done there in a
+ * completely different way. Especially as a call to DSO_dsobyaddr()
+ * will always return an error, because DSO_pathbyaddr() is not
+ * implemented there.
+ */
+ if (!sd_sym(cryptolib, "DSO_dsobyaddr", &symbols[0].sym)
+ || !sd_sym(cryptolib, "DSO_free", &symbols[1].sym)) {
+ fprintf(stderr, "Unable to load DSO symbols\n");
+ goto end;
+ }
+
+ myDSO_dsobyaddr = (DSO_dsobyaddr_t)symbols[0].func;
+ myDSO_free = (DSO_free_t)symbols[1].func;
+
+ {
+ DSO *hndl;
+ /* use known symbol from crypto module */
+ hndl = myDSO_dsobyaddr((void (*)(void))myERR_get_error, 0);
+ if (hndl == NULL) {
+ fprintf(stderr, "DSO_dsobyaddr() failed\n");
+ goto end;
+ }
+ myDSO_free(hndl);
+ }
+# endif /* DSO_DLFCN */
+ }
+
+ if (!sd_close(cryptolib)) {
+ fprintf(stderr, "Failed to close libcrypto\n");
+ goto end;
+ }
+ cryptolib = SD_INIT;
+
+ if (test_type == CRYPTO_FIRST || test_type == SSL_FIRST) {
+ if (!sd_close(ssllib)) {
+ fprintf(stderr, "Failed to close libssl\n");
+ goto end;
+ }
+ ssllib = SD_INIT;
+ }
+
+# if defined(OPENSSL_NO_PINSHARED) \
+ && defined(__GLIBC__) \
+ && defined(__GLIBC_PREREQ) \
+ && defined(OPENSSL_SYS_LINUX)
+# if __GLIBC_PREREQ(2, 3)
+ /*
+ * If we didn't pin the so then we are hopefully on a platform that supports
+ * running atexit() on so unload. If not we might crash. We know this is
+ * true on linux since glibc 2.2.3
+ */
+ if (test_type != NO_ATEXIT && atexit_handler_done != 1) {
+ fprintf(stderr, "atexit() handler did not run\n");
+ goto end;
+ }
+# endif
+# endif
+
+ result = 1;
+end:
+ if (cryptolib != SD_INIT)
+ sd_close(cryptolib);
+ if (ssllib != SD_INIT)
+ sd_close(ssllib);
+ return result;
+}
+#endif
+
+
+/*
+ * shlibloadtest should not use the normal test framework because we don't want
+ * it to link against libcrypto (which the framework uses). The point of the
+ * test is to check dynamic loading and unloading of libcrypto/libssl.
+ */
+int main(int argc, char *argv[])
+{
+ const char *p;
+
+ if (argc != 5) {
+ fprintf(stderr, "Incorrect number of arguments\n");
+ return 1;
+ }
+
+ p = argv[1];
+
+ if (strcmp(p, "-crypto_first") == 0) {
+ test_type = CRYPTO_FIRST;
+ } else if (strcmp(p, "-ssl_first") == 0) {
+ test_type = SSL_FIRST;
+ } else if (strcmp(p, "-just_crypto") == 0) {
+ test_type = JUST_CRYPTO;
+ } else if (strcmp(p, "-dso_ref") == 0) {
+ test_type = DSO_REFTEST;
+ } else if (strcmp(p, "-no_atexit") == 0) {
+ test_type = NO_ATEXIT;
+ } else {
+ fprintf(stderr, "Unrecognised argument\n");
+ return 1;
+ }
+ path_crypto = argv[2];
+ path_ssl = argv[3];
+ path_atexit = argv[4];
+ if (path_crypto == NULL || path_ssl == NULL) {
+ fprintf(stderr, "Invalid libcrypto/libssl path\n");
+ return 1;
+ }
+
+#ifdef SD_INIT
+ if (!test_lib())
+ return 1;
+#endif
+ return 0;
+}
diff --git a/test/simpledynamic.c b/test/simpledynamic.c
new file mode 100644
index 000000000000..2cced8c86140
--- /dev/null
+++ b/test/simpledynamic.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <stdlib.h> /* For NULL */
+#include <openssl/macros.h> /* For NON_EMPTY_TRANSLATION_UNIT */
+#include <openssl/e_os2.h>
+#include "simpledynamic.h"
+
+#if defined(DSO_DLFCN) || defined(DSO_VMS)
+
+int sd_load(const char *filename, SD *lib, int type)
+{
+ int dl_flags = type;
+#ifdef _AIX
+ if (filename[strlen(filename) - 1] == ')')
+ dl_flags |= RTLD_MEMBER;
+#endif
+ *lib = dlopen(filename, dl_flags);
+ return *lib == NULL ? 0 : 1;
+}
+
+int sd_sym(SD lib, const char *symname, SD_SYM *sym)
+{
+ *sym = dlsym(lib, symname);
+ return *sym != NULL;
+}
+
+int sd_close(SD lib)
+{
+ return dlclose(lib) != 0 ? 0 : 1;
+}
+
+const char *sd_error(void)
+{
+ return dlerror();
+}
+
+#elif defined(DSO_WIN32)
+
+int sd_load(const char *filename, SD *lib, ossl_unused int type)
+{
+ *lib = LoadLibraryA(filename);
+ return *lib == NULL ? 0 : 1;
+}
+
+int sd_sym(SD lib, const char *symname, SD_SYM *sym)
+{
+ *sym = (SD_SYM)GetProcAddress(lib, symname);
+ return *sym != NULL;
+}
+
+int sd_close(SD lib)
+{
+ return FreeLibrary(lib) == 0 ? 0 : 1;
+}
+
+const char *sd_error(void)
+{
+ static char buffer[255];
+
+ buffer[0] = '\0';
+ FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0,
+ buffer, sizeof(buffer), NULL);
+ return buffer;
+}
+
+#else
+
+NON_EMPTY_TRANSLATION_UNIT
+
+#endif
diff --git a/test/simpledynamic.h b/test/simpledynamic.h
new file mode 100644
index 000000000000..d6e1dcbfd1eb
--- /dev/null
+++ b/test/simpledynamic.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef OSSL_TEST_SIMPLEDYNAMIC_H
+# define OSSL_TEST_SIMPLEDYNAMIC_H
+
+# include "crypto/dso_conf.h"
+
+# if defined(DSO_DLFCN) || defined(DSO_VMS)
+
+# include <dlfcn.h>
+
+# define SD_INIT NULL
+# ifdef DSO_VMS
+# define SD_SHLIB 0
+# define SD_MODULE 0
+# else
+# define SD_SHLIB (RTLD_GLOBAL|RTLD_LAZY)
+# define SD_MODULE (RTLD_LOCAL|RTLD_NOW)
+# endif
+
+typedef void *SD;
+typedef void *SD_SYM;
+
+# elif defined(DSO_WIN32)
+
+# include <windows.h>
+
+# define SD_INIT 0
+# define SD_SHLIB 0
+# define SD_MODULE 0
+
+typedef HINSTANCE SD;
+typedef void *SD_SYM;
+
+# endif
+
+# if defined(DSO_DLFCN) || defined(DSO_WIN32) || defined(DSO_VMS)
+int sd_load(const char *filename, SD *sd, int type);
+int sd_sym(SD sd, const char *symname, SD_SYM *sym);
+int sd_close(SD lib);
+const char *sd_error(void);
+# endif
+
+#endif
diff --git a/test/siphash_internal_test.c b/test/siphash_internal_test.c
new file mode 100644
index 000000000000..7d1c6be9e846
--- /dev/null
+++ b/test/siphash_internal_test.c
@@ -0,0 +1,291 @@
+/*
+ * Copyright 2016-2024 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
+ */
+
+/* Internal tests for the siphash module */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/bio.h>
+#include "testutil.h"
+#include "crypto/siphash.h"
+#include "internal/nelem.h"
+
+typedef struct {
+ size_t size;
+ unsigned char data[64];
+} SIZED_DATA;
+
+typedef struct {
+ int idx;
+ SIZED_DATA expected;
+} TESTDATA;
+
+/**********************************************************************
+ *
+ * Test of siphash internal functions
+ *
+ ***/
+
+/* From C reference: https://131002.net/siphash/ */
+
+static TESTDATA tests[] = {
+ { 0, { 8, { 0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72, } } },
+ { 1, { 8, { 0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74, } } },
+ { 2, { 8, { 0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d, } } },
+ { 3, { 8, { 0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85, } } },
+ { 4, { 8, { 0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf, } } },
+ { 5, { 8, { 0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18, } } },
+ { 6, { 8, { 0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb, } } },
+ { 7, { 8, { 0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab, } } },
+ { 8, { 8, { 0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93, } } },
+ { 9, { 8, { 0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e, } } },
+ { 10, { 8, { 0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a, } } },
+ { 11, { 8, { 0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4, } } },
+ { 12, { 8, { 0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75, } } },
+ { 13, { 8, { 0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14, } } },
+ { 14, { 8, { 0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7, } } },
+ { 15, { 8, { 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1, } } },
+ { 16, { 8, { 0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f, } } },
+ { 17, { 8, { 0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69, } } },
+ { 18, { 8, { 0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b, } } },
+ { 19, { 8, { 0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb, } } },
+ { 20, { 8, { 0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe, } } },
+ { 21, { 8, { 0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0, } } },
+ { 22, { 8, { 0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93, } } },
+ { 23, { 8, { 0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8, } } },
+ { 24, { 8, { 0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8, } } },
+ { 25, { 8, { 0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc, } } },
+ { 26, { 8, { 0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17, } } },
+ { 27, { 8, { 0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f, } } },
+ { 28, { 8, { 0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde, } } },
+ { 29, { 8, { 0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6, } } },
+ { 30, { 8, { 0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad, } } },
+ { 31, { 8, { 0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32, } } },
+ { 32, { 8, { 0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71, } } },
+ { 33, { 8, { 0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7, } } },
+ { 34, { 8, { 0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12, } } },
+ { 35, { 8, { 0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15, } } },
+ { 36, { 8, { 0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31, } } },
+ { 37, { 8, { 0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02, } } },
+ { 38, { 8, { 0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca, } } },
+ { 39, { 8, { 0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a, } } },
+ { 40, { 8, { 0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e, } } },
+ { 41, { 8, { 0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad, } } },
+ { 42, { 8, { 0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18, } } },
+ { 43, { 8, { 0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4, } } },
+ { 44, { 8, { 0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9, } } },
+ { 45, { 8, { 0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9, } } },
+ { 46, { 8, { 0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb, } } },
+ { 47, { 8, { 0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0, } } },
+ { 48, { 8, { 0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6, } } },
+ { 49, { 8, { 0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7, } } },
+ { 50, { 8, { 0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee, } } },
+ { 51, { 8, { 0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1, } } },
+ { 52, { 8, { 0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a, } } },
+ { 53, { 8, { 0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81, } } },
+ { 54, { 8, { 0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f, } } },
+ { 55, { 8, { 0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24, } } },
+ { 56, { 8, { 0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7, } } },
+ { 57, { 8, { 0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea, } } },
+ { 58, { 8, { 0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60, } } },
+ { 59, { 8, { 0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66, } } },
+ { 60, { 8, { 0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c, } } },
+ { 61, { 8, { 0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f, } } },
+ { 62, { 8, { 0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5, } } },
+ { 63, { 8, { 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, } } },
+ { 0, { 16, { 0xa3, 0x81, 0x7f, 0x04, 0xba, 0x25, 0xa8, 0xe6, 0x6d, 0xf6, 0x72, 0x14, 0xc7, 0x55, 0x02, 0x93, } } },
+ { 1, { 16, { 0xda, 0x87, 0xc1, 0xd8, 0x6b, 0x99, 0xaf, 0x44, 0x34, 0x76, 0x59, 0x11, 0x9b, 0x22, 0xfc, 0x45, } } },
+ { 2, { 16, { 0x81, 0x77, 0x22, 0x8d, 0xa4, 0xa4, 0x5d, 0xc7, 0xfc, 0xa3, 0x8b, 0xde, 0xf6, 0x0a, 0xff, 0xe4, } } },
+ { 3, { 16, { 0x9c, 0x70, 0xb6, 0x0c, 0x52, 0x67, 0xa9, 0x4e, 0x5f, 0x33, 0xb6, 0xb0, 0x29, 0x85, 0xed, 0x51, } } },
+ { 4, { 16, { 0xf8, 0x81, 0x64, 0xc1, 0x2d, 0x9c, 0x8f, 0xaf, 0x7d, 0x0f, 0x6e, 0x7c, 0x7b, 0xcd, 0x55, 0x79, } } },
+ { 5, { 16, { 0x13, 0x68, 0x87, 0x59, 0x80, 0x77, 0x6f, 0x88, 0x54, 0x52, 0x7a, 0x07, 0x69, 0x0e, 0x96, 0x27, } } },
+ { 6, { 16, { 0x14, 0xee, 0xca, 0x33, 0x8b, 0x20, 0x86, 0x13, 0x48, 0x5e, 0xa0, 0x30, 0x8f, 0xd7, 0xa1, 0x5e, } } },
+ { 7, { 16, { 0xa1, 0xf1, 0xeb, 0xbe, 0xd8, 0xdb, 0xc1, 0x53, 0xc0, 0xb8, 0x4a, 0xa6, 0x1f, 0xf0, 0x82, 0x39, } } },
+ { 8, { 16, { 0x3b, 0x62, 0xa9, 0xba, 0x62, 0x58, 0xf5, 0x61, 0x0f, 0x83, 0xe2, 0x64, 0xf3, 0x14, 0x97, 0xb4, } } },
+ { 9, { 16, { 0x26, 0x44, 0x99, 0x06, 0x0a, 0xd9, 0xba, 0xab, 0xc4, 0x7f, 0x8b, 0x02, 0xbb, 0x6d, 0x71, 0xed, } } },
+ { 10, { 16, { 0x00, 0x11, 0x0d, 0xc3, 0x78, 0x14, 0x69, 0x56, 0xc9, 0x54, 0x47, 0xd3, 0xf3, 0xd0, 0xfb, 0xba, } } },
+ { 11, { 16, { 0x01, 0x51, 0xc5, 0x68, 0x38, 0x6b, 0x66, 0x77, 0xa2, 0xb4, 0xdc, 0x6f, 0x81, 0xe5, 0xdc, 0x18, } } },
+ { 12, { 16, { 0xd6, 0x26, 0xb2, 0x66, 0x90, 0x5e, 0xf3, 0x58, 0x82, 0x63, 0x4d, 0xf6, 0x85, 0x32, 0xc1, 0x25, } } },
+ { 13, { 16, { 0x98, 0x69, 0xe2, 0x47, 0xe9, 0xc0, 0x8b, 0x10, 0xd0, 0x29, 0x93, 0x4f, 0xc4, 0xb9, 0x52, 0xf7, } } },
+ { 14, { 16, { 0x31, 0xfc, 0xef, 0xac, 0x66, 0xd7, 0xde, 0x9c, 0x7e, 0xc7, 0x48, 0x5f, 0xe4, 0x49, 0x49, 0x02, } } },
+ { 15, { 16, { 0x54, 0x93, 0xe9, 0x99, 0x33, 0xb0, 0xa8, 0x11, 0x7e, 0x08, 0xec, 0x0f, 0x97, 0xcf, 0xc3, 0xd9, } } },
+ { 16, { 16, { 0x6e, 0xe2, 0xa4, 0xca, 0x67, 0xb0, 0x54, 0xbb, 0xfd, 0x33, 0x15, 0xbf, 0x85, 0x23, 0x05, 0x77, } } },
+ { 17, { 16, { 0x47, 0x3d, 0x06, 0xe8, 0x73, 0x8d, 0xb8, 0x98, 0x54, 0xc0, 0x66, 0xc4, 0x7a, 0xe4, 0x77, 0x40, } } },
+ { 18, { 16, { 0xa4, 0x26, 0xe5, 0xe4, 0x23, 0xbf, 0x48, 0x85, 0x29, 0x4d, 0xa4, 0x81, 0xfe, 0xae, 0xf7, 0x23, } } },
+ { 19, { 16, { 0x78, 0x01, 0x77, 0x31, 0xcf, 0x65, 0xfa, 0xb0, 0x74, 0xd5, 0x20, 0x89, 0x52, 0x51, 0x2e, 0xb1, } } },
+ { 20, { 16, { 0x9e, 0x25, 0xfc, 0x83, 0x3f, 0x22, 0x90, 0x73, 0x3e, 0x93, 0x44, 0xa5, 0xe8, 0x38, 0x39, 0xeb, } } },
+ { 21, { 16, { 0x56, 0x8e, 0x49, 0x5a, 0xbe, 0x52, 0x5a, 0x21, 0x8a, 0x22, 0x14, 0xcd, 0x3e, 0x07, 0x1d, 0x12, } } },
+ { 22, { 16, { 0x4a, 0x29, 0xb5, 0x45, 0x52, 0xd1, 0x6b, 0x9a, 0x46, 0x9c, 0x10, 0x52, 0x8e, 0xff, 0x0a, 0xae, } } },
+ { 23, { 16, { 0xc9, 0xd1, 0x84, 0xdd, 0xd5, 0xa9, 0xf5, 0xe0, 0xcf, 0x8c, 0xe2, 0x9a, 0x9a, 0xbf, 0x69, 0x1c, } } },
+ { 24, { 16, { 0x2d, 0xb4, 0x79, 0xae, 0x78, 0xbd, 0x50, 0xd8, 0x88, 0x2a, 0x8a, 0x17, 0x8a, 0x61, 0x32, 0xad, } } },
+ { 25, { 16, { 0x8e, 0xce, 0x5f, 0x04, 0x2d, 0x5e, 0x44, 0x7b, 0x50, 0x51, 0xb9, 0xea, 0xcb, 0x8d, 0x8f, 0x6f, } } },
+ { 26, { 16, { 0x9c, 0x0b, 0x53, 0xb4, 0xb3, 0xc3, 0x07, 0xe8, 0x7e, 0xae, 0xe0, 0x86, 0x78, 0x14, 0x1f, 0x66, } } },
+ { 27, { 16, { 0xab, 0xf2, 0x48, 0xaf, 0x69, 0xa6, 0xea, 0xe4, 0xbf, 0xd3, 0xeb, 0x2f, 0x12, 0x9e, 0xeb, 0x94, } } },
+ { 28, { 16, { 0x06, 0x64, 0xda, 0x16, 0x68, 0x57, 0x4b, 0x88, 0xb9, 0x35, 0xf3, 0x02, 0x73, 0x58, 0xae, 0xf4, } } },
+ { 29, { 16, { 0xaa, 0x4b, 0x9d, 0xc4, 0xbf, 0x33, 0x7d, 0xe9, 0x0c, 0xd4, 0xfd, 0x3c, 0x46, 0x7c, 0x6a, 0xb7, } } },
+ { 30, { 16, { 0xea, 0x5c, 0x7f, 0x47, 0x1f, 0xaf, 0x6b, 0xde, 0x2b, 0x1a, 0xd7, 0xd4, 0x68, 0x6d, 0x22, 0x87, } } },
+ { 31, { 16, { 0x29, 0x39, 0xb0, 0x18, 0x32, 0x23, 0xfa, 0xfc, 0x17, 0x23, 0xde, 0x4f, 0x52, 0xc4, 0x3d, 0x35, } } },
+ { 32, { 16, { 0x7c, 0x39, 0x56, 0xca, 0x5e, 0xea, 0xfc, 0x3e, 0x36, 0x3e, 0x9d, 0x55, 0x65, 0x46, 0xeb, 0x68, } } },
+ { 33, { 16, { 0x77, 0xc6, 0x07, 0x71, 0x46, 0xf0, 0x1c, 0x32, 0xb6, 0xb6, 0x9d, 0x5f, 0x4e, 0xa9, 0xff, 0xcf, } } },
+ { 34, { 16, { 0x37, 0xa6, 0x98, 0x6c, 0xb8, 0x84, 0x7e, 0xdf, 0x09, 0x25, 0xf0, 0xf1, 0x30, 0x9b, 0x54, 0xde, } } },
+ { 35, { 16, { 0xa7, 0x05, 0xf0, 0xe6, 0x9d, 0xa9, 0xa8, 0xf9, 0x07, 0x24, 0x1a, 0x2e, 0x92, 0x3c, 0x8c, 0xc8, } } },
+ { 36, { 16, { 0x3d, 0xc4, 0x7d, 0x1f, 0x29, 0xc4, 0x48, 0x46, 0x1e, 0x9e, 0x76, 0xed, 0x90, 0x4f, 0x67, 0x11, } } },
+ { 37, { 16, { 0x0d, 0x62, 0xbf, 0x01, 0xe6, 0xfc, 0x0e, 0x1a, 0x0d, 0x3c, 0x47, 0x51, 0xc5, 0xd3, 0x69, 0x2b, } } },
+ { 38, { 16, { 0x8c, 0x03, 0x46, 0x8b, 0xca, 0x7c, 0x66, 0x9e, 0xe4, 0xfd, 0x5e, 0x08, 0x4b, 0xbe, 0xe7, 0xb5, } } },
+ { 39, { 16, { 0x52, 0x8a, 0x5b, 0xb9, 0x3b, 0xaf, 0x2c, 0x9c, 0x44, 0x73, 0xcc, 0xe5, 0xd0, 0xd2, 0x2b, 0xd9, } } },
+ { 40, { 16, { 0xdf, 0x6a, 0x30, 0x1e, 0x95, 0xc9, 0x5d, 0xad, 0x97, 0xae, 0x0c, 0xc8, 0xc6, 0x91, 0x3b, 0xd8, } } },
+ { 41, { 16, { 0x80, 0x11, 0x89, 0x90, 0x2c, 0x85, 0x7f, 0x39, 0xe7, 0x35, 0x91, 0x28, 0x5e, 0x70, 0xb6, 0xdb, } } },
+ { 42, { 16, { 0xe6, 0x17, 0x34, 0x6a, 0xc9, 0xc2, 0x31, 0xbb, 0x36, 0x50, 0xae, 0x34, 0xcc, 0xca, 0x0c, 0x5b, } } },
+ { 43, { 16, { 0x27, 0xd9, 0x34, 0x37, 0xef, 0xb7, 0x21, 0xaa, 0x40, 0x18, 0x21, 0xdc, 0xec, 0x5a, 0xdf, 0x89, } } },
+ { 44, { 16, { 0x89, 0x23, 0x7d, 0x9d, 0xed, 0x9c, 0x5e, 0x78, 0xd8, 0xb1, 0xc9, 0xb1, 0x66, 0xcc, 0x73, 0x42, } } },
+ { 45, { 16, { 0x4a, 0x6d, 0x80, 0x91, 0xbf, 0x5e, 0x7d, 0x65, 0x11, 0x89, 0xfa, 0x94, 0xa2, 0x50, 0xb1, 0x4c, } } },
+ { 46, { 16, { 0x0e, 0x33, 0xf9, 0x60, 0x55, 0xe7, 0xae, 0x89, 0x3f, 0xfc, 0x0e, 0x3d, 0xcf, 0x49, 0x29, 0x02, } } },
+ { 47, { 16, { 0xe6, 0x1c, 0x43, 0x2b, 0x72, 0x0b, 0x19, 0xd1, 0x8e, 0xc8, 0xd8, 0x4b, 0xdc, 0x63, 0x15, 0x1b, } } },
+ { 48, { 16, { 0xf7, 0xe5, 0xae, 0xf5, 0x49, 0xf7, 0x82, 0xcf, 0x37, 0x90, 0x55, 0xa6, 0x08, 0x26, 0x9b, 0x16, } } },
+ { 49, { 16, { 0x43, 0x8d, 0x03, 0x0f, 0xd0, 0xb7, 0xa5, 0x4f, 0xa8, 0x37, 0xf2, 0xad, 0x20, 0x1a, 0x64, 0x03, } } },
+ { 50, { 16, { 0xa5, 0x90, 0xd3, 0xee, 0x4f, 0xbf, 0x04, 0xe3, 0x24, 0x7e, 0x0d, 0x27, 0xf2, 0x86, 0x42, 0x3f, } } },
+ { 51, { 16, { 0x5f, 0xe2, 0xc1, 0xa1, 0x72, 0xfe, 0x93, 0xc4, 0xb1, 0x5c, 0xd3, 0x7c, 0xae, 0xf9, 0xf5, 0x38, } } },
+ { 52, { 16, { 0x2c, 0x97, 0x32, 0x5c, 0xbd, 0x06, 0xb3, 0x6e, 0xb2, 0x13, 0x3d, 0xd0, 0x8b, 0x3a, 0x01, 0x7c, } } },
+ { 53, { 16, { 0x92, 0xc8, 0x14, 0x22, 0x7a, 0x6b, 0xca, 0x94, 0x9f, 0xf0, 0x65, 0x9f, 0x00, 0x2a, 0xd3, 0x9e, } } },
+ { 54, { 16, { 0xdc, 0xe8, 0x50, 0x11, 0x0b, 0xd8, 0x32, 0x8c, 0xfb, 0xd5, 0x08, 0x41, 0xd6, 0x91, 0x1d, 0x87, } } },
+ { 55, { 16, { 0x67, 0xf1, 0x49, 0x84, 0xc7, 0xda, 0x79, 0x12, 0x48, 0xe3, 0x2b, 0xb5, 0x92, 0x25, 0x83, 0xda, } } },
+ { 56, { 16, { 0x19, 0x38, 0xf2, 0xcf, 0x72, 0xd5, 0x4e, 0xe9, 0x7e, 0x94, 0x16, 0x6f, 0xa9, 0x1d, 0x2a, 0x36, } } },
+ { 57, { 16, { 0x74, 0x48, 0x1e, 0x96, 0x46, 0xed, 0x49, 0xfe, 0x0f, 0x62, 0x24, 0x30, 0x16, 0x04, 0x69, 0x8e, } } },
+ { 58, { 16, { 0x57, 0xfc, 0xa5, 0xde, 0x98, 0xa9, 0xd6, 0xd8, 0x00, 0x64, 0x38, 0xd0, 0x58, 0x3d, 0x8a, 0x1d, } } },
+ { 59, { 16, { 0x9f, 0xec, 0xde, 0x1c, 0xef, 0xdc, 0x1c, 0xbe, 0xd4, 0x76, 0x36, 0x74, 0xd9, 0x57, 0x53, 0x59, } } },
+ { 60, { 16, { 0xe3, 0x04, 0x0c, 0x00, 0xeb, 0x28, 0xf1, 0x53, 0x66, 0xca, 0x73, 0xcb, 0xd8, 0x72, 0xe7, 0x40, } } },
+ { 61, { 16, { 0x76, 0x97, 0x00, 0x9a, 0x6a, 0x83, 0x1d, 0xfe, 0xcc, 0xa9, 0x1c, 0x59, 0x93, 0x67, 0x0f, 0x7a, } } },
+ { 62, { 16, { 0x58, 0x53, 0x54, 0x23, 0x21, 0xf5, 0x67, 0xa0, 0x05, 0xd5, 0x47, 0xa4, 0xf0, 0x47, 0x59, 0xbd, } } },
+ { 63, { 16, { 0x51, 0x50, 0xd1, 0x77, 0x2f, 0x50, 0x83, 0x4a, 0x50, 0x3e, 0x06, 0x9a, 0x97, 0x3f, 0xbd, 0x7c, } } }
+};
+
+static int test_siphash(int idx)
+{
+ SIPHASH siphash = { 0, };
+ TESTDATA test = tests[idx];
+ unsigned char key[SIPHASH_KEY_SIZE];
+ unsigned char in[64];
+ size_t inlen = test.idx;
+ unsigned char *expected = test.expected.data;
+ size_t expectedlen = test.expected.size;
+ unsigned char out[SIPHASH_MAX_DIGEST_SIZE];
+ size_t i;
+
+ if (expectedlen != SIPHASH_MIN_DIGEST_SIZE &&
+ expectedlen != SIPHASH_MAX_DIGEST_SIZE) {
+ TEST_info("size %zu vs %d and %d", expectedlen,
+ SIPHASH_MIN_DIGEST_SIZE, SIPHASH_MAX_DIGEST_SIZE);
+ return 0;
+ }
+
+ if (!TEST_int_le(inlen, sizeof(in)))
+ return 0;
+
+ /* key and in data are 00 01 02 ... */
+ for (i = 0; i < sizeof(key); i++)
+ key[i] = (unsigned char)i;
+
+ for (i = 0; i < inlen; i++)
+ in[i] = (unsigned char)i;
+
+ if (!TEST_true(SipHash_set_hash_size(&siphash, expectedlen))
+ || !TEST_true(SipHash_Init(&siphash, key, 0, 0)))
+ return 0;
+ SipHash_Update(&siphash, in, inlen);
+ if (!TEST_true(SipHash_Final(&siphash, out, expectedlen))
+ || !TEST_mem_eq(out, expectedlen, expected, expectedlen))
+ return 0;
+
+ if (inlen > 16) {
+ if (!TEST_true(SipHash_set_hash_size(&siphash, expectedlen))
+ || !TEST_true(SipHash_Init(&siphash, key, 0, 0)))
+ return 0;
+ SipHash_Update(&siphash, in, 1);
+ SipHash_Update(&siphash, in+1, inlen-1);
+ if (!TEST_true(SipHash_Final(&siphash, out, expectedlen)))
+ return 0;
+
+ if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
+ TEST_info("SipHash test #%d/1+(N-1) failed.", idx);
+ return 0;
+ }
+ }
+
+ if (inlen > 32) {
+ size_t half = inlen / 2;
+
+ if (!TEST_true(SipHash_set_hash_size(&siphash, expectedlen))
+ || !TEST_true(SipHash_Init(&siphash, key, 0, 0)))
+ return 0;
+ SipHash_Update(&siphash, in, half);
+ SipHash_Update(&siphash, in+half, inlen-half);
+ if (!TEST_true(SipHash_Final(&siphash, out, expectedlen)))
+ return 0;
+
+ if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
+ TEST_info("SipHash test #%d/2 failed.", idx);
+ return 0;
+ }
+
+ for (half = 16; half < inlen; half += 16) {
+ if (!TEST_true(SipHash_set_hash_size(&siphash, expectedlen))
+ || !TEST_true(SipHash_Init(&siphash, key, 0, 0)))
+ return 0;
+ SipHash_Update(&siphash, in, half);
+ SipHash_Update(&siphash, in+half, inlen-half);
+ if (!TEST_true(SipHash_Final(&siphash, out, expectedlen)))
+ return 0;
+
+ if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
+ TEST_info("SipHash test #%d/%zu+%zu failed.",
+ idx, half, inlen-half);
+ return 0;
+ }
+ }
+ }
+
+ return 1;
+}
+
+static int test_siphash_basic(void)
+{
+ SIPHASH siphash = { 0, };
+ static const unsigned char key[SIPHASH_KEY_SIZE] = {0};
+ unsigned char output[SIPHASH_MAX_DIGEST_SIZE];
+
+ /* Use invalid hash size */
+ return TEST_int_eq(SipHash_set_hash_size(&siphash, 4), 0)
+ && TEST_false(SipHash_Final(&siphash, output, 0))
+ /* Use hash size = 8 */
+ && TEST_true(SipHash_set_hash_size(&siphash, 8))
+ && TEST_false(SipHash_Final(&siphash, output, 8))
+ && TEST_true(SipHash_Init(&siphash, key, 0, 0))
+ && TEST_true(SipHash_Final(&siphash, output, 8))
+ && TEST_int_eq(SipHash_Final(&siphash, output, 16), 0)
+
+ /* Use hash size = 16 */
+ && TEST_true(SipHash_set_hash_size(&siphash, 16))
+ && TEST_true(SipHash_Init(&siphash, key, 0, 0))
+ && TEST_int_eq(SipHash_Final(&siphash, output, 8), 0)
+ && TEST_true(SipHash_Final(&siphash, output, 16))
+
+ /* Use hash size = 0 (default = 16) */
+ && TEST_true(SipHash_set_hash_size(&siphash, 0))
+ && TEST_true(SipHash_Init(&siphash, key, 0, 0))
+ && TEST_int_eq(SipHash_Final(&siphash, output, 8), 0)
+ && TEST_true(SipHash_Final(&siphash, output, 16));
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_siphash_basic);
+ ADD_ALL_TESTS(test_siphash, OSSL_NELEM(tests));
+ return 1;
+}
diff --git a/test/sm2_internal_test.c b/test/sm2_internal_test.c
new file mode 100644
index 000000000000..4899d5e21313
--- /dev/null
+++ b/test/sm2_internal_test.c
@@ -0,0 +1,428 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * Low level APIs are deprecated for public use, but still ok for internal use.
+ */
+#include "internal/deprecated.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <openssl/bio.h>
+#include <openssl/evp.h>
+#include <openssl/bn.h>
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_SM2
+
+# include "crypto/sm2.h"
+
+static fake_random_generate_cb get_faked_bytes;
+
+static OSSL_PROVIDER *fake_rand = NULL;
+static uint8_t *fake_rand_bytes = NULL;
+static size_t fake_rand_bytes_offset = 0;
+static size_t fake_rand_size = 0;
+
+static int get_faked_bytes(unsigned char *buf, size_t num,
+ ossl_unused const char *name,
+ ossl_unused EVP_RAND_CTX *ctx)
+{
+ if (!TEST_ptr(fake_rand_bytes) || !TEST_size_t_gt(fake_rand_size, 0))
+ return 0;
+
+ while (num-- > 0) {
+ if (fake_rand_bytes_offset >= fake_rand_size)
+ fake_rand_bytes_offset = 0;
+ *buf++ = fake_rand_bytes[fake_rand_bytes_offset++];
+ }
+
+ return 1;
+}
+
+static int start_fake_rand(const char *hex_bytes)
+{
+ OPENSSL_free(fake_rand_bytes);
+ fake_rand_bytes_offset = 0;
+ fake_rand_size = strlen(hex_bytes) / 2;
+ if (!TEST_ptr(fake_rand_bytes = OPENSSL_hexstr2buf(hex_bytes, NULL)))
+ return 0;
+
+ /* use own random function */
+ fake_rand_set_public_private_callbacks(NULL, get_faked_bytes);
+ return 1;
+
+}
+
+static void restore_rand(void)
+{
+ fake_rand_set_public_private_callbacks(NULL, NULL);
+ OPENSSL_free(fake_rand_bytes);
+ fake_rand_bytes = NULL;
+ fake_rand_bytes_offset = 0;
+}
+
+static EC_GROUP *create_EC_group(const char *p_hex, const char *a_hex,
+ const char *b_hex, const char *x_hex,
+ const char *y_hex, const char *order_hex,
+ const char *cof_hex)
+{
+ BIGNUM *p = NULL;
+ BIGNUM *a = NULL;
+ BIGNUM *b = NULL;
+ BIGNUM *g_x = NULL;
+ BIGNUM *g_y = NULL;
+ BIGNUM *order = NULL;
+ BIGNUM *cof = NULL;
+ EC_POINT *generator = NULL;
+ EC_GROUP *group = NULL;
+ int ok = 0;
+
+ if (!TEST_true(BN_hex2bn(&p, p_hex))
+ || !TEST_true(BN_hex2bn(&a, a_hex))
+ || !TEST_true(BN_hex2bn(&b, b_hex)))
+ goto done;
+
+ group = EC_GROUP_new_curve_GFp(p, a, b, NULL);
+ if (!TEST_ptr(group))
+ goto done;
+
+ generator = EC_POINT_new(group);
+ if (!TEST_ptr(generator))
+ goto done;
+
+ if (!TEST_true(BN_hex2bn(&g_x, x_hex))
+ || !TEST_true(BN_hex2bn(&g_y, y_hex))
+ || !TEST_true(EC_POINT_set_affine_coordinates(group, generator, g_x,
+ g_y, NULL)))
+ goto done;
+
+ if (!TEST_true(BN_hex2bn(&order, order_hex))
+ || !TEST_true(BN_hex2bn(&cof, cof_hex))
+ || !TEST_true(EC_GROUP_set_generator(group, generator, order, cof)))
+ goto done;
+
+ ok = 1;
+done:
+ BN_free(p);
+ BN_free(a);
+ BN_free(b);
+ BN_free(g_x);
+ BN_free(g_y);
+ EC_POINT_free(generator);
+ BN_free(order);
+ BN_free(cof);
+ if (!ok) {
+ EC_GROUP_free(group);
+ group = NULL;
+ }
+
+ return group;
+}
+
+static int test_sm2_crypt(const EC_GROUP *group,
+ const EVP_MD *digest,
+ const char *privkey_hex,
+ const char *message,
+ const char *k_hex, const char *ctext_hex)
+{
+ const size_t msg_len = strlen(message);
+ BIGNUM *priv = NULL;
+ EC_KEY *key = NULL;
+ EC_POINT *pt = NULL;
+ unsigned char *expected = OPENSSL_hexstr2buf(ctext_hex, NULL);
+ size_t ctext_len = 0;
+ size_t ptext_len = 0;
+ uint8_t *ctext = NULL;
+ uint8_t *recovered = NULL;
+ size_t recovered_len = msg_len;
+ int rc = 0;
+
+ if (!TEST_ptr(expected)
+ || !TEST_true(BN_hex2bn(&priv, privkey_hex)))
+ goto done;
+
+ key = EC_KEY_new();
+ if (!TEST_ptr(key)
+ || !TEST_true(EC_KEY_set_group(key, group))
+ || !TEST_true(EC_KEY_set_private_key(key, priv)))
+ goto done;
+
+ pt = EC_POINT_new(group);
+ if (!TEST_ptr(pt)
+ || !TEST_true(EC_POINT_mul(group, pt, priv, NULL, NULL, NULL))
+ || !TEST_true(EC_KEY_set_public_key(key, pt))
+ || !TEST_true(ossl_sm2_ciphertext_size(key, digest, msg_len,
+ &ctext_len)))
+ goto done;
+
+ ctext = OPENSSL_zalloc(ctext_len);
+ if (!TEST_ptr(ctext))
+ goto done;
+
+ start_fake_rand(k_hex);
+ if (!TEST_true(ossl_sm2_encrypt(key, digest,
+ (const uint8_t *)message, msg_len,
+ ctext, &ctext_len))) {
+ restore_rand();
+ goto done;
+ }
+ restore_rand();
+
+ if (!TEST_mem_eq(ctext, ctext_len, expected, ctext_len))
+ goto done;
+
+ if (!TEST_true(ossl_sm2_plaintext_size(ctext, ctext_len, &ptext_len))
+ || !TEST_int_eq(ptext_len, msg_len))
+ goto done;
+
+ recovered = OPENSSL_zalloc(ptext_len);
+ if (!TEST_ptr(recovered)
+ || !TEST_true(ossl_sm2_decrypt(key, digest, ctext, ctext_len,
+ recovered, &recovered_len))
+ || !TEST_int_eq(recovered_len, msg_len)
+ || !TEST_mem_eq(recovered, recovered_len, message, msg_len))
+ goto done;
+
+ rc = 1;
+ done:
+ BN_free(priv);
+ EC_POINT_free(pt);
+ OPENSSL_free(ctext);
+ OPENSSL_free(recovered);
+ OPENSSL_free(expected);
+ EC_KEY_free(key);
+ return rc;
+}
+
+static int sm2_crypt_test(void)
+{
+ int testresult = 0;
+ EC_GROUP *gm_group = NULL;
+ EC_GROUP *test_group =
+ create_EC_group
+ ("8542D69E4C044F18E8B92435BF6FF7DE457283915C45517D722EDB8B08F1DFC3",
+ "787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E498",
+ "63E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A",
+ "421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D",
+ "0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A2",
+ "8542D69E4C044F18E8B92435BF6FF7DD297720630485628D5AE74EE7C32E79B7",
+ "1");
+
+ if (!TEST_ptr(test_group))
+ goto done;
+
+ if (!test_sm2_crypt(
+ test_group,
+ EVP_sm3(),
+ "1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0",
+ "encryption standard",
+ "004C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F"
+ "0092e8ff62146873c258557548500ab2df2a365e0609ab67640a1f6d57d7b17820"
+ "008349312695a3e1d2f46905f39a766487f2432e95d6be0cb009fe8c69fd8825a7",
+ "307B0220245C26FB68B1DDDDB12C4B6BF9F2B6D5FE60A383B0D18D1C4144ABF1"
+ "7F6252E7022076CB9264C2A7E88E52B19903FDC47378F605E36811F5C07423A2"
+ "4B84400F01B804209C3D7360C30156FAB7C80A0276712DA9D8094A634B766D3A"
+ "285E07480653426D0413650053A89B41C418B0C3AAD00D886C00286467"))
+ goto done;
+
+ /* Same test as above except using SHA-256 instead of SM3 */
+ if (!test_sm2_crypt(
+ test_group,
+ EVP_sha256(),
+ "1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0",
+ "encryption standard",
+ "004C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F"
+ "003da18008784352192d70f22c26c243174a447ba272fec64163dd4742bae8bc98"
+ "00df17605cf304e9dd1dfeb90c015e93b393a6f046792f790a6fa4228af67d9588",
+ "307B0220245C26FB68B1DDDDB12C4B6BF9F2B6D5FE60A383B0D18D1C4144ABF17F"
+ "6252E7022076CB9264C2A7E88E52B19903FDC47378F605E36811F5C07423A24B84"
+ "400F01B80420BE89139D07853100EFA763F60CBE30099EA3DF7F8F364F9D10A5E9"
+ "88E3C5AAFC0413229E6C9AEE2BB92CAD649FE2C035689785DA33"))
+ goto done;
+
+ /* From Annex C in both GM/T0003.5-2012 and GB/T 32918.5-2016.*/
+ gm_group = create_EC_group(
+ "fffffffeffffffffffffffffffffffffffffffff00000000ffffffffffffffff",
+ "fffffffeffffffffffffffffffffffffffffffff00000000fffffffffffffffc",
+ "28e9fa9e9d9f5e344d5a9e4bcf6509a7f39789f515ab8f92ddbcbd414d940e93",
+ "32c4ae2c1f1981195f9904466a39c9948fe30bbff2660be1715a4589334c74c7",
+ "bc3736a2f4f6779c59bdcee36b692153d0a9877cc62a474002df32e52139f0a0",
+ "fffffffeffffffffffffffffffffffff7203df6b21c6052b53bbf40939d54123",
+ "1");
+
+ if (!TEST_ptr(gm_group))
+ goto done;
+
+ if (!test_sm2_crypt(
+ gm_group,
+ EVP_sm3(),
+ /* privkey (from which the encrypting public key is derived) */
+ "3945208F7B2144B13F36E38AC6D39F95889393692860B51A42FB81EF4DF7C5B8",
+ /* plaintext message */
+ "encryption standard",
+ /* ephemeral nonce k */
+ "59276E27D506861A16680F3AD9C02DCCEF3CC1FA3CDBE4CE6D54B80DEAC1BC21",
+ /*
+ * expected ciphertext, the field values are from GM/T 0003.5-2012
+ * (Annex C), but serialized following the ASN.1 format specified
+ * in GM/T 0009-2012 (Sec. 7.2).
+ */
+ "307C" /* SEQUENCE, 0x7c bytes */
+ "0220" /* INTEGER, 0x20 bytes */
+ "04EBFC718E8D1798620432268E77FEB6415E2EDE0E073C0F4F640ECD2E149A73"
+ "0221" /* INTEGER, 0x21 bytes */
+ "00" /* leading 00 due to DER for pos. int with topmost bit set */
+ "E858F9D81E5430A57B36DAAB8F950A3C64E6EE6A63094D99283AFF767E124DF0"
+ "0420" /* OCTET STRING, 0x20 bytes */
+ "59983C18F809E262923C53AEC295D30383B54E39D609D160AFCB1908D0BD8766"
+ "0413" /* OCTET STRING, 0x13 bytes */
+ "21886CA989CA9C7D58087307CA93092D651EFA"))
+ goto done;
+
+ testresult = 1;
+ done:
+ EC_GROUP_free(test_group);
+ EC_GROUP_free(gm_group);
+
+ return testresult;
+}
+
+static int test_sm2_sign(const EC_GROUP *group,
+ const char *userid,
+ const char *privkey_hex,
+ const char *message,
+ const char *k_hex,
+ const char *r_hex,
+ const char *s_hex)
+{
+ const size_t msg_len = strlen(message);
+ int ok = 0;
+ BIGNUM *priv = NULL;
+ EC_POINT *pt = NULL;
+ EC_KEY *key = NULL;
+ ECDSA_SIG *sig = NULL;
+ const BIGNUM *sig_r = NULL;
+ const BIGNUM *sig_s = NULL;
+ BIGNUM *r = NULL;
+ BIGNUM *s = NULL;
+
+ if (!TEST_true(BN_hex2bn(&priv, privkey_hex)))
+ goto done;
+
+ key = EC_KEY_new();
+ if (!TEST_ptr(key)
+ || !TEST_true(EC_KEY_set_group(key, group))
+ || !TEST_true(EC_KEY_set_private_key(key, priv)))
+ goto done;
+
+ pt = EC_POINT_new(group);
+ if (!TEST_ptr(pt)
+ || !TEST_true(EC_POINT_mul(group, pt, priv, NULL, NULL, NULL))
+ || !TEST_true(EC_KEY_set_public_key(key, pt)))
+ goto done;
+
+ start_fake_rand(k_hex);
+ sig = ossl_sm2_do_sign(key, EVP_sm3(), (const uint8_t *)userid,
+ strlen(userid), (const uint8_t *)message, msg_len);
+ if (!TEST_ptr(sig)) {
+ restore_rand();
+ goto done;
+ }
+ restore_rand();
+
+ ECDSA_SIG_get0(sig, &sig_r, &sig_s);
+
+ if (!TEST_true(BN_hex2bn(&r, r_hex))
+ || !TEST_true(BN_hex2bn(&s, s_hex))
+ || !TEST_BN_eq(r, sig_r)
+ || !TEST_BN_eq(s, sig_s))
+ goto done;
+
+ ok = ossl_sm2_do_verify(key, EVP_sm3(), sig, (const uint8_t *)userid,
+ strlen(userid), (const uint8_t *)message, msg_len);
+
+ /* We goto done whether this passes or fails */
+ TEST_true(ok);
+
+ done:
+ ECDSA_SIG_free(sig);
+ EC_POINT_free(pt);
+ EC_KEY_free(key);
+ BN_free(priv);
+ BN_free(r);
+ BN_free(s);
+
+ return ok;
+}
+
+static int sm2_sig_test(void)
+{
+ int testresult = 0;
+ /* From draft-shen-sm2-ecdsa-02 */
+ EC_GROUP *test_group =
+ create_EC_group
+ ("8542D69E4C044F18E8B92435BF6FF7DE457283915C45517D722EDB8B08F1DFC3",
+ "787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E498",
+ "63E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A",
+ "421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D",
+ "0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A2",
+ "8542D69E4C044F18E8B92435BF6FF7DD297720630485628D5AE74EE7C32E79B7",
+ "1");
+
+ if (!TEST_ptr(test_group))
+ goto done;
+
+ if (!TEST_true(test_sm2_sign(
+ test_group,
+ "ALICE123@YAHOO.COM",
+ "128B2FA8BD433C6C068C8D803DFF79792A519A55171B1B650C23661D15897263",
+ "message digest",
+ "006CB28D99385C175C94F94E934817663FC176D925DD72B727260DBAAE1FB2F96F"
+ "007c47811054c6f99613a578eb8453706ccb96384fe7df5c171671e760bfa8be3a",
+ "40F1EC59F793D9F49E09DCEF49130D4194F79FB1EED2CAA55BACDB49C4E755D1",
+ "6FC6DAC32C5D5CF10C77DFB20F7C2EB667A457872FB09EC56327A67EC7DEEBE7")))
+ goto done;
+
+ testresult = 1;
+
+ done:
+ EC_GROUP_free(test_group);
+
+ return testresult;
+}
+
+#endif
+
+int setup_tests(void)
+{
+#ifdef OPENSSL_NO_SM2
+ TEST_note("SM2 is disabled.");
+#else
+ fake_rand = fake_rand_start(NULL);
+ if (fake_rand == NULL)
+ return 0;
+
+ ADD_TEST(sm2_crypt_test);
+ ADD_TEST(sm2_sig_test);
+#endif
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+#ifndef OPENSSL_NO_SM2
+ fake_rand_finish(fake_rand);
+#endif
+}
diff --git a/test/sm3_internal_test.c b/test/sm3_internal_test.c
new file mode 100644
index 000000000000..7680d0242ec6
--- /dev/null
+++ b/test/sm3_internal_test.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2021 UnionTech. 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
+ */
+
+/*
+ * Internal tests for the SM3 module.
+ */
+
+#include <string.h>
+#include <openssl/opensslconf.h>
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_SM3
+# include "internal/sm3.h"
+
+static int test_sm3(void)
+{
+ static const unsigned char input1[] = {
+ 0x61, 0x62, 0x63
+ };
+
+ /*
+ * This test vector comes from Example 1 (A.1) of GM/T 0004-2012
+ */
+ static const unsigned char expected1[SM3_DIGEST_LENGTH] = {
+ 0x66, 0xc7, 0xf0, 0xf4, 0x62, 0xee, 0xed, 0xd9,
+ 0xd1, 0xf2, 0xd4, 0x6b, 0xdc, 0x10, 0xe4, 0xe2,
+ 0x41, 0x67, 0xc4, 0x87, 0x5c, 0xf2, 0xf7, 0xa2,
+ 0x29, 0x7d, 0xa0, 0x2b, 0x8f, 0x4b, 0xa8, 0xe0
+ };
+
+ static const unsigned char input2[] = {
+ 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
+ 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
+ 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
+ 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
+ 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
+ 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
+ 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
+ 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64
+ };
+
+ /*
+ * This test vector comes from Example 2 (A.2) from GM/T 0004-2012
+ */
+ static const unsigned char expected2[SM3_DIGEST_LENGTH] = {
+ 0xde, 0xbe, 0x9f, 0xf9, 0x22, 0x75, 0xb8, 0xa1,
+ 0x38, 0x60, 0x48, 0x89, 0xc1, 0x8e, 0x5a, 0x4d,
+ 0x6f, 0xdb, 0x70, 0xe5, 0x38, 0x7e, 0x57, 0x65,
+ 0x29, 0x3d, 0xcb, 0xa3, 0x9c, 0x0c, 0x57, 0x32
+ };
+
+ SM3_CTX ctx1, ctx2;
+ unsigned char md1[SM3_DIGEST_LENGTH], md2[SM3_DIGEST_LENGTH];
+
+ if (!TEST_true(ossl_sm3_init(&ctx1))
+ || !TEST_true(ossl_sm3_update(&ctx1, input1, sizeof(input1)))
+ || !TEST_true(ossl_sm3_final(md1, &ctx1))
+ || !TEST_mem_eq(md1, SM3_DIGEST_LENGTH, expected1, SM3_DIGEST_LENGTH))
+ return 0;
+
+ if (!TEST_true(ossl_sm3_init(&ctx2))
+ || !TEST_true(ossl_sm3_update(&ctx2, input2, sizeof(input2)))
+ || !TEST_true(ossl_sm3_final(md2, &ctx2))
+ || !TEST_mem_eq(md2, SM3_DIGEST_LENGTH, expected2, SM3_DIGEST_LENGTH))
+ return 0;
+
+ return 1;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_SM3
+ ADD_TEST(test_sm3);
+#endif
+ return 1;
+}
diff --git a/test/sm4_internal_test.c b/test/sm4_internal_test.c
new file mode 100644
index 000000000000..155b16f56941
--- /dev/null
+++ b/test/sm4_internal_test.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2017 Ribose Inc. 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
+ */
+
+/*
+ * Internal tests for the SM4 module.
+ */
+
+#include <string.h>
+#include <openssl/opensslconf.h>
+#include "testutil.h"
+
+#ifndef OPENSSL_NO_SM4
+# include "crypto/sm4.h"
+
+static int test_sm4_ecb(void)
+{
+ static const uint8_t k[SM4_BLOCK_SIZE] = {
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
+ 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
+ };
+
+ static const uint8_t input[SM4_BLOCK_SIZE] = {
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
+ 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
+ };
+
+ /*
+ * This test vector comes from Example 1 of GB/T 32907-2016,
+ * and described in Internet Draft draft-ribose-cfrg-sm4-02.
+ */
+ static const uint8_t expected[SM4_BLOCK_SIZE] = {
+ 0x68, 0x1e, 0xdf, 0x34, 0xd2, 0x06, 0x96, 0x5e,
+ 0x86, 0xb3, 0xe9, 0x4f, 0x53, 0x6e, 0x42, 0x46
+ };
+
+ /*
+ * This test vector comes from Example 2 from GB/T 32907-2016,
+ * and described in Internet Draft draft-ribose-cfrg-sm4-02.
+ * After 1,000,000 iterations.
+ */
+ static const uint8_t expected_iter[SM4_BLOCK_SIZE] = {
+ 0x59, 0x52, 0x98, 0xc7, 0xc6, 0xfd, 0x27, 0x1f,
+ 0x04, 0x02, 0xf8, 0x04, 0xc3, 0x3d, 0x3f, 0x66
+ };
+
+ int i;
+ SM4_KEY key;
+ uint8_t block[SM4_BLOCK_SIZE];
+
+ ossl_sm4_set_key(k, &key);
+ memcpy(block, input, SM4_BLOCK_SIZE);
+
+ ossl_sm4_encrypt(block, block, &key);
+ if (!TEST_mem_eq(block, SM4_BLOCK_SIZE, expected, SM4_BLOCK_SIZE))
+ return 0;
+
+ for (i = 0; i != 999999; ++i)
+ ossl_sm4_encrypt(block, block, &key);
+
+ if (!TEST_mem_eq(block, SM4_BLOCK_SIZE, expected_iter, SM4_BLOCK_SIZE))
+ return 0;
+
+ for (i = 0; i != 1000000; ++i)
+ ossl_sm4_decrypt(block, block, &key);
+
+ if (!TEST_mem_eq(block, SM4_BLOCK_SIZE, input, SM4_BLOCK_SIZE))
+ return 0;
+
+ return 1;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifndef OPENSSL_NO_SM4
+ ADD_TEST(test_sm4_ecb);
+#endif
+ return 1;
+}
diff --git a/test/smcont.bin b/test/smcont.bin
new file mode 100644
index 000000000000..96e5c574857b
--- /dev/null
+++ b/test/smcont.bin
Binary files differ
diff --git a/test/smcont.txt b/test/smcont.txt
new file mode 100644
index 000000000000..9b0974621232
--- /dev/null
+++ b/test/smcont.txt
@@ -0,0 +1 @@
+Somewhat longer test content for OpenSSL CMS utility to handle, and a bit longer... \ No newline at end of file
diff --git a/test/smcont_zero.txt b/test/smcont_zero.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/test/smcont_zero.txt
diff --git a/test/smime-certs/badrsa.pem b/test/smime-certs/badrsa.pem
new file mode 100644
index 000000000000..f824fc226732
--- /dev/null
+++ b/test/smime-certs/badrsa.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIDbTCCAlWgAwIBAgIToTV4Z0iuK08vZP20oTh//hC8BDANBgkqhkiG9w0BAQ0FADAtMSswKQYD
+VfcDEyJTYW1wbGUgTEFNUFMgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MCAXDTE5MTEyMDA2NTQxOFoY
+DzIwNTIwOTI3MDY1NDE4WjAZMRcwFQYDVQQDEw5BbGljZSBMb3ZlbGFjZTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBALT0iehYOBY+TZp/T5K2KNI05Hwr+E3wP6XTvyi6WWyTgBK9LCOw
+I2juwdRrjFBmXkk7pWpjXwsA3A5GOtz0FpfgyC7OxsVcF7q4WHWZWleYXFKlQHJD73nQwXP968+A
+/3rBX7PhO0DBbZnfitOLPgPEwjTtdg0VQQ6Wz+CRQ/YbHPKaw7aRphZO63dKvIKp4cQVtkWQHi6s
+yTjGsgkLcLNau5LZDQUdsGV+SAo3nBdWCRYV+I65x8Kf4hCxqqmjV3d/2NKRu0BXnDe/N+iDz3X0
+zEoj0fqXgq4SWcC0nsG1lyyXt1TL270I6ATKRGJWiQVCCpDtc0NT6vdJ45bCSxgCAwEAAaOBlzCB
+lDAMBgNVHRMBAf8EAjAAMB4GA1UdEQQXMBWBE2FsaWNlQHNtaW1lLmV4YW1wbGUwEwYDVR0lBAww
+CgYIKwYBBQUHAwQwDwYDVR0PAQH/BAUDAwfAADAdBgNVHQ4EFgQUu/bMsi0dBhIcl64papAQ0yBm
+ZnMwHwYDVR0jBBgwFoAUeF8OWnjYa+RUcD2z3ez38fL6wEcwDQYJKoZIhvcNAQENBQADggEBABbW
+eonR6TMTckehDKNOabwaCIcekahAIL6l9tTzUX5ew6ufiAPlC6I/zQlmUaU0iSyFDG1NW14kNbFt
+5CAokyLhMtE4ASHBIHbiOp/ZSbUBTVYJZB61ot7w1/ol5QECSs08b8zrxIncf+t2DHGuVEy/Qq1d
+rBz8d4ay8zpqAE1tUyL5Da6ZiKUfWwZQXSI/JlbjQFzYQqTRDnzHWrg1xPeMTO1P2/cplFaseTiv
+yk4cYwOp/W9UAWymOZXF8WcJYCIUXkdcG/nEZxr057KlScrJmFXOoh7Y+8ON4iWYYcAfiNgpUFo/
+j8BAwrKKaFvdlZS9k1Ypb2+UQY75mKJE9Bg=
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/ca.cnf b/test/smime-certs/ca.cnf
new file mode 100644
index 000000000000..31bddea1fa03
--- /dev/null
+++ b/test/smime-certs/ca.cnf
@@ -0,0 +1,68 @@
+#
+# OpenSSL example configuration file for automated certificate creation.
+#
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+# This definition stops the following lines choking if HOME or CN
+# is undefined.
+HOME = .
+CN = "Not Defined"
+default_ca = ca
+
+####################################################################
+[ req ]
+default_bits = 2048
+default_keyfile = privkey.pem
+# Don't prompt for fields: use those in section directly
+prompt = no
+distinguished_name = req_distinguished_name
+x509_extensions = v3_ca # The extensions to add to the self signed cert
+string_mask = utf8only
+
+# req_extensions = v3_req # The extensions to add to a certificate request
+
+[ req_distinguished_name ]
+countryName = UK
+
+organizationName = OpenSSL Group
+# Take CN from environment so it can come from a script.
+commonName = $ENV::CN
+
+[ usr_cert ]
+
+# These extensions are added when 'ca' signs a request for an end entity
+# certificate
+
+basicConstraints=critical, CA:FALSE
+keyUsage=critical, nonRepudiation, digitalSignature, keyEncipherment
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid
+
+[ dh_cert ]
+
+# These extensions are added when 'ca' signs a request for an end entity
+# DH certificate
+
+basicConstraints=critical, CA:FALSE
+keyUsage=critical, keyAgreement
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid
+
+[ v3_ca ]
+
+
+# Extensions for a typical CA
+
+# PKIX recommendation.
+
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always
+basicConstraints = critical,CA:true
+keyUsage = critical, cRLSign, keyCertSign
+
diff --git a/test/smime-certs/mksmime-certs.sh b/test/smime-certs/mksmime-certs.sh
new file mode 100644
index 000000000000..76766a763d0e
--- /dev/null
+++ b/test/smime-certs/mksmime-certs.sh
@@ -0,0 +1,85 @@
+#!/bin/sh
+# Copyright 2013-2022 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
+
+
+# Utility to recreate S/MIME certificates
+
+OPENSSL=../../apps/openssl
+OPENSSL_CONF=./ca.cnf
+export OPENSSL_CONF
+
+# Root CA: create certificate directly
+CN="Test S/MIME RSA Root" $OPENSSL req -config ca.cnf -x509 -noenc \
+ -keyout smroot.pem -out smroot.pem -newkey rsa:2048 -days 36501
+
+# EE RSA certificates: create request first
+CN="Test S/MIME EE RSA #1" $OPENSSL req -config ca.cnf -noenc \
+ -keyout smrsa1.pem -out req.pem -newkey rsa:2048
+# Sign request: end entity extensions
+$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smrsa1.pem
+
+CN="Test S/MIME EE RSA #2" $OPENSSL req -config ca.cnf -noenc \
+ -keyout smrsa2.pem -out req.pem -newkey rsa:2048
+$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smrsa2.pem
+
+CN="Test S/MIME EE RSA #3" $OPENSSL req -config ca.cnf -noenc \
+ -keyout smrsa3.pem -out req.pem -newkey rsa:2048
+$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smrsa3.pem
+
+# Create DSA parameters
+
+$OPENSSL dsaparam -out dsap.pem 2048
+
+CN="Test S/MIME EE DSA #1" $OPENSSL req -config ca.cnf -noenc \
+ -keyout smdsa1.pem -out req.pem -newkey dsa:dsap.pem
+$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smdsa1.pem
+CN="Test S/MIME EE DSA #2" $OPENSSL req -config ca.cnf -noenc \
+ -keyout smdsa2.pem -out req.pem -newkey dsa:dsap.pem
+$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smdsa2.pem
+CN="Test S/MIME EE DSA #3" $OPENSSL req -config ca.cnf -noenc \
+ -keyout smdsa3.pem -out req.pem -newkey dsa:dsap.pem
+$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smdsa3.pem
+
+# Create EC parameters
+
+$OPENSSL ecparam -out ecp.pem -name P-256
+$OPENSSL ecparam -out ecp2.pem -name K-283
+
+CN="Test S/MIME EE EC #1" $OPENSSL req -config ca.cnf -noenc \
+ -keyout smec1.pem -out req.pem -newkey ec:ecp.pem
+$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smec1.pem
+CN="Test S/MIME EE EC #2" $OPENSSL req -config ca.cnf -noenc \
+ -keyout smec2.pem -out req.pem -newkey ec:ecp2.pem
+$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smec2.pem
+# Do not renew this cert as it is used for legacy data decrypt test
+#CN="Test S/MIME EE EC #3" $OPENSSL req -config ca.cnf -noenc \
+# -keyout smec3.pem -out req.pem -newkey ec:ecp.pem
+#$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+# -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smec3.pem
+# Create X9.42 DH parameters.
+$OPENSSL genpkey -genparam -algorithm DHX -out dhp.pem
+# Generate X9.42 DH key.
+$OPENSSL genpkey -paramfile dhp.pem -out smdh.pem
+$OPENSSL pkey -pubout -in smdh.pem -out dhpub.pem
+# Generate dummy request.
+CN="Test S/MIME EE DH #1" $OPENSSL req -config ca.cnf -noenc \
+ -keyout smtmp.pem -out req.pem -newkey rsa:2048
+# Sign request but force public key to DH
+$OPENSSL x509 -req -in req.pem -CA smroot.pem -days 36500 \
+ -force_pubkey dhpub.pem \
+ -extfile ca.cnf -extensions usr_cert -CAcreateserial >>smdh.pem
+# Remove temp files.
+rm -f req.pem ecp.pem ecp2.pem dsap.pem dhp.pem dhpub.pem smtmp.pem smroot.srl
diff --git a/test/smime-certs/smdh.pem b/test/smime-certs/smdh.pem
new file mode 100644
index 000000000000..273dfca5e05c
--- /dev/null
+++ b/test/smime-certs/smdh.pem
@@ -0,0 +1,47 @@
+-----BEGIN PRIVATE KEY-----
+MIICXAIBADCCAjUGByqGSM4+AgEwggIoAoIBAQCB6AUA/1eXRh+iLWHXe+lUl6e+
++460tAIIpsQ1jw1ZaTmlH9SlrWSBNVRVHwDuBW7vA+lKgBvDpCIjmhRbgrZIGwcZ
+6ruCYy5KF/B3AW5MApC9QCDaVrG6Hb7NfpMgwuUIKvvvOMrrvn4r5Oxtsx9rORTE
+bdS33MuZCOIbodjs5u+e/2hhssOwgUTMASDwXppJTyeMwAAZ+p78ByrSULP6yYdP
+PTh8sK1begDG6YTSKE3VqYNg1yaE5tQvCQ0U2L4qZ8JqexAVHbR8LA8MNhtA1pma
+Zj4q2WNAEevpprIIRXgJEZY278nPlvVeoKfOef9RBHgQ6ZTnZ1Et5iLMCwYHAoIB
+AFVgJaHfnBVJYfaQh1NyoVZJ5xX6UvvL5xEKUwwEMgs8JSOzp2UI+KRDpy9KbNH7
+93Kwa2d8Q7ynciDiCmd1ygF4CJKb4ZOwjWjpZ4DedHr0XokGhyBCyjaBxOi3i4tP
+EFO8YHs5B/yOZHzcpTfs2VxJqIm3KF8q0Ify9PWDAsgo+d21/+eye60FHjF9o2/D
+l3NRlOhUhHNGykfqFgKEEEof3/3c6r5BS0oRXdsu6dx/y2/v8j9aJoHfyGHkswxr
+ULSBxJENOBB89C+GET6yhbxV1e4SFwzHnXgG8bWXwk7bea6ZqXbHq0pT3kUiQeKe
+assXKqRBAG9NLbQ3mmx8RFkCHQDIVBWPf6VwBa2s1CAcsIziVJ8qr/KAKx9DZ3h5
+BB4CHAF3VZBAC/TB85J4PzsLJ+VrOWr0c8kQlYUR9rw=
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIFmDCCBICgAwIBAgIUWlJkHZZ2eZgkGCHFtcMAjlLdDH8wDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxNFoYDzIxMjIw
+NTA5MTUzMzE0WjBEMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEdMBsGA1UEAwwUVGVzdCBTL01JTUUgRUUgREggIzEwggNCMIICNQYHKoZIzj4C
+ATCCAigCggEBAIHoBQD/V5dGH6ItYdd76VSXp777jrS0AgimxDWPDVlpOaUf1KWt
+ZIE1VFUfAO4Fbu8D6UqAG8OkIiOaFFuCtkgbBxnqu4JjLkoX8HcBbkwCkL1AINpW
+sbodvs1+kyDC5Qgq++84yuu+fivk7G2zH2s5FMRt1Lfcy5kI4huh2Ozm757/aGGy
+w7CBRMwBIPBemklPJ4zAABn6nvwHKtJQs/rJh089OHywrVt6AMbphNIoTdWpg2DX
+JoTm1C8JDRTYvipnwmp7EBUdtHwsDww2G0DWmZpmPirZY0AR6+mmsghFeAkRljbv
+yc+W9V6gp855/1EEeBDplOdnUS3mIswLBgcCggEAVWAlod+cFUlh9pCHU3KhVknn
+FfpS+8vnEQpTDAQyCzwlI7OnZQj4pEOnL0ps0fv3crBrZ3xDvKdyIOIKZ3XKAXgI
+kpvhk7CNaOlngN50evReiQaHIELKNoHE6LeLi08QU7xgezkH/I5kfNylN+zZXEmo
+ibcoXyrQh/L09YMCyCj53bX/57J7rQUeMX2jb8OXc1GU6FSEc0bKR+oWAoQQSh/f
+/dzqvkFLShFd2y7p3H/Lb+/yP1omgd/IYeSzDGtQtIHEkQ04EHz0L4YRPrKFvFXV
+7hIXDMedeAbxtZfCTtt5rpmpdserSlPeRSJB4p5qyxcqpEEAb00ttDeabHxEWQId
+AMhUFY9/pXAFrazUIBywjOJUnyqv8oArH0NneHkDggEFAAKCAQBigH0Mp4jUMSfK
+yOhKlEfyZ/hj/EImsUYW4+u8xjBN+ruOJUTJ06Mtgw3g2iLkhQoO9NROqvC9rdLj
++j3e+1QWm9EDNKQAa4nUp8/W+XZ5KkQWudmtaojEXD1+kd44ieNLtPGuVnPtDGO4
+zPf04IUq7tDGbMDMMn6YXvW6f28lR3gF5vvVIsnjsd/Lau6orzmNSrymXegsEsFR
+Q7hT+/tPoAtro6Hx9rBrYb/0OCiRe4YuYrFKkC0aaJfUQepVyuVMSTxxKTzq8T06
+M8SBITlmkPFZJHyGzV/+a72hpJsAa0BaDnpxH3cFpEMzeYG1XQK461zexoIYN3ub
+i3xNPUzPo2AwXjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIF4DAdBgNVHQ4E
+FgQULayIqKcWHtUH4pFolI6dKxycIG8wHwYDVR0jBBgwFoAUFcETIWviVV+nah1X
+INbP86lzZFkwDQYJKoZIhvcNAQELBQADggEBAKjKvvJ6Vc9HiQXACqqRZnekz2gO
+ue71nsXXDr2+y4PPpgcDzgtO3vhQc7Akv6Uyca9LY7w/X+temP63yxdLpKXTV19w
+Or0p4VEvTZ8AttMjFh4Hl8caVYk/J4TIudSXLIfKROP6sFu5GOw7W3xpBkL5Zio6
+3dqe6xAYK0woNQPDfj5yOAlqj1Ohth81JywW5h2g8GfLtNe62coAqwjMJT+ExHfU
+EkF/beSqRGOvXwyhSxFpe7HVjUMgrgdfoZnNsoPmpH3eTiF4BjamGWI1+Z0o+RHa
+oPwN+cCzbDsi9uTQJO1D5S697heX00zzzU/KSW7djNzKv55vm24znuFkXTM=
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smdsa1.pem b/test/smime-certs/smdsa1.pem
new file mode 100644
index 000000000000..0104e207cb27
--- /dev/null
+++ b/test/smime-certs/smdsa1.pem
@@ -0,0 +1,47 @@
+-----BEGIN PRIVATE KEY-----
+MIICXQIBADCCAjYGByqGSM44BAEwggIpAoIBAQCg5xGADjdINCKODDX6yq3w8vQ1
+i0SuHnFvPc5gHMLIxJhDp3cLJ5eJmcHZ07WflsMgSxD2Wd5lX5Q9uxtv78/erv5t
+4INbA4D+QSkxb4SWNurRBQj5LuoGhFMpCubDYSxiKkTJ4pmOEbsjnlGLiN5R1jAa
+kOxI+l/rPAQlIUMCHSF6xXgd62fUdEAnRYj46Lgw+FWKAKNhcH7rOLA7k4JnYCLg
+c9HnYvwxlpoV+SHi+QXSrcrtMBNCmIgIONI5uNuBnZq6jjHE/Wg1+D4wGxOZl+/S
+8EP8eXSDD+1Sni2Jk38etU+laS0pVV9lh6sV3zV28YXVZl01CHUfwH+3w/XJAh0A
+mkjrU1XrCahV9d78Rklpd4fK3K53+X5MeTgNLQKCAQEAoA32HKvIhx6wvmT9huaw
+V6wj7hT99kjzQjZqbvLENW9bbAgOdPzZzusqZmZMgGdDr94oYz1/MhmAKNY4lQv7
+ioJmtded5hhS6GDg3Oj4IYiJ9trAQ/ATrDrSi3sQAZ3Pvip7j4oljvsQBmAj3KKR
+CnZ2/FeRyjSS3cUey89GE2N2DQbHEmuG/F8aDmUhLNusZm6nXs2Y1W7+kQRwswBL
+5H4Oo6NaSUc8dl7HWEeWoS8BE7G4JFCXBQwwgInOJINyQlknxMSpv7dwxp32SgdL
+QldkaQkHAEg0QqYb2Hv/xHfVhn9vTpGJQyWvnT5RvbXSGdTk1CTlZTrUAGmbHOwX
+ygQeAhwE9yuqObvNXzUTN+PY2rg00PzdyJw3XJAUrmlY
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIFmjCCBIKgAwIBAgIUUoOmJmXAY29/2rWY0wJphQ5/pzUwDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxNFoYDzIxMjIw
+NTA5MTUzMzE0WjBFMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEeMBwGA1UEAwwVVGVzdCBTL01JTUUgRUUgRFNBICMxMIIDQzCCAjYGByqGSM44
+BAEwggIpAoIBAQCg5xGADjdINCKODDX6yq3w8vQ1i0SuHnFvPc5gHMLIxJhDp3cL
+J5eJmcHZ07WflsMgSxD2Wd5lX5Q9uxtv78/erv5t4INbA4D+QSkxb4SWNurRBQj5
+LuoGhFMpCubDYSxiKkTJ4pmOEbsjnlGLiN5R1jAakOxI+l/rPAQlIUMCHSF6xXgd
+62fUdEAnRYj46Lgw+FWKAKNhcH7rOLA7k4JnYCLgc9HnYvwxlpoV+SHi+QXSrcrt
+MBNCmIgIONI5uNuBnZq6jjHE/Wg1+D4wGxOZl+/S8EP8eXSDD+1Sni2Jk38etU+l
+aS0pVV9lh6sV3zV28YXVZl01CHUfwH+3w/XJAh0AmkjrU1XrCahV9d78Rklpd4fK
+3K53+X5MeTgNLQKCAQEAoA32HKvIhx6wvmT9huawV6wj7hT99kjzQjZqbvLENW9b
+bAgOdPzZzusqZmZMgGdDr94oYz1/MhmAKNY4lQv7ioJmtded5hhS6GDg3Oj4IYiJ
+9trAQ/ATrDrSi3sQAZ3Pvip7j4oljvsQBmAj3KKRCnZ2/FeRyjSS3cUey89GE2N2
+DQbHEmuG/F8aDmUhLNusZm6nXs2Y1W7+kQRwswBL5H4Oo6NaSUc8dl7HWEeWoS8B
+E7G4JFCXBQwwgInOJINyQlknxMSpv7dwxp32SgdLQldkaQkHAEg0QqYb2Hv/xHfV
+hn9vTpGJQyWvnT5RvbXSGdTk1CTlZTrUAGmbHOwXygOCAQUAAoIBACGS7hCpTL0g
+lx9C1Bwz5xfVd0mwCqx9UGiH8Bf4lRsSagL0Irwvnjz++WH1vecZa2bWsYsPhQ+D
+KDzaCo20CYln4IFEPgY0fSE+KTF1icFj/mD+MgxWgsgKoTI120ENPGHqHpKkv0Uv
+OlwTImU4BxxkctZ5273XEv3VPQE8COGnXgqt7NBazU/O7vibFm0iaEsVjHFHYcoo
++sMcm3F2E/gvR9IJGaGPeCk0sMW8qloPzErWIugx/OGqM7fni2cIcZwGdju52O+l
+cLV0tZdgC7eTbVDMLspyuiYME+zvEzRwCQF/GqcCDSn68zxJv/zSNZ9XxOgZaBfs
+Na7e8YGATiujYDBeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgXgMB0GA1Ud
+DgQWBBSFVrWPZrHzhHUg0MMEAAKwQIfsazAfBgNVHSMEGDAWgBQVwRMha+JVX6dq
+HVcg1s/zqXNkWTANBgkqhkiG9w0BAQsFAAOCAQEAbm49FB+eyeX7OBUC/akhnkFw
+cDXqw7Fl2OibRK+g/08zp4CruwJdb72j5+pTmG+9SF7tGyQBfHFf1+epa3ZiIc+0
+UzFf2xQBMyHjesL19cTe4i176dHz8pCxx9OEow0GlZVV85+Anev101NskKVNNVA7
+YnB2xKQWgf8HORh66XVCk54xMcd99ng8xQ8vhZC6KckVbheQgdPp7gUAcDgxH2Yo
+JF8jHQlsWNcCGURDldP6FQ49TGWHj24IGjnjGapWxMUjvCz+kV6sGW/OIYu+MM9w
+FMIOyEdUUtKowWT6eXwrITup3T6pspPTicbK61ZCPuxMvP2JBFGZsqat+F5g+w==
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smdsa2.pem b/test/smime-certs/smdsa2.pem
new file mode 100644
index 000000000000..7d5b969dc3b3
--- /dev/null
+++ b/test/smime-certs/smdsa2.pem
@@ -0,0 +1,47 @@
+-----BEGIN PRIVATE KEY-----
+MIICXQIBADCCAjYGByqGSM44BAEwggIpAoIBAQCg5xGADjdINCKODDX6yq3w8vQ1
+i0SuHnFvPc5gHMLIxJhDp3cLJ5eJmcHZ07WflsMgSxD2Wd5lX5Q9uxtv78/erv5t
+4INbA4D+QSkxb4SWNurRBQj5LuoGhFMpCubDYSxiKkTJ4pmOEbsjnlGLiN5R1jAa
+kOxI+l/rPAQlIUMCHSF6xXgd62fUdEAnRYj46Lgw+FWKAKNhcH7rOLA7k4JnYCLg
+c9HnYvwxlpoV+SHi+QXSrcrtMBNCmIgIONI5uNuBnZq6jjHE/Wg1+D4wGxOZl+/S
+8EP8eXSDD+1Sni2Jk38etU+laS0pVV9lh6sV3zV28YXVZl01CHUfwH+3w/XJAh0A
+mkjrU1XrCahV9d78Rklpd4fK3K53+X5MeTgNLQKCAQEAoA32HKvIhx6wvmT9huaw
+V6wj7hT99kjzQjZqbvLENW9bbAgOdPzZzusqZmZMgGdDr94oYz1/MhmAKNY4lQv7
+ioJmtded5hhS6GDg3Oj4IYiJ9trAQ/ATrDrSi3sQAZ3Pvip7j4oljvsQBmAj3KKR
+CnZ2/FeRyjSS3cUey89GE2N2DQbHEmuG/F8aDmUhLNusZm6nXs2Y1W7+kQRwswBL
+5H4Oo6NaSUc8dl7HWEeWoS8BE7G4JFCXBQwwgInOJINyQlknxMSpv7dwxp32SgdL
+QldkaQkHAEg0QqYb2Hv/xHfVhn9vTpGJQyWvnT5RvbXSGdTk1CTlZTrUAGmbHOwX
+ygQeAhwmRauZi+nQ3kQ+GSKD7JCwv8XkD9NObMGlW018
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIFmjCCBIKgAwIBAgIUHGKu2FMhT1wCiJTK3uAnklo55uowDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxNFoYDzIxMjIw
+NTA5MTUzMzE0WjBFMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEeMBwGA1UEAwwVVGVzdCBTL01JTUUgRUUgRFNBICMyMIIDQzCCAjYGByqGSM44
+BAEwggIpAoIBAQCg5xGADjdINCKODDX6yq3w8vQ1i0SuHnFvPc5gHMLIxJhDp3cL
+J5eJmcHZ07WflsMgSxD2Wd5lX5Q9uxtv78/erv5t4INbA4D+QSkxb4SWNurRBQj5
+LuoGhFMpCubDYSxiKkTJ4pmOEbsjnlGLiN5R1jAakOxI+l/rPAQlIUMCHSF6xXgd
+62fUdEAnRYj46Lgw+FWKAKNhcH7rOLA7k4JnYCLgc9HnYvwxlpoV+SHi+QXSrcrt
+MBNCmIgIONI5uNuBnZq6jjHE/Wg1+D4wGxOZl+/S8EP8eXSDD+1Sni2Jk38etU+l
+aS0pVV9lh6sV3zV28YXVZl01CHUfwH+3w/XJAh0AmkjrU1XrCahV9d78Rklpd4fK
+3K53+X5MeTgNLQKCAQEAoA32HKvIhx6wvmT9huawV6wj7hT99kjzQjZqbvLENW9b
+bAgOdPzZzusqZmZMgGdDr94oYz1/MhmAKNY4lQv7ioJmtded5hhS6GDg3Oj4IYiJ
+9trAQ/ATrDrSi3sQAZ3Pvip7j4oljvsQBmAj3KKRCnZ2/FeRyjSS3cUey89GE2N2
+DQbHEmuG/F8aDmUhLNusZm6nXs2Y1W7+kQRwswBL5H4Oo6NaSUc8dl7HWEeWoS8B
+E7G4JFCXBQwwgInOJINyQlknxMSpv7dwxp32SgdLQldkaQkHAEg0QqYb2Hv/xHfV
+hn9vTpGJQyWvnT5RvbXSGdTk1CTlZTrUAGmbHOwXygOCAQUAAoIBAE0+OYS0s8/o
+HwuuiPsBZTlRynqdwF6FHdE0Ei2uVTxnJouPYB2HvaMioG2inbISzPtEcnLF9Pyx
+4hsXz7D49yqyMFjE3G8ObBOs/Vdno6E9ZZshWiRDwPf8JmoYp551UuJDoVaOTnhx
+pEs30nuidtqd54PMdWUQPfp58kTu6bXvcRxdUj5CK/PyjavJCnGfppq/6j8jtrji
+mOjIIeLZIbWp7hTVS/ffmfqZ8Lx/ShOcUzDa0VS3lfO28XqXpeqbyHdojsYlG2oA
+shKJL7/scq3ab8cI5QuHEIGSbxinKfjCX4OEQ04CNsgUwMY9emPSaNdYDZOPqq/K
+3bGk2PLcRsyjYDBeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgXgMB0GA1Ud
+DgQWBBTQAQyUCqYWGo5RuwGCtHNgXgzEQzAfBgNVHSMEGDAWgBQVwRMha+JVX6dq
+HVcg1s/zqXNkWTANBgkqhkiG9w0BAQsFAAOCAQEAc3rayE2FGgG1RhLXAHYAs1Ky
+4fcVcrzaPaz5jjWbpBCStkx+gNcUiBf+aSxNrRvUoPOSwMDLpMhbNBj2cjJqQ0W1
+oq4RUQth11qH89uPtBqiOqRTdlWAGZJbUTtVfrlc58DsDxFCwdcktSDYZwlO2lGO
+vMCOn9N7oqEEuwRa++xVnYc8ZbY8lGwJD3bGR6iC7NkYk+2LSqPS52m8e0GO8dpf
+RUrndbhmtsYa925dj2LlI218F3XwVcAUPW67dbpeEVw5OG8OCHRHqrwBEJj2PMV3
+tHeNXDEhjTzI3wiFia4kDBAKIsrC/XQ4tEiFzq0V00BiVY0ykhy+v/qNPskTsg==
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smdsa3.pem b/test/smime-certs/smdsa3.pem
new file mode 100644
index 000000000000..6df4699450f0
--- /dev/null
+++ b/test/smime-certs/smdsa3.pem
@@ -0,0 +1,47 @@
+-----BEGIN PRIVATE KEY-----
+MIICXgIBADCCAjYGByqGSM44BAEwggIpAoIBAQCg5xGADjdINCKODDX6yq3w8vQ1
+i0SuHnFvPc5gHMLIxJhDp3cLJ5eJmcHZ07WflsMgSxD2Wd5lX5Q9uxtv78/erv5t
+4INbA4D+QSkxb4SWNurRBQj5LuoGhFMpCubDYSxiKkTJ4pmOEbsjnlGLiN5R1jAa
+kOxI+l/rPAQlIUMCHSF6xXgd62fUdEAnRYj46Lgw+FWKAKNhcH7rOLA7k4JnYCLg
+c9HnYvwxlpoV+SHi+QXSrcrtMBNCmIgIONI5uNuBnZq6jjHE/Wg1+D4wGxOZl+/S
+8EP8eXSDD+1Sni2Jk38etU+laS0pVV9lh6sV3zV28YXVZl01CHUfwH+3w/XJAh0A
+mkjrU1XrCahV9d78Rklpd4fK3K53+X5MeTgNLQKCAQEAoA32HKvIhx6wvmT9huaw
+V6wj7hT99kjzQjZqbvLENW9bbAgOdPzZzusqZmZMgGdDr94oYz1/MhmAKNY4lQv7
+ioJmtded5hhS6GDg3Oj4IYiJ9trAQ/ATrDrSi3sQAZ3Pvip7j4oljvsQBmAj3KKR
+CnZ2/FeRyjSS3cUey89GE2N2DQbHEmuG/F8aDmUhLNusZm6nXs2Y1W7+kQRwswBL
+5H4Oo6NaSUc8dl7HWEeWoS8BE7G4JFCXBQwwgInOJINyQlknxMSpv7dwxp32SgdL
+QldkaQkHAEg0QqYb2Hv/xHfVhn9vTpGJQyWvnT5RvbXSGdTk1CTlZTrUAGmbHOwX
+ygQfAh0AkfI6533W5nBIVrDPcp2DCXC8u2SIwBob6OoK5A==
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIFmjCCBIKgAwIBAgIUO2QHMd9V/S6KlrFDIPd7asRP4FAwDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxNFoYDzIxMjIw
+NTA5MTUzMzE0WjBFMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEeMBwGA1UEAwwVVGVzdCBTL01JTUUgRUUgRFNBICMzMIIDQzCCAjYGByqGSM44
+BAEwggIpAoIBAQCg5xGADjdINCKODDX6yq3w8vQ1i0SuHnFvPc5gHMLIxJhDp3cL
+J5eJmcHZ07WflsMgSxD2Wd5lX5Q9uxtv78/erv5t4INbA4D+QSkxb4SWNurRBQj5
+LuoGhFMpCubDYSxiKkTJ4pmOEbsjnlGLiN5R1jAakOxI+l/rPAQlIUMCHSF6xXgd
+62fUdEAnRYj46Lgw+FWKAKNhcH7rOLA7k4JnYCLgc9HnYvwxlpoV+SHi+QXSrcrt
+MBNCmIgIONI5uNuBnZq6jjHE/Wg1+D4wGxOZl+/S8EP8eXSDD+1Sni2Jk38etU+l
+aS0pVV9lh6sV3zV28YXVZl01CHUfwH+3w/XJAh0AmkjrU1XrCahV9d78Rklpd4fK
+3K53+X5MeTgNLQKCAQEAoA32HKvIhx6wvmT9huawV6wj7hT99kjzQjZqbvLENW9b
+bAgOdPzZzusqZmZMgGdDr94oYz1/MhmAKNY4lQv7ioJmtded5hhS6GDg3Oj4IYiJ
+9trAQ/ATrDrSi3sQAZ3Pvip7j4oljvsQBmAj3KKRCnZ2/FeRyjSS3cUey89GE2N2
+DQbHEmuG/F8aDmUhLNusZm6nXs2Y1W7+kQRwswBL5H4Oo6NaSUc8dl7HWEeWoS8B
+E7G4JFCXBQwwgInOJINyQlknxMSpv7dwxp32SgdLQldkaQkHAEg0QqYb2Hv/xHfV
+hn9vTpGJQyWvnT5RvbXSGdTk1CTlZTrUAGmbHOwXygOCAQUAAoIBAEj25Os9f57G
+TaxsP8NzdCRBThCLqZWqLADh6S/aFOQQFpRRk3vGkvrOK/5La8KGKIDyzCEQo7Kg
+sPwI1o4N5GKx15Cer2ekDWLtP4hA2CChs4tWJzEa8VxIDTg4EUnASFCbfDUY/Yt0
+5NM4nxtBhnr6PT7XmRehEFaTAgmsQFJ29jKx4tJkr+Gmj9J4i10CPd9DvIgIEnNt
+rYMAlfbGovaZVCgKp5INVA4IkDfCcbzDeNiOGaACeV+4QuEbgIbUhMq9vbw3Vvqe
+jwozPdrTYjd7oNxx/tY7gqxFRFxdDPXPno230afsAJsHmNF7lpj9Q4vBhy8w/EI1
+jGzuiXjei9qjYDBeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgXgMB0GA1Ud
+DgQWBBTwbCT+wSR9cvTg70jA2yIWgQSDZjAfBgNVHSMEGDAWgBQVwRMha+JVX6dq
+HVcg1s/zqXNkWTANBgkqhkiG9w0BAQsFAAOCAQEAe5t9oi8K76y+wnV6I21vKgEh
+M6DEe3+XTq10kAgYbcbMm+a6n86beaID7FANGET+3bsShxFeAX9g4Qsdw+Z3PF3P
+wvqiBD8MaXczj28zP6j9TxsjGzpAsV3xo1n7aQ+hHzpopJUxAyx4hLBqSSwdj/xe
+azELeVKoXY/nlokXnONWC5AvtfR7m7mKFPOmUghbeGCJH7+FXnC58eiF7BEpSbQl
+SniAdQFis+Dne6/kwZnQQaSDg55ELfaZOLhaLcRtqqgU+kv24mXGGEBhs9bBKMz5
+ZNiKLafE3tCGRA5iMRwzdeSgrdnkQDHFiYXh3JHk5oKwGOdxusgt3DTHAFej1A==
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smdsap.pem b/test/smime-certs/smdsap.pem
new file mode 100644
index 000000000000..249706c8c77e
--- /dev/null
+++ b/test/smime-certs/smdsap.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBHwKBgQDFJfsIPOIawMO5biw+AoYUhNVxReBOLQosU3Qv4B8krac0BNr3OjSG
+Lh1wZxHqhlAE0QmasTaKojuk20nNWeFnczSz6vDl0IVJEhS8VYor5kt9gLqtGcoA
+gsf4gRDIutJyQDaNn3IVY89uXUVIoexvQeLQDBCgQPC5O8rJdqBwtwIVAK2Jjt+d
+qk07eQUE59koYUEKyNorAoGBAI4IEpusf8G14kCHmRtnHXM2tG5EWJDmW6Qtwjqv
+Wp1GKUx5WFy1tVWR9nl5rL0Di+kNdENo+SkKj7h3uDulGOI6T0mQYbV2h1IK+FMO
+GnOqvZ8eNTE2n4PGTo5puZ63LBm+QYrQsrNiUY4vakLFQ2rEK/SLwdsDFK4ZSJCB
+Qw5z
+-----END DSA PARAMETERS-----
diff --git a/test/smime-certs/smec1.pem b/test/smime-certs/smec1.pem
new file mode 100644
index 000000000000..a94f65c60042
--- /dev/null
+++ b/test/smime-certs/smec1.pem
@@ -0,0 +1,22 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgdOomk0EB/oWMnTZB
+Qm5XMjlKnZNF4PMpwgov0Tj3u8OhRANCAATbG6XprSqHiD9AxWJiXRFgS+y38DGZ
+7hpSjs4bd95L+Lli+O91/lUy7Tb8aJ6VU2CoyWQjV4sQjbdVqeD+y4Ky
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIICrTCCAZWgAwIBAgIUdLT4B443vbxt0B8Mzy0sR4+6AyowDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxNFoYDzIxMjIw
+NTA5MTUzMzE0WjBEMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEdMBsGA1UEAwwUVGVzdCBTL01JTUUgRUUgRUMgIzEwWTATBgcqhkjOPQIBBggq
+hkjOPQMBBwNCAATbG6XprSqHiD9AxWJiXRFgS+y38DGZ7hpSjs4bd95L+Lli+O91
+/lUy7Tb8aJ6VU2CoyWQjV4sQjbdVqeD+y4Kyo2AwXjAMBgNVHRMBAf8EAjAAMA4G
+A1UdDwEB/wQEAwIF4DAdBgNVHQ4EFgQUOia9H7l0qw3ftsDgEEeSBrHwQrwwHwYD
+VR0jBBgwFoAUFcETIWviVV+nah1XINbP86lzZFkwDQYJKoZIhvcNAQELBQADggEB
+AC7h/QkMocYANPqMQAO2okygG+OaE4qpKnlzHPUFMYedJGCvAWrwxu4hWL9T+hZo
+qilM7Fwaxw/P4Zaaa15SOOhXkIdn9Fu2ROmBQtEiklmWGMjiZ6F+9NCZPk0cTAXK
+2WQZOy41YNuvts+20osD4X/8x3fiARlokufj/TVyE73wG8pSSDh4KxWDfKv5Pi1F
+PC5IJh8XVELnFkeY3xjtoux5AYT+1xIQHO4eBua02Y1oPiWG7l/sK3grVlxrupd9
+pXowwFlezWZP9q12VlWkcqwNb9hF9PkZge9bpiOJipSYgyobtAnms/CRHu3e6izl
+LJRua7p4Wt/8GQENDrVkHqU=
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smec2.pem b/test/smime-certs/smec2.pem
new file mode 100644
index 000000000000..3fe14b3a1193
--- /dev/null
+++ b/test/smime-certs/smec2.pem
@@ -0,0 +1,23 @@
+-----BEGIN PRIVATE KEY-----
+MIGQAgEAMBAGByqGSM49AgEGBSuBBAAQBHkwdwIBAQQkAEkuzLBwx5bIw3Q2PMNQ
+HzaY8yL3QLjzaJ8tCHrI/JTb9Q7VoUwDSgAEAu8b2HvLzKd0qhPtIw65Lh3OgF3X
+IN5874qHwt9zPSvokijSAH3v9tcBJPdRLD3Lweh2ZPn5hMwVwVorHqSgASk5vnjp
+HqER
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIICsjCCAZqgAwIBAgIUFMjrNKt+D8tzvn7jtjZ5HrLcUlswDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxNFoYDzIxMjIw
+NTA5MTUzMzE0WjBEMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEdMBsGA1UEAwwUVGVzdCBTL01JTUUgRUUgRUMgIzIwXjAQBgcqhkjOPQIBBgUr
+gQQAEANKAAQC7xvYe8vMp3SqE+0jDrkuHc6AXdcg3nzviofC33M9K+iSKNIAfe/2
+1wEk91EsPcvB6HZk+fmEzBXBWisepKABKTm+eOkeoRGjYDBeMAwGA1UdEwEB/wQC
+MAAwDgYDVR0PAQH/BAQDAgXgMB0GA1UdDgQWBBSqWRYUy2syIUwfSR31e19LeNXK
+9TAfBgNVHSMEGDAWgBQVwRMha+JVX6dqHVcg1s/zqXNkWTANBgkqhkiG9w0BAQsF
+AAOCAQEASbh+sI03xUMMzPT8bRbWNF5gG3ab8IUzqm05rTa54NCPRSn+ZdMXcCFz
+5fSU0T1dgEjeD+cCRVAZxskTZF7FWmRLc2weJMf7x+nPE5KaWyRAoD7FIKGP2m6m
+IMCVOmiafuzmHASBYOz6RwjgWS0AWES48DJX6o0KpuT4bsknz+H7Xo+4+NYGCRao
+enqIMZmWesGVXJ63pl32jUlXeAg59W6PpV2L9XRWLzDW1t1q2Uji7coCWtNjkojZ
+rv0yRMc1czkT+mAJRAJ8D9MoTnRXm1dH4bOxte4BGUHNQ2P1HeV01vkd1RTL0g0R
+lPyDAlBASvMn7RZ9nX8G3UOOL6gtVA==
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smec3.pem b/test/smime-certs/smec3.pem
new file mode 100644
index 000000000000..90eac867d0dc
--- /dev/null
+++ b/test/smime-certs/smec3.pem
@@ -0,0 +1,22 @@
+-----BEGIN PRIVATE KEY-----
+MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQga03Rl+2K38wgwVyJ
+zSy+knGorGWZBGG5p//ke0WUSbqhRANCAARH8uHBHkuOfuyXgJj7V3lNqUEPiQNo
+xG8ntGjVmKRHfywdUoQJ1PgfbkCEsBk334rRFmja1r+MYyqn/A9ARiGB
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIICoDCCAYigAwIBAgIJAPaEOllWs/pjMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNV
+BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMR0wGwYDVQQDDBRUZXN0IFMv
+TUlNRSBSU0EgUm9vdDAeFw0xNzA4MTAxNTQyMDhaFw0yNzA2MTkxNTQyMDhaMEQx
+CzAJBgNVBAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMR0wGwYDVQQDDBRU
+ZXN0IFMvTUlNRSBFRSBFQyAjMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEfy
+4cEeS45+7JeAmPtXeU2pQQ+JA2jEbye0aNWYpEd/LB1ShAnU+B9uQISwGTffitEW
+aNrWv4xjKqf8D0BGIYGjYDBeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgXg
+MB0GA1UdDgQWBBQLR+H9CmAY/KDyXWdVUM9FP766WzAfBgNVHSMEGDAWgBT3YQTy
+KJTdSIrnOcPj3pm5oVNtazANBgkqhkiG9w0BAQsFAAOCAQEAmMRuf8Iz5fr9f0GA
+HaNiOM5S7AIfZ6W7zzdeF63EF1j9HqP1DJsUW4y5b9azWmpp62kKuNaM4CGPUVvm
+diLKJVlrDcc+6lW9oROpnBsskhjqFMTjTANPQSAKZeKiG2W3U8Q103VQpuYvE4Nj
+OU9JT+5e4RZS7wxYk/IsvnyF/DkoF1FTMHo9/3Wiw4V4KRhpJIPnqojWNcfipmhM
+UDpbw0Oyj5fE7x6wvaoOUr8GNJE5NudtV/5QDh9REkjyKUdVYsuUrWwKqn3NT8EI
+OLl8wx3RqA8htRg/W+SoESx87rvW1saPGvfypBp4cl18B1IzTlC+FMbHFJvZqQn8
+Ci1l4Q==
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smroot.pem b/test/smime-certs/smroot.pem
new file mode 100644
index 000000000000..9af38d310b4f
--- /dev/null
+++ b/test/smime-certs/smroot.pem
@@ -0,0 +1,49 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDZLSl8LdU54OUA
+T8ctFuKLShJul2IMzaEDkFLoL4agccajgvsRxW+8vbc2Re0y1mVMvfNz7Cg5a7Ke
+iSuFJOrQtvDt+HkU5c706YDmw15mBpDSHapkXr80G/ABFbstWafOfagVW45wv65K
+H4cnpcqwrLhagmC8QG0KfWbf+Z2efOxaGu/dTNA3Cnq/BQGTdlkQ28xbrvd+Ubzg
+cY4Y/hJ7Fw1/IeEhgr/iVJhQIUAklp9B+xqDfWuxIt5mNwWWh/Lfk+UxqE99EhQR
+0YZWyIKfKzbeJLBzDqY2hQzVL6kAvY9cR1WbBItTA0G2F5qZ9B/3EHEFWZMBvobt
++UTEkuBdAgMBAAECggEAF3Eagz7nPyIZVdlGpIVN2r8aEjng6YTglmPjrxBCNdtS
+F6AxvY9UKklIF2Gg4tXlhU0TlDWvedM4Koif2/VKK1Ez3FvvpePQXPs/YKlB7T1U
+MHnnRII9nUBOva88zv5YcJ97nyKM03q9M18H1a29nShnlc1w56EEpBc5HX/yFYMv
+kMYydvB5j0DQkJlkQNFn4yRag0wIIPeyXwwh5l98SMlr40hO10OYTOQPrrgP/ham
+AOZ//DvGo5gF8hGJYoqG4vcYbxRfTqbc2lQ4XRknOT182l9gRum52ahkBY6LKb4r
+IZXPStS6fCAR5S0lcdBb3uN/ap9SUfb9w/Dhj5DZAQKBgQDr06DcsBpoGV2dK9ib
+YL5MxC5JL7G79IBPi3ThRiOSttKXv3oDAFB0AlJvFKwYmVz8SxXqQ2JUA4BfvMGF
+TNrbhukzo0ou5boExnQW/RjLN3fWVq1JM7iLbNU9YYpPCIG5LXrt4ZDOwITeGe8f
+bmZK9zxWxc6BBJtc3mTFS5tm4QKBgQDrwRyEn6oZ9TPbR69fPgWvDqQwKs+6TtYn
+0otMG9UejbSMcyU4sI+bZouoca2CzoNi2qZVIvI9aOygUHQAP7Dyq1KhsvYtzJub
+KEua379WnzBMMjJ56Q/e4aKTq229QvOk+ZEYl6aklZX7xnYetYNZQrp4QzUyOQTG
+gfxgxKi0/QKBgQCy1esAUJ/F366JOS3rLqNBjehX4c5T7ae8KtJ433qskO4E29TI
+H93jC7u9txyHDw5f2QUGgRE5Cuq4L2lGEDFMFvQUD7l69QVrB6ATqt25hhffuB1z
+DMDfIqpXAPgk1Rui9SVq7gqlb4OS9nHLESqLoQ/l8d2XI4o6FACxSZPQoQKBgQCR
+8AvwSUoqIXDFaB22jpVEJYMb0hSfFxhYtGvIZF5MOJowa0L6UcnD//mp/xzSoXYR
+pppaj3R28VGxd7wnP0YRIl7XfAoKleMpbAtJRwKR458pO9WlQ9GwPeq/ENqw0xYx
+5M+d8pqUvYiHv/X00pYJllYKBkiS21sKawLJAFQTHQKBgQCJCwVHxvxkdQ8G0sU2
+Vtv2W38hWOSg5+cxa+g1W6My2LhX34RkgKzuaUpYMlWGHzILpxIxhPrVLk1ZIjil
+GIP969XJ1BjB/kFtLWdxXG8tH1If3JgzfSHUofPHF3CENoJYEZ1ugEfIPzWPZJDI
+DL5zP8gmBL9ZAOO/J9YacxWYMQ==
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIUBxh2L3ItsVPuBogDI0WfUX1lFnMwDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxM1oYDzIxMjIw
+NTEwMTUzMzEzWjBEMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEdMBsGA1UEAwwUVGVzdCBTL01JTUUgUlNBIFJvb3QwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQDZLSl8LdU54OUAT8ctFuKLShJul2IMzaEDkFLoL4ag
+ccajgvsRxW+8vbc2Re0y1mVMvfNz7Cg5a7KeiSuFJOrQtvDt+HkU5c706YDmw15m
+BpDSHapkXr80G/ABFbstWafOfagVW45wv65KH4cnpcqwrLhagmC8QG0KfWbf+Z2e
+fOxaGu/dTNA3Cnq/BQGTdlkQ28xbrvd+UbzgcY4Y/hJ7Fw1/IeEhgr/iVJhQIUAk
+lp9B+xqDfWuxIt5mNwWWh/Lfk+UxqE99EhQR0YZWyIKfKzbeJLBzDqY2hQzVL6kA
+vY9cR1WbBItTA0G2F5qZ9B/3EHEFWZMBvobt+UTEkuBdAgMBAAGjYzBhMB0GA1Ud
+DgQWBBQVwRMha+JVX6dqHVcg1s/zqXNkWTAfBgNVHSMEGDAWgBQVwRMha+JVX6dq
+HVcg1s/zqXNkWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkq
+hkiG9w0BAQsFAAOCAQEAvdAmpDPi1Wt7Hk30dXKF7Ug6MUKETi+uoO1Suo9JhNko
+/cpvoi8fbo/dnWVDfHVoItEn644Svver5UJdKJY62DvhilpCtAywYfCpgxkpKoKE
+dnpjnRBSMcbVDImsqvf1YjzFKiOiD7kcVvz4V0NZY91ZWwu3vgaSvcTJQkpWN0a+
+LWanpVKqigl8nskttnBeiHDHGebxj3hawlIdtVlkbQwLLwlVkX99x1F73uS33IzB
+Y6+ZJ2is7mD839B8fOVd9pvPvBBgahIrw5tzJ/Q+gITuVQd9E6RVXh10/Aw+i/8S
+7tHpEUgP3hBk1P+wRQBWDxbHB28lE+41jvh3JObQWQ==
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smrsa1.pem b/test/smime-certs/smrsa1.pem
new file mode 100644
index 000000000000..d32d88904788
--- /dev/null
+++ b/test/smime-certs/smrsa1.pem
@@ -0,0 +1,49 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDax3T7alefZcbm
+CcdN0kEoBLwV8H25vre43RYjuPo64TBjeKUy27ayC1TXydF1eYm3HPrFYfkS0fZ6
+YK0xvwyxiQnesvcfnVe2fpXFPsl5RQvu1JKM7rJAuLC+YTRLez07IHhQnHQ25ZkR
++B4SL5mIhuOSJ9yyFJYJQ3Kdw/aX/jtnWVR8p3FyghJptWIm90ufW4xWFY0yNSW1
+KmkZuOWF7VPh5RC1C7woB/RHhyD2gOP7tF+eDJ/QbX4iki4gPRFHuNrSV8ZpvDkI
+qqyF5BW8tyJneDkoWW8IuEpmNIzfbOCHvI6y7roeAmRrwH4/o5WxaEIsnQ/3pNvj
+n6+vA+nfAgMBAAECggEAFR5MHQQYCYjDXoDoI7YdgwA+AFIoGLjKYZu5yjX4tZv3
+gJ/si7sTaMlY5cGTU1HUPirxIVeCjv4Eha31BJ3KsGJ9jj6Gm0nOuzd/O+ctKeRv
+2/HaDvpFlk4dsCrlkjmxteuS9u5l9hygniWYutcBwjY0cRnMScZcm0VO+DVVMDj0
+9yNrFzhlmqV+ckawjK/J91r0uvnCVIsGA6akhlc5K0gwvFb/CC1WuceEeGx/38k3
+4OuiHtLyJfIlgyGD8C3QfJlMOBHeQ/DCo6GMqrOAad/chtcO7JklcJ+k2qylP2gu
+e25NJCQVh+L32b9WrH3quH6fbLIg8a8MmUWl6te3FQKBgQDddu0Dp8R8fe2WnAE5
+oXdASAf2BpthRNqUdYpkkO7gOV0MXCKIEiGZ+WuWEYmNlsXZCJRABprqLw9O/5Td
+2q+rCbdG9mSW2x82t/Ia4zd3r0RSHZyKbtOLtgmWfQkwVHy+rED8Juie5bNzHbjS
+1mYtFP2KDQ5yZA95yFg8ZtXOawKBgQD85VOPnfXGOJ783JHepAn4J2x1Edi+ZDQ+
+Ml9g2LwetI46dQ0bF6V8RtcyWp0+6+ydX5U4JKhERFDivolD7Z1KFmlNLPs0cqSX
+5g5kzTD+R+zpr9FRragYKyLdHsLP0ur75Rh5FQkUl2DmeKCMvMKAkio0cduVpVXT
+SvWUBtkHXQKBgBy4VoZZ1GZcolocwx/pK6DfdoDWXIIhvsLv91GRZhkX91QqAqRo
+zYi9StF8Vr1Q5zl9HlSrRp3GGpMhG/olaRCiQu1l+KeDpSmgczo/aysPRKntgyaE
+ttRweA/XCUEGQ+MqTYcluJcarMnp+dUFztxb04F6rfvxs/wUGjVDFMkfAoGBAK+F
+wx9UtPZk6gP6Wsu58qlnQ2Flh5dtGM1qTMR86OQu0OBFyVjaaqL8z/NE7Qp02H7J
+jlmvJ5JqD/Gv6Llau+Zl86P66kcWoqJCrA7OU4jJBueSfadA7gAIQGRUK0Xuz+UQ
+tpGjRfAiuMB9TIEhqaVuzRglRhBw9kZ2KkgZEJyJAoGBANrEpEwOhCv8Vt1Yiw6o
+co96wYj+0LARJXw6rIfEuLkthBRRoHqQMKqwIGMrwjHlHXPnQmajONzIJd+u+OS4
+psCGetAIGegd3xNVpK2uZv9QBWBpQbuofOh/c2Ctmm2phL2sVwCZ0qwIeXuBwJEc
+NOlOojKDO+dELErpShJgFIaU
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIDeTCCAmGgAwIBAgIUM6U1Peo3wzfAJIrzINejJJfmRzkwDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxM1oYDzIxMjIw
+NTA5MTUzMzEzWjBFMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEeMBwGA1UEAwwVVGVzdCBTL01JTUUgRUUgUlNBICMxMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA2sd0+2pXn2XG5gnHTdJBKAS8FfB9ub63uN0WI7j6
+OuEwY3ilMtu2sgtU18nRdXmJtxz6xWH5EtH2emCtMb8MsYkJ3rL3H51Xtn6VxT7J
+eUUL7tSSjO6yQLiwvmE0S3s9OyB4UJx0NuWZEfgeEi+ZiIbjkifcshSWCUNyncP2
+l/47Z1lUfKdxcoISabViJvdLn1uMVhWNMjUltSppGbjlhe1T4eUQtQu8KAf0R4cg
+9oDj+7Rfngyf0G1+IpIuID0RR7ja0lfGabw5CKqsheQVvLciZ3g5KFlvCLhKZjSM
+32zgh7yOsu66HgJka8B+P6OVsWhCLJ0P96Tb45+vrwPp3wIDAQABo2AwXjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIF4DAdBgNVHQ4EFgQUHw4Us7FXwgLtZ1JB
+MOAHSkNYfEkwHwYDVR0jBBgwFoAUFcETIWviVV+nah1XINbP86lzZFkwDQYJKoZI
+hvcNAQELBQADggEBAAMAXEjTNo7evn6BvfEaG2q21q9xfFear/M0zxc5xcTj+WP+
+BKrlxXg5RlVFyvmzGhwZBERsDMJYa54aw8scDJsy/0zPdWST39dNev7xH13pP8nF
+QF4MGPKIqBzX8iDCqhz70p1w2ndLjz1dvsAqn6z9/Sh3T2kj6DfZY3jA49pMEim1
+vYd4lWa5AezU3+cLtBbo2c2iyG2W7SFpnNTjLX823f9rbVPnUb93ZI/tDXDIf5hL
+0hocZs+MWdC7Ly1Ru4PXa6+DeOM0z673me/Q27e24OBbG2eq5g7eW5euxJinGkpI
+XGGKTKrBCPxSdTtwSNHU9HsggT8a0wXL2QocZ3w=
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smrsa2.pem b/test/smime-certs/smrsa2.pem
new file mode 100644
index 000000000000..a7a21fc80fac
--- /dev/null
+++ b/test/smime-certs/smrsa2.pem
@@ -0,0 +1,49 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDkoMi4sqj2mN8j
+SaFAibXEfeYYrzBHIdCm/uaXWit81fXOSFVw1rbeAppxz7bOcSEN50lpdP2UX3/b
+FYFD3exHXjvch9NPNgQaNkCqTNTuYa2L9wrpltXnon7tH3W/zZfF+/qpUSu1f6rk
+GyxjVXxLwjIawCX0rbLcdFCVVy+EyvQkvSxXjafrDMzshWzPDbtjUv3SH6avqrPn
+4NX0fv3BdBwTfDLAw/m8nN+9B9Mg0V7UNM1IJY/Vo5pLhv+MrEf8SnAS+1Wt43rT
+3PY9iMZMMWUswdgmPY0yCN95ggwNrSMGV60yvEDxINWuJoR8s0lybDdFa+AB5v4T
+hqKpspFNAgMBAAECggEAZmWu0K5QJ7Y7Rlo9ayLicsFyk36vUESQZ6MF0ybzEEPi
+BkR2ZAX+vDuNQckm1pprlAcRZbactl35bT3Z+fQE1cgaZoC8/x6xwq2m0796pNPB
+v0zjqdBBOLAaSgjLm56wyd88GqZ8vZsTBnw3KrxIYcP13e5OcaJ0V/GOf/yfD0lg
+Tq9i7V5Iq++Fpo2KvJA8FMgqcfhvhdo40rRykoBfzEZpBk4Ia/Yijsbx5sE15pFZ
+DfmsMbD+vViuM8IavHo61mBNyYeydwlgIMqUgP/6xbYUov/XSUojrLG+IQuvDx9D
+xzTHGM+IBJxQZMza/mDVcjUAcDEjWt/Mve8ibTQCbwKBgQDyaiGsURtlf/8xmmvT
+RQQFFFsJ8SXHNYmnceNULIjfDxpLk1yC4kBNUD+liAJscoVlOcByHmXQRtnY1PHq
+AwyrwplGd82773mtriDVFSjhD+GB7I0Hv2j+uiFZury0jR/6/AsWKCtTqd0opyuB
+8rGZjguiwZIjeyxd8mL1dncUHwKBgQDxcNxHUvIeDBvAmtK65xWUuLcqtK9BblBH
+YVA7p93RqX4E+w3J0OCvQRQ3r1GCMMzFEO0oOvNfMucU4rbQmx1pbzF8aQU+8iEW
+kYpaWUbPUQ2hmBblhjGYHsigt/BrzaW0QveVIWcGiyVVX9wiCzJH5moJlCRK2oHR
+B36hdlmNEwKBgQCSlWSpOx4y4RQiHXtn9Eq6+5UVTPGIJTKIwxAwnQFiyFIhMwl0
+x3UUixsBcF3uz80j6akaGJF+QOmH+TQTSibGUdS3TMhmBSfxwuJtlu7yMNUu6Chb
+b/4AUfLKvGVRVCjrbq8Rhda1L3jhFTz0xhlofgFBOIWy2M96O5BlV24oBwKBgQDs
+cf93ZfawkGEZVUXsPeQ3mlHe48YCCPtbfCSr13B3JErCq+5L52AyoUQgaHQlUI8o
+qrPmQx0V7O662G/6iP3bxEYtNVgq1cqrpGpeorGi1BjKWPyLWMj21abbJmev21xc
+1XxLMsQHd3tfSZp2SIq8OR09NjP4jla1k2Ziz1lRuwKBgQCUJXjhW4dPoOzC7DJK
+u4PsxcKkJDwwtfNudVDaHcbvvaHELTAkE2639vawH0TRwP6TDwmlbTQJP4EW+/0q
+13VcNXVAZSruA9dvxlh4vNUH3PzTDdFIJzGVbYbV9p5t++EQ7gRLuLZqs99BOzM9
+k6W9F60mEFz1Owh+lQv7WfSIVA==
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIDeTCCAmGgAwIBAgIUTMQXiTcI/rpzqO91NyFWpjLE3KkwDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxM1oYDzIxMjIw
+NTA5MTUzMzEzWjBFMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEeMBwGA1UEAwwVVGVzdCBTL01JTUUgRUUgUlNBICMyMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5KDIuLKo9pjfI0mhQIm1xH3mGK8wRyHQpv7ml1or
+fNX1zkhVcNa23gKacc+2znEhDedJaXT9lF9/2xWBQ93sR1473IfTTzYEGjZAqkzU
+7mGti/cK6ZbV56J+7R91v82Xxfv6qVErtX+q5BssY1V8S8IyGsAl9K2y3HRQlVcv
+hMr0JL0sV42n6wzM7IVszw27Y1L90h+mr6qz5+DV9H79wXQcE3wywMP5vJzfvQfT
+INFe1DTNSCWP1aOaS4b/jKxH/EpwEvtVreN609z2PYjGTDFlLMHYJj2NMgjfeYIM
+Da0jBletMrxA8SDVriaEfLNJcmw3RWvgAeb+E4aiqbKRTQIDAQABo2AwXjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIF4DAdBgNVHQ4EFgQUSJ0v3SKahe6eKssR
+rBvYLBprFTgwHwYDVR0jBBgwFoAUFcETIWviVV+nah1XINbP86lzZFkwDQYJKoZI
+hvcNAQELBQADggEBAKoyszyZ3DfCOIVzeJrnScXuMvRkVqO5aGmgZxtY9r6gPk8v
+gXaEFXDKqRbGqEnuwEjpew+SVZO8nrVpdIP7fydpufy7Cu91Ev4YL1ui5Vc66+IK
+7dXV7eZYcH/dDJBPZddHx9vGhcr0w8B1W9nldM3aQE/RQjOmMRDc7/Hnk0f0RzJp
+LA0adW3ry27z2s4qeCwkV9DNSh1KoGfcLwydBiXmJ1XINMFH/scD4pk9UeJpUL+5
+zvTaDzUmzLsI1gH3j/rlzJuNJ7EMfggKlfQdit9Qn6+6Gjk6T5jkZfzcq3LszuEA
+EFtkxWyBmmEgh4EmvZGAyrUvne1hIIksKe3iJ+E=
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smrsa3-cert.pem b/test/smime-certs/smrsa3-cert.pem
new file mode 100644
index 000000000000..70004acb8698
--- /dev/null
+++ b/test/smime-certs/smrsa3-cert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDeTCCAmGgAwIBAgIUIDyc//j/LoNDesZTGbPBoVarv4EwDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxM1oYDzIxMjIw
+NTA5MTUzMzEzWjBFMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEeMBwGA1UEAwwVVGVzdCBTL01JTUUgRUUgUlNBICMzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA+QP7d56K4/9eu7aChtWILYNxvqWeDcJeWvX5Z5vC
+XUjFuUxBD9U0rw1SBLgFYu8aqAJ+oXsqaGjJARifgKEqPUe7pnYYatr55lhTbHR+
+qA88p1V4sclEaPNWKzd7J/V3eeYr04kqWV5XYhAq9k9AWLzsNIePe2z7OoGPS6oK
+wRzWFRd5RYXTpmFr/tqknbYvtYFd7duKb9QqytgHV+RKXXeY0fnjZ7frLmaqDwtI
+U3DY7MyS3Hw2BVx72vQXBNA364HGEpqEgVOdzI7et0wpSumaFXDye714xUR53L7N
+f3fp3PQXS/RbBiNXs7KUsHCR6nsdsIKO+sg66gxOLNt6zwIDAQABo2AwXjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIF4DAdBgNVHQ4EFgQUN9pGq/UFS3o50rTi
+V+AYgAk+3R4wHwYDVR0jBBgwFoAUFcETIWviVV+nah1XINbP86lzZFkwDQYJKoZI
+hvcNAQELBQADggEBAGcOh380/6aJqMpYBssuf2CB3DX/hGKdvEF7fF8iNSfl5HHq
+112kHl3MhbL9Th/safJq9sLDJqjXRNdVCUJJbU4YI2P2gsi04paC0qxWxMLtzQLd
+CE7ki2xH94Fuu/dThbpzZBABROO1RrdI24GDGt9t4Gf0WVkobmT/zNlwGppKTIB2
+iV/Ug30iKr/C49UzwUIa+XXXujkjPTmGSnrKwVQNxQh81rb+iTL7GEnNuqDsatHW
+ZyLS2SaVdG5tMqDkITPMDGjehUzJcAbVc8Bv4m8Ukuov3uDj2Doc6MxlvrVkV0AE
+BcSCb/bWQJJ/X4LQZlx9cMk4NINxV9UeFPZOefg=
+-----END CERTIFICATE-----
diff --git a/test/smime-certs/smrsa3-key.pem b/test/smime-certs/smrsa3-key.pem
new file mode 100644
index 000000000000..216d70b61b74
--- /dev/null
+++ b/test/smime-certs/smrsa3-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQD5A/t3norj/167
+toKG1Ygtg3G+pZ4Nwl5a9flnm8JdSMW5TEEP1TSvDVIEuAVi7xqoAn6heypoaMkB
+GJ+AoSo9R7umdhhq2vnmWFNsdH6oDzynVXixyURo81YrN3sn9Xd55ivTiSpZXldi
+ECr2T0BYvOw0h497bPs6gY9LqgrBHNYVF3lFhdOmYWv+2qSdti+1gV3t24pv1CrK
+2AdX5Epdd5jR+eNnt+suZqoPC0hTcNjszJLcfDYFXHva9BcE0DfrgcYSmoSBU53M
+jt63TClK6ZoVcPJ7vXjFRHncvs1/d+nc9BdL9FsGI1ezspSwcJHqex2wgo76yDrq
+DE4s23rPAgMBAAECggEAEDi+VWD5VUpjD5zWOoPQiRDGBJBhtMAKkl6okxEmXvWb
+Xz3STFnjHgA1JFHW3bRU9BHI9k8vSHmnlnkfKb3V/ZX5IHNcKCHb/x9NBak+QLVQ
+0zLtfE9vxiTC0B/oac+MPaiD4hYFQ81pFwK6VS0Poi8ZCBJtOkRqfUvsyV8zZrgh
+/6cs4mwOVyZPFRgF9eWXYv7PJz8pNRizhII0iv9H/r2I3DzsZLPCg7c29mP+I/SG
+A7Pl82UXjtOc0KurGY2M5VheZjxJT/k/FLMkWY2GS5n6dfcyzsVSKb25HoeuvQsI
+vs1mKs+Onbobdc17hCcKVJzbi3DwXs5XDhrEzfHccQKBgQD88uBxVCRV31PsCN6I
+pKxQDGgz+1BqPqe7KMRiZI7HgDUK0eCM3/oG089/jsBtJcSxnScLSVNBjQ+xGiFi
+YCD4icQoJSzpqJyR6gDq5lTHASAe+9LWRW771MrtyACQWNXowYEyu8AjekrZkCUS
+wIKVpw57oWykzIoS7ixZsJ8gxwKBgQD8BPWqJEsLiQvOlS5E/g88eV1KTpxm9Xs+
+BbwsDXZ7m4Iw5lYaUu5CwBB/2jkGGRl8Q/EfAdUT7gXv3t6x5b1qMXaIczmRGYto
+NuI3AH2MPxAa7lg5TgBgie1r7PKwyPMfG3CtDx6n8W5sexgJpbIy5u7E+U6d8s1o
+c7EcsefduQKBgCkHJAx9v18GWFBip+W2ABUDzisQSlzRSNd8p03mTZpiWzgkDq4K
+7j0JQhDIkMGjbKH6gYi9Hfn17WOmf1+7g92MSvrP/NbxeGPadsejEIEu14zu/6Wt
+oXDLdRbYZ+8B2cBlEpWuCl42yck8Lic6fnPTou++oSah3otvglYR5d2lAoGACd8L
+3FE1m0sP6lSPjmZBJIZAcDOqDqJY5HIHD9arKGZL8CxlfPx4lqa9PrTGfQWoqORk
+YmmI9hHhq6aYJHGyPKGZWfjhbVyJyFg1/h+Hy2GA+P0S+ZOjkiR050BNtTz5wOMr
+Q6wO8FcVkywzIdWaqEHBYne9a5RiFVBKxKv3QAkCgYBxmCBKajFkMVb4Uc55WqJs
+Add0mctGgmZ1l5vq81eWe3wjM8wgfJgaD3Q3gwx2ABUX/R+OsVWSh4o5ZR86sYoz
+TviknBHF8GeDLjpT49+04fEaz336J2JOptF9zIpz7ZK1nrOEjzaZGtumReVjUP7X
+fNcb5iDYqZRzD8ixBbLxUw==
+-----END PRIVATE KEY-----
diff --git a/test/smime-certs/smrsa3.pem b/test/smime-certs/smrsa3.pem
new file mode 100644
index 000000000000..980d3af3b4c9
--- /dev/null
+++ b/test/smime-certs/smrsa3.pem
@@ -0,0 +1,49 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQD5A/t3norj/167
+toKG1Ygtg3G+pZ4Nwl5a9flnm8JdSMW5TEEP1TSvDVIEuAVi7xqoAn6heypoaMkB
+GJ+AoSo9R7umdhhq2vnmWFNsdH6oDzynVXixyURo81YrN3sn9Xd55ivTiSpZXldi
+ECr2T0BYvOw0h497bPs6gY9LqgrBHNYVF3lFhdOmYWv+2qSdti+1gV3t24pv1CrK
+2AdX5Epdd5jR+eNnt+suZqoPC0hTcNjszJLcfDYFXHva9BcE0DfrgcYSmoSBU53M
+jt63TClK6ZoVcPJ7vXjFRHncvs1/d+nc9BdL9FsGI1ezspSwcJHqex2wgo76yDrq
+DE4s23rPAgMBAAECggEAEDi+VWD5VUpjD5zWOoPQiRDGBJBhtMAKkl6okxEmXvWb
+Xz3STFnjHgA1JFHW3bRU9BHI9k8vSHmnlnkfKb3V/ZX5IHNcKCHb/x9NBak+QLVQ
+0zLtfE9vxiTC0B/oac+MPaiD4hYFQ81pFwK6VS0Poi8ZCBJtOkRqfUvsyV8zZrgh
+/6cs4mwOVyZPFRgF9eWXYv7PJz8pNRizhII0iv9H/r2I3DzsZLPCg7c29mP+I/SG
+A7Pl82UXjtOc0KurGY2M5VheZjxJT/k/FLMkWY2GS5n6dfcyzsVSKb25HoeuvQsI
+vs1mKs+Onbobdc17hCcKVJzbi3DwXs5XDhrEzfHccQKBgQD88uBxVCRV31PsCN6I
+pKxQDGgz+1BqPqe7KMRiZI7HgDUK0eCM3/oG089/jsBtJcSxnScLSVNBjQ+xGiFi
+YCD4icQoJSzpqJyR6gDq5lTHASAe+9LWRW771MrtyACQWNXowYEyu8AjekrZkCUS
+wIKVpw57oWykzIoS7ixZsJ8gxwKBgQD8BPWqJEsLiQvOlS5E/g88eV1KTpxm9Xs+
+BbwsDXZ7m4Iw5lYaUu5CwBB/2jkGGRl8Q/EfAdUT7gXv3t6x5b1qMXaIczmRGYto
+NuI3AH2MPxAa7lg5TgBgie1r7PKwyPMfG3CtDx6n8W5sexgJpbIy5u7E+U6d8s1o
+c7EcsefduQKBgCkHJAx9v18GWFBip+W2ABUDzisQSlzRSNd8p03mTZpiWzgkDq4K
+7j0JQhDIkMGjbKH6gYi9Hfn17WOmf1+7g92MSvrP/NbxeGPadsejEIEu14zu/6Wt
+oXDLdRbYZ+8B2cBlEpWuCl42yck8Lic6fnPTou++oSah3otvglYR5d2lAoGACd8L
+3FE1m0sP6lSPjmZBJIZAcDOqDqJY5HIHD9arKGZL8CxlfPx4lqa9PrTGfQWoqORk
+YmmI9hHhq6aYJHGyPKGZWfjhbVyJyFg1/h+Hy2GA+P0S+ZOjkiR050BNtTz5wOMr
+Q6wO8FcVkywzIdWaqEHBYne9a5RiFVBKxKv3QAkCgYBxmCBKajFkMVb4Uc55WqJs
+Add0mctGgmZ1l5vq81eWe3wjM8wgfJgaD3Q3gwx2ABUX/R+OsVWSh4o5ZR86sYoz
+TviknBHF8GeDLjpT49+04fEaz336J2JOptF9zIpz7ZK1nrOEjzaZGtumReVjUP7X
+fNcb5iDYqZRzD8ixBbLxUw==
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIDeTCCAmGgAwIBAgIUIDyc//j/LoNDesZTGbPBoVarv4EwDQYJKoZIhvcNAQEL
+BQAwRDELMAkGA1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxHTAbBgNV
+BAMMFFRlc3QgUy9NSU1FIFJTQSBSb290MCAXDTIyMDYwMjE1MzMxM1oYDzIxMjIw
+NTA5MTUzMzEzWjBFMQswCQYDVQQGEwJVSzEWMBQGA1UECgwNT3BlblNTTCBHcm91
+cDEeMBwGA1UEAwwVVGVzdCBTL01JTUUgRUUgUlNBICMzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA+QP7d56K4/9eu7aChtWILYNxvqWeDcJeWvX5Z5vC
+XUjFuUxBD9U0rw1SBLgFYu8aqAJ+oXsqaGjJARifgKEqPUe7pnYYatr55lhTbHR+
+qA88p1V4sclEaPNWKzd7J/V3eeYr04kqWV5XYhAq9k9AWLzsNIePe2z7OoGPS6oK
+wRzWFRd5RYXTpmFr/tqknbYvtYFd7duKb9QqytgHV+RKXXeY0fnjZ7frLmaqDwtI
+U3DY7MyS3Hw2BVx72vQXBNA364HGEpqEgVOdzI7et0wpSumaFXDye714xUR53L7N
+f3fp3PQXS/RbBiNXs7KUsHCR6nsdsIKO+sg66gxOLNt6zwIDAQABo2AwXjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIF4DAdBgNVHQ4EFgQUN9pGq/UFS3o50rTi
+V+AYgAk+3R4wHwYDVR0jBBgwFoAUFcETIWviVV+nah1XINbP86lzZFkwDQYJKoZI
+hvcNAQELBQADggEBAGcOh380/6aJqMpYBssuf2CB3DX/hGKdvEF7fF8iNSfl5HHq
+112kHl3MhbL9Th/safJq9sLDJqjXRNdVCUJJbU4YI2P2gsi04paC0qxWxMLtzQLd
+CE7ki2xH94Fuu/dThbpzZBABROO1RrdI24GDGt9t4Gf0WVkobmT/zNlwGppKTIB2
+iV/Ug30iKr/C49UzwUIa+XXXujkjPTmGSnrKwVQNxQh81rb+iTL7GEnNuqDsatHW
+ZyLS2SaVdG5tMqDkITPMDGjehUzJcAbVc8Bv4m8Ukuov3uDj2Doc6MxlvrVkV0AE
+BcSCb/bWQJJ/X4LQZlx9cMk4NINxV9UeFPZOefg=
+-----END CERTIFICATE-----
diff --git a/test/smime-eml/SignedInvalidMappingFromanyPolicyTest7.eml b/test/smime-eml/SignedInvalidMappingFromanyPolicyTest7.eml
new file mode 100644
index 000000000000..5d6b49d2c1ec
--- /dev/null
+++ b/test/smime-eml/SignedInvalidMappingFromanyPolicyTest7.eml
@@ -0,0 +1,93 @@
+To: recipient@testcertificates.gov
+From: sender@testcertificates.gov
+Subject: Invalid Mapping From anyPolicy Test7
+MIME-Version: 1.0
+Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg="sha-256"; boundary="----C124D5D1A319E09E6A4BB51A44961168"
+
+This is an S/MIME signed message
+
+------C124D5D1A319E09E6A4BB51A44961168
+Content-Type: text/plain
+
+This is a sample signed message.
+
+------C124D5D1A319E09E6A4BB51A44961168
+Content-Type: application/pkcs7-signature; name="smime.p7s"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7s"
+
+MIINTQYJKoZIhvcNAQcCoIINPjCCDToCAQExDzANBglghkgBZQMEAgEFADALBgkq
+hkiG9w0BBwGgggdpMIIDvTCCAqWgAwIBAgIBMzANBgkqhkiG9w0BAQsFADBFMQsw
+CQYDVQQGEwJVUzEfMB0GA1UEChMWVGVzdCBDZXJ0aWZpY2F0ZXMgMjAxMTEVMBMG
+A1UEAxMMVHJ1c3QgQW5jaG9yMB4XDTEwMDEwMTA4MzAwMFoXDTMwMTIzMTA4MzAw
+MFowUjELMAkGA1UEBhMCVVMxHzAdBgNVBAoTFlRlc3QgQ2VydGlmaWNhdGVzIDIw
+MTExIjAgBgNVBAMTGU1hcHBpbmcgRnJvbSBhbnlQb2xpY3kgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrp6IDBPUKqlzfwBrwMM0/8mXKVyogMBl5
+xjRYIAzPCs0Mwv7RkEQbM1BIsYtbSJgsFJtldgS1u2yhYklqgcTsHZK7NrBL/Qle
+ugZcze2gunSlvAYW2qO6t9japmswZ5/8l2hTia0T7P7Nk9lcBbDi+HjNDRqZglal
+b/gXvfWnsWxOxAiSQY35dAnqxXl5KlkscU7uvsQubTBmNaQHsDrxoqSAXnMZG8dy
+s1G3ET5Emp6FvYBZLSYQqK2nWkL8xFIbbdureHpD1Af+HWFDTntlZzw1Vb2MXvmz
+0pYFdRGA75KD7SSpLEl5BiXwPLMF/UHmMZWhqVug0MlJ7mWl1UkzAgMBAAGjgaow
+gacwHwYDVR0jBBgwFoAU5H1f0VyVhggsBa6+dbZlp9ldqGYwHQYDVR0OBBYEFGhz
+FOALNM9yQNqUltYVq3qkby6MMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD
+AQH/MBEGA1UdIAQKMAgwBgYEVR0gADAgBgNVHSEBAf8EFjAUMBIGBFUdIAAGCmCG
+SAFlAwIBMAEwDwYDVR0kAQH/BAUwA4ABADANBgkqhkiG9w0BAQsFAAOCAQEACkuU
+lU5OLnBP9XTQLJdC4cZ2L1LbaCvAnUSD5ZU1UyDAPHcs+YsbjerZT1Alt/KqnVyD
+9pvkUuScevjjvLCyfSGq4slrV8mHUVBbMuumv5q+0Z4J2PFgNXIvdxHiIRFUq9A1
+89ZiQkfUxSeRPUK4M3YmPO0iaeuS0SlAKIQ8a1dxNgm9ax8GOj+SQsx84FxED2wC
+R024sOajIHIPVvyhbWPQMQbdJVSuVULjsfuGDyMZyN6a0gR5uBQ1MXmsIVrnwAia
+0LTH7kjudgabGYa9MJkUVscZiu01jZBYfDqpaCN4MWkXCNvf9gksys7HoBvFlGyH
+m32/XiFrVKYufBkfiDCCA6QwggKMoAMCAQICAQEwDQYJKoZIhvcNAQELBQAwUjEL
+MAkGA1UEBhMCVVMxHzAdBgNVBAoTFlRlc3QgQ2VydGlmaWNhdGVzIDIwMTExIjAg
+BgNVBAMTGU1hcHBpbmcgRnJvbSBhbnlQb2xpY3kgQ0EwHhcNMTAwMTAxMDgzMDAw
+WhcNMzAxMjMxMDgzMDAwWjBsMQswCQYDVQQGEwJVUzEfMB0GA1UEChMWVGVzdCBD
+ZXJ0aWZpY2F0ZXMgMjAxMTE8MDoGA1UEAxMzSW52YWxpZCBNYXBwaW5nIEZyb20g
+YW55UG9saWN5IEVFIENlcnRpZmljYXRlIFRlc3Q3MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAxfXuaqNaFrVVSPjnxUFtGQ+B4oSrl3Dmch6wknP1ECbn
+OIpxuf4PAiwpc11/YMUpznskRKJuZNQGNDflv8p8h99ZWyj1WbwZk/5zDIYMyFau
+vdXdzt8EiImBB+ODosDMoZGPpgkR3q4dC5LaSF+X55ktBb09cGAFRYhAqxTwjkdn
+DbLyi/CmTrraCWLSBpzNkLSnFGH3WIcKSqvt39WnvJ5RK5YVkvBiJ9AuxPMdRz3q
+AjwKDwbjPQQ7GuKu0bUPL5Aoi/u5jDH9Npgb2OqnXTyvi6Qr2hWUkxRhWcF+0/k0
+FF52bWERYyNGjFmo5l+zRkGI8A66I59L9O1DJoy5pQIDAQABo2swaTAfBgNVHSME
+GDAWgBRocxTgCzTPckDalJbWFat6pG8ujDAdBgNVHQ4EFgQUMYuIk253zuy75Ecs
+q5WlLPrSs3UwDgYDVR0PAQH/BAQDAgTwMBcGA1UdIAQQMA4wDAYKYIZIAWUDAgEw
+ATANBgkqhkiG9w0BAQsFAAOCAQEAO99EfWAFfz2p7FCmZMuITeZtkUImyyI7tTDR
++sakA9E+wZKuGj9ZkE6s2W5O5+79YXC6S8Q2Q0J2WdQEAB0JeSTYyzMCoKJy/IF9
+GCyMqV1xXmbcVO6CUc3ZlTT8U5nJz4C3DJurj1URke+qldg4YYElmFeAuHsCLhBt
+WZeseGsyeXjpC+cadcjPWq2v9E/pRssIDq9Ok9Pu+vypsK6/pBfnx15G+a/Lp1N9
+pb0qSLiisZMoxHDegNbPYOgcRZH6TVc2VLl6YWKAMtKJZDAL1FpqwHjM/4z/WauA
+ZqvFByxphRYOMufn4ejld0RUQ5Nwc1/FrhuNK5cxNSGIAw5lf6GCA7cwggHMMIG1
+AgEBMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlVTMR8wHQYDVQQKExZUZXN0
+IENlcnRpZmljYXRlcyAyMDExMSIwIAYDVQQDExlNYXBwaW5nIEZyb20gYW55UG9s
+aWN5IENBFw0xMDAxMDEwODMwMDBaFw0zMDEyMzEwODMwMDBaoC8wLTAfBgNVHSME
+GDAWgBRocxTgCzTPckDalJbWFat6pG8ujDAKBgNVHRQEAwIBATANBgkqhkiG9w0B
+AQsFAAOCAQEApnKINszWHTlYmTKNj9GLq8l9TJd4c92R4ubYr4O7FWxU6t4xx29s
+oIOb5WMC53Xb36i70JQVlSfa8/CFnn5bpnuiHNSijxB5YahaS+Vj/JT8d/ipHpA7
+FQBMav9/27em2xtWMEoSEPrpD869eCIEU3M51k6oq64j/H+udfI5Kjilgn9F5xRv
+Wb1ZpWM7V4pAIYiYxusdOcg7OICDjv8h0LO25vG1bC1XyOZ3/OLkT7QU7+UGcXLK
+CGo2M+cwvQsdBQzwuvUScVT0uDab9AWDataCGtZp1gqhrqWug8qF0yeFMv4GdNmS
+vCUns60IjXBAPU0cgmaIvqUMEVPpMwfU/TCCAeMwgcwCAQEwDQYJKoZIhvcNAQEL
+BQAwRTELMAkGA1UEBhMCVVMxHzAdBgNVBAoTFlRlc3QgQ2VydGlmaWNhdGVzIDIw
+MTExFTATBgNVBAMTDFRydXN0IEFuY2hvchcNMTAwMTAxMDgzMDAwWhcNMzAxMjMx
+MDgzMDAwWjAiMCACAWgXDTEwMDEwMTA4MzAwMFowDDAKBgNVHRUEAwoBAaAvMC0w
+HwYDVR0jBBgwFoAU5H1f0VyVhggsBa6+dbZlp9ldqGYwCgYDVR0UBAMCAQEwDQYJ
+KoZIhvcNAQELBQADggEBAKsZHbW7IWu24UzN8Lc3npU40dSBkICuEfD7HNn8NjTs
+nZavD3knN6orR1epuHah83IUJcrWKaziuHUYrRIfkWGOFClDbvjkEOVRS0r7gtFr
+98Z9sNvVaqULWrwRXyfC7LfedtKXnHusfOnwfS+lT+GDRiKy3Pu4RIxAwCybPrbT
+6MTTVxjAKUEIuccmRJLF0AKOtGXR/6/eZXVQmu1NjlVztTArmZVkEZapdAYtwsxN
+unFtY3HBHVOskNDjSjbkTkfujbF2dkJtgpRxBlhSQGfwlgezY0PZmjZKIqGW+CAd
+gCjygXG9Jk902LKYE/M3GUj+QywvIlTq3Mdki0r3d+YxggHtMIIB6QIBATBXMFIx
+CzAJBgNVBAYTAlVTMR8wHQYDVQQKExZUZXN0IENlcnRpZmljYXRlcyAyMDExMSIw
+IAYDVQQDExlNYXBwaW5nIEZyb20gYW55UG9saWN5IENBAgEBMA0GCWCGSAFlAwQC
+AQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcN
+MTEwNDE0MTMwMjIwWjAvBgkqhkiG9w0BCQQxIgQgwrMnqwOj7H0umdTqIoQwrAZp
+r3vR7I+xbnE9vb7qK4cwDQYJKoZIhvcNAQEBBQAEggEAHe7vG964RqLsMJhpYO1C
++wB6qmYM4JGbNLkx3XveYcpY18CVDyWuOOdO7UF0ynUv1K6zx/pffuWmtfRkuhXA
+mwMxTXrZThsS+1xoGX1mvmX1LZdok2kYeqbyzv87mPogqATLb11ihjcfB98j4wVJ
+wKxl2/DYbW2DCHUy+lwwHWExwHqAt2jOSQDtOfyfFz+nT52k60ZA4tkW6GnqguFx
+R4lE9Ovg/7wfxSUE1w3HFrPuzzN3ZsOLGQiUXG55KTFgI4YXr7PXHkR+eJsvC9nP
+JSF6GxiEeZcwmciv5FQxc6QWyOrWPtHimROS2RbDzv/aP7mwFu7HTU47hu2AW9/X
+yg==
+
+------C124D5D1A319E09E6A4BB51A44961168--
+
diff --git a/test/sparse_array_test.c b/test/sparse_array_test.c
new file mode 100644
index 000000000000..b50d79a4dbcd
--- /dev/null
+++ b/test/sparse_array_test.c
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2019, Oracle and/or its affiliates. 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 <string.h>
+#include <limits.h>
+
+#include <openssl/crypto.h>
+#include "internal/nelem.h"
+#include "crypto/sparse_array.h"
+#include "testutil.h"
+
+/* The macros below generate unused functions which error out one of the clang
+ * builds. We disable this check here.
+ */
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
+DEFINE_SPARSE_ARRAY_OF(char);
+
+static int test_sparse_array(void)
+{
+ static const struct {
+ ossl_uintmax_t n;
+ char *v;
+ } cases[] = {
+ { 22, "a" }, { 0, "z" }, { 1, "b" }, { 290, "c" },
+ { INT_MAX, "m" }, { 6666666, "d" }, { (ossl_uintmax_t)-1, "H" },
+ { 99, "e" }
+ };
+ SPARSE_ARRAY_OF(char) *sa;
+ size_t i, j;
+ int res = 0;
+
+ if (!TEST_ptr(sa = ossl_sa_char_new())
+ || !TEST_ptr_null(ossl_sa_char_get(sa, 3))
+ || !TEST_ptr_null(ossl_sa_char_get(sa, 0))
+ || !TEST_ptr_null(ossl_sa_char_get(sa, UINT_MAX)))
+ goto err;
+
+ for (i = 0; i < OSSL_NELEM(cases); i++) {
+ if (!TEST_true(ossl_sa_char_set(sa, cases[i].n, cases[i].v))) {
+ TEST_note("iteration %zu", i + 1);
+ goto err;
+ }
+ for (j = 0; j <= i; j++)
+ if (!TEST_str_eq(ossl_sa_char_get(sa, cases[j].n), cases[j].v)) {
+ TEST_note("iteration %zu / %zu", i + 1, j + 1);
+ goto err;
+ }
+ }
+
+ res = 1;
+err:
+ ossl_sa_char_free(sa);
+ return res;
+}
+
+static int test_sparse_array_num(void)
+{
+ static const struct {
+ size_t num;
+ ossl_uintmax_t n;
+ char *v;
+ } cases[] = {
+ { 1, 22, "a" }, { 2, 1021, "b" }, { 3, 3, "c" }, { 2, 22, NULL },
+ { 2, 3, "d" }, { 3, 22, "e" }, { 3, 666, NULL }, { 4, 666, "f" },
+ { 3, 3, NULL }, { 2, 22, NULL }, { 1, 666, NULL }, { 2, 64000, "g" },
+ { 1, 1021, NULL }, { 0, 64000, NULL }, { 1, 23, "h" }, { 0, 23, NULL }
+ };
+ SPARSE_ARRAY_OF(char) *sa = NULL;
+ size_t i;
+ int res = 0;
+
+ if (!TEST_size_t_eq(ossl_sa_char_num(NULL), 0)
+ || !TEST_ptr(sa = ossl_sa_char_new())
+ || !TEST_size_t_eq(ossl_sa_char_num(sa), 0))
+ goto err;
+ for (i = 0; i < OSSL_NELEM(cases); i++)
+ if (!TEST_true(ossl_sa_char_set(sa, cases[i].n, cases[i].v))
+ || !TEST_size_t_eq(ossl_sa_char_num(sa), cases[i].num))
+ goto err;
+ res = 1;
+err:
+ ossl_sa_char_free(sa);
+ return res;
+}
+
+struct index_cases_st {
+ ossl_uintmax_t n;
+ char *v;
+ int del;
+};
+
+struct doall_st {
+ SPARSE_ARRAY_OF(char) *sa;
+ size_t num_cases;
+ const struct index_cases_st *cases;
+ int res;
+ int all;
+};
+
+static void leaf_check_all(ossl_uintmax_t n, char *value, void *arg)
+{
+ struct doall_st *doall_data = (struct doall_st *)arg;
+ const struct index_cases_st *cases = doall_data->cases;
+ size_t i;
+
+ doall_data->res = 0;
+ for (i = 0; i < doall_data->num_cases; i++)
+ if ((doall_data->all || !cases[i].del)
+ && n == cases[i].n && strcmp(value, cases[i].v) == 0) {
+ doall_data->res = 1;
+ return;
+ }
+ TEST_error("Index %ju with value %s not found", n, value);
+}
+
+static void leaf_delete(ossl_uintmax_t n, char *value, void *arg)
+{
+ struct doall_st *doall_data = (struct doall_st *)arg;
+ const struct index_cases_st *cases = doall_data->cases;
+ size_t i;
+
+ doall_data->res = 0;
+ for (i = 0; i < doall_data->num_cases; i++)
+ if (n == cases[i].n && strcmp(value, cases[i].v) == 0) {
+ doall_data->res = 1;
+ ossl_sa_char_set(doall_data->sa, n, NULL);
+ return;
+ }
+ TEST_error("Index %ju with value %s not found", n, value);
+}
+
+static int test_sparse_array_doall(void)
+{
+ static const struct index_cases_st cases[] = {
+ { 22, "A", 1 }, { 1021, "b", 0 }, { 3, "c", 0 }, { INT_MAX, "d", 1 },
+ { (ossl_uintmax_t)-1, "H", 0 }, { (ossl_uintmax_t)-2, "i", 1 },
+ { 666666666, "s", 1 }, { 1234567890, "t", 0 },
+ };
+ struct doall_st doall_data;
+ size_t i;
+ SPARSE_ARRAY_OF(char) *sa = NULL;
+ int res = 0;
+
+ if (!TEST_ptr(sa = ossl_sa_char_new()))
+ goto err;
+ doall_data.num_cases = OSSL_NELEM(cases);
+ doall_data.cases = cases;
+ doall_data.all = 1;
+ doall_data.sa = NULL;
+ for (i = 0; i < OSSL_NELEM(cases); i++)
+ if (!TEST_true(ossl_sa_char_set(sa, cases[i].n, cases[i].v))) {
+ TEST_note("failed at iteration %zu", i + 1);
+ goto err;
+ }
+
+ ossl_sa_char_doall_arg(sa, &leaf_check_all, &doall_data);
+ if (doall_data.res == 0) {
+ TEST_info("while checking all elements");
+ goto err;
+ }
+ doall_data.all = 0;
+ doall_data.sa = sa;
+ ossl_sa_char_doall_arg(sa, &leaf_delete, &doall_data);
+ if (doall_data.res == 0) {
+ TEST_info("while deleting selected elements");
+ goto err;
+ }
+ ossl_sa_char_doall_arg(sa, &leaf_check_all, &doall_data);
+ if (doall_data.res == 0) {
+ TEST_info("while checking for deleted elements");
+ goto err;
+ }
+ res = 1;
+
+err:
+ ossl_sa_char_free(sa);
+ return res;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_sparse_array);
+ ADD_TEST(test_sparse_array_num);
+ ADD_TEST(test_sparse_array_doall);
+ return 1;
+}
diff --git a/test/srptest.c b/test/srptest.c
new file mode 100644
index 000000000000..fe3f97b132f6
--- /dev/null
+++ b/test/srptest.c
@@ -0,0 +1,282 @@
+/*
+ * Copyright 2011-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * SRP is deprecated, so we're going to have to use some deprecated APIs in
+ * order to test it.
+ */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#include <openssl/opensslconf.h>
+# include "testutil.h"
+
+#ifdef OPENSSL_NO_SRP
+# include <stdio.h>
+#else
+
+# include <openssl/srp.h>
+# include <openssl/rand.h>
+# include <openssl/err.h>
+
+# define RANDOM_SIZE 32 /* use 256 bits on each side */
+
+static int run_srp(const char *username, const char *client_pass,
+ const char *server_pass)
+{
+ int ret = 0;
+ BIGNUM *s = NULL;
+ BIGNUM *v = NULL;
+ BIGNUM *a = NULL;
+ BIGNUM *b = NULL;
+ BIGNUM *u = NULL;
+ BIGNUM *x = NULL;
+ BIGNUM *Apub = NULL;
+ BIGNUM *Bpub = NULL;
+ BIGNUM *Kclient = NULL;
+ BIGNUM *Kserver = NULL;
+ unsigned char rand_tmp[RANDOM_SIZE];
+ /* use builtin 1024-bit params */
+ const SRP_gN *GN;
+
+ if (!TEST_ptr(GN = SRP_get_default_gN("1024")))
+ return 0;
+
+ /* Set up server's password entry */
+ if (!TEST_true(SRP_create_verifier_BN(username, server_pass,
+ &s, &v, GN->N, GN->g)))
+ goto end;
+
+ test_output_bignum("N", GN->N);
+ test_output_bignum("g", GN->g);
+ test_output_bignum("Salt", s);
+ test_output_bignum("Verifier", v);
+
+ /* Server random */
+ RAND_bytes(rand_tmp, sizeof(rand_tmp));
+ b = BN_bin2bn(rand_tmp, sizeof(rand_tmp), NULL);
+ if (!TEST_BN_ne_zero(b))
+ goto end;
+ test_output_bignum("b", b);
+
+ /* Server's first message */
+ Bpub = SRP_Calc_B(b, GN->N, GN->g, v);
+ test_output_bignum("B", Bpub);
+
+ if (!TEST_true(SRP_Verify_B_mod_N(Bpub, GN->N)))
+ goto end;
+
+ /* Client random */
+ RAND_bytes(rand_tmp, sizeof(rand_tmp));
+ a = BN_bin2bn(rand_tmp, sizeof(rand_tmp), NULL);
+ if (!TEST_BN_ne_zero(a))
+ goto end;
+ test_output_bignum("a", a);
+
+ /* Client's response */
+ Apub = SRP_Calc_A(a, GN->N, GN->g);
+ test_output_bignum("A", Apub);
+
+ if (!TEST_true(SRP_Verify_A_mod_N(Apub, GN->N)))
+ goto end;
+
+ /* Both sides calculate u */
+ u = SRP_Calc_u(Apub, Bpub, GN->N);
+
+ /* Client's key */
+ x = SRP_Calc_x(s, username, client_pass);
+ Kclient = SRP_Calc_client_key(GN->N, Bpub, GN->g, x, a, u);
+ test_output_bignum("Client's key", Kclient);
+
+ /* Server's key */
+ Kserver = SRP_Calc_server_key(Apub, v, u, b, GN->N);
+ test_output_bignum("Server's key", Kserver);
+
+ if (!TEST_BN_eq(Kclient, Kserver))
+ goto end;
+
+ ret = 1;
+
+end:
+ BN_clear_free(Kclient);
+ BN_clear_free(Kserver);
+ BN_clear_free(x);
+ BN_free(u);
+ BN_free(Apub);
+ BN_clear_free(a);
+ BN_free(Bpub);
+ BN_clear_free(b);
+ BN_free(s);
+ BN_clear_free(v);
+
+ return ret;
+}
+
+static int check_bn(const char *name, const BIGNUM *bn, const char *hexbn)
+{
+ BIGNUM *tmp = NULL;
+ int r;
+
+ if (!TEST_true(BN_hex2bn(&tmp, hexbn)))
+ return 0;
+
+ if (BN_cmp(bn, tmp) != 0)
+ TEST_error("unexpected %s value", name);
+ r = TEST_BN_eq(bn, tmp);
+ BN_free(tmp);
+ return r;
+}
+
+/* SRP test vectors from RFC5054 */
+static int run_srp_kat(void)
+{
+ int ret = 0;
+ BIGNUM *s = NULL;
+ BIGNUM *v = NULL;
+ BIGNUM *a = NULL;
+ BIGNUM *b = NULL;
+ BIGNUM *u = NULL;
+ BIGNUM *x = NULL;
+ BIGNUM *Apub = NULL;
+ BIGNUM *Bpub = NULL;
+ BIGNUM *Kclient = NULL;
+ BIGNUM *Kserver = NULL;
+ /* use builtin 1024-bit params */
+ const SRP_gN *GN;
+
+ if (!TEST_ptr(GN = SRP_get_default_gN("1024")))
+ goto err;
+ BN_hex2bn(&s, "BEB25379D1A8581EB5A727673A2441EE");
+ /* Set up server's password entry */
+ if (!TEST_true(SRP_create_verifier_BN("alice", "password123", &s, &v, GN->N,
+ GN->g)))
+ goto err;
+
+ TEST_info("checking v");
+ if (!TEST_true(check_bn("v", v,
+ "7E273DE8696FFC4F4E337D05B4B375BEB0DDE1569E8FA00A9886D812"
+ "9BADA1F1822223CA1A605B530E379BA4729FDC59F105B4787E5186F5"
+ "C671085A1447B52A48CF1970B4FB6F8400BBF4CEBFBB168152E08AB5"
+ "EA53D15C1AFF87B2B9DA6E04E058AD51CC72BFC9033B564E26480D78"
+ "E955A5E29E7AB245DB2BE315E2099AFB")))
+ goto err;
+ TEST_note(" okay");
+
+ /* Server random */
+ BN_hex2bn(&b, "E487CB59D31AC550471E81F00F6928E01DDA08E974A004F49E61F5D1"
+ "05284D20");
+
+ /* Server's first message */
+ Bpub = SRP_Calc_B(b, GN->N, GN->g, v);
+ if (!TEST_true(SRP_Verify_B_mod_N(Bpub, GN->N)))
+ goto err;
+
+ TEST_info("checking B");
+ if (!TEST_true(check_bn("B", Bpub,
+ "BD0C61512C692C0CB6D041FA01BB152D4916A1E77AF46AE105393011"
+ "BAF38964DC46A0670DD125B95A981652236F99D9B681CBF87837EC99"
+ "6C6DA04453728610D0C6DDB58B318885D7D82C7F8DEB75CE7BD4FBAA"
+ "37089E6F9C6059F388838E7A00030B331EB76840910440B1B27AAEAE"
+ "EB4012B7D7665238A8E3FB004B117B58")))
+ goto err;
+ TEST_note(" okay");
+
+ /* Client random */
+ BN_hex2bn(&a, "60975527035CF2AD1989806F0407210BC81EDC04E2762A56AFD529DD"
+ "DA2D4393");
+
+ /* Client's response */
+ Apub = SRP_Calc_A(a, GN->N, GN->g);
+ if (!TEST_true(SRP_Verify_A_mod_N(Apub, GN->N)))
+ goto err;
+
+ TEST_info("checking A");
+ if (!TEST_true(check_bn("A", Apub,
+ "61D5E490F6F1B79547B0704C436F523DD0E560F0C64115BB72557EC4"
+ "4352E8903211C04692272D8B2D1A5358A2CF1B6E0BFCF99F921530EC"
+ "8E39356179EAE45E42BA92AEACED825171E1E8B9AF6D9C03E1327F44"
+ "BE087EF06530E69F66615261EEF54073CA11CF5858F0EDFDFE15EFEA"
+ "B349EF5D76988A3672FAC47B0769447B")))
+ goto err;
+ TEST_note(" okay");
+
+ /* Both sides calculate u */
+ u = SRP_Calc_u(Apub, Bpub, GN->N);
+
+ if (!TEST_true(check_bn("u", u,
+ "CE38B9593487DA98554ED47D70A7AE5F462EF019")))
+ goto err;
+
+ /* Client's key */
+ x = SRP_Calc_x(s, "alice", "password123");
+ Kclient = SRP_Calc_client_key(GN->N, Bpub, GN->g, x, a, u);
+ TEST_info("checking client's key");
+ if (!TEST_true(check_bn("Client's key", Kclient,
+ "B0DC82BABCF30674AE450C0287745E7990A3381F63B387AAF271A10D"
+ "233861E359B48220F7C4693C9AE12B0A6F67809F0876E2D013800D6C"
+ "41BB59B6D5979B5C00A172B4A2A5903A0BDCAF8A709585EB2AFAFA8F"
+ "3499B200210DCC1F10EB33943CD67FC88A2F39A4BE5BEC4EC0A3212D"
+ "C346D7E474B29EDE8A469FFECA686E5A")))
+ goto err;
+ TEST_note(" okay");
+
+ /* Server's key */
+ Kserver = SRP_Calc_server_key(Apub, v, u, b, GN->N);
+ TEST_info("checking server's key");
+ if (!TEST_true(check_bn("Server's key", Kserver,
+ "B0DC82BABCF30674AE450C0287745E7990A3381F63B387AAF271A10D"
+ "233861E359B48220F7C4693C9AE12B0A6F67809F0876E2D013800D6C"
+ "41BB59B6D5979B5C00A172B4A2A5903A0BDCAF8A709585EB2AFAFA8F"
+ "3499B200210DCC1F10EB33943CD67FC88A2F39A4BE5BEC4EC0A3212D"
+ "C346D7E474B29EDE8A469FFECA686E5A")))
+ goto err;
+ TEST_note(" okay");
+
+ ret = 1;
+
+err:
+ BN_clear_free(Kclient);
+ BN_clear_free(Kserver);
+ BN_clear_free(x);
+ BN_free(u);
+ BN_free(Apub);
+ BN_clear_free(a);
+ BN_free(Bpub);
+ BN_clear_free(b);
+ BN_free(s);
+ BN_clear_free(v);
+
+ return ret;
+}
+
+static int run_srp_tests(void)
+{
+ /* "Negative" test, expect a mismatch */
+ TEST_info("run_srp: expecting a mismatch");
+ if (!TEST_false(run_srp("alice", "password1", "password2")))
+ return 0;
+
+ /* "Positive" test, should pass */
+ TEST_info("run_srp: expecting a match");
+ if (!TEST_true(run_srp("alice", "password", "password")))
+ return 0;
+
+ return 1;
+}
+#endif
+
+int setup_tests(void)
+{
+#ifdef OPENSSL_NO_SRP
+ printf("No SRP support\n");
+#else
+ ADD_TEST(run_srp_tests);
+ ADD_TEST(run_srp_kat);
+#endif
+ return 1;
+}
diff --git a/test/ssl-tests/01-simple.cnf b/test/ssl-tests/01-simple.cnf
new file mode 100644
index 000000000000..dfdd3ee3378d
--- /dev/null
+++ b/test/ssl-tests/01-simple.cnf
@@ -0,0 +1,102 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 4
+
+test-0 = 0-default
+test-1 = 1-Server signature algorithms bug
+test-2 = 2-verify-cert
+test-3 = 3-name-constraints-no-san-in-ee
+# ===========================================================
+
+[0-default]
+ssl_conf = 0-default-ssl
+
+[0-default-ssl]
+server = 0-default-server
+client = 0-default-client
+
+[0-default-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-default-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[1-Server signature algorithms bug]
+ssl_conf = 1-Server signature algorithms bug-ssl
+
+[1-Server signature algorithms bug-ssl]
+server = 1-Server signature algorithms bug-server
+client = 1-Server signature algorithms bug-client
+
+[1-Server signature algorithms bug-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ClientSignatureAlgorithms = PSS+SHA512:RSA+SHA512
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-Server signature algorithms bug-client]
+CipherString = DEFAULT
+SignatureAlgorithms = PSS+SHA256:RSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[2-verify-cert]
+ssl_conf = 2-verify-cert-ssl
+
+[2-verify-cert-ssl]
+server = 2-verify-cert-server
+client = 2-verify-cert-client
+
+[2-verify-cert-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-verify-cert-client]
+CipherString = DEFAULT
+VerifyMode = Peer
+
+[test-2]
+ExpectedClientAlert = UnknownCA
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[3-name-constraints-no-san-in-ee]
+ssl_conf = 3-name-constraints-no-san-in-ee-ssl
+
+[3-name-constraints-no-san-in-ee-ssl]
+server = 3-name-constraints-no-san-in-ee-server
+client = 3-name-constraints-no-san-in-ee-client
+
+[3-name-constraints-no-san-in-ee-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/goodcn2-chain.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/goodcn2-key.pem
+
+[3-name-constraints-no-san-in-ee-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+
+
diff --git a/test/ssl-tests/01-simple.cnf.in b/test/ssl-tests/01-simple.cnf.in
new file mode 100644
index 000000000000..bcd41e3065be
--- /dev/null
+++ b/test/ssl-tests/01-simple.cnf.in
@@ -0,0 +1,54 @@
+# -*- mode: perl; -*-
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+## SSL test configurations
+
+package ssltests;
+
+our @tests = (
+ {
+ name => "default",
+ server => { },
+ client => { },
+ test => { "ExpectedResult" => "Success" },
+ },
+
+ {
+ name => "Server signature algorithms bug",
+ # Should have no effect as we aren't doing client auth
+ server => { "ClientSignatureAlgorithms" => "PSS+SHA512:RSA+SHA512" },
+ client => { "SignatureAlgorithms" => "PSS+SHA256:RSA+SHA256" },
+ test => { "ExpectedResult" => "Success" },
+ },
+
+ {
+ name => "verify-cert",
+ server => { },
+ client => {
+ # Don't set up the client root file.
+ "VerifyCAFile" => undef,
+ },
+ test => {
+ "ExpectedResult" => "ClientFail",
+ "ExpectedClientAlert" => "UnknownCA",
+ },
+ },
+
+ {
+ name => "name-constraints-no-san-in-ee",
+ server => {
+ "Certificate" => test_pem("goodcn2-chain.pem"),
+ "PrivateKey" => test_pem("goodcn2-key.pem"),
+ },
+ client => {
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ },
+ test => { "ExpectedResult" => "Success" },
+ },
+);
diff --git a/test/ssl-tests/02-protocol-version.cnf b/test/ssl-tests/02-protocol-version.cnf
new file mode 100644
index 000000000000..ef5e99427796
--- /dev/null
+++ b/test/ssl-tests/02-protocol-version.cnf
@@ -0,0 +1,18822 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 678
+
+test-0 = 0-version-negotiation
+test-1 = 1-version-negotiation
+test-2 = 2-version-negotiation
+test-3 = 3-version-negotiation
+test-4 = 4-version-negotiation
+test-5 = 5-version-negotiation
+test-6 = 6-version-negotiation
+test-7 = 7-version-negotiation
+test-8 = 8-version-negotiation
+test-9 = 9-version-negotiation
+test-10 = 10-version-negotiation
+test-11 = 11-version-negotiation
+test-12 = 12-version-negotiation
+test-13 = 13-version-negotiation
+test-14 = 14-version-negotiation
+test-15 = 15-version-negotiation
+test-16 = 16-version-negotiation
+test-17 = 17-version-negotiation
+test-18 = 18-version-negotiation
+test-19 = 19-version-negotiation
+test-20 = 20-version-negotiation
+test-21 = 21-version-negotiation
+test-22 = 22-version-negotiation
+test-23 = 23-version-negotiation
+test-24 = 24-version-negotiation
+test-25 = 25-version-negotiation
+test-26 = 26-version-negotiation
+test-27 = 27-version-negotiation
+test-28 = 28-version-negotiation
+test-29 = 29-version-negotiation
+test-30 = 30-version-negotiation
+test-31 = 31-version-negotiation
+test-32 = 32-version-negotiation
+test-33 = 33-version-negotiation
+test-34 = 34-version-negotiation
+test-35 = 35-version-negotiation
+test-36 = 36-version-negotiation
+test-37 = 37-version-negotiation
+test-38 = 38-version-negotiation
+test-39 = 39-version-negotiation
+test-40 = 40-version-negotiation
+test-41 = 41-version-negotiation
+test-42 = 42-version-negotiation
+test-43 = 43-version-negotiation
+test-44 = 44-version-negotiation
+test-45 = 45-version-negotiation
+test-46 = 46-version-negotiation
+test-47 = 47-version-negotiation
+test-48 = 48-version-negotiation
+test-49 = 49-version-negotiation
+test-50 = 50-version-negotiation
+test-51 = 51-version-negotiation
+test-52 = 52-version-negotiation
+test-53 = 53-version-negotiation
+test-54 = 54-version-negotiation
+test-55 = 55-version-negotiation
+test-56 = 56-version-negotiation
+test-57 = 57-version-negotiation
+test-58 = 58-version-negotiation
+test-59 = 59-version-negotiation
+test-60 = 60-version-negotiation
+test-61 = 61-version-negotiation
+test-62 = 62-version-negotiation
+test-63 = 63-version-negotiation
+test-64 = 64-version-negotiation
+test-65 = 65-version-negotiation
+test-66 = 66-version-negotiation
+test-67 = 67-version-negotiation
+test-68 = 68-version-negotiation
+test-69 = 69-version-negotiation
+test-70 = 70-version-negotiation
+test-71 = 71-version-negotiation
+test-72 = 72-version-negotiation
+test-73 = 73-version-negotiation
+test-74 = 74-version-negotiation
+test-75 = 75-version-negotiation
+test-76 = 76-version-negotiation
+test-77 = 77-version-negotiation
+test-78 = 78-version-negotiation
+test-79 = 79-version-negotiation
+test-80 = 80-version-negotiation
+test-81 = 81-version-negotiation
+test-82 = 82-version-negotiation
+test-83 = 83-version-negotiation
+test-84 = 84-version-negotiation
+test-85 = 85-version-negotiation
+test-86 = 86-version-negotiation
+test-87 = 87-version-negotiation
+test-88 = 88-version-negotiation
+test-89 = 89-version-negotiation
+test-90 = 90-version-negotiation
+test-91 = 91-version-negotiation
+test-92 = 92-version-negotiation
+test-93 = 93-version-negotiation
+test-94 = 94-version-negotiation
+test-95 = 95-version-negotiation
+test-96 = 96-version-negotiation
+test-97 = 97-version-negotiation
+test-98 = 98-version-negotiation
+test-99 = 99-version-negotiation
+test-100 = 100-version-negotiation
+test-101 = 101-version-negotiation
+test-102 = 102-version-negotiation
+test-103 = 103-version-negotiation
+test-104 = 104-version-negotiation
+test-105 = 105-version-negotiation
+test-106 = 106-version-negotiation
+test-107 = 107-version-negotiation
+test-108 = 108-version-negotiation
+test-109 = 109-version-negotiation
+test-110 = 110-version-negotiation
+test-111 = 111-version-negotiation
+test-112 = 112-version-negotiation
+test-113 = 113-version-negotiation
+test-114 = 114-version-negotiation
+test-115 = 115-version-negotiation
+test-116 = 116-version-negotiation
+test-117 = 117-version-negotiation
+test-118 = 118-version-negotiation
+test-119 = 119-version-negotiation
+test-120 = 120-version-negotiation
+test-121 = 121-version-negotiation
+test-122 = 122-version-negotiation
+test-123 = 123-version-negotiation
+test-124 = 124-version-negotiation
+test-125 = 125-version-negotiation
+test-126 = 126-version-negotiation
+test-127 = 127-version-negotiation
+test-128 = 128-version-negotiation
+test-129 = 129-version-negotiation
+test-130 = 130-version-negotiation
+test-131 = 131-version-negotiation
+test-132 = 132-version-negotiation
+test-133 = 133-version-negotiation
+test-134 = 134-version-negotiation
+test-135 = 135-version-negotiation
+test-136 = 136-version-negotiation
+test-137 = 137-version-negotiation
+test-138 = 138-version-negotiation
+test-139 = 139-version-negotiation
+test-140 = 140-version-negotiation
+test-141 = 141-version-negotiation
+test-142 = 142-version-negotiation
+test-143 = 143-version-negotiation
+test-144 = 144-version-negotiation
+test-145 = 145-version-negotiation
+test-146 = 146-version-negotiation
+test-147 = 147-version-negotiation
+test-148 = 148-version-negotiation
+test-149 = 149-version-negotiation
+test-150 = 150-version-negotiation
+test-151 = 151-version-negotiation
+test-152 = 152-version-negotiation
+test-153 = 153-version-negotiation
+test-154 = 154-version-negotiation
+test-155 = 155-version-negotiation
+test-156 = 156-version-negotiation
+test-157 = 157-version-negotiation
+test-158 = 158-version-negotiation
+test-159 = 159-version-negotiation
+test-160 = 160-version-negotiation
+test-161 = 161-version-negotiation
+test-162 = 162-version-negotiation
+test-163 = 163-version-negotiation
+test-164 = 164-version-negotiation
+test-165 = 165-version-negotiation
+test-166 = 166-version-negotiation
+test-167 = 167-version-negotiation
+test-168 = 168-version-negotiation
+test-169 = 169-version-negotiation
+test-170 = 170-version-negotiation
+test-171 = 171-version-negotiation
+test-172 = 172-version-negotiation
+test-173 = 173-version-negotiation
+test-174 = 174-version-negotiation
+test-175 = 175-version-negotiation
+test-176 = 176-version-negotiation
+test-177 = 177-version-negotiation
+test-178 = 178-version-negotiation
+test-179 = 179-version-negotiation
+test-180 = 180-version-negotiation
+test-181 = 181-version-negotiation
+test-182 = 182-version-negotiation
+test-183 = 183-version-negotiation
+test-184 = 184-version-negotiation
+test-185 = 185-version-negotiation
+test-186 = 186-version-negotiation
+test-187 = 187-version-negotiation
+test-188 = 188-version-negotiation
+test-189 = 189-version-negotiation
+test-190 = 190-version-negotiation
+test-191 = 191-version-negotiation
+test-192 = 192-version-negotiation
+test-193 = 193-version-negotiation
+test-194 = 194-version-negotiation
+test-195 = 195-version-negotiation
+test-196 = 196-version-negotiation
+test-197 = 197-version-negotiation
+test-198 = 198-version-negotiation
+test-199 = 199-version-negotiation
+test-200 = 200-version-negotiation
+test-201 = 201-version-negotiation
+test-202 = 202-version-negotiation
+test-203 = 203-version-negotiation
+test-204 = 204-version-negotiation
+test-205 = 205-version-negotiation
+test-206 = 206-version-negotiation
+test-207 = 207-version-negotiation
+test-208 = 208-version-negotiation
+test-209 = 209-version-negotiation
+test-210 = 210-version-negotiation
+test-211 = 211-version-negotiation
+test-212 = 212-version-negotiation
+test-213 = 213-version-negotiation
+test-214 = 214-version-negotiation
+test-215 = 215-version-negotiation
+test-216 = 216-version-negotiation
+test-217 = 217-version-negotiation
+test-218 = 218-version-negotiation
+test-219 = 219-version-negotiation
+test-220 = 220-version-negotiation
+test-221 = 221-version-negotiation
+test-222 = 222-version-negotiation
+test-223 = 223-version-negotiation
+test-224 = 224-version-negotiation
+test-225 = 225-version-negotiation
+test-226 = 226-version-negotiation
+test-227 = 227-version-negotiation
+test-228 = 228-version-negotiation
+test-229 = 229-version-negotiation
+test-230 = 230-version-negotiation
+test-231 = 231-version-negotiation
+test-232 = 232-version-negotiation
+test-233 = 233-version-negotiation
+test-234 = 234-version-negotiation
+test-235 = 235-version-negotiation
+test-236 = 236-version-negotiation
+test-237 = 237-version-negotiation
+test-238 = 238-version-negotiation
+test-239 = 239-version-negotiation
+test-240 = 240-version-negotiation
+test-241 = 241-version-negotiation
+test-242 = 242-version-negotiation
+test-243 = 243-version-negotiation
+test-244 = 244-version-negotiation
+test-245 = 245-version-negotiation
+test-246 = 246-version-negotiation
+test-247 = 247-version-negotiation
+test-248 = 248-version-negotiation
+test-249 = 249-version-negotiation
+test-250 = 250-version-negotiation
+test-251 = 251-version-negotiation
+test-252 = 252-version-negotiation
+test-253 = 253-version-negotiation
+test-254 = 254-version-negotiation
+test-255 = 255-version-negotiation
+test-256 = 256-version-negotiation
+test-257 = 257-version-negotiation
+test-258 = 258-version-negotiation
+test-259 = 259-version-negotiation
+test-260 = 260-version-negotiation
+test-261 = 261-version-negotiation
+test-262 = 262-version-negotiation
+test-263 = 263-version-negotiation
+test-264 = 264-version-negotiation
+test-265 = 265-version-negotiation
+test-266 = 266-version-negotiation
+test-267 = 267-version-negotiation
+test-268 = 268-version-negotiation
+test-269 = 269-version-negotiation
+test-270 = 270-version-negotiation
+test-271 = 271-version-negotiation
+test-272 = 272-version-negotiation
+test-273 = 273-version-negotiation
+test-274 = 274-version-negotiation
+test-275 = 275-version-negotiation
+test-276 = 276-version-negotiation
+test-277 = 277-version-negotiation
+test-278 = 278-version-negotiation
+test-279 = 279-version-negotiation
+test-280 = 280-version-negotiation
+test-281 = 281-version-negotiation
+test-282 = 282-version-negotiation
+test-283 = 283-version-negotiation
+test-284 = 284-version-negotiation
+test-285 = 285-version-negotiation
+test-286 = 286-version-negotiation
+test-287 = 287-version-negotiation
+test-288 = 288-version-negotiation
+test-289 = 289-version-negotiation
+test-290 = 290-version-negotiation
+test-291 = 291-version-negotiation
+test-292 = 292-version-negotiation
+test-293 = 293-version-negotiation
+test-294 = 294-version-negotiation
+test-295 = 295-version-negotiation
+test-296 = 296-version-negotiation
+test-297 = 297-version-negotiation
+test-298 = 298-version-negotiation
+test-299 = 299-version-negotiation
+test-300 = 300-version-negotiation
+test-301 = 301-version-negotiation
+test-302 = 302-version-negotiation
+test-303 = 303-version-negotiation
+test-304 = 304-version-negotiation
+test-305 = 305-version-negotiation
+test-306 = 306-version-negotiation
+test-307 = 307-version-negotiation
+test-308 = 308-version-negotiation
+test-309 = 309-version-negotiation
+test-310 = 310-version-negotiation
+test-311 = 311-version-negotiation
+test-312 = 312-version-negotiation
+test-313 = 313-version-negotiation
+test-314 = 314-version-negotiation
+test-315 = 315-version-negotiation
+test-316 = 316-version-negotiation
+test-317 = 317-version-negotiation
+test-318 = 318-version-negotiation
+test-319 = 319-version-negotiation
+test-320 = 320-version-negotiation
+test-321 = 321-version-negotiation
+test-322 = 322-version-negotiation
+test-323 = 323-version-negotiation
+test-324 = 324-version-negotiation
+test-325 = 325-version-negotiation
+test-326 = 326-version-negotiation
+test-327 = 327-version-negotiation
+test-328 = 328-version-negotiation
+test-329 = 329-version-negotiation
+test-330 = 330-version-negotiation
+test-331 = 331-version-negotiation
+test-332 = 332-version-negotiation
+test-333 = 333-version-negotiation
+test-334 = 334-version-negotiation
+test-335 = 335-version-negotiation
+test-336 = 336-version-negotiation
+test-337 = 337-version-negotiation
+test-338 = 338-version-negotiation
+test-339 = 339-version-negotiation
+test-340 = 340-version-negotiation
+test-341 = 341-version-negotiation
+test-342 = 342-version-negotiation
+test-343 = 343-version-negotiation
+test-344 = 344-version-negotiation
+test-345 = 345-version-negotiation
+test-346 = 346-version-negotiation
+test-347 = 347-version-negotiation
+test-348 = 348-version-negotiation
+test-349 = 349-version-negotiation
+test-350 = 350-version-negotiation
+test-351 = 351-version-negotiation
+test-352 = 352-version-negotiation
+test-353 = 353-version-negotiation
+test-354 = 354-version-negotiation
+test-355 = 355-version-negotiation
+test-356 = 356-version-negotiation
+test-357 = 357-version-negotiation
+test-358 = 358-version-negotiation
+test-359 = 359-version-negotiation
+test-360 = 360-version-negotiation
+test-361 = 361-version-negotiation
+test-362 = 362-version-negotiation
+test-363 = 363-version-negotiation
+test-364 = 364-version-negotiation
+test-365 = 365-version-negotiation
+test-366 = 366-version-negotiation
+test-367 = 367-version-negotiation
+test-368 = 368-version-negotiation
+test-369 = 369-version-negotiation
+test-370 = 370-version-negotiation
+test-371 = 371-version-negotiation
+test-372 = 372-version-negotiation
+test-373 = 373-version-negotiation
+test-374 = 374-version-negotiation
+test-375 = 375-version-negotiation
+test-376 = 376-version-negotiation
+test-377 = 377-version-negotiation
+test-378 = 378-version-negotiation
+test-379 = 379-version-negotiation
+test-380 = 380-version-negotiation
+test-381 = 381-version-negotiation
+test-382 = 382-version-negotiation
+test-383 = 383-version-negotiation
+test-384 = 384-version-negotiation
+test-385 = 385-version-negotiation
+test-386 = 386-version-negotiation
+test-387 = 387-version-negotiation
+test-388 = 388-version-negotiation
+test-389 = 389-version-negotiation
+test-390 = 390-version-negotiation
+test-391 = 391-version-negotiation
+test-392 = 392-version-negotiation
+test-393 = 393-version-negotiation
+test-394 = 394-version-negotiation
+test-395 = 395-version-negotiation
+test-396 = 396-version-negotiation
+test-397 = 397-version-negotiation
+test-398 = 398-version-negotiation
+test-399 = 399-version-negotiation
+test-400 = 400-version-negotiation
+test-401 = 401-version-negotiation
+test-402 = 402-version-negotiation
+test-403 = 403-version-negotiation
+test-404 = 404-version-negotiation
+test-405 = 405-version-negotiation
+test-406 = 406-version-negotiation
+test-407 = 407-version-negotiation
+test-408 = 408-version-negotiation
+test-409 = 409-version-negotiation
+test-410 = 410-version-negotiation
+test-411 = 411-version-negotiation
+test-412 = 412-version-negotiation
+test-413 = 413-version-negotiation
+test-414 = 414-version-negotiation
+test-415 = 415-version-negotiation
+test-416 = 416-version-negotiation
+test-417 = 417-version-negotiation
+test-418 = 418-version-negotiation
+test-419 = 419-version-negotiation
+test-420 = 420-version-negotiation
+test-421 = 421-version-negotiation
+test-422 = 422-version-negotiation
+test-423 = 423-version-negotiation
+test-424 = 424-version-negotiation
+test-425 = 425-version-negotiation
+test-426 = 426-version-negotiation
+test-427 = 427-version-negotiation
+test-428 = 428-version-negotiation
+test-429 = 429-version-negotiation
+test-430 = 430-version-negotiation
+test-431 = 431-version-negotiation
+test-432 = 432-version-negotiation
+test-433 = 433-version-negotiation
+test-434 = 434-version-negotiation
+test-435 = 435-version-negotiation
+test-436 = 436-version-negotiation
+test-437 = 437-version-negotiation
+test-438 = 438-version-negotiation
+test-439 = 439-version-negotiation
+test-440 = 440-version-negotiation
+test-441 = 441-version-negotiation
+test-442 = 442-version-negotiation
+test-443 = 443-version-negotiation
+test-444 = 444-version-negotiation
+test-445 = 445-version-negotiation
+test-446 = 446-version-negotiation
+test-447 = 447-version-negotiation
+test-448 = 448-version-negotiation
+test-449 = 449-version-negotiation
+test-450 = 450-version-negotiation
+test-451 = 451-version-negotiation
+test-452 = 452-version-negotiation
+test-453 = 453-version-negotiation
+test-454 = 454-version-negotiation
+test-455 = 455-version-negotiation
+test-456 = 456-version-negotiation
+test-457 = 457-version-negotiation
+test-458 = 458-version-negotiation
+test-459 = 459-version-negotiation
+test-460 = 460-version-negotiation
+test-461 = 461-version-negotiation
+test-462 = 462-version-negotiation
+test-463 = 463-version-negotiation
+test-464 = 464-version-negotiation
+test-465 = 465-version-negotiation
+test-466 = 466-version-negotiation
+test-467 = 467-version-negotiation
+test-468 = 468-version-negotiation
+test-469 = 469-version-negotiation
+test-470 = 470-version-negotiation
+test-471 = 471-version-negotiation
+test-472 = 472-version-negotiation
+test-473 = 473-version-negotiation
+test-474 = 474-version-negotiation
+test-475 = 475-version-negotiation
+test-476 = 476-version-negotiation
+test-477 = 477-version-negotiation
+test-478 = 478-version-negotiation
+test-479 = 479-version-negotiation
+test-480 = 480-version-negotiation
+test-481 = 481-version-negotiation
+test-482 = 482-version-negotiation
+test-483 = 483-version-negotiation
+test-484 = 484-version-negotiation
+test-485 = 485-version-negotiation
+test-486 = 486-version-negotiation
+test-487 = 487-version-negotiation
+test-488 = 488-version-negotiation
+test-489 = 489-version-negotiation
+test-490 = 490-version-negotiation
+test-491 = 491-version-negotiation
+test-492 = 492-version-negotiation
+test-493 = 493-version-negotiation
+test-494 = 494-version-negotiation
+test-495 = 495-version-negotiation
+test-496 = 496-version-negotiation
+test-497 = 497-version-negotiation
+test-498 = 498-version-negotiation
+test-499 = 499-version-negotiation
+test-500 = 500-version-negotiation
+test-501 = 501-version-negotiation
+test-502 = 502-version-negotiation
+test-503 = 503-version-negotiation
+test-504 = 504-version-negotiation
+test-505 = 505-version-negotiation
+test-506 = 506-version-negotiation
+test-507 = 507-version-negotiation
+test-508 = 508-version-negotiation
+test-509 = 509-version-negotiation
+test-510 = 510-version-negotiation
+test-511 = 511-version-negotiation
+test-512 = 512-version-negotiation
+test-513 = 513-version-negotiation
+test-514 = 514-version-negotiation
+test-515 = 515-version-negotiation
+test-516 = 516-version-negotiation
+test-517 = 517-version-negotiation
+test-518 = 518-version-negotiation
+test-519 = 519-version-negotiation
+test-520 = 520-version-negotiation
+test-521 = 521-version-negotiation
+test-522 = 522-version-negotiation
+test-523 = 523-version-negotiation
+test-524 = 524-version-negotiation
+test-525 = 525-version-negotiation
+test-526 = 526-version-negotiation
+test-527 = 527-version-negotiation
+test-528 = 528-version-negotiation
+test-529 = 529-version-negotiation
+test-530 = 530-version-negotiation
+test-531 = 531-version-negotiation
+test-532 = 532-version-negotiation
+test-533 = 533-version-negotiation
+test-534 = 534-version-negotiation
+test-535 = 535-version-negotiation
+test-536 = 536-version-negotiation
+test-537 = 537-version-negotiation
+test-538 = 538-version-negotiation
+test-539 = 539-version-negotiation
+test-540 = 540-version-negotiation
+test-541 = 541-version-negotiation
+test-542 = 542-version-negotiation
+test-543 = 543-version-negotiation
+test-544 = 544-version-negotiation
+test-545 = 545-version-negotiation
+test-546 = 546-version-negotiation
+test-547 = 547-version-negotiation
+test-548 = 548-version-negotiation
+test-549 = 549-version-negotiation
+test-550 = 550-version-negotiation
+test-551 = 551-version-negotiation
+test-552 = 552-version-negotiation
+test-553 = 553-version-negotiation
+test-554 = 554-version-negotiation
+test-555 = 555-version-negotiation
+test-556 = 556-version-negotiation
+test-557 = 557-version-negotiation
+test-558 = 558-version-negotiation
+test-559 = 559-version-negotiation
+test-560 = 560-version-negotiation
+test-561 = 561-version-negotiation
+test-562 = 562-version-negotiation
+test-563 = 563-version-negotiation
+test-564 = 564-version-negotiation
+test-565 = 565-version-negotiation
+test-566 = 566-version-negotiation
+test-567 = 567-version-negotiation
+test-568 = 568-version-negotiation
+test-569 = 569-version-negotiation
+test-570 = 570-version-negotiation
+test-571 = 571-version-negotiation
+test-572 = 572-version-negotiation
+test-573 = 573-version-negotiation
+test-574 = 574-version-negotiation
+test-575 = 575-version-negotiation
+test-576 = 576-version-negotiation
+test-577 = 577-version-negotiation
+test-578 = 578-version-negotiation
+test-579 = 579-version-negotiation
+test-580 = 580-version-negotiation
+test-581 = 581-version-negotiation
+test-582 = 582-version-negotiation
+test-583 = 583-version-negotiation
+test-584 = 584-version-negotiation
+test-585 = 585-version-negotiation
+test-586 = 586-version-negotiation
+test-587 = 587-version-negotiation
+test-588 = 588-version-negotiation
+test-589 = 589-version-negotiation
+test-590 = 590-version-negotiation
+test-591 = 591-version-negotiation
+test-592 = 592-version-negotiation
+test-593 = 593-version-negotiation
+test-594 = 594-version-negotiation
+test-595 = 595-version-negotiation
+test-596 = 596-version-negotiation
+test-597 = 597-version-negotiation
+test-598 = 598-version-negotiation
+test-599 = 599-version-negotiation
+test-600 = 600-version-negotiation
+test-601 = 601-version-negotiation
+test-602 = 602-version-negotiation
+test-603 = 603-version-negotiation
+test-604 = 604-version-negotiation
+test-605 = 605-version-negotiation
+test-606 = 606-version-negotiation
+test-607 = 607-version-negotiation
+test-608 = 608-version-negotiation
+test-609 = 609-version-negotiation
+test-610 = 610-version-negotiation
+test-611 = 611-version-negotiation
+test-612 = 612-version-negotiation
+test-613 = 613-version-negotiation
+test-614 = 614-version-negotiation
+test-615 = 615-version-negotiation
+test-616 = 616-version-negotiation
+test-617 = 617-version-negotiation
+test-618 = 618-version-negotiation
+test-619 = 619-version-negotiation
+test-620 = 620-version-negotiation
+test-621 = 621-version-negotiation
+test-622 = 622-version-negotiation
+test-623 = 623-version-negotiation
+test-624 = 624-version-negotiation
+test-625 = 625-version-negotiation
+test-626 = 626-version-negotiation
+test-627 = 627-version-negotiation
+test-628 = 628-version-negotiation
+test-629 = 629-version-negotiation
+test-630 = 630-version-negotiation
+test-631 = 631-version-negotiation
+test-632 = 632-version-negotiation
+test-633 = 633-version-negotiation
+test-634 = 634-version-negotiation
+test-635 = 635-version-negotiation
+test-636 = 636-version-negotiation
+test-637 = 637-version-negotiation
+test-638 = 638-version-negotiation
+test-639 = 639-version-negotiation
+test-640 = 640-version-negotiation
+test-641 = 641-version-negotiation
+test-642 = 642-version-negotiation
+test-643 = 643-version-negotiation
+test-644 = 644-version-negotiation
+test-645 = 645-version-negotiation
+test-646 = 646-version-negotiation
+test-647 = 647-version-negotiation
+test-648 = 648-version-negotiation
+test-649 = 649-version-negotiation
+test-650 = 650-version-negotiation
+test-651 = 651-version-negotiation
+test-652 = 652-version-negotiation
+test-653 = 653-version-negotiation
+test-654 = 654-version-negotiation
+test-655 = 655-version-negotiation
+test-656 = 656-version-negotiation
+test-657 = 657-version-negotiation
+test-658 = 658-version-negotiation
+test-659 = 659-version-negotiation
+test-660 = 660-version-negotiation
+test-661 = 661-version-negotiation
+test-662 = 662-version-negotiation
+test-663 = 663-version-negotiation
+test-664 = 664-version-negotiation
+test-665 = 665-version-negotiation
+test-666 = 666-version-negotiation
+test-667 = 667-version-negotiation
+test-668 = 668-version-negotiation
+test-669 = 669-version-negotiation
+test-670 = 670-version-negotiation
+test-671 = 671-version-negotiation
+test-672 = 672-version-negotiation
+test-673 = 673-version-negotiation
+test-674 = 674-version-negotiation
+test-675 = 675-version-negotiation
+test-676 = 676-ciphersuite-sanity-check-client
+test-677 = 677-ciphersuite-sanity-check-server
+# ===========================================================
+
+[0-version-negotiation]
+ssl_conf = 0-version-negotiation-ssl
+
+[0-version-negotiation-ssl]
+server = 0-version-negotiation-server
+client = 0-version-negotiation-client
+
+[0-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[1-version-negotiation]
+ssl_conf = 1-version-negotiation-ssl
+
+[1-version-negotiation-ssl]
+server = 1-version-negotiation-server
+client = 1-version-negotiation-client
+
+[1-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[2-version-negotiation]
+ssl_conf = 2-version-negotiation-ssl
+
+[2-version-negotiation-ssl]
+server = 2-version-negotiation-server
+client = 2-version-negotiation-client
+
+[2-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[3-version-negotiation]
+ssl_conf = 3-version-negotiation-ssl
+
+[3-version-negotiation-ssl]
+server = 3-version-negotiation-server
+client = 3-version-negotiation-client
+
+[3-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[4-version-negotiation]
+ssl_conf = 4-version-negotiation-ssl
+
+[4-version-negotiation-ssl]
+server = 4-version-negotiation-server
+client = 4-version-negotiation-client
+
+[4-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[5-version-negotiation]
+ssl_conf = 5-version-negotiation-ssl
+
+[5-version-negotiation-ssl]
+server = 5-version-negotiation-server
+client = 5-version-negotiation-client
+
+[5-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[6-version-negotiation]
+ssl_conf = 6-version-negotiation-ssl
+
+[6-version-negotiation-ssl]
+server = 6-version-negotiation-server
+client = 6-version-negotiation-client
+
+[6-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[7-version-negotiation]
+ssl_conf = 7-version-negotiation-ssl
+
+[7-version-negotiation-ssl]
+server = 7-version-negotiation-server
+client = 7-version-negotiation-client
+
+[7-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[8-version-negotiation]
+ssl_conf = 8-version-negotiation-ssl
+
+[8-version-negotiation-ssl]
+server = 8-version-negotiation-server
+client = 8-version-negotiation-client
+
+[8-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[9-version-negotiation]
+ssl_conf = 9-version-negotiation-ssl
+
+[9-version-negotiation-ssl]
+server = 9-version-negotiation-server
+client = 9-version-negotiation-client
+
+[9-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[10-version-negotiation]
+ssl_conf = 10-version-negotiation-ssl
+
+[10-version-negotiation-ssl]
+server = 10-version-negotiation-server
+client = 10-version-negotiation-client
+
+[10-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[11-version-negotiation]
+ssl_conf = 11-version-negotiation-ssl
+
+[11-version-negotiation-ssl]
+server = 11-version-negotiation-server
+client = 11-version-negotiation-client
+
+[11-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[12-version-negotiation]
+ssl_conf = 12-version-negotiation-ssl
+
+[12-version-negotiation-ssl]
+server = 12-version-negotiation-server
+client = 12-version-negotiation-client
+
+[12-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[13-version-negotiation]
+ssl_conf = 13-version-negotiation-ssl
+
+[13-version-negotiation-ssl]
+server = 13-version-negotiation-server
+client = 13-version-negotiation-client
+
+[13-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[14-version-negotiation]
+ssl_conf = 14-version-negotiation-ssl
+
+[14-version-negotiation-ssl]
+server = 14-version-negotiation-server
+client = 14-version-negotiation-client
+
+[14-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[15-version-negotiation]
+ssl_conf = 15-version-negotiation-ssl
+
+[15-version-negotiation-ssl]
+server = 15-version-negotiation-server
+client = 15-version-negotiation-client
+
+[15-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[16-version-negotiation]
+ssl_conf = 16-version-negotiation-ssl
+
+[16-version-negotiation-ssl]
+server = 16-version-negotiation-server
+client = 16-version-negotiation-client
+
+[16-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-16]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[17-version-negotiation]
+ssl_conf = 17-version-negotiation-ssl
+
+[17-version-negotiation-ssl]
+server = 17-version-negotiation-server
+client = 17-version-negotiation-client
+
+[17-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[17-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-17]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[18-version-negotiation]
+ssl_conf = 18-version-negotiation-ssl
+
+[18-version-negotiation-ssl]
+server = 18-version-negotiation-server
+client = 18-version-negotiation-client
+
+[18-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-18]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[19-version-negotiation]
+ssl_conf = 19-version-negotiation-ssl
+
+[19-version-negotiation-ssl]
+server = 19-version-negotiation-server
+client = 19-version-negotiation-client
+
+[19-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[19-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-19]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[20-version-negotiation]
+ssl_conf = 20-version-negotiation-ssl
+
+[20-version-negotiation-ssl]
+server = 20-version-negotiation-server
+client = 20-version-negotiation-client
+
+[20-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[20-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-20]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[21-version-negotiation]
+ssl_conf = 21-version-negotiation-ssl
+
+[21-version-negotiation-ssl]
+server = 21-version-negotiation-server
+client = 21-version-negotiation-client
+
+[21-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[21-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-21]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[22-version-negotiation]
+ssl_conf = 22-version-negotiation-ssl
+
+[22-version-negotiation-ssl]
+server = 22-version-negotiation-server
+client = 22-version-negotiation-client
+
+[22-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[22-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-22]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[23-version-negotiation]
+ssl_conf = 23-version-negotiation-ssl
+
+[23-version-negotiation-ssl]
+server = 23-version-negotiation-server
+client = 23-version-negotiation-client
+
+[23-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[23-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-23]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[24-version-negotiation]
+ssl_conf = 24-version-negotiation-ssl
+
+[24-version-negotiation-ssl]
+server = 24-version-negotiation-server
+client = 24-version-negotiation-client
+
+[24-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[24-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-24]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[25-version-negotiation]
+ssl_conf = 25-version-negotiation-ssl
+
+[25-version-negotiation-ssl]
+server = 25-version-negotiation-server
+client = 25-version-negotiation-client
+
+[25-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[25-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-25]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[26-version-negotiation]
+ssl_conf = 26-version-negotiation-ssl
+
+[26-version-negotiation-ssl]
+server = 26-version-negotiation-server
+client = 26-version-negotiation-client
+
+[26-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[26-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-26]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[27-version-negotiation]
+ssl_conf = 27-version-negotiation-ssl
+
+[27-version-negotiation-ssl]
+server = 27-version-negotiation-server
+client = 27-version-negotiation-client
+
+[27-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[27-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-27]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[28-version-negotiation]
+ssl_conf = 28-version-negotiation-ssl
+
+[28-version-negotiation-ssl]
+server = 28-version-negotiation-server
+client = 28-version-negotiation-client
+
+[28-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[28-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-28]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[29-version-negotiation]
+ssl_conf = 29-version-negotiation-ssl
+
+[29-version-negotiation-ssl]
+server = 29-version-negotiation-server
+client = 29-version-negotiation-client
+
+[29-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[29-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-29]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[30-version-negotiation]
+ssl_conf = 30-version-negotiation-ssl
+
+[30-version-negotiation-ssl]
+server = 30-version-negotiation-server
+client = 30-version-negotiation-client
+
+[30-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[30-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-30]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[31-version-negotiation]
+ssl_conf = 31-version-negotiation-ssl
+
+[31-version-negotiation-ssl]
+server = 31-version-negotiation-server
+client = 31-version-negotiation-client
+
+[31-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[31-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-31]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[32-version-negotiation]
+ssl_conf = 32-version-negotiation-ssl
+
+[32-version-negotiation-ssl]
+server = 32-version-negotiation-server
+client = 32-version-negotiation-client
+
+[32-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[32-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-32]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[33-version-negotiation]
+ssl_conf = 33-version-negotiation-ssl
+
+[33-version-negotiation-ssl]
+server = 33-version-negotiation-server
+client = 33-version-negotiation-client
+
+[33-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[33-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-33]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[34-version-negotiation]
+ssl_conf = 34-version-negotiation-ssl
+
+[34-version-negotiation-ssl]
+server = 34-version-negotiation-server
+client = 34-version-negotiation-client
+
+[34-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[34-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-34]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[35-version-negotiation]
+ssl_conf = 35-version-negotiation-ssl
+
+[35-version-negotiation-ssl]
+server = 35-version-negotiation-server
+client = 35-version-negotiation-client
+
+[35-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[35-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-35]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[36-version-negotiation]
+ssl_conf = 36-version-negotiation-ssl
+
+[36-version-negotiation-ssl]
+server = 36-version-negotiation-server
+client = 36-version-negotiation-client
+
+[36-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[36-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-36]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[37-version-negotiation]
+ssl_conf = 37-version-negotiation-ssl
+
+[37-version-negotiation-ssl]
+server = 37-version-negotiation-server
+client = 37-version-negotiation-client
+
+[37-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[37-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-37]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[38-version-negotiation]
+ssl_conf = 38-version-negotiation-ssl
+
+[38-version-negotiation-ssl]
+server = 38-version-negotiation-server
+client = 38-version-negotiation-client
+
+[38-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[38-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-38]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[39-version-negotiation]
+ssl_conf = 39-version-negotiation-ssl
+
+[39-version-negotiation-ssl]
+server = 39-version-negotiation-server
+client = 39-version-negotiation-client
+
+[39-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[39-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-39]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[40-version-negotiation]
+ssl_conf = 40-version-negotiation-ssl
+
+[40-version-negotiation-ssl]
+server = 40-version-negotiation-server
+client = 40-version-negotiation-client
+
+[40-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[40-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-40]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[41-version-negotiation]
+ssl_conf = 41-version-negotiation-ssl
+
+[41-version-negotiation-ssl]
+server = 41-version-negotiation-server
+client = 41-version-negotiation-client
+
+[41-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[41-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-41]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[42-version-negotiation]
+ssl_conf = 42-version-negotiation-ssl
+
+[42-version-negotiation-ssl]
+server = 42-version-negotiation-server
+client = 42-version-negotiation-client
+
+[42-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[42-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-42]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[43-version-negotiation]
+ssl_conf = 43-version-negotiation-ssl
+
+[43-version-negotiation-ssl]
+server = 43-version-negotiation-server
+client = 43-version-negotiation-client
+
+[43-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[43-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-43]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[44-version-negotiation]
+ssl_conf = 44-version-negotiation-ssl
+
+[44-version-negotiation-ssl]
+server = 44-version-negotiation-server
+client = 44-version-negotiation-client
+
+[44-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[44-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-44]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[45-version-negotiation]
+ssl_conf = 45-version-negotiation-ssl
+
+[45-version-negotiation-ssl]
+server = 45-version-negotiation-server
+client = 45-version-negotiation-client
+
+[45-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[45-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-45]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[46-version-negotiation]
+ssl_conf = 46-version-negotiation-ssl
+
+[46-version-negotiation-ssl]
+server = 46-version-negotiation-server
+client = 46-version-negotiation-client
+
+[46-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[46-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-46]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[47-version-negotiation]
+ssl_conf = 47-version-negotiation-ssl
+
+[47-version-negotiation-ssl]
+server = 47-version-negotiation-server
+client = 47-version-negotiation-client
+
+[47-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[47-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-47]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[48-version-negotiation]
+ssl_conf = 48-version-negotiation-ssl
+
+[48-version-negotiation-ssl]
+server = 48-version-negotiation-server
+client = 48-version-negotiation-client
+
+[48-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[48-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-48]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[49-version-negotiation]
+ssl_conf = 49-version-negotiation-ssl
+
+[49-version-negotiation-ssl]
+server = 49-version-negotiation-server
+client = 49-version-negotiation-client
+
+[49-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[49-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-49]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[50-version-negotiation]
+ssl_conf = 50-version-negotiation-ssl
+
+[50-version-negotiation-ssl]
+server = 50-version-negotiation-server
+client = 50-version-negotiation-client
+
+[50-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[50-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-50]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[51-version-negotiation]
+ssl_conf = 51-version-negotiation-ssl
+
+[51-version-negotiation-ssl]
+server = 51-version-negotiation-server
+client = 51-version-negotiation-client
+
+[51-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[51-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-51]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[52-version-negotiation]
+ssl_conf = 52-version-negotiation-ssl
+
+[52-version-negotiation-ssl]
+server = 52-version-negotiation-server
+client = 52-version-negotiation-client
+
+[52-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[52-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-52]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[53-version-negotiation]
+ssl_conf = 53-version-negotiation-ssl
+
+[53-version-negotiation-ssl]
+server = 53-version-negotiation-server
+client = 53-version-negotiation-client
+
+[53-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[53-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-53]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[54-version-negotiation]
+ssl_conf = 54-version-negotiation-ssl
+
+[54-version-negotiation-ssl]
+server = 54-version-negotiation-server
+client = 54-version-negotiation-client
+
+[54-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[54-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-54]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[55-version-negotiation]
+ssl_conf = 55-version-negotiation-ssl
+
+[55-version-negotiation-ssl]
+server = 55-version-negotiation-server
+client = 55-version-negotiation-client
+
+[55-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[55-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-55]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[56-version-negotiation]
+ssl_conf = 56-version-negotiation-ssl
+
+[56-version-negotiation-ssl]
+server = 56-version-negotiation-server
+client = 56-version-negotiation-client
+
+[56-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[56-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-56]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[57-version-negotiation]
+ssl_conf = 57-version-negotiation-ssl
+
+[57-version-negotiation-ssl]
+server = 57-version-negotiation-server
+client = 57-version-negotiation-client
+
+[57-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[57-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-57]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[58-version-negotiation]
+ssl_conf = 58-version-negotiation-ssl
+
+[58-version-negotiation-ssl]
+server = 58-version-negotiation-server
+client = 58-version-negotiation-client
+
+[58-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[58-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-58]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[59-version-negotiation]
+ssl_conf = 59-version-negotiation-ssl
+
+[59-version-negotiation-ssl]
+server = 59-version-negotiation-server
+client = 59-version-negotiation-client
+
+[59-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[59-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-59]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[60-version-negotiation]
+ssl_conf = 60-version-negotiation-ssl
+
+[60-version-negotiation-ssl]
+server = 60-version-negotiation-server
+client = 60-version-negotiation-client
+
+[60-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[60-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-60]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[61-version-negotiation]
+ssl_conf = 61-version-negotiation-ssl
+
+[61-version-negotiation-ssl]
+server = 61-version-negotiation-server
+client = 61-version-negotiation-client
+
+[61-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[61-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-61]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[62-version-negotiation]
+ssl_conf = 62-version-negotiation-ssl
+
+[62-version-negotiation-ssl]
+server = 62-version-negotiation-server
+client = 62-version-negotiation-client
+
+[62-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[62-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-62]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[63-version-negotiation]
+ssl_conf = 63-version-negotiation-ssl
+
+[63-version-negotiation-ssl]
+server = 63-version-negotiation-server
+client = 63-version-negotiation-client
+
+[63-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[63-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-63]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[64-version-negotiation]
+ssl_conf = 64-version-negotiation-ssl
+
+[64-version-negotiation-ssl]
+server = 64-version-negotiation-server
+client = 64-version-negotiation-client
+
+[64-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[64-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-64]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[65-version-negotiation]
+ssl_conf = 65-version-negotiation-ssl
+
+[65-version-negotiation-ssl]
+server = 65-version-negotiation-server
+client = 65-version-negotiation-client
+
+[65-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[65-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-65]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[66-version-negotiation]
+ssl_conf = 66-version-negotiation-ssl
+
+[66-version-negotiation-ssl]
+server = 66-version-negotiation-server
+client = 66-version-negotiation-client
+
+[66-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[66-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-66]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[67-version-negotiation]
+ssl_conf = 67-version-negotiation-ssl
+
+[67-version-negotiation-ssl]
+server = 67-version-negotiation-server
+client = 67-version-negotiation-client
+
+[67-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[67-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-67]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[68-version-negotiation]
+ssl_conf = 68-version-negotiation-ssl
+
+[68-version-negotiation-ssl]
+server = 68-version-negotiation-server
+client = 68-version-negotiation-client
+
+[68-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[68-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-68]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[69-version-negotiation]
+ssl_conf = 69-version-negotiation-ssl
+
+[69-version-negotiation-ssl]
+server = 69-version-negotiation-server
+client = 69-version-negotiation-client
+
+[69-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[69-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-69]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[70-version-negotiation]
+ssl_conf = 70-version-negotiation-ssl
+
+[70-version-negotiation-ssl]
+server = 70-version-negotiation-server
+client = 70-version-negotiation-client
+
+[70-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[70-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-70]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[71-version-negotiation]
+ssl_conf = 71-version-negotiation-ssl
+
+[71-version-negotiation-ssl]
+server = 71-version-negotiation-server
+client = 71-version-negotiation-client
+
+[71-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[71-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-71]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[72-version-negotiation]
+ssl_conf = 72-version-negotiation-ssl
+
+[72-version-negotiation-ssl]
+server = 72-version-negotiation-server
+client = 72-version-negotiation-client
+
+[72-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[72-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-72]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[73-version-negotiation]
+ssl_conf = 73-version-negotiation-ssl
+
+[73-version-negotiation-ssl]
+server = 73-version-negotiation-server
+client = 73-version-negotiation-client
+
+[73-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[73-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-73]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[74-version-negotiation]
+ssl_conf = 74-version-negotiation-ssl
+
+[74-version-negotiation-ssl]
+server = 74-version-negotiation-server
+client = 74-version-negotiation-client
+
+[74-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[74-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-74]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[75-version-negotiation]
+ssl_conf = 75-version-negotiation-ssl
+
+[75-version-negotiation-ssl]
+server = 75-version-negotiation-server
+client = 75-version-negotiation-client
+
+[75-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[75-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-75]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[76-version-negotiation]
+ssl_conf = 76-version-negotiation-ssl
+
+[76-version-negotiation-ssl]
+server = 76-version-negotiation-server
+client = 76-version-negotiation-client
+
+[76-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[76-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-76]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[77-version-negotiation]
+ssl_conf = 77-version-negotiation-ssl
+
+[77-version-negotiation-ssl]
+server = 77-version-negotiation-server
+client = 77-version-negotiation-client
+
+[77-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[77-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-77]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[78-version-negotiation]
+ssl_conf = 78-version-negotiation-ssl
+
+[78-version-negotiation-ssl]
+server = 78-version-negotiation-server
+client = 78-version-negotiation-client
+
+[78-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[78-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-78]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[79-version-negotiation]
+ssl_conf = 79-version-negotiation-ssl
+
+[79-version-negotiation-ssl]
+server = 79-version-negotiation-server
+client = 79-version-negotiation-client
+
+[79-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[79-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-79]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[80-version-negotiation]
+ssl_conf = 80-version-negotiation-ssl
+
+[80-version-negotiation-ssl]
+server = 80-version-negotiation-server
+client = 80-version-negotiation-client
+
+[80-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[80-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-80]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[81-version-negotiation]
+ssl_conf = 81-version-negotiation-ssl
+
+[81-version-negotiation-ssl]
+server = 81-version-negotiation-server
+client = 81-version-negotiation-client
+
+[81-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[81-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-81]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[82-version-negotiation]
+ssl_conf = 82-version-negotiation-ssl
+
+[82-version-negotiation-ssl]
+server = 82-version-negotiation-server
+client = 82-version-negotiation-client
+
+[82-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[82-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-82]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[83-version-negotiation]
+ssl_conf = 83-version-negotiation-ssl
+
+[83-version-negotiation-ssl]
+server = 83-version-negotiation-server
+client = 83-version-negotiation-client
+
+[83-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[83-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-83]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[84-version-negotiation]
+ssl_conf = 84-version-negotiation-ssl
+
+[84-version-negotiation-ssl]
+server = 84-version-negotiation-server
+client = 84-version-negotiation-client
+
+[84-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[84-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-84]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[85-version-negotiation]
+ssl_conf = 85-version-negotiation-ssl
+
+[85-version-negotiation-ssl]
+server = 85-version-negotiation-server
+client = 85-version-negotiation-client
+
+[85-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[85-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-85]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[86-version-negotiation]
+ssl_conf = 86-version-negotiation-ssl
+
+[86-version-negotiation-ssl]
+server = 86-version-negotiation-server
+client = 86-version-negotiation-client
+
+[86-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[86-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-86]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[87-version-negotiation]
+ssl_conf = 87-version-negotiation-ssl
+
+[87-version-negotiation-ssl]
+server = 87-version-negotiation-server
+client = 87-version-negotiation-client
+
+[87-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[87-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-87]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[88-version-negotiation]
+ssl_conf = 88-version-negotiation-ssl
+
+[88-version-negotiation-ssl]
+server = 88-version-negotiation-server
+client = 88-version-negotiation-client
+
+[88-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[88-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-88]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[89-version-negotiation]
+ssl_conf = 89-version-negotiation-ssl
+
+[89-version-negotiation-ssl]
+server = 89-version-negotiation-server
+client = 89-version-negotiation-client
+
+[89-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[89-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-89]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[90-version-negotiation]
+ssl_conf = 90-version-negotiation-ssl
+
+[90-version-negotiation-ssl]
+server = 90-version-negotiation-server
+client = 90-version-negotiation-client
+
+[90-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[90-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-90]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[91-version-negotiation]
+ssl_conf = 91-version-negotiation-ssl
+
+[91-version-negotiation-ssl]
+server = 91-version-negotiation-server
+client = 91-version-negotiation-client
+
+[91-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[91-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-91]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[92-version-negotiation]
+ssl_conf = 92-version-negotiation-ssl
+
+[92-version-negotiation-ssl]
+server = 92-version-negotiation-server
+client = 92-version-negotiation-client
+
+[92-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[92-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-92]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[93-version-negotiation]
+ssl_conf = 93-version-negotiation-ssl
+
+[93-version-negotiation-ssl]
+server = 93-version-negotiation-server
+client = 93-version-negotiation-client
+
+[93-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[93-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-93]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[94-version-negotiation]
+ssl_conf = 94-version-negotiation-ssl
+
+[94-version-negotiation-ssl]
+server = 94-version-negotiation-server
+client = 94-version-negotiation-client
+
+[94-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[94-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-94]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[95-version-negotiation]
+ssl_conf = 95-version-negotiation-ssl
+
+[95-version-negotiation-ssl]
+server = 95-version-negotiation-server
+client = 95-version-negotiation-client
+
+[95-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[95-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-95]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[96-version-negotiation]
+ssl_conf = 96-version-negotiation-ssl
+
+[96-version-negotiation-ssl]
+server = 96-version-negotiation-server
+client = 96-version-negotiation-client
+
+[96-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[96-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-96]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[97-version-negotiation]
+ssl_conf = 97-version-negotiation-ssl
+
+[97-version-negotiation-ssl]
+server = 97-version-negotiation-server
+client = 97-version-negotiation-client
+
+[97-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[97-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-97]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[98-version-negotiation]
+ssl_conf = 98-version-negotiation-ssl
+
+[98-version-negotiation-ssl]
+server = 98-version-negotiation-server
+client = 98-version-negotiation-client
+
+[98-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[98-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-98]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[99-version-negotiation]
+ssl_conf = 99-version-negotiation-ssl
+
+[99-version-negotiation-ssl]
+server = 99-version-negotiation-server
+client = 99-version-negotiation-client
+
+[99-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[99-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-99]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[100-version-negotiation]
+ssl_conf = 100-version-negotiation-ssl
+
+[100-version-negotiation-ssl]
+server = 100-version-negotiation-server
+client = 100-version-negotiation-client
+
+[100-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[100-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-100]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[101-version-negotiation]
+ssl_conf = 101-version-negotiation-ssl
+
+[101-version-negotiation-ssl]
+server = 101-version-negotiation-server
+client = 101-version-negotiation-client
+
+[101-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[101-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-101]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[102-version-negotiation]
+ssl_conf = 102-version-negotiation-ssl
+
+[102-version-negotiation-ssl]
+server = 102-version-negotiation-server
+client = 102-version-negotiation-client
+
+[102-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[102-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-102]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[103-version-negotiation]
+ssl_conf = 103-version-negotiation-ssl
+
+[103-version-negotiation-ssl]
+server = 103-version-negotiation-server
+client = 103-version-negotiation-client
+
+[103-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[103-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-103]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[104-version-negotiation]
+ssl_conf = 104-version-negotiation-ssl
+
+[104-version-negotiation-ssl]
+server = 104-version-negotiation-server
+client = 104-version-negotiation-client
+
+[104-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[104-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-104]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[105-version-negotiation]
+ssl_conf = 105-version-negotiation-ssl
+
+[105-version-negotiation-ssl]
+server = 105-version-negotiation-server
+client = 105-version-negotiation-client
+
+[105-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[105-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-105]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[106-version-negotiation]
+ssl_conf = 106-version-negotiation-ssl
+
+[106-version-negotiation-ssl]
+server = 106-version-negotiation-server
+client = 106-version-negotiation-client
+
+[106-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[106-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-106]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[107-version-negotiation]
+ssl_conf = 107-version-negotiation-ssl
+
+[107-version-negotiation-ssl]
+server = 107-version-negotiation-server
+client = 107-version-negotiation-client
+
+[107-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[107-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-107]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[108-version-negotiation]
+ssl_conf = 108-version-negotiation-ssl
+
+[108-version-negotiation-ssl]
+server = 108-version-negotiation-server
+client = 108-version-negotiation-client
+
+[108-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[108-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-108]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[109-version-negotiation]
+ssl_conf = 109-version-negotiation-ssl
+
+[109-version-negotiation-ssl]
+server = 109-version-negotiation-server
+client = 109-version-negotiation-client
+
+[109-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[109-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-109]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[110-version-negotiation]
+ssl_conf = 110-version-negotiation-ssl
+
+[110-version-negotiation-ssl]
+server = 110-version-negotiation-server
+client = 110-version-negotiation-client
+
+[110-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[110-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-110]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[111-version-negotiation]
+ssl_conf = 111-version-negotiation-ssl
+
+[111-version-negotiation-ssl]
+server = 111-version-negotiation-server
+client = 111-version-negotiation-client
+
+[111-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[111-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-111]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[112-version-negotiation]
+ssl_conf = 112-version-negotiation-ssl
+
+[112-version-negotiation-ssl]
+server = 112-version-negotiation-server
+client = 112-version-negotiation-client
+
+[112-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[112-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-112]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[113-version-negotiation]
+ssl_conf = 113-version-negotiation-ssl
+
+[113-version-negotiation-ssl]
+server = 113-version-negotiation-server
+client = 113-version-negotiation-client
+
+[113-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[113-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-113]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[114-version-negotiation]
+ssl_conf = 114-version-negotiation-ssl
+
+[114-version-negotiation-ssl]
+server = 114-version-negotiation-server
+client = 114-version-negotiation-client
+
+[114-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[114-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-114]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[115-version-negotiation]
+ssl_conf = 115-version-negotiation-ssl
+
+[115-version-negotiation-ssl]
+server = 115-version-negotiation-server
+client = 115-version-negotiation-client
+
+[115-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[115-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-115]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[116-version-negotiation]
+ssl_conf = 116-version-negotiation-ssl
+
+[116-version-negotiation-ssl]
+server = 116-version-negotiation-server
+client = 116-version-negotiation-client
+
+[116-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[116-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-116]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[117-version-negotiation]
+ssl_conf = 117-version-negotiation-ssl
+
+[117-version-negotiation-ssl]
+server = 117-version-negotiation-server
+client = 117-version-negotiation-client
+
+[117-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[117-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-117]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[118-version-negotiation]
+ssl_conf = 118-version-negotiation-ssl
+
+[118-version-negotiation-ssl]
+server = 118-version-negotiation-server
+client = 118-version-negotiation-client
+
+[118-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[118-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-118]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[119-version-negotiation]
+ssl_conf = 119-version-negotiation-ssl
+
+[119-version-negotiation-ssl]
+server = 119-version-negotiation-server
+client = 119-version-negotiation-client
+
+[119-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[119-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-119]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[120-version-negotiation]
+ssl_conf = 120-version-negotiation-ssl
+
+[120-version-negotiation-ssl]
+server = 120-version-negotiation-server
+client = 120-version-negotiation-client
+
+[120-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[120-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-120]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[121-version-negotiation]
+ssl_conf = 121-version-negotiation-ssl
+
+[121-version-negotiation-ssl]
+server = 121-version-negotiation-server
+client = 121-version-negotiation-client
+
+[121-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[121-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-121]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[122-version-negotiation]
+ssl_conf = 122-version-negotiation-ssl
+
+[122-version-negotiation-ssl]
+server = 122-version-negotiation-server
+client = 122-version-negotiation-client
+
+[122-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[122-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-122]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[123-version-negotiation]
+ssl_conf = 123-version-negotiation-ssl
+
+[123-version-negotiation-ssl]
+server = 123-version-negotiation-server
+client = 123-version-negotiation-client
+
+[123-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[123-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-123]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[124-version-negotiation]
+ssl_conf = 124-version-negotiation-ssl
+
+[124-version-negotiation-ssl]
+server = 124-version-negotiation-server
+client = 124-version-negotiation-client
+
+[124-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[124-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-124]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[125-version-negotiation]
+ssl_conf = 125-version-negotiation-ssl
+
+[125-version-negotiation-ssl]
+server = 125-version-negotiation-server
+client = 125-version-negotiation-client
+
+[125-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[125-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-125]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[126-version-negotiation]
+ssl_conf = 126-version-negotiation-ssl
+
+[126-version-negotiation-ssl]
+server = 126-version-negotiation-server
+client = 126-version-negotiation-client
+
+[126-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[126-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-126]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[127-version-negotiation]
+ssl_conf = 127-version-negotiation-ssl
+
+[127-version-negotiation-ssl]
+server = 127-version-negotiation-server
+client = 127-version-negotiation-client
+
+[127-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[127-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-127]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[128-version-negotiation]
+ssl_conf = 128-version-negotiation-ssl
+
+[128-version-negotiation-ssl]
+server = 128-version-negotiation-server
+client = 128-version-negotiation-client
+
+[128-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[128-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-128]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[129-version-negotiation]
+ssl_conf = 129-version-negotiation-ssl
+
+[129-version-negotiation-ssl]
+server = 129-version-negotiation-server
+client = 129-version-negotiation-client
+
+[129-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[129-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-129]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[130-version-negotiation]
+ssl_conf = 130-version-negotiation-ssl
+
+[130-version-negotiation-ssl]
+server = 130-version-negotiation-server
+client = 130-version-negotiation-client
+
+[130-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[130-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-130]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[131-version-negotiation]
+ssl_conf = 131-version-negotiation-ssl
+
+[131-version-negotiation-ssl]
+server = 131-version-negotiation-server
+client = 131-version-negotiation-client
+
+[131-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[131-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-131]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[132-version-negotiation]
+ssl_conf = 132-version-negotiation-ssl
+
+[132-version-negotiation-ssl]
+server = 132-version-negotiation-server
+client = 132-version-negotiation-client
+
+[132-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[132-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-132]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[133-version-negotiation]
+ssl_conf = 133-version-negotiation-ssl
+
+[133-version-negotiation-ssl]
+server = 133-version-negotiation-server
+client = 133-version-negotiation-client
+
+[133-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[133-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-133]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[134-version-negotiation]
+ssl_conf = 134-version-negotiation-ssl
+
+[134-version-negotiation-ssl]
+server = 134-version-negotiation-server
+client = 134-version-negotiation-client
+
+[134-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[134-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-134]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[135-version-negotiation]
+ssl_conf = 135-version-negotiation-ssl
+
+[135-version-negotiation-ssl]
+server = 135-version-negotiation-server
+client = 135-version-negotiation-client
+
+[135-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[135-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-135]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[136-version-negotiation]
+ssl_conf = 136-version-negotiation-ssl
+
+[136-version-negotiation-ssl]
+server = 136-version-negotiation-server
+client = 136-version-negotiation-client
+
+[136-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[136-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-136]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[137-version-negotiation]
+ssl_conf = 137-version-negotiation-ssl
+
+[137-version-negotiation-ssl]
+server = 137-version-negotiation-server
+client = 137-version-negotiation-client
+
+[137-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[137-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-137]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[138-version-negotiation]
+ssl_conf = 138-version-negotiation-ssl
+
+[138-version-negotiation-ssl]
+server = 138-version-negotiation-server
+client = 138-version-negotiation-client
+
+[138-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[138-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-138]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[139-version-negotiation]
+ssl_conf = 139-version-negotiation-ssl
+
+[139-version-negotiation-ssl]
+server = 139-version-negotiation-server
+client = 139-version-negotiation-client
+
+[139-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[139-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-139]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[140-version-negotiation]
+ssl_conf = 140-version-negotiation-ssl
+
+[140-version-negotiation-ssl]
+server = 140-version-negotiation-server
+client = 140-version-negotiation-client
+
+[140-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[140-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-140]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[141-version-negotiation]
+ssl_conf = 141-version-negotiation-ssl
+
+[141-version-negotiation-ssl]
+server = 141-version-negotiation-server
+client = 141-version-negotiation-client
+
+[141-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[141-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-141]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[142-version-negotiation]
+ssl_conf = 142-version-negotiation-ssl
+
+[142-version-negotiation-ssl]
+server = 142-version-negotiation-server
+client = 142-version-negotiation-client
+
+[142-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[142-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-142]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[143-version-negotiation]
+ssl_conf = 143-version-negotiation-ssl
+
+[143-version-negotiation-ssl]
+server = 143-version-negotiation-server
+client = 143-version-negotiation-client
+
+[143-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[143-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-143]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[144-version-negotiation]
+ssl_conf = 144-version-negotiation-ssl
+
+[144-version-negotiation-ssl]
+server = 144-version-negotiation-server
+client = 144-version-negotiation-client
+
+[144-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[144-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-144]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[145-version-negotiation]
+ssl_conf = 145-version-negotiation-ssl
+
+[145-version-negotiation-ssl]
+server = 145-version-negotiation-server
+client = 145-version-negotiation-client
+
+[145-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[145-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-145]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[146-version-negotiation]
+ssl_conf = 146-version-negotiation-ssl
+
+[146-version-negotiation-ssl]
+server = 146-version-negotiation-server
+client = 146-version-negotiation-client
+
+[146-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[146-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-146]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[147-version-negotiation]
+ssl_conf = 147-version-negotiation-ssl
+
+[147-version-negotiation-ssl]
+server = 147-version-negotiation-server
+client = 147-version-negotiation-client
+
+[147-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[147-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-147]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[148-version-negotiation]
+ssl_conf = 148-version-negotiation-ssl
+
+[148-version-negotiation-ssl]
+server = 148-version-negotiation-server
+client = 148-version-negotiation-client
+
+[148-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[148-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-148]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[149-version-negotiation]
+ssl_conf = 149-version-negotiation-ssl
+
+[149-version-negotiation-ssl]
+server = 149-version-negotiation-server
+client = 149-version-negotiation-client
+
+[149-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[149-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-149]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[150-version-negotiation]
+ssl_conf = 150-version-negotiation-ssl
+
+[150-version-negotiation-ssl]
+server = 150-version-negotiation-server
+client = 150-version-negotiation-client
+
+[150-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[150-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-150]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[151-version-negotiation]
+ssl_conf = 151-version-negotiation-ssl
+
+[151-version-negotiation-ssl]
+server = 151-version-negotiation-server
+client = 151-version-negotiation-client
+
+[151-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[151-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-151]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[152-version-negotiation]
+ssl_conf = 152-version-negotiation-ssl
+
+[152-version-negotiation-ssl]
+server = 152-version-negotiation-server
+client = 152-version-negotiation-client
+
+[152-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[152-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-152]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[153-version-negotiation]
+ssl_conf = 153-version-negotiation-ssl
+
+[153-version-negotiation-ssl]
+server = 153-version-negotiation-server
+client = 153-version-negotiation-client
+
+[153-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[153-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-153]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[154-version-negotiation]
+ssl_conf = 154-version-negotiation-ssl
+
+[154-version-negotiation-ssl]
+server = 154-version-negotiation-server
+client = 154-version-negotiation-client
+
+[154-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[154-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-154]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[155-version-negotiation]
+ssl_conf = 155-version-negotiation-ssl
+
+[155-version-negotiation-ssl]
+server = 155-version-negotiation-server
+client = 155-version-negotiation-client
+
+[155-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[155-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-155]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[156-version-negotiation]
+ssl_conf = 156-version-negotiation-ssl
+
+[156-version-negotiation-ssl]
+server = 156-version-negotiation-server
+client = 156-version-negotiation-client
+
+[156-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[156-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-156]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[157-version-negotiation]
+ssl_conf = 157-version-negotiation-ssl
+
+[157-version-negotiation-ssl]
+server = 157-version-negotiation-server
+client = 157-version-negotiation-client
+
+[157-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[157-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-157]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[158-version-negotiation]
+ssl_conf = 158-version-negotiation-ssl
+
+[158-version-negotiation-ssl]
+server = 158-version-negotiation-server
+client = 158-version-negotiation-client
+
+[158-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[158-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-158]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[159-version-negotiation]
+ssl_conf = 159-version-negotiation-ssl
+
+[159-version-negotiation-ssl]
+server = 159-version-negotiation-server
+client = 159-version-negotiation-client
+
+[159-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[159-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-159]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[160-version-negotiation]
+ssl_conf = 160-version-negotiation-ssl
+
+[160-version-negotiation-ssl]
+server = 160-version-negotiation-server
+client = 160-version-negotiation-client
+
+[160-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[160-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-160]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[161-version-negotiation]
+ssl_conf = 161-version-negotiation-ssl
+
+[161-version-negotiation-ssl]
+server = 161-version-negotiation-server
+client = 161-version-negotiation-client
+
+[161-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[161-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-161]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[162-version-negotiation]
+ssl_conf = 162-version-negotiation-ssl
+
+[162-version-negotiation-ssl]
+server = 162-version-negotiation-server
+client = 162-version-negotiation-client
+
+[162-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[162-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-162]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[163-version-negotiation]
+ssl_conf = 163-version-negotiation-ssl
+
+[163-version-negotiation-ssl]
+server = 163-version-negotiation-server
+client = 163-version-negotiation-client
+
+[163-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[163-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-163]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[164-version-negotiation]
+ssl_conf = 164-version-negotiation-ssl
+
+[164-version-negotiation-ssl]
+server = 164-version-negotiation-server
+client = 164-version-negotiation-client
+
+[164-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[164-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-164]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[165-version-negotiation]
+ssl_conf = 165-version-negotiation-ssl
+
+[165-version-negotiation-ssl]
+server = 165-version-negotiation-server
+client = 165-version-negotiation-client
+
+[165-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[165-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-165]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[166-version-negotiation]
+ssl_conf = 166-version-negotiation-ssl
+
+[166-version-negotiation-ssl]
+server = 166-version-negotiation-server
+client = 166-version-negotiation-client
+
+[166-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[166-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-166]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[167-version-negotiation]
+ssl_conf = 167-version-negotiation-ssl
+
+[167-version-negotiation-ssl]
+server = 167-version-negotiation-server
+client = 167-version-negotiation-client
+
+[167-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[167-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-167]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[168-version-negotiation]
+ssl_conf = 168-version-negotiation-ssl
+
+[168-version-negotiation-ssl]
+server = 168-version-negotiation-server
+client = 168-version-negotiation-client
+
+[168-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[168-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-168]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[169-version-negotiation]
+ssl_conf = 169-version-negotiation-ssl
+
+[169-version-negotiation-ssl]
+server = 169-version-negotiation-server
+client = 169-version-negotiation-client
+
+[169-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[169-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-169]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[170-version-negotiation]
+ssl_conf = 170-version-negotiation-ssl
+
+[170-version-negotiation-ssl]
+server = 170-version-negotiation-server
+client = 170-version-negotiation-client
+
+[170-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[170-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-170]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[171-version-negotiation]
+ssl_conf = 171-version-negotiation-ssl
+
+[171-version-negotiation-ssl]
+server = 171-version-negotiation-server
+client = 171-version-negotiation-client
+
+[171-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[171-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-171]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[172-version-negotiation]
+ssl_conf = 172-version-negotiation-ssl
+
+[172-version-negotiation-ssl]
+server = 172-version-negotiation-server
+client = 172-version-negotiation-client
+
+[172-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[172-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-172]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[173-version-negotiation]
+ssl_conf = 173-version-negotiation-ssl
+
+[173-version-negotiation-ssl]
+server = 173-version-negotiation-server
+client = 173-version-negotiation-client
+
+[173-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[173-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-173]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[174-version-negotiation]
+ssl_conf = 174-version-negotiation-ssl
+
+[174-version-negotiation-ssl]
+server = 174-version-negotiation-server
+client = 174-version-negotiation-client
+
+[174-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[174-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-174]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[175-version-negotiation]
+ssl_conf = 175-version-negotiation-ssl
+
+[175-version-negotiation-ssl]
+server = 175-version-negotiation-server
+client = 175-version-negotiation-client
+
+[175-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[175-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-175]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[176-version-negotiation]
+ssl_conf = 176-version-negotiation-ssl
+
+[176-version-negotiation-ssl]
+server = 176-version-negotiation-server
+client = 176-version-negotiation-client
+
+[176-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[176-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-176]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[177-version-negotiation]
+ssl_conf = 177-version-negotiation-ssl
+
+[177-version-negotiation-ssl]
+server = 177-version-negotiation-server
+client = 177-version-negotiation-client
+
+[177-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[177-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-177]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[178-version-negotiation]
+ssl_conf = 178-version-negotiation-ssl
+
+[178-version-negotiation-ssl]
+server = 178-version-negotiation-server
+client = 178-version-negotiation-client
+
+[178-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[178-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-178]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[179-version-negotiation]
+ssl_conf = 179-version-negotiation-ssl
+
+[179-version-negotiation-ssl]
+server = 179-version-negotiation-server
+client = 179-version-negotiation-client
+
+[179-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[179-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-179]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[180-version-negotiation]
+ssl_conf = 180-version-negotiation-ssl
+
+[180-version-negotiation-ssl]
+server = 180-version-negotiation-server
+client = 180-version-negotiation-client
+
+[180-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[180-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-180]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[181-version-negotiation]
+ssl_conf = 181-version-negotiation-ssl
+
+[181-version-negotiation-ssl]
+server = 181-version-negotiation-server
+client = 181-version-negotiation-client
+
+[181-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[181-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-181]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[182-version-negotiation]
+ssl_conf = 182-version-negotiation-ssl
+
+[182-version-negotiation-ssl]
+server = 182-version-negotiation-server
+client = 182-version-negotiation-client
+
+[182-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[182-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-182]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[183-version-negotiation]
+ssl_conf = 183-version-negotiation-ssl
+
+[183-version-negotiation-ssl]
+server = 183-version-negotiation-server
+client = 183-version-negotiation-client
+
+[183-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[183-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-183]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[184-version-negotiation]
+ssl_conf = 184-version-negotiation-ssl
+
+[184-version-negotiation-ssl]
+server = 184-version-negotiation-server
+client = 184-version-negotiation-client
+
+[184-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[184-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-184]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[185-version-negotiation]
+ssl_conf = 185-version-negotiation-ssl
+
+[185-version-negotiation-ssl]
+server = 185-version-negotiation-server
+client = 185-version-negotiation-client
+
+[185-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[185-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-185]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[186-version-negotiation]
+ssl_conf = 186-version-negotiation-ssl
+
+[186-version-negotiation-ssl]
+server = 186-version-negotiation-server
+client = 186-version-negotiation-client
+
+[186-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[186-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-186]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[187-version-negotiation]
+ssl_conf = 187-version-negotiation-ssl
+
+[187-version-negotiation-ssl]
+server = 187-version-negotiation-server
+client = 187-version-negotiation-client
+
+[187-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[187-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-187]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[188-version-negotiation]
+ssl_conf = 188-version-negotiation-ssl
+
+[188-version-negotiation-ssl]
+server = 188-version-negotiation-server
+client = 188-version-negotiation-client
+
+[188-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[188-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-188]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[189-version-negotiation]
+ssl_conf = 189-version-negotiation-ssl
+
+[189-version-negotiation-ssl]
+server = 189-version-negotiation-server
+client = 189-version-negotiation-client
+
+[189-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[189-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-189]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[190-version-negotiation]
+ssl_conf = 190-version-negotiation-ssl
+
+[190-version-negotiation-ssl]
+server = 190-version-negotiation-server
+client = 190-version-negotiation-client
+
+[190-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[190-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-190]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[191-version-negotiation]
+ssl_conf = 191-version-negotiation-ssl
+
+[191-version-negotiation-ssl]
+server = 191-version-negotiation-server
+client = 191-version-negotiation-client
+
+[191-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[191-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-191]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[192-version-negotiation]
+ssl_conf = 192-version-negotiation-ssl
+
+[192-version-negotiation-ssl]
+server = 192-version-negotiation-server
+client = 192-version-negotiation-client
+
+[192-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[192-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-192]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[193-version-negotiation]
+ssl_conf = 193-version-negotiation-ssl
+
+[193-version-negotiation-ssl]
+server = 193-version-negotiation-server
+client = 193-version-negotiation-client
+
+[193-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[193-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-193]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[194-version-negotiation]
+ssl_conf = 194-version-negotiation-ssl
+
+[194-version-negotiation-ssl]
+server = 194-version-negotiation-server
+client = 194-version-negotiation-client
+
+[194-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[194-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-194]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[195-version-negotiation]
+ssl_conf = 195-version-negotiation-ssl
+
+[195-version-negotiation-ssl]
+server = 195-version-negotiation-server
+client = 195-version-negotiation-client
+
+[195-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[195-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-195]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[196-version-negotiation]
+ssl_conf = 196-version-negotiation-ssl
+
+[196-version-negotiation-ssl]
+server = 196-version-negotiation-server
+client = 196-version-negotiation-client
+
+[196-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[196-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-196]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[197-version-negotiation]
+ssl_conf = 197-version-negotiation-ssl
+
+[197-version-negotiation-ssl]
+server = 197-version-negotiation-server
+client = 197-version-negotiation-client
+
+[197-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[197-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-197]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[198-version-negotiation]
+ssl_conf = 198-version-negotiation-ssl
+
+[198-version-negotiation-ssl]
+server = 198-version-negotiation-server
+client = 198-version-negotiation-client
+
+[198-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[198-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-198]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[199-version-negotiation]
+ssl_conf = 199-version-negotiation-ssl
+
+[199-version-negotiation-ssl]
+server = 199-version-negotiation-server
+client = 199-version-negotiation-client
+
+[199-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[199-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-199]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[200-version-negotiation]
+ssl_conf = 200-version-negotiation-ssl
+
+[200-version-negotiation-ssl]
+server = 200-version-negotiation-server
+client = 200-version-negotiation-client
+
+[200-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[200-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-200]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[201-version-negotiation]
+ssl_conf = 201-version-negotiation-ssl
+
+[201-version-negotiation-ssl]
+server = 201-version-negotiation-server
+client = 201-version-negotiation-client
+
+[201-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[201-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-201]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[202-version-negotiation]
+ssl_conf = 202-version-negotiation-ssl
+
+[202-version-negotiation-ssl]
+server = 202-version-negotiation-server
+client = 202-version-negotiation-client
+
+[202-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[202-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-202]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[203-version-negotiation]
+ssl_conf = 203-version-negotiation-ssl
+
+[203-version-negotiation-ssl]
+server = 203-version-negotiation-server
+client = 203-version-negotiation-client
+
+[203-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[203-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-203]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[204-version-negotiation]
+ssl_conf = 204-version-negotiation-ssl
+
+[204-version-negotiation-ssl]
+server = 204-version-negotiation-server
+client = 204-version-negotiation-client
+
+[204-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[204-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-204]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[205-version-negotiation]
+ssl_conf = 205-version-negotiation-ssl
+
+[205-version-negotiation-ssl]
+server = 205-version-negotiation-server
+client = 205-version-negotiation-client
+
+[205-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[205-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-205]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[206-version-negotiation]
+ssl_conf = 206-version-negotiation-ssl
+
+[206-version-negotiation-ssl]
+server = 206-version-negotiation-server
+client = 206-version-negotiation-client
+
+[206-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[206-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-206]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[207-version-negotiation]
+ssl_conf = 207-version-negotiation-ssl
+
+[207-version-negotiation-ssl]
+server = 207-version-negotiation-server
+client = 207-version-negotiation-client
+
+[207-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[207-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-207]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[208-version-negotiation]
+ssl_conf = 208-version-negotiation-ssl
+
+[208-version-negotiation-ssl]
+server = 208-version-negotiation-server
+client = 208-version-negotiation-client
+
+[208-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[208-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-208]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[209-version-negotiation]
+ssl_conf = 209-version-negotiation-ssl
+
+[209-version-negotiation-ssl]
+server = 209-version-negotiation-server
+client = 209-version-negotiation-client
+
+[209-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[209-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-209]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[210-version-negotiation]
+ssl_conf = 210-version-negotiation-ssl
+
+[210-version-negotiation-ssl]
+server = 210-version-negotiation-server
+client = 210-version-negotiation-client
+
+[210-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[210-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-210]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[211-version-negotiation]
+ssl_conf = 211-version-negotiation-ssl
+
+[211-version-negotiation-ssl]
+server = 211-version-negotiation-server
+client = 211-version-negotiation-client
+
+[211-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[211-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-211]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[212-version-negotiation]
+ssl_conf = 212-version-negotiation-ssl
+
+[212-version-negotiation-ssl]
+server = 212-version-negotiation-server
+client = 212-version-negotiation-client
+
+[212-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[212-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-212]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[213-version-negotiation]
+ssl_conf = 213-version-negotiation-ssl
+
+[213-version-negotiation-ssl]
+server = 213-version-negotiation-server
+client = 213-version-negotiation-client
+
+[213-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[213-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-213]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[214-version-negotiation]
+ssl_conf = 214-version-negotiation-ssl
+
+[214-version-negotiation-ssl]
+server = 214-version-negotiation-server
+client = 214-version-negotiation-client
+
+[214-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[214-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-214]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[215-version-negotiation]
+ssl_conf = 215-version-negotiation-ssl
+
+[215-version-negotiation-ssl]
+server = 215-version-negotiation-server
+client = 215-version-negotiation-client
+
+[215-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[215-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-215]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[216-version-negotiation]
+ssl_conf = 216-version-negotiation-ssl
+
+[216-version-negotiation-ssl]
+server = 216-version-negotiation-server
+client = 216-version-negotiation-client
+
+[216-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[216-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-216]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[217-version-negotiation]
+ssl_conf = 217-version-negotiation-ssl
+
+[217-version-negotiation-ssl]
+server = 217-version-negotiation-server
+client = 217-version-negotiation-client
+
+[217-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[217-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-217]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[218-version-negotiation]
+ssl_conf = 218-version-negotiation-ssl
+
+[218-version-negotiation-ssl]
+server = 218-version-negotiation-server
+client = 218-version-negotiation-client
+
+[218-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[218-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-218]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[219-version-negotiation]
+ssl_conf = 219-version-negotiation-ssl
+
+[219-version-negotiation-ssl]
+server = 219-version-negotiation-server
+client = 219-version-negotiation-client
+
+[219-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[219-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-219]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[220-version-negotiation]
+ssl_conf = 220-version-negotiation-ssl
+
+[220-version-negotiation-ssl]
+server = 220-version-negotiation-server
+client = 220-version-negotiation-client
+
+[220-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[220-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-220]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[221-version-negotiation]
+ssl_conf = 221-version-negotiation-ssl
+
+[221-version-negotiation-ssl]
+server = 221-version-negotiation-server
+client = 221-version-negotiation-client
+
+[221-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[221-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-221]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[222-version-negotiation]
+ssl_conf = 222-version-negotiation-ssl
+
+[222-version-negotiation-ssl]
+server = 222-version-negotiation-server
+client = 222-version-negotiation-client
+
+[222-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[222-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-222]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[223-version-negotiation]
+ssl_conf = 223-version-negotiation-ssl
+
+[223-version-negotiation-ssl]
+server = 223-version-negotiation-server
+client = 223-version-negotiation-client
+
+[223-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[223-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-223]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[224-version-negotiation]
+ssl_conf = 224-version-negotiation-ssl
+
+[224-version-negotiation-ssl]
+server = 224-version-negotiation-server
+client = 224-version-negotiation-client
+
+[224-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[224-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-224]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[225-version-negotiation]
+ssl_conf = 225-version-negotiation-ssl
+
+[225-version-negotiation-ssl]
+server = 225-version-negotiation-server
+client = 225-version-negotiation-client
+
+[225-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[225-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-225]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[226-version-negotiation]
+ssl_conf = 226-version-negotiation-ssl
+
+[226-version-negotiation-ssl]
+server = 226-version-negotiation-server
+client = 226-version-negotiation-client
+
+[226-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[226-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-226]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[227-version-negotiation]
+ssl_conf = 227-version-negotiation-ssl
+
+[227-version-negotiation-ssl]
+server = 227-version-negotiation-server
+client = 227-version-negotiation-client
+
+[227-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[227-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-227]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[228-version-negotiation]
+ssl_conf = 228-version-negotiation-ssl
+
+[228-version-negotiation-ssl]
+server = 228-version-negotiation-server
+client = 228-version-negotiation-client
+
+[228-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[228-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-228]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[229-version-negotiation]
+ssl_conf = 229-version-negotiation-ssl
+
+[229-version-negotiation-ssl]
+server = 229-version-negotiation-server
+client = 229-version-negotiation-client
+
+[229-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[229-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-229]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[230-version-negotiation]
+ssl_conf = 230-version-negotiation-ssl
+
+[230-version-negotiation-ssl]
+server = 230-version-negotiation-server
+client = 230-version-negotiation-client
+
+[230-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[230-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-230]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[231-version-negotiation]
+ssl_conf = 231-version-negotiation-ssl
+
+[231-version-negotiation-ssl]
+server = 231-version-negotiation-server
+client = 231-version-negotiation-client
+
+[231-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[231-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-231]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[232-version-negotiation]
+ssl_conf = 232-version-negotiation-ssl
+
+[232-version-negotiation-ssl]
+server = 232-version-negotiation-server
+client = 232-version-negotiation-client
+
+[232-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[232-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-232]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[233-version-negotiation]
+ssl_conf = 233-version-negotiation-ssl
+
+[233-version-negotiation-ssl]
+server = 233-version-negotiation-server
+client = 233-version-negotiation-client
+
+[233-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[233-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-233]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[234-version-negotiation]
+ssl_conf = 234-version-negotiation-ssl
+
+[234-version-negotiation-ssl]
+server = 234-version-negotiation-server
+client = 234-version-negotiation-client
+
+[234-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[234-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-234]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[235-version-negotiation]
+ssl_conf = 235-version-negotiation-ssl
+
+[235-version-negotiation-ssl]
+server = 235-version-negotiation-server
+client = 235-version-negotiation-client
+
+[235-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[235-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-235]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[236-version-negotiation]
+ssl_conf = 236-version-negotiation-ssl
+
+[236-version-negotiation-ssl]
+server = 236-version-negotiation-server
+client = 236-version-negotiation-client
+
+[236-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[236-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-236]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[237-version-negotiation]
+ssl_conf = 237-version-negotiation-ssl
+
+[237-version-negotiation-ssl]
+server = 237-version-negotiation-server
+client = 237-version-negotiation-client
+
+[237-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[237-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-237]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[238-version-negotiation]
+ssl_conf = 238-version-negotiation-ssl
+
+[238-version-negotiation-ssl]
+server = 238-version-negotiation-server
+client = 238-version-negotiation-client
+
+[238-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[238-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-238]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[239-version-negotiation]
+ssl_conf = 239-version-negotiation-ssl
+
+[239-version-negotiation-ssl]
+server = 239-version-negotiation-server
+client = 239-version-negotiation-client
+
+[239-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[239-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-239]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[240-version-negotiation]
+ssl_conf = 240-version-negotiation-ssl
+
+[240-version-negotiation-ssl]
+server = 240-version-negotiation-server
+client = 240-version-negotiation-client
+
+[240-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[240-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-240]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[241-version-negotiation]
+ssl_conf = 241-version-negotiation-ssl
+
+[241-version-negotiation-ssl]
+server = 241-version-negotiation-server
+client = 241-version-negotiation-client
+
+[241-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[241-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-241]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[242-version-negotiation]
+ssl_conf = 242-version-negotiation-ssl
+
+[242-version-negotiation-ssl]
+server = 242-version-negotiation-server
+client = 242-version-negotiation-client
+
+[242-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[242-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-242]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[243-version-negotiation]
+ssl_conf = 243-version-negotiation-ssl
+
+[243-version-negotiation-ssl]
+server = 243-version-negotiation-server
+client = 243-version-negotiation-client
+
+[243-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[243-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-243]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[244-version-negotiation]
+ssl_conf = 244-version-negotiation-ssl
+
+[244-version-negotiation-ssl]
+server = 244-version-negotiation-server
+client = 244-version-negotiation-client
+
+[244-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[244-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-244]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[245-version-negotiation]
+ssl_conf = 245-version-negotiation-ssl
+
+[245-version-negotiation-ssl]
+server = 245-version-negotiation-server
+client = 245-version-negotiation-client
+
+[245-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[245-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-245]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[246-version-negotiation]
+ssl_conf = 246-version-negotiation-ssl
+
+[246-version-negotiation-ssl]
+server = 246-version-negotiation-server
+client = 246-version-negotiation-client
+
+[246-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[246-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-246]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[247-version-negotiation]
+ssl_conf = 247-version-negotiation-ssl
+
+[247-version-negotiation-ssl]
+server = 247-version-negotiation-server
+client = 247-version-negotiation-client
+
+[247-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[247-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-247]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[248-version-negotiation]
+ssl_conf = 248-version-negotiation-ssl
+
+[248-version-negotiation-ssl]
+server = 248-version-negotiation-server
+client = 248-version-negotiation-client
+
+[248-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[248-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-248]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[249-version-negotiation]
+ssl_conf = 249-version-negotiation-ssl
+
+[249-version-negotiation-ssl]
+server = 249-version-negotiation-server
+client = 249-version-negotiation-client
+
+[249-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[249-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-249]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[250-version-negotiation]
+ssl_conf = 250-version-negotiation-ssl
+
+[250-version-negotiation-ssl]
+server = 250-version-negotiation-server
+client = 250-version-negotiation-client
+
+[250-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[250-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-250]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[251-version-negotiation]
+ssl_conf = 251-version-negotiation-ssl
+
+[251-version-negotiation-ssl]
+server = 251-version-negotiation-server
+client = 251-version-negotiation-client
+
+[251-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[251-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-251]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[252-version-negotiation]
+ssl_conf = 252-version-negotiation-ssl
+
+[252-version-negotiation-ssl]
+server = 252-version-negotiation-server
+client = 252-version-negotiation-client
+
+[252-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[252-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-252]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[253-version-negotiation]
+ssl_conf = 253-version-negotiation-ssl
+
+[253-version-negotiation-ssl]
+server = 253-version-negotiation-server
+client = 253-version-negotiation-client
+
+[253-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[253-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-253]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[254-version-negotiation]
+ssl_conf = 254-version-negotiation-ssl
+
+[254-version-negotiation-ssl]
+server = 254-version-negotiation-server
+client = 254-version-negotiation-client
+
+[254-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[254-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-254]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[255-version-negotiation]
+ssl_conf = 255-version-negotiation-ssl
+
+[255-version-negotiation-ssl]
+server = 255-version-negotiation-server
+client = 255-version-negotiation-client
+
+[255-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[255-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-255]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[256-version-negotiation]
+ssl_conf = 256-version-negotiation-ssl
+
+[256-version-negotiation-ssl]
+server = 256-version-negotiation-server
+client = 256-version-negotiation-client
+
+[256-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[256-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-256]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[257-version-negotiation]
+ssl_conf = 257-version-negotiation-ssl
+
+[257-version-negotiation-ssl]
+server = 257-version-negotiation-server
+client = 257-version-negotiation-client
+
+[257-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[257-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-257]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[258-version-negotiation]
+ssl_conf = 258-version-negotiation-ssl
+
+[258-version-negotiation-ssl]
+server = 258-version-negotiation-server
+client = 258-version-negotiation-client
+
+[258-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[258-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-258]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[259-version-negotiation]
+ssl_conf = 259-version-negotiation-ssl
+
+[259-version-negotiation-ssl]
+server = 259-version-negotiation-server
+client = 259-version-negotiation-client
+
+[259-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[259-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-259]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[260-version-negotiation]
+ssl_conf = 260-version-negotiation-ssl
+
+[260-version-negotiation-ssl]
+server = 260-version-negotiation-server
+client = 260-version-negotiation-client
+
+[260-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[260-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-260]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[261-version-negotiation]
+ssl_conf = 261-version-negotiation-ssl
+
+[261-version-negotiation-ssl]
+server = 261-version-negotiation-server
+client = 261-version-negotiation-client
+
+[261-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[261-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-261]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[262-version-negotiation]
+ssl_conf = 262-version-negotiation-ssl
+
+[262-version-negotiation-ssl]
+server = 262-version-negotiation-server
+client = 262-version-negotiation-client
+
+[262-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[262-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-262]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[263-version-negotiation]
+ssl_conf = 263-version-negotiation-ssl
+
+[263-version-negotiation-ssl]
+server = 263-version-negotiation-server
+client = 263-version-negotiation-client
+
+[263-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[263-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-263]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[264-version-negotiation]
+ssl_conf = 264-version-negotiation-ssl
+
+[264-version-negotiation-ssl]
+server = 264-version-negotiation-server
+client = 264-version-negotiation-client
+
+[264-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[264-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-264]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[265-version-negotiation]
+ssl_conf = 265-version-negotiation-ssl
+
+[265-version-negotiation-ssl]
+server = 265-version-negotiation-server
+client = 265-version-negotiation-client
+
+[265-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[265-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-265]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[266-version-negotiation]
+ssl_conf = 266-version-negotiation-ssl
+
+[266-version-negotiation-ssl]
+server = 266-version-negotiation-server
+client = 266-version-negotiation-client
+
+[266-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[266-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-266]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[267-version-negotiation]
+ssl_conf = 267-version-negotiation-ssl
+
+[267-version-negotiation-ssl]
+server = 267-version-negotiation-server
+client = 267-version-negotiation-client
+
+[267-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[267-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-267]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[268-version-negotiation]
+ssl_conf = 268-version-negotiation-ssl
+
+[268-version-negotiation-ssl]
+server = 268-version-negotiation-server
+client = 268-version-negotiation-client
+
+[268-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[268-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-268]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[269-version-negotiation]
+ssl_conf = 269-version-negotiation-ssl
+
+[269-version-negotiation-ssl]
+server = 269-version-negotiation-server
+client = 269-version-negotiation-client
+
+[269-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[269-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-269]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[270-version-negotiation]
+ssl_conf = 270-version-negotiation-ssl
+
+[270-version-negotiation-ssl]
+server = 270-version-negotiation-server
+client = 270-version-negotiation-client
+
+[270-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[270-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-270]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[271-version-negotiation]
+ssl_conf = 271-version-negotiation-ssl
+
+[271-version-negotiation-ssl]
+server = 271-version-negotiation-server
+client = 271-version-negotiation-client
+
+[271-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[271-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-271]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[272-version-negotiation]
+ssl_conf = 272-version-negotiation-ssl
+
+[272-version-negotiation-ssl]
+server = 272-version-negotiation-server
+client = 272-version-negotiation-client
+
+[272-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[272-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-272]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[273-version-negotiation]
+ssl_conf = 273-version-negotiation-ssl
+
+[273-version-negotiation-ssl]
+server = 273-version-negotiation-server
+client = 273-version-negotiation-client
+
+[273-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[273-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-273]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[274-version-negotiation]
+ssl_conf = 274-version-negotiation-ssl
+
+[274-version-negotiation-ssl]
+server = 274-version-negotiation-server
+client = 274-version-negotiation-client
+
+[274-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[274-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-274]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[275-version-negotiation]
+ssl_conf = 275-version-negotiation-ssl
+
+[275-version-negotiation-ssl]
+server = 275-version-negotiation-server
+client = 275-version-negotiation-client
+
+[275-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[275-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-275]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[276-version-negotiation]
+ssl_conf = 276-version-negotiation-ssl
+
+[276-version-negotiation-ssl]
+server = 276-version-negotiation-server
+client = 276-version-negotiation-client
+
+[276-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[276-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-276]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[277-version-negotiation]
+ssl_conf = 277-version-negotiation-ssl
+
+[277-version-negotiation-ssl]
+server = 277-version-negotiation-server
+client = 277-version-negotiation-client
+
+[277-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[277-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-277]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[278-version-negotiation]
+ssl_conf = 278-version-negotiation-ssl
+
+[278-version-negotiation-ssl]
+server = 278-version-negotiation-server
+client = 278-version-negotiation-client
+
+[278-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[278-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-278]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[279-version-negotiation]
+ssl_conf = 279-version-negotiation-ssl
+
+[279-version-negotiation-ssl]
+server = 279-version-negotiation-server
+client = 279-version-negotiation-client
+
+[279-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[279-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-279]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[280-version-negotiation]
+ssl_conf = 280-version-negotiation-ssl
+
+[280-version-negotiation-ssl]
+server = 280-version-negotiation-server
+client = 280-version-negotiation-client
+
+[280-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[280-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-280]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[281-version-negotiation]
+ssl_conf = 281-version-negotiation-ssl
+
+[281-version-negotiation-ssl]
+server = 281-version-negotiation-server
+client = 281-version-negotiation-client
+
+[281-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[281-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-281]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[282-version-negotiation]
+ssl_conf = 282-version-negotiation-ssl
+
+[282-version-negotiation-ssl]
+server = 282-version-negotiation-server
+client = 282-version-negotiation-client
+
+[282-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[282-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-282]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[283-version-negotiation]
+ssl_conf = 283-version-negotiation-ssl
+
+[283-version-negotiation-ssl]
+server = 283-version-negotiation-server
+client = 283-version-negotiation-client
+
+[283-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[283-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-283]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[284-version-negotiation]
+ssl_conf = 284-version-negotiation-ssl
+
+[284-version-negotiation-ssl]
+server = 284-version-negotiation-server
+client = 284-version-negotiation-client
+
+[284-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[284-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-284]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[285-version-negotiation]
+ssl_conf = 285-version-negotiation-ssl
+
+[285-version-negotiation-ssl]
+server = 285-version-negotiation-server
+client = 285-version-negotiation-client
+
+[285-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[285-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-285]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[286-version-negotiation]
+ssl_conf = 286-version-negotiation-ssl
+
+[286-version-negotiation-ssl]
+server = 286-version-negotiation-server
+client = 286-version-negotiation-client
+
+[286-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[286-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-286]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[287-version-negotiation]
+ssl_conf = 287-version-negotiation-ssl
+
+[287-version-negotiation-ssl]
+server = 287-version-negotiation-server
+client = 287-version-negotiation-client
+
+[287-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[287-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-287]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[288-version-negotiation]
+ssl_conf = 288-version-negotiation-ssl
+
+[288-version-negotiation-ssl]
+server = 288-version-negotiation-server
+client = 288-version-negotiation-client
+
+[288-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[288-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-288]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[289-version-negotiation]
+ssl_conf = 289-version-negotiation-ssl
+
+[289-version-negotiation-ssl]
+server = 289-version-negotiation-server
+client = 289-version-negotiation-client
+
+[289-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[289-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-289]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[290-version-negotiation]
+ssl_conf = 290-version-negotiation-ssl
+
+[290-version-negotiation-ssl]
+server = 290-version-negotiation-server
+client = 290-version-negotiation-client
+
+[290-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[290-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-290]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[291-version-negotiation]
+ssl_conf = 291-version-negotiation-ssl
+
+[291-version-negotiation-ssl]
+server = 291-version-negotiation-server
+client = 291-version-negotiation-client
+
+[291-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[291-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-291]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[292-version-negotiation]
+ssl_conf = 292-version-negotiation-ssl
+
+[292-version-negotiation-ssl]
+server = 292-version-negotiation-server
+client = 292-version-negotiation-client
+
+[292-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[292-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-292]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[293-version-negotiation]
+ssl_conf = 293-version-negotiation-ssl
+
+[293-version-negotiation-ssl]
+server = 293-version-negotiation-server
+client = 293-version-negotiation-client
+
+[293-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[293-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-293]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[294-version-negotiation]
+ssl_conf = 294-version-negotiation-ssl
+
+[294-version-negotiation-ssl]
+server = 294-version-negotiation-server
+client = 294-version-negotiation-client
+
+[294-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[294-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-294]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[295-version-negotiation]
+ssl_conf = 295-version-negotiation-ssl
+
+[295-version-negotiation-ssl]
+server = 295-version-negotiation-server
+client = 295-version-negotiation-client
+
+[295-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[295-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-295]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[296-version-negotiation]
+ssl_conf = 296-version-negotiation-ssl
+
+[296-version-negotiation-ssl]
+server = 296-version-negotiation-server
+client = 296-version-negotiation-client
+
+[296-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[296-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-296]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[297-version-negotiation]
+ssl_conf = 297-version-negotiation-ssl
+
+[297-version-negotiation-ssl]
+server = 297-version-negotiation-server
+client = 297-version-negotiation-client
+
+[297-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[297-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-297]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[298-version-negotiation]
+ssl_conf = 298-version-negotiation-ssl
+
+[298-version-negotiation-ssl]
+server = 298-version-negotiation-server
+client = 298-version-negotiation-client
+
+[298-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[298-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-298]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[299-version-negotiation]
+ssl_conf = 299-version-negotiation-ssl
+
+[299-version-negotiation-ssl]
+server = 299-version-negotiation-server
+client = 299-version-negotiation-client
+
+[299-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[299-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-299]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[300-version-negotiation]
+ssl_conf = 300-version-negotiation-ssl
+
+[300-version-negotiation-ssl]
+server = 300-version-negotiation-server
+client = 300-version-negotiation-client
+
+[300-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[300-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-300]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[301-version-negotiation]
+ssl_conf = 301-version-negotiation-ssl
+
+[301-version-negotiation-ssl]
+server = 301-version-negotiation-server
+client = 301-version-negotiation-client
+
+[301-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[301-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-301]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[302-version-negotiation]
+ssl_conf = 302-version-negotiation-ssl
+
+[302-version-negotiation-ssl]
+server = 302-version-negotiation-server
+client = 302-version-negotiation-client
+
+[302-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[302-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-302]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[303-version-negotiation]
+ssl_conf = 303-version-negotiation-ssl
+
+[303-version-negotiation-ssl]
+server = 303-version-negotiation-server
+client = 303-version-negotiation-client
+
+[303-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[303-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-303]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[304-version-negotiation]
+ssl_conf = 304-version-negotiation-ssl
+
+[304-version-negotiation-ssl]
+server = 304-version-negotiation-server
+client = 304-version-negotiation-client
+
+[304-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[304-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-304]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[305-version-negotiation]
+ssl_conf = 305-version-negotiation-ssl
+
+[305-version-negotiation-ssl]
+server = 305-version-negotiation-server
+client = 305-version-negotiation-client
+
+[305-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[305-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-305]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[306-version-negotiation]
+ssl_conf = 306-version-negotiation-ssl
+
+[306-version-negotiation-ssl]
+server = 306-version-negotiation-server
+client = 306-version-negotiation-client
+
+[306-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[306-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-306]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[307-version-negotiation]
+ssl_conf = 307-version-negotiation-ssl
+
+[307-version-negotiation-ssl]
+server = 307-version-negotiation-server
+client = 307-version-negotiation-client
+
+[307-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[307-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-307]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[308-version-negotiation]
+ssl_conf = 308-version-negotiation-ssl
+
+[308-version-negotiation-ssl]
+server = 308-version-negotiation-server
+client = 308-version-negotiation-client
+
+[308-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[308-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-308]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[309-version-negotiation]
+ssl_conf = 309-version-negotiation-ssl
+
+[309-version-negotiation-ssl]
+server = 309-version-negotiation-server
+client = 309-version-negotiation-client
+
+[309-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[309-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-309]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[310-version-negotiation]
+ssl_conf = 310-version-negotiation-ssl
+
+[310-version-negotiation-ssl]
+server = 310-version-negotiation-server
+client = 310-version-negotiation-client
+
+[310-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[310-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-310]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[311-version-negotiation]
+ssl_conf = 311-version-negotiation-ssl
+
+[311-version-negotiation-ssl]
+server = 311-version-negotiation-server
+client = 311-version-negotiation-client
+
+[311-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[311-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-311]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[312-version-negotiation]
+ssl_conf = 312-version-negotiation-ssl
+
+[312-version-negotiation-ssl]
+server = 312-version-negotiation-server
+client = 312-version-negotiation-client
+
+[312-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[312-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-312]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[313-version-negotiation]
+ssl_conf = 313-version-negotiation-ssl
+
+[313-version-negotiation-ssl]
+server = 313-version-negotiation-server
+client = 313-version-negotiation-client
+
+[313-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[313-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-313]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[314-version-negotiation]
+ssl_conf = 314-version-negotiation-ssl
+
+[314-version-negotiation-ssl]
+server = 314-version-negotiation-server
+client = 314-version-negotiation-client
+
+[314-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[314-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-314]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[315-version-negotiation]
+ssl_conf = 315-version-negotiation-ssl
+
+[315-version-negotiation-ssl]
+server = 315-version-negotiation-server
+client = 315-version-negotiation-client
+
+[315-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[315-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-315]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[316-version-negotiation]
+ssl_conf = 316-version-negotiation-ssl
+
+[316-version-negotiation-ssl]
+server = 316-version-negotiation-server
+client = 316-version-negotiation-client
+
+[316-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[316-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-316]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[317-version-negotiation]
+ssl_conf = 317-version-negotiation-ssl
+
+[317-version-negotiation-ssl]
+server = 317-version-negotiation-server
+client = 317-version-negotiation-client
+
+[317-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[317-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-317]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[318-version-negotiation]
+ssl_conf = 318-version-negotiation-ssl
+
+[318-version-negotiation-ssl]
+server = 318-version-negotiation-server
+client = 318-version-negotiation-client
+
+[318-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[318-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-318]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[319-version-negotiation]
+ssl_conf = 319-version-negotiation-ssl
+
+[319-version-negotiation-ssl]
+server = 319-version-negotiation-server
+client = 319-version-negotiation-client
+
+[319-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[319-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-319]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[320-version-negotiation]
+ssl_conf = 320-version-negotiation-ssl
+
+[320-version-negotiation-ssl]
+server = 320-version-negotiation-server
+client = 320-version-negotiation-client
+
+[320-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[320-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-320]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[321-version-negotiation]
+ssl_conf = 321-version-negotiation-ssl
+
+[321-version-negotiation-ssl]
+server = 321-version-negotiation-server
+client = 321-version-negotiation-client
+
+[321-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[321-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-321]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[322-version-negotiation]
+ssl_conf = 322-version-negotiation-ssl
+
+[322-version-negotiation-ssl]
+server = 322-version-negotiation-server
+client = 322-version-negotiation-client
+
+[322-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[322-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-322]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[323-version-negotiation]
+ssl_conf = 323-version-negotiation-ssl
+
+[323-version-negotiation-ssl]
+server = 323-version-negotiation-server
+client = 323-version-negotiation-client
+
+[323-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[323-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-323]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[324-version-negotiation]
+ssl_conf = 324-version-negotiation-ssl
+
+[324-version-negotiation-ssl]
+server = 324-version-negotiation-server
+client = 324-version-negotiation-client
+
+[324-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[324-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-324]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[325-version-negotiation]
+ssl_conf = 325-version-negotiation-ssl
+
+[325-version-negotiation-ssl]
+server = 325-version-negotiation-server
+client = 325-version-negotiation-client
+
+[325-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[325-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-325]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[326-version-negotiation]
+ssl_conf = 326-version-negotiation-ssl
+
+[326-version-negotiation-ssl]
+server = 326-version-negotiation-server
+client = 326-version-negotiation-client
+
+[326-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[326-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-326]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[327-version-negotiation]
+ssl_conf = 327-version-negotiation-ssl
+
+[327-version-negotiation-ssl]
+server = 327-version-negotiation-server
+client = 327-version-negotiation-client
+
+[327-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[327-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-327]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[328-version-negotiation]
+ssl_conf = 328-version-negotiation-ssl
+
+[328-version-negotiation-ssl]
+server = 328-version-negotiation-server
+client = 328-version-negotiation-client
+
+[328-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[328-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-328]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[329-version-negotiation]
+ssl_conf = 329-version-negotiation-ssl
+
+[329-version-negotiation-ssl]
+server = 329-version-negotiation-server
+client = 329-version-negotiation-client
+
+[329-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[329-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-329]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[330-version-negotiation]
+ssl_conf = 330-version-negotiation-ssl
+
+[330-version-negotiation-ssl]
+server = 330-version-negotiation-server
+client = 330-version-negotiation-client
+
+[330-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[330-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-330]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[331-version-negotiation]
+ssl_conf = 331-version-negotiation-ssl
+
+[331-version-negotiation-ssl]
+server = 331-version-negotiation-server
+client = 331-version-negotiation-client
+
+[331-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[331-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-331]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[332-version-negotiation]
+ssl_conf = 332-version-negotiation-ssl
+
+[332-version-negotiation-ssl]
+server = 332-version-negotiation-server
+client = 332-version-negotiation-client
+
+[332-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[332-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-332]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[333-version-negotiation]
+ssl_conf = 333-version-negotiation-ssl
+
+[333-version-negotiation-ssl]
+server = 333-version-negotiation-server
+client = 333-version-negotiation-client
+
+[333-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[333-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-333]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[334-version-negotiation]
+ssl_conf = 334-version-negotiation-ssl
+
+[334-version-negotiation-ssl]
+server = 334-version-negotiation-server
+client = 334-version-negotiation-client
+
+[334-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[334-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-334]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[335-version-negotiation]
+ssl_conf = 335-version-negotiation-ssl
+
+[335-version-negotiation-ssl]
+server = 335-version-negotiation-server
+client = 335-version-negotiation-client
+
+[335-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[335-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-335]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[336-version-negotiation]
+ssl_conf = 336-version-negotiation-ssl
+
+[336-version-negotiation-ssl]
+server = 336-version-negotiation-server
+client = 336-version-negotiation-client
+
+[336-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[336-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-336]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[337-version-negotiation]
+ssl_conf = 337-version-negotiation-ssl
+
+[337-version-negotiation-ssl]
+server = 337-version-negotiation-server
+client = 337-version-negotiation-client
+
+[337-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[337-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-337]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[338-version-negotiation]
+ssl_conf = 338-version-negotiation-ssl
+
+[338-version-negotiation-ssl]
+server = 338-version-negotiation-server
+client = 338-version-negotiation-client
+
+[338-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[338-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-338]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[339-version-negotiation]
+ssl_conf = 339-version-negotiation-ssl
+
+[339-version-negotiation-ssl]
+server = 339-version-negotiation-server
+client = 339-version-negotiation-client
+
+[339-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[339-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-339]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[340-version-negotiation]
+ssl_conf = 340-version-negotiation-ssl
+
+[340-version-negotiation-ssl]
+server = 340-version-negotiation-server
+client = 340-version-negotiation-client
+
+[340-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[340-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-340]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[341-version-negotiation]
+ssl_conf = 341-version-negotiation-ssl
+
+[341-version-negotiation-ssl]
+server = 341-version-negotiation-server
+client = 341-version-negotiation-client
+
+[341-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[341-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-341]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[342-version-negotiation]
+ssl_conf = 342-version-negotiation-ssl
+
+[342-version-negotiation-ssl]
+server = 342-version-negotiation-server
+client = 342-version-negotiation-client
+
+[342-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[342-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-342]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[343-version-negotiation]
+ssl_conf = 343-version-negotiation-ssl
+
+[343-version-negotiation-ssl]
+server = 343-version-negotiation-server
+client = 343-version-negotiation-client
+
+[343-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[343-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-343]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[344-version-negotiation]
+ssl_conf = 344-version-negotiation-ssl
+
+[344-version-negotiation-ssl]
+server = 344-version-negotiation-server
+client = 344-version-negotiation-client
+
+[344-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[344-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-344]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[345-version-negotiation]
+ssl_conf = 345-version-negotiation-ssl
+
+[345-version-negotiation-ssl]
+server = 345-version-negotiation-server
+client = 345-version-negotiation-client
+
+[345-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[345-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-345]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[346-version-negotiation]
+ssl_conf = 346-version-negotiation-ssl
+
+[346-version-negotiation-ssl]
+server = 346-version-negotiation-server
+client = 346-version-negotiation-client
+
+[346-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[346-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-346]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[347-version-negotiation]
+ssl_conf = 347-version-negotiation-ssl
+
+[347-version-negotiation-ssl]
+server = 347-version-negotiation-server
+client = 347-version-negotiation-client
+
+[347-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[347-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-347]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[348-version-negotiation]
+ssl_conf = 348-version-negotiation-ssl
+
+[348-version-negotiation-ssl]
+server = 348-version-negotiation-server
+client = 348-version-negotiation-client
+
+[348-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[348-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-348]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[349-version-negotiation]
+ssl_conf = 349-version-negotiation-ssl
+
+[349-version-negotiation-ssl]
+server = 349-version-negotiation-server
+client = 349-version-negotiation-client
+
+[349-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[349-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-349]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[350-version-negotiation]
+ssl_conf = 350-version-negotiation-ssl
+
+[350-version-negotiation-ssl]
+server = 350-version-negotiation-server
+client = 350-version-negotiation-client
+
+[350-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[350-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-350]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[351-version-negotiation]
+ssl_conf = 351-version-negotiation-ssl
+
+[351-version-negotiation-ssl]
+server = 351-version-negotiation-server
+client = 351-version-negotiation-client
+
+[351-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[351-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-351]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[352-version-negotiation]
+ssl_conf = 352-version-negotiation-ssl
+
+[352-version-negotiation-ssl]
+server = 352-version-negotiation-server
+client = 352-version-negotiation-client
+
+[352-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[352-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-352]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[353-version-negotiation]
+ssl_conf = 353-version-negotiation-ssl
+
+[353-version-negotiation-ssl]
+server = 353-version-negotiation-server
+client = 353-version-negotiation-client
+
+[353-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[353-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-353]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[354-version-negotiation]
+ssl_conf = 354-version-negotiation-ssl
+
+[354-version-negotiation-ssl]
+server = 354-version-negotiation-server
+client = 354-version-negotiation-client
+
+[354-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[354-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-354]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[355-version-negotiation]
+ssl_conf = 355-version-negotiation-ssl
+
+[355-version-negotiation-ssl]
+server = 355-version-negotiation-server
+client = 355-version-negotiation-client
+
+[355-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[355-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-355]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[356-version-negotiation]
+ssl_conf = 356-version-negotiation-ssl
+
+[356-version-negotiation-ssl]
+server = 356-version-negotiation-server
+client = 356-version-negotiation-client
+
+[356-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[356-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-356]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[357-version-negotiation]
+ssl_conf = 357-version-negotiation-ssl
+
+[357-version-negotiation-ssl]
+server = 357-version-negotiation-server
+client = 357-version-negotiation-client
+
+[357-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[357-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-357]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[358-version-negotiation]
+ssl_conf = 358-version-negotiation-ssl
+
+[358-version-negotiation-ssl]
+server = 358-version-negotiation-server
+client = 358-version-negotiation-client
+
+[358-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[358-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-358]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[359-version-negotiation]
+ssl_conf = 359-version-negotiation-ssl
+
+[359-version-negotiation-ssl]
+server = 359-version-negotiation-server
+client = 359-version-negotiation-client
+
+[359-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[359-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-359]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[360-version-negotiation]
+ssl_conf = 360-version-negotiation-ssl
+
+[360-version-negotiation-ssl]
+server = 360-version-negotiation-server
+client = 360-version-negotiation-client
+
+[360-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[360-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-360]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[361-version-negotiation]
+ssl_conf = 361-version-negotiation-ssl
+
+[361-version-negotiation-ssl]
+server = 361-version-negotiation-server
+client = 361-version-negotiation-client
+
+[361-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[361-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-361]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[362-version-negotiation]
+ssl_conf = 362-version-negotiation-ssl
+
+[362-version-negotiation-ssl]
+server = 362-version-negotiation-server
+client = 362-version-negotiation-client
+
+[362-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[362-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-362]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[363-version-negotiation]
+ssl_conf = 363-version-negotiation-ssl
+
+[363-version-negotiation-ssl]
+server = 363-version-negotiation-server
+client = 363-version-negotiation-client
+
+[363-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[363-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-363]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[364-version-negotiation]
+ssl_conf = 364-version-negotiation-ssl
+
+[364-version-negotiation-ssl]
+server = 364-version-negotiation-server
+client = 364-version-negotiation-client
+
+[364-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[364-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-364]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[365-version-negotiation]
+ssl_conf = 365-version-negotiation-ssl
+
+[365-version-negotiation-ssl]
+server = 365-version-negotiation-server
+client = 365-version-negotiation-client
+
+[365-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[365-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-365]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[366-version-negotiation]
+ssl_conf = 366-version-negotiation-ssl
+
+[366-version-negotiation-ssl]
+server = 366-version-negotiation-server
+client = 366-version-negotiation-client
+
+[366-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[366-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-366]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[367-version-negotiation]
+ssl_conf = 367-version-negotiation-ssl
+
+[367-version-negotiation-ssl]
+server = 367-version-negotiation-server
+client = 367-version-negotiation-client
+
+[367-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[367-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-367]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[368-version-negotiation]
+ssl_conf = 368-version-negotiation-ssl
+
+[368-version-negotiation-ssl]
+server = 368-version-negotiation-server
+client = 368-version-negotiation-client
+
+[368-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[368-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-368]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[369-version-negotiation]
+ssl_conf = 369-version-negotiation-ssl
+
+[369-version-negotiation-ssl]
+server = 369-version-negotiation-server
+client = 369-version-negotiation-client
+
+[369-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[369-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-369]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[370-version-negotiation]
+ssl_conf = 370-version-negotiation-ssl
+
+[370-version-negotiation-ssl]
+server = 370-version-negotiation-server
+client = 370-version-negotiation-client
+
+[370-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[370-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-370]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[371-version-negotiation]
+ssl_conf = 371-version-negotiation-ssl
+
+[371-version-negotiation-ssl]
+server = 371-version-negotiation-server
+client = 371-version-negotiation-client
+
+[371-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[371-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-371]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[372-version-negotiation]
+ssl_conf = 372-version-negotiation-ssl
+
+[372-version-negotiation-ssl]
+server = 372-version-negotiation-server
+client = 372-version-negotiation-client
+
+[372-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[372-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-372]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[373-version-negotiation]
+ssl_conf = 373-version-negotiation-ssl
+
+[373-version-negotiation-ssl]
+server = 373-version-negotiation-server
+client = 373-version-negotiation-client
+
+[373-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[373-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-373]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[374-version-negotiation]
+ssl_conf = 374-version-negotiation-ssl
+
+[374-version-negotiation-ssl]
+server = 374-version-negotiation-server
+client = 374-version-negotiation-client
+
+[374-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[374-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-374]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[375-version-negotiation]
+ssl_conf = 375-version-negotiation-ssl
+
+[375-version-negotiation-ssl]
+server = 375-version-negotiation-server
+client = 375-version-negotiation-client
+
+[375-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[375-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-375]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[376-version-negotiation]
+ssl_conf = 376-version-negotiation-ssl
+
+[376-version-negotiation-ssl]
+server = 376-version-negotiation-server
+client = 376-version-negotiation-client
+
+[376-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[376-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-376]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[377-version-negotiation]
+ssl_conf = 377-version-negotiation-ssl
+
+[377-version-negotiation-ssl]
+server = 377-version-negotiation-server
+client = 377-version-negotiation-client
+
+[377-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[377-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-377]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[378-version-negotiation]
+ssl_conf = 378-version-negotiation-ssl
+
+[378-version-negotiation-ssl]
+server = 378-version-negotiation-server
+client = 378-version-negotiation-client
+
+[378-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[378-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-378]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[379-version-negotiation]
+ssl_conf = 379-version-negotiation-ssl
+
+[379-version-negotiation-ssl]
+server = 379-version-negotiation-server
+client = 379-version-negotiation-client
+
+[379-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[379-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-379]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[380-version-negotiation]
+ssl_conf = 380-version-negotiation-ssl
+
+[380-version-negotiation-ssl]
+server = 380-version-negotiation-server
+client = 380-version-negotiation-client
+
+[380-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[380-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-380]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[381-version-negotiation]
+ssl_conf = 381-version-negotiation-ssl
+
+[381-version-negotiation-ssl]
+server = 381-version-negotiation-server
+client = 381-version-negotiation-client
+
+[381-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[381-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-381]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[382-version-negotiation]
+ssl_conf = 382-version-negotiation-ssl
+
+[382-version-negotiation-ssl]
+server = 382-version-negotiation-server
+client = 382-version-negotiation-client
+
+[382-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[382-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-382]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[383-version-negotiation]
+ssl_conf = 383-version-negotiation-ssl
+
+[383-version-negotiation-ssl]
+server = 383-version-negotiation-server
+client = 383-version-negotiation-client
+
+[383-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[383-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-383]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[384-version-negotiation]
+ssl_conf = 384-version-negotiation-ssl
+
+[384-version-negotiation-ssl]
+server = 384-version-negotiation-server
+client = 384-version-negotiation-client
+
+[384-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[384-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-384]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[385-version-negotiation]
+ssl_conf = 385-version-negotiation-ssl
+
+[385-version-negotiation-ssl]
+server = 385-version-negotiation-server
+client = 385-version-negotiation-client
+
+[385-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[385-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-385]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[386-version-negotiation]
+ssl_conf = 386-version-negotiation-ssl
+
+[386-version-negotiation-ssl]
+server = 386-version-negotiation-server
+client = 386-version-negotiation-client
+
+[386-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[386-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-386]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[387-version-negotiation]
+ssl_conf = 387-version-negotiation-ssl
+
+[387-version-negotiation-ssl]
+server = 387-version-negotiation-server
+client = 387-version-negotiation-client
+
+[387-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[387-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-387]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[388-version-negotiation]
+ssl_conf = 388-version-negotiation-ssl
+
+[388-version-negotiation-ssl]
+server = 388-version-negotiation-server
+client = 388-version-negotiation-client
+
+[388-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[388-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-388]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[389-version-negotiation]
+ssl_conf = 389-version-negotiation-ssl
+
+[389-version-negotiation-ssl]
+server = 389-version-negotiation-server
+client = 389-version-negotiation-client
+
+[389-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[389-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-389]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[390-version-negotiation]
+ssl_conf = 390-version-negotiation-ssl
+
+[390-version-negotiation-ssl]
+server = 390-version-negotiation-server
+client = 390-version-negotiation-client
+
+[390-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[390-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-390]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[391-version-negotiation]
+ssl_conf = 391-version-negotiation-ssl
+
+[391-version-negotiation-ssl]
+server = 391-version-negotiation-server
+client = 391-version-negotiation-client
+
+[391-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[391-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-391]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[392-version-negotiation]
+ssl_conf = 392-version-negotiation-ssl
+
+[392-version-negotiation-ssl]
+server = 392-version-negotiation-server
+client = 392-version-negotiation-client
+
+[392-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[392-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-392]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[393-version-negotiation]
+ssl_conf = 393-version-negotiation-ssl
+
+[393-version-negotiation-ssl]
+server = 393-version-negotiation-server
+client = 393-version-negotiation-client
+
+[393-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[393-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-393]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[394-version-negotiation]
+ssl_conf = 394-version-negotiation-ssl
+
+[394-version-negotiation-ssl]
+server = 394-version-negotiation-server
+client = 394-version-negotiation-client
+
+[394-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[394-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-394]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[395-version-negotiation]
+ssl_conf = 395-version-negotiation-ssl
+
+[395-version-negotiation-ssl]
+server = 395-version-negotiation-server
+client = 395-version-negotiation-client
+
+[395-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[395-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-395]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[396-version-negotiation]
+ssl_conf = 396-version-negotiation-ssl
+
+[396-version-negotiation-ssl]
+server = 396-version-negotiation-server
+client = 396-version-negotiation-client
+
+[396-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[396-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-396]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[397-version-negotiation]
+ssl_conf = 397-version-negotiation-ssl
+
+[397-version-negotiation-ssl]
+server = 397-version-negotiation-server
+client = 397-version-negotiation-client
+
+[397-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[397-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-397]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[398-version-negotiation]
+ssl_conf = 398-version-negotiation-ssl
+
+[398-version-negotiation-ssl]
+server = 398-version-negotiation-server
+client = 398-version-negotiation-client
+
+[398-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[398-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-398]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[399-version-negotiation]
+ssl_conf = 399-version-negotiation-ssl
+
+[399-version-negotiation-ssl]
+server = 399-version-negotiation-server
+client = 399-version-negotiation-client
+
+[399-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[399-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-399]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[400-version-negotiation]
+ssl_conf = 400-version-negotiation-ssl
+
+[400-version-negotiation-ssl]
+server = 400-version-negotiation-server
+client = 400-version-negotiation-client
+
+[400-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[400-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-400]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[401-version-negotiation]
+ssl_conf = 401-version-negotiation-ssl
+
+[401-version-negotiation-ssl]
+server = 401-version-negotiation-server
+client = 401-version-negotiation-client
+
+[401-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[401-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-401]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[402-version-negotiation]
+ssl_conf = 402-version-negotiation-ssl
+
+[402-version-negotiation-ssl]
+server = 402-version-negotiation-server
+client = 402-version-negotiation-client
+
+[402-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[402-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-402]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[403-version-negotiation]
+ssl_conf = 403-version-negotiation-ssl
+
+[403-version-negotiation-ssl]
+server = 403-version-negotiation-server
+client = 403-version-negotiation-client
+
+[403-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[403-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-403]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[404-version-negotiation]
+ssl_conf = 404-version-negotiation-ssl
+
+[404-version-negotiation-ssl]
+server = 404-version-negotiation-server
+client = 404-version-negotiation-client
+
+[404-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[404-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-404]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[405-version-negotiation]
+ssl_conf = 405-version-negotiation-ssl
+
+[405-version-negotiation-ssl]
+server = 405-version-negotiation-server
+client = 405-version-negotiation-client
+
+[405-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[405-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-405]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[406-version-negotiation]
+ssl_conf = 406-version-negotiation-ssl
+
+[406-version-negotiation-ssl]
+server = 406-version-negotiation-server
+client = 406-version-negotiation-client
+
+[406-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[406-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-406]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[407-version-negotiation]
+ssl_conf = 407-version-negotiation-ssl
+
+[407-version-negotiation-ssl]
+server = 407-version-negotiation-server
+client = 407-version-negotiation-client
+
+[407-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[407-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-407]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[408-version-negotiation]
+ssl_conf = 408-version-negotiation-ssl
+
+[408-version-negotiation-ssl]
+server = 408-version-negotiation-server
+client = 408-version-negotiation-client
+
+[408-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[408-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-408]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[409-version-negotiation]
+ssl_conf = 409-version-negotiation-ssl
+
+[409-version-negotiation-ssl]
+server = 409-version-negotiation-server
+client = 409-version-negotiation-client
+
+[409-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[409-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-409]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[410-version-negotiation]
+ssl_conf = 410-version-negotiation-ssl
+
+[410-version-negotiation-ssl]
+server = 410-version-negotiation-server
+client = 410-version-negotiation-client
+
+[410-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[410-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-410]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[411-version-negotiation]
+ssl_conf = 411-version-negotiation-ssl
+
+[411-version-negotiation-ssl]
+server = 411-version-negotiation-server
+client = 411-version-negotiation-client
+
+[411-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[411-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-411]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[412-version-negotiation]
+ssl_conf = 412-version-negotiation-ssl
+
+[412-version-negotiation-ssl]
+server = 412-version-negotiation-server
+client = 412-version-negotiation-client
+
+[412-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[412-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-412]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[413-version-negotiation]
+ssl_conf = 413-version-negotiation-ssl
+
+[413-version-negotiation-ssl]
+server = 413-version-negotiation-server
+client = 413-version-negotiation-client
+
+[413-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[413-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-413]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[414-version-negotiation]
+ssl_conf = 414-version-negotiation-ssl
+
+[414-version-negotiation-ssl]
+server = 414-version-negotiation-server
+client = 414-version-negotiation-client
+
+[414-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[414-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-414]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[415-version-negotiation]
+ssl_conf = 415-version-negotiation-ssl
+
+[415-version-negotiation-ssl]
+server = 415-version-negotiation-server
+client = 415-version-negotiation-client
+
+[415-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[415-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-415]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[416-version-negotiation]
+ssl_conf = 416-version-negotiation-ssl
+
+[416-version-negotiation-ssl]
+server = 416-version-negotiation-server
+client = 416-version-negotiation-client
+
+[416-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[416-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-416]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[417-version-negotiation]
+ssl_conf = 417-version-negotiation-ssl
+
+[417-version-negotiation-ssl]
+server = 417-version-negotiation-server
+client = 417-version-negotiation-client
+
+[417-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[417-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-417]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[418-version-negotiation]
+ssl_conf = 418-version-negotiation-ssl
+
+[418-version-negotiation-ssl]
+server = 418-version-negotiation-server
+client = 418-version-negotiation-client
+
+[418-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[418-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-418]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[419-version-negotiation]
+ssl_conf = 419-version-negotiation-ssl
+
+[419-version-negotiation-ssl]
+server = 419-version-negotiation-server
+client = 419-version-negotiation-client
+
+[419-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[419-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-419]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[420-version-negotiation]
+ssl_conf = 420-version-negotiation-ssl
+
+[420-version-negotiation-ssl]
+server = 420-version-negotiation-server
+client = 420-version-negotiation-client
+
+[420-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[420-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-420]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[421-version-negotiation]
+ssl_conf = 421-version-negotiation-ssl
+
+[421-version-negotiation-ssl]
+server = 421-version-negotiation-server
+client = 421-version-negotiation-client
+
+[421-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[421-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-421]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[422-version-negotiation]
+ssl_conf = 422-version-negotiation-ssl
+
+[422-version-negotiation-ssl]
+server = 422-version-negotiation-server
+client = 422-version-negotiation-client
+
+[422-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[422-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-422]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[423-version-negotiation]
+ssl_conf = 423-version-negotiation-ssl
+
+[423-version-negotiation-ssl]
+server = 423-version-negotiation-server
+client = 423-version-negotiation-client
+
+[423-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[423-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-423]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[424-version-negotiation]
+ssl_conf = 424-version-negotiation-ssl
+
+[424-version-negotiation-ssl]
+server = 424-version-negotiation-server
+client = 424-version-negotiation-client
+
+[424-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[424-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-424]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[425-version-negotiation]
+ssl_conf = 425-version-negotiation-ssl
+
+[425-version-negotiation-ssl]
+server = 425-version-negotiation-server
+client = 425-version-negotiation-client
+
+[425-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[425-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-425]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[426-version-negotiation]
+ssl_conf = 426-version-negotiation-ssl
+
+[426-version-negotiation-ssl]
+server = 426-version-negotiation-server
+client = 426-version-negotiation-client
+
+[426-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[426-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-426]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[427-version-negotiation]
+ssl_conf = 427-version-negotiation-ssl
+
+[427-version-negotiation-ssl]
+server = 427-version-negotiation-server
+client = 427-version-negotiation-client
+
+[427-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[427-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-427]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[428-version-negotiation]
+ssl_conf = 428-version-negotiation-ssl
+
+[428-version-negotiation-ssl]
+server = 428-version-negotiation-server
+client = 428-version-negotiation-client
+
+[428-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[428-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-428]
+ExpectedProtocol = TLSv1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[429-version-negotiation]
+ssl_conf = 429-version-negotiation-ssl
+
+[429-version-negotiation-ssl]
+server = 429-version-negotiation-server
+client = 429-version-negotiation-client
+
+[429-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[429-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-429]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[430-version-negotiation]
+ssl_conf = 430-version-negotiation-ssl
+
+[430-version-negotiation-ssl]
+server = 430-version-negotiation-server
+client = 430-version-negotiation-client
+
+[430-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[430-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-430]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[431-version-negotiation]
+ssl_conf = 431-version-negotiation-ssl
+
+[431-version-negotiation-ssl]
+server = 431-version-negotiation-server
+client = 431-version-negotiation-client
+
+[431-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[431-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-431]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[432-version-negotiation]
+ssl_conf = 432-version-negotiation-ssl
+
+[432-version-negotiation-ssl]
+server = 432-version-negotiation-server
+client = 432-version-negotiation-client
+
+[432-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[432-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-432]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[433-version-negotiation]
+ssl_conf = 433-version-negotiation-ssl
+
+[433-version-negotiation-ssl]
+server = 433-version-negotiation-server
+client = 433-version-negotiation-client
+
+[433-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[433-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-433]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[434-version-negotiation]
+ssl_conf = 434-version-negotiation-ssl
+
+[434-version-negotiation-ssl]
+server = 434-version-negotiation-server
+client = 434-version-negotiation-client
+
+[434-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[434-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-434]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[435-version-negotiation]
+ssl_conf = 435-version-negotiation-ssl
+
+[435-version-negotiation-ssl]
+server = 435-version-negotiation-server
+client = 435-version-negotiation-client
+
+[435-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[435-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-435]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[436-version-negotiation]
+ssl_conf = 436-version-negotiation-ssl
+
+[436-version-negotiation-ssl]
+server = 436-version-negotiation-server
+client = 436-version-negotiation-client
+
+[436-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[436-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-436]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[437-version-negotiation]
+ssl_conf = 437-version-negotiation-ssl
+
+[437-version-negotiation-ssl]
+server = 437-version-negotiation-server
+client = 437-version-negotiation-client
+
+[437-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[437-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-437]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[438-version-negotiation]
+ssl_conf = 438-version-negotiation-ssl
+
+[438-version-negotiation-ssl]
+server = 438-version-negotiation-server
+client = 438-version-negotiation-client
+
+[438-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[438-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-438]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[439-version-negotiation]
+ssl_conf = 439-version-negotiation-ssl
+
+[439-version-negotiation-ssl]
+server = 439-version-negotiation-server
+client = 439-version-negotiation-client
+
+[439-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[439-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-439]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[440-version-negotiation]
+ssl_conf = 440-version-negotiation-ssl
+
+[440-version-negotiation-ssl]
+server = 440-version-negotiation-server
+client = 440-version-negotiation-client
+
+[440-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[440-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-440]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[441-version-negotiation]
+ssl_conf = 441-version-negotiation-ssl
+
+[441-version-negotiation-ssl]
+server = 441-version-negotiation-server
+client = 441-version-negotiation-client
+
+[441-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[441-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-441]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[442-version-negotiation]
+ssl_conf = 442-version-negotiation-ssl
+
+[442-version-negotiation-ssl]
+server = 442-version-negotiation-server
+client = 442-version-negotiation-client
+
+[442-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[442-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-442]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[443-version-negotiation]
+ssl_conf = 443-version-negotiation-ssl
+
+[443-version-negotiation-ssl]
+server = 443-version-negotiation-server
+client = 443-version-negotiation-client
+
+[443-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[443-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-443]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[444-version-negotiation]
+ssl_conf = 444-version-negotiation-ssl
+
+[444-version-negotiation-ssl]
+server = 444-version-negotiation-server
+client = 444-version-negotiation-client
+
+[444-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[444-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-444]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[445-version-negotiation]
+ssl_conf = 445-version-negotiation-ssl
+
+[445-version-negotiation-ssl]
+server = 445-version-negotiation-server
+client = 445-version-negotiation-client
+
+[445-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[445-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-445]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[446-version-negotiation]
+ssl_conf = 446-version-negotiation-ssl
+
+[446-version-negotiation-ssl]
+server = 446-version-negotiation-server
+client = 446-version-negotiation-client
+
+[446-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[446-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-446]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[447-version-negotiation]
+ssl_conf = 447-version-negotiation-ssl
+
+[447-version-negotiation-ssl]
+server = 447-version-negotiation-server
+client = 447-version-negotiation-client
+
+[447-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[447-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-447]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[448-version-negotiation]
+ssl_conf = 448-version-negotiation-ssl
+
+[448-version-negotiation-ssl]
+server = 448-version-negotiation-server
+client = 448-version-negotiation-client
+
+[448-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[448-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-448]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[449-version-negotiation]
+ssl_conf = 449-version-negotiation-ssl
+
+[449-version-negotiation-ssl]
+server = 449-version-negotiation-server
+client = 449-version-negotiation-client
+
+[449-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[449-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-449]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[450-version-negotiation]
+ssl_conf = 450-version-negotiation-ssl
+
+[450-version-negotiation-ssl]
+server = 450-version-negotiation-server
+client = 450-version-negotiation-client
+
+[450-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[450-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-450]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[451-version-negotiation]
+ssl_conf = 451-version-negotiation-ssl
+
+[451-version-negotiation-ssl]
+server = 451-version-negotiation-server
+client = 451-version-negotiation-client
+
+[451-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[451-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-451]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[452-version-negotiation]
+ssl_conf = 452-version-negotiation-ssl
+
+[452-version-negotiation-ssl]
+server = 452-version-negotiation-server
+client = 452-version-negotiation-client
+
+[452-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[452-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-452]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[453-version-negotiation]
+ssl_conf = 453-version-negotiation-ssl
+
+[453-version-negotiation-ssl]
+server = 453-version-negotiation-server
+client = 453-version-negotiation-client
+
+[453-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[453-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-453]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[454-version-negotiation]
+ssl_conf = 454-version-negotiation-ssl
+
+[454-version-negotiation-ssl]
+server = 454-version-negotiation-server
+client = 454-version-negotiation-client
+
+[454-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[454-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-454]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[455-version-negotiation]
+ssl_conf = 455-version-negotiation-ssl
+
+[455-version-negotiation-ssl]
+server = 455-version-negotiation-server
+client = 455-version-negotiation-client
+
+[455-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[455-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-455]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[456-version-negotiation]
+ssl_conf = 456-version-negotiation-ssl
+
+[456-version-negotiation-ssl]
+server = 456-version-negotiation-server
+client = 456-version-negotiation-client
+
+[456-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[456-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-456]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[457-version-negotiation]
+ssl_conf = 457-version-negotiation-ssl
+
+[457-version-negotiation-ssl]
+server = 457-version-negotiation-server
+client = 457-version-negotiation-client
+
+[457-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[457-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-457]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[458-version-negotiation]
+ssl_conf = 458-version-negotiation-ssl
+
+[458-version-negotiation-ssl]
+server = 458-version-negotiation-server
+client = 458-version-negotiation-client
+
+[458-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[458-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-458]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[459-version-negotiation]
+ssl_conf = 459-version-negotiation-ssl
+
+[459-version-negotiation-ssl]
+server = 459-version-negotiation-server
+client = 459-version-negotiation-client
+
+[459-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[459-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-459]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[460-version-negotiation]
+ssl_conf = 460-version-negotiation-ssl
+
+[460-version-negotiation-ssl]
+server = 460-version-negotiation-server
+client = 460-version-negotiation-client
+
+[460-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[460-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-460]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[461-version-negotiation]
+ssl_conf = 461-version-negotiation-ssl
+
+[461-version-negotiation-ssl]
+server = 461-version-negotiation-server
+client = 461-version-negotiation-client
+
+[461-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[461-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-461]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[462-version-negotiation]
+ssl_conf = 462-version-negotiation-ssl
+
+[462-version-negotiation-ssl]
+server = 462-version-negotiation-server
+client = 462-version-negotiation-client
+
+[462-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[462-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-462]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[463-version-negotiation]
+ssl_conf = 463-version-negotiation-ssl
+
+[463-version-negotiation-ssl]
+server = 463-version-negotiation-server
+client = 463-version-negotiation-client
+
+[463-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[463-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-463]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[464-version-negotiation]
+ssl_conf = 464-version-negotiation-ssl
+
+[464-version-negotiation-ssl]
+server = 464-version-negotiation-server
+client = 464-version-negotiation-client
+
+[464-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[464-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-464]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[465-version-negotiation]
+ssl_conf = 465-version-negotiation-ssl
+
+[465-version-negotiation-ssl]
+server = 465-version-negotiation-server
+client = 465-version-negotiation-client
+
+[465-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[465-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-465]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[466-version-negotiation]
+ssl_conf = 466-version-negotiation-ssl
+
+[466-version-negotiation-ssl]
+server = 466-version-negotiation-server
+client = 466-version-negotiation-client
+
+[466-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[466-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-466]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[467-version-negotiation]
+ssl_conf = 467-version-negotiation-ssl
+
+[467-version-negotiation-ssl]
+server = 467-version-negotiation-server
+client = 467-version-negotiation-client
+
+[467-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[467-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-467]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[468-version-negotiation]
+ssl_conf = 468-version-negotiation-ssl
+
+[468-version-negotiation-ssl]
+server = 468-version-negotiation-server
+client = 468-version-negotiation-client
+
+[468-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[468-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-468]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[469-version-negotiation]
+ssl_conf = 469-version-negotiation-ssl
+
+[469-version-negotiation-ssl]
+server = 469-version-negotiation-server
+client = 469-version-negotiation-client
+
+[469-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[469-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-469]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[470-version-negotiation]
+ssl_conf = 470-version-negotiation-ssl
+
+[470-version-negotiation-ssl]
+server = 470-version-negotiation-server
+client = 470-version-negotiation-client
+
+[470-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[470-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-470]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[471-version-negotiation]
+ssl_conf = 471-version-negotiation-ssl
+
+[471-version-negotiation-ssl]
+server = 471-version-negotiation-server
+client = 471-version-negotiation-client
+
+[471-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[471-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-471]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[472-version-negotiation]
+ssl_conf = 472-version-negotiation-ssl
+
+[472-version-negotiation-ssl]
+server = 472-version-negotiation-server
+client = 472-version-negotiation-client
+
+[472-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[472-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-472]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[473-version-negotiation]
+ssl_conf = 473-version-negotiation-ssl
+
+[473-version-negotiation-ssl]
+server = 473-version-negotiation-server
+client = 473-version-negotiation-client
+
+[473-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[473-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-473]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[474-version-negotiation]
+ssl_conf = 474-version-negotiation-ssl
+
+[474-version-negotiation-ssl]
+server = 474-version-negotiation-server
+client = 474-version-negotiation-client
+
+[474-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[474-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-474]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[475-version-negotiation]
+ssl_conf = 475-version-negotiation-ssl
+
+[475-version-negotiation-ssl]
+server = 475-version-negotiation-server
+client = 475-version-negotiation-client
+
+[475-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[475-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-475]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[476-version-negotiation]
+ssl_conf = 476-version-negotiation-ssl
+
+[476-version-negotiation-ssl]
+server = 476-version-negotiation-server
+client = 476-version-negotiation-client
+
+[476-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[476-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-476]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[477-version-negotiation]
+ssl_conf = 477-version-negotiation-ssl
+
+[477-version-negotiation-ssl]
+server = 477-version-negotiation-server
+client = 477-version-negotiation-client
+
+[477-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[477-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-477]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[478-version-negotiation]
+ssl_conf = 478-version-negotiation-ssl
+
+[478-version-negotiation-ssl]
+server = 478-version-negotiation-server
+client = 478-version-negotiation-client
+
+[478-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[478-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-478]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[479-version-negotiation]
+ssl_conf = 479-version-negotiation-ssl
+
+[479-version-negotiation-ssl]
+server = 479-version-negotiation-server
+client = 479-version-negotiation-client
+
+[479-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[479-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-479]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[480-version-negotiation]
+ssl_conf = 480-version-negotiation-ssl
+
+[480-version-negotiation-ssl]
+server = 480-version-negotiation-server
+client = 480-version-negotiation-client
+
+[480-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[480-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-480]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[481-version-negotiation]
+ssl_conf = 481-version-negotiation-ssl
+
+[481-version-negotiation-ssl]
+server = 481-version-negotiation-server
+client = 481-version-negotiation-client
+
+[481-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[481-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-481]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[482-version-negotiation]
+ssl_conf = 482-version-negotiation-ssl
+
+[482-version-negotiation-ssl]
+server = 482-version-negotiation-server
+client = 482-version-negotiation-client
+
+[482-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[482-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-482]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[483-version-negotiation]
+ssl_conf = 483-version-negotiation-ssl
+
+[483-version-negotiation-ssl]
+server = 483-version-negotiation-server
+client = 483-version-negotiation-client
+
+[483-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[483-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-483]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[484-version-negotiation]
+ssl_conf = 484-version-negotiation-ssl
+
+[484-version-negotiation-ssl]
+server = 484-version-negotiation-server
+client = 484-version-negotiation-client
+
+[484-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[484-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-484]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[485-version-negotiation]
+ssl_conf = 485-version-negotiation-ssl
+
+[485-version-negotiation-ssl]
+server = 485-version-negotiation-server
+client = 485-version-negotiation-client
+
+[485-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[485-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-485]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[486-version-negotiation]
+ssl_conf = 486-version-negotiation-ssl
+
+[486-version-negotiation-ssl]
+server = 486-version-negotiation-server
+client = 486-version-negotiation-client
+
+[486-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[486-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-486]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[487-version-negotiation]
+ssl_conf = 487-version-negotiation-ssl
+
+[487-version-negotiation-ssl]
+server = 487-version-negotiation-server
+client = 487-version-negotiation-client
+
+[487-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[487-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-487]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[488-version-negotiation]
+ssl_conf = 488-version-negotiation-ssl
+
+[488-version-negotiation-ssl]
+server = 488-version-negotiation-server
+client = 488-version-negotiation-client
+
+[488-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[488-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-488]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[489-version-negotiation]
+ssl_conf = 489-version-negotiation-ssl
+
+[489-version-negotiation-ssl]
+server = 489-version-negotiation-server
+client = 489-version-negotiation-client
+
+[489-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[489-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-489]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[490-version-negotiation]
+ssl_conf = 490-version-negotiation-ssl
+
+[490-version-negotiation-ssl]
+server = 490-version-negotiation-server
+client = 490-version-negotiation-client
+
+[490-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[490-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-490]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[491-version-negotiation]
+ssl_conf = 491-version-negotiation-ssl
+
+[491-version-negotiation-ssl]
+server = 491-version-negotiation-server
+client = 491-version-negotiation-client
+
+[491-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[491-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-491]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[492-version-negotiation]
+ssl_conf = 492-version-negotiation-ssl
+
+[492-version-negotiation-ssl]
+server = 492-version-negotiation-server
+client = 492-version-negotiation-client
+
+[492-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[492-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-492]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[493-version-negotiation]
+ssl_conf = 493-version-negotiation-ssl
+
+[493-version-negotiation-ssl]
+server = 493-version-negotiation-server
+client = 493-version-negotiation-client
+
+[493-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[493-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-493]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[494-version-negotiation]
+ssl_conf = 494-version-negotiation-ssl
+
+[494-version-negotiation-ssl]
+server = 494-version-negotiation-server
+client = 494-version-negotiation-client
+
+[494-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[494-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-494]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[495-version-negotiation]
+ssl_conf = 495-version-negotiation-ssl
+
+[495-version-negotiation-ssl]
+server = 495-version-negotiation-server
+client = 495-version-negotiation-client
+
+[495-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[495-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-495]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[496-version-negotiation]
+ssl_conf = 496-version-negotiation-ssl
+
+[496-version-negotiation-ssl]
+server = 496-version-negotiation-server
+client = 496-version-negotiation-client
+
+[496-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[496-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-496]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[497-version-negotiation]
+ssl_conf = 497-version-negotiation-ssl
+
+[497-version-negotiation-ssl]
+server = 497-version-negotiation-server
+client = 497-version-negotiation-client
+
+[497-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[497-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-497]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[498-version-negotiation]
+ssl_conf = 498-version-negotiation-ssl
+
+[498-version-negotiation-ssl]
+server = 498-version-negotiation-server
+client = 498-version-negotiation-client
+
+[498-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[498-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-498]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[499-version-negotiation]
+ssl_conf = 499-version-negotiation-ssl
+
+[499-version-negotiation-ssl]
+server = 499-version-negotiation-server
+client = 499-version-negotiation-client
+
+[499-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[499-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-499]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[500-version-negotiation]
+ssl_conf = 500-version-negotiation-ssl
+
+[500-version-negotiation-ssl]
+server = 500-version-negotiation-server
+client = 500-version-negotiation-client
+
+[500-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[500-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-500]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[501-version-negotiation]
+ssl_conf = 501-version-negotiation-ssl
+
+[501-version-negotiation-ssl]
+server = 501-version-negotiation-server
+client = 501-version-negotiation-client
+
+[501-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[501-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-501]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[502-version-negotiation]
+ssl_conf = 502-version-negotiation-ssl
+
+[502-version-negotiation-ssl]
+server = 502-version-negotiation-server
+client = 502-version-negotiation-client
+
+[502-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[502-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-502]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[503-version-negotiation]
+ssl_conf = 503-version-negotiation-ssl
+
+[503-version-negotiation-ssl]
+server = 503-version-negotiation-server
+client = 503-version-negotiation-client
+
+[503-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[503-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-503]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[504-version-negotiation]
+ssl_conf = 504-version-negotiation-ssl
+
+[504-version-negotiation-ssl]
+server = 504-version-negotiation-server
+client = 504-version-negotiation-client
+
+[504-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[504-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-504]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[505-version-negotiation]
+ssl_conf = 505-version-negotiation-ssl
+
+[505-version-negotiation-ssl]
+server = 505-version-negotiation-server
+client = 505-version-negotiation-client
+
+[505-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[505-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-505]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[506-version-negotiation]
+ssl_conf = 506-version-negotiation-ssl
+
+[506-version-negotiation-ssl]
+server = 506-version-negotiation-server
+client = 506-version-negotiation-client
+
+[506-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[506-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-506]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[507-version-negotiation]
+ssl_conf = 507-version-negotiation-ssl
+
+[507-version-negotiation-ssl]
+server = 507-version-negotiation-server
+client = 507-version-negotiation-client
+
+[507-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[507-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-507]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[508-version-negotiation]
+ssl_conf = 508-version-negotiation-ssl
+
+[508-version-negotiation-ssl]
+server = 508-version-negotiation-server
+client = 508-version-negotiation-client
+
+[508-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[508-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-508]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[509-version-negotiation]
+ssl_conf = 509-version-negotiation-ssl
+
+[509-version-negotiation-ssl]
+server = 509-version-negotiation-server
+client = 509-version-negotiation-client
+
+[509-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[509-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-509]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[510-version-negotiation]
+ssl_conf = 510-version-negotiation-ssl
+
+[510-version-negotiation-ssl]
+server = 510-version-negotiation-server
+client = 510-version-negotiation-client
+
+[510-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[510-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-510]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[511-version-negotiation]
+ssl_conf = 511-version-negotiation-ssl
+
+[511-version-negotiation-ssl]
+server = 511-version-negotiation-server
+client = 511-version-negotiation-client
+
+[511-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[511-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-511]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[512-version-negotiation]
+ssl_conf = 512-version-negotiation-ssl
+
+[512-version-negotiation-ssl]
+server = 512-version-negotiation-server
+client = 512-version-negotiation-client
+
+[512-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[512-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-512]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[513-version-negotiation]
+ssl_conf = 513-version-negotiation-ssl
+
+[513-version-negotiation-ssl]
+server = 513-version-negotiation-server
+client = 513-version-negotiation-client
+
+[513-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[513-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-513]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[514-version-negotiation]
+ssl_conf = 514-version-negotiation-ssl
+
+[514-version-negotiation-ssl]
+server = 514-version-negotiation-server
+client = 514-version-negotiation-client
+
+[514-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[514-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-514]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[515-version-negotiation]
+ssl_conf = 515-version-negotiation-ssl
+
+[515-version-negotiation-ssl]
+server = 515-version-negotiation-server
+client = 515-version-negotiation-client
+
+[515-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[515-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-515]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[516-version-negotiation]
+ssl_conf = 516-version-negotiation-ssl
+
+[516-version-negotiation-ssl]
+server = 516-version-negotiation-server
+client = 516-version-negotiation-client
+
+[516-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[516-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-516]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[517-version-negotiation]
+ssl_conf = 517-version-negotiation-ssl
+
+[517-version-negotiation-ssl]
+server = 517-version-negotiation-server
+client = 517-version-negotiation-client
+
+[517-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[517-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-517]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[518-version-negotiation]
+ssl_conf = 518-version-negotiation-ssl
+
+[518-version-negotiation-ssl]
+server = 518-version-negotiation-server
+client = 518-version-negotiation-client
+
+[518-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[518-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-518]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[519-version-negotiation]
+ssl_conf = 519-version-negotiation-ssl
+
+[519-version-negotiation-ssl]
+server = 519-version-negotiation-server
+client = 519-version-negotiation-client
+
+[519-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[519-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-519]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[520-version-negotiation]
+ssl_conf = 520-version-negotiation-ssl
+
+[520-version-negotiation-ssl]
+server = 520-version-negotiation-server
+client = 520-version-negotiation-client
+
+[520-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[520-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-520]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[521-version-negotiation]
+ssl_conf = 521-version-negotiation-ssl
+
+[521-version-negotiation-ssl]
+server = 521-version-negotiation-server
+client = 521-version-negotiation-client
+
+[521-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[521-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-521]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[522-version-negotiation]
+ssl_conf = 522-version-negotiation-ssl
+
+[522-version-negotiation-ssl]
+server = 522-version-negotiation-server
+client = 522-version-negotiation-client
+
+[522-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[522-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-522]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[523-version-negotiation]
+ssl_conf = 523-version-negotiation-ssl
+
+[523-version-negotiation-ssl]
+server = 523-version-negotiation-server
+client = 523-version-negotiation-client
+
+[523-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[523-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-523]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[524-version-negotiation]
+ssl_conf = 524-version-negotiation-ssl
+
+[524-version-negotiation-ssl]
+server = 524-version-negotiation-server
+client = 524-version-negotiation-client
+
+[524-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[524-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-524]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[525-version-negotiation]
+ssl_conf = 525-version-negotiation-ssl
+
+[525-version-negotiation-ssl]
+server = 525-version-negotiation-server
+client = 525-version-negotiation-client
+
+[525-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[525-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-525]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[526-version-negotiation]
+ssl_conf = 526-version-negotiation-ssl
+
+[526-version-negotiation-ssl]
+server = 526-version-negotiation-server
+client = 526-version-negotiation-client
+
+[526-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[526-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-526]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[527-version-negotiation]
+ssl_conf = 527-version-negotiation-ssl
+
+[527-version-negotiation-ssl]
+server = 527-version-negotiation-server
+client = 527-version-negotiation-client
+
+[527-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[527-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-527]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[528-version-negotiation]
+ssl_conf = 528-version-negotiation-ssl
+
+[528-version-negotiation-ssl]
+server = 528-version-negotiation-server
+client = 528-version-negotiation-client
+
+[528-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[528-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-528]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[529-version-negotiation]
+ssl_conf = 529-version-negotiation-ssl
+
+[529-version-negotiation-ssl]
+server = 529-version-negotiation-server
+client = 529-version-negotiation-client
+
+[529-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[529-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-529]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[530-version-negotiation]
+ssl_conf = 530-version-negotiation-ssl
+
+[530-version-negotiation-ssl]
+server = 530-version-negotiation-server
+client = 530-version-negotiation-client
+
+[530-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[530-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-530]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[531-version-negotiation]
+ssl_conf = 531-version-negotiation-ssl
+
+[531-version-negotiation-ssl]
+server = 531-version-negotiation-server
+client = 531-version-negotiation-client
+
+[531-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[531-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-531]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[532-version-negotiation]
+ssl_conf = 532-version-negotiation-ssl
+
+[532-version-negotiation-ssl]
+server = 532-version-negotiation-server
+client = 532-version-negotiation-client
+
+[532-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[532-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-532]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[533-version-negotiation]
+ssl_conf = 533-version-negotiation-ssl
+
+[533-version-negotiation-ssl]
+server = 533-version-negotiation-server
+client = 533-version-negotiation-client
+
+[533-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[533-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-533]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[534-version-negotiation]
+ssl_conf = 534-version-negotiation-ssl
+
+[534-version-negotiation-ssl]
+server = 534-version-negotiation-server
+client = 534-version-negotiation-client
+
+[534-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[534-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-534]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[535-version-negotiation]
+ssl_conf = 535-version-negotiation-ssl
+
+[535-version-negotiation-ssl]
+server = 535-version-negotiation-server
+client = 535-version-negotiation-client
+
+[535-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[535-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-535]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[536-version-negotiation]
+ssl_conf = 536-version-negotiation-ssl
+
+[536-version-negotiation-ssl]
+server = 536-version-negotiation-server
+client = 536-version-negotiation-client
+
+[536-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[536-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-536]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[537-version-negotiation]
+ssl_conf = 537-version-negotiation-ssl
+
+[537-version-negotiation-ssl]
+server = 537-version-negotiation-server
+client = 537-version-negotiation-client
+
+[537-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[537-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-537]
+ExpectedProtocol = TLSv1.1
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[538-version-negotiation]
+ssl_conf = 538-version-negotiation-ssl
+
+[538-version-negotiation-ssl]
+server = 538-version-negotiation-server
+client = 538-version-negotiation-client
+
+[538-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[538-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-538]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[539-version-negotiation]
+ssl_conf = 539-version-negotiation-ssl
+
+[539-version-negotiation-ssl]
+server = 539-version-negotiation-server
+client = 539-version-negotiation-client
+
+[539-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[539-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-539]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[540-version-negotiation]
+ssl_conf = 540-version-negotiation-ssl
+
+[540-version-negotiation-ssl]
+server = 540-version-negotiation-server
+client = 540-version-negotiation-client
+
+[540-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[540-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-540]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[541-version-negotiation]
+ssl_conf = 541-version-negotiation-ssl
+
+[541-version-negotiation-ssl]
+server = 541-version-negotiation-server
+client = 541-version-negotiation-client
+
+[541-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[541-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-541]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[542-version-negotiation]
+ssl_conf = 542-version-negotiation-ssl
+
+[542-version-negotiation-ssl]
+server = 542-version-negotiation-server
+client = 542-version-negotiation-client
+
+[542-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[542-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-542]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[543-version-negotiation]
+ssl_conf = 543-version-negotiation-ssl
+
+[543-version-negotiation-ssl]
+server = 543-version-negotiation-server
+client = 543-version-negotiation-client
+
+[543-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[543-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-543]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[544-version-negotiation]
+ssl_conf = 544-version-negotiation-ssl
+
+[544-version-negotiation-ssl]
+server = 544-version-negotiation-server
+client = 544-version-negotiation-client
+
+[544-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[544-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-544]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[545-version-negotiation]
+ssl_conf = 545-version-negotiation-ssl
+
+[545-version-negotiation-ssl]
+server = 545-version-negotiation-server
+client = 545-version-negotiation-client
+
+[545-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[545-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-545]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[546-version-negotiation]
+ssl_conf = 546-version-negotiation-ssl
+
+[546-version-negotiation-ssl]
+server = 546-version-negotiation-server
+client = 546-version-negotiation-client
+
+[546-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[546-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-546]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[547-version-negotiation]
+ssl_conf = 547-version-negotiation-ssl
+
+[547-version-negotiation-ssl]
+server = 547-version-negotiation-server
+client = 547-version-negotiation-client
+
+[547-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[547-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-547]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[548-version-negotiation]
+ssl_conf = 548-version-negotiation-ssl
+
+[548-version-negotiation-ssl]
+server = 548-version-negotiation-server
+client = 548-version-negotiation-client
+
+[548-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[548-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-548]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[549-version-negotiation]
+ssl_conf = 549-version-negotiation-ssl
+
+[549-version-negotiation-ssl]
+server = 549-version-negotiation-server
+client = 549-version-negotiation-client
+
+[549-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[549-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-549]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[550-version-negotiation]
+ssl_conf = 550-version-negotiation-ssl
+
+[550-version-negotiation-ssl]
+server = 550-version-negotiation-server
+client = 550-version-negotiation-client
+
+[550-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[550-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-550]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[551-version-negotiation]
+ssl_conf = 551-version-negotiation-ssl
+
+[551-version-negotiation-ssl]
+server = 551-version-negotiation-server
+client = 551-version-negotiation-client
+
+[551-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[551-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-551]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[552-version-negotiation]
+ssl_conf = 552-version-negotiation-ssl
+
+[552-version-negotiation-ssl]
+server = 552-version-negotiation-server
+client = 552-version-negotiation-client
+
+[552-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[552-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-552]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[553-version-negotiation]
+ssl_conf = 553-version-negotiation-ssl
+
+[553-version-negotiation-ssl]
+server = 553-version-negotiation-server
+client = 553-version-negotiation-client
+
+[553-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[553-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-553]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[554-version-negotiation]
+ssl_conf = 554-version-negotiation-ssl
+
+[554-version-negotiation-ssl]
+server = 554-version-negotiation-server
+client = 554-version-negotiation-client
+
+[554-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[554-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-554]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[555-version-negotiation]
+ssl_conf = 555-version-negotiation-ssl
+
+[555-version-negotiation-ssl]
+server = 555-version-negotiation-server
+client = 555-version-negotiation-client
+
+[555-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[555-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-555]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[556-version-negotiation]
+ssl_conf = 556-version-negotiation-ssl
+
+[556-version-negotiation-ssl]
+server = 556-version-negotiation-server
+client = 556-version-negotiation-client
+
+[556-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[556-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-556]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[557-version-negotiation]
+ssl_conf = 557-version-negotiation-ssl
+
+[557-version-negotiation-ssl]
+server = 557-version-negotiation-server
+client = 557-version-negotiation-client
+
+[557-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[557-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-557]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[558-version-negotiation]
+ssl_conf = 558-version-negotiation-ssl
+
+[558-version-negotiation-ssl]
+server = 558-version-negotiation-server
+client = 558-version-negotiation-client
+
+[558-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[558-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-558]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[559-version-negotiation]
+ssl_conf = 559-version-negotiation-ssl
+
+[559-version-negotiation-ssl]
+server = 559-version-negotiation-server
+client = 559-version-negotiation-client
+
+[559-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[559-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-559]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[560-version-negotiation]
+ssl_conf = 560-version-negotiation-ssl
+
+[560-version-negotiation-ssl]
+server = 560-version-negotiation-server
+client = 560-version-negotiation-client
+
+[560-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[560-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-560]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[561-version-negotiation]
+ssl_conf = 561-version-negotiation-ssl
+
+[561-version-negotiation-ssl]
+server = 561-version-negotiation-server
+client = 561-version-negotiation-client
+
+[561-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[561-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-561]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[562-version-negotiation]
+ssl_conf = 562-version-negotiation-ssl
+
+[562-version-negotiation-ssl]
+server = 562-version-negotiation-server
+client = 562-version-negotiation-client
+
+[562-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[562-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-562]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[563-version-negotiation]
+ssl_conf = 563-version-negotiation-ssl
+
+[563-version-negotiation-ssl]
+server = 563-version-negotiation-server
+client = 563-version-negotiation-client
+
+[563-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[563-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-563]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[564-version-negotiation]
+ssl_conf = 564-version-negotiation-ssl
+
+[564-version-negotiation-ssl]
+server = 564-version-negotiation-server
+client = 564-version-negotiation-client
+
+[564-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[564-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-564]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[565-version-negotiation]
+ssl_conf = 565-version-negotiation-ssl
+
+[565-version-negotiation-ssl]
+server = 565-version-negotiation-server
+client = 565-version-negotiation-client
+
+[565-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[565-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-565]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[566-version-negotiation]
+ssl_conf = 566-version-negotiation-ssl
+
+[566-version-negotiation-ssl]
+server = 566-version-negotiation-server
+client = 566-version-negotiation-client
+
+[566-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[566-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-566]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[567-version-negotiation]
+ssl_conf = 567-version-negotiation-ssl
+
+[567-version-negotiation-ssl]
+server = 567-version-negotiation-server
+client = 567-version-negotiation-client
+
+[567-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[567-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-567]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[568-version-negotiation]
+ssl_conf = 568-version-negotiation-ssl
+
+[568-version-negotiation-ssl]
+server = 568-version-negotiation-server
+client = 568-version-negotiation-client
+
+[568-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[568-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-568]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[569-version-negotiation]
+ssl_conf = 569-version-negotiation-ssl
+
+[569-version-negotiation-ssl]
+server = 569-version-negotiation-server
+client = 569-version-negotiation-client
+
+[569-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[569-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-569]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[570-version-negotiation]
+ssl_conf = 570-version-negotiation-ssl
+
+[570-version-negotiation-ssl]
+server = 570-version-negotiation-server
+client = 570-version-negotiation-client
+
+[570-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[570-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-570]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[571-version-negotiation]
+ssl_conf = 571-version-negotiation-ssl
+
+[571-version-negotiation-ssl]
+server = 571-version-negotiation-server
+client = 571-version-negotiation-client
+
+[571-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[571-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-571]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[572-version-negotiation]
+ssl_conf = 572-version-negotiation-ssl
+
+[572-version-negotiation-ssl]
+server = 572-version-negotiation-server
+client = 572-version-negotiation-client
+
+[572-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[572-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-572]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[573-version-negotiation]
+ssl_conf = 573-version-negotiation-ssl
+
+[573-version-negotiation-ssl]
+server = 573-version-negotiation-server
+client = 573-version-negotiation-client
+
+[573-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[573-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-573]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[574-version-negotiation]
+ssl_conf = 574-version-negotiation-ssl
+
+[574-version-negotiation-ssl]
+server = 574-version-negotiation-server
+client = 574-version-negotiation-client
+
+[574-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[574-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-574]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[575-version-negotiation]
+ssl_conf = 575-version-negotiation-ssl
+
+[575-version-negotiation-ssl]
+server = 575-version-negotiation-server
+client = 575-version-negotiation-client
+
+[575-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[575-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-575]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[576-version-negotiation]
+ssl_conf = 576-version-negotiation-ssl
+
+[576-version-negotiation-ssl]
+server = 576-version-negotiation-server
+client = 576-version-negotiation-client
+
+[576-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[576-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-576]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[577-version-negotiation]
+ssl_conf = 577-version-negotiation-ssl
+
+[577-version-negotiation-ssl]
+server = 577-version-negotiation-server
+client = 577-version-negotiation-client
+
+[577-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[577-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-577]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[578-version-negotiation]
+ssl_conf = 578-version-negotiation-ssl
+
+[578-version-negotiation-ssl]
+server = 578-version-negotiation-server
+client = 578-version-negotiation-client
+
+[578-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[578-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-578]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[579-version-negotiation]
+ssl_conf = 579-version-negotiation-ssl
+
+[579-version-negotiation-ssl]
+server = 579-version-negotiation-server
+client = 579-version-negotiation-client
+
+[579-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[579-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-579]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[580-version-negotiation]
+ssl_conf = 580-version-negotiation-ssl
+
+[580-version-negotiation-ssl]
+server = 580-version-negotiation-server
+client = 580-version-negotiation-client
+
+[580-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[580-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-580]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[581-version-negotiation]
+ssl_conf = 581-version-negotiation-ssl
+
+[581-version-negotiation-ssl]
+server = 581-version-negotiation-server
+client = 581-version-negotiation-client
+
+[581-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[581-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-581]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[582-version-negotiation]
+ssl_conf = 582-version-negotiation-ssl
+
+[582-version-negotiation-ssl]
+server = 582-version-negotiation-server
+client = 582-version-negotiation-client
+
+[582-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[582-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-582]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[583-version-negotiation]
+ssl_conf = 583-version-negotiation-ssl
+
+[583-version-negotiation-ssl]
+server = 583-version-negotiation-server
+client = 583-version-negotiation-client
+
+[583-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[583-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-583]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[584-version-negotiation]
+ssl_conf = 584-version-negotiation-ssl
+
+[584-version-negotiation-ssl]
+server = 584-version-negotiation-server
+client = 584-version-negotiation-client
+
+[584-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[584-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-584]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[585-version-negotiation]
+ssl_conf = 585-version-negotiation-ssl
+
+[585-version-negotiation-ssl]
+server = 585-version-negotiation-server
+client = 585-version-negotiation-client
+
+[585-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[585-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-585]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[586-version-negotiation]
+ssl_conf = 586-version-negotiation-ssl
+
+[586-version-negotiation-ssl]
+server = 586-version-negotiation-server
+client = 586-version-negotiation-client
+
+[586-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[586-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-586]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[587-version-negotiation]
+ssl_conf = 587-version-negotiation-ssl
+
+[587-version-negotiation-ssl]
+server = 587-version-negotiation-server
+client = 587-version-negotiation-client
+
+[587-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[587-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-587]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[588-version-negotiation]
+ssl_conf = 588-version-negotiation-ssl
+
+[588-version-negotiation-ssl]
+server = 588-version-negotiation-server
+client = 588-version-negotiation-client
+
+[588-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[588-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-588]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[589-version-negotiation]
+ssl_conf = 589-version-negotiation-ssl
+
+[589-version-negotiation-ssl]
+server = 589-version-negotiation-server
+client = 589-version-negotiation-client
+
+[589-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[589-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-589]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[590-version-negotiation]
+ssl_conf = 590-version-negotiation-ssl
+
+[590-version-negotiation-ssl]
+server = 590-version-negotiation-server
+client = 590-version-negotiation-client
+
+[590-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[590-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-590]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[591-version-negotiation]
+ssl_conf = 591-version-negotiation-ssl
+
+[591-version-negotiation-ssl]
+server = 591-version-negotiation-server
+client = 591-version-negotiation-client
+
+[591-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[591-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-591]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[592-version-negotiation]
+ssl_conf = 592-version-negotiation-ssl
+
+[592-version-negotiation-ssl]
+server = 592-version-negotiation-server
+client = 592-version-negotiation-client
+
+[592-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[592-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-592]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[593-version-negotiation]
+ssl_conf = 593-version-negotiation-ssl
+
+[593-version-negotiation-ssl]
+server = 593-version-negotiation-server
+client = 593-version-negotiation-client
+
+[593-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[593-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-593]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[594-version-negotiation]
+ssl_conf = 594-version-negotiation-ssl
+
+[594-version-negotiation-ssl]
+server = 594-version-negotiation-server
+client = 594-version-negotiation-client
+
+[594-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[594-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-594]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[595-version-negotiation]
+ssl_conf = 595-version-negotiation-ssl
+
+[595-version-negotiation-ssl]
+server = 595-version-negotiation-server
+client = 595-version-negotiation-client
+
+[595-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[595-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-595]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[596-version-negotiation]
+ssl_conf = 596-version-negotiation-ssl
+
+[596-version-negotiation-ssl]
+server = 596-version-negotiation-server
+client = 596-version-negotiation-client
+
+[596-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[596-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-596]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[597-version-negotiation]
+ssl_conf = 597-version-negotiation-ssl
+
+[597-version-negotiation-ssl]
+server = 597-version-negotiation-server
+client = 597-version-negotiation-client
+
+[597-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[597-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-597]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[598-version-negotiation]
+ssl_conf = 598-version-negotiation-ssl
+
+[598-version-negotiation-ssl]
+server = 598-version-negotiation-server
+client = 598-version-negotiation-client
+
+[598-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[598-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-598]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[599-version-negotiation]
+ssl_conf = 599-version-negotiation-ssl
+
+[599-version-negotiation-ssl]
+server = 599-version-negotiation-server
+client = 599-version-negotiation-client
+
+[599-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[599-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-599]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[600-version-negotiation]
+ssl_conf = 600-version-negotiation-ssl
+
+[600-version-negotiation-ssl]
+server = 600-version-negotiation-server
+client = 600-version-negotiation-client
+
+[600-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[600-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-600]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[601-version-negotiation]
+ssl_conf = 601-version-negotiation-ssl
+
+[601-version-negotiation-ssl]
+server = 601-version-negotiation-server
+client = 601-version-negotiation-client
+
+[601-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[601-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-601]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[602-version-negotiation]
+ssl_conf = 602-version-negotiation-ssl
+
+[602-version-negotiation-ssl]
+server = 602-version-negotiation-server
+client = 602-version-negotiation-client
+
+[602-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[602-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-602]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[603-version-negotiation]
+ssl_conf = 603-version-negotiation-ssl
+
+[603-version-negotiation-ssl]
+server = 603-version-negotiation-server
+client = 603-version-negotiation-client
+
+[603-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[603-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-603]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[604-version-negotiation]
+ssl_conf = 604-version-negotiation-ssl
+
+[604-version-negotiation-ssl]
+server = 604-version-negotiation-server
+client = 604-version-negotiation-client
+
+[604-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[604-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-604]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[605-version-negotiation]
+ssl_conf = 605-version-negotiation-ssl
+
+[605-version-negotiation-ssl]
+server = 605-version-negotiation-server
+client = 605-version-negotiation-client
+
+[605-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[605-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-605]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[606-version-negotiation]
+ssl_conf = 606-version-negotiation-ssl
+
+[606-version-negotiation-ssl]
+server = 606-version-negotiation-server
+client = 606-version-negotiation-client
+
+[606-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[606-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-606]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[607-version-negotiation]
+ssl_conf = 607-version-negotiation-ssl
+
+[607-version-negotiation-ssl]
+server = 607-version-negotiation-server
+client = 607-version-negotiation-client
+
+[607-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[607-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-607]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[608-version-negotiation]
+ssl_conf = 608-version-negotiation-ssl
+
+[608-version-negotiation-ssl]
+server = 608-version-negotiation-server
+client = 608-version-negotiation-client
+
+[608-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[608-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-608]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[609-version-negotiation]
+ssl_conf = 609-version-negotiation-ssl
+
+[609-version-negotiation-ssl]
+server = 609-version-negotiation-server
+client = 609-version-negotiation-client
+
+[609-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[609-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-609]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[610-version-negotiation]
+ssl_conf = 610-version-negotiation-ssl
+
+[610-version-negotiation-ssl]
+server = 610-version-negotiation-server
+client = 610-version-negotiation-client
+
+[610-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[610-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-610]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[611-version-negotiation]
+ssl_conf = 611-version-negotiation-ssl
+
+[611-version-negotiation-ssl]
+server = 611-version-negotiation-server
+client = 611-version-negotiation-client
+
+[611-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[611-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-611]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[612-version-negotiation]
+ssl_conf = 612-version-negotiation-ssl
+
+[612-version-negotiation-ssl]
+server = 612-version-negotiation-server
+client = 612-version-negotiation-client
+
+[612-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[612-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-612]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[613-version-negotiation]
+ssl_conf = 613-version-negotiation-ssl
+
+[613-version-negotiation-ssl]
+server = 613-version-negotiation-server
+client = 613-version-negotiation-client
+
+[613-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[613-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-613]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[614-version-negotiation]
+ssl_conf = 614-version-negotiation-ssl
+
+[614-version-negotiation-ssl]
+server = 614-version-negotiation-server
+client = 614-version-negotiation-client
+
+[614-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[614-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-614]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[615-version-negotiation]
+ssl_conf = 615-version-negotiation-ssl
+
+[615-version-negotiation-ssl]
+server = 615-version-negotiation-server
+client = 615-version-negotiation-client
+
+[615-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[615-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-615]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[616-version-negotiation]
+ssl_conf = 616-version-negotiation-ssl
+
+[616-version-negotiation-ssl]
+server = 616-version-negotiation-server
+client = 616-version-negotiation-client
+
+[616-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[616-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-616]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[617-version-negotiation]
+ssl_conf = 617-version-negotiation-ssl
+
+[617-version-negotiation-ssl]
+server = 617-version-negotiation-server
+client = 617-version-negotiation-client
+
+[617-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[617-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-617]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[618-version-negotiation]
+ssl_conf = 618-version-negotiation-ssl
+
+[618-version-negotiation-ssl]
+server = 618-version-negotiation-server
+client = 618-version-negotiation-client
+
+[618-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[618-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-618]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[619-version-negotiation]
+ssl_conf = 619-version-negotiation-ssl
+
+[619-version-negotiation-ssl]
+server = 619-version-negotiation-server
+client = 619-version-negotiation-client
+
+[619-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[619-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-619]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[620-version-negotiation]
+ssl_conf = 620-version-negotiation-ssl
+
+[620-version-negotiation-ssl]
+server = 620-version-negotiation-server
+client = 620-version-negotiation-client
+
+[620-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[620-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-620]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[621-version-negotiation]
+ssl_conf = 621-version-negotiation-ssl
+
+[621-version-negotiation-ssl]
+server = 621-version-negotiation-server
+client = 621-version-negotiation-client
+
+[621-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[621-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-621]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[622-version-negotiation]
+ssl_conf = 622-version-negotiation-ssl
+
+[622-version-negotiation-ssl]
+server = 622-version-negotiation-server
+client = 622-version-negotiation-client
+
+[622-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[622-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-622]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[623-version-negotiation]
+ssl_conf = 623-version-negotiation-ssl
+
+[623-version-negotiation-ssl]
+server = 623-version-negotiation-server
+client = 623-version-negotiation-client
+
+[623-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[623-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-623]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[624-version-negotiation]
+ssl_conf = 624-version-negotiation-ssl
+
+[624-version-negotiation-ssl]
+server = 624-version-negotiation-server
+client = 624-version-negotiation-client
+
+[624-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[624-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-624]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[625-version-negotiation]
+ssl_conf = 625-version-negotiation-ssl
+
+[625-version-negotiation-ssl]
+server = 625-version-negotiation-server
+client = 625-version-negotiation-client
+
+[625-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[625-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-625]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[626-version-negotiation]
+ssl_conf = 626-version-negotiation-ssl
+
+[626-version-negotiation-ssl]
+server = 626-version-negotiation-server
+client = 626-version-negotiation-client
+
+[626-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[626-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-626]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[627-version-negotiation]
+ssl_conf = 627-version-negotiation-ssl
+
+[627-version-negotiation-ssl]
+server = 627-version-negotiation-server
+client = 627-version-negotiation-client
+
+[627-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[627-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-627]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[628-version-negotiation]
+ssl_conf = 628-version-negotiation-ssl
+
+[628-version-negotiation-ssl]
+server = 628-version-negotiation-server
+client = 628-version-negotiation-client
+
+[628-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[628-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-628]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[629-version-negotiation]
+ssl_conf = 629-version-negotiation-ssl
+
+[629-version-negotiation-ssl]
+server = 629-version-negotiation-server
+client = 629-version-negotiation-client
+
+[629-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[629-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-629]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[630-version-negotiation]
+ssl_conf = 630-version-negotiation-ssl
+
+[630-version-negotiation-ssl]
+server = 630-version-negotiation-server
+client = 630-version-negotiation-client
+
+[630-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[630-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-630]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[631-version-negotiation]
+ssl_conf = 631-version-negotiation-ssl
+
+[631-version-negotiation-ssl]
+server = 631-version-negotiation-server
+client = 631-version-negotiation-client
+
+[631-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[631-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-631]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[632-version-negotiation]
+ssl_conf = 632-version-negotiation-ssl
+
+[632-version-negotiation-ssl]
+server = 632-version-negotiation-server
+client = 632-version-negotiation-client
+
+[632-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[632-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-632]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[633-version-negotiation]
+ssl_conf = 633-version-negotiation-ssl
+
+[633-version-negotiation-ssl]
+server = 633-version-negotiation-server
+client = 633-version-negotiation-client
+
+[633-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[633-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-633]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[634-version-negotiation]
+ssl_conf = 634-version-negotiation-ssl
+
+[634-version-negotiation-ssl]
+server = 634-version-negotiation-server
+client = 634-version-negotiation-client
+
+[634-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[634-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-634]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[635-version-negotiation]
+ssl_conf = 635-version-negotiation-ssl
+
+[635-version-negotiation-ssl]
+server = 635-version-negotiation-server
+client = 635-version-negotiation-client
+
+[635-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[635-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-635]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[636-version-negotiation]
+ssl_conf = 636-version-negotiation-ssl
+
+[636-version-negotiation-ssl]
+server = 636-version-negotiation-server
+client = 636-version-negotiation-client
+
+[636-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[636-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-636]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[637-version-negotiation]
+ssl_conf = 637-version-negotiation-ssl
+
+[637-version-negotiation-ssl]
+server = 637-version-negotiation-server
+client = 637-version-negotiation-client
+
+[637-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[637-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-637]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[638-version-negotiation]
+ssl_conf = 638-version-negotiation-ssl
+
+[638-version-negotiation-ssl]
+server = 638-version-negotiation-server
+client = 638-version-negotiation-client
+
+[638-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[638-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-638]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[639-version-negotiation]
+ssl_conf = 639-version-negotiation-ssl
+
+[639-version-negotiation-ssl]
+server = 639-version-negotiation-server
+client = 639-version-negotiation-client
+
+[639-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[639-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-639]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[640-version-negotiation]
+ssl_conf = 640-version-negotiation-ssl
+
+[640-version-negotiation-ssl]
+server = 640-version-negotiation-server
+client = 640-version-negotiation-client
+
+[640-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[640-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-640]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[641-version-negotiation]
+ssl_conf = 641-version-negotiation-ssl
+
+[641-version-negotiation-ssl]
+server = 641-version-negotiation-server
+client = 641-version-negotiation-client
+
+[641-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[641-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-641]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[642-version-negotiation]
+ssl_conf = 642-version-negotiation-ssl
+
+[642-version-negotiation-ssl]
+server = 642-version-negotiation-server
+client = 642-version-negotiation-client
+
+[642-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[642-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-642]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[643-version-negotiation]
+ssl_conf = 643-version-negotiation-ssl
+
+[643-version-negotiation-ssl]
+server = 643-version-negotiation-server
+client = 643-version-negotiation-client
+
+[643-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[643-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-643]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[644-version-negotiation]
+ssl_conf = 644-version-negotiation-ssl
+
+[644-version-negotiation-ssl]
+server = 644-version-negotiation-server
+client = 644-version-negotiation-client
+
+[644-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[644-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-644]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[645-version-negotiation]
+ssl_conf = 645-version-negotiation-ssl
+
+[645-version-negotiation-ssl]
+server = 645-version-negotiation-server
+client = 645-version-negotiation-client
+
+[645-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[645-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-645]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[646-version-negotiation]
+ssl_conf = 646-version-negotiation-ssl
+
+[646-version-negotiation-ssl]
+server = 646-version-negotiation-server
+client = 646-version-negotiation-client
+
+[646-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[646-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-646]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[647-version-negotiation]
+ssl_conf = 647-version-negotiation-ssl
+
+[647-version-negotiation-ssl]
+server = 647-version-negotiation-server
+client = 647-version-negotiation-client
+
+[647-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[647-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-647]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[648-version-negotiation]
+ssl_conf = 648-version-negotiation-ssl
+
+[648-version-negotiation-ssl]
+server = 648-version-negotiation-server
+client = 648-version-negotiation-client
+
+[648-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[648-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-648]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[649-version-negotiation]
+ssl_conf = 649-version-negotiation-ssl
+
+[649-version-negotiation-ssl]
+server = 649-version-negotiation-server
+client = 649-version-negotiation-client
+
+[649-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[649-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-649]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[650-version-negotiation]
+ssl_conf = 650-version-negotiation-ssl
+
+[650-version-negotiation-ssl]
+server = 650-version-negotiation-server
+client = 650-version-negotiation-client
+
+[650-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[650-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-650]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[651-version-negotiation]
+ssl_conf = 651-version-negotiation-ssl
+
+[651-version-negotiation-ssl]
+server = 651-version-negotiation-server
+client = 651-version-negotiation-client
+
+[651-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[651-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-651]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[652-version-negotiation]
+ssl_conf = 652-version-negotiation-ssl
+
+[652-version-negotiation-ssl]
+server = 652-version-negotiation-server
+client = 652-version-negotiation-client
+
+[652-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[652-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-652]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[653-version-negotiation]
+ssl_conf = 653-version-negotiation-ssl
+
+[653-version-negotiation-ssl]
+server = 653-version-negotiation-server
+client = 653-version-negotiation-client
+
+[653-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[653-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-653]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[654-version-negotiation]
+ssl_conf = 654-version-negotiation-ssl
+
+[654-version-negotiation-ssl]
+server = 654-version-negotiation-server
+client = 654-version-negotiation-client
+
+[654-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[654-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-654]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[655-version-negotiation]
+ssl_conf = 655-version-negotiation-ssl
+
+[655-version-negotiation-ssl]
+server = 655-version-negotiation-server
+client = 655-version-negotiation-client
+
+[655-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[655-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-655]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[656-version-negotiation]
+ssl_conf = 656-version-negotiation-ssl
+
+[656-version-negotiation-ssl]
+server = 656-version-negotiation-server
+client = 656-version-negotiation-client
+
+[656-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = SSLv3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[656-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-656]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[657-version-negotiation]
+ssl_conf = 657-version-negotiation-ssl
+
+[657-version-negotiation-ssl]
+server = 657-version-negotiation-server
+client = 657-version-negotiation-client
+
+[657-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[657-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-657]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[658-version-negotiation]
+ssl_conf = 658-version-negotiation-ssl
+
+[658-version-negotiation-ssl]
+server = 658-version-negotiation-server
+client = 658-version-negotiation-client
+
+[658-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[658-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-658]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[659-version-negotiation]
+ssl_conf = 659-version-negotiation-ssl
+
+[659-version-negotiation-ssl]
+server = 659-version-negotiation-server
+client = 659-version-negotiation-client
+
+[659-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[659-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-659]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[660-version-negotiation]
+ssl_conf = 660-version-negotiation-ssl
+
+[660-version-negotiation-ssl]
+server = 660-version-negotiation-server
+client = 660-version-negotiation-client
+
+[660-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[660-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-660]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[661-version-negotiation]
+ssl_conf = 661-version-negotiation-ssl
+
+[661-version-negotiation-ssl]
+server = 661-version-negotiation-server
+client = 661-version-negotiation-client
+
+[661-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = SSLv3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[661-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-661]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[662-version-negotiation]
+ssl_conf = 662-version-negotiation-ssl
+
+[662-version-negotiation-ssl]
+server = 662-version-negotiation-server
+client = 662-version-negotiation-client
+
+[662-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[662-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-662]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[663-version-negotiation]
+ssl_conf = 663-version-negotiation-ssl
+
+[663-version-negotiation-ssl]
+server = 663-version-negotiation-server
+client = 663-version-negotiation-client
+
+[663-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[663-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-663]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[664-version-negotiation]
+ssl_conf = 664-version-negotiation-ssl
+
+[664-version-negotiation-ssl]
+server = 664-version-negotiation-server
+client = 664-version-negotiation-client
+
+[664-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[664-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-664]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[665-version-negotiation]
+ssl_conf = 665-version-negotiation-ssl
+
+[665-version-negotiation-ssl]
+server = 665-version-negotiation-server
+client = 665-version-negotiation-client
+
+[665-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[665-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-665]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[666-version-negotiation]
+ssl_conf = 666-version-negotiation-ssl
+
+[666-version-negotiation-ssl]
+server = 666-version-negotiation-server
+client = 666-version-negotiation-client
+
+[666-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[666-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-666]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[667-version-negotiation]
+ssl_conf = 667-version-negotiation-ssl
+
+[667-version-negotiation-ssl]
+server = 667-version-negotiation-server
+client = 667-version-negotiation-client
+
+[667-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[667-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-667]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[668-version-negotiation]
+ssl_conf = 668-version-negotiation-ssl
+
+[668-version-negotiation-ssl]
+server = 668-version-negotiation-server
+client = 668-version-negotiation-client
+
+[668-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[668-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-668]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[669-version-negotiation]
+ssl_conf = 669-version-negotiation-ssl
+
+[669-version-negotiation-ssl]
+server = 669-version-negotiation-server
+client = 669-version-negotiation-client
+
+[669-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[669-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-669]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[670-version-negotiation]
+ssl_conf = 670-version-negotiation-ssl
+
+[670-version-negotiation-ssl]
+server = 670-version-negotiation-server
+client = 670-version-negotiation-client
+
+[670-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[670-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-670]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[671-version-negotiation]
+ssl_conf = 671-version-negotiation-ssl
+
+[671-version-negotiation-ssl]
+server = 671-version-negotiation-server
+client = 671-version-negotiation-client
+
+[671-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[671-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-671]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[672-version-negotiation]
+ssl_conf = 672-version-negotiation-ssl
+
+[672-version-negotiation-ssl]
+server = 672-version-negotiation-server
+client = 672-version-negotiation-client
+
+[672-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[672-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-672]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[673-version-negotiation]
+ssl_conf = 673-version-negotiation-ssl
+
+[673-version-negotiation-ssl]
+server = 673-version-negotiation-server
+client = 673-version-negotiation-client
+
+[673-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[673-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-673]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[674-version-negotiation]
+ssl_conf = 674-version-negotiation-ssl
+
+[674-version-negotiation-ssl]
+server = 674-version-negotiation-server
+client = 674-version-negotiation-client
+
+[674-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[674-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-674]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[675-version-negotiation]
+ssl_conf = 675-version-negotiation-ssl
+
+[675-version-negotiation-ssl]
+server = 675-version-negotiation-server
+client = 675-version-negotiation-client
+
+[675-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[675-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-675]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[676-ciphersuite-sanity-check-client]
+ssl_conf = 676-ciphersuite-sanity-check-client-ssl
+
+[676-ciphersuite-sanity-check-client-ssl]
+server = 676-ciphersuite-sanity-check-client-server
+client = 676-ciphersuite-sanity-check-client-client
+
+[676-ciphersuite-sanity-check-client-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[676-ciphersuite-sanity-check-client-client]
+CipherString = AES128-SHA
+Ciphersuites =
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-676]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[677-ciphersuite-sanity-check-server]
+ssl_conf = 677-ciphersuite-sanity-check-server-ssl
+
+[677-ciphersuite-sanity-check-server-ssl]
+server = 677-ciphersuite-sanity-check-server-server
+client = 677-ciphersuite-sanity-check-server-client
+
+[677-ciphersuite-sanity-check-server-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = AES128-SHA
+Ciphersuites =
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[677-ciphersuite-sanity-check-server-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-677]
+ExpectedResult = ServerFail
+
+
diff --git a/test/ssl-tests/02-protocol-version.cnf.in b/test/ssl-tests/02-protocol-version.cnf.in
new file mode 100644
index 000000000000..ac71fc65a302
--- /dev/null
+++ b/test/ssl-tests/02-protocol-version.cnf.in
@@ -0,0 +1,21 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test TLS version negotiation
+
+package ssltests;
+
+use strict;
+use warnings;
+
+use protocol_version;
+
+our $fips_mode;
+
+our @tests = generate_version_tests("TLS", $fips_mode);
diff --git a/test/ssl-tests/03-custom_verify.cnf b/test/ssl-tests/03-custom_verify.cnf
new file mode 100644
index 000000000000..e107b93b5b3f
--- /dev/null
+++ b/test/ssl-tests/03-custom_verify.cnf
@@ -0,0 +1,266 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 10
+
+test-0 = 0-verify-success
+test-1 = 1-verify-custom-reject
+test-2 = 2-verify-custom-allow
+test-3 = 3-verify-custom-retry
+test-4 = 4-noverify-success
+test-5 = 5-noverify-ignore-custom-reject
+test-6 = 6-noverify-accept-custom-allow
+test-7 = 7-verify-fail-no-root
+test-8 = 8-verify-custom-success-no-root
+test-9 = 9-verify-custom-fail-no-root
+# ===========================================================
+
+[0-verify-success]
+ssl_conf = 0-verify-success-ssl
+
+[0-verify-success-ssl]
+server = 0-verify-success-server
+client = 0-verify-success-client
+
+[0-verify-success-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-verify-success-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[1-verify-custom-reject]
+ssl_conf = 1-verify-custom-reject-ssl
+
+[1-verify-custom-reject-ssl]
+server = 1-verify-custom-reject-server
+client = 1-verify-custom-reject-client
+
+[1-verify-custom-reject-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-verify-custom-reject-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedClientAlert = HandshakeFailure
+ExpectedResult = ClientFail
+client = 1-verify-custom-reject-client-extra
+
+[1-verify-custom-reject-client-extra]
+VerifyCallback = RejectAll
+
+
+# ===========================================================
+
+[2-verify-custom-allow]
+ssl_conf = 2-verify-custom-allow-ssl
+
+[2-verify-custom-allow-ssl]
+server = 2-verify-custom-allow-server
+client = 2-verify-custom-allow-client
+
+[2-verify-custom-allow-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-verify-custom-allow-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+client = 2-verify-custom-allow-client-extra
+
+[2-verify-custom-allow-client-extra]
+VerifyCallback = AcceptAll
+
+
+# ===========================================================
+
+[3-verify-custom-retry]
+ssl_conf = 3-verify-custom-retry-ssl
+
+[3-verify-custom-retry-ssl]
+server = 3-verify-custom-retry-server
+client = 3-verify-custom-retry-client
+
+[3-verify-custom-retry-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-verify-custom-retry-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+client = 3-verify-custom-retry-client-extra
+
+[3-verify-custom-retry-client-extra]
+VerifyCallback = RetryOnce
+
+
+# ===========================================================
+
+[4-noverify-success]
+ssl_conf = 4-noverify-success-ssl
+
+[4-noverify-success-ssl]
+server = 4-noverify-success-server
+client = 4-noverify-success-client
+
+[4-noverify-success-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-noverify-success-client]
+CipherString = DEFAULT
+
+[test-4]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[5-noverify-ignore-custom-reject]
+ssl_conf = 5-noverify-ignore-custom-reject-ssl
+
+[5-noverify-ignore-custom-reject-ssl]
+server = 5-noverify-ignore-custom-reject-server
+client = 5-noverify-ignore-custom-reject-client
+
+[5-noverify-ignore-custom-reject-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-noverify-ignore-custom-reject-client]
+CipherString = DEFAULT
+
+[test-5]
+ExpectedResult = Success
+client = 5-noverify-ignore-custom-reject-client-extra
+
+[5-noverify-ignore-custom-reject-client-extra]
+VerifyCallback = RejectAll
+
+
+# ===========================================================
+
+[6-noverify-accept-custom-allow]
+ssl_conf = 6-noverify-accept-custom-allow-ssl
+
+[6-noverify-accept-custom-allow-ssl]
+server = 6-noverify-accept-custom-allow-server
+client = 6-noverify-accept-custom-allow-client
+
+[6-noverify-accept-custom-allow-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-noverify-accept-custom-allow-client]
+CipherString = DEFAULT
+
+[test-6]
+ExpectedResult = Success
+client = 6-noverify-accept-custom-allow-client-extra
+
+[6-noverify-accept-custom-allow-client-extra]
+VerifyCallback = AcceptAll
+
+
+# ===========================================================
+
+[7-verify-fail-no-root]
+ssl_conf = 7-verify-fail-no-root-ssl
+
+[7-verify-fail-no-root-ssl]
+server = 7-verify-fail-no-root-server
+client = 7-verify-fail-no-root-client
+
+[7-verify-fail-no-root-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-verify-fail-no-root-client]
+CipherString = DEFAULT
+VerifyMode = Peer
+
+[test-7]
+ExpectedClientAlert = UnknownCA
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[8-verify-custom-success-no-root]
+ssl_conf = 8-verify-custom-success-no-root-ssl
+
+[8-verify-custom-success-no-root-ssl]
+server = 8-verify-custom-success-no-root-server
+client = 8-verify-custom-success-no-root-client
+
+[8-verify-custom-success-no-root-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-verify-custom-success-no-root-client]
+CipherString = DEFAULT
+VerifyMode = Peer
+
+[test-8]
+ExpectedResult = Success
+client = 8-verify-custom-success-no-root-client-extra
+
+[8-verify-custom-success-no-root-client-extra]
+VerifyCallback = AcceptAll
+
+
+# ===========================================================
+
+[9-verify-custom-fail-no-root]
+ssl_conf = 9-verify-custom-fail-no-root-ssl
+
+[9-verify-custom-fail-no-root-ssl]
+server = 9-verify-custom-fail-no-root-server
+client = 9-verify-custom-fail-no-root-client
+
+[9-verify-custom-fail-no-root-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-verify-custom-fail-no-root-client]
+CipherString = DEFAULT
+VerifyMode = Peer
+
+[test-9]
+ExpectedClientAlert = HandshakeFailure
+ExpectedResult = ClientFail
+client = 9-verify-custom-fail-no-root-client-extra
+
+[9-verify-custom-fail-no-root-client-extra]
+VerifyCallback = RejectAll
+
+
diff --git a/test/ssl-tests/03-custom_verify.cnf.in b/test/ssl-tests/03-custom_verify.cnf.in
new file mode 100644
index 000000000000..a68862e72671
--- /dev/null
+++ b/test/ssl-tests/03-custom_verify.cnf.in
@@ -0,0 +1,159 @@
+# -*- mode: perl; -*-
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+## SSL test configurations
+
+package ssltests;
+
+our @tests = (
+
+ # Sanity-check that verification indeed succeeds without the
+ # restrictive callback.
+ {
+ name => "verify-success",
+ server => { },
+ client => { },
+ test => { "ExpectedResult" => "Success" },
+ },
+
+ # Same test as above but with a custom callback that always fails.
+ {
+ name => "verify-custom-reject",
+ server => { },
+ client => {
+ extra => {
+ "VerifyCallback" => "RejectAll",
+ },
+ },
+ test => {
+ "ExpectedResult" => "ClientFail",
+ "ExpectedClientAlert" => "HandshakeFailure",
+ },
+ },
+
+ # Same test as above but with a custom callback that always succeeds.
+ {
+ name => "verify-custom-allow",
+ server => { },
+ client => {
+ extra => {
+ "VerifyCallback" => "AcceptAll",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+
+ # Same test as above but with a custom callback that requests retry once.
+ {
+ name => "verify-custom-retry",
+ server => { },
+ client => {
+ extra => {
+ "VerifyCallback" => "RetryOnce",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+
+ # Sanity-check that verification indeed succeeds if peer verification
+ # is not requested.
+ {
+ name => "noverify-success",
+ server => { },
+ client => {
+ "VerifyMode" => undef,
+ "VerifyCAFile" => undef,
+ },
+ test => { "ExpectedResult" => "Success" },
+ },
+
+ # Same test as above but with a custom callback that always fails.
+ # The callback return has no impact on handshake success in this mode.
+ {
+ name => "noverify-ignore-custom-reject",
+ server => { },
+ client => {
+ "VerifyMode" => undef,
+ "VerifyCAFile" => undef,
+ extra => {
+ "VerifyCallback" => "RejectAll",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+
+ # Same test as above but with a custom callback that always succeeds.
+ # The callback return has no impact on handshake success in this mode.
+ {
+ name => "noverify-accept-custom-allow",
+ server => { },
+ client => {
+ "VerifyMode" => undef,
+ "VerifyCAFile" => undef,
+ extra => {
+ "VerifyCallback" => "AcceptAll",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+
+ # Sanity-check that verification indeed fails without the
+ # permissive callback.
+ {
+ name => "verify-fail-no-root",
+ server => { },
+ client => {
+ # Don't set up the client root file.
+ "VerifyCAFile" => undef,
+ },
+ test => {
+ "ExpectedResult" => "ClientFail",
+ "ExpectedClientAlert" => "UnknownCA",
+ },
+ },
+
+ # Same test as above but with a custom callback that always succeeds.
+ {
+ name => "verify-custom-success-no-root",
+ server => { },
+ client => {
+ "VerifyCAFile" => undef,
+ extra => {
+ "VerifyCallback" => "AcceptAll",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success"
+ },
+ },
+
+ # Same test as above but with a custom callback that always fails.
+ {
+ name => "verify-custom-fail-no-root",
+ server => { },
+ client => {
+ "VerifyCAFile" => undef,
+ extra => {
+ "VerifyCallback" => "RejectAll",
+ },
+ },
+ test => {
+ "ExpectedResult" => "ClientFail",
+ "ExpectedClientAlert" => "HandshakeFailure",
+ },
+ },
+);
diff --git a/test/ssl-tests/04-client_auth.cnf b/test/ssl-tests/04-client_auth.cnf
new file mode 100644
index 000000000000..46e61cd882d3
--- /dev/null
+++ b/test/ssl-tests/04-client_auth.cnf
@@ -0,0 +1,1132 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 36
+
+test-0 = 0-server-auth-flex
+test-1 = 1-client-auth-flex-request
+test-2 = 2-client-auth-flex-require-fail
+test-3 = 3-client-auth-flex-require
+test-4 = 4-client-auth-flex-require-non-empty-names
+test-5 = 5-client-auth-flex-noroot
+test-6 = 6-server-auth-TLSv1
+test-7 = 7-client-auth-TLSv1-request
+test-8 = 8-client-auth-TLSv1-require-fail
+test-9 = 9-client-auth-TLSv1-require
+test-10 = 10-client-auth-TLSv1-require-non-empty-names
+test-11 = 11-client-auth-TLSv1-noroot
+test-12 = 12-server-auth-TLSv1.1
+test-13 = 13-client-auth-TLSv1.1-request
+test-14 = 14-client-auth-TLSv1.1-require-fail
+test-15 = 15-client-auth-TLSv1.1-require
+test-16 = 16-client-auth-TLSv1.1-require-non-empty-names
+test-17 = 17-client-auth-TLSv1.1-noroot
+test-18 = 18-server-auth-TLSv1.2
+test-19 = 19-client-auth-TLSv1.2-request
+test-20 = 20-client-auth-TLSv1.2-require-fail
+test-21 = 21-client-auth-TLSv1.2-require
+test-22 = 22-client-auth-TLSv1.2-require-non-empty-names
+test-23 = 23-client-auth-TLSv1.2-noroot
+test-24 = 24-server-auth-DTLSv1
+test-25 = 25-client-auth-DTLSv1-request
+test-26 = 26-client-auth-DTLSv1-require-fail
+test-27 = 27-client-auth-DTLSv1-require
+test-28 = 28-client-auth-DTLSv1-require-non-empty-names
+test-29 = 29-client-auth-DTLSv1-noroot
+test-30 = 30-server-auth-DTLSv1.2
+test-31 = 31-client-auth-DTLSv1.2-request
+test-32 = 32-client-auth-DTLSv1.2-require-fail
+test-33 = 33-client-auth-DTLSv1.2-require
+test-34 = 34-client-auth-DTLSv1.2-require-non-empty-names
+test-35 = 35-client-auth-DTLSv1.2-noroot
+# ===========================================================
+
+[0-server-auth-flex]
+ssl_conf = 0-server-auth-flex-ssl
+
+[0-server-auth-flex-ssl]
+server = 0-server-auth-flex-server
+client = 0-server-auth-flex-client
+
+[0-server-auth-flex-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-server-auth-flex-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[1-client-auth-flex-request]
+ssl_conf = 1-client-auth-flex-request-ssl
+
+[1-client-auth-flex-request-ssl]
+server = 1-client-auth-flex-request-server
+client = 1-client-auth-flex-request-client
+
+[1-client-auth-flex-request-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Request
+
+[1-client-auth-flex-request-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[2-client-auth-flex-require-fail]
+ssl_conf = 2-client-auth-flex-require-fail-ssl
+
+[2-client-auth-flex-require-fail-ssl]
+server = 2-client-auth-flex-require-fail-server
+client = 2-client-auth-flex-require-fail-client
+
+[2-client-auth-flex-require-fail-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[2-client-auth-flex-require-fail-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = ServerFail
+ExpectedServerAlert = CertificateRequired
+
+
+# ===========================================================
+
+[3-client-auth-flex-require]
+ssl_conf = 3-client-auth-flex-require-ssl
+
+[3-client-auth-flex-require-ssl]
+server = 3-client-auth-flex-require-server
+client = 3-client-auth-flex-require-client
+
+[3-client-auth-flex-require-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[3-client-auth-flex-require-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedClientCANames = empty
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[4-client-auth-flex-require-non-empty-names]
+ssl_conf = 4-client-auth-flex-require-non-empty-names-ssl
+
+[4-client-auth-flex-require-non-empty-names-ssl]
+server = 4-client-auth-flex-require-non-empty-names-server
+client = 4-client-auth-flex-require-non-empty-names-client
+
+[4-client-auth-flex-require-non-empty-names-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+ClientCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[4-client-auth-flex-require-non-empty-names-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedClientCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[5-client-auth-flex-noroot]
+ssl_conf = 5-client-auth-flex-noroot-ssl
+
+[5-client-auth-flex-noroot-ssl]
+server = 5-client-auth-flex-noroot-server
+client = 5-client-auth-flex-noroot-client
+
+[5-client-auth-flex-noroot-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Require
+
+[5-client-auth-flex-noroot-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnknownCA
+
+
+# ===========================================================
+
+[6-server-auth-TLSv1]
+ssl_conf = 6-server-auth-TLSv1-ssl
+
+[6-server-auth-TLSv1-ssl]
+server = 6-server-auth-TLSv1-server
+client = 6-server-auth-TLSv1-client
+
+[6-server-auth-TLSv1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-server-auth-TLSv1-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[7-client-auth-TLSv1-request]
+ssl_conf = 7-client-auth-TLSv1-request-ssl
+
+[7-client-auth-TLSv1-request-ssl]
+server = 7-client-auth-TLSv1-request-server
+client = 7-client-auth-TLSv1-request-client
+
+[7-client-auth-TLSv1-request-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Request
+
+[7-client-auth-TLSv1-request-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[8-client-auth-TLSv1-require-fail]
+ssl_conf = 8-client-auth-TLSv1-require-fail-ssl
+
+[8-client-auth-TLSv1-require-fail-ssl]
+server = 8-client-auth-TLSv1-require-fail-server
+client = 8-client-auth-TLSv1-require-fail-client
+
+[8-client-auth-TLSv1-require-fail-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[8-client-auth-TLSv1-require-fail-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedResult = ServerFail
+ExpectedServerAlert = HandshakeFailure
+
+
+# ===========================================================
+
+[9-client-auth-TLSv1-require]
+ssl_conf = 9-client-auth-TLSv1-require-ssl
+
+[9-client-auth-TLSv1-require-ssl]
+server = 9-client-auth-TLSv1-require-server
+client = 9-client-auth-TLSv1-require-client
+
+[9-client-auth-TLSv1-require-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[9-client-auth-TLSv1-require-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedClientCANames = empty
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[10-client-auth-TLSv1-require-non-empty-names]
+ssl_conf = 10-client-auth-TLSv1-require-non-empty-names-ssl
+
+[10-client-auth-TLSv1-require-non-empty-names-ssl]
+server = 10-client-auth-TLSv1-require-non-empty-names-server
+client = 10-client-auth-TLSv1-require-non-empty-names-client
+
+[10-client-auth-TLSv1-require-non-empty-names-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+ClientCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[10-client-auth-TLSv1-require-non-empty-names-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedClientCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[11-client-auth-TLSv1-noroot]
+ssl_conf = 11-client-auth-TLSv1-noroot-ssl
+
+[11-client-auth-TLSv1-noroot-ssl]
+server = 11-client-auth-TLSv1-noroot-server
+client = 11-client-auth-TLSv1-noroot-client
+
+[11-client-auth-TLSv1-noroot-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Require
+
+[11-client-auth-TLSv1-noroot-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnknownCA
+
+
+# ===========================================================
+
+[12-server-auth-TLSv1.1]
+ssl_conf = 12-server-auth-TLSv1.1-ssl
+
+[12-server-auth-TLSv1.1-ssl]
+server = 12-server-auth-TLSv1.1-server
+client = 12-server-auth-TLSv1.1-client
+
+[12-server-auth-TLSv1.1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-server-auth-TLSv1.1-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[13-client-auth-TLSv1.1-request]
+ssl_conf = 13-client-auth-TLSv1.1-request-ssl
+
+[13-client-auth-TLSv1.1-request-ssl]
+server = 13-client-auth-TLSv1.1-request-server
+client = 13-client-auth-TLSv1.1-request-client
+
+[13-client-auth-TLSv1.1-request-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Request
+
+[13-client-auth-TLSv1.1-request-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[14-client-auth-TLSv1.1-require-fail]
+ssl_conf = 14-client-auth-TLSv1.1-require-fail-ssl
+
+[14-client-auth-TLSv1.1-require-fail-ssl]
+server = 14-client-auth-TLSv1.1-require-fail-server
+client = 14-client-auth-TLSv1.1-require-fail-client
+
+[14-client-auth-TLSv1.1-require-fail-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[14-client-auth-TLSv1.1-require-fail-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedResult = ServerFail
+ExpectedServerAlert = HandshakeFailure
+
+
+# ===========================================================
+
+[15-client-auth-TLSv1.1-require]
+ssl_conf = 15-client-auth-TLSv1.1-require-ssl
+
+[15-client-auth-TLSv1.1-require-ssl]
+server = 15-client-auth-TLSv1.1-require-server
+client = 15-client-auth-TLSv1.1-require-client
+
+[15-client-auth-TLSv1.1-require-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[15-client-auth-TLSv1.1-require-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedClientCANames = empty
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[16-client-auth-TLSv1.1-require-non-empty-names]
+ssl_conf = 16-client-auth-TLSv1.1-require-non-empty-names-ssl
+
+[16-client-auth-TLSv1.1-require-non-empty-names-ssl]
+server = 16-client-auth-TLSv1.1-require-non-empty-names-server
+client = 16-client-auth-TLSv1.1-require-non-empty-names-client
+
+[16-client-auth-TLSv1.1-require-non-empty-names-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+ClientCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[16-client-auth-TLSv1.1-require-non-empty-names-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-16]
+ExpectedClientCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[17-client-auth-TLSv1.1-noroot]
+ssl_conf = 17-client-auth-TLSv1.1-noroot-ssl
+
+[17-client-auth-TLSv1.1-noroot-ssl]
+server = 17-client-auth-TLSv1.1-noroot-server
+client = 17-client-auth-TLSv1.1-noroot-client
+
+[17-client-auth-TLSv1.1-noroot-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Require
+
+[17-client-auth-TLSv1.1-noroot-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-17]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnknownCA
+
+
+# ===========================================================
+
+[18-server-auth-TLSv1.2]
+ssl_conf = 18-server-auth-TLSv1.2-ssl
+
+[18-server-auth-TLSv1.2-ssl]
+server = 18-server-auth-TLSv1.2-server
+client = 18-server-auth-TLSv1.2-client
+
+[18-server-auth-TLSv1.2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-server-auth-TLSv1.2-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-18]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[19-client-auth-TLSv1.2-request]
+ssl_conf = 19-client-auth-TLSv1.2-request-ssl
+
+[19-client-auth-TLSv1.2-request-ssl]
+server = 19-client-auth-TLSv1.2-request-server
+client = 19-client-auth-TLSv1.2-request-client
+
+[19-client-auth-TLSv1.2-request-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Request
+
+[19-client-auth-TLSv1.2-request-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-19]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[20-client-auth-TLSv1.2-require-fail]
+ssl_conf = 20-client-auth-TLSv1.2-require-fail-ssl
+
+[20-client-auth-TLSv1.2-require-fail-ssl]
+server = 20-client-auth-TLSv1.2-require-fail-server
+client = 20-client-auth-TLSv1.2-require-fail-client
+
+[20-client-auth-TLSv1.2-require-fail-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[20-client-auth-TLSv1.2-require-fail-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-20]
+ExpectedResult = ServerFail
+ExpectedServerAlert = HandshakeFailure
+
+
+# ===========================================================
+
+[21-client-auth-TLSv1.2-require]
+ssl_conf = 21-client-auth-TLSv1.2-require-ssl
+
+[21-client-auth-TLSv1.2-require-ssl]
+server = 21-client-auth-TLSv1.2-require-server
+client = 21-client-auth-TLSv1.2-require-client
+
+[21-client-auth-TLSv1.2-require-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+ClientSignatureAlgorithms = SHA256+RSA
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[21-client-auth-TLSv1.2-require-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-21]
+ExpectedClientCANames = empty
+ExpectedClientCertType = RSA
+ExpectedClientSignHash = SHA256
+ExpectedClientSignType = RSA
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[22-client-auth-TLSv1.2-require-non-empty-names]
+ssl_conf = 22-client-auth-TLSv1.2-require-non-empty-names-ssl
+
+[22-client-auth-TLSv1.2-require-non-empty-names-ssl]
+server = 22-client-auth-TLSv1.2-require-non-empty-names-server
+client = 22-client-auth-TLSv1.2-require-non-empty-names-client
+
+[22-client-auth-TLSv1.2-require-non-empty-names-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+ClientCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ClientSignatureAlgorithms = SHA256+RSA
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[22-client-auth-TLSv1.2-require-non-empty-names-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-22]
+ExpectedClientCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedClientCertType = RSA
+ExpectedClientSignHash = SHA256
+ExpectedClientSignType = RSA
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[23-client-auth-TLSv1.2-noroot]
+ssl_conf = 23-client-auth-TLSv1.2-noroot-ssl
+
+[23-client-auth-TLSv1.2-noroot-ssl]
+server = 23-client-auth-TLSv1.2-noroot-server
+client = 23-client-auth-TLSv1.2-noroot-client
+
+[23-client-auth-TLSv1.2-noroot-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Require
+
+[23-client-auth-TLSv1.2-noroot-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-23]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnknownCA
+
+
+# ===========================================================
+
+[24-server-auth-DTLSv1]
+ssl_conf = 24-server-auth-DTLSv1-ssl
+
+[24-server-auth-DTLSv1-ssl]
+server = 24-server-auth-DTLSv1-server
+client = 24-server-auth-DTLSv1-client
+
+[24-server-auth-DTLSv1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[24-server-auth-DTLSv1-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-24]
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[25-client-auth-DTLSv1-request]
+ssl_conf = 25-client-auth-DTLSv1-request-ssl
+
+[25-client-auth-DTLSv1-request-ssl]
+server = 25-client-auth-DTLSv1-request-server
+client = 25-client-auth-DTLSv1-request-client
+
+[25-client-auth-DTLSv1-request-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Request
+
+[25-client-auth-DTLSv1-request-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-25]
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[26-client-auth-DTLSv1-require-fail]
+ssl_conf = 26-client-auth-DTLSv1-require-fail-ssl
+
+[26-client-auth-DTLSv1-require-fail-ssl]
+server = 26-client-auth-DTLSv1-require-fail-server
+client = 26-client-auth-DTLSv1-require-fail-client
+
+[26-client-auth-DTLSv1-require-fail-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[26-client-auth-DTLSv1-require-fail-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-26]
+ExpectedResult = ServerFail
+ExpectedServerAlert = HandshakeFailure
+Method = DTLS
+
+
+# ===========================================================
+
+[27-client-auth-DTLSv1-require]
+ssl_conf = 27-client-auth-DTLSv1-require-ssl
+
+[27-client-auth-DTLSv1-require-ssl]
+server = 27-client-auth-DTLSv1-require-server
+client = 27-client-auth-DTLSv1-require-client
+
+[27-client-auth-DTLSv1-require-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[27-client-auth-DTLSv1-require-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-27]
+ExpectedClientCANames = empty
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[28-client-auth-DTLSv1-require-non-empty-names]
+ssl_conf = 28-client-auth-DTLSv1-require-non-empty-names-ssl
+
+[28-client-auth-DTLSv1-require-non-empty-names-ssl]
+server = 28-client-auth-DTLSv1-require-non-empty-names-server
+client = 28-client-auth-DTLSv1-require-non-empty-names-client
+
+[28-client-auth-DTLSv1-require-non-empty-names-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+ClientCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[28-client-auth-DTLSv1-require-non-empty-names-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-28]
+ExpectedClientCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[29-client-auth-DTLSv1-noroot]
+ssl_conf = 29-client-auth-DTLSv1-noroot-ssl
+
+[29-client-auth-DTLSv1-noroot-ssl]
+server = 29-client-auth-DTLSv1-noroot-server
+client = 29-client-auth-DTLSv1-noroot-client
+
+[29-client-auth-DTLSv1-noroot-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Require
+
+[29-client-auth-DTLSv1-noroot-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-29]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnknownCA
+Method = DTLS
+
+
+# ===========================================================
+
+[30-server-auth-DTLSv1.2]
+ssl_conf = 30-server-auth-DTLSv1.2-ssl
+
+[30-server-auth-DTLSv1.2-ssl]
+server = 30-server-auth-DTLSv1.2-server
+client = 30-server-auth-DTLSv1.2-client
+
+[30-server-auth-DTLSv1.2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[30-server-auth-DTLSv1.2-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-30]
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[31-client-auth-DTLSv1.2-request]
+ssl_conf = 31-client-auth-DTLSv1.2-request-ssl
+
+[31-client-auth-DTLSv1.2-request-ssl]
+server = 31-client-auth-DTLSv1.2-request-server
+client = 31-client-auth-DTLSv1.2-request-client
+
+[31-client-auth-DTLSv1.2-request-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Request
+
+[31-client-auth-DTLSv1.2-request-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-31]
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[32-client-auth-DTLSv1.2-require-fail]
+ssl_conf = 32-client-auth-DTLSv1.2-require-fail-ssl
+
+[32-client-auth-DTLSv1.2-require-fail-ssl]
+server = 32-client-auth-DTLSv1.2-require-fail-server
+client = 32-client-auth-DTLSv1.2-require-fail-client
+
+[32-client-auth-DTLSv1.2-require-fail-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[32-client-auth-DTLSv1.2-require-fail-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-32]
+ExpectedResult = ServerFail
+ExpectedServerAlert = HandshakeFailure
+Method = DTLS
+
+
+# ===========================================================
+
+[33-client-auth-DTLSv1.2-require]
+ssl_conf = 33-client-auth-DTLSv1.2-require-ssl
+
+[33-client-auth-DTLSv1.2-require-ssl]
+server = 33-client-auth-DTLSv1.2-require-server
+client = 33-client-auth-DTLSv1.2-require-client
+
+[33-client-auth-DTLSv1.2-require-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[33-client-auth-DTLSv1.2-require-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-33]
+ExpectedClientCANames = empty
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[34-client-auth-DTLSv1.2-require-non-empty-names]
+ssl_conf = 34-client-auth-DTLSv1.2-require-non-empty-names-ssl
+
+[34-client-auth-DTLSv1.2-require-non-empty-names-ssl]
+server = 34-client-auth-DTLSv1.2-require-non-empty-names-server
+client = 34-client-auth-DTLSv1.2-require-non-empty-names-client
+
+[34-client-auth-DTLSv1.2-require-non-empty-names-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+ClientCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[34-client-auth-DTLSv1.2-require-non-empty-names-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-34]
+ExpectedClientCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedClientCertType = RSA
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[35-client-auth-DTLSv1.2-noroot]
+ssl_conf = 35-client-auth-DTLSv1.2-noroot-ssl
+
+[35-client-auth-DTLSv1.2-noroot-ssl]
+server = 35-client-auth-DTLSv1.2-noroot-server
+client = 35-client-auth-DTLSv1.2-noroot-client
+
+[35-client-auth-DTLSv1.2-noroot-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Require
+
+[35-client-auth-DTLSv1.2-noroot-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-35]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnknownCA
+Method = DTLS
+
+
diff --git a/test/ssl-tests/04-client_auth.cnf.in b/test/ssl-tests/04-client_auth.cnf.in
new file mode 100644
index 000000000000..d908ad1c7df6
--- /dev/null
+++ b/test/ssl-tests/04-client_auth.cnf.in
@@ -0,0 +1,218 @@
+# -*- mode: perl; -*-
+
+## SSL test configurations
+
+package ssltests;
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils qw(anydisabled disabled);
+setup("no_test_here");
+
+our $fips_mode;
+
+my @protocols;
+my @is_disabled = (0);
+
+# We test version-flexible negotiation (undef) and each protocol version.
+if ($fips_mode) {
+ @protocols = (undef, "TLSv1.2", "DTLSv1.2");
+ push @is_disabled, anydisabled("tls1_2", "dtls1_2");
+} else {
+ @protocols = (undef, "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "DTLSv1", "DTLSv1.2");
+ push @is_disabled, anydisabled("ssl3", "tls1", "tls1_1", "tls1_2", "dtls1", "dtls1_2");
+}
+
+our @tests = ();
+
+sub generate_tests() {
+ foreach (0..$#protocols) {
+ my $protocol = $protocols[$_];
+ my $protocol_name = $protocol || "flex";
+ my $caalert;
+ my $method;
+ my $sctpenabled = 0;
+ if (!$is_disabled[$_]) {
+ if ($protocol_name eq "SSLv3") {
+ $caalert = "BadCertificate";
+ } else {
+ $caalert = "UnknownCA";
+ }
+ if ($protocol_name =~ m/^DTLS/) {
+ $method = "DTLS";
+ $sctpenabled = 1 if !disabled("sctp");
+ }
+ my $clihash;
+ my $clisigtype;
+ my $clisigalgs;
+ # TODO(TLS1.3) add TLSv1.3 versions
+ if ($protocol_name eq "TLSv1.2") {
+ $clihash = "SHA256";
+ $clisigtype = "RSA";
+ $clisigalgs = "SHA256+RSA";
+ }
+ for (my $sctp = 0; $sctp <= $sctpenabled; $sctp++) {
+ # Sanity-check simple handshake.
+ push @tests, {
+ name => "server-auth-${protocol_name}"
+ .($sctp ? "-sctp" : ""),
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "Method" => $method,
+ },
+ };
+ $tests[-1]{"test"}{"UseSCTP"} = "Yes" if $sctp;
+
+ # Handshake with client cert requested but not required or received.
+ push @tests, {
+ name => "client-auth-${protocol_name}-request"
+ .($sctp ? "-sctp" : ""),
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol,
+ "VerifyMode" => "Request"
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "Method" => $method,
+ },
+ };
+ $tests[-1]{"test"}{"UseSCTP"} = "Yes" if $sctp;
+
+ # Handshake with client cert required but not present.
+ push @tests, {
+ name => "client-auth-${protocol_name}-require-fail"
+ .($sctp ? "-sctp" : ""),
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol,
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require",
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "ExpectedServerAlert" =>
+ ($protocol_name eq "flex"
+ && !disabled("tls1_3")
+ && (!disabled("ec") || !disabled("dh")))
+ ? "CertificateRequired" : "HandshakeFailure",
+ "Method" => $method,
+ },
+ };
+ $tests[-1]{"test"}{"UseSCTP"} = "Yes" if $sctp;
+
+ # Successful handshake with client authentication.
+ push @tests, {
+ name => "client-auth-${protocol_name}-require"
+ .($sctp ? "-sctp" : ""),
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol,
+ "ClientSignatureAlgorithms" => $clisigalgs,
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Request",
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol,
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "ExpectedClientCertType" => "RSA",
+ "ExpectedClientSignType" => $clisigtype,
+ "ExpectedClientSignHash" => $clihash,
+ "ExpectedClientCANames" => "empty",
+ "Method" => $method,
+ },
+ };
+ $tests[-1]{"test"}{"UseSCTP"} = "Yes" if $sctp;
+
+ # Successful handshake with client authentication non-empty names
+ push @tests, {
+ name => "client-auth-${protocol_name}-require-non-empty-names"
+ .($sctp ? "-sctp" : ""),
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol,
+ "ClientSignatureAlgorithms" => $clisigalgs,
+ "ClientCAFile" => test_pem("root-cert.pem"),
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Request",
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol,
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "ExpectedClientCertType" => "RSA",
+ "ExpectedClientSignType" => $clisigtype,
+ "ExpectedClientSignHash" => $clihash,
+ "ExpectedClientCANames" => test_pem("root-cert.pem"),
+ "Method" => $method,
+ },
+ };
+ $tests[-1]{"test"}{"UseSCTP"} = "Yes" if $sctp;
+
+ # Handshake with client authentication but without the root certificate.
+ push @tests, {
+ name => "client-auth-${protocol_name}-noroot"
+ .($sctp ? "-sctp" : ""),
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol,
+ "VerifyMode" => "Require",
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocol,
+ "MaxProtocol" => $protocol,
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "ExpectedServerAlert" => $caalert,
+ "Method" => $method,
+ },
+ };
+ $tests[-1]{"test"}{"UseSCTP"} = "Yes" if $sctp;
+ }
+ }
+ }
+}
+
+generate_tests();
diff --git a/test/ssl-tests/05-sni.cnf b/test/ssl-tests/05-sni.cnf
new file mode 100644
index 000000000000..c3712c06f249
--- /dev/null
+++ b/test/ssl-tests/05-sni.cnf
@@ -0,0 +1,308 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 9
+
+test-0 = 0-SNI-switch-context
+test-1 = 1-SNI-keep-context
+test-2 = 2-SNI-no-server-support
+test-3 = 3-SNI-no-client-support
+test-4 = 4-SNI-bad-sni-ignore-mismatch
+test-5 = 5-SNI-bad-sni-reject-mismatch
+test-6 = 6-SNI-bad-clienthello-sni-ignore-mismatch
+test-7 = 7-SNI-bad-clienthello-sni-reject-mismatch
+test-8 = 8-SNI-clienthello-disable-v12
+# ===========================================================
+
+[0-SNI-switch-context]
+ssl_conf = 0-SNI-switch-context-ssl
+
+[0-SNI-switch-context-ssl]
+server = 0-SNI-switch-context-server
+client = 0-SNI-switch-context-client
+server2 = 0-SNI-switch-context-server
+
+[0-SNI-switch-context-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-SNI-switch-context-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+ExpectedServerName = server2
+server = 0-SNI-switch-context-server-extra
+server2 = 0-SNI-switch-context-server-extra
+client = 0-SNI-switch-context-client-extra
+
+[0-SNI-switch-context-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[0-SNI-switch-context-client-extra]
+ServerName = server2
+
+
+# ===========================================================
+
+[1-SNI-keep-context]
+ssl_conf = 1-SNI-keep-context-ssl
+
+[1-SNI-keep-context-ssl]
+server = 1-SNI-keep-context-server
+client = 1-SNI-keep-context-client
+server2 = 1-SNI-keep-context-server
+
+[1-SNI-keep-context-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-SNI-keep-context-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+ExpectedServerName = server1
+server = 1-SNI-keep-context-server-extra
+server2 = 1-SNI-keep-context-server-extra
+client = 1-SNI-keep-context-client-extra
+
+[1-SNI-keep-context-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[1-SNI-keep-context-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[2-SNI-no-server-support]
+ssl_conf = 2-SNI-no-server-support-ssl
+
+[2-SNI-no-server-support-ssl]
+server = 2-SNI-no-server-support-server
+client = 2-SNI-no-server-support-client
+
+[2-SNI-no-server-support-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-SNI-no-server-support-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+client = 2-SNI-no-server-support-client-extra
+
+[2-SNI-no-server-support-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[3-SNI-no-client-support]
+ssl_conf = 3-SNI-no-client-support-ssl
+
+[3-SNI-no-client-support-ssl]
+server = 3-SNI-no-client-support-server
+client = 3-SNI-no-client-support-client
+server2 = 3-SNI-no-client-support-server
+
+[3-SNI-no-client-support-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-SNI-no-client-support-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+ExpectedServerName = server1
+server = 3-SNI-no-client-support-server-extra
+server2 = 3-SNI-no-client-support-server-extra
+
+[3-SNI-no-client-support-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+
+# ===========================================================
+
+[4-SNI-bad-sni-ignore-mismatch]
+ssl_conf = 4-SNI-bad-sni-ignore-mismatch-ssl
+
+[4-SNI-bad-sni-ignore-mismatch-ssl]
+server = 4-SNI-bad-sni-ignore-mismatch-server
+client = 4-SNI-bad-sni-ignore-mismatch-client
+server2 = 4-SNI-bad-sni-ignore-mismatch-server
+
+[4-SNI-bad-sni-ignore-mismatch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-SNI-bad-sni-ignore-mismatch-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = Success
+ExpectedServerName = server1
+server = 4-SNI-bad-sni-ignore-mismatch-server-extra
+server2 = 4-SNI-bad-sni-ignore-mismatch-server-extra
+client = 4-SNI-bad-sni-ignore-mismatch-client-extra
+
+[4-SNI-bad-sni-ignore-mismatch-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[4-SNI-bad-sni-ignore-mismatch-client-extra]
+ServerName = invalid
+
+
+# ===========================================================
+
+[5-SNI-bad-sni-reject-mismatch]
+ssl_conf = 5-SNI-bad-sni-reject-mismatch-ssl
+
+[5-SNI-bad-sni-reject-mismatch-ssl]
+server = 5-SNI-bad-sni-reject-mismatch-server
+client = 5-SNI-bad-sni-reject-mismatch-client
+server2 = 5-SNI-bad-sni-reject-mismatch-server
+
+[5-SNI-bad-sni-reject-mismatch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-SNI-bad-sni-reject-mismatch-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnrecognizedName
+server = 5-SNI-bad-sni-reject-mismatch-server-extra
+server2 = 5-SNI-bad-sni-reject-mismatch-server-extra
+client = 5-SNI-bad-sni-reject-mismatch-client-extra
+
+[5-SNI-bad-sni-reject-mismatch-server-extra]
+ServerNameCallback = RejectMismatch
+
+[5-SNI-bad-sni-reject-mismatch-client-extra]
+ServerName = invalid
+
+
+# ===========================================================
+
+[6-SNI-bad-clienthello-sni-ignore-mismatch]
+ssl_conf = 6-SNI-bad-clienthello-sni-ignore-mismatch-ssl
+
+[6-SNI-bad-clienthello-sni-ignore-mismatch-ssl]
+server = 6-SNI-bad-clienthello-sni-ignore-mismatch-server
+client = 6-SNI-bad-clienthello-sni-ignore-mismatch-client
+server2 = 6-SNI-bad-clienthello-sni-ignore-mismatch-server
+
+[6-SNI-bad-clienthello-sni-ignore-mismatch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-SNI-bad-clienthello-sni-ignore-mismatch-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = Success
+ExpectedServerName = server1
+server = 6-SNI-bad-clienthello-sni-ignore-mismatch-server-extra
+server2 = 6-SNI-bad-clienthello-sni-ignore-mismatch-server-extra
+client = 6-SNI-bad-clienthello-sni-ignore-mismatch-client-extra
+
+[6-SNI-bad-clienthello-sni-ignore-mismatch-server-extra]
+ServerNameCallback = ClientHelloIgnoreMismatch
+
+[6-SNI-bad-clienthello-sni-ignore-mismatch-client-extra]
+ServerName = invalid
+
+
+# ===========================================================
+
+[7-SNI-bad-clienthello-sni-reject-mismatch]
+ssl_conf = 7-SNI-bad-clienthello-sni-reject-mismatch-ssl
+
+[7-SNI-bad-clienthello-sni-reject-mismatch-ssl]
+server = 7-SNI-bad-clienthello-sni-reject-mismatch-server
+client = 7-SNI-bad-clienthello-sni-reject-mismatch-client
+server2 = 7-SNI-bad-clienthello-sni-reject-mismatch-server
+
+[7-SNI-bad-clienthello-sni-reject-mismatch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-SNI-bad-clienthello-sni-reject-mismatch-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnrecognizedName
+server = 7-SNI-bad-clienthello-sni-reject-mismatch-server-extra
+server2 = 7-SNI-bad-clienthello-sni-reject-mismatch-server-extra
+client = 7-SNI-bad-clienthello-sni-reject-mismatch-client-extra
+
+[7-SNI-bad-clienthello-sni-reject-mismatch-server-extra]
+ServerNameCallback = ClientHelloRejectMismatch
+
+[7-SNI-bad-clienthello-sni-reject-mismatch-client-extra]
+ServerName = invalid
+
+
+# ===========================================================
+
+[8-SNI-clienthello-disable-v12]
+ssl_conf = 8-SNI-clienthello-disable-v12-ssl
+
+[8-SNI-clienthello-disable-v12-ssl]
+server = 8-SNI-clienthello-disable-v12-server
+client = 8-SNI-clienthello-disable-v12-client
+server2 = 8-SNI-clienthello-disable-v12-server
+
+[8-SNI-clienthello-disable-v12-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-SNI-clienthello-disable-v12-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedProtocol = TLSv1.1
+ExpectedServerName = server2
+server = 8-SNI-clienthello-disable-v12-server-extra
+server2 = 8-SNI-clienthello-disable-v12-server-extra
+client = 8-SNI-clienthello-disable-v12-client-extra
+
+[8-SNI-clienthello-disable-v12-server-extra]
+ServerNameCallback = ClientHelloNoV12
+
+[8-SNI-clienthello-disable-v12-client-extra]
+ServerName = server2
+
+
diff --git a/test/ssl-tests/05-sni.cnf.in b/test/ssl-tests/05-sni.cnf.in
new file mode 100644
index 000000000000..4a09348635c2
--- /dev/null
+++ b/test/ssl-tests/05-sni.cnf.in
@@ -0,0 +1,173 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## SSL test configurations
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our $fips_mode;
+
+our @tests = (
+ {
+ name => "SNI-switch-context",
+ server => {
+ extra => {
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ client => {
+ extra => {
+ "ServerName" => "server2",
+ },
+ },
+ test => {
+ "ExpectedServerName" => "server2",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "SNI-keep-context",
+ server => {
+ extra => {
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ client => {
+ extra => {
+ "ServerName" => "server1",
+ },
+ },
+ test => {
+ "ExpectedServerName" => "server1",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "SNI-no-server-support",
+ server => { },
+ client => {
+ extra => {
+ "ServerName" => "server1",
+ },
+ },
+ test => { "ExpectedResult" => "Success" },
+ },
+ {
+ name => "SNI-no-client-support",
+ server => {
+ extra => {
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ client => { },
+ test => {
+ # We expect that the callback is still called
+ # to let the application decide whether they tolerate
+ # missing SNI (as our test callback does).
+ "ExpectedServerName" => "server1",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "SNI-bad-sni-ignore-mismatch",
+ server => {
+ extra => {
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ client => {
+ extra => {
+ "ServerName" => "invalid",
+ },
+ },
+ test => {
+ "ExpectedServerName" => "server1",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "SNI-bad-sni-reject-mismatch",
+ server => {
+ extra => {
+ "ServerNameCallback" => "RejectMismatch",
+ },
+ },
+ client => {
+ extra => {
+ "ServerName" => "invalid",
+ },
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "ExpectedServerAlert" => "UnrecognizedName"
+ },
+ },
+ {
+ name => "SNI-bad-clienthello-sni-ignore-mismatch",
+ server => {
+ extra => {
+ "ServerNameCallback" => "ClientHelloIgnoreMismatch",
+ },
+ },
+ client => {
+ extra => {
+ "ServerName" => "invalid",
+ },
+ },
+ test => {
+ "ExpectedServerName" => "server1",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "SNI-bad-clienthello-sni-reject-mismatch",
+ server => {
+ extra => {
+ "ServerNameCallback" => "ClientHelloRejectMismatch",
+ },
+ },
+ client => {
+ extra => {
+ "ServerName" => "invalid",
+ },
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "ExpectedServerAlert" => "UnrecognizedName"
+ },
+ },
+);
+
+our @tests_tls_1_1 = (
+ {
+ name => "SNI-clienthello-disable-v12",
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ extra => {
+ "ServerNameCallback" => "ClientHelloNoV12",
+ },
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ extra => {
+ "ServerName" => "server2",
+ },
+ },
+ test => {
+ "ExpectedProtocol" => "TLSv1.1",
+ "ExpectedServerName" => "server2",
+ },
+ },
+);
+
+push @tests, @tests_tls_1_1 unless disabled("tls1_1") || $fips_mode;
diff --git a/test/ssl-tests/06-sni-ticket.cnf b/test/ssl-tests/06-sni-ticket.cnf
new file mode 100644
index 000000000000..a3a9c78f06a2
--- /dev/null
+++ b/test/ssl-tests/06-sni-ticket.cnf
@@ -0,0 +1,767 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 17
+
+test-0 = 0-sni-session-ticket
+test-1 = 1-sni-session-ticket
+test-2 = 2-sni-session-ticket
+test-3 = 3-sni-session-ticket
+test-4 = 4-sni-session-ticket
+test-5 = 5-sni-session-ticket
+test-6 = 6-sni-session-ticket
+test-7 = 7-sni-session-ticket
+test-8 = 8-sni-session-ticket
+test-9 = 9-sni-session-ticket
+test-10 = 10-sni-session-ticket
+test-11 = 11-sni-session-ticket
+test-12 = 12-sni-session-ticket
+test-13 = 13-sni-session-ticket
+test-14 = 14-sni-session-ticket
+test-15 = 15-sni-session-ticket
+test-16 = 16-sni-session-ticket
+# ===========================================================
+
+[0-sni-session-ticket]
+ssl_conf = 0-sni-session-ticket-ssl
+
+[0-sni-session-ticket-ssl]
+server = 0-sni-session-ticket-server
+client = 0-sni-session-ticket-client
+server2 = 0-sni-session-ticket-server2
+
+[0-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+SessionTicketExpected = No
+server = 0-sni-session-ticket-server-extra
+client = 0-sni-session-ticket-client-extra
+
+[0-sni-session-ticket-server-extra]
+BrokenSessionTicket = Yes
+
+[0-sni-session-ticket-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[1-sni-session-ticket]
+ssl_conf = 1-sni-session-ticket-ssl
+
+[1-sni-session-ticket-ssl]
+server = 1-sni-session-ticket-server
+client = 1-sni-session-ticket-client
+server2 = 1-sni-session-ticket-server2
+
+[1-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+ExpectedServerName = server1
+SessionIdExpected = Yes
+SessionTicketExpected = Yes
+server = 1-sni-session-ticket-server-extra
+client = 1-sni-session-ticket-client-extra
+
+[1-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[1-sni-session-ticket-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[2-sni-session-ticket]
+ssl_conf = 2-sni-session-ticket-ssl
+
+[2-sni-session-ticket-ssl]
+server = 2-sni-session-ticket-server
+client = 2-sni-session-ticket-client
+server2 = 2-sni-session-ticket-server2
+
+[2-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+ExpectedServerName = server2
+SessionIdExpected = Yes
+SessionTicketExpected = Yes
+server = 2-sni-session-ticket-server-extra
+client = 2-sni-session-ticket-client-extra
+
+[2-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[2-sni-session-ticket-client-extra]
+ServerName = server2
+
+
+# ===========================================================
+
+[3-sni-session-ticket]
+ssl_conf = 3-sni-session-ticket-ssl
+
+[3-sni-session-ticket-ssl]
+server = 3-sni-session-ticket-server
+client = 3-sni-session-ticket-client
+server2 = 3-sni-session-ticket-server2
+
+[3-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+ExpectedServerName = server1
+SessionIdExpected = Yes
+SessionTicketExpected = Yes
+server = 3-sni-session-ticket-server-extra
+client = 3-sni-session-ticket-client-extra
+
+[3-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[3-sni-session-ticket-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[4-sni-session-ticket]
+ssl_conf = 4-sni-session-ticket-ssl
+
+[4-sni-session-ticket-ssl]
+server = 4-sni-session-ticket-server
+client = 4-sni-session-ticket-client
+server2 = 4-sni-session-ticket-server2
+
+[4-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = Success
+ExpectedServerName = server2
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 4-sni-session-ticket-server-extra
+client = 4-sni-session-ticket-client-extra
+
+[4-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[4-sni-session-ticket-client-extra]
+ServerName = server2
+
+
+# ===========================================================
+
+[5-sni-session-ticket]
+ssl_conf = 5-sni-session-ticket-ssl
+
+[5-sni-session-ticket-ssl]
+server = 5-sni-session-ticket-server
+client = 5-sni-session-ticket-client
+server2 = 5-sni-session-ticket-server2
+
+[5-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = Success
+ExpectedServerName = server1
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 5-sni-session-ticket-server-extra
+client = 5-sni-session-ticket-client-extra
+
+[5-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[5-sni-session-ticket-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[6-sni-session-ticket]
+ssl_conf = 6-sni-session-ticket-ssl
+
+[6-sni-session-ticket-ssl]
+server = 6-sni-session-ticket-server
+client = 6-sni-session-ticket-client
+server2 = 6-sni-session-ticket-server2
+
+[6-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = Success
+ExpectedServerName = server2
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 6-sni-session-ticket-server-extra
+client = 6-sni-session-ticket-client-extra
+
+[6-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[6-sni-session-ticket-client-extra]
+ServerName = server2
+
+
+# ===========================================================
+
+[7-sni-session-ticket]
+ssl_conf = 7-sni-session-ticket-ssl
+
+[7-sni-session-ticket-ssl]
+server = 7-sni-session-ticket-server
+client = 7-sni-session-ticket-client
+server2 = 7-sni-session-ticket-server2
+
+[7-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = Success
+ExpectedServerName = server1
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 7-sni-session-ticket-server-extra
+client = 7-sni-session-ticket-client-extra
+
+[7-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[7-sni-session-ticket-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[8-sni-session-ticket]
+ssl_conf = 8-sni-session-ticket-ssl
+
+[8-sni-session-ticket-ssl]
+server = 8-sni-session-ticket-server
+client = 8-sni-session-ticket-client
+server2 = 8-sni-session-ticket-server2
+
+[8-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedResult = Success
+ExpectedServerName = server2
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 8-sni-session-ticket-server-extra
+client = 8-sni-session-ticket-client-extra
+
+[8-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[8-sni-session-ticket-client-extra]
+ServerName = server2
+
+
+# ===========================================================
+
+[9-sni-session-ticket]
+ssl_conf = 9-sni-session-ticket-ssl
+
+[9-sni-session-ticket-ssl]
+server = 9-sni-session-ticket-server
+client = 9-sni-session-ticket-client
+server2 = 9-sni-session-ticket-server2
+
+[9-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedResult = Success
+ExpectedServerName = server1
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 9-sni-session-ticket-server-extra
+client = 9-sni-session-ticket-client-extra
+
+[9-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[9-sni-session-ticket-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[10-sni-session-ticket]
+ssl_conf = 10-sni-session-ticket-ssl
+
+[10-sni-session-ticket-ssl]
+server = 10-sni-session-ticket-server
+client = 10-sni-session-ticket-client
+server2 = 10-sni-session-ticket-server2
+
+[10-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedResult = Success
+ExpectedServerName = server2
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 10-sni-session-ticket-server-extra
+client = 10-sni-session-ticket-client-extra
+
+[10-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[10-sni-session-ticket-client-extra]
+ServerName = server2
+
+
+# ===========================================================
+
+[11-sni-session-ticket]
+ssl_conf = 11-sni-session-ticket-ssl
+
+[11-sni-session-ticket-ssl]
+server = 11-sni-session-ticket-server
+client = 11-sni-session-ticket-client
+server2 = 11-sni-session-ticket-server2
+
+[11-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedResult = Success
+ExpectedServerName = server1
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 11-sni-session-ticket-server-extra
+client = 11-sni-session-ticket-client-extra
+
+[11-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[11-sni-session-ticket-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[12-sni-session-ticket]
+ssl_conf = 12-sni-session-ticket-ssl
+
+[12-sni-session-ticket-ssl]
+server = 12-sni-session-ticket-server
+client = 12-sni-session-ticket-client
+server2 = 12-sni-session-ticket-server2
+
+[12-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedResult = Success
+ExpectedServerName = server2
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 12-sni-session-ticket-server-extra
+client = 12-sni-session-ticket-client-extra
+
+[12-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[12-sni-session-ticket-client-extra]
+ServerName = server2
+
+
+# ===========================================================
+
+[13-sni-session-ticket]
+ssl_conf = 13-sni-session-ticket-ssl
+
+[13-sni-session-ticket-ssl]
+server = 13-sni-session-ticket-server
+client = 13-sni-session-ticket-client
+server2 = 13-sni-session-ticket-server2
+
+[13-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedResult = Success
+ExpectedServerName = server1
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 13-sni-session-ticket-server-extra
+client = 13-sni-session-ticket-client-extra
+
+[13-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[13-sni-session-ticket-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[14-sni-session-ticket]
+ssl_conf = 14-sni-session-ticket-ssl
+
+[14-sni-session-ticket-ssl]
+server = 14-sni-session-ticket-server
+client = 14-sni-session-ticket-client
+server2 = 14-sni-session-ticket-server2
+
+[14-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedResult = Success
+ExpectedServerName = server2
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 14-sni-session-ticket-server-extra
+client = 14-sni-session-ticket-client-extra
+
+[14-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[14-sni-session-ticket-client-extra]
+ServerName = server2
+
+
+# ===========================================================
+
+[15-sni-session-ticket]
+ssl_conf = 15-sni-session-ticket-ssl
+
+[15-sni-session-ticket-ssl]
+server = 15-sni-session-ticket-server
+client = 15-sni-session-ticket-client
+server2 = 15-sni-session-ticket-server2
+
+[15-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedResult = Success
+ExpectedServerName = server1
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 15-sni-session-ticket-server-extra
+client = 15-sni-session-ticket-client-extra
+
+[15-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[15-sni-session-ticket-client-extra]
+ServerName = server1
+
+
+# ===========================================================
+
+[16-sni-session-ticket]
+ssl_conf = 16-sni-session-ticket-ssl
+
+[16-sni-session-ticket-ssl]
+server = 16-sni-session-ticket-server
+client = 16-sni-session-ticket-client
+server2 = 16-sni-session-ticket-server2
+
+[16-sni-session-ticket-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-sni-session-ticket-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-sni-session-ticket-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-16]
+ExpectedResult = Success
+ExpectedServerName = server2
+SessionIdExpected = Yes
+SessionTicketExpected = No
+server = 16-sni-session-ticket-server-extra
+client = 16-sni-session-ticket-client-extra
+
+[16-sni-session-ticket-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[16-sni-session-ticket-client-extra]
+ServerName = server2
+
+
diff --git a/test/ssl-tests/06-sni-ticket.cnf.in b/test/ssl-tests/06-sni-ticket.cnf.in
new file mode 100644
index 000000000000..3b82c83409dc
--- /dev/null
+++ b/test/ssl-tests/06-sni-ticket.cnf.in
@@ -0,0 +1,101 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test SNI/Session tickets
+
+use strict;
+use warnings;
+
+package ssltests;
+
+
+our @tests = ();
+
+#Note: MaxProtocol is set to TLSv1.2 as session tickets work differently in
+#TLSv1.3.
+sub generate_tests() {
+ foreach my $c ("SessionTicket", "-SessionTicket") {
+ foreach my $s1 ("SessionTicket", "-SessionTicket") {
+ foreach my $s2 ("SessionTicket", "-SessionTicket") {
+ foreach my $n ("server1", "server2") {
+ my $ticket_result = expected_result($c, $s1, $s2, $n);
+ my $session_id_result = "Yes"; # always, even with a ticket
+ push @tests, {
+ "name" => "sni-session-ticket",
+ "client" => {
+ "Options" => $c,
+ "extra" => {
+ "ServerName" => $n,
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ "server" => {
+ "Options" => $s1,
+ "extra" => {
+ # We don't test mismatch here.
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ "server2" => {
+ "Options" => $s2,
+ },
+ "test" => {
+ "ExpectedServerName" => $n,
+ "ExpectedResult" => "Success",
+ "SessionIdExpected" => $session_id_result,
+ "SessionTicketExpected" => $ticket_result,
+ }
+ };
+ }
+ }
+ }
+ }
+}
+
+# If the client has session tickets disabled, then No support
+# If the server initial_ctx has session tickets disabled, then No support
+# If SNI is in use, then if the "switched-to" context has session tickets disabled,
+# then No support
+sub expected_result {
+ my ($c, $s1, $s2, $n) = @_;
+
+ return "No" if $c eq "-SessionTicket";
+ return "No" if $s1 eq "-SessionTicket";
+ return "No" if ($s2 eq "-SessionTicket" && $n eq "server2");
+
+ return "Yes";
+
+}
+
+# Add a "Broken" case.
+push @tests, {
+ "name" => "sni-session-ticket",
+ "client" => {
+ "MaxProtocol" => "TLSv1.2",
+ "Options" => "SessionTicket",
+ "extra" => {
+ "ServerName" => "server1",
+ }
+ },
+ "server" => {
+ "Options" => "SessionTicket",
+ "extra" => {
+ "BrokenSessionTicket" => "Yes",
+ },
+ },
+ "server2" => {
+ "Options" => "SessionTicket",
+ },
+ "test" => {
+ "ExpectedResult" => "Success",
+ "SessionTicketExpected" => "No",
+ }
+};
+
+generate_tests();
diff --git a/test/ssl-tests/07-dtls-protocol-version.cnf b/test/ssl-tests/07-dtls-protocol-version.cnf
new file mode 100644
index 000000000000..100036b3d1fc
--- /dev/null
+++ b/test/ssl-tests/07-dtls-protocol-version.cnf
@@ -0,0 +1,1820 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 64
+
+test-0 = 0-version-negotiation
+test-1 = 1-version-negotiation
+test-2 = 2-version-negotiation
+test-3 = 3-version-negotiation
+test-4 = 4-version-negotiation
+test-5 = 5-version-negotiation
+test-6 = 6-version-negotiation
+test-7 = 7-version-negotiation
+test-8 = 8-version-negotiation
+test-9 = 9-version-negotiation
+test-10 = 10-version-negotiation
+test-11 = 11-version-negotiation
+test-12 = 12-version-negotiation
+test-13 = 13-version-negotiation
+test-14 = 14-version-negotiation
+test-15 = 15-version-negotiation
+test-16 = 16-version-negotiation
+test-17 = 17-version-negotiation
+test-18 = 18-version-negotiation
+test-19 = 19-version-negotiation
+test-20 = 20-version-negotiation
+test-21 = 21-version-negotiation
+test-22 = 22-version-negotiation
+test-23 = 23-version-negotiation
+test-24 = 24-version-negotiation
+test-25 = 25-version-negotiation
+test-26 = 26-version-negotiation
+test-27 = 27-version-negotiation
+test-28 = 28-version-negotiation
+test-29 = 29-version-negotiation
+test-30 = 30-version-negotiation
+test-31 = 31-version-negotiation
+test-32 = 32-version-negotiation
+test-33 = 33-version-negotiation
+test-34 = 34-version-negotiation
+test-35 = 35-version-negotiation
+test-36 = 36-version-negotiation
+test-37 = 37-version-negotiation
+test-38 = 38-version-negotiation
+test-39 = 39-version-negotiation
+test-40 = 40-version-negotiation
+test-41 = 41-version-negotiation
+test-42 = 42-version-negotiation
+test-43 = 43-version-negotiation
+test-44 = 44-version-negotiation
+test-45 = 45-version-negotiation
+test-46 = 46-version-negotiation
+test-47 = 47-version-negotiation
+test-48 = 48-version-negotiation
+test-49 = 49-version-negotiation
+test-50 = 50-version-negotiation
+test-51 = 51-version-negotiation
+test-52 = 52-version-negotiation
+test-53 = 53-version-negotiation
+test-54 = 54-version-negotiation
+test-55 = 55-version-negotiation
+test-56 = 56-version-negotiation
+test-57 = 57-version-negotiation
+test-58 = 58-version-negotiation
+test-59 = 59-version-negotiation
+test-60 = 60-version-negotiation
+test-61 = 61-version-negotiation
+test-62 = 62-version-negotiation
+test-63 = 63-version-negotiation
+# ===========================================================
+
+[0-version-negotiation]
+ssl_conf = 0-version-negotiation-ssl
+
+[0-version-negotiation-ssl]
+server = 0-version-negotiation-server
+client = 0-version-negotiation-client
+
+[0-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[1-version-negotiation]
+ssl_conf = 1-version-negotiation-ssl
+
+[1-version-negotiation-ssl]
+server = 1-version-negotiation-server
+client = 1-version-negotiation-client
+
+[1-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[2-version-negotiation]
+ssl_conf = 2-version-negotiation-ssl
+
+[2-version-negotiation-ssl]
+server = 2-version-negotiation-server
+client = 2-version-negotiation-client
+
+[2-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[3-version-negotiation]
+ssl_conf = 3-version-negotiation-ssl
+
+[3-version-negotiation-ssl]
+server = 3-version-negotiation-server
+client = 3-version-negotiation-client
+
+[3-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[4-version-negotiation]
+ssl_conf = 4-version-negotiation-ssl
+
+[4-version-negotiation-ssl]
+server = 4-version-negotiation-server
+client = 4-version-negotiation-client
+
+[4-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[5-version-negotiation]
+ssl_conf = 5-version-negotiation-ssl
+
+[5-version-negotiation-ssl]
+server = 5-version-negotiation-server
+client = 5-version-negotiation-client
+
+[5-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[6-version-negotiation]
+ssl_conf = 6-version-negotiation-ssl
+
+[6-version-negotiation-ssl]
+server = 6-version-negotiation-server
+client = 6-version-negotiation-client
+
+[6-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = ServerFail
+Method = DTLS
+
+
+# ===========================================================
+
+[7-version-negotiation]
+ssl_conf = 7-version-negotiation-ssl
+
+[7-version-negotiation-ssl]
+server = 7-version-negotiation-server
+client = 7-version-negotiation-client
+
+[7-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = ServerFail
+Method = DTLS
+
+
+# ===========================================================
+
+[8-version-negotiation]
+ssl_conf = 8-version-negotiation-ssl
+
+[8-version-negotiation-ssl]
+server = 8-version-negotiation-server
+client = 8-version-negotiation-client
+
+[8-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[9-version-negotiation]
+ssl_conf = 9-version-negotiation-ssl
+
+[9-version-negotiation-ssl]
+server = 9-version-negotiation-server
+client = 9-version-negotiation-client
+
+[9-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[10-version-negotiation]
+ssl_conf = 10-version-negotiation-ssl
+
+[10-version-negotiation-ssl]
+server = 10-version-negotiation-server
+client = 10-version-negotiation-client
+
+[10-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[11-version-negotiation]
+ssl_conf = 11-version-negotiation-ssl
+
+[11-version-negotiation-ssl]
+server = 11-version-negotiation-server
+client = 11-version-negotiation-client
+
+[11-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[12-version-negotiation]
+ssl_conf = 12-version-negotiation-ssl
+
+[12-version-negotiation-ssl]
+server = 12-version-negotiation-server
+client = 12-version-negotiation-client
+
+[12-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[13-version-negotiation]
+ssl_conf = 13-version-negotiation-ssl
+
+[13-version-negotiation-ssl]
+server = 13-version-negotiation-server
+client = 13-version-negotiation-client
+
+[13-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[14-version-negotiation]
+ssl_conf = 14-version-negotiation-ssl
+
+[14-version-negotiation-ssl]
+server = 14-version-negotiation-server
+client = 14-version-negotiation-client
+
+[14-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[15-version-negotiation]
+ssl_conf = 15-version-negotiation-ssl
+
+[15-version-negotiation-ssl]
+server = 15-version-negotiation-server
+client = 15-version-negotiation-client
+
+[15-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[16-version-negotiation]
+ssl_conf = 16-version-negotiation-ssl
+
+[16-version-negotiation-ssl]
+server = 16-version-negotiation-server
+client = 16-version-negotiation-client
+
+[16-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-16]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[17-version-negotiation]
+ssl_conf = 17-version-negotiation-ssl
+
+[17-version-negotiation-ssl]
+server = 17-version-negotiation-server
+client = 17-version-negotiation-client
+
+[17-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[17-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-17]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[18-version-negotiation]
+ssl_conf = 18-version-negotiation-ssl
+
+[18-version-negotiation-ssl]
+server = 18-version-negotiation-server
+client = 18-version-negotiation-client
+
+[18-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-18]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[19-version-negotiation]
+ssl_conf = 19-version-negotiation-ssl
+
+[19-version-negotiation-ssl]
+server = 19-version-negotiation-server
+client = 19-version-negotiation-client
+
+[19-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[19-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-19]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[20-version-negotiation]
+ssl_conf = 20-version-negotiation-ssl
+
+[20-version-negotiation-ssl]
+server = 20-version-negotiation-server
+client = 20-version-negotiation-client
+
+[20-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[20-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-20]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[21-version-negotiation]
+ssl_conf = 21-version-negotiation-ssl
+
+[21-version-negotiation-ssl]
+server = 21-version-negotiation-server
+client = 21-version-negotiation-client
+
+[21-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[21-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-21]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[22-version-negotiation]
+ssl_conf = 22-version-negotiation-ssl
+
+[22-version-negotiation-ssl]
+server = 22-version-negotiation-server
+client = 22-version-negotiation-client
+
+[22-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[22-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-22]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[23-version-negotiation]
+ssl_conf = 23-version-negotiation-ssl
+
+[23-version-negotiation-ssl]
+server = 23-version-negotiation-server
+client = 23-version-negotiation-client
+
+[23-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[23-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-23]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[24-version-negotiation]
+ssl_conf = 24-version-negotiation-ssl
+
+[24-version-negotiation-ssl]
+server = 24-version-negotiation-server
+client = 24-version-negotiation-client
+
+[24-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[24-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-24]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[25-version-negotiation]
+ssl_conf = 25-version-negotiation-ssl
+
+[25-version-negotiation-ssl]
+server = 25-version-negotiation-server
+client = 25-version-negotiation-client
+
+[25-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[25-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-25]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[26-version-negotiation]
+ssl_conf = 26-version-negotiation-ssl
+
+[26-version-negotiation-ssl]
+server = 26-version-negotiation-server
+client = 26-version-negotiation-client
+
+[26-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[26-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-26]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[27-version-negotiation]
+ssl_conf = 27-version-negotiation-ssl
+
+[27-version-negotiation-ssl]
+server = 27-version-negotiation-server
+client = 27-version-negotiation-client
+
+[27-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[27-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-27]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[28-version-negotiation]
+ssl_conf = 28-version-negotiation-ssl
+
+[28-version-negotiation-ssl]
+server = 28-version-negotiation-server
+client = 28-version-negotiation-client
+
+[28-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[28-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-28]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[29-version-negotiation]
+ssl_conf = 29-version-negotiation-ssl
+
+[29-version-negotiation-ssl]
+server = 29-version-negotiation-server
+client = 29-version-negotiation-client
+
+[29-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[29-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-29]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[30-version-negotiation]
+ssl_conf = 30-version-negotiation-ssl
+
+[30-version-negotiation-ssl]
+server = 30-version-negotiation-server
+client = 30-version-negotiation-client
+
+[30-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[30-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-30]
+ExpectedResult = ServerFail
+Method = DTLS
+
+
+# ===========================================================
+
+[31-version-negotiation]
+ssl_conf = 31-version-negotiation-ssl
+
+[31-version-negotiation-ssl]
+server = 31-version-negotiation-server
+client = 31-version-negotiation-client
+
+[31-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[31-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-31]
+ExpectedResult = ServerFail
+Method = DTLS
+
+
+# ===========================================================
+
+[32-version-negotiation]
+ssl_conf = 32-version-negotiation-ssl
+
+[32-version-negotiation-ssl]
+server = 32-version-negotiation-server
+client = 32-version-negotiation-client
+
+[32-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[32-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-32]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[33-version-negotiation]
+ssl_conf = 33-version-negotiation-ssl
+
+[33-version-negotiation-ssl]
+server = 33-version-negotiation-server
+client = 33-version-negotiation-client
+
+[33-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[33-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-33]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[34-version-negotiation]
+ssl_conf = 34-version-negotiation-ssl
+
+[34-version-negotiation-ssl]
+server = 34-version-negotiation-server
+client = 34-version-negotiation-client
+
+[34-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[34-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-34]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[35-version-negotiation]
+ssl_conf = 35-version-negotiation-ssl
+
+[35-version-negotiation-ssl]
+server = 35-version-negotiation-server
+client = 35-version-negotiation-client
+
+[35-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[35-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-35]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[36-version-negotiation]
+ssl_conf = 36-version-negotiation-ssl
+
+[36-version-negotiation-ssl]
+server = 36-version-negotiation-server
+client = 36-version-negotiation-client
+
+[36-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[36-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-36]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[37-version-negotiation]
+ssl_conf = 37-version-negotiation-ssl
+
+[37-version-negotiation-ssl]
+server = 37-version-negotiation-server
+client = 37-version-negotiation-client
+
+[37-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[37-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-37]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[38-version-negotiation]
+ssl_conf = 38-version-negotiation-ssl
+
+[38-version-negotiation-ssl]
+server = 38-version-negotiation-server
+client = 38-version-negotiation-client
+
+[38-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[38-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-38]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[39-version-negotiation]
+ssl_conf = 39-version-negotiation-ssl
+
+[39-version-negotiation-ssl]
+server = 39-version-negotiation-server
+client = 39-version-negotiation-client
+
+[39-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[39-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-39]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[40-version-negotiation]
+ssl_conf = 40-version-negotiation-ssl
+
+[40-version-negotiation-ssl]
+server = 40-version-negotiation-server
+client = 40-version-negotiation-client
+
+[40-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[40-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-40]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[41-version-negotiation]
+ssl_conf = 41-version-negotiation-ssl
+
+[41-version-negotiation-ssl]
+server = 41-version-negotiation-server
+client = 41-version-negotiation-client
+
+[41-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[41-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-41]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[42-version-negotiation]
+ssl_conf = 42-version-negotiation-ssl
+
+[42-version-negotiation-ssl]
+server = 42-version-negotiation-server
+client = 42-version-negotiation-client
+
+[42-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[42-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-42]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[43-version-negotiation]
+ssl_conf = 43-version-negotiation-ssl
+
+[43-version-negotiation-ssl]
+server = 43-version-negotiation-server
+client = 43-version-negotiation-client
+
+[43-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[43-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-43]
+ExpectedProtocol = DTLSv1
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[44-version-negotiation]
+ssl_conf = 44-version-negotiation-ssl
+
+[44-version-negotiation-ssl]
+server = 44-version-negotiation-server
+client = 44-version-negotiation-client
+
+[44-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[44-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-44]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[45-version-negotiation]
+ssl_conf = 45-version-negotiation-ssl
+
+[45-version-negotiation-ssl]
+server = 45-version-negotiation-server
+client = 45-version-negotiation-client
+
+[45-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[45-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-45]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[46-version-negotiation]
+ssl_conf = 46-version-negotiation-ssl
+
+[46-version-negotiation-ssl]
+server = 46-version-negotiation-server
+client = 46-version-negotiation-client
+
+[46-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[46-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-46]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[47-version-negotiation]
+ssl_conf = 47-version-negotiation-ssl
+
+[47-version-negotiation-ssl]
+server = 47-version-negotiation-server
+client = 47-version-negotiation-client
+
+[47-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[47-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-47]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[48-version-negotiation]
+ssl_conf = 48-version-negotiation-ssl
+
+[48-version-negotiation-ssl]
+server = 48-version-negotiation-server
+client = 48-version-negotiation-client
+
+[48-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[48-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-48]
+ExpectedResult = ClientFail
+Method = DTLS
+
+
+# ===========================================================
+
+[49-version-negotiation]
+ssl_conf = 49-version-negotiation-ssl
+
+[49-version-negotiation-ssl]
+server = 49-version-negotiation-server
+client = 49-version-negotiation-client
+
+[49-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[49-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-49]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[50-version-negotiation]
+ssl_conf = 50-version-negotiation-ssl
+
+[50-version-negotiation-ssl]
+server = 50-version-negotiation-server
+client = 50-version-negotiation-client
+
+[50-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[50-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-50]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[51-version-negotiation]
+ssl_conf = 51-version-negotiation-ssl
+
+[51-version-negotiation-ssl]
+server = 51-version-negotiation-server
+client = 51-version-negotiation-client
+
+[51-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[51-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-51]
+ExpectedResult = ClientFail
+Method = DTLS
+
+
+# ===========================================================
+
+[52-version-negotiation]
+ssl_conf = 52-version-negotiation-ssl
+
+[52-version-negotiation-ssl]
+server = 52-version-negotiation-server
+client = 52-version-negotiation-client
+
+[52-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[52-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-52]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[53-version-negotiation]
+ssl_conf = 53-version-negotiation-ssl
+
+[53-version-negotiation-ssl]
+server = 53-version-negotiation-server
+client = 53-version-negotiation-client
+
+[53-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[53-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-53]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[54-version-negotiation]
+ssl_conf = 54-version-negotiation-ssl
+
+[54-version-negotiation-ssl]
+server = 54-version-negotiation-server
+client = 54-version-negotiation-client
+
+[54-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[54-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-54]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[55-version-negotiation]
+ssl_conf = 55-version-negotiation-ssl
+
+[55-version-negotiation-ssl]
+server = 55-version-negotiation-server
+client = 55-version-negotiation-client
+
+[55-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[55-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-55]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[56-version-negotiation]
+ssl_conf = 56-version-negotiation-ssl
+
+[56-version-negotiation-ssl]
+server = 56-version-negotiation-server
+client = 56-version-negotiation-client
+
+[56-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[56-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-56]
+ExpectedResult = ClientFail
+Method = DTLS
+
+
+# ===========================================================
+
+[57-version-negotiation]
+ssl_conf = 57-version-negotiation-ssl
+
+[57-version-negotiation-ssl]
+server = 57-version-negotiation-server
+client = 57-version-negotiation-client
+
+[57-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[57-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-57]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[58-version-negotiation]
+ssl_conf = 58-version-negotiation-ssl
+
+[58-version-negotiation-ssl]
+server = 58-version-negotiation-server
+client = 58-version-negotiation-client
+
+[58-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[58-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-58]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[59-version-negotiation]
+ssl_conf = 59-version-negotiation-ssl
+
+[59-version-negotiation-ssl]
+server = 59-version-negotiation-server
+client = 59-version-negotiation-client
+
+[59-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[59-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-59]
+ExpectedResult = ClientFail
+Method = DTLS
+
+
+# ===========================================================
+
+[60-version-negotiation]
+ssl_conf = 60-version-negotiation-ssl
+
+[60-version-negotiation-ssl]
+server = 60-version-negotiation-server
+client = 60-version-negotiation-client
+
+[60-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[60-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-60]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[61-version-negotiation]
+ssl_conf = 61-version-negotiation-ssl
+
+[61-version-negotiation-ssl]
+server = 61-version-negotiation-server
+client = 61-version-negotiation-client
+
+[61-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[61-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-61]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[62-version-negotiation]
+ssl_conf = 62-version-negotiation-ssl
+
+[62-version-negotiation-ssl]
+server = 62-version-negotiation-server
+client = 62-version-negotiation-client
+
+[62-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[62-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-62]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
+# ===========================================================
+
+[63-version-negotiation]
+ssl_conf = 63-version-negotiation-ssl
+
+[63-version-negotiation-ssl]
+server = 63-version-negotiation-server
+client = 63-version-negotiation-client
+
+[63-version-negotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[63-version-negotiation-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-63]
+ExpectedProtocol = DTLSv1.2
+ExpectedResult = Success
+Method = DTLS
+
+
diff --git a/test/ssl-tests/07-dtls-protocol-version.cnf.in b/test/ssl-tests/07-dtls-protocol-version.cnf.in
new file mode 100644
index 000000000000..19c9c09eb339
--- /dev/null
+++ b/test/ssl-tests/07-dtls-protocol-version.cnf.in
@@ -0,0 +1,21 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test DTLS version negotiation
+
+package ssltests;
+
+use strict;
+use warnings;
+
+use protocol_version;
+
+our $fips_mode;
+
+our @tests = generate_version_tests("DTLS", $fips_mode);
diff --git a/test/ssl-tests/08-npn.cnf b/test/ssl-tests/08-npn.cnf
new file mode 100644
index 000000000000..f38b3f6975ce
--- /dev/null
+++ b/test/ssl-tests/08-npn.cnf
@@ -0,0 +1,816 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 20
+
+test-0 = 0-npn-simple
+test-1 = 1-npn-client-finds-match
+test-2 = 2-npn-client-honours-server-pref
+test-3 = 3-npn-client-first-pref-on-mismatch
+test-4 = 4-npn-no-server-support
+test-5 = 5-npn-no-client-support
+test-6 = 6-npn-with-sni-no-context-switch
+test-7 = 7-npn-with-sni-context-switch
+test-8 = 8-npn-selected-sni-server-supports-npn
+test-9 = 9-npn-selected-sni-server-does-not-support-npn
+test-10 = 10-alpn-preferred-over-npn
+test-11 = 11-sni-npn-preferred-over-alpn
+test-12 = 12-npn-simple-resumption
+test-13 = 13-npn-server-switch-resumption
+test-14 = 14-npn-client-switch-resumption
+test-15 = 15-npn-client-first-pref-on-mismatch-resumption
+test-16 = 16-npn-no-server-support-resumption
+test-17 = 17-npn-no-client-support-resumption
+test-18 = 18-alpn-preferred-over-npn-resumption
+test-19 = 19-npn-used-if-alpn-not-supported-resumption
+# ===========================================================
+
+[0-npn-simple]
+ssl_conf = 0-npn-simple-ssl
+
+[0-npn-simple-ssl]
+server = 0-npn-simple-server
+client = 0-npn-simple-client
+
+[0-npn-simple-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-npn-simple-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedNPNProtocol = foo
+server = 0-npn-simple-server-extra
+client = 0-npn-simple-client-extra
+
+[0-npn-simple-server-extra]
+NPNProtocols = foo
+
+[0-npn-simple-client-extra]
+NPNProtocols = foo
+
+
+# ===========================================================
+
+[1-npn-client-finds-match]
+ssl_conf = 1-npn-client-finds-match-ssl
+
+[1-npn-client-finds-match-ssl]
+server = 1-npn-client-finds-match-server
+client = 1-npn-client-finds-match-client
+
+[1-npn-client-finds-match-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-npn-client-finds-match-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedNPNProtocol = bar
+server = 1-npn-client-finds-match-server-extra
+client = 1-npn-client-finds-match-client-extra
+
+[1-npn-client-finds-match-server-extra]
+NPNProtocols = baz,bar
+
+[1-npn-client-finds-match-client-extra]
+NPNProtocols = foo,bar
+
+
+# ===========================================================
+
+[2-npn-client-honours-server-pref]
+ssl_conf = 2-npn-client-honours-server-pref-ssl
+
+[2-npn-client-honours-server-pref-ssl]
+server = 2-npn-client-honours-server-pref-server
+client = 2-npn-client-honours-server-pref-client
+
+[2-npn-client-honours-server-pref-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-npn-client-honours-server-pref-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedNPNProtocol = bar
+server = 2-npn-client-honours-server-pref-server-extra
+client = 2-npn-client-honours-server-pref-client-extra
+
+[2-npn-client-honours-server-pref-server-extra]
+NPNProtocols = bar,foo
+
+[2-npn-client-honours-server-pref-client-extra]
+NPNProtocols = foo,bar
+
+
+# ===========================================================
+
+[3-npn-client-first-pref-on-mismatch]
+ssl_conf = 3-npn-client-first-pref-on-mismatch-ssl
+
+[3-npn-client-first-pref-on-mismatch-ssl]
+server = 3-npn-client-first-pref-on-mismatch-server
+client = 3-npn-client-first-pref-on-mismatch-client
+
+[3-npn-client-first-pref-on-mismatch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-npn-client-first-pref-on-mismatch-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedNPNProtocol = foo
+server = 3-npn-client-first-pref-on-mismatch-server-extra
+client = 3-npn-client-first-pref-on-mismatch-client-extra
+
+[3-npn-client-first-pref-on-mismatch-server-extra]
+NPNProtocols = baz
+
+[3-npn-client-first-pref-on-mismatch-client-extra]
+NPNProtocols = foo,bar
+
+
+# ===========================================================
+
+[4-npn-no-server-support]
+ssl_conf = 4-npn-no-server-support-ssl
+
+[4-npn-no-server-support-ssl]
+server = 4-npn-no-server-support-server
+client = 4-npn-no-server-support-client
+
+[4-npn-no-server-support-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-npn-no-server-support-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+client = 4-npn-no-server-support-client-extra
+
+[4-npn-no-server-support-client-extra]
+NPNProtocols = foo
+
+
+# ===========================================================
+
+[5-npn-no-client-support]
+ssl_conf = 5-npn-no-client-support-ssl
+
+[5-npn-no-client-support-ssl]
+server = 5-npn-no-client-support-server
+client = 5-npn-no-client-support-client
+
+[5-npn-no-client-support-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-npn-no-client-support-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+server = 5-npn-no-client-support-server-extra
+
+[5-npn-no-client-support-server-extra]
+NPNProtocols = foo
+
+
+# ===========================================================
+
+[6-npn-with-sni-no-context-switch]
+ssl_conf = 6-npn-with-sni-no-context-switch-ssl
+
+[6-npn-with-sni-no-context-switch-ssl]
+server = 6-npn-with-sni-no-context-switch-server
+client = 6-npn-with-sni-no-context-switch-client
+server2 = 6-npn-with-sni-no-context-switch-server2
+
+[6-npn-with-sni-no-context-switch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-npn-with-sni-no-context-switch-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-npn-with-sni-no-context-switch-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedNPNProtocol = foo
+ExpectedServerName = server1
+server = 6-npn-with-sni-no-context-switch-server-extra
+server2 = 6-npn-with-sni-no-context-switch-server2-extra
+client = 6-npn-with-sni-no-context-switch-client-extra
+
+[6-npn-with-sni-no-context-switch-server-extra]
+NPNProtocols = foo
+ServerNameCallback = IgnoreMismatch
+
+[6-npn-with-sni-no-context-switch-server2-extra]
+NPNProtocols = bar
+
+[6-npn-with-sni-no-context-switch-client-extra]
+NPNProtocols = foo,bar
+ServerName = server1
+
+
+# ===========================================================
+
+[7-npn-with-sni-context-switch]
+ssl_conf = 7-npn-with-sni-context-switch-ssl
+
+[7-npn-with-sni-context-switch-ssl]
+server = 7-npn-with-sni-context-switch-server
+client = 7-npn-with-sni-context-switch-client
+server2 = 7-npn-with-sni-context-switch-server2
+
+[7-npn-with-sni-context-switch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-npn-with-sni-context-switch-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-npn-with-sni-context-switch-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedNPNProtocol = bar
+ExpectedServerName = server2
+server = 7-npn-with-sni-context-switch-server-extra
+server2 = 7-npn-with-sni-context-switch-server2-extra
+client = 7-npn-with-sni-context-switch-client-extra
+
+[7-npn-with-sni-context-switch-server-extra]
+NPNProtocols = foo
+ServerNameCallback = IgnoreMismatch
+
+[7-npn-with-sni-context-switch-server2-extra]
+NPNProtocols = bar
+
+[7-npn-with-sni-context-switch-client-extra]
+NPNProtocols = foo,bar
+ServerName = server2
+
+
+# ===========================================================
+
+[8-npn-selected-sni-server-supports-npn]
+ssl_conf = 8-npn-selected-sni-server-supports-npn-ssl
+
+[8-npn-selected-sni-server-supports-npn-ssl]
+server = 8-npn-selected-sni-server-supports-npn-server
+client = 8-npn-selected-sni-server-supports-npn-client
+server2 = 8-npn-selected-sni-server-supports-npn-server2
+
+[8-npn-selected-sni-server-supports-npn-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-npn-selected-sni-server-supports-npn-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-npn-selected-sni-server-supports-npn-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedNPNProtocol = bar
+ExpectedServerName = server2
+server = 8-npn-selected-sni-server-supports-npn-server-extra
+server2 = 8-npn-selected-sni-server-supports-npn-server2-extra
+client = 8-npn-selected-sni-server-supports-npn-client-extra
+
+[8-npn-selected-sni-server-supports-npn-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[8-npn-selected-sni-server-supports-npn-server2-extra]
+NPNProtocols = bar
+
+[8-npn-selected-sni-server-supports-npn-client-extra]
+NPNProtocols = foo,bar
+ServerName = server2
+
+
+# ===========================================================
+
+[9-npn-selected-sni-server-does-not-support-npn]
+ssl_conf = 9-npn-selected-sni-server-does-not-support-npn-ssl
+
+[9-npn-selected-sni-server-does-not-support-npn-ssl]
+server = 9-npn-selected-sni-server-does-not-support-npn-server
+client = 9-npn-selected-sni-server-does-not-support-npn-client
+server2 = 9-npn-selected-sni-server-does-not-support-npn-server2
+
+[9-npn-selected-sni-server-does-not-support-npn-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-npn-selected-sni-server-does-not-support-npn-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-npn-selected-sni-server-does-not-support-npn-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedServerName = server2
+server = 9-npn-selected-sni-server-does-not-support-npn-server-extra
+client = 9-npn-selected-sni-server-does-not-support-npn-client-extra
+
+[9-npn-selected-sni-server-does-not-support-npn-server-extra]
+NPNProtocols = bar
+ServerNameCallback = IgnoreMismatch
+
+[9-npn-selected-sni-server-does-not-support-npn-client-extra]
+NPNProtocols = foo,bar
+ServerName = server2
+
+
+# ===========================================================
+
+[10-alpn-preferred-over-npn]
+ssl_conf = 10-alpn-preferred-over-npn-ssl
+
+[10-alpn-preferred-over-npn-ssl]
+server = 10-alpn-preferred-over-npn-server
+client = 10-alpn-preferred-over-npn-client
+
+[10-alpn-preferred-over-npn-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-alpn-preferred-over-npn-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedALPNProtocol = foo
+server = 10-alpn-preferred-over-npn-server-extra
+client = 10-alpn-preferred-over-npn-client-extra
+
+[10-alpn-preferred-over-npn-server-extra]
+ALPNProtocols = foo
+NPNProtocols = bar
+
+[10-alpn-preferred-over-npn-client-extra]
+ALPNProtocols = foo
+NPNProtocols = bar
+
+
+# ===========================================================
+
+[11-sni-npn-preferred-over-alpn]
+ssl_conf = 11-sni-npn-preferred-over-alpn-ssl
+
+[11-sni-npn-preferred-over-alpn-ssl]
+server = 11-sni-npn-preferred-over-alpn-server
+client = 11-sni-npn-preferred-over-alpn-client
+server2 = 11-sni-npn-preferred-over-alpn-server2
+
+[11-sni-npn-preferred-over-alpn-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-sni-npn-preferred-over-alpn-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-sni-npn-preferred-over-alpn-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedNPNProtocol = bar
+ExpectedServerName = server2
+server = 11-sni-npn-preferred-over-alpn-server-extra
+server2 = 11-sni-npn-preferred-over-alpn-server2-extra
+client = 11-sni-npn-preferred-over-alpn-client-extra
+
+[11-sni-npn-preferred-over-alpn-server-extra]
+ALPNProtocols = foo
+ServerNameCallback = IgnoreMismatch
+
+[11-sni-npn-preferred-over-alpn-server2-extra]
+NPNProtocols = bar
+
+[11-sni-npn-preferred-over-alpn-client-extra]
+ALPNProtocols = foo
+NPNProtocols = bar
+ServerName = server2
+
+
+# ===========================================================
+
+[12-npn-simple-resumption]
+ssl_conf = 12-npn-simple-resumption-ssl
+
+[12-npn-simple-resumption-ssl]
+server = 12-npn-simple-resumption-server
+client = 12-npn-simple-resumption-client
+resume-server = 12-npn-simple-resumption-server
+resume-client = 12-npn-simple-resumption-client
+
+[12-npn-simple-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-npn-simple-resumption-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedNPNProtocol = foo
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 12-npn-simple-resumption-server-extra
+resume-server = 12-npn-simple-resumption-server-extra
+client = 12-npn-simple-resumption-client-extra
+resume-client = 12-npn-simple-resumption-client-extra
+
+[12-npn-simple-resumption-server-extra]
+NPNProtocols = foo
+
+[12-npn-simple-resumption-client-extra]
+NPNProtocols = foo
+
+
+# ===========================================================
+
+[13-npn-server-switch-resumption]
+ssl_conf = 13-npn-server-switch-resumption-ssl
+
+[13-npn-server-switch-resumption-ssl]
+server = 13-npn-server-switch-resumption-server
+client = 13-npn-server-switch-resumption-client
+resume-server = 13-npn-server-switch-resumption-resume-server
+resume-client = 13-npn-server-switch-resumption-client
+
+[13-npn-server-switch-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-npn-server-switch-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-npn-server-switch-resumption-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedNPNProtocol = baz
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 13-npn-server-switch-resumption-server-extra
+resume-server = 13-npn-server-switch-resumption-resume-server-extra
+client = 13-npn-server-switch-resumption-client-extra
+resume-client = 13-npn-server-switch-resumption-client-extra
+
+[13-npn-server-switch-resumption-server-extra]
+NPNProtocols = bar,foo
+
+[13-npn-server-switch-resumption-resume-server-extra]
+NPNProtocols = baz,foo
+
+[13-npn-server-switch-resumption-client-extra]
+NPNProtocols = foo,bar,baz
+
+
+# ===========================================================
+
+[14-npn-client-switch-resumption]
+ssl_conf = 14-npn-client-switch-resumption-ssl
+
+[14-npn-client-switch-resumption-ssl]
+server = 14-npn-client-switch-resumption-server
+client = 14-npn-client-switch-resumption-client
+resume-server = 14-npn-client-switch-resumption-server
+resume-client = 14-npn-client-switch-resumption-resume-client
+
+[14-npn-client-switch-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-npn-client-switch-resumption-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[14-npn-client-switch-resumption-resume-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedNPNProtocol = bar
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 14-npn-client-switch-resumption-server-extra
+resume-server = 14-npn-client-switch-resumption-server-extra
+client = 14-npn-client-switch-resumption-client-extra
+resume-client = 14-npn-client-switch-resumption-resume-client-extra
+
+[14-npn-client-switch-resumption-server-extra]
+NPNProtocols = foo,bar,baz
+
+[14-npn-client-switch-resumption-client-extra]
+NPNProtocols = foo,baz
+
+[14-npn-client-switch-resumption-resume-client-extra]
+NPNProtocols = bar,baz
+
+
+# ===========================================================
+
+[15-npn-client-first-pref-on-mismatch-resumption]
+ssl_conf = 15-npn-client-first-pref-on-mismatch-resumption-ssl
+
+[15-npn-client-first-pref-on-mismatch-resumption-ssl]
+server = 15-npn-client-first-pref-on-mismatch-resumption-server
+client = 15-npn-client-first-pref-on-mismatch-resumption-client
+resume-server = 15-npn-client-first-pref-on-mismatch-resumption-resume-server
+resume-client = 15-npn-client-first-pref-on-mismatch-resumption-client
+
+[15-npn-client-first-pref-on-mismatch-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-npn-client-first-pref-on-mismatch-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-npn-client-first-pref-on-mismatch-resumption-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedNPNProtocol = foo
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 15-npn-client-first-pref-on-mismatch-resumption-server-extra
+resume-server = 15-npn-client-first-pref-on-mismatch-resumption-resume-server-extra
+client = 15-npn-client-first-pref-on-mismatch-resumption-client-extra
+resume-client = 15-npn-client-first-pref-on-mismatch-resumption-client-extra
+
+[15-npn-client-first-pref-on-mismatch-resumption-server-extra]
+NPNProtocols = bar
+
+[15-npn-client-first-pref-on-mismatch-resumption-resume-server-extra]
+NPNProtocols = baz
+
+[15-npn-client-first-pref-on-mismatch-resumption-client-extra]
+NPNProtocols = foo,bar
+
+
+# ===========================================================
+
+[16-npn-no-server-support-resumption]
+ssl_conf = 16-npn-no-server-support-resumption-ssl
+
+[16-npn-no-server-support-resumption-ssl]
+server = 16-npn-no-server-support-resumption-server
+client = 16-npn-no-server-support-resumption-client
+resume-server = 16-npn-no-server-support-resumption-resume-server
+resume-client = 16-npn-no-server-support-resumption-client
+
+[16-npn-no-server-support-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-npn-no-server-support-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-npn-no-server-support-resumption-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-16]
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 16-npn-no-server-support-resumption-server-extra
+client = 16-npn-no-server-support-resumption-client-extra
+resume-client = 16-npn-no-server-support-resumption-client-extra
+
+[16-npn-no-server-support-resumption-server-extra]
+NPNProtocols = foo
+
+[16-npn-no-server-support-resumption-client-extra]
+NPNProtocols = foo
+
+
+# ===========================================================
+
+[17-npn-no-client-support-resumption]
+ssl_conf = 17-npn-no-client-support-resumption-ssl
+
+[17-npn-no-client-support-resumption-ssl]
+server = 17-npn-no-client-support-resumption-server
+client = 17-npn-no-client-support-resumption-client
+resume-server = 17-npn-no-client-support-resumption-server
+resume-client = 17-npn-no-client-support-resumption-resume-client
+
+[17-npn-no-client-support-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[17-npn-no-client-support-resumption-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[17-npn-no-client-support-resumption-resume-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-17]
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 17-npn-no-client-support-resumption-server-extra
+resume-server = 17-npn-no-client-support-resumption-server-extra
+client = 17-npn-no-client-support-resumption-client-extra
+
+[17-npn-no-client-support-resumption-server-extra]
+NPNProtocols = foo
+
+[17-npn-no-client-support-resumption-client-extra]
+NPNProtocols = foo
+
+
+# ===========================================================
+
+[18-alpn-preferred-over-npn-resumption]
+ssl_conf = 18-alpn-preferred-over-npn-resumption-ssl
+
+[18-alpn-preferred-over-npn-resumption-ssl]
+server = 18-alpn-preferred-over-npn-resumption-server
+client = 18-alpn-preferred-over-npn-resumption-client
+resume-server = 18-alpn-preferred-over-npn-resumption-resume-server
+resume-client = 18-alpn-preferred-over-npn-resumption-client
+
+[18-alpn-preferred-over-npn-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-alpn-preferred-over-npn-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-alpn-preferred-over-npn-resumption-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-18]
+ExpectedALPNProtocol = foo
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 18-alpn-preferred-over-npn-resumption-server-extra
+resume-server = 18-alpn-preferred-over-npn-resumption-resume-server-extra
+client = 18-alpn-preferred-over-npn-resumption-client-extra
+resume-client = 18-alpn-preferred-over-npn-resumption-client-extra
+
+[18-alpn-preferred-over-npn-resumption-server-extra]
+NPNProtocols = bar
+
+[18-alpn-preferred-over-npn-resumption-resume-server-extra]
+ALPNProtocols = foo
+NPNProtocols = baz
+
+[18-alpn-preferred-over-npn-resumption-client-extra]
+ALPNProtocols = foo
+NPNProtocols = bar,baz
+
+
+# ===========================================================
+
+[19-npn-used-if-alpn-not-supported-resumption]
+ssl_conf = 19-npn-used-if-alpn-not-supported-resumption-ssl
+
+[19-npn-used-if-alpn-not-supported-resumption-ssl]
+server = 19-npn-used-if-alpn-not-supported-resumption-server
+client = 19-npn-used-if-alpn-not-supported-resumption-client
+resume-server = 19-npn-used-if-alpn-not-supported-resumption-resume-server
+resume-client = 19-npn-used-if-alpn-not-supported-resumption-client
+
+[19-npn-used-if-alpn-not-supported-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[19-npn-used-if-alpn-not-supported-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[19-npn-used-if-alpn-not-supported-resumption-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-19]
+ExpectedNPNProtocol = baz
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 19-npn-used-if-alpn-not-supported-resumption-server-extra
+resume-server = 19-npn-used-if-alpn-not-supported-resumption-resume-server-extra
+client = 19-npn-used-if-alpn-not-supported-resumption-client-extra
+resume-client = 19-npn-used-if-alpn-not-supported-resumption-client-extra
+
+[19-npn-used-if-alpn-not-supported-resumption-server-extra]
+ALPNProtocols = foo
+NPNProtocols = bar
+
+[19-npn-used-if-alpn-not-supported-resumption-resume-server-extra]
+NPNProtocols = baz
+
+[19-npn-used-if-alpn-not-supported-resumption-client-extra]
+ALPNProtocols = foo
+NPNProtocols = bar,baz
+
+
diff --git a/test/ssl-tests/08-npn.cnf.in b/test/ssl-tests/08-npn.cnf.in
new file mode 100644
index 000000000000..30783e45eb59
--- /dev/null
+++ b/test/ssl-tests/08-npn.cnf.in
@@ -0,0 +1,443 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test NPN. Note that NPN is only supported up to TLSv1.2
+
+use strict;
+use warnings;
+
+package ssltests;
+
+our @tests = (
+ {
+ name => "npn-simple",
+ server => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedNPNProtocol" => "foo",
+ },
+ },
+ {
+ name => "npn-client-finds-match",
+ server => {
+ extra => {
+ "NPNProtocols" => "baz,bar",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,bar",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedNPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "npn-client-honours-server-pref",
+ server => {
+ extra => {
+ "NPNProtocols" => "bar,foo",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,bar",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedNPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "npn-client-first-pref-on-mismatch",
+ server => {
+ extra => {
+ "NPNProtocols" => "baz",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,bar",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedNPNProtocol" => "foo",
+ },
+ },
+ {
+ name => "npn-no-server-support",
+ server => {},
+ client => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedNPNProtocol" => undef,
+ },
+ },
+ {
+ name => "npn-no-client-support",
+ server => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedNPNProtocol" => undef,
+ },
+ },
+ {
+ name => "npn-with-sni-no-context-switch",
+ server => {
+ extra => {
+ "NPNProtocols" => "foo",
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ server2 => {
+ extra => {
+ "NPNProtocols" => "bar",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,bar",
+ "ServerName" => "server1",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedServerName" => "server1",
+ "ExpectedNPNProtocol" => "foo",
+ },
+ },
+ {
+ name => "npn-with-sni-context-switch",
+ server => {
+ extra => {
+ "NPNProtocols" => "foo",
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ server2 => {
+ extra => {
+ "NPNProtocols" => "bar",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,bar",
+ "ServerName" => "server2",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedServerName" => "server2",
+ "ExpectedNPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "npn-selected-sni-server-supports-npn",
+ server => {
+ extra => {
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ server2 => {
+ extra => {
+ "NPNProtocols" => "bar",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,bar",
+ "ServerName" => "server2",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedServerName" => "server2",
+ "ExpectedNPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "npn-selected-sni-server-does-not-support-npn",
+ server => {
+ extra => {
+ "NPNProtocols" => "bar",
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ server2 => { },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,bar",
+ "ServerName" => "server2",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedServerName" => "server2",
+ "ExpectedNPNProtocol" => undef,
+ },
+ },
+ {
+ name => "alpn-preferred-over-npn",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ "NPNProtocols" => "bar",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ "NPNProtocols" => "bar",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedALPNProtocol" => "foo",
+ "ExpectedNPNProtocol" => undef,
+ },
+ },
+ {
+ name => "sni-npn-preferred-over-alpn",
+ server => {
+ extra => {
+ "ServerNameCallback" => "IgnoreMismatch",
+ "ALPNProtocols" => "foo",
+ },
+ },
+ server2 => {
+ extra => {
+ "NPNProtocols" => "bar",
+ },
+ },
+ client => {
+ extra => {
+ "ServerName" => "server2",
+ "ALPNProtocols" => "foo",
+ "NPNProtocols" => "bar",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedALPNProtocol" => undef,
+ "ExpectedNPNProtocol" => "bar",
+ "ExpectedServerName" => "server2",
+ },
+ },
+ {
+ name => "npn-simple-resumption",
+ server => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedNPNProtocol" => "foo",
+ },
+ },
+ {
+ name => "npn-server-switch-resumption",
+ server => {
+ extra => {
+ "NPNProtocols" => "bar,foo",
+ },
+ },
+ resume_server => {
+ extra => {
+ "NPNProtocols" => "baz,foo",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,bar,baz",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedNPNProtocol" => "baz",
+ },
+ },
+ {
+ name => "npn-client-switch-resumption",
+ server => {
+ extra => {
+ "NPNProtocols" => "foo,bar,baz",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,baz",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ resume_client => {
+ extra => {
+ "NPNProtocols" => "bar,baz",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedNPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "npn-client-first-pref-on-mismatch-resumption",
+ server => {
+ extra => {
+ "NPNProtocols" => "bar",
+ },
+ },
+ resume_server => {
+ extra => {
+ "NPNProtocols" => "baz",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo,bar",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedNPNProtocol" => "foo",
+ },
+ },
+ {
+ name => "npn-no-server-support-resumption",
+ server => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ },
+ resume_server => { },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedNPNProtocol" => undef,
+ },
+ },
+ {
+ name => "npn-no-client-support-resumption",
+ server => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ },
+ client => {
+ extra => {
+ "NPNProtocols" => "foo",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ resume_client => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedNPNProtocol" => undef,
+ },
+ },
+ {
+ name => "alpn-preferred-over-npn-resumption",
+ server => {
+ extra => {
+ "NPNProtocols" => "bar",
+ },
+ },
+ resume_server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ "NPNProtocols" => "baz",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ "NPNProtocols" => "bar,baz",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedALPNProtocol" => "foo",
+ "ExpectedNPNProtocol" => undef,
+ },
+ },
+ {
+ name => "npn-used-if-alpn-not-supported-resumption",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ "NPNProtocols" => "bar",
+ },
+ },
+ resume_server => {
+ extra => {
+ "NPNProtocols" => "baz",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ "NPNProtocols" => "bar,baz",
+ },
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedALPNProtocol" => undef,
+ "ExpectedNPNProtocol" => "baz",
+ },
+ },
+);
diff --git a/test/ssl-tests/09-alpn.cnf b/test/ssl-tests/09-alpn.cnf
new file mode 100644
index 000000000000..e7e6cb95348b
--- /dev/null
+++ b/test/ssl-tests/09-alpn.cnf
@@ -0,0 +1,619 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 16
+
+test-0 = 0-alpn-simple
+test-1 = 1-alpn-server-finds-match
+test-2 = 2-alpn-server-honours-server-pref
+test-3 = 3-alpn-alert-on-mismatch
+test-4 = 4-alpn-no-server-support
+test-5 = 5-alpn-no-client-support
+test-6 = 6-alpn-with-sni-no-context-switch
+test-7 = 7-alpn-with-sni-context-switch
+test-8 = 8-alpn-selected-sni-server-supports-alpn
+test-9 = 9-alpn-selected-sni-server-does-not-support-alpn
+test-10 = 10-alpn-simple-resumption
+test-11 = 11-alpn-server-switch-resumption
+test-12 = 12-alpn-client-switch-resumption
+test-13 = 13-alpn-alert-on-mismatch-resumption
+test-14 = 14-alpn-no-server-support-resumption
+test-15 = 15-alpn-no-client-support-resumption
+# ===========================================================
+
+[0-alpn-simple]
+ssl_conf = 0-alpn-simple-ssl
+
+[0-alpn-simple-ssl]
+server = 0-alpn-simple-server
+client = 0-alpn-simple-client
+
+[0-alpn-simple-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-alpn-simple-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedALPNProtocol = foo
+server = 0-alpn-simple-server-extra
+client = 0-alpn-simple-client-extra
+
+[0-alpn-simple-server-extra]
+ALPNProtocols = foo
+
+[0-alpn-simple-client-extra]
+ALPNProtocols = foo
+
+
+# ===========================================================
+
+[1-alpn-server-finds-match]
+ssl_conf = 1-alpn-server-finds-match-ssl
+
+[1-alpn-server-finds-match-ssl]
+server = 1-alpn-server-finds-match-server
+client = 1-alpn-server-finds-match-client
+
+[1-alpn-server-finds-match-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-alpn-server-finds-match-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedALPNProtocol = bar
+server = 1-alpn-server-finds-match-server-extra
+client = 1-alpn-server-finds-match-client-extra
+
+[1-alpn-server-finds-match-server-extra]
+ALPNProtocols = baz,bar
+
+[1-alpn-server-finds-match-client-extra]
+ALPNProtocols = foo,bar
+
+
+# ===========================================================
+
+[2-alpn-server-honours-server-pref]
+ssl_conf = 2-alpn-server-honours-server-pref-ssl
+
+[2-alpn-server-honours-server-pref-ssl]
+server = 2-alpn-server-honours-server-pref-server
+client = 2-alpn-server-honours-server-pref-client
+
+[2-alpn-server-honours-server-pref-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-alpn-server-honours-server-pref-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedALPNProtocol = bar
+server = 2-alpn-server-honours-server-pref-server-extra
+client = 2-alpn-server-honours-server-pref-client-extra
+
+[2-alpn-server-honours-server-pref-server-extra]
+ALPNProtocols = bar,foo
+
+[2-alpn-server-honours-server-pref-client-extra]
+ALPNProtocols = foo,bar
+
+
+# ===========================================================
+
+[3-alpn-alert-on-mismatch]
+ssl_conf = 3-alpn-alert-on-mismatch-ssl
+
+[3-alpn-alert-on-mismatch-ssl]
+server = 3-alpn-alert-on-mismatch-server
+client = 3-alpn-alert-on-mismatch-client
+
+[3-alpn-alert-on-mismatch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-alpn-alert-on-mismatch-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = ServerFail
+ExpectedServerAlert = NoApplicationProtocol
+server = 3-alpn-alert-on-mismatch-server-extra
+client = 3-alpn-alert-on-mismatch-client-extra
+
+[3-alpn-alert-on-mismatch-server-extra]
+ALPNProtocols = baz
+
+[3-alpn-alert-on-mismatch-client-extra]
+ALPNProtocols = foo,bar
+
+
+# ===========================================================
+
+[4-alpn-no-server-support]
+ssl_conf = 4-alpn-no-server-support-ssl
+
+[4-alpn-no-server-support-ssl]
+server = 4-alpn-no-server-support-server
+client = 4-alpn-no-server-support-client
+
+[4-alpn-no-server-support-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-alpn-no-server-support-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+client = 4-alpn-no-server-support-client-extra
+
+[4-alpn-no-server-support-client-extra]
+ALPNProtocols = foo
+
+
+# ===========================================================
+
+[5-alpn-no-client-support]
+ssl_conf = 5-alpn-no-client-support-ssl
+
+[5-alpn-no-client-support-ssl]
+server = 5-alpn-no-client-support-server
+client = 5-alpn-no-client-support-client
+
+[5-alpn-no-client-support-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-alpn-no-client-support-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+server = 5-alpn-no-client-support-server-extra
+
+[5-alpn-no-client-support-server-extra]
+ALPNProtocols = foo
+
+
+# ===========================================================
+
+[6-alpn-with-sni-no-context-switch]
+ssl_conf = 6-alpn-with-sni-no-context-switch-ssl
+
+[6-alpn-with-sni-no-context-switch-ssl]
+server = 6-alpn-with-sni-no-context-switch-server
+client = 6-alpn-with-sni-no-context-switch-client
+server2 = 6-alpn-with-sni-no-context-switch-server2
+
+[6-alpn-with-sni-no-context-switch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-alpn-with-sni-no-context-switch-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-alpn-with-sni-no-context-switch-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedALPNProtocol = foo
+ExpectedServerName = server1
+server = 6-alpn-with-sni-no-context-switch-server-extra
+server2 = 6-alpn-with-sni-no-context-switch-server2-extra
+client = 6-alpn-with-sni-no-context-switch-client-extra
+
+[6-alpn-with-sni-no-context-switch-server-extra]
+ALPNProtocols = foo
+ServerNameCallback = IgnoreMismatch
+
+[6-alpn-with-sni-no-context-switch-server2-extra]
+ALPNProtocols = bar
+
+[6-alpn-with-sni-no-context-switch-client-extra]
+ALPNProtocols = foo,bar
+ServerName = server1
+
+
+# ===========================================================
+
+[7-alpn-with-sni-context-switch]
+ssl_conf = 7-alpn-with-sni-context-switch-ssl
+
+[7-alpn-with-sni-context-switch-ssl]
+server = 7-alpn-with-sni-context-switch-server
+client = 7-alpn-with-sni-context-switch-client
+server2 = 7-alpn-with-sni-context-switch-server2
+
+[7-alpn-with-sni-context-switch-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-alpn-with-sni-context-switch-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-alpn-with-sni-context-switch-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedALPNProtocol = bar
+ExpectedServerName = server2
+server = 7-alpn-with-sni-context-switch-server-extra
+server2 = 7-alpn-with-sni-context-switch-server2-extra
+client = 7-alpn-with-sni-context-switch-client-extra
+
+[7-alpn-with-sni-context-switch-server-extra]
+ALPNProtocols = foo
+ServerNameCallback = IgnoreMismatch
+
+[7-alpn-with-sni-context-switch-server2-extra]
+ALPNProtocols = bar
+
+[7-alpn-with-sni-context-switch-client-extra]
+ALPNProtocols = foo,bar
+ServerName = server2
+
+
+# ===========================================================
+
+[8-alpn-selected-sni-server-supports-alpn]
+ssl_conf = 8-alpn-selected-sni-server-supports-alpn-ssl
+
+[8-alpn-selected-sni-server-supports-alpn-ssl]
+server = 8-alpn-selected-sni-server-supports-alpn-server
+client = 8-alpn-selected-sni-server-supports-alpn-client
+server2 = 8-alpn-selected-sni-server-supports-alpn-server2
+
+[8-alpn-selected-sni-server-supports-alpn-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-alpn-selected-sni-server-supports-alpn-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-alpn-selected-sni-server-supports-alpn-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedALPNProtocol = bar
+ExpectedServerName = server2
+server = 8-alpn-selected-sni-server-supports-alpn-server-extra
+server2 = 8-alpn-selected-sni-server-supports-alpn-server2-extra
+client = 8-alpn-selected-sni-server-supports-alpn-client-extra
+
+[8-alpn-selected-sni-server-supports-alpn-server-extra]
+ServerNameCallback = IgnoreMismatch
+
+[8-alpn-selected-sni-server-supports-alpn-server2-extra]
+ALPNProtocols = bar
+
+[8-alpn-selected-sni-server-supports-alpn-client-extra]
+ALPNProtocols = foo,bar
+ServerName = server2
+
+
+# ===========================================================
+
+[9-alpn-selected-sni-server-does-not-support-alpn]
+ssl_conf = 9-alpn-selected-sni-server-does-not-support-alpn-ssl
+
+[9-alpn-selected-sni-server-does-not-support-alpn-ssl]
+server = 9-alpn-selected-sni-server-does-not-support-alpn-server
+client = 9-alpn-selected-sni-server-does-not-support-alpn-client
+server2 = 9-alpn-selected-sni-server-does-not-support-alpn-server2
+
+[9-alpn-selected-sni-server-does-not-support-alpn-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-alpn-selected-sni-server-does-not-support-alpn-server2]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-alpn-selected-sni-server-does-not-support-alpn-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedServerName = server2
+server = 9-alpn-selected-sni-server-does-not-support-alpn-server-extra
+client = 9-alpn-selected-sni-server-does-not-support-alpn-client-extra
+
+[9-alpn-selected-sni-server-does-not-support-alpn-server-extra]
+ALPNProtocols = bar
+ServerNameCallback = IgnoreMismatch
+
+[9-alpn-selected-sni-server-does-not-support-alpn-client-extra]
+ALPNProtocols = foo,bar
+ServerName = server2
+
+
+# ===========================================================
+
+[10-alpn-simple-resumption]
+ssl_conf = 10-alpn-simple-resumption-ssl
+
+[10-alpn-simple-resumption-ssl]
+server = 10-alpn-simple-resumption-server
+client = 10-alpn-simple-resumption-client
+resume-server = 10-alpn-simple-resumption-server
+resume-client = 10-alpn-simple-resumption-client
+
+[10-alpn-simple-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-alpn-simple-resumption-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedALPNProtocol = foo
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 10-alpn-simple-resumption-server-extra
+resume-server = 10-alpn-simple-resumption-server-extra
+client = 10-alpn-simple-resumption-client-extra
+resume-client = 10-alpn-simple-resumption-client-extra
+
+[10-alpn-simple-resumption-server-extra]
+ALPNProtocols = foo
+
+[10-alpn-simple-resumption-client-extra]
+ALPNProtocols = foo
+
+
+# ===========================================================
+
+[11-alpn-server-switch-resumption]
+ssl_conf = 11-alpn-server-switch-resumption-ssl
+
+[11-alpn-server-switch-resumption-ssl]
+server = 11-alpn-server-switch-resumption-server
+client = 11-alpn-server-switch-resumption-client
+resume-server = 11-alpn-server-switch-resumption-resume-server
+resume-client = 11-alpn-server-switch-resumption-client
+
+[11-alpn-server-switch-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-alpn-server-switch-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-alpn-server-switch-resumption-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedALPNProtocol = baz
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 11-alpn-server-switch-resumption-server-extra
+resume-server = 11-alpn-server-switch-resumption-resume-server-extra
+client = 11-alpn-server-switch-resumption-client-extra
+resume-client = 11-alpn-server-switch-resumption-client-extra
+
+[11-alpn-server-switch-resumption-server-extra]
+ALPNProtocols = bar,foo
+
+[11-alpn-server-switch-resumption-resume-server-extra]
+ALPNProtocols = baz,foo
+
+[11-alpn-server-switch-resumption-client-extra]
+ALPNProtocols = foo,bar,baz
+
+
+# ===========================================================
+
+[12-alpn-client-switch-resumption]
+ssl_conf = 12-alpn-client-switch-resumption-ssl
+
+[12-alpn-client-switch-resumption-ssl]
+server = 12-alpn-client-switch-resumption-server
+client = 12-alpn-client-switch-resumption-client
+resume-server = 12-alpn-client-switch-resumption-server
+resume-client = 12-alpn-client-switch-resumption-resume-client
+
+[12-alpn-client-switch-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-alpn-client-switch-resumption-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[12-alpn-client-switch-resumption-resume-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedALPNProtocol = bar
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 12-alpn-client-switch-resumption-server-extra
+resume-server = 12-alpn-client-switch-resumption-server-extra
+client = 12-alpn-client-switch-resumption-client-extra
+resume-client = 12-alpn-client-switch-resumption-resume-client-extra
+
+[12-alpn-client-switch-resumption-server-extra]
+ALPNProtocols = foo,bar,baz
+
+[12-alpn-client-switch-resumption-client-extra]
+ALPNProtocols = foo,baz
+
+[12-alpn-client-switch-resumption-resume-client-extra]
+ALPNProtocols = bar,baz
+
+
+# ===========================================================
+
+[13-alpn-alert-on-mismatch-resumption]
+ssl_conf = 13-alpn-alert-on-mismatch-resumption-ssl
+
+[13-alpn-alert-on-mismatch-resumption-ssl]
+server = 13-alpn-alert-on-mismatch-resumption-server
+client = 13-alpn-alert-on-mismatch-resumption-client
+resume-server = 13-alpn-alert-on-mismatch-resumption-resume-server
+resume-client = 13-alpn-alert-on-mismatch-resumption-client
+
+[13-alpn-alert-on-mismatch-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-alpn-alert-on-mismatch-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-alpn-alert-on-mismatch-resumption-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedResult = ServerFail
+ExpectedServerAlert = NoApplicationProtocol
+HandshakeMode = Resume
+server = 13-alpn-alert-on-mismatch-resumption-server-extra
+resume-server = 13-alpn-alert-on-mismatch-resumption-resume-server-extra
+client = 13-alpn-alert-on-mismatch-resumption-client-extra
+resume-client = 13-alpn-alert-on-mismatch-resumption-client-extra
+
+[13-alpn-alert-on-mismatch-resumption-server-extra]
+ALPNProtocols = bar
+
+[13-alpn-alert-on-mismatch-resumption-resume-server-extra]
+ALPNProtocols = baz
+
+[13-alpn-alert-on-mismatch-resumption-client-extra]
+ALPNProtocols = foo,bar
+
+
+# ===========================================================
+
+[14-alpn-no-server-support-resumption]
+ssl_conf = 14-alpn-no-server-support-resumption-ssl
+
+[14-alpn-no-server-support-resumption-ssl]
+server = 14-alpn-no-server-support-resumption-server
+client = 14-alpn-no-server-support-resumption-client
+resume-server = 14-alpn-no-server-support-resumption-resume-server
+resume-client = 14-alpn-no-server-support-resumption-client
+
+[14-alpn-no-server-support-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-alpn-no-server-support-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-alpn-no-server-support-resumption-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 14-alpn-no-server-support-resumption-server-extra
+client = 14-alpn-no-server-support-resumption-client-extra
+resume-client = 14-alpn-no-server-support-resumption-client-extra
+
+[14-alpn-no-server-support-resumption-server-extra]
+ALPNProtocols = foo
+
+[14-alpn-no-server-support-resumption-client-extra]
+ALPNProtocols = foo
+
+
+# ===========================================================
+
+[15-alpn-no-client-support-resumption]
+ssl_conf = 15-alpn-no-client-support-resumption-ssl
+
+[15-alpn-no-client-support-resumption-ssl]
+server = 15-alpn-no-client-support-resumption-server
+client = 15-alpn-no-client-support-resumption-client
+resume-server = 15-alpn-no-client-support-resumption-server
+resume-client = 15-alpn-no-client-support-resumption-resume-client
+
+[15-alpn-no-client-support-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-alpn-no-client-support-resumption-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[15-alpn-no-client-support-resumption-resume-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+HandshakeMode = Resume
+ResumptionExpected = Yes
+server = 15-alpn-no-client-support-resumption-server-extra
+resume-server = 15-alpn-no-client-support-resumption-server-extra
+client = 15-alpn-no-client-support-resumption-client-extra
+
+[15-alpn-no-client-support-resumption-server-extra]
+ALPNProtocols = foo
+
+[15-alpn-no-client-support-resumption-client-extra]
+ALPNProtocols = foo
+
+
diff --git a/test/ssl-tests/09-alpn.cnf.in b/test/ssl-tests/09-alpn.cnf.in
new file mode 100644
index 000000000000..81330756c62c
--- /dev/null
+++ b/test/ssl-tests/09-alpn.cnf.in
@@ -0,0 +1,325 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test version negotiation
+
+use strict;
+use warnings;
+
+package ssltests;
+
+
+our @tests = (
+ {
+ name => "alpn-simple",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ test => {
+ "ExpectedALPNProtocol" => "foo",
+ },
+ },
+ {
+ name => "alpn-server-finds-match",
+ server => {
+ extra => {
+ "ALPNProtocols" => "baz,bar",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,bar",
+ },
+ },
+ test => {
+ "ExpectedALPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "alpn-server-honours-server-pref",
+ server => {
+ extra => {
+ "ALPNProtocols" => "bar,foo",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,bar",
+ },
+ },
+ test => {
+ "ExpectedALPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "alpn-alert-on-mismatch",
+ server => {
+ extra => {
+ "ALPNProtocols" => "baz",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,bar",
+ },
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "ExpectedServerAlert" => "NoApplicationProtocol",
+ },
+ },
+ {
+ name => "alpn-no-server-support",
+ server => { },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ test => {
+ "ExpectedALPNProtocol" => undef,
+ },
+ },
+ {
+ name => "alpn-no-client-support",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ client => { },
+ test => {
+ "ExpectedALPNProtocol" => undef,
+ },
+ },
+ {
+ name => "alpn-with-sni-no-context-switch",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ server2 => {
+ extra => {
+ "ALPNProtocols" => "bar",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,bar",
+ "ServerName" => "server1",
+ },
+ },
+ test => {
+ "ExpectedServerName" => "server1",
+ "ExpectedALPNProtocol" => "foo",
+ },
+ },
+ {
+ name => "alpn-with-sni-context-switch",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ server2 => {
+ extra => {
+ "ALPNProtocols" => "bar",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,bar",
+ "ServerName" => "server2",
+ },
+ },
+ test => {
+ "ExpectedServerName" => "server2",
+ "ExpectedALPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "alpn-selected-sni-server-supports-alpn",
+ server => {
+ extra => {
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ server2 => {
+ extra => {
+ "ALPNProtocols" => "bar",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,bar",
+ "ServerName" => "server2",
+ },
+ },
+ test => {
+ "ExpectedServerName" => "server2",
+ "ExpectedALPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "alpn-selected-sni-server-does-not-support-alpn",
+ server => {
+ extra => {
+ "ALPNProtocols" => "bar",
+ "ServerNameCallback" => "IgnoreMismatch",
+ },
+ },
+ server2 => { },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,bar",
+ "ServerName" => "server2",
+ },
+ },
+ test => {
+ "ExpectedServerName" => "server2",
+ "ExpectedALPNProtocol" => undef,
+ },
+ },
+ {
+ name => "alpn-simple-resumption",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedALPNProtocol" => "foo",
+ },
+ },
+ {
+ name => "alpn-server-switch-resumption",
+ server => {
+ extra => {
+ "ALPNProtocols" => "bar,foo",
+ },
+ },
+ resume_server => {
+ extra => {
+ "ALPNProtocols" => "baz,foo",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,bar,baz",
+ },
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedALPNProtocol" => "baz",
+ },
+ },
+ {
+ name => "alpn-client-switch-resumption",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo,bar,baz",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,baz",
+ },
+ },
+ resume_client => {
+ extra => {
+ "ALPNProtocols" => "bar,baz",
+ },
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedALPNProtocol" => "bar",
+ },
+ },
+ {
+ name => "alpn-alert-on-mismatch-resumption",
+ server => {
+ extra => {
+ "ALPNProtocols" => "bar",
+ },
+ },
+ resume_server => {
+ extra => {
+ "ALPNProtocols" => "baz",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo,bar",
+ },
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ExpectedResult" => "ServerFail",
+ "ExpectedServerAlert" => "NoApplicationProtocol",
+ },
+ },
+ {
+ name => "alpn-no-server-support-resumption",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ resume_server => { },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedALPNProtocol" => undef,
+ },
+ },
+ {
+ name => "alpn-no-client-support-resumption",
+ server => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ client => {
+ extra => {
+ "ALPNProtocols" => "foo",
+ },
+ },
+ resume_client => {
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedALPNProtocol" => undef,
+ },
+ },
+);
diff --git a/test/ssl-tests/10-resumption.cnf b/test/ssl-tests/10-resumption.cnf
new file mode 100644
index 000000000000..ca1f39a139da
--- /dev/null
+++ b/test/ssl-tests/10-resumption.cnf
@@ -0,0 +1,2439 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 65
+
+test-0 = 0-resumption
+test-1 = 1-resumption
+test-2 = 2-resumption
+test-3 = 3-resumption
+test-4 = 4-resumption
+test-5 = 5-resumption
+test-6 = 6-resumption
+test-7 = 7-resumption
+test-8 = 8-resumption
+test-9 = 9-resumption
+test-10 = 10-resumption
+test-11 = 11-resumption
+test-12 = 12-resumption
+test-13 = 13-resumption
+test-14 = 14-resumption
+test-15 = 15-resumption
+test-16 = 16-resumption
+test-17 = 17-resumption
+test-18 = 18-resumption
+test-19 = 19-resumption
+test-20 = 20-resumption
+test-21 = 21-resumption
+test-22 = 22-resumption
+test-23 = 23-resumption
+test-24 = 24-resumption
+test-25 = 25-resumption
+test-26 = 26-resumption
+test-27 = 27-resumption
+test-28 = 28-resumption
+test-29 = 29-resumption
+test-30 = 30-resumption
+test-31 = 31-resumption
+test-32 = 32-resumption
+test-33 = 33-resumption
+test-34 = 34-resumption
+test-35 = 35-resumption
+test-36 = 36-resumption
+test-37 = 37-resumption
+test-38 = 38-resumption
+test-39 = 39-resumption
+test-40 = 40-resumption
+test-41 = 41-resumption
+test-42 = 42-resumption
+test-43 = 43-resumption
+test-44 = 44-resumption
+test-45 = 45-resumption
+test-46 = 46-resumption
+test-47 = 47-resumption
+test-48 = 48-resumption
+test-49 = 49-resumption
+test-50 = 50-resumption
+test-51 = 51-resumption
+test-52 = 52-resumption
+test-53 = 53-resumption
+test-54 = 54-resumption
+test-55 = 55-resumption
+test-56 = 56-resumption
+test-57 = 57-resumption
+test-58 = 58-resumption
+test-59 = 59-resumption
+test-60 = 60-resumption
+test-61 = 61-resumption
+test-62 = 62-resumption
+test-63 = 63-resumption
+test-64 = 64-resumption-with-hrr
+# ===========================================================
+
+[0-resumption]
+ssl_conf = 0-resumption-ssl
+
+[0-resumption-ssl]
+server = 0-resumption-server
+client = 0-resumption-client
+resume-server = 0-resumption-resume-server
+resume-client = 0-resumption-client
+
+[0-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[1-resumption]
+ssl_conf = 1-resumption-ssl
+
+[1-resumption-ssl]
+server = 1-resumption-server
+client = 1-resumption-client
+resume-server = 1-resumption-resume-server
+resume-client = 1-resumption-client
+
+[1-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[2-resumption]
+ssl_conf = 2-resumption-ssl
+
+[2-resumption-ssl]
+server = 2-resumption-server
+client = 2-resumption-client
+resume-server = 2-resumption-resume-server
+resume-client = 2-resumption-client
+
+[2-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[3-resumption]
+ssl_conf = 3-resumption-ssl
+
+[3-resumption-ssl]
+server = 3-resumption-server
+client = 3-resumption-client
+resume-server = 3-resumption-resume-server
+resume-client = 3-resumption-client
+
+[3-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[4-resumption]
+ssl_conf = 4-resumption-ssl
+
+[4-resumption-ssl]
+server = 4-resumption-server
+client = 4-resumption-client
+resume-server = 4-resumption-resume-server
+resume-client = 4-resumption-client
+
+[4-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[5-resumption]
+ssl_conf = 5-resumption-ssl
+
+[5-resumption-ssl]
+server = 5-resumption-server
+client = 5-resumption-client
+resume-server = 5-resumption-resume-server
+resume-client = 5-resumption-client
+
+[5-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[6-resumption]
+ssl_conf = 6-resumption-ssl
+
+[6-resumption-ssl]
+server = 6-resumption-server
+client = 6-resumption-client
+resume-server = 6-resumption-resume-server
+resume-client = 6-resumption-client
+
+[6-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[7-resumption]
+ssl_conf = 7-resumption-ssl
+
+[7-resumption-ssl]
+server = 7-resumption-server
+client = 7-resumption-client
+resume-server = 7-resumption-resume-server
+resume-client = 7-resumption-client
+
+[7-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[8-resumption]
+ssl_conf = 8-resumption-ssl
+
+[8-resumption-ssl]
+server = 8-resumption-server
+client = 8-resumption-client
+resume-server = 8-resumption-resume-server
+resume-client = 8-resumption-client
+
+[8-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[9-resumption]
+ssl_conf = 9-resumption-ssl
+
+[9-resumption-ssl]
+server = 9-resumption-server
+client = 9-resumption-client
+resume-server = 9-resumption-resume-server
+resume-client = 9-resumption-client
+
+[9-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[10-resumption]
+ssl_conf = 10-resumption-ssl
+
+[10-resumption-ssl]
+server = 10-resumption-server
+client = 10-resumption-client
+resume-server = 10-resumption-resume-server
+resume-client = 10-resumption-client
+
+[10-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[11-resumption]
+ssl_conf = 11-resumption-ssl
+
+[11-resumption-ssl]
+server = 11-resumption-server
+client = 11-resumption-client
+resume-server = 11-resumption-resume-server
+resume-client = 11-resumption-client
+
+[11-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[12-resumption]
+ssl_conf = 12-resumption-ssl
+
+[12-resumption-ssl]
+server = 12-resumption-server
+client = 12-resumption-client
+resume-server = 12-resumption-resume-server
+resume-client = 12-resumption-client
+
+[12-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[13-resumption]
+ssl_conf = 13-resumption-ssl
+
+[13-resumption-ssl]
+server = 13-resumption-server
+client = 13-resumption-client
+resume-server = 13-resumption-resume-server
+resume-client = 13-resumption-client
+
+[13-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[14-resumption]
+ssl_conf = 14-resumption-ssl
+
+[14-resumption-ssl]
+server = 14-resumption-server
+client = 14-resumption-client
+resume-server = 14-resumption-resume-server
+resume-client = 14-resumption-client
+
+[14-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[15-resumption]
+ssl_conf = 15-resumption-ssl
+
+[15-resumption-ssl]
+server = 15-resumption-server
+client = 15-resumption-client
+resume-server = 15-resumption-resume-server
+resume-client = 15-resumption-client
+
+[15-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[16-resumption]
+ssl_conf = 16-resumption-ssl
+
+[16-resumption-ssl]
+server = 16-resumption-server
+client = 16-resumption-client
+resume-server = 16-resumption-resume-server
+resume-client = 16-resumption-client
+
+[16-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-16]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[17-resumption]
+ssl_conf = 17-resumption-ssl
+
+[17-resumption-ssl]
+server = 17-resumption-server
+client = 17-resumption-client
+resume-server = 17-resumption-resume-server
+resume-client = 17-resumption-client
+
+[17-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[17-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[17-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-17]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[18-resumption]
+ssl_conf = 18-resumption-ssl
+
+[18-resumption-ssl]
+server = 18-resumption-server
+client = 18-resumption-client
+resume-server = 18-resumption-resume-server
+resume-client = 18-resumption-client
+
+[18-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-18]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[19-resumption]
+ssl_conf = 19-resumption-ssl
+
+[19-resumption-ssl]
+server = 19-resumption-server
+client = 19-resumption-client
+resume-server = 19-resumption-resume-server
+resume-client = 19-resumption-client
+
+[19-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[19-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[19-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-19]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[20-resumption]
+ssl_conf = 20-resumption-ssl
+
+[20-resumption-ssl]
+server = 20-resumption-server
+client = 20-resumption-client
+resume-server = 20-resumption-resume-server
+resume-client = 20-resumption-client
+
+[20-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[20-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[20-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-20]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[21-resumption]
+ssl_conf = 21-resumption-ssl
+
+[21-resumption-ssl]
+server = 21-resumption-server
+client = 21-resumption-client
+resume-server = 21-resumption-resume-server
+resume-client = 21-resumption-client
+
+[21-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[21-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[21-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-21]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[22-resumption]
+ssl_conf = 22-resumption-ssl
+
+[22-resumption-ssl]
+server = 22-resumption-server
+client = 22-resumption-client
+resume-server = 22-resumption-resume-server
+resume-client = 22-resumption-client
+
+[22-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[22-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[22-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-22]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[23-resumption]
+ssl_conf = 23-resumption-ssl
+
+[23-resumption-ssl]
+server = 23-resumption-server
+client = 23-resumption-client
+resume-server = 23-resumption-resume-server
+resume-client = 23-resumption-client
+
+[23-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[23-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[23-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-23]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[24-resumption]
+ssl_conf = 24-resumption-ssl
+
+[24-resumption-ssl]
+server = 24-resumption-server
+client = 24-resumption-client
+resume-server = 24-resumption-resume-server
+resume-client = 24-resumption-client
+
+[24-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[24-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[24-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-24]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[25-resumption]
+ssl_conf = 25-resumption-ssl
+
+[25-resumption-ssl]
+server = 25-resumption-server
+client = 25-resumption-client
+resume-server = 25-resumption-resume-server
+resume-client = 25-resumption-client
+
+[25-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[25-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[25-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-25]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[26-resumption]
+ssl_conf = 26-resumption-ssl
+
+[26-resumption-ssl]
+server = 26-resumption-server
+client = 26-resumption-client
+resume-server = 26-resumption-resume-server
+resume-client = 26-resumption-client
+
+[26-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[26-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[26-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-26]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[27-resumption]
+ssl_conf = 27-resumption-ssl
+
+[27-resumption-ssl]
+server = 27-resumption-server
+client = 27-resumption-client
+resume-server = 27-resumption-resume-server
+resume-client = 27-resumption-client
+
+[27-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[27-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[27-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-27]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[28-resumption]
+ssl_conf = 28-resumption-ssl
+
+[28-resumption-ssl]
+server = 28-resumption-server
+client = 28-resumption-client
+resume-server = 28-resumption-resume-server
+resume-client = 28-resumption-client
+
+[28-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[28-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[28-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-28]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[29-resumption]
+ssl_conf = 29-resumption-ssl
+
+[29-resumption-ssl]
+server = 29-resumption-server
+client = 29-resumption-client
+resume-server = 29-resumption-resume-server
+resume-client = 29-resumption-client
+
+[29-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[29-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[29-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-29]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[30-resumption]
+ssl_conf = 30-resumption-ssl
+
+[30-resumption-ssl]
+server = 30-resumption-server
+client = 30-resumption-client
+resume-server = 30-resumption-resume-server
+resume-client = 30-resumption-client
+
+[30-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[30-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[30-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-30]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[31-resumption]
+ssl_conf = 31-resumption-ssl
+
+[31-resumption-ssl]
+server = 31-resumption-server
+client = 31-resumption-client
+resume-server = 31-resumption-resume-server
+resume-client = 31-resumption-client
+
+[31-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[31-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[31-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-31]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[32-resumption]
+ssl_conf = 32-resumption-ssl
+
+[32-resumption-ssl]
+server = 32-resumption-server
+client = 32-resumption-client
+resume-server = 32-resumption-server
+resume-client = 32-resumption-resume-client
+
+[32-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[32-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[32-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-32]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[33-resumption]
+ssl_conf = 33-resumption-ssl
+
+[33-resumption-ssl]
+server = 33-resumption-server
+client = 33-resumption-client
+resume-server = 33-resumption-server
+resume-client = 33-resumption-resume-client
+
+[33-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[33-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[33-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-33]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[34-resumption]
+ssl_conf = 34-resumption-ssl
+
+[34-resumption-ssl]
+server = 34-resumption-server
+client = 34-resumption-client
+resume-server = 34-resumption-server
+resume-client = 34-resumption-resume-client
+
+[34-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[34-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[34-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-34]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[35-resumption]
+ssl_conf = 35-resumption-ssl
+
+[35-resumption-ssl]
+server = 35-resumption-server
+client = 35-resumption-client
+resume-server = 35-resumption-server
+resume-client = 35-resumption-resume-client
+
+[35-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[35-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[35-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-35]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[36-resumption]
+ssl_conf = 36-resumption-ssl
+
+[36-resumption-ssl]
+server = 36-resumption-server
+client = 36-resumption-client
+resume-server = 36-resumption-server
+resume-client = 36-resumption-resume-client
+
+[36-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[36-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[36-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-36]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[37-resumption]
+ssl_conf = 37-resumption-ssl
+
+[37-resumption-ssl]
+server = 37-resumption-server
+client = 37-resumption-client
+resume-server = 37-resumption-server
+resume-client = 37-resumption-resume-client
+
+[37-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[37-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[37-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-37]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[38-resumption]
+ssl_conf = 38-resumption-ssl
+
+[38-resumption-ssl]
+server = 38-resumption-server
+client = 38-resumption-client
+resume-server = 38-resumption-server
+resume-client = 38-resumption-resume-client
+
+[38-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[38-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[38-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-38]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[39-resumption]
+ssl_conf = 39-resumption-ssl
+
+[39-resumption-ssl]
+server = 39-resumption-server
+client = 39-resumption-client
+resume-server = 39-resumption-server
+resume-client = 39-resumption-resume-client
+
+[39-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[39-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[39-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-39]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[40-resumption]
+ssl_conf = 40-resumption-ssl
+
+[40-resumption-ssl]
+server = 40-resumption-server
+client = 40-resumption-client
+resume-server = 40-resumption-server
+resume-client = 40-resumption-resume-client
+
+[40-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[40-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[40-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-40]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[41-resumption]
+ssl_conf = 41-resumption-ssl
+
+[41-resumption-ssl]
+server = 41-resumption-server
+client = 41-resumption-client
+resume-server = 41-resumption-server
+resume-client = 41-resumption-resume-client
+
+[41-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[41-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[41-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-41]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[42-resumption]
+ssl_conf = 42-resumption-ssl
+
+[42-resumption-ssl]
+server = 42-resumption-server
+client = 42-resumption-client
+resume-server = 42-resumption-server
+resume-client = 42-resumption-resume-client
+
+[42-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[42-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[42-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-42]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[43-resumption]
+ssl_conf = 43-resumption-ssl
+
+[43-resumption-ssl]
+server = 43-resumption-server
+client = 43-resumption-client
+resume-server = 43-resumption-server
+resume-client = 43-resumption-resume-client
+
+[43-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[43-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[43-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-43]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[44-resumption]
+ssl_conf = 44-resumption-ssl
+
+[44-resumption-ssl]
+server = 44-resumption-server
+client = 44-resumption-client
+resume-server = 44-resumption-server
+resume-client = 44-resumption-resume-client
+
+[44-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[44-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[44-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-44]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[45-resumption]
+ssl_conf = 45-resumption-ssl
+
+[45-resumption-ssl]
+server = 45-resumption-server
+client = 45-resumption-client
+resume-server = 45-resumption-server
+resume-client = 45-resumption-resume-client
+
+[45-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[45-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[45-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-45]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[46-resumption]
+ssl_conf = 46-resumption-ssl
+
+[46-resumption-ssl]
+server = 46-resumption-server
+client = 46-resumption-client
+resume-server = 46-resumption-server
+resume-client = 46-resumption-resume-client
+
+[46-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[46-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[46-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-46]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[47-resumption]
+ssl_conf = 47-resumption-ssl
+
+[47-resumption-ssl]
+server = 47-resumption-server
+client = 47-resumption-client
+resume-server = 47-resumption-server
+resume-client = 47-resumption-resume-client
+
+[47-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[47-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+MinProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[47-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-47]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[48-resumption]
+ssl_conf = 48-resumption-ssl
+
+[48-resumption-ssl]
+server = 48-resumption-server
+client = 48-resumption-client
+resume-server = 48-resumption-server
+resume-client = 48-resumption-resume-client
+
+[48-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[48-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[48-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-48]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[49-resumption]
+ssl_conf = 49-resumption-ssl
+
+[49-resumption-ssl]
+server = 49-resumption-server
+client = 49-resumption-client
+resume-server = 49-resumption-server
+resume-client = 49-resumption-resume-client
+
+[49-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[49-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[49-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-49]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[50-resumption]
+ssl_conf = 50-resumption-ssl
+
+[50-resumption-ssl]
+server = 50-resumption-server
+client = 50-resumption-client
+resume-server = 50-resumption-server
+resume-client = 50-resumption-resume-client
+
+[50-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[50-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[50-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-50]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[51-resumption]
+ssl_conf = 51-resumption-ssl
+
+[51-resumption-ssl]
+server = 51-resumption-server
+client = 51-resumption-client
+resume-server = 51-resumption-server
+resume-client = 51-resumption-resume-client
+
+[51-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[51-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[51-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-51]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[52-resumption]
+ssl_conf = 52-resumption-ssl
+
+[52-resumption-ssl]
+server = 52-resumption-server
+client = 52-resumption-client
+resume-server = 52-resumption-server
+resume-client = 52-resumption-resume-client
+
+[52-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[52-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[52-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-52]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[53-resumption]
+ssl_conf = 53-resumption-ssl
+
+[53-resumption-ssl]
+server = 53-resumption-server
+client = 53-resumption-client
+resume-server = 53-resumption-server
+resume-client = 53-resumption-resume-client
+
+[53-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[53-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[53-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-53]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[54-resumption]
+ssl_conf = 54-resumption-ssl
+
+[54-resumption-ssl]
+server = 54-resumption-server
+client = 54-resumption-client
+resume-server = 54-resumption-server
+resume-client = 54-resumption-resume-client
+
+[54-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[54-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[54-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-54]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[55-resumption]
+ssl_conf = 55-resumption-ssl
+
+[55-resumption-ssl]
+server = 55-resumption-server
+client = 55-resumption-client
+resume-server = 55-resumption-server
+resume-client = 55-resumption-resume-client
+
+[55-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[55-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[55-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-55]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[56-resumption]
+ssl_conf = 56-resumption-ssl
+
+[56-resumption-ssl]
+server = 56-resumption-server
+client = 56-resumption-client
+resume-server = 56-resumption-server
+resume-client = 56-resumption-resume-client
+
+[56-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[56-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[56-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-56]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[57-resumption]
+ssl_conf = 57-resumption-ssl
+
+[57-resumption-ssl]
+server = 57-resumption-server
+client = 57-resumption-client
+resume-server = 57-resumption-server
+resume-client = 57-resumption-resume-client
+
+[57-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[57-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[57-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-57]
+ExpectedProtocol = TLSv1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[58-resumption]
+ssl_conf = 58-resumption-ssl
+
+[58-resumption-ssl]
+server = 58-resumption-server
+client = 58-resumption-client
+resume-server = 58-resumption-server
+resume-client = 58-resumption-resume-client
+
+[58-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[58-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[58-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-58]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[59-resumption]
+ssl_conf = 59-resumption-ssl
+
+[59-resumption-ssl]
+server = 59-resumption-server
+client = 59-resumption-client
+resume-server = 59-resumption-server
+resume-client = 59-resumption-resume-client
+
+[59-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[59-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[59-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-59]
+ExpectedProtocol = TLSv1.1
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[60-resumption]
+ssl_conf = 60-resumption-ssl
+
+[60-resumption-ssl]
+server = 60-resumption-server
+client = 60-resumption-client
+resume-server = 60-resumption-server
+resume-client = 60-resumption-resume-client
+
+[60-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[60-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[60-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-60]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[61-resumption]
+ssl_conf = 61-resumption-ssl
+
+[61-resumption-ssl]
+server = 61-resumption-server
+client = 61-resumption-client
+resume-server = 61-resumption-server
+resume-client = 61-resumption-resume-client
+
+[61-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[61-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[61-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-61]
+ExpectedProtocol = TLSv1.2
+HandshakeMode = Resume
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[62-resumption]
+ssl_conf = 62-resumption-ssl
+
+[62-resumption-ssl]
+server = 62-resumption-server
+client = 62-resumption-client
+resume-server = 62-resumption-server
+resume-client = 62-resumption-resume-client
+
+[62-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[62-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[62-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-62]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[63-resumption]
+ssl_conf = 63-resumption-ssl
+
+[63-resumption-ssl]
+server = 63-resumption-server
+client = 63-resumption-client
+resume-server = 63-resumption-server
+resume-client = 63-resumption-resume-client
+
+[63-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[63-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[63-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-63]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[64-resumption-with-hrr]
+ssl_conf = 64-resumption-with-hrr-ssl
+
+[64-resumption-with-hrr-ssl]
+server = 64-resumption-with-hrr-server
+client = 64-resumption-with-hrr-client
+resume-server = 64-resumption-with-hrr-server
+resume-client = 64-resumption-with-hrr-resume-client
+
+[64-resumption-with-hrr-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = P-256
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[64-resumption-with-hrr-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[64-resumption-with-hrr-resume-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-64]
+ExpectedProtocol = TLSv1.3
+HandshakeMode = Resume
+Method = TLS
+ResumptionExpected = Yes
+
+
diff --git a/test/ssl-tests/10-resumption.cnf.in b/test/ssl-tests/10-resumption.cnf.in
new file mode 100644
index 000000000000..93621f0e50b5
--- /dev/null
+++ b/test/ssl-tests/10-resumption.cnf.in
@@ -0,0 +1,21 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test version negotiation upon resumption.
+
+use strict;
+use warnings;
+
+package ssltests;
+
+use protocol_version;
+
+our $fips_mode;
+
+our @tests = generate_resumption_tests("TLS", $fips_mode);
diff --git a/test/ssl-tests/11-dtls_resumption.cnf b/test/ssl-tests/11-dtls_resumption.cnf
new file mode 100644
index 000000000000..424e3d425b0e
--- /dev/null
+++ b/test/ssl-tests/11-dtls_resumption.cnf
@@ -0,0 +1,620 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 16
+
+test-0 = 0-resumption
+test-1 = 1-resumption
+test-2 = 2-resumption
+test-3 = 3-resumption
+test-4 = 4-resumption
+test-5 = 5-resumption
+test-6 = 6-resumption
+test-7 = 7-resumption
+test-8 = 8-resumption
+test-9 = 9-resumption
+test-10 = 10-resumption
+test-11 = 11-resumption
+test-12 = 12-resumption
+test-13 = 13-resumption
+test-14 = 14-resumption
+test-15 = 15-resumption
+# ===========================================================
+
+[0-resumption]
+ssl_conf = 0-resumption-ssl
+
+[0-resumption-ssl]
+server = 0-resumption-server
+client = 0-resumption-client
+resume-server = 0-resumption-resume-server
+resume-client = 0-resumption-client
+
+[0-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedProtocol = DTLSv1
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[1-resumption]
+ssl_conf = 1-resumption-ssl
+
+[1-resumption-ssl]
+server = 1-resumption-server
+client = 1-resumption-client
+resume-server = 1-resumption-resume-server
+resume-client = 1-resumption-client
+
+[1-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedProtocol = DTLSv1
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[2-resumption]
+ssl_conf = 2-resumption-ssl
+
+[2-resumption-ssl]
+server = 2-resumption-server
+client = 2-resumption-client
+resume-server = 2-resumption-resume-server
+resume-client = 2-resumption-client
+
+[2-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedProtocol = DTLSv1.2
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[3-resumption]
+ssl_conf = 3-resumption-ssl
+
+[3-resumption-ssl]
+server = 3-resumption-server
+client = 3-resumption-client
+resume-server = 3-resumption-resume-server
+resume-client = 3-resumption-client
+
+[3-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedProtocol = DTLSv1.2
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[4-resumption]
+ssl_conf = 4-resumption-ssl
+
+[4-resumption-ssl]
+server = 4-resumption-server
+client = 4-resumption-client
+resume-server = 4-resumption-resume-server
+resume-client = 4-resumption-client
+
+[4-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedProtocol = DTLSv1
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[5-resumption]
+ssl_conf = 5-resumption-ssl
+
+[5-resumption-ssl]
+server = 5-resumption-server
+client = 5-resumption-client
+resume-server = 5-resumption-resume-server
+resume-client = 5-resumption-client
+
+[5-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedProtocol = DTLSv1
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[6-resumption]
+ssl_conf = 6-resumption-ssl
+
+[6-resumption-ssl]
+server = 6-resumption-server
+client = 6-resumption-client
+resume-server = 6-resumption-resume-server
+resume-client = 6-resumption-client
+
+[6-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedProtocol = DTLSv1.2
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[7-resumption]
+ssl_conf = 7-resumption-ssl
+
+[7-resumption-ssl]
+server = 7-resumption-server
+client = 7-resumption-client
+resume-server = 7-resumption-resume-server
+resume-client = 7-resumption-client
+
+[7-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-resumption-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedProtocol = DTLSv1.2
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[8-resumption]
+ssl_conf = 8-resumption-ssl
+
+[8-resumption-ssl]
+server = 8-resumption-server
+client = 8-resumption-client
+resume-server = 8-resumption-server
+resume-client = 8-resumption-resume-client
+
+[8-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[8-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedProtocol = DTLSv1
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[9-resumption]
+ssl_conf = 9-resumption-ssl
+
+[9-resumption-ssl]
+server = 9-resumption-server
+client = 9-resumption-client
+resume-server = 9-resumption-server
+resume-client = 9-resumption-resume-client
+
+[9-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[9-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedProtocol = DTLSv1
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[10-resumption]
+ssl_conf = 10-resumption-ssl
+
+[10-resumption-ssl]
+server = 10-resumption-server
+client = 10-resumption-client
+resume-server = 10-resumption-server
+resume-client = 10-resumption-resume-client
+
+[10-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[10-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedProtocol = DTLSv1.2
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[11-resumption]
+ssl_conf = 11-resumption-ssl
+
+[11-resumption-ssl]
+server = 11-resumption-server
+client = 11-resumption-client
+resume-server = 11-resumption-server
+resume-client = 11-resumption-resume-client
+
+[11-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+MinProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[11-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedProtocol = DTLSv1.2
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[12-resumption]
+ssl_conf = 12-resumption-ssl
+
+[12-resumption-ssl]
+server = 12-resumption-server
+client = 12-resumption-client
+resume-server = 12-resumption-server
+resume-client = 12-resumption-resume-client
+
+[12-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[12-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedProtocol = DTLSv1
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[13-resumption]
+ssl_conf = 13-resumption-ssl
+
+[13-resumption-ssl]
+server = 13-resumption-server
+client = 13-resumption-client
+resume-server = 13-resumption-server
+resume-client = 13-resumption-resume-client
+
+[13-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[13-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedProtocol = DTLSv1
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[14-resumption]
+ssl_conf = 14-resumption-ssl
+
+[14-resumption-ssl]
+server = 14-resumption-server
+client = 14-resumption-client
+resume-server = 14-resumption-server
+resume-client = 14-resumption-resume-client
+
+[14-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[14-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedProtocol = DTLSv1.2
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[15-resumption]
+ssl_conf = 15-resumption-ssl
+
+[15-resumption-ssl]
+server = 15-resumption-server
+client = 15-resumption-client
+resume-server = 15-resumption-server
+resume-client = 15-resumption-resume-client
+
+[15-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-resumption-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+MinProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[15-resumption-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+MaxProtocol = DTLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedProtocol = DTLSv1.2
+HandshakeMode = Resume
+Method = DTLS
+ResumptionExpected = Yes
+
+
diff --git a/test/ssl-tests/11-dtls_resumption.cnf.in b/test/ssl-tests/11-dtls_resumption.cnf.in
new file mode 100644
index 000000000000..211f43d9d018
--- /dev/null
+++ b/test/ssl-tests/11-dtls_resumption.cnf.in
@@ -0,0 +1,21 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test version negotiation upon resumption.
+
+use strict;
+use warnings;
+
+package ssltests;
+
+use protocol_version;
+
+our $fips_mode;
+
+our @tests = generate_resumption_tests("DTLS", $fips_mode);
diff --git a/test/ssl-tests/12-ct.cnf b/test/ssl-tests/12-ct.cnf
new file mode 100644
index 000000000000..2e6e9dea6757
--- /dev/null
+++ b/test/ssl-tests/12-ct.cnf
@@ -0,0 +1,191 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 6
+
+test-0 = 0-ct-permissive-without-scts
+test-1 = 1-ct-permissive-with-scts
+test-2 = 2-ct-strict-without-scts
+test-3 = 3-ct-strict-with-scts
+test-4 = 4-ct-permissive-resumption
+test-5 = 5-ct-strict-resumption
+# ===========================================================
+
+[0-ct-permissive-without-scts]
+ssl_conf = 0-ct-permissive-without-scts-ssl
+
+[0-ct-permissive-without-scts-ssl]
+server = 0-ct-permissive-without-scts-server
+client = 0-ct-permissive-without-scts-client
+
+[0-ct-permissive-without-scts-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-ct-permissive-without-scts-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+client = 0-ct-permissive-without-scts-client-extra
+
+[0-ct-permissive-without-scts-client-extra]
+CTValidation = Permissive
+
+
+# ===========================================================
+
+[1-ct-permissive-with-scts]
+ssl_conf = 1-ct-permissive-with-scts-ssl
+
+[1-ct-permissive-with-scts-ssl]
+server = 1-ct-permissive-with-scts-server
+client = 1-ct-permissive-with-scts-client
+
+[1-ct-permissive-with-scts-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1-key.pem
+
+[1-ct-permissive-with-scts-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1_issuer.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+client = 1-ct-permissive-with-scts-client-extra
+
+[1-ct-permissive-with-scts-client-extra]
+CTValidation = Permissive
+
+
+# ===========================================================
+
+[2-ct-strict-without-scts]
+ssl_conf = 2-ct-strict-without-scts-ssl
+
+[2-ct-strict-without-scts-ssl]
+server = 2-ct-strict-without-scts-server
+client = 2-ct-strict-without-scts-client
+
+[2-ct-strict-without-scts-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-ct-strict-without-scts-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedClientAlert = HandshakeFailure
+ExpectedResult = ClientFail
+client = 2-ct-strict-without-scts-client-extra
+
+[2-ct-strict-without-scts-client-extra]
+CTValidation = Strict
+
+
+# ===========================================================
+
+[3-ct-strict-with-scts]
+ssl_conf = 3-ct-strict-with-scts-ssl
+
+[3-ct-strict-with-scts-ssl]
+server = 3-ct-strict-with-scts-server
+client = 3-ct-strict-with-scts-client
+
+[3-ct-strict-with-scts-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1-key.pem
+
+[3-ct-strict-with-scts-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1_issuer.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+client = 3-ct-strict-with-scts-client-extra
+
+[3-ct-strict-with-scts-client-extra]
+CTValidation = Strict
+
+
+# ===========================================================
+
+[4-ct-permissive-resumption]
+ssl_conf = 4-ct-permissive-resumption-ssl
+
+[4-ct-permissive-resumption-ssl]
+server = 4-ct-permissive-resumption-server
+client = 4-ct-permissive-resumption-client
+resume-server = 4-ct-permissive-resumption-server
+resume-client = 4-ct-permissive-resumption-client
+
+[4-ct-permissive-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1-key.pem
+
+[4-ct-permissive-resumption-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1_issuer.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = Success
+HandshakeMode = Resume
+ResumptionExpected = Yes
+client = 4-ct-permissive-resumption-client-extra
+resume-client = 4-ct-permissive-resumption-client-extra
+
+[4-ct-permissive-resumption-client-extra]
+CTValidation = Permissive
+
+
+# ===========================================================
+
+[5-ct-strict-resumption]
+ssl_conf = 5-ct-strict-resumption-ssl
+
+[5-ct-strict-resumption-ssl]
+server = 5-ct-strict-resumption-server
+client = 5-ct-strict-resumption-client
+resume-server = 5-ct-strict-resumption-server
+resume-client = 5-ct-strict-resumption-resume-client
+
+[5-ct-strict-resumption-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1-key.pem
+
+[5-ct-strict-resumption-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/embeddedSCTs1_issuer.pem
+VerifyMode = Peer
+
+[5-ct-strict-resumption-resume-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = Success
+HandshakeMode = Resume
+ResumptionExpected = Yes
+client = 5-ct-strict-resumption-client-extra
+resume-client = 5-ct-strict-resumption-resume-client-extra
+
+[5-ct-strict-resumption-client-extra]
+CTValidation = Strict
+
+[5-ct-strict-resumption-resume-client-extra]
+CTValidation = Strict
+
+
diff --git a/test/ssl-tests/12-ct.cnf.in b/test/ssl-tests/12-ct.cnf.in
new file mode 100644
index 000000000000..ddafd3fc4cda
--- /dev/null
+++ b/test/ssl-tests/12-ct.cnf.in
@@ -0,0 +1,121 @@
+# -*- mode: perl; -*-
+# Copyright 2016-2022 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
+
+
+## Test version negotiation
+
+use strict;
+use warnings;
+
+package ssltests;
+
+
+our @tests = (
+ {
+ name => "ct-permissive-without-scts",
+ server => {
+ },
+ client => {
+ extra => {
+ "CTValidation" => "Permissive",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "ct-permissive-with-scts",
+ server => {
+ "Certificate" => test_pem("embeddedSCTs1.pem"),
+ "PrivateKey" => test_pem("embeddedSCTs1-key.pem"),
+ },
+ client => {
+ "VerifyCAFile" => test_pem("embeddedSCTs1_issuer.pem"),
+ extra => {
+ "CTValidation" => "Permissive",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "ct-strict-without-scts",
+ server => {
+ },
+ client => {
+ extra => {
+ "CTValidation" => "Strict",
+ },
+ },
+ test => {
+ "ExpectedResult" => "ClientFail",
+ "ExpectedClientAlert" => "HandshakeFailure",
+ },
+ },
+ {
+ name => "ct-strict-with-scts",
+ server => {
+ "Certificate" => test_pem("embeddedSCTs1.pem"),
+ "PrivateKey" => test_pem("embeddedSCTs1-key.pem"),
+ },
+ client => {
+ "VerifyCAFile" => test_pem("embeddedSCTs1_issuer.pem"),
+ extra => {
+ "CTValidation" => "Strict",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "ct-permissive-resumption",
+ server => {
+ "Certificate" => test_pem("embeddedSCTs1.pem"),
+ "PrivateKey" => test_pem("embeddedSCTs1-key.pem"),
+ },
+ client => {
+ "VerifyCAFile" => test_pem("embeddedSCTs1_issuer.pem"),
+ extra => {
+ "CTValidation" => "Permissive",
+ },
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "ct-strict-resumption",
+ server => {
+ "Certificate" => test_pem("embeddedSCTs1.pem"),
+ "PrivateKey" => test_pem("embeddedSCTs1-key.pem"),
+ },
+ client => {
+ "VerifyCAFile" => test_pem("embeddedSCTs1_issuer.pem"),
+ extra => {
+ "CTValidation" => "Strict",
+ },
+ },
+ # SCTs are not present during resumption, so the resumption
+ # should succeed.
+ resume_client => {
+ extra => {
+ "CTValidation" => "Strict",
+ },
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ "ExpectedResult" => "Success",
+ },
+ },
+);
diff --git a/test/ssl-tests/13-fragmentation.cnf b/test/ssl-tests/13-fragmentation.cnf
new file mode 100644
index 000000000000..649387c7b739
--- /dev/null
+++ b/test/ssl-tests/13-fragmentation.cnf
@@ -0,0 +1,577 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 22
+
+test-0 = 0-one-fragment-minus-app-data
+test-1 = 1-one-fragment-app-data
+test-2 = 2-one-fragment-plus-app-data
+test-3 = 3-small-app-data
+test-4 = 4-small-app-data-large-fragment-size
+test-5 = 5-medium-app-data
+test-6 = 6-medium-plus-app-data
+test-7 = 7-large-app-data
+test-8 = 8-large-app-data-large-fragment-size
+test-9 = 9-large-app-data-odd-fragment-size
+test-10 = 10-large-app-data-aes-sha1-multibuffer
+test-11 = 11-large-app-data-aes-sha2-multibuffer
+test-12 = 12-large-app-data-aes-sha1-multibuffer-odd-fragment
+test-13 = 13-large-app-data-aes-sha2-multibuffer-odd-fragment
+test-14 = 14-small-app-data-aes-sha1-multibuffer
+test-15 = 15-small-app-data-aes-sha2-multibuffer
+test-16 = 16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled
+test-17 = 17-Maximum Fragment Len extension equal FragmentSize to 2048
+test-18 = 18-Maximum Fragment Len extension 512 lower than FragmentSize 1024
+test-19 = 19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024
+test-20 = 20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048
+test-21 = 21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024
+# ===========================================================
+
+[0-one-fragment-minus-app-data]
+ssl_conf = 0-one-fragment-minus-app-data-ssl
+
+[0-one-fragment-minus-app-data-ssl]
+server = 0-one-fragment-minus-app-data-server
+client = 0-one-fragment-minus-app-data-client
+
+[0-one-fragment-minus-app-data-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-one-fragment-minus-app-data-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ApplicationData = 511
+
+
+# ===========================================================
+
+[1-one-fragment-app-data]
+ssl_conf = 1-one-fragment-app-data-ssl
+
+[1-one-fragment-app-data-ssl]
+server = 1-one-fragment-app-data-server
+client = 1-one-fragment-app-data-client
+
+[1-one-fragment-app-data-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-one-fragment-app-data-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ApplicationData = 512
+
+
+# ===========================================================
+
+[2-one-fragment-plus-app-data]
+ssl_conf = 2-one-fragment-plus-app-data-ssl
+
+[2-one-fragment-plus-app-data-ssl]
+server = 2-one-fragment-plus-app-data-server
+client = 2-one-fragment-plus-app-data-client
+
+[2-one-fragment-plus-app-data-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-one-fragment-plus-app-data-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ApplicationData = 513
+
+
+# ===========================================================
+
+[3-small-app-data]
+ssl_conf = 3-small-app-data-ssl
+
+[3-small-app-data-ssl]
+server = 3-small-app-data-server
+client = 3-small-app-data-client
+
+[3-small-app-data-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-small-app-data-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ApplicationData = 4097
+
+
+# ===========================================================
+
+[4-small-app-data-large-fragment-size]
+ssl_conf = 4-small-app-data-large-fragment-size-ssl
+
+[4-small-app-data-large-fragment-size-ssl]
+server = 4-small-app-data-large-fragment-size-server
+client = 4-small-app-data-large-fragment-size-client
+
+[4-small-app-data-large-fragment-size-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-small-app-data-large-fragment-size-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ApplicationData = 4097
+MaxFragmentSize = 16384
+
+
+# ===========================================================
+
+[5-medium-app-data]
+ssl_conf = 5-medium-app-data-ssl
+
+[5-medium-app-data-ssl]
+server = 5-medium-app-data-server
+client = 5-medium-app-data-client
+
+[5-medium-app-data-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-medium-app-data-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ApplicationData = 32775
+
+
+# ===========================================================
+
+[6-medium-plus-app-data]
+ssl_conf = 6-medium-plus-app-data-ssl
+
+[6-medium-plus-app-data-ssl]
+server = 6-medium-plus-app-data-server
+client = 6-medium-plus-app-data-client
+
+[6-medium-plus-app-data-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-medium-plus-app-data-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ApplicationData = 131069
+
+
+# ===========================================================
+
+[7-large-app-data]
+ssl_conf = 7-large-app-data-ssl
+
+[7-large-app-data-ssl]
+server = 7-large-app-data-server
+client = 7-large-app-data-client
+
+[7-large-app-data-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-large-app-data-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ApplicationData = 1048576
+
+
+# ===========================================================
+
+[8-large-app-data-large-fragment-size]
+ssl_conf = 8-large-app-data-large-fragment-size-ssl
+
+[8-large-app-data-large-fragment-size-ssl]
+server = 8-large-app-data-large-fragment-size-server
+client = 8-large-app-data-large-fragment-size-client
+
+[8-large-app-data-large-fragment-size-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-large-app-data-large-fragment-size-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ApplicationData = 1048576
+MaxFragmentSize = 16384
+
+
+# ===========================================================
+
+[9-large-app-data-odd-fragment-size]
+ssl_conf = 9-large-app-data-odd-fragment-size-ssl
+
+[9-large-app-data-odd-fragment-size-ssl]
+server = 9-large-app-data-odd-fragment-size-server
+client = 9-large-app-data-odd-fragment-size-client
+
+[9-large-app-data-odd-fragment-size-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-large-app-data-odd-fragment-size-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ApplicationData = 1048576
+MaxFragmentSize = 5115
+
+
+# ===========================================================
+
+[10-large-app-data-aes-sha1-multibuffer]
+ssl_conf = 10-large-app-data-aes-sha1-multibuffer-ssl
+
+[10-large-app-data-aes-sha1-multibuffer-ssl]
+server = 10-large-app-data-aes-sha1-multibuffer-server
+client = 10-large-app-data-aes-sha1-multibuffer-client
+
+[10-large-app-data-aes-sha1-multibuffer-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-large-app-data-aes-sha1-multibuffer-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ApplicationData = 1048576
+MaxFragmentSize = 4096
+
+
+# ===========================================================
+
+[11-large-app-data-aes-sha2-multibuffer]
+ssl_conf = 11-large-app-data-aes-sha2-multibuffer-ssl
+
+[11-large-app-data-aes-sha2-multibuffer-ssl]
+server = 11-large-app-data-aes-sha2-multibuffer-server
+client = 11-large-app-data-aes-sha2-multibuffer-client
+
+[11-large-app-data-aes-sha2-multibuffer-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-large-app-data-aes-sha2-multibuffer-client]
+CipherString = AES128-SHA256
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ApplicationData = 1048576
+MaxFragmentSize = 4096
+
+
+# ===========================================================
+
+[12-large-app-data-aes-sha1-multibuffer-odd-fragment]
+ssl_conf = 12-large-app-data-aes-sha1-multibuffer-odd-fragment-ssl
+
+[12-large-app-data-aes-sha1-multibuffer-odd-fragment-ssl]
+server = 12-large-app-data-aes-sha1-multibuffer-odd-fragment-server
+client = 12-large-app-data-aes-sha1-multibuffer-odd-fragment-client
+
+[12-large-app-data-aes-sha1-multibuffer-odd-fragment-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-large-app-data-aes-sha1-multibuffer-odd-fragment-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ApplicationData = 1048579
+MaxFragmentSize = 5115
+
+
+# ===========================================================
+
+[13-large-app-data-aes-sha2-multibuffer-odd-fragment]
+ssl_conf = 13-large-app-data-aes-sha2-multibuffer-odd-fragment-ssl
+
+[13-large-app-data-aes-sha2-multibuffer-odd-fragment-ssl]
+server = 13-large-app-data-aes-sha2-multibuffer-odd-fragment-server
+client = 13-large-app-data-aes-sha2-multibuffer-odd-fragment-client
+
+[13-large-app-data-aes-sha2-multibuffer-odd-fragment-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-large-app-data-aes-sha2-multibuffer-odd-fragment-client]
+CipherString = AES128-SHA256
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ApplicationData = 1048573
+MaxFragmentSize = 5125
+
+
+# ===========================================================
+
+[14-small-app-data-aes-sha1-multibuffer]
+ssl_conf = 14-small-app-data-aes-sha1-multibuffer-ssl
+
+[14-small-app-data-aes-sha1-multibuffer-ssl]
+server = 14-small-app-data-aes-sha1-multibuffer-server
+client = 14-small-app-data-aes-sha1-multibuffer-client
+
+[14-small-app-data-aes-sha1-multibuffer-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-small-app-data-aes-sha1-multibuffer-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ApplicationData = 4096
+MaxFragmentSize = 4096
+
+
+# ===========================================================
+
+[15-small-app-data-aes-sha2-multibuffer]
+ssl_conf = 15-small-app-data-aes-sha2-multibuffer-ssl
+
+[15-small-app-data-aes-sha2-multibuffer-ssl]
+server = 15-small-app-data-aes-sha2-multibuffer-server
+client = 15-small-app-data-aes-sha2-multibuffer-client
+
+[15-small-app-data-aes-sha2-multibuffer-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-small-app-data-aes-sha2-multibuffer-client]
+CipherString = AES128-SHA256
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ApplicationData = 4096
+MaxFragmentSize = 4096
+
+
+# ===========================================================
+
+[16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled]
+ssl_conf = 16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled-ssl
+
+[16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled-ssl]
+server = 16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled-server
+client = 16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled-client
+
+[16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-16]
+ApplicationData = 3072
+MaxFragmentSize = 16384
+client = 16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled-client-extra
+
+[16-Maximum Fragment Len extension set to 1024 w. FragmentSize disabled-client-extra]
+MaxFragmentLenExt = 1024
+
+
+# ===========================================================
+
+[17-Maximum Fragment Len extension equal FragmentSize to 2048]
+ssl_conf = 17-Maximum Fragment Len extension equal FragmentSize to 2048-ssl
+
+[17-Maximum Fragment Len extension equal FragmentSize to 2048-ssl]
+server = 17-Maximum Fragment Len extension equal FragmentSize to 2048-server
+client = 17-Maximum Fragment Len extension equal FragmentSize to 2048-client
+
+[17-Maximum Fragment Len extension equal FragmentSize to 2048-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[17-Maximum Fragment Len extension equal FragmentSize to 2048-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-17]
+ApplicationData = 3072
+MaxFragmentSize = 2048
+client = 17-Maximum Fragment Len extension equal FragmentSize to 2048-client-extra
+
+[17-Maximum Fragment Len extension equal FragmentSize to 2048-client-extra]
+MaxFragmentLenExt = 2048
+
+
+# ===========================================================
+
+[18-Maximum Fragment Len extension 512 lower than FragmentSize 1024]
+ssl_conf = 18-Maximum Fragment Len extension 512 lower than FragmentSize 1024-ssl
+
+[18-Maximum Fragment Len extension 512 lower than FragmentSize 1024-ssl]
+server = 18-Maximum Fragment Len extension 512 lower than FragmentSize 1024-server
+client = 18-Maximum Fragment Len extension 512 lower than FragmentSize 1024-client
+
+[18-Maximum Fragment Len extension 512 lower than FragmentSize 1024-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-Maximum Fragment Len extension 512 lower than FragmentSize 1024-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-18]
+ApplicationData = 3072
+MaxFragmentSize = 1024
+client = 18-Maximum Fragment Len extension 512 lower than FragmentSize 1024-client-extra
+
+[18-Maximum Fragment Len extension 512 lower than FragmentSize 1024-client-extra]
+MaxFragmentLenExt = 512
+
+
+# ===========================================================
+
+[19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024]
+ssl_conf = 19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024-ssl
+
+[19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024-ssl]
+server = 19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024-server
+client = 19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024-client
+
+[19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-19]
+ApplicationData = 3072
+MaxFragmentSize = 1024
+client = 19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024-client-extra
+
+[19-Maximum Fragment Len extension 1024 lower than FragmentSize 1024-client-extra]
+MaxFragmentLenExt = 2048
+
+
+# ===========================================================
+
+[20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048]
+ssl_conf = 20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048-ssl
+
+[20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048-ssl]
+server = 20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048-server
+client = 20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048-client
+
+[20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-20]
+ApplicationData = 8196
+MaxFragmentSize = 2048
+client = 20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048-client-extra
+
+[20-Maximum Fragment Len extension 4096 greater than FragmentSize 2048-client-extra]
+MaxFragmentLenExt = 4096
+
+
+# ===========================================================
+
+[21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024]
+ssl_conf = 21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024-ssl
+
+[21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024-ssl]
+server = 21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024-server
+client = 21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024-client
+
+[21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-21]
+ApplicationData = 3072
+MaxFragmentSize = 1024
+client = 21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024-client-extra
+
+[21-Maximum Fragment Len extension 2048 greater than FragmentSize 1024-client-extra]
+MaxFragmentLenExt = 2048
+
+
diff --git a/test/ssl-tests/13-fragmentation.cnf.in b/test/ssl-tests/13-fragmentation.cnf.in
new file mode 100644
index 000000000000..5e3b0c6633d2
--- /dev/null
+++ b/test/ssl-tests/13-fragmentation.cnf.in
@@ -0,0 +1,268 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test packet fragmentation
+
+use strict;
+use warnings;
+
+package ssltests;
+
+
+our @tests = (
+ # Default fragment size is 512.
+ {
+ name => "one-fragment-minus-app-data",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 511,
+ }
+ },
+ {
+ name => "one-fragment-app-data",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 512,
+ }
+ },
+ {
+ name => "one-fragment-plus-app-data",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 513,
+ }
+ },
+ {
+ name => "small-app-data",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 4 * 1024 + 1,
+ }
+ },
+ {
+ name => "small-app-data-large-fragment-size",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 4 * 1024 + 1,
+ MaxFragmentSize => 16384,
+ }
+ },
+ {
+ name => "medium-app-data",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 32 * 1024 + 7,
+ }
+ },
+ # Exceeds the 64kB write buffer size.
+ {
+ name => "medium-plus-app-data",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 128 * 1024 - 3,
+ }
+ },
+ {
+ name => "large-app-data",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 1024 * 1024,
+ }
+ },
+ {
+ name => "large-app-data-large-fragment-size",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 1024 * 1024,
+ MaxFragmentSize => 16384,
+ }
+ },
+ {
+ name => "large-app-data-odd-fragment-size",
+ server => { },
+ client => { },
+ test => {
+ ApplicationData => 1024 * 1024,
+ MaxFragmentSize => 5 * 1024 - 5,
+ }
+ },
+ # When the buffer / fragment size ratio is sufficiently large,
+ # multi-buffer code kicks in on some platforms for AES-SHA. The
+ # exact minimum ratio depends on the platform, and is usually
+ # around 4. Since the test buffer is 64kB, a 4kB fragment is
+ # easily sufficient.
+ #
+ # (We run this test on all platforms though it's only true multibuffer
+ # on some of them.)
+ {
+ name => "large-app-data-aes-sha1-multibuffer",
+ server => { },
+ client => {
+ CipherString => "AES128-SHA",
+ MaxProtocol => "TLSv1.2"
+ },
+ test => {
+ ApplicationData => 1024 * 1024,
+ MaxFragmentSize => 4 * 1024,
+ }
+ },
+ {
+ name => "large-app-data-aes-sha2-multibuffer",
+ server => { },
+ client => {
+ CipherString => "AES128-SHA256",
+ MaxProtocol => "TLSv1.2"
+ },
+ test => {
+ ApplicationData => 1024 * 1024,
+ MaxFragmentSize => 4 * 1024,
+ }
+ },
+ {
+ name => "large-app-data-aes-sha1-multibuffer-odd-fragment",
+ server => { },
+ client => {
+ CipherString => "AES128-SHA",
+ MaxProtocol => "TLSv1.2"
+ },
+ test => {
+ ApplicationData => 1024 * 1024 + 3,
+ MaxFragmentSize => 5 * 1024 - 5,
+ }
+ },
+ {
+ name => "large-app-data-aes-sha2-multibuffer-odd-fragment",
+ server => { },
+ client => {
+ CipherString => "AES128-SHA256",
+ MaxProtocol => "TLSv1.2"
+ },
+ test => {
+ ApplicationData => 1024 * 1024 - 3,
+ MaxFragmentSize => 5 * 1024 + 5,
+ }
+ },
+ # Test that multibuffer-capable code also handles small data correctly.
+ # Here fragment size == app data size < buffer size,
+ # so no multibuffering should happen.
+ {
+ name => "small-app-data-aes-sha1-multibuffer",
+ server => { },
+ client => {
+ CipherString => "AES128-SHA",
+ MaxProtocol => "TLSv1.2"
+ },
+ test => {
+ ApplicationData => 4 * 1024,
+ MaxFragmentSize => 4 * 1024,
+ }
+ },
+ {
+ name => "small-app-data-aes-sha2-multibuffer",
+ server => { },
+ client => {
+ CipherString => "AES128-SHA256",
+ MaxProtocol => "TLSv1.2"
+ },
+ test => {
+ ApplicationData => 4 * 1024,
+ MaxFragmentSize => 4 * 1024,
+ }
+ },
+ ############################################
+ # Default (Max) Fragment Size is 512.
+ # Default Application data size is 256.
+ {
+ name => "Maximum Fragment Len extension set to 1024 w. FragmentSize disabled",
+ server => { },
+ client => {
+ extra => {
+ MaxFragmentLenExt => 1024,
+ },
+ },
+ test => {
+ ApplicationData => 3072,
+ MaxFragmentSize => 16384,
+ }
+ },
+ {
+ name => "Maximum Fragment Len extension equal FragmentSize to 2048",
+ server => { },
+ client => {
+ extra => {
+ MaxFragmentLenExt => 2048,
+ },
+ },
+ test => {
+ ApplicationData => 3072,
+ MaxFragmentSize => 2048,
+ }
+ },
+ {
+ name => "Maximum Fragment Len extension 512 lower than FragmentSize 1024",
+ server => { },
+ client => {
+ extra => {
+ MaxFragmentLenExt => 512,
+ },
+ },
+ test => {
+ ApplicationData => 3072,
+ MaxFragmentSize => 1024,
+ }
+ },
+ {
+ name => "Maximum Fragment Len extension 1024 lower than FragmentSize 1024",
+ server => { },
+ client => {
+ extra => {
+ MaxFragmentLenExt => 2048,
+ },
+ },
+ test => {
+ ApplicationData => 3072,
+ MaxFragmentSize => 1024,
+ }
+ },
+ {
+ name => "Maximum Fragment Len extension 4096 greater than FragmentSize 2048",
+ server => { },
+ client => {
+ extra => {
+ MaxFragmentLenExt => 4096,
+ },
+ },
+ test => {
+ ApplicationData => 8196,
+ MaxFragmentSize => 2048,
+ }
+ },
+ {
+ name => "Maximum Fragment Len extension 2048 greater than FragmentSize 1024",
+ server => { },
+ client => {
+ extra => {
+ MaxFragmentLenExt => 2048,
+ },
+ },
+ test => {
+ ApplicationData => 3072,
+ MaxFragmentSize => 1024,
+ }
+ },
+);
diff --git a/test/ssl-tests/14-curves.cnf b/test/ssl-tests/14-curves.cnf
new file mode 100644
index 000000000000..75635d29bd0f
--- /dev/null
+++ b/test/ssl-tests/14-curves.cnf
@@ -0,0 +1,2809 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 95
+
+test-0 = 0-curve-prime256v1
+test-1 = 1-curve-secp384r1
+test-2 = 2-curve-secp521r1
+test-3 = 3-curve-X25519
+test-4 = 4-curve-X448
+test-5 = 5-curve-ffdhe2048
+test-6 = 6-curve-ffdhe3072
+test-7 = 7-curve-ffdhe4096
+test-8 = 8-curve-ffdhe6144
+test-9 = 9-curve-ffdhe8192
+test-10 = 10-curve-sect233k1
+test-11 = 11-curve-sect233r1
+test-12 = 12-curve-sect283k1
+test-13 = 13-curve-sect283r1
+test-14 = 14-curve-sect409k1
+test-15 = 15-curve-sect409r1
+test-16 = 16-curve-sect571k1
+test-17 = 17-curve-sect571r1
+test-18 = 18-curve-secp224r1
+test-19 = 19-curve-sect163k1
+test-20 = 20-curve-sect163r2
+test-21 = 21-curve-prime192v1
+test-22 = 22-curve-sect163r1
+test-23 = 23-curve-sect193r1
+test-24 = 24-curve-sect193r2
+test-25 = 25-curve-sect239k1
+test-26 = 26-curve-secp160k1
+test-27 = 27-curve-secp160r1
+test-28 = 28-curve-secp160r2
+test-29 = 29-curve-secp192k1
+test-30 = 30-curve-secp224k1
+test-31 = 31-curve-secp256k1
+test-32 = 32-curve-brainpoolP256r1
+test-33 = 33-curve-brainpoolP384r1
+test-34 = 34-curve-brainpoolP512r1
+test-35 = 35-curve-sect233k1-tls12-in-tls13
+test-36 = 36-curve-sect233r1-tls12-in-tls13
+test-37 = 37-curve-sect283k1-tls12-in-tls13
+test-38 = 38-curve-sect283r1-tls12-in-tls13
+test-39 = 39-curve-sect409k1-tls12-in-tls13
+test-40 = 40-curve-sect409r1-tls12-in-tls13
+test-41 = 41-curve-sect571k1-tls12-in-tls13
+test-42 = 42-curve-sect571r1-tls12-in-tls13
+test-43 = 43-curve-secp224r1-tls12-in-tls13
+test-44 = 44-curve-sect163k1-tls12-in-tls13
+test-45 = 45-curve-sect163r2-tls12-in-tls13
+test-46 = 46-curve-prime192v1-tls12-in-tls13
+test-47 = 47-curve-sect163r1-tls12-in-tls13
+test-48 = 48-curve-sect193r1-tls12-in-tls13
+test-49 = 49-curve-sect193r2-tls12-in-tls13
+test-50 = 50-curve-sect239k1-tls12-in-tls13
+test-51 = 51-curve-secp160k1-tls12-in-tls13
+test-52 = 52-curve-secp160r1-tls12-in-tls13
+test-53 = 53-curve-secp160r2-tls12-in-tls13
+test-54 = 54-curve-secp192k1-tls12-in-tls13
+test-55 = 55-curve-secp224k1-tls12-in-tls13
+test-56 = 56-curve-secp256k1-tls12-in-tls13
+test-57 = 57-curve-brainpoolP256r1-tls12-in-tls13
+test-58 = 58-curve-brainpoolP384r1-tls12-in-tls13
+test-59 = 59-curve-brainpoolP512r1-tls12-in-tls13
+test-60 = 60-curve-sect233k1-tls13
+test-61 = 61-curve-sect233r1-tls13
+test-62 = 62-curve-sect283k1-tls13
+test-63 = 63-curve-sect283r1-tls13
+test-64 = 64-curve-sect409k1-tls13
+test-65 = 65-curve-sect409r1-tls13
+test-66 = 66-curve-sect571k1-tls13
+test-67 = 67-curve-sect571r1-tls13
+test-68 = 68-curve-secp224r1-tls13
+test-69 = 69-curve-sect163k1-tls13
+test-70 = 70-curve-sect163r2-tls13
+test-71 = 71-curve-prime192v1-tls13
+test-72 = 72-curve-sect163r1-tls13
+test-73 = 73-curve-sect193r1-tls13
+test-74 = 74-curve-sect193r2-tls13
+test-75 = 75-curve-sect239k1-tls13
+test-76 = 76-curve-secp160k1-tls13
+test-77 = 77-curve-secp160r1-tls13
+test-78 = 78-curve-secp160r2-tls13
+test-79 = 79-curve-secp192k1-tls13
+test-80 = 80-curve-secp224k1-tls13
+test-81 = 81-curve-secp256k1-tls13
+test-82 = 82-curve-brainpoolP256r1-tls13
+test-83 = 83-curve-brainpoolP384r1-tls13
+test-84 = 84-curve-brainpoolP512r1-tls13
+test-85 = 85-curve-ffdhe2048-tls13-in-tls12
+test-86 = 86-curve-ffdhe2048-tls13-in-tls12-2
+test-87 = 87-curve-ffdhe3072-tls13-in-tls12
+test-88 = 88-curve-ffdhe3072-tls13-in-tls12-2
+test-89 = 89-curve-ffdhe4096-tls13-in-tls12
+test-90 = 90-curve-ffdhe4096-tls13-in-tls12-2
+test-91 = 91-curve-ffdhe6144-tls13-in-tls12
+test-92 = 92-curve-ffdhe6144-tls13-in-tls12-2
+test-93 = 93-curve-ffdhe8192-tls13-in-tls12
+test-94 = 94-curve-ffdhe8192-tls13-in-tls12-2
+# ===========================================================
+
+[0-curve-prime256v1]
+ssl_conf = 0-curve-prime256v1-ssl
+
+[0-curve-prime256v1-ssl]
+server = 0-curve-prime256v1-server
+client = 0-curve-prime256v1-client
+
+[0-curve-prime256v1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = prime256v1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-curve-prime256v1-client]
+CipherString = ECDHE
+Curves = prime256v1
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = prime256v1
+
+
+# ===========================================================
+
+[1-curve-secp384r1]
+ssl_conf = 1-curve-secp384r1-ssl
+
+[1-curve-secp384r1-ssl]
+server = 1-curve-secp384r1-server
+client = 1-curve-secp384r1-client
+
+[1-curve-secp384r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp384r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-curve-secp384r1-client]
+CipherString = ECDHE
+Curves = secp384r1
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = secp384r1
+
+
+# ===========================================================
+
+[2-curve-secp521r1]
+ssl_conf = 2-curve-secp521r1-ssl
+
+[2-curve-secp521r1-ssl]
+server = 2-curve-secp521r1-server
+client = 2-curve-secp521r1-client
+
+[2-curve-secp521r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp521r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-curve-secp521r1-client]
+CipherString = ECDHE
+Curves = secp521r1
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = secp521r1
+
+
+# ===========================================================
+
+[3-curve-X25519]
+ssl_conf = 3-curve-X25519-ssl
+
+[3-curve-X25519-ssl]
+server = 3-curve-X25519-server
+client = 3-curve-X25519-client
+
+[3-curve-X25519-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = X25519
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-curve-X25519-client]
+CipherString = ECDHE
+Curves = X25519
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = X25519
+
+
+# ===========================================================
+
+[4-curve-X448]
+ssl_conf = 4-curve-X448-ssl
+
+[4-curve-X448-ssl]
+server = 4-curve-X448-server
+client = 4-curve-X448-client
+
+[4-curve-X448-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = X448
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-curve-X448-client]
+CipherString = ECDHE
+Curves = X448
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = X448
+
+
+# ===========================================================
+
+[5-curve-ffdhe2048]
+ssl_conf = 5-curve-ffdhe2048-ssl
+
+[5-curve-ffdhe2048-ssl]
+server = 5-curve-ffdhe2048-server
+client = 5-curve-ffdhe2048-client
+
+[5-curve-ffdhe2048-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = ffdhe2048
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-curve-ffdhe2048-client]
+CipherString = ECDHE
+Curves = ffdhe2048
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = dhKeyAgreement
+
+
+# ===========================================================
+
+[6-curve-ffdhe3072]
+ssl_conf = 6-curve-ffdhe3072-ssl
+
+[6-curve-ffdhe3072-ssl]
+server = 6-curve-ffdhe3072-server
+client = 6-curve-ffdhe3072-client
+
+[6-curve-ffdhe3072-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = ffdhe3072
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-curve-ffdhe3072-client]
+CipherString = ECDHE
+Curves = ffdhe3072
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = dhKeyAgreement
+
+
+# ===========================================================
+
+[7-curve-ffdhe4096]
+ssl_conf = 7-curve-ffdhe4096-ssl
+
+[7-curve-ffdhe4096-ssl]
+server = 7-curve-ffdhe4096-server
+client = 7-curve-ffdhe4096-client
+
+[7-curve-ffdhe4096-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = ffdhe4096
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-curve-ffdhe4096-client]
+CipherString = ECDHE
+Curves = ffdhe4096
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = dhKeyAgreement
+
+
+# ===========================================================
+
+[8-curve-ffdhe6144]
+ssl_conf = 8-curve-ffdhe6144-ssl
+
+[8-curve-ffdhe6144-ssl]
+server = 8-curve-ffdhe6144-server
+client = 8-curve-ffdhe6144-client
+
+[8-curve-ffdhe6144-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = ffdhe6144
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-curve-ffdhe6144-client]
+CipherString = ECDHE
+Curves = ffdhe6144
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = dhKeyAgreement
+
+
+# ===========================================================
+
+[9-curve-ffdhe8192]
+ssl_conf = 9-curve-ffdhe8192-ssl
+
+[9-curve-ffdhe8192-ssl]
+server = 9-curve-ffdhe8192-server
+client = 9-curve-ffdhe8192-client
+
+[9-curve-ffdhe8192-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = ffdhe8192
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-curve-ffdhe8192-client]
+CipherString = ECDHE
+Curves = ffdhe8192
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = dhKeyAgreement
+
+
+# ===========================================================
+
+[10-curve-sect233k1]
+ssl_conf = 10-curve-sect233k1-ssl
+
+[10-curve-sect233k1-ssl]
+server = 10-curve-sect233k1-server
+client = 10-curve-sect233k1-client
+
+[10-curve-sect233k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect233k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-curve-sect233k1-client]
+CipherString = ECDHE
+Curves = sect233k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect233k1
+
+
+# ===========================================================
+
+[11-curve-sect233r1]
+ssl_conf = 11-curve-sect233r1-ssl
+
+[11-curve-sect233r1-ssl]
+server = 11-curve-sect233r1-server
+client = 11-curve-sect233r1-client
+
+[11-curve-sect233r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect233r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-curve-sect233r1-client]
+CipherString = ECDHE
+Curves = sect233r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect233r1
+
+
+# ===========================================================
+
+[12-curve-sect283k1]
+ssl_conf = 12-curve-sect283k1-ssl
+
+[12-curve-sect283k1-ssl]
+server = 12-curve-sect283k1-server
+client = 12-curve-sect283k1-client
+
+[12-curve-sect283k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect283k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-curve-sect283k1-client]
+CipherString = ECDHE
+Curves = sect283k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect283k1
+
+
+# ===========================================================
+
+[13-curve-sect283r1]
+ssl_conf = 13-curve-sect283r1-ssl
+
+[13-curve-sect283r1-ssl]
+server = 13-curve-sect283r1-server
+client = 13-curve-sect283r1-client
+
+[13-curve-sect283r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect283r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-curve-sect283r1-client]
+CipherString = ECDHE
+Curves = sect283r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect283r1
+
+
+# ===========================================================
+
+[14-curve-sect409k1]
+ssl_conf = 14-curve-sect409k1-ssl
+
+[14-curve-sect409k1-ssl]
+server = 14-curve-sect409k1-server
+client = 14-curve-sect409k1-client
+
+[14-curve-sect409k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect409k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-curve-sect409k1-client]
+CipherString = ECDHE
+Curves = sect409k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect409k1
+
+
+# ===========================================================
+
+[15-curve-sect409r1]
+ssl_conf = 15-curve-sect409r1-ssl
+
+[15-curve-sect409r1-ssl]
+server = 15-curve-sect409r1-server
+client = 15-curve-sect409r1-client
+
+[15-curve-sect409r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect409r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-curve-sect409r1-client]
+CipherString = ECDHE
+Curves = sect409r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect409r1
+
+
+# ===========================================================
+
+[16-curve-sect571k1]
+ssl_conf = 16-curve-sect571k1-ssl
+
+[16-curve-sect571k1-ssl]
+server = 16-curve-sect571k1-server
+client = 16-curve-sect571k1-client
+
+[16-curve-sect571k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect571k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-curve-sect571k1-client]
+CipherString = ECDHE
+Curves = sect571k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-16]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect571k1
+
+
+# ===========================================================
+
+[17-curve-sect571r1]
+ssl_conf = 17-curve-sect571r1-ssl
+
+[17-curve-sect571r1-ssl]
+server = 17-curve-sect571r1-server
+client = 17-curve-sect571r1-client
+
+[17-curve-sect571r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect571r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[17-curve-sect571r1-client]
+CipherString = ECDHE
+Curves = sect571r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-17]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect571r1
+
+
+# ===========================================================
+
+[18-curve-secp224r1]
+ssl_conf = 18-curve-secp224r1-ssl
+
+[18-curve-secp224r1-ssl]
+server = 18-curve-secp224r1-server
+client = 18-curve-secp224r1-client
+
+[18-curve-secp224r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp224r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-curve-secp224r1-client]
+CipherString = ECDHE
+Curves = secp224r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-18]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = secp224r1
+
+
+# ===========================================================
+
+[19-curve-sect163k1]
+ssl_conf = 19-curve-sect163k1-ssl
+
+[19-curve-sect163k1-ssl]
+server = 19-curve-sect163k1-server
+client = 19-curve-sect163k1-client
+
+[19-curve-sect163k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect163k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[19-curve-sect163k1-client]
+CipherString = ECDHE
+Curves = sect163k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-19]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect163k1
+
+
+# ===========================================================
+
+[20-curve-sect163r2]
+ssl_conf = 20-curve-sect163r2-ssl
+
+[20-curve-sect163r2-ssl]
+server = 20-curve-sect163r2-server
+client = 20-curve-sect163r2-client
+
+[20-curve-sect163r2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect163r2
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[20-curve-sect163r2-client]
+CipherString = ECDHE
+Curves = sect163r2
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-20]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect163r2
+
+
+# ===========================================================
+
+[21-curve-prime192v1]
+ssl_conf = 21-curve-prime192v1-ssl
+
+[21-curve-prime192v1-ssl]
+server = 21-curve-prime192v1-server
+client = 21-curve-prime192v1-client
+
+[21-curve-prime192v1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = prime192v1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[21-curve-prime192v1-client]
+CipherString = ECDHE
+Curves = prime192v1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-21]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = prime192v1
+
+
+# ===========================================================
+
+[22-curve-sect163r1]
+ssl_conf = 22-curve-sect163r1-ssl
+
+[22-curve-sect163r1-ssl]
+server = 22-curve-sect163r1-server
+client = 22-curve-sect163r1-client
+
+[22-curve-sect163r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect163r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[22-curve-sect163r1-client]
+CipherString = ECDHE
+Curves = sect163r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-22]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect163r1
+
+
+# ===========================================================
+
+[23-curve-sect193r1]
+ssl_conf = 23-curve-sect193r1-ssl
+
+[23-curve-sect193r1-ssl]
+server = 23-curve-sect193r1-server
+client = 23-curve-sect193r1-client
+
+[23-curve-sect193r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect193r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[23-curve-sect193r1-client]
+CipherString = ECDHE
+Curves = sect193r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-23]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect193r1
+
+
+# ===========================================================
+
+[24-curve-sect193r2]
+ssl_conf = 24-curve-sect193r2-ssl
+
+[24-curve-sect193r2-ssl]
+server = 24-curve-sect193r2-server
+client = 24-curve-sect193r2-client
+
+[24-curve-sect193r2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect193r2
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[24-curve-sect193r2-client]
+CipherString = ECDHE
+Curves = sect193r2
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-24]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect193r2
+
+
+# ===========================================================
+
+[25-curve-sect239k1]
+ssl_conf = 25-curve-sect239k1-ssl
+
+[25-curve-sect239k1-ssl]
+server = 25-curve-sect239k1-server
+client = 25-curve-sect239k1-client
+
+[25-curve-sect239k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect239k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[25-curve-sect239k1-client]
+CipherString = ECDHE
+Curves = sect239k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-25]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = sect239k1
+
+
+# ===========================================================
+
+[26-curve-secp160k1]
+ssl_conf = 26-curve-secp160k1-ssl
+
+[26-curve-secp160k1-ssl]
+server = 26-curve-secp160k1-server
+client = 26-curve-secp160k1-client
+
+[26-curve-secp160k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp160k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[26-curve-secp160k1-client]
+CipherString = ECDHE
+Curves = secp160k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-26]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = secp160k1
+
+
+# ===========================================================
+
+[27-curve-secp160r1]
+ssl_conf = 27-curve-secp160r1-ssl
+
+[27-curve-secp160r1-ssl]
+server = 27-curve-secp160r1-server
+client = 27-curve-secp160r1-client
+
+[27-curve-secp160r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp160r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[27-curve-secp160r1-client]
+CipherString = ECDHE
+Curves = secp160r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-27]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = secp160r1
+
+
+# ===========================================================
+
+[28-curve-secp160r2]
+ssl_conf = 28-curve-secp160r2-ssl
+
+[28-curve-secp160r2-ssl]
+server = 28-curve-secp160r2-server
+client = 28-curve-secp160r2-client
+
+[28-curve-secp160r2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp160r2
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[28-curve-secp160r2-client]
+CipherString = ECDHE
+Curves = secp160r2
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-28]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = secp160r2
+
+
+# ===========================================================
+
+[29-curve-secp192k1]
+ssl_conf = 29-curve-secp192k1-ssl
+
+[29-curve-secp192k1-ssl]
+server = 29-curve-secp192k1-server
+client = 29-curve-secp192k1-client
+
+[29-curve-secp192k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp192k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[29-curve-secp192k1-client]
+CipherString = ECDHE
+Curves = secp192k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-29]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = secp192k1
+
+
+# ===========================================================
+
+[30-curve-secp224k1]
+ssl_conf = 30-curve-secp224k1-ssl
+
+[30-curve-secp224k1-ssl]
+server = 30-curve-secp224k1-server
+client = 30-curve-secp224k1-client
+
+[30-curve-secp224k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp224k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[30-curve-secp224k1-client]
+CipherString = ECDHE
+Curves = secp224k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-30]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = secp224k1
+
+
+# ===========================================================
+
+[31-curve-secp256k1]
+ssl_conf = 31-curve-secp256k1-ssl
+
+[31-curve-secp256k1-ssl]
+server = 31-curve-secp256k1-server
+client = 31-curve-secp256k1-client
+
+[31-curve-secp256k1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp256k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[31-curve-secp256k1-client]
+CipherString = ECDHE
+Curves = secp256k1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-31]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = secp256k1
+
+
+# ===========================================================
+
+[32-curve-brainpoolP256r1]
+ssl_conf = 32-curve-brainpoolP256r1-ssl
+
+[32-curve-brainpoolP256r1-ssl]
+server = 32-curve-brainpoolP256r1-server
+client = 32-curve-brainpoolP256r1-client
+
+[32-curve-brainpoolP256r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = brainpoolP256r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[32-curve-brainpoolP256r1-client]
+CipherString = ECDHE
+Curves = brainpoolP256r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-32]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = brainpoolP256r1
+
+
+# ===========================================================
+
+[33-curve-brainpoolP384r1]
+ssl_conf = 33-curve-brainpoolP384r1-ssl
+
+[33-curve-brainpoolP384r1-ssl]
+server = 33-curve-brainpoolP384r1-server
+client = 33-curve-brainpoolP384r1-client
+
+[33-curve-brainpoolP384r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = brainpoolP384r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[33-curve-brainpoolP384r1-client]
+CipherString = ECDHE
+Curves = brainpoolP384r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-33]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = brainpoolP384r1
+
+
+# ===========================================================
+
+[34-curve-brainpoolP512r1]
+ssl_conf = 34-curve-brainpoolP512r1-ssl
+
+[34-curve-brainpoolP512r1-ssl]
+server = 34-curve-brainpoolP512r1-server
+client = 34-curve-brainpoolP512r1-client
+
+[34-curve-brainpoolP512r1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = brainpoolP512r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[34-curve-brainpoolP512r1-client]
+CipherString = ECDHE
+Curves = brainpoolP512r1
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-34]
+ExpectedProtocol = TLSv1.2
+ExpectedResult = Success
+ExpectedTmpKeyType = brainpoolP512r1
+
+
+# ===========================================================
+
+[35-curve-sect233k1-tls12-in-tls13]
+ssl_conf = 35-curve-sect233k1-tls12-in-tls13-ssl
+
+[35-curve-sect233k1-tls12-in-tls13-ssl]
+server = 35-curve-sect233k1-tls12-in-tls13-server
+client = 35-curve-sect233k1-tls12-in-tls13-client
+
+[35-curve-sect233k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect233k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[35-curve-sect233k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect233k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-35]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[36-curve-sect233r1-tls12-in-tls13]
+ssl_conf = 36-curve-sect233r1-tls12-in-tls13-ssl
+
+[36-curve-sect233r1-tls12-in-tls13-ssl]
+server = 36-curve-sect233r1-tls12-in-tls13-server
+client = 36-curve-sect233r1-tls12-in-tls13-client
+
+[36-curve-sect233r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect233r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[36-curve-sect233r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect233r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-36]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[37-curve-sect283k1-tls12-in-tls13]
+ssl_conf = 37-curve-sect283k1-tls12-in-tls13-ssl
+
+[37-curve-sect283k1-tls12-in-tls13-ssl]
+server = 37-curve-sect283k1-tls12-in-tls13-server
+client = 37-curve-sect283k1-tls12-in-tls13-client
+
+[37-curve-sect283k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect283k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[37-curve-sect283k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect283k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-37]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[38-curve-sect283r1-tls12-in-tls13]
+ssl_conf = 38-curve-sect283r1-tls12-in-tls13-ssl
+
+[38-curve-sect283r1-tls12-in-tls13-ssl]
+server = 38-curve-sect283r1-tls12-in-tls13-server
+client = 38-curve-sect283r1-tls12-in-tls13-client
+
+[38-curve-sect283r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect283r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[38-curve-sect283r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect283r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-38]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[39-curve-sect409k1-tls12-in-tls13]
+ssl_conf = 39-curve-sect409k1-tls12-in-tls13-ssl
+
+[39-curve-sect409k1-tls12-in-tls13-ssl]
+server = 39-curve-sect409k1-tls12-in-tls13-server
+client = 39-curve-sect409k1-tls12-in-tls13-client
+
+[39-curve-sect409k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect409k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[39-curve-sect409k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect409k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-39]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[40-curve-sect409r1-tls12-in-tls13]
+ssl_conf = 40-curve-sect409r1-tls12-in-tls13-ssl
+
+[40-curve-sect409r1-tls12-in-tls13-ssl]
+server = 40-curve-sect409r1-tls12-in-tls13-server
+client = 40-curve-sect409r1-tls12-in-tls13-client
+
+[40-curve-sect409r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect409r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[40-curve-sect409r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect409r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-40]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[41-curve-sect571k1-tls12-in-tls13]
+ssl_conf = 41-curve-sect571k1-tls12-in-tls13-ssl
+
+[41-curve-sect571k1-tls12-in-tls13-ssl]
+server = 41-curve-sect571k1-tls12-in-tls13-server
+client = 41-curve-sect571k1-tls12-in-tls13-client
+
+[41-curve-sect571k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect571k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[41-curve-sect571k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect571k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-41]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[42-curve-sect571r1-tls12-in-tls13]
+ssl_conf = 42-curve-sect571r1-tls12-in-tls13-ssl
+
+[42-curve-sect571r1-tls12-in-tls13-ssl]
+server = 42-curve-sect571r1-tls12-in-tls13-server
+client = 42-curve-sect571r1-tls12-in-tls13-client
+
+[42-curve-sect571r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect571r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[42-curve-sect571r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect571r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-42]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[43-curve-secp224r1-tls12-in-tls13]
+ssl_conf = 43-curve-secp224r1-tls12-in-tls13-ssl
+
+[43-curve-secp224r1-tls12-in-tls13-ssl]
+server = 43-curve-secp224r1-tls12-in-tls13-server
+client = 43-curve-secp224r1-tls12-in-tls13-client
+
+[43-curve-secp224r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = secp224r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[43-curve-secp224r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = secp224r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-43]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[44-curve-sect163k1-tls12-in-tls13]
+ssl_conf = 44-curve-sect163k1-tls12-in-tls13-ssl
+
+[44-curve-sect163k1-tls12-in-tls13-ssl]
+server = 44-curve-sect163k1-tls12-in-tls13-server
+client = 44-curve-sect163k1-tls12-in-tls13-client
+
+[44-curve-sect163k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect163k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[44-curve-sect163k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect163k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-44]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[45-curve-sect163r2-tls12-in-tls13]
+ssl_conf = 45-curve-sect163r2-tls12-in-tls13-ssl
+
+[45-curve-sect163r2-tls12-in-tls13-ssl]
+server = 45-curve-sect163r2-tls12-in-tls13-server
+client = 45-curve-sect163r2-tls12-in-tls13-client
+
+[45-curve-sect163r2-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect163r2:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[45-curve-sect163r2-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect163r2:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-45]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[46-curve-prime192v1-tls12-in-tls13]
+ssl_conf = 46-curve-prime192v1-tls12-in-tls13-ssl
+
+[46-curve-prime192v1-tls12-in-tls13-ssl]
+server = 46-curve-prime192v1-tls12-in-tls13-server
+client = 46-curve-prime192v1-tls12-in-tls13-client
+
+[46-curve-prime192v1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = prime192v1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[46-curve-prime192v1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = prime192v1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-46]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[47-curve-sect163r1-tls12-in-tls13]
+ssl_conf = 47-curve-sect163r1-tls12-in-tls13-ssl
+
+[47-curve-sect163r1-tls12-in-tls13-ssl]
+server = 47-curve-sect163r1-tls12-in-tls13-server
+client = 47-curve-sect163r1-tls12-in-tls13-client
+
+[47-curve-sect163r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect163r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[47-curve-sect163r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect163r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-47]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[48-curve-sect193r1-tls12-in-tls13]
+ssl_conf = 48-curve-sect193r1-tls12-in-tls13-ssl
+
+[48-curve-sect193r1-tls12-in-tls13-ssl]
+server = 48-curve-sect193r1-tls12-in-tls13-server
+client = 48-curve-sect193r1-tls12-in-tls13-client
+
+[48-curve-sect193r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect193r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[48-curve-sect193r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect193r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-48]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[49-curve-sect193r2-tls12-in-tls13]
+ssl_conf = 49-curve-sect193r2-tls12-in-tls13-ssl
+
+[49-curve-sect193r2-tls12-in-tls13-ssl]
+server = 49-curve-sect193r2-tls12-in-tls13-server
+client = 49-curve-sect193r2-tls12-in-tls13-client
+
+[49-curve-sect193r2-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect193r2:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[49-curve-sect193r2-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect193r2:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-49]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[50-curve-sect239k1-tls12-in-tls13]
+ssl_conf = 50-curve-sect239k1-tls12-in-tls13-ssl
+
+[50-curve-sect239k1-tls12-in-tls13-ssl]
+server = 50-curve-sect239k1-tls12-in-tls13-server
+client = 50-curve-sect239k1-tls12-in-tls13-client
+
+[50-curve-sect239k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = sect239k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[50-curve-sect239k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = sect239k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-50]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[51-curve-secp160k1-tls12-in-tls13]
+ssl_conf = 51-curve-secp160k1-tls12-in-tls13-ssl
+
+[51-curve-secp160k1-tls12-in-tls13-ssl]
+server = 51-curve-secp160k1-tls12-in-tls13-server
+client = 51-curve-secp160k1-tls12-in-tls13-client
+
+[51-curve-secp160k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = secp160k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[51-curve-secp160k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = secp160k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-51]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[52-curve-secp160r1-tls12-in-tls13]
+ssl_conf = 52-curve-secp160r1-tls12-in-tls13-ssl
+
+[52-curve-secp160r1-tls12-in-tls13-ssl]
+server = 52-curve-secp160r1-tls12-in-tls13-server
+client = 52-curve-secp160r1-tls12-in-tls13-client
+
+[52-curve-secp160r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = secp160r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[52-curve-secp160r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = secp160r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-52]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[53-curve-secp160r2-tls12-in-tls13]
+ssl_conf = 53-curve-secp160r2-tls12-in-tls13-ssl
+
+[53-curve-secp160r2-tls12-in-tls13-ssl]
+server = 53-curve-secp160r2-tls12-in-tls13-server
+client = 53-curve-secp160r2-tls12-in-tls13-client
+
+[53-curve-secp160r2-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = secp160r2:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[53-curve-secp160r2-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = secp160r2:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-53]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[54-curve-secp192k1-tls12-in-tls13]
+ssl_conf = 54-curve-secp192k1-tls12-in-tls13-ssl
+
+[54-curve-secp192k1-tls12-in-tls13-ssl]
+server = 54-curve-secp192k1-tls12-in-tls13-server
+client = 54-curve-secp192k1-tls12-in-tls13-client
+
+[54-curve-secp192k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = secp192k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[54-curve-secp192k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = secp192k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-54]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[55-curve-secp224k1-tls12-in-tls13]
+ssl_conf = 55-curve-secp224k1-tls12-in-tls13-ssl
+
+[55-curve-secp224k1-tls12-in-tls13-ssl]
+server = 55-curve-secp224k1-tls12-in-tls13-server
+client = 55-curve-secp224k1-tls12-in-tls13-client
+
+[55-curve-secp224k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = secp224k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[55-curve-secp224k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = secp224k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-55]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[56-curve-secp256k1-tls12-in-tls13]
+ssl_conf = 56-curve-secp256k1-tls12-in-tls13-ssl
+
+[56-curve-secp256k1-tls12-in-tls13-ssl]
+server = 56-curve-secp256k1-tls12-in-tls13-server
+client = 56-curve-secp256k1-tls12-in-tls13-client
+
+[56-curve-secp256k1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = secp256k1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[56-curve-secp256k1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = secp256k1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-56]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[57-curve-brainpoolP256r1-tls12-in-tls13]
+ssl_conf = 57-curve-brainpoolP256r1-tls12-in-tls13-ssl
+
+[57-curve-brainpoolP256r1-tls12-in-tls13-ssl]
+server = 57-curve-brainpoolP256r1-tls12-in-tls13-server
+client = 57-curve-brainpoolP256r1-tls12-in-tls13-client
+
+[57-curve-brainpoolP256r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = brainpoolP256r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[57-curve-brainpoolP256r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = brainpoolP256r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-57]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[58-curve-brainpoolP384r1-tls12-in-tls13]
+ssl_conf = 58-curve-brainpoolP384r1-tls12-in-tls13-ssl
+
+[58-curve-brainpoolP384r1-tls12-in-tls13-ssl]
+server = 58-curve-brainpoolP384r1-tls12-in-tls13-server
+client = 58-curve-brainpoolP384r1-tls12-in-tls13-client
+
+[58-curve-brainpoolP384r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = brainpoolP384r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[58-curve-brainpoolP384r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = brainpoolP384r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-58]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[59-curve-brainpoolP512r1-tls12-in-tls13]
+ssl_conf = 59-curve-brainpoolP512r1-tls12-in-tls13-ssl
+
+[59-curve-brainpoolP512r1-tls12-in-tls13-ssl]
+server = 59-curve-brainpoolP512r1-tls12-in-tls13-server
+client = 59-curve-brainpoolP512r1-tls12-in-tls13-client
+
+[59-curve-brainpoolP512r1-tls12-in-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = brainpoolP512r1:P-256
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[59-curve-brainpoolP512r1-tls12-in-tls13-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = brainpoolP512r1:P-256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-59]
+ExpectedProtocol = TLSv1.3
+ExpectedResult = Success
+ExpectedTmpKeyType = P-256
+
+
+# ===========================================================
+
+[60-curve-sect233k1-tls13]
+ssl_conf = 60-curve-sect233k1-tls13-ssl
+
+[60-curve-sect233k1-tls13-ssl]
+server = 60-curve-sect233k1-tls13-server
+client = 60-curve-sect233k1-tls13-client
+
+[60-curve-sect233k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect233k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[60-curve-sect233k1-tls13-client]
+CipherString = ECDHE
+Curves = sect233k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-60]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[61-curve-sect233r1-tls13]
+ssl_conf = 61-curve-sect233r1-tls13-ssl
+
+[61-curve-sect233r1-tls13-ssl]
+server = 61-curve-sect233r1-tls13-server
+client = 61-curve-sect233r1-tls13-client
+
+[61-curve-sect233r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect233r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[61-curve-sect233r1-tls13-client]
+CipherString = ECDHE
+Curves = sect233r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-61]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[62-curve-sect283k1-tls13]
+ssl_conf = 62-curve-sect283k1-tls13-ssl
+
+[62-curve-sect283k1-tls13-ssl]
+server = 62-curve-sect283k1-tls13-server
+client = 62-curve-sect283k1-tls13-client
+
+[62-curve-sect283k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect283k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[62-curve-sect283k1-tls13-client]
+CipherString = ECDHE
+Curves = sect283k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-62]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[63-curve-sect283r1-tls13]
+ssl_conf = 63-curve-sect283r1-tls13-ssl
+
+[63-curve-sect283r1-tls13-ssl]
+server = 63-curve-sect283r1-tls13-server
+client = 63-curve-sect283r1-tls13-client
+
+[63-curve-sect283r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect283r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[63-curve-sect283r1-tls13-client]
+CipherString = ECDHE
+Curves = sect283r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-63]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[64-curve-sect409k1-tls13]
+ssl_conf = 64-curve-sect409k1-tls13-ssl
+
+[64-curve-sect409k1-tls13-ssl]
+server = 64-curve-sect409k1-tls13-server
+client = 64-curve-sect409k1-tls13-client
+
+[64-curve-sect409k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect409k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[64-curve-sect409k1-tls13-client]
+CipherString = ECDHE
+Curves = sect409k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-64]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[65-curve-sect409r1-tls13]
+ssl_conf = 65-curve-sect409r1-tls13-ssl
+
+[65-curve-sect409r1-tls13-ssl]
+server = 65-curve-sect409r1-tls13-server
+client = 65-curve-sect409r1-tls13-client
+
+[65-curve-sect409r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect409r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[65-curve-sect409r1-tls13-client]
+CipherString = ECDHE
+Curves = sect409r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-65]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[66-curve-sect571k1-tls13]
+ssl_conf = 66-curve-sect571k1-tls13-ssl
+
+[66-curve-sect571k1-tls13-ssl]
+server = 66-curve-sect571k1-tls13-server
+client = 66-curve-sect571k1-tls13-client
+
+[66-curve-sect571k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect571k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[66-curve-sect571k1-tls13-client]
+CipherString = ECDHE
+Curves = sect571k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-66]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[67-curve-sect571r1-tls13]
+ssl_conf = 67-curve-sect571r1-tls13-ssl
+
+[67-curve-sect571r1-tls13-ssl]
+server = 67-curve-sect571r1-tls13-server
+client = 67-curve-sect571r1-tls13-client
+
+[67-curve-sect571r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect571r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[67-curve-sect571r1-tls13-client]
+CipherString = ECDHE
+Curves = sect571r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-67]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[68-curve-secp224r1-tls13]
+ssl_conf = 68-curve-secp224r1-tls13-ssl
+
+[68-curve-secp224r1-tls13-ssl]
+server = 68-curve-secp224r1-tls13-server
+client = 68-curve-secp224r1-tls13-client
+
+[68-curve-secp224r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp224r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[68-curve-secp224r1-tls13-client]
+CipherString = ECDHE
+Curves = secp224r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-68]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[69-curve-sect163k1-tls13]
+ssl_conf = 69-curve-sect163k1-tls13-ssl
+
+[69-curve-sect163k1-tls13-ssl]
+server = 69-curve-sect163k1-tls13-server
+client = 69-curve-sect163k1-tls13-client
+
+[69-curve-sect163k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect163k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[69-curve-sect163k1-tls13-client]
+CipherString = ECDHE
+Curves = sect163k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-69]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[70-curve-sect163r2-tls13]
+ssl_conf = 70-curve-sect163r2-tls13-ssl
+
+[70-curve-sect163r2-tls13-ssl]
+server = 70-curve-sect163r2-tls13-server
+client = 70-curve-sect163r2-tls13-client
+
+[70-curve-sect163r2-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect163r2
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[70-curve-sect163r2-tls13-client]
+CipherString = ECDHE
+Curves = sect163r2
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-70]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[71-curve-prime192v1-tls13]
+ssl_conf = 71-curve-prime192v1-tls13-ssl
+
+[71-curve-prime192v1-tls13-ssl]
+server = 71-curve-prime192v1-tls13-server
+client = 71-curve-prime192v1-tls13-client
+
+[71-curve-prime192v1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = prime192v1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[71-curve-prime192v1-tls13-client]
+CipherString = ECDHE
+Curves = prime192v1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-71]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[72-curve-sect163r1-tls13]
+ssl_conf = 72-curve-sect163r1-tls13-ssl
+
+[72-curve-sect163r1-tls13-ssl]
+server = 72-curve-sect163r1-tls13-server
+client = 72-curve-sect163r1-tls13-client
+
+[72-curve-sect163r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect163r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[72-curve-sect163r1-tls13-client]
+CipherString = ECDHE
+Curves = sect163r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-72]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[73-curve-sect193r1-tls13]
+ssl_conf = 73-curve-sect193r1-tls13-ssl
+
+[73-curve-sect193r1-tls13-ssl]
+server = 73-curve-sect193r1-tls13-server
+client = 73-curve-sect193r1-tls13-client
+
+[73-curve-sect193r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect193r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[73-curve-sect193r1-tls13-client]
+CipherString = ECDHE
+Curves = sect193r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-73]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[74-curve-sect193r2-tls13]
+ssl_conf = 74-curve-sect193r2-tls13-ssl
+
+[74-curve-sect193r2-tls13-ssl]
+server = 74-curve-sect193r2-tls13-server
+client = 74-curve-sect193r2-tls13-client
+
+[74-curve-sect193r2-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect193r2
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[74-curve-sect193r2-tls13-client]
+CipherString = ECDHE
+Curves = sect193r2
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-74]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[75-curve-sect239k1-tls13]
+ssl_conf = 75-curve-sect239k1-tls13-ssl
+
+[75-curve-sect239k1-tls13-ssl]
+server = 75-curve-sect239k1-tls13-server
+client = 75-curve-sect239k1-tls13-client
+
+[75-curve-sect239k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = sect239k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[75-curve-sect239k1-tls13-client]
+CipherString = ECDHE
+Curves = sect239k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-75]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[76-curve-secp160k1-tls13]
+ssl_conf = 76-curve-secp160k1-tls13-ssl
+
+[76-curve-secp160k1-tls13-ssl]
+server = 76-curve-secp160k1-tls13-server
+client = 76-curve-secp160k1-tls13-client
+
+[76-curve-secp160k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp160k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[76-curve-secp160k1-tls13-client]
+CipherString = ECDHE
+Curves = secp160k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-76]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[77-curve-secp160r1-tls13]
+ssl_conf = 77-curve-secp160r1-tls13-ssl
+
+[77-curve-secp160r1-tls13-ssl]
+server = 77-curve-secp160r1-tls13-server
+client = 77-curve-secp160r1-tls13-client
+
+[77-curve-secp160r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp160r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[77-curve-secp160r1-tls13-client]
+CipherString = ECDHE
+Curves = secp160r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-77]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[78-curve-secp160r2-tls13]
+ssl_conf = 78-curve-secp160r2-tls13-ssl
+
+[78-curve-secp160r2-tls13-ssl]
+server = 78-curve-secp160r2-tls13-server
+client = 78-curve-secp160r2-tls13-client
+
+[78-curve-secp160r2-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp160r2
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[78-curve-secp160r2-tls13-client]
+CipherString = ECDHE
+Curves = secp160r2
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-78]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[79-curve-secp192k1-tls13]
+ssl_conf = 79-curve-secp192k1-tls13-ssl
+
+[79-curve-secp192k1-tls13-ssl]
+server = 79-curve-secp192k1-tls13-server
+client = 79-curve-secp192k1-tls13-client
+
+[79-curve-secp192k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp192k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[79-curve-secp192k1-tls13-client]
+CipherString = ECDHE
+Curves = secp192k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-79]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[80-curve-secp224k1-tls13]
+ssl_conf = 80-curve-secp224k1-tls13-ssl
+
+[80-curve-secp224k1-tls13-ssl]
+server = 80-curve-secp224k1-tls13-server
+client = 80-curve-secp224k1-tls13-client
+
+[80-curve-secp224k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp224k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[80-curve-secp224k1-tls13-client]
+CipherString = ECDHE
+Curves = secp224k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-80]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[81-curve-secp256k1-tls13]
+ssl_conf = 81-curve-secp256k1-tls13-ssl
+
+[81-curve-secp256k1-tls13-ssl]
+server = 81-curve-secp256k1-tls13-server
+client = 81-curve-secp256k1-tls13-client
+
+[81-curve-secp256k1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = secp256k1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[81-curve-secp256k1-tls13-client]
+CipherString = ECDHE
+Curves = secp256k1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-81]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[82-curve-brainpoolP256r1-tls13]
+ssl_conf = 82-curve-brainpoolP256r1-tls13-ssl
+
+[82-curve-brainpoolP256r1-tls13-ssl]
+server = 82-curve-brainpoolP256r1-tls13-server
+client = 82-curve-brainpoolP256r1-tls13-client
+
+[82-curve-brainpoolP256r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = brainpoolP256r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[82-curve-brainpoolP256r1-tls13-client]
+CipherString = ECDHE
+Curves = brainpoolP256r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-82]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[83-curve-brainpoolP384r1-tls13]
+ssl_conf = 83-curve-brainpoolP384r1-tls13-ssl
+
+[83-curve-brainpoolP384r1-tls13-ssl]
+server = 83-curve-brainpoolP384r1-tls13-server
+client = 83-curve-brainpoolP384r1-tls13-client
+
+[83-curve-brainpoolP384r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = brainpoolP384r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[83-curve-brainpoolP384r1-tls13-client]
+CipherString = ECDHE
+Curves = brainpoolP384r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-83]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[84-curve-brainpoolP512r1-tls13]
+ssl_conf = 84-curve-brainpoolP512r1-tls13-ssl
+
+[84-curve-brainpoolP512r1-tls13-ssl]
+server = 84-curve-brainpoolP512r1-tls13-server
+client = 84-curve-brainpoolP512r1-tls13-client
+
+[84-curve-brainpoolP512r1-tls13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Curves = brainpoolP512r1
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[84-curve-brainpoolP512r1-tls13-client]
+CipherString = ECDHE
+Curves = brainpoolP512r1
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-84]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[85-curve-ffdhe2048-tls13-in-tls12]
+ssl_conf = 85-curve-ffdhe2048-tls13-in-tls12-ssl
+
+[85-curve-ffdhe2048-tls13-in-tls12-ssl]
+server = 85-curve-ffdhe2048-tls13-in-tls12-server
+client = 85-curve-ffdhe2048-tls13-in-tls12-client
+
+[85-curve-ffdhe2048-tls13-in-tls12-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe2048
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[85-curve-ffdhe2048-tls13-in-tls12-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = ffdhe2048
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-85]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[86-curve-ffdhe2048-tls13-in-tls12-2]
+ssl_conf = 86-curve-ffdhe2048-tls13-in-tls12-2-ssl
+
+[86-curve-ffdhe2048-tls13-in-tls12-2-ssl]
+server = 86-curve-ffdhe2048-tls13-in-tls12-2-server
+client = 86-curve-ffdhe2048-tls13-in-tls12-2-client
+
+[86-curve-ffdhe2048-tls13-in-tls12-2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe2048
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[86-curve-ffdhe2048-tls13-in-tls12-2-client]
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe2048
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-86]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[87-curve-ffdhe3072-tls13-in-tls12]
+ssl_conf = 87-curve-ffdhe3072-tls13-in-tls12-ssl
+
+[87-curve-ffdhe3072-tls13-in-tls12-ssl]
+server = 87-curve-ffdhe3072-tls13-in-tls12-server
+client = 87-curve-ffdhe3072-tls13-in-tls12-client
+
+[87-curve-ffdhe3072-tls13-in-tls12-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe3072
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[87-curve-ffdhe3072-tls13-in-tls12-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = ffdhe3072
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-87]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[88-curve-ffdhe3072-tls13-in-tls12-2]
+ssl_conf = 88-curve-ffdhe3072-tls13-in-tls12-2-ssl
+
+[88-curve-ffdhe3072-tls13-in-tls12-2-ssl]
+server = 88-curve-ffdhe3072-tls13-in-tls12-2-server
+client = 88-curve-ffdhe3072-tls13-in-tls12-2-client
+
+[88-curve-ffdhe3072-tls13-in-tls12-2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe3072
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[88-curve-ffdhe3072-tls13-in-tls12-2-client]
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe3072
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-88]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[89-curve-ffdhe4096-tls13-in-tls12]
+ssl_conf = 89-curve-ffdhe4096-tls13-in-tls12-ssl
+
+[89-curve-ffdhe4096-tls13-in-tls12-ssl]
+server = 89-curve-ffdhe4096-tls13-in-tls12-server
+client = 89-curve-ffdhe4096-tls13-in-tls12-client
+
+[89-curve-ffdhe4096-tls13-in-tls12-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe4096
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[89-curve-ffdhe4096-tls13-in-tls12-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = ffdhe4096
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-89]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[90-curve-ffdhe4096-tls13-in-tls12-2]
+ssl_conf = 90-curve-ffdhe4096-tls13-in-tls12-2-ssl
+
+[90-curve-ffdhe4096-tls13-in-tls12-2-ssl]
+server = 90-curve-ffdhe4096-tls13-in-tls12-2-server
+client = 90-curve-ffdhe4096-tls13-in-tls12-2-client
+
+[90-curve-ffdhe4096-tls13-in-tls12-2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe4096
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[90-curve-ffdhe4096-tls13-in-tls12-2-client]
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe4096
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-90]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[91-curve-ffdhe6144-tls13-in-tls12]
+ssl_conf = 91-curve-ffdhe6144-tls13-in-tls12-ssl
+
+[91-curve-ffdhe6144-tls13-in-tls12-ssl]
+server = 91-curve-ffdhe6144-tls13-in-tls12-server
+client = 91-curve-ffdhe6144-tls13-in-tls12-client
+
+[91-curve-ffdhe6144-tls13-in-tls12-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe6144
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[91-curve-ffdhe6144-tls13-in-tls12-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = ffdhe6144
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-91]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[92-curve-ffdhe6144-tls13-in-tls12-2]
+ssl_conf = 92-curve-ffdhe6144-tls13-in-tls12-2-ssl
+
+[92-curve-ffdhe6144-tls13-in-tls12-2-ssl]
+server = 92-curve-ffdhe6144-tls13-in-tls12-2-server
+client = 92-curve-ffdhe6144-tls13-in-tls12-2-client
+
+[92-curve-ffdhe6144-tls13-in-tls12-2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe6144
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[92-curve-ffdhe6144-tls13-in-tls12-2-client]
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe6144
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-92]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[93-curve-ffdhe8192-tls13-in-tls12]
+ssl_conf = 93-curve-ffdhe8192-tls13-in-tls12-ssl
+
+[93-curve-ffdhe8192-tls13-in-tls12-ssl]
+server = 93-curve-ffdhe8192-tls13-in-tls12-server
+client = 93-curve-ffdhe8192-tls13-in-tls12-client
+
+[93-curve-ffdhe8192-tls13-in-tls12-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe8192
+MaxProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[93-curve-ffdhe8192-tls13-in-tls12-client]
+CipherString = ECDHE@SECLEVEL=1
+Curves = ffdhe8192
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-93]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[94-curve-ffdhe8192-tls13-in-tls12-2]
+ssl_conf = 94-curve-ffdhe8192-tls13-in-tls12-2-ssl
+
+[94-curve-ffdhe8192-tls13-in-tls12-2-ssl]
+server = 94-curve-ffdhe8192-tls13-in-tls12-2-server
+client = 94-curve-ffdhe8192-tls13-in-tls12-2-client
+
+[94-curve-ffdhe8192-tls13-in-tls12-2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe8192
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[94-curve-ffdhe8192-tls13-in-tls12-2-client]
+CipherString = DEFAULT@SECLEVEL=1
+Curves = ffdhe8192
+MaxProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-94]
+ExpectedResult = Success
+
+
diff --git a/test/ssl-tests/14-curves.cnf.in b/test/ssl-tests/14-curves.cnf.in
new file mode 100644
index 000000000000..1e003bace0b7
--- /dev/null
+++ b/test/ssl-tests/14-curves.cnf.in
@@ -0,0 +1,177 @@
+# -*- mode: perl; -*-
+
+## SSL test configurations
+
+package ssltests;
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils qw(anydisabled);
+
+our $fips_mode;
+
+my @curves = ("prime256v1", "secp384r1", "secp521r1", "X25519",
+ "X448");
+
+#Curves *only* suitable for use in TLSv1.3
+my @curves_tls_1_3 = ("ffdhe2048", "ffdhe3072", "ffdhe4096", "ffdhe6144",
+ "ffdhe8192");
+
+push @curves, @curves_tls_1_3;
+
+my @curves_tls_1_2 = ("sect233k1", "sect233r1",
+ "sect283k1", "sect283r1", "sect409k1", "sect409r1",
+ "sect571k1", "sect571r1", "secp224r1");
+
+my @curves_non_fips = ("sect163k1", "sect163r2", "prime192v1",
+ "sect163r1", "sect193r1", "sect193r2", "sect239k1",
+ "secp160k1", "secp160r1", "secp160r2", "secp192k1",
+ "secp224k1", "secp256k1", "brainpoolP256r1",
+ "brainpoolP384r1", "brainpoolP512r1");
+
+push @curves_tls_1_2, @curves_non_fips if !$fips_mode;
+
+our @tests = ();
+
+sub get_key_type {
+ my $group = shift;
+ my $keyType;
+
+ if ($group =~ /ffdhe/) {
+ $keyType = "dhKeyAgreement";
+ } else {
+ $keyType = $group;
+ }
+
+ return $keyType;
+}
+
+sub generate_tests() {
+ foreach (0..$#curves) {
+ my $curve = $curves[$_];
+ push @tests, {
+ name => "curve-${curve}",
+ server => {
+ "Curves" => $curve,
+ "MaxProtocol" => "TLSv1.3"
+ },
+ client => {
+ "CipherString" => "ECDHE",
+ "MaxProtocol" => "TLSv1.3",
+ "Curves" => $curve
+ },
+ test => {
+ "ExpectedTmpKeyType" => get_key_type($curve),
+ "ExpectedProtocol" => "TLSv1.3",
+ "ExpectedResult" => "Success"
+ },
+ };
+ }
+ foreach (0..$#curves_tls_1_2) {
+ my $curve = $curves_tls_1_2[$_];
+ push @tests, {
+ name => "curve-${curve}",
+ server => {
+ "Curves" => $curve,
+ "MaxProtocol" => "TLSv1.3"
+ },
+ client => {
+ "CipherString" => "ECDHE",
+ "MaxProtocol" => "TLSv1.2",
+ "Curves" => $curve
+ },
+ test => {
+ "ExpectedTmpKeyType" => get_key_type($curve),
+ "ExpectedProtocol" => "TLSv1.2",
+ "ExpectedResult" => "Success"
+ },
+ };
+ }
+ foreach (0..$#curves_tls_1_2) {
+ my $curve = $curves_tls_1_2[$_];
+ push @tests, {
+ name => "curve-${curve}-tls12-in-tls13",
+ server => {
+ "Curves" => "$curve:P-256",
+ "CipherString" => 'DEFAULT@SECLEVEL=1',
+ "MaxProtocol" => "TLSv1.3"
+ },
+ client => {
+ "CipherString" => 'ECDHE@SECLEVEL=1',
+ "MaxProtocol" => "TLSv1.3",
+ "MinProtocol" => "TLSv1.3",
+ "Curves" => "$curve:P-256"
+ },
+ test => {
+ #This curve is not allowed in a TLSv1.3 key_share. We should
+ #succeed but fallback to P-256
+ "ExpectedTmpKeyType" => "P-256",
+ "ExpectedProtocol" => "TLSv1.3",
+ "ExpectedResult" => "Success"
+ },
+ };
+ }
+ foreach (0..$#curves_tls_1_2) {
+ my $curve = $curves_tls_1_2[$_];
+ push @tests, {
+ name => "curve-${curve}-tls13",
+ server => {
+ "Curves" => $curve,
+ "MaxProtocol" => "TLSv1.3"
+ },
+ client => {
+ "CipherString" => "ECDHE",
+ "MinProtocol" => "TLSv1.3",
+ "Curves" => $curve
+ },
+ test => {
+ "ExpectedResult" => "ClientFail"
+ },
+ };
+ }
+ foreach (0..$#curves_tls_1_3) {
+ my $curve = $curves_tls_1_3[$_];
+ push @tests, {
+ name => "curve-${curve}-tls13-in-tls12",
+ server => {
+ "Curves" => $curve,
+ "CipherString" => 'DEFAULT@SECLEVEL=1',
+ "MaxProtocol" => "TLSv1.3"
+ },
+ client => {
+ "CipherString" => 'ECDHE@SECLEVEL=1',
+ "MaxProtocol" => "TLSv1.2",
+ "Curves" => $curve
+ },
+ test => {
+ #These curves are only suitable for TLSv1.3 so we expect the
+ #server to fail because it has no shared groups for TLSv1.2
+ #ECDHE key exchange
+ "ExpectedResult" => "ServerFail"
+ },
+ };
+ push @tests, {
+ name => "curve-${curve}-tls13-in-tls12-2",
+ server => {
+ "Curves" => $curve,
+ "CipherString" => 'DEFAULT@SECLEVEL=1',
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {
+ "CipherString" => 'DEFAULT@SECLEVEL=1',
+ "MaxProtocol" => "TLSv1.3",
+ "Curves" => $curve
+ },
+ test => {
+ #These curves are only suitable for TLSv1.3. We expect TLSv1.2
+ #negotiation to succeed because we fall back to some other
+ #ciphersuite
+ "ExpectedResult" => "Success"
+ },
+ };
+ }
+}
+
+generate_tests();
diff --git a/test/ssl-tests/15-certstatus.cnf b/test/ssl-tests/15-certstatus.cnf
new file mode 100644
index 000000000000..bf6c41cda2f3
--- /dev/null
+++ b/test/ssl-tests/15-certstatus.cnf
@@ -0,0 +1,62 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 2
+
+test-0 = 0-certstatus-good
+test-1 = 1-certstatus-bad
+# ===========================================================
+
+[0-certstatus-good]
+ssl_conf = 0-certstatus-good-ssl
+
+[0-certstatus-good-ssl]
+server = 0-certstatus-good-server
+client = 0-certstatus-good-client
+
+[0-certstatus-good-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-certstatus-good-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+Method = TLS
+server = 0-certstatus-good-server-extra
+
+[0-certstatus-good-server-extra]
+CertStatus = GoodResponse
+
+
+# ===========================================================
+
+[1-certstatus-bad]
+ssl_conf = 1-certstatus-bad-ssl
+
+[1-certstatus-bad-ssl]
+server = 1-certstatus-bad-server
+client = 1-certstatus-bad-client
+
+[1-certstatus-bad-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-certstatus-bad-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = ClientFail
+Method = TLS
+server = 1-certstatus-bad-server-extra
+
+[1-certstatus-bad-server-extra]
+CertStatus = BadResponse
+
+
diff --git a/test/ssl-tests/15-certstatus.cnf.in b/test/ssl-tests/15-certstatus.cnf.in
new file mode 100644
index 000000000000..f2c5b63346a6
--- /dev/null
+++ b/test/ssl-tests/15-certstatus.cnf.in
@@ -0,0 +1,45 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test CertStatus messages
+
+use strict;
+use warnings;
+
+package ssltests;
+
+
+our @tests = (
+ {
+ name => "certstatus-good",
+ server => {
+ extra => {
+ "CertStatus" => "GoodResponse",
+ },
+ },
+ client => {},
+ test => {
+ "Method" => "TLS",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "certstatus-bad",
+ server => {
+ extra => {
+ "CertStatus" => "BadResponse",
+ },
+ },
+ client => {},
+ test => {
+ "Method" => "TLS",
+ "ExpectedResult" => "ClientFail"
+ }
+ },
+);
diff --git a/test/ssl-tests/16-dtls-certstatus.cnf b/test/ssl-tests/16-dtls-certstatus.cnf
new file mode 100644
index 000000000000..ee46be4d3bef
--- /dev/null
+++ b/test/ssl-tests/16-dtls-certstatus.cnf
@@ -0,0 +1,62 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 2
+
+test-0 = 0-certstatus-good
+test-1 = 1-certstatus-bad
+# ===========================================================
+
+[0-certstatus-good]
+ssl_conf = 0-certstatus-good-ssl
+
+[0-certstatus-good-ssl]
+server = 0-certstatus-good-server
+client = 0-certstatus-good-client
+
+[0-certstatus-good-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-certstatus-good-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+Method = DTLS
+server = 0-certstatus-good-server-extra
+
+[0-certstatus-good-server-extra]
+CertStatus = GoodResponse
+
+
+# ===========================================================
+
+[1-certstatus-bad]
+ssl_conf = 1-certstatus-bad-ssl
+
+[1-certstatus-bad-ssl]
+server = 1-certstatus-bad-server
+client = 1-certstatus-bad-client
+
+[1-certstatus-bad-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-certstatus-bad-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = ClientFail
+Method = DTLS
+server = 1-certstatus-bad-server-extra
+
+[1-certstatus-bad-server-extra]
+CertStatus = BadResponse
+
+
diff --git a/test/ssl-tests/16-dtls-certstatus.cnf.in b/test/ssl-tests/16-dtls-certstatus.cnf.in
new file mode 100644
index 000000000000..b5ae020e6a0c
--- /dev/null
+++ b/test/ssl-tests/16-dtls-certstatus.cnf.in
@@ -0,0 +1,97 @@
+# -*- mode: perl; -*-
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+## Test DTLS CertStatus messages
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our $fips_mode;
+
+our @tests = ();
+
+our @tests_standard = (
+ {
+ name => "certstatus-good",
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ extra => {
+ "CertStatus" => "GoodResponse"
+ },
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ },
+ test => {
+ "Method" => "DTLS",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "certstatus-bad",
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ extra => {
+ "CertStatus" => "BadResponse",
+ },
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ },
+ test => {
+ "Method" => "DTLS",
+ "ExpectedResult" => "ClientFail"
+ }
+ }
+);
+
+our @tests_sctp = (
+ {
+ name => "certstatus-good",
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ extra => {
+ "CertStatus" => "GoodResponse",
+ },
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => "Yes",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "certstatus-bad",
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ extra => {
+ "CertStatus" => "BadResponse",
+ },
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => "Yes",
+ "ExpectedResult" => "ClientFail"
+ }
+ },
+);
+
+if (!$fips_mode || !disabled("dtls1_2")) {
+ push @tests, @tests_standard;
+ push @tests, @tests_sctp unless disabled("sctp") || disabled("sock");
+}
diff --git a/test/ssl-tests/17-renegotiate.cnf b/test/ssl-tests/17-renegotiate.cnf
new file mode 100644
index 000000000000..2ebc961420b7
--- /dev/null
+++ b/test/ssl-tests/17-renegotiate.cnf
@@ -0,0 +1,554 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 18
+
+test-0 = 0-renegotiate-client-no-resume
+test-1 = 1-renegotiate-client-resume
+test-2 = 2-renegotiate-server-no-resume
+test-3 = 3-renegotiate-server-resume
+test-4 = 4-renegotiate-client-auth-require
+test-5 = 5-renegotiate-client-auth-once
+test-6 = 6-renegotiate-client-legacy-connect
+test-7 = 7-renegotiate-aead-to-non-aead
+test-8 = 8-renegotiate-non-aead-to-aead
+test-9 = 9-renegotiate-non-aead-to-non-aead
+test-10 = 10-renegotiate-aead-to-aead
+test-11 = 11-no-renegotiation-server-by-client
+test-12 = 12-no-renegotiation-server-by-server
+test-13 = 13-no-renegotiation-client-by-server
+test-14 = 14-no-renegotiation-client-by-client
+test-15 = 15-no-extms-on-renegotiation
+test-16 = 16-allow-client-renegotiation
+test-17 = 17-no-client-renegotiation
+# ===========================================================
+
+[0-renegotiate-client-no-resume]
+ssl_conf = 0-renegotiate-client-no-resume-ssl
+
+[0-renegotiate-client-no-resume-ssl]
+server = 0-renegotiate-client-no-resume-server
+client = 0-renegotiate-client-no-resume-client
+
+[0-renegotiate-client-no-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-renegotiate-client-no-resume-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[1-renegotiate-client-resume]
+ssl_conf = 1-renegotiate-client-resume-ssl
+
+[1-renegotiate-client-resume-ssl]
+server = 1-renegotiate-client-resume-server
+client = 1-renegotiate-client-resume-client
+
+[1-renegotiate-client-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-renegotiate-client-resume-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[2-renegotiate-server-no-resume]
+ssl_conf = 2-renegotiate-server-no-resume-ssl
+
+[2-renegotiate-server-no-resume-ssl]
+server = 2-renegotiate-server-no-resume-server
+client = 2-renegotiate-server-no-resume-client
+
+[2-renegotiate-server-no-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-renegotiate-server-no-resume-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+HandshakeMode = RenegotiateServer
+Method = TLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[3-renegotiate-server-resume]
+ssl_conf = 3-renegotiate-server-resume-ssl
+
+[3-renegotiate-server-resume-ssl]
+server = 3-renegotiate-server-resume-server
+client = 3-renegotiate-server-resume-client
+
+[3-renegotiate-server-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-renegotiate-server-resume-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+HandshakeMode = RenegotiateServer
+Method = TLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[4-renegotiate-client-auth-require]
+ssl_conf = 4-renegotiate-client-auth-require-ssl
+
+[4-renegotiate-client-auth-require-ssl]
+server = 4-renegotiate-client-auth-require-server
+client = 4-renegotiate-client-auth-require-client
+
+[4-renegotiate-client-auth-require-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[4-renegotiate-client-auth-require-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = Success
+HandshakeMode = RenegotiateServer
+Method = TLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[5-renegotiate-client-auth-once]
+ssl_conf = 5-renegotiate-client-auth-once-ssl
+
+[5-renegotiate-client-auth-once-ssl]
+server = 5-renegotiate-client-auth-once-server
+client = 5-renegotiate-client-auth-once-client
+
+[5-renegotiate-client-auth-once-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Once
+
+[5-renegotiate-client-auth-once-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = Success
+HandshakeMode = RenegotiateServer
+Method = TLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[6-renegotiate-client-legacy-connect]
+ssl_conf = 6-renegotiate-client-legacy-connect-ssl
+
+[6-renegotiate-client-legacy-connect-ssl]
+server = 6-renegotiate-client-legacy-connect-server
+client = 6-renegotiate-client-legacy-connect-client
+
+[6-renegotiate-client-legacy-connect-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-renegotiate-client-legacy-connect-client]
+CipherString = DEFAULT
+Options = UnsafeLegacyServerConnect
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[7-renegotiate-aead-to-non-aead]
+ssl_conf = 7-renegotiate-aead-to-non-aead-ssl
+
+[7-renegotiate-aead-to-non-aead-ssl]
+server = 7-renegotiate-aead-to-non-aead-server
+client = 7-renegotiate-aead-to-non-aead-client
+
+[7-renegotiate-aead-to-non-aead-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-renegotiate-aead-to-non-aead-client]
+CipherString = AES128-GCM-SHA256
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = No
+client = 7-renegotiate-aead-to-non-aead-client-extra
+
+[7-renegotiate-aead-to-non-aead-client-extra]
+RenegotiateCiphers = AES128-SHA
+
+
+# ===========================================================
+
+[8-renegotiate-non-aead-to-aead]
+ssl_conf = 8-renegotiate-non-aead-to-aead-ssl
+
+[8-renegotiate-non-aead-to-aead-ssl]
+server = 8-renegotiate-non-aead-to-aead-server
+client = 8-renegotiate-non-aead-to-aead-client
+
+[8-renegotiate-non-aead-to-aead-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-renegotiate-non-aead-to-aead-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = No
+client = 8-renegotiate-non-aead-to-aead-client-extra
+
+[8-renegotiate-non-aead-to-aead-client-extra]
+RenegotiateCiphers = AES128-GCM-SHA256
+
+
+# ===========================================================
+
+[9-renegotiate-non-aead-to-non-aead]
+ssl_conf = 9-renegotiate-non-aead-to-non-aead-ssl
+
+[9-renegotiate-non-aead-to-non-aead-ssl]
+server = 9-renegotiate-non-aead-to-non-aead-server
+client = 9-renegotiate-non-aead-to-non-aead-client
+
+[9-renegotiate-non-aead-to-non-aead-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-renegotiate-non-aead-to-non-aead-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = No
+client = 9-renegotiate-non-aead-to-non-aead-client-extra
+
+[9-renegotiate-non-aead-to-non-aead-client-extra]
+RenegotiateCiphers = AES256-SHA
+
+
+# ===========================================================
+
+[10-renegotiate-aead-to-aead]
+ssl_conf = 10-renegotiate-aead-to-aead-ssl
+
+[10-renegotiate-aead-to-aead-ssl]
+server = 10-renegotiate-aead-to-aead-server
+client = 10-renegotiate-aead-to-aead-client
+
+[10-renegotiate-aead-to-aead-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-renegotiate-aead-to-aead-client]
+CipherString = AES128-GCM-SHA256
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = No
+client = 10-renegotiate-aead-to-aead-client-extra
+
+[10-renegotiate-aead-to-aead-client-extra]
+RenegotiateCiphers = AES256-GCM-SHA384
+
+
+# ===========================================================
+
+[11-no-renegotiation-server-by-client]
+ssl_conf = 11-no-renegotiation-server-by-client-ssl
+
+[11-no-renegotiation-server-by-client-ssl]
+server = 11-no-renegotiation-server-by-client-server
+client = 11-no-renegotiation-server-by-client-client
+
+[11-no-renegotiation-server-by-client-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = NoRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-no-renegotiation-server-by-client-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedResult = ClientFail
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[12-no-renegotiation-server-by-server]
+ssl_conf = 12-no-renegotiation-server-by-server-ssl
+
+[12-no-renegotiation-server-by-server-ssl]
+server = 12-no-renegotiation-server-by-server-server
+client = 12-no-renegotiation-server-by-server-client
+
+[12-no-renegotiation-server-by-server-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = NoRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-no-renegotiation-server-by-server-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedResult = ServerFail
+HandshakeMode = RenegotiateServer
+Method = TLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[13-no-renegotiation-client-by-server]
+ssl_conf = 13-no-renegotiation-client-by-server-ssl
+
+[13-no-renegotiation-client-by-server-ssl]
+server = 13-no-renegotiation-client-by-server-server
+client = 13-no-renegotiation-client-by-server-client
+
+[13-no-renegotiation-client-by-server-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-no-renegotiation-client-by-server-client]
+CipherString = DEFAULT
+Options = NoRenegotiation
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedResult = ServerFail
+HandshakeMode = RenegotiateServer
+Method = TLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[14-no-renegotiation-client-by-client]
+ssl_conf = 14-no-renegotiation-client-by-client-ssl
+
+[14-no-renegotiation-client-by-client-ssl]
+server = 14-no-renegotiation-client-by-client-server
+client = 14-no-renegotiation-client-by-client-client
+
+[14-no-renegotiation-client-by-client-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-no-renegotiation-client-by-client-client]
+CipherString = DEFAULT
+Options = NoRenegotiation
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedResult = ClientFail
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[15-no-extms-on-renegotiation]
+ssl_conf = 15-no-extms-on-renegotiation-ssl
+
+[15-no-extms-on-renegotiation-ssl]
+server = 15-no-extms-on-renegotiation-server
+client = 15-no-extms-on-renegotiation-client
+
+[15-no-extms-on-renegotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-no-extms-on-renegotiation-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedResult = ServerFail
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = No
+client = 15-no-extms-on-renegotiation-client-extra
+
+[15-no-extms-on-renegotiation-client-extra]
+RenegotiateNoExtms = Yes
+
+
+# ===========================================================
+
+[16-allow-client-renegotiation]
+ssl_conf = 16-allow-client-renegotiation-ssl
+
+[16-allow-client-renegotiation-ssl]
+server = 16-allow-client-renegotiation-server
+client = 16-allow-client-renegotiation-client
+
+[16-allow-client-renegotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-allow-client-renegotiation-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-16]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = Yes
+
+
+# ===========================================================
+
+[17-no-client-renegotiation]
+ssl_conf = 17-no-client-renegotiation-ssl
+
+[17-no-client-renegotiation-ssl]
+server = 17-no-client-renegotiation-server
+client = 17-no-client-renegotiation-client
+
+[17-no-client-renegotiation-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = -ClientRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[17-no-client-renegotiation-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-17]
+ExpectedResult = ClientFail
+ExpectedServerAlert = NoRenegotiation
+HandshakeMode = RenegotiateClient
+Method = TLS
+ResumptionExpected = No
+
+
diff --git a/test/ssl-tests/17-renegotiate.cnf.in b/test/ssl-tests/17-renegotiate.cnf.in
new file mode 100644
index 000000000000..73e3b4914c0a
--- /dev/null
+++ b/test/ssl-tests/17-renegotiate.cnf.in
@@ -0,0 +1,316 @@
+# -*- mode: perl; -*-
+# Copyright 2016-2022 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
+
+
+## Test Renegotiation
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our @tests = (
+ {
+ name => "renegotiate-client-no-resume",
+ server => {
+ "Options" => "NoResumptionOnRenegotiation",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {},
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-client-resume",
+ server => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {},
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "Yes",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-server-no-resume",
+ server => {
+ "Options" => "NoResumptionOnRenegotiation",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {},
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateServer",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-server-resume",
+ server => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {},
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateServer",
+ "ResumptionExpected" => "Yes",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-client-auth-require",
+ server => {
+ "Options" => "NoResumptionOnRenegotiation",
+ "MaxProtocol" => "TLSv1.2",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require",
+ },
+ client => {
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateServer",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-client-auth-once",
+ server => {
+ "Options" => "NoResumptionOnRenegotiation",
+ "MaxProtocol" => "TLSv1.2",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Once",
+ },
+ client => {
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateServer",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+# Just test that UnsafeLegacyServerConnect option
+# exists, it won't have any real effect here
+ name => "renegotiate-client-legacy-connect",
+ server => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {
+ "Options" => "UnsafeLegacyServerConnect",
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "Yes",
+ "ExpectedResult" => "Success"
+ }
+ },
+);
+our @tests_tls1_2 = (
+ {
+ name => "renegotiate-aead-to-non-aead",
+ server => {
+ "Options" => "NoResumptionOnRenegotiation",
+ },
+ client => {
+ "CipherString" => "AES128-GCM-SHA256",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "RenegotiateCiphers" => "AES128-SHA"
+ }
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-non-aead-to-aead",
+ server => {
+ "Options" => "NoResumptionOnRenegotiation",
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "RenegotiateCiphers" => "AES128-GCM-SHA256"
+ }
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-non-aead-to-non-aead",
+ server => {
+ "Options" => "NoResumptionOnRenegotiation",
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "RenegotiateCiphers" => "AES256-SHA"
+ }
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-aead-to-aead",
+ server => {
+ "Options" => "NoResumptionOnRenegotiation",
+ },
+ client => {
+ "CipherString" => "AES128-GCM-SHA256",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "RenegotiateCiphers" => "AES256-GCM-SHA384"
+ }
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "no-renegotiation-server-by-client",
+ server => {
+ "Options" => "NoRenegotiation",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => { },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "ClientFail"
+ }
+ },
+ {
+ name => "no-renegotiation-server-by-server",
+ server => {
+ "Options" => "NoRenegotiation",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => { },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateServer",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "ServerFail"
+ }
+ },
+ {
+ name => "no-renegotiation-client-by-server",
+ server => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {
+ "Options" => "NoRenegotiation",
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateServer",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "ServerFail"
+ }
+ },
+ {
+ name => "no-renegotiation-client-by-client",
+ server => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {
+ "Options" => "NoRenegotiation",
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "ClientFail"
+ }
+ },
+ {
+ name => "no-extms-on-renegotiation",
+ server => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "RenegotiateNoExtms" => "Yes"
+ }
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "ServerFail"
+ }
+ },
+ {
+ name => "allow-client-renegotiation",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "Yes",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "no-client-renegotiation",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "Options" => "-ClientRenegotiation"
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ },
+ test => {
+ "Method" => "TLS",
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "ClientFail",
+ "ExpectedServerAlert" => "NoRenegotiation"
+ }
+ }
+);
+
+push @tests, @tests_tls1_2 unless disabled("tls1_2");
diff --git a/test/ssl-tests/18-dtls-renegotiate.cnf b/test/ssl-tests/18-dtls-renegotiate.cnf
new file mode 100644
index 000000000000..0f3d1eae239e
--- /dev/null
+++ b/test/ssl-tests/18-dtls-renegotiate.cnf
@@ -0,0 +1,285 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 9
+
+test-0 = 0-renegotiate-client-no-resume
+test-1 = 1-renegotiate-client-resume
+test-2 = 2-renegotiate-server-resume
+test-3 = 3-renegotiate-client-auth-require
+test-4 = 4-renegotiate-client-auth-once
+test-5 = 5-renegotiate-aead-to-non-aead
+test-6 = 6-renegotiate-non-aead-to-aead
+test-7 = 7-renegotiate-non-aead-to-non-aead
+test-8 = 8-renegotiate-aead-to-aead
+# ===========================================================
+
+[0-renegotiate-client-no-resume]
+ssl_conf = 0-renegotiate-client-no-resume-ssl
+
+[0-renegotiate-client-no-resume-ssl]
+server = 0-renegotiate-client-no-resume-server
+client = 0-renegotiate-client-no-resume-client
+
+[0-renegotiate-client-no-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-renegotiate-client-no-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = DTLS
+ResumptionExpected = No
+UseSCTP = No
+
+
+# ===========================================================
+
+[1-renegotiate-client-resume]
+ssl_conf = 1-renegotiate-client-resume-ssl
+
+[1-renegotiate-client-resume-ssl]
+server = 1-renegotiate-client-resume-server
+client = 1-renegotiate-client-resume-client
+
+[1-renegotiate-client-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-renegotiate-client-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = DTLS
+ResumptionExpected = Yes
+UseSCTP = No
+
+
+# ===========================================================
+
+[2-renegotiate-server-resume]
+ssl_conf = 2-renegotiate-server-resume-ssl
+
+[2-renegotiate-server-resume-ssl]
+server = 2-renegotiate-server-resume-server
+client = 2-renegotiate-server-resume-client
+
+[2-renegotiate-server-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-renegotiate-server-resume-client]
+CipherString = DEFAULT:@SECLEVEL=0
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+HandshakeMode = RenegotiateServer
+Method = DTLS
+ResumptionExpected = No
+UseSCTP = No
+
+
+# ===========================================================
+
+[3-renegotiate-client-auth-require]
+ssl_conf = 3-renegotiate-client-auth-require-ssl
+
+[3-renegotiate-client-auth-require-ssl]
+server = 3-renegotiate-client-auth-require-server
+client = 3-renegotiate-client-auth-require-client
+
+[3-renegotiate-client-auth-require-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[3-renegotiate-client-auth-require-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+HandshakeMode = RenegotiateServer
+Method = DTLS
+ResumptionExpected = No
+UseSCTP = No
+
+
+# ===========================================================
+
+[4-renegotiate-client-auth-once]
+ssl_conf = 4-renegotiate-client-auth-once-ssl
+
+[4-renegotiate-client-auth-once-ssl]
+server = 4-renegotiate-client-auth-once-server
+client = 4-renegotiate-client-auth-once-client
+
+[4-renegotiate-client-auth-once-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Once
+
+[4-renegotiate-client-auth-once-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = Success
+HandshakeMode = RenegotiateServer
+Method = DTLS
+ResumptionExpected = No
+UseSCTP = No
+
+
+# ===========================================================
+
+[5-renegotiate-aead-to-non-aead]
+ssl_conf = 5-renegotiate-aead-to-non-aead-ssl
+
+[5-renegotiate-aead-to-non-aead-ssl]
+server = 5-renegotiate-aead-to-non-aead-server
+client = 5-renegotiate-aead-to-non-aead-client
+
+[5-renegotiate-aead-to-non-aead-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-renegotiate-aead-to-non-aead-client]
+CipherString = AES128-GCM-SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = DTLS
+ResumptionExpected = No
+UseSCTP = No
+client = 5-renegotiate-aead-to-non-aead-client-extra
+
+[5-renegotiate-aead-to-non-aead-client-extra]
+RenegotiateCiphers = AES128-SHA
+
+
+# ===========================================================
+
+[6-renegotiate-non-aead-to-aead]
+ssl_conf = 6-renegotiate-non-aead-to-aead-ssl
+
+[6-renegotiate-non-aead-to-aead-ssl]
+server = 6-renegotiate-non-aead-to-aead-server
+client = 6-renegotiate-non-aead-to-aead-client
+
+[6-renegotiate-non-aead-to-aead-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-renegotiate-non-aead-to-aead-client]
+CipherString = AES128-SHA
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = DTLS
+ResumptionExpected = No
+UseSCTP = No
+client = 6-renegotiate-non-aead-to-aead-client-extra
+
+[6-renegotiate-non-aead-to-aead-client-extra]
+RenegotiateCiphers = AES128-GCM-SHA256
+
+
+# ===========================================================
+
+[7-renegotiate-non-aead-to-non-aead]
+ssl_conf = 7-renegotiate-non-aead-to-non-aead-ssl
+
+[7-renegotiate-non-aead-to-non-aead-ssl]
+server = 7-renegotiate-non-aead-to-non-aead-server
+client = 7-renegotiate-non-aead-to-non-aead-client
+
+[7-renegotiate-non-aead-to-non-aead-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-renegotiate-non-aead-to-non-aead-client]
+CipherString = AES128-SHA
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = DTLS
+ResumptionExpected = No
+UseSCTP = No
+client = 7-renegotiate-non-aead-to-non-aead-client-extra
+
+[7-renegotiate-non-aead-to-non-aead-client-extra]
+RenegotiateCiphers = AES256-SHA
+
+
+# ===========================================================
+
+[8-renegotiate-aead-to-aead]
+ssl_conf = 8-renegotiate-aead-to-aead-ssl
+
+[8-renegotiate-aead-to-aead-ssl]
+server = 8-renegotiate-aead-to-aead-server
+client = 8-renegotiate-aead-to-aead-client
+
+[8-renegotiate-aead-to-aead-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = NoResumptionOnRenegotiation
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-renegotiate-aead-to-aead-client]
+CipherString = AES128-GCM-SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedResult = Success
+HandshakeMode = RenegotiateClient
+Method = DTLS
+ResumptionExpected = No
+UseSCTP = No
+client = 8-renegotiate-aead-to-aead-client-extra
+
+[8-renegotiate-aead-to-aead-client-extra]
+RenegotiateCiphers = AES256-GCM-SHA384
+
+
diff --git a/test/ssl-tests/18-dtls-renegotiate.cnf.in b/test/ssl-tests/18-dtls-renegotiate.cnf.in
new file mode 100644
index 000000000000..dbac249f47f6
--- /dev/null
+++ b/test/ssl-tests/18-dtls-renegotiate.cnf.in
@@ -0,0 +1,210 @@
+# -*- mode: perl; -*-
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+## Test Renegotiation
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our $fips_mode;
+
+our @tests = ();
+
+foreach my $sctp ("No", "Yes")
+{
+ next if disabled("sctp") && $sctp eq "Yes";
+ next if disabled("dtls1_2") && $fips_mode;
+
+ my $suffix = ($sctp eq "No") ? "" : "-sctp";
+ our @tests_basic = (
+ {
+ name => "renegotiate-client-no-resume".$suffix,
+ server => {
+ "CipherString" => 'DEFAULT:@SECLEVEL=0',
+ "Options" => "NoResumptionOnRenegotiation"
+ },
+ client => {
+ "CipherString" => 'DEFAULT:@SECLEVEL=0'
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => $sctp,
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-client-resume".$suffix,
+ server => {
+ "CipherString" => 'DEFAULT:@SECLEVEL=0'
+ },
+ client => {
+ "CipherString" => 'DEFAULT:@SECLEVEL=0'
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => $sctp,
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "Yes",
+ "ExpectedResult" => "Success"
+ }
+ },
+ # Note: Unlike the TLS tests, we will never do resumption with server
+ # initiated reneg. This is because an OpenSSL DTLS client will always do a full
+ # handshake (i.e. it doesn't supply a session id) when it receives a
+ # HelloRequest. This is different to the OpenSSL TLS implementation where an
+ # OpenSSL client will always try an abbreviated handshake (i.e. it will supply
+ # the session id). This goes all the way to commit 48ae85b6f when abbreviated
+ # handshake support was first added. Neither behaviour is wrong, but the
+ # discrepancy is strange. TODO: Should we harmonise the TLS and DTLS behaviour,
+ # and if so, what to?
+ {
+ name => "renegotiate-server-resume".$suffix,
+ server => {
+ "CipherString" => 'DEFAULT:@SECLEVEL=0'
+ },
+ client => {
+ "CipherString" => 'DEFAULT:@SECLEVEL=0'
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => $sctp,
+ "HandshakeMode" => "RenegotiateServer",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-client-auth-require".$suffix,
+ server => {
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require",
+ "CipherString" => 'DEFAULT:@SECLEVEL=0'
+ },
+ client => {
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ "CipherString" => 'DEFAULT:@SECLEVEL=0'
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => $sctp,
+ "HandshakeMode" => "RenegotiateServer",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-client-auth-once".$suffix,
+ server => {
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Once",
+ "CipherString" => 'DEFAULT:@SECLEVEL=0'
+ },
+ client => {
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ "CipherString" => 'DEFAULT:@SECLEVEL=0'
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => $sctp,
+ "HandshakeMode" => "RenegotiateServer",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ }
+ );
+ push @tests, @tests_basic;
+
+ next if disabled("dtls1_2");
+ our @tests_dtls1_2 = (
+ {
+ name => "renegotiate-aead-to-non-aead".$suffix,
+ server => {
+ "Options" => "NoResumptionOnRenegotiation"
+ },
+ client => {
+ "CipherString" => "AES128-GCM-SHA256",
+ extra => {
+ "RenegotiateCiphers" => "AES128-SHA"
+ }
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => $sctp,
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-non-aead-to-aead".$suffix,
+ server => {
+ "Options" => "NoResumptionOnRenegotiation"
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ extra => {
+ "RenegotiateCiphers" => "AES128-GCM-SHA256"
+ }
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => $sctp,
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-non-aead-to-non-aead".$suffix,
+ server => {
+ "Options" => "NoResumptionOnRenegotiation"
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ extra => {
+ "RenegotiateCiphers" => "AES256-SHA"
+ }
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => $sctp,
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "renegotiate-aead-to-aead".$suffix,
+ server => {
+ "Options" => "NoResumptionOnRenegotiation"
+ },
+ client => {
+ "CipherString" => "AES128-GCM-SHA256",
+ extra => {
+ "RenegotiateCiphers" => "AES256-GCM-SHA384"
+ }
+ },
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => $sctp,
+ "HandshakeMode" => "RenegotiateClient",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ );
+ push @tests, @tests_dtls1_2;
+}
diff --git a/test/ssl-tests/19-mac-then-encrypt.cnf b/test/ssl-tests/19-mac-then-encrypt.cnf
new file mode 100644
index 000000000000..803c2c0c0fd7
--- /dev/null
+++ b/test/ssl-tests/19-mac-then-encrypt.cnf
@@ -0,0 +1,244 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 9
+
+test-0 = 0-disable-encrypt-then-mac-server-sha
+test-1 = 1-disable-encrypt-then-mac-client-sha
+test-2 = 2-disable-encrypt-then-mac-both-sha
+test-3 = 3-disable-encrypt-then-mac-server-sha2
+test-4 = 4-disable-encrypt-then-mac-client-sha2
+test-5 = 5-disable-encrypt-then-mac-both-sha2
+test-6 = 6-disable-encrypt-then-mac-server-sha-tls1
+test-7 = 7-disable-encrypt-then-mac-client-sha-tls1
+test-8 = 8-disable-encrypt-then-mac-both-sha-tls1
+# ===========================================================
+
+[0-disable-encrypt-then-mac-server-sha]
+ssl_conf = 0-disable-encrypt-then-mac-server-sha-ssl
+
+[0-disable-encrypt-then-mac-server-sha-ssl]
+server = 0-disable-encrypt-then-mac-server-sha-server
+client = 0-disable-encrypt-then-mac-server-sha-client
+
+[0-disable-encrypt-then-mac-server-sha-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -EncryptThenMac
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-disable-encrypt-then-mac-server-sha-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[1-disable-encrypt-then-mac-client-sha]
+ssl_conf = 1-disable-encrypt-then-mac-client-sha-ssl
+
+[1-disable-encrypt-then-mac-client-sha-ssl]
+server = 1-disable-encrypt-then-mac-client-sha-server
+client = 1-disable-encrypt-then-mac-client-sha-client
+
+[1-disable-encrypt-then-mac-client-sha-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-disable-encrypt-then-mac-client-sha-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+Options = -EncryptThenMac
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[2-disable-encrypt-then-mac-both-sha]
+ssl_conf = 2-disable-encrypt-then-mac-both-sha-ssl
+
+[2-disable-encrypt-then-mac-both-sha-ssl]
+server = 2-disable-encrypt-then-mac-both-sha-server
+client = 2-disable-encrypt-then-mac-both-sha-client
+
+[2-disable-encrypt-then-mac-both-sha-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -EncryptThenMac
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-disable-encrypt-then-mac-both-sha-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+Options = -EncryptThenMac
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[3-disable-encrypt-then-mac-server-sha2]
+ssl_conf = 3-disable-encrypt-then-mac-server-sha2-ssl
+
+[3-disable-encrypt-then-mac-server-sha2-ssl]
+server = 3-disable-encrypt-then-mac-server-sha2-server
+client = 3-disable-encrypt-then-mac-server-sha2-client
+
+[3-disable-encrypt-then-mac-server-sha2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -EncryptThenMac
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-disable-encrypt-then-mac-server-sha2-client]
+CipherString = AES128-SHA256
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[4-disable-encrypt-then-mac-client-sha2]
+ssl_conf = 4-disable-encrypt-then-mac-client-sha2-ssl
+
+[4-disable-encrypt-then-mac-client-sha2-ssl]
+server = 4-disable-encrypt-then-mac-client-sha2-server
+client = 4-disable-encrypt-then-mac-client-sha2-client
+
+[4-disable-encrypt-then-mac-client-sha2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-disable-encrypt-then-mac-client-sha2-client]
+CipherString = AES128-SHA256
+MaxProtocol = TLSv1.2
+Options = -EncryptThenMac
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[5-disable-encrypt-then-mac-both-sha2]
+ssl_conf = 5-disable-encrypt-then-mac-both-sha2-ssl
+
+[5-disable-encrypt-then-mac-both-sha2-ssl]
+server = 5-disable-encrypt-then-mac-both-sha2-server
+client = 5-disable-encrypt-then-mac-both-sha2-client
+
+[5-disable-encrypt-then-mac-both-sha2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -EncryptThenMac
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-disable-encrypt-then-mac-both-sha2-client]
+CipherString = AES128-SHA256
+MaxProtocol = TLSv1.2
+Options = -EncryptThenMac
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[6-disable-encrypt-then-mac-server-sha-tls1]
+ssl_conf = 6-disable-encrypt-then-mac-server-sha-tls1-ssl
+
+[6-disable-encrypt-then-mac-server-sha-tls1-ssl]
+server = 6-disable-encrypt-then-mac-server-sha-tls1-server
+client = 6-disable-encrypt-then-mac-server-sha-tls1-client
+
+[6-disable-encrypt-then-mac-server-sha-tls1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -EncryptThenMac
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-disable-encrypt-then-mac-server-sha-tls1-client]
+CipherString = AES128-SHA@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[7-disable-encrypt-then-mac-client-sha-tls1]
+ssl_conf = 7-disable-encrypt-then-mac-client-sha-tls1-ssl
+
+[7-disable-encrypt-then-mac-client-sha-tls1-ssl]
+server = 7-disable-encrypt-then-mac-client-sha-tls1-server
+client = 7-disable-encrypt-then-mac-client-sha-tls1-client
+
+[7-disable-encrypt-then-mac-client-sha-tls1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-disable-encrypt-then-mac-client-sha-tls1-client]
+CipherString = AES128-SHA@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = -EncryptThenMac
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[8-disable-encrypt-then-mac-both-sha-tls1]
+ssl_conf = 8-disable-encrypt-then-mac-both-sha-tls1-ssl
+
+[8-disable-encrypt-then-mac-both-sha-tls1-ssl]
+server = 8-disable-encrypt-then-mac-both-sha-tls1-server
+client = 8-disable-encrypt-then-mac-both-sha-tls1-client
+
+[8-disable-encrypt-then-mac-both-sha-tls1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+Options = -EncryptThenMac
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-disable-encrypt-then-mac-both-sha-tls1-client]
+CipherString = AES128-SHA@SECLEVEL=0
+MaxProtocol = TLSv1
+MinProtocol = TLSv1
+Options = -EncryptThenMac
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedResult = Success
+
+
diff --git a/test/ssl-tests/19-mac-then-encrypt.cnf.in b/test/ssl-tests/19-mac-then-encrypt.cnf.in
new file mode 100644
index 000000000000..074b1d1380a9
--- /dev/null
+++ b/test/ssl-tests/19-mac-then-encrypt.cnf.in
@@ -0,0 +1,155 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## SSL test configurations
+
+package ssltests;
+
+use OpenSSL::Test::Utils;
+
+our $fips_mode;
+
+our @tests = (
+ {
+ name => "disable-encrypt-then-mac-server-sha",
+ server => {
+ "Options" => "-EncryptThenMac",
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-encrypt-then-mac-client-sha",
+ server => {
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ "Options" => "-EncryptThenMac",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-encrypt-then-mac-both-sha",
+ server => {
+ "Options" => "-EncryptThenMac",
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ "Options" => "-EncryptThenMac",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+);
+
+my @tests_tls1_2 = (
+ {
+ name => "disable-encrypt-then-mac-server-sha2",
+ server => {
+ "Options" => "-EncryptThenMac",
+ },
+ client => {
+ "CipherString" => "AES128-SHA256",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-encrypt-then-mac-client-sha2",
+ server => {
+ },
+ client => {
+ "CipherString" => "AES128-SHA256",
+ "Options" => "-EncryptThenMac",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-encrypt-then-mac-both-sha2",
+ server => {
+ "Options" => "-EncryptThenMac",
+ },
+ client => {
+ "CipherString" => "AES128-SHA256",
+ "Options" => "-EncryptThenMac",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+);
+
+our @tests_tls1 = (
+ {
+ name => "disable-encrypt-then-mac-server-sha-tls1",
+ server => {
+ "CipherString" => 'DEFAULT:@SECLEVEL=0',
+ "Options" => "-EncryptThenMac",
+ },
+ client => {
+ "CipherString" => 'AES128-SHA@SECLEVEL=0',
+ "MinProtocol" => "TLSv1",
+ "MaxProtocol" => "TLSv1"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-encrypt-then-mac-client-sha-tls1",
+ server => {
+ "CipherString" => 'DEFAULT:@SECLEVEL=0',
+ },
+ client => {
+ "CipherString" => 'AES128-SHA@SECLEVEL=0',
+ "Options" => "-EncryptThenMac",
+ "MinProtocol" => "TLSv1",
+ "MaxProtocol" => "TLSv1"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-encrypt-then-mac-both-sha-tls1",
+ server => {
+ "CipherString" => 'DEFAULT:@SECLEVEL=0',
+ "Options" => "-EncryptThenMac",
+ },
+ client => {
+ "CipherString" => 'AES128-SHA@SECLEVEL=0',
+ "Options" => "-EncryptThenMac",
+ "MinProtocol" => "TLSv1",
+ "MaxProtocol" => "TLSv1"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+);
+
+
+push @tests, @tests_tls1_2 unless disabled("tls1_2");
+push @tests, @tests_tls1 unless disabled("tls1") || $fips_mode;
diff --git a/test/ssl-tests/20-cert-select.cnf b/test/ssl-tests/20-cert-select.cnf
new file mode 100644
index 000000000000..79dcd4c8f4e2
--- /dev/null
+++ b/test/ssl-tests/20-cert-select.cnf
@@ -0,0 +1,1842 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 57
+
+test-0 = 0-ECDSA CipherString Selection
+test-1 = 1-ECDSA CipherString Selection
+test-2 = 2-ECDSA CipherString Selection
+test-3 = 3-RSA CipherString Selection
+test-4 = 4-P-256 CipherString and Signature Algorithm Selection
+test-5 = 5-ECDSA CipherString Selection, no ECDSA certificate
+test-6 = 6-ECDSA Signature Algorithm Selection
+test-7 = 7-ECDSA Signature Algorithm Selection SHA384
+test-8 = 8-ECDSA Signature Algorithm Selection compressed point
+test-9 = 9-ECDSA Signature Algorithm Selection, no ECDSA certificate
+test-10 = 10-RSA Signature Algorithm Selection
+test-11 = 11-RSA-PSS Signature Algorithm Selection
+test-12 = 12-RSA key exchange with all RSA certificate types
+test-13 = 13-Suite B P-256 Hash Algorithm Selection
+test-14 = 14-Suite B P-384 Hash Algorithm Selection
+test-15 = 15-Ed25519 CipherString and Signature Algorithm Selection
+test-16 = 16-Ed448 CipherString and Signature Algorithm Selection
+test-17 = 17-Ed25519 CipherString and Curves Selection
+test-18 = 18-Ed448 CipherString and Curves Selection
+test-19 = 19-TLS 1.2 Ed25519 Client Auth
+test-20 = 20-TLS 1.2 Ed448 Client Auth
+test-21 = 21-ECDSA Signature Algorithm Selection SHA1
+test-22 = 22-ECDSA with brainpool
+test-23 = 23-RSA-PSS Certificate CipherString Selection
+test-24 = 24-RSA-PSS Certificate Legacy Signature Algorithm Selection
+test-25 = 25-RSA-PSS Certificate Unified Signature Algorithm Selection
+test-26 = 26-Only RSA-PSS Certificate
+test-27 = 27-Only RSA-PSS Certificate Valid Signature Algorithms
+test-28 = 28-RSA-PSS Certificate, no PSS signature algorithms
+test-29 = 29-Only RSA-PSS Restricted Certificate
+test-30 = 30-RSA-PSS Restricted Certificate Valid Signature Algorithms
+test-31 = 31-RSA-PSS Restricted Cert client prefers invalid Signature Algorithm
+test-32 = 32-RSA-PSS Restricted Certificate Invalid Signature Algorithms
+test-33 = 33-RSA key exchange with only RSA-PSS certificate
+test-34 = 34-Only RSA-PSS Certificate, TLS v1.1
+test-35 = 35-TLS 1.3 ECDSA Signature Algorithm Selection
+test-36 = 36-TLS 1.3 ECDSA Signature Algorithm Selection compressed point
+test-37 = 37-TLS 1.3 ECDSA Signature Algorithm Selection SHA1
+test-38 = 38-TLS 1.3 ECDSA Signature Algorithm Selection with PSS
+test-39 = 39-TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS
+test-40 = 40-TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate
+test-41 = 41-TLS 1.3 RSA Signature Algorithm Selection, no PSS
+test-42 = 42-TLS 1.3 RSA-PSS Signature Algorithm Selection
+test-43 = 43-TLS 1.3 RSA Client Auth Signature Algorithm Selection
+test-44 = 44-TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names
+test-45 = 45-TLS 1.3 ECDSA Client Auth Signature Algorithm Selection
+test-46 = 46-TLS 1.3 Ed25519 Signature Algorithm Selection
+test-47 = 47-TLS 1.3 Ed448 Signature Algorithm Selection
+test-48 = 48-TLS 1.3 Ed25519 CipherString and Groups Selection
+test-49 = 49-TLS 1.3 Ed448 CipherString and Groups Selection
+test-50 = 50-TLS 1.3 Ed25519 Client Auth
+test-51 = 51-TLS 1.3 Ed448 Client Auth
+test-52 = 52-TLS 1.3 ECDSA with brainpool but no suitable groups
+test-53 = 53-TLS 1.3 ECDSA with brainpool
+test-54 = 54-TLS 1.2 DSA Certificate Test
+test-55 = 55-TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms
+test-56 = 56-TLS 1.3 DSA Certificate Test
+# ===========================================================
+
+[0-ECDSA CipherString Selection]
+ssl_conf = 0-ECDSA CipherString Selection-ssl
+
+[0-ECDSA CipherString Selection-ssl]
+server = 0-ECDSA CipherString Selection-server
+client = 0-ECDSA CipherString Selection-client
+
+[0-ECDSA CipherString Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-ECDSA CipherString Selection-client]
+CipherString = aECDSA
+MaxProtocol = TLSv1.2
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+ExpectedServerCANames = empty
+ExpectedServerCertType = P-256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[1-ECDSA CipherString Selection]
+ssl_conf = 1-ECDSA CipherString Selection-ssl
+
+[1-ECDSA CipherString Selection-ssl]
+server = 1-ECDSA CipherString Selection-server
+client = 1-ECDSA CipherString Selection-client
+
+[1-ECDSA CipherString Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Groups = P-384
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-ECDSA CipherString Selection-client]
+CipherString = aECDSA
+Groups = P-256:P-384
+MaxProtocol = TLSv1.2
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+ExpectedServerCANames = empty
+ExpectedServerCertType = P-256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[2-ECDSA CipherString Selection]
+ssl_conf = 2-ECDSA CipherString Selection-ssl
+
+[2-ECDSA CipherString Selection-ssl]
+server = 2-ECDSA CipherString Selection-server
+client = 2-ECDSA CipherString Selection-client
+
+[2-ECDSA CipherString Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Groups = P-256:P-384
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-ECDSA CipherString Selection-client]
+CipherString = aECDSA
+Groups = P-384
+MaxProtocol = TLSv1.2
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[3-RSA CipherString Selection]
+ssl_conf = 3-RSA CipherString Selection-ssl
+
+[3-RSA CipherString Selection-ssl]
+server = 3-RSA CipherString Selection-server
+client = 3-RSA CipherString Selection-client
+
+[3-RSA CipherString Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-RSA CipherString Selection-client]
+CipherString = aRSA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+ExpectedServerCertType = RSA
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[4-P-256 CipherString and Signature Algorithm Selection]
+ssl_conf = 4-P-256 CipherString and Signature Algorithm Selection-ssl
+
+[4-P-256 CipherString and Signature Algorithm Selection-ssl]
+server = 4-P-256 CipherString and Signature Algorithm Selection-server
+client = 4-P-256 CipherString and Signature Algorithm Selection-client
+
+[4-P-256 CipherString and Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-P-256 CipherString and Signature Algorithm Selection-client]
+CipherString = aECDSA
+MaxProtocol = TLSv1.2
+SignatureAlgorithms = ECDSA+SHA256:ed25519
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = Success
+ExpectedServerCertType = P-256
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[5-ECDSA CipherString Selection, no ECDSA certificate]
+ssl_conf = 5-ECDSA CipherString Selection, no ECDSA certificate-ssl
+
+[5-ECDSA CipherString Selection, no ECDSA certificate-ssl]
+server = 5-ECDSA CipherString Selection, no ECDSA certificate-server
+client = 5-ECDSA CipherString Selection, no ECDSA certificate-client
+
+[5-ECDSA CipherString Selection, no ECDSA certificate-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-ECDSA CipherString Selection, no ECDSA certificate-client]
+CipherString = aECDSA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[6-ECDSA Signature Algorithm Selection]
+ssl_conf = 6-ECDSA Signature Algorithm Selection-ssl
+
+[6-ECDSA Signature Algorithm Selection-ssl]
+server = 6-ECDSA Signature Algorithm Selection-server
+client = 6-ECDSA Signature Algorithm Selection-client
+
+[6-ECDSA Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-ECDSA Signature Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = Success
+ExpectedServerCertType = P-256
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[7-ECDSA Signature Algorithm Selection SHA384]
+ssl_conf = 7-ECDSA Signature Algorithm Selection SHA384-ssl
+
+[7-ECDSA Signature Algorithm Selection SHA384-ssl]
+server = 7-ECDSA Signature Algorithm Selection SHA384-server
+client = 7-ECDSA Signature Algorithm Selection SHA384-client
+
+[7-ECDSA Signature Algorithm Selection SHA384-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-ECDSA Signature Algorithm Selection SHA384-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA384
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = Success
+ExpectedServerCertType = P-256
+ExpectedServerSignHash = SHA384
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[8-ECDSA Signature Algorithm Selection compressed point]
+ssl_conf = 8-ECDSA Signature Algorithm Selection compressed point-ssl
+
+[8-ECDSA Signature Algorithm Selection compressed point-ssl]
+server = 8-ECDSA Signature Algorithm Selection compressed point-server
+client = 8-ECDSA Signature Algorithm Selection compressed point-client
+
+[8-ECDSA Signature Algorithm Selection compressed point-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-cecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-cecdsa-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-ECDSA Signature Algorithm Selection compressed point-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedResult = Success
+ExpectedServerCertType = P-256
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[9-ECDSA Signature Algorithm Selection, no ECDSA certificate]
+ssl_conf = 9-ECDSA Signature Algorithm Selection, no ECDSA certificate-ssl
+
+[9-ECDSA Signature Algorithm Selection, no ECDSA certificate-ssl]
+server = 9-ECDSA Signature Algorithm Selection, no ECDSA certificate-server
+client = 9-ECDSA Signature Algorithm Selection, no ECDSA certificate-client
+
+[9-ECDSA Signature Algorithm Selection, no ECDSA certificate-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[9-ECDSA Signature Algorithm Selection, no ECDSA certificate-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[10-RSA Signature Algorithm Selection]
+ssl_conf = 10-RSA Signature Algorithm Selection-ssl
+
+[10-RSA Signature Algorithm Selection-ssl]
+server = 10-RSA Signature Algorithm Selection-server
+client = 10-RSA Signature Algorithm Selection-client
+
+[10-RSA Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[10-RSA Signature Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = RSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedResult = Success
+ExpectedServerCertType = RSA
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = RSA
+
+
+# ===========================================================
+
+[11-RSA-PSS Signature Algorithm Selection]
+ssl_conf = 11-RSA-PSS Signature Algorithm Selection-ssl
+
+[11-RSA-PSS Signature Algorithm Selection-ssl]
+server = 11-RSA-PSS Signature Algorithm Selection-server
+client = 11-RSA-PSS Signature Algorithm Selection-client
+
+[11-RSA-PSS Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[11-RSA-PSS Signature Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = RSA-PSS+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedResult = Success
+ExpectedServerCertType = RSA
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[12-RSA key exchange with all RSA certificate types]
+ssl_conf = 12-RSA key exchange with all RSA certificate types-ssl
+
+[12-RSA key exchange with all RSA certificate types-ssl]
+server = 12-RSA key exchange with all RSA certificate types-server
+client = 12-RSA key exchange with all RSA certificate types-client
+
+[12-RSA key exchange with all RSA certificate types-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PSS.Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-cert.pem
+PSS.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-key.pem
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[12-RSA key exchange with all RSA certificate types-client]
+CipherString = kRSA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedResult = Success
+ExpectedServerCertType = RSA
+
+
+# ===========================================================
+
+[13-Suite B P-256 Hash Algorithm Selection]
+ssl_conf = 13-Suite B P-256 Hash Algorithm Selection-ssl
+
+[13-Suite B P-256 Hash Algorithm Selection-ssl]
+server = 13-Suite B P-256 Hash Algorithm Selection-server
+client = 13-Suite B P-256 Hash Algorithm Selection-client
+
+[13-Suite B P-256 Hash Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = SUITEB128
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/p256-server-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/p256-server-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[13-Suite B P-256 Hash Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA384:ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/p384-root.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedResult = Success
+ExpectedServerCertType = P-256
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[14-Suite B P-384 Hash Algorithm Selection]
+ssl_conf = 14-Suite B P-384 Hash Algorithm Selection-ssl
+
+[14-Suite B P-384 Hash Algorithm Selection-ssl]
+server = 14-Suite B P-384 Hash Algorithm Selection-server
+client = 14-Suite B P-384 Hash Algorithm Selection-client
+
+[14-Suite B P-384 Hash Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = SUITEB128
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/p384-server-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/p384-server-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[14-Suite B P-384 Hash Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA256:ECDSA+SHA384
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/p384-root.pem
+VerifyMode = Peer
+
+[test-14]
+ExpectedResult = Success
+ExpectedServerCertType = P-384
+ExpectedServerSignHash = SHA384
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[15-Ed25519 CipherString and Signature Algorithm Selection]
+ssl_conf = 15-Ed25519 CipherString and Signature Algorithm Selection-ssl
+
+[15-Ed25519 CipherString and Signature Algorithm Selection-ssl]
+server = 15-Ed25519 CipherString and Signature Algorithm Selection-server
+client = 15-Ed25519 CipherString and Signature Algorithm Selection-client
+
+[15-Ed25519 CipherString and Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[15-Ed25519 CipherString and Signature Algorithm Selection-client]
+CipherString = aECDSA
+MaxProtocol = TLSv1.2
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+SignatureAlgorithms = ed25519:ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-15]
+ExpectedResult = Success
+ExpectedServerCANames = empty
+ExpectedServerCertType = Ed25519
+ExpectedServerSignType = Ed25519
+
+
+# ===========================================================
+
+[16-Ed448 CipherString and Signature Algorithm Selection]
+ssl_conf = 16-Ed448 CipherString and Signature Algorithm Selection-ssl
+
+[16-Ed448 CipherString and Signature Algorithm Selection-ssl]
+server = 16-Ed448 CipherString and Signature Algorithm Selection-server
+client = 16-Ed448 CipherString and Signature Algorithm Selection-client
+
+[16-Ed448 CipherString and Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[16-Ed448 CipherString and Signature Algorithm Selection-client]
+CipherString = aECDSA
+MaxProtocol = TLSv1.2
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem
+SignatureAlgorithms = ed448:ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem
+VerifyMode = Peer
+
+[test-16]
+ExpectedResult = Success
+ExpectedServerCANames = empty
+ExpectedServerCertType = Ed448
+ExpectedServerSignType = Ed448
+
+
+# ===========================================================
+
+[17-Ed25519 CipherString and Curves Selection]
+ssl_conf = 17-Ed25519 CipherString and Curves Selection-ssl
+
+[17-Ed25519 CipherString and Curves Selection-ssl]
+server = 17-Ed25519 CipherString and Curves Selection-server
+client = 17-Ed25519 CipherString and Curves Selection-client
+
+[17-Ed25519 CipherString and Curves Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[17-Ed25519 CipherString and Curves Selection-client]
+CipherString = aECDSA
+Curves = X25519
+MaxProtocol = TLSv1.2
+SignatureAlgorithms = ECDSA+SHA256:ed25519
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-17]
+ExpectedResult = Success
+ExpectedServerCertType = Ed25519
+ExpectedServerSignType = Ed25519
+
+
+# ===========================================================
+
+[18-Ed448 CipherString and Curves Selection]
+ssl_conf = 18-Ed448 CipherString and Curves Selection-ssl
+
+[18-Ed448 CipherString and Curves Selection-ssl]
+server = 18-Ed448 CipherString and Curves Selection-server
+client = 18-Ed448 CipherString and Curves Selection-client
+
+[18-Ed448 CipherString and Curves Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[18-Ed448 CipherString and Curves Selection-client]
+CipherString = aECDSA
+Curves = X448
+MaxProtocol = TLSv1.2
+SignatureAlgorithms = ECDSA+SHA256:ed448
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem
+VerifyMode = Peer
+
+[test-18]
+ExpectedResult = Success
+ExpectedServerCertType = Ed448
+ExpectedServerSignType = Ed448
+
+
+# ===========================================================
+
+[19-TLS 1.2 Ed25519 Client Auth]
+ssl_conf = 19-TLS 1.2 Ed25519 Client Auth-ssl
+
+[19-TLS 1.2 Ed25519 Client Auth-ssl]
+server = 19-TLS 1.2 Ed25519 Client Auth-server
+client = 19-TLS 1.2 Ed25519 Client Auth-client
+
+[19-TLS 1.2 Ed25519 Client Auth-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[19-TLS 1.2 Ed25519 Client Auth-client]
+CipherString = DEFAULT
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/client-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/client-ed25519-key.pem
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-19]
+ExpectedClientCertType = Ed25519
+ExpectedClientSignType = Ed25519
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[20-TLS 1.2 Ed448 Client Auth]
+ssl_conf = 20-TLS 1.2 Ed448 Client Auth-ssl
+
+[20-TLS 1.2 Ed448 Client Auth-ssl]
+server = 20-TLS 1.2 Ed448 Client Auth-server
+client = 20-TLS 1.2 Ed448 Client Auth-client
+
+[20-TLS 1.2 Ed448 Client Auth-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[20-TLS 1.2 Ed448 Client Auth-client]
+CipherString = DEFAULT
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/client-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/client-ed448-key.pem
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-20]
+ExpectedClientCertType = Ed448
+ExpectedClientSignType = Ed448
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[21-ECDSA Signature Algorithm Selection SHA1]
+ssl_conf = 21-ECDSA Signature Algorithm Selection SHA1-ssl
+
+[21-ECDSA Signature Algorithm Selection SHA1-ssl]
+server = 21-ECDSA Signature Algorithm Selection SHA1-server
+client = 21-ECDSA Signature Algorithm Selection SHA1-client
+
+[21-ECDSA Signature Algorithm Selection SHA1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[21-ECDSA Signature Algorithm Selection SHA1-client]
+CipherString = DEFAULT:@SECLEVEL=0
+SignatureAlgorithms = ECDSA+SHA1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-21]
+ExpectedResult = Success
+ExpectedServerCertType = P-256
+ExpectedServerSignHash = SHA1
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[22-ECDSA with brainpool]
+ssl_conf = 22-ECDSA with brainpool-ssl
+
+[22-ECDSA with brainpool-ssl]
+server = 22-ECDSA with brainpool-server
+client = 22-ECDSA with brainpool-client
+
+[22-ECDSA with brainpool-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-brainpoolP256r1-cert.pem
+CipherString = DEFAULT
+Groups = brainpoolP256r1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-brainpoolP256r1-key.pem
+
+[22-ECDSA with brainpool-client]
+CipherString = aECDSA
+Groups = brainpoolP256r1
+MaxProtocol = TLSv1.2
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-22]
+ExpectedResult = Success
+ExpectedServerCANames = empty
+ExpectedServerCertType = brainpoolP256r1
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[23-RSA-PSS Certificate CipherString Selection]
+ssl_conf = 23-RSA-PSS Certificate CipherString Selection-ssl
+
+[23-RSA-PSS Certificate CipherString Selection-ssl]
+server = 23-RSA-PSS Certificate CipherString Selection-server
+client = 23-RSA-PSS Certificate CipherString Selection-client
+
+[23-RSA-PSS Certificate CipherString Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PSS.Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-cert.pem
+PSS.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-key.pem
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[23-RSA-PSS Certificate CipherString Selection-client]
+CipherString = aRSA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-23]
+ExpectedResult = Success
+ExpectedServerCertType = RSA-PSS
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[24-RSA-PSS Certificate Legacy Signature Algorithm Selection]
+ssl_conf = 24-RSA-PSS Certificate Legacy Signature Algorithm Selection-ssl
+
+[24-RSA-PSS Certificate Legacy Signature Algorithm Selection-ssl]
+server = 24-RSA-PSS Certificate Legacy Signature Algorithm Selection-server
+client = 24-RSA-PSS Certificate Legacy Signature Algorithm Selection-client
+
+[24-RSA-PSS Certificate Legacy Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PSS.Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-cert.pem
+PSS.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-key.pem
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[24-RSA-PSS Certificate Legacy Signature Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = RSA-PSS+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-24]
+ExpectedResult = Success
+ExpectedServerCertType = RSA
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[25-RSA-PSS Certificate Unified Signature Algorithm Selection]
+ssl_conf = 25-RSA-PSS Certificate Unified Signature Algorithm Selection-ssl
+
+[25-RSA-PSS Certificate Unified Signature Algorithm Selection-ssl]
+server = 25-RSA-PSS Certificate Unified Signature Algorithm Selection-server
+client = 25-RSA-PSS Certificate Unified Signature Algorithm Selection-client
+
+[25-RSA-PSS Certificate Unified Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.2
+PSS.Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-cert.pem
+PSS.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-key.pem
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[25-RSA-PSS Certificate Unified Signature Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = rsa_pss_pss_sha256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-25]
+ExpectedResult = Success
+ExpectedServerCertType = RSA-PSS
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[26-Only RSA-PSS Certificate]
+ssl_conf = 26-Only RSA-PSS Certificate-ssl
+
+[26-Only RSA-PSS Certificate-ssl]
+server = 26-Only RSA-PSS Certificate-server
+client = 26-Only RSA-PSS Certificate-client
+
+[26-Only RSA-PSS Certificate-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-key.pem
+
+[26-Only RSA-PSS Certificate-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-26]
+ExpectedResult = Success
+ExpectedServerCertType = RSA-PSS
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[27-Only RSA-PSS Certificate Valid Signature Algorithms]
+ssl_conf = 27-Only RSA-PSS Certificate Valid Signature Algorithms-ssl
+
+[27-Only RSA-PSS Certificate Valid Signature Algorithms-ssl]
+server = 27-Only RSA-PSS Certificate Valid Signature Algorithms-server
+client = 27-Only RSA-PSS Certificate Valid Signature Algorithms-client
+
+[27-Only RSA-PSS Certificate Valid Signature Algorithms-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-key.pem
+
+[27-Only RSA-PSS Certificate Valid Signature Algorithms-client]
+CipherString = DEFAULT
+SignatureAlgorithms = rsa_pss_pss_sha512
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-27]
+ExpectedResult = Success
+ExpectedServerCertType = RSA-PSS
+ExpectedServerSignHash = SHA512
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[28-RSA-PSS Certificate, no PSS signature algorithms]
+ssl_conf = 28-RSA-PSS Certificate, no PSS signature algorithms-ssl
+
+[28-RSA-PSS Certificate, no PSS signature algorithms-ssl]
+server = 28-RSA-PSS Certificate, no PSS signature algorithms-server
+client = 28-RSA-PSS Certificate, no PSS signature algorithms-client
+
+[28-RSA-PSS Certificate, no PSS signature algorithms-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-key.pem
+
+[28-RSA-PSS Certificate, no PSS signature algorithms-client]
+CipherString = DEFAULT
+SignatureAlgorithms = RSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-28]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[29-Only RSA-PSS Restricted Certificate]
+ssl_conf = 29-Only RSA-PSS Restricted Certificate-ssl
+
+[29-Only RSA-PSS Restricted Certificate-ssl]
+server = 29-Only RSA-PSS Restricted Certificate-server
+client = 29-Only RSA-PSS Restricted Certificate-client
+
+[29-Only RSA-PSS Restricted Certificate-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-restrict-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-restrict-key.pem
+
+[29-Only RSA-PSS Restricted Certificate-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-29]
+ExpectedResult = Success
+ExpectedServerCertType = RSA-PSS
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[30-RSA-PSS Restricted Certificate Valid Signature Algorithms]
+ssl_conf = 30-RSA-PSS Restricted Certificate Valid Signature Algorithms-ssl
+
+[30-RSA-PSS Restricted Certificate Valid Signature Algorithms-ssl]
+server = 30-RSA-PSS Restricted Certificate Valid Signature Algorithms-server
+client = 30-RSA-PSS Restricted Certificate Valid Signature Algorithms-client
+
+[30-RSA-PSS Restricted Certificate Valid Signature Algorithms-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-restrict-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-restrict-key.pem
+
+[30-RSA-PSS Restricted Certificate Valid Signature Algorithms-client]
+CipherString = DEFAULT
+SignatureAlgorithms = rsa_pss_pss_sha256:rsa_pss_pss_sha512
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-30]
+ExpectedResult = Success
+ExpectedServerCertType = RSA-PSS
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[31-RSA-PSS Restricted Cert client prefers invalid Signature Algorithm]
+ssl_conf = 31-RSA-PSS Restricted Cert client prefers invalid Signature Algorithm-ssl
+
+[31-RSA-PSS Restricted Cert client prefers invalid Signature Algorithm-ssl]
+server = 31-RSA-PSS Restricted Cert client prefers invalid Signature Algorithm-server
+client = 31-RSA-PSS Restricted Cert client prefers invalid Signature Algorithm-client
+
+[31-RSA-PSS Restricted Cert client prefers invalid Signature Algorithm-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-restrict-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-restrict-key.pem
+
+[31-RSA-PSS Restricted Cert client prefers invalid Signature Algorithm-client]
+CipherString = DEFAULT
+SignatureAlgorithms = rsa_pss_pss_sha512:rsa_pss_pss_sha256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-31]
+ExpectedResult = Success
+ExpectedServerCertType = RSA-PSS
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[32-RSA-PSS Restricted Certificate Invalid Signature Algorithms]
+ssl_conf = 32-RSA-PSS Restricted Certificate Invalid Signature Algorithms-ssl
+
+[32-RSA-PSS Restricted Certificate Invalid Signature Algorithms-ssl]
+server = 32-RSA-PSS Restricted Certificate Invalid Signature Algorithms-server
+client = 32-RSA-PSS Restricted Certificate Invalid Signature Algorithms-client
+
+[32-RSA-PSS Restricted Certificate Invalid Signature Algorithms-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-restrict-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-restrict-key.pem
+
+[32-RSA-PSS Restricted Certificate Invalid Signature Algorithms-client]
+CipherString = DEFAULT
+SignatureAlgorithms = rsa_pss_pss_sha512
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-32]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[33-RSA key exchange with only RSA-PSS certificate]
+ssl_conf = 33-RSA key exchange with only RSA-PSS certificate-ssl
+
+[33-RSA key exchange with only RSA-PSS certificate-ssl]
+server = 33-RSA key exchange with only RSA-PSS certificate-server
+client = 33-RSA key exchange with only RSA-PSS certificate-client
+
+[33-RSA key exchange with only RSA-PSS certificate-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-key.pem
+
+[33-RSA key exchange with only RSA-PSS certificate-client]
+CipherString = kRSA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-33]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[34-Only RSA-PSS Certificate, TLS v1.1]
+ssl_conf = 34-Only RSA-PSS Certificate, TLS v1.1-ssl
+
+[34-Only RSA-PSS Certificate, TLS v1.1-ssl]
+server = 34-Only RSA-PSS Certificate, TLS v1.1-server
+client = 34-Only RSA-PSS Certificate, TLS v1.1-client
+
+[34-Only RSA-PSS Certificate, TLS v1.1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-pss-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-pss-key.pem
+
+[34-Only RSA-PSS Certificate, TLS v1.1-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-34]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[35-TLS 1.3 ECDSA Signature Algorithm Selection]
+ssl_conf = 35-TLS 1.3 ECDSA Signature Algorithm Selection-ssl
+
+[35-TLS 1.3 ECDSA Signature Algorithm Selection-ssl]
+server = 35-TLS 1.3 ECDSA Signature Algorithm Selection-server
+client = 35-TLS 1.3 ECDSA Signature Algorithm Selection-client
+
+[35-TLS 1.3 ECDSA Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[35-TLS 1.3 ECDSA Signature Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-35]
+ExpectedResult = Success
+ExpectedServerCANames = empty
+ExpectedServerCertType = P-256
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[36-TLS 1.3 ECDSA Signature Algorithm Selection compressed point]
+ssl_conf = 36-TLS 1.3 ECDSA Signature Algorithm Selection compressed point-ssl
+
+[36-TLS 1.3 ECDSA Signature Algorithm Selection compressed point-ssl]
+server = 36-TLS 1.3 ECDSA Signature Algorithm Selection compressed point-server
+client = 36-TLS 1.3 ECDSA Signature Algorithm Selection compressed point-client
+
+[36-TLS 1.3 ECDSA Signature Algorithm Selection compressed point-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-cecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-cecdsa-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[36-TLS 1.3 ECDSA Signature Algorithm Selection compressed point-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-36]
+ExpectedResult = Success
+ExpectedServerCANames = empty
+ExpectedServerCertType = P-256
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[37-TLS 1.3 ECDSA Signature Algorithm Selection SHA1]
+ssl_conf = 37-TLS 1.3 ECDSA Signature Algorithm Selection SHA1-ssl
+
+[37-TLS 1.3 ECDSA Signature Algorithm Selection SHA1-ssl]
+server = 37-TLS 1.3 ECDSA Signature Algorithm Selection SHA1-server
+client = 37-TLS 1.3 ECDSA Signature Algorithm Selection SHA1-client
+
+[37-TLS 1.3 ECDSA Signature Algorithm Selection SHA1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=0
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[37-TLS 1.3 ECDSA Signature Algorithm Selection SHA1-client]
+CipherString = DEFAULT:@SECLEVEL=0
+SignatureAlgorithms = ECDSA+SHA1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-37]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[38-TLS 1.3 ECDSA Signature Algorithm Selection with PSS]
+ssl_conf = 38-TLS 1.3 ECDSA Signature Algorithm Selection with PSS-ssl
+
+[38-TLS 1.3 ECDSA Signature Algorithm Selection with PSS-ssl]
+server = 38-TLS 1.3 ECDSA Signature Algorithm Selection with PSS-server
+client = 38-TLS 1.3 ECDSA Signature Algorithm Selection with PSS-client
+
+[38-TLS 1.3 ECDSA Signature Algorithm Selection with PSS-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[38-TLS 1.3 ECDSA Signature Algorithm Selection with PSS-client]
+CipherString = DEFAULT
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+SignatureAlgorithms = ECDSA+SHA256:RSA-PSS+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-38]
+ExpectedResult = Success
+ExpectedServerCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedServerCertType = P-256
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[39-TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS]
+ssl_conf = 39-TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS-ssl
+
+[39-TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS-ssl]
+server = 39-TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS-server
+client = 39-TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS-client
+
+[39-TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[39-TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA384:RSA-PSS+SHA384
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-39]
+ExpectedResult = Success
+ExpectedServerCertType = RSA
+ExpectedServerSignHash = SHA384
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[40-TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate]
+ssl_conf = 40-TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate-ssl
+
+[40-TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate-ssl]
+server = 40-TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate-server
+client = 40-TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate-client
+
+[40-TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[40-TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-40]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[41-TLS 1.3 RSA Signature Algorithm Selection, no PSS]
+ssl_conf = 41-TLS 1.3 RSA Signature Algorithm Selection, no PSS-ssl
+
+[41-TLS 1.3 RSA Signature Algorithm Selection, no PSS-ssl]
+server = 41-TLS 1.3 RSA Signature Algorithm Selection, no PSS-server
+client = 41-TLS 1.3 RSA Signature Algorithm Selection, no PSS-client
+
+[41-TLS 1.3 RSA Signature Algorithm Selection, no PSS-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[41-TLS 1.3 RSA Signature Algorithm Selection, no PSS-client]
+CipherString = DEFAULT
+SignatureAlgorithms = RSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-41]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[42-TLS 1.3 RSA-PSS Signature Algorithm Selection]
+ssl_conf = 42-TLS 1.3 RSA-PSS Signature Algorithm Selection-ssl
+
+[42-TLS 1.3 RSA-PSS Signature Algorithm Selection-ssl]
+server = 42-TLS 1.3 RSA-PSS Signature Algorithm Selection-server
+client = 42-TLS 1.3 RSA-PSS Signature Algorithm Selection-client
+
+[42-TLS 1.3 RSA-PSS Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[42-TLS 1.3 RSA-PSS Signature Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = RSA-PSS+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-42]
+ExpectedResult = Success
+ExpectedServerCertType = RSA
+ExpectedServerSignHash = SHA256
+ExpectedServerSignType = RSA-PSS
+
+
+# ===========================================================
+
+[43-TLS 1.3 RSA Client Auth Signature Algorithm Selection]
+ssl_conf = 43-TLS 1.3 RSA Client Auth Signature Algorithm Selection-ssl
+
+[43-TLS 1.3 RSA Client Auth Signature Algorithm Selection-ssl]
+server = 43-TLS 1.3 RSA Client Auth Signature Algorithm Selection-server
+client = 43-TLS 1.3 RSA Client Auth Signature Algorithm Selection-client
+
+[43-TLS 1.3 RSA Client Auth Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ClientSignatureAlgorithms = PSS+SHA256
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[43-TLS 1.3 RSA Client Auth Signature Algorithm Selection-client]
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/ee-ecdsa-client-chain.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-ecdsa-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+RSA.Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+RSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-43]
+ExpectedClientCANames = empty
+ExpectedClientCertType = RSA
+ExpectedClientSignHash = SHA256
+ExpectedClientSignType = RSA-PSS
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[44-TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names]
+ssl_conf = 44-TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names-ssl
+
+[44-TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names-ssl]
+server = 44-TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names-server
+client = 44-TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names-client
+
+[44-TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ClientSignatureAlgorithms = PSS+SHA256
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[44-TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names-client]
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/ee-ecdsa-client-chain.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-ecdsa-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+RSA.Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+RSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-44]
+ExpectedClientCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedClientCertType = RSA
+ExpectedClientSignHash = SHA256
+ExpectedClientSignType = RSA-PSS
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[45-TLS 1.3 ECDSA Client Auth Signature Algorithm Selection]
+ssl_conf = 45-TLS 1.3 ECDSA Client Auth Signature Algorithm Selection-ssl
+
+[45-TLS 1.3 ECDSA Client Auth Signature Algorithm Selection-ssl]
+server = 45-TLS 1.3 ECDSA Client Auth Signature Algorithm Selection-server
+client = 45-TLS 1.3 ECDSA Client Auth Signature Algorithm Selection-client
+
+[45-TLS 1.3 ECDSA Client Auth Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ClientSignatureAlgorithms = ECDSA+SHA256
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[45-TLS 1.3 ECDSA Client Auth Signature Algorithm Selection-client]
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/ee-ecdsa-client-chain.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-ecdsa-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+RSA.Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+RSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-45]
+ExpectedClientCertType = P-256
+ExpectedClientSignHash = SHA256
+ExpectedClientSignType = EC
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[46-TLS 1.3 Ed25519 Signature Algorithm Selection]
+ssl_conf = 46-TLS 1.3 Ed25519 Signature Algorithm Selection-ssl
+
+[46-TLS 1.3 Ed25519 Signature Algorithm Selection-ssl]
+server = 46-TLS 1.3 Ed25519 Signature Algorithm Selection-server
+client = 46-TLS 1.3 Ed25519 Signature Algorithm Selection-client
+
+[46-TLS 1.3 Ed25519 Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[46-TLS 1.3 Ed25519 Signature Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ed25519
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-46]
+ExpectedResult = Success
+ExpectedServerCertType = Ed25519
+ExpectedServerSignType = Ed25519
+
+
+# ===========================================================
+
+[47-TLS 1.3 Ed448 Signature Algorithm Selection]
+ssl_conf = 47-TLS 1.3 Ed448 Signature Algorithm Selection-ssl
+
+[47-TLS 1.3 Ed448 Signature Algorithm Selection-ssl]
+server = 47-TLS 1.3 Ed448 Signature Algorithm Selection-server
+client = 47-TLS 1.3 Ed448 Signature Algorithm Selection-client
+
+[47-TLS 1.3 Ed448 Signature Algorithm Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[47-TLS 1.3 Ed448 Signature Algorithm Selection-client]
+CipherString = DEFAULT
+SignatureAlgorithms = ed448
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem
+VerifyMode = Peer
+
+[test-47]
+ExpectedResult = Success
+ExpectedServerCertType = Ed448
+ExpectedServerSignType = Ed448
+
+
+# ===========================================================
+
+[48-TLS 1.3 Ed25519 CipherString and Groups Selection]
+ssl_conf = 48-TLS 1.3 Ed25519 CipherString and Groups Selection-ssl
+
+[48-TLS 1.3 Ed25519 CipherString and Groups Selection-ssl]
+server = 48-TLS 1.3 Ed25519 CipherString and Groups Selection-server
+client = 48-TLS 1.3 Ed25519 CipherString and Groups Selection-client
+
+[48-TLS 1.3 Ed25519 CipherString and Groups Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[48-TLS 1.3 Ed25519 CipherString and Groups Selection-client]
+CipherString = DEFAULT
+Groups = X25519
+SignatureAlgorithms = ECDSA+SHA256:ed25519
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-48]
+ExpectedResult = Success
+ExpectedServerCertType = P-256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[49-TLS 1.3 Ed448 CipherString and Groups Selection]
+ssl_conf = 49-TLS 1.3 Ed448 CipherString and Groups Selection-ssl
+
+[49-TLS 1.3 Ed448 CipherString and Groups Selection-ssl]
+server = 49-TLS 1.3 Ed448 CipherString and Groups Selection-server
+client = 49-TLS 1.3 Ed448 CipherString and Groups Selection-client
+
+[49-TLS 1.3 Ed448 CipherString and Groups Selection-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ECDSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-cert.pem
+ECDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-key.pem
+Ed25519.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed25519-cert.pem
+Ed25519.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed25519-key.pem
+Ed448.Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+Ed448.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[49-TLS 1.3 Ed448 CipherString and Groups Selection-client]
+CipherString = DEFAULT
+Groups = X448
+SignatureAlgorithms = ECDSA+SHA256:ed448
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-49]
+ExpectedResult = Success
+ExpectedServerCertType = P-256
+ExpectedServerSignType = EC
+
+
+# ===========================================================
+
+[50-TLS 1.3 Ed25519 Client Auth]
+ssl_conf = 50-TLS 1.3 Ed25519 Client Auth-ssl
+
+[50-TLS 1.3 Ed25519 Client Auth-ssl]
+server = 50-TLS 1.3 Ed25519 Client Auth-server
+client = 50-TLS 1.3 Ed25519 Client Auth-client
+
+[50-TLS 1.3 Ed25519 Client Auth-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[50-TLS 1.3 Ed25519 Client Auth-client]
+CipherString = DEFAULT
+EdDSA.Certificate = ${ENV::TEST_CERTS_DIR}/client-ed25519-cert.pem
+EdDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/client-ed25519-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-50]
+ExpectedClientCertType = Ed25519
+ExpectedClientSignType = Ed25519
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[51-TLS 1.3 Ed448 Client Auth]
+ssl_conf = 51-TLS 1.3 Ed448 Client Auth-ssl
+
+[51-TLS 1.3 Ed448 Client Auth-ssl]
+server = 51-TLS 1.3 Ed448 Client Auth-server
+client = 51-TLS 1.3 Ed448 Client Auth-client
+
+[51-TLS 1.3 Ed448 Client Auth-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[51-TLS 1.3 Ed448 Client Auth-client]
+CipherString = DEFAULT
+EdDSA.Certificate = ${ENV::TEST_CERTS_DIR}/client-ed448-cert.pem
+EdDSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/client-ed448-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-51]
+ExpectedClientCertType = Ed448
+ExpectedClientSignType = Ed448
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[52-TLS 1.3 ECDSA with brainpool but no suitable groups]
+ssl_conf = 52-TLS 1.3 ECDSA with brainpool but no suitable groups-ssl
+
+[52-TLS 1.3 ECDSA with brainpool but no suitable groups-ssl]
+server = 52-TLS 1.3 ECDSA with brainpool but no suitable groups-server
+client = 52-TLS 1.3 ECDSA with brainpool but no suitable groups-client
+
+[52-TLS 1.3 ECDSA with brainpool but no suitable groups-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-brainpoolP256r1-cert.pem
+CipherString = DEFAULT
+Groups = brainpoolP256r1
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-brainpoolP256r1-key.pem
+
+[52-TLS 1.3 ECDSA with brainpool but no suitable groups-client]
+CipherString = aECDSA
+Groups = brainpoolP256r1
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-52]
+ExpectedResult = ClientFail
+
+
+# ===========================================================
+
+[53-TLS 1.3 ECDSA with brainpool]
+ssl_conf = 53-TLS 1.3 ECDSA with brainpool-ssl
+
+[53-TLS 1.3 ECDSA with brainpool-ssl]
+server = 53-TLS 1.3 ECDSA with brainpool-server
+client = 53-TLS 1.3 ECDSA with brainpool-client
+
+[53-TLS 1.3 ECDSA with brainpool-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-ecdsa-brainpoolP256r1-cert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ecdsa-brainpoolP256r1-key.pem
+
+[53-TLS 1.3 ECDSA with brainpool-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-53]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[54-TLS 1.2 DSA Certificate Test]
+ssl_conf = 54-TLS 1.2 DSA Certificate Test-ssl
+
+[54-TLS 1.2 DSA Certificate Test-ssl]
+server = 54-TLS 1.2 DSA Certificate Test-server
+client = 54-TLS 1.2 DSA Certificate Test-client
+
+[54-TLS 1.2 DSA Certificate Test-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ALL
+DHParameters = ${ENV::TEST_CERTS_DIR}/dhp2048.pem
+DSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-dsa-cert.pem
+DSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-dsa-key.pem
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[54-TLS 1.2 DSA Certificate Test-client]
+CipherString = ALL
+SignatureAlgorithms = DSA+SHA256:DSA+SHA1
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-54]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[55-TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms]
+ssl_conf = 55-TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms-ssl
+
+[55-TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms-ssl]
+server = 55-TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms-server
+client = 55-TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms-client
+
+[55-TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ClientSignatureAlgorithms = ECDSA+SHA1:DSA+SHA256:RSA+SHA256
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[55-TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-55]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[56-TLS 1.3 DSA Certificate Test]
+ssl_conf = 56-TLS 1.3 DSA Certificate Test-ssl
+
+[56-TLS 1.3 DSA Certificate Test-ssl]
+server = 56-TLS 1.3 DSA Certificate Test-server
+client = 56-TLS 1.3 DSA Certificate Test-client
+
+[56-TLS 1.3 DSA Certificate Test-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ALL
+DSA.Certificate = ${ENV::TEST_CERTS_DIR}/server-dsa-cert.pem
+DSA.PrivateKey = ${ENV::TEST_CERTS_DIR}/server-dsa-key.pem
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[56-TLS 1.3 DSA Certificate Test-client]
+CipherString = ALL
+SignatureAlgorithms = DSA+SHA1:DSA+SHA256:ECDSA+SHA256
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-56]
+ExpectedResult = ServerFail
+
+
diff --git a/test/ssl-tests/20-cert-select.cnf.in b/test/ssl-tests/20-cert-select.cnf.in
new file mode 100644
index 000000000000..30cde592c6d0
--- /dev/null
+++ b/test/ssl-tests/20-cert-select.cnf.in
@@ -0,0 +1,991 @@
+# -*- mode: perl; -*-
+
+## SSL test configurations
+
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our $fips_mode;
+our $no_deflt_libctx;
+
+my $server = {
+ "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
+ "Ed25519.Certificate" => test_pem("server-ed25519-cert.pem"),
+ "Ed25519.PrivateKey" => test_pem("server-ed25519-key.pem"),
+ "Ed448.Certificate" => test_pem("server-ed448-cert.pem"),
+ "Ed448.PrivateKey" => test_pem("server-ed448-key.pem"),
+ "MaxProtocol" => "TLSv1.2"
+};
+
+my $server_pss = {
+ "PSS.Certificate" => test_pem("server-pss-cert.pem"),
+ "PSS.PrivateKey" => test_pem("server-pss-key.pem"),
+ "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
+ "Ed25519.Certificate" => test_pem("server-ed25519-cert.pem"),
+ "Ed25519.PrivateKey" => test_pem("server-ed25519-key.pem"),
+ "Ed448.Certificate" => test_pem("server-ed448-cert.pem"),
+ "Ed448.PrivateKey" => test_pem("server-ed448-key.pem"),
+ "MaxProtocol" => "TLSv1.2"
+};
+
+my $server_pss_only = {
+ "Certificate" => test_pem("server-pss-cert.pem"),
+ "PrivateKey" => test_pem("server-pss-key.pem"),
+};
+
+my $server_pss_restrict_only = {
+ "Certificate" => test_pem("server-pss-restrict-cert.pem"),
+ "PrivateKey" => test_pem("server-pss-restrict-key.pem"),
+};
+
+my $server_rsa_all;
+
+if ($no_deflt_libctx) {
+ $server_rsa_all = {
+ "Certificate" => test_pem("servercert.pem"),
+ "PrivateKey" => test_pem("serverkey.pem"),
+ };
+} else {
+ $server_rsa_all = {
+ "PSS.Certificate" => test_pem("server-pss-cert.pem"),
+ "PSS.PrivateKey" => test_pem("server-pss-key.pem"),
+ "Certificate" => test_pem("servercert.pem"),
+ "PrivateKey" => test_pem("serverkey.pem"),
+ };
+}
+
+our @tests = (
+ {
+ name => "ECDSA CipherString Selection",
+ server => $server,
+ client => {
+ "CipherString" => "aECDSA",
+ "MaxProtocol" => "TLSv1.2",
+ "RequestCAFile" => test_pem("root-cert.pem"),
+ },
+ test => {
+ "ExpectedServerCertType" =>, "P-256",
+ "ExpectedServerSignType" =>, "EC",
+ # Note: certificate_authorities not sent for TLS < 1.3
+ "ExpectedServerCANames" =>, "empty",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "ECDSA CipherString Selection",
+ server => {
+ "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
+ "MaxProtocol" => "TLSv1.2",
+ #Deliberately set supported_groups to one not in the cert. This
+ #should be tolerated
+ "Groups" => "P-384"
+ },
+ client => {
+ "CipherString" => "aECDSA",
+ "MaxProtocol" => "TLSv1.2",
+ "Groups" => "P-256:P-384",
+ "RequestCAFile" => test_pem("root-cert.pem"),
+ },
+ test => {
+ "ExpectedServerCertType" =>, "P-256",
+ "ExpectedServerSignType" =>, "EC",
+ # Note: certificate_authorities not sent for TLS < 1.3
+ "ExpectedServerCANames" =>, "empty",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "ECDSA CipherString Selection",
+ server => {
+ "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
+ "MaxProtocol" => "TLSv1.2",
+ "Groups" => "P-256:P-384"
+ },
+ client => {
+ "CipherString" => "aECDSA",
+ "MaxProtocol" => "TLSv1.2",
+ #Deliberately set groups to not include the certificate group. This
+ #should fail
+ "Groups" => "P-384",
+ "RequestCAFile" => test_pem("root-cert.pem"),
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "RSA CipherString Selection",
+ server => $server,
+ client => {
+ "CipherString" => "aRSA",
+ "MaxProtocol" => "TLSv1.2",
+ },
+ test => {
+ "ExpectedServerCertType" =>, "RSA",
+ "ExpectedServerSignType" =>, "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "P-256 CipherString and Signature Algorithm Selection",
+ server => $server,
+ client => {
+ "CipherString" => "aECDSA",
+ "MaxProtocol" => "TLSv1.2",
+ "SignatureAlgorithms" => "ECDSA+SHA256:ed25519",
+ },
+ test => {
+ "ExpectedServerCertType" => "P-256",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "ECDSA CipherString Selection, no ECDSA certificate",
+ server => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {
+ "CipherString" => "aECDSA",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "ECDSA Signature Algorithm Selection",
+ server => $server,
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA256",
+ },
+ test => {
+ "ExpectedServerCertType" => "P-256",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "ECDSA Signature Algorithm Selection SHA384",
+ server => $server,
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA384",
+ },
+ test => {
+ "ExpectedServerCertType" => "P-256",
+ "ExpectedServerSignHash" => "SHA384",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "ECDSA Signature Algorithm Selection compressed point",
+ server => {
+ "ECDSA.Certificate" => test_pem("server-cecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-cecdsa-key.pem"),
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA256",
+ },
+ test => {
+ "ExpectedServerCertType" => "P-256",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "ECDSA Signature Algorithm Selection, no ECDSA certificate",
+ server => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA256",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "RSA Signature Algorithm Selection",
+ server => $server,
+ client => {
+ "SignatureAlgorithms" => "RSA+SHA256",
+ },
+ test => {
+ "ExpectedServerCertType" => "RSA",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "RSA",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "RSA-PSS Signature Algorithm Selection",
+ server => $server,
+ client => {
+ "SignatureAlgorithms" => "RSA-PSS+SHA256",
+ },
+ test => {
+ "ExpectedServerCertType" => "RSA",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "RSA key exchange with all RSA certificate types",
+ server => $server_rsa_all,
+ client => {
+ "CipherString" => "kRSA",
+ "MaxProtocol" => "TLSv1.2",
+ },
+ test => {
+ "ExpectedServerCertType" =>, "RSA",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "Suite B P-256 Hash Algorithm Selection",
+ server => {
+ "ECDSA.Certificate" => test_pem("p256-server-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("p256-server-key.pem"),
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "SUITEB128"
+ },
+ client => {
+ "VerifyCAFile" => test_pem("p384-root.pem"),
+ "SignatureAlgorithms" => "ECDSA+SHA384:ECDSA+SHA256"
+ },
+ test => {
+ "ExpectedServerCertType" => "P-256",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "Suite B P-384 Hash Algorithm Selection",
+ server => {
+ "ECDSA.Certificate" => test_pem("p384-server-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("p384-server-key.pem"),
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "SUITEB128"
+ },
+ client => {
+ "VerifyCAFile" => test_pem("p384-root.pem"),
+ "SignatureAlgorithms" => "ECDSA+SHA256:ECDSA+SHA384"
+ },
+ test => {
+ "ExpectedServerCertType" => "P-384",
+ "ExpectedServerSignHash" => "SHA384",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "Ed25519 CipherString and Signature Algorithm Selection",
+ server => $server,
+ client => {
+ "CipherString" => "aECDSA",
+ "MaxProtocol" => "TLSv1.2",
+ "SignatureAlgorithms" => "ed25519:ECDSA+SHA256",
+ "RequestCAFile" => test_pem("root-cert.pem"),
+ },
+ test => {
+ "ExpectedServerCertType" =>, "Ed25519",
+ "ExpectedServerSignType" =>, "Ed25519",
+ # Note: certificate_authorities not sent for TLS < 1.3
+ "ExpectedServerCANames" =>, "empty",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "Ed448 CipherString and Signature Algorithm Selection",
+ server => $server,
+ client => {
+ "CipherString" => "aECDSA",
+ "MaxProtocol" => "TLSv1.2",
+ "SignatureAlgorithms" => "ed448:ECDSA+SHA256",
+ "RequestCAFile" => test_pem("root-ed448-cert.pem"),
+ "VerifyCAFile" => test_pem("root-ed448-cert.pem"),
+ },
+ test => {
+ "ExpectedServerCertType" =>, "Ed448",
+ "ExpectedServerSignType" =>, "Ed448",
+ # Note: certificate_authorities not sent for TLS < 1.3
+ "ExpectedServerCANames" =>, "empty",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "Ed25519 CipherString and Curves Selection",
+ server => $server,
+ client => {
+ "CipherString" => "aECDSA",
+ "MaxProtocol" => "TLSv1.2",
+ "SignatureAlgorithms" => "ECDSA+SHA256:ed25519",
+ # Excluding P-256 from the supported curves list means server
+ # certificate should be Ed25519 and not P-256
+ "Curves" => "X25519"
+ },
+ test => {
+ "ExpectedServerCertType" =>, "Ed25519",
+ "ExpectedServerSignType" =>, "Ed25519",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "Ed448 CipherString and Curves Selection",
+ server => $server,
+ client => {
+ "CipherString" => "aECDSA",
+ "MaxProtocol" => "TLSv1.2",
+ "SignatureAlgorithms" => "ECDSA+SHA256:ed448",
+ "VerifyCAFile" => test_pem("root-ed448-cert.pem"),
+ # Excluding P-256 from the supported curves list means server
+ # certificate should be Ed25519 and not P-256
+ "Curves" => "X448"
+ },
+ test => {
+ "ExpectedServerCertType" =>, "Ed448",
+ "ExpectedServerSignType" =>, "Ed448",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.2 Ed25519 Client Auth",
+ server => {
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require"
+ },
+ client => {
+ "Ed25519.Certificate" => test_pem("client-ed25519-cert.pem"),
+ "Ed25519.PrivateKey" => test_pem("client-ed25519-key.pem"),
+ "MinProtocol" => "TLSv1.2",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedClientCertType" => "Ed25519",
+ "ExpectedClientSignType" => "Ed25519",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.2 Ed448 Client Auth",
+ server => {
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require"
+ },
+ client => {
+ "Ed448.Certificate" => test_pem("client-ed448-cert.pem"),
+ "Ed448.PrivateKey" => test_pem("client-ed448-key.pem"),
+ "MinProtocol" => "TLSv1.2",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedClientCertType" => "Ed448",
+ "ExpectedClientSignType" => "Ed448",
+ "ExpectedResult" => "Success"
+ },
+ },
+);
+
+my @tests_non_fips = (
+ {
+ name => "ECDSA Signature Algorithm Selection SHA1",
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
+ "Ed25519.Certificate" => test_pem("server-ed25519-cert.pem"),
+ "Ed25519.PrivateKey" => test_pem("server-ed25519-key.pem"),
+ "Ed448.Certificate" => test_pem("server-ed448-cert.pem"),
+ "Ed448.PrivateKey" => test_pem("server-ed448-key.pem"),
+ "MaxProtocol" => "TLSv1.2"
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "SignatureAlgorithms" => "ECDSA+SHA1",
+ },
+ test => {
+ "ExpectedServerCertType" => "P-256",
+ "ExpectedServerSignHash" => "SHA1",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "ECDSA with brainpool",
+ server => {
+ "Certificate" => test_pem("server-ecdsa-brainpoolP256r1-cert.pem"),
+ "PrivateKey" => test_pem("server-ecdsa-brainpoolP256r1-key.pem"),
+ "Groups" => "brainpoolP256r1",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "aECDSA",
+ "RequestCAFile" => test_pem("root-cert.pem"),
+ "Groups" => "brainpoolP256r1",
+ },
+ test => {
+ "ExpectedServerCertType" =>, "brainpoolP256r1",
+ "ExpectedServerSignType" =>, "EC",
+ # Note: certificate_authorities not sent for TLS < 1.3
+ "ExpectedServerCANames" =>, "empty",
+ "ExpectedResult" => "Success"
+ },
+ },
+);
+
+my @tests_pss = (
+ {
+ name => "RSA-PSS Certificate CipherString Selection",
+ server => $server_pss,
+ client => {
+ "CipherString" => "aRSA",
+ "MaxProtocol" => "TLSv1.2",
+ },
+ test => {
+ "ExpectedServerCertType" =>, "RSA-PSS",
+ "ExpectedServerSignType" =>, "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "RSA-PSS Certificate Legacy Signature Algorithm Selection",
+ server => $server_pss,
+ client => {
+ "SignatureAlgorithms" => "RSA-PSS+SHA256",
+ },
+ test => {
+ "ExpectedServerCertType" => "RSA",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "RSA-PSS Certificate Unified Signature Algorithm Selection",
+ server => $server_pss,
+ client => {
+ "SignatureAlgorithms" => "rsa_pss_pss_sha256",
+ },
+ test => {
+ "ExpectedServerCertType" => "RSA-PSS",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "Only RSA-PSS Certificate",
+ server => $server_pss_only,
+ client => {},
+ test => {
+ "ExpectedServerCertType" => "RSA-PSS",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "Only RSA-PSS Certificate Valid Signature Algorithms",
+ server => $server_pss_only,
+ client => {
+ "SignatureAlgorithms" => "rsa_pss_pss_sha512",
+ },
+ test => {
+ "ExpectedServerCertType" => "RSA-PSS",
+ "ExpectedServerSignHash" => "SHA512",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "RSA-PSS Certificate, no PSS signature algorithms",
+ server => $server_pss_only,
+ client => {
+ "SignatureAlgorithms" => "RSA+SHA256",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "Only RSA-PSS Restricted Certificate",
+ server => $server_pss_restrict_only,
+ client => {},
+ test => {
+ "ExpectedServerCertType" => "RSA-PSS",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "RSA-PSS Restricted Certificate Valid Signature Algorithms",
+ server => $server_pss_restrict_only,
+ client => {
+ "SignatureAlgorithms" => "rsa_pss_pss_sha256:rsa_pss_pss_sha512",
+ },
+ test => {
+ "ExpectedServerCertType" => "RSA-PSS",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "RSA-PSS Restricted Cert client prefers invalid Signature Algorithm",
+ server => $server_pss_restrict_only,
+ client => {
+ "SignatureAlgorithms" => "rsa_pss_pss_sha512:rsa_pss_pss_sha256",
+ },
+ test => {
+ "ExpectedServerCertType" => "RSA-PSS",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "RSA-PSS Restricted Certificate Invalid Signature Algorithms",
+ server => $server_pss_restrict_only,
+ client => {
+ "SignatureAlgorithms" => "rsa_pss_pss_sha512",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "RSA key exchange with only RSA-PSS certificate",
+ server => $server_pss_only,
+ client => {
+ "CipherString" => "kRSA",
+ "MaxProtocol" => "TLSv1.2",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+);
+
+my @tests_tls_1_1 = (
+ {
+ name => "Only RSA-PSS Certificate, TLS v1.1",
+ server => $server_pss_only,
+ client => {
+ "MaxProtocol" => "TLSv1.1",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+);
+
+push @tests, @tests_non_fips unless $fips_mode;
+push @tests, @tests_pss;
+push @tests, @tests_tls_1_1 unless disabled("tls1_1") || $no_deflt_libctx;
+
+my $server_tls_1_3;
+
+if ($fips_mode) {
+ $server_tls_1_3 = {
+ "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3"
+ };
+} else {
+ $server_tls_1_3 = {
+ "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
+ "Ed25519.Certificate" => test_pem("server-ed25519-cert.pem"),
+ "Ed25519.PrivateKey" => test_pem("server-ed25519-key.pem"),
+ "Ed448.Certificate" => test_pem("server-ed448-cert.pem"),
+ "Ed448.PrivateKey" => test_pem("server-ed448-key.pem"),
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3"
+ };
+}
+
+my $client_tls_1_3 = {
+ "RSA.Certificate" => test_pem("ee-client-chain.pem"),
+ "RSA.PrivateKey" => test_pem("ee-key.pem"),
+ "ECDSA.Certificate" => test_pem("ee-ecdsa-client-chain.pem"),
+ "ECDSA.PrivateKey" => test_pem("ee-ecdsa-key.pem"),
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3"
+};
+
+my @tests_tls_1_3 = (
+ {
+ name => "TLS 1.3 ECDSA Signature Algorithm Selection",
+ server => $server_tls_1_3,
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA256",
+ },
+ test => {
+ "ExpectedServerCertType" => "P-256",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedServerCANames" => "empty",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 ECDSA Signature Algorithm Selection compressed point",
+ server => {
+ "ECDSA.Certificate" => test_pem("server-cecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-cecdsa-key.pem"),
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3"
+ },
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA256",
+ },
+ test => {
+ "ExpectedServerCertType" => "P-256",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedServerCANames" => "empty",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 ECDSA Signature Algorithm Selection SHA1",
+ server => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "ECDSA.Certificate" => test_pem("server-ecdsa-cert.pem"),
+ "ECDSA.PrivateKey" => test_pem("server-ecdsa-key.pem"),
+ "Ed25519.Certificate" => test_pem("server-ed25519-cert.pem"),
+ "Ed25519.PrivateKey" => test_pem("server-ed25519-key.pem"),
+ "Ed448.Certificate" => test_pem("server-ed448-cert.pem"),
+ "Ed448.PrivateKey" => test_pem("server-ed448-key.pem"),
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3"
+ },
+ client => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "SignatureAlgorithms" => "ECDSA+SHA1",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "TLS 1.3 ECDSA Signature Algorithm Selection with PSS",
+ server => $server_tls_1_3,
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA256:RSA-PSS+SHA256",
+ "RequestCAFile" => test_pem("root-cert.pem"),
+ },
+ test => {
+ "ExpectedServerCertType" => "P-256",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "EC",
+ "ExpectedServerCANames" => test_pem("root-cert.pem"),
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 RSA Signature Algorithm Selection SHA384 with PSS",
+ server => $server_tls_1_3,
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA384:RSA-PSS+SHA384",
+ },
+ test => {
+ "ExpectedServerCertType" => "RSA",
+ "ExpectedServerSignHash" => "SHA384",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 ECDSA Signature Algorithm Selection, no ECDSA certificate",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3"
+ },
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA256",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "TLS 1.3 RSA Signature Algorithm Selection, no PSS",
+ server => $server_tls_1_3,
+ client => {
+ "SignatureAlgorithms" => "RSA+SHA256",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "TLS 1.3 RSA-PSS Signature Algorithm Selection",
+ server => $server_tls_1_3,
+ client => {
+ "SignatureAlgorithms" => "RSA-PSS+SHA256",
+ },
+ test => {
+ "ExpectedServerCertType" => "RSA",
+ "ExpectedServerSignHash" => "SHA256",
+ "ExpectedServerSignType" => "RSA-PSS",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 RSA Client Auth Signature Algorithm Selection",
+ server => {
+ "ClientSignatureAlgorithms" => "PSS+SHA256",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require"
+ },
+ client => $client_tls_1_3,
+ test => {
+ "ExpectedClientCertType" => "RSA",
+ "ExpectedClientSignHash" => "SHA256",
+ "ExpectedClientSignType" => "RSA-PSS",
+ "ExpectedClientCANames" => "empty",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 RSA Client Auth Signature Algorithm Selection non-empty CA Names",
+ server => {
+ "ClientSignatureAlgorithms" => "PSS+SHA256",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "RequestCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require"
+ },
+ client => $client_tls_1_3,
+ test => {
+ "ExpectedClientCertType" => "RSA",
+ "ExpectedClientSignHash" => "SHA256",
+ "ExpectedClientSignType" => "RSA-PSS",
+ "ExpectedClientCANames" => test_pem("root-cert.pem"),
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 ECDSA Client Auth Signature Algorithm Selection",
+ server => {
+ "ClientSignatureAlgorithms" => "ECDSA+SHA256",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require"
+ },
+ client => $client_tls_1_3,
+ test => {
+ "ExpectedClientCertType" => "P-256",
+ "ExpectedClientSignHash" => "SHA256",
+ "ExpectedClientSignType" => "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+);
+
+my @tests_tls_1_3_non_fips = (
+ {
+ name => "TLS 1.3 Ed25519 Signature Algorithm Selection",
+ server => $server_tls_1_3,
+ client => {
+ "SignatureAlgorithms" => "ed25519",
+ },
+ test => {
+ "ExpectedServerCertType" => "Ed25519",
+ "ExpectedServerSignType" => "Ed25519",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 Ed448 Signature Algorithm Selection",
+ server => $server_tls_1_3,
+ client => {
+ "SignatureAlgorithms" => "ed448",
+ "VerifyCAFile" => test_pem("root-ed448-cert.pem"),
+ },
+ test => {
+ "ExpectedServerCertType" => "Ed448",
+ "ExpectedServerSignType" => "Ed448",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 Ed25519 CipherString and Groups Selection",
+ server => $server_tls_1_3,
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA256:ed25519",
+ # Excluding P-256 from the supported groups list should
+ # mean server still uses a P-256 certificate because supported
+ # groups is not used in signature selection for TLS 1.3
+ "Groups" => "X25519"
+ },
+ test => {
+ "ExpectedServerCertType" =>, "P-256",
+ "ExpectedServerSignType" =>, "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 Ed448 CipherString and Groups Selection",
+ server => $server_tls_1_3,
+ client => {
+ "SignatureAlgorithms" => "ECDSA+SHA256:ed448",
+ # Excluding P-256 from the supported groups list should
+ # mean server still uses a P-256 certificate because supported
+ # groups is not used in signature selection for TLS 1.3
+ "Groups" => "X448"
+ },
+ test => {
+ "ExpectedServerCertType" =>, "P-256",
+ "ExpectedServerSignType" =>, "EC",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 Ed25519 Client Auth",
+ server => {
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require"
+ },
+ client => {
+ "EdDSA.Certificate" => test_pem("client-ed25519-cert.pem"),
+ "EdDSA.PrivateKey" => test_pem("client-ed25519-key.pem"),
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3"
+ },
+ test => {
+ "ExpectedClientCertType" => "Ed25519",
+ "ExpectedClientSignType" => "Ed25519",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 Ed448 Client Auth",
+ server => {
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require"
+ },
+ client => {
+ "EdDSA.Certificate" => test_pem("client-ed448-cert.pem"),
+ "EdDSA.PrivateKey" => test_pem("client-ed448-key.pem"),
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3"
+ },
+ test => {
+ "ExpectedClientCertType" => "Ed448",
+ "ExpectedClientSignType" => "Ed448",
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "TLS 1.3 ECDSA with brainpool but no suitable groups",
+ server => {
+ "Certificate" => test_pem("server-ecdsa-brainpoolP256r1-cert.pem"),
+ "PrivateKey" => test_pem("server-ecdsa-brainpoolP256r1-key.pem"),
+ "Groups" => "brainpoolP256r1",
+ },
+ client => {
+ "CipherString" => "aECDSA",
+ "RequestCAFile" => test_pem("root-cert.pem"),
+ "Groups" => "brainpoolP256r1",
+ },
+ test => {
+ #We only configured brainpoolP256r1 on the client side, but TLSv1.3
+ #is enabled and this group is not allowed in TLSv1.3. Therefore this
+ #should fail
+ "ExpectedResult" => "ClientFail"
+ },
+ },
+ {
+ name => "TLS 1.3 ECDSA with brainpool",
+ server => {
+ "Certificate" => test_pem("server-ecdsa-brainpoolP256r1-cert.pem"),
+ "PrivateKey" => test_pem("server-ecdsa-brainpoolP256r1-key.pem"),
+ },
+ client => {
+ "RequestCAFile" => test_pem("root-cert.pem"),
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3"
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+);
+
+push @tests, @tests_tls_1_3 unless disabled("tls1_3");
+push @tests, @tests_tls_1_3_non_fips unless disabled("tls1_3") || $fips_mode;
+
+my @tests_dsa_tls_1_2 = (
+ {
+ name => "TLS 1.2 DSA Certificate Test",
+ server => {
+ "DSA.Certificate" => test_pem("server-dsa-cert.pem"),
+ "DSA.PrivateKey" => test_pem("server-dsa-key.pem"),
+ "DHParameters" => test_pem("dhp2048.pem"),
+ "MinProtocol" => "TLSv1.2",
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ALL",
+ },
+ client => {
+ "SignatureAlgorithms" => "DSA+SHA256:DSA+SHA1",
+ "CipherString" => "ALL",
+ },
+ test => {
+ "ExpectedResult" => "Success"
+ },
+ },
+);
+
+my @tests_dsa_tls_1_3 = (
+ {
+ name => "TLS 1.3 Client Auth No TLS 1.3 Signature Algorithms",
+ server => {
+ "ClientSignatureAlgorithms" => "ECDSA+SHA1:DSA+SHA256:RSA+SHA256",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Request"
+ },
+ client => {},
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "TLS 1.3 DSA Certificate Test",
+ server => {
+ "DSA.Certificate" => test_pem("server-dsa-cert.pem"),
+ "DSA.PrivateKey" => test_pem("server-dsa-key.pem"),
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "CipherString" => "ALL",
+ },
+ client => {
+ "SignatureAlgorithms" => "DSA+SHA1:DSA+SHA256:ECDSA+SHA256",
+ "CipherString" => "ALL",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+);
+
+if (!disabled("dsa")) {
+ push @tests, @tests_dsa_tls_1_2 unless disabled("dh");
+ push @tests, @tests_dsa_tls_1_3 unless disabled("tls1_3");
+}
diff --git a/test/ssl-tests/21-key-update.cnf b/test/ssl-tests/21-key-update.cnf
new file mode 100644
index 000000000000..b79eb444943c
--- /dev/null
+++ b/test/ssl-tests/21-key-update.cnf
@@ -0,0 +1,112 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 4
+
+test-0 = 0-update-key-client-update-not-requested
+test-1 = 1-update-key-server-update-not-requested
+test-2 = 2-update-key-client-update-requested
+test-3 = 3-update-key-server-update-requested
+# ===========================================================
+
+[0-update-key-client-update-not-requested]
+ssl_conf = 0-update-key-client-update-not-requested-ssl
+
+[0-update-key-client-update-not-requested-ssl]
+server = 0-update-key-client-update-not-requested-server
+client = 0-update-key-client-update-not-requested-client
+
+[0-update-key-client-update-not-requested-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-update-key-client-update-not-requested-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+HandshakeMode = KeyUpdateClient
+KeyUpdateType = KeyUpdateNotRequested
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[1-update-key-server-update-not-requested]
+ssl_conf = 1-update-key-server-update-not-requested-ssl
+
+[1-update-key-server-update-not-requested-ssl]
+server = 1-update-key-server-update-not-requested-server
+client = 1-update-key-server-update-not-requested-client
+
+[1-update-key-server-update-not-requested-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-update-key-server-update-not-requested-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+HandshakeMode = KeyUpdateServer
+KeyUpdateType = KeyUpdateNotRequested
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[2-update-key-client-update-requested]
+ssl_conf = 2-update-key-client-update-requested-ssl
+
+[2-update-key-client-update-requested-ssl]
+server = 2-update-key-client-update-requested-server
+client = 2-update-key-client-update-requested-client
+
+[2-update-key-client-update-requested-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-update-key-client-update-requested-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+HandshakeMode = KeyUpdateClient
+KeyUpdateType = KeyUpdateRequested
+ResumptionExpected = No
+
+
+# ===========================================================
+
+[3-update-key-server-update-requested]
+ssl_conf = 3-update-key-server-update-requested-ssl
+
+[3-update-key-server-update-requested-ssl]
+server = 3-update-key-server-update-requested-server
+client = 3-update-key-server-update-requested-client
+
+[3-update-key-server-update-requested-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-update-key-server-update-requested-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+HandshakeMode = KeyUpdateServer
+KeyUpdateType = KeyUpdateRequested
+ResumptionExpected = No
+
+
diff --git a/test/ssl-tests/21-key-update.cnf.in b/test/ssl-tests/21-key-update.cnf.in
new file mode 100644
index 000000000000..227c6d93664a
--- /dev/null
+++ b/test/ssl-tests/21-key-update.cnf.in
@@ -0,0 +1,62 @@
+# -*- mode: perl; -*-
+# Copyright 2017-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
+
+
+## Test KeyUpdate
+
+use strict;
+use warnings;
+
+package ssltests;
+
+our @tests = (
+ {
+ name => "update-key-client-update-not-requested",
+ server => {},
+ client => {},
+ test => {
+ "HandshakeMode" => "KeyUpdateClient",
+ "KeyUpdateType" => "KeyUpdateNotRequested",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "update-key-server-update-not-requested",
+ server => {},
+ client => {},
+ test => {
+ "HandshakeMode" => "KeyUpdateServer",
+ "KeyUpdateType" => "KeyUpdateNotRequested",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "update-key-client-update-requested",
+ server => {},
+ client => {},
+ test => {
+ "HandshakeMode" => "KeyUpdateClient",
+ "KeyUpdateType" => "KeyUpdateRequested",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "update-key-server-update-requested",
+ server => {},
+ client => {},
+ test => {
+ "HandshakeMode" => "KeyUpdateServer",
+ "KeyUpdateType" => "KeyUpdateRequested",
+ "ResumptionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ }
+);
diff --git a/test/ssl-tests/22-compression.cnf b/test/ssl-tests/22-compression.cnf
new file mode 100644
index 000000000000..c85d3129abbb
--- /dev/null
+++ b/test/ssl-tests/22-compression.cnf
@@ -0,0 +1,216 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 8
+
+test-0 = 0-tlsv1_3-both-compress
+test-1 = 1-tlsv1_3-client-compress
+test-2 = 2-tlsv1_3-server-compress
+test-3 = 3-tlsv1_3-neither-compress
+test-4 = 4-tlsv1_2-both-compress
+test-5 = 5-tlsv1_2-client-compress
+test-6 = 6-tlsv1_2-server-compress
+test-7 = 7-tlsv1_2-neither-compress
+# ===========================================================
+
+[0-tlsv1_3-both-compress]
+ssl_conf = 0-tlsv1_3-both-compress-ssl
+
+[0-tlsv1_3-both-compress-ssl]
+server = 0-tlsv1_3-both-compress-server
+client = 0-tlsv1_3-both-compress-client
+
+[0-tlsv1_3-both-compress-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = Compression
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-tlsv1_3-both-compress-client]
+CipherString = DEFAULT
+Options = Compression
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+CompressionExpected = No
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[1-tlsv1_3-client-compress]
+ssl_conf = 1-tlsv1_3-client-compress-ssl
+
+[1-tlsv1_3-client-compress-ssl]
+server = 1-tlsv1_3-client-compress-server
+client = 1-tlsv1_3-client-compress-client
+
+[1-tlsv1_3-client-compress-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-tlsv1_3-client-compress-client]
+CipherString = DEFAULT
+Options = Compression
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+CompressionExpected = No
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[2-tlsv1_3-server-compress]
+ssl_conf = 2-tlsv1_3-server-compress-ssl
+
+[2-tlsv1_3-server-compress-ssl]
+server = 2-tlsv1_3-server-compress-server
+client = 2-tlsv1_3-server-compress-client
+
+[2-tlsv1_3-server-compress-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = Compression
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-tlsv1_3-server-compress-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+CompressionExpected = No
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[3-tlsv1_3-neither-compress]
+ssl_conf = 3-tlsv1_3-neither-compress-ssl
+
+[3-tlsv1_3-neither-compress-ssl]
+server = 3-tlsv1_3-neither-compress-server
+client = 3-tlsv1_3-neither-compress-client
+
+[3-tlsv1_3-neither-compress-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-tlsv1_3-neither-compress-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+CompressionExpected = No
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[4-tlsv1_2-both-compress]
+ssl_conf = 4-tlsv1_2-both-compress-ssl
+
+[4-tlsv1_2-both-compress-ssl]
+server = 4-tlsv1_2-both-compress-server
+client = 4-tlsv1_2-both-compress-client
+
+[4-tlsv1_2-both-compress-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = Compression
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-tlsv1_2-both-compress-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = Compression
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+CompressionExpected = Yes
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[5-tlsv1_2-client-compress]
+ssl_conf = 5-tlsv1_2-client-compress-ssl
+
+[5-tlsv1_2-client-compress-ssl]
+server = 5-tlsv1_2-client-compress-server
+client = 5-tlsv1_2-client-compress-client
+
+[5-tlsv1_2-client-compress-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-tlsv1_2-client-compress-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = Compression
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+CompressionExpected = No
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[6-tlsv1_2-server-compress]
+ssl_conf = 6-tlsv1_2-server-compress-ssl
+
+[6-tlsv1_2-server-compress-ssl]
+server = 6-tlsv1_2-server-compress-server
+client = 6-tlsv1_2-server-compress-client
+
+[6-tlsv1_2-server-compress-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = Compression
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-tlsv1_2-server-compress-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+CompressionExpected = No
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[7-tlsv1_2-neither-compress]
+ssl_conf = 7-tlsv1_2-neither-compress-ssl
+
+[7-tlsv1_2-neither-compress-ssl]
+server = 7-tlsv1_2-neither-compress-server
+client = 7-tlsv1_2-neither-compress-client
+
+[7-tlsv1_2-neither-compress-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-tlsv1_2-neither-compress-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+CompressionExpected = No
+ExpectedResult = Success
+
+
diff --git a/test/ssl-tests/22-compression.cnf.in b/test/ssl-tests/22-compression.cnf.in
new file mode 100644
index 000000000000..69a2e7f80101
--- /dev/null
+++ b/test/ssl-tests/22-compression.cnf.in
@@ -0,0 +1,127 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## Test Compression
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our @tests = ();
+
+our @tests_tls1_3 = (
+ {
+ name => "tlsv1_3-both-compress",
+ server => {
+ "Options" => "Compression"
+ },
+ client => {
+ "Options" => "Compression"
+ },
+ test => {
+ "CompressionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "tlsv1_3-client-compress",
+ server => {
+ },
+ client => {
+ "Options" => "Compression"
+ },
+ test => {
+ "CompressionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "tlsv1_3-server-compress",
+ server => {
+ "Options" => "Compression"
+ },
+ client => {
+ },
+ test => {
+ "CompressionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "tlsv1_3-neither-compress",
+ server => {
+ },
+ client => {
+ },
+ test => {
+ "CompressionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+);
+our @tests_tls1_2 = (
+ {
+ name => "tlsv1_2-both-compress",
+ server => {
+ "Options" => "Compression"
+ },
+ client => {
+ "Options" => "Compression",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "CompressionExpected" => "Yes",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "tlsv1_2-client-compress",
+ server => {
+ },
+ client => {
+ "Options" => "Compression",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "CompressionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "tlsv1_2-server-compress",
+ server => {
+ "Options" => "Compression"
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "CompressionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "tlsv1_2-neither-compress",
+ server => {
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "CompressionExpected" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+);
+
+push @tests, @tests_tls1_3 unless disabled("tls1_3");
+push @tests, @tests_tls1_2 unless alldisabled(("tls1_2", "tls1_1", "tls1",
+ "ssl3"));
diff --git a/test/ssl-tests/23-srp.cnf b/test/ssl-tests/23-srp.cnf
new file mode 100644
index 000000000000..610a0bb08ae3
--- /dev/null
+++ b/test/ssl-tests/23-srp.cnf
@@ -0,0 +1,148 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 4
+
+test-0 = 0-srp
+test-1 = 1-srp-bad-password
+test-2 = 2-srp-auth
+test-3 = 3-srp-auth-bad-password
+# ===========================================================
+
+[0-srp]
+ssl_conf = 0-srp-ssl
+
+[0-srp-ssl]
+server = 0-srp-server
+client = 0-srp-client
+
+[0-srp-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = SRP
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-srp-client]
+CipherString = SRP
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+server = 0-srp-server-extra
+client = 0-srp-client-extra
+
+[0-srp-server-extra]
+SRPPassword = password
+SRPUser = user
+
+[0-srp-client-extra]
+SRPPassword = password
+SRPUser = user
+
+
+# ===========================================================
+
+[1-srp-bad-password]
+ssl_conf = 1-srp-bad-password-ssl
+
+[1-srp-bad-password-ssl]
+server = 1-srp-bad-password-server
+client = 1-srp-bad-password-client
+
+[1-srp-bad-password-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = SRP
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-srp-bad-password-client]
+CipherString = SRP
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = ServerFail
+server = 1-srp-bad-password-server-extra
+client = 1-srp-bad-password-client-extra
+
+[1-srp-bad-password-server-extra]
+SRPPassword = password
+SRPUser = user
+
+[1-srp-bad-password-client-extra]
+SRPPassword = passw0rd
+SRPUser = user
+
+
+# ===========================================================
+
+[2-srp-auth]
+ssl_conf = 2-srp-auth-ssl
+
+[2-srp-auth-ssl]
+server = 2-srp-auth-server
+client = 2-srp-auth-client
+
+[2-srp-auth-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = aSRP
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-srp-auth-client]
+CipherString = aSRP
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+server = 2-srp-auth-server-extra
+client = 2-srp-auth-client-extra
+
+[2-srp-auth-server-extra]
+SRPPassword = password
+SRPUser = user
+
+[2-srp-auth-client-extra]
+SRPPassword = password
+SRPUser = user
+
+
+# ===========================================================
+
+[3-srp-auth-bad-password]
+ssl_conf = 3-srp-auth-bad-password-ssl
+
+[3-srp-auth-bad-password-ssl]
+server = 3-srp-auth-bad-password-server
+client = 3-srp-auth-bad-password-client
+
+[3-srp-auth-bad-password-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = aSRP
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-srp-auth-bad-password-client]
+CipherString = aSRP
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = ServerFail
+server = 3-srp-auth-bad-password-server-extra
+client = 3-srp-auth-bad-password-client-extra
+
+[3-srp-auth-bad-password-server-extra]
+SRPPassword = password
+SRPUser = user
+
+[3-srp-auth-bad-password-client-extra]
+SRPPassword = passw0rd
+SRPUser = user
+
+
diff --git a/test/ssl-tests/23-srp.cnf.in b/test/ssl-tests/23-srp.cnf.in
new file mode 100644
index 000000000000..606cb79e073f
--- /dev/null
+++ b/test/ssl-tests/23-srp.cnf.in
@@ -0,0 +1,107 @@
+# -*- mode: perl; -*-
+# Copyright 2017-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
+
+use strict;
+use warnings;
+
+package ssltests;
+
+# SRP is only supported up to TLSv1.2
+
+our @tests = (
+ {
+ name => "srp",
+ server => {
+ "CipherString" => "SRP",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "SRPUser" => "user",
+ "SRPPassword" => "password",
+ },
+ },
+ client => {
+ "CipherString" => "SRP",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "SRPUser" => "user",
+ "SRPPassword" => "password",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "srp-bad-password",
+ server => {
+ "CipherString" => "SRP",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "SRPUser" => "user",
+ "SRPPassword" => "password",
+ },
+ },
+ client => {
+ "CipherString" => "SRP",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "SRPUser" => "user",
+ "SRPPassword" => "passw0rd",
+ },
+ },
+ test => {
+ # Server fails first with bad client Finished.
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+ {
+ name => "srp-auth",
+ server => {
+ "CipherString" => "aSRP",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "SRPUser" => "user",
+ "SRPPassword" => "password",
+ },
+ },
+ client => {
+ "CipherString" => "aSRP",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "SRPUser" => "user",
+ "SRPPassword" => "password",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success"
+ },
+ },
+ {
+ name => "srp-auth-bad-password",
+ server => {
+ "CipherString" => "aSRP",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "SRPUser" => "user",
+ "SRPPassword" => "password",
+ },
+ },
+ client => {
+ "CipherString" => "aSRP",
+ "MaxProtocol" => "TLSv1.2",
+ extra => {
+ "SRPUser" => "user",
+ "SRPPassword" => "passw0rd",
+ },
+ },
+ test => {
+ # Server fails first with bad client Finished.
+ "ExpectedResult" => "ServerFail"
+ },
+ },
+);
diff --git a/test/ssl-tests/24-padding.cnf b/test/ssl-tests/24-padding.cnf
new file mode 100644
index 000000000000..3c9f45010289
--- /dev/null
+++ b/test/ssl-tests/24-padding.cnf
@@ -0,0 +1,34 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 1
+
+test-0 = 0-default
+# ===========================================================
+
+[0-default]
+ssl_conf = 0-default-ssl
+
+[0-default-ssl]
+server = 0-default-server
+client = 0-default-client
+
+[0-default-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+RecordPadding = 64
+
+[0-default-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+RecordPadding = 11
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+
+
diff --git a/test/ssl-tests/24-padding.cnf.in b/test/ssl-tests/24-padding.cnf.in
new file mode 100644
index 000000000000..785ff3e51b02
--- /dev/null
+++ b/test/ssl-tests/24-padding.cnf.in
@@ -0,0 +1,25 @@
+# -*- mode: perl; -*-
+# Copyright 2017-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
+
+
+## SSL test configurations
+
+package ssltests;
+
+our @tests = (
+ {
+ name => "default",
+ server => { "RecordPadding" => 64,
+ "MaxProtocol" => "TLSv1.3",
+ "MinProtocol" => "TLSv1.3" },
+ client => { "RecordPadding" => 11,
+ "MaxProtocol" => "TLSv1.3",
+ "MinProtocol" => "TLSv1.3" },
+ test => { "ExpectedResult" => "Success" },
+ },
+);
diff --git a/test/ssl-tests/25-cipher.cnf b/test/ssl-tests/25-cipher.cnf
new file mode 100644
index 000000000000..a28c1f7bed29
--- /dev/null
+++ b/test/ssl-tests/25-cipher.cnf
@@ -0,0 +1,244 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 9
+
+test-0 = 0-cipher-server-1
+test-1 = 1-cipher-server-2
+test-2 = 2-cipher-server-client-list
+test-3 = 3-cipher-server-pref-1
+test-4 = 4-cipher-server-pref-2
+test-5 = 5-cipher-server-pref-client-list
+test-6 = 6-cipher-server-pref-not-mobile
+test-7 = 7-cipher-server-pref-mobile
+test-8 = 8-cipher-server-pref-mobile2
+# ===========================================================
+
+[0-cipher-server-1]
+ssl_conf = 0-cipher-server-1-ssl
+
+[0-cipher-server-1-ssl]
+server = 0-cipher-server-1-server
+client = 0-cipher-server-1-client
+
+[0-cipher-server-1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-cipher-server-1-client]
+CipherString = ECDHE-RSA-AES256-SHA384
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedCipher = ECDHE-RSA-AES256-SHA384
+
+
+# ===========================================================
+
+[1-cipher-server-2]
+ssl_conf = 1-cipher-server-2-ssl
+
+[1-cipher-server-2-ssl]
+server = 1-cipher-server-2-server
+client = 1-cipher-server-2-client
+
+[1-cipher-server-2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-cipher-server-2-client]
+CipherString = ECDHE-RSA-AES128-SHA256
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedCipher = ECDHE-RSA-AES128-SHA256
+
+
+# ===========================================================
+
+[2-cipher-server-client-list]
+ssl_conf = 2-cipher-server-client-list-ssl
+
+[2-cipher-server-client-list-ssl]
+server = 2-cipher-server-client-list-server
+client = 2-cipher-server-client-list-client
+
+[2-cipher-server-client-list-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-cipher-server-client-list-client]
+CipherString = ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedCipher = ECDHE-RSA-AES128-SHA256
+
+
+# ===========================================================
+
+[3-cipher-server-pref-1]
+ssl_conf = 3-cipher-server-pref-1-ssl
+
+[3-cipher-server-pref-1-ssl]
+server = 3-cipher-server-pref-1-server
+client = 3-cipher-server-pref-1-client
+
+[3-cipher-server-pref-1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
+MaxProtocol = TLSv1.2
+Options = ServerPreference
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-cipher-server-pref-1-client]
+CipherString = ECDHE-RSA-AES256-SHA384
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedCipher = ECDHE-RSA-AES256-SHA384
+
+
+# ===========================================================
+
+[4-cipher-server-pref-2]
+ssl_conf = 4-cipher-server-pref-2-ssl
+
+[4-cipher-server-pref-2-ssl]
+server = 4-cipher-server-pref-2-server
+client = 4-cipher-server-pref-2-client
+
+[4-cipher-server-pref-2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
+MaxProtocol = TLSv1.2
+Options = ServerPreference
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-cipher-server-pref-2-client]
+CipherString = ECDHE-RSA-AES128-SHA256
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedCipher = ECDHE-RSA-AES128-SHA256
+
+
+# ===========================================================
+
+[5-cipher-server-pref-client-list]
+ssl_conf = 5-cipher-server-pref-client-list-ssl
+
+[5-cipher-server-pref-client-list-ssl]
+server = 5-cipher-server-pref-client-list-server
+client = 5-cipher-server-pref-client-list-client
+
+[5-cipher-server-pref-client-list-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
+MaxProtocol = TLSv1.2
+Options = ServerPreference
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-cipher-server-pref-client-list-client]
+CipherString = ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedCipher = ECDHE-RSA-AES256-SHA384
+
+
+# ===========================================================
+
+[6-cipher-server-pref-not-mobile]
+ssl_conf = 6-cipher-server-pref-not-mobile-ssl
+
+[6-cipher-server-pref-not-mobile-ssl]
+server = 6-cipher-server-pref-not-mobile-server
+client = 6-cipher-server-pref-not-mobile-client
+
+[6-cipher-server-pref-not-mobile-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-CHACHA20-POLY1305
+MaxProtocol = TLSv1.2
+Options = ServerPreference
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-cipher-server-pref-not-mobile-client]
+CipherString = ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedCipher = ECDHE-RSA-AES256-SHA384
+
+
+# ===========================================================
+
+[7-cipher-server-pref-mobile]
+ssl_conf = 7-cipher-server-pref-mobile-ssl
+
+[7-cipher-server-pref-mobile-ssl]
+server = 7-cipher-server-pref-mobile-server
+client = 7-cipher-server-pref-mobile-client
+
+[7-cipher-server-pref-mobile-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-CHACHA20-POLY1305
+MaxProtocol = TLSv1.2
+Options = ServerPreference,PrioritizeChaCha
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[7-cipher-server-pref-mobile-client]
+CipherString = ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-CHACHA20-POLY1305
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedCipher = ECDHE-RSA-AES256-SHA384
+
+
+# ===========================================================
+
+[8-cipher-server-pref-mobile2]
+ssl_conf = 8-cipher-server-pref-mobile2-ssl
+
+[8-cipher-server-pref-mobile2-ssl]
+server = 8-cipher-server-pref-mobile2-server
+client = 8-cipher-server-pref-mobile2-client
+
+[8-cipher-server-pref-mobile2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-CHACHA20-POLY1305
+MaxProtocol = TLSv1.2
+Options = ServerPreference,PrioritizeChaCha
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[8-cipher-server-pref-mobile2-client]
+CipherString = ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedCipher = ECDHE-RSA-CHACHA20-POLY1305
+
+
diff --git a/test/ssl-tests/25-cipher.cnf.in b/test/ssl-tests/25-cipher.cnf.in
new file mode 100644
index 000000000000..f1388e8fb4f5
--- /dev/null
+++ b/test/ssl-tests/25-cipher.cnf.in
@@ -0,0 +1,159 @@
+# -*- mode: perl; -*-
+# Copyright 2017-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
+
+
+## Test version negotiation
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our $fips_mode;
+
+our @tests = (
+ {
+ name => "cipher-server-1",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384"
+ },
+ test => {
+ "ExpectedCipher" => "ECDHE-RSA-AES256-SHA384",
+ },
+ },
+ {
+ name => "cipher-server-2",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES128-SHA256"
+ },
+ test => {
+ "ExpectedCipher" => "ECDHE-RSA-AES128-SHA256",
+ },
+ },
+ {
+ name => "cipher-server-client-list",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384",
+ },
+ test => {
+ "ExpectedCipher" => "ECDHE-RSA-AES128-SHA256",
+ },
+ },
+ {
+ name => "cipher-server-pref-1",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256",
+ "Options" => "ServerPreference",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384"
+ },
+ test => {
+ "ExpectedCipher" => "ECDHE-RSA-AES256-SHA384",
+ },
+ },
+ {
+ name => "cipher-server-pref-2",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256",
+ "Options" => "ServerPreference",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES128-SHA256"
+ },
+ test => {
+ "ExpectedCipher" => "ECDHE-RSA-AES128-SHA256",
+ },
+ },
+ {
+ name => "cipher-server-pref-client-list",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256",
+ "Options" => "ServerPreference",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384",
+ },
+ test => {
+ "ExpectedCipher" => "ECDHE-RSA-AES256-SHA384",
+ },
+ },
+ {
+ name => "cipher-server-pref-not-mobile",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-CHACHA20-POLY1305",
+ "Options" => "ServerPreference",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384",
+ },
+ test => {
+ "ExpectedCipher" => "ECDHE-RSA-AES256-SHA384",
+ },
+ },
+ {
+ name => "cipher-server-pref-mobile",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-CHACHA20-POLY1305",
+ "Options" => "ServerPreference,PrioritizeChaCha",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-CHACHA20-POLY1305",
+ },
+ test => {
+ "ExpectedCipher" => "ECDHE-RSA-AES256-SHA384",
+ },
+ },
+);
+
+my @tests_poly1305 = (
+ {
+ name => "cipher-server-pref-mobile2",
+ server => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-CHACHA20-POLY1305",
+ "Options" => "ServerPreference,PrioritizeChaCha",
+ },
+ client => {
+ "MaxProtocol" => "TLSv1.2",
+ "CipherString" => "ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384",
+ },
+ test => {
+ "ExpectedCipher" => "ECDHE-RSA-CHACHA20-POLY1305",
+ },
+ },
+);
+
+push @tests, @tests_poly1305
+ unless disabled("poly1305") || disabled("chacha") || $fips_mode;
diff --git a/test/ssl-tests/26-tls13_client_auth.cnf b/test/ssl-tests/26-tls13_client_auth.cnf
new file mode 100644
index 000000000000..9c42391906a7
--- /dev/null
+++ b/test/ssl-tests/26-tls13_client_auth.cnf
@@ -0,0 +1,488 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 14
+
+test-0 = 0-server-auth-TLSv1.3
+test-1 = 1-client-auth-TLSv1.3-request
+test-2 = 2-client-auth-TLSv1.3-require-fail
+test-3 = 3-client-auth-TLSv1.3-require
+test-4 = 4-client-auth-TLSv1.3-require-non-empty-names
+test-5 = 5-client-auth-TLSv1.3-noroot
+test-6 = 6-client-auth-TLSv1.3-request-post-handshake
+test-7 = 7-client-auth-TLSv1.3-require-fail-post-handshake
+test-8 = 8-client-auth-TLSv1.3-require-post-handshake
+test-9 = 9-client-auth-TLSv1.3-require-non-empty-names-post-handshake
+test-10 = 10-client-auth-TLSv1.3-noroot-post-handshake
+test-11 = 11-client-auth-TLSv1.3-request-force-client-post-handshake
+test-12 = 12-client-auth-TLSv1.3-request-force-server-post-handshake
+test-13 = 13-client-auth-TLSv1.3-request-force-both-post-handshake
+# ===========================================================
+
+[0-server-auth-TLSv1.3]
+ssl_conf = 0-server-auth-TLSv1.3-ssl
+
+[0-server-auth-TLSv1.3-ssl]
+server = 0-server-auth-TLSv1.3-server
+client = 0-server-auth-TLSv1.3-client
+
+[0-server-auth-TLSv1.3-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-server-auth-TLSv1.3-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[1-client-auth-TLSv1.3-request]
+ssl_conf = 1-client-auth-TLSv1.3-request-ssl
+
+[1-client-auth-TLSv1.3-request-ssl]
+server = 1-client-auth-TLSv1.3-request-server
+client = 1-client-auth-TLSv1.3-request-client
+
+[1-client-auth-TLSv1.3-request-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Request
+
+[1-client-auth-TLSv1.3-request-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[2-client-auth-TLSv1.3-require-fail]
+ssl_conf = 2-client-auth-TLSv1.3-require-fail-ssl
+
+[2-client-auth-TLSv1.3-require-fail-ssl]
+server = 2-client-auth-TLSv1.3-require-fail-server
+client = 2-client-auth-TLSv1.3-require-fail-client
+
+[2-client-auth-TLSv1.3-require-fail-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Require
+
+[2-client-auth-TLSv1.3-require-fail-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = ServerFail
+ExpectedServerAlert = CertificateRequired
+
+
+# ===========================================================
+
+[3-client-auth-TLSv1.3-require]
+ssl_conf = 3-client-auth-TLSv1.3-require-ssl
+
+[3-client-auth-TLSv1.3-require-ssl]
+server = 3-client-auth-TLSv1.3-require-server
+client = 3-client-auth-TLSv1.3-require-client
+
+[3-client-auth-TLSv1.3-require-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ClientSignatureAlgorithms = PSS+SHA256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[3-client-auth-TLSv1.3-require-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedClientCANames = empty
+ExpectedClientCertType = RSA
+ExpectedClientSignHash = SHA256
+ExpectedClientSignType = RSA-PSS
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[4-client-auth-TLSv1.3-require-non-empty-names]
+ssl_conf = 4-client-auth-TLSv1.3-require-non-empty-names-ssl
+
+[4-client-auth-TLSv1.3-require-non-empty-names-ssl]
+server = 4-client-auth-TLSv1.3-require-non-empty-names-server
+client = 4-client-auth-TLSv1.3-require-non-empty-names-client
+
+[4-client-auth-TLSv1.3-require-non-empty-names-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ClientCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ClientSignatureAlgorithms = PSS+SHA256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = Request
+
+[4-client-auth-TLSv1.3-require-non-empty-names-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedClientCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedClientCertType = RSA
+ExpectedClientSignHash = SHA256
+ExpectedClientSignType = RSA-PSS
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[5-client-auth-TLSv1.3-noroot]
+ssl_conf = 5-client-auth-TLSv1.3-noroot-ssl
+
+[5-client-auth-TLSv1.3-noroot-ssl]
+server = 5-client-auth-TLSv1.3-noroot-server
+client = 5-client-auth-TLSv1.3-noroot-client
+
+[5-client-auth-TLSv1.3-noroot-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = Require
+
+[5-client-auth-TLSv1.3-noroot-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnknownCA
+
+
+# ===========================================================
+
+[6-client-auth-TLSv1.3-request-post-handshake]
+ssl_conf = 6-client-auth-TLSv1.3-request-post-handshake-ssl
+
+[6-client-auth-TLSv1.3-request-post-handshake-ssl]
+server = 6-client-auth-TLSv1.3-request-post-handshake-server
+client = 6-client-auth-TLSv1.3-request-post-handshake-client
+
+[6-client-auth-TLSv1.3-request-post-handshake-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = RequestPostHandshake
+
+[6-client-auth-TLSv1.3-request-post-handshake-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = ServerFail
+HandshakeMode = PostHandshakeAuth
+
+
+# ===========================================================
+
+[7-client-auth-TLSv1.3-require-fail-post-handshake]
+ssl_conf = 7-client-auth-TLSv1.3-require-fail-post-handshake-ssl
+
+[7-client-auth-TLSv1.3-require-fail-post-handshake-ssl]
+server = 7-client-auth-TLSv1.3-require-fail-post-handshake-server
+client = 7-client-auth-TLSv1.3-require-fail-post-handshake-client
+
+[7-client-auth-TLSv1.3-require-fail-post-handshake-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = RequirePostHandshake
+
+[7-client-auth-TLSv1.3-require-fail-post-handshake-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-7]
+ExpectedResult = ServerFail
+HandshakeMode = PostHandshakeAuth
+
+
+# ===========================================================
+
+[8-client-auth-TLSv1.3-require-post-handshake]
+ssl_conf = 8-client-auth-TLSv1.3-require-post-handshake-ssl
+
+[8-client-auth-TLSv1.3-require-post-handshake-ssl]
+server = 8-client-auth-TLSv1.3-require-post-handshake-server
+client = 8-client-auth-TLSv1.3-require-post-handshake-client
+
+[8-client-auth-TLSv1.3-require-post-handshake-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ClientSignatureAlgorithms = PSS+SHA256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = RequestPostHandshake
+
+[8-client-auth-TLSv1.3-require-post-handshake-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-8]
+ExpectedClientCANames = empty
+ExpectedClientCertType = RSA
+ExpectedClientSignHash = SHA256
+ExpectedClientSignType = RSA-PSS
+ExpectedResult = Success
+HandshakeMode = PostHandshakeAuth
+client = 8-client-auth-TLSv1.3-require-post-handshake-client-extra
+
+[8-client-auth-TLSv1.3-require-post-handshake-client-extra]
+EnablePHA = Yes
+
+
+# ===========================================================
+
+[9-client-auth-TLSv1.3-require-non-empty-names-post-handshake]
+ssl_conf = 9-client-auth-TLSv1.3-require-non-empty-names-post-handshake-ssl
+
+[9-client-auth-TLSv1.3-require-non-empty-names-post-handshake-ssl]
+server = 9-client-auth-TLSv1.3-require-non-empty-names-post-handshake-server
+client = 9-client-auth-TLSv1.3-require-non-empty-names-post-handshake-client
+
+[9-client-auth-TLSv1.3-require-non-empty-names-post-handshake-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+ClientCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ClientSignatureAlgorithms = PSS+SHA256
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+VerifyMode = RequestPostHandshake
+
+[9-client-auth-TLSv1.3-require-non-empty-names-post-handshake-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-9]
+ExpectedClientCANames = ${ENV::TEST_CERTS_DIR}/root-cert.pem
+ExpectedClientCertType = RSA
+ExpectedClientSignHash = SHA256
+ExpectedClientSignType = RSA-PSS
+ExpectedResult = Success
+HandshakeMode = PostHandshakeAuth
+client = 9-client-auth-TLSv1.3-require-non-empty-names-post-handshake-client-extra
+
+[9-client-auth-TLSv1.3-require-non-empty-names-post-handshake-client-extra]
+EnablePHA = Yes
+
+
+# ===========================================================
+
+[10-client-auth-TLSv1.3-noroot-post-handshake]
+ssl_conf = 10-client-auth-TLSv1.3-noroot-post-handshake-ssl
+
+[10-client-auth-TLSv1.3-noroot-post-handshake-ssl]
+server = 10-client-auth-TLSv1.3-noroot-post-handshake-server
+client = 10-client-auth-TLSv1.3-noroot-post-handshake-client
+
+[10-client-auth-TLSv1.3-noroot-post-handshake-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = RequirePostHandshake
+
+[10-client-auth-TLSv1.3-noroot-post-handshake-client]
+Certificate = ${ENV::TEST_CERTS_DIR}/ee-client-chain.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/ee-key.pem
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-10]
+ExpectedResult = ServerFail
+ExpectedServerAlert = UnknownCA
+HandshakeMode = PostHandshakeAuth
+client = 10-client-auth-TLSv1.3-noroot-post-handshake-client-extra
+
+[10-client-auth-TLSv1.3-noroot-post-handshake-client-extra]
+EnablePHA = Yes
+
+
+# ===========================================================
+
+[11-client-auth-TLSv1.3-request-force-client-post-handshake]
+ssl_conf = 11-client-auth-TLSv1.3-request-force-client-post-handshake-ssl
+
+[11-client-auth-TLSv1.3-request-force-client-post-handshake-ssl]
+server = 11-client-auth-TLSv1.3-request-force-client-post-handshake-server
+client = 11-client-auth-TLSv1.3-request-force-client-post-handshake-client
+
+[11-client-auth-TLSv1.3-request-force-client-post-handshake-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = RequestPostHandshake
+
+[11-client-auth-TLSv1.3-request-force-client-post-handshake-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-11]
+ExpectedResult = Success
+HandshakeMode = PostHandshakeAuth
+client = 11-client-auth-TLSv1.3-request-force-client-post-handshake-client-extra
+
+[11-client-auth-TLSv1.3-request-force-client-post-handshake-client-extra]
+EnablePHA = Yes
+
+
+# ===========================================================
+
+[12-client-auth-TLSv1.3-request-force-server-post-handshake]
+ssl_conf = 12-client-auth-TLSv1.3-request-force-server-post-handshake-ssl
+
+[12-client-auth-TLSv1.3-request-force-server-post-handshake-ssl]
+server = 12-client-auth-TLSv1.3-request-force-server-post-handshake-server
+client = 12-client-auth-TLSv1.3-request-force-server-post-handshake-client
+
+[12-client-auth-TLSv1.3-request-force-server-post-handshake-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = RequestPostHandshake
+
+[12-client-auth-TLSv1.3-request-force-server-post-handshake-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-12]
+ExpectedResult = ClientFail
+HandshakeMode = PostHandshakeAuth
+server = 12-client-auth-TLSv1.3-request-force-server-post-handshake-server-extra
+
+[12-client-auth-TLSv1.3-request-force-server-post-handshake-server-extra]
+ForcePHA = Yes
+
+
+# ===========================================================
+
+[13-client-auth-TLSv1.3-request-force-both-post-handshake]
+ssl_conf = 13-client-auth-TLSv1.3-request-force-both-post-handshake-ssl
+
+[13-client-auth-TLSv1.3-request-force-both-post-handshake-ssl]
+server = 13-client-auth-TLSv1.3-request-force-both-post-handshake-server
+client = 13-client-auth-TLSv1.3-request-force-both-post-handshake-client
+
+[13-client-auth-TLSv1.3-request-force-both-post-handshake-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+VerifyMode = RequestPostHandshake
+
+[13-client-auth-TLSv1.3-request-force-both-post-handshake-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+MinProtocol = TLSv1.3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-13]
+ExpectedResult = Success
+HandshakeMode = PostHandshakeAuth
+server = 13-client-auth-TLSv1.3-request-force-both-post-handshake-server-extra
+client = 13-client-auth-TLSv1.3-request-force-both-post-handshake-client-extra
+
+[13-client-auth-TLSv1.3-request-force-both-post-handshake-server-extra]
+ForcePHA = Yes
+
+[13-client-auth-TLSv1.3-request-force-both-post-handshake-client-extra]
+EnablePHA = Yes
+
+
diff --git a/test/ssl-tests/26-tls13_client_auth.cnf.in b/test/ssl-tests/26-tls13_client_auth.cnf.in
new file mode 100644
index 000000000000..c1e70b7f3da7
--- /dev/null
+++ b/test/ssl-tests/26-tls13_client_auth.cnf.in
@@ -0,0 +1,302 @@
+# -*- mode: perl; -*-
+# Copyright 2018-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
+
+
+## Test TLSv1.3 certificate authentication
+## Similar to 04-client_auth.cnf.in output, but specific for
+## TLSv1.3 and post-handshake authentication
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our @tests = (
+ {
+ name => "server-auth-TLSv1.3",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-request",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "VerifyMode" => "Request",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-require-fail",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Require",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "ExpectedServerAlert" => "CertificateRequired",
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-require",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "ClientSignatureAlgorithms" => "PSS+SHA256",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Request",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "ExpectedClientCertType" => "RSA",
+ "ExpectedClientSignType" => "RSA-PSS",
+ "ExpectedClientSignHash" => "SHA256",
+ "ExpectedClientCANames" => "empty"
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-require-non-empty-names",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "ClientSignatureAlgorithms" => "PSS+SHA256",
+ "ClientCAFile" => test_pem("root-cert.pem"),
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "Request",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "ExpectedClientCertType" => "RSA",
+ "ExpectedClientSignType" => "RSA-PSS",
+ "ExpectedClientSignHash" => "SHA256",
+ "ExpectedClientCANames" => test_pem("root-cert.pem"),
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-noroot",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "VerifyMode" => "Require",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "ExpectedServerAlert" => "UnknownCA",
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-request-post-handshake",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "VerifyMode" => "RequestPostHandshake",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "HandshakeMode" => "PostHandshakeAuth",
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-require-fail-post-handshake",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "RequirePostHandshake",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "HandshakeMode" => "PostHandshakeAuth",
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-require-post-handshake",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "ClientSignatureAlgorithms" => "PSS+SHA256",
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "RequestPostHandshake",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ extra => {
+ "EnablePHA" => "Yes",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "HandshakeMode" => "PostHandshakeAuth",
+ "ExpectedClientCertType" => "RSA",
+ "ExpectedClientSignType" => "RSA-PSS",
+ "ExpectedClientSignHash" => "SHA256",
+ "ExpectedClientCANames" => "empty"
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-require-non-empty-names-post-handshake",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "ClientSignatureAlgorithms" => "PSS+SHA256",
+ "ClientCAFile" => test_pem("root-cert.pem"),
+ "VerifyCAFile" => test_pem("root-cert.pem"),
+ "VerifyMode" => "RequestPostHandshake",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ extra => {
+ "EnablePHA" => "Yes",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "HandshakeMode" => "PostHandshakeAuth",
+ "ExpectedClientCertType" => "RSA",
+ "ExpectedClientSignType" => "RSA-PSS",
+ "ExpectedClientSignHash" => "SHA256",
+ "ExpectedClientCANames" => test_pem("root-cert.pem"),
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-noroot-post-handshake",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "VerifyMode" => "RequirePostHandshake",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "Certificate" => test_pem("ee-client-chain.pem"),
+ "PrivateKey" => test_pem("ee-key.pem"),
+ extra => {
+ "EnablePHA" => "Yes",
+ },
+ },
+ test => {
+ "ExpectedResult" => "ServerFail",
+ "HandshakeMode" => "PostHandshakeAuth",
+ "ExpectedServerAlert" => "UnknownCA",
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-request-force-client-post-handshake",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "VerifyMode" => "RequestPostHandshake",
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ extra => {
+ "EnablePHA" => "Yes",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "HandshakeMode" => "PostHandshakeAuth",
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-request-force-server-post-handshake",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "VerifyMode" => "RequestPostHandshake",
+ extra => {
+ "ForcePHA" => "Yes",
+ },
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ },
+ test => {
+ "ExpectedResult" => "ClientFail",
+ "HandshakeMode" => "PostHandshakeAuth",
+ },
+ },
+ {
+ name => "client-auth-TLSv1.3-request-force-both-post-handshake",
+ server => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ "VerifyMode" => "RequestPostHandshake",
+ extra => {
+ "ForcePHA" => "Yes",
+ },
+ },
+ client => {
+ "MinProtocol" => "TLSv1.3",
+ "MaxProtocol" => "TLSv1.3",
+ extra => {
+ "EnablePHA" => "Yes",
+ },
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ "HandshakeMode" => "PostHandshakeAuth",
+ },
+ },
+);
diff --git a/test/ssl-tests/27-ticket-appdata.cnf b/test/ssl-tests/27-ticket-appdata.cnf
new file mode 100644
index 000000000000..863ca7a90183
--- /dev/null
+++ b/test/ssl-tests/27-ticket-appdata.cnf
@@ -0,0 +1,146 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 4
+
+test-0 = 0-session-ticket-app-data12
+test-1 = 1-session-ticket-app-data12
+test-2 = 2-session-ticket-app-data13
+test-3 = 3-session-ticket-app-data13
+# ===========================================================
+
+[0-session-ticket-app-data12]
+ssl_conf = 0-session-ticket-app-data12-ssl
+
+[0-session-ticket-app-data12-ssl]
+server = 0-session-ticket-app-data12-server
+client = 0-session-ticket-app-data12-client
+resume-server = 0-session-ticket-app-data12-server
+resume-client = 0-session-ticket-app-data12-client
+
+[0-session-ticket-app-data12-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-session-ticket-app-data12-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+ExpectedSessionTicketAppData = HelloWorld
+HandshakeMode = Resume
+ResumptionExpected = Yes
+SessionTicketExpected = Yes
+server = 0-session-ticket-app-data12-server-extra
+resume-server = 0-session-ticket-app-data12-server-extra
+
+[0-session-ticket-app-data12-server-extra]
+SessionTicketAppData = HelloWorld
+
+
+# ===========================================================
+
+[1-session-ticket-app-data12]
+ssl_conf = 1-session-ticket-app-data12-ssl
+
+[1-session-ticket-app-data12-ssl]
+server = 1-session-ticket-app-data12-server
+client = 1-session-ticket-app-data12-client
+resume-server = 1-session-ticket-app-data12-server
+resume-client = 1-session-ticket-app-data12-client
+
+[1-session-ticket-app-data12-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-session-ticket-app-data12-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.2
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+ExpectedSessionTicketAppData =
+HandshakeMode = Resume
+ResumptionExpected = Yes
+SessionTicketExpected = Yes
+
+
+# ===========================================================
+
+[2-session-ticket-app-data13]
+ssl_conf = 2-session-ticket-app-data13-ssl
+
+[2-session-ticket-app-data13-ssl]
+server = 2-session-ticket-app-data13-server
+client = 2-session-ticket-app-data13-client
+resume-server = 2-session-ticket-app-data13-server
+resume-client = 2-session-ticket-app-data13-client
+
+[2-session-ticket-app-data13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-session-ticket-app-data13-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+ExpectedSessionTicketAppData = HelloWorld
+HandshakeMode = Resume
+ResumptionExpected = Yes
+SessionTicketExpected = Yes
+server = 2-session-ticket-app-data13-server-extra
+resume-server = 2-session-ticket-app-data13-server-extra
+
+[2-session-ticket-app-data13-server-extra]
+SessionTicketAppData = HelloWorld
+
+
+# ===========================================================
+
+[3-session-ticket-app-data13]
+ssl_conf = 3-session-ticket-app-data13-ssl
+
+[3-session-ticket-app-data13-ssl]
+server = 3-session-ticket-app-data13-server
+client = 3-session-ticket-app-data13-client
+resume-server = 3-session-ticket-app-data13-server
+resume-client = 3-session-ticket-app-data13-client
+
+[3-session-ticket-app-data13-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = SessionTicket
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-session-ticket-app-data13-client]
+CipherString = DEFAULT
+MaxProtocol = TLSv1.3
+Options = SessionTicket
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+ExpectedSessionTicketAppData =
+HandshakeMode = Resume
+ResumptionExpected = Yes
+SessionTicketExpected = Yes
+
+
diff --git a/test/ssl-tests/27-ticket-appdata.cnf.in b/test/ssl-tests/27-ticket-appdata.cnf.in
new file mode 100644
index 000000000000..9117e03e70fc
--- /dev/null
+++ b/test/ssl-tests/27-ticket-appdata.cnf.in
@@ -0,0 +1,100 @@
+# -*- mode: perl; -*-
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+## Test session ticket app data
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our @tests12 = (
+ {
+ "name" => "session-ticket-app-data12",
+ "client" => {
+ "MaxProtocol" => "TLSv1.2",
+ "Options" => "SessionTicket",
+ },
+ "server" => {
+ "Options" => "SessionTicket",
+ "extra" => {
+ "SessionTicketAppData" => "HelloWorld",
+ },
+ },
+ "test" => {
+ "HandshakeMode" => "Resume",
+ "ExpectedResult" => "Success",
+ "SessionTicketExpected" => "Yes",
+ "ResumptionExpected" => "Yes",
+ "ExpectedSessionTicketAppData" => "HelloWorld",
+ }
+ },
+ {
+ "name" => "session-ticket-app-data12",
+ "client" => {
+ "MaxProtocol" => "TLSv1.2",
+ "Options" => "SessionTicket",
+ },
+ "server" => {
+ "Options" => "SessionTicket",
+ },
+ "test" => {
+ "HandshakeMode" => "Resume",
+ "ExpectedResult" => "Success",
+ "SessionTicketExpected" => "Yes",
+ "ResumptionExpected" => "Yes",
+ "ExpectedSessionTicketAppData" => "",
+ }
+ }
+);
+our @tests13 = (
+ {
+ "name" => "session-ticket-app-data13",
+ "client" => {
+ "MaxProtocol" => "TLSv1.3",
+ "Options" => "SessionTicket",
+ },
+ "server" => {
+ "Options" => "SessionTicket",
+ "extra" => {
+ "SessionTicketAppData" => "HelloWorld",
+ },
+ },
+ "test" => {
+ "HandshakeMode" => "Resume",
+ "ExpectedResult" => "Success",
+ "SessionTicketExpected" => "Yes",
+ "ResumptionExpected" => "Yes",
+ "ExpectedSessionTicketAppData" => "HelloWorld",
+ }
+ },
+ {
+ "name" => "session-ticket-app-data13",
+ "client" => {
+ "MaxProtocol" => "TLSv1.3",
+ "Options" => "SessionTicket",
+ },
+ "server" => {
+ "Options" => "SessionTicket",
+ },
+ "test" => {
+ "HandshakeMode" => "Resume",
+ "ExpectedResult" => "Success",
+ "SessionTicketExpected" => "Yes",
+ "ResumptionExpected" => "Yes",
+ "ExpectedSessionTicketAppData" => "",
+ }
+ }
+);
+
+our @tests = ();
+push @tests, @tests12 unless disabled("tls1_2");
+push @tests, @tests13 unless disabled("tls1_3")
+ || (disabled("ec") && disabled("dh"));
diff --git a/test/ssl-tests/28-seclevel.cnf b/test/ssl-tests/28-seclevel.cnf
new file mode 100644
index 000000000000..99fa8109c367
--- /dev/null
+++ b/test/ssl-tests/28-seclevel.cnf
@@ -0,0 +1,150 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 6
+
+test-0 = 0-SECLEVEL 3 with default key
+test-1 = 1-SECLEVEL 4 with ED448 key
+test-2 = 2-SECLEVEL 5 server with ED448 key
+test-3 = 3-SECLEVEL 5 client with ED448 key
+test-4 = 4-SECLEVEL 3 with P-384 key, X25519 ECDHE
+test-5 = 5-SECLEVEL 3 with ED448 key, TLSv1.2
+# ===========================================================
+
+[0-SECLEVEL 3 with default key]
+ssl_conf = 0-SECLEVEL 3 with default key-ssl
+
+[0-SECLEVEL 3 with default key-ssl]
+server = 0-SECLEVEL 3 with default key-server
+client = 0-SECLEVEL 3 with default key-client
+
+[0-SECLEVEL 3 with default key-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT:@SECLEVEL=3
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-SECLEVEL 3 with default key-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[1-SECLEVEL 4 with ED448 key]
+ssl_conf = 1-SECLEVEL 4 with ED448 key-ssl
+
+[1-SECLEVEL 4 with ED448 key-ssl]
+server = 1-SECLEVEL 4 with ED448 key-server
+client = 1-SECLEVEL 4 with ED448 key-client
+
+[1-SECLEVEL 4 with ED448 key-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+CipherString = DEFAULT:@SECLEVEL=4
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+
+[1-SECLEVEL 4 with ED448 key-client]
+CipherString = DEFAULT:@SECLEVEL=4
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[2-SECLEVEL 5 server with ED448 key]
+ssl_conf = 2-SECLEVEL 5 server with ED448 key-ssl
+
+[2-SECLEVEL 5 server with ED448 key-ssl]
+server = 2-SECLEVEL 5 server with ED448 key-server
+client = 2-SECLEVEL 5 server with ED448 key-client
+
+[2-SECLEVEL 5 server with ED448 key-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+CipherString = DEFAULT:@SECLEVEL=5
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+
+[2-SECLEVEL 5 server with ED448 key-client]
+CipherString = DEFAULT:@SECLEVEL=4
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[3-SECLEVEL 5 client with ED448 key]
+ssl_conf = 3-SECLEVEL 5 client with ED448 key-ssl
+
+[3-SECLEVEL 5 client with ED448 key-ssl]
+server = 3-SECLEVEL 5 client with ED448 key-server
+client = 3-SECLEVEL 5 client with ED448 key-client
+
+[3-SECLEVEL 5 client with ED448 key-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+CipherString = DEFAULT:@SECLEVEL=4
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+
+[3-SECLEVEL 5 client with ED448 key-client]
+CipherString = DEFAULT:@SECLEVEL=5
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = ServerFail
+
+
+# ===========================================================
+
+[4-SECLEVEL 3 with P-384 key, X25519 ECDHE]
+ssl_conf = 4-SECLEVEL 3 with P-384 key, X25519 ECDHE-ssl
+
+[4-SECLEVEL 3 with P-384 key, X25519 ECDHE-ssl]
+server = 4-SECLEVEL 3 with P-384 key, X25519 ECDHE-server
+client = 4-SECLEVEL 3 with P-384 key, X25519 ECDHE-client
+
+[4-SECLEVEL 3 with P-384 key, X25519 ECDHE-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/p384-server-cert.pem
+CipherString = DEFAULT:@SECLEVEL=3
+Groups = X25519
+PrivateKey = ${ENV::TEST_CERTS_DIR}/p384-server-key.pem
+
+[4-SECLEVEL 3 with P-384 key, X25519 ECDHE-client]
+CipherString = ECDHE:@SECLEVEL=3
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/p384-root.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[5-SECLEVEL 3 with ED448 key, TLSv1.2]
+ssl_conf = 5-SECLEVEL 3 with ED448 key, TLSv1.2-ssl
+
+[5-SECLEVEL 3 with ED448 key, TLSv1.2-ssl]
+server = 5-SECLEVEL 3 with ED448 key, TLSv1.2-server
+client = 5-SECLEVEL 3 with ED448 key, TLSv1.2-client
+
+[5-SECLEVEL 3 with ED448 key, TLSv1.2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/server-ed448-cert.pem
+CipherString = DEFAULT:@SECLEVEL=3
+MaxProtocol = TLSv1.2
+PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem
+
+[5-SECLEVEL 3 with ED448 key, TLSv1.2-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = Success
+
+
diff --git a/test/ssl-tests/28-seclevel.cnf.in b/test/ssl-tests/28-seclevel.cnf.in
new file mode 100644
index 000000000000..945f4599d10e
--- /dev/null
+++ b/test/ssl-tests/28-seclevel.cnf.in
@@ -0,0 +1,85 @@
+# -*- mode: perl; -*-
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+## SSL test configurations
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our $fips_mode;
+
+our @tests = (
+ {
+ name => "SECLEVEL 3 with default key",
+ server => { "CipherString" => "DEFAULT:\@SECLEVEL=3" },
+ client => { },
+ test => { "ExpectedResult" => "ServerFail" },
+ },
+);
+
+our @tests_ec = (
+ {
+ name => "SECLEVEL 4 with ED448 key",
+ server => { "CipherString" => "DEFAULT:\@SECLEVEL=4",
+ "Certificate" => test_pem("server-ed448-cert.pem"),
+ "PrivateKey" => test_pem("server-ed448-key.pem") },
+ client => { "CipherString" => "DEFAULT:\@SECLEVEL=4",
+ "VerifyCAFile" => test_pem("root-ed448-cert.pem") },
+ test => { "ExpectedResult" => "Success" },
+ },
+ {
+ # The Ed448 signature algorithm will not be enabled.
+ # Because of the config order, the certificate is first loaded, and
+ # then the security level is chaged. If you try this with s_server
+ # the order will be reversed and it will instead fail to load the key.
+ name => "SECLEVEL 5 server with ED448 key",
+ server => { "CipherString" => "DEFAULT:\@SECLEVEL=5",
+ "Certificate" => test_pem("server-ed448-cert.pem"),
+ "PrivateKey" => test_pem("server-ed448-key.pem") },
+ client => { "CipherString" => "DEFAULT:\@SECLEVEL=4",
+ "VerifyCAFile" => test_pem("root-ed448-cert.pem") },
+ test => { "ExpectedResult" => "ServerFail" },
+ },
+ {
+ # The client will not sent the Ed448 signature algorithm, so the server
+ # doesn't have a useable signature algorithm for the certificate.
+ name => "SECLEVEL 5 client with ED448 key",
+ server => { "CipherString" => "DEFAULT:\@SECLEVEL=4",
+ "Certificate" => test_pem("server-ed448-cert.pem"),
+ "PrivateKey" => test_pem("server-ed448-key.pem") },
+ client => { "CipherString" => "DEFAULT:\@SECLEVEL=5",
+ "VerifyCAFile" => test_pem("root-ed448-cert.pem") },
+ test => { "ExpectedResult" => "ServerFail" },
+ },
+ {
+ name => "SECLEVEL 3 with P-384 key, X25519 ECDHE",
+ server => { "CipherString" => "DEFAULT:\@SECLEVEL=3",
+ "Certificate" => test_pem("p384-server-cert.pem"),
+ "PrivateKey" => test_pem("p384-server-key.pem"),
+ "Groups" => "X25519" },
+ client => { "CipherString" => "ECDHE:\@SECLEVEL=3",
+ "VerifyCAFile" => test_pem("p384-root.pem") },
+ test => { "ExpectedResult" => "Success" },
+ },
+);
+
+our @tests_tls1_2 = (
+ {
+ name => "SECLEVEL 3 with ED448 key, TLSv1.2",
+ server => { "CipherString" => "DEFAULT:\@SECLEVEL=3",
+ "Certificate" => test_pem("server-ed448-cert.pem"),
+ "PrivateKey" => test_pem("server-ed448-key.pem"),
+ "MaxProtocol" => "TLSv1.2" },
+ client => { "VerifyCAFile" => test_pem("root-ed448-cert.pem") },
+ test => { "ExpectedResult" => "Success" },
+ },
+);
+
+push @tests, @tests_ec unless disabled("ec");
+push @tests, @tests_tls1_2 unless disabled("tls1_2") || disabled("ec");
diff --git a/test/ssl-tests/29-dtls-sctp-label-bug.cnf b/test/ssl-tests/29-dtls-sctp-label-bug.cnf
new file mode 100644
index 000000000000..24f9e04f16d9
--- /dev/null
+++ b/test/ssl-tests/29-dtls-sctp-label-bug.cnf
@@ -0,0 +1,116 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 4
+
+test-0 = 0-SCTPLabelBug-good1
+test-1 = 1-SCTPLabelBug-good2
+test-2 = 2-SCTPLabelBug-bad1
+test-3 = 3-SCTPLabelBug-bad2
+# ===========================================================
+
+[0-SCTPLabelBug-good1]
+ssl_conf = 0-SCTPLabelBug-good1-ssl
+
+[0-SCTPLabelBug-good1-ssl]
+server = 0-SCTPLabelBug-good1-server
+client = 0-SCTPLabelBug-good1-client
+
+[0-SCTPLabelBug-good1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-SCTPLabelBug-good1-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+EnableClientSCTPLabelBug = No
+EnableServerSCTPLabelBug = No
+ExpectedResult = Success
+Method = DTLS
+UseSCTP = Yes
+
+
+# ===========================================================
+
+[1-SCTPLabelBug-good2]
+ssl_conf = 1-SCTPLabelBug-good2-ssl
+
+[1-SCTPLabelBug-good2-ssl]
+server = 1-SCTPLabelBug-good2-server
+client = 1-SCTPLabelBug-good2-client
+
+[1-SCTPLabelBug-good2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-SCTPLabelBug-good2-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+EnableClientSCTPLabelBug = Yes
+EnableServerSCTPLabelBug = Yes
+ExpectedResult = Success
+Method = DTLS
+UseSCTP = Yes
+
+
+# ===========================================================
+
+[2-SCTPLabelBug-bad1]
+ssl_conf = 2-SCTPLabelBug-bad1-ssl
+
+[2-SCTPLabelBug-bad1-ssl]
+server = 2-SCTPLabelBug-bad1-server
+client = 2-SCTPLabelBug-bad1-client
+
+[2-SCTPLabelBug-bad1-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-SCTPLabelBug-bad1-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+EnableClientSCTPLabelBug = Yes
+EnableServerSCTPLabelBug = No
+ExpectedResult = ClientFail
+Method = DTLS
+UseSCTP = Yes
+
+
+# ===========================================================
+
+[3-SCTPLabelBug-bad2]
+ssl_conf = 3-SCTPLabelBug-bad2-ssl
+
+[3-SCTPLabelBug-bad2-ssl]
+server = 3-SCTPLabelBug-bad2-server
+client = 3-SCTPLabelBug-bad2-client
+
+[3-SCTPLabelBug-bad2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-SCTPLabelBug-bad2-client]
+CipherString = DEFAULT
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+EnableClientSCTPLabelBug = No
+EnableServerSCTPLabelBug = Yes
+ExpectedResult = ClientFail
+Method = DTLS
+UseSCTP = Yes
+
+
diff --git a/test/ssl-tests/29-dtls-sctp-label-bug.cnf.in b/test/ssl-tests/29-dtls-sctp-label-bug.cnf.in
new file mode 100644
index 000000000000..f14e68139d3e
--- /dev/null
+++ b/test/ssl-tests/29-dtls-sctp-label-bug.cnf.in
@@ -0,0 +1,67 @@
+# -*- mode: perl; -*-
+# Copyright 2019-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
+
+
+## Test SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG handling
+
+use strict;
+use warnings;
+
+package ssltests;
+use OpenSSL::Test::Utils;
+
+our @tests = (
+ {
+ name => "SCTPLabelBug-good1",
+ server => {},
+ client => {},
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => "Yes",
+ "EnableClientSCTPLabelBug" => "No",
+ "EnableServerSCTPLabelBug" => "No",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "SCTPLabelBug-good2",
+ server => {},
+ client => {},
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => "Yes",
+ "EnableClientSCTPLabelBug" => "Yes",
+ "EnableServerSCTPLabelBug" => "Yes",
+ "ExpectedResult" => "Success"
+ }
+ },
+ {
+ name => "SCTPLabelBug-bad1",
+ server => {},
+ client => {},
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => "Yes",
+ "EnableClientSCTPLabelBug" => "Yes",
+ "EnableServerSCTPLabelBug" => "No",
+ "ExpectedResult" => "ClientFail"
+ }
+ },
+ {
+ name => "SCTPLabelBug-bad2",
+ server => {},
+ client => {},
+ test => {
+ "Method" => "DTLS",
+ "UseSCTP" => "Yes",
+ "EnableClientSCTPLabelBug" => "No",
+ "EnableServerSCTPLabelBug" => "Yes",
+ "ExpectedResult" => "ClientFail"
+ }
+ },
+);
diff --git a/test/ssl-tests/30-extended-master-secret.cnf b/test/ssl-tests/30-extended-master-secret.cnf
new file mode 100644
index 000000000000..9dae431d21f5
--- /dev/null
+++ b/test/ssl-tests/30-extended-master-secret.cnf
@@ -0,0 +1,203 @@
+# Generated with generate_ssl_tests.pl
+
+num_tests = 7
+
+test-0 = 0-disable-extended-master-secret-server-sha
+test-1 = 1-disable-extended-master-secret-client-sha
+test-2 = 2-disable-extended-master-secret-both-sha
+test-3 = 3-disable-extended-master-secret-both-resume
+test-4 = 4-disable-extended-master-secret-server-sha2
+test-5 = 5-disable-extended-master-secret-client-sha2
+test-6 = 6-disable-extended-master-secret-both-sha2
+# ===========================================================
+
+[0-disable-extended-master-secret-server-sha]
+ssl_conf = 0-disable-extended-master-secret-server-sha-ssl
+
+[0-disable-extended-master-secret-server-sha-ssl]
+server = 0-disable-extended-master-secret-server-sha-server
+client = 0-disable-extended-master-secret-server-sha-client
+
+[0-disable-extended-master-secret-server-sha-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -ExtendedMasterSecret
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[0-disable-extended-master-secret-server-sha-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-0]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[1-disable-extended-master-secret-client-sha]
+ssl_conf = 1-disable-extended-master-secret-client-sha-ssl
+
+[1-disable-extended-master-secret-client-sha-ssl]
+server = 1-disable-extended-master-secret-client-sha-server
+client = 1-disable-extended-master-secret-client-sha-client
+
+[1-disable-extended-master-secret-client-sha-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[1-disable-extended-master-secret-client-sha-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+Options = -ExtendedMasterSecret
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-1]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[2-disable-extended-master-secret-both-sha]
+ssl_conf = 2-disable-extended-master-secret-both-sha-ssl
+
+[2-disable-extended-master-secret-both-sha-ssl]
+server = 2-disable-extended-master-secret-both-sha-server
+client = 2-disable-extended-master-secret-both-sha-client
+
+[2-disable-extended-master-secret-both-sha-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -ExtendedMasterSecret
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[2-disable-extended-master-secret-both-sha-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+Options = -ExtendedMasterSecret
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-2]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[3-disable-extended-master-secret-both-resume]
+ssl_conf = 3-disable-extended-master-secret-both-resume-ssl
+
+[3-disable-extended-master-secret-both-resume-ssl]
+server = 3-disable-extended-master-secret-both-resume-server
+client = 3-disable-extended-master-secret-both-resume-client
+resume-server = 3-disable-extended-master-secret-both-resume-resume-server
+resume-client = 3-disable-extended-master-secret-both-resume-resume-client
+
+[3-disable-extended-master-secret-both-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -ExtendedMasterSecret
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-disable-extended-master-secret-both-resume-resume-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[3-disable-extended-master-secret-both-resume-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+Options = -ExtendedMasterSecret
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[3-disable-extended-master-secret-both-resume-resume-client]
+CipherString = AES128-SHA
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-3]
+ExpectedResult = Success
+HandshakeMode = Resume
+
+
+# ===========================================================
+
+[4-disable-extended-master-secret-server-sha2]
+ssl_conf = 4-disable-extended-master-secret-server-sha2-ssl
+
+[4-disable-extended-master-secret-server-sha2-ssl]
+server = 4-disable-extended-master-secret-server-sha2-server
+client = 4-disable-extended-master-secret-server-sha2-client
+
+[4-disable-extended-master-secret-server-sha2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -ExtendedMasterSecret
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[4-disable-extended-master-secret-server-sha2-client]
+CipherString = AES128-SHA256
+MaxProtocol = TLSv1.2
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-4]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[5-disable-extended-master-secret-client-sha2]
+ssl_conf = 5-disable-extended-master-secret-client-sha2-ssl
+
+[5-disable-extended-master-secret-client-sha2-ssl]
+server = 5-disable-extended-master-secret-client-sha2-server
+client = 5-disable-extended-master-secret-client-sha2-client
+
+[5-disable-extended-master-secret-client-sha2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[5-disable-extended-master-secret-client-sha2-client]
+CipherString = AES128-SHA256
+MaxProtocol = TLSv1.2
+Options = -ExtendedMasterSecret
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-5]
+ExpectedResult = Success
+
+
+# ===========================================================
+
+[6-disable-extended-master-secret-both-sha2]
+ssl_conf = 6-disable-extended-master-secret-both-sha2-ssl
+
+[6-disable-extended-master-secret-both-sha2-ssl]
+server = 6-disable-extended-master-secret-both-sha2-server
+client = 6-disable-extended-master-secret-both-sha2-client
+
+[6-disable-extended-master-secret-both-sha2-server]
+Certificate = ${ENV::TEST_CERTS_DIR}/servercert.pem
+CipherString = DEFAULT
+Options = -ExtendedMasterSecret
+PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem
+
+[6-disable-extended-master-secret-both-sha2-client]
+CipherString = AES128-SHA256
+MaxProtocol = TLSv1.2
+Options = -ExtendedMasterSecret
+VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem
+VerifyMode = Peer
+
+[test-6]
+ExpectedResult = Success
+
+
diff --git a/test/ssl-tests/30-extended-master-secret.cnf.in b/test/ssl-tests/30-extended-master-secret.cnf.in
new file mode 100644
index 000000000000..281718e6b550
--- /dev/null
+++ b/test/ssl-tests/30-extended-master-secret.cnf.in
@@ -0,0 +1,122 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+
+## SSL test configurations
+
+package ssltests;
+
+use OpenSSL::Test::Utils;
+
+our @tests = ();
+
+my @tests_tls1_2 = (
+ {
+ name => "disable-extended-master-secret-server-sha",
+ server => {
+ "Options" => "-ExtendedMasterSecret",
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-extended-master-secret-client-sha",
+ server => {
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ "Options" => "-ExtendedMasterSecret",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-extended-master-secret-both-sha",
+ server => {
+ "Options" => "-ExtendedMasterSecret",
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ "Options" => "-ExtendedMasterSecret",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-extended-master-secret-both-resume",
+ server => {
+ "Options" => "-ExtendedMasterSecret",
+ },
+ resume_server => {
+ },
+ client => {
+ "CipherString" => "AES128-SHA",
+ "Options" => "-ExtendedMasterSecret",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ resume_client => {
+ "CipherString" => "AES128-SHA",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "HandshakeMode" => "Resume",
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-extended-master-secret-server-sha2",
+ server => {
+ "Options" => "-ExtendedMasterSecret",
+ },
+ client => {
+ "CipherString" => "AES128-SHA256",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-extended-master-secret-client-sha2",
+ server => {
+ },
+ client => {
+ "CipherString" => "AES128-SHA256",
+ "Options" => "-ExtendedMasterSecret",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+ {
+ name => "disable-extended-master-secret-both-sha2",
+ server => {
+ "Options" => "-ExtendedMasterSecret",
+ },
+ client => {
+ "CipherString" => "AES128-SHA256",
+ "Options" => "-ExtendedMasterSecret",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ test => {
+ "ExpectedResult" => "Success",
+ },
+ },
+);
+
+push @tests, @tests_tls1_2 unless disabled("tls1_2");
diff --git a/test/ssl-tests/protocol_version.pm b/test/ssl-tests/protocol_version.pm
new file mode 100644
index 000000000000..4e4ce365d6e6
--- /dev/null
+++ b/test/ssl-tests/protocol_version.pm
@@ -0,0 +1,391 @@
+# -*- mode: perl; -*-
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+## Test version negotiation
+
+package ssltests;
+
+use strict;
+use warnings;
+
+use List::Util qw/max min/;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils qw/anydisabled alldisabled disabled/;
+setup("no_test_here");
+
+my @tls_protocols = ("SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3");
+my @tls_protocols_fips = ("TLSv1.2", "TLSv1.3");
+# undef stands for "no limit".
+my @min_tls_protocols = (undef, "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3");
+my @min_tls_protocols_fips = (undef, "TLSv1.2", "TLSv1.3");
+my @max_tls_protocols = ("SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3", undef);
+my @max_tls_protocols_fips = ("TLSv1.2", "TLSv1.3", undef);
+
+my @is_tls_disabled = anydisabled("ssl3", "tls1", "tls1_1", "tls1_2", "tls1_3");
+my @is_tls_disabled_fips = anydisabled("tls1_2", "tls1_3");
+
+my $min_tls_enabled; my $max_tls_enabled;
+my $min_tls_enabled_fips; my $max_tls_enabled_fips;
+
+# Protocol configuration works in cascades, i.e.,
+# $no_tls1_1 disables TLSv1.1 and below.
+#
+# $min_enabled and $max_enabled will be correct if there is at least one
+# protocol enabled.
+
+sub min_prot_enabled {
+ my $protref = shift;
+ my $disabledref = shift;
+ my @protocols = @{$protref};
+ my @is_disabled = @{$disabledref};
+ my $min_enabled;
+
+ foreach my $i (0..$#protocols) {
+ if (!$is_disabled[$i]) {
+ $min_enabled = $i;
+ last;
+ }
+ }
+ return $min_enabled;
+}
+
+sub max_prot_enabled {
+ my $protref = shift;
+ my $disabledref = shift;
+ my @protocols = @{$protref};
+ my @is_disabled = @{$disabledref};
+ my $max_enabled;
+
+ foreach my $i (0..$#protocols) {
+ if (!$is_disabled[$i]
+ && ($protocols[$i] ne "TLSv1.3"
+ || !disabled("ec")
+ || !disabled("dh"))) {
+ $max_enabled = $i;
+ }
+ }
+ return $max_enabled;
+}
+
+$min_tls_enabled = min_prot_enabled(\@tls_protocols, \@is_tls_disabled);
+$max_tls_enabled = max_prot_enabled(\@tls_protocols, \@is_tls_disabled);
+$min_tls_enabled_fips = min_prot_enabled(\@tls_protocols_fips, \@is_tls_disabled_fips);
+$max_tls_enabled_fips = max_prot_enabled(\@tls_protocols_fips, \@is_tls_disabled_fips);
+
+
+my @dtls_protocols = ("DTLSv1", "DTLSv1.2");
+my @dtls_protocols_fips = ("DTLSv1.2");
+# undef stands for "no limit".
+my @min_dtls_protocols = (undef, "DTLSv1", "DTLSv1.2");
+my @min_dtls_protocols_fips = (undef, "DTLSv1.2");
+my @max_dtls_protocols = ("DTLSv1", "DTLSv1.2", undef);
+my @max_dtls_protocols_fips = ("DTLSv1.2", undef);
+
+my @is_dtls_disabled = anydisabled("dtls1", "dtls1_2");
+my @is_dtls_disabled_fips = anydisabled("dtls1_2");
+
+my $min_dtls_enabled; my $max_dtls_enabled;
+my $min_dtls_enabled_fips; my $max_dtls_enabled_fips;
+
+# $min_enabled and $max_enabled will be correct if there is at least one
+# protocol enabled.
+$min_dtls_enabled = min_prot_enabled(\@dtls_protocols, \@is_dtls_disabled);
+$max_dtls_enabled = max_prot_enabled(\@dtls_protocols, \@is_dtls_disabled);
+$min_dtls_enabled_fips = min_prot_enabled(\@dtls_protocols_fips, \@is_dtls_disabled_fips);
+$max_dtls_enabled_fips = max_prot_enabled(\@dtls_protocols_fips, \@is_dtls_disabled_fips);
+
+sub no_tests {
+ my ($dtls, $fips) = @_;
+ if ($dtls && $fips) {
+ return disabled("dtls1_2");
+ }
+ return $dtls ? alldisabled("dtls1", "dtls1_2") :
+ alldisabled("ssl3", "tls1", "tls1_1", "tls1_2", "tls1_3");
+}
+
+sub generate_version_tests {
+ my $method = shift;
+ my $fips = shift;
+
+ my $dtls = $method eq "DTLS";
+ # Don't write the redundant "Method = TLS" into the configuration.
+ undef $method if !$dtls;
+
+ my @protocols;
+ my @min_protocols;
+ my @max_protocols;
+ my $min_enabled;
+ my $max_enabled;
+ if ($fips) {
+ @protocols = $dtls ? @dtls_protocols_fips : @tls_protocols_fips;
+ @min_protocols = $dtls ? @min_dtls_protocols_fips : @min_tls_protocols_fips;
+ @max_protocols = $dtls ? @max_dtls_protocols_fips : @max_tls_protocols_fips;
+ $min_enabled = $dtls ? $min_dtls_enabled_fips : $min_tls_enabled_fips;
+ $max_enabled = $dtls ? $max_dtls_enabled_fips : $max_tls_enabled_fips;
+ } else {
+ @protocols = $dtls ? @dtls_protocols : @tls_protocols;
+ @min_protocols = $dtls ? @min_dtls_protocols : @min_tls_protocols;
+ @max_protocols = $dtls ? @max_dtls_protocols : @max_tls_protocols;
+ $min_enabled = $dtls ? $min_dtls_enabled : $min_tls_enabled;
+ $max_enabled = $dtls ? $max_dtls_enabled : $max_tls_enabled;
+ }
+
+ if (no_tests($dtls, $fips)) {
+ return;
+ }
+
+ my @tests = ();
+
+ for (my $sctp = 0; $sctp < ($dtls && !disabled("sctp") ? 2 : 1); $sctp++) {
+ foreach my $c_min (0..$#min_protocols) {
+ my $c_max_min = $c_min == 0 ? 0 : $c_min - 1;
+ foreach my $c_max ($c_max_min..$#max_protocols) {
+ foreach my $s_min (0..$#min_protocols) {
+ my $s_max_min = $s_min == 0 ? 0 : $s_min - 1;
+ foreach my $s_max ($s_max_min..$#max_protocols) {
+ my ($result, $protocol) =
+ expected_result($c_min, $c_max, $s_min, $s_max,
+ $min_enabled, $max_enabled,
+ \@protocols);
+ push @tests, {
+ "name" => "version-negotiation",
+ "client" => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $min_protocols[$c_min],
+ "MaxProtocol" => $max_protocols[$c_max],
+ },
+ "server" => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $min_protocols[$s_min],
+ "MaxProtocol" => $max_protocols[$s_max],
+ },
+ "test" => {
+ "ExpectedResult" => $result,
+ "ExpectedProtocol" => $protocol,
+ "Method" => $method,
+ }
+ };
+ $tests[-1]{"test"}{"UseSCTP"} = "Yes" if $sctp;
+ }
+ }
+ }
+ }
+ }
+ return @tests
+ if disabled("tls1_3")
+ || disabled("tls1_2")
+ || (disabled("ec") && disabled("dh"))
+ || $dtls;
+
+ #Add some version/ciphersuite sanity check tests
+ push @tests, {
+ "name" => "ciphersuite-sanity-check-client",
+ "client" => {
+ #Offering only <=TLSv1.2 ciphersuites with TLSv1.3 should fail
+ "CipherString" => "AES128-SHA",
+ "Ciphersuites" => "",
+ },
+ "server" => {
+ "MaxProtocol" => "TLSv1.2"
+ },
+ "test" => {
+ "ExpectedResult" => "ClientFail",
+ }
+ };
+ push @tests, {
+ "name" => "ciphersuite-sanity-check-server",
+ "client" => {
+ "CipherString" => "AES128-SHA",
+ "MaxProtocol" => "TLSv1.2"
+ },
+ "server" => {
+ #Allowing only <=TLSv1.2 ciphersuites with TLSv1.3 should fail
+ "CipherString" => "AES128-SHA",
+ "Ciphersuites" => "",
+ },
+ "test" => {
+ "ExpectedResult" => "ServerFail",
+ }
+ };
+
+ return @tests;
+}
+
+sub generate_resumption_tests {
+ my $method = shift;
+ my $fips = shift;
+
+ my $dtls = $method eq "DTLS";
+ # Don't write the redundant "Method = TLS" into the configuration.
+ undef $method if !$dtls;
+
+ my @protocols;
+ my $min_enabled;
+ my $max_enabled;
+
+ if ($fips) {
+ @protocols = $dtls ? @dtls_protocols_fips : @tls_protocols_fips;
+ $min_enabled = $dtls ? $min_dtls_enabled_fips : $min_tls_enabled_fips;
+ $max_enabled = $dtls ? $max_dtls_enabled_fips : $max_tls_enabled_fips;
+ } else {
+ @protocols = $dtls ? @dtls_protocols : @tls_protocols;
+ $min_enabled = $dtls ? $min_dtls_enabled : $min_tls_enabled;
+ $max_enabled = $dtls ? $max_dtls_enabled : $max_tls_enabled;
+ }
+
+ if (no_tests($dtls)) {
+ return;
+ }
+
+ my @server_tests = ();
+ my @client_tests = ();
+
+ # Obtain the first session against a fixed-version server/client.
+ foreach my $original_protocol($min_enabled..$max_enabled) {
+ # Upgrade or downgrade the server/client max version support and test
+ # that it upgrades, downgrades or resumes the session as well.
+ foreach my $resume_protocol($min_enabled..$max_enabled) {
+ my $resumption_expected;
+ # We should only resume on exact version match.
+ if ($original_protocol eq $resume_protocol) {
+ $resumption_expected = "Yes";
+ } else {
+ $resumption_expected = "No";
+ }
+
+ for (my $sctp = 0; $sctp < ($dtls && !disabled("sctp") ? 2 : 1);
+ $sctp++) {
+ foreach my $ticket ("SessionTicket", "-SessionTicket") {
+ # Client is flexible, server upgrades/downgrades.
+ push @server_tests, {
+ "name" => "resumption",
+ "client" => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ },
+ "server" => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocols[$original_protocol],
+ "MaxProtocol" => $protocols[$original_protocol],
+ "Options" => $ticket,
+ },
+ "resume_server" => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MaxProtocol" => $protocols[$resume_protocol],
+ "Options" => $ticket,
+ },
+ "test" => {
+ "ExpectedProtocol" => $protocols[$resume_protocol],
+ "Method" => $method,
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => $resumption_expected,
+ }
+ };
+ $server_tests[-1]{"test"}{"UseSCTP"} = "Yes" if $sctp;
+ # Server is flexible, client upgrades/downgrades.
+ push @client_tests, {
+ "name" => "resumption",
+ "client" => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MinProtocol" => $protocols[$original_protocol],
+ "MaxProtocol" => $protocols[$original_protocol],
+ },
+ "server" => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "Options" => $ticket,
+ },
+ "resume_client" => {
+ "CipherString" => "DEFAULT:\@SECLEVEL=0",
+ "MaxProtocol" => $protocols[$resume_protocol],
+ },
+ "test" => {
+ "ExpectedProtocol" => $protocols[$resume_protocol],
+ "Method" => $method,
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => $resumption_expected,
+ }
+ };
+ $client_tests[-1]{"test"}{"UseSCTP"} = "Yes" if $sctp;
+ }
+ }
+ }
+ }
+
+ if (!disabled("tls1_3") && (!disabled("ec") || !disabled("dh")) && !$dtls) {
+ push @client_tests, {
+ "name" => "resumption-with-hrr",
+ "client" => {
+ },
+ "server" => {
+ "Curves" => disabled("ec") ? "ffdhe3072" : "P-256"
+ },
+ "resume_client" => {
+ },
+ "test" => {
+ "ExpectedProtocol" => "TLSv1.3",
+ "Method" => "TLS",
+ "HandshakeMode" => "Resume",
+ "ResumptionExpected" => "Yes",
+ }
+ };
+ }
+
+ return (@server_tests, @client_tests);
+}
+
+sub expected_result {
+ my ($c_min, $c_max, $s_min, $s_max, $min_enabled, $max_enabled,
+ $protocols) = @_;
+ my @prots = @$protocols;
+
+ my $orig_c_max = $c_max;
+ # Adjust for "undef" (no limit).
+ $c_min = $c_min == 0 ? 0 : $c_min - 1;
+ $c_max = $c_max == scalar @$protocols ? $c_max - 1 : $c_max;
+ $s_min = $s_min == 0 ? 0 : $s_min - 1;
+ $s_max = $s_max == scalar @$protocols ? $s_max - 1 : $s_max;
+
+ # We now have at least one protocol enabled, so $min_enabled and
+ # $max_enabled are well-defined.
+ $c_min = max $c_min, $min_enabled;
+ $s_min = max $s_min, $min_enabled;
+ $c_max = min $c_max, $max_enabled;
+ $s_max = min $s_max, $max_enabled;
+
+ if ($c_min > $c_max
+ || ($orig_c_max != scalar @$protocols
+ && $prots[$orig_c_max] eq "TLSv1.3"
+ && $c_max != $orig_c_max
+ && !disabled("tls1_3"))) {
+ # Client should fail to even send a hello.
+ return ("ClientFail", undef);
+ } elsif ($s_min > $s_max) {
+ # Server has no protocols, should always fail.
+ return ("ServerFail", undef);
+ } elsif ($s_min > $c_max) {
+ # Server doesn't support the client range.
+ return ("ServerFail", undef);
+ } elsif ($c_min > $s_max) {
+ if ($prots[$c_max] eq "TLSv1.3") {
+ # Client will have sent supported_versions, so server will know
+ # that there are no overlapping versions.
+ return ("ServerFail", undef);
+ } else {
+ # Server will try with a version that is lower than the lowest
+ # supported client version.
+ return ("ClientFail", undef);
+ }
+ } else {
+ # Server and client ranges overlap.
+ my $max_common = $s_max < $c_max ? $s_max : $c_max;
+ return ("Success", $protocols->[$max_common]);
+ }
+}
+
+1;
diff --git a/test/ssl-tests/ssltests_base.pm b/test/ssl-tests/ssltests_base.pm
new file mode 100644
index 000000000000..995ec98bd20b
--- /dev/null
+++ b/test/ssl-tests/ssltests_base.pm
@@ -0,0 +1,33 @@
+# -*- mode: perl; -*-
+# Copyright 2016-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
+
+## SSL test configurations
+
+package ssltests;
+
+sub test_pem
+{
+ my ($file) = @_;
+ my $dir_sep = $^O ne "VMS" ? "/" : "";
+ return "\${ENV::TEST_CERTS_DIR}" . $dir_sep . $file,
+}
+
+our $fips_mode = 0;
+our $no_deflt_libctx = 0;
+
+our %base_server = (
+ "Certificate" => test_pem("servercert.pem"),
+ "PrivateKey" => test_pem("serverkey.pem"),
+ "CipherString" => "DEFAULT",
+);
+
+our %base_client = (
+ "VerifyCAFile" => test_pem("rootcert.pem"),
+ "VerifyMode" => "Peer",
+ "CipherString" => "DEFAULT",
+);
diff --git a/test/ssl_cert_table_internal_test.c b/test/ssl_cert_table_internal_test.c
new file mode 100644
index 000000000000..1dc09c013ccf
--- /dev/null
+++ b/test/ssl_cert_table_internal_test.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Internal tests for the x509 and x509v3 modules */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/ssl.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+#include "../ssl/ssl_local.h"
+#include "../ssl/ssl_cert_table.h"
+
+#define test_cert_table(nid, amask, idx) \
+ do_test_cert_table(nid, amask, idx, #idx)
+
+static int do_test_cert_table(int nid, uint32_t amask, size_t idx,
+ const char *idxname)
+{
+ const SSL_CERT_LOOKUP *clu = &ssl_cert_info[idx];
+
+ if (clu->nid == nid && clu->amask == amask)
+ return 1;
+
+ TEST_error("Invalid table entry for certificate type %s, index %zu",
+ idxname, idx);
+ if (clu->nid != nid)
+ TEST_note("Expected %s, got %s\n", OBJ_nid2sn(nid),
+ OBJ_nid2sn(clu->nid));
+ if (clu->amask != amask)
+ TEST_note("Expected auth mask 0x%x, got 0x%x\n", amask, clu->amask);
+ return 0;
+}
+
+/* Sanity check of ssl_cert_table */
+
+static int test_ssl_cert_table(void)
+{
+ return TEST_size_t_eq(OSSL_NELEM(ssl_cert_info), SSL_PKEY_NUM)
+ && test_cert_table(EVP_PKEY_RSA, SSL_aRSA, SSL_PKEY_RSA)
+ && test_cert_table(EVP_PKEY_DSA, SSL_aDSS, SSL_PKEY_DSA_SIGN)
+ && test_cert_table(EVP_PKEY_EC, SSL_aECDSA, SSL_PKEY_ECC)
+ && test_cert_table(NID_id_GostR3410_2001, SSL_aGOST01,
+ SSL_PKEY_GOST01)
+ && test_cert_table(NID_id_GostR3410_2012_256, SSL_aGOST12,
+ SSL_PKEY_GOST12_256)
+ && test_cert_table(NID_id_GostR3410_2012_512, SSL_aGOST12,
+ SSL_PKEY_GOST12_512)
+ && test_cert_table(EVP_PKEY_ED25519, SSL_aECDSA, SSL_PKEY_ED25519)
+ && test_cert_table(EVP_PKEY_ED448, SSL_aECDSA, SSL_PKEY_ED448);
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_ssl_cert_table);
+ return 1;
+}
diff --git a/test/ssl_ctx_test.c b/test/ssl_ctx_test.c
new file mode 100644
index 000000000000..e461d7259590
--- /dev/null
+++ b/test/ssl_ctx_test.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2018-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 "testutil.h"
+#include <openssl/ssl.h>
+
+typedef struct {
+ int min_version;
+ int max_version;
+ int min_ok;
+ int max_ok;
+ int expected_min;
+ int expected_max;
+} version_test;
+
+static const version_test version_testdata[] = {
+ /* min max ok expected min expected max */
+ {0, 0, 1, 1, 0, 0},
+ {TLS1_VERSION, TLS1_2_VERSION, 1, 1, TLS1_VERSION, TLS1_2_VERSION},
+ {TLS1_2_VERSION, TLS1_2_VERSION, 1, 1, TLS1_2_VERSION, TLS1_2_VERSION},
+ {TLS1_2_VERSION, TLS1_1_VERSION, 1, 1, TLS1_2_VERSION, TLS1_1_VERSION},
+ {7, 42, 0, 0, 0, 0},
+};
+
+static int test_set_min_max_version(int idx_tst)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *ssl = NULL;
+ int testresult = 0;
+ version_test t = version_testdata[idx_tst];
+
+ ctx = SSL_CTX_new(TLS_server_method());
+ if (ctx == NULL)
+ goto end;
+
+ ssl = SSL_new(ctx);
+ if (ssl == NULL)
+ goto end;
+
+ if (!TEST_int_eq(SSL_CTX_set_min_proto_version(ctx, t.min_version), t.min_ok))
+ goto end;
+ if (!TEST_int_eq(SSL_CTX_set_max_proto_version(ctx, t.max_version), t.max_ok))
+ goto end;
+ if (!TEST_int_eq(SSL_CTX_get_min_proto_version(ctx), t.expected_min))
+ goto end;
+ if (!TEST_int_eq(SSL_CTX_get_max_proto_version(ctx), t.expected_max))
+ goto end;
+
+ if (!TEST_int_eq(SSL_set_min_proto_version(ssl, t.min_version), t.min_ok))
+ goto end;
+ if (!TEST_int_eq(SSL_set_max_proto_version(ssl, t.max_version), t.max_ok))
+ goto end;
+ if (!TEST_int_eq(SSL_get_min_proto_version(ssl), t.expected_min))
+ goto end;
+ if (!TEST_int_eq(SSL_get_max_proto_version(ssl), t.expected_max))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(ssl);
+ SSL_CTX_free(ctx);
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_set_min_max_version, sizeof(version_testdata) / sizeof(version_test));
+ return 1;
+}
diff --git a/test/ssl_old_test.c b/test/ssl_old_test.c
new file mode 100644
index 000000000000..9830c35c9eb5
--- /dev/null
+++ b/test/ssl_old_test.c
@@ -0,0 +1,3003 @@
+/*
+ * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
+ * Copyright 2005 Nokia. 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"
+
+/* Or gethostname won't be declared properly on Linux and GNU platforms. */
+#ifndef _BSD_SOURCE
+# define _BSD_SOURCE 1
+#endif
+#ifndef _DEFAULT_SOURCE
+# define _DEFAULT_SOURCE 1
+#endif
+
+#include <assert.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "internal/nelem.h"
+
+#ifdef OPENSSL_SYS_VMS
+/*
+ * Or isascii won't be declared properly on VMS (at least with DECompHP C).
+ */
+# define _XOPEN_SOURCE 500
+#endif
+
+#include <ctype.h>
+
+#include <openssl/bio.h>
+#include <openssl/crypto.h>
+#include <openssl/evp.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include <openssl/rsa.h>
+#ifndef OPENSSL_NO_DSA
+# include <openssl/dsa.h>
+#endif
+#include <openssl/bn.h>
+#ifndef OPENSSL_NO_CT
+# include <openssl/ct.h>
+#endif
+#include <openssl/provider.h>
+#include "testutil.h"
+
+/*
+ * Or gethostname won't be declared properly
+ * on Compaq platforms (at least with DEC C).
+ * Do not try to put it earlier, or IPv6 includes
+ * get screwed...
+ */
+#define _XOPEN_SOURCE_EXTENDED 1
+
+#ifdef OPENSSL_SYS_WINDOWS
+# include <winsock.h>
+#else
+# include <unistd.h>
+#endif
+
+#include "helpers/predefined_dhparams.h"
+
+static SSL_CTX *s_ctx = NULL;
+static SSL_CTX *s_ctx2 = NULL;
+
+/*
+ * There is really no standard for this, so let's assign something
+ * only for this test
+ */
+#define COMP_ZLIB 1
+
+static int verify_callback(int ok, X509_STORE_CTX *ctx);
+static int app_verify_callback(X509_STORE_CTX *ctx, void *arg);
+#define APP_CALLBACK_STRING "Test Callback Argument"
+struct app_verify_arg {
+ char *string;
+ int app_verify;
+};
+
+static char *psk_key = NULL; /* by default PSK is not used */
+#ifndef OPENSSL_NO_PSK
+static unsigned int psk_client_callback(SSL *ssl, const char *hint,
+ char *identity,
+ unsigned int max_identity_len,
+ unsigned char *psk,
+ unsigned int max_psk_len);
+static unsigned int psk_server_callback(SSL *ssl, const char *identity,
+ unsigned char *psk,
+ unsigned int max_psk_len);
+#endif
+
+static BIO *bio_stdout = NULL;
+
+#ifndef OPENSSL_NO_NEXTPROTONEG
+/* Note that this code assumes that this is only a one element list: */
+static const char NEXT_PROTO_STRING[] = "\x09testproto";
+static int npn_client = 0;
+static int npn_server = 0;
+static int npn_server_reject = 0;
+
+static int cb_client_npn(SSL *s, unsigned char **out, unsigned char *outlen,
+ const unsigned char *in, unsigned int inlen,
+ void *arg)
+{
+ /*
+ * This callback only returns the protocol string, rather than a length
+ * prefixed set. We assume that NEXT_PROTO_STRING is a one element list
+ * and remove the first byte to chop off the length prefix.
+ */
+ *out = (unsigned char *)NEXT_PROTO_STRING + 1;
+ *outlen = sizeof(NEXT_PROTO_STRING) - 2;
+ return SSL_TLSEXT_ERR_OK;
+}
+
+static int cb_server_npn(SSL *s, const unsigned char **data,
+ unsigned int *len, void *arg)
+{
+ *data = (const unsigned char *)NEXT_PROTO_STRING;
+ *len = sizeof(NEXT_PROTO_STRING) - 1;
+ return SSL_TLSEXT_ERR_OK;
+}
+
+static int cb_server_rejects_npn(SSL *s, const unsigned char **data,
+ unsigned int *len, void *arg)
+{
+ return SSL_TLSEXT_ERR_NOACK;
+}
+
+static int verify_npn(SSL *client, SSL *server)
+{
+ const unsigned char *client_s;
+ unsigned client_len;
+ const unsigned char *server_s;
+ unsigned server_len;
+
+ SSL_get0_next_proto_negotiated(client, &client_s, &client_len);
+ SSL_get0_next_proto_negotiated(server, &server_s, &server_len);
+
+ if (client_len) {
+ BIO_printf(bio_stdout, "Client NPN: ");
+ BIO_write(bio_stdout, client_s, client_len);
+ BIO_printf(bio_stdout, "\n");
+ }
+
+ if (server_len) {
+ BIO_printf(bio_stdout, "Server NPN: ");
+ BIO_write(bio_stdout, server_s, server_len);
+ BIO_printf(bio_stdout, "\n");
+ }
+
+ /*
+ * If an NPN string was returned, it must be the protocol that we
+ * expected to negotiate.
+ */
+ if (client_len && (client_len != sizeof(NEXT_PROTO_STRING) - 2 ||
+ memcmp(client_s, NEXT_PROTO_STRING + 1, client_len)))
+ return -1;
+ if (server_len && (server_len != sizeof(NEXT_PROTO_STRING) - 2 ||
+ memcmp(server_s, NEXT_PROTO_STRING + 1, server_len)))
+ return -1;
+
+ if (!npn_client && client_len)
+ return -1;
+ if (!npn_server && server_len)
+ return -1;
+ if (npn_server_reject && server_len)
+ return -1;
+ if (npn_client && npn_server && (!client_len || !server_len))
+ return -1;
+
+ return 0;
+}
+#endif
+
+static const char *alpn_client;
+static char *alpn_server;
+static char *alpn_server2;
+static const char *alpn_expected;
+static unsigned char *alpn_selected;
+static const char *server_min_proto;
+static const char *server_max_proto;
+static const char *client_min_proto;
+static const char *client_max_proto;
+static const char *should_negotiate;
+static const char *sn_client;
+static const char *sn_server1;
+static const char *sn_server2;
+static int sn_expect = 0;
+static const char *server_sess_out;
+static const char *server_sess_in;
+static const char *client_sess_out;
+static const char *client_sess_in;
+static SSL_SESSION *server_sess;
+static SSL_SESSION *client_sess;
+
+static int servername_cb(SSL *s, int *ad, void *arg)
+{
+ const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);
+ if (sn_server2 == NULL) {
+ BIO_printf(bio_stdout, "Servername 2 is NULL\n");
+ return SSL_TLSEXT_ERR_NOACK;
+ }
+
+ if (servername) {
+ if (s_ctx2 != NULL && sn_server2 != NULL &&
+ !OPENSSL_strcasecmp(servername, sn_server2)) {
+ BIO_printf(bio_stdout, "Switching server context.\n");
+ SSL_set_SSL_CTX(s, s_ctx2);
+ }
+ }
+ return SSL_TLSEXT_ERR_OK;
+}
+static int verify_servername(SSL *client, SSL *server)
+{
+ /* just need to see if sn_context is what we expect */
+ SSL_CTX* ctx = SSL_get_SSL_CTX(server);
+ if (sn_expect == 0)
+ return 0;
+ if (sn_expect == 1 && ctx == s_ctx)
+ return 0;
+ if (sn_expect == 2 && ctx == s_ctx2)
+ return 0;
+ BIO_printf(bio_stdout, "Servername: expected context %d\n", sn_expect);
+ if (ctx == s_ctx2)
+ BIO_printf(bio_stdout, "Servername: context is 2\n");
+ else if (ctx == s_ctx)
+ BIO_printf(bio_stdout, "Servername: context is 1\n");
+ else
+ BIO_printf(bio_stdout, "Servername: context is unknown\n");
+ return -1;
+}
+
+
+/*-
+ * next_protos_parse parses a comma separated list of strings into a string
+ * in a format suitable for passing to SSL_CTX_set_next_protos_advertised.
+ * outlen: (output) set to the length of the resulting buffer on success.
+ * in: a NUL terminated string like "abc,def,ghi"
+ *
+ * returns: a malloced buffer or NULL on failure.
+ */
+static unsigned char *next_protos_parse(size_t *outlen,
+ const char *in)
+{
+ size_t len;
+ unsigned char *out;
+ size_t i, start = 0;
+
+ len = strlen(in);
+ if (len >= 65535)
+ return NULL;
+
+ out = OPENSSL_malloc(strlen(in) + 1);
+ if (!out)
+ return NULL;
+
+ for (i = 0; i <= len; ++i) {
+ if (i == len || in[i] == ',') {
+ if (i - start > 255) {
+ OPENSSL_free(out);
+ return NULL;
+ }
+ out[start] = (unsigned char)(i - start);
+ start = i + 1;
+ } else
+ out[i + 1] = in[i];
+ }
+
+ *outlen = len + 1;
+ return out;
+}
+
+static int cb_server_alpn(SSL *s, const unsigned char **out,
+ unsigned char *outlen, const unsigned char *in,
+ unsigned int inlen, void *arg)
+{
+ unsigned char *protos;
+ size_t protos_len;
+ char* alpn_str = arg;
+
+ protos = next_protos_parse(&protos_len, alpn_str);
+ if (protos == NULL) {
+ fprintf(stderr, "failed to parser ALPN server protocol string: %s\n",
+ alpn_str);
+ abort();
+ }
+
+ if (SSL_select_next_proto
+ ((unsigned char **)out, outlen, protos, protos_len, in,
+ inlen) != OPENSSL_NPN_NEGOTIATED) {
+ OPENSSL_free(protos);
+ return SSL_TLSEXT_ERR_NOACK;
+ }
+
+ /*
+ * Make a copy of the selected protocol which will be freed in
+ * verify_alpn.
+ */
+ alpn_selected = OPENSSL_malloc(*outlen);
+ if (alpn_selected == NULL) {
+ fprintf(stderr, "failed to allocate memory\n");
+ OPENSSL_free(protos);
+ abort();
+ }
+ memcpy(alpn_selected, *out, *outlen);
+ *out = alpn_selected;
+
+ OPENSSL_free(protos);
+ return SSL_TLSEXT_ERR_OK;
+}
+
+static int verify_alpn(SSL *client, SSL *server)
+{
+ const unsigned char *client_proto, *server_proto;
+ unsigned int client_proto_len = 0, server_proto_len = 0;
+ SSL_get0_alpn_selected(client, &client_proto, &client_proto_len);
+ SSL_get0_alpn_selected(server, &server_proto, &server_proto_len);
+
+ OPENSSL_free(alpn_selected);
+ alpn_selected = NULL;
+
+ if (client_proto_len != server_proto_len) {
+ BIO_printf(bio_stdout, "ALPN selected protocols differ!\n");
+ goto err;
+ }
+
+ if (client_proto != NULL &&
+ memcmp(client_proto, server_proto, client_proto_len) != 0) {
+ BIO_printf(bio_stdout, "ALPN selected protocols differ!\n");
+ goto err;
+ }
+
+ if (client_proto_len > 0 && alpn_expected == NULL) {
+ BIO_printf(bio_stdout, "ALPN unexpectedly negotiated\n");
+ goto err;
+ }
+
+ if (alpn_expected != NULL &&
+ (client_proto_len != strlen(alpn_expected) ||
+ memcmp(client_proto, alpn_expected, client_proto_len) != 0)) {
+ BIO_printf(bio_stdout,
+ "ALPN selected protocols not equal to expected protocol: %s\n",
+ alpn_expected);
+ goto err;
+ }
+
+ return 0;
+
+ err:
+ BIO_printf(bio_stdout, "ALPN results: client: '");
+ BIO_write(bio_stdout, client_proto, client_proto_len);
+ BIO_printf(bio_stdout, "', server: '");
+ BIO_write(bio_stdout, server_proto, server_proto_len);
+ BIO_printf(bio_stdout, "'\n");
+ BIO_printf(bio_stdout, "ALPN configured: client: '%s', server: '",
+ alpn_client);
+ if (SSL_get_SSL_CTX(server) == s_ctx2) {
+ BIO_printf(bio_stdout, "%s'\n",
+ alpn_server2);
+ } else {
+ BIO_printf(bio_stdout, "%s'\n",
+ alpn_server);
+ }
+ return -1;
+}
+
+/*
+ * WARNING : below extension types are *NOT* IETF assigned, and could
+ * conflict if these types are reassigned and handled specially by OpenSSL
+ * in the future
+ */
+#define TACK_EXT_TYPE 62208
+#define CUSTOM_EXT_TYPE_0 1000
+#define CUSTOM_EXT_TYPE_1 1001
+#define CUSTOM_EXT_TYPE_2 1002
+#define CUSTOM_EXT_TYPE_3 1003
+
+static const char custom_ext_cli_string[] = "abc";
+static const char custom_ext_srv_string[] = "defg";
+
+/* These set from cmdline */
+static char *serverinfo_file = NULL;
+static int serverinfo_sct = 0;
+static int serverinfo_tack = 0;
+
+/* These set based on extension callbacks */
+static int serverinfo_sct_seen = 0;
+static int serverinfo_tack_seen = 0;
+static int serverinfo_other_seen = 0;
+
+/* This set from cmdline */
+static int custom_ext = 0;
+
+/* This set based on extension callbacks */
+static int custom_ext_error = 0;
+
+static int serverinfo_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in, size_t inlen,
+ int *al, void *arg)
+{
+ if (ext_type == TLSEXT_TYPE_signed_certificate_timestamp)
+ serverinfo_sct_seen++;
+ else if (ext_type == TACK_EXT_TYPE)
+ serverinfo_tack_seen++;
+ else
+ serverinfo_other_seen++;
+ return 1;
+}
+
+static int verify_serverinfo(void)
+{
+ if (serverinfo_sct != serverinfo_sct_seen)
+ return -1;
+ if (serverinfo_tack != serverinfo_tack_seen)
+ return -1;
+ if (serverinfo_other_seen)
+ return -1;
+ return 0;
+}
+
+/*-
+ * Four test cases for custom extensions:
+ * 0 - no ClientHello extension or ServerHello response
+ * 1 - ClientHello with "abc", no response
+ * 2 - ClientHello with "abc", empty response
+ * 3 - ClientHello with "abc", "defg" response
+ */
+
+static int custom_ext_0_cli_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_0)
+ custom_ext_error = 1;
+ return 0; /* Don't send an extension */
+}
+
+static int custom_ext_0_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ return 1;
+}
+
+static int custom_ext_1_cli_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_1)
+ custom_ext_error = 1;
+ *out = (const unsigned char *)custom_ext_cli_string;
+ *outlen = strlen(custom_ext_cli_string);
+ return 1; /* Send "abc" */
+}
+
+static int custom_ext_1_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ return 1;
+}
+
+static int custom_ext_2_cli_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_2)
+ custom_ext_error = 1;
+ *out = (const unsigned char *)custom_ext_cli_string;
+ *outlen = strlen(custom_ext_cli_string);
+ return 1; /* Send "abc" */
+}
+
+static int custom_ext_2_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_2)
+ custom_ext_error = 1;
+ if (inlen != 0)
+ custom_ext_error = 1; /* Should be empty response */
+ return 1;
+}
+
+static int custom_ext_3_cli_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_3)
+ custom_ext_error = 1;
+ *out = (const unsigned char *)custom_ext_cli_string;
+ *outlen = strlen(custom_ext_cli_string);
+ return 1; /* Send "abc" */
+}
+
+static int custom_ext_3_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_3)
+ custom_ext_error = 1;
+ if (inlen != strlen(custom_ext_srv_string))
+ custom_ext_error = 1;
+ if (memcmp(custom_ext_srv_string, in, inlen) != 0)
+ custom_ext_error = 1; /* Check for "defg" */
+ return 1;
+}
+
+/*
+ * custom_ext_0_cli_add_cb returns 0 - the server won't receive a callback
+ * for this extension
+ */
+static int custom_ext_0_srv_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ custom_ext_error = 1;
+ return 1;
+}
+
+/* 'add' callbacks are only called if the 'parse' callback is called */
+static int custom_ext_0_srv_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ /* Error: should not have been called */
+ custom_ext_error = 1;
+ return 0; /* Don't send an extension */
+}
+
+static int custom_ext_1_srv_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_1)
+ custom_ext_error = 1;
+ /* Check for "abc" */
+ if (inlen != strlen(custom_ext_cli_string))
+ custom_ext_error = 1;
+ if (memcmp(in, custom_ext_cli_string, inlen) != 0)
+ custom_ext_error = 1;
+ return 1;
+}
+
+static int custom_ext_1_srv_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ return 0; /* Don't send an extension */
+}
+
+static int custom_ext_2_srv_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_2)
+ custom_ext_error = 1;
+ /* Check for "abc" */
+ if (inlen != strlen(custom_ext_cli_string))
+ custom_ext_error = 1;
+ if (memcmp(in, custom_ext_cli_string, inlen) != 0)
+ custom_ext_error = 1;
+ return 1;
+}
+
+static int custom_ext_2_srv_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ *out = NULL;
+ *outlen = 0;
+ return 1; /* Send empty extension */
+}
+
+static int custom_ext_3_srv_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_3)
+ custom_ext_error = 1;
+ /* Check for "abc" */
+ if (inlen != strlen(custom_ext_cli_string))
+ custom_ext_error = 1;
+ if (memcmp(in, custom_ext_cli_string, inlen) != 0)
+ custom_ext_error = 1;
+ return 1;
+}
+
+static int custom_ext_3_srv_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ *out = (const unsigned char *)custom_ext_srv_string;
+ *outlen = strlen(custom_ext_srv_string);
+ return 1; /* Send "defg" */
+}
+
+static char *cipher = NULL;
+static char *ciphersuites = NULL;
+static int verbose = 0;
+static int debug = 0;
+
+int doit_localhost(SSL *s_ssl, SSL *c_ssl, int family,
+ long bytes, clock_t *s_time, clock_t *c_time);
+int doit_biopair(SSL *s_ssl, SSL *c_ssl, long bytes, clock_t *s_time,
+ clock_t *c_time);
+int doit(SSL *s_ssl, SSL *c_ssl, long bytes);
+
+static void sv_usage(void)
+{
+ fprintf(stderr, "usage: ssltest [args ...]\n");
+ fprintf(stderr, "\n");
+ fprintf(stderr, " -server_auth - check server certificate\n");
+ fprintf(stderr, " -client_auth - do client authentication\n");
+ fprintf(stderr, " -v - more output\n");
+ fprintf(stderr, " -d - debug output\n");
+ fprintf(stderr, " -reuse - use session-id reuse\n");
+ fprintf(stderr, " -num <val> - number of connections to perform\n");
+ fprintf(stderr,
+ " -bytes <val> - number of bytes to swap between client/server\n");
+#ifndef OPENSSL_NO_DH
+ fprintf(stderr,
+ " -dhe512 - use 512 bit key for DHE (to test failure)\n");
+ fprintf(stderr,
+ " -dhe1024dsa - use 1024 bit key (with 160-bit subprime) for DHE\n");
+ fprintf(stderr,
+ " -dhe2048 - use 2048 bit key (safe prime) for DHE (default, no-op)\n");
+ fprintf(stderr,
+ " -dhe4096 - use 4096 bit key (safe prime) for DHE\n");
+#endif
+ fprintf(stderr, " -no_dhe - disable DHE\n");
+#ifndef OPENSSL_NO_EC
+ fprintf(stderr, " -no_ecdhe - disable ECDHE\n");
+#endif
+#ifndef OPENSSL_NO_PSK
+ fprintf(stderr, " -psk arg - PSK in hex (without 0x)\n");
+#endif
+#ifndef OPENSSL_NO_SSL3
+ fprintf(stderr, " -ssl3 - use SSLv3\n");
+#endif
+#ifndef OPENSSL_NO_TLS1
+ fprintf(stderr, " -tls1 - use TLSv1\n");
+#endif
+#ifndef OPENSSL_NO_TLS1_1
+ fprintf(stderr, " -tls1_1 - use TLSv1.1\n");
+#endif
+#ifndef OPENSSL_NO_TLS1_2
+ fprintf(stderr, " -tls1_2 - use TLSv1.2\n");
+#endif
+#ifndef OPENSSL_NO_DTLS
+ fprintf(stderr, " -dtls - use DTLS\n");
+#ifndef OPENSSL_NO_DTLS1
+ fprintf(stderr, " -dtls1 - use DTLSv1\n");
+#endif
+#ifndef OPENSSL_NO_DTLS1_2
+ fprintf(stderr, " -dtls12 - use DTLSv1.2\n");
+#endif
+#endif
+ fprintf(stderr, " -CApath arg - PEM format directory of CA's\n");
+ fprintf(stderr, " -CAfile arg - PEM format file of CA's\n");
+ fprintf(stderr, " -s_cert arg - Server certificate file\n");
+ fprintf(stderr,
+ " -s_key arg - Server key file (default: same as -cert)\n");
+ fprintf(stderr, " -c_cert arg - Client certificate file\n");
+ fprintf(stderr,
+ " -c_key arg - Client key file (default: same as -c_cert)\n");
+ fprintf(stderr, " -cipher arg - The TLSv1.2 and below cipher list\n");
+ fprintf(stderr, " -ciphersuites arg - The TLSv1.3 ciphersuites\n");
+ fprintf(stderr, " -bio_pair - Use BIO pairs\n");
+ fprintf(stderr, " -ipv4 - Use IPv4 connection on localhost\n");
+ fprintf(stderr, " -ipv6 - Use IPv6 connection on localhost\n");
+ fprintf(stderr, " -f - Test even cases that can't work\n");
+ fprintf(stderr,
+ " -time - measure processor time used by client and server\n");
+ fprintf(stderr, " -zlib - use zlib compression\n");
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ fprintf(stderr, " -npn_client - have client side offer NPN\n");
+ fprintf(stderr, " -npn_server - have server side offer NPN\n");
+ fprintf(stderr, " -npn_server_reject - have server reject NPN\n");
+#endif
+ fprintf(stderr, " -serverinfo_file file - have server use this file\n");
+ fprintf(stderr, " -serverinfo_sct - have client offer and expect SCT\n");
+ fprintf(stderr,
+ " -serverinfo_tack - have client offer and expect TACK\n");
+ fprintf(stderr,
+ " -custom_ext - try various custom extension callbacks\n");
+ fprintf(stderr, " -alpn_client <string> - have client side offer ALPN\n");
+ fprintf(stderr, " -alpn_server <string> - have server side offer ALPN\n");
+ fprintf(stderr, " -alpn_server1 <string> - alias for -alpn_server\n");
+ fprintf(stderr, " -alpn_server2 <string> - have server side context 2 offer ALPN\n");
+ fprintf(stderr,
+ " -alpn_expected <string> - the ALPN protocol that should be negotiated\n");
+ fprintf(stderr, " -server_min_proto <string> - Minimum version the server should support\n");
+ fprintf(stderr, " -server_max_proto <string> - Maximum version the server should support\n");
+ fprintf(stderr, " -client_min_proto <string> - Minimum version the client should support\n");
+ fprintf(stderr, " -client_max_proto <string> - Maximum version the client should support\n");
+ fprintf(stderr, " -should_negotiate <string> - The version that should be negotiated, fail-client or fail-server\n");
+#ifndef OPENSSL_NO_CT
+ fprintf(stderr, " -noct - no certificate transparency\n");
+ fprintf(stderr, " -requestct - request certificate transparency\n");
+ fprintf(stderr, " -requirect - require certificate transparency\n");
+#endif
+ fprintf(stderr, " -sn_client <string> - have client request this servername\n");
+ fprintf(stderr, " -sn_server1 <string> - have server context 1 respond to this servername\n");
+ fprintf(stderr, " -sn_server2 <string> - have server context 2 respond to this servername\n");
+ fprintf(stderr, " -sn_expect1 - expected server 1\n");
+ fprintf(stderr, " -sn_expect2 - expected server 2\n");
+ fprintf(stderr, " -server_sess_out <file> - Save the server session to a file\n");
+ fprintf(stderr, " -server_sess_in <file> - Read the server session from a file\n");
+ fprintf(stderr, " -client_sess_out <file> - Save the client session to a file\n");
+ fprintf(stderr, " -client_sess_in <file> - Read the client session from a file\n");
+ fprintf(stderr, " -should_reuse <number> - The expected state of reusing the session\n");
+ fprintf(stderr, " -no_ticket - do not issue TLS session ticket\n");
+ fprintf(stderr, " -client_ktls - try to enable client KTLS\n");
+ fprintf(stderr, " -server_ktls - try to enable server KTLS\n");
+ fprintf(stderr, " -provider <name> - Load the given provider into the library context\n");
+ fprintf(stderr, " -config <cnf> - Load the given config file into the library context\n");
+}
+
+static void print_key_details(BIO *out, EVP_PKEY *key)
+{
+ int keyid = EVP_PKEY_get_id(key);
+
+#ifndef OPENSSL_NO_EC
+ if (keyid == EVP_PKEY_EC) {
+ char group[80];
+ size_t size;
+
+ if (!EVP_PKEY_get_group_name(key, group, sizeof(group), &size))
+ strcpy(group, "unknown group");
+ BIO_printf(out, "%d bits EC (%s)", EVP_PKEY_get_bits(key), group);
+ } else
+#endif
+ {
+ const char *algname;
+ switch (keyid) {
+ case EVP_PKEY_RSA:
+ algname = "RSA";
+ break;
+ case EVP_PKEY_DSA:
+ algname = "DSA";
+ break;
+ case EVP_PKEY_DH:
+ algname = "DH";
+ break;
+ default:
+ algname = OBJ_nid2sn(keyid);
+ break;
+ }
+ BIO_printf(out, "%d bits %s", EVP_PKEY_get_bits(key), algname);
+ }
+}
+
+static void print_details(SSL *c_ssl, const char *prefix)
+{
+ const SSL_CIPHER *ciph;
+ int mdnid;
+ X509 *cert;
+ EVP_PKEY *pkey;
+
+ ciph = SSL_get_current_cipher(c_ssl);
+ BIO_printf(bio_stdout, "%s%s, cipher %s %s",
+ prefix,
+ SSL_get_version(c_ssl),
+ SSL_CIPHER_get_version(ciph), SSL_CIPHER_get_name(ciph));
+ cert = SSL_get0_peer_certificate(c_ssl);
+ if (cert != NULL) {
+ EVP_PKEY* pubkey = X509_get0_pubkey(cert);
+
+ if (pubkey != NULL) {
+ BIO_puts(bio_stdout, ", ");
+ print_key_details(bio_stdout, pubkey);
+ }
+ }
+ if (SSL_get_peer_tmp_key(c_ssl, &pkey)) {
+ BIO_puts(bio_stdout, ", temp key: ");
+ print_key_details(bio_stdout, pkey);
+ EVP_PKEY_free(pkey);
+ }
+ if (SSL_get_peer_signature_nid(c_ssl, &mdnid))
+ BIO_printf(bio_stdout, ", digest=%s", OBJ_nid2sn(mdnid));
+ BIO_printf(bio_stdout, "\n");
+}
+
+/*
+ * protocol_from_string - converts a protocol version string to a number
+ *
+ * Returns -1 on failure or the version on success
+ */
+static int protocol_from_string(const char *value)
+{
+ struct protocol_versions {
+ const char *name;
+ int version;
+ };
+ static const struct protocol_versions versions[] = {
+ {"ssl3", SSL3_VERSION},
+ {"tls1", TLS1_VERSION},
+ {"tls1.1", TLS1_1_VERSION},
+ {"tls1.2", TLS1_2_VERSION},
+ {"tls1.3", TLS1_3_VERSION},
+ {"dtls1", DTLS1_VERSION},
+ {"dtls1.2", DTLS1_2_VERSION}};
+ size_t i;
+ size_t n = OSSL_NELEM(versions);
+
+ for (i = 0; i < n; i++)
+ if (strcmp(versions[i].name, value) == 0)
+ return versions[i].version;
+ return -1;
+}
+
+static SSL_SESSION *read_session(const char *filename)
+{
+ SSL_SESSION *sess;
+ BIO *f = BIO_new_file(filename, "r");
+
+ if (f == NULL) {
+ BIO_printf(bio_err, "Can't open session file %s\n", filename);
+ ERR_print_errors(bio_err);
+ return NULL;
+ }
+ sess = PEM_read_bio_SSL_SESSION(f, NULL, 0, NULL);
+ if (sess == NULL) {
+ BIO_printf(bio_err, "Can't parse session file %s\n", filename);
+ ERR_print_errors(bio_err);
+ }
+ BIO_free(f);
+ return sess;
+}
+
+static int write_session(const char *filename, SSL_SESSION *sess)
+{
+ BIO *f;
+
+ if (sess == NULL) {
+ BIO_printf(bio_err, "No session information\n");
+ return 0;
+ }
+
+ f = BIO_new_file(filename, "w");
+ if (f == NULL) {
+ BIO_printf(bio_err, "Can't open session file %s\n", filename);
+ ERR_print_errors(bio_err);
+ return 0;
+ }
+ PEM_write_bio_SSL_SESSION(f, sess);
+ BIO_free(f);
+ return 1;
+}
+
+/*
+ * set_protocol_version - Sets protocol version minimum or maximum
+ *
+ * Returns 0 on failure and 1 on success
+ */
+static int set_protocol_version(const char *version, SSL *ssl, int setting)
+{
+ if (version != NULL) {
+ int ver = protocol_from_string(version);
+ if (ver < 0) {
+ BIO_printf(bio_err, "Error parsing: %s\n", version);
+ return 0;
+ }
+ return SSL_ctrl(ssl, setting, ver, NULL);
+ }
+ return 1;
+}
+
+int main(int argc, char *argv[])
+{
+ const char *CApath = NULL, *CAfile = NULL;
+ int badop = 0;
+ enum { BIO_MEM, BIO_PAIR, BIO_IPV4, BIO_IPV6 } bio_type = BIO_MEM;
+ int force = 0;
+ int dtls1 = 0, dtls12 = 0, dtls = 0, tls1 = 0, tls1_1 = 0, tls1_2 = 0, ssl3 = 0;
+ int ret = EXIT_FAILURE;
+ int client_auth = 0;
+ int server_auth = 0, i;
+ struct app_verify_arg app_verify_arg =
+ { APP_CALLBACK_STRING, 0 };
+ SSL_CTX *c_ctx = NULL;
+ const SSL_METHOD *meth = NULL;
+ SSL *c_ssl = NULL;
+ SSL *s_ssl = NULL;
+ int number = 1, reuse = 0;
+ int should_reuse = -1;
+ int no_ticket = 0;
+ int client_ktls = 0, server_ktls = 0;
+ long bytes = 256L;
+#ifndef OPENSSL_NO_DH
+ EVP_PKEY *dhpkey;
+ int dhe512 = 0, dhe1024dsa = 0, dhe4096 = 0;
+ int no_dhe = 0;
+#endif
+ int no_psk = 0;
+ int print_time = 0;
+ clock_t s_time = 0, c_time = 0;
+#ifndef OPENSSL_NO_COMP
+ int n, comp = 0;
+ COMP_METHOD *cm = NULL;
+ STACK_OF(SSL_COMP) *ssl_comp_methods = NULL;
+#endif
+ int no_protocol;
+ int min_version = 0, max_version = 0;
+#ifndef OPENSSL_NO_CT
+ /*
+ * Disable CT validation by default, because it will interfere with
+ * anything using custom extension handlers to deal with SCT extensions.
+ */
+ int ct_validation = 0;
+#endif
+ SSL_CONF_CTX *s_cctx = NULL, *c_cctx = NULL, *s_cctx2 = NULL;
+ STACK_OF(OPENSSL_STRING) *conf_args = NULL;
+ char *arg = NULL, *argn = NULL;
+ const char *provider = NULL, *config = NULL;
+ OSSL_PROVIDER *thisprov = NULL, *defctxnull = NULL;
+ OSSL_LIB_CTX *libctx = NULL;
+
+ verbose = 0;
+ debug = 0;
+
+ bio_err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT);
+ bio_stdout = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT);
+
+ s_cctx = SSL_CONF_CTX_new();
+ s_cctx2 = SSL_CONF_CTX_new();
+ c_cctx = SSL_CONF_CTX_new();
+
+ if (!s_cctx || !c_cctx || !s_cctx2) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+
+ SSL_CONF_CTX_set_flags(s_cctx,
+ SSL_CONF_FLAG_CMDLINE | SSL_CONF_FLAG_SERVER |
+ SSL_CONF_FLAG_CERTIFICATE |
+ SSL_CONF_FLAG_REQUIRE_PRIVATE);
+ SSL_CONF_CTX_set_flags(s_cctx2,
+ SSL_CONF_FLAG_CMDLINE | SSL_CONF_FLAG_SERVER |
+ SSL_CONF_FLAG_CERTIFICATE |
+ SSL_CONF_FLAG_REQUIRE_PRIVATE);
+ if (!SSL_CONF_CTX_set1_prefix(s_cctx, "-s_")) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ if (!SSL_CONF_CTX_set1_prefix(s_cctx2, "-s_")) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+
+ SSL_CONF_CTX_set_flags(c_cctx,
+ SSL_CONF_FLAG_CMDLINE | SSL_CONF_FLAG_CLIENT |
+ SSL_CONF_FLAG_CERTIFICATE |
+ SSL_CONF_FLAG_REQUIRE_PRIVATE);
+ if (!SSL_CONF_CTX_set1_prefix(c_cctx, "-c_")) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+
+ argc--;
+ argv++;
+
+ while (argc >= 1) {
+ if (strcmp(*argv, "-F") == 0) {
+ fprintf(stderr,
+ "not compiled with FIPS support, so exiting without running.\n");
+ EXIT(0);
+ } else if (strcmp(*argv, "-server_auth") == 0)
+ server_auth = 1;
+ else if (strcmp(*argv, "-client_auth") == 0)
+ client_auth = 1;
+ else if (strcmp(*argv, "-v") == 0)
+ verbose = 1;
+ else if (strcmp(*argv, "-d") == 0)
+ debug = 1;
+ else if (strcmp(*argv, "-reuse") == 0)
+ reuse = 1;
+ else if (strcmp(*argv, "-no_dhe") == 0)
+#ifdef OPENSSL_NO_DH
+ /* unused in this case */;
+#else
+ no_dhe = 1;
+ else if (strcmp(*argv, "-dhe512") == 0)
+ dhe512 = 1;
+ else if (strcmp(*argv, "-dhe1024dsa") == 0)
+ dhe1024dsa = 1;
+ else if (strcmp(*argv, "-dhe4096") == 0)
+ dhe4096 = 1;
+#endif
+ else if (strcmp(*argv, "-no_ecdhe") == 0)
+ /* obsolete */;
+ else if (strcmp(*argv, "-psk") == 0) {
+ if (--argc < 1)
+ goto bad;
+ psk_key = *(++argv);
+#ifndef OPENSSL_NO_PSK
+ if (strspn(psk_key, "abcdefABCDEF1234567890") != strlen(psk_key)) {
+ BIO_printf(bio_err, "Not a hex number '%s'\n", *argv);
+ goto bad;
+ }
+#else
+ no_psk = 1;
+#endif
+ }
+ else if (strcmp(*argv, "-tls1_2") == 0) {
+ tls1_2 = 1;
+ } else if (strcmp(*argv, "-tls1_1") == 0) {
+ tls1_1 = 1;
+ } else if (strcmp(*argv, "-tls1") == 0) {
+ tls1 = 1;
+ } else if (strcmp(*argv, "-ssl3") == 0) {
+ ssl3 = 1;
+ } else if (strcmp(*argv, "-dtls1") == 0) {
+ dtls1 = 1;
+ } else if (strcmp(*argv, "-dtls12") == 0) {
+ dtls12 = 1;
+ } else if (strcmp(*argv, "-dtls") == 0) {
+ dtls = 1;
+ } else if (strncmp(*argv, "-num", 4) == 0) {
+ if (--argc < 1)
+ goto bad;
+ number = atoi(*(++argv));
+ if (number == 0)
+ number = 1;
+ } else if (strcmp(*argv, "-bytes") == 0) {
+ if (--argc < 1)
+ goto bad;
+ bytes = atol(*(++argv));
+ if (bytes == 0L)
+ bytes = 1L;
+ i = strlen(argv[0]);
+ if (argv[0][i - 1] == 'k')
+ bytes *= 1024L;
+ if (argv[0][i - 1] == 'm')
+ bytes *= 1024L * 1024L;
+ } else if (strcmp(*argv, "-cipher") == 0) {
+ if (--argc < 1)
+ goto bad;
+ cipher = *(++argv);
+ } else if (strcmp(*argv, "-ciphersuites") == 0) {
+ if (--argc < 1)
+ goto bad;
+ ciphersuites = *(++argv);
+ } else if (strcmp(*argv, "-CApath") == 0) {
+ if (--argc < 1)
+ goto bad;
+ CApath = *(++argv);
+ } else if (strcmp(*argv, "-CAfile") == 0) {
+ if (--argc < 1)
+ goto bad;
+ CAfile = *(++argv);
+ } else if (strcmp(*argv, "-bio_pair") == 0) {
+ bio_type = BIO_PAIR;
+ }
+#ifndef OPENSSL_NO_SOCK
+ else if (strcmp(*argv, "-ipv4") == 0) {
+ bio_type = BIO_IPV4;
+ } else if (strcmp(*argv, "-ipv6") == 0) {
+ bio_type = BIO_IPV6;
+ }
+#endif
+ else if (strcmp(*argv, "-f") == 0) {
+ force = 1;
+ } else if (strcmp(*argv, "-time") == 0) {
+ print_time = 1;
+ }
+#ifndef OPENSSL_NO_CT
+ else if (strcmp(*argv, "-noct") == 0) {
+ ct_validation = 0;
+ }
+ else if (strcmp(*argv, "-ct") == 0) {
+ ct_validation = 1;
+ }
+#endif
+#ifndef OPENSSL_NO_COMP
+ else if (strcmp(*argv, "-zlib") == 0) {
+ comp = COMP_ZLIB;
+ }
+#endif
+ else if (strcmp(*argv, "-app_verify") == 0) {
+ app_verify_arg.app_verify = 1;
+ }
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ else if (strcmp(*argv, "-npn_client") == 0) {
+ npn_client = 1;
+ } else if (strcmp(*argv, "-npn_server") == 0) {
+ npn_server = 1;
+ } else if (strcmp(*argv, "-npn_server_reject") == 0) {
+ npn_server_reject = 1;
+ }
+#endif
+ else if (strcmp(*argv, "-serverinfo_sct") == 0) {
+ serverinfo_sct = 1;
+ } else if (strcmp(*argv, "-serverinfo_tack") == 0) {
+ serverinfo_tack = 1;
+ } else if (strcmp(*argv, "-serverinfo_file") == 0) {
+ if (--argc < 1)
+ goto bad;
+ serverinfo_file = *(++argv);
+ } else if (strcmp(*argv, "-custom_ext") == 0) {
+ custom_ext = 1;
+ } else if (strcmp(*argv, "-alpn_client") == 0) {
+ if (--argc < 1)
+ goto bad;
+ alpn_client = *(++argv);
+ } else if (strcmp(*argv, "-alpn_server") == 0 ||
+ strcmp(*argv, "-alpn_server1") == 0) {
+ if (--argc < 1)
+ goto bad;
+ alpn_server = *(++argv);
+ } else if (strcmp(*argv, "-alpn_server2") == 0) {
+ if (--argc < 1)
+ goto bad;
+ alpn_server2 = *(++argv);
+ } else if (strcmp(*argv, "-alpn_expected") == 0) {
+ if (--argc < 1)
+ goto bad;
+ alpn_expected = *(++argv);
+ } else if (strcmp(*argv, "-server_min_proto") == 0) {
+ if (--argc < 1)
+ goto bad;
+ server_min_proto = *(++argv);
+ } else if (strcmp(*argv, "-server_max_proto") == 0) {
+ if (--argc < 1)
+ goto bad;
+ server_max_proto = *(++argv);
+ } else if (strcmp(*argv, "-client_min_proto") == 0) {
+ if (--argc < 1)
+ goto bad;
+ client_min_proto = *(++argv);
+ } else if (strcmp(*argv, "-client_max_proto") == 0) {
+ if (--argc < 1)
+ goto bad;
+ client_max_proto = *(++argv);
+ } else if (strcmp(*argv, "-should_negotiate") == 0) {
+ if (--argc < 1)
+ goto bad;
+ should_negotiate = *(++argv);
+ } else if (strcmp(*argv, "-sn_client") == 0) {
+ if (--argc < 1)
+ goto bad;
+ sn_client = *(++argv);
+ } else if (strcmp(*argv, "-sn_server1") == 0) {
+ if (--argc < 1)
+ goto bad;
+ sn_server1 = *(++argv);
+ } else if (strcmp(*argv, "-sn_server2") == 0) {
+ if (--argc < 1)
+ goto bad;
+ sn_server2 = *(++argv);
+ } else if (strcmp(*argv, "-sn_expect1") == 0) {
+ sn_expect = 1;
+ } else if (strcmp(*argv, "-sn_expect2") == 0) {
+ sn_expect = 2;
+ } else if (strcmp(*argv, "-server_sess_out") == 0) {
+ if (--argc < 1)
+ goto bad;
+ server_sess_out = *(++argv);
+ } else if (strcmp(*argv, "-server_sess_in") == 0) {
+ if (--argc < 1)
+ goto bad;
+ server_sess_in = *(++argv);
+ } else if (strcmp(*argv, "-client_sess_out") == 0) {
+ if (--argc < 1)
+ goto bad;
+ client_sess_out = *(++argv);
+ } else if (strcmp(*argv, "-client_sess_in") == 0) {
+ if (--argc < 1)
+ goto bad;
+ client_sess_in = *(++argv);
+ } else if (strcmp(*argv, "-should_reuse") == 0) {
+ if (--argc < 1)
+ goto bad;
+ should_reuse = !!atoi(*(++argv));
+ } else if (strcmp(*argv, "-no_ticket") == 0) {
+ no_ticket = 1;
+ } else if (strcmp(*argv, "-client_ktls") == 0) {
+ client_ktls = 1;
+ } else if (strcmp(*argv, "-server_ktls") == 0) {
+ server_ktls = 1;
+ } else if (strcmp(*argv, "-provider") == 0) {
+ if (--argc < 1)
+ goto bad;
+ provider = *(++argv);
+ } else if (strcmp(*argv, "-config") == 0) {
+ if (--argc < 1)
+ goto bad;
+ config = *(++argv);
+ } else {
+ int rv;
+ arg = argv[0];
+ argn = argv[1];
+ /* Try to process command using SSL_CONF */
+ rv = SSL_CONF_cmd_argv(c_cctx, &argc, &argv);
+ /* If not processed try server */
+ if (rv == 0)
+ rv = SSL_CONF_cmd_argv(s_cctx, &argc, &argv);
+ /* Recognised: store it for later use */
+ if (rv > 0) {
+ if (rv == 1)
+ argn = NULL;
+ if (!conf_args) {
+ conf_args = sk_OPENSSL_STRING_new_null();
+ if (!conf_args)
+ goto end;
+ }
+ if (!sk_OPENSSL_STRING_push(conf_args, arg))
+ goto end;
+ if (!sk_OPENSSL_STRING_push(conf_args, argn))
+ goto end;
+ continue;
+ }
+ if (rv == -3)
+ BIO_printf(bio_err, "Missing argument for %s\n", arg);
+ else if (rv < 0)
+ BIO_printf(bio_err, "Error with command %s\n", arg);
+ else if (rv == 0)
+ BIO_printf(bio_err, "unknown option %s\n", arg);
+ badop = 1;
+ break;
+ }
+ argc--;
+ argv++;
+ }
+ if (badop) {
+ bad:
+ sv_usage();
+ goto end;
+ }
+
+ if (ssl3 + tls1 + tls1_1 + tls1_2 + dtls + dtls1 + dtls12 > 1) {
+ fprintf(stderr, "At most one of -ssl3, -tls1, -tls1_1, -tls1_2, -dtls, -dtls1 or -dtls12 should "
+ "be requested.\n");
+ EXIT(1);
+ }
+
+#ifdef OPENSSL_NO_SSL3
+ if (ssl3)
+ no_protocol = 1;
+ else
+#endif
+#ifdef OPENSSL_NO_TLS1
+ if (tls1)
+ no_protocol = 1;
+ else
+#endif
+#ifdef OPENSSL_NO_TLS1_1
+ if (tls1_1)
+ no_protocol = 1;
+ else
+#endif
+#ifdef OPENSSL_NO_TLS1_2
+ if (tls1_2)
+ no_protocol = 1;
+ else
+#endif
+#if defined(OPENSSL_NO_DTLS) || defined(OPENSSL_NO_DTLS1)
+ if (dtls1)
+ no_protocol = 1;
+ else
+#endif
+#if defined(OPENSSL_NO_DTLS) || defined(OPENSSL_NO_DTLS1_2)
+ if (dtls12)
+ no_protocol = 1;
+ else
+#endif
+ no_protocol = 0;
+
+ /*
+ * Testing was requested for a compiled-out protocol (e.g. SSLv3).
+ * Ideally, we would error out, but the generic test wrapper can't know
+ * when to expect failure. So we do nothing and return success.
+ */
+ if (no_protocol) {
+ fprintf(stderr, "Testing was requested for a disabled protocol. "
+ "Skipping tests.\n");
+ ret = EXIT_SUCCESS;
+ goto end;
+ }
+
+ if (!ssl3 && !tls1 && !tls1_1 && !tls1_2 && !dtls && !dtls1 && !dtls12 && number > 1
+ && !reuse && !force) {
+ fprintf(stderr, "This case cannot work. Use -f to perform "
+ "the test anyway (and\n-d to see what happens), "
+ "or add one of -ssl3, -tls1, -tls1_1, -tls1_2, -dtls, -dtls1, -dtls12, -reuse\n"
+ "to avoid protocol mismatch.\n");
+ EXIT(1);
+ }
+
+ if (print_time) {
+ if (bio_type == BIO_MEM) {
+ fprintf(stderr, "Using BIO pair (-bio_pair)\n");
+ bio_type = BIO_PAIR;
+ }
+ if (number < 50 && !force)
+ fprintf(stderr,
+ "Warning: For accurate timings, use more connections (e.g. -num 1000)\n");
+ }
+
+#ifndef OPENSSL_NO_COMP
+ if (comp == COMP_ZLIB)
+ cm = COMP_zlib();
+ if (cm != NULL) {
+ if (COMP_get_type(cm) != NID_undef) {
+ if (SSL_COMP_add_compression_method(comp, cm) != 0) {
+ fprintf(stderr, "Failed to add compression method\n");
+ ERR_print_errors_fp(stderr);
+ }
+ } else {
+ fprintf(stderr,
+ "Warning: %s compression not supported\n",
+ comp == COMP_ZLIB ? "zlib" : "unknown");
+ ERR_print_errors_fp(stderr);
+ }
+ }
+ ssl_comp_methods = SSL_COMP_get_compression_methods();
+ n = sk_SSL_COMP_num(ssl_comp_methods);
+ if (n) {
+ int j;
+ printf("Available compression methods:");
+ for (j = 0; j < n; j++) {
+ SSL_COMP *c = sk_SSL_COMP_value(ssl_comp_methods, j);
+ printf(" %s:%d", SSL_COMP_get0_name(c), SSL_COMP_get_id(c));
+ }
+ printf("\n");
+ }
+#endif
+
+#ifndef OPENSSL_NO_TLS
+ meth = TLS_method();
+ if (ssl3) {
+ min_version = SSL3_VERSION;
+ max_version = SSL3_VERSION;
+ } else if (tls1) {
+ min_version = TLS1_VERSION;
+ max_version = TLS1_VERSION;
+ } else if (tls1_1) {
+ min_version = TLS1_1_VERSION;
+ max_version = TLS1_1_VERSION;
+ } else if (tls1_2) {
+ min_version = TLS1_2_VERSION;
+ max_version = TLS1_2_VERSION;
+ } else {
+ min_version = 0;
+# if defined(OPENSSL_NO_EC) && defined(OPENSSL_NO_DH)
+ /* We only have ec and dh based built-in groups for TLSv1.3 */
+ max_version = TLS1_2_VERSION;
+# else
+ max_version = 0;
+# endif
+ }
+#endif
+#ifndef OPENSSL_NO_DTLS
+ if (dtls || dtls1 || dtls12) {
+ meth = DTLS_method();
+ if (dtls1) {
+ min_version = DTLS1_VERSION;
+ max_version = DTLS1_VERSION;
+ } else if (dtls12) {
+ min_version = DTLS1_2_VERSION;
+ max_version = DTLS1_2_VERSION;
+ } else {
+ min_version = 0;
+ max_version = 0;
+ }
+ }
+#endif
+
+ if (provider != NULL
+ && !test_get_libctx(&libctx, &defctxnull, config, &thisprov, provider))
+ goto end;
+
+ c_ctx = SSL_CTX_new_ex(libctx, NULL, meth);
+ s_ctx = SSL_CTX_new_ex(libctx, NULL, meth);
+ s_ctx2 = SSL_CTX_new_ex(libctx, NULL, meth); /* no SSL_CTX_dup! */
+ if ((c_ctx == NULL) || (s_ctx == NULL) || (s_ctx2 == NULL)) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ /*
+ * Since we will use low security ciphersuites and keys for testing set
+ * security level to zero by default. Tests can override this by adding
+ * "@SECLEVEL=n" to the cipher string.
+ */
+ SSL_CTX_set_security_level(c_ctx, 0);
+ SSL_CTX_set_security_level(s_ctx, 0);
+ SSL_CTX_set_security_level(s_ctx2, 0);
+
+ if (no_ticket) {
+ SSL_CTX_set_options(c_ctx, SSL_OP_NO_TICKET);
+ SSL_CTX_set_options(s_ctx, SSL_OP_NO_TICKET);
+ }
+
+ if (SSL_CTX_set_min_proto_version(c_ctx, min_version) == 0)
+ goto end;
+ if (SSL_CTX_set_max_proto_version(c_ctx, max_version) == 0)
+ goto end;
+ if (SSL_CTX_set_min_proto_version(s_ctx, min_version) == 0)
+ goto end;
+ if (SSL_CTX_set_max_proto_version(s_ctx, max_version) == 0)
+ goto end;
+
+ if (cipher != NULL) {
+ if (strcmp(cipher, "") == 0) {
+ if (!SSL_CTX_set_cipher_list(c_ctx, cipher)) {
+ if (ERR_GET_REASON(ERR_peek_error()) == SSL_R_NO_CIPHER_MATCH) {
+ ERR_clear_error();
+ } else {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ } else {
+ /* Should have failed when clearing all TLSv1.2 ciphers. */
+ fprintf(stderr, "CLEARING ALL TLSv1.2 CIPHERS SHOULD FAIL\n");
+ goto end;
+ }
+
+ if (!SSL_CTX_set_cipher_list(s_ctx, cipher)) {
+ if (ERR_GET_REASON(ERR_peek_error()) == SSL_R_NO_CIPHER_MATCH) {
+ ERR_clear_error();
+ } else {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ } else {
+ /* Should have failed when clearing all TLSv1.2 ciphers. */
+ fprintf(stderr, "CLEARING ALL TLSv1.2 CIPHERS SHOULD FAIL\n");
+ goto end;
+ }
+
+ if (!SSL_CTX_set_cipher_list(s_ctx2, cipher)) {
+ if (ERR_GET_REASON(ERR_peek_error()) == SSL_R_NO_CIPHER_MATCH) {
+ ERR_clear_error();
+ } else {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ } else {
+ /* Should have failed when clearing all TLSv1.2 ciphers. */
+ fprintf(stderr, "CLEARING ALL TLSv1.2 CIPHERS SHOULD FAIL\n");
+ goto end;
+ }
+ } else {
+ if (!SSL_CTX_set_cipher_list(c_ctx, cipher)
+ || !SSL_CTX_set_cipher_list(s_ctx, cipher)
+ || !SSL_CTX_set_cipher_list(s_ctx2, cipher)) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ }
+ }
+ if (ciphersuites != NULL) {
+ if (!SSL_CTX_set_ciphersuites(c_ctx, ciphersuites)
+ || !SSL_CTX_set_ciphersuites(s_ctx, ciphersuites)
+ || !SSL_CTX_set_ciphersuites(s_ctx2, ciphersuites)) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ }
+
+#ifndef OPENSSL_NO_CT
+ if (ct_validation &&
+ !SSL_CTX_enable_ct(c_ctx, SSL_CT_VALIDATION_STRICT)) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+#endif
+
+ /* Process SSL_CONF arguments */
+ SSL_CONF_CTX_set_ssl_ctx(c_cctx, c_ctx);
+ SSL_CONF_CTX_set_ssl_ctx(s_cctx, s_ctx);
+ SSL_CONF_CTX_set_ssl_ctx(s_cctx2, s_ctx2);
+
+ for (i = 0; i < sk_OPENSSL_STRING_num(conf_args); i += 2) {
+ int rv;
+ arg = sk_OPENSSL_STRING_value(conf_args, i);
+ argn = sk_OPENSSL_STRING_value(conf_args, i + 1);
+ rv = SSL_CONF_cmd(c_cctx, arg, argn);
+ /* If not recognised use server context */
+ if (rv == -2) {
+ rv = SSL_CONF_cmd(s_cctx2, arg, argn);
+ if (rv > 0)
+ rv = SSL_CONF_cmd(s_cctx, arg, argn);
+ }
+ if (rv <= 0) {
+ BIO_printf(bio_err, "Error processing %s %s\n",
+ arg, argn ? argn : "");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ }
+
+ if (!SSL_CONF_CTX_finish(s_cctx) || !SSL_CONF_CTX_finish(c_cctx) || !SSL_CONF_CTX_finish(s_cctx2)) {
+ BIO_puts(bio_err, "Error finishing context\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+#ifndef OPENSSL_NO_DH
+ if (!no_dhe) {
+ if (dhe1024dsa)
+ dhpkey = get_dh1024dsa(libctx);
+ else if (dhe512)
+ dhpkey = get_dh512(libctx);
+ else if (dhe4096)
+ dhpkey = get_dh4096(libctx);
+ else
+ dhpkey = get_dh2048(libctx);
+
+ if (dhpkey == NULL || !EVP_PKEY_up_ref(dhpkey)) {
+ EVP_PKEY_free(dhpkey);
+ BIO_puts(bio_err, "Error getting DH parameters\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ if (!SSL_CTX_set0_tmp_dh_pkey(s_ctx, dhpkey))
+ EVP_PKEY_free(dhpkey);
+ if (!SSL_CTX_set0_tmp_dh_pkey(s_ctx2, dhpkey))
+ EVP_PKEY_free(dhpkey);
+ }
+#endif
+
+ if (!(SSL_CTX_load_verify_file(s_ctx, CAfile)
+ || SSL_CTX_load_verify_dir(s_ctx, CApath))
+ || !SSL_CTX_set_default_verify_paths(s_ctx)
+ || !(SSL_CTX_load_verify_file(s_ctx2, CAfile)
+ || SSL_CTX_load_verify_dir(s_ctx2, CApath))
+ || !SSL_CTX_set_default_verify_paths(s_ctx2)
+ || !(SSL_CTX_load_verify_file(c_ctx, CAfile)
+ || SSL_CTX_load_verify_dir(c_ctx, CApath))
+ || !SSL_CTX_set_default_verify_paths(c_ctx)) {
+ ERR_print_errors(bio_err);
+ }
+
+#ifndef OPENSSL_NO_CT
+ if (!SSL_CTX_set_default_ctlog_list_file(s_ctx) ||
+ !SSL_CTX_set_default_ctlog_list_file(s_ctx2) ||
+ !SSL_CTX_set_default_ctlog_list_file(c_ctx)) {
+ ERR_print_errors(bio_err);
+ }
+#endif
+
+ if (client_auth) {
+ printf("client authentication\n");
+ SSL_CTX_set_verify(s_ctx,
+ SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
+ verify_callback);
+ SSL_CTX_set_verify(s_ctx2,
+ SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
+ verify_callback);
+ SSL_CTX_set_cert_verify_callback(s_ctx, app_verify_callback,
+ &app_verify_arg);
+ SSL_CTX_set_cert_verify_callback(s_ctx2, app_verify_callback,
+ &app_verify_arg);
+ }
+ if (server_auth) {
+ printf("server authentication\n");
+ SSL_CTX_set_verify(c_ctx, SSL_VERIFY_PEER, verify_callback);
+ SSL_CTX_set_cert_verify_callback(c_ctx, app_verify_callback,
+ &app_verify_arg);
+ }
+
+ {
+ int session_id_context = 0;
+ if (!SSL_CTX_set_session_id_context(s_ctx, (void *)&session_id_context,
+ sizeof(session_id_context)) ||
+ !SSL_CTX_set_session_id_context(s_ctx2, (void *)&session_id_context,
+ sizeof(session_id_context))) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ }
+
+ /* Use PSK only if PSK key is given */
+ if (psk_key != NULL) {
+ /*
+ * no_psk is used to avoid putting psk command to openssl tool
+ */
+ if (no_psk) {
+ /*
+ * if PSK is not compiled in and psk key is given, do nothing and
+ * exit successfully
+ */
+ ret = EXIT_SUCCESS;
+ goto end;
+ }
+#ifndef OPENSSL_NO_PSK
+ SSL_CTX_set_psk_client_callback(c_ctx, psk_client_callback);
+ SSL_CTX_set_psk_server_callback(s_ctx, psk_server_callback);
+ SSL_CTX_set_psk_server_callback(s_ctx2, psk_server_callback);
+ if (debug)
+ BIO_printf(bio_err, "setting PSK identity hint to s_ctx\n");
+ if (!SSL_CTX_use_psk_identity_hint(s_ctx, "ctx server identity_hint") ||
+ !SSL_CTX_use_psk_identity_hint(s_ctx2, "ctx server identity_hint")) {
+ BIO_printf(bio_err, "error setting PSK identity hint to s_ctx\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+#endif
+ }
+
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ if (npn_client) {
+ SSL_CTX_set_next_proto_select_cb(c_ctx, cb_client_npn, NULL);
+ }
+ if (npn_server) {
+ if (npn_server_reject) {
+ BIO_printf(bio_err,
+ "Can't have both -npn_server and -npn_server_reject\n");
+ goto end;
+ }
+ SSL_CTX_set_npn_advertised_cb(s_ctx, cb_server_npn, NULL);
+ SSL_CTX_set_npn_advertised_cb(s_ctx2, cb_server_npn, NULL);
+ }
+ if (npn_server_reject) {
+ SSL_CTX_set_npn_advertised_cb(s_ctx, cb_server_rejects_npn, NULL);
+ SSL_CTX_set_npn_advertised_cb(s_ctx2, cb_server_rejects_npn, NULL);
+ }
+#endif
+
+ if (serverinfo_sct) {
+ if (!SSL_CTX_add_client_custom_ext(c_ctx,
+ TLSEXT_TYPE_signed_certificate_timestamp,
+ NULL, NULL, NULL,
+ serverinfo_cli_parse_cb, NULL)) {
+ BIO_printf(bio_err, "Error adding SCT extension\n");
+ goto end;
+ }
+ }
+ if (serverinfo_tack) {
+ if (!SSL_CTX_add_client_custom_ext(c_ctx, TACK_EXT_TYPE,
+ NULL, NULL, NULL,
+ serverinfo_cli_parse_cb, NULL)) {
+ BIO_printf(bio_err, "Error adding TACK extension\n");
+ goto end;
+ }
+ }
+ if (serverinfo_file)
+ if (!SSL_CTX_use_serverinfo_file(s_ctx, serverinfo_file) ||
+ !SSL_CTX_use_serverinfo_file(s_ctx2, serverinfo_file)) {
+ BIO_printf(bio_err, "missing serverinfo file\n");
+ goto end;
+ }
+
+ if (custom_ext) {
+ if (!SSL_CTX_add_client_custom_ext(c_ctx, CUSTOM_EXT_TYPE_0,
+ custom_ext_0_cli_add_cb,
+ NULL, NULL,
+ custom_ext_0_cli_parse_cb, NULL)
+ || !SSL_CTX_add_client_custom_ext(c_ctx, CUSTOM_EXT_TYPE_1,
+ custom_ext_1_cli_add_cb,
+ NULL, NULL,
+ custom_ext_1_cli_parse_cb, NULL)
+ || !SSL_CTX_add_client_custom_ext(c_ctx, CUSTOM_EXT_TYPE_2,
+ custom_ext_2_cli_add_cb,
+ NULL, NULL,
+ custom_ext_2_cli_parse_cb, NULL)
+ || !SSL_CTX_add_client_custom_ext(c_ctx, CUSTOM_EXT_TYPE_3,
+ custom_ext_3_cli_add_cb,
+ NULL, NULL,
+ custom_ext_3_cli_parse_cb, NULL)
+ || !SSL_CTX_add_server_custom_ext(s_ctx, CUSTOM_EXT_TYPE_0,
+ custom_ext_0_srv_add_cb,
+ NULL, NULL,
+ custom_ext_0_srv_parse_cb, NULL)
+ || !SSL_CTX_add_server_custom_ext(s_ctx2, CUSTOM_EXT_TYPE_0,
+ custom_ext_0_srv_add_cb,
+ NULL, NULL,
+ custom_ext_0_srv_parse_cb, NULL)
+ || !SSL_CTX_add_server_custom_ext(s_ctx, CUSTOM_EXT_TYPE_1,
+ custom_ext_1_srv_add_cb,
+ NULL, NULL,
+ custom_ext_1_srv_parse_cb, NULL)
+ || !SSL_CTX_add_server_custom_ext(s_ctx2, CUSTOM_EXT_TYPE_1,
+ custom_ext_1_srv_add_cb,
+ NULL, NULL,
+ custom_ext_1_srv_parse_cb, NULL)
+ || !SSL_CTX_add_server_custom_ext(s_ctx, CUSTOM_EXT_TYPE_2,
+ custom_ext_2_srv_add_cb,
+ NULL, NULL,
+ custom_ext_2_srv_parse_cb, NULL)
+ || !SSL_CTX_add_server_custom_ext(s_ctx2, CUSTOM_EXT_TYPE_2,
+ custom_ext_2_srv_add_cb,
+ NULL, NULL,
+ custom_ext_2_srv_parse_cb, NULL)
+ || !SSL_CTX_add_server_custom_ext(s_ctx, CUSTOM_EXT_TYPE_3,
+ custom_ext_3_srv_add_cb,
+ NULL, NULL,
+ custom_ext_3_srv_parse_cb, NULL)
+ || !SSL_CTX_add_server_custom_ext(s_ctx2, CUSTOM_EXT_TYPE_3,
+ custom_ext_3_srv_add_cb,
+ NULL, NULL,
+ custom_ext_3_srv_parse_cb, NULL)) {
+ BIO_printf(bio_err, "Error setting custom extensions\n");
+ goto end;
+ }
+ }
+
+ if (alpn_server)
+ SSL_CTX_set_alpn_select_cb(s_ctx, cb_server_alpn, alpn_server);
+ if (alpn_server2)
+ SSL_CTX_set_alpn_select_cb(s_ctx2, cb_server_alpn, alpn_server2);
+
+ if (alpn_client) {
+ size_t alpn_len;
+ unsigned char *alpn = next_protos_parse(&alpn_len, alpn_client);
+
+ if (alpn == NULL) {
+ BIO_printf(bio_err, "Error parsing -alpn_client argument\n");
+ goto end;
+ }
+ /* Returns 0 on success!! */
+ if (SSL_CTX_set_alpn_protos(c_ctx, alpn, alpn_len)) {
+ BIO_printf(bio_err, "Error setting ALPN\n");
+ OPENSSL_free(alpn);
+ goto end;
+ }
+ OPENSSL_free(alpn);
+ }
+
+ if (server_sess_in != NULL) {
+ server_sess = read_session(server_sess_in);
+ if (server_sess == NULL)
+ goto end;
+ }
+ if (client_sess_in != NULL) {
+ client_sess = read_session(client_sess_in);
+ if (client_sess == NULL)
+ goto end;
+ }
+
+ if (server_sess_out != NULL || server_sess_in != NULL) {
+ char *keys;
+ long size;
+
+ /* Use a fixed key so that we can decrypt the ticket. */
+ size = SSL_CTX_set_tlsext_ticket_keys(s_ctx, NULL, 0);
+ keys = OPENSSL_zalloc(size);
+ if (keys == NULL)
+ goto end;
+ SSL_CTX_set_tlsext_ticket_keys(s_ctx, keys, size);
+ OPENSSL_free(keys);
+ }
+
+ if (sn_server1 != NULL || sn_server2 != NULL)
+ SSL_CTX_set_tlsext_servername_callback(s_ctx, servername_cb);
+
+ c_ssl = SSL_new(c_ctx);
+ s_ssl = SSL_new(s_ctx);
+ if (c_ssl == NULL || s_ssl == NULL)
+ goto end;
+
+ if (sn_client)
+ SSL_set_tlsext_host_name(c_ssl, sn_client);
+ if (client_ktls)
+ SSL_set_options(c_ssl, SSL_OP_ENABLE_KTLS);
+ if (server_ktls)
+ SSL_set_options(s_ssl, SSL_OP_ENABLE_KTLS);
+
+ if (!set_protocol_version(server_min_proto, s_ssl, SSL_CTRL_SET_MIN_PROTO_VERSION))
+ goto end;
+ if (!set_protocol_version(server_max_proto, s_ssl, SSL_CTRL_SET_MAX_PROTO_VERSION))
+ goto end;
+ if (!set_protocol_version(client_min_proto, c_ssl, SSL_CTRL_SET_MIN_PROTO_VERSION))
+ goto end;
+ if (!set_protocol_version(client_max_proto, c_ssl, SSL_CTRL_SET_MAX_PROTO_VERSION))
+ goto end;
+
+ if (server_sess) {
+ if (SSL_CTX_add_session(s_ctx, server_sess) == 0) {
+ BIO_printf(bio_err, "Can't add server session\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ }
+
+ BIO_printf(bio_stdout, "Doing handshakes=%d bytes=%ld\n", number, bytes);
+ for (i = 0; i < number; i++) {
+ if (!reuse) {
+ if (!SSL_set_session(c_ssl, NULL)) {
+ BIO_printf(bio_err, "Failed to set session\n");
+ goto end;
+ }
+ }
+ if (client_sess_in != NULL) {
+ if (SSL_set_session(c_ssl, client_sess) == 0) {
+ BIO_printf(bio_err, "Can't set client session\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ }
+ switch (bio_type) {
+ case BIO_MEM:
+ ret = doit(s_ssl, c_ssl, bytes);
+ break;
+ case BIO_PAIR:
+ ret = doit_biopair(s_ssl, c_ssl, bytes, &s_time, &c_time);
+ break;
+#ifndef OPENSSL_NO_SOCK
+ case BIO_IPV4:
+ ret = doit_localhost(s_ssl, c_ssl, BIO_FAMILY_IPV4,
+ bytes, &s_time, &c_time);
+ break;
+ case BIO_IPV6:
+ ret = doit_localhost(s_ssl, c_ssl, BIO_FAMILY_IPV6,
+ bytes, &s_time, &c_time);
+ break;
+#else
+ case BIO_IPV4:
+ case BIO_IPV6:
+ ret = EXIT_FAILURE;
+ goto end;
+#endif
+ }
+ if (ret != EXIT_SUCCESS)
+ break;
+ }
+
+ if (should_negotiate && ret == EXIT_SUCCESS &&
+ strcmp(should_negotiate, "fail-server") != 0 &&
+ strcmp(should_negotiate, "fail-client") != 0) {
+ int version = protocol_from_string(should_negotiate);
+ if (version < 0) {
+ BIO_printf(bio_err, "Error parsing: %s\n", should_negotiate);
+ ret = EXIT_FAILURE;
+ goto end;
+ }
+ if (SSL_version(c_ssl) != version) {
+ BIO_printf(bio_err, "Unexpected version negotiated. "
+ "Expected: %s, got %s\n", should_negotiate, SSL_get_version(c_ssl));
+ ret = EXIT_FAILURE;
+ goto end;
+ }
+ }
+
+ if (should_reuse != -1) {
+ if (SSL_session_reused(s_ssl) != should_reuse ||
+ SSL_session_reused(c_ssl) != should_reuse) {
+ BIO_printf(bio_err, "Unexpected session reuse state. "
+ "Expected: %d, server: %d, client: %d\n", should_reuse,
+ SSL_session_reused(s_ssl), SSL_session_reused(c_ssl));
+ ret = EXIT_FAILURE;
+ goto end;
+ }
+ }
+
+ if (server_sess_out != NULL) {
+ if (write_session(server_sess_out, SSL_get_session(s_ssl)) == 0) {
+ ret = EXIT_FAILURE;
+ goto end;
+ }
+ }
+ if (client_sess_out != NULL) {
+ if (write_session(client_sess_out, SSL_get_session(c_ssl)) == 0) {
+ ret = EXIT_FAILURE;
+ goto end;
+ }
+ }
+
+ if (!verbose) {
+ print_details(c_ssl, "");
+ }
+ if (print_time) {
+#ifdef CLOCKS_PER_SEC
+ /*
+ * "To determine the time in seconds, the value returned by the clock
+ * function should be divided by the value of the macro
+ * CLOCKS_PER_SEC." -- ISO/IEC 9899
+ */
+ BIO_printf(bio_stdout, "Approximate total server time: %6.2f s\n"
+ "Approximate total client time: %6.2f s\n",
+ (double)s_time / CLOCKS_PER_SEC,
+ (double)c_time / CLOCKS_PER_SEC);
+#else
+ BIO_printf(bio_stdout,
+ "Approximate total server time: %6.2f units\n"
+ "Approximate total client time: %6.2f units\n",
+ (double)s_time, (double)c_time);
+#endif
+ }
+
+ end:
+ SSL_free(s_ssl);
+ SSL_free(c_ssl);
+ SSL_CTX_free(s_ctx);
+ SSL_CTX_free(s_ctx2);
+ SSL_CTX_free(c_ctx);
+ SSL_CONF_CTX_free(s_cctx);
+ SSL_CONF_CTX_free(s_cctx2);
+ SSL_CONF_CTX_free(c_cctx);
+ sk_OPENSSL_STRING_free(conf_args);
+
+ BIO_free(bio_stdout);
+
+ SSL_SESSION_free(server_sess);
+ SSL_SESSION_free(client_sess);
+
+ OSSL_PROVIDER_unload(defctxnull);
+ OSSL_PROVIDER_unload(thisprov);
+ OSSL_LIB_CTX_free(libctx);
+
+ BIO_free(bio_err);
+ EXIT(ret);
+}
+
+#ifndef OPENSSL_NO_SOCK
+int doit_localhost(SSL *s_ssl, SSL *c_ssl, int family, long count,
+ clock_t *s_time, clock_t *c_time)
+{
+ long cw_num = count, cr_num = count, sw_num = count, sr_num = count;
+ BIO *s_ssl_bio = NULL, *c_ssl_bio = NULL;
+ BIO *acpt = NULL, *server = NULL, *client = NULL;
+ char addr_str[40];
+ int ret = EXIT_FAILURE;
+ int err_in_client = 0;
+ int err_in_server = 0;
+
+ acpt = BIO_new_accept(family == BIO_FAMILY_IPV4 ? "127.0.0.1:0"
+ : "[::1]:0");
+ if (acpt == NULL)
+ goto err;
+ BIO_set_accept_ip_family(acpt, family);
+ BIO_set_bind_mode(acpt, BIO_SOCK_NONBLOCK | BIO_SOCK_REUSEADDR);
+ if (BIO_do_accept(acpt) <= 0)
+ goto err;
+
+ BIO_snprintf(addr_str, sizeof(addr_str), ":%s", BIO_get_accept_port(acpt));
+
+ client = BIO_new_connect(addr_str);
+ if (!client)
+ goto err;
+ BIO_set_conn_ip_family(client, family);
+
+ if (BIO_set_nbio(client, 1) <= 0)
+ goto err;
+ if (BIO_set_nbio(acpt, 1) <= 0)
+ goto err;
+
+ {
+ int st_connect = 0, st_accept = 0;
+
+ while(!st_connect || !st_accept) {
+ if (!st_connect) {
+ if (BIO_do_connect(client) <= 0) {
+ if (!BIO_should_retry(client))
+ goto err;
+ } else {
+ st_connect = 1;
+ }
+ }
+ if (!st_accept) {
+ if (BIO_do_accept(acpt) <= 0) {
+ if (!BIO_should_retry(acpt))
+ goto err;
+ } else {
+ st_accept = 1;
+ }
+ }
+ }
+ }
+ /* We're not interested in accepting further connects */
+ server = BIO_pop(acpt);
+ BIO_free_all(acpt);
+ acpt = NULL;
+
+ s_ssl_bio = BIO_new(BIO_f_ssl());
+ if (!s_ssl_bio)
+ goto err;
+
+ c_ssl_bio = BIO_new(BIO_f_ssl());
+ if (!c_ssl_bio)
+ goto err;
+
+ SSL_set_connect_state(c_ssl);
+ SSL_set_bio(c_ssl, client, client);
+ (void)BIO_set_ssl(c_ssl_bio, c_ssl, BIO_NOCLOSE);
+
+ SSL_set_accept_state(s_ssl);
+ SSL_set_bio(s_ssl, server, server);
+ (void)BIO_set_ssl(s_ssl_bio, s_ssl, BIO_NOCLOSE);
+
+ do {
+ /*-
+ * c_ssl_bio: SSL filter BIO
+ *
+ * client: I/O for SSL library
+ *
+ *
+ * server: I/O for SSL library
+ *
+ * s_ssl_bio: SSL filter BIO
+ */
+
+ /*
+ * We have non-blocking behaviour throughout this test program, but
+ * can be sure that there is *some* progress in each iteration; so we
+ * don't have to worry about ..._SHOULD_READ or ..._SHOULD_WRITE --
+ * we just try everything in each iteration
+ */
+
+ {
+ /* CLIENT */
+
+ char cbuf[1024 * 8];
+ int i, r;
+ clock_t c_clock = clock();
+
+ memset(cbuf, 0, sizeof(cbuf));
+
+ if (debug)
+ if (SSL_in_init(c_ssl))
+ printf("client waiting in SSL_connect - %s\n",
+ SSL_state_string_long(c_ssl));
+
+ if (cw_num > 0) {
+ /* Write to server. */
+
+ if (cw_num > (long)sizeof(cbuf))
+ i = sizeof(cbuf);
+ else
+ i = (int)cw_num;
+ r = BIO_write(c_ssl_bio, cbuf, i);
+ if (r < 0) {
+ if (!BIO_should_retry(c_ssl_bio)) {
+ fprintf(stderr, "ERROR in CLIENT (write)\n");
+ err_in_client = 1;
+ goto err;
+ }
+ /*
+ * BIO_should_retry(...) can just be ignored here. The
+ * library expects us to call BIO_write with the same
+ * arguments again, and that's what we will do in the
+ * next iteration.
+ */
+ } else if (r == 0) {
+ fprintf(stderr, "SSL CLIENT STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("client wrote %d\n", r);
+ cw_num -= r;
+ }
+ }
+
+ if (cr_num > 0) {
+ /* Read from server. */
+
+ r = BIO_read(c_ssl_bio, cbuf, sizeof(cbuf));
+ if (r < 0) {
+ if (!BIO_should_retry(c_ssl_bio)) {
+ fprintf(stderr, "ERROR in CLIENT (read)\n");
+ err_in_client = 1;
+ goto err;
+ }
+ /*
+ * Again, "BIO_should_retry" can be ignored.
+ */
+ } else if (r == 0) {
+ fprintf(stderr, "SSL CLIENT STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("client read %d\n", r);
+ cr_num -= r;
+ }
+ }
+
+ /*
+ * c_time and s_time increments will typically be very small
+ * (depending on machine speed and clock tick intervals), but
+ * sampling over a large number of connections should result in
+ * fairly accurate figures. We cannot guarantee a lot, however
+ * -- if each connection lasts for exactly one clock tick, it
+ * will be counted only for the client or only for the server or
+ * even not at all.
+ */
+ *c_time += (clock() - c_clock);
+ }
+
+ {
+ /* SERVER */
+
+ char sbuf[1024 * 8];
+ int i, r;
+ clock_t s_clock = clock();
+
+ memset(sbuf, 0, sizeof(sbuf));
+
+ if (debug)
+ if (SSL_in_init(s_ssl))
+ printf("server waiting in SSL_accept - %s\n",
+ SSL_state_string_long(s_ssl));
+
+ if (sw_num > 0) {
+ /* Write to client. */
+
+ if (sw_num > (long)sizeof(sbuf))
+ i = sizeof(sbuf);
+ else
+ i = (int)sw_num;
+ r = BIO_write(s_ssl_bio, sbuf, i);
+ if (r < 0) {
+ if (!BIO_should_retry(s_ssl_bio)) {
+ fprintf(stderr, "ERROR in SERVER (write)\n");
+ err_in_server = 1;
+ goto err;
+ }
+ /* Ignore "BIO_should_retry". */
+ } else if (r == 0) {
+ fprintf(stderr, "SSL SERVER STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("server wrote %d\n", r);
+ sw_num -= r;
+ }
+ }
+
+ if (sr_num > 0) {
+ /* Read from client. */
+
+ r = BIO_read(s_ssl_bio, sbuf, sizeof(sbuf));
+ if (r < 0) {
+ if (!BIO_should_retry(s_ssl_bio)) {
+ fprintf(stderr, "ERROR in SERVER (read)\n");
+ err_in_server = 1;
+ goto err;
+ }
+ /* blah, blah */
+ } else if (r == 0) {
+ fprintf(stderr, "SSL SERVER STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("server read %d\n", r);
+ sr_num -= r;
+ }
+ }
+
+ *s_time += (clock() - s_clock);
+ }
+ }
+ while (cw_num > 0 || cr_num > 0 || sw_num > 0 || sr_num > 0);
+
+ if (verbose) {
+ print_details(c_ssl, "DONE via TCP connect: ");
+
+ if (BIO_get_ktls_send(SSL_get_wbio(s_ssl))
+ && BIO_get_ktls_recv(SSL_get_rbio(s_ssl)))
+ BIO_printf(bio_stdout, "Server using Kernel TLS in both directions\n");
+ else if (BIO_get_ktls_send(SSL_get_wbio(s_ssl)))
+ BIO_printf(bio_stdout, "Server using Kernel TLS for sending\n");
+ else if (BIO_get_ktls_recv(SSL_get_rbio(s_ssl)))
+ BIO_printf(bio_stdout, "Server using Kernel TLS for receiving\n");
+
+ if (BIO_get_ktls_send(SSL_get_wbio(c_ssl))
+ && BIO_get_ktls_recv(SSL_get_rbio(c_ssl)))
+ BIO_printf(bio_stdout, "Client using Kernel TLS in both directions\n");
+ else if (BIO_get_ktls_send(SSL_get_wbio(c_ssl)))
+ BIO_printf(bio_stdout, "Client using Kernel TLS for sending\n");
+ else if (BIO_get_ktls_recv(SSL_get_rbio(c_ssl)))
+ BIO_printf(bio_stdout, "Client using Kernel TLS for receiving\n");
+ }
+# ifndef OPENSSL_NO_NEXTPROTONEG
+ if (verify_npn(c_ssl, s_ssl) < 0)
+ goto end;
+# endif
+ if (verify_serverinfo() < 0) {
+ fprintf(stderr, "Server info verify error\n");
+ goto err;
+ }
+ if (verify_alpn(c_ssl, s_ssl) < 0
+ || verify_servername(c_ssl, s_ssl) < 0)
+ goto err;
+
+ if (custom_ext_error) {
+ fprintf(stderr, "Custom extension error\n");
+ goto err;
+ }
+
+# ifndef OPENSSL_NO_NEXTPROTONEG
+ end:
+# endif
+ ret = EXIT_SUCCESS;
+
+ err:
+ ERR_print_errors(bio_err);
+
+ BIO_free_all(acpt);
+ BIO_free(server);
+ BIO_free(client);
+ BIO_free(s_ssl_bio);
+ BIO_free(c_ssl_bio);
+
+ if (should_negotiate != NULL && strcmp(should_negotiate, "fail-client") == 0)
+ ret = (err_in_client != 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+ else if (should_negotiate != NULL && strcmp(should_negotiate, "fail-server") == 0)
+ ret = (err_in_server != 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+
+ return ret;
+}
+#endif
+
+int doit_biopair(SSL *s_ssl, SSL *c_ssl, long count,
+ clock_t *s_time, clock_t *c_time)
+{
+ long cw_num = count, cr_num = count, sw_num = count, sr_num = count;
+ BIO *s_ssl_bio = NULL, *c_ssl_bio = NULL;
+ BIO *server = NULL, *server_io = NULL, *client = NULL, *client_io = NULL;
+ int ret = EXIT_FAILURE;
+ int err_in_client = 0;
+ int err_in_server = 0;
+
+ size_t bufsiz = 256; /* small buffer for testing */
+
+ if (!BIO_new_bio_pair(&server, bufsiz, &server_io, bufsiz))
+ goto err;
+ if (!BIO_new_bio_pair(&client, bufsiz, &client_io, bufsiz))
+ goto err;
+
+ s_ssl_bio = BIO_new(BIO_f_ssl());
+ if (!s_ssl_bio)
+ goto err;
+
+ c_ssl_bio = BIO_new(BIO_f_ssl());
+ if (!c_ssl_bio)
+ goto err;
+
+ SSL_set_connect_state(c_ssl);
+ SSL_set_bio(c_ssl, client, client);
+ (void)BIO_set_ssl(c_ssl_bio, c_ssl, BIO_NOCLOSE);
+
+ SSL_set_accept_state(s_ssl);
+ SSL_set_bio(s_ssl, server, server);
+ (void)BIO_set_ssl(s_ssl_bio, s_ssl, BIO_NOCLOSE);
+
+ do {
+ /*-
+ * c_ssl_bio: SSL filter BIO
+ *
+ * client: pseudo-I/O for SSL library
+ *
+ * client_io: client's SSL communication; usually to be
+ * relayed over some I/O facility, but in this
+ * test program, we're the server, too:
+ *
+ * server_io: server's SSL communication
+ *
+ * server: pseudo-I/O for SSL library
+ *
+ * s_ssl_bio: SSL filter BIO
+ *
+ * The client and the server each employ a "BIO pair":
+ * client + client_io, server + server_io.
+ * BIO pairs are symmetric. A BIO pair behaves similar
+ * to a non-blocking socketpair (but both endpoints must
+ * be handled by the same thread).
+ * [Here we could connect client and server to the ends
+ * of a single BIO pair, but then this code would be less
+ * suitable as an example for BIO pairs in general.]
+ *
+ * Useful functions for querying the state of BIO pair endpoints:
+ *
+ * BIO_ctrl_pending(bio) number of bytes we can read now
+ * BIO_ctrl_get_read_request(bio) number of bytes needed to fulfill
+ * other side's read attempt
+ * BIO_ctrl_get_write_guarantee(bio) number of bytes we can write now
+ *
+ * ..._read_request is never more than ..._write_guarantee;
+ * it depends on the application which one you should use.
+ */
+
+ /*
+ * We have non-blocking behaviour throughout this test program, but
+ * can be sure that there is *some* progress in each iteration; so we
+ * don't have to worry about ..._SHOULD_READ or ..._SHOULD_WRITE --
+ * we just try everything in each iteration
+ */
+
+ {
+ /* CLIENT */
+
+ char cbuf[1024 * 8];
+ int i, r;
+ clock_t c_clock = clock();
+
+ memset(cbuf, 0, sizeof(cbuf));
+
+ if (debug)
+ if (SSL_in_init(c_ssl))
+ printf("client waiting in SSL_connect - %s\n",
+ SSL_state_string_long(c_ssl));
+
+ if (cw_num > 0) {
+ /* Write to server. */
+
+ if (cw_num > (long)sizeof(cbuf))
+ i = sizeof(cbuf);
+ else
+ i = (int)cw_num;
+ r = BIO_write(c_ssl_bio, cbuf, i);
+ if (r < 0) {
+ if (!BIO_should_retry(c_ssl_bio)) {
+ fprintf(stderr, "ERROR in CLIENT\n");
+ err_in_client = 1;
+ goto err;
+ }
+ /*
+ * BIO_should_retry(...) can just be ignored here. The
+ * library expects us to call BIO_write with the same
+ * arguments again, and that's what we will do in the
+ * next iteration.
+ */
+ } else if (r == 0) {
+ fprintf(stderr, "SSL CLIENT STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("client wrote %d\n", r);
+ cw_num -= r;
+ }
+ }
+
+ if (cr_num > 0) {
+ /* Read from server. */
+
+ r = BIO_read(c_ssl_bio, cbuf, sizeof(cbuf));
+ if (r < 0) {
+ if (!BIO_should_retry(c_ssl_bio)) {
+ fprintf(stderr, "ERROR in CLIENT\n");
+ err_in_client = 1;
+ goto err;
+ }
+ /*
+ * Again, "BIO_should_retry" can be ignored.
+ */
+ } else if (r == 0) {
+ fprintf(stderr, "SSL CLIENT STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("client read %d\n", r);
+ cr_num -= r;
+ }
+ }
+
+ /*
+ * c_time and s_time increments will typically be very small
+ * (depending on machine speed and clock tick intervals), but
+ * sampling over a large number of connections should result in
+ * fairly accurate figures. We cannot guarantee a lot, however
+ * -- if each connection lasts for exactly one clock tick, it
+ * will be counted only for the client or only for the server or
+ * even not at all.
+ */
+ *c_time += (clock() - c_clock);
+ }
+
+ {
+ /* SERVER */
+
+ char sbuf[1024 * 8];
+ int i, r;
+ clock_t s_clock = clock();
+
+ memset(sbuf, 0, sizeof(sbuf));
+
+ if (debug)
+ if (SSL_in_init(s_ssl))
+ printf("server waiting in SSL_accept - %s\n",
+ SSL_state_string_long(s_ssl));
+
+ if (sw_num > 0) {
+ /* Write to client. */
+
+ if (sw_num > (long)sizeof(sbuf))
+ i = sizeof(sbuf);
+ else
+ i = (int)sw_num;
+ r = BIO_write(s_ssl_bio, sbuf, i);
+ if (r < 0) {
+ if (!BIO_should_retry(s_ssl_bio)) {
+ fprintf(stderr, "ERROR in SERVER\n");
+ err_in_server = 1;
+ goto err;
+ }
+ /* Ignore "BIO_should_retry". */
+ } else if (r == 0) {
+ fprintf(stderr, "SSL SERVER STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("server wrote %d\n", r);
+ sw_num -= r;
+ }
+ }
+
+ if (sr_num > 0) {
+ /* Read from client. */
+
+ r = BIO_read(s_ssl_bio, sbuf, sizeof(sbuf));
+ if (r < 0) {
+ if (!BIO_should_retry(s_ssl_bio)) {
+ fprintf(stderr, "ERROR in SERVER\n");
+ err_in_server = 1;
+ goto err;
+ }
+ /* blah, blah */
+ } else if (r == 0) {
+ fprintf(stderr, "SSL SERVER STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("server read %d\n", r);
+ sr_num -= r;
+ }
+ }
+
+ *s_time += (clock() - s_clock);
+ }
+
+ {
+ /* "I/O" BETWEEN CLIENT AND SERVER. */
+
+ size_t r1, r2;
+ BIO *io1 = server_io, *io2 = client_io;
+ /*
+ * we use the non-copying interface for io1 and the standard
+ * BIO_write/BIO_read interface for io2
+ */
+
+ static int prev_progress = 1;
+ int progress = 0;
+
+ /* io1 to io2 */
+ do {
+ size_t num;
+ int r;
+
+ r1 = BIO_ctrl_pending(io1);
+ r2 = BIO_ctrl_get_write_guarantee(io2);
+
+ num = r1;
+ if (r2 < num)
+ num = r2;
+ if (num) {
+ char *dataptr;
+
+ if (INT_MAX < num) /* yeah, right */
+ num = INT_MAX;
+
+ r = BIO_nread(io1, &dataptr, (int)num);
+ assert(r > 0);
+ assert(r <= (int)num);
+ /*
+ * possibly r < num (non-contiguous data)
+ */
+ num = r;
+ r = BIO_write(io2, dataptr, (int)num);
+ if (r != (int)num) { /* can't happen */
+ fprintf(stderr, "ERROR: BIO_write could not write "
+ "BIO_ctrl_get_write_guarantee() bytes");
+ goto err;
+ }
+ progress = 1;
+
+ if (debug)
+ printf((io1 == client_io) ?
+ "C->S relaying: %d bytes\n" :
+ "S->C relaying: %d bytes\n", (int)num);
+ }
+ }
+ while (r1 && r2);
+
+ /* io2 to io1 */
+ {
+ size_t num;
+ int r;
+
+ r1 = BIO_ctrl_pending(io2);
+ r2 = BIO_ctrl_get_read_request(io1);
+ /*
+ * here we could use ..._get_write_guarantee instead of
+ * ..._get_read_request, but by using the latter we test
+ * restartability of the SSL implementation more thoroughly
+ */
+ num = r1;
+ if (r2 < num)
+ num = r2;
+ if (num) {
+ char *dataptr;
+
+ if (INT_MAX < num)
+ num = INT_MAX;
+
+ if (num > 1)
+ --num; /* test restartability even more thoroughly */
+
+ r = BIO_nwrite0(io1, &dataptr);
+ assert(r > 0);
+ if (r < (int)num)
+ num = r;
+ r = BIO_read(io2, dataptr, (int)num);
+ if (r != (int)num) { /* can't happen */
+ fprintf(stderr, "ERROR: BIO_read could not read "
+ "BIO_ctrl_pending() bytes");
+ goto err;
+ }
+ progress = 1;
+ r = BIO_nwrite(io1, &dataptr, (int)num);
+ if (r != (int)num) { /* can't happen */
+ fprintf(stderr, "ERROR: BIO_nwrite() did not accept "
+ "BIO_nwrite0() bytes");
+ goto err;
+ }
+
+ if (debug)
+ printf((io2 == client_io) ?
+ "C->S relaying: %d bytes\n" :
+ "S->C relaying: %d bytes\n", (int)num);
+ }
+ } /* no loop, BIO_ctrl_get_read_request now
+ * returns 0 anyway */
+
+ if (!progress && !prev_progress)
+ if (cw_num > 0 || cr_num > 0 || sw_num > 0 || sr_num > 0) {
+ fprintf(stderr, "ERROR: got stuck\n");
+ fprintf(stderr, " ERROR.\n");
+ goto err;
+ }
+ prev_progress = progress;
+ }
+ }
+ while (cw_num > 0 || cr_num > 0 || sw_num > 0 || sr_num > 0);
+
+ if (verbose)
+ print_details(c_ssl, "DONE via BIO pair: ");
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ if (verify_npn(c_ssl, s_ssl) < 0)
+ goto end;
+#endif
+ if (verify_serverinfo() < 0) {
+ fprintf(stderr, "Server info verify error\n");
+ goto err;
+ }
+ if (verify_alpn(c_ssl, s_ssl) < 0
+ || verify_servername(c_ssl, s_ssl) < 0)
+ goto err;
+
+ if (custom_ext_error) {
+ fprintf(stderr, "Custom extension error\n");
+ goto err;
+ }
+
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ end:
+#endif
+ ret = EXIT_SUCCESS;
+
+ err:
+ ERR_print_errors(bio_err);
+
+ BIO_free(server);
+ BIO_free(server_io);
+ BIO_free(client);
+ BIO_free(client_io);
+ BIO_free(s_ssl_bio);
+ BIO_free(c_ssl_bio);
+
+ if (should_negotiate != NULL && strcmp(should_negotiate, "fail-client") == 0)
+ ret = (err_in_client != 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+ else if (should_negotiate != NULL && strcmp(should_negotiate, "fail-server") == 0)
+ ret = (err_in_server != 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+
+ return ret;
+}
+
+#define W_READ 1
+#define W_WRITE 2
+#define C_DONE 1
+#define S_DONE 2
+
+int doit(SSL *s_ssl, SSL *c_ssl, long count)
+{
+ char *cbuf = NULL, *sbuf = NULL;
+ long bufsiz;
+ long cw_num = count, cr_num = count;
+ long sw_num = count, sr_num = count;
+ int ret = EXIT_FAILURE;
+ BIO *c_to_s = NULL;
+ BIO *s_to_c = NULL;
+ BIO *c_bio = NULL;
+ BIO *s_bio = NULL;
+ int c_r, c_w, s_r, s_w;
+ int i, j;
+ int done = 0;
+ int c_write, s_write;
+ int do_server = 0, do_client = 0;
+ int max_frag = 5 * 1024;
+ int err_in_client = 0;
+ int err_in_server = 0;
+
+ bufsiz = count > 40 * 1024 ? 40 * 1024 : count;
+
+ if ((cbuf = OPENSSL_zalloc(bufsiz)) == NULL)
+ goto err;
+ if ((sbuf = OPENSSL_zalloc(bufsiz)) == NULL)
+ goto err;
+
+ c_to_s = BIO_new(BIO_s_mem());
+ s_to_c = BIO_new(BIO_s_mem());
+ if ((s_to_c == NULL) || (c_to_s == NULL)) {
+ ERR_print_errors(bio_err);
+ goto err;
+ }
+
+ c_bio = BIO_new(BIO_f_ssl());
+ s_bio = BIO_new(BIO_f_ssl());
+ if ((c_bio == NULL) || (s_bio == NULL)) {
+ ERR_print_errors(bio_err);
+ goto err;
+ }
+
+ SSL_set_connect_state(c_ssl);
+ SSL_set_bio(c_ssl, s_to_c, c_to_s);
+ SSL_set_max_send_fragment(c_ssl, max_frag);
+ BIO_set_ssl(c_bio, c_ssl, BIO_NOCLOSE);
+
+ /*
+ * We've just given our ref to these BIOs to c_ssl. We need another one to
+ * give to s_ssl
+ */
+ if (!BIO_up_ref(c_to_s)) {
+ /* c_to_s and s_to_c will get freed when we free c_ssl */
+ c_to_s = NULL;
+ s_to_c = NULL;
+ goto err;
+ }
+ if (!BIO_up_ref(s_to_c)) {
+ /* s_to_c will get freed when we free c_ssl */
+ s_to_c = NULL;
+ goto err;
+ }
+
+ SSL_set_accept_state(s_ssl);
+ SSL_set_bio(s_ssl, c_to_s, s_to_c);
+
+ /* We've used up all our refs to these now */
+ c_to_s = NULL;
+ s_to_c = NULL;
+
+ SSL_set_max_send_fragment(s_ssl, max_frag);
+ BIO_set_ssl(s_bio, s_ssl, BIO_NOCLOSE);
+
+ c_r = 0;
+ s_r = 1;
+ c_w = 1;
+ s_w = 0;
+ c_write = 1, s_write = 0;
+
+ /* We can always do writes */
+ for (;;) {
+ do_server = 0;
+ do_client = 0;
+
+ i = (int)BIO_pending(s_bio);
+ if ((i && s_r) || s_w)
+ do_server = 1;
+
+ i = (int)BIO_pending(c_bio);
+ if ((i && c_r) || c_w)
+ do_client = 1;
+
+ if (do_server && debug) {
+ if (SSL_in_init(s_ssl))
+ printf("server waiting in SSL_accept - %s\n",
+ SSL_state_string_long(s_ssl));
+ }
+
+ if (do_client && debug) {
+ if (SSL_in_init(c_ssl))
+ printf("client waiting in SSL_connect - %s\n",
+ SSL_state_string_long(c_ssl));
+ }
+
+ if (!do_client && !do_server) {
+ fprintf(stdout, "ERROR IN STARTUP\n");
+ ERR_print_errors(bio_err);
+ goto err;
+ }
+ if (do_client && !(done & C_DONE)) {
+ if (c_write) {
+ j = (cw_num > bufsiz) ? (int)bufsiz : (int)cw_num;
+ i = BIO_write(c_bio, cbuf, j);
+ if (i < 0) {
+ c_r = 0;
+ c_w = 0;
+ if (BIO_should_retry(c_bio)) {
+ if (BIO_should_read(c_bio))
+ c_r = 1;
+ if (BIO_should_write(c_bio))
+ c_w = 1;
+ } else {
+ fprintf(stderr, "ERROR in CLIENT\n");
+ err_in_client = 1;
+ ERR_print_errors(bio_err);
+ goto err;
+ }
+ } else if (i == 0) {
+ fprintf(stderr, "SSL CLIENT STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("client wrote %d\n", i);
+ /* ok */
+ s_r = 1;
+ c_write = 0;
+ cw_num -= i;
+ if (max_frag > 1029)
+ SSL_set_max_send_fragment(c_ssl, max_frag -= 5);
+ }
+ } else {
+ i = BIO_read(c_bio, cbuf, bufsiz);
+ if (i < 0) {
+ c_r = 0;
+ c_w = 0;
+ if (BIO_should_retry(c_bio)) {
+ if (BIO_should_read(c_bio))
+ c_r = 1;
+ if (BIO_should_write(c_bio))
+ c_w = 1;
+ } else {
+ fprintf(stderr, "ERROR in CLIENT\n");
+ err_in_client = 1;
+ ERR_print_errors(bio_err);
+ goto err;
+ }
+ } else if (i == 0) {
+ fprintf(stderr, "SSL CLIENT STARTUP FAILED\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("client read %d\n", i);
+ cr_num -= i;
+ if (sw_num > 0) {
+ s_write = 1;
+ s_w = 1;
+ }
+ if (cr_num <= 0) {
+ s_write = 1;
+ s_w = 1;
+ done = S_DONE | C_DONE;
+ }
+ }
+ }
+ }
+
+ if (do_server && !(done & S_DONE)) {
+ if (!s_write) {
+ i = BIO_read(s_bio, sbuf, bufsiz);
+ if (i < 0) {
+ s_r = 0;
+ s_w = 0;
+ if (BIO_should_retry(s_bio)) {
+ if (BIO_should_read(s_bio))
+ s_r = 1;
+ if (BIO_should_write(s_bio))
+ s_w = 1;
+ } else {
+ fprintf(stderr, "ERROR in SERVER\n");
+ err_in_server = 1;
+ ERR_print_errors(bio_err);
+ goto err;
+ }
+ } else if (i == 0) {
+ ERR_print_errors(bio_err);
+ fprintf(stderr,
+ "SSL SERVER STARTUP FAILED in SSL_read\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("server read %d\n", i);
+ sr_num -= i;
+ if (cw_num > 0) {
+ c_write = 1;
+ c_w = 1;
+ }
+ if (sr_num <= 0) {
+ s_write = 1;
+ s_w = 1;
+ c_write = 0;
+ }
+ }
+ } else {
+ j = (sw_num > bufsiz) ? (int)bufsiz : (int)sw_num;
+ i = BIO_write(s_bio, sbuf, j);
+ if (i < 0) {
+ s_r = 0;
+ s_w = 0;
+ if (BIO_should_retry(s_bio)) {
+ if (BIO_should_read(s_bio))
+ s_r = 1;
+ if (BIO_should_write(s_bio))
+ s_w = 1;
+ } else {
+ fprintf(stderr, "ERROR in SERVER\n");
+ err_in_server = 1;
+ ERR_print_errors(bio_err);
+ goto err;
+ }
+ } else if (i == 0) {
+ ERR_print_errors(bio_err);
+ fprintf(stderr,
+ "SSL SERVER STARTUP FAILED in SSL_write\n");
+ goto err;
+ } else {
+ if (debug)
+ printf("server wrote %d\n", i);
+ sw_num -= i;
+ s_write = 0;
+ c_r = 1;
+ if (sw_num <= 0)
+ done |= S_DONE;
+ if (max_frag > 1029)
+ SSL_set_max_send_fragment(s_ssl, max_frag -= 5);
+ }
+ }
+ }
+
+ if ((done & S_DONE) && (done & C_DONE))
+ break;
+ }
+
+ if (verbose)
+ print_details(c_ssl, "DONE: ");
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ if (verify_npn(c_ssl, s_ssl) < 0)
+ goto err;
+#endif
+ if (verify_serverinfo() < 0) {
+ fprintf(stderr, "Server info verify error\n");
+ goto err;
+ }
+ if (custom_ext_error) {
+ fprintf(stderr, "Custom extension error\n");
+ goto err;
+ }
+ ret = EXIT_SUCCESS;
+ err:
+ BIO_free(c_to_s);
+ BIO_free(s_to_c);
+ BIO_free_all(c_bio);
+ BIO_free_all(s_bio);
+ OPENSSL_free(cbuf);
+ OPENSSL_free(sbuf);
+
+ if (should_negotiate != NULL && strcmp(should_negotiate, "fail-client") == 0)
+ ret = (err_in_client != 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+ else if (should_negotiate != NULL && strcmp(should_negotiate, "fail-server") == 0)
+ ret = (err_in_server != 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+
+ return ret;
+}
+
+static int verify_callback(int ok, X509_STORE_CTX *ctx)
+{
+ char *s, buf[256];
+
+ s = X509_NAME_oneline(X509_get_subject_name(X509_STORE_CTX_get_current_cert(ctx)),
+ buf, sizeof(buf));
+ if (s != NULL) {
+ if (ok)
+ printf("depth=%d %s\n", X509_STORE_CTX_get_error_depth(ctx), buf);
+ else {
+ fprintf(stderr, "depth=%d error=%d %s\n",
+ X509_STORE_CTX_get_error_depth(ctx),
+ X509_STORE_CTX_get_error(ctx), buf);
+ }
+ }
+
+ if (ok == 0) {
+ int i = X509_STORE_CTX_get_error(ctx);
+
+ switch (i) {
+ default:
+ fprintf(stderr, "Error string: %s\n",
+ X509_verify_cert_error_string(i));
+ break;
+ case X509_V_ERR_CERT_NOT_YET_VALID:
+ case X509_V_ERR_CERT_HAS_EXPIRED:
+ case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
+ ok = 1;
+ break;
+ }
+ }
+
+ return ok;
+}
+
+static int app_verify_callback(X509_STORE_CTX *ctx, void *arg)
+{
+ int ok = 1;
+ struct app_verify_arg *cb_arg = arg;
+
+ if (cb_arg->app_verify) {
+ char *s = NULL, buf[256];
+ X509 *c = X509_STORE_CTX_get0_cert(ctx);
+
+ printf("In app_verify_callback, allowing cert. ");
+ printf("Arg is: %s\n", cb_arg->string);
+ printf("Finished printing do we have a context? 0x%p a cert? 0x%p\n",
+ (void *)ctx, (void *)c);
+ if (c)
+ s = X509_NAME_oneline(X509_get_subject_name(c), buf, 256);
+ if (s != NULL) {
+ printf("cert depth=%d %s\n",
+ X509_STORE_CTX_get_error_depth(ctx), buf);
+ }
+ return 1;
+ }
+
+ ok = X509_verify_cert(ctx);
+
+ return ok;
+}
+
+#ifndef OPENSSL_NO_PSK
+/* convert the PSK key (psk_key) in ascii to binary (psk) */
+static int psk_key2bn(const char *pskkey, unsigned char *psk,
+ unsigned int max_psk_len)
+{
+ int ret;
+ BIGNUM *bn = NULL;
+
+ ret = BN_hex2bn(&bn, pskkey);
+ if (!ret) {
+ BIO_printf(bio_err, "Could not convert PSK key '%s' to BIGNUM\n",
+ pskkey);
+ BN_free(bn);
+ return 0;
+ }
+ if (BN_num_bytes(bn) > (int)max_psk_len) {
+ BIO_printf(bio_err,
+ "psk buffer of callback is too small (%d) for key (%d)\n",
+ max_psk_len, BN_num_bytes(bn));
+ BN_free(bn);
+ return 0;
+ }
+ ret = BN_bn2bin(bn, psk);
+ BN_free(bn);
+ return ret;
+}
+
+static unsigned int psk_client_callback(SSL *ssl, const char *hint,
+ char *identity,
+ unsigned int max_identity_len,
+ unsigned char *psk,
+ unsigned int max_psk_len)
+{
+ int ret;
+ unsigned int psk_len = 0;
+
+ ret = BIO_snprintf(identity, max_identity_len, "Client_identity");
+ if (ret < 0)
+ goto out_err;
+ if (debug)
+ fprintf(stderr, "client: created identity '%s' len=%d\n", identity,
+ ret);
+ ret = psk_key2bn(psk_key, psk, max_psk_len);
+ if (ret < 0)
+ goto out_err;
+ psk_len = ret;
+ out_err:
+ return psk_len;
+}
+
+static unsigned int psk_server_callback(SSL *ssl, const char *identity,
+ unsigned char *psk,
+ unsigned int max_psk_len)
+{
+ unsigned int psk_len = 0;
+
+ if (strcmp(identity, "Client_identity") != 0) {
+ BIO_printf(bio_err, "server: PSK error: client identity not found\n");
+ return 0;
+ }
+ psk_len = psk_key2bn(psk_key, psk, max_psk_len);
+ return psk_len;
+}
+#endif
diff --git a/test/ssl_test.c b/test/ssl_test.c
new file mode 100644
index 000000000000..4c2553ce27c1
--- /dev/null
+++ b/test/ssl_test.c
@@ -0,0 +1,570 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/conf.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+#include <openssl/provider.h>
+
+#include "helpers/handshake.h"
+#include "helpers/ssl_test_ctx.h"
+#include "testutil.h"
+
+static CONF *conf = NULL;
+static OSSL_PROVIDER *defctxnull = NULL, *thisprov = NULL;
+static OSSL_LIB_CTX *libctx = NULL;
+
+/* Currently the section names are of the form test-<number>, e.g. test-15. */
+#define MAX_TESTCASE_NAME_LENGTH 100
+
+static const char *print_alert(int alert)
+{
+ return alert ? SSL_alert_desc_string_long(alert) : "no alert";
+}
+
+static int check_result(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ if (!TEST_int_eq(result->result, test_ctx->expected_result)) {
+ TEST_info("ExpectedResult mismatch: expected %s, got %s.",
+ ssl_test_result_name(test_ctx->expected_result),
+ ssl_test_result_name(result->result));
+ return 0;
+ }
+ return 1;
+}
+
+static int check_alerts(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ if (!TEST_int_eq(result->client_alert_sent,
+ result->client_alert_received)) {
+ TEST_info("Client sent alert %s but server received %s.",
+ print_alert(result->client_alert_sent),
+ print_alert(result->client_alert_received));
+ /*
+ * We can't bail here because the peer doesn't always get far enough
+ * to process a received alert. Specifically, in protocol version
+ * negotiation tests, we have the following scenario.
+ * Client supports TLS v1.2 only; Server supports TLS v1.1.
+ * Client proposes TLS v1.2; server responds with 1.1;
+ * Client now sends a protocol alert, using TLS v1.2 in the header.
+ * The server, however, rejects the alert because of version mismatch
+ * in the record layer; therefore, the server appears to never
+ * receive the alert.
+ */
+ /* return 0; */
+ }
+
+ if (!TEST_int_eq(result->server_alert_sent,
+ result->server_alert_received)) {
+ TEST_info("Server sent alert %s but client received %s.",
+ print_alert(result->server_alert_sent),
+ print_alert(result->server_alert_received));
+ /* return 0; */
+ }
+
+ /* Tolerate an alert if one wasn't explicitly specified in the test. */
+ if (test_ctx->expected_client_alert
+ /*
+ * The info callback alert value is computed as
+ * (s->s3->send_alert[0] << 8) | s->s3->send_alert[1]
+ * where the low byte is the alert code and the high byte is other stuff.
+ */
+ && (result->client_alert_sent & 0xff) != test_ctx->expected_client_alert) {
+ TEST_error("ClientAlert mismatch: expected %s, got %s.",
+ print_alert(test_ctx->expected_client_alert),
+ print_alert(result->client_alert_sent));
+ return 0;
+ }
+
+ if (test_ctx->expected_server_alert
+ && (result->server_alert_sent & 0xff) != test_ctx->expected_server_alert) {
+ TEST_error("ServerAlert mismatch: expected %s, got %s.",
+ print_alert(test_ctx->expected_server_alert),
+ print_alert(result->server_alert_sent));
+ return 0;
+ }
+
+ if (!TEST_int_le(result->client_num_fatal_alerts_sent, 1))
+ return 0;
+ if (!TEST_int_le(result->server_num_fatal_alerts_sent, 1))
+ return 0;
+ return 1;
+}
+
+static int check_protocol(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ if (!TEST_int_eq(result->client_protocol, result->server_protocol)) {
+ TEST_info("Client has protocol %s but server has %s.",
+ ssl_protocol_name(result->client_protocol),
+ ssl_protocol_name(result->server_protocol));
+ return 0;
+ }
+
+ if (test_ctx->expected_protocol) {
+ if (!TEST_int_eq(result->client_protocol,
+ test_ctx->expected_protocol)) {
+ TEST_info("Protocol mismatch: expected %s, got %s.\n",
+ ssl_protocol_name(test_ctx->expected_protocol),
+ ssl_protocol_name(result->client_protocol));
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int check_servername(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ if (!TEST_int_eq(result->servername, test_ctx->expected_servername)) {
+ TEST_info("Client ServerName mismatch, expected %s, got %s.",
+ ssl_servername_name(test_ctx->expected_servername),
+ ssl_servername_name(result->servername));
+ return 0;
+ }
+ return 1;
+}
+
+static int check_session_ticket(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ if (test_ctx->session_ticket_expected == SSL_TEST_SESSION_TICKET_IGNORE)
+ return 1;
+ if (!TEST_int_eq(result->session_ticket,
+ test_ctx->session_ticket_expected)) {
+ TEST_info("Client SessionTicketExpected mismatch, expected %s, got %s.",
+ ssl_session_ticket_name(test_ctx->session_ticket_expected),
+ ssl_session_ticket_name(result->session_ticket));
+ return 0;
+ }
+ return 1;
+}
+
+static int check_session_id(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ if (test_ctx->session_id_expected == SSL_TEST_SESSION_ID_IGNORE)
+ return 1;
+ if (!TEST_int_eq(result->session_id, test_ctx->session_id_expected)) {
+ TEST_info("Client SessionIdExpected mismatch, expected %s, got %s\n.",
+ ssl_session_id_name(test_ctx->session_id_expected),
+ ssl_session_id_name(result->session_id));
+ return 0;
+ }
+ return 1;
+}
+
+static int check_compression(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ if (!TEST_int_eq(result->compression, test_ctx->compression_expected))
+ return 0;
+ return 1;
+}
+#ifndef OPENSSL_NO_NEXTPROTONEG
+static int check_npn(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ int ret = 1;
+ if (!TEST_str_eq(result->client_npn_negotiated,
+ result->server_npn_negotiated))
+ ret = 0;
+ if (!TEST_str_eq(test_ctx->expected_npn_protocol,
+ result->client_npn_negotiated))
+ ret = 0;
+ return ret;
+}
+#endif
+
+static int check_alpn(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ int ret = 1;
+ if (!TEST_str_eq(result->client_alpn_negotiated,
+ result->server_alpn_negotiated))
+ ret = 0;
+ if (!TEST_str_eq(test_ctx->expected_alpn_protocol,
+ result->client_alpn_negotiated))
+ ret = 0;
+ return ret;
+}
+
+static int check_session_ticket_app_data(HANDSHAKE_RESULT *result,
+ SSL_TEST_CTX *test_ctx)
+{
+ size_t result_len = 0;
+ size_t expected_len = 0;
+
+ /* consider empty and NULL strings to be the same */
+ if (result->result_session_ticket_app_data != NULL)
+ result_len = strlen(result->result_session_ticket_app_data);
+ if (test_ctx->expected_session_ticket_app_data != NULL)
+ expected_len = strlen(test_ctx->expected_session_ticket_app_data);
+ if (result_len == 0 && expected_len == 0)
+ return 1;
+
+ if (!TEST_str_eq(result->result_session_ticket_app_data,
+ test_ctx->expected_session_ticket_app_data))
+ return 0;
+
+ return 1;
+}
+
+static int check_resumption(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ if (!TEST_int_eq(result->client_resumed, result->server_resumed))
+ return 0;
+ if (!TEST_int_eq(result->client_resumed, test_ctx->resumption_expected))
+ return 0;
+ return 1;
+}
+
+static int check_nid(const char *name, int expected_nid, int nid)
+{
+ if (expected_nid == 0 || expected_nid == nid)
+ return 1;
+ TEST_error("%s type mismatch, %s vs %s\n",
+ name, OBJ_nid2ln(expected_nid),
+ nid == NID_undef ? "absent" : OBJ_nid2ln(nid));
+ return 0;
+}
+
+static void print_ca_names(STACK_OF(X509_NAME) *names)
+{
+ int i;
+
+ if (names == NULL || sk_X509_NAME_num(names) == 0) {
+ TEST_note(" <empty>");
+ return;
+ }
+ for (i = 0; i < sk_X509_NAME_num(names); i++) {
+ X509_NAME_print_ex(bio_err, sk_X509_NAME_value(names, i), 4,
+ XN_FLAG_ONELINE);
+ BIO_puts(bio_err, "\n");
+ }
+}
+
+static int check_ca_names(const char *name,
+ STACK_OF(X509_NAME) *expected_names,
+ STACK_OF(X509_NAME) *names)
+{
+ int i;
+
+ if (expected_names == NULL)
+ return 1;
+ if (names == NULL || sk_X509_NAME_num(names) == 0) {
+ if (TEST_int_eq(sk_X509_NAME_num(expected_names), 0))
+ return 1;
+ goto err;
+ }
+ if (sk_X509_NAME_num(names) != sk_X509_NAME_num(expected_names))
+ goto err;
+ for (i = 0; i < sk_X509_NAME_num(names); i++) {
+ if (!TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(names, i),
+ sk_X509_NAME_value(expected_names, i)),
+ 0)) {
+ goto err;
+ }
+ }
+ return 1;
+err:
+ TEST_info("%s: list mismatch", name);
+ TEST_note("Expected Names:");
+ print_ca_names(expected_names);
+ TEST_note("Received Names:");
+ print_ca_names(names);
+ return 0;
+}
+
+static int check_tmp_key(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ return check_nid("Tmp key", test_ctx->expected_tmp_key_type,
+ result->tmp_key_type);
+}
+
+static int check_server_cert_type(HANDSHAKE_RESULT *result,
+ SSL_TEST_CTX *test_ctx)
+{
+ return check_nid("Server certificate", test_ctx->expected_server_cert_type,
+ result->server_cert_type);
+}
+
+static int check_server_sign_hash(HANDSHAKE_RESULT *result,
+ SSL_TEST_CTX *test_ctx)
+{
+ return check_nid("Server signing hash", test_ctx->expected_server_sign_hash,
+ result->server_sign_hash);
+}
+
+static int check_server_sign_type(HANDSHAKE_RESULT *result,
+ SSL_TEST_CTX *test_ctx)
+{
+ return check_nid("Server signing", test_ctx->expected_server_sign_type,
+ result->server_sign_type);
+}
+
+static int check_server_ca_names(HANDSHAKE_RESULT *result,
+ SSL_TEST_CTX *test_ctx)
+{
+ return check_ca_names("Server CA names",
+ test_ctx->expected_server_ca_names,
+ result->server_ca_names);
+}
+
+static int check_client_cert_type(HANDSHAKE_RESULT *result,
+ SSL_TEST_CTX *test_ctx)
+{
+ return check_nid("Client certificate", test_ctx->expected_client_cert_type,
+ result->client_cert_type);
+}
+
+static int check_client_sign_hash(HANDSHAKE_RESULT *result,
+ SSL_TEST_CTX *test_ctx)
+{
+ return check_nid("Client signing hash", test_ctx->expected_client_sign_hash,
+ result->client_sign_hash);
+}
+
+static int check_client_sign_type(HANDSHAKE_RESULT *result,
+ SSL_TEST_CTX *test_ctx)
+{
+ return check_nid("Client signing", test_ctx->expected_client_sign_type,
+ result->client_sign_type);
+}
+
+static int check_client_ca_names(HANDSHAKE_RESULT *result,
+ SSL_TEST_CTX *test_ctx)
+{
+ return check_ca_names("Client CA names",
+ test_ctx->expected_client_ca_names,
+ result->client_ca_names);
+}
+
+static int check_cipher(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ if (test_ctx->expected_cipher == NULL)
+ return 1;
+ if (!TEST_ptr(result->cipher))
+ return 0;
+ if (!TEST_str_eq(test_ctx->expected_cipher,
+ result->cipher))
+ return 0;
+ return 1;
+}
+
+/*
+ * This could be further simplified by constructing an expected
+ * HANDSHAKE_RESULT, and implementing comparison methods for
+ * its fields.
+ */
+static int check_test(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+{
+ int ret = 1;
+ ret &= check_result(result, test_ctx);
+ ret &= check_alerts(result, test_ctx);
+ if (result->result == SSL_TEST_SUCCESS) {
+ ret &= check_protocol(result, test_ctx);
+ ret &= check_servername(result, test_ctx);
+ ret &= check_session_ticket(result, test_ctx);
+ ret &= check_compression(result, test_ctx);
+ ret &= check_session_id(result, test_ctx);
+ ret &= (result->session_ticket_do_not_call == 0);
+#ifndef OPENSSL_NO_NEXTPROTONEG
+ ret &= check_npn(result, test_ctx);
+#endif
+ ret &= check_cipher(result, test_ctx);
+ ret &= check_alpn(result, test_ctx);
+ ret &= check_session_ticket_app_data(result, test_ctx);
+ ret &= check_resumption(result, test_ctx);
+ ret &= check_tmp_key(result, test_ctx);
+ ret &= check_server_cert_type(result, test_ctx);
+ ret &= check_server_sign_hash(result, test_ctx);
+ ret &= check_server_sign_type(result, test_ctx);
+ ret &= check_server_ca_names(result, test_ctx);
+ ret &= check_client_cert_type(result, test_ctx);
+ ret &= check_client_sign_hash(result, test_ctx);
+ ret &= check_client_sign_type(result, test_ctx);
+ ret &= check_client_ca_names(result, test_ctx);
+ }
+ return ret;
+}
+
+static int test_handshake(int idx)
+{
+ int ret = 0;
+ SSL_CTX *server_ctx = NULL, *server2_ctx = NULL, *client_ctx = NULL,
+ *resume_server_ctx = NULL, *resume_client_ctx = NULL;
+ SSL_TEST_CTX *test_ctx = NULL;
+ HANDSHAKE_RESULT *result = NULL;
+ char test_app[MAX_TESTCASE_NAME_LENGTH];
+
+ BIO_snprintf(test_app, sizeof(test_app), "test-%d", idx);
+
+ test_ctx = SSL_TEST_CTX_create(conf, test_app, libctx);
+ if (!TEST_ptr(test_ctx))
+ goto err;
+
+#ifndef OPENSSL_NO_DTLS
+ if (test_ctx->method == SSL_TEST_METHOD_DTLS) {
+ server_ctx = SSL_CTX_new_ex(libctx, NULL, DTLS_server_method());
+ if (!TEST_true(SSL_CTX_set_options(server_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION))
+ || !TEST_true(SSL_CTX_set_max_proto_version(server_ctx, 0)))
+ goto err;
+ if (test_ctx->extra.server.servername_callback !=
+ SSL_TEST_SERVERNAME_CB_NONE) {
+ if (!TEST_ptr(server2_ctx =
+ SSL_CTX_new_ex(libctx, NULL, DTLS_server_method()))
+ || !TEST_true(SSL_CTX_set_options(server2_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
+ goto err;
+ }
+ client_ctx = SSL_CTX_new_ex(libctx, NULL, DTLS_client_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(client_ctx, 0)))
+ goto err;
+ if (test_ctx->handshake_mode == SSL_TEST_HANDSHAKE_RESUME) {
+ resume_server_ctx = SSL_CTX_new_ex(libctx, NULL,
+ DTLS_server_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(resume_server_ctx, 0))
+ || !TEST_true(SSL_CTX_set_options(resume_server_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
+ goto err;
+ resume_client_ctx = SSL_CTX_new_ex(libctx, NULL,
+ DTLS_client_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(resume_client_ctx, 0)))
+ goto err;
+ if (!TEST_ptr(resume_server_ctx)
+ || !TEST_ptr(resume_client_ctx))
+ goto err;
+ }
+ }
+#endif
+ if (test_ctx->method == SSL_TEST_METHOD_TLS) {
+#if !defined(OPENSSL_NO_TLS1_3) \
+ && defined(OPENSSL_NO_EC) \
+ && defined(OPENSSL_NO_DH)
+ /* Without ec or dh there are no built-in groups for TLSv1.3 */
+ int maxversion = TLS1_2_VERSION;
+#else
+ int maxversion = 0;
+#endif
+
+ server_ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(server_ctx, maxversion))
+ || !TEST_true(SSL_CTX_set_options(server_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
+ goto err;
+ /* SNI on resumption isn't supported/tested yet. */
+ if (test_ctx->extra.server.servername_callback !=
+ SSL_TEST_SERVERNAME_CB_NONE) {
+ if (!TEST_ptr(server2_ctx =
+ SSL_CTX_new_ex(libctx, NULL, TLS_server_method()))
+ || !TEST_true(SSL_CTX_set_options(server2_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
+ goto err;
+ if (!TEST_true(SSL_CTX_set_max_proto_version(server2_ctx,
+ maxversion)))
+ goto err;
+ }
+ client_ctx = SSL_CTX_new_ex(libctx, NULL, TLS_client_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(client_ctx, maxversion)))
+ goto err;
+
+ if (test_ctx->handshake_mode == SSL_TEST_HANDSHAKE_RESUME) {
+ resume_server_ctx = SSL_CTX_new_ex(libctx, NULL,
+ TLS_server_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(resume_server_ctx,
+ maxversion))
+ || !TEST_true(SSL_CTX_set_options(resume_server_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
+ goto err;
+ resume_client_ctx = SSL_CTX_new_ex(libctx, NULL,
+ TLS_client_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(resume_client_ctx,
+ maxversion)))
+ goto err;
+ if (!TEST_ptr(resume_server_ctx)
+ || !TEST_ptr(resume_client_ctx))
+ goto err;
+ }
+ }
+
+#ifdef OPENSSL_NO_AUTOLOAD_CONFIG
+ if (!TEST_true(OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL)))
+ goto err;
+#endif
+
+ if (!TEST_ptr(server_ctx)
+ || !TEST_ptr(client_ctx)
+ || !TEST_int_gt(CONF_modules_load(conf, test_app, 0), 0))
+ goto err;
+
+ if (!SSL_CTX_config(server_ctx, "server")
+ || !SSL_CTX_config(client_ctx, "client")) {
+ goto err;
+ }
+
+ if (server2_ctx != NULL && !SSL_CTX_config(server2_ctx, "server2"))
+ goto err;
+ if (resume_server_ctx != NULL
+ && !SSL_CTX_config(resume_server_ctx, "resume-server"))
+ goto err;
+ if (resume_client_ctx != NULL
+ && !SSL_CTX_config(resume_client_ctx, "resume-client"))
+ goto err;
+
+ result = do_handshake(server_ctx, server2_ctx, client_ctx,
+ resume_server_ctx, resume_client_ctx, test_ctx);
+
+ if (result != NULL)
+ ret = check_test(result, test_ctx);
+
+err:
+ CONF_modules_unload(0);
+ SSL_CTX_free(server_ctx);
+ SSL_CTX_free(server2_ctx);
+ SSL_CTX_free(client_ctx);
+ SSL_CTX_free(resume_server_ctx);
+ SSL_CTX_free(resume_client_ctx);
+ SSL_TEST_CTX_free(test_ctx);
+ HANDSHAKE_RESULT_free(result);
+ return ret;
+}
+
+#define USAGE "conf_file module_name [module_conf_file]\n"
+OPT_TEST_DECLARE_USAGE(USAGE)
+
+int setup_tests(void)
+{
+ long num_tests;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(conf = NCONF_new(NULL))
+ /* argv[1] should point to the test conf file */
+ || !TEST_int_gt(NCONF_load(conf, test_get_argument(0), NULL), 0)
+ || !TEST_int_ne(NCONF_get_number_e(conf, NULL, "num_tests",
+ &num_tests), 0)) {
+ TEST_error("usage: ssl_test %s", USAGE);
+ return 0;
+ }
+
+ if (!test_arg_libctx(&libctx, &defctxnull, &thisprov, 1, USAGE))
+ return 0;
+
+ ADD_ALL_TESTS(test_handshake, (int)num_tests);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ NCONF_free(conf);
+ OSSL_PROVIDER_unload(defctxnull);
+ OSSL_PROVIDER_unload(thisprov);
+ OSSL_LIB_CTX_free(libctx);
+}
diff --git a/test/ssl_test.tmpl b/test/ssl_test.tmpl
new file mode 100644
index 000000000000..9506837f84e5
--- /dev/null
+++ b/test/ssl_test.tmpl
@@ -0,0 +1,126 @@
+[{-$testname-}]
+ssl_conf = {-$testname-}-ssl
+
+[{-$testname-}-ssl]
+server = {-$testname-}-server
+client = {-$testname-}-client{-
+ # The following sections are optional.
+ $OUT = "";
+ if (%server2) {
+ $OUT .= "\nserver2 = $testname-server2";
+ } elsif ($reuse_server2) {
+ $OUT .= "\nserver2 = $testname-server";
+ }
+ if (%resume_server) {
+ $OUT .= "\nresume-server = $testname-resume-server";
+ } elsif ($reuse_resume_server) {
+ $OUT .= "\nresume-server = $testname-server";
+ }
+ if (%resume_client) {
+ $OUT .= "\nresume-client = $testname-resume-client";
+ } elsif ($reuse_resume_client) {
+ $OUT .= "\nresume-client = $testname-client";
+ }
+-}
+
+[{-$testname-}-server]
+{-
+ foreach my $key (sort keys %server) {
+ # Emitted in the test section.
+ next if ($key eq "extra");
+ $OUT .= qq{$key} . " = " . qq{$server{$key}\n} if defined $server{$key};
+ }
+ if (%server2) {
+ $OUT .= "\n[$testname-server2]\n";
+ foreach my $key (sort keys %server2) {
+ next if ($key eq "extra");
+ $OUT .= qq{$key} . " = " . qq{$server2{$key}\n} if defined $server2{$key};
+ }
+ }
+ if (%resume_server) {
+ $OUT .= "\n[$testname-resume-server]\n";
+ foreach my $key (sort keys %resume_server) {
+ next if ($key eq "extra");
+ $OUT .= qq{$key} . " = " . qq{$resume_server{$key}\n} if defined $resume_server{$key};
+ }
+ }
+-}
+[{-$testname-}-client]
+{-
+ foreach my $key (sort keys %client) {
+ next if ($key eq "extra");
+ $OUT .= qq{$key} . " = " . qq{$client{$key}\n} if defined $client{$key};
+ }
+ if (%resume_client) {
+ $OUT .= "\n[$testname-resume-client]\n";
+ foreach my $key (sort keys %resume_client) {
+ next if ($key eq "extra");
+ $OUT .= qq{$key} . " = " . qq{$resume_client{$key}\n} if defined $resume_client{$key};
+ }
+ }
+-}
+[test-{-$idx-}]
+{-
+ foreach my $key (sort keys %test) {
+ $OUT .= qq{$key} ." = " . qq{$test{$key}\n} if defined $test{$key};
+ }
+
+ # The extra server/client configuration sections.
+ if ($server{"extra"}) {
+ $OUT .= "server = $testname-server-extra\n";
+ }
+ if (%server2 && $server2{"extra"}) {
+ $OUT .= "server2 = $testname-server2-extra\n";
+ } elsif ($reuse_server2 && $server{"extra"}) {
+ $OUT .= "server2 = $testname-server-extra\n";
+ }
+ if (%resume_server && $resume_server{"extra"}) {
+ $OUT .= "resume-server = $testname-resume-server-extra\n";
+ } elsif ($reuse_resume_server && $server{"extra"}) {
+ $OUT .= "resume-server = $testname-server-extra\n";
+ }
+ if ($client{"extra"}) {
+ $OUT .= "client = $testname-client-extra\n";
+ }
+ if (%resume_client && $resume_client{"extra"}) {
+ $OUT .= "resume-client = $testname-resume-client-extra\n";
+ } elsif ($reuse_resume_client && $client{"extra"}) {
+ $OUT .= "resume-client = $testname-client-extra\n";
+ }
+
+ if ($server{"extra"}) {
+ $OUT .= "\n[$testname-server-extra]\n";
+ foreach my $key (sort keys %{$server{"extra"}}) {
+ $OUT .= qq{$key} . " = " . qq{$server{"extra"}{$key}\n}
+ if defined $server{"extra"}{$key};
+ }
+ }
+ if (%server2 && $server2{"extra"}) {
+ $OUT .= "\n[$testname-server2-extra]\n";
+ foreach my $key (sort keys %{$server2{"extra"}}) {
+ $OUT .= qq{$key} . " = " . qq{$server2{"extra"}{$key}\n}
+ if defined $server2{"extra"}{$key};
+ }
+ }
+ if (%resume_server && $resume_server{"extra"}) {
+ $OUT .= "\n[$testname-resume-server-extra]\n";
+ foreach my $key (sort keys %{$resume_server{"extra"}}) {
+ $OUT .= qq{$key} . " = " . qq{$resume_server{"extra"}{$key}\n}
+ if defined $resume_server{"extra"}{$key};
+ }
+ }
+ if ($client{"extra"}) {
+ $OUT .= "\n[$testname-client-extra]\n";
+ foreach my $key (sort keys %{$client{"extra"}}) {
+ $OUT .= qq{$key} . " = " . qq{$client{"extra"}{$key}\n}
+ if defined $client{"extra"}{$key};
+ }
+ }
+ if (%resume_client && $resume_client{"extra"}) {
+ $OUT .= "\n[$testname-resume-client-extra]\n";
+ foreach my $key (sort keys %{$resume_client{"extra"}}) {
+ $OUT .= qq{$key} . " = " . qq{$resume_client{"extra"}{$key}\n}
+ if defined $resume_client{"extra"}{$key};
+ }
+ }
+-}
diff --git a/test/ssl_test_ctx_test.c b/test/ssl_test_ctx_test.c
new file mode 100644
index 000000000000..7579b4b12a3c
--- /dev/null
+++ b/test/ssl_test_ctx_test.c
@@ -0,0 +1,264 @@
+/*
+ * Copyright 2016-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
+ */
+
+/*
+ * Ideally, CONF should offer standard parsing methods and cover them
+ * in tests. But since we have no CONF tests, we use a custom test for now.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "internal/nelem.h"
+#include "helpers/ssl_test_ctx.h"
+#include "testutil.h"
+#include <openssl/e_os2.h>
+#include <openssl/err.h>
+#include <openssl/conf.h>
+#include <openssl/ssl.h>
+
+static CONF *conf = NULL;
+
+typedef struct ssl_test_ctx_test_fixture {
+ const char *test_case_name;
+ const char *test_section;
+ /* Expected parsed configuration. */
+ SSL_TEST_CTX *expected_ctx;
+} SSL_TEST_CTX_TEST_FIXTURE;
+
+
+static int clientconf_eq(SSL_TEST_CLIENT_CONF *conf1,
+ SSL_TEST_CLIENT_CONF *conf2)
+{
+ if (!TEST_int_eq(conf1->verify_callback, conf2->verify_callback)
+ || !TEST_int_eq(conf1->servername, conf2->servername)
+ || !TEST_str_eq(conf1->npn_protocols, conf2->npn_protocols)
+ || !TEST_str_eq(conf1->alpn_protocols, conf2->alpn_protocols)
+ || !TEST_int_eq(conf1->ct_validation, conf2->ct_validation)
+ || !TEST_int_eq(conf1->max_fragment_len_mode,
+ conf2->max_fragment_len_mode))
+ return 0;
+ return 1;
+}
+
+static int serverconf_eq(SSL_TEST_SERVER_CONF *serv,
+ SSL_TEST_SERVER_CONF *serv2)
+{
+ if (!TEST_int_eq(serv->servername_callback, serv2->servername_callback)
+ || !TEST_str_eq(serv->npn_protocols, serv2->npn_protocols)
+ || !TEST_str_eq(serv->alpn_protocols, serv2->alpn_protocols)
+ || !TEST_int_eq(serv->broken_session_ticket,
+ serv2->broken_session_ticket)
+ || !TEST_str_eq(serv->session_ticket_app_data,
+ serv2->session_ticket_app_data)
+ || !TEST_int_eq(serv->cert_status, serv2->cert_status))
+ return 0;
+ return 1;
+}
+
+static int extraconf_eq(SSL_TEST_EXTRA_CONF *extra,
+ SSL_TEST_EXTRA_CONF *extra2)
+{
+ if (!TEST_true(clientconf_eq(&extra->client, &extra2->client))
+ || !TEST_true(serverconf_eq(&extra->server, &extra2->server))
+ || !TEST_true(serverconf_eq(&extra->server2, &extra2->server2)))
+ return 0;
+ return 1;
+}
+
+static int testctx_eq(SSL_TEST_CTX *ctx, SSL_TEST_CTX *ctx2)
+{
+ if (!TEST_int_eq(ctx->method, ctx2->method)
+ || !TEST_int_eq(ctx->handshake_mode, ctx2->handshake_mode)
+ || !TEST_int_eq(ctx->app_data_size, ctx2->app_data_size)
+ || !TEST_int_eq(ctx->max_fragment_size, ctx2->max_fragment_size)
+ || !extraconf_eq(&ctx->extra, &ctx2->extra)
+ || !extraconf_eq(&ctx->resume_extra, &ctx2->resume_extra)
+ || !TEST_int_eq(ctx->expected_result, ctx2->expected_result)
+ || !TEST_int_eq(ctx->expected_client_alert,
+ ctx2->expected_client_alert)
+ || !TEST_int_eq(ctx->expected_server_alert,
+ ctx2->expected_server_alert)
+ || !TEST_int_eq(ctx->expected_protocol, ctx2->expected_protocol)
+ || !TEST_int_eq(ctx->expected_servername, ctx2->expected_servername)
+ || !TEST_int_eq(ctx->session_ticket_expected,
+ ctx2->session_ticket_expected)
+ || !TEST_int_eq(ctx->compression_expected,
+ ctx2->compression_expected)
+ || !TEST_str_eq(ctx->expected_npn_protocol,
+ ctx2->expected_npn_protocol)
+ || !TEST_str_eq(ctx->expected_alpn_protocol,
+ ctx2->expected_alpn_protocol)
+ || !TEST_str_eq(ctx->expected_cipher,
+ ctx2->expected_cipher)
+ || !TEST_str_eq(ctx->expected_session_ticket_app_data,
+ ctx2->expected_session_ticket_app_data)
+ || !TEST_int_eq(ctx->resumption_expected,
+ ctx2->resumption_expected)
+ || !TEST_int_eq(ctx->session_id_expected,
+ ctx2->session_id_expected))
+ return 0;
+ return 1;
+}
+
+static SSL_TEST_CTX_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ SSL_TEST_CTX_TEST_FIXTURE *fixture;
+
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ return NULL;
+ fixture->test_case_name = test_case_name;
+ if (!TEST_ptr(fixture->expected_ctx = SSL_TEST_CTX_new(NULL))) {
+ OPENSSL_free(fixture);
+ return NULL;
+ }
+ return fixture;
+}
+
+static int execute_test(SSL_TEST_CTX_TEST_FIXTURE *fixture)
+{
+ int success = 0;
+ SSL_TEST_CTX *ctx;
+
+ if (!TEST_ptr(ctx = SSL_TEST_CTX_create(conf, fixture->test_section,
+ fixture->expected_ctx->libctx))
+ || !testctx_eq(ctx, fixture->expected_ctx))
+ goto err;
+
+ success = 1;
+ err:
+ SSL_TEST_CTX_free(ctx);
+ return success;
+}
+
+static void tear_down(SSL_TEST_CTX_TEST_FIXTURE *fixture)
+{
+ SSL_TEST_CTX_free(fixture->expected_ctx);
+ OPENSSL_free(fixture);
+}
+
+#define SETUP_SSL_TEST_CTX_TEST_FIXTURE() \
+ SETUP_TEST_FIXTURE(SSL_TEST_CTX_TEST_FIXTURE, set_up);
+#define EXECUTE_SSL_TEST_CTX_TEST() \
+ EXECUTE_TEST(execute_test, tear_down)
+
+static int test_empty_configuration(void)
+{
+ SETUP_SSL_TEST_CTX_TEST_FIXTURE();
+ fixture->test_section = "ssltest_default";
+ fixture->expected_ctx->expected_result = SSL_TEST_SUCCESS;
+ EXECUTE_SSL_TEST_CTX_TEST();
+ return result;
+}
+
+static int test_good_configuration(void)
+{
+ SETUP_SSL_TEST_CTX_TEST_FIXTURE();
+ fixture->test_section = "ssltest_good";
+ fixture->expected_ctx->method = SSL_TEST_METHOD_DTLS;
+ fixture->expected_ctx->handshake_mode = SSL_TEST_HANDSHAKE_RESUME;
+ fixture->expected_ctx->app_data_size = 1024;
+ fixture->expected_ctx->max_fragment_size = 2048;
+
+ fixture->expected_ctx->expected_result = SSL_TEST_SERVER_FAIL;
+ fixture->expected_ctx->expected_client_alert = SSL_AD_UNKNOWN_CA;
+ fixture->expected_ctx->expected_server_alert = 0; /* No alert. */
+ fixture->expected_ctx->expected_protocol = TLS1_1_VERSION;
+ fixture->expected_ctx->expected_servername = SSL_TEST_SERVERNAME_SERVER2;
+ fixture->expected_ctx->session_ticket_expected = SSL_TEST_SESSION_TICKET_YES;
+ fixture->expected_ctx->compression_expected = SSL_TEST_COMPRESSION_NO;
+ fixture->expected_ctx->session_id_expected = SSL_TEST_SESSION_ID_IGNORE;
+ fixture->expected_ctx->resumption_expected = 1;
+
+ fixture->expected_ctx->extra.client.verify_callback =
+ SSL_TEST_VERIFY_REJECT_ALL;
+ fixture->expected_ctx->extra.client.servername = SSL_TEST_SERVERNAME_SERVER2;
+ fixture->expected_ctx->extra.client.npn_protocols =
+ OPENSSL_strdup("foo,bar");
+ if (!TEST_ptr(fixture->expected_ctx->extra.client.npn_protocols))
+ goto err;
+ fixture->expected_ctx->extra.client.max_fragment_len_mode = 0;
+
+ fixture->expected_ctx->extra.server.servername_callback =
+ SSL_TEST_SERVERNAME_IGNORE_MISMATCH;
+ fixture->expected_ctx->extra.server.broken_session_ticket = 1;
+
+ fixture->expected_ctx->resume_extra.server2.alpn_protocols =
+ OPENSSL_strdup("baz");
+ if (!TEST_ptr(fixture->expected_ctx->resume_extra.server2.alpn_protocols))
+ goto err;
+
+ fixture->expected_ctx->resume_extra.client.ct_validation =
+ SSL_TEST_CT_VALIDATION_STRICT;
+
+ EXECUTE_SSL_TEST_CTX_TEST();
+ return result;
+
+err:
+ tear_down(fixture);
+ return 0;
+}
+
+static const char *bad_configurations[] = {
+ "ssltest_unknown_option",
+ "ssltest_wrong_section",
+ "ssltest_unknown_expected_result",
+ "ssltest_unknown_alert",
+ "ssltest_unknown_protocol",
+ "ssltest_unknown_verify_callback",
+ "ssltest_unknown_servername",
+ "ssltest_unknown_servername_callback",
+ "ssltest_unknown_session_ticket_expected",
+ "ssltest_unknown_compression_expected",
+ "ssltest_unknown_session_id_expected",
+ "ssltest_unknown_method",
+ "ssltest_unknown_handshake_mode",
+ "ssltest_unknown_resumption_expected",
+ "ssltest_unknown_ct_validation",
+ "ssltest_invalid_max_fragment_len",
+};
+
+static int test_bad_configuration(int idx)
+{
+ SSL_TEST_CTX *ctx;
+
+ if (!TEST_ptr_null(ctx = SSL_TEST_CTX_create(conf,
+ bad_configurations[idx], NULL))) {
+ SSL_TEST_CTX_free(ctx);
+ return 0;
+ }
+
+ return 1;
+}
+
+OPT_TEST_DECLARE_USAGE("conf_file\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(conf = NCONF_new(NULL)))
+ return 0;
+ /* argument should point to test/ssl_test_ctx_test.cnf */
+ if (!TEST_int_gt(NCONF_load(conf, test_get_argument(0), NULL), 0))
+ return 0;
+
+ ADD_TEST(test_empty_configuration);
+ ADD_TEST(test_good_configuration);
+ ADD_ALL_TESTS(test_bad_configuration, OSSL_NELEM(bad_configurations));
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ NCONF_free(conf);
+}
diff --git a/test/ssl_test_ctx_test.cnf b/test/ssl_test_ctx_test.cnf
new file mode 100644
index 000000000000..91e1465ffe45
--- /dev/null
+++ b/test/ssl_test_ctx_test.cnf
@@ -0,0 +1,97 @@
+[ssltest_default]
+
+[ssltest_good]
+client = ssltest_good_client_extra
+server = ssltest_good_server_extra
+resume-server2 = ssltest_good_resume_server2_extra
+resume-client = ssltest_good_resume_client_extra
+
+Method = DTLS
+HandshakeMode = Resume
+ApplicationData = 1024
+MaxFragmentSize = 2048
+
+ExpectedResult = ServerFail
+ExpectedClientAlert = UnknownCA
+ExpectedProtocol = TLSv1.1
+ExpectedServerName = server2
+SessionTicketExpected = Yes
+ResumptionExpected = Yes
+
+[ssltest_good_client_extra]
+VerifyCallback = RejectAll
+ServerName = server2
+NPNProtocols = foo,bar
+
+[ssltest_good_resume_client_extra]
+CTValidation = Strict
+
+[ssltest_good_server_extra]
+ServerNameCallback = IgnoreMismatch
+BrokenSessionTicket = Yes
+
+[ssltest_good_resume_server2_extra]
+ALPNProtocols = baz
+
+[ssltest_unknown_option]
+UnknownOption = Foo
+
+[ssltest_wrong_section]
+server = ssltest_wrong_section_server
+
+[ssltest_wrong_section_server]
+VerifyCallback = RejectAll
+
+[ssltest_unknown_expected_result]
+ExpectedResult = Foo
+
+[ssltest_unknown_alert]
+ExpectedServerAlert = Foo
+
+[ssltest_unknown_protocol]
+Protocol = Foo
+
+[ssltest_unknown_verify_callback]
+client = ssltest_unknown_verify_callback_client
+
+[ssltest_unknown_verify_callback_client]
+VerifyCallback = Foo
+
+[ssltest_unknown_servername]
+client = ssltest_unknown_servername_client
+
+[ssltest_unknown_servername_client]
+ServerName = Foo
+
+[ssltest_unknown_servername_callback]
+server = ssltest_unknown_servername_server
+
+[ssltest_unknown_servername_server]
+ServerNameCallback = Foo
+
+[ssltest_unknown_session_ticket_expected]
+SessionTicketExpected = Foo
+
+[ssltest_unknown_compression_expected]
+CompressionExpected = Foo
+
+[ssltest_unknown_session_id_expected]
+SessionIdExpected = Foo
+
+[ssltest_unknown_method]
+Method = TLS2
+
+[ssltest_unknown_handshake_mode]
+HandshakeMode = Foo
+
+[ssltest_unknown_resumption_expected]
+ResumptionExpected = Foo
+
+[ssltest_unknown_ct_validation]
+client = ssltest_unknown_ct_validation_client
+
+[ssltest_unknown_ct_validation_client]
+CTCallback = Foo
+
+[ssltest_invalid_max_fragment_len]
+MaxFragmentLenExt = 421
diff --git a/test/sslapitest.c b/test/sslapitest.c
new file mode 100644
index 000000000000..e0274f12f7cc
--- /dev/null
+++ b/test/sslapitest.c
@@ -0,0 +1,10749 @@
+/*
+ * Copyright 2016-2023 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
+ */
+
+/*
+ * We need access to the deprecated low level HMAC APIs for legacy purposes
+ * when the deprecated calls are not hidden
+ */
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+# define OPENSSL_SUPPRESS_DEPRECATED
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/opensslconf.h>
+#include <openssl/bio.h>
+#include <openssl/crypto.h>
+#include <openssl/ssl.h>
+#include <openssl/ocsp.h>
+#include <openssl/srp.h>
+#include <openssl/txt_db.h>
+#include <openssl/aes.h>
+#include <openssl/rand.h>
+#include <openssl/core_names.h>
+#include <openssl/core_dispatch.h>
+#include <openssl/provider.h>
+#include <openssl/param_build.h>
+#include <openssl/x509v3.h>
+#include <openssl/dh.h>
+#include <openssl/engine.h>
+
+#include "helpers/ssltestlib.h"
+#include "testutil.h"
+#include "testutil/output.h"
+#include "internal/nelem.h"
+#include "internal/ktls.h"
+#include "../ssl/ssl_local.h"
+#include "filterprov.h"
+
+#undef OSSL_NO_USABLE_TLS1_3
+#if defined(OPENSSL_NO_TLS1_3) \
+ || (defined(OPENSSL_NO_EC) && defined(OPENSSL_NO_DH))
+/*
+ * If we don't have ec or dh then there are no built-in groups that are usable
+ * with TLSv1.3
+ */
+# define OSSL_NO_USABLE_TLS1_3
+#endif
+
+/* Defined in tls-provider.c */
+int tls_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out,
+ void **provctx);
+
+static OSSL_LIB_CTX *libctx = NULL;
+static OSSL_PROVIDER *defctxnull = NULL;
+
+#ifndef OSSL_NO_USABLE_TLS1_3
+
+static SSL_SESSION *clientpsk = NULL;
+static SSL_SESSION *serverpsk = NULL;
+static const char *pskid = "Identity";
+static const char *srvid;
+
+static int use_session_cb(SSL *ssl, const EVP_MD *md, const unsigned char **id,
+ size_t *idlen, SSL_SESSION **sess);
+static int find_session_cb(SSL *ssl, const unsigned char *identity,
+ size_t identity_len, SSL_SESSION **sess);
+
+static int use_session_cb_cnt = 0;
+static int find_session_cb_cnt = 0;
+
+static SSL_SESSION *create_a_psk(SSL *ssl, size_t mdsize);
+#endif
+
+static char *certsdir = NULL;
+static char *cert = NULL;
+static char *privkey = NULL;
+static char *cert2 = NULL;
+static char *privkey2 = NULL;
+static char *cert1024 = NULL;
+static char *privkey1024 = NULL;
+static char *cert3072 = NULL;
+static char *privkey3072 = NULL;
+static char *cert4096 = NULL;
+static char *privkey4096 = NULL;
+static char *cert8192 = NULL;
+static char *privkey8192 = NULL;
+static char *srpvfile = NULL;
+static char *tmpfilename = NULL;
+static char *dhfile = NULL;
+
+static int is_fips = 0;
+
+#define LOG_BUFFER_SIZE 2048
+static char server_log_buffer[LOG_BUFFER_SIZE + 1] = {0};
+static size_t server_log_buffer_index = 0;
+static char client_log_buffer[LOG_BUFFER_SIZE + 1] = {0};
+static size_t client_log_buffer_index = 0;
+static int error_writing_log = 0;
+
+#ifndef OPENSSL_NO_OCSP
+static const unsigned char orespder[] = "Dummy OCSP Response";
+static int ocsp_server_called = 0;
+static int ocsp_client_called = 0;
+
+static int cdummyarg = 1;
+static X509 *ocspcert = NULL;
+#endif
+
+#define NUM_EXTRA_CERTS 40
+#define CLIENT_VERSION_LEN 2
+
+/*
+ * This structure is used to validate that the correct number of log messages
+ * of various types are emitted when emitting secret logs.
+ */
+struct sslapitest_log_counts {
+ unsigned int rsa_key_exchange_count;
+ unsigned int master_secret_count;
+ unsigned int client_early_secret_count;
+ unsigned int client_handshake_secret_count;
+ unsigned int server_handshake_secret_count;
+ unsigned int client_application_secret_count;
+ unsigned int server_application_secret_count;
+ unsigned int early_exporter_secret_count;
+ unsigned int exporter_secret_count;
+};
+
+
+static int hostname_cb(SSL *s, int *al, void *arg)
+{
+ const char *hostname = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);
+
+ if (hostname != NULL && (strcmp(hostname, "goodhost") == 0
+ || strcmp(hostname, "altgoodhost") == 0))
+ return SSL_TLSEXT_ERR_OK;
+
+ return SSL_TLSEXT_ERR_NOACK;
+}
+
+static void client_keylog_callback(const SSL *ssl, const char *line)
+{
+ int line_length = strlen(line);
+
+ /* If the log doesn't fit, error out. */
+ if (client_log_buffer_index + line_length > sizeof(client_log_buffer) - 1) {
+ TEST_info("Client log too full");
+ error_writing_log = 1;
+ return;
+ }
+
+ strcat(client_log_buffer, line);
+ client_log_buffer_index += line_length;
+ client_log_buffer[client_log_buffer_index++] = '\n';
+}
+
+static void server_keylog_callback(const SSL *ssl, const char *line)
+{
+ int line_length = strlen(line);
+
+ /* If the log doesn't fit, error out. */
+ if (server_log_buffer_index + line_length > sizeof(server_log_buffer) - 1) {
+ TEST_info("Server log too full");
+ error_writing_log = 1;
+ return;
+ }
+
+ strcat(server_log_buffer, line);
+ server_log_buffer_index += line_length;
+ server_log_buffer[server_log_buffer_index++] = '\n';
+}
+
+static int compare_hex_encoded_buffer(const char *hex_encoded,
+ size_t hex_length,
+ const uint8_t *raw,
+ size_t raw_length)
+{
+ size_t i, j;
+ char hexed[3];
+
+ if (!TEST_size_t_eq(raw_length * 2, hex_length))
+ return 1;
+
+ for (i = j = 0; i < raw_length && j + 1 < hex_length; i++, j += 2) {
+ sprintf(hexed, "%02x", raw[i]);
+ if (!TEST_int_eq(hexed[0], hex_encoded[j])
+ || !TEST_int_eq(hexed[1], hex_encoded[j + 1]))
+ return 1;
+ }
+
+ return 0;
+}
+
+static int test_keylog_output(char *buffer, const SSL *ssl,
+ const SSL_SESSION *session,
+ struct sslapitest_log_counts *expected)
+{
+ char *token = NULL;
+ unsigned char actual_client_random[SSL3_RANDOM_SIZE] = {0};
+ size_t client_random_size = SSL3_RANDOM_SIZE;
+ unsigned char actual_master_key[SSL_MAX_MASTER_KEY_LENGTH] = {0};
+ size_t master_key_size = SSL_MAX_MASTER_KEY_LENGTH;
+ unsigned int rsa_key_exchange_count = 0;
+ unsigned int master_secret_count = 0;
+ unsigned int client_early_secret_count = 0;
+ unsigned int client_handshake_secret_count = 0;
+ unsigned int server_handshake_secret_count = 0;
+ unsigned int client_application_secret_count = 0;
+ unsigned int server_application_secret_count = 0;
+ unsigned int early_exporter_secret_count = 0;
+ unsigned int exporter_secret_count = 0;
+
+ for (token = strtok(buffer, " \n"); token != NULL;
+ token = strtok(NULL, " \n")) {
+ if (strcmp(token, "RSA") == 0) {
+ /*
+ * Premaster secret. Tokens should be: 16 ASCII bytes of
+ * hex-encoded encrypted secret, then the hex-encoded pre-master
+ * secret.
+ */
+ if (!TEST_ptr(token = strtok(NULL, " \n")))
+ return 0;
+ if (!TEST_size_t_eq(strlen(token), 16))
+ return 0;
+ if (!TEST_ptr(token = strtok(NULL, " \n")))
+ return 0;
+ /*
+ * We can't sensibly check the log because the premaster secret is
+ * transient, and OpenSSL doesn't keep hold of it once the master
+ * secret is generated.
+ */
+ rsa_key_exchange_count++;
+ } else if (strcmp(token, "CLIENT_RANDOM") == 0) {
+ /*
+ * Master secret. Tokens should be: 64 ASCII bytes of hex-encoded
+ * client random, then the hex-encoded master secret.
+ */
+ client_random_size = SSL_get_client_random(ssl,
+ actual_client_random,
+ SSL3_RANDOM_SIZE);
+ if (!TEST_size_t_eq(client_random_size, SSL3_RANDOM_SIZE))
+ return 0;
+
+ if (!TEST_ptr(token = strtok(NULL, " \n")))
+ return 0;
+ if (!TEST_size_t_eq(strlen(token), 64))
+ return 0;
+ if (!TEST_false(compare_hex_encoded_buffer(token, 64,
+ actual_client_random,
+ client_random_size)))
+ return 0;
+
+ if (!TEST_ptr(token = strtok(NULL, " \n")))
+ return 0;
+ master_key_size = SSL_SESSION_get_master_key(session,
+ actual_master_key,
+ master_key_size);
+ if (!TEST_size_t_ne(master_key_size, 0))
+ return 0;
+ if (!TEST_false(compare_hex_encoded_buffer(token, strlen(token),
+ actual_master_key,
+ master_key_size)))
+ return 0;
+ master_secret_count++;
+ } else if (strcmp(token, "CLIENT_EARLY_TRAFFIC_SECRET") == 0
+ || strcmp(token, "CLIENT_HANDSHAKE_TRAFFIC_SECRET") == 0
+ || strcmp(token, "SERVER_HANDSHAKE_TRAFFIC_SECRET") == 0
+ || strcmp(token, "CLIENT_TRAFFIC_SECRET_0") == 0
+ || strcmp(token, "SERVER_TRAFFIC_SECRET_0") == 0
+ || strcmp(token, "EARLY_EXPORTER_SECRET") == 0
+ || strcmp(token, "EXPORTER_SECRET") == 0) {
+ /*
+ * TLSv1.3 secret. Tokens should be: 64 ASCII bytes of hex-encoded
+ * client random, and then the hex-encoded secret. In this case,
+ * we treat all of these secrets identically and then just
+ * distinguish between them when counting what we saw.
+ */
+ if (strcmp(token, "CLIENT_EARLY_TRAFFIC_SECRET") == 0)
+ client_early_secret_count++;
+ else if (strcmp(token, "CLIENT_HANDSHAKE_TRAFFIC_SECRET") == 0)
+ client_handshake_secret_count++;
+ else if (strcmp(token, "SERVER_HANDSHAKE_TRAFFIC_SECRET") == 0)
+ server_handshake_secret_count++;
+ else if (strcmp(token, "CLIENT_TRAFFIC_SECRET_0") == 0)
+ client_application_secret_count++;
+ else if (strcmp(token, "SERVER_TRAFFIC_SECRET_0") == 0)
+ server_application_secret_count++;
+ else if (strcmp(token, "EARLY_EXPORTER_SECRET") == 0)
+ early_exporter_secret_count++;
+ else if (strcmp(token, "EXPORTER_SECRET") == 0)
+ exporter_secret_count++;
+
+ client_random_size = SSL_get_client_random(ssl,
+ actual_client_random,
+ SSL3_RANDOM_SIZE);
+ if (!TEST_size_t_eq(client_random_size, SSL3_RANDOM_SIZE))
+ return 0;
+
+ if (!TEST_ptr(token = strtok(NULL, " \n")))
+ return 0;
+ if (!TEST_size_t_eq(strlen(token), 64))
+ return 0;
+ if (!TEST_false(compare_hex_encoded_buffer(token, 64,
+ actual_client_random,
+ client_random_size)))
+ return 0;
+
+ if (!TEST_ptr(token = strtok(NULL, " \n")))
+ return 0;
+ } else {
+ TEST_info("Unexpected token %s\n", token);
+ return 0;
+ }
+ }
+
+ /* Got what we expected? */
+ if (!TEST_size_t_eq(rsa_key_exchange_count,
+ expected->rsa_key_exchange_count)
+ || !TEST_size_t_eq(master_secret_count,
+ expected->master_secret_count)
+ || !TEST_size_t_eq(client_early_secret_count,
+ expected->client_early_secret_count)
+ || !TEST_size_t_eq(client_handshake_secret_count,
+ expected->client_handshake_secret_count)
+ || !TEST_size_t_eq(server_handshake_secret_count,
+ expected->server_handshake_secret_count)
+ || !TEST_size_t_eq(client_application_secret_count,
+ expected->client_application_secret_count)
+ || !TEST_size_t_eq(server_application_secret_count,
+ expected->server_application_secret_count)
+ || !TEST_size_t_eq(early_exporter_secret_count,
+ expected->early_exporter_secret_count)
+ || !TEST_size_t_eq(exporter_secret_count,
+ expected->exporter_secret_count))
+ return 0;
+ return 1;
+}
+
+#if !defined(OPENSSL_NO_TLS1_2) || defined(OSSL_NO_USABLE_TLS1_3)
+static int test_keylog(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ struct sslapitest_log_counts expected;
+
+ /* Clean up logging space */
+ memset(&expected, 0, sizeof(expected));
+ memset(client_log_buffer, 0, sizeof(client_log_buffer));
+ memset(server_log_buffer, 0, sizeof(server_log_buffer));
+ client_log_buffer_index = 0;
+ server_log_buffer_index = 0;
+ error_writing_log = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+ /* We cannot log the master secret for TLSv1.3, so we should forbid it. */
+ SSL_CTX_set_options(cctx, SSL_OP_NO_TLSv1_3);
+ SSL_CTX_set_options(sctx, SSL_OP_NO_TLSv1_3);
+
+ /* We also want to ensure that we use RSA-based key exchange. */
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "RSA")))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) == NULL)
+ || !TEST_true(SSL_CTX_get_keylog_callback(sctx) == NULL))
+ goto end;
+ SSL_CTX_set_keylog_callback(cctx, client_keylog_callback);
+ if (!TEST_true(SSL_CTX_get_keylog_callback(cctx)
+ == client_keylog_callback))
+ goto end;
+ SSL_CTX_set_keylog_callback(sctx, server_keylog_callback);
+ if (!TEST_true(SSL_CTX_get_keylog_callback(sctx)
+ == server_keylog_callback))
+ goto end;
+
+ /* Now do a handshake and check that the logs have been written to. */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_false(error_writing_log)
+ || !TEST_int_gt(client_log_buffer_index, 0)
+ || !TEST_int_gt(server_log_buffer_index, 0))
+ goto end;
+
+ /*
+ * Now we want to test that our output data was vaguely sensible. We
+ * do that by using strtok and confirming that we have more or less the
+ * data we expect. For both client and server, we expect to see one master
+ * secret. The client should also see an RSA key exchange.
+ */
+ expected.rsa_key_exchange_count = 1;
+ expected.master_secret_count = 1;
+ if (!TEST_true(test_keylog_output(client_log_buffer, clientssl,
+ SSL_get_session(clientssl), &expected)))
+ goto end;
+
+ expected.rsa_key_exchange_count = 0;
+ if (!TEST_true(test_keylog_output(server_log_buffer, serverssl,
+ SSL_get_session(serverssl), &expected)))
+ goto end;
+
+ testresult = 1;
+
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif
+
+#ifndef OSSL_NO_USABLE_TLS1_3
+static int test_keylog_no_master_key(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ SSL_SESSION *sess = NULL;
+ int testresult = 0;
+ struct sslapitest_log_counts expected;
+ unsigned char buf[1];
+ size_t readbytes, written;
+
+ /* Clean up logging space */
+ memset(&expected, 0, sizeof(expected));
+ memset(client_log_buffer, 0, sizeof(client_log_buffer));
+ memset(server_log_buffer, 0, sizeof(server_log_buffer));
+ client_log_buffer_index = 0;
+ server_log_buffer_index = 0;
+ error_writing_log = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(SSL_CTX_set_max_early_data(sctx,
+ SSL3_RT_MAX_PLAIN_LENGTH)))
+ return 0;
+
+ if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) == NULL)
+ || !TEST_true(SSL_CTX_get_keylog_callback(sctx) == NULL))
+ goto end;
+
+ SSL_CTX_set_keylog_callback(cctx, client_keylog_callback);
+ if (!TEST_true(SSL_CTX_get_keylog_callback(cctx)
+ == client_keylog_callback))
+ goto end;
+
+ SSL_CTX_set_keylog_callback(sctx, server_keylog_callback);
+ if (!TEST_true(SSL_CTX_get_keylog_callback(sctx)
+ == server_keylog_callback))
+ goto end;
+
+ /* Now do a handshake and check that the logs have been written to. */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_false(error_writing_log))
+ goto end;
+
+ /*
+ * Now we want to test that our output data was vaguely sensible. For this
+ * test, we expect no CLIENT_RANDOM entry because it doesn't make sense for
+ * TLSv1.3, but we do expect both client and server to emit keys.
+ */
+ expected.client_handshake_secret_count = 1;
+ expected.server_handshake_secret_count = 1;
+ expected.client_application_secret_count = 1;
+ expected.server_application_secret_count = 1;
+ expected.exporter_secret_count = 1;
+ if (!TEST_true(test_keylog_output(client_log_buffer, clientssl,
+ SSL_get_session(clientssl), &expected))
+ || !TEST_true(test_keylog_output(server_log_buffer, serverssl,
+ SSL_get_session(serverssl),
+ &expected)))
+ goto end;
+
+ /* Terminate old session and resume with early data. */
+ sess = SSL_get1_session(clientssl);
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ /* Reset key log */
+ memset(client_log_buffer, 0, sizeof(client_log_buffer));
+ memset(server_log_buffer, 0, sizeof(server_log_buffer));
+ client_log_buffer_index = 0;
+ server_log_buffer_index = 0;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, sess))
+ /* Here writing 0 length early data is enough. */
+ || !TEST_true(SSL_write_early_data(clientssl, NULL, 0, &written))
+ || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_ERROR)
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_ACCEPTED)
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl)))
+ goto end;
+
+ /* In addition to the previous entries, expect early secrets. */
+ expected.client_early_secret_count = 1;
+ expected.early_exporter_secret_count = 1;
+ if (!TEST_true(test_keylog_output(client_log_buffer, clientssl,
+ SSL_get_session(clientssl), &expected))
+ || !TEST_true(test_keylog_output(server_log_buffer, serverssl,
+ SSL_get_session(serverssl),
+ &expected)))
+ goto end;
+
+ testresult = 1;
+
+end:
+ SSL_SESSION_free(sess);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif
+
+static int verify_retry_cb(X509_STORE_CTX *ctx, void *arg)
+{
+ int res = X509_verify_cert(ctx);
+ int idx = SSL_get_ex_data_X509_STORE_CTX_idx();
+ SSL *ssl;
+
+ /* this should not happen but check anyway */
+ if (idx < 0
+ || (ssl = X509_STORE_CTX_get_ex_data(ctx, idx)) == NULL)
+ return 0;
+
+ if (res == 0 && X509_STORE_CTX_get_error(ctx) ==
+ X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY)
+ /* indicate SSL_ERROR_WANT_RETRY_VERIFY */
+ return SSL_set_retry_verify(ssl);
+
+ return res;
+}
+
+static int test_client_cert_verify_cb(void)
+{
+ /* server key, cert, chain, and root */
+ char *skey = test_mk_file_path(certsdir, "leaf.key");
+ char *leaf = test_mk_file_path(certsdir, "leaf.pem");
+ char *int2 = test_mk_file_path(certsdir, "subinterCA.pem");
+ char *int1 = test_mk_file_path(certsdir, "interCA.pem");
+ char *root = test_mk_file_path(certsdir, "rootCA.pem");
+ X509 *crt1 = NULL, *crt2 = NULL;
+ STACK_OF(X509) *server_chain;
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, NULL, NULL)))
+ goto end;
+ if (!TEST_int_eq(SSL_CTX_use_certificate_chain_file(sctx, leaf), 1)
+ || !TEST_int_eq(SSL_CTX_use_PrivateKey_file(sctx, skey,
+ SSL_FILETYPE_PEM), 1)
+ || !TEST_int_eq(SSL_CTX_check_private_key(sctx), 1))
+ goto end;
+ if (!TEST_true(SSL_CTX_load_verify_locations(cctx, root, NULL)))
+ goto end;
+ SSL_CTX_set_verify(cctx, SSL_VERIFY_PEER, NULL);
+ SSL_CTX_set_cert_verify_callback(cctx, verify_retry_cb, NULL);
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ /* attempt SSL_connect() with incomplete server chain */
+ if (!TEST_false(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_WANT_RETRY_VERIFY)))
+ goto end;
+
+ /* application provides intermediate certs needed to verify server cert */
+ if (!TEST_ptr((crt1 = load_cert_pem(int1, libctx)))
+ || !TEST_ptr((crt2 = load_cert_pem(int2, libctx)))
+ || !TEST_ptr((server_chain = SSL_get_peer_cert_chain(clientssl))))
+ goto end;
+ /* add certs in reverse order to demonstrate real chain building */
+ if (!TEST_true(sk_X509_push(server_chain, crt1)))
+ goto end;
+ crt1 = NULL;
+ if (!TEST_true(sk_X509_push(server_chain, crt2)))
+ goto end;
+ crt2 = NULL;
+
+ /* continue SSL_connect(), must now succeed with completed server chain */
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ testresult = 1;
+
+end:
+ X509_free(crt1);
+ X509_free(crt2);
+ if (clientssl != NULL) {
+ SSL_shutdown(clientssl);
+ SSL_free(clientssl);
+ }
+ if (serverssl != NULL) {
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ }
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ OPENSSL_free(skey);
+ OPENSSL_free(leaf);
+ OPENSSL_free(int2);
+ OPENSSL_free(int1);
+ OPENSSL_free(root);
+
+ return testresult;
+}
+
+static int test_ssl_build_cert_chain(void)
+{
+ int ret = 0;
+ SSL_CTX *ssl_ctx = NULL;
+ SSL *ssl = NULL;
+ char *skey = test_mk_file_path(certsdir, "leaf.key");
+ char *leaf_chain = test_mk_file_path(certsdir, "leaf-chain.pem");
+
+ if (!TEST_ptr(ssl_ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method())))
+ goto end;
+ if (!TEST_ptr(ssl = SSL_new(ssl_ctx)))
+ goto end;
+ /* leaf_chain contains leaf + subinterCA + interCA + rootCA */
+ if (!TEST_int_eq(SSL_use_certificate_chain_file(ssl, leaf_chain), 1)
+ || !TEST_int_eq(SSL_use_PrivateKey_file(ssl, skey, SSL_FILETYPE_PEM), 1)
+ || !TEST_int_eq(SSL_check_private_key(ssl), 1))
+ goto end;
+ if (!TEST_true(SSL_build_cert_chain(ssl, SSL_BUILD_CHAIN_FLAG_NO_ROOT
+ | SSL_BUILD_CHAIN_FLAG_CHECK)))
+ goto end;
+ ret = 1;
+end:
+ SSL_free(ssl);
+ SSL_CTX_free(ssl_ctx);
+ OPENSSL_free(leaf_chain);
+ OPENSSL_free(skey);
+ return ret;
+}
+
+static int get_password_cb(char *buf, int size, int rw_flag, void *userdata)
+{
+ static const char pass[] = "testpass";
+
+ if (!TEST_int_eq(size, PEM_BUFSIZE))
+ return -1;
+
+ memcpy(buf, pass, sizeof(pass) - 1);
+ return sizeof(pass) - 1;
+}
+
+static int test_ssl_ctx_build_cert_chain(void)
+{
+ int ret = 0;
+ SSL_CTX *ctx = NULL;
+ char *skey = test_mk_file_path(certsdir, "leaf-encrypted.key");
+ char *leaf_chain = test_mk_file_path(certsdir, "leaf-chain.pem");
+
+ if (!TEST_ptr(ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method())))
+ goto end;
+ SSL_CTX_set_default_passwd_cb(ctx, get_password_cb);
+ /* leaf_chain contains leaf + subinterCA + interCA + rootCA */
+ if (!TEST_int_eq(SSL_CTX_use_certificate_chain_file(ctx, leaf_chain), 1)
+ || !TEST_int_eq(SSL_CTX_use_PrivateKey_file(ctx, skey,
+ SSL_FILETYPE_PEM), 1)
+ || !TEST_int_eq(SSL_CTX_check_private_key(ctx), 1))
+ goto end;
+ if (!TEST_true(SSL_CTX_build_cert_chain(ctx, SSL_BUILD_CHAIN_FLAG_NO_ROOT
+ | SSL_BUILD_CHAIN_FLAG_CHECK)))
+ goto end;
+ ret = 1;
+end:
+ SSL_CTX_free(ctx);
+ OPENSSL_free(leaf_chain);
+ OPENSSL_free(skey);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_TLS1_2
+static int full_client_hello_callback(SSL *s, int *al, void *arg)
+{
+ int *ctr = arg;
+ const unsigned char *p;
+ int *exts;
+ /* We only configure two ciphers, but the SCSV is added automatically. */
+#ifdef OPENSSL_NO_EC
+ const unsigned char expected_ciphers[] = {0x00, 0x9d, 0x00, 0xff};
+#else
+ const unsigned char expected_ciphers[] = {0x00, 0x9d, 0xc0,
+ 0x2c, 0x00, 0xff};
+#endif
+ const int expected_extensions[] = {
+#ifndef OPENSSL_NO_EC
+ 11, 10,
+#endif
+ 35, 22, 23, 13};
+ size_t len;
+
+ /* Make sure we can defer processing and get called back. */
+ if ((*ctr)++ == 0)
+ return SSL_CLIENT_HELLO_RETRY;
+
+ len = SSL_client_hello_get0_ciphers(s, &p);
+ if (!TEST_mem_eq(p, len, expected_ciphers, sizeof(expected_ciphers))
+ || !TEST_size_t_eq(
+ SSL_client_hello_get0_compression_methods(s, &p), 1)
+ || !TEST_int_eq(*p, 0))
+ return SSL_CLIENT_HELLO_ERROR;
+ if (!SSL_client_hello_get1_extensions_present(s, &exts, &len))
+ return SSL_CLIENT_HELLO_ERROR;
+ if (len != OSSL_NELEM(expected_extensions) ||
+ memcmp(exts, expected_extensions, len * sizeof(*exts)) != 0) {
+ printf("ClientHello callback expected extensions mismatch\n");
+ OPENSSL_free(exts);
+ return SSL_CLIENT_HELLO_ERROR;
+ }
+ OPENSSL_free(exts);
+ return SSL_CLIENT_HELLO_SUCCESS;
+}
+
+static int test_client_hello_cb(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testctr = 0, testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+ SSL_CTX_set_client_hello_cb(sctx, full_client_hello_callback, &testctr);
+
+ /* The gimpy cipher list we configure can't do TLS 1.3. */
+ SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION);
+
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384"))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_false(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_WANT_CLIENT_HELLO_CB))
+ /*
+ * Passing a -1 literal is a hack since
+ * the real value was lost.
+ * */
+ || !TEST_int_eq(SSL_get_error(serverssl, -1),
+ SSL_ERROR_WANT_CLIENT_HELLO_CB)
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ testresult = 1;
+
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+static int test_no_ems(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+ if (!create_ssl_ctx_pair(libctx, TLS_server_method(), TLS_client_method(),
+ TLS1_VERSION, TLS1_2_VERSION,
+ &sctx, &cctx, cert, privkey)) {
+ printf("Unable to create SSL_CTX pair\n");
+ goto end;
+ }
+
+ SSL_CTX_set_options(sctx, SSL_OP_NO_EXTENDED_MASTER_SECRET);
+
+ if (!create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL, NULL)) {
+ printf("Unable to create SSL objects\n");
+ goto end;
+ }
+
+ if (!create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) {
+ printf("Creating SSL connection failed\n");
+ goto end;
+ }
+
+ if (SSL_get_extms_support(serverssl)) {
+ printf("Server reports Extended Master Secret support\n");
+ goto end;
+ }
+
+ if (SSL_get_extms_support(clientssl)) {
+ printf("Client reports Extended Master Secret support\n");
+ goto end;
+ }
+ testresult = 1;
+
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+/*
+ * Very focused test to exercise a single case in the server-side state
+ * machine, when the ChangeCipherState message needs to actually change
+ * from one cipher to a different cipher (i.e., not changing from null
+ * encryption to real encryption).
+ */
+static int test_ccs_change_cipher(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ SSL_SESSION *sess = NULL, *sesspre, *sesspost;
+ int testresult = 0;
+ int i;
+ unsigned char buf;
+ size_t readbytes;
+
+ /*
+ * Create a conection so we can resume and potentially (but not) use
+ * a different cipher in the second connection.
+ */
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, TLS1_2_VERSION,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(SSL_CTX_set_options(sctx, SSL_OP_NO_TICKET))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(SSL_set_cipher_list(clientssl, "AES128-GCM-SHA256"))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_ptr(sesspre = SSL_get0_session(serverssl))
+ || !TEST_ptr(sess = SSL_get1_session(clientssl)))
+ goto end;
+
+ shutdown_ssl_connection(serverssl, clientssl);
+ serverssl = clientssl = NULL;
+
+ /* Resume, preferring a different cipher. Our server will force the
+ * same cipher to be used as the initial handshake. */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, sess))
+ || !TEST_true(SSL_set_cipher_list(clientssl, "AES256-GCM-SHA384:AES128-GCM-SHA256"))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl))
+ || !TEST_true(SSL_session_reused(serverssl))
+ || !TEST_ptr(sesspost = SSL_get0_session(serverssl))
+ || !TEST_ptr_eq(sesspre, sesspost)
+ || !TEST_int_eq(TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
+ SSL_CIPHER_get_id(SSL_get_current_cipher(clientssl))))
+ goto end;
+ shutdown_ssl_connection(serverssl, clientssl);
+ serverssl = clientssl = NULL;
+
+ /*
+ * Now create a fresh connection and try to renegotiate a different
+ * cipher on it.
+ */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(SSL_set_cipher_list(clientssl, "AES128-GCM-SHA256"))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_ptr(sesspre = SSL_get0_session(serverssl))
+ || !TEST_true(SSL_set_cipher_list(clientssl, "AES256-GCM-SHA384"))
+ || !TEST_true(SSL_renegotiate(clientssl))
+ || !TEST_true(SSL_renegotiate_pending(clientssl)))
+ goto end;
+ /* Actually drive the renegotiation. */
+ for (i = 0; i < 3; i++) {
+ if (SSL_read_ex(clientssl, &buf, sizeof(buf), &readbytes) > 0) {
+ if (!TEST_ulong_eq(readbytes, 0))
+ goto end;
+ } else if (!TEST_int_eq(SSL_get_error(clientssl, 0),
+ SSL_ERROR_WANT_READ)) {
+ goto end;
+ }
+ if (SSL_read_ex(serverssl, &buf, sizeof(buf), &readbytes) > 0) {
+ if (!TEST_ulong_eq(readbytes, 0))
+ goto end;
+ } else if (!TEST_int_eq(SSL_get_error(serverssl, 0),
+ SSL_ERROR_WANT_READ)) {
+ goto end;
+ }
+ }
+ /* sesspre and sesspost should be different since the cipher changed. */
+ if (!TEST_false(SSL_renegotiate_pending(clientssl))
+ || !TEST_false(SSL_session_reused(clientssl))
+ || !TEST_false(SSL_session_reused(serverssl))
+ || !TEST_ptr(sesspost = SSL_get0_session(serverssl))
+ || !TEST_ptr_ne(sesspre, sesspost)
+ || !TEST_int_eq(TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
+ SSL_CIPHER_get_id(SSL_get_current_cipher(clientssl))))
+ goto end;
+
+ shutdown_ssl_connection(serverssl, clientssl);
+ serverssl = clientssl = NULL;
+
+ testresult = 1;
+
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ SSL_SESSION_free(sess);
+
+ return testresult;
+}
+#endif
+
+static int add_large_cert_chain(SSL_CTX *sctx)
+{
+ BIO *certbio = NULL;
+ X509 *chaincert = NULL;
+ int certlen;
+ int ret = 0;
+ int i;
+
+ if (!TEST_ptr(certbio = BIO_new_file(cert, "r")))
+ goto end;
+
+ if (!TEST_ptr(chaincert = X509_new_ex(libctx, NULL)))
+ goto end;
+
+ if (PEM_read_bio_X509(certbio, &chaincert, NULL, NULL) == NULL)
+ goto end;
+ BIO_free(certbio);
+ certbio = NULL;
+
+ /*
+ * We assume the supplied certificate is big enough so that if we add
+ * NUM_EXTRA_CERTS it will make the overall message large enough. The
+ * default buffer size is requested to be 16k, but due to the way BUF_MEM
+ * works, it ends up allocating a little over 21k (16 * 4/3). So, in this
+ * test we need to have a message larger than that.
+ */
+ certlen = i2d_X509(chaincert, NULL);
+ OPENSSL_assert(certlen * NUM_EXTRA_CERTS >
+ (SSL3_RT_MAX_PLAIN_LENGTH * 4) / 3);
+ for (i = 0; i < NUM_EXTRA_CERTS; i++) {
+ if (!X509_up_ref(chaincert))
+ goto end;
+ if (!SSL_CTX_add_extra_chain_cert(sctx, chaincert)) {
+ X509_free(chaincert);
+ goto end;
+ }
+ }
+
+ ret = 1;
+ end:
+ BIO_free(certbio);
+ X509_free(chaincert);
+ return ret;
+}
+
+static int execute_test_large_message(const SSL_METHOD *smeth,
+ const SSL_METHOD *cmeth,
+ int min_version, int max_version,
+ int read_ahead)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, smeth, cmeth, min_version,
+ max_version, &sctx, &cctx, cert,
+ privkey)))
+ goto end;
+
+#ifdef OPENSSL_NO_DTLS1_2
+ if (smeth == DTLS_server_method()) {
+ /*
+ * Default sigalgs are SHA1 based in <DTLS1.2 which is in security
+ * level 0
+ */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0"))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "DEFAULT:@SECLEVEL=0")))
+ goto end;
+ }
+#endif
+
+ if (read_ahead) {
+ /*
+ * Test that read_ahead works correctly when dealing with large
+ * records
+ */
+ SSL_CTX_set_read_ahead(cctx, 1);
+ }
+
+ if (!add_large_cert_chain(sctx))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ /*
+ * Calling SSL_clear() first is not required but this tests that SSL_clear()
+ * doesn't leak.
+ */
+ if (!TEST_true(SSL_clear(serverssl)))
+ goto end;
+
+ testresult = 1;
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+#if !defined(OPENSSL_NO_SOCK) && !defined(OPENSSL_NO_KTLS) && \
+ !(defined(OSSL_NO_USABLE_TLS1_3) && defined(OPENSSL_NO_TLS1_2))
+/* sock must be connected */
+static int ktls_chk_platform(int sock)
+{
+ if (!ktls_enable(sock))
+ return 0;
+ return 1;
+}
+
+static int ping_pong_query(SSL *clientssl, SSL *serverssl)
+{
+ static char count = 1;
+ unsigned char cbuf[16000] = {0};
+ unsigned char sbuf[16000];
+ size_t err = 0;
+ char crec_wseq_before[SEQ_NUM_SIZE];
+ char crec_wseq_after[SEQ_NUM_SIZE];
+ char crec_rseq_before[SEQ_NUM_SIZE];
+ char crec_rseq_after[SEQ_NUM_SIZE];
+ char srec_wseq_before[SEQ_NUM_SIZE];
+ char srec_wseq_after[SEQ_NUM_SIZE];
+ char srec_rseq_before[SEQ_NUM_SIZE];
+ char srec_rseq_after[SEQ_NUM_SIZE];
+
+ cbuf[0] = count++;
+ memcpy(crec_wseq_before, &clientssl->rlayer.write_sequence, SEQ_NUM_SIZE);
+ memcpy(crec_rseq_before, &clientssl->rlayer.read_sequence, SEQ_NUM_SIZE);
+ memcpy(srec_wseq_before, &serverssl->rlayer.write_sequence, SEQ_NUM_SIZE);
+ memcpy(srec_rseq_before, &serverssl->rlayer.read_sequence, SEQ_NUM_SIZE);
+
+ if (!TEST_true(SSL_write(clientssl, cbuf, sizeof(cbuf)) == sizeof(cbuf)))
+ goto end;
+
+ while ((err = SSL_read(serverssl, &sbuf, sizeof(sbuf))) != sizeof(sbuf)) {
+ if (SSL_get_error(serverssl, err) != SSL_ERROR_WANT_READ) {
+ goto end;
+ }
+ }
+
+ if (!TEST_true(SSL_write(serverssl, sbuf, sizeof(sbuf)) == sizeof(sbuf)))
+ goto end;
+
+ while ((err = SSL_read(clientssl, &cbuf, sizeof(cbuf))) != sizeof(cbuf)) {
+ if (SSL_get_error(clientssl, err) != SSL_ERROR_WANT_READ) {
+ goto end;
+ }
+ }
+
+ memcpy(crec_wseq_after, &clientssl->rlayer.write_sequence, SEQ_NUM_SIZE);
+ memcpy(crec_rseq_after, &clientssl->rlayer.read_sequence, SEQ_NUM_SIZE);
+ memcpy(srec_wseq_after, &serverssl->rlayer.write_sequence, SEQ_NUM_SIZE);
+ memcpy(srec_rseq_after, &serverssl->rlayer.read_sequence, SEQ_NUM_SIZE);
+
+ /* verify the payload */
+ if (!TEST_mem_eq(cbuf, sizeof(cbuf), sbuf, sizeof(sbuf)))
+ goto end;
+
+ /*
+ * If ktls is used then kernel sequences are used instead of
+ * OpenSSL sequences
+ */
+ if (!BIO_get_ktls_send(clientssl->wbio)) {
+ if (!TEST_mem_ne(crec_wseq_before, SEQ_NUM_SIZE,
+ crec_wseq_after, SEQ_NUM_SIZE))
+ goto end;
+ } else {
+ if (!TEST_mem_eq(crec_wseq_before, SEQ_NUM_SIZE,
+ crec_wseq_after, SEQ_NUM_SIZE))
+ goto end;
+ }
+
+ if (!BIO_get_ktls_send(serverssl->wbio)) {
+ if (!TEST_mem_ne(srec_wseq_before, SEQ_NUM_SIZE,
+ srec_wseq_after, SEQ_NUM_SIZE))
+ goto end;
+ } else {
+ if (!TEST_mem_eq(srec_wseq_before, SEQ_NUM_SIZE,
+ srec_wseq_after, SEQ_NUM_SIZE))
+ goto end;
+ }
+
+ if (!BIO_get_ktls_recv(clientssl->wbio)) {
+ if (!TEST_mem_ne(crec_rseq_before, SEQ_NUM_SIZE,
+ crec_rseq_after, SEQ_NUM_SIZE))
+ goto end;
+ } else {
+ if (!TEST_mem_eq(crec_rseq_before, SEQ_NUM_SIZE,
+ crec_rseq_after, SEQ_NUM_SIZE))
+ goto end;
+ }
+
+ if (!BIO_get_ktls_recv(serverssl->wbio)) {
+ if (!TEST_mem_ne(srec_rseq_before, SEQ_NUM_SIZE,
+ srec_rseq_after, SEQ_NUM_SIZE))
+ goto end;
+ } else {
+ if (!TEST_mem_eq(srec_rseq_before, SEQ_NUM_SIZE,
+ srec_rseq_after, SEQ_NUM_SIZE))
+ goto end;
+ }
+
+ return 1;
+end:
+ return 0;
+}
+
+static int execute_test_ktls(int cis_ktls, int sis_ktls,
+ int tls_version, const char *cipher)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int ktls_used = 0, testresult = 0;
+ int cfd = -1, sfd = -1;
+ int rx_supported;
+
+ if (!TEST_true(create_test_sockets(&cfd, &sfd)))
+ goto end;
+
+ /* Skip this test if the platform does not support ktls */
+ if (!ktls_chk_platform(cfd)) {
+ testresult = TEST_skip("Kernel does not support KTLS");
+ goto end;
+ }
+
+ if (is_fips && strstr(cipher, "CHACHA") != NULL) {
+ testresult = TEST_skip("CHACHA is not supported in FIPS");
+ goto end;
+ }
+
+ /* Create a session based on SHA-256 */
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ tls_version, tls_version,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (tls_version == TLS1_3_VERSION) {
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, cipher))
+ || !TEST_true(SSL_CTX_set_ciphersuites(sctx, cipher)))
+ goto end;
+ } else {
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx, cipher))
+ || !TEST_true(SSL_CTX_set_cipher_list(sctx, cipher)))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_objects2(sctx, cctx, &serverssl,
+ &clientssl, sfd, cfd)))
+ goto end;
+
+ if (cis_ktls) {
+ if (!TEST_true(SSL_set_options(clientssl, SSL_OP_ENABLE_KTLS)))
+ goto end;
+ }
+
+ if (sis_ktls) {
+ if (!TEST_true(SSL_set_options(serverssl, SSL_OP_ENABLE_KTLS)))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ /*
+ * The running kernel may not support a given cipher suite
+ * or direction, so just check that KTLS isn't used when it
+ * isn't enabled.
+ */
+ if (!cis_ktls) {
+ if (!TEST_false(BIO_get_ktls_send(clientssl->wbio)))
+ goto end;
+ } else {
+ if (BIO_get_ktls_send(clientssl->wbio))
+ ktls_used = 1;
+ }
+
+ if (!sis_ktls) {
+ if (!TEST_false(BIO_get_ktls_send(serverssl->wbio)))
+ goto end;
+ } else {
+ if (BIO_get_ktls_send(serverssl->wbio))
+ ktls_used = 1;
+ }
+
+#if defined(OPENSSL_NO_KTLS_RX)
+ rx_supported = 0;
+#else
+ rx_supported = (tls_version != TLS1_3_VERSION);
+#endif
+ if (!cis_ktls || !rx_supported) {
+ if (!TEST_false(BIO_get_ktls_recv(clientssl->rbio)))
+ goto end;
+ } else {
+ if (BIO_get_ktls_send(clientssl->rbio))
+ ktls_used = 1;
+ }
+
+ if (!sis_ktls || !rx_supported) {
+ if (!TEST_false(BIO_get_ktls_recv(serverssl->rbio)))
+ goto end;
+ } else {
+ if (BIO_get_ktls_send(serverssl->rbio))
+ ktls_used = 1;
+ }
+
+ if ((cis_ktls || sis_ktls) && !ktls_used) {
+ testresult = TEST_skip("KTLS not supported for %s cipher %s",
+ tls_version == TLS1_3_VERSION ? "TLS 1.3" :
+ "TLS 1.2", cipher);
+ goto end;
+ }
+
+ if (!TEST_true(ping_pong_query(clientssl, serverssl)))
+ goto end;
+
+ testresult = 1;
+end:
+ if (clientssl) {
+ SSL_shutdown(clientssl);
+ SSL_free(clientssl);
+ }
+ if (serverssl) {
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ }
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ serverssl = clientssl = NULL;
+ if (cfd != -1)
+ close(cfd);
+ if (sfd != -1)
+ close(sfd);
+ return testresult;
+}
+
+#define SENDFILE_SZ (16 * 4096)
+#define SENDFILE_CHUNK (4 * 4096)
+#define min(a,b) ((a) > (b) ? (b) : (a))
+
+static int execute_test_ktls_sendfile(int tls_version, const char *cipher)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ unsigned char *buf, *buf_dst;
+ BIO *out = NULL, *in = NULL;
+ int cfd = -1, sfd = -1, ffd, err;
+ ssize_t chunk_size = 0;
+ off_t chunk_off = 0;
+ int testresult = 0;
+ FILE *ffdp;
+
+ buf = OPENSSL_zalloc(SENDFILE_SZ);
+ buf_dst = OPENSSL_zalloc(SENDFILE_SZ);
+ if (!TEST_ptr(buf) || !TEST_ptr(buf_dst)
+ || !TEST_true(create_test_sockets(&cfd, &sfd)))
+ goto end;
+
+ /* Skip this test if the platform does not support ktls */
+ if (!ktls_chk_platform(sfd)) {
+ testresult = TEST_skip("Kernel does not support KTLS");
+ goto end;
+ }
+
+ if (is_fips && strstr(cipher, "CHACHA") != NULL) {
+ testresult = TEST_skip("CHACHA is not supported in FIPS");
+ goto end;
+ }
+
+ /* Create a session based on SHA-256 */
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ tls_version, tls_version,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (tls_version == TLS1_3_VERSION) {
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, cipher))
+ || !TEST_true(SSL_CTX_set_ciphersuites(sctx, cipher)))
+ goto end;
+ } else {
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx, cipher))
+ || !TEST_true(SSL_CTX_set_cipher_list(sctx, cipher)))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_objects2(sctx, cctx, &serverssl,
+ &clientssl, sfd, cfd)))
+ goto end;
+
+ if (!TEST_true(SSL_set_options(serverssl, SSL_OP_ENABLE_KTLS)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ if (!BIO_get_ktls_send(serverssl->wbio)) {
+ testresult = TEST_skip("Failed to enable KTLS for %s cipher %s",
+ tls_version == TLS1_3_VERSION ? "TLS 1.3" :
+ "TLS 1.2", cipher);
+ goto end;
+ }
+
+ if (!TEST_int_gt(RAND_bytes_ex(libctx, buf, SENDFILE_SZ, 0), 0))
+ goto end;
+
+ out = BIO_new_file(tmpfilename, "wb");
+ if (!TEST_ptr(out))
+ goto end;
+
+ if (BIO_write(out, buf, SENDFILE_SZ) != SENDFILE_SZ)
+ goto end;
+
+ BIO_free(out);
+ out = NULL;
+ in = BIO_new_file(tmpfilename, "rb");
+ BIO_get_fp(in, &ffdp);
+ ffd = fileno(ffdp);
+
+ while (chunk_off < SENDFILE_SZ) {
+ chunk_size = min(SENDFILE_CHUNK, SENDFILE_SZ - chunk_off);
+ while ((err = SSL_sendfile(serverssl,
+ ffd,
+ chunk_off,
+ chunk_size,
+ 0)) != chunk_size) {
+ if (SSL_get_error(serverssl, err) != SSL_ERROR_WANT_WRITE)
+ goto end;
+ }
+ while ((err = SSL_read(clientssl,
+ buf_dst + chunk_off,
+ chunk_size)) != chunk_size) {
+ if (SSL_get_error(clientssl, err) != SSL_ERROR_WANT_READ)
+ goto end;
+ }
+
+ /* verify the payload */
+ if (!TEST_mem_eq(buf_dst + chunk_off,
+ chunk_size,
+ buf + chunk_off,
+ chunk_size))
+ goto end;
+
+ chunk_off += chunk_size;
+ }
+
+ testresult = 1;
+end:
+ if (clientssl) {
+ SSL_shutdown(clientssl);
+ SSL_free(clientssl);
+ }
+ if (serverssl) {
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ }
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ serverssl = clientssl = NULL;
+ BIO_free(out);
+ BIO_free(in);
+ if (cfd != -1)
+ close(cfd);
+ if (sfd != -1)
+ close(sfd);
+ OPENSSL_free(buf);
+ OPENSSL_free(buf_dst);
+ return testresult;
+}
+
+static struct ktls_test_cipher {
+ int tls_version;
+ const char *cipher;
+} ktls_test_ciphers[] = {
+# if !defined(OPENSSL_NO_TLS1_2)
+# ifdef OPENSSL_KTLS_AES_GCM_128
+ { TLS1_2_VERSION, "AES128-GCM-SHA256" },
+# endif
+# ifdef OPENSSL_KTLS_AES_CCM_128
+ { TLS1_2_VERSION, "AES128-CCM"},
+# endif
+# ifdef OPENSSL_KTLS_AES_GCM_256
+ { TLS1_2_VERSION, "AES256-GCM-SHA384"},
+# endif
+# ifdef OPENSSL_KTLS_CHACHA20_POLY1305
+# ifndef OPENSSL_NO_EC
+ { TLS1_2_VERSION, "ECDHE-RSA-CHACHA20-POLY1305"},
+# endif
+# endif
+# endif
+# if !defined(OSSL_NO_USABLE_TLS1_3)
+# ifdef OPENSSL_KTLS_AES_GCM_128
+ { TLS1_3_VERSION, "TLS_AES_128_GCM_SHA256" },
+# endif
+# ifdef OPENSSL_KTLS_AES_CCM_128
+ { TLS1_3_VERSION, "TLS_AES_128_CCM_SHA256" },
+# endif
+# ifdef OPENSSL_KTLS_AES_GCM_256
+ { TLS1_3_VERSION, "TLS_AES_256_GCM_SHA384" },
+# endif
+# ifdef OPENSSL_KTLS_CHACHA20_POLY1305
+ { TLS1_3_VERSION, "TLS_CHACHA20_POLY1305_SHA256" },
+# endif
+# endif
+};
+
+#define NUM_KTLS_TEST_CIPHERS \
+ (sizeof(ktls_test_ciphers) / sizeof(ktls_test_ciphers[0]))
+
+static int test_ktls(int test)
+{
+ struct ktls_test_cipher *cipher;
+ int cis_ktls, sis_ktls;
+
+ OPENSSL_assert(test / 4 < (int)NUM_KTLS_TEST_CIPHERS);
+ cipher = &ktls_test_ciphers[test / 4];
+
+ cis_ktls = (test & 1) != 0;
+ sis_ktls = (test & 2) != 0;
+
+ return execute_test_ktls(cis_ktls, sis_ktls, cipher->tls_version,
+ cipher->cipher);
+}
+
+static int test_ktls_sendfile(int tst)
+{
+ struct ktls_test_cipher *cipher;
+
+ OPENSSL_assert(tst < (int)NUM_KTLS_TEST_CIPHERS);
+ cipher = &ktls_test_ciphers[tst];
+
+ return execute_test_ktls_sendfile(cipher->tls_version, cipher->cipher);
+}
+#endif
+
+static int test_large_message_tls(void)
+{
+ return execute_test_large_message(TLS_server_method(), TLS_client_method(),
+ TLS1_VERSION, 0, 0);
+}
+
+static int test_large_message_tls_read_ahead(void)
+{
+ return execute_test_large_message(TLS_server_method(), TLS_client_method(),
+ TLS1_VERSION, 0, 1);
+}
+
+#ifndef OPENSSL_NO_DTLS
+static int test_large_message_dtls(void)
+{
+# ifdef OPENSSL_NO_DTLS1_2
+ /* Not supported in the FIPS provider */
+ if (is_fips)
+ return 1;
+# endif
+ /*
+ * read_ahead is not relevant to DTLS because DTLS always acts as if
+ * read_ahead is set.
+ */
+ return execute_test_large_message(DTLS_server_method(),
+ DTLS_client_method(),
+ DTLS1_VERSION, 0, 0);
+}
+#endif
+
+/*
+ * Test we can successfully send the maximum amount of application data. We
+ * test each protocol version individually, each with and without EtM enabled.
+ * TLSv1.3 doesn't use EtM so technically it is redundant to test both but it is
+ * simpler this way. We also test all combinations with and without the
+ * SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS option which affects the size of the
+ * underlying buffer.
+ */
+static int test_large_app_data(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0, prot;
+ unsigned char *msg, *buf = NULL;
+ size_t written, readbytes;
+ const SSL_METHOD *smeth = TLS_server_method();
+ const SSL_METHOD *cmeth = TLS_client_method();
+
+ switch (tst >> 2) {
+ case 0:
+#ifndef OSSL_NO_USABLE_TLS1_3
+ prot = TLS1_3_VERSION;
+ break;
+#else
+ return 1;
+#endif
+
+ case 1:
+#ifndef OPENSSL_NO_TLS1_2
+ prot = TLS1_2_VERSION;
+ break;
+#else
+ return 1;
+#endif
+
+ case 2:
+#ifndef OPENSSL_NO_TLS1_1
+ prot = TLS1_1_VERSION;
+ break;
+#else
+ return 1;
+#endif
+
+ case 3:
+#ifndef OPENSSL_NO_TLS1
+ prot = TLS1_VERSION;
+ break;
+#else
+ return 1;
+#endif
+
+ case 4:
+#ifndef OPENSSL_NO_SSL3
+ prot = SSL3_VERSION;
+ break;
+#else
+ return 1;
+#endif
+
+ case 5:
+#ifndef OPENSSL_NO_DTLS1_2
+ prot = DTLS1_2_VERSION;
+ smeth = DTLS_server_method();
+ cmeth = DTLS_client_method();
+ break;
+#else
+ return 1;
+#endif
+
+ case 6:
+#ifndef OPENSSL_NO_DTLS1
+ prot = DTLS1_VERSION;
+ smeth = DTLS_server_method();
+ cmeth = DTLS_client_method();
+ break;
+#else
+ return 1;
+#endif
+
+ default:
+ /* Shouldn't happen */
+ return 0;
+ }
+
+ if ((prot < TLS1_2_VERSION || prot == DTLS1_VERSION) && is_fips)
+ return 1;
+
+ /* Maximal sized message of zeros */
+ msg = OPENSSL_zalloc(SSL3_RT_MAX_PLAIN_LENGTH);
+ if (!TEST_ptr(msg))
+ goto end;
+
+ buf = OPENSSL_malloc(SSL3_RT_MAX_PLAIN_LENGTH + 1);
+ if (!TEST_ptr(buf))
+ goto end;
+ /* Set whole buffer to all bits set */
+ memset(buf, 0xff, SSL3_RT_MAX_PLAIN_LENGTH + 1);
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, smeth, cmeth, prot, prot,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (prot < TLS1_2_VERSION || prot == DTLS1_VERSION) {
+ /* Older protocol versions need SECLEVEL=0 due to SHA1 usage */
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "DEFAULT:@SECLEVEL=0"))
+ || !TEST_true(SSL_CTX_set_cipher_list(sctx,
+ "DEFAULT:@SECLEVEL=0")))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ if ((tst & 1) != 0) {
+ /* Setting this option gives us a minimally sized underlying buffer */
+ if (!TEST_true(SSL_set_options(serverssl,
+ SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS))
+ || !TEST_true(SSL_set_options(clientssl,
+ SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)))
+ goto end;
+ }
+
+ if ((tst & 2) != 0) {
+ /*
+ * Setting this option means the MAC is added before encryption
+ * giving us a larger record for the encryption process
+ */
+ if (!TEST_true(SSL_set_options(serverssl, SSL_OP_NO_ENCRYPT_THEN_MAC))
+ || !TEST_true(SSL_set_options(clientssl,
+ SSL_OP_NO_ENCRYPT_THEN_MAC)))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ if (!TEST_true(SSL_write_ex(clientssl, msg, SSL3_RT_MAX_PLAIN_LENGTH,
+ &written))
+ || !TEST_size_t_eq(written, SSL3_RT_MAX_PLAIN_LENGTH))
+ goto end;
+
+ /* We provide a buffer slightly larger than what we are actually expecting */
+ if (!TEST_true(SSL_read_ex(serverssl, buf, SSL3_RT_MAX_PLAIN_LENGTH + 1,
+ &readbytes)))
+ goto end;
+
+ if (!TEST_mem_eq(msg, written, buf, readbytes))
+ goto end;
+
+ testresult = 1;
+end:
+ OPENSSL_free(msg);
+ OPENSSL_free(buf);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+#if !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3) \
+ || !defined(OPENSSL_NO_DTLS)
+static int execute_cleanse_plaintext(const SSL_METHOD *smeth,
+ const SSL_METHOD *cmeth,
+ int min_version, int max_version)
+{
+ size_t i;
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ SSL3_RECORD *rr;
+ void *zbuf;
+
+ static unsigned char cbuf[16000];
+ static unsigned char sbuf[16000];
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx,
+ smeth, cmeth,
+ min_version, max_version,
+ &sctx, &cctx, cert,
+ privkey)))
+ goto end;
+
+# ifdef OPENSSL_NO_DTLS1_2
+ if (smeth == DTLS_server_method()) {
+ /* Not supported in the FIPS provider */
+ if (is_fips) {
+ testresult = 1;
+ goto end;
+ };
+ /*
+ * Default sigalgs are SHA1 based in <DTLS1.2 which is in security
+ * level 0
+ */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0"))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "DEFAULT:@SECLEVEL=0")))
+ goto end;
+ }
+# endif
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(SSL_set_options(serverssl, SSL_OP_CLEANSE_PLAINTEXT)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ for (i = 0; i < sizeof(cbuf); i++) {
+ cbuf[i] = i & 0xff;
+ }
+
+ if (!TEST_int_eq(SSL_write(clientssl, cbuf, sizeof(cbuf)), sizeof(cbuf)))
+ goto end;
+
+ if (!TEST_int_eq(SSL_peek(serverssl, &sbuf, sizeof(sbuf)), sizeof(sbuf)))
+ goto end;
+
+ if (!TEST_mem_eq(cbuf, sizeof(cbuf), sbuf, sizeof(sbuf)))
+ goto end;
+
+ /*
+ * Since we called SSL_peek(), we know the data in the record
+ * layer is a plaintext record. We can gather the pointer to check
+ * for zeroization after SSL_read().
+ */
+ rr = serverssl->rlayer.rrec;
+ zbuf = &rr->data[rr->off];
+ if (!TEST_int_eq(rr->length, sizeof(cbuf)))
+ goto end;
+
+ /*
+ * After SSL_peek() the plaintext must still be stored in the
+ * record.
+ */
+ if (!TEST_mem_eq(cbuf, sizeof(cbuf), zbuf, sizeof(cbuf)))
+ goto end;
+
+ memset(sbuf, 0, sizeof(sbuf));
+ if (!TEST_int_eq(SSL_read(serverssl, &sbuf, sizeof(sbuf)), sizeof(sbuf)))
+ goto end;
+
+ if (!TEST_mem_eq(cbuf, sizeof(cbuf), sbuf, sizeof(cbuf)))
+ goto end;
+
+ /* Check if rbuf is cleansed */
+ memset(cbuf, 0, sizeof(cbuf));
+ if (!TEST_mem_eq(cbuf, sizeof(cbuf), zbuf, sizeof(cbuf)))
+ goto end;
+
+ testresult = 1;
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif /*
+ * !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3)
+ * || !defined(OPENSSL_NO_DTLS)
+ */
+
+static int test_cleanse_plaintext(void)
+{
+#if !defined(OPENSSL_NO_TLS1_2)
+ if (!TEST_true(execute_cleanse_plaintext(TLS_server_method(),
+ TLS_client_method(),
+ TLS1_2_VERSION,
+ TLS1_2_VERSION)))
+ return 0;
+
+#endif
+
+#if !defined(OSSL_NO_USABLE_TLS1_3)
+ if (!TEST_true(execute_cleanse_plaintext(TLS_server_method(),
+ TLS_client_method(),
+ TLS1_3_VERSION,
+ TLS1_3_VERSION)))
+ return 0;
+#endif
+
+#if !defined(OPENSSL_NO_DTLS)
+
+ if (!TEST_true(execute_cleanse_plaintext(DTLS_server_method(),
+ DTLS_client_method(),
+ DTLS1_VERSION,
+ 0)))
+ return 0;
+#endif
+ return 1;
+}
+
+#ifndef OPENSSL_NO_OCSP
+static int ocsp_server_cb(SSL *s, void *arg)
+{
+ int *argi = (int *)arg;
+ unsigned char *copy = NULL;
+ STACK_OF(OCSP_RESPID) *ids = NULL;
+ OCSP_RESPID *id = NULL;
+
+ if (*argi == 2) {
+ /* In this test we are expecting exactly 1 OCSP_RESPID */
+ SSL_get_tlsext_status_ids(s, &ids);
+ if (ids == NULL || sk_OCSP_RESPID_num(ids) != 1)
+ return SSL_TLSEXT_ERR_ALERT_FATAL;
+
+ id = sk_OCSP_RESPID_value(ids, 0);
+ if (id == NULL || !OCSP_RESPID_match_ex(id, ocspcert, libctx, NULL))
+ return SSL_TLSEXT_ERR_ALERT_FATAL;
+ } else if (*argi != 1) {
+ return SSL_TLSEXT_ERR_ALERT_FATAL;
+ }
+
+ if (!TEST_ptr(copy = OPENSSL_memdup(orespder, sizeof(orespder))))
+ return SSL_TLSEXT_ERR_ALERT_FATAL;
+
+ if (!TEST_true(SSL_set_tlsext_status_ocsp_resp(s, copy,
+ sizeof(orespder)))) {
+ OPENSSL_free(copy);
+ return SSL_TLSEXT_ERR_ALERT_FATAL;
+ }
+ ocsp_server_called = 1;
+ return SSL_TLSEXT_ERR_OK;
+}
+
+static int ocsp_client_cb(SSL *s, void *arg)
+{
+ int *argi = (int *)arg;
+ const unsigned char *respderin;
+ size_t len;
+
+ if (*argi != 1 && *argi != 2)
+ return 0;
+
+ len = SSL_get_tlsext_status_ocsp_resp(s, &respderin);
+ if (!TEST_mem_eq(orespder, len, respderin, len))
+ return 0;
+
+ ocsp_client_called = 1;
+ return 1;
+}
+
+static int test_tlsext_status_type(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ STACK_OF(OCSP_RESPID) *ids = NULL;
+ OCSP_RESPID *id = NULL;
+ BIO *certbio = NULL;
+
+ if (!create_ssl_ctx_pair(libctx, TLS_server_method(), TLS_client_method(),
+ TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey))
+ return 0;
+
+ if (SSL_CTX_get_tlsext_status_type(cctx) != -1)
+ goto end;
+
+ /* First just do various checks getting and setting tlsext_status_type */
+
+ clientssl = SSL_new(cctx);
+ if (!TEST_int_eq(SSL_get_tlsext_status_type(clientssl), -1)
+ || !TEST_true(SSL_set_tlsext_status_type(clientssl,
+ TLSEXT_STATUSTYPE_ocsp))
+ || !TEST_int_eq(SSL_get_tlsext_status_type(clientssl),
+ TLSEXT_STATUSTYPE_ocsp))
+ goto end;
+
+ SSL_free(clientssl);
+ clientssl = NULL;
+
+ if (!SSL_CTX_set_tlsext_status_type(cctx, TLSEXT_STATUSTYPE_ocsp)
+ || SSL_CTX_get_tlsext_status_type(cctx) != TLSEXT_STATUSTYPE_ocsp)
+ goto end;
+
+ clientssl = SSL_new(cctx);
+ if (SSL_get_tlsext_status_type(clientssl) != TLSEXT_STATUSTYPE_ocsp)
+ goto end;
+ SSL_free(clientssl);
+ clientssl = NULL;
+
+ /*
+ * Now actually do a handshake and check OCSP information is exchanged and
+ * the callbacks get called
+ */
+ SSL_CTX_set_tlsext_status_cb(cctx, ocsp_client_cb);
+ SSL_CTX_set_tlsext_status_arg(cctx, &cdummyarg);
+ SSL_CTX_set_tlsext_status_cb(sctx, ocsp_server_cb);
+ SSL_CTX_set_tlsext_status_arg(sctx, &cdummyarg);
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_true(ocsp_client_called)
+ || !TEST_true(ocsp_server_called))
+ goto end;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = NULL;
+ clientssl = NULL;
+
+ /* Try again but this time force the server side callback to fail */
+ ocsp_client_called = 0;
+ ocsp_server_called = 0;
+ cdummyarg = 0;
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ /* This should fail because the callback will fail */
+ || !TEST_false(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_false(ocsp_client_called)
+ || !TEST_false(ocsp_server_called))
+ goto end;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = NULL;
+ clientssl = NULL;
+
+ /*
+ * This time we'll get the client to send an OCSP_RESPID that it will
+ * accept.
+ */
+ ocsp_client_called = 0;
+ ocsp_server_called = 0;
+ cdummyarg = 2;
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ /*
+ * We'll just use any old cert for this test - it doesn't have to be an OCSP
+ * specific one. We'll use the server cert.
+ */
+ if (!TEST_ptr(certbio = BIO_new_file(cert, "r"))
+ || !TEST_ptr(id = OCSP_RESPID_new())
+ || !TEST_ptr(ids = sk_OCSP_RESPID_new_null())
+ || !TEST_ptr(ocspcert = X509_new_ex(libctx, NULL))
+ || !TEST_ptr(PEM_read_bio_X509(certbio, &ocspcert, NULL, NULL))
+ || !TEST_true(OCSP_RESPID_set_by_key_ex(id, ocspcert, libctx, NULL))
+ || !TEST_true(sk_OCSP_RESPID_push(ids, id)))
+ goto end;
+ id = NULL;
+ SSL_set_tlsext_status_ids(clientssl, ids);
+ /* Control has been transferred */
+ ids = NULL;
+
+ BIO_free(certbio);
+ certbio = NULL;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_true(ocsp_client_called)
+ || !TEST_true(ocsp_server_called))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ sk_OCSP_RESPID_pop_free(ids, OCSP_RESPID_free);
+ OCSP_RESPID_free(id);
+ BIO_free(certbio);
+ X509_free(ocspcert);
+ ocspcert = NULL;
+
+ return testresult;
+}
+#endif
+
+#if !defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2)
+static int new_called, remove_called, get_called;
+
+static int new_session_cb(SSL *ssl, SSL_SESSION *sess)
+{
+ new_called++;
+ /*
+ * sess has been up-refed for us, but we don't actually need it so free it
+ * immediately.
+ */
+ SSL_SESSION_free(sess);
+ return 1;
+}
+
+static void remove_session_cb(SSL_CTX *ctx, SSL_SESSION *sess)
+{
+ remove_called++;
+}
+
+static SSL_SESSION *get_sess_val = NULL;
+
+static SSL_SESSION *get_session_cb(SSL *ssl, const unsigned char *id, int len,
+ int *copy)
+{
+ get_called++;
+ *copy = 1;
+ return get_sess_val;
+}
+
+static int execute_test_session(int maxprot, int use_int_cache,
+ int use_ext_cache, long s_options)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl1 = NULL, *clientssl1 = NULL;
+ SSL *serverssl2 = NULL, *clientssl2 = NULL;
+# ifndef OPENSSL_NO_TLS1_1
+ SSL *serverssl3 = NULL, *clientssl3 = NULL;
+# endif
+ SSL_SESSION *sess1 = NULL, *sess2 = NULL;
+ int testresult = 0, numnewsesstick = 1;
+
+ new_called = remove_called = 0;
+
+ /* TLSv1.3 sends 2 NewSessionTickets */
+ if (maxprot == TLS1_3_VERSION)
+ numnewsesstick = 2;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+ /*
+ * Only allow the max protocol version so we can force a connection failure
+ * later
+ */
+ SSL_CTX_set_min_proto_version(cctx, maxprot);
+ SSL_CTX_set_max_proto_version(cctx, maxprot);
+
+ /* Set up session cache */
+ if (use_ext_cache) {
+ SSL_CTX_sess_set_new_cb(cctx, new_session_cb);
+ SSL_CTX_sess_set_remove_cb(cctx, remove_session_cb);
+ }
+ if (use_int_cache) {
+ /* Also covers instance where both are set */
+ SSL_CTX_set_session_cache_mode(cctx, SSL_SESS_CACHE_CLIENT);
+ } else {
+ SSL_CTX_set_session_cache_mode(cctx,
+ SSL_SESS_CACHE_CLIENT
+ | SSL_SESS_CACHE_NO_INTERNAL_STORE);
+ }
+
+ if (s_options) {
+ SSL_CTX_set_options(sctx, s_options);
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl1, &clientssl1,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl1, clientssl1,
+ SSL_ERROR_NONE))
+ || !TEST_ptr(sess1 = SSL_get1_session(clientssl1)))
+ goto end;
+
+ /* Should fail because it should already be in the cache */
+ if (use_int_cache && !TEST_false(SSL_CTX_add_session(cctx, sess1)))
+ goto end;
+ if (use_ext_cache
+ && (!TEST_int_eq(new_called, numnewsesstick)
+
+ || !TEST_int_eq(remove_called, 0)))
+ goto end;
+
+ new_called = remove_called = 0;
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2,
+ &clientssl2, NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl2, sess1))
+ || !TEST_true(create_ssl_connection(serverssl2, clientssl2,
+ SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl2)))
+ goto end;
+
+ if (maxprot == TLS1_3_VERSION) {
+ /*
+ * In TLSv1.3 we should have created a new session even though we have
+ * resumed. Since we attempted a resume we should also have removed the
+ * old ticket from the cache so that we try to only use tickets once.
+ */
+ if (use_ext_cache
+ && (!TEST_int_eq(new_called, 1)
+ || !TEST_int_eq(remove_called, 1)))
+ goto end;
+ } else {
+ /*
+ * In TLSv1.2 we expect to have resumed so no sessions added or
+ * removed.
+ */
+ if (use_ext_cache
+ && (!TEST_int_eq(new_called, 0)
+ || !TEST_int_eq(remove_called, 0)))
+ goto end;
+ }
+
+ SSL_SESSION_free(sess1);
+ if (!TEST_ptr(sess1 = SSL_get1_session(clientssl2)))
+ goto end;
+ shutdown_ssl_connection(serverssl2, clientssl2);
+ serverssl2 = clientssl2 = NULL;
+
+ new_called = remove_called = 0;
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2,
+ &clientssl2, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl2, clientssl2,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ if (!TEST_ptr(sess2 = SSL_get1_session(clientssl2)))
+ goto end;
+
+ if (use_ext_cache
+ && (!TEST_int_eq(new_called, numnewsesstick)
+ || !TEST_int_eq(remove_called, 0)))
+ goto end;
+
+ new_called = remove_called = 0;
+ /*
+ * This should clear sess2 from the cache because it is a "bad" session.
+ * See SSL_set_session() documentation.
+ */
+ if (!TEST_true(SSL_set_session(clientssl2, sess1)))
+ goto end;
+ if (use_ext_cache
+ && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1)))
+ goto end;
+ if (!TEST_ptr_eq(SSL_get_session(clientssl2), sess1))
+ goto end;
+
+ if (use_int_cache) {
+ /* Should succeeded because it should not already be in the cache */
+ if (!TEST_true(SSL_CTX_add_session(cctx, sess2))
+ || !TEST_true(SSL_CTX_remove_session(cctx, sess2)))
+ goto end;
+ }
+
+ new_called = remove_called = 0;
+ /* This shouldn't be in the cache so should fail */
+ if (!TEST_false(SSL_CTX_remove_session(cctx, sess2)))
+ goto end;
+
+ if (use_ext_cache
+ && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1)))
+ goto end;
+
+# if !defined(OPENSSL_NO_TLS1_1)
+ new_called = remove_called = 0;
+ /* Force a connection failure */
+ SSL_CTX_set_max_proto_version(sctx, TLS1_1_VERSION);
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl3,
+ &clientssl3, NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl3, sess1))
+ /* This should fail because of the mismatched protocol versions */
+ || !TEST_false(create_ssl_connection(serverssl3, clientssl3,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ /* We should have automatically removed the session from the cache */
+ if (use_ext_cache
+ && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1)))
+ goto end;
+
+ /* Should succeed because it should not already be in the cache */
+ if (use_int_cache && !TEST_true(SSL_CTX_add_session(cctx, sess2)))
+ goto end;
+# endif
+
+ /* Now do some tests for server side caching */
+ if (use_ext_cache) {
+ SSL_CTX_sess_set_new_cb(cctx, NULL);
+ SSL_CTX_sess_set_remove_cb(cctx, NULL);
+ SSL_CTX_sess_set_new_cb(sctx, new_session_cb);
+ SSL_CTX_sess_set_remove_cb(sctx, remove_session_cb);
+ SSL_CTX_sess_set_get_cb(sctx, get_session_cb);
+ get_sess_val = NULL;
+ }
+
+ SSL_CTX_set_session_cache_mode(cctx, 0);
+ /* Internal caching is the default on the server side */
+ if (!use_int_cache)
+ SSL_CTX_set_session_cache_mode(sctx,
+ SSL_SESS_CACHE_SERVER
+ | SSL_SESS_CACHE_NO_INTERNAL_STORE);
+
+ SSL_free(serverssl1);
+ SSL_free(clientssl1);
+ serverssl1 = clientssl1 = NULL;
+ SSL_free(serverssl2);
+ SSL_free(clientssl2);
+ serverssl2 = clientssl2 = NULL;
+ SSL_SESSION_free(sess1);
+ sess1 = NULL;
+ SSL_SESSION_free(sess2);
+ sess2 = NULL;
+
+ SSL_CTX_set_max_proto_version(sctx, maxprot);
+ if (maxprot == TLS1_2_VERSION)
+ SSL_CTX_set_options(sctx, SSL_OP_NO_TICKET);
+ new_called = remove_called = get_called = 0;
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl1, &clientssl1,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl1, clientssl1,
+ SSL_ERROR_NONE))
+ || !TEST_ptr(sess1 = SSL_get1_session(clientssl1))
+ || !TEST_ptr(sess2 = SSL_get1_session(serverssl1)))
+ goto end;
+
+ if (use_int_cache) {
+ if (maxprot == TLS1_3_VERSION && !use_ext_cache) {
+ /*
+ * In TLSv1.3 it should not have been added to the internal cache,
+ * except in the case where we also have an external cache (in that
+ * case it gets added to the cache in order to generate remove
+ * events after timeout).
+ */
+ if (!TEST_false(SSL_CTX_remove_session(sctx, sess2)))
+ goto end;
+ } else {
+ /* Should fail because it should already be in the cache */
+ if (!TEST_false(SSL_CTX_add_session(sctx, sess2)))
+ goto end;
+ }
+ }
+
+ if (use_ext_cache) {
+ SSL_SESSION *tmp = sess2;
+
+ if (!TEST_int_eq(new_called, numnewsesstick)
+ || !TEST_int_eq(remove_called, 0)
+ || !TEST_int_eq(get_called, 0))
+ goto end;
+ /*
+ * Delete the session from the internal cache to force a lookup from
+ * the external cache. We take a copy first because
+ * SSL_CTX_remove_session() also marks the session as non-resumable.
+ */
+ if (use_int_cache && maxprot != TLS1_3_VERSION) {
+ if (!TEST_ptr(tmp = SSL_SESSION_dup(sess2))
+ || !TEST_true(sess2->owner != NULL)
+ || !TEST_true(tmp->owner == NULL)
+ || !TEST_true(SSL_CTX_remove_session(sctx, sess2)))
+ goto end;
+ SSL_SESSION_free(sess2);
+ }
+ sess2 = tmp;
+ }
+
+ new_called = remove_called = get_called = 0;
+ get_sess_val = sess2;
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2,
+ &clientssl2, NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl2, sess1))
+ || !TEST_true(create_ssl_connection(serverssl2, clientssl2,
+ SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl2)))
+ goto end;
+
+ if (use_ext_cache) {
+ if (!TEST_int_eq(remove_called, 0))
+ goto end;
+
+ if (maxprot == TLS1_3_VERSION) {
+ if (!TEST_int_eq(new_called, 1)
+ || !TEST_int_eq(get_called, 0))
+ goto end;
+ } else {
+ if (!TEST_int_eq(new_called, 0)
+ || !TEST_int_eq(get_called, 1))
+ goto end;
+ }
+ }
+ /*
+ * Make a small cache, force out all other sessions but
+ * sess2, try to add sess1, which should succeed. Then
+ * make sure it's there by checking the owners. Despite
+ * the timeouts, sess1 should have kicked out sess2
+ */
+
+ /* Make sess1 expire before sess2 */
+ if (!TEST_long_gt(SSL_SESSION_set_time(sess1, 1000), 0)
+ || !TEST_long_gt(SSL_SESSION_set_timeout(sess1, 1000), 0)
+ || !TEST_long_gt(SSL_SESSION_set_time(sess2, 2000), 0)
+ || !TEST_long_gt(SSL_SESSION_set_timeout(sess2, 2000), 0))
+ goto end;
+
+ if (!TEST_long_ne(SSL_CTX_sess_set_cache_size(sctx, 1), 0))
+ goto end;
+
+ /* Don't care about results - cache should only be sess2 at end */
+ SSL_CTX_add_session(sctx, sess1);
+ SSL_CTX_add_session(sctx, sess2);
+
+ /* Now add sess1, and make sure it remains, despite timeout */
+ if (!TEST_true(SSL_CTX_add_session(sctx, sess1))
+ || !TEST_ptr(sess1->owner)
+ || !TEST_ptr_null(sess2->owner))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl1);
+ SSL_free(clientssl1);
+ SSL_free(serverssl2);
+ SSL_free(clientssl2);
+# ifndef OPENSSL_NO_TLS1_1
+ SSL_free(serverssl3);
+ SSL_free(clientssl3);
+# endif
+ SSL_SESSION_free(sess1);
+ SSL_SESSION_free(sess2);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif /* !defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2) */
+
+static int test_session_with_only_int_cache(void)
+{
+#ifndef OSSL_NO_USABLE_TLS1_3
+ if (!execute_test_session(TLS1_3_VERSION, 1, 0, 0))
+ return 0;
+#endif
+
+#ifndef OPENSSL_NO_TLS1_2
+ return execute_test_session(TLS1_2_VERSION, 1, 0, 0);
+#else
+ return 1;
+#endif
+}
+
+static int test_session_with_only_ext_cache(void)
+{
+#ifndef OSSL_NO_USABLE_TLS1_3
+ if (!execute_test_session(TLS1_3_VERSION, 0, 1, 0))
+ return 0;
+#endif
+
+#ifndef OPENSSL_NO_TLS1_2
+ return execute_test_session(TLS1_2_VERSION, 0, 1, 0);
+#else
+ return 1;
+#endif
+}
+
+static int test_session_with_both_cache(void)
+{
+#ifndef OSSL_NO_USABLE_TLS1_3
+ if (!execute_test_session(TLS1_3_VERSION, 1, 1, 0))
+ return 0;
+#endif
+
+#ifndef OPENSSL_NO_TLS1_2
+ return execute_test_session(TLS1_2_VERSION, 1, 1, 0);
+#else
+ return 1;
+#endif
+}
+
+static int test_session_wo_ca_names(void)
+{
+#ifndef OSSL_NO_USABLE_TLS1_3
+ if (!execute_test_session(TLS1_3_VERSION, 1, 0, SSL_OP_DISABLE_TLSEXT_CA_NAMES))
+ return 0;
+#endif
+
+#ifndef OPENSSL_NO_TLS1_2
+ return execute_test_session(TLS1_2_VERSION, 1, 0, SSL_OP_DISABLE_TLSEXT_CA_NAMES);
+#else
+ return 1;
+#endif
+}
+
+
+#ifndef OSSL_NO_USABLE_TLS1_3
+static SSL_SESSION *sesscache[6];
+static int do_cache;
+
+static int new_cachesession_cb(SSL *ssl, SSL_SESSION *sess)
+{
+ if (do_cache) {
+ sesscache[new_called] = sess;
+ } else {
+ /* We don't need the reference to the session, so free it */
+ SSL_SESSION_free(sess);
+ }
+ new_called++;
+
+ return 1;
+}
+
+static int post_handshake_verify(SSL *sssl, SSL *cssl)
+{
+ SSL_set_verify(sssl, SSL_VERIFY_PEER, NULL);
+ if (!TEST_true(SSL_verify_client_post_handshake(sssl)))
+ return 0;
+
+ /* Start handshake on the server and client */
+ if (!TEST_int_eq(SSL_do_handshake(sssl), 1)
+ || !TEST_int_le(SSL_read(cssl, NULL, 0), 0)
+ || !TEST_int_le(SSL_read(sssl, NULL, 0), 0)
+ || !TEST_true(create_ssl_connection(sssl, cssl,
+ SSL_ERROR_NONE)))
+ return 0;
+
+ return 1;
+}
+
+static int setup_ticket_test(int stateful, int idx, SSL_CTX **sctx,
+ SSL_CTX **cctx)
+{
+ int sess_id_ctx = 1;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ sctx, cctx, cert, privkey))
+ || !TEST_true(SSL_CTX_set_num_tickets(*sctx, idx))
+ || !TEST_true(SSL_CTX_set_session_id_context(*sctx,
+ (void *)&sess_id_ctx,
+ sizeof(sess_id_ctx))))
+ return 0;
+
+ if (stateful)
+ SSL_CTX_set_options(*sctx, SSL_OP_NO_TICKET);
+
+ SSL_CTX_set_session_cache_mode(*cctx, SSL_SESS_CACHE_CLIENT
+ | SSL_SESS_CACHE_NO_INTERNAL_STORE);
+ SSL_CTX_sess_set_new_cb(*cctx, new_cachesession_cb);
+
+ return 1;
+}
+
+static int check_resumption(int idx, SSL_CTX *sctx, SSL_CTX *cctx, int succ)
+{
+ SSL *serverssl = NULL, *clientssl = NULL;
+ int i;
+
+ /* Test that we can resume with all the tickets we got given */
+ for (i = 0; i < idx * 2; i++) {
+ new_called = 0;
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, sesscache[i])))
+ goto end;
+
+ SSL_set_post_handshake_auth(clientssl, 1);
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ /*
+ * Following a successful resumption we only get 1 ticket. After a
+ * failed one we should get idx tickets.
+ */
+ if (succ) {
+ if (!TEST_true(SSL_session_reused(clientssl))
+ || !TEST_int_eq(new_called, 1))
+ goto end;
+ } else {
+ if (!TEST_false(SSL_session_reused(clientssl))
+ || !TEST_int_eq(new_called, idx))
+ goto end;
+ }
+
+ new_called = 0;
+ /* After a post-handshake authentication we should get 1 new ticket */
+ if (succ
+ && (!post_handshake_verify(serverssl, clientssl)
+ || !TEST_int_eq(new_called, 1)))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+ SSL_SESSION_free(sesscache[i]);
+ sesscache[i] = NULL;
+ }
+
+ return 1;
+
+ end:
+ SSL_free(clientssl);
+ SSL_free(serverssl);
+ return 0;
+}
+
+static int test_tickets(int stateful, int idx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ int testresult = 0;
+ size_t j;
+
+ /* idx is the test number, but also the number of tickets we want */
+
+ new_called = 0;
+ do_cache = 1;
+
+ if (!setup_ticket_test(stateful, idx, &sctx, &cctx))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ /* Check we got the number of tickets we were expecting */
+ || !TEST_int_eq(idx, new_called))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ clientssl = serverssl = NULL;
+ sctx = cctx = NULL;
+
+ /*
+ * Now we try to resume with the tickets we previously created. The
+ * resumption attempt is expected to fail (because we're now using a new
+ * SSL_CTX). We should see idx number of tickets issued again.
+ */
+
+ /* Stop caching sessions - just count them */
+ do_cache = 0;
+
+ if (!setup_ticket_test(stateful, idx, &sctx, &cctx))
+ goto end;
+
+ if (!check_resumption(idx, sctx, cctx, 0))
+ goto end;
+
+ /* Start again with caching sessions */
+ new_called = 0;
+ do_cache = 1;
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ sctx = cctx = NULL;
+
+ if (!setup_ticket_test(stateful, idx, &sctx, &cctx))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ SSL_set_post_handshake_auth(clientssl, 1);
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ /* Check we got the number of tickets we were expecting */
+ || !TEST_int_eq(idx, new_called))
+ goto end;
+
+ /* After a post-handshake authentication we should get new tickets issued */
+ if (!post_handshake_verify(serverssl, clientssl)
+ || !TEST_int_eq(idx * 2, new_called))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ /* Stop caching sessions - just count them */
+ do_cache = 0;
+
+ /*
+ * Check we can resume with all the tickets we created. This time around the
+ * resumptions should all be successful.
+ */
+ if (!check_resumption(idx, sctx, cctx, 1))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ for (j = 0; j < OSSL_NELEM(sesscache); j++) {
+ SSL_SESSION_free(sesscache[j]);
+ sesscache[j] = NULL;
+ }
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+static int test_stateless_tickets(int idx)
+{
+ return test_tickets(0, idx);
+}
+
+static int test_stateful_tickets(int idx)
+{
+ return test_tickets(1, idx);
+}
+
+static int test_psk_tickets(void)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ int testresult = 0;
+ int sess_id_ctx = 1;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, NULL, NULL))
+ || !TEST_true(SSL_CTX_set_session_id_context(sctx,
+ (void *)&sess_id_ctx,
+ sizeof(sess_id_ctx))))
+ goto end;
+
+ SSL_CTX_set_session_cache_mode(cctx, SSL_SESS_CACHE_CLIENT
+ | SSL_SESS_CACHE_NO_INTERNAL_STORE);
+ SSL_CTX_set_psk_use_session_callback(cctx, use_session_cb);
+ SSL_CTX_set_psk_find_session_callback(sctx, find_session_cb);
+ SSL_CTX_sess_set_new_cb(cctx, new_session_cb);
+ use_session_cb_cnt = 0;
+ find_session_cb_cnt = 0;
+ srvid = pskid;
+ new_called = 0;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+ clientpsk = serverpsk = create_a_psk(clientssl, SHA384_DIGEST_LENGTH);
+ if (!TEST_ptr(clientpsk))
+ goto end;
+ SSL_SESSION_up_ref(clientpsk);
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_int_eq(1, find_session_cb_cnt)
+ || !TEST_int_eq(1, use_session_cb_cnt)
+ /* We should always get 1 ticket when using external PSK */
+ || !TEST_int_eq(1, new_called))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+
+ return testresult;
+}
+
+static int test_extra_tickets(int idx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ BIO *bretry = BIO_new(bio_s_always_retry());
+ BIO *tmp = NULL;
+ int testresult = 0;
+ int stateful = 0;
+ size_t nbytes;
+ unsigned char c, buf[1];
+
+ new_called = 0;
+ do_cache = 1;
+
+ if (idx >= 3) {
+ idx -= 3;
+ stateful = 1;
+ }
+
+ if (!TEST_ptr(bretry) || !setup_ticket_test(stateful, idx, &sctx, &cctx))
+ goto end;
+ SSL_CTX_sess_set_new_cb(sctx, new_session_cb);
+ /* setup_ticket_test() uses new_cachesession_cb which we don't need. */
+ SSL_CTX_sess_set_new_cb(cctx, new_session_cb);
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ /*
+ * Note that we have new_session_cb on both sctx and cctx, so new_called is
+ * incremented by both client and server.
+ */
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ /* Check we got the number of tickets we were expecting */
+ || !TEST_int_eq(idx * 2, new_called)
+ || !TEST_true(SSL_new_session_ticket(serverssl))
+ || !TEST_true(SSL_new_session_ticket(serverssl))
+ || !TEST_int_eq(idx * 2, new_called))
+ goto end;
+
+ /* Now try a (real) write to actually send the tickets */
+ c = '1';
+ if (!TEST_true(SSL_write_ex(serverssl, &c, 1, &nbytes))
+ || !TEST_size_t_eq(1, nbytes)
+ || !TEST_int_eq(idx * 2 + 2, new_called)
+ || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes))
+ || !TEST_int_eq(idx * 2 + 4, new_called)
+ || !TEST_int_eq(sizeof(buf), nbytes)
+ || !TEST_int_eq(c, buf[0])
+ || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes)))
+ goto end;
+
+ /* Try with only requesting one new ticket, too */
+ c = '2';
+ new_called = 0;
+ if (!TEST_true(SSL_new_session_ticket(serverssl))
+ || !TEST_true(SSL_write_ex(serverssl, &c, sizeof(c), &nbytes))
+ || !TEST_size_t_eq(sizeof(c), nbytes)
+ || !TEST_int_eq(1, new_called)
+ || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes))
+ || !TEST_int_eq(2, new_called)
+ || !TEST_size_t_eq(sizeof(buf), nbytes)
+ || !TEST_int_eq(c, buf[0]))
+ goto end;
+
+ /* Do it again but use dummy writes to drive the ticket generation */
+ c = '3';
+ new_called = 0;
+ if (!TEST_true(SSL_new_session_ticket(serverssl))
+ || !TEST_true(SSL_new_session_ticket(serverssl))
+ || !TEST_true(SSL_write_ex(serverssl, &c, 0, &nbytes))
+ || !TEST_size_t_eq(0, nbytes)
+ || !TEST_int_eq(2, new_called)
+ || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes))
+ || !TEST_int_eq(4, new_called))
+ goto end;
+
+ /* Once more, but with SSL_do_handshake() to drive the ticket generation */
+ c = '4';
+ new_called = 0;
+ if (!TEST_true(SSL_new_session_ticket(serverssl))
+ || !TEST_true(SSL_new_session_ticket(serverssl))
+ || !TEST_true(SSL_do_handshake(serverssl))
+ || !TEST_int_eq(2, new_called)
+ || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes))
+ || !TEST_int_eq(4, new_called))
+ goto end;
+
+ /*
+ * Use the always-retry BIO to exercise the logic that forces ticket
+ * generation to wait until a record boundary.
+ */
+ c = '5';
+ new_called = 0;
+ tmp = SSL_get_wbio(serverssl);
+ if (!TEST_ptr(tmp) || !TEST_true(BIO_up_ref(tmp))) {
+ tmp = NULL;
+ goto end;
+ }
+ SSL_set0_wbio(serverssl, bretry);
+ bretry = NULL;
+ if (!TEST_false(SSL_write_ex(serverssl, &c, 1, &nbytes))
+ || !TEST_int_eq(SSL_get_error(serverssl, 0), SSL_ERROR_WANT_WRITE)
+ || !TEST_size_t_eq(nbytes, 0))
+ goto end;
+ /* Restore a BIO that will let the write succeed */
+ SSL_set0_wbio(serverssl, tmp);
+ tmp = NULL;
+ /*
+ * These calls should just queue the request and not send anything
+ * even if we explicitly try to hit the state machine.
+ */
+ if (!TEST_true(SSL_new_session_ticket(serverssl))
+ || !TEST_true(SSL_new_session_ticket(serverssl))
+ || !TEST_int_eq(0, new_called)
+ || !TEST_true(SSL_do_handshake(serverssl))
+ || !TEST_int_eq(0, new_called))
+ goto end;
+ /* Re-do the write; still no tickets sent */
+ if (!TEST_true(SSL_write_ex(serverssl, &c, 1, &nbytes))
+ || !TEST_size_t_eq(1, nbytes)
+ || !TEST_int_eq(0, new_called)
+ || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes))
+ || !TEST_int_eq(0, new_called)
+ || !TEST_int_eq(sizeof(buf), nbytes)
+ || !TEST_int_eq(c, buf[0])
+ || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes)))
+ goto end;
+ /* Even trying to hit the state machine now will still not send tickets */
+ if (!TEST_true(SSL_do_handshake(serverssl))
+ || !TEST_int_eq(0, new_called))
+ goto end;
+ /* Now the *next* write should send the tickets */
+ c = '6';
+ if (!TEST_true(SSL_write_ex(serverssl, &c, 1, &nbytes))
+ || !TEST_size_t_eq(1, nbytes)
+ || !TEST_int_eq(2, new_called)
+ || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes))
+ || !TEST_int_eq(4, new_called)
+ || !TEST_int_eq(sizeof(buf), nbytes)
+ || !TEST_int_eq(c, buf[0])
+ || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes)))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ testresult = 1;
+
+ end:
+ BIO_free(bretry);
+ BIO_free(tmp);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ clientssl = serverssl = NULL;
+ sctx = cctx = NULL;
+ return testresult;
+}
+#endif
+
+#define USE_NULL 0
+#define USE_BIO_1 1
+#define USE_BIO_2 2
+#define USE_DEFAULT 3
+
+#define CONNTYPE_CONNECTION_SUCCESS 0
+#define CONNTYPE_CONNECTION_FAIL 1
+#define CONNTYPE_NO_CONNECTION 2
+
+#define TOTAL_NO_CONN_SSL_SET_BIO_TESTS (3 * 3 * 3 * 3)
+#define TOTAL_CONN_SUCCESS_SSL_SET_BIO_TESTS (2 * 2)
+#if !defined(OSSL_NO_USABLE_TLS1_3) && !defined(OPENSSL_NO_TLS1_2)
+# define TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS (2 * 2)
+#else
+# define TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS 0
+#endif
+
+#define TOTAL_SSL_SET_BIO_TESTS TOTAL_NO_CONN_SSL_SET_BIO_TESTS \
+ + TOTAL_CONN_SUCCESS_SSL_SET_BIO_TESTS \
+ + TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS
+
+static void setupbio(BIO **res, BIO *bio1, BIO *bio2, int type)
+{
+ switch (type) {
+ case USE_NULL:
+ *res = NULL;
+ break;
+ case USE_BIO_1:
+ *res = bio1;
+ break;
+ case USE_BIO_2:
+ *res = bio2;
+ break;
+ }
+}
+
+
+/*
+ * Tests calls to SSL_set_bio() under various conditions.
+ *
+ * For the first 3 * 3 * 3 * 3 = 81 tests we do 2 calls to SSL_set_bio() with
+ * various combinations of valid BIOs or NULL being set for the rbio/wbio. We
+ * then do more tests where we create a successful connection first using our
+ * standard connection setup functions, and then call SSL_set_bio() with
+ * various combinations of valid BIOs or NULL. We then repeat these tests
+ * following a failed connection. In this last case we are looking to check that
+ * SSL_set_bio() functions correctly in the case where s->bbio is not NULL.
+ */
+static int test_ssl_set_bio(int idx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ BIO *bio1 = NULL;
+ BIO *bio2 = NULL;
+ BIO *irbio = NULL, *iwbio = NULL, *nrbio = NULL, *nwbio = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ int initrbio, initwbio, newrbio, newwbio, conntype;
+ int testresult = 0;
+
+ if (idx < TOTAL_NO_CONN_SSL_SET_BIO_TESTS) {
+ initrbio = idx % 3;
+ idx /= 3;
+ initwbio = idx % 3;
+ idx /= 3;
+ newrbio = idx % 3;
+ idx /= 3;
+ newwbio = idx % 3;
+ conntype = CONNTYPE_NO_CONNECTION;
+ } else {
+ idx -= TOTAL_NO_CONN_SSL_SET_BIO_TESTS;
+ initrbio = initwbio = USE_DEFAULT;
+ newrbio = idx % 2;
+ idx /= 2;
+ newwbio = idx % 2;
+ idx /= 2;
+ conntype = idx % 2;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (conntype == CONNTYPE_CONNECTION_FAIL) {
+ /*
+ * We won't ever get here if either TLSv1.3 or TLSv1.2 is disabled
+ * because we reduced the number of tests in the definition of
+ * TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS to avoid this scenario. By setting
+ * mismatched protocol versions we will force a connection failure.
+ */
+ SSL_CTX_set_min_proto_version(sctx, TLS1_3_VERSION);
+ SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION);
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (initrbio == USE_BIO_1
+ || initwbio == USE_BIO_1
+ || newrbio == USE_BIO_1
+ || newwbio == USE_BIO_1) {
+ if (!TEST_ptr(bio1 = BIO_new(BIO_s_mem())))
+ goto end;
+ }
+
+ if (initrbio == USE_BIO_2
+ || initwbio == USE_BIO_2
+ || newrbio == USE_BIO_2
+ || newwbio == USE_BIO_2) {
+ if (!TEST_ptr(bio2 = BIO_new(BIO_s_mem())))
+ goto end;
+ }
+
+ if (initrbio != USE_DEFAULT) {
+ setupbio(&irbio, bio1, bio2, initrbio);
+ setupbio(&iwbio, bio1, bio2, initwbio);
+ SSL_set_bio(clientssl, irbio, iwbio);
+
+ /*
+ * We want to maintain our own refs to these BIO, so do an up ref for
+ * each BIO that will have ownership transferred in the SSL_set_bio()
+ * call
+ */
+ if (irbio != NULL)
+ BIO_up_ref(irbio);
+ if (iwbio != NULL && iwbio != irbio)
+ BIO_up_ref(iwbio);
+ }
+
+ if (conntype != CONNTYPE_NO_CONNECTION
+ && !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)
+ == (conntype == CONNTYPE_CONNECTION_SUCCESS)))
+ goto end;
+
+ setupbio(&nrbio, bio1, bio2, newrbio);
+ setupbio(&nwbio, bio1, bio2, newwbio);
+
+ /*
+ * We will (maybe) transfer ownership again so do more up refs.
+ * SSL_set_bio() has some really complicated ownership rules where BIOs have
+ * already been set!
+ */
+ if (nrbio != NULL
+ && nrbio != irbio
+ && (nwbio != iwbio || nrbio != nwbio))
+ BIO_up_ref(nrbio);
+ if (nwbio != NULL
+ && nwbio != nrbio
+ && (nwbio != iwbio || (nwbio == iwbio && irbio == iwbio)))
+ BIO_up_ref(nwbio);
+
+ SSL_set_bio(clientssl, nrbio, nwbio);
+
+ testresult = 1;
+
+ end:
+ BIO_free(bio1);
+ BIO_free(bio2);
+
+ /*
+ * This test is checking that the ref counting for SSL_set_bio is correct.
+ * If we get here and we did too many frees then we will fail in the above
+ * functions.
+ */
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+typedef enum { NO_BIO_CHANGE, CHANGE_RBIO, CHANGE_WBIO } bio_change_t;
+
+static int execute_test_ssl_bio(int pop_ssl, bio_change_t change_bio)
+{
+ BIO *sslbio = NULL, *membio1 = NULL, *membio2 = NULL;
+ SSL_CTX *ctx;
+ SSL *ssl = NULL;
+ int testresult = 0;
+
+ if (!TEST_ptr(ctx = SSL_CTX_new_ex(libctx, NULL, TLS_method()))
+ || !TEST_ptr(ssl = SSL_new(ctx))
+ || !TEST_ptr(sslbio = BIO_new(BIO_f_ssl()))
+ || !TEST_ptr(membio1 = BIO_new(BIO_s_mem())))
+ goto end;
+
+ BIO_set_ssl(sslbio, ssl, BIO_CLOSE);
+
+ /*
+ * If anything goes wrong here then we could leak memory.
+ */
+ BIO_push(sslbio, membio1);
+
+ /* Verify changing the rbio/wbio directly does not cause leaks */
+ if (change_bio != NO_BIO_CHANGE) {
+ if (!TEST_ptr(membio2 = BIO_new(BIO_s_mem()))) {
+ ssl = NULL;
+ goto end;
+ }
+ if (change_bio == CHANGE_RBIO)
+ SSL_set0_rbio(ssl, membio2);
+ else
+ SSL_set0_wbio(ssl, membio2);
+ }
+ ssl = NULL;
+
+ if (pop_ssl)
+ BIO_pop(sslbio);
+ else
+ BIO_pop(membio1);
+
+ testresult = 1;
+ end:
+ BIO_free(membio1);
+ BIO_free(sslbio);
+ SSL_free(ssl);
+ SSL_CTX_free(ctx);
+
+ return testresult;
+}
+
+static int test_ssl_bio_pop_next_bio(void)
+{
+ return execute_test_ssl_bio(0, NO_BIO_CHANGE);
+}
+
+static int test_ssl_bio_pop_ssl_bio(void)
+{
+ return execute_test_ssl_bio(1, NO_BIO_CHANGE);
+}
+
+static int test_ssl_bio_change_rbio(void)
+{
+ return execute_test_ssl_bio(0, CHANGE_RBIO);
+}
+
+static int test_ssl_bio_change_wbio(void)
+{
+ return execute_test_ssl_bio(0, CHANGE_WBIO);
+}
+
+#if !defined(OPENSSL_NO_TLS1_2) || defined(OSSL_NO_USABLE_TLS1_3)
+typedef struct {
+ /* The list of sig algs */
+ const int *list;
+ /* The length of the list */
+ size_t listlen;
+ /* A sigalgs list in string format */
+ const char *liststr;
+ /* Whether setting the list should succeed */
+ int valid;
+ /* Whether creating a connection with the list should succeed */
+ int connsuccess;
+} sigalgs_list;
+
+static const int validlist1[] = {NID_sha256, EVP_PKEY_RSA};
+# ifndef OPENSSL_NO_EC
+static const int validlist2[] = {NID_sha256, EVP_PKEY_RSA, NID_sha512, EVP_PKEY_EC};
+static const int validlist3[] = {NID_sha512, EVP_PKEY_EC};
+# endif
+static const int invalidlist1[] = {NID_undef, EVP_PKEY_RSA};
+static const int invalidlist2[] = {NID_sha256, NID_undef};
+static const int invalidlist3[] = {NID_sha256, EVP_PKEY_RSA, NID_sha256};
+static const int invalidlist4[] = {NID_sha256};
+static const sigalgs_list testsigalgs[] = {
+ {validlist1, OSSL_NELEM(validlist1), NULL, 1, 1},
+# ifndef OPENSSL_NO_EC
+ {validlist2, OSSL_NELEM(validlist2), NULL, 1, 1},
+ {validlist3, OSSL_NELEM(validlist3), NULL, 1, 0},
+# endif
+ {NULL, 0, "RSA+SHA256", 1, 1},
+# ifndef OPENSSL_NO_EC
+ {NULL, 0, "RSA+SHA256:ECDSA+SHA512", 1, 1},
+ {NULL, 0, "ECDSA+SHA512", 1, 0},
+# endif
+ {invalidlist1, OSSL_NELEM(invalidlist1), NULL, 0, 0},
+ {invalidlist2, OSSL_NELEM(invalidlist2), NULL, 0, 0},
+ {invalidlist3, OSSL_NELEM(invalidlist3), NULL, 0, 0},
+ {invalidlist4, OSSL_NELEM(invalidlist4), NULL, 0, 0},
+ {NULL, 0, "RSA", 0, 0},
+ {NULL, 0, "SHA256", 0, 0},
+ {NULL, 0, "RSA+SHA256:SHA256", 0, 0},
+ {NULL, 0, "Invalid", 0, 0}
+};
+
+static int test_set_sigalgs(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ const sigalgs_list *curr;
+ int testctx;
+
+ /* Should never happen */
+ if (!TEST_size_t_le((size_t)idx, OSSL_NELEM(testsigalgs) * 2))
+ return 0;
+
+ testctx = ((size_t)idx < OSSL_NELEM(testsigalgs));
+ curr = testctx ? &testsigalgs[idx]
+ : &testsigalgs[idx - OSSL_NELEM(testsigalgs)];
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+ SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION);
+
+ if (testctx) {
+ int ret;
+
+ if (curr->list != NULL)
+ ret = SSL_CTX_set1_sigalgs(cctx, curr->list, curr->listlen);
+ else
+ ret = SSL_CTX_set1_sigalgs_list(cctx, curr->liststr);
+
+ if (!ret) {
+ if (curr->valid)
+ TEST_info("Failure setting sigalgs in SSL_CTX (%d)\n", idx);
+ else
+ testresult = 1;
+ goto end;
+ }
+ if (!curr->valid) {
+ TEST_info("Not-failed setting sigalgs in SSL_CTX (%d)\n", idx);
+ goto end;
+ }
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ if (!testctx) {
+ int ret;
+
+ if (curr->list != NULL)
+ ret = SSL_set1_sigalgs(clientssl, curr->list, curr->listlen);
+ else
+ ret = SSL_set1_sigalgs_list(clientssl, curr->liststr);
+ if (!ret) {
+ if (curr->valid)
+ TEST_info("Failure setting sigalgs in SSL (%d)\n", idx);
+ else
+ testresult = 1;
+ goto end;
+ }
+ if (!curr->valid)
+ goto end;
+ }
+
+ if (!TEST_int_eq(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE),
+ curr->connsuccess))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif
+
+#ifndef OSSL_NO_USABLE_TLS1_3
+static int psk_client_cb_cnt = 0;
+static int psk_server_cb_cnt = 0;
+
+static int use_session_cb(SSL *ssl, const EVP_MD *md, const unsigned char **id,
+ size_t *idlen, SSL_SESSION **sess)
+{
+ switch (++use_session_cb_cnt) {
+ case 1:
+ /* The first call should always have a NULL md */
+ if (md != NULL)
+ return 0;
+ break;
+
+ case 2:
+ /* The second call should always have an md */
+ if (md == NULL)
+ return 0;
+ break;
+
+ default:
+ /* We should only be called a maximum of twice */
+ return 0;
+ }
+
+ if (clientpsk != NULL)
+ SSL_SESSION_up_ref(clientpsk);
+
+ *sess = clientpsk;
+ *id = (const unsigned char *)pskid;
+ *idlen = strlen(pskid);
+
+ return 1;
+}
+
+#ifndef OPENSSL_NO_PSK
+static unsigned int psk_client_cb(SSL *ssl, const char *hint, char *id,
+ unsigned int max_id_len,
+ unsigned char *psk,
+ unsigned int max_psk_len)
+{
+ unsigned int psklen = 0;
+
+ psk_client_cb_cnt++;
+
+ if (strlen(pskid) + 1 > max_id_len)
+ return 0;
+
+ /* We should only ever be called a maximum of twice per connection */
+ if (psk_client_cb_cnt > 2)
+ return 0;
+
+ if (clientpsk == NULL)
+ return 0;
+
+ /* We'll reuse the PSK we set up for TLSv1.3 */
+ if (SSL_SESSION_get_master_key(clientpsk, NULL, 0) > max_psk_len)
+ return 0;
+ psklen = SSL_SESSION_get_master_key(clientpsk, psk, max_psk_len);
+ strncpy(id, pskid, max_id_len);
+
+ return psklen;
+}
+#endif /* OPENSSL_NO_PSK */
+
+static int find_session_cb(SSL *ssl, const unsigned char *identity,
+ size_t identity_len, SSL_SESSION **sess)
+{
+ find_session_cb_cnt++;
+
+ /* We should only ever be called a maximum of twice per connection */
+ if (find_session_cb_cnt > 2)
+ return 0;
+
+ if (serverpsk == NULL)
+ return 0;
+
+ /* Identity should match that set by the client */
+ if (strlen(srvid) != identity_len
+ || strncmp(srvid, (const char *)identity, identity_len) != 0) {
+ /* No PSK found, continue but without a PSK */
+ *sess = NULL;
+ return 1;
+ }
+
+ SSL_SESSION_up_ref(serverpsk);
+ *sess = serverpsk;
+
+ return 1;
+}
+
+#ifndef OPENSSL_NO_PSK
+static unsigned int psk_server_cb(SSL *ssl, const char *identity,
+ unsigned char *psk, unsigned int max_psk_len)
+{
+ unsigned int psklen = 0;
+
+ psk_server_cb_cnt++;
+
+ /* We should only ever be called a maximum of twice per connection */
+ if (find_session_cb_cnt > 2)
+ return 0;
+
+ if (serverpsk == NULL)
+ return 0;
+
+ /* Identity should match that set by the client */
+ if (strcmp(srvid, identity) != 0) {
+ return 0;
+ }
+
+ /* We'll reuse the PSK we set up for TLSv1.3 */
+ if (SSL_SESSION_get_master_key(serverpsk, NULL, 0) > max_psk_len)
+ return 0;
+ psklen = SSL_SESSION_get_master_key(serverpsk, psk, max_psk_len);
+
+ return psklen;
+}
+#endif /* OPENSSL_NO_PSK */
+
+#define MSG1 "Hello"
+#define MSG2 "World."
+#define MSG3 "This"
+#define MSG4 "is"
+#define MSG5 "a"
+#define MSG6 "test"
+#define MSG7 "message."
+
+#define TLS13_AES_128_GCM_SHA256_BYTES ((const unsigned char *)"\x13\x01")
+#define TLS13_AES_256_GCM_SHA384_BYTES ((const unsigned char *)"\x13\x02")
+#define TLS13_CHACHA20_POLY1305_SHA256_BYTES ((const unsigned char *)"\x13\x03")
+#define TLS13_AES_128_CCM_SHA256_BYTES ((const unsigned char *)"\x13\x04")
+#define TLS13_AES_128_CCM_8_SHA256_BYTES ((const unsigned char *)"\x13\05")
+
+
+static SSL_SESSION *create_a_psk(SSL *ssl, size_t mdsize)
+{
+ const SSL_CIPHER *cipher = NULL;
+ const unsigned char key[] = {
+ 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, 0x20,
+ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
+ 0x2c, 0x2d, 0x2e, 0x2f /* SHA384_DIGEST_LENGTH bytes */
+ };
+ SSL_SESSION *sess = NULL;
+
+ if (mdsize == SHA384_DIGEST_LENGTH) {
+ cipher = SSL_CIPHER_find(ssl, TLS13_AES_256_GCM_SHA384_BYTES);
+ } else if (mdsize == SHA256_DIGEST_LENGTH) {
+ /*
+ * Any ciphersuite using SHA256 will do - it will be compatible with
+ * the actual ciphersuite selected as long as it too is based on SHA256
+ */
+ cipher = SSL_CIPHER_find(ssl, TLS13_AES_128_GCM_SHA256_BYTES);
+ } else {
+ /* Should not happen */
+ return NULL;
+ }
+ sess = SSL_SESSION_new();
+ if (!TEST_ptr(sess)
+ || !TEST_ptr(cipher)
+ || !TEST_true(SSL_SESSION_set1_master_key(sess, key, mdsize))
+ || !TEST_true(SSL_SESSION_set_cipher(sess, cipher))
+ || !TEST_true(
+ SSL_SESSION_set_protocol_version(sess,
+ TLS1_3_VERSION))) {
+ SSL_SESSION_free(sess);
+ return NULL;
+ }
+ return sess;
+}
+
+/*
+ * Helper method to setup objects for early data test. Caller frees objects on
+ * error.
+ */
+static int setupearly_data_test(SSL_CTX **cctx, SSL_CTX **sctx, SSL **clientssl,
+ SSL **serverssl, SSL_SESSION **sess, int idx,
+ size_t mdsize)
+{
+ if (*sctx == NULL
+ && !TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, 0,
+ sctx, cctx, cert, privkey)))
+ return 0;
+
+ if (!TEST_true(SSL_CTX_set_max_early_data(*sctx, SSL3_RT_MAX_PLAIN_LENGTH)))
+ return 0;
+
+ if (idx == 1) {
+ /* When idx == 1 we repeat the tests with read_ahead set */
+ SSL_CTX_set_read_ahead(*cctx, 1);
+ SSL_CTX_set_read_ahead(*sctx, 1);
+ } else if (idx == 2) {
+ /* When idx == 2 we are doing early_data with a PSK. Set up callbacks */
+ SSL_CTX_set_psk_use_session_callback(*cctx, use_session_cb);
+ SSL_CTX_set_psk_find_session_callback(*sctx, find_session_cb);
+ use_session_cb_cnt = 0;
+ find_session_cb_cnt = 0;
+ srvid = pskid;
+ }
+
+ if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl, clientssl,
+ NULL, NULL)))
+ return 0;
+
+ /*
+ * For one of the run throughs (doesn't matter which one), we'll try sending
+ * some SNI data in the initial ClientHello. This will be ignored (because
+ * there is no SNI cb set up by the server), so it should not impact
+ * early_data.
+ */
+ if (idx == 1
+ && !TEST_true(SSL_set_tlsext_host_name(*clientssl, "localhost")))
+ return 0;
+
+ if (idx == 2) {
+ clientpsk = create_a_psk(*clientssl, mdsize);
+ if (!TEST_ptr(clientpsk)
+ /*
+ * We just choose an arbitrary value for max_early_data which
+ * should be big enough for testing purposes.
+ */
+ || !TEST_true(SSL_SESSION_set_max_early_data(clientpsk,
+ 0x100))
+ || !TEST_true(SSL_SESSION_up_ref(clientpsk))) {
+ SSL_SESSION_free(clientpsk);
+ clientpsk = NULL;
+ return 0;
+ }
+ serverpsk = clientpsk;
+
+ if (sess != NULL) {
+ if (!TEST_true(SSL_SESSION_up_ref(clientpsk))) {
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ return 0;
+ }
+ *sess = clientpsk;
+ }
+ return 1;
+ }
+
+ if (sess == NULL)
+ return 1;
+
+ if (!TEST_true(create_ssl_connection(*serverssl, *clientssl,
+ SSL_ERROR_NONE)))
+ return 0;
+
+ *sess = SSL_get1_session(*clientssl);
+ SSL_shutdown(*clientssl);
+ SSL_shutdown(*serverssl);
+ SSL_free(*serverssl);
+ SSL_free(*clientssl);
+ *serverssl = *clientssl = NULL;
+
+ if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl,
+ clientssl, NULL, NULL))
+ || !TEST_true(SSL_set_session(*clientssl, *sess)))
+ return 0;
+
+ return 1;
+}
+
+static int test_early_data_read_write(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ SSL_SESSION *sess = NULL;
+ unsigned char buf[20], data[1024];
+ size_t readbytes, written, eoedlen, rawread, rawwritten;
+ BIO *rbio;
+
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
+ &serverssl, &sess, idx,
+ SHA384_DIGEST_LENGTH)))
+ goto end;
+
+ /* Write and read some early data */
+ if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
+ &written))
+ || !TEST_size_t_eq(written, strlen(MSG1))
+ || !TEST_int_eq(SSL_read_early_data(serverssl, buf,
+ sizeof(buf), &readbytes),
+ SSL_READ_EARLY_DATA_SUCCESS)
+ || !TEST_mem_eq(MSG1, readbytes, buf, strlen(MSG1))
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_ACCEPTED))
+ goto end;
+
+ /*
+ * Server should be able to write data, and client should be able to
+ * read it.
+ */
+ if (!TEST_true(SSL_write_early_data(serverssl, MSG2, strlen(MSG2),
+ &written))
+ || !TEST_size_t_eq(written, strlen(MSG2))
+ || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
+ goto end;
+
+ /* Even after reading normal data, client should be able write early data */
+ if (!TEST_true(SSL_write_early_data(clientssl, MSG3, strlen(MSG3),
+ &written))
+ || !TEST_size_t_eq(written, strlen(MSG3)))
+ goto end;
+
+ /* Server should still be able read early data after writing data */
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_SUCCESS)
+ || !TEST_mem_eq(buf, readbytes, MSG3, strlen(MSG3)))
+ goto end;
+
+ /* Write more data from server and read it from client */
+ if (!TEST_true(SSL_write_early_data(serverssl, MSG4, strlen(MSG4),
+ &written))
+ || !TEST_size_t_eq(written, strlen(MSG4))
+ || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG4, strlen(MSG4)))
+ goto end;
+
+ /*
+ * If client writes normal data it should mean writing early data is no
+ * longer possible.
+ */
+ if (!TEST_true(SSL_write_ex(clientssl, MSG5, strlen(MSG5), &written))
+ || !TEST_size_t_eq(written, strlen(MSG5))
+ || !TEST_int_eq(SSL_get_early_data_status(clientssl),
+ SSL_EARLY_DATA_ACCEPTED))
+ goto end;
+
+ /*
+ * At this point the client has written EndOfEarlyData, ClientFinished and
+ * normal (fully protected) data. We are going to cause a delay between the
+ * arrival of EndOfEarlyData and ClientFinished. We read out all the data
+ * in the read BIO, and then just put back the EndOfEarlyData message.
+ */
+ rbio = SSL_get_rbio(serverssl);
+ if (!TEST_true(BIO_read_ex(rbio, data, sizeof(data), &rawread))
+ || !TEST_size_t_lt(rawread, sizeof(data))
+ || !TEST_size_t_gt(rawread, SSL3_RT_HEADER_LENGTH))
+ goto end;
+
+ /* Record length is in the 4th and 5th bytes of the record header */
+ eoedlen = SSL3_RT_HEADER_LENGTH + (data[3] << 8 | data[4]);
+ if (!TEST_true(BIO_write_ex(rbio, data, eoedlen, &rawwritten))
+ || !TEST_size_t_eq(rawwritten, eoedlen))
+ goto end;
+
+ /* Server should be told that there is no more early data */
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_FINISH)
+ || !TEST_size_t_eq(readbytes, 0))
+ goto end;
+
+ /*
+ * Server has not finished init yet, so should still be able to write early
+ * data.
+ */
+ if (!TEST_true(SSL_write_early_data(serverssl, MSG6, strlen(MSG6),
+ &written))
+ || !TEST_size_t_eq(written, strlen(MSG6)))
+ goto end;
+
+ /* Push the ClientFinished and the normal data back into the server rbio */
+ if (!TEST_true(BIO_write_ex(rbio, data + eoedlen, rawread - eoedlen,
+ &rawwritten))
+ || !TEST_size_t_eq(rawwritten, rawread - eoedlen))
+ goto end;
+
+ /* Server should be able to read normal data */
+ if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
+ || !TEST_size_t_eq(readbytes, strlen(MSG5)))
+ goto end;
+
+ /* Client and server should not be able to write/read early data now */
+ if (!TEST_false(SSL_write_early_data(clientssl, MSG6, strlen(MSG6),
+ &written)))
+ goto end;
+ ERR_clear_error();
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_ERROR))
+ goto end;
+ ERR_clear_error();
+
+ /* Client should be able to read the data sent by the server */
+ if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG6, strlen(MSG6)))
+ goto end;
+
+ /*
+ * Make sure we process the two NewSessionTickets. These arrive
+ * post-handshake. We attempt reads which we do not expect to return any
+ * data.
+ */
+ if (!TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
+ || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf),
+ &readbytes)))
+ goto end;
+
+ /* Server should be able to write normal data */
+ if (!TEST_true(SSL_write_ex(serverssl, MSG7, strlen(MSG7), &written))
+ || !TEST_size_t_eq(written, strlen(MSG7))
+ || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG7, strlen(MSG7)))
+ goto end;
+
+ SSL_SESSION_free(sess);
+ sess = SSL_get1_session(clientssl);
+ use_session_cb_cnt = 0;
+ find_session_cb_cnt = 0;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, sess)))
+ goto end;
+
+ /* Write and read some early data */
+ if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
+ &written))
+ || !TEST_size_t_eq(written, strlen(MSG1))
+ || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_SUCCESS)
+ || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1)))
+ goto end;
+
+ if (!TEST_int_gt(SSL_connect(clientssl), 0)
+ || !TEST_int_gt(SSL_accept(serverssl), 0))
+ goto end;
+
+ /* Client and server should not be able to write/read early data now */
+ if (!TEST_false(SSL_write_early_data(clientssl, MSG6, strlen(MSG6),
+ &written)))
+ goto end;
+ ERR_clear_error();
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_ERROR))
+ goto end;
+ ERR_clear_error();
+
+ /* Client and server should be able to write/read normal data */
+ if (!TEST_true(SSL_write_ex(clientssl, MSG5, strlen(MSG5), &written))
+ || !TEST_size_t_eq(written, strlen(MSG5))
+ || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
+ || !TEST_size_t_eq(readbytes, strlen(MSG5)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(sess);
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+static int allow_ed_cb_called = 0;
+
+static int allow_early_data_cb(SSL *s, void *arg)
+{
+ int *usecb = (int *)arg;
+
+ allow_ed_cb_called++;
+
+ if (*usecb == 1)
+ return 0;
+
+ return 1;
+}
+
+/*
+ * idx == 0: Standard early_data setup
+ * idx == 1: early_data setup using read_ahead
+ * usecb == 0: Don't use a custom early data callback
+ * usecb == 1: Use a custom early data callback and reject the early data
+ * usecb == 2: Use a custom early data callback and accept the early data
+ * confopt == 0: Configure anti-replay directly
+ * confopt == 1: Configure anti-replay using SSL_CONF
+ */
+static int test_early_data_replay_int(int idx, int usecb, int confopt)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ SSL_SESSION *sess = NULL;
+ size_t readbytes, written;
+ unsigned char buf[20];
+
+ allow_ed_cb_called = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+ if (usecb > 0) {
+ if (confopt == 0) {
+ SSL_CTX_set_options(sctx, SSL_OP_NO_ANTI_REPLAY);
+ } else {
+ SSL_CONF_CTX *confctx = SSL_CONF_CTX_new();
+
+ if (!TEST_ptr(confctx))
+ goto end;
+ SSL_CONF_CTX_set_flags(confctx, SSL_CONF_FLAG_FILE
+ | SSL_CONF_FLAG_SERVER);
+ SSL_CONF_CTX_set_ssl_ctx(confctx, sctx);
+ if (!TEST_int_eq(SSL_CONF_cmd(confctx, "Options", "-AntiReplay"),
+ 2)) {
+ SSL_CONF_CTX_free(confctx);
+ goto end;
+ }
+ SSL_CONF_CTX_free(confctx);
+ }
+ SSL_CTX_set_allow_early_data_cb(sctx, allow_early_data_cb, &usecb);
+ }
+
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
+ &serverssl, &sess, idx,
+ SHA384_DIGEST_LENGTH)))
+ goto end;
+
+ /*
+ * The server is configured to accept early data. Create a connection to
+ * "use up" the ticket
+ */
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl)))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, sess)))
+ goto end;
+
+ /* Write and read some early data */
+ if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
+ &written))
+ || !TEST_size_t_eq(written, strlen(MSG1)))
+ goto end;
+
+ if (usecb <= 1) {
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_FINISH)
+ /*
+ * The ticket was reused, so the we should have rejected the
+ * early data
+ */
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_REJECTED))
+ goto end;
+ } else {
+ /* In this case the callback decides to accept the early data */
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_SUCCESS)
+ || !TEST_mem_eq(MSG1, strlen(MSG1), buf, readbytes)
+ /*
+ * Server will have sent its flight so client can now send
+ * end of early data and complete its half of the handshake
+ */
+ || !TEST_int_gt(SSL_connect(clientssl), 0)
+ || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_FINISH)
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_ACCEPTED))
+ goto end;
+ }
+
+ /* Complete the connection */
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
+ || !TEST_int_eq(SSL_session_reused(clientssl), (usecb > 0) ? 1 : 0)
+ || !TEST_int_eq(allow_ed_cb_called, usecb > 0 ? 1 : 0))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(sess);
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+static int test_early_data_replay(int idx)
+{
+ int ret = 1, usecb, confopt;
+
+ for (usecb = 0; usecb < 3; usecb++) {
+ for (confopt = 0; confopt < 2; confopt++)
+ ret &= test_early_data_replay_int(idx, usecb, confopt);
+ }
+
+ return ret;
+}
+
+static const char *ciphersuites[] = {
+ "TLS_AES_128_CCM_8_SHA256",
+ "TLS_AES_128_GCM_SHA256",
+ "TLS_AES_256_GCM_SHA384",
+ "TLS_AES_128_CCM_SHA256",
+#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
+ "TLS_CHACHA20_POLY1305_SHA256"
+#endif
+};
+
+/*
+ * Helper function to test that a server attempting to read early data can
+ * handle a connection from a client where the early data should be skipped.
+ * testtype: 0 == No HRR
+ * testtype: 1 == HRR
+ * testtype: 2 == HRR, invalid early_data sent after HRR
+ * testtype: 3 == recv_max_early_data set to 0
+ */
+static int early_data_skip_helper(int testtype, int cipher, int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ SSL_SESSION *sess = NULL;
+ unsigned char buf[20];
+ size_t readbytes, written;
+
+ if (is_fips && cipher == 4)
+ return 1;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (cipher == 0) {
+ SSL_CTX_set_security_level(sctx, 0);
+ SSL_CTX_set_security_level(cctx, 0);
+ }
+
+ if (!TEST_true(SSL_CTX_set_ciphersuites(sctx, ciphersuites[cipher]))
+ || !TEST_true(SSL_CTX_set_ciphersuites(cctx, ciphersuites[cipher])))
+ goto end;
+
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
+ &serverssl, &sess, idx,
+ cipher == 2 ? SHA384_DIGEST_LENGTH
+ : SHA256_DIGEST_LENGTH)))
+ goto end;
+
+ if (testtype == 1 || testtype == 2) {
+ /* Force an HRR to occur */
+#if defined(OPENSSL_NO_EC)
+ if (!TEST_true(SSL_set1_groups_list(serverssl, "ffdhe3072")))
+ goto end;
+#else
+ if (!TEST_true(SSL_set1_groups_list(serverssl, "P-256")))
+ goto end;
+#endif
+ } else if (idx == 2) {
+ /*
+ * We force early_data rejection by ensuring the PSK identity is
+ * unrecognised
+ */
+ srvid = "Dummy Identity";
+ } else {
+ /*
+ * Deliberately corrupt the creation time. We take 20 seconds off the
+ * time. It could be any value as long as it is not within tolerance.
+ * This should mean the ticket is rejected.
+ */
+ if (!TEST_true(SSL_SESSION_set_time(sess, (long)(time(NULL) - 20))))
+ goto end;
+ }
+
+ if (testtype == 3
+ && !TEST_true(SSL_set_recv_max_early_data(serverssl, 0)))
+ goto end;
+
+ /* Write some early data */
+ if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
+ &written))
+ || !TEST_size_t_eq(written, strlen(MSG1)))
+ goto end;
+
+ /* Server should reject the early data */
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_FINISH)
+ || !TEST_size_t_eq(readbytes, 0)
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_REJECTED))
+ goto end;
+
+ switch (testtype) {
+ case 0:
+ /* Nothing to do */
+ break;
+
+ case 1:
+ /*
+ * Finish off the handshake. We perform the same writes and reads as
+ * further down but we expect them to fail due to the incomplete
+ * handshake.
+ */
+ if (!TEST_false(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
+ || !TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf),
+ &readbytes)))
+ goto end;
+ break;
+
+ case 2:
+ {
+ BIO *wbio = SSL_get_wbio(clientssl);
+ /* A record that will appear as bad early_data */
+ const unsigned char bad_early_data[] = {
+ 0x17, 0x03, 0x03, 0x00, 0x01, 0x00
+ };
+
+ /*
+ * We force the client to attempt a write. This will fail because
+ * we're still in the handshake. It will cause the second
+ * ClientHello to be sent.
+ */
+ if (!TEST_false(SSL_write_ex(clientssl, MSG2, strlen(MSG2),
+ &written)))
+ goto end;
+
+ /*
+ * Inject some early_data after the second ClientHello. This should
+ * cause the server to fail
+ */
+ if (!TEST_true(BIO_write_ex(wbio, bad_early_data,
+ sizeof(bad_early_data), &written)))
+ goto end;
+ }
+ /* fallthrough */
+
+ case 3:
+ /*
+ * This client has sent more early_data than we are willing to skip
+ * (case 3) or sent invalid early_data (case 2) so the connection should
+ * abort.
+ */
+ if (!TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
+ || !TEST_int_eq(SSL_get_error(serverssl, 0), SSL_ERROR_SSL))
+ goto end;
+
+ /* Connection has failed - nothing more to do */
+ testresult = 1;
+ goto end;
+
+ default:
+ TEST_error("Invalid test type");
+ goto end;
+ }
+
+ ERR_clear_error();
+ /*
+ * Should be able to send normal data despite rejection of early data. The
+ * early_data should be skipped.
+ */
+ if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
+ || !TEST_size_t_eq(written, strlen(MSG2))
+ || !TEST_int_eq(SSL_get_early_data_status(clientssl),
+ SSL_EARLY_DATA_REJECTED)
+ || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
+ goto end;
+
+ /*
+ * Failure to decrypt early data records should not leave spurious errors
+ * on the error stack
+ */
+ if (!TEST_long_eq(ERR_peek_error(), 0))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ SSL_SESSION_free(sess);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+/*
+ * Test that a server attempting to read early data can handle a connection
+ * from a client where the early data is not acceptable.
+ */
+static int test_early_data_skip(int idx)
+{
+ return early_data_skip_helper(0,
+ idx % OSSL_NELEM(ciphersuites),
+ idx / OSSL_NELEM(ciphersuites));
+}
+
+/*
+ * Test that a server attempting to read early data can handle a connection
+ * from a client where an HRR occurs.
+ */
+static int test_early_data_skip_hrr(int idx)
+{
+ return early_data_skip_helper(1,
+ idx % OSSL_NELEM(ciphersuites),
+ idx / OSSL_NELEM(ciphersuites));
+}
+
+/*
+ * Test that a server attempting to read early data can handle a connection
+ * from a client where an HRR occurs and correctly fails if early_data is sent
+ * after the HRR
+ */
+static int test_early_data_skip_hrr_fail(int idx)
+{
+ return early_data_skip_helper(2,
+ idx % OSSL_NELEM(ciphersuites),
+ idx / OSSL_NELEM(ciphersuites));
+}
+
+/*
+ * Test that a server attempting to read early data will abort if it tries to
+ * skip over too much.
+ */
+static int test_early_data_skip_abort(int idx)
+{
+ return early_data_skip_helper(3,
+ idx % OSSL_NELEM(ciphersuites),
+ idx / OSSL_NELEM(ciphersuites));
+}
+
+/*
+ * Test that a server attempting to read early data can handle a connection
+ * from a client that doesn't send any.
+ */
+static int test_early_data_not_sent(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ SSL_SESSION *sess = NULL;
+ unsigned char buf[20];
+ size_t readbytes, written;
+
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
+ &serverssl, &sess, idx,
+ SHA384_DIGEST_LENGTH)))
+ goto end;
+
+ /* Write some data - should block due to handshake with server */
+ SSL_set_connect_state(clientssl);
+ if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written)))
+ goto end;
+
+ /* Server should detect that early data has not been sent */
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_FINISH)
+ || !TEST_size_t_eq(readbytes, 0)
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_NOT_SENT)
+ || !TEST_int_eq(SSL_get_early_data_status(clientssl),
+ SSL_EARLY_DATA_NOT_SENT))
+ goto end;
+
+ /* Continue writing the message we started earlier */
+ if (!TEST_true(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))
+ || !TEST_size_t_eq(written, strlen(MSG1))
+ || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1))
+ || !SSL_write_ex(serverssl, MSG2, strlen(MSG2), &written)
+ || !TEST_size_t_eq(written, strlen(MSG2)))
+ goto end;
+
+ if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(sess);
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+static const char *servalpn;
+
+static int alpn_select_cb(SSL *ssl, const unsigned char **out,
+ unsigned char *outlen, const unsigned char *in,
+ unsigned int inlen, void *arg)
+{
+ unsigned int protlen = 0;
+ const unsigned char *prot;
+
+ for (prot = in; prot < in + inlen; prot += protlen) {
+ protlen = *prot++;
+ if (in + inlen < prot + protlen)
+ return SSL_TLSEXT_ERR_NOACK;
+
+ if (protlen == strlen(servalpn)
+ && memcmp(prot, servalpn, protlen) == 0) {
+ *out = prot;
+ *outlen = protlen;
+ return SSL_TLSEXT_ERR_OK;
+ }
+ }
+
+ return SSL_TLSEXT_ERR_NOACK;
+}
+
+/* Test that a PSK can be used to send early_data */
+static int test_early_data_psk(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ SSL_SESSION *sess = NULL;
+ unsigned char alpnlist[] = {
+ 0x08, 'g', 'o', 'o', 'd', 'a', 'l', 'p', 'n', 0x07, 'b', 'a', 'd', 'a',
+ 'l', 'p', 'n'
+ };
+#define GOODALPNLEN 9
+#define BADALPNLEN 8
+#define GOODALPN (alpnlist)
+#define BADALPN (alpnlist + GOODALPNLEN)
+ int err = 0;
+ unsigned char buf[20];
+ size_t readbytes, written;
+ int readearlyres = SSL_READ_EARLY_DATA_SUCCESS, connectres = 1;
+ int edstatus = SSL_EARLY_DATA_ACCEPTED;
+
+ /* We always set this up with a final parameter of "2" for PSK */
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
+ &serverssl, &sess, 2,
+ SHA384_DIGEST_LENGTH)))
+ goto end;
+
+ servalpn = "goodalpn";
+
+ /*
+ * Note: There is no test for inconsistent SNI with late client detection.
+ * This is because servers do not acknowledge SNI even if they are using
+ * it in a resumption handshake - so it is not actually possible for a
+ * client to detect a problem.
+ */
+ switch (idx) {
+ case 0:
+ /* Set inconsistent SNI (early client detection) */
+ err = SSL_R_INCONSISTENT_EARLY_DATA_SNI;
+ if (!TEST_true(SSL_SESSION_set1_hostname(sess, "goodhost"))
+ || !TEST_true(SSL_set_tlsext_host_name(clientssl, "badhost")))
+ goto end;
+ break;
+
+ case 1:
+ /* Set inconsistent ALPN (early client detection) */
+ err = SSL_R_INCONSISTENT_EARLY_DATA_ALPN;
+ /* SSL_set_alpn_protos returns 0 for success and 1 for failure */
+ if (!TEST_true(SSL_SESSION_set1_alpn_selected(sess, GOODALPN,
+ GOODALPNLEN))
+ || !TEST_false(SSL_set_alpn_protos(clientssl, BADALPN,
+ BADALPNLEN)))
+ goto end;
+ break;
+
+ case 2:
+ /*
+ * Set invalid protocol version. Technically this affects PSKs without
+ * early_data too, but we test it here because it is similar to the
+ * SNI/ALPN consistency tests.
+ */
+ err = SSL_R_BAD_PSK;
+ if (!TEST_true(SSL_SESSION_set_protocol_version(sess, TLS1_2_VERSION)))
+ goto end;
+ break;
+
+ case 3:
+ /*
+ * Set inconsistent SNI (server side). In this case the connection
+ * will succeed and accept early_data. In TLSv1.3 on the server side SNI
+ * is associated with each handshake - not the session. Therefore it
+ * should not matter that we used a different server name last time.
+ */
+ SSL_SESSION_free(serverpsk);
+ serverpsk = SSL_SESSION_dup(clientpsk);
+ if (!TEST_ptr(serverpsk)
+ || !TEST_true(SSL_SESSION_set1_hostname(serverpsk, "badhost")))
+ goto end;
+ /* Fall through */
+ case 4:
+ /* Set consistent SNI */
+ if (!TEST_true(SSL_SESSION_set1_hostname(sess, "goodhost"))
+ || !TEST_true(SSL_set_tlsext_host_name(clientssl, "goodhost"))
+ || !TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx,
+ hostname_cb)))
+ goto end;
+ break;
+
+ case 5:
+ /*
+ * Set inconsistent ALPN (server detected). In this case the connection
+ * will succeed but reject early_data.
+ */
+ servalpn = "badalpn";
+ edstatus = SSL_EARLY_DATA_REJECTED;
+ readearlyres = SSL_READ_EARLY_DATA_FINISH;
+ /* Fall through */
+ case 6:
+ /*
+ * Set consistent ALPN.
+ * SSL_set_alpn_protos returns 0 for success and 1 for failure. It
+ * accepts a list of protos (each one length prefixed).
+ * SSL_set1_alpn_selected accepts a single protocol (not length
+ * prefixed)
+ */
+ if (!TEST_true(SSL_SESSION_set1_alpn_selected(sess, GOODALPN + 1,
+ GOODALPNLEN - 1))
+ || !TEST_false(SSL_set_alpn_protos(clientssl, GOODALPN,
+ GOODALPNLEN)))
+ goto end;
+
+ SSL_CTX_set_alpn_select_cb(sctx, alpn_select_cb, NULL);
+ break;
+
+ case 7:
+ /* Set inconsistent ALPN (late client detection) */
+ SSL_SESSION_free(serverpsk);
+ serverpsk = SSL_SESSION_dup(clientpsk);
+ if (!TEST_ptr(serverpsk)
+ || !TEST_true(SSL_SESSION_set1_alpn_selected(clientpsk,
+ BADALPN + 1,
+ BADALPNLEN - 1))
+ || !TEST_true(SSL_SESSION_set1_alpn_selected(serverpsk,
+ GOODALPN + 1,
+ GOODALPNLEN - 1))
+ || !TEST_false(SSL_set_alpn_protos(clientssl, alpnlist,
+ sizeof(alpnlist))))
+ goto end;
+ SSL_CTX_set_alpn_select_cb(sctx, alpn_select_cb, NULL);
+ edstatus = SSL_EARLY_DATA_ACCEPTED;
+ readearlyres = SSL_READ_EARLY_DATA_SUCCESS;
+ /* SSL_connect() call should fail */
+ connectres = -1;
+ break;
+
+ default:
+ TEST_error("Bad test index");
+ goto end;
+ }
+
+ SSL_set_connect_state(clientssl);
+ if (err != 0) {
+ if (!TEST_false(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
+ &written))
+ || !TEST_int_eq(SSL_get_error(clientssl, 0), SSL_ERROR_SSL)
+ || !TEST_int_eq(ERR_GET_REASON(ERR_get_error()), err))
+ goto end;
+ } else {
+ if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
+ &written)))
+ goto end;
+
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes), readearlyres)
+ || (readearlyres == SSL_READ_EARLY_DATA_SUCCESS
+ && !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1)))
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl), edstatus)
+ || !TEST_int_eq(SSL_connect(clientssl), connectres))
+ goto end;
+ }
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(sess);
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+/*
+ * Test TLSv1.3 PSK can be used to send early_data with all 5 ciphersuites
+ * idx == 0: Test with TLS1_3_RFC_AES_128_GCM_SHA256
+ * idx == 1: Test with TLS1_3_RFC_AES_256_GCM_SHA384
+ * idx == 2: Test with TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
+ * idx == 3: Test with TLS1_3_RFC_AES_128_CCM_SHA256
+ * idx == 4: Test with TLS1_3_RFC_AES_128_CCM_8_SHA256
+ */
+static int test_early_data_psk_with_all_ciphers(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ SSL_SESSION *sess = NULL;
+ unsigned char buf[20];
+ size_t readbytes, written;
+ const SSL_CIPHER *cipher;
+ const char *cipher_str[] = {
+ TLS1_3_RFC_AES_128_GCM_SHA256,
+ TLS1_3_RFC_AES_256_GCM_SHA384,
+# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
+ TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
+# else
+ NULL,
+# endif
+ TLS1_3_RFC_AES_128_CCM_SHA256,
+ TLS1_3_RFC_AES_128_CCM_8_SHA256
+ };
+ const unsigned char *cipher_bytes[] = {
+ TLS13_AES_128_GCM_SHA256_BYTES,
+ TLS13_AES_256_GCM_SHA384_BYTES,
+# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
+ TLS13_CHACHA20_POLY1305_SHA256_BYTES,
+# else
+ NULL,
+# endif
+ TLS13_AES_128_CCM_SHA256_BYTES,
+ TLS13_AES_128_CCM_8_SHA256_BYTES
+ };
+
+ if (cipher_str[idx] == NULL)
+ return 1;
+ /* Skip ChaCha20Poly1305 as currently FIPS module does not support it */
+ if (idx == 2 && is_fips == 1)
+ return 1;
+
+ /* We always set this up with a final parameter of "2" for PSK */
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
+ &serverssl, &sess, 2,
+ SHA384_DIGEST_LENGTH)))
+ goto end;
+
+ if (!TEST_true(SSL_set_ciphersuites(clientssl, cipher_str[idx]))
+ || !TEST_true(SSL_set_ciphersuites(serverssl, cipher_str[idx])))
+ goto end;
+
+ /*
+ * 'setupearly_data_test' creates only one instance of SSL_SESSION
+ * and assigns to both client and server with incremented reference
+ * and the same instance is updated in 'sess'.
+ * So updating ciphersuite in 'sess' which will get reflected in
+ * PSK handshake using psk use sess and find sess cb.
+ */
+ cipher = SSL_CIPHER_find(clientssl, cipher_bytes[idx]);
+ if (!TEST_ptr(cipher) || !TEST_true(SSL_SESSION_set_cipher(sess, cipher)))
+ goto end;
+
+ SSL_set_connect_state(clientssl);
+ if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
+ &written)))
+ goto end;
+
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_SUCCESS)
+ || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1))
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_ACCEPTED)
+ || !TEST_int_eq(SSL_connect(clientssl), 1)
+ || !TEST_int_eq(SSL_accept(serverssl), 1))
+ goto end;
+
+ /* Send some normal data from client to server */
+ if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
+ || !TEST_size_t_eq(written, strlen(MSG2)))
+ goto end;
+
+ if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
+ goto end;
+
+ testresult = 1;
+ end:
+ SSL_SESSION_free(sess);
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ if (clientssl != NULL)
+ SSL_shutdown(clientssl);
+ if (serverssl != NULL)
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+/*
+ * Test that a server that doesn't try to read early data can handle a
+ * client sending some.
+ */
+static int test_early_data_not_expected(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ SSL_SESSION *sess = NULL;
+ unsigned char buf[20];
+ size_t readbytes, written;
+
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
+ &serverssl, &sess, idx,
+ SHA384_DIGEST_LENGTH)))
+ goto end;
+
+ /* Write some early data */
+ if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
+ &written)))
+ goto end;
+
+ /*
+ * Server should skip over early data and then block waiting for client to
+ * continue handshake
+ */
+ if (!TEST_int_le(SSL_accept(serverssl), 0)
+ || !TEST_int_gt(SSL_connect(clientssl), 0)
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_REJECTED)
+ || !TEST_int_gt(SSL_accept(serverssl), 0)
+ || !TEST_int_eq(SSL_get_early_data_status(clientssl),
+ SSL_EARLY_DATA_REJECTED))
+ goto end;
+
+ /* Send some normal data from client to server */
+ if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
+ || !TEST_size_t_eq(written, strlen(MSG2)))
+ goto end;
+
+ if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(sess);
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+
+# ifndef OPENSSL_NO_TLS1_2
+/*
+ * Test that a server attempting to read early data can handle a connection
+ * from a TLSv1.2 client.
+ */
+static int test_early_data_tls1_2(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ unsigned char buf[20];
+ size_t readbytes, written;
+
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
+ &serverssl, NULL, idx,
+ SHA384_DIGEST_LENGTH)))
+ goto end;
+
+ /* Write some data - should block due to handshake with server */
+ SSL_set_max_proto_version(clientssl, TLS1_2_VERSION);
+ SSL_set_connect_state(clientssl);
+ if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written)))
+ goto end;
+
+ /*
+ * Server should do TLSv1.2 handshake. First it will block waiting for more
+ * messages from client after ServerDone. Then SSL_read_early_data should
+ * finish and detect that early data has not been sent
+ */
+ if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_ERROR))
+ goto end;
+
+ /*
+ * Continue writing the message we started earlier. Will still block waiting
+ * for the CCS/Finished from server
+ */
+ if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))
+ || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_FINISH)
+ || !TEST_size_t_eq(readbytes, 0)
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_NOT_SENT))
+ goto end;
+
+ /* Continue writing the message we started earlier */
+ if (!TEST_true(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))
+ || !TEST_size_t_eq(written, strlen(MSG1))
+ || !TEST_int_eq(SSL_get_early_data_status(clientssl),
+ SSL_EARLY_DATA_NOT_SENT)
+ || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
+ || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1))
+ || !TEST_true(SSL_write_ex(serverssl, MSG2, strlen(MSG2), &written))
+ || !TEST_size_t_eq(written, strlen(MSG2))
+ || !SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)
+ || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+# endif /* OPENSSL_NO_TLS1_2 */
+
+/*
+ * Test configuring the TLSv1.3 ciphersuites
+ *
+ * Test 0: Set a default ciphersuite in the SSL_CTX (no explicit cipher_list)
+ * Test 1: Set a non-default ciphersuite in the SSL_CTX (no explicit cipher_list)
+ * Test 2: Set a default ciphersuite in the SSL (no explicit cipher_list)
+ * Test 3: Set a non-default ciphersuite in the SSL (no explicit cipher_list)
+ * Test 4: Set a default ciphersuite in the SSL_CTX (SSL_CTX cipher_list)
+ * Test 5: Set a non-default ciphersuite in the SSL_CTX (SSL_CTX cipher_list)
+ * Test 6: Set a default ciphersuite in the SSL (SSL_CTX cipher_list)
+ * Test 7: Set a non-default ciphersuite in the SSL (SSL_CTX cipher_list)
+ * Test 8: Set a default ciphersuite in the SSL (SSL cipher_list)
+ * Test 9: Set a non-default ciphersuite in the SSL (SSL cipher_list)
+ */
+static int test_set_ciphersuite(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(SSL_CTX_set_ciphersuites(sctx,
+ "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256")))
+ goto end;
+
+ if (idx >=4 && idx <= 7) {
+ /* SSL_CTX explicit cipher list */
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "AES256-GCM-SHA384")))
+ goto end;
+ }
+
+ if (idx == 0 || idx == 4) {
+ /* Default ciphersuite */
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ "TLS_AES_128_GCM_SHA256")))
+ goto end;
+ } else if (idx == 1 || idx == 5) {
+ /* Non default ciphersuite */
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ "TLS_AES_128_CCM_SHA256")))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ if (idx == 8 || idx == 9) {
+ /* SSL explicit cipher list */
+ if (!TEST_true(SSL_set_cipher_list(clientssl, "AES256-GCM-SHA384")))
+ goto end;
+ }
+
+ if (idx == 2 || idx == 6 || idx == 8) {
+ /* Default ciphersuite */
+ if (!TEST_true(SSL_set_ciphersuites(clientssl,
+ "TLS_AES_128_GCM_SHA256")))
+ goto end;
+ } else if (idx == 3 || idx == 7 || idx == 9) {
+ /* Non default ciphersuite */
+ if (!TEST_true(SSL_set_ciphersuites(clientssl,
+ "TLS_AES_128_CCM_SHA256")))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+static int test_ciphersuite_change(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ SSL_SESSION *clntsess = NULL;
+ int testresult = 0;
+ const SSL_CIPHER *aes_128_gcm_sha256 = NULL;
+
+ /* Create a session based on SHA-256 */
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(SSL_CTX_set_ciphersuites(sctx,
+ "TLS_AES_128_GCM_SHA256:"
+ "TLS_AES_256_GCM_SHA384:"
+ "TLS_AES_128_CCM_SHA256"))
+ || !TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ "TLS_AES_128_GCM_SHA256"))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ clntsess = SSL_get1_session(clientssl);
+ /* Save for later */
+ aes_128_gcm_sha256 = SSL_SESSION_get0_cipher(clntsess);
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ /* Check we can resume a session with a different SHA-256 ciphersuite */
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ "TLS_AES_128_CCM_SHA256"))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, clntsess))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl)))
+ goto end;
+
+ SSL_SESSION_free(clntsess);
+ clntsess = SSL_get1_session(clientssl);
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ /*
+ * Check attempting to resume a SHA-256 session with no SHA-256 ciphersuites
+ * succeeds but does not resume.
+ */
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, "TLS_AES_256_GCM_SHA384"))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, clntsess))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_SSL))
+ || !TEST_false(SSL_session_reused(clientssl)))
+ goto end;
+
+ SSL_SESSION_free(clntsess);
+ clntsess = NULL;
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ /* Create a session based on SHA384 */
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, "TLS_AES_256_GCM_SHA384"))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ clntsess = SSL_get1_session(clientssl);
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384"))
+ || !TEST_true(SSL_CTX_set_ciphersuites(sctx,
+ "TLS_AES_256_GCM_SHA384"))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, clntsess))
+ /*
+ * We use SSL_ERROR_WANT_READ below so that we can pause the
+ * connection after the initial ClientHello has been sent to
+ * enable us to make some session changes.
+ */
+ || !TEST_false(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_WANT_READ)))
+ goto end;
+
+ /* Trick the client into thinking this session is for a different digest */
+ clntsess->cipher = aes_128_gcm_sha256;
+ clntsess->cipher_id = clntsess->cipher->id;
+
+ /*
+ * Continue the previously started connection. Server has selected a SHA-384
+ * ciphersuite, but client thinks the session is for SHA-256, so it should
+ * bail out.
+ */
+ if (!TEST_false(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_SSL))
+ || !TEST_int_eq(ERR_GET_REASON(ERR_get_error()),
+ SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(clntsess);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+/*
+ * Test TLSv1.3 Key exchange
+ * Test 0 = Test all ECDHE Key exchange with TLSv1.3 client and server
+ * Test 1 = Test NID_X9_62_prime256v1 with TLSv1.3 client and server
+ * Test 2 = Test NID_secp384r1 with TLSv1.3 client and server
+ * Test 3 = Test NID_secp521r1 with TLSv1.3 client and server
+ * Test 4 = Test NID_X25519 with TLSv1.3 client and server
+ * Test 5 = Test NID_X448 with TLSv1.3 client and server
+ * Test 6 = Test all FFDHE Key exchange with TLSv1.3 client and server
+ * Test 7 = Test NID_ffdhe2048 with TLSv1.3 client and server
+ * Test 8 = Test NID_ffdhe3072 with TLSv1.3 client and server
+ * Test 9 = Test NID_ffdhe4096 with TLSv1.3 client and server
+ * Test 10 = Test NID_ffdhe6144 with TLSv1.3 client and server
+ * Test 11 = Test NID_ffdhe8192 with TLSv1.3 client and server
+ * Test 12 = Test all ECDHE with TLSv1.2 client and server
+ * Test 13 = Test all FFDHE with TLSv1.2 client and server
+ */
+# ifndef OPENSSL_NO_EC
+static int ecdhe_kexch_groups[] = {NID_X9_62_prime256v1, NID_secp384r1,
+ NID_secp521r1, NID_X25519, NID_X448};
+# endif
+# ifndef OPENSSL_NO_DH
+static int ffdhe_kexch_groups[] = {NID_ffdhe2048, NID_ffdhe3072, NID_ffdhe4096,
+ NID_ffdhe6144, NID_ffdhe8192};
+# endif
+static int test_key_exchange(int idx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ int testresult = 0;
+ int kexch_alg;
+ int *kexch_groups = &kexch_alg;
+ int kexch_groups_size = 1;
+ int max_version = TLS1_3_VERSION;
+ char *kexch_name0 = NULL;
+
+ switch (idx) {
+# ifndef OPENSSL_NO_EC
+# ifndef OPENSSL_NO_TLS1_2
+ case 12:
+ max_version = TLS1_2_VERSION;
+# endif
+ /* Fall through */
+ case 0:
+ kexch_groups = ecdhe_kexch_groups;
+ kexch_groups_size = OSSL_NELEM(ecdhe_kexch_groups);
+ kexch_name0 = "secp256r1";
+ break;
+ case 1:
+ kexch_alg = NID_X9_62_prime256v1;
+ kexch_name0 = "secp256r1";
+ break;
+ case 2:
+ kexch_alg = NID_secp384r1;
+ kexch_name0 = "secp384r1";
+ break;
+ case 3:
+ kexch_alg = NID_secp521r1;
+ kexch_name0 = "secp521r1";
+ break;
+ case 4:
+ kexch_alg = NID_X25519;
+ kexch_name0 = "x25519";
+ break;
+ case 5:
+ kexch_alg = NID_X448;
+ kexch_name0 = "x448";
+ break;
+# endif
+# ifndef OPENSSL_NO_DH
+# ifndef OPENSSL_NO_TLS1_2
+ case 13:
+ max_version = TLS1_2_VERSION;
+ kexch_name0 = "ffdhe2048";
+# endif
+ /* Fall through */
+ case 6:
+ kexch_groups = ffdhe_kexch_groups;
+ kexch_groups_size = OSSL_NELEM(ffdhe_kexch_groups);
+ kexch_name0 = "ffdhe2048";
+ break;
+ case 7:
+ kexch_alg = NID_ffdhe2048;
+ kexch_name0 = "ffdhe2048";
+ break;
+ case 8:
+ kexch_alg = NID_ffdhe3072;
+ kexch_name0 = "ffdhe3072";
+ break;
+ case 9:
+ kexch_alg = NID_ffdhe4096;
+ kexch_name0 = "ffdhe4096";
+ break;
+ case 10:
+ kexch_alg = NID_ffdhe6144;
+ kexch_name0 = "ffdhe6144";
+ break;
+ case 11:
+ kexch_alg = NID_ffdhe8192;
+ kexch_name0 = "ffdhe8192";
+ break;
+# endif
+ default:
+ /* We're skipping this test */
+ return 1;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION,
+ max_version, &sctx, &cctx, cert,
+ privkey)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_set_ciphersuites(sctx,
+ TLS1_3_RFC_AES_128_GCM_SHA256)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ TLS1_3_RFC_AES_128_GCM_SHA256)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx,
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":"
+ TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256))
+ || !TEST_true(SSL_CTX_set_dh_auto(sctx, 1)))
+ goto end;
+
+ /*
+ * Must include an EC ciphersuite so that we send supported groups in
+ * TLSv1.2
+ */
+# ifndef OPENSSL_NO_TLS1_2
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx,
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":"
+ TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256)))
+ goto end;
+# endif
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(SSL_set1_groups(serverssl, kexch_groups, kexch_groups_size))
+ || !TEST_true(SSL_set1_groups(clientssl, kexch_groups, kexch_groups_size)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ /*
+ * If Handshake succeeds the negotiated kexch alg should be the first one in
+ * configured, except in the case of FFDHE groups (idx 13), which are
+ * TLSv1.3 only so we expect no shared group to exist.
+ */
+ if (!TEST_int_eq(SSL_get_shared_group(serverssl, 0),
+ idx == 13 ? 0 : kexch_groups[0]))
+ goto end;
+
+ if (!TEST_str_eq(SSL_group_to_name(serverssl, kexch_groups[0]),
+ kexch_name0))
+ goto end;
+
+ /* We don't implement RFC 7919 named groups for TLS 1.2. */
+ if (idx != 13) {
+ if (!TEST_int_eq(SSL_get_negotiated_group(serverssl), kexch_groups[0]))
+ goto end;
+ if (!TEST_int_eq(SSL_get_negotiated_group(clientssl), kexch_groups[0]))
+ goto end;
+ }
+
+ testresult = 1;
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+# if !defined(OPENSSL_NO_TLS1_2) \
+ && !defined(OPENSSL_NO_EC) \
+ && !defined(OPENSSL_NO_DH)
+static int set_ssl_groups(SSL *serverssl, SSL *clientssl, int clientmulti,
+ int isecdhe, int idx)
+{
+ int kexch_alg;
+ int *kexch_groups = &kexch_alg;
+ int numec, numff;
+
+ numec = OSSL_NELEM(ecdhe_kexch_groups);
+ numff = OSSL_NELEM(ffdhe_kexch_groups);
+ if (isecdhe)
+ kexch_alg = ecdhe_kexch_groups[idx];
+ else
+ kexch_alg = ffdhe_kexch_groups[idx];
+
+ if (clientmulti) {
+ if (!TEST_true(SSL_set1_groups(serverssl, kexch_groups, 1)))
+ return 0;
+ if (isecdhe) {
+ if (!TEST_true(SSL_set1_groups(clientssl, ecdhe_kexch_groups,
+ numec)))
+ return 0;
+ } else {
+ if (!TEST_true(SSL_set1_groups(clientssl, ffdhe_kexch_groups,
+ numff)))
+ return 0;
+ }
+ } else {
+ if (!TEST_true(SSL_set1_groups(clientssl, kexch_groups, 1)))
+ return 0;
+ if (isecdhe) {
+ if (!TEST_true(SSL_set1_groups(serverssl, ecdhe_kexch_groups,
+ numec)))
+ return 0;
+ } else {
+ if (!TEST_true(SSL_set1_groups(serverssl, ffdhe_kexch_groups,
+ numff)))
+ return 0;
+ }
+ }
+ return 1;
+}
+
+/*-
+ * Test the SSL_get_negotiated_group() API across a battery of scenarios.
+ * Run through both the ECDHE and FFDHE group lists used in the previous
+ * test, for both TLS 1.2 and TLS 1.3, negotiating each group in turn,
+ * confirming the expected result; then perform a resumption handshake
+ * while offering the same group list, and another resumption handshake
+ * offering a different group list. The returned value should be the
+ * negotiated group for the initial handshake; for TLS 1.3 resumption
+ * handshakes the returned value will be negotiated on the resumption
+ * handshake itself, but for TLS 1.2 resumption handshakes the value will
+ * be cached in the session from the original handshake, regardless of what
+ * was offered in the resumption ClientHello.
+ *
+ * Using E for the number of EC groups and F for the number of FF groups:
+ * E tests of ECDHE with TLS 1.3, server only has one group
+ * F tests of FFDHE with TLS 1.3, server only has one group
+ * E tests of ECDHE with TLS 1.2, server only has one group
+ * F tests of FFDHE with TLS 1.2, server only has one group
+ * E tests of ECDHE with TLS 1.3, client sends only one group
+ * F tests of FFDHE with TLS 1.3, client sends only one group
+ * E tests of ECDHE with TLS 1.2, client sends only one group
+ * F tests of FFDHE with TLS 1.2, client sends only one group
+ */
+static int test_negotiated_group(int idx)
+{
+ int clientmulti, istls13, isecdhe, numec, numff, numgroups;
+ int expectednid;
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ SSL_SESSION *origsess = NULL;
+ int testresult = 0;
+ int kexch_alg;
+ int max_version = TLS1_3_VERSION;
+
+ numec = OSSL_NELEM(ecdhe_kexch_groups);
+ numff = OSSL_NELEM(ffdhe_kexch_groups);
+ numgroups = numec + numff;
+ clientmulti = (idx < 2 * numgroups);
+ idx = idx % (2 * numgroups);
+ istls13 = (idx < numgroups);
+ idx = idx % numgroups;
+ isecdhe = (idx < numec);
+ if (!isecdhe)
+ idx -= numec;
+ /* Now 'idx' is an index into ecdhe_kexch_groups or ffdhe_kexch_groups */
+ if (isecdhe)
+ kexch_alg = ecdhe_kexch_groups[idx];
+ else
+ kexch_alg = ffdhe_kexch_groups[idx];
+ /* We expect nothing for the unimplemented TLS 1.2 FFDHE named groups */
+ if (!istls13 && !isecdhe)
+ expectednid = NID_undef;
+ else
+ expectednid = kexch_alg;
+
+ if (!istls13)
+ max_version = TLS1_2_VERSION;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION,
+ max_version, &sctx, &cctx, cert,
+ privkey)))
+ goto end;
+
+ /*
+ * Force (EC)DHE ciphers for TLS 1.2.
+ * Be sure to enable auto tmp DH so that FFDHE can succeed.
+ */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx,
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":"
+ TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256))
+ || !TEST_true(SSL_CTX_set_dh_auto(sctx, 1)))
+ goto end;
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx,
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":"
+ TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256)))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(set_ssl_groups(serverssl, clientssl, clientmulti, isecdhe,
+ idx)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ /* Initial handshake; always the configured one */
+ if (!TEST_uint_eq(SSL_get_negotiated_group(clientssl), expectednid)
+ || !TEST_uint_eq(SSL_get_negotiated_group(serverssl), expectednid))
+ goto end;
+
+ if (!TEST_ptr((origsess = SSL_get1_session(clientssl))))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ /* First resumption attempt; use the same config as initial handshake */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, origsess))
+ || !TEST_true(set_ssl_groups(serverssl, clientssl, clientmulti,
+ isecdhe, idx)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl)))
+ goto end;
+
+ /* Still had better agree, since nothing changed... */
+ if (!TEST_uint_eq(SSL_get_negotiated_group(clientssl), expectednid)
+ || !TEST_uint_eq(SSL_get_negotiated_group(serverssl), expectednid))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ /*-
+ * Second resumption attempt
+ * The party that picks one group changes it, which we effectuate by
+ * changing 'idx' and updating what we expect.
+ */
+ if (idx == 0)
+ idx = 1;
+ else
+ idx--;
+ if (istls13) {
+ if (isecdhe)
+ expectednid = ecdhe_kexch_groups[idx];
+ else
+ expectednid = ffdhe_kexch_groups[idx];
+ /* Verify that we are changing what we expect. */
+ if (!TEST_int_ne(expectednid, kexch_alg))
+ goto end;
+ } else {
+ /* TLS 1.2 only supports named groups for ECDHE. */
+ if (isecdhe)
+ expectednid = kexch_alg;
+ else
+ expectednid = 0;
+ }
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, origsess))
+ || !TEST_true(set_ssl_groups(serverssl, clientssl, clientmulti,
+ isecdhe, idx)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl)))
+ goto end;
+
+ /* Check that we get what we expected */
+ if (!TEST_uint_eq(SSL_get_negotiated_group(clientssl), expectednid)
+ || !TEST_uint_eq(SSL_get_negotiated_group(serverssl), expectednid))
+ goto end;
+
+ testresult = 1;
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ SSL_SESSION_free(origsess);
+ return testresult;
+}
+# endif /* !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_DH) */
+
+/*
+ * Test TLSv1.3 Cipher Suite
+ * Test 0 = Set TLS1.3 cipher on context
+ * Test 1 = Set TLS1.3 cipher on SSL
+ * Test 2 = Set TLS1.3 and TLS1.2 cipher on context
+ * Test 3 = Set TLS1.3 and TLS1.2 cipher on SSL
+ */
+static int test_tls13_ciphersuite(int idx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ static const struct {
+ const char *ciphername;
+ int fipscapable;
+ } t13_ciphers[] = {
+ { TLS1_3_RFC_AES_128_GCM_SHA256, 1 },
+ { TLS1_3_RFC_AES_256_GCM_SHA384, 1 },
+ { TLS1_3_RFC_AES_128_CCM_SHA256, 1 },
+# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
+ { TLS1_3_RFC_CHACHA20_POLY1305_SHA256, 0 },
+ { TLS1_3_RFC_AES_256_GCM_SHA384
+ ":" TLS1_3_RFC_CHACHA20_POLY1305_SHA256, 0 },
+# endif
+ { TLS1_3_RFC_AES_128_CCM_8_SHA256 ":" TLS1_3_RFC_AES_128_CCM_SHA256, 1 }
+ };
+ const char *t13_cipher = NULL;
+ const char *t12_cipher = NULL;
+ const char *negotiated_scipher;
+ const char *negotiated_ccipher;
+ int set_at_ctx = 0;
+ int set_at_ssl = 0;
+ int testresult = 0;
+ int max_ver;
+ size_t i;
+
+ switch (idx) {
+ case 0:
+ set_at_ctx = 1;
+ break;
+ case 1:
+ set_at_ssl = 1;
+ break;
+ case 2:
+ set_at_ctx = 1;
+ t12_cipher = TLS1_TXT_RSA_WITH_AES_128_SHA256;
+ break;
+ case 3:
+ set_at_ssl = 1;
+ t12_cipher = TLS1_TXT_RSA_WITH_AES_128_SHA256;
+ break;
+ }
+
+ for (max_ver = TLS1_2_VERSION; max_ver <= TLS1_3_VERSION; max_ver++) {
+# ifdef OPENSSL_NO_TLS1_2
+ if (max_ver == TLS1_2_VERSION)
+ continue;
+# endif
+ for (i = 0; i < OSSL_NELEM(t13_ciphers); i++) {
+ if (is_fips && !t13_ciphers[i].fipscapable)
+ continue;
+ t13_cipher = t13_ciphers[i].ciphername;
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, max_ver,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (set_at_ctx) {
+ if (!TEST_true(SSL_CTX_set_ciphersuites(sctx, t13_cipher))
+ || !TEST_true(SSL_CTX_set_ciphersuites(cctx, t13_cipher)))
+ goto end;
+ if (t12_cipher != NULL) {
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, t12_cipher))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx,
+ t12_cipher)))
+ goto end;
+ }
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ if (set_at_ssl) {
+ if (!TEST_true(SSL_set_ciphersuites(serverssl, t13_cipher))
+ || !TEST_true(SSL_set_ciphersuites(clientssl, t13_cipher)))
+ goto end;
+ if (t12_cipher != NULL) {
+ if (!TEST_true(SSL_set_cipher_list(serverssl, t12_cipher))
+ || !TEST_true(SSL_set_cipher_list(clientssl,
+ t12_cipher)))
+ goto end;
+ }
+ }
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ negotiated_scipher = SSL_CIPHER_get_name(SSL_get_current_cipher(
+ serverssl));
+ negotiated_ccipher = SSL_CIPHER_get_name(SSL_get_current_cipher(
+ clientssl));
+ if (!TEST_str_eq(negotiated_scipher, negotiated_ccipher))
+ goto end;
+
+ /*
+ * TEST_strn_eq is used below because t13_cipher can contain
+ * multiple ciphersuites
+ */
+ if (max_ver == TLS1_3_VERSION
+ && !TEST_strn_eq(t13_cipher, negotiated_scipher,
+ strlen(negotiated_scipher)))
+ goto end;
+
+# ifndef OPENSSL_NO_TLS1_2
+ /* Below validation is not done when t12_cipher is NULL */
+ if (max_ver == TLS1_2_VERSION && t12_cipher != NULL
+ && !TEST_str_eq(t12_cipher, negotiated_scipher))
+ goto end;
+# endif
+
+ SSL_free(serverssl);
+ serverssl = NULL;
+ SSL_free(clientssl);
+ clientssl = NULL;
+ SSL_CTX_free(sctx);
+ sctx = NULL;
+ SSL_CTX_free(cctx);
+ cctx = NULL;
+ }
+ }
+
+ testresult = 1;
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+/*
+ * Test TLSv1.3 PSKs
+ * Test 0 = Test new style callbacks
+ * Test 1 = Test both new and old style callbacks
+ * Test 2 = Test old style callbacks
+ * Test 3 = Test old style callbacks with no certificate
+ */
+static int test_tls13_psk(int idx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ const SSL_CIPHER *cipher = NULL;
+ const unsigned char key[] = {
+ 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, 0x20, 0x21, 0x22, 0x23,
+ 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f
+ };
+ int testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, idx == 3 ? NULL : cert,
+ idx == 3 ? NULL : privkey)))
+ goto end;
+
+ if (idx != 3) {
+ /*
+ * We use a ciphersuite with SHA256 to ease testing old style PSK
+ * callbacks which will always default to SHA256. This should not be
+ * necessary if we have no cert/priv key. In that case the server should
+ * prefer SHA256 automatically.
+ */
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ "TLS_AES_128_GCM_SHA256")))
+ goto end;
+ } else {
+ /*
+ * As noted above the server should prefer SHA256 automatically. However
+ * we are careful not to offer TLS_CHACHA20_POLY1305_SHA256 so this same
+ * code works even if we are testing with only the FIPS provider loaded.
+ */
+ if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ "TLS_AES_256_GCM_SHA384:"
+ "TLS_AES_128_GCM_SHA256")))
+ goto end;
+ }
+
+ /*
+ * Test 0: New style callbacks only
+ * Test 1: New and old style callbacks (only the new ones should be used)
+ * Test 2: Old style callbacks only
+ */
+ if (idx == 0 || idx == 1) {
+ SSL_CTX_set_psk_use_session_callback(cctx, use_session_cb);
+ SSL_CTX_set_psk_find_session_callback(sctx, find_session_cb);
+ }
+#ifndef OPENSSL_NO_PSK
+ if (idx >= 1) {
+ SSL_CTX_set_psk_client_callback(cctx, psk_client_cb);
+ SSL_CTX_set_psk_server_callback(sctx, psk_server_cb);
+ }
+#endif
+ srvid = pskid;
+ use_session_cb_cnt = 0;
+ find_session_cb_cnt = 0;
+ psk_client_cb_cnt = 0;
+ psk_server_cb_cnt = 0;
+
+ if (idx != 3) {
+ /*
+ * Check we can create a connection if callback decides not to send a
+ * PSK
+ */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_false(SSL_session_reused(clientssl))
+ || !TEST_false(SSL_session_reused(serverssl)))
+ goto end;
+
+ if (idx == 0 || idx == 1) {
+ if (!TEST_true(use_session_cb_cnt == 1)
+ || !TEST_true(find_session_cb_cnt == 0)
+ /*
+ * If no old style callback then below should be 0
+ * otherwise 1
+ */
+ || !TEST_true(psk_client_cb_cnt == idx)
+ || !TEST_true(psk_server_cb_cnt == 0))
+ goto end;
+ } else {
+ if (!TEST_true(use_session_cb_cnt == 0)
+ || !TEST_true(find_session_cb_cnt == 0)
+ || !TEST_true(psk_client_cb_cnt == 1)
+ || !TEST_true(psk_server_cb_cnt == 0))
+ goto end;
+ }
+
+ shutdown_ssl_connection(serverssl, clientssl);
+ serverssl = clientssl = NULL;
+ use_session_cb_cnt = psk_client_cb_cnt = 0;
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ /* Create the PSK */
+ cipher = SSL_CIPHER_find(clientssl, TLS13_AES_128_GCM_SHA256_BYTES);
+ clientpsk = SSL_SESSION_new();
+ if (!TEST_ptr(clientpsk)
+ || !TEST_ptr(cipher)
+ || !TEST_true(SSL_SESSION_set1_master_key(clientpsk, key,
+ sizeof(key)))
+ || !TEST_true(SSL_SESSION_set_cipher(clientpsk, cipher))
+ || !TEST_true(SSL_SESSION_set_protocol_version(clientpsk,
+ TLS1_3_VERSION))
+ || !TEST_true(SSL_SESSION_up_ref(clientpsk)))
+ goto end;
+ serverpsk = clientpsk;
+
+ /* Check we can create a connection and the PSK is used */
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl))
+ || !TEST_true(SSL_session_reused(serverssl)))
+ goto end;
+
+ if (idx == 0 || idx == 1) {
+ if (!TEST_true(use_session_cb_cnt == 1)
+ || !TEST_true(find_session_cb_cnt == 1)
+ || !TEST_true(psk_client_cb_cnt == 0)
+ || !TEST_true(psk_server_cb_cnt == 0))
+ goto end;
+ } else {
+ if (!TEST_true(use_session_cb_cnt == 0)
+ || !TEST_true(find_session_cb_cnt == 0)
+ || !TEST_true(psk_client_cb_cnt == 1)
+ || !TEST_true(psk_server_cb_cnt == 1))
+ goto end;
+ }
+
+ shutdown_ssl_connection(serverssl, clientssl);
+ serverssl = clientssl = NULL;
+ use_session_cb_cnt = find_session_cb_cnt = 0;
+ psk_client_cb_cnt = psk_server_cb_cnt = 0;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ /* Force an HRR */
+#if defined(OPENSSL_NO_EC)
+ if (!TEST_true(SSL_set1_groups_list(serverssl, "ffdhe3072")))
+ goto end;
+#else
+ if (!TEST_true(SSL_set1_groups_list(serverssl, "P-256")))
+ goto end;
+#endif
+
+ /*
+ * Check we can create a connection, the PSK is used and the callbacks are
+ * called twice.
+ */
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl))
+ || !TEST_true(SSL_session_reused(serverssl)))
+ goto end;
+
+ if (idx == 0 || idx == 1) {
+ if (!TEST_true(use_session_cb_cnt == 2)
+ || !TEST_true(find_session_cb_cnt == 2)
+ || !TEST_true(psk_client_cb_cnt == 0)
+ || !TEST_true(psk_server_cb_cnt == 0))
+ goto end;
+ } else {
+ if (!TEST_true(use_session_cb_cnt == 0)
+ || !TEST_true(find_session_cb_cnt == 0)
+ || !TEST_true(psk_client_cb_cnt == 2)
+ || !TEST_true(psk_server_cb_cnt == 2))
+ goto end;
+ }
+
+ shutdown_ssl_connection(serverssl, clientssl);
+ serverssl = clientssl = NULL;
+ use_session_cb_cnt = find_session_cb_cnt = 0;
+ psk_client_cb_cnt = psk_server_cb_cnt = 0;
+
+ if (idx != 3) {
+ /*
+ * Check that if the server rejects the PSK we can still connect, but with
+ * a full handshake
+ */
+ srvid = "Dummy Identity";
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_false(SSL_session_reused(clientssl))
+ || !TEST_false(SSL_session_reused(serverssl)))
+ goto end;
+
+ if (idx == 0 || idx == 1) {
+ if (!TEST_true(use_session_cb_cnt == 1)
+ || !TEST_true(find_session_cb_cnt == 1)
+ || !TEST_true(psk_client_cb_cnt == 0)
+ /*
+ * If no old style callback then below should be 0
+ * otherwise 1
+ */
+ || !TEST_true(psk_server_cb_cnt == idx))
+ goto end;
+ } else {
+ if (!TEST_true(use_session_cb_cnt == 0)
+ || !TEST_true(find_session_cb_cnt == 0)
+ || !TEST_true(psk_client_cb_cnt == 1)
+ || !TEST_true(psk_server_cb_cnt == 1))
+ goto end;
+ }
+
+ shutdown_ssl_connection(serverssl, clientssl);
+ serverssl = clientssl = NULL;
+ }
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+static unsigned char cookie_magic_value[] = "cookie magic";
+
+static int generate_cookie_callback(SSL *ssl, unsigned char *cookie,
+ unsigned int *cookie_len)
+{
+ /*
+ * Not suitable as a real cookie generation function but good enough for
+ * testing!
+ */
+ memcpy(cookie, cookie_magic_value, sizeof(cookie_magic_value) - 1);
+ *cookie_len = sizeof(cookie_magic_value) - 1;
+
+ return 1;
+}
+
+static int verify_cookie_callback(SSL *ssl, const unsigned char *cookie,
+ unsigned int cookie_len)
+{
+ if (cookie_len == sizeof(cookie_magic_value) - 1
+ && memcmp(cookie, cookie_magic_value, cookie_len) == 0)
+ return 1;
+
+ return 0;
+}
+
+static int generate_stateless_cookie_callback(SSL *ssl, unsigned char *cookie,
+ size_t *cookie_len)
+{
+ unsigned int temp;
+ int res = generate_cookie_callback(ssl, cookie, &temp);
+ *cookie_len = temp;
+ return res;
+}
+
+static int verify_stateless_cookie_callback(SSL *ssl, const unsigned char *cookie,
+ size_t cookie_len)
+{
+ return verify_cookie_callback(ssl, cookie, cookie_len);
+}
+
+static int test_stateless(void)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ int testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ /* The arrival of CCS messages can confuse the test */
+ SSL_CTX_clear_options(cctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ /* Send the first ClientHello */
+ || !TEST_false(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_WANT_READ))
+ /*
+ * This should fail with a -1 return because we have no callbacks
+ * set up
+ */
+ || !TEST_int_eq(SSL_stateless(serverssl), -1))
+ goto end;
+
+ /* Fatal error so abandon the connection from this client */
+ SSL_free(clientssl);
+ clientssl = NULL;
+
+ /* Set up the cookie generation and verification callbacks */
+ SSL_CTX_set_stateless_cookie_generate_cb(sctx, generate_stateless_cookie_callback);
+ SSL_CTX_set_stateless_cookie_verify_cb(sctx, verify_stateless_cookie_callback);
+
+ /*
+ * Create a new connection from the client (we can reuse the server SSL
+ * object).
+ */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ /* Send the first ClientHello */
+ || !TEST_false(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_WANT_READ))
+ /* This should fail because there is no cookie */
+ || !TEST_int_eq(SSL_stateless(serverssl), 0))
+ goto end;
+
+ /* Abandon the connection from this client */
+ SSL_free(clientssl);
+ clientssl = NULL;
+
+ /*
+ * Now create a connection from a new client but with the same server SSL
+ * object
+ */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ /* Send the first ClientHello */
+ || !TEST_false(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_WANT_READ))
+ /* This should fail because there is no cookie */
+ || !TEST_int_eq(SSL_stateless(serverssl), 0)
+ /* Send the second ClientHello */
+ || !TEST_false(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_WANT_READ))
+ /* This should succeed because a cookie is now present */
+ || !TEST_int_eq(SSL_stateless(serverssl), 1)
+ /* Complete the connection */
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ shutdown_ssl_connection(serverssl, clientssl);
+ serverssl = clientssl = NULL;
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+
+}
+#endif /* OSSL_NO_USABLE_TLS1_3 */
+
+static int clntaddoldcb = 0;
+static int clntparseoldcb = 0;
+static int srvaddoldcb = 0;
+static int srvparseoldcb = 0;
+static int clntaddnewcb = 0;
+static int clntparsenewcb = 0;
+static int srvaddnewcb = 0;
+static int srvparsenewcb = 0;
+static int snicb = 0;
+
+#define TEST_EXT_TYPE1 0xff00
+
+static int old_add_cb(SSL *s, unsigned int ext_type, const unsigned char **out,
+ size_t *outlen, int *al, void *add_arg)
+{
+ int *server = (int *)add_arg;
+ unsigned char *data;
+
+ if (SSL_is_server(s))
+ srvaddoldcb++;
+ else
+ clntaddoldcb++;
+
+ if (*server != SSL_is_server(s)
+ || (data = OPENSSL_malloc(sizeof(*data))) == NULL)
+ return -1;
+
+ *data = 1;
+ *out = data;
+ *outlen = sizeof(char);
+ return 1;
+}
+
+static void old_free_cb(SSL *s, unsigned int ext_type, const unsigned char *out,
+ void *add_arg)
+{
+ OPENSSL_free((unsigned char *)out);
+}
+
+static int old_parse_cb(SSL *s, unsigned int ext_type, const unsigned char *in,
+ size_t inlen, int *al, void *parse_arg)
+{
+ int *server = (int *)parse_arg;
+
+ if (SSL_is_server(s))
+ srvparseoldcb++;
+ else
+ clntparseoldcb++;
+
+ if (*server != SSL_is_server(s)
+ || inlen != sizeof(char)
+ || *in != 1)
+ return -1;
+
+ return 1;
+}
+
+static int new_add_cb(SSL *s, unsigned int ext_type, unsigned int context,
+ const unsigned char **out, size_t *outlen, X509 *x,
+ size_t chainidx, int *al, void *add_arg)
+{
+ int *server = (int *)add_arg;
+ unsigned char *data;
+
+ if (SSL_is_server(s))
+ srvaddnewcb++;
+ else
+ clntaddnewcb++;
+
+ if (*server != SSL_is_server(s)
+ || (data = OPENSSL_malloc(sizeof(*data))) == NULL)
+ return -1;
+
+ *data = 1;
+ *out = data;
+ *outlen = sizeof(*data);
+ return 1;
+}
+
+static void new_free_cb(SSL *s, unsigned int ext_type, unsigned int context,
+ const unsigned char *out, void *add_arg)
+{
+ OPENSSL_free((unsigned char *)out);
+}
+
+static int new_parse_cb(SSL *s, unsigned int ext_type, unsigned int context,
+ const unsigned char *in, size_t inlen, X509 *x,
+ size_t chainidx, int *al, void *parse_arg)
+{
+ int *server = (int *)parse_arg;
+
+ if (SSL_is_server(s))
+ srvparsenewcb++;
+ else
+ clntparsenewcb++;
+
+ if (*server != SSL_is_server(s)
+ || inlen != sizeof(char) || *in != 1)
+ return -1;
+
+ return 1;
+}
+
+static int sni_cb(SSL *s, int *al, void *arg)
+{
+ SSL_CTX *ctx = (SSL_CTX *)arg;
+
+ if (SSL_set_SSL_CTX(s, ctx) == NULL) {
+ *al = SSL_AD_INTERNAL_ERROR;
+ return SSL_TLSEXT_ERR_ALERT_FATAL;
+ }
+ snicb++;
+ return SSL_TLSEXT_ERR_OK;
+}
+
+static int verify_cb(int preverify_ok, X509_STORE_CTX *x509_ctx)
+{
+ return 1;
+}
+
+/*
+ * Custom call back tests.
+ * Test 0: Old style callbacks in TLSv1.2
+ * Test 1: New style callbacks in TLSv1.2
+ * Test 2: New style callbacks in TLSv1.2 with SNI
+ * Test 3: New style callbacks in TLSv1.3. Extensions in CH and EE
+ * Test 4: New style callbacks in TLSv1.3. Extensions in CH, SH, EE, Cert + NST
+ * Test 5: New style callbacks in TLSv1.3. Extensions in CR + Client Cert
+ */
+static int test_custom_exts(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ static int server = 1;
+ static int client = 0;
+ SSL_SESSION *sess = NULL;
+ unsigned int context;
+
+#if defined(OPENSSL_NO_TLS1_2) && !defined(OSSL_NO_USABLE_TLS1_3)
+ /* Skip tests for TLSv1.2 and below in this case */
+ if (tst < 3)
+ return 1;
+#endif
+
+ /* Reset callback counters */
+ clntaddoldcb = clntparseoldcb = srvaddoldcb = srvparseoldcb = 0;
+ clntaddnewcb = clntparsenewcb = srvaddnewcb = srvparsenewcb = 0;
+ snicb = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (tst == 2
+ && !TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), NULL,
+ TLS1_VERSION, 0,
+ &sctx2, NULL, cert, privkey)))
+ goto end;
+
+
+ if (tst < 3) {
+ SSL_CTX_set_options(cctx, SSL_OP_NO_TLSv1_3);
+ SSL_CTX_set_options(sctx, SSL_OP_NO_TLSv1_3);
+ if (sctx2 != NULL)
+ SSL_CTX_set_options(sctx2, SSL_OP_NO_TLSv1_3);
+ }
+
+ if (tst == 5) {
+ context = SSL_EXT_TLS1_3_CERTIFICATE_REQUEST
+ | SSL_EXT_TLS1_3_CERTIFICATE;
+ SSL_CTX_set_verify(sctx,
+ SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
+ verify_cb);
+ if (!TEST_int_eq(SSL_CTX_use_certificate_file(cctx, cert,
+ SSL_FILETYPE_PEM), 1)
+ || !TEST_int_eq(SSL_CTX_use_PrivateKey_file(cctx, privkey,
+ SSL_FILETYPE_PEM), 1)
+ || !TEST_int_eq(SSL_CTX_check_private_key(cctx), 1))
+ goto end;
+ } else if (tst == 4) {
+ context = SSL_EXT_CLIENT_HELLO
+ | SSL_EXT_TLS1_2_SERVER_HELLO
+ | SSL_EXT_TLS1_3_SERVER_HELLO
+ | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
+ | SSL_EXT_TLS1_3_CERTIFICATE
+ | SSL_EXT_TLS1_3_NEW_SESSION_TICKET;
+ } else {
+ context = SSL_EXT_CLIENT_HELLO
+ | SSL_EXT_TLS1_2_SERVER_HELLO
+ | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS;
+ }
+
+ /* Create a client side custom extension */
+ if (tst == 0) {
+ if (!TEST_true(SSL_CTX_add_client_custom_ext(cctx, TEST_EXT_TYPE1,
+ old_add_cb, old_free_cb,
+ &client, old_parse_cb,
+ &client)))
+ goto end;
+ } else {
+ if (!TEST_true(SSL_CTX_add_custom_ext(cctx, TEST_EXT_TYPE1, context,
+ new_add_cb, new_free_cb,
+ &client, new_parse_cb, &client)))
+ goto end;
+ }
+
+ /* Should not be able to add duplicates */
+ if (!TEST_false(SSL_CTX_add_client_custom_ext(cctx, TEST_EXT_TYPE1,
+ old_add_cb, old_free_cb,
+ &client, old_parse_cb,
+ &client))
+ || !TEST_false(SSL_CTX_add_custom_ext(cctx, TEST_EXT_TYPE1,
+ context, new_add_cb,
+ new_free_cb, &client,
+ new_parse_cb, &client)))
+ goto end;
+
+ /* Create a server side custom extension */
+ if (tst == 0) {
+ if (!TEST_true(SSL_CTX_add_server_custom_ext(sctx, TEST_EXT_TYPE1,
+ old_add_cb, old_free_cb,
+ &server, old_parse_cb,
+ &server)))
+ goto end;
+ } else {
+ if (!TEST_true(SSL_CTX_add_custom_ext(sctx, TEST_EXT_TYPE1, context,
+ new_add_cb, new_free_cb,
+ &server, new_parse_cb, &server)))
+ goto end;
+ if (sctx2 != NULL
+ && !TEST_true(SSL_CTX_add_custom_ext(sctx2, TEST_EXT_TYPE1,
+ context, new_add_cb,
+ new_free_cb, &server,
+ new_parse_cb, &server)))
+ goto end;
+ }
+
+ /* Should not be able to add duplicates */
+ if (!TEST_false(SSL_CTX_add_server_custom_ext(sctx, TEST_EXT_TYPE1,
+ old_add_cb, old_free_cb,
+ &server, old_parse_cb,
+ &server))
+ || !TEST_false(SSL_CTX_add_custom_ext(sctx, TEST_EXT_TYPE1,
+ context, new_add_cb,
+ new_free_cb, &server,
+ new_parse_cb, &server)))
+ goto end;
+
+ if (tst == 2) {
+ /* Set up SNI */
+ if (!TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx, sni_cb))
+ || !TEST_true(SSL_CTX_set_tlsext_servername_arg(sctx, sctx2)))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ if (tst == 0) {
+ if (clntaddoldcb != 1
+ || clntparseoldcb != 1
+ || srvaddoldcb != 1
+ || srvparseoldcb != 1)
+ goto end;
+ } else if (tst == 1 || tst == 2 || tst == 3) {
+ if (clntaddnewcb != 1
+ || clntparsenewcb != 1
+ || srvaddnewcb != 1
+ || srvparsenewcb != 1
+ || (tst != 2 && snicb != 0)
+ || (tst == 2 && snicb != 1))
+ goto end;
+ } else if (tst == 5) {
+ if (clntaddnewcb != 1
+ || clntparsenewcb != 1
+ || srvaddnewcb != 1
+ || srvparsenewcb != 1)
+ goto end;
+ } else {
+ /* In this case there 2 NewSessionTicket messages created */
+ if (clntaddnewcb != 1
+ || clntparsenewcb != 5
+ || srvaddnewcb != 5
+ || srvparsenewcb != 1)
+ goto end;
+ }
+
+ sess = SSL_get1_session(clientssl);
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ if (tst == 3 || tst == 5) {
+ /* We don't bother with the resumption aspects for these tests */
+ testresult = 1;
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(SSL_set_session(clientssl, sess))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ /*
+ * For a resumed session we expect to add the ClientHello extension. For the
+ * old style callbacks we ignore it on the server side because they set
+ * SSL_EXT_IGNORE_ON_RESUMPTION. The new style callbacks do not ignore
+ * them.
+ */
+ if (tst == 0) {
+ if (clntaddoldcb != 2
+ || clntparseoldcb != 1
+ || srvaddoldcb != 1
+ || srvparseoldcb != 1)
+ goto end;
+ } else if (tst == 1 || tst == 2 || tst == 3) {
+ if (clntaddnewcb != 2
+ || clntparsenewcb != 2
+ || srvaddnewcb != 2
+ || srvparsenewcb != 2)
+ goto end;
+ } else {
+ /*
+ * No Certificate message extensions in the resumption handshake,
+ * 2 NewSessionTickets in the initial handshake, 1 in the resumption
+ */
+ if (clntaddnewcb != 2
+ || clntparsenewcb != 8
+ || srvaddnewcb != 8
+ || srvparsenewcb != 2)
+ goto end;
+ }
+
+ testresult = 1;
+
+end:
+ SSL_SESSION_free(sess);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx2);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+#if !defined(OPENSSL_NO_TLS1_2) && !defined(OSSL_NO_USABLE_TLS1_3)
+
+#define SYNTHV1CONTEXT (SSL_EXT_TLS1_2_AND_BELOW_ONLY \
+ | SSL_EXT_CLIENT_HELLO \
+ | SSL_EXT_TLS1_2_SERVER_HELLO \
+ | SSL_EXT_IGNORE_ON_RESUMPTION)
+
+#define TLS13CONTEXT (SSL_EXT_TLS1_3_CERTIFICATE \
+ | SSL_EXT_TLS1_2_SERVER_HELLO \
+ | SSL_EXT_CLIENT_HELLO)
+
+#define SERVERINFO_CUSTOM \
+ 0x00, (char)TLSEXT_TYPE_signed_certificate_timestamp, \
+ 0x00, 0x03, \
+ 0x04, 0x05, 0x06 \
+
+static const unsigned char serverinfo_custom_tls13[] = {
+ 0x00, 0x00, (TLS13CONTEXT >> 8) & 0xff, TLS13CONTEXT & 0xff,
+ SERVERINFO_CUSTOM
+};
+static const unsigned char serverinfo_custom_v2[] = {
+ 0x00, 0x00, (SYNTHV1CONTEXT >> 8) & 0xff, SYNTHV1CONTEXT & 0xff,
+ SERVERINFO_CUSTOM
+};
+static const unsigned char serverinfo_custom_v1[] = {
+ SERVERINFO_CUSTOM
+};
+static const size_t serverinfo_custom_tls13_len = sizeof(serverinfo_custom_tls13);
+static const size_t serverinfo_custom_v2_len = sizeof(serverinfo_custom_v2);
+static const size_t serverinfo_custom_v1_len = sizeof(serverinfo_custom_v1);
+
+static int serverinfo_custom_parse_cb(SSL *s, unsigned int ext_type,
+ unsigned int context,
+ const unsigned char *in,
+ size_t inlen, X509 *x,
+ size_t chainidx, int *al,
+ void *parse_arg)
+{
+ const size_t len = serverinfo_custom_v1_len;
+ const unsigned char *si = &serverinfo_custom_v1[len - 3];
+ int *p_cb_result = (int*)parse_arg;
+ *p_cb_result = TEST_mem_eq(in, inlen, si, 3);
+ return 1;
+}
+
+static int test_serverinfo_custom(const int idx)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ int cb_result = 0;
+
+ /*
+ * Following variables are set in the switch statement
+ * according to the test iteration.
+ * Default values do not make much sense: test would fail with them.
+ */
+ int serverinfo_version = 0;
+ int protocol_version = 0;
+ unsigned int extension_context = 0;
+ const unsigned char *si = NULL;
+ size_t si_len = 0;
+
+ const int call_use_serverinfo_ex = idx > 0;
+ switch (idx) {
+ case 0: /* FALLTHROUGH */
+ case 1:
+ serverinfo_version = SSL_SERVERINFOV1;
+ protocol_version = TLS1_2_VERSION;
+ extension_context = SYNTHV1CONTEXT;
+ si = serverinfo_custom_v1;
+ si_len = serverinfo_custom_v1_len;
+ break;
+ case 2:
+ serverinfo_version = SSL_SERVERINFOV2;
+ protocol_version = TLS1_2_VERSION;
+ extension_context = SYNTHV1CONTEXT;
+ si = serverinfo_custom_v2;
+ si_len = serverinfo_custom_v2_len;
+ break;
+ case 3:
+ serverinfo_version = SSL_SERVERINFOV2;
+ protocol_version = TLS1_3_VERSION;
+ extension_context = TLS13CONTEXT;
+ si = serverinfo_custom_tls13;
+ si_len = serverinfo_custom_tls13_len;
+ break;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx,
+ TLS_method(),
+ TLS_method(),
+ protocol_version,
+ protocol_version,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (call_use_serverinfo_ex) {
+ if (!TEST_true(SSL_CTX_use_serverinfo_ex(sctx, serverinfo_version,
+ si, si_len)))
+ goto end;
+ } else {
+ if (!TEST_true(SSL_CTX_use_serverinfo(sctx, si, si_len)))
+ goto end;
+ }
+
+ if (!TEST_true(SSL_CTX_add_custom_ext(cctx, TLSEXT_TYPE_signed_certificate_timestamp,
+ extension_context,
+ NULL, NULL, NULL,
+ serverinfo_custom_parse_cb,
+ &cb_result))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_int_eq(SSL_do_handshake(clientssl), 1))
+ goto end;
+
+ if (!TEST_true(cb_result))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif
+
+/*
+ * Test that SSL_export_keying_material() produces expected results. There are
+ * no test vectors so all we do is test that both sides of the communication
+ * produce the same results for different protocol versions.
+ */
+#define SMALL_LABEL_LEN 10
+#define LONG_LABEL_LEN 249
+static int test_export_key_mat(int tst)
+{
+ int testresult = 0;
+ SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ const char label[LONG_LABEL_LEN + 1] = "test label";
+ const unsigned char context[] = "context";
+ const unsigned char *emptycontext = NULL;
+ unsigned char ckeymat1[80], ckeymat2[80], ckeymat3[80];
+ unsigned char skeymat1[80], skeymat2[80], skeymat3[80];
+ size_t labellen;
+ const int protocols[] = {
+ TLS1_VERSION,
+ TLS1_1_VERSION,
+ TLS1_2_VERSION,
+ TLS1_3_VERSION,
+ TLS1_3_VERSION,
+ TLS1_3_VERSION
+ };
+
+#ifdef OPENSSL_NO_TLS1
+ if (tst == 0)
+ return 1;
+#endif
+#ifdef OPENSSL_NO_TLS1_1
+ if (tst == 1)
+ return 1;
+#endif
+ if (is_fips && (tst == 0 || tst == 1))
+ return 1;
+#ifdef OPENSSL_NO_TLS1_2
+ if (tst == 2)
+ return 1;
+#endif
+#ifdef OSSL_NO_USABLE_TLS1_3
+ if (tst >= 3)
+ return 1;
+#endif
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ OPENSSL_assert(tst >= 0 && (size_t)tst < OSSL_NELEM(protocols));
+ SSL_CTX_set_max_proto_version(cctx, protocols[tst]);
+ SSL_CTX_set_min_proto_version(cctx, protocols[tst]);
+ if ((protocols[tst] < TLS1_2_VERSION) &&
+ (!SSL_CTX_set_cipher_list(cctx, "DEFAULT:@SECLEVEL=0")
+ || !SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0")))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL,
+ NULL)))
+ goto end;
+
+ /*
+ * Premature call of SSL_export_keying_material should just fail.
+ */
+ if (!TEST_int_le(SSL_export_keying_material(clientssl, ckeymat1,
+ sizeof(ckeymat1), label,
+ SMALL_LABEL_LEN + 1, context,
+ sizeof(context) - 1, 1), 0))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ if (tst == 5) {
+ /*
+ * TLSv1.3 imposes a maximum label len of 249 bytes. Check we fail if we
+ * go over that.
+ */
+ if (!TEST_int_le(SSL_export_keying_material(clientssl, ckeymat1,
+ sizeof(ckeymat1), label,
+ LONG_LABEL_LEN + 1, context,
+ sizeof(context) - 1, 1), 0))
+ goto end;
+
+ testresult = 1;
+ goto end;
+ } else if (tst == 4) {
+ labellen = LONG_LABEL_LEN;
+ } else {
+ labellen = SMALL_LABEL_LEN;
+ }
+
+ if (!TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat1,
+ sizeof(ckeymat1), label,
+ labellen, context,
+ sizeof(context) - 1, 1), 1)
+ || !TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat2,
+ sizeof(ckeymat2), label,
+ labellen,
+ emptycontext,
+ 0, 1), 1)
+ || !TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat3,
+ sizeof(ckeymat3), label,
+ labellen,
+ NULL, 0, 0), 1)
+ || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat1,
+ sizeof(skeymat1), label,
+ labellen,
+ context,
+ sizeof(context) -1, 1),
+ 1)
+ || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat2,
+ sizeof(skeymat2), label,
+ labellen,
+ emptycontext,
+ 0, 1), 1)
+ || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat3,
+ sizeof(skeymat3), label,
+ labellen,
+ NULL, 0, 0), 1)
+ /*
+ * Check that both sides created the same key material with the
+ * same context.
+ */
+ || !TEST_mem_eq(ckeymat1, sizeof(ckeymat1), skeymat1,
+ sizeof(skeymat1))
+ /*
+ * Check that both sides created the same key material with an
+ * empty context.
+ */
+ || !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), skeymat2,
+ sizeof(skeymat2))
+ /*
+ * Check that both sides created the same key material without a
+ * context.
+ */
+ || !TEST_mem_eq(ckeymat3, sizeof(ckeymat3), skeymat3,
+ sizeof(skeymat3))
+ /* Different contexts should produce different results */
+ || !TEST_mem_ne(ckeymat1, sizeof(ckeymat1), ckeymat2,
+ sizeof(ckeymat2)))
+ goto end;
+
+ /*
+ * Check that an empty context and no context produce different results in
+ * protocols less than TLSv1.3. In TLSv1.3 they should be the same.
+ */
+ if ((tst < 3 && !TEST_mem_ne(ckeymat2, sizeof(ckeymat2), ckeymat3,
+ sizeof(ckeymat3)))
+ || (tst >= 3 && !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), ckeymat3,
+ sizeof(ckeymat3))))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx2);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+#ifndef OSSL_NO_USABLE_TLS1_3
+/*
+ * Test that SSL_export_keying_material_early() produces expected
+ * results. There are no test vectors so all we do is test that both
+ * sides of the communication produce the same results for different
+ * protocol versions.
+ */
+static int test_export_key_mat_early(int idx)
+{
+ static const char label[] = "test label";
+ static const unsigned char context[] = "context";
+ int testresult = 0;
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ SSL_SESSION *sess = NULL;
+ const unsigned char *emptycontext = NULL;
+ unsigned char ckeymat1[80], ckeymat2[80];
+ unsigned char skeymat1[80], skeymat2[80];
+ unsigned char buf[1];
+ size_t readbytes, written;
+
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, &serverssl,
+ &sess, idx, SHA384_DIGEST_LENGTH)))
+ goto end;
+
+ /* Here writing 0 length early data is enough. */
+ if (!TEST_true(SSL_write_early_data(clientssl, NULL, 0, &written))
+ || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_ERROR)
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_ACCEPTED))
+ goto end;
+
+ if (!TEST_int_eq(SSL_export_keying_material_early(
+ clientssl, ckeymat1, sizeof(ckeymat1), label,
+ sizeof(label) - 1, context, sizeof(context) - 1), 1)
+ || !TEST_int_eq(SSL_export_keying_material_early(
+ clientssl, ckeymat2, sizeof(ckeymat2), label,
+ sizeof(label) - 1, emptycontext, 0), 1)
+ || !TEST_int_eq(SSL_export_keying_material_early(
+ serverssl, skeymat1, sizeof(skeymat1), label,
+ sizeof(label) - 1, context, sizeof(context) - 1), 1)
+ || !TEST_int_eq(SSL_export_keying_material_early(
+ serverssl, skeymat2, sizeof(skeymat2), label,
+ sizeof(label) - 1, emptycontext, 0), 1)
+ /*
+ * Check that both sides created the same key material with the
+ * same context.
+ */
+ || !TEST_mem_eq(ckeymat1, sizeof(ckeymat1), skeymat1,
+ sizeof(skeymat1))
+ /*
+ * Check that both sides created the same key material with an
+ * empty context.
+ */
+ || !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), skeymat2,
+ sizeof(skeymat2))
+ /* Different contexts should produce different results */
+ || !TEST_mem_ne(ckeymat1, sizeof(ckeymat1), ckeymat2,
+ sizeof(ckeymat2)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(sess);
+ SSL_SESSION_free(clientpsk);
+ SSL_SESSION_free(serverpsk);
+ clientpsk = serverpsk = NULL;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+#define NUM_KEY_UPDATE_MESSAGES 40
+/*
+ * Test KeyUpdate.
+ */
+static int test_key_update(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0, i, j;
+ char buf[20];
+ static char *mess = "A test message";
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_3_VERSION,
+ 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ for (j = 0; j < 2; j++) {
+ /* Send lots of KeyUpdate messages */
+ for (i = 0; i < NUM_KEY_UPDATE_MESSAGES; i++) {
+ if (!TEST_true(SSL_key_update(clientssl,
+ (j == 0)
+ ? SSL_KEY_UPDATE_NOT_REQUESTED
+ : SSL_KEY_UPDATE_REQUESTED))
+ || !TEST_true(SSL_do_handshake(clientssl)))
+ goto end;
+ }
+
+ /* Check that sending and receiving app data is ok */
+ if (!TEST_int_eq(SSL_write(clientssl, mess, strlen(mess)), strlen(mess))
+ || !TEST_int_eq(SSL_read(serverssl, buf, sizeof(buf)),
+ strlen(mess)))
+ goto end;
+
+ if (!TEST_int_eq(SSL_write(serverssl, mess, strlen(mess)), strlen(mess))
+ || !TEST_int_eq(SSL_read(clientssl, buf, sizeof(buf)),
+ strlen(mess)))
+ goto end;
+ }
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+/*
+ * Test we can handle a KeyUpdate (update requested) message while
+ * write data is pending in peer.
+ * Test 0: Client sends KeyUpdate while Server is writing
+ * Test 1: Server sends KeyUpdate while Client is writing
+ */
+static int test_key_update_peer_in_write(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ char buf[20];
+ static char *mess = "A test message";
+ BIO *bretry = BIO_new(bio_s_always_retry());
+ BIO *tmp = NULL;
+ SSL *peerupdate = NULL, *peerwrite = NULL;
+
+ if (!TEST_ptr(bretry)
+ || !TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_3_VERSION,
+ 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ peerupdate = tst == 0 ? clientssl : serverssl;
+ peerwrite = tst == 0 ? serverssl : clientssl;
+
+ if (!TEST_true(SSL_key_update(peerupdate, SSL_KEY_UPDATE_REQUESTED))
+ || !TEST_int_eq(SSL_do_handshake(peerupdate), 1))
+ goto end;
+
+ /* Swap the writing endpoint's write BIO to force a retry */
+ tmp = SSL_get_wbio(peerwrite);
+ if (!TEST_ptr(tmp) || !TEST_true(BIO_up_ref(tmp))) {
+ tmp = NULL;
+ goto end;
+ }
+ SSL_set0_wbio(peerwrite, bretry);
+ bretry = NULL;
+
+ /* Write data that we know will fail with SSL_ERROR_WANT_WRITE */
+ if (!TEST_int_eq(SSL_write(peerwrite, mess, strlen(mess)), -1)
+ || !TEST_int_eq(SSL_get_error(peerwrite, 0), SSL_ERROR_WANT_WRITE))
+ goto end;
+
+ /* Reinstate the original writing endpoint's write BIO */
+ SSL_set0_wbio(peerwrite, tmp);
+ tmp = NULL;
+
+ /* Now read some data - we will read the key update */
+ if (!TEST_int_eq(SSL_read(peerwrite, buf, sizeof(buf)), -1)
+ || !TEST_int_eq(SSL_get_error(peerwrite, 0), SSL_ERROR_WANT_READ))
+ goto end;
+
+ /*
+ * Complete the write we started previously and read it from the other
+ * endpoint
+ */
+ if (!TEST_int_eq(SSL_write(peerwrite, mess, strlen(mess)), strlen(mess))
+ || !TEST_int_eq(SSL_read(peerupdate, buf, sizeof(buf)), strlen(mess)))
+ goto end;
+
+ /* Write more data to ensure we send the KeyUpdate message back */
+ if (!TEST_int_eq(SSL_write(peerwrite, mess, strlen(mess)), strlen(mess))
+ || !TEST_int_eq(SSL_read(peerupdate, buf, sizeof(buf)), strlen(mess)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ BIO_free(bretry);
+ BIO_free(tmp);
+
+ return testresult;
+}
+
+/*
+ * Test we can handle a KeyUpdate (update requested) message while
+ * peer read data is pending after peer accepted keyupdate(the msg header
+ * had been read 5 bytes).
+ * Test 0: Client sends KeyUpdate while Server is reading
+ * Test 1: Server sends KeyUpdate while Client is reading
+ */
+static int test_key_update_peer_in_read(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ char prbuf[515], lwbuf[515] = {0};
+ static char *mess = "A test message";
+ BIO *lbio = NULL, *pbio = NULL;
+ SSL *local = NULL, *peer = NULL;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_3_VERSION,
+ 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ local = tst == 0 ? clientssl : serverssl;
+ peer = tst == 0 ? serverssl : clientssl;
+
+ if (!TEST_int_eq(BIO_new_bio_pair(&lbio, 512, &pbio, 512), 1))
+ goto end;
+
+ SSL_set_bio(local, lbio, lbio);
+ SSL_set_bio(peer, pbio, pbio);
+
+ /*
+ * we first write keyupdate msg then appdata in local
+ * write data in local will fail with SSL_ERROR_WANT_WRITE,because
+ * lwbuf app data msg size + key updata msg size > 512(the size of
+ * the bio pair buffer)
+ */
+ if (!TEST_true(SSL_key_update(local, SSL_KEY_UPDATE_REQUESTED))
+ || !TEST_int_eq(SSL_write(local, lwbuf, sizeof(lwbuf)), -1)
+ || !TEST_int_eq(SSL_get_error(local, -1), SSL_ERROR_WANT_WRITE))
+ goto end;
+
+ /*
+ * first read keyupdate msg in peer in peer
+ * then read appdata that we know will fail with SSL_ERROR_WANT_READ
+ */
+ if (!TEST_int_eq(SSL_read(peer, prbuf, sizeof(prbuf)), -1)
+ || !TEST_int_eq(SSL_get_error(peer, -1), SSL_ERROR_WANT_READ))
+ goto end;
+
+ /* Now write some data in peer - we will write the key update */
+ if (!TEST_int_eq(SSL_write(peer, mess, strlen(mess)), strlen(mess)))
+ goto end;
+
+ /*
+ * write data in local previously that we will complete
+ * read data in peer previously that we will complete
+ */
+ if (!TEST_int_eq(SSL_write(local, lwbuf, sizeof(lwbuf)), sizeof(lwbuf))
+ || !TEST_int_eq(SSL_read(peer, prbuf, sizeof(prbuf)), sizeof(prbuf)))
+ goto end;
+
+ /* check that sending and receiving appdata ok */
+ if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), strlen(mess))
+ || !TEST_int_eq(SSL_read(peer, prbuf, sizeof(prbuf)), strlen(mess)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+/*
+ * Test we can't send a KeyUpdate (update requested) message while
+ * local write data is pending.
+ * Test 0: Client sends KeyUpdate while Client is writing
+ * Test 1: Server sends KeyUpdate while Server is writing
+ */
+static int test_key_update_local_in_write(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ char buf[20];
+ static char *mess = "A test message";
+ BIO *bretry = BIO_new(bio_s_always_retry());
+ BIO *tmp = NULL;
+ SSL *local = NULL, *peer = NULL;
+
+ if (!TEST_ptr(bretry)
+ || !TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_3_VERSION,
+ 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ local = tst == 0 ? clientssl : serverssl;
+ peer = tst == 0 ? serverssl : clientssl;
+
+ /* Swap the writing endpoint's write BIO to force a retry */
+ tmp = SSL_get_wbio(local);
+ if (!TEST_ptr(tmp) || !TEST_true(BIO_up_ref(tmp))) {
+ tmp = NULL;
+ goto end;
+ }
+ SSL_set0_wbio(local, bretry);
+ bretry = NULL;
+
+ /* write data in local will fail with SSL_ERROR_WANT_WRITE */
+ if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), -1)
+ || !TEST_int_eq(SSL_get_error(local, -1), SSL_ERROR_WANT_WRITE))
+ goto end;
+
+ /* Reinstate the original writing endpoint's write BIO */
+ SSL_set0_wbio(local, tmp);
+ tmp = NULL;
+
+ /* SSL_key_update will fail, because writing in local*/
+ if (!TEST_false(SSL_key_update(local, SSL_KEY_UPDATE_REQUESTED))
+ || !TEST_int_eq(ERR_GET_REASON(ERR_peek_error()), SSL_R_BAD_WRITE_RETRY))
+ goto end;
+
+ ERR_clear_error();
+ /* write data in local previously that we will complete */
+ if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), strlen(mess)))
+ goto end;
+
+ /* SSL_key_update will succeed because there is no pending write data */
+ if (!TEST_true(SSL_key_update(local, SSL_KEY_UPDATE_REQUESTED))
+ || !TEST_int_eq(SSL_do_handshake(local), 1))
+ goto end;
+
+ /*
+ * we write some appdata in local
+ * read data in peer - we will read the keyupdate msg
+ */
+ if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), strlen(mess))
+ || !TEST_int_eq(SSL_read(peer, buf, sizeof(buf)), strlen(mess)))
+ goto end;
+
+ /* Write more peer more data to ensure we send the keyupdate message back */
+ if (!TEST_int_eq(SSL_write(peer, mess, strlen(mess)), strlen(mess))
+ || !TEST_int_eq(SSL_read(local, buf, sizeof(buf)), strlen(mess)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ BIO_free(bretry);
+ BIO_free(tmp);
+
+ return testresult;
+}
+
+/*
+ * Test we can handle a KeyUpdate (update requested) message while
+ * local read data is pending(the msg header had been read 5 bytes).
+ * Test 0: Client sends KeyUpdate while Client is reading
+ * Test 1: Server sends KeyUpdate while Server is reading
+ */
+static int test_key_update_local_in_read(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ char lrbuf[515], pwbuf[515] = {0}, prbuf[20];
+ static char *mess = "A test message";
+ BIO *lbio = NULL, *pbio = NULL;
+ SSL *local = NULL, *peer = NULL;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_3_VERSION,
+ 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ local = tst == 0 ? clientssl : serverssl;
+ peer = tst == 0 ? serverssl : clientssl;
+
+ if (!TEST_int_eq(BIO_new_bio_pair(&lbio, 512, &pbio, 512), 1))
+ goto end;
+
+ SSL_set_bio(local, lbio, lbio);
+ SSL_set_bio(peer, pbio, pbio);
+
+ /* write app data in peer will fail with SSL_ERROR_WANT_WRITE */
+ if (!TEST_int_eq(SSL_write(peer, pwbuf, sizeof(pwbuf)), -1)
+ || !TEST_int_eq(SSL_get_error(peer, -1), SSL_ERROR_WANT_WRITE))
+ goto end;
+
+ /* read appdata in local will fail with SSL_ERROR_WANT_READ */
+ if (!TEST_int_eq(SSL_read(local, lrbuf, sizeof(lrbuf)), -1)
+ || !TEST_int_eq(SSL_get_error(local, -1), SSL_ERROR_WANT_READ))
+ goto end;
+
+ /* SSL_do_handshake will send keyupdate msg */
+ if (!TEST_true(SSL_key_update(local, SSL_KEY_UPDATE_REQUESTED))
+ || !TEST_int_eq(SSL_do_handshake(local), 1))
+ goto end;
+
+ /*
+ * write data in peer previously that we will complete
+ * read data in local previously that we will complete
+ */
+ if (!TEST_int_eq(SSL_write(peer, pwbuf, sizeof(pwbuf)), sizeof(pwbuf))
+ || !TEST_int_eq(SSL_read(local, lrbuf, sizeof(lrbuf)), sizeof(lrbuf)))
+ goto end;
+
+ /*
+ * write data in local
+ * read data in peer - we will read the key update
+ */
+ if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), strlen(mess))
+ || !TEST_int_eq(SSL_read(peer, prbuf, sizeof(prbuf)), strlen(mess)))
+ goto end;
+
+ /* Write more peer data to ensure we send the keyupdate message back */
+ if (!TEST_int_eq(SSL_write(peer, mess, strlen(mess)), strlen(mess))
+ || !TEST_int_eq(SSL_read(local, lrbuf, sizeof(lrbuf)), strlen(mess)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif /* OSSL_NO_USABLE_TLS1_3 */
+
+static int test_ssl_clear(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+#ifdef OPENSSL_NO_TLS1_2
+ if (idx == 1)
+ return 1;
+#endif
+
+ /* Create an initial connection */
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey))
+ || (idx == 1
+ && !TEST_true(SSL_CTX_set_max_proto_version(cctx,
+ TLS1_2_VERSION)))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ serverssl = NULL;
+
+ /* Clear clientssl - we're going to reuse the object */
+ if (!TEST_true(SSL_clear(clientssl)))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl)))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+/* Parse CH and retrieve any MFL extension value if present */
+static int get_MFL_from_client_hello(BIO *bio, int *mfl_codemfl_code)
+{
+ long len;
+ unsigned char *data;
+ PACKET pkt, pkt2, pkt3;
+ unsigned int MFL_code = 0, type = 0;
+
+ if (!TEST_uint_gt( len = BIO_get_mem_data( bio, (char **) &data ), 0 ) )
+ goto end;
+
+ memset(&pkt, 0, sizeof(pkt));
+ memset(&pkt2, 0, sizeof(pkt2));
+ memset(&pkt3, 0, sizeof(pkt3));
+
+ if (!TEST_long_gt(len, 0)
+ || !TEST_true( PACKET_buf_init( &pkt, data, len ) )
+ /* Skip the record header */
+ || !PACKET_forward(&pkt, SSL3_RT_HEADER_LENGTH)
+ /* Skip the handshake message header */
+ || !TEST_true(PACKET_forward(&pkt, SSL3_HM_HEADER_LENGTH))
+ /* Skip client version and random */
+ || !TEST_true(PACKET_forward(&pkt, CLIENT_VERSION_LEN
+ + SSL3_RANDOM_SIZE))
+ /* Skip session id */
+ || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
+ /* Skip ciphers */
+ || !TEST_true(PACKET_get_length_prefixed_2(&pkt, &pkt2))
+ /* Skip compression */
+ || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
+ /* Extensions len */
+ || !TEST_true(PACKET_as_length_prefixed_2(&pkt, &pkt2)))
+ goto end;
+
+ /* Loop through all extensions */
+ while (PACKET_remaining(&pkt2)) {
+ if (!TEST_true(PACKET_get_net_2(&pkt2, &type))
+ || !TEST_true(PACKET_get_length_prefixed_2(&pkt2, &pkt3)))
+ goto end;
+
+ if (type == TLSEXT_TYPE_max_fragment_length) {
+ if (!TEST_uint_ne(PACKET_remaining(&pkt3), 0)
+ || !TEST_true(PACKET_get_1(&pkt3, &MFL_code)))
+ goto end;
+
+ *mfl_codemfl_code = MFL_code;
+ return 1;
+ }
+ }
+
+ end:
+ return 0;
+}
+
+/* Maximum-Fragment-Length TLS extension mode to test */
+static const unsigned char max_fragment_len_test[] = {
+ TLSEXT_max_fragment_length_512,
+ TLSEXT_max_fragment_length_1024,
+ TLSEXT_max_fragment_length_2048,
+ TLSEXT_max_fragment_length_4096
+};
+
+static int test_max_fragment_len_ext(int idx_tst)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *con = NULL;
+ int testresult = 0, MFL_mode = 0;
+ BIO *rbio, *wbio;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, NULL, TLS_client_method(),
+ TLS1_VERSION, 0, NULL, &ctx, NULL,
+ NULL)))
+ return 0;
+
+ if (!TEST_true(SSL_CTX_set_tlsext_max_fragment_length(
+ ctx, max_fragment_len_test[idx_tst])))
+ goto end;
+
+ con = SSL_new(ctx);
+ if (!TEST_ptr(con))
+ goto end;
+
+ rbio = BIO_new(BIO_s_mem());
+ wbio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(rbio)|| !TEST_ptr(wbio)) {
+ BIO_free(rbio);
+ BIO_free(wbio);
+ goto end;
+ }
+
+ SSL_set_bio(con, rbio, wbio);
+
+ if (!TEST_int_le(SSL_connect(con), 0)) {
+ /* This shouldn't succeed because we don't have a server! */
+ goto end;
+ }
+
+ if (!TEST_true(get_MFL_from_client_hello(wbio, &MFL_mode)))
+ /* no MFL in client hello */
+ goto end;
+ if (!TEST_true(max_fragment_len_test[idx_tst] == MFL_mode))
+ goto end;
+
+ testresult = 1;
+
+end:
+ SSL_free(con);
+ SSL_CTX_free(ctx);
+
+ return testresult;
+}
+
+#ifndef OSSL_NO_USABLE_TLS1_3
+static int test_pha_key_update(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+ if (!TEST_true(SSL_CTX_set_min_proto_version(sctx, TLS1_3_VERSION))
+ || !TEST_true(SSL_CTX_set_max_proto_version(sctx, TLS1_3_VERSION))
+ || !TEST_true(SSL_CTX_set_min_proto_version(cctx, TLS1_3_VERSION))
+ || !TEST_true(SSL_CTX_set_max_proto_version(cctx, TLS1_3_VERSION)))
+ goto end;
+
+ SSL_CTX_set_post_handshake_auth(cctx, 1);
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ SSL_set_verify(serverssl, SSL_VERIFY_PEER, NULL);
+ if (!TEST_true(SSL_verify_client_post_handshake(serverssl)))
+ goto end;
+
+ if (!TEST_true(SSL_key_update(clientssl, SSL_KEY_UPDATE_NOT_REQUESTED)))
+ goto end;
+
+ /* Start handshake on the server */
+ if (!TEST_int_eq(SSL_do_handshake(serverssl), 1))
+ goto end;
+
+ /* Starts with SSL_connect(), but it's really just SSL_do_handshake() */
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+#endif
+
+#if !defined(OPENSSL_NO_SRP) && !defined(OPENSSL_NO_TLS1_2)
+
+static SRP_VBASE *vbase = NULL;
+
+static int ssl_srp_cb(SSL *s, int *ad, void *arg)
+{
+ int ret = SSL3_AL_FATAL;
+ char *username;
+ SRP_user_pwd *user = NULL;
+
+ username = SSL_get_srp_username(s);
+ if (username == NULL) {
+ *ad = SSL_AD_INTERNAL_ERROR;
+ goto err;
+ }
+
+ user = SRP_VBASE_get1_by_user(vbase, username);
+ if (user == NULL) {
+ *ad = SSL_AD_INTERNAL_ERROR;
+ goto err;
+ }
+
+ if (SSL_set_srp_server_param(s, user->N, user->g, user->s, user->v,
+ user->info) <= 0) {
+ *ad = SSL_AD_INTERNAL_ERROR;
+ goto err;
+ }
+
+ ret = 0;
+
+ err:
+ SRP_user_pwd_free(user);
+ return ret;
+}
+
+static int create_new_vfile(char *userid, char *password, const char *filename)
+{
+ char *gNid = NULL;
+ OPENSSL_STRING *row = OPENSSL_zalloc(sizeof(row) * (DB_NUMBER + 1));
+ TXT_DB *db = NULL;
+ int ret = 0;
+ BIO *out = NULL, *dummy = BIO_new_mem_buf("", 0);
+ size_t i;
+
+ if (!TEST_ptr(dummy) || !TEST_ptr(row))
+ goto end;
+
+ gNid = SRP_create_verifier_ex(userid, password, &row[DB_srpsalt],
+ &row[DB_srpverifier], NULL, NULL, libctx, NULL);
+ if (!TEST_ptr(gNid))
+ goto end;
+
+ /*
+ * The only way to create an empty TXT_DB is to provide a BIO with no data
+ * in it!
+ */
+ db = TXT_DB_read(dummy, DB_NUMBER);
+ if (!TEST_ptr(db))
+ goto end;
+
+ out = BIO_new_file(filename, "w");
+ if (!TEST_ptr(out))
+ goto end;
+
+ row[DB_srpid] = OPENSSL_strdup(userid);
+ row[DB_srptype] = OPENSSL_strdup("V");
+ row[DB_srpgN] = OPENSSL_strdup(gNid);
+
+ if (!TEST_ptr(row[DB_srpid])
+ || !TEST_ptr(row[DB_srptype])
+ || !TEST_ptr(row[DB_srpgN])
+ || !TEST_true(TXT_DB_insert(db, row)))
+ goto end;
+
+ row = NULL;
+
+ if (TXT_DB_write(out, db) <= 0)
+ goto end;
+
+ ret = 1;
+ end:
+ if (row != NULL) {
+ for (i = 0; i < DB_NUMBER; i++)
+ OPENSSL_free(row[i]);
+ }
+ OPENSSL_free(row);
+ BIO_free(dummy);
+ BIO_free(out);
+ TXT_DB_free(db);
+
+ return ret;
+}
+
+static int create_new_vbase(char *userid, char *password)
+{
+ BIGNUM *verifier = NULL, *salt = NULL;
+ const SRP_gN *lgN = NULL;
+ SRP_user_pwd *user_pwd = NULL;
+ int ret = 0;
+
+ lgN = SRP_get_default_gN(NULL);
+ if (!TEST_ptr(lgN))
+ goto end;
+
+ if (!TEST_true(SRP_create_verifier_BN_ex(userid, password, &salt, &verifier,
+ lgN->N, lgN->g, libctx, NULL)))
+ goto end;
+
+ user_pwd = OPENSSL_zalloc(sizeof(*user_pwd));
+ if (!TEST_ptr(user_pwd))
+ goto end;
+
+ user_pwd->N = lgN->N;
+ user_pwd->g = lgN->g;
+ user_pwd->id = OPENSSL_strdup(userid);
+ if (!TEST_ptr(user_pwd->id))
+ goto end;
+
+ user_pwd->v = verifier;
+ user_pwd->s = salt;
+ verifier = salt = NULL;
+
+ if (sk_SRP_user_pwd_insert(vbase->users_pwd, user_pwd, 0) == 0)
+ goto end;
+ user_pwd = NULL;
+
+ ret = 1;
+end:
+ SRP_user_pwd_free(user_pwd);
+ BN_free(salt);
+ BN_free(verifier);
+
+ return ret;
+}
+
+/*
+ * SRP tests
+ *
+ * Test 0: Simple successful SRP connection, new vbase
+ * Test 1: Connection failure due to bad password, new vbase
+ * Test 2: Simple successful SRP connection, vbase loaded from existing file
+ * Test 3: Connection failure due to bad password, vbase loaded from existing
+ * file
+ * Test 4: Simple successful SRP connection, vbase loaded from new file
+ * Test 5: Connection failure due to bad password, vbase loaded from new file
+ */
+static int test_srp(int tst)
+{
+ char *userid = "test", *password = "password", *tstsrpfile;
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int ret, testresult = 0;
+
+ vbase = SRP_VBASE_new(NULL);
+ if (!TEST_ptr(vbase))
+ goto end;
+
+ if (tst == 0 || tst == 1) {
+ if (!TEST_true(create_new_vbase(userid, password)))
+ goto end;
+ } else {
+ if (tst == 4 || tst == 5) {
+ if (!TEST_true(create_new_vfile(userid, password, tmpfilename)))
+ goto end;
+ tstsrpfile = tmpfilename;
+ } else {
+ tstsrpfile = srpvfile;
+ }
+ if (!TEST_int_eq(SRP_VBASE_init(vbase, tstsrpfile), SRP_NO_ERROR))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (!TEST_int_gt(SSL_CTX_set_srp_username_callback(sctx, ssl_srp_cb), 0)
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx, "SRP-AES-128-CBC-SHA"))
+ || !TEST_true(SSL_CTX_set_max_proto_version(sctx, TLS1_2_VERSION))
+ || !TEST_true(SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION))
+ || !TEST_int_gt(SSL_CTX_set_srp_username(cctx, userid), 0))
+ goto end;
+
+ if (tst % 2 == 1) {
+ if (!TEST_int_gt(SSL_CTX_set_srp_password(cctx, "badpass"), 0))
+ goto end;
+ } else {
+ if (!TEST_int_gt(SSL_CTX_set_srp_password(cctx, password), 0))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ ret = create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE);
+ if (ret) {
+ if (!TEST_true(tst % 2 == 0))
+ goto end;
+ } else {
+ if (!TEST_true(tst % 2 == 1))
+ goto end;
+ }
+
+ testresult = 1;
+
+ end:
+ SRP_VBASE_free(vbase);
+ vbase = NULL;
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif
+
+static int info_cb_failed = 0;
+static int info_cb_offset = 0;
+static int info_cb_this_state = -1;
+
+static struct info_cb_states_st {
+ int where;
+ const char *statestr;
+} info_cb_states[][60] = {
+ {
+ /* TLSv1.2 server followed by resumption */
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"},
+ {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"},
+ {SSL_CB_LOOP, "TWSC"}, {SSL_CB_LOOP, "TWSKE"}, {SSL_CB_LOOP, "TWSD"},
+ {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWSD"}, {SSL_CB_LOOP, "TRCKE"},
+ {SSL_CB_LOOP, "TRCCS"}, {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TWST"},
+ {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"},
+ {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL},
+ {SSL_CB_ALERT, NULL}, {SSL_CB_HANDSHAKE_START, NULL},
+ {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"},
+ {SSL_CB_LOOP, "TWSH"}, {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"},
+ {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_LOOP, "TRCCS"},
+ {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL},
+ {SSL_CB_EXIT, NULL}, {0, NULL},
+ }, {
+ /* TLSv1.2 client followed by resumption */
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"},
+ {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWCH"},
+ {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TRSC"}, {SSL_CB_LOOP, "TRSKE"},
+ {SSL_CB_LOOP, "TRSD"}, {SSL_CB_LOOP, "TWCKE"}, {SSL_CB_LOOP, "TWCCS"},
+ {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWFIN"},
+ {SSL_CB_LOOP, "TRST"}, {SSL_CB_LOOP, "TRCCS"}, {SSL_CB_LOOP, "TRFIN"},
+ {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, {SSL_CB_ALERT, NULL},
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"},
+ {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWCH"},
+ {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TRCCS"}, {SSL_CB_LOOP, "TRFIN"},
+ {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"},
+ {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, {0, NULL},
+ }, {
+ /* TLSv1.3 server followed by resumption */
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"},
+ {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"},
+ {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWEE"}, {SSL_CB_LOOP, "TWSC"},
+ {SSL_CB_LOOP, "TWSCV"}, {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_LOOP, "TED"},
+ {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TED"}, {SSL_CB_LOOP, "TRFIN"},
+ {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_LOOP, "TWST"},
+ {SSL_CB_LOOP, "TWST"}, {SSL_CB_EXIT, NULL}, {SSL_CB_ALERT, NULL},
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"},
+ {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"},
+ {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWEE"}, {SSL_CB_LOOP, "TWFIN"},
+ {SSL_CB_LOOP, "TED"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TED"},
+ {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL},
+ {SSL_CB_LOOP, "TWST"}, {SSL_CB_EXIT, NULL}, {0, NULL},
+ }, {
+ /* TLSv1.3 client followed by resumption */
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"},
+ {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWCH"},
+ {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TREE"}, {SSL_CB_LOOP, "TRSC"},
+ {SSL_CB_LOOP, "TRSCV"}, {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TWCCS"},
+ {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL},
+ {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "SSLOK"},
+ {SSL_CB_LOOP, "TRST"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "SSLOK"},
+ {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "TRST"}, {SSL_CB_EXIT, NULL},
+ {SSL_CB_ALERT, NULL}, {SSL_CB_HANDSHAKE_START, NULL},
+ {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL},
+ {SSL_CB_LOOP, "TWCH"}, {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TREE"},
+ {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"},
+ {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL},
+ {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "TRST"},
+ {SSL_CB_EXIT, NULL}, {0, NULL},
+ }, {
+ /* TLSv1.3 server, early_data */
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"},
+ {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"},
+ {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWEE"}, {SSL_CB_LOOP, "TWFIN"},
+ {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL},
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "TED"},
+ {SSL_CB_LOOP, "TED"}, {SSL_CB_LOOP, "TWEOED"}, {SSL_CB_LOOP, "TRFIN"},
+ {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_LOOP, "TWST"},
+ {SSL_CB_EXIT, NULL}, {0, NULL},
+ }, {
+ /* TLSv1.3 client, early_data */
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"},
+ {SSL_CB_LOOP, "TWCH"}, {SSL_CB_LOOP, "TWCCS"},
+ {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL},
+ {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "TED"},
+ {SSL_CB_LOOP, "TED"}, {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TREE"},
+ {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TPEDE"}, {SSL_CB_LOOP, "TWEOED"},
+ {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL},
+ {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "SSLOK"},
+ {SSL_CB_LOOP, "TRST"}, {SSL_CB_EXIT, NULL}, {0, NULL},
+ }, {
+ {0, NULL},
+ }
+};
+
+static void sslapi_info_callback(const SSL *s, int where, int ret)
+{
+ struct info_cb_states_st *state = info_cb_states[info_cb_offset];
+
+ /* We do not ever expect a connection to fail in this test */
+ if (!TEST_false(ret == 0)) {
+ info_cb_failed = 1;
+ return;
+ }
+
+ /*
+ * Do some sanity checks. We never expect these things to happen in this
+ * test
+ */
+ if (!TEST_false((SSL_is_server(s) && (where & SSL_ST_CONNECT) != 0))
+ || !TEST_false(!SSL_is_server(s) && (where & SSL_ST_ACCEPT) != 0)
+ || !TEST_int_ne(state[++info_cb_this_state].where, 0)) {
+ info_cb_failed = 1;
+ return;
+ }
+
+ /* Now check we're in the right state */
+ if (!TEST_true((where & state[info_cb_this_state].where) != 0)) {
+ info_cb_failed = 1;
+ return;
+ }
+ if ((where & SSL_CB_LOOP) != 0
+ && !TEST_int_eq(strcmp(SSL_state_string(s),
+ state[info_cb_this_state].statestr), 0)) {
+ info_cb_failed = 1;
+ return;
+ }
+
+ /*
+ * Check that, if we've got SSL_CB_HANDSHAKE_DONE we are not in init
+ */
+ if ((where & SSL_CB_HANDSHAKE_DONE)
+ && SSL_in_init((SSL *)s) != 0) {
+ info_cb_failed = 1;
+ return;
+ }
+}
+
+/*
+ * Test the info callback gets called when we expect it to.
+ *
+ * Test 0: TLSv1.2, server
+ * Test 1: TLSv1.2, client
+ * Test 2: TLSv1.3, server
+ * Test 3: TLSv1.3, client
+ * Test 4: TLSv1.3, server, early_data
+ * Test 5: TLSv1.3, client, early_data
+ */
+static int test_info_callback(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ SSL_SESSION *clntsess = NULL;
+ int testresult = 0;
+ int tlsvers;
+
+ if (tst < 2) {
+/* We need either ECDHE or DHE for the TLSv1.2 test to work */
+#if !defined(OPENSSL_NO_TLS1_2) && (!defined(OPENSSL_NO_EC) \
+ || !defined(OPENSSL_NO_DH))
+ tlsvers = TLS1_2_VERSION;
+#else
+ return 1;
+#endif
+ } else {
+#ifndef OSSL_NO_USABLE_TLS1_3
+ tlsvers = TLS1_3_VERSION;
+#else
+ return 1;
+#endif
+ }
+
+ /* Reset globals */
+ info_cb_failed = 0;
+ info_cb_this_state = -1;
+ info_cb_offset = tst;
+
+#ifndef OSSL_NO_USABLE_TLS1_3
+ if (tst >= 4) {
+ SSL_SESSION *sess = NULL;
+ size_t written, readbytes;
+ unsigned char buf[80];
+
+ /* early_data tests */
+ if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
+ &serverssl, &sess, 0,
+ SHA384_DIGEST_LENGTH)))
+ goto end;
+
+ /* We don't actually need this reference */
+ SSL_SESSION_free(sess);
+
+ SSL_set_info_callback((tst % 2) == 0 ? serverssl : clientssl,
+ sslapi_info_callback);
+
+ /* Write and read some early data and then complete the connection */
+ if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
+ &written))
+ || !TEST_size_t_eq(written, strlen(MSG1))
+ || !TEST_int_eq(SSL_read_early_data(serverssl, buf,
+ sizeof(buf), &readbytes),
+ SSL_READ_EARLY_DATA_SUCCESS)
+ || !TEST_mem_eq(MSG1, readbytes, buf, strlen(MSG1))
+ || !TEST_int_eq(SSL_get_early_data_status(serverssl),
+ SSL_EARLY_DATA_ACCEPTED)
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_false(info_cb_failed))
+ goto end;
+
+ testresult = 1;
+ goto end;
+ }
+#endif
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ tlsvers, tlsvers, &sctx, &cctx, cert,
+ privkey)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_set_dh_auto(sctx, 1)))
+ goto end;
+
+ /*
+ * For even numbered tests we check the server callbacks. For odd numbers we
+ * check the client.
+ */
+ SSL_CTX_set_info_callback((tst % 2) == 0 ? sctx : cctx,
+ sslapi_info_callback);
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_false(info_cb_failed))
+ goto end;
+
+
+
+ clntsess = SSL_get1_session(clientssl);
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ /* Now do a resumption */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL,
+ NULL))
+ || !TEST_true(SSL_set_session(clientssl, clntsess))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_true(SSL_session_reused(clientssl))
+ || !TEST_false(info_cb_failed))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_SESSION_free(clntsess);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+static int test_ssl_pending(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ char msg[] = "A test message";
+ char buf[5];
+ size_t written, readbytes;
+
+ if (tst == 0) {
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+ } else {
+#ifndef OPENSSL_NO_DTLS
+ if (!TEST_true(create_ssl_ctx_pair(libctx, DTLS_server_method(),
+ DTLS_client_method(),
+ DTLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+# ifdef OPENSSL_NO_DTLS1_2
+ /* Not supported in the FIPS provider */
+ if (is_fips) {
+ testresult = 1;
+ goto end;
+ };
+ /*
+ * Default sigalgs are SHA1 based in <DTLS1.2 which is in security
+ * level 0
+ */
+ if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0"))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "DEFAULT:@SECLEVEL=0")))
+ goto end;
+# endif
+#else
+ return 1;
+#endif
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ if (!TEST_int_eq(SSL_pending(clientssl), 0)
+ || !TEST_false(SSL_has_pending(clientssl))
+ || !TEST_int_eq(SSL_pending(serverssl), 0)
+ || !TEST_false(SSL_has_pending(serverssl))
+ || !TEST_true(SSL_write_ex(serverssl, msg, sizeof(msg), &written))
+ || !TEST_size_t_eq(written, sizeof(msg))
+ || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
+ || !TEST_size_t_eq(readbytes, sizeof(buf))
+ || !TEST_int_eq(SSL_pending(clientssl), (int)(written - readbytes))
+ || !TEST_true(SSL_has_pending(clientssl)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+static struct {
+ unsigned int maxprot;
+ const char *clntciphers;
+ const char *clnttls13ciphers;
+ const char *srvrciphers;
+ const char *srvrtls13ciphers;
+ const char *shared;
+ const char *fipsshared;
+} shared_ciphers_data[] = {
+/*
+ * We can't establish a connection (even in TLSv1.1) with these ciphersuites if
+ * TLSv1.3 is enabled but TLSv1.2 is disabled.
+ */
+#if defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2)
+ {
+ TLS1_2_VERSION,
+ "AES128-SHA:AES256-SHA",
+ NULL,
+ "AES256-SHA:DHE-RSA-AES128-SHA",
+ NULL,
+ "AES256-SHA",
+ "AES256-SHA"
+ },
+# if !defined(OPENSSL_NO_CHACHA) \
+ && !defined(OPENSSL_NO_POLY1305) \
+ && !defined(OPENSSL_NO_EC)
+ {
+ TLS1_2_VERSION,
+ "AES128-SHA:ECDHE-RSA-CHACHA20-POLY1305",
+ NULL,
+ "AES128-SHA:ECDHE-RSA-CHACHA20-POLY1305",
+ NULL,
+ "AES128-SHA:ECDHE-RSA-CHACHA20-POLY1305",
+ "AES128-SHA"
+ },
+# endif
+ {
+ TLS1_2_VERSION,
+ "AES128-SHA:DHE-RSA-AES128-SHA:AES256-SHA",
+ NULL,
+ "AES128-SHA:DHE-RSA-AES256-SHA:AES256-SHA",
+ NULL,
+ "AES128-SHA:AES256-SHA",
+ "AES128-SHA:AES256-SHA"
+ },
+ {
+ TLS1_2_VERSION,
+ "AES128-SHA:AES256-SHA",
+ NULL,
+ "AES128-SHA:DHE-RSA-AES128-SHA",
+ NULL,
+ "AES128-SHA",
+ "AES128-SHA"
+ },
+#endif
+/*
+ * This test combines TLSv1.3 and TLSv1.2 ciphersuites so they must both be
+ * enabled.
+ */
+#if !defined(OSSL_NO_USABLE_TLS1_3) && !defined(OPENSSL_NO_TLS1_2) \
+ && !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
+ {
+ TLS1_3_VERSION,
+ "AES128-SHA:AES256-SHA",
+ NULL,
+ "AES256-SHA:AES128-SHA256",
+ NULL,
+ "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:"
+ "TLS_AES_128_GCM_SHA256:AES256-SHA",
+ "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:AES256-SHA"
+ },
+#endif
+#ifndef OSSL_NO_USABLE_TLS1_3
+ {
+ TLS1_3_VERSION,
+ "AES128-SHA",
+ "TLS_AES_256_GCM_SHA384",
+ "AES256-SHA",
+ "TLS_AES_256_GCM_SHA384",
+ "TLS_AES_256_GCM_SHA384",
+ "TLS_AES_256_GCM_SHA384"
+ },
+#endif
+};
+
+static int int_test_ssl_get_shared_ciphers(int tst, int clnt)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ char buf[1024];
+ OSSL_LIB_CTX *tmplibctx = OSSL_LIB_CTX_new();
+
+ if (!TEST_ptr(tmplibctx))
+ goto end;
+
+ /*
+ * Regardless of whether we're testing with the FIPS provider loaded into
+ * libctx, we want one peer to always use the full set of ciphersuites
+ * available. Therefore we use a separate libctx with the default provider
+ * loaded into it. We run the same tests twice - once with the client side
+ * having the full set of ciphersuites and once with the server side.
+ */
+ if (clnt) {
+ cctx = SSL_CTX_new_ex(tmplibctx, NULL, TLS_client_method());
+ if (!TEST_ptr(cctx))
+ goto end;
+ } else {
+ sctx = SSL_CTX_new_ex(tmplibctx, NULL, TLS_server_method());
+ if (!TEST_ptr(sctx))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION,
+ shared_ciphers_data[tst].maxprot,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx,
+ shared_ciphers_data[tst].clntciphers))
+ || (shared_ciphers_data[tst].clnttls13ciphers != NULL
+ && !TEST_true(SSL_CTX_set_ciphersuites(cctx,
+ shared_ciphers_data[tst].clnttls13ciphers)))
+ || !TEST_true(SSL_CTX_set_cipher_list(sctx,
+ shared_ciphers_data[tst].srvrciphers))
+ || (shared_ciphers_data[tst].srvrtls13ciphers != NULL
+ && !TEST_true(SSL_CTX_set_ciphersuites(sctx,
+ shared_ciphers_data[tst].srvrtls13ciphers))))
+ goto end;
+
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ if (!TEST_ptr(SSL_get_shared_ciphers(serverssl, buf, sizeof(buf)))
+ || !TEST_int_eq(strcmp(buf,
+ is_fips
+ ? shared_ciphers_data[tst].fipsshared
+ : shared_ciphers_data[tst].shared),
+ 0)) {
+ TEST_info("Shared ciphers are: %s\n", buf);
+ goto end;
+ }
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ OSSL_LIB_CTX_free(tmplibctx);
+
+ return testresult;
+}
+
+static int test_ssl_get_shared_ciphers(int tst)
+{
+ return int_test_ssl_get_shared_ciphers(tst, 0)
+ && int_test_ssl_get_shared_ciphers(tst, 1);
+}
+
+
+static const char *appdata = "Hello World";
+static int gen_tick_called, dec_tick_called, tick_key_cb_called;
+static int tick_key_renew = 0;
+static SSL_TICKET_RETURN tick_dec_ret = SSL_TICKET_RETURN_ABORT;
+
+static int gen_tick_cb(SSL *s, void *arg)
+{
+ gen_tick_called = 1;
+
+ return SSL_SESSION_set1_ticket_appdata(SSL_get_session(s), appdata,
+ strlen(appdata));
+}
+
+static SSL_TICKET_RETURN dec_tick_cb(SSL *s, SSL_SESSION *ss,
+ const unsigned char *keyname,
+ size_t keyname_length,
+ SSL_TICKET_STATUS status,
+ void *arg)
+{
+ void *tickdata;
+ size_t tickdlen;
+
+ dec_tick_called = 1;
+
+ if (status == SSL_TICKET_EMPTY)
+ return SSL_TICKET_RETURN_IGNORE_RENEW;
+
+ if (!TEST_true(status == SSL_TICKET_SUCCESS
+ || status == SSL_TICKET_SUCCESS_RENEW))
+ return SSL_TICKET_RETURN_ABORT;
+
+ if (!TEST_true(SSL_SESSION_get0_ticket_appdata(ss, &tickdata,
+ &tickdlen))
+ || !TEST_size_t_eq(tickdlen, strlen(appdata))
+ || !TEST_int_eq(memcmp(tickdata, appdata, tickdlen), 0))
+ return SSL_TICKET_RETURN_ABORT;
+
+ if (tick_key_cb_called) {
+ /* Don't change what the ticket key callback wanted to do */
+ switch (status) {
+ case SSL_TICKET_NO_DECRYPT:
+ return SSL_TICKET_RETURN_IGNORE_RENEW;
+
+ case SSL_TICKET_SUCCESS:
+ return SSL_TICKET_RETURN_USE;
+
+ case SSL_TICKET_SUCCESS_RENEW:
+ return SSL_TICKET_RETURN_USE_RENEW;
+
+ default:
+ return SSL_TICKET_RETURN_ABORT;
+ }
+ }
+ return tick_dec_ret;
+
+}
+
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+static int tick_key_cb(SSL *s, unsigned char key_name[16],
+ unsigned char iv[EVP_MAX_IV_LENGTH], EVP_CIPHER_CTX *ctx,
+ HMAC_CTX *hctx, int enc)
+{
+ const unsigned char tick_aes_key[16] = "0123456789abcdef";
+ const unsigned char tick_hmac_key[16] = "0123456789abcdef";
+ EVP_CIPHER *aes128cbc;
+ EVP_MD *sha256;
+ int ret;
+
+ tick_key_cb_called = 1;
+
+ if (tick_key_renew == -1)
+ return 0;
+
+ aes128cbc = EVP_CIPHER_fetch(libctx, "AES-128-CBC", NULL);
+ if (!TEST_ptr(aes128cbc))
+ return 0;
+ sha256 = EVP_MD_fetch(libctx, "SHA-256", NULL);
+ if (!TEST_ptr(sha256)) {
+ EVP_CIPHER_free(aes128cbc);
+ return 0;
+ }
+
+ memset(iv, 0, AES_BLOCK_SIZE);
+ memset(key_name, 0, 16);
+ if (aes128cbc == NULL
+ || sha256 == NULL
+ || !EVP_CipherInit_ex(ctx, aes128cbc, NULL, tick_aes_key, iv, enc)
+ || !HMAC_Init_ex(hctx, tick_hmac_key, sizeof(tick_hmac_key), sha256,
+ NULL))
+ ret = -1;
+ else
+ ret = tick_key_renew ? 2 : 1;
+
+ EVP_CIPHER_free(aes128cbc);
+ EVP_MD_free(sha256);
+
+ return ret;
+}
+#endif
+
+static int tick_key_evp_cb(SSL *s, unsigned char key_name[16],
+ unsigned char iv[EVP_MAX_IV_LENGTH],
+ EVP_CIPHER_CTX *ctx, EVP_MAC_CTX *hctx, int enc)
+{
+ const unsigned char tick_aes_key[16] = "0123456789abcdef";
+ unsigned char tick_hmac_key[16] = "0123456789abcdef";
+ OSSL_PARAM params[2];
+ EVP_CIPHER *aes128cbc;
+ int ret;
+
+ tick_key_cb_called = 1;
+
+ if (tick_key_renew == -1)
+ return 0;
+
+ aes128cbc = EVP_CIPHER_fetch(libctx, "AES-128-CBC", NULL);
+ if (!TEST_ptr(aes128cbc))
+ return 0;
+
+ memset(iv, 0, AES_BLOCK_SIZE);
+ memset(key_name, 0, 16);
+ params[0] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST,
+ "SHA256", 0);
+ params[1] = OSSL_PARAM_construct_end();
+ if (aes128cbc == NULL
+ || !EVP_CipherInit_ex(ctx, aes128cbc, NULL, tick_aes_key, iv, enc)
+ || !EVP_MAC_init(hctx, tick_hmac_key, sizeof(tick_hmac_key),
+ params))
+ ret = -1;
+ else
+ ret = tick_key_renew ? 2 : 1;
+
+ EVP_CIPHER_free(aes128cbc);
+
+ return ret;
+}
+
+/*
+ * Test the various ticket callbacks
+ * Test 0: TLSv1.2, no ticket key callback, no ticket, no renewal
+ * Test 1: TLSv1.3, no ticket key callback, no ticket, no renewal
+ * Test 2: TLSv1.2, no ticket key callback, no ticket, renewal
+ * Test 3: TLSv1.3, no ticket key callback, no ticket, renewal
+ * Test 4: TLSv1.2, no ticket key callback, ticket, no renewal
+ * Test 5: TLSv1.3, no ticket key callback, ticket, no renewal
+ * Test 6: TLSv1.2, no ticket key callback, ticket, renewal
+ * Test 7: TLSv1.3, no ticket key callback, ticket, renewal
+ * Test 8: TLSv1.2, old ticket key callback, ticket, no renewal
+ * Test 9: TLSv1.3, old ticket key callback, ticket, no renewal
+ * Test 10: TLSv1.2, old ticket key callback, ticket, renewal
+ * Test 11: TLSv1.3, old ticket key callback, ticket, renewal
+ * Test 12: TLSv1.2, old ticket key callback, no ticket
+ * Test 13: TLSv1.3, old ticket key callback, no ticket
+ * Test 14: TLSv1.2, ticket key callback, ticket, no renewal
+ * Test 15: TLSv1.3, ticket key callback, ticket, no renewal
+ * Test 16: TLSv1.2, ticket key callback, ticket, renewal
+ * Test 17: TLSv1.3, ticket key callback, ticket, renewal
+ * Test 18: TLSv1.2, ticket key callback, no ticket
+ * Test 19: TLSv1.3, ticket key callback, no ticket
+ */
+static int test_ticket_callbacks(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ SSL_SESSION *clntsess = NULL;
+ int testresult = 0;
+
+#ifdef OPENSSL_NO_TLS1_2
+ if (tst % 2 == 0)
+ return 1;
+#endif
+#ifdef OSSL_NO_USABLE_TLS1_3
+ if (tst % 2 == 1)
+ return 1;
+#endif
+#ifdef OPENSSL_NO_DEPRECATED_3_0
+ if (tst >= 8 && tst <= 13)
+ return 1;
+#endif
+
+ gen_tick_called = dec_tick_called = tick_key_cb_called = 0;
+
+ /* Which tests the ticket key callback should request renewal for */
+
+ if (tst == 10 || tst == 11 || tst == 16 || tst == 17)
+ tick_key_renew = 1;
+ else if (tst == 12 || tst == 13 || tst == 18 || tst == 19)
+ tick_key_renew = -1; /* abort sending the ticket/0-length ticket */
+ else
+ tick_key_renew = 0;
+
+ /* Which tests the decrypt ticket callback should request renewal for */
+ switch (tst) {
+ case 0:
+ case 1:
+ tick_dec_ret = SSL_TICKET_RETURN_IGNORE;
+ break;
+
+ case 2:
+ case 3:
+ tick_dec_ret = SSL_TICKET_RETURN_IGNORE_RENEW;
+ break;
+
+ case 4:
+ case 5:
+ tick_dec_ret = SSL_TICKET_RETURN_USE;
+ break;
+
+ case 6:
+ case 7:
+ tick_dec_ret = SSL_TICKET_RETURN_USE_RENEW;
+ break;
+
+ default:
+ tick_dec_ret = SSL_TICKET_RETURN_ABORT;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION,
+ ((tst % 2) == 0) ? TLS1_2_VERSION
+ : TLS1_3_VERSION,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ /*
+ * We only want sessions to resume from tickets - not the session cache. So
+ * switch the cache off.
+ */
+ if (!TEST_true(SSL_CTX_set_session_cache_mode(sctx, SSL_SESS_CACHE_OFF)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_set_session_ticket_cb(sctx, gen_tick_cb, dec_tick_cb,
+ NULL)))
+ goto end;
+
+ if (tst >= 14) {
+ if (!TEST_true(SSL_CTX_set_tlsext_ticket_key_evp_cb(sctx, tick_key_evp_cb)))
+ goto end;
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ } else if (tst >= 8) {
+ if (!TEST_true(SSL_CTX_set_tlsext_ticket_key_cb(sctx, tick_key_cb)))
+ goto end;
+#endif
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ /*
+ * The decrypt ticket key callback in TLSv1.2 should be called even though
+ * we have no ticket yet, because it gets called with a status of
+ * SSL_TICKET_EMPTY (the client indicates support for tickets but does not
+ * actually send any ticket data). This does not happen in TLSv1.3 because
+ * it is not valid to send empty ticket data in TLSv1.3.
+ */
+ if (!TEST_int_eq(gen_tick_called, 1)
+ || !TEST_int_eq(dec_tick_called, ((tst % 2) == 0) ? 1 : 0))
+ goto end;
+
+ gen_tick_called = dec_tick_called = 0;
+
+ clntsess = SSL_get1_session(clientssl);
+ SSL_shutdown(clientssl);
+ SSL_shutdown(serverssl);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ serverssl = clientssl = NULL;
+
+ /* Now do a resumption */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL,
+ NULL))
+ || !TEST_true(SSL_set_session(clientssl, clntsess))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ if (tick_dec_ret == SSL_TICKET_RETURN_IGNORE
+ || tick_dec_ret == SSL_TICKET_RETURN_IGNORE_RENEW
+ || tick_key_renew == -1) {
+ if (!TEST_false(SSL_session_reused(clientssl)))
+ goto end;
+ } else {
+ if (!TEST_true(SSL_session_reused(clientssl)))
+ goto end;
+ }
+
+ if (!TEST_int_eq(gen_tick_called,
+ (tick_key_renew
+ || tick_dec_ret == SSL_TICKET_RETURN_IGNORE_RENEW
+ || tick_dec_ret == SSL_TICKET_RETURN_USE_RENEW)
+ ? 1 : 0)
+ /* There is no ticket to decrypt in tests 13 and 19 */
+ || !TEST_int_eq(dec_tick_called, (tst == 13 || tst == 19) ? 0 : 1))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(clntsess);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+/*
+ * Test incorrect shutdown.
+ * Test 0: client does not shutdown properly,
+ * server does not set SSL_OP_IGNORE_UNEXPECTED_EOF,
+ * server should get SSL_ERROR_SSL
+ * Test 1: client does not shutdown properly,
+ * server sets SSL_OP_IGNORE_UNEXPECTED_EOF,
+ * server should get SSL_ERROR_ZERO_RETURN
+ */
+static int test_incorrect_shutdown(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ char buf[80];
+ BIO *c2s;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), 0, 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (tst == 1)
+ SSL_CTX_set_options(sctx, SSL_OP_IGNORE_UNEXPECTED_EOF);
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ c2s = SSL_get_rbio(serverssl);
+ BIO_set_mem_eof_return(c2s, 0);
+
+ if (!TEST_false(SSL_read(serverssl, buf, sizeof(buf))))
+ goto end;
+
+ if (tst == 0 && !TEST_int_eq(SSL_get_error(serverssl, 0), SSL_ERROR_SSL) )
+ goto end;
+ if (tst == 1 && !TEST_int_eq(SSL_get_error(serverssl, 0), SSL_ERROR_ZERO_RETURN) )
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+/*
+ * Test bi-directional shutdown.
+ * Test 0: TLSv1.2
+ * Test 1: TLSv1.2, server continues to read/write after client shutdown
+ * Test 2: TLSv1.3, no pending NewSessionTicket messages
+ * Test 3: TLSv1.3, pending NewSessionTicket messages
+ * Test 4: TLSv1.3, server continues to read/write after client shutdown, server
+ * sends key update, client reads it
+ * Test 5: TLSv1.3, server continues to read/write after client shutdown, server
+ * sends CertificateRequest, client reads and ignores it
+ * Test 6: TLSv1.3, server continues to read/write after client shutdown, client
+ * doesn't read it
+ */
+static int test_shutdown(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ char msg[] = "A test message";
+ char buf[80];
+ size_t written, readbytes;
+ SSL_SESSION *sess;
+
+#ifdef OPENSSL_NO_TLS1_2
+ if (tst <= 1)
+ return 1;
+#endif
+#ifdef OSSL_NO_USABLE_TLS1_3
+ if (tst >= 2)
+ return 1;
+#endif
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION,
+ (tst <= 1) ? TLS1_2_VERSION
+ : TLS1_3_VERSION,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (tst == 5)
+ SSL_CTX_set_post_handshake_auth(cctx, 1);
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (tst == 3) {
+ if (!TEST_true(create_bare_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE, 1))
+ || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL)
+ || !TEST_false(SSL_SESSION_is_resumable(sess)))
+ goto end;
+ } else if (!TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE))
+ || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL)
+ || !TEST_true(SSL_SESSION_is_resumable(sess))) {
+ goto end;
+ }
+
+ if (!TEST_int_eq(SSL_shutdown(clientssl), 0))
+ goto end;
+
+ if (tst >= 4) {
+ /*
+ * Reading on the server after the client has sent close_notify should
+ * fail and provide SSL_ERROR_ZERO_RETURN
+ */
+ if (!TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
+ || !TEST_int_eq(SSL_get_error(serverssl, 0),
+ SSL_ERROR_ZERO_RETURN)
+ || !TEST_int_eq(SSL_get_shutdown(serverssl),
+ SSL_RECEIVED_SHUTDOWN)
+ /*
+ * Even though we're shutdown on receive we should still be
+ * able to write.
+ */
+ || !TEST_true(SSL_write(serverssl, msg, sizeof(msg))))
+ goto end;
+ if (tst == 4
+ && !TEST_true(SSL_key_update(serverssl,
+ SSL_KEY_UPDATE_REQUESTED)))
+ goto end;
+ if (tst == 5) {
+ SSL_set_verify(serverssl, SSL_VERIFY_PEER, NULL);
+ if (!TEST_true(SSL_verify_client_post_handshake(serverssl)))
+ goto end;
+ }
+ if ((tst == 4 || tst == 5)
+ && !TEST_true(SSL_write(serverssl, msg, sizeof(msg))))
+ goto end;
+ if (!TEST_int_eq(SSL_shutdown(serverssl), 1))
+ goto end;
+ if (tst == 4 || tst == 5) {
+ /* Should still be able to read data from server */
+ if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf),
+ &readbytes))
+ || !TEST_size_t_eq(readbytes, sizeof(msg))
+ || !TEST_int_eq(memcmp(msg, buf, readbytes), 0)
+ || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf),
+ &readbytes))
+ || !TEST_size_t_eq(readbytes, sizeof(msg))
+ || !TEST_int_eq(memcmp(msg, buf, readbytes), 0))
+ goto end;
+ }
+ }
+
+ /* Writing on the client after sending close_notify shouldn't be possible */
+ if (!TEST_false(SSL_write_ex(clientssl, msg, sizeof(msg), &written)))
+ goto end;
+
+ if (tst < 4) {
+ /*
+ * For these tests the client has sent close_notify but it has not yet
+ * been received by the server. The server has not sent close_notify
+ * yet.
+ */
+ if (!TEST_int_eq(SSL_shutdown(serverssl), 0)
+ /*
+ * Writing on the server after sending close_notify shouldn't
+ * be possible.
+ */
+ || !TEST_false(SSL_write_ex(serverssl, msg, sizeof(msg), &written))
+ || !TEST_int_eq(SSL_shutdown(clientssl), 1)
+ || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL)
+ || !TEST_true(SSL_SESSION_is_resumable(sess))
+ || !TEST_int_eq(SSL_shutdown(serverssl), 1))
+ goto end;
+ } else if (tst == 4 || tst == 5) {
+ /*
+ * In this test the client has sent close_notify and it has been
+ * received by the server which has responded with a close_notify. The
+ * client needs to read the close_notify sent by the server.
+ */
+ if (!TEST_int_eq(SSL_shutdown(clientssl), 1)
+ || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL)
+ || !TEST_true(SSL_SESSION_is_resumable(sess)))
+ goto end;
+ } else {
+ /*
+ * tst == 6
+ *
+ * The client has sent close_notify and is expecting a close_notify
+ * back, but instead there is application data first. The shutdown
+ * should fail with a fatal error.
+ */
+ if (!TEST_int_eq(SSL_shutdown(clientssl), -1)
+ || !TEST_int_eq(SSL_get_error(clientssl, -1), SSL_ERROR_SSL))
+ goto end;
+ }
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+#if !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3)
+static int cert_cb_cnt;
+
+static int cert_cb(SSL *s, void *arg)
+{
+ SSL_CTX *ctx = (SSL_CTX *)arg;
+ BIO *in = NULL;
+ EVP_PKEY *pkey = NULL;
+ X509 *x509 = NULL, *rootx = NULL;
+ STACK_OF(X509) *chain = NULL;
+ char *rootfile = NULL, *ecdsacert = NULL, *ecdsakey = NULL;
+ int ret = 0;
+
+ if (cert_cb_cnt == 0) {
+ /* Suspend the handshake */
+ cert_cb_cnt++;
+ return -1;
+ } else if (cert_cb_cnt == 1) {
+ /*
+ * Update the SSL_CTX, set the certificate and private key and then
+ * continue the handshake normally.
+ */
+ if (ctx != NULL && !TEST_ptr(SSL_set_SSL_CTX(s, ctx)))
+ return 0;
+
+ if (!TEST_true(SSL_use_certificate_file(s, cert, SSL_FILETYPE_PEM))
+ || !TEST_true(SSL_use_PrivateKey_file(s, privkey,
+ SSL_FILETYPE_PEM))
+ || !TEST_true(SSL_check_private_key(s)))
+ return 0;
+ cert_cb_cnt++;
+ return 1;
+ } else if (cert_cb_cnt == 3) {
+ int rv;
+
+ rootfile = test_mk_file_path(certsdir, "rootcert.pem");
+ ecdsacert = test_mk_file_path(certsdir, "server-ecdsa-cert.pem");
+ ecdsakey = test_mk_file_path(certsdir, "server-ecdsa-key.pem");
+ if (!TEST_ptr(rootfile) || !TEST_ptr(ecdsacert) || !TEST_ptr(ecdsakey))
+ goto out;
+ chain = sk_X509_new_null();
+ if (!TEST_ptr(chain))
+ goto out;
+ if (!TEST_ptr(in = BIO_new(BIO_s_file()))
+ || !TEST_int_gt(BIO_read_filename(in, rootfile), 0)
+ || !TEST_ptr(rootx = X509_new_ex(libctx, NULL))
+ || !TEST_ptr(PEM_read_bio_X509(in, &rootx, NULL, NULL))
+ || !TEST_true(sk_X509_push(chain, rootx)))
+ goto out;
+ rootx = NULL;
+ BIO_free(in);
+ if (!TEST_ptr(in = BIO_new(BIO_s_file()))
+ || !TEST_int_gt(BIO_read_filename(in, ecdsacert), 0)
+ || !TEST_ptr(x509 = X509_new_ex(libctx, NULL))
+ || !TEST_ptr(PEM_read_bio_X509(in, &x509, NULL, NULL)))
+ goto out;
+ BIO_free(in);
+ if (!TEST_ptr(in = BIO_new(BIO_s_file()))
+ || !TEST_int_gt(BIO_read_filename(in, ecdsakey), 0)
+ || !TEST_ptr(pkey = PEM_read_bio_PrivateKey_ex(in, NULL,
+ NULL, NULL,
+ libctx, NULL)))
+ goto out;
+ rv = SSL_check_chain(s, x509, pkey, chain);
+ /*
+ * If the cert doesn't show as valid here (e.g., because we don't
+ * have any shared sigalgs), then we will not set it, and there will
+ * be no certificate at all on the SSL or SSL_CTX. This, in turn,
+ * will cause tls_choose_sigalgs() to fail the connection.
+ */
+ if ((rv & (CERT_PKEY_VALID | CERT_PKEY_CA_SIGNATURE))
+ == (CERT_PKEY_VALID | CERT_PKEY_CA_SIGNATURE)) {
+ if (!SSL_use_cert_and_key(s, x509, pkey, NULL, 1))
+ goto out;
+ }
+
+ ret = 1;
+ }
+
+ /* Abort the handshake */
+ out:
+ OPENSSL_free(ecdsacert);
+ OPENSSL_free(ecdsakey);
+ OPENSSL_free(rootfile);
+ BIO_free(in);
+ EVP_PKEY_free(pkey);
+ X509_free(x509);
+ X509_free(rootx);
+ sk_X509_pop_free(chain, X509_free);
+ return ret;
+}
+
+/*
+ * Test the certificate callback.
+ * Test 0: Callback fails
+ * Test 1: Success - no SSL_set_SSL_CTX() in the callback
+ * Test 2: Success - SSL_set_SSL_CTX() in the callback
+ * Test 3: Success - Call SSL_check_chain from the callback
+ * Test 4: Failure - SSL_check_chain fails from callback due to bad cert in the
+ * chain
+ * Test 5: Failure - SSL_check_chain fails from callback due to bad ee cert
+ */
+static int test_cert_cb_int(int prot, int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL, *snictx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0, ret;
+
+#ifdef OPENSSL_NO_EC
+ /* We use an EC cert in these tests, so we skip in a no-ec build */
+ if (tst >= 3)
+ return 1;
+#endif
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION,
+ prot,
+ &sctx, &cctx, NULL, NULL)))
+ goto end;
+
+ if (tst == 0)
+ cert_cb_cnt = -1;
+ else if (tst >= 3)
+ cert_cb_cnt = 3;
+ else
+ cert_cb_cnt = 0;
+
+ if (tst == 2) {
+ snictx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method());
+ if (!TEST_ptr(snictx))
+ goto end;
+ }
+
+ SSL_CTX_set_cert_cb(sctx, cert_cb, snictx);
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (tst == 4) {
+ /*
+ * We cause SSL_check_chain() to fail by specifying sig_algs that
+ * the chain doesn't meet (the root uses an RSA cert)
+ */
+ if (!TEST_true(SSL_set1_sigalgs_list(clientssl,
+ "ecdsa_secp256r1_sha256")))
+ goto end;
+ } else if (tst == 5) {
+ /*
+ * We cause SSL_check_chain() to fail by specifying sig_algs that
+ * the ee cert doesn't meet (the ee uses an ECDSA cert)
+ */
+ if (!TEST_true(SSL_set1_sigalgs_list(clientssl,
+ "rsa_pss_rsae_sha256:rsa_pkcs1_sha256")))
+ goto end;
+ }
+
+ ret = create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE);
+ if (!TEST_true(tst == 0 || tst == 4 || tst == 5 ? !ret : ret)
+ || (tst > 0
+ && !TEST_int_eq((cert_cb_cnt - 2) * (cert_cb_cnt - 3), 0))) {
+ goto end;
+ }
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ SSL_CTX_free(snictx);
+
+ return testresult;
+}
+#endif
+
+static int test_cert_cb(int tst)
+{
+ int testresult = 1;
+
+#ifndef OPENSSL_NO_TLS1_2
+ testresult &= test_cert_cb_int(TLS1_2_VERSION, tst);
+#endif
+#ifndef OSSL_NO_USABLE_TLS1_3
+ testresult &= test_cert_cb_int(TLS1_3_VERSION, tst);
+#endif
+
+ return testresult;
+}
+
+static int client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey)
+{
+ X509 *xcert;
+ EVP_PKEY *privpkey;
+ BIO *in = NULL;
+ BIO *priv_in = NULL;
+
+ /* Check that SSL_get0_peer_certificate() returns something sensible */
+ if (!TEST_ptr(SSL_get0_peer_certificate(ssl)))
+ return 0;
+
+ in = BIO_new_file(cert, "r");
+ if (!TEST_ptr(in))
+ return 0;
+
+ if (!TEST_ptr(xcert = X509_new_ex(libctx, NULL))
+ || !TEST_ptr(PEM_read_bio_X509(in, &xcert, NULL, NULL))
+ || !TEST_ptr(priv_in = BIO_new_file(privkey, "r"))
+ || !TEST_ptr(privpkey = PEM_read_bio_PrivateKey_ex(priv_in, NULL,
+ NULL, NULL,
+ libctx, NULL)))
+ goto err;
+
+ *x509 = xcert;
+ *pkey = privpkey;
+
+ BIO_free(in);
+ BIO_free(priv_in);
+ return 1;
+err:
+ X509_free(xcert);
+ BIO_free(in);
+ BIO_free(priv_in);
+ return 0;
+}
+
+static int test_client_cert_cb(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+#ifdef OPENSSL_NO_TLS1_2
+ if (tst == 0)
+ return 1;
+#endif
+#ifdef OSSL_NO_USABLE_TLS1_3
+ if (tst == 1)
+ return 1;
+#endif
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION,
+ tst == 0 ? TLS1_2_VERSION
+ : TLS1_3_VERSION,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ /*
+ * Test that setting a client_cert_cb results in a client certificate being
+ * sent.
+ */
+ SSL_CTX_set_client_cert_cb(cctx, client_cert_cb);
+ SSL_CTX_set_verify(sctx,
+ SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
+ verify_cb);
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+#if !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3)
+/*
+ * Test setting certificate authorities on both client and server.
+ *
+ * Test 0: SSL_CTX_set0_CA_list() only
+ * Test 1: Both SSL_CTX_set0_CA_list() and SSL_CTX_set_client_CA_list()
+ * Test 2: Only SSL_CTX_set_client_CA_list()
+ */
+static int test_ca_names_int(int prot, int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ size_t i;
+ X509_NAME *name[] = { NULL, NULL, NULL, NULL };
+ char *strnames[] = { "Jack", "Jill", "John", "Joanne" };
+ STACK_OF(X509_NAME) *sk1 = NULL, *sk2 = NULL;
+ const STACK_OF(X509_NAME) *sktmp = NULL;
+
+ for (i = 0; i < OSSL_NELEM(name); i++) {
+ name[i] = X509_NAME_new();
+ if (!TEST_ptr(name[i])
+ || !TEST_true(X509_NAME_add_entry_by_txt(name[i], "CN",
+ MBSTRING_ASC,
+ (unsigned char *)
+ strnames[i],
+ -1, -1, 0)))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION,
+ prot,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ SSL_CTX_set_verify(sctx, SSL_VERIFY_PEER, NULL);
+
+ if (tst == 0 || tst == 1) {
+ if (!TEST_ptr(sk1 = sk_X509_NAME_new_null())
+ || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[0])))
+ || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[1])))
+ || !TEST_ptr(sk2 = sk_X509_NAME_new_null())
+ || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[0])))
+ || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[1]))))
+ goto end;
+
+ SSL_CTX_set0_CA_list(sctx, sk1);
+ SSL_CTX_set0_CA_list(cctx, sk2);
+ sk1 = sk2 = NULL;
+ }
+ if (tst == 1 || tst == 2) {
+ if (!TEST_ptr(sk1 = sk_X509_NAME_new_null())
+ || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[2])))
+ || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[3])))
+ || !TEST_ptr(sk2 = sk_X509_NAME_new_null())
+ || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[2])))
+ || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[3]))))
+ goto end;
+
+ SSL_CTX_set_client_CA_list(sctx, sk1);
+ SSL_CTX_set_client_CA_list(cctx, sk2);
+ sk1 = sk2 = NULL;
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ /*
+ * We only expect certificate authorities to have been sent to the server
+ * if we are using TLSv1.3 and SSL_set0_CA_list() was used
+ */
+ sktmp = SSL_get0_peer_CA_list(serverssl);
+ if (prot == TLS1_3_VERSION
+ && (tst == 0 || tst == 1)) {
+ if (!TEST_ptr(sktmp)
+ || !TEST_int_eq(sk_X509_NAME_num(sktmp), 2)
+ || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 0),
+ name[0]), 0)
+ || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 1),
+ name[1]), 0))
+ goto end;
+ } else if (!TEST_ptr_null(sktmp)) {
+ goto end;
+ }
+
+ /*
+ * In all tests we expect certificate authorities to have been sent to the
+ * client. However, SSL_set_client_CA_list() should override
+ * SSL_set0_CA_list()
+ */
+ sktmp = SSL_get0_peer_CA_list(clientssl);
+ if (!TEST_ptr(sktmp)
+ || !TEST_int_eq(sk_X509_NAME_num(sktmp), 2)
+ || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 0),
+ name[tst == 0 ? 0 : 2]), 0)
+ || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 1),
+ name[tst == 0 ? 1 : 3]), 0))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ for (i = 0; i < OSSL_NELEM(name); i++)
+ X509_NAME_free(name[i]);
+ sk_X509_NAME_pop_free(sk1, X509_NAME_free);
+ sk_X509_NAME_pop_free(sk2, X509_NAME_free);
+
+ return testresult;
+}
+#endif
+
+static int test_ca_names(int tst)
+{
+ int testresult = 1;
+
+#ifndef OPENSSL_NO_TLS1_2
+ testresult &= test_ca_names_int(TLS1_2_VERSION, tst);
+#endif
+#ifndef OSSL_NO_USABLE_TLS1_3
+ testresult &= test_ca_names_int(TLS1_3_VERSION, tst);
+#endif
+
+ return testresult;
+}
+
+#ifndef OPENSSL_NO_TLS1_2
+static const char *multiblock_cipherlist_data[]=
+{
+ "AES128-SHA",
+ "AES128-SHA256",
+ "AES256-SHA",
+ "AES256-SHA256",
+};
+
+/* Reduce the fragment size - so the multiblock test buffer can be small */
+# define MULTIBLOCK_FRAGSIZE 512
+
+static int test_multiblock_write(int test_index)
+{
+ static const char *fetchable_ciphers[]=
+ {
+ "AES-128-CBC-HMAC-SHA1",
+ "AES-128-CBC-HMAC-SHA256",
+ "AES-256-CBC-HMAC-SHA1",
+ "AES-256-CBC-HMAC-SHA256"
+ };
+ const char *cipherlist = multiblock_cipherlist_data[test_index];
+ const SSL_METHOD *smeth = TLS_server_method();
+ const SSL_METHOD *cmeth = TLS_client_method();
+ int min_version = TLS1_VERSION;
+ int max_version = TLS1_2_VERSION; /* Don't select TLS1_3 */
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+ /*
+ * Choose a buffer large enough to perform a multi-block operation
+ * i.e: write_len >= 4 * frag_size
+ * 9 * is chosen so that multiple multiblocks are used + some leftover.
+ */
+ unsigned char msg[MULTIBLOCK_FRAGSIZE * 9];
+ unsigned char buf[sizeof(msg)], *p = buf;
+ size_t readbytes, written, len;
+ EVP_CIPHER *ciph = NULL;
+
+ /*
+ * Check if the cipher exists before attempting to use it since it only has
+ * a hardware specific implementation.
+ */
+ ciph = EVP_CIPHER_fetch(libctx, fetchable_ciphers[test_index], "");
+ if (ciph == NULL) {
+ TEST_skip("Multiblock cipher is not available for %s", cipherlist);
+ return 1;
+ }
+ EVP_CIPHER_free(ciph);
+
+ /* Set up a buffer with some data that will be sent to the client */
+ RAND_bytes(msg, sizeof(msg));
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, smeth, cmeth, min_version,
+ max_version, &sctx, &cctx, cert,
+ privkey)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_set_max_send_fragment(sctx, MULTIBLOCK_FRAGSIZE)))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ /* settings to force it to use AES-CBC-HMAC_SHA */
+ SSL_set_options(serverssl, SSL_OP_NO_ENCRYPT_THEN_MAC);
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx, cipherlist)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ if (!TEST_true(SSL_write_ex(serverssl, msg, sizeof(msg), &written))
+ || !TEST_size_t_eq(written, sizeof(msg)))
+ goto end;
+
+ len = written;
+ while (len > 0) {
+ if (!TEST_true(SSL_read_ex(clientssl, p, MULTIBLOCK_FRAGSIZE, &readbytes)))
+ goto end;
+ p += readbytes;
+ len -= readbytes;
+ }
+ if (!TEST_mem_eq(msg, sizeof(msg), buf, sizeof(buf)))
+ goto end;
+
+ testresult = 1;
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+#endif /* OPENSSL_NO_TLS1_2 */
+
+static int test_session_timeout(int test)
+{
+ /*
+ * Test session ordering and timeout
+ * Can't explicitly test performance of the new code,
+ * but can test to see if the ordering of the sessions
+ * are correct, and they they are removed as expected
+ */
+ SSL_SESSION *early = NULL;
+ SSL_SESSION *middle = NULL;
+ SSL_SESSION *late = NULL;
+ SSL_CTX *ctx;
+ int testresult = 0;
+ long now = (long)time(NULL);
+#define TIMEOUT 10
+
+ if (!TEST_ptr(ctx = SSL_CTX_new_ex(libctx, NULL, TLS_method()))
+ || !TEST_ptr(early = SSL_SESSION_new())
+ || !TEST_ptr(middle = SSL_SESSION_new())
+ || !TEST_ptr(late = SSL_SESSION_new()))
+ goto end;
+
+ /* assign unique session ids */
+ early->session_id_length = SSL3_SSL_SESSION_ID_LENGTH;
+ memset(early->session_id, 1, SSL3_SSL_SESSION_ID_LENGTH);
+ middle->session_id_length = SSL3_SSL_SESSION_ID_LENGTH;
+ memset(middle->session_id, 2, SSL3_SSL_SESSION_ID_LENGTH);
+ late->session_id_length = SSL3_SSL_SESSION_ID_LENGTH;
+ memset(late->session_id, 3, SSL3_SSL_SESSION_ID_LENGTH);
+
+ if (!TEST_int_eq(SSL_CTX_add_session(ctx, early), 1)
+ || !TEST_int_eq(SSL_CTX_add_session(ctx, middle), 1)
+ || !TEST_int_eq(SSL_CTX_add_session(ctx, late), 1))
+ goto end;
+
+ /* Make sure they are all added */
+ if (!TEST_ptr(early->prev)
+ || !TEST_ptr(middle->prev)
+ || !TEST_ptr(late->prev))
+ goto end;
+
+ if (!TEST_int_ne(SSL_SESSION_set_time(early, now - 10), 0)
+ || !TEST_int_ne(SSL_SESSION_set_time(middle, now), 0)
+ || !TEST_int_ne(SSL_SESSION_set_time(late, now + 10), 0))
+ goto end;
+
+ if (!TEST_int_ne(SSL_SESSION_set_timeout(early, TIMEOUT), 0)
+ || !TEST_int_ne(SSL_SESSION_set_timeout(middle, TIMEOUT), 0)
+ || !TEST_int_ne(SSL_SESSION_set_timeout(late, TIMEOUT), 0))
+ goto end;
+
+ /* Make sure they are all still there */
+ if (!TEST_ptr(early->prev)
+ || !TEST_ptr(middle->prev)
+ || !TEST_ptr(late->prev))
+ goto end;
+
+ /* Make sure they are in the expected order */
+ if (!TEST_ptr_eq(late->next, middle)
+ || !TEST_ptr_eq(middle->next, early)
+ || !TEST_ptr_eq(early->prev, middle)
+ || !TEST_ptr_eq(middle->prev, late))
+ goto end;
+
+ /* This should remove "early" */
+ SSL_CTX_flush_sessions(ctx, now + TIMEOUT - 1);
+ if (!TEST_ptr_null(early->prev)
+ || !TEST_ptr(middle->prev)
+ || !TEST_ptr(late->prev))
+ goto end;
+
+ /* This should remove "middle" */
+ SSL_CTX_flush_sessions(ctx, now + TIMEOUT + 1);
+ if (!TEST_ptr_null(early->prev)
+ || !TEST_ptr_null(middle->prev)
+ || !TEST_ptr(late->prev))
+ goto end;
+
+ /* This should remove "late" */
+ SSL_CTX_flush_sessions(ctx, now + TIMEOUT + 11);
+ if (!TEST_ptr_null(early->prev)
+ || !TEST_ptr_null(middle->prev)
+ || !TEST_ptr_null(late->prev))
+ goto end;
+
+ /* Add them back in again */
+ if (!TEST_int_eq(SSL_CTX_add_session(ctx, early), 1)
+ || !TEST_int_eq(SSL_CTX_add_session(ctx, middle), 1)
+ || !TEST_int_eq(SSL_CTX_add_session(ctx, late), 1))
+ goto end;
+
+ /* Make sure they are all added */
+ if (!TEST_ptr(early->prev)
+ || !TEST_ptr(middle->prev)
+ || !TEST_ptr(late->prev))
+ goto end;
+
+ /* This should remove all of them */
+ SSL_CTX_flush_sessions(ctx, 0);
+ if (!TEST_ptr_null(early->prev)
+ || !TEST_ptr_null(middle->prev)
+ || !TEST_ptr_null(late->prev))
+ goto end;
+
+ (void)SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_UPDATE_TIME
+ | SSL_CTX_get_session_cache_mode(ctx));
+
+ /* make sure |now| is NOT equal to the current time */
+ now -= 10;
+ if (!TEST_int_ne(SSL_SESSION_set_time(early, now), 0)
+ || !TEST_int_eq(SSL_CTX_add_session(ctx, early), 1)
+ || !TEST_long_ne(SSL_SESSION_get_time(early), now))
+ goto end;
+
+ testresult = 1;
+ end:
+ SSL_CTX_free(ctx);
+ SSL_SESSION_free(early);
+ SSL_SESSION_free(middle);
+ SSL_SESSION_free(late);
+ return testresult;
+}
+
+/*
+ * Test 0: Client sets servername and server acknowledges it (TLSv1.2)
+ * Test 1: Client sets servername and server does not acknowledge it (TLSv1.2)
+ * Test 2: Client sets inconsistent servername on resumption (TLSv1.2)
+ * Test 3: Client does not set servername on initial handshake (TLSv1.2)
+ * Test 4: Client does not set servername on resumption handshake (TLSv1.2)
+ * Test 5: Client sets servername and server acknowledges it (TLSv1.3)
+ * Test 6: Client sets servername and server does not acknowledge it (TLSv1.3)
+ * Test 7: Client sets inconsistent servername on resumption (TLSv1.3)
+ * Test 8: Client does not set servername on initial handshake(TLSv1.3)
+ * Test 9: Client does not set servername on resumption handshake (TLSv1.3)
+ */
+static int test_servername(int tst)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ SSL_SESSION *sess = NULL;
+ const char *sexpectedhost = NULL, *cexpectedhost = NULL;
+
+#ifdef OPENSSL_NO_TLS1_2
+ if (tst <= 4)
+ return 1;
+#endif
+#ifdef OSSL_NO_USABLE_TLS1_3
+ if (tst >= 5)
+ return 1;
+#endif
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION,
+ (tst <= 4) ? TLS1_2_VERSION
+ : TLS1_3_VERSION,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (tst != 1 && tst != 6) {
+ if (!TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx,
+ hostname_cb)))
+ goto end;
+ }
+
+ if (tst != 3 && tst != 8) {
+ if (!TEST_true(SSL_set_tlsext_host_name(clientssl, "goodhost")))
+ goto end;
+ sexpectedhost = cexpectedhost = "goodhost";
+ }
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ if (!TEST_str_eq(SSL_get_servername(clientssl, TLSEXT_NAMETYPE_host_name),
+ cexpectedhost)
+ || !TEST_str_eq(SSL_get_servername(serverssl,
+ TLSEXT_NAMETYPE_host_name),
+ sexpectedhost))
+ goto end;
+
+ /* Now repeat with a resumption handshake */
+
+ if (!TEST_int_eq(SSL_shutdown(clientssl), 0)
+ || !TEST_ptr_ne(sess = SSL_get1_session(clientssl), NULL)
+ || !TEST_true(SSL_SESSION_is_resumable(sess))
+ || !TEST_int_eq(SSL_shutdown(serverssl), 0))
+ goto end;
+
+ SSL_free(clientssl);
+ SSL_free(serverssl);
+ clientssl = serverssl = NULL;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL,
+ NULL)))
+ goto end;
+
+ if (!TEST_true(SSL_set_session(clientssl, sess)))
+ goto end;
+
+ sexpectedhost = cexpectedhost = "goodhost";
+ if (tst == 2 || tst == 7) {
+ /* Set an inconsistent hostname */
+ if (!TEST_true(SSL_set_tlsext_host_name(clientssl, "altgoodhost")))
+ goto end;
+ /*
+ * In TLSv1.2 we expect the hostname from the original handshake, in
+ * TLSv1.3 we expect the hostname from this handshake
+ */
+ if (tst == 7)
+ sexpectedhost = cexpectedhost = "altgoodhost";
+
+ if (!TEST_str_eq(SSL_get_servername(clientssl,
+ TLSEXT_NAMETYPE_host_name),
+ "altgoodhost"))
+ goto end;
+ } else if (tst == 4 || tst == 9) {
+ /*
+ * A TLSv1.3 session does not associate a session with a servername,
+ * but a TLSv1.2 session does.
+ */
+ if (tst == 9)
+ sexpectedhost = cexpectedhost = NULL;
+
+ if (!TEST_str_eq(SSL_get_servername(clientssl,
+ TLSEXT_NAMETYPE_host_name),
+ cexpectedhost))
+ goto end;
+ } else {
+ if (!TEST_true(SSL_set_tlsext_host_name(clientssl, "goodhost")))
+ goto end;
+ /*
+ * In a TLSv1.2 resumption where the hostname was not acknowledged
+ * we expect the hostname on the server to be empty. On the client we
+ * return what was requested in this case.
+ *
+ * Similarly if the client didn't set a hostname on an original TLSv1.2
+ * session but is now, the server hostname will be empty, but the client
+ * is as we set it.
+ */
+ if (tst == 1 || tst == 3)
+ sexpectedhost = NULL;
+
+ if (!TEST_str_eq(SSL_get_servername(clientssl,
+ TLSEXT_NAMETYPE_host_name),
+ "goodhost"))
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ if (!TEST_true(SSL_session_reused(clientssl))
+ || !TEST_true(SSL_session_reused(serverssl))
+ || !TEST_str_eq(SSL_get_servername(clientssl,
+ TLSEXT_NAMETYPE_host_name),
+ cexpectedhost)
+ || !TEST_str_eq(SSL_get_servername(serverssl,
+ TLSEXT_NAMETYPE_host_name),
+ sexpectedhost))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_SESSION_free(sess);
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+#if !defined(OPENSSL_NO_EC) \
+ && (!defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2))
+/*
+ * Test that if signature algorithms are not available, then we do not offer or
+ * accept them.
+ * Test 0: Two RSA sig algs available: both RSA sig algs shared
+ * Test 1: The client only has SHA2-256: only SHA2-256 algorithms shared
+ * Test 2: The server only has SHA2-256: only SHA2-256 algorithms shared
+ * Test 3: An RSA and an ECDSA sig alg available: both sig algs shared
+ * Test 4: The client only has an ECDSA sig alg: only ECDSA algorithms shared
+ * Test 5: The server only has an ECDSA sig alg: only ECDSA algorithms shared
+ */
+static int test_sigalgs_available(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ OSSL_LIB_CTX *tmpctx = OSSL_LIB_CTX_new();
+ OSSL_LIB_CTX *clientctx = libctx, *serverctx = libctx;
+ OSSL_PROVIDER *filterprov = NULL;
+ int sig, hash;
+
+ if (!TEST_ptr(tmpctx))
+ goto end;
+
+ if (idx != 0 && idx != 3) {
+ if (!TEST_true(OSSL_PROVIDER_add_builtin(tmpctx, "filter",
+ filter_provider_init)))
+ goto end;
+
+ filterprov = OSSL_PROVIDER_load(tmpctx, "filter");
+ if (!TEST_ptr(filterprov))
+ goto end;
+
+ if (idx < 3) {
+ /*
+ * Only enable SHA2-256 so rsa_pss_rsae_sha384 should not be offered
+ * or accepted for the peer that uses this libctx. Note that libssl
+ * *requires* SHA2-256 to be available so we cannot disable that. We
+ * also need SHA1 for our certificate.
+ */
+ if (!TEST_true(filter_provider_set_filter(OSSL_OP_DIGEST,
+ "SHA2-256:SHA1")))
+ goto end;
+ } else {
+ if (!TEST_true(filter_provider_set_filter(OSSL_OP_SIGNATURE,
+ "ECDSA"))
+ || !TEST_true(filter_provider_set_filter(OSSL_OP_KEYMGMT,
+ "EC:X25519:X448")))
+ goto end;
+ }
+
+ if (idx == 1 || idx == 4)
+ clientctx = tmpctx;
+ else
+ serverctx = tmpctx;
+ }
+
+ cctx = SSL_CTX_new_ex(clientctx, NULL, TLS_client_method());
+ sctx = SSL_CTX_new_ex(serverctx, NULL, TLS_server_method());
+ if (!TEST_ptr(cctx) || !TEST_ptr(sctx))
+ goto end;
+
+ if (idx != 5) {
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION,
+ 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+ } else {
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION,
+ 0,
+ &sctx, &cctx, cert2, privkey2)))
+ goto end;
+ }
+
+ /* Ensure we only use TLSv1.2 ciphersuites based on SHA256 */
+ if (idx < 4) {
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "ECDHE-RSA-AES128-GCM-SHA256")))
+ goto end;
+ } else {
+ if (!TEST_true(SSL_CTX_set_cipher_list(cctx,
+ "ECDHE-ECDSA-AES128-GCM-SHA256")))
+ goto end;
+ }
+
+ if (idx < 3) {
+ if (!SSL_CTX_set1_sigalgs_list(cctx,
+ "rsa_pss_rsae_sha384"
+ ":rsa_pss_rsae_sha256")
+ || !SSL_CTX_set1_sigalgs_list(sctx,
+ "rsa_pss_rsae_sha384"
+ ":rsa_pss_rsae_sha256"))
+ goto end;
+ } else {
+ if (!SSL_CTX_set1_sigalgs_list(cctx, "rsa_pss_rsae_sha256:ECDSA+SHA256")
+ || !SSL_CTX_set1_sigalgs_list(sctx,
+ "rsa_pss_rsae_sha256:ECDSA+SHA256"))
+ goto end;
+ }
+
+ if (idx != 5
+ && (!TEST_int_eq(SSL_CTX_use_certificate_file(sctx, cert2,
+ SSL_FILETYPE_PEM), 1)
+ || !TEST_int_eq(SSL_CTX_use_PrivateKey_file(sctx,
+ privkey2,
+ SSL_FILETYPE_PEM), 1)
+ || !TEST_int_eq(SSL_CTX_check_private_key(sctx), 1)))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ /* For tests 0 and 3 we expect 2 shared sigalgs, otherwise exactly 1 */
+ if (!TEST_int_eq(SSL_get_shared_sigalgs(serverssl, 0, &sig, &hash, NULL,
+ NULL, NULL),
+ (idx == 0 || idx == 3) ? 2 : 1))
+ goto end;
+
+ if (!TEST_int_eq(hash, idx == 0 ? NID_sha384 : NID_sha256))
+ goto end;
+
+ if (!TEST_int_eq(sig, (idx == 4 || idx == 5) ? EVP_PKEY_EC
+ : NID_rsassaPss))
+ goto end;
+
+ testresult = filter_provider_check_clean_finish();
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ OSSL_PROVIDER_unload(filterprov);
+ OSSL_LIB_CTX_free(tmpctx);
+
+ return testresult;
+}
+#endif /*
+ * !defined(OPENSSL_NO_EC) \
+ * && (!defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2))
+ */
+
+#ifndef OPENSSL_NO_TLS1_3
+/* This test can run in TLSv1.3 even if ec and dh are disabled */
+static int test_pluggable_group(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ OSSL_PROVIDER *tlsprov = OSSL_PROVIDER_load(libctx, "tls-provider");
+ /* Check that we are not impacted by a provider without any groups */
+ OSSL_PROVIDER *legacyprov = OSSL_PROVIDER_load(libctx, "legacy");
+ const char *group_name = idx == 0 ? "xorgroup" : "xorkemgroup";
+
+ if (!TEST_ptr(tlsprov))
+ goto end;
+
+ if (legacyprov == NULL) {
+ /*
+ * In this case we assume we've been built with "no-legacy" and skip
+ * this test (there is no OPENSSL_NO_LEGACY)
+ */
+ testresult = 1;
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_3_VERSION,
+ TLS1_3_VERSION,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(SSL_set1_groups_list(serverssl, group_name))
+ || !TEST_true(SSL_set1_groups_list(clientssl, group_name)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ if (!TEST_str_eq(group_name,
+ SSL_group_to_name(serverssl, SSL_get_shared_group(serverssl, 0))))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ OSSL_PROVIDER_unload(tlsprov);
+ OSSL_PROVIDER_unload(legacyprov);
+
+ return testresult;
+}
+#endif
+
+#ifndef OPENSSL_NO_TLS1_2
+static int test_ssl_dup(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL, *client2ssl = NULL;
+ int testresult = 0;
+ BIO *rbio = NULL, *wbio = NULL;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ 0,
+ 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(SSL_set_min_proto_version(clientssl, TLS1_2_VERSION))
+ || !TEST_true(SSL_set_max_proto_version(clientssl, TLS1_2_VERSION)))
+ goto end;
+
+ client2ssl = SSL_dup(clientssl);
+ rbio = SSL_get_rbio(clientssl);
+ if (!TEST_ptr(rbio)
+ || !TEST_true(BIO_up_ref(rbio)))
+ goto end;
+ SSL_set0_rbio(client2ssl, rbio);
+ rbio = NULL;
+
+ wbio = SSL_get_wbio(clientssl);
+ if (!TEST_ptr(wbio) || !TEST_true(BIO_up_ref(wbio)))
+ goto end;
+ SSL_set0_wbio(client2ssl, wbio);
+ rbio = NULL;
+
+ if (!TEST_ptr(client2ssl)
+ /* Handshake not started so pointers should be different */
+ || !TEST_ptr_ne(clientssl, client2ssl))
+ goto end;
+
+ if (!TEST_int_eq(SSL_get_min_proto_version(client2ssl), TLS1_2_VERSION)
+ || !TEST_int_eq(SSL_get_max_proto_version(client2ssl), TLS1_2_VERSION))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, client2ssl, SSL_ERROR_NONE)))
+ goto end;
+
+ SSL_free(clientssl);
+ clientssl = SSL_dup(client2ssl);
+ if (!TEST_ptr(clientssl)
+ /* Handshake has finished so pointers should be the same */
+ || !TEST_ptr_eq(clientssl, client2ssl))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_free(client2ssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return testresult;
+}
+
+# ifndef OPENSSL_NO_DH
+
+static EVP_PKEY *tmp_dh_params = NULL;
+
+/* Helper function for the test_set_tmp_dh() tests */
+static EVP_PKEY *get_tmp_dh_params(void)
+{
+ if (tmp_dh_params == NULL) {
+ BIGNUM *p = NULL;
+ OSSL_PARAM_BLD *tmpl = NULL;
+ EVP_PKEY_CTX *pctx = NULL;
+ OSSL_PARAM *params = NULL;
+ EVP_PKEY *dhpkey = NULL;
+
+ p = BN_get_rfc3526_prime_2048(NULL);
+ if (!TEST_ptr(p))
+ goto end;
+
+ pctx = EVP_PKEY_CTX_new_from_name(libctx, "DH", NULL);
+ if (!TEST_ptr(pctx)
+ || !TEST_int_eq(EVP_PKEY_fromdata_init(pctx), 1))
+ goto end;
+
+ tmpl = OSSL_PARAM_BLD_new();
+ if (!TEST_ptr(tmpl)
+ || !TEST_true(OSSL_PARAM_BLD_push_BN(tmpl,
+ OSSL_PKEY_PARAM_FFC_P,
+ p))
+ || !TEST_true(OSSL_PARAM_BLD_push_uint(tmpl,
+ OSSL_PKEY_PARAM_FFC_G,
+ 2)))
+ goto end;
+
+ params = OSSL_PARAM_BLD_to_param(tmpl);
+ if (!TEST_ptr(params)
+ || !TEST_int_eq(EVP_PKEY_fromdata(pctx, &dhpkey,
+ EVP_PKEY_KEY_PARAMETERS,
+ params), 1))
+ goto end;
+
+ tmp_dh_params = dhpkey;
+ end:
+ BN_free(p);
+ EVP_PKEY_CTX_free(pctx);
+ OSSL_PARAM_BLD_free(tmpl);
+ OSSL_PARAM_free(params);
+ }
+
+ if (tmp_dh_params != NULL && !EVP_PKEY_up_ref(tmp_dh_params))
+ return NULL;
+
+ return tmp_dh_params;
+}
+
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+/* Callback used by test_set_tmp_dh() */
+static DH *tmp_dh_callback(SSL *s, int is_export, int keylen)
+{
+ EVP_PKEY *dhpkey = get_tmp_dh_params();
+ DH *ret = NULL;
+
+ if (!TEST_ptr(dhpkey))
+ return NULL;
+
+ /*
+ * libssl does not free the returned DH, so we free it now knowing that even
+ * after we free dhpkey, there will still be a reference to the owning
+ * EVP_PKEY in tmp_dh_params, and so the DH object will live for the length
+ * of time we need it for.
+ */
+ ret = EVP_PKEY_get1_DH(dhpkey);
+ DH_free(ret);
+
+ EVP_PKEY_free(dhpkey);
+
+ return ret;
+}
+# endif
+
+/*
+ * Test the various methods for setting temporary DH parameters
+ *
+ * Test 0: Default (no auto) setting
+ * Test 1: Explicit SSL_CTX auto off
+ * Test 2: Explicit SSL auto off
+ * Test 3: Explicit SSL_CTX auto on
+ * Test 4: Explicit SSL auto on
+ * Test 5: Explicit SSL_CTX auto off, custom DH params via EVP_PKEY
+ * Test 6: Explicit SSL auto off, custom DH params via EVP_PKEY
+ *
+ * The following are testing deprecated APIs, so we only run them if available
+ * Test 7: Explicit SSL_CTX auto off, custom DH params via DH
+ * Test 8: Explicit SSL auto off, custom DH params via DH
+ * Test 9: Explicit SSL_CTX auto off, custom DH params via callback
+ * Test 10: Explicit SSL auto off, custom DH params via callback
+ */
+static int test_set_tmp_dh(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ int dhauto = (idx == 3 || idx == 4) ? 1 : 0;
+ int expected = (idx <= 2) ? 0 : 1;
+ EVP_PKEY *dhpkey = NULL;
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ DH *dh = NULL;
+# else
+
+ if (idx >= 7)
+ return 1;
+# endif
+
+ if (idx >= 5 && idx <= 8) {
+ dhpkey = get_tmp_dh_params();
+ if (!TEST_ptr(dhpkey))
+ goto end;
+ }
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ if (idx == 7 || idx == 8) {
+ dh = EVP_PKEY_get1_DH(dhpkey);
+ if (!TEST_ptr(dh))
+ goto end;
+ }
+# endif
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ 0,
+ 0,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if ((idx & 1) == 1) {
+ if (!TEST_true(SSL_CTX_set_dh_auto(sctx, dhauto)))
+ goto end;
+ }
+
+ if (idx == 5) {
+ if (!TEST_true(SSL_CTX_set0_tmp_dh_pkey(sctx, dhpkey)))
+ goto end;
+ dhpkey = NULL;
+ }
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ else if (idx == 7) {
+ if (!TEST_true(SSL_CTX_set_tmp_dh(sctx, dh)))
+ goto end;
+ } else if (idx == 9) {
+ SSL_CTX_set_tmp_dh_callback(sctx, tmp_dh_callback);
+ }
+# endif
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if ((idx & 1) == 0 && idx != 0) {
+ if (!TEST_true(SSL_set_dh_auto(serverssl, dhauto)))
+ goto end;
+ }
+ if (idx == 6) {
+ if (!TEST_true(SSL_set0_tmp_dh_pkey(serverssl, dhpkey)))
+ goto end;
+ dhpkey = NULL;
+ }
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ else if (idx == 8) {
+ if (!TEST_true(SSL_set_tmp_dh(serverssl, dh)))
+ goto end;
+ } else if (idx == 10) {
+ SSL_set_tmp_dh_callback(serverssl, tmp_dh_callback);
+ }
+# endif
+
+ if (!TEST_true(SSL_set_min_proto_version(serverssl, TLS1_2_VERSION))
+ || !TEST_true(SSL_set_max_proto_version(serverssl, TLS1_2_VERSION))
+ || !TEST_true(SSL_set_cipher_list(serverssl, "DHE-RSA-AES128-SHA")))
+ goto end;
+
+ /*
+ * If autoon then we should succeed. Otherwise we expect failure because
+ * there are no parameters
+ */
+ if (!TEST_int_eq(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE), expected))
+ goto end;
+
+ testresult = 1;
+
+ end:
+# ifndef OPENSSL_NO_DEPRECATED_3_0
+ DH_free(dh);
+# endif
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ EVP_PKEY_free(dhpkey);
+
+ return testresult;
+}
+
+/*
+ * Test the auto DH keys are appropriately sized
+ */
+static int test_dh_auto(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ EVP_PKEY *tmpkey = NULL;
+ char *thiscert = NULL, *thiskey = NULL;
+ size_t expdhsize = 0;
+ const char *ciphersuite = "DHE-RSA-AES128-SHA";
+
+ switch (idx) {
+ case 0:
+ /* The FIPS provider doesn't support this DH size - so we ignore it */
+ if (is_fips)
+ return 1;
+ thiscert = cert1024;
+ thiskey = privkey1024;
+ expdhsize = 1024;
+ break;
+ case 1:
+ /* 2048 bit prime */
+ thiscert = cert;
+ thiskey = privkey;
+ expdhsize = 2048;
+ break;
+ case 2:
+ thiscert = cert3072;
+ thiskey = privkey3072;
+ expdhsize = 3072;
+ break;
+ case 3:
+ thiscert = cert4096;
+ thiskey = privkey4096;
+ expdhsize = 4096;
+ break;
+ case 4:
+ thiscert = cert8192;
+ thiskey = privkey8192;
+ expdhsize = 8192;
+ break;
+ /* No certificate cases */
+ case 5:
+ /* The FIPS provider doesn't support this DH size - so we ignore it */
+ if (is_fips)
+ return 1;
+ ciphersuite = "ADH-AES128-SHA256:@SECLEVEL=0";
+ expdhsize = 1024;
+ break;
+ case 6:
+ ciphersuite = "ADH-AES256-SHA256:@SECLEVEL=0";
+ expdhsize = 3072;
+ break;
+ default:
+ TEST_error("Invalid text index");
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(),
+ 0,
+ 0,
+ &sctx, &cctx, thiscert, thiskey)))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
+ NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(SSL_set_dh_auto(serverssl, 1))
+ || !TEST_true(SSL_set_min_proto_version(serverssl, TLS1_2_VERSION))
+ || !TEST_true(SSL_set_max_proto_version(serverssl, TLS1_2_VERSION))
+ || !TEST_true(SSL_set_cipher_list(serverssl, ciphersuite))
+ || !TEST_true(SSL_set_cipher_list(clientssl, ciphersuite)))
+ goto end;
+
+ /*
+ * Send the server's first flight. At this point the server has created the
+ * temporary DH key but hasn't finished using it yet. Once used it is
+ * removed, so we cannot test it.
+ */
+ if (!TEST_int_le(SSL_connect(clientssl), 0)
+ || !TEST_int_le(SSL_accept(serverssl), 0))
+ goto end;
+
+ if (!TEST_int_gt(SSL_get_tmp_key(serverssl, &tmpkey), 0))
+ goto end;
+ if (!TEST_size_t_eq(EVP_PKEY_get_bits(tmpkey), expdhsize))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ EVP_PKEY_free(tmpkey);
+
+ return testresult;
+
+}
+# endif /* OPENSSL_NO_DH */
+#endif /* OPENSSL_NO_TLS1_2 */
+
+#ifndef OSSL_NO_USABLE_TLS1_3
+/*
+ * Test that setting an SNI callback works with TLSv1.3. Specifically we check
+ * that it works even without a certificate configured for the original
+ * SSL_CTX
+ */
+static int test_sni_tls13(void)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+
+ /* Reset callback counter */
+ snicb = 0;
+
+ /* Create an initial SSL_CTX with no certificate configured */
+ sctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method());
+ if (!TEST_ptr(sctx))
+ goto end;
+ /* Require TLSv1.3 as a minimum */
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), TLS1_3_VERSION, 0,
+ &sctx2, &cctx, cert, privkey)))
+ goto end;
+
+ /* Set up SNI */
+ if (!TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx, sni_cb))
+ || !TEST_true(SSL_CTX_set_tlsext_servername_arg(sctx, sctx2)))
+ goto end;
+
+ /*
+ * Connection should still succeed because the final SSL_CTX has the right
+ * certificates configured.
+ */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(serverssl, clientssl,
+ SSL_ERROR_NONE)))
+ goto end;
+
+ /* We should have had the SNI callback called exactly once */
+ if (!TEST_int_eq(snicb, 1))
+ goto end;
+
+ testresult = 1;
+
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx2);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+/*
+ * Test that the lifetime hint of a TLSv1.3 ticket is no more than 1 week
+ * 0 = TLSv1.2
+ * 1 = TLSv1.3
+ */
+static int test_ticket_lifetime(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ int version = TLS1_3_VERSION;
+
+#define ONE_WEEK_SEC (7 * 24 * 60 * 60)
+#define TWO_WEEK_SEC (2 * ONE_WEEK_SEC)
+
+ if (idx == 0) {
+#ifdef OPENSSL_NO_TLS1_2
+ return TEST_skip("TLS 1.2 is disabled.");
+#else
+ version = TLS1_2_VERSION;
+#endif
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), version, version,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ /*
+ * Set the timeout to be more than 1 week
+ * make sure the returned value is the default
+ */
+ if (!TEST_long_eq(SSL_CTX_set_timeout(sctx, TWO_WEEK_SEC),
+ SSL_get_default_timeout(serverssl)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ if (idx == 0) {
+ /* TLSv1.2 uses the set value */
+ if (!TEST_ulong_eq(SSL_SESSION_get_ticket_lifetime_hint(SSL_get_session(clientssl)), TWO_WEEK_SEC))
+ goto end;
+ } else {
+ /* TLSv1.3 uses the limited value */
+ if (!TEST_ulong_le(SSL_SESSION_get_ticket_lifetime_hint(SSL_get_session(clientssl)), ONE_WEEK_SEC))
+ goto end;
+ }
+ testresult = 1;
+
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+#endif
+/*
+ * Test that setting an ALPN does not violate RFC
+ */
+static int test_set_alpn(void)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *ssl = NULL;
+ int testresult = 0;
+
+ unsigned char bad0[] = { 0x00, 'b', 'a', 'd' };
+ unsigned char good[] = { 0x04, 'g', 'o', 'o', 'd' };
+ unsigned char bad1[] = { 0x01, 'b', 'a', 'd' };
+ unsigned char bad2[] = { 0x03, 'b', 'a', 'd', 0x00};
+ unsigned char bad3[] = { 0x03, 'b', 'a', 'd', 0x01, 'b', 'a', 'd'};
+ unsigned char bad4[] = { 0x03, 'b', 'a', 'd', 0x06, 'b', 'a', 'd'};
+
+ /* Create an initial SSL_CTX with no certificate configured */
+ ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method());
+ if (!TEST_ptr(ctx))
+ goto end;
+
+ /* the set_alpn functions return 0 (false) on success, non-zero (true) on failure */
+ if (!TEST_false(SSL_CTX_set_alpn_protos(ctx, NULL, 2)))
+ goto end;
+ if (!TEST_false(SSL_CTX_set_alpn_protos(ctx, good, 0)))
+ goto end;
+ if (!TEST_false(SSL_CTX_set_alpn_protos(ctx, good, sizeof(good))))
+ goto end;
+ if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, good, 1)))
+ goto end;
+ if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad0, sizeof(bad0))))
+ goto end;
+ if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad1, sizeof(bad1))))
+ goto end;
+ if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad2, sizeof(bad2))))
+ goto end;
+ if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad3, sizeof(bad3))))
+ goto end;
+ if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad4, sizeof(bad4))))
+ goto end;
+
+ ssl = SSL_new(ctx);
+ if (!TEST_ptr(ssl))
+ goto end;
+
+ if (!TEST_false(SSL_set_alpn_protos(ssl, NULL, 2)))
+ goto end;
+ if (!TEST_false(SSL_set_alpn_protos(ssl, good, 0)))
+ goto end;
+ if (!TEST_false(SSL_set_alpn_protos(ssl, good, sizeof(good))))
+ goto end;
+ if (!TEST_true(SSL_set_alpn_protos(ssl, good, 1)))
+ goto end;
+ if (!TEST_true(SSL_set_alpn_protos(ssl, bad0, sizeof(bad0))))
+ goto end;
+ if (!TEST_true(SSL_set_alpn_protos(ssl, bad1, sizeof(bad1))))
+ goto end;
+ if (!TEST_true(SSL_set_alpn_protos(ssl, bad2, sizeof(bad2))))
+ goto end;
+ if (!TEST_true(SSL_set_alpn_protos(ssl, bad3, sizeof(bad3))))
+ goto end;
+ if (!TEST_true(SSL_set_alpn_protos(ssl, bad4, sizeof(bad4))))
+ goto end;
+
+ testresult = 1;
+
+end:
+ SSL_free(ssl);
+ SSL_CTX_free(ctx);
+ return testresult;
+}
+
+/*
+ * Test SSL_CTX_set1_verify/chain_cert_store and SSL_CTX_get_verify/chain_cert_store.
+ */
+static int test_set_verify_cert_store_ssl_ctx(void)
+{
+ SSL_CTX *ctx = NULL;
+ int testresult = 0;
+ X509_STORE *store = NULL, *new_store = NULL,
+ *cstore = NULL, *new_cstore = NULL;
+
+ /* Create an initial SSL_CTX. */
+ ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method());
+ if (!TEST_ptr(ctx))
+ goto end;
+
+ /* Retrieve verify store pointer. */
+ if (!TEST_true(SSL_CTX_get0_verify_cert_store(ctx, &store)))
+ goto end;
+
+ /* Retrieve chain store pointer. */
+ if (!TEST_true(SSL_CTX_get0_chain_cert_store(ctx, &cstore)))
+ goto end;
+
+ /* We haven't set any yet, so this should be NULL. */
+ if (!TEST_ptr_null(store) || !TEST_ptr_null(cstore))
+ goto end;
+
+ /* Create stores. We use separate stores so pointers are different. */
+ new_store = X509_STORE_new();
+ if (!TEST_ptr(new_store))
+ goto end;
+
+ new_cstore = X509_STORE_new();
+ if (!TEST_ptr(new_cstore))
+ goto end;
+
+ /* Set stores. */
+ if (!TEST_true(SSL_CTX_set1_verify_cert_store(ctx, new_store)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_set1_chain_cert_store(ctx, new_cstore)))
+ goto end;
+
+ /* Should be able to retrieve the same pointer. */
+ if (!TEST_true(SSL_CTX_get0_verify_cert_store(ctx, &store)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_get0_chain_cert_store(ctx, &cstore)))
+ goto end;
+
+ if (!TEST_ptr_eq(store, new_store) || !TEST_ptr_eq(cstore, new_cstore))
+ goto end;
+
+ /* Should be able to unset again. */
+ if (!TEST_true(SSL_CTX_set1_verify_cert_store(ctx, NULL)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_set1_chain_cert_store(ctx, NULL)))
+ goto end;
+
+ /* Should now be NULL. */
+ if (!TEST_true(SSL_CTX_get0_verify_cert_store(ctx, &store)))
+ goto end;
+
+ if (!TEST_true(SSL_CTX_get0_chain_cert_store(ctx, &cstore)))
+ goto end;
+
+ if (!TEST_ptr_null(store) || !TEST_ptr_null(cstore))
+ goto end;
+
+ testresult = 1;
+
+end:
+ X509_STORE_free(new_store);
+ X509_STORE_free(new_cstore);
+ SSL_CTX_free(ctx);
+ return testresult;
+}
+
+/*
+ * Test SSL_set1_verify/chain_cert_store and SSL_get_verify/chain_cert_store.
+ */
+static int test_set_verify_cert_store_ssl(void)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *ssl = NULL;
+ int testresult = 0;
+ X509_STORE *store = NULL, *new_store = NULL,
+ *cstore = NULL, *new_cstore = NULL;
+
+ /* Create an initial SSL_CTX. */
+ ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method());
+ if (!TEST_ptr(ctx))
+ goto end;
+
+ /* Create an SSL object. */
+ ssl = SSL_new(ctx);
+ if (!TEST_ptr(ssl))
+ goto end;
+
+ /* Retrieve verify store pointer. */
+ if (!TEST_true(SSL_get0_verify_cert_store(ssl, &store)))
+ goto end;
+
+ /* Retrieve chain store pointer. */
+ if (!TEST_true(SSL_get0_chain_cert_store(ssl, &cstore)))
+ goto end;
+
+ /* We haven't set any yet, so this should be NULL. */
+ if (!TEST_ptr_null(store) || !TEST_ptr_null(cstore))
+ goto end;
+
+ /* Create stores. We use separate stores so pointers are different. */
+ new_store = X509_STORE_new();
+ if (!TEST_ptr(new_store))
+ goto end;
+
+ new_cstore = X509_STORE_new();
+ if (!TEST_ptr(new_cstore))
+ goto end;
+
+ /* Set stores. */
+ if (!TEST_true(SSL_set1_verify_cert_store(ssl, new_store)))
+ goto end;
+
+ if (!TEST_true(SSL_set1_chain_cert_store(ssl, new_cstore)))
+ goto end;
+
+ /* Should be able to retrieve the same pointer. */
+ if (!TEST_true(SSL_get0_verify_cert_store(ssl, &store)))
+ goto end;
+
+ if (!TEST_true(SSL_get0_chain_cert_store(ssl, &cstore)))
+ goto end;
+
+ if (!TEST_ptr_eq(store, new_store) || !TEST_ptr_eq(cstore, new_cstore))
+ goto end;
+
+ /* Should be able to unset again. */
+ if (!TEST_true(SSL_set1_verify_cert_store(ssl, NULL)))
+ goto end;
+
+ if (!TEST_true(SSL_set1_chain_cert_store(ssl, NULL)))
+ goto end;
+
+ /* Should now be NULL. */
+ if (!TEST_true(SSL_get0_verify_cert_store(ssl, &store)))
+ goto end;
+
+ if (!TEST_true(SSL_get0_chain_cert_store(ssl, &cstore)))
+ goto end;
+
+ if (!TEST_ptr_null(store) || !TEST_ptr_null(cstore))
+ goto end;
+
+ testresult = 1;
+
+end:
+ X509_STORE_free(new_store);
+ X509_STORE_free(new_cstore);
+ SSL_free(ssl);
+ SSL_CTX_free(ctx);
+ return testresult;
+}
+
+
+static int test_inherit_verify_param(void)
+{
+ int testresult = 0;
+
+ SSL_CTX *ctx = NULL;
+ X509_VERIFY_PARAM *cp = NULL;
+ SSL *ssl = NULL;
+ X509_VERIFY_PARAM *sp = NULL;
+ int hostflags = X509_CHECK_FLAG_NEVER_CHECK_SUBJECT;
+
+ ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method());
+ if (!TEST_ptr(ctx))
+ goto end;
+
+ cp = SSL_CTX_get0_param(ctx);
+ if (!TEST_ptr(cp))
+ goto end;
+ if (!TEST_int_eq(X509_VERIFY_PARAM_get_hostflags(cp), 0))
+ goto end;
+
+ X509_VERIFY_PARAM_set_hostflags(cp, hostflags);
+
+ ssl = SSL_new(ctx);
+ if (!TEST_ptr(ssl))
+ goto end;
+
+ sp = SSL_get0_param(ssl);
+ if (!TEST_ptr(sp))
+ goto end;
+ if (!TEST_int_eq(X509_VERIFY_PARAM_get_hostflags(sp), hostflags))
+ goto end;
+
+ testresult = 1;
+
+ end:
+ SSL_free(ssl);
+ SSL_CTX_free(ctx);
+
+ return testresult;
+}
+
+static int test_load_dhfile(void)
+{
+#ifndef OPENSSL_NO_DH
+ int testresult = 0;
+
+ SSL_CTX *ctx = NULL;
+ SSL_CONF_CTX *cctx = NULL;
+
+ if (dhfile == NULL)
+ return 1;
+
+ if (!TEST_ptr(ctx = SSL_CTX_new_ex(libctx, NULL, TLS_client_method()))
+ || !TEST_ptr(cctx = SSL_CONF_CTX_new()))
+ goto end;
+
+ SSL_CONF_CTX_set_ssl_ctx(cctx, ctx);
+ SSL_CONF_CTX_set_flags(cctx,
+ SSL_CONF_FLAG_CERTIFICATE
+ | SSL_CONF_FLAG_SERVER
+ | SSL_CONF_FLAG_FILE);
+
+ if (!TEST_int_eq(SSL_CONF_cmd(cctx, "DHParameters", dhfile), 2))
+ goto end;
+
+ testresult = 1;
+end:
+ SSL_CONF_CTX_free(cctx);
+ SSL_CTX_free(ctx);
+
+ return testresult;
+#else
+ return TEST_skip("DH not supported by this build");
+#endif
+}
+
+#if !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_DYNAMIC_ENGINE)
+
+static ENGINE *load_dasync(void)
+{
+ ENGINE *e;
+
+ if (!TEST_ptr(e = ENGINE_by_id("dasync")))
+ return NULL;
+
+ if (!TEST_true(ENGINE_init(e))) {
+ ENGINE_free(e);
+ return NULL;
+ }
+
+ if (!TEST_true(ENGINE_register_ciphers(e))) {
+ ENGINE_free(e);
+ return NULL;
+ }
+
+ return e;
+}
+
+/*
+ * Test TLSv1.2 with a pipeline capable cipher. TLSv1.3 and DTLS do not
+ * support this yet. The only pipeline capable cipher that we have is in the
+ * dasync engine (providers don't support this yet), so we have to use
+ * deprecated APIs for this test.
+ *
+ * Test 0: Client has pipelining enabled, server does not
+ * Test 1: Server has pipelining enabled, client does not
+ * Test 2: Client has pipelining enabled, server does not: not enough data to
+ * fill all the pipelines
+ * Test 3: Client has pipelining enabled, server does not: not enough data to
+ * fill all the pipelines by more than a full pipeline's worth
+ * Test 4: Client has pipelining enabled, server does not: more data than all
+ * the available pipelines can take
+ * Test 5: Client has pipelining enabled, server does not: Maximum size pipeline
+ * Test 6: Repeat of test 0, but the engine is loaded late (after the SSL_CTX
+ * is created)
+ */
+static int test_pipelining(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL, *peera, *peerb;
+ int testresult = 0, numreads;
+ /* A 55 byte message */
+ unsigned char *msg = (unsigned char *)
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123";
+ size_t written, readbytes, offset, msglen, fragsize = 10, numpipes = 5;
+ size_t expectedreads;
+ unsigned char *buf = NULL;
+ ENGINE *e = NULL;
+
+ if (idx != 6) {
+ e = load_dasync();
+ if (e == NULL)
+ return 0;
+ }
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), 0,
+ TLS1_2_VERSION, &sctx, &cctx, cert,
+ privkey)))
+ goto end;
+
+ if (idx == 6) {
+ e = load_dasync();
+ if (e == NULL)
+ goto end;
+ /* Now act like test 0 */
+ idx = 0;
+ }
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ if (!TEST_true(SSL_set_cipher_list(clientssl, "AES128-SHA")))
+ goto end;
+
+ /* peera is always configured for pipelining, while peerb is not. */
+ if (idx == 1) {
+ peera = serverssl;
+ peerb = clientssl;
+
+ } else {
+ peera = clientssl;
+ peerb = serverssl;
+ }
+
+ if (idx == 5) {
+ numpipes = 2;
+ /* Maximum allowed fragment size */
+ fragsize = SSL3_RT_MAX_PLAIN_LENGTH;
+ msglen = fragsize * numpipes;
+ msg = OPENSSL_malloc(msglen);
+ if (!TEST_ptr(msg))
+ goto end;
+ if (!TEST_int_gt(RAND_bytes_ex(libctx, msg, msglen, 0), 0))
+ goto end;
+ } else if (idx == 4) {
+ msglen = 55;
+ } else {
+ msglen = 50;
+ }
+ if (idx == 2)
+ msglen -= 2; /* Send 2 less bytes */
+ else if (idx == 3)
+ msglen -= 12; /* Send 12 less bytes */
+
+ buf = OPENSSL_malloc(msglen);
+ if (!TEST_ptr(buf))
+ goto end;
+
+ if (idx == 5) {
+ /*
+ * Test that setting a split send fragment longer than the maximum
+ * allowed fails
+ */
+ if (!TEST_false(SSL_set_split_send_fragment(peera, fragsize + 1)))
+ goto end;
+ }
+
+ /*
+ * In the normal case. We have 5 pipelines with 10 bytes per pipeline
+ * (50 bytes in total). This is a ridiculously small number of bytes -
+ * but sufficient for our purposes
+ */
+ if (!TEST_true(SSL_set_max_pipelines(peera, numpipes))
+ || !TEST_true(SSL_set_split_send_fragment(peera, fragsize)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ /* Write some data from peera to peerb */
+ if (!TEST_true(SSL_write_ex(peera, msg, msglen, &written))
+ || !TEST_size_t_eq(written, msglen))
+ goto end;
+
+ /*
+ * If the pipelining code worked, then we expect all |numpipes| pipelines to
+ * have been used - except in test 3 where only |numpipes - 1| pipelines
+ * will be used. This will result in |numpipes| records (|numpipes - 1| for
+ * test 3) having been sent to peerb. Since peerb is not using read_ahead we
+ * expect this to be read in |numpipes| or |numpipes - 1| separate
+ * SSL_read_ex calls. In the case of test 4, there is then one additional
+ * read for left over data that couldn't fit in the previous pipelines
+ */
+ for (offset = 0, numreads = 0;
+ offset < msglen;
+ offset += readbytes, numreads++) {
+ if (!TEST_true(SSL_read_ex(peerb, buf + offset,
+ msglen - offset, &readbytes)))
+ goto end;
+ }
+
+ expectedreads = idx == 4 ? numpipes + 1
+ : (idx == 3 ? numpipes - 1 : numpipes);
+ if (!TEST_mem_eq(msg, msglen, buf, offset)
+ || !TEST_int_eq(numreads, expectedreads))
+ goto end;
+
+ /*
+ * Write some data from peerb to peera. We do this in up to |numpipes + 1|
+ * chunks to exercise the read pipelining code on peera.
+ */
+ for (offset = 0; offset < msglen; offset += fragsize) {
+ size_t sendlen = msglen - offset;
+
+ if (sendlen > fragsize)
+ sendlen = fragsize;
+ if (!TEST_true(SSL_write_ex(peerb, msg + offset, sendlen, &written))
+ || !TEST_size_t_eq(written, sendlen))
+ goto end;
+ }
+
+ /*
+ * The data was written in |numpipes|, |numpipes - 1| or |numpipes + 1|
+ * separate chunks (depending on which test we are running). If the
+ * pipelining is working then we expect peera to read up to numpipes chunks
+ * and process them in parallel, giving back the complete result in a single
+ * call to SSL_read_ex
+ */
+ if (!TEST_true(SSL_read_ex(peera, buf, msglen, &readbytes))
+ || !TEST_size_t_le(readbytes, msglen))
+ goto end;
+
+ if (idx == 4) {
+ size_t readbytes2;
+
+ if (!TEST_true(SSL_read_ex(peera, buf + readbytes,
+ msglen - readbytes, &readbytes2)))
+ goto end;
+ readbytes += readbytes2;
+ if (!TEST_size_t_le(readbytes, msglen))
+ goto end;
+ }
+
+ if (!TEST_mem_eq(msg, msglen, buf, readbytes))
+ goto end;
+
+ testresult = 1;
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ if (e != NULL) {
+ ENGINE_unregister_ciphers(e);
+ ENGINE_finish(e);
+ ENGINE_free(e);
+ }
+ OPENSSL_free(buf);
+ if (fragsize == SSL3_RT_MAX_PLAIN_LENGTH)
+ OPENSSL_free(msg);
+ return testresult;
+}
+#endif /* !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_DYNAMIC_ENGINE) */
+
+/*
+ * Force a write retry during handshaking. We test various combinations of
+ * scenarios. We test a large certificate message which will fill the buffering
+ * BIO used in the handshake. We try with client auth on and off. Finally we
+ * also try a BIO that indicates retry via a 0 return. BIO_write() is documented
+ * to indicate retry via -1 - but sometimes BIOs don't do that.
+ *
+ * Test 0: Standard certificate message
+ * Test 1: Large certificate message
+ * Test 2: Standard cert, verify peer
+ * Test 3: Large cert, verify peer
+ * Test 4: Standard cert, BIO returns 0 on retry
+ * Test 5: Large cert, BIO returns 0 on retry
+ * Test 6: Standard cert, verify peer, BIO returns 0 on retry
+ * Test 7: Large cert, verify peer, BIO returns 0 on retry
+ * Test 8-15: Repeat of above with TLSv1.2
+ */
+static int test_handshake_retry(int idx)
+{
+ SSL_CTX *cctx = NULL, *sctx = NULL;
+ SSL *clientssl = NULL, *serverssl = NULL;
+ int testresult = 0;
+ BIO *tmp = NULL, *bretry = BIO_new(bio_s_always_retry());
+ int maxversion = 0;
+
+ if (!TEST_ptr(bretry))
+ goto end;
+
+#ifndef OPENSSL_NO_TLS1_2
+ if ((idx & 8) == 8)
+ maxversion = TLS1_2_VERSION;
+#else
+ if ((idx & 8) == 8)
+ return TEST_skip("No TLSv1.2");
+#endif
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ TLS_client_method(), 0, maxversion,
+ &sctx, &cctx, cert, privkey)))
+ goto end;
+
+ /*
+ * Add a large amount of data to fill the buffering BIO used by the SSL
+ * object
+ */
+ if ((idx & 1) == 1 && !add_large_cert_chain(sctx))
+ goto end;
+
+ /*
+ * We don't actually configure a client cert, but neither do we fail if one
+ * isn't present.
+ */
+ if ((idx & 2) == 2)
+ SSL_CTX_set_verify(sctx, SSL_VERIFY_PEER, NULL);
+
+ if ((idx & 4) == 4)
+ set_always_retry_err_val(0);
+
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
+ &clientssl, NULL, NULL)))
+ goto end;
+
+ tmp = SSL_get_wbio(serverssl);
+ if (!TEST_ptr(tmp) || !TEST_true(BIO_up_ref(tmp))) {
+ tmp = NULL;
+ goto end;
+ }
+ SSL_set0_wbio(serverssl, bretry);
+ bretry = NULL;
+
+ if (!TEST_int_eq(SSL_connect(clientssl), -1))
+ goto end;
+
+ if (!TEST_int_eq(SSL_accept(serverssl), -1)
+ || !TEST_int_eq(SSL_get_error(serverssl, -1), SSL_ERROR_WANT_WRITE))
+ goto end;
+
+ /* Restore a BIO that will let the write succeed */
+ SSL_set0_wbio(serverssl, tmp);
+ tmp = NULL;
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
+ goto end;
+
+ testresult = 1;
+end:
+ SSL_free(serverssl);
+ SSL_free(clientssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ BIO_free(bretry);
+ BIO_free(tmp);
+ set_always_retry_err_val(-1);
+ return testresult;
+}
+
+OPT_TEST_DECLARE_USAGE("certfile privkeyfile srpvfile tmpfile provider config dhfile\n")
+
+int setup_tests(void)
+{
+ char *modulename;
+ char *configfile;
+
+ libctx = OSSL_LIB_CTX_new();
+ if (!TEST_ptr(libctx))
+ return 0;
+
+ defctxnull = OSSL_PROVIDER_load(NULL, "null");
+
+ /*
+ * Verify that the default and fips providers in the default libctx are not
+ * available
+ */
+ if (!TEST_false(OSSL_PROVIDER_available(NULL, "default"))
+ || !TEST_false(OSSL_PROVIDER_available(NULL, "fips")))
+ return 0;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(certsdir = test_get_argument(0))
+ || !TEST_ptr(srpvfile = test_get_argument(1))
+ || !TEST_ptr(tmpfilename = test_get_argument(2))
+ || !TEST_ptr(modulename = test_get_argument(3))
+ || !TEST_ptr(configfile = test_get_argument(4))
+ || !TEST_ptr(dhfile = test_get_argument(5)))
+ return 0;
+
+ if (!TEST_true(OSSL_LIB_CTX_load_config(libctx, configfile)))
+ return 0;
+
+ /* Check we have the expected provider available */
+ if (!TEST_true(OSSL_PROVIDER_available(libctx, modulename)))
+ return 0;
+
+ /* Check the default provider is not available */
+ if (strcmp(modulename, "default") != 0
+ && !TEST_false(OSSL_PROVIDER_available(libctx, "default")))
+ return 0;
+
+ if (strcmp(modulename, "fips") == 0)
+ is_fips = 1;
+
+ /*
+ * We add, but don't load the test "tls-provider". We'll load it when we
+ * need it.
+ */
+ if (!TEST_true(OSSL_PROVIDER_add_builtin(libctx, "tls-provider",
+ tls_provider_init)))
+ return 0;
+
+
+ if (getenv("OPENSSL_TEST_GETCOUNTS") != NULL) {
+#ifdef OPENSSL_NO_CRYPTO_MDEBUG
+ TEST_error("not supported in this build");
+ return 0;
+#else
+ int i, mcount, rcount, fcount;
+
+ for (i = 0; i < 4; i++)
+ test_export_key_mat(i);
+ CRYPTO_get_alloc_counts(&mcount, &rcount, &fcount);
+ test_printf_stdout("malloc %d realloc %d free %d\n",
+ mcount, rcount, fcount);
+ return 1;
+#endif
+ }
+
+ cert = test_mk_file_path(certsdir, "servercert.pem");
+ if (cert == NULL)
+ goto err;
+
+ privkey = test_mk_file_path(certsdir, "serverkey.pem");
+ if (privkey == NULL)
+ goto err;
+
+ cert2 = test_mk_file_path(certsdir, "server-ecdsa-cert.pem");
+ if (cert2 == NULL)
+ goto err;
+
+ privkey2 = test_mk_file_path(certsdir, "server-ecdsa-key.pem");
+ if (privkey2 == NULL)
+ goto err;
+
+ cert1024 = test_mk_file_path(certsdir, "ee-cert-1024.pem");
+ if (cert1024 == NULL)
+ goto err;
+
+ privkey1024 = test_mk_file_path(certsdir, "ee-key-1024.pem");
+ if (privkey1024 == NULL)
+ goto err;
+
+ cert3072 = test_mk_file_path(certsdir, "ee-cert-3072.pem");
+ if (cert3072 == NULL)
+ goto err;
+
+ privkey3072 = test_mk_file_path(certsdir, "ee-key-3072.pem");
+ if (privkey3072 == NULL)
+ goto err;
+
+ cert4096 = test_mk_file_path(certsdir, "ee-cert-4096.pem");
+ if (cert4096 == NULL)
+ goto err;
+
+ privkey4096 = test_mk_file_path(certsdir, "ee-key-4096.pem");
+ if (privkey4096 == NULL)
+ goto err;
+
+ cert8192 = test_mk_file_path(certsdir, "ee-cert-8192.pem");
+ if (cert8192 == NULL)
+ goto err;
+
+ privkey8192 = test_mk_file_path(certsdir, "ee-key-8192.pem");
+ if (privkey8192 == NULL)
+ goto err;
+
+#if !defined(OPENSSL_NO_KTLS) && !defined(OPENSSL_NO_SOCK)
+# if !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3)
+ ADD_ALL_TESTS(test_ktls, NUM_KTLS_TEST_CIPHERS * 4);
+ ADD_ALL_TESTS(test_ktls_sendfile, NUM_KTLS_TEST_CIPHERS);
+# endif
+#endif
+ ADD_TEST(test_large_message_tls);
+ ADD_TEST(test_large_message_tls_read_ahead);
+#ifndef OPENSSL_NO_DTLS
+ ADD_TEST(test_large_message_dtls);
+#endif
+ ADD_ALL_TESTS(test_large_app_data, 28);
+ ADD_TEST(test_cleanse_plaintext);
+#ifndef OPENSSL_NO_OCSP
+ ADD_TEST(test_tlsext_status_type);
+#endif
+ ADD_TEST(test_session_with_only_int_cache);
+ ADD_TEST(test_session_with_only_ext_cache);
+ ADD_TEST(test_session_with_both_cache);
+ ADD_TEST(test_session_wo_ca_names);
+#ifndef OSSL_NO_USABLE_TLS1_3
+ ADD_ALL_TESTS(test_stateful_tickets, 3);
+ ADD_ALL_TESTS(test_stateless_tickets, 3);
+ ADD_TEST(test_psk_tickets);
+ ADD_ALL_TESTS(test_extra_tickets, 6);
+#endif
+ ADD_ALL_TESTS(test_ssl_set_bio, TOTAL_SSL_SET_BIO_TESTS);
+ ADD_TEST(test_ssl_bio_pop_next_bio);
+ ADD_TEST(test_ssl_bio_pop_ssl_bio);
+ ADD_TEST(test_ssl_bio_change_rbio);
+ ADD_TEST(test_ssl_bio_change_wbio);
+#if !defined(OPENSSL_NO_TLS1_2) || defined(OSSL_NO_USABLE_TLS1_3)
+ ADD_ALL_TESTS(test_set_sigalgs, OSSL_NELEM(testsigalgs) * 2);
+ ADD_TEST(test_keylog);
+#endif
+#ifndef OSSL_NO_USABLE_TLS1_3
+ ADD_TEST(test_keylog_no_master_key);
+#endif
+ ADD_TEST(test_client_cert_verify_cb);
+ ADD_TEST(test_ssl_build_cert_chain);
+ ADD_TEST(test_ssl_ctx_build_cert_chain);
+#ifndef OPENSSL_NO_TLS1_2
+ ADD_TEST(test_client_hello_cb);
+ ADD_TEST(test_no_ems);
+ ADD_TEST(test_ccs_change_cipher);
+#endif
+#ifndef OSSL_NO_USABLE_TLS1_3
+ ADD_ALL_TESTS(test_early_data_read_write, 6);
+ /*
+ * We don't do replay tests for external PSK. Replay protection isn't used
+ * in that scenario.
+ */
+ ADD_ALL_TESTS(test_early_data_replay, 2);
+ ADD_ALL_TESTS(test_early_data_skip, OSSL_NELEM(ciphersuites) * 3);
+ ADD_ALL_TESTS(test_early_data_skip_hrr, OSSL_NELEM(ciphersuites) * 3);
+ ADD_ALL_TESTS(test_early_data_skip_hrr_fail, OSSL_NELEM(ciphersuites) * 3);
+ ADD_ALL_TESTS(test_early_data_skip_abort, OSSL_NELEM(ciphersuites) * 3);
+ ADD_ALL_TESTS(test_early_data_not_sent, 3);
+ ADD_ALL_TESTS(test_early_data_psk, 8);
+ ADD_ALL_TESTS(test_early_data_psk_with_all_ciphers, 5);
+ ADD_ALL_TESTS(test_early_data_not_expected, 3);
+# ifndef OPENSSL_NO_TLS1_2
+ ADD_ALL_TESTS(test_early_data_tls1_2, 3);
+# endif
+#endif
+#ifndef OSSL_NO_USABLE_TLS1_3
+ ADD_ALL_TESTS(test_set_ciphersuite, 10);
+ ADD_TEST(test_ciphersuite_change);
+ ADD_ALL_TESTS(test_tls13_ciphersuite, 4);
+# ifdef OPENSSL_NO_PSK
+ ADD_ALL_TESTS(test_tls13_psk, 1);
+# else
+ ADD_ALL_TESTS(test_tls13_psk, 4);
+# endif /* OPENSSL_NO_PSK */
+# ifndef OPENSSL_NO_TLS1_2
+ /* Test with both TLSv1.3 and 1.2 versions */
+ ADD_ALL_TESTS(test_key_exchange, 14);
+# if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_DH)
+ ADD_ALL_TESTS(test_negotiated_group,
+ 4 * (OSSL_NELEM(ecdhe_kexch_groups)
+ + OSSL_NELEM(ffdhe_kexch_groups)));
+# endif
+# else
+ /* Test with only TLSv1.3 versions */
+ ADD_ALL_TESTS(test_key_exchange, 12);
+# endif
+ ADD_ALL_TESTS(test_custom_exts, 6);
+ ADD_TEST(test_stateless);
+ ADD_TEST(test_pha_key_update);
+#else
+ ADD_ALL_TESTS(test_custom_exts, 3);
+#endif
+ ADD_ALL_TESTS(test_export_key_mat, 6);
+#ifndef OSSL_NO_USABLE_TLS1_3
+ ADD_ALL_TESTS(test_export_key_mat_early, 3);
+ ADD_TEST(test_key_update);
+ ADD_ALL_TESTS(test_key_update_peer_in_write, 2);
+ ADD_ALL_TESTS(test_key_update_peer_in_read, 2);
+ ADD_ALL_TESTS(test_key_update_local_in_write, 2);
+ ADD_ALL_TESTS(test_key_update_local_in_read, 2);
+#endif
+ ADD_ALL_TESTS(test_ssl_clear, 2);
+ ADD_ALL_TESTS(test_max_fragment_len_ext, OSSL_NELEM(max_fragment_len_test));
+#if !defined(OPENSSL_NO_SRP) && !defined(OPENSSL_NO_TLS1_2)
+ ADD_ALL_TESTS(test_srp, 6);
+#endif
+ ADD_ALL_TESTS(test_info_callback, 6);
+ ADD_ALL_TESTS(test_ssl_pending, 2);
+ ADD_ALL_TESTS(test_ssl_get_shared_ciphers, OSSL_NELEM(shared_ciphers_data));
+ ADD_ALL_TESTS(test_ticket_callbacks, 20);
+ ADD_ALL_TESTS(test_shutdown, 7);
+ ADD_ALL_TESTS(test_incorrect_shutdown, 2);
+ ADD_ALL_TESTS(test_cert_cb, 6);
+ ADD_ALL_TESTS(test_client_cert_cb, 2);
+ ADD_ALL_TESTS(test_ca_names, 3);
+#ifndef OPENSSL_NO_TLS1_2
+ ADD_ALL_TESTS(test_multiblock_write, OSSL_NELEM(multiblock_cipherlist_data));
+#endif
+ ADD_ALL_TESTS(test_servername, 10);
+#if !defined(OPENSSL_NO_EC) \
+ && (!defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2))
+ ADD_ALL_TESTS(test_sigalgs_available, 6);
+#endif
+#ifndef OPENSSL_NO_TLS1_3
+ ADD_ALL_TESTS(test_pluggable_group, 2);
+#endif
+#ifndef OPENSSL_NO_TLS1_2
+ ADD_TEST(test_ssl_dup);
+# ifndef OPENSSL_NO_DH
+ ADD_ALL_TESTS(test_set_tmp_dh, 11);
+ ADD_ALL_TESTS(test_dh_auto, 7);
+# endif
+#endif
+#ifndef OSSL_NO_USABLE_TLS1_3
+ ADD_TEST(test_sni_tls13);
+ ADD_ALL_TESTS(test_ticket_lifetime, 2);
+#endif
+ ADD_TEST(test_inherit_verify_param);
+ ADD_TEST(test_set_alpn);
+ ADD_TEST(test_set_verify_cert_store_ssl_ctx);
+ ADD_TEST(test_set_verify_cert_store_ssl);
+ ADD_ALL_TESTS(test_session_timeout, 1);
+ ADD_TEST(test_load_dhfile);
+#if !defined(OPENSSL_NO_TLS1_2) && !defined(OSSL_NO_USABLE_TLS1_3)
+ ADD_ALL_TESTS(test_serverinfo_custom, 4);
+#endif
+#if !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_DYNAMIC_ENGINE)
+ ADD_ALL_TESTS(test_pipelining, 7);
+#endif
+ ADD_ALL_TESTS(test_handshake_retry, 16);
+ return 1;
+
+ err:
+ OPENSSL_free(cert);
+ OPENSSL_free(privkey);
+ OPENSSL_free(cert2);
+ OPENSSL_free(privkey2);
+ return 0;
+}
+
+void cleanup_tests(void)
+{
+# if !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_DH)
+ EVP_PKEY_free(tmp_dh_params);
+#endif
+ OPENSSL_free(cert);
+ OPENSSL_free(privkey);
+ OPENSSL_free(cert2);
+ OPENSSL_free(privkey2);
+ OPENSSL_free(cert1024);
+ OPENSSL_free(privkey1024);
+ OPENSSL_free(cert3072);
+ OPENSSL_free(privkey3072);
+ OPENSSL_free(cert4096);
+ OPENSSL_free(privkey4096);
+ OPENSSL_free(cert8192);
+ OPENSSL_free(privkey8192);
+ bio_s_mempacket_test_free();
+ bio_s_always_retry_free();
+ OSSL_PROVIDER_unload(defctxnull);
+ OSSL_LIB_CTX_free(libctx);
+}
diff --git a/test/sslbuffertest.c b/test/sslbuffertest.c
new file mode 100644
index 000000000000..3c3e69d61da8
--- /dev/null
+++ b/test/sslbuffertest.c
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2016-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 may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <string.h>
+#include <openssl/ssl.h>
+#include <openssl/bio.h>
+#include <openssl/err.h>
+
+#include "internal/packet.h"
+
+#include "helpers/ssltestlib.h"
+#include "testutil.h"
+
+struct async_ctrs {
+ unsigned int rctr;
+ unsigned int wctr;
+};
+
+static SSL_CTX *serverctx = NULL;
+static SSL_CTX *clientctx = NULL;
+
+#define MAX_ATTEMPTS 100
+
+
+/*
+ * There are 9 passes in the tests
+ * 0 = control test
+ * tests during writes
+ * 1 = free buffers
+ * 2 = + allocate buffers after free
+ * 3 = + allocate buffers again
+ * 4 = + free buffers after allocation
+ * tests during reads
+ * 5 = + free buffers
+ * 6 = + free buffers again
+ * 7 = + allocate buffers after free
+ * 8 = + free buffers after allocation
+ */
+static int test_func(int test)
+{
+ int result = 0;
+ SSL *serverssl = NULL, *clientssl = NULL;
+ int ret;
+ size_t i, j;
+ const char testdata[] = "Test data";
+ char buf[sizeof(testdata)];
+
+ if (!TEST_true(create_ssl_objects(serverctx, clientctx, &serverssl, &clientssl,
+ NULL, NULL))) {
+ TEST_error("Test %d failed: Create SSL objects failed\n", test);
+ goto end;
+ }
+
+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) {
+ TEST_error("Test %d failed: Create SSL connection failed\n", test);
+ goto end;
+ }
+
+ /*
+ * Send and receive some test data. Do the whole thing twice to ensure
+ * we hit at least one async event in both reading and writing
+ */
+ for (j = 0; j < 2; j++) {
+ int len;
+
+ /*
+
+ * Write some test data. It should never take more than 2 attempts
+ * (the first one might be a retryable fail).
+ */
+ for (ret = -1, i = 0, len = 0; len != sizeof(testdata) && i < 2;
+ i++) {
+ /* test == 0 mean to free/allocate = control */
+ if (test >= 1 && !TEST_true(SSL_free_buffers(clientssl)))
+ goto end;
+ if (test >= 2 && !TEST_true(SSL_alloc_buffers(clientssl)))
+ goto end;
+ /* allocate a second time */
+ if (test >= 3 && !TEST_true(SSL_alloc_buffers(clientssl)))
+ goto end;
+ if (test >= 4 && !TEST_true(SSL_free_buffers(clientssl)))
+ goto end;
+
+ ret = SSL_write(clientssl, testdata + len,
+ sizeof(testdata) - len);
+ if (ret > 0) {
+ len += ret;
+ } else {
+ int ssl_error = SSL_get_error(clientssl, ret);
+
+ if (ssl_error == SSL_ERROR_SYSCALL ||
+ ssl_error == SSL_ERROR_SSL) {
+ TEST_error("Test %d failed: Failed to write app data\n", test);
+ goto end;
+ }
+ }
+ }
+ if (!TEST_size_t_eq(len, sizeof(testdata)))
+ goto end;
+ /*
+ * Now read the test data. It may take more attempts here because
+ * it could fail once for each byte read, including all overhead
+ * bytes from the record header/padding etc.
+ */
+ for (ret = -1, i = 0, len = 0; len != sizeof(testdata) &&
+ i < MAX_ATTEMPTS; i++)
+ {
+ if (test >= 5 && !TEST_true(SSL_free_buffers(serverssl)))
+ goto end;
+ /* free a second time */
+ if (test >= 6 && !TEST_true(SSL_free_buffers(serverssl)))
+ goto end;
+ if (test >= 7 && !TEST_true(SSL_alloc_buffers(serverssl)))
+ goto end;
+ if (test >= 8 && !TEST_true(SSL_free_buffers(serverssl)))
+ goto end;
+
+ ret = SSL_read(serverssl, buf + len, sizeof(buf) - len);
+ if (ret > 0) {
+ len += ret;
+ } else {
+ int ssl_error = SSL_get_error(serverssl, ret);
+
+ if (ssl_error == SSL_ERROR_SYSCALL ||
+ ssl_error == SSL_ERROR_SSL) {
+ TEST_error("Test %d failed: Failed to read app data\n", test);
+ goto end;
+ }
+ }
+ }
+ if (!TEST_mem_eq(buf, len, testdata, sizeof(testdata)))
+ goto end;
+ }
+
+ result = 1;
+ end:
+ if (!result)
+ ERR_print_errors_fp(stderr);
+
+ SSL_free(clientssl);
+ SSL_free(serverssl);
+
+ return result;
+}
+
+OPT_TEST_DECLARE_USAGE("certfile privkeyfile\n")
+
+int setup_tests(void)
+{
+ char *cert, *pkey;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(cert = test_get_argument(0))
+ || !TEST_ptr(pkey = test_get_argument(1)))
+ return 0;
+
+ if (!create_ssl_ctx_pair(NULL, TLS_server_method(), TLS_client_method(),
+ TLS1_VERSION, 0,
+ &serverctx, &clientctx, cert, pkey)) {
+ TEST_error("Failed to create SSL_CTX pair\n");
+ return 0;
+ }
+
+ ADD_ALL_TESTS(test_func, 9);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ SSL_CTX_free(clientctx);
+ SSL_CTX_free(serverctx);
+}
diff --git a/test/sslcorrupttest.c b/test/sslcorrupttest.c
new file mode 100644
index 000000000000..deb2a2c31c4f
--- /dev/null
+++ b/test/sslcorrupttest.c
@@ -0,0 +1,280 @@
+/*
+ * Copyright 2016-2022 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 "helpers/ssltestlib.h"
+#include "testutil.h"
+
+static int docorrupt = 0;
+
+static void copy_flags(BIO *bio)
+{
+ int flags;
+ BIO *next = BIO_next(bio);
+
+ flags = BIO_test_flags(next, BIO_FLAGS_SHOULD_RETRY | BIO_FLAGS_RWS);
+ BIO_clear_flags(bio, BIO_FLAGS_SHOULD_RETRY | BIO_FLAGS_RWS);
+ BIO_set_flags(bio, flags);
+}
+
+static int tls_corrupt_read(BIO *bio, char *out, int outl)
+{
+ int ret;
+ BIO *next = BIO_next(bio);
+
+ ret = BIO_read(next, out, outl);
+ copy_flags(bio);
+
+ return ret;
+}
+
+static int tls_corrupt_write(BIO *bio, const char *in, int inl)
+{
+ int ret;
+ BIO *next = BIO_next(bio);
+ char *copy;
+
+ if (docorrupt) {
+ if (!TEST_ptr(copy = OPENSSL_memdup(in, inl)))
+ return 0;
+ /* corrupt last bit of application data */
+ copy[inl-1] ^= 1;
+ ret = BIO_write(next, copy, inl);
+ OPENSSL_free(copy);
+ } else {
+ ret = BIO_write(next, in, inl);
+ }
+ copy_flags(bio);
+
+ return ret;
+}
+
+static long tls_corrupt_ctrl(BIO *bio, int cmd, long num, void *ptr)
+{
+ long ret;
+ BIO *next = BIO_next(bio);
+
+ if (next == NULL)
+ return 0;
+
+ switch (cmd) {
+ case BIO_CTRL_DUP:
+ ret = 0L;
+ break;
+ default:
+ ret = BIO_ctrl(next, cmd, num, ptr);
+ break;
+ }
+ return ret;
+}
+
+static int tls_corrupt_gets(BIO *bio, char *buf, int size)
+{
+ /* We don't support this - not needed anyway */
+ return -1;
+}
+
+static int tls_corrupt_puts(BIO *bio, const char *str)
+{
+ /* We don't support this - not needed anyway */
+ return -1;
+}
+
+static int tls_corrupt_new(BIO *bio)
+{
+ BIO_set_init(bio, 1);
+
+ return 1;
+}
+
+static int tls_corrupt_free(BIO *bio)
+{
+ BIO_set_init(bio, 0);
+
+ return 1;
+}
+
+#define BIO_TYPE_CUSTOM_FILTER (0x80 | BIO_TYPE_FILTER)
+
+static BIO_METHOD *method_tls_corrupt = NULL;
+
+/* Note: Not thread safe! */
+static const BIO_METHOD *bio_f_tls_corrupt_filter(void)
+{
+ if (method_tls_corrupt == NULL) {
+ method_tls_corrupt = BIO_meth_new(BIO_TYPE_CUSTOM_FILTER,
+ "TLS corrupt filter");
+ if ( method_tls_corrupt == NULL
+ || !BIO_meth_set_write(method_tls_corrupt, tls_corrupt_write)
+ || !BIO_meth_set_read(method_tls_corrupt, tls_corrupt_read)
+ || !BIO_meth_set_puts(method_tls_corrupt, tls_corrupt_puts)
+ || !BIO_meth_set_gets(method_tls_corrupt, tls_corrupt_gets)
+ || !BIO_meth_set_ctrl(method_tls_corrupt, tls_corrupt_ctrl)
+ || !BIO_meth_set_create(method_tls_corrupt, tls_corrupt_new)
+ || !BIO_meth_set_destroy(method_tls_corrupt, tls_corrupt_free))
+ return NULL;
+ }
+ return method_tls_corrupt;
+}
+
+static void bio_f_tls_corrupt_filter_free(void)
+{
+ BIO_meth_free(method_tls_corrupt);
+}
+
+/*
+ * The test is supposed to be executed with RSA key, customarily
+ * with apps/server.pem used even in other tests. For this reason
+ * |cipher_list| is initialized with RSA ciphers' names. This
+ * naturally means that if test is to be re-purposed for other
+ * type of key, then NID_auth_* filter below would need adjustment.
+ */
+static const char **cipher_list = NULL;
+
+static int setup_cipher_list(void)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *ssl = NULL;
+ STACK_OF(SSL_CIPHER) *sk_ciphers = NULL;
+ int i, j, numciphers = 0;
+
+ if (!TEST_ptr(ctx = SSL_CTX_new(TLS_server_method()))
+ || !TEST_ptr(ssl = SSL_new(ctx))
+ || !TEST_ptr(sk_ciphers = SSL_get1_supported_ciphers(ssl)))
+ goto err;
+
+ /*
+ * The |cipher_list| will be filled only with names of RSA ciphers,
+ * so that some of the allocated space will be wasted, but the loss
+ * is deemed acceptable...
+ */
+ cipher_list = OPENSSL_malloc(sk_SSL_CIPHER_num(sk_ciphers) *
+ sizeof(cipher_list[0]));
+ if (!TEST_ptr(cipher_list))
+ goto err;
+
+ for (j = 0, i = 0; i < sk_SSL_CIPHER_num(sk_ciphers); i++) {
+ const SSL_CIPHER *cipher = sk_SSL_CIPHER_value(sk_ciphers, i);
+
+ if (SSL_CIPHER_get_auth_nid(cipher) == NID_auth_rsa)
+ cipher_list[j++] = SSL_CIPHER_get_name(cipher);
+ }
+ if (TEST_int_ne(j, 0))
+ numciphers = j;
+
+err:
+ sk_SSL_CIPHER_free(sk_ciphers);
+ SSL_free(ssl);
+ SSL_CTX_free(ctx);
+
+ return numciphers;
+}
+
+static char *cert = NULL;
+static char *privkey = NULL;
+
+static int test_ssl_corrupt(int testidx)
+{
+ static unsigned char junk[16000] = { 0 };
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *server = NULL, *client = NULL;
+ BIO *c_to_s_fbio;
+ int testresult = 0;
+ STACK_OF(SSL_CIPHER) *ciphers;
+ const SSL_CIPHER *currcipher;
+ int err;
+
+ docorrupt = 0;
+
+ TEST_info("Starting #%d, %s", testidx, cipher_list[testidx]);
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, TLS_server_method(),
+ TLS_client_method(),
+ TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey)))
+ return 0;
+
+ if (!TEST_true(SSL_CTX_set_dh_auto(sctx, 1))
+ || !TEST_true(SSL_CTX_set_cipher_list(cctx, cipher_list[testidx]))
+ || !TEST_true(SSL_CTX_set_ciphersuites(cctx, ""))
+ || !TEST_ptr(ciphers = SSL_CTX_get_ciphers(cctx))
+ || !TEST_int_eq(sk_SSL_CIPHER_num(ciphers), 1)
+ || !TEST_ptr(currcipher = sk_SSL_CIPHER_value(ciphers, 0)))
+ goto end;
+
+ /*
+ * No ciphers we are using are TLSv1.3 compatible so we should not attempt
+ * to negotiate TLSv1.3
+ */
+ if (!TEST_true(SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION)))
+ goto end;
+
+ if (!TEST_ptr(c_to_s_fbio = BIO_new(bio_f_tls_corrupt_filter())))
+ goto end;
+
+ /* BIO is freed by create_ssl_connection on error */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &server, &client, NULL,
+ c_to_s_fbio)))
+ goto end;
+
+ if (!TEST_true(create_ssl_connection(server, client, SSL_ERROR_NONE)))
+ goto end;
+
+ docorrupt = 1;
+
+ if (!TEST_int_ge(SSL_write(client, junk, sizeof(junk)), 0))
+ goto end;
+
+ if (!TEST_int_lt(SSL_read(server, junk, sizeof(junk)), 0))
+ goto end;
+
+ do {
+ err = ERR_get_error();
+
+ if (err == 0) {
+ TEST_error("Decryption failed or bad record MAC not seen");
+ goto end;
+ }
+ } while (ERR_GET_REASON(err) != SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
+
+ testresult = 1;
+ end:
+ SSL_free(server);
+ SSL_free(client);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+ return testresult;
+}
+
+OPT_TEST_DECLARE_USAGE("certfile privkeyfile\n")
+
+int setup_tests(void)
+{
+ int n;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(cert = test_get_argument(0))
+ || !TEST_ptr(privkey = test_get_argument(1)))
+ return 0;
+
+ n = setup_cipher_list();
+ if (n > 0)
+ ADD_ALL_TESTS(test_ssl_corrupt, n);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ bio_f_tls_corrupt_filter_free();
+ OPENSSL_free(cipher_list);
+}
diff --git a/test/stack_test.c b/test/stack_test.c
new file mode 100644
index 000000000000..3d60ef654e19
--- /dev/null
+++ b/test/stack_test.c
@@ -0,0 +1,388 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2017, Oracle and/or its affiliates. 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 <string.h>
+
+#include <openssl/opensslconf.h>
+#include <openssl/safestack.h>
+#include <openssl/err.h>
+#include <openssl/crypto.h>
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+/* The macros below generate unused functions which error out one of the clang
+ * builds. We disable this check here.
+ */
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
+typedef struct {
+ int n;
+ char c;
+} SS;
+
+typedef union {
+ int n;
+ char c;
+} SU;
+
+DEFINE_SPECIAL_STACK_OF(sint, int)
+DEFINE_SPECIAL_STACK_OF_CONST(uchar, unsigned char)
+DEFINE_STACK_OF(SS)
+DEFINE_STACK_OF_CONST(SU)
+
+static int int_compare(const int *const *a, const int *const *b)
+{
+ if (**a < **b)
+ return -1;
+ if (**a > **b)
+ return 1;
+ return 0;
+}
+
+static int test_int_stack(int reserve)
+{
+ static int v[] = { 1, 2, -4, 16, 999, 1, -173, 1, 9 };
+ static int notpresent = -1;
+ const int n = OSSL_NELEM(v);
+ static struct {
+ int value;
+ int unsorted;
+ int sorted;
+ int ex;
+ } finds[] = {
+ { 2, 1, 5, 5 },
+ { 9, 7, 6, 6 },
+ { -173, 5, 0, 0 },
+ { 999, 3, 8, 8 },
+ { 0, -1, -1, 1 }
+ };
+ const int n_finds = OSSL_NELEM(finds);
+ static struct {
+ int value;
+ int ex;
+ } exfinds[] = {
+ { 3, 5 },
+ { 1000, 8 },
+ { 20, 8 },
+ { -999, 0 },
+ { -5, 0 },
+ { 8, 5 }
+ };
+ const int n_exfinds = OSSL_NELEM(exfinds);
+ STACK_OF(sint) *s = sk_sint_new_null();
+ int i;
+ int testresult = 0;
+
+ if (!TEST_ptr(s)
+ || (reserve > 0 && !TEST_true(sk_sint_reserve(s, 5 * reserve))))
+ goto end;
+
+ /* Check push and num */
+ for (i = 0; i < n; i++) {
+ if (!TEST_int_eq(sk_sint_num(s), i)) {
+ TEST_info("int stack size %d", i);
+ goto end;
+ }
+ sk_sint_push(s, v + i);
+ }
+ if (!TEST_int_eq(sk_sint_num(s), n))
+ goto end;
+
+ /* check the values */
+ for (i = 0; i < n; i++)
+ if (!TEST_ptr_eq(sk_sint_value(s, i), v + i)) {
+ TEST_info("int value %d", i);
+ goto end;
+ }
+
+ /* find unsorted -- the pointers are compared */
+ for (i = 0; i < n_finds; i++) {
+ int *val = (finds[i].unsorted == -1) ? &notpresent
+ : v + finds[i].unsorted;
+
+ if (!TEST_int_eq(sk_sint_find(s, val), finds[i].unsorted)) {
+ TEST_info("int unsorted find %d", i);
+ goto end;
+ }
+ }
+
+ /* find_ex unsorted */
+ for (i = 0; i < n_finds; i++) {
+ int *val = (finds[i].unsorted == -1) ? &notpresent
+ : v + finds[i].unsorted;
+
+ if (!TEST_int_eq(sk_sint_find_ex(s, val), finds[i].unsorted)) {
+ TEST_info("int unsorted find_ex %d", i);
+ goto end;
+ }
+ }
+
+ /* sorting */
+ if (!TEST_false(sk_sint_is_sorted(s)))
+ goto end;
+ (void)sk_sint_set_cmp_func(s, &int_compare);
+ sk_sint_sort(s);
+ if (!TEST_true(sk_sint_is_sorted(s)))
+ goto end;
+
+ /* find sorted -- the value is matched so we don't need to locate it */
+ for (i = 0; i < n_finds; i++)
+ if (!TEST_int_eq(sk_sint_find(s, &finds[i].value), finds[i].sorted)) {
+ TEST_info("int sorted find %d", i);
+ goto end;
+ }
+
+ /* find_ex sorted */
+ for (i = 0; i < n_finds; i++)
+ if (!TEST_int_eq(sk_sint_find_ex(s, &finds[i].value), finds[i].ex)) {
+ TEST_info("int sorted find_ex present %d", i);
+ goto end;
+ }
+ for (i = 0; i < n_exfinds; i++)
+ if (!TEST_int_eq(sk_sint_find_ex(s, &exfinds[i].value), exfinds[i].ex)){
+ TEST_info("int sorted find_ex absent %d", i);
+ goto end;
+ }
+
+ /* shift */
+ if (!TEST_ptr_eq(sk_sint_shift(s), v + 6))
+ goto end;
+
+ testresult = 1;
+end:
+ sk_sint_free(s);
+ return testresult;
+}
+
+static int uchar_compare(const unsigned char *const *a,
+ const unsigned char *const *b)
+{
+ return **a - (signed int)**b;
+}
+
+static int test_uchar_stack(int reserve)
+{
+ static const unsigned char v[] = { 1, 3, 7, 5, 255, 0 };
+ const int n = OSSL_NELEM(v);
+ STACK_OF(uchar) *s = sk_uchar_new(&uchar_compare), *r = NULL;
+ int i;
+ int testresult = 0;
+
+ if (!TEST_ptr(s)
+ || (reserve > 0 && !TEST_true(sk_uchar_reserve(s, 5 * reserve))))
+ goto end;
+
+ /* unshift and num */
+ for (i = 0; i < n; i++) {
+ if (!TEST_int_eq(sk_uchar_num(s), i)) {
+ TEST_info("uchar stack size %d", i);
+ goto end;
+ }
+ sk_uchar_unshift(s, v + i);
+ }
+ if (!TEST_int_eq(sk_uchar_num(s), n))
+ goto end;
+
+ /* dup */
+ r = sk_uchar_dup(NULL);
+ if (sk_uchar_num(r) != 0)
+ goto end;
+ sk_uchar_free(r);
+ r = sk_uchar_dup(s);
+ if (!TEST_int_eq(sk_uchar_num(r), n))
+ goto end;
+ sk_uchar_sort(r);
+
+ /* pop */
+ for (i = 0; i < n; i++)
+ if (!TEST_ptr_eq(sk_uchar_pop(s), v + i)) {
+ TEST_info("uchar pop %d", i);
+ goto end;
+ }
+
+ /* free -- we rely on the debug malloc to detect leakage here */
+ sk_uchar_free(s);
+ s = NULL;
+
+ /* dup again */
+ if (!TEST_int_eq(sk_uchar_num(r), n))
+ goto end;
+
+ /* zero */
+ sk_uchar_zero(r);
+ if (!TEST_int_eq(sk_uchar_num(r), 0))
+ goto end;
+
+ /* insert */
+ sk_uchar_insert(r, v, 0);
+ sk_uchar_insert(r, v + 2, -1);
+ sk_uchar_insert(r, v + 1, 1);
+ for (i = 0; i < 3; i++)
+ if (!TEST_ptr_eq(sk_uchar_value(r, i), v + i)) {
+ TEST_info("uchar insert %d", i);
+ goto end;
+ }
+
+ /* delete */
+ if (!TEST_ptr_null(sk_uchar_delete(r, 12)))
+ goto end;
+ if (!TEST_ptr_eq(sk_uchar_delete(r, 1), v + 1))
+ goto end;
+
+ /* set */
+ (void)sk_uchar_set(r, 1, v + 1);
+ for (i = 0; i < 2; i++)
+ if (!TEST_ptr_eq(sk_uchar_value(r, i), v + i)) {
+ TEST_info("uchar set %d", i);
+ goto end;
+ }
+
+ testresult = 1;
+end:
+ sk_uchar_free(r);
+ sk_uchar_free(s);
+ return testresult;
+}
+
+static SS *SS_copy(const SS *p)
+{
+ SS *q = OPENSSL_malloc(sizeof(*q));
+
+ if (q != NULL)
+ memcpy(q, p, sizeof(*q));
+ return q;
+}
+
+static void SS_free(SS *p) {
+ OPENSSL_free(p);
+}
+
+static int test_SS_stack(void)
+{
+ STACK_OF(SS) *s = sk_SS_new_null();
+ STACK_OF(SS) *r = NULL;
+ SS *v[10], *p;
+ const int n = OSSL_NELEM(v);
+ int i;
+ int testresult = 0;
+
+ /* allocate and push */
+ for (i = 0; i < n; i++) {
+ v[i] = OPENSSL_malloc(sizeof(*v[i]));
+
+ if (!TEST_ptr(v[i]))
+ goto end;
+ v[i]->n = i;
+ v[i]->c = 'A' + i;
+ if (!TEST_int_eq(sk_SS_num(s), i)) {
+ TEST_info("SS stack size %d", i);
+ goto end;
+ }
+ sk_SS_push(s, v[i]);
+ }
+ if (!TEST_int_eq(sk_SS_num(s), n))
+ goto end;
+
+ /* deepcopy */
+ r = sk_SS_deep_copy(NULL, &SS_copy, &SS_free);
+ if (sk_SS_num(r) != 0)
+ goto end;
+ sk_SS_free(r);
+ r = sk_SS_deep_copy(s, &SS_copy, &SS_free);
+ if (!TEST_ptr(r))
+ goto end;
+ for (i = 0; i < n; i++) {
+ p = sk_SS_value(r, i);
+ if (!TEST_ptr_ne(p, v[i])) {
+ TEST_info("SS deepcopy non-copy %d", i);
+ goto end;
+ }
+ if (!TEST_int_eq(p->n, v[i]->n)) {
+ TEST_info("test SS deepcopy int %d", i);
+ goto end;
+ }
+ if (!TEST_char_eq(p->c, v[i]->c)) {
+ TEST_info("SS deepcopy char %d", i);
+ goto end;
+ }
+ }
+
+ /* pop_free - we rely on the malloc debug to catch the leak */
+ sk_SS_pop_free(r, &SS_free);
+ r = NULL;
+
+ /* delete_ptr */
+ p = sk_SS_delete_ptr(s, v[3]);
+ if (!TEST_ptr(p))
+ goto end;
+ SS_free(p);
+ if (!TEST_int_eq(sk_SS_num(s), n - 1))
+ goto end;
+ for (i = 0; i < n-1; i++)
+ if (!TEST_ptr_eq(sk_SS_value(s, i), v[i<3 ? i : 1+i])) {
+ TEST_info("SS delete ptr item %d", i);
+ goto end;
+ }
+
+ testresult = 1;
+end:
+ sk_SS_pop_free(r, &SS_free);
+ sk_SS_pop_free(s, &SS_free);
+ return testresult;
+}
+
+static int test_SU_stack(void)
+{
+ STACK_OF(SU) *s = sk_SU_new_null();
+ SU v[10];
+ const int n = OSSL_NELEM(v);
+ int i;
+ int testresult = 0;
+
+ /* allocate and push */
+ for (i = 0; i < n; i++) {
+ if ((i & 1) == 0)
+ v[i].n = i;
+ else
+ v[i].c = 'A' + i;
+ if (!TEST_int_eq(sk_SU_num(s), i)) {
+ TEST_info("SU stack size %d", i);
+ goto end;
+ }
+ sk_SU_push(s, v + i);
+ }
+ if (!TEST_int_eq(sk_SU_num(s), n))
+ goto end;
+
+ /* check the pointers are correct */
+ for (i = 0; i < n; i++)
+ if (!TEST_ptr_eq(sk_SU_value(s, i), v + i)) {
+ TEST_info("SU pointer check %d", i);
+ goto end;
+ }
+
+ testresult = 1;
+end:
+ sk_SU_free(s);
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_int_stack, 4);
+ ADD_ALL_TESTS(test_uchar_stack, 4);
+ ADD_TEST(test_SS_stack);
+ ADD_TEST(test_SU_stack);
+ return 1;
+}
diff --git a/test/sysdefault.cnf b/test/sysdefault.cnf
new file mode 100644
index 000000000000..1c8915074a78
--- /dev/null
+++ b/test/sysdefault.cnf
@@ -0,0 +1,23 @@
+# Configuration file to test system default SSL configuration
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+openssl_conf = default_conf
+
+[ default_conf ]
+
+ssl_conf = ssl_sect
+oid_section = oid_sect
+
+[oid_sect]
+new-sig-oid = 1.1.1.1.1.1.1.1.1.1.1.1.1.1
+
+[ssl_sect]
+
+system_default = ssl_default_sect
+
+[ssl_default_sect]
+SignatureAlgorithms = RSA+SHA256:nonex
+MaxProtocol = TLSv1.2
+MinProtocol = TLSv1.2
diff --git a/test/sysdefaulttest.c b/test/sysdefaulttest.c
new file mode 100644
index 000000000000..350867cdcd5a
--- /dev/null
+++ b/test/sysdefaulttest.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2016-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
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <openssl/opensslconf.h>
+
+#include <string.h>
+#include <openssl/evp.h>
+#include <openssl/ssl.h>
+#include <openssl/tls1.h>
+#include "testutil.h"
+
+static SSL_CTX *ctx;
+
+static int test_func(void)
+{
+ if (!TEST_int_eq(SSL_CTX_get_min_proto_version(ctx), TLS1_2_VERSION)
+ && !TEST_int_eq(SSL_CTX_get_max_proto_version(ctx), TLS1_2_VERSION)) {
+ TEST_info("min/max version setting incorrect");
+ return 0;
+ }
+ return 1;
+}
+
+int global_init(void)
+{
+ if (!OPENSSL_init_ssl(OPENSSL_INIT_ENGINE_ALL_BUILTIN
+ | OPENSSL_INIT_LOAD_CONFIG, NULL))
+ return 0;
+ return 1;
+}
+
+int setup_tests(void)
+{
+ if (!TEST_ptr(ctx = SSL_CTX_new(TLS_method())))
+ return 0;
+ ADD_TEST(test_func);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ SSL_CTX_free(ctx);
+}
diff --git a/test/test.cnf b/test/test.cnf
new file mode 100644
index 000000000000..8b2f92ad8e24
--- /dev/null
+++ b/test/test.cnf
@@ -0,0 +1,74 @@
+
+####################################################################
+[ ca ]
+default_ca = CA_default # The default ca section
+
+####################################################################
+[ CA_default ]
+
+dir = ./demoCA # Where everything is kept
+certs = $dir/certs # Where the issued certs are kept
+crl_dir = $dir/crl # Where the issued crl are kept
+database = $dir/index.txt # database index file.
+new_certs_dir = $dir/new_certs # default place for new certs.
+
+certificate = $dir/CAcert.pem # The CA certificate
+serial = $dir/serial # The current serial number
+crl = $dir/crl.pem # The current CRL
+private_key = $dir/private/CAkey.pem# The private key
+
+default_days = 365 # how long to certify for
+default_crl_days= 30 # how long before next CRL
+default_md = md5 # which md to use.
+
+# A few difference way of specifying how similar the request should look
+# For type CA, the listed attributes must be the same, and the optional
+# and supplied fields are just that :-)
+policy = policy_match
+
+# For the CA policy
+[ policy_match ]
+countryName = match
+stateOrProvinceName = match
+organizationName = match
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+# For the 'anything' policy
+# At this point in time, you must list all acceptable 'object'
+# types.
+[ policy_anything ]
+countryName = optional
+stateOrProvinceName = optional
+localityName = optional
+organizationName = optional
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+####################################################################
+[ req ]
+distinguished_name = req_distinguished_name
+encrypt_rsa_key = no
+
+# Make altreq be identical to req
+[ altreq ]
+distinguished_name = req_distinguished_name
+encrypt_rsa_key = no
+
+[ req_distinguished_name ]
+countryName = C field
+countryName_value = AU
+stateOrProvinceName = SP field
+stateOrProvinceName_value =
+localityName = L field
+localityName_value = Brisbane
+organizationName = O field
+organizationName_value = CryptSoft Pty Ltd
+organizationalUnitName = OU field
+organizationalUnitName_value = .
+commonName = CN field
+commonName_value = Eric Young
+emailAddress = email field
+emailAddress_value = eay@mincom.oz.au
diff --git a/test/test_asn1_parse.cnf b/test/test_asn1_parse.cnf
new file mode 100644
index 000000000000..5f0305657e83
--- /dev/null
+++ b/test/test_asn1_parse.cnf
@@ -0,0 +1,12 @@
+openssl_conf = openssl_init
+
+# Comment out the next line to ignore configuration errors
+config_diagnostics = 1
+
+[openssl_init]
+oid_section = oids
+
+[oids]
+testoid1 = 1.2.3.4.1
+testoid2 = A Very Long OID Name, 1.2.3.4.2
+testoid3 = ,1.2.3.4.3
diff --git a/test/test_test.c b/test/test_test.c
new file mode 100644
index 000000000000..868d9bcb9ce3
--- /dev/null
+++ b/test/test_test.c
@@ -0,0 +1,579 @@
+/*
+ * Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2017, Oracle and/or its affiliates. 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 <string.h>
+
+#include <openssl/opensslconf.h>
+#include <openssl/err.h>
+#include <openssl/crypto.h>
+#include <openssl/bn.h>
+
+#include "internal/nelem.h"
+#include "testutil.h"
+
+#define TEST(expected, test) test_case((expected), #test, (test))
+
+static int test_case(int expected, const char *test, int result)
+{
+ if (result != expected) {
+ fprintf(stderr, "# FATAL: %s != %d\n", test, expected);
+ return 0;
+ }
+ return 1;
+}
+
+static int test_int(void)
+{
+ if (!TEST(1, TEST_int_eq(1, 1))
+ || !TEST(0, TEST_int_eq(1, -1))
+ || !TEST(1, TEST_int_ne(1, 2))
+ || !TEST(0, TEST_int_ne(3, 3))
+ || !TEST(1, TEST_int_lt(4, 9))
+ || !TEST(0, TEST_int_lt(9, 4))
+ || !TEST(1, TEST_int_le(4, 9))
+ || !TEST(1, TEST_int_le(5, 5))
+ || !TEST(0, TEST_int_le(9, 4))
+ || !TEST(1, TEST_int_gt(8, 5))
+ || !TEST(0, TEST_int_gt(5, 8))
+ || !TEST(1, TEST_int_ge(8, 5))
+ || !TEST(1, TEST_int_ge(6, 6))
+ || !TEST(0, TEST_int_ge(5, 8)))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_uint(void)
+{
+ if (!TEST(1, TEST_uint_eq(3u, 3u))
+ || !TEST(0, TEST_uint_eq(3u, 5u))
+ || !TEST(1, TEST_uint_ne(4u, 2u))
+ || !TEST(0, TEST_uint_ne(6u, 6u))
+ || !TEST(1, TEST_uint_lt(5u, 9u))
+ || !TEST(0, TEST_uint_lt(9u, 5u))
+ || !TEST(1, TEST_uint_le(5u, 9u))
+ || !TEST(1, TEST_uint_le(7u, 7u))
+ || !TEST(0, TEST_uint_le(9u, 5u))
+ || !TEST(1, TEST_uint_gt(11u, 1u))
+ || !TEST(0, TEST_uint_gt(1u, 11u))
+ || !TEST(1, TEST_uint_ge(11u, 1u))
+ || !TEST(1, TEST_uint_ge(6u, 6u))
+ || !TEST(0, TEST_uint_ge(1u, 11u)))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_char(void)
+{
+ if (!TEST(1, TEST_char_eq('a', 'a'))
+ || !TEST(0, TEST_char_eq('a', 'A'))
+ || !TEST(1, TEST_char_ne('a', 'c'))
+ || !TEST(0, TEST_char_ne('e', 'e'))
+ || !TEST(1, TEST_char_lt('i', 'x'))
+ || !TEST(0, TEST_char_lt('x', 'i'))
+ || !TEST(1, TEST_char_le('i', 'x'))
+ || !TEST(1, TEST_char_le('n', 'n'))
+ || !TEST(0, TEST_char_le('x', 'i'))
+ || !TEST(1, TEST_char_gt('w', 'n'))
+ || !TEST(0, TEST_char_gt('n', 'w'))
+ || !TEST(1, TEST_char_ge('w', 'n'))
+ || !TEST(1, TEST_char_ge('p', 'p'))
+ || !TEST(0, TEST_char_ge('n', 'w')))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_uchar(void)
+{
+ if (!TEST(1, TEST_uchar_eq(49, 49))
+ || !TEST(0, TEST_uchar_eq(49, 60))
+ || !TEST(1, TEST_uchar_ne(50, 2))
+ || !TEST(0, TEST_uchar_ne(66, 66))
+ || !TEST(1, TEST_uchar_lt(60, 80))
+ || !TEST(0, TEST_uchar_lt(80, 60))
+ || !TEST(1, TEST_uchar_le(60, 80))
+ || !TEST(1, TEST_uchar_le(78, 78))
+ || !TEST(0, TEST_uchar_le(80, 60))
+ || !TEST(1, TEST_uchar_gt(88, 37))
+ || !TEST(0, TEST_uchar_gt(37, 88))
+ || !TEST(1, TEST_uchar_ge(88, 37))
+ || !TEST(1, TEST_uchar_ge(66, 66))
+ || !TEST(0, TEST_uchar_ge(37, 88)))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_long(void)
+{
+ if (!TEST(1, TEST_long_eq(123l, 123l))
+ || !TEST(0, TEST_long_eq(123l, -123l))
+ || !TEST(1, TEST_long_ne(123l, 500l))
+ || !TEST(0, TEST_long_ne(1000l, 1000l))
+ || !TEST(1, TEST_long_lt(-8923l, 102934563l))
+ || !TEST(0, TEST_long_lt(102934563l, -8923l))
+ || !TEST(1, TEST_long_le(-8923l, 102934563l))
+ || !TEST(1, TEST_long_le(12345l, 12345l))
+ || !TEST(0, TEST_long_le(102934563l, -8923l))
+ || !TEST(1, TEST_long_gt(84325677l, 12345l))
+ || !TEST(0, TEST_long_gt(12345l, 84325677l))
+ || !TEST(1, TEST_long_ge(84325677l, 12345l))
+ || !TEST(1, TEST_long_ge(465869l, 465869l))
+ || !TEST(0, TEST_long_ge(12345l, 84325677l)))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_ulong(void)
+{
+ if (!TEST(1, TEST_ulong_eq(919ul, 919ul))
+ || !TEST(0, TEST_ulong_eq(919ul, 10234ul))
+ || !TEST(1, TEST_ulong_ne(8190ul, 66ul))
+ || !TEST(0, TEST_ulong_ne(10555ul, 10555ul))
+ || !TEST(1, TEST_ulong_lt(10234ul, 1000000ul))
+ || !TEST(0, TEST_ulong_lt(1000000ul, 10234ul))
+ || !TEST(1, TEST_ulong_le(10234ul, 1000000ul))
+ || !TEST(1, TEST_ulong_le(100000ul, 100000ul))
+ || !TEST(0, TEST_ulong_le(1000000ul, 10234ul))
+ || !TEST(1, TEST_ulong_gt(100000000ul, 22ul))
+ || !TEST(0, TEST_ulong_gt(22ul, 100000000ul))
+ || !TEST(1, TEST_ulong_ge(100000000ul, 22ul))
+ || !TEST(1, TEST_ulong_ge(10555ul, 10555ul))
+ || !TEST(0, TEST_ulong_ge(22ul, 100000000ul)))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_size_t(void)
+{
+ if (!TEST(1, TEST_size_t_eq((size_t)10, (size_t)10))
+ || !TEST(0, TEST_size_t_eq((size_t)10, (size_t)12))
+ || !TEST(1, TEST_size_t_ne((size_t)10, (size_t)12))
+ || !TEST(0, TEST_size_t_ne((size_t)24, (size_t)24))
+ || !TEST(1, TEST_size_t_lt((size_t)30, (size_t)88))
+ || !TEST(0, TEST_size_t_lt((size_t)88, (size_t)30))
+ || !TEST(1, TEST_size_t_le((size_t)30, (size_t)88))
+ || !TEST(1, TEST_size_t_le((size_t)33, (size_t)33))
+ || !TEST(0, TEST_size_t_le((size_t)88, (size_t)30))
+ || !TEST(1, TEST_size_t_gt((size_t)52, (size_t)33))
+ || !TEST(0, TEST_size_t_gt((size_t)33, (size_t)52))
+ || !TEST(1, TEST_size_t_ge((size_t)52, (size_t)33))
+ || !TEST(1, TEST_size_t_ge((size_t)38, (size_t)38))
+ || !TEST(0, TEST_size_t_ge((size_t)33, (size_t)52)))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_time_t(void)
+{
+ if (!TEST(1, TEST_time_t_eq((time_t)10, (time_t)10))
+ || !TEST(0, TEST_time_t_eq((time_t)10, (time_t)12))
+ || !TEST(1, TEST_time_t_ne((time_t)10, (time_t)12))
+ || !TEST(0, TEST_time_t_ne((time_t)24, (time_t)24))
+ || !TEST(1, TEST_time_t_lt((time_t)30, (time_t)88))
+ || !TEST(0, TEST_time_t_lt((time_t)88, (time_t)30))
+ || !TEST(1, TEST_time_t_le((time_t)30, (time_t)88))
+ || !TEST(1, TEST_time_t_le((time_t)33, (time_t)33))
+ || !TEST(0, TEST_time_t_le((time_t)88, (time_t)30))
+ || !TEST(1, TEST_time_t_gt((time_t)52, (time_t)33))
+ || !TEST(0, TEST_time_t_gt((time_t)33, (time_t)52))
+ || !TEST(1, TEST_time_t_ge((time_t)52, (time_t)33))
+ || !TEST(1, TEST_time_t_ge((time_t)38, (time_t)38))
+ || !TEST(0, TEST_time_t_ge((time_t)33, (time_t)52)))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_pointer(void)
+{
+ int x = 0;
+ char y = 1;
+
+ if (!TEST(1, TEST_ptr(&y))
+ || !TEST(0, TEST_ptr(NULL))
+ || !TEST(0, TEST_ptr_null(&y))
+ || !TEST(1, TEST_ptr_null(NULL))
+ || !TEST(1, TEST_ptr_eq(NULL, NULL))
+ || !TEST(0, TEST_ptr_eq(NULL, &y))
+ || !TEST(0, TEST_ptr_eq(&y, NULL))
+ || !TEST(0, TEST_ptr_eq(&y, &x))
+ || !TEST(1, TEST_ptr_eq(&x, &x))
+ || !TEST(0, TEST_ptr_ne(NULL, NULL))
+ || !TEST(1, TEST_ptr_ne(NULL, &y))
+ || !TEST(1, TEST_ptr_ne(&y, NULL))
+ || !TEST(1, TEST_ptr_ne(&y, &x))
+ || !TEST(0, TEST_ptr_ne(&x, &x)))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_bool(void)
+{
+ if (!TEST(0, TEST_true(0))
+ || !TEST(1, TEST_true(1))
+ || !TEST(1, TEST_false(0))
+ || !TEST(0, TEST_false(1)))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_string(void)
+{
+ static char buf[] = "abc";
+
+ if (!TEST(1, TEST_str_eq(NULL, NULL))
+ || !TEST(1, TEST_str_eq("abc", buf))
+ || !TEST(0, TEST_str_eq("abc", NULL))
+ || !TEST(0, TEST_str_eq("abc", ""))
+ || !TEST(0, TEST_str_eq(NULL, buf))
+ || !TEST(0, TEST_str_ne(NULL, NULL))
+ || !TEST(0, TEST_str_eq("", NULL))
+ || !TEST(0, TEST_str_eq(NULL, ""))
+ || !TEST(0, TEST_str_ne("", ""))
+ || !TEST(0, TEST_str_eq("\1\2\3\4\5", "\1x\3\6\5"))
+ || !TEST(0, TEST_str_ne("abc", buf))
+ || !TEST(1, TEST_str_ne("abc", NULL))
+ || !TEST(1, TEST_str_ne(NULL, buf))
+ || !TEST(0, TEST_str_eq("abcdef", "abcdefghijk")))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_memory(void)
+{
+ static char buf[] = "xyz";
+
+ if (!TEST(1, TEST_mem_eq(NULL, 0, NULL, 0))
+ || !TEST(1, TEST_mem_eq(NULL, 1, NULL, 2))
+ || !TEST(0, TEST_mem_eq(NULL, 0, "xyz", 3))
+ || !TEST(0, TEST_mem_eq(NULL, 7, "abc", 3))
+ || !TEST(0, TEST_mem_ne(NULL, 0, NULL, 0))
+ || !TEST(0, TEST_mem_eq(NULL, 0, "", 0))
+ || !TEST(0, TEST_mem_eq("", 0, NULL, 0))
+ || !TEST(0, TEST_mem_ne("", 0, "", 0))
+ || !TEST(0, TEST_mem_eq("xyz", 3, NULL, 0))
+ || !TEST(0, TEST_mem_eq("xyz", 3, buf, sizeof(buf)))
+ || !TEST(1, TEST_mem_eq("xyz", 4, buf, sizeof(buf))))
+ goto err;
+ return 1;
+
+err:
+ return 0;
+}
+
+static int test_memory_overflow(void)
+{
+ /* Verify that the memory printing overflows without walking the stack */
+ const char *p = "1234567890123456789012345678901234567890123456789012";
+ const char *q = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ return TEST(0, TEST_mem_eq(p, strlen(p), q, strlen(q)));
+}
+
+static int test_bignum(void)
+{
+ BIGNUM *a = NULL, *b = NULL, *c = NULL;
+ int r = 0;
+
+ if (!TEST(1, TEST_int_eq(BN_dec2bn(&a, "0"), 1))
+ || !TEST(1, TEST_BN_eq_word(a, 0))
+ || !TEST(0, TEST_BN_eq_word(a, 30))
+ || !TEST(1, TEST_BN_abs_eq_word(a, 0))
+ || !TEST(0, TEST_BN_eq_one(a))
+ || !TEST(1, TEST_BN_eq_zero(a))
+ || !TEST(0, TEST_BN_ne_zero(a))
+ || !TEST(1, TEST_BN_le_zero(a))
+ || !TEST(0, TEST_BN_lt_zero(a))
+ || !TEST(1, TEST_BN_ge_zero(a))
+ || !TEST(0, TEST_BN_gt_zero(a))
+ || !TEST(1, TEST_BN_even(a))
+ || !TEST(0, TEST_BN_odd(a))
+ || !TEST(1, TEST_BN_eq(b, c))
+ || !TEST(0, TEST_BN_eq(a, b))
+ || !TEST(0, TEST_BN_ne(NULL, c))
+ || !TEST(1, TEST_int_eq(BN_dec2bn(&b, "1"), 1))
+ || !TEST(1, TEST_BN_eq_word(b, 1))
+ || !TEST(1, TEST_BN_eq_one(b))
+ || !TEST(0, TEST_BN_abs_eq_word(b, 0))
+ || !TEST(1, TEST_BN_abs_eq_word(b, 1))
+ || !TEST(0, TEST_BN_eq_zero(b))
+ || !TEST(1, TEST_BN_ne_zero(b))
+ || !TEST(0, TEST_BN_le_zero(b))
+ || !TEST(0, TEST_BN_lt_zero(b))
+ || !TEST(1, TEST_BN_ge_zero(b))
+ || !TEST(1, TEST_BN_gt_zero(b))
+ || !TEST(0, TEST_BN_even(b))
+ || !TEST(1, TEST_BN_odd(b))
+ || !TEST(1, TEST_int_eq(BN_dec2bn(&c, "-334739439"), 10))
+ || !TEST(0, TEST_BN_eq_word(c, 334739439))
+ || !TEST(1, TEST_BN_abs_eq_word(c, 334739439))
+ || !TEST(0, TEST_BN_eq_zero(c))
+ || !TEST(1, TEST_BN_ne_zero(c))
+ || !TEST(1, TEST_BN_le_zero(c))
+ || !TEST(1, TEST_BN_lt_zero(c))
+ || !TEST(0, TEST_BN_ge_zero(c))
+ || !TEST(0, TEST_BN_gt_zero(c))
+ || !TEST(0, TEST_BN_even(c))
+ || !TEST(1, TEST_BN_odd(c))
+ || !TEST(1, TEST_BN_eq(a, a))
+ || !TEST(0, TEST_BN_ne(a, a))
+ || !TEST(0, TEST_BN_eq(a, b))
+ || !TEST(1, TEST_BN_ne(a, b))
+ || !TEST(0, TEST_BN_lt(a, c))
+ || !TEST(1, TEST_BN_lt(c, b))
+ || !TEST(0, TEST_BN_lt(b, c))
+ || !TEST(0, TEST_BN_le(a, c))
+ || !TEST(1, TEST_BN_le(c, b))
+ || !TEST(0, TEST_BN_le(b, c))
+ || !TEST(1, TEST_BN_gt(a, c))
+ || !TEST(0, TEST_BN_gt(c, b))
+ || !TEST(1, TEST_BN_gt(b, c))
+ || !TEST(1, TEST_BN_ge(a, c))
+ || !TEST(0, TEST_BN_ge(c, b))
+ || !TEST(1, TEST_BN_ge(b, c)))
+ goto err;
+
+ r = 1;
+err:
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ return r;
+}
+
+static int test_long_output(void)
+{
+ const char *p = "1234567890123456789012345678901234567890123456789012";
+ const char *q = "1234567890klmnopqrs01234567890EFGHIJKLM0123456789XYZ";
+ const char *r = "1234567890123456789012345678901234567890123456789012"
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY+"
+ "12345678901234567890123ABC78901234567890123456789012";
+ const char *s = "1234567890123456789012345678901234567890123456789012"
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY-"
+ "1234567890123456789012345678901234567890123456789012"
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ return TEST(0, TEST_str_eq(p, q))
+ & TEST(0, TEST_str_eq(q, r))
+ & TEST(0, TEST_str_eq(r, s))
+ & TEST(0, TEST_mem_eq(r, strlen(r), s, strlen(s)));
+}
+
+static int test_long_bignum(void)
+{
+ int r;
+ BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL;
+ const char as[] = "1234567890123456789012345678901234567890123456789012"
+ "1234567890123456789012345678901234567890123456789012"
+ "1234567890123456789012345678901234567890123456789012"
+ "1234567890123456789012345678901234567890123456789012"
+ "1234567890123456789012345678901234567890123456789012"
+ "1234567890123456789012345678901234567890123456789012"
+ "FFFFFF";
+ const char bs[] = "1234567890123456789012345678901234567890123456789012"
+ "1234567890123456789012345678901234567890123456789013"
+ "987657";
+ const char cs[] = "-" /* 64 characters plus sign */
+ "123456789012345678901234567890"
+ "123456789012345678901234567890"
+ "ABCD";
+ const char ds[] = "-" /* 63 characters plus sign */
+ "23456789A123456789B123456789C"
+ "123456789D123456789E123456789F"
+ "ABCD";
+
+ r = TEST_true(BN_hex2bn(&a, as))
+ && TEST_true(BN_hex2bn(&b, bs))
+ && TEST_true(BN_hex2bn(&c, cs))
+ && TEST_true(BN_hex2bn(&d, ds))
+ && (TEST(0, TEST_BN_eq(a, b))
+ & TEST(0, TEST_BN_eq(b, a))
+ & TEST(0, TEST_BN_eq(b, NULL))
+ & TEST(0, TEST_BN_eq(NULL, a))
+ & TEST(1, TEST_BN_ne(a, NULL))
+ & TEST(0, TEST_BN_eq(c, d)));
+ BN_free(a);
+ BN_free(b);
+ BN_free(c);
+ BN_free(d);
+ return r;
+}
+
+static int test_messages(void)
+{
+ TEST_info("This is an %s message.", "info");
+ TEST_error("This is an %s message.", "error");
+ return 1;
+}
+
+static int test_single_eval(void)
+{
+ int i = 4;
+ long l = -9000;
+ char c = 'd';
+ unsigned char uc = 22;
+ unsigned long ul = 500;
+ size_t st = 1234;
+ char buf[4] = { 0 }, *p = buf;
+
+ /* int */
+ return TEST_int_eq(i++, 4)
+ && TEST_int_eq(i, 5)
+ && TEST_int_gt(++i, 5)
+ && TEST_int_le(5, i++)
+ && TEST_int_ne(--i, 5)
+ && TEST_int_eq(12, i *= 2)
+ /* Long */
+ && TEST_long_eq(l--, -9000L)
+ && TEST_long_eq(++l, -9000L)
+ && TEST_long_ne(-9000L, l /= 2)
+ && TEST_long_lt(--l, -4500L)
+ /* char */
+ && TEST_char_eq(++c, 'e')
+ && TEST_char_eq('e', c--)
+ && TEST_char_ne('d', --c)
+ && TEST_char_le('b', --c)
+ && TEST_char_lt(c++, 'c')
+ /* unsigned char */
+ && TEST_uchar_eq(22, uc++)
+ && TEST_uchar_eq(uc /= 2, 11)
+ && TEST_ulong_eq(ul ^= 1, 501)
+ && TEST_ulong_eq(502, ul ^= 3)
+ && TEST_ulong_eq(ul = ul * 3 - 6, 1500)
+ /* size_t */
+ && TEST_size_t_eq((--i, st++), 1234)
+ && TEST_size_t_eq(st, 1235)
+ && TEST_int_eq(11, i)
+ /* pointers */
+ && TEST_ptr_eq(p++, buf)
+ && TEST_ptr_eq(buf + 2, ++p)
+ && TEST_ptr_eq(buf, p -= 2)
+ && TEST_ptr(++p)
+ && TEST_ptr_eq(p, buf + 1)
+ && TEST_ptr_null(p = NULL)
+ /* strings */
+ && TEST_str_eq(p = &("123456"[1]), "23456")
+ && TEST_str_eq("3456", ++p)
+ && TEST_str_ne(p++, "456")
+ /* memory */
+ && TEST_mem_eq(--p, sizeof("3456"), "3456", sizeof("3456"))
+ && TEST_mem_ne(p++, sizeof("456"), "456", sizeof("456"))
+ && TEST_mem_eq(p--, sizeof("456"), "456", sizeof("456"));
+}
+
+static int test_output(void)
+{
+ const char s[] = "1234567890123456789012345678901234567890123456789012"
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ test_output_string("test", s, sizeof(s) - 1);
+ test_output_memory("test", (const unsigned char *)s, sizeof(s));
+ return 1;
+}
+
+static const char *bn_output_tests[] = {
+ NULL,
+ "0",
+ "-12345678",
+ "1234567890123456789012345678901234567890123456789012"
+ "1234567890123456789012345678901234567890123456789013"
+ "987657"
+};
+
+static int test_bn_output(int n)
+{
+ BIGNUM *b = NULL;
+
+ if (bn_output_tests[n] != NULL
+ && !TEST_true(BN_hex2bn(&b, bn_output_tests[n])))
+ return 0;
+ test_output_bignum(bn_output_tests[n], b);
+ BN_free(b);
+ return 1;
+}
+
+static int test_skip_one(void)
+{
+ return TEST_skip("skip test");
+}
+
+static int test_skip_many(int n)
+{
+ return TEST_skip("skip tests: %d", n);
+}
+
+static int test_skip_null(void)
+{
+ /*
+ * This is not a recommended way of skipping a test, a reason or
+ * description should be included.
+ */
+ return TEST_skip(NULL);
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_int);
+ ADD_TEST(test_uint);
+ ADD_TEST(test_char);
+ ADD_TEST(test_uchar);
+ ADD_TEST(test_long);
+ ADD_TEST(test_ulong);
+ ADD_TEST(test_size_t);
+ ADD_TEST(test_time_t);
+ ADD_TEST(test_pointer);
+ ADD_TEST(test_bool);
+ ADD_TEST(test_string);
+ ADD_TEST(test_memory);
+ ADD_TEST(test_memory_overflow);
+ ADD_TEST(test_bignum);
+ ADD_TEST(test_long_bignum);
+ ADD_TEST(test_long_output);
+ ADD_TEST(test_messages);
+ ADD_TEST(test_single_eval);
+ ADD_TEST(test_output);
+ ADD_ALL_TESTS(test_bn_output, OSSL_NELEM(bn_output_tests));
+ ADD_TEST(test_skip_one);
+ ADD_TEST(test_skip_null);
+ ADD_ALL_TESTS(test_skip_many, 3);
+ return 1;
+}
diff --git a/test/testcrl.pem b/test/testcrl.pem
new file mode 100644
index 000000000000..098978835471
--- /dev/null
+++ b/test/testcrl.pem
@@ -0,0 +1,16 @@
+-----BEGIN X509 CRL-----
+MIICjTCCAfowDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMxIDAeBgNVBAoT
+F1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy
+IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Fw05NTA1MDIwMjEyMjZaFw05NTA2MDEw
+MDAxNDlaMIIBaDAWAgUCQQAABBcNOTUwMjAxMTcyNDI2WjAWAgUCQQAACRcNOTUw
+MjEwMDIxNjM5WjAWAgUCQQAADxcNOTUwMjI0MDAxMjQ5WjAWAgUCQQAADBcNOTUw
+MjI1MDA0NjQ0WjAWAgUCQQAAGxcNOTUwMzEzMTg0MDQ5WjAWAgUCQQAAFhcNOTUw
+MzE1MTkxNjU0WjAWAgUCQQAAGhcNOTUwMzE1MTk0MDQxWjAWAgUCQQAAHxcNOTUw
+MzI0MTk0NDMzWjAWAgUCcgAABRcNOTUwMzI5MjAwNzExWjAWAgUCcgAAERcNOTUw
+MzMwMDIzNDI2WjAWAgUCQQAAIBcNOTUwNDA3MDExMzIxWjAWAgUCcgAAHhcNOTUw
+NDA4MDAwMjU5WjAWAgUCcgAAQRcNOTUwNDI4MTcxNzI0WjAWAgUCcgAAOBcNOTUw
+NDI4MTcyNzIxWjAWAgUCcgAATBcNOTUwNTAyMDIxMjI2WjANBgkqhkiG9w0BAQIF
+AAN+AHqOEJXSDejYy0UwxxrH/9+N2z5xu/if0J6qQmK92W0hW158wpJg+ovV3+wQ
+wvIEPRL2rocL0tKfAsVq1IawSJzSNgxG0lrcla3MrJBnZ4GaZDu4FutZh72MR3Gt
+JaAL3iTJHJD55kK2D/VoyY1djlsPuNh6AEgdVwFAyp0v
+-----END X509 CRL-----
diff --git a/test/testdsa.pem b/test/testdsa.pem
new file mode 100644
index 000000000000..b2ca5ba4dc38
--- /dev/null
+++ b/test/testdsa.pem
@@ -0,0 +1,12 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIIBvQIBAAKBgQD9Ko2Ezy2mKeOV4oJsjy8Ves9Av6bPvr5y6iFTVpGQewjzsAHS
+l3eAxwyrvE0cx8cQ4ODieVRnWibZIEoF2NRUBw3l/6o8wo1BZTnF7wtZpNr6QcCQ
+QNC3CaQZ0lw2rOewGxqZpeXmYurfceRnsZBSpQiw8kW+JTgCbRJtVAYF1wIVAN+X
+sK/vqcIQlD6ZV055LoV4qv0jAoGBAL52x3C4paZkU61ZTiIgUKPXBpanQ4a7nsjd
+iSjzgnto+rveVuFkZQKaD7Wts8SLpojBat7supr+qF1pWVpRwxOXofdO72XdKm5u
+3co7sLnqf/WVCmzX9/unlAsGfDG1R6RqA71MnQJ5q56LwAzqK23ZfGt5v1Wpho36
+FY/JnLZ2AoGBAMyZoH2YF7/wO7CbGD6bGet3q+zxksOp+6gz2+ae23Gajpd3u4Jz
+bOxqjk4vrQaTrMPRRWXWJxC5WwLMalzwke75wi8gGT6+EUxFoLXlSmRQN+h4f+Ab
+OHFQiiW9v3xrgUKPiYWPEz/bhYw5DC73vPfkHXxmV495KiSIx4fvfH1BAhUAv3HU
+l7iXVdDF5BKF2B+Vd8w9+MI=
+-----END DSA PRIVATE KEY-----
diff --git a/test/testdsapub.pem b/test/testdsapub.pem
new file mode 100644
index 000000000000..70e7d5cc608e
--- /dev/null
+++ b/test/testdsapub.pem
@@ -0,0 +1,12 @@
+-----BEGIN PUBLIC KEY-----
+MIIBuDCCASwGByqGSM44BAEwggEfAoGBAP0qjYTPLaYp45XigmyPLxV6z0C/ps++
+vnLqIVNWkZB7CPOwAdKXd4DHDKu8TRzHxxDg4OJ5VGdaJtkgSgXY1FQHDeX/qjzC
+jUFlOcXvC1mk2vpBwJBA0LcJpBnSXDas57AbGpml5eZi6t9x5GexkFKlCLDyRb4l
+OAJtEm1UBgXXAhUA35ewr++pwhCUPplXTnkuhXiq/SMCgYEAvnbHcLilpmRTrVlO
+IiBQo9cGlqdDhrueyN2JKPOCe2j6u95W4WRlApoPta2zxIumiMFq3uy6mv6oXWlZ
+WlHDE5eh907vZd0qbm7dyjuwuep/9ZUKbNf3+6eUCwZ8MbVHpGoDvUydAnmrnovA
+DOorbdl8a3m/VamGjfoVj8mctnYDgYUAAoGBAMyZoH2YF7/wO7CbGD6bGet3q+zx
+ksOp+6gz2+ae23Gajpd3u4JzbOxqjk4vrQaTrMPRRWXWJxC5WwLMalzwke75wi8g
+GT6+EUxFoLXlSmRQN+h4f+AbOHFQiiW9v3xrgUKPiYWPEz/bhYw5DC73vPfkHXxm
+V495KiSIx4fvfH1B
+-----END PUBLIC KEY-----
diff --git a/test/testec-p112r1.pem b/test/testec-p112r1.pem
new file mode 100644
index 000000000000..c81398e7d749
--- /dev/null
+++ b/test/testec-p112r1.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQABg==
+-----END EC PARAMETERS-----
+-----BEGIN EC PRIVATE KEY-----
+MD4CAQEEDqpz3/ZgfdnaauL3MgNsoAcGBSuBBAAGoSADHgAErmlghD+XSf6spLhs
+7CqP1x1K6h2kfELB84SYKg==
+-----END EC PRIVATE KEY-----
diff --git a/test/testec-p256.pem b/test/testec-p256.pem
new file mode 100644
index 000000000000..fb79a4c5ba3b
--- /dev/null
+++ b/test/testec-p256.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PRIVATE KEY-----
+MHcCAQEEIDYEX2yQlhJXDIwBEwcfyAn2eICEKJxqsAPGChey1a2toAoGCCqGSM49
+AwEHoUQDQgAEJXwAdITiPFcSUsaRI2nlzTNRn++q6F38XrH8m8sf28DQ+2Oob5SU
+zvgjVS0e70pIqH6bSXDgPc8mKtSs9Zi26Q==
+-----END EC PRIVATE KEY-----
diff --git a/test/testecpub-p256.pem b/test/testecpub-p256.pem
new file mode 100644
index 000000000000..60695b82c58c
--- /dev/null
+++ b/test/testecpub-p256.pem
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJXwAdITiPFcSUsaRI2nlzTNRn++q
+6F38XrH8m8sf28DQ+2Oob5SUzvgjVS0e70pIqH6bSXDgPc8mKtSs9Zi26Q==
+-----END PUBLIC KEY-----
diff --git a/test/tested25519.pem b/test/tested25519.pem
new file mode 100644
index 000000000000..e447080ae285
--- /dev/null
+++ b/test/tested25519.pem
@@ -0,0 +1,3 @@
+-----BEGIN PRIVATE KEY-----
+MC4CAQAwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC
+-----END PRIVATE KEY-----
diff --git a/test/tested25519pub.pem b/test/tested25519pub.pem
new file mode 100644
index 000000000000..41b0218e948a
--- /dev/null
+++ b/test/tested25519pub.pem
@@ -0,0 +1,3 @@
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=
+-----END PUBLIC KEY-----
diff --git a/test/tested448.pem b/test/tested448.pem
new file mode 100644
index 000000000000..98af16420ad4
--- /dev/null
+++ b/test/tested448.pem
@@ -0,0 +1,4 @@
+-----BEGIN PRIVATE KEY-----
+MEcCAQAwBQYDK2VxBDsEOWyCpWLLgI0Q1jK+ichRPr9skp803fqMn2PJlg7240ij
+UoyKP8wvBE45o/xblEkvjwMudUmiAJj5Ww==
+-----END PRIVATE KEY-----
diff --git a/test/tested448pub.pem b/test/tested448pub.pem
new file mode 100644
index 000000000000..640da6f2be14
--- /dev/null
+++ b/test/tested448pub.pem
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MEMwBQYDK2VxAzoAX9dEm1m0Yf0s54fsYWrUah2hNCSFpw4fig6nXYDpZ3jt8SR2
+m0bHBhvWeD3x5Q9s0foavq/oJWGA
+-----END PUBLIC KEY-----
diff --git a/test/testp7.pem b/test/testp7.pem
new file mode 100644
index 000000000000..e5b7866c3154
--- /dev/null
+++ b/test/testp7.pem
@@ -0,0 +1,46 @@
+-----BEGIN PKCS7-----
+MIIIGAYJKoZIhvcNAQcCoIIICTCCCAUCAQExADALBgkqhkiG9w0BBwGgggY8MIIE
+cjCCBBygAwIBAgIQeS+OJfWJUZAx6cX0eAiMjzANBgkqhkiG9w0BAQQFADBiMREw
+DwYDVQQHEwhJbnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNDAyBgNV
+BAsTK1ZlcmlTaWduIENsYXNzIDEgQ0EgLSBJbmRpdmlkdWFsIFN1YnNjcmliZXIw
+HhcNOTYwNzE5MDAwMDAwWhcNOTcwMzMwMjM1OTU5WjCB1TERMA8GA1UEBxMISW50
+ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJpU2ln
+biBDbGFzcyAxIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMSgwJgYDVQQLEx9E
+aWdpdGFsIElEIENsYXNzIDEgLSBTTUlNRSBUZXN0MUcwRQYDVQQLEz53d3cudmVy
+aXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMCBJbmMuIGJ5IFJlZi4sTElBQi5M
+VEQoYyk5NjBbMA0GCSqGSIb3DQEBAQUAA0oAMEcCQA7LvHEIAiQ5+4gDYvJGnGAq
+UM5GXyG11diEXmIEZTHUZhorooX5sr8IIjSXiPY59YYUFSvAaharFM1xaBN8zNEC
+AwEAAaOCAjkwggI1MAkGA1UdEwQCMAAwggImBgNVHQMEggIdMIICGTCCAhUwggIR
+BgtghkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0
+ZXMgYnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0
+IHRvLCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1l
+bnQgKENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29t
+L0NQUy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29t
+OyBvciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4s
+IE1vdW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04
+ODMwIENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0
+cyBSZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJ
+QUJJTElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQEC
+MC8wLRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEu
+AzANBgkqhkiG9w0BAQQFAANBAMCYDuSb/eIlYSxY31nZZTaCZkCSfHjlacMofExr
+cF+A2yHoEuT+eCQkqM0pMNHXddUeoQ9RjV+VuMBNmm63DUYwggHCMIIBbKADAgEC
+AhB8CYTq1bkRFJBYOd67cp9JMA0GCSqGSIb3DQEBAgUAMD4xCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEWMBQGA1UECxMNVEVTVCBSb290IFBD
+QTAeFw05NjA3MTcwMDAwMDBaFw05NzA3MTcyMzU5NTlaMGIxETAPBgNVBAcTCElu
+dGVybmV0MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNp
+Z24gQ2xhc3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjBcMA0GCSqGSIb3
+DQEBAQUAA0sAMEgCQQDsVzrNgnDhbAJZrWeLd9g1vMZJA2W67D33TTbga6yMt+ES
+TWEywhS6RNP+fzLGg7utinjH4tL60cXa0G27GDsLAgMBAAGjIjAgMAsGA1UdDwQE
+AwIBBjARBglghkgBhvhCAQEEBAMCAgQwDQYJKoZIhvcNAQECBQADQQAUp6bRwkaD
+2d1MBs/mjUcgTI2fXVmW8tTm/Ud6OzUwpC3vYgybiOOA4f6mOC5dbyUHrLOsrihU
+47ZQ0Jo1DUfboYIBrTCBwTBtMA0GCSqGSIb3DQEBAgUAMD4xCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEWMBQGA1UECxMNVEVTVCBSb290IFBD
+QRcNOTYwNzE3MTc0NDA5WhcNOTgwNzE3MDAwMDAwWjANBgkqhkiG9w0BAQIFAANB
+AHitA0/xAukCjHzeh1AMT/l2oC68N+yFb+aJPHBBMxc6gG2MaKjBNwb5hcXUllMl
+ExONA3ju10f7owIq3s3wx10wgeYwgZEwDQYJKoZIhvcNAQECBQAwYjERMA8GA1UE
+BxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytW
+ZXJpU2lnbiBDbGFzcyAxIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyFw05NjA3
+MTcxNzU5MjlaFw05NzA3MTgwMDAwMDBaMA0GCSqGSIb3DQEBAgUAA0EAubVWYTsW
+sQmste9f+UgMw8BkjDlM25fwQLrCfmmnLxjewey10kSROypUaJLb+r4oRALc0fG9
+XfZsaiiIgotQHjEA
+-----END PKCS7-----
diff --git a/test/testreq2.pem b/test/testreq2.pem
new file mode 100644
index 000000000000..c3cdcffcbc61
--- /dev/null
+++ b/test/testreq2.pem
@@ -0,0 +1,7 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIHaMIGFAgEAMA4xDDAKBgNVBAMTA2NuNDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC
+QQCQsnkyUGDY2R3mYoeTprFJKgWuJ3f1jUjlIuW5+wfAUoeMt35c4vcFZ2mIBpEG
+DtzkNQN1kr2O9ldm9zYnYhyhAgMBAAGgEjAQBgorBgEEAYI3AgEOMQIwADANBgkq
+hkiG9w0BAQQFAANBAAb2szZgVIxg3vK6kYLjGSBISyuzcXJ6IvuPW6M+yzi1Qgoi
+gQhazHTJp91T8ItZEzUJGZSZl2e5iXlnffWB+/U=
+-----END CERTIFICATE REQUEST-----
diff --git a/test/testrsa.pem b/test/testrsa.pem
new file mode 100644
index 000000000000..8648f10e37b7
--- /dev/null
+++ b/test/testrsa.pem
@@ -0,0 +1,10 @@
+-----BEGIN PRIVATE KEY-----
+MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEAqtt6qS5GTxVxGZYW
+a0/4u+IwHf7p2LNZbcPBp9/OfIcYAXBQn8hO/Re1uwLKXdCjIoaGs4DLdG88rkzf
+yK5dPQIDAQABAkBndyfNodcz9vEZpHkJHVGsPWoUEBV+hAWI4f248mAxqgC6hASK
+w8dVxkMpw6/jASDr9MicAhcGcSKC2q9HO7KhAiEA9yBnNSrfJWigBqii/xRtc/Go
+eXCjoYEyqe/bTHOR/pkCIQCw/gGchpBMzxKa9ykdnBAl2Z0ceQYoCzfsN/GLrsdu
+RQIhAJ5kaWIdcVrTvUWnTpl5aVHYAOidNnOskGF1N7S/mkJ5AiEAhl+SIaAYFfhw
+i65yTMSbjeD1YxSPE//QaUrf28jKKHECIQCbKZ6EVFPQy+pbnEAoDHs+CS3wdUrB
+WFzYvAYocTQNkw==
+-----END PRIVATE KEY-----
diff --git a/test/testrsa2048.pem b/test/testrsa2048.pem
new file mode 100644
index 000000000000..a04028abcd23
--- /dev/null
+++ b/test/testrsa2048.pem
@@ -0,0 +1,29 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDNAIHqeyrh6gbV
+n3xz2f+5SglhXC5Lp8Y2zvCN01M+wxhVJbAVx2m5mnfWclv5w1Mqm25fZifV+4UW
+B2jT3anL01l0URcX3D0wnS/EfuQfl+Mq23+d2GShxHZ6Zm7NcbwarPXnUX9LOFlP
+6psF5C1a2pkSAIAT5FMWpNm7jtCGuI0odYusr5ItRqhotIXSOcm66w4rZFknEPQr
+LR6gpLSALAvsqzKPimiwBzvbVG/uqYCdKEmRKzkMFTK8finHZY+BdfrkbzQzL/h7
+yrPkBkm5hXeGnaDqcYNT8HInVIhpE2SHYNEivmduD8SD3SD/wxvalqMZZsmqLnWt
+A95H4cRPAgMBAAECggEAYCl6x5kbFnoG1rJHWLjL4gi+ubLZ7Jc4vYD5Ci41AF3X
+ziktnim6iFvTFv7x8gkTvArJDWsICLJBTYIQREHYYkozzgIzyPeApIs3Wv8C12cS
+IopwJITbP56+zM+77hcJ26GCgA2Unp5CFuC/81WDiPi9kNo3Oh2CdD7D+90UJ/0W
+glplejFpEuhpU2URfKL4RckJQF/KxV+JX8FdIDhsJu54yemQdQKaF4psHkzwwgDo
+qc+yfp0Vb4bmwq3CKxqEoc1cpbJ5CHXXlAfISzUjlcuBzD/tW7BDtp7eDAcgRVAC
+XO6MX0QBcLYSC7SOD3R7zY9SIRCFDfBDxCjf0YcFMQKBgQD2+WG0fLwDXTrt68fe
+hQqVa2Xs25z2B2QGPxWqSFU8WNly/mZ1BW413f3De/O58vYi7icTNyVoScm+8hdv
+6PfD+LuRujdN1TuvPeyBTSvewQwf3IjN0Wh28mse36PwlBl+301C/x+ylxEDuJjK
+hZxCcocIaoQqtBC7ac8tNa9r4wKBgQDUfnJKf/QQSLJwwlJKQQGHi3MVm7c9PbwY
+eyIOY1s1NPluJDoYTZP4YLa/u2txwe2aHh9FhYMCPDAelqaSwaCLU9DsnKkQEA2A
+RR47fcagG6xK7O+N95iEa8I1oIy7os9MBoBMwRIZ6VYIxxTj8UMNSR+tu6MqV1Gg
+T5d0WDTJpQKBgCHyRSu5uV39AoyRS/eZ8cp36JqV1Q08FtOE+EVfi9evnrPfo9WR
+2YQt7yNfdjCo5IwIj/ZkLhAXlFNakz4el2+oUJ/HKLLaDEoaCNf883q6rh/zABrK
+HcG7sF2d/7qhoJ9/se7zgjfZ68zHIrkzhDbd5xGREnmMJoCcGo3sQyBhAoGAH3UQ
+qmLC2N5KPFMoJ4H0HgLQ6LQCrnhDLkScSBEBYaEUA/AtAYgKjcyTgVLXlyGkcRpg
+esRHHr+WSBD5W+R6ReYEmeKfTJdzyDdzQE9gZjdyjC0DUbsDwybIu3OnIef6VEDq
+IXK7oUZfzDDcsNn4mTDoFaoff5cpqFfgDgM43VkCgYBNHw11b+d+AQmaZS9QqIt7
+aF3FvwCYHV0jdv0Mb+Kc1bY4c0R5MFpzrTwVmdOerjuuA1+9b+0Hwo3nBZM4eaBu
+SOamA2hu2OJWCl9q8fLCT69KqWDjghhvFe7c6aJJGucwaA3Uz3eLcPqoaCarMiNH
+fMkTd7GabVourqIZdgvu1Q==
+-----END PRIVATE KEY-----
+
diff --git a/test/testrsa2048pub.pem b/test/testrsa2048pub.pem
new file mode 100644
index 000000000000..64406a88cad4
--- /dev/null
+++ b/test/testrsa2048pub.pem
@@ -0,0 +1,9 @@
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzQCB6nsq4eoG1Z98c9n/
+uUoJYVwuS6fGNs7wjdNTPsMYVSWwFcdpuZp31nJb+cNTKptuX2Yn1fuFFgdo092p
+y9NZdFEXF9w9MJ0vxH7kH5fjKtt/ndhkocR2emZuzXG8Gqz151F/SzhZT+qbBeQt
+WtqZEgCAE+RTFqTZu47QhriNKHWLrK+SLUaoaLSF0jnJuusOK2RZJxD0Ky0eoKS0
+gCwL7Ksyj4posAc721Rv7qmAnShJkSs5DBUyvH4px2WPgXX65G80My/4e8qz5AZJ
+uYV3hp2g6nGDU/ByJ1SIaRNkh2DRIr5nbg/Eg90g/8Mb2pajGWbJqi51rQPeR+HE
+TwIDAQAB
+-----END PUBLIC KEY-----
diff --git a/test/testrsa_withattrs.der b/test/testrsa_withattrs.der
new file mode 100644
index 000000000000..811e1e0bcb00
--- /dev/null
+++ b/test/testrsa_withattrs.der
Binary files differ
diff --git a/test/testrsa_withattrs.pem b/test/testrsa_withattrs.pem
new file mode 100644
index 000000000000..42d0a3c51cfe
--- /dev/null
+++ b/test/testrsa_withattrs.pem
@@ -0,0 +1,29 @@
+-----BEGIN PRIVATE KEY-----
+MIIE+QIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDsh7QWxhftrqng
+RC3Ms+HxH2NFCX1sRoiIV4cYK2z0DQdEiNpFdpHlcs3weTuudcpr8XursodVFMTB
+eHjROhgwO/LT9xReEUiaoHJgfv6KcKcxEvntCjQkzGhkw03OH5VYdtTRAbwpwcYt
+groPiZ2STINpQOmFabzai+K+3rddwTGkkca3C5kY7KOMlnt9IuvmycksRqH6MPKz
+P5QbztlgY95rtra+OEzKLYQ1ux6hkaUlpxT5eGKfzYdccwKJWa0dUXyT/8F6rpTm
+Zbz3BxdKGAWMywaTfh5ywhNmVNTeIumxIRc3+PInn0rqKTaDrWylxiBdb3t27HxQ
+InDZmPwdAgMBAAECggEBAMTRrzN8JxEq1ES/tvStgodoPOyHlwxwLNB3NP0RtZnm
+9XM8BZTjs0egnmlKGDV14riruuMGrcJIg+kR3EcN9m68k7V51kLoUugINuTBCAIe
+96DIT5vFb9pnFT8znRy1/0obp787mF2O1t+r9jNTqgDBFmCRGUBg2jtpR4bYQPEL
+ZjXMDPcsmOlmbBdsyQvjlOHqXjCoUWwOCBEZdtaLzxaOPrBW5Jh2h3Xz1pV3NdZ/
+xufAYRhpJamPNiSipRehBZAeQP2ZAyHj/5x3tgEcA+C04Ki8NvuwJx/6T/lGKD+1
+x3DKsniNi6fEbGlpST/Zp1GY4WyVPcrLa8JxyO+UagECgYEA+gvBBI+LSK5enPXu
+WooEQP17fKzdZG7Cic8TfTPbtBIcXjNQFLHjFoBNk+TBFCjZma7L+fEcKcDm+Bg1
+qa4xihOP6BoQqHXZZNZ+9ZU96MPmI9Zb60CMG9lM1VVhSqrm2n3Q+tefod/a2bQk
+oz8QsdpsUFqVFCF5l+Tb6lp2QN0CgYEA8imPEml6LG35snBY1H6t0ASCHT1oFdHP
+o01WKQas/tuLO+pMfZrA0zLZBExxZuUJloC6COsTcOrlK+hGM60Ab6TgSPbUvYqH
+8yMV7SYLvheEngqIiFExmHg79mxnys3Rgv9KMxAV2Ip2wBrBMwUOaURU9pUKXlIN
+xiaUuevSVEECgYEA0Dbrcs3JUSuKM7AC3DfjlO6/XrFf5hrpOfJKq058m/Uc1EBs
+Zd8/V2RdtVKeiRf/Ix9QUYA6UHaGnn8iaHpaXD0v7zmNN4pzDaojrIKrO+GtCZid
+kEd+pE4N0fO4AYJQnA567/aPwi7zQaflfl6smz1kRoE3dLzvUNHNYtgTcq0CgYAm
+Op1VgMVCwlHK86VyVlVGI5AO4aTO3QJ0ez8A1wb0bOA8Iy7UHVwXe017Oj4kyj+L
+POMhiUrWZp6rIc4DVmpdNaAapKzNB1OS9JT/jSQJbFkJQgxvyLGVqlV8/3wbLgbH
+MVobWYy5VJKOnSqmzUOLJrhq/PhYD4gRIgIUn7/igQKBgQCptqrREOq9fXDEpozC
+39TL4vDrKJWpB1uK6pBEjgEVD/+tcfziVN40j5hnNFDUu/8kxxp9/4w8mPjdJ0CF
+hWIvrXasjnnFehy6IewWCljNH5CfOM64rDoXaF+ESIM4rLBHbQ8KYvaKkMjOcdNB
+JG1sRWVU01AwEhnvxS1zbyBtiqA4MDYGCCqFAwIJAwgBMSoEKBqiSOXm8r5I7hEA
++gglN/s0bbRCnzopEhuEorpcnDXrktVtjQrmMi0=
+-----END PRIVATE KEY-----
diff --git a/test/testrsapss.pem b/test/testrsapss.pem
new file mode 100644
index 000000000000..4b29ca334f2b
--- /dev/null
+++ b/test/testrsapss.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAzs95rRH49f5zZ1G9
+Cb/Ie5P5GfNto2etu2L90qrewOJKZ4CQ49D8QEKzjnFJhagj/i5MNdWHeTCrDAsQ
+jrbKS6ik/HY11yiB0wZ4ItXsfMQX+qIVp2X9BQFx/ID5nVCXrQcfMfcqFk19cv4N
+mgKgdeEZT9O5baSX2jKKsR8E/4+QilI9xBxzig+HJ2cG2clMkGZut5hiBwwWZ0+1
+v1v5ZbkUGwroGJqBsqzI8vTW+bT/VVlhCgdoAj6/p543tgBM439O1ZDDIxVZbadI
+uacwSwV2yBlSzDGExJwjisABwOZWNta4lQ5NI1ZEzA0I1+MPyyzvX0/1ZupgDtcq
+T5zWUwIDAQABAoIBAHm4Cvkd1tWRiQKKTSRrx+dT1Ay+BQ1jfBEJ1jIjdy83AGui
+c6Rh39VCbMOtUYRkzapQPXKB1lYxmrpf2MLmOnIFM/WS7WVQ5ff5msOF/MYB88sD
+kpMPp7dGfnwKvN8mC98+jdGukwrFWMxRUlgOq7o1Xdxp1Hz/npBBpvdQNnTiTpbq
+q8tanx2QRHqhc1+5hYik6OamK0D+Gp9Ver+UZSDf86yJro/fLDzkJlZb5tv11ggn
+nv2obfb9cMG/U+QQuWZ18wWrc3EjWDgy5BmUSprPdbJknyIhVhnTwpUQk+MXbx6K
+9RdlpxURXKnlkvL84cdtB6zBfFcNNPSe5si2HCECgYEA+Mb7mAoiZAzwUGKCTvHZ
+AKH2jBEjFA4ZSMqu+bZqLCv8xflbcTAb/b4zxU5PSZCONf0InrhVjqDoz6u/wPC4
+1Drvg8dRIvRoc207lWanMfriE6kj5QdspEARom/56x2ADPy9mRsWy8ZtENrw4LGh
+XaoKr1dvoC1lvAtB/O4RZhcCgYEA1NCT0mthIQkcwgvDXHDyF++/i38zRIbqtWrS
+18UzSk9kMIcP8euP7hesJnvT8ySFXOkmJ9RJd0N5Mc0XXxgT2k52goebw/3IUDIY
+8vuMkANZMjUp7hvXsqYVxWgPU8526rQtbzXTuqKK8mZ9Q03XJ5Mcd/tI80lUkAm3
+WSJhsyUCgYAIA2jRQepPrLcE79dgsZua0Jy/cEHgAIBB/v1Z381VtOkEe369i54r
+Mzg5r8cQCI78IDVp32gqGvbE0bRwg5CAjZFvfjkX1iWTKj6UFmVmT71+gqE8XFvc
+go/O2qqDL0UTpgR5bQzz7WVP+K1vn2kiOjrz4O4gi7XOM9KhUg3PawKBgQDQ7K+i
+jN5/AyYjbk7tqshRLYJbXZYkOVuknOm/AI847bYLWh0SQFM9yCmuYjSS6BCxRQa7
+ZVJ2blxFwvWl2spqsEryHFWUVMpZyMTrjn7RRyhC/SRb6SOZ9Ck9cspRWUkvY5GT
+M0HYYQiNroZdE8ccx/TT6XMVvLDy80b3j6RgrQKBgQCvKd8TNakeskEfjAnn4WLO
+0+I7oxkhth0i6eIUaXpqoVsZypAhXGC13V2Y5HyvIPNUSjsG2XafQOzZXHgGTixP
+YaYHAo9cWis8t21eTRrOMtnALqL59oVMFTbiy/dJhN4m0sxezzTVIpqBxTYzagbZ
+46EVSoOEYkU7U/TiD+HGHQ==
+-----END PRIVATE KEY-----
diff --git a/test/testrsapssmandatory.pem b/test/testrsapssmandatory.pem
new file mode 100644
index 000000000000..d01ae82c88e7
--- /dev/null
+++ b/test/testrsapssmandatory.pem
@@ -0,0 +1,29 @@
+-----BEGIN PRIVATE KEY-----
+MIIE7gIBADA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCA6EaMBgGCSqGSIb3
+DQEBCDALBglghkgBZQMEAgOiAwIBQASCBKgwggSkAgEAAoIBAQDdiLMYj8fgrXKB
+dEC704hcfmeJebCyaZbYHBE/1YthJOptbhisBbNk4onKMITO6hkYOoH12rNxqwY5
+d9J1Ray6SJETVHxYCKftJ1LlrUJGqpyRCAAff1LYjjGRyqcMzVItWffy2iCgKGud
+uUqs9Og3wsVxUeXfTSGnLo1UevVc1qTKZJuDRWD2EItuwnFt7GA89IgGx8/liLsg
+cdlnm81gGdDmNKxNGi3VeOaJqFWnP9CpL8iXybG7F32U9mgEdE+EYt8GhQfNLzjL
+j17xfLl5K0SMqL8q+phas6Md0OmTl3Xg8Tupdoo/okAoYGXrv/sHDiV1YBSkXD4i
+dbV42aUfAgMBAAECggEAEyEJrfZEYR85Avqh2FYksS/tCs7qNg2uC80opCVxWpsQ
+bxCRqtD3M5/oHABih2dpcVEkBbGzyv3klLPHBX9VseQwOsYR0pw0u+KoYtK6JVX4
+HQHe2Nlqsu5cU2V3VUCpducM5Ph21r2GxWDJlPO01ZPI7scOnWCQpln7tC7F3xU0
+jNQ0SnFZ6SO4FrrBxOMjnIFiNMexxZt0fU7khy/dGck9aN4DtmQENcQkGdXj5xRv
+lInh92mQ16yMCbEU8cslWaAwqRF/k/5QxoIwTXr8PqaWshH9TIAht0rvTilWpHPg
+zpW6Pog/wGzVat3NeU3vBDYIUayHc6n3gbfJZDNxmQKBgQD41lAkxNsA89mYY7S9
+5NkDJ1N1hKNwg+iEyCZJkjxUk+SymdO7U/iD27Hgn/XyXm4RC5aHYpXJSnuiOk7R
+Z1Az1jjqLzPxsP72sWLORzGq82smYrK+iV2rhozWNlfVyazDkBcRRz2bLSESzgvO
+JWD3K3pjvj8U9ZSUhz+zXo4sUwKBgQDj6TBTKGDb8Au8sUOC916GrIrUEq5SkMDT
+A4CiD4fmvbdNs90AhD/mmqBw/dP3TbCPNmP8tGMUT0BDev6BoRKYOt+1XGYXt2de
+P38teVU/ZUcAO2RGdMNSdWT5o9BCWQZ18qSoOR/QanckOnkhKCgU/wqSdIvBBRMQ
+5e4qdI0qhQKBgB2MJTwYfADi88WaoU2jLPmo48oik926bBPISHOX/73zScbDaVbn
+I61UmwyXMfczq1Iu1BMDa9HZHFEpJ07KO8XL/DoinMJoR/43Fgp0fbtU6DZIpfzm
+Bs9lTLfrAAcMyYz3QSX2FaSleTXobZJu8dKnwQKzBn6QorH4VWIRKkStAoGBAIYL
+M1nlaLpSf4S2OT/A376Ton9CkXaMHmy9JZ2rRsHmGPZBcB0Kq06k6PIrx8wuzEYe
+tkX9jjx2tBQ8NY3mPzp7ffF766vNOaWL8O+86e+EUHMJe1uY9vv7gaz1tNog5BTg
+5gjuuBBrXbFYFr/yj0hyDDTBCSU4J9OLeD1OGWzFAoGBAMGc9h8oLyA3rQEjIuVA
+CuzgvZxOFPbtODFPcL4EQgAKLiKS+oZK0jONfCHaQB1AhIq8/nT/4suw7tWqYoKp
+KGH/+8tKNodKZfZLjVp0k8gsehyMDz1002/RLMJyFRIJWa1BqEJs7v7XgWW3RcmC
+PWznhdpNx3BYDSao5Ibl7I5E
+-----END PRIVATE KEY-----
diff --git a/test/testrsapub.pem b/test/testrsapub.pem
new file mode 100644
index 000000000000..bee2b95e2cc8
--- /dev/null
+++ b/test/testrsapub.pem
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKrbeqkuRk8VcRmWFmtP+LviMB3+6diz
+WW3DwaffznyHGAFwUJ/ITv0XtbsCyl3QoyKGhrOAy3RvPK5M38iuXT0CAwEAAQ==
+-----END PUBLIC KEY-----
diff --git a/test/testsid.pem b/test/testsid.pem
new file mode 100644
index 000000000000..36fc4dbe48ed
--- /dev/null
+++ b/test/testsid.pem
@@ -0,0 +1,38 @@
+-----BEGIN SSL SESSION PARAMETERS-----
+MIIGqQIBAQICAwMEAsAwBCABkpk0q01VEnPtcNWLtYg1xZJLreP0C1r4wPOakiLu
+8AQwi0opOLa+Omt26PqbLUcmI1H7F/n7qRy6TaL9Lxf2/ZBUDgRG3aSuSejO+gki
+F2U9oQYCBFR6XVaiBAICASyjggVjMIIFXzCCBEegAwIBAgIQNdDRF5hINFi7kAeK
+0fP5FjANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJGUjESMBAGA1UEChMJR0FO
+REkgU0FTMR4wHAYDVQQDExVHYW5kaSBTdGFuZGFyZCBTU0wgQ0EwHhcNMTMxMjMx
+MDAwMDAwWhcNMTQxMjMxMjM1OTU5WjBYMSEwHwYDVQQLExhEb21haW4gQ29udHJv
+bCBWYWxpZGF0ZWQxGzAZBgNVBAsTEkdhbmRpIFN0YW5kYXJkIFNTTDEWMBQGA1UE
+AxMNZGIuZGViaWFuLm9yZzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGB
+AN/7DlZZKR5SELzF7rdn6LWxuebpVyFu1eXltzxi+Mig9cR0ZZD3hp0JcUresABO
+zE66AuhGtcFus/J/88CGM2r39u3n5ac5O/4Ypp57997YJRV725dL4oX75Vpc4p8j
+EI/LyIFteZN22ziv9zW7qCKKahnq1tuqDkV+84BEARpVdIaaWmn/KqsEgxeNKomy
+OLvn96IVCTAF78rudPmJHfSCl++NFmg0yu7DPyuXf8YJfA6j8/kFueanK2B1y/ww
+8MSbL3iAdgLwVtRJkwRYyKn8p5+ybwzX9L36GWgYs9OXUn8x494T5GjbGQVxUNt7
+qJnRtiUwYVoiOARrv1EI0Cq4ANXVaLDckc5y0a2PY3c4NWVlKGYbdxdQC1n6nH93
+mWDIr6vu7JX3CqDDr8FBlNVVtiBiv0q/eiVb9dzBzOntt3hA6GOJFAuwDDf7g7nq
+Gq8qqcr7EIyVB8ytQ5XMgtLCpmJkLzIdRYfdsQMa7cAbl0THAwwXigcotFA0aYIP
+BQIDAQABo4IBujCCAbYwHwYDVR0jBBgwFoAUtqj/oqgv0KbNS7Fo8+dQEDGneSEw
+HQYDVR0OBBYEFDJGWXznCu/+qyFLCmUI4cmXy1DCMA4GA1UdDwEB/wQEAwIFoDAM
+BgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBgBgNV
+HSAEWTBXMEsGCysGAQQBsjEBAgIaMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cu
+Z2FuZGkubmV0L2NvbnRyYWN0cy9mci9zc2wvY3BzL3BkZi8wCAYGZ4EMAQIBMDwG
+A1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuZ2FuZGkubmV0L0dhbmRpU3RhbmRh
+cmRTU0xDQS5jcmwwagYIKwYBBQUHAQEEXjBcMDcGCCsGAQUFBzAChitodHRwOi8v
+Y3J0LmdhbmRpLm5ldC9HYW5kaVN0YW5kYXJkU1NMQ0EuY3J0MCEGCCsGAQUFBzAB
+hhVodHRwOi8vb2NzcC5nYW5kaS5uZXQwKwYDVR0RBCQwIoINZGIuZGViaWFuLm9y
+Z4IRd3d3LmRiLmRlYmlhbi5vcmcwDQYJKoZIhvcNAQEFBQADggEBAK+ix7EQNPgU
+qDx46gAPifcm6b2FvXq+gtlB9h6UaDDO7fxDzmoU5V4WtdBM5uvIfOmpeNuCxPaj
+18cUlj9PPjL3eK43UCVu6w5hN3p2/2BPvFjQRhtBcIcEWsMal1DCtS/vCBkQt1lS
+gd4/xiMfK4cQYtwRu47gB0HuM2lecYHA42EC5hqupY/2tHo54AdyU46TxgUQcm0e
+icLtYuTjIYQWdUgM92heDw8caey5GKL2/TmYM2iWy/csFLm4tJAwPMtvy1KWdJQE
+iqYIuI9Lb4/xOyjSwVNLIJmbEzE6Sds9sjxqEcU4CconTVJazvHZtnBRV8GiRYKa
+d/xgQ6J+/Z2kAgQAqQQCAgEsqoHDBIHAPGxCacLRMYb3hbL3lRqQIfH3xoufIwKn
+zOAIyjxH7GPZpI87/e93AF1uw6eyy+aWJM6G/71E8Ln1iQtZjrGkGQCjEcIrUhEk
+Bgg93A28zly2zu2aBwi2yT4bUcyHxE3P3Q4R8xkQxrdWSMfCjCy9HKUViOENKET6
+avKXF7lDT1iG/x8RtTHtFGYX4YcFVhdEqcqnZ7tw5sqkHG2D0gLzO2SETF9KPHCq
+zAHQtw5r4Dgl+a+BGLczh6as4yIH+xH+swMCAQA=
+-----END SSL SESSION PARAMETERS-----
diff --git a/test/testutil.h b/test/testutil.h
new file mode 100644
index 000000000000..443d01d7fb2a
--- /dev/null
+++ b/test/testutil.h
@@ -0,0 +1,635 @@
+/*
+ * Copyright 2014-2022 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_TESTUTIL_H
+# define OSSL_TESTUTIL_H
+
+# include <stdarg.h>
+
+# include <openssl/provider.h>
+# include <openssl/err.h>
+# include <openssl/e_os2.h>
+# include <openssl/bn.h>
+# include <openssl/x509.h>
+# include "opt.h"
+
+/*-
+ * Simple unit tests should implement setup_tests().
+ * This function should return zero if the registration process fails.
+ * To register tests, call ADD_TEST or ADD_ALL_TESTS:
+ *
+ * int setup_tests(void)
+ * {
+ * ADD_TEST(test_foo);
+ * ADD_ALL_TESTS(test_bar, num_test_bar);
+ * return 1;
+ * }
+ *
+ * Tests that require clean up after execution should implement:
+ *
+ * void cleanup_tests(void);
+ *
+ * The cleanup_tests function will be called even if setup_tests()
+ * returns failure.
+ *
+ * In some cases, early initialization before the framework is set up
+ * may be needed. In such a case, this should be implemented:
+ *
+ * int global_init(void);
+ *
+ * This function should return zero if there is an unrecoverable error and
+ * non-zero if the initialization was successful.
+ */
+
+/* Adds a simple test case. */
+# define ADD_TEST(test_function) add_test(#test_function, test_function)
+
+/*
+ * Simple parameterized tests. Calls test_function(idx) for each 0 <= idx < num.
+ */
+# define ADD_ALL_TESTS(test_function, num) \
+ add_all_tests(#test_function, test_function, num, 1)
+/*
+ * A variant of the same without TAP output.
+ */
+# define ADD_ALL_TESTS_NOSUBTEST(test_function, num) \
+ add_all_tests(#test_function, test_function, num, 0)
+
+/*-
+ * Test cases that share common setup should use the helper
+ * SETUP_TEST_FIXTURE and EXECUTE_TEST macros for test case functions.
+ *
+ * SETUP_TEST_FIXTURE will call set_up() to create a new TEST_FIXTURE_TYPE
+ * object called "fixture". It will also allocate the "result" variable used
+ * by EXECUTE_TEST. set_up() should take a const char* specifying the test
+ * case name and return a TEST_FIXTURE_TYPE by reference.
+ * If case set_up() fails then 0 is returned.
+ *
+ * EXECUTE_TEST will pass fixture to execute_func() by reference, call
+ * tear_down(), and return the result of execute_func(). execute_func() should
+ * take a TEST_FIXTURE_TYPE by reference and return 1 on success and 0 on
+ * failure. The tear_down function is responsible for deallocation of the
+ * result variable, if required.
+ *
+ * Unit tests can define their own SETUP_TEST_FIXTURE and EXECUTE_TEST
+ * variations like so:
+ *
+ * #define SETUP_FOOBAR_TEST_FIXTURE()\
+ * SETUP_TEST_FIXTURE(FOOBAR_TEST_FIXTURE, set_up_foobar)
+ *
+ * #define EXECUTE_FOOBAR_TEST()\
+ * EXECUTE_TEST(execute_foobar, tear_down_foobar)
+ *
+ * Then test case functions can take the form:
+ *
+ * static int test_foobar_feature()
+ * {
+ * SETUP_FOOBAR_TEST_FIXTURE();
+ * [...set individual members of fixture...]
+ * EXECUTE_FOOBAR_TEST();
+ * }
+ */
+# define SETUP_TEST_FIXTURE(TEST_FIXTURE_TYPE, set_up)\
+ TEST_FIXTURE_TYPE *fixture = set_up(TEST_CASE_NAME); \
+ int result = 0; \
+\
+ if (fixture == NULL) \
+ return 0
+
+
+# define EXECUTE_TEST(execute_func, tear_down)\
+ if (fixture != NULL) {\
+ result = execute_func(fixture);\
+ tear_down(fixture);\
+ }
+
+/*
+ * TEST_CASE_NAME is defined as the name of the test case function where
+ * possible; otherwise we get by with the file name and line number.
+ */
+# if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
+# if defined(_MSC_VER)
+# define TEST_CASE_NAME __FUNCTION__
+# else
+# define testutil_stringify_helper(s) #s
+# define testutil_stringify(s) testutil_stringify_helper(s)
+# define TEST_CASE_NAME __FILE__ ":" testutil_stringify(__LINE__)
+# endif /* _MSC_VER */
+# else
+# define TEST_CASE_NAME __func__
+# endif /* __STDC_VERSION__ */
+
+
+/* The default test enum which should be common to all tests */
+# define OPT_TEST_ENUM \
+ OPT_TEST_HELP = 500, \
+ OPT_TEST_LIST, \
+ OPT_TEST_SINGLE, \
+ OPT_TEST_ITERATION, \
+ OPT_TEST_INDENT, \
+ OPT_TEST_SEED
+
+/* The Default test OPTIONS common to all tests (without a usage string) */
+# define OPT_TEST_OPTIONS \
+ { OPT_HELP_STR, 1, '-', "Valid options are:\n" }, \
+ { "help", OPT_TEST_HELP, '-', "Display this summary" }, \
+ { "list", OPT_TEST_LIST, '-', "Display the list of tests available" }, \
+ { "test", OPT_TEST_SINGLE, 's', "Run a single test by id or name" }, \
+ { "iter", OPT_TEST_ITERATION, 'n', "Run a single iteration of a test" }, \
+ { "indent", OPT_TEST_INDENT,'p', "Number of tabs added to output" }, \
+ { "seed", OPT_TEST_SEED, 'n', "Seed value to randomize tests with" }
+
+/* The Default test OPTIONS common to all tests starting with an additional usage string */
+# define OPT_TEST_OPTIONS_WITH_EXTRA_USAGE(usage) \
+ { OPT_HELP_STR, 1, '-', "Usage: %s [options] " usage }, \
+ OPT_TEST_OPTIONS
+
+/* The Default test OPTIONS common to all tests with an default usage string */
+# define OPT_TEST_OPTIONS_DEFAULT_USAGE \
+ { OPT_HELP_STR, 1, '-', "Usage: %s [options]\n" }, \
+ OPT_TEST_OPTIONS
+
+/*
+ * Optional Cases that need to be ignored by the test app when using opt_next(),
+ * (that are handled internally).
+ */
+# define OPT_TEST_CASES \
+ OPT_TEST_HELP: \
+ case OPT_TEST_LIST: \
+ case OPT_TEST_SINGLE: \
+ case OPT_TEST_ITERATION: \
+ case OPT_TEST_INDENT: \
+ case OPT_TEST_SEED
+
+/*
+ * Tests that use test_get_argument() that dont have any additional options
+ * (i.e- dont use opt_next()) can use this to set the usage string.
+ * It embeds test_get_options() which gives default command line options for
+ * the test system.
+ *
+ * Tests that need to use opt_next() need to specify
+ * (1) test_get_options() containing an options[] which should include either
+ * OPT_TEST_OPTIONS_DEFAULT_USAGE or
+ * OPT_TEST_OPTIONS_WITH_EXTRA_USAGE(...).
+ * (2) An enum outside the test_get_options() which contains OPT_TEST_ENUM, as
+ * well as the additional options that need to be handled.
+ * (3) case OPT_TEST_CASES: break; inside the opt_next() handling code.
+ */
+# define OPT_TEST_DECLARE_USAGE(usage_str) \
+const OPTIONS *test_get_options(void) \
+{ \
+ enum { OPT_TEST_ENUM }; \
+ static const OPTIONS options[] = { \
+ OPT_TEST_OPTIONS_WITH_EXTRA_USAGE(usage_str), \
+ { NULL } \
+ }; \
+ return options; \
+}
+
+/*
+ * Used to read non optional command line values that follow after the options.
+ * Returns NULL if there is no argument.
+ */
+char *test_get_argument(size_t n);
+/* Return the number of additional non optional command line arguments */
+size_t test_get_argument_count(void);
+
+/*
+ * Skip over common test options. Should be called before calling
+ * test_get_argument()
+ */
+int test_skip_common_options(void);
+
+/*
+ * Get a library context for the tests, populated with the specified provider
+ * and configuration. If default_null_prov is not NULL, a "null" provider is
+ * loaded into the default library context to prevent it being used.
+ * If libctx is NULL, the specified provider is loaded into the default library
+ * context.
+ */
+int test_get_libctx(OSSL_LIB_CTX **libctx, OSSL_PROVIDER **default_null_prov,
+ const char *config_file,
+ OSSL_PROVIDER **provider, const char *module_name);
+int test_arg_libctx(OSSL_LIB_CTX **libctx, OSSL_PROVIDER **default_null_prov,
+ OSSL_PROVIDER **provider, int argn, const char *usage);
+
+/*
+ * Internal helpers. Test programs shouldn't use these directly, but should
+ * rather link to one of the helper main() methods.
+ */
+
+void add_test(const char *test_case_name, int (*test_fn) (void));
+void add_all_tests(const char *test_case_name, int (*test_fn)(int idx), int num,
+ int subtest);
+
+/*
+ * Declarations for user defined functions.
+ * The first two return a boolean indicating that the test should not proceed.
+ */
+int global_init(void);
+int setup_tests(void);
+void cleanup_tests(void);
+
+/*
+ * Helper functions to detect specific versions of the FIPS provider being in use.
+ * Because of FIPS rules, code changes after a module has been validated are
+ * difficult and because we provide a hard guarantee of ABI and behavioural
+ * stability going forwards, it is a requirement to have tests be conditional
+ * on specific FIPS provider versions. Without this, bug fixes cannot be tested
+ * in later releases.
+ *
+ * The reason for not including e.g. a less than test is to help avoid any
+ * temptation to use FIPS provider version numbers that don't exist. Until the
+ * `new' provider is validated, its version isn't set in stone. Thus a change
+ * in test behaviour must depend on already validated module versions only.
+ *
+ * In all cases, the function returns true if:
+ * 1. the FIPS provider version matches the criteria specified or
+ * 2. the FIPS provider isn't being used.
+ */
+int fips_provider_version_eq(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
+int fips_provider_version_ne(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
+int fips_provider_version_le(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
+int fips_provider_version_lt(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
+int fips_provider_version_gt(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
+int fips_provider_version_ge(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
+
+/*
+ * This function matches fips provider version with (potentially multiple)
+ * <operator>maj.min.patch version strings in versions.
+ * The operator can be one of = ! <= or > comparison symbols.
+ * If the fips provider matches all the version comparisons (or if there is no
+ * fips provider available) the function returns 1.
+ * If the fips provider does not match the version comparisons, it returns 0.
+ * On error the function returns -1.
+ */
+int fips_provider_version_match(OSSL_LIB_CTX *libctx, const char *versions);
+
+/*
+ * Used to supply test specific command line options,
+ * If non optional parameters are used, then the first entry in the OPTIONS[]
+ * should contain:
+ * { OPT_HELP_STR, 1, '-', "<list of non-optional commandline params>\n"},
+ * The last entry should always be { NULL }.
+ *
+ * Run the test locally using './test/test_name -help' to check the usage.
+ */
+const OPTIONS *test_get_options(void);
+
+/*
+ * Test assumption verification helpers.
+ */
+
+# define PRINTF_FORMAT(a, b)
+# if defined(__GNUC__) && defined(__STDC_VERSION__) \
+ && !defined(__MINGW32__) && !defined(__MINGW64__) \
+ && !defined(__APPLE__)
+ /*
+ * Because we support the 'z' modifier, which made its appearance in C99,
+ * we can't use __attribute__ with pre C99 dialects.
+ */
+# if __STDC_VERSION__ >= 199901L
+# undef PRINTF_FORMAT
+# define PRINTF_FORMAT(a, b) __attribute__ ((format(printf, a, b)))
+# endif
+# endif
+
+# define DECLARE_COMPARISON(type, name, opname) \
+ int test_ ## name ## _ ## opname(const char *, int, \
+ const char *, const char *, \
+ const type, const type);
+
+# define DECLARE_COMPARISONS(type, name) \
+ DECLARE_COMPARISON(type, name, eq) \
+ DECLARE_COMPARISON(type, name, ne) \
+ DECLARE_COMPARISON(type, name, lt) \
+ DECLARE_COMPARISON(type, name, le) \
+ DECLARE_COMPARISON(type, name, gt) \
+ DECLARE_COMPARISON(type, name, ge)
+
+DECLARE_COMPARISONS(int, int)
+DECLARE_COMPARISONS(unsigned int, uint)
+DECLARE_COMPARISONS(char, char)
+DECLARE_COMPARISONS(unsigned char, uchar)
+DECLARE_COMPARISONS(long, long)
+DECLARE_COMPARISONS(unsigned long, ulong)
+DECLARE_COMPARISONS(double, double)
+DECLARE_COMPARISONS(time_t, time_t)
+
+/*
+ * Because this comparison uses a printf format specifier that's not
+ * universally known (yet), we provide an option to not have it declared.
+ */
+# ifndef TESTUTIL_NO_size_t_COMPARISON
+DECLARE_COMPARISONS(size_t, size_t)
+# endif
+
+/*
+ * Pointer comparisons against other pointers and null.
+ * These functions return 1 if the test is true.
+ * Otherwise, they return 0 and pretty-print diagnostics.
+ * These should not be called directly, use the TEST_xxx macros below instead.
+ */
+DECLARE_COMPARISON(void *, ptr, eq)
+DECLARE_COMPARISON(void *, ptr, ne)
+int test_ptr(const char *file, int line, const char *s, const void *p);
+int test_ptr_null(const char *file, int line, const char *s, const void *p);
+
+/*
+ * Equality tests for strings where NULL is a legitimate value.
+ * These calls return 1 if the two passed strings compare true.
+ * Otherwise, they return 0 and pretty-print diagnostics.
+ * These should not be called directly, use the TEST_xxx macros below instead.
+ */
+DECLARE_COMPARISON(char *, str, eq)
+DECLARE_COMPARISON(char *, str, ne)
+
+/*
+ * Same as above, but for strncmp.
+ */
+int test_strn_eq(const char *file, int line, const char *, const char *,
+ const char *a, size_t an, const char *b, size_t bn);
+int test_strn_ne(const char *file, int line, const char *, const char *,
+ const char *a, size_t an, const char *b, size_t bn);
+
+/*
+ * Equality test for memory blocks where NULL is a legitimate value.
+ * These calls return 1 if the two memory blocks compare true.
+ * Otherwise, they return 0 and pretty-print diagnostics.
+ * These should not be called directly, use the TEST_xxx macros below instead.
+ */
+int test_mem_eq(const char *, int, const char *, const char *,
+ const void *, size_t, const void *, size_t);
+int test_mem_ne(const char *, int, const char *, const char *,
+ const void *, size_t, const void *, size_t);
+
+/*
+ * Check a boolean result for being true or false.
+ * They return 1 if the condition is true (i.e. the value is non-zero).
+ * Otherwise, they return 0 and pretty-prints diagnostics using |s|.
+ * These should not be called directly, use the TEST_xxx macros below instead.
+ */
+int test_true(const char *file, int line, const char *s, int b);
+int test_false(const char *file, int line, const char *s, int b);
+
+/*
+ * Comparisons between BIGNUMs.
+ * BIGNUMS can be compared against other BIGNUMs or zero.
+ * Some additional equality tests against 1 & specific values are provided.
+ * Tests for parity are included as well.
+ */
+DECLARE_COMPARISONS(BIGNUM *, BN)
+int test_BN_eq_zero(const char *file, int line, const char *s, const BIGNUM *a);
+int test_BN_ne_zero(const char *file, int line, const char *s, const BIGNUM *a);
+int test_BN_lt_zero(const char *file, int line, const char *s, const BIGNUM *a);
+int test_BN_le_zero(const char *file, int line, const char *s, const BIGNUM *a);
+int test_BN_gt_zero(const char *file, int line, const char *s, const BIGNUM *a);
+int test_BN_ge_zero(const char *file, int line, const char *s, const BIGNUM *a);
+int test_BN_eq_one(const char *file, int line, const char *s, const BIGNUM *a);
+int test_BN_odd(const char *file, int line, const char *s, const BIGNUM *a);
+int test_BN_even(const char *file, int line, const char *s, const BIGNUM *a);
+int test_BN_eq_word(const char *file, int line, const char *bns, const char *ws,
+ const BIGNUM *a, BN_ULONG w);
+int test_BN_abs_eq_word(const char *file, int line, const char *bns,
+ const char *ws, const BIGNUM *a, BN_ULONG w);
+
+/*
+ * Pretty print a failure message.
+ * These should not be called directly, use the TEST_xxx macros below instead.
+ */
+void test_error(const char *file, int line, const char *desc, ...)
+ PRINTF_FORMAT(3, 4);
+void test_error_c90(const char *desc, ...) PRINTF_FORMAT(1, 2);
+void test_info(const char *file, int line, const char *desc, ...)
+ PRINTF_FORMAT(3, 4);
+void test_info_c90(const char *desc, ...) PRINTF_FORMAT(1, 2);
+void test_note(const char *desc, ...) PRINTF_FORMAT(1, 2);
+int test_skip(const char *file, int line, const char *desc, ...)
+ PRINTF_FORMAT(3, 4);
+int test_skip_c90(const char *desc, ...) PRINTF_FORMAT(1, 2);
+void test_openssl_errors(void);
+void test_perror(const char *s);
+
+/*
+ * The following macros provide wrapper calls to the test functions with
+ * a default description that indicates the file and line number of the error.
+ *
+ * The following macros guarantee to evaluate each argument exactly once.
+ * This allows constructs such as: if (!TEST_ptr(ptr = OPENSSL_malloc(..)))
+ * to produce better contextual output than:
+ * ptr = OPENSSL_malloc(..);
+ * if (!TEST_ptr(ptr))
+ */
+# define TEST_int_eq(a, b) test_int_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_int_ne(a, b) test_int_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_int_lt(a, b) test_int_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_int_le(a, b) test_int_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_int_gt(a, b) test_int_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_int_ge(a, b) test_int_ge(__FILE__, __LINE__, #a, #b, a, b)
+
+# define TEST_uint_eq(a, b) test_uint_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uint_ne(a, b) test_uint_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uint_lt(a, b) test_uint_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uint_le(a, b) test_uint_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uint_gt(a, b) test_uint_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uint_ge(a, b) test_uint_ge(__FILE__, __LINE__, #a, #b, a, b)
+
+# define TEST_char_eq(a, b) test_char_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_char_ne(a, b) test_char_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_char_lt(a, b) test_char_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_char_le(a, b) test_char_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_char_gt(a, b) test_char_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_char_ge(a, b) test_char_ge(__FILE__, __LINE__, #a, #b, a, b)
+
+# define TEST_uchar_eq(a, b) test_uchar_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uchar_ne(a, b) test_uchar_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uchar_lt(a, b) test_uchar_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uchar_le(a, b) test_uchar_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uchar_gt(a, b) test_uchar_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_uchar_ge(a, b) test_uchar_ge(__FILE__, __LINE__, #a, #b, a, b)
+
+# define TEST_long_eq(a, b) test_long_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_long_ne(a, b) test_long_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_long_lt(a, b) test_long_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_long_le(a, b) test_long_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_long_gt(a, b) test_long_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_long_ge(a, b) test_long_ge(__FILE__, __LINE__, #a, #b, a, b)
+
+# define TEST_ulong_eq(a, b) test_ulong_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_ulong_ne(a, b) test_ulong_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_ulong_lt(a, b) test_ulong_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_ulong_le(a, b) test_ulong_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_ulong_gt(a, b) test_ulong_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_ulong_ge(a, b) test_ulong_ge(__FILE__, __LINE__, #a, #b, a, b)
+
+# define TEST_size_t_eq(a, b) test_size_t_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_size_t_ne(a, b) test_size_t_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_size_t_lt(a, b) test_size_t_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_size_t_le(a, b) test_size_t_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_size_t_gt(a, b) test_size_t_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_size_t_ge(a, b) test_size_t_ge(__FILE__, __LINE__, #a, #b, a, b)
+
+# define TEST_double_eq(a, b) test_double_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_double_ne(a, b) test_double_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_double_lt(a, b) test_double_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_double_le(a, b) test_double_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_double_gt(a, b) test_double_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_double_ge(a, b) test_double_ge(__FILE__, __LINE__, #a, #b, a, b)
+
+# define TEST_time_t_eq(a, b) test_time_t_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_time_t_ne(a, b) test_time_t_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_time_t_lt(a, b) test_time_t_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_time_t_le(a, b) test_time_t_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_time_t_gt(a, b) test_time_t_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_time_t_ge(a, b) test_time_t_ge(__FILE__, __LINE__, #a, #b, a, b)
+
+# define TEST_ptr_eq(a, b) test_ptr_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_ptr_ne(a, b) test_ptr_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_ptr(a) test_ptr(__FILE__, __LINE__, #a, a)
+# define TEST_ptr_null(a) test_ptr_null(__FILE__, __LINE__, #a, a)
+
+# define TEST_str_eq(a, b) test_str_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_str_ne(a, b) test_str_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_strn_eq(a, b, n) test_strn_eq(__FILE__, __LINE__, #a, #b, a, n, b, n)
+# define TEST_strn_ne(a, b, n) test_strn_ne(__FILE__, __LINE__, #a, #b, a, n, b, n)
+# define TEST_strn2_eq(a, m, b, n) test_strn_eq(__FILE__, __LINE__, #a, #b, a, m, b, n)
+# define TEST_strn2_ne(a, m, b, n) test_strn_ne(__FILE__, __LINE__, #a, #b, a, m, b, n)
+
+# define TEST_mem_eq(a, m, b, n) test_mem_eq(__FILE__, __LINE__, #a, #b, a, m, b, n)
+# define TEST_mem_ne(a, m, b, n) test_mem_ne(__FILE__, __LINE__, #a, #b, a, m, b, n)
+
+# define TEST_true(a) test_true(__FILE__, __LINE__, #a, (a) != 0)
+# define TEST_false(a) test_false(__FILE__, __LINE__, #a, (a) != 0)
+
+# define TEST_BN_eq(a, b) test_BN_eq(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_BN_ne(a, b) test_BN_ne(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_BN_lt(a, b) test_BN_lt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_BN_gt(a, b) test_BN_gt(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_BN_le(a, b) test_BN_le(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_BN_ge(a, b) test_BN_ge(__FILE__, __LINE__, #a, #b, a, b)
+# define TEST_BN_eq_zero(a) test_BN_eq_zero(__FILE__, __LINE__, #a, a)
+# define TEST_BN_ne_zero(a) test_BN_ne_zero(__FILE__, __LINE__, #a, a)
+# define TEST_BN_lt_zero(a) test_BN_lt_zero(__FILE__, __LINE__, #a, a)
+# define TEST_BN_gt_zero(a) test_BN_gt_zero(__FILE__, __LINE__, #a, a)
+# define TEST_BN_le_zero(a) test_BN_le_zero(__FILE__, __LINE__, #a, a)
+# define TEST_BN_ge_zero(a) test_BN_ge_zero(__FILE__, __LINE__, #a, a)
+# define TEST_BN_eq_one(a) test_BN_eq_one(__FILE__, __LINE__, #a, a)
+# define TEST_BN_eq_word(a, w) test_BN_eq_word(__FILE__, __LINE__, #a, #w, a, w)
+# define TEST_BN_abs_eq_word(a, w) test_BN_abs_eq_word(__FILE__, __LINE__, #a, #w, a, w)
+# define TEST_BN_odd(a) test_BN_odd(__FILE__, __LINE__, #a, a)
+# define TEST_BN_even(a) test_BN_even(__FILE__, __LINE__, #a, a)
+
+/*
+ * TEST_error(desc, ...) prints an informative error message in the standard
+ * format. |desc| is a printf format string.
+ */
+# if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
+# define TEST_error test_error_c90
+# define TEST_info test_info_c90
+# define TEST_skip test_skip_c90
+# else
+# define TEST_error(...) test_error(__FILE__, __LINE__, __VA_ARGS__)
+# define TEST_info(...) test_info(__FILE__, __LINE__, __VA_ARGS__)
+# define TEST_skip(...) test_skip(__FILE__, __LINE__, __VA_ARGS__)
+# endif
+# define TEST_note test_note
+# define TEST_openssl_errors test_openssl_errors
+# define TEST_perror test_perror
+
+extern BIO *bio_out;
+extern BIO *bio_err;
+
+/*
+ * Formatted output for strings, memory and bignums.
+ */
+void test_output_string(const char *name, const char *m, size_t l);
+void test_output_bignum(const char *name, const BIGNUM *bn);
+void test_output_memory(const char *name, const unsigned char *m, size_t l);
+
+
+/*
+ * Utilities to parse a test file.
+ */
+# define TESTMAXPAIRS 150
+
+typedef struct pair_st {
+ char *key;
+ char *value;
+} PAIR;
+
+typedef struct stanza_st {
+ const char *test_file; /* Input file name */
+ BIO *fp; /* Input file */
+ int curr; /* Current line in file */
+ int start; /* Line where test starts */
+ int errors; /* Error count */
+ int numtests; /* Number of tests */
+ int numskip; /* Number of skipped tests */
+ int numpairs;
+ PAIR pairs[TESTMAXPAIRS];
+ BIO *key; /* temp memory BIO for reading in keys */
+ char buff[4096]; /* Input buffer for a single key/value */
+} STANZA;
+
+/*
+ * Prepare to start reading the file |testfile| as input.
+ */
+int test_start_file(STANZA *s, const char *testfile);
+int test_end_file(STANZA *s);
+
+/*
+ * Read a stanza from the test file. A stanza consists of a block
+ * of lines of the form
+ * key = value
+ * The block is terminated by EOF or a blank line.
+ * Return 1 if found, 0 on EOF or error.
+ */
+int test_readstanza(STANZA *s);
+
+/*
+ * Clear a stanza, release all allocated memory.
+ */
+void test_clearstanza(STANZA *s);
+
+/*
+ * Glue an array of strings together and return it as an allocated string.
+ * Optionally return the whole length of this string in |out_len|
+ */
+char *glue_strings(const char *list[], size_t *out_len);
+
+/*
+ * Pseudo random number generator of low quality but having repeatability
+ * across platforms. The two calls are replacements for random(3) and
+ * srandom(3).
+ */
+uint32_t test_random(void);
+void test_random_seed(uint32_t sd);
+
+/* Fake non-secure random number generator */
+typedef int fake_random_generate_cb(unsigned char *out, size_t outlen,
+ const char *name, EVP_RAND_CTX *ctx);
+
+OSSL_PROVIDER *fake_rand_start(OSSL_LIB_CTX *libctx);
+void fake_rand_finish(OSSL_PROVIDER *p);
+void fake_rand_set_callback(EVP_RAND_CTX *ctx,
+ int (*cb)(unsigned char *out, size_t outlen,
+ const char *name, EVP_RAND_CTX *ctx));
+void fake_rand_set_public_private_callbacks(OSSL_LIB_CTX *libctx,
+ fake_random_generate_cb *cb);
+
+/* Create a file path from a directory and a filename */
+char *test_mk_file_path(const char *dir, const char *file);
+
+EVP_PKEY *load_pkey_pem(const char *file, OSSL_LIB_CTX *libctx);
+X509 *load_cert_pem(const char *file, OSSL_LIB_CTX *libctx);
+X509 *load_cert_der(const unsigned char *bytes, int len);
+STACK_OF(X509) *load_certs_pem(const char *file);
+X509_REQ *load_csr_der(const char *file, OSSL_LIB_CTX *libctx);
+
+#endif /* OSSL_TESTUTIL_H */
diff --git a/test/testutil/apps_shims.c b/test/testutil/apps_shims.c
new file mode 100644
index 000000000000..53d851ffda3b
--- /dev/null
+++ b/test/testutil/apps_shims.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdlib.h>
+#include "apps.h"
+#include "../testutil.h"
+
+/* shim that avoids sucking in too much from apps/apps.c */
+
+void *app_malloc(size_t sz, const char *what)
+{
+ void *vp;
+
+ /*
+ * This isn't ideal but it is what the app's app_malloc() does on failure.
+ * Instead of exiting with a failure, abort() is called which makes sure
+ * that there will be a good stack trace for debugging purposes.
+ */
+ if (!TEST_ptr(vp = OPENSSL_malloc(sz))) {
+ TEST_info("Could not allocate %zu bytes for %s\n", sz, what);
+ abort();
+ }
+ return vp;
+}
+
+/* shim to prevent sucking in too much from apps */
+
+int opt_legacy_okay(void)
+{
+ return 1;
+}
+
+/*
+ * These three functions are defined here so that they don't need to come from
+ * the apps source code and pull in a lot of additional things.
+ */
+int opt_provider_option_given(void)
+{
+ return 0;
+}
+
+const char *app_get0_propq(void)
+{
+ return NULL;
+}
+
+OSSL_LIB_CTX *app_get0_libctx(void)
+{
+ return NULL;
+}
diff --git a/test/testutil/basic_output.c b/test/testutil/basic_output.c
new file mode 100644
index 000000000000..92f3de9300cc
--- /dev/null
+++ b/test/testutil/basic_output.c
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2017-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 "../testutil.h"
+#include "output.h"
+#include "tu_local.h"
+
+#include <openssl/crypto.h>
+#include <openssl/bio.h>
+
+/* These are available for any test program */
+BIO *bio_out = NULL;
+BIO *bio_err = NULL;
+
+/* These are available for TAP output only (internally) */
+static BIO *tap_out = NULL;
+static BIO *tap_err = NULL;
+
+void test_open_streams(void)
+{
+ tap_out = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT);
+ tap_err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT);
+#ifdef __VMS
+ tap_out = BIO_push(BIO_new(BIO_f_linebuffer()), tap_out);
+ tap_err = BIO_push(BIO_new(BIO_f_linebuffer()), tap_err);
+#endif
+ tap_out = BIO_push(BIO_new(BIO_f_prefix()), tap_out);
+ tap_err = BIO_push(BIO_new(BIO_f_prefix()), tap_err);
+
+ bio_out = BIO_push(BIO_new(BIO_f_prefix()), tap_out);
+ bio_err = BIO_push(BIO_new(BIO_f_prefix()), tap_err);
+ BIO_set_prefix(bio_out, "# ");
+ BIO_set_prefix(bio_err, "# ");
+
+ OPENSSL_assert(bio_out != NULL);
+ OPENSSL_assert(bio_err != NULL);
+}
+
+void test_adjust_streams_tap_level(int level)
+{
+ BIO_set_indent(tap_out, level);
+ BIO_set_indent(tap_err, level);
+}
+
+void test_close_streams(void)
+{
+ /*
+ * The rest of the chain is freed by the BIO_free_all() calls below, so
+ * we only need to free the last one in the bio_out and bio_err chains.
+ */
+ BIO_free(bio_out);
+ BIO_free(bio_err);
+
+ BIO_free_all(tap_out);
+ BIO_free_all(tap_err);
+}
+
+int test_vprintf_stdout(const char *fmt, va_list ap)
+{
+ return BIO_vprintf(bio_out, fmt, ap);
+}
+
+int test_vprintf_stderr(const char *fmt, va_list ap)
+{
+ return BIO_vprintf(bio_err, fmt, ap);
+}
+
+int test_flush_stdout(void)
+{
+ return BIO_flush(bio_out);
+}
+
+int test_flush_stderr(void)
+{
+ return BIO_flush(bio_err);
+}
+
+int test_vprintf_tapout(const char *fmt, va_list ap)
+{
+ return BIO_vprintf(tap_out, fmt, ap);
+}
+
+int test_vprintf_taperr(const char *fmt, va_list ap)
+{
+ return BIO_vprintf(tap_err, fmt, ap);
+}
+
+int test_flush_tapout(void)
+{
+ return BIO_flush(tap_out);
+}
+
+int test_flush_taperr(void)
+{
+ return BIO_flush(tap_err);
+}
diff --git a/test/testutil/cb.c b/test/testutil/cb.c
new file mode 100644
index 000000000000..5b583b147b53
--- /dev/null
+++ b/test/testutil/cb.c
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2017 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 "output.h"
+#include "tu_local.h"
+
+int openssl_error_cb(const char *str, size_t len, void *u)
+{
+ return test_printf_stderr("%s", str);
+}
diff --git a/test/testutil/driver.c b/test/testutil/driver.c
new file mode 100644
index 000000000000..9a4b762f4169
--- /dev/null
+++ b/test/testutil/driver.c
@@ -0,0 +1,473 @@
+/*
+ * Copyright 2016-2022 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 "../testutil.h"
+#include "output.h"
+#include "tu_local.h"
+
+#include <string.h>
+#include <assert.h>
+
+#include "internal/nelem.h"
+#include <openssl/bio.h>
+
+#include "platform.h" /* From libapps */
+
+#if defined(_WIN32) && !defined(__BORLANDC__)
+# define strdup _strdup
+#endif
+
+
+/*
+ * Declares the structures needed to register each test case function.
+ */
+typedef struct test_info {
+ const char *test_case_name;
+ int (*test_fn) (void);
+ int (*param_test_fn)(int idx);
+ int num;
+
+ /* flags */
+ int subtest:1;
+} TEST_INFO;
+
+static TEST_INFO all_tests[1024];
+static int num_tests = 0;
+static int show_list = 0;
+static int single_test = -1;
+static int single_iter = -1;
+static int level = 0;
+static int seed = 0;
+static int rand_order = 0;
+
+/*
+ * A parameterised test runs a loop of test cases.
+ * |num_test_cases| counts the total number of non-subtest test cases
+ * across all tests.
+ */
+static int num_test_cases = 0;
+
+static int process_shared_options(void);
+
+
+void add_test(const char *test_case_name, int (*test_fn) (void))
+{
+ assert(num_tests != OSSL_NELEM(all_tests));
+ all_tests[num_tests].test_case_name = test_case_name;
+ all_tests[num_tests].test_fn = test_fn;
+ all_tests[num_tests].num = -1;
+ ++num_tests;
+ ++num_test_cases;
+}
+
+void add_all_tests(const char *test_case_name, int(*test_fn)(int idx),
+ int num, int subtest)
+{
+ assert(num_tests != OSSL_NELEM(all_tests));
+ all_tests[num_tests].test_case_name = test_case_name;
+ all_tests[num_tests].param_test_fn = test_fn;
+ all_tests[num_tests].num = num;
+ all_tests[num_tests].subtest = subtest;
+ ++num_tests;
+ if (subtest)
+ ++num_test_cases;
+ else
+ num_test_cases += num;
+}
+
+static int gcd(int a, int b)
+{
+ while (b != 0) {
+ int t = b;
+ b = a % b;
+ a = t;
+ }
+ return a;
+}
+
+static void set_seed(int s)
+{
+ seed = s;
+ if (seed <= 0)
+ seed = (int)time(NULL);
+ test_random_seed(seed);
+}
+
+
+int setup_test_framework(int argc, char *argv[])
+{
+ char *test_seed = getenv("OPENSSL_TEST_RAND_ORDER");
+ char *TAP_levels = getenv("HARNESS_OSSL_LEVEL");
+
+ if (TAP_levels != NULL)
+ level = 4 * atoi(TAP_levels);
+ test_adjust_streams_tap_level(level);
+ if (test_seed != NULL) {
+ rand_order = 1;
+ set_seed(atoi(test_seed));
+ } else {
+ set_seed(0);
+ }
+
+#if defined(OPENSSL_SYS_VMS) && defined(__DECC)
+ argv = copy_argv(&argc, argv);
+#elif defined(_WIN32)
+ /*
+ * Replace argv[] with UTF-8 encoded strings.
+ */
+ win32_utf8argv(&argc, &argv);
+#endif
+
+ if (!opt_init(argc, argv, test_get_options()))
+ return 0;
+ return 1;
+}
+
+
+/*
+ * This can only be called after setup() has run, since num_tests and
+ * all_tests[] are setup at this point
+ */
+static int check_single_test_params(char *name, char *testname, char *itname)
+{
+ if (name != NULL) {
+ int i;
+ for (i = 0; i < num_tests; ++i) {
+ if (strcmp(name, all_tests[i].test_case_name) == 0) {
+ single_test = 1 + i;
+ break;
+ }
+ }
+ if (i >= num_tests)
+ single_test = atoi(name);
+ }
+
+
+ /* if only iteration is specified, assume we want the first test */
+ if (single_test == -1 && single_iter != -1)
+ single_test = 1;
+
+ if (single_test != -1) {
+ if (single_test < 1 || single_test > num_tests) {
+ test_printf_stderr("Invalid -%s value "
+ "(Value must be a valid test name OR a value between %d..%d)\n",
+ testname, 1, num_tests);
+ return 0;
+ }
+ }
+ if (single_iter != -1) {
+ if (all_tests[single_test - 1].num == -1) {
+ test_printf_stderr("-%s option is not valid for test %d:%s\n",
+ itname,
+ single_test,
+ all_tests[single_test - 1].test_case_name);
+ return 0;
+ } else if (single_iter < 1
+ || single_iter > all_tests[single_test - 1].num) {
+ test_printf_stderr("Invalid -%s value for test %d:%s\t"
+ "(Value must be in the range %d..%d)\n",
+ itname, single_test,
+ all_tests[single_test - 1].test_case_name,
+ 1, all_tests[single_test - 1].num);
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int process_shared_options(void)
+{
+ OPTION_CHOICE_DEFAULT o;
+ int value;
+ int ret = -1;
+ char *flag_test = "";
+ char *flag_iter = "";
+ char *testname = NULL;
+
+ opt_begin();
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ /* Ignore any test options at this level */
+ default:
+ break;
+ case OPT_ERR:
+ return ret;
+ case OPT_TEST_HELP:
+ opt_help(test_get_options());
+ return 0;
+ case OPT_TEST_LIST:
+ show_list = 1;
+ break;
+ case OPT_TEST_SINGLE:
+ flag_test = opt_flag();
+ testname = opt_arg();
+ break;
+ case OPT_TEST_ITERATION:
+ flag_iter = opt_flag();
+ if (!opt_int(opt_arg(), &single_iter))
+ goto end;
+ break;
+ case OPT_TEST_INDENT:
+ if (!opt_int(opt_arg(), &value))
+ goto end;
+ level = 4 * value;
+ test_adjust_streams_tap_level(level);
+ break;
+ case OPT_TEST_SEED:
+ if (!opt_int(opt_arg(), &value))
+ goto end;
+ set_seed(value);
+ break;
+ }
+ }
+ if (!check_single_test_params(testname, flag_test, flag_iter))
+ goto end;
+ ret = 1;
+end:
+ return ret;
+}
+
+
+int pulldown_test_framework(int ret)
+{
+ set_test_title(NULL);
+ return ret;
+}
+
+static void finalize(int success)
+{
+ if (success)
+ ERR_clear_error();
+ else
+ ERR_print_errors_cb(openssl_error_cb, NULL);
+}
+
+static char *test_title = NULL;
+
+void set_test_title(const char *title)
+{
+ free(test_title);
+ test_title = title == NULL ? NULL : strdup(title);
+}
+
+PRINTF_FORMAT(2, 3) static void test_verdict(int verdict,
+ const char *description, ...)
+{
+ va_list ap;
+
+ test_flush_stdout();
+ test_flush_stderr();
+
+ if (verdict == 0 && seed != 0)
+ test_printf_tapout("# OPENSSL_TEST_RAND_ORDER=%d\n", seed);
+ test_printf_tapout("%s ", verdict != 0 ? "ok" : "not ok");
+ va_start(ap, description);
+ test_vprintf_tapout(description, ap);
+ va_end(ap);
+ if (verdict == TEST_SKIP_CODE)
+ test_printf_tapout(" # skipped");
+ test_printf_tapout("\n");
+ test_flush_tapout();
+}
+
+int run_tests(const char *test_prog_name)
+{
+ int num_failed = 0;
+ int verdict = 1;
+ int ii, i, jj, j, jstep;
+ int test_case_count = 0;
+ int subtest_case_count = 0;
+ int permute[OSSL_NELEM(all_tests)];
+
+ i = process_shared_options();
+ if (i == 0)
+ return EXIT_SUCCESS;
+ if (i == -1)
+ return EXIT_FAILURE;
+
+ if (num_tests < 1) {
+ test_printf_tapout("1..0 # Skipped: %s\n", test_prog_name);
+ } else if (show_list == 0 && single_test == -1) {
+ if (level > 0) {
+ test_printf_stdout("Subtest: %s\n", test_prog_name);
+ test_flush_stdout();
+ }
+ test_printf_tapout("1..%d\n", num_test_cases);
+ }
+
+ test_flush_tapout();
+
+ for (i = 0; i < num_tests; i++)
+ permute[i] = i;
+ if (rand_order != 0)
+ for (i = num_tests - 1; i >= 1; i--) {
+ j = test_random() % (1 + i);
+ ii = permute[j];
+ permute[j] = permute[i];
+ permute[i] = ii;
+ }
+
+ for (ii = 0; ii != num_tests; ++ii) {
+ i = permute[ii];
+
+ if (single_test != -1 && ((i+1) != single_test)) {
+ continue;
+ }
+ else if (show_list) {
+ if (all_tests[i].num != -1) {
+ test_printf_tapout("%d - %s (%d..%d)\n", ii + 1,
+ all_tests[i].test_case_name, 1,
+ all_tests[i].num);
+ } else {
+ test_printf_tapout("%d - %s\n", ii + 1,
+ all_tests[i].test_case_name);
+ }
+ test_flush_tapout();
+ } else if (all_tests[i].num == -1) {
+ set_test_title(all_tests[i].test_case_name);
+ ERR_clear_error();
+ verdict = all_tests[i].test_fn();
+ finalize(verdict != 0);
+ test_verdict(verdict, "%d - %s", test_case_count + 1, test_title);
+ if (verdict == 0)
+ num_failed++;
+ test_case_count++;
+ } else {
+ verdict = TEST_SKIP_CODE;
+ set_test_title(all_tests[i].test_case_name);
+ if (all_tests[i].subtest) {
+ level += 4;
+ test_adjust_streams_tap_level(level);
+ if (single_iter == -1) {
+ test_printf_stdout("Subtest: %s\n", test_title);
+ test_printf_tapout("%d..%d\n", 1, all_tests[i].num);
+ test_flush_stdout();
+ test_flush_tapout();
+ }
+ }
+
+ j = -1;
+ if (rand_order == 0 || all_tests[i].num < 3)
+ jstep = 1;
+ else
+ do
+ jstep = test_random() % all_tests[i].num;
+ while (jstep == 0 || gcd(all_tests[i].num, jstep) != 1);
+
+ for (jj = 0; jj < all_tests[i].num; jj++) {
+ int v;
+
+ j = (j + jstep) % all_tests[i].num;
+ if (single_iter != -1 && ((jj + 1) != single_iter))
+ continue;
+ ERR_clear_error();
+ v = all_tests[i].param_test_fn(j);
+
+ if (v == 0) {
+ verdict = 0;
+ } else if (v != TEST_SKIP_CODE && verdict != 0) {
+ verdict = 1;
+ }
+
+ finalize(v != 0);
+
+ if (all_tests[i].subtest)
+ test_verdict(v, "%d - iteration %d",
+ subtest_case_count + 1, j + 1);
+ else
+ test_verdict(v, "%d - %s - iteration %d",
+ test_case_count + subtest_case_count + 1,
+ test_title, j + 1);
+ subtest_case_count++;
+ }
+
+ if (all_tests[i].subtest) {
+ level -= 4;
+ test_adjust_streams_tap_level(level);
+ }
+ if (verdict == 0)
+ ++num_failed;
+ if (all_tests[i].num == -1 || all_tests[i].subtest)
+ test_verdict(verdict, "%d - %s", test_case_count + 1,
+ all_tests[i].test_case_name);
+ test_case_count++;
+ }
+ }
+ if (num_failed != 0)
+ return EXIT_FAILURE;
+ return EXIT_SUCCESS;
+}
+
+/*
+ * Glue an array of strings together and return it as an allocated string.
+ * Optionally return the whole length of this string in |out_len|
+ */
+char *glue_strings(const char *list[], size_t *out_len)
+{
+ size_t len = 0;
+ char *p, *ret;
+ int i;
+
+ for (i = 0; list[i] != NULL; i++)
+ len += strlen(list[i]);
+
+ if (out_len != NULL)
+ *out_len = len;
+
+ if (!TEST_ptr(ret = p = OPENSSL_malloc(len + 1)))
+ return NULL;
+
+ for (i = 0; list[i] != NULL; i++)
+ p += strlen(strcpy(p, list[i]));
+
+ return ret;
+}
+
+char *test_mk_file_path(const char *dir, const char *file)
+{
+# ifndef OPENSSL_SYS_VMS
+ const char *sep = "/";
+# else
+ const char *sep = "";
+ char *dir_end;
+ char dir_end_sep;
+# endif
+ size_t dirlen = dir != NULL ? strlen(dir) : 0;
+ size_t len = dirlen + strlen(sep) + strlen(file) + 1;
+ char *full_file = OPENSSL_zalloc(len);
+
+ if (full_file != NULL) {
+ if (dir != NULL && dirlen > 0) {
+ OPENSSL_strlcpy(full_file, dir, len);
+# ifdef OPENSSL_SYS_VMS
+ /*
+ * If |file| contains a directory spec, we need to do some
+ * careful merging.
+ * "vol:[dir.dir]" + "[.certs]sm2-root.crt" should become
+ * "vol:[dir.dir.certs]sm2-root.crt"
+ */
+ dir_end = &full_file[strlen(full_file) - 1];
+ dir_end_sep = *dir_end;
+ if ((dir_end_sep == ']' || dir_end_sep == '>')
+ && (file[0] == '[' || file[0] == '<')) {
+ file++;
+ if (file[0] == '.')
+ *dir_end = '\0';
+ else
+ *dir_end = '.';
+ }
+#else
+ OPENSSL_strlcat(full_file, sep, len);
+#endif
+ }
+ OPENSSL_strlcat(full_file, file, len);
+ }
+
+ return full_file;
+}
diff --git a/test/testutil/fake_random.c b/test/testutil/fake_random.c
new file mode 100644
index 000000000000..f2f0e2793f76
--- /dev/null
+++ b/test/testutil/fake_random.c
@@ -0,0 +1,231 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <string.h>
+#include <openssl/core_names.h>
+#include <openssl/rand.h>
+#include <openssl/provider.h>
+#include "../include/crypto/evp.h"
+#include "../../crypto/evp/evp_local.h"
+#include "../testutil.h"
+
+typedef struct {
+ fake_random_generate_cb *cb;
+ int state;
+ const char *name;
+ EVP_RAND_CTX *ctx;
+} FAKE_RAND;
+
+static OSSL_FUNC_rand_newctx_fn fake_rand_newctx;
+static OSSL_FUNC_rand_freectx_fn fake_rand_freectx;
+static OSSL_FUNC_rand_instantiate_fn fake_rand_instantiate;
+static OSSL_FUNC_rand_uninstantiate_fn fake_rand_uninstantiate;
+static OSSL_FUNC_rand_generate_fn fake_rand_generate;
+static OSSL_FUNC_rand_gettable_ctx_params_fn fake_rand_gettable_ctx_params;
+static OSSL_FUNC_rand_get_ctx_params_fn fake_rand_get_ctx_params;
+static OSSL_FUNC_rand_enable_locking_fn fake_rand_enable_locking;
+
+static void *fake_rand_newctx(void *provctx, void *parent,
+ const OSSL_DISPATCH *parent_dispatch)
+{
+ FAKE_RAND *r = OPENSSL_zalloc(sizeof(*r));
+
+ if (r != NULL)
+ r->state = EVP_RAND_STATE_UNINITIALISED;
+ return r;
+}
+
+static void fake_rand_freectx(void *vrng)
+{
+ OPENSSL_free(vrng);
+}
+
+static int fake_rand_instantiate(void *vrng, ossl_unused unsigned int strength,
+ ossl_unused int prediction_resistance,
+ ossl_unused const unsigned char *pstr,
+ size_t pstr_len,
+ ossl_unused const OSSL_PARAM params[])
+{
+ FAKE_RAND *frng = (FAKE_RAND *)vrng;
+
+ frng->state = EVP_RAND_STATE_READY;
+ return 1;
+}
+
+static int fake_rand_uninstantiate(void *vrng)
+{
+ FAKE_RAND *frng = (FAKE_RAND *)vrng;
+
+ frng->state = EVP_RAND_STATE_UNINITIALISED;
+ return 1;
+}
+
+static int fake_rand_generate(void *vrng, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *adin, size_t adinlen)
+{
+ FAKE_RAND *frng = (FAKE_RAND *)vrng;
+ size_t l;
+ uint32_t r;
+
+ if (frng->cb != NULL)
+ return (*frng->cb)(out, outlen, frng->name, frng->ctx);
+ while (outlen > 0) {
+ r = test_random();
+ l = outlen < sizeof(r) ? outlen : sizeof(r);
+
+ memcpy(out, &r, l);
+ out += l;
+ outlen -= l;
+ }
+ return 1;
+}
+
+static int fake_rand_enable_locking(void *vrng)
+{
+ return 1;
+}
+
+static int fake_rand_get_ctx_params(ossl_unused void *vrng, OSSL_PARAM params[])
+{
+ FAKE_RAND *frng = (FAKE_RAND *)vrng;
+ OSSL_PARAM *p;
+
+ p = OSSL_PARAM_locate(params, OSSL_RAND_PARAM_STATE);
+ if (p != NULL && !OSSL_PARAM_set_int(p, frng->state))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_RAND_PARAM_STRENGTH);
+ if (p != NULL && !OSSL_PARAM_set_int(p, 256))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_RAND_PARAM_MAX_REQUEST);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, INT_MAX))
+ return 0;
+ return 1;
+}
+
+static const OSSL_PARAM *fake_rand_gettable_ctx_params(ossl_unused void *vrng,
+ ossl_unused void *provctx)
+{
+ static const OSSL_PARAM known_gettable_ctx_params[] = {
+ OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL),
+ OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL),
+ OSSL_PARAM_size_t(OSSL_RAND_PARAM_MAX_REQUEST, NULL),
+ OSSL_PARAM_END
+ };
+ return known_gettable_ctx_params;
+}
+
+static const OSSL_DISPATCH fake_rand_functions[] = {
+ { OSSL_FUNC_RAND_NEWCTX, (void (*)(void))fake_rand_newctx },
+ { OSSL_FUNC_RAND_FREECTX, (void (*)(void))fake_rand_freectx },
+ { OSSL_FUNC_RAND_INSTANTIATE, (void (*)(void))fake_rand_instantiate },
+ { OSSL_FUNC_RAND_UNINSTANTIATE, (void (*)(void))fake_rand_uninstantiate },
+ { OSSL_FUNC_RAND_GENERATE, (void (*)(void))fake_rand_generate },
+ { OSSL_FUNC_RAND_ENABLE_LOCKING, (void (*)(void))fake_rand_enable_locking },
+ { OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS,
+ (void(*)(void))fake_rand_gettable_ctx_params },
+ { OSSL_FUNC_RAND_GET_CTX_PARAMS, (void(*)(void))fake_rand_get_ctx_params },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM fake_rand_rand[] = {
+ { "FAKE", "provider=fake", fake_rand_functions },
+ { NULL, NULL, NULL }
+};
+
+static const OSSL_ALGORITHM *fake_rand_query(void *provctx,
+ int operation_id,
+ int *no_cache)
+{
+ *no_cache = 0;
+ switch (operation_id) {
+ case OSSL_OP_RAND:
+ return fake_rand_rand;
+ }
+ return NULL;
+}
+
+/* Functions we provide to the core */
+static const OSSL_DISPATCH fake_rand_method[] = {
+ { OSSL_FUNC_PROVIDER_TEARDOWN, (void (*)(void))OSSL_LIB_CTX_free },
+ { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void))fake_rand_query },
+ { 0, NULL }
+};
+
+static int fake_rand_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out, void **provctx)
+{
+ if (!TEST_ptr(*provctx = OSSL_LIB_CTX_new()))
+ return 0;
+ *out = fake_rand_method;
+ return 1;
+}
+
+static int check_rng(EVP_RAND_CTX *rng, const char *name)
+{
+ FAKE_RAND *f;
+
+ if (!TEST_ptr(rng)) {
+ TEST_info("random: %s", name);
+ return 0;
+ }
+ f = rng->algctx;
+ f->name = name;
+ f->ctx = rng;
+ return 1;
+}
+
+OSSL_PROVIDER *fake_rand_start(OSSL_LIB_CTX *libctx)
+{
+ OSSL_PROVIDER *p;
+
+ if (!TEST_true(OSSL_PROVIDER_add_builtin(libctx, "fake-rand",
+ fake_rand_provider_init))
+ || !TEST_true(RAND_set_DRBG_type(libctx, "fake", NULL, NULL, NULL))
+ || !TEST_ptr(p = OSSL_PROVIDER_try_load(libctx, "fake-rand", 1)))
+ return NULL;
+
+ /* Ensure that the fake rand is initialized. */
+ if (!TEST_true(check_rng(RAND_get0_primary(libctx), "primary"))
+ || !TEST_true(check_rng(RAND_get0_private(libctx), "private"))
+ || !TEST_true(check_rng(RAND_get0_public(libctx), "public"))) {
+ OSSL_PROVIDER_unload(p);
+ return NULL;
+ }
+
+ return p;
+}
+
+void fake_rand_finish(OSSL_PROVIDER *p)
+{
+ OSSL_PROVIDER_unload(p);
+}
+
+void fake_rand_set_callback(EVP_RAND_CTX *rng,
+ int (*cb)(unsigned char *out, size_t outlen,
+ const char *name, EVP_RAND_CTX *ctx))
+{
+ if (rng != NULL)
+ ((FAKE_RAND *)rng->algctx)->cb = cb;
+}
+
+void fake_rand_set_public_private_callbacks(OSSL_LIB_CTX *libctx,
+ int (*cb)(unsigned char *out,
+ size_t outlen,
+ const char *name,
+ EVP_RAND_CTX *ctx))
+{
+ fake_rand_set_callback(RAND_get0_private(libctx), cb);
+ fake_rand_set_callback(RAND_get0_public(libctx), cb);
+}
+
diff --git a/test/testutil/format_output.c b/test/testutil/format_output.c
new file mode 100644
index 000000000000..e101a7ecefb1
--- /dev/null
+++ b/test/testutil/format_output.c
@@ -0,0 +1,535 @@
+/*
+ * Copyright 2017-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 "../testutil.h"
+#include "output.h"
+#include "tu_local.h"
+
+#include <string.h>
+#include <ctype.h>
+#include "internal/nelem.h"
+
+/* The size of memory buffers to display on failure */
+#define MEM_BUFFER_SIZE (2000)
+#define MAX_STRING_WIDTH (80)
+#define BN_OUTPUT_SIZE (8)
+
+/* Output a diff header */
+static void test_diff_header(const char *left, const char *right)
+{
+ test_printf_stderr("--- %s\n", left);
+ test_printf_stderr("+++ %s\n", right);
+}
+
+/* Formatted string output routines */
+static void test_string_null_empty(const char *m, char c)
+{
+ if (m == NULL)
+ test_printf_stderr("%4s %c NULL\n", "", c);
+ else
+ test_printf_stderr("%4u:%c ''\n", 0u, c);
+}
+
+static void test_fail_string_common(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op, const char *m1, size_t l1,
+ const char *m2, size_t l2)
+{
+ const size_t width =
+ (MAX_STRING_WIDTH - BIO_get_indent(bio_err) - 12) / 16 * 16;
+ char b1[MAX_STRING_WIDTH + 1], b2[MAX_STRING_WIDTH + 1];
+ char bdiff[MAX_STRING_WIDTH + 1];
+ size_t n1, n2, i;
+ unsigned int cnt = 0, diff;
+
+ test_fail_message_prefix(prefix, file, line, type, left, right, op);
+ if (m1 == NULL)
+ l1 = 0;
+ if (m2 == NULL)
+ l2 = 0;
+ if (l1 == 0 && l2 == 0) {
+ if ((m1 == NULL) == (m2 == NULL)) {
+ test_string_null_empty(m1, ' ');
+ } else {
+ test_diff_header(left, right);
+ test_string_null_empty(m1, '-');
+ test_string_null_empty(m2, '+');
+ }
+ goto fin;
+ }
+
+ if (l1 != l2 || strncmp(m1, m2, l1) != 0)
+ test_diff_header(left, right);
+
+ while (l1 > 0 || l2 > 0) {
+ n1 = n2 = 0;
+ if (l1 > 0) {
+ b1[n1 = l1 > width ? width : l1] = 0;
+ for (i = 0; i < n1; i++)
+ b1[i] = isprint((unsigned char)m1[i]) ? m1[i] : '.';
+ }
+ if (l2 > 0) {
+ b2[n2 = l2 > width ? width : l2] = 0;
+ for (i = 0; i < n2; i++)
+ b2[i] = isprint((unsigned char)m2[i]) ? m2[i] : '.';
+ }
+ diff = 0;
+ i = 0;
+ if (n1 > 0 && n2 > 0) {
+ const size_t j = n1 < n2 ? n1 : n2;
+
+ for (; i < j; i++)
+ if (m1[i] == m2[i]) {
+ bdiff[i] = ' ';
+ } else {
+ bdiff[i] = '^';
+ diff = 1;
+ }
+ bdiff[i] = '\0';
+ }
+ if (n1 == n2 && !diff) {
+ test_printf_stderr("%4u: '%s'\n", cnt, n2 > n1 ? b2 : b1);
+ } else {
+ if (cnt == 0 && (m1 == NULL || *m1 == '\0'))
+ test_string_null_empty(m1, '-');
+ else if (n1 > 0)
+ test_printf_stderr("%4u:- '%s'\n", cnt, b1);
+ if (cnt == 0 && (m2 == NULL || *m2 == '\0'))
+ test_string_null_empty(m2, '+');
+ else if (n2 > 0)
+ test_printf_stderr("%4u:+ '%s'\n", cnt, b2);
+ if (diff && i > 0)
+ test_printf_stderr("%4s %s\n", "", bdiff);
+ }
+ if (m1 != NULL)
+ m1 += n1;
+ if (m2 != NULL)
+ m2 += n2;
+ l1 -= n1;
+ l2 -= n2;
+ cnt += width;
+ }
+fin:
+ test_flush_stderr();
+}
+
+/*
+ * Wrapper routines so that the underlying code can be shared.
+ * The first is the call from inside the test utilities when a conditional
+ * fails. The second is the user's call to dump a string.
+ */
+void test_fail_string_message(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op, const char *m1, size_t l1,
+ const char *m2, size_t l2)
+{
+ test_fail_string_common(prefix, file, line, type, left, right, op,
+ m1, l1, m2, l2);
+ test_printf_stderr("\n");
+}
+
+void test_output_string(const char *name, const char *m, size_t l)
+{
+ test_fail_string_common("string", NULL, 0, NULL, NULL, NULL, name,
+ m, l, m, l);
+}
+
+/* BIGNUM formatted output routines */
+
+/*
+ * A basic memory byte to hex digit converter with allowance for spacing
+ * every so often.
+ */
+static void hex_convert_memory(const unsigned char *m, size_t n, char *b,
+ size_t width)
+{
+ size_t i;
+
+ for (i = 0; i < n; i++) {
+ const unsigned char c = *m++;
+
+ *b++ = "0123456789abcdef"[c >> 4];
+ *b++ = "0123456789abcdef"[c & 15];
+ if (i % width == width - 1 && i != n - 1)
+ *b++ = ' ';
+ }
+ *b = '\0';
+}
+
+/*
+ * Constants to define the number of bytes to display per line and the number
+ * of characters these take.
+ */
+static const int bn_bytes = (MAX_STRING_WIDTH - 9) / (BN_OUTPUT_SIZE * 2 + 1)
+ * BN_OUTPUT_SIZE;
+static const int bn_chars = (MAX_STRING_WIDTH - 9) / (BN_OUTPUT_SIZE * 2 + 1)
+ * (BN_OUTPUT_SIZE * 2 + 1) - 1;
+
+/*
+ * Output the header line for the bignum
+ */
+static void test_bignum_header_line(void)
+{
+ test_printf_stderr(" %*s\n", bn_chars + 6, "bit position");
+}
+
+static const char *test_bignum_zero_null(const BIGNUM *bn)
+{
+ if (bn != NULL)
+ return BN_is_negative(bn) ? "-0" : "0";
+ return "NULL";
+}
+
+/*
+ * Print a bignum zero taking care to include the correct sign.
+ * This routine correctly deals with a NULL bignum pointer as input.
+ */
+static void test_bignum_zero_print(const BIGNUM *bn, char sep)
+{
+ const char *v = test_bignum_zero_null(bn);
+ const char *suf = bn != NULL ? ": 0" : "";
+
+ test_printf_stderr("%c%*s%s\n", sep, bn_chars, v, suf);
+}
+
+/*
+ * Convert a section of memory from inside a bignum into a displayable
+ * string with appropriate visual aid spaces inserted.
+ */
+static int convert_bn_memory(const unsigned char *in, size_t bytes,
+ char *out, int *lz, const BIGNUM *bn)
+{
+ int n = bytes * 2, i;
+ char *p = out, *q = NULL;
+ const char *r;
+
+ if (bn != NULL && !BN_is_zero(bn)) {
+ hex_convert_memory(in, bytes, out, BN_OUTPUT_SIZE);
+ if (*lz) {
+ for (; *p == '0' || *p == ' '; p++)
+ if (*p == '0') {
+ q = p;
+ *p = ' ';
+ n--;
+ }
+ if (*p == '\0') {
+ /*
+ * in[bytes] is defined because we're converting a non-zero
+ * number and we've not seen a non-zero yet.
+ */
+ if ((in[bytes] & 0xf0) != 0 && BN_is_negative(bn)) {
+ *lz = 0;
+ *q = '-';
+ n++;
+ }
+ } else {
+ *lz = 0;
+ if (BN_is_negative(bn)) {
+ /*
+ * This is valid because we always convert more digits than
+ * the number holds.
+ */
+ *q = '-';
+ n++;
+ }
+ }
+ }
+ return n;
+ }
+
+ for (i = 0; i < n; i++) {
+ *p++ = ' ';
+ if (i % (2 * BN_OUTPUT_SIZE) == 2 * BN_OUTPUT_SIZE - 1 && i != n - 1)
+ *p++ = ' ';
+ }
+ *p = '\0';
+ if (bn == NULL)
+ r = "NULL";
+ else
+ r = BN_is_negative(bn) ? "-0" : "0";
+ strcpy(p - strlen(r), r);
+ return 0;
+}
+
+/*
+ * Common code to display either one or two bignums, including the diff
+ * pointers for changes (only when there are two).
+ */
+static void test_fail_bignum_common(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op,
+ const BIGNUM *bn1, const BIGNUM *bn2)
+{
+ const size_t bytes = bn_bytes;
+ char b1[MAX_STRING_WIDTH + 1], b2[MAX_STRING_WIDTH + 1];
+ char *p, bdiff[MAX_STRING_WIDTH + 1];
+ size_t l1, l2, n1, n2, i, len;
+ unsigned int cnt, diff, real_diff;
+ unsigned char *m1 = NULL, *m2 = NULL;
+ int lz1 = 1, lz2 = 1;
+ unsigned char buffer[MEM_BUFFER_SIZE * 2], *bufp = buffer;
+
+ test_fail_message_prefix(prefix, file, line, type, left, right, op);
+ l1 = bn1 == NULL ? 0 : (BN_num_bytes(bn1) + (BN_is_negative(bn1) ? 1 : 0));
+ l2 = bn2 == NULL ? 0 : (BN_num_bytes(bn2) + (BN_is_negative(bn2) ? 1 : 0));
+ if (l1 == 0 && l2 == 0) {
+ if ((bn1 == NULL) == (bn2 == NULL)) {
+ test_bignum_header_line();
+ test_bignum_zero_print(bn1, ' ');
+ } else {
+ test_diff_header(left, right);
+ test_bignum_header_line();
+ test_bignum_zero_print(bn1, '-');
+ test_bignum_zero_print(bn2, '+');
+ }
+ goto fin;
+ }
+
+ if (l1 != l2 || bn1 == NULL || bn2 == NULL || BN_cmp(bn1, bn2) != 0)
+ test_diff_header(left, right);
+ test_bignum_header_line();
+
+ len = ((l1 > l2 ? l1 : l2) + bytes - 1) / bytes * bytes;
+
+ if (len > MEM_BUFFER_SIZE && (bufp = OPENSSL_malloc(len * 2)) == NULL) {
+ bufp = buffer;
+ len = MEM_BUFFER_SIZE;
+ test_printf_stderr("WARNING: these BIGNUMs have been truncated\n");
+ }
+
+ if (bn1 != NULL) {
+ m1 = bufp;
+ BN_bn2binpad(bn1, m1, len);
+ }
+ if (bn2 != NULL) {
+ m2 = bufp + len;
+ BN_bn2binpad(bn2, m2, len);
+ }
+
+ while (len > 0) {
+ cnt = 8 * (len - bytes);
+ n1 = convert_bn_memory(m1, bytes, b1, &lz1, bn1);
+ n2 = convert_bn_memory(m2, bytes, b2, &lz2, bn2);
+
+ diff = real_diff = 0;
+ i = 0;
+ p = bdiff;
+ for (i=0; b1[i] != '\0'; i++)
+ if (b1[i] == b2[i] || b1[i] == ' ' || b2[i] == ' ') {
+ *p++ = ' ';
+ diff |= b1[i] != b2[i];
+ } else {
+ *p++ = '^';
+ real_diff = diff = 1;
+ }
+ *p++ = '\0';
+ if (!diff) {
+ test_printf_stderr(" %s:% 5d\n", n2 > n1 ? b2 : b1, cnt);
+ } else {
+ if (cnt == 0 && bn1 == NULL)
+ test_printf_stderr("-%s\n", b1);
+ else if (cnt == 0 || n1 > 0)
+ test_printf_stderr("-%s:% 5d\n", b1, cnt);
+ if (cnt == 0 && bn2 == NULL)
+ test_printf_stderr("+%s\n", b2);
+ else if (cnt == 0 || n2 > 0)
+ test_printf_stderr("+%s:% 5d\n", b2, cnt);
+ if (real_diff && (cnt == 0 || (n1 > 0 && n2 > 0))
+ && bn1 != NULL && bn2 != NULL)
+ test_printf_stderr(" %s\n", bdiff);
+ }
+ if (m1 != NULL)
+ m1 += bytes;
+ if (m2 != NULL)
+ m2 += bytes;
+ len -= bytes;
+ }
+fin:
+ test_flush_stderr();
+ if (bufp != buffer)
+ OPENSSL_free(bufp);
+}
+
+/*
+ * Wrapper routines so that the underlying code can be shared.
+ * The first two are calls from inside the test utilities when a conditional
+ * fails. The third is the user's call to dump a bignum.
+ */
+void test_fail_bignum_message(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op,
+ const BIGNUM *bn1, const BIGNUM *bn2)
+{
+ test_fail_bignum_common(prefix, file, line, type, left, right, op, bn1, bn2);
+ test_printf_stderr("\n");
+}
+
+void test_fail_bignum_mono_message(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op, const BIGNUM *bn)
+{
+ test_fail_bignum_common(prefix, file, line, type, left, right, op, bn, bn);
+ test_printf_stderr("\n");
+}
+
+void test_output_bignum(const char *name, const BIGNUM *bn)
+{
+ if (bn == NULL || BN_is_zero(bn)) {
+ test_printf_stderr("bignum: '%s' = %s\n", name,
+ test_bignum_zero_null(bn));
+ } else if (BN_num_bytes(bn) <= BN_OUTPUT_SIZE) {
+ unsigned char buf[BN_OUTPUT_SIZE];
+ char out[2 * sizeof(buf) + 1];
+ char *p = out;
+ int n = BN_bn2bin(bn, buf);
+
+ hex_convert_memory(buf, n, p, BN_OUTPUT_SIZE);
+ while (*p == '0' && *++p != '\0')
+ ;
+ test_printf_stderr("bignum: '%s' = %s0x%s\n", name,
+ BN_is_negative(bn) ? "-" : "", p);
+ } else {
+ test_fail_bignum_common("bignum", NULL, 0, NULL, NULL, NULL, name,
+ bn, bn);
+ }
+}
+
+/* Memory output routines */
+
+/*
+ * Handle zero length blocks of memory or NULL pointers to memory
+ */
+static void test_memory_null_empty(const unsigned char *m, char c)
+{
+ if (m == NULL)
+ test_printf_stderr("%4s %c%s\n", "", c, "NULL");
+ else
+ test_printf_stderr("%04x %c%s\n", 0u, c, "empty");
+}
+
+/*
+ * Common code to display one or two blocks of memory.
+ */
+static void test_fail_memory_common(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op,
+ const unsigned char *m1, size_t l1,
+ const unsigned char *m2, size_t l2)
+{
+ const size_t bytes = (MAX_STRING_WIDTH - 9) / 17 * 8;
+ char b1[MAX_STRING_WIDTH + 1], b2[MAX_STRING_WIDTH + 1];
+ char *p, bdiff[MAX_STRING_WIDTH + 1];
+ size_t n1, n2, i;
+ unsigned int cnt = 0, diff;
+
+ test_fail_message_prefix(prefix, file, line, type, left, right, op);
+ if (m1 == NULL)
+ l1 = 0;
+ if (m2 == NULL)
+ l2 = 0;
+ if (l1 == 0 && l2 == 0) {
+ if ((m1 == NULL) == (m2 == NULL)) {
+ test_memory_null_empty(m1, ' ');
+ } else {
+ test_diff_header(left, right);
+ test_memory_null_empty(m1, '-');
+ test_memory_null_empty(m2, '+');
+ }
+ goto fin;
+ }
+
+ if (l1 != l2 || (m1 != m2 && memcmp(m1, m2, l1) != 0))
+ test_diff_header(left, right);
+
+ while (l1 > 0 || l2 > 0) {
+ n1 = n2 = 0;
+ if (l1 > 0) {
+ n1 = l1 > bytes ? bytes : l1;
+ hex_convert_memory(m1, n1, b1, 8);
+ }
+ if (l2 > 0) {
+ n2 = l2 > bytes ? bytes : l2;
+ hex_convert_memory(m2, n2, b2, 8);
+ }
+
+ diff = 0;
+ i = 0;
+ p = bdiff;
+ if (n1 > 0 && n2 > 0) {
+ const size_t j = n1 < n2 ? n1 : n2;
+
+ for (; i < j; i++) {
+ if (m1[i] == m2[i]) {
+ *p++ = ' ';
+ *p++ = ' ';
+ } else {
+ *p++ = '^';
+ *p++ = '^';
+ diff = 1;
+ }
+ if (i % 8 == 7 && i != j - 1)
+ *p++ = ' ';
+ }
+ *p++ = '\0';
+ }
+
+ if (n1 == n2 && !diff) {
+ test_printf_stderr("%04x: %s\n", cnt, b1);
+ } else {
+ if (cnt == 0 && (m1 == NULL || l1 == 0))
+ test_memory_null_empty(m1, '-');
+ else if (n1 > 0)
+ test_printf_stderr("%04x:-%s\n", cnt, b1);
+ if (cnt == 0 && (m2 == NULL || l2 == 0))
+ test_memory_null_empty(m2, '+');
+ else if (n2 > 0)
+ test_printf_stderr("%04x:+%s\n", cnt, b2);
+ if (diff && i > 0)
+ test_printf_stderr("%4s %s\n", "", bdiff);
+ }
+ if (m1 != NULL)
+ m1 += n1;
+ if (m2 != NULL)
+ m2 += n2;
+ l1 -= n1;
+ l2 -= n2;
+ cnt += bytes;
+ }
+fin:
+ test_flush_stderr();
+}
+
+/*
+ * Wrapper routines so that the underlying code can be shared.
+ * The first is the call from inside the test utilities when a conditional
+ * fails. The second is the user's call to dump memory.
+ */
+void test_fail_memory_message(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op,
+ const unsigned char *m1, size_t l1,
+ const unsigned char *m2, size_t l2)
+{
+ test_fail_memory_common(prefix, file, line, type, left, right, op,
+ m1, l1, m2, l2);
+ test_printf_stderr("\n");
+}
+
+void test_output_memory(const char *name, const unsigned char *m, size_t l)
+{
+ test_fail_memory_common("memory", NULL, 0, NULL, NULL, NULL, name,
+ m, l, m, l);
+}
diff --git a/test/testutil/load.c b/test/testutil/load.c
new file mode 100644
index 000000000000..d776a7f167cf
--- /dev/null
+++ b/test/testutil/load.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <openssl/x509.h>
+#include <openssl/pem.h>
+
+#include "../testutil.h"
+
+X509 *load_cert_pem(const char *file, OSSL_LIB_CTX *libctx)
+{
+ X509 *cert = NULL;
+ BIO *bio = NULL;
+
+ if (!TEST_ptr(file) || !TEST_ptr(bio = BIO_new(BIO_s_file())))
+ return NULL;
+ if (TEST_int_gt(BIO_read_filename(bio, file), 0)
+ && TEST_ptr(cert = X509_new_ex(libctx, NULL)))
+ (void)TEST_ptr(cert = PEM_read_bio_X509(bio, &cert, NULL, NULL));
+
+ BIO_free(bio);
+ return cert;
+}
+
+STACK_OF(X509) *load_certs_pem(const char *file)
+{
+ STACK_OF(X509) *certs;
+ BIO *bio;
+ X509 *x;
+
+ if (!TEST_ptr(file) || (bio = BIO_new_file(file, "r")) == NULL)
+ return NULL;
+
+ certs = sk_X509_new_null();
+ if (certs == NULL) {
+ BIO_free(bio);
+ return NULL;
+ }
+
+ ERR_set_mark();
+ do {
+ x = PEM_read_bio_X509(bio, NULL, 0, NULL);
+ if (x != NULL && !sk_X509_push(certs, x)) {
+ sk_X509_pop_free(certs, X509_free);
+ BIO_free(bio);
+ return NULL;
+ } else if (x == NULL) {
+ /*
+ * We probably just ran out of certs, so ignore any errors
+ * generated
+ */
+ ERR_pop_to_mark();
+ }
+ } while (x != NULL);
+
+ BIO_free(bio);
+
+ return certs;
+}
+
+EVP_PKEY *load_pkey_pem(const char *file, OSSL_LIB_CTX *libctx)
+{
+ EVP_PKEY *key = NULL;
+ BIO *bio = NULL;
+
+ if (!TEST_ptr(file) || !TEST_ptr(bio = BIO_new(BIO_s_file())))
+ return NULL;
+ if (TEST_int_gt(BIO_read_filename(bio, file), 0)) {
+ unsigned long err = ERR_peek_error();
+
+ if (TEST_ptr(key = PEM_read_bio_PrivateKey_ex(bio, NULL, NULL, NULL,
+ libctx, NULL))
+ && err != ERR_peek_error()) {
+ TEST_info("Spurious error from reading PEM");
+ EVP_PKEY_free(key);
+ key = NULL;
+ }
+ }
+
+ BIO_free(bio);
+ return key;
+}
+
+X509_REQ *load_csr_der(const char *file, OSSL_LIB_CTX *libctx)
+{
+ X509_REQ *csr = NULL;
+ BIO *bio = NULL;
+
+ if (!TEST_ptr(file) || !TEST_ptr(bio = BIO_new_file(file, "rb")))
+ return NULL;
+
+ csr = X509_REQ_new_ex(libctx, NULL);
+ if (TEST_ptr(csr))
+ (void)TEST_ptr(d2i_X509_REQ_bio(bio, &csr));
+ BIO_free(bio);
+ return csr;
+}
diff --git a/test/testutil/main.c b/test/testutil/main.c
new file mode 100644
index 000000000000..32e32d832872
--- /dev/null
+++ b/test/testutil/main.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2016-2023 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 "../testutil.h"
+#include "output.h"
+#include "tu_local.h"
+
+
+int main(int argc, char *argv[])
+{
+ int ret = EXIT_FAILURE;
+ int setup_res;
+
+ test_open_streams();
+
+ if (!global_init()) {
+ test_printf_stderr("Global init failed - aborting\n");
+ return ret;
+ }
+
+ if (!setup_test_framework(argc, argv))
+ goto end;
+
+ if ((setup_res = setup_tests()) > 0) {
+ ret = run_tests(argv[0]);
+ cleanup_tests();
+ opt_check_usage();
+ } else if (setup_res == 0) {
+ opt_help(test_get_options());
+ }
+end:
+ ret = pulldown_test_framework(ret);
+ test_close_streams();
+ return ret;
+}
diff --git a/test/testutil/options.c b/test/testutil/options.c
new file mode 100644
index 000000000000..35dfa320c48b
--- /dev/null
+++ b/test/testutil/options.c
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2018-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 "../testutil.h"
+#include "internal/nelem.h"
+#include "tu_local.h"
+#include "output.h"
+
+
+static int used[100] = { 0 };
+
+int test_skip_common_options(void)
+{
+ OPTION_CHOICE_DEFAULT o;
+
+ while ((o = (OPTION_CHOICE_DEFAULT)opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_TEST_CASES:
+ break;
+ default:
+ case OPT_ERR:
+ return 0;
+ }
+ }
+ return 1;
+}
+
+size_t test_get_argument_count(void)
+{
+ return opt_num_rest();
+}
+
+char *test_get_argument(size_t n)
+{
+ char **argv = opt_rest();
+
+ OPENSSL_assert(n < sizeof(used));
+ if ((int)n >= opt_num_rest() || argv == NULL)
+ return NULL;
+ used[n] = 1;
+ return argv[n];
+}
+
+void opt_check_usage(void)
+{
+ int i;
+ char **argv = opt_rest();
+ int n, arg_count = opt_num_rest();
+
+ if (arg_count > (int)OSSL_NELEM(used))
+ n = (int)OSSL_NELEM(used);
+ else
+ n = arg_count;
+ for (i = 0; i < n; i++) {
+ if (used[i] == 0)
+ test_printf_stderr("Warning ignored command-line argument %d: %s\n",
+ i, argv[i]);
+ }
+ if (i < arg_count)
+ test_printf_stderr("Warning arguments %d and later unchecked\n", i);
+}
+
+int opt_printf_stderr(const char *fmt, ...)
+{
+ va_list ap;
+ int ret;
+
+ va_start(ap, fmt);
+ ret = test_vprintf_stderr(fmt, ap);
+ va_end(ap);
+ return ret;
+}
+
diff --git a/test/testutil/output.c b/test/testutil/output.c
new file mode 100644
index 000000000000..e9446a644997
--- /dev/null
+++ b/test/testutil/output.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2017-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 "output.h"
+
+int test_printf_stdout(const char *fmt, ...)
+{
+ va_list ap;
+ int ret;
+
+ va_start(ap, fmt);
+ ret = test_vprintf_stdout(fmt, ap);
+ va_end(ap);
+
+ return ret;
+}
+
+int test_printf_stderr(const char *fmt, ...)
+{
+ va_list ap;
+ int ret;
+
+ va_start(ap, fmt);
+ ret = test_vprintf_stderr(fmt, ap);
+ va_end(ap);
+
+ return ret;
+}
+
+int test_printf_tapout(const char *fmt, ...)
+{
+ va_list ap;
+ int ret;
+
+ va_start(ap, fmt);
+ ret = test_vprintf_tapout(fmt, ap);
+ va_end(ap);
+
+ return ret;
+}
+
+int test_printf_taperr(const char *fmt, ...)
+{
+ va_list ap;
+ int ret;
+
+ va_start(ap, fmt);
+ ret = test_vprintf_taperr(fmt, ap);
+ va_end(ap);
+
+ return ret;
+}
diff --git a/test/testutil/output.h b/test/testutil/output.h
new file mode 100644
index 000000000000..6fbad6f5bd0a
--- /dev/null
+++ b/test/testutil/output.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2014-2022 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_TESTUTIL_OUTPUT_H
+# define OSSL_TESTUTIL_OUTPUT_H
+
+# include <stdarg.h>
+
+# define ossl_test__attr__(x)
+# if defined(__GNUC__) && defined(__STDC_VERSION__) \
+ && !defined(__MINGW32__) && !defined(__MINGW64__) \
+ && !defined(__APPLE__)
+ /*
+ * Because we support the 'z' modifier, which made its appearance in C99,
+ * we can't use __attribute__ with pre C99 dialects.
+ */
+# if __STDC_VERSION__ >= 199901L
+# undef ossl_test__attr__
+# define ossl_test__attr__ __attribute__
+# if __GNUC__*10 + __GNUC_MINOR__ >= 44
+# define ossl_test__printf__ __gnu_printf__
+# else
+# define ossl_test__printf__ __printf__
+# endif
+# endif
+# endif
+/*
+ * The basic I/O functions used internally by the test framework. These
+ * can be overridden when needed. Note that if one is, then all must be.
+ */
+void test_open_streams(void);
+void test_close_streams(void);
+void test_adjust_streams_tap_level(int level);
+/* The following ALL return the number of characters written */
+int test_vprintf_stdout(const char *fmt, va_list ap)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 0)));
+int test_vprintf_tapout(const char *fmt, va_list ap)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 0)));
+int test_vprintf_stderr(const char *fmt, va_list ap)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 0)));
+int test_vprintf_taperr(const char *fmt, va_list ap)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 0)));
+/* These return failure or success */
+int test_flush_stdout(void);
+int test_flush_tapout(void);
+int test_flush_stderr(void);
+int test_flush_taperr(void);
+
+/* Commodity functions. There's no need to override these */
+int test_printf_stdout(const char *fmt, ...)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 2)));
+int test_printf_tapout(const char *fmt, ...)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 2)));
+int test_printf_stderr(const char *fmt, ...)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 2)));
+int test_printf_taperr(const char *fmt, ...)
+ ossl_test__attr__((__format__(ossl_test__printf__, 1, 2)));
+
+# undef ossl_test__printf__
+# undef ossl_test__attr__
+
+#endif /* OSSL_TESTUTIL_OUTPUT_H */
diff --git a/test/testutil/provider.c b/test/testutil/provider.c
new file mode 100644
index 000000000000..79ae13b42a1f
--- /dev/null
+++ b/test/testutil/provider.c
@@ -0,0 +1,242 @@
+/*
+ * Copyright 2018-2023 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 "../testutil.h"
+#include <ctype.h>
+#include <openssl/provider.h>
+#include <openssl/core_names.h>
+#include <string.h>
+
+int test_get_libctx(OSSL_LIB_CTX **libctx, OSSL_PROVIDER **default_null_prov,
+ const char *config_file,
+ OSSL_PROVIDER **provider, const char *module_name)
+{
+ OSSL_LIB_CTX *new_libctx = NULL;
+
+ if (libctx != NULL) {
+ if ((new_libctx = *libctx = OSSL_LIB_CTX_new()) == NULL) {
+ opt_printf_stderr("Failed to create libctx\n");
+ goto err;
+ }
+ }
+
+ if (default_null_prov != NULL
+ && (*default_null_prov = OSSL_PROVIDER_load(NULL, "null")) == NULL) {
+ opt_printf_stderr("Failed to load null provider into default libctx\n");
+ goto err;
+ }
+
+ if (config_file != NULL
+ && !OSSL_LIB_CTX_load_config(new_libctx, config_file)) {
+ opt_printf_stderr("Error loading config from file %s\n", config_file);
+ goto err;
+ }
+
+ if (provider != NULL && module_name != NULL
+ && (*provider = OSSL_PROVIDER_load(new_libctx, module_name)) == NULL) {
+ opt_printf_stderr("Failed to load provider %s\n", module_name);
+ goto err;
+ }
+ return 1;
+
+ err:
+ ERR_print_errors_fp(stderr);
+ return 0;
+}
+
+int test_arg_libctx(OSSL_LIB_CTX **libctx, OSSL_PROVIDER **default_null_prov,
+ OSSL_PROVIDER **provider, int argn, const char *usage)
+{
+ const char *module_name;
+
+ if (!TEST_ptr(module_name = test_get_argument(argn))) {
+ TEST_error("usage: <prog> %s", usage);
+ return 0;
+ }
+ if (strcmp(module_name, "none") == 0)
+ return 1;
+ return test_get_libctx(libctx, default_null_prov,
+ test_get_argument(argn + 1), provider, module_name);
+}
+
+typedef struct {
+ int major, minor, patch;
+} FIPS_VERSION;
+
+/*
+ * Query the FIPS provider to determine it's version number.
+ * Returns 1 if the version is retrieved correctly, 0 if the FIPS provider isn't
+ * loaded and -1 on error.
+ */
+static int fips_provider_version(OSSL_LIB_CTX *libctx, FIPS_VERSION *vers)
+{
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ OSSL_PROVIDER *fips_prov;
+ char *vs;
+
+ if (!OSSL_PROVIDER_available(libctx, "fips"))
+ return 0;
+ *params = OSSL_PARAM_construct_utf8_ptr(OSSL_PROV_PARAM_VERSION, &vs, 0);
+ if ((fips_prov = OSSL_PROVIDER_load(libctx, "fips")) == NULL)
+ return -1;
+ if (!OSSL_PROVIDER_get_params(fips_prov, params)
+ || sscanf(vs, "%d.%d.%d", &vers->major, &vers->minor, &vers->patch) != 3)
+ goto err;
+ if (!OSSL_PROVIDER_unload(fips_prov))
+ return -1;
+ return 1;
+ err:
+ OSSL_PROVIDER_unload(fips_prov);
+ return -1;
+}
+
+int fips_provider_version_eq(OSSL_LIB_CTX *libctx, int major, int minor, int patch)
+{
+ FIPS_VERSION prov;
+ int res;
+
+ if ((res = fips_provider_version(libctx, &prov)) <= 0)
+ return res == 0;
+ return major == prov.major && minor == prov.minor && patch == prov.patch;
+}
+
+int fips_provider_version_ne(OSSL_LIB_CTX *libctx, int major, int minor, int patch)
+{
+ FIPS_VERSION prov;
+ int res;
+
+ if ((res = fips_provider_version(libctx, &prov)) <= 0)
+ return res == 0;
+ return major != prov.major || minor != prov.minor || patch != prov.patch;
+}
+
+int fips_provider_version_le(OSSL_LIB_CTX *libctx, int major, int minor, int patch)
+{
+ FIPS_VERSION prov;
+ int res;
+
+ if ((res = fips_provider_version(libctx, &prov)) <= 0)
+ return res == 0;
+ return prov.major < major
+ || (prov.major == major
+ && (prov.minor < minor
+ || (prov.minor == minor && prov.patch <= patch)));
+}
+
+int fips_provider_version_lt(OSSL_LIB_CTX *libctx, int major, int minor, int patch)
+{
+ FIPS_VERSION prov;
+ int res;
+
+ if ((res = fips_provider_version(libctx, &prov)) <= 0)
+ return res == 0;
+ return prov.major < major
+ || (prov.major == major
+ && (prov.minor < minor
+ || (prov.minor == minor && prov.patch < patch)));
+}
+
+int fips_provider_version_gt(OSSL_LIB_CTX *libctx, int major, int minor, int patch)
+{
+ FIPS_VERSION prov;
+ int res;
+
+ if ((res = fips_provider_version(libctx, &prov)) <= 0)
+ return res == 0;
+ return prov.major > major
+ || (prov.major == major
+ && (prov.minor > minor
+ || (prov.minor == minor && prov.patch > patch)));
+}
+
+int fips_provider_version_ge(OSSL_LIB_CTX *libctx, int major, int minor, int patch)
+{
+ FIPS_VERSION prov;
+ int res;
+
+ if ((res = fips_provider_version(libctx, &prov)) <= 0)
+ return res == 0;
+ return prov.major > major
+ || (prov.major == major
+ && (prov.minor > minor
+ || (prov.minor == minor && prov.patch >= patch)));
+}
+
+int fips_provider_version_match(OSSL_LIB_CTX *libctx, const char *versions)
+{
+ const char *p;
+ int major, minor, patch, r;
+ enum {
+ MODE_EQ, MODE_NE, MODE_LE, MODE_LT, MODE_GT, MODE_GE
+ } mode;
+
+ while (*versions != '\0') {
+ for (; isspace((unsigned char)(*versions)); versions++)
+ continue;
+ if (*versions == '\0')
+ break;
+ for (p = versions; *versions != '\0' && !isspace((unsigned char)(*versions)); versions++)
+ continue;
+ if (*p == '!') {
+ mode = MODE_NE;
+ p++;
+ } else if (*p == '=') {
+ mode = MODE_EQ;
+ p++;
+ } else if (*p == '<' && p[1] == '=') {
+ mode = MODE_LE;
+ p += 2;
+ } else if (*p == '>' && p[1] == '=') {
+ mode = MODE_GE;
+ p += 2;
+ } else if (*p == '<') {
+ mode = MODE_LT;
+ p++;
+ } else if (*p == '>') {
+ mode = MODE_GT;
+ p++;
+ } else if (isdigit((unsigned char)*p)) {
+ mode = MODE_EQ;
+ } else {
+ TEST_info("Error matching FIPS version: mode %s\n", p);
+ return -1;
+ }
+ if (sscanf(p, "%d.%d.%d", &major, &minor, &patch) != 3) {
+ TEST_info("Error matching FIPS version: version %s\n", p);
+ return -1;
+ }
+ switch (mode) {
+ case MODE_EQ:
+ r = fips_provider_version_eq(libctx, major, minor, patch);
+ break;
+ case MODE_NE:
+ r = fips_provider_version_ne(libctx, major, minor, patch);
+ break;
+ case MODE_LE:
+ r = fips_provider_version_le(libctx, major, minor, patch);
+ break;
+ case MODE_LT:
+ r = fips_provider_version_lt(libctx, major, minor, patch);
+ break;
+ case MODE_GT:
+ r = fips_provider_version_gt(libctx, major, minor, patch);
+ break;
+ case MODE_GE:
+ r = fips_provider_version_ge(libctx, major, minor, patch);
+ break;
+ }
+ if (r < 0) {
+ TEST_info("Error matching FIPS version: internal error\n");
+ return -1;
+ }
+ if (r == 0)
+ return 0;
+ }
+ return 1;
+}
diff --git a/test/testutil/random.c b/test/testutil/random.c
new file mode 100644
index 000000000000..45d0bb5f0589
--- /dev/null
+++ b/test/testutil/random.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2019 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 "../testutil.h"
+
+/*
+ * This is an implementation of the algorithm used by the GNU C library's
+ * random(3) pseudorandom number generator as described:
+ * https://www.mscs.dal.ca/~selinger/random/
+ */
+static uint32_t test_random_state[31];
+
+uint32_t test_random(void) {
+ static unsigned int pos = 3;
+
+ if (pos == 31)
+ pos = 0;
+ test_random_state[pos] += test_random_state[(pos + 28) % 31];
+ return test_random_state[pos++] / 2;
+}
+
+void test_random_seed(uint32_t sd) {
+ int i;
+ int32_t s;
+ const unsigned int mod = (1u << 31) - 1;
+
+ test_random_state[0] = sd;
+ for (i = 1; i < 31; i++) {
+ s = (int32_t)test_random_state[i - 1];
+ test_random_state[i] = (uint32_t)((16807 * (int64_t)s) % mod);
+ }
+ for (i = 34; i < 344; i++)
+ test_random();
+}
diff --git a/test/testutil/stanza.c b/test/testutil/stanza.c
new file mode 100644
index 000000000000..ba62f84517f3
--- /dev/null
+++ b/test/testutil/stanza.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2017 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 <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "internal/nelem.h"
+#include "../testutil.h"
+#include "tu_local.h"
+
+int test_start_file(STANZA *s, const char *testfile)
+{
+ TEST_info("Reading %s", testfile);
+ set_test_title(testfile);
+ memset(s, 0, sizeof(*s));
+ if (!TEST_ptr(s->fp = BIO_new_file(testfile, "r")))
+ return 0;
+ s->test_file = testfile;
+ return 1;
+}
+
+int test_end_file(STANZA *s)
+{
+ TEST_info("Completed %d tests with %d errors and %d skipped",
+ s->numtests, s->errors, s->numskip);
+ BIO_free(s->fp);
+ return 1;
+}
+
+/*
+ * Read a PEM block. Return 1 if okay, 0 on error.
+ */
+static int read_key(STANZA *s)
+{
+ char tmpbuf[128];
+
+ if (s->key == NULL) {
+ if (!TEST_ptr(s->key = BIO_new(BIO_s_mem())))
+ return 0;
+ } else if (!TEST_int_gt(BIO_reset(s->key), 0)) {
+ return 0;
+ }
+
+ /* Read to PEM end line and place content in memory BIO */
+ while (BIO_gets(s->fp, tmpbuf, sizeof(tmpbuf))) {
+ s->curr++;
+ if (!TEST_int_gt(BIO_puts(s->key, tmpbuf), 0))
+ return 0;
+ if (strncmp(tmpbuf, "-----END", 8) == 0)
+ return 1;
+ }
+ TEST_error("Can't find key end");
+ return 0;
+}
+
+
+/*
+ * Delete leading and trailing spaces from a string
+ */
+static char *strip_spaces(char *p)
+{
+ char *q;
+
+ /* Skip over leading spaces */
+ while (*p && isspace((unsigned char)*p))
+ p++;
+ if (*p == '\0')
+ return NULL;
+
+ for (q = p + strlen(p) - 1; q != p && isspace((unsigned char)*q); )
+ *q-- = '\0';
+ return *p ? p : NULL;
+}
+
+/*
+ * Read next test stanza; return 1 if found, 0 on EOF or error.
+ */
+int test_readstanza(STANZA *s)
+{
+ PAIR *pp = s->pairs;
+ char *p, *equals, *key;
+ const char *value;
+
+ for (s->numpairs = 0; BIO_gets(s->fp, s->buff, sizeof(s->buff)); ) {
+ s->curr++;
+ if (!TEST_ptr(p = strchr(s->buff, '\n'))) {
+ TEST_info("Line %d too long", s->curr);
+ return 0;
+ }
+ *p = '\0';
+
+ /* Blank line marks end of tests. */
+ if (s->buff[0] == '\0')
+ break;
+
+ /* Lines starting with a pound sign are ignored. */
+ if (s->buff[0] == '#')
+ continue;
+
+ /* Parse into key=value */
+ if (!TEST_ptr(equals = strchr(s->buff, '='))) {
+ TEST_info("Missing = at line %d\n", s->curr);
+ return 0;
+ }
+ *equals++ = '\0';
+ if (!TEST_ptr(key = strip_spaces(s->buff))) {
+ TEST_info("Empty field at line %d\n", s->curr);
+ return 0;
+ }
+ if ((value = strip_spaces(equals)) == NULL)
+ value = "";
+
+ if (strcmp(key, "Title") == 0) {
+ TEST_info("Starting \"%s\" tests at line %d", value, s->curr);
+ continue;
+ }
+
+ if (s->numpairs == 0)
+ s->start = s->curr;
+
+ if (strcmp(key, "PrivateKey") == 0) {
+ if (!read_key(s))
+ return 0;
+ }
+ if (strcmp(key, "PublicKey") == 0) {
+ if (!read_key(s))
+ return 0;
+ }
+
+ if (!TEST_int_lt(s->numpairs++, TESTMAXPAIRS)
+ || !TEST_ptr(pp->key = OPENSSL_strdup(key))
+ || !TEST_ptr(pp->value = OPENSSL_strdup(value)))
+ return 0;
+ pp++;
+ }
+
+ /* If we read anything, return ok. */
+ return 1;
+}
+
+void test_clearstanza(STANZA *s)
+{
+ PAIR *pp = s->pairs;
+ int i = s->numpairs;
+
+ for ( ; --i >= 0; pp++) {
+ OPENSSL_free(pp->key);
+ OPENSSL_free(pp->value);
+ }
+ s->numpairs = 0;
+}
diff --git a/test/testutil/test_cleanup.c b/test/testutil/test_cleanup.c
new file mode 100644
index 000000000000..669c54ce5abb
--- /dev/null
+++ b/test/testutil/test_cleanup.c
@@ -0,0 +1,14 @@
+/*
+ * Copyright 2017 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 "../testutil.h"
+
+void cleanup_tests(void)
+{
+}
diff --git a/test/testutil/test_options.c b/test/testutil/test_options.c
new file mode 100644
index 000000000000..51d880399bf2
--- /dev/null
+++ b/test/testutil/test_options.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2018-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 "../testutil.h"
+#include "tu_local.h"
+
+/* An overridable list of command line options */
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS default_options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { NULL }
+ };
+ return default_options;
+}
diff --git a/test/testutil/tests.c b/test/testutil/tests.c
new file mode 100644
index 000000000000..ef7e224cd119
--- /dev/null
+++ b/test/testutil/tests.c
@@ -0,0 +1,472 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "../testutil.h"
+#include "output.h"
+#include "tu_local.h"
+
+#include <errno.h>
+#include <string.h>
+#include <ctype.h>
+#include "internal/nelem.h"
+#include <openssl/asn1.h>
+
+/*
+ * Output a failed test first line.
+ * All items are optional are generally not preinted if passed as NULL.
+ * The special cases are for prefix where "ERROR" is assumed and for left
+ * and right where a non-failure message is produced if either is NULL.
+ */
+void test_fail_message_prefix(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op)
+{
+ test_printf_stderr("%s: ", prefix != NULL ? prefix : "ERROR");
+ if (type)
+ test_printf_stderr("(%s) ", type);
+ if (op != NULL) {
+ if (left != NULL && right != NULL)
+ test_printf_stderr("'%s %s %s' failed", left, op, right);
+ else
+ test_printf_stderr("'%s'", op);
+ }
+ if (file != NULL) {
+ test_printf_stderr(" @ %s:%d", file, line);
+ }
+ test_printf_stderr("\n");
+}
+
+/*
+ * A common routine to output test failure messages. Generally this should not
+ * be called directly, rather it should be called by the following functions.
+ *
+ * |desc| is a printf formatted description with arguments |args| that is
+ * supplied by the user and |desc| can be NULL. |type| is the data type
+ * that was tested (int, char, ptr, ...). |fmt| is a system provided
+ * printf format with following arguments that spell out the failure
+ * details i.e. the actual values compared and the operator used.
+ *
+ * The typical use for this is from an utility test function:
+ *
+ * int test6(const char *file, int line, int n) {
+ * if (n != 6) {
+ * test_fail_message(1, file, line, "int", "value %d is not %d", n, 6);
+ * return 0;
+ * }
+ * return 1;
+ * }
+ *
+ * calling test6(3, "oops") will return 0 and produce out along the lines of:
+ * FAIL oops: (int) value 3 is not 6\n
+ */
+static void test_fail_message(const char *prefix, const char *file, int line,
+ const char *type, const char *left,
+ const char *right, const char *op,
+ const char *fmt, ...)
+ PRINTF_FORMAT(8, 9);
+
+static void test_fail_message_va(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op, const char *fmt, va_list ap)
+{
+ test_fail_message_prefix(prefix, file, line, type, left, right, op);
+ if (fmt != NULL) {
+ test_vprintf_stderr(fmt, ap);
+ test_printf_stderr("\n");
+ }
+ test_flush_stderr();
+}
+
+static void test_fail_message(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ test_fail_message_va(prefix, file, line, type, left, right, op, fmt, ap);
+ va_end(ap);
+}
+
+void test_info_c90(const char *desc, ...)
+{
+ va_list ap;
+
+ va_start(ap, desc);
+ test_fail_message_va("INFO", NULL, -1, NULL, NULL, NULL, NULL, desc, ap);
+ va_end(ap);
+}
+
+void test_info(const char *file, int line, const char *desc, ...)
+{
+ va_list ap;
+
+ va_start(ap, desc);
+ test_fail_message_va("INFO", file, line, NULL, NULL, NULL, NULL, desc, ap);
+ va_end(ap);
+}
+
+void test_error_c90(const char *desc, ...)
+{
+ va_list ap;
+
+ va_start(ap, desc);
+ test_fail_message_va(NULL, NULL, -1, NULL, NULL, NULL, NULL, desc, ap);
+ va_end(ap);
+ test_printf_stderr("\n");
+}
+
+void test_error(const char *file, int line, const char *desc, ...)
+{
+ va_list ap;
+
+ va_start(ap, desc);
+ test_fail_message_va(NULL, file, line, NULL, NULL, NULL, NULL, desc, ap);
+ va_end(ap);
+ test_printf_stderr("\n");
+}
+
+void test_perror(const char *s)
+{
+ /*
+ * Using openssl_strerror_r causes linking issues since it isn't
+ * exported from libcrypto.so
+ */
+ TEST_error("%s: %s", s, strerror(errno));
+}
+
+void test_note(const char *fmt, ...)
+{
+ if (fmt != NULL) {
+ va_list ap;
+
+ va_start(ap, fmt);
+ test_vprintf_stderr(fmt, ap);
+ va_end(ap);
+ test_printf_stderr("\n");
+ }
+ test_flush_stderr();
+}
+
+
+int test_skip(const char *file, int line, const char *desc, ...)
+{
+ va_list ap;
+
+ va_start(ap, desc);
+ test_fail_message_va("SKIP", file, line, NULL, NULL, NULL, NULL, desc, ap);
+ va_end(ap);
+ return TEST_SKIP_CODE;
+}
+
+int test_skip_c90(const char *desc, ...)
+{
+ va_list ap;
+
+ va_start(ap, desc);
+ test_fail_message_va("SKIP", NULL, -1, NULL, NULL, NULL, NULL, desc, ap);
+ va_end(ap);
+ test_printf_stderr("\n");
+ return TEST_SKIP_CODE;
+}
+
+
+void test_openssl_errors(void)
+{
+ ERR_print_errors_cb(openssl_error_cb, NULL);
+ ERR_clear_error();
+}
+
+/*
+ * Define some comparisons between pairs of various types.
+ * These functions return 1 if the test is true.
+ * Otherwise, they return 0 and pretty-print diagnostics.
+ *
+ * In each case the functions produced are:
+ * int test_name_eq(const type t1, const type t2, const char *desc, ...);
+ * int test_name_ne(const type t1, const type t2, const char *desc, ...);
+ * int test_name_lt(const type t1, const type t2, const char *desc, ...);
+ * int test_name_le(const type t1, const type t2, const char *desc, ...);
+ * int test_name_gt(const type t1, const type t2, const char *desc, ...);
+ * int test_name_ge(const type t1, const type t2, const char *desc, ...);
+ *
+ * The t1 and t2 arguments are to be compared for equality, inequality,
+ * less than, less than or equal to, greater than and greater than or
+ * equal to respectively. If the specified condition holds, the functions
+ * return 1. If the condition does not hold, the functions print a diagnostic
+ * message and return 0.
+ *
+ * The desc argument is a printf format string followed by its arguments and
+ * this is included in the output if the condition being tested for is false.
+ */
+#define DEFINE_COMPARISON(type, name, opname, op, fmt) \
+ int test_ ## name ## _ ## opname(const char *file, int line, \
+ const char *s1, const char *s2, \
+ const type t1, const type t2) \
+ { \
+ if (t1 op t2) \
+ return 1; \
+ test_fail_message(NULL, file, line, #type, s1, s2, #op, \
+ "[" fmt "] compared to [" fmt "]", \
+ t1, t2); \
+ return 0; \
+ }
+
+#define DEFINE_COMPARISONS(type, name, fmt) \
+ DEFINE_COMPARISON(type, name, eq, ==, fmt) \
+ DEFINE_COMPARISON(type, name, ne, !=, fmt) \
+ DEFINE_COMPARISON(type, name, lt, <, fmt) \
+ DEFINE_COMPARISON(type, name, le, <=, fmt) \
+ DEFINE_COMPARISON(type, name, gt, >, fmt) \
+ DEFINE_COMPARISON(type, name, ge, >=, fmt)
+
+DEFINE_COMPARISONS(int, int, "%d")
+DEFINE_COMPARISONS(unsigned int, uint, "%u")
+DEFINE_COMPARISONS(char, char, "%c")
+DEFINE_COMPARISONS(unsigned char, uchar, "%u")
+DEFINE_COMPARISONS(long, long, "%ld")
+DEFINE_COMPARISONS(unsigned long, ulong, "%lu")
+DEFINE_COMPARISONS(size_t, size_t, "%zu")
+DEFINE_COMPARISONS(double, double, "%g")
+
+DEFINE_COMPARISON(void *, ptr, eq, ==, "%p")
+DEFINE_COMPARISON(void *, ptr, ne, !=, "%p")
+
+int test_ptr_null(const char *file, int line, const char *s, const void *p)
+{
+ if (p == NULL)
+ return 1;
+ test_fail_message(NULL, file, line, "ptr", s, "NULL", "==", "%p", p);
+ return 0;
+}
+
+int test_ptr(const char *file, int line, const char *s, const void *p)
+{
+ if (p != NULL)
+ return 1;
+ test_fail_message(NULL, file, line, "ptr", s, "NULL", "!=", "%p", p);
+ return 0;
+}
+
+int test_true(const char *file, int line, const char *s, int b)
+{
+ if (b)
+ return 1;
+ test_fail_message(NULL, file, line, "bool", s, "true", "==", "false");
+ return 0;
+}
+
+int test_false(const char *file, int line, const char *s, int b)
+{
+ if (!b)
+ return 1;
+ test_fail_message(NULL, file, line, "bool", s, "false", "==", "true");
+ return 0;
+}
+
+int test_str_eq(const char *file, int line, const char *st1, const char *st2,
+ const char *s1, const char *s2)
+{
+ if (s1 == NULL && s2 == NULL)
+ return 1;
+ if (s1 == NULL || s2 == NULL || strcmp(s1, s2) != 0) {
+ test_fail_string_message(NULL, file, line, "string", st1, st2, "==",
+ s1, s1 == NULL ? 0 : strlen(s1),
+ s2, s2 == NULL ? 0 : strlen(s2));
+ return 0;
+ }
+ return 1;
+}
+
+int test_str_ne(const char *file, int line, const char *st1, const char *st2,
+ const char *s1, const char *s2)
+{
+ if ((s1 == NULL) ^ (s2 == NULL))
+ return 1;
+ if (s1 == NULL || strcmp(s1, s2) == 0) {
+ test_fail_string_message(NULL, file, line, "string", st1, st2, "!=",
+ s1, s1 == NULL ? 0 : strlen(s1),
+ s2, s2 == NULL ? 0 : strlen(s2));
+ return 0;
+ }
+ return 1;
+}
+
+int test_strn_eq(const char *file, int line, const char *st1, const char *st2,
+ const char *s1, size_t n1, const char *s2, size_t n2)
+{
+ if (s1 == NULL && s2 == NULL)
+ return 1;
+ if (n1 != n2 || s1 == NULL || s2 == NULL || strncmp(s1, s2, n1) != 0) {
+ test_fail_string_message(NULL, file, line, "string", st1, st2, "==",
+ s1, s1 == NULL ? 0 : OPENSSL_strnlen(s1, n1),
+ s2, s2 == NULL ? 0 : OPENSSL_strnlen(s2, n2));
+ return 0;
+ }
+ return 1;
+}
+
+int test_strn_ne(const char *file, int line, const char *st1, const char *st2,
+ const char *s1, size_t n1, const char *s2, size_t n2)
+{
+ if ((s1 == NULL) ^ (s2 == NULL))
+ return 1;
+ if (n1 != n2 || s1 == NULL || strncmp(s1, s2, n1) == 0) {
+ test_fail_string_message(NULL, file, line, "string", st1, st2, "!=",
+ s1, s1 == NULL ? 0 : OPENSSL_strnlen(s1, n1),
+ s2, s2 == NULL ? 0 : OPENSSL_strnlen(s2, n2));
+ return 0;
+ }
+ return 1;
+}
+
+int test_mem_eq(const char *file, int line, const char *st1, const char *st2,
+ const void *s1, size_t n1, const void *s2, size_t n2)
+{
+ if (s1 == NULL && s2 == NULL)
+ return 1;
+ if (n1 != n2 || s1 == NULL || s2 == NULL || memcmp(s1, s2, n1) != 0) {
+ test_fail_memory_message(NULL, file, line, "memory", st1, st2, "==",
+ s1, n1, s2, n2);
+ return 0;
+ }
+ return 1;
+}
+
+int test_mem_ne(const char *file, int line, const char *st1, const char *st2,
+ const void *s1, size_t n1, const void *s2, size_t n2)
+{
+ if ((s1 == NULL) ^ (s2 == NULL))
+ return 1;
+ if (n1 != n2)
+ return 1;
+ if (s1 == NULL || memcmp(s1, s2, n1) == 0) {
+ test_fail_memory_message(NULL, file, line, "memory", st1, st2, "!=",
+ s1, n1, s2, n2);
+ return 0;
+ }
+ return 1;
+}
+
+#define DEFINE_BN_COMPARISONS(opname, op, zero_cond) \
+ int test_BN_ ## opname(const char *file, int line, \
+ const char *s1, const char *s2, \
+ const BIGNUM *t1, const BIGNUM *t2) \
+ { \
+ if (BN_cmp(t1, t2) op 0) \
+ return 1; \
+ test_fail_bignum_message(NULL, file, line, "BIGNUM", s1, s2, \
+ #op, t1, t2); \
+ return 0; \
+ } \
+ int test_BN_ ## opname ## _zero(const char *file, int line, \
+ const char *s, const BIGNUM *a) \
+ { \
+ if (a != NULL &&(zero_cond)) \
+ return 1; \
+ test_fail_bignum_mono_message(NULL, file, line, "BIGNUM", \
+ s, "0", #op, a); \
+ return 0; \
+ }
+
+DEFINE_BN_COMPARISONS(eq, ==, BN_is_zero(a))
+DEFINE_BN_COMPARISONS(ne, !=, !BN_is_zero(a))
+DEFINE_BN_COMPARISONS(gt, >, !BN_is_negative(a) && !BN_is_zero(a))
+DEFINE_BN_COMPARISONS(ge, >=, !BN_is_negative(a) || BN_is_zero(a))
+DEFINE_BN_COMPARISONS(lt, <, BN_is_negative(a) && !BN_is_zero(a))
+DEFINE_BN_COMPARISONS(le, <=, BN_is_negative(a) || BN_is_zero(a))
+
+int test_BN_eq_one(const char *file, int line, const char *s, const BIGNUM *a)
+{
+ if (a != NULL && BN_is_one(a))
+ return 1;
+ test_fail_bignum_mono_message(NULL, file, line, "BIGNUM", s, "1", "==", a);
+ return 0;
+}
+
+int test_BN_odd(const char *file, int line, const char *s, const BIGNUM *a)
+{
+ if (a != NULL && BN_is_odd(a))
+ return 1;
+ test_fail_bignum_mono_message(NULL, file, line, "BIGNUM", "ODD(", ")", s, a);
+ return 0;
+}
+
+int test_BN_even(const char *file, int line, const char *s, const BIGNUM *a)
+{
+ if (a != NULL && !BN_is_odd(a))
+ return 1;
+ test_fail_bignum_mono_message(NULL, file, line, "BIGNUM", "EVEN(", ")", s,
+ a);
+ return 0;
+}
+
+int test_BN_eq_word(const char *file, int line, const char *bns, const char *ws,
+ const BIGNUM *a, BN_ULONG w)
+{
+ BIGNUM *bw;
+
+ if (a != NULL && BN_is_word(a, w))
+ return 1;
+ if ((bw = BN_new()) != NULL)
+ BN_set_word(bw, w);
+ test_fail_bignum_message(NULL, file, line, "BIGNUM", bns, ws, "==", a, bw);
+ BN_free(bw);
+ return 0;
+}
+
+int test_BN_abs_eq_word(const char *file, int line, const char *bns,
+ const char *ws, const BIGNUM *a, BN_ULONG w)
+{
+ BIGNUM *bw, *aa;
+
+ if (a != NULL && BN_abs_is_word(a, w))
+ return 1;
+ if ((aa = BN_dup(a)) != NULL)
+ BN_set_negative(aa, 0);
+ if ((bw = BN_new()) != NULL)
+ BN_set_word(bw, w);
+ test_fail_bignum_message(NULL, file, line, "BIGNUM", bns, ws, "abs==",
+ aa, bw);
+ BN_free(bw);
+ BN_free(aa);
+ return 0;
+}
+
+static const char *print_time(const ASN1_TIME *t)
+{
+ return t == NULL ? "<null>" : (const char *)ASN1_STRING_get0_data(t);
+}
+
+#define DEFINE_TIME_T_COMPARISON(opname, op) \
+ int test_time_t_ ## opname(const char *file, int line, \
+ const char *s1, const char *s2, \
+ const time_t t1, const time_t t2) \
+ { \
+ ASN1_TIME *at1 = ASN1_TIME_set(NULL, t1); \
+ ASN1_TIME *at2 = ASN1_TIME_set(NULL, t2); \
+ int r = at1 != NULL && at2 != NULL \
+ && ASN1_TIME_compare(at1, at2) op 0; \
+ if (!r) \
+ test_fail_message(NULL, file, line, "time_t", s1, s2, #op, \
+ "[%s] compared to [%s]", \
+ print_time(at1), print_time(at2)); \
+ ASN1_STRING_free(at1); \
+ ASN1_STRING_free(at2); \
+ return r; \
+ }
+DEFINE_TIME_T_COMPARISON(eq, ==)
+DEFINE_TIME_T_COMPARISON(ne, !=)
+DEFINE_TIME_T_COMPARISON(gt, >)
+DEFINE_TIME_T_COMPARISON(ge, >=)
+DEFINE_TIME_T_COMPARISON(lt, <)
+DEFINE_TIME_T_COMPARISON(le, <=)
diff --git a/test/testutil/testutil_init.c b/test/testutil/testutil_init.c
new file mode 100644
index 000000000000..87013694c29e
--- /dev/null
+++ b/test/testutil/testutil_init.c
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/opensslconf.h>
+#include <openssl/trace.h>
+#include "apps.h"
+#include "../testutil.h"
+
+#ifndef OPENSSL_NO_TRACE
+typedef struct tracedata_st {
+ BIO *bio;
+ unsigned int ingroup:1;
+} tracedata;
+
+static size_t internal_trace_cb(const char *buf, size_t cnt,
+ int category, int cmd, void *vdata)
+{
+ int ret = 0;
+ tracedata *trace_data = vdata;
+ char buffer[256], *hex;
+ CRYPTO_THREAD_ID tid;
+
+ switch (cmd) {
+ case OSSL_TRACE_CTRL_BEGIN:
+ trace_data->ingroup = 1;
+
+ tid = CRYPTO_THREAD_get_current_id();
+ hex = OPENSSL_buf2hexstr((const unsigned char *)&tid, sizeof(tid));
+ BIO_snprintf(buffer, sizeof(buffer), "TRACE[%s]:%s: ",
+ hex, OSSL_trace_get_category_name(category));
+ OPENSSL_free(hex);
+ BIO_set_prefix(trace_data->bio, buffer);
+ break;
+ case OSSL_TRACE_CTRL_WRITE:
+ ret = BIO_write(trace_data->bio, buf, cnt);
+ break;
+ case OSSL_TRACE_CTRL_END:
+ trace_data->ingroup = 0;
+
+ BIO_set_prefix(trace_data->bio, NULL);
+ break;
+ }
+
+ return ret < 0 ? 0 : ret;
+}
+
+DEFINE_STACK_OF(tracedata)
+static STACK_OF(tracedata) *trace_data_stack;
+
+static void tracedata_free(tracedata *data)
+{
+ BIO_free_all(data->bio);
+ OPENSSL_free(data);
+}
+
+static STACK_OF(tracedata) *trace_data_stack;
+
+static void cleanup_trace(void)
+{
+ sk_tracedata_pop_free(trace_data_stack, tracedata_free);
+}
+
+static void setup_trace_category(int category)
+{
+ BIO *channel;
+ tracedata *trace_data;
+ BIO *bio = NULL;
+
+ if (OSSL_trace_enabled(category))
+ return;
+
+ bio = BIO_new(BIO_f_prefix());
+ channel = BIO_push(bio,
+ BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT));
+ trace_data = OPENSSL_zalloc(sizeof(*trace_data));
+
+ if (trace_data == NULL
+ || bio == NULL
+ || (trace_data->bio = channel) == NULL
+ || OSSL_trace_set_callback(category, internal_trace_cb,
+ trace_data) == 0
+ || sk_tracedata_push(trace_data_stack, trace_data) == 0) {
+
+ fprintf(stderr,
+ "warning: unable to setup trace callback for category '%s'.\n",
+ OSSL_trace_get_category_name(category));
+
+ OSSL_trace_set_callback(category, NULL, NULL);
+ BIO_free_all(channel);
+ }
+}
+
+static void setup_trace(const char *str)
+{
+ char *val;
+
+ /*
+ * We add this handler as early as possible to ensure it's executed
+ * as late as possible, i.e. after the TRACE code has done its cleanup
+ * (which happens last in OPENSSL_cleanup).
+ */
+ atexit(cleanup_trace);
+
+ trace_data_stack = sk_tracedata_new_null();
+ val = OPENSSL_strdup(str);
+
+ if (val != NULL) {
+ char *valp = val;
+ char *item;
+
+ for (valp = val; (item = strtok(valp, ",")) != NULL; valp = NULL) {
+ int category = OSSL_trace_get_category_num(item);
+
+ if (category == OSSL_TRACE_CATEGORY_ALL) {
+ while (++category < OSSL_TRACE_CATEGORY_NUM)
+ setup_trace_category(category);
+ break;
+ } else if (category > 0) {
+ setup_trace_category(category);
+ } else {
+ fprintf(stderr,
+ "warning: unknown trace category: '%s'.\n", item);
+ }
+ }
+ }
+
+ OPENSSL_free(val);
+}
+#endif /* OPENSSL_NO_TRACE */
+
+int global_init(void)
+{
+#ifndef OPENSSL_NO_TRACE
+ setup_trace(getenv("OPENSSL_TRACE"));
+#endif
+
+ return 1;
+}
diff --git a/test/testutil/tu_local.h b/test/testutil/tu_local.h
new file mode 100644
index 000000000000..ede4546948ff
--- /dev/null
+++ b/test/testutil/tu_local.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2017-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
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdlib.h> /* size_t */
+#include <openssl/bn.h>
+#include <openssl/bio.h>
+#include "../testutil.h"
+
+#define TEST_SKIP_CODE 123
+
+int subtest_level(void);
+int openssl_error_cb(const char *str, size_t len, void *u);
+const BIO_METHOD *BIO_f_tap(void);
+
+void test_fail_message_prefix(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op);
+
+void test_fail_string_message(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op, const char *m1, size_t l1,
+ const char *m2, size_t l2);
+
+void test_fail_bignum_message(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op,
+ const BIGNUM *bn1, const BIGNUM *bn2);
+void test_fail_bignum_mono_message(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op, const BIGNUM *bn);
+
+void test_fail_memory_message(const char *prefix, const char *file,
+ int line, const char *type,
+ const char *left, const char *right,
+ const char *op,
+ const unsigned char *m1, size_t l1,
+ const unsigned char *m2, size_t l2);
+
+__owur int setup_test_framework(int argc, char *argv[]);
+__owur int pulldown_test_framework(int ret);
+
+__owur int run_tests(const char *test_prog_name);
+void set_test_title(const char *title);
+
+typedef enum OPTION_choice_default {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_TEST_ENUM
+} OPTION_CHOICE_DEFAULT;
+void opt_check_usage(void);
+
diff --git a/test/testx509.pem b/test/testx509.pem
new file mode 100644
index 000000000000..e0c7a1f9afea
--- /dev/null
+++ b/test/testx509.pem
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBczCCAR0CFEqkMs9xq0qfdNflIpoqdDaOU/ThMA0GCSqGSIb3DQEBBAUAMDox
+CzAJBgNVBAYTAkFVMQwwCgYDVQQIDANRTEQxHTAbBgNVBAMMFFNTTGVheSByc2Eg
+dGVzdCBjZXJ0MCAXDTIwMDczMTE3MTM0NVoYDzIxMjAwNzA3MTcxMzQ1WjA6MQsw
+CQYDVQQGEwJBVTEMMAoGA1UECAwDUUxEMR0wGwYDVQQDDBRTU0xlYXkgcnNhIHRl
+c3QgY2VydDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDUZKgYSMuJdiw2aIQIG4LD
+vm9HbUnyJyj6WgPkpw98dVKTj0jo3F6n/e3anYzvSpOiPkTuvw209yslzJs40Sf7
+AgMBAAEwDQYJKoZIhvcNAQEEBQADQQBV1bQAvyLvJQrNt7WEKmo/inigwjsvQYwd
+nxmV6zWhqpQZmo86/ixumUa6zTlq+y4+wiiFngMZ7Bt0O769Nlzx
+-----END CERTIFICATE-----
diff --git a/test/threadstest.c b/test/threadstest.c
new file mode 100644
index 000000000000..289565c14b5d
--- /dev/null
+++ b/test/threadstest.c
@@ -0,0 +1,728 @@
+/*
+ * Copyright 2016-2022 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
+ */
+
+/* test_multi below tests the thread safety of a deprecated function */
+#define OPENSSL_SUPPRESS_DEPRECATED
+
+#if defined(_WIN32)
+# include <windows.h>
+#endif
+
+#include <string.h>
+#include <openssl/crypto.h>
+#include <openssl/rsa.h>
+#include <openssl/aes.h>
+#include <openssl/rsa.h>
+#include "testutil.h"
+#include "threadstest.h"
+
+/* Limit the maximum number of threads */
+#define MAXIMUM_THREADS 10
+
+/* Limit the maximum number of providers loaded into a library context */
+#define MAXIMUM_PROVIDERS 4
+
+static int do_fips = 0;
+static char *privkey;
+static char *config_file = NULL;
+static int multidefault_run = 0;
+static const char *default_provider[] = { "default", NULL };
+
+static int test_lock(void)
+{
+ CRYPTO_RWLOCK *lock = CRYPTO_THREAD_lock_new();
+ int res;
+
+ res = TEST_true(CRYPTO_THREAD_read_lock(lock))
+ && TEST_true(CRYPTO_THREAD_unlock(lock))
+ && TEST_true(CRYPTO_THREAD_write_lock(lock))
+ && TEST_true(CRYPTO_THREAD_unlock(lock));
+
+ CRYPTO_THREAD_lock_free(lock);
+
+ return res;
+}
+
+static CRYPTO_ONCE once_run = CRYPTO_ONCE_STATIC_INIT;
+static unsigned once_run_count = 0;
+
+static void once_do_run(void)
+{
+ once_run_count++;
+}
+
+static void once_run_thread_cb(void)
+{
+ CRYPTO_THREAD_run_once(&once_run, once_do_run);
+}
+
+static int test_once(void)
+{
+ thread_t thread;
+
+ if (!TEST_true(run_thread(&thread, once_run_thread_cb))
+ || !TEST_true(wait_for_thread(thread))
+ || !CRYPTO_THREAD_run_once(&once_run, once_do_run)
+ || !TEST_int_eq(once_run_count, 1))
+ return 0;
+ return 1;
+}
+
+static CRYPTO_THREAD_LOCAL thread_local_key;
+static unsigned destructor_run_count = 0;
+static int thread_local_thread_cb_ok = 0;
+
+static void thread_local_destructor(void *arg)
+{
+ unsigned *count;
+
+ if (arg == NULL)
+ return;
+
+ count = arg;
+
+ (*count)++;
+}
+
+static void thread_local_thread_cb(void)
+{
+ void *ptr;
+
+ ptr = CRYPTO_THREAD_get_local(&thread_local_key);
+ if (!TEST_ptr_null(ptr)
+ || !TEST_true(CRYPTO_THREAD_set_local(&thread_local_key,
+ &destructor_run_count)))
+ return;
+
+ ptr = CRYPTO_THREAD_get_local(&thread_local_key);
+ if (!TEST_ptr_eq(ptr, &destructor_run_count))
+ return;
+
+ thread_local_thread_cb_ok = 1;
+}
+
+static int test_thread_local(void)
+{
+ thread_t thread;
+ void *ptr = NULL;
+
+ if (!TEST_true(CRYPTO_THREAD_init_local(&thread_local_key,
+ thread_local_destructor)))
+ return 0;
+
+ ptr = CRYPTO_THREAD_get_local(&thread_local_key);
+ if (!TEST_ptr_null(ptr)
+ || !TEST_true(run_thread(&thread, thread_local_thread_cb))
+ || !TEST_true(wait_for_thread(thread))
+ || !TEST_int_eq(thread_local_thread_cb_ok, 1))
+ return 0;
+
+#if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG)
+
+ ptr = CRYPTO_THREAD_get_local(&thread_local_key);
+ if (!TEST_ptr_null(ptr))
+ return 0;
+
+# if !defined(OPENSSL_SYS_WINDOWS)
+ if (!TEST_int_eq(destructor_run_count, 1))
+ return 0;
+# endif
+#endif
+
+ if (!TEST_true(CRYPTO_THREAD_cleanup_local(&thread_local_key)))
+ return 0;
+ return 1;
+}
+
+static int test_atomic(void)
+{
+ int val = 0, ret = 0, testresult = 0;
+ uint64_t val64 = 1, ret64 = 0;
+ CRYPTO_RWLOCK *lock = CRYPTO_THREAD_lock_new();
+
+ if (!TEST_ptr(lock))
+ return 0;
+
+ if (CRYPTO_atomic_add(&val, 1, &ret, NULL)) {
+ /* This succeeds therefore we're on a platform with lockless atomics */
+ if (!TEST_int_eq(val, 1) || !TEST_int_eq(val, ret))
+ goto err;
+ } else {
+ /* This failed therefore we're on a platform without lockless atomics */
+ if (!TEST_int_eq(val, 0) || !TEST_int_eq(val, ret))
+ goto err;
+ }
+ val = 0;
+ ret = 0;
+
+ if (!TEST_true(CRYPTO_atomic_add(&val, 1, &ret, lock)))
+ goto err;
+ if (!TEST_int_eq(val, 1) || !TEST_int_eq(val, ret))
+ goto err;
+
+ if (CRYPTO_atomic_or(&val64, 2, &ret64, NULL)) {
+ /* This succeeds therefore we're on a platform with lockless atomics */
+ if (!TEST_uint_eq((unsigned int)val64, 3)
+ || !TEST_uint_eq((unsigned int)val64, (unsigned int)ret64))
+ goto err;
+ } else {
+ /* This failed therefore we're on a platform without lockless atomics */
+ if (!TEST_uint_eq((unsigned int)val64, 1)
+ || !TEST_int_eq((unsigned int)ret64, 0))
+ goto err;
+ }
+ val64 = 1;
+ ret64 = 0;
+
+ if (!TEST_true(CRYPTO_atomic_or(&val64, 2, &ret64, lock)))
+ goto err;
+
+ if (!TEST_uint_eq((unsigned int)val64, 3)
+ || !TEST_uint_eq((unsigned int)val64, (unsigned int)ret64))
+ goto err;
+
+ ret64 = 0;
+ if (CRYPTO_atomic_load(&val64, &ret64, NULL)) {
+ /* This succeeds therefore we're on a platform with lockless atomics */
+ if (!TEST_uint_eq((unsigned int)val64, 3)
+ || !TEST_uint_eq((unsigned int)val64, (unsigned int)ret64))
+ goto err;
+ } else {
+ /* This failed therefore we're on a platform without lockless atomics */
+ if (!TEST_uint_eq((unsigned int)val64, 3)
+ || !TEST_int_eq((unsigned int)ret64, 0))
+ goto err;
+ }
+
+ ret64 = 0;
+ if (!TEST_true(CRYPTO_atomic_load(&val64, &ret64, lock)))
+ goto err;
+
+ if (!TEST_uint_eq((unsigned int)val64, 3)
+ || !TEST_uint_eq((unsigned int)val64, (unsigned int)ret64))
+ goto err;
+
+ testresult = 1;
+ err:
+ CRYPTO_THREAD_lock_free(lock);
+ return testresult;
+}
+
+static OSSL_LIB_CTX *multi_libctx = NULL;
+static int multi_success;
+static OSSL_PROVIDER *multi_provider[MAXIMUM_PROVIDERS + 1];
+static size_t multi_num_threads;
+static thread_t multi_threads[MAXIMUM_THREADS];
+
+static void multi_intialise(void)
+{
+ multi_success = 1;
+ multi_libctx = NULL;
+ multi_num_threads = 0;
+ memset(multi_threads, 0, sizeof(multi_threads));
+ memset(multi_provider, 0, sizeof(multi_provider));
+}
+
+static void thead_teardown_libctx(void)
+{
+ OSSL_PROVIDER **p;
+
+ for (p = multi_provider; *p != NULL; p++)
+ OSSL_PROVIDER_unload(*p);
+ OSSL_LIB_CTX_free(multi_libctx);
+ multi_intialise();
+}
+
+static int thread_setup_libctx(int libctx, const char *providers[])
+{
+ size_t n;
+
+ if (libctx && !TEST_true(test_get_libctx(&multi_libctx, NULL, config_file,
+ NULL, NULL)))
+ return 0;
+
+ if (providers != NULL)
+ for (n = 0; providers[n] != NULL; n++)
+ if (!TEST_size_t_lt(n, MAXIMUM_PROVIDERS)
+ || !TEST_ptr(multi_provider[n] = OSSL_PROVIDER_load(multi_libctx,
+ providers[n]))) {
+ thead_teardown_libctx();
+ return 0;
+ }
+ return 1;
+}
+
+static int teardown_threads(void)
+{
+ size_t i;
+
+ for (i = 0; i < multi_num_threads; i++)
+ if (!TEST_true(wait_for_thread(multi_threads[i])))
+ return 0;
+ return 1;
+}
+
+static int start_threads(size_t n, void (*thread_func)(void))
+{
+ size_t i;
+
+ if (!TEST_size_t_le(multi_num_threads + n, MAXIMUM_THREADS))
+ return 0;
+
+ for (i = 0 ; i < n; i++)
+ if (!TEST_true(run_thread(multi_threads + multi_num_threads++, thread_func)))
+ return 0;
+ return 1;
+}
+
+/* Template multi-threaded test function */
+static int thread_run_test(void (*main_func)(void),
+ size_t num_threads, void (*thread_func)(void),
+ int libctx, const char *providers[])
+{
+ int testresult = 0;
+
+ multi_intialise();
+ if (!thread_setup_libctx(libctx, providers)
+ || !start_threads(num_threads, thread_func))
+ goto err;
+
+ if (main_func != NULL)
+ main_func();
+
+ if (!teardown_threads()
+ || !TEST_true(multi_success))
+ goto err;
+ testresult = 1;
+ err:
+ thead_teardown_libctx();
+ return testresult;
+}
+
+static void thread_general_worker(void)
+{
+ EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
+ EVP_MD *md = EVP_MD_fetch(multi_libctx, "SHA2-256", NULL);
+ EVP_CIPHER_CTX *cipherctx = EVP_CIPHER_CTX_new();
+ EVP_CIPHER *ciph = EVP_CIPHER_fetch(multi_libctx, "AES-128-CBC", NULL);
+ const char *message = "Hello World";
+ size_t messlen = strlen(message);
+ /* Should be big enough for encryption output too */
+ unsigned char out[EVP_MAX_MD_SIZE];
+ const unsigned char key[AES_BLOCK_SIZE] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+ 0x0c, 0x0d, 0x0e, 0x0f
+ };
+ const unsigned char iv[AES_BLOCK_SIZE] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+ 0x0c, 0x0d, 0x0e, 0x0f
+ };
+ unsigned int mdoutl;
+ int ciphoutl;
+ EVP_PKEY *pkey = NULL;
+ int testresult = 0;
+ int i, isfips;
+
+ isfips = OSSL_PROVIDER_available(multi_libctx, "fips");
+
+ if (!TEST_ptr(mdctx)
+ || !TEST_ptr(md)
+ || !TEST_ptr(cipherctx)
+ || !TEST_ptr(ciph))
+ goto err;
+
+ /* Do some work */
+ for (i = 0; i < 5; i++) {
+ if (!TEST_true(EVP_DigestInit_ex(mdctx, md, NULL))
+ || !TEST_true(EVP_DigestUpdate(mdctx, message, messlen))
+ || !TEST_true(EVP_DigestFinal(mdctx, out, &mdoutl)))
+ goto err;
+ }
+ for (i = 0; i < 5; i++) {
+ if (!TEST_true(EVP_EncryptInit_ex(cipherctx, ciph, NULL, key, iv))
+ || !TEST_true(EVP_EncryptUpdate(cipherctx, out, &ciphoutl,
+ (unsigned char *)message,
+ messlen))
+ || !TEST_true(EVP_EncryptFinal(cipherctx, out, &ciphoutl)))
+ goto err;
+ }
+
+ /*
+ * We want the test to run quickly - not securely.
+ * Therefore we use an insecure bit length where we can (512).
+ * In the FIPS module though we must use a longer length.
+ */
+ pkey = EVP_PKEY_Q_keygen(multi_libctx, NULL, "RSA", isfips ? 2048 : 512);
+ if (!TEST_ptr(pkey))
+ goto err;
+
+ testresult = 1;
+ err:
+ EVP_MD_CTX_free(mdctx);
+ EVP_MD_free(md);
+ EVP_CIPHER_CTX_free(cipherctx);
+ EVP_CIPHER_free(ciph);
+ EVP_PKEY_free(pkey);
+ if (!testresult)
+ multi_success = 0;
+}
+
+static void thread_multi_simple_fetch(void)
+{
+ EVP_MD *md = EVP_MD_fetch(multi_libctx, "SHA2-256", NULL);
+
+ if (md != NULL)
+ EVP_MD_free(md);
+ else
+ multi_success = 0;
+}
+
+static EVP_PKEY *shared_evp_pkey = NULL;
+
+static void thread_shared_evp_pkey(void)
+{
+ char *msg = "Hello World";
+ unsigned char ctbuf[256];
+ unsigned char ptbuf[256];
+ size_t ptlen, ctlen = sizeof(ctbuf);
+ EVP_PKEY_CTX *ctx = NULL;
+ int success = 0;
+ int i;
+
+ for (i = 0; i < 1 + do_fips; i++) {
+ if (i > 0)
+ EVP_PKEY_CTX_free(ctx);
+ ctx = EVP_PKEY_CTX_new_from_pkey(multi_libctx, shared_evp_pkey,
+ i == 0 ? "provider=default"
+ : "provider=fips");
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ if (!TEST_int_ge(EVP_PKEY_encrypt_init(ctx), 0)
+ || !TEST_int_ge(EVP_PKEY_encrypt(ctx, ctbuf, &ctlen,
+ (unsigned char *)msg, strlen(msg)),
+ 0))
+ goto err;
+
+ EVP_PKEY_CTX_free(ctx);
+ ctx = EVP_PKEY_CTX_new_from_pkey(multi_libctx, shared_evp_pkey, NULL);
+
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ ptlen = sizeof(ptbuf);
+ if (!TEST_int_ge(EVP_PKEY_decrypt_init(ctx), 0)
+ || !TEST_int_gt(EVP_PKEY_decrypt(ctx, ptbuf, &ptlen, ctbuf, ctlen),
+ 0)
+ || !TEST_mem_eq(msg, strlen(msg), ptbuf, ptlen))
+ goto err;
+ }
+
+ success = 1;
+
+ err:
+ EVP_PKEY_CTX_free(ctx);
+ if (!success)
+ multi_success = 0;
+}
+
+static void thread_downgrade_shared_evp_pkey(void)
+{
+#ifndef OPENSSL_NO_DEPRECATED_3_0
+ /*
+ * This test is only relevant for deprecated functions that perform
+ * downgrading
+ */
+ if (EVP_PKEY_get0_RSA(shared_evp_pkey) == NULL)
+ multi_success = 0;
+#else
+ /* Shouldn't ever get here */
+ multi_success = 0;
+#endif
+}
+
+static void thread_provider_load_unload(void)
+{
+ OSSL_PROVIDER *deflt = OSSL_PROVIDER_load(multi_libctx, "default");
+
+ if (!TEST_ptr(deflt)
+ || !TEST_true(OSSL_PROVIDER_available(multi_libctx, "default")))
+ multi_success = 0;
+
+ OSSL_PROVIDER_unload(deflt);
+}
+
+/*
+ * Do work in multiple worker threads at the same time.
+ * Test 0: General worker, using the default provider
+ * Test 1: General worker, using the fips provider
+ * Test 2: Simple fetch worker
+ * Test 3: Worker downgrading a shared EVP_PKEY
+ * Test 4: Worker using a shared EVP_PKEY
+ * Test 5: Worker loading and unloading a provider
+ */
+static int test_multi(int idx)
+{
+ thread_t thread1, thread2;
+ int testresult = 0;
+ OSSL_PROVIDER *prov = NULL, *prov2 = NULL;
+ void (*worker)(void) = NULL;
+ void (*worker2)(void) = NULL;
+ EVP_MD *sha256 = NULL;
+
+ if (idx == 1 && !do_fips)
+ return TEST_skip("FIPS not supported");
+
+#ifdef OPENSSL_NO_DEPRECATED_3_0
+ if (idx == 3)
+ return TEST_skip("Skipping tests for deprected functions");
+#endif
+
+ multi_success = 1;
+ if (!TEST_true(test_get_libctx(&multi_libctx, NULL, config_file,
+ NULL, NULL)))
+ return 0;
+
+ prov = OSSL_PROVIDER_load(multi_libctx, (idx == 1) ? "fips" : "default");
+ if (!TEST_ptr(prov))
+ goto err;
+
+ switch (idx) {
+ case 0:
+ case 1:
+ worker = thread_general_worker;
+ break;
+ case 2:
+ worker = thread_multi_simple_fetch;
+ break;
+ case 3:
+ worker2 = thread_downgrade_shared_evp_pkey;
+ /* fall through */
+ case 4:
+ /*
+ * If available we have both the default and fips providers for this
+ * test
+ */
+ if (do_fips
+ && !TEST_ptr(prov2 = OSSL_PROVIDER_load(multi_libctx, "fips")))
+ goto err;
+ if (!TEST_ptr(shared_evp_pkey = load_pkey_pem(privkey, multi_libctx)))
+ goto err;
+ worker = thread_shared_evp_pkey;
+ break;
+ case 5:
+ /*
+ * We ensure we get an md from the default provider, and then unload the
+ * provider. This ensures the provider remains around but in a
+ * deactivated state.
+ */
+ sha256 = EVP_MD_fetch(multi_libctx, "SHA2-256", NULL);
+ OSSL_PROVIDER_unload(prov);
+ prov = NULL;
+ worker = thread_provider_load_unload;
+ break;
+ default:
+ TEST_error("Invalid test index");
+ goto err;
+ }
+ if (worker2 == NULL)
+ worker2 = worker;
+
+ if (!TEST_true(run_thread(&thread1, worker))
+ || !TEST_true(run_thread(&thread2, worker2)))
+ goto err;
+
+ worker();
+
+ testresult = 1;
+ /*
+ * Don't combine these into one if statement; must wait for both threads.
+ */
+ if (!TEST_true(wait_for_thread(thread1)))
+ testresult = 0;
+ if (!TEST_true(wait_for_thread(thread2)))
+ testresult = 0;
+ if (!TEST_true(multi_success))
+ testresult = 0;
+
+ err:
+ EVP_MD_free(sha256);
+ OSSL_PROVIDER_unload(prov);
+ OSSL_PROVIDER_unload(prov2);
+ OSSL_LIB_CTX_free(multi_libctx);
+ EVP_PKEY_free(shared_evp_pkey);
+ shared_evp_pkey = NULL;
+ multi_libctx = NULL;
+ return testresult;
+}
+
+static char *multi_load_provider = "legacy";
+/*
+ * This test attempts to load several providers at the same time, and if
+ * run with a thread sanitizer, should crash if the core provider code
+ * doesn't synchronize well enough.
+ */
+#define MULTI_LOAD_THREADS 10
+static void test_multi_load_worker(void)
+{
+ OSSL_PROVIDER *prov;
+
+ if (!TEST_ptr(prov = OSSL_PROVIDER_load(NULL, multi_load_provider))
+ || !TEST_true(OSSL_PROVIDER_unload(prov)))
+ multi_success = 0;
+}
+
+static int test_multi_default(void)
+{
+ thread_t thread1, thread2;
+ int testresult = 0;
+ OSSL_PROVIDER *prov = NULL;
+
+ /* Avoid running this test twice */
+ if (multidefault_run) {
+ TEST_skip("multi default test already run");
+ return 1;
+ }
+ multidefault_run = 1;
+
+ multi_success = 1;
+ multi_libctx = NULL;
+ prov = OSSL_PROVIDER_load(multi_libctx, "default");
+ if (!TEST_ptr(prov))
+ goto err;
+
+ if (!TEST_true(run_thread(&thread1, thread_multi_simple_fetch))
+ || !TEST_true(run_thread(&thread2, thread_multi_simple_fetch)))
+ goto err;
+
+ thread_multi_simple_fetch();
+
+ if (!TEST_true(wait_for_thread(thread1))
+ || !TEST_true(wait_for_thread(thread2))
+ || !TEST_true(multi_success))
+ goto err;
+
+ testresult = 1;
+
+ err:
+ OSSL_PROVIDER_unload(prov);
+ return testresult;
+}
+
+static int test_multi_load(void)
+{
+ thread_t threads[MULTI_LOAD_THREADS];
+ int i, res = 1;
+ OSSL_PROVIDER *prov;
+
+ /* The multidefault test must run prior to this test */
+ if (!multidefault_run) {
+ TEST_info("Running multi default test first");
+ res = test_multi_default();
+ }
+
+ /*
+ * We use the legacy provider in test_multi_load_worker because it uses a
+ * child libctx that might hit more codepaths that might be sensitive to
+ * threading issues. But in a no-legacy build that won't be loadable so
+ * we use the default provider instead.
+ */
+ prov = OSSL_PROVIDER_load(NULL, "legacy");
+ if (prov == NULL) {
+ TEST_info("Cannot load legacy provider - assuming this is a no-legacy build");
+ multi_load_provider = "default";
+ }
+ OSSL_PROVIDER_unload(prov);
+
+ multi_success = 1;
+ for (i = 0; i < MULTI_LOAD_THREADS; i++)
+ (void)TEST_true(run_thread(&threads[i], test_multi_load_worker));
+
+ for (i = 0; i < MULTI_LOAD_THREADS; i++)
+ (void)TEST_true(wait_for_thread(threads[i]));
+
+ return res && multi_success;
+}
+
+static void test_lib_ctx_load_config_worker(void)
+{
+ if (!TEST_int_eq(OSSL_LIB_CTX_load_config(multi_libctx, config_file), 1))
+ multi_success = 0;
+}
+
+static int test_lib_ctx_load_config(void)
+{
+ return thread_run_test(&test_lib_ctx_load_config_worker,
+ MAXIMUM_THREADS, &test_lib_ctx_load_config_worker,
+ 1, default_provider);
+}
+
+typedef enum OPTION_choice {
+ OPT_ERR = -1,
+ OPT_EOF = 0,
+ OPT_FIPS, OPT_CONFIG_FILE,
+ OPT_TEST_ENUM
+} OPTION_CHOICE;
+
+const OPTIONS *test_get_options(void)
+{
+ static const OPTIONS options[] = {
+ OPT_TEST_OPTIONS_DEFAULT_USAGE,
+ { "fips", OPT_FIPS, '-', "Test the FIPS provider" },
+ { "config", OPT_CONFIG_FILE, '<',
+ "The configuration file to use for the libctx" },
+ { NULL }
+ };
+ return options;
+}
+
+int setup_tests(void)
+{
+ OPTION_CHOICE o;
+ char *datadir;
+
+ while ((o = opt_next()) != OPT_EOF) {
+ switch (o) {
+ case OPT_FIPS:
+ do_fips = 1;
+ break;
+ case OPT_CONFIG_FILE:
+ config_file = opt_arg();
+ break;
+ case OPT_TEST_CASES:
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ if (!TEST_ptr(datadir = test_get_argument(0)))
+ return 0;
+
+ privkey = test_mk_file_path(datadir, "rsakey.pem");
+ if (!TEST_ptr(privkey))
+ return 0;
+
+ /* Keep first to validate auto creation of default library context */
+ ADD_TEST(test_multi_default);
+
+ ADD_TEST(test_lock);
+ ADD_TEST(test_once);
+ ADD_TEST(test_thread_local);
+ ADD_TEST(test_atomic);
+ ADD_TEST(test_multi_load);
+ ADD_ALL_TESTS(test_multi, 6);
+ ADD_TEST(test_lib_ctx_load_config);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ OPENSSL_free(privkey);
+}
diff --git a/test/threadstest.h b/test/threadstest.h
new file mode 100644
index 000000000000..8bdedd7052ac
--- /dev/null
+++ b/test/threadstest.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#if defined(_WIN32)
+# include <windows.h>
+#endif
+
+#include <string.h>
+#include "testutil.h"
+
+#if !defined(OPENSSL_THREADS) || defined(CRYPTO_TDEBUG)
+
+typedef unsigned int thread_t;
+
+static int run_thread(thread_t *t, void (*f)(void))
+{
+ f();
+ return 1;
+}
+
+static int wait_for_thread(thread_t thread)
+{
+ return 1;
+}
+
+#elif defined(OPENSSL_SYS_WINDOWS)
+
+typedef HANDLE thread_t;
+
+static DWORD WINAPI thread_run(LPVOID arg)
+{
+ void (*f)(void);
+
+ *(void **) (&f) = arg;
+
+ f();
+ return 0;
+}
+
+static int run_thread(thread_t *t, void (*f)(void))
+{
+ *t = CreateThread(NULL, 0, thread_run, *(void **) &f, 0, NULL);
+ return *t != NULL;
+}
+
+static int wait_for_thread(thread_t thread)
+{
+ return WaitForSingleObject(thread, INFINITE) == 0;
+}
+
+#else
+
+typedef pthread_t thread_t;
+
+static void *thread_run(void *arg)
+{
+ void (*f)(void);
+
+ *(void **) (&f) = arg;
+
+ f();
+ return NULL;
+}
+
+static int run_thread(thread_t *t, void (*f)(void))
+{
+ return pthread_create(t, NULL, thread_run, *(void **) &f) == 0;
+}
+
+static int wait_for_thread(thread_t thread)
+{
+ return pthread_join(thread, NULL) == 0;
+}
+
+#endif
+
diff --git a/test/threadstest_fips.c b/test/threadstest_fips.c
new file mode 100644
index 000000000000..b38221d4ed30
--- /dev/null
+++ b/test/threadstest_fips.c
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#if defined(_WIN32)
+# include <windows.h>
+#endif
+
+#include "testutil.h"
+#include "threadstest.h"
+
+static int success;
+
+static void thread_fips_rand_fetch(void)
+{
+ EVP_MD *md;
+
+ if (!TEST_true(md = EVP_MD_fetch(NULL, "SHA2-256", NULL)))
+ success = 0;
+ EVP_MD_free(md);
+}
+
+static int test_fips_rand_leak(void)
+{
+ thread_t thread;
+
+ success = 1;
+
+ if (!TEST_true(run_thread(&thread, thread_fips_rand_fetch)))
+ return 0;
+ if (!TEST_true(wait_for_thread(thread)))
+ return 0;
+ return TEST_true(success);
+}
+
+int setup_tests(void)
+{
+ /*
+ * This test MUST be run first. Once the default library context is set
+ * up, this test will always pass.
+ */
+ ADD_TEST(test_fips_rand_leak);
+ return 1;
+}
diff --git a/test/time_offset_test.c b/test/time_offset_test.c
new file mode 100644
index 000000000000..7da75fe9332e
--- /dev/null
+++ b/test/time_offset_test.c
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2017-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
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* time_t/offset (+/-XXXX) tests for ASN1 and X509 */
+
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#include <openssl/asn1.h>
+#include <openssl/x509.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+
+typedef struct {
+ const char *data;
+ int time_result;
+ int type;
+} TESTDATA;
+
+
+/**********************************************************************
+ *
+ * Test driver
+ *
+ ***/
+
+static TESTDATA tests[] = {
+ { "20001201000000Z", 0, V_ASN1_GENERALIZEDTIME },
+ { "20001201010000+0100", 0, V_ASN1_GENERALIZEDTIME },
+ { "20001201050000+0500", 0, V_ASN1_GENERALIZEDTIME },
+ { "20001130230000-0100", 0, V_ASN1_GENERALIZEDTIME },
+ { "20001130190000-0500", 0, V_ASN1_GENERALIZEDTIME },
+ { "20001130190001-0500", 1, V_ASN1_GENERALIZEDTIME }, /* +1 second */
+ { "20001130185959-0500", -1, V_ASN1_GENERALIZEDTIME }, /* -1 second */
+ { "001201000000Z", 0, V_ASN1_UTCTIME },
+ { "001201010000+0100", 0, V_ASN1_UTCTIME },
+ { "001201050000+0500", 0, V_ASN1_UTCTIME },
+ { "001130230000-0100", 0, V_ASN1_UTCTIME },
+ { "001130190000-0500", 0, V_ASN1_UTCTIME },
+ { "001201000000-0000", 0, V_ASN1_UTCTIME },
+ { "001201000001-0000", 1, V_ASN1_UTCTIME }, /* +1 second */
+ { "001130235959-0000", -1, V_ASN1_UTCTIME }, /* -1 second */
+ { "20001201000000+0000", 0, V_ASN1_GENERALIZEDTIME },
+ { "20001201000000+0100", -1, V_ASN1_GENERALIZEDTIME },
+ { "001201000000+0100", -1, V_ASN1_UTCTIME },
+ { "20001201000000-0100", 1, V_ASN1_GENERALIZEDTIME },
+ { "001201000000-0100", 1, V_ASN1_UTCTIME },
+ { "20001201123400+1234", 0, V_ASN1_GENERALIZEDTIME },
+ { "20001130112600-1234", 0, V_ASN1_GENERALIZEDTIME },
+};
+
+static time_t the_time = 975628800;
+static ASN1_TIME the_asn1_time = {
+ 15,
+ V_ASN1_GENERALIZEDTIME,
+ (unsigned char*)"20001201000000Z",
+ 0
+};
+
+static int test_offset(int idx)
+{
+ ASN1_TIME at;
+ const TESTDATA *testdata = &tests[idx];
+ int ret = -2;
+ int day, sec;
+
+ at.data = (unsigned char*)testdata->data;
+ at.length = strlen(testdata->data);
+ at.type = testdata->type;
+ at.flags = 0;
+
+ if (!TEST_true(ASN1_TIME_diff(&day, &sec, &the_asn1_time, &at))) {
+ TEST_info("ASN1_TIME_diff() failed for %s\n", at.data);
+ return 0;
+ }
+ if (day > 0)
+ ret = 1;
+ else if (day < 0)
+ ret = -1;
+ else if (sec > 0)
+ ret = 1;
+ else if (sec < 0)
+ ret = -1;
+ else
+ ret = 0;
+
+ if (!TEST_int_eq(testdata->time_result, ret)) {
+ TEST_info("ASN1_TIME_diff() test failed for %s day=%d sec=%d\n", at.data, day, sec);
+ return 0;
+ }
+
+ ret = ASN1_TIME_cmp_time_t(&at, the_time);
+
+ if (!TEST_int_eq(testdata->time_result, ret)) {
+ TEST_info("ASN1_UTCTIME_cmp_time_t() test failed for %s\n", at.data);
+ return 0;
+ }
+
+ return 1;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_offset, OSSL_NELEM(tests));
+ return 1;
+}
diff --git a/test/tls-provider.c b/test/tls-provider.c
new file mode 100644
index 000000000000..5c44b6812e81
--- /dev/null
+++ b/test/tls-provider.c
@@ -0,0 +1,857 @@
+/*
+ * Copyright 2019-2022 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_names.h>
+#include <openssl/core_dispatch.h>
+#include <openssl/rand.h>
+#include <openssl/params.h>
+/* For TLS1_3_VERSION */
+#include <openssl/ssl.h>
+#include "internal/nelem.h"
+
+static OSSL_FUNC_keymgmt_import_fn xor_import;
+static OSSL_FUNC_keymgmt_import_types_fn xor_import_types;
+static OSSL_FUNC_keymgmt_export_fn xor_export;
+static OSSL_FUNC_keymgmt_export_types_fn xor_export_types;
+
+int tls_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out,
+ void **provctx);
+
+#define XOR_KEY_SIZE 32
+
+/*
+ * Top secret. This algorithm only works if no one knows what this number is.
+ * Please don't tell anyone what it is.
+ *
+ * This algorithm is for testing only - don't really use it!
+ */
+static const unsigned char private_constant[XOR_KEY_SIZE] = {
+ 0xd3, 0x6b, 0x54, 0xec, 0x5b, 0xac, 0x89, 0x96, 0x8c, 0x2c, 0x66, 0xa5,
+ 0x67, 0x0d, 0xe3, 0xdd, 0x43, 0x69, 0xbc, 0x83, 0x3d, 0x60, 0xc7, 0xb8,
+ 0x2b, 0x1c, 0x5a, 0xfd, 0xb5, 0xcd, 0xd0, 0xf8
+};
+
+typedef struct xorkey_st {
+ unsigned char privkey[XOR_KEY_SIZE];
+ unsigned char pubkey[XOR_KEY_SIZE];
+ int hasprivkey;
+ int haspubkey;
+} XORKEY;
+
+
+/* Key Management for the dummy XOR KEX and KEM algorithms */
+
+static OSSL_FUNC_keymgmt_new_fn xor_newdata;
+static OSSL_FUNC_keymgmt_free_fn xor_freedata;
+static OSSL_FUNC_keymgmt_has_fn xor_has;
+static OSSL_FUNC_keymgmt_dup_fn xor_dup;
+static OSSL_FUNC_keymgmt_gen_init_fn xor_gen_init;
+static OSSL_FUNC_keymgmt_gen_set_params_fn xor_gen_set_params;
+static OSSL_FUNC_keymgmt_gen_settable_params_fn xor_gen_settable_params;
+static OSSL_FUNC_keymgmt_gen_fn xor_gen;
+static OSSL_FUNC_keymgmt_gen_cleanup_fn xor_gen_cleanup;
+static OSSL_FUNC_keymgmt_get_params_fn xor_get_params;
+static OSSL_FUNC_keymgmt_gettable_params_fn xor_gettable_params;
+static OSSL_FUNC_keymgmt_set_params_fn xor_set_params;
+static OSSL_FUNC_keymgmt_settable_params_fn xor_settable_params;
+
+/*
+ * Dummy "XOR" Key Exchange algorithm. We just xor the private and public keys
+ * together. Don't use this!
+ */
+
+static OSSL_FUNC_keyexch_newctx_fn xor_newctx;
+static OSSL_FUNC_keyexch_init_fn xor_init;
+static OSSL_FUNC_keyexch_set_peer_fn xor_set_peer;
+static OSSL_FUNC_keyexch_derive_fn xor_derive;
+static OSSL_FUNC_keyexch_freectx_fn xor_freectx;
+static OSSL_FUNC_keyexch_dupctx_fn xor_dupctx;
+
+/*
+ * Dummy "XOR" Key Encapsulation Method. We just build a KEM over the xor KEX.
+ * Don't use this!
+ */
+
+static OSSL_FUNC_kem_newctx_fn xor_newctx;
+static OSSL_FUNC_kem_freectx_fn xor_freectx;
+static OSSL_FUNC_kem_dupctx_fn xor_dupctx;
+static OSSL_FUNC_kem_encapsulate_init_fn xor_init;
+static OSSL_FUNC_kem_encapsulate_fn xor_encapsulate;
+static OSSL_FUNC_kem_decapsulate_init_fn xor_init;
+static OSSL_FUNC_kem_decapsulate_fn xor_decapsulate;
+
+
+/*
+ * We define 2 dummy TLS groups called "xorgroup" and "xorkemgroup" for test
+ * purposes
+ */
+struct tls_group_st {
+ unsigned int group_id; /* for "tls-group-id", see provider-base(7) */
+ unsigned int secbits;
+ unsigned int mintls;
+ unsigned int maxtls;
+ unsigned int mindtls;
+ unsigned int maxdtls;
+ unsigned int is_kem; /* boolean */
+};
+
+#define XORGROUP_NAME "xorgroup"
+#define XORGROUP_NAME_INTERNAL "xorgroup-int"
+static struct tls_group_st xor_group = {
+ 0, /* group_id, set by randomize_tls_group_id() */
+ 128, /* secbits */
+ TLS1_3_VERSION, /* mintls */
+ 0, /* maxtls */
+ -1, /* mindtls */
+ -1, /* maxdtls */
+ 0 /* is_kem */
+};
+
+#define XORKEMGROUP_NAME "xorkemgroup"
+#define XORKEMGROUP_NAME_INTERNAL "xorkemgroup-int"
+static struct tls_group_st xor_kemgroup = {
+ 0, /* group_id, set by randomize_tls_group_id() */
+ 128, /* secbits */
+ TLS1_3_VERSION, /* mintls */
+ 0, /* maxtls */
+ -1, /* mindtls */
+ -1, /* maxdtls */
+ 1 /* is_kem */
+};
+
+#define ALGORITHM "XOR"
+
+static const OSSL_PARAM xor_group_params[] = {
+ OSSL_PARAM_utf8_string(OSSL_CAPABILITY_TLS_GROUP_NAME,
+ XORGROUP_NAME, sizeof(XORGROUP_NAME)),
+ OSSL_PARAM_utf8_string(OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL,
+ XORGROUP_NAME_INTERNAL,
+ sizeof(XORGROUP_NAME_INTERNAL)),
+ OSSL_PARAM_utf8_string(OSSL_CAPABILITY_TLS_GROUP_ALG, ALGORITHM,
+ sizeof(ALGORITHM)),
+ OSSL_PARAM_uint(OSSL_CAPABILITY_TLS_GROUP_ID, &xor_group.group_id),
+ OSSL_PARAM_uint(OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS,
+ &xor_group.secbits),
+ OSSL_PARAM_int(OSSL_CAPABILITY_TLS_GROUP_MIN_TLS, &xor_group.mintls),
+ OSSL_PARAM_int(OSSL_CAPABILITY_TLS_GROUP_MAX_TLS, &xor_group.maxtls),
+ OSSL_PARAM_int(OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS, &xor_group.mindtls),
+ OSSL_PARAM_int(OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS, &xor_group.maxdtls),
+ OSSL_PARAM_uint(OSSL_CAPABILITY_TLS_GROUP_IS_KEM, &xor_group.is_kem),
+ OSSL_PARAM_END
+};
+
+static const OSSL_PARAM xor_kemgroup_params[] = {
+ OSSL_PARAM_utf8_string(OSSL_CAPABILITY_TLS_GROUP_NAME,
+ XORKEMGROUP_NAME, sizeof(XORKEMGROUP_NAME)),
+ OSSL_PARAM_utf8_string(OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL,
+ XORKEMGROUP_NAME_INTERNAL,
+ sizeof(XORKEMGROUP_NAME_INTERNAL)),
+ OSSL_PARAM_utf8_string(OSSL_CAPABILITY_TLS_GROUP_ALG, ALGORITHM,
+ sizeof(ALGORITHM)),
+ OSSL_PARAM_uint(OSSL_CAPABILITY_TLS_GROUP_ID, &xor_kemgroup.group_id),
+ OSSL_PARAM_uint(OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS,
+ &xor_kemgroup.secbits),
+ OSSL_PARAM_int(OSSL_CAPABILITY_TLS_GROUP_MIN_TLS, &xor_kemgroup.mintls),
+ OSSL_PARAM_int(OSSL_CAPABILITY_TLS_GROUP_MAX_TLS, &xor_kemgroup.maxtls),
+ OSSL_PARAM_int(OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS, &xor_kemgroup.mindtls),
+ OSSL_PARAM_int(OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS, &xor_kemgroup.maxdtls),
+ OSSL_PARAM_uint(OSSL_CAPABILITY_TLS_GROUP_IS_KEM, &xor_kemgroup.is_kem),
+ OSSL_PARAM_END
+};
+
+#define NUM_DUMMY_GROUPS 50
+static char *dummy_group_names[NUM_DUMMY_GROUPS];
+
+static int tls_prov_get_capabilities(void *provctx, const char *capability,
+ OSSL_CALLBACK *cb, void *arg)
+{
+ int ret;
+ int i;
+ const char *dummy_base = "dummy";
+ const size_t dummy_name_max_size = strlen(dummy_base) + 3;
+
+ if (strcmp(capability, "TLS-GROUP") != 0) {
+ /* We don't support this capability */
+ return 0;
+ }
+
+ /* Register our 2 groups */
+ ret = cb(xor_group_params, arg);
+ ret &= cb(xor_kemgroup_params, arg);
+
+ /*
+ * Now register some dummy groups > GROUPLIST_INCREMENT (== 40) as defined
+ * in ssl/t1_lib.c, to make sure we exercise the code paths for registering
+ * large numbers of groups.
+ */
+
+ for (i = 0; i < NUM_DUMMY_GROUPS; i++) {
+ OSSL_PARAM dummygroup[OSSL_NELEM(xor_group_params)];
+
+ memcpy(dummygroup, xor_group_params, sizeof(xor_group_params));
+
+ /* Give the dummy group a unique name */
+ if (dummy_group_names[i] == NULL) {
+ dummy_group_names[i] = OPENSSL_zalloc(dummy_name_max_size);
+ if (dummy_group_names[i] == NULL)
+ return 0;
+ BIO_snprintf(dummy_group_names[i],
+ dummy_name_max_size,
+ "%s%d", dummy_base, i);
+ }
+ dummygroup[0].data = dummy_group_names[i];
+ dummygroup[0].data_size = strlen(dummy_group_names[i]) + 1;
+ ret &= cb(dummygroup, arg);
+ }
+
+ return ret;
+}
+
+/*
+ * Dummy "XOR" Key Exchange algorithm. We just xor the private and public keys
+ * together. Don't use this!
+ */
+
+typedef struct {
+ XORKEY *key;
+ XORKEY *peerkey;
+ void *provctx;
+} PROV_XOR_CTX;
+
+static void *xor_newctx(void *provctx)
+{
+ PROV_XOR_CTX *pxorctx = OPENSSL_zalloc(sizeof(PROV_XOR_CTX));
+
+ if (pxorctx == NULL)
+ return NULL;
+
+ pxorctx->provctx = provctx;
+
+ return pxorctx;
+}
+
+static int xor_init(void *vpxorctx, void *vkey,
+ ossl_unused const OSSL_PARAM params[])
+{
+ PROV_XOR_CTX *pxorctx = (PROV_XOR_CTX *)vpxorctx;
+
+ if (pxorctx == NULL || vkey == NULL)
+ return 0;
+ pxorctx->key = vkey;
+ return 1;
+}
+
+static int xor_set_peer(void *vpxorctx, void *vpeerkey)
+{
+ PROV_XOR_CTX *pxorctx = (PROV_XOR_CTX *)vpxorctx;
+
+ if (pxorctx == NULL || vpeerkey == NULL)
+ return 0;
+ pxorctx->peerkey = vpeerkey;
+ return 1;
+}
+
+static int xor_derive(void *vpxorctx, unsigned char *secret, size_t *secretlen,
+ size_t outlen)
+{
+ PROV_XOR_CTX *pxorctx = (PROV_XOR_CTX *)vpxorctx;
+ int i;
+
+ if (pxorctx->key == NULL || pxorctx->peerkey == NULL)
+ return 0;
+
+ *secretlen = XOR_KEY_SIZE;
+ if (secret == NULL)
+ return 1;
+
+ if (outlen < XOR_KEY_SIZE)
+ return 0;
+
+ for (i = 0; i < XOR_KEY_SIZE; i++)
+ secret[i] = pxorctx->key->privkey[i] ^ pxorctx->peerkey->pubkey[i];
+
+ return 1;
+}
+
+static void xor_freectx(void *pxorctx)
+{
+ OPENSSL_free(pxorctx);
+}
+
+static void *xor_dupctx(void *vpxorctx)
+{
+ PROV_XOR_CTX *srcctx = (PROV_XOR_CTX *)vpxorctx;
+ PROV_XOR_CTX *dstctx;
+
+ dstctx = OPENSSL_zalloc(sizeof(*srcctx));
+ if (dstctx == NULL)
+ return NULL;
+
+ *dstctx = *srcctx;
+
+ return dstctx;
+}
+
+static const OSSL_DISPATCH xor_keyexch_functions[] = {
+ { OSSL_FUNC_KEYEXCH_NEWCTX, (void (*)(void))xor_newctx },
+ { OSSL_FUNC_KEYEXCH_INIT, (void (*)(void))xor_init },
+ { OSSL_FUNC_KEYEXCH_DERIVE, (void (*)(void))xor_derive },
+ { OSSL_FUNC_KEYEXCH_SET_PEER, (void (*)(void))xor_set_peer },
+ { OSSL_FUNC_KEYEXCH_FREECTX, (void (*)(void))xor_freectx },
+ { OSSL_FUNC_KEYEXCH_DUPCTX, (void (*)(void))xor_dupctx },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM tls_prov_keyexch[] = {
+ /*
+ * Obviously this is not FIPS approved, but in order to test in conjuction
+ * with the FIPS provider we pretend that it is.
+ */
+ { "XOR", "provider=tls-provider,fips=yes", xor_keyexch_functions },
+ { NULL, NULL, NULL }
+};
+
+/*
+ * Dummy "XOR" Key Encapsulation Method. We just build a KEM over the xor KEX.
+ * Don't use this!
+ */
+
+static int xor_encapsulate(void *vpxorctx,
+ unsigned char *ct, size_t *ctlen,
+ unsigned char *ss, size_t *sslen)
+{
+ /*
+ * We are building this around a KEX:
+ *
+ * 1. we generate ephemeral keypair
+ * 2. we encode our ephemeral pubkey as the outgoing ct
+ * 3. we derive using our ephemeral privkey in combination with the peer
+ * pubkey from the ctx; the result is our ss.
+ */
+ int rv = 0;
+ void *genctx = NULL, *derivectx = NULL;
+ XORKEY *ourkey = NULL;
+ PROV_XOR_CTX *pxorctx = vpxorctx;
+
+ if (ct == NULL || ss == NULL) {
+ /* Just return sizes */
+
+ if (ctlen == NULL && sslen == NULL)
+ return 0;
+ if (ctlen != NULL)
+ *ctlen = XOR_KEY_SIZE;
+ if (sslen != NULL)
+ *sslen = XOR_KEY_SIZE;
+ return 1;
+ }
+
+ /* 1. Generate keypair */
+ genctx = xor_gen_init(pxorctx->provctx, OSSL_KEYMGMT_SELECT_KEYPAIR, NULL);
+ if (genctx == NULL)
+ goto end;
+ ourkey = xor_gen(genctx, NULL, NULL);
+ if (ourkey == NULL)
+ goto end;
+
+ /* 2. Encode ephemeral pubkey as ct */
+ memcpy(ct, ourkey->pubkey, XOR_KEY_SIZE);
+ *ctlen = XOR_KEY_SIZE;
+
+ /* 3. Derive ss via KEX */
+ derivectx = xor_newctx(pxorctx->provctx);
+ if (derivectx == NULL
+ || !xor_init(derivectx, ourkey, NULL)
+ || !xor_set_peer(derivectx, pxorctx->key)
+ || !xor_derive(derivectx, ss, sslen, XOR_KEY_SIZE))
+ goto end;
+
+ rv = 1;
+
+ end:
+ xor_gen_cleanup(genctx);
+ xor_freedata(ourkey);
+ xor_freectx(derivectx);
+ return rv;
+}
+
+static int xor_decapsulate(void *vpxorctx,
+ unsigned char *ss, size_t *sslen,
+ const unsigned char *ct, size_t ctlen)
+{
+ /*
+ * We are building this around a KEX:
+ *
+ * - ct is our peer's pubkey
+ * - decapsulate is just derive.
+ */
+ int rv = 0;
+ void *derivectx = NULL;
+ XORKEY *peerkey = NULL;
+ PROV_XOR_CTX *pxorctx = vpxorctx;
+
+ if (ss == NULL) {
+ /* Just return size */
+ if (sslen == NULL)
+ return 0;
+ *sslen = XOR_KEY_SIZE;
+ return 1;
+ }
+
+ if (ctlen != XOR_KEY_SIZE)
+ return 0;
+ peerkey = xor_newdata(pxorctx->provctx);
+ if (peerkey == NULL)
+ goto end;
+ memcpy(peerkey->pubkey, ct, XOR_KEY_SIZE);
+
+ /* Derive ss via KEX */
+ derivectx = xor_newctx(pxorctx->provctx);
+ if (derivectx == NULL
+ || !xor_init(derivectx, pxorctx->key, NULL)
+ || !xor_set_peer(derivectx, peerkey)
+ || !xor_derive(derivectx, ss, sslen, XOR_KEY_SIZE))
+ goto end;
+
+ rv = 1;
+
+ end:
+ xor_freedata(peerkey);
+ xor_freectx(derivectx);
+ return rv;
+}
+
+static const OSSL_DISPATCH xor_kem_functions[] = {
+ { OSSL_FUNC_KEM_NEWCTX, (void (*)(void))xor_newctx },
+ { OSSL_FUNC_KEM_FREECTX, (void (*)(void))xor_freectx },
+ { OSSL_FUNC_KEM_DUPCTX, (void (*)(void))xor_dupctx },
+ { OSSL_FUNC_KEM_ENCAPSULATE_INIT, (void (*)(void))xor_init },
+ { OSSL_FUNC_KEM_ENCAPSULATE, (void (*)(void))xor_encapsulate },
+ { OSSL_FUNC_KEM_DECAPSULATE_INIT, (void (*)(void))xor_init },
+ { OSSL_FUNC_KEM_DECAPSULATE, (void (*)(void))xor_decapsulate },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM tls_prov_kem[] = {
+ /*
+ * Obviously this is not FIPS approved, but in order to test in conjuction
+ * with the FIPS provider we pretend that it is.
+ */
+ { "XOR", "provider=tls-provider,fips=yes", xor_kem_functions },
+ { NULL, NULL, NULL }
+};
+
+/* Key Management for the dummy XOR key exchange algorithm */
+
+static void *xor_newdata(void *provctx)
+{
+ return OPENSSL_zalloc(sizeof(XORKEY));
+}
+
+static void xor_freedata(void *keydata)
+{
+ OPENSSL_free(keydata);
+}
+
+static int xor_has(const void *vkey, int selection)
+{
+ const XORKEY *key = vkey;
+ int ok = 0;
+
+ if (key != NULL) {
+ ok = 1;
+
+ if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0)
+ ok = ok && key->haspubkey;
+ if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0)
+ ok = ok && key->hasprivkey;
+ }
+ return ok;
+}
+
+static void *xor_dup(const void *vfromkey, int selection)
+{
+ XORKEY *tokey = xor_newdata(NULL);
+ const XORKEY *fromkey = vfromkey;
+ int ok = 0;
+
+ if (tokey != NULL && fromkey != NULL) {
+ ok = 1;
+
+ if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0) {
+ if (fromkey->haspubkey) {
+ memcpy(tokey->pubkey, fromkey->pubkey, XOR_KEY_SIZE);
+ tokey->haspubkey = 1;
+ } else {
+ tokey->haspubkey = 0;
+ }
+ }
+ if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0) {
+ if (fromkey->hasprivkey) {
+ memcpy(tokey->privkey, fromkey->privkey, XOR_KEY_SIZE);
+ tokey->hasprivkey = 1;
+ } else {
+ tokey->hasprivkey = 0;
+ }
+ }
+ }
+ if (!ok) {
+ xor_freedata(tokey);
+ tokey = NULL;
+ }
+ return tokey;
+}
+
+static ossl_inline int xor_get_params(void *vkey, OSSL_PARAM params[])
+{
+ XORKEY *key = vkey;
+ OSSL_PARAM *p;
+
+ if ((p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_BITS)) != NULL
+ && !OSSL_PARAM_set_int(p, XOR_KEY_SIZE))
+ return 0;
+
+ if ((p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_SECURITY_BITS)) != NULL
+ && !OSSL_PARAM_set_int(p, xor_group.secbits))
+ return 0;
+
+ if ((p = OSSL_PARAM_locate(params,
+ OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY)) != NULL) {
+ if (p->data_type != OSSL_PARAM_OCTET_STRING)
+ return 0;
+ p->return_size = XOR_KEY_SIZE;
+ if (p->data != NULL && p->data_size >= XOR_KEY_SIZE)
+ memcpy(p->data, key->pubkey, XOR_KEY_SIZE);
+ }
+
+ return 1;
+}
+
+static const OSSL_PARAM xor_params[] = {
+ OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL),
+ OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL),
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0),
+ OSSL_PARAM_END
+};
+
+static const OSSL_PARAM *xor_gettable_params(void *provctx)
+{
+ return xor_params;
+}
+
+static int xor_set_params(void *vkey, const OSSL_PARAM params[])
+{
+ XORKEY *key = vkey;
+ const OSSL_PARAM *p;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY);
+ if (p != NULL) {
+ if (p->data_type != OSSL_PARAM_OCTET_STRING
+ || p->data_size != XOR_KEY_SIZE)
+ return 0;
+ memcpy(key->pubkey, p->data, XOR_KEY_SIZE);
+ key->haspubkey = 1;
+ }
+
+ return 1;
+}
+
+static const OSSL_PARAM xor_known_settable_params[] = {
+ OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY, NULL, 0),
+ OSSL_PARAM_END
+};
+
+static const OSSL_PARAM *xor_settable_params(void *provctx)
+{
+ return xor_known_settable_params;
+}
+
+struct xor_gen_ctx {
+ int selection;
+ OSSL_LIB_CTX *libctx;
+};
+
+static void *xor_gen_init(void *provctx, int selection,
+ const OSSL_PARAM params[])
+{
+ struct xor_gen_ctx *gctx = NULL;
+
+ if ((selection & (OSSL_KEYMGMT_SELECT_KEYPAIR
+ | OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS)) == 0)
+ return NULL;
+
+ if ((gctx = OPENSSL_zalloc(sizeof(*gctx))) != NULL)
+ gctx->selection = selection;
+
+ /* Our provctx is really just an OSSL_LIB_CTX */
+ gctx->libctx = (OSSL_LIB_CTX *)provctx;
+
+ if (!xor_gen_set_params(gctx, params)) {
+ OPENSSL_free(gctx);
+ return NULL;
+ }
+ return gctx;
+}
+
+static int xor_gen_set_params(void *genctx, const OSSL_PARAM params[])
+{
+ struct xor_gen_ctx *gctx = genctx;
+ const OSSL_PARAM *p;
+
+ if (gctx == NULL)
+ return 0;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_GROUP_NAME);
+ if (p != NULL) {
+ if (p->data_type != OSSL_PARAM_UTF8_STRING
+ || (strcmp(p->data, XORGROUP_NAME_INTERNAL) != 0
+ && strcmp(p->data, XORKEMGROUP_NAME_INTERNAL) != 0))
+ return 0;
+ }
+
+ return 1;
+}
+
+static const OSSL_PARAM *xor_gen_settable_params(ossl_unused void *genctx,
+ ossl_unused void *provctx)
+{
+ static OSSL_PARAM settable[] = {
+ OSSL_PARAM_utf8_string(OSSL_PKEY_PARAM_GROUP_NAME, NULL, 0),
+ OSSL_PARAM_END
+ };
+ return settable;
+}
+
+static void *xor_gen(void *genctx, OSSL_CALLBACK *osslcb, void *cbarg)
+{
+ struct xor_gen_ctx *gctx = genctx;
+ XORKEY *key = OPENSSL_zalloc(sizeof(*key));
+ size_t i;
+
+ if (key == NULL)
+ return NULL;
+
+ if ((gctx->selection & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0) {
+ if (RAND_bytes_ex(gctx->libctx, key->privkey, XOR_KEY_SIZE, 0) <= 0) {
+ OPENSSL_free(key);
+ return NULL;
+ }
+ for (i = 0; i < XOR_KEY_SIZE; i++)
+ key->pubkey[i] = key->privkey[i] ^ private_constant[i];
+ key->hasprivkey = 1;
+ key->haspubkey = 1;
+ }
+
+ return key;
+}
+
+/* IMPORT + EXPORT */
+
+static int xor_import(void *vkey, int select, const OSSL_PARAM params[])
+{
+ XORKEY *key = vkey;
+ const OSSL_PARAM *param_priv_key, *param_pub_key;
+ unsigned char privkey[XOR_KEY_SIZE];
+ unsigned char pubkey[XOR_KEY_SIZE];
+ void *pprivkey = privkey, *ppubkey = pubkey;
+ size_t priv_len = 0, pub_len = 0;
+ int res = 0;
+
+ if (key == NULL || (select & OSSL_KEYMGMT_SELECT_KEYPAIR) == 0)
+ return 0;
+
+ memset(privkey, 0, sizeof(privkey));
+ memset(pubkey, 0, sizeof(pubkey));
+ param_priv_key = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_PRIV_KEY);
+ param_pub_key = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_PUB_KEY);
+
+ if ((param_priv_key != NULL
+ && !OSSL_PARAM_get_octet_string(param_priv_key, &pprivkey,
+ sizeof(privkey), &priv_len))
+ || (param_pub_key != NULL
+ && !OSSL_PARAM_get_octet_string(param_pub_key, &ppubkey,
+ sizeof(pubkey), &pub_len)))
+ goto err;
+
+ if (priv_len > 0) {
+ memcpy(key->privkey, privkey, priv_len);
+ key->hasprivkey = 1;
+ }
+ if (pub_len > 0) {
+ memcpy(key->pubkey, pubkey, pub_len);
+ key->haspubkey = 1;
+ }
+ res = 1;
+ err:
+ return res;
+}
+
+static int xor_export(void *vkey, int select, OSSL_CALLBACK *param_cb,
+ void *cbarg)
+{
+ XORKEY *key = vkey;
+ OSSL_PARAM params[3], *p = params;
+
+ if (key == NULL || (select & OSSL_KEYMGMT_SELECT_KEYPAIR) == 0)
+ return 0;
+
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_PKEY_PARAM_PRIV_KEY,
+ key->privkey,
+ sizeof(key->privkey));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_PKEY_PARAM_PUB_KEY,
+ key->pubkey, sizeof(key->pubkey));
+ *p++ = OSSL_PARAM_construct_end();
+
+ return param_cb(params, cbarg);
+}
+
+static const OSSL_PARAM xor_key_types[] = {
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0),
+ OSSL_PARAM_BN(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0),
+ OSSL_PARAM_END
+};
+
+static const OSSL_PARAM *xor_import_types(int select)
+{
+ return (select & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0 ? xor_key_types : NULL;
+}
+
+static const OSSL_PARAM *xor_export_types(int select)
+{
+ return (select & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0 ? xor_key_types : NULL;
+}
+
+static void xor_gen_cleanup(void *genctx)
+{
+ OPENSSL_free(genctx);
+}
+
+static const OSSL_DISPATCH xor_keymgmt_functions[] = {
+ { OSSL_FUNC_KEYMGMT_NEW, (void (*)(void))xor_newdata },
+ { OSSL_FUNC_KEYMGMT_GEN_INIT, (void (*)(void))xor_gen_init },
+ { OSSL_FUNC_KEYMGMT_GEN_SET_PARAMS, (void (*)(void))xor_gen_set_params },
+ { OSSL_FUNC_KEYMGMT_GEN_SETTABLE_PARAMS,
+ (void (*)(void))xor_gen_settable_params },
+ { OSSL_FUNC_KEYMGMT_GEN, (void (*)(void))xor_gen },
+ { OSSL_FUNC_KEYMGMT_GEN_CLEANUP, (void (*)(void))xor_gen_cleanup },
+ { OSSL_FUNC_KEYMGMT_GET_PARAMS, (void (*) (void))xor_get_params },
+ { OSSL_FUNC_KEYMGMT_GETTABLE_PARAMS, (void (*) (void))xor_gettable_params },
+ { OSSL_FUNC_KEYMGMT_SET_PARAMS, (void (*) (void))xor_set_params },
+ { OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS, (void (*) (void))xor_settable_params },
+ { OSSL_FUNC_KEYMGMT_HAS, (void (*)(void))xor_has },
+ { OSSL_FUNC_KEYMGMT_DUP, (void (*)(void))xor_dup },
+ { OSSL_FUNC_KEYMGMT_FREE, (void (*)(void))xor_freedata },
+ { OSSL_FUNC_KEYMGMT_IMPORT, (void (*)(void))xor_import },
+ { OSSL_FUNC_KEYMGMT_IMPORT_TYPES, (void (*)(void))xor_import_types },
+ { OSSL_FUNC_KEYMGMT_EXPORT, (void (*)(void))xor_export },
+ { OSSL_FUNC_KEYMGMT_EXPORT_TYPES, (void (*)(void))xor_export_types },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM tls_prov_keymgmt[] = {
+ /*
+ * Obviously this is not FIPS approved, but in order to test in conjuction
+ * with the FIPS provider we pretend that it is.
+ */
+ { "XOR", "provider=tls-provider,fips=yes", xor_keymgmt_functions },
+ { NULL, NULL, NULL }
+};
+
+static const OSSL_ALGORITHM *tls_prov_query(void *provctx, int operation_id,
+ int *no_cache)
+{
+ *no_cache = 0;
+ switch (operation_id) {
+ case OSSL_OP_KEYMGMT:
+ return tls_prov_keymgmt;
+ case OSSL_OP_KEYEXCH:
+ return tls_prov_keyexch;
+ case OSSL_OP_KEM:
+ return tls_prov_kem;
+ }
+ return NULL;
+}
+
+static void tls_prov_teardown(void *provctx)
+{
+ int i;
+
+ OSSL_LIB_CTX_free(provctx);
+
+ for (i = 0; i < NUM_DUMMY_GROUPS; i++) {
+ OPENSSL_free(dummy_group_names[i]);
+ dummy_group_names[i] = NULL;
+ }
+}
+
+/* Functions we provide to the core */
+static const OSSL_DISPATCH tls_prov_dispatch_table[] = {
+ { OSSL_FUNC_PROVIDER_TEARDOWN, (void (*)(void))tls_prov_teardown },
+ { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void))tls_prov_query },
+ { OSSL_FUNC_PROVIDER_GET_CAPABILITIES, (void (*)(void))tls_prov_get_capabilities },
+ { 0, NULL }
+};
+
+static
+unsigned int randomize_tls_group_id(OSSL_LIB_CTX *libctx)
+{
+ /*
+ * Randomise the group_id we're going to use to ensure we don't interoperate
+ * with anything but ourselves.
+ */
+ unsigned int group_id;
+ static unsigned int mem[10] = { 0 };
+ static int in_mem = 0;
+ int i;
+
+ retry:
+ if (RAND_bytes_ex(libctx, (unsigned char *)&group_id, sizeof(group_id), 0) <= 0)
+ return 0;
+ /*
+ * Ensure group_id is within the IANA Reserved for private use range
+ * (65024-65279)
+ */
+ group_id %= 65279 - 65024;
+ group_id += 65024;
+
+ /* Ensure we did not already issue this group_id */
+ for (i = 0; i < in_mem; i++)
+ if (mem[i] == group_id)
+ goto retry;
+
+ /* Add this group_id to the list of ids issued by this function */
+ mem[in_mem++] = group_id;
+
+ return group_id;
+}
+
+int tls_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out,
+ void **provctx)
+{
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
+
+ if (libctx == NULL)
+ return 0;
+
+ *provctx = libctx;
+
+ /*
+ * Randomise the group_id we're going to use to ensure we don't interoperate
+ * with anything but ourselves.
+ */
+ xor_group.group_id = randomize_tls_group_id(libctx);
+ xor_kemgroup.group_id = randomize_tls_group_id(libctx);
+
+ *out = tls_prov_dispatch_table;
+ return 1;
+}
diff --git a/test/tls13ccstest.c b/test/tls13ccstest.c
new file mode 100644
index 000000000000..3a3fa8c22a26
--- /dev/null
+++ b/test/tls13ccstest.c
@@ -0,0 +1,512 @@
+/*
+ * Copyright 2017-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/ssl.h>
+#include <string.h>
+#include "helpers/ssltestlib.h"
+#include "testutil.h"
+#include "internal/packet.h"
+
+static char *cert = NULL;
+static char *privkey = NULL;
+
+static BIO *s_to_c_fbio = NULL, *c_to_s_fbio = NULL;
+static int chseen = 0, shseen = 0, sccsseen = 0, ccsaftersh = 0;
+static int ccsbeforesh = 0, sappdataseen = 0, cappdataseen = 0, badccs = 0;
+static int badvers = 0, badsessid = 0;
+
+static unsigned char chsessid[SSL_MAX_SSL_SESSION_ID_LENGTH];
+static size_t chsessidlen = 0;
+
+static int watchccs_new(BIO *bi);
+static int watchccs_free(BIO *a);
+static int watchccs_read(BIO *b, char *out, int outl);
+static int watchccs_write(BIO *b, const char *in, int inl);
+static long watchccs_ctrl(BIO *b, int cmd, long num, void *ptr);
+static int watchccs_gets(BIO *bp, char *buf, int size);
+static int watchccs_puts(BIO *bp, const char *str);
+
+/* Choose a sufficiently large type likely to be unused for this custom BIO */
+# define BIO_TYPE_WATCHCCS_FILTER (0x80 | BIO_TYPE_FILTER)
+
+static BIO_METHOD *method_watchccs = NULL;
+
+static const BIO_METHOD *bio_f_watchccs_filter(void)
+{
+ if (method_watchccs == NULL) {
+ method_watchccs = BIO_meth_new(BIO_TYPE_WATCHCCS_FILTER,
+ "Watch CCS filter");
+ if ( method_watchccs == NULL
+ || !BIO_meth_set_write(method_watchccs, watchccs_write)
+ || !BIO_meth_set_read(method_watchccs, watchccs_read)
+ || !BIO_meth_set_puts(method_watchccs, watchccs_puts)
+ || !BIO_meth_set_gets(method_watchccs, watchccs_gets)
+ || !BIO_meth_set_ctrl(method_watchccs, watchccs_ctrl)
+ || !BIO_meth_set_create(method_watchccs, watchccs_new)
+ || !BIO_meth_set_destroy(method_watchccs, watchccs_free))
+ return NULL;
+ }
+ return method_watchccs;
+}
+
+static int watchccs_new(BIO *bio)
+{
+ BIO_set_init(bio, 1);
+ return 1;
+}
+
+static int watchccs_free(BIO *bio)
+{
+ BIO_set_init(bio, 0);
+ return 1;
+}
+
+static int watchccs_read(BIO *bio, char *out, int outl)
+{
+ int ret = 0;
+ BIO *next = BIO_next(bio);
+
+ if (outl <= 0)
+ return 0;
+ if (next == NULL)
+ return 0;
+
+ BIO_clear_retry_flags(bio);
+
+ ret = BIO_read(next, out, outl);
+ if (ret <= 0 && BIO_should_read(next))
+ BIO_set_retry_read(bio);
+
+ return ret;
+}
+
+static int watchccs_write(BIO *bio, const char *in, int inl)
+{
+ int ret = 0;
+ BIO *next = BIO_next(bio);
+ PACKET pkt, msg, msgbody, sessionid;
+ unsigned int rectype, recvers, msgtype, expectedrecvers;
+
+ if (inl <= 0)
+ return 0;
+ if (next == NULL)
+ return 0;
+
+ BIO_clear_retry_flags(bio);
+
+ if (!PACKET_buf_init(&pkt, (const unsigned char *)in, inl))
+ return 0;
+
+ /* We assume that we always write complete records each time */
+ while (PACKET_remaining(&pkt)) {
+ if (!PACKET_get_1(&pkt, &rectype)
+ || !PACKET_get_net_2(&pkt, &recvers)
+ || !PACKET_get_length_prefixed_2(&pkt, &msg))
+ return 0;
+
+ expectedrecvers = TLS1_2_VERSION;
+
+ if (rectype == SSL3_RT_HANDSHAKE) {
+ if (!PACKET_get_1(&msg, &msgtype)
+ || !PACKET_get_length_prefixed_3(&msg, &msgbody))
+ return 0;
+ if (msgtype == SSL3_MT_CLIENT_HELLO) {
+ chseen++;
+
+ /*
+ * Skip legacy_version (2 bytes) and Random (32 bytes) to read
+ * session_id.
+ */
+ if (!PACKET_forward(&msgbody, 34)
+ || !PACKET_get_length_prefixed_1(&msgbody, &sessionid))
+ return 0;
+
+ if (chseen == 1) {
+ expectedrecvers = TLS1_VERSION;
+
+ /* Save the session id for later */
+ chsessidlen = PACKET_remaining(&sessionid);
+ if (!PACKET_copy_bytes(&sessionid, chsessid, chsessidlen))
+ return 0;
+ } else {
+ /*
+ * Check the session id for the second ClientHello is the
+ * same as the first one.
+ */
+ if (PACKET_remaining(&sessionid) != chsessidlen
+ || (chsessidlen > 0
+ && memcmp(chsessid, PACKET_data(&sessionid),
+ chsessidlen) != 0))
+ badsessid = 1;
+ }
+ } else if (msgtype == SSL3_MT_SERVER_HELLO) {
+ shseen++;
+ /*
+ * Skip legacy_version (2 bytes) and Random (32 bytes) to read
+ * session_id.
+ */
+ if (!PACKET_forward(&msgbody, 34)
+ || !PACKET_get_length_prefixed_1(&msgbody, &sessionid))
+ return 0;
+
+ /*
+ * Check the session id is the same as the one in the
+ * ClientHello
+ */
+ if (PACKET_remaining(&sessionid) != chsessidlen
+ || (chsessidlen > 0
+ && memcmp(chsessid, PACKET_data(&sessionid),
+ chsessidlen) != 0))
+ badsessid = 1;
+ }
+ } else if (rectype == SSL3_RT_CHANGE_CIPHER_SPEC) {
+ if (bio == s_to_c_fbio) {
+ /*
+ * Server writing. We shouldn't have written any app data
+ * yet, and we should have seen both the ClientHello and the
+ * ServerHello
+ */
+ if (!sappdataseen
+ && chseen == 1
+ && shseen == 1
+ && !sccsseen)
+ sccsseen = 1;
+ else
+ badccs = 1;
+ } else if (!cappdataseen) {
+ /*
+ * Client writing. We shouldn't have written any app data
+ * yet, and we should have seen the ClientHello
+ */
+ if (shseen == 1 && !ccsaftersh)
+ ccsaftersh = 1;
+ else if (shseen == 0 && !ccsbeforesh)
+ ccsbeforesh = 1;
+ else
+ badccs = 1;
+ } else {
+ badccs = 1;
+ }
+ } else if(rectype == SSL3_RT_APPLICATION_DATA) {
+ if (bio == s_to_c_fbio)
+ sappdataseen = 1;
+ else
+ cappdataseen = 1;
+ }
+ if (recvers != expectedrecvers)
+ badvers = 1;
+ }
+
+ ret = BIO_write(next, in, inl);
+ if (ret <= 0 && BIO_should_write(next))
+ BIO_set_retry_write(bio);
+
+ return ret;
+}
+
+static long watchccs_ctrl(BIO *bio, int cmd, long num, void *ptr)
+{
+ long ret;
+ BIO *next = BIO_next(bio);
+
+ if (next == NULL)
+ return 0;
+
+ switch (cmd) {
+ case BIO_CTRL_DUP:
+ ret = 0;
+ break;
+ default:
+ ret = BIO_ctrl(next, cmd, num, ptr);
+ break;
+ }
+ return ret;
+}
+
+static int watchccs_gets(BIO *bio, char *buf, int size)
+{
+ /* We don't support this - not needed anyway */
+ return -1;
+}
+
+static int watchccs_puts(BIO *bio, const char *str)
+{
+ return watchccs_write(bio, str, strlen(str));
+}
+
+static int test_tls13ccs(int tst)
+{
+ SSL_CTX *sctx = NULL, *cctx = NULL;
+ SSL *sssl = NULL, *cssl = NULL;
+ int ret = 0;
+ const char msg[] = "Dummy data";
+ char buf[80];
+ size_t written, readbytes;
+ SSL_SESSION *sess = NULL;
+
+ chseen = shseen = sccsseen = ccsaftersh = ccsbeforesh = 0;
+ sappdataseen = cappdataseen = badccs = badvers = badsessid = 0;
+ chsessidlen = 0;
+
+ if (!TEST_true(create_ssl_ctx_pair(NULL, TLS_server_method(),
+ TLS_client_method(), TLS1_VERSION, 0,
+ &sctx, &cctx, cert, privkey))
+ || !TEST_true(SSL_CTX_set_max_early_data(sctx,
+ SSL3_RT_MAX_PLAIN_LENGTH)))
+ goto err;
+
+ /*
+ * Test 0: Simple Handshake
+ * Test 1: Simple Handshake, client middlebox compat mode disabled
+ * Test 2: Simple Handshake, server middlebox compat mode disabled
+ * Test 3: HRR Handshake
+ * Test 4: HRR Handshake, client middlebox compat mode disabled
+ * Test 5: HRR Handshake, server middlebox compat mode disabled
+ * Test 6: Early data handshake
+ * Test 7: Early data handshake, client middlebox compat mode disabled
+ * Test 8: Early data handshake, server middlebox compat mode disabled
+ * Test 9: Early data then HRR
+ * Test 10: Early data then HRR, client middlebox compat mode disabled
+ * Test 11: Early data then HRR, server middlebox compat mode disabled
+ */
+ switch (tst) {
+ case 0:
+ case 3:
+ case 6:
+ case 9:
+ break;
+ case 1:
+ case 4:
+ case 7:
+ case 10:
+ SSL_CTX_clear_options(cctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
+ break;
+ case 2:
+ case 5:
+ case 8:
+ case 11:
+ SSL_CTX_clear_options(sctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
+ break;
+ default:
+ TEST_error("Invalid test value");
+ goto err;
+ }
+
+ if (tst >= 6) {
+ /* Get a session suitable for early_data */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &sssl, &cssl, NULL, NULL))
+ || !TEST_true(create_ssl_connection(sssl, cssl, SSL_ERROR_NONE)))
+ goto err;
+ sess = SSL_get1_session(cssl);
+ if (!TEST_ptr(sess))
+ goto err;
+ SSL_shutdown(cssl);
+ SSL_shutdown(sssl);
+ SSL_free(sssl);
+ SSL_free(cssl);
+ sssl = cssl = NULL;
+ }
+
+ if ((tst >= 3 && tst <= 5) || tst >= 9) {
+ /* HRR handshake */
+#if defined(OPENSSL_NO_EC)
+# if !defined(OPENSSL_NO_DH)
+ if (!TEST_true(SSL_CTX_set1_groups_list(sctx, "ffdhe3072")))
+ goto err;
+# endif
+#else
+ if (!TEST_true(SSL_CTX_set1_groups_list(sctx, "P-256")))
+ goto err;
+#endif
+ }
+
+ s_to_c_fbio = BIO_new(bio_f_watchccs_filter());
+ c_to_s_fbio = BIO_new(bio_f_watchccs_filter());
+ if (!TEST_ptr(s_to_c_fbio)
+ || !TEST_ptr(c_to_s_fbio)) {
+ BIO_free(s_to_c_fbio);
+ BIO_free(c_to_s_fbio);
+ goto err;
+ }
+
+ /* BIOs get freed on error */
+ if (!TEST_true(create_ssl_objects(sctx, cctx, &sssl, &cssl, s_to_c_fbio,
+ c_to_s_fbio)))
+ goto err;
+
+ if (tst >= 6) {
+ /* Early data */
+ if (!TEST_true(SSL_set_session(cssl, sess))
+ || !TEST_true(SSL_write_early_data(cssl, msg, strlen(msg),
+ &written))
+ || (tst <= 8
+ && !TEST_int_eq(SSL_read_early_data(sssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_SUCCESS)))
+ goto err;
+ if (tst <= 8) {
+ if (!TEST_int_gt(SSL_connect(cssl), 0))
+ goto err;
+ } else {
+ if (!TEST_int_le(SSL_connect(cssl), 0))
+ goto err;
+ }
+ if (!TEST_int_eq(SSL_read_early_data(sssl, buf, sizeof(buf),
+ &readbytes),
+ SSL_READ_EARLY_DATA_FINISH))
+ goto err;
+ }
+
+ /* Perform handshake (or complete it if doing early data ) */
+ if (!TEST_true(create_ssl_connection(sssl, cssl, SSL_ERROR_NONE)))
+ goto err;
+
+ /*
+ * Check there were no unexpected CCS messages, all record versions
+ * were as expected, and that the session ids were reflected by the server
+ * correctly.
+ */
+ if (!TEST_false(badccs) || !TEST_false(badvers) || !TEST_false(badsessid))
+ goto err;
+
+ switch (tst) {
+ case 0:
+ if (!TEST_true(sccsseen)
+ || !TEST_true(ccsaftersh)
+ || !TEST_false(ccsbeforesh)
+ || !TEST_size_t_gt(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 1:
+ if (!TEST_true(sccsseen)
+ || !TEST_false(ccsaftersh)
+ || !TEST_false(ccsbeforesh)
+ || !TEST_size_t_eq(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 2:
+ if (!TEST_false(sccsseen)
+ || !TEST_true(ccsaftersh)
+ || !TEST_false(ccsbeforesh)
+ || !TEST_size_t_gt(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 3:
+ if (!TEST_true(sccsseen)
+ || !TEST_true(ccsaftersh)
+ || !TEST_false(ccsbeforesh)
+ || !TEST_size_t_gt(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 4:
+ if (!TEST_true(sccsseen)
+ || !TEST_false(ccsaftersh)
+ || !TEST_false(ccsbeforesh)
+ || !TEST_size_t_eq(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 5:
+ if (!TEST_false(sccsseen)
+ || !TEST_true(ccsaftersh)
+ || !TEST_false(ccsbeforesh)
+ || !TEST_size_t_gt(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 6:
+ if (!TEST_true(sccsseen)
+ || !TEST_false(ccsaftersh)
+ || !TEST_true(ccsbeforesh)
+ || !TEST_size_t_gt(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 7:
+ if (!TEST_true(sccsseen)
+ || !TEST_false(ccsaftersh)
+ || !TEST_false(ccsbeforesh)
+ || !TEST_size_t_eq(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 8:
+ if (!TEST_false(sccsseen)
+ || !TEST_false(ccsaftersh)
+ || !TEST_true(ccsbeforesh)
+ || !TEST_size_t_gt(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 9:
+ if (!TEST_true(sccsseen)
+ || !TEST_false(ccsaftersh)
+ || !TEST_true(ccsbeforesh)
+ || !TEST_size_t_gt(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 10:
+ if (!TEST_true(sccsseen)
+ || !TEST_false(ccsaftersh)
+ || !TEST_false(ccsbeforesh)
+ || !TEST_size_t_eq(chsessidlen, 0))
+ goto err;
+ break;
+
+ case 11:
+ if (!TEST_false(sccsseen)
+ || !TEST_false(ccsaftersh)
+ || !TEST_true(ccsbeforesh)
+ || !TEST_size_t_gt(chsessidlen, 0))
+ goto err;
+ break;
+
+ default:
+ TEST_error("Invalid test value");
+ goto err;
+ }
+
+ ret = 1;
+ err:
+ SSL_SESSION_free(sess);
+ SSL_free(sssl);
+ SSL_free(cssl);
+ SSL_CTX_free(sctx);
+ SSL_CTX_free(cctx);
+
+ return ret;
+}
+
+OPT_TEST_DECLARE_USAGE("certfile privkeyfile\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(cert = test_get_argument(0))
+ || !TEST_ptr(privkey = test_get_argument(1)))
+ return 0;
+
+ ADD_ALL_TESTS(test_tls13ccs, 12);
+
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ BIO_meth_free(method_watchccs);
+}
diff --git a/test/tls13encryptiontest.c b/test/tls13encryptiontest.c
new file mode 100644
index 000000000000..d2df29e6fda4
--- /dev/null
+++ b/test/tls13encryptiontest.c
@@ -0,0 +1,417 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/ssl.h>
+#include <openssl/evp.h>
+#include "../ssl/ssl_local.h"
+#include "../ssl/record/record_local.h"
+#include "internal/nelem.h"
+#include "testutil.h"
+
+/*
+ * Based on the test vectors provided in:
+ * https://tools.ietf.org/html/draft-ietf-tls-tls13-vectors-06
+ */
+
+typedef struct {
+ /*
+ * We split these into 3 chunks in order to work around the 509 character
+ * limit that the standard specifies for string literals
+ */
+ const char *plaintext[3];
+ const char *ciphertext[3];
+ const char *key;
+ const char *iv;
+ const char *seq;
+} RECORD_DATA;
+
+/*
+ * Note 1: The plaintext values given here have an additional "16" or "17" byte
+ * added to the end when compared to the official vectors. The official vectors
+ * do not include the inner content type, but we require it.
+ *
+ * Note 2: These are the vectors for the "Simple 1-RTT Handshake"
+ */
+static RECORD_DATA refdata[] = {
+ {
+ /*
+ * Server: EncryptedExtensions, Certificate, CertificateVerify and
+ * Finished
+ */
+ {
+ "080000240022000a00140012001d00170018001901000101010201030104001c"
+ "00024001000000000b0001b9000001b50001b0308201ac30820115a003020102"
+ "020102300d06092a864886f70d01010b0500300e310c300a0603550403130372"
+ "7361301e170d3136303733303031323335395a170d3236303733303031323335"
+ "395a300e310c300a0603550403130372736130819f300d06092a864886f70d01"
+ "0101050003818d0030818902818100b4bb498f8279303d980836399b36c6988c"
+ "0c68de55e1bdb826d3901a2461eafd2de49a91d015abbc9a95137ace6c1af19e",
+ "aa6af98c7ced43120998e187a80ee0ccb0524b1b018c3e0b63264d449a6d38e2"
+ "2a5fda430846748030530ef0461c8ca9d9efbfae8ea6d1d03e2bd193eff0ab9a"
+ "8002c47428a6d35a8d88d79f7f1e3f0203010001a31a301830090603551d1304"
+ "023000300b0603551d0f0404030205a0300d06092a864886f70d01010b050003"
+ "81810085aad2a0e5b9276b908c65f73a7267170618a54c5f8a7b337d2df7a594"
+ "365417f2eae8f8a58c8f8172f9319cf36b7fd6c55b80f21a03015156726096fd"
+ "335e5e67f2dbf102702e608ccae6bec1fc63a42a99be5c3eb7107c3c54e9b9eb",
+ "2bd5203b1c3b84e0a8b2f759409ba3eac9d91d402dcc0cc8f8961229ac9187b4"
+ "2b4de100000f00008408040080754040d0ddab8cf0e2da2bc4995b868ad745c8"
+ "e1564e33cde17880a42392cc624aeef6b67bb3f0ae71d9d54a2309731d87dc59"
+ "f642d733be2eb27484ad8a8c8eb3516a7ac57f2625e2b5c0888a8541f4e734f7"
+ "3d054761df1dd02f0e3e9a33cfa10b6e3eb4ebf7ac053b01fdabbddfc54133bc"
+ "d24c8bbdceb223b2aa03452a2914000020ac86acbc9cd25a45b57ad5b64db15d"
+ "4405cf8c80e314583ebf3283ef9a99310c16"
+ },
+ {
+ "f10b26d8fcaf67b5b828f712122216a1cd14187465b77637cbcd78539128bb93"
+ "246dcca1af56f1eaa271666077455bc54965d85f05f9bd36d6996171eb536aff"
+ "613eeddc42bad5a2d2227c4606f1215f980e7afaf56bd3b85a51be130003101a"
+ "758d077b1c891d8e7a22947e5a229851fd42a9dd422608f868272abf92b3d43f"
+ "b46ac420259346067f66322fd708885680f4b4433c29116f2dfa529e09bba53c"
+ "7cd920121724809eaddcc84307ef46fc51a0b33d99d39db337fcd761ce0f2b02"
+ "dc73dedb6fddb77c4f8099bde93d5bee08bcf2131f29a2a37ff07949e8f8bcdd",
+ "3e8310b8bf8b3444c85aaf0d2aeb2d4f36fd14d5cb51fcebff418b3827136ab9"
+ "529e9a3d3f35e4c0ae749ea2dbc94982a1281d3e6daab719aa4460889321a008"
+ "bf10fa06ac0c61cc122cc90d5e22c0030c986ae84a33a0c47df174bcfbd50bf7"
+ "8ffdf24051ab423db63d5815db2f830040f30521131c98c66f16c362addce2fb"
+ "a0602cf0a7dddf22e8def7516cdfee95b4056cc9ad38c95352335421b5b1ffba"
+ "df75e5212fdad7a75f52a2801486a1eec3539580bee0e4b337cda6085ac9eccd"
+ "1a0f1a46cebfbb5cdfa3251ac28c3bc826148c6d8c1eb6a06f77f6ff632c6a83",
+ "e283e8f9df7c6dbabf1c6ea40629a85b43ab0c73d34f9d5072832a104eda3f75"
+ "f5d83da6e14822a18e14099d749eafd823ca2ac7542086501eca206ce7887920"
+ "008573757ce2f230a890782b99cc682377beee812756d04f9025135fb599d746"
+ "fefe7316c922ac265ca0d29021375adb63c1509c3e242dfb92b8dee891f7368c"
+ "4058399b8db9075f2dcc8216194e503b6652d87d2cb41f99adfdcc5be5ec7e1e"
+ "6326ac22d70bd3ba652827532d669aff005173597f8039c3ea4922d3ec757670"
+ "222f6ac29b93e90d7ad3f6dd96328e429cfcfd5cca22707fe2d86ad1dcb0be75"
+ "6e8e"
+ },
+ "c66cb1aec519df44c91e10995511ac8b",
+ "f7f6884c4981716c2d0d29a4",
+ "0000000000000000"
+ },
+ {
+ /* Client: Finished */
+ {
+ "14000020b9027a0204b972b52cdefa58950fa1580d68c9cb124dbe691a7178f2"
+ "5c554b2316", "", ""
+ },
+ {
+ "9539b4ae2f87fd8e616b295628ea953d9e3858db274970d19813ec136cae7d96"
+ "e0417775fcabd3d8858fdc60240912d218f5afb21c", "", ""
+ },
+ "2679a43e1d76784034ea1797d5ad2649",
+ "5482405290dd0d2f81c0d942",
+ "0000000000000000"
+ },
+ {
+ /* Server: NewSessionTicket */
+ {
+ "040000c90000001e2fd3992f02000000b2ff099f9676cdff8b0bf8825d000000"
+ "007905a9d28efeef4a47c6f9b06a0cecdb0070d920b898997c75b79636943ed4"
+ "2046a96142bd084a04acfa0c490f452d756dea02c0f927259f1f3231ac0d541a"
+ "769129b740ce38090842b828c27fd729f59737ba98aa7b42e043c5da28f8dca8"
+ "590b2df410d5134fd6c4cacad8b30370602afa35d265bf4d127976bb36dbda6a"
+ "626f0270e20eebc73d6fcae2b1a0da122ee9042f76be56ebf41aa469c3d2c9da"
+ "9197d80008002a00040000040016", "", ""
+ },
+ {
+ "3680c2b2109d25caa26c3b06eea9fdc5cb31613ba702176596da2e886bf6af93"
+ "507bd68161ad9cb4780653842e1041ecbf0088a65ac4ef438419dd1d95ddd9bd"
+ "2ad4484e7e167d0e6c008448ae58a0418713b6fc6c51e4bb23a537fb75a74f73"
+ "de31fe6aa0bc522515f8b25f8955428b5de5ac06762cec22b0aa78c94385ef8e"
+ "70fa24945b7c1f268510871689bbbbfaf2e7f4a19277024f95f1143ab12a31ec"
+ "63adb128cb390711fd6d06a498df3e98615d8eb102e23353b480efcca5e8e026"
+ "7a6d0fe2441f14c8c9664aefb2cfff6ae9e0442728b6a0940c1e824fda06",
+ "", ""
+
+ },
+ "a688ebb5ac826d6f42d45c0cc44b9b7d",
+ "c1cad4425a438b5de714830a",
+ "0000000000000000"
+ },
+ {
+ /* Client: Application Data */
+ {
+ "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
+ "202122232425262728292a2b2c2d2e2f303117", "", ""
+ },
+ {
+ "8c3497da00ae023e53c01b4324b665404c1b49e78fe2bf4d17f6348ae8340551"
+ "e363a0cd05f2179c4fef5ad689b5cae0bae94adc63632e571fb79aa91544c639"
+ "4d28a1", "", ""
+
+ },
+ "88b96ad686c84be55ace18a59cce5c87",
+ "b99dc58cd5ff5ab082fdad19",
+ "0000000000000000"
+ },
+
+
+ {
+ /* Server: Application Data */
+ {
+ "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
+ "202122232425262728292a2b2c2d2e2f303117", "", ""
+ },
+ {
+ "f65f49fd2df6cd2347c3d30166e3cfddb6308a5906c076112c6a37ff1dbd406b"
+ "5813c0abd734883017a6b2833186b13c14da5d75f33d8760789994e27d82043a"
+ "b88d65", "", ""
+ },
+ "a688ebb5ac826d6f42d45c0cc44b9b7d",
+ "c1cad4425a438b5de714830a",
+ "0000000000000001"
+ },
+ {
+ /* Client: CloseNotify */
+ {
+ "010015", "", ""
+ },
+ {
+ "2c2148163d7938a35f6acf2a6606f8cbd1d9f2", "", ""
+ },
+ "88b96ad686c84be55ace18a59cce5c87",
+ "b99dc58cd5ff5ab082fdad19",
+ "0000000000000001"
+ },
+ {
+ /* Server: CloseNotify */
+ {
+ "010015", "", ""
+ },
+ {
+ "f8141ebdb5eda511e0bce639a56ff9ea825a21", "", ""
+
+ },
+ "a688ebb5ac826d6f42d45c0cc44b9b7d",
+ "c1cad4425a438b5de714830a",
+ "0000000000000002"
+ }
+};
+
+/*
+ * Same thing as OPENSSL_hexstr2buf() but enables us to pass the string in
+ * 3 chunks
+ */
+static unsigned char *multihexstr2buf(const char *str[3], size_t *len)
+{
+ size_t outer, inner, curr = 0;
+ unsigned char *outbuf;
+ size_t totlen = 0;
+
+ /* Check lengths of all input strings are even */
+ for (outer = 0; outer < 3; outer++) {
+ totlen += strlen(str[outer]);
+ if ((totlen & 1) != 0)
+ return NULL;
+ }
+
+ totlen /= 2;
+ outbuf = OPENSSL_malloc(totlen);
+ if (outbuf == NULL)
+ return NULL;
+
+ for (outer = 0; outer < 3; outer++) {
+ for (inner = 0; str[outer][inner] != 0; inner += 2) {
+ int hi, lo;
+
+ hi = OPENSSL_hexchar2int(str[outer][inner]);
+ lo = OPENSSL_hexchar2int(str[outer][inner + 1]);
+
+ if (hi < 0 || lo < 0) {
+ OPENSSL_free(outbuf);
+ return NULL;
+ }
+ outbuf[curr++] = (hi << 4) | lo;
+ }
+ }
+
+ *len = totlen;
+ return outbuf;
+}
+
+static int load_record(SSL3_RECORD *rec, RECORD_DATA *recd, unsigned char **key,
+ unsigned char *iv, size_t ivlen, unsigned char *seq)
+{
+ unsigned char *pt = NULL, *sq = NULL, *ivtmp = NULL;
+ size_t ptlen;
+
+ *key = OPENSSL_hexstr2buf(recd->key, NULL);
+ ivtmp = OPENSSL_hexstr2buf(recd->iv, NULL);
+ sq = OPENSSL_hexstr2buf(recd->seq, NULL);
+ pt = multihexstr2buf(recd->plaintext, &ptlen);
+
+ if (*key == NULL || ivtmp == NULL || sq == NULL || pt == NULL)
+ goto err;
+
+ rec->data = rec->input = OPENSSL_malloc(ptlen + EVP_GCM_TLS_TAG_LEN);
+
+ if (rec->data == NULL)
+ goto err;
+
+ rec->length = ptlen;
+ memcpy(rec->data, pt, ptlen);
+ OPENSSL_free(pt);
+ memcpy(seq, sq, SEQ_NUM_SIZE);
+ OPENSSL_free(sq);
+ memcpy(iv, ivtmp, ivlen);
+ OPENSSL_free(ivtmp);
+
+ return 1;
+ err:
+ OPENSSL_free(*key);
+ *key = NULL;
+ OPENSSL_free(ivtmp);
+ OPENSSL_free(sq);
+ OPENSSL_free(pt);
+ return 0;
+}
+
+static int test_record(SSL3_RECORD *rec, RECORD_DATA *recd, int enc)
+{
+ int ret = 0;
+ unsigned char *refd;
+ size_t refdatalen = 0;
+
+ if (enc)
+ refd = multihexstr2buf(recd->ciphertext, &refdatalen);
+ else
+ refd = multihexstr2buf(recd->plaintext, &refdatalen);
+
+ if (!TEST_ptr(refd)) {
+ TEST_info("Failed to get reference data");
+ goto err;
+ }
+
+ if (!TEST_mem_eq(rec->data, rec->length, refd, refdatalen))
+ goto err;
+
+ ret = 1;
+
+ err:
+ OPENSSL_free(refd);
+ return ret;
+}
+
+#define TLS13_AES_128_GCM_SHA256_BYTES ((const unsigned char *)"\x13\x01")
+
+static int test_tls13_encryption(void)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *s = NULL;
+ SSL3_RECORD rec;
+ unsigned char *key = NULL, *iv = NULL, *seq = NULL;
+ const EVP_CIPHER *ciph = EVP_aes_128_gcm();
+ int ret = 0;
+ size_t ivlen, ctr;
+
+ /*
+ * Encrypted TLSv1.3 records always have an outer content type of
+ * application data, and a record version of TLSv1.2.
+ */
+ rec.data = NULL;
+ rec.type = SSL3_RT_APPLICATION_DATA;
+ rec.rec_version = TLS1_2_VERSION;
+
+ ctx = SSL_CTX_new(TLS_method());
+ if (!TEST_ptr(ctx)) {
+ TEST_info("Failed creating SSL_CTX");
+ goto err;
+ }
+
+ s = SSL_new(ctx);
+ if (!TEST_ptr(s)) {
+ TEST_info("Failed creating SSL");
+ goto err;
+ }
+
+ s->enc_read_ctx = EVP_CIPHER_CTX_new();
+ if (!TEST_ptr(s->enc_read_ctx))
+ goto err;
+
+ s->enc_write_ctx = EVP_CIPHER_CTX_new();
+ if (!TEST_ptr(s->enc_write_ctx))
+ goto err;
+
+ s->s3.tmp.new_cipher = SSL_CIPHER_find(s, TLS13_AES_128_GCM_SHA256_BYTES);
+ if (!TEST_ptr(s->s3.tmp.new_cipher)) {
+ TEST_info("Failed to find cipher");
+ goto err;
+ }
+
+ for (ctr = 0; ctr < OSSL_NELEM(refdata); ctr++) {
+ /* Load the record */
+ ivlen = EVP_CIPHER_get_iv_length(ciph);
+ if (!load_record(&rec, &refdata[ctr], &key, s->read_iv, ivlen,
+ RECORD_LAYER_get_read_sequence(&s->rlayer))) {
+ TEST_error("Failed loading key into EVP_CIPHER_CTX");
+ goto err;
+ }
+
+ /* Set up the read/write sequences */
+ memcpy(RECORD_LAYER_get_write_sequence(&s->rlayer),
+ RECORD_LAYER_get_read_sequence(&s->rlayer), SEQ_NUM_SIZE);
+ memcpy(s->write_iv, s->read_iv, ivlen);
+
+ /* Load the key into the EVP_CIPHER_CTXs */
+ if (EVP_CipherInit_ex(s->enc_write_ctx, ciph, NULL, key, NULL, 1) <= 0
+ || EVP_CipherInit_ex(s->enc_read_ctx, ciph, NULL, key, NULL, 0)
+ <= 0) {
+ TEST_error("Failed loading key into EVP_CIPHER_CTX\n");
+ goto err;
+ }
+
+ /* Encrypt it */
+ if (!TEST_size_t_eq(tls13_enc(s, &rec, 1, 1, NULL, 0), 1)) {
+ TEST_info("Failed to encrypt record %zu", ctr);
+ goto err;
+ }
+ if (!TEST_true(test_record(&rec, &refdata[ctr], 1))) {
+ TEST_info("Record %zu encryption test failed", ctr);
+ goto err;
+ }
+
+ /* Decrypt it */
+ if (!TEST_int_eq(tls13_enc(s, &rec, 1, 0, NULL, 0), 1)) {
+ TEST_info("Failed to decrypt record %zu", ctr);
+ goto err;
+ }
+ if (!TEST_true(test_record(&rec, &refdata[ctr], 0))) {
+ TEST_info("Record %zu decryption test failed", ctr);
+ goto err;
+ }
+
+ OPENSSL_free(rec.data);
+ OPENSSL_free(key);
+ OPENSSL_free(iv);
+ OPENSSL_free(seq);
+ rec.data = NULL;
+ key = NULL;
+ iv = NULL;
+ seq = NULL;
+ }
+
+ TEST_note("PASS: %zu records tested", ctr);
+ ret = 1;
+
+ err:
+ OPENSSL_free(rec.data);
+ OPENSSL_free(key);
+ OPENSSL_free(iv);
+ OPENSSL_free(seq);
+ SSL_free(s);
+ SSL_CTX_free(ctx);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_tls13_encryption);
+ return 1;
+}
diff --git a/test/tls13secretstest.c b/test/tls13secretstest.c
new file mode 100644
index 000000000000..bf214d3d5ba7
--- /dev/null
+++ b/test/tls13secretstest.c
@@ -0,0 +1,408 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/ssl.h>
+#include <openssl/evp.h>
+
+#include "../ssl/ssl_local.h"
+#include "testutil.h"
+
+#define IVLEN 12
+#define KEYLEN 16
+
+/*
+ * Based on the test vectors available in:
+ * https://tools.ietf.org/html/draft-ietf-tls-tls13-vectors-06
+ */
+
+static unsigned char hs_start_hash[] = {
+0xc6, 0xc9, 0x18, 0xad, 0x2f, 0x41, 0x99, 0xd5, 0x59, 0x8e, 0xaf, 0x01, 0x16,
+0xcb, 0x7a, 0x5c, 0x2c, 0x14, 0xcb, 0x54, 0x78, 0x12, 0x18, 0x88, 0x8d, 0xb7,
+0x03, 0x0d, 0xd5, 0x0d, 0x5e, 0x6d
+};
+
+static unsigned char hs_full_hash[] = {
+0xf8, 0xc1, 0x9e, 0x8c, 0x77, 0xc0, 0x38, 0x79, 0xbb, 0xc8, 0xeb, 0x6d, 0x56,
+0xe0, 0x0d, 0xd5, 0xd8, 0x6e, 0xf5, 0x59, 0x27, 0xee, 0xfc, 0x08, 0xe1, 0xb0,
+0x02, 0xb6, 0xec, 0xe0, 0x5d, 0xbf
+};
+
+static unsigned char early_secret[] = {
+0x33, 0xad, 0x0a, 0x1c, 0x60, 0x7e, 0xc0, 0x3b, 0x09, 0xe6, 0xcd, 0x98, 0x93,
+0x68, 0x0c, 0xe2, 0x10, 0xad, 0xf3, 0x00, 0xaa, 0x1f, 0x26, 0x60, 0xe1, 0xb2,
+0x2e, 0x10, 0xf1, 0x70, 0xf9, 0x2a
+};
+
+static unsigned char ecdhe_secret[] = {
+0x81, 0x51, 0xd1, 0x46, 0x4c, 0x1b, 0x55, 0x53, 0x36, 0x23, 0xb9, 0xc2, 0x24,
+0x6a, 0x6a, 0x0e, 0x6e, 0x7e, 0x18, 0x50, 0x63, 0xe1, 0x4a, 0xfd, 0xaf, 0xf0,
+0xb6, 0xe1, 0xc6, 0x1a, 0x86, 0x42
+};
+
+static unsigned char handshake_secret[] = {
+0x5b, 0x4f, 0x96, 0x5d, 0xf0, 0x3c, 0x68, 0x2c, 0x46, 0xe6, 0xee, 0x86, 0xc3,
+0x11, 0x63, 0x66, 0x15, 0xa1, 0xd2, 0xbb, 0xb2, 0x43, 0x45, 0xc2, 0x52, 0x05,
+0x95, 0x3c, 0x87, 0x9e, 0x8d, 0x06
+};
+
+static const char *client_hts_label = "c hs traffic";
+
+static unsigned char client_hts[] = {
+0xe2, 0xe2, 0x32, 0x07, 0xbd, 0x93, 0xfb, 0x7f, 0xe4, 0xfc, 0x2e, 0x29, 0x7a,
+0xfe, 0xab, 0x16, 0x0e, 0x52, 0x2b, 0x5a, 0xb7, 0x5d, 0x64, 0xa8, 0x6e, 0x75,
+0xbc, 0xac, 0x3f, 0x3e, 0x51, 0x03
+};
+
+static unsigned char client_hts_key[] = {
+0x26, 0x79, 0xa4, 0x3e, 0x1d, 0x76, 0x78, 0x40, 0x34, 0xea, 0x17, 0x97, 0xd5,
+0xad, 0x26, 0x49
+};
+
+static unsigned char client_hts_iv[] = {
+0x54, 0x82, 0x40, 0x52, 0x90, 0xdd, 0x0d, 0x2f, 0x81, 0xc0, 0xd9, 0x42
+};
+
+static const char *server_hts_label = "s hs traffic";
+
+static unsigned char server_hts[] = {
+0x3b, 0x7a, 0x83, 0x9c, 0x23, 0x9e, 0xf2, 0xbf, 0x0b, 0x73, 0x05, 0xa0, 0xe0,
+0xc4, 0xe5, 0xa8, 0xc6, 0xc6, 0x93, 0x30, 0xa7, 0x53, 0xb3, 0x08, 0xf5, 0xe3,
+0xa8, 0x3a, 0xa2, 0xef, 0x69, 0x79
+};
+
+static unsigned char server_hts_key[] = {
+0xc6, 0x6c, 0xb1, 0xae, 0xc5, 0x19, 0xdf, 0x44, 0xc9, 0x1e, 0x10, 0x99, 0x55,
+0x11, 0xac, 0x8b
+};
+
+static unsigned char server_hts_iv[] = {
+0xf7, 0xf6, 0x88, 0x4c, 0x49, 0x81, 0x71, 0x6c, 0x2d, 0x0d, 0x29, 0xa4
+};
+
+static unsigned char master_secret[] = {
+0x5c, 0x79, 0xd1, 0x69, 0x42, 0x4e, 0x26, 0x2b, 0x56, 0x32, 0x03, 0x62, 0x7b,
+0xe4, 0xeb, 0x51, 0x03, 0x3f, 0x58, 0x8c, 0x43, 0xc9, 0xce, 0x03, 0x73, 0x37,
+0x2d, 0xbc, 0xbc, 0x01, 0x85, 0xa7
+};
+
+static const char *client_ats_label = "c ap traffic";
+
+static unsigned char client_ats[] = {
+0xe2, 0xf0, 0xdb, 0x6a, 0x82, 0xe8, 0x82, 0x80, 0xfc, 0x26, 0xf7, 0x3c, 0x89,
+0x85, 0x4e, 0xe8, 0x61, 0x5e, 0x25, 0xdf, 0x28, 0xb2, 0x20, 0x79, 0x62, 0xfa,
+0x78, 0x22, 0x26, 0xb2, 0x36, 0x26
+};
+
+static unsigned char client_ats_key[] = {
+0x88, 0xb9, 0x6a, 0xd6, 0x86, 0xc8, 0x4b, 0xe5, 0x5a, 0xce, 0x18, 0xa5, 0x9c,
+0xce, 0x5c, 0x87
+};
+
+static unsigned char client_ats_iv[] = {
+0xb9, 0x9d, 0xc5, 0x8c, 0xd5, 0xff, 0x5a, 0xb0, 0x82, 0xfd, 0xad, 0x19
+};
+
+static const char *server_ats_label = "s ap traffic";
+
+static unsigned char server_ats[] = {
+0x5b, 0x73, 0xb1, 0x08, 0xd9, 0xac, 0x1b, 0x9b, 0x0c, 0x82, 0x48, 0xca, 0x39,
+0x26, 0xec, 0x6e, 0x7b, 0xc4, 0x7e, 0x41, 0x17, 0x06, 0x96, 0x39, 0x87, 0xec,
+0x11, 0x43, 0x5d, 0x30, 0x57, 0x19
+};
+
+static unsigned char server_ats_key[] = {
+0xa6, 0x88, 0xeb, 0xb5, 0xac, 0x82, 0x6d, 0x6f, 0x42, 0xd4, 0x5c, 0x0c, 0xc4,
+0x4b, 0x9b, 0x7d
+};
+
+static unsigned char server_ats_iv[] = {
+0xc1, 0xca, 0xd4, 0x42, 0x5a, 0x43, 0x8b, 0x5d, 0xe7, 0x14, 0x83, 0x0a
+};
+
+/* Mocked out implementations of various functions */
+int ssl3_digest_cached_records(SSL *s, int keep)
+{
+ return 1;
+}
+
+static int full_hash = 0;
+
+/* Give a hash of the currently set handshake */
+int ssl_handshake_hash(SSL *s, unsigned char *out, size_t outlen,
+ size_t *hashlen)
+{
+ if (sizeof(hs_start_hash) > outlen
+ || sizeof(hs_full_hash) != sizeof(hs_start_hash))
+ return 0;
+
+ if (full_hash) {
+ memcpy(out, hs_full_hash, sizeof(hs_full_hash));
+ *hashlen = sizeof(hs_full_hash);
+ } else {
+ memcpy(out, hs_start_hash, sizeof(hs_start_hash));
+ *hashlen = sizeof(hs_start_hash);
+ }
+
+ return 1;
+}
+
+const EVP_MD *ssl_handshake_md(SSL *s)
+{
+ return EVP_sha256();
+}
+
+void RECORD_LAYER_reset_read_sequence(RECORD_LAYER *rl)
+{
+}
+
+void RECORD_LAYER_reset_write_sequence(RECORD_LAYER *rl)
+{
+}
+
+int ssl_cipher_get_evp_cipher(SSL_CTX *ctx, const SSL_CIPHER *sslc,
+ const EVP_CIPHER **enc)
+{
+ return 0;
+}
+
+int ssl_cipher_get_evp(SSL_CTX *ctx, const SSL_SESSION *s,
+ const EVP_CIPHER **enc, const EVP_MD **md,
+ int *mac_pkey_type, size_t *mac_secret_size,
+ SSL_COMP **comp, int use_etm)
+
+{
+ return 0;
+}
+
+int tls1_alert_code(int code)
+{
+ return code;
+}
+
+int ssl_log_secret(SSL *ssl,
+ const char *label,
+ const uint8_t *secret,
+ size_t secret_len)
+{
+ return 1;
+}
+
+const EVP_MD *ssl_md(SSL_CTX *ctx, int idx)
+{
+ return EVP_sha256();
+}
+
+void ossl_statem_send_fatal(SSL *s, int al)
+{
+}
+
+void ossl_statem_fatal(SSL *s, int al, int reason, const char *fmt, ...)
+{
+}
+
+int ossl_statem_export_allowed(SSL *s)
+{
+ return 1;
+}
+
+int ossl_statem_export_early_allowed(SSL *s)
+{
+ return 1;
+}
+
+void ssl_evp_cipher_free(const EVP_CIPHER *cipher)
+{
+}
+
+void ssl_evp_md_free(const EVP_MD *md)
+{
+}
+
+/* End of mocked out code */
+
+static int test_secret(SSL *s, unsigned char *prk,
+ const unsigned char *label, size_t labellen,
+ const unsigned char *ref_secret,
+ const unsigned char *ref_key, const unsigned char *ref_iv)
+{
+ size_t hashsize;
+ unsigned char gensecret[EVP_MAX_MD_SIZE];
+ unsigned char hash[EVP_MAX_MD_SIZE];
+ unsigned char key[KEYLEN];
+ unsigned char iv[IVLEN];
+ const EVP_MD *md = ssl_handshake_md(s);
+
+ if (!ssl_handshake_hash(s, hash, sizeof(hash), &hashsize)) {
+ TEST_error("Failed to get hash");
+ return 0;
+ }
+
+ if (!tls13_hkdf_expand(s, md, prk, label, labellen, hash, hashsize,
+ gensecret, hashsize, 1)) {
+ TEST_error("Secret generation failed");
+ return 0;
+ }
+
+ if (!TEST_mem_eq(gensecret, hashsize, ref_secret, hashsize))
+ return 0;
+
+ if (!tls13_derive_key(s, md, gensecret, key, KEYLEN)) {
+ TEST_error("Key generation failed");
+ return 0;
+ }
+
+ if (!TEST_mem_eq(key, KEYLEN, ref_key, KEYLEN))
+ return 0;
+
+ if (!tls13_derive_iv(s, md, gensecret, iv, IVLEN)) {
+ TEST_error("IV generation failed");
+ return 0;
+ }
+
+ if (!TEST_mem_eq(iv, IVLEN, ref_iv, IVLEN))
+ return 0;
+
+ return 1;
+}
+
+static int test_handshake_secrets(void)
+{
+ SSL_CTX *ctx = NULL;
+ SSL *s = NULL;
+ int ret = 0;
+ size_t hashsize;
+ unsigned char out_master_secret[EVP_MAX_MD_SIZE];
+ size_t master_secret_length;
+
+ ctx = SSL_CTX_new(TLS_method());
+ if (!TEST_ptr(ctx))
+ goto err;
+
+ s = SSL_new(ctx);
+ if (!TEST_ptr(s ))
+ goto err;
+
+ s->session = SSL_SESSION_new();
+ if (!TEST_ptr(s->session))
+ goto err;
+
+ if (!TEST_true(tls13_generate_secret(s, ssl_handshake_md(s), NULL, NULL, 0,
+ (unsigned char *)&s->early_secret))) {
+ TEST_info("Early secret generation failed");
+ goto err;
+ }
+
+ if (!TEST_mem_eq(s->early_secret, sizeof(early_secret),
+ early_secret, sizeof(early_secret))) {
+ TEST_info("Early secret does not match");
+ goto err;
+ }
+
+ if (!TEST_true(tls13_generate_handshake_secret(s, ecdhe_secret,
+ sizeof(ecdhe_secret)))) {
+ TEST_info("Handshake secret generation failed");
+ goto err;
+ }
+
+ if (!TEST_mem_eq(s->handshake_secret, sizeof(handshake_secret),
+ handshake_secret, sizeof(handshake_secret)))
+ goto err;
+
+ hashsize = EVP_MD_get_size(ssl_handshake_md(s));
+ if (!TEST_size_t_eq(sizeof(client_hts), hashsize))
+ goto err;
+ if (!TEST_size_t_eq(sizeof(client_hts_key), KEYLEN))
+ goto err;
+ if (!TEST_size_t_eq(sizeof(client_hts_iv), IVLEN))
+ goto err;
+
+ if (!TEST_true(test_secret(s, s->handshake_secret,
+ (unsigned char *)client_hts_label,
+ strlen(client_hts_label), client_hts,
+ client_hts_key, client_hts_iv))) {
+ TEST_info("Client handshake secret test failed");
+ goto err;
+ }
+
+ if (!TEST_size_t_eq(sizeof(server_hts), hashsize))
+ goto err;
+ if (!TEST_size_t_eq(sizeof(server_hts_key), KEYLEN))
+ goto err;
+ if (!TEST_size_t_eq(sizeof(server_hts_iv), IVLEN))
+ goto err;
+
+ if (!TEST_true(test_secret(s, s->handshake_secret,
+ (unsigned char *)server_hts_label,
+ strlen(server_hts_label), server_hts,
+ server_hts_key, server_hts_iv))) {
+ TEST_info("Server handshake secret test failed");
+ goto err;
+ }
+
+ /*
+ * Ensure the mocked out ssl_handshake_hash() returns the full handshake
+ * hash.
+ */
+ full_hash = 1;
+
+ if (!TEST_true(tls13_generate_master_secret(s, out_master_secret,
+ s->handshake_secret, hashsize,
+ &master_secret_length))) {
+ TEST_info("Master secret generation failed");
+ goto err;
+ }
+
+ if (!TEST_mem_eq(out_master_secret, master_secret_length,
+ master_secret, sizeof(master_secret))) {
+ TEST_info("Master secret does not match");
+ goto err;
+ }
+
+ if (!TEST_size_t_eq(sizeof(client_ats), hashsize))
+ goto err;
+ if (!TEST_size_t_eq(sizeof(client_ats_key), KEYLEN))
+ goto err;
+ if (!TEST_size_t_eq(sizeof(client_ats_iv), IVLEN))
+ goto err;
+
+ if (!TEST_true(test_secret(s, out_master_secret,
+ (unsigned char *)client_ats_label,
+ strlen(client_ats_label), client_ats,
+ client_ats_key, client_ats_iv))) {
+ TEST_info("Client application data secret test failed");
+ goto err;
+ }
+
+ if (!TEST_size_t_eq(sizeof(server_ats), hashsize))
+ goto err;
+ if (!TEST_size_t_eq(sizeof(server_ats_key), KEYLEN))
+ goto err;
+ if (!TEST_size_t_eq(sizeof(server_ats_iv), IVLEN))
+ goto err;
+
+ if (!TEST_true(test_secret(s, out_master_secret,
+ (unsigned char *)server_ats_label,
+ strlen(server_ats_label), server_ats,
+ server_ats_key, server_ats_iv))) {
+ TEST_info("Server application data secret test failed");
+ goto err;
+ }
+
+ ret = 1;
+ err:
+ SSL_free(s);
+ SSL_CTX_free(ctx);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_handshake_secrets);
+ return 1;
+}
diff --git a/test/trace_api_test.c b/test/trace_api_test.c
new file mode 100644
index 000000000000..e6c4fdc28c71
--- /dev/null
+++ b/test/trace_api_test.c
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2022-2023 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/trace.h>
+
+#include "testutil.h"
+
+static int test_trace_categories(void)
+{
+ int cat_num;
+
+ for (cat_num = -1; cat_num <= OSSL_TRACE_CATEGORY_NUM + 1; ++cat_num) {
+ const char *cat_name = OSSL_trace_get_category_name(cat_num);
+ int is_cat_name_eq = 0;
+ int ret_cat_num;
+ int expected_ret;
+
+ switch (cat_num) {
+#define CASE(name) \
+ case OSSL_TRACE_CATEGORY_##name: \
+ is_cat_name_eq = TEST_str_eq(cat_name, #name); \
+ break
+
+ CASE(ALL);
+ CASE(TRACE);
+ CASE(INIT);
+ CASE(TLS);
+ CASE(TLS_CIPHER);
+ CASE(CONF);
+ CASE(ENGINE_TABLE);
+ CASE(ENGINE_REF_COUNT);
+ CASE(PKCS5V2);
+ CASE(PKCS12_KEYGEN);
+ CASE(PKCS12_DECRYPT);
+ CASE(X509V3_POLICY);
+ CASE(BN_CTX);
+ CASE(CMP);
+ CASE(STORE);
+ CASE(DECODER);
+ CASE(ENCODER);
+ CASE(REF_COUNT);
+#undef CASE
+ default:
+ is_cat_name_eq = TEST_ptr_null(cat_name);
+ break;
+ }
+
+ if (!TEST_true(is_cat_name_eq))
+ return 0;
+ ret_cat_num =
+ OSSL_trace_get_category_num(cat_name);
+ expected_ret = cat_name != NULL ? cat_num : -1;
+ if (!TEST_int_eq(expected_ret, ret_cat_num))
+ return 0;
+ }
+
+ return 1;
+}
+
+#ifndef OPENSSL_NO_TRACE
+static void put_trace_output(void)
+{
+ OSSL_TRACE_BEGIN(REF_COUNT) {
+ BIO_printf(trc_out, "Hello World\n");
+ BIO_printf(trc_out, "Good Bye Universe\n");
+ } OSSL_TRACE_END(REF_COUNT);
+}
+
+static int test_trace_channel(void)
+{
+ static const char expected[] = "xyz-\nHello World\nGood Bye Universe\n-abc\n";
+ static const char expected_len = sizeof(expected) - 1;
+ BIO *bio = NULL;
+ char *p_buf = NULL;
+ long len = 0;
+ int ret = 0;
+
+ bio = BIO_new(BIO_s_mem());
+ if (!TEST_ptr(bio))
+ goto end;
+
+ if (!TEST_int_eq(OSSL_trace_set_channel(OSSL_TRACE_CATEGORY_REF_COUNT, bio), 1))
+ goto end;
+
+ if (!TEST_true(OSSL_trace_enabled(OSSL_TRACE_CATEGORY_REF_COUNT)))
+ goto end;
+
+ if (!TEST_int_eq(OSSL_trace_set_prefix(OSSL_TRACE_CATEGORY_REF_COUNT, "xyz-"), 1))
+ goto end;
+ if (!TEST_int_eq(OSSL_trace_set_suffix(OSSL_TRACE_CATEGORY_REF_COUNT, "-abc"), 1))
+ goto end;
+
+ put_trace_output();
+ len = BIO_get_mem_data(bio, &p_buf);
+ if (!TEST_strn2_eq(p_buf, len, expected, expected_len))
+ goto end;
+ if (!TEST_int_eq(OSSL_trace_set_channel(OSSL_TRACE_CATEGORY_REF_COUNT, NULL), 1))
+ goto end;
+ bio = NULL;
+
+ ret = 1;
+ end:
+ BIO_free(bio);
+ return ret;
+}
+
+static int trace_cb_failure;
+static int trace_cb_called;
+
+static size_t trace_cb(const char *buffer, size_t count,
+ int category, int cmd, void *data)
+{
+ trace_cb_called = 1;
+ if (!TEST_true(category == OSSL_TRACE_CATEGORY_TRACE))
+ trace_cb_failure = 1;
+ return count;
+}
+
+static int test_trace_callback(void)
+{
+ int ret = 0;
+
+ if (!TEST_true(OSSL_trace_set_callback(OSSL_TRACE_CATEGORY_TRACE, trace_cb,
+ NULL)))
+ goto end;
+
+ put_trace_output();
+
+ if (!TEST_false(trace_cb_failure) || !TEST_true(trace_cb_called))
+ goto end;
+
+ ret = 1;
+ end:
+ return ret;
+}
+#endif
+
+OPT_TEST_DECLARE_USAGE("\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ ADD_TEST(test_trace_categories);
+#ifndef OPENSSL_NO_TRACE
+ ADD_TEST(test_trace_channel);
+ ADD_TEST(test_trace_callback);
+#endif
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+}
diff --git a/test/uitest.c b/test/uitest.c
new file mode 100644
index 000000000000..9bddfaebf372
--- /dev/null
+++ b/test/uitest.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2002-2022 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 <string.h>
+#include <openssl/opensslconf.h>
+#include <openssl/err.h>
+#include "apps_ui.h"
+#include "testutil.h"
+
+
+#include <openssl/ui.h>
+
+/* Old style PEM password callback */
+static int test_pem_password_cb(char *buf, int size, int rwflag, void *userdata)
+{
+ OPENSSL_strlcpy(buf, (char *)userdata, (size_t)size);
+ return strlen(buf);
+}
+
+/*
+ * Test wrapping old style PEM password callback in a UI method through the
+ * use of UI utility functions
+ */
+static int test_old(void)
+{
+ UI_METHOD *ui_method = NULL;
+ UI *ui = NULL;
+ char defpass[] = "password";
+ char pass[16];
+ int ok = 0;
+
+ if (!TEST_ptr(ui_method =
+ UI_UTIL_wrap_read_pem_callback( test_pem_password_cb, 0))
+ || !TEST_ptr(ui = UI_new_method(ui_method)))
+ goto err;
+
+ /* The wrapper passes the UI userdata as the callback userdata param */
+ UI_add_user_data(ui, defpass);
+
+ if (UI_add_input_string(ui, "prompt", UI_INPUT_FLAG_DEFAULT_PWD,
+ pass, 0, sizeof(pass) - 1) <= 0)
+ goto err;
+
+ switch (UI_process(ui)) {
+ case -2:
+ TEST_info("test_old: UI process interrupted or cancelled");
+ /* fall through */
+ case -1:
+ goto err;
+ default:
+ break;
+ }
+
+ if (TEST_str_eq(pass, defpass))
+ ok = 1;
+
+ err:
+ UI_free(ui);
+ UI_destroy_method(ui_method);
+
+ return ok;
+}
+
+/* Test of UI. This uses the UI method defined in apps/apps.c */
+static int test_new_ui(void)
+{
+ PW_CB_DATA cb_data = {
+ "password",
+ "prompt"
+ };
+ char pass[16];
+ int ok = 0;
+
+ (void)setup_ui_method();
+ if (TEST_int_gt(password_callback(pass, sizeof(pass), 0, &cb_data), 0)
+ && TEST_str_eq(pass, cb_data.password))
+ ok = 1;
+ destroy_ui_method();
+ return ok;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_old);
+ ADD_TEST(test_new_ui);
+ return 1;
+}
diff --git a/test/upcallstest.c b/test/upcallstest.c
new file mode 100644
index 000000000000..76899fee3de0
--- /dev/null
+++ b/test/upcallstest.c
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/objects.h>
+#include <openssl/crypto.h>
+#include <openssl/provider.h>
+#include "testutil.h"
+
+static const OSSL_ALGORITHM *obj_query(void *provctx, int operation_id,
+ int *no_cache)
+{
+ *no_cache = 0;
+ return NULL;
+}
+
+static const OSSL_DISPATCH obj_dispatch_table[] = {
+ { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void))obj_query },
+ { 0, NULL }
+};
+
+static OSSL_FUNC_core_obj_add_sigid_fn *c_obj_add_sigid = NULL;
+static OSSL_FUNC_core_obj_create_fn *c_obj_create = NULL;
+
+#define SIG_OID "1.3.6.1.4.1.16604.998877.1"
+#define SIG_SN "my-sig"
+#define SIG_LN "my-sig-long"
+#define DIGEST_OID "1.3.6.1.4.1.16604.998877.2"
+#define DIGEST_SN "my-digest"
+#define DIGEST_LN "my-digest-long"
+#define SIGALG_OID "1.3.6.1.4.1.16604.998877.3"
+#define SIGALG_SN "my-sigalg"
+#define SIGALG_LN "my-sigalg-long"
+
+static int obj_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out,
+ void **provctx)
+{
+ *provctx = (void *)handle;
+ *out = obj_dispatch_table;
+
+ for (; in->function_id != 0; in++) {
+ switch (in->function_id) {
+ case OSSL_FUNC_CORE_OBJ_ADD_SIGID:
+ c_obj_add_sigid = OSSL_FUNC_core_obj_add_sigid(in);
+ break;
+ case OSSL_FUNC_CORE_OBJ_CREATE:
+ c_obj_create = OSSL_FUNC_core_obj_create(in);
+ break;
+ break;
+ default:
+ /* Just ignore anything we don't understand */
+ break;
+ }
+ }
+
+ if (!c_obj_create(handle, DIGEST_OID, DIGEST_SN, DIGEST_LN)
+ || !c_obj_create(handle, SIG_OID, SIG_SN, SIG_LN)
+ || !c_obj_create(handle, SIGALG_OID, SIGALG_SN, SIGALG_LN))
+ return 0;
+
+ if (!c_obj_add_sigid(handle, SIGALG_OID, DIGEST_SN, SIG_LN))
+ return 0;
+
+ /* additional tests checking empty digest algs are accepted, too */
+ if (!c_obj_add_sigid(handle, SIGALG_OID, "", SIG_LN))
+ return 0;
+ if (!c_obj_add_sigid(handle, SIGALG_OID, NULL, SIG_LN))
+ return 0;
+ /* checking wrong digest alg name is rejected: */
+ if (c_obj_add_sigid(handle, SIGALG_OID, "NonsenseAlg", SIG_LN))
+ return 0;
+
+ return 1;
+}
+
+static int obj_create_test(void)
+{
+ OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
+ OSSL_PROVIDER *objprov = NULL;
+ int sigalgnid, digestnid, signid;
+ int testresult = 0;
+
+ if (!TEST_ptr(libctx))
+ goto err;
+
+ if (!TEST_true(OSSL_PROVIDER_add_builtin(libctx, "obj-prov",
+ obj_provider_init))
+ || !TEST_ptr(objprov = OSSL_PROVIDER_load(libctx, "obj-prov")))
+ goto err;
+
+ /* Check that the provider created the OIDs/NIDs we expected */
+ sigalgnid = OBJ_txt2nid(SIGALG_OID);
+ if (!TEST_int_ne(sigalgnid, NID_undef)
+ || !TEST_true(OBJ_find_sigid_algs(sigalgnid, &digestnid, &signid))
+ || !TEST_int_ne(digestnid, NID_undef)
+ || !TEST_int_ne(signid, NID_undef)
+ || !TEST_int_eq(digestnid, OBJ_sn2nid(DIGEST_SN))
+ || !TEST_int_eq(signid, OBJ_ln2nid(SIG_LN)))
+ goto err;
+
+ testresult = 1;
+ err:
+ OSSL_PROVIDER_unload(objprov);
+ OSSL_LIB_CTX_free(libctx);
+ return testresult;
+}
+
+int setup_tests(void)
+{
+
+ ADD_TEST(obj_create_test);
+
+ return 1;
+}
diff --git a/test/user_property_test.c b/test/user_property_test.c
new file mode 100644
index 000000000000..7b7ab62832f9
--- /dev/null
+++ b/test/user_property_test.c
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/core.h>
+#include <openssl/core_dispatch.h>
+#include <openssl/core_names.h>
+#include <openssl/provider.h>
+#include <openssl/crypto.h>
+#include <openssl/evp.h>
+#include "testutil.h"
+
+#define MYPROPERTIES "foo.bar=yes"
+
+static OSSL_FUNC_provider_query_operation_fn testprov_query;
+static OSSL_FUNC_digest_get_params_fn tmpmd_get_params;
+static OSSL_FUNC_digest_digest_fn tmpmd_digest;
+
+static int tmpmd_get_params(OSSL_PARAM params[])
+{
+ OSSL_PARAM *p = NULL;
+
+ p = OSSL_PARAM_locate(params, OSSL_DIGEST_PARAM_BLOCK_SIZE);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, 1))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DIGEST_PARAM_SIZE);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, 1))
+ return 0;
+
+ return 1;
+}
+
+static int tmpmd_digest(void *provctx, const unsigned char *in, size_t inl,
+ unsigned char *out, size_t *outl, size_t outsz)
+{
+ return 0;
+}
+
+static const OSSL_DISPATCH testprovmd_functions[] = {
+ { OSSL_FUNC_DIGEST_GET_PARAMS, (void (*)(void))tmpmd_get_params },
+ { OSSL_FUNC_DIGEST_DIGEST, (void (*)(void))tmpmd_digest },
+ { 0, NULL }
+};
+
+static const OSSL_ALGORITHM testprov_digests[] = {
+ { "testprovmd", MYPROPERTIES, testprovmd_functions },
+ { NULL, NULL, NULL }
+};
+
+static const OSSL_ALGORITHM *testprov_query(void *provctx,
+ int operation_id,
+ int *no_cache)
+{
+ *no_cache = 0;
+ return operation_id == OSSL_OP_DIGEST ? testprov_digests : NULL;
+}
+
+static const OSSL_DISPATCH testprov_dispatch_table[] = {
+ { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void))testprov_query },
+ { 0, NULL }
+};
+
+static int testprov_provider_init(const OSSL_CORE_HANDLE *handle,
+ const OSSL_DISPATCH *in,
+ const OSSL_DISPATCH **out,
+ void **provctx)
+{
+ *provctx = (void *)handle;
+ *out = testprov_dispatch_table;
+ return 1;
+}
+
+enum {
+ DEFAULT_PROPS_FIRST = 0,
+ DEFAULT_PROPS_AFTER_LOAD,
+ DEFAULT_PROPS_AFTER_FETCH,
+ DEFAULT_PROPS_FINAL
+};
+
+static int test_default_props_and_providers(int propsorder)
+{
+ OSSL_LIB_CTX *libctx;
+ OSSL_PROVIDER *testprov = NULL;
+ EVP_MD *testprovmd = NULL;
+ int res = 0;
+
+ if (!TEST_ptr(libctx = OSSL_LIB_CTX_new())
+ || !TEST_true(OSSL_PROVIDER_add_builtin(libctx, "testprov",
+ testprov_provider_init)))
+ goto err;
+
+ if (propsorder == DEFAULT_PROPS_FIRST
+ && !TEST_true(EVP_set_default_properties(libctx, MYPROPERTIES)))
+ goto err;
+
+ if (!TEST_ptr(testprov = OSSL_PROVIDER_load(libctx, "testprov")))
+ goto err;
+
+ if (propsorder == DEFAULT_PROPS_AFTER_LOAD
+ && !TEST_true(EVP_set_default_properties(libctx, MYPROPERTIES)))
+ goto err;
+
+ if (!TEST_ptr(testprovmd = EVP_MD_fetch(libctx, "testprovmd", NULL)))
+ goto err;
+
+ if (propsorder == DEFAULT_PROPS_AFTER_FETCH) {
+ if (!TEST_true(EVP_set_default_properties(libctx, MYPROPERTIES)))
+ goto err;
+ EVP_MD_free(testprovmd);
+ if (!TEST_ptr(testprovmd = EVP_MD_fetch(libctx, "testprovmd", NULL)))
+ goto err;
+ }
+
+ res = 1;
+ err:
+ EVP_MD_free(testprovmd);
+ OSSL_PROVIDER_unload(testprov);
+ OSSL_LIB_CTX_free(libctx);
+ return res;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(test_default_props_and_providers, DEFAULT_PROPS_FINAL);
+ return 1;
+}
diff --git a/test/v3-cert1.pem b/test/v3-cert1.pem
new file mode 100644
index 000000000000..0da253d5c340
--- /dev/null
+++ b/test/v3-cert1.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICjTCCAfigAwIBAgIEMaYgRzALBgkqhkiG9w0BAQQwRTELMAkGA1UEBhMCVVMx
+NjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlz
+dHJhdGlvbjAmFxE5NjA1MjgxMzQ5MDUrMDgwMBcROTgwNTI4MTM0OTA1KzA4MDAw
+ZzELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
+ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEgMAkGA1UEBRMCMTYwEwYDVQQDEwxTdGV2
+ZSBTY2hvY2gwWDALBgkqhkiG9w0BAQEDSQAwRgJBALrAwyYdgxmzNP/ts0Uyf6Bp
+miJYktU/w4NG67ULaN4B5CnEz7k57s9o3YY3LecETgQ5iQHmkwlYDTL2fTgVfw0C
+AQOjgaswgagwZAYDVR0ZAQH/BFowWDBWMFQxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
+Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
+DTALBgNVBAMTBENSTDEwFwYDVR0BAQH/BA0wC4AJODMyOTcwODEwMBgGA1UdAgQR
+MA8ECTgzMjk3MDgyM4ACBSAwDQYDVR0KBAYwBAMCBkAwCwYJKoZIhvcNAQEEA4GB
+AH2y1VCEw/A4zaXzSYZJTTUi3uawbbFiS2yxHvgf28+8Js0OHXk1H1w2d6qOHH21
+X82tZXd/0JtG0g1T9usFFBDvYK8O0ebgz/P5ELJnBL2+atObEuJy1ZZ0pBDWINR3
+WkDNLCGiTkCKp0F5EWIrVDwh54NNevkCQRZita+z4IBO
+-----END CERTIFICATE-----
diff --git a/test/v3-cert2.pem b/test/v3-cert2.pem
new file mode 100644
index 000000000000..de0723ff8de3
--- /dev/null
+++ b/test/v3-cert2.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICiTCCAfKgAwIBAgIEMeZfHzANBgkqhkiG9w0BAQQFADB9MQswCQYDVQQGEwJD
+YTEPMA0GA1UEBxMGTmVwZWFuMR4wHAYDVQQLExVObyBMaWFiaWxpdHkgQWNjZXB0
+ZWQxHzAdBgNVBAoTFkZvciBEZW1vIFB1cnBvc2VzIE9ubHkxHDAaBgNVBAMTE0Vu
+dHJ1c3QgRGVtbyBXZWIgQ0EwHhcNOTYwNzEyMTQyMDE1WhcNOTYxMDEyMTQyMDE1
+WjB0MSQwIgYJKoZIhvcNAQkBExVjb29rZUBpc3NsLmF0bC5ocC5jb20xCzAJBgNV
+BAYTAlVTMScwJQYDVQQLEx5IZXdsZXR0IFBhY2thcmQgQ29tcGFueSAoSVNTTCkx
+FjAUBgNVBAMTDVBhdWwgQS4gQ29va2UwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
+6ceSq9a9AU6g+zBwaL/yVmW1/9EE8s5you1mgjHnj0wAILuoB3L6rm6jmFRy7QZT
+G43IhVZdDua4e+5/n1ZslwIDAQABo2MwYTARBglghkgBhvhCAQEEBAMCB4AwTAYJ
+YIZIAYb4QgENBD8WPVRoaXMgY2VydGlmaWNhdGUgaXMgb25seSBpbnRlbmRlZCBm
+b3IgZGVtb25zdHJhdGlvbiBwdXJwb3Nlcy4wDQYJKoZIhvcNAQEEBQADgYEAi8qc
+F3zfFqy1sV8NhjwLVwOKuSfhR/Z8mbIEUeSTlnH3QbYt3HWZQ+vXI8mvtZoBc2Fz
+lexKeIkAZXCesqGbs6z6nCt16P6tmdfbZF3I3AWzLquPcOXjPf4HgstkyvVBn0Ap
+jAFN418KF/Cx4qyHB4cjdvLrRjjQLnb2+ibo7QU=
+-----END CERTIFICATE-----
diff --git a/test/v3_ca_exts.cnf b/test/v3_ca_exts.cnf
new file mode 100644
index 000000000000..3ad4cae8cccf
--- /dev/null
+++ b/test/v3_ca_exts.cnf
@@ -0,0 +1,5 @@
+basicConstraints = critical, CA:true
+keyUsage = cRLSign, keyCertSign
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always
+
diff --git a/test/v3ext.c b/test/v3ext.c
new file mode 100644
index 000000000000..88034db27155
--- /dev/null
+++ b/test/v3ext.c
@@ -0,0 +1,478 @@
+/*
+ * Copyright 2016-2022 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 <string.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/pem.h>
+#include <openssl/err.h>
+#include "internal/nelem.h"
+
+#include "testutil.h"
+
+static const char *infile;
+
+static int test_pathlen(void)
+{
+ X509 *x = NULL;
+ BIO *b = NULL;
+ long pathlen;
+ int ret = 0;
+
+ if (!TEST_ptr(b = BIO_new_file(infile, "r"))
+ || !TEST_ptr(x = PEM_read_bio_X509(b, NULL, NULL, NULL))
+ || !TEST_int_eq(pathlen = X509_get_pathlen(x), 6))
+ goto end;
+
+ ret = 1;
+
+end:
+ BIO_free(b);
+ X509_free(x);
+ return ret;
+}
+
+#ifndef OPENSSL_NO_RFC3779
+static int test_asid(void)
+{
+ ASN1_INTEGER *val1 = NULL, *val2 = NULL;
+ ASIdentifiers *asid1 = ASIdentifiers_new(), *asid2 = ASIdentifiers_new(),
+ *asid3 = ASIdentifiers_new(), *asid4 = ASIdentifiers_new();
+ int testresult = 0;
+
+ if (!TEST_ptr(asid1)
+ || !TEST_ptr(asid2)
+ || !TEST_ptr(asid3))
+ goto err;
+
+ if (!TEST_ptr(val1 = ASN1_INTEGER_new())
+ || !TEST_true(ASN1_INTEGER_set_int64(val1, 64496)))
+ goto err;
+
+ if (!TEST_true(X509v3_asid_add_id_or_range(asid1, V3_ASID_ASNUM, val1, NULL)))
+ goto err;
+
+ val1 = NULL;
+ if (!TEST_ptr(val2 = ASN1_INTEGER_new())
+ || !TEST_true(ASN1_INTEGER_set_int64(val2, 64497)))
+ goto err;
+
+ if (!TEST_true(X509v3_asid_add_id_or_range(asid2, V3_ASID_ASNUM, val2, NULL)))
+ goto err;
+
+ val2 = NULL;
+ if (!TEST_ptr(val1 = ASN1_INTEGER_new())
+ || !TEST_true(ASN1_INTEGER_set_int64(val1, 64496))
+ || !TEST_ptr(val2 = ASN1_INTEGER_new())
+ || !TEST_true(ASN1_INTEGER_set_int64(val2, 64497)))
+ goto err;
+
+ /*
+ * Just tests V3_ASID_ASNUM for now. Could be extended at some point to also
+ * test V3_ASID_RDI if we think it is worth it.
+ */
+ if (!TEST_true(X509v3_asid_add_id_or_range(asid3, V3_ASID_ASNUM, val1, val2)))
+ goto err;
+ val1 = val2 = NULL;
+
+ /* Actual subsets */
+ if (!TEST_true(X509v3_asid_subset(NULL, NULL))
+ || !TEST_true(X509v3_asid_subset(NULL, asid1))
+ || !TEST_true(X509v3_asid_subset(asid1, asid1))
+ || !TEST_true(X509v3_asid_subset(asid2, asid2))
+ || !TEST_true(X509v3_asid_subset(asid1, asid3))
+ || !TEST_true(X509v3_asid_subset(asid2, asid3))
+ || !TEST_true(X509v3_asid_subset(asid3, asid3))
+ || !TEST_true(X509v3_asid_subset(asid4, asid1))
+ || !TEST_true(X509v3_asid_subset(asid4, asid2))
+ || !TEST_true(X509v3_asid_subset(asid4, asid3)))
+ goto err;
+
+ /* Not subsets */
+ if (!TEST_false(X509v3_asid_subset(asid1, NULL))
+ || !TEST_false(X509v3_asid_subset(asid1, asid2))
+ || !TEST_false(X509v3_asid_subset(asid2, asid1))
+ || !TEST_false(X509v3_asid_subset(asid3, asid1))
+ || !TEST_false(X509v3_asid_subset(asid3, asid2))
+ || !TEST_false(X509v3_asid_subset(asid1, asid4))
+ || !TEST_false(X509v3_asid_subset(asid2, asid4))
+ || !TEST_false(X509v3_asid_subset(asid3, asid4)))
+ goto err;
+
+ testresult = 1;
+ err:
+ ASN1_INTEGER_free(val1);
+ ASN1_INTEGER_free(val2);
+ ASIdentifiers_free(asid1);
+ ASIdentifiers_free(asid2);
+ ASIdentifiers_free(asid3);
+ ASIdentifiers_free(asid4);
+ return testresult;
+}
+
+static struct ip_ranges_st {
+ const unsigned int afi;
+ const char *ip1;
+ const char *ip2;
+ int rorp;
+} ranges[] = {
+ { IANA_AFI_IPV4, "192.168.0.0", "192.168.0.1", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV4, "192.168.0.0", "192.168.0.2", IPAddressOrRange_addressRange},
+ { IANA_AFI_IPV4, "192.168.0.0", "192.168.0.3", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV4, "192.168.0.0", "192.168.0.254", IPAddressOrRange_addressRange},
+ { IANA_AFI_IPV4, "192.168.0.0", "192.168.0.255", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV4, "192.168.0.1", "192.168.0.255", IPAddressOrRange_addressRange},
+ { IANA_AFI_IPV4, "192.168.0.1", "192.168.0.1", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV4, "192.168.0.0", "192.168.255.255", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV4, "192.168.1.0", "192.168.255.255", IPAddressOrRange_addressRange},
+ { IANA_AFI_IPV6, "2001:0db8::0", "2001:0db8::1", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV6, "2001:0db8::0", "2001:0db8::2", IPAddressOrRange_addressRange},
+ { IANA_AFI_IPV6, "2001:0db8::0", "2001:0db8::3", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV6, "2001:0db8::0", "2001:0db8::fffe", IPAddressOrRange_addressRange},
+ { IANA_AFI_IPV6, "2001:0db8::0", "2001:0db8::ffff", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV6, "2001:0db8::1", "2001:0db8::ffff", IPAddressOrRange_addressRange},
+ { IANA_AFI_IPV6, "2001:0db8::1", "2001:0db8::1", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV6, "2001:0db8::0:0", "2001:0db8::ffff:ffff", IPAddressOrRange_addressPrefix},
+ { IANA_AFI_IPV6, "2001:0db8::1:0", "2001:0db8::ffff:ffff", IPAddressOrRange_addressRange}
+};
+
+static int check_addr(IPAddrBlocks *addr, int type)
+{
+ IPAddressFamily *fam;
+ IPAddressOrRange *aorr;
+
+ if (!TEST_int_eq(sk_IPAddressFamily_num(addr), 1))
+ return 0;
+
+ fam = sk_IPAddressFamily_value(addr, 0);
+ if (!TEST_ptr(fam))
+ return 0;
+
+ if (!TEST_int_eq(fam->ipAddressChoice->type, IPAddressChoice_addressesOrRanges))
+ return 0;
+
+ if (!TEST_int_eq(sk_IPAddressOrRange_num(fam->ipAddressChoice->u.addressesOrRanges), 1))
+ return 0;
+
+ aorr = sk_IPAddressOrRange_value(fam->ipAddressChoice->u.addressesOrRanges, 0);
+ if (!TEST_ptr(aorr))
+ return 0;
+
+ if (!TEST_int_eq(aorr->type, type))
+ return 0;
+
+ return 1;
+}
+
+static int test_addr_ranges(void)
+{
+ IPAddrBlocks *addr = NULL;
+ ASN1_OCTET_STRING *ip1 = NULL, *ip2 = NULL;
+ size_t i;
+ int testresult = 0;
+
+ for (i = 0; i < OSSL_NELEM(ranges); i++) {
+ addr = sk_IPAddressFamily_new_null();
+ if (!TEST_ptr(addr))
+ goto end;
+ /*
+ * Has the side effect of installing the comparison function onto the
+ * stack.
+ */
+ if (!TEST_true(X509v3_addr_canonize(addr)))
+ goto end;
+
+ ip1 = a2i_IPADDRESS(ranges[i].ip1);
+ if (!TEST_ptr(ip1))
+ goto end;
+ if (!TEST_true(ip1->length == 4 || ip1->length == 16))
+ goto end;
+ ip2 = a2i_IPADDRESS(ranges[i].ip2);
+ if (!TEST_ptr(ip2))
+ goto end;
+ if (!TEST_int_eq(ip2->length, ip1->length))
+ goto end;
+ if (!TEST_true(memcmp(ip1->data, ip2->data, ip1->length) <= 0))
+ goto end;
+
+ if (!TEST_true(X509v3_addr_add_range(addr, ranges[i].afi, NULL, ip1->data, ip2->data)))
+ goto end;
+
+ if (!TEST_true(X509v3_addr_is_canonical(addr)))
+ goto end;
+
+ if (!check_addr(addr, ranges[i].rorp))
+ goto end;
+
+ sk_IPAddressFamily_pop_free(addr, IPAddressFamily_free);
+ addr = NULL;
+ ASN1_OCTET_STRING_free(ip1);
+ ASN1_OCTET_STRING_free(ip2);
+ ip1 = ip2 = NULL;
+ }
+
+ testresult = 1;
+ end:
+ sk_IPAddressFamily_pop_free(addr, IPAddressFamily_free);
+ ASN1_OCTET_STRING_free(ip1);
+ ASN1_OCTET_STRING_free(ip2);
+ return testresult;
+}
+
+static int test_addr_fam_len(void)
+{
+ int testresult = 0;
+ IPAddrBlocks *addr = NULL;
+ IPAddressFamily *f1 = NULL;
+ ASN1_OCTET_STRING *ip1 = NULL, *ip2 = NULL;
+ unsigned char key[6];
+ unsigned int keylen;
+ unsigned afi = IANA_AFI_IPV4;
+
+ /* Create the IPAddrBlocks with a good IPAddressFamily */
+ addr = sk_IPAddressFamily_new_null();
+ if (!TEST_ptr(addr))
+ goto end;
+ ip1 = a2i_IPADDRESS(ranges[0].ip1);
+ if (!TEST_ptr(ip1))
+ goto end;
+ ip2 = a2i_IPADDRESS(ranges[0].ip2);
+ if (!TEST_ptr(ip2))
+ goto end;
+ if (!TEST_true(X509v3_addr_add_range(addr, ranges[0].afi, NULL, ip1->data, ip2->data)))
+ goto end;
+ if (!TEST_true(X509v3_addr_is_canonical(addr)))
+ goto end;
+
+ /* Create our malformed IPAddressFamily */
+ key[0] = (afi >> 8) & 0xFF;
+ key[1] = afi & 0xFF;
+ key[2] = 0xD;
+ key[3] = 0xE;
+ key[4] = 0xA;
+ key[5] = 0xD;
+ keylen = 6;
+ if ((f1 = IPAddressFamily_new()) == NULL)
+ goto end;
+ if (f1->ipAddressChoice == NULL &&
+ (f1->ipAddressChoice = IPAddressChoice_new()) == NULL)
+ goto end;
+ if (f1->addressFamily == NULL &&
+ (f1->addressFamily = ASN1_OCTET_STRING_new()) == NULL)
+ goto end;
+ if (!ASN1_OCTET_STRING_set(f1->addressFamily, key, keylen))
+ goto end;
+ if (!sk_IPAddressFamily_push(addr, f1))
+ goto end;
+
+ /* Shouldn't be able to canonize this as the len is > 3*/
+ if (!TEST_false(X509v3_addr_canonize(addr)))
+ goto end;
+
+ /* Create a well formed IPAddressFamily */
+ f1 = sk_IPAddressFamily_pop(addr);
+ IPAddressFamily_free(f1);
+
+ key[0] = (afi >> 8) & 0xFF;
+ key[1] = afi & 0xFF;
+ key[2] = 0x1;
+ keylen = 3;
+ if ((f1 = IPAddressFamily_new()) == NULL)
+ goto end;
+ if (f1->ipAddressChoice == NULL &&
+ (f1->ipAddressChoice = IPAddressChoice_new()) == NULL)
+ goto end;
+ if (f1->addressFamily == NULL &&
+ (f1->addressFamily = ASN1_OCTET_STRING_new()) == NULL)
+ goto end;
+ if (!ASN1_OCTET_STRING_set(f1->addressFamily, key, keylen))
+ goto end;
+
+ /* Mark this as inheritance so we skip some of the is_canonize checks */
+ f1->ipAddressChoice->type = IPAddressChoice_inherit;
+ if (!sk_IPAddressFamily_push(addr, f1))
+ goto end;
+
+ /* Should be able to canonize now */
+ if (!TEST_true(X509v3_addr_canonize(addr)))
+ goto end;
+
+ testresult = 1;
+ end:
+ sk_IPAddressFamily_pop_free(addr, IPAddressFamily_free);
+ ASN1_OCTET_STRING_free(ip1);
+ ASN1_OCTET_STRING_free(ip2);
+ return testresult;
+}
+
+static struct extvalues_st {
+ const char *value;
+ int pass;
+} extvalues[] = {
+ /* No prefix is ok */
+ { "sbgp-ipAddrBlock = IPv4:192.0.0.1\n", 1 },
+ { "sbgp-ipAddrBlock = IPv4:192.0.0.0/0\n", 1 },
+ { "sbgp-ipAddrBlock = IPv4:192.0.0.0/1\n", 1 },
+ { "sbgp-ipAddrBlock = IPv4:192.0.0.0/32\n", 1 },
+ /* Prefix is too long */
+ { "sbgp-ipAddrBlock = IPv4:192.0.0.0/33\n", 0 },
+ /* Unreasonably large prefix */
+ { "sbgp-ipAddrBlock = IPv4:192.0.0.0/12341234\n", 0 },
+ /* Invalid IP addresses */
+ { "sbgp-ipAddrBlock = IPv4:192.0.0\n", 0 },
+ { "sbgp-ipAddrBlock = IPv4:256.0.0.0\n", 0 },
+ { "sbgp-ipAddrBlock = IPv4:-1.0.0.0\n", 0 },
+ { "sbgp-ipAddrBlock = IPv4:192.0.0.0.0\n", 0 },
+ { "sbgp-ipAddrBlock = IPv3:192.0.0.0\n", 0 },
+
+ /* IPv6 */
+ /* No prefix is ok */
+ { "sbgp-ipAddrBlock = IPv6:2001:db8::\n", 1 },
+ { "sbgp-ipAddrBlock = IPv6:2001::db8\n", 1 },
+ { "sbgp-ipAddrBlock = IPv6:2001:0db8:0000:0000:0000:0000:0000:0000\n", 1 },
+ { "sbgp-ipAddrBlock = IPv6:2001:db8::/0\n", 1 },
+ { "sbgp-ipAddrBlock = IPv6:2001:db8::/1\n", 1 },
+ { "sbgp-ipAddrBlock = IPv6:2001:db8::/32\n", 1 },
+ { "sbgp-ipAddrBlock = IPv6:2001:0db8:0000:0000:0000:0000:0000:0000/32\n", 1 },
+ { "sbgp-ipAddrBlock = IPv6:2001:db8::/128\n", 1 },
+ /* Prefix is too long */
+ { "sbgp-ipAddrBlock = IPv6:2001:db8::/129\n", 0 },
+ /* Unreasonably large prefix */
+ { "sbgp-ipAddrBlock = IPv6:2001:db8::/12341234\n", 0 },
+ /* Invalid IP addresses */
+ /* Not enough blocks of numbers */
+ { "sbgp-ipAddrBlock = IPv6:2001:0db8:0000:0000:0000:0000:0000\n", 0 },
+ /* Too many blocks of numbers */
+ { "sbgp-ipAddrBlock = IPv6:2001:0db8:0000:0000:0000:0000:0000:0000:0000\n", 0 },
+ /* First value too large */
+ { "sbgp-ipAddrBlock = IPv6:1ffff:0db8:0000:0000:0000:0000:0000:0000\n", 0 },
+ /* First value with invalid characters */
+ { "sbgp-ipAddrBlock = IPv6:fffg:0db8:0000:0000:0000:0000:0000:0000\n", 0 },
+ /* First value is negative */
+ { "sbgp-ipAddrBlock = IPv6:-1:0db8:0000:0000:0000:0000:0000:0000\n", 0 }
+};
+
+static int test_ext_syntax(void)
+{
+ size_t i;
+ int testresult = 1;
+
+ for (i = 0; i < OSSL_NELEM(extvalues); i++) {
+ X509V3_CTX ctx;
+ BIO *extbio = BIO_new_mem_buf(extvalues[i].value,
+ strlen(extvalues[i].value));
+ CONF *conf;
+ long eline;
+
+ if (!TEST_ptr(extbio))
+ return 0 ;
+
+ conf = NCONF_new_ex(NULL, NULL);
+ if (!TEST_ptr(conf)) {
+ BIO_free(extbio);
+ return 0;
+ }
+ if (!TEST_long_gt(NCONF_load_bio(conf, extbio, &eline), 0)) {
+ testresult = 0;
+ } else {
+ X509V3_set_ctx_test(&ctx);
+ X509V3_set_nconf(&ctx, conf);
+
+ if (extvalues[i].pass) {
+ if (!TEST_true(X509V3_EXT_add_nconf(conf, &ctx, "default",
+ NULL))) {
+ TEST_info("Value: %s", extvalues[i].value);
+ testresult = 0;
+ }
+ } else {
+ ERR_set_mark();
+ if (!TEST_false(X509V3_EXT_add_nconf(conf, &ctx, "default",
+ NULL))) {
+ testresult = 0;
+ TEST_info("Value: %s", extvalues[i].value);
+ ERR_clear_last_mark();
+ } else {
+ ERR_pop_to_mark();
+ }
+ }
+ }
+ BIO_free(extbio);
+ NCONF_free(conf);
+ }
+
+ return testresult;
+}
+
+static int test_addr_subset(void)
+{
+ int i;
+ int ret = 0;
+ IPAddrBlocks *addrEmpty = NULL;
+ IPAddrBlocks *addr[3] = { NULL, NULL };
+ ASN1_OCTET_STRING *ip1[3] = { NULL, NULL };
+ ASN1_OCTET_STRING *ip2[3] = { NULL, NULL };
+ int sz = OSSL_NELEM(addr);
+
+ for (i = 0; i < sz; ++i) {
+ /* Create the IPAddrBlocks with a good IPAddressFamily */
+ if (!TEST_ptr(addr[i] = sk_IPAddressFamily_new_null())
+ || !TEST_ptr(ip1[i] = a2i_IPADDRESS(ranges[i].ip1))
+ || !TEST_ptr(ip2[i] = a2i_IPADDRESS(ranges[i].ip2))
+ || !TEST_true(X509v3_addr_add_range(addr[i], ranges[i].afi, NULL,
+ ip1[i]->data, ip2[i]->data)))
+ goto end;
+ }
+
+ ret = TEST_ptr(addrEmpty = sk_IPAddressFamily_new_null())
+ && TEST_true(X509v3_addr_subset(NULL, NULL))
+ && TEST_true(X509v3_addr_subset(NULL, addr[0]))
+ && TEST_true(X509v3_addr_subset(addrEmpty, addr[0]))
+ && TEST_true(X509v3_addr_subset(addr[0], addr[0]))
+ && TEST_true(X509v3_addr_subset(addr[0], addr[1]))
+ && TEST_true(X509v3_addr_subset(addr[0], addr[2]))
+ && TEST_true(X509v3_addr_subset(addr[1], addr[2]))
+ && TEST_false(X509v3_addr_subset(addr[0], NULL))
+ && TEST_false(X509v3_addr_subset(addr[1], addr[0]))
+ && TEST_false(X509v3_addr_subset(addr[2], addr[1]))
+ && TEST_false(X509v3_addr_subset(addr[0], addrEmpty));
+end:
+ sk_IPAddressFamily_pop_free(addrEmpty, IPAddressFamily_free);
+ for (i = 0; i < sz; ++i) {
+ sk_IPAddressFamily_pop_free(addr[i], IPAddressFamily_free);
+ ASN1_OCTET_STRING_free(ip1[i]);
+ ASN1_OCTET_STRING_free(ip2[i]);
+ }
+ return ret;
+}
+
+#endif /* OPENSSL_NO_RFC3779 */
+
+OPT_TEST_DECLARE_USAGE("cert.pem\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(infile = test_get_argument(0)))
+ return 0;
+
+ ADD_TEST(test_pathlen);
+#ifndef OPENSSL_NO_RFC3779
+ ADD_TEST(test_asid);
+ ADD_TEST(test_addr_ranges);
+ ADD_TEST(test_ext_syntax);
+ ADD_TEST(test_addr_fam_len);
+ ADD_TEST(test_addr_subset);
+#endif /* OPENSSL_NO_RFC3779 */
+ return 1;
+}
diff --git a/test/v3nametest.c b/test/v3nametest.c
new file mode 100644
index 000000000000..3609eba04552
--- /dev/null
+++ b/test/v3nametest.c
@@ -0,0 +1,716 @@
+/*
+ * Copyright 2012-2023 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/e_os2.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include "internal/nelem.h"
+#include "testutil.h"
+
+static const char *const names[] = {
+ "a", "b", ".", "*", "@",
+ ".a", "a.", ".b", "b.", ".*", "*.", "*@", "@*", "a@", "@a", "b@", "..",
+ "-example.com", "example-.com",
+ "@@", "**", "*.com", "*com", "*.*.com", "*com", "com*", "*example.com",
+ "*@example.com", "test@*.example.com", "example.com", "www.example.com",
+ "test.www.example.com", "*.example.com", "*.www.example.com",
+ "test.*.example.com", "www.*.com",
+ ".www.example.com", "*www.example.com",
+ "example.net", "xn--rger-koa.example.com",
+ "*.xn--rger-koa.example.com", "www.xn--rger-koa.example.com",
+ "*.good--example.com", "www.good--example.com",
+ "*.xn--bar.com", "xn--foo.xn--bar.com",
+ "a.example.com", "b.example.com",
+ "postmaster@example.com", "Postmaster@example.com",
+ "postmaster@EXAMPLE.COM",
+ NULL
+};
+
+static const char *const exceptions[] = {
+ "set CN: host: [*.example.com] matches [a.example.com]",
+ "set CN: host: [*.example.com] matches [b.example.com]",
+ "set CN: host: [*.example.com] matches [www.example.com]",
+ "set CN: host: [*.example.com] matches [xn--rger-koa.example.com]",
+ "set CN: host: [*.www.example.com] matches [test.www.example.com]",
+ "set CN: host: [*.www.example.com] matches [.www.example.com]",
+ "set CN: host: [*www.example.com] matches [www.example.com]",
+ "set CN: host: [test.www.example.com] matches [.www.example.com]",
+ "set CN: host: [*.xn--rger-koa.example.com] matches [www.xn--rger-koa.example.com]",
+ "set CN: host: [*.xn--bar.com] matches [xn--foo.xn--bar.com]",
+ "set CN: host: [*.good--example.com] matches [www.good--example.com]",
+ "set CN: host-no-wildcards: [*.www.example.com] matches [.www.example.com]",
+ "set CN: host-no-wildcards: [test.www.example.com] matches [.www.example.com]",
+ "set emailAddress: email: [postmaster@example.com] does not match [Postmaster@example.com]",
+ "set emailAddress: email: [postmaster@EXAMPLE.COM] does not match [Postmaster@example.com]",
+ "set emailAddress: email: [Postmaster@example.com] does not match [postmaster@example.com]",
+ "set emailAddress: email: [Postmaster@example.com] does not match [postmaster@EXAMPLE.COM]",
+ "set dnsName: host: [*.example.com] matches [www.example.com]",
+ "set dnsName: host: [*.example.com] matches [a.example.com]",
+ "set dnsName: host: [*.example.com] matches [b.example.com]",
+ "set dnsName: host: [*.example.com] matches [xn--rger-koa.example.com]",
+ "set dnsName: host: [*.www.example.com] matches [test.www.example.com]",
+ "set dnsName: host-no-wildcards: [*.www.example.com] matches [.www.example.com]",
+ "set dnsName: host-no-wildcards: [test.www.example.com] matches [.www.example.com]",
+ "set dnsName: host: [*.www.example.com] matches [.www.example.com]",
+ "set dnsName: host: [*www.example.com] matches [www.example.com]",
+ "set dnsName: host: [test.www.example.com] matches [.www.example.com]",
+ "set dnsName: host: [*.xn--rger-koa.example.com] matches [www.xn--rger-koa.example.com]",
+ "set dnsName: host: [*.xn--bar.com] matches [xn--foo.xn--bar.com]",
+ "set dnsName: host: [*.good--example.com] matches [www.good--example.com]",
+ "set rfc822Name: email: [postmaster@example.com] does not match [Postmaster@example.com]",
+ "set rfc822Name: email: [Postmaster@example.com] does not match [postmaster@example.com]",
+ "set rfc822Name: email: [Postmaster@example.com] does not match [postmaster@EXAMPLE.COM]",
+ "set rfc822Name: email: [postmaster@EXAMPLE.COM] does not match [Postmaster@example.com]",
+ NULL
+};
+
+static int is_exception(const char *msg)
+{
+ const char *const *p;
+
+ for (p = exceptions; *p; ++p)
+ if (strcmp(msg, *p) == 0)
+ return 1;
+ return 0;
+}
+
+static int set_cn(X509 *crt, ...)
+{
+ int ret = 0;
+ X509_NAME *n = NULL;
+ va_list ap;
+
+ va_start(ap, crt);
+ n = X509_NAME_new();
+ if (n == NULL)
+ goto out;
+
+ while (1) {
+ int nid;
+ const char *name;
+
+ nid = va_arg(ap, int);
+ if (nid == 0)
+ break;
+ name = va_arg(ap, const char *);
+ if (!X509_NAME_add_entry_by_NID(n, nid, MBSTRING_ASC,
+ (unsigned char *)name, -1, -1, 1))
+ goto out;
+ }
+ if (!X509_set_subject_name(crt, n))
+ goto out;
+ ret = 1;
+ out:
+ X509_NAME_free(n);
+ va_end(ap);
+ return ret;
+}
+
+/*-
+int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
+X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
+ int nid, int crit, ASN1_OCTET_STRING *data);
+int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
+*/
+
+static int set_altname(X509 *crt, ...)
+{
+ int ret = 0;
+ GENERAL_NAMES *gens = NULL;
+ GENERAL_NAME *gen = NULL;
+ ASN1_IA5STRING *ia5 = NULL;
+ va_list ap;
+ va_start(ap, crt);
+ gens = sk_GENERAL_NAME_new_null();
+ if (gens == NULL)
+ goto out;
+ while (1) {
+ int type;
+ const char *name;
+ type = va_arg(ap, int);
+ if (type == 0)
+ break;
+ name = va_arg(ap, const char *);
+
+ gen = GENERAL_NAME_new();
+ if (gen == NULL)
+ goto out;
+ ia5 = ASN1_IA5STRING_new();
+ if (ia5 == NULL)
+ goto out;
+ if (!ASN1_STRING_set(ia5, name, -1))
+ goto out;
+ switch (type) {
+ case GEN_EMAIL:
+ case GEN_DNS:
+ GENERAL_NAME_set0_value(gen, type, ia5);
+ ia5 = NULL;
+ break;
+ default:
+ abort();
+ }
+ sk_GENERAL_NAME_push(gens, gen);
+ gen = NULL;
+ }
+ if (!X509_add1_ext_i2d(crt, NID_subject_alt_name, gens, 0, 0))
+ goto out;
+ ret = 1;
+ out:
+ ASN1_IA5STRING_free(ia5);
+ GENERAL_NAME_free(gen);
+ GENERAL_NAMES_free(gens);
+ va_end(ap);
+ return ret;
+}
+
+static int set_cn1(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_commonName, name, 0);
+}
+
+static int set_cn_and_email(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_commonName, name,
+ NID_pkcs9_emailAddress, "dummy@example.com", 0);
+}
+
+static int set_cn2(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_commonName, "dummy value",
+ NID_commonName, name, 0);
+}
+
+static int set_cn3(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_commonName, name,
+ NID_commonName, "dummy value", 0);
+}
+
+static int set_email1(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_pkcs9_emailAddress, name, 0);
+}
+
+static int set_email2(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_pkcs9_emailAddress, "dummy@example.com",
+ NID_pkcs9_emailAddress, name, 0);
+}
+
+static int set_email3(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_pkcs9_emailAddress, name,
+ NID_pkcs9_emailAddress, "dummy@example.com", 0);
+}
+
+static int set_email_and_cn(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_pkcs9_emailAddress, name,
+ NID_commonName, "www.example.org", 0);
+}
+
+static int set_altname_dns(X509 *crt, const char *name)
+{
+ return set_altname(crt, GEN_DNS, name, 0);
+}
+
+static int set_altname_email(X509 *crt, const char *name)
+{
+ return set_altname(crt, GEN_EMAIL, name, 0);
+}
+
+struct set_name_fn {
+ int (*fn) (X509 *, const char *);
+ const char *name;
+ int host;
+ int email;
+};
+
+static const struct set_name_fn name_fns[] = {
+ {set_cn1, "set CN", 1, 0},
+ {set_cn2, "set CN", 1, 0},
+ {set_cn3, "set CN", 1, 0},
+ {set_cn_and_email, "set CN", 1, 0},
+ {set_email1, "set emailAddress", 0, 1},
+ {set_email2, "set emailAddress", 0, 1},
+ {set_email3, "set emailAddress", 0, 1},
+ {set_email_and_cn, "set emailAddress", 0, 1},
+ {set_altname_dns, "set dnsName", 1, 0},
+ {set_altname_email, "set rfc822Name", 0, 1},
+};
+
+static X509 *make_cert(void)
+{
+ X509 *crt = NULL;
+
+ if (!TEST_ptr(crt = X509_new()))
+ return NULL;
+ if (!TEST_true(X509_set_version(crt, X509_VERSION_3))) {
+ X509_free(crt);
+ return NULL;
+ }
+ return crt;
+}
+
+static int check_message(const struct set_name_fn *fn, const char *op,
+ const char *nameincert, int match, const char *name)
+{
+ char msg[1024];
+
+ if (match < 0)
+ return 1;
+ BIO_snprintf(msg, sizeof(msg), "%s: %s: [%s] %s [%s]",
+ fn->name, op, nameincert,
+ match ? "matches" : "does not match", name);
+ if (is_exception(msg))
+ return 1;
+ TEST_error("%s", msg);
+ return 0;
+}
+
+static int run_cert(X509 *crt, const char *nameincert,
+ const struct set_name_fn *fn)
+{
+ const char *const *pname = names;
+ int failed = 0;
+
+ for (; *pname != NULL; ++pname) {
+ int samename = OPENSSL_strcasecmp(nameincert, *pname) == 0;
+ size_t namelen = strlen(*pname);
+ char *name = OPENSSL_malloc(namelen + 1);
+ int match, ret;
+
+ if (!TEST_ptr(name))
+ return 0;
+ memcpy(name, *pname, namelen + 1);
+
+ match = -1;
+ if (!TEST_int_ge(ret = X509_check_host(crt, name, namelen, 0, NULL),
+ 0)) {
+ failed = 1;
+ } else if (fn->host) {
+ if (ret == 1 && !samename)
+ match = 1;
+ if (ret == 0 && samename)
+ match = 0;
+ } else if (ret == 1)
+ match = 1;
+ if (!TEST_true(check_message(fn, "host", nameincert, match, *pname)))
+ failed = 1;
+
+ match = -1;
+ if (!TEST_int_ge(ret = X509_check_host(crt, name, namelen,
+ X509_CHECK_FLAG_NO_WILDCARDS,
+ NULL), 0)) {
+ failed = 1;
+ } else if (fn->host) {
+ if (ret == 1 && !samename)
+ match = 1;
+ if (ret == 0 && samename)
+ match = 0;
+ } else if (ret == 1)
+ match = 1;
+ if (!TEST_true(check_message(fn, "host-no-wildcards",
+ nameincert, match, *pname)))
+ failed = 1;
+
+ match = -1;
+ ret = X509_check_email(crt, name, namelen, 0);
+ if (fn->email) {
+ if (ret && !samename)
+ match = 1;
+ if (!ret && samename && strchr(nameincert, '@') != NULL)
+ match = 0;
+ } else if (ret)
+ match = 1;
+ if (!TEST_true(check_message(fn, "email", nameincert, match, *pname)))
+ failed = 1;
+ OPENSSL_free(name);
+ }
+
+ return failed == 0;
+}
+
+static int call_run_cert(int i)
+{
+ int failed = 0;
+ const struct set_name_fn *pfn = &name_fns[i];
+ X509 *crt;
+ const char *const *pname;
+
+ TEST_info("%s", pfn->name);
+ for (pname = names; *pname != NULL; pname++) {
+ if (!TEST_ptr(crt = make_cert())
+ || !TEST_true(pfn->fn(crt, *pname))
+ || !run_cert(crt, *pname, pfn))
+ failed = 1;
+ X509_free(crt);
+ }
+ return failed == 0;
+}
+
+static struct gennamedata {
+ const unsigned char der[22];
+ size_t derlen;
+} gennames[] = {
+ {
+ /*
+ * [0] {
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
+ * [0] {
+ * SEQUENCE {}
+ * }
+ * }
+ */
+ {
+ 0xa0, 0x13, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x02, 0x30, 0x00
+ },
+ 21
+ }, {
+ /*
+ * [0] {
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
+ * [0] {
+ * [APPLICATION 0] {}
+ * }
+ * }
+ */
+ {
+ 0xa0, 0x13, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x02, 0x60, 0x00
+ },
+ 21
+ }, {
+ /*
+ * [0] {
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
+ * [0] {
+ * UTF8String { "a" }
+ * }
+ * }
+ */
+ {
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x0c, 0x01, 0x61
+ },
+ 22
+ }, {
+ /*
+ * [0] {
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.2 }
+ * [0] {
+ * UTF8String { "a" }
+ * }
+ * }
+ */
+ {
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x02, 0xa0, 0x03, 0x0c, 0x01, 0x61
+ },
+ 22
+ }, {
+ /*
+ * [0] {
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
+ * [0] {
+ * UTF8String { "b" }
+ * }
+ * }
+ */
+ {
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x0c, 0x01, 0x62
+ },
+ 22
+ }, {
+ /*
+ * [0] {
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
+ * [0] {
+ * BOOLEAN { TRUE }
+ * }
+ * }
+ */
+ {
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x01, 0x01, 0xff
+ },
+ 22
+ }, {
+ /*
+ * [0] {
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
+ * [0] {
+ * BOOLEAN { FALSE }
+ * }
+ * }
+ */
+ {
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x01, 0x01, 0x00
+ },
+ 22
+ }, {
+ /* [1 PRIMITIVE] { "a" } */
+ {
+ 0x81, 0x01, 0x61
+ },
+ 3
+ }, {
+ /* [1 PRIMITIVE] { "b" } */
+ {
+ 0x81, 0x01, 0x62
+ },
+ 3
+ }, {
+ /* [2 PRIMITIVE] { "a" } */
+ {
+ 0x82, 0x01, 0x61
+ },
+ 3
+ }, {
+ /* [2 PRIMITIVE] { "b" } */
+ {
+ 0x82, 0x01, 0x62
+ },
+ 3
+ }, {
+ /*
+ * [4] {
+ * SEQUENCE {
+ * SET {
+ * SEQUENCE {
+ * # commonName
+ * OBJECT_IDENTIFIER { 2.5.4.3 }
+ * UTF8String { "a" }
+ * }
+ * }
+ * }
+ * }
+ */
+ {
+ 0xa4, 0x0e, 0x30, 0x0c, 0x31, 0x0a, 0x30, 0x08, 0x06, 0x03, 0x55,
+ 0x04, 0x03, 0x0c, 0x01, 0x61
+ },
+ 16
+ }, {
+ /*
+ * [4] {
+ * SEQUENCE {
+ * SET {
+ * SEQUENCE {
+ * # commonName
+ * OBJECT_IDENTIFIER { 2.5.4.3 }
+ * UTF8String { "b" }
+ * }
+ * }
+ * }
+ * }
+ */
+ {
+ 0xa4, 0x0e, 0x30, 0x0c, 0x31, 0x0a, 0x30, 0x08, 0x06, 0x03, 0x55,
+ 0x04, 0x03, 0x0c, 0x01, 0x62
+ },
+ 16
+ }, {
+ /*
+ * [5] {
+ * [1] {
+ * UTF8String { "a" }
+ * }
+ * }
+ */
+ {
+ 0xa5, 0x05, 0xa1, 0x03, 0x0c, 0x01, 0x61
+ },
+ 7
+ }, {
+ /*
+ * [5] {
+ * [1] {
+ * UTF8String { "b" }
+ * }
+ * }
+ */
+ {
+ 0xa5, 0x05, 0xa1, 0x03, 0x0c, 0x01, 0x62
+ },
+ 7
+ }, {
+ /*
+ * [5] {
+ * [0] {
+ * UTF8String {}
+ * }
+ * [1] {
+ * UTF8String { "a" }
+ * }
+ * }
+ */
+ {
+ 0xa5, 0x09, 0xa0, 0x02, 0x0c, 0x00, 0xa1, 0x03, 0x0c, 0x01, 0x61
+ },
+ 11
+ }, {
+ /*
+ * [5] {
+ * [0] {
+ * UTF8String { "a" }
+ * }
+ * [1] {
+ * UTF8String { "a" }
+ * }
+ * }
+ */
+ {
+ 0xa5, 0x0a, 0xa0, 0x03, 0x0c, 0x01, 0x61, 0xa1, 0x03, 0x0c, 0x01,
+ 0x61
+ },
+ 12
+ }, {
+ /*
+ * [5] {
+ * [0] {
+ * UTF8String { "b" }
+ * }
+ * [1] {
+ * UTF8String { "a" }
+ * }
+ * }
+ */
+ {
+ 0xa5, 0x0a, 0xa0, 0x03, 0x0c, 0x01, 0x62, 0xa1, 0x03, 0x0c, 0x01,
+ 0x61
+ },
+ 12
+ }, {
+ /* [6 PRIMITIVE] { "a" } */
+ {
+ 0x86, 0x01, 0x61
+ },
+ 3
+ }, {
+ /* [6 PRIMITIVE] { "b" } */
+ {
+ 0x86, 0x01, 0x62
+ },
+ 3
+ }, {
+ /* [7 PRIMITIVE] { `11111111` } */
+ {
+ 0x87, 0x04, 0x11, 0x11, 0x11, 0x11
+ },
+ 6
+ }, {
+ /* [7 PRIMITIVE] { `22222222`} */
+ {
+ 0x87, 0x04, 0x22, 0x22, 0x22, 0x22
+ },
+ 6
+ }, {
+ /* [7 PRIMITIVE] { `11111111111111111111111111111111` } */
+ {
+ 0x87, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11
+ },
+ 18
+ }, {
+ /* [7 PRIMITIVE] { `22222222222222222222222222222222` } */
+ {
+ 0x87, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22
+ },
+ 18
+ }, {
+ /* [8 PRIMITIVE] { 1.2.840.113554.4.1.72585.2.1 } */
+ {
+ 0x88, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84,
+ 0xb7, 0x09, 0x02, 0x01
+ },
+ 15
+ }, {
+ /* [8 PRIMITIVE] { 1.2.840.113554.4.1.72585.2.2 } */
+ {
+ 0x88, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84,
+ 0xb7, 0x09, 0x02, 0x02
+ },
+ 15
+ }, {
+ /*
+ * Regression test for CVE-2023-0286.
+ */
+ {
+ 0xa3, 0x00
+ },
+ 2
+ }
+};
+
+static int test_GENERAL_NAME_cmp(void)
+{
+ size_t i, j;
+ GENERAL_NAME **namesa = OPENSSL_malloc(sizeof(*namesa)
+ * OSSL_NELEM(gennames));
+ GENERAL_NAME **namesb = OPENSSL_malloc(sizeof(*namesb)
+ * OSSL_NELEM(gennames));
+ int testresult = 0;
+
+ if (!TEST_ptr(namesa) || !TEST_ptr(namesb))
+ goto end;
+
+ for (i = 0; i < OSSL_NELEM(gennames); i++) {
+ const unsigned char *derp = gennames[i].der;
+
+ /*
+ * We create two versions of each GENERAL_NAME so that we ensure when
+ * we compare them they are always different pointers.
+ */
+ namesa[i] = d2i_GENERAL_NAME(NULL, &derp, gennames[i].derlen);
+ derp = gennames[i].der;
+ namesb[i] = d2i_GENERAL_NAME(NULL, &derp, gennames[i].derlen);
+ if (!TEST_ptr(namesa[i]) || !TEST_ptr(namesb[i]))
+ goto end;
+ }
+
+ /* Every name should be equal to itself and not equal to any others. */
+ for (i = 0; i < OSSL_NELEM(gennames); i++) {
+ for (j = 0; j < OSSL_NELEM(gennames); j++) {
+ if (i == j) {
+ if (!TEST_int_eq(GENERAL_NAME_cmp(namesa[i], namesb[j]), 0))
+ goto end;
+ } else {
+ if (!TEST_int_ne(GENERAL_NAME_cmp(namesa[i], namesb[j]), 0))
+ goto end;
+ }
+ }
+ }
+ testresult = 1;
+
+ end:
+ for (i = 0; i < OSSL_NELEM(gennames); i++) {
+ if (namesa != NULL)
+ GENERAL_NAME_free(namesa[i]);
+ if (namesb != NULL)
+ GENERAL_NAME_free(namesb[i]);
+ }
+ OPENSSL_free(namesa);
+ OPENSSL_free(namesb);
+
+ return testresult;
+}
+
+int setup_tests(void)
+{
+ ADD_ALL_TESTS(call_run_cert, OSSL_NELEM(name_fns));
+ ADD_TEST(test_GENERAL_NAME_cmp);
+ return 1;
+}
diff --git a/test/verify_extra_test.c b/test/verify_extra_test.c
new file mode 100644
index 000000000000..5f664f531bd8
--- /dev/null
+++ b/test/verify_extra_test.c
@@ -0,0 +1,341 @@
+/*
+ * Copyright 2015-2022 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 <string.h>
+#include <openssl/crypto.h>
+#include <openssl/bio.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/pem.h>
+#include <openssl/err.h>
+#include "testutil.h"
+
+static const char *certs_dir;
+static char *root_f = NULL;
+static char *roots_f = NULL;
+static char *untrusted_f = NULL;
+static char *bad_f = NULL;
+static char *req_f = NULL;
+static char *sroot_cert = NULL;
+static char *ca_cert = NULL;
+static char *ee_cert = NULL;
+
+#define load_cert_from_file(file) load_cert_pem(file, NULL)
+
+/*-
+ * Test for CVE-2015-1793 (Alternate Chains Certificate Forgery)
+ *
+ * Chain is as follows:
+ *
+ * rootCA (self-signed)
+ * |
+ * interCA
+ * |
+ * subinterCA subinterCA (self-signed)
+ * | |
+ * leaf ------------------
+ * |
+ * bad
+ *
+ * rootCA, interCA, subinterCA, subinterCA (ss) all have CA=TRUE
+ * leaf and bad have CA=FALSE
+ *
+ * subinterCA and subinterCA (ss) have the same subject name and keys
+ *
+ * interCA (but not rootCA) and subinterCA (ss) are in the trusted store
+ * (roots.pem)
+ * leaf and subinterCA are in the untrusted list (untrusted.pem)
+ * bad is the certificate being verified (bad.pem)
+ *
+ * Versions vulnerable to CVE-2015-1793 will fail to detect that leaf has
+ * CA=FALSE, and will therefore incorrectly verify bad
+ *
+ */
+static int test_alt_chains_cert_forgery(void)
+{
+ int ret = 0;
+ int i;
+ X509 *x = NULL;
+ STACK_OF(X509) *untrusted = NULL;
+ X509_STORE_CTX *sctx = NULL;
+ X509_STORE *store = NULL;
+ X509_LOOKUP *lookup = NULL;
+
+ store = X509_STORE_new();
+ if (store == NULL)
+ goto err;
+
+ lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
+ if (lookup == NULL)
+ goto err;
+ if (!X509_LOOKUP_load_file(lookup, roots_f, X509_FILETYPE_PEM))
+ goto err;
+
+ untrusted = load_certs_pem(untrusted_f);
+
+ if ((x = load_cert_from_file(bad_f)) == NULL)
+ goto err;
+
+ sctx = X509_STORE_CTX_new();
+ if (sctx == NULL)
+ goto err;
+
+ if (!X509_STORE_CTX_init(sctx, store, x, untrusted))
+ goto err;
+
+ i = X509_verify_cert(sctx);
+
+ if (i == 0 && X509_STORE_CTX_get_error(sctx) == X509_V_ERR_INVALID_CA) {
+ /* This is the result we were expecting: Test passed */
+ ret = 1;
+ }
+ err:
+ X509_STORE_CTX_free(sctx);
+ X509_free(x);
+ sk_X509_pop_free(untrusted, X509_free);
+ X509_STORE_free(store);
+ return ret;
+}
+
+static int test_distinguishing_id(void)
+{
+ X509 *x = NULL;
+ int ret = 0;
+ ASN1_OCTET_STRING *v = NULL, *v2 = NULL;
+ char *distid = "this is an ID";
+
+ x = load_cert_from_file(bad_f);
+ if (x == NULL)
+ goto err;
+
+ v = ASN1_OCTET_STRING_new();
+ if (v == NULL)
+ goto err;
+
+ if (!ASN1_OCTET_STRING_set(v, (unsigned char *)distid,
+ (int)strlen(distid))) {
+ ASN1_OCTET_STRING_free(v);
+ goto err;
+ }
+
+ X509_set0_distinguishing_id(x, v);
+
+ v2 = X509_get0_distinguishing_id(x);
+ if (!TEST_ptr(v2)
+ || !TEST_int_eq(ASN1_OCTET_STRING_cmp(v, v2), 0))
+ goto err;
+
+ ret = 1;
+ err:
+ X509_free(x);
+ return ret;
+}
+
+static int test_req_distinguishing_id(void)
+{
+ X509_REQ *x = NULL;
+ BIO *bio = NULL;
+ int ret = 0;
+ ASN1_OCTET_STRING *v = NULL, *v2 = NULL;
+ char *distid = "this is an ID";
+
+ bio = BIO_new_file(req_f, "r");
+ if (bio == NULL)
+ goto err;
+
+ x = PEM_read_bio_X509_REQ(bio, NULL, 0, NULL);
+ if (x == NULL)
+ goto err;
+
+ v = ASN1_OCTET_STRING_new();
+ if (v == NULL)
+ goto err;
+
+ if (!ASN1_OCTET_STRING_set(v, (unsigned char *)distid,
+ (int)strlen(distid))) {
+ ASN1_OCTET_STRING_free(v);
+ goto err;
+ }
+
+ X509_REQ_set0_distinguishing_id(x, v);
+
+ v2 = X509_REQ_get0_distinguishing_id(x);
+ if (!TEST_ptr(v2)
+ || !TEST_int_eq(ASN1_OCTET_STRING_cmp(v, v2), 0))
+ goto err;
+
+ ret = 1;
+ err:
+ X509_REQ_free(x);
+ BIO_free(bio);
+ return ret;
+}
+
+static int test_self_signed(const char *filename, int use_trusted, int expected)
+{
+ X509 *cert = load_cert_from_file(filename); /* may result in NULL */
+ STACK_OF(X509) *trusted = sk_X509_new_null();
+ X509_STORE_CTX *ctx = X509_STORE_CTX_new();
+ int ret;
+
+ ret = TEST_int_eq(X509_self_signed(cert, 1), expected);
+
+ if (cert != NULL) {
+ if (use_trusted)
+ ret = ret && TEST_true(sk_X509_push(trusted, cert));
+ ret = ret && TEST_true(X509_STORE_CTX_init(ctx, NULL, cert, NULL));
+ X509_STORE_CTX_set0_trusted_stack(ctx, trusted);
+ ret = ret && TEST_int_eq(X509_verify_cert(ctx), expected);
+ }
+
+ X509_STORE_CTX_free(ctx);
+ sk_X509_free(trusted);
+ X509_free(cert);
+ return ret;
+}
+
+static int test_self_signed_good(void)
+{
+ return test_self_signed(root_f, 1, 1);
+}
+
+static int test_self_signed_bad(void)
+{
+ return test_self_signed(bad_f, 1, 0);
+}
+
+static int test_self_signed_error(void)
+{
+ return test_self_signed("nonexistent file name", 1, -1);
+}
+
+static int test_store_ctx(void)
+{
+ /* Verifying a cert where we have no trusted certs should fail */
+ return test_self_signed(bad_f, 0, 0);
+}
+
+static int do_test_purpose(int purpose, int expected)
+{
+ X509 *eecert = load_cert_from_file(ee_cert); /* may result in NULL */
+ X509 *untrcert = load_cert_from_file(ca_cert);
+ X509 *trcert = load_cert_from_file(sroot_cert);
+ STACK_OF(X509) *trusted = sk_X509_new_null();
+ STACK_OF(X509) *untrusted = sk_X509_new_null();
+ X509_STORE_CTX *ctx = X509_STORE_CTX_new();
+ int testresult = 0;
+
+ if (!TEST_ptr(eecert)
+ || !TEST_ptr(untrcert)
+ || !TEST_ptr(trcert)
+ || !TEST_ptr(trusted)
+ || !TEST_ptr(untrusted)
+ || !TEST_ptr(ctx))
+ goto err;
+
+
+ if (!TEST_true(sk_X509_push(trusted, trcert)))
+ goto err;
+ trcert = NULL;
+ if (!TEST_true(sk_X509_push(untrusted, untrcert)))
+ goto err;
+ untrcert = NULL;
+
+ if (!TEST_true(X509_STORE_CTX_init(ctx, NULL, eecert, untrusted)))
+ goto err;
+
+ if (!TEST_true(X509_STORE_CTX_set_purpose(ctx, purpose)))
+ goto err;
+
+ /*
+ * X509_STORE_CTX_set0_trusted_stack() is bady named. Despite the set0 name
+ * we are still responsible for freeing trusted after we have finished with
+ * it.
+ */
+ X509_STORE_CTX_set0_trusted_stack(ctx, trusted);
+
+ if (!TEST_int_eq(X509_verify_cert(ctx), expected))
+ goto err;
+
+ testresult = 1;
+ err:
+ sk_X509_pop_free(trusted, X509_free);
+ sk_X509_pop_free(untrusted, X509_free);
+ X509_STORE_CTX_free(ctx);
+ X509_free(eecert);
+ X509_free(untrcert);
+ X509_free(trcert);
+ return testresult;
+}
+
+static int test_purpose_ssl_client(void)
+{
+ return do_test_purpose(X509_PURPOSE_SSL_CLIENT, 0);
+}
+
+static int test_purpose_ssl_server(void)
+{
+ return do_test_purpose(X509_PURPOSE_SSL_SERVER, 1);
+}
+
+static int test_purpose_any(void)
+{
+ return do_test_purpose(X509_PURPOSE_ANY, 1);
+}
+
+OPT_TEST_DECLARE_USAGE("certs-dir\n")
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (!TEST_ptr(certs_dir = test_get_argument(0)))
+ return 0;
+
+ if (!TEST_ptr(root_f = test_mk_file_path(certs_dir, "rootCA.pem"))
+ || !TEST_ptr(roots_f = test_mk_file_path(certs_dir, "roots.pem"))
+ || !TEST_ptr(untrusted_f = test_mk_file_path(certs_dir, "untrusted.pem"))
+ || !TEST_ptr(bad_f = test_mk_file_path(certs_dir, "bad.pem"))
+ || !TEST_ptr(req_f = test_mk_file_path(certs_dir, "sm2-csr.pem"))
+ || !TEST_ptr(sroot_cert = test_mk_file_path(certs_dir, "sroot-cert.pem"))
+ || !TEST_ptr(ca_cert = test_mk_file_path(certs_dir, "ca-cert.pem"))
+ || !TEST_ptr(ee_cert = test_mk_file_path(certs_dir, "ee-cert.pem")))
+ goto err;
+
+ ADD_TEST(test_alt_chains_cert_forgery);
+ ADD_TEST(test_store_ctx);
+ ADD_TEST(test_distinguishing_id);
+ ADD_TEST(test_req_distinguishing_id);
+ ADD_TEST(test_self_signed_good);
+ ADD_TEST(test_self_signed_bad);
+ ADD_TEST(test_self_signed_error);
+ ADD_TEST(test_purpose_ssl_client);
+ ADD_TEST(test_purpose_ssl_server);
+ ADD_TEST(test_purpose_any);
+ return 1;
+ err:
+ cleanup_tests();
+ return 0;
+}
+
+void cleanup_tests(void)
+{
+ OPENSSL_free(root_f);
+ OPENSSL_free(roots_f);
+ OPENSSL_free(untrusted_f);
+ OPENSSL_free(bad_f);
+ OPENSSL_free(req_f);
+ OPENSSL_free(sroot_cert);
+ OPENSSL_free(ca_cert);
+ OPENSSL_free(ee_cert);
+}
diff --git a/test/versions.c b/test/versions.c
new file mode 100644
index 000000000000..c393289b7c33
--- /dev/null
+++ b/test/versions.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright 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
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <openssl/opensslv.h>
+#include <openssl/crypto.h>
+
+/* A simple helper for the perl function OpenSSL::Test::openssl_versions */
+int main(void)
+{
+ printf("Build version: %s\n", OPENSSL_FULL_VERSION_STR);
+ printf("Library version: %s\n",
+ OpenSSL_version(OPENSSL_FULL_VERSION_STRING));
+ return 0;
+}
diff --git a/test/wpackettest.c b/test/wpackettest.c
new file mode 100644
index 000000000000..da8b52612084
--- /dev/null
+++ b/test/wpackettest.c
@@ -0,0 +1,445 @@
+/*
+ * Copyright 2016-2022 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/buffer.h>
+#include <openssl/rand.h>
+#include "internal/packet.h"
+#include "testutil.h"
+
+static const unsigned char simple1[] = { 0xff };
+static const unsigned char simple2[] = { 0x01, 0xff };
+static const unsigned char simple3[] = { 0x00, 0x00, 0x00, 0x01, 0xff };
+static const unsigned char nestedsub[] = { 0x03, 0xff, 0x01, 0xff };
+static const unsigned char seqsub[] = { 0x01, 0xff, 0x01, 0xff };
+static const unsigned char empty[] = { 0x00 };
+static const unsigned char alloc[] = { 0x02, 0xfe, 0xff };
+static const unsigned char submem[] = { 0x03, 0x02, 0xfe, 0xff };
+static const unsigned char fixed[] = { 0xff, 0xff, 0xff };
+static const unsigned char simpleder[] = {
+ 0xfc, 0x04, 0x00, 0x01, 0x02, 0x03, 0xff, 0xfe, 0xfd
+};
+
+static BUF_MEM *buf;
+
+static int cleanup(WPACKET *pkt)
+{
+ WPACKET_cleanup(pkt);
+ return 0;
+}
+
+static int test_WPACKET_init(void)
+{
+ WPACKET pkt;
+ int i;
+ size_t written;
+ unsigned char sbuf[3];
+
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ /* Closing a top level WPACKET should fail */
+ || !TEST_false(WPACKET_close(&pkt))
+ /* Finishing a top level WPACKET should succeed */
+ || !TEST_true(WPACKET_finish(&pkt))
+ /*
+ * Can't call close or finish on a WPACKET that's already
+ * finished.
+ */
+ || !TEST_false(WPACKET_close(&pkt))
+ || !TEST_false(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, simple1, sizeof(simple1)))
+ return cleanup(&pkt);
+
+ /* Now try with a one byte length prefix */
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 1))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, simple2, sizeof(simple2)))
+ return cleanup(&pkt);
+
+ /* And a longer length prefix */
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 4))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, simple3, sizeof(simple3)))
+ return cleanup(&pkt);
+
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 1)))
+ return cleanup(&pkt);
+ for (i = 1; i < 257; i++) {
+ /*
+ * Putting more bytes in than fit for the size of the length prefix
+ * should fail
+ */
+ if (!TEST_int_eq(WPACKET_put_bytes_u8(&pkt, 0xff), i < 256))
+ return cleanup(&pkt);
+ }
+ if (!TEST_true(WPACKET_finish(&pkt)))
+ return cleanup(&pkt);
+
+ /* Test initialising from a fixed size buffer */
+ if (!TEST_true(WPACKET_init_static_len(&pkt, sbuf, sizeof(sbuf), 0))
+ /* Adding 3 bytes should succeed */
+ || !TEST_true(WPACKET_put_bytes_u24(&pkt, 0xffffff))
+ /* Adding 1 more byte should fail */
+ || !TEST_false(WPACKET_put_bytes_u8(&pkt, 0xff))
+ /* Finishing the top level WPACKET should succeed */
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(sbuf, written, fixed, sizeof(sbuf))
+ /* Initialise with 1 len byte */
+ || !TEST_true(WPACKET_init_static_len(&pkt, sbuf, sizeof(sbuf), 1))
+ /* Adding 2 bytes should succeed */
+ || !TEST_true(WPACKET_put_bytes_u16(&pkt, 0xfeff))
+ /* Adding 1 more byte should fail */
+ || !TEST_false(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(sbuf, written, alloc, sizeof(alloc)))
+ return cleanup(&pkt);
+
+ return 1;
+}
+
+static int test_WPACKET_set_max_size(void)
+{
+ WPACKET pkt;
+ size_t written;
+
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ /*
+ * No previous lenbytes set so we should be ok to set the max
+ * possible max size
+ */
+ || !TEST_true(WPACKET_set_max_size(&pkt, SIZE_MAX))
+ /* We should be able to set it smaller too */
+ || !TEST_true(WPACKET_set_max_size(&pkt, SIZE_MAX -1))
+ /* And setting it bigger again should be ok */
+ || !TEST_true(WPACKET_set_max_size(&pkt, SIZE_MAX))
+ || !TEST_true(WPACKET_finish(&pkt)))
+ return cleanup(&pkt);
+
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 1))
+ /*
+ * Should fail because we already consumed 1 byte with the
+ * length
+ */
+ || !TEST_false(WPACKET_set_max_size(&pkt, 0))
+ /*
+ * Max size can't be bigger than biggest that will fit in
+ * lenbytes
+ */
+ || !TEST_false(WPACKET_set_max_size(&pkt, 0x0101))
+ /* It can be the same as the maximum possible size */
+ || !TEST_true(WPACKET_set_max_size(&pkt, 0x0100))
+ /* Or it can be less */
+ || !TEST_true(WPACKET_set_max_size(&pkt, 0x01))
+ /* Should fail because packet is already filled */
+ || !TEST_false(WPACKET_put_bytes_u8(&pkt, 0xff))
+ /* You can't put in more bytes than max size */
+ || !TEST_true(WPACKET_set_max_size(&pkt, 0x02))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_false(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, simple2, sizeof(simple2)))
+ return cleanup(&pkt);
+
+ return 1;
+}
+
+static int test_WPACKET_start_sub_packet(void)
+{
+ WPACKET pkt;
+ size_t written;
+ size_t len;
+
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ || !TEST_true(WPACKET_start_sub_packet(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ /* Can't finish because we have a sub packet */
+ || !TEST_false(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_close(&pkt))
+ /* Sub packet is closed so can't close again */
+ || !TEST_false(WPACKET_close(&pkt))
+ /* Now a top level so finish should succeed */
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, simple1, sizeof(simple1)))
+ return cleanup(&pkt);
+
+ /* Single sub-packet with length prefix */
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ || !TEST_true(WPACKET_start_sub_packet_u8(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, simple2, sizeof(simple2)))
+ return cleanup(&pkt);
+
+ /* Nested sub-packets with length prefixes */
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ || !TEST_true(WPACKET_start_sub_packet_u8(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_start_sub_packet_u8(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_get_length(&pkt, &len))
+ || !TEST_size_t_eq(len, 1)
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_get_length(&pkt, &len))
+ || !TEST_size_t_eq(len, 3)
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, nestedsub, sizeof(nestedsub)))
+ return cleanup(&pkt);
+
+ /* Sequential sub-packets with length prefixes */
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ || !TEST_true(WPACKET_start_sub_packet_u8(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_start_sub_packet_u8(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, seqsub, sizeof(seqsub)))
+ return cleanup(&pkt);
+
+ /* Nested sub-packets with lengths filled before finish */
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ || !TEST_true(WPACKET_start_sub_packet_u8(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_start_sub_packet_u8(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_get_length(&pkt, &len))
+ || !TEST_size_t_eq(len, 1)
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_get_length(&pkt, &len))
+ || !TEST_size_t_eq(len, 3)
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_fill_lengths(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, nestedsub, sizeof(nestedsub))
+ || !TEST_true(WPACKET_finish(&pkt)))
+ return cleanup(&pkt);
+
+ return 1;
+}
+
+
+static int test_WPACKET_set_flags(void)
+{
+ WPACKET pkt;
+ size_t written;
+
+ /* Set packet to be non-zero length */
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ || !TEST_true(WPACKET_set_flags(&pkt, WPACKET_FLAGS_NON_ZERO_LENGTH))
+ /* Should fail because of zero length */
+ || !TEST_false(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, simple1, sizeof(simple1)))
+ return cleanup(&pkt);
+
+ /* Repeat above test in a sub-packet */
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ || !TEST_true(WPACKET_start_sub_packet(&pkt))
+ || !TEST_true(WPACKET_set_flags(&pkt, WPACKET_FLAGS_NON_ZERO_LENGTH))
+ /* Should fail because of zero length */
+ || !TEST_false(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, simple1, sizeof(simple1)))
+ return cleanup(&pkt);
+
+ /* Set packet to abandon non-zero length */
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 1))
+ || !TEST_true(WPACKET_set_flags(&pkt, WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_size_t_eq(written, 0))
+ return cleanup(&pkt);
+
+ /* Repeat above test but only abandon a sub-packet */
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 1))
+ || !TEST_true(WPACKET_start_sub_packet_u8(&pkt))
+ || !TEST_true(WPACKET_set_flags(&pkt, WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH))
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, empty, sizeof(empty)))
+ return cleanup(&pkt);
+
+ /* And repeat with a non empty sub-packet */
+ if (!TEST_true(WPACKET_init(&pkt, buf))
+ || !TEST_true(WPACKET_start_sub_packet_u8(&pkt))
+ || !TEST_true(WPACKET_set_flags(&pkt, WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xff))
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, simple2, sizeof(simple2)))
+ return cleanup(&pkt);
+ return 1;
+}
+
+static int test_WPACKET_allocate_bytes(void)
+{
+ WPACKET pkt;
+ size_t written;
+ unsigned char *bytes;
+
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 1))
+ || !TEST_true(WPACKET_allocate_bytes(&pkt, 2, &bytes)))
+ return cleanup(&pkt);
+ bytes[0] = 0xfe;
+ bytes[1] = 0xff;
+ if (!TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, alloc, sizeof(alloc)))
+ return cleanup(&pkt);
+
+ /* Repeat with WPACKET_sub_allocate_bytes */
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 1))
+ || !TEST_true(WPACKET_sub_allocate_bytes_u8(&pkt, 2, &bytes)))
+ return cleanup(&pkt);
+ bytes[0] = 0xfe;
+ bytes[1] = 0xff;
+ if (!TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, submem, sizeof(submem)))
+ return cleanup(&pkt);
+
+ return 1;
+}
+
+static int test_WPACKET_memcpy(void)
+{
+ WPACKET pkt;
+ size_t written;
+ const unsigned char bytes[] = { 0xfe, 0xff };
+
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 1))
+ || !TEST_true(WPACKET_memcpy(&pkt, bytes, sizeof(bytes)))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, alloc, sizeof(alloc)))
+ return cleanup(&pkt);
+
+ /* Repeat with WPACKET_sub_memcpy() */
+ if (!TEST_true(WPACKET_init_len(&pkt, buf, 1))
+ || !TEST_true(WPACKET_sub_memcpy_u8(&pkt, bytes, sizeof(bytes)))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written))
+ || !TEST_mem_eq(buf->data, written, submem, sizeof(submem)))
+ return cleanup(&pkt);
+
+ return 1;
+}
+
+static int test_WPACKET_init_der(void)
+{
+ WPACKET pkt;
+ unsigned char sbuf[1024];
+ unsigned char testdata[] = { 0x00, 0x01, 0x02, 0x03 };
+ unsigned char testdata2[259] = { 0x82, 0x01, 0x00 };
+ size_t written[2];
+ size_t size1, size2;
+ int flags = WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH;
+ int i;
+
+ /* Test initialising for writing DER */
+ if (!TEST_true(WPACKET_init_der(&pkt, sbuf, sizeof(sbuf)))
+ || !TEST_true(WPACKET_put_bytes_u24(&pkt, 0xfffefd))
+ /* Test writing data in a length prefixed sub-packet */
+ || !TEST_true(WPACKET_start_sub_packet(&pkt))
+ || !TEST_true(WPACKET_memcpy(&pkt, testdata, sizeof(testdata)))
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_put_bytes_u8(&pkt, 0xfc))
+ /* this sub-packet is empty, and should render zero bytes */
+ || (!TEST_true(WPACKET_start_sub_packet(&pkt))
+ || !TEST_true(WPACKET_set_flags(&pkt, flags))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &size1))
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &size2))
+ || !TEST_size_t_eq(size1, size2))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written[0]))
+ || !TEST_mem_eq(WPACKET_get_curr(&pkt), written[0], simpleder,
+ sizeof(simpleder)))
+ return cleanup(&pkt);
+
+ /* Generate random packet data for test */
+ if (!TEST_int_gt(RAND_bytes(&testdata2[3], sizeof(testdata2) - 3), 0))
+ return 0;
+
+ /*
+ * Test with a sub-packet that has 2 length bytes. We do 2 passes - first
+ * with a NULL buffer, just to calculate lengths, and a second pass with a
+ * real buffer to actually generate a packet
+ */
+ for (i = 0; i < 2; i++) {
+ if (i == 0) {
+ if (!TEST_true(WPACKET_init_null_der(&pkt)))
+ return 0;
+ } else {
+ if (!TEST_true(WPACKET_init_der(&pkt, sbuf, sizeof(sbuf))))
+ return 0;
+ }
+ if (!TEST_true(WPACKET_start_sub_packet(&pkt))
+ || !TEST_true(WPACKET_memcpy(&pkt, &testdata2[3],
+ sizeof(testdata2) - 3))
+ || !TEST_true(WPACKET_close(&pkt))
+ || !TEST_true(WPACKET_finish(&pkt))
+ || !TEST_true(WPACKET_get_total_written(&pkt, &written[i])))
+ return cleanup(&pkt);
+ }
+
+ /*
+ * Check that the size calculated in the first pass equals the size of the
+ * packet actually generated in the second pass. Also check the generated
+ * packet looks as we expect it to.
+ */
+ if (!TEST_size_t_eq(written[0], written[1])
+ || !TEST_mem_eq(WPACKET_get_curr(&pkt), written[1], testdata2,
+ sizeof(testdata2)))
+ return 0;
+
+ return 1;
+}
+
+int setup_tests(void)
+{
+ if (!TEST_ptr(buf = BUF_MEM_new()))
+ return 0;
+
+ ADD_TEST(test_WPACKET_init);
+ ADD_TEST(test_WPACKET_set_max_size);
+ ADD_TEST(test_WPACKET_start_sub_packet);
+ ADD_TEST(test_WPACKET_set_flags);
+ ADD_TEST(test_WPACKET_allocate_bytes);
+ ADD_TEST(test_WPACKET_memcpy);
+ ADD_TEST(test_WPACKET_init_der);
+ return 1;
+}
+
+void cleanup_tests(void)
+{
+ BUF_MEM_free(buf);
+}
diff --git a/test/x509_check_cert_pkey_test.c b/test/x509_check_cert_pkey_test.c
new file mode 100644
index 000000000000..c53f566d5155
--- /dev/null
+++ b/test/x509_check_cert_pkey_test.c
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/pem.h>
+#include <openssl/x509.h>
+#include "testutil.h"
+
+/*
+ * c: path of a cert in PEM format
+ * k: path of a key in PEM format
+ * t: API type, "cert" for X509_ and "req" for X509_REQ_ APIs.
+ * e: expected, "ok" for success, "failed" for what should fail.
+ */
+static const char *c;
+static const char *k;
+static const char *t;
+static const char *e;
+
+static int test_x509_check_cert_pkey(void)
+{
+ BIO *bio = NULL;
+ X509 *x509 = NULL;
+ X509_REQ *x509_req = NULL;
+ EVP_PKEY *pkey = NULL;
+ int ret = 0, type = 0, expected = 0, result = 0;
+
+ /*
+ * we check them first thus if fails we don't need to do
+ * those PEM parsing operations.
+ */
+ if (strcmp(t, "cert") == 0) {
+ type = 1;
+ } else if (strcmp(t, "req") == 0) {
+ type = 2;
+ } else {
+ TEST_error("invalid 'type'");
+ goto failed;
+ }
+
+ if (strcmp(e, "ok") == 0) {
+ expected = 1;
+ } else if (strcmp(e, "failed") == 0) {
+ expected = 0;
+ } else {
+ TEST_error("invalid 'expected'");
+ goto failed;
+ }
+
+ /* process private key */
+ if (!TEST_ptr(bio = BIO_new_file(k, "r")))
+ goto failed;
+
+ if (!TEST_ptr(pkey = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL)))
+ goto failed;
+
+ BIO_free(bio);
+
+ /* process cert or cert request, use the same local var */
+ if (!TEST_ptr(bio = BIO_new_file(c, "r")))
+ goto failed;
+
+ switch (type) {
+ case 1:
+ x509 = PEM_read_bio_X509(bio, NULL, NULL, NULL);
+ if (x509 == NULL) {
+ TEST_error("read PEM x509 failed");
+ goto failed;
+ }
+
+ result = X509_check_private_key(x509, pkey);
+ break;
+ case 2:
+ x509_req = PEM_read_bio_X509_REQ(bio, NULL, NULL, NULL);
+ if (x509_req == NULL) {
+ TEST_error("read PEM x509 req failed");
+ goto failed;
+ }
+
+ result = X509_REQ_check_private_key(x509_req, pkey);
+ break;
+ default:
+ /* should never be here */
+ break;
+ }
+
+ if (!TEST_int_eq(result, expected)) {
+ TEST_error("check private key: expected: %d, got: %d", expected, result);
+ goto failed;
+ }
+
+ ret = 1;
+failed:
+ BIO_free(bio);
+ X509_free(x509);
+ X509_REQ_free(x509_req);
+ EVP_PKEY_free(pkey);
+ return ret;
+}
+
+static const char *file; /* path of a cert/CRL/key file in PEM format */
+static const char *num; /* expected number of certs/CRLs/keys included */
+
+static int test_PEM_X509_INFO_read_bio(void)
+{
+ BIO *in;
+ STACK_OF(X509_INFO) *sk;
+ X509_INFO *it;
+ int i, count = 0;
+ int expected = 0;
+
+ if (!TEST_ptr((in = BIO_new_file(file, "r"))))
+ return 0;
+ sk = PEM_X509_INFO_read_bio(in, NULL, NULL, "");
+ BIO_free(in);
+ sscanf(num, "%d", &expected);
+ for (i = 0; i < sk_X509_INFO_num(sk); i++) {
+ it = sk_X509_INFO_value(sk, i);
+ if (it->x509 != NULL)
+ count++;
+ if (it->crl != NULL)
+ count++;
+ if (it->x_pkey != NULL)
+ count++;
+ }
+ sk_X509_INFO_pop_free(sk, X509_INFO_free);
+ return TEST_int_eq(count, expected);
+}
+
+const OPTIONS *test_get_options(void)
+{
+ enum { OPT_TEST_ENUM };
+ static const OPTIONS test_options[] = {
+ OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("cert key type expected\n"
+ " or [options] file num\n"),
+ { OPT_HELP_STR, 1, '-', "cert\tcertificate or CSR filename in PEM\n" },
+ { OPT_HELP_STR, 1, '-', "key\tprivate key filename in PEM\n" },
+ { OPT_HELP_STR, 1, '-', "type\t\tvalue must be 'cert' or 'req'\n" },
+ { OPT_HELP_STR, 1, '-', "expected\tthe expected return value, either 'ok' or 'failed'\n" },
+ { OPT_HELP_STR, 1, '-', "file\tPEM format file containing certs, keys, and/OR CRLs\n" },
+ { OPT_HELP_STR, 1, '-', "num\texpected number of credentials to be loaded from file\n" },
+ { NULL }
+ };
+ return test_options;
+}
+
+int setup_tests(void)
+{
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ if (test_get_argument_count() == 2) {
+ if (!TEST_ptr(file = test_get_argument(0))
+ || !TEST_ptr(num = test_get_argument(1)))
+ return 0;
+ ADD_TEST(test_PEM_X509_INFO_read_bio);
+ return 1;
+ }
+
+ if (!TEST_ptr(c = test_get_argument(0))
+ || !TEST_ptr(k = test_get_argument(1))
+ || !TEST_ptr(t = test_get_argument(2))
+ || !TEST_ptr(e = test_get_argument(3))) {
+ return 0;
+ }
+
+ ADD_TEST(test_x509_check_cert_pkey);
+ return 1;
+}
diff --git a/test/x509_dup_cert_test.c b/test/x509_dup_cert_test.c
new file mode 100644
index 000000000000..af35afbe0c98
--- /dev/null
+++ b/test/x509_dup_cert_test.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2017, Oracle and/or its affiliates. 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 <openssl/err.h>
+#include <openssl/x509_vfy.h>
+
+#include "testutil.h"
+
+static int test_509_dup_cert(int n)
+{
+ int ret = 0;
+ X509_STORE_CTX *sctx = NULL;
+ X509_STORE *store = NULL;
+ X509_LOOKUP *lookup = NULL;
+ const char *cert_f = test_get_argument(n);
+
+ if (TEST_ptr(store = X509_STORE_new())
+ && TEST_ptr(lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()))
+ && TEST_true(X509_load_cert_file(lookup, cert_f, X509_FILETYPE_PEM))
+ && TEST_true(X509_load_cert_file(lookup, cert_f, X509_FILETYPE_PEM)))
+ ret = 1;
+
+ X509_STORE_CTX_free(sctx);
+ X509_STORE_free(store);
+ return ret;
+}
+
+OPT_TEST_DECLARE_USAGE("cert.pem...\n")
+
+int setup_tests(void)
+{
+ size_t n;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ n = test_get_argument_count();
+ if (!TEST_int_gt(n, 0))
+ return 0;
+
+ ADD_ALL_TESTS(test_509_dup_cert, n);
+ return 1;
+}
diff --git a/test/x509_internal_test.c b/test/x509_internal_test.c
new file mode 100644
index 000000000000..be43537329bb
--- /dev/null
+++ b/test/x509_internal_test.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Internal tests for the x509 and x509v3 modules */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+
+/**********************************************************************
+ *
+ * Test of x509v3
+ *
+ ***/
+
+#include "../crypto/x509/ext_dat.h"
+#include "../crypto/x509/standard_exts.h"
+
+static int test_standard_exts(void)
+{
+ size_t i;
+ int prev = -1, good = 1;
+ const X509V3_EXT_METHOD **tmp;
+
+ tmp = standard_exts;
+ for (i = 0; i < OSSL_NELEM(standard_exts); i++, tmp++) {
+ if ((*tmp)->ext_nid < prev)
+ good = 0;
+ prev = (*tmp)->ext_nid;
+
+ }
+ if (!good) {
+ tmp = standard_exts;
+ TEST_error("Extensions out of order!");
+ for (i = 0; i < STANDARD_EXTENSION_COUNT; i++, tmp++)
+ TEST_note("%d : %s", (*tmp)->ext_nid, OBJ_nid2sn((*tmp)->ext_nid));
+ }
+ return good;
+}
+
+typedef struct {
+ const char *ipasc;
+ const char *data;
+ int length;
+} IP_TESTDATA;
+
+static IP_TESTDATA a2i_ipaddress_tests[] = {
+ {"127.0.0.1", "\x7f\x00\x00\x01", 4},
+ {"1.2.3.4", "\x01\x02\x03\x04", 4},
+ {"1.2.3.255", "\x01\x02\x03\xff", 4},
+ {"1.2.3", NULL, 0},
+ {"1.2.3 .4", NULL, 0},
+
+ {"::1", "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 16},
+ {"1:1:1:1:1:1:1:1", "\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01", 16},
+ {"2001:db8::ff00:42:8329", "\x20\x01\x0d\xb8\x00\x00\x00\x00\x00\x00\xff\x00\x00\x42\x83\x29", 16},
+ {"1:1:1:1:1:1:1:1.test", NULL, 0},
+ {":::1", NULL, 0},
+ {"2001::123g", NULL, 0},
+
+ {"example.test", NULL, 0},
+ {"", NULL, 0},
+
+ {"1.2.3.4 ", "\x01\x02\x03\x04", 4},
+ {" 1.2.3.4", "\x01\x02\x03\x04", 4},
+ {" 1.2.3.4 ", "\x01\x02\x03\x04", 4},
+ {"1.2.3.4.example.test", NULL, 0},
+};
+
+
+static int test_a2i_ipaddress(int idx)
+{
+ int good = 1;
+ ASN1_OCTET_STRING *ip;
+ int len = a2i_ipaddress_tests[idx].length;
+
+ ip = a2i_IPADDRESS(a2i_ipaddress_tests[idx].ipasc);
+ if (len == 0) {
+ if (!TEST_ptr_null(ip)) {
+ good = 0;
+ TEST_note("'%s' should not be parsed as IP address", a2i_ipaddress_tests[idx].ipasc);
+ }
+ } else {
+ if (!TEST_ptr(ip)
+ || !TEST_int_eq(ASN1_STRING_length(ip), len)
+ || !TEST_mem_eq(ASN1_STRING_get0_data(ip), len,
+ a2i_ipaddress_tests[idx].data, len)) {
+ good = 0;
+ }
+ }
+ ASN1_OCTET_STRING_free(ip);
+ return good;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_standard_exts);
+ ADD_ALL_TESTS(test_a2i_ipaddress, OSSL_NELEM(a2i_ipaddress_tests));
+ return 1;
+}
diff --git a/test/x509_time_test.c b/test/x509_time_test.c
new file mode 100644
index 000000000000..711dfcb5b6da
--- /dev/null
+++ b/test/x509_time_test.c
@@ -0,0 +1,604 @@
+/*
+ * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Tests for X509 time functions */
+
+#include <string.h>
+#include <time.h>
+
+#include <openssl/asn1.h>
+#include <openssl/x509.h>
+#include "testutil.h"
+#include "internal/nelem.h"
+
+typedef struct {
+ const char *data;
+ int type;
+ time_t cmp_time;
+ /* -1 if asn1_time <= cmp_time, 1 if asn1_time > cmp_time, 0 if error. */
+ int expected;
+} TESTDATA;
+
+typedef struct {
+ const char *data;
+ /* 0 for check-only mode, 1 for set-string mode */
+ int set_string;
+ /* 0 for error, 1 if succeed */
+ int expected;
+ /*
+ * The following 2 fields are ignored if set_string field is set to '0'
+ * (in check only mode).
+ *
+ * But they can still be ignored explicitly in set-string mode by:
+ * setting -1 to expected_type and setting NULL to expected_string.
+ *
+ * It's useful in a case of set-string mode but the expected result
+ * is a 'parsing error'.
+ */
+ int expected_type;
+ const char *expected_string;
+} TESTDATA_FORMAT;
+
+/*
+ * Actually, the "loose" mode has been tested in
+ * those time-compare-cases, so we may not test it again.
+ */
+static TESTDATA_FORMAT x509_format_tests[] = {
+ /* GeneralizedTime */
+ {
+ /* good format, check only */
+ "20170217180105Z", 0, 1, -1, NULL,
+ },
+ {
+ /* not leap year, check only */
+ "20170229180105Z", 0, 0, -1, NULL,
+ },
+ {
+ /* leap year, check only */
+ "20160229180105Z", 0, 1, -1, NULL,
+ },
+ {
+ /* SS is missing, check only */
+ "201702171801Z", 0, 0, -1, NULL,
+ },
+ {
+ /* fractional seconds, check only */
+ "20170217180105.001Z", 0, 0, -1, NULL,
+ },
+ {
+ /* time zone, check only */
+ "20170217180105+0800", 0, 0, -1, NULL,
+ },
+ {
+ /* SS is missing, set string */
+ "201702171801Z", 1, 0, -1, NULL,
+ },
+ {
+ /* fractional seconds, set string */
+ "20170217180105.001Z", 1, 0, -1, NULL,
+ },
+ {
+ /* time zone, set string */
+ "20170217180105+0800", 1, 0, -1, NULL,
+ },
+ {
+ /* good format, check returned 'turned' string */
+ "20170217180154Z", 1, 1, V_ASN1_UTCTIME, "170217180154Z",
+ },
+ {
+ /* good format, check returned string */
+ "20510217180154Z", 1, 1, V_ASN1_GENERALIZEDTIME, "20510217180154Z",
+ },
+ {
+ /* good format but out of UTC range, check returned string */
+ "19230419180154Z", 1, 1, V_ASN1_GENERALIZEDTIME, "19230419180154Z",
+ },
+ /* UTC */
+ {
+ /* SS is missing, check only */
+ "1702171801Z", 0, 0, -1, NULL,
+ },
+ {
+ /* not leap year, check only */
+ "050229180101Z", 0, 0, -1, NULL,
+ },
+ {
+ /* leap year, check only */
+ "040229180101Z", 0, 1, -1, NULL,
+ },
+ {
+ /* time zone, check only */
+ "170217180154+0800", 0, 0, -1, NULL,
+ },
+ {
+ /* SS is missing, set string */
+ "1702171801Z", 1, 0, -1, NULL,
+ },
+ {
+ /* time zone, set string */
+ "170217180154+0800", 1, 0, -1, NULL,
+ },
+ {
+ /* 2017, good format, check returned string */
+ "170217180154Z", 1, 1, V_ASN1_UTCTIME, "170217180154Z",
+ },
+ {
+ /* 1998, good format, check returned string */
+ "981223180154Z", 1, 1, V_ASN1_UTCTIME, "981223180154Z",
+ },
+};
+
+static TESTDATA x509_cmp_tests[] = {
+ {
+ "20170217180154Z", V_ASN1_GENERALIZEDTIME,
+ /* The same in seconds since epoch. */
+ 1487354514, -1,
+ },
+ {
+ "20170217180154Z", V_ASN1_GENERALIZEDTIME,
+ /* One second more. */
+ 1487354515, -1,
+ },
+ {
+ "20170217180154Z", V_ASN1_GENERALIZEDTIME,
+ /* One second less. */
+ 1487354513, 1,
+ },
+ /* Same as UTC time. */
+ {
+ "170217180154Z", V_ASN1_UTCTIME,
+ /* The same in seconds since epoch. */
+ 1487354514, -1,
+ },
+ {
+ "170217180154Z", V_ASN1_UTCTIME,
+ /* One second more. */
+ 1487354515, -1,
+ },
+ {
+ "170217180154Z", V_ASN1_UTCTIME,
+ /* One second less. */
+ 1487354513, 1,
+ },
+ /* UTCTime from the 20th century. */
+ {
+ "990217180154Z", V_ASN1_UTCTIME,
+ /* The same in seconds since epoch. */
+ 919274514, -1,
+ },
+ {
+ "990217180154Z", V_ASN1_UTCTIME,
+ /* One second more. */
+ 919274515, -1,
+ },
+ {
+ "990217180154Z", V_ASN1_UTCTIME,
+ /* One second less. */
+ 919274513, 1,
+ },
+ /* Various invalid formats. */
+ {
+ /* No trailing Z. */
+ "20170217180154", V_ASN1_GENERALIZEDTIME, 0, 0,
+ },
+ {
+ /* No trailing Z, UTCTime. */
+ "170217180154", V_ASN1_UTCTIME, 0, 0,
+ },
+ {
+ /* No seconds. */
+ "201702171801Z", V_ASN1_GENERALIZEDTIME, 0, 0,
+ },
+ {
+ /* No seconds, UTCTime. */
+ "1702171801Z", V_ASN1_UTCTIME, 0, 0,
+ },
+ {
+ /* Fractional seconds. */
+ "20170217180154.001Z", V_ASN1_GENERALIZEDTIME, 0, 0,
+ },
+ {
+ /* Fractional seconds, UTCTime. */
+ "170217180154.001Z", V_ASN1_UTCTIME, 0, 0,
+ },
+ {
+ /* Timezone offset. */
+ "20170217180154+0100", V_ASN1_GENERALIZEDTIME, 0, 0,
+ },
+ {
+ /* Timezone offset, UTCTime. */
+ "170217180154+0100", V_ASN1_UTCTIME, 0, 0,
+ },
+ {
+ /* Extra digits. */
+ "2017021718015400Z", V_ASN1_GENERALIZEDTIME, 0, 0,
+ },
+ {
+ /* Extra digits, UTCTime. */
+ "17021718015400Z", V_ASN1_UTCTIME, 0, 0,
+ },
+ {
+ /* Non-digits. */
+ "2017021718015aZ", V_ASN1_GENERALIZEDTIME, 0, 0,
+ },
+ {
+ /* Non-digits, UTCTime. */
+ "17021718015aZ", V_ASN1_UTCTIME, 0, 0,
+ },
+ {
+ /* Trailing garbage. */
+ "20170217180154Zlongtrailinggarbage", V_ASN1_GENERALIZEDTIME, 0, 0,
+ },
+ {
+ /* Trailing garbage, UTCTime. */
+ "170217180154Zlongtrailinggarbage", V_ASN1_UTCTIME, 0, 0,
+ },
+ {
+ /* Swapped type. */
+ "20170217180154Z", V_ASN1_UTCTIME, 0, 0,
+ },
+ {
+ /* Swapped type. */
+ "170217180154Z", V_ASN1_GENERALIZEDTIME, 0, 0,
+ },
+ {
+ /* Bad type. */
+ "20170217180154Z", V_ASN1_OCTET_STRING, 0, 0,
+ },
+};
+
+static int test_x509_cmp_time(int idx)
+{
+ ASN1_TIME t;
+ int result;
+
+ memset(&t, 0, sizeof(t));
+ t.type = x509_cmp_tests[idx].type;
+ t.data = (unsigned char*)(x509_cmp_tests[idx].data);
+ t.length = strlen(x509_cmp_tests[idx].data);
+ t.flags = 0;
+
+ result = X509_cmp_time(&t, &x509_cmp_tests[idx].cmp_time);
+ if (!TEST_int_eq(result, x509_cmp_tests[idx].expected)) {
+ TEST_info("test_x509_cmp_time(%d) failed: expected %d, got %d\n",
+ idx, x509_cmp_tests[idx].expected, result);
+ return 0;
+ }
+ return 1;
+}
+
+static int test_x509_cmp_time_current(void)
+{
+ time_t now = time(NULL);
+ /* Pick a day earlier and later, relative to any system clock. */
+ ASN1_TIME *asn1_before = NULL, *asn1_after = NULL;
+ int cmp_result, failed = 0;
+
+ asn1_before = ASN1_TIME_adj(NULL, now, -1, 0);
+ asn1_after = ASN1_TIME_adj(NULL, now, 1, 0);
+
+ cmp_result = X509_cmp_time(asn1_before, NULL);
+ if (!TEST_int_eq(cmp_result, -1))
+ failed = 1;
+
+ cmp_result = X509_cmp_time(asn1_after, NULL);
+ if (!TEST_int_eq(cmp_result, 1))
+ failed = 1;
+
+ ASN1_TIME_free(asn1_before);
+ ASN1_TIME_free(asn1_after);
+
+ return failed == 0;
+}
+
+static int test_X509_cmp_timeframe_vpm(const X509_VERIFY_PARAM *vpm,
+ ASN1_TIME *asn1_before,
+ ASN1_TIME *asn1_mid,
+ ASN1_TIME *asn1_after)
+{
+ int always_0 = vpm != NULL
+ && (X509_VERIFY_PARAM_get_flags(vpm) & X509_V_FLAG_USE_CHECK_TIME) == 0
+ && (X509_VERIFY_PARAM_get_flags(vpm) & X509_V_FLAG_NO_CHECK_TIME) != 0;
+
+ return asn1_before != NULL && asn1_mid != NULL && asn1_after != NULL
+ && TEST_int_eq(X509_cmp_timeframe(vpm, asn1_before, asn1_after), 0)
+ && TEST_int_eq(X509_cmp_timeframe(vpm, asn1_before, NULL), 0)
+ && TEST_int_eq(X509_cmp_timeframe(vpm, NULL, asn1_after), 0)
+ && TEST_int_eq(X509_cmp_timeframe(vpm, NULL, NULL), 0)
+ && TEST_int_eq(X509_cmp_timeframe(vpm, asn1_after, asn1_after),
+ always_0 ? 0 : -1)
+ && TEST_int_eq(X509_cmp_timeframe(vpm, asn1_before, asn1_before),
+ always_0 ? 0 : 1)
+ && TEST_int_eq(X509_cmp_timeframe(vpm, asn1_after, asn1_before),
+ always_0 ? 0 : 1);
+}
+
+static int test_X509_cmp_timeframe(void)
+{
+ time_t now = time(NULL);
+ ASN1_TIME *asn1_mid = ASN1_TIME_adj(NULL, now, 0, 0);
+ /* Pick a day earlier and later, relative to any system clock. */
+ ASN1_TIME *asn1_before = ASN1_TIME_adj(NULL, now, -1, 0);
+ ASN1_TIME *asn1_after = ASN1_TIME_adj(NULL, now, 1, 0);
+ X509_VERIFY_PARAM *vpm = X509_VERIFY_PARAM_new();
+ int res = 0;
+
+ if (vpm == NULL)
+ goto finish;
+ res = test_X509_cmp_timeframe_vpm(NULL, asn1_before, asn1_mid, asn1_after)
+ && test_X509_cmp_timeframe_vpm(vpm, asn1_before, asn1_mid, asn1_after);
+
+ X509_VERIFY_PARAM_set_time(vpm, now);
+ res = res
+ && test_X509_cmp_timeframe_vpm(vpm, asn1_before, asn1_mid, asn1_after)
+ && X509_VERIFY_PARAM_set_flags(vpm, X509_V_FLAG_NO_CHECK_TIME)
+ && test_X509_cmp_timeframe_vpm(vpm, asn1_before, asn1_mid, asn1_after);
+
+ X509_VERIFY_PARAM_free(vpm);
+finish:
+ ASN1_TIME_free(asn1_mid);
+ ASN1_TIME_free(asn1_before);
+ ASN1_TIME_free(asn1_after);
+
+ return res;
+}
+
+static int test_x509_time(int idx)
+{
+ ASN1_TIME *t = NULL;
+ int result, rv = 0;
+
+ if (x509_format_tests[idx].set_string) {
+ /* set-string mode */
+ t = ASN1_TIME_new();
+ if (t == NULL) {
+ TEST_info("test_x509_time(%d) failed: internal error\n", idx);
+ return 0;
+ }
+ }
+
+ result = ASN1_TIME_set_string_X509(t, x509_format_tests[idx].data);
+ /* time string parsing result is always checked against what's expected */
+ if (!TEST_int_eq(result, x509_format_tests[idx].expected)) {
+ TEST_info("test_x509_time(%d) failed: expected %d, got %d\n",
+ idx, x509_format_tests[idx].expected, result);
+ goto out;
+ }
+
+ /* if t is not NULL but expected_type is ignored(-1), it is an 'OK' case */
+ if (t != NULL && x509_format_tests[idx].expected_type != -1) {
+ if (!TEST_int_eq(t->type, x509_format_tests[idx].expected_type)) {
+ TEST_info("test_x509_time(%d) failed: expected_type %d, got %d\n",
+ idx, x509_format_tests[idx].expected_type, t->type);
+ goto out;
+ }
+ }
+
+ /* if t is not NULL but expected_string is NULL, it is an 'OK' case too */
+ if (t != NULL && x509_format_tests[idx].expected_string) {
+ if (!TEST_mem_eq((const char *)t->data, t->length,
+ x509_format_tests[idx].expected_string,
+ strlen(x509_format_tests[idx].expected_string))) {
+ TEST_info("test_x509_time(%d) failed: expected_string %s, got %.*s\n",
+ idx, x509_format_tests[idx].expected_string, t->length,
+ t->data);
+ goto out;
+ }
+ }
+
+ rv = 1;
+out:
+ if (t != NULL)
+ ASN1_TIME_free(t);
+ return rv;
+}
+
+static const struct {
+ int y, m, d;
+ int yd, wd;
+} day_of_week_tests[] = {
+ /*YYYY MM DD DoY DoW */
+ { 1900, 1, 1, 0, 1 },
+ { 1900, 2, 28, 58, 3 },
+ { 1900, 3, 1, 59, 4 },
+ { 1900, 12, 31, 364, 1 },
+ { 1901, 1, 1, 0, 2 },
+ { 1970, 1, 1, 0, 4 },
+ { 1999, 1, 10, 9, 0 },
+ { 1999, 12, 31, 364, 5 },
+ { 2000, 1, 1, 0, 6 },
+ { 2000, 2, 28, 58, 1 },
+ { 2000, 2, 29, 59, 2 },
+ { 2000, 3, 1, 60, 3 },
+ { 2000, 12, 31, 365, 0 },
+ { 2001, 1, 1, 0, 1 },
+ { 2008, 1, 1, 0, 2 },
+ { 2008, 2, 28, 58, 4 },
+ { 2008, 2, 29, 59, 5 },
+ { 2008, 3, 1, 60, 6 },
+ { 2008, 12, 31, 365, 3 },
+ { 2009, 1, 1, 0, 4 },
+ { 2011, 1, 1, 0, 6 },
+ { 2011, 2, 28, 58, 1 },
+ { 2011, 3, 1, 59, 2 },
+ { 2011, 12, 31, 364, 6 },
+ { 2012, 1, 1, 0, 0 },
+ { 2019, 1, 2, 1, 3 },
+ { 2019, 2, 2, 32, 6 },
+ { 2019, 3, 2, 60, 6 },
+ { 2019, 4, 2, 91, 2 },
+ { 2019, 5, 2, 121, 4 },
+ { 2019, 6, 2, 152, 0 },
+ { 2019, 7, 2, 182, 2 },
+ { 2019, 8, 2, 213, 5 },
+ { 2019, 9, 2, 244, 1 },
+ { 2019, 10, 2, 274, 3 },
+ { 2019, 11, 2, 305, 6 },
+ { 2019, 12, 2, 335, 1 },
+ { 2020, 1, 2, 1, 4 },
+ { 2020, 2, 2, 32, 0 },
+ { 2020, 3, 2, 61, 1 },
+ { 2020, 4, 2, 92, 4 },
+ { 2020, 5, 2, 122, 6 },
+ { 2020, 6, 2, 153, 2 },
+ { 2020, 7, 2, 183, 4 },
+ { 2020, 8, 2, 214, 0 },
+ { 2020, 9, 2, 245, 3 },
+ { 2020, 10, 2, 275, 5 },
+ { 2020, 11, 2, 306, 1 },
+ { 2020, 12, 2, 336, 3 }
+};
+
+static int test_days(int n)
+{
+ char d[16];
+ ASN1_TIME *a = NULL;
+ struct tm t;
+ int r;
+
+ BIO_snprintf(d, sizeof(d), "%04d%02d%02d050505Z",
+ day_of_week_tests[n].y, day_of_week_tests[n].m,
+ day_of_week_tests[n].d);
+
+ if (!TEST_ptr(a = ASN1_TIME_new()))
+ return 0;
+
+ r = TEST_true(ASN1_TIME_set_string(a, d))
+ && TEST_true(ASN1_TIME_to_tm(a, &t))
+ && TEST_int_eq(t.tm_yday, day_of_week_tests[n].yd)
+ && TEST_int_eq(t.tm_wday, day_of_week_tests[n].wd);
+
+ ASN1_TIME_free(a);
+ return r;
+}
+
+#define construct_asn1_time(s, t, e) \
+ { { sizeof(s) - 1, t, (unsigned char*)s, 0 }, e }
+
+static const struct {
+ ASN1_TIME asn1;
+ const char *readable;
+} x509_print_tests_rfc_822 [] = {
+ /* Generalized Time */
+ construct_asn1_time("20170731222050Z", V_ASN1_GENERALIZEDTIME,
+ "Jul 31 22:20:50 2017 GMT"),
+ /* Generalized Time, no seconds */
+ construct_asn1_time("201707312220Z", V_ASN1_GENERALIZEDTIME,
+ "Jul 31 22:20:00 2017 GMT"),
+ /* Generalized Time, fractional seconds (3 digits) */
+ construct_asn1_time("20170731222050.123Z", V_ASN1_GENERALIZEDTIME,
+ "Jul 31 22:20:50.123 2017 GMT"),
+ /* Generalized Time, fractional seconds (1 digit) */
+ construct_asn1_time("20170731222050.1Z", V_ASN1_GENERALIZEDTIME,
+ "Jul 31 22:20:50.1 2017 GMT"),
+ /* Generalized Time, fractional seconds (0 digit) */
+ construct_asn1_time("20170731222050.Z", V_ASN1_GENERALIZEDTIME,
+ "Bad time value"),
+ /* UTC Time */
+ construct_asn1_time("170731222050Z", V_ASN1_UTCTIME,
+ "Jul 31 22:20:50 2017 GMT"),
+ /* UTC Time, no seconds */
+ construct_asn1_time("1707312220Z", V_ASN1_UTCTIME,
+ "Jul 31 22:20:00 2017 GMT"),
+};
+
+static const struct {
+ ASN1_TIME asn1;
+ const char *readable;
+} x509_print_tests_iso_8601 [] = {
+ /* Generalized Time */
+ construct_asn1_time("20170731222050Z", V_ASN1_GENERALIZEDTIME,
+ "2017-07-31 22:20:50Z"),
+ /* Generalized Time, no seconds */
+ construct_asn1_time("201707312220Z", V_ASN1_GENERALIZEDTIME,
+ "2017-07-31 22:20:00Z"),
+ /* Generalized Time, fractional seconds (3 digits) */
+ construct_asn1_time("20170731222050.123Z", V_ASN1_GENERALIZEDTIME,
+ "2017-07-31 22:20:50.123Z"),
+ /* Generalized Time, fractional seconds (1 digit) */
+ construct_asn1_time("20170731222050.1Z", V_ASN1_GENERALIZEDTIME,
+ "2017-07-31 22:20:50.1Z"),
+ /* Generalized Time, fractional seconds (0 digit) */
+ construct_asn1_time("20170731222050.Z", V_ASN1_GENERALIZEDTIME,
+ "Bad time value"),
+ /* UTC Time */
+ construct_asn1_time("170731222050Z", V_ASN1_UTCTIME,
+ "2017-07-31 22:20:50Z"),
+ /* UTC Time, no seconds */
+ construct_asn1_time("1707312220Z", V_ASN1_UTCTIME,
+ "2017-07-31 22:20:00Z"),
+};
+
+static int test_x509_time_print_rfc_822(int idx)
+{
+ BIO *m;
+ int ret = 0, rv;
+ char *pp;
+ const char *readable;
+
+ if (!TEST_ptr(m = BIO_new(BIO_s_mem())))
+ goto err;
+
+ rv = ASN1_TIME_print_ex(m, &x509_print_tests_rfc_822[idx].asn1, ASN1_DTFLGS_RFC822);
+ readable = x509_print_tests_rfc_822[idx].readable;
+
+ if (rv == 0 && !TEST_str_eq(readable, "Bad time value")) {
+ /* only if the test case intends to fail... */
+ goto err;
+ }
+ if (!TEST_int_ne(rv = BIO_get_mem_data(m, &pp), 0)
+ || !TEST_int_eq(rv, (int)strlen(readable))
+ || !TEST_strn_eq(pp, readable, rv))
+ goto err;
+
+ ret = 1;
+ err:
+ BIO_free(m);
+ return ret;
+}
+
+static int test_x509_time_print_iso_8601(int idx)
+{
+ BIO *m;
+ int ret = 0, rv;
+ char *pp;
+ const char *readable;
+
+ if (!TEST_ptr(m = BIO_new(BIO_s_mem())))
+ goto err;
+
+ rv = ASN1_TIME_print_ex(m, &x509_print_tests_iso_8601[idx].asn1, ASN1_DTFLGS_ISO8601);
+ readable = x509_print_tests_iso_8601[idx].readable;
+
+ if (rv == 0 && !TEST_str_eq(readable, "Bad time value")) {
+ /* only if the test case intends to fail... */
+ goto err;
+ }
+ if (!TEST_int_ne(rv = BIO_get_mem_data(m, &pp), 0)
+ || !TEST_int_eq(rv, (int)strlen(readable))
+ || !TEST_strn_eq(pp, readable, rv))
+ goto err;
+
+ ret = 1;
+ err:
+ BIO_free(m);
+ return ret;
+}
+
+int setup_tests(void)
+{
+ ADD_TEST(test_x509_cmp_time_current);
+ ADD_TEST(test_X509_cmp_timeframe);
+ ADD_ALL_TESTS(test_x509_cmp_time, OSSL_NELEM(x509_cmp_tests));
+ ADD_ALL_TESTS(test_x509_time, OSSL_NELEM(x509_format_tests));
+ ADD_ALL_TESTS(test_days, OSSL_NELEM(day_of_week_tests));
+ ADD_ALL_TESTS(test_x509_time_print_rfc_822, OSSL_NELEM(x509_print_tests_rfc_822));
+ ADD_ALL_TESTS(test_x509_time_print_iso_8601, OSSL_NELEM(x509_print_tests_iso_8601));
+ return 1;
+}
diff --git a/test/x509aux.c b/test/x509aux.c
new file mode 100644
index 000000000000..bb3523dde592
--- /dev/null
+++ b/test/x509aux.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * https://www.openssl.org/source/license.html
+ * or in the file LICENSE in the source distribution.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <openssl/x509.h>
+#include <openssl/pem.h>
+#include <openssl/conf.h>
+#include <openssl/err.h>
+#include "internal/nelem.h"
+#include "testutil.h"
+
+static int test_certs(int num)
+{
+ int c;
+ char *name = 0;
+ char *header = 0;
+ unsigned char *data = 0;
+ long len;
+ typedef X509 *(*d2i_X509_t)(X509 **, const unsigned char **, long);
+ typedef int (*i2d_X509_t)(const X509 *, unsigned char **);
+ int err = 0;
+ BIO *fp = BIO_new_file(test_get_argument(num), "r");
+
+ if (!TEST_ptr(fp))
+ return 0;
+
+ for (c = 0; !err && PEM_read_bio(fp, &name, &header, &data, &len); ++c) {
+ const int trusted = (strcmp(name, PEM_STRING_X509_TRUSTED) == 0);
+ d2i_X509_t d2i = trusted ? d2i_X509_AUX : d2i_X509;
+ i2d_X509_t i2d = trusted ? i2d_X509_AUX : i2d_X509;
+ X509 *cert = NULL;
+ X509 *reuse = NULL;
+ const unsigned char *p = data;
+ unsigned char *buf = NULL;
+ unsigned char *bufp;
+ long enclen;
+
+ if (!trusted
+ && strcmp(name, PEM_STRING_X509) != 0
+ && strcmp(name, PEM_STRING_X509_OLD) != 0) {
+ TEST_error("unexpected PEM object: %s", name);
+ err = 1;
+ goto next;
+ }
+ cert = d2i(NULL, &p, len);
+
+ if (cert == NULL || (p - data) != len) {
+ TEST_error("error parsing input %s", name);
+ err = 1;
+ goto next;
+ }
+
+ /* Test traditional 2-pass encoding into caller allocated buffer */
+ enclen = i2d(cert, NULL);
+ if (len != enclen) {
+ TEST_error("encoded length %ld of %s != input length %ld",
+ enclen, name, len);
+ err = 1;
+ goto next;
+ }
+ if ((buf = bufp = OPENSSL_malloc(len)) == NULL) {
+ TEST_perror("malloc");
+ err = 1;
+ goto next;
+ }
+ enclen = i2d(cert, &bufp);
+ if (len != enclen) {
+ TEST_error("encoded length %ld of %s != input length %ld",
+ enclen, name, len);
+ err = 1;
+ goto next;
+ }
+ enclen = (long) (bufp - buf);
+ if (enclen != len) {
+ TEST_error("unexpected buffer position after encoding %s", name);
+ err = 1;
+ goto next;
+ }
+ if (memcmp(buf, data, len) != 0) {
+ TEST_error("encoded content of %s does not match input", name);
+ err = 1;
+ goto next;
+ }
+ p = buf;
+ reuse = d2i(NULL, &p, enclen);
+ if (reuse == NULL) {
+ TEST_error("second d2i call failed for %s", name);
+ err = 1;
+ goto next;
+ }
+ err = X509_cmp(reuse, cert);
+ if (err != 0) {
+ TEST_error("X509_cmp for %s resulted in %d", name, err);
+ err = 1;
+ goto next;
+ }
+ OPENSSL_free(buf);
+ buf = NULL;
+
+ /* Test 1-pass encoding into library allocated buffer */
+ enclen = i2d(cert, &buf);
+ if (len != enclen) {
+ TEST_error("encoded length %ld of %s != input length %ld",
+ enclen, name, len);
+ err = 1;
+ goto next;
+ }
+ if (memcmp(buf, data, len) != 0) {
+ TEST_error("encoded content of %s does not match input", name);
+ err = 1;
+ goto next;
+ }
+
+ if (trusted) {
+ /* Encode just the cert and compare with initial encoding */
+ OPENSSL_free(buf);
+ buf = NULL;
+
+ /* Test 1-pass encoding into library allocated buffer */
+ enclen = i2d(cert, &buf);
+ if (enclen > len) {
+ TEST_error("encoded length %ld of %s > input length %ld",
+ enclen, name, len);
+ err = 1;
+ goto next;
+ }
+ if (memcmp(buf, data, enclen) != 0) {
+ TEST_error("encoded cert content does not match input");
+ err = 1;
+ goto next;
+ }
+ }
+
+ /*
+ * If any of these were null, PEM_read() would have failed.
+ */
+ next:
+ X509_free(cert);
+ X509_free(reuse);
+ OPENSSL_free(buf);
+ OPENSSL_free(name);
+ OPENSSL_free(header);
+ OPENSSL_free(data);
+ }
+ BIO_free(fp);
+
+ if (ERR_GET_REASON(ERR_peek_last_error()) == PEM_R_NO_START_LINE) {
+ /* Reached end of PEM file */
+ if (c > 0) {
+ ERR_clear_error();
+ return 1;
+ }
+ }
+
+ /* Some other PEM read error */
+ return 0;
+}
+
+OPT_TEST_DECLARE_USAGE("certfile...\n")
+
+int setup_tests(void)
+{
+ size_t n;
+
+ if (!test_skip_common_options()) {
+ TEST_error("Error parsing test options\n");
+ return 0;
+ }
+
+ n = test_get_argument_count();
+ if (n == 0)
+ return 0;
+
+ ADD_ALL_TESTS(test_certs, (int)n);
+ return 1;
+}
diff --git a/tools/build.info b/tools/build.info
new file mode 100644
index 000000000000..059e58234576
--- /dev/null
+++ b/tools/build.info
@@ -0,0 +1,7 @@
+{- our $c_rehash_name =
+ $config{target} =~ /^(VC|vms)-/ ? "c_rehash.pl" : "c_rehash";
+ "" -}
+IF[{- !$disabled{apps} -}]
+ SCRIPTS={- $c_rehash_name -}
+ SOURCE[{- $c_rehash_name -}]=c_rehash.in
+ENDIF
diff --git a/tools/c_rehash.in b/tools/c_rehash.in
new file mode 100644
index 000000000000..343cdc1e7575
--- /dev/null
+++ b/tools/c_rehash.in
@@ -0,0 +1,251 @@
+#!{- $config{HASHBANGPERL} -}
+{- use OpenSSL::Util; -}
+# {- join("\n# ", @autowarntext) -}
+# Copyright 1999-2022 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
+
+# Perl c_rehash script, scan all files in a directory
+# and add symbolic links to their hash values.
+
+my $dir = {- quotify1($config{openssldir}) -};
+my $prefix = {- quotify1($config{prefix}) -};
+
+my $errorcount = 0;
+my $openssl = $ENV{OPENSSL} || "openssl";
+my $pwd;
+my $x509hash = "-subject_hash";
+my $crlhash = "-hash";
+my $verbose = 0;
+my $symlink_exists=eval {symlink("",""); 1};
+my $removelinks = 1;
+
+## Parse flags.
+while ( $ARGV[0] =~ /^-/ ) {
+ my $flag = shift @ARGV;
+ last if ( $flag eq '--');
+ if ( $flag eq '-old') {
+ $x509hash = "-subject_hash_old";
+ $crlhash = "-hash_old";
+ } elsif ( $flag eq '-h' || $flag eq '-help' ) {
+ help();
+ } elsif ( $flag eq '-n' ) {
+ $removelinks = 0;
+ } elsif ( $flag eq '-v' ) {
+ $verbose++;
+ }
+ else {
+ print STDERR "Usage error; try -h.\n";
+ exit 1;
+ }
+}
+
+sub help {
+ print "Usage: c_rehash [-old] [-h] [-help] [-v] [dirs...]\n";
+ print " -old use old-style digest\n";
+ print " -h or -help print this help text\n";
+ print " -v print files removed and linked\n";
+ exit 0;
+}
+
+eval "require Cwd";
+if (defined(&Cwd::getcwd)) {
+ $pwd=Cwd::getcwd();
+} else {
+ $pwd=`pwd`;
+ chomp($pwd);
+}
+
+# DOS/Win32 or Unix delimiter? Prefix our installdir, then search.
+my $path_delim = ($pwd =~ /^[a-z]\:/i) ? ';' : ':';
+$ENV{PATH} = "$prefix/bin" . ($ENV{PATH} ? $path_delim . $ENV{PATH} : "");
+
+if (! -x $openssl) {
+ my $found = 0;
+ foreach (split /$path_delim/, $ENV{PATH}) {
+ if (-x "$_/$openssl") {
+ $found = 1;
+ $openssl = "$_/$openssl";
+ last;
+ }
+ }
+ if ($found == 0) {
+ print STDERR "c_rehash: rehashing skipped ('openssl' program not available)\n";
+ exit 0;
+ }
+}
+
+if (@ARGV) {
+ @dirlist = @ARGV;
+} elsif ($ENV{SSL_CERT_DIR}) {
+ @dirlist = split /$path_delim/, $ENV{SSL_CERT_DIR};
+} else {
+ $dirlist[0] = "$dir/certs";
+}
+
+if (-d $dirlist[0]) {
+ chdir $dirlist[0];
+ $openssl="$pwd/$openssl" if (!-x $openssl);
+ chdir $pwd;
+}
+
+foreach (@dirlist) {
+ if (-d $_ ) {
+ if ( -w $_) {
+ hash_dir($_);
+ } else {
+ print "Skipping $_, can't write\n";
+ $errorcount++;
+ }
+ }
+}
+exit($errorcount);
+
+sub copy_file {
+ my ($src_fname, $dst_fname) = @_;
+
+ if (open(my $in, "<", $src_fname)) {
+ if (open(my $out, ">", $dst_fname)) {
+ print $out $_ while (<$in>);
+ close $out;
+ } else {
+ warn "Cannot open $dst_fname for write, $!";
+ }
+ close $in;
+ } else {
+ warn "Cannot open $src_fname for read, $!";
+ }
+}
+
+sub hash_dir {
+ my $dir = shift;
+ my %hashlist;
+
+ print "Doing $dir\n";
+
+ if (!chdir $dir) {
+ print STDERR "WARNING: Cannot chdir to '$dir', $!\n";
+ return;
+ }
+
+ opendir(DIR, ".") || print STDERR "WARNING: Cannot opendir '.', $!\n";
+ my @flist = sort readdir(DIR);
+ closedir DIR;
+ if ( $removelinks ) {
+ # Delete any existing symbolic links
+ foreach (grep {/^[\da-f]+\.r{0,1}\d+$/} @flist) {
+ if (-l $_) {
+ print "unlink $_\n" if $verbose;
+ unlink $_ || warn "Can't unlink $_, $!\n";
+ }
+ }
+ }
+ FILE: foreach $fname (grep {/\.(pem)|(crt)|(cer)|(crl)$/} @flist) {
+ # Check to see if certificates and/or CRLs present.
+ my ($cert, $crl) = check_file($fname);
+ if (!$cert && !$crl) {
+ print STDERR "WARNING: $fname does not contain a certificate or CRL: skipping\n";
+ next;
+ }
+ link_hash_cert($fname) if ($cert);
+ link_hash_crl($fname) if ($crl);
+ }
+
+ chdir $pwd;
+}
+
+sub check_file {
+ my ($is_cert, $is_crl) = (0,0);
+ my $fname = $_[0];
+
+ open(my $in, "<", $fname);
+ while(<$in>) {
+ if (/^-----BEGIN (.*)-----/) {
+ my $hdr = $1;
+ if ($hdr =~ /^(X509 |TRUSTED |)CERTIFICATE$/) {
+ $is_cert = 1;
+ last if ($is_crl);
+ } elsif ($hdr eq "X509 CRL") {
+ $is_crl = 1;
+ last if ($is_cert);
+ }
+ }
+ }
+ close $in;
+ return ($is_cert, $is_crl);
+}
+
+sub compute_hash {
+ my $fh;
+ if ( $^O eq "VMS" ) {
+ # VMS uses the open through shell
+ # The file names are safe there and list form is unsupported
+ if (!open($fh, "-|", join(' ', @_))) {
+ print STDERR "Cannot compute hash on '$fname'\n";
+ return;
+ }
+ } else {
+ if (!open($fh, "-|", @_)) {
+ print STDERR "Cannot compute hash on '$fname'\n";
+ return;
+ }
+ }
+ return (<$fh>, <$fh>);
+}
+
+# Link a certificate to its subject name hash value, each hash is of
+# the form <hash>.<n> where n is an integer. If the hash value already exists
+# then we need to up the value of n, unless its a duplicate in which
+# case we skip the link. We check for duplicates by comparing the
+# certificate fingerprints
+
+sub link_hash_cert {
+ link_hash($_[0], 'cert');
+}
+
+# Same as above except for a CRL. CRL links are of the form <hash>.r<n>
+
+sub link_hash_crl {
+ link_hash($_[0], 'crl');
+}
+
+sub link_hash {
+ my ($fname, $type) = @_;
+ my $is_cert = $type eq 'cert';
+
+ my ($hash, $fprint) = compute_hash($openssl,
+ $is_cert ? "x509" : "crl",
+ $is_cert ? $x509hash : $crlhash,
+ "-fingerprint", "-noout",
+ "-in", $fname);
+ chomp $hash;
+ $hash =~ s/^.*=// if !$is_cert;
+ chomp $fprint;
+ return if !$hash;
+ $fprint =~ s/^.*=//;
+ $fprint =~ tr/://d;
+ my $suffix = 0;
+ # Search for an unused hash filename
+ my $crlmark = $is_cert ? "" : "r";
+ while(exists $hashlist{"$hash.$crlmark$suffix"}) {
+ # Hash matches: if fingerprint matches its a duplicate cert
+ if ($hashlist{"$hash.$crlmark$suffix"} eq $fprint) {
+ my $what = $is_cert ? 'certificate' : 'CRL';
+ print STDERR "WARNING: Skipping duplicate $what $fname\n";
+ return;
+ }
+ $suffix++;
+ }
+ $hash .= ".$crlmark$suffix";
+ if ($symlink_exists) {
+ print "link $fname -> $hash\n" if $verbose;
+ symlink $fname, $hash || warn "Can't symlink, $!";
+ } else {
+ print "copy $fname -> $hash\n" if $verbose;
+ copy_file($fname, $hash);
+ }
+ $hashlist{$hash} = $fprint;
+}
diff --git a/util/add-depends.pl b/util/add-depends.pl
new file mode 100644
index 000000000000..599a267f6dd5
--- /dev/null
+++ b/util/add-depends.pl
@@ -0,0 +1,376 @@
+#! /usr/bin/env perl
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use lib '.';
+use configdata;
+
+use File::Spec::Functions qw(:DEFAULT rel2abs);
+use File::Compare qw(compare_text);
+use feature 'state';
+
+# When using stat() on Windows, we can get it to perform better by avoid some
+# data. This doesn't affect the mtime field, so we're not losing anything...
+${^WIN32_SLOPPY_STAT} = 1;
+
+my $debug = $ENV{ADD_DEPENDS_DEBUG};
+my $buildfile = $config{build_file};
+my $build_mtime = (stat($buildfile))[9];
+my $configdata_mtime = (stat('configdata.pm'))[9];
+my $rebuild = 0;
+my $depext = $target{dep_extension} || ".d";
+my @depfiles =
+ sort
+ grep {
+ # This grep has side effects. Not only does if check the existence
+ # of the dependency file given in $_, but it also checks if it's
+ # newer than the build file or older than configdata.pm, and if it
+ # is, sets $rebuild.
+ my @st = stat($_);
+ $rebuild = 1
+ if @st && ($st[9] > $build_mtime || $st[9] < $configdata_mtime);
+ scalar @st > 0; # Determines the grep result
+ }
+ map { (my $x = $_) =~ s|\.o$|$depext|; $x; }
+ ( ( grep { $unified_info{sources}->{$_}->[0] =~ /\.cc?$/ }
+ keys %{$unified_info{sources}} ),
+ ( grep { $unified_info{shared_sources}->{$_}->[0] =~ /\.cc?$/ }
+ keys %{$unified_info{shared_sources}} ) );
+
+exit 0 unless $rebuild;
+
+# Ok, primary checks are done, time to do some real work
+
+my $producer = shift @ARGV;
+die "Producer not given\n" unless $producer;
+
+my $srcdir = $config{sourcedir};
+my $blddir = $config{builddir};
+my $abs_srcdir = rel2abs($srcdir);
+my $abs_blddir = rel2abs($blddir);
+
+# Convenient cache of absolute to relative map. We start with filling it
+# with mappings for the known generated header files. They are relative to
+# the current working directory, so that's an easy task.
+# NOTE: there's more than C header files that are generated. They will also
+# generate entries in this map. We could of course deal with C header files
+# only, but in case we decide to handle more than just C files in the future,
+# we already have the mechanism in place here.
+# NOTE2: we lower case the index to make it searchable without regard for
+# character case. That could seem dangerous, but as long as we don't have
+# files we depend on in the same directory that only differ by character case,
+# we're fine.
+my %depconv_cache =
+ map { catfile($abs_blddir, $_) => $_ }
+ keys %{$unified_info{generate}};
+
+my %procedures = (
+ 'gcc' =>
+ sub {
+ (my $objfile = shift) =~ s|\.d$|.o|i;
+ my $line = shift;
+
+ # Remove the original object file
+ $line =~ s|^.*\.o: | |;
+ # All we got now is a dependency, shave off surrounding spaces
+ $line =~ s/^\s+//;
+ $line =~ s/\s+$//;
+ # Also, shave off any continuation
+ $line =~ s/\s*\\$//;
+
+ # Split the line into individual header files, and keep those
+ # that exist in some form
+ my @headers;
+ for (split(/\s+/, $line)) {
+ my $x = rel2abs($_);
+
+ if (!$depconv_cache{$x}) {
+ if (-f $x) {
+ $depconv_cache{$x} = $_;
+ }
+ }
+
+ if ($depconv_cache{$x}) {
+ push @headers, $_;
+ } else {
+ print STDERR "DEBUG[$producer]: ignoring $objfile <- $line\n"
+ if $debug;
+ }
+ }
+ return ($objfile, join(' ', @headers)) if @headers;
+ return undef;
+ },
+ 'makedepend' =>
+ sub {
+ # makedepend, in its infinite wisdom, wants to have the object file
+ # in the same directory as the source file. This doesn't work too
+ # well with out-of-source-tree builds, so we must resort to tricks
+ # to get things right. Fortunately, the .d files are always placed
+ # parallel with the object files, so all we need to do is construct
+ # the object file name from the dep file name.
+ (my $objfile = shift) =~ s|\.d$|.o|i;
+ my $line = shift;
+
+ # Discard comments
+ return undef if $line =~ /^(#.*|\s*)$/;
+
+ # Remove the original object file
+ $line =~ s|^.*\.o: | |;
+ # Also, remove any dependency that starts with a /, because those
+ # are typically system headers
+ $line =~ s/\s+\/(\\.|\S)*//g;
+ # Finally, discard all empty lines
+ return undef if $line =~ /^\s*$/;
+
+ # All we got now is a dependency, just shave off surrounding spaces
+ $line =~ s/^\s+//;
+ $line =~ s/\s+$//;
+ return ($objfile, $line);
+ },
+ 'VMS C' =>
+ sub {
+ state $abs_srcdir_shaved = undef;
+ state $srcdir_shaved = undef;
+
+ unless (defined $abs_srcdir_shaved) {
+ ($abs_srcdir_shaved = $abs_srcdir) =~ s|[>\]]$||;
+ ($srcdir_shaved = $srcdir) =~ s|[>\]]$||;
+ }
+
+ # current versions of DEC / Compaq / HP / VSI C strips away all
+ # directory information from the object file, so we must insert it
+ # back. To make life simpler, we simply replace it with the
+ # corresponding .D file that's had its extension changed. Since
+ # .D files are always written parallel to the object files, we
+ # thereby get the directory information for free.
+ (my $objfile = shift) =~ s|\.D$|.OBJ|i;
+ my $line = shift;
+
+ # Shave off the target.
+ #
+ # The pattern for target and dependencies will always take this
+ # form:
+ #
+ # target SPACE : SPACE deps
+ #
+ # This is so a volume delimiter (a : without any spaces around it)
+ # won't get mixed up with the target / deps delimiter. We use this
+ # to easily identify what needs to be removed.
+ m|\s:\s|; $line = $';
+
+ # We know that VMS has system header files in text libraries,
+ # extension .TLB. We also know that our header files aren't stored
+ # in text libraries. Finally, we know that VMS C produces exactly
+ # one dependency per line, so we simply discard any line ending with
+ # .TLB.
+ return undef if /\.TLB\s*$/;
+
+ # All we got now is a dependency, just shave off surrounding spaces
+ $line =~ s/^\s+//;
+ $line =~ s/\s+$//;
+
+ # VMS C gives us absolute paths, always. Let's see if we can
+ # make them relative instead.
+ $line = canonpath($line);
+
+ unless (defined $depconv_cache{$line}) {
+ my $dep = $line;
+ # Since we have already pre-populated the cache with
+ # mappings for generated headers, we only need to deal
+ # with the source tree.
+ if ($dep =~ s|^\Q$abs_srcdir_shaved\E([\.>\]])?|$srcdir_shaved$1|i) {
+ # Also check that the header actually exists
+ if (-f $line) {
+ $depconv_cache{$line} = $dep;
+ }
+ }
+ }
+ return ($objfile, $depconv_cache{$line})
+ if defined $depconv_cache{$line};
+ print STDERR "DEBUG[$producer]: ignoring $objfile <- $line\n"
+ if $debug;
+
+ return undef;
+ },
+ 'VC' =>
+ sub {
+ # With Microsoft Visual C the flags /Zs /showIncludes give us the
+ # necessary output to be able to create dependencies that nmake
+ # (or any 'make' implementation) should be able to read, with a
+ # bit of help. The output we're interested in looks something
+ # like this (it always starts the same)
+ #
+ # Note: including file: {whatever header file}
+ #
+ # This output is localized, so for example, the German pack gives
+ # us this:
+ #
+ # Hinweis: Einlesen der Datei: {whatever header file}
+ #
+ # To accomodate, we need to use a very general regular expression
+ # to parse those lines.
+ #
+ # Since there's no object file name at all in that information,
+ # we must construct it ourselves.
+
+ (my $objfile = shift) =~ s|\.d$|.obj|i;
+ my $line = shift;
+
+ # There are also other lines mixed in, for example compiler
+ # warnings, so we simply discard anything that doesn't start with
+ # the Note:
+
+ if (/^[^:]*: [^:]*: */) {
+ (my $tail = $') =~ s/\s*\R$//;
+
+ # VC gives us absolute paths for all include files, so to
+ # remove system header dependencies, we need to check that
+ # they don't match $abs_srcdir or $abs_blddir.
+ $tail = canonpath($tail);
+
+ unless (defined $depconv_cache{$tail}) {
+ my $dep = $tail;
+ # Since we have already pre-populated the cache with
+ # mappings for generated headers, we only need to deal
+ # with the source tree.
+ if ($dep =~ s|^\Q$abs_srcdir\E\\|\$(SRCDIR)\\|i) {
+ # Also check that the header actually exists
+ if (-f $line) {
+ $depconv_cache{$tail} = $dep;
+ }
+ }
+ }
+ return ($objfile, '"'.$depconv_cache{$tail}.'"')
+ if defined $depconv_cache{$tail};
+ print STDERR "DEBUG[$producer]: ignoring $objfile <- $tail\n"
+ if $debug;
+ }
+
+ return undef;
+ },
+ 'embarcadero' =>
+ sub {
+ # With Embarcadero C++Builder's preprocessor (cpp32.exe) the -Sx -Hp
+ # flags give us the list of #include files read, like the following:
+ #
+ # Including ->->{whatever header file}
+ #
+ # where each "->" indicates the nesting level of the #include. The
+ # logic here is otherwise the same as the 'VC' scheme.
+ #
+ # Since there's no object file name at all in that information,
+ # we must construct it ourselves.
+
+ (my $objfile = shift) =~ s|\.d$|.obj|i;
+ my $line = shift;
+
+ # There are also other lines mixed in, for example compiler
+ # warnings, so we simply discard anything that doesn't start with
+ # the Note:
+
+ if (/^Including (->)*/) {
+ (my $tail = $') =~ s/\s*\R$//;
+
+ # C++Builder gives us relative paths when possible, so to
+ # remove system header dependencies, we convert them to
+ # absolute paths and check that they don't match $abs_srcdir
+ # or $abs_blddir, just as the 'VC' scheme.
+ $tail = rel2abs($tail);
+
+ unless (defined $depconv_cache{$tail}) {
+ my $dep = $tail;
+ # Since we have already pre-populated the cache with
+ # mappings for generated headers, we only need to deal
+ # with the source tree.
+ if ($dep =~ s|^\Q$abs_srcdir\E\\|\$(SRCDIR)\\|i) {
+ # Also check that the header actually exists
+ if (-f $line) {
+ $depconv_cache{$tail} = $dep;
+ }
+ }
+ }
+ return ($objfile, '"'.$depconv_cache{$tail}.'"')
+ if defined $depconv_cache{$tail};
+ print STDERR "DEBUG[$producer]: ignoring $objfile <- $tail\n"
+ if $debug;
+ }
+
+ return undef;
+ },
+);
+my %continuations = (
+ 'gcc' => "\\",
+ 'makedepend' => "\\",
+ 'VMS C' => "-",
+ 'VC' => "\\",
+ 'embarcadero' => "\\",
+);
+
+die "Producer unrecognised: $producer\n"
+ unless exists $procedures{$producer} && exists $continuations{$producer};
+
+my $procedure = $procedures{$producer};
+my $continuation = $continuations{$producer};
+
+my $buildfile_new = "$buildfile-$$";
+
+my %collect = ();
+foreach my $depfile (@depfiles) {
+ open IDEP,$depfile or die "Trying to read $depfile: $!\n";
+ while (<IDEP>) {
+ s|\R$||; # The better chomp
+ my ($target, $deps) = $procedure->($depfile, $_);
+ $collect{$target}->{$deps} = 1 if defined $target;
+ }
+ close IDEP;
+}
+
+open IBF, $buildfile or die "Trying to read $buildfile: $!\n";
+open OBF, '>', $buildfile_new or die "Trying to write $buildfile_new: $!\n";
+while (<IBF>) {
+ last if /^# DO NOT DELETE THIS LINE/;
+ print OBF or die "$!\n";
+}
+close IBF;
+
+print OBF "# DO NOT DELETE THIS LINE -- make depend depends on it.\n";
+
+foreach my $target (sort keys %collect) {
+ my $prefix = $target . ' :';
+ my @deps = sort keys %{$collect{$target}};
+
+ while (@deps) {
+ my $buf = $prefix;
+ $prefix = '';
+
+ while (@deps && ($buf eq ''
+ || length($buf) + length($deps[0]) <= 77)) {
+ $buf .= ' ' . shift @deps;
+ }
+ $buf .= ' '.$continuation if @deps;
+
+ print OBF $buf,"\n" or die "Trying to print: $!\n"
+ }
+}
+
+close OBF;
+
+if (compare_text($buildfile_new, $buildfile) != 0) {
+ rename $buildfile_new, $buildfile
+ or die "Trying to rename $buildfile_new -> $buildfile: $!\n";
+}
+
+END {
+ # On VMS, we want to remove all generations of this file, in case there
+ # are more than one, so we loop.
+ if (defined $buildfile_new) {
+ while (unlink $buildfile_new) {}
+ }
+}
diff --git a/util/build.info b/util/build.info
new file mode 100644
index 000000000000..80120fdae1dd
--- /dev/null
+++ b/util/build.info
@@ -0,0 +1,11 @@
+IF[{- $target{build_scheme}->[1] eq "VMS" -}]
+ SCRIPTS{noinst}=local_shlib.com unlocal_shlib.com
+ SOURCE[local_shlib.com]=local_shlib.com.in
+ SOURCE[unlocal_shlib.com]=unlocal_shlib.com.in
+ELSIF[{- $target{build_scheme}->[1] eq "unix" -}]
+ SCRIPTS{noinst}=shlib_wrap.sh
+ SOURCE[shlib_wrap.sh]=shlib_wrap.sh.in
+ENDIF
+SCRIPTS{noinst}=wrap.pl
+SOURCE[wrap.pl]=wrap.pl.in
+DEPEND[wrap.pl]=../configdata.pm
diff --git a/util/c-compress-test.pl b/util/c-compress-test.pl
new file mode 100755
index 000000000000..8ea3e045bc4f
--- /dev/null
+++ b/util/c-compress-test.pl
@@ -0,0 +1,54 @@
+#! /usr/bin/env perl
+#
+# TEST c-compress-pl with a number of examples and what should happen to them
+
+use strict;
+use warnings;
+
+use File::Basename;
+
+my @pairs =
+ (
+ [ <<'_____'
+/* A hell of a program */
+#def\
+ine foo/* bar */ 3
+#define bar /* haha "A /* comment */ that should /* remain" */
+#define haha /* hoho */ "A /* comment */ that should /* remain" */
+
+int main() {
+ int x;
+ /* one lonely comment */
+}
+_____
+ , <<'_____'
+#define foo 3
+#define bar that should
+#define haha "A /* comment */ that should /* remain" */
+int main() {
+int x;
+}
+_____
+ ]
+ );
+
+my $here = dirname $0;
+my $c_compress = "$here/lang-compress.pl";
+
+use FileHandle;
+use IPC::Open2;
+use Text::Diff;
+foreach (@pairs) {
+ my $source = $_->[0];
+ my $expected = $_->[1];
+ my $pid = open2(\*Reader, \*Writer, "perl $c_compress 'C'");
+ print Writer $source;
+ close Writer;
+
+ local $/ = undef; # slurp
+ my $got = <Reader>;
+
+ if ($got ne $expected) {
+ print "MISMATCH:\n", diff \$expected, \$got;
+ }
+}
diff --git a/util/cavs-to-evptest.pl b/util/cavs-to-evptest.pl
new file mode 100644
index 000000000000..8df32943dbc7
--- /dev/null
+++ b/util/cavs-to-evptest.pl
@@ -0,0 +1,121 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+#Convert CCM CAVS test vectors to a format suitable for evp_test
+
+use strict;
+use warnings;
+
+my $alg;
+my $mode;
+my $keylen;
+my $key = "";
+my $iv = "";
+my $aad = "";
+my $ct = "";
+my $pt = "";
+my $tag = "";
+my $aadlen = 0;
+my $ptlen = 0;
+my $taglen = 0;
+my $res = "";
+my $intest = 0;
+my $fixediv = 0;
+
+while (<STDIN>)
+{
+ chomp;
+
+ # Pull out the cipher mode from the comment at the beginning of the file
+ if(/^#\s*"([^-]+)-\w+" information/) {
+ $mode = lc($1);
+ # Pull out the key length from the comment at the beginning of the file
+ } elsif(/^#\s*(\w+) Keylen: (\d+)/) {
+ $alg = lc($1);
+ $keylen = $2;
+ # Some parameters common to many tests appear as a list in square brackets
+ # so parse these
+ } elsif(/\[(.*)\]/) {
+ my @pairs = split(/, /, $1);
+ foreach my $pair (@pairs) {
+ $pair =~ /(\w+)\s*=\s*(\d+)/;
+ # AAD Length
+ if ($1 eq "Alen") {
+ $aadlen = $2;
+ # Plaintext length
+ } elsif ($1 eq "Plen") {
+ $ptlen = $2;
+ # Tag length
+ } elsif ($1 eq "Tlen") {
+ $taglen = $2;
+ }
+ }
+ # Key/Value pair
+ } elsif (/^\s*(\w+)\s*=\s*(\S.*)\r/) {
+ if ($1 eq "Key") {
+ $key = $2;
+ } elsif ($1 eq "Nonce") {
+ $iv = $2;
+ if ($intest == 0) {
+ $fixediv = 1;
+ } else {
+ $fixediv = 0;
+ }
+ } elsif ($1 eq "Adata") {
+ $aad = $2;
+ } elsif ($1 eq "CT") {
+ $ct = substr($2, 0, length($2) - ($taglen * 2));
+ $tag = substr($2, $taglen * -2);
+ } elsif ($1 eq "Payload") {
+ $pt = $2;
+ } elsif ($1 eq "Result") {
+ if ($2 =~ /Fail/) {
+ $res = "CIPHERUPDATE_ERROR";
+ }
+ } elsif ($1 eq "Count") {
+ $intest = 1;
+ } elsif ($1 eq "Plen") {
+ $ptlen = $2;
+ } elsif ($1 eq "Tlen") {
+ $taglen = $2;
+ } elsif ($1 eq "Alen") {
+ $aadlen = $2;
+ }
+ # Something else - probably just a blank line
+ } elsif ($intest) {
+ print "Cipher = $alg-$keylen-$mode\n";
+ print "Key = $key\n";
+ print "IV = $iv\n";
+ print "AAD =";
+ if ($aadlen > 0) {
+ print " $aad";
+ }
+ print "\nTag =";
+ if ($taglen > 0) {
+ print " $tag";
+ }
+ print "\nPlaintext =";
+ if ($ptlen > 0) {
+ print " $pt";
+ }
+ print "\nCiphertext = $ct\n";
+ if ($res ne "") {
+ print "Operation = DECRYPT\n";
+ print "Result = $res\n";
+ }
+ print "\n";
+ $res = "";
+ if ($fixediv == 0) {
+ $iv = "";
+ }
+ $aad = "";
+ $tag = "";
+ $pt = "";
+ $intest = 0;
+ }
+}
diff --git a/util/check-format-test-negatives.c b/util/check-format-test-negatives.c
new file mode 100644
index 000000000000..b6c42a00a075
--- /dev/null
+++ b/util/check-format-test-negatives.c
@@ -0,0 +1,893 @@
+/*
+ * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Siemens AG 2015-2022
+ *
+ * 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
+ */
+
+/*
+ * A collection of test cases where check-format.pl should not report issues.
+ * There are some known false positives, though, which are marked below.
+ */
+
+#include <errno.h> /* should not report whitespace nits within <...> */
+#define F \
+ void f() \
+ { \
+ int i; \
+ int j; \
+ \
+ return; \
+ }
+
+/* allow extra SPC in single-line comment */
+/*
+ * allow extra SPC in regular multi-line comment
+ */
+/*-
+ * allow extra SPC in format-tagged multi-line comment
+ */
+/** allow extra '*' in comment opening */
+/*! allow extra '!' in comment opening */
+/*
+ ** allow "**" as first non-space chars of a line within multi-line comment
+ */
+
+int f(void) /*
+ * trailing multi-line comment
+ */
+{
+ typedef int INT;
+ void v;
+ short b;
+ char c;
+ signed s;
+ unsigned u;
+ int i;
+ long l;
+ float f;
+ double d;
+ enum {} enu;
+ struct {} stru;
+ union {} un;
+ auto a;
+ extern e;
+ static int stat;
+ const int con;
+ volatile int vola;
+ register int reg;
+ OSSL_x y, *p = params;
+ int params[];
+ OSSL_PARAM * (* params []) [MAX + 1];
+ XY *(* fn)(int a, char b);
+ /*
+ * multi-line comment should not disturb detection of local decls
+ */
+ BIO1 ***b;
+ /* intra-line comment should not disturb detection of local decls */
+ unsigned k;
+
+ /* intra-line comment should not disturb detection of end of local decls */
+
+ {
+ int x; /* just decls in block */
+ }
+ if (p != (unsigned char *)
+ &(ctx->tmp[0])) {
+ i -= (p - (unsigned char *) /* do not confuse with var decl */
+ &(ctx->tmp[0]));
+ }
+ {
+ ctx->buf_off = 0; /* do not confuse with var decl */
+ return 0;
+ }
+ {
+ ctx->buf_len = EVP_EncodeBlock((unsigned char *)ctx->buf,
+ (unsigned char *)ctx->tmp, /* no decl */
+ ctx->tmp_len);
+ }
+ {
+ EVP_EncodeFinal(ctx->base64,
+ (unsigned char *)ctx->buf, &(ctx->len)); /* no decl */
+ /* push out the bytes */
+ goto again;
+ }
+ {
+ f(1, (unsigned long)2); /* no decl */
+ x;
+ }
+ {
+ char *pass_str = get_passwd(opt_srv_secret, "x");
+
+ if (pass_str != NULL) {
+ cleanse(opt_srv_secret);
+ res = OSSL_CMP_CTX_set1_secretValue(ctx, (unsigned char *)pass_str,
+ strlen(pass_str));
+ clear_free(pass_str);
+ }
+ }
+}
+
+int g(void)
+{
+ if (ctx == NULL) { /* non-leading end-of-line comment */
+ if (/* comment after '(' */ pem_name != NULL /* comment before ')' */)
+ /* entire-line comment indent usually like for the following line */
+ return NULL; /* hanging indent also for this line after comment */
+ /* leading comment has same indentation as normal code */ stmt;
+ /* entire-line comment may have same indent as normal code */
+ }
+ for (i = 0; i < n; i++)
+ for (; i < n; i++)
+ for (i = 0; ; i++)
+ for (i = 0;; i++)
+ for (i = 0; i < n; )
+ for (i = 0; i < n;)
+ ;
+ for (i = 0; ; )
+ for (i = 0; ;)
+ for (i = 0;; )
+ for (i = 0;;)
+ for (; i < n; )
+ for (; j < n;)
+ for (; ; i++)
+ for (;; i++)
+ ;
+ for (;;) /* the only variant allowed in case of "empty" for (...) */
+ ;
+ for (;;) ; /* should not trigger: space before ';' */
+ lab: ; /* should not trigger: space before ';' */
+
+#if X
+ if (1) /* bad style: just part of control structure depends on #if */
+#else
+ if (2) /*@ resulting false positive */
+#endif
+ c; /*@ resulting false positive */
+
+ if (1)
+ if (2)
+ c;
+ else
+ e;
+ else
+ f;
+ do
+ do
+ 2;
+ while (1);
+ while (2);
+
+ if (1)
+ f(a, b);
+ do
+ 1; while (2); /*@ more than one stmt just to construct case */
+ if (1)
+ f(a, b);
+ else
+ do
+ 1;
+ while (2);
+ if (1)
+ f(a, b);
+ else do /*@ (non-brace) code before 'do' just to construct case */
+ 1;
+ while (2);
+ f1234(a,
+ b); do /*@ (non-brace) code before 'do' just to construct case */
+ 1;
+ while (2);
+ if (1)
+ f(a,
+ b); do /*@ (non-brace) code before 'do' just to construct case */
+ 1;
+ while (2);
+ if (1)
+ f(a, b);
+ else
+ do f(c, c); /*@ (non-brace) code after 'do' just to construct case */
+ while (2);
+
+ if (1)
+ f(a, b);
+ else
+ return;
+ if (1)
+ f(a,
+ b); else /*@ (non-brace) code before 'else' just to construct case */
+ do
+ 1;
+ while (2);
+
+ if (1)
+ { /*@ brace after 'if' not on same line just to construct case */
+ c;
+ d;
+ }
+ /* this comment is correctly indented if it refers to the following line */
+ d;
+
+ if (1) {
+ 2;
+ } else /*@ no brace after 'else' just to construct case */
+ 3;
+ do {
+ } while (x);
+ if (1) {
+ 2;
+ } else {
+ 3;
+ }
+ if (4)
+ 5;
+ else
+ 6;
+
+ if (1) {
+ if (2) {
+ case MAC_TYPE_MAC:
+ {
+ EVP_MAC_CTX *new_mac_ctx;
+
+ if (ctx->pkey == NULL)
+ return 0;
+ }
+ break;
+ default:
+ /* This should be dead code */
+ return 0;
+ }
+ }
+ if (expr_line1
+ == expr_line2
+ && expr_line3) {
+ c1;
+ } else {
+ c;
+ d;
+ }
+ if (expr_line1
+ == expr_line2
+ && expr_line3)
+ hanging_stmt;
+}
+#define m \
+ do { /* should not be confused with function header followed by '{' */ \
+ } while (0)
+
+/* should not trigger: constant on LHS of comparison or assignment operator */
+X509 *x509 = NULL;
+int y = a + 1 < b;
+int ret, was_NULL = *certs == NULL;
+
+/* should not trigger: missing space before ... */
+float z = 1e-6 * (-1) * b[+6] * 1e+1 * (a)->f * (long)+1
+ - (tmstart.tv_sec + tmstart.tv_nsec * 1e-9);
+struct st = {-1, 0};
+int x = (y <<= 1) + (z <= 5.0);
+
+const OPTIONS passwd_options[] = {
+ {"aixmd5", OPT_AIXMD5, '-', "AIX MD5-based password algorithm"},
+#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_DEPRECATED_3_0)
+ {"crypt", OPT_CRYPT, '-', "Standard Unix password algorithm (default)"},
+#endif
+ OPT_R_OPTIONS,
+
+ {NULL}
+};
+
+typedef * d(int)
+ x;
+typedef (int)
+x;
+typedef (int)*()
+ x;
+typedef *int *
+x;
+typedef OSSL_CMP_MSG *(*cmp_srv_process_cb_t)
+ (OSSL_CMP_SRV_CTX *ctx, OSSL_CMP_MSG *msg)
+ xx;
+
+#define IF(cond) if (cond)
+
+_Pragma("GCC diagnostic push")
+_Pragma("GCC diagnostic pop")
+
+#define CB_ERR_IF(cond, ctx, cert, depth, err) \
+ if ((cond) && ((depth) < 0 || verify_cb_cert(ctx, cert, depth, err) == 0)) \
+ return err
+static int verify_cb_crl(X509_STORE_CTX *ctx, int err)
+{
+ ctx->error = err;
+ return ctx->verify_cb(0, ctx);
+}
+
+#ifdef CMP_FALLBACK_EST
+# define CMP_FALLBACK_CERT_FILE "cert.pem"
+#endif
+
+#define X509_OBJECT_get0_X509(obj) \
+ ((obj) == NULL || (obj)->type != X509_LU_X509 ? NULL : (obj)->data.x509)
+#define X509_STORE_CTX_set_current_cert(ctx, x) { (ctx)->current_cert = (x); }
+#define X509_STORE_set_ex_data(ctx, idx, data) \
+ CRYPTO_set_ex_data(&(ctx)->ex_data, (idx), (data))
+
+typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx);
+#define X509_STORE_CTX_set_error_depth(ctx, depth) \
+ { (ctx)->error_depth = (depth); }
+#define EVP_PKEY_up_ref(x) ((x)->references++)
+/* should not report missing blank line: */
+DECLARE_STACK_OF(OPENSSL_CSTRING)
+bool UTIL_iterate_dir(int (*fn)(const char *file, void *arg), void *arg,
+ const char *path, bool recursive);
+size_t UTIL_url_encode(
+ size_t *size_needed
+ );
+size_t UTIL_url_encode(const char *source,
+ char *destination,
+ size_t destination_len,
+ size_t *size_needed);
+#error well. oops.
+
+int f()
+{
+ c;
+ if (1) {
+ c;
+ }
+ c;
+ if (1)
+ if (2)
+ { /*@ brace after 'if' not on same line just to construct case */
+ c;
+ }
+ e;
+ const usign = {
+ 0xDF,
+ {
+ dd
+ },
+ dd
+ };
+ const unsign = {
+ 0xDF, {
+ dd
+ },
+ dd
+ };
+}
+const unsigned char trans_id[OSSL_CMP_TRANSACTIONID_LENGTH] = {
+ 0xDF,
+};
+const unsigned char trans_id[OSSL_CMP_TRANSACTIONID_LENGTH] =
+ {
+ 0xDF,
+ };
+typedef
+int
+a;
+
+typedef
+struct
+{
+ int a;
+} b;
+typedef enum {
+ w = 0
+} e_type;
+typedef struct {
+ enum {
+ w = 0
+ } e_type;
+ enum {
+ w = 0
+ } e_type;
+} e;
+struct s_type {
+ enum e_type {
+ w = 0
+ };
+};
+struct s_type
+{
+ enum e_type {
+ w = 0
+ };
+ enum e2_type {
+ w = 0
+ };
+};
+
+#define X 1 + 1
+#define Y /* .. */ 2 + 2
+#define Z 3 + 3 * (*a++)
+
+static varref cmp_vars[] = { /* comment. comment? comment! */
+ {&opt_config}, {&opt_section},
+
+ {&opt_server}, {&opt_proxy}, {&opt_path},
+};
+
+#define SWITCH(x) \
+ switch (x) { \
+ case 0: \
+ break; \
+ default: \
+ break; \
+ }
+
+#define DEFINE_SET_GET_BASE_TEST(PREFIX, SETN, GETN, DUP, FIELD, TYPE, ERR, \
+ DEFAULT, NEW, FREE) \
+ static int execute_CTX_##SETN##_##GETN##_##FIELD( \
+ TEST_FIXTURE *fixture) \
+ { \
+ CTX *ctx = fixture->ctx; \
+ int (*set_fn)(CTX *ctx, TYPE) = \
+ (int (*)(CTX *ctx, TYPE))PREFIX##_##SETN##_##FIELD; \
+ /* comment */ \
+ }
+
+union un var; /* struct/union/enum in variable type */
+struct provider_store_st *f() /* struct/union/enum in function return type */
+{
+}
+static void f(struct pem_pass_data *data) /* struct/union/enum in arg list */
+{
+}
+
+static void *fun(void)
+{
+ if (pem_name != NULL)
+ /* comment */
+ return NULL;
+
+label0:
+ label1: /* allow special indent 1 for label at outermost level in body */
+ do {
+ label2:
+ size_t available_len, data_len;
+ const char *curr = txt, *next = txt;
+ char *tmp;
+
+ {
+ label3:
+ }
+ } while (1);
+
+ char *intraline_string_with_comment_delimiters_and_dbl_space = "1 /*1";
+ char *multiline_string_with_comment_delimiters_and_dbl_space = "1 /*1\
+2222222\'22222222222222222\"222222222" "33333 /*3333333333" "44 /*44444444444\
+55555555555555\
+6666";
+}
+
+ASN1_CHOICE(OSSL_CRMF_POPO) = {
+ ASN1_IMP(OSSL_CRMF_POPO, value.raVerified, ASN1_NULL, 0),
+ ASN1_EXP(OSSL_CRMF_POPO, value.keyAgreement, OSSL_CRMF_POPOPRIVKEY, 3)
+} ASN1_CHOICE_END(OSSL_CRMF_POPO)
+IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_POPO)
+
+ASN1_ADB(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) = {
+ ADB_ENTRY(NID_id_regCtrl_regToken,
+ ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE,
+ value.regToken, ASN1_UTF8STRING)),
+} ASN1_ADB_END(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, 0, type, 0,
+ &attributetypeandvalue_default_tt, NULL);
+
+ASN1_ITEM_TEMPLATE(OSSL_CRMF_MSGS) =
+ ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
+ OSSL_CRMF_MSGS, OSSL_CRMF_MSG)
+ASN1_ITEM_TEMPLATE_END(OSSL_CRMF_MSGS)
+
+void f_looong_body_200()
+{ /* function body length up to 200 lines accepted */
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+}
+
+void f_looong_body_201()
+{ /* function body length > 200 lines, but LONG BODY marker present */
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+}
diff --git a/util/check-format-test-positives.c b/util/check-format-test-positives.c
new file mode 100644
index 000000000000..5e48396d3128
--- /dev/null
+++ b/util/check-format-test-positives.c
@@ -0,0 +1,358 @@
+/*
+ * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Siemens AG 2015-2022
+ *
+ * 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
+ */
+
+/*
+ * This demonstrates/tests cases where check-format.pl should report issues.
+ * Some of the reports are due to sanity checks for proper nesting of comment
+ * delimiters and parenthesis-like symbols, e.g., on unexpected/unclosed braces.
+ */
+
+/*
+ * The '@'s after '*' are used for self-tests: they mark lines containing
+ * a single flaw that should be reported. Normally it should be reported
+ * while handling the given line, but in case of delayed checks there is a
+ * following digit indicating the number of reports expected for this line.
+ */
+
+/* For each of the following set of lines the tool should complain once */
+/*@ tab character: */
+/*@ intra-line carriage return character: */
+/*@ non-printable ASCII character:  */
+/*@ non-ASCII character: ä */
+/*@ whitespace at EOL: */
+// /*@ end-of-line comment style not allowed (for C90 compatibility) */
+ /*@0 intra-line comment indent off by 1, reported unless sloppy-cmt */
+/*X */ /*@2 missing spc or '*' after comment start reported unless sloppy-spc */
+/* X*/ /*@ missing space before comment end , reported unless sloppy-spc */
+/*@ comment starting delimiter: /* inside intra-line comment */
+ /*@0
+ *@ above multi-line comment start indent off by 1, reported unless sloppy-cmt; this comment line is too long
+ *@ multi-line comment indent further off by 1 relative to comment start
+ *@ multi-line comment ending with text on last line */
+/*@2 multi-line comment starting with text on first line
+ *@ comment starting delimiter: /* inside multi-line comment
+*@ multi-line comment indent off by -1
+ *X*@ no spc after leading '*' in multi-line comment, reported unless sloppy-spc
+ *@0 more than two spaces after . in comment, no more reported
+ *@0 more than two spaces after ? in comment, no more reported
+ *@0 more than two spaces after ! in comment, no more reported
+*/ /*@ multi-line comment end indent off by -1 (relative to comment start) */
+*/ /*@ unexpected comment ending delimiter outside comment */
+/*- '-' for formatted comment not allowed in intra-line comment */
+/*@ comment line is 4 columns tooooooooooooooooo wide, reported unless sloppy-len */
+/*@ comment line is 5 columns toooooooooooooooooooooooooooooooooooooooooooooo wide */
+#if ~0 /*@ '#if' with constant condition */
+ #endif /*@ indent of preproc. directive off by 1 (must be 0) */
+#define X (1 + 1) /*@0 extra space in body, reported unless sloppy-spc */
+#define Y 1 /*@ extra space before body, reported unless sloppy-spc */ \
+#define Z /*@2 preprocessor directive within multi-line directive */
+typedef struct { /*@0 extra space in code, reported unless sloppy-spc */
+ enum { /*@1 extra space in intra-line comment, no more reported */
+ w = 0 /*@ hanging expr indent off by 1, or 3 for lines after '{' */
+ && 1, /*@ hanging expr indent off by 3, or -1 for leading '&&' */
+ x = 1, /*@ hanging expr indent off by -1 */
+ y,z /*@ no space after ',', reported unless sloppy-spc */
+ } e_member ; /*@ space before ';', reported unless sloppy-spc */
+ int v[1; /*@ unclosed bracket in type declaration */
+ union { /*@ statement/type declaration indent off by -1 */
+ struct{} s; /*@ no space before '{', reported unless sloppy-spc */
+ }u_member; /*@ no space after '}', reported unless sloppy-spc */
+ } s_type; /*@ statement/type declaration indent off by 4 */
+int* somefunc(); /*@ no space before '*' in type decl, r unless sloppy-spc */
+void main(int n) { /*@ opening brace at end of function definition header */
+ for (; ; ) ; /*@ space before ')', reported unless sloppy-spc */
+ for ( ; x; y) ; /*@2 space after '(' and before ';', unless sloppy-spc */
+ for (;;n++) { /*@ missing space after ';', reported unless sloppy-spc */
+ return; /*@0 (1-line) single statement in braces */
+ }} /*@2 code after '}' outside expr */
+} /*@ unexpected closing brace (too many '}') outside expr */
+) /*@ unexpected closing paren outside expr */
+#endif /*@ unexpected #endif */
+int f (int a, /*@ space after fn before '(', reported unless sloppy-spc */
+ int b, /*@ hanging expr indent off by -1 */
+ long I) /*@ single-letter name 'I' */
+{ int x; /*@ code after '{' opening a block */
+ int xx = 1) + /*@ unexpected closing parenthesis */
+ 0L < /*@ constant on LHS of comparison operator */
+ a] - /*@ unexpected closing bracket */
+ 3: * /*@ unexpected ':' (without preceding '?') within expr */
+ 4}; /*@ unexpected closing brace within expression */
+ char y[] = { /*@0 unclosed brace within initializer/enum expression */
+ 1* 1, /*@ no space etc. before '*', reported unless sloppy-spc */
+ 2, /*@ hanging expr indent (for lines after '{') off by 1 */
+ (xx /*@0 unclosed parenthesis in expression */
+ ? y /*@0 unclosed '? (conditional expression) */
+ [0; /*@4 unclosed bracket in expression */
+ /*@ blank line within local decls */
+ s_type s; /*@2 local variable declaration indent off by -1 */
+ t_type t; /*@ local variable declaration indent again off by -1 */
+ /* */ /*@0 missing blank line after local decls */
+ somefunc(a, /*@2 statement indent off by -1 */
+ "aligned" /*@ expr indent off by -2 accepted if sloppy-hang */ "right"
+ , b, /*@ expr indent off by -1 */
+ b, /*@ expr indent as on line above, accepted if sloppy-hang */
+ b, /*@ expr indent off -8 but @ extra indent accepted if sloppy-hang */
+ "again aligned" /*@ expr indent off by -9 (left of stmt indent, */ "right",
+ abc == /*@ .. so reported also with sloppy-hang; this line is too long */ 456
+# define MAC(A) (A) /*@ nesting indent of preprocessor directive off by 1 */
+ ? 1 /*@ hanging expr indent off by 1 */
+ : 2); /*@ hanging expr indent off by 2, or 1 for leading ':' */
+ if(a /*@ missing space after 'if', reported unless sloppy-spc */
+ /*@0 intra-line comment indent off by -1 (not: by 3 due to '&&') */
+ && ! 0 /*@2 space after '!', reported unless sloppy-spc */
+ || b == /*@ hanging expr indent off by 2, or -2 for leading '||' */
+ (x<<= 1) + /*@ missing space before '<<=' reported unless sloppy-spc */
+ (xx+= 2) + /*@ missing space before '+=', reported unless sloppy-spc */
+ (a^ 1) + /*@ missing space before '^', reported unless sloppy-spc */
+ (y *=z) + /*@ missing space after '*=' reported unless sloppy-spc */
+ a %2 / /*@ missing space after '%', reported unless sloppy-spc */
+ 1 +/* */ /*@ no space before comment, reported unless sloppy-spc */
+ /* */+ /*@ no space after comment, reported unless sloppy-spc */
+ s. e_member) /*@ space after '.', reported unless sloppy-spc */
+ xx = a + b /*@ extra single-statement indent off by 1 */
+ + 0; /*@ two times extra single-statement indent off by 3 */
+ if (a ++) /*@ space before postfix '++', reported unless sloppy-spc */
+ { /*@ {' not on same line as preceding 'if' */
+ c; /*@0 single stmt in braces, reported on 1-stmt */
+ } else /*@ missing '{' on same line after '} else' */
+ { /*@ statement indent off by 2 */
+ d; /*@0 single stmt in braces, reported on 1-stmt */
+ } /*@ statement indent off by 6 */
+ if (1) f(a, /*@ (non-brace) code after end of 'if' condition */
+ b); else /*@ (non-brace) code before 'else' */
+ do f(c, c); /*@ (non-brace) code after 'do' */
+ while ( 2); /*@ space after '(', reported unless sloppy-spc */
+ b; c; /*@ more than one statement per line */
+ outer: /*@ outer label special indent off by 1 */
+ do{ /*@ missing space before '{', reported unless sloppy-spc */
+ inner: /*@ inner label normal indent off by 1 */
+ f (3, /*@ space after fn before '(', reported unless sloppy-spc */
+ 4); /*@0 false negative: should report single stmt in braces */
+ } /*@0 'while' not on same line as preceding '}' */
+ while (a+ 0); /*@2 missing space before '+', reported unless sloppy-spc */
+ switch (b ) { /*@ space before ')', reported unless sloppy-spc */
+ case 1: /*@ 'case' special statement indent off by -1 */
+ case(2): /*@ missing space after 'case', reported unless sloppy-spc */
+ default: ; /*@ code after 'default:' */
+} /*@ statement indent off by -4 */
+ return( /*@ missing space after 'return', reported unless sloppy-spc */
+ x); } /*@ code before block-level '}' */
+/* Here the tool should stop complaining apart from the below issues at EOF */
+
+void f_looong_body()
+{
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+ ;
+
+
+ ; /*@ 2 essentially blank lines before, if !sloppy-spc */
+} /*@ function body length > 200 lines */
+#if X /*@0 unclosed #if */
+struct t { /*@0 unclosed brace at decl/block level */
+ enum { /*@0 unclosed brace at enum/expression level */
+ v = (1 /*@0 unclosed parenthesis */
+ etyp /*@0 blank line follows just before EOF, if !sloppy-spc: */
+
diff --git a/util/check-format.pl b/util/check-format.pl
new file mode 100755
index 000000000000..e1a91bcc5815
--- /dev/null
+++ b/util/check-format.pl
@@ -0,0 +1,1272 @@
+#! /usr/bin/env perl
+#
+# Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright Siemens AG 2019-2022
+#
+# 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
+#
+# check-format.pl
+# - check formatting of C source according to OpenSSL coding style
+#
+# usage:
+# check-format.pl [-l|--sloppy-len] [-l|--sloppy-bodylen]
+# [-s|--sloppy-space] [-c|--sloppy-comment]
+# [-m|--sloppy-macro] [-h|--sloppy-hang]
+# [-e|--eol-comment] [-1|--1-stmt]
+# <files>
+#
+# run self-tests:
+# util/check-format.pl util/check-format-test-positives.c
+# util/check-format.pl util/check-format-test-negatives.c
+#
+# checks adherence to the formatting rules of the OpenSSL coding guidelines
+# assuming that the input files contain syntactically correct C code.
+# This pragmatic tool is incomplete and yields some false positives.
+# Still it should be useful for detecting most typical glitches.
+#
+# options:
+# -l | --sloppy-len increase accepted max line length from 80 to 84
+# -l | --sloppy-bodylen do not report function body length > 200
+# -s | --sloppy-space do not report whitespace nits
+# -c | --sloppy-comment do not report indentation of comments
+# Otherwise for each multi-line comment the indentation of
+# its lines is checked for consistency. For each comment
+# that does not begin to the right of normal code its
+# indentation must be as for normal code, while in case it
+# also has no normal code to its right it is considered to
+# refer to the following line and may be indented equally.
+# -m | --sloppy-macro allow missing extra indentation of macro bodies
+# -h | --sloppy-hang when checking hanging indentation, do not report
+# * same indentation as on line before
+# * same indentation as non-hanging indent level
+# * indentation moved left (not beyond non-hanging indent)
+# just to fit contents within the line length limit
+# -e | --eol-comment report needless intermediate multiple consecutive spaces also before end-of-line comments
+# -1 | --1-stmt do more aggressive checks for { 1 stmt } - see below
+#
+# There are non-trivial false positives and negatives such as the following.
+#
+# * When a line contains several issues of the same kind only one is reported.
+#
+# * When a line contains more than one statement this is (correctly) reported
+# but in some situations the indentation checks for subsequent lines go wrong.
+#
+# * There is the special OpenSSL rule not to unnecessarily use braces around
+# single statements:
+# {
+# stmt;
+# }
+# except within if ... else constructs where some branch contains more than one
+# statement. Since the exception is hard to recognize when such branches occur
+# after the current position (such that false positives would be reported)
+# the tool by checks for this rule by default only for do/while/for bodies.
+# Yet with the --1-stmt option false positives are preferred over negatives.
+# False negatives occur if the braces are more than two non-blank lines apart.
+#
+# * The presence of multiple consecutive spaces is regarded a coding style nit
+# except when this is before end-of-line comments (unless the --eol-comment is given) and
+# except when done in order to align certain columns over multiple lines, e.g.:
+# # define AB 1
+# # define CDE 22
+# # define F 3333
+# This pattern is recognized - and consequently extra space not reported -
+# for a given line if in the non-blank line before or after (if existing)
+# for each occurrence of " \S" (where \S means non-space) in the given line
+# there is " \S" in the other line in the respective column position.
+# This may lead to both false negatives (in case of coincidental " \S")
+# and false positives (in case of more complex multi-column alignment).
+#
+# * When just part of control structures depend on #if(n)(def), which can be
+# considered bad programming style, indentation false positives occur, e.g.:
+# #if X
+# if (1) /* bad style */
+# #else
+# if (2) /* bad style resulting in false positive */
+# #endif
+# c; /* resulting further false positive */
+
+use strict;
+# use List::Util qw[min max];
+use POSIX;
+
+use constant INDENT_LEVEL => 4;
+use constant MAX_LINE_LENGTH => 80;
+use constant MAX_BODY_LENGTH => 200;
+
+# global variables @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+# command-line options
+my $max_length = MAX_LINE_LENGTH;
+my $sloppy_bodylen = 0;
+my $sloppy_SPC = 0;
+my $sloppy_hang = 0;
+my $sloppy_cmt = 0;
+my $sloppy_macro = 0;
+my $eol_cmt = 0;
+my $extended_1_stmt = 0;
+
+while ($ARGV[0] =~ m/^-(\w|-[\w\-]+)$/) {
+ my $arg = $1; shift;
+ if ($arg =~ m/^(l|-sloppy-len)$/) {
+ $max_length += INDENT_LEVEL;
+ } elsif ($arg =~ m/^(b|-sloppy-bodylen)$/) {
+ $sloppy_bodylen = 1;
+ } elsif ($arg =~ m/^(s|-sloppy-space)$/) {
+ $sloppy_SPC= 1;
+ } elsif ($arg =~ m/^(c|-sloppy-comment)$/) {
+ $sloppy_cmt = 1;
+ } elsif ($arg =~ m/^(m|-sloppy-macro)$/) {
+ $sloppy_macro = 1;
+ } elsif ($arg =~ m/^(h|-sloppy-hang)$/) {
+ $sloppy_hang = 1;
+ } elsif ($arg =~ m/^(e|-eol-comment)$/) {
+ $eol_cmt = 1;
+ } elsif ($arg =~ m/^(1|-1-stmt)$/) {
+ $extended_1_stmt = 1;
+ } else {
+ die("unknown option: -$arg");
+ }
+}
+
+# state variables
+my $self_test; # whether the current input file is regarded to contain (positive/negative) self-tests
+
+my $in_comment; # number of lines so far within multi-line comment, 0 if no comment, < 0 when end is on current line
+my $leading_comment; # multi-line comment has no code before its beginning delimiter, if $in_comment != 0
+my $formatted_comment; # multi-line comment beginning with "/*-", which indicates/allows special formatting, if $in_comment != 0
+my $comment_indent; # comment indent, if $in_comment != 0
+
+my $ifdef__cplusplus; # line before contained '#ifdef __cplusplus' (used in header files)
+my $preproc_if_nesting; # currently required indentation of preprocessor directive according to #if(n)(def)
+my $in_preproc; # 0 or number of lines so far within preprocessor directive, e.g., macro definition
+my $preproc_directive; # name of current preprocessor directive, if $in_preproc != 0
+my $preproc_offset; # offset to $block_indent within multi-line preprocessor directive, else 0
+my $in_macro_header; # number of open parentheses + 1 in (multi-line) header of #define, if $in_preproc != 0
+
+my $line; # current line number
+my $line_before; # number of previous not essentially blank line (containing at most whitespace and '\')
+my $line_before2; # number of not essentially blank line before previous not essentially blank line
+
+# indentation state
+my $contents; # contents of current line (without blinding)
+# $_ # current line, where comments etc. get blinded
+my $code_contents_before; # contents of previous non-comment non-preprocessor-directive line (without blinding), initially ""
+my $contents_before; # contents of $line_before (without blinding), if $line_before > 0
+my $contents_before_; # contents of $line_before after blinding comments etc., if $line_before > 0
+my $contents_before2; # contents of $line_before2 (without blinding), if $line_before2 > 0
+my $contents_before_2; # contents of $line_before2 after blinding comments etc., if $line_before2 > 0
+my $in_multiline_string; # line starts within multi-line string literal
+my $count; # -1 or number of leading whitespace characters (except newline) in current line,
+ # which should be $block_indent + $hanging_offset + $local_offset or $expr_indent
+my $count_before; # number of leading whitespace characters (except line ending chars) in $contents_before
+my $has_label; # current line contains label
+my $local_offset; # current extra indent due to label, switch case/default, or leading closing brace(s)
+my $line_body_start; # number of line where last function body started, or 0
+my $line_function_start; # number of line where last function definition started, used for $line_body_start
+my $last_function_header; # header containing name of last function defined, used if $line_body_start != 0
+my $line_opening_brace; # number of previous line with opening brace after do/while/for, optionally for if/else
+
+my $keyword_opening_brace; # name of previous keyword, used if $line_opening_brace != 0
+my $block_indent; # currently required normal indentation at block/statement level
+my $hanging_offset; # extra indent, which may be nested, for just one hanging statement or expr or typedef
+my @in_do_hanging_offsets; # stack of hanging offsets for nested 'do' ... 'while'
+my @in_if_hanging_offsets; # stack of hanging offsets for nested 'if' (but not its potential 'else' branch)
+my $if_maybe_terminated; # 'if' ends and $hanging_offset should be reset unless the next line starts with 'else'
+my @nested_block_indents; # stack of indentations at block/statement level, needed due to hanging statements
+my @nested_hanging_offsets;# stack of nested $hanging_offset values, in parallel to @nested_block_indents
+my @nested_in_typedecl; # stack of nested $in_typedecl values, partly in parallel to @nested_block_indents
+my @nested_indents; # stack of hanging indents due to parentheses, braces, brackets, or conditionals
+my @nested_symbols; # stack of hanging symbols '(', '{', '[', or '?', in parallel to @nested_indents
+my @nested_conds_indents; # stack of hanging indents due to conditionals ('?' ... ':')
+my $expr_indent; # resulting hanging indent within (multi-line) expressions including type exprs, else 0
+my $hanging_symbol; # character ('(', '{', '[', not: '?') responsible for $expr_indent, if $expr_indent != 0
+my $in_block_decls; # number of local declaration lines after block opening before normal statements, or -1 if no block opening
+my $in_expr; # in expression after if/while/for/switch/return/enum/LHS of assignment
+my $in_paren_expr; # in parenthesized if/while/for condition and switch expression, if $expr_indent != 0
+my $in_typedecl; # nesting level of typedef/struct/union/enum
+
+my $num_reports_line = 0; # number of issues found on current line
+my $num_reports = 0; # total number of issues found
+my $num_indent_reports = 0;# total number of indentation issues found
+my $num_nesting_issues = 0;# total number of preprocessor #if nesting issues found
+my $num_syntax_issues = 0; # total number of syntax issues found during sanity checks
+my $num_SPC_reports = 0; # total number of whitespace issues found
+my $num_length_reports = 0;# total number of line length issues found
+
+sub reset_file_state {
+ $in_comment = 0;
+ $ifdef__cplusplus = 0;
+ $preproc_if_nesting = 0;
+ $in_preproc = 0;
+ $line = 0;
+ $line_before = 0;
+ $line_before2 = 0;
+ reset_indentation_state();
+}
+sub reset_indentation_state {
+ $code_contents_before = "";
+ @nested_block_indents = ();
+ @nested_hanging_offsets = ();
+ @nested_in_typedecl = ();
+ @nested_symbols = ();
+ @nested_indents = ();
+ @nested_conds_indents = ();
+ $expr_indent = 0;
+ $in_block_decls = -1;
+ $in_expr = 0;
+ $in_paren_expr = 0;
+ $hanging_offset = 0;
+ @in_do_hanging_offsets = ();
+ @in_if_hanging_offsets = ();
+ $if_maybe_terminated = 0;
+ $block_indent = 0;
+ $in_multiline_string = 0;
+ $line_body_start = 0;
+ $line_opening_brace = 0;
+ $in_typedecl = 0;
+}
+my $bak_line_before;
+my $bak_line_before2;
+my $bak_code_contents_before;
+my @bak_nested_block_indents;
+my @bak_nested_hanging_offsets;
+my @bak_nested_in_typedecl;
+my @bak_nested_symbols;
+my @bak_nested_indents;
+my @bak_nested_conds_indents;
+my $bak_expr_indent;
+my $bak_in_block_decls;
+my $bak_in_expr;
+my $bak_in_paren_expr;
+my $bak_hanging_offset;
+my @bak_in_do_hanging_offsets;
+my @bak_in_if_hanging_offsets;
+my $bak_if_maybe_terminated;
+my $bak_block_indent;
+my $bak_in_multiline_string;
+my $bak_line_body_start;
+my $bak_line_opening_brace;
+my $bak_in_typedecl;
+sub backup_indentation_state {
+ $bak_code_contents_before = $code_contents_before;
+ @bak_nested_block_indents = @nested_block_indents;
+ @bak_nested_hanging_offsets = @nested_hanging_offsets;
+ @bak_nested_in_typedecl = @nested_in_typedecl;
+ @bak_nested_symbols = @nested_symbols;
+ @bak_nested_indents = @nested_indents;
+ @bak_nested_conds_indents = @nested_conds_indents;
+ $bak_expr_indent = $expr_indent;
+ $bak_in_block_decls = $in_block_decls;
+ $bak_in_expr = $in_expr;
+ $bak_in_paren_expr = $in_paren_expr;
+ $bak_hanging_offset = $hanging_offset;
+ @bak_in_do_hanging_offsets = @in_do_hanging_offsets;
+ @bak_in_if_hanging_offsets = @in_if_hanging_offsets;
+ $bak_if_maybe_terminated = $if_maybe_terminated;
+ $bak_block_indent = $block_indent;
+ $bak_in_multiline_string = $in_multiline_string;
+ $bak_line_body_start = $line_body_start;
+ $bak_line_opening_brace = $line_opening_brace;
+ $bak_in_typedecl = $in_typedecl;
+}
+sub restore_indentation_state {
+ $code_contents_before = $bak_code_contents_before;
+ @nested_block_indents = @bak_nested_block_indents;
+ @nested_hanging_offsets = @bak_nested_hanging_offsets;
+ @nested_in_typedecl = @bak_nested_in_typedecl;
+ @nested_symbols = @bak_nested_symbols;
+ @nested_indents = @bak_nested_indents;
+ @nested_conds_indents = @bak_nested_conds_indents;
+ $expr_indent = $bak_expr_indent;
+ $in_block_decls = $bak_in_block_decls;
+ $in_expr = $bak_in_expr;
+ $in_paren_expr = $bak_in_paren_expr;
+ $hanging_offset = $bak_hanging_offset;
+ @in_do_hanging_offsets = @bak_in_do_hanging_offsets;
+ @in_if_hanging_offsets = @bak_in_if_hanging_offsets;
+ $if_maybe_terminated = $bak_if_maybe_terminated;
+ $block_indent = $bak_block_indent;
+ $in_multiline_string = $bak_in_multiline_string;
+ $line_body_start = $bak_line_body_start;
+ $line_opening_brace = $bak_line_opening_brace;
+ $in_typedecl = $bak_in_typedecl;
+}
+
+# auxiliary submodules @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+sub report_flexibly {
+ my $line = shift;
+ my $msg = shift;
+ my $contents = shift;
+ my $report_SPC = $msg =~ /space|blank/;
+ return if $report_SPC && $sloppy_SPC;
+
+ print "$ARGV:$line:$msg:$contents" unless $self_test;
+ $num_reports_line++;
+ $num_reports++;
+ $num_indent_reports++ if $msg =~ m/:indent /;
+ $num_nesting_issues++ if $msg =~ m/ nesting indent /;
+ $num_syntax_issues++ if $msg =~ m/unclosed|unexpected/;
+ $num_SPC_reports++ if $report_SPC;
+ $num_length_reports++ if $msg =~ m/length/;
+}
+
+sub report {
+ my $msg = shift;
+ report_flexibly($line, $msg, $contents);
+}
+
+sub parens_balance { # count balance of opening parentheses - closing parentheses
+ my $str = shift;
+ return $str =~ tr/\(// - $str =~ tr/\)//;
+}
+
+sub blind_nonspace { # blind non-space text of comment as @, preserving length and spaces
+ # the @ character is used because it cannot occur in normal program code so there is no confusion
+ # comment text is not blinded to whitespace in order to be able to check extra SPC also in comments
+ my $comment_text = shift;
+ $comment_text =~ s/([\.\?\!])\s\s/$1. /g; # in extra SPC checks allow one extra SPC after period '.', '?', or '!' in comments
+ return $comment_text =~ tr/ /@/cr;
+}
+
+# submodule for indentation checking/reporting @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+sub check_indent { # used for lines outside multi-line string literals
+ my $stmt_indent = $block_indent + $hanging_offset + $local_offset;
+ # print "DEBUG: expr_indent $expr_indent; stmt_indent $stmt_indent = block_indent $block_indent + hanging_offset $hanging_offset + local_offset $local_offset\n";
+ $stmt_indent = 0 if $stmt_indent < 0; # TODO maybe give warning/error
+ my $stmt_desc = $contents =~
+ m/^\s*\/\*/ ? "intra-line comment" :
+ $has_label ? "label" :
+ ($hanging_offset != 0 ? "hanging " : "").
+ ($hanging_offset != 0 ? "stmt/expr" : "stmt/decl"); # $in_typedecl is not fully to the point here
+ my ($ref_desc, $ref_indent) = $expr_indent == 0 ? ($stmt_desc, $stmt_indent)
+ : ("hanging '$hanging_symbol'", $expr_indent);
+ my ($alt_desc, $alt_indent) = ("", $ref_indent);
+
+ # allow indent 1 for labels - this cannot happen for leading ':'
+ ($alt_desc, $alt_indent) = ("outermost position", 1) if $expr_indent == 0 && $has_label;
+
+ if (@nested_conds_indents != 0 && substr($_, $count, 1) eq ":") {
+ # leading ':' within stmt/expr/decl - this cannot happen for labels, leading '&&', or leading '||'
+ # allow special indent at level of corresponding "?"
+ ($alt_desc, $alt_indent) = ("leading ':'", @nested_conds_indents[-1]);
+ }
+ # allow extra indent offset leading '&&' or '||' - this cannot happen for leading ":"
+ ($alt_desc, $alt_indent) = ("leading '$1'", $ref_indent + INDENT_LEVEL) if $contents =~ m/^[\s@]*(\&\&|\|\|)/;
+
+ if ($expr_indent < 0) { # implies @nested_symbols != 0 && @nested_symbols[0] eq "{" && @nested_indents[-1] < 0
+ # allow normal stmt indentation level for hanging initializer/enum expressions after trailing '{'
+ # this cannot happen for labels and overrides special treatment of ':', '&&' and '||' for this line
+ ($alt_desc, $alt_indent) = ("lines after '{'", $stmt_indent);
+ # decide depending on current actual indentation, preventing forth and back
+ @nested_indents[-1] = $count == $stmt_indent ? $stmt_indent : -@nested_indents[-1]; # allow $stmt_indent
+ $ref_indent = $expr_indent = @nested_indents[-1];
+ }
+
+ # check consistency of indentation within multi-line comment (i.e., between its first, inner, and last lines)
+ if ($in_comment != 0 && $in_comment != 1) { # in multi-line comment but not on its first line
+ if (!$sloppy_cmt) {
+ if ($in_comment > 0) { # not at its end
+ report("indent = $count != $comment_indent within multi-line comment")
+ if $count != $comment_indent;
+ } else {
+ my $tweak = $in_comment == -2 ? 1 : 0;
+ report("indent = ".($count + $tweak)." != $comment_indent at end of multi-line comment")
+ if $count + $tweak != $comment_indent;
+ }
+ }
+ # do not check indentation of last line of non-leading multi-line comment
+ if ($in_comment < 0 && !$leading_comment) {
+ s/^(\s*)@/$1*/; # blind first '@' as '*' to prevent below delayed check for the line before
+ return;
+ }
+ return if $in_comment > 0; # not on its last line
+ # $comment_indent will be checked by the below checks for end of multi-line comment
+ }
+
+ # else check indentation of entire-line comment or entire-line end of multi-line comment
+ # ... w.r.t. indent of the following line by delayed check for the line before
+ if (($in_comment == 0 || $in_comment == 1) # no comment, intra-line comment, or begin of multi-line comment
+ && $line_before > 0 # there is a line before
+ && $contents_before_ =~ m/^(\s*)@[\s@]*$/) { # line before begins with '@', no code follows (except '\')
+ report_flexibly($line_before, "entire-line comment indent = $count_before != $count (of following line)",
+ $contents_before) if !$sloppy_cmt && $count_before != -1 && $count_before != $count;
+ }
+ # ... but allow normal indentation for the current line, else above check will be done for the line before
+ if (($in_comment == 0 || $in_comment < 0) # (no comment,) intra-line comment or end of multi-line comment
+ && m/^(\s*)@[\s@]*$/) { # line begins with '@', no code follows (except '\')
+ if ($count == $ref_indent) { # indentation is like for (normal) code in this line
+ s/^(\s*)@/$1*/; # blind first '@' as '*' to prevent above delayed check for the line before
+ return;
+ }
+ return if !eof; # defer check of entire-line comment to next line
+ }
+
+ # else check indentation of leading intra-line comment or end of multi-line comment
+ if (m/^(\s*)@/) { # line begins with '@', i.e., any (remaining type of) comment
+ if (!$sloppy_cmt && $count != $ref_indent) {
+ report("intra-line comment indent = $count != $ref_indent") if $in_comment == 0;
+ report("multi-line comment indent = $count != $ref_indent") if $in_comment < 0;
+ }
+ return;
+ }
+
+ if ($sloppy_hang && ($hanging_offset != 0 || $expr_indent != 0)) {
+ # do not report same indentation as on the line before (potentially due to same violations)
+ return if $line_before > 0 && $count == $count_before;
+
+ # do not report indentation at normal indentation level while hanging expression indent would be required
+ return if $expr_indent != 0 && $count == $stmt_indent;
+
+ # do not report if contents have been shifted left of nested expr indent (but not as far as stmt indent)
+ # apparently aligned to the right in order to fit within line length limit
+ return if $stmt_indent < $count && $count < $expr_indent &&
+ length($contents) == MAX_LINE_LENGTH + length("\n");
+ }
+
+ report("indent = $count != $ref_indent for $ref_desc".
+ ($alt_desc eq ""
+ || $alt_indent == $ref_indent # prevent showing alternative that happens to have equal value
+ ? "" : " or $alt_indent for $alt_desc"))
+ if $count != $ref_indent && $count != $alt_indent;
+}
+
+# submodules handling indentation within expressions @@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+sub update_nested_indents { # may reset $in_paren_expr and in this case also resets $in_expr
+ my $str = shift;
+ my $start = shift; # defaults to 0
+ my $terminator_position = -1;
+ for (my $i = $start; $i < length($str); $i++) {
+ my $c;
+ my $curr = substr($str, $i);
+ if ($curr =~ m/^(.*?)([{}()?:;\[\]])(.*)$/) { # match from position $i the first {}()?:;[]
+ $c = $2;
+ } else {
+ last;
+ }
+ my ($head, $tail) = (substr($str, 0, $i).$1, $3);
+ $i += length($1) + length($2) - 1;
+
+ # stop at terminator outside 'for (..;..;..)', assuming that 'for' is followed by '('
+ return $i if $c eq ";" && (!$in_paren_expr || @nested_indents == 0);
+
+ my $in_stmt = $in_expr || @nested_symbols != 0; # not: || $in_typedecl != 0
+ if ($c =~ m/[{([?]/) { # $c is '{', '(', '[', or '?'
+ if ($c eq "{") { # '{' in any context
+ $in_block_decls = 0 if !$in_expr && $in_typedecl == 0;
+ # cancel newly hanging_offset if opening brace '{' is after non-whitespace non-comment:
+ $hanging_offset -= INDENT_LEVEL if $hanging_offset > 0 && $head =~ m/[^\s\@]/;
+ push @nested_block_indents, $block_indent;
+ push @nested_hanging_offsets, $in_expr ? $hanging_offset : 0;
+ push @nested_in_typedecl, $in_typedecl if $in_typedecl != 0;
+ $block_indent += INDENT_LEVEL + $hanging_offset;
+ $hanging_offset = 0;
+ }
+ if ($c ne "{" || $in_stmt) { # for '{' inside stmt/expr (not: decl), for '(', '[', or '?' anywhere
+ $tail =~ m/^([\s@]*)([^\s\@])/;
+ push @nested_indents, defined $2
+ ? $i + 1 + length($1) # actual indentation of following non-space non-comment
+ : $c ne "{" ? +($i + 1) # just after '(' or '[' if only whitespace thereafter
+ : -($i + 1); # allow also $stmt_indent if '{' with only whitespace thereafter
+ push @nested_symbols, $c; # done also for '?' to be able to check correct nesting
+ push @nested_conds_indents, $i if $c eq "?"; # remember special alternative indent for ':'
+ }
+ } elsif ($c =~ m/[})\]:]/) { # $c is '}', ')', ']', or ':'
+ my $opening_c = ($c =~ tr/})]:/{([/r);
+ if (($c ne ":" || $in_stmt # ignore ':' outside stmt/expr/decl
+ # in the presence of ':', one could add this sanity check:
+ # && !(# ':' after initial label/case/default
+ # $head =~ m/^([\s@]*)(case\W.*$|\w+$)/ || # this matching would not work for
+ # # multi-line expr after 'case'
+ # # bitfield length within unsigned type decl
+ # $tail =~ m/^[\s@]*\d+/ # this matching would need improvement
+ # )
+ )) {
+ if ($c ne "}" || $in_stmt) { # for '}' inside stmt/expr/decl, ')', ']', or ':'
+ if (@nested_symbols != 0 &&
+ @nested_symbols[-1] == $opening_c) { # for $c there was a corresponding $opening_c
+ pop @nested_indents;
+ pop @nested_symbols;
+ pop @nested_conds_indents if $opening_c eq "?";
+ } else {
+ report("unexpected '$c' @ ".($in_paren_expr ? "(expr)" : "expr"));
+ next;
+ }
+ }
+ if ($c eq "}") { # '}' at block level but also inside stmt/expr/decl
+ if (@nested_block_indents == 0) {
+ report("unexpected '}'");
+ } else {
+ $block_indent = pop @nested_block_indents;
+ $hanging_offset = pop @nested_hanging_offsets;
+ $in_typedecl = pop @nested_in_typedecl if @nested_in_typedecl != 0;
+ }
+ }
+ if ($in_paren_expr && !grep(/\(/, @nested_symbols)) { # end of (expr)
+ check_nested_nonblock_indents("(expr)");
+ $in_paren_expr = $in_expr = 0;
+ report("code after (expr)")
+ if $tail =~ m/^([^{]*)/ && $1 =~ m/[^\s\@;]/; # non-space non-';' before any '{'
+ }
+ }
+ }
+ }
+ return -1;
+}
+
+sub check_nested_nonblock_indents {
+ my $position = shift;
+ while (@nested_symbols != 0) {
+ my $symbol = pop @nested_symbols;
+ report("unclosed '$symbol' in $position");
+ if ($symbol eq "{") { # repair stack of blocks
+ $block_indent = pop @nested_block_indents;
+ $hanging_offset = pop @nested_hanging_offsets;
+ $in_typedecl = pop @nested_in_typedecl if @nested_in_typedecl != 0;
+ }
+ }
+ @nested_indents = ();
+ @nested_conds_indents = ();
+}
+
+# start of main program @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+reset_file_state();
+
+while (<>) { # loop over all lines of all input files
+ $self_test = $ARGV =~ m/check-format-test/;
+ $_ = "" if $self_test && m/ blank line within local decls /;
+ $line++;
+ s/\r$//; # strip any trailing CR '\r' (which are typical on Windows systems)
+ $contents = $_;
+
+ # check for illegal characters
+ if (m/(.*?)([\x00-\x09\x0B-\x1F\x7F-\xFF])/) {
+ my $col = length($1);
+ report(($2 eq "\x09" ? "TAB" : $2 eq "\x0D" ? "CR " : $2 =~ m/[\x00-\x1F]/ ? "non-printable"
+ : "non-7bit char") . " at column $col") ;
+ }
+
+ # check for whitespace at EOL
+ report("trailing whitespace at EOL") if m/\s\n$/;
+
+ # assign to $count the actual indentation level of the current line
+ chomp; # remove trailing NL '\n'
+ m/^(\s*)/;
+ $count = length($1); # actual indentation
+ $has_label = 0;
+ $local_offset = 0;
+
+ # character/string literals @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ s/\\["']/@@/g; # blind all '"' and "'" escaped by '\' (typically within character literals or string literals)
+
+ # handle multi-line string literals to avoid confusion on starting/ending '"' and trailing '\'
+ if ($in_multiline_string) {
+ if (s#^([^"]*)"#($1 =~ tr/"/@/cr).'@'#e) { # string literal terminated by '"'
+ # string contents and its terminating '"' have been blinded as '@'
+ $count = -1; # do not check indentation
+ } else {
+ report("multi-line string literal not terminated by '\"' and trailing '\' is missing")
+ unless s#^([^\\]*)\s*\\\s*$#$1#; # strip trailing '\' plus any whitespace around
+ goto LINE_FINISHED;
+ }
+ }
+
+ # blind contents of character and string literals as @, preserving length (but not spaces)
+ # this prevents confusing any of the matching below, e.g., of whitespace and comment delimiters
+ s#('[^']*')#$1 =~ tr/'/@/cr#eg; # handle all intra-line character literals
+ s#("[^"]*")#$1 =~ tr/"/@/cr#eg; # handle all intra-line string literals
+ $in_multiline_string = # handle trailing string literal terminated by '\'
+ s#^(([^"]*"[^"]*")*[^"]*)("[^"]*)\\(\s*)$#$1.($3 =~ tr/"/@/cr).'"'.$4#e;
+ # its contents have been blinded and the trailing '\' replaced by '"'
+
+ # strip any other trailing '\' along with any whitespace around it such that it does not interfere with various matching below
+ my $trailing_backslash = s#^(.*?)\s*\\\s*$#$1#; # trailing '\' possibly preceded or followed by whitespace
+ my $essentially_blank_line = m/^\s*$/; # just whitespace and maybe a '\'
+
+ # comments @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ # do/prepare checks within multi-line comments
+ my $self_test_exception = $self_test ? "@" : "";
+ if ($in_comment > 0) { # this still includes the last line of multi-line comment
+ my ($head, $any_symbol, $cmt_text) = m/^(\s*)(.?)(.*)$/;
+ if ($any_symbol eq "*") {
+ report("missing space or '*' after leading '*' in multi-line comment") if $cmt_text =~ m|^[^*\s/$self_test_exception]|;
+ } else {
+ report("missing leading '*' in multi-line comment");
+ }
+ $in_comment++;
+ }
+
+ # detect end of comment, must be within multi-line comment, check if it is preceded by non-whitespace text
+ if ((my ($head, $tail) = m|^(.*?)\*/(.*)$|) && $1 ne '/') { # ending comment: '*/'
+ report("missing space or '*' before '*/'") if $head =~ m/[^*\s]$/;
+ report("missing space (or ',', ';', ')', '}', ']') after '*/'") if $tail =~ m/^[^\s,;)}\]]/; # no space or ,;)}] after '*/'
+ if (!($head =~ m|/\*|)) { # not begin of comment '/*', which is is handled below
+ if ($in_comment == 0) {
+ report("unexpected '*/' outside comment");
+ $_ = "$head@@".$tail; # blind the "*/"
+ } else {
+ report("text before '*/' in multi-line comment") if ($head =~ m/[^*\s]/); # non-SPC before '*/'
+ $in_comment = -1; # indicate that multi-line comment ends on current line
+ if ($count > 0) {
+ # make indentation of end of multi-line comment appear like of leading intra-line comment
+ $head =~ s/^(\s*)\s/$1@/; # replace the last leading space by '@'
+ $count--;
+ $in_comment = -2; # indicate that multi-line comment ends on current line, with tweak
+ }
+ my $cmt_text = $head;
+ $_ = blind_nonspace($cmt_text)."@@".$tail;
+ }
+ }
+ }
+
+ # detect begin of comment, check if it is followed by non-space text
+ MATCH_COMMENT:
+ if (my ($head, $opt_minus, $tail) = m|^(.*?)/\*(-?)(.*)$|) { # begin of comment: '/*'
+ report("missing space before '/*'")
+ if $head =~ m/[^\s(\*]$/; # not space, '(', or or '*' (needed to allow '*/') before comment delimiter
+ report("missing space, '*', or '!' after '/*$opt_minus'") if $tail =~ m/^[^\s*!$self_test_exception]/;
+ my $cmt_text = $opt_minus.$tail; # preliminary
+ if ($in_comment > 0) {
+ report("unexpected '/*' inside multi-line comment");
+ } elsif ($tail =~ m|^(.*?)\*/(.*)$|) { # comment end: */ on same line
+ report("unexpected '/*' inside intra-line comment") if $1 =~ /\/\*/;
+ # blind comment text, preserving length and spaces
+ ($cmt_text, my $rest) = ($opt_minus.$1, $2);
+ $_ = "$head@@".blind_nonspace($cmt_text)."@@".$rest;
+ goto MATCH_COMMENT;
+ } else { # begin of multi-line comment
+ my $self_test_exception = $self_test ? "(@\d?)?" : "";
+ report("text after '/*' in multi-line comment")
+ unless $tail =~ m/^$self_test_exception.?[*\s]*$/;
+ # tail not essentially blank, first char already checked
+ # adapt to actual indentation of first line
+ $comment_indent = length($head) + 1;
+ $_ = "$head@@".blind_nonspace($cmt_text);
+ $in_comment = 1;
+ $leading_comment = $head =~ m/^\s*$/; # there is code before beginning delimiter
+ $formatted_comment = $opt_minus eq "-";
+ }
+ } elsif (($head, $tail) = m|^\{-(.*)$|) { # begin of Perl pragma: '{-'
+ }
+
+ if ($in_comment > 1) { # still inside multi-line comment (not at its begin or end)
+ m/^(\s*)\*?(\s*)(.*)$/;
+ $_ = $1."@".$2.blind_nonspace($3);
+ }
+
+ # handle special case of line after '#ifdef __cplusplus' (which typically appears in header files)
+ if ($ifdef__cplusplus) {
+ $ifdef__cplusplus = 0;
+ $_ = "$1 $2" if $contents =~ m/^(\s*extern\s*"C"\s*)\{(\s*)$/; # ignore opening brace in 'extern "C" {'
+ goto LINE_FINISHED if m/^\s*\}\s*$/; # ignore closing brace '}'
+ }
+
+ # check for over-long lines,
+ # while allowing trailing (also multi-line) string literals to go past $max_length
+ my $len = length; # total line length (without trailing '\n')
+ if ($len > $max_length &&
+ !(m/^(.*)"[^"]*"\s*[\)\}\]]*[,;]?\s*$/ # string literal terminated by '"' (or '\'), then maybe )}],;
+ && length($1) < $max_length)
+ # this allows over-long trailing string literals with beginning col before $max_length
+ ) {
+ report("line length = $len > ".MAX_LINE_LENGTH);
+ }
+
+ # handle C++ / C99 - style end-of-line comments
+ if (my ($head, $cmt_text) = m|^(.*?)//(.*$)|) {
+ report("'//' end-of-line comment"); # the '//' comment style is not allowed for C90
+ # blind comment text, preserving length and spaces
+ $_ = "$head@@".blind_nonspace($cmt_text);
+ }
+
+ # at this point all non-space portions of any types of comments have been blinded as @
+
+ goto LINE_FINISHED if $essentially_blank_line;
+
+ # handle preprocessor directives @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ if (s/^(\s*#)(\s*)(\w+)//) { # line beginning with '#' and directive name;
+ # blank these portions to prevent confusion with C-level 'if', 'else', etc.
+ my ($lead, $space) = ($1, $2);
+ $preproc_directive = $3;
+ $_ = "$lead$space$preproc_directive$_" if $preproc_directive =~ m/^(define|include)$/; # yet do not blank #define or #include to prevent confusing the indentation or whitespace checks, resp.
+ $_ = blind_nonspace($_) if $preproc_directive eq "error"; # blind error message
+ if ($in_preproc != 0) {
+ report("preprocessor directive within multi-line directive");
+ reset_indentation_state();
+ }
+ $in_preproc++;
+ report("indent = $count != 0 for '#'") if $count != 0;
+ report("'#$preproc_directive' with constant condition")
+ if $preproc_directive =~ m/^(if|elif)$/ && m/^[\W0-9]+$/ && !$trailing_backslash;
+ $preproc_if_nesting-- if $preproc_directive =~ m/^(else|elif|endif)$/;
+ if ($preproc_if_nesting < 0) {
+ $preproc_if_nesting = 0;
+ report("unexpected '#$preproc_directive' according to '#if' nesting");
+ }
+ my $space_count = length($space); # maybe could also use indentation before '#'
+ report("'#if' nesting indent = $space_count != $preproc_if_nesting") if $space_count != $preproc_if_nesting;
+ $preproc_if_nesting++ if $preproc_directive =~ m/^(if|ifdef|ifndef|else|elif)$/;
+ $ifdef__cplusplus = $preproc_directive eq "ifdef" && m/\s+__cplusplus\s*$/;
+
+ # handle indentation of preprocessor directive independently of surrounding normal code
+ $count = -1; # do not check indentation of first line of preprocessor directive
+ backup_indentation_state();
+ reset_indentation_state();
+ }
+
+ # intra-line whitespace nits @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ my $in_multiline_comment = ($in_comment > 1 || $in_comment < 0); # $in_multiline_comment refers to line before
+ if (!$sloppy_SPC && !($in_multiline_comment && $formatted_comment)) {
+ sub extra_SPC {
+ my $intra_line = shift;
+ return "extra space".($intra_line =~ m/@\s\s/ ?
+ $in_comment != 0 ? " in multi-line comment"
+ : " in intra-line comment" : "");
+ }
+ sub split_line_head { # split line contents into header containing leading spaces and the first non-space char, and the rest of the line
+ my $comment_symbol =
+ $in_comment != 0 ? "@" : ""; # '@' will match the blinded leading '*' in multi-line comment
+ # $in_comment may pertain to the following line due to delayed check
+ # do not check for extra SPC in leading spaces including any '#' (or '*' within multi-line comment)
+ shift =~ m/^(\s*([#$comment_symbol]\s*)?)(.*?)\s*$/;
+ return ($1, $3);
+ }
+ my ($head , $intra_line ) = split_line_head($_);
+ my ($head1, $intra_line1) = split_line_head($contents_before_ ) if $line_before > 0;
+ my ($head2, $intra_line2) = split_line_head($contents_before_2) if $line_before2 > 0;
+ if ($line_before > 0) { # check with one line delay, such that at least $contents_before is available
+ sub column_alignments_only { # return 1 if the given line has multiple consecutive spaces only at columns that match the reference line
+ # all parameter strings are assumed to contain contents after blinding comments etc.
+ my $head = shift; # leading spaces and the first non-space char
+ my $intra = shift; # the rest of the line contents
+ my $contents = shift; # reference line
+ # check if all extra SPC in $intra is used only for multi-line column alignment with $contents
+ my $offset = length($head);
+ for (my $col = 0; $col < length($intra) - 2; $col++) {
+ my $substr = substr($intra, $col);
+ next unless $substr =~ m/^\s\s\S/; # extra SPC (but not in leading spaces of the line)
+ next if !$eol_cmt && $substr =~ m/^[@\s]+$/; # end-of-line comment
+ return 0 unless substr($contents, $col + $offset + 1, 2) =~ m/\s\S/; # reference line contents do not match
+ }
+ return 1;
+ }
+ report_flexibly($line_before, extra_SPC($intra_line1), $contents_before) if $intra_line1 =~ m/\s\s\S/ &&
+ !( column_alignments_only($head1, $intra_line1, $_ ) # compare with $line
+ || ($line_before2 > 0 &&
+ column_alignments_only($head1, $intra_line1, $contents_before_2))); # compare w/ $line_before2
+ report(extra_SPC($intra_line)) if $intra_line =~ m/\s\s\S/ && eof
+ && ! column_alignments_only($head , $intra_line , $contents_before_ ) ; # compare w/ $line_before
+ } elsif (eof) { # special case: just one line exists
+ report(extra_SPC($intra_line)) if $intra_line =~ m/\s\s\S/;
+ }
+ # ignore paths in #include
+ $intra_line =~ s/^(include\s*)(".*?"|<.*?>)/$1/e if $head =~ m/#/;
+ report("missing space before '$2'")
+ if $intra_line =~ m/(\S)((<<|>>)=)/ # '<<=' or >>=' without preceding space
+ || ($intra_line =~ m/(\S)([\+\-\*\/\/%\&\|\^\!<>=]=)/
+ && "$1$2" ne "<<=" && "$1$2" ne ">>=") # other <op>= or (in)equality without preceding space
+ || ($intra_line =~ m/(\S)=/
+ && !($1 =~ m/[\+\-\*\/\/%\&\|\^\!<>=]/)
+ && $intra_line =~ m/(\S)(=)/); # otherwise, '=' without preceding space
+ # treat op= and comparison operators as simple '=', simplifying matching below
+ $intra_line =~ s/(<<|>>|[\+\-\*\/\/%\&\|\^\!<>=])=/=/g;
+ # treat (type) variables within macro, indicated by trailing '\', as 'int' simplifying matching below
+ $intra_line =~ s/[A-Z_]+/int/g if $trailing_backslash;
+ # treat double &&, ||, <<, and >> as single ones, simplifying matching below
+ $intra_line =~ s/(&&|\|\||<<|>>)/substr($1, 0, 1)/eg;
+ # remove blinded comments etc. directly after [{(
+ while ($intra_line =~ s/([\[\{\(])@+\s?/$1/e) {} # /g does not work here
+ # remove blinded comments etc. directly before ,;)}]
+ while ($intra_line =~ s/\s?@+([,;\)\}\]])/$1/e) {} # /g does not work here
+ # treat remaining blinded comments and string literal contents as (single) space during matching below
+ $intra_line =~ s/@+/ /g; # note that extra SPC has already been handled above
+ $intra_line =~ s/\s+$//; # strip any (resulting) space at EOL
+ # replace ';;' or '; ;' by ';' in "for(;;)" and in "for (...)" unless "..." contains just SPC and ';' characters:
+ $intra_line =~ s/((^|\W)for\s*\()([^;]*?)(\s*)(;\s?);(\s*)([^;]*)(\))/
+ "$1$3$4".("$3$4$5$6$7" eq ";" || $3 ne "" || $7 ne "" ? "" : $5).";$6$7$8"/eg;
+ # strip trailing ';' or '; ' in "for (...)" except in "for (;;)" or "for (;; )":
+ $intra_line =~ s/((^|\W)for\s*\()([^;]*(;[^;]*)?)(;\s?)(\))/
+ "$1$3".($3 eq ";" ? $5 : "")."$6"/eg;
+ $intra_line =~ s/(=\s*)\{ /"$1@ "/eg; # do not report {SPC in initializers such as ' = { 0, };'
+ $intra_line =~ s/, \};/, @;/g; # do not report SPC} in initializers such as ' = { 0, };'
+ report("space before '$1'") if $intra_line =~ m/[\w)\]]\s+(\+\+|--)/; # postfix ++/-- with preceding space
+ report("space after '$1'") if $intra_line =~ m/(\+\+|--)\s+[a-zA-Z_(]/; # prefix ++/-- with following space
+ $intra_line =~ s/\.\.\./@/g; # blind '...'
+ report("space before '$1'") if $intra_line =~ m/\s(\.|->)/; # '.' or '->' with preceding space
+ report("space after '$1'") if $intra_line =~ m/(\.|->)\s/; # '.' or '->' with following space
+ $intra_line =~ s/\-\>|\+\+|\-\-/@/g; # blind '->,', '++', and '--'
+ report("space before '$1'") if $intra_line =~ m/[^:)]\s+(;)/; # space before ';' but not after ':' or ')' # note that
+ # exceptions for "for (;; )" are handled above
+ report("space before '$1'") if $intra_line =~ m/\s([,)\]])/; # space before ,)]
+ report("space after '$1'") if $intra_line =~ m/([(\[~!])\s/; # space after ([~!
+ report("space after '$1'") if $intra_line =~ m/(defined)\s/; # space after 'defined'
+ report("missing space before '$1'") if $intra_line =~ m/\S([|\/%<>^\?])/; # |/%<>^? without preceding space
+ # TODO ternary ':' without preceding SPC, while allowing no SPC before ':' after 'case'
+ report("missing space before binary '$2'") if $intra_line =~ m/([^\s{()\[e])([+\-])/; # '+'/'-' without preceding space or {()[e
+ # ')' may be used for type casts or before "->", 'e' may be used for numerical literals such as "1e-6"
+ report("missing space before binary '$1'") if $intra_line =~ m/[^\s{()\[*!]([*])/; # '*' without preceding space or {()[*!
+ report("missing space before binary '$1'") if $intra_line =~ m/[^\s{()\[]([&])/; # '&' without preceding space or {()[
+ report("missing space after ternary '$1'") if $intra_line =~ m/(:)[^\s\d]/; # ':' without following space or digit
+ report("missing space after '$1'") if $intra_line =~ m/([,;=|\/%<>^\?])\S/; # ,;=|/%<>^? without following space
+ report("missing space after binary '$1'") if $intra_line=~m/[^{(\[]([*])[^\sa-zA-Z_(),*]/;# '*' w/o space or \w(),* after
+ # TODO unary '*' must not be followed by SPC
+ report("missing space after binary '$1'") if $intra_line=~m/([&])[^\sa-zA-Z_(]/; # '&' w/o following space or \w(
+ # TODO unary '&' must not be followed by SPC
+ report("missing space after binary '$1'") if $intra_line=~m/[^{(\[]([+\-])[^\s\d(]/; # +/- w/o following space or \d(
+ # TODO unary '+' and '-' must not be followed by SPC
+ report("missing space after '$2'") if $intra_line =~ m/(^|\W)(if|while|for|switch|case)[^\w\s]/; # kw w/o SPC
+ report("missing space after '$2'") if $intra_line =~ m/(^|\W)(return)[^\w\s;]/; # return w/o SPC or ';'
+ report("space after function/macro name")
+ if $intra_line =~ m/(\w+)\s+\(/ # fn/macro name with space before '('
+ && !($1 =~ m/^(sizeof|if|else|while|do|for|switch|case|default|break|continue|goto|return|void|char|signed|unsigned|int|short|long|float|double|typedef|enum|struct|union|auto|extern|static|const|volatile|register)$/) # not keyword
+ && !(m/^\s*#\s*define\s+\w+\s+\(/); # not a macro without parameters having a body that starts with '('
+ report("missing space before '{'") if $intra_line =~ m/[^\s{(\[]\{/; # '{' without preceding space or {([
+ report("missing space after '}'") if $intra_line =~ m/\}[^\s,;\])}]/; # '}' without following space or ,;])}
+ }
+
+ # adapt required indentation @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ s/(\w*ASN1_[A-Z_]+END\w*([^(]|\(.*?\)|$))/$1;/g; # treat *ASN1_*END*(..) macro calls as if followed by ';'
+
+ my $nested_indents_position = 0;
+
+ # update indents according to leading closing brace(s) '}' or label or switch case
+ my $in_stmt = $in_expr || @nested_symbols != 0 || $in_typedecl != 0;
+ if ($in_stmt) { # expr/stmt/type decl/var def/fn hdr, i.e., not at block level
+ if (m/^([\s@]*\})/) { # leading '}' within stmt, any preceding blinded comment must not be matched
+ $in_block_decls = -1;
+ my $head = $1;
+ update_nested_indents($head);
+ $nested_indents_position = length($head);
+ if (@nested_symbols >= 1) {
+ $hanging_symbol = @nested_symbols[-1];
+ $expr_indent = @nested_indents[-1];
+ } else { # typically end of initialiizer expr or enum
+ $expr_indent = 0;
+ }
+ } elsif (m/^([\s@]*)(static_)?ASN1_ITEM_TEMPLATE_END(\W|$)/) { # workaround for ASN1 macro indented as '}'
+ $local_offset = -INDENT_LEVEL;
+ $expr_indent = 0;
+ } elsif (m/;.*?\}/) { # expr ends with ';' before '}'
+ report("code before '}'");
+ }
+ }
+ if (@in_do_hanging_offsets != 0 && # note there is nothing like "unexpected 'while'"
+ m/^[\s@]*while(\W|$)/) { # leading 'while'
+ $hanging_offset = pop @in_do_hanging_offsets;
+ }
+ if ($if_maybe_terminated) {
+ if (m/(^|\W)else(\W|$)/) { # (not necessarily leading) 'else'
+ if (@in_if_hanging_offsets == 0) {
+ report("unexpected 'else'");
+ } else {
+ $hanging_offset = pop @in_if_hanging_offsets;
+ }
+ } else {
+ @in_if_hanging_offsets = (); # note there is nothing like "unclosed 'if'"
+ $hanging_offset = 0;
+ }
+ }
+ if (!$in_stmt) { # at block level, i.e., outside expr/stmt/type decl/var def/fn hdr
+ $if_maybe_terminated = 0;
+ if (my ($head, $before, $tail) = m/^([\s@]*([^{}]*)\})[\s@]*(.*)$/) { # leading closing '}', but possibly
+ # with non-whitespace non-'{' before
+ report("code after '}'") unless $tail eq "" || $tail =~ m/(else|while|OSSL_TRACE_END)(\W|$)/;
+ my $outermost_level = @nested_block_indents == 1 && @nested_block_indents[0] == 0;
+ if (!$sloppy_bodylen && $outermost_level && $line_body_start != 0) {
+ my $body_len = $line - $line_body_start - 1;
+ report_flexibly($line_function_start, "function body length = $body_len > ".MAX_BODY_LENGTH." lines",
+ $last_function_header) if $body_len > MAX_BODY_LENGTH;
+ $line_body_start = 0;
+ }
+ if ($before ne "") { # non-whitespace non-'{' before '}'
+ report("code before '}'");
+ } else { # leading '}' outside stmt, any preceding blinded comment must not be matched
+ $in_block_decls = -1;
+ $local_offset = $block_indent + $hanging_offset - INDENT_LEVEL;
+ update_nested_indents($head);
+ $nested_indents_position = length($head);
+ $local_offset -= ($block_indent + $hanging_offset);
+ # in effect $local_offset = -INDENT_LEVEL relative to $block_indent + $hanging_offset values before
+ }
+ }
+
+ # handle opening brace '{' after if/else/while/for/switch/do on line before
+ if ($hanging_offset > 0 && m/^[\s@]*{/ && # leading opening '{'
+ $line_before > 0 &&
+ $contents_before_ =~ m/(^|^.*\W)(if|else|while|for|switch|do)(\W.*$|$)/) {
+ $keyword_opening_brace = $1;
+ $hanging_offset -= INDENT_LEVEL; # cancel newly hanging_offset
+ }
+
+ if (m/^[\s@]*(case|default)(\W.*$|$)/) { # leading 'case' or 'default'
+ my $keyword = $1;
+ report("code after $keyword: ") if $2 =~ /:.*[^\s@].*$/;
+ $local_offset = -INDENT_LEVEL;
+ } else {
+ if (m/^([\s@]*)(\w+):/) { # (leading) label, cannot be "default"
+ $local_offset = -INDENT_LEVEL;
+ $has_label = 1;
+ }
+ }
+ }
+
+ # potential adaptations of indent in first line of macro body in multi-line macro definition
+ if ($in_preproc != 0 && $in_macro_header > 0) {
+ if ($in_macro_header > 1) { # still in macro definition header
+ $in_macro_header += parens_balance($_);
+ } else { # begin of macro body
+ $in_macro_header = 0;
+ if ($count == $block_indent - $preproc_offset # body began with same indentation as preceding code
+ && $sloppy_macro) { # workaround for this situation is enabled
+ $block_indent -= $preproc_offset;
+ $preproc_offset = 0;
+ }
+ }
+ }
+
+ # check required indentation @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ check_indent() if $count >= 0; # not for start of preprocessor directive and not if multi-line string literal is continued
+
+ # check for blank lines within/after local decls @@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ if ($in_block_decls >= 0 &&
+ $in_comment == 0 && !m/^\s*\*?@/ && # not in a multi-line or intra-line comment
+ !$in_expr && $expr_indent == 0 && $in_typedecl == 0) {
+ my $blank_line_before = $line > 1 && $code_contents_before =~ m/^\s*(\\\s*)?$/;
+ # essentially blank line before: just whitespace and maybe a '\'
+ if (m/^[\s(]*(char|signed|unsigned|int|short|long|float|double|enum|struct|union|auto|extern|static|const|volatile|register)(\W|$)/ # clear start of local decl
+ || (m/^(\s*(\w+|\[\]|[\*()]))+?\s+[\*\(]*\w+(\s*(\)|\[[^\]]*\]))*\s*[;,=]/ # weak check for decl involving user-defined type
+ && !m/^\s*(\}|sizeof|if|else|while|do|for|switch|case|default|break|continue|goto|return)(\W|$)/)) {
+ $in_block_decls++;
+ report_flexibly($line - 1, "blank line within local decls, before", $contents) if $blank_line_before;
+ } else {
+ report_flexibly($line, "missing blank line after local decls", "\n$contents_before$contents")
+ if $in_block_decls > 0 && !$blank_line_before;
+ $in_block_decls = -1 unless
+ m/^\s*(\\\s*)?$/ # essentially blank line: just whitespace (and maybe a trailing '\')
+ || $in_comment != 0 || m/^\s*\*?@/; # in multi-line comment or an intra-line comment
+ }
+ }
+
+ $in_comment = 0 if $in_comment < 0; # multi-line comment has ended
+
+ # do some further checks @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ my $outermost_level = $block_indent - $preproc_offset == 0;
+
+ report("more than one stmt") if !m/(^|\W)for(\W.*|$)/ && # no 'for' - TODO improve matching
+ m/;.*;/; # two or more terminators ';', so more than one statement
+
+ # check for code block containing a single line/statement
+ if ($line_before2 > 0 && !$outermost_level && # within function body
+ $in_typedecl == 0 && @nested_indents == 0 && # neither within type declaration nor inside stmt/expr
+ m/^[\s@]*\}/) { # leading closing brace '}', any preceding blinded comment must not be matched
+ # TODO extend detection from single-line to potentially multi-line statement
+ if ($line_opening_brace > 0 &&
+ ($line_opening_brace == $line_before2 ||
+ $line_opening_brace == $line_before)
+ && $contents_before =~ m/;/) { # there is at least one terminator ';', so there is some stmt
+ # TODO do not report cases where a further else branch
+ # follows with a block containing more than one line/statement
+ report_flexibly($line_before, "'$keyword_opening_brace' { 1 stmt }", $contents_before);
+ }
+ }
+
+ report("single-letter name '$2'") if (m/(^|.*\W)([IO])(\W.*|$)/); # single-letter name 'I' or 'O' # maybe re-add 'l'?
+ # constant on LHS of comparison or assignment, e.g., NULL != x or 'a' < c, but not a + 1 == b
+ report("constant on LHS of '$3'")
+ if (m/(['"]|([\+\-\*\/\/%\&\|\^<>]\s*)?\W[0-9]+L?|\WNULL)\s*([\!<>=]=|[<=>])([<>]?)/ &&
+ $2 eq "" && (($3 ne "<" && $3 ne "='" && $3 ne ">") || $4 eq ""));
+
+ # TODO report needless use of parentheses, while
+ # macro parameters should always be in parens (except when passed on), e.g., '#define ID(x) (x)'
+
+ # adapt required indentation for following lines @@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ # set $in_expr, $in_paren_expr, and $hanging_offset for if/while/for/switch, return/enum, and assignment RHS
+ my $paren_expr_start = 0;
+ my $return_enum_start = 0;
+ my $assignment_start = 0;
+ my $tmp = $_;
+ $tmp =~ s/[\!<>=]=/@@/g; # blind (in-)equality symbols like '<=' as '@@' to prevent matching them as '=' below
+ if (m/^((^|.*\W)(if|while|for|switch))(\W.*|$)$/) { # (last) if/for/while/switch
+ $paren_expr_start = 1;
+ } elsif (m/^((^|.*\W)(return|enum))(\W.*|$)/ # (last) return/enum
+ && !$in_expr && @nested_indents == 0 && parens_balance($1) == 0) { # not nested enum
+ $return_enum_start = 1;
+ } elsif ($tmp =~ m/^(([^=]*)(=))(.*)$/ # (last) '=', i.e., assignment
+ && !$in_expr && @nested_indents == 0 && parens_balance($1) == 0) { # not nested assignment
+ $assignment_start = 1;
+ }
+ if ($paren_expr_start || $return_enum_start || $assignment_start)
+ {
+ my ($head, $mid, $tail) = ($1, $3, $4);
+ $keyword_opening_brace = $mid if $mid ne "=";
+ # to cope with multi-line expressions, do this also if !($tail =~ m/\{/)
+ push @in_if_hanging_offsets, $hanging_offset if $mid eq "if";
+
+ # already handle $head, i.e., anything before expression
+ update_nested_indents($head, $nested_indents_position);
+ $nested_indents_position = length($head);
+ # now can set $in_expr and $in_paren_expr
+ $in_expr = 1;
+ $in_paren_expr = 1 if $paren_expr_start;
+ if ($mid eq "while" && @in_do_hanging_offsets != 0) {
+ $hanging_offset = pop @in_do_hanging_offsets;
+ } else {
+ $hanging_offset += INDENT_LEVEL; # tentatively set hanging_offset, may be canceled by following '{'
+ }
+ }
+
+ # set $hanging_offset and $keyword_opening_brace for do/else
+ if (my ($head, $mid, $tail) = m/(^|^.*\W)(else|do)(\W.*|$)$/) { # last else/do, where 'do' is preferred, but not #else
+ my $code_before = $head =~ m/[^\s\@}]/; # leading non-whitespace non-comment non-'}'
+ report("code before '$mid'") if $code_before;
+ report("code after '$mid'" ) if $tail =~ m/[^\s\@{]/# trailing non-whitespace non-comment non-'{' (non-'\')
+ && !($mid eq "else" && $tail =~ m/[\s@]*if(\W|$)/);
+ if ($mid eq "do") { # workarounds for code before 'do'
+ if ($head =~ m/(^|^.*\W)(else)(\W.*$|$)/) { # 'else' ... 'do'
+ $hanging_offset += INDENT_LEVEL; # tentatively set hanging_offset, may be canceled by following '{'
+ }
+ if ($head =~ m/;/) { # terminator ';' ... 'do'
+ @in_if_hanging_offsets = (); # note there is nothing like "unclosed 'if'"
+ $hanging_offset = 0;
+ }
+ }
+ push @in_do_hanging_offsets, $hanging_offset if $mid eq "do";
+ if ($code_before && $mid eq "do") {
+ $hanging_offset = length($head) - $block_indent;
+ }
+ if (!$in_paren_expr) {
+ $keyword_opening_brace = $mid if $tail =~ m/\{/;
+ $hanging_offset += INDENT_LEVEL;
+ }
+ }
+
+ # set $in_typedecl and potentially $hanging_offset for type declaration
+ if (!$in_expr && @nested_indents == 0 # not in expression
+ && m/(^|^.*\W)(typedef|enum|struct|union)(\W.*|$)$/
+ && parens_balance($1) == 0 # not in newly started expression or function arg list
+ && ($2 eq "typedef" || !($3 =~ m/\s*\w++\s*(.)/ && $1 ne "{")) # 'struct'/'union'/'enum' <name> not followed by '{'
+ # not needed: && $keyword_opening_brace = $2 if $3 =~ m/\{/;
+ ) {
+ $in_typedecl++;
+ $hanging_offset += INDENT_LEVEL if m/\*.*\(/; # '*' followed by '(' - seems consistent with Emacs C mode
+ }
+
+ my $local_in_expr = $in_expr;
+ my $terminator_position = update_nested_indents($_, $nested_indents_position);
+
+ if ($local_in_expr) {
+ # on end of non-if/while/for/switch (multi-line) expression (i.e., return/enum/assignment) and
+ # on end of statement/type declaration/variable definition/function header
+ if ($terminator_position >= 0 && ($in_typedecl == 0 || @nested_indents == 0)) {
+ check_nested_nonblock_indents("expr");
+ $in_expr = 0;
+ }
+ } else {
+ check_nested_nonblock_indents($in_typedecl == 0 ? "stmt" : "decl") if $terminator_position >= 0;
+ }
+
+ # on ';', which terminates the current statement/type declaration/variable definition/function declaration
+ if ($terminator_position >= 0) {
+ my $tail = substr($_, $terminator_position + 1);
+ if (@in_if_hanging_offsets != 0) {
+ if ($tail =~ m/\s*else(\W|$)/) {
+ pop @in_if_hanging_offsets;
+ $hanging_offset -= INDENT_LEVEL;
+ } elsif ($tail =~ m/[^\s@]/) { # code (not just comment) follows
+ @in_if_hanging_offsets = (); # note there is nothing like "unclosed 'if'"
+ $hanging_offset = 0;
+ } else {
+ $if_maybe_terminated = 1;
+ }
+ } elsif ($tail =~ m/^[\s@]*$/) { # ';' has been trailing, i.e. there is nothing but whitespace and comments
+ $hanging_offset = 0; # reset in case of terminated assignment ('=') etc.
+ }
+ $in_typedecl-- if $in_typedecl != 0 && @nested_in_typedecl == 0; # TODO handle multiple type decls per line
+ m/(;[^;]*)$/; # match last ';'
+ $terminator_position = length($_) - length($1) if $1;
+ # new $terminator_position value may be after the earlier one in case multiple terminators on current line
+ # TODO check treatment in case of multiple terminators on current line
+ update_nested_indents($_, $terminator_position + 1);
+ }
+
+ # set hanging expression indent according to nested indents - TODO maybe do better in update_nested_indents()
+ # also if $in_expr is 0: in statement/type declaration/variable definition/function header
+ $expr_indent = 0;
+ for (my $i = -1; $i >= -@nested_symbols; $i--) {
+ if (@nested_symbols[$i] ne "?") { # conditionals '?' ... ':' are treated specially in check_indent()
+ $hanging_symbol = @nested_symbols[$i];
+ $expr_indent = $nested_indents[$i];
+ # $expr_indent is guaranteed to be != 0 unless @nested_indents contains just outer conditionals
+ last;
+ }
+ }
+
+ # remember line number and header containing name of last function defined for reports w.r.t. MAX_BODY_LENGTH
+ if ($in_preproc == 0 && $outermost_level && m/(\w+)\s*\(/ && $1 ne "STACK_OF") {
+ $line_function_start = $line;
+ $last_function_header = $contents;
+ }
+
+ # special checks for last, typically trailing opening brace '{' in line
+ if (my ($head, $tail) = m/^(.*)\{(.*)$/) { # match last ... '{'
+ if (!$in_expr && $in_typedecl == 0) {
+ if ($outermost_level) {
+ if (!$assignment_start && !$local_in_expr) {
+ # at end of function definition header (or stmt or var definition)
+ report("'{' not at line start") if length($head) != $preproc_offset && $head =~ m/\)\s*/; # at end of function definition header
+ $line_body_start = $contents =~ m/LONG BODY/ ? 0 : $line if $line_function_start != 0;
+ }
+ } else {
+ $line_opening_brace = $line if $keyword_opening_brace =~ m/do|while|for/;
+ # using, not assigning, $keyword_opening_brace here because it could be on an earlier line
+ $line_opening_brace = $line if $keyword_opening_brace =~ m/if|else/ && $extended_1_stmt &&
+ # TODO prevent false positives for if/else where braces around single-statement branches
+ # should be avoided but only if all branches have just single statements
+ # The following helps detecting the exception when handling multiple 'if ... else' branches:
+ !($keyword_opening_brace eq "else" && $line_opening_brace < $line_before2);
+ }
+ report("code after '{'") if $tail=~ m/[^\s\@]/ && # trailing non-whitespace non-comment (non-'\')
+ !($tail=~ m/\}/); # missing '}' after last '{'
+ }
+ }
+
+ # check for opening brace after if/while/for/switch/do not on same line
+ # note that "missing '{' on same line after '} else'" is handled further below
+ if (/^[\s@]*{/ && # leading '{'
+ $line_before > 0 && !($contents_before_ =~ m/^\s*#/) && # not preprocessor directive '#if
+ (my ($head, $mid, $tail) = ($contents_before_ =~ m/(^|^.*\W)(if|while|for|switch|do)(\W.*$|$)/))) {
+ my $brace_after = $tail =~ /^[\s@]*{/; # any whitespace or comments then '{'
+ report("'{' not on same line as preceding '$mid'") if !$brace_after;
+ }
+ # check for closing brace on line before 'else' not followed by leading '{'
+ elsif (my ($head, $tail) = m/(^|^.*\W)else(\W.*$|$)/) {
+ if (parens_balance($tail) == 0 && # avoid false positive due to unfinished expr on current line
+ !($tail =~ m/{/) && # after 'else' missing '{' on same line
+ !($head =~ m/}[\s@]*$/) && # not: '}' then any whitespace or comments before 'else'
+ $line_before > 0 && $contents_before_ =~ /}[\s@]*$/) { # trailing '}' on line before
+ report("missing '{' on same line after '} else'");
+ }
+ }
+
+ # check for closing brace before 'while' not on same line
+ if (my ($head, $tail) = m/(^|^.*\W)while(\W.*$|$)/) {
+ my $brace_before = $head =~ m/}[\s@]*$/; # '}' then any whitespace or comments
+ # possibly 'if (...)' (with potentially inner '(' and ')') then any whitespace or comments then '{'
+ if (!$brace_before &&
+ # does not work here: @in_do_hanging_offsets != 0 && #'while' terminates loop
+ parens_balance($tail) == 0 && # avoid false positive due to unfinished expr on current line
+ $tail =~ /;/ && # 'while' terminates loop (by ';')
+ $line_before > 0 &&
+ $contents_before_ =~ /}[\s@]*$/) { # on line before: '}' then any whitespace or comments
+ report("'while' not on same line as preceding '}'");
+ }
+ }
+
+ # check for missing brace on same line before or after 'else'
+ if (my ($head, $tail) = m/(^|^.*\W)else(\W.*$|$)/) {
+ my $brace_before = $head =~ /}[\s@]*$/; # '}' then any whitespace or comments
+ my $brace_after = $tail =~ /^[\s@]*if[\s@]*\(.*\)[\s@]*{|[\s@]*{/;
+ # possibly 'if (...)' (with potentially inner '(' and ')') then any whitespace or comments then '{'
+ if (!$brace_before) {
+ if ($line_before > 0 && $contents_before_ =~ /}[\s@]*$/) {
+ report("'else' not on same line as preceding '}'");
+ } elsif (parens_balance($tail) == 0) { # avoid false positive due to unfinished expr on current line
+ report("missing '}' on same line before 'else ... {'") if $brace_after;
+ }
+ } elsif (parens_balance($tail) == 0) { # avoid false positive due to unfinished expr on current line
+ report("missing '{' on same line after '} else'") if $brace_before && !$brace_after;
+ }
+ }
+
+ # on begin of multi-line preprocessor directive, adapt indent
+ if ($in_comment == 0 && $trailing_backslash) {
+ # trailing '\'typically used in preprocessor directive like '#define'
+ if ($in_preproc == 1) { # start of multi-line preprocessor directive
+ # note that backup+reset_indentation_state() has already been called
+ $in_macro_header = m/^\s*#\s*define(\W|$)?(.*)/ ? 1 + parens_balance($2) : 0; # '#define' is beginning
+ $preproc_offset = INDENT_LEVEL;
+ $block_indent = $preproc_offset;
+ }
+ $in_preproc += 1;
+ }
+
+ # post-processing at end of line @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ LINE_FINISHED:
+ $code_contents_before = $contents if
+ !m/^\s*#(\s*)(\w+)/ && # not single-line preprocessor directive
+ $in_comment == 0 && !m/^\s*\*?@/; # not in a multi-line comment nor in an intra-line comment
+
+ # on end of (possibly multi-line) preprocessor directive, adapt indent
+ if ($in_preproc != 0 && !$trailing_backslash) { # no trailing '\'
+ $in_preproc = 0;
+ $preproc_offset = 0;
+ restore_indentation_state();
+ }
+
+ if ($essentially_blank_line) {
+ report("leading ".($1 eq "" ? "blank" :"whitespace")." line") if $line == 1 && !$sloppy_SPC;
+ } else {
+ if ($line_before > 0) {
+ my $linediff = $line - $line_before - 1;
+ report("$linediff blank lines before") if $linediff > 1 && !$sloppy_SPC;
+ }
+ $line_before2 = $line_before;
+ $contents_before2 = $contents_before;
+ $contents_before_2 = $contents_before_;
+ $line_before = $line;
+ $contents_before = $contents;
+ $contents_before_ = $_;
+ $count_before = $count;
+ }
+
+ if ($self_test) { # debugging
+ my $should_report = $contents =~ m/\*@(\d)?/ ? 1 : 0;
+ $should_report = +$1 if $should_report != 0 && defined $1;
+ print("$ARGV:$line:$num_reports_line reports on:$contents")
+ if $num_reports_line != $should_report;
+ }
+ $num_reports_line = 0;
+
+ # post-processing at end of file @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+ if (eof) {
+ # check for essentially blank line (which may include a '\') just before EOF
+ report(($1 eq "\n" ? "blank line" : $2 ne "" ? "'\\'" : "whitespace")." at EOF")
+ if $contents =~ m/^(\s*(\\?)\s*)$/ && !$sloppy_SPC;
+
+ # report unclosed expression-level nesting
+ check_nested_nonblock_indents("expr at EOF"); # also adapts @nested_block_indents
+
+ # sanity-check balance of block-level { ... } via final $block_indent at end of file
+ report_flexibly($line, +@nested_block_indents." unclosed '{'", "(EOF)\n") if @nested_block_indents != 0;
+
+ # sanity-check balance of #if ... #endif via final preprocessor directive indent at end of file
+ report_flexibly($line, "$preproc_if_nesting unclosed '#if'", "(EOF)\n") if $preproc_if_nesting != 0;
+
+ reset_file_state();
+ }
+}
+
+# final summary report @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+my $num_other_reports = $num_reports - $num_indent_reports - $num_nesting_issues
+ - $num_syntax_issues - $num_SPC_reports - $num_length_reports;
+print "$num_reports ($num_indent_reports indentation, $num_nesting_issues '#if' nesting indent, ".
+ "$num_syntax_issues syntax, $num_SPC_reports whitespace, $num_length_reports length, $num_other_reports other)".
+ " issues have been found by $0\n" if $num_reports != 0 && !$self_test;
diff --git a/util/check-malloc-errs b/util/check-malloc-errs
new file mode 100755
index 000000000000..adf93c73c77a
--- /dev/null
+++ b/util/check-malloc-errs
@@ -0,0 +1,16 @@
+#! /bin/sh
+# Copyright 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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+(
+ pcregrep -rnM 'OPENSSL_.?alloc.*\n.*if.*NULL.*\n.*return' crypto ssl
+ pcregrep -rnM 'if.*OPENSSL_.?alloc.*NULL.*\n.*.*return' crypto ssl
+) | tee /tmp/out$$
+X=0
+test -s /tmp/out$$ && X=1
+rm /tmp/out$$
+exit $X
diff --git a/util/ck_errf.pl b/util/ck_errf.pl
new file mode 100755
index 000000000000..681535e7200c
--- /dev/null
+++ b/util/ck_errf.pl
@@ -0,0 +1,153 @@
+#! /usr/bin/env perl
+# 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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+# This is just a quick script to scan for cases where the 'error'
+# function name in a XXXerr() macro is wrong.
+#
+# Run in the top level by going
+# perl util/ck_errf.pl */*.c */*/*.c
+#
+
+use strict;
+use warnings;
+
+my $config;
+my $err_strict = 0;
+my $debug = 0;
+my $internal = 0;
+
+sub help
+{
+ print STDERR <<"EOF";
+mkerr.pl [options] [files...]
+
+Options:
+
+ -conf FILE Use the named config file FILE instead of the default.
+
+ -debug Verbose output debugging on stderr.
+
+ -internal Generate code that is to be built as part of OpenSSL itself.
+ Also scans internal list of files.
+
+ -strict If any error was found, fail with exit code 1, otherwise 0.
+
+ -help Show this help text.
+
+ ... Additional arguments are added to the file list to scan,
+ if '-internal' was NOT specified on the command line.
+
+EOF
+}
+
+while ( @ARGV ) {
+ my $arg = $ARGV[0];
+ last unless $arg =~ /-.*/;
+ $arg = $1 if $arg =~ /-(-.*)/;
+ if ( $arg eq "-conf" ) {
+ $config = $ARGV[1];
+ shift @ARGV;
+ } elsif ( $arg eq "-debug" ) {
+ $debug = 1;
+ } elsif ( $arg eq "-internal" ) {
+ $internal = 1;
+ } elsif ( $arg eq "-strict" ) {
+ $err_strict = 1;
+ } elsif ( $arg =~ /-*h(elp)?/ ) {
+ &help();
+ exit;
+ } elsif ( $arg =~ /-.*/ ) {
+ die "Unknown option $arg; use -h for help.\n";
+ }
+ shift @ARGV;
+}
+
+my @source;
+if ( $internal ) {
+ die "Extra parameters given.\n" if @ARGV;
+ $config = "crypto/err/openssl.ec" unless defined $config;
+ @source = ( glob('crypto/*.c'), glob('crypto/*/*.c'),
+ glob('ssl/*.c'), glob('ssl/*/*.c'), glob('providers/*.c'),
+ glob('providers/*/*.c'), glob('providers/*/*/*.c') );
+} else {
+ die "Configuration file not given.\nSee '$0 -help' for information\n"
+ unless defined $config;
+ @source = @ARGV;
+}
+
+# To detect if there is any error generation for a libcrypto/libssl libs
+# we don't know, we need to find out what libs we do know. That list is
+# readily available in crypto/err/openssl.ec, in form of lines starting
+# with "L ". Note that we always rely on the modules SYS and ERR to be
+# generally available.
+my %libs = ( SYS => 1, ERR => 1 );
+open my $cfh, $config or die "Trying to read $config: $!\n";
+while (<$cfh>) {
+ s|\R$||; # Better chomp
+ next unless m|^L ([0-9A-Z_]+)\s|;
+ next if $1 eq "NONE";
+ $libs{$1} = 1;
+}
+
+my $bad = 0;
+foreach my $file (@source) {
+ open( IN, "<$file" ) || die "Can't open $file, $!";
+ my $func = "";
+ while (<IN>) {
+ if ( !/;$/ && /^\**([a-zA-Z_].*[\s*])?([A-Za-z_0-9]+)\(.*([),]|$)/ ) {
+ /^([^()]*(\([^()]*\)[^()]*)*)\(/;
+ $1 =~ /([A-Za-z_0-9]*)$/;
+ $func = $1;
+ $func =~ tr/A-Z/a-z/;
+ }
+ if ( /([A-Z0-9_]+[A-Z0-9])err\(([^,]+)/ && !/ckerr_ignore/ ) {
+ my $errlib = $1;
+ my $n = $2;
+
+ unless ( $libs{$errlib} ) {
+ print "$file:$.:$errlib not listed in $config\n";
+ $libs{$errlib} = 1; # To not display it again
+ $bad = 1;
+ }
+
+ if ( $func eq "" ) {
+ print "$file:$.:???:$n\n";
+ $bad = 1;
+ next;
+ }
+
+ if ( $n !~ /^(.+)_F_(.+)$/ ) {
+ #print "check -$file:$.:$func:$n\n";
+ next;
+ }
+ my $lib = $1;
+ $n = $2;
+
+ if ( $lib ne $errlib ) {
+ print "$file:$.:$func:$n [${errlib}err]\n";
+ $bad = 1;
+ next;
+ }
+
+ $n =~ tr/A-Z/a-z/;
+ if ( $n ne $func && $errlib ne "SYS" ) {
+ print "$file:$.:$func:$n\n";
+ $bad = 1;
+ next;
+ }
+
+ # print "$func:$1\n";
+ }
+ }
+ close(IN);
+}
+
+if ( $bad && $err_strict ) {
+ print STDERR "FATAL: error discrepancy\n";
+ exit 1;
+}
diff --git a/util/copy.pl b/util/copy.pl
new file mode 100644
index 000000000000..4da4a5fcc483
--- /dev/null
+++ b/util/copy.pl
@@ -0,0 +1,84 @@
+#! /usr/bin/env perl
+# Copyright 2005-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+use Fcntl;
+
+
+# copy.pl
+
+# Perl script 'copy' comment. On Windows the built in "copy" command also
+# copies timestamps: this messes up Makefile dependencies.
+
+my $stripcr = 0;
+
+my $arg;
+my @excludes = ();
+
+foreach $arg (@ARGV) {
+ if ($arg eq "-stripcr")
+ {
+ $stripcr = 1;
+ next;
+ }
+ if ($arg =~ /^-exclude_re=(.*)$/)
+ {
+ push @excludes, $1;
+ next;
+ }
+ $arg =~ s|\\|/|g; # compensate for bug/feature in cygwin glob...
+ $arg = qq("$arg") if ($arg =~ /\s/); # compensate for bug in 5.10...
+ foreach my $f (glob $arg)
+ {
+ push @filelist, $f unless grep { $f =~ /$_/ } @excludes;
+ }
+}
+
+$fnum = @filelist;
+
+if ($fnum <= 1)
+ {
+ die "Need at least two filenames";
+ }
+
+$dest = pop @filelist;
+
+if ($fnum > 2 && ! -d $dest)
+ {
+ die "Destination must be a directory";
+ }
+
+foreach (@filelist)
+ {
+ if (-d $dest)
+ {
+ $dfile = $_;
+ $dfile =~ s|^.*[/\\]([^/\\]*)$|$1|;
+ $dfile = "$dest/$dfile";
+ }
+ else
+ {
+ $dfile = $dest;
+ }
+ sysopen(IN, $_, O_RDONLY|O_BINARY) || die "Can't Open $_";
+ sysopen(OUT, $dfile, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY)
+ || die "Can't Open $dfile";
+ while (sysread IN, $buf, 10240)
+ {
+ if ($stripcr)
+ {
+ $buf =~ tr/\015//d;
+ }
+ syswrite(OUT, $buf, length($buf));
+ }
+ close(IN);
+ close(OUT);
+ print "Copying: $_ to $dfile\n";
+ }
+
+
diff --git a/util/dofile.pl b/util/dofile.pl
new file mode 100644
index 000000000000..d1ed1e4098a2
--- /dev/null
+++ b/util/dofile.pl
@@ -0,0 +1,112 @@
+#! /usr/bin/env perl
+# Copyright 2016-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
+
+# Reads one or more template files and runs it through Text::Template
+#
+# It is assumed that this scripts is called with -Mconfigdata, a module
+# that holds configuration data in %config
+
+use strict;
+use warnings;
+
+use FindBin;
+use lib "$FindBin::Bin/perl";
+use OpenSSL::fallback "$FindBin::Bin/../external/perl/MODULES.txt";
+use Getopt::Std;
+use OpenSSL::Template;
+
+# We expect to get a lot of information from configdata, so check that
+# it was part of our commandline.
+die "You must run this script with -Mconfigdata\n"
+ if !exists($config{target});
+
+# Check options ######################################################
+
+# -o ORIGINATOR
+# declares ORIGINATOR as the originating script.
+# -i .ext Like Perl's edit-in-place -i flag
+my %opts = ();
+getopt('oi', \%opts);
+
+my @autowarntext = (
+ "WARNING: do not edit!",
+ "Generated"
+ . (defined($opts{o}) ? " by $opts{o}" : "")
+ . (scalar(@ARGV) > 0 ? " from " .join(", ", @ARGV) : "")
+);
+
+if (defined($opts{s})) {
+ local $/ = undef;
+ open VARS, $opts{s} or die "Couldn't open $opts{s}, $!";
+ my $contents = <VARS>;
+ close VARS;
+ eval $contents;
+ die $@ if $@;
+}
+die "Must have input files"
+ if defined($opts{i}) and scalar(@ARGV) == 0;
+
+# Template setup #####################################################
+
+my @template_settings =
+ @ARGV
+ ? map { { TYPE => 'FILE', SOURCE => $_, FILENAME => $_ } } @ARGV
+ : ( { TYPE => 'FILEHANDLE', SOURCE => \*STDIN, FILENAME => '<stdin>' } );
+
+# Error callback; print message, set status, return "stop processing"
+my $failed = 0;
+sub errorcallback {
+ my %args = @_;
+ print STDERR $args{error};
+ $failed++;
+ return undef;
+}
+
+# Engage! ############################################################
+
+my $prepend = <<"_____";
+use File::Spec::Functions;
+use lib '$FindBin::Bin/../Configurations';
+use lib '$config{builddir}';
+use platform;
+_____
+
+foreach (@template_settings) {
+ my $template = OpenSSL::Template->new(%$_);
+ die "Couldn't create template: $Text::Template::ERROR"
+ if !defined($template);
+
+ my $result = $template->fill_in(%$_,
+ HASH => { config => \%config,
+ target => \%target,
+ disabled => \%disabled,
+ withargs => \%withargs,
+ unified_info => \%unified_info,
+ autowarntext => \@autowarntext },
+ BROKEN => \&errorcallback,
+ PREPEND => $prepend,
+ # To ensure that global variables and functions
+ # defined in one template stick around for the
+ # next, making them combinable
+ PACKAGE => 'OpenSSL::safe');
+ exit 1 if $failed;
+
+ if (defined($opts{i})) {
+ my $in = $_->{FILENAME};
+ my $out = $in;
+ $out =~ s/$opts{i}$//;
+ die "Cannot replace file in-place $in"
+ if $in eq $out;
+ open OFH, ">$out"
+ or die "Can't open $out, $!";
+ print OFH $result;
+ close OFH;
+ } else {
+ print $result;
+ }
+}
diff --git a/util/echo.pl b/util/echo.pl
new file mode 100644
index 000000000000..8c2616a3bcb0
--- /dev/null
+++ b/util/echo.pl
@@ -0,0 +1,12 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use Getopt::Std;
+
+our $opt_n = 0;
+
+getopts('n') or die "Invalid option: $!\n";
+
+print join(' ', @ARGV);
+print "\n" unless $opt_n;
diff --git a/util/engines.num b/util/engines.num
new file mode 100644
index 000000000000..4fc4e001df47
--- /dev/null
+++ b/util/engines.num
@@ -0,0 +1,2 @@
+bind_engine 1 * EXIST::FUNCTION:
+v_check 2 * EXIST::FUNCTION:
diff --git a/util/err-to-raise b/util/err-to-raise
new file mode 100755
index 000000000000..174686d3ab16
--- /dev/null
+++ b/util/err-to-raise
@@ -0,0 +1,22 @@
+#! /usr/bin/env perl
+# Copyright 2019-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
+
+# Run this program like this:
+# perl -pi util/err-to-raise files...
+# or
+# git ls-files | grep '\.c$' | xargs perl -pi util/err-to-raise
+# Consider running util/merge-err-lines first, to catch most (all?) of the
+# cases where the XXXerr() call is split into two lines.
+
+# Do not use this in engines/, they have their own error reporting functions,
+# which do call ERR_raise().
+
+use strict;
+use warnings;
+
+s/\b([_A-Z0-9]+)err\(\s*\w+\s*,/ERR_raise(ERR_LIB_$1,/;
diff --git a/util/find-doc-nits b/util/find-doc-nits
new file mode 100755
index 000000000000..cecce77e3406
--- /dev/null
+++ b/util/find-doc-nits
@@ -0,0 +1,1234 @@
+#! /usr/bin/env perl
+# Copyright 2002-2023 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
+
+
+require 5.10.0;
+use warnings;
+use strict;
+
+use Carp qw(:DEFAULT cluck);
+use Pod::Checker;
+use File::Find;
+use File::Basename;
+use File::Spec::Functions;
+use Getopt::Std;
+use FindBin;
+use lib "$FindBin::Bin/perl";
+
+use OpenSSL::Util::Pod;
+
+use lib '.';
+use configdata;
+
+# Set to 1 for debug output
+my $debug = 0;
+
+# Options.
+our($opt_d);
+our($opt_e);
+our($opt_s);
+our($opt_o);
+our($opt_h);
+our($opt_l);
+our($opt_m);
+our($opt_n);
+our($opt_p);
+our($opt_u);
+our($opt_v);
+our($opt_c);
+
+# Print usage message and exit.
+sub help {
+ print <<EOF;
+Find small errors (nits) in documentation. Options:
+ -c List undocumented commands, undocumented options and unimplemented options.
+ -d Detailed list of undocumented (implies -u)
+ -e Detailed list of new undocumented (implies -v)
+ -h Print this help message
+ -l Print bogus links
+ -m Name(s) of manuals to focus on. Default: man1,man3,man5,man7
+ -n Print nits in POD pages
+ -o Causes -e/-v to count symbols added since 1.1.1 as new (implies -v)
+ -u Count undocumented functions
+ -v Count new undocumented functions
+EOF
+ exit;
+}
+
+getopts('cdehlm:nouv');
+
+help() if $opt_h;
+$opt_u = 1 if $opt_d;
+$opt_v = 1 if $opt_o || $opt_e;
+die "Cannot use both -u and -v"
+ if $opt_u && $opt_v;
+die "Cannot use both -d and -e"
+ if $opt_d && $opt_e;
+
+# We only need to check c, l, n, u and v.
+# Options d, e, o imply one of the above.
+die "Need one of -[cdehlnouv] flags.\n"
+ unless $opt_c or $opt_l or $opt_n or $opt_u or $opt_v;
+
+
+my $temp = '/tmp/docnits.txt';
+my $OUT;
+my $status = 0;
+
+$opt_m = "man1,man3,man5,man7" unless $opt_m;
+die "Argument of -m option may contain only man1, man3, man5, and/or man7"
+ unless $opt_m =~ /^(man[1357][, ]?)*$/;
+my @sections = ( split /[, ]/, $opt_m );
+
+my %mandatory_sections = (
+ '*' => [ 'NAME', 'DESCRIPTION', 'COPYRIGHT' ],
+ 1 => [ 'SYNOPSIS', 'OPTIONS' ],
+ 3 => [ 'SYNOPSIS', 'RETURN VALUES' ],
+ 5 => [ ],
+ 7 => [ ]
+ );
+
+# Symbols that we ignored.
+# They are reserved macros that we currently don't document
+my $ignored = qr/(?| ^i2d_
+ | ^d2i_
+ | ^DEPRECATEDIN
+ | ^OSSL_DEPRECATED
+ | \Q_fnsig(3)\E$
+ | ^IMPLEMENT_
+ | ^_?DECLARE_
+ | ^sk_
+ | ^SKM_DEFINE_STACK_OF_INTERNAL
+ | ^lh_
+ | ^DEFINE_LHASH_OF_INTERNAL
+ )/x;
+
+# A common regexp for C symbol names
+my $C_symbol = qr/\b[[:alpha:]][_[:alnum:]]*\b/;
+
+# Collect all POD files, both internal and public, and regardless of location
+# We collect them in a hash table with each file being a key, so we can attach
+# tags to them. For example, internal docs will have the word "internal"
+# attached to them.
+my %files = ();
+# We collect files names on the fly, on known tag basis
+my %collected_tags = ();
+# We cache results based on tags
+my %collected_results = ();
+
+# files OPTIONS
+#
+# Example:
+#
+# files(TAGS => 'manual');
+# files(TAGS => [ 'manual', 'man1' ]);
+#
+# This function returns an array of files corresponding to a set of tags
+# given with the options "TAGS". The value of this option can be a single
+# word, or an array of several words, which work as inclusive or exclusive
+# selectors. Inclusive selectors are used to add one more set of files to
+# the returned array, while exclusive selectors limit the set of files added
+# to the array. The recognised tag values are:
+#
+# 'public_manual' - inclusive selector, adds public manuals to the
+# returned array of files.
+# 'internal_manual' - inclusive selector, adds internal manuals to the
+# returned array of files.
+# 'manual' - inclusive selector, adds any manual to the returned
+# array of files. This is really a shorthand for
+# 'public_manual' and 'internal_manual' combined.
+# 'public_header' - inclusive selector, adds public headers to the
+# returned array of files.
+# 'header' - inclusive selector, adds any header file to the
+# returned array of files. Since we currently only
+# care about public headers, this is exactly
+# equivalent to 'public_header', but is present for
+# consistency.
+#
+# 'man1', 'man3', 'man5', 'man7'
+# - exclusive selectors, only applicable together with
+# any of the manual selectors. If any of these are
+# present, only the manuals from the given sections
+# will be included. If none of these are present,
+# the manuals from all sections will be returned.
+#
+# All returned manual files come from configdata.pm.
+# All returned header files come from looking inside
+# "$config{sourcedir}/include/openssl"
+#
+sub files {
+ my %opts = ( @_ ); # Make a copy of the arguments
+
+ $opts{TAGS} = [ $opts{TAGS} ] if ref($opts{TAGS}) eq '';
+
+ croak "No tags given, or not an array"
+ unless exists $opts{TAGS} && ref($opts{TAGS}) eq 'ARRAY';
+
+ my %tags = map { $_ => 1 } @{$opts{TAGS}};
+ $tags{public_manual} = 1
+ if $tags{manual} && ($tags{public} // !$tags{internal});
+ $tags{internal_manual} = 1
+ if $tags{manual} && ($tags{internal} // !$tags{public});
+ $tags{public_header} = 1
+ if $tags{header} && ($tags{public} // !$tags{internal});
+ delete $tags{manual};
+ delete $tags{header};
+ delete $tags{public};
+ delete $tags{internal};
+
+ my $tags_as_key = join(':', sort keys %tags);
+
+ cluck "DEBUG[files]: This is how we got here!" if $debug;
+ print STDERR "DEBUG[files]: tags: $tags_as_key\n" if $debug;
+
+ my %tags_to_collect = ( map { $_ => 1 }
+ grep { !exists $collected_tags{$_} }
+ keys %tags );
+
+ if ($tags_to_collect{public_manual}) {
+ print STDERR "DEBUG[files]: collecting public manuals\n"
+ if $debug;
+
+ # The structure in configdata.pm is that $unified_info{mandocs}
+ # contains lists of man files, and in turn, $unified_info{depends}
+ # contains hash tables showing which POD file each of those man
+ # files depend on. We use that information to find the POD files,
+ # and to attach the man section they belong to as tags
+ foreach my $mansect ( @sections ) {
+ foreach ( map { @{$unified_info{depends}->{$_}} }
+ @{$unified_info{mandocs}->{$mansect}} ) {
+ $files{$_} = { $mansect => 1, public_manual => 1 };
+ }
+ }
+ $collected_tags{public_manual} = 1;
+ }
+
+ if ($tags_to_collect{internal_manual}) {
+ print STDERR "DEBUG[files]: collecting internal manuals\n"
+ if $debug;
+
+ # We don't have the internal docs in configdata.pm. However, they
+ # are all in the source tree, so they're easy to find.
+ foreach my $mansect ( @sections ) {
+ foreach ( glob(catfile($config{sourcedir},
+ 'doc', 'internal', $mansect, '*.pod')) ) {
+ $files{$_} = { $mansect => 1, internal_manual => 1 };
+ }
+ }
+ $collected_tags{internal_manual} = 1;
+ }
+
+ if ($tags_to_collect{public_header}) {
+ print STDERR "DEBUG[files]: collecting public headers\n"
+ if $debug;
+
+ foreach ( glob(catfile($config{sourcedir},
+ 'include', 'openssl', '*.h')) ) {
+ $files{$_} = { public_header => 1 };
+ }
+ }
+
+ my @result = @{$collected_results{$tags_as_key} // []};
+
+ if (!@result) {
+ # Produce a result based on caller tags
+ foreach my $type ( ( 'public_manual', 'internal_manual' ) ) {
+ next unless $tags{$type};
+
+ # If caller asked for specific sections, we care about sections.
+ # Otherwise, we give back all of them.
+ my @selected_sections =
+ grep { $tags{$_} } @sections;
+ @selected_sections = @sections unless @selected_sections;
+
+ foreach my $section ( ( @selected_sections ) ) {
+ push @result,
+ ( sort { basename($a) cmp basename($b) }
+ grep { $files{$_}->{$type} && $files{$_}->{$section} }
+ keys %files );
+ }
+ }
+ if ($tags{public_header}) {
+ push @result,
+ ( sort { basename($a) cmp basename($b) }
+ grep { $files{$_}->{public_header} }
+ keys %files );
+ }
+
+ if ($debug) {
+ print STDERR "DEBUG[files]: result:\n";
+ print STDERR "DEBUG[files]: $_\n" foreach @result;
+ }
+ $collected_results{$tags_as_key} = [ @result ];
+ }
+
+ return @result;
+}
+
+# Print error message, set $status.
+sub err {
+ print join(" ", @_), "\n";
+ $status = 1
+}
+
+# Cross-check functions in the NAME and SYNOPSIS section.
+sub name_synopsis {
+ my $id = shift;
+ my $filename = shift;
+ my $contents = shift;
+
+ # Get NAME section and all words in it.
+ return unless $contents =~ /=head1 NAME(.*)=head1 SYNOPSIS/ms;
+ my $tmp = $1;
+ $tmp =~ tr/\n/ /;
+ err($id, "Trailing comma before - in NAME")
+ if $tmp =~ /, *-/;
+ $tmp =~ s/ -.*//g;
+ err($id, "POD markup among the names in NAME")
+ if $tmp =~ /[<>]/;
+ $tmp =~ s/ */ /g;
+ err($id, "Missing comma in NAME")
+ if $tmp =~ /[^,] /;
+
+ my $dirname = dirname($filename);
+ my $section = basename($dirname);
+ my $simplename = basename($filename, ".pod");
+ my $foundfilename = 0;
+ my %foundfilenames = ();
+ my %names;
+ foreach my $n ( split ',', $tmp ) {
+ $n =~ s/^\s+//;
+ $n =~ s/\s+$//;
+ err($id, "The name '$n' contains white-space")
+ if $n =~ /\s/;
+ $names{$n} = 1;
+ $foundfilename++ if $n eq $simplename;
+ $foundfilenames{$n} = 1
+ if ( ( grep { basename($_) eq "$n.pod" }
+ files(TAGS => [ 'manual', $section ]) )
+ && $n ne $simplename );
+ }
+ err($id, "The following exist as other .pod files:",
+ sort keys %foundfilenames)
+ if %foundfilenames;
+ err($id, "$simplename (filename) missing from NAME section")
+ unless $foundfilename;
+
+ # Find all functions in SYNOPSIS
+ return unless $contents =~ /=head1 SYNOPSIS(.*)=head1 DESCRIPTION/ms;
+ my $syn = $1;
+ my $ignore_until = undef; # If defined, this is a regexp
+ # Remove all non-code lines
+ $syn =~ s/^(?:\s*?|\S.*?)$//msg;
+ # Remove all comments
+ $syn =~ s/\/\*.*?\*\///msg;
+ while ( $syn ) {
+ # "env" lines end at a newline.
+ # Preprocessor lines start with a # and end at a newline.
+ # Other lines end with a semicolon, and may cover more than
+ # one physical line.
+ if ( $syn !~ /^ \s*(env .*?|#.*?|.*?;)\s*$/ms ) {
+ err($id, "Can't parse rest of synopsis:\n$syn\n(declarations not ending with a semicolon (;)?)");
+ last;
+ }
+ my $line = $1;
+ $syn = $';
+
+ print STDERR "DEBUG[name_synopsis] \$line = '$line'\n" if $debug;
+
+ # Special code to skip over documented structures
+ if ( defined $ignore_until) {
+ next if $line !~ /$ignore_until/;
+ $ignore_until = undef;
+ next;
+ }
+ if ( $line =~ /^\s*(?:typedef\s+)?struct(?:\s+\S+)\s*\{/ ) {
+ $ignore_until = qr/\}.*?;/;
+ next;
+ }
+
+ my $sym;
+ my $is_prototype = 1;
+ $line =~ s/LHASH_OF\([^)]+\)/int/g;
+ $line =~ s/STACK_OF\([^)]+\)/int/g;
+ $line =~ s/SPARSE_ARRAY_OF\([^)]+\)/int/g;
+ $line =~ s/__declspec\([^)]+\)//;
+
+ ## We don't prohibit that space, to allow typedefs looking like
+ ## this:
+ ##
+ ## typedef int (fantastically_long_name_breaks_80char_limit)
+ ## (fantastically_long_name_breaks_80char_limit *something);
+ ##
+ #if ( $line =~ /typedef.*\(\*?\S+\)\s+\(/ ) {
+ # # a callback function with whitespace before the argument list:
+ # # typedef ... (*NAME) (...
+ # # typedef ... (NAME) (...
+ # err($id, "Function typedef has space before arg list: $line");
+ #}
+
+ if ( $line =~ /env (\S*)=/ ) {
+ # environment variable env NAME=...
+ $sym = $1;
+ } elsif ( $line =~ /typedef.*\(\*?($C_symbol)\)\s*\(/ ) {
+ # a callback function pointer: typedef ... (*NAME)(...
+ # a callback function signature: typedef ... (NAME)(...
+ $sym = $1;
+ } elsif ( $line =~ /typedef.*($C_symbol)\s*\(/ ) {
+ # a callback function signature: typedef ... NAME(...
+ $sym = $1;
+ } elsif ( $line =~ /typedef.*($C_symbol);/ ) {
+ # a simple typedef: typedef ... NAME;
+ $is_prototype = 0;
+ $sym = $1;
+ } elsif ( $line =~ /enum ($C_symbol) \{/ ) {
+ # an enumeration: enum ... {
+ $sym = $1;
+ } elsif ( $line =~ /#\s*(?:define|undef) ($C_symbol)/ ) {
+ $is_prototype = 0;
+ $sym = $1;
+ } elsif ( $line =~ /^[^\(]*?\(\*($C_symbol)\s*\(/ ) {
+ # a function returning a function pointer: TYPE (*NAME(args))(args)
+ $sym = $1;
+ } elsif ( $line =~ /^[^\(]*?($C_symbol)\s*\(/ ) {
+ # a simple function declaration
+ $sym = $1;
+ }
+ else {
+ next;
+ }
+
+ print STDERR "DEBUG[name_synopsis] \$sym = '$sym'\n" if $debug;
+
+ err($id, "$sym missing from NAME section")
+ unless defined $names{$sym};
+ $names{$sym} = 2;
+
+ # Do some sanity checks on the prototype.
+ err($id, "Prototype missing spaces around commas: $line")
+ if $is_prototype && $line =~ /[a-z0-9],[^\s]/;
+ }
+
+ foreach my $n ( keys %names ) {
+ next if $names{$n} == 2;
+ err($id, "$n missing from SYNOPSIS")
+ }
+}
+
+# Check if SECTION ($3) is located before BEFORE ($4)
+sub check_section_location {
+ my $id = shift;
+ my $contents = shift;
+ my $section = shift;
+ my $before = shift;
+
+ return unless $contents =~ /=head1 $section/
+ and $contents =~ /=head1 $before/;
+ err($id, "$section should appear before $before section")
+ if $contents =~ /=head1 $before.*=head1 $section/ms;
+}
+
+# Check if a =head1 is duplicated, or a =headX is duplicated within a
+# =head1. Treats =head2 =head3 as equivalent -- it doesn't reset the head3
+# sets if it finds a =head2 -- but that is good enough for now. Also check
+# for proper capitalization, trailing periods, etc.
+sub check_head_style {
+ my $id = shift;
+ my $contents = shift;
+ my %head1;
+ my %subheads;
+
+ foreach my $line ( split /\n+/, $contents ) {
+ next unless $line =~ /^=head/;
+ if ( $line =~ /head1/ ) {
+ err($id, "Duplicate section $line")
+ if defined $head1{$line};
+ $head1{$line} = 1;
+ %subheads = ();
+ } else {
+ err($id, "Duplicate subsection $line")
+ if defined $subheads{$line};
+ $subheads{$line} = 1;
+ }
+ err($id, "Period in =head")
+ if $line =~ /\.[^\w]/ or $line =~ /\.$/;
+ err($id, "not all uppercase in =head1")
+ if $line =~ /head1.*[a-z]/;
+ err($id, "All uppercase in subhead")
+ if $line =~ /head[234][ A-Z0-9]+$/;
+ }
+}
+
+# Because we have options and symbols with extra markup, we need
+# to take that into account, so we need a regexp that extracts
+# markup chunks, including recursive markup.
+# please read up on /(?R)/ in perlre(1)
+# (note: order is important, (?R) needs to come before .)
+# (note: non-greedy is important, or something like 'B<foo> and B<bar>'
+# will be captured as one item)
+my $markup_re =
+ qr/( # Capture group
+ [BIL]< # The start of what we recurse on
+ (?:(?-1)|.)*? # recurse the whole regexp (referring to
+ # the last opened capture group, i.e. the
+ # start of this regexp), or pick next
+ # character. Do NOT be greedy!
+ > # The end of what we recurse on
+ )/x; # (the x allows this sort of split up regexp)
+
+# Options must start with a dash, followed by a letter, possibly
+# followed by letters, digits, dashes and underscores, and the last
+# character must be a letter or a digit.
+# We do also accept the single -? or -n, where n is a digit
+my $option_re =
+ qr/(?:
+ \? # Single question mark
+ |
+ \d # Single digit
+ |
+ - # Single dash (--)
+ |
+ [[:alpha:]](?:[-_[:alnum:]]*?[[:alnum:]])?
+ )/x;
+
+# Helper function to check if a given $thing is properly marked up
+# option. It returns one of these values:
+# undef if it's not an option
+# "" if it's a malformed option
+# $unwrapped the option with the outermost B<> wrapping removed.
+sub normalise_option {
+ my $id = shift;
+ my $filename = shift;
+ my $thing = shift;
+
+ my $unwrapped = $thing;
+ my $unmarked = $thing;
+
+ # $unwrapped is the option with the outer B<> markup removed
+ $unwrapped =~ s/^B<//;
+ $unwrapped =~ s/>$//;
+ # $unmarked is the option with *all* markup removed
+ $unmarked =~ s/[BIL]<|>//msg;
+
+
+ # If we found an option, check it, collect it
+ if ( $unwrapped =~ /^\s*-/ ) {
+ return $unwrapped # return option with outer B<> removed
+ if $unmarked =~ /^-${option_re}$/;
+ return ""; # Malformed option
+ }
+ return undef; # Something else
+}
+
+# Checks of command option (man1) formatting. The man1 checks are
+# restricted to the SYNOPSIS and OPTIONS sections, the rest is too
+# free form, we simply cannot be too strict there.
+
+sub option_check {
+ my $id = shift;
+ my $filename = shift;
+ my $contents = shift;
+
+ my $synopsis = ($contents =~ /=head1\s+SYNOPSIS(.*?)=head1/s, $1);
+
+ # Some pages have more than one OPTIONS section, let's make sure
+ # to get them all
+ my $options = '';
+ while ( $contents =~ /=head1\s+[A-Z ]*?OPTIONS$(.*?)(?==head1)/msg ) {
+ $options .= $1;
+ }
+
+ # Look for options with no or incorrect markup
+ while ( $synopsis =~
+ /(?<![-<[:alnum:]])-(?:$markup_re|.)*(?![->[:alnum:]])/msg ) {
+ err($id, "Malformed option [1] in SYNOPSIS: $&");
+ }
+
+ my @synopsis;
+ while ( $synopsis =~ /$markup_re/msg ) {
+ my $found = $&;
+ push @synopsis, $found if $found =~ /^B<-/;
+ print STDERR "$id:DEBUG[option_check] SYNOPSIS: found $found\n"
+ if $debug;
+ my $option_uw = normalise_option($id, $filename, $found);
+ err($id, "Malformed option [2] in SYNOPSIS: $found")
+ if defined $option_uw && $option_uw eq '';
+ }
+
+ # In OPTIONS, we look for =item paragraphs.
+ # (?=^\s*$) detects an empty line.
+ my @options;
+ while ( $options =~ /=item\s+(.*?)(?=^\s*$)/msg ) {
+ my $item = $&;
+
+ while ( $item =~ /(\[\s*)?($markup_re)/msg ) {
+ my $found = $2;
+ print STDERR "$id:DEBUG[option_check] OPTIONS: found $&\n"
+ if $debug;
+ err($id, "Unexpected bracket in OPTIONS =item: $item")
+ if ($1 // '') ne '' && $found =~ /^B<\s*-/;
+
+ my $option_uw = normalise_option($id, $filename, $found);
+ err($id, "Malformed option in OPTIONS: $found")
+ if defined $option_uw && $option_uw eq '';
+ if ($found =~ /^B<-/) {
+ push @options, $found;
+ err($id, "OPTIONS entry $found missing from SYNOPSIS")
+ unless (grep /^\Q$found\E$/, @synopsis)
+ || $id =~ /(openssl|-options)\.pod:1:$/;
+ }
+ }
+ }
+ foreach (@synopsis) {
+ my $option = $_;
+ err($id, "SYNOPSIS entry $option missing from OPTIONS")
+ unless (grep /^\Q$option\E$/, @options);
+ }
+}
+
+# Normal symbol form
+my $symbol_re = qr/[[:alpha:]_][_[:alnum:]]*?/;
+
+# Checks of function name (man3) formatting. The man3 checks are
+# easier than the man1 checks, we only check the names followed by (),
+# and only the names that have POD markup.
+sub functionname_check {
+ my $id = shift;
+ my $filename = shift;
+ my $contents = shift;
+
+ while ( $contents =~ /($markup_re)\(\)/msg ) {
+ print STDERR "$id:DEBUG[functionname_check] SYNOPSIS: found $&\n"
+ if $debug;
+
+ my $symbol = $1;
+ my $unmarked = $symbol;
+ $unmarked =~ s/[BIL]<|>//msg;
+
+ err($id, "Malformed symbol: $symbol")
+ unless $symbol =~ /^B<.*?>$/ && $unmarked =~ /^${symbol_re}$/
+ }
+
+ # We can't do the kind of collecting coolness that option_check()
+ # does, because there are too many things that can't be found in
+ # name repositories like the NAME sections, such as symbol names
+ # with a variable part (typically marked up as B<foo_I<TYPE>_bar>
+}
+
+# This is from http://man7.org/linux/man-pages/man7/man-pages.7.html
+my %preferred_words = (
+ '16bit' => '16-bit',
+ 'a.k.a.' => 'aka',
+ 'bitmask' => 'bit mask',
+ 'builtin' => 'built-in',
+ #'epoch' => 'Epoch', # handled specially, below
+ 'fall-back' => 'fallback',
+ 'file name' => 'filename',
+ 'file system' => 'filesystem',
+ 'host name' => 'hostname',
+ 'i-node' => 'inode',
+ 'lower case' => 'lowercase',
+ 'lower-case' => 'lowercase',
+ 'manpage' => 'man page',
+ 'non-blocking' => 'nonblocking',
+ 'non-default' => 'nondefault',
+ 'non-empty' => 'nonempty',
+ 'non-negative' => 'nonnegative',
+ 'non-zero' => 'nonzero',
+ 'path name' => 'pathname',
+ 'pre-allocated' => 'preallocated',
+ 'pseudo-terminal' => 'pseudoterminal',
+ 'real time' => 'real-time',
+ 'realtime' => 'real-time',
+ 'reserved port' => 'privileged port',
+ 'runtime' => 'run time',
+ 'saved group ID'=> 'saved set-group-ID',
+ 'saved set-GID' => 'saved set-group-ID',
+ 'saved set-UID' => 'saved set-user-ID',
+ 'saved user ID' => 'saved set-user-ID',
+ 'set-GID' => 'set-group-ID',
+ 'set-UID' => 'set-user-ID',
+ 'setgid' => 'set-group-ID',
+ 'setuid' => 'set-user-ID',
+ 'sub-system' => 'subsystem',
+ 'super block' => 'superblock',
+ 'super-block' => 'superblock',
+ 'super user' => 'superuser',
+ 'super-user' => 'superuser',
+ 'system port' => 'privileged port',
+ 'time stamp' => 'timestamp',
+ 'time zone' => 'timezone',
+ 'upper case' => 'uppercase',
+ 'upper-case' => 'uppercase',
+ 'useable' => 'usable',
+ 'user name' => 'username',
+ 'userspace' => 'user space',
+ 'zeroes' => 'zeros'
+);
+
+# Search manpage for words that have a different preferred use.
+sub wording {
+ my $id = shift;
+ my $contents = shift;
+
+ foreach my $k ( keys %preferred_words ) {
+ # Sigh, trademark
+ next if $k eq 'file system'
+ and $contents =~ /Microsoft Encrypted File System/;
+ err($id, "Found '$k' should use '$preferred_words{$k}'")
+ if $contents =~ /\b\Q$k\E\b/i;
+ }
+ err($id, "Found 'epoch' should use 'Epoch'")
+ if $contents =~ /\bepoch\b/;
+ if ( $id =~ m@man1/@ ) {
+ err($id, "found 'tool' in NAME, should use 'command'")
+ if $contents =~ /=head1 NAME.*\btool\b.*=head1 SYNOPSIS/s;
+ err($id, "found 'utility' in NAME, should use 'command'")
+ if $contents =~ /NAME.*\butility\b.*=head1 SYNOPSIS/s;
+
+ }
+}
+
+# Perform all sorts of nit/error checks on a manpage
+sub check {
+ my %podinfo = @_;
+ my $filename = $podinfo{filename};
+ my $dirname = basename(dirname($filename));
+ my $contents = $podinfo{contents};
+
+ # Find what section this page is in; presume 3.
+ my $mansect = 3;
+ $mansect = $1 if $filename =~ /man([1-9])/;
+
+ my $id = "${filename}:1:";
+ check_head_style($id, $contents);
+
+ # Check ordering of some sections in man3
+ if ( $mansect == 3 ) {
+ check_section_location($id, $contents, "RETURN VALUES", "EXAMPLES");
+ check_section_location($id, $contents, "SEE ALSO", "HISTORY");
+ check_section_location($id, $contents, "EXAMPLES", "SEE ALSO");
+ }
+
+ # Make sure every link has a man section number.
+ while ( $contents =~ /$markup_re/msg ) {
+ my $target = $1;
+ next unless $target =~ /^L<(.*)>$/; # Skip if not L<...>
+ $target = $1; # Peal away L< and >
+ $target =~ s/\/[^\/]*$//; # Peal away possible anchor
+ $target =~ s/.*\|//g; # Peal away possible link text
+ next if $target eq ''; # Skip if links within page, or
+ next if $target =~ /::/; # links to a Perl module, or
+ next if $target =~ /^https?:/; # is a URL link, or
+ next if $target =~ /\([1357]\)$/; # it has a section
+ err($id, "Missing man section number (likely, $mansect) in L<$target>")
+ }
+ # Check for proper links to commands.
+ while ( $contents =~ /L<([^>]*)\(1\)(?:\/.*)?>/g ) {
+ my $target = $1;
+ next if $target =~ /openssl-?/;
+ next if ( grep { basename($_) eq "$target.pod" }
+ files(TAGS => [ 'manual', 'man1' ]) );
+ next if $target =~ /ps|apropos|sha1sum|procmail|perl/;
+ err($id, "Bad command link L<$target(1)>") if grep /man1/, @sections;
+ }
+ # Check for proper in-man-3 API links.
+ while ( $contents =~ /L<([^>]*)\(3\)(?:\/.*)?>/g ) {
+ my $target = $1;
+ err($id, "Bad L<$target>")
+ unless $target =~ /^[_[:alpha:]][_[:alnum:]]*$/
+ }
+
+ unless ( $contents =~ /^=for openssl generic/ms ) {
+ if ( $mansect == 3 ) {
+ name_synopsis($id, $filename, $contents);
+ functionname_check($id, $filename, $contents);
+ } elsif ( $mansect == 1 ) {
+ option_check($id, $filename, $contents)
+ }
+ }
+
+ wording($id, $contents);
+
+ err($id, "Doesn't start with =pod")
+ if $contents !~ /^=pod/;
+ err($id, "Doesn't end with =cut")
+ if $contents !~ /=cut\n$/;
+ err($id, "More than one cut line.")
+ if $contents =~ /=cut.*=cut/ms;
+ err($id, "EXAMPLE not EXAMPLES section.")
+ if $contents =~ /=head1 EXAMPLE[^S]/;
+ err($id, "WARNING not WARNINGS section.")
+ if $contents =~ /=head1 WARNING[^S]/;
+ err($id, "Missing copyright")
+ if $contents !~ /Copyright .* The OpenSSL Project Authors/;
+ err($id, "Copyright not last")
+ if $contents =~ /head1 COPYRIGHT.*=head/ms;
+ err($id, "head2 in All uppercase")
+ if $contents =~ /head2\s+[A-Z ]+\n/;
+ err($id, "Extra space after head")
+ if $contents =~ /=head\d\s\s+/;
+ err($id, "Period in NAME section")
+ if $contents =~ /=head1 NAME.*\.\n.*=head1 SYNOPSIS/ms;
+ err($id, "Duplicate $1 in L<>")
+ if $contents =~ /L<([^>]*)\|([^>]*)>/ && $1 eq $2;
+ err($id, "Bad =over $1")
+ if $contents =~ /=over([^ ][^24])/;
+ err($id, "Possible version style issue")
+ if $contents =~ /OpenSSL version [019]/;
+
+ if ( $contents !~ /=for openssl multiple includes/ ) {
+ # Look for multiple consecutive openssl #include lines
+ # (non-consecutive lines are okay; see man3/MD5.pod).
+ if ( $contents =~ /=head1 SYNOPSIS(.*)=head1 DESCRIPTION/ms ) {
+ my $count = 0;
+ foreach my $line ( split /\n+/, $1 ) {
+ if ( $line =~ m@include <openssl/@ ) {
+ err($id, "Has multiple includes")
+ if ++$count == 2;
+ } else {
+ $count = 0;
+ }
+ }
+ }
+ }
+
+ open my $OUT, '>', $temp
+ or die "Can't open $temp, $!";
+ err($id, "POD errors")
+ if podchecker($filename, $OUT) != 0;
+ close $OUT;
+ open $OUT, '<', $temp
+ or die "Can't read $temp, $!";
+ while ( <$OUT> ) {
+ next if /\(section\) in.*deprecated/;
+ print;
+ }
+ close $OUT;
+ unlink $temp || warn "Can't remove $temp, $!";
+
+ # Find what section this page is in; presume 3.
+ my $section = 3;
+ $section = $1 if $dirname =~ /man([1-9])/;
+
+ foreach ( (@{$mandatory_sections{'*'}}, @{$mandatory_sections{$section}}) ) {
+ err($id, "Missing $_ head1 section")
+ if $contents !~ /^=head1\s+${_}\s*$/m;
+ }
+}
+
+# Information database ###############################################
+
+# Map of links in each POD file; filename => [ "foo(1)", "bar(3)", ... ]
+my %link_map = ();
+# Map of names in each POD file or from "missing" files; possible values are:
+# If found in a POD files, "name(s)" => filename
+# If found in a "missing" file or external, "name(s)" => ''
+my %name_map = ();
+
+# State of man-page names.
+# %state is affected by loading util/*.num and util/*.syms
+# Values may be one of:
+# 'crypto' : belongs in libcrypto (loaded from libcrypto.num)
+# 'ssl' : belongs in libssl (loaded from libssl.num)
+# 'other' : belongs in libcrypto or libssl (loaded from other.syms)
+# 'internal' : Internal
+# 'public' : Public (generic name or external documentation)
+# Any of these values except 'public' may be prefixed with 'missing_'
+# to indicate that they are known to be missing.
+my %state;
+# %missing is affected by loading util/missing*.txt. Values may be one of:
+# 'crypto' : belongs in libcrypto (loaded from libcrypto.num)
+# 'ssl' : belongs in libssl (loaded from libssl.num)
+# 'other' : belongs in libcrypto or libssl (loaded from other.syms)
+# 'internal' : Internal
+my %missing;
+
+# Parse libcrypto.num, etc., and return sorted list of what's there.
+sub loadnum ($;$) {
+ my $file = shift;
+ my $type = shift;
+ my @symbols;
+
+ open my $IN, '<', catfile($config{sourcedir}, $file)
+ or die "Can't open $file, $!, stopped";
+
+ while ( <$IN> ) {
+ next if /^#/;
+ next if /\bNOEXIST\b/;
+ my @fields = split();
+ die "Malformed line $. in $file: $_"
+ if scalar @fields != 2 && scalar @fields != 4;
+ $state{$fields[0].'(3)'} = $type // 'internal';
+ }
+ close $IN;
+}
+
+# Load file of symbol names that we know aren't documented.
+sub loadmissing($;$)
+{
+ my $missingfile = shift;
+ my $type = shift;
+
+ open FH, catfile($config{sourcedir}, $missingfile)
+ or die "Can't open $missingfile";
+ while ( <FH> ) {
+ chomp;
+ next if /^#/;
+ $missing{$_} = $type // 'internal';
+ }
+ close FH;
+}
+
+# Check that we have consistent public / internal documentation and declaration
+sub checkstate () {
+ # Collect all known names, no matter where they come from
+ my %names = map { $_ => 1 } (keys %name_map, keys %state, keys %missing);
+
+ # Check section 3, i.e. functions and macros
+ foreach ( grep { $_ =~ /\(3\)$/ } sort keys %names ) {
+ next if ( $name_map{$_} // '') eq '' || $_ =~ /$ignored/;
+
+ # If a man-page isn't recorded public or if it's recorded missing
+ # and internal, it's declared to be internal.
+ my $declared_internal =
+ ($state{$_} // 'internal') eq 'internal'
+ || ($missing{$_} // '') eq 'internal';
+ # If a man-page isn't recorded internal or if it's recorded missing
+ # and not internal, it's declared to be public
+ my $declared_public =
+ ($state{$_} // 'internal') ne 'internal'
+ || ($missing{$_} // 'internal') ne 'internal';
+
+ err("$_ is supposedly public but is documented as internal")
+ if ( $declared_public && $name_map{$_} =~ /\/internal\// );
+ err("$_ is supposedly internal (maybe missing from other.syms) but is documented as public")
+ if ( $declared_internal && $name_map{$_} !~ /\/internal\// );
+ }
+}
+
+# Check for undocumented macros; ignore those in the "missing" file
+# and do simple check for #define in our header files.
+sub checkmacros {
+ my $count = 0;
+ my %seen;
+
+ foreach my $f ( files(TAGS => 'public_header') ) {
+ # Skip some internals we don't want to document yet.
+ my $b = basename($f);
+ next if $b eq 'asn1.h';
+ next if $b eq 'asn1t.h';
+ next if $b eq 'err.h';
+ open(IN, $f)
+ or die "Can't open $f, $!";
+ while ( <IN> ) {
+ next unless /^#\s*define\s*(\S+)\(/;
+ my $macro = "$1(3)"; # We know they're all in section 3
+ next if defined $name_map{$macro}
+ || defined $missing{$macro}
+ || defined $seen{$macro}
+ || $macro =~ /$ignored/;
+
+ err("$f:", "macro $macro undocumented")
+ if $opt_d || $opt_e;
+ $count++;
+ $seen{$macro} = 1;
+ }
+ close(IN);
+ }
+ err("# $count macros undocumented (count is approximate)")
+ if $count > 0;
+}
+
+# Find out what is undocumented (filtering out the known missing ones)
+# and display them.
+sub printem ($) {
+ my $type = shift;
+ my $count = 0;
+
+ foreach my $func ( grep { $state{$_} eq $type } sort keys %state ) {
+ next if defined $name_map{$func}
+ || defined $missing{$func};
+
+ err("$type:", "function $func undocumented")
+ if $opt_d || $opt_e;
+ $count++;
+ }
+ err("# $count lib$type names are not documented")
+ if $count > 0;
+}
+
+# Collect all the names in a manpage.
+sub collectnames {
+ my %podinfo = @_;
+ my $filename = $podinfo{filename};
+ $filename =~ m|man(\d)/|;
+ my $section = $1;
+ my $simplename = basename($filename, ".pod");
+ my $id = "${filename}:1:";
+ my $is_generic = $podinfo{contents} =~ /^=for openssl generic/ms;
+
+ unless ( grep { $simplename eq $_ } @{$podinfo{names}} ) {
+ err($id, "$simplename not in NAME section");
+ push @{$podinfo{names}}, $simplename;
+ }
+ foreach my $name ( @{$podinfo{names}} ) {
+ next if $name eq "";
+ err($id, "'$name' contains whitespace")
+ if $name =~ /\s/;
+ my $name_sec = "$name($section)";
+ if ( !defined $name_map{$name_sec} ) {
+ $name_map{$name_sec} = $filename;
+ $state{$name_sec} //=
+ ( $filename =~ /\/internal\// ? 'internal' : 'public' )
+ if $is_generic;
+ } elsif ( $filename eq $name_map{$name_sec} ) {
+ err($id, "$name_sec duplicated in NAME section of",
+ $name_map{$name_sec});
+ } elsif ( $name_map{$name_sec} ne '' ) {
+ err($id, "$name_sec also in NAME section of",
+ $name_map{$name_sec});
+ }
+ }
+
+ if ( $podinfo{contents} =~ /=for openssl foreign manual (.*)\n/ ) {
+ foreach my $f ( split / /, $1 ) {
+ $name_map{$f} = ''; # It still exists!
+ $state{$f} = 'public'; # We assume!
+ }
+ }
+
+ my @links = ();
+ # Don't use this regexp directly on $podinfo{contents}, as it causes
+ # a regexp recursion, which fails on really big PODs. Instead, use
+ # $markup_re to pick up general markup, and use this regexp to check
+ # that the markup that was found is indeed a link.
+ my $linkre = qr/L<
+ # if the link is of the form L<something|name(s)>,
+ # then remove 'something'. Note that 'something'
+ # may contain POD codes as well...
+ (?:(?:[^\|]|<[^>]*>)*\|)?
+ # we're only interested in references that have
+ # a one digit section number
+ ([^\/>\(]+\(\d\))
+ /x;
+ while ( $podinfo{contents} =~ /$markup_re/msg ) {
+ my $x = $1;
+
+ if ($x =~ $linkre) {
+ push @links, $1;
+ }
+ }
+ $link_map{$filename} = [ @links ];
+}
+
+# Look for L<> ("link") references that point to files that do not exist.
+sub checklinks {
+ foreach my $filename ( sort keys %link_map ) {
+ foreach my $link ( @{$link_map{$filename}} ) {
+ err("${filename}:1:", "reference to non-existing $link")
+ unless defined $name_map{$link} || defined $missing{$link};
+ err("${filename}:1:", "reference of internal $link in public documentation $filename")
+ if ( ( ($state{$link} // '') eq 'internal'
+ || ($missing{$link} // '') eq 'internal' )
+ && $filename !~ /\/internal\// );
+ }
+ }
+}
+
+# Cipher/digests to skip if they show up as "not implemented"
+# because they are, via the "-*" construct.
+my %skips = (
+ 'aes128' => 1,
+ 'aes192' => 1,
+ 'aes256' => 1,
+ 'aria128' => 1,
+ 'aria192' => 1,
+ 'aria256' => 1,
+ 'camellia128' => 1,
+ 'camellia192' => 1,
+ 'camellia256' => 1,
+ 'des' => 1,
+ 'des3' => 1,
+ 'idea' => 1,
+ 'cipher' => 1,
+ 'digest' => 1,
+);
+
+my %genopts; # generic options parsed from apps/include/opt.h
+
+# Check the flags of a command and see if everything is in the manpage
+sub checkflags {
+ my $cmd = shift;
+ my $doc = shift;
+ my @cmdopts;
+ my %docopts;
+
+ # Get the list of options in the command source file.
+ my $active = 0;
+ my $expect_helpstr = "";
+ open CFH, "apps/$cmd.c"
+ or die "Can't open apps/$cmd.c to list options for $cmd, $!";
+ while ( <CFH> ) {
+ chop;
+ if ($active) {
+ last if m/^\s*};/;
+ if ($expect_helpstr ne "") {
+ next if m/^\s*#\s*if/;
+ err("$cmd does not implement help for -$expect_helpstr") unless m/^\s*"/;
+ $expect_helpstr = "";
+ }
+ if (m/\{\s*"([^"]+)"\s*,\s*OPT_[A-Z0-9_]+\s*,\s*('[-\/:<>cEfFlMnNpsuU]'|0)(.*)$/
+ && !($cmd eq "s_client" && $1 eq "wdebug")) {
+ push @cmdopts, $1;
+ $expect_helpstr = $1;
+ $expect_helpstr = "" if $3 =~ m/^\s*,\s*"/;
+ } elsif (m/[\s,](OPT_[A-Z]+_OPTIONS?)\s*(,|$)/) {
+ push @cmdopts, @{ $genopts{$1} };
+ }
+ } elsif (m/^const\s+OPTIONS\s*/) {
+ $active = 1;
+ }
+ }
+ close CFH;
+
+ # Get the list of flags from the synopsis
+ open CFH, "<$doc"
+ or die "Can't open $doc, $!";
+ while ( <CFH> ) {
+ chop;
+ last if /DESCRIPTION/;
+ my $opt;
+ if ( /\[B<-([^ >]+)/ ) {
+ $opt = $1;
+ } elsif ( /^B<-([^ >]+)/ ) {
+ $opt = $1;
+ } else {
+ next;
+ }
+ $opt = $1 if $opt =~ /I<(.*)/;
+ $docopts{$1} = 1;
+ }
+ close CFH;
+
+ # See what's in the command not the manpage.
+ my @undocced = sort grep { !defined $docopts{$_} } @cmdopts;
+ foreach ( @undocced ) {
+ err("$doc: undocumented $cmd option -$_");
+ }
+
+ # See what's in the command not the manpage.
+ my @unimpl = sort grep { my $e = $_; !(grep /^\Q$e\E$/, @cmdopts) } keys %docopts;
+ foreach ( @unimpl ) {
+ next if $_ eq "-"; # Skip the -- end-of-flags marker
+ next if defined $skips{$_};
+ err("$doc: $cmd does not implement -$_");
+ }
+}
+
+##
+## MAIN()
+## Do the work requested by the various getopt flags.
+## The flags are parsed in alphabetical order, just because we have
+## to have *some way* of listing them.
+##
+
+if ( $opt_c ) {
+ my @commands = ();
+
+ # Get the lists of generic options.
+ my $active = "";
+ open OFH, catdir($config{sourcedir}, "apps/include/opt.h")
+ or die "Can't open apps/include/opt.h to list generic options, $!";
+ while ( <OFH> ) {
+ chop;
+ push @{ $genopts{$active} }, $1 if $active ne "" && m/^\s+\{\s*"([^"]+)"\s*,\s*OPT_/;
+ $active = $1 if m/^\s*#\s*define\s+(OPT_[A-Z]+_OPTIONS?)\s*\\\s*$/;
+ $active = "" if m/^\s*$/;
+ }
+ close OFH;
+
+ # Get list of commands.
+ opendir(DIR, "apps");
+ @commands = grep(/\.c$/, readdir(DIR));
+ closedir(DIR);
+
+ # See if each has a manpage.
+ foreach my $cmd ( @commands ) {
+ $cmd =~ s/\.c$//;
+ next if $cmd eq 'progs' || $cmd eq 'vms_decc_init';
+ my @doc = ( grep { basename($_) eq "openssl-$cmd.pod"
+ # For "tsget" and "CA.pl" pod pages
+ || basename($_) eq "$cmd.pod" }
+ files(TAGS => [ 'manual', 'man1' ]) );
+ my $num = scalar @doc;
+ if ($num > 1) {
+ err("$num manuals for 'openssl $cmd': ".join(", ", @doc));
+ } elsif ($num < 1) {
+ err("no manual for 'openssl $cmd'");
+ } else {
+ checkflags($cmd, @doc);
+ }
+ }
+}
+
+# Populate %state
+loadnum('util/libcrypto.num', 'crypto');
+loadnum('util/libssl.num', 'ssl');
+loadnum('util/other.syms', 'other');
+loadnum('util/other-internal.syms');
+if ( $opt_o ) {
+ loadmissing('util/missingmacro111.txt', 'crypto');
+ loadmissing('util/missingcrypto111.txt', 'crypto');
+ loadmissing('util/missingssl111.txt', 'ssl');
+} elsif ( !$opt_u ) {
+ loadmissing('util/missingmacro.txt', 'crypto');
+ loadmissing('util/missingcrypto.txt', 'crypto');
+ loadmissing('util/missingssl.txt', 'ssl');
+ loadmissing('util/missingcrypto-internal.txt');
+ loadmissing('util/missingssl-internal.txt');
+}
+
+if ( $opt_n || $opt_l || $opt_u || $opt_v ) {
+ my @files_to_read = ( $opt_n && @ARGV ) ? @ARGV : files(TAGS => 'manual');
+
+ foreach (@files_to_read) {
+ my %podinfo = extract_pod_info($_, { debug => $debug });
+
+ collectnames(%podinfo)
+ if ( $opt_l || $opt_u || $opt_v );
+
+ check(%podinfo)
+ if ( $opt_n );
+ }
+}
+
+if ( $opt_l ) {
+ checklinks();
+}
+
+if ( $opt_n ) {
+ # If not given args, check that all man1 commands are named properly.
+ if ( scalar @ARGV == 0 && grep /man1/, @sections ) {
+ foreach ( files(TAGS => [ 'public_manual', 'man1' ]) ) {
+ next if /openssl\.pod/
+ || /CA\.pl/ || /tsget\.pod/; # these commands are special cases
+ err("$_ doesn't start with openssl-") unless /openssl-/;
+ }
+ }
+}
+
+checkstate();
+
+if ( $opt_u || $opt_v) {
+ printem('crypto');
+ printem('ssl');
+ checkmacros();
+}
+
+exit $status;
diff --git a/util/find-unused-errs b/util/find-unused-errs
new file mode 100755
index 000000000000..467ef253b519
--- /dev/null
+++ b/util/find-unused-errs
@@ -0,0 +1,54 @@
+#! /bin/bash
+# Copyright 2016 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
+
+# Find unused error function-names and reason-codes, and edit them
+# out of the source. Doesn't handle line-wrapping, might have to do
+# some manual cleanups to fix compile errors.
+
+export X1=/tmp/f.1.$$
+export X2=/tmp/f.2.$$
+
+case "$1" in
+ -f)
+ PAT='_F_'
+ echo Functions only
+ ;;
+ -[er])
+ PAT='_R_'
+ echo Reason codes only
+ ;;
+ "")
+ PAT='_[FR]_'
+ echo Function and reasons
+ ;;
+ *)
+ echo "Usage error; one of -[efr] required."
+ exit 1;
+ ;;
+esac
+
+cd include/openssl || exit 1
+grep "$PAT" * | grep -v ERR_FATAL_ERROR | awk '{print $3;}' | sort -u >$X1
+cd ../..
+
+for F in `cat $X1` ; do
+ git grep -l --full-name -F $F >$X2
+ NUM=`wc -l <$X2`
+ test $NUM -gt 2 && continue
+ if grep -q $F crypto/err/openssl.ec ; then
+ echo Possibly unused $F found in openssl.ec
+ continue
+ fi
+ echo $F
+ for FILE in `cat $X2` ; do
+ grep -v -w $F <$FILE >$FILE.new
+ mv $FILE.new $FILE
+ done
+done
+
+rm $X1 $X2
diff --git a/util/fips-checksums.sh b/util/fips-checksums.sh
new file mode 100755
index 000000000000..be0453e3228f
--- /dev/null
+++ b/util/fips-checksums.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+
+HERE=`dirname $0`
+
+for f in "$@"; do
+ # It's worth nothing that 'openssl sha256 -r' assumes that all input
+ # is binary. This isn't quite true, and we know better, so we convert
+ # the '*stdin' marker to the filename preceded by a space. See the
+ # sha1sum manual for a specification of the format.
+ case "$f" in
+ *.c | *.c.in | *.h | *.h.in | *.inc)
+ cat "$f" \
+ | $HERE/lang-compress.pl 'C' \
+ | unifdef -DFIPS_MODULE=1 \
+ | openssl sha256 -r \
+ | sed -e "s| \\*stdin| $f|"
+ ;;
+ *.pl )
+ cat "$f" \
+ | $HERE/lang-compress.pl 'perl' \
+ | openssl sha256 -r \
+ | sed -e "s| \\*stdin| $f|"
+ ;;
+ *.S )
+ cat "$f" \
+ | $HERE/lang-compress.pl 'S' \
+ | openssl sha256 -r \
+ | sed -e "s| \\*stdin| $f|"
+ ;;
+ esac
+done
diff --git a/util/fix-deprecation b/util/fix-deprecation
new file mode 100644
index 000000000000..59439eda6ddf
--- /dev/null
+++ b/util/fix-deprecation
@@ -0,0 +1,114 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+
+my $debug = $ENV{DEBUG};
+
+# This scripts finds DEPRECATEDIN declarations and converts them to
+# C declarations with the corresponding OSSL_DEPRECATEDIN attribute
+# macro. It also makes sure they are guarded them with a corresponding
+# '#ifndef OPENSSL_NO_DEPRECATED', and pays extra attention to only have
+# one such guard around a group of deprecations for the same version.
+
+my $parens_re =
+ qr/(
+ \( # The start of what we recurse on
+ (?:
+ (?> [^()]+ ) # Non-parens, without backtracking
+ |
+ (?-1) # Recurse to start of parens group
+ )*
+ \) # The end of what we recurse on
+ )/x;
+
+my $deprecated_kw_re = qr/(DEPRECATEDIN)_(\d+_\d+(?:_\d+)?)/;
+my $deprecated_re =
+ qr/
+ $deprecated_kw_re
+ \(
+ (
+ (?:
+ (?> [^()]+ )
+ |
+ $parens_re
+ )*
+ )
+ \)
+ /x;
+my $headertext;
+{
+ local $/;
+ $headertext = <STDIN>;
+}
+$headertext =~ s/\R/\n/g;
+
+my $cppspaces = '';
+my $last_cppspaces = '';
+my $currentguard = "";
+my $cnt = 0;
+while ( $headertext =~ m/(.*?) # $1
+ ( # $2
+ ^
+ (?|
+ (\#)(\s*)(if)?.*? # $3 ('#')
+ # $4 (spaces)
+ # $5 ('if'?)
+ |
+ \s*$deprecated_kw_re\(.*?
+ # $3 = 'DEPRECATEDIN'
+ # $4 (vers)
+ )
+ \n
+ )
+ /msx ) {
+ my $before = $1;
+ my $capture = $2;
+ my $after = $';
+
+ my $deprecation = '';
+ my $test = $capture.$';
+ my $version = undef;
+
+ print STDERR "DEBUG: captured:\n$capture"
+ if $debug;
+
+ if ($3 eq '#') {
+ # Treat preprocessor lines (count spaces)
+ $cppspaces = $4;
+ $cppspaces .= ' ' if (defined $5 && $5 eq 'if');
+ print STDERR "DEBUG: cpp spaces set to ", length($cppspaces), "\n"
+ if $debug;
+ $before .= $capture;
+ } elsif ($test =~ m/^\s*$deprecated_re(.*?\n)/) {
+ # Treat DEPRECATEDIN_...
+ $version = $2;
+ $deprecation = "OSSL_DEPRECATEDIN_$version $3;$5";
+ $after = $'; # Different from the previous!
+ print STDERR "DEBUG: changed to:\n$deprecation\n"
+ if $debug;
+ }
+
+ if ($currentguard ne ''
+ && (defined $version && $currentguard ne $version
+ || $before !~ /^\s*$/s)) {
+ print "#${last_cppspaces}endif\n";
+ $cppspaces = substr($cppspaces, 0, -1);
+ $currentguard = "";
+ }
+ print $before;
+ if ($deprecation) {
+ if ($currentguard eq '' && defined $version) {
+ $currentguard = $version;
+ print "#${cppspaces}ifndef OPENSSL_NO_DEPRECATED_$version\n";
+ $last_cppspaces = $cppspaces;
+ $cppspaces .= ' ';
+ print STDERR "DEBUG: cpp spaces set to ", length($cppspaces), "\n"
+ if $debug;
+ }
+ print $deprecation;
+ }
+ $headertext = $after;
+}
+print "#endif\n" if $currentguard ne '';
+print $headertext;
diff --git a/util/fix-includes b/util/fix-includes
new file mode 100755
index 000000000000..041a450437ba
--- /dev/null
+++ b/util/fix-includes
@@ -0,0 +1,19 @@
+#!/bin/sh
+#
+# Copyright 2019-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
+
+find -name ossl_typ.h -o \( \
+ -name '*.h' -o \
+ -name '*.h.in' -o \
+ -name '*.c' -o \
+ -name '*.ec' -o \
+ -name 'README*' -o \
+ -name '*.pod' -o \
+ -name '*.cnf' -o -name '*.conf' \
+ \) -exec sed -E -i \
+ -f util/fix-includes.sed {} \;
diff --git a/util/fix-includes.sed b/util/fix-includes.sed
new file mode 100644
index 000000000000..db66809a1975
--- /dev/null
+++ b/util/fix-includes.sed
@@ -0,0 +1,6 @@
+s|internal/([a-z0-9_]+)_int\.h|crypto/\1.h|g ;
+s@internal/(aria.h|asn1_dsa.h|async.h|bn_conf.h|bn_conf.h|bn_dh.h|bn_srp.h|chacha.h|(aes|des|cmll)_platform.h|ctype.h|__DECC_INCLUDE_EPILOGUE.H|__DECC_INCLUDE_PROLOGUE.H|dso_conf.h|dso_conf.h|engine.h|lhash.h|md32_common.h|objects.h|poly1305.h|sha.h|siphash.h|sm2err.h|sm2.h|sm4.h|sparse_array.h|store.h|foobar)@crypto/\1@g ;
+s/constant_time_locl/constant_time/g ;
+s/_lo?cl\.h/_local.h/g ;
+s/_int\.h/_local.h/g ;
+s|openssl/ossl_typ\.h|openssl/types.h|g ;
diff --git a/util/indent.pro b/util/indent.pro
new file mode 100644
index 000000000000..4851c7338a73
--- /dev/null
+++ b/util/indent.pro
@@ -0,0 +1,644 @@
+-bap
+-bbo
+-br
+-brs
+-c33
+-cd33
+-ce
+-ci4
+-cli0
+-cp33
+-d0
+-di1
+-hnl
+-i4
+-il1
+-ip0
+-l80
+-lp
+-nbad
+-nbc
+-ncdb
+-ncs
+-nfc1
+-nfca
+-npcs
+-nprs
+-npsl
+-nsc
+-ppi1
+-saf
+-sai
+-saw
+-sob
+-ss
+-ts0
+-T ACCESS_DESCRIPTION
+-T ADDED_OBJ
+-T AES_KEY
+-T ARGS
+-T ASIdOrRange
+-T ASIdOrRanges
+-T ASIdentifierChoice
+-T ASIdentifiers
+-T ASN1_ADB
+-T ASN1_ADB_TABLE
+-T ASN1_AUX
+-T ASN1_BIT_STRING
+-T ASN1_BMPSTRING
+-T ASN1_BOOLEAN
+-T ASN1_ENCODING
+-T ASN1_ENUMERATED
+-T ASN1_EXTERN_FUNCS
+-T ASN1_GENERALIZEDTIME
+-T ASN1_GENERALSTRING
+-T ASN1_IA5STRING
+-T ASN1_INTEGER
+-T ASN1_ITEM
+-T ASN1_ITEM_EXP
+-T ASN1_NULL
+-T ASN1_OBJECT
+-T ASN1_OCTET_STRING
+-T ASN1_PCTX
+-T ASN1_PRIMITIVE_FUNCS
+-T ASN1_PRINTABLESTRING
+-T ASN1_PRINT_ARG
+-T ASN1_SCTX
+-T ASN1_STREAM_ARG
+-T ASN1_STRING
+-T ASN1_STRING_TABLE
+-T ASN1_T61STRING
+-T ASN1_TEMPLATE
+-T ASN1_TIME
+-T ASN1_TLC
+-T ASN1_TYPE
+-T ASN1_UNIVERSALSTRING
+-T ASN1_UTCTIME
+-T ASN1_UTF8STRING
+-T ASN1_VALUE
+-T ASN1_VISIBLESTRING
+-T AUTHORITY_INFO_ACCESS
+-T AUTHORITY_KEYID
+-T BASIC_CONSTRAINTS
+-T BF_KEY
+-T BF_LONG
+-T BIGNUM
+-T BIO
+-T BIO_ACCEPT
+-T BIO_ADDR
+-T BIO_ASN1_BUF_CTX
+-T BIO_ASN1_EX_FUNCS
+-T BIO_B64_CTX
+-T BIO_CONNECT
+-T BIO_ENC_CTX
+-T BIO_F_BUFFER_CTX
+-T BIO_LINEBUFFER_CTX
+-T BIO_METHOD
+-T BIO_OK_CTX
+-T BIO_SSL
+-T BIT_STRING_BITNAME
+-T BN_BLINDING
+-T BN_CTX
+-T BN_GENCB
+-T BN_MONT_CTX
+-T BN_POOL
+-T BN_POOL_ITEM
+-T BN_RECP_CTX
+-T BN_STACK
+-T BN_ULONG
+-T BUF_MEM
+-T BY_DIR
+-T BY_DIR_ENTRY
+-T BY_DIR_HASH
+-T Bytef
+-T CAMELLIA_KEY
+-T CAST_KEY
+-T CAST_LONG
+-T CA_DB
+-T CCM128_CONTEXT
+-T CERT
+-T CERTIFICATEPOLICIES
+-T CERT_PKEY
+-T CIPHER_ORDER
+-T CMAC_CTX
+-T CMS_AuthenticatedData
+-T CMS_CertificateChoices
+-T CMS_CompressedData
+-T CMS_ContentInfo
+-T CMS_DigestedData
+-T CMS_EncapsulatedContentInfo
+-T CMS_EncryptedContentInfo
+-T CMS_EncryptedData
+-T CMS_EnvelopedData
+-T CMS_IssuerAndSerialNumber
+-T CMS_KEKIdentifier
+-T CMS_KEKRecipientInfo
+-T CMS_KeyAgreeRecipientIdentifier
+-T CMS_KeyAgreeRecipientInfo
+-T CMS_KeyTransRecipientInfo
+-T CMS_OriginatorIdentifierOrKey
+-T CMS_OriginatorInfo
+-T CMS_OriginatorPublicKey
+-T CMS_OtherCertificateFormat
+-T CMS_OtherKeyAttribute
+-T CMS_OtherRecipientInfo
+-T CMS_OtherRevocationInfoFormat
+-T CMS_PasswordRecipientInfo
+-T CMS_Receipt
+-T CMS_ReceiptRequest
+-T CMS_ReceiptsFrom
+-T CMS_RecipientEncryptedKey
+-T CMS_RecipientIdentifier
+-T CMS_RecipientInfo
+-T CMS_RecipientKeyIdentifier
+-T CMS_RevocationInfoChoice
+-T CMS_SignedData
+-T CMS_SignerIdentifier
+-T CMS_SignerInfo
+-T COMP_CTX
+-T COMP_METHOD
+-T CONF
+-T CONF_IMODULE
+-T CONF_METHOD
+-T CONF_MODULE
+-T CONF_VALUE
+-T CRYPTO_malloc_fn
+-T CRYPTO_realloc_fn
+-T CRYPTO_free_fn
+-T CRYPTO_EX_DATA
+-T CRYPTO_EX_dup
+-T CRYPTO_EX_free
+-T CRYPTO_EX_new
+-T CRYPTO_THREADID
+-T DB_ATTR
+-T DES_LONG
+-T DES_cblock
+-T DES_key_schedule
+-T DH
+-T DH_METHOD
+-T DH_PKEY_CTX
+-T DIST_POINT
+-T DIST_POINT_NAME
+-T DSA
+-T DSA_METHOD
+-T DSA_SIG
+-T DSO
+-T DSO_FUNC_TYPE
+-T DSO_MERGER_FUNC
+-T DSO_METHOD
+-T DSO_NAME_CONVERTER_FUNC
+-T DSO_VMS_INTERNAL
+-T DTLS1_BITMAP
+-T DTLS1_RECORD_DATA
+-T DTLS1_STATE
+-T Dl_info
+-T ECDH_METHOD
+-T ECDSA_METHOD
+-T ECDSA_SIG
+-T ECPARAMETERS
+-T ECPKPARAMETERS
+-T EC_GROUP
+-T EC_KEY
+-T EC_METHOD
+-T EC_POINT
+-T EC_PRE_COMP
+-T EC_PRIVATEKEY
+-T EC_builtin_curve
+-T EDIPARTYNAME
+-T ENGINE
+-T ENGINE_CIPHERS_PTR
+-T ENGINE_CLEANUP_CB
+-T ENGINE_CLEANUP_ITEM
+-T ENGINE_CMD_DEFN
+-T ENGINE_CTRL_FUNC_PTR
+-T ENGINE_DIGESTS_PTR
+-T ENGINE_GEN_FUNC_PTR
+-T ENGINE_GEN_INT_FUNC_PTR
+-T ENGINE_LOAD_KEY_PTR
+-T ENGINE_PILE
+-T ENGINE_PILE_DOALL
+-T ENGINE_PKEY_ASN1_METHS_PTR
+-T ENGINE_PKEY_METHS_PTR
+-T ENGINE_SSL_CLIENT_CERT_PTR
+-T ENGINE_TABLE
+-T ENUMERATED_NAMES
+-T ERR_STATE
+-T ERR_STRING_DATA
+-T ESS_CERT_ID
+-T ESS_CERT_ID_V2
+-T ESS_ISSUER_SERIAL
+-T ESS_SIGNING_CERT
+-T ESS_SIGNING_CERT_V2
+-T EVP_AES_HMAC_SHA1
+-T EVP_AES_HMAC_SHA256
+-T EVP_CIPHER
+-T EVP_CIPHER_CTX
+-T EVP_CIPHER_INFO
+-T EVP_ENCODE_CTX
+-T EVP_MD
+-T EVP_MD_CTX
+-T EVP_PBE_CTL
+-T EVP_PBE_KEYGEN
+-T EVP_PKEY
+-T EVP_PKEY_ASN1_METHOD
+-T EVP_PKEY_CTX
+-T EVP_PKEY_METHOD
+-T EVP_PKEY_gen_cb
+-T FILE
+-T GCM128_CONTEXT
+-T GENERAL_NAME
+-T GENERAL_NAMES
+-T GENERAL_SUBTREE
+-T GEN_SESSION_CB
+-T HASH_CTX
+-T HEAPENTRY32
+-T HEAPLIST32
+-T HMAC_CTX
+-T IDEA_KEY_SCHEDULE
+-T IPAddrBlocks
+-T IPAddressFamily
+-T IPAddressOrRange
+-T IPAddressOrRanges
+-T ISSUING_DIST_POINT
+-T KEY_TABLE_TYPE
+-T LHASH
+-T LHASH_DOALL_ARG_FN_TYPE
+-T LHASH_NODE
+-T LPHEAPENTRY32
+-T LPHEAPLIST32
+-T LPMODULEENTRY32
+-T LPMODULEENTRY32W
+-T LPPROCESSENTRY32
+-T LPPROCESSENTRY32W
+-T LPTHREADENTRY32
+-T LP_DIR_CTX
+-T MD2_CTX
+-T MD4_CTX
+-T MD5_CTX
+-T MDC2_CTX
+-T MEM
+-T MEM_LEAK
+-T MIME_HEADER
+-T MIME_PARAM
+-T MODULEENTRY32
+-T MODULEENTRY32W
+-T NAME_CONSTRAINTS
+-T NAME_FUNCS
+-T NBIO_TEST
+-T NDEF_SUPPORT
+-T NETSCAPE_CERT_SEQUENCE
+-T NETSCAPE_ENCRYPTED_PKEY
+-T NETSCAPE_PKEY
+-T NETSCAPE_SPKAC
+-T NETSCAPE_SPKI
+-T NOTICEREF
+-T OBJ_NAME
+-T OCB128_CONTEXT
+-T OCB_BLOCK
+-T OCSP_BASICRESP
+-T OCSP_CERTID
+-T OCSP_CERTSTATUS
+-T OCSP_CRLID
+-T OCSP_ONEREQ
+-T OCSP_REQINFO
+-T OCSP_REQUEST
+-T OSSL_HTTP_REQ_CTX
+-T OCSP_RESPBYTES
+-T OCSP_RESPDATA
+-T OCSP_RESPID
+-T OCSP_RESPONSE
+-T OCSP_REVOKEDINFO
+-T OCSP_SERVICELOC
+-T OCSP_SIGNATURE
+-T OCSP_SINGLERESP
+-T OCSP_TBLSTR
+-T OPENSSL_BLOCK
+-T OPENSSL_CSTRING
+-T OPENSSL_DIR_CTX
+-T OPENSSL_PSTRING
+-T OPENSSL_STRING
+-T OSSL_ASYNC_FD
+-T OTHERNAME
+-T P256_POINT
+-T P256_POINT_AFFINE
+-T PBE2PARAM
+-T PBEPARAM
+-T PBKDF2PARAM
+-T PHEAPENTRY32
+-T PHEAPLIST32
+-T PKCS12
+-T PKCS12_BAGS
+-T PKCS12_SAFEBAG
+-T PKCS7
+-T PKCS7_DIGEST
+-T PKCS7_ENCRYPT
+-T PKCS7_ENC_CONTENT
+-T PKCS7_ENVELOPE
+-T PKCS7_ISSUER_AND_SERIAL
+-T PKCS7_RECIP_INFO
+-T PKCS7_SIGNED
+-T PKCS7_SIGNER_INFO
+-T PKCS7_SIGN_ENVELOPE
+-T PKCS8_PRIV_KEY_INFO
+-T PKEY_USAGE_PERIOD
+-T PMODULEENTRY32
+-T PMODULEENTRY32W
+-T POLICYINFO
+-T POLICYQUALINFO
+-T POLICY_CONSTRAINTS
+-T POLICY_MAPPING
+-T POLICY_MAPPINGS
+-T PPROCESSENTRY32
+-T PPROCESSENTRY32W
+-T PRECOMP256_ROW
+-T PROCESSENTRY32
+-T PROCESSENTRY32W
+-T PROXY_CERT_INFO_EXTENSION
+-T PROXY_POLICY
+-T PTHREADENTRY32
+-T PW_CB_DATA
+-T RAND_METHOD
+-T RC2_KEY
+-T RC4_KEY
+-T RC5_32_KEY
+-T RIPEMD160_CTX
+-T RSA
+-T RSA_METHOD
+-T RSA_OAEP_PARAMS
+-T RSA_PKEY_CTX
+-T RSA_PSS_PARAMS
+-T SCT
+-T SEED_KEY_SCHEDULE
+-T SHA256_CTX
+-T SHA512_CTX
+-T SHA_CTX
+-T SRP_ARG
+-T SRP_CLIENT_ARG
+-T SRP_CTX
+-T SRP_SERVER_ARG
+-T SRP_VBASE
+-T SRP_gN_cache
+-T SRP_user_pwd
+-T SRTP_PROTECTION_PROFILE
+-T SSL
+-T SSL3_BUFFER
+-T SSL3_COMP
+-T SSL3_ENC_METHOD
+-T SSL3_RECORD
+-T SSL3_STATE
+-T SSL_CIPHER
+-T SSL_COMP
+-T SSL_CONF_CTX
+-T SSL_CTX
+-T SSL_DANE
+-T SSL_EXCERT
+-T SSL_METHOD
+-T SSL_SESSION
+-T SSL_SESSION_ASN1
+-T STACK_OF
+-T SXNET
+-T SXNETID
+-T TCHAR
+-T TEST_INFO
+-T THREADENTRY32
+-T TIMEOUT_PARAM
+-T TLS_SESSION_TICKET_EXT
+-T TLS_SIGALGS
+-T TS_ACCURACY
+-T TS_MSG_IMPRINT
+-T TS_REQ
+-T TS_RESP
+-T TS_RESP_CTX
+-T TS_STATUS_INFO
+-T TS_TST_INFO
+-T TS_VERIFY_CTX
+-T TXT_DB
+-T UI
+-T UINT64
+-T UI_METHOD
+-T UI_STRING
+-T USERNOTICE
+-T WCHAR
+-T WHIRLPOOL_CTX
+-T WINAPI
+-T X509
+-T X509V3_CONF_METHOD
+-T X509V3_CTX
+-T X509V3_EXT_D2I
+-T X509V3_EXT_FREE
+-T X509V3_EXT_I2D
+-T X509V3_EXT_I2R
+-T X509V3_EXT_I2S
+-T X509V3_EXT_METHOD
+-T X509V3_EXT_NEW
+-T X509V3_EXT_R2I
+-T X509V3_EXT_S2I
+-T X509V3_EXT_V2I
+-T X509_ALGOR
+-T X509_ATTRIBUTE
+-T X509_CERT_AUX
+-T X509_CINF
+-T X509_CRL
+-T X509_CRL_INFO
+-T X509_CRL_METHOD
+-T X509_EXTENSION
+-T X509_INFO
+-T X509_LOOKUP
+-T X509_LOOKUP_METHOD
+-T X509_NAME
+-T X509_NAME_ENTRY
+-T X509_OBJECT
+-T X509_PKEY
+-T X509_POLICY_CACHE
+-T X509_POLICY_DATA
+-T X509_POLICY_LEVEL
+-T X509_POLICY_NODE
+-T X509_POLICY_TREE
+-T X509_PUBKEY
+-T X509_PURPOSE
+-T X509_REQ
+-T X509_REQ_INFO
+-T X509_REVOKED
+-T X509_SIG
+-T X509_STORE
+-T X509_STORE_CTX
+-T X509_TRUST
+-T X509_VAL
+-T X509_VERIFY_PARAM
+-T X9_62_CHARACTERISTIC_TWO
+-T X9_62_CURVE
+-T X9_62_FIELDID
+-T X9_62_PENTANOMIAL
+-T XTS128_CONTEXT
+-T _LHASH
+-T _STACK
+-T __int64
+-T asn1_ps_func
+-T bio_dgram_data
+-T bio_info_cb
+-T BIO_info_cb
+-T BIO_callback_fn
+-T char_io
+-T conf_finish_func
+-T conf_init_func
+-T const_DES_cblock
+-T d2i_of_void
+-T des_cblock
+-T dynamic_data_ctx
+-T dynamic_fns
+-T engine_table_doall_cb
+-T i2d_of_void
+-T int_dhx942_dh
+-T nid_triple
+-T pem_password_cb
+-T pitem
+-T piterator
+-T pqueue_s
+-T session_op
+-T size_t
+-T tag_exp_arg
+-T testdata
+-T time_t
+-T time_t
+-T u32
+-T u64
+-T u8
+-T v3_ext_ctx
+-T v3_ext_method
+-T STACK_OF_ACCESS_DESCRIPTION_
+-T STACK_OF_ASIdOrRange_
+-T STACK_OF_ASN1_ADB_TABLE_
+-T STACK_OF_ASN1_INTEGER_
+-T STACK_OF_ASN1_OBJECT_
+-T STACK_OF_ASN1_STRING_TABLE_
+-T STACK_OF_ASN1_TYPE_
+-T STACK_OF_ASN1_UTF8STRING_
+-T STACK_OF_ASN1_VALUE_
+-T STACK_OF_BIO_
+-T STACK_OF_BY_DIR_ENTRY_
+-T STACK_OF_BY_DIR_HASH_
+-T STACK_OF_CMS_CertificateChoices_
+-T STACK_OF_CMS_RecipientEncryptedKey_
+-T STACK_OF_CMS_RecipientInfo_
+-T STACK_OF_CMS_RevocationInfoChoice_
+-T STACK_OF_CMS_SignerInfo_
+-T STACK_OF_CONF_IMODULE_
+-T STACK_OF_CONF_MODULE_
+-T STACK_OF_CONF_VALUE_
+-T STACK_OF_CRYPTO_dynlock_
+-T STACK_OF_DIST_POINT_
+-T STACK_OF_ENGINE_
+-T STACK_OF_ENGINE_CLEANUP_ITEM_
+-T STACK_OF_ESS_CERT_ID_
+-T STACK_OF_ESS_CERT_ID_V2_
+-T STACK_OF_EVP_PBE_CTL_
+-T STACK_OF_EVP_PKEY_ASN1_METHOD_
+-T STACK_OF_EVP_PKEY_METHOD_
+-T STACK_OF_GENERAL_NAMES_
+-T STACK_OF_GENERAL_NAME_
+-T STACK_OF_GENERAL_SUBTREE_
+-T STACK_OF_IPAddressFamily_
+-T STACK_OF_IPAddressOrRange_
+-T STACK_OF_MIME_HEADER_
+-T STACK_OF_MIME_PARAM_
+-T STACK_OF_NAME_FUNCS_
+-T STACK_OF_OCSP_CERTID_
+-T STACK_OF_OCSP_ONEREQ_
+-T STACK_OF_OCSP_RESPID_
+-T STACK_OF_OCSP_SINGLERESP_
+-T STACK_OF_OPENSSL_BLOCK_
+-T STACK_OF_OPENSSL_PSTRING_
+-T STACK_OF_OPENSSL_STRING_
+-T STACK_OF_PKCS12_SAFEBAG_
+-T STACK_OF_PKCS7_
+-T STACK_OF_PKCS7_RECIP_INFO_
+-T STACK_OF_PKCS7_SIGNER_INFO_
+-T STACK_OF_POLICYINFO_
+-T STACK_OF_POLICYQUALINFO_
+-T STACK_OF_POLICY_MAPPING_
+-T STACK_OF_Request_
+-T STACK_OF_SCT_
+-T STACK_OF_SRP_gN_
+-T STACK_OF_SRP_gN_cache_
+-T STACK_OF_SRP_user_pwd_
+-T STACK_OF_SRTP_PROTECTION_PROFILE_
+-T STACK_OF_SSL_CIPHER_
+-T STACK_OF_SSL_COMP_
+-T STACK_OF_STRING_
+-T STACK_OF_SXNETID_
+-T STACK_OF_SingleResponse_
+-T STACK_OF_UI_STRING_
+-T STACK_OF_X509V3_EXT_METHOD_
+-T STACK_OF_X509_
+-T STACK_OF_X509_ALGOR_
+-T STACK_OF_X509_ATTRIBUTE_
+-T STACK_OF_X509_CRL_
+-T STACK_OF_X509_EXTENSION_
+-T STACK_OF_X509_INFO_
+-T STACK_OF_X509_LOOKUP_
+-T STACK_OF_X509_NAME_
+-T STACK_OF_X509_NAME_ENTRY_
+-T STACK_OF_X509_OBJECT_
+-T STACK_OF_X509_POLICY_DATA_
+-T STACK_OF_X509_POLICY_NODE_
+-T STACK_OF_X509_PURPOSE_
+-T STACK_OF_X509_REVOKED_
+-T STACK_OF_X509_TRUST_
+-T STACK_OF_X509_VERIFY_PARAM_
+-T STACK_OF_nid_triple_
+-T STACK_OF_void_
+-T LHASH_OF_ADDED_OBJ_
+-T LHASH_OF_CONF_VALUE_
+-T LHASH_OF_ENGINE_PILE_
+-T LHASH_OF_ERR_STATE_
+-T LHASH_OF_ERR_STRING_DATA_
+-T LHASH_OF_FUNCTION_
+-T LHASH_OF_MEM_
+-T LHASH_OF_OBJ_NAME_
+-T LHASH_OF_OPENSSL_STRING_
+-T LHASH_OF_SSL_SESSION_
+-T LHASH_OF_STRING_
+-T clock_t
+-T custom_ext_methods
+-T hm_fragment
+-T record_pqueue
+-T ssl_ctx_st
+-T ssl_flag_tbl
+-T ssl_st
+-T ssl_trace_tbl
+-T _stdcall
+-T OPTIONS
+-T OPT_PAIR
+-T uint64_t
+-T int64_t
+-T uint32_t
+-T int32_t
+-T uint16_t
+-T int16_t
+-T uint8_t
+-T int8_t
+-T STRINT_PAIR
+-T felem
+-T felem_bytearray
+-T SH_LIST
+-T PACKET
+-T RECORD_LAYER
+-T ASYNC_CTX
+-T ASYNC_JOB
+-T intmax_t
+-T uintmax_t
+-T pqueue
+-T danetls_record
+-T CTLOG_STORE
+-T OPENSSL_INIT_SETTINGS
+-T OSSL_HANDSHAKE_STATE
+-T OSSL_STATEM
+-T ossl_intmax_t
+-T ossl_intmax_t
+-T ossl_uintmax_t
+-T ossl_uintmax_t
+-T CT_POLICY_EVAL_CTX
+-T RAND_DRBG
+-T RAND_DRBG_CTR
+-T RAND_POOL
+-T RAND_METHOD
diff --git a/util/lang-compress.pl b/util/lang-compress.pl
new file mode 100755
index 000000000000..ddf1d1ec6fb0
--- /dev/null
+++ b/util/lang-compress.pl
@@ -0,0 +1,185 @@
+#! /usr/bin/env perl
+#
+# C source compressor. This:
+#
+# - merges continuation lines
+# - removes comments (not in strings)
+# - removes empty lines (not in strings)
+
+use strict;
+use warnings;
+
+my $debug = defined $ENV{DEBUG};
+my $lang = shift @ARGV;
+
+# Slurp the file
+$/ = undef;
+$_ = <>;
+
+if ($lang eq 'C') {
+ # Merge continuation lines
+ s{\\\n}{}g;
+
+ # Regexp for things that should be preserved
+ my $preserved =
+ qr{
+ (?:
+ " # String start
+ (?: \\. | [^\"])* # Any character, including escaped ones
+ " # String end
+ )
+
+ | # OR
+
+ (?:
+ ' # Character start (multi-chars supported)
+ (?: \\. | [^\'])+ # Any character, including escaped ones
+ ' # String end
+ )
+ }x;
+
+ # Remove comments while preserving strings
+ s{
+ (?| # All things preserved end up in $1
+
+ /\* # C comment start
+ .*? # Contents up until
+ \*/ # C comment end
+
+ | # OR
+
+ ( # Grouping for the replacement
+ $preserved
+ )
+
+ )
+ }{
+ if ($debug) {
+ print STDERR "DEBUG: '$&' => '$1'\n" if defined $1;
+ print STDERR "DEBUG: '$&' removed\n" unless defined $1;
+ }
+ defined $1 ? $1 : ""
+ }gsxe;
+
+ # Remove empty lines
+ s{
+ (?| # All things preserved end up in $1
+
+ (^|\n)(?:\s*(?:\n|$))+ # Empty lines, preserve one newline
+
+ | # OR
+
+ ( # Grouping for the replacement
+ $preserved
+ )
+
+ )
+ }{$1}gsx;
+
+ # Remove extra spaces
+ s{
+ (?| # All things preserved end up in $1
+
+ \h+ # Horizontal spaces replaced with one
+
+ | # OR
+
+ ( # Grouping for the replacement
+ $preserved
+ )
+
+ )
+ }{
+ if ($debug) {
+ print STDERR "DEBUG: '$&' => '$1'\n" if defined $1;
+ print STDERR "DEBUG: '$&' => ' '\n" unless defined $1;
+ }
+ defined $1 ? $1 : " "
+ }gsxe;
+
+ # Clean up spaces at start and end of lines
+ s/^ //mg;
+ s/ $//mg;
+} elsif ($lang eq 'S') {
+ # Because we use C++ style comments in our .S files, all we can do
+ # is to drop them
+ s{
+ ^([^\n]*?)//[^\n]*?$ # Any line with a // comment
+ }{
+ if ($debug) {
+ print STDERR "DEBUG: '$&' => '$1'\n" if defined $1;
+ print STDERR "DEBUG: '$&' removed\n" unless defined $1;
+ }
+ defined $1 ? $1 : ""
+ }mgsxe;
+
+ # Drop all empty lines
+ s{
+ (^|\n)(?:\s*(?:\n|$))+ # Empty lines, preserve one newline
+ }{$1}gsx;
+} elsif ($lang eq 'perl') {
+ # Merge continuation lines
+ s{\\\n}{}g;
+
+ # Regexp for things that should be preserved
+ my $preserved =
+ qr{
+ (?:
+ <<["']?(\w+)["']? # HERE document start
+ .*? # Its contents
+ ^\g{-1}$
+ )
+ |
+ (?:
+ " # Double quoted string start
+ (?: \\. | [^\"])* # Any character, including escaped ones
+ " # Double quoted string end
+ )
+
+ | # OR
+
+ (?:
+ ' # Single quoted string start
+ [^\']* # Any character
+ ' # Single quoted string end
+ )
+ }msx;
+
+ # Remove comments while preserving strings
+ s{
+ (?| # All things preserved end up in $1
+
+ \#.*?(\n|$) # Perl comments
+
+ | # OR
+
+ ( # Grouping for the replacement
+ $preserved
+ )
+
+ )
+ }{
+ if ($debug) {
+ print STDERR "DEBUG: '$&' => '$1'\n" if defined $1;
+ print STDERR "DEBUG: '$&' removed\n" unless defined $1;
+ }
+ defined $1 ? $1 : ""
+ }gsxe;
+
+ # Remove empty lines
+ s{
+ (?| # All things preserved end up in $1
+
+ (^|\n)(?:\s*(?:\n|$))+ # Empty lines, preserve one newline
+
+ | # OR
+
+ ( # Grouping for the replacement
+ $preserved
+ )
+
+ )
+ }{$1}gsx;
+}
+
+print;
diff --git a/util/libcrypto.num b/util/libcrypto.num
new file mode 100644
index 000000000000..0f6f30be37eb
--- /dev/null
+++ b/util/libcrypto.num
@@ -0,0 +1,5431 @@
+d2i_EC_PUBKEY 1 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+b2i_PVK_bio 2 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_NETSCAPE_CERT_SEQUENCE 3 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get0_chain 4 3_0_0 EXIST::FUNCTION:
+COMP_expand_block 5 3_0_0 EXIST::FUNCTION:COMP
+X509V3_get_string 6 3_0_0 EXIST::FUNCTION:
+TS_MSG_IMPRINT_free 7 3_0_0 EXIST::FUNCTION:TS
+DES_xcbc_encrypt 8 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+TS_RESP_CTX_new 9 3_0_0 EXIST::FUNCTION:TS
+PKCS5_PBE_add 10 3_0_0 EXIST::FUNCTION:
+i2d_DSAparams 11 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_NAME_get0_der 12 3_0_0 EXIST::FUNCTION:
+i2d_ESS_ISSUER_SERIAL 13 3_0_0 EXIST::FUNCTION:
+X509at_get_attr_by_NID 14 3_0_0 EXIST::FUNCTION:
+X509_PUBKEY_set0_param 15 3_0_0 EXIST::FUNCTION:
+PKCS12_it 16 3_0_0 EXIST::FUNCTION:
+i2d_ASN1_OCTET_STRING 17 3_0_0 EXIST::FUNCTION:
+EC_KEY_set_private_key 18 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+SRP_VBASE_get_by_user 19 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SRP
+Camellia_cfb128_encrypt 21 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+DES_ncbc_encrypt 22 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+TS_REQ_get_ext_count 23 3_0_0 EXIST::FUNCTION:TS
+EVP_aes_128_ocb 24 3_0_0 EXIST::FUNCTION:OCB
+ASN1_item_d2i_fp 25 3_0_0 EXIST::FUNCTION:STDIO
+BN_lshift 26 3_0_0 EXIST::FUNCTION:
+X509_NAME_add_entry_by_NID 27 3_0_0 EXIST::FUNCTION:
+X509V3_add_value_bool 28 3_0_0 EXIST::FUNCTION:
+GENERAL_NAME_get0_otherName 29 3_0_0 EXIST::FUNCTION:
+ASN1_INTEGER_get_uint64 30 3_0_0 EXIST::FUNCTION:
+EVP_DigestInit_ex 31 3_0_0 EXIST::FUNCTION:
+CTLOG_new 32 3_0_0 EXIST::FUNCTION:CT
+UI_get_result_minsize 33 3_0_0 EXIST::FUNCTION:
+EVP_PBE_alg_add_type 34 3_0_0 EXIST::FUNCTION:
+EVP_cast5_ofb 35 3_0_0 EXIST::FUNCTION:CAST
+d2i_PUBKEY_fp 36 3_0_0 EXIST::FUNCTION:STDIO
+PKCS7_set_cipher 37 3_0_0 EXIST::FUNCTION:
+BF_decrypt 38 3_0_0 EXIST::FUNCTION:BF,DEPRECATEDIN_3_0
+PEM_read_bio_PUBKEY 39 3_0_0 EXIST::FUNCTION:
+X509_NAME_delete_entry 40 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_verify_recover 41 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+UI_set_method 42 3_0_0 EXIST::FUNCTION:
+PKCS7_ISSUER_AND_SERIAL_it 43 3_0_0 EXIST::FUNCTION:
+EC_GROUP_method_of 44 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+RSA_blinding_on 45 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_get0_signature 47 3_0_0 EXIST::FUNCTION:
+X509_REVOKED_get0_extensions 48 3_0_0 EXIST::FUNCTION:
+NETSCAPE_SPKI_verify 49 3_0_0 EXIST::FUNCTION:
+i2d_OCSP_RESPONSE 50 3_0_0 EXIST::FUNCTION:OCSP
+ERR_peek_error 51 3_0_0 EXIST::FUNCTION:
+X509v3_asid_validate_resource_set 52 3_0_0 EXIST::FUNCTION:RFC3779
+PEM_write_bio_Parameters 53 3_0_0 EXIST::FUNCTION:
+CMS_SignerInfo_verify 54 3_0_0 EXIST::FUNCTION:CMS
+X509v3_asid_is_canonical 55 3_0_0 EXIST::FUNCTION:RFC3779
+ASN1_ENUMERATED_get 56 3_0_0 EXIST::FUNCTION:
+EVP_MD_do_all_sorted 57 3_0_0 EXIST::FUNCTION:
+OCSP_crl_reason_str 58 3_0_0 EXIST::FUNCTION:OCSP
+ENGINE_ctrl_cmd_string 59 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ENGINE_finish 60 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+SRP_Calc_client_key 61 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+X509_PUBKEY_free 62 3_0_0 EXIST::FUNCTION:
+BIO_free_all 63 3_0_0 EXIST::FUNCTION:
+EVP_idea_ofb 64 3_0_0 EXIST::FUNCTION:IDEA
+DSO_bind_func 65 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_get_copy 66 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_up_ref 67 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_set_ctrl 68 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OCSP_basic_sign 69 3_0_0 EXIST::FUNCTION:OCSP
+BN_GENCB_set 70 3_0_0 EXIST::FUNCTION:
+BN_generate_prime 71 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_0_9_8
+d2i_DSAPrivateKey_fp 72 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+BIO_nread0 73 3_0_0 EXIST::FUNCTION:
+NETSCAPE_SPKI_print 74 3_0_0 EXIST::FUNCTION:
+X509_set_pubkey 75 3_0_0 EXIST::FUNCTION:
+ASN1_item_print 76 3_0_0 EXIST::FUNCTION:
+CONF_set_nconf 77 3_0_0 EXIST::FUNCTION:
+RAND_set_rand_method 78 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BN_GF2m_mod_mul 79 3_0_0 EXIST::FUNCTION:EC2M
+UI_add_input_boolean 80 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_adj 81 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_get0_info 82 3_0_0 EXIST::FUNCTION:
+BN_add_word 83 3_0_0 EXIST::FUNCTION:
+EVP_des_ede 84 3_0_0 EXIST::FUNCTION:DES
+EVP_PKEY_add1_attr_by_OBJ 85 3_0_0 EXIST::FUNCTION:
+ASYNC_WAIT_CTX_get_all_fds 86 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_meth_set_do_cipher 87 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_set_pw_prompt 88 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_RESPBYTES 89 3_0_0 EXIST::FUNCTION:OCSP
+TS_REQ_get_ext_by_NID 90 3_0_0 EXIST::FUNCTION:TS
+ASN1_item_ndef_i2d 91 3_0_0 EXIST::FUNCTION:
+OCSP_archive_cutoff_new 92 3_0_0 EXIST::FUNCTION:OCSP
+DSA_size 93 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+IPAddressRange_free 94 3_0_0 EXIST::FUNCTION:RFC3779
+CMS_ContentInfo_free 95 3_0_0 EXIST::FUNCTION:CMS
+BIO_accept 96 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SOCK
+X509_VERIFY_PARAM_set1_policies 97 3_0_0 EXIST::FUNCTION:
+SCT_set0_extensions 98 3_0_0 EXIST::FUNCTION:CT
+PKCS5_pbe2_set_scrypt 99 3_0_0 EXIST::FUNCTION:SCRYPT
+X509_find_by_subject 100 3_0_0 EXIST::FUNCTION:
+DSAparams_print 101 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+BF_set_key 102 3_0_0 EXIST::FUNCTION:BF,DEPRECATEDIN_3_0
+d2i_DHparams 103 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+i2d_PKCS7_ENC_CONTENT 104 3_0_0 EXIST::FUNCTION:
+DH_generate_key 105 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+ENGINE_add_conf_module 106 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BIO_new_socket 107 3_0_0 EXIST::FUNCTION:SOCK
+ASN1_OBJECT_free 108 3_0_0 EXIST::FUNCTION:
+X509_REQ_get_extensions 109 3_0_0 EXIST::FUNCTION:
+X509_get_version 110 3_0_0 EXIST::FUNCTION:
+OCSP_CERTID_dup 111 3_0_0 EXIST::FUNCTION:OCSP
+RSA_PSS_PARAMS_free 112 3_0_0 EXIST::FUNCTION:
+i2d_TS_MSG_IMPRINT 113 3_0_0 EXIST::FUNCTION:TS
+EC_POINT_mul 114 3_0_0 EXIST::FUNCTION:EC
+WHIRLPOOL_Final 115 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,WHIRLPOOL
+CMS_get1_ReceiptRequest 116 3_0_0 EXIST::FUNCTION:CMS
+BIO_sock_non_fatal_error 117 3_0_0 EXIST::FUNCTION:SOCK
+HMAC_Update 118 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_PKCS12 119 3_0_0 EXIST::FUNCTION:
+EVP_BytesToKey 120 3_0_0 EXIST::FUNCTION:
+ENGINE_set_default_pkey_asn1_meths 121 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OCSP_BASICRESP_add1_ext_i2d 122 3_0_0 EXIST::FUNCTION:OCSP
+EVP_camellia_128_ctr 123 3_0_0 EXIST::FUNCTION:CAMELLIA
+EVP_CIPHER_impl_ctx_size 124 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_CRL_get_nextUpdate 125 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0
+PKCS12_free 126 3_0_0 EXIST::FUNCTION:
+CMS_signed_get_attr 127 3_0_0 EXIST::FUNCTION:CMS
+ENGINE_set_destroy_function 128 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ASN1_STRING_TABLE_add 129 3_0_0 EXIST::FUNCTION:
+d2i_ASIdentifiers 130 3_0_0 EXIST::FUNCTION:RFC3779
+i2d_PKCS12_bio 131 3_0_0 EXIST::FUNCTION:
+X509_to_X509_REQ 132 3_0_0 EXIST::FUNCTION:
+OCSP_basic_add1_nonce 133 3_0_0 EXIST::FUNCTION:OCSP
+d2i_OCSP_BASICRESP 134 3_0_0 EXIST::FUNCTION:OCSP
+X509v3_add_ext 135 3_0_0 EXIST::FUNCTION:
+X509v3_addr_subset 136 3_0_0 EXIST::FUNCTION:RFC3779
+CRYPTO_strndup 137 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_REQ_CTX_free 138 3_0_0 EXIST::FUNCTION:
+X509_STORE_new 140 3_0_0 EXIST::FUNCTION:
+ASN1_TYPE_free 141 3_0_0 EXIST::FUNCTION:
+PKCS12_BAGS_new 142 3_0_0 EXIST::FUNCTION:
+CMAC_CTX_new 143 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
+ASIdentifierChoice_new 144 3_0_0 EXIST::FUNCTION:RFC3779
+EVP_PKEY_asn1_set_public 145 3_0_0 EXIST::FUNCTION:
+IDEA_set_decrypt_key 146 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,IDEA
+X509_STORE_CTX_set_flags 147 3_0_0 EXIST::FUNCTION:
+BIO_ADDR_rawmake 148 3_0_0 EXIST::FUNCTION:SOCK
+EVP_PKEY_asn1_set_ctrl 149 3_0_0 EXIST::FUNCTION:
+EC_POINTs_mul 150 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ASN1_get_object 151 3_0_0 EXIST::FUNCTION:
+i2d_IPAddressFamily 152 3_0_0 EXIST::FUNCTION:RFC3779
+ENGINE_get_ctrl_function 153 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_REVOKED_get_ext_count 154 3_0_0 EXIST::FUNCTION:
+BN_is_prime_fasttest_ex 155 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ERR_load_PKCS12_strings 156 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_sha384 157 3_0_0 EXIST::FUNCTION:
+i2d_DHparams 158 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+TS_VERIFY_CTX_set_store 159 3_0_0 EXIST::FUNCTION:TS
+PKCS12_verify_mac 160 3_0_0 EXIST::FUNCTION:
+X509v3_addr_canonize 161 3_0_0 EXIST::FUNCTION:RFC3779
+ASN1_item_ex_i2d 162 3_0_0 EXIST::FUNCTION:
+ENGINE_set_digests 163 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+PEM_ASN1_read_bio 164 3_0_0 EXIST::FUNCTION:
+CT_POLICY_EVAL_CTX_free 165 3_0_0 EXIST::FUNCTION:CT
+CMS_RecipientInfo_kari_get0_ctx 166 3_0_0 EXIST::FUNCTION:CMS
+PKCS7_set_attributes 167 3_0_0 EXIST::FUNCTION:
+d2i_POLICYQUALINFO 168 3_0_0 EXIST::FUNCTION:
+EVP_MD_get_type 170 3_0_0 EXIST::FUNCTION:
+EVP_PKCS82PKEY 171 3_0_0 EXIST::FUNCTION:
+BN_generate_prime_ex 172 3_0_0 EXIST::FUNCTION:
+EVP_EncryptInit 173 3_0_0 EXIST::FUNCTION:
+RAND_OpenSSL 174 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BN_uadd 175 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_derive_init 176 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_ASN1_stream 177 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_delete_attr 178 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get_key_length 179 3_0_0 EXIST::FUNCTION:
+BIO_clear_flags 180 3_0_0 EXIST::FUNCTION:
+i2d_DISPLAYTEXT 181 3_0_0 EXIST::FUNCTION:
+OCSP_response_status 182 3_0_0 EXIST::FUNCTION:OCSP
+i2d_ASN1_PRINTABLESTRING 183 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set_hostflags 184 3_0_0 EXIST::FUNCTION:
+SCT_get0_log_id 185 3_0_0 EXIST::FUNCTION:CT
+ASN1_IA5STRING_it 186 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_ECPrivateKey 187 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+BN_consttime_swap 188 3_0_0 EXIST::FUNCTION:
+BIO_f_buffer 189 3_0_0 EXIST::FUNCTION:
+CMS_SignerInfo_get0_signer_id 190 3_0_0 EXIST::FUNCTION:CMS
+TS_TST_INFO_new 191 3_0_0 EXIST::FUNCTION:TS
+X509_REQ_check_private_key 192 3_0_0 EXIST::FUNCTION:
+EVP_DigestInit 193 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_find 194 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_VERIFY_PARAM_get_count 195 3_0_0 EXIST::FUNCTION:
+ASN1_BIT_STRING_get_bit 196 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_cmp 197 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_X509_ALGORS 198 3_0_0 EXIST::FUNCTION:
+EVP_PKEY2PKCS8 199 3_0_0 EXIST::FUNCTION:
+BN_nist_mod_256 200 3_0_0 EXIST::FUNCTION:
+OCSP_request_add0_id 201 3_0_0 EXIST::FUNCTION:OCSP
+EVP_seed_cfb128 202 3_0_0 EXIST::FUNCTION:SEED
+BASIC_CONSTRAINTS_free 203 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get_flags 204 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_ECPKParameters 205 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+SCT_set_version 206 3_0_0 EXIST::FUNCTION:CT
+CMS_add1_ReceiptRequest 207 3_0_0 EXIST::FUNCTION:CMS
+d2i_CRL_DIST_POINTS 208 3_0_0 EXIST::FUNCTION:
+X509_CRL_INFO_free 209 3_0_0 EXIST::FUNCTION:
+ERR_load_UI_strings 210 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ERR_load_strings 211 3_0_0 EXIST::FUNCTION:
+RSA_X931_hash_id 212 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EC_KEY_set_method 213 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PEM_write_PKCS8_PRIV_KEY_INFO 214 3_0_0 EXIST::FUNCTION:STDIO
+X509at_get0_data_by_OBJ 215 3_0_0 EXIST::FUNCTION:
+b2i_PublicKey_bio 216 3_0_0 EXIST::FUNCTION:
+s2i_ASN1_OCTET_STRING 217 3_0_0 EXIST::FUNCTION:
+POLICYINFO_it 218 3_0_0 EXIST::FUNCTION:
+OBJ_create 219 3_0_0 EXIST::FUNCTION:
+d2i_NOTICEREF 220 3_0_0 EXIST::FUNCTION:
+BN_get_rfc2409_prime_768 221 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_PKCS8 222 3_0_0 EXIST::FUNCTION:
+X509_ATTRIBUTE_new 223 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_TABLE_cleanup 224 3_0_0 EXIST::FUNCTION:
+ASN1_put_eoc 225 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_set_input_blocksize 226 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PKCS12_SAFEBAG_get0_attrs 227 3_0_0 EXIST::FUNCTION:
+PKCS8_get_attr 228 3_0_0 EXIST::FUNCTION:
+DSAparams_print_fp 229 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+EC_POINT_set_Jprojective_coordinates_GFp 230 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+DIST_POINT_NAME_new 231 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_file 232 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_decrypt 233 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_rc2_ecb 234 3_0_0 EXIST::FUNCTION:RC2
+i2b_PublicKey_bio 235 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_SET_ANY 236 3_0_0 EXIST::FUNCTION:
+ASN1_item_i2d 238 3_0_0 EXIST::FUNCTION:
+OCSP_copy_nonce 239 3_0_0 EXIST::FUNCTION:OCSP
+OBJ_txt2nid 240 3_0_0 EXIST::FUNCTION:
+SEED_set_key 241 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SEED
+EC_KEY_clear_flags 242 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+CMS_RecipientInfo_ktri_get0_algs 243 3_0_0 EXIST::FUNCTION:CMS
+i2d_EC_PUBKEY 244 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+MDC2 245 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MDC2
+BN_clear_free 246 3_0_0 EXIST::FUNCTION:
+ENGINE_get_pkey_asn1_meths 247 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+DSO_merge 248 3_0_0 EXIST::FUNCTION:
+RSA_get_ex_data 249 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_get_decrypt 250 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+DES_cfb_encrypt 251 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+CMS_SignerInfo_set1_signer_cert 252 3_0_0 EXIST::FUNCTION:CMS
+X509_CRL_load_http 253 3_0_0 EXIST::FUNCTION:
+ENGINE_register_all_ciphers 254 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+SXNET_new 255 3_0_0 EXIST::FUNCTION:
+EVP_camellia_256_ctr 256 3_0_0 EXIST::FUNCTION:CAMELLIA
+d2i_PKCS8_PRIV_KEY_INFO 257 3_0_0 EXIST::FUNCTION:
+EVP_md2 259 3_0_0 EXIST::FUNCTION:MD2
+RC2_ecb_encrypt 260 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC2
+ENGINE_register_DH 261 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ASN1_NULL_free 262 3_0_0 EXIST::FUNCTION:
+EC_KEY_copy 263 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_des_ede3 264 3_0_0 EXIST::FUNCTION:DES
+PKCS7_add1_attrib_digest 265 3_0_0 EXIST::FUNCTION:
+EC_POINT_get_affine_coordinates_GFp 266 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_seed_ecb 267 3_0_0 EXIST::FUNCTION:SEED
+BIO_dgram_sctp_wait_for_dry 268 3_0_0 EXIST::FUNCTION:DGRAM,SCTP
+ASN1_OCTET_STRING_NDEF_it 269 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_get_count 270 3_0_0 EXIST::FUNCTION:
+WHIRLPOOL_Init 271 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,WHIRLPOOL
+EVP_OpenInit 272 3_0_0 EXIST::FUNCTION:
+OCSP_response_get1_basic 273 3_0_0 EXIST::FUNCTION:OCSP
+CRYPTO_gcm128_tag 274 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_parse_url 275 3_0_0 EXIST::FUNCTION:
+UI_get0_test_string 276 3_0_0 EXIST::FUNCTION:
+CRYPTO_secure_free 277 3_0_0 EXIST::FUNCTION:
+DSA_print_fp 278 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+X509_get_ext_d2i 279 3_0_0 EXIST::FUNCTION:
+d2i_PKCS7_ENC_CONTENT 280 3_0_0 EXIST::FUNCTION:
+BUF_MEM_grow 281 3_0_0 EXIST::FUNCTION:
+TS_REQ_free 282 3_0_0 EXIST::FUNCTION:TS
+PEM_read_DHparams 283 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH,STDIO
+RSA_private_decrypt 284 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509V3_EXT_get_nid 285 3_0_0 EXIST::FUNCTION:
+BIO_s_log 286 3_0_0 EXIST::FUNCTION:
+EC_POINT_set_to_infinity 287 3_0_0 EXIST::FUNCTION:EC
+EVP_des_ede_ofb 288 3_0_0 EXIST::FUNCTION:DES
+ECDH_KDF_X9_62 289 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ASN1_UNIVERSALSTRING_to_string 290 3_0_0 EXIST::FUNCTION:
+CRYPTO_gcm128_setiv 291 3_0_0 EXIST::FUNCTION:
+ASN1_PCTX_set_oid_flags 292 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_INTEGER 293 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_ENCRYPT 294 3_0_0 EXIST::FUNCTION:
+CT_POLICY_EVAL_CTX_set1_issuer 295 3_0_0 EXIST::FUNCTION:CT
+X509_NAME_ENTRY_set 296 3_0_0 EXIST::FUNCTION:
+PKCS8_set0_pbe 297 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_DSA_PUBKEY 298 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+PEM_X509_INFO_read_bio 299 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get0_order 300 3_0_0 EXIST::FUNCTION:EC
+OCSP_BASICRESP_delete_ext 301 3_0_0 EXIST::FUNCTION:OCSP
+PKCS12_get_attr_gen 302 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_get0_safes 303 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_derive 304 3_0_0 EXIST::FUNCTION:
+OCSP_BASICRESP_get_ext_by_NID 305 3_0_0 EXIST::FUNCTION:OCSP
+OBJ_dup 306 3_0_0 EXIST::FUNCTION:
+CMS_signed_get_attr_count 307 3_0_0 EXIST::FUNCTION:CMS
+EC_get_builtin_curves 308 3_0_0 EXIST::FUNCTION:EC
+i2d_ASN1_IA5STRING 309 3_0_0 EXIST::FUNCTION:
+OCSP_check_nonce 310 3_0_0 EXIST::FUNCTION:OCSP
+X509_STORE_CTX_init 311 3_0_0 EXIST::FUNCTION:
+OCSP_RESPONSE_free 312 3_0_0 EXIST::FUNCTION:OCSP
+ENGINE_set_DH 313 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_CIPHER_CTX_set_flags 314 3_0_0 EXIST::FUNCTION:
+err_free_strings_int 315 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_PKCS7_stream 316 3_0_0 EXIST::FUNCTION:
+d2i_X509_CERT_AUX 317 3_0_0 EXIST::FUNCTION:
+UI_process 318 3_0_0 EXIST::FUNCTION:
+X509_get_subject_name 319 3_0_0 EXIST::FUNCTION:
+DH_get_1024_160 320 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+i2d_ASN1_UNIVERSALSTRING 321 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_RESPID 322 3_0_0 EXIST::FUNCTION:OCSP
+BIO_s_accept 323 3_0_0 EXIST::FUNCTION:SOCK
+EVP_whirlpool 324 3_0_0 EXIST::FUNCTION:WHIRLPOOL
+OCSP_ONEREQ_get1_ext_d2i 325 3_0_0 EXIST::FUNCTION:OCSP
+d2i_ESS_SIGNING_CERT 326 3_0_0 EXIST::FUNCTION:
+EC_KEY_set_default_method 327 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_OBJECT_up_ref_count 328 3_0_0 EXIST::FUNCTION:
+RAND_load_file 329 3_0_0 EXIST::FUNCTION:
+BIO_ctrl_reset_read_request 330 3_0_0 EXIST::FUNCTION:
+CRYPTO_ccm128_tag 331 3_0_0 EXIST::FUNCTION:
+BIO_new_dgram_sctp 332 3_0_0 EXIST::FUNCTION:DGRAM,SCTP
+d2i_RSAPrivateKey_fp 333 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+s2i_ASN1_IA5STRING 334 3_0_0 EXIST::FUNCTION:
+UI_get_ex_data 335 3_0_0 EXIST::FUNCTION:
+EVP_EncryptUpdate 336 3_0_0 EXIST::FUNCTION:
+SRP_create_verifier 337 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+TS_TST_INFO_print_bio 338 3_0_0 EXIST::FUNCTION:TS
+X509_NAME_get_index_by_OBJ 339 3_0_0 EXIST::FUNCTION:
+BIO_get_host_ip 340 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SOCK
+PKCS7_add_certificate 341 3_0_0 EXIST::FUNCTION:
+TS_REQ_get_ext 342 3_0_0 EXIST::FUNCTION:TS
+X509_NAME_cmp 343 3_0_0 EXIST::FUNCTION:
+DIST_POINT_it 344 3_0_0 EXIST::FUNCTION:
+PEM_read_X509_CRL 345 3_0_0 EXIST::FUNCTION:STDIO
+OPENSSL_sk_sort 346 3_0_0 EXIST::FUNCTION:
+CTLOG_STORE_load_file 347 3_0_0 EXIST::FUNCTION:CT
+ASN1_SEQUENCE_it 348 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_get_tst_info 349 3_0_0 EXIST::FUNCTION:TS
+RC4 350 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC4
+PKCS7_stream 352 3_0_0 EXIST::FUNCTION:
+i2t_ASN1_OBJECT 353 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get0_generator 354 3_0_0 EXIST::FUNCTION:EC
+RSA_padding_add_PKCS1_PSS_mgf1 355 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_MD_meth_set_init 356 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_get_issuer_name 357 3_0_0 EXIST::FUNCTION:
+EVP_SignFinal 358 3_0_0 EXIST::FUNCTION:
+PKCS12_mac_present 359 3_0_0 EXIST::FUNCTION:
+d2i_PUBKEY_bio 360 3_0_0 EXIST::FUNCTION:
+BN_asc2bn 361 3_0_0 EXIST::FUNCTION:
+EVP_desx_cbc 362 3_0_0 EXIST::FUNCTION:DES
+SXNETID_it 363 3_0_0 EXIST::FUNCTION:
+CRYPTO_gcm128_encrypt 364 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_ctrl_str 365 3_0_0 EXIST::FUNCTION:
+CMS_signed_add1_attr_by_txt 366 3_0_0 EXIST::FUNCTION:CMS
+i2d_NETSCAPE_SPKAC 367 3_0_0 EXIST::FUNCTION:
+X509V3_add_value_bool_nf 368 3_0_0 EXIST::FUNCTION:
+ASN1_item_verify 369 3_0_0 EXIST::FUNCTION:
+SEED_ecb_encrypt 370 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SEED
+X509_PUBKEY_get0_param 371 3_0_0 EXIST::FUNCTION:
+ASN1_i2d_fp 372 3_0_0 EXIST::FUNCTION:STDIO
+BIO_new_mem_buf 373 3_0_0 EXIST::FUNCTION:
+UI_get_input_flags 374 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_REQ_add_nconf 375 3_0_0 EXIST::FUNCTION:
+X509v3_asid_subset 376 3_0_0 EXIST::FUNCTION:RFC3779
+RSA_check_key_ex 377 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_TS_MSG_IMPRINT_bio 378 3_0_0 EXIST::FUNCTION:TS
+i2d_ASN1_TYPE 379 3_0_0 EXIST::FUNCTION:
+EVP_aes_256_wrap_pad 380 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_kekri_id_cmp 381 3_0_0 EXIST::FUNCTION:CMS
+X509_VERIFY_PARAM_get0_peername 382 3_0_0 EXIST::FUNCTION:
+ASN1_PCTX_get_oid_flags 383 3_0_0 EXIST::FUNCTION:
+CONF_free 384 3_0_0 EXIST::FUNCTION:
+DSO_get_filename 385 3_0_0 EXIST::FUNCTION:
+i2d_ASN1_SEQUENCE_ANY 387 3_0_0 EXIST::FUNCTION:
+OPENSSL_strlcpy 388 3_0_0 EXIST::FUNCTION:
+BIO_get_port 389 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SOCK
+DISPLAYTEXT_free 390 3_0_0 EXIST::FUNCTION:
+BN_div 391 3_0_0 EXIST::FUNCTION:
+RIPEMD160_Update 392 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RMD160
+PEM_write_bio_CMS 393 3_0_0 EXIST::FUNCTION:CMS
+ASN1_OBJECT_new 394 3_0_0 EXIST::FUNCTION:
+EVP_des_ede3_cfb8 395 3_0_0 EXIST::FUNCTION:DES
+BIO_dump_indent_fp 396 3_0_0 EXIST::FUNCTION:STDIO
+X509_NAME_ENTRY_get_data 397 3_0_0 EXIST::FUNCTION:
+BIO_socket 398 3_0_0 EXIST::FUNCTION:SOCK
+EVP_PKEY_meth_get_derive 399 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_STRING_clear_free 400 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_REVOKEDINFO 401 3_0_0 EXIST::FUNCTION:OCSP
+ASN1_STRING_print_ex_fp 402 3_0_0 EXIST::FUNCTION:STDIO
+PKCS7_SIGNED_new 403 3_0_0 EXIST::FUNCTION:
+CMS_get0_eContentType 404 3_0_0 EXIST::FUNCTION:CMS
+HMAC_Final 405 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_CRL_delete_ext 406 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_ordering 407 3_0_0 EXIST::FUNCTION:TS
+X509_get_extended_key_usage 408 3_0_0 EXIST::FUNCTION:
+ERR_print_errors 409 3_0_0 EXIST::FUNCTION:
+X509_REVOKED_set_revocationDate 410 3_0_0 EXIST::FUNCTION:
+EVP_CipherFinal_ex 411 3_0_0 EXIST::FUNCTION:
+d2i_DSA_PUBKEY 412 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+BN_CTX_get 413 3_0_0 EXIST::FUNCTION:
+BN_to_montgomery 414 3_0_0 EXIST::FUNCTION:
+X509_OBJECT_get0_X509_CRL 415 3_0_0 EXIST::FUNCTION:
+EVP_camellia_128_cfb8 416 3_0_0 EXIST::FUNCTION:CAMELLIA
+EC_KEY_METHOD_free 417 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+TS_TST_INFO_set_policy_id 418 3_0_0 EXIST::FUNCTION:TS
+d2i_EXTENDED_KEY_USAGE 419 3_0_0 EXIST::FUNCTION:
+ASYNC_unblock_pause 420 3_0_0 EXIST::FUNCTION:
+i2d_X509_VAL 421 3_0_0 EXIST::FUNCTION:
+ASN1_SCTX_get_flags 422 3_0_0 EXIST::FUNCTION:
+RIPEMD160 423 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RMD160
+CRYPTO_ocb128_setiv 424 3_0_0 EXIST::FUNCTION:OCB
+X509_CRL_digest 425 3_0_0 EXIST::FUNCTION:
+EVP_aes_128_cbc_hmac_sha1 426 3_0_0 EXIST::FUNCTION:
+ERR_load_CMS_strings 427 3_0_0 EXIST::FUNCTION:CMS,DEPRECATEDIN_3_0
+EVP_MD_CTX_md 428 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_REVOKED_get_ext 429 3_0_0 EXIST::FUNCTION:
+d2i_RSA_PSS_PARAMS 430 3_0_0 EXIST::FUNCTION:
+USERNOTICE_free 431 3_0_0 EXIST::FUNCTION:
+MD4_Transform 432 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD4
+EVP_CIPHER_get_block_size 433 3_0_0 EXIST::FUNCTION:
+CERTIFICATEPOLICIES_new 434 3_0_0 EXIST::FUNCTION:
+BIO_dump_fp 435 3_0_0 EXIST::FUNCTION:STDIO
+BIO_set_flags 436 3_0_0 EXIST::FUNCTION:
+BN_is_one 437 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_def_policy 438 3_0_0 EXIST::FUNCTION:TS
+DSA_free 439 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+BN_GENCB_new 440 3_0_0 EXIST::FUNCTION:
+X509_VAL_new 441 3_0_0 EXIST::FUNCTION:
+NCONF_load 442 3_0_0 EXIST::FUNCTION:
+ASN1_put_object 443 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_RESPONSE 444 3_0_0 EXIST::FUNCTION:OCSP
+d2i_PublicKey 445 3_0_0 EXIST::FUNCTION:
+ENGINE_set_ex_data 446 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_get_default_private_dir 447 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set0_dane 448 3_0_0 EXIST::FUNCTION:
+EVP_des_ecb 449 3_0_0 EXIST::FUNCTION:DES
+OCSP_resp_get0 450 3_0_0 EXIST::FUNCTION:OCSP
+RSA_X931_generate_key_ex 452 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_get_serialNumber 453 3_0_0 EXIST::FUNCTION:
+BIO_sock_should_retry 454 3_0_0 EXIST::FUNCTION:SOCK
+ENGINE_get_digests 455 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+TS_MSG_IMPRINT_get_algo 456 3_0_0 EXIST::FUNCTION:TS
+DH_new_method 457 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+BF_ecb_encrypt 458 3_0_0 EXIST::FUNCTION:BF,DEPRECATEDIN_3_0
+PEM_write_bio_DHparams 459 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+EVP_DigestFinal 460 3_0_0 EXIST::FUNCTION:
+CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE 461 3_0_0 EXIST::FUNCTION:CT
+X509v3_asid_add_id_or_range 462 3_0_0 EXIST::FUNCTION:RFC3779
+X509_NAME_ENTRY_create_by_NID 463 3_0_0 EXIST::FUNCTION:
+EC_KEY_METHOD_get_init 464 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ASN1_INTEGER_to_BN 465 3_0_0 EXIST::FUNCTION:
+OPENSSL_memcmp 466 3_0_0 NOEXIST::FUNCTION:
+BUF_MEM_new 467 3_0_0 EXIST::FUNCTION:
+DSO_set_filename 468 3_0_0 EXIST::FUNCTION:
+DH_new 469 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+OCSP_RESPID_free 470 3_0_0 EXIST::FUNCTION:OCSP
+PKCS5_pbe2_set 471 3_0_0 EXIST::FUNCTION:
+SCT_set_signature_nid 473 3_0_0 EXIST::FUNCTION:CT
+i2d_RSA_PUBKEY_fp 474 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+PKCS12_BAGS_it 475 3_0_0 EXIST::FUNCTION:
+X509_pubkey_digest 476 3_0_0 EXIST::FUNCTION:
+ENGINE_register_all_RSA 477 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+CRYPTO_THREAD_set_local 478 3_0_0 EXIST::FUNCTION:
+X509_get_default_cert_dir_env 479 3_0_0 EXIST::FUNCTION:
+X509_CRL_sort 480 3_0_0 EXIST::FUNCTION:
+i2d_RSA_PUBKEY_bio 481 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_T61STRING_free 482 3_0_0 EXIST::FUNCTION:
+PEM_write_CMS 483 3_0_0 EXIST::FUNCTION:CMS,STDIO
+OPENSSL_sk_find 484 3_0_0 EXIST::FUNCTION:
+ENGINE_get_ciphers 485 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_rc2_ofb 486 3_0_0 EXIST::FUNCTION:RC2
+EVP_PKEY_set1_RSA 487 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CMS_SignerInfo_get0_md_ctx 488 3_0_0 EXIST::FUNCTION:CMS
+X509_STORE_set_trust 489 3_0_0 EXIST::FUNCTION:
+d2i_POLICYINFO 490 3_0_0 EXIST::FUNCTION:
+DES_cbc_encrypt 491 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+BN_GF2m_mod_sqr_arr 492 3_0_0 EXIST::FUNCTION:EC2M
+ASN1_PRINTABLESTRING_it 493 3_0_0 EXIST::FUNCTION:
+BIO_f_cipher 494 3_0_0 EXIST::FUNCTION:
+UI_destroy_method 495 3_0_0 EXIST::FUNCTION:
+BN_get_rfc3526_prime_3072 496 3_0_0 EXIST::FUNCTION:
+X509_INFO_new 497 3_0_0 EXIST::FUNCTION:
+OCSP_RESPDATA_it 498 3_0_0 EXIST::FUNCTION:OCSP
+X509_CRL_print 499 3_0_0 EXIST::FUNCTION:
+WHIRLPOOL_Update 500 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,WHIRLPOOL
+DSA_get_ex_data 501 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+BN_copy 502 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_add0_policy 504 3_0_0 EXIST::FUNCTION:
+PKCS7_cert_from_signer_info 505 3_0_0 EXIST::FUNCTION:
+X509_TRUST_get_trust 506 3_0_0 EXIST::FUNCTION:
+DES_string_to_key 507 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+ERR_error_string 508 3_0_0 EXIST::FUNCTION:
+BIO_new_connect 509 3_0_0 EXIST::FUNCTION:SOCK
+DSA_new_method 511 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+OCSP_CERTID_new 512 3_0_0 EXIST::FUNCTION:OCSP
+X509_CRL_get_signature_nid 513 3_0_0 EXIST::FUNCTION:
+X509_policy_level_node_count 514 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_CERTSTATUS 515 3_0_0 EXIST::FUNCTION:OCSP
+X509V3_add1_i2d 516 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_set_serial 517 3_0_0 EXIST::FUNCTION:TS
+OCSP_RESPBYTES_new 518 3_0_0 EXIST::FUNCTION:OCSP
+OCSP_SINGLERESP_delete_ext 519 3_0_0 EXIST::FUNCTION:OCSP
+EVP_MD_CTX_test_flags 521 3_0_0 EXIST::FUNCTION:
+X509v3_addr_validate_path 522 3_0_0 EXIST::FUNCTION:RFC3779
+BIO_new_fp 523 3_0_0 EXIST::FUNCTION:STDIO
+EC_GROUP_set_generator 524 3_0_0 EXIST::FUNCTION:EC
+CRYPTO_memdup 525 3_0_0 EXIST::FUNCTION:
+DH_generate_parameters 526 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_0_9_8,DH
+BN_set_negative 527 3_0_0 EXIST::FUNCTION:
+i2d_TS_RESP_bio 528 3_0_0 EXIST::FUNCTION:TS
+ASYNC_WAIT_CTX_set_wait_fd 529 3_0_0 EXIST::FUNCTION:
+ERR_func_error_string 530 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_STRING_data 531 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0
+X509_CRL_add1_ext_i2d 532 3_0_0 EXIST::FUNCTION:
+i2d_TS_TST_INFO 533 3_0_0 EXIST::FUNCTION:TS
+OBJ_sigid_free 534 3_0_0 EXIST::FUNCTION:
+TS_STATUS_INFO_get0_status 535 3_0_0 EXIST::FUNCTION:TS
+EC_KEY_get_flags 536 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ASN1_TYPE_cmp 537 3_0_0 EXIST::FUNCTION:
+i2d_RSAPublicKey 538 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EC_GROUP_get_trinomial_basis 539 3_0_0 EXIST::FUNCTION:EC,EC2M
+BIO_ADDRINFO_protocol 540 3_0_0 EXIST::FUNCTION:SOCK
+i2d_PBKDF2PARAM 541 3_0_0 EXIST::FUNCTION:
+ENGINE_unregister_RAND 542 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+PEM_write_bio_RSAPrivateKey 543 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CONF_get_number 544 3_0_0 EXIST::FUNCTION:
+X509_EXTENSION_get_object 545 3_0_0 EXIST::FUNCTION:
+X509_EXTENSIONS_it 546 3_0_0 EXIST::FUNCTION:
+EC_POINT_set_compressed_coordinates_GF2m 547 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC2M
+RSA_sign_ASN1_OCTET_STRING 548 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_X509_CRL_fp 549 3_0_0 EXIST::FUNCTION:STDIO
+i2d_RSA_PUBKEY 550 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_aes_128_ccm 551 3_0_0 EXIST::FUNCTION:
+ECParameters_print 552 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+OCSP_SINGLERESP_get1_ext_d2i 553 3_0_0 EXIST::FUNCTION:OCSP
+RAND_status 554 3_0_0 EXIST::FUNCTION:
+EVP_ripemd160 555 3_0_0 EXIST::FUNCTION:RMD160
+EVP_MD_meth_set_final 556 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_get_cmd_defns 557 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+d2i_PKEY_USAGE_PERIOD 558 3_0_0 EXIST::FUNCTION:
+RSAPublicKey_dup 559 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RAND_write_file 560 3_0_0 EXIST::FUNCTION:
+BN_GF2m_mod 561 3_0_0 EXIST::FUNCTION:EC2M
+EC_GROUP_get_pentanomial_basis 562 3_0_0 EXIST::FUNCTION:EC,EC2M
+X509_CINF_free 563 3_0_0 EXIST::FUNCTION:
+X509_EXTENSION_free 564 3_0_0 EXIST::FUNCTION:
+EVP_DigestSignInit 565 3_0_0 EXIST::FUNCTION:
+CT_POLICY_EVAL_CTX_get0_issuer 566 3_0_0 EXIST::FUNCTION:CT
+TLS_FEATURE_new 567 3_0_0 EXIST::FUNCTION:
+RSA_get_default_method 568 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CRYPTO_cts128_encrypt_block 569 3_0_0 EXIST::FUNCTION:
+ASN1_digest 570 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ERR_load_X509V3_strings 571 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_get_cleanup 572 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_X509 574 3_0_0 EXIST::FUNCTION:
+a2i_ASN1_STRING 575 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get_mont_data 576 3_0_0 EXIST::FUNCTION:EC
+CMAC_CTX_copy 577 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
+EVP_camellia_128_cfb128 579 3_0_0 EXIST::FUNCTION:CAMELLIA
+DH_compute_key_padded 580 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+ERR_load_CONF_strings 581 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ESS_ISSUER_SERIAL_dup 582 3_0_0 EXIST::FUNCTION:
+BN_GF2m_mod_exp_arr 583 3_0_0 EXIST::FUNCTION:EC2M
+ASN1_UTF8STRING_free 584 3_0_0 EXIST::FUNCTION:
+BN_X931_generate_prime_ex 585 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_get_RAND 586 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_DecryptInit 587 3_0_0 EXIST::FUNCTION:
+BN_bin2bn 588 3_0_0 EXIST::FUNCTION:
+X509_subject_name_hash 589 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_meth_set_flags 590 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+TS_CONF_set_clock_precision_digits 591 3_0_0 EXIST::FUNCTION:TS
+ASN1_TYPE_set 592 3_0_0 EXIST::FUNCTION:
+i2d_PKCS8_PRIV_KEY_INFO 593 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_bio 594 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_get_copy 595 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RAND_query_egd_bytes 596 3_0_0 EXIST::FUNCTION:EGD
+i2d_ASN1_PRINTABLE 597 3_0_0 EXIST::FUNCTION:
+ENGINE_cmd_is_executable 598 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BIO_puts 599 3_0_0 EXIST::FUNCTION:
+RSAPublicKey_it 601 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ISSUING_DIST_POINT_new 602 3_0_0 EXIST::FUNCTION:
+X509_VAL_it 603 3_0_0 EXIST::FUNCTION:
+EVP_DigestVerifyInit 604 3_0_0 EXIST::FUNCTION:
+i2d_IPAddressChoice 605 3_0_0 EXIST::FUNCTION:RFC3779
+EVP_md5 606 3_0_0 EXIST::FUNCTION:MD5
+ASRange_new 607 3_0_0 EXIST::FUNCTION:RFC3779
+BN_GF2m_mod_mul_arr 608 3_0_0 EXIST::FUNCTION:EC2M
+d2i_RSA_OAEP_PARAMS 609 3_0_0 EXIST::FUNCTION:
+BIO_s_bio 610 3_0_0 EXIST::FUNCTION:
+OBJ_NAME_add 611 3_0_0 EXIST::FUNCTION:
+BIO_fd_non_fatal_error 612 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_type 613 3_0_0 EXIST::FUNCTION:
+ENGINE_get_next 614 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BN_is_negative 615 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_attr_count 616 3_0_0 EXIST::FUNCTION:
+X509_REVOKED_get_ext_by_critical 617 3_0_0 EXIST::FUNCTION:
+X509at_get_attr 618 3_0_0 EXIST::FUNCTION:
+X509_PUBKEY_it 619 3_0_0 EXIST::FUNCTION:
+DES_ede3_ofb64_encrypt 620 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+EC_KEY_METHOD_get_compute_key 621 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+RC2_cfb64_encrypt 622 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC2
+EVP_EncryptFinal_ex 623 3_0_0 EXIST::FUNCTION:
+ERR_load_RSA_strings 624 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CRYPTO_secure_malloc_done 625 3_0_0 EXIST::FUNCTION:
+RSA_OAEP_PARAMS_new 626 3_0_0 EXIST::FUNCTION:
+X509_NAME_free 627 3_0_0 EXIST::FUNCTION:
+PKCS12_set_mac 628 3_0_0 EXIST::FUNCTION:
+UI_get0_result_string 629 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_add_policy 630 3_0_0 EXIST::FUNCTION:TS
+X509_REQ_dup 631 3_0_0 EXIST::FUNCTION:
+d2i_DSA_PUBKEY_fp 633 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+OSSL_HTTP_REQ_CTX_exchange 634 3_0_0 EXIST::FUNCTION:
+d2i_X509_REQ_fp 635 3_0_0 EXIST::FUNCTION:STDIO
+DH_OpenSSL 636 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+BN_get_rfc3526_prime_8192 637 3_0_0 EXIST::FUNCTION:
+X509_REVOKED_it 638 3_0_0 EXIST::FUNCTION:
+CRYPTO_THREAD_write_lock 639 3_0_0 EXIST::FUNCTION:
+X509V3_NAME_from_section 640 3_0_0 EXIST::FUNCTION:
+EC_POINT_set_compressed_coordinates_GFp 641 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+OCSP_SINGLERESP_get0_id 642 3_0_0 EXIST::FUNCTION:OCSP
+UI_add_info_string 643 3_0_0 EXIST::FUNCTION:
+OBJ_NAME_remove 644 3_0_0 EXIST::FUNCTION:
+UI_get_method 645 3_0_0 EXIST::FUNCTION:
+CONF_modules_unload 646 3_0_0 EXIST::FUNCTION:
+CRYPTO_ccm128_encrypt_ccm64 647 3_0_0 EXIST::FUNCTION:
+CRYPTO_secure_malloc_init 648 3_0_0 EXIST::FUNCTION:
+DSAparams_dup 649 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+PKCS8_PRIV_KEY_INFO_new 650 3_0_0 EXIST::FUNCTION:
+TS_RESP_verify_token 652 3_0_0 EXIST::FUNCTION:TS
+PEM_read_bio_CMS 653 3_0_0 EXIST::FUNCTION:CMS
+PEM_get_EVP_CIPHER_INFO 654 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_print 655 3_0_0 EXIST::FUNCTION:
+i2d_OCSP_SINGLERESP 656 3_0_0 EXIST::FUNCTION:OCSP
+ESS_CERT_ID_free 657 3_0_0 EXIST::FUNCTION:
+PEM_SignInit 658 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_set_key_length 659 3_0_0 EXIST::FUNCTION:
+X509_delete_ext 660 3_0_0 EXIST::FUNCTION:
+OCSP_resp_get0_produced_at 661 3_0_0 EXIST::FUNCTION:OCSP
+IDEA_encrypt 662 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,IDEA
+CRYPTO_nistcts128_encrypt_block 663 3_0_0 EXIST::FUNCTION:
+EVP_MD_do_all 664 3_0_0 EXIST::FUNCTION:
+EC_KEY_oct2priv 665 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+CONF_parse_list 666 3_0_0 EXIST::FUNCTION:
+ENGINE_set_table_flags 667 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_MD_meth_get_ctrl 668 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_TYPE_get_int_octetstring 669 3_0_0 EXIST::FUNCTION:
+PKCS5_pbe_set0_algor 670 3_0_0 EXIST::FUNCTION:
+ENGINE_get_table_flags 671 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+PKCS12_MAC_DATA_new 672 3_0_0 EXIST::FUNCTION:
+X509_chain_up_ref 673 3_0_0 EXIST::FUNCTION:
+OCSP_REQINFO_it 674 3_0_0 EXIST::FUNCTION:OCSP
+PKCS12_add_localkeyid 675 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_get0_type 676 3_0_0 EXIST::FUNCTION:
+X509_TRUST_set_default 677 3_0_0 EXIST::FUNCTION:
+TXT_DB_read 678 3_0_0 EXIST::FUNCTION:
+BN_sub 679 3_0_0 EXIST::FUNCTION:
+ASRange_free 680 3_0_0 EXIST::FUNCTION:RFC3779
+EVP_aes_192_cfb8 681 3_0_0 EXIST::FUNCTION:
+DSO_global_lookup 682 3_0_0 EXIST::FUNCTION:
+PKCS7_SIGNER_INFO_it 683 3_0_0 EXIST::FUNCTION:
+CRYPTO_ocb128_copy_ctx 684 3_0_0 EXIST::FUNCTION:OCB
+TS_REQ_get_ext_d2i 685 3_0_0 EXIST::FUNCTION:TS
+AES_ige_encrypt 686 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_SXNET 687 3_0_0 EXIST::FUNCTION:
+CTLOG_get0_log_id 688 3_0_0 EXIST::FUNCTION:CT
+CMS_RecipientInfo_ktri_get0_signer_id 689 3_0_0 EXIST::FUNCTION:CMS
+OCSP_REQUEST_add1_ext_i2d 690 3_0_0 EXIST::FUNCTION:OCSP
+EVP_PBE_CipherInit 691 3_0_0 EXIST::FUNCTION:
+DSA_dup_DH 692 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH,DSA
+CONF_imodule_get_value 693 3_0_0 EXIST::FUNCTION:
+OCSP_id_issuer_cmp 694 3_0_0 EXIST::FUNCTION:OCSP
+ASN1_INTEGER_free 695 3_0_0 EXIST::FUNCTION:
+BN_get0_nist_prime_224 696 3_0_0 EXIST::FUNCTION:
+OPENSSL_isservice 697 3_0_0 EXIST::FUNCTION:
+DH_compute_key 698 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+TS_RESP_CTX_set_signer_key 699 3_0_0 EXIST::FUNCTION:TS
+i2d_DSAPrivateKey_bio 700 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+ASN1_item_d2i 702 3_0_0 EXIST::FUNCTION:
+BIO_int_ctrl 703 3_0_0 EXIST::FUNCTION:
+CMS_ReceiptRequest_it 704 3_0_0 EXIST::FUNCTION:CMS
+X509_ATTRIBUTE_get0_type 705 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_set_copy 706 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_ASN1_ENUMERATED 707 3_0_0 EXIST::FUNCTION:
+d2i_ASIdOrRange 708 3_0_0 EXIST::FUNCTION:RFC3779
+i2s_ASN1_OCTET_STRING 709 3_0_0 EXIST::FUNCTION:
+X509_add1_reject_object 710 3_0_0 EXIST::FUNCTION:
+ERR_set_mark 711 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_VISIBLESTRING 712 3_0_0 EXIST::FUNCTION:
+X509_NAME_ENTRY_dup 714 3_0_0 EXIST::FUNCTION:
+X509_certificate_type 715 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PKCS7_add_signature 716 3_0_0 EXIST::FUNCTION:
+OBJ_ln2nid 717 3_0_0 EXIST::FUNCTION:
+CRYPTO_128_unwrap 718 3_0_0 EXIST::FUNCTION:
+BIO_new_PKCS7 719 3_0_0 EXIST::FUNCTION:
+UI_get0_user_data 720 3_0_0 EXIST::FUNCTION:
+TS_RESP_get_token 721 3_0_0 EXIST::FUNCTION:TS
+OCSP_RESPID_new 722 3_0_0 EXIST::FUNCTION:OCSP
+ASN1_SET_ANY_it 723 3_0_0 EXIST::FUNCTION:
+d2i_TS_RESP_bio 724 3_0_0 EXIST::FUNCTION:TS
+PEM_write_X509_REQ 725 3_0_0 EXIST::FUNCTION:STDIO
+BIO_snprintf 726 3_0_0 EXIST::FUNCTION:
+EC_POINT_hex2point 727 3_0_0 EXIST::FUNCTION:EC
+X509v3_get_ext_by_critical 728 3_0_0 EXIST::FUNCTION:
+ENGINE_get_default_RSA 729 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+DSA_sign_setup 730 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+OPENSSL_sk_new_null 731 3_0_0 EXIST::FUNCTION:
+PEM_read_PKCS8 732 3_0_0 EXIST::FUNCTION:STDIO
+BN_mod_sqr 733 3_0_0 EXIST::FUNCTION:
+CAST_ofb64_encrypt 734 3_0_0 EXIST::FUNCTION:CAST,DEPRECATEDIN_3_0
+TXT_DB_write 735 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_get1_ext_d2i 736 3_0_0 EXIST::FUNCTION:OCSP
+CMS_unsigned_add1_attr_by_NID 737 3_0_0 EXIST::FUNCTION:CMS
+BN_mod_exp_mont 738 3_0_0 EXIST::FUNCTION:
+d2i_DHxparams 739 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_size 740 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+CONF_imodule_get_name 741 3_0_0 EXIST::FUNCTION:
+ENGINE_get_pkey_meth_engine 742 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OCSP_BASICRESP_free 743 3_0_0 EXIST::FUNCTION:OCSP
+BN_set_params 744 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_0_9_8
+BN_add 745 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_free 746 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_ext_d2i 747 3_0_0 EXIST::FUNCTION:TS
+RSA_check_key 748 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+TS_MSG_IMPRINT_set_algo 749 3_0_0 EXIST::FUNCTION:TS
+BN_nist_mod_521 750 3_0_0 EXIST::FUNCTION:
+CRYPTO_THREAD_get_local 751 3_0_0 EXIST::FUNCTION:
+PKCS7_to_TS_TST_INFO 752 3_0_0 EXIST::FUNCTION:TS
+X509_STORE_CTX_new 753 3_0_0 EXIST::FUNCTION:
+CTLOG_STORE_new 754 3_0_0 EXIST::FUNCTION:CT
+EVP_CIPHER_meth_set_cleanup 755 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_PKCS12_SAFEBAG 756 3_0_0 EXIST::FUNCTION:
+EVP_MD_get_pkey_type 757 3_0_0 EXIST::FUNCTION:
+X509_policy_node_get0_qualifiers 758 3_0_0 EXIST::FUNCTION:
+OCSP_cert_status_str 759 3_0_0 EXIST::FUNCTION:OCSP
+EVP_MD_meth_get_flags 760 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_ENUMERATED_set 761 3_0_0 EXIST::FUNCTION:
+UI_UTIL_read_pw 762 3_0_0 EXIST::FUNCTION:
+PKCS7_ENC_CONTENT_free 763 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_type 764 3_0_0 EXIST::FUNCTION:CMS
+OCSP_BASICRESP_get_ext 765 3_0_0 EXIST::FUNCTION:OCSP
+BN_lebin2bn 766 3_0_0 EXIST::FUNCTION:
+AES_decrypt 767 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BIO_fd_should_retry 768 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_new 769 3_0_0 EXIST::FUNCTION:
+ENGINE_init 770 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+TS_RESP_CTX_add_flags 771 3_0_0 EXIST::FUNCTION:TS
+BIO_gethostbyname 772 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SOCK
+X509V3_EXT_add 773 3_0_0 EXIST::FUNCTION:
+UI_add_verify_string 774 3_0_0 EXIST::FUNCTION:
+EVP_rc5_32_12_16_cfb64 775 3_0_0 EXIST::FUNCTION:RC5
+PKCS7_dataVerify 776 3_0_0 EXIST::FUNCTION:
+PKCS7_SIGNER_INFO_free 777 3_0_0 EXIST::FUNCTION:
+PKCS7_add_attrib_smimecap 778 3_0_0 EXIST::FUNCTION:
+ERR_peek_last_error_line_data 779 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_set_sign 780 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_i2d_bio 781 3_0_0 EXIST::FUNCTION:
+DSA_verify 782 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+i2a_ASN1_OBJECT 783 3_0_0 EXIST::FUNCTION:
+i2d_PKEY_USAGE_PERIOD 784 3_0_0 EXIST::FUNCTION:
+DSA_new 785 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+PEM_read_bio_X509_CRL 786 3_0_0 EXIST::FUNCTION:
+PKCS7_dataDecode 787 3_0_0 EXIST::FUNCTION:
+DSA_up_ref 788 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+EVP_DecryptInit_ex 789 3_0_0 EXIST::FUNCTION:
+CONF_get1_default_config_file 790 3_0_0 EXIST::FUNCTION:
+CRYPTO_ocb128_encrypt 791 3_0_0 EXIST::FUNCTION:OCB
+EXTENDED_KEY_USAGE_new 792 3_0_0 EXIST::FUNCTION:
+EVP_EncryptFinal 793 3_0_0 EXIST::FUNCTION:
+PEM_write_ECPrivateKey 794 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+EVP_CIPHER_meth_set_get_asn1_params 796 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PKCS7_dataInit 797 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_app_data 798 3_0_0 EXIST::FUNCTION:
+a2i_GENERAL_NAME 799 3_0_0 EXIST::FUNCTION:
+SXNETID_new 800 3_0_0 EXIST::FUNCTION:
+RC4_options 801 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC4
+BIO_f_null 802 3_0_0 EXIST::FUNCTION:
+EC_GROUP_set_curve_name 803 3_0_0 EXIST::FUNCTION:EC
+d2i_PBE2PARAM 804 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_security_bits 805 3_0_0 EXIST::FUNCTION:
+PKCS12_unpack_p7encdata 806 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_i2d 807 3_0_0 EXIST::FUNCTION:
+X509V3_get_value_bool 808 3_0_0 EXIST::FUNCTION:
+X509_verify_cert_error_string 809 3_0_0 EXIST::FUNCTION:
+d2i_X509_PUBKEY 810 3_0_0 EXIST::FUNCTION:
+i2a_ASN1_ENUMERATED 811 3_0_0 EXIST::FUNCTION:
+PKCS7_ISSUER_AND_SERIAL_new 812 3_0_0 EXIST::FUNCTION:
+d2i_USERNOTICE 813 3_0_0 EXIST::FUNCTION:
+X509_cmp 814 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set1_EC_KEY 815 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ECPKParameters_print_fp 816 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+GENERAL_SUBTREE_free 817 3_0_0 EXIST::FUNCTION:
+RSA_blinding_off 818 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_OCSP_REVOKEDINFO 819 3_0_0 EXIST::FUNCTION:OCSP
+X509V3_add_standard_extensions 820 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_RSA_PUBKEY 821 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_ASN1_UTF8STRING 822 3_0_0 EXIST::FUNCTION:
+TS_REQ_delete_ext 823 3_0_0 EXIST::FUNCTION:TS
+PKCS7_DIGEST_free 824 3_0_0 EXIST::FUNCTION:
+OBJ_nid2ln 825 3_0_0 EXIST::FUNCTION:
+COMP_CTX_new 826 3_0_0 EXIST::FUNCTION:COMP
+BIO_ADDR_family 827 3_0_0 EXIST::FUNCTION:SOCK
+OCSP_RESPONSE_it 828 3_0_0 EXIST::FUNCTION:OCSP
+BIO_ADDRINFO_socktype 829 3_0_0 EXIST::FUNCTION:SOCK
+d2i_X509_REQ_bio 830 3_0_0 EXIST::FUNCTION:
+EVP_PBE_cleanup 831 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get0_current_crl 832 3_0_0 EXIST::FUNCTION:
+CMS_get0_SignerInfos 833 3_0_0 EXIST::FUNCTION:CMS
+EVP_PKEY_paramgen 834 3_0_0 EXIST::FUNCTION:
+PEM_write_PKCS8PrivateKey_nid 835 3_0_0 EXIST::FUNCTION:STDIO
+PKCS7_ATTR_VERIFY_it 836 3_0_0 EXIST::FUNCTION:
+OCSP_response_status_str 837 3_0_0 EXIST::FUNCTION:OCSP
+CRYPTO_gcm128_new 838 3_0_0 EXIST::FUNCTION:
+SMIME_read_PKCS7 839 3_0_0 EXIST::FUNCTION:
+EC_GROUP_copy 840 3_0_0 EXIST::FUNCTION:EC
+ENGINE_set_ciphers 841 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OPENSSL_LH_doall_arg 842 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_get_ext_by_NID 843 3_0_0 EXIST::FUNCTION:OCSP
+X509_REQ_get_attr_by_NID 844 3_0_0 EXIST::FUNCTION:
+PBE2PARAM_new 845 3_0_0 EXIST::FUNCTION:
+DES_ecb_encrypt 846 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+EVP_camellia_256_ecb 847 3_0_0 EXIST::FUNCTION:CAMELLIA
+PEM_read_RSA_PUBKEY 848 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+d2i_NETSCAPE_SPKAC 849 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_check 851 3_0_0 EXIST::FUNCTION:
+PKCS7_DIGEST_new 852 3_0_0 EXIST::FUNCTION:
+i2d_TS_TST_INFO_fp 853 3_0_0 EXIST::FUNCTION:STDIO,TS
+d2i_PKCS8_fp 854 3_0_0 EXIST::FUNCTION:STDIO
+EVP_PKEY_keygen 855 3_0_0 EXIST::FUNCTION:
+X509_CRL_dup 856 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_cb 857 3_0_0 EXIST::FUNCTION:
+X509_STORE_free 858 3_0_0 EXIST::FUNCTION:
+ECDSA_sign_ex 859 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+TXT_DB_insert 860 3_0_0 EXIST::FUNCTION:
+EC_POINTs_make_affine 861 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+RSA_padding_add_PKCS1_PSS 862 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BF_options 863 3_0_0 EXIST::FUNCTION:BF,DEPRECATEDIN_3_0
+OCSP_BASICRESP_it 864 3_0_0 EXIST::FUNCTION:OCSP
+X509_VERIFY_PARAM_get0_name 865 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_signer_digest 866 3_0_0 EXIST::FUNCTION:TS
+X509_VERIFY_PARAM_set1_email 867 3_0_0 EXIST::FUNCTION:
+BIO_sock_error 868 3_0_0 EXIST::FUNCTION:SOCK
+RSA_set_default_method 869 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BN_GF2m_mod_sqrt_arr 870 3_0_0 EXIST::FUNCTION:EC2M
+X509_get0_extensions 871 3_0_0 EXIST::FUNCTION:
+TS_STATUS_INFO_set_status 872 3_0_0 EXIST::FUNCTION:TS
+RSA_verify 873 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_FBOOLEAN_it 874 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_TIME 875 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_get_signctx 876 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EC_KEY_METHOD_set_compute_key 877 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_REQ_INFO_free 878 3_0_0 EXIST::FUNCTION:
+CMS_ReceiptRequest_create0 879 3_0_0 EXIST::FUNCTION:CMS
+EVP_MD_meth_set_cleanup 880 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_aes_128_xts 881 3_0_0 EXIST::FUNCTION:
+TS_RESP_verify_signature 883 3_0_0 EXIST::FUNCTION:TS
+ENGINE_set_pkey_meths 884 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+CMS_EncryptedData_decrypt 885 3_0_0 EXIST::FUNCTION:CMS
+CONF_module_add 886 3_0_0 EXIST::FUNCTION:
+ASN1_UTCTIME_print 887 3_0_0 EXIST::FUNCTION:
+X509_REQ_verify 888 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set_purpose 889 3_0_0 EXIST::FUNCTION:
+i2d_TS_MSG_IMPRINT_bio 890 3_0_0 EXIST::FUNCTION:TS
+X509_EXTENSION_set_object 891 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get_app_data 892 3_0_0 EXIST::FUNCTION:
+CRL_DIST_POINTS_it 893 3_0_0 EXIST::FUNCTION:
+DIRECTORYSTRING_new 894 3_0_0 EXIST::FUNCTION:
+ERR_load_ASYNC_strings 895 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_bf_cfb64 896 3_0_0 EXIST::FUNCTION:BF
+PKCS7_sign_add_signer 897 3_0_0 EXIST::FUNCTION:
+X509_print_ex 898 3_0_0 EXIST::FUNCTION:
+PKCS7_add_recipient 899 3_0_0 EXIST::FUNCTION:
+OCSP_SINGLERESP_add_ext 900 3_0_0 EXIST::FUNCTION:OCSP
+d2i_X509_SIG 901 3_0_0 EXIST::FUNCTION:
+X509_NAME_set 902 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_pop 903 3_0_0 EXIST::FUNCTION:
+ENGINE_register_ciphers 904 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+PKCS5_pbe2_set_iv 905 3_0_0 EXIST::FUNCTION:
+ASN1_add_stable_module 906 3_0_0 EXIST::FUNCTION:
+EVP_camellia_128_cbc 907 3_0_0 EXIST::FUNCTION:CAMELLIA
+COMP_zlib 908 3_0_0 EXIST::FUNCTION:COMP
+EVP_read_pw_string 909 3_0_0 EXIST::FUNCTION:
+i2d_ASN1_NULL 910 3_0_0 EXIST::FUNCTION:
+DES_encrypt1 911 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+BN_mod_lshift1_quick 912 3_0_0 EXIST::FUNCTION:
+BN_get_rfc3526_prime_6144 913 3_0_0 EXIST::FUNCTION:
+OBJ_obj2txt 914 3_0_0 EXIST::FUNCTION:
+UI_set_result 915 3_0_0 EXIST::FUNCTION:
+EVP_EncodeUpdate 916 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_X509_CRL 917 3_0_0 EXIST::FUNCTION:
+BN_cmp 918 3_0_0 EXIST::FUNCTION:
+CT_POLICY_EVAL_CTX_get0_log_store 919 3_0_0 EXIST::FUNCTION:CT
+CONF_set_default_method 920 3_0_0 EXIST::FUNCTION:
+ASN1_PCTX_get_nm_flags 921 3_0_0 EXIST::FUNCTION:
+X509_add1_ext_i2d 922 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_RECIP_INFO 924 3_0_0 EXIST::FUNCTION:
+PKCS1_MGF1 925 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BIO_vsnprintf 926 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get0_current_issuer 927 3_0_0 EXIST::FUNCTION:
+CRYPTO_secure_malloc_initialized 928 3_0_0 EXIST::FUNCTION:
+o2i_SCT_LIST 929 3_0_0 EXIST::FUNCTION:CT
+ASN1_PCTX_get_cert_flags 930 3_0_0 EXIST::FUNCTION:
+X509at_add1_attr_by_NID 931 3_0_0 EXIST::FUNCTION:
+DHparams_dup 932 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+X509_get_ext 933 3_0_0 EXIST::FUNCTION:
+X509_issuer_and_serial_hash 934 3_0_0 EXIST::FUNCTION:
+ASN1_BMPSTRING_it 935 3_0_0 EXIST::FUNCTION:
+PEM_read_EC_PUBKEY 936 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+d2i_ASN1_IA5STRING 937 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_ext_free 938 3_0_0 EXIST::FUNCTION:TS
+i2d_X509_CRL_fp 939 3_0_0 EXIST::FUNCTION:STDIO
+PKCS7_get0_signers 940 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set_ex_data 941 3_0_0 EXIST::FUNCTION:
+TS_VERIFY_CTX_set_certs 942 3_0_0 EXIST::FUNCTION:TS
+BN_MONT_CTX_copy 943 3_0_0 EXIST::FUNCTION:
+OPENSSL_INIT_new 945 3_0_0 EXIST::FUNCTION:
+TS_ACCURACY_dup 946 3_0_0 EXIST::FUNCTION:TS
+i2d_ECPrivateKey 947 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_NAME_ENTRY_create_by_OBJ 948 3_0_0 EXIST::FUNCTION:
+TS_VERIFY_CTX_cleanup 949 3_0_0 EXIST::FUNCTION:TS
+ASN1_INTEGER_get 950 3_0_0 EXIST::FUNCTION:
+ASN1_PRINTABLE_it 951 3_0_0 EXIST::FUNCTION:
+EVP_VerifyFinal 952 3_0_0 EXIST::FUNCTION:
+TS_ASN1_INTEGER_print_bio 953 3_0_0 EXIST::FUNCTION:TS
+X509_NAME_ENTRY_set_object 954 3_0_0 EXIST::FUNCTION:
+BIO_s_socket 955 3_0_0 EXIST::FUNCTION:SOCK
+EVP_rc5_32_12_16_ecb 956 3_0_0 EXIST::FUNCTION:RC5
+i2d_PKCS8_bio 957 3_0_0 EXIST::FUNCTION:
+v2i_ASN1_BIT_STRING 958 3_0_0 EXIST::FUNCTION:
+PKEY_USAGE_PERIOD_new 959 3_0_0 EXIST::FUNCTION:
+OBJ_NAME_init 960 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_keygen 961 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_PSS_PARAMS_new 962 3_0_0 EXIST::FUNCTION:
+RSA_sign 963 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_DigestVerifyFinal 964 3_0_0 EXIST::FUNCTION:
+d2i_RSA_PUBKEY_bio 965 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+TS_RESP_dup 966 3_0_0 EXIST::FUNCTION:TS
+ERR_set_error_data 967 3_0_0 EXIST::FUNCTION:
+BN_RECP_CTX_new 968 3_0_0 EXIST::FUNCTION:
+DES_options 969 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+IPAddressChoice_it 970 3_0_0 EXIST::FUNCTION:RFC3779
+ASN1_UNIVERSALSTRING_it 971 3_0_0 EXIST::FUNCTION:
+d2i_DSAPublicKey 972 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+ENGINE_get_name 973 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+CRYPTO_THREAD_read_lock 974 3_0_0 EXIST::FUNCTION:
+ASIdentifierChoice_free 975 3_0_0 EXIST::FUNCTION:RFC3779
+BIO_dgram_sctp_msg_waiting 976 3_0_0 EXIST::FUNCTION:DGRAM,SCTP
+BN_is_bit_set 978 3_0_0 EXIST::FUNCTION:
+AES_ofb128_encrypt 979 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_STORE_add_lookup 980 3_0_0 EXIST::FUNCTION:
+ASN1_GENERALSTRING_new 981 3_0_0 EXIST::FUNCTION:
+IDEA_options 982 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,IDEA
+d2i_X509_REQ 983 3_0_0 EXIST::FUNCTION:
+i2d_TS_STATUS_INFO 984 3_0_0 EXIST::FUNCTION:TS
+X509_PURPOSE_get_by_id 985 3_0_0 EXIST::FUNCTION:
+X509_get1_ocsp 986 3_0_0 EXIST::FUNCTION:
+ISSUING_DIST_POINT_free 987 3_0_0 EXIST::FUNCTION:
+ASN1_UTCTIME_free 988 3_0_0 EXIST::FUNCTION:
+ERR_load_TS_strings 989 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,TS
+BN_nist_mod_func 990 3_0_0 EXIST::FUNCTION:
+OCSP_ONEREQ_new 991 3_0_0 EXIST::FUNCTION:OCSP
+DSA_SIG_new 992 3_0_0 EXIST::FUNCTION:DSA
+DH_get_default_method 993 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+PEM_proc_type 994 3_0_0 EXIST::FUNCTION:
+BIO_printf 995 3_0_0 EXIST::FUNCTION:
+a2i_IPADDRESS 996 3_0_0 EXIST::FUNCTION:
+ERR_peek_error_line_data 997 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ERR_unload_strings 998 3_0_0 EXIST::FUNCTION:
+SEED_cfb128_encrypt 999 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SEED
+ASN1_BIT_STRING_it 1000 3_0_0 EXIST::FUNCTION:
+PKCS12_decrypt_skey 1001 3_0_0 EXIST::FUNCTION:
+ENGINE_register_EC 1002 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OCSP_RESPONSE_new 1003 3_0_0 EXIST::FUNCTION:OCSP
+CRYPTO_cbc128_encrypt 1004 3_0_0 EXIST::FUNCTION:
+i2d_RSAPublicKey_bio 1005 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_chain_check_suiteb 1006 3_0_0 EXIST::FUNCTION:
+i2d_OCSP_REQUEST 1007 3_0_0 EXIST::FUNCTION:OCSP
+BN_X931_generate_Xpq 1008 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_item_digest 1009 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set_trust 1010 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_error 1011 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_encrypt 1012 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_UTCTIME_it 1013 3_0_0 EXIST::FUNCTION:
+i2d_DSA_PUBKEY_fp 1014 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+X509at_get_attr_by_OBJ 1015 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_copy_ex 1016 3_0_0 EXIST::FUNCTION:
+UI_dup_error_string 1017 3_0_0 EXIST::FUNCTION:
+OPENSSL_LH_num_items 1018 3_0_0 EXIST::FUNCTION:
+ASN1_INTEGER_cmp 1020 3_0_0 EXIST::FUNCTION:
+X509_NAME_entry_count 1021 3_0_0 EXIST::FUNCTION:
+UI_method_set_closer 1022 3_0_0 EXIST::FUNCTION:
+OPENSSL_LH_get_down_load 1023 3_0_0 EXIST::FUNCTION:
+EVP_md4 1024 3_0_0 EXIST::FUNCTION:MD4
+X509_set_subject_name 1025 3_0_0 EXIST::FUNCTION:
+i2d_PKCS8PrivateKey_nid_bio 1026 3_0_0 EXIST::FUNCTION:
+ERR_put_error 1027 3_0_0 NOEXIST::FUNCTION:
+ERR_add_error_data 1028 3_0_0 EXIST::FUNCTION:
+X509_ALGORS_it 1029 3_0_0 EXIST::FUNCTION:
+MD5_Update 1030 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD5
+X509_policy_check 1031 3_0_0 EXIST::FUNCTION:
+X509_CRL_METHOD_new 1032 3_0_0 EXIST::FUNCTION:
+ASN1_ANY_it 1033 3_0_0 EXIST::FUNCTION:
+d2i_DSA_SIG 1034 3_0_0 EXIST::FUNCTION:DSA
+DH_free 1035 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+ENGINE_register_all_DSA 1036 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+TS_REQ_set_msg_imprint 1037 3_0_0 EXIST::FUNCTION:TS
+BN_mod_sub_quick 1038 3_0_0 EXIST::FUNCTION:
+SMIME_write_CMS 1039 3_0_0 EXIST::FUNCTION:CMS
+i2d_DSAPublicKey 1040 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+SMIME_text 1042 3_0_0 EXIST::FUNCTION:
+PKCS7_add_recipient_info 1043 3_0_0 EXIST::FUNCTION:
+BN_get_word 1044 3_0_0 EXIST::FUNCTION:
+EVP_CipherFinal 1045 3_0_0 EXIST::FUNCTION:
+i2d_X509_bio 1046 3_0_0 EXIST::FUNCTION:
+X509_EXTENSION_new 1047 3_0_0 EXIST::FUNCTION:
+X509_getm_notAfter 1048 3_0_0 EXIST::FUNCTION:
+X509_ALGOR_dup 1049 3_0_0 EXIST::FUNCTION:
+d2i_X509_REQ_INFO 1050 3_0_0 EXIST::FUNCTION:
+d2i_EC_PUBKEY_bio 1051 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_STORE_CTX_set_error 1052 3_0_0 EXIST::FUNCTION:
+EC_KEY_METHOD_set_keygen 1053 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+CRYPTO_free 1054 3_0_0 EXIST::FUNCTION:
+BN_GF2m_mod_exp 1055 3_0_0 EXIST::FUNCTION:EC2M
+OPENSSL_buf2hexstr 1056 3_0_0 EXIST::FUNCTION:
+DES_encrypt2 1057 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+DH_up_ref 1058 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+RC2_ofb64_encrypt 1059 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC2
+PKCS12_pbe_crypt 1060 3_0_0 EXIST::FUNCTION:
+ASIdentifiers_free 1061 3_0_0 EXIST::FUNCTION:RFC3779
+X509_VERIFY_PARAM_get0 1062 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_get_input_blocksize 1063 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+TS_ACCURACY_get_micros 1064 3_0_0 EXIST::FUNCTION:TS
+PKCS12_SAFEBAG_create_cert 1065 3_0_0 EXIST::FUNCTION:
+CRYPTO_mem_debug_malloc 1066 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0
+RAND_seed 1067 3_0_0 EXIST::FUNCTION:
+NETSCAPE_SPKAC_free 1068 3_0_0 EXIST::FUNCTION:
+X509_CRL_diff 1069 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set_flags 1070 3_0_0 EXIST::FUNCTION:
+X509_EXTENSION_set_data 1071 3_0_0 EXIST::FUNCTION:
+ENGINE_get_EC 1072 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ASN1_STRING_copy 1073 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_encrypt_old 1074 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OPENSSL_LH_free 1075 3_0_0 EXIST::FUNCTION:
+DES_is_weak_key 1076 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+EVP_PKEY_verify 1077 3_0_0 EXIST::FUNCTION:
+ERR_load_BIO_strings 1078 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BIO_nread 1079 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_RSAPrivateKey 1080 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OBJ_nid2obj 1081 3_0_0 EXIST::FUNCTION:
+CRYPTO_ofb128_encrypt 1082 3_0_0 EXIST::FUNCTION:
+ENGINE_set_init_function 1083 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+NCONF_default 1084 3_0_0 EXIST::FUNCTION:
+ENGINE_remove 1085 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ASYNC_get_current_job 1086 3_0_0 EXIST::FUNCTION:
+OBJ_nid2sn 1087 3_0_0 EXIST::FUNCTION:
+X509_gmtime_adj 1088 3_0_0 EXIST::FUNCTION:
+X509_add_ext 1089 3_0_0 EXIST::FUNCTION:
+ENGINE_set_DSA 1090 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EC_KEY_METHOD_set_sign 1091 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+d2i_TS_MSG_IMPRINT 1092 3_0_0 EXIST::FUNCTION:TS
+X509_print_ex_fp 1093 3_0_0 EXIST::FUNCTION:STDIO
+ERR_load_PEM_strings 1094 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_unregister_pkey_asn1_meths 1095 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+IPAddressFamily_free 1096 3_0_0 EXIST::FUNCTION:RFC3779
+UI_method_get_prompt_constructor 1097 3_0_0 EXIST::FUNCTION:
+ASN1_NULL_it 1098 3_0_0 EXIST::FUNCTION:
+X509_REQ_get_pubkey 1099 3_0_0 EXIST::FUNCTION:
+X509_CRL_set1_nextUpdate 1100 3_0_0 EXIST::FUNCTION:
+EVP_des_ede3_cfb64 1101 3_0_0 EXIST::FUNCTION:DES
+BN_to_ASN1_INTEGER 1102 3_0_0 EXIST::FUNCTION:
+EXTENDED_KEY_USAGE_free 1103 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_EC_PUBKEY 1104 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+BN_MONT_CTX_set 1105 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_serial 1106 3_0_0 EXIST::FUNCTION:TS
+X509_NAME_ENTRY_new 1107 3_0_0 EXIST::FUNCTION:
+RSA_security_bits 1108 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509v3_addr_add_prefix 1109 3_0_0 EXIST::FUNCTION:RFC3779
+X509_REQ_print_fp 1110 3_0_0 EXIST::FUNCTION:STDIO
+ASN1_item_ex_new 1111 3_0_0 EXIST::FUNCTION:
+BIO_s_datagram 1112 3_0_0 EXIST::FUNCTION:DGRAM
+PEM_write_bio_PKCS8 1113 3_0_0 EXIST::FUNCTION:
+ASN1_str2mask 1114 3_0_0 EXIST::FUNCTION:
+ASN1_TYPE_get 1115 3_0_0 EXIST::FUNCTION:
+i2d_X509_EXTENSIONS 1116 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get0_store 1117 3_0_0 EXIST::FUNCTION:
+PKCS12_pack_p7data 1118 3_0_0 EXIST::FUNCTION:
+RSA_print_fp 1119 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+OPENSSL_INIT_set_config_appname 1120 3_0_0 EXIST::FUNCTION:STDIO
+EC_KEY_print_fp 1121 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+BIO_dup_chain 1122 3_0_0 EXIST::FUNCTION:
+PKCS8_PRIV_KEY_INFO_it 1123 3_0_0 EXIST::FUNCTION:
+RSA_OAEP_PARAMS_free 1124 3_0_0 EXIST::FUNCTION:
+ASN1_item_new 1125 3_0_0 EXIST::FUNCTION:
+CRYPTO_cts128_encrypt 1126 3_0_0 EXIST::FUNCTION:
+RC2_encrypt 1127 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC2
+PEM_write 1128 3_0_0 EXIST::FUNCTION:STDIO
+EVP_CIPHER_meth_get_get_asn1_params 1129 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_OCSP_RESPBYTES 1130 3_0_0 EXIST::FUNCTION:OCSP
+d2i_ASN1_UTF8STRING 1131 3_0_0 EXIST::FUNCTION:
+EXTENDED_KEY_USAGE_it 1132 3_0_0 EXIST::FUNCTION:
+EVP_CipherInit 1133 3_0_0 EXIST::FUNCTION:
+PKCS12_add_safe 1134 3_0_0 EXIST::FUNCTION:
+ENGINE_get_digest 1135 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EC_GROUP_have_precompute_mult 1136 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+OPENSSL_gmtime 1137 3_0_0 EXIST::FUNCTION:
+X509_set_issuer_name 1138 3_0_0 EXIST::FUNCTION:
+RSA_new 1139 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_STRING_set_by_NID 1140 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_PKCS7 1141 3_0_0 EXIST::FUNCTION:
+MDC2_Final 1142 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MDC2
+SMIME_crlf_copy 1143 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_get_ext_count 1144 3_0_0 EXIST::FUNCTION:OCSP
+OSSL_HTTP_REQ_CTX_new 1145 3_0_0 EXIST::FUNCTION:
+X509_load_cert_crl_file 1146 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_new_mac_key 1147 3_0_0 EXIST::FUNCTION:
+DIST_POINT_new 1148 3_0_0 EXIST::FUNCTION:
+BN_is_prime_fasttest 1149 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_0_9_8
+EC_POINT_dup 1150 3_0_0 EXIST::FUNCTION:EC
+PKCS5_v2_scrypt_keyivgen 1151 3_0_0 EXIST::FUNCTION:SCRYPT
+X509_STORE_CTX_set0_param 1152 3_0_0 EXIST::FUNCTION:
+DES_check_key_parity 1153 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+EVP_aes_256_ocb 1154 3_0_0 EXIST::FUNCTION:OCB
+X509_VAL_free 1155 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get1_certs 1156 3_0_0 EXIST::FUNCTION:
+PEM_write_RSA_PUBKEY 1157 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+PKCS12_SAFEBAG_get0_p8inf 1158 3_0_0 EXIST::FUNCTION:
+X509_CRL_set_issuer_name 1159 3_0_0 EXIST::FUNCTION:
+CMS_EncryptedData_encrypt 1160 3_0_0 EXIST::FUNCTION:CMS
+ASN1_tag2str 1161 3_0_0 EXIST::FUNCTION:
+BN_zero_ex 1162 3_0_0 EXIST::FUNCTION:
+X509_NAME_dup 1163 3_0_0 EXIST::FUNCTION:
+SCT_LIST_print 1164 3_0_0 EXIST::FUNCTION:CT
+NOTICEREF_it 1165 3_0_0 EXIST::FUNCTION:
+CMS_add0_crl 1166 3_0_0 EXIST::FUNCTION:CMS
+d2i_DSAparams 1167 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+EVP_CIPHER_CTX_set_app_data 1168 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_param_to_asn1 1169 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_certs 1170 3_0_0 EXIST::FUNCTION:TS
+BN_security_bits 1171 3_0_0 EXIST::FUNCTION:
+X509_PURPOSE_get0_name 1172 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_serial 1173 3_0_0 EXIST::FUNCTION:TS
+ASN1_PCTX_get_str_flags 1174 3_0_0 EXIST::FUNCTION:
+SHA256 1175 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_hash_dir 1176 3_0_0 EXIST::FUNCTION:
+ASN1_BIT_STRING_check 1177 3_0_0 EXIST::FUNCTION:
+ENGINE_set_default_RAND 1178 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BIO_connect 1179 3_0_0 EXIST::FUNCTION:SOCK
+TS_TST_INFO_add_ext 1180 3_0_0 EXIST::FUNCTION:TS
+EVP_aes_192_ccm 1181 3_0_0 EXIST::FUNCTION:
+X509V3_add_value 1182 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set0_keygen_info 1183 3_0_0 EXIST::FUNCTION:
+ENGINE_unregister_digests 1184 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+IPAddressOrRange_new 1185 3_0_0 EXIST::FUNCTION:RFC3779
+EVP_aes_256_ofb 1186 3_0_0 EXIST::FUNCTION:
+CRYPTO_mem_debug_push 1187 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0
+X509_PKEY_new 1188 3_0_0 EXIST::FUNCTION:
+X509_get_key_usage 1189 3_0_0 EXIST::FUNCTION:
+X509_ATTRIBUTE_create_by_txt 1190 3_0_0 EXIST::FUNCTION:
+PEM_SignFinal 1191 3_0_0 EXIST::FUNCTION:
+PEM_bytes_read_bio 1192 3_0_0 EXIST::FUNCTION:
+X509_signature_dump 1193 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_def_policy 1194 3_0_0 EXIST::FUNCTION:TS
+RAND_pseudo_bytes 1195 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0
+DES_ofb_encrypt 1196 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+EVP_add_digest 1197 3_0_0 EXIST::FUNCTION:
+ASN1_item_sign_ctx 1198 3_0_0 EXIST::FUNCTION:
+BIO_dump_indent_cb 1199 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set_depth 1200 3_0_0 EXIST::FUNCTION:
+DES_ecb3_encrypt 1201 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+OBJ_obj2nid 1202 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_free 1203 3_0_0 EXIST::FUNCTION:
+EVP_cast5_cfb64 1204 3_0_0 EXIST::FUNCTION:CAST
+OPENSSL_uni2asc 1205 3_0_0 EXIST::FUNCTION:
+SCT_validation_status_string 1206 3_0_0 EXIST::FUNCTION:CT
+PKCS7_add_attribute 1207 3_0_0 EXIST::FUNCTION:
+ENGINE_register_DSA 1208 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OPENSSL_LH_node_stats 1209 3_0_0 EXIST::FUNCTION:STDIO
+X509_policy_tree_free 1210 3_0_0 EXIST::FUNCTION:
+EC_GFp_simple_method 1211 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_it 1212 3_0_0 EXIST::FUNCTION:
+d2i_PROXY_POLICY 1213 3_0_0 EXIST::FUNCTION:
+MDC2_Update 1214 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MDC2
+EC_KEY_new_by_curve_name 1215 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_CRL_free 1216 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_SIGN_ENVELOPE 1217 3_0_0 EXIST::FUNCTION:
+OCSP_CERTSTATUS_it 1218 3_0_0 EXIST::FUNCTION:OCSP
+BIO_f_reliable 1219 3_0_0 EXIST::FUNCTION:
+OCSP_resp_count 1220 3_0_0 EXIST::FUNCTION:OCSP
+i2d_X509_AUX 1221 3_0_0 EXIST::FUNCTION:
+RSA_verify_PKCS1_PSS_mgf1 1222 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_time_adj 1223 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_find_str 1224 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get_flags 1225 3_0_0 EXIST::FUNCTION:
+OPENSSL_DIR_end 1226 3_0_0 EXIST::FUNCTION:
+EC_GROUP_new 1227 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+CMS_SignerInfo_get0_pkey_ctx 1228 3_0_0 EXIST::FUNCTION:CMS
+d2i_ASN1_PRINTABLESTRING 1229 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_ktri_cert_cmp 1230 3_0_0 EXIST::FUNCTION:CMS
+CMS_decrypt_set1_pkey 1231 3_0_0 EXIST::FUNCTION:CMS
+PKCS7_RECIP_INFO_set 1232 3_0_0 EXIST::FUNCTION:
+EC_POINT_is_on_curve 1233 3_0_0 EXIST::FUNCTION:EC
+PKCS12_add_cert 1234 3_0_0 EXIST::FUNCTION:
+X509_NAME_hash_old 1235 3_0_0 EXIST::FUNCTION:
+PBKDF2PARAM_free 1236 3_0_0 EXIST::FUNCTION:
+i2d_CMS_ContentInfo 1237 3_0_0 EXIST::FUNCTION:CMS
+EVP_CIPHER_meth_set_ctrl 1238 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_public_decrypt 1239 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_get_id 1240 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+PKCS12_item_decrypt_d2i 1241 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_DSAparams 1242 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_CRL_cmp 1243 3_0_0 EXIST::FUNCTION:
+DSO_METHOD_openssl 1244 3_0_0 EXIST::FUNCTION:
+d2i_PrivateKey_fp 1245 3_0_0 EXIST::FUNCTION:STDIO
+i2d_NETSCAPE_CERT_SEQUENCE 1246 3_0_0 EXIST::FUNCTION:
+EC_POINT_oct2point 1248 3_0_0 EXIST::FUNCTION:EC
+EVP_CIPHER_CTX_buf_noconst 1249 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OPENSSL_DIR_read 1250 3_0_0 EXIST::FUNCTION:
+CMS_add_smimecap 1251 3_0_0 EXIST::FUNCTION:CMS
+X509_check_email 1252 3_0_0 EXIST::FUNCTION:
+CRYPTO_cts128_decrypt_block 1253 3_0_0 EXIST::FUNCTION:
+UI_method_get_opener 1254 3_0_0 EXIST::FUNCTION:
+EVP_aes_192_gcm 1255 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_tsa_name 1256 3_0_0 EXIST::FUNCTION:TS
+X509_email_free 1257 3_0_0 EXIST::FUNCTION:
+BIO_get_callback 1258 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OPENSSL_sk_shift 1259 3_0_0 EXIST::FUNCTION:
+i2d_X509_REVOKED 1260 3_0_0 EXIST::FUNCTION:
+CMS_sign 1261 3_0_0 EXIST::FUNCTION:CMS
+X509_STORE_add_cert 1262 3_0_0 EXIST::FUNCTION:
+EC_GROUP_precompute_mult 1263 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+d2i_DISPLAYTEXT 1265 3_0_0 EXIST::FUNCTION:
+HMAC_CTX_copy 1266 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CRYPTO_gcm128_init 1267 3_0_0 EXIST::FUNCTION:
+i2d_X509_CINF 1268 3_0_0 EXIST::FUNCTION:
+X509_REVOKED_delete_ext 1269 3_0_0 EXIST::FUNCTION:
+RC5_32_cfb64_encrypt 1270 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC5
+TS_REQ_set_cert_req 1271 3_0_0 EXIST::FUNCTION:TS
+TXT_DB_get_by_index 1272 3_0_0 EXIST::FUNCTION:
+X509_check_ca 1273 3_0_0 EXIST::FUNCTION:
+DH_get_2048_224 1274 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+X509_load_http 1275 3_0_0 EXIST::FUNCTION:
+i2d_AUTHORITY_INFO_ACCESS 1276 3_0_0 EXIST::FUNCTION:
+EVP_get_cipherbyname 1277 3_0_0 EXIST::FUNCTION:
+CONF_dump_fp 1278 3_0_0 EXIST::FUNCTION:STDIO
+d2i_DIST_POINT_NAME 1279 3_0_0 EXIST::FUNCTION:
+ASN1_INTEGER_set_int64 1280 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_free 1281 3_0_0 EXIST::FUNCTION:
+i2o_SCT_LIST 1282 3_0_0 EXIST::FUNCTION:CT
+AES_encrypt 1283 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+MD5_Init 1284 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD5
+UI_add_error_string 1285 3_0_0 EXIST::FUNCTION:
+X509_TRUST_cleanup 1286 3_0_0 EXIST::FUNCTION:
+PEM_read_X509 1287 3_0_0 EXIST::FUNCTION:STDIO
+EC_KEY_new_method 1288 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+i2d_RSAPublicKey_fp 1289 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+CRYPTO_ctr128_encrypt_ctr32 1290 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_move_peername 1291 3_0_0 EXIST::FUNCTION:
+OCSP_SINGLERESP_it 1292 3_0_0 EXIST::FUNCTION:OCSP
+BN_num_bits 1293 3_0_0 EXIST::FUNCTION:
+X509_CRL_METHOD_free 1294 3_0_0 EXIST::FUNCTION:
+PEM_read_NETSCAPE_CERT_SEQUENCE 1295 3_0_0 EXIST::FUNCTION:STDIO
+OPENSSL_load_builtin_modules 1296 3_0_0 EXIST::FUNCTION:
+X509_set_version 1297 3_0_0 EXIST::FUNCTION:
+i2d_EC_PUBKEY_bio 1298 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_REQ_get_attr_count 1299 3_0_0 EXIST::FUNCTION:
+CMS_set1_signers_certs 1300 3_0_0 EXIST::FUNCTION:CMS
+TS_ACCURACY_free 1301 3_0_0 EXIST::FUNCTION:TS
+PEM_write_DSA_PUBKEY 1302 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+BN_rshift1 1303 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_ENVELOPE 1304 3_0_0 EXIST::FUNCTION:
+PBKDF2PARAM_it 1305 3_0_0 EXIST::FUNCTION:
+UI_get_result_maxsize 1306 3_0_0 EXIST::FUNCTION:
+PBEPARAM_it 1307 3_0_0 EXIST::FUNCTION:
+TS_ACCURACY_set_seconds 1308 3_0_0 EXIST::FUNCTION:TS
+UI_get0_action_string 1309 3_0_0 EXIST::FUNCTION:
+RC2_decrypt 1310 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC2
+OPENSSL_atexit 1311 3_0_0 EXIST::FUNCTION:
+CMS_add_standard_smimecap 1312 3_0_0 EXIST::FUNCTION:CMS
+PKCS7_add_attrib_content_type 1313 3_0_0 EXIST::FUNCTION:
+BN_BLINDING_set_flags 1314 3_0_0 EXIST::FUNCTION:
+ERR_peek_last_error 1315 3_0_0 EXIST::FUNCTION:
+ENGINE_set_cmd_defns 1316 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+d2i_ASN1_NULL 1317 3_0_0 EXIST::FUNCTION:
+RAND_event 1318 3_0_0 EXIST:_WIN32:FUNCTION:DEPRECATEDIN_1_1_0
+i2d_PKCS12_fp 1319 3_0_0 EXIST::FUNCTION:STDIO
+EVP_PKEY_meth_get_init 1320 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_check_trust 1321 3_0_0 EXIST::FUNCTION:
+b2i_PrivateKey 1322 3_0_0 EXIST::FUNCTION:
+HMAC_Init_ex 1323 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SMIME_read_CMS 1324 3_0_0 EXIST::FUNCTION:CMS
+X509_subject_name_cmp 1325 3_0_0 EXIST::FUNCTION:
+CRYPTO_ocb128_finish 1326 3_0_0 EXIST::FUNCTION:OCB
+EVP_CIPHER_do_all 1327 3_0_0 EXIST::FUNCTION:
+POLICY_MAPPINGS_it 1328 3_0_0 EXIST::FUNCTION:
+SCT_set0_log_id 1329 3_0_0 EXIST::FUNCTION:CT
+CRYPTO_cfb128_encrypt 1330 3_0_0 EXIST::FUNCTION:
+RSA_padding_add_PKCS1_type_2 1331 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+TS_CONF_set_signer_cert 1332 3_0_0 EXIST::FUNCTION:TS
+i2d_ASN1_OBJECT 1333 3_0_0 EXIST::FUNCTION:
+d2i_PKCS8_PRIV_KEY_INFO_bio 1334 3_0_0 EXIST::FUNCTION:
+X509V3_add_value_int 1335 3_0_0 EXIST::FUNCTION:
+TS_REQ_set_nonce 1336 3_0_0 EXIST::FUNCTION:TS
+Camellia_ctr128_encrypt 1337 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+X509_LOOKUP_new 1338 3_0_0 EXIST::FUNCTION:
+AUTHORITY_INFO_ACCESS_new 1339 3_0_0 EXIST::FUNCTION:
+CRYPTO_mem_leaks_fp 1340 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0,STDIO
+DES_set_key_unchecked 1341 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+BN_free 1342 3_0_0 EXIST::FUNCTION:
+EVP_aes_128_cfb1 1343 3_0_0 EXIST::FUNCTION:
+EC_KEY_get0_group 1344 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PEM_write_bio_CMS_stream 1345 3_0_0 EXIST::FUNCTION:CMS
+BIO_f_linebuffer 1346 3_0_0 EXIST::FUNCTION:
+ASN1_item_d2i_bio 1347 3_0_0 EXIST::FUNCTION:
+ENGINE_get_flags 1348 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OCSP_resp_find 1349 3_0_0 EXIST::FUNCTION:OCSP
+OPENSSL_LH_node_usage_stats_bio 1350 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_encrypt 1351 3_0_0 EXIST::FUNCTION:
+CRYPTO_cfb128_8_encrypt 1352 3_0_0 EXIST::FUNCTION:
+SXNET_get_id_INTEGER 1353 3_0_0 EXIST::FUNCTION:
+CRYPTO_clear_free 1354 3_0_0 EXIST::FUNCTION:
+i2v_GENERAL_NAME 1355 3_0_0 EXIST::FUNCTION:
+PKCS7_ENC_CONTENT_new 1356 3_0_0 EXIST::FUNCTION:
+CRYPTO_realloc 1357 3_0_0 EXIST::FUNCTION:
+BIO_ctrl_pending 1358 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_new 1360 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_sign_ctx 1361 3_0_0 EXIST::FUNCTION:
+BN_is_odd 1362 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_current_cert 1363 3_0_0 EXIST::FUNCTION:
+ASN1_ENUMERATED_get_int64 1364 3_0_0 EXIST::FUNCTION:
+ASN1_SCTX_get_app_data 1365 3_0_0 EXIST::FUNCTION:
+X509_get_default_cert_file_env 1366 3_0_0 EXIST::FUNCTION:
+X509v3_addr_validate_resource_set 1367 3_0_0 EXIST::FUNCTION:RFC3779
+d2i_X509_VAL 1368 3_0_0 EXIST::FUNCTION:
+CRYPTO_gcm128_decrypt_ctr32 1370 3_0_0 EXIST::FUNCTION:
+DHparams_print 1371 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+OPENSSL_sk_unshift 1372 3_0_0 EXIST::FUNCTION:
+BN_GENCB_set_old 1373 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_X509 1374 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_free 1375 3_0_0 EXIST::FUNCTION:
+ENGINE_unregister_DH 1376 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+PROXY_CERT_INFO_EXTENSION_it 1377 3_0_0 EXIST::FUNCTION:
+CT_POLICY_EVAL_CTX_set1_cert 1378 3_0_0 EXIST::FUNCTION:CT
+X509_NAME_hash_ex 1379 3_0_0 EXIST::FUNCTION:
+SCT_set_timestamp 1380 3_0_0 EXIST::FUNCTION:CT
+UI_new 1381 3_0_0 EXIST::FUNCTION:
+TS_REQ_get_msg_imprint 1382 3_0_0 EXIST::FUNCTION:TS
+i2d_PKCS12_BAGS 1383 3_0_0 EXIST::FUNCTION:
+CERTIFICATEPOLICIES_free 1385 3_0_0 EXIST::FUNCTION:
+X509V3_get_section 1386 3_0_0 EXIST::FUNCTION:
+BIO_parse_hostserv 1387 3_0_0 EXIST::FUNCTION:SOCK
+EVP_PKEY_meth_set_cleanup 1388 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PROXY_CERT_INFO_EXTENSION_free 1389 3_0_0 EXIST::FUNCTION:
+X509_dup 1390 3_0_0 EXIST::FUNCTION:
+EDIPARTYNAME_free 1391 3_0_0 EXIST::FUNCTION:
+X509_CRL_add0_revoked 1393 3_0_0 EXIST::FUNCTION:
+GENERAL_NAME_set0_value 1394 3_0_0 EXIST::FUNCTION:
+X509_ATTRIBUTE_dup 1395 3_0_0 EXIST::FUNCTION:
+EC_GROUP_check_discriminant 1396 3_0_0 EXIST::FUNCTION:EC
+PKCS12_MAC_DATA_free 1397 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_PrivateKey 1398 3_0_0 EXIST::FUNCTION:
+d2i_PKCS7_ENCRYPT 1399 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_ctrl 1400 3_0_0 EXIST::FUNCTION:
+X509_REQ_set_pubkey 1401 3_0_0 EXIST::FUNCTION:
+UI_create_method 1402 3_0_0 EXIST::FUNCTION:
+X509_REQ_add_extensions_nid 1403 3_0_0 EXIST::FUNCTION:
+PEM_X509_INFO_write_bio 1404 3_0_0 EXIST::FUNCTION:
+BIO_dump_cb 1405 3_0_0 EXIST::FUNCTION:
+v2i_GENERAL_NAMES 1406 3_0_0 EXIST::FUNCTION:
+EVP_des_ede3_ofb 1407 3_0_0 EXIST::FUNCTION:DES
+EVP_MD_meth_get_cleanup 1408 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SRP_Calc_server_key 1409 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+BN_mod_exp_simple 1410 3_0_0 EXIST::FUNCTION:
+BIO_set_ex_data 1411 3_0_0 EXIST::FUNCTION:
+SHA512 1412 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_explicit_policy 1413 3_0_0 EXIST::FUNCTION:
+EVP_DecodeBlock 1414 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_REQ_CTX_set_request_line 1415 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_reset 1416 3_0_0 EXIST::FUNCTION:
+X509_NAME_new 1417 3_0_0 EXIST::FUNCTION:
+ASN1_item_pack 1418 3_0_0 EXIST::FUNCTION:
+ASN1_BIT_STRING_set_asc 1419 3_0_0 EXIST::FUNCTION:
+d2i_GENERAL_NAME 1420 3_0_0 EXIST::FUNCTION:
+i2d_ESS_CERT_ID 1421 3_0_0 EXIST::FUNCTION:
+X509_TRUST_get_by_id 1422 3_0_0 EXIST::FUNCTION:
+d2i_RSA_PUBKEY_fp 1423 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+EVP_PBE_get 1424 3_0_0 EXIST::FUNCTION:
+CRYPTO_nistcts128_encrypt 1425 3_0_0 EXIST::FUNCTION:
+CONF_modules_finish 1426 3_0_0 EXIST::FUNCTION:
+BN_value_one 1427 3_0_0 EXIST::FUNCTION:
+RSA_padding_add_SSLv23 1428 3_0_0 NOEXIST::FUNCTION:DEPRECATEDIN_3_0
+OCSP_RESPBYTES_it 1429 3_0_0 EXIST::FUNCTION:OCSP
+EVP_aes_192_wrap 1430 3_0_0 EXIST::FUNCTION:
+OCSP_CERTID_it 1431 3_0_0 EXIST::FUNCTION:OCSP
+ENGINE_get_RSA 1432 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+RAND_get_rand_method 1433 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ERR_load_DSA_strings 1434 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+ASN1_check_infinite_end 1435 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_DIGEST 1436 3_0_0 EXIST::FUNCTION:
+ERR_lib_error_string 1437 3_0_0 EXIST::FUNCTION:
+X509_ATTRIBUTE_set1_object 1438 3_0_0 EXIST::FUNCTION:
+i2d_ECPrivateKey_bio 1439 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+BN_GENCB_free 1440 3_0_0 EXIST::FUNCTION:
+HMAC_size 1441 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_get0_DH 1442 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+d2i_OCSP_CRLID 1443 3_0_0 EXIST::FUNCTION:OCSP
+EVP_CIPHER_CTX_set_padding 1444 3_0_0 EXIST::FUNCTION:
+CTLOG_new_from_base64 1445 3_0_0 EXIST::FUNCTION:CT
+AES_bi_ige_encrypt 1446 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ERR_pop_to_mark 1447 3_0_0 EXIST::FUNCTION:
+CRL_DIST_POINTS_new 1449 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get0_asn1 1450 3_0_0 EXIST::FUNCTION:
+EVP_camellia_192_ctr 1451 3_0_0 EXIST::FUNCTION:CAMELLIA
+EVP_PKEY_free 1452 3_0_0 EXIST::FUNCTION:
+X509_ATTRIBUTE_count 1453 3_0_0 EXIST::FUNCTION:
+BIO_new_dgram 1454 3_0_0 EXIST::FUNCTION:DGRAM
+CMS_RecipientInfo_kari_get0_reks 1455 3_0_0 EXIST::FUNCTION:CMS
+BASIC_CONSTRAINTS_new 1456 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_X509_REQ 1457 3_0_0 EXIST::FUNCTION:
+BIO_sock_init 1458 3_0_0 EXIST::FUNCTION:SOCK
+BN_nist_mod_192 1459 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_ISSUER_AND_SERIAL 1460 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_nconf 1461 3_0_0 EXIST::FUNCTION:
+X509v3_addr_inherits 1462 3_0_0 EXIST::FUNCTION:RFC3779
+NETSCAPE_SPKI_sign 1463 3_0_0 EXIST::FUNCTION:
+BN_BLINDING_update 1464 3_0_0 EXIST::FUNCTION:
+BN_gcd 1465 3_0_0 EXIST::FUNCTION:
+CMS_dataInit 1466 3_0_0 EXIST::FUNCTION:CMS
+TS_CONF_get_tsa_section 1467 3_0_0 EXIST::FUNCTION:TS
+i2d_PKCS7_SIGNER_INFO 1468 3_0_0 EXIST::FUNCTION:
+EVP_get_pw_prompt 1469 3_0_0 EXIST::FUNCTION:
+BN_bn2bin 1470 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_BIT_STRING 1471 3_0_0 EXIST::FUNCTION:
+OCSP_CERTSTATUS_new 1472 3_0_0 EXIST::FUNCTION:OCSP
+ENGINE_register_RAND 1473 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509V3_section_free 1474 3_0_0 EXIST::FUNCTION:
+CRYPTO_mem_debug_free 1475 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0
+d2i_OCSP_REQUEST 1476 3_0_0 EXIST::FUNCTION:OCSP
+ENGINE_get_cipher_engine 1477 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+SHA384_Final 1478 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+TS_RESP_CTX_set_certs 1479 3_0_0 EXIST::FUNCTION:TS
+BN_MONT_CTX_free 1480 3_0_0 EXIST::FUNCTION:
+BN_GF2m_mod_solve_quad_arr 1481 3_0_0 EXIST::FUNCTION:EC2M
+UI_add_input_string 1482 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_version 1483 3_0_0 EXIST::FUNCTION:TS
+BIO_accept_ex 1484 3_0_0 EXIST::FUNCTION:SOCK
+CRYPTO_get_mem_functions 1485 3_0_0 EXIST::FUNCTION:
+PEM_read_bio 1486 3_0_0 EXIST::FUNCTION:
+OCSP_BASICRESP_get_ext_by_critical 1487 3_0_0 EXIST::FUNCTION:OCSP
+SXNET_it 1488 3_0_0 EXIST::FUNCTION:
+BIO_indent 1489 3_0_0 EXIST::FUNCTION:
+i2d_X509_fp 1490 3_0_0 EXIST::FUNCTION:STDIO
+d2i_ASN1_TYPE 1491 3_0_0 EXIST::FUNCTION:
+CTLOG_STORE_free 1492 3_0_0 EXIST::FUNCTION:CT
+ENGINE_get_pkey_meths 1493 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+i2d_TS_REQ_bio 1494 3_0_0 EXIST::FUNCTION:TS
+EVP_PKEY_CTX_get_operation 1495 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_set_ctrl 1496 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_EXTENSION_set_critical 1497 3_0_0 EXIST::FUNCTION:
+BIO_ADDR_clear 1498 3_0_0 EXIST::FUNCTION:SOCK
+ENGINE_get_DSA 1499 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ASYNC_get_wait_ctx 1500 3_0_0 EXIST::FUNCTION:
+ENGINE_set_load_privkey_function 1501 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+CRYPTO_ccm128_setiv 1502 3_0_0 EXIST::FUNCTION:
+PKCS7_dataFinal 1503 3_0_0 EXIST::FUNCTION:
+SHA1_Final 1504 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2a_ASN1_STRING 1505 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_rand_key 1506 3_0_0 EXIST::FUNCTION:
+AES_set_encrypt_key 1507 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_UTCTIME_new 1508 3_0_0 EXIST::FUNCTION:
+AES_cbc_encrypt 1509 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OCSP_RESPDATA_free 1510 3_0_0 EXIST::FUNCTION:OCSP
+EVP_PKEY_asn1_find 1511 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_GENERALIZEDTIME 1512 3_0_0 EXIST::FUNCTION:
+OPENSSL_cleanup 1513 3_0_0 EXIST::FUNCTION:
+X509_ATTRIBUTE_create 1514 3_0_0 EXIST::FUNCTION:
+SCT_get_source 1515 3_0_0 EXIST::FUNCTION:CT
+EVP_PKEY_verify_init 1516 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_set_string 1517 3_0_0 EXIST::FUNCTION:
+BIO_free 1518 3_0_0 EXIST::FUNCTION:
+i2d_X509_ALGOR 1519 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set0_crls 1520 3_0_0 EXIST::FUNCTION:
+ASYNC_pause_job 1521 3_0_0 EXIST::FUNCTION:
+OCSP_BASICRESP_new 1522 3_0_0 EXIST::FUNCTION:OCSP
+EVP_camellia_256_ofb 1523 3_0_0 EXIST::FUNCTION:CAMELLIA
+PKCS12_item_i2d_encrypt 1524 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_copy 1525 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EC_POINT_clear_free 1526 3_0_0 EXIST::FUNCTION:EC
+i2s_ASN1_ENUMERATED_TABLE 1527 3_0_0 EXIST::FUNCTION:
+PKCS7_verify 1528 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_add0_table 1529 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set_cert 1530 3_0_0 EXIST::FUNCTION:
+ASN1_GENERALSTRING_free 1531 3_0_0 EXIST::FUNCTION:
+BN_MONT_CTX_set_locked 1532 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_set_num 1533 3_0_0 EXIST::FUNCTION:
+CONF_load 1534 3_0_0 EXIST::FUNCTION:
+EC_KEY_METHOD_get_keygen 1535 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_PKEY_add1_attr_by_txt 1536 3_0_0 EXIST::FUNCTION:
+ASN1_INTEGER_set_uint64 1537 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_attr_by_OBJ 1538 3_0_0 EXIST::FUNCTION:
+ASN1_add_oid_module 1539 3_0_0 EXIST::FUNCTION:
+BN_div_recp 1540 3_0_0 EXIST::FUNCTION:
+SRP_Verify_B_mod_N 1541 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SXNET_free 1542 3_0_0 EXIST::FUNCTION:
+CMS_get0_content 1543 3_0_0 EXIST::FUNCTION:CMS
+BN_is_word 1544 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get_key_length 1545 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_asn1_to_param 1546 3_0_0 EXIST::FUNCTION:
+OCSP_request_onereq_get0 1547 3_0_0 EXIST::FUNCTION:OCSP
+ERR_load_PKCS7_strings 1548 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_PUBKEY_get 1549 3_0_0 EXIST::FUNCTION:
+EC_KEY_free 1550 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+BIO_read 1551 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_attr_by_NID 1552 3_0_0 EXIST::FUNCTION:
+BIO_get_accept_socket 1553 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SOCK
+CMS_SignerInfo_sign 1554 3_0_0 EXIST::FUNCTION:CMS
+ASN1_item_i2d_bio 1555 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get_block_size 1556 3_0_0 EXIST::FUNCTION:
+DIRECTORYSTRING_free 1557 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_default_engine 1558 3_0_0 EXIST::FUNCTION:ENGINE,TS
+BN_set_bit 1559 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_set_app_datasize 1560 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+DSO_free 1561 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_tsa 1562 3_0_0 EXIST::FUNCTION:TS
+EC_GROUP_check 1563 3_0_0 EXIST::FUNCTION:EC
+OPENSSL_sk_delete 1564 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_extension_cb 1565 3_0_0 EXIST::FUNCTION:TS
+EVP_CIPHER_CTX_get_nid 1566 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_add_md 1567 3_0_0 EXIST::FUNCTION:TS
+DES_set_key 1568 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+X509V3_extensions_print 1569 3_0_0 EXIST::FUNCTION:
+PEM_do_header 1570 3_0_0 EXIST::FUNCTION:
+i2d_re_X509_CRL_tbs 1571 3_0_0 EXIST::FUNCTION:
+BIO_method_name 1572 3_0_0 EXIST::FUNCTION:
+i2d_OCSP_CRLID 1573 3_0_0 EXIST::FUNCTION:OCSP
+OCSP_request_set1_name 1574 3_0_0 EXIST::FUNCTION:OCSP
+d2i_X509_NAME_ENTRY 1575 3_0_0 EXIST::FUNCTION:
+X509_trusted 1576 3_0_0 EXIST::FUNCTION:
+X509_TRUST_get_flags 1577 3_0_0 EXIST::FUNCTION:
+PKCS7_set_content 1578 3_0_0 EXIST::FUNCTION:
+PEM_write_X509_REQ_NEW 1579 3_0_0 EXIST::FUNCTION:STDIO
+CONF_imodule_set_usr_data 1580 3_0_0 EXIST::FUNCTION:
+d2i_TS_RESP_fp 1581 3_0_0 EXIST::FUNCTION:STDIO,TS
+X509_policy_tree_get0_user_policies 1582 3_0_0 EXIST::FUNCTION:
+DSA_do_sign 1584 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+EVP_CIPHER_CTX_reset 1585 3_0_0 EXIST::FUNCTION:
+OCSP_REVOKEDINFO_new 1586 3_0_0 EXIST::FUNCTION:OCSP
+SRP_Verify_A_mod_N 1587 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_VBASE_free 1588 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+PKCS7_add0_attrib_signing_time 1589 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_flags 1590 3_0_0 EXIST::FUNCTION:
+UI_get0_output_string 1591 3_0_0 EXIST::FUNCTION:
+ERR_get_error_line_data 1592 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CTLOG_get0_name 1593 3_0_0 EXIST::FUNCTION:CT
+ASN1_TBOOLEAN_it 1594 3_0_0 EXIST::FUNCTION:
+RC2_set_key 1595 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC2
+X509_REVOKED_get_ext_by_NID 1596 3_0_0 EXIST::FUNCTION:
+RSA_padding_add_none 1597 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_rc5_32_12_16_cbc 1599 3_0_0 EXIST::FUNCTION:RC5
+PEM_dek_info 1600 3_0_0 EXIST::FUNCTION:
+ASN1_SCTX_get_template 1601 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_get0 1602 3_0_0 EXIST::FUNCTION:
+X509_verify 1603 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_get_request 1604 3_0_0 EXIST::FUNCTION:TS
+EVP_cast5_cbc 1605 3_0_0 EXIST::FUNCTION:CAST
+PEM_read_bio_X509_AUX 1606 3_0_0 EXIST::FUNCTION:
+TS_ext_print_bio 1607 3_0_0 EXIST::FUNCTION:TS
+SCT_set1_log_id 1608 3_0_0 EXIST::FUNCTION:CT
+X509_get0_pubkey_bitstr 1609 3_0_0 EXIST::FUNCTION:
+ENGINE_register_all_RAND 1610 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_MD_meth_get_result_size 1612 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BIO_ADDRINFO_address 1613 3_0_0 EXIST::FUNCTION:SOCK
+ASN1_STRING_print_ex 1614 3_0_0 EXIST::FUNCTION:
+i2d_CMS_ReceiptRequest 1615 3_0_0 EXIST::FUNCTION:CMS
+d2i_TS_REQ_fp 1616 3_0_0 EXIST::FUNCTION:STDIO,TS
+OSSL_HTTP_REQ_CTX_set1_req 1617 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_default_digest_nid 1618 3_0_0 EXIST::FUNCTION:
+ASIdOrRange_new 1619 3_0_0 EXIST::FUNCTION:RFC3779
+ASN1_SCTX_new 1620 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_get 1621 3_0_0 EXIST::FUNCTION:
+OCSP_id_cmp 1622 3_0_0 EXIST::FUNCTION:OCSP
+NCONF_dump_bio 1623 3_0_0 EXIST::FUNCTION:
+X509_NAME_get_entry 1624 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get1_DH 1625 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+CRYPTO_gcm128_aad 1626 3_0_0 EXIST::FUNCTION:
+EVP_des_cfb8 1627 3_0_0 EXIST::FUNCTION:DES
+BN_BLINDING_convert 1628 3_0_0 EXIST::FUNCTION:
+CRYPTO_ocb128_cleanup 1629 3_0_0 EXIST::FUNCTION:OCB
+EVP_des_ede_cbc 1630 3_0_0 EXIST::FUNCTION:DES
+i2d_ASN1_TIME 1631 3_0_0 EXIST::FUNCTION:
+ENGINE_register_all_pkey_asn1_meths 1632 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OSSL_HTTP_REQ_CTX_set_max_response_length 1633 3_0_0 EXIST::FUNCTION:
+d2i_ISSUING_DIST_POINT 1634 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_set0_key 1635 3_0_0 EXIST::FUNCTION:CMS
+NCONF_new 1636 3_0_0 EXIST::FUNCTION:
+OCSP_SINGLERESP_free 1637 3_0_0 EXIST::FUNCTION:OCSP
+PKCS7_ENCRYPT_free 1638 3_0_0 EXIST::FUNCTION:
+i2d_DIST_POINT 1639 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_paramgen_init 1640 3_0_0 EXIST::FUNCTION:
+TS_MSG_IMPRINT_dup 1641 3_0_0 EXIST::FUNCTION:TS
+CMS_ContentInfo_it 1642 3_0_0 EXIST::FUNCTION:CMS
+OCSP_resp_get0_signature 1643 3_0_0 EXIST::FUNCTION:OCSP
+X509_STORE_CTX_get1_issuer 1644 3_0_0 EXIST::FUNCTION:
+EVP_Digest 1645 3_0_0 EXIST::FUNCTION:
+CRYPTO_set_ex_data 1646 3_0_0 EXIST::FUNCTION:
+BN_bn2hex 1647 3_0_0 EXIST::FUNCTION:
+BN_lshift1 1648 3_0_0 EXIST::FUNCTION:
+i2d_EDIPARTYNAME 1649 3_0_0 EXIST::FUNCTION:
+X509_policy_tree_get0_policies 1650 3_0_0 EXIST::FUNCTION:
+X509at_add1_attr 1651 3_0_0 EXIST::FUNCTION:
+X509_get_ex_data 1653 3_0_0 EXIST::FUNCTION:
+RSA_set_method 1654 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_REVOKED_dup 1655 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_new 1656 3_0_0 EXIST::FUNCTION:
+PEM_write_NETSCAPE_CERT_SEQUENCE 1657 3_0_0 EXIST::FUNCTION:STDIO
+PEM_read_X509_REQ 1658 3_0_0 EXIST::FUNCTION:STDIO
+EC_GROUP_free 1659 3_0_0 EXIST::FUNCTION:EC
+X509_CRL_get_meth_data 1660 3_0_0 EXIST::FUNCTION:
+X509V3_add_value_uchar 1661 3_0_0 EXIST::FUNCTION:
+BIO_asn1_get_suffix 1662 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_clear_flags 1663 3_0_0 EXIST::FUNCTION:
+X509_NAME_add_entry_by_txt 1664 3_0_0 EXIST::FUNCTION:
+DES_ede3_cfb_encrypt 1665 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+i2d_CMS_bio_stream 1667 3_0_0 EXIST::FUNCTION:CMS
+DES_quad_cksum 1668 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+X509_ATTRIBUTE_create_by_NID 1669 3_0_0 EXIST::FUNCTION:
+TS_VERIFY_CTX_free 1670 3_0_0 EXIST::FUNCTION:TS
+EC_KEY_up_ref 1671 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EC_GROUP_get_basis_type 1672 3_0_0 EXIST::FUNCTION:EC
+OCSP_crlID_new 1673 3_0_0 EXIST:!VMS:FUNCTION:OCSP
+OCSP_crlID2_new 1673 3_0_0 EXIST:VMS:FUNCTION:OCSP
+PEM_write_PKCS7 1674 3_0_0 EXIST::FUNCTION:STDIO
+PKCS7_add_signer 1675 3_0_0 EXIST::FUNCTION:
+X509_SIG_it 1676 3_0_0 EXIST::FUNCTION:
+ASYNC_start_job 1677 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_dup 1678 3_0_0 EXIST::FUNCTION:TS
+EVP_aes_192_ctr 1679 3_0_0 EXIST::FUNCTION:
+PKCS12_pack_authsafes 1680 3_0_0 EXIST::FUNCTION:
+PKCS7_get_attribute 1681 3_0_0 EXIST::FUNCTION:
+OPENSSL_config 1682 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0
+s2i_ASN1_INTEGER 1683 3_0_0 EXIST::FUNCTION:
+CMS_signed_add1_attr_by_OBJ 1684 3_0_0 EXIST::FUNCTION:CMS
+CRYPTO_128_wrap_pad 1685 3_0_0 EXIST::FUNCTION:
+CMS_EncryptedData_set1_key 1686 3_0_0 EXIST::FUNCTION:CMS
+OBJ_find_sigid_by_algs 1687 3_0_0 EXIST::FUNCTION:
+ASN1_generate_nconf 1688 3_0_0 EXIST::FUNCTION:
+CMS_add0_recipient_password 1689 3_0_0 EXIST::FUNCTION:CMS
+UI_get_string_type 1690 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_ECPrivateKey 1691 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_PKEY_get_attr 1692 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_ECPKParameters 1693 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+d2i_PKCS12_MAC_DATA 1694 3_0_0 EXIST::FUNCTION:
+ENGINE_ctrl_cmd 1695 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+PKCS12_SAFEBAG_get_bag_nid 1696 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_digests 1697 3_0_0 EXIST::FUNCTION:TS
+PKCS7_SIGNED_it 1698 3_0_0 EXIST::FUNCTION:
+b2i_PublicKey 1699 3_0_0 EXIST::FUNCTION:
+X509_PURPOSE_cleanup 1700 3_0_0 EXIST::FUNCTION:
+ESS_SIGNING_CERT_dup 1701 3_0_0 EXIST::FUNCTION:
+ENGINE_set_default_DSA 1702 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_REVOKED_new 1703 3_0_0 EXIST::FUNCTION:
+NCONF_WIN32 1704 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_padding_check_PKCS1_OAEP_mgf1 1705 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_policy_tree_get0_level 1706 3_0_0 EXIST::FUNCTION:
+ASN1_parse_dump 1708 3_0_0 EXIST::FUNCTION:
+BIO_vfree 1709 3_0_0 EXIST::FUNCTION:
+CRYPTO_cbc128_decrypt 1710 3_0_0 EXIST::FUNCTION:
+UI_dup_verify_string 1711 3_0_0 EXIST::FUNCTION:
+d2i_PKCS7_bio 1712 3_0_0 EXIST::FUNCTION:
+ENGINE_set_default_digests 1713 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+i2d_PublicKey 1714 3_0_0 EXIST::FUNCTION:
+RC5_32_set_key 1715 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC5
+AES_unwrap_key 1716 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_Cipher 1717 3_0_0 EXIST::FUNCTION:
+AES_set_decrypt_key 1718 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BF_ofb64_encrypt 1719 3_0_0 EXIST::FUNCTION:BF,DEPRECATEDIN_3_0
+d2i_TS_TST_INFO_fp 1720 3_0_0 EXIST::FUNCTION:STDIO,TS
+X509_find_by_issuer_and_serial 1721 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_type 1722 3_0_0 EXIST::FUNCTION:
+ENGINE_ctrl 1723 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_cast5_ecb 1724 3_0_0 EXIST::FUNCTION:CAST
+BIO_nwrite0 1725 3_0_0 EXIST::FUNCTION:
+CAST_encrypt 1726 3_0_0 EXIST::FUNCTION:CAST,DEPRECATEDIN_3_0
+a2d_ASN1_OBJECT 1727 3_0_0 EXIST::FUNCTION:
+OCSP_ONEREQ_delete_ext 1728 3_0_0 EXIST::FUNCTION:OCSP
+UI_method_get_reader 1729 3_0_0 EXIST::FUNCTION:
+CMS_unsigned_get_attr 1730 3_0_0 EXIST::FUNCTION:CMS
+EVP_aes_256_cbc 1731 3_0_0 EXIST::FUNCTION:
+X509_check_ip_asc 1732 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_X509_AUX 1733 3_0_0 EXIST::FUNCTION:
+RC2_cbc_encrypt 1734 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC2
+TS_MSG_IMPRINT_new 1735 3_0_0 EXIST::FUNCTION:TS
+EVP_ENCODE_CTX_new 1736 3_0_0 EXIST::FUNCTION:
+BIO_f_base64 1737 3_0_0 EXIST::FUNCTION:
+CMS_verify 1738 3_0_0 EXIST::FUNCTION:CMS
+i2d_PrivateKey 1739 3_0_0 EXIST::FUNCTION:
+i2d_OCSP_ONEREQ 1740 3_0_0 EXIST::FUNCTION:OCSP
+OPENSSL_issetugid 1741 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_OBJECT 1742 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_set_flags 1743 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_idea_cbc 1744 3_0_0 EXIST::FUNCTION:IDEA
+EC_POINT_cmp 1745 3_0_0 EXIST::FUNCTION:EC
+ASN1_buf_print 1746 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_hex2ctrl 1747 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_PKCS8PrivateKey 1748 3_0_0 EXIST::FUNCTION:
+CMAC_Update 1749 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
+d2i_ASN1_UTCTIME 1750 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_insert 1751 3_0_0 EXIST::FUNCTION:
+DSO_up_ref 1752 3_0_0 EXIST::FUNCTION:
+EVP_rc2_cbc 1753 3_0_0 EXIST::FUNCTION:RC2
+i2d_NETSCAPE_SPKI 1754 3_0_0 EXIST::FUNCTION:
+ASYNC_init_thread 1755 3_0_0 EXIST::FUNCTION:
+OCSP_BASICRESP_get_ext_by_OBJ 1756 3_0_0 EXIST::FUNCTION:OCSP
+X509_reject_clear 1757 3_0_0 EXIST::FUNCTION:
+DH_security_bits 1758 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+LONG_it 1759 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_dup 1760 3_0_0 EXIST::FUNCTION:
+TS_RESP_new 1761 3_0_0 EXIST::FUNCTION:TS
+i2d_PKCS8PrivateKeyInfo_fp 1762 3_0_0 EXIST::FUNCTION:STDIO
+X509_alias_get0 1763 3_0_0 EXIST::FUNCTION:
+X509_ATTRIBUTE_free 1764 3_0_0 EXIST::FUNCTION:
+d2i_X509_bio 1765 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_exts 1766 3_0_0 EXIST::FUNCTION:TS
+EVP_aes_256_ecb 1767 3_0_0 EXIST::FUNCTION:
+ASN1_BIT_STRING_name_print 1768 3_0_0 EXIST::FUNCTION:
+d2i_X509_EXTENSIONS 1769 3_0_0 EXIST::FUNCTION:
+ASN1_OCTET_STRING_free 1770 3_0_0 EXIST::FUNCTION:
+PKCS7_RECIP_INFO_free 1771 3_0_0 EXIST::FUNCTION:
+ASN1_tag2bit 1772 3_0_0 EXIST::FUNCTION:
+TS_REQ_add_ext 1773 3_0_0 EXIST::FUNCTION:TS
+X509_digest 1776 3_0_0 EXIST::FUNCTION:
+CRYPTO_THREAD_cleanup_local 1777 3_0_0 EXIST::FUNCTION:
+NETSCAPE_CERT_SEQUENCE_it 1778 3_0_0 EXIST::FUNCTION:
+EVP_aes_128_wrap 1779 3_0_0 EXIST::FUNCTION:
+X509V3_conf_free 1780 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_ext_by_NID 1781 3_0_0 EXIST::FUNCTION:TS
+EVP_aes_256_cfb1 1782 3_0_0 EXIST::FUNCTION:
+X509_issuer_name_cmp 1783 3_0_0 EXIST::FUNCTION:
+CMS_RecipientEncryptedKey_get0_id 1784 3_0_0 EXIST::FUNCTION:CMS
+EVP_PKEY_meth_get_verify_recover 1785 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+NAME_CONSTRAINTS_check 1786 3_0_0 EXIST::FUNCTION:
+X509_CERT_AUX_it 1787 3_0_0 EXIST::FUNCTION:
+X509_get_X509_PUBKEY 1789 3_0_0 EXIST::FUNCTION:
+TXT_DB_create_index 1790 3_0_0 EXIST::FUNCTION:
+RAND_set_rand_engine 1791 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_set_serialNumber 1792 3_0_0 EXIST::FUNCTION:
+BN_mod_exp_mont_consttime 1793 3_0_0 EXIST::FUNCTION:
+X509V3_parse_list 1794 3_0_0 EXIST::FUNCTION:
+ACCESS_DESCRIPTION_new 1795 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_clear_flags 1796 3_0_0 EXIST::FUNCTION:
+ECDSA_size 1797 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_ALGOR_get0 1798 3_0_0 EXIST::FUNCTION:
+d2i_ACCESS_DESCRIPTION 1799 3_0_0 EXIST::FUNCTION:
+OCSP_SINGLERESP_get_ext_by_NID 1800 3_0_0 EXIST::FUNCTION:OCSP
+a2i_IPADDRESS_NC 1801 3_0_0 EXIST::FUNCTION:
+CTLOG_STORE_load_default_file 1802 3_0_0 EXIST::FUNCTION:CT
+PKCS12_SAFEBAG_create_pkcs8_encrypt 1803 3_0_0 EXIST::FUNCTION:
+RAND_screen 1804 3_0_0 EXIST:_WIN32:FUNCTION:DEPRECATEDIN_1_1_0
+CONF_get_string 1805 3_0_0 EXIST::FUNCTION:
+X509_cmp_current_time 1806 3_0_0 EXIST::FUNCTION:
+i2d_DSAPrivateKey 1807 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+ASN1_BIT_STRING_new 1808 3_0_0 EXIST::FUNCTION:
+BIO_new_file 1809 3_0_0 EXIST::FUNCTION:
+PKCS7_SIGNER_INFO_get0_algs 1810 3_0_0 EXIST::FUNCTION:
+TS_RESP_set_status_info 1811 3_0_0 EXIST::FUNCTION:TS
+OPENSSL_LH_delete 1812 3_0_0 EXIST::FUNCTION:
+TS_STATUS_INFO_dup 1813 3_0_0 EXIST::FUNCTION:TS
+X509v3_addr_get_range 1814 3_0_0 EXIST::FUNCTION:RFC3779
+X509_EXTENSION_get_data 1815 3_0_0 EXIST::FUNCTION:
+RC5_32_encrypt 1816 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC5
+DIST_POINT_set_dpname 1817 3_0_0 EXIST::FUNCTION:
+BIO_sock_info 1818 3_0_0 EXIST::FUNCTION:SOCK
+OPENSSL_hexstr2buf 1819 3_0_0 EXIST::FUNCTION:
+EVP_add_cipher 1820 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_add_list 1821 3_0_0 EXIST::FUNCTION:
+CMS_compress 1822 3_0_0 EXIST::FUNCTION:CMS
+X509_get_ext_by_critical 1823 3_0_0 EXIST::FUNCTION:
+ASYNC_WAIT_CTX_clear_fd 1824 3_0_0 EXIST::FUNCTION:
+ZLONG_it 1825 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OPENSSL_sk_find_ex 1826 3_0_0 EXIST::FUNCTION:
+ASN1_ENUMERATED_to_BN 1827 3_0_0 EXIST::FUNCTION:
+X509_CRL_get_ext_d2i 1828 3_0_0 EXIST::FUNCTION:
+i2d_AUTHORITY_KEYID 1829 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_time 1830 3_0_0 EXIST::FUNCTION:TS
+ASN1_VISIBLESTRING_it 1831 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_REQ_add_conf 1832 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_to_UTF8 1833 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_set_update 1835 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_camellia_192_cbc 1836 3_0_0 EXIST::FUNCTION:CAMELLIA
+OPENSSL_LH_stats_bio 1837 3_0_0 EXIST::FUNCTION:
+PKCS7_set_signed_attributes 1838 3_0_0 EXIST::FUNCTION:
+EC_KEY_priv2buf 1839 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+BN_BLINDING_free 1840 3_0_0 EXIST::FUNCTION:
+IPAddressChoice_new 1841 3_0_0 EXIST::FUNCTION:RFC3779
+X509_CRL_get_ext_count 1842 3_0_0 EXIST::FUNCTION:
+PKCS12_add_key 1843 3_0_0 EXIST::FUNCTION:
+EVP_camellia_128_cfb1 1844 3_0_0 EXIST::FUNCTION:CAMELLIA
+BIO_find_type 1845 3_0_0 EXIST::FUNCTION:
+ISSUING_DIST_POINT_it 1846 3_0_0 EXIST::FUNCTION:
+BIO_ctrl_wpending 1847 3_0_0 EXIST::FUNCTION:
+X509_ALGOR_cmp 1848 3_0_0 EXIST::FUNCTION:
+i2d_ASN1_bio_stream 1849 3_0_0 EXIST::FUNCTION:
+CRYPTO_THREAD_init_local 1850 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_serial_cb 1851 3_0_0 EXIST::FUNCTION:TS
+POLICY_MAPPING_it 1852 3_0_0 EXIST::FUNCTION:
+ERR_load_KDF_strings 1853 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+UI_method_set_reader 1854 3_0_0 EXIST::FUNCTION:
+BIO_next 1855 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_set_default_mask_asc 1856 3_0_0 EXIST::FUNCTION:
+X509_CRL_new 1857 3_0_0 EXIST::FUNCTION:
+i2b_PrivateKey_bio 1858 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_length_set 1859 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PEM_write_PKCS8 1860 3_0_0 EXIST::FUNCTION:STDIO
+PKCS7_digest_from_attributes 1861 3_0_0 EXIST::FUNCTION:
+EC_GROUP_set_curve_GFp 1862 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_PURPOSE_get0 1863 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set1_DSA 1864 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_NAME_it 1865 3_0_0 EXIST::FUNCTION:
+OBJ_add_object 1866 3_0_0 EXIST::FUNCTION:
+DSA_generate_key 1867 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+EVP_DigestUpdate 1868 3_0_0 EXIST::FUNCTION:
+X509_get_ext_by_OBJ 1869 3_0_0 EXIST::FUNCTION:
+PBEPARAM_new 1870 3_0_0 EXIST::FUNCTION:
+EVP_aes_128_cbc 1871 3_0_0 EXIST::FUNCTION:
+CRYPTO_dup_ex_data 1872 3_0_0 EXIST::FUNCTION:
+OCSP_single_get0_status 1873 3_0_0 EXIST::FUNCTION:OCSP
+d2i_AUTHORITY_INFO_ACCESS 1874 3_0_0 EXIST::FUNCTION:
+PEM_read_RSAPrivateKey 1875 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+BIO_closesocket 1876 3_0_0 EXIST::FUNCTION:SOCK
+RSA_verify_ASN1_OCTET_STRING 1877 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SCT_set_log_entry_type 1878 3_0_0 EXIST::FUNCTION:CT
+BN_new 1879 3_0_0 EXIST::FUNCTION:
+X509_OBJECT_retrieve_by_subject 1880 3_0_0 EXIST::FUNCTION:
+MD5_Final 1881 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD5
+X509_STORE_set_verify_cb 1882 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_print 1883 3_0_0 EXIST::FUNCTION:OCSP
+CMS_add1_crl 1884 3_0_0 EXIST::FUNCTION:CMS
+d2i_EDIPARTYNAME 1885 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set0_trusted_stack 1886 3_0_0 EXIST::FUNCTION:
+BIO_ADDR_service_string 1887 3_0_0 EXIST::FUNCTION:SOCK
+ASN1_BOOLEAN_it 1888 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_time_cb 1889 3_0_0 EXIST::FUNCTION:TS
+IDEA_cbc_encrypt 1890 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,IDEA
+BN_CTX_secure_new 1891 3_0_0 EXIST::FUNCTION:
+OCSP_ONEREQ_add_ext 1892 3_0_0 EXIST::FUNCTION:OCSP
+CMS_uncompress 1893 3_0_0 EXIST::FUNCTION:CMS
+CRYPTO_mem_debug_pop 1895 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0
+EVP_aes_192_cfb128 1896 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_REQ_CTX_nbio 1897 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_copy 1898 3_0_0 EXIST::FUNCTION:
+CRYPTO_secure_allocated 1899 3_0_0 EXIST::FUNCTION:
+UI_UTIL_read_pw_string 1900 3_0_0 EXIST::FUNCTION:
+NOTICEREF_free 1901 3_0_0 EXIST::FUNCTION:
+AES_cfb1_encrypt 1902 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509v3_get_ext 1903 3_0_0 EXIST::FUNCTION:
+CRYPTO_gcm128_encrypt_ctr32 1905 3_0_0 EXIST::FUNCTION:
+SCT_set1_signature 1906 3_0_0 EXIST::FUNCTION:CT
+CONF_imodule_get_module 1907 3_0_0 EXIST::FUNCTION:
+NAME_CONSTRAINTS_new 1908 3_0_0 EXIST::FUNCTION:
+BN_usub 1909 3_0_0 EXIST::FUNCTION:
+SRP_Calc_B 1910 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+CMS_decrypt_set1_key 1911 3_0_0 EXIST::FUNCTION:CMS
+EC_GROUP_get_degree 1912 3_0_0 EXIST::FUNCTION:EC
+X509_ALGOR_set0 1913 3_0_0 EXIST::FUNCTION:
+OPENSSL_LH_set_down_load 1914 3_0_0 EXIST::FUNCTION:
+X509v3_asid_inherits 1915 3_0_0 EXIST::FUNCTION:RFC3779
+EVP_MD_meth_get_app_datasize 1916 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_STORE_CTX_get_num_untrusted 1917 3_0_0 EXIST::FUNCTION:
+RAND_poll 1918 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_print_public 1919 3_0_0 EXIST::FUNCTION:
+CMS_SignedData_init 1920 3_0_0 EXIST::FUNCTION:CMS
+X509_REQ_free 1921 3_0_0 EXIST::FUNCTION:
+ASN1_INTEGER_set 1922 3_0_0 EXIST::FUNCTION:
+EVP_DecodeFinal 1923 3_0_0 EXIST::FUNCTION:
+MD5_Transform 1925 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD5
+SRP_create_verifier_BN 1926 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+ENGINE_register_all_EC 1927 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_camellia_128_ofb 1928 3_0_0 EXIST::FUNCTION:CAMELLIA
+PEM_write_X509_AUX 1929 3_0_0 EXIST::FUNCTION:STDIO
+X509_LOOKUP_by_subject 1930 3_0_0 EXIST::FUNCTION:
+X509_REQ_add_extensions 1931 3_0_0 EXIST::FUNCTION:
+Camellia_cbc_encrypt 1932 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+EC_KEY_METHOD_new 1933 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+RSA_flags 1934 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_NAME_add_entry 1935 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get_asn1_iv 1936 3_0_0 EXIST::FUNCTION:
+i2d_RSAPrivateKey_bio 1937 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PKCS5_PBE_keyivgen 1938 3_0_0 EXIST::FUNCTION:
+i2d_OCSP_SERVICELOC 1939 3_0_0 EXIST::FUNCTION:OCSP
+EC_POINT_copy 1940 3_0_0 EXIST::FUNCTION:EC
+X509V3_EXT_CRL_add_nconf 1941 3_0_0 EXIST::FUNCTION:
+SHA256_Init 1942 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_NAME_ENTRY_get_object 1943 3_0_0 EXIST::FUNCTION:
+ASN1_ENUMERATED_free 1944 3_0_0 EXIST::FUNCTION:
+X509_CRL_set_meth_data 1945 3_0_0 EXIST::FUNCTION:
+EVP_aes_192_cfb1 1946 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_set_flags 1947 3_0_0 EXIST::FUNCTION:
+EVP_seed_cbc 1948 3_0_0 EXIST::FUNCTION:SEED
+d2i_PKCS12 1949 3_0_0 EXIST::FUNCTION:
+X509_policy_node_get0_policy 1950 3_0_0 EXIST::FUNCTION:
+PKCS12_unpack_p7data 1951 3_0_0 EXIST::FUNCTION:
+ECDSA_sign 1952 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+d2i_PKCS12_fp 1953 3_0_0 EXIST::FUNCTION:STDIO
+CMS_unsigned_get_attr_by_NID 1954 3_0_0 EXIST::FUNCTION:CMS
+UI_add_user_data 1955 3_0_0 EXIST::FUNCTION:
+BN_bntest_rand 1956 3_0_0 EXIST::FUNCTION:
+X509_get_pubkey 1957 3_0_0 EXIST::FUNCTION:
+i2d_X509_NAME 1958 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_add1_attr 1959 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_purpose_inherit 1960 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_get_keygen 1961 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_get_pkey_asn1_meth 1962 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+SHA256_Update 1963 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_PKCS7_ISSUER_AND_SERIAL 1964 3_0_0 EXIST::FUNCTION:
+PKCS12_unpack_authsafes 1965 3_0_0 EXIST::FUNCTION:
+X509_CRL_it 1966 3_0_0 EXIST::FUNCTION:
+d2i_X509_ALGOR 1967 3_0_0 EXIST::FUNCTION:
+PKCS12_PBE_keyivgen 1968 3_0_0 EXIST::FUNCTION:
+BIO_test_flags 1969 3_0_0 EXIST::FUNCTION:
+EC_POINT_get_affine_coordinates_GF2m 1970 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC2M
+EVP_ENCODE_CTX_num 1971 3_0_0 EXIST::FUNCTION:
+Camellia_cfb1_encrypt 1972 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+NCONF_load_fp 1973 3_0_0 EXIST::FUNCTION:STDIO
+i2d_OCSP_REQINFO 1974 3_0_0 EXIST::FUNCTION:OCSP
+EVP_PKEY_sign 1975 3_0_0 EXIST::FUNCTION:
+TS_REQ_get_ext_by_critical 1976 3_0_0 EXIST::FUNCTION:TS
+EC_KEY_key2buf 1977 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_EXTENSION_it 1978 3_0_0 EXIST::FUNCTION:
+i2d_PKCS8_fp 1979 3_0_0 EXIST::FUNCTION:STDIO
+UTF8_getc 1980 3_0_0 EXIST::FUNCTION:
+ASN1_IA5STRING_free 1981 3_0_0 EXIST::FUNCTION:
+EC_KEY_METHOD_get_verify 1982 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+OBJ_NAME_do_all 1983 3_0_0 EXIST::FUNCTION:
+d2i_TS_MSG_IMPRINT_fp 1984 3_0_0 EXIST::FUNCTION:STDIO,TS
+X509_CRL_verify 1985 3_0_0 EXIST::FUNCTION:
+X509_get0_uids 1986 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get0_DSA 1987 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+d2i_CMS_ContentInfo 1988 3_0_0 EXIST::FUNCTION:CMS
+EVP_CIPHER_meth_get_do_cipher 1989 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_DSA_PUBKEY 1990 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+GENERAL_NAME_it 1991 3_0_0 EXIST::FUNCTION:
+EVP_des_ede_ecb 1992 3_0_0 EXIST::FUNCTION:DES
+i2d_CRL_DIST_POINTS 1993 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_X509_REQ_NEW 1994 3_0_0 EXIST::FUNCTION:
+RC5_32_ofb64_encrypt 1995 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC5
+i2d_PKCS7 1996 3_0_0 EXIST::FUNCTION:
+BN_mod_lshift_quick 1997 3_0_0 EXIST::FUNCTION:
+DIST_POINT_NAME_it 1998 3_0_0 EXIST::FUNCTION:
+PEM_read_PrivateKey 1999 3_0_0 EXIST::FUNCTION:STDIO
+X509V3_get_d2i 2000 3_0_0 EXIST::FUNCTION:
+PKCS7_SIGNER_INFO_sign 2001 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_free 2002 3_0_0 EXIST::FUNCTION:TS
+DSA_security_bits 2003 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509v3_addr_is_canonical 2004 3_0_0 EXIST::FUNCTION:RFC3779
+BN_mod_mul_reciprocal 2005 3_0_0 EXIST::FUNCTION:
+TS_REQ_get_version 2006 3_0_0 EXIST::FUNCTION:TS
+BN_exp 2007 3_0_0 EXIST::FUNCTION:
+i2d_SXNET 2008 3_0_0 EXIST::FUNCTION:
+OBJ_bsearch_ 2009 3_0_0 EXIST::FUNCTION:
+OPENSSL_LH_new 2010 3_0_0 EXIST::FUNCTION:
+ENGINE_register_all_pkey_meths 2011 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ENGINE_get_init_function 2012 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EC_POINT_point2hex 2013 3_0_0 EXIST::FUNCTION:EC
+ENGINE_get_default_DSA 2014 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ENGINE_register_all_complete 2015 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+SRP_get_default_gN 2016 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+UI_dup_input_boolean 2017 3_0_0 EXIST::FUNCTION:
+PKCS7_dup 2018 3_0_0 EXIST::FUNCTION:
+i2d_TS_REQ_fp 2019 3_0_0 EXIST::FUNCTION:STDIO,TS
+i2d_OTHERNAME 2020 3_0_0 EXIST::FUNCTION:
+EC_KEY_get0_private_key 2021 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+SCT_get0_extensions 2022 3_0_0 EXIST::FUNCTION:CT
+OPENSSL_LH_node_stats_bio 2023 3_0_0 EXIST::FUNCTION:
+i2d_DIRECTORYSTRING 2024 3_0_0 EXIST::FUNCTION:
+BN_X931_derive_prime_ex 2025 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_get_pkey_asn1_meth_str 2026 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+PKCS7_signatureVerify 2027 3_0_0 EXIST::FUNCTION:
+CRYPTO_ocb128_new 2028 3_0_0 EXIST::FUNCTION:OCB
+EC_curve_nist2nid 2029 3_0_0 EXIST::FUNCTION:EC
+UI_get0_result 2030 3_0_0 EXIST::FUNCTION:
+OCSP_request_add1_nonce 2031 3_0_0 EXIST::FUNCTION:OCSP
+UI_construct_prompt 2032 3_0_0 EXIST::FUNCTION:
+ENGINE_unregister_RSA 2033 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EC_GROUP_order_bits 2034 3_0_0 EXIST::FUNCTION:EC
+d2i_CMS_bio 2035 3_0_0 EXIST::FUNCTION:CMS
+OPENSSL_sk_num 2036 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_set0_pkey 2038 3_0_0 EXIST::FUNCTION:CMS
+X509_STORE_CTX_set_default 2039 3_0_0 EXIST::FUNCTION:
+AES_wrap_key 2040 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_md_null 2041 3_0_0 EXIST::FUNCTION:
+i2d_SCT_LIST 2042 3_0_0 EXIST::FUNCTION:CT
+PKCS7_get_issuer_and_serial 2043 3_0_0 EXIST::FUNCTION:
+PKCS7_SIGN_ENVELOPE_it 2044 3_0_0 EXIST::FUNCTION:
+ASN1_d2i_fp 2045 3_0_0 EXIST::FUNCTION:STDIO
+EVP_DecryptFinal 2046 3_0_0 EXIST::FUNCTION:
+ASN1_ENUMERATED_it 2047 3_0_0 EXIST::FUNCTION:
+o2i_ECPublicKey 2048 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ERR_load_BUF_strings 2049 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PEM_read_bio_RSA_PUBKEY 2050 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OCSP_SINGLERESP_new 2051 3_0_0 EXIST::FUNCTION:OCSP
+ASN1_SCTX_free 2052 3_0_0 EXIST::FUNCTION:
+i2d_ECPrivateKey_fp 2053 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+EVP_CIPHER_CTX_original_iv 2054 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PKCS7_SIGNED_free 2055 3_0_0 EXIST::FUNCTION:
+X509_TRUST_get0_name 2056 3_0_0 EXIST::FUNCTION:
+ENGINE_get_load_pubkey_function 2057 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+UI_get_default_method 2058 3_0_0 EXIST::FUNCTION:
+PKCS12_add_CSPName_asc 2059 3_0_0 EXIST::FUNCTION:
+PEM_write_PUBKEY 2060 3_0_0 EXIST::FUNCTION:STDIO
+UI_method_set_prompt_constructor 2061 3_0_0 EXIST::FUNCTION:
+OBJ_length 2062 3_0_0 EXIST::FUNCTION:
+BN_GENCB_get_arg 2063 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_clear_flags 2064 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_get_verifyctx 2065 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CT_POLICY_EVAL_CTX_get0_cert 2066 3_0_0 EXIST::FUNCTION:CT
+PEM_write_DHparams 2067 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH,STDIO
+DH_set_ex_data 2068 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+OCSP_SIGNATURE_free 2069 3_0_0 EXIST::FUNCTION:OCSP
+CRYPTO_128_unwrap_pad 2070 3_0_0 EXIST::FUNCTION:
+BIO_new_CMS 2071 3_0_0 EXIST::FUNCTION:CMS
+i2d_ASN1_ENUMERATED 2072 3_0_0 EXIST::FUNCTION:
+PEM_read_DSAparams 2073 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+TS_TST_INFO_set_ordering 2074 3_0_0 EXIST::FUNCTION:TS
+MDC2_Init 2075 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MDC2
+i2o_SCT 2076 3_0_0 EXIST::FUNCTION:CT
+d2i_TS_STATUS_INFO 2077 3_0_0 EXIST::FUNCTION:TS
+ERR_error_string_n 2078 3_0_0 EXIST::FUNCTION:
+HMAC 2079 3_0_0 EXIST::FUNCTION:
+BN_mul 2080 3_0_0 EXIST::FUNCTION:
+BN_get0_nist_prime_384 2081 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set1_ip_asc 2082 3_0_0 EXIST::FUNCTION:
+CONF_modules_load 2083 3_0_0 EXIST::FUNCTION:
+d2i_RSAPublicKey 2084 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_ASN1_GENERALSTRING 2085 3_0_0 EXIST::FUNCTION:
+POLICYQUALINFO_new 2086 3_0_0 EXIST::FUNCTION:
+PKCS7_RECIP_INFO_get0_alg 2087 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_base_id 2088 3_0_0 EXIST::FUNCTION:
+UI_method_set_opener 2089 3_0_0 EXIST::FUNCTION:
+X509v3_get_ext_by_NID 2090 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_policies 2091 3_0_0 EXIST::FUNCTION:TS
+CMS_SignerInfo_cert_cmp 2092 3_0_0 EXIST::FUNCTION:CMS
+PEM_read 2093 3_0_0 EXIST::FUNCTION:STDIO
+X509_STORE_set_depth 2094 3_0_0 EXIST::FUNCTION:
+EC_KEY_METHOD_get_sign 2095 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_CIPHER_CTX_iv 2096 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_ESS_SIGNING_CERT 2097 3_0_0 EXIST::FUNCTION:
+TS_RESP_set_tst_info 2098 3_0_0 EXIST::FUNCTION:TS
+EVP_PKEY_CTX_set_data 2099 3_0_0 EXIST::FUNCTION:
+CMS_EnvelopedData_create 2100 3_0_0 EXIST::FUNCTION:CMS
+SCT_new 2101 3_0_0 EXIST::FUNCTION:CT
+X509_REQ_add1_attr 2102 3_0_0 EXIST::FUNCTION:
+X509_get_ext_count 2103 3_0_0 EXIST::FUNCTION:
+CRYPTO_cts128_decrypt 2104 3_0_0 EXIST::FUNCTION:
+ASYNC_WAIT_CTX_get_fd 2105 3_0_0 EXIST::FUNCTION:
+i2d_TS_REQ 2106 3_0_0 EXIST::FUNCTION:TS
+OCSP_ONEREQ_add1_ext_i2d 2107 3_0_0 EXIST::FUNCTION:OCSP
+ENGINE_register_pkey_meths 2108 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ENGINE_load_public_key 2109 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ASIdOrRange_it 2110 3_0_0 EXIST::FUNCTION:RFC3779
+DHparams_print_fp 2111 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH,STDIO
+ERR_load_CRYPTO_strings 2112 3_0_0 EXIST:!VMS:FUNCTION:DEPRECATEDIN_3_0
+ERR_load_CRYPTOlib_strings 2112 3_0_0 EXIST:VMS:FUNCTION:DEPRECATEDIN_3_0
+X509_REQ_set_version 2113 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_GENERALSTRING 2114 3_0_0 EXIST::FUNCTION:
+i2d_ASIdentifiers 2115 3_0_0 EXIST::FUNCTION:RFC3779
+X509V3_EXT_cleanup 2116 3_0_0 EXIST::FUNCTION:
+CAST_ecb_encrypt 2117 3_0_0 EXIST::FUNCTION:CAST,DEPRECATEDIN_3_0
+BIO_s_file 2118 3_0_0 EXIST::FUNCTION:
+RSA_X931_derive_ex 2119 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_decrypt_init 2120 3_0_0 EXIST::FUNCTION:
+ENGINE_get_destroy_function 2121 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+SHA224_Init 2122 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509V3_EXT_add_conf 2123 3_0_0 EXIST::FUNCTION:
+ASN1_object_size 2124 3_0_0 EXIST::FUNCTION:
+X509_REVOKED_free 2125 3_0_0 EXIST::FUNCTION:
+BN_mod_exp_recp 2126 3_0_0 EXIST::FUNCTION:
+EVP_mdc2 2127 3_0_0 EXIST::FUNCTION:MDC2
+EVP_des_cfb64 2128 3_0_0 EXIST::FUNCTION:DES
+PKCS7_sign 2129 3_0_0 EXIST::FUNCTION:
+OCSP_SINGLERESP_get_ext_by_critical 2130 3_0_0 EXIST::FUNCTION:OCSP
+EDIPARTYNAME_it 2131 3_0_0 EXIST::FUNCTION:
+ERR_print_errors_fp 2132 3_0_0 EXIST::FUNCTION:STDIO
+BN_GF2m_mod_div_arr 2133 3_0_0 EXIST::FUNCTION:EC2M
+PKCS12_SAFEBAG_get0_attr 2134 3_0_0 EXIST::FUNCTION:
+BIO_s_mem 2135 3_0_0 EXIST::FUNCTION:
+OCSP_RESPDATA_new 2136 3_0_0 EXIST::FUNCTION:OCSP
+ASN1_item_i2d_fp 2137 3_0_0 EXIST::FUNCTION:STDIO
+BN_GF2m_mod_sqr 2138 3_0_0 EXIST::FUNCTION:EC2M
+ASN1_PRINTABLE_new 2139 3_0_0 EXIST::FUNCTION:
+OBJ_NAME_new_index 2140 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_add_alias 2141 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get1_DSA 2142 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+SEED_cbc_encrypt 2143 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SEED
+EVP_rc2_40_cbc 2144 3_0_0 EXIST::FUNCTION:RC2
+ECDSA_SIG_new 2145 3_0_0 EXIST::FUNCTION:EC
+i2d_PKCS8PrivateKey_nid_fp 2146 3_0_0 EXIST::FUNCTION:STDIO
+X509_NAME_ENTRY_it 2147 3_0_0 EXIST::FUNCTION:
+CRYPTO_THREAD_compare_id 2148 3_0_0 EXIST::FUNCTION:
+d2i_IPAddressChoice 2149 3_0_0 EXIST::FUNCTION:RFC3779
+IPAddressFamily_it 2150 3_0_0 EXIST::FUNCTION:RFC3779
+ERR_load_OCSP_strings 2151 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,OCSP
+BIO_push 2152 3_0_0 EXIST::FUNCTION:
+ASN1_BMPSTRING_new 2153 3_0_0 EXIST::FUNCTION:
+COMP_get_type 2154 3_0_0 EXIST::FUNCTION:COMP
+d2i_ASIdentifierChoice 2155 3_0_0 EXIST::FUNCTION:RFC3779
+i2d_ASN1_T61STRING 2156 3_0_0 EXIST::FUNCTION:
+X509_add1_trust_object 2157 3_0_0 EXIST::FUNCTION:
+PEM_write_X509 2158 3_0_0 EXIST::FUNCTION:STDIO
+BN_CTX_free 2159 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get_curve_GF2m 2160 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC2M
+EVP_MD_get_flags 2161 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_set 2162 3_0_0 EXIST::FUNCTION:
+OCSP_request_sign 2163 3_0_0 EXIST::FUNCTION:OCSP
+BN_GF2m_mod_solve_quad 2164 3_0_0 EXIST::FUNCTION:EC2M
+EC_POINT_method_of 2165 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PKCS7_ENCRYPT_it 2166 3_0_0 EXIST::FUNCTION:
+AUTHORITY_INFO_ACCESS_it 2167 3_0_0 EXIST::FUNCTION:
+X509_EXTENSION_create_by_NID 2168 3_0_0 EXIST::FUNCTION:
+i2d_RSAPrivateKey 2169 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_CERTIFICATEPOLICIES 2170 3_0_0 EXIST::FUNCTION:
+CMAC_CTX_get0_cipher_ctx 2171 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
+X509_STORE_load_locations 2172 3_0_0 EXIST::FUNCTION:
+OBJ_find_sigid_algs 2173 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_accuracy 2174 3_0_0 EXIST::FUNCTION:TS
+NETSCAPE_SPKI_get_pubkey 2175 3_0_0 EXIST::FUNCTION:
+ECDSA_do_sign_ex 2176 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+OCSP_ONEREQ_get_ext 2177 3_0_0 EXIST::FUNCTION:OCSP
+BN_get_rfc3526_prime_4096 2179 3_0_0 EXIST::FUNCTION:
+d2i_PKCS7_fp 2180 3_0_0 EXIST::FUNCTION:STDIO
+PEM_write_bio_NETSCAPE_CERT_SEQUENCE 2181 3_0_0 EXIST::FUNCTION:
+PKCS12_AUTHSAFES_it 2182 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_free 2183 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_kari_orig_id_cmp 2184 3_0_0 EXIST::FUNCTION:CMS
+NETSCAPE_SPKI_b64_encode 2185 3_0_0 EXIST::FUNCTION:
+d2i_PrivateKey 2186 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_new 2187 3_0_0 EXIST::FUNCTION:
+X509_get0_tbs_sigalg 2189 3_0_0 EXIST::FUNCTION:
+ASN1_GENERALIZEDTIME_new 2190 3_0_0 EXIST::FUNCTION:
+d2i_ECDSA_SIG 2191 3_0_0 EXIST::FUNCTION:EC
+d2i_OTHERNAME 2192 3_0_0 EXIST::FUNCTION:
+i2d_TS_RESP_fp 2193 3_0_0 EXIST::FUNCTION:STDIO,TS
+OCSP_BASICRESP_get_ext_count 2194 3_0_0 EXIST::FUNCTION:OCSP
+ASN1_T61STRING_new 2195 3_0_0 EXIST::FUNCTION:
+BN_kronecker 2196 3_0_0 EXIST::FUNCTION:
+i2d_ACCESS_DESCRIPTION 2197 3_0_0 EXIST::FUNCTION:
+EVP_camellia_192_cfb8 2198 3_0_0 EXIST::FUNCTION:CAMELLIA
+X509_STORE_CTX_set_depth 2199 3_0_0 EXIST::FUNCTION:
+X509v3_delete_ext 2200 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_set0 2201 3_0_0 EXIST::FUNCTION:
+BN_GF2m_add 2202 3_0_0 EXIST::FUNCTION:EC2M
+CMAC_resume 2203 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
+TS_ACCURACY_set_millis 2204 3_0_0 EXIST::FUNCTION:TS
+X509V3_EXT_conf 2205 3_0_0 EXIST::FUNCTION:
+i2d_DHxparams 2206 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+EVP_CIPHER_CTX_free 2207 3_0_0 EXIST::FUNCTION:
+WHIRLPOOL_BitUpdate 2208 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,WHIRLPOOL
+EVP_idea_ecb 2209 3_0_0 EXIST::FUNCTION:IDEA
+i2d_TS_ACCURACY 2210 3_0_0 EXIST::FUNCTION:TS
+ASN1_VISIBLESTRING_free 2211 3_0_0 EXIST::FUNCTION:
+NCONF_load_bio 2212 3_0_0 EXIST::FUNCTION:
+DSA_get_default_method 2213 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+OPENSSL_LH_retrieve 2214 3_0_0 EXIST::FUNCTION:
+CRYPTO_ccm128_decrypt_ccm64 2215 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_clock_precision_digits 2216 3_0_0 EXIST::FUNCTION:TS
+SCT_LIST_validate 2217 3_0_0 EXIST::FUNCTION:CT
+X509_PURPOSE_get_id 2218 3_0_0 EXIST::FUNCTION:
+EC_KEY_get_ex_data 2219 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_MD_get_size 2220 3_0_0 EXIST::FUNCTION:
+CRYPTO_malloc 2221 3_0_0 EXIST::FUNCTION:
+ERR_load_ASN1_strings 2222 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_REQ_get_extension_nids 2223 3_0_0 EXIST::FUNCTION:
+TS_REQ_get_ext_by_OBJ 2224 3_0_0 EXIST::FUNCTION:TS
+i2d_X509 2225 3_0_0 EXIST::FUNCTION:
+PEM_read_X509_AUX 2226 3_0_0 EXIST::FUNCTION:STDIO
+TS_VERIFY_CTX_set_flags 2227 3_0_0 EXIST::FUNCTION:TS
+IPAddressRange_new 2228 3_0_0 EXIST::FUNCTION:RFC3779
+TS_REQ_get_exts 2229 3_0_0 EXIST::FUNCTION:TS
+POLICY_CONSTRAINTS_new 2230 3_0_0 EXIST::FUNCTION:
+OTHERNAME_new 2231 3_0_0 EXIST::FUNCTION:
+BN_rshift 2232 3_0_0 EXIST::FUNCTION:
+i2d_GENERAL_NAMES 2233 3_0_0 EXIST::FUNCTION:
+EC_METHOD_get_field_type 2234 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ENGINE_set_name 2235 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+TS_TST_INFO_get_policy_id 2236 3_0_0 EXIST::FUNCTION:TS
+PKCS7_SIGNER_INFO_set 2237 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_PKCS8_PRIV_KEY_INFO 2238 3_0_0 EXIST::FUNCTION:
+EC_GROUP_set_curve_GF2m 2239 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC2M
+ENGINE_load_builtin_engines 2240 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+SRP_VBASE_init 2241 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SHA224_Final 2242 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OCSP_CERTSTATUS_free 2243 3_0_0 EXIST::FUNCTION:OCSP
+d2i_TS_TST_INFO 2244 3_0_0 EXIST::FUNCTION:TS
+IPAddressOrRange_it 2245 3_0_0 EXIST::FUNCTION:RFC3779
+ENGINE_get_cipher 2246 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+TS_TST_INFO_delete_ext 2247 3_0_0 EXIST::FUNCTION:TS
+TS_OBJ_print_bio 2248 3_0_0 EXIST::FUNCTION:TS
+X509_time_adj_ex 2249 3_0_0 EXIST::FUNCTION:
+OCSP_request_add1_cert 2250 3_0_0 EXIST::FUNCTION:OCSP
+ERR_load_X509_strings 2251 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SHA1_Transform 2252 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CMS_signed_get_attr_by_NID 2253 3_0_0 EXIST::FUNCTION:CMS
+X509_STORE_CTX_get_by_subject 2254 3_0_0 EXIST::FUNCTION:
+ASN1_OCTET_STRING_it 2255 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_set_cmp_func 2256 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_table_cleanup 2257 3_0_0 EXIST::FUNCTION:
+i2d_re_X509_REQ_tbs 2258 3_0_0 EXIST::FUNCTION:
+CONF_load_bio 2259 3_0_0 EXIST::FUNCTION:
+X509_ATTRIBUTE_get0_object 2260 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_missing_parameters 2261 3_0_0 EXIST::FUNCTION:
+X509_REQ_INFO_new 2262 3_0_0 EXIST::FUNCTION:
+EVP_rc2_cfb64 2263 3_0_0 EXIST::FUNCTION:RC2
+PKCS7_get_smimecap 2264 3_0_0 EXIST::FUNCTION:
+ERR_get_state 2265 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_DSAPrivateKey_bio 2266 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_PURPOSE_get_trust 2267 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get_point_conversion_form 2268 3_0_0 EXIST::FUNCTION:EC
+ASN1_OBJECT_it 2269 3_0_0 EXIST::FUNCTION:
+BN_mod_add_quick 2270 3_0_0 EXIST::FUNCTION:
+NCONF_free 2271 3_0_0 EXIST::FUNCTION:
+NETSCAPE_SPKI_b64_decode 2272 3_0_0 EXIST::FUNCTION:
+BIO_f_md 2273 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_get_pkey_ctx 2274 3_0_0 EXIST::FUNCTION:
+ENGINE_set_default_EC 2275 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+CMS_ReceiptRequest_free 2276 3_0_0 EXIST::FUNCTION:CMS
+TS_STATUS_INFO_get0_text 2277 3_0_0 EXIST::FUNCTION:TS
+CRYPTO_get_ex_new_index 2278 3_0_0 EXIST::FUNCTION:
+ASN1_PCTX_set_flags 2279 3_0_0 EXIST::FUNCTION:
+PEM_write_X509_CRL 2280 3_0_0 EXIST::FUNCTION:STDIO
+BF_cbc_encrypt 2281 3_0_0 EXIST::FUNCTION:BF,DEPRECATEDIN_3_0
+BN_num_bits_word 2282 3_0_0 EXIST::FUNCTION:
+EVP_DecodeInit 2283 3_0_0 EXIST::FUNCTION:
+BN_ucmp 2284 3_0_0 EXIST::FUNCTION:
+SXNET_get_id_asc 2285 3_0_0 EXIST::FUNCTION:
+SCT_set1_extensions 2286 3_0_0 EXIST::FUNCTION:CT
+PKCS12_SAFEBAG_new 2287 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_set_nonce 2288 3_0_0 EXIST::FUNCTION:TS
+PEM_read_ECPrivateKey 2289 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+RSA_free 2290 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_CRL_INFO_new 2291 3_0_0 EXIST::FUNCTION:
+AES_cfb8_encrypt 2292 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_ASN1_SEQUENCE_ANY 2293 3_0_0 EXIST::FUNCTION:
+PKCS12_create 2294 3_0_0 EXIST::FUNCTION:
+X509at_get_attr_count 2295 3_0_0 EXIST::FUNCTION:
+PKCS12_init 2296 3_0_0 EXIST::FUNCTION:
+CRYPTO_free_ex_data 2297 3_0_0 EXIST::FUNCTION:
+EVP_aes_128_cfb8 2298 3_0_0 EXIST::FUNCTION:
+ESS_ISSUER_SERIAL_free 2299 3_0_0 EXIST::FUNCTION:
+BN_mod_exp_mont_word 2300 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_nconf_nid 2301 3_0_0 EXIST::FUNCTION:
+UTF8_putc 2302 3_0_0 EXIST::FUNCTION:
+RSA_private_encrypt 2303 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_LOOKUP_shutdown 2304 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_set_accuracy 2305 3_0_0 EXIST::FUNCTION:TS
+OCSP_basic_verify 2306 3_0_0 EXIST::FUNCTION:OCSP
+X509at_add1_attr_by_OBJ 2307 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_add0 2308 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_get1_crl 2309 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_get_default_mask 2310 3_0_0 EXIST::FUNCTION:
+X509_alias_set1 2311 3_0_0 EXIST::FUNCTION:
+ASN1_item_unpack 2312 3_0_0 EXIST::FUNCTION:
+HMAC_CTX_free 2313 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EC_POINT_new 2314 3_0_0 EXIST::FUNCTION:EC
+PKCS7_ISSUER_AND_SERIAL_digest 2315 3_0_0 EXIST::FUNCTION:
+EVP_des_ofb 2316 3_0_0 EXIST::FUNCTION:DES
+DSA_set_method 2317 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+EVP_PKEY_get1_RSA 2318 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EC_KEY_OpenSSL 2319 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_camellia_192_ofb 2320 3_0_0 EXIST::FUNCTION:CAMELLIA
+ASN1_STRING_length 2321 3_0_0 EXIST::FUNCTION:
+PKCS7_set_digest 2322 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_PUBKEY 2323 3_0_0 EXIST::FUNCTION:
+PEM_read_PKCS7 2324 3_0_0 EXIST::FUNCTION:STDIO
+DH_get_2048_256 2325 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+X509at_delete_attr 2326 3_0_0 EXIST::FUNCTION:
+PEM_write_bio 2327 3_0_0 EXIST::FUNCTION:
+CMS_signed_get_attr_by_OBJ 2329 3_0_0 EXIST::FUNCTION:CMS
+X509_REVOKED_add_ext 2330 3_0_0 EXIST::FUNCTION:
+EVP_CipherUpdate 2331 3_0_0 EXIST::FUNCTION:
+Camellia_cfb8_encrypt 2332 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+EVP_aes_256_xts 2333 3_0_0 EXIST::FUNCTION:
+EVP_DigestSignFinal 2334 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_cmp 2335 3_0_0 EXIST::FUNCTION:
+EVP_chacha20_poly1305 2336 3_0_0 EXIST::FUNCTION:CHACHA,POLY1305
+OPENSSL_sk_zero 2337 3_0_0 EXIST::FUNCTION:
+ASN1_PRINTABLE_type 2338 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_ess_cert_id_chain 2339 3_0_0 EXIST::FUNCTION:TS
+PEM_read_DSAPrivateKey 2340 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+DH_generate_parameters_ex 2341 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+UI_dup_input_string 2342 3_0_0 EXIST::FUNCTION:
+X509_keyid_set1 2343 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set1 2344 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get_asn1_flag 2345 3_0_0 EXIST::FUNCTION:EC
+CMS_decrypt_set1_password 2346 3_0_0 EXIST::FUNCTION:CMS
+BIO_copy_next_retry 2347 3_0_0 EXIST::FUNCTION:
+X509_POLICY_NODE_print 2348 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_diff 2349 3_0_0 EXIST::FUNCTION:
+BIO_s_fd 2350 3_0_0 EXIST::FUNCTION:
+i2d_CMS_bio 2351 3_0_0 EXIST::FUNCTION:CMS
+CRYPTO_gcm128_decrypt 2352 3_0_0 EXIST::FUNCTION:
+EVP_aes_256_ctr 2353 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_bits 2354 3_0_0 EXIST::FUNCTION:
+BN_BLINDING_new 2355 3_0_0 EXIST::FUNCTION:
+ASN1_GENERALIZEDTIME_check 2356 3_0_0 EXIST::FUNCTION:
+BN_clear_bit 2357 3_0_0 EXIST::FUNCTION:
+BN_bn2lebinpad 2358 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_up_ref 2359 3_0_0 EXIST::FUNCTION:
+X509_getm_notBefore 2360 3_0_0 EXIST::FUNCTION:
+BN_nist_mod_224 2361 3_0_0 EXIST::FUNCTION:
+DES_decrypt3 2362 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+OTHERNAME_it 2363 3_0_0 EXIST::FUNCTION:
+X509at_add1_attr_by_txt 2364 3_0_0 EXIST::FUNCTION:
+PKCS7_SIGN_ENVELOPE_free 2365 3_0_0 EXIST::FUNCTION:
+BIO_dgram_is_sctp 2366 3_0_0 EXIST::FUNCTION:DGRAM,SCTP
+DH_check 2367 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+Camellia_set_key 2368 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+X509_LOOKUP_by_issuer_serial 2369 3_0_0 EXIST::FUNCTION:
+ASN1_BMPSTRING_free 2370 3_0_0 EXIST::FUNCTION:
+BIO_new_accept 2371 3_0_0 EXIST::FUNCTION:SOCK
+GENERAL_NAME_new 2372 3_0_0 EXIST::FUNCTION:
+DES_encrypt3 2373 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+PKCS7_get_signer_info 2374 3_0_0 EXIST::FUNCTION:
+ASN1_OCTET_STRING_set 2375 3_0_0 EXIST::FUNCTION:
+BN_mask_bits 2376 3_0_0 EXIST::FUNCTION:
+ASN1_UTF8STRING_it 2377 3_0_0 EXIST::FUNCTION:
+ASN1_SCTX_set_app_data 2378 3_0_0 EXIST::FUNCTION:
+CMS_add0_cert 2379 3_0_0 EXIST::FUNCTION:CMS
+i2d_GENERAL_NAME 2380 3_0_0 EXIST::FUNCTION:
+BIO_ADDR_new 2381 3_0_0 EXIST::FUNCTION:SOCK
+ENGINE_get_pkey_asn1_meth_engine 2382 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+d2i_ASN1_BMPSTRING 2383 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_create0_p8inf 2384 3_0_0 EXIST::FUNCTION:
+OBJ_cmp 2385 3_0_0 EXIST::FUNCTION:
+MD2 2386 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD2
+X509_PUBKEY_new 2387 3_0_0 EXIST::FUNCTION:
+BN_CTX_end 2388 3_0_0 EXIST::FUNCTION:
+BIO_get_retry_BIO 2389 3_0_0 EXIST::FUNCTION:
+X509_REQ_add1_attr_by_OBJ 2390 3_0_0 EXIST::FUNCTION:
+ASN1_item_ex_free 2391 3_0_0 EXIST::FUNCTION:
+X509_SIG_new 2392 3_0_0 EXIST::FUNCTION:
+BN_sqr 2393 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_set_time 2394 3_0_0 EXIST::FUNCTION:TS
+OPENSSL_die 2395 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_by_alias 2396 3_0_0 EXIST::FUNCTION:
+EC_KEY_set_conv_form 2397 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_TRUST_get_count 2399 3_0_0 EXIST::FUNCTION:
+IPAddressOrRange_free 2400 3_0_0 EXIST::FUNCTION:RFC3779
+RSA_padding_add_PKCS1_OAEP 2401 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EC_KEY_set_ex_data 2402 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+SRP_VBASE_new 2403 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+i2d_ECDSA_SIG 2404 3_0_0 EXIST::FUNCTION:EC
+BIO_dump_indent 2405 3_0_0 EXIST::FUNCTION:
+ENGINE_set_pkey_asn1_meths 2406 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OPENSSL_gmtime_diff 2407 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_crypto_device 2408 3_0_0 EXIST::FUNCTION:ENGINE,TS
+COMP_CTX_get_method 2409 3_0_0 EXIST::FUNCTION:COMP
+EC_GROUP_get_cofactor 2410 3_0_0 EXIST::FUNCTION:EC
+EVP_rc5_32_12_16_ofb 2411 3_0_0 EXIST::FUNCTION:RC5
+EVP_MD_CTX_get0_md_data 2412 3_0_0 EXIST::FUNCTION:
+ASN1_PCTX_set_nm_flags 2413 3_0_0 EXIST::FUNCTION:
+BIO_ctrl 2414 3_0_0 EXIST::FUNCTION:
+X509_CRL_set_default_method 2415 3_0_0 EXIST::FUNCTION:
+d2i_RSAPublicKey_fp 2417 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+UI_method_get_flusher 2418 3_0_0 EXIST::FUNCTION:
+EC_POINT_dbl 2419 3_0_0 EXIST::FUNCTION:EC
+i2d_X509_CRL_INFO 2420 3_0_0 EXIST::FUNCTION:
+i2d_OCSP_CERTSTATUS 2421 3_0_0 EXIST::FUNCTION:OCSP
+X509_REVOKED_get0_revocationDate 2422 3_0_0 EXIST::FUNCTION:
+PKCS7_add_crl 2423 3_0_0 EXIST::FUNCTION:
+ECDSA_do_sign 2424 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ASN1_GENERALIZEDTIME_it 2425 3_0_0 EXIST::FUNCTION:
+PKCS8_pkey_get0 2426 3_0_0 EXIST::FUNCTION:
+OCSP_sendreq_new 2427 3_0_0 EXIST::FUNCTION:OCSP
+EVP_aes_256_cfb128 2428 3_0_0 EXIST::FUNCTION:
+RSA_set_ex_data 2429 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BN_GENCB_call 2430 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_add_nconf_sk 2431 3_0_0 EXIST::FUNCTION:
+i2d_TS_MSG_IMPRINT_fp 2432 3_0_0 EXIST::FUNCTION:STDIO,TS
+PKCS12_new 2433 3_0_0 EXIST::FUNCTION:
+X509_REVOKED_set_serialNumber 2434 3_0_0 EXIST::FUNCTION:
+EVP_get_digestbyname 2435 3_0_0 EXIST::FUNCTION:
+X509_CRL_get_lastUpdate 2436 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0
+OBJ_create_objects 2437 3_0_0 EXIST::FUNCTION:
+EVP_enc_null 2438 3_0_0 EXIST::FUNCTION:
+OCSP_ONEREQ_get_ext_by_critical 2439 3_0_0 EXIST::FUNCTION:OCSP
+OCSP_request_onereq_count 2440 3_0_0 EXIST::FUNCTION:OCSP
+BN_hex2bn 2441 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_meth_set_impl_ctx_size 2442 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASIdentifiers_new 2443 3_0_0 EXIST::FUNCTION:RFC3779
+CONF_imodule_get_flags 2444 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_it 2445 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_meth_set_set_asn1_params 2446 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EC_KEY_get_enc_flags 2447 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_OBJECT_idx_by_subject 2448 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_copy 2449 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+NETSCAPE_CERT_SEQUENCE_new 2450 3_0_0 EXIST::FUNCTION:
+CRYPTO_ocb128_decrypt 2451 3_0_0 EXIST::FUNCTION:OCB
+ASYNC_WAIT_CTX_free 2452 3_0_0 EXIST::FUNCTION:
+d2i_PKCS7_DIGEST 2453 3_0_0 EXIST::FUNCTION:
+d2i_TS_TST_INFO_bio 2454 3_0_0 EXIST::FUNCTION:TS
+BIGNUM_it 2455 3_0_0 EXIST::FUNCTION:
+BN_BLINDING_get_flags 2456 3_0_0 EXIST::FUNCTION:
+X509_EXTENSION_get_critical 2457 3_0_0 EXIST::FUNCTION:
+DSA_set_default_method 2458 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+PEM_write_bio_DHxparams 2459 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DSA_set_ex_data 2460 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+BIO_s_datagram_sctp 2461 3_0_0 EXIST::FUNCTION:DGRAM,SCTP
+SXNET_add_id_asc 2462 3_0_0 EXIST::FUNCTION:
+X509_print_fp 2463 3_0_0 EXIST::FUNCTION:STDIO
+TS_REQ_set_version 2464 3_0_0 EXIST::FUNCTION:TS
+OCSP_REQINFO_new 2465 3_0_0 EXIST::FUNCTION:OCSP
+Camellia_decrypt 2466 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+X509_signature_print 2467 3_0_0 EXIST::FUNCTION:
+EVP_camellia_128_ecb 2468 3_0_0 EXIST::FUNCTION:CAMELLIA
+MD2_Final 2469 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD2
+OSSL_HTTP_REQ_CTX_add1_header 2470 3_0_0 EXIST::FUNCTION:
+NETSCAPE_SPKAC_it 2471 3_0_0 EXIST::FUNCTION:
+ASIdOrRange_free 2472 3_0_0 EXIST::FUNCTION:RFC3779
+EC_POINT_get_Jprojective_coordinates_GFp 2473 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_aes_128_cbc_hmac_sha256 2474 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_SIGNED 2475 3_0_0 EXIST::FUNCTION:
+TS_VERIFY_CTX_set_data 2476 3_0_0 EXIST::FUNCTION:TS
+BN_pseudo_rand_range 2477 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509V3_EXT_add_nconf 2478 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_ctrl 2479 3_0_0 EXIST::FUNCTION:
+ASN1_T61STRING_it 2480 3_0_0 EXIST::FUNCTION:
+ENGINE_get_prev 2481 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OCSP_accept_responses_new 2482 3_0_0 EXIST::FUNCTION:OCSP
+ERR_load_EC_strings 2483 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509V3_string_free 2484 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_paramgen 2485 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_set_load_ssl_client_cert_function 2486 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_ENCODE_CTX_free 2487 3_0_0 EXIST::FUNCTION:
+i2d_ASN1_BIT_STRING 2488 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_verifyctx 2489 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_TRUST_add 2490 3_0_0 EXIST::FUNCTION:
+BUF_MEM_free 2491 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_accuracy 2492 3_0_0 EXIST::FUNCTION:TS
+TS_REQ_dup 2493 3_0_0 EXIST::FUNCTION:TS
+ASN1_STRING_type_new 2494 3_0_0 EXIST::FUNCTION:
+TS_STATUS_INFO_free 2495 3_0_0 EXIST::FUNCTION:TS
+BN_mod_mul 2496 3_0_0 EXIST::FUNCTION:
+CMS_add0_recipient_key 2497 3_0_0 EXIST::FUNCTION:CMS
+BIO_f_zlib 2498 3_0_0 EXIST::FUNCTION:COMP,ZLIB
+AES_cfb128_encrypt 2499 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_set_EC 2500 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+d2i_ECPKParameters 2501 3_0_0 EXIST::FUNCTION:EC
+IDEA_ofb64_encrypt 2502 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,IDEA
+CAST_decrypt 2503 3_0_0 EXIST::FUNCTION:CAST,DEPRECATEDIN_3_0
+TS_STATUS_INFO_get0_failure_info 2504 3_0_0 EXIST::FUNCTION:TS
+ENGINE_unregister_pkey_meths 2506 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+DISPLAYTEXT_new 2507 3_0_0 EXIST::FUNCTION:
+CMS_final 2508 3_0_0 EXIST::FUNCTION:CMS
+BIO_nwrite 2509 3_0_0 EXIST::FUNCTION:
+GENERAL_NAME_free 2510 3_0_0 EXIST::FUNCTION:
+PKCS12_pack_p7encdata 2511 3_0_0 EXIST::FUNCTION:
+BN_generate_dsa_nonce 2512 3_0_0 EXIST::FUNCTION:
+X509_verify_cert 2513 3_0_0 EXIST::FUNCTION:
+X509_policy_level_get0_node 2514 3_0_0 EXIST::FUNCTION:
+X509_REQ_get_attr 2515 3_0_0 EXIST::FUNCTION:
+SHA1 2516 3_0_0 EXIST::FUNCTION:
+X509_print 2517 3_0_0 EXIST::FUNCTION:
+d2i_AutoPrivateKey 2518 3_0_0 EXIST::FUNCTION:
+X509_REQ_new 2519 3_0_0 EXIST::FUNCTION:
+PKCS12_add_safes 2520 3_0_0 EXIST::FUNCTION:
+PKCS12_parse 2521 3_0_0 EXIST::FUNCTION:
+BN_GF2m_mod_div 2522 3_0_0 EXIST::FUNCTION:EC2M
+i2d_USERNOTICE 2523 3_0_0 EXIST::FUNCTION:
+d2i_NETSCAPE_SPKI 2524 3_0_0 EXIST::FUNCTION:
+CRYPTO_mem_leaks 2525 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0
+BN_get_rfc3526_prime_1536 2526 3_0_0 EXIST::FUNCTION:
+DSA_sign 2527 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+RAND_egd 2528 3_0_0 EXIST::FUNCTION:EGD
+ASN1_d2i_bio 2529 3_0_0 EXIST::FUNCTION:
+X509_REQ_digest 2531 3_0_0 EXIST::FUNCTION:
+X509_set1_notAfter 2532 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get_type 2533 3_0_0 EXIST::FUNCTION:
+ASN1_TYPE_set_octetstring 2534 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_free 2535 3_0_0 EXIST::FUNCTION:
+CMS_signed_get0_data_by_OBJ 2536 3_0_0 EXIST::FUNCTION:CMS
+X509_PURPOSE_add 2537 3_0_0 EXIST::FUNCTION:
+PKCS7_ENVELOPE_free 2538 3_0_0 EXIST::FUNCTION:
+PKCS12_key_gen_uni 2539 3_0_0 EXIST::FUNCTION:
+WHIRLPOOL 2540 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,WHIRLPOOL
+UI_set_default_method 2542 3_0_0 EXIST::FUNCTION:
+EC_POINT_is_at_infinity 2543 3_0_0 EXIST::FUNCTION:EC
+i2d_NOTICEREF 2544 3_0_0 EXIST::FUNCTION:
+EC_KEY_new 2545 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_chacha20 2546 3_0_0 EXIST::FUNCTION:CHACHA
+BN_bn2dec 2547 3_0_0 EXIST::FUNCTION:
+X509_REQ_print_ex 2548 3_0_0 EXIST::FUNCTION:
+PEM_read_CMS 2549 3_0_0 EXIST::FUNCTION:CMS,STDIO
+d2i_NETSCAPE_CERT_SEQUENCE 2550 3_0_0 EXIST::FUNCTION:
+X509_CRL_set_version 2551 3_0_0 EXIST::FUNCTION:
+ASN1_PCTX_set_cert_flags 2552 3_0_0 EXIST::FUNCTION:
+PKCS8_PRIV_KEY_INFO_free 2553 3_0_0 EXIST::FUNCTION:
+SHA224_Update 2554 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EC_GROUP_new_by_curve_name 2555 3_0_0 EXIST::FUNCTION:EC
+X509_STORE_set_purpose 2556 3_0_0 EXIST::FUNCTION:
+X509_CRL_get0_signature 2557 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_keygen_info 2558 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_UINTEGER 2559 3_0_0 EXIST::FUNCTION:
+i2s_ASN1_INTEGER 2560 3_0_0 EXIST::FUNCTION:
+d2i_EC_PUBKEY_fp 2561 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+i2d_OCSP_SIGNATURE 2562 3_0_0 EXIST::FUNCTION:OCSP
+i2d_X509_EXTENSION 2563 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_X509 2564 3_0_0 EXIST::FUNCTION:
+DES_key_sched 2565 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+GENERAL_NAME_dup 2566 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get1_crls 2567 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_verify 2568 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_sha256 2569 3_0_0 EXIST::FUNCTION:
+CMS_unsigned_delete_attr 2570 3_0_0 EXIST::FUNCTION:CMS
+EVP_md5_sha1 2571 3_0_0 EXIST::FUNCTION:MD5
+EVP_PKEY_sign_init 2572 3_0_0 EXIST::FUNCTION:
+OPENSSL_LH_insert 2573 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_meth_get_cleanup 2574 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_item_ex_d2i 2575 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_free 2576 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_new 2577 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_padding_check_PKCS1_OAEP 2578 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OCSP_SERVICELOC_it 2579 3_0_0 EXIST::FUNCTION:OCSP
+PKCS12_SAFEBAG_get_nid 2580 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_set_update_fn 2581 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BIO_f_asn1 2582 3_0_0 EXIST::FUNCTION:
+BIO_dump 2583 3_0_0 EXIST::FUNCTION:
+ENGINE_load_ssl_client_cert 2584 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_STORE_CTX_set_verify_cb 2585 3_0_0 EXIST::FUNCTION:
+CRYPTO_clear_realloc 2586 3_0_0 EXIST::FUNCTION:
+OPENSSL_strnlen 2587 3_0_0 EXIST::FUNCTION:
+IDEA_ecb_encrypt 2588 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,IDEA
+ASN1_STRING_set_default_mask 2589 3_0_0 EXIST::FUNCTION:
+TS_VERIFY_CTX_add_flags 2590 3_0_0 EXIST::FUNCTION:TS
+d2i_ASN1_UNIVERSALSTRING 2592 3_0_0 EXIST::FUNCTION:
+NAME_CONSTRAINTS_free 2593 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get_order 2594 3_0_0 EXIST::FUNCTION:EC
+X509_REVOKED_add1_ext_i2d 2595 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_add1_host 2596 3_0_0 EXIST::FUNCTION:
+i2d_PUBKEY_bio 2597 3_0_0 EXIST::FUNCTION:
+MD4_Update 2598 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD4
+X509_STORE_CTX_set_time 2599 3_0_0 EXIST::FUNCTION:
+ENGINE_set_default_DH 2600 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_ocspid_print 2601 3_0_0 EXIST::FUNCTION:
+DH_set_method 2602 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+EVP_rc2_64_cbc 2603 3_0_0 EXIST::FUNCTION:RC2
+CRYPTO_THREAD_get_current_id 2604 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_cb 2605 3_0_0 EXIST::FUNCTION:
+PROXY_POLICY_it 2606 3_0_0 EXIST::FUNCTION:
+ENGINE_register_complete 2607 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_DecodeUpdate 2609 3_0_0 EXIST::FUNCTION:
+ENGINE_get_default_RAND 2610 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ERR_peek_last_error_line 2611 3_0_0 EXIST::FUNCTION:
+ENGINE_get_ssl_client_cert_function 2612 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OPENSSL_LH_node_usage_stats 2613 3_0_0 EXIST::FUNCTION:STDIO
+DIRECTORYSTRING_it 2614 3_0_0 EXIST::FUNCTION:
+BIO_write 2615 3_0_0 EXIST::FUNCTION:
+OCSP_ONEREQ_get_ext_by_OBJ 2616 3_0_0 EXIST::FUNCTION:OCSP
+SEED_encrypt 2617 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SEED
+IPAddressRange_it 2618 3_0_0 EXIST::FUNCTION:RFC3779
+PEM_read_bio_DSAPrivateKey 2619 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+CMS_get0_type 2620 3_0_0 EXIST::FUNCTION:CMS
+ASN1_PCTX_free 2621 3_0_0 EXIST::FUNCTION:
+ESS_SIGNING_CERT_new 2622 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_conf_nid 2623 3_0_0 EXIST::FUNCTION:
+EC_KEY_check_key 2624 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PKCS5_PBKDF2_HMAC 2625 3_0_0 EXIST::FUNCTION:
+CONF_get_section 2626 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_kari_decrypt 2627 3_0_0 EXIST::FUNCTION:CMS
+OBJ_add_sigid 2628 3_0_0 EXIST::FUNCTION:
+d2i_SXNETID 2629 3_0_0 EXIST::FUNCTION:
+CMS_get1_certs 2630 3_0_0 EXIST::FUNCTION:CMS
+X509_CRL_check_suiteb 2631 3_0_0 EXIST::FUNCTION:
+PKCS7_ENVELOPE_it 2632 3_0_0 EXIST::FUNCTION:
+ASIdentifierChoice_it 2633 3_0_0 EXIST::FUNCTION:RFC3779
+CMS_RecipientEncryptedKey_cert_cmp 2634 3_0_0 EXIST::FUNCTION:CMS
+EVP_PKEY_CTX_get_app_data 2635 3_0_0 EXIST::FUNCTION:
+EC_GROUP_clear_free 2636 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+BN_get_rfc2409_prime_1024 2637 3_0_0 EXIST::FUNCTION:
+CRYPTO_set_mem_functions 2638 3_0_0 EXIST::FUNCTION:
+i2d_ASN1_VISIBLESTRING 2639 3_0_0 EXIST::FUNCTION:
+d2i_PBKDF2PARAM 2640 3_0_0 EXIST::FUNCTION:
+ERR_load_COMP_strings 2641 3_0_0 EXIST::FUNCTION:COMP,DEPRECATEDIN_3_0
+EVP_PKEY_meth_add0 2642 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_rc4_40 2643 3_0_0 EXIST::FUNCTION:RC4
+RSA_bits 2645 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_item_dup 2646 3_0_0 EXIST::FUNCTION:
+GENERAL_NAMES_it 2647 3_0_0 EXIST::FUNCTION:
+X509_issuer_name_hash 2648 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_nonce 2649 3_0_0 EXIST::FUNCTION:TS
+MD4_Init 2650 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD4
+X509_EXTENSION_create_by_OBJ 2651 3_0_0 EXIST::FUNCTION:
+EVP_aes_256_cbc_hmac_sha1 2652 3_0_0 EXIST::FUNCTION:
+SCT_validate 2653 3_0_0 EXIST::FUNCTION:CT
+EC_GROUP_dup 2654 3_0_0 EXIST::FUNCTION:EC
+EVP_sha1 2655 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_new 2656 3_0_0 EXIST::FUNCTION:
+BN_dup 2657 3_0_0 EXIST::FUNCTION:
+TS_MSG_IMPRINT_print_bio 2658 3_0_0 EXIST::FUNCTION:TS
+CONF_module_set_usr_data 2659 3_0_0 EXIST::FUNCTION:
+EC_KEY_generate_key 2660 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+BIO_ctrl_get_write_guarantee 2661 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_assign 2662 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_aes_128_ofb 2663 3_0_0 EXIST::FUNCTION:
+CMS_data 2664 3_0_0 EXIST::FUNCTION:CMS
+X509_load_cert_file 2665 3_0_0 EXIST::FUNCTION:
+EC_GFp_nistp521_method 2667 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC_NISTP_64_GCC_128
+ECDSA_SIG_free 2668 3_0_0 EXIST::FUNCTION:EC
+d2i_PKCS12_BAGS 2669 3_0_0 EXIST::FUNCTION:
+RSA_public_encrypt 2670 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_CRL_get0_extensions 2671 3_0_0 EXIST::FUNCTION:
+CMS_digest_verify 2672 3_0_0 EXIST::FUNCTION:CMS
+ASN1_GENERALIZEDTIME_set 2673 3_0_0 EXIST::FUNCTION:
+TS_VERIFY_CTX_set_imprint 2674 3_0_0 EXIST::FUNCTION:TS
+BN_RECP_CTX_set 2675 3_0_0 EXIST::FUNCTION:
+CRYPTO_secure_zalloc 2676 3_0_0 EXIST::FUNCTION:
+i2d_EXTENDED_KEY_USAGE 2677 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_DSAparams 2678 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_cmp_time 2679 3_0_0 EXIST::FUNCTION:
+d2i_CMS_ReceiptRequest 2680 3_0_0 EXIST::FUNCTION:CMS
+X509_CRL_INFO_it 2681 3_0_0 EXIST::FUNCTION:
+BUF_reverse 2682 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_SIGNATURE 2683 3_0_0 EXIST::FUNCTION:OCSP
+X509_REQ_delete_attr 2684 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_signer_cert 2685 3_0_0 EXIST::FUNCTION:TS
+X509V3_EXT_d2i 2686 3_0_0 EXIST::FUNCTION:
+ASN1_GENERALSTRING_it 2687 3_0_0 EXIST::FUNCTION:
+POLICYQUALINFO_free 2688 3_0_0 EXIST::FUNCTION:
+EC_KEY_set_group 2689 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+OCSP_check_validity 2690 3_0_0 EXIST::FUNCTION:OCSP
+PEM_write_ECPKParameters 2691 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+X509_VERIFY_PARAM_lookup 2692 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_by_fingerprint 2693 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_meth_free 2694 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PKCS7_RECIP_INFO_new 2695 3_0_0 EXIST::FUNCTION:
+d2i_ECPrivateKey_fp 2696 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+TS_CONF_set_ordering 2697 3_0_0 EXIST::FUNCTION:TS
+X509_CRL_get_ext 2698 3_0_0 EXIST::FUNCTION:
+X509_CRL_get_ext_by_OBJ 2699 3_0_0 EXIST::FUNCTION:
+OCSP_basic_add1_cert 2700 3_0_0 EXIST::FUNCTION:OCSP
+ASN1_PRINTABLESTRING_new 2701 3_0_0 EXIST::FUNCTION:
+i2d_PBEPARAM 2702 3_0_0 EXIST::FUNCTION:
+NETSCAPE_SPKI_new 2703 3_0_0 EXIST::FUNCTION:
+AES_options 2704 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+POLICYINFO_free 2705 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_Parameters 2706 3_0_0 EXIST::FUNCTION:
+BN_abs_is_word 2707 3_0_0 EXIST::FUNCTION:
+BIO_set_callback_arg 2708 3_0_0 EXIST::FUNCTION:
+CONF_modules_load_file 2709 3_0_0 EXIST::FUNCTION:
+X509_trust_clear 2710 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_test_flags 2711 3_0_0 EXIST::FUNCTION:
+PKCS12_BAGS_free 2712 3_0_0 EXIST::FUNCTION:
+PEM_X509_INFO_read 2713 3_0_0 EXIST::FUNCTION:STDIO
+d2i_DSAPrivateKey 2714 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+i2d_PKCS8_PRIV_KEY_INFO_fp 2715 3_0_0 EXIST::FUNCTION:STDIO
+TS_RESP_print_bio 2716 3_0_0 EXIST::FUNCTION:TS
+X509_STORE_set_default_paths 2717 3_0_0 EXIST::FUNCTION:
+d2i_TS_REQ 2718 3_0_0 EXIST::FUNCTION:TS
+i2d_TS_TST_INFO_bio 2719 3_0_0 EXIST::FUNCTION:TS
+CMS_sign_receipt 2720 3_0_0 EXIST::FUNCTION:CMS
+ENGINE_set_RAND 2721 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_REVOKED_get_ext_by_OBJ 2722 3_0_0 EXIST::FUNCTION:
+SEED_decrypt 2723 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SEED
+PEM_write_PKCS8PrivateKey 2724 3_0_0 EXIST::FUNCTION:STDIO
+ENGINE_new 2725 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_check_issued 2726 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get_iv_length 2727 3_0_0 EXIST::FUNCTION:
+DES_string_to_2keys 2728 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+EVP_PKEY_copy_parameters 2729 3_0_0 EXIST::FUNCTION:
+CMS_ContentInfo_print_ctx 2730 3_0_0 EXIST::FUNCTION:CMS
+d2i_PKCS7_SIGNED 2731 3_0_0 EXIST::FUNCTION:
+GENERAL_NAMES_free 2732 3_0_0 EXIST::FUNCTION:
+SCT_get_timestamp 2733 3_0_0 EXIST::FUNCTION:CT
+OCSP_SIGNATURE_it 2734 3_0_0 EXIST::FUNCTION:OCSP
+CMS_verify_receipt 2735 3_0_0 EXIST::FUNCTION:CMS
+CRYPTO_THREAD_lock_new 2736 3_0_0 EXIST::FUNCTION:
+BIO_get_ex_data 2737 3_0_0 EXIST::FUNCTION:
+CMS_digest_create 2738 3_0_0 EXIST::FUNCTION:CMS
+EC_KEY_METHOD_set_verify 2739 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PEM_read_RSAPublicKey 2740 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+ENGINE_pkey_asn1_find_str 2741 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ENGINE_get_load_privkey_function 2742 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+d2i_IPAddressRange 2743 3_0_0 EXIST::FUNCTION:RFC3779
+ERR_remove_state 2744 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_0_0
+X509_CRL_print_fp 2745 3_0_0 EXIST::FUNCTION:STDIO
+TS_CONF_load_key 2746 3_0_0 EXIST::FUNCTION:TS
+d2i_OCSP_REQINFO 2747 3_0_0 EXIST::FUNCTION:OCSP
+d2i_X509_CINF 2748 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_get_ext_by_critical 2749 3_0_0 EXIST::FUNCTION:OCSP
+X509_REQ_to_X509 2750 3_0_0 EXIST::FUNCTION:
+EVP_aes_192_wrap_pad 2751 3_0_0 EXIST::FUNCTION:
+PKCS7_SIGN_ENVELOPE_new 2752 3_0_0 EXIST::FUNCTION:
+TS_REQ_get_policy_id 2753 3_0_0 EXIST::FUNCTION:TS
+RC5_32_cbc_encrypt 2754 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC5
+BN_is_zero 2755 3_0_0 EXIST::FUNCTION:
+CT_POLICY_EVAL_CTX_new 2756 3_0_0 EXIST::FUNCTION:CT
+NETSCAPE_SPKI_it 2757 3_0_0 EXIST::FUNCTION:
+CRYPTO_THREAD_unlock 2758 3_0_0 EXIST::FUNCTION:
+UI_method_set_writer 2759 3_0_0 EXIST::FUNCTION:
+UI_dup_info_string 2760 3_0_0 EXIST::FUNCTION:
+OPENSSL_init 2761 3_0_0 EXIST::FUNCTION:
+TS_RESP_get_tst_info 2762 3_0_0 EXIST::FUNCTION:TS
+X509_VERIFY_PARAM_get_depth 2763 3_0_0 EXIST::FUNCTION:
+EVP_SealFinal 2764 3_0_0 EXIST::FUNCTION:
+CONF_imodule_set_flags 2766 3_0_0 EXIST::FUNCTION:
+i2d_ASN1_SET_ANY 2767 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_decrypt 2768 3_0_0 EXIST::FUNCTION:
+OCSP_RESPID_it 2769 3_0_0 EXIST::FUNCTION:OCSP
+EVP_des_ede3_cbc 2770 3_0_0 EXIST::FUNCTION:DES
+X509_up_ref 2771 3_0_0 EXIST::FUNCTION:
+OBJ_NAME_do_all_sorted 2772 3_0_0 EXIST::FUNCTION:
+ENGINE_unregister_DSA 2773 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ASN1_bn_print 2774 3_0_0 EXIST::FUNCTION:
+CMS_is_detached 2775 3_0_0 EXIST::FUNCTION:CMS
+X509_REQ_INFO_it 2776 3_0_0 EXIST::FUNCTION:
+RSAPrivateKey_it 2777 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_NAME_ENTRY_free 2778 3_0_0 EXIST::FUNCTION:
+BIO_new_fd 2779 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_value 2781 3_0_0 EXIST::FUNCTION:
+NCONF_get_section 2782 3_0_0 EXIST::FUNCTION:
+PKCS12_MAC_DATA_it 2783 3_0_0 EXIST::FUNCTION:
+X509_REQ_add1_attr_by_NID 2784 3_0_0 EXIST::FUNCTION:
+ASN1_sign 2785 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CMS_RecipientInfo_encrypt 2786 3_0_0 EXIST::FUNCTION:CMS
+X509_get_pubkey_parameters 2787 3_0_0 EXIST::FUNCTION:
+PKCS12_setup_mac 2788 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_PKCS7 2789 3_0_0 EXIST::FUNCTION:
+SHA512_Final 2790 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_VERIFY_PARAM_set1_host 2791 3_0_0 EXIST::FUNCTION:
+OCSP_resp_find_status 2792 3_0_0 EXIST::FUNCTION:OCSP
+d2i_ASN1_T61STRING 2793 3_0_0 EXIST::FUNCTION:
+DES_pcbc_encrypt 2794 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+EVP_PKEY_print_params 2795 3_0_0 EXIST::FUNCTION:
+BN_get0_nist_prime_192 2796 3_0_0 EXIST::FUNCTION:
+EVP_SealInit 2798 3_0_0 EXIST::FUNCTION:
+X509_REQ_get0_signature 2799 3_0_0 EXIST::FUNCTION:
+PKEY_USAGE_PERIOD_free 2800 3_0_0 EXIST::FUNCTION:
+EC_GROUP_set_point_conversion_form 2801 3_0_0 EXIST::FUNCTION:EC
+CMS_dataFinal 2802 3_0_0 EXIST::FUNCTION:CMS
+ASN1_TIME_it 2803 3_0_0 EXIST::FUNCTION:
+ENGINE_get_static_state 2804 3_0_0 EXIST::FUNCTION:ENGINE
+EC_KEY_set_asn1_flag 2805 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EC_GFp_mont_method 2806 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+OPENSSL_asc2uni 2807 3_0_0 EXIST::FUNCTION:
+TS_REQ_new 2808 3_0_0 EXIST::FUNCTION:TS
+ENGINE_register_all_DH 2809 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ERR_clear_error 2810 3_0_0 EXIST::FUNCTION:
+EC_KEY_dup 2811 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_LOOKUP_init 2812 3_0_0 EXIST::FUNCTION:
+i2b_PVK_bio 2813 3_0_0 EXIST::FUNCTION:
+OCSP_ONEREQ_free 2814 3_0_0 EXIST::FUNCTION:OCSP
+X509V3_EXT_print_fp 2815 3_0_0 EXIST::FUNCTION:STDIO
+OBJ_bsearch_ex_ 2816 3_0_0 EXIST::FUNCTION:
+DES_ofb64_encrypt 2817 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+i2d_IPAddressOrRange 2818 3_0_0 EXIST::FUNCTION:RFC3779
+CRYPTO_secure_used 2819 3_0_0 EXIST::FUNCTION:
+d2i_X509_CRL_INFO 2820 3_0_0 EXIST::FUNCTION:
+X509_CRL_get_issuer 2821 3_0_0 EXIST::FUNCTION:
+d2i_SCT_LIST 2822 3_0_0 EXIST::FUNCTION:CT
+EC_GFp_nist_method 2823 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+SCT_free 2824 3_0_0 EXIST::FUNCTION:CT
+TS_TST_INFO_get_msg_imprint 2825 3_0_0 EXIST::FUNCTION:TS
+X509v3_addr_add_range 2826 3_0_0 EXIST::FUNCTION:RFC3779
+PKCS12_get_friendlyname 2827 3_0_0 EXIST::FUNCTION:
+X509_CRL_add_ext 2829 3_0_0 EXIST::FUNCTION:
+X509_REQ_get_signature_nid 2830 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_ext 2831 3_0_0 EXIST::FUNCTION:TS
+i2d_OCSP_RESPID 2832 3_0_0 EXIST::FUNCTION:OCSP
+EVP_camellia_256_cfb8 2833 3_0_0 EXIST::FUNCTION:CAMELLIA
+EC_KEY_get0_public_key 2834 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+SRP_Calc_x 2835 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+a2i_ASN1_ENUMERATED 2836 3_0_0 EXIST::FUNCTION:
+CONF_module_get_usr_data 2837 3_0_0 EXIST::FUNCTION:
+i2d_X509_NAME_ENTRY 2838 3_0_0 EXIST::FUNCTION:
+SCT_LIST_free 2839 3_0_0 EXIST::FUNCTION:CT
+PROXY_POLICY_new 2840 3_0_0 EXIST::FUNCTION:
+X509_ALGOR_set_md 2841 3_0_0 EXIST::FUNCTION:
+PKCS7_print_ctx 2842 3_0_0 EXIST::FUNCTION:
+ASN1_UTF8STRING_new 2843 3_0_0 EXIST::FUNCTION:
+EVP_des_cbc 2844 3_0_0 EXIST::FUNCTION:DES
+i2v_ASN1_BIT_STRING 2845 3_0_0 EXIST::FUNCTION:
+ASN1_TYPE_set1 2846 3_0_0 EXIST::FUNCTION:
+d2i_X509_CRL_bio 2847 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_get1_cert 2848 3_0_0 EXIST::FUNCTION:
+ASN1_UNIVERSALSTRING_free 2849 3_0_0 EXIST::FUNCTION:
+EC_KEY_precompute_mult 2850 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+CRYPTO_mem_debug_realloc 2851 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0
+PKCS7_new 2852 3_0_0 EXIST::FUNCTION:
+BASIC_CONSTRAINTS_it 2853 3_0_0 EXIST::FUNCTION:
+ASN1_generate_v3 2854 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_PrivateKey 2855 3_0_0 EXIST::FUNCTION:
+ASN1_UTCTIME_check 2856 3_0_0 EXIST::FUNCTION:
+ACCESS_DESCRIPTION_it 2857 3_0_0 EXIST::FUNCTION:
+TS_MSG_IMPRINT_get_msg 2859 3_0_0 EXIST::FUNCTION:TS
+PKCS8_add_keyusage 2860 3_0_0 EXIST::FUNCTION:
+X509_EXTENSION_dup 2861 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_new 2862 3_0_0 EXIST::FUNCTION:
+BIO_socket_nbio 2863 3_0_0 EXIST::FUNCTION:SOCK
+EVP_CIPHER_set_asn1_iv 2864 3_0_0 EXIST::FUNCTION:
+EC_GFp_nistp224_method 2865 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC_NISTP_64_GCC_128
+BN_swap 2866 3_0_0 EXIST::FUNCTION:
+d2i_ECParameters 2867 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_NAME_add_entry_by_OBJ 2868 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_get_ext_count 2869 3_0_0 EXIST::FUNCTION:TS
+i2d_OCSP_CERTID 2870 3_0_0 EXIST::FUNCTION:OCSP
+BN_CTX_start 2871 3_0_0 EXIST::FUNCTION:
+BN_print 2872 3_0_0 EXIST::FUNCTION:
+EC_KEY_set_flags 2873 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_PKEY_get0 2874 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_set_default 2875 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+NCONF_get_number_e 2876 3_0_0 EXIST::FUNCTION:
+OPENSSL_cleanse 2877 3_0_0 EXIST::FUNCTION:
+SCT_set0_signature 2878 3_0_0 EXIST::FUNCTION:CT
+X509_CRL_sign 2879 3_0_0 EXIST::FUNCTION:
+X509_CINF_it 2880 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_accuracy 2881 3_0_0 EXIST::FUNCTION:TS
+DES_crypt 2882 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+BN_BLINDING_create_param 2883 3_0_0 EXIST::FUNCTION:
+OCSP_SERVICELOC_free 2884 3_0_0 EXIST::FUNCTION:OCSP
+DIST_POINT_NAME_free 2885 3_0_0 EXIST::FUNCTION:
+BIO_listen 2886 3_0_0 EXIST::FUNCTION:SOCK
+BIO_ADDR_path_string 2887 3_0_0 EXIST::FUNCTION:SOCK
+POLICY_CONSTRAINTS_it 2888 3_0_0 EXIST::FUNCTION:
+NCONF_free_data 2889 3_0_0 EXIST::FUNCTION:
+BIO_asn1_set_prefix 2890 3_0_0 EXIST::FUNCTION:
+PEM_SignUpdate 2891 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_EC_PUBKEY 2892 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+CMS_add_simple_smimecap 2893 3_0_0 EXIST::FUNCTION:CMS
+IPAddressChoice_free 2894 3_0_0 EXIST::FUNCTION:RFC3779
+d2i_X509_AUX 2895 3_0_0 EXIST::FUNCTION:
+X509_get_default_cert_area 2896 3_0_0 EXIST::FUNCTION:
+ERR_load_DSO_strings 2897 3_0_0 NOEXIST::FUNCTION:
+ASIdentifiers_it 2898 3_0_0 EXIST::FUNCTION:RFC3779
+BN_mod_lshift 2899 3_0_0 EXIST::FUNCTION:
+ENGINE_get_last 2900 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_PKEY_encrypt_init 2901 3_0_0 EXIST::FUNCTION:
+i2d_RSAPrivateKey_fp 2902 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+X509_REQ_print 2903 3_0_0 EXIST::FUNCTION:
+RSA_size 2904 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_CIPHER_CTX_iv_noconst 2905 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+DH_set_default_method 2906 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+X509_ALGOR_new 2907 3_0_0 EXIST::FUNCTION:
+EVP_aes_192_ofb 2908 3_0_0 EXIST::FUNCTION:
+EVP_des_ede3_cfb1 2909 3_0_0 EXIST::FUNCTION:DES
+TS_REQ_to_TS_VERIFY_CTX 2910 3_0_0 EXIST::FUNCTION:TS
+d2i_PBEPARAM 2911 3_0_0 EXIST::FUNCTION:
+BN_get0_nist_prime_521 2912 3_0_0 EXIST::FUNCTION:
+OCSP_ONEREQ_get_ext_by_NID 2913 3_0_0 EXIST::FUNCTION:OCSP
+X509_PUBKEY_get0 2914 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get0_parent_ctx 2915 3_0_0 EXIST::FUNCTION:
+EC_GROUP_set_seed 2916 3_0_0 EXIST::FUNCTION:EC
+X509_STORE_CTX_free 2917 3_0_0 EXIST::FUNCTION:
+AUTHORITY_KEYID_it 2918 3_0_0 EXIST::FUNCTION:
+X509V3_get_value_int 2919 3_0_0 EXIST::FUNCTION:
+ASN1_UTCTIME_set_string 2920 3_0_0 EXIST::FUNCTION:
+RC5_32_decrypt 2921 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC5
+i2d_X509_REQ_INFO 2922 3_0_0 EXIST::FUNCTION:
+EVP_des_cfb1 2923 3_0_0 EXIST::FUNCTION:DES
+OBJ_NAME_cleanup 2924 3_0_0 EXIST::FUNCTION:
+OCSP_BASICRESP_get1_ext_d2i 2925 3_0_0 EXIST::FUNCTION:OCSP
+DES_cfb64_encrypt 2926 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+CAST_cfb64_encrypt 2927 3_0_0 EXIST::FUNCTION:CAST,DEPRECATEDIN_3_0
+EVP_PKEY_asn1_set_param 2928 3_0_0 EXIST::FUNCTION:
+BN_RECP_CTX_free 2929 3_0_0 EXIST::FUNCTION:
+BN_with_flags 2930 3_0_0 EXIST::FUNCTION:
+DSO_ctrl 2931 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_get_final 2932 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_TYPE_get_octetstring 2933 3_0_0 EXIST::FUNCTION:
+ENGINE_by_id 2934 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+d2i_PKCS7_SIGNER_INFO 2935 3_0_0 EXIST::FUNCTION:
+EVP_aes_192_cbc 2936 3_0_0 EXIST::FUNCTION:
+PKCS8_pkey_set0 2937 3_0_0 EXIST::FUNCTION:
+X509_get1_email 2938 3_0_0 EXIST::FUNCTION:
+EC_POINT_point2oct 2939 3_0_0 EXIST::FUNCTION:EC
+EC_GROUP_get_curve_GFp 2940 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ASYNC_block_pause 2941 3_0_0 EXIST::FUNCTION:
+OCSP_SINGLERESP_get_ext 2942 3_0_0 EXIST::FUNCTION:OCSP
+CRYPTO_strdup 2943 3_0_0 EXIST::FUNCTION:
+i2d_X509_CRL_bio 2945 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_item 2946 3_0_0 EXIST::FUNCTION:
+CRYPTO_ccm128_encrypt 2947 3_0_0 EXIST::FUNCTION:
+X509v3_addr_get_afi 2948 3_0_0 EXIST::FUNCTION:RFC3779
+X509_STORE_CTX_get0_param 2949 3_0_0 EXIST::FUNCTION:
+EVP_add_alg_module 2950 3_0_0 EXIST::FUNCTION:
+X509_check_purpose 2951 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_delete_ext 2952 3_0_0 EXIST::FUNCTION:OCSP
+X509_PURPOSE_get_count 2953 3_0_0 EXIST::FUNCTION:
+d2i_PKCS12_bio 2954 3_0_0 EXIST::FUNCTION:
+ASN1_item_free 2955 3_0_0 EXIST::FUNCTION:
+PKCS7_content_new 2956 3_0_0 EXIST::FUNCTION:
+X509_keyid_get0 2957 3_0_0 EXIST::FUNCTION:
+COMP_get_name 2958 3_0_0 EXIST::FUNCTION:COMP
+EC_GROUP_new_curve_GF2m 2959 3_0_0 EXIST::FUNCTION:EC,EC2M
+X509_SIG_free 2960 3_0_0 EXIST::FUNCTION:
+PEM_ASN1_write 2961 3_0_0 EXIST::FUNCTION:STDIO
+ENGINE_get_digest_engine 2962 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BN_CTX_new 2963 3_0_0 EXIST::FUNCTION:
+EC_curve_nid2nist 2964 3_0_0 EXIST::FUNCTION:EC
+ENGINE_get_finish_function 2965 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EC_POINT_add 2966 3_0_0 EXIST::FUNCTION:EC
+EC_KEY_oct2key 2967 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+SHA384_Init 2968 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_UNIVERSALSTRING_new 2969 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_print_private 2970 3_0_0 EXIST::FUNCTION:
+ASN1_INTEGER_new 2971 3_0_0 EXIST::FUNCTION:
+NAME_CONSTRAINTS_it 2972 3_0_0 EXIST::FUNCTION:
+TS_REQ_get_cert_req 2973 3_0_0 EXIST::FUNCTION:TS
+BIO_pop 2974 3_0_0 EXIST::FUNCTION:
+SHA256_Final 2975 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_set1_DH 2976 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get_ex_data 2977 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+CRYPTO_secure_malloc 2978 3_0_0 EXIST::FUNCTION:
+TS_RESP_get_status_info 2979 3_0_0 EXIST::FUNCTION:TS
+HMAC_CTX_new 2980 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_get_default_DH 2981 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ECDSA_do_verify 2982 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+DSO_flags 2983 3_0_0 EXIST::FUNCTION:
+RAND_add 2984 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_do_all_sorted 2985 3_0_0 EXIST::FUNCTION:
+PKCS7_encrypt 2986 3_0_0 EXIST::FUNCTION:
+i2d_DSA_SIG 2987 3_0_0 EXIST::FUNCTION:DSA
+CMS_set_detached 2988 3_0_0 EXIST::FUNCTION:CMS
+X509_REQ_get_attr_by_OBJ 2989 3_0_0 EXIST::FUNCTION:
+i2d_ASRange 2990 3_0_0 EXIST::FUNCTION:RFC3779
+EC_GROUP_set_asn1_flag 2991 3_0_0 EXIST::FUNCTION:EC
+EVP_PKEY_new 2992 3_0_0 EXIST::FUNCTION:
+i2d_POLICYINFO 2993 3_0_0 EXIST::FUNCTION:
+BN_get_flags 2994 3_0_0 EXIST::FUNCTION:
+SHA384 2995 3_0_0 EXIST::FUNCTION:
+NCONF_get_string 2996 3_0_0 EXIST::FUNCTION:
+d2i_PROXY_CERT_INFO_EXTENSION 2997 3_0_0 EXIST::FUNCTION:
+EC_POINT_point2buf 2998 3_0_0 EXIST::FUNCTION:EC
+RSA_padding_add_PKCS1_OAEP_mgf1 2999 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+COMP_CTX_get_type 3000 3_0_0 EXIST::FUNCTION:COMP
+TS_RESP_CTX_set_status_info 3001 3_0_0 EXIST::FUNCTION:TS
+BIO_f_nbio_test 3002 3_0_0 EXIST::FUNCTION:
+SEED_ofb128_encrypt 3003 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SEED
+d2i_RSAPrivateKey_bio 3004 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+DH_KDF_X9_42 3005 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+EVP_PKEY_meth_set_signctx 3006 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_CRL_get_version 3007 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_get0_info 3008 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PEM_read_bio_RSAPublicKey 3009 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_asn1_set_private 3010 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get0_RSA 3011 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+DES_ede3_cfb64_encrypt 3012 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+POLICY_MAPPING_free 3014 3_0_0 EXIST::FUNCTION:
+EVP_aes_128_gcm 3015 3_0_0 EXIST::FUNCTION:
+BIO_dgram_non_fatal_error 3016 3_0_0 EXIST::FUNCTION:DGRAM
+OCSP_request_is_signed 3017 3_0_0 EXIST::FUNCTION:OCSP
+i2d_BASIC_CONSTRAINTS 3018 3_0_0 EXIST::FUNCTION:
+EC_KEY_get_method 3019 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EC_POINT_bn2point 3021 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PBE2PARAM_it 3022 3_0_0 EXIST::FUNCTION:
+BN_rand 3023 3_0_0 EXIST::FUNCTION:
+ASN1_TYPE_unpack_sequence 3024 3_0_0 EXIST::FUNCTION:
+X509_CRL_sign_ctx 3025 3_0_0 EXIST::FUNCTION:
+X509_STORE_add_crl 3026 3_0_0 EXIST::FUNCTION:
+PEM_write_RSAPrivateKey 3027 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+RC4_set_key 3028 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC4
+EVP_CIPHER_CTX_cipher 3029 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PEM_write_bio_PKCS8PrivateKey_nid 3030 3_0_0 EXIST::FUNCTION:
+BN_MONT_CTX_new 3031 3_0_0 EXIST::FUNCTION:
+CRYPTO_free_ex_index 3032 3_0_0 EXIST::FUNCTION:
+ASYNC_WAIT_CTX_new 3033 3_0_0 EXIST::FUNCTION:
+PKCS7_it 3034 3_0_0 EXIST::FUNCTION:
+CMS_unsigned_get_attr_by_OBJ 3035 3_0_0 EXIST::FUNCTION:CMS
+BN_clear 3036 3_0_0 EXIST::FUNCTION:
+BIO_socket_ioctl 3037 3_0_0 EXIST::FUNCTION:SOCK
+GENERAL_NAME_cmp 3038 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set_purpose 3039 3_0_0 EXIST::FUNCTION:
+X509_REVOKED_get_ext_d2i 3040 3_0_0 EXIST::FUNCTION:
+X509V3_set_conf_lhash 3041 3_0_0 EXIST::FUNCTION:
+PKCS7_ENC_CONTENT_it 3042 3_0_0 EXIST::FUNCTION:
+PKCS12_item_pack_safebag 3043 3_0_0 EXIST::FUNCTION:
+i2d_OCSP_RESPDATA 3044 3_0_0 EXIST::FUNCTION:OCSP
+i2d_X509_PUBKEY 3045 3_0_0 EXIST::FUNCTION:
+EVP_DecryptUpdate 3046 3_0_0 EXIST::FUNCTION:
+CAST_cbc_encrypt 3047 3_0_0 EXIST::FUNCTION:CAST,DEPRECATEDIN_3_0
+BN_BLINDING_invert 3048 3_0_0 EXIST::FUNCTION:
+SHA512_Update 3049 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ESS_ISSUER_SERIAL_new 3050 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_get0_pkcs8 3051 3_0_0 EXIST::FUNCTION:
+X509_get_ext_by_NID 3052 3_0_0 EXIST::FUNCTION:
+d2i_IPAddressFamily 3053 3_0_0 EXIST::FUNCTION:RFC3779
+X509_check_private_key 3054 3_0_0 EXIST::FUNCTION:
+GENERAL_NAME_get0_value 3055 3_0_0 EXIST::FUNCTION:
+X509_check_akid 3056 3_0_0 EXIST::FUNCTION:
+PKCS12_key_gen_asc 3057 3_0_0 EXIST::FUNCTION:
+EVP_bf_ofb 3058 3_0_0 EXIST::FUNCTION:BF
+AUTHORITY_KEYID_free 3059 3_0_0 EXIST::FUNCTION:
+EVP_seed_ofb 3060 3_0_0 EXIST::FUNCTION:SEED
+OBJ_NAME_get 3061 3_0_0 EXIST::FUNCTION:
+ASN1_UTCTIME_set 3062 3_0_0 EXIST::FUNCTION:
+X509_NAME_ENTRY_set_data 3063 3_0_0 EXIST::FUNCTION:
+ASN1_PCTX_set_str_flags 3064 3_0_0 EXIST::FUNCTION:
+i2a_ASN1_INTEGER 3065 3_0_0 EXIST::FUNCTION:
+d2i_TS_RESP 3066 3_0_0 EXIST::FUNCTION:TS
+EVP_des_ede_cfb64 3067 3_0_0 EXIST::FUNCTION:DES
+d2i_RSAPrivateKey 3068 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ERR_load_BN_strings 3069 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BF_encrypt 3070 3_0_0 EXIST::FUNCTION:BF,DEPRECATEDIN_3_0
+MD5 3071 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD5
+BN_GF2m_arr2poly 3072 3_0_0 EXIST::FUNCTION:EC2M
+EVP_PKEY_meth_get_ctrl 3073 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_X509_REQ_bio 3074 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set1_name 3075 3_0_0 EXIST::FUNCTION:
+d2i_RSAPublicKey_bio 3076 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_REQ_get_X509_PUBKEY 3077 3_0_0 EXIST::FUNCTION:
+ENGINE_load_private_key 3078 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+GENERAL_NAMES_new 3079 3_0_0 EXIST::FUNCTION:
+i2d_POLICYQUALINFO 3080 3_0_0 EXIST::FUNCTION:
+EC_GF2m_simple_method 3081 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC2M
+RSA_get_method 3082 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_ASRange 3083 3_0_0 EXIST::FUNCTION:RFC3779
+CMS_ContentInfo_new 3084 3_0_0 EXIST::FUNCTION:CMS
+OPENSSL_init_crypto 3085 3_0_0 EXIST::FUNCTION:
+X509_TRUST_set 3086 3_0_0 EXIST::FUNCTION:
+EVP_camellia_192_ecb 3087 3_0_0 EXIST::FUNCTION:CAMELLIA
+d2i_X509_REVOKED 3088 3_0_0 EXIST::FUNCTION:
+d2i_IPAddressOrRange 3089 3_0_0 EXIST::FUNCTION:RFC3779
+TS_TST_INFO_set_version 3090 3_0_0 EXIST::FUNCTION:TS
+PKCS12_get0_mac 3091 3_0_0 EXIST::FUNCTION:
+EVP_EncodeInit 3092 3_0_0 EXIST::FUNCTION:
+X509_get0_trust_objects 3093 3_0_0 EXIST::FUNCTION:
+d2i_ECPrivateKey_bio 3094 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+BIO_s_secmem 3095 3_0_0 EXIST::FUNCTION:
+ENGINE_get_default_EC 3096 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+TS_RESP_create_response 3097 3_0_0 EXIST::FUNCTION:TS
+BIO_ADDR_rawaddress 3098 3_0_0 EXIST::FUNCTION:SOCK
+PKCS7_ENCRYPT_new 3099 3_0_0 EXIST::FUNCTION:
+i2d_PKCS8PrivateKey_fp 3100 3_0_0 EXIST::FUNCTION:STDIO
+SRP_user_pwd_free 3101 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+Camellia_encrypt 3102 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+BIO_ADDR_hostname_string 3103 3_0_0 EXIST::FUNCTION:SOCK
+USERNOTICE_new 3104 3_0_0 EXIST::FUNCTION:
+POLICY_MAPPING_new 3105 3_0_0 EXIST::FUNCTION:
+CRYPTO_gcm128_release 3106 3_0_0 EXIST::FUNCTION:
+BIO_new 3107 3_0_0 EXIST::FUNCTION:
+d2i_GENERAL_NAMES 3108 3_0_0 EXIST::FUNCTION:
+PKCS7_SIGNER_INFO_new 3109 3_0_0 EXIST::FUNCTION:
+PEM_read_DSA_PUBKEY 3110 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+X509_get0_subject_key_id 3111 3_0_0 EXIST::FUNCTION:
+i2s_ASN1_ENUMERATED 3112 3_0_0 EXIST::FUNCTION:
+X509v3_get_ext_by_OBJ 3113 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_free 3114 3_0_0 EXIST::FUNCTION:OCSP
+CRYPTO_ocb128_aad 3115 3_0_0 EXIST::FUNCTION:OCB
+OPENSSL_sk_deep_copy 3116 3_0_0 EXIST::FUNCTION:
+i2d_RSA_PSS_PARAMS 3117 3_0_0 EXIST::FUNCTION:
+EVP_aes_128_wrap_pad 3118 3_0_0 EXIST::FUNCTION:
+ASN1_BIT_STRING_set 3119 3_0_0 EXIST::FUNCTION:
+PKCS5_PBKDF2_HMAC_SHA1 3120 3_0_0 EXIST::FUNCTION:
+RSA_padding_check_PKCS1_type_2 3121 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_des_ede3_ecb 3122 3_0_0 EXIST::FUNCTION:DES
+CBIGNUM_it 3123 3_0_0 EXIST::FUNCTION:
+BIO_new_NDEF 3124 3_0_0 EXIST::FUNCTION:
+EVP_aes_256_wrap 3125 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_print 3126 3_0_0 EXIST::FUNCTION:
+CRYPTO_THREAD_lock_free 3127 3_0_0 EXIST::FUNCTION:
+TS_ACCURACY_get_seconds 3128 3_0_0 EXIST::FUNCTION:TS
+BN_options 3129 3_0_0 EXIST::FUNCTION:
+BIO_debug_callback 3130 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_MD_meth_get_update 3131 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+GENERAL_NAME_set0_othername 3132 3_0_0 EXIST::FUNCTION:
+ASN1_BIT_STRING_set_bit 3133 3_0_0 EXIST::FUNCTION:
+EVP_aes_256_ccm 3134 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get0_pkey 3135 3_0_0 EXIST::FUNCTION:
+CONF_load_fp 3136 3_0_0 EXIST::FUNCTION:STDIO
+BN_to_ASN1_ENUMERATED 3137 3_0_0 EXIST::FUNCTION:
+i2d_ISSUING_DIST_POINT 3138 3_0_0 EXIST::FUNCTION:
+TXT_DB_free 3139 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_set 3140 3_0_0 EXIST::FUNCTION:
+d2i_ESS_CERT_ID 3141 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_derive 3142 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OPENSSL_LH_stats 3143 3_0_0 EXIST::FUNCTION:STDIO
+NCONF_dump_fp 3144 3_0_0 EXIST::FUNCTION:STDIO
+TS_STATUS_INFO_print_bio 3145 3_0_0 EXIST::FUNCTION:TS
+OPENSSL_sk_dup 3146 3_0_0 EXIST::FUNCTION:
+BF_cfb64_encrypt 3147 3_0_0 EXIST::FUNCTION:BF,DEPRECATEDIN_3_0
+ASN1_GENERALIZEDTIME_adj 3148 3_0_0 EXIST::FUNCTION:
+ECDSA_verify 3149 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_camellia_256_cfb128 3150 3_0_0 EXIST::FUNCTION:CAMELLIA
+CMAC_Init 3151 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
+OCSP_basic_add1_status 3152 3_0_0 EXIST::FUNCTION:OCSP
+X509_CRL_get0_by_cert 3153 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_set_tsa 3154 3_0_0 EXIST::FUNCTION:TS
+i2d_ASN1_GENERALIZEDTIME 3155 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_derive_set_peer 3156 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_CRL_add_conf 3157 3_0_0 EXIST::FUNCTION:
+CRYPTO_ccm128_init 3158 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set_time 3159 3_0_0 EXIST::FUNCTION:
+BN_reciprocal 3160 3_0_0 EXIST::FUNCTION:
+d2i_PKCS7_SIGN_ENVELOPE 3161 3_0_0 EXIST::FUNCTION:
+X509_NAME_digest 3162 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_SERVICELOC 3163 3_0_0 EXIST::FUNCTION:OCSP
+GENERAL_NAME_print 3164 3_0_0 EXIST::FUNCTION:
+CMS_ReceiptRequest_get0_values 3165 3_0_0 EXIST::FUNCTION:CMS
+a2i_ASN1_INTEGER 3166 3_0_0 EXIST::FUNCTION:
+OCSP_sendreq_bio 3167 3_0_0 EXIST::FUNCTION:OCSP
+PKCS12_SAFEBAG_create_crl 3168 3_0_0 EXIST::FUNCTION:
+d2i_X509_NAME 3169 3_0_0 EXIST::FUNCTION:
+IDEA_cfb64_encrypt 3170 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,IDEA
+BN_mod_sub 3171 3_0_0 EXIST::FUNCTION:
+ASN1_NULL_new 3172 3_0_0 EXIST::FUNCTION:
+HMAC_Init 3173 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0
+EVP_MD_CTX_update_fn 3174 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_aes_128_ecb 3175 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_bio_stream 3176 3_0_0 EXIST::FUNCTION:
+i2a_ACCESS_DESCRIPTION 3178 3_0_0 EXIST::FUNCTION:
+EC_KEY_set_enc_flags 3179 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+i2d_PUBKEY_fp 3180 3_0_0 EXIST::FUNCTION:STDIO
+b2i_PrivateKey_bio 3181 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_add_ext 3182 3_0_0 EXIST::FUNCTION:OCSP
+SXNET_add_id_INTEGER 3183 3_0_0 EXIST::FUNCTION:
+CTLOG_get0_public_key 3184 3_0_0 EXIST::FUNCTION:CT
+OCSP_REQUEST_get_ext_by_OBJ 3185 3_0_0 EXIST::FUNCTION:OCSP
+X509_NAME_oneline 3186 3_0_0 EXIST::FUNCTION:
+X509V3_set_nconf 3187 3_0_0 EXIST::FUNCTION:
+RSAPrivateKey_dup 3188 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BN_mod_add 3189 3_0_0 EXIST::FUNCTION:
+EC_POINT_set_affine_coordinates_GFp 3190 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+X509_get_default_cert_file 3191 3_0_0 EXIST::FUNCTION:
+UI_method_set_flusher 3192 3_0_0 EXIST::FUNCTION:
+RSA_new_method 3193 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OCSP_request_verify 3194 3_0_0 EXIST::FUNCTION:OCSP
+CRYPTO_THREAD_run_once 3195 3_0_0 EXIST::FUNCTION:
+TS_REQ_print_bio 3196 3_0_0 EXIST::FUNCTION:TS
+SCT_get_version 3197 3_0_0 EXIST::FUNCTION:CT
+IDEA_set_encrypt_key 3198 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,IDEA
+ENGINE_get_DH 3199 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+i2d_ASIdentifierChoice 3200 3_0_0 EXIST::FUNCTION:RFC3779
+SRP_Calc_A 3201 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+OCSP_BASICRESP_add_ext 3202 3_0_0 EXIST::FUNCTION:OCSP
+EVP_idea_cfb64 3203 3_0_0 EXIST::FUNCTION:IDEA
+PKCS12_newpass 3204 3_0_0 EXIST::FUNCTION:
+EVP_aes_256_cbc_hmac_sha256 3205 3_0_0 EXIST::FUNCTION:
+TS_ACCURACY_get_millis 3206 3_0_0 EXIST::FUNCTION:TS
+X509_CRL_get_REVOKED 3207 3_0_0 EXIST::FUNCTION:
+X509_issuer_name_hash_old 3208 3_0_0 EXIST::FUNCTION:MD5
+i2d_PKCS12_SAFEBAG 3209 3_0_0 EXIST::FUNCTION:
+BN_rand_range 3210 3_0_0 EXIST::FUNCTION:
+SMIME_write_ASN1 3211 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_new 3212 3_0_0 EXIST::FUNCTION:
+MD4_Final 3213 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD4
+EVP_PKEY_get_id 3214 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_get0_pkey_ctx 3215 3_0_0 EXIST::FUNCTION:CMS
+OCSP_REQINFO_free 3216 3_0_0 EXIST::FUNCTION:OCSP
+AUTHORITY_KEYID_new 3217 3_0_0 EXIST::FUNCTION:
+i2d_DIST_POINT_NAME 3218 3_0_0 EXIST::FUNCTION:
+OpenSSL_version_num 3219 3_0_0 EXIST::FUNCTION:
+OCSP_CERTID_free 3220 3_0_0 EXIST::FUNCTION:OCSP
+BIO_hex_string 3221 3_0_0 EXIST::FUNCTION:
+X509_REQ_sign_ctx 3222 3_0_0 EXIST::FUNCTION:
+CRYPTO_ocb128_init 3223 3_0_0 EXIST::FUNCTION:OCB
+EVP_PKEY_get1_EC_KEY 3224 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ASN1_PRINTABLESTRING_free 3225 3_0_0 EXIST::FUNCTION:
+BIO_get_retry_reason 3226 3_0_0 EXIST::FUNCTION:
+X509_NAME_print 3227 3_0_0 EXIST::FUNCTION:
+ACCESS_DESCRIPTION_free 3228 3_0_0 EXIST::FUNCTION:
+BN_nist_mod_384 3229 3_0_0 EXIST::FUNCTION:
+i2d_EC_PUBKEY_fp 3230 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+ENGINE_set_default_pkey_meths 3231 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+DH_bits 3232 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+i2d_X509_ALGORS 3233 3_0_0 EXIST::FUNCTION:
+EVP_camellia_192_cfb1 3234 3_0_0 EXIST::FUNCTION:CAMELLIA
+TS_RESP_CTX_add_failure_info 3235 3_0_0 EXIST::FUNCTION:TS
+EVP_PBE_alg_add 3236 3_0_0 EXIST::FUNCTION:
+ESS_CERT_ID_dup 3237 3_0_0 EXIST::FUNCTION:
+CMS_SignerInfo_get0_signature 3238 3_0_0 EXIST::FUNCTION:CMS
+EVP_PKEY_verify_recover 3239 3_0_0 EXIST::FUNCTION:
+i2d_PUBKEY 3240 3_0_0 EXIST::FUNCTION:
+ERR_load_EVP_strings 3241 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_ATTRIBUTE_set1_data 3242 3_0_0 EXIST::FUNCTION:
+d2i_X509_fp 3243 3_0_0 EXIST::FUNCTION:STDIO
+MD2_Init 3244 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD2
+ERR_get_error_line 3245 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_CRL_get_ext_by_NID 3246 3_0_0 EXIST::FUNCTION:
+OPENSSL_INIT_free 3247 3_0_0 EXIST::FUNCTION:
+PBE2PARAM_free 3248 3_0_0 EXIST::FUNCTION:
+EVP_aes_192_ecb 3249 3_0_0 EXIST::FUNCTION:
+ASN1_OCTET_STRING_new 3250 3_0_0 EXIST::FUNCTION:
+CMS_set1_eContentType 3251 3_0_0 EXIST::FUNCTION:CMS
+EVP_des_ede3_wrap 3252 3_0_0 EXIST::FUNCTION:DES
+GENERAL_SUBTREE_it 3253 3_0_0 EXIST::FUNCTION:
+EVP_read_pw_string_min 3254 3_0_0 EXIST::FUNCTION:
+X509_set1_notBefore 3255 3_0_0 EXIST::FUNCTION:
+MD4 3256 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD4
+EVP_PKEY_CTX_dup 3257 3_0_0 EXIST::FUNCTION:
+ENGINE_setup_bsd_cryptodev 3258 3_0_0 EXIST:__FreeBSD__:FUNCTION:DEPRECATEDIN_1_1_0,ENGINE
+PEM_read_bio_DHparams 3259 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+CMS_SharedInfo_encode 3260 3_0_0 EXIST::FUNCTION:CMS
+ASN1_OBJECT_create 3261 3_0_0 EXIST::FUNCTION:
+i2d_ECParameters 3262 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+BN_GF2m_mod_arr 3263 3_0_0 EXIST::FUNCTION:EC2M
+ENGINE_set_finish_function 3264 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+d2i_ASN1_OCTET_STRING 3265 3_0_0 EXIST::FUNCTION:
+ENGINE_set_load_pubkey_function 3266 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BIO_vprintf 3267 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_decrypt 3268 3_0_0 EXIST::FUNCTION:CMS
+RSA_generate_key 3269 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_0_9_8
+PKCS7_set0_type_other 3270 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_new 3271 3_0_0 EXIST::FUNCTION:OCSP
+BIO_lookup 3272 3_0_0 EXIST::FUNCTION:SOCK
+EC_GROUP_get0_cofactor 3273 3_0_0 EXIST::FUNCTION:EC
+SCT_print 3275 3_0_0 EXIST::FUNCTION:CT
+X509_PUBKEY_set 3276 3_0_0 EXIST::FUNCTION:
+POLICY_CONSTRAINTS_free 3277 3_0_0 EXIST::FUNCTION:
+EVP_aes_256_cfb8 3278 3_0_0 EXIST::FUNCTION:
+d2i_DSA_PUBKEY_bio 3279 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_NAME_get_text_by_OBJ 3280 3_0_0 EXIST::FUNCTION:
+RSA_padding_check_none 3281 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CRYPTO_set_mem_debug 3282 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0
+TS_VERIFY_CTX_init 3283 3_0_0 EXIST::FUNCTION:TS
+OCSP_cert_id_new 3284 3_0_0 EXIST::FUNCTION:OCSP
+GENERAL_SUBTREE_new 3285 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_push 3286 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_ctrl 3287 3_0_0 EXIST::FUNCTION:
+SRP_check_known_gN_param 3288 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+d2i_DIST_POINT 3289 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_free 3290 3_0_0 EXIST::FUNCTION:
+PBEPARAM_free 3291 3_0_0 EXIST::FUNCTION:
+NETSCAPE_SPKI_set_pubkey 3292 3_0_0 EXIST::FUNCTION:
+EVP_sha512 3293 3_0_0 EXIST::FUNCTION:
+X509_CRL_match 3294 3_0_0 EXIST::FUNCTION:
+i2s_ASN1_IA5STRING 3295 3_0_0 EXIST::FUNCTION:
+EC_KEY_get_default_method 3296 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PKCS8_decrypt 3297 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_data 3298 3_0_0 EXIST::FUNCTION:
+POLICYQUALINFO_it 3299 3_0_0 EXIST::FUNCTION:
+PKCS7_ISSUER_AND_SERIAL_free 3300 3_0_0 EXIST::FUNCTION:
+DSA_SIG_free 3301 3_0_0 EXIST::FUNCTION:DSA
+BIO_asn1_set_suffix 3302 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_type_str 3303 3_0_0 EXIST::FUNCTION:
+i2d_X509_SIG 3304 3_0_0 EXIST::FUNCTION:
+OPENSSL_LH_strhash 3305 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set_trust 3306 3_0_0 EXIST::FUNCTION:
+TS_ACCURACY_set_micros 3307 3_0_0 EXIST::FUNCTION:TS
+EVP_DigestFinal_ex 3308 3_0_0 EXIST::FUNCTION:
+X509_get0_pubkey 3309 3_0_0 EXIST::FUNCTION:
+X509_check_ip 3310 3_0_0 EXIST::FUNCTION:
+PKCS7_get_signed_attribute 3311 3_0_0 EXIST::FUNCTION:
+ASN1_GENERALIZEDTIME_free 3312 3_0_0 EXIST::FUNCTION:
+COMP_compress_block 3313 3_0_0 EXIST::FUNCTION:COMP
+ASN1_STRING_dup 3314 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_free 3315 3_0_0 EXIST::FUNCTION:
+EC_GROUP_cmp 3316 3_0_0 EXIST::FUNCTION:EC
+TS_TST_INFO_get_ext_by_critical 3317 3_0_0 EXIST::FUNCTION:TS
+ECParameters_print_fp 3318 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+X509_REQ_sign 3319 3_0_0 EXIST::FUNCTION:
+CRYPTO_xts128_encrypt 3320 3_0_0 EXIST::FUNCTION:
+PEM_def_callback 3321 3_0_0 EXIST::FUNCTION:
+PKCS12_add_friendlyname_uni 3322 3_0_0 EXIST::FUNCTION:
+X509_policy_tree_level_count 3323 3_0_0 EXIST::FUNCTION:
+OBJ_sn2nid 3324 3_0_0 EXIST::FUNCTION:
+CTLOG_free 3325 3_0_0 EXIST::FUNCTION:CT
+EVP_CIPHER_meth_dup 3326 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CMS_get1_crls 3327 3_0_0 EXIST::FUNCTION:CMS
+X509_aux_print 3328 3_0_0 EXIST::FUNCTION:
+OPENSSL_thread_stop 3330 3_0_0 EXIST::FUNCTION:
+X509_policy_node_get0_parent 3331 3_0_0 EXIST::FUNCTION:
+X509_PKEY_free 3332 3_0_0 EXIST::FUNCTION:
+OCSP_CRLID_new 3333 3_0_0 EXIST::FUNCTION:OCSP
+CONF_dump_bio 3334 3_0_0 EXIST::FUNCTION:
+d2i_PKCS8PrivateKey_fp 3335 3_0_0 EXIST::FUNCTION:STDIO
+RSA_setup_blinding 3336 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ERR_peek_error_line 3337 3_0_0 EXIST::FUNCTION:
+d2i_PKCS7 3338 3_0_0 EXIST::FUNCTION:
+ERR_reason_error_string 3339 3_0_0 EXIST::FUNCTION:
+ERR_remove_thread_state 3340 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0
+PEM_write_PrivateKey 3341 3_0_0 EXIST::FUNCTION:STDIO
+EVP_PKEY_CTX_str2ctrl 3342 3_0_0 EXIST::FUNCTION:
+CMS_SignerInfo_verify_content 3343 3_0_0 EXIST::FUNCTION:CMS
+ASN1_INTEGER_get_int64 3344 3_0_0 EXIST::FUNCTION:
+ASN1_item_sign 3345 3_0_0 EXIST::FUNCTION:
+OCSP_SERVICELOC_new 3346 3_0_0 EXIST::FUNCTION:OCSP
+ASN1_VISIBLESTRING_new 3347 3_0_0 EXIST::FUNCTION:
+BN_set_flags 3348 3_0_0 EXIST::FUNCTION:
+d2i_PrivateKey_bio 3349 3_0_0 EXIST::FUNCTION:
+ASN1_SEQUENCE_ANY_it 3350 3_0_0 EXIST::FUNCTION:
+ASN1_UTCTIME_adj 3351 3_0_0 EXIST::FUNCTION:
+BN_mod_sqrt 3352 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_is_sorted 3353 3_0_0 EXIST::FUNCTION:
+OCSP_SIGNATURE_new 3354 3_0_0 EXIST::FUNCTION:OCSP
+EVP_PKEY_meth_get_paramgen 3355 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_ATTRIBUTE_create_by_OBJ 3356 3_0_0 EXIST::FUNCTION:
+RSA_generate_key_ex 3357 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CMS_SignerInfo_get0_algs 3358 3_0_0 EXIST::FUNCTION:CMS
+DIST_POINT_free 3359 3_0_0 EXIST::FUNCTION:
+ESS_SIGNING_CERT_free 3360 3_0_0 EXIST::FUNCTION:
+SCT_new_from_base64 3361 3_0_0 EXIST::FUNCTION:CT
+OpenSSL_version 3362 3_0_0 EXIST::FUNCTION:
+OCSP_SINGLERESP_get_ext_by_OBJ 3363 3_0_0 EXIST::FUNCTION:OCSP
+ECDSA_SIG_get0 3364 3_0_0 EXIST::FUNCTION:EC
+BN_set_word 3365 3_0_0 EXIST::FUNCTION:
+ENGINE_set_flags 3366 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+DSA_OpenSSL 3367 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+CMS_RecipientInfo_kari_get0_alg 3368 3_0_0 EXIST::FUNCTION:CMS
+PKCS7_ENVELOPE_new 3369 3_0_0 EXIST::FUNCTION:
+EDIPARTYNAME_new 3370 3_0_0 EXIST::FUNCTION:
+CMS_add1_cert 3371 3_0_0 EXIST::FUNCTION:CMS
+DSO_convert_filename 3372 3_0_0 EXIST::FUNCTION:
+RSA_padding_check_SSLv23 3373 3_0_0 NOEXIST::FUNCTION:DEPRECATEDIN_3_0
+CRYPTO_gcm128_finish 3374 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAGS_it 3375 3_0_0 EXIST::FUNCTION:
+PKCS12_PBE_add 3376 3_0_0 EXIST::FUNCTION:
+EC_KEY_set_public_key_affine_coordinates 3377 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_EncryptInit_ex 3378 3_0_0 EXIST::FUNCTION:
+ENGINE_add 3379 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OPENSSL_LH_error 3380 3_0_0 EXIST::FUNCTION:
+PKCS7_DIGEST_it 3381 3_0_0 EXIST::FUNCTION:
+X509_CINF_new 3382 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_keygen_init 3383 3_0_0 EXIST::FUNCTION:
+EVP_aes_192_ocb 3384 3_0_0 EXIST::FUNCTION:OCB
+EVP_camellia_256_cfb1 3385 3_0_0 EXIST::FUNCTION:CAMELLIA
+CRYPTO_secure_actual_size 3387 3_0_0 EXIST::FUNCTION:
+COMP_CTX_free 3388 3_0_0 EXIST::FUNCTION:COMP
+i2d_PBE2PARAM 3389 3_0_0 EXIST::FUNCTION:
+EC_POINT_make_affine 3390 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+DSA_generate_parameters 3391 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_0_9_8,DSA
+ASN1_BIT_STRING_num_asc 3392 3_0_0 EXIST::FUNCTION:
+X509_INFO_free 3394 3_0_0 EXIST::FUNCTION:
+d2i_PKCS8_PRIV_KEY_INFO_fp 3395 3_0_0 EXIST::FUNCTION:STDIO
+X509_OBJECT_retrieve_match 3396 3_0_0 EXIST::FUNCTION:
+EVP_aes_128_ctr 3397 3_0_0 EXIST::FUNCTION:
+EVP_PBE_find 3398 3_0_0 EXIST::FUNCTION:
+SHA512_Transform 3399 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ERR_add_error_vdata 3400 3_0_0 EXIST::FUNCTION:
+OCSP_REQUEST_get_ext 3401 3_0_0 EXIST::FUNCTION:OCSP
+NETSCAPE_SPKAC_new 3402 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_get_verify 3403 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CRYPTO_128_wrap 3404 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_lookup_crls 3405 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_meth_get_ctrl 3406 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CONF_imodule_get_usr_data 3408 3_0_0 EXIST::FUNCTION:
+CRYPTO_new_ex_data 3409 3_0_0 EXIST::FUNCTION:
+PEM_read_PKCS8_PRIV_KEY_INFO 3410 3_0_0 EXIST::FUNCTION:STDIO
+TS_VERIFY_CTX_new 3411 3_0_0 EXIST::FUNCTION:TS
+BUF_MEM_new_ex 3412 3_0_0 EXIST::FUNCTION:
+RSA_padding_add_X931 3413 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BN_get0_nist_prime_256 3414 3_0_0 EXIST::FUNCTION:
+CRYPTO_memcmp 3415 3_0_0 EXIST::FUNCTION:
+DH_check_pub_key 3416 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+ASN1_mbstring_copy 3417 3_0_0 EXIST::FUNCTION:
+PKCS7_set_type 3418 3_0_0 EXIST::FUNCTION:
+BIO_gets 3419 3_0_0 EXIST::FUNCTION:
+RSA_padding_check_PKCS1_type_1 3420 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+UI_ctrl 3421 3_0_0 EXIST::FUNCTION:
+i2d_X509_REQ_fp 3422 3_0_0 EXIST::FUNCTION:STDIO
+BN_BLINDING_convert_ex 3423 3_0_0 EXIST::FUNCTION:
+ASN1_GENERALIZEDTIME_print 3424 3_0_0 EXIST::FUNCTION:
+BIO_s_null 3425 3_0_0 EXIST::FUNCTION:
+PEM_ASN1_read 3426 3_0_0 EXIST::FUNCTION:STDIO
+SCT_get_log_entry_type 3427 3_0_0 EXIST::FUNCTION:CT
+EVP_CIPHER_meth_get_init 3428 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_ALGOR_free 3429 3_0_0 EXIST::FUNCTION:
+OCSP_SINGLERESP_get_ext_count 3430 3_0_0 EXIST::FUNCTION:OCSP
+EC_POINT_free 3431 3_0_0 EXIST::FUNCTION:EC
+EVP_OpenFinal 3432 3_0_0 EXIST::FUNCTION:
+RAND_egd_bytes 3433 3_0_0 EXIST::FUNCTION:EGD
+UI_method_get_writer 3434 3_0_0 EXIST::FUNCTION:
+BN_secure_new 3435 3_0_0 EXIST::FUNCTION:
+SHA1_Update 3437 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BIO_s_connect 3438 3_0_0 EXIST::FUNCTION:SOCK
+EVP_MD_meth_get_init 3439 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_BIT_STRING_free 3440 3_0_0 EXIST::FUNCTION:
+i2d_PROXY_CERT_INFO_EXTENSION 3441 3_0_0 EXIST::FUNCTION:
+ASN1_IA5STRING_new 3442 3_0_0 EXIST::FUNCTION:
+X509_CRL_up_ref 3443 3_0_0 EXIST::FUNCTION:
+EVP_EncodeFinal 3444 3_0_0 EXIST::FUNCTION:
+X509_set_ex_data 3445 3_0_0 EXIST::FUNCTION:
+ERR_get_next_error_library 3446 3_0_0 EXIST::FUNCTION:
+OCSP_RESPONSE_print 3447 3_0_0 EXIST::FUNCTION:OCSP
+BN_get_rfc3526_prime_2048 3448 3_0_0 EXIST::FUNCTION:
+BIO_new_bio_pair 3449 3_0_0 EXIST::FUNCTION:
+EC_GFp_nistp256_method 3450 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC_NISTP_64_GCC_128
+BIO_method_type 3451 3_0_0 EXIST::FUNCTION:
+ECPKParameters_print 3452 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_rc4 3453 3_0_0 EXIST::FUNCTION:RC4
+CMS_data_create 3454 3_0_0 EXIST::FUNCTION:CMS
+EC_POINT_point2bn 3455 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+CMS_unsigned_get0_data_by_OBJ 3456 3_0_0 EXIST::FUNCTION:CMS
+ASN1_OCTET_STRING_cmp 3457 3_0_0 EXIST::FUNCTION:
+X509_NAME_print_ex 3458 3_0_0 EXIST::FUNCTION:
+ASN1_parse 3459 3_0_0 EXIST::FUNCTION:
+EC_KEY_priv2oct 3460 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PKCS7_simple_smimecap 3461 3_0_0 EXIST::FUNCTION:
+ASN1_TYPE_set_int_octetstring 3462 3_0_0 EXIST::FUNCTION:
+BIO_number_written 3463 3_0_0 EXIST::FUNCTION:
+TS_TST_INFO_set_msg_imprint 3464 3_0_0 EXIST::FUNCTION:TS
+CRYPTO_get_ex_data 3465 3_0_0 EXIST::FUNCTION:
+X509_PURPOSE_get0_sname 3466 3_0_0 EXIST::FUNCTION:
+RSA_verify_PKCS1_PSS 3467 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+HMAC_CTX_reset 3468 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_set_init 3469 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_REQ_extension_nid 3470 3_0_0 EXIST::FUNCTION:
+ENGINE_up_ref 3471 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BN_BLINDING_invert_ex 3472 3_0_0 EXIST::FUNCTION:
+RIPEMD160_Init 3473 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RMD160
+ASYNC_WAIT_CTX_get_changed_fds 3474 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_save_parameters 3475 3_0_0 EXIST::FUNCTION:
+SCT_set_source 3476 3_0_0 EXIST::FUNCTION:CT
+DES_set_odd_parity 3477 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+CMAC_CTX_free 3478 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
+d2i_ESS_ISSUER_SERIAL 3479 3_0_0 EXIST::FUNCTION:
+HMAC_CTX_set_flags 3480 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_PKCS8_bio 3481 3_0_0 EXIST::FUNCTION:
+OCSP_ONEREQ_get_ext_count 3482 3_0_0 EXIST::FUNCTION:OCSP
+PEM_read_bio_PKCS8_PRIV_KEY_INFO 3483 3_0_0 EXIST::FUNCTION:
+i2d_OCSP_BASICRESP 3484 3_0_0 EXIST::FUNCTION:OCSP
+CMAC_Final 3485 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
+X509V3_EXT_add_alias 3486 3_0_0 EXIST::FUNCTION:
+BN_get_params 3487 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_0_9_8
+PKCS5_pbkdf2_set 3488 3_0_0 EXIST::FUNCTION:
+d2i_PKCS8PrivateKey_bio 3489 3_0_0 EXIST::FUNCTION:
+ASN1_ENUMERATED_new 3490 3_0_0 EXIST::FUNCTION:
+ENGINE_register_digests 3491 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_NAME_get_text_by_NID 3492 3_0_0 EXIST::FUNCTION:
+SMIME_read_ASN1 3493 3_0_0 EXIST::FUNCTION:
+X509_REQ_set_subject_name 3494 3_0_0 EXIST::FUNCTION:
+BN_sub_word 3495 3_0_0 EXIST::FUNCTION:
+DSO_load 3496 3_0_0 EXIST::FUNCTION:
+BN_mod_exp 3497 3_0_0 EXIST::FUNCTION:
+X509_get_signature_type 3498 3_0_0 EXIST::FUNCTION:
+BIO_ptr_ctrl 3499 3_0_0 EXIST::FUNCTION:
+EVP_rc4_hmac_md5 3500 3_0_0 EXIST::FUNCTION:MD5,RC4
+OPENSSL_strlcat 3501 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_new 3502 3_0_0 EXIST::FUNCTION:
+BIO_ADDR_rawport 3503 3_0_0 EXIST::FUNCTION:SOCK
+BUF_MEM_grow_clean 3504 3_0_0 EXIST::FUNCTION:
+X509_NAME_print_ex_fp 3505 3_0_0 EXIST::FUNCTION:STDIO
+X509_check_host 3506 3_0_0 EXIST::FUNCTION:
+PEM_read_ECPKParameters 3507 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+X509_ATTRIBUTE_get0_data 3508 3_0_0 EXIST::FUNCTION:
+CMS_add1_signer 3509 3_0_0 EXIST::FUNCTION:CMS
+BN_pseudo_rand 3510 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+d2i_DIRECTORYSTRING 3511 3_0_0 EXIST::FUNCTION:
+d2i_ASN1_PRINTABLE 3512 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_add1_attr_by_NID 3513 3_0_0 EXIST::FUNCTION:
+i2d_PKCS8_PRIV_KEY_INFO_bio 3514 3_0_0 EXIST::FUNCTION:
+X509_NAME_get_index_by_NID 3515 3_0_0 EXIST::FUNCTION:
+ENGINE_get_first 3516 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+CERTIFICATEPOLICIES_it 3517 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_ctrl 3518 3_0_0 EXIST::FUNCTION:
+PKCS7_final 3519 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_size 3520 3_0_0 EXIST::FUNCTION:
+EVP_DecryptFinal_ex 3521 3_0_0 EXIST::FUNCTION:
+SCT_get_signature_nid 3522 3_0_0 EXIST::FUNCTION:CT
+PROXY_CERT_INFO_EXTENSION_new 3523 3_0_0 EXIST::FUNCTION:
+EVP_bf_cbc 3524 3_0_0 EXIST::FUNCTION:BF
+DSA_do_verify 3525 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+EC_GROUP_get_seed_len 3526 3_0_0 EXIST::FUNCTION:EC
+EC_POINT_set_affine_coordinates_GF2m 3527 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC2M
+TS_REQ_set_policy_id 3528 3_0_0 EXIST::FUNCTION:TS
+BIO_callback_ctrl 3529 3_0_0 EXIST::FUNCTION:
+v2i_GENERAL_NAME 3530 3_0_0 EXIST::FUNCTION:
+ERR_print_errors_cb 3531 3_0_0 EXIST::FUNCTION:
+ENGINE_set_default_string 3532 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BIO_number_read 3533 3_0_0 EXIST::FUNCTION:
+CRYPTO_zalloc 3534 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_cmp_parameters 3535 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_CTX_new_id 3537 3_0_0 EXIST::FUNCTION:
+TLS_FEATURE_free 3538 3_0_0 EXIST::FUNCTION:
+d2i_BASIC_CONSTRAINTS 3539 3_0_0 EXIST::FUNCTION:
+X509_CERT_AUX_new 3540 3_0_0 EXIST::FUNCTION:
+ENGINE_register_pkey_asn1_meths 3541 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+CRYPTO_ocb128_tag 3542 3_0_0 EXIST::FUNCTION:OCB
+ERR_load_OBJ_strings 3544 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BIO_ctrl_get_read_request 3545 3_0_0 EXIST::FUNCTION:
+BN_from_montgomery 3546 3_0_0 EXIST::FUNCTION:
+DSO_new 3547 3_0_0 EXIST::FUNCTION:
+AES_ecb_encrypt 3548 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BN_dec2bn 3549 3_0_0 EXIST::FUNCTION:
+CMS_decrypt 3550 3_0_0 EXIST::FUNCTION:CMS
+BN_mpi2bn 3551 3_0_0 EXIST::FUNCTION:
+EVP_aes_128_cfb128 3552 3_0_0 EXIST::FUNCTION:
+RC5_32_ecb_encrypt 3554 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RC5
+EVP_CIPHER_meth_new 3555 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_RSA_OAEP_PARAMS 3556 3_0_0 EXIST::FUNCTION:
+SXNET_get_id_ulong 3557 3_0_0 EXIST::FUNCTION:
+BIO_get_callback_arg 3558 3_0_0 EXIST::FUNCTION:
+ENGINE_register_RSA 3559 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+i2v_GENERAL_NAMES 3560 3_0_0 EXIST::FUNCTION:
+PKCS7_decrypt 3562 3_0_0 EXIST::FUNCTION:
+X509_STORE_set1_param 3563 3_0_0 EXIST::FUNCTION:
+RAND_file_name 3564 3_0_0 EXIST::FUNCTION:
+EVP_CipherInit_ex 3566 3_0_0 EXIST::FUNCTION:
+BIO_dgram_sctp_notification_cb 3567 3_0_0 EXIST::FUNCTION:DGRAM,SCTP
+ERR_load_RAND_strings 3568 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_ATTRIBUTE_it 3569 3_0_0 EXIST::FUNCTION:
+X509_ALGOR_it 3570 3_0_0 EXIST::FUNCTION:
+OCSP_CRLID_free 3571 3_0_0 EXIST::FUNCTION:OCSP
+CRYPTO_ccm128_aad 3572 3_0_0 EXIST::FUNCTION:
+IPAddressFamily_new 3573 3_0_0 EXIST::FUNCTION:RFC3779
+d2i_TS_ACCURACY 3574 3_0_0 EXIST::FUNCTION:TS
+X509_load_crl_file 3575 3_0_0 EXIST::FUNCTION:
+SXNET_add_id_ulong 3576 3_0_0 EXIST::FUNCTION:
+EVP_camellia_256_cbc 3577 3_0_0 EXIST::FUNCTION:CAMELLIA
+i2d_PROXY_POLICY 3578 3_0_0 EXIST::FUNCTION:
+X509_subject_name_hash_old 3579 3_0_0 EXIST::FUNCTION:MD5
+PEM_read_bio_DSA_PUBKEY 3580 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+OCSP_cert_to_id 3581 3_0_0 EXIST::FUNCTION:OCSP
+PEM_write_DSAparams 3582 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+ASN1_TIME_to_generalizedtime 3583 3_0_0 EXIST::FUNCTION:
+X509_CRL_get_ext_by_critical 3584 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_type 3585 3_0_0 EXIST::FUNCTION:
+X509_REQ_add1_attr_by_txt 3586 3_0_0 EXIST::FUNCTION:
+PEM_write_RSAPublicKey 3587 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,STDIO
+EVP_MD_meth_dup 3588 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ENGINE_unregister_ciphers 3589 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_issuer_and_serial_cmp 3590 3_0_0 EXIST::FUNCTION:
+OCSP_response_create 3591 3_0_0 EXIST::FUNCTION:OCSP
+SHA224 3592 3_0_0 EXIST::FUNCTION:
+MD2_options 3593 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD2
+X509_REQ_it 3595 3_0_0 EXIST::FUNCTION:
+RAND_bytes 3596 3_0_0 EXIST::FUNCTION:
+PKCS7_free 3597 3_0_0 EXIST::FUNCTION:
+X509_NAME_ENTRY_create_by_txt 3598 3_0_0 EXIST::FUNCTION:
+DES_cbc_cksum 3599 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+UI_free 3600 3_0_0 EXIST::FUNCTION:
+BN_is_prime 3601 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_0_9_8
+CMS_get0_signers 3602 3_0_0 EXIST::FUNCTION:CMS
+i2d_PrivateKey_fp 3603 3_0_0 EXIST::FUNCTION:STDIO
+OTHERNAME_cmp 3604 3_0_0 EXIST::FUNCTION:
+SMIME_write_PKCS7 3605 3_0_0 EXIST::FUNCTION:
+EC_KEY_set_public_key 3606 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+d2i_X509_EXTENSION 3607 3_0_0 EXIST::FUNCTION:
+CMS_add1_recipient_cert 3608 3_0_0 EXIST::FUNCTION:CMS
+CMS_RecipientInfo_kekri_get0_id 3609 3_0_0 EXIST::FUNCTION:CMS
+BN_mod_word 3610 3_0_0 EXIST::FUNCTION:
+ASN1_PCTX_new 3611 3_0_0 EXIST::FUNCTION:
+BN_is_prime_ex 3612 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PKCS5_v2_PBE_keyivgen 3613 3_0_0 EXIST::FUNCTION:
+CRYPTO_ctr128_encrypt 3614 3_0_0 EXIST::FUNCTION:
+CMS_unsigned_add1_attr_by_OBJ 3615 3_0_0 EXIST::FUNCTION:CMS
+PEM_write_EC_PUBKEY 3616 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,STDIO
+X509v3_asid_add_inherit 3617 3_0_0 EXIST::FUNCTION:RFC3779
+ERR_get_error 3618 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_signer_digest 3619 3_0_0 EXIST::FUNCTION:TS
+OBJ_new_nid 3620 3_0_0 EXIST::FUNCTION:
+CMS_ReceiptRequest_new 3621 3_0_0 EXIST::FUNCTION:CMS
+SRP_VBASE_get1_by_user 3622 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+UI_method_get_closer 3623 3_0_0 EXIST::FUNCTION:
+ENGINE_get_ex_data 3624 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BN_print_fp 3625 3_0_0 EXIST::FUNCTION:STDIO
+MD2_Update 3626 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD2
+ENGINE_free 3628 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+d2i_X509_ATTRIBUTE 3629 3_0_0 EXIST::FUNCTION:
+TS_RESP_free 3630 3_0_0 EXIST::FUNCTION:TS
+PKCS5_pbe_set 3631 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_free 3632 3_0_0 EXIST::FUNCTION:TS
+d2i_PUBKEY 3633 3_0_0 EXIST::FUNCTION:
+ASYNC_cleanup_thread 3634 3_0_0 EXIST::FUNCTION:
+SHA384_Update 3635 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CRYPTO_cfb128_1_encrypt 3636 3_0_0 EXIST::FUNCTION:
+BIO_set_cipher 3637 3_0_0 EXIST::FUNCTION:
+PEM_read_PUBKEY 3638 3_0_0 EXIST::FUNCTION:STDIO
+RSA_PKCS1_OpenSSL 3639 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+AUTHORITY_INFO_ACCESS_free 3640 3_0_0 EXIST::FUNCTION:
+SCT_get0_signature 3641 3_0_0 EXIST::FUNCTION:CT
+DISPLAYTEXT_it 3643 3_0_0 EXIST::FUNCTION:
+OPENSSL_gmtime_adj 3644 3_0_0 EXIST::FUNCTION:
+ASN1_INTEGER_dup 3645 3_0_0 EXIST::FUNCTION:
+DSA_print 3646 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_REQ_set_extension_nids 3647 3_0_0 EXIST::FUNCTION:
+X509_free 3648 3_0_0 EXIST::FUNCTION:
+ERR_load_ERR_strings 3649 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_const_check_infinite_end 3650 3_0_0 EXIST::FUNCTION:
+RSA_null_method 3651 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+TS_REQ_ext_free 3652 3_0_0 EXIST::FUNCTION:TS
+EVP_PKEY_meth_get_encrypt 3653 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+Camellia_ecb_encrypt 3654 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+ENGINE_set_default_RSA 3655 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_EncodeBlock 3656 3_0_0 EXIST::FUNCTION:
+SXNETID_free 3657 3_0_0 EXIST::FUNCTION:
+SHA1_Init 3658 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+CRYPTO_atomic_add 3659 3_0_0 EXIST::FUNCTION:
+TS_CONF_load_certs 3660 3_0_0 EXIST::FUNCTION:TS
+PEM_write_bio_DSAPrivateKey 3661 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+CMS_encrypt 3662 3_0_0 EXIST::FUNCTION:CMS
+CRYPTO_nistcts128_decrypt 3663 3_0_0 EXIST::FUNCTION:
+ERR_load_DH_strings 3664 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+EVP_MD_get_block_size 3665 3_0_0 EXIST::FUNCTION:
+TS_X509_ALGOR_print_bio 3666 3_0_0 EXIST::FUNCTION:TS
+d2i_PKCS7_ENVELOPE 3667 3_0_0 EXIST::FUNCTION:
+ESS_CERT_ID_new 3669 3_0_0 EXIST::FUNCTION:
+EC_POINT_invert 3670 3_0_0 EXIST::FUNCTION:EC
+CAST_set_key 3671 3_0_0 EXIST::FUNCTION:CAST,DEPRECATEDIN_3_0
+ENGINE_get_pkey_meth 3672 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+BIO_ADDRINFO_free 3673 3_0_0 EXIST::FUNCTION:SOCK
+DES_ede3_cbc_encrypt 3674 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+X509v3_asid_canonize 3675 3_0_0 EXIST::FUNCTION:RFC3779
+i2d_ASIdOrRange 3676 3_0_0 EXIST::FUNCTION:RFC3779
+OCSP_url_svcloc_new 3677 3_0_0 EXIST::FUNCTION:OCSP
+CRYPTO_mem_ctrl 3678 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0
+ASN1_verify 3679 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+DSA_generate_parameters_ex 3680 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_sign 3681 3_0_0 EXIST::FUNCTION:
+SHA256_Transform 3682 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BIO_ADDR_free 3683 3_0_0 EXIST::FUNCTION:SOCK
+ASN1_STRING_free 3684 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_inherit 3685 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get_curve_name 3686 3_0_0 EXIST::FUNCTION:EC
+RSA_print 3687 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_ASN1_BMPSTRING 3688 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_decrypt_old 3689 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ASN1_UTCTIME_cmp_time_t 3690 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set1_ip 3691 3_0_0 EXIST::FUNCTION:
+OTHERNAME_free 3692 3_0_0 EXIST::FUNCTION:
+OCSP_REVOKEDINFO_free 3693 3_0_0 EXIST::FUNCTION:OCSP
+EVP_CIPHER_CTX_is_encrypting 3694 3_0_0 EXIST::FUNCTION:
+EC_KEY_can_sign 3695 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PEM_write_bio_RSAPublicKey 3696 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_CRL_set1_lastUpdate 3697 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_REQ_CTX_nbio_d2i 3698 3_0_0 EXIST::FUNCTION:
+PKCS8_encrypt 3699 3_0_0 EXIST::FUNCTION:
+i2d_PKCS7_fp 3700 3_0_0 EXIST::FUNCTION:STDIO
+i2d_X509_REQ 3701 3_0_0 EXIST::FUNCTION:
+OCSP_CRLID_it 3702 3_0_0 EXIST::FUNCTION:OCSP
+PEM_ASN1_write_bio 3703 3_0_0 EXIST::FUNCTION:
+X509_get0_reject_objects 3704 3_0_0 EXIST::FUNCTION:
+BIO_set_tcp_ndelay 3705 3_0_0 EXIST::FUNCTION:SOCK
+CMS_add0_CertificateChoices 3706 3_0_0 EXIST::FUNCTION:CMS
+POLICYINFO_new 3707 3_0_0 EXIST::FUNCTION:
+X509_CRL_get0_by_serial 3708 3_0_0 EXIST::FUNCTION:
+PKCS12_add_friendlyname_asc 3709 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get1_chain 3710 3_0_0 EXIST::FUNCTION:
+ASN1_mbstring_ncopy 3711 3_0_0 EXIST::FUNCTION:
+PKCS7_RECIP_INFO_it 3712 3_0_0 EXIST::FUNCTION:
+ENGINE_register_all_digests 3713 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_REQ_get_version 3714 3_0_0 EXIST::FUNCTION:
+i2d_ASN1_UTCTIME 3715 3_0_0 EXIST::FUNCTION:
+TS_STATUS_INFO_new 3716 3_0_0 EXIST::FUNCTION:TS
+UI_set_ex_data 3717 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_set 3718 3_0_0 EXIST::FUNCTION:
+TS_RESP_verify_response 3719 3_0_0 EXIST::FUNCTION:TS
+X509_REVOKED_get0_serialNumber 3720 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_free 3721 3_0_0 EXIST::FUNCTION:
+ASN1_TYPE_new 3722 3_0_0 EXIST::FUNCTION:
+CMAC_CTX_cleanup 3723 3_0_0 EXIST::FUNCTION:CMAC,DEPRECATEDIN_3_0
+i2d_PKCS7_NDEF 3724 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_pop_free 3725 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get0_policy_tree 3726 3_0_0 EXIST::FUNCTION:
+DES_set_key_checked 3727 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+EVP_PKEY_meth_free 3728 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_sha224 3729 3_0_0 EXIST::FUNCTION:
+ENGINE_set_id 3730 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+d2i_ECPrivateKey 3731 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+CMS_signed_add1_attr_by_NID 3732 3_0_0 EXIST::FUNCTION:CMS
+i2d_DSAPrivateKey_fp 3733 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+EVP_CIPHER_meth_get_set_asn1_params 3734 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_STORE_CTX_get_ex_data 3735 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_kari_set0_pkey 3736 3_0_0 EXIST::FUNCTION:CMS
+X509v3_addr_add_inherit 3737 3_0_0 EXIST::FUNCTION:RFC3779
+SRP_Calc_u 3738 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+i2d_PKCS8PrivateKey_bio 3739 3_0_0 EXIST::FUNCTION:
+X509_get_extension_flags 3740 3_0_0 EXIST::FUNCTION:
+X509V3_EXT_val_prn 3741 3_0_0 EXIST::FUNCTION:
+SCT_get_validation_status 3742 3_0_0 EXIST::FUNCTION:CT
+NETSCAPE_CERT_SEQUENCE_free 3743 3_0_0 EXIST::FUNCTION:
+EVP_PBE_scrypt 3744 3_0_0 EXIST::FUNCTION:SCRYPT
+d2i_TS_REQ_bio 3745 3_0_0 EXIST::FUNCTION:TS
+ENGINE_set_default_ciphers 3746 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509_get_signature_nid 3747 3_0_0 EXIST::FUNCTION:
+DES_fcrypt 3748 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+PEM_write_bio_X509_REQ 3749 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_get_sign 3750 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+TS_REQ_get_nonce 3751 3_0_0 EXIST::FUNCTION:TS
+ENGINE_unregister_EC 3752 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+X509v3_get_ext_count 3753 3_0_0 EXIST::FUNCTION:
+UI_OpenSSL 3754 3_0_0 EXIST::FUNCTION:UI_CONSOLE
+CRYPTO_ccm128_decrypt 3755 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_RESPDATA 3756 3_0_0 EXIST::FUNCTION:OCSP
+BIO_set_callback 3757 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+BN_GF2m_poly2arr 3758 3_0_0 EXIST::FUNCTION:EC2M
+CMS_unsigned_get_attr_count 3759 3_0_0 EXIST::FUNCTION:CMS
+EVP_aes_256_gcm 3760 3_0_0 EXIST::FUNCTION:
+RSA_padding_check_X931 3761 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ECDH_compute_key 3762 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ASN1_TIME_print 3763 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get0_peerkey 3764 3_0_0 EXIST::FUNCTION:
+BN_mod_lshift1 3765 3_0_0 EXIST::FUNCTION:
+BIO_ADDRINFO_family 3766 3_0_0 EXIST::FUNCTION:SOCK
+PEM_write_DHxparams 3767 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH,STDIO
+BN_mod_exp2_mont 3768 3_0_0 EXIST::FUNCTION:
+ASN1_PRINTABLE_free 3769 3_0_0 EXIST::FUNCTION:
+PKCS7_ATTR_SIGN_it 3771 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_copy 3772 3_0_0 EXIST::FUNCTION:
+ENGINE_set_ctrl_function 3773 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+OCSP_id_get0_info 3774 3_0_0 EXIST::FUNCTION:OCSP
+BIO_ADDRINFO_next 3775 3_0_0 EXIST::FUNCTION:SOCK
+OCSP_RESPBYTES_free 3776 3_0_0 EXIST::FUNCTION:OCSP
+EC_KEY_METHOD_set_init 3777 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_PKEY_asn1_copy 3778 3_0_0 EXIST::FUNCTION:
+RSA_PSS_PARAMS_it 3779 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_error_depth 3780 3_0_0 EXIST::FUNCTION:
+ASN1_GENERALIZEDTIME_set_string 3781 3_0_0 EXIST::FUNCTION:
+EC_GROUP_new_curve_GFp 3782 3_0_0 EXIST::FUNCTION:EC
+UI_new_method 3783 3_0_0 EXIST::FUNCTION:
+Camellia_ofb128_encrypt 3784 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPRECATEDIN_3_0
+X509_new 3785 3_0_0 EXIST::FUNCTION:
+EC_KEY_get_conv_form 3786 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+CTLOG_STORE_get0_log_by_id 3787 3_0_0 EXIST::FUNCTION:CT
+CMS_signed_add1_attr 3788 3_0_0 EXIST::FUNCTION:CMS
+EVP_CIPHER_meth_set_iv_length 3789 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509v3_asid_validate_path 3790 3_0_0 EXIST::FUNCTION:RFC3779
+CMS_RecipientInfo_set0_password 3791 3_0_0 EXIST::FUNCTION:CMS
+TS_CONF_load_cert 3792 3_0_0 EXIST::FUNCTION:TS
+i2d_ECPKParameters 3793 3_0_0 EXIST::FUNCTION:EC
+X509_TRUST_get0 3794 3_0_0 EXIST::FUNCTION:
+CMS_get0_RecipientInfos 3795 3_0_0 EXIST::FUNCTION:CMS
+EVP_PKEY_CTX_new 3796 3_0_0 EXIST::FUNCTION:
+i2d_DSA_PUBKEY_bio 3797 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_REQ_get_subject_name 3798 3_0_0 EXIST::FUNCTION:
+BN_div_word 3799 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_signer_key 3800 3_0_0 EXIST::FUNCTION:TS
+BN_GF2m_mod_sqrt 3801 3_0_0 EXIST::FUNCTION:EC2M
+EVP_CIPHER_get_nid 3802 3_0_0 EXIST::FUNCTION:
+OBJ_txt2obj 3803 3_0_0 EXIST::FUNCTION:
+CMS_RecipientInfo_kari_get0_orig_id 3804 3_0_0 EXIST::FUNCTION:CMS
+EVP_bf_ecb 3805 3_0_0 EXIST::FUNCTION:BF
+v2i_GENERAL_NAME_ex 3806 3_0_0 EXIST::FUNCTION:
+CMS_signed_delete_attr 3807 3_0_0 EXIST::FUNCTION:CMS
+ASN1_TYPE_pack_sequence 3808 3_0_0 EXIST::FUNCTION:
+USERNOTICE_it 3809 3_0_0 EXIST::FUNCTION:
+PKEY_USAGE_PERIOD_it 3810 3_0_0 EXIST::FUNCTION:
+BN_mul_word 3811 3_0_0 EXIST::FUNCTION:
+i2d_IPAddressRange 3813 3_0_0 EXIST::FUNCTION:RFC3779
+CMS_unsigned_add1_attr_by_txt 3814 3_0_0 EXIST::FUNCTION:CMS
+d2i_RSA_PUBKEY 3815 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PKCS12_gen_mac 3816 3_0_0 EXIST::FUNCTION:
+ERR_load_ENGINE_strings 3817 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+ERR_load_CT_strings 3818 3_0_0 EXIST::FUNCTION:CT,DEPRECATEDIN_3_0
+OCSP_ONEREQ_it 3819 3_0_0 EXIST::FUNCTION:OCSP
+X509_PURPOSE_get_by_sname 3820 3_0_0 EXIST::FUNCTION:
+X509_PURPOSE_set 3821 3_0_0 EXIST::FUNCTION:
+BN_mod_inverse 3822 3_0_0 EXIST::FUNCTION:
+ASN1_STRING_TABLE_get 3823 3_0_0 EXIST::FUNCTION:
+BN_bn2binpad 3824 3_0_0 EXIST::FUNCTION:
+X509_supported_extension 3825 3_0_0 EXIST::FUNCTION:
+ECDSA_sign_setup 3826 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_camellia_192_cfb128 3827 3_0_0 EXIST::FUNCTION:CAMELLIA
+d2i_AUTHORITY_KEYID 3828 3_0_0 EXIST::FUNCTION:
+RIPEMD160_Transform 3829 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RMD160
+DES_random_key 3830 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES
+i2d_PKCS12_MAC_DATA 3831 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get0_EC_KEY 3832 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+ASN1_SCTX_get_item 3833 3_0_0 EXIST::FUNCTION:
+NOTICEREF_new 3834 3_0_0 EXIST::FUNCTION:
+BN_GF2m_mod_inv 3835 3_0_0 EXIST::FUNCTION:EC2M
+X509_CERT_AUX_free 3836 3_0_0 EXIST::FUNCTION:
+BN_GF2m_mod_inv_arr 3837 3_0_0 EXIST::FUNCTION:EC2M
+X509_REQ_get1_email 3838 3_0_0 EXIST::FUNCTION:
+EC_KEY_print 3839 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+i2d_ASN1_INTEGER 3840 3_0_0 EXIST::FUNCTION:
+OCSP_SINGLERESP_add1_ext_i2d 3841 3_0_0 EXIST::FUNCTION:OCSP
+PKCS7_add_signed_attribute 3842 3_0_0 EXIST::FUNCTION:
+i2d_PrivateKey_bio 3843 3_0_0 EXIST::FUNCTION:
+RSA_padding_add_PKCS1_type_1 3844 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_re_X509_tbs 3845 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get_iv_length 3846 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_REQ_CTX_get0_mem_bio 3847 3_0_0 EXIST::FUNCTION:
+i2d_PKCS8PrivateKeyInfo_bio 3848 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_CERTID 3849 3_0_0 EXIST::FUNCTION:OCSP
+EVP_CIPHER_meth_set_init 3850 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RIPEMD160_Final 3851 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,RMD160
+NETSCAPE_SPKI_free 3852 3_0_0 EXIST::FUNCTION:
+BIO_asn1_get_prefix 3853 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_ONEREQ 3854 3_0_0 EXIST::FUNCTION:OCSP
+EVP_PKEY_asn1_set_security_bits 3855 3_0_0 EXIST::FUNCTION:
+i2d_CERTIFICATEPOLICIES 3856 3_0_0 EXIST::FUNCTION:
+i2d_X509_CERT_AUX 3857 3_0_0 EXIST::FUNCTION:
+i2o_ECPublicKey 3858 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+PKCS12_SAFEBAG_create0_pkcs8 3859 3_0_0 EXIST::FUNCTION:
+OBJ_get0_data 3860 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get0_seed 3861 3_0_0 EXIST::FUNCTION:EC
+OCSP_REQUEST_it 3862 3_0_0 EXIST::FUNCTION:OCSP
+ASRange_it 3863 3_0_0 EXIST::FUNCTION:RFC3779
+i2d_TS_RESP 3864 3_0_0 EXIST::FUNCTION:TS
+TS_TST_INFO_get_ext_by_OBJ 3865 3_0_0 EXIST::FUNCTION:TS
+d2i_PKCS7_RECIP_INFO 3866 3_0_0 EXIST::FUNCTION:
+d2i_X509_CRL 3867 3_0_0 EXIST::FUNCTION:
+ASN1_OCTET_STRING_dup 3868 3_0_0 EXIST::FUNCTION:
+CRYPTO_nistcts128_decrypt_block 3869 3_0_0 EXIST::FUNCTION:
+CMS_stream 3870 3_0_0 EXIST::FUNCTION:CMS
+RSA_OAEP_PARAMS_it 3871 3_0_0 EXIST::FUNCTION:
+BN_bn2mpi 3872 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_cleanup 3873 3_0_0 EXIST::FUNCTION:
+OCSP_onereq_get0_id 3874 3_0_0 EXIST::FUNCTION:OCSP
+X509_get_default_cert_dir 3875 3_0_0 EXIST::FUNCTION:
+PROXY_POLICY_free 3877 3_0_0 EXIST::FUNCTION:
+PEM_write_DSAPrivateKey 3878 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO
+OPENSSL_sk_delete_ptr 3879 3_0_0 EXIST::FUNCTION:
+CMS_add0_RevocationInfoChoice 3880 3_0_0 EXIST::FUNCTION:CMS
+ASN1_PCTX_get_flags 3881 3_0_0 EXIST::FUNCTION:
+EVP_MD_meth_set_result_size 3882 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+i2d_X509_CRL 3883 3_0_0 EXIST::FUNCTION:
+ASN1_INTEGER_it 3885 3_0_0 EXIST::FUNCTION:
+TS_ACCURACY_new 3886 3_0_0 EXIST::FUNCTION:TS
+i2d_SXNETID 3887 3_0_0 EXIST::FUNCTION:
+BN_mod_mul_montgomery 3888 3_0_0 EXIST::FUNCTION:
+BN_nnmod 3889 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_status_info_cond 3890 3_0_0 EXIST::FUNCTION:TS
+PBKDF2PARAM_new 3891 3_0_0 EXIST::FUNCTION:
+ENGINE_set_RSA 3892 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+i2d_X509_ATTRIBUTE 3893 3_0_0 EXIST::FUNCTION:
+PKCS7_ctrl 3894 3_0_0 EXIST::FUNCTION:
+OCSP_REVOKEDINFO_it 3895 3_0_0 EXIST::FUNCTION:OCSP
+X509V3_set_ctx 3896 3_0_0 EXIST::FUNCTION:
+ASN1_ENUMERATED_set_int64 3897 3_0_0 EXIST::FUNCTION:
+o2i_SCT 3898 3_0_0 EXIST::FUNCTION:CT
+CRL_DIST_POINTS_free 3899 3_0_0 EXIST::FUNCTION:
+d2i_OCSP_SINGLERESP 3900 3_0_0 EXIST::FUNCTION:OCSP
+EVP_CIPHER_CTX_get_num 3901 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_verify_recover_init 3902 3_0_0 EXIST::FUNCTION:
+SHA512_Init 3903 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+TS_MSG_IMPRINT_set_msg 3904 3_0_0 EXIST::FUNCTION:TS
+CMS_unsigned_add1_attr 3905 3_0_0 EXIST::FUNCTION:CMS
+OPENSSL_LH_doall 3906 3_0_0 EXIST::FUNCTION:
+PKCS8_pkey_get0_attrs 3907 3_0_0 EXIST::FUNCTION:
+PKCS8_pkey_add1_attr_by_NID 3908 3_0_0 EXIST::FUNCTION:
+ASYNC_is_capable 3909 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_set_cipher_data 3910 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get_cipher_data 3911 3_0_0 EXIST::FUNCTION:
+BIO_up_ref 3912 3_0_0 EXIST::FUNCTION:
+X509_STORE_up_ref 3913 3_0_0 EXIST::FUNCTION:
+DSA_SIG_get0 3914 3_0_0 EXIST::FUNCTION:DSA
+BN_BLINDING_is_current_thread 3915 3_0_0 EXIST::FUNCTION:
+BN_BLINDING_set_current_thread 3916 3_0_0 EXIST::FUNCTION:
+BN_BLINDING_lock 3917 3_0_0 EXIST::FUNCTION:
+BN_BLINDING_unlock 3918 3_0_0 EXIST::FUNCTION:
+EC_GROUP_new_from_ecpkparameters 3919 3_0_0 EXIST::FUNCTION:EC
+EC_GROUP_get_ecpkparameters 3920 3_0_0 EXIST::FUNCTION:EC
+EC_GROUP_new_from_ecparameters 3921 3_0_0 EXIST::FUNCTION:EC
+ECPARAMETERS_it 3922 3_0_0 EXIST::FUNCTION:EC
+ECPKPARAMETERS_it 3923 3_0_0 EXIST::FUNCTION:EC
+EC_GROUP_get_ecparameters 3924 3_0_0 EXIST::FUNCTION:EC
+DHparams_it 3925 3_0_0 EXIST::FUNCTION:DH
+EVP_blake2s256 3926 3_0_0 EXIST::FUNCTION:BLAKE2
+EVP_blake2b512 3927 3_0_0 EXIST::FUNCTION:BLAKE2
+X509_SIG_get0 3928 3_0_0 EXIST::FUNCTION:
+BIO_meth_new 3929 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_puts 3930 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_ctrl 3931 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_gets 3932 3_0_0 EXIST::FUNCTION:
+BIO_get_data 3933 3_0_0 EXIST::FUNCTION:
+BIO_set_init 3934 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_puts 3935 3_0_0 EXIST::FUNCTION:
+BIO_get_shutdown 3936 3_0_0 EXIST::FUNCTION:
+BIO_get_init 3937 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_ctrl 3938 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_read 3939 3_0_0 EXIST::FUNCTION:
+BIO_set_shutdown 3940 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_create 3941 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_write 3942 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_callback_ctrl 3943 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_create 3944 3_0_0 EXIST::FUNCTION:
+BIO_set_next 3945 3_0_0 EXIST::FUNCTION:
+BIO_set_data 3946 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_write 3947 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_destroy 3948 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_gets 3949 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_callback_ctrl 3950 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_destroy 3951 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_read 3952 3_0_0 EXIST::FUNCTION:
+BIO_set_retry_reason 3953 3_0_0 EXIST::FUNCTION:
+BIO_meth_free 3954 3_0_0 EXIST::FUNCTION:
+DSA_meth_set_bn_mod_exp 3955 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set_init 3956 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_free 3957 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set_mod_exp 3958 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set_sign 3959 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_finish 3960 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_set_flags 3961 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_get0_pqg 3962 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get0_app_data 3963 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_keygen 3964 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_clear_flags 3965 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get0_name 3966 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_paramgen 3967 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_sign 3968 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set_paramgen 3969 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_test_flags 3970 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set0_app_data 3971 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set1_name 3972 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_get0_key 3973 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_mod_exp 3974 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_set0_pqg 3975 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_flags 3976 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_verify 3977 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set_verify 3978 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set_finish 3979 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set_keygen 3980 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_dup 3981 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_set0_key 3982 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_init 3983 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set_sign_setup 3984 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_bn_mod_exp 3985 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_get_method 3986 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_new 3987 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_set_flags 3988 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_meth_get_sign_setup 3989 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_get0_engine 3990 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+X509_VERIFY_PARAM_set_auth_level 3991 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get_auth_level 3992 3_0_0 EXIST::FUNCTION:
+X509_REQ_get0_pubkey 3993 3_0_0 EXIST::FUNCTION:
+RSA_set0_key 3994 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_flags 3995 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_finish 3996 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_priv_dec 3997 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_sign 3998 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_bn_mod_exp 3999 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_test_flags 4000 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_new 4001 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get0_app_data 4002 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_dup 4003 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set1_name 4004 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set0_app_data 4005 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_set_flags 4006 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_sign 4007 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_clear_flags 4008 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_keygen 4009 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_keygen 4010 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_pub_dec 4011 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_finish 4012 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_key 4013 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_engine 4014 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_priv_enc 4015 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_verify 4016 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_factors 4017 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get0_name 4018 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_mod_exp 4019 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_flags 4020 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_pub_dec 4021 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_bn_mod_exp 4022 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_init 4023 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_free 4024 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_pub_enc 4025 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_mod_exp 4026 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_set0_factors 4027 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_pub_enc 4028 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_priv_dec 4029 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_verify 4030 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_init 4031 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_priv_enc 4032 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_set0_crt_params 4037 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_crt_params 4038 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+DH_set0_pqg 4039 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_clear_flags 4041 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get0_key 4042 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get0_engine 4043 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_set0_key 4044 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_set_length 4045 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_test_flags 4046 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get_length 4047 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get0_pqg 4048 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_get_compute_key 4049 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_set1_name 4050 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_set_init 4051 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_get_finish 4052 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_get0_name 4053 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_set_generate_params 4054 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_set_compute_key 4055 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_set_flags 4056 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_get_generate_params 4057 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_get_flags 4058 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_set_finish 4059 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_get0_app_data 4060 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_set0_app_data 4061 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_get_init 4062 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_get_bn_mod_exp 4063 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_new 4064 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_dup 4065 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_set_bn_mod_exp 4066 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_set_generate_key 4067 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_free 4068 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_meth_get_generate_key 4069 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_set_flags 4070 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+X509_STORE_CTX_get_obj_by_subject 4071 3_0_0 EXIST::FUNCTION:
+X509_OBJECT_free 4072 3_0_0 EXIST::FUNCTION:
+X509_OBJECT_get0_X509 4073 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get0_untrusted 4074 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set_error_depth 4075 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get0_cert 4076 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set_verify 4077 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set_current_cert 4078 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_verify 4079 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_verify_cb 4080 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set0_verified_chain 4081 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_set0_untrusted 4082 3_0_0 EXIST::FUNCTION:
+OPENSSL_hexchar2int 4083 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_ex_data 4084 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_ex_data 4085 3_0_0 EXIST::FUNCTION:
+X509_STORE_get0_objects 4086 3_0_0 EXIST::FUNCTION:
+X509_OBJECT_get_type 4087 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_verify 4088 3_0_0 EXIST::FUNCTION:
+X509_OBJECT_new 4089 3_0_0 EXIST::FUNCTION:
+X509_STORE_get0_param 4090 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_PrivateKey_traditional 4091 3_0_0 EXIST::FUNCTION:
+X509_get_pathlen 4092 3_0_0 EXIST::FUNCTION:
+ECDSA_SIG_set0 4093 3_0_0 EXIST::FUNCTION:EC
+DSA_SIG_set0 4094 3_0_0 EXIST::FUNCTION:DSA
+EVP_PKEY_get0_hmac 4095 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+HMAC_CTX_get_md 4096 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+NAME_CONSTRAINTS_check_CN 4097 3_0_0 EXIST::FUNCTION:
+OCSP_resp_get0_id 4098 3_0_0 EXIST::FUNCTION:OCSP
+OCSP_resp_get0_certs 4099 3_0_0 EXIST::FUNCTION:OCSP
+X509_set_proxy_flag 4100 3_0_0 EXIST::FUNCTION:
+EVP_ENCODE_CTX_copy 4101 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_check_issued 4102 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_lookup_certs 4103 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_check_crl 4104 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_cleanup 4105 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_lookup_crls 4106 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_cert_crl 4107 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_lookup_certs 4108 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_check_revocation 4109 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_get_crl 4110 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_check_issued 4111 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_check_policy 4112 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_check_crl 4113 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_check_crl 4114 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_check_issued 4115 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_get_issuer 4116 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_get_crl 4117 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_get_issuer 4118 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_cleanup 4119 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_cleanup 4120 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_get_crl 4121 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_check_revocation 4122 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_cert_crl 4123 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_lookup_certs 4124 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_check_policy 4125 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_get_issuer 4126 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_check_policy 4127 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_cert_crl 4128 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_check_revocation 4129 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_verify_cb 4130 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_get_lookup_crls 4131 3_0_0 EXIST::FUNCTION:
+X509_STORE_get_verify 4132 3_0_0 EXIST::FUNCTION:
+X509_STORE_unlock 4133 3_0_0 EXIST::FUNCTION:
+X509_STORE_lock 4134 3_0_0 EXIST::FUNCTION:
+X509_set_proxy_pathlen 4135 3_0_0 EXIST::FUNCTION:
+X509_get_proxy_pathlen 4136 3_0_0 EXIST::FUNCTION:
+DSA_bits 4137 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+EVP_PKEY_set1_tls_encodedpoint 4138 3_0_0 NOEXIST::FUNCTION:
+EVP_PKEY_get1_tls_encodedpoint 4139 3_0_0 NOEXIST::FUNCTION:
+ASN1_STRING_get0_data 4140 3_0_0 EXIST::FUNCTION:
+X509_SIG_getm 4141 3_0_0 EXIST::FUNCTION:
+X509_get0_serialNumber 4142 3_0_0 EXIST::FUNCTION:
+PKCS12_get_attr 4143 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0
+X509_CRL_get0_lastUpdate 4144 3_0_0 EXIST::FUNCTION:
+X509_get0_notBefore 4145 3_0_0 EXIST::FUNCTION:
+X509_get0_notAfter 4146 3_0_0 EXIST::FUNCTION:
+X509_CRL_get0_nextUpdate 4147 3_0_0 EXIST::FUNCTION:
+BIO_get_new_index 4148 3_0_0 EXIST::FUNCTION:
+OPENSSL_utf82uni 4149 3_0_0 EXIST::FUNCTION:
+PKCS12_add_friendlyname_utf8 4150 3_0_0 EXIST::FUNCTION:
+OPENSSL_uni2utf8 4151 3_0_0 EXIST::FUNCTION:
+PKCS12_key_gen_utf8 4152 3_0_0 EXIST::FUNCTION:
+ECPKPARAMETERS_free 4153 3_0_0 EXIST::FUNCTION:EC
+ECPARAMETERS_free 4154 3_0_0 EXIST::FUNCTION:EC
+ECPKPARAMETERS_new 4155 3_0_0 EXIST::FUNCTION:EC
+ECPARAMETERS_new 4156 3_0_0 EXIST::FUNCTION:EC
+OCSP_RESPID_set_by_name 4157 3_0_0 EXIST::FUNCTION:OCSP
+OCSP_RESPID_set_by_key 4158 3_0_0 EXIST::FUNCTION:OCSP
+OCSP_RESPID_match 4159 3_0_0 EXIST::FUNCTION:OCSP
+ASN1_ITEM_lookup 4160 3_0_0 EXIST::FUNCTION:
+ASN1_ITEM_get 4161 3_0_0 EXIST::FUNCTION:
+BIO_read_ex 4162 3_0_0 EXIST::FUNCTION:
+BIO_set_callback_ex 4163 3_0_0 EXIST::FUNCTION:
+BIO_get_callback_ex 4164 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_read_ex 4165 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_read_ex 4166 3_0_0 EXIST::FUNCTION:
+BIO_write_ex 4167 3_0_0 EXIST::FUNCTION:
+BIO_meth_get_write_ex 4168 3_0_0 EXIST::FUNCTION:
+BIO_meth_set_write_ex 4169 3_0_0 EXIST::FUNCTION:
+DSO_pathbyaddr 4170 3_0_0 EXIST::FUNCTION:
+DSO_dsobyaddr 4171 3_0_0 EXIST::FUNCTION:
+CT_POLICY_EVAL_CTX_get_time 4172 3_0_0 EXIST::FUNCTION:CT
+CT_POLICY_EVAL_CTX_set_time 4173 3_0_0 EXIST::FUNCTION:CT
+X509_VERIFY_PARAM_set_inh_flags 4174 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get_inh_flags 4175 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_md 4176 3_0_0 EXIST::FUNCTION:
+RSA_pkey_ctx_ctrl 4177 3_0_0 EXIST::FUNCTION:
+UI_method_set_ex_data 4178 3_0_0 EXIST::FUNCTION:
+UI_method_get_ex_data 4179 3_0_0 EXIST::FUNCTION:
+UI_UTIL_wrap_read_pem_callback 4180 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get_time 4181 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get0_poly1305 4182 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,POLY1305
+DH_check_params 4183 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+EVP_PKEY_get0_siphash 4184 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SIPHASH
+EVP_aria_256_ofb 4185 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_256_cfb128 4186 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_128_cfb1 4187 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_128_ecb 4188 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_128_cfb128 4189 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_192_ecb 4190 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_128_cbc 4191 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_192_ofb 4192 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_192_cbc 4193 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_192_cfb1 4194 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_128_cfb8 4195 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_256_cfb1 4196 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_192_cfb8 4197 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_256_cfb8 4198 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_256_cbc 4199 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_128_ofb 4200 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_192_cfb128 4201 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_256_ecb 4202 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_256_ctr 4203 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_128_ctr 4204 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_192_ctr 4205 3_0_0 EXIST::FUNCTION:ARIA
+UI_null 4206 3_0_0 EXIST::FUNCTION:
+EC_KEY_get0_engine 4207 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+INT32_it 4208 3_0_0 EXIST::FUNCTION:
+UINT64_it 4209 3_0_0 EXIST::FUNCTION:
+ZINT32_it 4210 3_0_0 EXIST::FUNCTION:
+ZUINT64_it 4211 3_0_0 EXIST::FUNCTION:
+INT64_it 4212 3_0_0 EXIST::FUNCTION:
+ZUINT32_it 4213 3_0_0 EXIST::FUNCTION:
+UINT32_it 4214 3_0_0 EXIST::FUNCTION:
+ZINT64_it 4215 3_0_0 EXIST::FUNCTION:
+CRYPTO_mem_leaks_cb 4216 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0
+BIO_lookup_ex 4217 3_0_0 EXIST::FUNCTION:SOCK
+X509_CRL_print_ex 4218 3_0_0 EXIST::FUNCTION:
+X509_SIG_INFO_get 4219 3_0_0 EXIST::FUNCTION:
+X509_get_signature_info 4220 3_0_0 EXIST::FUNCTION:
+X509_SIG_INFO_set 4221 3_0_0 EXIST::FUNCTION:
+ESS_CERT_ID_V2_free 4222 3_0_0 EXIST::FUNCTION:
+ESS_SIGNING_CERT_V2_new 4223 3_0_0 EXIST::FUNCTION:
+d2i_ESS_SIGNING_CERT_V2 4224 3_0_0 EXIST::FUNCTION:
+i2d_ESS_CERT_ID_V2 4225 3_0_0 EXIST::FUNCTION:
+ESS_CERT_ID_V2_dup 4226 3_0_0 EXIST::FUNCTION:
+TS_RESP_CTX_set_ess_cert_id_digest 4227 3_0_0 EXIST::FUNCTION:TS
+d2i_ESS_CERT_ID_V2 4228 3_0_0 EXIST::FUNCTION:
+i2d_ESS_SIGNING_CERT_V2 4229 3_0_0 EXIST::FUNCTION:
+TS_CONF_set_ess_cert_id_digest 4230 3_0_0 EXIST::FUNCTION:TS
+ESS_SIGNING_CERT_V2_free 4231 3_0_0 EXIST::FUNCTION:
+ESS_SIGNING_CERT_V2_dup 4232 3_0_0 EXIST::FUNCTION:
+ESS_CERT_ID_V2_new 4233 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_ex 4234 3_0_0 EXIST::FUNCTION:
+PEM_bytes_read_bio_secmem 4235 3_0_0 EXIST::FUNCTION:
+EVP_DigestSign 4236 3_0_0 EXIST::FUNCTION:
+EVP_DigestVerify 4237 3_0_0 EXIST::FUNCTION:
+UI_method_get_data_duplicator 4238 3_0_0 EXIST::FUNCTION:
+UI_method_set_data_duplicator 4239 3_0_0 EXIST::FUNCTION:
+UI_dup_user_data 4240 3_0_0 EXIST::FUNCTION:
+UI_method_get_data_destructor 4241 3_0_0 EXIST::FUNCTION:
+ERR_load_strings_const 4242 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_to_tm 4243 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_set_string_X509 4244 3_0_0 EXIST::FUNCTION:
+OCSP_resp_get1_id 4245 3_0_0 EXIST::FUNCTION:OCSP
+OSSL_STORE_register_loader 4246 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_LOADER_set_error 4247 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_INFO_get0_PKEY 4248 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get_type 4249 3_0_0 EXIST::FUNCTION:
+ERR_load_OSSL_STORE_strings 4250 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_LOADER_free 4251 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get1_PKEY 4252 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_free 4253 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_set_eof 4255 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_LOADER_new 4256 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_INFO_get0_CERT 4257 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_set_close 4258 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_INFO_new_PARAMS 4259 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_new_PKEY 4260 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get1_PARAMS 4261 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get1_CRL 4262 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_error 4263 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get1_CERT 4264 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get0_PARAMS 4265 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_type_string 4266 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get1_NAME 4267 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_set_load 4268 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_LOADER_get0_scheme 4269 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_open 4270 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_close 4271 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_new_CERT 4272 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get0_CRL 4273 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_load 4274 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get0_NAME 4275 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_unregister_loader 4276 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_INFO_new_CRL 4277 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_new_NAME 4278 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_eof 4279 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_set_open 4280 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_LOADER_set_ctrl 4281 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_ctrl 4282 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_INFO_get0_NAME_description 4283 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_set0_NAME_description 4284 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get1_NAME_description 4285 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_do_all_loaders 4286 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_LOADER_get0_engine 4287 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OPENSSL_fork_prepare 4288 3_0_0 EXIST:UNIX:FUNCTION:DEPRECATEDIN_3_0
+OPENSSL_fork_parent 4289 3_0_0 EXIST:UNIX:FUNCTION:DEPRECATEDIN_3_0
+OPENSSL_fork_child 4290 3_0_0 EXIST:UNIX:FUNCTION:DEPRECATEDIN_3_0
+EVP_sha3_224 4304 3_0_0 EXIST::FUNCTION:
+EVP_sha3_256 4305 3_0_0 EXIST::FUNCTION:
+EVP_sha3_384 4306 3_0_0 EXIST::FUNCTION:
+EVP_sha3_512 4307 3_0_0 EXIST::FUNCTION:
+EVP_shake128 4308 3_0_0 EXIST::FUNCTION:
+EVP_shake256 4309 3_0_0 EXIST::FUNCTION:
+SCRYPT_PARAMS_new 4310 3_0_0 EXIST::FUNCTION:SCRYPT
+SCRYPT_PARAMS_free 4311 3_0_0 EXIST::FUNCTION:SCRYPT
+i2d_SCRYPT_PARAMS 4312 3_0_0 EXIST::FUNCTION:SCRYPT
+d2i_SCRYPT_PARAMS 4313 3_0_0 EXIST::FUNCTION:SCRYPT
+SCRYPT_PARAMS_it 4314 3_0_0 EXIST::FUNCTION:SCRYPT
+CRYPTO_secure_clear_free 4315 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_get0 4316 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_get_count 4317 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RAND_priv_bytes 4320 3_0_0 EXIST::FUNCTION:
+BN_priv_rand 4321 3_0_0 EXIST::FUNCTION:
+BN_priv_rand_range 4322 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_normalize 4323 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_cmp_time_t 4324 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_compare 4325 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_ctrl_uint64 4326 3_0_0 EXIST::FUNCTION:
+EVP_DigestFinalXOF 4327 3_0_0 EXIST::FUNCTION:
+ERR_clear_last_mark 4328 3_0_0 EXIST::FUNCTION:
+EVP_aria_192_ccm 4330 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_256_gcm 4331 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_256_ccm 4332 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_128_gcm 4333 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_128_ccm 4334 3_0_0 EXIST::FUNCTION:ARIA
+EVP_aria_192_gcm 4335 3_0_0 EXIST::FUNCTION:ARIA
+UI_get_result_length 4337 3_0_0 EXIST::FUNCTION:
+UI_set_result_ex 4338 3_0_0 EXIST::FUNCTION:
+UI_get_result_string_length 4339 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_check 4340 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_check 4341 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_get_check 4342 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_remove 4343 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OPENSSL_sk_reserve 4344 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set1_engine 4347 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+DH_new_by_nid 4348 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get_nid 4349 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+CRYPTO_get_alloc_counts 4350 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG
+OPENSSL_sk_new_reserve 4351 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_check 4352 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_siginf 4353 3_0_0 EXIST::FUNCTION:
+EVP_sm4_ctr 4354 3_0_0 EXIST::FUNCTION:SM4
+EVP_sm4_cbc 4355 3_0_0 EXIST::FUNCTION:SM4
+EVP_sm4_ofb 4356 3_0_0 EXIST::FUNCTION:SM4
+EVP_sm4_ecb 4357 3_0_0 EXIST::FUNCTION:SM4
+EVP_sm4_cfb128 4358 3_0_0 EXIST::FUNCTION:SM4
+EVP_sm3 4359 3_0_0 EXIST::FUNCTION:SM3
+RSA_get0_multi_prime_factors 4360 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_public_check 4361 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_param_check 4362 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_public_check 4363 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_set_param_check 4364 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_get_public_check 4365 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_get_param_check 4366 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_asn1_set_public_check 4367 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_param_check 4368 3_0_0 EXIST::FUNCTION:
+DH_check_ex 4369 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_check_pub_key_ex 4370 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_check_params_ex 4371 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+RSA_generate_multi_prime_key 4372 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get_multi_prime_extra_count 4373 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OCSP_resp_get0_signer 4374 3_0_0 EXIST::FUNCTION:OCSP
+RSA_get0_multi_prime_crt_params 4375 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_set0_multi_prime_params 4376 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get_version 4377 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_get_multi_prime_keygen 4378 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_meth_set_multi_prime_keygen 4379 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+PROFESSION_INFO_get0_addProfessionInfo 4382 3_0_0 EXIST::FUNCTION:
+ADMISSION_SYNTAX_free 4383 3_0_0 EXIST::FUNCTION:
+d2i_ADMISSION_SYNTAX 4384 3_0_0 EXIST::FUNCTION:
+NAMING_AUTHORITY_set0_authorityId 4385 3_0_0 EXIST::FUNCTION:
+NAMING_AUTHORITY_set0_authorityURL 4386 3_0_0 EXIST::FUNCTION:
+d2i_PROFESSION_INFO 4387 3_0_0 EXIST::FUNCTION:
+NAMING_AUTHORITY_it 4388 3_0_0 EXIST::FUNCTION:
+ADMISSION_SYNTAX_get0_contentsOfAdmissions 4389 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_set0_professionItems 4390 3_0_0 EXIST::FUNCTION:
+NAMING_AUTHORITY_new 4391 3_0_0 EXIST::FUNCTION:
+NAMING_AUTHORITY_get0_authorityURL 4392 3_0_0 EXIST::FUNCTION:
+ADMISSION_SYNTAX_get0_admissionAuthority 4393 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_new 4394 3_0_0 EXIST::FUNCTION:
+ADMISSIONS_new 4395 3_0_0 EXIST::FUNCTION:
+ADMISSION_SYNTAX_set0_admissionAuthority 4396 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_get0_professionOIDs 4397 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_it 4398 3_0_0 EXIST::FUNCTION:
+i2d_PROFESSION_INFO 4399 3_0_0 EXIST::FUNCTION:
+ADMISSIONS_set0_professionInfos 4400 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_get0_namingAuthority 4401 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_free 4402 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_set0_addProfessionInfo 4403 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_set0_registrationNumber 4404 3_0_0 EXIST::FUNCTION:
+ADMISSION_SYNTAX_set0_contentsOfAdmissions 4405 3_0_0 EXIST::FUNCTION:
+NAMING_AUTHORITY_get0_authorityId 4406 3_0_0 EXIST::FUNCTION:
+ADMISSION_SYNTAX_it 4407 3_0_0 EXIST::FUNCTION:
+i2d_ADMISSION_SYNTAX 4408 3_0_0 EXIST::FUNCTION:
+NAMING_AUTHORITY_get0_authorityText 4409 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_set0_namingAuthority 4410 3_0_0 EXIST::FUNCTION:
+i2d_NAMING_AUTHORITY 4411 3_0_0 EXIST::FUNCTION:
+NAMING_AUTHORITY_free 4412 3_0_0 EXIST::FUNCTION:
+ADMISSIONS_set0_admissionAuthority 4413 3_0_0 EXIST::FUNCTION:
+ADMISSIONS_free 4414 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_get0_registrationNumber 4415 3_0_0 EXIST::FUNCTION:
+d2i_ADMISSIONS 4416 3_0_0 EXIST::FUNCTION:
+i2d_ADMISSIONS 4417 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_get0_professionItems 4418 3_0_0 EXIST::FUNCTION:
+ADMISSIONS_get0_admissionAuthority 4419 3_0_0 EXIST::FUNCTION:
+PROFESSION_INFO_set0_professionOIDs 4420 3_0_0 EXIST::FUNCTION:
+d2i_NAMING_AUTHORITY 4421 3_0_0 EXIST::FUNCTION:
+ADMISSIONS_it 4422 3_0_0 EXIST::FUNCTION:
+ADMISSIONS_get0_namingAuthority 4423 3_0_0 EXIST::FUNCTION:
+NAMING_AUTHORITY_set0_authorityText 4424 3_0_0 EXIST::FUNCTION:
+ADMISSIONS_set0_namingAuthority 4425 3_0_0 EXIST::FUNCTION:
+ADMISSIONS_get0_professionInfos 4426 3_0_0 EXIST::FUNCTION:
+ADMISSION_SYNTAX_new 4427 3_0_0 EXIST::FUNCTION:
+EVP_sha512_256 4428 3_0_0 EXIST::FUNCTION:
+EVP_sha512_224 4429 3_0_0 EXIST::FUNCTION:
+OCSP_basic_sign_ctx 4430 3_0_0 EXIST::FUNCTION:OCSP
+OSSL_STORE_vctrl 4433 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_SEARCH_by_alias 4434 3_0_0 EXIST::FUNCTION:
+BIO_bind 4435 3_0_0 EXIST::FUNCTION:SOCK
+OSSL_STORE_LOADER_set_expect 4436 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_expect 4437 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_SEARCH_by_key_fingerprint 4438 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_SEARCH_get0_serial 4439 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_SEARCH_by_name 4440 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_supports_search 4441 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_find 4442 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_SEARCH_get_type 4443 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_SEARCH_get0_bytes 4444 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_SEARCH_get0_string 4445 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_SEARCH_by_issuer_serial 4446 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_SEARCH_get0_name 4447 3_0_0 EXIST::FUNCTION:
+X509_get0_authority_key_id 4448 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_set_find 4449 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_SEARCH_free 4450 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_SEARCH_get0_digest 4451 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_new_raw_private_key 4453 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_new_raw_public_key 4454 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_new_CMAC_key 4455 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_asn1_set_set_priv_key 4456 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_set_pub_key 4457 3_0_0 EXIST::FUNCTION:
+conf_ssl_name_find 4469 3_0_0 EXIST::FUNCTION:
+conf_ssl_get_cmd 4470 3_0_0 EXIST::FUNCTION:
+conf_ssl_get 4471 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get_hostflags 4472 3_0_0 EXIST::FUNCTION:
+DH_get0_p 4473 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get0_q 4474 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get0_g 4475 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get0_priv_key 4476 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DH_get0_pub_key 4477 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+DSA_get0_priv_key 4478 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_get0_pub_key 4479 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_get0_q 4480 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_get0_p 4481 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+DSA_get0_g 4482 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA
+RSA_get0_dmp1 4483 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_d 4484 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_n 4485 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_dmq1 4486 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_e 4487 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_q 4488 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_p 4489 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+RSA_get0_iqmp 4490 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+ECDSA_SIG_get0_r 4491 3_0_0 EXIST::FUNCTION:EC
+ECDSA_SIG_get0_s 4492 3_0_0 EXIST::FUNCTION:EC
+X509_LOOKUP_meth_get_get_by_fingerprint 4493 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_new 4494 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_get_init 4495 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_get_get_by_alias 4496 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_set_new_item 4497 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_set_shutdown 4498 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_get_new_item 4499 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_set_ctrl 4500 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_set_get_by_issuer_serial 4501 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_get_store 4502 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_get_ctrl 4503 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_set_get_by_alias 4504 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_get_get_by_subject 4505 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_get_free 4506 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_set_get_by_subject 4507 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_set_free 4508 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_get_shutdown 4509 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_set_method_data 4510 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_get_method_data 4511 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_set_get_by_fingerprint 4512 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_free 4513 3_0_0 EXIST::FUNCTION:
+X509_OBJECT_set1_X509 4514 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_get_get_by_issuer_serial 4515 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_meth_set_init 4516 3_0_0 EXIST::FUNCTION:
+X509_OBJECT_set1_X509_CRL 4517 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_raw_public_key 4518 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_raw_private_key 4519 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_get_priv_key 4520 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_get_pub_key 4521 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_alias_type 4522 3_0_0 NOEXIST::FUNCTION:DEPRECATEDIN_3_0
+RAND_keep_random_devices_open 4523 3_0_0 EXIST::FUNCTION:
+EC_POINT_set_compressed_coordinates 4524 3_0_0 EXIST::FUNCTION:EC
+EC_POINT_set_affine_coordinates 4525 3_0_0 EXIST::FUNCTION:EC
+EC_POINT_get_affine_coordinates 4526 3_0_0 EXIST::FUNCTION:EC
+EC_GROUP_set_curve 4527 3_0_0 EXIST::FUNCTION:EC
+EC_GROUP_get_curve 4528 3_0_0 EXIST::FUNCTION:EC
+OCSP_resp_get0_tbs_sigalg 4529 3_0_0 EXIST::FUNCTION:OCSP
+OCSP_resp_get0_respdata 4530 3_0_0 EXIST::FUNCTION:OCSP
+EVP_MD_CTX_set_pkey_ctx 4531 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_digest_custom 4532 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_get_digest_custom 4533 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_MAC_CTX_new 4534 3_0_0 EXIST::FUNCTION:
+EVP_MAC_CTX_free 4535 3_0_0 EXIST::FUNCTION:
+EVP_MAC_CTX_dup 4536 3_0_0 EXIST::FUNCTION:
+EVP_MAC_CTX_get0_mac 4537 3_0_0 EXIST::FUNCTION:
+EVP_MAC_CTX_get_mac_size 4538 3_0_0 EXIST::FUNCTION:
+EVP_Q_mac 4539 3_0_0 EXIST::FUNCTION:
+EVP_MAC_init 4540 3_0_0 EXIST::FUNCTION:
+EVP_MAC_update 4541 3_0_0 EXIST::FUNCTION:
+EVP_MAC_final 4542 3_0_0 EXIST::FUNCTION:
+EVP_MAC_finalXOF 4543 3_0_0 EXIST::FUNCTION:
+OSSL_EC_curve_nid2name 4544 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_digestsign_supports_digest 4545 3_0_0 EXIST::FUNCTION:
+SRP_VBASE_add0_user 4546 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_user_pwd_new 4547 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_user_pwd_set_gN 4548 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_user_pwd_set1_ids 4549 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_user_pwd_set0_sv 4550 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+OPENSSL_version_major 4551 3_0_0 EXIST::FUNCTION:
+OPENSSL_version_minor 4552 3_0_0 EXIST::FUNCTION:
+OPENSSL_version_patch 4553 3_0_0 EXIST::FUNCTION:
+OPENSSL_version_pre_release 4554 3_0_0 EXIST::FUNCTION:
+OPENSSL_version_build_metadata 4555 3_0_0 EXIST::FUNCTION:
+OPENSSL_INIT_set_config_filename 4556 3_0_0 EXIST::FUNCTION:STDIO
+OPENSSL_INIT_set_config_file_flags 4557 3_0_0 EXIST::FUNCTION:STDIO
+ASYNC_WAIT_CTX_get_callback 4558 3_0_0 EXIST::FUNCTION:
+ASYNC_WAIT_CTX_set_callback 4559 3_0_0 EXIST::FUNCTION:
+ASYNC_WAIT_CTX_set_status 4560 3_0_0 EXIST::FUNCTION:
+ASYNC_WAIT_CTX_get_status 4561 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_free 4562 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_reset 4563 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_get_kdf_size 4564 3_0_0 EXIST::FUNCTION:
+EVP_KDF_derive 4565 3_0_0 EXIST::FUNCTION:
+EVP_KDF_get0_name 4566 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get0_field 4567 3_0_0 EXIST::FUNCTION:EC
+CRYPTO_alloc_ex_data 4568 3_0_0 EXIST::FUNCTION:
+OSSL_LIB_CTX_new 4569 3_0_0 EXIST::FUNCTION:
+OSSL_LIB_CTX_free 4570 3_0_0 EXIST::FUNCTION:
+OPENSSL_LH_flush 4571 3_0_0 EXIST::FUNCTION:
+BN_native2bn 4572 3_0_0 EXIST::FUNCTION:
+BN_bn2nativepad 4573 3_0_0 EXIST::FUNCTION:
+OSSL_trace_get_category_num 4574 3_0_0 EXIST::FUNCTION:
+OSSL_trace_get_category_name 4575 3_0_0 EXIST::FUNCTION:
+OSSL_trace_set_channel 4576 3_0_0 EXIST::FUNCTION:
+OSSL_trace_set_prefix 4577 3_0_0 EXIST::FUNCTION:
+OSSL_trace_set_suffix 4578 3_0_0 EXIST::FUNCTION:
+OSSL_trace_set_callback 4579 3_0_0 EXIST::FUNCTION:
+OSSL_trace_enabled 4580 3_0_0 EXIST::FUNCTION:
+OSSL_trace_begin 4581 3_0_0 EXIST::FUNCTION:
+OSSL_trace_end 4582 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_load 4583 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_try_load 4584 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_unload 4585 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_add_builtin 4586 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_gettable_params 4587 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_get_params 4588 3_0_0 EXIST::FUNCTION:
+d2i_OSSL_CRMF_ENCRYPTEDVALUE 4589 3_0_0 EXIST::FUNCTION:CRMF
+i2d_OSSL_CRMF_ENCRYPTEDVALUE 4590 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_ENCRYPTEDVALUE_free 4591 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_ENCRYPTEDVALUE_new 4592 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_ENCRYPTEDVALUE_it 4593 3_0_0 EXIST::FUNCTION:CRMF
+d2i_OSSL_CRMF_MSG 4594 3_0_0 EXIST::FUNCTION:CRMF
+i2d_OSSL_CRMF_MSG 4595 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_dup 4596 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_free 4597 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_new 4598 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_it 4599 3_0_0 EXIST::FUNCTION:CRMF
+d2i_OSSL_CRMF_PBMPARAMETER 4600 3_0_0 EXIST::FUNCTION:CRMF
+i2d_OSSL_CRMF_PBMPARAMETER 4601 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_PBMPARAMETER_free 4602 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_PBMPARAMETER_new 4603 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_PBMPARAMETER_it 4604 3_0_0 EXIST::FUNCTION:CRMF
+d2i_OSSL_CRMF_CERTID 4605 3_0_0 EXIST::FUNCTION:CRMF
+i2d_OSSL_CRMF_CERTID 4606 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTID_dup 4607 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTID_free 4608 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTID_new 4609 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTID_it 4610 3_0_0 EXIST::FUNCTION:CRMF
+d2i_OSSL_CRMF_PKIPUBLICATIONINFO 4611 3_0_0 EXIST::FUNCTION:CRMF
+i2d_OSSL_CRMF_PKIPUBLICATIONINFO 4612 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_PKIPUBLICATIONINFO_free 4613 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_PKIPUBLICATIONINFO_new 4614 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_PKIPUBLICATIONINFO_it 4615 3_0_0 EXIST::FUNCTION:CRMF
+d2i_OSSL_CRMF_SINGLEPUBINFO 4616 3_0_0 EXIST::FUNCTION:CRMF
+i2d_OSSL_CRMF_SINGLEPUBINFO 4617 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_SINGLEPUBINFO_free 4618 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_SINGLEPUBINFO_new 4619 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_SINGLEPUBINFO_it 4620 3_0_0 EXIST::FUNCTION:CRMF
+d2i_OSSL_CRMF_CERTTEMPLATE 4621 3_0_0 EXIST::FUNCTION:CRMF
+i2d_OSSL_CRMF_CERTTEMPLATE 4622 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTTEMPLATE_free 4623 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTTEMPLATE_new 4624 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTTEMPLATE_it 4625 3_0_0 EXIST::FUNCTION:CRMF
+d2i_OSSL_CRMF_MSGS 4626 3_0_0 EXIST::FUNCTION:CRMF
+i2d_OSSL_CRMF_MSGS 4627 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSGS_free 4628 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSGS_new 4629 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSGS_it 4630 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_pbmp_new 4631 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_pbm_new 4632 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_get0_regCtrl_regToken 4633 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set1_regCtrl_regToken 4634 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_get0_regCtrl_authenticator 4635 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set1_regCtrl_authenticator 4636 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo 4637 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set0_SinglePubInfo 4638 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo 4639 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set_PKIPublicationInfo_action 4640 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo 4641 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey 4642 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey 4643 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_get0_regCtrl_oldCertID 4644 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set1_regCtrl_oldCertID 4645 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTID_gen 4646 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_get0_regInfo_utf8Pairs 4647 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set1_regInfo_utf8Pairs 4648 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_get0_regInfo_certReq 4649 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set1_regInfo_certReq 4650 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set0_validity 4651 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set_certReqId 4652 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_get_certReqId 4653 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_set0_extensions 4654 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_push0_extension 4655 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_create_popo 4656 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSGS_verify_popo 4657 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_MSG_get0_tmpl 4658 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTTEMPLATE_get0_serialNumber 4659 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTTEMPLATE_get0_subject 4660 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTTEMPLATE_get0_issuer 4661 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTTEMPLATE_get0_extensions 4662 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTTEMPLATE_fill 4663 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert 4664 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_PARAM_locate 4665 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_int 4666 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_uint 4667 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_long 4668 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_ulong 4669 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_int32 4670 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_uint32 4671 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_int64 4672 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_uint64 4673 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_size_t 4674 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_BN 4675 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_double 4676 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_utf8_string 4677 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_utf8_ptr 4678 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_octet_string 4679 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_octet_ptr 4680 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_int 4681 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_uint 4682 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_long 4683 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_ulong 4684 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_int32 4685 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_uint32 4686 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_int64 4687 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_uint64 4688 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_size_t 4689 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_int 4690 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_uint 4691 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_long 4692 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_ulong 4693 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_int32 4694 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_uint32 4695 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_int64 4696 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_uint64 4697 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_size_t 4698 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_double 4699 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_double 4700 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_BN 4701 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_BN 4702 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_utf8_string 4703 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_utf8_string 4704 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_octet_string 4705 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_octet_string 4706 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_utf8_ptr 4707 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_utf8_ptr 4708 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_octet_ptr 4709 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_octet_ptr 4710 3_0_0 EXIST::FUNCTION:
+X509_set0_distinguishing_id 4711 3_0_0 EXIST::FUNCTION:
+X509_get0_distinguishing_id 4712 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get0_engine 4713 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,ENGINE
+EVP_MD_up_ref 4714 3_0_0 EXIST::FUNCTION:
+EVP_MD_fetch 4715 3_0_0 EXIST::FUNCTION:
+EVP_set_default_properties 4716 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_end 4717 3_0_0 EXIST::FUNCTION:
+EC_GROUP_check_named_curve 4718 3_0_0 EXIST::FUNCTION:EC
+EVP_CIPHER_up_ref 4719 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_fetch 4720 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get_mode 4721 3_0_0 EXIST::FUNCTION:
+OPENSSL_info 4722 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_new 4723 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_kdf 4724 3_0_0 EXIST::FUNCTION:
+i2d_KeyParams 4725 3_0_0 EXIST::FUNCTION:
+d2i_KeyParams 4726 3_0_0 EXIST::FUNCTION:
+i2d_KeyParams_bio 4727 3_0_0 EXIST::FUNCTION:
+d2i_KeyParams_bio 4728 3_0_0 EXIST::FUNCTION:
+OSSL_CMP_PKISTATUS_it 4729 3_0_0 EXIST::FUNCTION:CMP
+d2i_OSSL_CMP_PKIHEADER 4730 3_0_0 EXIST::FUNCTION:CMP
+i2d_OSSL_CMP_PKIHEADER 4731 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_PKIHEADER_free 4732 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_PKIHEADER_new 4733 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_PKIHEADER_it 4734 3_0_0 EXIST::FUNCTION:CMP
+d2i_OSSL_CMP_MSG 4735 3_0_0 EXIST::FUNCTION:CMP
+i2d_OSSL_CMP_MSG 4736 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_MSG_it 4737 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_ITAV_create 4738 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_ITAV_set0 4739 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_ITAV_get0_type 4740 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_ITAV_get0_value 4741 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_ITAV_push0_stack_item 4742 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_ITAV_free 4743 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_MSG_free 4744 3_0_0 EXIST::FUNCTION:CMP
+EVP_MD_CTX_set_params 4745 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_get_params 4746 3_0_0 EXIST::FUNCTION:
+BN_CTX_new_ex 4747 3_0_0 EXIST::FUNCTION:
+BN_CTX_secure_new_ex 4748 3_0_0 EXIST::FUNCTION:
+OPENSSL_thread_stop_ex 4749 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_locate_const 4750 3_0_0 EXIST::FUNCTION:
+X509_REQ_set0_distinguishing_id 4751 3_0_0 EXIST::FUNCTION:
+X509_REQ_get0_distinguishing_id 4752 3_0_0 EXIST::FUNCTION:
+BN_rand_ex 4753 3_0_0 EXIST::FUNCTION:
+BN_priv_rand_ex 4754 3_0_0 EXIST::FUNCTION:
+BN_rand_range_ex 4755 3_0_0 EXIST::FUNCTION:
+BN_priv_rand_range_ex 4756 3_0_0 EXIST::FUNCTION:
+BN_generate_prime_ex2 4757 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_free 4758 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_up_ref 4759 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_fetch 4760 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_pad 4761 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_params 4762 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_fetch 4763 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_up_ref 4764 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_free 4765 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_get0_provider 4766 3_0_0 EXIST::FUNCTION:
+X509_PUBKEY_dup 4767 3_0_0 EXIST::FUNCTION:
+EVP_MD_get0_name 4768 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get0_name 4769 3_0_0 EXIST::FUNCTION:
+EVP_MD_get0_provider 4770 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get0_provider 4771 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_get0_name 4772 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_do_all_provided 4773 3_0_0 EXIST::FUNCTION:
+EVP_MD_do_all_provided 4774 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_get0_provider 4775 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_available 4776 3_0_0 EXIST::FUNCTION:
+ERR_new 4777 3_0_0 EXIST::FUNCTION:
+ERR_set_debug 4778 3_0_0 EXIST::FUNCTION:
+ERR_set_error 4779 3_0_0 EXIST::FUNCTION:
+ERR_vset_error 4780 3_0_0 EXIST::FUNCTION:
+X509_get0_authority_issuer 4781 3_0_0 EXIST::FUNCTION:
+X509_get0_authority_serial 4782 3_0_0 EXIST::FUNCTION:
+X509_self_signed 4783 3_0_0 EXIST::FUNCTION:
+OPENSSL_hexstr2buf_ex 4784 3_0_0 EXIST::FUNCTION:
+OPENSSL_buf2hexstr_ex 4785 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_allocate_from_text 4786 3_0_0 EXIST::FUNCTION:
+EVP_MD_gettable_params 4787 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_settable_params 4788 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_gettable_params 4789 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get_params 4790 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_set_params 4791 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get_params 4792 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_gettable_params 4793 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_settable_ctx_params 4794 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_gettable_ctx_params 4795 3_0_0 EXIST::FUNCTION:
+EVP_MD_get_params 4796 3_0_0 EXIST::FUNCTION:
+EVP_MAC_fetch 4797 3_0_0 EXIST::FUNCTION:
+EVP_MAC_settable_ctx_params 4798 3_0_0 EXIST::FUNCTION:
+EVP_MAC_CTX_set_params 4799 3_0_0 EXIST::FUNCTION:
+EVP_MAC_CTX_get_params 4800 3_0_0 EXIST::FUNCTION:
+EVP_MAC_gettable_ctx_params 4801 3_0_0 EXIST::FUNCTION:
+EVP_MAC_free 4802 3_0_0 EXIST::FUNCTION:
+EVP_MAC_up_ref 4803 3_0_0 EXIST::FUNCTION:
+EVP_MAC_get_params 4804 3_0_0 EXIST::FUNCTION:
+EVP_MAC_gettable_params 4805 3_0_0 EXIST::FUNCTION:
+EVP_MAC_get0_provider 4806 3_0_0 EXIST::FUNCTION:
+EVP_MAC_do_all_provided 4807 3_0_0 EXIST::FUNCTION:
+EVP_MAC_get0_name 4808 3_0_0 EXIST::FUNCTION:
+EVP_MD_free 4809 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_free 4810 3_0_0 EXIST::FUNCTION:
+EVP_KDF_up_ref 4811 3_0_0 EXIST::FUNCTION:
+EVP_KDF_free 4812 3_0_0 EXIST::FUNCTION:
+EVP_KDF_fetch 4813 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_dup 4814 3_0_0 EXIST::FUNCTION:
+EVP_KDF_get0_provider 4815 3_0_0 EXIST::FUNCTION:
+EVP_KDF_get_params 4816 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_get_params 4817 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_set_params 4818 3_0_0 EXIST::FUNCTION:
+EVP_KDF_gettable_params 4819 3_0_0 EXIST::FUNCTION:
+EVP_KDF_gettable_ctx_params 4820 3_0_0 EXIST::FUNCTION:
+EVP_KDF_settable_ctx_params 4821 3_0_0 EXIST::FUNCTION:
+EVP_KDF_do_all_provided 4822 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_free 4823 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_up_ref 4824 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_get0_provider 4825 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_fetch 4826 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_signature_md 4827 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_signature_md 4828 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_params 4829 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_gettable_params 4830 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_settable_params 4831 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get_tag_length 4832 3_0_0 EXIST::FUNCTION:
+ERR_get_error_all 4833 3_0_0 EXIST::FUNCTION:
+ERR_peek_error_func 4834 3_0_0 EXIST::FUNCTION:
+ERR_peek_error_data 4835 3_0_0 EXIST::FUNCTION:
+ERR_peek_error_all 4836 3_0_0 EXIST::FUNCTION:
+ERR_peek_last_error_func 4837 3_0_0 EXIST::FUNCTION:
+ERR_peek_last_error_data 4838 3_0_0 EXIST::FUNCTION:
+ERR_peek_last_error_all 4839 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_is_a 4840 3_0_0 EXIST::FUNCTION:
+EVP_MAC_is_a 4841 3_0_0 EXIST::FUNCTION:
+EVP_MD_settable_ctx_params 4842 3_0_0 EXIST::FUNCTION:
+EVP_MD_gettable_ctx_params 4843 3_0_0 EXIST::FUNCTION:
+OSSL_CMP_CTX_new 4844 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_free 4845 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_reinit 4846 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set_option 4847 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get_option 4848 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set_log_cb 4849 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_print_errors 4850 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_serverPath 4851 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_server 4852 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set_serverPort 4853 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_proxy 4854 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_no_proxy 4855 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set_http_cb 4856 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set_http_cb_arg 4857 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get_http_cb_arg 4858 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set_transfer_cb 4859 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set_transfer_cb_arg 4860 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get_transfer_cb_arg 4861 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_srvCert 4862 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_expected_sender 4863 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set0_trustedStore 4864 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get0_trustedStore 4865 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_untrusted 4866 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get0_untrusted 4867 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_cert 4868 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_pkey 4869 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_build_cert_chain 4870 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_referenceValue 4871 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_secretValue 4872 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_recipient 4873 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_push0_geninfo_ITAV 4874 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_extraCertsOut 4875 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set0_newPkey 4876 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get0_newPkey 4877 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_issuer 4878 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_subjectName 4879 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_push1_subjectAltName 4880 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set0_reqExtensions 4881 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_reqExtensions_have_SAN 4882 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_push0_policy 4883 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_oldCert 4884 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_p10CSR 4885 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_push0_genm_ITAV 4886 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set_certConf_cb 4887 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set_certConf_cb_arg 4888 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get_certConf_cb_arg 4889 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get_status 4890 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get0_statusString 4891 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get_failInfoCode 4892 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get0_newCert 4893 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get1_newChain 4894 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get1_caPubs 4895 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_get1_extraCertsIn 4896 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_transactionID 4897 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_set1_senderNonce 4898 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_log_open 4899 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_log_close 4900 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_print_to_bio 4901 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_print_errors_cb 4902 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CRMF_CERTID_get0_issuer 4903 3_0_0 EXIST::FUNCTION:CRMF
+OSSL_CRMF_CERTID_get0_serialNumber 4904 3_0_0 EXIST::FUNCTION:CRMF
+EVP_DigestSignUpdate 4905 3_0_0 EXIST::FUNCTION:
+EVP_DigestVerifyUpdate 4906 3_0_0 EXIST::FUNCTION:
+BN_check_prime 4907 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_is_a 4908 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_do_all_provided 4909 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_is_a 4910 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_do_all_provided 4911 3_0_0 EXIST::FUNCTION:
+EVP_KDF_is_a 4912 3_0_0 EXIST::FUNCTION:
+EVP_MD_is_a 4913 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_is_a 4914 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_do_all_provided 4915 3_0_0 EXIST::FUNCTION:
+EVP_MD_names_do_all 4916 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_names_do_all 4917 3_0_0 EXIST::FUNCTION:
+EVP_MAC_names_do_all 4918 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_names_do_all 4919 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_names_do_all 4920 3_0_0 EXIST::FUNCTION:
+EVP_KDF_names_do_all 4921 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_names_do_all 4922 3_0_0 EXIST::FUNCTION:
+OSSL_CMP_CTX_snprint_PKIStatus 4923 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_HDR_get0_transactionID 4924 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_HDR_get0_recipNonce 4925 3_0_0 EXIST::FUNCTION:CMP
+X509_LOOKUP_store 4926 3_0_0 EXIST::FUNCTION:
+X509_add_cert 4927 3_0_0 EXIST::FUNCTION:
+X509_add_certs 4928 3_0_0 EXIST::FUNCTION:
+X509_STORE_load_file 4929 3_0_0 EXIST::FUNCTION:
+X509_STORE_load_path 4930 3_0_0 EXIST::FUNCTION:
+X509_STORE_load_store 4931 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_fromdata 4932 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_free 4933 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_up_ref 4934 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_get0_provider 4935 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_fetch 4936 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_is_a 4937 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_do_all_provided 4938 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_names_do_all 4939 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_padding 4940 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_rsa_padding 4941 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_mgf1_md 4942 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_mgf1_md_name 4943 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_rsa_mgf1_md 4944 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_oaep_md 4945 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_oaep_md_name 4946 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_rsa_oaep_md 4947 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set0_rsa_oaep_label 4948 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get0_rsa_oaep_label 4949 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_rsa_mgf1_md_name 4950 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_rsa_oaep_md_name 4951 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_meth_set_digestsign 4952 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_set_digestverify 4953 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_get_digestsign 4954 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_meth_get_digestverify 4955 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_ENCODER_up_ref 4956 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_free 4957 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_fetch 4958 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_is_a 4959 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_get0_provider 4960 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_do_all_provided 4961 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_names_do_all 4962 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_settable_ctx_params 4963 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_new 4964 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_params 4965 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_free 4966 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_get0_properties 4967 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_to_bio 4968 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_to_fp 4969 3_0_0 EXIST::FUNCTION:STDIO
+OSSL_ENCODER_CTX_new_for_pkey 4970 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_cipher 4971 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_passphrase 4972 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_pem_password_cb 4973 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_passphrase_ui 4974 3_0_0 EXIST::FUNCTION:
+PEM_read_X509_PUBKEY 4975 3_0_0 EXIST::FUNCTION:STDIO
+PEM_write_X509_PUBKEY 4976 3_0_0 EXIST::FUNCTION:STDIO
+PEM_read_bio_X509_PUBKEY 4977 3_0_0 EXIST::FUNCTION:
+PEM_write_bio_X509_PUBKEY 4978 3_0_0 EXIST::FUNCTION:
+d2i_X509_PUBKEY_fp 4979 3_0_0 EXIST::FUNCTION:STDIO
+i2d_X509_PUBKEY_fp 4980 3_0_0 EXIST::FUNCTION:STDIO
+d2i_X509_PUBKEY_bio 4981 3_0_0 EXIST::FUNCTION:
+i2d_X509_PUBKEY_bio 4982 3_0_0 EXIST::FUNCTION:
+RSA_get0_pss_params 4983 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+X509_cmp_timeframe 4984 3_0_0 EXIST::FUNCTION:
+OSSL_CMP_MSG_get0_header 4985 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_MSG_get_bodytype 4986 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_MSG_update_transactionID 4987 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_setup_CRM 4988 3_0_0 EXIST::FUNCTION:CMP
+BIO_f_prefix 4989 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_new_from_name 4990 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_new_from_pkey 4991 3_0_0 EXIST::FUNCTION:
+OSSL_SELF_TEST_set_callback 4992 3_0_0 EXIST::FUNCTION:
+OSSL_SELF_TEST_get_callback 4993 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_dup 4994 3_0_0 EXIST::FUNCTION:
+ASN1_UTCTIME_dup 4995 3_0_0 EXIST::FUNCTION:
+ASN1_GENERALIZEDTIME_dup 4996 3_0_0 EXIST::FUNCTION:
+RAND_priv_bytes_ex 4997 3_0_0 EXIST::FUNCTION:
+RAND_bytes_ex 4998 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_default_digest_name 4999 3_0_0 EXIST::FUNCTION:
+CMS_decrypt_set1_pkey_and_peer 5000 3_0_0 EXIST::FUNCTION:CMS
+CMS_add1_recipient 5001 3_0_0 EXIST::FUNCTION:CMS
+CMS_RecipientInfo_kari_set0_pkey_and_peer 5002 3_0_0 EXIST::FUNCTION:CMS
+PKCS8_pkey_add1_attr 5003 3_0_0 EXIST::FUNCTION:
+PKCS8_pkey_add1_attr_by_OBJ 5004 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_private_check 5005 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_pairwise_check 5006 3_0_0 EXIST::FUNCTION:
+ASN1_item_verify_ctx 5007 3_0_0 EXIST::FUNCTION:
+ASN1_item_sign_ex 5008 3_0_0 EXIST::FUNCTION:
+ASN1_item_verify_ex 5009 3_0_0 EXIST::FUNCTION:
+BIO_socket_wait 5010 3_0_0 EXIST::FUNCTION:SOCK
+BIO_wait 5011 3_0_0 EXIST::FUNCTION:
+BIO_do_connect_retry 5012 3_0_0 EXIST::FUNCTION:
+OSSL_parse_url 5013 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_adapt_proxy 5014 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_REQ_CTX_get_resp_len 5015 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_REQ_CTX_set_expected 5016 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_is_alive 5017 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_open 5018 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_proxy_connect 5019 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_set1_request 5020 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_exchange 5021 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_get 5022 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_transfer 5023 3_0_0 EXIST::FUNCTION:
+OSSL_HTTP_close 5024 3_0_0 EXIST::FUNCTION:
+ASN1_item_i2d_mem_bio 5025 3_0_0 EXIST::FUNCTION:
+ERR_add_error_txt 5026 3_0_0 EXIST::FUNCTION:
+ERR_add_error_mem_bio 5027 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_print_verify_cb 5028 3_0_0 EXIST::FUNCTION:
+X509_STORE_get1_all_certs 5029 3_0_0 EXIST::FUNCTION:
+OSSL_CMP_validate_msg 5030 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_validate_cert_path 5031 3_0_0 EXIST::FUNCTION:CMP
+EVP_PKEY_CTX_set_ecdh_cofactor_mode 5032 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_ecdh_cofactor_mode 5033 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_ecdh_kdf_type 5034 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_ecdh_kdf_type 5035 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_ecdh_kdf_md 5036 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_ecdh_kdf_md 5037 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_ecdh_kdf_outlen 5038 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_ecdh_kdf_outlen 5039 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set0_ecdh_kdf_ukm 5040 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get0_ecdh_kdf_ukm 5041 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_CTX_set_rsa_pss_saltlen 5042 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_rsa_pss_saltlen 5043 3_0_0 EXIST::FUNCTION:
+d2i_ISSUER_SIGN_TOOL 5044 3_0_0 EXIST::FUNCTION:
+i2d_ISSUER_SIGN_TOOL 5045 3_0_0 EXIST::FUNCTION:
+ISSUER_SIGN_TOOL_free 5046 3_0_0 EXIST::FUNCTION:
+ISSUER_SIGN_TOOL_new 5047 3_0_0 EXIST::FUNCTION:
+ISSUER_SIGN_TOOL_it 5048 3_0_0 EXIST::FUNCTION:
+OSSL_SELF_TEST_new 5049 3_0_0 EXIST::FUNCTION:
+OSSL_SELF_TEST_free 5050 3_0_0 EXIST::FUNCTION:
+OSSL_SELF_TEST_onbegin 5051 3_0_0 EXIST::FUNCTION:
+OSSL_SELF_TEST_oncorrupt_byte 5052 3_0_0 EXIST::FUNCTION:
+OSSL_SELF_TEST_onend 5053 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_set_default_search_path 5054 3_0_0 EXIST::FUNCTION:
+X509_digest_sig 5055 3_0_0 EXIST::FUNCTION:
+OSSL_CMP_MSG_dup 5056 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_ITAV_dup 5057 3_0_0 EXIST::FUNCTION:CMP
+d2i_OSSL_CMP_PKISI 5058 3_0_0 EXIST::FUNCTION:CMP
+i2d_OSSL_CMP_PKISI 5059 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_PKISI_free 5060 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_PKISI_new 5061 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_PKISI_it 5062 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_PKISI_dup 5063 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_snprint_PKIStatusInfo 5064 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_STATUSINFO_new 5065 3_0_0 EXIST::FUNCTION:CMP
+d2i_OSSL_CMP_MSG_bio 5066 3_0_0 EXIST::FUNCTION:CMP
+i2d_OSSL_CMP_MSG_bio 5067 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_process_request 5068 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_CTX_server_perform 5069 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_CTX_new 5070 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_CTX_free 5071 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_CTX_init 5072 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_CTX_get0_cmp_ctx 5073 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_CTX_get0_custom_ctx 5074 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_CTX_set_send_unprotected_errors 5075 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_CTX_set_accept_unprotected 5076 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_CTX_set_accept_raverified 5077 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_SRV_CTX_set_grant_implicit_confirm 5078 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_exec_certreq 5079 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_try_certreq 5080 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_certConf_cb 5081 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_exec_RR_ses 5082 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_exec_GENM_ses 5083 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_MSG_http_perform 5084 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_MSG_read 5085 3_0_0 EXIST::FUNCTION:CMP
+OSSL_CMP_MSG_write 5086 3_0_0 EXIST::FUNCTION:CMP
+EVP_PKEY_Q_keygen 5087 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_generate 5088 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_keygen_bits 5089 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_keygen_pubexp 5090 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_CTX_set1_rsa_keygen_pubexp 5091 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_keygen_primes 5092 3_0_0 EXIST::FUNCTION:
+NCONF_new_ex 5093 3_0_0 EXIST::FUNCTION:
+CONF_modules_load_file_ex 5094 3_0_0 EXIST::FUNCTION:
+OSSL_LIB_CTX_load_config 5095 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_to_param 5096 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_int 5097 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_uint 5098 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_long 5099 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_ulong 5100 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_int32 5101 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_uint32 5102 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_int64 5103 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_uint64 5104 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_size_t 5105 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_double 5106 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_BN 5107 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_BN_pad 5108 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_utf8_string 5109 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_utf8_ptr 5110 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_octet_string 5111 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_octet_ptr 5112 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_new 5113 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_free 5114 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_type_by_keymgmt 5115 3_0_0 EXIST::FUNCTION:
+OCSP_RESPID_set_by_key_ex 5116 3_0_0 EXIST::FUNCTION:OCSP
+OCSP_RESPID_match_ex 5117 3_0_0 EXIST::FUNCTION:OCSP
+SRP_create_verifier_ex 5118 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_create_verifier_BN_ex 5119 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_Calc_B_ex 5120 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_Calc_u_ex 5121 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_Calc_x_ex 5122 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SRP_Calc_client_key_ex 5123 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+EVP_PKEY_gettable_params 5124 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_int_param 5125 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_size_t_param 5126 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_bn_param 5127 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_utf8_string_param 5128 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_octet_string_param 5129 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_is_a 5130 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_can_sign 5131 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_new_ex 5132 3_0_0 EXIST::FUNCTION:
+X509_STORE_CTX_verify 5133 3_0_0 EXIST::FUNCTION:
+CT_POLICY_EVAL_CTX_new_ex 5134 3_0_0 EXIST::FUNCTION:CT
+CTLOG_new_ex 5135 3_0_0 EXIST::FUNCTION:CT
+CTLOG_new_from_base64_ex 5136 3_0_0 EXIST::FUNCTION:CT
+CTLOG_STORE_new_ex 5137 3_0_0 EXIST::FUNCTION:CT
+EVP_PKEY_set_ex_data 5138 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_ex_data 5139 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_group_name 5140 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_group_name 5141 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_ec_paramgen_curve_nid 5142 3_0_0 EXIST::FUNCTION:
+d2i_PrivateKey_ex 5143 3_0_0 EXIST::FUNCTION:
+d2i_AutoPrivateKey_ex 5144 3_0_0 EXIST::FUNCTION:
+d2i_PrivateKey_ex_fp 5145 3_0_0 EXIST::FUNCTION:STDIO
+d2i_PrivateKey_ex_bio 5146 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_PrivateKey_ex 5147 3_0_0 EXIST::FUNCTION:
+PEM_read_PrivateKey_ex 5148 3_0_0 EXIST::FUNCTION:STDIO
+EVP_PKEY_CTX_set_dsa_paramgen_bits 5149 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dsa_paramgen_q_bits 5150 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dsa_paramgen_md_props 5151 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dsa_paramgen_gindex 5152 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dsa_paramgen_type 5153 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dsa_paramgen_seed 5154 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dsa_paramgen_md 5155 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_paramgen_type 5156 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_paramgen_gindex 5157 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_paramgen_seed 5158 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_paramgen_prime_len 5159 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_paramgen_subprime_len 5160 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_paramgen_generator 5161 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_nid 5162 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_rfc5114 5163 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dhx_rfc5114 5164 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get0_host 5165 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get0_email 5166 3_0_0 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get1_ip_asc 5167 3_0_0 EXIST::FUNCTION:
+X509_ALGOR_copy 5168 3_0_0 EXIST::FUNCTION:
+X509_REQ_set0_signature 5169 3_0_0 EXIST::FUNCTION:
+X509_REQ_set1_signature_algo 5170 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_modified 5171 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_all_unmodified 5172 3_0_0 EXIST::FUNCTION:
+EVP_RAND_fetch 5173 3_0_0 EXIST::FUNCTION:
+EVP_RAND_up_ref 5174 3_0_0 EXIST::FUNCTION:
+EVP_RAND_free 5175 3_0_0 EXIST::FUNCTION:
+EVP_RAND_get0_name 5176 3_0_0 EXIST::FUNCTION:
+EVP_RAND_is_a 5177 3_0_0 EXIST::FUNCTION:
+EVP_RAND_get0_provider 5178 3_0_0 EXIST::FUNCTION:
+EVP_RAND_get_params 5179 3_0_0 EXIST::FUNCTION:
+EVP_RAND_CTX_new 5180 3_0_0 EXIST::FUNCTION:
+EVP_RAND_CTX_free 5181 3_0_0 EXIST::FUNCTION:
+EVP_RAND_CTX_get0_rand 5182 3_0_0 EXIST::FUNCTION:
+EVP_RAND_CTX_get_params 5183 3_0_0 EXIST::FUNCTION:
+EVP_RAND_CTX_set_params 5184 3_0_0 EXIST::FUNCTION:
+EVP_RAND_gettable_params 5185 3_0_0 EXIST::FUNCTION:
+EVP_RAND_gettable_ctx_params 5186 3_0_0 EXIST::FUNCTION:
+EVP_RAND_settable_ctx_params 5187 3_0_0 EXIST::FUNCTION:
+EVP_RAND_do_all_provided 5188 3_0_0 EXIST::FUNCTION:
+EVP_RAND_names_do_all 5189 3_0_0 EXIST::FUNCTION:
+EVP_RAND_instantiate 5190 3_0_0 EXIST::FUNCTION:
+EVP_RAND_uninstantiate 5191 3_0_0 EXIST::FUNCTION:
+EVP_RAND_generate 5192 3_0_0 EXIST::FUNCTION:
+EVP_RAND_reseed 5193 3_0_0 EXIST::FUNCTION:
+EVP_RAND_nonce 5194 3_0_0 EXIST::FUNCTION:
+EVP_RAND_enable_locking 5195 3_0_0 EXIST::FUNCTION:
+EVP_RAND_verify_zeroization 5196 3_0_0 EXIST::FUNCTION:
+EVP_RAND_get_strength 5197 3_0_0 EXIST::FUNCTION:
+EVP_RAND_get_state 5198 3_0_0 EXIST::FUNCTION:
+EVP_default_properties_is_fips_enabled 5199 3_0_0 EXIST::FUNCTION:
+EVP_default_properties_enable_fips 5200 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_new_raw_private_key_ex 5201 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_new_raw_public_key_ex 5202 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_BLD_push_time_t 5203 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_construct_time_t 5204 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_time_t 5205 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_set_time_t 5206 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_attach 5207 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_set_attach 5208 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen 5209 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md 5210 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md_name 5211 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_do_all 5212 3_0_0 EXIST::FUNCTION:
+EC_GROUP_get_field_type 5213 3_0_0 EXIST::FUNCTION:EC
+X509_PUBKEY_eq 5214 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_eq 5215 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_parameters_eq 5216 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_query_operation 5217 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_unquery_operation 5218 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_get0_provider_ctx 5219 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_get_capabilities 5220 3_0_0 EXIST::FUNCTION:
+EC_GROUP_new_by_curve_name_ex 5221 3_0_0 EXIST::FUNCTION:EC
+EC_KEY_new_ex 5222 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EC_KEY_new_by_curve_name_ex 5223 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+OSSL_LIB_CTX_set0_default 5224 3_0_0 EXIST::FUNCTION:
+PEM_X509_INFO_read_bio_ex 5225 3_0_0 EXIST::FUNCTION:
+PEM_X509_INFO_read_ex 5226 3_0_0 EXIST::FUNCTION:STDIO
+X509_REQ_verify_ex 5227 3_0_0 EXIST::FUNCTION:
+X509_new_ex 5228 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_ctrl_ex 5229 3_0_0 EXIST::FUNCTION:
+X509_load_cert_file_ex 5230 3_0_0 EXIST::FUNCTION:
+X509_load_cert_crl_file_ex 5231 3_0_0 EXIST::FUNCTION:
+X509_LOOKUP_by_subject_ex 5232 3_0_0 EXIST::FUNCTION:
+X509_STORE_load_file_ex 5233 3_0_0 EXIST::FUNCTION:
+X509_STORE_load_store_ex 5234 3_0_0 EXIST::FUNCTION:
+X509_STORE_load_locations_ex 5235 3_0_0 EXIST::FUNCTION:
+X509_STORE_set_default_paths_ex 5236 3_0_0 EXIST::FUNCTION:
+X509_build_chain 5237 3_0_0 EXIST::FUNCTION:
+X509V3_set_issuer_pkey 5238 3_0_0 EXIST::FUNCTION:
+i2s_ASN1_UTF8STRING 5239 3_0_0 EXIST::FUNCTION:
+s2i_ASN1_UTF8STRING 5240 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_open_ex 5241 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_fetch 5242 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_up_ref 5243 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_free 5244 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_get0_provider 5245 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_get0_properties 5246 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_is_a 5247 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_do_all_provided 5248 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_names_do_all 5249 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_settable_ctx_params 5250 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_new 5251 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_params 5252 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_free 5253 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_passphrase 5254 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_pem_password_cb 5255 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_passphrase_ui 5256 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_from_bio 5257 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_from_fp 5258 3_0_0 EXIST::FUNCTION:STDIO
+OSSL_DECODER_CTX_add_decoder 5259 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_add_extra 5260 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_get_num_decoders 5261 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_input_type 5262 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_export 5263 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_INSTANCE_get_decoder 5264 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_INSTANCE_get_decoder_ctx 5265 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_gettable_params 5266 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_get_params 5267 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_new_for_pkey 5268 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_construct 5269 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_construct_data 5270 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_cleanup 5271 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_get_construct 5272 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_get_construct_data 5273 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_get_cleanup 5274 3_0_0 EXIST::FUNCTION:
+RAND_get0_primary 5275 3_0_0 EXIST::FUNCTION:
+RAND_get0_public 5276 3_0_0 EXIST::FUNCTION:
+RAND_get0_private 5277 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_get0_bag_obj 5278 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_get0_bag_type 5279 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_create_secret 5280 3_0_0 EXIST::FUNCTION:
+PKCS12_add1_attr_by_NID 5281 3_0_0 EXIST::FUNCTION:
+PKCS12_add1_attr_by_txt 5282 3_0_0 EXIST::FUNCTION:
+PKCS12_add_secret 5283 3_0_0 EXIST::FUNCTION:
+SMIME_write_ASN1_ex 5284 3_0_0 EXIST::FUNCTION:
+SMIME_read_ASN1_ex 5285 3_0_0 EXIST::FUNCTION:
+CMS_ContentInfo_new_ex 5286 3_0_0 EXIST::FUNCTION:CMS
+SMIME_read_CMS_ex 5287 3_0_0 EXIST::FUNCTION:CMS
+CMS_sign_ex 5288 3_0_0 EXIST::FUNCTION:CMS
+CMS_data_create_ex 5289 3_0_0 EXIST::FUNCTION:CMS
+CMS_digest_create_ex 5290 3_0_0 EXIST::FUNCTION:CMS
+CMS_EncryptedData_encrypt_ex 5291 3_0_0 EXIST::FUNCTION:CMS
+CMS_encrypt_ex 5292 3_0_0 EXIST::FUNCTION:CMS
+CMS_EnvelopedData_create_ex 5293 3_0_0 EXIST::FUNCTION:CMS
+CMS_ReceiptRequest_create0_ex 5294 3_0_0 EXIST::FUNCTION:CMS
+EVP_SignFinal_ex 5295 3_0_0 EXIST::FUNCTION:
+EVP_VerifyFinal_ex 5296 3_0_0 EXIST::FUNCTION:
+EVP_DigestSignInit_ex 5297 3_0_0 EXIST::FUNCTION:
+EVP_DigestVerifyInit_ex 5298 3_0_0 EXIST::FUNCTION:
+PKCS7_new_ex 5299 3_0_0 EXIST::FUNCTION:
+PKCS7_sign_ex 5300 3_0_0 EXIST::FUNCTION:
+PKCS7_encrypt_ex 5301 3_0_0 EXIST::FUNCTION:
+SMIME_read_PKCS7_ex 5302 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_self_test 5303 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_tls1_prf_md 5304 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set1_tls1_prf_secret 5305 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_add1_tls1_prf_seed 5306 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_hkdf_md 5307 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set1_hkdf_salt 5308 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set1_hkdf_key 5309 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_add1_hkdf_info 5310 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_hkdf_mode 5311 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set1_pbe_pass 5312 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set1_scrypt_salt 5313 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_scrypt_N 5314 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_scrypt_r 5315 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_scrypt_p 5316 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_scrypt_maxmem_bytes 5317 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_kdf_type 5318 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_dh_kdf_type 5319 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set0_dh_kdf_oid 5320 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get0_dh_kdf_oid 5321 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_kdf_md 5322 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_dh_kdf_md 5323 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_dh_kdf_outlen 5324 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get_dh_kdf_outlen 5325 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set0_dh_kdf_ukm 5326 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get0_dh_kdf_ukm 5327 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+EVP_CIPHER_CTX_get_updated_iv 5328 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get_original_iv 5329 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_gettable_params 5330 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_settable_params 5331 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_gen_settable_params 5332 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_gettable_ctx_params 5333 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_settable_ctx_params 5334 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_gettable_ctx_params 5335 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_settable_ctx_params 5336 3_0_0 EXIST::FUNCTION:
+d2i_PUBKEY_ex 5337 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_new_PUBKEY 5338 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get0_PUBKEY 5339 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get1_PUBKEY 5340 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_PUBKEY_ex 5341 3_0_0 EXIST::FUNCTION:
+PEM_read_PUBKEY_ex 5342 3_0_0 EXIST::FUNCTION:STDIO
+PEM_read_bio_Parameters_ex 5343 3_0_0 EXIST::FUNCTION:
+EC_GROUP_new_from_params 5344 3_0_0 EXIST::FUNCTION:EC
+OSSL_STORE_LOADER_set_open_ex 5345 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+OSSL_STORE_LOADER_fetch 5346 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_up_ref 5347 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_get0_provider 5348 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_get0_properties 5349 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_is_a 5350 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_do_all_provided 5351 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_names_do_all 5352 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_utf8_string_ptr 5353 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_get_octet_string_ptr 5354 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_passphrase_cb 5355 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_mac_key 5356 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_new 5357 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_INFO_get0_data 5358 3_0_0 EXIST::FUNCTION:
+asn1_d2i_read_bio 5359 3_0_0 EXIST::FUNCTION:
+EVP_PKCS82PKEY_ex 5360 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set1_id 5361 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get1_id 5362 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get1_id_len 5363 3_0_0 EXIST::FUNCTION:
+CMS_AuthEnvelopedData_create 5364 3_0_0 EXIST::FUNCTION:CMS
+CMS_AuthEnvelopedData_create_ex 5365 3_0_0 EXIST::FUNCTION:CMS
+EVP_PKEY_CTX_set_ec_param_enc 5366 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get0_type_name 5367 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_get0_name 5368 3_0_0 EXIST::FUNCTION:
+EC_KEY_decoded_from_explicit_params 5369 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC
+EVP_KEM_free 5370 3_0_0 EXIST::FUNCTION:
+EVP_KEM_up_ref 5371 3_0_0 EXIST::FUNCTION:
+EVP_KEM_get0_provider 5372 3_0_0 EXIST::FUNCTION:
+EVP_KEM_fetch 5373 3_0_0 EXIST::FUNCTION:
+EVP_KEM_is_a 5374 3_0_0 EXIST::FUNCTION:
+EVP_KEM_do_all_provided 5375 3_0_0 EXIST::FUNCTION:
+EVP_KEM_names_do_all 5376 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_encapsulate_init 5377 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_encapsulate 5378 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_decapsulate_init 5379 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_decapsulate 5380 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_kem_op 5381 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_gettable_params 5382 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_get_params 5383 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_output_type 5384 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_add_encoder 5385 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_add_extra 5386 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_get_num_encoders 5387 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_selection 5388 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_INSTANCE_get_encoder 5389 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_INSTANCE_get_encoder_ctx 5390 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_INSTANCE_get_output_type 5391 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_construct 5392 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_construct_data 5393 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_cleanup 5394 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_passphrase_cb 5395 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_type_names_do_all 5396 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_INSTANCE_get_input_type 5397 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_gettable_ctx_params 5398 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_settable_ctx_params 5399 3_0_0 EXIST::FUNCTION:
+EVP_KEM_gettable_ctx_params 5400 3_0_0 EXIST::FUNCTION:
+EVP_KEM_settable_ctx_params 5401 3_0_0 EXIST::FUNCTION:
+PKCS7_type_is_other 5402 3_0_0 EXIST::FUNCTION:
+PKCS7_get_octet_string 5403 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_from_data 5404 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_to_data 5405 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get0_libctx 5406 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get0_propq 5407 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set1_encoded_public_key 5408 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get1_encoded_public_key 5409 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_selection 5410 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_CTX_set_input_structure 5411 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_INSTANCE_get_input_structure 5412 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_CTX_set_output_structure 5413 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_INSTANCE_get_output_structure 5414 3_0_0 EXIST::FUNCTION:
+PEM_write_PrivateKey_ex 5415 3_0_0 EXIST::FUNCTION:STDIO
+PEM_write_bio_PrivateKey_ex 5416 3_0_0 EXIST::FUNCTION:
+PEM_write_PUBKEY_ex 5417 3_0_0 EXIST::FUNCTION:STDIO
+PEM_write_bio_PUBKEY_ex 5418 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_group_name 5419 3_0_0 EXIST::FUNCTION:
+CRYPTO_atomic_or 5420 3_0_0 EXIST::FUNCTION:
+CRYPTO_atomic_load 5421 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_pss_keygen_md 5422 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_set_rsa_pss_keygen_md_name 5423 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_settable_params 5424 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_params 5425 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_int_param 5426 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_size_t_param 5427 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_bn_param 5428 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_utf8_string_param 5429 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_set_octet_string_param 5430 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_ec_point_conv_form 5431 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_field_type 5432 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get_params 5433 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_fromdata_init 5434 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_fromdata_settable 5435 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_param_check_quick 5436 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_public_check_quick 5437 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_is_a 5438 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_settable_params 5439 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_gettable_params 5440 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_gettable_params 5441 3_0_0 EXIST::FUNCTION:
+EVP_KDF_CTX_settable_params 5442 3_0_0 EXIST::FUNCTION:
+EVP_MAC_CTX_gettable_params 5443 3_0_0 EXIST::FUNCTION:
+EVP_MAC_CTX_settable_params 5444 3_0_0 EXIST::FUNCTION:
+EVP_RAND_CTX_gettable_params 5445 3_0_0 EXIST::FUNCTION:
+EVP_RAND_CTX_settable_params 5446 3_0_0 EXIST::FUNCTION:
+RAND_set_DRBG_type 5447 3_0_0 EXIST::FUNCTION:
+RAND_set_seed_source_type 5448 3_0_0 EXIST::FUNCTION:
+BN_mod_exp_mont_consttime_x2 5449 3_0_0 EXIST::FUNCTION:
+BIO_f_readbuffer 5450 3_0_0 EXIST::FUNCTION:
+OSSL_ESS_check_signing_certs 5451 3_0_0 EXIST::FUNCTION:
+OSSL_ESS_signing_cert_new_init 5452 3_0_0 EXIST::FUNCTION:
+OSSL_ESS_signing_cert_v2_new_init 5453 3_0_0 EXIST::FUNCTION:
+ESS_SIGNING_CERT_it 5454 3_0_0 EXIST::FUNCTION:
+ESS_SIGNING_CERT_V2_it 5455 3_0_0 EXIST::FUNCTION:
+EVP_Q_digest 5456 3_0_0 EXIST::FUNCTION:
+EVP_DigestInit_ex2 5457 3_0_0 EXIST::FUNCTION:
+EVP_EncryptInit_ex2 5458 3_0_0 EXIST::FUNCTION:
+EVP_DecryptInit_ex2 5459 3_0_0 EXIST::FUNCTION:
+EVP_CipherInit_ex2 5460 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_sign_init_ex 5461 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_verify_init_ex 5462 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_verify_recover_init_ex 5463 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_encrypt_init_ex 5464 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_decrypt_init_ex 5465 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_derive_init_ex 5466 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_print_public_fp 5467 3_0_0 EXIST::FUNCTION:STDIO
+EVP_PKEY_print_private_fp 5468 3_0_0 EXIST::FUNCTION:STDIO
+EVP_PKEY_print_params_fp 5469 3_0_0 EXIST::FUNCTION:STDIO
+TS_RESP_CTX_new_ex 5470 3_0_0 EXIST::FUNCTION:TS
+X509_REQ_new_ex 5471 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_dup 5472 3_0_0 EXIST::FUNCTION:
+RSA_PSS_PARAMS_dup 5473 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_derive_set_peer_ex 5474 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_get0_name 5475 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_get0_name 5476 3_0_0 EXIST::FUNCTION:
+OSSL_DECODER_get0_description 5477 3_0_0 EXIST::FUNCTION:
+OSSL_ENCODER_get0_description 5478 3_0_0 EXIST::FUNCTION:
+OSSL_STORE_LOADER_get0_description 5479 3_0_0 EXIST::FUNCTION:
+EVP_MD_get0_description 5480 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_get0_description 5481 3_0_0 EXIST::FUNCTION:
+EVP_MAC_get0_description 5482 3_0_0 EXIST::FUNCTION:
+EVP_RAND_get0_description 5483 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get0_description 5484 3_0_0 EXIST::FUNCTION:
+EVP_KEYMGMT_get0_description 5485 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_get0_description 5486 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_get0_description 5487 3_0_0 EXIST::FUNCTION:
+EVP_KEM_get0_description 5488 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_get0_description 5489 3_0_0 EXIST::FUNCTION:
+EVP_KDF_get0_description 5490 3_0_0 EXIST::FUNCTION:
+OPENSSL_sk_find_all 5491 3_0_0 EXIST::FUNCTION:
+X509_CRL_new_ex 5492 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_dup 5493 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_merge 5494 3_0_0 EXIST::FUNCTION:
+OSSL_PARAM_free 5495 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_todata 5496 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_export 5497 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_get0_md 5498 3_0_0 EXIST::FUNCTION:
+EVP_MD_CTX_get1_md 5499 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get0_cipher 5500 3_0_0 EXIST::FUNCTION:
+EVP_CIPHER_CTX_get1_cipher 5501 3_0_0 EXIST::FUNCTION:
+OSSL_LIB_CTX_get0_global_default 5502 3_0_0 EXIST::FUNCTION:
+EVP_SIGNATURE_get0_name 5503 3_0_0 EXIST::FUNCTION:
+EVP_ASYM_CIPHER_get0_name 5504 3_0_0 EXIST::FUNCTION:
+EVP_KEM_get0_name 5505 3_0_0 EXIST::FUNCTION:
+EVP_KEYEXCH_get0_name 5506 3_0_0 EXIST::FUNCTION:
+PKCS5_v2_PBE_keyivgen_ex 5507 3_0_0 EXIST::FUNCTION:
+EVP_PBE_scrypt_ex 5508 3_0_0 EXIST::FUNCTION:SCRYPT
+PKCS5_v2_scrypt_keyivgen_ex 5509 3_0_0 EXIST::FUNCTION:SCRYPT
+EVP_PBE_CipherInit_ex 5510 3_0_0 EXIST::FUNCTION:
+EVP_PBE_find_ex 5511 3_0_0 EXIST::FUNCTION:
+PKCS12_SAFEBAG_create_pkcs8_encrypt_ex 5512 3_0_0 EXIST::FUNCTION:
+PKCS8_decrypt_ex 5513 3_0_0 EXIST::FUNCTION:
+PKCS12_decrypt_skey_ex 5514 3_0_0 EXIST::FUNCTION:
+PKCS8_encrypt_ex 5515 3_0_0 EXIST::FUNCTION:
+PKCS8_set0_pbe_ex 5516 3_0_0 EXIST::FUNCTION:
+PKCS12_pack_p7encdata_ex 5517 3_0_0 EXIST::FUNCTION:
+PKCS12_pbe_crypt_ex 5518 3_0_0 EXIST::FUNCTION:
+PKCS12_item_decrypt_d2i_ex 5519 3_0_0 EXIST::FUNCTION:
+PKCS12_item_i2d_encrypt_ex 5520 3_0_0 EXIST::FUNCTION:
+PKCS12_init_ex 5521 3_0_0 EXIST::FUNCTION:
+PKCS12_key_gen_asc_ex 5522 3_0_0 EXIST::FUNCTION:
+PKCS12_key_gen_uni_ex 5523 3_0_0 EXIST::FUNCTION:
+PKCS12_key_gen_utf8_ex 5524 3_0_0 EXIST::FUNCTION:
+PKCS12_PBE_keyivgen_ex 5525 3_0_0 EXIST::FUNCTION:
+PKCS12_create_ex 5526 3_0_0 EXIST::FUNCTION:
+PKCS12_add_key_ex 5527 3_0_0 EXIST::FUNCTION:
+PKCS12_add_safe_ex 5528 3_0_0 EXIST::FUNCTION:
+PKCS12_add_safes_ex 5529 3_0_0 EXIST::FUNCTION:
+PKCS5_pbe_set0_algor_ex 5530 3_0_0 EXIST::FUNCTION:
+PKCS5_pbe_set_ex 5531 3_0_0 EXIST::FUNCTION:
+PKCS5_pbe2_set_iv_ex 5532 3_0_0 EXIST::FUNCTION:
+PKCS5_pbkdf2_set_ex 5533 3_0_0 EXIST::FUNCTION:
+BIO_new_from_core_bio 5534 3_0_0 EXIST::FUNCTION:
+BIO_new_ex 5535 3_0_0 EXIST::FUNCTION:
+BIO_s_core 5536 3_0_0 EXIST::FUNCTION:
+BIO_get_line 5537 3_0_0 EXIST::FUNCTION:
+OSSL_LIB_CTX_new_from_dispatch 5538 3_0_0 EXIST::FUNCTION:
+OSSL_LIB_CTX_new_child 5539 3_0_0 EXIST::FUNCTION:
+OSSL_PROVIDER_get0_dispatch 5540 3_0_0 EXIST::FUNCTION:
+PKCS5_PBE_keyivgen_ex 5541 3_0_0 EXIST::FUNCTION:
+EVP_MAC_CTX_get_block_size 5542 3_0_0 EXIST::FUNCTION:
+BIO_debug_callback_ex 5543 3_0_0 EXIST::FUNCTION:
+b2i_PVK_bio_ex 5544 3_0_0 EXIST::FUNCTION:
+i2b_PVK_bio_ex 5545 3_0_0 EXIST::FUNCTION:
+NCONF_get0_libctx 5546 3_0_0 EXIST::FUNCTION:
+NCONF_get_section_names 5547 3_0_0 EXIST::FUNCTION:
+X509_PUBKEY_new_ex 5548 3_0_0 EXIST::FUNCTION:
+ASN1_item_new_ex 5549 3_0_0 EXIST::FUNCTION:
+ASN1_item_d2i_fp_ex 5550 3_0_0 EXIST::FUNCTION:STDIO
+ASN1_item_d2i_bio_ex 5551 3_0_0 EXIST::FUNCTION:
+ASN1_item_d2i_ex 5552 3_0_0 EXIST::FUNCTION:
+ASN1_TIME_print_ex 5553 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_get0_provider 5554 3_0_0 EXIST::FUNCTION:
+EVP_PKEY_CTX_get0_provider 5555 3_0_0 EXIST::FUNCTION:
+OPENSSL_strcasecmp 5556 3_0_3 EXIST::FUNCTION:
+OPENSSL_strncasecmp 5557 3_0_3 EXIST::FUNCTION:
+OSSL_CMP_CTX_reset_geninfo_ITAVs 5558 3_0_8 EXIST::FUNCTION:CMP
+OSSL_CMP_MSG_update_recipNonce 5559 3_0_9 EXIST::FUNCTION:CMP
diff --git a/util/libssl.num b/util/libssl.num
new file mode 100644
index 000000000000..f055c967bf1c
--- /dev/null
+++ b/util/libssl.num
@@ -0,0 +1,522 @@
+SSL_get_selected_srtp_profile 1 3_0_0 EXIST::FUNCTION:SRTP
+SSL_set_read_ahead 2 3_0_0 EXIST::FUNCTION:
+SSL_set_accept_state 3 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_cipher_list 4 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_srp_client_pwd_callback 5 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_copy_session_id 6 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_srp_password 7 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_shutdown 8 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_msg_callback 9 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get0_ticket 11 3_0_0 EXIST::FUNCTION:
+SSL_get1_supported_ciphers 12 3_0_0 EXIST::FUNCTION:
+SSL_state_string_long 13 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get0_certificate 14 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set_ex_data 15 3_0_0 EXIST::FUNCTION:
+SSL_get_verify_depth 16 3_0_0 EXIST::FUNCTION:
+SSL_get0_dane 17 3_0_0 EXIST::FUNCTION:
+SSL_CTX_sess_get_get_cb 18 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_default_passwd_cb_userdata 19 3_0_0 EXIST::FUNCTION:
+SSL_set_tmp_dh_callback 20 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+SSL_CTX_get_verify_depth 21 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_RSAPrivateKey_file 22 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SSL_use_PrivateKey_file 23 3_0_0 EXIST::FUNCTION:
+SSL_set_generate_session_id 24 3_0_0 EXIST::FUNCTION:
+SSL_get_ex_data_X509_STORE_CTX_idx 25 3_0_0 EXIST::FUNCTION:
+SSL_get_quiet_shutdown 26 3_0_0 EXIST::FUNCTION:
+SSL_dane_enable 27 3_0_0 EXIST::FUNCTION:
+SSL_COMP_add_compression_method 28 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_RSAPrivateKey 29 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SSL_CTX_sess_get_new_cb 30 3_0_0 EXIST::FUNCTION:
+d2i_SSL_SESSION 31 3_0_0 EXIST::FUNCTION:
+SSL_use_PrivateKey_ASN1 32 3_0_0 EXIST::FUNCTION:
+PEM_write_SSL_SESSION 33 3_0_0 EXIST::FUNCTION:STDIO
+SSL_CTX_set_session_id_context 34 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_get_cipher_nid 35 3_0_0 EXIST::FUNCTION:
+SSL_get_srp_g 36 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_want 37 3_0_0 EXIST::FUNCTION:
+SSL_get_cipher_list 38 3_0_0 EXIST::FUNCTION:
+SSL_get_verify_result 39 3_0_0 EXIST::FUNCTION:
+SSL_renegotiate 40 3_0_0 EXIST::FUNCTION:
+SSL_get_privatekey 41 3_0_0 EXIST::FUNCTION:
+SSL_peek 42 3_0_0 EXIST::FUNCTION:
+SRP_Calc_A_param 43 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_SESSION_get_ticket_lifetime_hint 44 3_0_0 EXIST::FUNCTION:
+SSL_SRP_CTX_free 45 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_CTX_set_client_CA_list 46 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_next_proto_select_cb 47 3_0_0 EXIST::FUNCTION:NEXTPROTONEG
+BIO_ssl_copy_session_id 48 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_security_callback 49 3_0_0 EXIST::FUNCTION:
+SSL_CONF_cmd_value_type 50 3_0_0 EXIST::FUNCTION:
+SSL_CTX_remove_session 51 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_new 52 3_0_0 EXIST::FUNCTION:
+TLSv1_2_server_method 53 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_2_METHOD
+BIO_new_buffer_ssl_connect 54 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set0_security_ex_data 55 3_0_0 EXIST::FUNCTION:
+SSL_alert_desc_string 56 3_0_0 EXIST::FUNCTION:
+SSL_get0_dane_authority 57 3_0_0 EXIST::FUNCTION:
+SSL_set_purpose 58 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_PrivateKey_file 59 3_0_0 EXIST::FUNCTION:
+SSL_get_rfd 60 3_0_0 EXIST::FUNCTION:
+DTLSv1_listen 61 3_0_0 EXIST::FUNCTION:SOCK
+SSL_set_ssl_method 62 3_0_0 EXIST::FUNCTION:
+SSL_get0_security_ex_data 63 3_0_0 EXIST::FUNCTION:
+SSLv3_client_method 64 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SSL3_METHOD
+SSL_set_security_level 65 3_0_0 EXIST::FUNCTION:
+DTLSv1_2_method 66 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_2_METHOD
+SSL_get_fd 67 3_0_0 EXIST::FUNCTION:
+SSL_get1_session 68 3_0_0 EXIST::FUNCTION:
+SSL_use_RSAPrivateKey 69 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SSL_CTX_set_srp_cb_arg 70 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_CTX_add_session 71 3_0_0 EXIST::FUNCTION:
+SSL_get_srp_N 72 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_has_matching_session_id 73 3_0_0 EXIST::FUNCTION:
+PEM_read_SSL_SESSION 74 3_0_0 EXIST::FUNCTION:STDIO
+SSL_get_shared_ciphers 75 3_0_0 EXIST::FUNCTION:
+SSL_add1_host 76 3_0_0 EXIST::FUNCTION:
+SSL_CONF_cmd_argv 77 3_0_0 EXIST::FUNCTION:
+SSL_version 78 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_print 79 3_0_0 EXIST::FUNCTION:
+SSL_get_client_ciphers 80 3_0_0 EXIST::FUNCTION:
+SSL_get_srtp_profiles 81 3_0_0 EXIST::FUNCTION:SRTP
+SSL_use_certificate_ASN1 82 3_0_0 EXIST::FUNCTION:
+SSL_get_peer_certificate 83 3_0_0 NOEXIST::FUNCTION:
+DTLSv1_2_server_method 84 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_2_METHOD
+SSL_set_cert_cb 85 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_cookie_verify_cb 86 3_0_0 EXIST::FUNCTION:
+SSL_get_shared_sigalgs 87 3_0_0 EXIST::FUNCTION:
+SSL_config 88 3_0_0 EXIST::FUNCTION:
+TLSv1_1_client_method 89 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_1_METHOD
+SSL_CIPHER_standard_name 90 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_verify_mode 91 3_0_0 EXIST::FUNCTION:
+SSL_get_all_async_fds 92 3_0_0 EXIST::FUNCTION:
+SSL_CTX_check_private_key 93 3_0_0 EXIST::FUNCTION:
+SSL_set_wfd 94 3_0_0 EXIST::FUNCTION:SOCK
+SSL_get_client_CA_list 95 3_0_0 EXIST::FUNCTION:
+SSL_CONF_CTX_set_flags 96 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_srp_username_callback 97 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_connect 98 3_0_0 EXIST::FUNCTION:
+SSL_get_psk_identity 99 3_0_0 EXIST::FUNCTION:PSK
+SSL_CTX_use_certificate_file 100 3_0_0 EXIST::FUNCTION:
+SSL_set_session_ticket_ext 101 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_psk_server_callback 102 3_0_0 EXIST::FUNCTION:PSK
+SSL_get_sigalgs 103 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_next_protos_advertised_cb 104 3_0_0 EXIST::FUNCTION:NEXTPROTONEG
+SSL_CTX_set_trust 105 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_verify 106 3_0_0 EXIST::FUNCTION:
+SSL_set_rfd 107 3_0_0 EXIST::FUNCTION:SOCK
+SSL_SESSION_set_timeout 108 3_0_0 EXIST::FUNCTION:
+SSL_set_psk_client_callback 109 3_0_0 EXIST::FUNCTION:PSK
+SSL_get_client_random 110 3_0_0 EXIST::FUNCTION:
+TLS_method 111 3_0_0 EXIST::FUNCTION:
+SSL_CONF_CTX_clear_flags 112 3_0_0 EXIST::FUNCTION:
+TLSv1_client_method 113 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_METHOD
+SSL_CIPHER_get_bits 114 3_0_0 EXIST::FUNCTION:
+SSL_test_functions 115 3_0_0 EXIST::FUNCTION:UNIT_TEST
+SSL_get_SSL_CTX 116 3_0_0 EXIST::FUNCTION:
+SSL_get_session 117 3_0_0 EXIST::FUNCTION:
+SSL_CTX_callback_ctrl 118 3_0_0 EXIST::FUNCTION:
+SSL_get_finished 119 3_0_0 EXIST::FUNCTION:
+SSL_add_dir_cert_subjects_to_stack 120 3_0_0 EXIST::FUNCTION:
+SSL_get_state 121 3_0_0 EXIST::FUNCTION:
+SSL_CONF_CTX_finish 122 3_0_0 EXIST::FUNCTION:
+SSL_CTX_add_server_custom_ext 123 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get_ex_data 124 3_0_0 EXIST::FUNCTION:
+SSL_get_srp_username 125 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_CTX_set_purpose 126 3_0_0 EXIST::FUNCTION:
+SSL_clear 127 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_cert_store 128 3_0_0 EXIST::FUNCTION:
+TLSv1_2_method 129 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_2_METHOD
+SSL_session_reused 130 3_0_0 EXIST::FUNCTION:
+SSL_free 131 3_0_0 EXIST::FUNCTION:
+BIO_ssl_shutdown 132 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_client_CA_list 133 3_0_0 EXIST::FUNCTION:
+SSL_CTX_sessions 134 3_0_0 EXIST::FUNCTION:
+SSL_get_options 135 3_0_0 EXIST::FUNCTION:
+SSL_set_verify_depth 136 3_0_0 EXIST::FUNCTION:
+SSL_get_error 137 3_0_0 EXIST::FUNCTION:
+SSL_get_servername 138 3_0_0 EXIST::FUNCTION:
+SSL_get_version 139 3_0_0 EXIST::FUNCTION:
+SSL_state_string 140 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get_timeout 141 3_0_0 EXIST::FUNCTION:
+SSL_CTX_sess_get_remove_cb 142 3_0_0 EXIST::FUNCTION:
+SSL_get_current_cipher 143 3_0_0 EXIST::FUNCTION:
+SSL_up_ref 144 3_0_0 EXIST::FUNCTION:
+SSL_export_keying_material 145 3_0_0 EXIST::FUNCTION:
+SSL_callback_ctrl 146 3_0_0 EXIST::FUNCTION:
+SSL_set_security_callback 147 3_0_0 EXIST::FUNCTION:
+SSL_SRP_CTX_init 148 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+ERR_load_SSL_strings 149 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SSL_CTX_SRP_CTX_init 150 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_SESSION_set_time 151 3_0_0 EXIST::FUNCTION:
+i2d_SSL_SESSION 152 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get_master_key 153 3_0_0 EXIST::FUNCTION:
+SSL_COMP_get_compression_methods 154 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_alpn_select_cb 155 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_tmp_dh_callback 156 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DH
+SSL_CTX_get_default_passwd_cb 157 3_0_0 EXIST::FUNCTION:
+TLSv1_server_method 158 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_METHOD
+DTLS_server_method 159 3_0_0 EXIST::FUNCTION:
+SSL_set0_rbio 160 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_options 161 3_0_0 EXIST::FUNCTION:
+SSL_set_msg_callback 162 3_0_0 EXIST::FUNCTION:
+SSL_CONF_CTX_free 163 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_ssl_method 164 3_0_0 EXIST::FUNCTION:
+SSL_get_server_random 165 3_0_0 EXIST::FUNCTION:
+SSL_set_shutdown 166 3_0_0 EXIST::FUNCTION:
+SSL_CTX_add_client_CA 167 3_0_0 EXIST::FUNCTION:
+TLSv1_1_server_method 168 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_1_METHOD
+PEM_write_bio_SSL_SESSION 169 3_0_0 EXIST::FUNCTION:
+SSL_write 170 3_0_0 EXIST::FUNCTION:
+SSL_set1_host 171 3_0_0 EXIST::FUNCTION:
+SSL_use_RSAPrivateKey_file 172 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SSL_CTX_get_info_callback 173 3_0_0 EXIST::FUNCTION:
+SSL_get0_peername 174 3_0_0 EXIST::FUNCTION:
+SSL_set_srp_server_param 175 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+TLS_server_method 176 3_0_0 EXIST::FUNCTION:
+SSL_get_psk_identity_hint 177 3_0_0 EXIST::FUNCTION:PSK
+SSL_set_session 178 3_0_0 EXIST::FUNCTION:
+SSL_get0_param 179 3_0_0 EXIST::FUNCTION:
+SSL_set_default_passwd_cb 180 3_0_0 EXIST::FUNCTION:
+SSL_get_read_ahead 181 3_0_0 EXIST::FUNCTION:
+SSL_dup_CA_list 182 3_0_0 EXIST::FUNCTION:
+SSL_get_verify_callback 183 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_default_passwd_cb 184 3_0_0 EXIST::FUNCTION:
+SSL_get_servername_type 185 3_0_0 EXIST::FUNCTION:
+TLSv1_2_client_method 186 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_2_METHOD
+SSL_add_client_CA 187 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get0_security_ex_data 188 3_0_0 EXIST::FUNCTION:
+SSL_get_ex_data 189 3_0_0 EXIST::FUNCTION:
+SSL_CTX_flush_sessions 190 3_0_0 EXIST::FUNCTION:
+SSL_use_PrivateKey 191 3_0_0 EXIST::FUNCTION:
+DTLSv1_client_method 192 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_METHOD
+SSL_CTX_dane_mtype_set 193 3_0_0 EXIST::FUNCTION:
+SSL_get_wfd 194 3_0_0 EXIST::FUNCTION:
+SSL_get_ssl_method 195 3_0_0 EXIST::FUNCTION:
+SSL_set_verify_result 196 3_0_0 EXIST::FUNCTION:
+SSL_use_RSAPrivateKey_ASN1 197 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SSL_CIPHER_get_name 198 3_0_0 EXIST::FUNCTION:
+OPENSSL_init_ssl 199 3_0_0 EXIST::FUNCTION:
+SSL_dup 200 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_serverinfo 201 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_serverinfo_file 202 3_0_0 EXIST::FUNCTION:
+SSL_set_options 203 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_default_verify_dir 204 3_0_0 EXIST::FUNCTION:
+SSL_do_handshake 205 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_ex_data 206 3_0_0 EXIST::FUNCTION:
+SSL_is_init_finished 207 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_default_verify_file 208 3_0_0 EXIST::FUNCTION:
+SSLv3_method 209 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SSL3_METHOD
+SSL_CTX_set_cookie_generate_cb 210 3_0_0 EXIST::FUNCTION:
+SSL_certs_clear 211 3_0_0 EXIST::FUNCTION:
+SSL_set_connect_state 212 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_ex_data 213 3_0_0 EXIST::FUNCTION:
+SSL_rstate_string 214 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get0_peer 215 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get_compress_id 216 3_0_0 EXIST::FUNCTION:
+SSL_get_peer_cert_chain 217 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_cert_cb 218 3_0_0 EXIST::FUNCTION:
+PEM_read_bio_SSL_SESSION 219 3_0_0 EXIST::FUNCTION:
+SSL_set_info_callback 220 3_0_0 EXIST::FUNCTION:
+SSL_CTX_sess_set_new_cb 221 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_security_level 222 3_0_0 EXIST::FUNCTION:
+SSL_CTX_ctrl 223 3_0_0 EXIST::FUNCTION:
+SSL_set_alpn_protos 224 3_0_0 EXIST::FUNCTION:
+SSL_set_ex_data 225 3_0_0 EXIST::FUNCTION:
+SSL_rstate_string_long 226 3_0_0 EXIST::FUNCTION:
+SSL_ctrl 227 3_0_0 EXIST::FUNCTION:
+SSL_get_current_compression 228 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_has_ticket 229 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_cert_verify_callback 230 3_0_0 EXIST::FUNCTION:
+SSL_set_session_secret_cb 231 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_client_cert_engine 232 3_0_0 EXIST::FUNCTION:ENGINE
+SSL_CTX_get0_param 233 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set1_param 234 3_0_0 EXIST::FUNCTION:
+SSL_get_certificate 235 3_0_0 EXIST::FUNCTION:
+DTLSv1_server_method 236 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_METHOD
+SSL_set_fd 237 3_0_0 EXIST::FUNCTION:SOCK
+SSL_use_certificate 238 3_0_0 EXIST::FUNCTION:
+DTLSv1_method 239 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_METHOD
+SSL_set0_wbio 240 3_0_0 EXIST::FUNCTION:
+SSL_read 241 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_options 242 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_ssl_version 243 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SSL_set_SSL_CTX 244 3_0_0 EXIST::FUNCTION:
+SSL_renegotiate_abbreviated 245 3_0_0 EXIST::FUNCTION:
+SSL_get_verify_mode 246 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_get_id 247 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_print_keylog 248 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_psk_client_callback 249 3_0_0 EXIST::FUNCTION:PSK
+SSL_SESSION_get_time 250 3_0_0 EXIST::FUNCTION:
+SSL_set_debug 251 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0
+SSL_get_security_level 252 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_description 253 3_0_0 EXIST::FUNCTION:
+SSL_set_default_passwd_cb_userdata 254 3_0_0 EXIST::FUNCTION:
+SSL_get_srp_userinfo 255 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_extension_supported 256 3_0_0 EXIST::FUNCTION:
+SSL_dane_tlsa_add 257 3_0_0 EXIST::FUNCTION:
+SSL_srp_server_param_with_username 258 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_CIPHER_get_version 259 3_0_0 EXIST::FUNCTION:
+SSL_get0_verified_chain 260 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_find 261 3_0_0 EXIST::FUNCTION:
+SSL_get_rbio 262 3_0_0 EXIST::FUNCTION:
+SSL_CONF_CTX_set_ssl 263 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_verify_depth 264 3_0_0 EXIST::FUNCTION:
+SSL_get_ciphers 265 3_0_0 EXIST::FUNCTION:
+SSL_CTX_config 266 3_0_0 EXIST::FUNCTION:
+SSL_CONF_CTX_set_ssl_ctx 267 3_0_0 EXIST::FUNCTION:
+SSL_CONF_cmd 268 3_0_0 EXIST::FUNCTION:
+SSL_add_ssl_module 269 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_verify_callback 270 3_0_0 EXIST::FUNCTION:
+SSL_set1_param 271 3_0_0 EXIST::FUNCTION:
+SSL_use_certificate_file 272 3_0_0 EXIST::FUNCTION:
+SSL_get_changed_async_fds 273 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_client_cert_cb 274 3_0_0 EXIST::FUNCTION:
+DTLS_client_method 275 3_0_0 EXIST::FUNCTION:
+SSL_set_trust 276 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_security_callback 277 3_0_0 EXIST::FUNCTION:
+SSL_CTX_clear_options 278 3_0_0 EXIST::FUNCTION:
+SSL_check_chain 279 3_0_0 EXIST::FUNCTION:
+SSL_CTX_sess_set_remove_cb 280 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_info_callback 281 3_0_0 EXIST::FUNCTION:
+SSL_pending 282 3_0_0 EXIST::FUNCTION:
+SSL_set_bio 283 3_0_0 EXIST::FUNCTION:
+BIO_new_ssl_connect 284 3_0_0 EXIST::FUNCTION:
+SSL_waiting_for_async 285 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_srp_strength 286 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_CTX_get_quiet_shutdown 287 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_certificate_chain_file 288 3_0_0 EXIST::FUNCTION:
+SSL_CTX_dane_enable 289 3_0_0 EXIST::FUNCTION:
+SSL_CONF_CTX_new 290 3_0_0 EXIST::FUNCTION:
+SSL_get0_alpn_selected 291 3_0_0 EXIST::FUNCTION:
+SSL_get0_next_proto_negotiated 292 3_0_0 EXIST::FUNCTION:NEXTPROTONEG
+SSL_set0_security_ex_data 293 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_tlsext_use_srtp 294 3_0_0 EXIST::FUNCTION:SRTP
+SSL_COMP_set0_compression_methods 295 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_not_resumable_session_callback 296 3_0_0 EXIST::FUNCTION:
+SSL_accept 297 3_0_0 EXIST::FUNCTION:
+SSL_use_psk_identity_hint 298 3_0_0 EXIST::FUNCTION:PSK
+SSL_trace 299 3_0_0 EXIST::FUNCTION:SSL_TRACE
+DTLS_method 300 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_srp_verify_param_callback 301 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_CTX_set_timeout 302 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_security_level 303 3_0_0 EXIST::FUNCTION:
+TLS_client_method 304 3_0_0 EXIST::FUNCTION:
+SSL_set_quiet_shutdown 305 3_0_0 EXIST::FUNCTION:
+SSL_CTX_up_ref 306 3_0_0 EXIST::FUNCTION:
+SSL_check_private_key 307 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_quiet_shutdown 308 3_0_0 EXIST::FUNCTION:
+SSL_select_next_proto 309 3_0_0 EXIST::FUNCTION:
+SSL_load_client_CA_file 310 3_0_0 EXIST::FUNCTION:
+SSL_set_srp_server_param_pw 311 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_renegotiate_pending 312 3_0_0 EXIST::FUNCTION:
+SSL_CTX_new 313 3_0_0 EXIST::FUNCTION:
+SSL_set_session_ticket_ext_cb 314 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_timeout 315 3_0_0 EXIST::FUNCTION:
+SSL_use_certificate_chain_file 316 3_0_0 EXIST::FUNCTION:
+SSL_set_not_resumable_session_callback 317 3_0_0 EXIST::FUNCTION:
+SSL_CTX_SRP_CTX_free 318 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_get_current_expansion 319 3_0_0 EXIST::FUNCTION:
+SSL_clear_options 320 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_PrivateKey 321 3_0_0 EXIST::FUNCTION:
+SSL_get_info_callback 322 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_psk_identity_hint 323 3_0_0 EXIST::FUNCTION:PSK
+SSL_CTX_use_RSAPrivateKey_ASN1 324 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0
+SSL_CTX_use_PrivateKey_ASN1 325 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get0_privatekey 326 3_0_0 EXIST::FUNCTION:
+BIO_f_ssl 327 3_0_0 EXIST::FUNCTION:
+SSLv3_server_method 328 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SSL3_METHOD
+SSL_SESSION_free 329 3_0_0 EXIST::FUNCTION:
+SSL_get_shutdown 330 3_0_0 EXIST::FUNCTION:
+SSL_get_peer_finished 331 3_0_0 EXIST::FUNCTION:
+SSL_set_tlsext_use_srtp 332 3_0_0 EXIST::FUNCTION:SRTP
+TLSv1_method 333 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_METHOD
+SSL_set_psk_server_callback 334 3_0_0 EXIST::FUNCTION:PSK
+SSL_CTX_set_alpn_protos 335 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_default_verify_paths 336 3_0_0 EXIST::FUNCTION:
+SSL_CTX_sess_set_get_cb 337 3_0_0 EXIST::FUNCTION:
+SSL_add_file_cert_subjects_to_stack 338 3_0_0 EXIST::FUNCTION:
+SSL_get_default_passwd_cb_userdata 339 3_0_0 EXIST::FUNCTION:
+SSL_get_security_callback 340 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_srp_username 341 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,SRP
+SSL_COMP_get_name 342 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_default_passwd_cb_userdata 343 3_0_0 EXIST::FUNCTION:
+SSL_set_verify 344 3_0_0 EXIST::FUNCTION:
+SSL_in_before 345 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_get_digest_nid 346 3_0_0 EXIST::FUNCTION:
+SSL_CTX_add_client_custom_ext 347 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_certificate 348 3_0_0 EXIST::FUNCTION:
+SSL_set_cipher_list 349 3_0_0 EXIST::FUNCTION:
+SSL_get_wbio 350 3_0_0 EXIST::FUNCTION:
+SSL_set_hostflags 351 3_0_0 EXIST::FUNCTION:
+SSL_alert_desc_string_long 352 3_0_0 EXIST::FUNCTION:
+SSL_get_default_timeout 353 3_0_0 EXIST::FUNCTION:
+SSL_set_session_id_context 354 3_0_0 EXIST::FUNCTION:
+SSL_new 355 3_0_0 EXIST::FUNCTION:
+TLSv1_1_method 356 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_1_METHOD
+SSL_CTX_get_cert_store 357 3_0_0 EXIST::FUNCTION:
+SSL_CTX_load_verify_locations 358 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_print_fp 359 3_0_0 EXIST::FUNCTION:STDIO
+SSL_get0_dane_tlsa 360 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_generate_session_id 361 3_0_0 EXIST::FUNCTION:
+SSL_alert_type_string_long 362 3_0_0 EXIST::FUNCTION:
+SSL_CONF_CTX_set1_prefix 363 3_0_0 EXIST::FUNCTION:
+SSL_in_init 364 3_0_0 EXIST::FUNCTION:
+BIO_new_ssl 365 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_client_cert_cb 366 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_certificate_ASN1 367 3_0_0 EXIST::FUNCTION:
+SSL_set_client_CA_list 368 3_0_0 EXIST::FUNCTION:
+SSL_CTX_free 369 3_0_0 EXIST::FUNCTION:
+SSL_get_default_passwd_cb 370 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get_id 371 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set1_id_context 372 3_0_0 EXIST::FUNCTION:
+SSL_is_server 373 3_0_0 EXIST::FUNCTION:
+SSL_alert_type_string 374 3_0_0 EXIST::FUNCTION:
+DTLSv1_2_client_method 375 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_2_METHOD
+SSL_CTX_set_ctlog_list_file 376 3_0_0 EXIST::FUNCTION:CT
+SSL_set_ct_validation_callback 377 3_0_0 EXIST::FUNCTION:CT
+SSL_CTX_set_default_ctlog_list_file 378 3_0_0 EXIST::FUNCTION:CT
+SSL_CTX_has_client_custom_ext 379 3_0_0 EXIST::FUNCTION:
+SSL_ct_is_enabled 380 3_0_0 EXIST::FUNCTION:CT
+SSL_get0_peer_scts 381 3_0_0 EXIST::FUNCTION:CT
+SSL_CTX_set_ct_validation_callback 382 3_0_0 EXIST::FUNCTION:CT
+SSL_CTX_ct_is_enabled 383 3_0_0 EXIST::FUNCTION:CT
+SSL_set_default_read_buffer_len 384 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_default_read_buffer_len 385 3_0_0 EXIST::FUNCTION:
+SSL_has_pending 386 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_get_auth_nid 387 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_get_kx_nid 388 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_is_aead 389 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_up_ref 390 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set0_ctlog_store 391 3_0_0 EXIST::FUNCTION:CT
+SSL_CTX_get0_ctlog_store 392 3_0_0 EXIST::FUNCTION:CT
+SSL_enable_ct 393 3_0_0 EXIST::FUNCTION:CT
+SSL_CTX_enable_ct 394 3_0_0 EXIST::FUNCTION:CT
+SSL_CTX_get_ciphers 395 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get0_hostname 396 3_0_0 EXIST::FUNCTION:
+SSL_client_version 397 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get_protocol_version 398 3_0_0 EXIST::FUNCTION:
+SSL_is_dtls 399 3_0_0 EXIST::FUNCTION:
+SSL_CTX_dane_set_flags 400 3_0_0 EXIST::FUNCTION:
+SSL_dane_set_flags 401 3_0_0 EXIST::FUNCTION:
+SSL_CTX_dane_clear_flags 402 3_0_0 EXIST::FUNCTION:
+SSL_dane_clear_flags 403 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get0_cipher 404 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get0_id_context 405 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set1_id 406 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set1_cert_store 407 3_0_0 EXIST::FUNCTION:
+DTLS_get_data_mtu 408 3_0_0 EXIST::FUNCTION:
+SSL_read_ex 409 3_0_0 EXIST::FUNCTION:
+SSL_peek_ex 410 3_0_0 EXIST::FUNCTION:
+SSL_write_ex 411 3_0_0 EXIST::FUNCTION:
+SSL_COMP_get_id 412 3_0_0 EXIST::FUNCTION:
+SSL_COMP_get0_name 413 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_keylog_callback 414 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_keylog_callback 415 3_0_0 EXIST::FUNCTION:
+SSL_get_peer_signature_type_nid 416 3_0_0 EXIST::FUNCTION:
+SSL_key_update 417 3_0_0 EXIST::FUNCTION:
+SSL_get_key_update_type 418 3_0_0 EXIST::FUNCTION:
+SSL_bytes_to_cipher_list 419 3_0_0 EXIST::FUNCTION:
+SSL_client_hello_get0_compression_methods 420 3_0_0 EXIST::FUNCTION:
+SSL_client_hello_get0_ciphers 421 3_0_0 EXIST::FUNCTION:
+SSL_client_hello_get0_ext 422 3_0_0 EXIST::FUNCTION:
+SSL_client_hello_get0_session_id 423 3_0_0 EXIST::FUNCTION:
+SSL_client_hello_get0_random 424 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_client_hello_cb 425 3_0_0 EXIST::FUNCTION:
+SSL_client_hello_get0_legacy_version 426 3_0_0 EXIST::FUNCTION:
+SSL_client_hello_isv2 427 3_0_0 EXIST::FUNCTION:
+SSL_set_max_early_data 428 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_max_early_data 429 3_0_0 EXIST::FUNCTION:
+SSL_get_max_early_data 430 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_max_early_data 431 3_0_0 EXIST::FUNCTION:
+SSL_write_early_data 432 3_0_0 EXIST::FUNCTION:
+SSL_read_early_data 433 3_0_0 EXIST::FUNCTION:
+SSL_get_early_data_status 434 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get_max_early_data 435 3_0_0 EXIST::FUNCTION:
+SSL_add1_to_CA_list 436 3_0_0 EXIST::FUNCTION:
+SSL_set0_CA_list 437 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set0_CA_list 438 3_0_0 EXIST::FUNCTION:
+SSL_get0_CA_list 439 3_0_0 EXIST::FUNCTION:
+SSL_get0_peer_CA_list 440 3_0_0 EXIST::FUNCTION:
+SSL_CTX_add1_to_CA_list 441 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get0_CA_list 442 3_0_0 EXIST::FUNCTION:
+SSL_CTX_add_custom_ext 443 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_is_resumable 444 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_record_padding_callback 445 3_0_0 EXIST::FUNCTION:
+SSL_set_record_padding_callback 446 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_block_padding 447 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_record_padding_callback_arg 448 3_0_0 EXIST::FUNCTION:
+SSL_get_record_padding_callback_arg 449 3_0_0 EXIST::FUNCTION:
+SSL_set_block_padding 450 3_0_0 EXIST::FUNCTION:
+SSL_set_record_padding_callback_arg 451 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_record_padding_callback_arg 452 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_serverinfo_ex 453 3_0_0 EXIST::FUNCTION:
+SSL_client_hello_get1_extensions_present 454 3_0_0 EXIST::FUNCTION:
+SSL_set_psk_find_session_callback 455 3_0_0 EXIST::FUNCTION:
+SSL_set_psk_use_session_callback 456 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_psk_use_session_callback 457 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_psk_find_session_callback 458 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_get_handshake_digest 459 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set1_master_key 460 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set_cipher 461 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set_protocol_version 462 3_0_0 EXIST::FUNCTION:
+OPENSSL_cipher_name 463 3_0_0 EXIST::FUNCTION:
+SSL_alloc_buffers 464 3_0_0 EXIST::FUNCTION:
+SSL_free_buffers 465 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_dup 466 3_0_0 EXIST::FUNCTION:
+SSL_get_pending_cipher 467 3_0_0 EXIST::FUNCTION:
+SSL_CIPHER_get_protocol_id 468 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set_max_early_data 469 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set1_alpn_selected 470 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set1_hostname 471 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get0_alpn_selected 472 3_0_0 EXIST::FUNCTION:
+DTLS_set_timer_cb 473 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_tlsext_max_fragment_length 474 3_0_0 EXIST::FUNCTION:
+SSL_set_tlsext_max_fragment_length 475 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get_max_fragment_length 476 3_0_0 EXIST::FUNCTION:
+SSL_stateless 477 3_0_0 EXIST::FUNCTION:
+SSL_verify_client_post_handshake 478 3_0_0 EXIST::FUNCTION:
+SSL_set_post_handshake_auth 479 3_0_0 EXIST::FUNCTION:
+SSL_export_keying_material_early 480 3_0_0 EXIST::FUNCTION:
+SSL_CTX_use_cert_and_key 481 3_0_0 EXIST::FUNCTION:
+SSL_use_cert_and_key 482 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_get0_ticket_appdata 483 3_0_0 EXIST::FUNCTION:
+SSL_SESSION_set1_ticket_appdata 484 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_session_ticket_cb 485 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_stateless_cookie_generate_cb 486 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_stateless_cookie_verify_cb 487 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_ciphersuites 488 3_0_0 EXIST::FUNCTION:
+SSL_set_ciphersuites 489 3_0_0 EXIST::FUNCTION:
+SSL_set_num_tickets 490 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_num_tickets 491 3_0_0 EXIST::FUNCTION:
+SSL_get_num_tickets 492 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_num_tickets 493 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_allow_early_data_cb 494 3_0_0 EXIST::FUNCTION:
+SSL_set_allow_early_data_cb 495 3_0_0 EXIST::FUNCTION:
+SSL_set_recv_max_early_data 496 3_0_0 EXIST::FUNCTION:
+SSL_get_recv_max_early_data 497 3_0_0 EXIST::FUNCTION:
+SSL_CTX_get_recv_max_early_data 498 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_recv_max_early_data 499 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_post_handshake_auth 500 3_0_0 EXIST::FUNCTION:
+SSL_get_signature_type_nid 501 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_async_callback 502 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_async_callback_arg 503 3_0_0 EXIST::FUNCTION:
+SSL_set_async_callback 504 3_0_0 EXIST::FUNCTION:
+SSL_set_async_callback_arg 505 3_0_0 EXIST::FUNCTION:
+SSL_get_async_status 506 3_0_0 EXIST::FUNCTION:
+SSL_sendfile 507 3_0_0 EXIST::FUNCTION:
+OSSL_default_cipher_list 508 3_0_0 EXIST::FUNCTION:
+OSSL_default_ciphersuites 509 3_0_0 EXIST::FUNCTION:
+SSL_add_store_cert_subjects_to_stack 510 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_default_verify_store 511 3_0_0 EXIST::FUNCTION:
+SSL_CTX_load_verify_file 512 3_0_0 EXIST::FUNCTION:
+SSL_CTX_load_verify_dir 513 3_0_0 EXIST::FUNCTION:
+SSL_CTX_load_verify_store 514 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set_tlsext_ticket_key_evp_cb 515 3_0_0 EXIST::FUNCTION:
+SSL_CTX_new_ex 516 3_0_0 EXIST::FUNCTION:
+SSL_new_session_ticket 517 3_0_0 EXIST::FUNCTION:
+SSL_get0_peer_certificate 518 3_0_0 EXIST::FUNCTION:
+SSL_get1_peer_certificate 519 3_0_0 EXIST::FUNCTION:
+SSL_load_client_CA_file_ex 520 3_0_0 EXIST::FUNCTION:
+SSL_set0_tmp_dh_pkey 521 3_0_0 EXIST::FUNCTION:
+SSL_CTX_set0_tmp_dh_pkey 522 3_0_0 EXIST::FUNCTION:
+SSL_group_to_name 523 3_0_0 EXIST::FUNCTION:
diff --git a/util/local_shlib.com.in b/util/local_shlib.com.in
new file mode 100644
index 000000000000..fbb648d77033
--- /dev/null
+++ b/util/local_shlib.com.in
@@ -0,0 +1,31 @@
+${-
+ use File::Spec::Functions qw(rel2abs);
+
+ my $bldtop = rel2abs($config{builddir});
+ our %names = ( map { platform->sharedname($_) =>
+ $bldtop.platform->sharedlib($_) }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}} );
+ "" -}
+$ ! Create a local environment with the shared library logical names
+$ ! properly set. Undo this with unlocal_shlib.com
+$
+$ OPENSSL_NAMES := OPENSSL_NAMES_'F$GETJPI("","PID")'
+$ CREATE/NAME_TABLE/PARENT_TABLE=LNM$PROCESS_DIRECTORY 'OPENSSL_NAMES'
+$ DEFINE/TABLE='OPENSSL_NAMES' OSSL_FLAG YES
+$
+$ NAMES := {- join(",", keys %names); -}
+{-
+ join("\n", map { "\$ __$_ = \"".$names{$_}."\"" } sort keys %names);
+-}
+$ I = 0
+$ LOOP:
+$ E = F$ELEMENT(I,",",NAMES)
+$ I = I + 1
+$ IF E .EQS. "," THEN GOTO ENDLOOP
+$ EV = __'E'
+$ OLDV = F$TRNLNM(E,"LNM$PROCESS")
+$ IF OLDV .NES. "" THEN DEFINE/TABLE='OPENSSL_NAMES' 'E' 'OLDV'
+$ DEFINE 'E' 'EV'
+$ GOTO LOOP
+$ ENDLOOP:
diff --git a/util/markdownlint.rb b/util/markdownlint.rb
new file mode 100644
index 000000000000..51814c29f94e
--- /dev/null
+++ b/util/markdownlint.rb
@@ -0,0 +1,24 @@
+# markdownlint style rules for OpenSSL
+# See https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
+
+all
+
+# Use --- and === for H1 and H2.
+rule 'MD003', :style => :setext_with_atx
+# Code blocks may be fenced or indented, both are OK...
+# but they must be consistent throughout each file.
+rule 'MD046', :style => :consistent
+
+# Bug in mdl, https://github.com/markdownlint/markdownlint/issues/313
+exclude_rule 'MD007'
+
+exclude_rule 'MD004' # Unordered list style TODO(fix?)
+exclude_rule 'MD005' # Inconsistent indentation for list items at the same level
+exclude_rule 'MD006' # Consider starting bulleted lists at the beginning of the line
+exclude_rule 'MD014' # Dollar signs used before commands without showing output
+exclude_rule 'MD023' # Headers must start at the beginning of the line
+exclude_rule 'MD024' # Multiple headers with the same content
+exclude_rule 'MD025' # Multiple top level headers in the same document
+exclude_rule 'MD026' # Trailing punctuation in header
+exclude_rule 'MD029' # Ordered list item prefix
+exclude_rule 'MD030' # Spaces after list markers (default: 1!)
diff --git a/util/merge-err-lines b/util/merge-err-lines
new file mode 100755
index 000000000000..33644fa12ec7
--- /dev/null
+++ b/util/merge-err-lines
@@ -0,0 +1,29 @@
+#! /usr/bin/env perl
+# Copyright 2019 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
+
+# Sometimes calls to XXXerr() are split into two lines, because the define'd
+# names are very long. This script looks for those lines and merges them.
+# It should be run before the "err-to-raise" script.
+
+# Run this program like this:
+# perl -pi util/merge-err-lines files...
+# or
+# git grep -l '[A-Z0-9]err([^)]*$' | xargs perl -pi util/merge-err-lines
+
+use strict;
+use warnings;
+
+# Look for "{whitespace}XXXerr(no-close-paren{WHITESPACE}" lines
+if ( /^ *[_A-Z0-9]+err\([^)]+ *$/ ) {
+ my $copy = $_;
+ chop($copy);
+ $copy =~ s/ +$//;
+ my $next = <>;
+ $next =~ s/^ +//;
+ $_ = $copy . ' ' . $next;
+}
diff --git a/util/missingcrypto-internal.txt b/util/missingcrypto-internal.txt
new file mode 100644
index 000000000000..54e1bc9ba7dd
--- /dev/null
+++ b/util/missingcrypto-internal.txt
@@ -0,0 +1,8 @@
+WPACKET(3)
+WPACKET_init_der(3)
+WPACKET_init_null_der(3)
+asn1_d2i_read_bio(3)
+ossl_do_PVK_header(3)
+ossl_do_blob_header(3)
+ossl_b2i(3)
+ossl_b2i_bio(3)
diff --git a/util/missingcrypto.txt b/util/missingcrypto.txt
new file mode 100644
index 000000000000..b59bcd0dcc63
--- /dev/null
+++ b/util/missingcrypto.txt
@@ -0,0 +1,1319 @@
+ACCESS_DESCRIPTION_it(3)
+ADMISSIONS_it(3)
+ADMISSION_SYNTAX_it(3)
+AES_bi_ige_encrypt(3)
+AES_cbc_encrypt(3)
+AES_cfb128_encrypt(3)
+AES_cfb1_encrypt(3)
+AES_cfb8_encrypt(3)
+AES_decrypt(3)
+AES_ecb_encrypt(3)
+AES_encrypt(3)
+AES_ige_encrypt(3)
+AES_ofb128_encrypt(3)
+AES_options(3)
+AES_set_decrypt_key(3)
+AES_set_encrypt_key(3)
+AES_unwrap_key(3)
+AES_wrap_key(3)
+ASIdOrRange_it(3)
+ASIdentifierChoice_it(3)
+ASIdentifiers_it(3)
+ASN1_ANY_it(3)
+ASN1_BIT_STRING_check(3)
+ASN1_BIT_STRING_free(3)
+ASN1_BIT_STRING_get_bit(3)
+ASN1_BIT_STRING_it(3)
+ASN1_BIT_STRING_name_print(3)
+ASN1_BIT_STRING_new(3)
+ASN1_BIT_STRING_num_asc(3)
+ASN1_BIT_STRING_set(3)
+ASN1_BIT_STRING_set_asc(3)
+ASN1_BIT_STRING_set_bit(3)
+ASN1_BMPSTRING_free(3)
+ASN1_BMPSTRING_it(3)
+ASN1_BMPSTRING_new(3)
+ASN1_BOOLEAN_it(3)
+ASN1_ENUMERATED_free(3)
+ASN1_ENUMERATED_it(3)
+ASN1_ENUMERATED_new(3)
+ASN1_FBOOLEAN_it(3)
+ASN1_GENERALIZEDTIME_free(3)
+ASN1_GENERALIZEDTIME_it(3)
+ASN1_GENERALIZEDTIME_new(3)
+ASN1_GENERALSTRING_free(3)
+ASN1_GENERALSTRING_it(3)
+ASN1_GENERALSTRING_new(3)
+ASN1_IA5STRING_free(3)
+ASN1_IA5STRING_it(3)
+ASN1_IA5STRING_new(3)
+ASN1_INTEGER_cmp(3)
+ASN1_INTEGER_dup(3)
+ASN1_INTEGER_it(3)
+ASN1_NULL_free(3)
+ASN1_NULL_it(3)
+ASN1_NULL_new(3)
+ASN1_OBJECT_create(3)
+ASN1_OBJECT_it(3)
+ASN1_OCTET_STRING_NDEF_it(3)
+ASN1_OCTET_STRING_cmp(3)
+ASN1_OCTET_STRING_dup(3)
+ASN1_OCTET_STRING_free(3)
+ASN1_OCTET_STRING_it(3)
+ASN1_OCTET_STRING_new(3)
+ASN1_OCTET_STRING_set(3)
+ASN1_PCTX_free(3)
+ASN1_PCTX_get_cert_flags(3)
+ASN1_PCTX_get_flags(3)
+ASN1_PCTX_get_nm_flags(3)
+ASN1_PCTX_get_oid_flags(3)
+ASN1_PCTX_get_str_flags(3)
+ASN1_PCTX_new(3)
+ASN1_PCTX_set_cert_flags(3)
+ASN1_PCTX_set_flags(3)
+ASN1_PCTX_set_nm_flags(3)
+ASN1_PCTX_set_oid_flags(3)
+ASN1_PCTX_set_str_flags(3)
+ASN1_PRINTABLESTRING_free(3)
+ASN1_PRINTABLESTRING_it(3)
+ASN1_PRINTABLESTRING_new(3)
+ASN1_PRINTABLE_free(3)
+ASN1_PRINTABLE_it(3)
+ASN1_PRINTABLE_new(3)
+ASN1_PRINTABLE_type(3)
+ASN1_SCTX_free(3)
+ASN1_SCTX_get_app_data(3)
+ASN1_SCTX_get_flags(3)
+ASN1_SCTX_get_item(3)
+ASN1_SCTX_get_template(3)
+ASN1_SCTX_new(3)
+ASN1_SCTX_set_app_data(3)
+ASN1_SEQUENCE_ANY_it(3)
+ASN1_SEQUENCE_it(3)
+ASN1_SET_ANY_it(3)
+ASN1_STRING_clear_free(3)
+ASN1_STRING_copy(3)
+ASN1_STRING_get_default_mask(3)
+ASN1_STRING_length_set(3)
+ASN1_STRING_set0(3)
+ASN1_STRING_set_by_NID(3)
+ASN1_STRING_set_default_mask(3)
+ASN1_STRING_set_default_mask_asc(3)
+ASN1_T61STRING_free(3)
+ASN1_T61STRING_it(3)
+ASN1_T61STRING_new(3)
+ASN1_TBOOLEAN_it(3)
+ASN1_TIME_free(3)
+ASN1_TIME_it(3)
+ASN1_TIME_new(3)
+ASN1_TYPE_free(3)
+ASN1_TYPE_get_int_octetstring(3)
+ASN1_TYPE_get_octetstring(3)
+ASN1_TYPE_new(3)
+ASN1_TYPE_set_int_octetstring(3)
+ASN1_TYPE_set_octetstring(3)
+ASN1_UNIVERSALSTRING_free(3)
+ASN1_UNIVERSALSTRING_it(3)
+ASN1_UNIVERSALSTRING_new(3)
+ASN1_UNIVERSALSTRING_to_string(3)
+ASN1_UTCTIME_free(3)
+ASN1_UTCTIME_it(3)
+ASN1_UTCTIME_new(3)
+ASN1_UTF8STRING_free(3)
+ASN1_UTF8STRING_it(3)
+ASN1_UTF8STRING_new(3)
+ASN1_VISIBLESTRING_free(3)
+ASN1_VISIBLESTRING_it(3)
+ASN1_VISIBLESTRING_new(3)
+ASN1_add_stable_module(3)
+ASN1_bn_print(3)
+ASN1_buf_print(3)
+ASN1_check_infinite_end(3)
+ASN1_const_check_infinite_end(3)
+ASN1_d2i_bio(3)
+ASN1_d2i_fp(3)
+ASN1_digest(3)
+ASN1_dup(3)
+ASN1_get_object(3)
+ASN1_i2d_bio(3)
+ASN1_i2d_fp(3)
+ASN1_item_digest(3)
+ASN1_item_dup(3)
+ASN1_item_ex_d2i(3)
+ASN1_item_ex_free(3)
+ASN1_item_ex_i2d(3)
+ASN1_item_ex_new(3)
+ASN1_item_free(3)
+ASN1_item_i2d(3)
+ASN1_item_i2d_bio(3)
+ASN1_item_i2d_fp(3)
+ASN1_item_ndef_i2d(3)
+ASN1_item_pack(3)
+ASN1_item_print(3)
+ASN1_item_unpack(3)
+ASN1_mbstring_copy(3)
+ASN1_mbstring_ncopy(3)
+ASN1_object_size(3)
+ASN1_parse(3)
+ASN1_parse_dump(3)
+ASN1_put_eoc(3)
+ASN1_put_object(3)
+ASN1_sign(3)
+ASN1_str2mask(3)
+ASN1_tag2bit(3)
+ASN1_verify(3)
+ASRange_it(3)
+AUTHORITY_INFO_ACCESS_it(3)
+AUTHORITY_KEYID_it(3)
+BASIC_CONSTRAINTS_it(3)
+BIGNUM_it(3)
+BIO_accept(3)
+BIO_asn1_get_prefix(3)
+BIO_asn1_get_suffix(3)
+BIO_asn1_set_prefix(3)
+BIO_asn1_set_suffix(3)
+BIO_clear_flags(3)
+BIO_copy_next_retry(3)
+BIO_dgram_is_sctp(3)
+BIO_dgram_non_fatal_error(3)
+BIO_dgram_sctp_msg_waiting(3)
+BIO_dgram_sctp_notification_cb(3)
+BIO_dgram_sctp_wait_for_dry(3)
+BIO_dump(3)
+BIO_dump_cb(3)
+BIO_dump_fp(3)
+BIO_dump_indent(3)
+BIO_dump_indent_cb(3)
+BIO_dump_indent_fp(3)
+BIO_dup_chain(3)
+BIO_f_asn1(3)
+BIO_f_linebuffer(3)
+BIO_f_nbio_test(3)
+BIO_f_reliable(3)
+BIO_f_zlib(3)
+BIO_fd_non_fatal_error(3)
+BIO_fd_should_retry(3)
+BIO_get_accept_socket(3)
+BIO_get_host_ip(3)
+BIO_get_port(3)
+BIO_gethostbyname(3)
+BIO_hex_string(3)
+BIO_indent(3)
+BIO_method_name(3)
+BIO_new_NDEF(3)
+BIO_new_PKCS7(3)
+BIO_new_dgram_sctp(3)
+BIO_nread(3)
+BIO_nread0(3)
+BIO_number_read(3)
+BIO_number_written(3)
+BIO_nwrite(3)
+BIO_nwrite0(3)
+BIO_s_datagram_sctp(3)
+BIO_s_log(3)
+BIO_set_flags(3)
+BIO_set_tcp_ndelay(3)
+BIO_sock_error(3)
+BIO_sock_info(3)
+BIO_sock_init(3)
+BIO_sock_non_fatal_error(3)
+BIO_sock_should_retry(3)
+BIO_socket_ioctl(3)
+BIO_socket_nbio(3)
+BIO_test_flags(3)
+BN_GF2m_add(3)
+BN_GF2m_arr2poly(3)
+BN_GF2m_mod(3)
+BN_GF2m_mod_arr(3)
+BN_GF2m_mod_div(3)
+BN_GF2m_mod_div_arr(3)
+BN_GF2m_mod_exp(3)
+BN_GF2m_mod_exp_arr(3)
+BN_GF2m_mod_inv(3)
+BN_GF2m_mod_inv_arr(3)
+BN_GF2m_mod_mul(3)
+BN_GF2m_mod_mul_arr(3)
+BN_GF2m_mod_solve_quad(3)
+BN_GF2m_mod_solve_quad_arr(3)
+BN_GF2m_mod_sqr(3)
+BN_GF2m_mod_sqr_arr(3)
+BN_GF2m_mod_sqrt(3)
+BN_GF2m_mod_sqrt_arr(3)
+BN_GF2m_poly2arr(3)
+BN_MONT_CTX_set_locked(3)
+BN_X931_derive_prime_ex(3)
+BN_X931_generate_Xpq(3)
+BN_X931_generate_prime_ex(3)
+BN_abs_is_word(3)
+BN_asc2bn(3)
+BN_bntest_rand(3)
+BN_consttime_swap(3)
+BN_generate_dsa_nonce(3)
+BN_get_flags(3)
+BN_get_params(3)
+BN_is_negative(3)
+BN_kronecker(3)
+BN_mod_add_quick(3)
+BN_mod_exp2_mont(3)
+BN_mod_exp_mont_word(3)
+BN_mod_exp_recp(3)
+BN_mod_exp_simple(3)
+BN_mod_lshift(3)
+BN_mod_lshift1(3)
+BN_mod_lshift1_quick(3)
+BN_mod_lshift_quick(3)
+BN_mod_sub_quick(3)
+BN_nist_mod_192(3)
+BN_nist_mod_224(3)
+BN_nist_mod_256(3)
+BN_nist_mod_384(3)
+BN_nist_mod_521(3)
+BN_nist_mod_func(3)
+BN_options(3)
+BN_reciprocal(3)
+BN_set_flags(3)
+BN_set_negative(3)
+BN_set_params(3)
+BN_uadd(3)
+BN_usub(3)
+BN_zero_ex(3)
+CAST_cbc_encrypt(3)
+CAST_cfb64_encrypt(3)
+CAST_decrypt(3)
+CAST_ecb_encrypt(3)
+CAST_encrypt(3)
+CAST_ofb64_encrypt(3)
+CAST_set_key(3)
+CBIGNUM_it(3)
+CERTIFICATEPOLICIES_it(3)
+CMAC_CTX_cleanup(3)
+CMAC_CTX_copy(3)
+CMAC_CTX_free(3)
+CMAC_CTX_get0_cipher_ctx(3)
+CMAC_CTX_new(3)
+CMAC_Final(3)
+CMAC_Init(3)
+CMAC_Update(3)
+CMAC_resume(3)
+CMS_ContentInfo_it(3)
+CMS_EncryptedData_set1_key(3)
+CMS_ReceiptRequest_it(3)
+CMS_RecipientEncryptedKey_cert_cmp(3)
+CMS_RecipientEncryptedKey_get0_id(3)
+CMS_RecipientInfo_get0_pkey_ctx(3)
+CMS_RecipientInfo_kari_decrypt(3)
+CMS_RecipientInfo_kari_get0_alg(3)
+CMS_RecipientInfo_kari_get0_ctx(3)
+CMS_RecipientInfo_kari_get0_orig_id(3)
+CMS_RecipientInfo_kari_get0_reks(3)
+CMS_RecipientInfo_kari_orig_id_cmp(3)
+CMS_RecipientInfo_ktri_get0_algs(3)
+CMS_RecipientInfo_set0_password(3)
+CMS_SharedInfo_encode(3)
+CMS_SignedData_init(3)
+CMS_SignerInfo_get0_algs(3)
+CMS_SignerInfo_get0_md_ctx(3)
+CMS_SignerInfo_get0_pkey_ctx(3)
+CMS_SignerInfo_verify(3)
+CMS_SignerInfo_verify_content(3)
+CMS_add0_CertificateChoices(3)
+CMS_add0_RevocationInfoChoice(3)
+CMS_add0_recipient_password(3)
+CMS_add_simple_smimecap(3)
+CMS_add_smimecap(3)
+CMS_add_standard_smimecap(3)
+CMS_data(3)
+CMS_dataFinal(3)
+CMS_dataInit(3)
+CMS_decrypt_set1_key(3)
+CMS_decrypt_set1_password(3)
+CMS_digest_verify(3)
+CMS_is_detached(3)
+CMS_set1_signers_certs(3)
+CMS_set_detached(3)
+CMS_stream(3)
+COMP_CTX_free(3)
+COMP_CTX_get_method(3)
+COMP_CTX_get_type(3)
+COMP_CTX_new(3)
+COMP_compress_block(3)
+COMP_expand_block(3)
+COMP_get_name(3)
+COMP_get_type(3)
+COMP_zlib(3)
+CONF_dump_bio(3)
+CONF_dump_fp(3)
+CONF_free(3)
+CONF_get_number(3)
+CONF_get_section(3)
+CONF_get_string(3)
+CONF_imodule_get_flags(3)
+CONF_imodule_get_module(3)
+CONF_imodule_get_name(3)
+CONF_imodule_get_usr_data(3)
+CONF_imodule_get_value(3)
+CONF_imodule_set_flags(3)
+CONF_imodule_set_usr_data(3)
+CONF_load(3)
+CONF_load_bio(3)
+CONF_load_fp(3)
+CONF_module_add(3)
+CONF_module_get_usr_data(3)
+CONF_module_set_usr_data(3)
+CONF_parse_list(3)
+CONF_set_default_method(3)
+CONF_set_nconf(3)
+CRL_DIST_POINTS_it(3)
+CRYPTO_128_unwrap(3)
+CRYPTO_128_unwrap_pad(3)
+CRYPTO_128_wrap(3)
+CRYPTO_128_wrap_pad(3)
+CRYPTO_THREAD_cleanup_local(3)
+CRYPTO_THREAD_compare_id(3)
+CRYPTO_THREAD_get_current_id(3)
+CRYPTO_THREAD_get_local(3)
+CRYPTO_THREAD_init_local(3)
+CRYPTO_THREAD_set_local(3)
+CRYPTO_cbc128_decrypt(3)
+CRYPTO_cbc128_encrypt(3)
+CRYPTO_ccm128_aad(3)
+CRYPTO_ccm128_decrypt(3)
+CRYPTO_ccm128_decrypt_ccm64(3)
+CRYPTO_ccm128_encrypt(3)
+CRYPTO_ccm128_encrypt_ccm64(3)
+CRYPTO_ccm128_init(3)
+CRYPTO_ccm128_setiv(3)
+CRYPTO_ccm128_tag(3)
+CRYPTO_cfb128_1_encrypt(3)
+CRYPTO_cfb128_8_encrypt(3)
+CRYPTO_cfb128_encrypt(3)
+CRYPTO_ctr128_encrypt(3)
+CRYPTO_ctr128_encrypt_ctr32(3)
+CRYPTO_cts128_decrypt(3)
+CRYPTO_cts128_decrypt_block(3)
+CRYPTO_cts128_encrypt(3)
+CRYPTO_cts128_encrypt_block(3)
+CRYPTO_dup_ex_data(3)
+CRYPTO_gcm128_aad(3)
+CRYPTO_gcm128_decrypt(3)
+CRYPTO_gcm128_decrypt_ctr32(3)
+CRYPTO_gcm128_encrypt(3)
+CRYPTO_gcm128_encrypt_ctr32(3)
+CRYPTO_gcm128_finish(3)
+CRYPTO_gcm128_init(3)
+CRYPTO_gcm128_new(3)
+CRYPTO_gcm128_release(3)
+CRYPTO_gcm128_setiv(3)
+CRYPTO_gcm128_tag(3)
+CRYPTO_mem_debug_free(3)
+CRYPTO_mem_debug_malloc(3)
+CRYPTO_mem_debug_realloc(3)
+CRYPTO_memdup(3)
+CRYPTO_nistcts128_decrypt(3)
+CRYPTO_nistcts128_decrypt_block(3)
+CRYPTO_nistcts128_encrypt(3)
+CRYPTO_nistcts128_encrypt_block(3)
+CRYPTO_ocb128_aad(3)
+CRYPTO_ocb128_cleanup(3)
+CRYPTO_ocb128_copy_ctx(3)
+CRYPTO_ocb128_decrypt(3)
+CRYPTO_ocb128_encrypt(3)
+CRYPTO_ocb128_finish(3)
+CRYPTO_ocb128_init(3)
+CRYPTO_ocb128_new(3)
+CRYPTO_ocb128_setiv(3)
+CRYPTO_ocb128_tag(3)
+CRYPTO_ofb128_encrypt(3)
+CRYPTO_secure_actual_size(3)
+CRYPTO_xts128_encrypt(3)
+Camellia_cbc_encrypt(3)
+Camellia_cfb128_encrypt(3)
+Camellia_cfb1_encrypt(3)
+Camellia_cfb8_encrypt(3)
+Camellia_ctr128_encrypt(3)
+Camellia_decrypt(3)
+Camellia_ecb_encrypt(3)
+Camellia_encrypt(3)
+Camellia_ofb128_encrypt(3)
+Camellia_set_key(3)
+DES_cbc_encrypt(3)
+DES_check_key_parity(3)
+DES_decrypt3(3)
+DES_ede3_cfb_encrypt(3)
+DES_encrypt1(3)
+DES_encrypt2(3)
+DES_encrypt3(3)
+DES_options(3)
+DH_KDF_X9_42(3)
+DH_check_pub_key(3)
+DH_compute_key_padded(3)
+DH_up_ref(3)
+DHparams_dup(3)
+DHparams_it(3)
+DIRECTORYSTRING_it(3)
+DISPLAYTEXT_it(3)
+DIST_POINT_NAME_it(3)
+DIST_POINT_it(3)
+DIST_POINT_set_dpname(3)
+DSA_get_method(3)
+DSA_up_ref(3)
+DSO_METHOD_openssl(3)
+DSO_bind_func(3)
+DSO_convert_filename(3)
+DSO_ctrl(3)
+DSO_dsobyaddr(3)
+DSO_flags(3)
+DSO_free(3)
+DSO_get_filename(3)
+DSO_global_lookup(3)
+DSO_load(3)
+DSO_merge(3)
+DSO_new(3)
+DSO_pathbyaddr(3)
+DSO_set_filename(3)
+DSO_up_ref(3)
+ECDH_KDF_X9_62(3)
+ECDH_compute_key(3)
+ECPARAMETERS_it(3)
+ECPKPARAMETERS_it(3)
+ECParameters_print(3)
+ECParameters_print_fp(3)
+EC_GROUP_get_mont_data(3)
+EC_KEY_METHOD_free(3)
+EC_KEY_METHOD_get_compute_key(3)
+EC_KEY_METHOD_get_init(3)
+EC_KEY_METHOD_get_keygen(3)
+EC_KEY_METHOD_get_sign(3)
+EC_KEY_METHOD_get_verify(3)
+EC_KEY_METHOD_new(3)
+EC_KEY_METHOD_set_compute_key(3)
+EC_KEY_METHOD_set_init(3)
+EC_KEY_METHOD_set_keygen(3)
+EC_KEY_METHOD_set_sign(3)
+EC_KEY_METHOD_set_verify(3)
+EC_KEY_OpenSSL(3)
+EC_KEY_can_sign(3)
+EC_KEY_get_default_method(3)
+EC_KEY_new_method(3)
+EC_KEY_print(3)
+EC_KEY_print_fp(3)
+EC_KEY_set_default_method(3)
+EC_curve_nid2nist(3)
+EC_curve_nist2nid(3)
+EDIPARTYNAME_it(3)
+ENGINE_get_EC(3)
+ENGINE_get_default_EC(3)
+ENGINE_get_pkey_asn1_meth(3)
+ENGINE_get_pkey_asn1_meth_engine(3)
+ENGINE_get_pkey_asn1_meth_str(3)
+ENGINE_get_pkey_asn1_meths(3)
+ENGINE_get_pkey_meth(3)
+ENGINE_get_pkey_meth_engine(3)
+ENGINE_get_pkey_meths(3)
+ENGINE_get_ssl_client_cert_function(3)
+ENGINE_get_static_state(3)
+ENGINE_load_ssl_client_cert(3)
+ENGINE_pkey_asn1_find_str(3)
+ENGINE_register_EC(3)
+ENGINE_register_all_EC(3)
+ENGINE_register_all_pkey_asn1_meths(3)
+ENGINE_register_all_pkey_meths(3)
+ENGINE_register_pkey_asn1_meths(3)
+ENGINE_register_pkey_meths(3)
+ENGINE_set_EC(3)
+ENGINE_set_default_EC(3)
+ENGINE_set_default_pkey_asn1_meths(3)
+ENGINE_set_default_pkey_meths(3)
+ENGINE_set_load_ssl_client_cert_function(3)
+ENGINE_set_pkey_asn1_meths(3)
+ENGINE_set_pkey_meths(3)
+ENGINE_setup_bsd_cryptodev(3)
+ENGINE_unregister_EC(3)
+ENGINE_unregister_pkey_asn1_meths(3)
+ENGINE_unregister_pkey_meths(3)
+ERR_get_state(3)
+ERR_load_ASN1_strings(3)
+ERR_load_ASYNC_strings(3)
+ERR_load_BIO_strings(3)
+ERR_load_BN_strings(3)
+ERR_load_BUF_strings(3)
+ERR_load_CMS_strings(3)
+ERR_load_COMP_strings(3)
+ERR_load_CONF_strings(3)
+ERR_load_CRYPTO_strings(3)
+ERR_load_CRYPTOlib_strings(3)
+ERR_load_CT_strings(3)
+ERR_load_DH_strings(3)
+ERR_load_DSA_strings(3)
+ERR_load_DSO_strings(3)
+ERR_load_EC_strings(3)
+ERR_load_ENGINE_strings(3)
+ERR_load_ERR_strings(3)
+ERR_load_EVP_strings(3)
+ERR_load_KDF_strings(3)
+ERR_load_OBJ_strings(3)
+ERR_load_OCSP_strings(3)
+ERR_load_OSSL_STORE_strings(3)
+ERR_load_PEM_strings(3)
+ERR_load_PKCS12_strings(3)
+ERR_load_PKCS7_strings(3)
+ERR_load_RAND_strings(3)
+ERR_load_RSA_strings(3)
+ERR_load_TS_strings(3)
+ERR_load_UI_strings(3)
+ERR_load_X509V3_strings(3)
+ERR_load_X509_strings(3)
+ERR_load_strings_const(3)
+ERR_set_error_data(3)
+ERR_unload_strings(3)
+EVP_CIPHER_CTX_buf_noconst(3)
+EVP_CIPHER_CTX_copy(3)
+EVP_CIPHER_CTX_rand_key(3)
+EVP_CIPHER_CTX_set_num(3)
+EVP_CIPHER_do_all(3)
+EVP_CIPHER_do_all_sorted(3)
+EVP_CIPHER_get_asn1_iv(3)
+EVP_CIPHER_impl_ctx_size(3)
+EVP_CIPHER_set_asn1_iv(3)
+EVP_MD_do_all(3)
+EVP_MD_do_all_sorted(3)
+EVP_PBE_cleanup(3)
+EVP_PBE_get(3)
+EVP_PKEY_CTX_get_data(3)
+EVP_PKEY_CTX_get_operation(3)
+EVP_PKEY_CTX_hex2ctrl(3)
+EVP_PKEY_CTX_set0_keygen_info(3)
+EVP_PKEY_CTX_set_data(3)
+EVP_PKEY_CTX_str2ctrl(3)
+EVP_PKEY_assign(3)
+EVP_PKEY_decrypt_old(3)
+EVP_PKEY_encrypt_old(3)
+EVP_PKEY_save_parameters(3)
+EVP_add_alg_module(3)
+EVP_add_cipher(3)
+EVP_add_digest(3)
+EVP_get_pw_prompt(3)
+EVP_read_pw_string(3)
+EVP_read_pw_string_min(3)
+EVP_set_pw_prompt(3)
+EXTENDED_KEY_USAGE_it(3)
+GENERAL_NAMES_it(3)
+GENERAL_NAME_cmp(3)
+GENERAL_NAME_get0_otherName(3)
+GENERAL_NAME_get0_value(3)
+GENERAL_NAME_it(3)
+GENERAL_NAME_print(3)
+GENERAL_NAME_set0_othername(3)
+GENERAL_NAME_set0_value(3)
+GENERAL_SUBTREE_it(3)
+IDEA_cbc_encrypt(3)
+IDEA_cfb64_encrypt(3)
+IDEA_ecb_encrypt(3)
+IDEA_encrypt(3)
+IDEA_ofb64_encrypt(3)
+IDEA_options(3)
+IDEA_set_decrypt_key(3)
+IDEA_set_encrypt_key(3)
+INT32_it(3)
+INT64_it(3)
+IPAddressChoice_it(3)
+IPAddressFamily_it(3)
+IPAddressOrRange_it(3)
+IPAddressRange_it(3)
+LONG_it(3)
+MD2_options(3)
+MD4_Transform(3)
+MD5_Transform(3)
+NAME_CONSTRAINTS_check(3)
+NAME_CONSTRAINTS_check_CN(3)
+NAME_CONSTRAINTS_it(3)
+NAMING_AUTHORITY_it(3)
+NCONF_WIN32(3)
+NCONF_dump_bio(3)
+NCONF_dump_fp(3)
+NCONF_free_data(3)
+NCONF_get_number_e(3)
+NCONF_get_section(3)
+NCONF_get_string(3)
+NCONF_load_bio(3)
+NCONF_load_fp(3)
+NETSCAPE_CERT_SEQUENCE_it(3)
+NETSCAPE_SPKAC_it(3)
+NETSCAPE_SPKI_b64_decode(3)
+NETSCAPE_SPKI_b64_encode(3)
+NETSCAPE_SPKI_get_pubkey(3)
+NETSCAPE_SPKI_it(3)
+NETSCAPE_SPKI_print(3)
+NETSCAPE_SPKI_set_pubkey(3)
+NETSCAPE_SPKI_sign(3)
+NETSCAPE_SPKI_verify(3)
+NOTICEREF_it(3)
+OBJ_NAME_add(3)
+OBJ_NAME_cleanup(3)
+OBJ_NAME_do_all(3)
+OBJ_NAME_do_all_sorted(3)
+OBJ_NAME_get(3)
+OBJ_NAME_init(3)
+OBJ_NAME_new_index(3)
+OBJ_NAME_remove(3)
+OBJ_add_object(3)
+OBJ_bsearch_(3)
+OBJ_bsearch_ex_(3)
+OBJ_create_objects(3)
+OBJ_find_sigid_algs(3)
+OBJ_find_sigid_by_algs(3)
+OBJ_new_nid(3)
+OBJ_sigid_free(3)
+OCSP_BASICRESP_add1_ext_i2d(3)
+OCSP_BASICRESP_add_ext(3)
+OCSP_BASICRESP_delete_ext(3)
+OCSP_BASICRESP_get1_ext_d2i(3)
+OCSP_BASICRESP_get_ext(3)
+OCSP_BASICRESP_get_ext_by_NID(3)
+OCSP_BASICRESP_get_ext_by_OBJ(3)
+OCSP_BASICRESP_get_ext_by_critical(3)
+OCSP_BASICRESP_get_ext_count(3)
+OCSP_BASICRESP_it(3)
+OCSP_CERTID_it(3)
+OCSP_CERTSTATUS_it(3)
+OCSP_CRLID_it(3)
+OCSP_ONEREQ_add1_ext_i2d(3)
+OCSP_ONEREQ_add_ext(3)
+OCSP_ONEREQ_delete_ext(3)
+OCSP_ONEREQ_get1_ext_d2i(3)
+OCSP_ONEREQ_get_ext(3)
+OCSP_ONEREQ_get_ext_by_NID(3)
+OCSP_ONEREQ_get_ext_by_OBJ(3)
+OCSP_ONEREQ_get_ext_by_critical(3)
+OCSP_ONEREQ_get_ext_count(3)
+OCSP_ONEREQ_it(3)
+OCSP_REQINFO_it(3)
+OCSP_REQUEST_add1_ext_i2d(3)
+OCSP_REQUEST_add_ext(3)
+OCSP_REQUEST_delete_ext(3)
+OCSP_REQUEST_get1_ext_d2i(3)
+OCSP_REQUEST_get_ext(3)
+OCSP_REQUEST_get_ext_by_NID(3)
+OCSP_REQUEST_get_ext_by_OBJ(3)
+OCSP_REQUEST_get_ext_by_critical(3)
+OCSP_REQUEST_get_ext_count(3)
+OCSP_REQUEST_it(3)
+OCSP_REQUEST_print(3)
+OCSP_RESPBYTES_it(3)
+OCSP_RESPDATA_it(3)
+OCSP_RESPID_it(3)
+OCSP_RESPONSE_it(3)
+OCSP_RESPONSE_print(3)
+OCSP_REVOKEDINFO_it(3)
+OCSP_SERVICELOC_it(3)
+OCSP_SIGNATURE_it(3)
+OCSP_SINGLERESP_add1_ext_i2d(3)
+OCSP_SINGLERESP_add_ext(3)
+OCSP_SINGLERESP_delete_ext(3)
+OCSP_SINGLERESP_get0_id(3)
+OCSP_SINGLERESP_get1_ext_d2i(3)
+OCSP_SINGLERESP_get_ext(3)
+OCSP_SINGLERESP_get_ext_by_NID(3)
+OCSP_SINGLERESP_get_ext_by_OBJ(3)
+OCSP_SINGLERESP_get_ext_by_critical(3)
+OCSP_SINGLERESP_get_ext_count(3)
+OCSP_SINGLERESP_it(3)
+OCSP_accept_responses_new(3)
+OCSP_archive_cutoff_new(3)
+OCSP_basic_add1_cert(3)
+OCSP_basic_add1_status(3)
+OCSP_cert_status_str(3)
+OCSP_crlID2_new(3)
+OCSP_crlID_new(3)
+OCSP_crl_reason_str(3)
+OCSP_onereq_get0_id(3)
+OCSP_request_is_signed(3)
+OCSP_request_set1_name(3)
+OCSP_request_verify(3)
+OCSP_response_status_str(3)
+OCSP_url_svcloc_new(3)
+OPENSSL_DIR_end(3)
+OPENSSL_DIR_read(3)
+OPENSSL_LH_strhash(3)
+OPENSSL_asc2uni(3)
+OPENSSL_die(3)
+OPENSSL_init(3)
+OPENSSL_isservice(3)
+OPENSSL_issetugid(3)
+OPENSSL_strnlen(3)
+OPENSSL_uni2asc(3)
+OPENSSL_uni2utf8(3)
+OPENSSL_utf82uni(3)
+OSSL_ENCODER-DH(7)
+OSSL_ENCODER-DSA(7)
+OSSL_ENCODER-EC(7)
+OSSL_ENCODER-RSA(7)
+OSSL_ENCODER-X25519(7)
+OSSL_ENCODER-X448(7)
+OSSL_STORE_do_all_loaders(3)
+OSSL_STORE_vctrl(3)
+OTHERNAME_cmp(3)
+OTHERNAME_it(3)
+PBE2PARAM_it(3)
+PBEPARAM_it(3)
+PBKDF2PARAM_it(3)
+PEM_ASN1_read(3)
+PEM_ASN1_read_bio(3)
+PEM_ASN1_write(3)
+PEM_ASN1_write_bio(3)
+PEM_SignFinal(3)
+PEM_SignInit(3)
+PEM_SignUpdate(3)
+PEM_X509_INFO_write_bio(3)
+PEM_def_callback(3)
+PEM_dek_info(3)
+PEM_proc_type(3)
+PEM_read_bio_ECPrivateKey(3)
+PEM_write_bio_ASN1_stream(3)
+PKCS12_AUTHSAFES_it(3)
+PKCS12_BAGS_it(3)
+PKCS12_MAC_DATA_it(3)
+PKCS12_PBE_add(3)
+PKCS12_SAFEBAGS_it(3)
+PKCS12_SAFEBAG_get1_crl(3)
+PKCS12_SAFEBAG_it(3)
+PKCS12_get0_mac(3)
+PKCS12_get_attr(3)
+PKCS12_it(3)
+PKCS12_item_pack_safebag(3)
+PKCS12_mac_present(3)
+PKCS12_pack_authsafes(3)
+PKCS12_pack_p7data(3)
+PKCS12_pack_p7encdata(3)
+PKCS12_unpack_authsafes(3)
+PKCS12_unpack_p7data(3)
+PKCS12_unpack_p7encdata(3)
+PKCS1_MGF1(3)
+PKCS5_PBE_add(3)
+PKCS7_ATTR_SIGN_it(3)
+PKCS7_ATTR_VERIFY_it(3)
+PKCS7_DIGEST_it(3)
+PKCS7_ENCRYPT_it(3)
+PKCS7_ENC_CONTENT_it(3)
+PKCS7_ENVELOPE_it(3)
+PKCS7_ISSUER_AND_SERIAL_it(3)
+PKCS7_RECIP_INFO_get0_alg(3)
+PKCS7_RECIP_INFO_it(3)
+PKCS7_RECIP_INFO_set(3)
+PKCS7_SIGNED_it(3)
+PKCS7_SIGNER_INFO_get0_algs(3)
+PKCS7_SIGNER_INFO_it(3)
+PKCS7_SIGNER_INFO_set(3)
+PKCS7_SIGNER_INFO_sign(3)
+PKCS7_SIGN_ENVELOPE_it(3)
+PKCS7_add0_attrib_signing_time(3)
+PKCS7_add1_attrib_digest(3)
+PKCS7_add_attrib_content_type(3)
+PKCS7_add_attrib_smimecap(3)
+PKCS7_add_attribute(3)
+PKCS7_add_recipient(3)
+PKCS7_add_recipient_info(3)
+PKCS7_add_signature(3)
+PKCS7_add_signed_attribute(3)
+PKCS7_add_signer(3)
+PKCS7_cert_from_signer_info(3)
+PKCS7_content_new(3)
+PKCS7_ctrl(3)
+PKCS7_dataDecode(3)
+PKCS7_dataFinal(3)
+PKCS7_dataInit(3)
+PKCS7_dataVerify(3)
+PKCS7_digest_from_attributes(3)
+PKCS7_final(3)
+PKCS7_get_attribute(3)
+PKCS7_get_issuer_and_serial(3)
+PKCS7_get_signed_attribute(3)
+PKCS7_get_signer_info(3)
+PKCS7_get_smimecap(3)
+PKCS7_it(3)
+PKCS7_set0_type_other(3)
+PKCS7_set_attributes(3)
+PKCS7_set_cipher(3)
+PKCS7_set_content(3)
+PKCS7_set_digest(3)
+PKCS7_set_signed_attributes(3)
+PKCS7_set_type(3)
+PKCS7_signatureVerify(3)
+PKCS7_simple_smimecap(3)
+PKCS7_stream(3)
+PKCS7_to_TS_TST_INFO(3)
+PKCS8_PRIV_KEY_INFO_it(3)
+PKCS8_add_keyusage(3)
+PKCS8_get_attr(3)
+PKCS8_pkey_get0(3)
+PKCS8_pkey_set0(3)
+PKEY_USAGE_PERIOD_it(3)
+POLICYINFO_it(3)
+POLICYQUALINFO_it(3)
+POLICY_CONSTRAINTS_it(3)
+POLICY_MAPPINGS_it(3)
+POLICY_MAPPING_it(3)
+PROFESSION_INFO_it(3)
+PROXY_CERT_INFO_EXTENSION_it(3)
+PROXY_POLICY_it(3)
+RAND_set_rand_engine(3)
+RC2_cbc_encrypt(3)
+RC2_cfb64_encrypt(3)
+RC2_decrypt(3)
+RC2_ecb_encrypt(3)
+RC2_encrypt(3)
+RC2_ofb64_encrypt(3)
+RC2_set_key(3)
+RC4_options(3)
+RC5_32_cbc_encrypt(3)
+RC5_32_cfb64_encrypt(3)
+RC5_32_decrypt(3)
+RC5_32_ecb_encrypt(3)
+RC5_32_encrypt(3)
+RC5_32_ofb64_encrypt(3)
+RC5_32_set_key(3)
+RIPEMD160_Transform(3)
+RSAPrivateKey_it(3)
+RSAPublicKey_it(3)
+RSA_OAEP_PARAMS_it(3)
+RSA_PSS_PARAMS_it(3)
+RSA_X931_derive_ex(3)
+RSA_X931_generate_key_ex(3)
+RSA_X931_hash_id(3)
+RSA_null_method(3)
+RSA_padding_add_PKCS1_PSS(3)
+RSA_padding_add_PKCS1_PSS_mgf1(3)
+RSA_padding_add_X931(3)
+RSA_padding_check_X931(3)
+RSA_pkey_ctx_ctrl(3)
+RSA_setup_blinding(3)
+RSA_up_ref(3)
+RSA_verify_PKCS1_PSS(3)
+RSA_verify_PKCS1_PSS_mgf1(3)
+SCRYPT_PARAMS_it(3)
+SEED_cbc_encrypt(3)
+SEED_cfb128_encrypt(3)
+SEED_decrypt(3)
+SEED_ecb_encrypt(3)
+SEED_encrypt(3)
+SEED_ofb128_encrypt(3)
+SEED_set_key(3)
+SHA1_Transform(3)
+SHA256_Transform(3)
+SHA512_Transform(3)
+SMIME_crlf_copy(3)
+SMIME_text(3)
+SRP_Verify_A_mod_N(3)
+SRP_Verify_B_mod_N(3)
+SSL_CTX_set0_ctlog_store(3)
+SXNETID_it(3)
+SXNET_add_id_INTEGER(3)
+SXNET_add_id_asc(3)
+SXNET_add_id_ulong(3)
+SXNET_get_id_INTEGER(3)
+SXNET_get_id_asc(3)
+SXNET_get_id_ulong(3)
+SXNET_it(3)
+TS_ACCURACY_get_micros(3)
+TS_ACCURACY_get_millis(3)
+TS_ACCURACY_get_seconds(3)
+TS_ACCURACY_set_micros(3)
+TS_ACCURACY_set_millis(3)
+TS_ACCURACY_set_seconds(3)
+TS_ASN1_INTEGER_print_bio(3)
+TS_CONF_get_tsa_section(3)
+TS_CONF_load_cert(3)
+TS_CONF_load_certs(3)
+TS_CONF_load_key(3)
+TS_CONF_set_accuracy(3)
+TS_CONF_set_certs(3)
+TS_CONF_set_clock_precision_digits(3)
+TS_CONF_set_crypto_device(3)
+TS_CONF_set_def_policy(3)
+TS_CONF_set_default_engine(3)
+TS_CONF_set_digests(3)
+TS_CONF_set_ess_cert_id_chain(3)
+TS_CONF_set_ess_cert_id_digest(3)
+TS_CONF_set_ordering(3)
+TS_CONF_set_policies(3)
+TS_CONF_set_serial(3)
+TS_CONF_set_signer_cert(3)
+TS_CONF_set_signer_digest(3)
+TS_CONF_set_signer_key(3)
+TS_CONF_set_tsa_name(3)
+TS_MSG_IMPRINT_get_algo(3)
+TS_MSG_IMPRINT_get_msg(3)
+TS_MSG_IMPRINT_print_bio(3)
+TS_MSG_IMPRINT_set_algo(3)
+TS_MSG_IMPRINT_set_msg(3)
+TS_OBJ_print_bio(3)
+TS_REQ_add_ext(3)
+TS_REQ_delete_ext(3)
+TS_REQ_ext_free(3)
+TS_REQ_get_cert_req(3)
+TS_REQ_get_ext(3)
+TS_REQ_get_ext_by_NID(3)
+TS_REQ_get_ext_by_OBJ(3)
+TS_REQ_get_ext_by_critical(3)
+TS_REQ_get_ext_count(3)
+TS_REQ_get_ext_d2i(3)
+TS_REQ_get_exts(3)
+TS_REQ_get_msg_imprint(3)
+TS_REQ_get_nonce(3)
+TS_REQ_get_policy_id(3)
+TS_REQ_get_version(3)
+TS_REQ_print_bio(3)
+TS_REQ_set_cert_req(3)
+TS_REQ_set_msg_imprint(3)
+TS_REQ_set_nonce(3)
+TS_REQ_set_policy_id(3)
+TS_REQ_set_version(3)
+TS_REQ_to_TS_VERIFY_CTX(3)
+TS_RESP_CTX_add_failure_info(3)
+TS_RESP_CTX_add_flags(3)
+TS_RESP_CTX_add_md(3)
+TS_RESP_CTX_add_policy(3)
+TS_RESP_CTX_free(3)
+TS_RESP_CTX_get_request(3)
+TS_RESP_CTX_get_tst_info(3)
+TS_RESP_CTX_new(3)
+TS_RESP_CTX_set_accuracy(3)
+TS_RESP_CTX_set_certs(3)
+TS_RESP_CTX_set_clock_precision_digits(3)
+TS_RESP_CTX_set_def_policy(3)
+TS_RESP_CTX_set_ess_cert_id_digest(3)
+TS_RESP_CTX_set_extension_cb(3)
+TS_RESP_CTX_set_serial_cb(3)
+TS_RESP_CTX_set_signer_cert(3)
+TS_RESP_CTX_set_signer_digest(3)
+TS_RESP_CTX_set_signer_key(3)
+TS_RESP_CTX_set_status_info(3)
+TS_RESP_CTX_set_status_info_cond(3)
+TS_RESP_CTX_set_time_cb(3)
+TS_RESP_create_response(3)
+TS_RESP_get_status_info(3)
+TS_RESP_get_token(3)
+TS_RESP_get_tst_info(3)
+TS_RESP_print_bio(3)
+TS_RESP_set_status_info(3)
+TS_RESP_set_tst_info(3)
+TS_RESP_verify_response(3)
+TS_RESP_verify_signature(3)
+TS_RESP_verify_token(3)
+TS_STATUS_INFO_get0_failure_info(3)
+TS_STATUS_INFO_get0_status(3)
+TS_STATUS_INFO_get0_text(3)
+TS_STATUS_INFO_print_bio(3)
+TS_STATUS_INFO_set_status(3)
+TS_TST_INFO_add_ext(3)
+TS_TST_INFO_delete_ext(3)
+TS_TST_INFO_ext_free(3)
+TS_TST_INFO_get_accuracy(3)
+TS_TST_INFO_get_ext(3)
+TS_TST_INFO_get_ext_by_NID(3)
+TS_TST_INFO_get_ext_by_OBJ(3)
+TS_TST_INFO_get_ext_by_critical(3)
+TS_TST_INFO_get_ext_count(3)
+TS_TST_INFO_get_ext_d2i(3)
+TS_TST_INFO_get_exts(3)
+TS_TST_INFO_get_msg_imprint(3)
+TS_TST_INFO_get_nonce(3)
+TS_TST_INFO_get_ordering(3)
+TS_TST_INFO_get_policy_id(3)
+TS_TST_INFO_get_serial(3)
+TS_TST_INFO_get_time(3)
+TS_TST_INFO_get_tsa(3)
+TS_TST_INFO_get_version(3)
+TS_TST_INFO_print_bio(3)
+TS_TST_INFO_set_accuracy(3)
+TS_TST_INFO_set_msg_imprint(3)
+TS_TST_INFO_set_nonce(3)
+TS_TST_INFO_set_ordering(3)
+TS_TST_INFO_set_policy_id(3)
+TS_TST_INFO_set_serial(3)
+TS_TST_INFO_set_time(3)
+TS_TST_INFO_set_tsa(3)
+TS_TST_INFO_set_version(3)
+TS_VERIFY_CTX_add_flags(3)
+TS_VERIFY_CTX_cleanup(3)
+TS_VERIFY_CTX_free(3)
+TS_VERIFY_CTX_init(3)
+TS_VERIFY_CTX_new(3)
+TS_VERIFY_CTX_set_data(3)
+TS_VERIFY_CTX_set_flags(3)
+TS_VERIFY_CTX_set_imprint(3)
+TS_VERIFY_CTX_set_store(3)
+TS_X509_ALGOR_print_bio(3)
+TS_ext_print_bio(3)
+TXT_DB_create_index(3)
+TXT_DB_free(3)
+TXT_DB_get_by_index(3)
+TXT_DB_insert(3)
+TXT_DB_read(3)
+TXT_DB_write(3)
+UINT32_it(3)
+UINT64_it(3)
+USERNOTICE_it(3)
+UTF8_getc(3)
+UTF8_putc(3)
+WHIRLPOOL(3)
+WHIRLPOOL_BitUpdate(3)
+WHIRLPOOL_Final(3)
+WHIRLPOOL_Init(3)
+WHIRLPOOL_Update(3)
+X509V3_EXT_CRL_add_conf(3)
+X509V3_EXT_CRL_add_nconf(3)
+X509V3_EXT_REQ_add_conf(3)
+X509V3_EXT_REQ_add_nconf(3)
+X509V3_EXT_add(3)
+X509V3_EXT_add_alias(3)
+X509V3_EXT_add_conf(3)
+X509V3_EXT_add_list(3)
+X509V3_EXT_add_nconf(3)
+X509V3_EXT_add_nconf_sk(3)
+X509V3_EXT_cleanup(3)
+X509V3_EXT_conf(3)
+X509V3_EXT_conf_nid(3)
+X509V3_EXT_get(3)
+X509V3_EXT_get_nid(3)
+X509V3_EXT_nconf(3)
+X509V3_EXT_nconf_nid(3)
+X509V3_EXT_print(3)
+X509V3_EXT_print_fp(3)
+X509V3_EXT_val_prn(3)
+X509V3_NAME_from_section(3)
+X509V3_add_standard_extensions(3)
+X509V3_add_value(3)
+X509V3_add_value_bool(3)
+X509V3_add_value_bool_nf(3)
+X509V3_add_value_int(3)
+X509V3_add_value_uchar(3)
+X509V3_conf_free(3)
+X509V3_extensions_print(3)
+X509V3_get_section(3)
+X509V3_get_string(3)
+X509V3_get_value_bool(3)
+X509V3_get_value_int(3)
+X509V3_parse_list(3)
+X509V3_section_free(3)
+X509V3_set_conf_lhash(3)
+X509V3_set_nconf(3)
+X509V3_string_free(3)
+X509_ALGORS_it(3)
+X509_ATTRIBUTE_it(3)
+X509_CERT_AUX_it(3)
+X509_CINF_it(3)
+X509_CRL_INFO_it(3)
+X509_CRL_METHOD_free(3)
+X509_CRL_METHOD_new(3)
+X509_CRL_check_suiteb(3)
+X509_CRL_diff(3)
+X509_CRL_get_lastUpdate(3)
+X509_CRL_get_meth_data(3)
+X509_CRL_get_nextUpdate(3)
+X509_CRL_it(3)
+X509_CRL_print(3)
+X509_CRL_print_ex(3)
+X509_CRL_print_fp(3)
+X509_CRL_set_default_method(3)
+X509_CRL_set_meth_data(3)
+X509_CRL_up_ref(3)
+X509_EXTENSIONS_it(3)
+X509_EXTENSION_it(3)
+X509_INFO_free(3)
+X509_INFO_new(3)
+X509_NAME_ENTRY_it(3)
+X509_NAME_ENTRY_set(3)
+X509_NAME_hash_old(3)
+X509_NAME_it(3)
+X509_NAME_set(3)
+X509_OBJECT_free(3)
+X509_OBJECT_get0_X509(3)
+X509_OBJECT_get0_X509_CRL(3)
+X509_OBJECT_get_type(3)
+X509_OBJECT_idx_by_subject(3)
+X509_OBJECT_new(3)
+X509_OBJECT_retrieve_by_subject(3)
+X509_OBJECT_retrieve_match(3)
+X509_OBJECT_up_ref_count(3)
+X509_PKEY_free(3)
+X509_PKEY_new(3)
+X509_POLICY_NODE_print(3)
+X509_PUBKEY_it(3)
+X509_PURPOSE_add(3)
+X509_PURPOSE_cleanup(3)
+X509_PURPOSE_get0(3)
+X509_PURPOSE_get0_name(3)
+X509_PURPOSE_get0_sname(3)
+X509_PURPOSE_get_by_id(3)
+X509_PURPOSE_get_by_sname(3)
+X509_PURPOSE_get_count(3)
+X509_PURPOSE_get_id(3)
+X509_PURPOSE_get_trust(3)
+X509_PURPOSE_set(3)
+X509_REQ_INFO_it(3)
+X509_REQ_add1_attr(3)
+X509_REQ_add1_attr_by_NID(3)
+X509_REQ_add1_attr_by_OBJ(3)
+X509_REQ_add1_attr_by_txt(3)
+X509_REQ_delete_attr(3)
+X509_REQ_extension_nid(3)
+X509_REQ_get1_email(3)
+X509_REQ_get_extension_nids(3)
+X509_REQ_it(3)
+X509_REQ_print(3)
+X509_REQ_print_ex(3)
+X509_REQ_print_fp(3)
+X509_REQ_set_extension_nids(3)
+X509_REQ_to_X509(3)
+X509_REVOKED_it(3)
+X509_SIG_it(3)
+X509_STORE_CTX_get0_current_crl(3)
+X509_STORE_CTX_get0_current_issuer(3)
+X509_STORE_CTX_get0_parent_ctx(3)
+X509_STORE_CTX_get0_policy_tree(3)
+X509_STORE_CTX_get0_store(3)
+X509_STORE_CTX_get1_certs(3)
+X509_STORE_CTX_get1_crls(3)
+X509_STORE_CTX_get_by_subject(3)
+X509_STORE_CTX_get_explicit_policy(3)
+X509_STORE_CTX_get_obj_by_subject(3)
+X509_STORE_CTX_set0_dane(3)
+X509_STORE_CTX_set_depth(3)
+X509_STORE_CTX_set_flags(3)
+X509_STORE_CTX_set_time(3)
+X509_STORE_get_verify(3)
+X509_TRUST_add(3)
+X509_TRUST_cleanup(3)
+X509_TRUST_get0(3)
+X509_TRUST_get0_name(3)
+X509_TRUST_get_by_id(3)
+X509_TRUST_get_count(3)
+X509_TRUST_get_flags(3)
+X509_TRUST_get_trust(3)
+X509_TRUST_set(3)
+X509_TRUST_set_default(3)
+X509_VAL_it(3)
+X509_VERIFY_PARAM_add0_table(3)
+X509_VERIFY_PARAM_free(3)
+X509_VERIFY_PARAM_get0(3)
+X509_VERIFY_PARAM_get0_name(3)
+X509_VERIFY_PARAM_get_count(3)
+X509_VERIFY_PARAM_inherit(3)
+X509_VERIFY_PARAM_lookup(3)
+X509_VERIFY_PARAM_move_peername(3)
+X509_VERIFY_PARAM_new(3)
+X509_VERIFY_PARAM_set1(3)
+X509_VERIFY_PARAM_set1_name(3)
+X509_VERIFY_PARAM_table_cleanup(3)
+X509_add1_reject_object(3)
+X509_add1_trust_object(3)
+X509_alias_get0(3)
+X509_alias_set1(3)
+X509_aux_print(3)
+X509_certificate_type(3)
+X509_chain_check_suiteb(3)
+X509_check_akid(3)
+X509_check_trust(3)
+X509_email_free(3)
+X509_find_by_issuer_and_serial(3)
+X509_find_by_subject(3)
+X509_get0_pubkey_bitstr(3)
+X509_get0_reject_objects(3)
+X509_get0_trust_objects(3)
+X509_get1_email(3)
+X509_get1_ocsp(3)
+X509_get_default_cert_area(3)
+X509_get_default_cert_dir(3)
+X509_get_default_cert_dir_env(3)
+X509_get_default_cert_file(3)
+X509_get_default_cert_file_env(3)
+X509_get_default_private_dir(3)
+X509_get_pubkey_parameters(3)
+X509_get_signature_type(3)
+X509_issuer_and_serial_hash(3)
+X509_issuer_name_hash(3)
+X509_issuer_name_hash_old(3)
+X509_it(3)
+X509_keyid_get0(3)
+X509_keyid_set1(3)
+X509_ocspid_print(3)
+X509_policy_check(3)
+X509_policy_level_get0_node(3)
+X509_policy_level_node_count(3)
+X509_policy_node_get0_parent(3)
+X509_policy_node_get0_policy(3)
+X509_policy_node_get0_qualifiers(3)
+X509_policy_tree_free(3)
+X509_policy_tree_get0_level(3)
+X509_policy_tree_get0_policies(3)
+X509_policy_tree_get0_user_policies(3)
+X509_policy_tree_level_count(3)
+X509_print(3)
+X509_print_ex(3)
+X509_print_ex_fp(3)
+X509_print_fp(3)
+X509_reject_clear(3)
+X509_signature_dump(3)
+X509_signature_print(3)
+X509_subject_name_hash(3)
+X509_subject_name_hash_old(3)
+X509_supported_extension(3)
+X509_to_X509_REQ(3)
+X509_trust_clear(3)
+X509_trusted(3)
+X509v3_addr_add_inherit(3)
+X509v3_addr_add_prefix(3)
+X509v3_addr_add_range(3)
+X509v3_addr_canonize(3)
+X509v3_addr_get_afi(3)
+X509v3_addr_get_range(3)
+X509v3_addr_inherits(3)
+X509v3_addr_is_canonical(3)
+X509v3_addr_subset(3)
+X509v3_addr_validate_path(3)
+X509v3_addr_validate_resource_set(3)
+X509v3_asid_add_id_or_range(3)
+X509v3_asid_add_inherit(3)
+X509v3_asid_canonize(3)
+X509v3_asid_inherits(3)
+X509v3_asid_is_canonical(3)
+X509v3_asid_subset(3)
+X509v3_asid_validate_path(3)
+X509v3_asid_validate_resource_set(3)
+ZINT32_it(3)
+ZINT64_it(3)
+ZLONG_it(3)
+ZUINT32_it(3)
+ZUINT64_it(3)
+a2d_ASN1_OBJECT(3)
+a2i_ASN1_ENUMERATED(3)
+a2i_ASN1_INTEGER(3)
+a2i_ASN1_STRING(3)
+a2i_GENERAL_NAME(3)
+a2i_IPADDRESS(3)
+a2i_IPADDRESS_NC(3)
+b2i_PrivateKey(3)
+b2i_PrivateKey_bio(3)
+b2i_PublicKey(3)
+b2i_PublicKey_bio(3)
+conf_ssl_get(3)
+conf_ssl_get_cmd(3)
+conf_ssl_name_find(3)
+err_free_strings_int(3)
+i2a_ACCESS_DESCRIPTION(3)
+i2a_ASN1_ENUMERATED(3)
+i2a_ASN1_INTEGER(3)
+i2a_ASN1_OBJECT(3)
+i2a_ASN1_STRING(3)
+i2b_PrivateKey_bio(3)
+i2b_PublicKey_bio(3)
+i2o_ECPublicKey(3)
+i2v_ASN1_BIT_STRING(3)
+i2v_GENERAL_NAME(3)
+i2v_GENERAL_NAMES(3)
+o2i_ECPublicKey(3)
+v2i_ASN1_BIT_STRING(3)
+v2i_GENERAL_NAME(3)
+v2i_GENERAL_NAMES(3)
+v2i_GENERAL_NAME_ex(3)
diff --git a/util/missingcrypto111.txt b/util/missingcrypto111.txt
new file mode 100644
index 000000000000..0386701ad1e3
--- /dev/null
+++ b/util/missingcrypto111.txt
@@ -0,0 +1,1743 @@
+# A list of libcrypto functions that are known to be missing documentation as
+# used by the find-doc-nits -v -o option. The list is as of commit 1708e3e85b
+# (the release of 1.1.1).
+ACCESS_DESCRIPTION_it(3)
+ACCESS_DESCRIPTION_it(3)
+ADMISSIONS_it(3)
+ADMISSIONS_it(3)
+ADMISSION_SYNTAX_it(3)
+ADMISSION_SYNTAX_it(3)
+AES_bi_ige_encrypt(3)
+AES_cbc_encrypt(3)
+AES_cfb128_encrypt(3)
+AES_cfb1_encrypt(3)
+AES_cfb8_encrypt(3)
+AES_decrypt(3)
+AES_ecb_encrypt(3)
+AES_encrypt(3)
+AES_ige_encrypt(3)
+AES_ofb128_encrypt(3)
+AES_options(3)
+AES_set_decrypt_key(3)
+AES_set_encrypt_key(3)
+AES_unwrap_key(3)
+AES_wrap_key(3)
+ASIdOrRange_it(3)
+ASIdOrRange_it(3)
+ASIdentifierChoice_it(3)
+ASIdentifierChoice_it(3)
+ASIdentifiers_it(3)
+ASIdentifiers_it(3)
+ASN1_ANY_it(3)
+ASN1_BIT_STRING_check(3)
+ASN1_BIT_STRING_free(3)
+ASN1_BIT_STRING_get_bit(3)
+ASN1_BIT_STRING_it(3)
+ASN1_BIT_STRING_name_print(3)
+ASN1_BIT_STRING_new(3)
+ASN1_BIT_STRING_num_asc(3)
+ASN1_BIT_STRING_set(3)
+ASN1_BIT_STRING_set_asc(3)
+ASN1_BIT_STRING_set_bit(3)
+ASN1_BMPSTRING_free(3)
+ASN1_BMPSTRING_it(3)
+ASN1_BMPSTRING_new(3)
+ASN1_BOOLEAN_it(3)
+ASN1_ENUMERATED_free(3)
+ASN1_ENUMERATED_it(3)
+ASN1_ENUMERATED_new(3)
+ASN1_FBOOLEAN_it(3)
+ASN1_GENERALIZEDTIME_free(3)
+ASN1_GENERALIZEDTIME_it(3)
+ASN1_GENERALIZEDTIME_new(3)
+ASN1_GENERALSTRING_free(3)
+ASN1_GENERALSTRING_it(3)
+ASN1_GENERALSTRING_new(3)
+ASN1_IA5STRING_free(3)
+ASN1_IA5STRING_it(3)
+ASN1_IA5STRING_new(3)
+ASN1_INTEGER_cmp(3)
+ASN1_INTEGER_dup(3)
+ASN1_INTEGER_free(3)
+ASN1_INTEGER_it(3)
+ASN1_INTEGER_new(3)
+ASN1_NULL_free(3)
+ASN1_NULL_it(3)
+ASN1_NULL_new(3)
+ASN1_OBJECT_create(3)
+ASN1_OBJECT_it(3)
+ASN1_OCTET_STRING_NDEF_it(3)
+ASN1_OCTET_STRING_cmp(3)
+ASN1_OCTET_STRING_dup(3)
+ASN1_OCTET_STRING_free(3)
+ASN1_OCTET_STRING_it(3)
+ASN1_OCTET_STRING_new(3)
+ASN1_OCTET_STRING_set(3)
+ASN1_PCTX_free(3)
+ASN1_PCTX_get_cert_flags(3)
+ASN1_PCTX_get_flags(3)
+ASN1_PCTX_get_nm_flags(3)
+ASN1_PCTX_get_oid_flags(3)
+ASN1_PCTX_get_str_flags(3)
+ASN1_PCTX_new(3)
+ASN1_PCTX_set_cert_flags(3)
+ASN1_PCTX_set_flags(3)
+ASN1_PCTX_set_nm_flags(3)
+ASN1_PCTX_set_oid_flags(3)
+ASN1_PCTX_set_str_flags(3)
+ASN1_PRINTABLESTRING_free(3)
+ASN1_PRINTABLESTRING_it(3)
+ASN1_PRINTABLESTRING_new(3)
+ASN1_PRINTABLE_free(3)
+ASN1_PRINTABLE_it(3)
+ASN1_PRINTABLE_new(3)
+ASN1_PRINTABLE_type(3)
+ASN1_SCTX_free(3)
+ASN1_SCTX_get_app_data(3)
+ASN1_SCTX_get_flags(3)
+ASN1_SCTX_get_item(3)
+ASN1_SCTX_get_template(3)
+ASN1_SCTX_new(3)
+ASN1_SCTX_set_app_data(3)
+ASN1_SEQUENCE_ANY_it(3)
+ASN1_SEQUENCE_it(3)
+ASN1_SET_ANY_it(3)
+ASN1_STRING_clear_free(3)
+ASN1_STRING_copy(3)
+ASN1_STRING_get_default_mask(3)
+ASN1_STRING_length_set(3)
+ASN1_STRING_set0(3)
+ASN1_STRING_set_by_NID(3)
+ASN1_STRING_set_default_mask(3)
+ASN1_STRING_set_default_mask_asc(3)
+ASN1_T61STRING_free(3)
+ASN1_T61STRING_it(3)
+ASN1_T61STRING_new(3)
+ASN1_TBOOLEAN_it(3)
+ASN1_TIME_free(3)
+ASN1_TIME_it(3)
+ASN1_TIME_new(3)
+ASN1_TYPE_free(3)
+ASN1_TYPE_get_int_octetstring(3)
+ASN1_TYPE_get_octetstring(3)
+ASN1_TYPE_new(3)
+ASN1_TYPE_set_int_octetstring(3)
+ASN1_TYPE_set_octetstring(3)
+ASN1_UNIVERSALSTRING_free(3)
+ASN1_UNIVERSALSTRING_it(3)
+ASN1_UNIVERSALSTRING_new(3)
+ASN1_UNIVERSALSTRING_to_string(3)
+ASN1_UTCTIME_free(3)
+ASN1_UTCTIME_it(3)
+ASN1_UTCTIME_new(3)
+ASN1_UTF8STRING_free(3)
+ASN1_UTF8STRING_it(3)
+ASN1_UTF8STRING_new(3)
+ASN1_VISIBLESTRING_free(3)
+ASN1_VISIBLESTRING_it(3)
+ASN1_VISIBLESTRING_new(3)
+ASN1_add_stable_module(3)
+ASN1_bn_print(3)
+ASN1_buf_print(3)
+ASN1_check_infinite_end(3)
+ASN1_const_check_infinite_end(3)
+ASN1_d2i_bio(3)
+ASN1_d2i_fp(3)
+ASN1_digest(3)
+ASN1_dup(3)
+ASN1_get_object(3)
+ASN1_i2d_bio(3)
+ASN1_i2d_fp(3)
+ASN1_item_d2i(3)
+ASN1_item_d2i_bio(3)
+ASN1_item_d2i_fp(3)
+ASN1_item_digest(3)
+ASN1_item_dup(3)
+ASN1_item_ex_d2i(3)
+ASN1_item_ex_free(3)
+ASN1_item_ex_i2d(3)
+ASN1_item_ex_new(3)
+ASN1_item_free(3)
+ASN1_item_i2d(3)
+ASN1_item_i2d_bio(3)
+ASN1_item_i2d_fp(3)
+ASN1_item_ndef_i2d(3)
+ASN1_item_new(3)
+ASN1_item_pack(3)
+ASN1_item_print(3)
+ASN1_item_sign(3)
+ASN1_item_sign_ctx(3)
+ASN1_item_unpack(3)
+ASN1_item_verify(3)
+ASN1_mbstring_copy(3)
+ASN1_mbstring_ncopy(3)
+ASN1_object_size(3)
+ASN1_parse(3)
+ASN1_parse_dump(3)
+ASN1_put_eoc(3)
+ASN1_put_object(3)
+ASN1_sign(3)
+ASN1_str2mask(3)
+ASN1_tag2bit(3)
+ASN1_verify(3)
+ASRange_it(3)
+AUTHORITY_INFO_ACCESS_it(3)
+AUTHORITY_INFO_ACCESS_it(3)
+AUTHORITY_KEYID_it(3)
+AUTHORITY_KEYID_it(3)
+BASIC_CONSTRAINTS_it(3)
+BASIC_CONSTRAINTS_it(3)
+BIGNUM_it(3)
+BIGNUM_it(3)
+BIO_accept(3)
+BIO_asn1_get_prefix(3)
+BIO_asn1_get_suffix(3)
+BIO_asn1_set_prefix(3)
+BIO_asn1_set_suffix(3)
+BIO_clear_flags(3)
+BIO_copy_next_retry(3)
+BIO_dgram_is_sctp(3)
+BIO_dgram_non_fatal_error(3)
+BIO_dgram_sctp_msg_waiting(3)
+BIO_dgram_sctp_notification_cb(3)
+BIO_dgram_sctp_wait_for_dry(3)
+BIO_dump(3)
+BIO_dump_cb(3)
+BIO_dump_fp(3)
+BIO_dump_indent(3)
+BIO_dump_indent_cb(3)
+BIO_dump_indent_fp(3)
+BIO_dup_chain(3)
+BIO_f_asn1(3)
+BIO_f_linebuffer(3)
+BIO_f_nbio_test(3)
+BIO_f_reliable(3)
+BIO_f_zlib(3)
+BIO_fd_non_fatal_error(3)
+BIO_fd_should_retry(3)
+BIO_get_accept_socket(3)
+BIO_get_host_ip(3)
+BIO_get_port(3)
+BIO_gethostbyname(3)
+BIO_hex_string(3)
+BIO_indent(3)
+BIO_method_name(3)
+BIO_new_NDEF(3)
+BIO_new_PKCS7(3)
+BIO_new_dgram(3)
+BIO_new_dgram_sctp(3)
+BIO_nread(3)
+BIO_nread0(3)
+BIO_number_read(3)
+BIO_number_written(3)
+BIO_nwrite(3)
+BIO_nwrite0(3)
+BIO_s_datagram(3)
+BIO_s_datagram_sctp(3)
+BIO_s_log(3)
+BIO_set_flags(3)
+BIO_set_tcp_ndelay(3)
+BIO_sock_error(3)
+BIO_sock_info(3)
+BIO_sock_init(3)
+BIO_sock_non_fatal_error(3)
+BIO_sock_should_retry(3)
+BIO_socket_ioctl(3)
+BIO_socket_nbio(3)
+BIO_test_flags(3)
+BN_GF2m_add(3)
+BN_GF2m_arr2poly(3)
+BN_GF2m_mod(3)
+BN_GF2m_mod_arr(3)
+BN_GF2m_mod_div(3)
+BN_GF2m_mod_div_arr(3)
+BN_GF2m_mod_exp(3)
+BN_GF2m_mod_exp_arr(3)
+BN_GF2m_mod_inv(3)
+BN_GF2m_mod_inv_arr(3)
+BN_GF2m_mod_mul(3)
+BN_GF2m_mod_mul_arr(3)
+BN_GF2m_mod_solve_quad(3)
+BN_GF2m_mod_solve_quad_arr(3)
+BN_GF2m_mod_sqr(3)
+BN_GF2m_mod_sqr_arr(3)
+BN_GF2m_mod_sqrt(3)
+BN_GF2m_mod_sqrt_arr(3)
+BN_GF2m_poly2arr(3)
+BN_MONT_CTX_set_locked(3)
+BN_X931_derive_prime_ex(3)
+BN_X931_generate_Xpq(3)
+BN_X931_generate_prime_ex(3)
+BN_abs_is_word(3)
+BN_asc2bn(3)
+BN_bntest_rand(3)
+BN_consttime_swap(3)
+BN_generate_dsa_nonce(3)
+BN_get_flags(3)
+BN_get_params(3)
+BN_is_negative(3)
+BN_kronecker(3)
+BN_mod_add_quick(3)
+BN_mod_exp2_mont(3)
+BN_mod_exp_mont(3)
+BN_mod_exp_mont_consttime(3)
+BN_mod_exp_mont_word(3)
+BN_mod_exp_recp(3)
+BN_mod_exp_simple(3)
+BN_mod_lshift(3)
+BN_mod_lshift1(3)
+BN_mod_lshift1_quick(3)
+BN_mod_lshift_quick(3)
+BN_mod_sqrt(3)
+BN_mod_sub_quick(3)
+BN_nist_mod_192(3)
+BN_nist_mod_224(3)
+BN_nist_mod_256(3)
+BN_nist_mod_384(3)
+BN_nist_mod_521(3)
+BN_nist_mod_func(3)
+BN_options(3)
+BN_reciprocal(3)
+BN_set_flags(3)
+BN_set_negative(3)
+BN_set_params(3)
+BN_uadd(3)
+BN_usub(3)
+BN_zero_ex(3)
+CAST_cbc_encrypt(3)
+CAST_cfb64_encrypt(3)
+CAST_decrypt(3)
+CAST_ecb_encrypt(3)
+CAST_encrypt(3)
+CAST_ofb64_encrypt(3)
+CAST_set_key(3)
+CBIGNUM_it(3)
+CBIGNUM_it(3)
+CERTIFICATEPOLICIES_it(3)
+CERTIFICATEPOLICIES_it(3)
+CMAC_CTX_cleanup(3)
+CMAC_CTX_copy(3)
+CMAC_CTX_free(3)
+CMAC_CTX_get0_cipher_ctx(3)
+CMAC_CTX_new(3)
+CMAC_Final(3)
+CMAC_Init(3)
+CMAC_Update(3)
+CMAC_resume(3)
+CMS_ContentInfo_it(3)
+CMS_ContentInfo_it(3)
+CMS_EncryptedData_decrypt(3)
+CMS_EncryptedData_encrypt(3)
+CMS_EncryptedData_set1_key(3)
+CMS_EnvelopedData_create(3)
+CMS_ReceiptRequest_it(3)
+CMS_ReceiptRequest_it(3)
+CMS_RecipientEncryptedKey_cert_cmp(3)
+CMS_RecipientEncryptedKey_get0_id(3)
+CMS_RecipientInfo_get0_pkey_ctx(3)
+CMS_RecipientInfo_kari_decrypt(3)
+CMS_RecipientInfo_kari_get0_alg(3)
+CMS_RecipientInfo_kari_get0_ctx(3)
+CMS_RecipientInfo_kari_get0_orig_id(3)
+CMS_RecipientInfo_kari_get0_reks(3)
+CMS_RecipientInfo_kari_orig_id_cmp(3)
+CMS_RecipientInfo_kari_set0_pkey(3)
+CMS_RecipientInfo_ktri_get0_algs(3)
+CMS_RecipientInfo_set0_password(3)
+CMS_SharedInfo_encode(3)
+CMS_SignedData_init(3)
+CMS_SignerInfo_get0_algs(3)
+CMS_SignerInfo_get0_md_ctx(3)
+CMS_SignerInfo_get0_pkey_ctx(3)
+CMS_SignerInfo_verify(3)
+CMS_SignerInfo_verify_content(3)
+CMS_add0_CertificateChoices(3)
+CMS_add0_RevocationInfoChoice(3)
+CMS_add0_recipient_password(3)
+CMS_add_simple_smimecap(3)
+CMS_add_smimecap(3)
+CMS_add_standard_smimecap(3)
+CMS_data(3)
+CMS_dataFinal(3)
+CMS_dataInit(3)
+CMS_data_create(3)
+CMS_decrypt_set1_key(3)
+CMS_decrypt_set1_password(3)
+CMS_decrypt_set1_pkey(3)
+CMS_digest_create(3)
+CMS_digest_verify(3)
+CMS_is_detached(3)
+CMS_set1_signers_certs(3)
+CMS_set_detached(3)
+CMS_signed_add1_attr(3)
+CMS_signed_add1_attr_by_NID(3)
+CMS_signed_add1_attr_by_OBJ(3)
+CMS_signed_add1_attr_by_txt(3)
+CMS_signed_delete_attr(3)
+CMS_signed_get0_data_by_OBJ(3)
+CMS_signed_get_attr(3)
+CMS_signed_get_attr_by_NID(3)
+CMS_signed_get_attr_by_OBJ(3)
+CMS_signed_get_attr_count(3)
+CMS_stream(3)
+CMS_unsigned_add1_attr(3)
+CMS_unsigned_add1_attr_by_NID(3)
+CMS_unsigned_add1_attr_by_OBJ(3)
+CMS_unsigned_add1_attr_by_txt(3)
+CMS_unsigned_delete_attr(3)
+CMS_unsigned_get0_data_by_OBJ(3)
+CMS_unsigned_get_attr(3)
+CMS_unsigned_get_attr_by_NID(3)
+CMS_unsigned_get_attr_by_OBJ(3)
+CMS_unsigned_get_attr_count(3)
+COMP_CTX_free(3)
+COMP_CTX_get_method(3)
+COMP_CTX_get_type(3)
+COMP_CTX_new(3)
+COMP_compress_block(3)
+COMP_expand_block(3)
+COMP_get_name(3)
+COMP_get_type(3)
+COMP_zlib(3)
+CONF_dump_bio(3)
+CONF_dump_fp(3)
+CONF_free(3)
+CONF_get_number(3)
+CONF_get_section(3)
+CONF_get_string(3)
+CONF_imodule_get_flags(3)
+CONF_imodule_get_module(3)
+CONF_imodule_get_name(3)
+CONF_imodule_get_usr_data(3)
+CONF_imodule_get_value(3)
+CONF_imodule_set_flags(3)
+CONF_imodule_set_usr_data(3)
+CONF_load(3)
+CONF_load_bio(3)
+CONF_load_fp(3)
+CONF_module_add(3)
+CONF_module_get_usr_data(3)
+CONF_module_set_usr_data(3)
+CONF_parse_list(3)
+CONF_set_default_method(3)
+CONF_set_nconf(3)
+CRL_DIST_POINTS_it(3)
+CRL_DIST_POINTS_it(3)
+CRYPTO_128_unwrap(3)
+CRYPTO_128_unwrap_pad(3)
+CRYPTO_128_wrap(3)
+CRYPTO_128_wrap_pad(3)
+CRYPTO_THREAD_cleanup_local(3)
+CRYPTO_THREAD_compare_id(3)
+CRYPTO_THREAD_get_current_id(3)
+CRYPTO_THREAD_get_local(3)
+CRYPTO_THREAD_init_local(3)
+CRYPTO_THREAD_set_local(3)
+CRYPTO_cbc128_decrypt(3)
+CRYPTO_cbc128_encrypt(3)
+CRYPTO_ccm128_aad(3)
+CRYPTO_ccm128_decrypt(3)
+CRYPTO_ccm128_decrypt_ccm64(3)
+CRYPTO_ccm128_encrypt(3)
+CRYPTO_ccm128_encrypt_ccm64(3)
+CRYPTO_ccm128_init(3)
+CRYPTO_ccm128_setiv(3)
+CRYPTO_ccm128_tag(3)
+CRYPTO_cfb128_1_encrypt(3)
+CRYPTO_cfb128_8_encrypt(3)
+CRYPTO_cfb128_encrypt(3)
+CRYPTO_ctr128_encrypt(3)
+CRYPTO_ctr128_encrypt_ctr32(3)
+CRYPTO_cts128_decrypt(3)
+CRYPTO_cts128_decrypt_block(3)
+CRYPTO_cts128_encrypt(3)
+CRYPTO_cts128_encrypt_block(3)
+CRYPTO_dup_ex_data(3)
+CRYPTO_gcm128_aad(3)
+CRYPTO_gcm128_decrypt(3)
+CRYPTO_gcm128_decrypt_ctr32(3)
+CRYPTO_gcm128_encrypt(3)
+CRYPTO_gcm128_encrypt_ctr32(3)
+CRYPTO_gcm128_finish(3)
+CRYPTO_gcm128_init(3)
+CRYPTO_gcm128_new(3)
+CRYPTO_gcm128_release(3)
+CRYPTO_gcm128_setiv(3)
+CRYPTO_gcm128_tag(3)
+CRYPTO_mem_debug_free(3)
+CRYPTO_mem_debug_malloc(3)
+CRYPTO_mem_debug_realloc(3)
+CRYPTO_memdup(3)
+CRYPTO_nistcts128_decrypt(3)
+CRYPTO_nistcts128_decrypt_block(3)
+CRYPTO_nistcts128_encrypt(3)
+CRYPTO_nistcts128_encrypt_block(3)
+CRYPTO_ocb128_aad(3)
+CRYPTO_ocb128_cleanup(3)
+CRYPTO_ocb128_copy_ctx(3)
+CRYPTO_ocb128_decrypt(3)
+CRYPTO_ocb128_encrypt(3)
+CRYPTO_ocb128_finish(3)
+CRYPTO_ocb128_init(3)
+CRYPTO_ocb128_new(3)
+CRYPTO_ocb128_setiv(3)
+CRYPTO_ocb128_tag(3)
+CRYPTO_ofb128_encrypt(3)
+CRYPTO_secure_actual_size(3)
+CRYPTO_xts128_encrypt(3)
+Camellia_cbc_encrypt(3)
+Camellia_cfb128_encrypt(3)
+Camellia_cfb1_encrypt(3)
+Camellia_cfb8_encrypt(3)
+Camellia_ctr128_encrypt(3)
+Camellia_decrypt(3)
+Camellia_ecb_encrypt(3)
+Camellia_encrypt(3)
+Camellia_ofb128_encrypt(3)
+Camellia_set_key(3)
+DES_cbc_encrypt(3)
+DES_check_key_parity(3)
+DES_decrypt3(3)
+DES_ede3_cfb_encrypt(3)
+DES_encrypt1(3)
+DES_encrypt2(3)
+DES_encrypt3(3)
+DES_options(3)
+DH_KDF_X9_42(3)
+DH_check_pub_key(3)
+DH_compute_key_padded(3)
+DH_up_ref(3)
+DHparams_dup(3)
+DHparams_it(3)
+DHparams_it(3)
+DIRECTORYSTRING_it(3)
+DIRECTORYSTRING_it(3)
+DISPLAYTEXT_it(3)
+DISPLAYTEXT_it(3)
+DIST_POINT_NAME_it(3)
+DIST_POINT_NAME_it(3)
+DIST_POINT_it(3)
+DIST_POINT_it(3)
+DIST_POINT_set_dpname(3)
+DSA_get_method(3)
+DSA_up_ref(3)
+DSO_METHOD_openssl(3)
+DSO_bind_func(3)
+DSO_convert_filename(3)
+DSO_ctrl(3)
+DSO_dsobyaddr(3)
+DSO_flags(3)
+DSO_free(3)
+DSO_get_filename(3)
+DSO_global_lookup(3)
+DSO_load(3)
+DSO_merge(3)
+DSO_new(3)
+DSO_pathbyaddr(3)
+DSO_set_filename(3)
+DSO_up_ref(3)
+ECDH_KDF_X9_62(3)
+ECDH_compute_key(3)
+ECPARAMETERS_it(3)
+ECPARAMETERS_it(3)
+ECPKPARAMETERS_it(3)
+ECPKPARAMETERS_it(3)
+ECParameters_print(3)
+ECParameters_print_fp(3)
+EC_GROUP_get_mont_data(3)
+EC_KEY_METHOD_free(3)
+EC_KEY_METHOD_get_compute_key(3)
+EC_KEY_METHOD_get_init(3)
+EC_KEY_METHOD_get_keygen(3)
+EC_KEY_METHOD_get_sign(3)
+EC_KEY_METHOD_get_verify(3)
+EC_KEY_METHOD_new(3)
+EC_KEY_METHOD_set_compute_key(3)
+EC_KEY_METHOD_set_init(3)
+EC_KEY_METHOD_set_keygen(3)
+EC_KEY_METHOD_set_sign(3)
+EC_KEY_METHOD_set_verify(3)
+EC_KEY_OpenSSL(3)
+EC_KEY_can_sign(3)
+EC_KEY_get_default_method(3)
+EC_KEY_new_method(3)
+EC_KEY_print(3)
+EC_KEY_print_fp(3)
+EC_KEY_set_default_method(3)
+EC_curve_nid2nist(3)
+EC_curve_nist2nid(3)
+EDIPARTYNAME_it(3)
+EDIPARTYNAME_it(3)
+ENGINE_get_EC(3)
+ENGINE_get_default_EC(3)
+ENGINE_get_pkey_asn1_meth(3)
+ENGINE_get_pkey_asn1_meth_engine(3)
+ENGINE_get_pkey_asn1_meth_str(3)
+ENGINE_get_pkey_asn1_meths(3)
+ENGINE_get_pkey_meth(3)
+ENGINE_get_pkey_meth_engine(3)
+ENGINE_get_pkey_meths(3)
+ENGINE_get_ssl_client_cert_function(3)
+ENGINE_get_static_state(3)
+ENGINE_load_ssl_client_cert(3)
+ENGINE_pkey_asn1_find_str(3)
+ENGINE_register_EC(3)
+ENGINE_register_all_EC(3)
+ENGINE_register_all_pkey_asn1_meths(3)
+ENGINE_register_all_pkey_meths(3)
+ENGINE_register_pkey_asn1_meths(3)
+ENGINE_register_pkey_meths(3)
+ENGINE_set_EC(3)
+ENGINE_set_default_EC(3)
+ENGINE_set_default_pkey_asn1_meths(3)
+ENGINE_set_default_pkey_meths(3)
+ENGINE_set_load_ssl_client_cert_function(3)
+ENGINE_set_pkey_asn1_meths(3)
+ENGINE_set_pkey_meths(3)
+ENGINE_setup_bsd_cryptodev(3)
+ENGINE_unregister_EC(3)
+ENGINE_unregister_pkey_asn1_meths(3)
+ENGINE_unregister_pkey_meths(3)
+ERR_clear_last_mark(3)
+ERR_get_state(3)
+ERR_load_ASN1_strings(3)
+ERR_load_ASYNC_strings(3)
+ERR_load_BIO_strings(3)
+ERR_load_BN_strings(3)
+ERR_load_BUF_strings(3)
+ERR_load_CMS_strings(3)
+ERR_load_COMP_strings(3)
+ERR_load_CONF_strings(3)
+ERR_load_CRYPTO_strings(3)
+ERR_load_CRYPTOlib_strings(3)
+ERR_load_CT_strings(3)
+ERR_load_DH_strings(3)
+ERR_load_DSA_strings(3)
+ERR_load_DSO_strings(3)
+ERR_load_EC_strings(3)
+ERR_load_ENGINE_strings(3)
+ERR_load_ERR_strings(3)
+ERR_load_EVP_strings(3)
+ERR_load_KDF_strings(3)
+ERR_load_OBJ_strings(3)
+ERR_load_OCSP_strings(3)
+ERR_load_OSSL_STORE_strings(3)
+ERR_load_PEM_strings(3)
+ERR_load_PKCS12_strings(3)
+ERR_load_PKCS7_strings(3)
+ERR_load_RAND_strings(3)
+ERR_load_RSA_strings(3)
+ERR_load_TS_strings(3)
+ERR_load_UI_strings(3)
+ERR_load_X509V3_strings(3)
+ERR_load_X509_strings(3)
+ERR_load_strings_const(3)
+ERR_set_error_data(3)
+ERR_unload_strings(3)
+EVP_CIPHER_CTX_buf_noconst(3)
+EVP_CIPHER_CTX_clear_flags(3)
+EVP_CIPHER_CTX_copy(3)
+EVP_CIPHER_CTX_encrypting(3)
+EVP_CIPHER_CTX_iv(3)
+EVP_CIPHER_CTX_iv_noconst(3)
+EVP_CIPHER_CTX_num(3)
+EVP_CIPHER_CTX_original_iv(3)
+EVP_CIPHER_CTX_rand_key(3)
+EVP_CIPHER_CTX_set_flags(3)
+EVP_CIPHER_CTX_set_num(3)
+EVP_CIPHER_CTX_test_flags(3)
+EVP_CIPHER_do_all(3)
+EVP_CIPHER_do_all_sorted(3)
+EVP_CIPHER_get_asn1_iv(3)
+EVP_CIPHER_impl_ctx_size(3)
+EVP_CIPHER_set_asn1_iv(3)
+EVP_Cipher(3)
+EVP_Digest(3)
+EVP_MD_CTX_pkey_ctx(3)
+EVP_MD_CTX_set_update_fn(3)
+EVP_MD_CTX_update_fn(3)
+EVP_MD_do_all(3)
+EVP_MD_do_all_sorted(3)
+EVP_MD_flags(3)
+EVP_PBE_CipherInit(3)
+EVP_PBE_alg_add(3)
+EVP_PBE_alg_add_type(3)
+EVP_PBE_cleanup(3)
+EVP_PBE_find(3)
+EVP_PBE_get(3)
+EVP_PBE_scrypt(3)
+EVP_PKCS82PKEY(3)
+EVP_PKEY2PKCS8(3)
+EVP_PKEY_CTX_ctrl_uint64(3)
+EVP_PKEY_CTX_get0_peerkey(3)
+EVP_PKEY_CTX_get0_pkey(3)
+EVP_PKEY_CTX_get_data(3)
+EVP_PKEY_CTX_get_operation(3)
+EVP_PKEY_CTX_hex2ctrl(3)
+EVP_PKEY_CTX_md(3)
+EVP_PKEY_CTX_set0_keygen_info(3)
+EVP_PKEY_CTX_set_data(3)
+EVP_PKEY_CTX_str2ctrl(3)
+EVP_PKEY_add1_attr(3)
+EVP_PKEY_add1_attr_by_NID(3)
+EVP_PKEY_add1_attr_by_OBJ(3)
+EVP_PKEY_add1_attr_by_txt(3)
+EVP_PKEY_assign(3)
+EVP_PKEY_bits(3)
+EVP_PKEY_decrypt_old(3)
+EVP_PKEY_delete_attr(3)
+EVP_PKEY_encrypt_old(3)
+EVP_PKEY_get0(3)
+EVP_PKEY_get0_poly1305(3)
+EVP_PKEY_get0_siphash(3)
+EVP_PKEY_get_attr(3)
+EVP_PKEY_get_attr_by_NID(3)
+EVP_PKEY_get_attr_by_OBJ(3)
+EVP_PKEY_get_attr_count(3)
+EVP_PKEY_save_parameters(3)
+EVP_PKEY_set_type(3)
+EVP_PKEY_set_type_str(3)
+EVP_add_alg_module(3)
+EVP_add_cipher(3)
+EVP_add_digest(3)
+EVP_aes_128_cfb128(3)
+EVP_aes_192_cfb128(3)
+EVP_aes_256_cfb128(3)
+EVP_aria_128_cfb128(3)
+EVP_aria_192_cfb128(3)
+EVP_aria_256_cfb128(3)
+EVP_bf_cfb64(3)
+EVP_camellia_128_cfb128(3)
+EVP_camellia_192_cfb128(3)
+EVP_camellia_256_cfb128(3)
+EVP_cast5_cfb64(3)
+EVP_des_cfb64(3)
+EVP_des_ede3_cfb64(3)
+EVP_des_ede3_ecb(3)
+EVP_des_ede_cfb64(3)
+EVP_des_ede_ecb(3)
+EVP_get_pw_prompt(3)
+EVP_idea_cfb64(3)
+EVP_md5_sha1(3)
+EVP_rc2_cfb64(3)
+EVP_rc5_32_12_16_cfb64(3)
+EVP_read_pw_string(3)
+EVP_read_pw_string_min(3)
+EVP_seed_cfb128(3)
+EVP_set_pw_prompt(3)
+EVP_sm4_cfb128(3)
+EXTENDED_KEY_USAGE_it(3)
+EXTENDED_KEY_USAGE_it(3)
+FIPS_mode(3)
+FIPS_mode_set(3)
+GENERAL_NAMES_it(3)
+GENERAL_NAMES_it(3)
+GENERAL_NAME_cmp(3)
+GENERAL_NAME_get0_otherName(3)
+GENERAL_NAME_get0_value(3)
+GENERAL_NAME_it(3)
+GENERAL_NAME_it(3)
+GENERAL_NAME_print(3)
+GENERAL_NAME_set0_othername(3)
+GENERAL_NAME_set0_value(3)
+GENERAL_SUBTREE_it(3)
+GENERAL_SUBTREE_it(3)
+IDEA_cbc_encrypt(3)
+IDEA_cfb64_encrypt(3)
+IDEA_ecb_encrypt(3)
+IDEA_encrypt(3)
+IDEA_ofb64_encrypt(3)
+IDEA_options(3)
+IDEA_set_decrypt_key(3)
+IDEA_set_encrypt_key(3)
+INT32_it(3)
+INT32_it(3)
+INT64_it(3)
+INT64_it(3)
+IPAddressChoice_it(3)
+IPAddressChoice_it(3)
+IPAddressFamily_it(3)
+IPAddressFamily_it(3)
+IPAddressOrRange_it(3)
+IPAddressOrRange_it(3)
+IPAddressRange_it(3)
+IPAddressRange_it(3)
+ISSUING_DIST_POINT_it(3)
+ISSUING_DIST_POINT_it(3)
+LONG_it(3)
+LONG_it(3)
+MD2_options(3)
+MD4_Transform(3)
+MD5_Transform(3)
+NAME_CONSTRAINTS_check(3)
+NAME_CONSTRAINTS_check_CN(3)
+NAME_CONSTRAINTS_it(3)
+NAME_CONSTRAINTS_it(3)
+NAMING_AUTHORITY_it(3)
+NAMING_AUTHORITY_it(3)
+NCONF_WIN32(3)
+NCONF_default(3)
+NCONF_dump_bio(3)
+NCONF_dump_fp(3)
+NCONF_free(3)
+NCONF_free_data(3)
+NCONF_get_number_e(3)
+NCONF_get_section(3)
+NCONF_get_string(3)
+NCONF_load(3)
+NCONF_load_bio(3)
+NCONF_load_fp(3)
+NCONF_new(3)
+NETSCAPE_CERT_SEQUENCE_it(3)
+NETSCAPE_CERT_SEQUENCE_it(3)
+NETSCAPE_SPKAC_it(3)
+NETSCAPE_SPKAC_it(3)
+NETSCAPE_SPKI_b64_decode(3)
+NETSCAPE_SPKI_b64_encode(3)
+NETSCAPE_SPKI_get_pubkey(3)
+NETSCAPE_SPKI_it(3)
+NETSCAPE_SPKI_it(3)
+NETSCAPE_SPKI_print(3)
+NETSCAPE_SPKI_set_pubkey(3)
+NETSCAPE_SPKI_sign(3)
+NETSCAPE_SPKI_verify(3)
+NOTICEREF_it(3)
+NOTICEREF_it(3)
+OBJ_NAME_add(3)
+OBJ_NAME_cleanup(3)
+OBJ_NAME_do_all(3)
+OBJ_NAME_do_all_sorted(3)
+OBJ_NAME_get(3)
+OBJ_NAME_init(3)
+OBJ_NAME_new_index(3)
+OBJ_NAME_remove(3)
+OBJ_add_object(3)
+OBJ_add_sigid(3)
+OBJ_bsearch_(3)
+OBJ_bsearch_ex_(3)
+OBJ_create_objects(3)
+OBJ_find_sigid_algs(3)
+OBJ_find_sigid_by_algs(3)
+OBJ_new_nid(3)
+OBJ_sigid_free(3)
+OCSP_BASICRESP_add1_ext_i2d(3)
+OCSP_BASICRESP_add_ext(3)
+OCSP_BASICRESP_delete_ext(3)
+OCSP_BASICRESP_get1_ext_d2i(3)
+OCSP_BASICRESP_get_ext(3)
+OCSP_BASICRESP_get_ext_by_NID(3)
+OCSP_BASICRESP_get_ext_by_OBJ(3)
+OCSP_BASICRESP_get_ext_by_critical(3)
+OCSP_BASICRESP_get_ext_count(3)
+OCSP_BASICRESP_it(3)
+OCSP_BASICRESP_it(3)
+OCSP_CERTID_it(3)
+OCSP_CERTID_it(3)
+OCSP_CERTSTATUS_it(3)
+OCSP_CERTSTATUS_it(3)
+OCSP_CRLID_it(3)
+OCSP_CRLID_it(3)
+OCSP_ONEREQ_add1_ext_i2d(3)
+OCSP_ONEREQ_add_ext(3)
+OCSP_ONEREQ_delete_ext(3)
+OCSP_ONEREQ_get1_ext_d2i(3)
+OCSP_ONEREQ_get_ext(3)
+OCSP_ONEREQ_get_ext_by_NID(3)
+OCSP_ONEREQ_get_ext_by_OBJ(3)
+OCSP_ONEREQ_get_ext_by_critical(3)
+OCSP_ONEREQ_get_ext_count(3)
+OCSP_ONEREQ_it(3)
+OCSP_ONEREQ_it(3)
+OCSP_REQINFO_it(3)
+OCSP_REQINFO_it(3)
+OCSP_REQUEST_add1_ext_i2d(3)
+OCSP_REQUEST_add_ext(3)
+OCSP_REQUEST_delete_ext(3)
+OCSP_REQUEST_get1_ext_d2i(3)
+OCSP_REQUEST_get_ext(3)
+OCSP_REQUEST_get_ext_by_NID(3)
+OCSP_REQUEST_get_ext_by_OBJ(3)
+OCSP_REQUEST_get_ext_by_critical(3)
+OCSP_REQUEST_get_ext_count(3)
+OCSP_REQUEST_it(3)
+OCSP_REQUEST_it(3)
+OCSP_REQUEST_print(3)
+OCSP_REQ_CTX_get0_mem_bio(3)
+OCSP_REQ_CTX_http(3)
+OCSP_REQ_CTX_i2d(3)
+OCSP_REQ_CTX_nbio(3)
+OCSP_REQ_CTX_nbio_d2i(3)
+OCSP_REQ_CTX_new(3)
+OCSP_RESPBYTES_it(3)
+OCSP_RESPBYTES_it(3)
+OCSP_RESPDATA_it(3)
+OCSP_RESPDATA_it(3)
+OCSP_RESPID_it(3)
+OCSP_RESPID_it(3)
+OCSP_RESPONSE_it(3)
+OCSP_RESPONSE_it(3)
+OCSP_RESPONSE_print(3)
+OCSP_REVOKEDINFO_it(3)
+OCSP_REVOKEDINFO_it(3)
+OCSP_SERVICELOC_it(3)
+OCSP_SERVICELOC_it(3)
+OCSP_SIGNATURE_it(3)
+OCSP_SIGNATURE_it(3)
+OCSP_SINGLERESP_add1_ext_i2d(3)
+OCSP_SINGLERESP_add_ext(3)
+OCSP_SINGLERESP_delete_ext(3)
+OCSP_SINGLERESP_get0_id(3)
+OCSP_SINGLERESP_get1_ext_d2i(3)
+OCSP_SINGLERESP_get_ext(3)
+OCSP_SINGLERESP_get_ext_by_NID(3)
+OCSP_SINGLERESP_get_ext_by_OBJ(3)
+OCSP_SINGLERESP_get_ext_by_critical(3)
+OCSP_SINGLERESP_get_ext_count(3)
+OCSP_SINGLERESP_it(3)
+OCSP_SINGLERESP_it(3)
+OCSP_accept_responses_new(3)
+OCSP_archive_cutoff_new(3)
+OCSP_basic_add1_cert(3)
+OCSP_basic_add1_status(3)
+OCSP_cert_status_str(3)
+OCSP_crlID2_new(3)
+OCSP_crlID_new(3)
+OCSP_crl_reason_str(3)
+OCSP_onereq_get0_id(3)
+OCSP_parse_url(3)
+OCSP_request_is_signed(3)
+OCSP_request_set1_name(3)
+OCSP_request_verify(3)
+OCSP_response_status_str(3)
+OCSP_url_svcloc_new(3)
+OPENSSL_DIR_end(3)
+OPENSSL_DIR_read(3)
+OPENSSL_LH_delete(3)
+OPENSSL_LH_doall(3)
+OPENSSL_LH_doall_arg(3)
+OPENSSL_LH_error(3)
+OPENSSL_LH_free(3)
+OPENSSL_LH_get_down_load(3)
+OPENSSL_LH_insert(3)
+OPENSSL_LH_new(3)
+OPENSSL_LH_num_items(3)
+OPENSSL_LH_retrieve(3)
+OPENSSL_LH_set_down_load(3)
+OPENSSL_LH_strhash(3)
+OPENSSL_asc2uni(3)
+OPENSSL_die(3)
+OPENSSL_gmtime(3)
+OPENSSL_gmtime_adj(3)
+OPENSSL_gmtime_diff(3)
+OPENSSL_init(3)
+OPENSSL_isservice(3)
+OPENSSL_issetugid(3)
+OPENSSL_memcmp(3)
+OPENSSL_sk_deep_copy(3)
+OPENSSL_sk_delete(3)
+OPENSSL_sk_delete_ptr(3)
+OPENSSL_sk_dup(3)
+OPENSSL_sk_find(3)
+OPENSSL_sk_find_ex(3)
+OPENSSL_sk_free(3)
+OPENSSL_sk_insert(3)
+OPENSSL_sk_is_sorted(3)
+OPENSSL_sk_new(3)
+OPENSSL_sk_new_null(3)
+OPENSSL_sk_new_reserve(3)
+OPENSSL_sk_num(3)
+OPENSSL_sk_pop(3)
+OPENSSL_sk_pop_free(3)
+OPENSSL_sk_push(3)
+OPENSSL_sk_reserve(3)
+OPENSSL_sk_set(3)
+OPENSSL_sk_set_cmp_func(3)
+OPENSSL_sk_shift(3)
+OPENSSL_sk_sort(3)
+OPENSSL_sk_unshift(3)
+OPENSSL_sk_value(3)
+OPENSSL_sk_zero(3)
+OPENSSL_strnlen(3)
+OPENSSL_uni2asc(3)
+OPENSSL_uni2utf8(3)
+OPENSSL_utf82uni(3)
+OSSL_STORE_do_all_loaders(3)
+OSSL_STORE_vctrl(3)
+OTHERNAME_cmp(3)
+OTHERNAME_it(3)
+OTHERNAME_it(3)
+PBE2PARAM_it(3)
+PBE2PARAM_it(3)
+PBEPARAM_it(3)
+PBEPARAM_it(3)
+PBKDF2PARAM_it(3)
+PBKDF2PARAM_it(3)
+PEM_ASN1_read(3)
+PEM_ASN1_read_bio(3)
+PEM_ASN1_write(3)
+PEM_ASN1_write_bio(3)
+PEM_SignFinal(3)
+PEM_SignInit(3)
+PEM_SignUpdate(3)
+PEM_X509_INFO_read(3)
+PEM_X509_INFO_read_bio(3)
+PEM_X509_INFO_write_bio(3)
+PEM_def_callback(3)
+PEM_dek_info(3)
+PEM_proc_type(3)
+PEM_read_bio_ECPrivateKey(3)
+PEM_read_bio_Parameters(3)
+PEM_write_bio_ASN1_stream(3)
+PEM_write_bio_Parameters(3)
+PKCS12_AUTHSAFES_it(3)
+PKCS12_AUTHSAFES_it(3)
+PKCS12_BAGS_it(3)
+PKCS12_BAGS_it(3)
+PKCS12_MAC_DATA_it(3)
+PKCS12_MAC_DATA_it(3)
+PKCS12_PBE_add(3)
+PKCS12_PBE_keyivgen(3)
+PKCS12_SAFEBAGS_it(3)
+PKCS12_SAFEBAGS_it(3)
+PKCS12_SAFEBAG_create0_p8inf(3)
+PKCS12_SAFEBAG_create0_pkcs8(3)
+PKCS12_SAFEBAG_create_cert(3)
+PKCS12_SAFEBAG_create_crl(3)
+PKCS12_SAFEBAG_create_pkcs8_encrypt(3)
+PKCS12_SAFEBAG_get0_attr(3)
+PKCS12_SAFEBAG_get0_attrs(3)
+PKCS12_SAFEBAG_get0_p8inf(3)
+PKCS12_SAFEBAG_get0_pkcs8(3)
+PKCS12_SAFEBAG_get0_safes(3)
+PKCS12_SAFEBAG_get0_type(3)
+PKCS12_SAFEBAG_get1_cert(3)
+PKCS12_SAFEBAG_get1_crl(3)
+PKCS12_SAFEBAG_get_bag_nid(3)
+PKCS12_SAFEBAG_get_nid(3)
+PKCS12_SAFEBAG_it(3)
+PKCS12_SAFEBAG_it(3)
+PKCS12_add_CSPName_asc(3)
+PKCS12_add_cert(3)
+PKCS12_add_friendlyname_asc(3)
+PKCS12_add_friendlyname_uni(3)
+PKCS12_add_friendlyname_utf8(3)
+PKCS12_add_key(3)
+PKCS12_add_localkeyid(3)
+PKCS12_add_safe(3)
+PKCS12_add_safes(3)
+PKCS12_decrypt_skey(3)
+PKCS12_gen_mac(3)
+PKCS12_get0_mac(3)
+PKCS12_get_attr(3)
+PKCS12_get_attr_gen(3)
+PKCS12_get_friendlyname(3)
+PKCS12_init(3)
+PKCS12_it(3)
+PKCS12_it(3)
+PKCS12_item_decrypt_d2i(3)
+PKCS12_item_i2d_encrypt(3)
+PKCS12_item_pack_safebag(3)
+PKCS12_key_gen_asc(3)
+PKCS12_key_gen_uni(3)
+PKCS12_key_gen_utf8(3)
+PKCS12_mac_present(3)
+PKCS12_pack_authsafes(3)
+PKCS12_pack_p7data(3)
+PKCS12_pack_p7encdata(3)
+PKCS12_pbe_crypt(3)
+PKCS12_set_mac(3)
+PKCS12_setup_mac(3)
+PKCS12_unpack_authsafes(3)
+PKCS12_unpack_p7data(3)
+PKCS12_unpack_p7encdata(3)
+PKCS12_verify_mac(3)
+PKCS1_MGF1(3)
+PKCS5_PBE_add(3)
+PKCS5_PBE_keyivgen(3)
+PKCS5_pbe2_set(3)
+PKCS5_pbe2_set_iv(3)
+PKCS5_pbe2_set_scrypt(3)
+PKCS5_pbe_set(3)
+PKCS5_pbe_set0_algor(3)
+PKCS5_pbkdf2_set(3)
+PKCS5_v2_PBE_keyivgen(3)
+PKCS5_v2_scrypt_keyivgen(3)
+PKCS7_ATTR_SIGN_it(3)
+PKCS7_ATTR_SIGN_it(3)
+PKCS7_ATTR_VERIFY_it(3)
+PKCS7_ATTR_VERIFY_it(3)
+PKCS7_DIGEST_it(3)
+PKCS7_DIGEST_it(3)
+PKCS7_ENCRYPT_it(3)
+PKCS7_ENCRYPT_it(3)
+PKCS7_ENC_CONTENT_it(3)
+PKCS7_ENC_CONTENT_it(3)
+PKCS7_ENVELOPE_it(3)
+PKCS7_ENVELOPE_it(3)
+PKCS7_ISSUER_AND_SERIAL_it(3)
+PKCS7_ISSUER_AND_SERIAL_it(3)
+PKCS7_RECIP_INFO_get0_alg(3)
+PKCS7_RECIP_INFO_it(3)
+PKCS7_RECIP_INFO_it(3)
+PKCS7_RECIP_INFO_set(3)
+PKCS7_SIGNED_it(3)
+PKCS7_SIGNED_it(3)
+PKCS7_SIGNER_INFO_get0_algs(3)
+PKCS7_SIGNER_INFO_it(3)
+PKCS7_SIGNER_INFO_it(3)
+PKCS7_SIGNER_INFO_set(3)
+PKCS7_SIGNER_INFO_sign(3)
+PKCS7_SIGN_ENVELOPE_it(3)
+PKCS7_SIGN_ENVELOPE_it(3)
+PKCS7_add0_attrib_signing_time(3)
+PKCS7_add1_attrib_digest(3)
+PKCS7_add_attrib_content_type(3)
+PKCS7_add_attrib_smimecap(3)
+PKCS7_add_attribute(3)
+PKCS7_add_certificate(3)
+PKCS7_add_crl(3)
+PKCS7_add_recipient(3)
+PKCS7_add_recipient_info(3)
+PKCS7_add_signature(3)
+PKCS7_add_signed_attribute(3)
+PKCS7_add_signer(3)
+PKCS7_cert_from_signer_info(3)
+PKCS7_content_new(3)
+PKCS7_ctrl(3)
+PKCS7_dataDecode(3)
+PKCS7_dataFinal(3)
+PKCS7_dataInit(3)
+PKCS7_dataVerify(3)
+PKCS7_digest_from_attributes(3)
+PKCS7_final(3)
+PKCS7_get_attribute(3)
+PKCS7_get_issuer_and_serial(3)
+PKCS7_get_signed_attribute(3)
+PKCS7_get_signer_info(3)
+PKCS7_get_smimecap(3)
+PKCS7_it(3)
+PKCS7_it(3)
+PKCS7_set0_type_other(3)
+PKCS7_set_attributes(3)
+PKCS7_set_cipher(3)
+PKCS7_set_content(3)
+PKCS7_set_digest(3)
+PKCS7_set_signed_attributes(3)
+PKCS7_set_type(3)
+PKCS7_signatureVerify(3)
+PKCS7_simple_smimecap(3)
+PKCS7_stream(3)
+PKCS7_to_TS_TST_INFO(3)
+PKCS8_PRIV_KEY_INFO_it(3)
+PKCS8_PRIV_KEY_INFO_it(3)
+PKCS8_add_keyusage(3)
+PKCS8_decrypt(3)
+PKCS8_encrypt(3)
+PKCS8_get_attr(3)
+PKCS8_pkey_add1_attr_by_NID(3)
+PKCS8_pkey_get0(3)
+PKCS8_pkey_get0_attrs(3)
+PKCS8_pkey_set0(3)
+PKCS8_set0_pbe(3)
+PKEY_USAGE_PERIOD_it(3)
+PKEY_USAGE_PERIOD_it(3)
+POLICYINFO_it(3)
+POLICYINFO_it(3)
+POLICYQUALINFO_it(3)
+POLICYQUALINFO_it(3)
+POLICY_CONSTRAINTS_it(3)
+POLICY_CONSTRAINTS_it(3)
+POLICY_MAPPINGS_it(3)
+POLICY_MAPPINGS_it(3)
+POLICY_MAPPING_it(3)
+POLICY_MAPPING_it(3)
+PROFESSION_INFO_it(3)
+PROFESSION_INFO_it(3)
+PROXY_CERT_INFO_EXTENSION_it(3)
+PROXY_CERT_INFO_EXTENSION_it(3)
+PROXY_POLICY_it(3)
+PROXY_POLICY_it(3)
+RAND_set_rand_engine(3)
+RC2_cbc_encrypt(3)
+RC2_cfb64_encrypt(3)
+RC2_decrypt(3)
+RC2_ecb_encrypt(3)
+RC2_encrypt(3)
+RC2_ofb64_encrypt(3)
+RC2_set_key(3)
+RC4_options(3)
+RC5_32_cbc_encrypt(3)
+RC5_32_cfb64_encrypt(3)
+RC5_32_decrypt(3)
+RC5_32_ecb_encrypt(3)
+RC5_32_encrypt(3)
+RC5_32_ofb64_encrypt(3)
+RC5_32_set_key(3)
+RIPEMD160_Transform(3)
+RSAPrivateKey_it(3)
+RSAPrivateKey_it(3)
+RSAPublicKey_it(3)
+RSAPublicKey_it(3)
+RSA_OAEP_PARAMS_it(3)
+RSA_OAEP_PARAMS_it(3)
+RSA_PSS_PARAMS_it(3)
+RSA_PSS_PARAMS_it(3)
+RSA_X931_derive_ex(3)
+RSA_X931_generate_key_ex(3)
+RSA_X931_hash_id(3)
+RSA_null_method(3)
+RSA_padding_add_PKCS1_OAEP_mgf1(3)
+RSA_padding_add_PKCS1_PSS(3)
+RSA_padding_add_PKCS1_PSS_mgf1(3)
+RSA_padding_add_X931(3)
+RSA_padding_check_PKCS1_OAEP_mgf1(3)
+RSA_padding_check_X931(3)
+RSA_pkey_ctx_ctrl(3)
+RSA_setup_blinding(3)
+RSA_up_ref(3)
+RSA_verify_PKCS1_PSS(3)
+RSA_verify_PKCS1_PSS_mgf1(3)
+SCRYPT_PARAMS_it(3)
+SCRYPT_PARAMS_it(3)
+SEED_cbc_encrypt(3)
+SEED_cfb128_encrypt(3)
+SEED_decrypt(3)
+SEED_ecb_encrypt(3)
+SEED_encrypt(3)
+SEED_ofb128_encrypt(3)
+SEED_set_key(3)
+SHA1_Transform(3)
+SHA256_Transform(3)
+SHA512_Transform(3)
+SMIME_crlf_copy(3)
+SMIME_read_ASN1(3)
+SMIME_text(3)
+SMIME_write_ASN1(3)
+SRP_Calc_A(3)
+SRP_Calc_B(3)
+SRP_Calc_client_key(3)
+SRP_Calc_server_key(3)
+SRP_Calc_u(3)
+SRP_Calc_x(3)
+SRP_VBASE_free(3)
+SRP_VBASE_get1_by_user(3)
+SRP_VBASE_get_by_user(3)
+SRP_VBASE_init(3)
+SRP_VBASE_new(3)
+SRP_Verify_A_mod_N(3)
+SRP_Verify_B_mod_N(3)
+SRP_check_known_gN_param(3)
+SRP_create_verifier(3)
+SRP_create_verifier_BN(3)
+SRP_get_default_gN(3)
+SRP_user_pwd_free(3)
+SSL_CTX_set0_ctlog_store(3)
+SXNETID_it(3)
+SXNETID_it(3)
+SXNET_add_id_INTEGER(3)
+SXNET_add_id_asc(3)
+SXNET_add_id_ulong(3)
+SXNET_get_id_INTEGER(3)
+SXNET_get_id_asc(3)
+SXNET_get_id_ulong(3)
+SXNET_it(3)
+SXNET_it(3)
+TS_ACCURACY_get_micros(3)
+TS_ACCURACY_get_millis(3)
+TS_ACCURACY_get_seconds(3)
+TS_ACCURACY_set_micros(3)
+TS_ACCURACY_set_millis(3)
+TS_ACCURACY_set_seconds(3)
+TS_ASN1_INTEGER_print_bio(3)
+TS_CONF_get_tsa_section(3)
+TS_CONF_load_cert(3)
+TS_CONF_load_certs(3)
+TS_CONF_load_key(3)
+TS_CONF_set_accuracy(3)
+TS_CONF_set_certs(3)
+TS_CONF_set_clock_precision_digits(3)
+TS_CONF_set_crypto_device(3)
+TS_CONF_set_def_policy(3)
+TS_CONF_set_default_engine(3)
+TS_CONF_set_digests(3)
+TS_CONF_set_ess_cert_id_chain(3)
+TS_CONF_set_ess_cert_id_digest(3)
+TS_CONF_set_ordering(3)
+TS_CONF_set_policies(3)
+TS_CONF_set_serial(3)
+TS_CONF_set_signer_cert(3)
+TS_CONF_set_signer_digest(3)
+TS_CONF_set_signer_key(3)
+TS_CONF_set_tsa_name(3)
+TS_MSG_IMPRINT_get_algo(3)
+TS_MSG_IMPRINT_get_msg(3)
+TS_MSG_IMPRINT_print_bio(3)
+TS_MSG_IMPRINT_set_algo(3)
+TS_MSG_IMPRINT_set_msg(3)
+TS_OBJ_print_bio(3)
+TS_REQ_add_ext(3)
+TS_REQ_delete_ext(3)
+TS_REQ_ext_free(3)
+TS_REQ_get_cert_req(3)
+TS_REQ_get_ext(3)
+TS_REQ_get_ext_by_NID(3)
+TS_REQ_get_ext_by_OBJ(3)
+TS_REQ_get_ext_by_critical(3)
+TS_REQ_get_ext_count(3)
+TS_REQ_get_ext_d2i(3)
+TS_REQ_get_exts(3)
+TS_REQ_get_msg_imprint(3)
+TS_REQ_get_nonce(3)
+TS_REQ_get_policy_id(3)
+TS_REQ_get_version(3)
+TS_REQ_print_bio(3)
+TS_REQ_set_cert_req(3)
+TS_REQ_set_msg_imprint(3)
+TS_REQ_set_nonce(3)
+TS_REQ_set_policy_id(3)
+TS_REQ_set_version(3)
+TS_REQ_to_TS_VERIFY_CTX(3)
+TS_RESP_CTX_add_failure_info(3)
+TS_RESP_CTX_add_flags(3)
+TS_RESP_CTX_add_md(3)
+TS_RESP_CTX_add_policy(3)
+TS_RESP_CTX_free(3)
+TS_RESP_CTX_get_request(3)
+TS_RESP_CTX_get_tst_info(3)
+TS_RESP_CTX_new(3)
+TS_RESP_CTX_set_accuracy(3)
+TS_RESP_CTX_set_certs(3)
+TS_RESP_CTX_set_clock_precision_digits(3)
+TS_RESP_CTX_set_def_policy(3)
+TS_RESP_CTX_set_ess_cert_id_digest(3)
+TS_RESP_CTX_set_extension_cb(3)
+TS_RESP_CTX_set_serial_cb(3)
+TS_RESP_CTX_set_signer_cert(3)
+TS_RESP_CTX_set_signer_digest(3)
+TS_RESP_CTX_set_signer_key(3)
+TS_RESP_CTX_set_status_info(3)
+TS_RESP_CTX_set_status_info_cond(3)
+TS_RESP_CTX_set_time_cb(3)
+TS_RESP_create_response(3)
+TS_RESP_get_status_info(3)
+TS_RESP_get_token(3)
+TS_RESP_get_tst_info(3)
+TS_RESP_print_bio(3)
+TS_RESP_set_status_info(3)
+TS_RESP_set_tst_info(3)
+TS_RESP_verify_response(3)
+TS_RESP_verify_signature(3)
+TS_RESP_verify_token(3)
+TS_STATUS_INFO_get0_failure_info(3)
+TS_STATUS_INFO_get0_status(3)
+TS_STATUS_INFO_get0_text(3)
+TS_STATUS_INFO_print_bio(3)
+TS_STATUS_INFO_set_status(3)
+TS_TST_INFO_add_ext(3)
+TS_TST_INFO_delete_ext(3)
+TS_TST_INFO_ext_free(3)
+TS_TST_INFO_get_accuracy(3)
+TS_TST_INFO_get_ext(3)
+TS_TST_INFO_get_ext_by_NID(3)
+TS_TST_INFO_get_ext_by_OBJ(3)
+TS_TST_INFO_get_ext_by_critical(3)
+TS_TST_INFO_get_ext_count(3)
+TS_TST_INFO_get_ext_d2i(3)
+TS_TST_INFO_get_exts(3)
+TS_TST_INFO_get_msg_imprint(3)
+TS_TST_INFO_get_nonce(3)
+TS_TST_INFO_get_ordering(3)
+TS_TST_INFO_get_policy_id(3)
+TS_TST_INFO_get_serial(3)
+TS_TST_INFO_get_time(3)
+TS_TST_INFO_get_tsa(3)
+TS_TST_INFO_get_version(3)
+TS_TST_INFO_print_bio(3)
+TS_TST_INFO_set_accuracy(3)
+TS_TST_INFO_set_msg_imprint(3)
+TS_TST_INFO_set_nonce(3)
+TS_TST_INFO_set_ordering(3)
+TS_TST_INFO_set_policy_id(3)
+TS_TST_INFO_set_serial(3)
+TS_TST_INFO_set_time(3)
+TS_TST_INFO_set_tsa(3)
+TS_TST_INFO_set_version(3)
+TS_VERIFY_CTS_set_certs(3)
+TS_VERIFY_CTX_add_flags(3)
+TS_VERIFY_CTX_cleanup(3)
+TS_VERIFY_CTX_free(3)
+TS_VERIFY_CTX_init(3)
+TS_VERIFY_CTX_new(3)
+TS_VERIFY_CTX_set_data(3)
+TS_VERIFY_CTX_set_flags(3)
+TS_VERIFY_CTX_set_imprint(3)
+TS_VERIFY_CTX_set_store(3)
+TS_X509_ALGOR_print_bio(3)
+TS_ext_print_bio(3)
+TXT_DB_create_index(3)
+TXT_DB_free(3)
+TXT_DB_get_by_index(3)
+TXT_DB_insert(3)
+TXT_DB_read(3)
+TXT_DB_write(3)
+UINT32_it(3)
+UINT32_it(3)
+UINT64_it(3)
+UINT64_it(3)
+USERNOTICE_it(3)
+USERNOTICE_it(3)
+UTF8_getc(3)
+UTF8_putc(3)
+WHIRLPOOL(3)
+WHIRLPOOL_BitUpdate(3)
+WHIRLPOOL_Final(3)
+WHIRLPOOL_Init(3)
+WHIRLPOOL_Update(3)
+X509V3_EXT_CRL_add_conf(3)
+X509V3_EXT_CRL_add_nconf(3)
+X509V3_EXT_REQ_add_conf(3)
+X509V3_EXT_REQ_add_nconf(3)
+X509V3_EXT_add(3)
+X509V3_EXT_add_alias(3)
+X509V3_EXT_add_conf(3)
+X509V3_EXT_add_list(3)
+X509V3_EXT_add_nconf(3)
+X509V3_EXT_add_nconf_sk(3)
+X509V3_EXT_cleanup(3)
+X509V3_EXT_conf(3)
+X509V3_EXT_conf_nid(3)
+X509V3_EXT_get(3)
+X509V3_EXT_get_nid(3)
+X509V3_EXT_nconf(3)
+X509V3_EXT_nconf_nid(3)
+X509V3_EXT_print(3)
+X509V3_EXT_print_fp(3)
+X509V3_EXT_val_prn(3)
+X509V3_NAME_from_section(3)
+X509V3_add_standard_extensions(3)
+X509V3_add_value(3)
+X509V3_add_value_bool(3)
+X509V3_add_value_bool_nf(3)
+X509V3_add_value_int(3)
+X509V3_add_value_uchar(3)
+X509V3_conf_free(3)
+X509V3_extensions_print(3)
+X509V3_get_section(3)
+X509V3_get_string(3)
+X509V3_get_value_bool(3)
+X509V3_get_value_int(3)
+X509V3_parse_list(3)
+X509V3_section_free(3)
+X509V3_set_conf_lhash(3)
+X509V3_set_ctx(3)
+X509V3_set_nconf(3)
+X509V3_string_free(3)
+X509_ALGORS_it(3)
+X509_ALGORS_it(3)
+X509_ALGOR_it(3)
+X509_ALGOR_it(3)
+X509_ATTRIBUTE_count(3)
+X509_ATTRIBUTE_create(3)
+X509_ATTRIBUTE_create_by_NID(3)
+X509_ATTRIBUTE_create_by_OBJ(3)
+X509_ATTRIBUTE_create_by_txt(3)
+X509_ATTRIBUTE_get0_data(3)
+X509_ATTRIBUTE_get0_object(3)
+X509_ATTRIBUTE_get0_type(3)
+X509_ATTRIBUTE_it(3)
+X509_ATTRIBUTE_it(3)
+X509_ATTRIBUTE_set1_data(3)
+X509_ATTRIBUTE_set1_object(3)
+X509_CERT_AUX_it(3)
+X509_CERT_AUX_it(3)
+X509_CINF_it(3)
+X509_CINF_it(3)
+X509_CRL_INFO_it(3)
+X509_CRL_INFO_it(3)
+X509_CRL_METHOD_free(3)
+X509_CRL_METHOD_new(3)
+X509_CRL_check_suiteb(3)
+X509_CRL_cmp(3)
+X509_CRL_diff(3)
+X509_CRL_get_lastUpdate(3)
+X509_CRL_get_meth_data(3)
+X509_CRL_get_nextUpdate(3)
+X509_CRL_http_nbio(3)
+X509_CRL_it(3)
+X509_CRL_it(3)
+X509_CRL_match(3)
+X509_CRL_print(3)
+X509_CRL_print_ex(3)
+X509_CRL_print_fp(3)
+X509_CRL_set_default_method(3)
+X509_CRL_set_meth_data(3)
+X509_CRL_up_ref(3)
+X509_EXTENSIONS_it(3)
+X509_EXTENSIONS_it(3)
+X509_EXTENSION_it(3)
+X509_EXTENSION_it(3)
+X509_INFO_free(3)
+X509_INFO_new(3)
+X509_LOOKUP_by_alias(3)
+X509_LOOKUP_by_fingerprint(3)
+X509_LOOKUP_by_issuer_serial(3)
+X509_LOOKUP_by_subject(3)
+X509_LOOKUP_ctrl(3)
+X509_LOOKUP_free(3)
+X509_LOOKUP_init(3)
+X509_LOOKUP_new(3)
+X509_LOOKUP_shutdown(3)
+X509_NAME_ENTRY_it(3)
+X509_NAME_ENTRY_it(3)
+X509_NAME_ENTRY_set(3)
+X509_NAME_cmp(3)
+X509_NAME_hash(3)
+X509_NAME_hash_old(3)
+X509_NAME_it(3)
+X509_NAME_it(3)
+X509_NAME_set(3)
+X509_OBJECT_free(3)
+X509_OBJECT_get0_X509(3)
+X509_OBJECT_get0_X509_CRL(3)
+X509_OBJECT_get_type(3)
+X509_OBJECT_idx_by_subject(3)
+X509_OBJECT_new(3)
+X509_OBJECT_retrieve_by_subject(3)
+X509_OBJECT_retrieve_match(3)
+X509_OBJECT_up_ref_count(3)
+X509_PKEY_free(3)
+X509_PKEY_new(3)
+X509_POLICY_NODE_print(3)
+X509_PUBKEY_it(3)
+X509_PUBKEY_it(3)
+X509_PURPOSE_add(3)
+X509_PURPOSE_cleanup(3)
+X509_PURPOSE_get0(3)
+X509_PURPOSE_get0_name(3)
+X509_PURPOSE_get0_sname(3)
+X509_PURPOSE_get_by_id(3)
+X509_PURPOSE_get_by_sname(3)
+X509_PURPOSE_get_count(3)
+X509_PURPOSE_get_id(3)
+X509_PURPOSE_get_trust(3)
+X509_PURPOSE_set(3)
+X509_REQ_INFO_it(3)
+X509_REQ_INFO_it(3)
+X509_REQ_add1_attr(3)
+X509_REQ_add1_attr_by_NID(3)
+X509_REQ_add1_attr_by_OBJ(3)
+X509_REQ_add1_attr_by_txt(3)
+X509_REQ_add_extensions(3)
+X509_REQ_add_extensions_nid(3)
+X509_REQ_delete_attr(3)
+X509_REQ_extension_nid(3)
+X509_REQ_get1_email(3)
+X509_REQ_get_attr(3)
+X509_REQ_get_attr_by_NID(3)
+X509_REQ_get_attr_by_OBJ(3)
+X509_REQ_get_attr_count(3)
+X509_REQ_get_extension_nids(3)
+X509_REQ_get_extensions(3)
+X509_REQ_it(3)
+X509_REQ_it(3)
+X509_REQ_print(3)
+X509_REQ_print_ex(3)
+X509_REQ_print_fp(3)
+X509_REQ_set_extension_nids(3)
+X509_REQ_to_X509(3)
+X509_REVOKED_it(3)
+X509_REVOKED_it(3)
+X509_SIG_it(3)
+X509_SIG_it(3)
+X509_STORE_CTX_get0_current_crl(3)
+X509_STORE_CTX_get0_current_issuer(3)
+X509_STORE_CTX_get0_parent_ctx(3)
+X509_STORE_CTX_get0_policy_tree(3)
+X509_STORE_CTX_get0_store(3)
+X509_STORE_CTX_get1_certs(3)
+X509_STORE_CTX_get1_crls(3)
+X509_STORE_CTX_get1_issuer(3)
+X509_STORE_CTX_get_by_subject(3)
+X509_STORE_CTX_get_explicit_policy(3)
+X509_STORE_CTX_get_obj_by_subject(3)
+X509_STORE_CTX_purpose_inherit(3)
+X509_STORE_CTX_set0_dane(3)
+X509_STORE_CTX_set_depth(3)
+X509_STORE_CTX_set_flags(3)
+X509_STORE_CTX_set_purpose(3)
+X509_STORE_CTX_set_time(3)
+X509_STORE_CTX_set_trust(3)
+X509_STORE_add_lookup(3)
+X509_STORE_get_verify(3)
+X509_TRUST_add(3)
+X509_TRUST_cleanup(3)
+X509_TRUST_get0(3)
+X509_TRUST_get0_name(3)
+X509_TRUST_get_by_id(3)
+X509_TRUST_get_count(3)
+X509_TRUST_get_flags(3)
+X509_TRUST_get_trust(3)
+X509_TRUST_set(3)
+X509_TRUST_set_default(3)
+X509_VAL_it(3)
+X509_VAL_it(3)
+X509_VERIFY_PARAM_add0_table(3)
+X509_VERIFY_PARAM_free(3)
+X509_VERIFY_PARAM_get0(3)
+X509_VERIFY_PARAM_get0_name(3)
+X509_VERIFY_PARAM_get_count(3)
+X509_VERIFY_PARAM_inherit(3)
+X509_VERIFY_PARAM_lookup(3)
+X509_VERIFY_PARAM_move_peername(3)
+X509_VERIFY_PARAM_new(3)
+X509_VERIFY_PARAM_set1(3)
+X509_VERIFY_PARAM_set1_name(3)
+X509_VERIFY_PARAM_table_cleanup(3)
+X509_add1_reject_object(3)
+X509_add1_trust_object(3)
+X509_alias_get0(3)
+X509_alias_set1(3)
+X509_aux_print(3)
+X509_certificate_type(3)
+X509_chain_check_suiteb(3)
+X509_check_akid(3)
+X509_check_purpose(3)
+X509_check_trust(3)
+X509_cmp(3)
+X509_email_free(3)
+X509_find_by_issuer_and_serial(3)
+X509_find_by_subject(3)
+X509_get0_pubkey_bitstr(3)
+X509_get0_reject_objects(3)
+X509_get0_trust_objects(3)
+X509_get1_email(3)
+X509_get1_ocsp(3)
+X509_get_default_cert_area(3)
+X509_get_default_cert_dir(3)
+X509_get_default_cert_dir_env(3)
+X509_get_default_cert_file(3)
+X509_get_default_cert_file_env(3)
+X509_get_default_private_dir(3)
+X509_get_pubkey_parameters(3)
+X509_get_signature_type(3)
+X509_gmtime_adj(3)
+X509_http_nbio(3)
+X509_issuer_and_serial_cmp(3)
+X509_issuer_and_serial_hash(3)
+X509_issuer_name_cmp(3)
+X509_issuer_name_hash(3)
+X509_issuer_name_hash_old(3)
+X509_it(3)
+X509_it(3)
+X509_keyid_get0(3)
+X509_keyid_set1(3)
+X509_ocspid_print(3)
+X509_policy_check(3)
+X509_policy_level_get0_node(3)
+X509_policy_level_node_count(3)
+X509_policy_node_get0_parent(3)
+X509_policy_node_get0_policy(3)
+X509_policy_node_get0_qualifiers(3)
+X509_policy_tree_free(3)
+X509_policy_tree_get0_level(3)
+X509_policy_tree_get0_policies(3)
+X509_policy_tree_get0_user_policies(3)
+X509_policy_tree_level_count(3)
+X509_print(3)
+X509_print_ex(3)
+X509_print_ex_fp(3)
+X509_print_fp(3)
+X509_reject_clear(3)
+X509_signature_dump(3)
+X509_signature_print(3)
+X509_subject_name_cmp(3)
+X509_subject_name_hash(3)
+X509_subject_name_hash_old(3)
+X509_supported_extension(3)
+X509_to_X509_REQ(3)
+X509_trust_clear(3)
+X509_trusted(3)
+X509at_add1_attr(3)
+X509at_add1_attr_by_NID(3)
+X509at_add1_attr_by_OBJ(3)
+X509at_add1_attr_by_txt(3)
+X509at_delete_attr(3)
+X509at_get0_data_by_OBJ(3)
+X509at_get_attr(3)
+X509at_get_attr_by_NID(3)
+X509at_get_attr_by_OBJ(3)
+X509at_get_attr_count(3)
+X509v3_addr_add_inherit(3)
+X509v3_addr_add_prefix(3)
+X509v3_addr_add_range(3)
+X509v3_addr_canonize(3)
+X509v3_addr_get_afi(3)
+X509v3_addr_get_range(3)
+X509v3_addr_inherits(3)
+X509v3_addr_is_canonical(3)
+X509v3_addr_subset(3)
+X509v3_addr_validate_path(3)
+X509v3_addr_validate_resource_set(3)
+X509v3_asid_add_id_or_range(3)
+X509v3_asid_add_inherit(3)
+X509v3_asid_canonize(3)
+X509v3_asid_inherits(3)
+X509v3_asid_is_canonical(3)
+X509v3_asid_subset(3)
+X509v3_asid_validate_path(3)
+X509v3_asid_validate_resource_set(3)
+ZINT32_it(3)
+ZINT32_it(3)
+ZINT64_it(3)
+ZINT64_it(3)
+ZLONG_it(3)
+ZLONG_it(3)
+ZUINT32_it(3)
+ZUINT32_it(3)
+ZUINT64_it(3)
+ZUINT64_it(3)
+_shadow_DES_check_key(3)
+_shadow_DES_check_key(3)
+a2d_ASN1_OBJECT(3)
+a2i_ASN1_ENUMERATED(3)
+a2i_ASN1_INTEGER(3)
+a2i_ASN1_STRING(3)
+a2i_GENERAL_NAME(3)
+a2i_IPADDRESS(3)
+a2i_IPADDRESS_NC(3)
+b2i_PVK_bio(3)
+b2i_PrivateKey(3)
+b2i_PrivateKey_bio(3)
+b2i_PublicKey(3)
+b2i_PublicKey_bio(3)
+conf_ssl_get(3)
+conf_ssl_get_cmd(3)
+conf_ssl_name_find(3)
+err_free_strings_int(3)
+i2a_ACCESS_DESCRIPTION(3)
+i2a_ASN1_ENUMERATED(3)
+i2a_ASN1_INTEGER(3)
+i2a_ASN1_OBJECT(3)
+i2a_ASN1_STRING(3)
+i2b_PVK_bio(3)
+i2b_PrivateKey_bio(3)
+i2b_PublicKey_bio(3)
+i2d_PrivateKey_bio(3)
+i2d_PrivateKey_fp(3)
+i2o_ECPublicKey(3)
+i2s_ASN1_ENUMERATED(3)
+i2s_ASN1_ENUMERATED_TABLE(3)
+i2s_ASN1_IA5STRING(3)
+i2s_ASN1_INTEGER(3)
+i2s_ASN1_OCTET_STRING(3)
+i2v_ASN1_BIT_STRING(3)
+i2v_GENERAL_NAME(3)
+i2v_GENERAL_NAMES(3)
+o2i_ECPublicKey(3)
+s2i_ASN1_IA5STRING(3)
+s2i_ASN1_INTEGER(3)
+s2i_ASN1_OCTET_STRING(3)
+v2i_ASN1_BIT_STRING(3)
+v2i_GENERAL_NAME(3)
+v2i_GENERAL_NAMES(3)
+v2i_GENERAL_NAME_ex(3)
diff --git a/util/missingmacro.txt b/util/missingmacro.txt
new file mode 100644
index 000000000000..bc16c026dd30
--- /dev/null
+++ b/util/missingmacro.txt
@@ -0,0 +1,169 @@
+# A list of macros that are known to be missing documentation as used by the
+# find-doc-nits -v option. The list is as of commit 355b419698.
+BIO_get_flags(3)
+BIO_set_retry_special(3)
+BIO_set_retry_read(3)
+BIO_set_retry_write(3)
+BIO_clear_retry_flags(3)
+BIO_get_retry_flags(3)
+BIO_CB_return(3)
+BIO_cb_pre(3)
+BIO_cb_post(3)
+BIO_set_conn_mode(3)
+BIO_dup_state(3)
+BIO_buffer_get_num_lines(3)
+BIO_buffer_peek(3)
+BIO_sock_cleanup(3)
+ossl_bio__attr__(3)
+BN_prime_checks_for_size(3)
+BN_GF2m_sub(3)
+BN_GF2m_cmp(3)
+BUF_strdup(3)
+BUF_strndup(3)
+BUF_memdup(3)
+BUF_strlcpy(3)
+BUF_strlcat(3)
+BUF_strnlen(3)
+COMP_zlib_cleanup(3)
+NCONF_get_number(3)
+OSSL_CORE_MAKE_FUNC(3)
+OPENSSL_MALLOC_MAX_NELEMS(3)
+CRYPTO_cleanup_all_ex_data(3)
+CRYPTO_num_locks(3)
+CRYPTO_set_locking_callback(3)
+CRYPTO_get_locking_callback(3)
+CRYPTO_set_add_lock_callback(3)
+CRYPTO_get_add_lock_callback(3)
+CRYPTO_THREADID_set_numeric(3)
+CRYPTO_THREADID_set_pointer(3)
+CRYPTO_THREADID_set_callback(3)
+CRYPTO_THREADID_get_callback(3)
+CRYPTO_THREADID_current(3)
+CRYPTO_THREADID_cmp(3)
+CRYPTO_THREADID_cpy(3)
+CRYPTO_THREADID_hash(3)
+CRYPTO_set_id_callback(3)
+CRYPTO_get_id_callback(3)
+CRYPTO_thread_id(3)
+CRYPTO_set_dynlock_create_callback(3)
+CRYPTO_set_dynlock_lock_callback(3)
+CRYPTO_set_dynlock_destroy_callback(3)
+CRYPTO_get_dynlock_create_callback(3)
+CRYPTO_get_dynlock_lock_callback(3)
+CRYPTO_get_dynlock_destroy_callback(3)
+OpenSSLDie(3)
+OPENSSL_assert(3)
+DSA_is_prime(3)
+ECParameters_dup(3)
+ENGINE_load_openssl(3)
+ENGINE_load_dynamic(3)
+ENGINE_load_padlock(3)
+ENGINE_load_capi(3)
+ENGINE_load_afalg(3)
+ENGINE_load_cryptodev(3)
+ENGINE_load_rdrand(3)
+EVP_MD_nid(3)
+EVP_ENCODE_LENGTH(3)
+EVP_DECODE_LENGTH(3)
+BIO_set_md_ctx(3)
+EVP_add_cipher_alias(3)
+EVP_add_digest_alias(3)
+EVP_delete_cipher_alias(3)
+EVP_delete_digest_alias(3)
+EVP_MD_CTX_create(3)
+EVP_MD_CTX_init(3)
+EVP_MD_CTX_destroy(3)
+EVP_CIPHER_CTX_init(3)
+EVP_CIPHER_CTX_cleanup(3)
+OPENSSL_add_all_algorithms_conf(3)
+OPENSSL_add_all_algorithms_noconf(3)
+LHASH_HASH_FN(3)
+LHASH_COMP_FN(3)
+LHASH_DOALL_ARG_FN(3)
+LHASH_OF(3)
+DEFINE_LHASH_OF(3)
+int_implement_lhash_doall(3)
+OBJ_create_and_add_object(3)
+OBJ_bsearch(3)
+OBJ_bsearch_ex(3)
+OCSP_REQ_CTX_http(3)
+OCSP_REQ_CTX_new(3)
+PEM_read_bio_OCSP_REQUEST(3)
+PEM_read_bio_OCSP_RESPONSE(3)
+PEM_write_bio_OCSP_REQUEST(3)
+PEM_write_bio_OCSP_RESPONSE(3)
+ASN1_BIT_STRING_digest(3)
+OCSP_CERTSTATUS_dup(3)
+OSSL_PARAM_SIZED_int(3)
+OSSL_PARAM_SIZED_uint(3)
+OSSL_PARAM_SIZED_long(3)
+OSSL_PARAM_SIZED_ulong(3)
+OSSL_PARAM_SIZED_int32(3)
+OSSL_PARAM_SIZED_uint32(3)
+OSSL_PARAM_SIZED_int64(3)
+OSSL_PARAM_SIZED_uint64(3)
+OSSL_PARAM_SIZED_size_t(3)
+OSSL_PARAM_SIZED_double(3)
+PKCS7_get_signed_attributes(3)
+PKCS7_get_attributes(3)
+PKCS7_type_is_signed(3)
+PKCS7_type_is_encrypted(3)
+PKCS7_type_is_enveloped(3)
+PKCS7_type_is_signedAndEnveloped(3)
+PKCS7_type_is_data(3)
+PKCS7_type_is_digest(3)
+PKCS7_set_detached(3)
+PKCS7_get_detached(3)
+PKCS7_is_detached(3)
+STACK_OF(3)
+SKM_DEFINE_STACK_OF(3)
+DEFINE_OR_DECLARE_STACK_OF(3)
+DEFINE_OR_DECLARE_STACK_OF_STRING(3)
+DEFINE_OR_DECLARE_STACK_OF_CSTRING(3)
+DEFINE_STACK_OF_STRING(3)
+DEFINE_STACK_OF_CSTRING(3)
+U64(3)
+SSL_set_mtu(3)
+DTLS_set_link_mtu(3)
+DTLS_get_link_min_mtu(3)
+SSL_CTX_set_cert_flags(3)
+SSL_set_cert_flags(3)
+SSL_CTX_clear_cert_flags(3)
+SSL_clear_cert_flags(3)
+SSLeay_add_ssl_algorithms(3)
+DTLSv1_get_timeout(3)
+DTLSv1_handle_timeout(3)
+SSL_num_renegotiations(3)
+SSL_clear_num_renegotiations(3)
+SSL_total_renegotiations(3)
+SSL_get0_certificate_types(3)
+SSL_CTX_set1_client_certificate_types(3)
+SSL_set1_client_certificate_types(3)
+SSL_get0_raw_cipherlist(3)
+SSL_get0_ec_point_formats(3)
+SSL_CTX_need_tmp_RSA(3)
+SSL_CTX_set_tmp_rsa(3)
+SSL_need_tmp_RSA(3)
+SSL_set_tmp_rsa(3)
+SSL_CTX_set_tmp_rsa_callback(3)
+SSL_set_tmp_rsa_callback(3)
+SSL_CTX_set_default_read_ahead(3)
+SSL_cache_hit(3)
+TLS1_get_version(3)
+TLS1_get_client_version(3)
+SSL_set_tlsext_debug_callback(3)
+SSL_set_tlsext_debug_arg(3)
+SSL_get_tlsext_status_exts(3)
+SSL_set_tlsext_status_exts(3)
+SSL_get_tlsext_status_ids(3)
+SSL_set_tlsext_status_ids(3)
+SSL_CTX_get_tlsext_ticket_keys(3)
+SSL_CTX_set_tlsext_ticket_keys(3)
+X509_extract_key(3)
+X509_REQ_extract_key(3)
+X509_name_cmp(3)
+X509V3_conf_err(3)
+X509V3_set_ctx_test(3)
+X509V3_set_ctx_nodb(3)
+EXT_BITSTRING(3)
+EXT_IA5STRING(3)
diff --git a/util/missingmacro111.txt b/util/missingmacro111.txt
new file mode 100644
index 000000000000..0b6a86e7e397
--- /dev/null
+++ b/util/missingmacro111.txt
@@ -0,0 +1,230 @@
+# A list of macros that are known to be missing documentation as used by the
+# find-doc-nits -v -o option. The list is as of commit 1708e3e85b (the release
+# of 1.1.1).
+BIO_get_flags(3)
+BIO_set_retry_special(3)
+BIO_set_retry_read(3)
+BIO_set_retry_write(3)
+BIO_clear_retry_flags(3)
+BIO_get_retry_flags(3)
+BIO_CB_return(3)
+BIO_cb_pre(3)
+BIO_cb_post(3)
+BIO_set_app_data(3)
+BIO_get_app_data(3)
+BIO_set_conn_mode(3)
+BIO_dup_state(3)
+BIO_buffer_get_num_lines(3)
+BIO_buffer_peek(3)
+BIO_ctrl_dgram_connect(3)
+BIO_ctrl_set_connected(3)
+BIO_dgram_recv_timedout(3)
+BIO_dgram_send_timedout(3)
+BIO_dgram_get_peer(3)
+BIO_dgram_set_peer(3)
+BIO_dgram_get_mtu_overhead(3)
+BIO_sock_cleanup(3)
+ossl_bio__attr__(3)
+BN_prime_checks_for_size(3)
+BN_GF2m_sub(3)
+BN_GF2m_cmp(3)
+BUF_strdup(3)
+BUF_strndup(3)
+BUF_memdup(3)
+BUF_strlcpy(3)
+BUF_strlcat(3)
+BUF_strnlen(3)
+COMP_zlib_cleanup(3)
+NCONF_get_number(3)
+OPENSSL_MALLOC_MAX_NELEMS(3)
+CRYPTO_cleanup_all_ex_data(3)
+CRYPTO_num_locks(3)
+CRYPTO_set_locking_callback(3)
+CRYPTO_get_locking_callback(3)
+CRYPTO_set_add_lock_callback(3)
+CRYPTO_get_add_lock_callback(3)
+CRYPTO_THREADID_set_numeric(3)
+CRYPTO_THREADID_set_pointer(3)
+CRYPTO_THREADID_set_callback(3)
+CRYPTO_THREADID_get_callback(3)
+CRYPTO_THREADID_current(3)
+CRYPTO_THREADID_cmp(3)
+CRYPTO_THREADID_cpy(3)
+CRYPTO_THREADID_hash(3)
+CRYPTO_set_id_callback(3)
+CRYPTO_get_id_callback(3)
+CRYPTO_thread_id(3)
+CRYPTO_set_dynlock_create_callback(3)
+CRYPTO_set_dynlock_lock_callback(3)
+CRYPTO_set_dynlock_destroy_callback(3)
+CRYPTO_get_dynlock_create_callback(3)
+CRYPTO_get_dynlock_lock_callback(3)
+CRYPTO_get_dynlock_destroy_callback(3)
+OpenSSLDie(3)
+OPENSSL_assert(3)
+EVP_PKEY_CTX_set_dh_paramgen_subprime_len(3)
+EVP_PKEY_CTX_set_dh_paramgen_type(3)
+EVP_PKEY_CTX_set_dh_rfc5114(3)
+EVP_PKEY_CTX_set_dhx_rfc5114(3)
+EVP_PKEY_CTX_set_dh_kdf_type(3)
+EVP_PKEY_CTX_get_dh_kdf_type(3)
+EVP_PKEY_CTX_set0_dh_kdf_oid(3)
+EVP_PKEY_CTX_get0_dh_kdf_oid(3)
+EVP_PKEY_CTX_set_dh_kdf_md(3)
+EVP_PKEY_CTX_get_dh_kdf_md(3)
+EVP_PKEY_CTX_set_dh_kdf_outlen(3)
+EVP_PKEY_CTX_get_dh_kdf_outlen(3)
+EVP_PKEY_CTX_set0_dh_kdf_ukm(3)
+EVP_PKEY_CTX_get0_dh_kdf_ukm(3)
+DSA_is_prime(3)
+OPENSSL_GLOBAL_REF(3)
+OPENSSL_GLOBAL_REF(3)
+ECParameters_dup(3)
+EVP_PKEY_CTX_set_ecdh_cofactor_mode(3)
+EVP_PKEY_CTX_get_ecdh_cofactor_mode(3)
+EVP_PKEY_CTX_set_ecdh_kdf_type(3)
+EVP_PKEY_CTX_get_ecdh_kdf_type(3)
+EVP_PKEY_CTX_set_ecdh_kdf_md(3)
+EVP_PKEY_CTX_get_ecdh_kdf_md(3)
+EVP_PKEY_CTX_set_ecdh_kdf_outlen(3)
+EVP_PKEY_CTX_get_ecdh_kdf_outlen(3)
+EVP_PKEY_CTX_set0_ecdh_kdf_ukm(3)
+EVP_PKEY_CTX_get0_ecdh_kdf_ukm(3)
+ENGINE_load_openssl(3)
+ENGINE_load_dynamic(3)
+ENGINE_load_padlock(3)
+ENGINE_load_capi(3)
+ENGINE_load_afalg(3)
+ENGINE_load_cryptodev(3)
+ENGINE_load_rdrand(3)
+EVP_PKEY_assign_SIPHASH(3)
+EVP_PKEY_assign_POLY1305(3)
+EVP_MD_nid(3)
+EVP_MD_name(3)
+EVP_CIPHER_name(3)
+EVP_ENCODE_LENGTH(3)
+EVP_DECODE_LENGTH(3)
+BIO_set_md_ctx(3)
+EVP_add_cipher_alias(3)
+EVP_add_digest_alias(3)
+EVP_delete_cipher_alias(3)
+EVP_delete_digest_alias(3)
+EVP_MD_CTX_create(3)
+EVP_MD_CTX_init(3)
+EVP_MD_CTX_destroy(3)
+EVP_CIPHER_CTX_init(3)
+EVP_CIPHER_CTX_cleanup(3)
+OPENSSL_add_all_algorithms_conf(3)
+OPENSSL_add_all_algorithms_noconf(3)
+LHASH_HASH_FN(3)
+LHASH_COMP_FN(3)
+LHASH_DOALL_ARG_FN(3)
+LHASH_OF(3)
+DEFINE_LHASH_OF(3)
+int_implement_lhash_doall(3)
+OBJ_create_and_add_object(3)
+OBJ_bsearch(3)
+OBJ_bsearch_ex(3)
+PEM_read_bio_OCSP_REQUEST(3)
+PEM_read_bio_OCSP_RESPONSE(3)
+PEM_write_bio_OCSP_REQUEST(3)
+PEM_write_bio_OCSP_RESPONSE(3)
+ASN1_BIT_STRING_digest(3)
+OCSP_CERTSTATUS_dup(3)
+PKCS7_get_signed_attributes(3)
+PKCS7_get_attributes(3)
+PKCS7_type_is_signed(3)
+PKCS7_type_is_encrypted(3)
+PKCS7_type_is_enveloped(3)
+PKCS7_type_is_signedAndEnveloped(3)
+PKCS7_type_is_data(3)
+PKCS7_type_is_digest(3)
+PKCS7_set_detached(3)
+PKCS7_get_detached(3)
+PKCS7_is_detached(3)
+EVP_PKEY_CTX_get_rsa_padding(3)
+EVP_PKEY_CTX_get_rsa_pss_saltlen(3)
+EVP_PKEY_CTX_set_rsa_keygen_primes(3)
+EVP_PKEY_CTX_set_rsa_mgf1_md(3)
+EVP_PKEY_CTX_set_rsa_oaep_md(3)
+EVP_PKEY_CTX_get_rsa_mgf1_md(3)
+EVP_PKEY_CTX_get_rsa_oaep_md(3)
+EVP_PKEY_CTX_set0_rsa_oaep_label(3)
+EVP_PKEY_CTX_get0_rsa_oaep_label(3)
+RSA_set_app_data(3)
+RSA_get_app_data(3)
+STACK_OF(3)
+SKM_DEFINE_STACK_OF(3)
+U64(3)
+U64(3)
+U64(3)
+SSL_set_mtu(3)
+DTLS_set_link_mtu(3)
+DTLS_get_link_min_mtu(3)
+SSL_heartbeat(3)
+SSL_CTX_set_cert_flags(3)
+SSL_set_cert_flags(3)
+SSL_CTX_clear_cert_flags(3)
+SSL_clear_cert_flags(3)
+SSL_set_app_data(3)
+SSL_get_app_data(3)
+SSL_SESSION_set_app_data(3)
+SSL_SESSION_get_app_data(3)
+SSL_CTX_get_app_data(3)
+SSL_CTX_set_app_data(3)
+SSLeay_add_ssl_algorithms(3)
+DTLSv1_get_timeout(3)
+DTLSv1_handle_timeout(3)
+SSL_num_renegotiations(3)
+SSL_clear_num_renegotiations(3)
+SSL_total_renegotiations(3)
+SSL_CTX_set_tmp_ecdh(3)
+SSL_set_tmp_ecdh(3)
+SSL_CTX_get_extra_chain_certs(3)
+SSL_CTX_get_extra_chain_certs_only(3)
+SSL_get0_certificate_types(3)
+SSL_CTX_set1_client_certificate_types(3)
+SSL_set1_client_certificate_types(3)
+SSL_get0_raw_cipherlist(3)
+SSL_get0_ec_point_formats(3)
+SSL_CTX_need_tmp_RSA(3)
+SSL_CTX_set_tmp_rsa(3)
+SSL_need_tmp_RSA(3)
+SSL_set_tmp_rsa(3)
+SSL_CTX_set_ecdh_auto(3)
+SSL_set_ecdh_auto(3)
+SSL_CTX_set_tmp_rsa_callback(3)
+SSL_set_tmp_rsa_callback(3)
+SSL_get_ex_new_index(3)
+SSL_SESSION_get_ex_new_index(3)
+SSL_CTX_get_ex_new_index(3)
+SSL_CTX_set_default_read_ahead(3)
+SSL_cache_hit(3)
+TLS1_get_version(3)
+TLS1_get_client_version(3)
+SSL_set_tlsext_debug_callback(3)
+SSL_set_tlsext_debug_arg(3)
+SSL_get_tlsext_status_exts(3)
+SSL_set_tlsext_status_exts(3)
+SSL_get_tlsext_status_ids(3)
+SSL_set_tlsext_status_ids(3)
+SSL_CTX_get_tlsext_ticket_keys(3)
+SSL_CTX_set_tlsext_ticket_keys(3)
+SSL_get_dtlsext_heartbeat_pending(3)
+SSL_set_dtlsext_heartbeat_no_requests(3)
+SSL_get_tlsext_heartbeat_pending(3)
+SSL_set_tlsext_heartbeat_no_requests(3)
+UI_set_app_data(3)
+UI_get_app_data(3)
+X509_extract_key(3)
+X509_REQ_extract_key(3)
+X509_name_cmp(3)
+X509_STORE_CTX_set_app_data(3)
+X509_STORE_CTX_get_app_data(3)
+X509_LOOKUP_load_file(3)
+X509_LOOKUP_add_dir(3)
+X509V3_conf_err(3)
+X509V3_set_ctx_test(3)
+X509V3_set_ctx_nodb(3)
+EXT_BITSTRING(3)
+EXT_IA5STRING(3)
diff --git a/util/missingssl-internal.txt b/util/missingssl-internal.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/util/missingssl-internal.txt
diff --git a/util/missingssl.txt b/util/missingssl.txt
new file mode 100644
index 000000000000..41ca8a8bbc00
--- /dev/null
+++ b/util/missingssl.txt
@@ -0,0 +1,33 @@
+# Missing functions in libssl, as of Tue Oct 1 16:13:38 EDT 2019
+ERR_load_SSL_strings(3)
+SRP_Calc_A_param(3)
+SSL_COMP_get_name(3)
+SSL_COMP_set0_compression_methods(3)
+SSL_CTX_SRP_CTX_free(3)
+SSL_CTX_SRP_CTX_init(3)
+SSL_CTX_get0_certificate(3)
+SSL_CTX_get0_ctlog_store(3)
+SSL_CTX_get0_privatekey(3)
+SSL_CTX_set0_ctlog_store(3)
+SSL_CTX_set_client_cert_engine(3)
+SSL_CTX_set_not_resumable_session_callback(3)
+SSL_SRP_CTX_free(3)
+SSL_SRP_CTX_init(3)
+SSL_add_ssl_module(3)
+SSL_certs_clear(3)
+SSL_copy_session_id(3)
+SSL_dup_CA_list(3)
+SSL_get0_dane(3)
+SSL_get_current_compression(3)
+SSL_get_current_expansion(3)
+SSL_get_finished(3)
+SSL_get_peer_finished(3)
+SSL_set_SSL_CTX(3)
+SSL_set_debug(3)
+SSL_set_not_resumable_session_callback(3)
+SSL_set_session_secret_cb(3)
+SSL_set_session_ticket_ext(3)
+SSL_set_session_ticket_ext_cb(3)
+SSL_srp_server_param_with_username(3)
+SSL_test_functions(3)
+SSL_trace(3)
diff --git a/util/missingssl111.txt b/util/missingssl111.txt
new file mode 100644
index 000000000000..da92e87737ef
--- /dev/null
+++ b/util/missingssl111.txt
@@ -0,0 +1,58 @@
+# A list of libssl functions that are known to be missing documentation as
+# used by the find-doc-nits -v -o option. The list is as of commit 1708e3e85b
+# (the release of 1.1.1).
+ERR_load_SSL_strings(3)
+SRP_Calc_A_param(3)
+SSL_COMP_get_name(3)
+SSL_COMP_set0_compression_methods(3)
+SSL_CONF_CTX_finish(3)
+SSL_CTX_SRP_CTX_free(3)
+SSL_CTX_SRP_CTX_init(3)
+SSL_CTX_get0_certificate(3)
+SSL_CTX_get0_ctlog_store(3)
+SSL_CTX_get0_privatekey(3)
+SSL_CTX_get_ssl_method(3)
+SSL_CTX_set0_ctlog_store(3)
+SSL_CTX_set_client_cert_engine(3)
+SSL_CTX_set_cookie_generate_cb(3)
+SSL_CTX_set_cookie_verify_cb(3)
+SSL_CTX_set_not_resumable_session_callback(3)
+SSL_CTX_set_purpose(3)
+SSL_CTX_set_srp_cb_arg(3)
+SSL_CTX_set_srp_client_pwd_callback(3)
+SSL_CTX_set_srp_password(3)
+SSL_CTX_set_srp_strength(3)
+SSL_CTX_set_srp_username(3)
+SSL_CTX_set_srp_username_callback(3)
+SSL_CTX_set_srp_verify_param_callback(3)
+SSL_CTX_set_trust(3)
+SSL_SRP_CTX_free(3)
+SSL_SRP_CTX_init(3)
+SSL_add_ssl_module(3)
+SSL_certs_clear(3)
+SSL_copy_session_id(3)
+SSL_dup_CA_list(3)
+SSL_get0_dane(3)
+SSL_get_certificate(3)
+SSL_get_current_compression(3)
+SSL_get_current_expansion(3)
+SSL_get_finished(3)
+SSL_get_peer_finished(3)
+SSL_get_privatekey(3)
+SSL_get_srp_N(3)
+SSL_get_srp_g(3)
+SSL_get_srp_userinfo(3)
+SSL_get_srp_username(3)
+SSL_set_SSL_CTX(3)
+SSL_set_debug(3)
+SSL_set_not_resumable_session_callback(3)
+SSL_set_purpose(3)
+SSL_set_session_secret_cb(3)
+SSL_set_session_ticket_ext(3)
+SSL_set_session_ticket_ext_cb(3)
+SSL_set_srp_server_param(3)
+SSL_set_srp_server_param_pw(3)
+SSL_set_trust(3)
+SSL_srp_server_param_with_username(3)
+SSL_test_functions(3)
+SSL_trace(3)
diff --git a/util/mk-fipsmodule-cnf.pl b/util/mk-fipsmodule-cnf.pl
new file mode 100644
index 000000000000..6a86e06b8b51
--- /dev/null
+++ b/util/mk-fipsmodule-cnf.pl
@@ -0,0 +1,44 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use Getopt::Long;
+
+my $activate = 1;
+my $conditional_errors = 1;
+my $security_checks = 1;
+my $mac_key;
+my $module_name;
+my $section_name = "fips_sect";
+
+GetOptions("key=s" => \$mac_key,
+ "module=s" => \$module_name,
+ "section_name=s" => \$section_name)
+ or die "Error when getting command line arguments";
+
+my $mac_keylen = length($mac_key);
+
+use Digest::SHA qw(hmac_sha256_hex);
+my $module_size = [ stat($module_name) ]->[7];
+
+open my $fh, "<:raw", $module_name or die "Trying to open $module_name: $!";
+read $fh, my $data, $module_size or die "Trying to read $module_name: $!";
+close $fh;
+
+# Calculate HMAC-SHA256 in hex, and split it into a list of two character
+# chunks, and join the chunks with colons.
+my @module_mac
+ = ( uc(hmac_sha256_hex($data, pack("H$mac_keylen", $mac_key))) =~ m/../g );
+my $module_mac = join(':', @module_mac);
+
+print <<_____;
+[$section_name]
+activate = $activate
+conditional-errors = $conditional_errors
+security-checks = $security_checks
+module-mac = $module_mac
+_____
diff --git a/util/mkbuildinf.pl b/util/mkbuildinf.pl
new file mode 100755
index 000000000000..1c273872be11
--- /dev/null
+++ b/util/mkbuildinf.pl
@@ -0,0 +1,56 @@
+#! /usr/bin/env perl
+# Copyright 2014-2017 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
+
+use strict;
+use warnings;
+
+my ($cflags, $platform) = @ARGV;
+$cflags = "compiler: $cflags";
+
+my $date = gmtime($ENV{'SOURCE_DATE_EPOCH'} || time()) . " UTC";
+
+print <<"END_OUTPUT";
+/*
+ * WARNING: do not edit!
+ * Generated by util/mkbuildinf.pl
+ *
+ * Copyright 2014-2017 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
+ */
+
+#define PLATFORM "platform: $platform"
+#define DATE "built on: $date"
+
+/*
+ * Generate compiler_flags as an array of individual characters. This is a
+ * workaround for the situation where CFLAGS gets too long for a C90 string
+ * literal
+ */
+static const char compiler_flags[] = {
+END_OUTPUT
+
+my $ctr = 0;
+foreach my $c (split //, $cflags) {
+ $c =~ s|([\\'])|\\$1|;
+ # Max 16 characters per line
+ if (($ctr++ % 16) == 0) {
+ if ($ctr != 1) {
+ print "\n";
+ }
+ print " ";
+ }
+ print "'$c',";
+}
+print <<"END_OUTPUT";
+'\\0'
+};
+END_OUTPUT
diff --git a/util/mkdef.pl b/util/mkdef.pl
new file mode 100755
index 000000000000..d9534674cde1
--- /dev/null
+++ b/util/mkdef.pl
@@ -0,0 +1,447 @@
+#! /usr/bin/env perl
+# Copyright 2018-2022 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
+
+# Generate a linker version script suitable for the given platform
+# from a given ordinals file.
+
+use strict;
+use warnings;
+
+use Getopt::Long;
+use FindBin;
+use lib "$FindBin::Bin/perl";
+
+use OpenSSL::Ordinals;
+
+use lib '.';
+use configdata;
+
+use File::Spec::Functions;
+use lib catdir($config{sourcedir}, 'Configurations');
+use platform;
+
+my $name = undef; # internal library/module name
+my $ordinals_file = undef; # the ordinals file to use
+my $version = undef; # the version to use for the library
+my $OS = undef; # the operating system family
+my $type = 'lib'; # either lib or dso
+my $verbose = 0;
+my $ctest = 0;
+my $debug = 0;
+
+# For VMS, some modules may have case insensitive names
+my $case_insensitive = 0;
+
+GetOptions('name=s' => \$name,
+ 'ordinals=s' => \$ordinals_file,
+ 'version=s' => \$version,
+ 'OS=s' => \$OS,
+ 'type=s' => \$type,
+ 'ctest' => \$ctest,
+ 'verbose' => \$verbose,
+ # For VMS
+ 'case-insensitive' => \$case_insensitive)
+ or die "Error in command line arguments\n";
+
+die "Please supply arguments\n"
+ unless $name && $ordinals_file && $OS;
+die "--type argument must be equal to 'lib' or 'dso'"
+ if $type ne 'lib' && $type ne 'dso';
+
+# When building a "variant" shared library, with a custom SONAME, also customize
+# all the symbol versions. This produces a shared object that can coexist
+# without conflict in the same address space as a default build, or an object
+# with a different variant tag.
+#
+# For example, with a target definition that includes:
+#
+# shlib_variant => "-opt",
+#
+# we build the following objects:
+#
+# $ perl -le '
+# for (@ARGV) {
+# if ($l = readlink) {
+# printf "%s -> %s\n", $_, $l
+# } else {
+# print
+# }
+# }' *.so*
+# libcrypto-opt.so.1.1
+# libcrypto.so -> libcrypto-opt.so.1.1
+# libssl-opt.so.1.1
+# libssl.so -> libssl-opt.so.1.1
+#
+# whose SONAMEs and dependencies are:
+#
+# $ for l in *.so; do
+# echo $l
+# readelf -d $l | egrep 'SONAME|NEEDED.*(ssl|crypto)'
+# done
+# libcrypto.so
+# 0x000000000000000e (SONAME) Library soname: [libcrypto-opt.so.1.1]
+# libssl.so
+# 0x0000000000000001 (NEEDED) Shared library: [libcrypto-opt.so.1.1]
+# 0x000000000000000e (SONAME) Library soname: [libssl-opt.so.1.1]
+#
+# We case-fold the variant tag to upper case and replace all non-alnum
+# characters with "_". This yields the following symbol versions:
+#
+# $ nm libcrypto.so | grep -w A
+# 0000000000000000 A OPENSSL_OPT_1_1_0
+# 0000000000000000 A OPENSSL_OPT_1_1_0a
+# 0000000000000000 A OPENSSL_OPT_1_1_0c
+# 0000000000000000 A OPENSSL_OPT_1_1_0d
+# 0000000000000000 A OPENSSL_OPT_1_1_0f
+# 0000000000000000 A OPENSSL_OPT_1_1_0g
+# $ nm libssl.so | grep -w A
+# 0000000000000000 A OPENSSL_OPT_1_1_0
+# 0000000000000000 A OPENSSL_OPT_1_1_0d
+#
+(my $SO_VARIANT = uc($target{"shlib_variant"} // '')) =~ s/\W/_/g;
+
+my $libname = $type eq 'lib' ? platform->sharedname($name) : platform->dsoname($name);
+
+my %OS_data = (
+ solaris => { writer => \&writer_linux,
+ sort => sorter_linux(),
+ platforms => { UNIX => 1 } },
+ "solaris-gcc" => 'solaris', # alias
+ linux => 'solaris', # alias
+ "bsd-gcc" => 'solaris', # alias
+ aix => { writer => \&writer_aix,
+ sort => sorter_unix(),
+ platforms => { UNIX => 1 } },
+ VMS => { writer => \&writer_VMS,
+ sort => OpenSSL::Ordinals::by_number(),
+ platforms => { VMS => 1 } },
+ vms => 'VMS', # alias
+ WINDOWS => { writer => \&writer_windows,
+ sort => OpenSSL::Ordinals::by_name(),
+ platforms => { WIN32 => 1,
+ _WIN32 => 1 } },
+ windows => 'WINDOWS', # alias
+ WIN32 => 'WINDOWS', # alias
+ win32 => 'WIN32', # alias
+ 32 => 'WIN32', # alias
+ NT => 'WIN32', # alias
+ nt => 'WIN32', # alias
+ mingw => 'WINDOWS', # alias
+ nonstop => { writer => \&writer_nonstop,
+ sort => OpenSSL::Ordinals::by_name(),
+ platforms => { TANDEM => 1 } },
+ );
+
+do {
+ die "Unknown operating system family $OS\n"
+ unless exists $OS_data{$OS};
+ $OS = $OS_data{$OS};
+} while(ref($OS) eq '');
+
+my %disabled_uc = map { my $x = uc $_; $x =~ s|-|_|g; $x => 1 } keys %disabled;
+
+my %ordinal_opts = ();
+$ordinal_opts{sort} = $OS->{sort} if $OS->{sort};
+$ordinal_opts{filter} =
+ sub {
+ my $item = shift;
+ return
+ $item->exists()
+ && platform_filter($item)
+ && feature_filter($item);
+ };
+my $ordinals = OpenSSL::Ordinals->new(from => $ordinals_file);
+
+my $writer = $OS->{writer};
+$writer = \&writer_ctest if $ctest;
+
+$writer->($ordinals->items(%ordinal_opts));
+
+exit 0;
+
+sub platform_filter {
+ my $item = shift;
+ my %platforms = ( $item->platforms() );
+
+ # True if no platforms are defined
+ return 1 if scalar keys %platforms == 0;
+
+ # For any item platform tag, return the equivalence with the
+ # current platform settings if it exists there, return 0 otherwise
+ # if the item platform tag is true
+ for (keys %platforms) {
+ if (exists $OS->{platforms}->{$_}) {
+ return $platforms{$_} == $OS->{platforms}->{$_};
+ }
+ if ($platforms{$_}) {
+ return 0;
+ }
+ }
+
+ # Found no match? Then it's a go
+ return 1;
+}
+
+sub feature_filter {
+ my $item = shift;
+ my @features = ( $item->features() );
+
+ # True if no features are defined
+ return 1 if scalar @features == 0;
+
+ my $verdict = ! grep { $disabled_uc{$_} } @features;
+
+ if ($disabled{deprecated}) {
+ foreach (@features) {
+ next unless /^DEPRECATEDIN_(\d+)_(\d+)(?:_(\d+))?$/;
+ my $symdep = $1 * 10000 + $2 * 100 + ($3 // 0);
+ $verdict = 0 if $config{api} >= $symdep;
+ print STDERR "DEBUG: \$symdep = $symdep, \$verdict = $verdict\n"
+ if $debug && $1 == 0;
+ }
+ }
+
+ return $verdict;
+}
+
+sub sorter_unix {
+ my $by_name = OpenSSL::Ordinals::by_name();
+ my %weight = (
+ 'FUNCTION' => 1,
+ 'VARIABLE' => 2
+ );
+
+ return sub {
+ my $item1 = shift;
+ my $item2 = shift;
+
+ my $verdict = $weight{$item1->type()} <=> $weight{$item2->type()};
+ if ($verdict == 0) {
+ $verdict = $by_name->($item1, $item2);
+ }
+ return $verdict;
+ };
+}
+
+sub sorter_linux {
+ my $by_version = OpenSSL::Ordinals::by_version();
+ my $by_unix = sorter_unix();
+
+ return sub {
+ my $item1 = shift;
+ my $item2 = shift;
+
+ my $verdict = $by_version->($item1, $item2);
+ if ($verdict == 0) {
+ $verdict = $by_unix->($item1, $item2);
+ }
+ return $verdict;
+ };
+}
+
+sub writer_linux {
+ my $thisversion = '';
+ my $currversion_s = '';
+ my $prevversion_s = '';
+ my $indent = 0;
+
+ for (@_) {
+ if ($thisversion && $_->version() ne $thisversion) {
+ die "$ordinals_file: It doesn't make sense to have both versioned ",
+ "and unversioned symbols"
+ if $thisversion eq '*';
+ print <<"_____";
+}${prevversion_s};
+_____
+ $prevversion_s = " OPENSSL${SO_VARIANT}_$thisversion";
+ $thisversion = ''; # Trigger start of next section
+ }
+ unless ($thisversion) {
+ $indent = 0;
+ $thisversion = $_->version();
+ $currversion_s = '';
+ $currversion_s = "OPENSSL${SO_VARIANT}_$thisversion "
+ if $thisversion ne '*';
+ print <<"_____";
+${currversion_s}{
+ global:
+_____
+ }
+ print ' ', $_->name(), ";\n";
+ }
+
+ print <<"_____";
+ local: *;
+}${prevversion_s};
+_____
+}
+
+sub writer_aix {
+ for (@_) {
+ print $_->name(),"\n";
+ }
+}
+
+sub writer_nonstop {
+ for (@_) {
+ print "-export ",$_->name(),"\n";
+ }
+}
+
+sub writer_windows {
+ print <<"_____";
+;
+; Definition file for the DLL version of the $libname library from OpenSSL
+;
+
+LIBRARY "$libname"
+
+EXPORTS
+_____
+ for (@_) {
+ print " ",$_->name();
+ if (platform->can('export2internal')) {
+ print "=". platform->export2internal($_->name());
+ }
+ print "\n";
+ }
+}
+
+sub collect_VMS_mixedcase {
+ return [ 'SPARE', 'SPARE' ] unless @_;
+
+ my $s = shift;
+ my $s_uc = uc($s);
+ my $type = shift;
+
+ return [ "$s=$type", 'SPARE' ] if $s_uc eq $s;
+ return [ "$s_uc/$s=$type", "$s=$type" ];
+}
+
+sub collect_VMS_uppercase {
+ return [ 'SPARE' ] unless @_;
+
+ my $s = shift;
+ my $s_uc = uc($s);
+ my $type = shift;
+
+ return [ "$s_uc=$type" ];
+}
+
+sub writer_VMS {
+ my @slot_collection = ();
+ my $collector =
+ $case_insensitive ? \&collect_VMS_uppercase : \&collect_VMS_mixedcase;
+
+ my $last_num = 0;
+ foreach (@_) {
+ my $this_num = $_->number();
+ $this_num = $last_num + 1 if $this_num =~ m|^\?|;
+
+ while (++$last_num < $this_num) {
+ push @slot_collection, $collector->(); # Just occupy a slot
+ }
+ my $type = {
+ FUNCTION => 'PROCEDURE',
+ VARIABLE => 'DATA'
+ } -> {$_->type()};
+ push @slot_collection, $collector->($_->name(), $type);
+ }
+
+ print <<"_____" if defined $version;
+IDENTIFICATION=$version
+_____
+ print <<"_____" unless $case_insensitive;
+CASE_SENSITIVE=YES
+_____
+ print <<"_____";
+SYMBOL_VECTOR=(-
+_____
+ # It's uncertain how long aggregated lines the linker can handle,
+ # but it has been observed that at least 1024 characters is ok.
+ # Either way, this means that we need to keep track of the total
+ # line length of each "SYMBOL_VECTOR" statement. Fortunately, we
+ # can have more than one of those...
+ my $symvtextcount = 16; # The length of "SYMBOL_VECTOR=("
+ while (@slot_collection) {
+ my $set = shift @slot_collection;
+ my $settextlength = 0;
+ foreach (@$set) {
+ $settextlength +=
+ + 3 # two space indentation and comma
+ + length($_)
+ + 1 # postdent
+ ;
+ }
+ $settextlength--; # only one space indentation on the first one
+ my $firstcomma = ',';
+
+ if ($symvtextcount + $settextlength > 1024) {
+ print <<"_____";
+)
+SYMBOL_VECTOR=(-
+_____
+ $symvtextcount = 16; # The length of "SYMBOL_VECTOR=("
+ }
+ if ($symvtextcount == 16) {
+ $firstcomma = '';
+ }
+
+ my $indent = ' '.$firstcomma;
+ foreach (@$set) {
+ print <<"_____";
+$indent$_ -
+_____
+ $symvtextcount += length($indent) + length($_) + 1;
+ $indent = ' ,';
+ }
+ }
+ print <<"_____";
+)
+_____
+
+ if (defined $version) {
+ $version =~ /^(\d+)\.(\d+)\.(\d+)/;
+ my $libvmajor = $1;
+ my $libvminor = $2 * 100 + $3;
+ print <<"_____";
+GSMATCH=LEQUAL,$libvmajor,$libvminor
+_____
+ }
+}
+
+sub writer_ctest {
+ print <<'_____';
+/*
+ * Test file to check all DEF file symbols are present by trying
+ * to link to all of them. This is *not* intended to be run!
+ */
+
+int main()
+{
+_____
+
+ my $last_num = 0;
+ for (@_) {
+ my $this_num = $_->number();
+ $this_num = $last_num + 1 if $this_num =~ m|^\?|;
+
+ if ($_->type() eq 'VARIABLE') {
+ print "\textern int ", $_->name(), '; /* type unknown */ /* ',
+ $this_num, ' ', $_->version(), " */\n";
+ } else {
+ print "\textern int ", $_->name(), '(); /* type unknown */ /* ',
+ $this_num, ' ', $_->version(), " */\n";
+ }
+
+ $last_num = $this_num;
+ }
+ print <<'_____';
+}
+_____
+}
diff --git a/util/mkdir-p.pl b/util/mkdir-p.pl
new file mode 100755
index 000000000000..e618ebf45073
--- /dev/null
+++ b/util/mkdir-p.pl
@@ -0,0 +1,45 @@
+#! /usr/bin/env perl
+# Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+# On some systems, the -p option to mkdir (= also create any missing parent
+# directories) is not available.
+
+my $arg;
+
+foreach $arg (@ARGV) {
+ $arg =~ tr|\\|/|;
+ &do_mkdir_p($arg);
+}
+
+
+sub do_mkdir_p {
+ local($dir) = @_;
+
+ $dir =~ s|/*\Z(?!\n)||s;
+
+ if (-d $dir) {
+ return;
+ }
+
+ if ($dir =~ m|[^/]/|s) {
+ local($parent) = $dir;
+ $parent =~ s|[^/]*\Z(?!\n)||s;
+
+ do_mkdir_p($parent);
+ }
+
+ unless (mkdir($dir, 0777)) {
+ local($err) = $!;
+ if (-d $dir) {
+ # We raced against another instance doing the same thing.
+ return;
+ }
+ die "Cannot create directory $dir: $err\n";
+ }
+ print "created directory `$dir'\n";
+}
diff --git a/util/mkerr.pl b/util/mkerr.pl
new file mode 100755
index 000000000000..1cb772c00f10
--- /dev/null
+++ b/util/mkerr.pl
@@ -0,0 +1,697 @@
+#! /usr/bin/env perl
+# Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use File::Basename;
+use File::Spec::Functions qw(abs2rel rel2abs);
+
+use lib ".";
+use configdata;
+
+my $config = "crypto/err/openssl.ec";
+my $debug = 0;
+my $internal = 0;
+my $nowrite = 0;
+my $rebuild = 0;
+my $reindex = 0;
+my $static = 0;
+my $unref = 0;
+my %modules = ();
+
+my $errors = 0;
+my @t = localtime();
+my $YEAR = $t[5] + 1900;
+
+sub phase
+{
+ my $text = uc(shift);
+ print STDERR "\n---\n$text\n" if $debug;
+}
+
+sub help
+{
+ print STDERR <<"EOF";
+mkerr.pl [options] [files...]
+
+Options:
+
+ -conf FILE Use the named config file FILE instead of the default.
+
+ -debug Verbose output debugging on stderr.
+
+ -internal Generate code that is to be built as part of OpenSSL itself.
+ Also scans internal list of files.
+
+ -module M Only useful with -internal!
+ Only write files for library module M. Whether files are
+ actually written or not depends on other options, such as
+ -rebuild.
+ Note: this option is cumulative. If not given at all, all
+ internal modules will be considered.
+
+ -nowrite Do not write the header/source files, even if changed.
+
+ -rebuild Rebuild all header and C source files, even if there
+ were no changes.
+
+ -reindex Ignore previously assigned values (except for R records in
+ the config file) and renumber everything starting at 100.
+
+ -static Make the load/unload functions static.
+
+ -unref List all unreferenced function and reason codes on stderr;
+ implies -nowrite.
+
+ -help Show this help text.
+
+ ... Additional arguments are added to the file list to scan,
+ if '-internal' was NOT specified on the command line.
+
+EOF
+}
+
+while ( @ARGV ) {
+ my $arg = $ARGV[0];
+ last unless $arg =~ /-.*/;
+ $arg = $1 if $arg =~ /-(-.*)/;
+ if ( $arg eq "-conf" ) {
+ $config = $ARGV[1];
+ shift @ARGV;
+ } elsif ( $arg eq "-debug" ) {
+ $debug = 1;
+ $unref = 1;
+ } elsif ( $arg eq "-internal" ) {
+ $internal = 1;
+ } elsif ( $arg eq "-nowrite" ) {
+ $nowrite = 1;
+ } elsif ( $arg eq "-rebuild" ) {
+ $rebuild = 1;
+ } elsif ( $arg eq "-reindex" ) {
+ $reindex = 1;
+ } elsif ( $arg eq "-static" ) {
+ $static = 1;
+ } elsif ( $arg eq "-unref" ) {
+ $unref = 1;
+ $nowrite = 1;
+ } elsif ( $arg eq "-module" ) {
+ shift @ARGV;
+ $modules{uc $ARGV[0]} = 1;
+ } elsif ( $arg =~ /-*h(elp)?/ ) {
+ &help();
+ exit;
+ } elsif ( $arg =~ /-.*/ ) {
+ die "Unknown option $arg; use -h for help.\n";
+ }
+ shift @ARGV;
+}
+
+my @source;
+if ( $internal ) {
+ die "Cannot mix -internal and -static\n" if $static;
+ die "Extra parameters given.\n" if @ARGV;
+ @source = ( glob('crypto/*.c'), glob('crypto/*/*.c'),
+ glob('ssl/*.c'), glob('ssl/*/*.c'), glob('providers/*.c'),
+ glob('providers/*/*.c'), glob('providers/*/*/*.c') );
+} else {
+ die "-module isn't useful without -internal\n" if scalar keys %modules > 0;
+ @source = @ARGV;
+}
+
+# Data parsed out of the config and state files.
+my %hpubinc; # lib -> public header
+my %libpubinc; # public header -> lib
+my %hprivinc; # lib -> private header
+my %libprivinc; # private header -> lib
+my %cskip; # error_file -> lib
+my %errorfile; # lib -> error file name
+my %rmax; # lib -> max assigned reason code
+my %rassigned; # lib -> colon-separated list of assigned reason codes
+my %rnew; # lib -> count of new reason codes
+my %rextra; # "extra" reason code -> lib
+my %rcodes; # reason-name -> value
+my $statefile; # state file with assigned reason and function codes
+my %strings; # define -> text
+
+# Read and parse the config file
+open(IN, "$config") || die "Can't open config file $config, $!,";
+while ( <IN> ) {
+ next if /^#/ || /^$/;
+ if ( /^L\s+(\S+)\s+(\S+)\s+(\S+)(?:\s+(\S+))?\s+$/ ) {
+ my $lib = $1;
+ my $pubhdr = $2;
+ my $err = $3;
+ my $privhdr = $4 // 'NONE';
+ $hpubinc{$lib} = $pubhdr;
+ $libpubinc{$pubhdr} = $lib;
+ $hprivinc{$lib} = $privhdr;
+ $libprivinc{$privhdr} = $lib;
+ $cskip{$err} = $lib;
+ $errorfile{$lib} = $err;
+ next if $err eq 'NONE';
+ $rmax{$lib} = 100;
+ $rassigned{$lib} = ":";
+ $rnew{$lib} = 0;
+ die "Public header file must be in include/openssl ($pubhdr is not)\n"
+ if ($internal
+ && $pubhdr ne 'NONE'
+ && $pubhdr !~ m|^include/openssl/|);
+ die "Private header file may only be specified with -internal ($privhdr given)\n"
+ unless ($privhdr eq 'NONE' || $internal);
+ } elsif ( /^R\s+(\S+)\s+(\S+)/ ) {
+ $rextra{$1} = $2;
+ $rcodes{$1} = $2;
+ } elsif ( /^S\s+(\S+)/ ) {
+ $statefile = $1;
+ } else {
+ die "Illegal config line $_\n";
+ }
+}
+close IN;
+
+if ( ! $statefile ) {
+ $statefile = $config;
+ $statefile =~ s/.ec/.txt/;
+}
+
+# The statefile has all the previous assignments.
+&phase("Reading state");
+my $skippedstate = 0;
+if ( ! $reindex && $statefile ) {
+ open(STATE, "<$statefile") || die "Can't open $statefile, $!";
+
+ # Scan function and reason codes and store them: keep a note of the
+ # maximum code used.
+ while ( <STATE> ) {
+ next if /^#/ || /^$/;
+ my $name;
+ my $code;
+ if ( /^(.+):(\d+):\\$/ ) {
+ $name = $1;
+ $code = $2;
+ my $next = <STATE>;
+ $next =~ s/^\s*(.*)\s*$/$1/;
+ die "Duplicate define $name" if exists $strings{$name};
+ $strings{$name} = $next;
+ } elsif ( /^(\S+):(\d+):(.*)$/ ) {
+ $name = $1;
+ $code = $2;
+ die "Duplicate define $name" if exists $strings{$name};
+ $strings{$name} = $3;
+ } else {
+ die "Bad line in $statefile:\n$_\n";
+ }
+ my $lib = $name;
+ $lib =~ s/^((?:OSSL_|OPENSSL_)?[^_]{2,}).*$/$1/;
+ $lib = "SSL" if $lib =~ /TLS/;
+ if ( !defined $errorfile{$lib} ) {
+ print "Skipping $_";
+ $skippedstate++;
+ next;
+ }
+ next if $errorfile{$lib} eq 'NONE';
+ if ( $name =~ /^(?:OSSL_|OPENSSL_)?[A-Z0-9]{2,}_R_/ ) {
+ die "$lib reason code $code collision at $name\n"
+ if $rassigned{$lib} =~ /:$code:/;
+ $rassigned{$lib} .= "$code:";
+ if ( !exists $rextra{$name} ) {
+ $rmax{$lib} = $code if $code > $rmax{$lib};
+ }
+ $rcodes{$name} = $code;
+ } elsif ( $name =~ /^(?:OSSL_|OPENSSL_)?[A-Z0-9]{2,}_F_/ ) {
+ # We do nothing with the function codes, just let them go away
+ } else {
+ die "Bad line in $statefile:\n$_\n";
+ }
+ }
+ close(STATE);
+
+ if ( $debug ) {
+ foreach my $lib ( sort keys %rmax ) {
+ print STDERR "Reason codes for ${lib}:\n";
+ if ( $rassigned{$lib} =~ m/^:(.*):$/ ) {
+ my @rassigned = sort { $a <=> $b } split( ":", $1 );
+ print STDERR " ", join(' ', @rassigned), "\n";
+ } else {
+ print STDERR " --none--\n";
+ }
+ }
+ }
+}
+
+# Scan each C source file and look for reason codes. This is done by
+# looking for strings that "look like" reason codes: basically anything
+# consisting of all upper case and numerics which _R_ in it and which has
+# the name of an error library at the start. Should there be anything else,
+# such as a type name, we add exceptions here.
+# If a code doesn't exist in list compiled from headers then mark it
+# with the value "X" as a place holder to give it a value later.
+# Store all reason codes found in and %usedreasons so all those unreferenced
+# can be printed out.
+&phase("Scanning source");
+my %usedreasons;
+foreach my $file ( @source ) {
+ # Don't parse the error source file.
+ next if exists $cskip{$file};
+ open( IN, "<$file" ) || die "Can't open $file, $!,";
+ my $func;
+ my $linenr = 0;
+ print STDERR "$file:\n" if $debug;
+ while ( <IN> ) {
+
+ # skip obsoleted source files entirely!
+ last if /^#error\s+obsolete/;
+ $linenr++;
+
+ if ( /(((?:OSSL_|OPENSSL_)?[A-Z0-9]{2,})_R_[A-Z0-9_]+)/ ) {
+ next unless exists $errorfile{$2};
+ next if $errorfile{$2} eq 'NONE';
+ $usedreasons{$1} = 1;
+ if ( !exists $rcodes{$1} ) {
+ print STDERR " New reason $1\n" if $debug;
+ $rcodes{$1} = "X";
+ $rnew{$2}++;
+ }
+ print STDERR " Reason $1 = $rcodes{$1}\n" if $debug;
+ }
+ }
+ close IN;
+}
+print STDERR "\n" if $debug;
+
+# Now process each library in turn.
+&phase("Writing files");
+my $newstate = 0;
+foreach my $lib ( keys %errorfile ) {
+ next if ! $rnew{$lib} && ! $rebuild;
+ next if scalar keys %modules > 0 && !$modules{$lib};
+ next if $nowrite;
+ print STDERR "$lib: $rnew{$lib} new reasons\n" if $rnew{$lib};
+ $newstate = 1;
+
+ # If we get here then we have some new error codes so we
+ # need to rebuild the header file and C file.
+
+ # Make a sorted list of error and reason codes for later use.
+ my @reasons = sort grep( /^${lib}_/, keys %rcodes );
+
+ # indent level for innermost preprocessor lines
+ my $indent = " ";
+
+ # Flag if the sub-library is disablable
+ # There are a few exceptions, where disabling the sub-library
+ # doesn't actually remove the whole sub-library, but rather implements
+ # it with a NULL backend.
+ my $disablable =
+ ($lib ne "SSL" && $lib ne "ASYNC" && $lib ne "DSO"
+ && (grep { $lib eq uc $_ } @disablables, @disablables_int));
+
+ # Rewrite the internal header file if there is one ($internal only!)
+
+ if ($hprivinc{$lib} ne 'NONE') {
+ my $hfile = $hprivinc{$lib};
+ my $guard = $hfile;
+
+ if ($guard =~ m|^include/|) {
+ $guard = $';
+ } else {
+ $guard = basename($guard);
+ }
+ $guard = "OSSL_" . join('_', split(m|[./]|, uc $guard));
+
+ open( OUT, ">$hfile" ) || die "Can't write to $hfile, $!,";
+ print OUT <<"EOF";
+/*
+ * Generated by util/mkerr.pl DO NOT EDIT
+ * Copyright 2020-$YEAR 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 $guard
+# define $guard
+# pragma once
+
+# include <openssl/opensslconf.h>
+# include <openssl/symhacks.h>
+
+# ifdef __cplusplus
+extern \"C\" {
+# endif
+
+EOF
+ $indent = ' ';
+ if ($disablable) {
+ print OUT <<"EOF";
+# ifndef OPENSSL_NO_${lib}
+
+EOF
+ $indent = " ";
+ }
+ print OUT <<"EOF";
+int ossl_err_load_${lib}_strings(void);
+EOF
+
+ # If this library doesn't have a public header file, we write all
+ # definitions that would end up there here instead
+ if ($hpubinc{$lib} eq 'NONE') {
+ print OUT "\n/*\n * $lib reason codes.\n */\n";
+ foreach my $i ( @reasons ) {
+ my $z = 48 - length($i);
+ $z = 0 if $z < 0;
+ if ( $rcodes{$i} eq "X" ) {
+ $rassigned{$lib} =~ m/^:([^:]*):/;
+ my $findcode = $1;
+ $findcode = $rmax{$lib} if !defined $findcode;
+ while ( $rassigned{$lib} =~ m/:$findcode:/ ) {
+ $findcode++;
+ }
+ $rcodes{$i} = $findcode;
+ $rassigned{$lib} .= "$findcode:";
+ print STDERR "New Reason code $i\n" if $debug;
+ }
+ printf OUT "#${indent}define $i%s $rcodes{$i}\n", " " x $z;
+ }
+ print OUT "\n";
+ }
+
+ # This doesn't go all the way down to zero, to allow for the ending
+ # brace for 'extern "C" {'.
+ while (length($indent) > 1) {
+ $indent = substr $indent, 0, -1;
+ print OUT "#${indent}endif\n";
+ }
+
+ print OUT <<"EOF";
+
+# ifdef __cplusplus
+}
+# endif
+#endif
+EOF
+ close OUT;
+ }
+
+ # Rewrite the public header file
+
+ if ($hpubinc{$lib} ne 'NONE') {
+ my $extra_include =
+ $internal
+ ? ($lib ne 'SSL'
+ ? "# include <openssl/cryptoerr_legacy.h>\n"
+ : "# include <openssl/sslerr_legacy.h>\n")
+ : '';
+ my $hfile = $hpubinc{$lib};
+ my $guard = $hfile;
+ $guard =~ s|^include/||;
+ $guard = join('_', split(m|[./]|, uc $guard));
+ $guard = "OSSL_" . $guard unless $internal;
+
+ open( OUT, ">$hfile" ) || die "Can't write to $hfile, $!,";
+ print OUT <<"EOF";
+/*
+ * Generated by util/mkerr.pl DO NOT EDIT
+ * Copyright 1995-$YEAR 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 $guard
+# define $guard
+# pragma once
+
+# include <openssl/opensslconf.h>
+# include <openssl/symhacks.h>
+$extra_include
+
+EOF
+ $indent = ' ';
+ if ( $internal ) {
+ if ($disablable) {
+ print OUT <<"EOF";
+# ifndef OPENSSL_NO_${lib}
+
+EOF
+ $indent .= ' ';
+ }
+ } else {
+ print OUT <<"EOF";
+# define ${lib}err(f, r) ERR_${lib}_error(0, (r), OPENSSL_FILE, OPENSSL_LINE)
+
+EOF
+ if ( ! $static ) {
+ print OUT <<"EOF";
+
+# ifdef __cplusplus
+extern \"C\" {
+# endif
+int ERR_load_${lib}_strings(void);
+void ERR_unload_${lib}_strings(void);
+void ERR_${lib}_error(int function, int reason, const char *file, int line);
+# ifdef __cplusplus
+}
+# endif
+EOF
+ }
+ }
+
+ print OUT "\n/*\n * $lib reason codes.\n */\n";
+ foreach my $i ( @reasons ) {
+ my $z = 48 - length($i);
+ $z = 0 if $z < 0;
+ if ( $rcodes{$i} eq "X" ) {
+ $rassigned{$lib} =~ m/^:([^:]*):/;
+ my $findcode = $1;
+ $findcode = $rmax{$lib} if !defined $findcode;
+ while ( $rassigned{$lib} =~ m/:$findcode:/ ) {
+ $findcode++;
+ }
+ $rcodes{$i} = $findcode;
+ $rassigned{$lib} .= "$findcode:";
+ print STDERR "New Reason code $i\n" if $debug;
+ }
+ printf OUT "#${indent}define $i%s $rcodes{$i}\n", " " x $z;
+ }
+ print OUT "\n";
+
+ while (length($indent) > 0) {
+ $indent = substr $indent, 0, -1;
+ print OUT "#${indent}endif\n";
+ }
+ close OUT;
+ }
+
+ # Rewrite the C source file containing the error details.
+
+ if ($errorfile{$lib} ne 'NONE') {
+ # First, read any existing reason string definitions:
+ my $cfile = $errorfile{$lib};
+ my $pack_lib = $internal ? "ERR_LIB_${lib}" : "0";
+ my $hpubincf = $hpubinc{$lib};
+ my $hprivincf = $hprivinc{$lib};
+ my $includes = '';
+ if ($internal) {
+ if ($hpubincf ne 'NONE') {
+ $hpubincf =~ s|^include/||;
+ $includes .= "#include <${hpubincf}>\n";
+ }
+ if ($hprivincf =~ m|^include/|) {
+ $hprivincf = $';
+ } else {
+ $hprivincf = abs2rel(rel2abs($hprivincf),
+ rel2abs(dirname($cfile)));
+ }
+ $includes .= "#include \"${hprivincf}\"\n";
+ } else {
+ $includes .= "#include \"${hpubincf}\"\n";
+ }
+
+ open( OUT, ">$cfile" )
+ || die "Can't open $cfile for writing, $!, stopped";
+
+ my $const = $internal ? 'const ' : '';
+
+ print OUT <<"EOF";
+/*
+ * Generated by util/mkerr.pl DO NOT EDIT
+ * Copyright 1995-$YEAR 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/err.h>
+$includes
+EOF
+ $indent = '';
+ if ( $internal ) {
+ if ($disablable) {
+ print OUT <<"EOF";
+#ifndef OPENSSL_NO_${lib}
+
+EOF
+ $indent .= ' ';
+ }
+ }
+ print OUT <<"EOF";
+#${indent}ifndef OPENSSL_NO_ERR
+
+static ${const}ERR_STRING_DATA ${lib}_str_reasons[] = {
+EOF
+
+ # Add each reason code.
+ foreach my $i ( @reasons ) {
+ my $rn;
+ if ( exists $strings{$i} ) {
+ $rn = $strings{$i};
+ $rn = "" if $rn eq '*';
+ } else {
+ $i =~ /^${lib}_R_(\S+)$/;
+ $rn = $1;
+ $rn =~ tr/_[A-Z]/ [a-z]/;
+ $strings{$i} = $rn;
+ }
+ my $short = " {ERR_PACK($pack_lib, 0, $i), \"$rn\"},";
+ if ( length($short) <= 80 ) {
+ print OUT "$short\n";
+ } else {
+ print OUT " {ERR_PACK($pack_lib, 0, $i),\n \"$rn\"},\n";
+ }
+ }
+ print OUT <<"EOF";
+ {0, NULL}
+};
+
+#${indent}endif
+EOF
+ if ( $internal ) {
+ print OUT <<"EOF";
+
+int ossl_err_load_${lib}_strings(void)
+{
+#${indent}ifndef OPENSSL_NO_ERR
+ if (ERR_reason_error_string(${lib}_str_reasons[0].error) == NULL)
+ ERR_load_strings_const(${lib}_str_reasons);
+#${indent}endif
+ return 1;
+}
+EOF
+ } else {
+ my $st = $static ? "static " : "";
+ print OUT <<"EOF";
+
+static int lib_code = 0;
+static int error_loaded = 0;
+
+${st}int ERR_load_${lib}_strings(void)
+{
+ if (lib_code == 0)
+ lib_code = ERR_get_next_error_library();
+
+ if (!error_loaded) {
+#ifndef OPENSSL_NO_ERR
+ ERR_load_strings(lib_code, ${lib}_str_reasons);
+#endif
+ error_loaded = 1;
+ }
+ return 1;
+}
+
+${st}void ERR_unload_${lib}_strings(void)
+{
+ if (error_loaded) {
+#ifndef OPENSSL_NO_ERR
+ ERR_unload_strings(lib_code, ${lib}_str_reasons);
+#endif
+ error_loaded = 0;
+ }
+}
+
+${st}void ERR_${lib}_error(int function, int reason, const char *file, int line)
+{
+ if (lib_code == 0)
+ lib_code = ERR_get_next_error_library();
+ ERR_raise(lib_code, reason);
+ ERR_set_debug(file, line, NULL);
+}
+EOF
+
+ }
+
+ while (length($indent) > 1) {
+ $indent = substr $indent, 0, -1;
+ print OUT "#${indent}endif\n";
+ }
+ if ($internal && $disablable) {
+ print OUT <<"EOF";
+#else
+NON_EMPTY_TRANSLATION_UNIT
+#endif
+EOF
+ }
+ close OUT;
+ }
+}
+
+&phase("Ending");
+# Make a list of unreferenced reason codes
+if ( $unref ) {
+ my @runref;
+ foreach ( keys %rcodes ) {
+ push( @runref, $_ ) unless exists $usedreasons{$_};
+ }
+ if ( @runref ) {
+ print STDERR "The following reason codes were not referenced:\n";
+ foreach ( sort @runref ) {
+ print STDERR " $_\n";
+ }
+ }
+}
+
+die "Found $errors errors, quitting" if $errors;
+
+# Update the state file
+if ( $newstate ) {
+ open(OUT, ">$statefile.new")
+ || die "Can't write $statefile.new, $!";
+ print OUT <<"EOF";
+# Copyright 1999-$YEAR 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
+EOF
+ print OUT "\n#Reason codes\n";
+ foreach my $i ( sort keys %rcodes ) {
+ my $short = "$i:$rcodes{$i}:";
+ my $t = exists $strings{$i} ? "$strings{$i}" : "";
+ $t = "\\\n\t" . $t if length($short) + length($t) > 80;
+ print OUT "$short$t\n" if !exists $rextra{$i};
+ }
+ close(OUT);
+ if ( $skippedstate ) {
+ print "Skipped state, leaving update in $statefile.new";
+ } else {
+ rename "$statefile", "$statefile.old"
+ || die "Can't backup $statefile to $statefile.old, $!";
+ rename "$statefile.new", "$statefile"
+ || die "Can't rename $statefile to $statefile.new, $!";
+ }
+}
+
+exit;
diff --git a/util/mknum.pl b/util/mknum.pl
new file mode 100644
index 000000000000..8c978dfe2dc5
--- /dev/null
+++ b/util/mknum.pl
@@ -0,0 +1,146 @@
+
+#! /usr/bin/env perl
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use Getopt::Long;
+use FindBin;
+use lib "$FindBin::Bin/perl";
+
+use OpenSSL::Ordinals;
+use OpenSSL::ParseC;
+
+my $ordinals_file = undef; # the ordinals file to use
+my $symhacks_file = undef; # a symbol hacking file (optional)
+my $version = undef; # the version to use for added symbols
+my $checkexist = 0; # (unsure yet)
+my $warnings = 1;
+my $renumber = 0;
+my $verbose = 0;
+my $debug = 0;
+
+GetOptions('ordinals=s' => \$ordinals_file,
+ 'symhacks=s' => \$symhacks_file,
+ 'version=s' => \$version,
+ 'exist' => \$checkexist,
+ 'renumber' => \$renumber,
+ 'warnings!' => \$warnings,
+ 'verbose' => \$verbose,
+ 'debug' => \$debug)
+ or die "Error in command line arguments\n";
+
+die "Please supply ordinals file\n"
+ unless $ordinals_file;
+
+my $ordinals = OpenSSL::Ordinals->new(from => $ordinals_file,
+ warnings => $warnings,
+ verbose => $verbose,
+ debug => $debug);
+$ordinals->set_version($version);
+
+my %orig_names = ();
+%orig_names = map { $_->name() => 1 }
+ $ordinals->items(comparator => sub { $_[0] cmp $_[1] },
+ filter => sub { $_->exists() })
+ if $checkexist;
+
+# Invalidate all entries, they get revalidated when we re-check below
+$ordinals->invalidate();
+
+foreach my $f (($symhacks_file // (), @ARGV)) {
+ print STDERR $f," ","-" x (69 - length($f)),"\n" if $verbose;
+ open IN, $f or die "Couldn't open $f: $!\n";
+ foreach (parse(<IN>, { filename => $f,
+ warnings => $warnings,
+ verbose => $verbose,
+ debug => $debug })) {
+ $_->{value} = $_->{value}||"";
+ next if grep { $_ eq 'CONST_STRICT' } @{$_->{conds}};
+ printf STDERR "%s> %s%s : %s\n",
+ $_->{type},
+ $_->{name},
+ ($_->{type} eq 'M' && defined $symhacks_file && $f eq $symhacks_file
+ ? ' = ' . $_->{value}
+ : ''),
+ join(', ', @{$_->{conds}})
+ if $verbose;
+ if ($_->{type} eq 'M'
+ && defined $symhacks_file
+ && $f eq $symhacks_file
+ && $_->{value} =~ /^\w(?:\w|\d)*/) {
+ $ordinals->add_alias($f, $_->{value}, $_->{name}, @{$_->{conds}});
+ } else {
+ next if $_->{returntype} =~ /\b(?:ossl_)inline/;
+ my $type = {
+ F => 'FUNCTION',
+ V => 'VARIABLE',
+ } -> {$_->{type}};
+ if ($type) {
+ $ordinals->add($f, $_->{name}, $type, @{$_->{conds}});
+ }
+ }
+ }
+ close IN;
+}
+
+$ordinals->renumber() if $renumber;
+
+if ($checkexist) {
+ my %new_names = map { $_->name() => 1 }
+ $ordinals->items(comparator => sub { $_[0] cmp $_[1] },
+ filter => sub { $_->exists() });
+ # Eliminate common names
+ foreach (keys %orig_names) {
+ next unless exists $new_names{$_};
+ delete $orig_names{$_};
+ delete $new_names{$_};
+ }
+ if (%orig_names) {
+ print "The following symbols do not seem to exist in code:\n";
+ foreach (sort keys %orig_names) {
+ print "\t$_\n";
+ }
+ }
+ if (%new_names) {
+ print "The following existing symbols are not in ordinals file:\n";
+ foreach (sort keys %new_names) {
+ print "\t$_\n";
+ }
+ }
+} else {
+ my $dropped = 0;
+ my $unassigned;
+ my $filter = sub {
+ my $item = shift;
+ my $result = $item->number() ne '?' || $item->exists();
+ $dropped++ unless $result;
+ return $result;
+ };
+ $ordinals->rewrite(filter => $filter);
+ my %stats = $ordinals->stats();
+ print STDERR
+ "${ordinals_file}: $stats{modified} old symbols have updated info\n"
+ if $stats{modified};
+ if ($stats{new}) {
+ print STDERR "${ordinals_file}: Added $stats{new} new symbols\n";
+ } else {
+ print STDERR "${ordinals_file}: No new symbols added\n";
+ }
+ if ($dropped) {
+ print STDERR "${ordinals_file}: Dropped $dropped new symbols\n";
+ }
+ $stats{unassigned} = 0 unless defined $stats{unassigned};
+ $unassigned = $stats{unassigned} - $dropped;
+ if ($unassigned) {
+ my $symbol = $unassigned == 1 ? "symbol" : "symbols";
+ my $is = $unassigned == 1 ? "is" : "are";
+ print STDERR "${ordinals_file}: $unassigned $symbol $is without ordinal number\n";
+ }
+}
diff --git a/util/mkpod2html.pl b/util/mkpod2html.pl
new file mode 100755
index 000000000000..cc2ab9d32a61
--- /dev/null
+++ b/util/mkpod2html.pl
@@ -0,0 +1,61 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use lib ".";
+use Getopt::Std;
+use Pod::Html;
+use File::Spec::Functions qw(:DEFAULT rel2abs);
+
+# Options.
+our($opt_i); # -i INFILE
+our($opt_o); # -o OUTFILE
+our($opt_t); # -t TITLE
+our($opt_r); # -r PODROOT
+
+getopts('i:o:t:r:');
+die "-i flag missing" unless $opt_i;
+die "-o flag missing" unless $opt_o;
+die "-t flag missing" unless $opt_t;
+die "-r flag missing" unless $opt_r;
+
+# We originally used realpath() here, but the Windows implementation appears
+# to require that the directory or file exist to be able to process the input,
+# so we use rel2abs() instead, which only processes the string without
+# looking further.
+$opt_i = rel2abs($opt_i) or die "Can't convert to real path: $!";
+$opt_o = rel2abs($opt_o) or die "Can't convert to real path: $!";
+$opt_r = rel2abs($opt_r) or die "Can't convert to real path: $!";
+
+pod2html
+ "--infile=$opt_i",
+ "--outfile=$opt_o",
+ "--title=$opt_t",
+ "--podroot=$opt_r",
+ "--podpath=man1:man3:man5:man7",
+ "--htmldir=..";
+
+# Read in contents.
+open F, "<$opt_o"
+ or die "Can't read $opt_o, $!";
+my $contents = '';
+{
+ local $/ = undef;
+ $contents = <F>;
+}
+close F;
+unlink $opt_o;
+
+$contents =~
+ s|href="http://man\.he\.net/(man\d/[^"]+)(?:\.html)?"|href="../$1.html"|g;
+open F, ">$opt_o"
+ or die "Can't write $opt_o, $!";
+print F $contents;
+close F;
diff --git a/util/mkrc.pl b/util/mkrc.pl
new file mode 100755
index 000000000000..6ec1f3747076
--- /dev/null
+++ b/util/mkrc.pl
@@ -0,0 +1,74 @@
+#! /usr/bin/env perl
+# Copyright 2006-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
+
+use strict;
+use warnings;
+use lib ".";
+use configdata;
+
+my $cversion = "$config{version}";
+my $version = "$config{full_version}";
+
+# RC syntax for versions uses commas as separators, rather than period,
+# and it must have exactly 4 numbers (16-bit integers).
+my @vernums = ( split(/\./, $cversion), 0, 0, 0, 0 );
+$cversion = join(',', @vernums[0..3]);
+
+my $filename = $ARGV[0];
+my $description = "OpenSSL library";
+my $vft = "VFT_DLL";
+if ( $filename =~ /openssl/i ) {
+ $description = "OpenSSL application";
+ $vft = "VFT_APP";
+}
+
+my $YEAR = [gmtime($ENV{SOURCE_DATE_EPOCH} || time())]->[5] + 1900;
+print <<___;
+#include <winver.h>
+
+LANGUAGE 0x09,0x01
+
+1 VERSIONINFO
+ FILEVERSION $cversion
+ PRODUCTVERSION $cversion
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x01L
+#else
+ FILEFLAGS 0x00L
+#endif
+ FILEOS VOS__WINDOWS32
+ FILETYPE $vft
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ // Required:
+ VALUE "CompanyName", "The OpenSSL Project, https://www.openssl.org/\\0"
+ VALUE "FileDescription", "$description\\0"
+ VALUE "FileVersion", "$version\\0"
+ VALUE "InternalName", "$filename\\0"
+ VALUE "OriginalFilename", "$filename\\0"
+ VALUE "ProductName", "The OpenSSL Toolkit\\0"
+ VALUE "ProductVersion", "$version\\0"
+ // Optional:
+ //VALUE "Comments", "\\0"
+ VALUE "LegalCopyright", "Copyright 1998-$YEAR The OpenSSL Authors. All rights reserved.\\0"
+ //VALUE "LegalTrademarks", "\\0"
+ //VALUE "PrivateBuild", "\\0"
+ //VALUE "SpecialBuild", "\\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 0x4b0
+ END
+END
+___
diff --git a/util/opensslwrap.sh b/util/opensslwrap.sh
new file mode 100755
index 000000000000..7a388302703e
--- /dev/null
+++ b/util/opensslwrap.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+HERE="`echo $0 | sed -e 's|[^/]*$||'`"
+OPENSSL="${HERE}../apps/openssl"
+
+if [ -d "${HERE}../engines" -a "x$OPENSSL_ENGINES" = "x" ]; then
+ OPENSSL_ENGINES="${HERE}../engines"; export OPENSSL_ENGINES
+fi
+if [ -d "${HERE}../providers" -a "x$OPENSSL_MODULES" = "x" ]; then
+ OPENSSL_MODULES="${HERE}../providers"; export OPENSSL_MODULES
+fi
+
+if [ -x "${OPENSSL}.exe" ]; then
+ # The original reason for this script existence is to work around
+ # certain caveats in run-time linker behaviour. On Windows platforms
+ # adjusting $PATH used to be sufficient, but with introduction of
+ # SafeDllSearchMode in XP/2003 the only way to get it right in
+ # *all* possible situations is to copy newly built .DLLs to apps/
+ # and test/, which is now done elsewhere... The $PATH is adjusted
+ # for backward compatibility (and nostagical reasons:-).
+ if [ "$OSTYPE" != msdosdjgpp ]; then
+ PATH="${HERE}..:$PATH"; export PATH
+ fi
+ exec "${OPENSSL}.exe" "$@"
+elif [ -x "${OPENSSL}" -a -x "${HERE}shlib_wrap.sh" ]; then
+ exec "${HERE}shlib_wrap.sh" "${OPENSSL}" "$@"
+else
+ exec "${OPENSSL}" "$@" # hope for the best...
+fi
diff --git a/util/other-internal.syms b/util/other-internal.syms
new file mode 100644
index 000000000000..9f6a22e2ead9
--- /dev/null
+++ b/util/other-internal.syms
@@ -0,0 +1,5 @@
+ossl_cmp_allow_unprotected_cb_t datatype
+#
+DEFINE_SPARSE_ARRAY_OF define
+#Functions exported by libcrypto that don't exist in our public headers
+asn1_d2i_read_bio internal
diff --git a/util/other.syms b/util/other.syms
new file mode 100644
index 000000000000..ea0a8caac435
--- /dev/null
+++ b/util/other.syms
@@ -0,0 +1,688 @@
+# This isn't a library ".num" file but is a list of documented items
+# that don't appear in lib*.num -- because they are define's, in
+# assembly language, etc.
+#
+OPENSSL_ia32cap environment
+OPENSSL_s390xcap environment
+OPENSSL_MALLOC_FD environment
+OPENSSL_MALLOC_FAILURES environment
+OPENSSL_instrument_bus assembler
+OPENSSL_instrument_bus2 assembler
+#
+ADMISSION_SYNTAX datatype
+ADMISSIONS datatype
+ASN1_AUX datatype
+ASN1_aux_cb datatype
+ASN1_aux_const_cb datatype
+ASN1_ex_d2i datatype
+ASN1_ex_d2i_ex datatype
+ASN1_ex_free_func datatype
+ASN1_ex_i2d datatype
+ASN1_ex_new_func datatype
+ASN1_ex_new_ex_func datatype
+ASN1_ex_print_func datatype
+ASN1_EXTERN_FUNCS datatype
+ASN1_ITEM datatype
+ASN1_PRINT_ARG datatype
+ASN1_STREAM_ARG datatype
+ASN1_STRING_TABLE datatype
+ASYNC_callback_fn datatype
+BIO_ADDR datatype
+BIO_ADDRINFO datatype
+BIO_callback_fn datatype
+BIO_callback_fn_ex datatype
+BIO_hostserv_priorities datatype
+BIO_lookup_type datatype
+CRYPTO_malloc_fn datatype
+CRYPTO_realloc_fn datatype
+CRYPTO_free_fn datatype
+CRYPTO_EX_dup datatype
+CRYPTO_EX_free datatype
+CRYPTO_EX_new datatype
+DTLS_timer_cb datatype
+EVP_KDF datatype
+EVP_KDF_CTX datatype
+EVP_KEYMGMT datatype
+EVP_MAC datatype
+EVP_MAC_CTX datatype
+EVP_PKEY datatype
+EVP_PKEY_gen_cb datatype
+EVP_PKEY_METHOD datatype
+EVP_PKEY_ASN1_METHOD datatype
+EVP_RAND datatype
+EVP_RAND_CTX datatype
+EVP_SIGNATURE datatype
+GEN_SESSION_CB datatype
+NAMING_AUTHORITY datatype
+OPENSSL_Applink external
+OSSL_ALGORITHM datatype
+OSSL_CALLBACK datatype
+OSSL_DECODER datatype
+OSSL_DECODER_CTX datatype
+OSSL_DECODER_CONSTRUCT datatype
+OSSL_DECODER_CLEANUP datatype
+OSSL_DECODER_INSTANCE datatype
+OSSL_DISPATCH datatype
+OSSL_ENCODER datatype
+OSSL_ENCODER_CTX datatype
+OSSL_ENCODER_CONSTRUCT datatype
+OSSL_ENCODER_CLEANUP datatype
+OSSL_ENCODER_INSTANCE datatype
+OSSL_HTTP_bio_cb_t datatype
+OSSL_HTTP_REQ_CTX datatype
+OSSL_ITEM datatype
+OSSL_LIB_CTX datatype
+OSSL_PARAM datatype
+OSSL_PASSPHRASE_CALLBACK datatype
+OSSL_PROVIDER datatype
+OSSL_STORE_CTX datatype
+OSSL_STORE_INFO datatype
+OSSL_STORE_LOADER datatype
+OSSL_STORE_LOADER_CTX datatype
+OSSL_STORE_SEARCH datatype
+OSSL_STORE_attach_fn datatype
+OSSL_STORE_close_fn datatype
+OSSL_STORE_ctrl_fn datatype
+OSSL_STORE_expect_fn datatype
+OSSL_STORE_find_fn datatype
+OSSL_STORE_eof_fn datatype
+OSSL_STORE_error_fn datatype
+OSSL_STORE_load_fn datatype
+OSSL_STORE_open_fn datatype
+OSSL_STORE_open_ex_fn datatype
+OSSL_STORE_post_process_info_fn datatype
+OSSL_trace_cb datatype
+PROFESSION_INFO datatype
+PROFESSION_INFOS datatype
+RAND_poll_cb datatype
+SSL_CTX_allow_early_data_cb_fn datatype
+SSL_CTX_keylog_cb_func datatype
+SSL_allow_early_data_cb_fn datatype
+SSL_async_callback_fn datatype
+SSL_client_hello_cb_fn datatype
+SSL_custom_ext_add_cb_ex datatype
+SSL_custom_ext_free_cb_ex datatype
+SSL_custom_ext_parse_cb_ex datatype
+SSL_psk_client_cb_func datatype
+SSL_psk_find_session_cb_func datatype
+SSL_psk_server_cb_func datatype
+SSL_psk_use_session_cb_func datatype
+SSL_verify_cb datatype
+UI datatype
+UI_METHOD datatype
+UI_STRING datatype
+UI_string_types datatype
+UI_string_types datatype
+X509_ATTRIBUTE datatype
+X509_STORE_CTX_cert_crl_fn datatype
+X509_STORE_CTX_check_crl_fn datatype
+X509_STORE_CTX_check_issued_fn datatype
+X509_STORE_CTX_check_policy_fn datatype
+X509_STORE_CTX_check_revocation_fn datatype
+X509_STORE_CTX_cleanup_fn datatype
+X509_STORE_CTX_get_crl_fn datatype
+X509_STORE_CTX_get_issuer_fn datatype
+X509_STORE_CTX_lookup_certs_fn datatype
+X509_STORE_CTX_lookup_crls_fn datatype
+X509_STORE_CTX_verify_cb datatype
+X509_STORE_CTX_verify_fn datatype
+X509_STORE_set_verify_cb_func datatype
+X509_LOOKUP datatype
+X509_LOOKUP_METHOD datatype
+X509_LOOKUP_TYPE datatype
+X509_LOOKUP_get_by_alias_fn datatype
+X509_LOOKUP_get_by_subject_fn datatype
+X509_LOOKUP_get_by_fingerprint_fn datatype
+X509_LOOKUP_ctrl_fn datatype
+X509_LOOKUP_get_by_issuer_serial_fn datatype
+X509_STORE datatype
+bio_info_cb datatype
+BIO_info_cb datatype
+custom_ext_add_cb datatype
+custom_ext_free_cb datatype
+custom_ext_parse_cb datatype
+pem_password_cb datatype
+ssl_ct_validation_cb datatype
+#
+ASN1_BIT_STRING_digest define
+BIO_append_filename define
+BIO_destroy_bio_pair define
+BIO_ctrl_dgram_connect define
+BIO_ctrl_set_connected define
+BIO_dgram_get_mtu_overhead define
+BIO_dgram_get_peer define
+BIO_dgram_set_peer define
+BIO_dgram_recv_timedout define
+BIO_dgram_send_timedout define
+BIO_do_accept define
+BIO_do_connect define
+BIO_do_handshake define
+BIO_eof define
+BIO_flush define
+BIO_get_accept_name define
+BIO_get_accept_port define
+BIO_get_accept_ip_family define
+BIO_get_app_data define
+BIO_get_ex_new_index define
+BIO_get_peer_name define
+BIO_get_peer_port define
+BIO_get_bind_mode define
+BIO_get_buffer_num_lines define
+BIO_get_cipher_ctx define
+BIO_get_cipher_status define
+BIO_get_close define
+BIO_get_ktls_send define
+BIO_get_ktls_recv define
+BIO_get_conn_address define
+BIO_get_conn_hostname define
+BIO_get_conn_port define
+BIO_get_conn_ip_family define
+BIO_get_fd define
+BIO_get_fp define
+BIO_get_indent define
+BIO_get_info_callback define
+BIO_get_md define
+BIO_get_md_ctx define
+BIO_get_mem_data define
+BIO_get_mem_ptr define
+BIO_get_num_renegotiates define
+BIO_get_read_request define
+BIO_get_ssl define
+BIO_get_write_buf_size define
+BIO_get_write_guarantee define
+BIO_make_bio_pair define
+BIO_pending define
+BIO_read_filename define
+BIO_reset define
+BIO_retry_type define
+BIO_rw_filename define
+BIO_seek define
+BIO_set_accept_bios define
+BIO_set_accept_name define
+BIO_set_accept_port define
+BIO_set_accept_ip_family define
+BIO_set_app_data define
+BIO_set_bind_mode define
+BIO_set_buffer_read_data define
+BIO_set_buffer_size define
+BIO_set_close define
+BIO_set_conn_address define
+BIO_set_conn_hostname define
+BIO_set_conn_port define
+BIO_set_conn_ip_family define
+BIO_set_fd define
+BIO_set_fp define
+BIO_set_indent define
+BIO_set_info_callback define
+BIO_set_md define
+BIO_set_mem_buf define
+BIO_set_mem_eof_return define
+BIO_set_nbio define
+BIO_set_nbio_accept define
+BIO_set_prefix define
+BIO_set_read_buffer_size define
+BIO_set_ssl define
+BIO_set_ssl_mode define
+BIO_set_ssl_renegotiate_bytes define
+BIO_set_ssl_renegotiate_timeout define
+BIO_set_write_buf_size define
+BIO_set_write_buffer_size define
+BIO_should_io_special define
+BIO_should_read define
+BIO_should_retry define
+BIO_should_write define
+BIO_shutdown_wr define
+BIO_tell define
+BIO_wpending define
+BIO_write_filename define
+BN_mod define
+BN_num_bytes define
+BN_one define
+BN_zero define deprecated 0.9.8
+CONF_modules_free define deprecated 1.1.0
+DES_ecb2_encrypt define
+DES_ede2_cbc_encrypt define
+DES_ede2_cfb64_encrypt define
+DES_ede2_ofb64_encrypt define
+DTLS_get_link_min_mtu define
+DTLS_set_link_mtu define
+ENGINE_cleanup define deprecated 1.1.0
+ERR_FATAL_ERROR define
+ERR_GET_LIB define
+ERR_GET_REASON define
+ERR_PACK define
+ERR_free_strings define deprecated 1.1.0
+ERR_put_error define deprecated 3.0
+ERR_load_crypto_strings define deprecated 1.1.0
+ERR_raise define
+ERR_raise_data define
+EVP_DigestSignUpdate define
+EVP_DigestVerifyUpdate define
+EVP_MD_CTX_get_block_size define
+EVP_MD_CTX_get0_name define
+EVP_MD_CTX_get_size define
+EVP_MD_CTX_get_type define
+EVP_OpenUpdate define
+EVP_PKEY_CTX_add1_hkdf_info define
+EVP_PKEY_CTX_add1_tls1_prf_seed define
+EVP_PKEY_CTX_get0_dh_kdf_oid define
+EVP_PKEY_CTX_get0_dh_kdf_ukm define
+EVP_PKEY_CTX_get0_ecdh_kdf_ukm define
+EVP_PKEY_CTX_get0_rsa_oaep_label define
+EVP_PKEY_CTX_get_dh_kdf_md define
+EVP_PKEY_CTX_get_dh_kdf_outlen define
+EVP_PKEY_CTX_get_dh_kdf_type define
+EVP_PKEY_CTX_get_ecdh_cofactor_mode define
+EVP_PKEY_CTX_get_ecdh_kdf_md define
+EVP_PKEY_CTX_get_ecdh_kdf_outlen define
+EVP_PKEY_CTX_get_ecdh_kdf_type define
+EVP_PKEY_CTX_get_rsa_mgf1_md define
+EVP_PKEY_CTX_get_rsa_oaep_md define
+EVP_PKEY_CTX_get_rsa_padding define
+EVP_PKEY_CTX_get_rsa_pss_saltlen define
+EVP_PKEY_CTX_get_signature_md define
+EVP_PKEY_CTX_set0_dh_kdf_oid define
+EVP_PKEY_CTX_set0_dh_kdf_ukm define
+EVP_PKEY_CTX_set0_ecdh_kdf_ukm define
+EVP_PKEY_CTX_set0_rsa_oaep_label define
+EVP_PKEY_CTX_set1_hkdf_key define
+EVP_PKEY_CTX_set1_hkdf_salt define
+EVP_PKEY_CTX_set1_pbe_pass define
+EVP_PKEY_CTX_set1_scrypt_salt define
+EVP_PKEY_CTX_set1_tls1_prf_secret define
+EVP_PKEY_CTX_set_dh_paramgen_generator define
+EVP_PKEY_CTX_set_dh_paramgen_prime_len define
+EVP_PKEY_CTX_set_dh_paramgen_subprime_len define
+EVP_PKEY_CTX_set_dh_paramgen_type define
+EVP_PKEY_CTX_set_dh_kdf_md define
+EVP_PKEY_CTX_set_dh_kdf_outlen define
+EVP_PKEY_CTX_set_dh_kdf_type define
+EVP_PKEY_CTX_set_dh_nid define
+EVP_PKEY_CTX_set_dh_pad define
+EVP_PKEY_CTX_set_dh_rfc5114 define
+EVP_PKEY_CTX_set_dhx_rfc5114 define
+EVP_PKEY_CTX_set_dsa_paramgen_bits define
+EVP_PKEY_CTX_set_dsa_paramgen_q_bits define
+EVP_PKEY_CTX_set_dsa_paramgen_md define
+EVP_PKEY_CTX_set_ec_param_enc define
+EVP_PKEY_CTX_set_ec_paramgen_curve_nid define
+EVP_PKEY_CTX_set_ecdh_cofactor_mode define
+EVP_PKEY_CTX_set_ecdh_kdf_md define
+EVP_PKEY_CTX_set_ecdh_kdf_outlen define
+EVP_PKEY_CTX_set_ecdh_kdf_type define
+EVP_PKEY_CTX_set_hkdf_md define
+EVP_PKEY_CTX_set_mac_key define
+EVP_PKEY_CTX_set_rsa_keygen_bits define
+EVP_PKEY_CTX_set_rsa_keygen_pubexp define
+EVP_PKEY_CTX_set_rsa_keygen_primes define
+EVP_PKEY_CTX_set_rsa_mgf1_md define
+EVP_PKEY_CTX_set_rsa_oaep_md define
+EVP_PKEY_CTX_set_rsa_padding define
+EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md define
+EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen define
+EVP_PKEY_CTX_set_rsa_pss_keygen_md define
+EVP_PKEY_CTX_set_rsa_pss_saltlen define
+EVP_PKEY_CTX_set_scrypt_N define
+EVP_PKEY_CTX_set_scrypt_r define
+EVP_PKEY_CTX_set_scrypt_maxmem_bytes define
+EVP_PKEY_CTX_set_scrypt_p define
+EVP_PKEY_CTX_set_signature_md define
+EVP_PKEY_CTX_set_tls1_prf_md define
+EVP_PKEY_assign_DH define
+EVP_PKEY_assign_DSA define
+EVP_PKEY_assign_EC_KEY define
+EVP_PKEY_assign_POLY1305 define
+EVP_PKEY_assign_RSA define
+EVP_PKEY_assign_SIPHASH define
+EVP_RAND_STATE_ERROR define
+EVP_RAND_STATE_READY define
+EVP_RAND_STATE_UNINITIALISED define
+EVP_SealUpdate define
+EVP_SignInit define
+EVP_SignInit_ex define
+EVP_SignUpdate define
+EVP_VerifyInit define
+EVP_VerifyInit_ex define
+EVP_VerifyUpdate define
+EVP_bf_cfb define
+EVP_cast5_cfb define
+EVP_cleanup define deprecated 1.1.0
+EVP_EC_gen define
+EVP_get_digestbynid define
+EVP_get_digestbyobj define
+EVP_get_macbynid define
+EVP_get_macbyobj define
+EVP_idea_cfb define
+EVP_rc2_cfb define
+EVP_rc5_32_12_16_cfb define
+EVP_RSA_gen define
+EVP_seed_cfb define
+EVP_sm4_cfb define
+EXT_UTF8STRING define
+OBJ_cleanup define deprecated 1.1.0
+OCSP_parse_url define
+OCSP_REQ_CTX datatype deprecated 3.0.0
+OCSP_REQ_CTX_add1_header define deprecated 3.0.0
+OCSP_REQ_CTX_free define deprecated 3.0.0
+OCSP_REQ_CTX_i2d define deprecated 3.0.0
+OCSP_REQ_CTX_set1_req define deprecated 3.0.0
+OCSP_sendreq_nbio define deprecated 3.0.0
+OCSP_set_max_response_length define deprecated 3.0.0
+OPENSSL_FILE define
+OPENSSL_FUNC define
+OPENSSL_LINE define
+OPENSSL_MSTR define
+OPENSSL_MSTR_HELPER define
+OPENSSL_VERSION_MAJOR define
+OPENSSL_VERSION_MINOR define
+OPENSSL_VERSION_NUMBER define
+OPENSSL_VERSION_PATCH define
+OPENSSL_VERSION_PRE_RELEASE define
+OPENSSL_VERSION_PREREQ define
+OPENSSL_VERSION_BUILD_METADATA define
+OPENSSL_VERSION_PRE_RELEASE_STR define
+OPENSSL_VERSION_BUILD_METADATA_STR define
+OPENSSL_VERSION_TEXT define
+OPENSSL_clear_free define
+OPENSSL_clear_realloc define
+OPENSSL_free define
+OPENSSL_malloc define
+OPENSSL_malloc_init define
+OPENSSL_mem_debug_pop define deprecated 3.0.0
+OPENSSL_mem_debug_push define deprecated 3.0.0
+OPENSSL_memdup define
+OPENSSL_no_config define deprecated 1.1.0
+OPENSSL_realloc define
+OPENSSL_secure_actual_size define
+OPENSSL_secure_clear_free define
+OPENSSL_secure_free define
+OPENSSL_secure_malloc define
+OPENSSL_secure_zalloc define
+OPENSSL_strdup define
+OPENSSL_strndup define
+OPENSSL_zalloc define
+OpenSSL_add_all_algorithms define deprecated 1.1.0
+OpenSSL_add_all_ciphers define deprecated 1.1.0
+OpenSSL_add_all_digests define deprecated 1.1.0
+OpenSSL_add_ssl_algorithms define
+OSSL_CMP_exec_IR_ses define
+OSSL_CMP_exec_CR_ses define
+OSSL_CMP_exec_P10CR_ses define
+OSSL_CMP_exec_KUR_ses define
+OSSL_CMP_CTX_set_log_verbosity define
+OSSL_CMP_CR define
+OSSL_CMP_IR define
+OSSL_CMP_KUR define
+OSSL_CMP_LOG_ALERT define
+OSSL_CMP_LOG_CRIT define
+OSSL_CMP_LOG_DEBUG define
+OSSL_CMP_LOG_EMERG define
+OSSL_CMP_LOG_ERR define
+OSSL_CMP_LOG_INFO define
+OSSL_CMP_LOG_NOTICE define
+OSSL_CMP_LOG_TRACE define
+OSSL_CMP_LOG_WARNING define
+OSSL_CMP_MSTR_HELPER define
+OSSL_CMP_MSTR define
+OSSL_CMP_P10CR define
+OSSL_CMP_certConf_cb_t datatype
+OSSL_CMP_log_cb_t datatype
+OSSL_CMP_severity datatype
+OSSL_CMP_transfer_cb_t datatype
+OSSL_CMP_SRV_cert_request_cb_t datatype
+OSSL_CMP_SRV_rr_cb_t datatype
+OSSL_CMP_SRV_certConf_cb_t datatype
+OSSL_CMP_SRV_genm_cb_t datatype
+OSSL_CMP_SRV_error_cb_t datatype
+OSSL_CMP_SRV_pollReq_cb_t datatype
+OSSL_CORE_MAKE_FUNC define
+OSSL_PARAM_TYPE define
+OSSL_PARAM_octet_ptr define
+OSSL_PARAM_octet_string define
+OSSL_PARAM_utf8_ptr define
+OSSL_PARAM_BN define
+OSSL_PARAM_TYPE generic
+OSSL_PARAM_construct_TYPE generic
+OSSL_PARAM_utf8_string define
+OSSL_PARAM_get_TYPE generic
+OSSL_PARAM_END define
+OSSL_PARAM_set_TYPE generic
+OSSL_ENCODER_PUBKEY_TO_DER_PQ define
+OSSL_ENCODER_PrivateKey_TO_DER_PQ define
+OSSL_ENCODER_Parameters_TO_DER_PQ define
+OSSL_ENCODER_PUBKEY_TO_PEM_PQ define
+OSSL_ENCODER_PrivateKey_TO_PEM_PQ define
+OSSL_ENCODER_Parameters_TO_PEM_PQ define
+OSSL_ENCODER_PUBKEY_TO_TEXT_PQ define
+OSSL_ENCODER_PrivateKey_TO_TEXT_PQ define
+OSSL_ENCODER_Parameters_TO_TEXT_PQ define
+PEM_FLAG_EAY_COMPATIBLE define
+PEM_FLAG_ONLY_B64 define
+PEM_FLAG_SECURE define
+RAND_cleanup define deprecated 1.1.0
+SSL_COMP_free_compression_methods define deprecated 1.1.0
+SSL_CTX_add0_chain_cert define
+SSL_CTX_add1_chain_cert define
+SSL_CTX_add_extra_chain_cert define
+SSL_CTX_build_cert_chain define
+SSL_CTX_clear_chain_certs define
+SSL_CTX_clear_extra_chain_certs define
+SSL_CTX_clear_mode define
+SSL_CTX_decrypt_session_ticket_fn define
+SSL_CTX_disable_ct define
+SSL_CTX_generate_session_ticket_fn define
+SSL_CTX_get0_chain_certs define
+SSL_CTX_get0_chain_cert_store define
+SSL_CTX_get0_verify_cert_store define
+SSL_CTX_get_default_read_ahead define
+SSL_CTX_get_extra_chain_certs define
+SSL_CTX_get_extra_chain_certs_only define
+SSL_CTX_get_max_cert_list define
+SSL_CTX_get_max_proto_version define
+SSL_CTX_get_min_proto_version define
+SSL_CTX_get_mode define
+SSL_CTX_get_read_ahead define
+SSL_CTX_get_session_cache_mode define
+SSL_CTX_get_tlsext_status_arg define
+SSL_CTX_get_tlsext_status_cb define
+SSL_CTX_get_tlsext_status_type define
+SSL_CTX_select_current_cert define
+SSL_CTX_sess_accept define
+SSL_CTX_sess_accept_good define
+SSL_CTX_sess_accept_renegotiate define
+SSL_CTX_sess_cache_full define
+SSL_CTX_sess_cb_hits define
+SSL_CTX_sess_connect define
+SSL_CTX_sess_connect_good define
+SSL_CTX_sess_connect_renegotiate define
+SSL_CTX_sess_get_cache_size define
+SSL_CTX_sess_hits define
+SSL_CTX_sess_misses define
+SSL_CTX_sess_number define
+SSL_CTX_sess_set_cache_size define
+SSL_CTX_sess_timeouts define
+SSL_CTX_set0_chain define
+SSL_CTX_set0_chain_cert_store define
+SSL_CTX_set0_verify_cert_store define
+SSL_CTX_set1_chain define
+SSL_CTX_set1_chain_cert_store define
+SSL_CTX_set1_client_sigalgs define
+SSL_CTX_set1_client_sigalgs_list define
+SSL_CTX_set1_curves define
+SSL_CTX_set1_curves_list define
+SSL_CTX_set1_groups define
+SSL_CTX_set1_groups_list define
+SSL_CTX_set1_sigalgs define
+SSL_CTX_set1_sigalgs_list define
+SSL_CTX_set1_verify_cert_store define
+SSL_CTX_set_current_cert define
+SSL_CTX_set_dh_auto define
+SSL_CTX_set_ecdh_auto define
+SSL_CTX_set_max_cert_list define
+SSL_CTX_set_max_pipelines define
+SSL_CTX_set_max_proto_version define
+SSL_CTX_set_max_send_fragment define
+SSL_CTX_set_min_proto_version define
+SSL_CTX_set_mode define
+SSL_CTX_set_msg_callback_arg define
+SSL_CTX_set_read_ahead define
+SSL_CTX_set_session_cache_mode define
+SSL_CTX_set_split_send_fragment define
+SSL_CTX_set_tlsext_servername_arg define
+SSL_CTX_set_tlsext_servername_callback define
+SSL_CTX_set_tlsext_status_arg define
+SSL_CTX_set_tlsext_status_cb define
+SSL_CTX_set_tlsext_status_type define
+SSL_CTX_set_tlsext_ticket_key_cb define
+SSL_CTX_set_tmp_dh define
+SSL_CTX_set_tmp_ecdh define
+SSL_DEFAULT_CIPHER_LIST define deprecated 3.0.0
+SSL_OP_BIT define
+SSL_add0_chain_cert define
+SSL_add1_chain_cert define
+SSL_build_cert_chain define
+SSL_clear_chain_certs define
+SSL_clear_mode define
+SSL_disable_ct define
+SSL_get0_chain_certs define
+SSL_get0_session define
+SSL_get0_chain_cert_store define
+SSL_get0_verify_cert_store define
+SSL_get1_curves define
+SSL_get1_groups define
+SSL_get_cipher define
+SSL_get_cipher_bits define
+SSL_get_cipher_name define
+SSL_get_cipher_version define
+SSL_get_extms_support define
+SSL_get_max_cert_list define
+SSL_get_max_proto_version define
+SSL_get_min_proto_version define
+SSL_get_mode define
+SSL_get_peer_certificate define deprecated 3.0.0
+SSL_get_peer_signature_nid define
+SSL_get_peer_tmp_key define
+SSL_get_secure_renegotiation_support define
+SSL_get_server_tmp_key define
+SSL_get_shared_curve define
+SSL_get_shared_group define
+SSL_get_negotiated_group define
+SSL_get_signature_nid define
+SSL_get_time define
+SSL_get_timeout define
+SSL_get_tlsext_status_ocsp_resp define
+SSL_get_tlsext_status_type define
+SSL_get_tmp_key define
+SSL_in_accept_init define
+SSL_in_connect_init define
+SSL_library_init define
+SSL_load_error_strings define deprecated 1.1.0
+SSL_select_current_cert define
+SSL_set0_chain define
+SSL_set0_chain_cert_store define
+SSL_set0_verify_cert_store define
+SSL_set1_chain define
+SSL_set1_chain_cert_store define
+SSL_set1_client_sigalgs define
+SSL_set1_client_sigalgs_list define
+SSL_set1_curves define
+SSL_set1_curves_list define
+SSL_set1_groups define
+SSL_set1_groups_list define
+SSL_set1_sigalgs define
+SSL_set1_sigalgs_list define
+SSL_set1_verify_cert_store define
+SSL_set_current_cert define
+SSL_set_dh_auto define
+SSL_set_ecdh_auto define
+SSL_set_max_cert_list define
+SSL_set_max_pipelines define
+SSL_set_max_proto_version define
+SSL_set_max_send_fragment define
+SSL_set_min_proto_version define
+SSL_set_mode define
+SSL_set_msg_callback_arg define
+SSL_set_mtu define
+SSL_set_split_send_fragment define
+SSL_set_time define
+SSL_set_timeout define
+SSL_set_tlsext_host_name define
+SSL_set_tlsext_status_ocsp_resp define
+SSL_set_tlsext_status_type define
+SSL_set_tmp_dh define
+SSL_set_tmp_ecdh define
+SSL_want_async define
+SSL_want_async_job define
+SSL_want_client_hello_cb define
+SSL_want_nothing define
+SSL_want_read define
+SSL_want_retry_verify define
+SSL_want_write define
+SSL_want_x509_lookup define
+SSLv23_client_method define
+SSLv23_method define
+SSLv23_server_method define
+TLS_DEFAULT_CIPHERSUITES define deprecated 3.0.0
+X509_CRL_http_nbio define deprecated 3.0.0
+X509_http_nbio define deprecated 3.0.0
+X509_LOOKUP_add_dir define
+X509_LOOKUP_add_store define
+X509_LOOKUP_add_store_ex define
+X509_LOOKUP_load_file define
+X509_LOOKUP_load_file_ex define
+X509_LOOKUP_load_store define
+X509_LOOKUP_load_store_ex define
+X509_NAME_hash define
+X509_STORE_set_lookup_crls_cb define
+X509_STORE_set_verify_func define
+EVP_PKEY_CTX_set1_id define
+EVP_PKEY_CTX_get1_id define
+EVP_PKEY_CTX_get1_id_len define
+ASYNC_STATUS_EAGAIN define
+ASYNC_STATUS_OK define
+ASYNC_STATUS_ERR define
+ASYNC_STATUS_UNSUPPORTED define
+OSSL_TRACE_BEGIN define
+OSSL_TRACE_END define
+OSSL_TRACE_CANCEL define
+OSSL_TRACE1 define
+OSSL_TRACE2 define
+OSSL_TRACE9 define
+TS_VERIFY_CTS_set_certs define deprecated 3.0.0
+EVP_PKEY_get1_tls_encodedpoint define deprecated 3.0.0
+EVP_PKEY_set1_tls_encodedpoint define deprecated 3.0.0
+EVP_MD_type define
+EVP_MD_nid define
+EVP_MD_name define
+EVP_MD_pkey_type define
+EVP_MD_size define
+EVP_MD_block_size define
+EVP_MD_flags define
+EVP_MD_CTX_size define
+EVP_MD_CTX_block_size define
+EVP_MD_CTX_type define
+EVP_MD_CTX_pkey_ctx define
+EVP_MD_CTX_md_data define
+EVP_CIPHER_nid define
+EVP_CIPHER_name define
+EVP_CIPHER_block_size define
+EVP_CIPHER_key_length define
+EVP_CIPHER_iv_length define
+EVP_CIPHER_flags define
+EVP_CIPHER_mode define
+EVP_CIPHER_type define
+EVP_CIPHER_CTX_encrypting define
+EVP_CIPHER_CTX_nid define
+EVP_CIPHER_CTX_block_size define
+EVP_CIPHER_CTX_key_length define
+EVP_CIPHER_CTX_iv_length define
+EVP_CIPHER_CTX_tag_length define
+EVP_CIPHER_CTX_num define
+EVP_CIPHER_CTX_type define
+EVP_CIPHER_CTX_mode define
+EVP_PKEY_bits define
+EVP_PKEY_security_bits define
+EVP_PKEY_size define
+EVP_PKEY_id define
+EVP_PKEY_base_id define
+SSL_set_retry_verify define
diff --git a/util/perl/OpenSSL/Config/Query.pm b/util/perl/OpenSSL/Config/Query.pm
new file mode 100644
index 000000000000..22d6a459bdde
--- /dev/null
+++ b/util/perl/OpenSSL/Config/Query.pm
@@ -0,0 +1,177 @@
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+package OpenSSL::Config::Query;
+
+use 5.10.0;
+use strict;
+use warnings;
+use Carp;
+
+=head1 NAME
+
+OpenSSL::Config::Query - Query OpenSSL configuration info
+
+=head1 SYNOPSIS
+
+ use OpenSSL::Config::Info;
+
+ my $query = OpenSSL::Config::Query->new(info => \%unified_info);
+
+ # Query for something that's expected to give a scalar back
+ my $variable = $query->method(... args ...);
+
+ # Query for something that's expected to give a list back
+ my @variable = $query->method(... args ...);
+
+=head1 DESCRIPTION
+
+The unified info structure, commonly known as the %unified_info table, has
+become quite complex, and a bit overwhelming to look through directly. This
+module makes querying this structure simpler, through diverse methods.
+
+=head2 Constructor
+
+=over 4
+
+=item B<new> I<%options>
+
+Creates an instance of the B<OpenSSL::Config::Query> class. It takes options
+in keyed pair form, i.e. a series of C<< key => value >> pairs. Available
+options are:
+
+=over 4
+
+=item B<info> =E<gt> I<HASHREF>
+
+A reference to a unified information hash table, most commonly known as
+%unified_info.
+
+=item B<config> =E<gt> I<HASHREF>
+
+A reference to a config information hash table, most commonly known as
+%config.
+
+=back
+
+Example:
+
+ my $info = OpenSSL::Config::Info->new(info => \%unified_info);
+
+=back
+
+=cut
+
+sub new {
+ my $class = shift;
+ my %opts = @_;
+
+ my @messages = _check_accepted_options(\%opts,
+ info => 'HASH',
+ config => 'HASH');
+ croak $messages[0] if @messages;
+
+ # We make a shallow copy of the input structure. We might make
+ # a different choice in the future...
+ my $instance = { info => $opts{info} // {},
+ config => $opts{config} // {} };
+ bless $instance, $class;
+
+ return $instance;
+}
+
+=head2 Query methods
+
+=over 4
+
+=item B<get_sources> I<LIST>
+
+LIST is expected to be the collection of names of end products, such as
+programs, modules, libraries.
+
+The returned result is a hash table reference, with each key being one of
+these end product names, and its value being a reference to an array of
+source file names that constitutes everything that will or may become part
+of that end product.
+
+=cut
+
+sub get_sources {
+ my $self = shift;
+
+ my $result = {};
+ foreach (@_) {
+ my @sources = @{$self->{info}->{sources}->{$_} // []};
+ my @staticlibs =
+ grep { $_ =~ m|\.a$| } @{$self->{info}->{depends}->{$_} // []};
+
+ my %parts = ( %{$self->get_sources(@sources)},
+ %{$self->get_sources(@staticlibs)} );
+ my @parts = map { @{$_} } values %parts;
+
+ my @generator =
+ ( ( $self->{info}->{generate}->{$_} // [] ) -> [0] // () );
+ my %generator_parts = %{$self->get_sources(@generator)};
+ # if there are any generator parts, we ignore it, because that means
+ # it's a compiled program and thus NOT part of the source that's
+ # queried.
+ @generator = () if %generator_parts;
+
+ my @partial_result =
+ ( ( map { @{$_} } values %parts ),
+ ( grep { !defined($parts{$_}) } @sources, @generator ) );
+
+ # Push conditionally, to avoid creating $result->{$_} with an empty
+ # value
+ push @{$result->{$_}}, @partial_result if @partial_result;
+ }
+
+ return $result;
+}
+
+=item B<get_config> I<LIST>
+
+LIST is expected to be the collection of names of configuration data, such
+as build_infos, sourcedir, ...
+
+The returned result is a hash table reference, with each key being one of
+these configuration data names, and its value being a reference to the value
+corresponding to that name.
+
+=cut
+
+sub get_config {
+ my $self = shift;
+
+ return { map { $_ => $self->{config}->{$_} } @_ };
+}
+
+########
+#
+# Helper functions
+#
+
+sub _check_accepted_options {
+ my $opts = shift; # HASH reference (hopefully)
+ my %conds = @_; # key => type
+
+ my @messages;
+ my %optnames = map { $_ => 1 } keys %$opts;
+ foreach (keys %conds) {
+ delete $optnames{$_};
+ }
+ push @messages, "Unknown options: " . join(', ', sort keys %optnames)
+ if keys %optnames;
+ foreach (sort keys %conds) {
+ push @messages, "'$_' value not a $conds{$_} reference"
+ if (defined $conds{$_} && defined $opts->{$_}
+ && ref $opts->{$_} ne $conds{$_});
+ }
+ return @messages;
+}
+
+1;
diff --git a/util/perl/OpenSSL/Glob.pm b/util/perl/OpenSSL/Glob.pm
new file mode 100644
index 000000000000..ec87da4aea9c
--- /dev/null
+++ b/util/perl/OpenSSL/Glob.pm
@@ -0,0 +1,21 @@
+package OpenSSL::Glob;
+
+use strict;
+use warnings;
+
+use File::Glob;
+
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT);
+
+$VERSION = '0.1';
+@ISA = qw(Exporter);
+@EXPORT = qw(glob);
+
+sub glob {
+ goto &File::Glob::bsd_glob if $^O ne "VMS";
+ goto &CORE::glob;
+}
+
+1;
+__END__
diff --git a/util/perl/OpenSSL/OID.pm b/util/perl/OpenSSL/OID.pm
new file mode 100644
index 000000000000..0b39ef9fd27f
--- /dev/null
+++ b/util/perl/OpenSSL/OID.pm
@@ -0,0 +1,307 @@
+# Copyright 2016-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
+
+# Author note: this is originally RL::ASN1::OID,
+# repurposed by the author for OpenSSL use.
+
+package OpenSSL::OID;
+
+use 5.10.0;
+use strict;
+use warnings;
+use Carp;
+
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+@ISA = qw(Exporter);
+@EXPORT = qw(parse_oid encode_oid register_oid
+ registered_oid_arcs registered_oid_leaves);
+@EXPORT_OK = qw(encode_oid_nums);
+
+# Unfortunately, the pairwise List::Util functionality came with perl
+# v5.19.3, and I want to target absolute compatibility with perl 5.10
+# and up. That means I have to implement quick pairwise functions here.
+
+#use List::Util;
+sub _pairs (@);
+sub _pairmap (&@);
+
+=head1 NAME
+
+OpenSSL::OID - an OBJECT IDENTIFIER parser / encoder
+
+=head1 VERSION
+
+Version 0.1
+
+=cut
+
+our $VERSION = '0.1';
+
+
+=head1 SYNOPSIS
+
+ use OpenSSL::OID;
+
+ # This gives the array ( 1 2 840 113549 1 1 )
+ my @nums = parse_oid('{ pkcs-1 1 }');
+
+ # This gives the array of DER encoded bytes for the OID, i.e.
+ # ( 42, 134, 72, 134, 247, 13, 1, 1 )
+ my @bytes = encode_oid('{ pkcs-1 1 }');
+
+ # This registers a name with an OID. It's saved internally and
+ # serves as repository of names for further parsing, such as 'pkcs-1'
+ # in the strings used above.
+ register_object('pkcs-1', '{ pkcs 1 }');
+
+
+ use OpenSSL::OID qw(:DEFAULT encode_oid_nums);
+
+ # This does the same as encode_oid(), but takes the output of
+ # parse_oid() as input.
+ my @bytes = encode_oid_nums(@nums);
+
+=head1 EXPORT
+
+The functions parse_oid and encode_oid are exported by default.
+The function encode_oid_nums() can be exported explicitly.
+
+=cut
+
+######## REGEXPS
+
+# ASN.1 object identifiers come in two forms: 1) the bracketed form
+#(referred to as ObjectIdentifierValue in X.690), 2) the dotted form
+#(referred to as XMLObjIdentifierValue in X.690)
+#
+# examples of 1 (these are all the OID for rsaEncrypted):
+#
+# { iso (1) 2 840 11349 1 1 }
+# { pkcs 1 1 }
+# { pkcs1 1 }
+#
+# examples of 2:
+#
+# 1.2.840.113549.1.1
+# pkcs.1.1
+# pkcs1.1
+#
+my $identifier_re = qr/[a-z](?:[-_A-Za-z0-9]*[A-Za-z0-9])?/;
+# The only difference between $objcomponent_re and $xmlobjcomponent_re is
+# the separator in the top branch. Each component is always parsed in two
+# groups, so we get a pair of values regardless. That's the reason for the
+# empty parentheses.
+# Because perl doesn't try to do an exhaustive try of every branch it rather
+# stops on the first that matches, we need to have them in order of longest
+# to shortest where there may be ambiguity.
+my $objcomponent_re = qr/(?|
+ (${identifier_re}) \s* \((\d+)\)
+ |
+ (${identifier_re}) ()
+ |
+ ()(\d+)
+ )/x;
+my $xmlobjcomponent_re = qr/(?|
+ (${identifier_re}) \. \((\d+)\)
+ |
+ (${identifier_re}) ()
+ |
+ () (\d+)
+ )/x;
+
+my $obj_re =
+ qr/(?: \{ \s* (?: ${objcomponent_re} \s+ )* ${objcomponent_re} \s* \} )/x;
+my $xmlobj_re =
+ qr/(?: (?: ${xmlobjcomponent_re} \. )* ${xmlobjcomponent_re} )/x;
+
+######## NAME TO OID REPOSITORY
+
+# Recorded OIDs, to support things like '{ pkcs1 1 }'
+# Do note that we don't currently support relative OIDs
+#
+# The key is the identifier.
+#
+# The value is a hash, composed of:
+# type => 'arc' | 'leaf'
+# nums => [ LIST ]
+# Note that the |type| always starts as a 'leaf', and may change to an 'arc'
+# on the fly, as new OIDs are parsed.
+my %name2oid = ();
+
+########
+
+=head1 SUBROUTINES/METHODS
+
+=over 4
+
+=item parse_oid()
+
+TBA
+
+=cut
+
+sub parse_oid {
+ my $input = shift;
+
+ croak "Invalid extra arguments" if (@_);
+
+ # The components become a list of ( identifier, number ) pairs,
+ # where they can also be the empty string if they are not present
+ # in the input.
+ my @components;
+ if ($input =~ m/^\s*(${obj_re})\s*$/x) {
+ my $oid = $1;
+ @components = ( $oid =~ m/${objcomponent_re}\s*/g );
+ } elsif ($input =~ m/^\s*(${xmlobj_re})\s*$/) {
+ my $oid = $1;
+ @components = ( $oid =~ m/${xmlobjcomponent_re}\.?/g );
+ }
+
+ croak "Invalid ASN.1 object '$input'" unless @components;
+ die "Internal error when parsing '$input'"
+ unless scalar(@components) % 2 == 0;
+
+ # As we currently only support a name without number as first
+ # component, the easiest is to have a direct look at it and
+ # hack it.
+ my @first = _pairmap {
+ my ($a, $b) = @$_;
+ return $b if $b ne '';
+ return @{$name2oid{$a}->{nums}} if $a ne '' && defined $name2oid{$a};
+ croak "Undefined identifier $a" if $a ne '';
+ croak "Empty OID element (how's that possible?)";
+ } ( @components[0..1] );
+
+ my @numbers =
+ (
+ @first,
+ _pairmap {
+ my ($a, $b) = @$_;
+ return $b if $b ne '';
+ croak "Unsupported relative OID $a" if $a ne '';
+ croak "Empty OID element (how's that possible?)";
+ } @components[2..$#components]
+ );
+
+ # If the first component has an identifier and there are other
+ # components following it, we change the type of that identifier
+ # to 'arc'.
+ if (scalar @components > 2
+ && $components[0] ne ''
+ && defined $name2oid{$components[0]}) {
+ $name2oid{$components[0]}->{type} = 'arc';
+ }
+
+ return @numbers;
+}
+
+=item encode_oid()
+
+=cut
+
+# Forward declaration
+sub encode_oid_nums;
+sub encode_oid {
+ return encode_oid_nums parse_oid @_;
+}
+
+=item register_oid()
+
+=cut
+
+sub register_oid {
+ my $name = shift;
+ my @nums = parse_oid @_;
+
+ if (defined $name2oid{$name}) {
+ my $str1 = join(',', @nums);
+ my $str2 = join(',', @{$name2oid{$name}->{nums}});
+
+ croak "Invalid redefinition of $name with different value"
+ unless $str1 eq $str2;
+ } else {
+ $name2oid{$name} = { type => 'leaf', nums => [ @nums ] };
+ }
+}
+
+=item registered_oid_arcs()
+
+=item registered_oid_leaves()
+
+=cut
+
+sub _registered_oids {
+ my $type = shift;
+
+ return grep { $name2oid{$_}->{type} eq $type } keys %name2oid;
+}
+
+sub registered_oid_arcs {
+ return _registered_oids( 'arc' );
+}
+
+sub registered_oid_leaves {
+ return _registered_oids( 'leaf' );
+}
+
+=item encode_oid_nums()
+
+=cut
+
+# Internal helper. It takes a numeric OID component and generates the
+# DER encoding for it.
+sub _gen_oid_bytes {
+ my $num = shift;
+ my $cnt = 0;
+
+ return ( $num ) if $num < 128;
+ return ( ( map { $_ | 0x80 } _gen_oid_bytes($num >> 7) ), $num & 0x7f );
+}
+
+sub encode_oid_nums {
+ my @numbers = @_;
+
+ croak 'Invalid OID values: ( ', join(', ', @numbers), ' )'
+ if (scalar @numbers < 2
+ || $numbers[0] < 0 || $numbers[0] > 2
+ || $numbers[1] < 0 || $numbers[1] > 39);
+
+ my $first = shift(@numbers) * 40 + shift(@numbers);
+ @numbers = ( $first, map { _gen_oid_bytes($_) } @numbers );
+
+ return @numbers;
+}
+
+=back
+
+=head1 AUTHOR
+
+Richard levitte, C<< <richard at levitte.org> >>
+
+=cut
+
+######## Helpers
+
+sub _pairs (@) {
+ croak "Odd number of arguments" if @_ & 1;
+
+ my @pairlist = ();
+
+ while (@_) {
+ my $x = [ shift, shift ];
+ push @pairlist, $x;
+ }
+ return @pairlist;
+}
+
+sub _pairmap (&@) {
+ my $block = shift;
+ map { $block->($_) } _pairs @_;
+}
+
+1; # End of OpenSSL::OID
diff --git a/util/perl/OpenSSL/Ordinals.pm b/util/perl/OpenSSL/Ordinals.pm
new file mode 100644
index 000000000000..4d8c616b5b0a
--- /dev/null
+++ b/util/perl/OpenSSL/Ordinals.pm
@@ -0,0 +1,1087 @@
+#! /usr/bin/env perl
+# Copyright 2018-2023 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
+
+package OpenSSL::Ordinals;
+
+use strict;
+use warnings;
+use Carp;
+use Scalar::Util qw(blessed);
+use OpenSSL::Util;
+
+use constant {
+ # "magic" filters, see the filters at the end of the file
+ F_NAME => 1,
+ F_NUMBER => 2,
+};
+
+=head1 NAME
+
+OpenSSL::Ordinals - a private module to read and walk through ordinals
+
+=head1 SYNOPSIS
+
+ use OpenSSL::Ordinals;
+
+ my $ordinals = OpenSSL::Ordinals->new(from => "foo.num");
+ # or alternatively
+ my $ordinals = OpenSSL::Ordinals->new();
+ $ordinals->load("foo.num");
+
+ foreach ($ordinals->items(comparator => by_name()) {
+ print $_->name(), "\n";
+ }
+
+=head1 DESCRIPTION
+
+This is a OpenSSL private module to load an ordinals (F<.num>) file and
+write out the data you want, sorted and filtered according to your rules.
+
+An ordinals file is a file that enumerates all the symbols that a shared
+library or loadable module must export. Each of them have a unique
+assigned number as well as other attributes to indicate if they only exist
+on a subset of the supported platforms, or if they are specific to certain
+features.
+
+The unique numbers each symbol gets assigned needs to be maintained for a
+shared library or module to stay compatible with previous versions on
+platforms that maintain a transfer vector indexed by position rather than
+by name. They also help keep information on certain symbols that are
+aliases for others for certain platforms, or that have different forms
+on different platforms.
+
+=head2 Main methods
+
+=over 4
+
+=cut
+
+=item B<new> I<%options>
+
+Creates a new instance of the C<OpenSSL::Ordinals> class. It takes options
+in keyed pair form, i.e. a series of C<< key => value >> pairs. Available
+options are:
+
+=over 4
+
+=item B<< from => FILENAME >>
+
+Not only create a new instance, but immediately load it with data from the
+ordinals file FILENAME.
+
+=back
+
+=cut
+
+sub new {
+ my $class = shift;
+ my %opts = @_;
+
+ my $instance = {
+ filename => undef, # File name registered when loading
+ loaded_maxnum => 0, # Highest allocated item number when loading
+ loaded_contents => [], # Loaded items, if loading there was
+ maxassigned => 0, # Current highest assigned item number
+ maxnum => 0, # Current highest allocated item number
+ contents => [], # Items, indexed by number
+ name2num => {}, # Name to number dictionary
+ aliases => {}, # Aliases cache.
+ stats => {}, # Statistics, see 'sub validate'
+ debug => $opts{debug},
+ };
+ bless $instance, $class;
+
+ $instance->set_version($opts{version});
+ $instance->load($opts{from}) if defined($opts{from});
+
+ return $instance;
+}
+
+=item B<< $ordinals->load FILENAME >>
+
+Loads the data from FILENAME into the instance. Any previously loaded data
+is dropped.
+
+Two internal databases are created. One database is simply a copy of the file
+contents and is treated as read-only. The other database is an exact copy of
+the first, but is treated as a work database, i.e. it can be modified and added
+to.
+
+=cut
+
+sub load {
+ my $self = shift;
+ my $filename = shift;
+
+ croak "Undefined filename" unless defined($filename);
+
+ my @tmp_contents = ();
+ my %tmp_name2num = ();
+ my $max_assigned = 0;
+ my $max_num = 0;
+ open F, '<', $filename or croak "Unable to open $filename";
+ while (<F>) {
+ s|\R$||; # Better chomp
+ s|#.*||;
+ next if /^\s*$/;
+
+ my $item = OpenSSL::Ordinals::Item->new(source => $filename, from => $_);
+
+ my $num = $item->number();
+ if ($num eq '?') {
+ $num = ++$max_num;
+ } elsif ($num eq '?+') {
+ $num = $max_num;
+ } else {
+ croak "Disordered ordinals, number sequence restarted"
+ if $max_num > $max_assigned && $num < $max_num;
+ croak "Disordered ordinals, $num < $max_num"
+ if $num < $max_num;
+ $max_assigned = $max_num = $num;
+ }
+
+ $item->intnum($num);
+ push @{$tmp_contents[$num]}, $item;
+ $tmp_name2num{$item->name()} = $num;
+ }
+ close F;
+
+ $self->{contents} = [ @tmp_contents ];
+ $self->{name2num} = { %tmp_name2num };
+ $self->{maxassigned} = $max_assigned;
+ $self->{maxnum} = $max_num;
+ $self->{filename} = $filename;
+
+ # Make a deep copy, allowing {contents} to be an independent work array
+ foreach my $i (1..$max_num) {
+ if ($tmp_contents[$i]) {
+ $self->{loaded_contents}->[$i] =
+ [ map { OpenSSL::Ordinals::Item->new($_) }
+ @{$tmp_contents[$i]} ];
+ }
+ }
+ $self->{loaded_maxnum} = $max_num;
+ return 1;
+}
+
+=item B<< $ordinals->renumber >>
+
+Renumber any item that doesn't have an assigned number yet.
+
+=cut
+
+sub renumber {
+ my $self = shift;
+
+ my $max_assigned = 0;
+ foreach ($self->items(sort => by_number())) {
+ $_->number($_->intnum()) if $_->number() =~ m|^\?|;
+ if ($max_assigned < $_->number()) {
+ $max_assigned = $_->number();
+ }
+ }
+ $self->{maxassigned} = $max_assigned;
+}
+
+=item B<< $ordinals->rewrite >>
+
+=item B<< $ordinals->rewrite >>, I<%options>
+
+If an ordinals file has been loaded, it gets rewritten with the data from
+the current work database.
+
+If there are more arguments, they are used as I<%options> with the
+same semantics as for B<< $ordinals->items >> described below, apart
+from B<sort>, which is forbidden here.
+
+=cut
+
+sub rewrite {
+ my $self = shift;
+ my %opts = @_;
+
+ $self->write($self->{filename}, %opts);
+}
+
+=item B<< $ordinals->write FILENAME >>
+
+=item B<< $ordinals->write FILENAME >>, I<%options>
+
+Writes the current work database data to the ordinals file FILENAME.
+This also validates the data, see B<< $ordinals->validate >> below.
+
+If there are more arguments, they are used as I<%options> with the
+same semantics as for B<< $ordinals->items >> described next, apart
+from B<sort>, which is forbidden here.
+
+=cut
+
+sub write {
+ my $self = shift;
+ my $filename = shift;
+ my %opts = @_;
+
+ croak "Undefined filename" unless defined($filename);
+ croak "The 'sort' option is not allowed" if $opts{sort};
+
+ $self->validate();
+
+ open F, '>', $filename or croak "Unable to open $filename";
+ foreach ($self->items(%opts, sort => by_number())) {
+ print F $_->to_string(),"\n";
+ }
+ close F;
+ $self->{filename} = $filename;
+ $self->{loaded_maxnum} = $self->{maxnum};
+ return 1;
+}
+
+=item B<< $ordinals->items >> I<%options>
+
+Returns a list of items according to a set of criteria. The criteria is
+given in form keyed pair form, i.e. a series of C<< key => value >> pairs.
+Available options are:
+
+=over 4
+
+=item B<< sort => SORTFUNCTION >>
+
+SORTFUNCTION is a reference to a function that takes two arguments, which
+correspond to the classic C<$a> and C<$b> that are available in a C<sort>
+block.
+
+=item B<< filter => FILTERFUNCTION >>
+
+FILTERFUNCTION is a reference to a function that takes one argument, which
+is every OpenSSL::Ordinals::Item element available.
+
+=back
+
+=cut
+
+sub items {
+ my $self = shift;
+ my %opts = @_;
+
+ my $comparator = $opts{sort};
+ my $filter = $opts{filter} // sub { 1; };
+
+ my @l = undef;
+ if (ref($filter) eq 'ARRAY') {
+ # run a "magic" filter
+ if ($filter->[0] == F_NUMBER) {
+ my $index = $filter->[1];
+ @l = $index ? @{$self->{contents}->[$index] // []} : ();
+ } elsif ($filter->[0] == F_NAME) {
+ my $index = $self->{name2num}->{$filter->[1]};
+ @l = $index ? @{$self->{contents}->[$index] // []} : ();
+ } else {
+ croak __PACKAGE__."->items called with invalid filter";
+ }
+ } elsif (ref($filter) eq 'CODE') {
+ @l = grep { $filter->($_) }
+ map { @{$_ // []} }
+ @{$self->{contents}};
+ } else {
+ croak __PACKAGE__."->items called with invalid filter";
+ }
+
+ return sort { $comparator->($a, $b); } @l
+ if (defined $comparator);
+ return @l;
+}
+
+# Put an array of items back into the object after having checked consistency
+# If there are exactly two items:
+# - They MUST have the same number
+# - They MUST have the same version
+# - For platforms, both MUST hold the same ones, but with opposite values
+# - For features, both MUST hold the same ones.
+# - They MUST NOT have identical name, type, numeral, version, platforms, and features
+# If there's just one item, just put it in the slot of its number
+# In all other cases, something is wrong
+sub _putback {
+ my $self = shift;
+ my @items = @_;
+
+ if (scalar @items < 1 || scalar @items > 2) {
+ croak "Wrong number of items: ", scalar @items, "\n ",
+ join("\n ", map { $_->{source}.": ".$_->name() } @items), "\n";
+ }
+ if (scalar @items == 2) {
+ # Collect some data
+ my %numbers = ();
+ my %versions = ();
+ my %features = ();
+ foreach (@items) {
+ $numbers{$_->intnum()} = 1;
+ $versions{$_->version()} = 1;
+ foreach ($_->features()) {
+ $features{$_}++;
+ }
+ }
+
+ # Check that all items we're trying to put back have the same number
+ croak "Items don't have the same numeral: ",
+ join(", ", map { $_->name()." => ".$_->intnum() } @items), "\n"
+ if (scalar keys %numbers > 1);
+ croak "Items don't have the same version: ",
+ join(", ", map { $_->name()." => ".$_->version() } @items), "\n"
+ if (scalar keys %versions > 1);
+
+ # Check that both items run with the same features
+ foreach (@items) {
+ }
+ foreach (keys %features) {
+ delete $features{$_} if $features{$_} == 2;
+ }
+ croak "Features not in common between ",
+ $items[0]->name(), " and ", $items[1]->name(), ":",
+ join(", ", sort keys %features), "\n"
+ if %features;
+
+ # Check for in addition identical name, type, and platforms
+ croak "Duplicate entries for ".$items[0]->name()." from ".
+ $items[0]->source()." and ".$items[1]->source()."\n"
+ if $items[0]->name() eq $items[1]->name()
+ && $items[0]->type() eq $items[1]->type()
+ && $items[0]->platforms() eq $items[1]->platforms();
+
+ # Check that all platforms exist in both items, and have opposite values
+ my @platforms = ( { $items[0]->platforms() },
+ { $items[1]->platforms() } );
+ foreach my $platform (keys %{$platforms[0]}) {
+ if (exists $platforms[1]->{$platform}) {
+ if ($platforms[0]->{$platform} != !$platforms[1]->{$platform}) {
+ croak "Platforms aren't opposite: ",
+ join(", ",
+ map { my %tmp_h = $_->platforms();
+ $_->name().":".$platform
+ ." => "
+ .$tmp_h{$platform} } @items),
+ "\n";
+ }
+
+ # We're done with these
+ delete $platforms[0]->{$platform};
+ delete $platforms[1]->{$platform};
+ }
+ }
+ # If there are any remaining platforms, something's wrong
+ if (%{$platforms[0]} || %{$platforms[0]}) {
+ croak "There are platforms not in common between ",
+ $items[0]->name(), " and ", $items[1]->name(), "\n";
+ }
+ }
+ $self->{contents}->[$items[0]->intnum()] = [ @items ];
+}
+
+sub _parse_platforms {
+ my $self = shift;
+ my @defs = @_;
+
+ my %platforms = ();
+ foreach (@defs) {
+ m{^(!)?};
+ my $op = !(defined $1 && $1 eq '!');
+ my $def = $';
+
+ if ($def =~ m{^_?WIN32$}) { $platforms{$&} = $op; }
+ if ($def =~ m{^__FreeBSD__$}) { $platforms{$&} = $op; }
+# For future support
+# if ($def =~ m{^__DragonFly__$}) { $platforms{$&} = $op; }
+# if ($def =~ m{^__OpenBSD__$}) { $platforms{$&} = $op; }
+# if ($def =~ m{^__NetBSD__$}) { $platforms{$&} = $op; }
+ if ($def =~ m{^OPENSSL_SYS_}) { $platforms{$'} = $op; }
+ }
+
+ return %platforms;
+}
+
+sub _parse_features {
+ my $self = shift;
+ my @defs = @_;
+
+ my %features = ();
+ foreach (@defs) {
+ m{^(!)?};
+ my $op = !(defined $1 && $1 eq '!');
+ my $def = $';
+
+ if ($def =~ m{^ZLIB$}) { $features{$&} = $op; }
+ if ($def =~ m{^OPENSSL_USE_}) { $features{$'} = $op; }
+ if ($def =~ m{^OPENSSL_NO_}) { $features{$'} = !$op; }
+ }
+
+ return %features;
+}
+
+sub _adjust_version {
+ my $self = shift;
+ my $version = shift;
+ my $baseversion = $self->{baseversion};
+
+ $version = $baseversion
+ if ($baseversion ne '*' && $version ne '*'
+ && cmp_versions($baseversion, $version) > 0);
+
+ return $version;
+}
+
+=item B<< $ordinals->add SOURCE, NAME, TYPE, LIST >>
+
+Adds a new item from file SOURCE named NAME with the type TYPE,
+and a set of C macros in
+LIST that are expected to be defined or undefined to use this symbol, if
+any. For undefined macros, they each must be prefixed with a C<!>.
+
+If this symbol already exists in loaded data, it will be rewritten using
+the new input data, but will keep the same ordinal number and version.
+If it's entirely new, it will get a '?' and the current default version.
+
+=cut
+
+sub add {
+ my $self = shift;
+ my $source = shift; # file where item was defined
+ my $name = shift;
+ my $type = shift; # FUNCTION or VARIABLE
+ my @defs = @_; # Macros from #ifdef and #ifndef
+ # (the latter prefixed with a '!')
+
+ # call signature for debug output
+ my $verbsig = "add('$name' , '$type' , [ " . join(', ', @defs) . " ])";
+
+ croak __PACKAGE__."->add got a bad type '$type'"
+ unless $type eq 'FUNCTION' || $type eq 'VARIABLE';
+
+ my %platforms = _parse_platforms(@defs);
+ my %features = _parse_features(@defs);
+
+ my @items = $self->items(filter => f_name($name));
+ my $version = @items ? $items[0]->version() : $self->{currversion};
+ my $intnum = @items ? $items[0]->intnum() : ++$self->{maxnum};
+ my $number = @items ? $items[0]->number() : '?';
+ print STDERR "DEBUG[",__PACKAGE__,":add] $verbsig\n",
+ @items ? map { "\t".$_->to_string()."\n" } @items : "No previous items\n",
+ if $self->{debug};
+ @items = grep { $_->exists() } @items;
+
+ my $new_item =
+ OpenSSL::Ordinals::Item->new( source => $source,
+ name => $name,
+ type => $type,
+ number => $number,
+ intnum => $intnum,
+ version =>
+ $self->_adjust_version($version),
+ exists => 1,
+ platforms => { %platforms },
+ features => [
+ grep { $features{$_} } keys %features
+ ] );
+
+ push @items, $new_item;
+ print STDERR "DEBUG[",__PACKAGE__,"::add] $verbsig\n", map { "\t".$_->to_string()."\n" } @items
+ if $self->{debug};
+ $self->_putback(@items);
+
+ # If an alias was defined beforehand, add an item for it now
+ my $alias = $self->{aliases}->{$name};
+ delete $self->{aliases}->{$name};
+
+ # For the caller to show
+ my @returns = ( $new_item );
+ push @returns, $self->add_alias($source, $alias->{name}, $name, @{$alias->{defs}})
+ if defined $alias;
+ return @returns;
+}
+
+=item B<< $ordinals->add_alias SOURCE, ALIAS, NAME, LIST >>
+
+Adds an alias ALIAS for the symbol NAME from file SOURCE, and a set of C macros
+in LIST that are expected to be defined or undefined to use this symbol, if any.
+For undefined macros, they each must be prefixed with a C<!>.
+
+If this symbol already exists in loaded data, it will be rewritten using
+the new input data. Otherwise, the data will just be store away, to wait
+that the symbol NAME shows up.
+
+=cut
+
+sub add_alias {
+ my $self = shift;
+ my $source = shift;
+ my $alias = shift; # This is the alias being added
+ my $name = shift; # For this name (assuming it exists)
+ my @defs = @_; # Platform attributes for the alias
+
+ # call signature for debug output
+ my $verbsig =
+ "add_alias('$source' , '$alias' , '$name' , [ " . join(', ', @defs) . " ])";
+
+ croak "You're kidding me... $alias == $name" if $alias eq $name;
+
+ my %platforms = _parse_platforms(@defs);
+ my %features = _parse_features(@defs);
+
+ croak "Alias with associated features is forbidden\n"
+ if %features;
+
+ my $f_byalias = f_name($alias);
+ my $f_byname = f_name($name);
+ my @items = $self->items(filter => $f_byalias);
+ foreach my $item ($self->items(filter => $f_byname)) {
+ push @items, $item unless grep { $_ == $item } @items;
+ }
+ @items = grep { $_->exists() } @items;
+
+ croak "Alias already exists ($alias => $name)"
+ if scalar @items > 1;
+ if (scalar @items == 0) {
+ # The item we want to alias for doesn't exist yet, so we cache the
+ # alias and hope the item we're making an alias of shows up later
+ $self->{aliases}->{$name} = { source => $source,
+ name => $alias, defs => [ @defs ] };
+
+ print STDERR "DEBUG[",__PACKAGE__,":add_alias] $verbsig\n",
+ "\tSet future alias $alias => $name\n"
+ if $self->{debug};
+ return ();
+ } elsif (scalar @items == 1) {
+ # The rule is that an alias is more or less a copy of the original
+ # item, just with another name. Also, the platforms given here are
+ # given to the original item as well, with opposite values.
+ my %alias_platforms = $items[0]->platforms();
+ foreach (keys %platforms) {
+ $alias_platforms{$_} = !$platforms{$_};
+ }
+ # We supposedly do now know how to do this... *ahem*
+ $items[0]->{platforms} = { %alias_platforms };
+
+ my $number =
+ $items[0]->number() =~ m|^\?| ? '?+' : $items[0]->number();
+ my $alias_item = OpenSSL::Ordinals::Item->new(
+ source => $source,
+ name => $alias,
+ type => $items[0]->type(),
+ number => $number,
+ intnum => $items[0]->intnum(),
+ version => $self->_adjust_version($items[0]->version()),
+ exists => $items[0]->exists(),
+ platforms => { %platforms },
+ features => [ $items[0]->features() ]
+ );
+ push @items, $alias_item;
+
+ print STDERR "DEBUG[",__PACKAGE__,":add_alias] $verbsig\n",
+ map { "\t".$_->to_string()."\n" } @items
+ if $self->{debug};
+ $self->_putback(@items);
+
+ # For the caller to show
+ return ( $alias_item->to_string() );
+ }
+ croak "$name has an alias already (trying to add alias $alias)\n",
+ "\t", join(", ", map { $_->name() } @items), "\n";
+}
+
+=item B<< $ordinals->set_version VERSION >>
+
+=item B<< $ordinals->set_version VERSION BASEVERSION >>
+
+Sets the default version for new symbol to VERSION.
+
+If given, BASEVERSION sets the base version, i.e. the minimum version
+for all symbols. If not given, it will be calculated as follows:
+
+=over 4
+
+If the given version is '*', then the base version will also be '*'.
+
+If the given version starts with '0.', the base version will be '0.0.0'.
+
+If the given version starts with '1.0.', the base version will be '1.0.0'.
+
+If the given version starts with '1.1.', the base version will be '1.1.0'.
+
+If the given version has a first number C<N> that's greater than 1, the
+base version will be formed from C<N>: 'N.0.0'.
+
+=back
+
+=cut
+
+sub set_version {
+ my $self = shift;
+ # '*' is for "we don't care"
+ my $version = shift // '*';
+ my $baseversion = shift // '*';
+
+ if ($baseversion eq '*') {
+ $baseversion = $version;
+ if ($baseversion ne '*') {
+ if ($baseversion =~ m|^(\d+)\.|, $1 > 1) {
+ $baseversion = "$1.0.0";
+ } else {
+ $baseversion =~ s|^0\..*$|0.0.0|;
+ $baseversion =~ s|^1\.0\..*$|1.0.0|;
+ $baseversion =~ s|^1\.1\..*$|1.1.0|;
+
+ die 'Invalid version'
+ if ($baseversion ne '0.0.0'
+ && $baseversion !~ m|^1\.[01]\.0$|);
+ }
+ }
+ }
+
+ die 'Invalid base version'
+ if ($baseversion ne '*' && $version ne '*'
+ && cmp_versions($baseversion, $version) > 0);
+
+ $self->{currversion} = $version;
+ $self->{baseversion} = $baseversion;
+ foreach ($self->items(filter => sub { $_[0] eq '*' })) {
+ $_->{version} = $self->{currversion};
+ }
+ return 1;
+}
+
+=item B<< $ordinals->invalidate >>
+
+Invalidates the whole working database. The practical effect is that all
+symbols are set to not exist, but are kept around in the database to retain
+ordinal numbers and versions.
+
+=cut
+
+sub invalidate {
+ my $self = shift;
+
+ foreach (@{$self->{contents}}) {
+ foreach (@{$_ // []}) {
+ $_->{exists} = 0;
+ }
+ }
+ $self->{stats} = {};
+}
+
+=item B<< $ordinals->validate >>
+
+Validates the current working database by collection statistics on how many
+symbols were added and how many were changed. These numbers can be retrieved
+with B<< $ordinals->stats >>.
+
+=cut
+
+sub validate {
+ my $self = shift;
+
+ $self->{stats} = {};
+ for my $i (1..$self->{maxnum}) {
+ if ($i > $self->{loaded_maxnum}
+ || (!@{$self->{loaded_contents}->[$i] // []}
+ && @{$self->{contents}->[$i] // []})) {
+ $self->{stats}->{new}++;
+ }
+ if ($i <= $self->{maxassigned}) {
+ $self->{stats}->{assigned}++;
+ } else {
+ $self->{stats}->{unassigned}++;
+ }
+ next if ($i > $self->{loaded_maxnum});
+
+ my @loaded_strings =
+ map { $_->to_string() } @{$self->{loaded_contents}->[$i] // []};
+ my @current_strings =
+ map { $_->to_string() } @{$self->{contents}->[$i] // []};
+
+ foreach my $str (@current_strings) {
+ @loaded_strings = grep { $str ne $_ } @loaded_strings;
+ }
+ if (@loaded_strings) {
+ $self->{stats}->{modified}++;
+ }
+ }
+}
+
+=item B<< $ordinals->stats >>
+
+Returns the statistics that B<validate> calculate.
+
+=cut
+
+sub stats {
+ my $self = shift;
+
+ return %{$self->{stats}};
+}
+
+=back
+
+=head2 Data elements
+
+Data elements, which is each line in an ordinals file, are instances
+of a separate class, OpenSSL::Ordinals::Item, with its own methods:
+
+=over 4
+
+=cut
+
+package OpenSSL::Ordinals::Item;
+
+use strict;
+use warnings;
+use Carp;
+
+=item B<new> I<%options>
+
+Creates a new instance of the C<OpenSSL::Ordinals::Item> class. It takes
+options in keyed pair form, i.e. a series of C<< key => value >> pairs.
+Available options are:
+
+=over 4
+
+=item B<< source => FILENAME >>, B<< from => STRING >>
+
+This will create a new item from FILENAME, filled with data coming from STRING.
+
+STRING must conform to the following EBNF description:
+
+ ordinal string = symbol, spaces, ordinal, spaces, version, spaces,
+ exist, ":", platforms, ":", type, ":", features;
+ spaces = space, { space };
+ space = " " | "\t";
+ symbol = ( letter | "_" ), { letter | digit | "_" };
+ ordinal = number | "?" | "?+";
+ version = number, "_", number, "_", number, [ letter, [ letter ] ];
+ exist = "EXIST" | "NOEXIST";
+ platforms = platform, { ",", platform };
+ platform = ( letter | "_" ) { letter | digit | "_" };
+ type = "FUNCTION" | "VARIABLE";
+ features = feature, { ",", feature };
+ feature = ( letter | "_" ) { letter | digit | "_" };
+ number = digit, { digit };
+
+(C<letter> and C<digit> are assumed self evident)
+
+=item B<< source => FILENAME >>, B<< name => STRING >>, B<< number => NUMBER >>,
+ B<< version => STRING >>, B<< exists => BOOLEAN >>, B<< type => STRING >>,
+ B<< platforms => HASHref >>, B<< features => LISTref >>
+
+This will create a new item with data coming from the arguments.
+
+=back
+
+=cut
+
+sub new {
+ my $class = shift;
+
+ if (ref($_[0]) eq $class) {
+ return $class->new( map { $_ => $_[0]->{$_} } keys %{$_[0]} );
+ }
+
+ my %opts = @_;
+
+ croak "No argument given" unless %opts;
+
+ my $instance = undef;
+ if ($opts{from}) {
+ my @a = split /\s+/, $opts{from};
+
+ croak "Badly formatted ordinals string: $opts{from}"
+ unless ( scalar @a == 4
+ && $a[0] =~ /^[A-Za-z_][A-Za-z_0-9]*$/
+ && $a[1] =~ /^\d+|\?\+?$/
+ && $a[2] =~ /^(?:\*|\d+_\d+_\d+[a-z]{0,2})$/
+ && $a[3] =~ /^
+ (?:NO)?EXIST:
+ [^:]*:
+ (?:FUNCTION|VARIABLE):
+ [^:]*
+ $
+ /x );
+
+ my @b = split /:/, $a[3];
+ %opts = ( source => $opts{source},
+ name => $a[0],
+ number => $a[1],
+ version => $a[2],
+ exists => $b[0] eq 'EXIST',
+ platforms => { map { m|^(!)?|; $' => !$1 }
+ split /,/,$b[1] },
+ type => $b[2],
+ features => [ split /,/,$b[3] // '' ] );
+ }
+
+ if ($opts{name} && $opts{version} && defined $opts{exists} && $opts{type}
+ && ref($opts{platforms} // {}) eq 'HASH'
+ && ref($opts{features} // []) eq 'ARRAY') {
+ my $version = $opts{version};
+ $version =~ s|_|.|g;
+
+ $instance = { source => $opts{source},
+ name => $opts{name},
+ type => $opts{type},
+ number => $opts{number},
+ intnum => $opts{intnum},
+ version => $version,
+ exists => !!$opts{exists},
+ platforms => { %{$opts{platforms} // {}} },
+ features => [ sort @{$opts{features} // []} ] };
+ } else {
+ croak __PACKAGE__."->new() called with bad arguments\n".
+ join("", map { " $_\t=> ".$opts{$_}."\n" } sort keys %opts);
+ }
+
+ return bless $instance, $class;
+}
+
+sub DESTROY {
+}
+
+=item B<< $item->name >>
+
+The symbol name for this item.
+
+=item B<< $item->number >> (read-write)
+
+The positional number for this item.
+
+This may be '?' for an unassigned symbol, or '?+' for an unassigned symbol
+that's an alias for the previous symbol. '?' and '?+' must be properly
+handled by the caller. The caller may change this to an actual number.
+
+=item B<< $item->version >> (read-only)
+
+The version number for this item. Please note that these version numbers
+have underscore (C<_>) as a separator for the version parts.
+
+=item B<< $item->exists >> (read-only)
+
+A boolean that tells if this symbol exists in code or not.
+
+=item B<< $item->platforms >> (read-only)
+
+A hash table reference. The keys of the hash table are the names of
+the specified platforms, with a value of 0 to indicate that this symbol
+isn't available on that platform, and 1 to indicate that it is. Platforms
+that aren't mentioned default to 1.
+
+=item B<< $item->type >> (read-only)
+
+C<FUNCTION> or C<VARIABLE>, depending on what the symbol represents.
+Some platforms do not care about this, others do.
+
+=item B<< $item->features >> (read-only)
+
+An array reference, where every item indicates a feature where this symbol
+is available. If no features are mentioned, the symbol is always available.
+If any feature is mentioned, this symbol is I<only> available when those
+features are enabled.
+
+=cut
+
+our $AUTOLOAD;
+
+# Generic getter
+sub AUTOLOAD {
+ my $self = shift;
+ my $funcname = $AUTOLOAD;
+ (my $item = $funcname) =~ s|.*::||g;
+
+ croak "$funcname called as setter" if @_;
+ croak "$funcname invalid" unless exists $self->{$item};
+ return $self->{$item} if ref($self->{$item}) eq '';
+ return @{$self->{$item}} if ref($self->{$item}) eq 'ARRAY';
+ return %{$self->{$item}} if ref($self->{$item}) eq 'HASH';
+}
+
+=item B<< $item->intnum >> (read-write)
+
+Internal positional number. If I<< $item->number >> is '?' or '?+', the
+caller can use this to set a number for its purposes.
+If I<< $item->number >> is a number, I<< $item->intnum >> should be the
+same
+
+=cut
+
+# Getter/setters
+sub intnum {
+ my $self = shift;
+ my $value = shift;
+ my $item = 'intnum';
+
+ croak "$item called with extra arguments" if @_;
+ $self->{$item} = "$value" if defined $value;
+ return $self->{$item};
+}
+
+sub number {
+ my $self = shift;
+ my $value = shift;
+ my $item = 'number';
+
+ croak "$item called with extra arguments" if @_;
+ $self->{$item} = "$value" if defined $value;
+ return $self->{$item};
+}
+
+=item B<< $item->to_string >>
+
+Converts the item to a string that can be saved in an ordinals file.
+
+=cut
+
+sub to_string {
+ my $self = shift;
+
+ croak "Too many arguments" if @_;
+ my %platforms = $self->platforms();
+ my @features = $self->features();
+ my $version = $self->version();
+ $version =~ s|\.|_|g;
+ return sprintf "%-39s %s\t%s\t%s:%s:%s:%s",
+ $self->name(),
+ $self->number(),
+ $version,
+ $self->exists() ? 'EXIST' : 'NOEXIST',
+ join(',', (map { ($platforms{$_} ? '' : '!') . $_ }
+ sort keys %platforms)),
+ $self->type(),
+ join(',', @features);
+}
+
+=back
+
+=head2 Comparators and filters
+
+For the B<< $ordinals->items >> method, there are a few functions to create
+comparators based on specific data:
+
+=over 4
+
+=cut
+
+# Go back to the main package to create comparators and filters
+package OpenSSL::Ordinals;
+
+# Comparators...
+
+=item B<by_name>
+
+Returns a comparator that will compare the names of two OpenSSL::Ordinals::Item
+objects.
+
+=cut
+
+sub by_name {
+ return sub { $_[0]->name() cmp $_[1]->name() };
+}
+
+=item B<by_number>
+
+Returns a comparator that will compare the ordinal numbers of two
+OpenSSL::Ordinals::Item objects.
+
+=cut
+
+sub by_number {
+ return sub { $_[0]->intnum() <=> $_[1]->intnum() };
+}
+
+=item B<by_version>
+
+Returns a comparator that will compare the version of two
+OpenSSL::Ordinals::Item objects.
+
+=cut
+
+sub by_version {
+ return sub {
+ # cmp_versions comes from OpenSSL::Util
+ return cmp_versions($_[0]->version(), $_[1]->version());
+ }
+}
+
+=back
+
+There are also the following filters:
+
+=over 4
+
+=cut
+
+# Filters... these are called by grep, the return sub must use $_ for
+# the item to check
+
+=item B<f_version VERSION>
+
+Returns a filter that only lets through symbols with a version number
+matching B<VERSION>.
+
+=cut
+
+sub f_version {
+ my $version = shift;
+
+ croak "No version specified"
+ unless $version && $version =~ /^\d+\.\d+\.\d+[a-z]{0,2}$/;
+
+ return sub { $_[0]->version() eq $version };
+}
+
+=item B<f_number NUMBER>
+
+Returns a filter that only lets through symbols with the ordinal number
+matching B<NUMBER>.
+
+NOTE that this returns a "magic" value that can not be used as a function.
+It's only useful when passed directly as a filter to B<items>.
+
+=cut
+
+sub f_number {
+ my $number = shift;
+
+ croak "No number specified"
+ unless $number && $number =~ /^\d+$/;
+
+ return [ F_NUMBER, $number ];
+}
+
+
+=item B<f_name NAME>
+
+Returns a filter that only lets through symbols with the symbol name
+matching B<NAME>.
+
+NOTE that this returns a "magic" value that can not be used as a function.
+It's only useful when passed directly as a filter to B<items>.
+
+=cut
+
+sub f_name {
+ my $name = shift;
+
+ croak "No name specified"
+ unless $name;
+
+ return [ F_NAME, $name ];
+}
+
+=back
+
+=head1 AUTHORS
+
+Richard Levitte E<lt>levitte@openssl.orgE<gt>.
+
+=cut
+
+1;
diff --git a/util/perl/OpenSSL/ParseC.pm b/util/perl/OpenSSL/ParseC.pm
new file mode 100644
index 000000000000..f98dd0e25e3b
--- /dev/null
+++ b/util/perl/OpenSSL/ParseC.pm
@@ -0,0 +1,1209 @@
+#! /usr/bin/env perl
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+package OpenSSL::ParseC;
+
+use strict;
+use warnings;
+
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+$VERSION = "0.9";
+@ISA = qw(Exporter);
+@EXPORT = qw(parse);
+
+# Global handler data
+my @preprocessor_conds; # A list of simple preprocessor conditions,
+ # each item being a list of macros defined
+ # or not defined.
+
+# Handler helpers
+sub all_conds {
+ return map { ( @$_ ) } @preprocessor_conds;
+}
+
+# A list of handlers that will look at a "complete" string and try to
+# figure out what to make of it.
+# Each handler is a hash with the following keys:
+#
+# regexp a regexp to compare the "complete" string with.
+# checker a function that does a more complex comparison.
+# Use this instead of regexp if that isn't enough.
+# massager massages the "complete" string into an array with
+# the following elements:
+#
+# [0] String that needs further processing (this
+# applies to typedefs of structs), or empty.
+# [1] The name of what was found.
+# [2] A character that denotes what type of thing
+# this is: 'F' for function, 'S' for struct,
+# 'T' for typedef, 'M' for macro, 'V' for
+# variable.
+# [3] Return type (only for type 'F' and 'V')
+# [4] Value (for type 'M') or signature (for type 'F',
+# 'V', 'T' or 'S')
+# [5...] The list of preprocessor conditions this is
+# found in, as in checks for macro definitions
+# (stored as the macro's name) or the absence
+# of definition (stored as the macro's name
+# prefixed with a '!'
+#
+# If the massager returns an empty list, it means the
+# "complete" string has side effects but should otherwise
+# be ignored.
+# If the massager is undefined, the "complete" string
+# should be ignored.
+my @opensslcpphandlers = (
+ ##################################################################
+ # OpenSSL CPP specials
+ #
+ # These are used to convert certain pre-precessor expressions into
+ # others that @cpphandlers have a better chance to understand.
+
+ # This changes any OPENSSL_NO_DEPRECATED_x_y[_z] check to a check of
+ # OPENSSL_NO_DEPRECATEDIN_x_y[_z]. That's due to <openssl/macros.h>
+ # creating OPENSSL_NO_DEPRECATED_x_y[_z], but the ordinals files using
+ # DEPRECATEDIN_x_y[_z].
+ { regexp => qr/#if(def|ndef) OPENSSL_NO_DEPRECATED_(\d+_\d+(?:_\d+)?)$/,
+ massager => sub {
+ return (<<"EOF");
+#if$1 OPENSSL_NO_DEPRECATEDIN_$2
+EOF
+ }
+ }
+);
+my @cpphandlers = (
+ ##################################################################
+ # CPP stuff
+
+ { regexp => qr/#ifdef ?(.*)/,
+ massager => sub {
+ my %opts;
+ if (ref($_[$#_]) eq "HASH") {
+ %opts = %{$_[$#_]};
+ pop @_;
+ }
+ push @preprocessor_conds, [ $1 ];
+ print STDERR "DEBUG[",$opts{debug_type},"]: preprocessor level: ", scalar(@preprocessor_conds), "\n"
+ if $opts{debug};
+ return ();
+ },
+ },
+ { regexp => qr/#ifndef ?(.*)/,
+ massager => sub {
+ my %opts;
+ if (ref($_[$#_]) eq "HASH") {
+ %opts = %{$_[$#_]};
+ pop @_;
+ }
+ push @preprocessor_conds, [ '!'.$1 ];
+ print STDERR "DEBUG[",$opts{debug_type},"]: preprocessor level: ", scalar(@preprocessor_conds), "\n"
+ if $opts{debug};
+ return ();
+ },
+ },
+ { regexp => qr/#if (0|1)/,
+ massager => sub {
+ my %opts;
+ if (ref($_[$#_]) eq "HASH") {
+ %opts = %{$_[$#_]};
+ pop @_;
+ }
+ if ($1 eq "1") {
+ push @preprocessor_conds, [ "TRUE" ];
+ } else {
+ push @preprocessor_conds, [ "!TRUE" ];
+ }
+ print STDERR "DEBUG[",$opts{debug_type},"]: preprocessor level: ", scalar(@preprocessor_conds), "\n"
+ if $opts{debug};
+ return ();
+ },
+ },
+ { regexp => qr/#if ?(.*)/,
+ massager => sub {
+ my %opts;
+ if (ref($_[$#_]) eq "HASH") {
+ %opts = %{$_[$#_]};
+ pop @_;
+ }
+ my @results = ();
+ my $conds = $1;
+ if ($conds =~ m|^defined<<<\(([^\)]*)\)>>>(.*)$|) {
+ push @results, $1; # Handle the simple case
+ my $rest = $2;
+ my $re = qr/^(?:\|\|defined<<<\([^\)]*\)>>>)*$/;
+ print STDERR "DEBUG[",$opts{debug_type},"]: Matching '$rest' with '$re'\n"
+ if $opts{debug};
+ if ($rest =~ m/$re/) {
+ my @rest = split /\|\|/, $rest;
+ shift @rest;
+ foreach (@rest) {
+ m|^defined<<<\(([^\)]*)\)>>>$|;
+ die "Something wrong...$opts{PLACE}" if $1 eq "";
+ push @results, $1;
+ }
+ } else {
+ $conds =~ s/<<<|>>>//g;
+ warn "Warning: complicated #if expression(1): $conds$opts{PLACE}"
+ if $opts{warnings};
+ }
+ } elsif ($conds =~ m|^!defined<<<\(([^\)]*)\)>>>(.*)$|) {
+ push @results, '!'.$1; # Handle the simple case
+ my $rest = $2;
+ my $re = qr/^(?:\&\&!defined<<<\([^\)]*\)>>>)*$/;
+ print STDERR "DEBUG[",$opts{debug_type},"]: Matching '$rest' with '$re'\n"
+ if $opts{debug};
+ if ($rest =~ m/$re/) {
+ my @rest = split /\&\&/, $rest;
+ shift @rest;
+ foreach (@rest) {
+ m|^!defined<<<\(([^\)]*)\)>>>$|;
+ die "Something wrong...$opts{PLACE}" if $1 eq "";
+ push @results, '!'.$1;
+ }
+ } else {
+ $conds =~ s/<<<|>>>//g;
+ warn "Warning: complicated #if expression(2): $conds$opts{PLACE}"
+ if $opts{warnings};
+ }
+ } else {
+ $conds =~ s/<<<|>>>//g;
+ warn "Warning: complicated #if expression(3): $conds$opts{PLACE}"
+ if $opts{warnings};
+ }
+ print STDERR "DEBUG[",$opts{debug_type},"]: Added preprocessor conds: '", join("', '", @results), "'\n"
+ if $opts{debug};
+ push @preprocessor_conds, [ @results ];
+ print STDERR "DEBUG[",$opts{debug_type},"]: preprocessor level: ", scalar(@preprocessor_conds), "\n"
+ if $opts{debug};
+ return ();
+ },
+ },
+ { regexp => qr/#elif (.*)/,
+ massager => sub {
+ my %opts;
+ if (ref($_[$#_]) eq "HASH") {
+ %opts = %{$_[$#_]};
+ pop @_;
+ }
+ die "An #elif without corresponding condition$opts{PLACE}"
+ if !@preprocessor_conds;
+ pop @preprocessor_conds;
+ print STDERR "DEBUG[",$opts{debug_type},"]: preprocessor level: ", scalar(@preprocessor_conds), "\n"
+ if $opts{debug};
+ return (<<"EOF");
+#if $1
+EOF
+ },
+ },
+ { regexp => qr/#else/,
+ massager => sub {
+ my %opts;
+ if (ref($_[$#_]) eq "HASH") {
+ %opts = %{$_[$#_]};
+ pop @_;
+ }
+ die "An #else without corresponding condition$opts{PLACE}"
+ if !@preprocessor_conds;
+ # Invert all conditions on the last level
+ my $stuff = pop @preprocessor_conds;
+ push @preprocessor_conds, [
+ map { m|^!(.*)$| ? $1 : '!'.$_ } @$stuff
+ ];
+ print STDERR "DEBUG[",$opts{debug_type},"]: preprocessor level: ", scalar(@preprocessor_conds), "\n"
+ if $opts{debug};
+ return ();
+ },
+ },
+ { regexp => qr/#endif ?/,
+ massager => sub {
+ my %opts;
+ if (ref($_[$#_]) eq "HASH") {
+ %opts = %{$_[$#_]};
+ pop @_;
+ }
+ die "An #endif without corresponding condition$opts{PLACE}"
+ if !@preprocessor_conds;
+ pop @preprocessor_conds;
+ print STDERR "DEBUG[",$opts{debug_type},"]: preprocessor level: ", scalar(@preprocessor_conds), "\n"
+ if $opts{debug};
+ return ();
+ },
+ },
+ { regexp => qr/#define ([[:alpha:]_]\w*)(<<<\(.*?\)>>>)?( (.*))?/,
+ massager => sub {
+ my $name = $1;
+ my $params = $2;
+ my $spaceval = $3||"";
+ my $val = $4||"";
+ return ("",
+ $1, 'M', "", $params ? "$name$params$spaceval" : $val,
+ all_conds()); }
+ },
+ { regexp => qr/#.*/,
+ massager => sub { return (); }
+ },
+ );
+
+my @opensslchandlers = (
+ ##################################################################
+ # OpenSSL C specials
+ #
+ # They are really preprocessor stuff, but they look like C stuff
+ # to this parser. All of these do replacements, anything else is
+ # an error.
+
+ #####
+ # Deprecated stuff, by OpenSSL release.
+
+ # OSSL_DEPRECATEDIN_x_y[_z] is simply ignored. Such declarations are
+ # supposed to be guarded with an '#ifdef OPENSSL_NO_DEPRECATED_x_y[_z]'
+ { regexp => qr/OSSL_DEPRECATEDIN_\d+_\d+(?:_\d+)?\s+(.*)/,
+ massager => sub { return $1; },
+ },
+ { regexp => qr/(.*?)\s+OSSL_DEPRECATEDIN_\d+_\d+(?:_\d+)?\s+(.*)/,
+ massager => sub { return "$1 $2"; },
+ },
+
+ #####
+ # Core stuff
+
+ # OSSL_CORE_MAKE_FUNC is a macro to create the necessary data and inline
+ # function the libcrypto<->provider interface
+ { regexp => qr/OSSL_CORE_MAKE_FUNC<<<\((.*?),(.*?),(.*?)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+typedef $1 OSSL_FUNC_$2_fn$3;
+static ossl_inline OSSL_FUNC_$2_fn *OSSL_FUNC_$2(const OSSL_DISPATCH *opf);
+EOF
+ },
+ },
+
+ #####
+ # LHASH stuff
+
+ # LHASH_OF(foo) is used as a type, but the chandlers won't take it
+ # gracefully, so we expand it here.
+ { regexp => qr/(.*)\bLHASH_OF<<<\((.*?)\)>>>(.*)/,
+ massager => sub { return ("$1struct lhash_st_$2$3"); }
+ },
+ { regexp => qr/DEFINE_LHASH_OF(?:_INTERNAL)?<<<\((.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+static ossl_inline LHASH_OF($1) * lh_$1_new(unsigned long (*hfn)(const $1 *),
+ int (*cfn)(const $1 *, const $1 *));
+static ossl_inline void lh_$1_free(LHASH_OF($1) *lh);
+static ossl_inline $1 *lh_$1_insert(LHASH_OF($1) *lh, $1 *d);
+static ossl_inline $1 *lh_$1_delete(LHASH_OF($1) *lh, const $1 *d);
+static ossl_inline $1 *lh_$1_retrieve(LHASH_OF($1) *lh, const $1 *d);
+static ossl_inline int lh_$1_error(LHASH_OF($1) *lh);
+static ossl_inline unsigned long lh_$1_num_items(LHASH_OF($1) *lh);
+static ossl_inline void lh_$1_node_stats_bio(const LHASH_OF($1) *lh, BIO *out);
+static ossl_inline void lh_$1_node_usage_stats_bio(const LHASH_OF($1) *lh,
+ BIO *out);
+static ossl_inline void lh_$1_stats_bio(const LHASH_OF($1) *lh, BIO *out);
+static ossl_inline unsigned long lh_$1_get_down_load(LHASH_OF($1) *lh);
+static ossl_inline void lh_$1_set_down_load(LHASH_OF($1) *lh, unsigned long dl);
+static ossl_inline void lh_$1_doall(LHASH_OF($1) *lh, void (*doall)($1 *));
+LHASH_OF($1)
+EOF
+ }
+ },
+
+ #####
+ # STACK stuff
+
+ # STACK_OF(foo) is used as a type, but the chandlers won't take it
+ # gracefully, so we expand it here.
+ { regexp => qr/(.*)\bSTACK_OF<<<\((.*?)\)>>>(.*)/,
+ massager => sub { return ("$1struct stack_st_$2$3"); }
+ },
+# { regexp => qr/(.*)\bSTACK_OF\((.*?)\)(.*)/,
+# massager => sub {
+# my $before = $1;
+# my $stack_of = "struct stack_st_$2";
+# my $after = $3;
+# if ($after =~ m|^\w|) { $after = " ".$after; }
+# return ("$before$stack_of$after");
+# }
+# },
+ { regexp => qr/SKM_DEFINE_STACK_OF<<<\((.*),\s*(.*),\s*(.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+STACK_OF($1);
+typedef int (*sk_$1_compfunc)(const $3 * const *a, const $3 *const *b);
+typedef void (*sk_$1_freefunc)($3 *a);
+typedef $3 * (*sk_$1_copyfunc)(const $3 *a);
+static ossl_inline int sk_$1_num(const STACK_OF($1) *sk);
+static ossl_inline $2 *sk_$1_value(const STACK_OF($1) *sk, int idx);
+static ossl_inline STACK_OF($1) *sk_$1_new(sk_$1_compfunc compare);
+static ossl_inline STACK_OF($1) *sk_$1_new_null(void);
+static ossl_inline STACK_OF($1) *sk_$1_new_reserve(sk_$1_compfunc compare,
+ int n);
+static ossl_inline int sk_$1_reserve(STACK_OF($1) *sk, int n);
+static ossl_inline void sk_$1_free(STACK_OF($1) *sk);
+static ossl_inline void sk_$1_zero(STACK_OF($1) *sk);
+static ossl_inline $2 *sk_$1_delete(STACK_OF($1) *sk, int i);
+static ossl_inline $2 *sk_$1_delete_ptr(STACK_OF($1) *sk, $2 *ptr);
+static ossl_inline int sk_$1_push(STACK_OF($1) *sk, $2 *ptr);
+static ossl_inline int sk_$1_unshift(STACK_OF($1) *sk, $2 *ptr);
+static ossl_inline $2 *sk_$1_pop(STACK_OF($1) *sk);
+static ossl_inline $2 *sk_$1_shift(STACK_OF($1) *sk);
+static ossl_inline void sk_$1_pop_free(STACK_OF($1) *sk,
+ sk_$1_freefunc freefunc);
+static ossl_inline int sk_$1_insert(STACK_OF($1) *sk, $2 *ptr, int idx);
+static ossl_inline $2 *sk_$1_set(STACK_OF($1) *sk, int idx, $2 *ptr);
+static ossl_inline int sk_$1_find(STACK_OF($1) *sk, $2 *ptr);
+static ossl_inline int sk_$1_find_ex(STACK_OF($1) *sk, $2 *ptr);
+static ossl_inline void sk_$1_sort(STACK_OF($1) *sk);
+static ossl_inline int sk_$1_is_sorted(const STACK_OF($1) *sk);
+static ossl_inline STACK_OF($1) * sk_$1_dup(const STACK_OF($1) *sk);
+static ossl_inline STACK_OF($1) *sk_$1_deep_copy(const STACK_OF($1) *sk,
+ sk_$1_copyfunc copyfunc,
+ sk_$1_freefunc freefunc);
+static ossl_inline sk_$1_compfunc sk_$1_set_cmp_func(STACK_OF($1) *sk,
+ sk_$1_compfunc compare);
+EOF
+ }
+ },
+ { regexp => qr/SKM_DEFINE_STACK_OF_INTERNAL<<<\((.*),\s*(.*),\s*(.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+STACK_OF($1);
+typedef int (*sk_$1_compfunc)(const $3 * const *a, const $3 *const *b);
+typedef void (*sk_$1_freefunc)($3 *a);
+typedef $3 * (*sk_$1_copyfunc)(const $3 *a);
+static ossl_unused ossl_inline $2 *ossl_check_$1_type($2 *ptr);
+static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_$1_sk_type(const STACK_OF($1) *sk);
+static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_$1_compfunc_type(sk_$1_compfunc cmp);
+static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_$1_copyfunc_type(sk_$1_copyfunc cpy);
+static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_$1_freefunc_type(sk_$1_freefunc fr);
+EOF
+ }
+ },
+ { regexp => qr/DEFINE_SPECIAL_STACK_OF<<<\((.*),\s*(.*)\)>>>/,
+ massager => sub { return ("SKM_DEFINE_STACK_OF($1,$2,$2)"); },
+ },
+ { regexp => qr/DEFINE_STACK_OF<<<\((.*)\)>>>/,
+ massager => sub { return ("SKM_DEFINE_STACK_OF($1,$1,$1)"); },
+ },
+ { regexp => qr/DEFINE_SPECIAL_STACK_OF_CONST<<<\((.*),\s*(.*)\)>>>/,
+ massager => sub { return ("SKM_DEFINE_STACK_OF($1,const $2,$2)"); },
+ },
+ { regexp => qr/DEFINE_STACK_OF_CONST<<<\((.*)\)>>>/,
+ massager => sub { return ("SKM_DEFINE_STACK_OF($1,const $1,$1)"); },
+ },
+
+ #####
+ # ASN1 stuff
+ { regexp => qr/DECLARE_ASN1_ITEM<<<\((.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+const ASN1_ITEM *$1_it(void);
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_ASN1_ENCODE_FUNCTIONS_only<<<\((.*),\s*(.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int d2i_$2(void);
+int i2d_$2(void);
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_ASN1_ENCODE_FUNCTIONS<<<\((.*),\s*(.*),\s*(.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int d2i_$3(void);
+int i2d_$3(void);
+DECLARE_ASN1_ITEM($2)
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_ASN1_ENCODE_FUNCTIONS_name<<<\((.*),\s*(.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int d2i_$2(void);
+int i2d_$2(void);
+DECLARE_ASN1_ITEM($2)
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_ASN1_ALLOC_FUNCTIONS_name<<<\((.*),\s*(.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int $2_free(void);
+int $2_new(void);
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_ASN1_ALLOC_FUNCTIONS<<<\((.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int $1_free(void);
+int $1_new(void);
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_ASN1_FUNCTIONS_name<<<\((.*),\s*(.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int d2i_$2(void);
+int i2d_$2(void);
+int $2_free(void);
+int $2_new(void);
+DECLARE_ASN1_ITEM($2)
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_ASN1_FUNCTIONS<<<\((.*)\)>>>/,
+ massager => sub { return (<<"EOF");
+int d2i_$1(void);
+int i2d_$1(void);
+int $1_free(void);
+int $1_new(void);
+DECLARE_ASN1_ITEM($1)
+EOF
+ }
+ },
+ { regexp => qr/DECLARE_ASN1_NDEF_FUNCTION<<<\((.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int i2d_$1_NDEF(void);
+EOF
+ }
+ },
+ { regexp => qr/DECLARE_ASN1_PRINT_FUNCTION<<<\((.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int $1_print_ctx(void);
+EOF
+ }
+ },
+ { regexp => qr/DECLARE_ASN1_PRINT_FUNCTION_name<<<\((.*),\s*(.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int $2_print_ctx(void);
+EOF
+ }
+ },
+ { regexp => qr/DECLARE_ASN1_SET_OF<<<\((.*)\)>>>/,
+ massager => sub { return (); }
+ },
+ { regexp => qr/DECLARE_ASN1_DUP_FUNCTION<<<\((.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int $1_dup(void);
+EOF
+ }
+ },
+ { regexp => qr/DECLARE_ASN1_DUP_FUNCTION_name<<<\((.*),\s*(.*)\)>>>/,
+ massager => sub {
+ return (<<"EOF");
+int $2_dup(void);
+EOF
+ }
+ },
+ # Universal translator of attributed PEM declarators
+ { regexp => qr/
+ DECLARE_ASN1
+ (_ENCODE_FUNCTIONS_only|_ENCODE_FUNCTIONS|_ENCODE_FUNCTIONS_name
+ |_ALLOC_FUNCTIONS_name|_ALLOC_FUNCTIONS|_FUNCTIONS_name|_FUNCTIONS
+ |_NDEF_FUNCTION|_PRINT_FUNCTION|_PRINT_FUNCTION_name
+ |_DUP_FUNCTION|_DUP_FUNCTION_name)
+ _attr
+ <<<\(\s*OSSL_DEPRECATEDIN_(.*?)\s*,(.*?)\)>>>
+ /x,
+ massager => sub { return (<<"EOF");
+DECLARE_ASN1$1($3)
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_PKCS12_SET_OF<<<\((.*)\)>>>/,
+ massager => sub { return (); }
+ },
+
+ #####
+ # PEM stuff
+ { regexp => qr/DECLARE_PEM(?|_rw|_rw_cb|_rw_const)<<<\((.*?),.*\)>>>/,
+ massager => sub { return (<<"EOF");
+#ifndef OPENSSL_NO_STDIO
+int PEM_read_$1(void);
+int PEM_write_$1(void);
+#endif
+int PEM_read_bio_$1(void);
+int PEM_write_bio_$1(void);
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_PEM(?|_rw|_rw_cb|_rw_const)_ex<<<\((.*?),.*\)>>>/,
+ massager => sub { return (<<"EOF");
+#ifndef OPENSSL_NO_STDIO
+int PEM_read_$1(void);
+int PEM_write_$1(void);
+int PEM_read_$1_ex(void);
+int PEM_write_$1_ex(void);
+#endif
+int PEM_read_bio_$1(void);
+int PEM_write_bio_$1(void);
+int PEM_read_bio_$1_ex(void);
+int PEM_write_bio_$1_ex(void);
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_PEM(?|_write|_write_cb|_write_const)<<<\((.*?),.*\)>>>/,
+ massager => sub { return (<<"EOF");
+#ifndef OPENSSL_NO_STDIO
+int PEM_write_$1(void);
+#endif
+int PEM_write_bio_$1(void);
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_PEM(?|_write|_write_cb|_write_const)_ex<<<\((.*?),.*\)>>>/,
+ massager => sub { return (<<"EOF");
+#ifndef OPENSSL_NO_STDIO
+int PEM_write_$1(void);
+int PEM_write_$1_ex(void);
+#endif
+int PEM_write_bio_$1(void);
+int PEM_write_bio_$1_ex(void);
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_PEM(?|_read|_read_cb)<<<\((.*?),.*\)>>>/,
+ massager => sub { return (<<"EOF");
+#ifndef OPENSSL_NO_STDIO
+int PEM_read_$1(void);
+#endif
+int PEM_read_bio_$1(void);
+EOF
+ },
+ },
+ { regexp => qr/DECLARE_PEM(?|_read|_read_cb)_ex<<<\((.*?),.*\)>>>/,
+ massager => sub { return (<<"EOF");
+#ifndef OPENSSL_NO_STDIO
+int PEM_read_$1(void);
+int PEM_read_$1_ex(void);
+#endif
+int PEM_read_bio_$1(void);
+int PEM_read_bio_$1_ex(void);
+EOF
+ },
+ },
+ # Universal translator of attributed PEM declarators
+ { regexp => qr/
+ DECLARE_PEM
+ ((?:_rw|_rw_cb|_rw_const|_write|_write_cb|_write_const|_read|_read_cb)
+ (?:_ex)?)
+ _attr
+ <<<\(\s*OSSL_DEPRECATEDIN_(.*?)\s*,(.*?)\)>>>
+ /x,
+ massager => sub { return (<<"EOF");
+DECLARE_PEM$1($3)
+EOF
+ },
+ },
+
+ # OpenSSL's declaration of externs with possible export linkage
+ # (really only relevant on Windows)
+ { regexp => qr/OPENSSL_(?:EXPORT|EXTERN)/,
+ massager => sub { return ("extern"); }
+ },
+
+ # Spurious stuff found in the OpenSSL headers
+ # Usually, these are just macros that expand to, well, something
+ { regexp => qr/__NDK_FPABI__/,
+ massager => sub { return (); }
+ },
+ );
+
+my $anoncnt = 0;
+
+my @chandlers = (
+ ##################################################################
+ # C stuff
+
+ # extern "C" of individual items
+ # Note that the main parse function has a special hack for 'extern "C" {'
+ # which can't be done in handlers
+ # We simply ignore it.
+ { regexp => qr/^extern "C" (.*(?:;|>>>))/,
+ massager => sub { return ($1); },
+ },
+ # any other extern is just ignored
+ { regexp => qr/^\s* # Any spaces before
+ extern # The keyword we look for
+ \b # word to non-word boundary
+ .* # Anything after
+ ;
+ /x,
+ massager => sub { return (); },
+ },
+ # union, struct and enum definitions
+ # Because this one might appear a little everywhere within type
+ # definitions, we take it out and replace it with just
+ # 'union|struct|enum name' while registering it.
+ # This makes use of the parser trick to surround the outer braces
+ # with <<< and >>>
+ { regexp => qr/(.*) # Anything before ($1)
+ \b # word to non-word boundary
+ (union|struct|enum) # The word used ($2)
+ (?:\s([[:alpha:]_]\w*))? # Struct or enum name ($3)
+ <<<(\{.*?\})>>> # Struct or enum definition ($4)
+ (.*) # Anything after ($5)
+ ;
+ /x,
+ massager => sub {
+ my $before = $1;
+ my $word = $2;
+ my $name = $3
+ || sprintf("__anon%03d", ++$anoncnt); # Anonymous struct
+ my $definition = $4;
+ my $after = $5;
+ my $type = $word eq "struct" ? 'S' : 'E';
+ if ($before ne "" || $after ne ";") {
+ if ($after =~ m|^\w|) { $after = " ".$after; }
+ return ("$before$word $name$after;",
+ "$word $name", $type, "", "$word$definition", all_conds());
+ }
+ # If there was no before nor after, make the return much simple
+ return ("", "$word $name", $type, "", "$word$definition", all_conds());
+ }
+ },
+ # Named struct and enum forward declarations
+ # We really just ignore them, but we need to parse them or the variable
+ # declaration handler further down will think it's a variable declaration.
+ { regexp => qr/^(union|struct|enum) ([[:alpha:]_]\w*);/,
+ massager => sub { return (); }
+ },
+ # Function returning function pointer declaration
+ # This sort of declaration may have a body (inline functions, for example)
+ { regexp => qr/(?:(typedef)\s?)? # Possible typedef ($1)
+ ((?:\w|\*|\s)*?) # Return type ($2)
+ \s? # Possible space
+ <<<\(\*
+ ([[:alpha:]_]\w*) # Function name ($3)
+ (\(.*\)) # Parameters ($4)
+ \)>>>
+ <<<(\(.*\))>>> # F.p. parameters ($5)
+ (?:<<<\{.*\}>>>|;) # Body or semicolon
+ /x,
+ massager => sub {
+ return ("", $3, 'T', "", "$2(*$4)$5", all_conds())
+ if defined $1;
+ return ("", $3, 'F', "$2(*)$5", "$2(*$4)$5", all_conds()); }
+ },
+ # Function pointer declaration, or typedef thereof
+ # This sort of declaration never has a function body
+ { regexp => qr/(?:(typedef)\s?)? # Possible typedef ($1)
+ ((?:\w|\*|\s)*?) # Return type ($2)
+ <<<\(\*([[:alpha:]_]\w*)\)>>> # T.d. or var name ($3)
+ <<<(\(.*\))>>> # F.p. parameters ($4)
+ ;
+ /x,
+ massager => sub {
+ return ("", $3, 'T', "", "$2(*)$4", all_conds())
+ if defined $1;
+ return ("", $3, 'V', "$2(*)$4", "$2(*)$4", all_conds());
+ },
+ },
+ # Function declaration, or typedef thereof
+ # This sort of declaration may have a body (inline functions, for example)
+ { regexp => qr/(?:(typedef)\s?)? # Possible typedef ($1)
+ ((?:\w|\*|\s)*?) # Return type ($2)
+ \s? # Possible space
+ ([[:alpha:]_]\w*) # Function name ($3)
+ <<<(\(.*\))>>> # Parameters ($4)
+ (?:<<<\{.*\}>>>|;) # Body or semicolon
+ /x,
+ massager => sub {
+ return ("", $3, 'T', "", "$2$4", all_conds())
+ if defined $1;
+ return ("", $3, 'F', $2, "$2$4", all_conds());
+ },
+ },
+ # Variable declaration, including arrays, or typedef thereof
+ { regexp => qr/(?:(typedef)\s?)? # Possible typedef ($1)
+ ((?:\w|\*|\s)*?) # Type ($2)
+ \s? # Possible space
+ ([[:alpha:]_]\w*) # Variable name ($3)
+ ((?:<<<\[[^\]]*\]>>>)*) # Possible array declaration ($4)
+ ;
+ /x,
+ massager => sub {
+ return ("", $3, 'T', "", $2.($4||""), all_conds())
+ if defined $1;
+ return ("", $3, 'V', $2.($4||""), $2.($4||""), all_conds());
+ },
+ },
+);
+
+# End handlers are almost the same as handlers, except they are run through
+# ONCE when the input has been parsed through. These are used to check for
+# remaining stuff, such as an unfinished #ifdef and stuff like that that the
+# main parser can't check on its own.
+my @endhandlers = (
+ { massager => sub {
+ my %opts = %{$_[0]};
+
+ die "Unfinished preprocessor conditions levels: ",scalar(@preprocessor_conds),($opts{filename} ? " in file ".$opts{filename}: ""),$opts{PLACE}
+ if @preprocessor_conds;
+ }
+ }
+ );
+
+# takes a list of strings that can each contain one or several lines of code
+# also takes a hash of options as last argument.
+#
+# returns a list of hashes with information:
+#
+# name name of the thing
+# type type, see the massage handler function
+# returntype return type of functions and variables
+# value value for macros, signature for functions, variables
+# and structs
+# conds preprocessor conditions (array ref)
+
+sub parse {
+ my %opts;
+ if (ref($_[$#_]) eq "HASH") {
+ %opts = %{$_[$#_]};
+ pop @_;
+ }
+ my %state = (
+ in_extern_C => 0, # An exception to parenthesis processing.
+ cpp_parens => [], # A list of ending parens and braces found in
+ # preprocessor directives
+ c_parens => [], # A list of ending parens and braces found in
+ # C statements
+ in_string => "", # empty string when outside a string, otherwise
+ # "'" or '"' depending on the starting quote.
+ in_comment => "", # empty string when outside a comment, otherwise
+ # "/*" or "//" depending on the type of comment
+ # found. The latter will never be multiline
+ # NOTE: in_string and in_comment will never be
+ # true (in perl semantics) at the same time.
+ current_line => 0,
+ );
+ my @result = ();
+ my $normalized_line = ""; # $input_line, but normalized. In essence, this
+ # means that ALL whitespace is removed unless
+ # it absolutely has to be present, and in that
+ # case, there's only one space.
+ # The cases where a space needs to stay present
+ # are:
+ # 1. between words
+ # 2. between words and number
+ # 3. after the first word of a preprocessor
+ # directive.
+ # 4. for the #define directive, between the macro
+ # name/args and its value, so we end up with:
+ # #define FOO val
+ # #define BAR(x) something(x)
+ my $collected_stmt = ""; # Where we're building up a C line until it's a
+ # complete definition/declaration, as determined
+ # by any handler being capable of matching it.
+
+ # We use $_ shamelessly when looking through @lines.
+ # In case we find a \ at the end, we keep filling it up with more lines.
+ $_ = undef;
+
+ foreach my $line (@_) {
+ # split tries to be smart when a string ends with the thing we split on
+ $line .= "\n" unless $line =~ m|\R$|;
+ $line .= "#";
+
+ # We use ¦undef¦ as a marker for a new line from the file.
+ # Since we convert one line to several and unshift that into @lines,
+ # that's the only safe way we have to track the original lines
+ my @lines = map { ( undef, $_ ) } split m|\R|, $line;
+
+ # Remember that extra # we added above? Now we remove it
+ pop @lines;
+ pop @lines; # Don't forget the undef
+
+ while (@lines) {
+ if (!defined($lines[0])) {
+ shift @lines;
+ $state{current_line}++;
+ if (!defined($_)) {
+ $opts{PLACE} = " at ".$opts{filename}." line ".$state{current_line}."\n";
+ $opts{PLACE2} = $opts{filename}.":".$state{current_line};
+ }
+ next;
+ }
+
+ $_ = "" unless defined $_;
+ $_ .= shift @lines;
+
+ if (m|\\$|) {
+ $_ = $`;
+ next;
+ }
+
+ if ($opts{debug}) {
+ print STDERR "DEBUG:----------------------------\n";
+ print STDERR "DEBUG: \$_ = '$_'\n";
+ }
+
+ ##########################################################
+ # Now that we have a full line, let's process through it
+ while(1) {
+ unless ($state{in_comment}) {
+ # Begin with checking if the current $normalized_line
+ # contains a preprocessor directive
+ # This is only done if we're not inside a comment and
+ # if it's a preprocessor directive and it's finished.
+ if ($normalized_line =~ m|^#| && $_ eq "") {
+ print STDERR "DEBUG[OPENSSL CPP]: \$normalized_line = '$normalized_line'\n"
+ if $opts{debug};
+ $opts{debug_type} = "OPENSSL CPP";
+ my @r = ( _run_handlers($normalized_line,
+ @opensslcpphandlers,
+ \%opts) );
+ if (shift @r) {
+ # Checking if there are lines to inject.
+ if (@r) {
+ @r = split $/, (pop @r).$_;
+ print STDERR "DEBUG[OPENSSL CPP]: injecting '", join("', '", @r),"'\n"
+ if $opts{debug} && @r;
+ @lines = ( @r, @lines );
+
+ $_ = "";
+ }
+ } else {
+ print STDERR "DEBUG[CPP]: \$normalized_line = '$normalized_line'\n"
+ if $opts{debug};
+ $opts{debug_type} = "CPP";
+ my @r = ( _run_handlers($normalized_line,
+ @cpphandlers,
+ \%opts) );
+ if (shift @r) {
+ if (ref($r[0]) eq "HASH") {
+ push @result, shift @r;
+ }
+
+ # Now, check if there are lines to inject.
+ # Really, this should never happen, it IS a
+ # preprocessor directive after all...
+ if (@r) {
+ @r = split $/, pop @r;
+ print STDERR "DEBUG[CPP]: injecting '", join("', '", @r),"'\n"
+ if $opts{debug} && @r;
+ @lines = ( @r, @lines );
+ $_ = "";
+ }
+ }
+ }
+
+ # Note: we simply ignore all directives that no
+ # handler matches
+ $normalized_line = "";
+ }
+
+ # If the two strings end and start with a character that
+ # shouldn't get concatenated, add a space
+ my $space =
+ ($collected_stmt =~ m/(?:"|')$/
+ || ($collected_stmt =~ m/(?:\w|\d)$/
+ && $normalized_line =~ m/^(?:\w|\d)/)) ? " " : "";
+
+ # Now, unless we're building up a preprocessor directive or
+ # are in the middle of a string, or the parens et al aren't
+ # balanced up yet, let's try and see if there's a OpenSSL
+ # or C handler that can make sense of what we have so far.
+ if ( $normalized_line !~ m|^#|
+ && ($collected_stmt ne "" || $normalized_line ne "")
+ && ! @{$state{c_parens}}
+ && ! $state{in_string} ) {
+ if ($opts{debug}) {
+ print STDERR "DEBUG[OPENSSL C]: \$collected_stmt = '$collected_stmt'\n";
+ print STDERR "DEBUG[OPENSSL C]: \$normalized_line = '$normalized_line'\n";
+ }
+ $opts{debug_type} = "OPENSSL C";
+ my @r = ( _run_handlers($collected_stmt
+ .$space
+ .$normalized_line,
+ @opensslchandlers,
+ \%opts) );
+ if (shift @r) {
+ # Checking if there are lines to inject.
+ if (@r) {
+ @r = split $/, (pop @r).$_;
+ print STDERR "DEBUG[OPENSSL]: injecting '", join("', '", @r),"'\n"
+ if $opts{debug} && @r;
+ @lines = ( @r, @lines );
+
+ $_ = "";
+ }
+ $normalized_line = "";
+ $collected_stmt = "";
+ } else {
+ if ($opts{debug}) {
+ print STDERR "DEBUG[C]: \$collected_stmt = '$collected_stmt'\n";
+ print STDERR "DEBUG[C]: \$normalized_line = '$normalized_line'\n";
+ }
+ $opts{debug_type} = "C";
+ my @r = ( _run_handlers($collected_stmt
+ .$space
+ .$normalized_line,
+ @chandlers,
+ \%opts) );
+ if (shift @r) {
+ if (ref($r[0]) eq "HASH") {
+ push @result, shift @r;
+ }
+
+ # Checking if there are lines to inject.
+ if (@r) {
+ @r = split $/, (pop @r).$_;
+ print STDERR "DEBUG[C]: injecting '", join("', '", @r),"'\n"
+ if $opts{debug} && @r;
+ @lines = ( @r, @lines );
+
+ $_ = "";
+ }
+ $normalized_line = "";
+ $collected_stmt = "";
+ }
+ }
+ }
+ if ($_ eq "") {
+ $collected_stmt .= $space.$normalized_line;
+ $normalized_line = "";
+ }
+ }
+
+ if ($_ eq "") {
+ $_ = undef;
+ last;
+ }
+
+ # Take care of inside string first.
+ if ($state{in_string}) {
+ if (m/ (?:^|(?<!\\)) # Make sure it's not escaped
+ $state{in_string} # Look for matching quote
+ /x) {
+ $normalized_line .= $`.$&;
+ $state{in_string} = "";
+ $_ = $';
+ next;
+ } else {
+ die "Unfinished string without continuation found$opts{PLACE}\n";
+ }
+ }
+ # ... or inside comments, whichever happens to apply
+ elsif ($state{in_comment}) {
+
+ # This should never happen
+ die "Something went seriously wrong, multiline //???$opts{PLACE}\n"
+ if ($state{in_comment} eq "//");
+
+ # A note: comments are simply discarded.
+
+ if (m/ (?:^|(?<!\\)) # Make sure it's not escaped
+ \*\/ # Look for C comment end
+ /x) {
+ $state{in_comment} = "";
+ $_ = $';
+ print STDERR "DEBUG: Found end of comment, followed by '$_'\n"
+ if $opts{debug};
+ next;
+ } else {
+ $_ = "";
+ next;
+ }
+ }
+
+ # At this point, it's safe to remove leading whites, but
+ # we need to be careful with some preprocessor lines
+ if (m|^\s+|) {
+ my $rest = $';
+ my $space = "";
+ $space = " "
+ if ($normalized_line =~ m/^
+ \#define\s\w(?:\w|\d)*(?:<<<\([^\)]*\)>>>)?
+ | \#[a-z]+
+ $/x);
+ print STDERR "DEBUG: Processing leading spaces: \$normalized_line = '$normalized_line', \$space = '$space', \$rest = '$rest'\n"
+ if $opts{debug};
+ $_ = $space.$rest;
+ }
+
+ my $parens =
+ $normalized_line =~ m|^#| ? 'cpp_parens' : 'c_parens';
+ (my $paren_singular = $parens) =~ s|s$||;
+
+ # Now check for specific tokens, and if they are parens,
+ # check them against $state{$parens}. Note that we surround
+ # the outermost parens with extra "<<<" and ">>>". Those
+ # are for the benefit of handlers who to need to detect
+ # them, and they will be removed from the final output.
+ if (m|^[\{\[\(]|) {
+ my $body = $&;
+ $_ = $';
+ if (!@{$state{$parens}}) {
+ if ("$normalized_line$body" =~ m|^extern "C"\{$|) {
+ $state{in_extern_C} = 1;
+ print STDERR "DEBUG: found start of 'extern \"C\"' ($normalized_line$body)\n"
+ if $opts{debug};
+ $normalized_line = "";
+ } else {
+ $normalized_line .= "<<<".$body;
+ }
+ } else {
+ $normalized_line .= $body;
+ }
+
+ if ($normalized_line ne "") {
+ print STDERR "DEBUG: found $paren_singular start '$body'\n"
+ if $opts{debug};
+ $body =~ tr|\{\[\(|\}\]\)|;
+ print STDERR "DEBUG: pushing $paren_singular end '$body'\n"
+ if $opts{debug};
+ push @{$state{$parens}}, $body;
+ }
+ } elsif (m|^[\}\]\)]|) {
+ $_ = $';
+
+ if (!@{$state{$parens}}
+ && $& eq '}' && $state{in_extern_C}) {
+ print STDERR "DEBUG: found end of 'extern \"C\"'\n"
+ if $opts{debug};
+ $state{in_extern_C} = 0;
+ } else {
+ print STDERR "DEBUG: Trying to match '$&' against '"
+ ,join("', '", @{$state{$parens}})
+ ,"'\n"
+ if $opts{debug};
+ die "Unmatched parentheses$opts{PLACE}\n"
+ unless (@{$state{$parens}}
+ && pop @{$state{$parens}} eq $&);
+ if (!@{$state{$parens}}) {
+ $normalized_line .= $&.">>>";
+ } else {
+ $normalized_line .= $&;
+ }
+ }
+ } elsif (m|^["']|) { # string start
+ my $body = $&;
+ $_ = $';
+
+ # We want to separate strings from \w and \d with one space.
+ $normalized_line .= " " if $normalized_line =~ m/(\w|\d)$/;
+ $normalized_line .= $body;
+ $state{in_string} = $body;
+ } elsif (m|^\/\*|) { # C style comment
+ print STDERR "DEBUG: found start of C style comment\n"
+ if $opts{debug};
+ $state{in_comment} = $&;
+ $_ = $';
+ } elsif (m|^\/\/|) { # C++ style comment
+ print STDERR "DEBUG: found C++ style comment\n"
+ if $opts{debug};
+ $_ = ""; # (just discard it entirely)
+ } elsif (m/^ (?| (?: 0[xX][[:xdigit:]]+ | 0[bB][01]+ | [0-9]+ )
+ (?i: U | L | UL | LL | ULL )?
+ | [0-9]+\.[0-9]+(?:[eE][\-\+]\d+)? (?i: F | L)?
+ ) /x) {
+ print STDERR "DEBUG: Processing numbers: \$normalized_line = '$normalized_line', \$& = '$&', \$' = '$''\n"
+ if $opts{debug};
+ $normalized_line .= $&;
+ $_ = $';
+ } elsif (m/^[[:alpha:]_]\w*/) {
+ my $body = $&;
+ my $rest = $';
+ my $space = "";
+
+ # Now, only add a space if it's needed to separate
+ # two \w characters, and we also surround strings with
+ # a space. In this case, that's if $normalized_line ends
+ # with a \w, \d, " or '.
+ $space = " "
+ if ($normalized_line =~ m/("|')$/
+ || ($normalized_line =~ m/(\w|\d)$/
+ && $body =~ m/^(\w|\d)/));
+
+ print STDERR "DEBUG: Processing words: \$normalized_line = '$normalized_line', \$space = '$space', \$body = '$body', \$rest = '$rest'\n"
+ if $opts{debug};
+ $normalized_line .= $space.$body;
+ $_ = $rest;
+ } elsif (m|^(?:\\)?.|) { # Catch-all
+ $normalized_line .= $&;
+ $_ = $';
+ }
+ }
+ }
+ }
+ foreach my $handler (@endhandlers) {
+ if ($handler->{massager}) {
+ $handler->{massager}->(\%opts);
+ }
+ }
+ return @result;
+}
+
+# arg1: line to check
+# arg2...: handlers to check
+# return undef when no handler matched
+sub _run_handlers {
+ my %opts;
+ if (ref($_[$#_]) eq "HASH") {
+ %opts = %{$_[$#_]};
+ pop @_;
+ }
+ my $line = shift;
+ my @handlers = @_;
+
+ foreach my $handler (@handlers) {
+ if ($handler->{regexp}
+ && $line =~ m|^$handler->{regexp}$|) {
+ if ($handler->{massager}) {
+ if ($opts{debug}) {
+ print STDERR "DEBUG[",$opts{debug_type},"]: Trying to handle '$line'\n";
+ print STDERR "DEBUG[",$opts{debug_type},"]: (matches /\^",$handler->{regexp},"\$/)\n";
+ }
+ my $saved_line = $line;
+ my @massaged =
+ map { s/(<<<|>>>)//g; $_ }
+ $handler->{massager}->($saved_line, \%opts);
+ print STDERR "DEBUG[",$opts{debug_type},"]: Got back '"
+ , join("', '", @massaged), "'\n"
+ if $opts{debug};
+
+ # Because we may get back new lines to be
+ # injected before whatever else that follows,
+ # and the injected stuff might include
+ # preprocessor lines, we need to inject them
+ # in @lines and set $_ to the empty string to
+ # break out from the inner loops
+ my $injected_lines = shift @massaged || "";
+
+ if (@massaged) {
+ return (1,
+ {
+ name => shift @massaged,
+ type => shift @massaged,
+ returntype => shift @massaged,
+ value => shift @massaged,
+ conds => [ @massaged ]
+ },
+ $injected_lines
+ );
+ } else {
+ print STDERR "DEBUG[",$opts{debug_type},"]: (ignore, possible side effects)\n"
+ if $opts{debug} && $injected_lines eq "";
+ return (1, $injected_lines);
+ }
+ }
+ return (1);
+ }
+ }
+ return (0);
+}
diff --git a/util/perl/OpenSSL/Template.pm b/util/perl/OpenSSL/Template.pm
new file mode 100644
index 000000000000..7411dd8ae8d7
--- /dev/null
+++ b/util/perl/OpenSSL/Template.pm
@@ -0,0 +1,150 @@
+#! /usr/bin/env perl
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+# Implements the functionality to read one or more template files and run
+# them through Text::Template
+
+package OpenSSL::Template;
+
+=head1 NAME
+
+OpenSSL::Template - a private extension of Text::Template
+
+=head1 DESCRIPTION
+
+This provides exactly the functionality from Text::Template, with the
+following additions:
+
+=over 4
+
+=item *
+
+The template perl code delimiters (given with the C<DELIMITER> option)
+are set to C<{-> and C<-}> by default.
+
+=item *
+
+A few extra functions are offered to be used by the template perl code, see
+L</Functions>.
+
+=back
+
+=cut
+
+use File::Basename;
+use File::Spec::Functions;
+use Text::Template 1.46;
+
+our @ISA = qw(Text::Template); # parent
+
+sub new {
+ my $class = shift;
+
+ # Call the constructor of the parent class.
+ my $self = $class->SUPER::new(DELIMITERS => [ '{-', '-}'],
+ @_ );
+
+ # Add few more attributes
+ $self->{_output_off} = 0; # Default to output hunks
+
+ return bless $self, $class;
+}
+
+sub fill_in {
+ my $self = shift;
+ my %opts = @_;
+ my %hash = ( %{$opts{HASH}} );
+ delete $opts{HASH};
+
+ $self->SUPER::fill_in(HASH => { quotify1 => \&quotify1,
+ quotify_l => \&quotify_l,
+ output_on => sub { $self->output_on() },
+ output_off => sub { $self->output_off() },
+ %hash },
+ %opts);
+}
+
+=head2 Functions
+
+=cut
+
+# Override Text::Template's append_text_to_result, as recommended here:
+#
+# http://search.cpan.org/~mjd/Text-Template-1.46/lib/Text/Template.pm#Automatic_postprocessing_of_template_hunks
+sub append_text_to_output {
+ my $self = shift;
+
+ if ($self->{_output_off} == 0) {
+ $self->SUPER::append_text_to_output(@_);
+ }
+
+ return;
+}
+
+=begin comment
+
+We lie about the OO nature of output_on() and output_off(), 'cause that's
+not how we pass them, see the HASH option used in fill_in() above
+
+=end comment
+
+=over 4
+
+=item output_on()
+
+=item output_off()
+
+Switch on or off template output. Here's an example usage:
+
+=over 4
+
+ {- output_off() if CONDITION -}
+ whatever
+ {- output_on() if CONDITION -}
+
+=back
+
+In this example, C<whatever> will only become part of the template output
+if C<CONDITION> is true.
+
+=back
+
+=cut
+
+sub output_on {
+ my $self = shift;
+ if (--$self->{_output_off} < 0) {
+ $self->{_output_off} = 0;
+ }
+}
+
+sub output_off {
+ my $self = shift;
+ $self->{_output_off}++;
+}
+
+# Helper functions for the templates #################################
+
+=head1 SEE ALSO
+
+L<Text::Template>
+
+=head1 AUTHORS
+
+Richard Levitte E<lt>levitte@openssl.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+
+Licensed under the Apache License 2.0 (the "License"). You may not use
+this file except in compliance with the License. You can obtain a copy
+in the file LICENSE in the source distribution or at
+L<https://www.openssl.org/source/license.html>.
+
+=cut
diff --git a/util/perl/OpenSSL/Test.pm b/util/perl/OpenSSL/Test.pm
new file mode 100644
index 000000000000..00ef1832d3a0
--- /dev/null
+++ b/util/perl/OpenSSL/Test.pm
@@ -0,0 +1,1301 @@
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+package OpenSSL::Test;
+
+use strict;
+use warnings;
+
+use Test::More 0.96;
+
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+$VERSION = "1.0";
+@ISA = qw(Exporter);
+@EXPORT = (@Test::More::EXPORT, qw(setup run indir cmd app fuzz test
+ perlapp perltest subtest));
+@EXPORT_OK = (@Test::More::EXPORT_OK, qw(bldtop_dir bldtop_file
+ srctop_dir srctop_file
+ data_file data_dir
+ result_file result_dir
+ pipe with cmdstr
+ openssl_versions
+ ok_nofips is_nofips isnt_nofips));
+
+=head1 NAME
+
+OpenSSL::Test - a private extension of Test::More
+
+=head1 SYNOPSIS
+
+ use OpenSSL::Test;
+
+ setup("my_test_name");
+
+ plan tests => 2;
+
+ ok(run(app(["openssl", "version"])), "check for openssl presence");
+
+ indir "subdir" => sub {
+ ok(run(test(["sometest", "arg1"], stdout => "foo.txt")),
+ "run sometest with output to foo.txt");
+ };
+
+=head1 DESCRIPTION
+
+This module is a private extension of L<Test::More> for testing OpenSSL.
+In addition to the Test::More functions, it also provides functions that
+easily find the diverse programs within a OpenSSL build tree, as well as
+some other useful functions.
+
+This module I<depends> on the environment variables C<$TOP> or C<$SRCTOP>
+and C<$BLDTOP>. Without one of the combinations it refuses to work.
+See L</ENVIRONMENT> below.
+
+With each test recipe, a parallel data directory with (almost) the same name
+as the recipe is possible in the source directory tree. For example, for a
+recipe C<$SRCTOP/test/recipes/99-foo.t>, there could be a directory
+C<$SRCTOP/test/recipes/99-foo_data/>.
+
+=cut
+
+use File::Copy;
+use File::Spec::Functions qw/file_name_is_absolute curdir canonpath splitdir
+ catdir catfile splitpath catpath devnull abs2rel/;
+use File::Path 2.00 qw/rmtree mkpath/;
+use File::Basename;
+use Cwd qw/getcwd abs_path/;
+use OpenSSL::Util;
+
+my $level = 0;
+
+# The name of the test. This is set by setup() and is used in the other
+# functions to verify that setup() has been used.
+my $test_name = undef;
+
+# Directories we want to keep track of TOP, APPS, TEST and RESULTS are the
+# ones we're interested in, corresponding to the environment variables TOP
+# (mandatory), BIN_D, TEST_D, UTIL_D and RESULT_D.
+my %directories = ();
+
+# The environment variables that gave us the contents in %directories. These
+# get modified whenever we change directories, so that subprocesses can use
+# the values of those environment variables as well
+my @direnv = ();
+
+# A bool saying if we shall stop all testing if the current recipe has failing
+# tests or not. This is set by setup() if the environment variable STOPTEST
+# is defined with a non-empty value.
+my $end_with_bailout = 0;
+
+# A set of hooks that is affected by with() and may be used in diverse places.
+# All hooks are expected to be CODE references.
+my %hooks = (
+
+ # exit_checker is used by run() directly after completion of a command.
+ # it receives the exit code from that command and is expected to return
+ # 1 (for success) or 0 (for failure). This is the status value that run()
+ # will give back (through the |statusvar| reference and as returned value
+ # when capture => 1 doesn't apply).
+ exit_checker => sub { return shift == 0 ? 1 : 0 },
+
+ );
+
+# Debug flag, to be set manually when needed
+my $debug = 0;
+
+=head2 Main functions
+
+The following functions are exported by default when using C<OpenSSL::Test>.
+
+=cut
+
+=over 4
+
+=item B<setup "NAME">
+
+C<setup> is used for initial setup, and it is mandatory that it's used.
+If it's not used in a OpenSSL test recipe, the rest of the recipe will
+most likely refuse to run.
+
+C<setup> checks for environment variables (see L</ENVIRONMENT> below),
+checks that C<$TOP/Configure> or C<$SRCTOP/Configure> exists, C<chdir>
+into the results directory (defined by the C<$RESULT_D> environment
+variable if defined, otherwise C<$BLDTOP/test-runs> or C<$TOP/test-runs>,
+whichever is defined).
+
+=back
+
+=cut
+
+sub setup {
+ my $old_test_name = $test_name;
+ $test_name = shift;
+ my %opts = @_;
+
+ BAIL_OUT("setup() must receive a name") unless $test_name;
+ warn "setup() detected test name change. Innocuous, so we continue...\n"
+ if $old_test_name && $old_test_name ne $test_name;
+
+ return if $old_test_name;
+
+ BAIL_OUT("setup() needs \$TOP or \$SRCTOP and \$BLDTOP to be defined")
+ unless $ENV{TOP} || ($ENV{SRCTOP} && $ENV{BLDTOP});
+ BAIL_OUT("setup() found both \$TOP and \$SRCTOP or \$BLDTOP...")
+ if $ENV{TOP} && ($ENV{SRCTOP} || $ENV{BLDTOP});
+
+ __env();
+
+ BAIL_OUT("setup() expects the file Configure in the source top directory")
+ unless -f srctop_file("Configure");
+
+ note "The results of this test will end up in $directories{RESULTS}"
+ unless $opts{quiet};
+
+ __cwd($directories{RESULTS});
+}
+
+=over 4
+
+=item B<indir "SUBDIR" =E<gt> sub BLOCK, OPTS>
+
+C<indir> is used to run a part of the recipe in a different directory than
+the one C<setup> moved into, usually a subdirectory, given by SUBDIR.
+The part of the recipe that's run there is given by the codeblock BLOCK.
+
+C<indir> takes some additional options OPTS that affect the subdirectory:
+
+=over 4
+
+=item B<create =E<gt> 0|1>
+
+When set to 1 (or any value that perl perceives as true), the subdirectory
+will be created if it doesn't already exist. This happens before BLOCK
+is executed.
+
+=back
+
+An example:
+
+ indir "foo" => sub {
+ ok(run(app(["openssl", "version"]), stdout => "foo.txt"));
+ if (ok(open(RESULT, "foo.txt"), "reading foo.txt")) {
+ my $line = <RESULT>;
+ close RESULT;
+ is($line, qr/^OpenSSL 1\./,
+ "check that we're using OpenSSL 1.x.x");
+ }
+ }, create => 1;
+
+=back
+
+=cut
+
+sub indir {
+ my $subdir = shift;
+ my $codeblock = shift;
+ my %opts = @_;
+
+ my $reverse = __cwd($subdir,%opts);
+ BAIL_OUT("FAILURE: indir, \"$subdir\" wasn't possible to move into")
+ unless $reverse;
+
+ $codeblock->();
+
+ __cwd($reverse);
+}
+
+=over 4
+
+=item B<cmd ARRAYREF, OPTS>
+
+This functions build up a platform dependent command based on the
+input. It takes a reference to a list that is the executable or
+script and its arguments, and some additional options (described
+further on). Where necessary, the command will be wrapped in a
+suitable environment to make sure the correct shared libraries are
+used (currently only on Unix).
+
+It returns a CODEREF to be used by C<run>, C<pipe> or C<cmdstr>.
+
+The options that C<cmd> (as well as its derivatives described below) can take
+are in the form of hash values:
+
+=over 4
+
+=item B<stdin =E<gt> PATH>
+
+=item B<stdout =E<gt> PATH>
+
+=item B<stderr =E<gt> PATH>
+
+In all three cases, the corresponding standard input, output or error is
+redirected from (for stdin) or to (for the others) a file given by the
+string PATH, I<or>, if the value is C<undef>, C</dev/null> or similar.
+
+=back
+
+=item B<app ARRAYREF, OPTS>
+
+=item B<test ARRAYREF, OPTS>
+
+Both of these are specific applications of C<cmd>, with just a couple
+of small difference:
+
+C<app> expects to find the given command (the first item in the given list
+reference) as an executable in C<$BIN_D> (if defined, otherwise C<$TOP/apps>
+or C<$BLDTOP/apps>).
+
+C<test> expects to find the given command (the first item in the given list
+reference) as an executable in C<$TEST_D> (if defined, otherwise C<$TOP/test>
+or C<$BLDTOP/test>).
+
+Also, for both C<app> and C<test>, the command may be prefixed with
+the content of the environment variable C<$EXE_SHELL>, which is useful
+in case OpenSSL has been cross compiled.
+
+=item B<perlapp ARRAYREF, OPTS>
+
+=item B<perltest ARRAYREF, OPTS>
+
+These are also specific applications of C<cmd>, where the interpreter
+is predefined to be C<perl>, and they expect the script to be
+interpreted to reside in the same location as C<app> and C<test>.
+
+C<perlapp> and C<perltest> will also take the following option:
+
+=over 4
+
+=item B<interpreter_args =E<gt> ARRAYref>
+
+The array reference is a set of arguments for the interpreter rather
+than the script. Take care so that none of them can be seen as a
+script! Flags and their eventual arguments only!
+
+=back
+
+An example:
+
+ ok(run(perlapp(["foo.pl", "arg1"],
+ interpreter_args => [ "-I", srctop_dir("test") ])));
+
+=back
+
+=begin comment
+
+One might wonder over the complexity of C<apps>, C<fuzz>, C<test>, ...
+with all the lazy evaluations and all that. The reason for this is that
+we want to make sure the directory in which those programs are found are
+correct at the time these commands are used. Consider the following code
+snippet:
+
+ my $cmd = app(["openssl", ...]);
+
+ indir "foo", sub {
+ ok(run($cmd), "Testing foo")
+ };
+
+If there wasn't this lazy evaluation, the directory where C<openssl> is
+found would be incorrect at the time C<run> is called, because it was
+calculated before we moved into the directory "foo".
+
+=end comment
+
+=cut
+
+sub cmd {
+ my $cmd = shift;
+ my %opts = @_;
+ return sub {
+ my $num = shift;
+ # Make a copy to not destroy the caller's array
+ my @cmdargs = ( @$cmd );
+ my @prog = __wrap_cmd(shift @cmdargs, $opts{exe_shell} // ());
+
+ return __decorate_cmd($num, [ @prog, fixup_cmd_elements(@cmdargs) ],
+ %opts);
+ }
+}
+
+sub app {
+ my $cmd = shift;
+ my %opts = @_;
+ return sub {
+ my @cmdargs = ( @{$cmd} );
+ my @prog = __fixup_prg(__apps_file(shift @cmdargs, __exeext()));
+ return cmd([ @prog, @cmdargs ],
+ exe_shell => $ENV{EXE_SHELL}, %opts) -> (shift);
+ }
+}
+
+sub fuzz {
+ my $cmd = shift;
+ my %opts = @_;
+ return sub {
+ my @cmdargs = ( @{$cmd} );
+ my @prog = __fixup_prg(__fuzz_file(shift @cmdargs, __exeext()));
+ return cmd([ @prog, @cmdargs ],
+ exe_shell => $ENV{EXE_SHELL}, %opts) -> (shift);
+ }
+}
+
+sub test {
+ my $cmd = shift;
+ my %opts = @_;
+ return sub {
+ my @cmdargs = ( @{$cmd} );
+ my @prog = __fixup_prg(__test_file(shift @cmdargs, __exeext()));
+ return cmd([ @prog, @cmdargs ],
+ exe_shell => $ENV{EXE_SHELL}, %opts) -> (shift);
+ }
+}
+
+sub perlapp {
+ my $cmd = shift;
+ my %opts = @_;
+ return sub {
+ my @interpreter_args = defined $opts{interpreter_args} ?
+ @{$opts{interpreter_args}} : ();
+ my @interpreter = __fixup_prg($^X);
+ my @cmdargs = ( @{$cmd} );
+ my @prog = __apps_file(shift @cmdargs, undef);
+ return cmd([ @interpreter, @interpreter_args,
+ @prog, @cmdargs ], %opts) -> (shift);
+ }
+}
+
+sub perltest {
+ my $cmd = shift;
+ my %opts = @_;
+ return sub {
+ my @interpreter_args = defined $opts{interpreter_args} ?
+ @{$opts{interpreter_args}} : ();
+ my @interpreter = __fixup_prg($^X);
+ my @cmdargs = ( @{$cmd} );
+ my @prog = __test_file(shift @cmdargs, undef);
+ return cmd([ @interpreter, @interpreter_args,
+ @prog, @cmdargs ], %opts) -> (shift);
+ }
+}
+
+=over 4
+
+=item B<run CODEREF, OPTS>
+
+CODEREF is expected to be the value return by C<cmd> or any of its
+derivatives, anything else will most likely cause an error unless you
+know what you're doing.
+
+C<run> executes the command returned by CODEREF and return either the
+resulting standard output (if the option C<capture> is set true) or a boolean
+indicating if the command succeeded or not.
+
+The options that C<run> can take are in the form of hash values:
+
+=over 4
+
+=item B<capture =E<gt> 0|1>
+
+If true, the command will be executed with a perl backtick,
+and C<run> will return the resulting standard output as an array of lines.
+If false or not given, the command will be executed with C<system()>,
+and C<run> will return 1 if the command was successful or 0 if it wasn't.
+
+=item B<prefix =E<gt> EXPR>
+
+If specified, EXPR will be used as a string to prefix the output from the
+command. This is useful if the output contains lines starting with C<ok >
+or C<not ok > that can disturb Test::Harness.
+
+=item B<statusvar =E<gt> VARREF>
+
+If used, B<VARREF> must be a reference to a scalar variable. It will be
+assigned a boolean indicating if the command succeeded or not. This is
+particularly useful together with B<capture>.
+
+=back
+
+Usually 1 indicates that the command was successful and 0 indicates failure.
+For further discussion on what is considered a successful command or not, see
+the function C<with> further down.
+
+=back
+
+=cut
+
+sub run {
+ my ($cmd, $display_cmd) = shift->(0);
+ my %opts = @_;
+
+ return () if !$cmd;
+
+ my $prefix = "";
+ if ( $^O eq "VMS" ) { # VMS
+ $prefix = "pipe ";
+ }
+
+ my @r = ();
+ my $r = 0;
+ my $e = 0;
+
+ die "OpenSSL::Test::run(): statusvar value not a scalar reference"
+ if $opts{statusvar} && ref($opts{statusvar}) ne "SCALAR";
+
+ # For some reason, program output, or even output from this function
+ # somehow isn't caught by TAP::Harness (TAP::Parser?) on VMS, so we're
+ # silencing it specifically there until further notice.
+ my $save_STDOUT;
+ my $save_STDERR;
+ if ($^O eq 'VMS') {
+ # In non-verbose, we want to shut up the command interpreter, in case
+ # it has something to complain about. On VMS, it might complain both
+ # on stdout and stderr
+ if ($ENV{HARNESS_ACTIVE} && !$ENV{HARNESS_VERBOSE}) {
+ open $save_STDOUT, '>&', \*STDOUT or die "Can't dup STDOUT: $!";
+ open $save_STDERR, '>&', \*STDERR or die "Can't dup STDERR: $!";
+ open STDOUT, ">", devnull();
+ open STDERR, ">", devnull();
+ }
+ }
+
+ $ENV{HARNESS_OSSL_LEVEL} = $level + 1;
+
+ # The dance we do with $? is the same dance the Unix shells appear to
+ # do. For example, a program that gets aborted (and therefore signals
+ # SIGABRT = 6) will appear to exit with the code 134. We mimic this
+ # to make it easier to compare with a manual run of the command.
+ if ($opts{capture} || defined($opts{prefix})) {
+ my $pipe;
+ local $_;
+
+ open($pipe, '-|', "$prefix$cmd") or die "Can't start command: $!";
+ while(<$pipe>) {
+ my $l = ($opts{prefix} // "") . $_;
+ if ($opts{capture}) {
+ push @r, $l;
+ } else {
+ print STDOUT $l;
+ }
+ }
+ close $pipe;
+ } else {
+ $ENV{HARNESS_OSSL_PREFIX} = "# ";
+ system("$prefix$cmd");
+ delete $ENV{HARNESS_OSSL_PREFIX};
+ }
+ $e = ($? & 0x7f) ? ($? & 0x7f)|0x80 : ($? >> 8);
+ $r = $hooks{exit_checker}->($e);
+ if ($opts{statusvar}) {
+ ${$opts{statusvar}} = $r;
+ }
+
+ # Restore STDOUT / STDERR on VMS
+ if ($^O eq 'VMS') {
+ if ($ENV{HARNESS_ACTIVE} && !$ENV{HARNESS_VERBOSE}) {
+ close STDOUT;
+ close STDERR;
+ open STDOUT, '>&', $save_STDOUT or die "Can't restore STDOUT: $!";
+ open STDERR, '>&', $save_STDERR or die "Can't restore STDERR: $!";
+ }
+
+ print STDERR "$prefix$display_cmd => $e\n"
+ if !$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE};
+ } else {
+ print STDERR "$prefix$display_cmd => $e\n";
+ }
+
+ # At this point, $? stops being interesting, and unfortunately,
+ # there are Test::More versions that get picky if we leave it
+ # non-zero.
+ $? = 0;
+
+ if ($opts{capture}) {
+ return @r;
+ } else {
+ return $r;
+ }
+}
+
+END {
+ my $tb = Test::More->builder;
+ my $failure = scalar(grep { $_ == 0; } $tb->summary);
+ if ($failure && $end_with_bailout) {
+ BAIL_OUT("Stoptest!");
+ }
+}
+
+=head2 Utility functions
+
+The following functions are exported on request when using C<OpenSSL::Test>.
+
+ # To only get the bldtop_file and srctop_file functions.
+ use OpenSSL::Test qw/bldtop_file srctop_file/;
+
+ # To only get the bldtop_file function in addition to the default ones.
+ use OpenSSL::Test qw/:DEFAULT bldtop_file/;
+
+=cut
+
+# Utility functions, exported on request
+
+=over 4
+
+=item B<bldtop_dir LIST>
+
+LIST is a list of directories that make up a path from the top of the OpenSSL
+build directory (as indicated by the environment variable C<$TOP> or
+C<$BLDTOP>).
+C<bldtop_dir> returns the resulting directory as a string, adapted to the local
+operating system.
+
+=back
+
+=cut
+
+sub bldtop_dir {
+ return __bldtop_dir(@_); # This caters for operating systems that have
+ # a very distinct syntax for directories.
+}
+
+=over 4
+
+=item B<bldtop_file LIST, FILENAME>
+
+LIST is a list of directories that make up a path from the top of the OpenSSL
+build directory (as indicated by the environment variable C<$TOP> or
+C<$BLDTOP>) and FILENAME is the name of a file located in that directory path.
+C<bldtop_file> returns the resulting file path as a string, adapted to the local
+operating system.
+
+=back
+
+=cut
+
+sub bldtop_file {
+ return __bldtop_file(@_);
+}
+
+=over 4
+
+=item B<srctop_dir LIST>
+
+LIST is a list of directories that make up a path from the top of the OpenSSL
+source directory (as indicated by the environment variable C<$TOP> or
+C<$SRCTOP>).
+C<srctop_dir> returns the resulting directory as a string, adapted to the local
+operating system.
+
+=back
+
+=cut
+
+sub srctop_dir {
+ return __srctop_dir(@_); # This caters for operating systems that have
+ # a very distinct syntax for directories.
+}
+
+=over 4
+
+=item B<srctop_file LIST, FILENAME>
+
+LIST is a list of directories that make up a path from the top of the OpenSSL
+source directory (as indicated by the environment variable C<$TOP> or
+C<$SRCTOP>) and FILENAME is the name of a file located in that directory path.
+C<srctop_file> returns the resulting file path as a string, adapted to the local
+operating system.
+
+=back
+
+=cut
+
+sub srctop_file {
+ return __srctop_file(@_);
+}
+
+=over 4
+
+=item B<data_dir LIST>
+
+LIST is a list of directories that make up a path from the data directory
+associated with the test (see L</DESCRIPTION> above).
+C<data_dir> returns the resulting directory as a string, adapted to the local
+operating system.
+
+=back
+
+=cut
+
+sub data_dir {
+ return __data_dir(@_);
+}
+
+=over 4
+
+=item B<data_file LIST, FILENAME>
+
+LIST is a list of directories that make up a path from the data directory
+associated with the test (see L</DESCRIPTION> above) and FILENAME is the name
+of a file located in that directory path. C<data_file> returns the resulting
+file path as a string, adapted to the local operating system.
+
+=back
+
+=cut
+
+sub data_file {
+ return __data_file(@_);
+}
+
+=over 4
+
+=item B<result_dir>
+
+C<result_dir> returns the directory where test output files should be placed
+as a string, adapted to the local operating system.
+
+=back
+
+=cut
+
+sub result_dir {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ return catfile($directories{RESULTS});
+}
+
+=over 4
+
+=item B<result_file FILENAME>
+
+FILENAME is the name of a test output file.
+C<result_file> returns the path of the given file as a string,
+prepending to the file name the path to the directory where test output files
+should be placed, adapted to the local operating system.
+
+=back
+
+=cut
+
+sub result_file {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ my $f = pop;
+ return catfile(result_dir(),@_,$f);
+}
+
+=over 4
+
+=item B<pipe LIST>
+
+LIST is a list of CODEREFs returned by C<app> or C<test>, from which C<pipe>
+creates a new command composed of all the given commands put together in a
+pipe. C<pipe> returns a new CODEREF in the same manner as C<app> or C<test>,
+to be passed to C<run> for execution.
+
+=back
+
+=cut
+
+sub pipe {
+ my @cmds = @_;
+ return
+ sub {
+ my @cs = ();
+ my @dcs = ();
+ my @els = ();
+ my $counter = 0;
+ foreach (@cmds) {
+ my ($c, $dc, @el) = $_->(++$counter);
+
+ return () if !$c;
+
+ push @cs, $c;
+ push @dcs, $dc;
+ push @els, @el;
+ }
+ return (
+ join(" | ", @cs),
+ join(" | ", @dcs),
+ @els
+ );
+ };
+}
+
+=over 4
+
+=item B<with HASHREF, CODEREF>
+
+C<with> will temporarily install hooks given by the HASHREF and then execute
+the given CODEREF. Hooks are usually expected to have a coderef as value.
+
+The currently available hoosk are:
+
+=over 4
+
+=item B<exit_checker =E<gt> CODEREF>
+
+This hook is executed after C<run> has performed its given command. The
+CODEREF receives the exit code as only argument and is expected to return
+1 (if the exit code indicated success) or 0 (if the exit code indicated
+failure).
+
+=back
+
+=back
+
+=cut
+
+sub with {
+ my $opts = shift;
+ my %opts = %{$opts};
+ my $codeblock = shift;
+
+ my %saved_hooks = ();
+
+ foreach (keys %opts) {
+ $saved_hooks{$_} = $hooks{$_} if exists($hooks{$_});
+ $hooks{$_} = $opts{$_};
+ }
+
+ $codeblock->();
+
+ foreach (keys %saved_hooks) {
+ $hooks{$_} = $saved_hooks{$_};
+ }
+}
+
+=over 4
+
+=item B<cmdstr CODEREF, OPTS>
+
+C<cmdstr> takes a CODEREF from C<app> or C<test> and simply returns the
+command as a string.
+
+C<cmdstr> takes some additional options OPTS that affect the string returned:
+
+=over 4
+
+=item B<display =E<gt> 0|1>
+
+When set to 0, the returned string will be with all decorations, such as a
+possible redirect of stderr to the null device. This is suitable if the
+string is to be used directly in a recipe.
+
+When set to 1, the returned string will be without extra decorations. This
+is suitable for display if that is desired (doesn't confuse people with all
+internal stuff), or if it's used to pass a command down to a subprocess.
+
+Default: 0
+
+=back
+
+=back
+
+=cut
+
+sub cmdstr {
+ my ($cmd, $display_cmd) = shift->(0);
+ my %opts = @_;
+
+ if ($opts{display}) {
+ return $display_cmd;
+ } else {
+ return $cmd;
+ }
+}
+
+=over 4
+
+=over 4
+
+=item B<openssl_versions>
+
+Returns a list of two version numbers, the first representing the build
+version, the second representing the library version. See opensslv.h for
+more information on those numbers.
+
+=back
+
+=cut
+
+my @versions = ();
+sub openssl_versions {
+ unless (@versions) {
+ my %lines =
+ map { s/\R$//;
+ /^(.*): (.*)$/;
+ $1 => $2 }
+ run(test(['versions']), capture => 1);
+ @versions = ( $lines{'Build version'}, $lines{'Library version'} );
+ }
+ return @versions;
+}
+
+=over 4
+
+=item B<ok_nofips EXPR, TEST_NAME>
+
+C<ok_nofips> is equivalent to using C<ok> when the environment variable
+C<FIPS_MODE> is undefined, otherwise it is equivalent to C<not ok>. This can be
+used for C<ok> tests that must fail when testing a FIPS provider. The parameters
+are the same as used by C<ok> which is an expression EXPR followed by the test
+description TEST_NAME.
+
+An example:
+
+ ok_nofips(run(app(["md5.pl"])), "md5 should fail in fips mode");
+
+=item B<is_nofips EXPR1, EXPR2, TEST_NAME>
+
+C<is_nofips> is equivalent to using C<is> when the environment variable
+C<FIPS_MODE> is undefined, otherwise it is equivalent to C<isnt>. This can be
+used for C<is> tests that must fail when testing a FIPS provider. The parameters
+are the same as used by C<is> which has 2 arguments EXPR1 and EXPR2 that can be
+compared using eq or ne, followed by a test description TEST_NAME.
+
+An example:
+
+ is_nofips(ultimate_answer(), 42, "Meaning of Life");
+
+=item B<isnt_nofips EXPR1, EXPR2, TEST_NAME>
+
+C<isnt_nofips> is equivalent to using C<isnt> when the environment variable
+C<FIPS_MODE> is undefined, otherwise it is equivalent to C<is>. This can be
+used for C<isnt> tests that must fail when testing a FIPS provider. The
+parameters are the same as used by C<isnt> which has 2 arguments EXPR1 and EXPR2
+that can be compared using ne or eq, followed by a test description TEST_NAME.
+
+An example:
+
+ isnt_nofips($foo, '', "Got some foo");
+
+=back
+
+=cut
+
+sub ok_nofips {
+ return ok(!$_[0], @_[1..$#_]) if defined $ENV{FIPS_MODE};
+ return ok($_[0], @_[1..$#_]);
+}
+
+sub is_nofips {
+ return isnt($_[0], $_[1], @_[2..$#_]) if defined $ENV{FIPS_MODE};
+ return is($_[0], $_[1], @_[2..$#_]);
+}
+
+sub isnt_nofips {
+ return is($_[0], $_[1], @_[2..$#_]) if defined $ENV{FIPS_MODE};
+ return isnt($_[0], $_[1], @_[2..$#_]);
+}
+
+######################################################################
+# private functions. These are never exported.
+
+=head1 ENVIRONMENT
+
+OpenSSL::Test depends on some environment variables.
+
+=over 4
+
+=item B<TOP>
+
+This environment variable is mandatory. C<setup> will check that it's
+defined and that it's a directory that contains the file C<Configure>.
+If this isn't so, C<setup> will C<BAIL_OUT>.
+
+=item B<BIN_D>
+
+If defined, its value should be the directory where the openssl application
+is located. Defaults to C<$TOP/apps> (adapted to the operating system).
+
+=item B<TEST_D>
+
+If defined, its value should be the directory where the test applications
+are located. Defaults to C<$TOP/test> (adapted to the operating system).
+
+=item B<STOPTEST>
+
+If defined, it puts testing in a different mode, where a recipe with
+failures will result in a C<BAIL_OUT> at the end of its run.
+
+=item B<FIPS_MODE>
+
+If defined it indicates that the FIPS provider is being tested. Tests may use
+B<ok_nofips>, B<is_nofips> and B<isnt_nofips> to invert test results
+i.e. Some tests may only work in non FIPS mode.
+
+=back
+
+=cut
+
+sub __env {
+ (my $recipe_datadir = basename($0)) =~ s/\.t$/_data/i;
+
+ $directories{SRCTOP} = abs_path($ENV{SRCTOP} || $ENV{TOP});
+ $directories{BLDTOP} = abs_path($ENV{BLDTOP} || $ENV{TOP});
+ $directories{BLDAPPS} = $ENV{BIN_D} || __bldtop_dir("apps");
+ $directories{SRCAPPS} = __srctop_dir("apps");
+ $directories{BLDFUZZ} = __bldtop_dir("fuzz");
+ $directories{SRCFUZZ} = __srctop_dir("fuzz");
+ $directories{BLDTEST} = $ENV{TEST_D} || __bldtop_dir("test");
+ $directories{SRCTEST} = __srctop_dir("test");
+ $directories{SRCDATA} = __srctop_dir("test", "recipes",
+ $recipe_datadir);
+ $directories{RESULTTOP} = $ENV{RESULT_D} || __bldtop_dir("test-runs");
+ $directories{RESULTS} = catdir($directories{RESULTTOP}, $test_name);
+
+ # Create result directory dynamically
+ rmtree($directories{RESULTS}, { safe => 0, keep_root => 1 });
+ mkpath($directories{RESULTS});
+
+ # All directories are assumed to exist, except for SRCDATA. If that one
+ # doesn't exist, just drop it.
+ delete $directories{SRCDATA} unless -d $directories{SRCDATA};
+
+ push @direnv, "TOP" if $ENV{TOP};
+ push @direnv, "SRCTOP" if $ENV{SRCTOP};
+ push @direnv, "BLDTOP" if $ENV{BLDTOP};
+ push @direnv, "BIN_D" if $ENV{BIN_D};
+ push @direnv, "TEST_D" if $ENV{TEST_D};
+ push @direnv, "RESULT_D" if $ENV{RESULT_D};
+
+ $end_with_bailout = $ENV{STOPTEST} ? 1 : 0;
+};
+
+# __srctop_file and __srctop_dir are helpers to build file and directory
+# names on top of the source directory. They depend on $SRCTOP, and
+# therefore on the proper use of setup() and when needed, indir().
+# __bldtop_file and __bldtop_dir do the same thing but relative to $BLDTOP.
+# __srctop_file and __bldtop_file take the same kind of argument as
+# File::Spec::Functions::catfile.
+# Similarly, __srctop_dir and __bldtop_dir take the same kind of argument
+# as File::Spec::Functions::catdir
+sub __srctop_file {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ my $f = pop;
+ return abs2rel(catfile($directories{SRCTOP},@_,$f),getcwd);
+}
+
+sub __srctop_dir {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ return abs2rel(catdir($directories{SRCTOP},@_), getcwd);
+}
+
+sub __bldtop_file {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ my $f = pop;
+ return abs2rel(catfile($directories{BLDTOP},@_,$f), getcwd);
+}
+
+sub __bldtop_dir {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ return abs2rel(catdir($directories{BLDTOP},@_), getcwd);
+}
+
+# __exeext is a function that returns the platform dependent file extension
+# for executable binaries, or the value of the environment variable $EXE_EXT
+# if that one is defined.
+sub __exeext {
+ my $ext = "";
+ if ($^O eq "VMS" ) { # VMS
+ $ext = ".exe";
+ } elsif ($^O eq "MSWin32") { # Windows
+ $ext = ".exe";
+ }
+ return $ENV{"EXE_EXT"} || $ext;
+}
+
+# __test_file, __apps_file and __fuzz_file return the full path to a file
+# relative to the test/, apps/ or fuzz/ directory in the build tree or the
+# source tree, depending on where the file is found. Note that when looking
+# in the build tree, the file name with an added extension is looked for, if
+# an extension is given. The intent is to look for executable binaries (in
+# the build tree) or possibly scripts (in the source tree).
+# These functions all take the same arguments as File::Spec::Functions::catfile,
+# *plus* a mandatory extension argument. This extension argument can be undef,
+# and is ignored in such a case.
+sub __test_file {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ my $e = pop || "";
+ my $f = pop;
+ my $out = catfile($directories{BLDTEST},@_,$f . $e);
+ $out = catfile($directories{SRCTEST},@_,$f) unless -f $out;
+ return $out;
+}
+
+sub __apps_file {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ my $e = pop || "";
+ my $f = pop;
+ my $out = catfile($directories{BLDAPPS},@_,$f . $e);
+ $out = catfile($directories{SRCAPPS},@_,$f) unless -f $out;
+ return $out;
+}
+
+sub __fuzz_file {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ my $e = pop || "";
+ my $f = pop;
+ my $out = catfile($directories{BLDFUZZ},@_,$f . $e);
+ $out = catfile($directories{SRCFUZZ},@_,$f) unless -f $out;
+ return $out;
+}
+
+sub __data_file {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ return undef unless exists $directories{SRCDATA};
+
+ my $f = pop;
+ return catfile($directories{SRCDATA},@_,$f);
+}
+
+sub __data_dir {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ return undef unless exists $directories{SRCDATA};
+
+ return catdir($directories{SRCDATA},@_);
+}
+
+# __cwd DIR
+# __cwd DIR, OPTS
+#
+# __cwd changes directory to DIR (string) and changes all the relative
+# entries in %directories accordingly. OPTS is an optional series of
+# hash style arguments to alter __cwd's behavior:
+#
+# create = 0|1 The directory we move to is created if 1, not if 0.
+
+sub __cwd {
+ my $dir = catdir(shift);
+ my %opts = @_;
+
+ # If the directory is to be created, we must do that before using
+ # abs_path().
+ $dir = canonpath($dir);
+ if ($opts{create}) {
+ mkpath($dir);
+ }
+
+ my $abscurdir = abs_path(curdir());
+ my $absdir = abs_path($dir);
+ my $reverse = abs2rel($abscurdir, $absdir);
+
+ # PARANOIA: if we're not moving anywhere, we do nothing more
+ if ($abscurdir eq $absdir) {
+ return $reverse;
+ }
+
+ # Do not support a move to a different volume for now. Maybe later.
+ BAIL_OUT("FAILURE: \"$dir\" moves to a different volume, not supported")
+ if $reverse eq $abscurdir;
+
+ # If someone happened to give a directory that leads back to the current,
+ # it's extremely silly to do anything more, so just simulate that we did
+ # move.
+ # In this case, we won't even clean it out, for safety's sake.
+ return "." if $reverse eq "";
+
+ # We are recalculating the directories we keep track of, but need to save
+ # away the result for after having moved into the new directory.
+ my %tmp_directories = ();
+ my %tmp_ENV = ();
+
+ # For each of these directory variables, figure out where they are relative
+ # to the directory we want to move to if they aren't absolute (if they are,
+ # they don't change!)
+ my @dirtags = sort keys %directories;
+ foreach (@dirtags) {
+ if (!file_name_is_absolute($directories{$_})) {
+ my $oldpath = abs_path($directories{$_});
+ my $newpath = abs2rel($oldpath, $absdir);
+ if ($debug) {
+ print STDERR "DEBUG: [dir $_] old path: $oldpath\n";
+ print STDERR "DEBUG: [dir $_] new base: $absdir\n";
+ print STDERR "DEBUG: [dir $_] resulting new path: $newpath\n";
+ }
+ $tmp_directories{$_} = $newpath;
+ }
+ }
+
+ # Treat each environment variable that was used to get us the values in
+ # %directories the same was as the paths in %directories, so any sub
+ # process can use their values properly as well
+ foreach (@direnv) {
+ if (!file_name_is_absolute($ENV{$_})) {
+ my $oldpath = abs_path($ENV{$_});
+ my $newpath = abs2rel($oldpath, $absdir);
+ if ($debug) {
+ print STDERR "DEBUG: [env $_] old path: $oldpath\n";
+ print STDERR "DEBUG: [env $_] new base: $absdir\n";
+ print STDERR "DEBUG: [env $_] resulting new path: $newpath\n";
+ }
+ $tmp_ENV{$_} = $newpath;
+ }
+ }
+
+ # Should we just bail out here as well? I'm unsure.
+ return undef unless chdir($dir);
+
+ # We put back new values carefully. Doing the obvious
+ # %directories = ( %tmp_directories )
+ # will clear out any value that happens to be an absolute path
+ foreach (keys %tmp_directories) {
+ $directories{$_} = $tmp_directories{$_};
+ }
+ foreach (keys %tmp_ENV) {
+ $ENV{$_} = $tmp_ENV{$_};
+ }
+
+ if ($debug) {
+ print STDERR "DEBUG: __cwd(), directories and files:\n";
+ print STDERR " Moving from $abscurdir\n";
+ print STDERR " Moving to $absdir\n";
+ print STDERR "\n";
+ print STDERR " \$directories{BLDTEST} = \"$directories{BLDTEST}\"\n";
+ print STDERR " \$directories{SRCTEST} = \"$directories{SRCTEST}\"\n";
+ print STDERR " \$directories{SRCDATA} = \"$directories{SRCDATA}\"\n"
+ if exists $directories{SRCDATA};
+ print STDERR " \$directories{RESULTS} = \"$directories{RESULTS}\"\n";
+ print STDERR " \$directories{BLDAPPS} = \"$directories{BLDAPPS}\"\n";
+ print STDERR " \$directories{SRCAPPS} = \"$directories{SRCAPPS}\"\n";
+ print STDERR " \$directories{SRCTOP} = \"$directories{SRCTOP}\"\n";
+ print STDERR " \$directories{BLDTOP} = \"$directories{BLDTOP}\"\n";
+ print STDERR "\n";
+ print STDERR " the way back is \"$reverse\"\n";
+ }
+
+ return $reverse;
+}
+
+# __wrap_cmd CMD
+# __wrap_cmd CMD, EXE_SHELL
+#
+# __wrap_cmd "wraps" CMD (string) with a beginning command that makes sure
+# the command gets executed with an appropriate environment. If EXE_SHELL
+# is given, it is used as the beginning command.
+#
+# __wrap_cmd returns a list that should be used to build up a larger list
+# of command tokens, or be joined together like this:
+#
+# join(" ", __wrap_cmd($cmd))
+sub __wrap_cmd {
+ my $cmd = shift;
+ my $exe_shell = shift;
+
+ my @prefix = ();
+
+ if (defined($exe_shell)) {
+ # If $exe_shell is defined, trust it
+ @prefix = ( $exe_shell );
+ } else {
+ # Otherwise, use the standard wrapper
+ my $std_wrapper = __bldtop_file("util", "wrap.pl");
+
+ if ($^O eq "VMS" || $^O eq "MSWin32") {
+ # On VMS and Windows, we run the perl executable explicitly,
+ # with necessary fixups. We might not need that for Windows,
+ # but that depends on if the user has associated the '.pl'
+ # extension with a perl interpreter, so better be safe.
+ @prefix = ( __fixup_prg($^X), $std_wrapper );
+ } else {
+ # Otherwise, we assume Unix semantics, and trust that the #!
+ # line activates perl for us.
+ @prefix = ( $std_wrapper );
+ }
+ }
+
+ return (@prefix, $cmd);
+}
+
+# __fixup_prg PROG
+#
+# __fixup_prg does whatever fixup is needed to execute an executable binary
+# given by PROG (string).
+#
+# __fixup_prg returns a string with the possibly prefixed program path spec.
+sub __fixup_prg {
+ my $prog = shift;
+
+ return join(' ', fixup_cmd($prog));
+}
+
+# __decorate_cmd NUM, CMDARRAYREF
+#
+# __decorate_cmd takes a command number NUM and a command token array
+# CMDARRAYREF, builds up a command string from them and decorates it
+# with necessary redirections.
+# __decorate_cmd returns a list of two strings, one with the command
+# string to actually be used, the other to be displayed for the user.
+# The reason these strings might differ is that we redirect stderr to
+# the null device unless we're verbose and unless the user has
+# explicitly specified a stderr redirection.
+sub __decorate_cmd {
+ BAIL_OUT("Must run setup() first") if (! $test_name);
+
+ my $num = shift;
+ my $cmd = shift;
+ my %opts = @_;
+
+ my $cmdstr = join(" ", @$cmd);
+ my $null = devnull();
+ my $fileornull = sub { $_[0] ? $_[0] : $null; };
+ my $stdin = "";
+ my $stdout = "";
+ my $stderr = "";
+ my $saved_stderr = undef;
+ $stdin = " < ".$fileornull->($opts{stdin}) if exists($opts{stdin});
+ $stdout= " > ".$fileornull->($opts{stdout}) if exists($opts{stdout});
+ $stderr=" 2> ".$fileornull->($opts{stderr}) if exists($opts{stderr});
+
+ my $display_cmd = "$cmdstr$stdin$stdout$stderr";
+
+ # VMS program output escapes TAP::Parser
+ if ($^O eq 'VMS') {
+ $stderr=" 2> ".$null
+ unless $stderr || !$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE};
+ }
+
+ $cmdstr .= "$stdin$stdout$stderr";
+
+ if ($debug) {
+ print STDERR "DEBUG[__decorate_cmd]: \$cmdstr = \"$cmdstr\"\n";
+ print STDERR "DEBUG[__decorate_cmd]: \$display_cmd = \"$display_cmd\"\n";
+ }
+
+ return ($cmdstr, $display_cmd);
+}
+
+=head1 SEE ALSO
+
+L<Test::More>, L<Test::Harness>
+
+=head1 AUTHORS
+
+Richard Levitte E<lt>levitte@openssl.orgE<gt> with assistance and
+inspiration from Andy Polyakov E<lt>appro@openssl.org<gt>.
+
+=cut
+
+no warnings 'redefine';
+sub subtest {
+ $level++;
+
+ Test::More::subtest @_;
+
+ $level--;
+};
+
+1;
diff --git a/util/perl/OpenSSL/Test/Simple.pm b/util/perl/OpenSSL/Test/Simple.pm
new file mode 100644
index 000000000000..7875ca579834
--- /dev/null
+++ b/util/perl/OpenSSL/Test/Simple.pm
@@ -0,0 +1,91 @@
+# Copyright 2016 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
+
+package OpenSSL::Test::Simple;
+
+use strict;
+use warnings;
+
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+$VERSION = "0.2";
+@ISA = qw(Exporter);
+@EXPORT = qw(simple_test);
+
+=head1 NAME
+
+OpenSSL::Test::Simple - a few very simple test functions
+
+=head1 SYNOPSIS
+
+ use OpenSSL::Test::Simple;
+
+ simple_test("my_test_name", "destest", "des");
+
+=head1 DESCRIPTION
+
+Sometimes, the functions in L<OpenSSL::Test> are quite tedious for some
+repetitive tasks. This module provides functions to make life easier.
+You could call them hacks if you wish.
+
+=cut
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+=over 4
+
+=item B<simple_test NAME, PROGRAM, ALGORITHM>
+
+Runs a test named NAME, running the program PROGRAM with no arguments,
+to test the algorithm ALGORITHM.
+
+A complete recipe looks like this:
+
+ use OpenSSL::Test::Simple;
+
+ simple_test("test_bf", "bftest", "bf");
+
+=back
+
+=cut
+
+# args:
+# name (used with setup())
+# algorithm (used to check if it's at all supported)
+# name of binary (the program that does the actual test)
+sub simple_test {
+ my ($name, $prgr, @algos) = @_;
+
+ setup($name);
+
+ if (scalar(disabled(@algos))) {
+ if (scalar(@algos) == 1) {
+ plan skip_all => $algos[0]." is not supported by this OpenSSL build";
+ } else {
+ my $last = pop @algos;
+ plan skip_all => join(", ", @algos)." and $last are not supported by this OpenSSL build";
+ }
+ }
+
+ plan tests => 1;
+
+ ok(run(test([$prgr])), "running $prgr");
+}
+
+=head1 SEE ALSO
+
+L<OpenSSL::Test>
+
+=head1 AUTHORS
+
+Richard Levitte E<lt>levitte@openssl.orgE<gt> with inspiration
+from Rich Salz E<lt>rsalz@openssl.orgE<gt>.
+
+=cut
+
+1;
diff --git a/util/perl/OpenSSL/Test/Utils.pm b/util/perl/OpenSSL/Test/Utils.pm
new file mode 100644
index 000000000000..dcff6a5c9967
--- /dev/null
+++ b/util/perl/OpenSSL/Test/Utils.pm
@@ -0,0 +1,241 @@
+# Copyright 2016-2019 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
+
+package OpenSSL::Test::Utils;
+
+use strict;
+use warnings;
+
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+$VERSION = "0.1";
+@ISA = qw(Exporter);
+@EXPORT = qw(alldisabled anydisabled disabled config available_protocols
+ have_IPv4 have_IPv6);
+
+=head1 NAME
+
+OpenSSL::Test::Utils - test utility functions
+
+=head1 SYNOPSIS
+
+ use OpenSSL::Test::Utils;
+
+ my @tls = available_protocols("tls");
+ my @dtls = available_protocols("dtls");
+ alldisabled("dh", "dsa");
+ anydisabled("dh", "dsa");
+
+ config("fips");
+
+ have_IPv4();
+ have_IPv6();
+
+=head1 DESCRIPTION
+
+This module provides utility functions for the testing framework.
+
+=cut
+
+use OpenSSL::Test qw/:DEFAULT bldtop_file/;
+
+=over 4
+
+=item B<available_protocols STRING>
+
+Returns a list of strings for all the available SSL/TLS versions if
+STRING is "tls", or for all the available DTLS versions if STRING is
+"dtls". Otherwise, it returns the empty list. The strings in the
+returned list can be used with B<alldisabled> and B<anydisabled>.
+
+=item B<alldisabled ARRAY>
+
+=item B<anydisabled ARRAY>
+
+In an array context returns an array with each element set to 1 if the
+corresponding feature is disabled and 0 otherwise.
+
+In a scalar context, alldisabled returns 1 if all of the features in
+ARRAY are disabled, while anydisabled returns 1 if any of them are
+disabled.
+
+=item B<config STRING>
+
+Returns an item from the %config hash in \$TOP/configdata.pm.
+
+=item B<have_IPv4>
+
+=item B<have_IPv6>
+
+Return true if IPv4 / IPv6 is possible to use on the current system.
+
+=back
+
+=cut
+
+our %available_protocols;
+our %disabled;
+our %config;
+my $configdata_loaded = 0;
+
+sub load_configdata {
+ # We eval it so it doesn't run at compile time of this file.
+ # The latter would have bldtop_file() complain that setup() hasn't
+ # been run yet.
+ my $configdata = bldtop_file("configdata.pm");
+ eval { require $configdata;
+ %available_protocols = %configdata::available_protocols;
+ %disabled = %configdata::disabled;
+ %config = %configdata::config;
+ };
+ $configdata_loaded = 1;
+}
+
+# args
+# list of 1s and 0s, coming from check_disabled()
+sub anyof {
+ my $x = 0;
+ foreach (@_) { $x += $_ }
+ return $x > 0;
+}
+
+# args
+# list of 1s and 0s, coming from check_disabled()
+sub allof {
+ my $x = 1;
+ foreach (@_) { $x *= $_ }
+ return $x > 0;
+}
+
+# args
+# list of strings, all of them should be names of features
+# that can be disabled.
+# returns a list of 1s (if the corresponding feature is disabled)
+# and 0s (if it isn't)
+sub check_disabled {
+ return map { exists $disabled{lc $_} ? 1 : 0 } @_;
+}
+
+# Exported functions #################################################
+
+# args:
+# list of features to check
+sub anydisabled {
+ load_configdata() unless $configdata_loaded;
+ my @ret = check_disabled(@_);
+ return @ret if wantarray;
+ return anyof(@ret);
+}
+
+# args:
+# list of features to check
+sub alldisabled {
+ load_configdata() unless $configdata_loaded;
+ my @ret = check_disabled(@_);
+ return @ret if wantarray;
+ return allof(@ret);
+}
+
+# !!! Kept for backward compatibility
+# args:
+# single string
+sub disabled {
+ anydisabled(@_);
+}
+
+sub available_protocols {
+ load_configdata() unless $configdata_loaded;
+ my $protocol_class = shift;
+ if (exists $available_protocols{lc $protocol_class}) {
+ return @{$available_protocols{lc $protocol_class}}
+ }
+ return ();
+}
+
+sub config {
+ load_configdata() unless $configdata_loaded;
+ return $config{$_[0]};
+}
+
+# IPv4 / IPv6 checker
+my $have_IPv4 = -1;
+my $have_IPv6 = -1;
+my $IP_factory;
+sub check_IP {
+ my $listenaddress = shift;
+
+ eval {
+ require IO::Socket::IP;
+ my $s = IO::Socket::IP->new(
+ LocalAddr => $listenaddress,
+ LocalPort => 0,
+ Listen=>1,
+ );
+ $s or die "\n";
+ $s->close();
+ };
+ if ($@ eq "") {
+ return 1;
+ }
+
+ eval {
+ require IO::Socket::INET6;
+ my $s = IO::Socket::INET6->new(
+ LocalAddr => $listenaddress,
+ LocalPort => 0,
+ Listen=>1,
+ );
+ $s or die "\n";
+ $s->close();
+ };
+ if ($@ eq "") {
+ return 1;
+ }
+
+ eval {
+ require IO::Socket::INET;
+ my $s = IO::Socket::INET->new(
+ LocalAddr => $listenaddress,
+ LocalPort => 0,
+ Listen=>1,
+ );
+ $s or die "\n";
+ $s->close();
+ };
+ if ($@ eq "") {
+ return 1;
+ }
+
+ return 0;
+}
+
+sub have_IPv4 {
+ if ($have_IPv4 < 0) {
+ $have_IPv4 = check_IP("127.0.0.1");
+ }
+ return $have_IPv4;
+}
+
+sub have_IPv6 {
+ if ($have_IPv6 < 0) {
+ $have_IPv6 = check_IP("::1");
+ }
+ return $have_IPv6;
+}
+
+=head1 SEE ALSO
+
+L<OpenSSL::Test>
+
+=head1 AUTHORS
+
+Stephen Henson E<lt>steve@openssl.orgE<gt> and
+Richard Levitte E<lt>levitte@openssl.orgE<gt>
+
+=cut
+
+1;
diff --git a/util/perl/OpenSSL/Util.pm b/util/perl/OpenSSL/Util.pm
new file mode 100644
index 000000000000..44e87afee2e3
--- /dev/null
+++ b/util/perl/OpenSSL/Util.pm
@@ -0,0 +1,310 @@
+#! /usr/bin/env perl
+# Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+package OpenSSL::Util;
+
+use strict;
+use warnings;
+use Carp;
+
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+$VERSION = "0.1";
+@ISA = qw(Exporter);
+@EXPORT = qw(cmp_versions quotify1 quotify_l fixup_cmd_elements fixup_cmd
+ dump_data);
+@EXPORT_OK = qw();
+
+=head1 NAME
+
+OpenSSL::Util - small OpenSSL utilities
+
+=head1 SYNOPSIS
+
+ use OpenSSL::Util;
+
+ $versiondiff = cmp_versions('1.0.2k', '3.0.1');
+ # $versiondiff should be -1
+
+ $versiondiff = cmp_versions('1.1.0', '1.0.2a');
+ # $versiondiff should be 1
+
+ $versiondiff = cmp_versions('1.1.1', '1.1.1');
+ # $versiondiff should be 0
+
+=head1 DESCRIPTION
+
+=over
+
+=item B<cmp_versions "VERSION1", "VERSION2">
+
+Compares VERSION1 with VERSION2, paying attention to OpenSSL versioning.
+
+Returns 1 if VERSION1 is greater than VERSION2, 0 if they are equal, and
+-1 if VERSION1 is less than VERSION2.
+
+=back
+
+=cut
+
+# Until we're rid of everything with the old version scheme,
+# we need to be able to handle older style x.y.zl versions.
+# In terms of comparison, the x.y.zl and the x.y.z schemes
+# are compatible... mostly because the latter starts at a
+# new major release with a new major number.
+sub _ossl_versionsplit {
+ my $textversion = shift;
+ return $textversion if $textversion eq '*';
+ my ($major,$minor,$edit,$letter) =
+ $textversion =~ /^(\d+)\.(\d+)\.(\d+)([a-z]{0,2})$/;
+
+ return ($major,$minor,$edit,$letter);
+}
+
+sub cmp_versions {
+ my @a_split = _ossl_versionsplit(shift);
+ my @b_split = _ossl_versionsplit(shift);
+ my $verdict = 0;
+
+ while (@a_split) {
+ # The last part is a letter sequence (or a '*')
+ if (scalar @a_split == 1) {
+ $verdict = $a_split[0] cmp $b_split[0];
+ } else {
+ $verdict = $a_split[0] <=> $b_split[0];
+ }
+ shift @a_split;
+ shift @b_split;
+ last unless $verdict == 0;
+ }
+
+ return $verdict;
+}
+
+# It might be practical to quotify some strings and have them protected
+# from possible harm. These functions primarily quote things that might
+# be interpreted wrongly by a perl eval.
+
+=over 4
+
+=item quotify1 STRING
+
+This adds quotes (") around the given string, and escapes any $, @, \,
+" and ' by prepending a \ to them.
+
+=back
+
+=cut
+
+sub quotify1 {
+ my $s = shift @_;
+ $s =~ s/([\$\@\\"'])/\\$1/g;
+ '"'.$s.'"';
+}
+
+=over 4
+
+=item quotify_l LIST
+
+For each defined element in LIST (i.e. elements that aren't undef), have
+it quotified with 'quotify1'.
+Undefined elements are ignored.
+
+=cut
+
+sub quotify_l {
+ map {
+ if (!defined($_)) {
+ ();
+ } else {
+ quotify1($_);
+ }
+ } @_;
+}
+
+=over 4
+
+=item fixup_cmd_elements LIST
+
+Fixes up the command line elements given by LIST in a platform specific
+manner.
+
+The result of this function is a copy of LIST with strings where quotes and
+escapes have been injected as necessary depending on the content of each
+LIST string.
+
+This can also be used to put quotes around the executable of a command.
+I<This must never ever be done on VMS.>
+
+=back
+
+=cut
+
+sub fixup_cmd_elements {
+ # A formatter for the command arguments, defaulting to the Unix setup
+ my $arg_formatter =
+ sub { $_ = shift;
+ ($_ eq '' || /\s|[\{\}\\\$\[\]\*\?\|\&:;<>]/) ? "'$_'" : $_ };
+
+ if ( $^O eq "VMS") { # VMS setup
+ $arg_formatter = sub {
+ $_ = shift;
+ if ($_ eq '' || /\s|[!"[:upper:]]/) {
+ s/"/""/g;
+ '"'.$_.'"';
+ } else {
+ $_;
+ }
+ };
+ } elsif ( $^O eq "MSWin32") { # MSWin setup
+ $arg_formatter = sub {
+ $_ = shift;
+ if ($_ eq '' || /\s|["\|\&\*\;<>]/) {
+ s/(["\\])/\\$1/g;
+ '"'.$_.'"';
+ } else {
+ $_;
+ }
+ };
+ }
+
+ return ( map { $arg_formatter->($_) } @_ );
+}
+
+=over 4
+
+=item fixup_cmd LIST
+
+This is a sibling of fixup_cmd_elements() that expects the LIST to be a
+complete command line. It does the same thing as fixup_cmd_elements(),
+expect that it treats the first LIST element specially on VMS.
+
+=back
+
+=cut
+
+sub fixup_cmd {
+ return fixup_cmd_elements(@_) unless $^O eq 'VMS';
+
+ # The rest is VMS specific
+ my $prog = shift;
+
+ # On VMS, running random executables without having a command symbol
+ # means running them with the MCR command. This is an old PDP-11
+ # command that stuck around.
+ # This assumes that we're passed the name of an executable. This is a
+ # safe assumption for OpenSSL command lines
+ my $prefix = 'MCR';
+
+ if ($prog =~ /^MCR$/i) {
+ # If the first element is "MCR" (independent of case) already, then
+ # we assume that the program it runs is already written the way it
+ # should, and just grab it.
+ $prog = shift;
+ } else {
+ # If the command itself doesn't have a directory spec, make sure
+ # that there is one. Otherwise, MCR assumes that the program
+ # resides in SYS$SYSTEM:
+ $prog = '[]' . $prog unless $prog =~ /^(?:[\$a-z0-9_]+:)?[<\[]/i;
+ }
+
+ return ( $prefix, $prog, fixup_cmd_elements(@_) );
+}
+
+=item dump_data REF, OPTS
+
+Dump the data from REF into a string that can be evaluated into the same
+data by Perl.
+
+OPTS is the rest of the arguments, expected to be pairs formed with C<< => >>.
+The following OPTS keywords are understood:
+
+=over 4
+
+=item B<delimiters =E<gt> 0 | 1>
+
+Include the outer delimiter of the REF type in the resulting string if C<1>,
+otherwise not.
+
+=item B<indent =E<gt> num>
+
+The indentation of the caller, i.e. an initial value. If not given, there
+will be no indentation at all, and the string will only be one line.
+
+=back
+
+=cut
+
+sub dump_data {
+ my $ref = shift;
+ # Available options:
+ # indent => callers indentation ( undef for no indentation,
+ # an integer otherwise )
+ # delimiters => 1 if outer delimiters should be added
+ my %opts = @_;
+
+ my $indent = $opts{indent} // 1;
+ # Indentation of the whole structure, where applicable
+ my $nlindent1 = defined $opts{indent} ? "\n" . ' ' x $indent : ' ';
+ # Indentation of individual items, where applicable
+ my $nlindent2 = defined $opts{indent} ? "\n" . ' ' x ($indent + 4) : ' ';
+ my %subopts = ();
+
+ $subopts{delimiters} = 1;
+ $subopts{indent} = $opts{indent} + 4 if defined $opts{indent};
+
+ my $product; # Finished product, or reference to a function that
+ # produces a string, given $_
+ # The following are only used when $product is a function reference
+ my $delim_l; # Left delimiter of structure
+ my $delim_r; # Right delimiter of structure
+ my $separator; # Item separator
+ my @items; # Items to iterate over
+
+ if (ref($ref) eq "ARRAY") {
+ if (scalar @$ref == 0) {
+ $product = $opts{delimiters} ? '[]' : '';
+ } else {
+ $product = sub {
+ dump_data(\$_, %subopts)
+ };
+ $delim_l = ($opts{delimiters} ? '[' : '').$nlindent2;
+ $delim_r = $nlindent1.($opts{delimiters} ? ']' : '');
+ $separator = ",$nlindent2";
+ @items = @$ref;
+ }
+ } elsif (ref($ref) eq "HASH") {
+ if (scalar keys %$ref == 0) {
+ $product = $opts{delimiters} ? '{}' : '';
+ } else {
+ $product = sub {
+ quotify1($_) . " => " . dump_data($ref->{$_}, %subopts);
+ };
+ $delim_l = ($opts{delimiters} ? '{' : '').$nlindent2;
+ $delim_r = $nlindent1.($opts{delimiters} ? '}' : '');
+ $separator = ",$nlindent2";
+ @items = sort keys %$ref;
+ }
+ } elsif (ref($ref) eq "SCALAR") {
+ $product = defined $$ref ? quotify1 $$ref : "undef";
+ } else {
+ $product = defined $ref ? quotify1 $ref : "undef";
+ }
+
+ if (ref($product) eq "CODE") {
+ $delim_l . join($separator, map { &$product } @items) . $delim_r;
+ } else {
+ $product;
+ }
+}
+
+=back
+
+=cut
+
+1;
diff --git a/util/perl/OpenSSL/Util/Pod.pm b/util/perl/OpenSSL/Util/Pod.pm
new file mode 100644
index 000000000000..8164e8d75970
--- /dev/null
+++ b/util/perl/OpenSSL/Util/Pod.pm
@@ -0,0 +1,193 @@
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+package OpenSSL::Util::Pod;
+
+use strict;
+use warnings;
+
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+$VERSION = "0.1";
+@ISA = qw(Exporter);
+@EXPORT = qw(extract_pod_info);
+@EXPORT_OK = qw();
+
+=head1 NAME
+
+OpenSSL::Util::Pod - utilities to manipulate .pod files
+
+=head1 SYNOPSIS
+
+ use OpenSSL::Util::Pod;
+
+ my %podinfo = extract_pod_info("foo.pod");
+
+ # or if the file is already opened... Note that this consumes the
+ # remainder of the file.
+
+ my %podinfo = extract_pod_info(\*STDIN);
+
+=head1 DESCRIPTION
+
+=over
+
+=item B<extract_pod_info "FILENAME", HASHREF>
+
+=item B<extract_pod_info "FILENAME">
+
+=item B<extract_pod_info GLOB, HASHREF>
+
+=item B<extract_pod_info GLOB>
+
+Extracts information from a .pod file, given a STRING (file name) or a
+GLOB (a file handle). The result is given back as a hash table.
+
+The additional hash is for extra parameters:
+
+=over
+
+=item B<section =E<gt> N>
+
+The value MUST be a number, and will be the man section number
+to be used with the given .pod file.
+
+=item B<debug =E<gt> 0|1>
+
+If set to 1, extra debug text will be printed on STDERR
+
+=back
+
+=back
+
+=head1 RETURN VALUES
+
+=over
+
+=item B<extract_pod_info> returns a hash table with the following
+items:
+
+=over
+
+=item B<section =E<gt> N>
+
+The man section number this .pod file belongs to. Often the same as
+was given as input.
+
+=item B<names =E<gt> [ "name", ... ]>
+
+All the names extracted from the NAME section.
+
+=item B<contents =E<gt> "...">
+
+The whole contents of the .pod file.
+
+=back
+
+=back
+
+=cut
+
+sub extract_pod_info {
+ my $input = shift;
+ my $defaults_ref = shift || {};
+ my %defaults = ( debug => 0, section => 0, %$defaults_ref );
+ my $fh = undef;
+ my $filename = undef;
+ my $contents;
+
+ # If not a file handle, then it's assume to be a file path (a string)
+ if (ref $input eq "") {
+ $filename = $input;
+ open $fh, $input or die "Trying to read $filename: $!\n";
+ print STDERR "DEBUG: Reading $input\n" if $defaults{debug};
+ $input = $fh;
+ }
+ if (ref $input eq "GLOB") {
+ local $/ = undef;
+ $contents = <$input>;
+ } else {
+ die "Unknown input type";
+ }
+
+ my @invisible_names = ();
+ my %podinfo = ( section => $defaults{section});
+ $podinfo{lastsecttext} = ""; # init needed in case input file is empty
+
+ # Regexp to split a text into paragraphs found at
+ # https://www.perlmonks.org/?node_id=584367
+ # Most of all, \G (continue at last match end) and /g (anchor
+ # this match for \G) are significant
+ foreach (map { /\G((?:(?!\n\n).)*\n+|.+\z)/sg } $contents) {
+ # Remove as many line endings as possible from the end of the paragraph
+ while (s|\R$||) {}
+
+ print STDERR "DEBUG: Paragraph:\n$_\n"
+ if $defaults{debug};
+
+ # Stop reading when we have reached past the NAME section.
+ last if (m|^=head1|
+ && defined $podinfo{lastsect}
+ && $podinfo{lastsect} eq "NAME");
+
+ # Collect the section name
+ if (m|^=head1\s*(.*)|) {
+ $podinfo{lastsect} = $1;
+ $podinfo{lastsect} =~ s/\s+$//;
+ print STDERR "DEBUG: Found new pod section $1\n"
+ if $defaults{debug};
+ print STDERR "DEBUG: Clearing pod section text\n"
+ if $defaults{debug};
+ $podinfo{lastsecttext} = "";
+ }
+
+ # Add invisible names
+ if (m|^=for\s+openssl\s+names:\s*(.*)|s) {
+ my $x = $1;
+ my @tmp = map { map { s/\s+//g; $_ } split(/,/, $_) } $x;
+ print STDERR
+ "DEBUG: Found invisible names: ", join(', ', @tmp), "\n"
+ if $defaults{debug};
+ push @invisible_names, @tmp;
+ }
+
+ next if (m|^=| || m|^\s*$|);
+
+ # Collect the section text
+ print STDERR "DEBUG: accumulating pod section text \"$_\"\n"
+ if $defaults{debug};
+ $podinfo{lastsecttext} .= " " if $podinfo{lastsecttext};
+ $podinfo{lastsecttext} .= $_;
+ }
+
+
+ if (defined $fh) {
+ close $fh;
+ print STDERR "DEBUG: Done reading $filename\n" if $defaults{debug};
+ }
+
+ $podinfo{lastsecttext} =~ s|\s+-\s+.*$||s;
+
+ my @names =
+ map { s/^\s+//g; # Trim prefix blanks
+ s/\s+$//g; # Trim suffix blanks
+ s|/|-|g; # Treat slash as dash
+ $_ }
+ split(m|,|, $podinfo{lastsecttext});
+
+ print STDERR
+ "DEBUG: Collected names are: ",
+ join(', ', @names, @invisible_names), "\n"
+ if $defaults{debug};
+
+ return ( section => $podinfo{section},
+ names => [ @names, @invisible_names ],
+ contents => $contents,
+ filename => $filename );
+}
+
+1;
diff --git a/util/perl/OpenSSL/config.pm b/util/perl/OpenSSL/config.pm
new file mode 100755
index 000000000000..695d6bab0b9f
--- /dev/null
+++ b/util/perl/OpenSSL/config.pm
@@ -0,0 +1,1038 @@
+#! /usr/bin/env perl
+# Copyright 1998-2023 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
+
+# Determine the operating system and run ./Configure. Far descendant from
+# Apache's minarch and GuessOS.
+
+package OpenSSL::config;
+
+use strict;
+use warnings;
+use Getopt::Std;
+use File::Basename;
+use File::Spec;
+use IPC::Cmd;
+use POSIX;
+use Config;
+use Carp;
+
+# These control our behavior.
+my $DRYRUN;
+my $VERBOSE;
+my $WHERE = dirname($0);
+my $WAIT = 1;
+
+# Machine type, etc., used to determine the platform
+my $MACHINE;
+my $RELEASE;
+my $SYSTEM;
+my $VERSION;
+my $CCVENDOR;
+my $CCVER;
+my $CL_ARCH;
+my $GCC_BITS;
+my $GCC_ARCH;
+
+# Some environment variables; they will affect Configure
+my $CONFIG_OPTIONS = $ENV{CONFIG_OPTIONS} // '';
+my $CC;
+my $CROSS_COMPILE;
+
+# For determine_compiler_settings, the list of known compilers
+my @c_compilers = qw(clang gcc cc);
+# Methods to determine compiler version. The expected output is one of
+# MAJOR or MAJOR.MINOR or MAJOR.MINOR.PATCH... or false if the compiler
+# isn't of the given brand.
+# This is a list to ensure that gnu comes last, as we've made it a fallback
+my @cc_version =
+ (
+ clang => sub {
+ return undef unless IPC::Cmd::can_run("$CROSS_COMPILE$CC");
+ my $v = `$CROSS_COMPILE$CC -v 2>&1`;
+ $v =~ m/(?:(?:clang|LLVM) version|.*based on LLVM)\s+([0-9]+\.[0-9]+)/;
+ return $1;
+ },
+ gnu => sub {
+ return undef unless IPC::Cmd::can_run("$CROSS_COMPILE$CC");
+ my $nul = File::Spec->devnull();
+ my $v = `$CROSS_COMPILE$CC -dumpversion 2> $nul`;
+ # Strip off whatever prefix egcs prepends the number with.
+ # Hopefully, this will work for any future prefixes as well.
+ $v =~ s/^[a-zA-Z]*\-//;
+ return $v;
+ },
+ );
+
+# This is what we will set as the target for calling Configure.
+my $options = '';
+
+# Pattern matches against "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}"
+# The patterns are assumed to be wrapped like this: /^(${pattern})$/
+my $guess_patterns = [
+ [ 'A\/UX:.*', 'm68k-apple-aux3' ],
+ [ 'AIX:[3-9]:4:.*', '${MACHINE}-ibm-aix' ],
+ [ 'AIX:.*?:[5-9]:.*', '${MACHINE}-ibm-aix' ],
+ [ 'AIX:.*', '${MACHINE}-ibm-aix3' ],
+ [ 'HI-UX:.*', '${MACHINE}-hi-hiux' ],
+ [ 'HP-UX:.*',
+ sub {
+ my $HPUXVER = $RELEASE;
+ $HPUXVER =~ s/[^.]*.[0B]*//;
+ # HPUX 10 and 11 targets are unified
+ return "${MACHINE}-hp-hpux1x" if $HPUXVER =~ m@1[0-9]@;
+ return "${MACHINE}-hp-hpux";
+ }
+ ],
+ [ 'IRIX:6\..*', 'mips3-sgi-irix' ],
+ [ 'IRIX64:.*', 'mips4-sgi-irix64' ],
+ [ 'Linux:[2-9]\..*', '${MACHINE}-whatever-linux2' ],
+ [ 'Linux:1\..*', '${MACHINE}-whatever-linux1' ],
+ [ 'GNU.*', 'hurd-x86' ],
+ [ 'LynxOS:.*', '${MACHINE}-lynx-lynxos' ],
+ # BSD/OS always says 386
+ [ 'BSD\/OS:4\..*', 'i486-whatever-bsdi4' ],
+ # Order is important, this has to appear before 'BSD\/386:'
+ [ 'BSD/386:.*?:.*?:.*486.*|BSD/OS:.*?:.*?:.*?:.*486.*',
+ sub {
+ my $BSDVAR = `/sbin/sysctl -n hw.model`;
+ return "i586-whatever-bsdi" if $BSDVAR =~ m@Pentium@;
+ return "i386-whatever-bsdi";
+ }
+ ],
+ [ 'BSD\/386:.*|BSD\/OS:.*', '${MACHINE}-whatever-bsdi' ],
+ # Order is important, this has to appear before 'FreeBSD:'
+ [ 'FreeBSD:.*?:.*?:.*386.*',
+ sub {
+ my $VERS = $RELEASE;
+ $VERS =~ s/[-(].*//;
+ my $MACH = `sysctl -n hw.model`;
+ $MACH = "i386" if $MACH =~ m@386@;
+ $MACH = "i486" if $MACH =~ m@486@;
+ $MACH = "i686" if $MACH =~ m@Pentium II@;
+ $MACH = "i586" if $MACH =~ m@Pentium@;
+ $MACH = "$MACHINE" if $MACH !~ /i.86/;
+ my $ARCH = 'whatever';
+ $ARCH = "pc" if $MACH =~ m@i[0-9]86@;
+ return "${MACH}-${ARCH}-freebsd${VERS}";
+ }
+ ],
+ [ 'DragonFly:.*', '${MACHINE}-whatever-dragonfly' ],
+ [ 'FreeBSD:.*', '${MACHINE}-whatever-freebsd' ],
+ [ 'Haiku:.*', '${MACHINE}-whatever-haiku' ],
+ # Order is important, this has to appear before 'NetBSD:.*'
+ [ 'NetBSD:.*?:.*?:.*386.*',
+ sub {
+ my $hw = `/usr/sbin/sysctl -n hw.model || /sbin/sysctl -n hw.model`;
+ $hw =~ s@.*(.)86-class.*@i${1}86@;
+ return "${hw}-whatever-netbsd";
+ }
+ ],
+ [ 'NetBSD:.*', '${MACHINE}-whatever-netbsd' ],
+ [ 'OpenBSD:.*', '${MACHINE}-whatever-openbsd' ],
+ [ 'OpenUNIX:.*', '${MACHINE}-unknown-OpenUNIX${VERSION}' ],
+ [ 'OSF1:.*?:.*?:.*alpha.*',
+ sub {
+ my $OSFMAJOR = $RELEASE;
+ $OSFMAJOR =~ 's/^V([0-9]*)\..*$/\1/';
+ return "${MACHINE}-dec-tru64" if $OSFMAJOR =~ m@[45]@;
+ return "${MACHINE}-dec-osf";
+ }
+ ],
+ [ 'Paragon.*?:.*', 'i860-intel-osf1' ],
+ [ 'Rhapsody:.*', 'ppc-apple-rhapsody' ],
+ [ 'Darwin:.*?:.*?:Power.*', 'ppc-apple-darwin' ],
+ [ 'Darwin:.*', '${MACHINE}-apple-darwin' ],
+ [ 'SunOS:5\..*', '${MACHINE}-whatever-solaris2' ],
+ [ 'SunOS:.*', '${MACHINE}-sun-sunos4' ],
+ [ 'UNIX_System_V:4\..*?:.*', '${MACHINE}-whatever-sysv4' ],
+ [ 'VOS:.*?:.*?:i786', 'i386-stratus-vos' ],
+ [ 'VOS:.*?:.*?:.*', 'hppa1.1-stratus-vos' ],
+ [ '.*?:4.*?:R4.*?:m88k', '${MACHINE}-whatever-sysv4' ],
+ [ 'DYNIX\/ptx:4.*?:.*', '${MACHINE}-whatever-sysv4' ],
+ [ '.*?:4\.0:3\.0:3[34]..(,.*)?', 'i486-ncr-sysv4' ],
+ [ 'ULTRIX:.*', '${MACHINE}-unknown-ultrix' ],
+ [ 'POSIX-BC.*', 'BS2000-siemens-sysv4' ],
+ [ 'machten:.*', '${MACHINE}-tenon-${SYSTEM}' ],
+ [ 'library:.*', '${MACHINE}-ncr-sysv4' ],
+ [ 'ConvexOS:.*?:11\.0:.*', '${MACHINE}-v11-${SYSTEM}' ],
+ [ 'MINGW64.*?:.*?:.*?:x86_64', '${MACHINE}-whatever-mingw64' ],
+ [ 'MINGW.*', '${MACHINE}-whatever-mingw' ],
+ [ 'CYGWIN.*', '${MACHINE}-pc-cygwin' ],
+ [ 'vxworks.*', '${MACHINE}-whatever-vxworks' ],
+
+ # The MACHINE part of the array POSIX::uname() returns on VMS isn't
+ # worth the bits wasted on it. It's better, then, to rely on perl's
+ # %Config, which has a trustworthy item 'archname', especially since
+ # VMS installation aren't multiarch (yet)
+ [ 'OpenVMS:.*', "$Config{archname}-whatever-OpenVMS" ],
+
+ # Note: there's also NEO and NSR, but they are old and unsupported
+ [ 'NONSTOP_KERNEL:.*:NSE-.*?', 'nse-tandem-nsk${RELEASE}' ],
+ [ 'NONSTOP_KERNEL:.*:NSV-.*?', 'nsv-tandem-nsk${RELEASE}' ],
+ [ 'NONSTOP_KERNEL:.*:NSX-.*?', 'nsx-tandem-nsk${RELEASE}' ],
+
+ [ sub { -d '/usr/apollo' }, 'whatever-apollo-whatever' ],
+];
+
+# Run a command, return true if exit zero else false.
+# Multiple args are glued together into a pipeline.
+# Name comes from OpenSSL tests, often written as "ok(run(...."
+sub okrun {
+ my $command = join(' | ', @_);
+ my $status = system($command) >> 8;
+ return $status == 0;
+}
+
+# Give user a chance to abort/interrupt if interactive if interactive.
+sub maybe_abort {
+ if ( $WAIT && -t 1 ) {
+ eval {
+ local $SIG{ALRM} = sub { die "Timeout"; };
+ local $| = 1;
+ alarm(5);
+ print "You have about five seconds to abort: ";
+ my $ignored = <STDIN>;
+ alarm(0);
+ };
+ print "\n" if $@ =~ /Timeout/;
+ }
+}
+
+# Look for ISC/SCO with its unique uname program
+sub is_sco_uname {
+ return undef unless IPC::Cmd::can_run('uname');
+
+ open UNAME, "uname -X 2>/dev/null|" or return '';
+ my $line = "";
+ my $os = "";
+ while ( <UNAME> ) {
+ chop;
+ $line = $_ if m@^Release@;
+ $os = $_ if m@^System@;
+ }
+ close UNAME;
+
+ return undef if $line eq '' or $os eq 'System = SunOS';
+
+ my @fields = split(/\s+/, $line);
+ return $fields[2];
+}
+
+sub get_sco_type {
+ my $REL = shift;
+
+ if ( -f "/etc/kconfig" ) {
+ return "${MACHINE}-whatever-isc4" if $REL eq '4.0' || $REL eq '4.1';
+ } else {
+ return "whatever-whatever-sco3" if $REL eq '3.2v4.2';
+ return "whatever-whatever-sco5" if $REL =~ m@3\.2v5\.0.*@;
+ if ( $REL eq "4.2MP" ) {
+ return "whatever-whatever-unixware20" if $VERSION =~ m@2\.0.*@;
+ return "whatever-whatever-unixware21" if $VERSION =~ m@2\.1.*@;
+ return "whatever-whatever-unixware2" if $VERSION =~ m@2.*@;
+ }
+ return "whatever-whatever-unixware1" if $REL eq "4.2";
+ if ( $REL =~ m@5.*@ ) {
+ # We hardcode i586 in place of ${MACHINE} for the following
+ # reason: even though Pentium is minimum requirement for
+ # platforms in question, ${MACHINE} gets always assigned to
+ # i386. This means i386 gets passed to Configure, which will
+ # cause bad assembler code to be generated.
+ return "i586-sco-unixware7" if $VERSION =~ m@[678].*@;
+ }
+ }
+}
+
+# Return the cputype-vendor-osversion
+sub guess_system {
+ ($SYSTEM, undef, $RELEASE, $VERSION, $MACHINE) = POSIX::uname();
+ my $sys = "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}";
+
+ # Special-cases for ISC, SCO, Unixware
+ my $REL = is_sco_uname();
+ if ( defined $REL ) {
+ my $result = get_sco_type($REL);
+ return eval "\"$result\"" if $result ne '';
+ }
+
+ # Now pattern-match
+
+ # Simple cases
+ foreach my $tuple ( @$guess_patterns ) {
+ my $pat = @$tuple[0];
+ my $check = ref $pat eq 'CODE' ? $pat->($sys) : $sys =~ /^(${pat})$/;
+ next unless $check;
+
+ my $result = @$tuple[1];
+ $result = $result->() if ref $result eq 'CODE';
+ return eval "\"$result\"";
+ }
+
+ # Oh well.
+ return "${MACHINE}-whatever-${SYSTEM}";
+}
+
+# We would use List::Util::pair() for this... unfortunately, that function
+# only appeared in perl v5.19.3, and we claim to support perl v5.10 and on.
+# Therefore, we implement a quick cheap variant of our own.
+sub _pairs (@) {
+ croak "Odd number of arguments" if @_ & 1;
+
+ my @pairlist = ();
+
+ while (@_) {
+ my $x = [ shift, shift ];
+ push @pairlist, $x;
+ }
+ return @pairlist;
+}
+
+# Figure out CC, GCCVAR, etc.
+sub determine_compiler_settings {
+ # Make a copy and don't touch it. That helps determine if we're finding
+ # the compiler here (false), or if it was set by the user (true.
+ my $cc = $CC;
+
+ # Set certain default
+ $CCVER = 0; # Unknown
+ $CCVENDOR = ''; # Dunno, don't care (unless found later)
+
+ # Find a compiler if we don't already have one
+ if ( ! $cc ) {
+ foreach (@c_compilers) {
+ next unless IPC::Cmd::can_run("$CROSS_COMPILE$_");
+ $CC = $_;
+ last;
+ }
+ }
+
+ if ( $CC ) {
+ # Find the compiler vendor and version number for certain compilers
+ foreach my $pair (_pairs @cc_version) {
+ # Try to get the version number.
+ # Failure gets us undef or an empty string
+ my ( $k, $v ) = @$pair;
+ $v = $v->();
+
+ # If we got a version number, process it
+ if ($v) {
+ $v =~ s/[^.]*.0*// if $SYSTEM eq 'HP-UX';
+ $CCVENDOR = $k;
+
+ # The returned version is expected to be one of
+ #
+ # MAJOR
+ # MAJOR.MINOR
+ # MAJOR.MINOR.{whatever}
+ #
+ # We don't care what comes after MAJOR.MINOR. All we need is
+ # to have them calculated into a single number, using this
+ # formula:
+ #
+ # MAJOR * 100 + MINOR
+ # Here are a few examples of what we should get:
+ #
+ # 2.95.1 => 295
+ # 3.1 => 301
+ # 9 => 900
+ my @numbers = split /\./, $v;
+ my @factors = (100, 1);
+ while (@numbers && @factors) {
+ $CCVER += shift(@numbers) * shift(@factors)
+ }
+ last;
+ }
+ }
+ }
+
+ # Vendor specific overrides, only if we didn't determine the compiler here
+ if ( ! $cc ) {
+ if ( $SYSTEM eq 'OpenVMS' ) {
+ my $v = `CC/VERSION NLA0:`;
+ if ($? == 0) {
+ # The normal releases have a version number prefixed with a V.
+ # However, other letters have been seen as well (for example X),
+ # and it's documented that HP (now VSI) reserve the letter W, X,
+ # Y and Z for their own uses.
+ my ($vendor, $arch, $version, $extra) =
+ ( $v =~ m/^
+ ([A-Z]+) # Usually VSI
+ \s+ C
+ (?:\s+(.*?))? # Possible build arch
+ \s+ [VWXYZ]([0-9\.-]+) # Version
+ (?:\s+\((.*?)\))? # Possible extra data
+ \s+ on
+ /x );
+ my ($major, $minor, $patch) =
+ ( $version =~ m/^([0-9]+)\.([0-9]+)-0*?(0|[1-9][0-9]*)$/ );
+ $CC = 'CC';
+ $CCVENDOR = $vendor;
+ $CCVER = ( $major * 100 + $minor ) * 100 + $patch;
+ }
+ }
+
+ if ( ${SYSTEM} eq 'AIX' ) {
+ # favor vendor cc over gcc
+ if (IPC::Cmd::can_run('cc')) {
+ $CC = 'cc';
+ $CCVENDOR = ''; # Determine later
+ $CCVER = 0;
+ }
+ }
+
+ if ( $SYSTEM eq "SunOS" ) {
+ # check for Oracle Developer Studio, expected output is "cc: blah-blah C x.x blah-blah"
+ my $v = `(cc -V 2>&1) 2>/dev/null | egrep -e '^cc: .* C [0-9]\.[0-9]'`;
+ my @numbers =
+ ( $v =~ m/^.* C ([0-9]+)\.([0-9]+) .*/ );
+ my @factors = (100, 1);
+ $v = 0;
+ while (@numbers && @factors) {
+ $v += shift(@numbers) * shift(@factors)
+ }
+
+ if ($v > 500) {
+ $CC = 'cc';
+ $CCVENDOR = 'sun';
+ $CCVER = $v;
+ }
+ }
+
+ # 'Windows NT' is the system name according to POSIX::uname()!
+ if ( $SYSTEM eq "Windows NT" ) {
+ # favor vendor cl over gcc
+ if (IPC::Cmd::can_run('cl')) {
+ $CC = 'cl';
+ $CCVENDOR = ''; # Determine later
+ $CCVER = 0;
+
+ my $v = `cl 2>&1`;
+ if ( $v =~ /Microsoft .* Version ([0-9\.]+) for (x86|x64|ARM|ia64)/ ) {
+ $CCVER = $1;
+ $CL_ARCH = $2;
+ }
+ }
+ }
+ }
+
+ # If no C compiler has been determined at this point, we die. Hard.
+ die <<_____
+ERROR!
+No C compiler found, please specify one with the environment variable CC,
+or configure with an explicit configuration target.
+_____
+ unless $CC;
+
+ # On some systems, we assume a cc vendor if it's not already determined
+
+ if ( ! $CCVENDOR ) {
+ $CCVENDOR = 'aix' if $SYSTEM eq 'AIX';
+ $CCVENDOR = 'sun' if $SYSTEM eq 'SunOS';
+ }
+
+ # Some systems need to know extra details
+
+ if ( $SYSTEM eq "HP-UX" && $CCVENDOR eq 'gnu' ) {
+ # By default gcc is a ILP32 compiler (with long long == 64).
+ $GCC_BITS = "32";
+ if ( $CCVER >= 300 ) {
+ # PA64 support only came in with gcc 3.0.x.
+ # We check if the preprocessor symbol __LP64__ is defined.
+ if ( okrun('echo __LP64__',
+ "$CC -v -E -x c - 2>/dev/null",
+ 'grep "^__LP64__" 2>&1 >/dev/null') ) {
+ # __LP64__ has slipped through, it therefore is not defined
+ } else {
+ $GCC_BITS = '64';
+ }
+ }
+ }
+
+ if ( $SYSTEM eq "SunOS" && $CCVENDOR eq 'gnu' ) {
+ if ( $CCVER >= 300 ) {
+ # 64-bit ABI isn't officially supported in gcc 3.0, but seems
+ # to be working; at the very least 'make test' passes.
+ if ( okrun("$CC -v -E -x c /dev/null 2>&1",
+ 'grep __arch64__ >/dev/null') ) {
+ $GCC_ARCH = "-m64"
+ } else {
+ $GCC_ARCH = "-m32"
+ }
+ }
+ }
+
+ if ($VERBOSE) {
+ my $vendor = $CCVENDOR ? $CCVENDOR : "(undetermined)";
+ my $version = $CCVER ? $CCVER : "(undetermined)";
+ print "C compiler: $CC\n";
+ print "C compiler vendor: $vendor\n";
+ print "C compiler version: $version\n";
+ }
+}
+
+my $map_patterns =
+ [ [ 'uClinux.*64.*', { target => 'uClinux-dist64' } ],
+ [ 'uClinux.*', { target => 'uClinux-dist' } ],
+ [ 'mips3-sgi-irix', { target => 'irix-mips3' } ],
+ [ 'mips4-sgi-irix64',
+ sub {
+ print <<EOF;
+WARNING! To build 64-bit package, do this:
+ $WHERE/Configure irix64-mips4-$CC
+EOF
+ maybe_abort();
+ return { target => "irix-mips3" };
+ }
+ ],
+ [ 'ppc-apple-rhapsody', { target => "rhapsody-ppc" } ],
+ [ 'ppc-apple-darwin.*',
+ sub {
+ my $KERNEL_BITS = $ENV{KERNEL_BITS} // '';
+ my $ISA64 = `sysctl -n hw.optional.64bitops 2>/dev/null`;
+ if ( $ISA64 == 1 && $KERNEL_BITS eq '' ) {
+ print <<EOF;
+WARNING! To build 64-bit package, do this:
+ $WHERE/Configure darwin64-ppc-cc
+EOF
+ maybe_abort();
+ }
+ return { target => "darwin64-ppc" }
+ if $ISA64 == 1 && $KERNEL_BITS eq '64';
+ return { target => "darwin-ppc" };
+ }
+ ],
+ [ 'i.86-apple-darwin.*',
+ sub {
+ my $KERNEL_BITS = $ENV{KERNEL_BITS} // '';
+ my $ISA64 = `sysctl -n hw.optional.x86_64 2>/dev/null`;
+ if ( $ISA64 == 1 && $KERNEL_BITS eq '' ) {
+ print <<EOF;
+WARNING! To build 64-bit package, do this:
+ KERNEL_BITS=64 $WHERE/Configure \[\[ options \]\]
+EOF
+ maybe_abort();
+ }
+ return { target => "darwin64-x86_64" }
+ if $ISA64 == 1 && $KERNEL_BITS eq '64';
+ return { target => "darwin-i386" };
+ }
+ ],
+ [ 'x86_64-apple-darwin.*',
+ sub {
+ my $KERNEL_BITS = $ENV{KERNEL_BITS} // '';
+ # macOS >= 10.15 is 64-bit only
+ my $SW_VERS = `sw_vers -productVersion 2>/dev/null`;
+ if ($SW_VERS =~ /^(\d+)\.(\d+)\.(\d+)$/) {
+ if ($1 > 10 || ($1 == 10 && $2 >= 15)) {
+ die "32-bit applications not supported on macOS 10.15 or later\n" if $KERNEL_BITS eq '32';
+ return { target => "darwin64-x86_64" };
+ }
+ }
+ return { target => "darwin-i386" } if $KERNEL_BITS eq '32';
+
+ print <<EOF;
+WARNING! To build 32-bit package, do this:
+ KERNEL_BITS=32 $WHERE/Configure \[\[ options \]\]
+EOF
+ maybe_abort();
+ return { target => "darwin64-x86_64" };
+ }
+ ],
+ [ 'arm64-apple-darwin.*', { target => "darwin64-arm64" } ],
+ [ 'armv6\+7-.*-iphoneos',
+ { target => "iphoneos-cross",
+ cflags => [ qw(-arch armv6 -arch armv7) ],
+ cxxflags => [ qw(-arch armv6 -arch armv7) ] }
+ ],
+ [ 'arm64-.*-iphoneos|.*-.*-ios64',
+ { target => "ios64-cross" }
+ ],
+ [ '.*-.*-iphoneos',
+ sub { return { target => "iphoneos-cross",
+ cflags => [ "-arch ${MACHINE}" ],
+ cxxflags => [ "-arch ${MACHINE}" ] }; }
+ ],
+ [ 'alpha-.*-linux2.*',
+ sub {
+ my $ISA = `awk '/cpu model/{print \$4;exit(0);}' /proc/cpuinfo`;
+ $ISA //= 'generic';
+ my %config = ();
+ if ( $CCVENDOR eq "gnu" ) {
+ if ( $ISA =~ 'EV5|EV45' ) {
+ %config = ( cflags => [ '-mcpu=ev5' ],
+ cxxflags => [ '-mcpu=ev5' ] );
+ } elsif ( $ISA =~ 'EV56|PCA56' ) {
+ %config = ( cflags => [ '-mcpu=ev56' ],
+ cxxflags => [ '-mcpu=ev56' ] );
+ } else {
+ %config = ( cflags => [ '-mcpu=ev6' ],
+ cxxflags => [ '-mcpu=ev6' ] );
+ }
+ }
+ return { target => "linux-alpha",
+ %config };
+ }
+ ],
+ [ 'ppc64-.*-linux2',
+ sub {
+ my $KERNEL_BITS = $ENV{KERNEL_BITS} // '';
+ if ( $KERNEL_BITS eq '' ) {
+ print <<EOF;
+WARNING! To build 64-bit package, do this:
+ $WHERE/Configure linux-ppc64
+EOF
+ maybe_abort();
+ }
+ return { target => "linux-ppc64" } if $KERNEL_BITS eq '64';
+
+ my %config = ();
+ if (!okrun('echo __LP64__',
+ 'gcc -E -x c - 2>/dev/null',
+ 'grep "^__LP64__" 2>&1 >/dev/null') ) {
+ %config = ( cflags => [ '-m32' ],
+ cxxflags => [ '-m32' ] );
+ }
+ return { target => "linux-ppc",
+ %config };
+ }
+ ],
+ [ 'ppc64le-.*-linux2', { target => "linux-ppc64le" } ],
+ [ 'ppc-.*-linux2', { target => "linux-ppc" } ],
+ [ 'mips64.*-*-linux2',
+ sub {
+ print <<EOF;
+WARNING! To build 64-bit package, do this:
+ $WHERE/Configure linux64-mips64
+EOF
+ maybe_abort();
+ return { target => "linux-mips64" };
+ }
+ ],
+ [ 'mips.*-.*-linux2', { target => "linux-mips32" } ],
+ [ 'ppc60x-.*-vxworks.*', { target => "vxworks-ppc60x" } ],
+ [ 'ppcgen-.*-vxworks.*', { target => "vxworks-ppcgen" } ],
+ [ 'pentium-.*-vxworks.*', { target => "vxworks-pentium" } ],
+ [ 'simlinux-.*-vxworks.*', { target => "vxworks-simlinux" } ],
+ [ 'mips-.*-vxworks.*', { target => "vxworks-mips" } ],
+ [ 'e2k-.*-linux.*', { target => "linux-generic64",
+ defines => [ 'L_ENDIAN' ] } ],
+ [ 'ia64-.*-linux.', { target => "linux-ia64" } ],
+ [ 'sparc64-.*-linux2',
+ sub {
+ print <<EOF;
+WARNING! If you *know* that your GNU C supports 64-bit/V9 ABI and you
+ want to build 64-bit library, do this:
+ $WHERE/Configure linux64-sparcv9
+EOF
+ maybe_abort();
+ return { target => "linux-sparcv9" };
+ }
+ ],
+ [ 'sparc-.*-linux2',
+ sub {
+ my $KARCH = `awk '/^type/{print \$3;exit(0);}' /proc/cpuinfo`;
+ $KARCH //= "sun4";
+ return { target => "linux-sparcv9" } if $KARCH =~ 'sun4u.*';
+ return { target => "linux-sparcv8" } if $KARCH =~ 'sun4[md]';
+ return { target => "linux-generic32",
+ defines => [ 'L_ENDIAN' ] };
+ }
+ ],
+ [ 'parisc.*-.*-linux2',
+ sub {
+ # 64-bit builds under parisc64 linux are not supported and
+ # compiler is expected to generate 32-bit objects...
+ my $CPUARCH =
+ `awk '/cpu family/{print substr(\$5,1,3); exit(0);}' /proc/cpuinfo`;
+ my $CPUSCHEDULE =
+ `awk '/^cpu.[ ]*: PA/{print substr(\$3,3); exit(0);}' /proc/cpuinfo`;
+ # TODO XXX Model transformations
+ # 0. CPU Architecture for the 1.1 processor has letter suffixes.
+ # We strip that off assuming no further arch. identification
+ # will ever be used by GCC.
+ # 1. I'm most concerned about whether is a 7300LC is closer to a
+ # 7100 versus a 7100LC.
+ # 2. The variant 64-bit processors cause concern should GCC support
+ # explicit schedulers for these chips in the future.
+ # PA7300LC -> 7100LC (1.1)
+ # PA8200 -> 8000 (2.0)
+ # PA8500 -> 8000 (2.0)
+ # PA8600 -> 8000 (2.0)
+ $CPUSCHEDULE =~ s/7300LC/7100LC/;
+ $CPUSCHEDULE =~ s/8.00/8000/;
+ return
+ { target => "linux-generic32",
+ defines => [ 'B_ENDIAN' ],
+ cflags => [ "-mschedule=$CPUSCHEDULE", "-march=$CPUARCH" ],
+ cxxflags => [ "-mschedule=$CPUSCHEDULE", "-march=$CPUARCH" ]
+ };
+ }
+ ],
+ [ 'armv[1-3].*-.*-linux2', { target => "linux-generic32" } ],
+ [ 'armv[7-9].*-.*-linux2', { target => "linux-armv4",
+ cflags => [ '-march=armv7-a' ],
+ cxxflags => [ '-march=armv7-a' ] } ],
+ [ 'arm.*-.*-linux2', { target => "linux-armv4" } ],
+ [ 'aarch64-.*-linux2', { target => "linux-aarch64" } ],
+ [ 'sh.*b-.*-linux2', { target => "linux-generic32",
+ defines => [ 'B_ENDIAN' ] } ],
+ [ 'sh.*-.*-linux2', { target => "linux-generic32",
+ defines => [ 'L_ENDIAN' ] } ],
+ [ 'm68k.*-.*-linux2', { target => "linux-generic32",
+ defines => [ 'B_ENDIAN' ] } ],
+ [ 's390-.*-linux2', { target => "linux-generic32",
+ defines => [ 'B_ENDIAN' ] } ],
+ [ 's390x-.*-linux2',
+ sub {
+ # Disabled until a glibc bug is fixed; see Configure.
+ if (0
+ || okrun('egrep -e \'^features.* highgprs\' /proc/cpuinfo >/dev/null') )
+ {
+ print <<EOF;
+WARNING! To build "highgprs" 32-bit package, do this:
+ $WHERE/Configure linux32-s390x
+EOF
+ maybe_abort();
+ }
+ return { target => "linux64-s390x" };
+ }
+ ],
+ [ 'x86_64-.*-linux.',
+ sub {
+ return { target => "linux-x32" }
+ if okrun("$CC -dM -E -x c /dev/null 2>&1",
+ 'grep -q ILP32 >/dev/null');
+ return { target => "linux-x86_64" };
+ }
+ ],
+ [ '.*86-.*-linux2',
+ sub {
+ # On machines where the compiler understands -m32, prefer a
+ # config target that uses it
+ return { target => "linux-x86" }
+ if okrun("$CC -m32 -E -x c /dev/null >/dev/null 2>&1");
+ return { target => "linux-elf" };
+ }
+ ],
+ [ '.*86-.*-linux1', { target => "linux-aout" } ],
+ [ 'riscv64-.*-linux.', { target => "linux64-riscv64" } ],
+ [ '.*-.*-linux.', { target => "linux-generic32" } ],
+ [ 'sun4[uv].*-.*-solaris2',
+ sub {
+ my $KERNEL_BITS = $ENV{KERNEL_BITS};
+ my $ISA64 = `isainfo 2>/dev/null | grep sparcv9`;
+ my $KB = $KERNEL_BITS // '64';
+ if ( $ISA64 ne "" && $KB eq '64' ) {
+ if ( $CCVENDOR eq "sun" && $CCVER >= 500 ) {
+ print <<EOF;
+WARNING! To build 32-bit package, do this:
+ $WHERE/Configure solaris-sparcv9-cc
+EOF
+ maybe_abort();
+ } elsif ( $CCVENDOR eq "gnu" && $GCC_ARCH eq "-m64" ) {
+ # $GCC_ARCH denotes default ABI chosen by compiler driver
+ # (first one found on the $PATH). I assume that user
+ # expects certain consistency with the rest of his builds
+ # and therefore switch over to 64-bit. <appro>
+ print <<EOF;
+WARNING! To build 32-bit package, do this:
+ $WHERE/Configure solaris-sparcv9-gcc
+EOF
+ maybe_abort();
+ return { target => "solaris64-sparcv9-gcc" };
+ } elsif ( $GCC_ARCH eq "-m32" ) {
+ print <<EOF;
+NOTICE! If you *know* that your GNU C supports 64-bit/V9 ABI and you wish
+ to build 64-bit library, do this:
+ $WHERE/Configure solaris64-sparcv9-gcc
+EOF
+ maybe_abort();
+ }
+ }
+ return { target => "solaris64-sparcv9-cc" }
+ if $ISA64 ne "" && $KB eq '64';
+ return { target => "solaris-sparcv9-cc" };
+ }
+ ],
+ [ 'sun4m-.*-solaris2', { target => "solaris-sparcv8" } ],
+ [ 'sun4d-.*-solaris2', { target => "solaris-sparcv8" } ],
+ [ 'sun4.*-.*-solaris2', { target => "solaris-sparcv7" } ],
+ [ '.*86.*-.*-solaris2',
+ sub {
+ my $KERNEL_BITS = $ENV{KERNEL_BITS};
+ my $ISA64 = `isainfo 2>/dev/null | grep amd64`;
+ my $KB = $KERNEL_BITS // '64';
+ if ($ISA64 ne "" && $KB eq '64') {
+ return { target => "solaris64-x86_64-gcc" } if $CCVENDOR eq "gnu";
+ return { target => "solaris64-x86_64-cc" };
+ }
+ my $REL = uname('-r');
+ $REL =~ s/5\.//;
+ my @tmp_disable = ();
+ push @tmp_disable, 'sse2' if int($REL) < 10;
+ #There is no solaris-x86-cc target
+ return { target => "solaris-x86-gcc",
+ disable => [ @tmp_disable ] };
+ }
+ ],
+ # We don't have any sunos target in Configurations/*.conf, so why here?
+ [ '.*-.*-sunos4', { target => "sunos" } ],
+ [ '.*86.*-.*-bsdi4', { target => "BSD-x86-elf",
+ lflags => [ '-ldl' ],
+ disable => [ 'sse2' ] } ],
+ [ 'alpha.*-.*-.*bsd.*', { target => "BSD-generic64",
+ defines => [ 'L_ENDIAN' ] } ],
+ [ 'powerpc64-.*-.*bsd.*', { target => "BSD-generic64",
+ defines => [ 'B_ENDIAN' ] } ],
+ [ 'riscv64-.*-.*bsd.*', { target => "BSD-riscv64" } ],
+ [ 'sparc64-.*-.*bsd.*', { target => "BSD-sparc64" } ],
+ [ 'ia64-.*-.*bsd.*', { target => "BSD-ia64" } ],
+ [ 'x86_64-.*-dragonfly.*', { target => "BSD-x86_64" } ],
+ [ 'amd64-.*-.*bsd.*', { target => "BSD-x86_64" } ],
+ [ 'arm64-.*-.*bsd.*', { target => "BSD-aarch64" } ],
+ [ '.*86.*-.*-.*bsd.*',
+ sub {
+ # mimic ld behaviour when it's looking for libc...
+ my $libc;
+ if ( -l "/usr/lib/libc.so" ) {
+ $libc = "/usr/lib/libc.so";
+ } else {
+ # ld searches for highest libc.so.* and so do we
+ $libc =
+ `(ls /usr/lib/libc.so.* /lib/libc.so.* | tail -1) 2>/dev/null`;
+ }
+ my $what = `file -L $libc 2>/dev/null`;
+ return { target => "BSD-x86-elf" } if $what =~ /ELF/;
+ return { target => "BSD-x86",
+ disable => [ 'sse2' ] };
+ }
+ ],
+ [ '.*-.*-.*bsd.*', { target => "BSD-generic32" } ],
+ [ 'x86_64-.*-haiku', { target => "haiku-x86_64" } ],
+ [ '.*-.*-haiku', { target => "haiku-x86" } ],
+ [ '.*-.*-osf', { target => "osf1-alpha" } ],
+ [ '.*-.*-tru64', { target => "tru64-alpha" } ],
+ [ '.*-.*-[Uu]nix[Ww]are7',
+ sub {
+ return { target => "unixware-7",
+ disable => [ 'sse2' ] } if $CCVENDOR eq "gnu";
+ return { target => "unixware-7",
+ defines => [ '__i386__' ] };
+ }
+ ],
+ [ '.*-.*-[Uu]nix[Ww]are20.*', { target => "unixware-2.0",
+ disable => [ 'sse2', 'sha512' ] } ],
+ [ '.*-.*-[Uu]nix[Ww]are21.*', { target => "unixware-2.1",
+ disable => [ 'sse2', 'sha512' ] } ],
+ [ '.*-.*-vos', { target => "vos",
+ disable => [ 'threads', 'shared', 'asm',
+ 'dso' ] } ],
+ [ 'BS2000-siemens-sysv4', { target => "BS2000-OSD" } ],
+ [ 'i[3456]86-.*-cygwin', { target => "Cygwin-x86" } ],
+ [ '.*-.*-cygwin',
+ sub { return { target => "Cygwin-${MACHINE}" } } ],
+ [ 'x86-.*-android|i.86-.*-android', { target => "android-x86" } ],
+ [ 'armv[7-9].*-.*-android', { target => "android-armeabi",
+ cflags => [ '-march=armv7-a' ],
+ cxxflags => [ '-march=armv7-a' ] } ],
+ [ 'arm.*-.*-android', { target => "android-armeabi" } ],
+ [ '.*-hpux1.*',
+ sub {
+ my $KERNEL_BITS = $ENV{KERNEL_BITS};
+ my %common_return = ( defines => [ '_REENTRANT' ] );
+ $KERNEL_BITS ||= `getconf KERNEL_BITS 2>/dev/null` // '32';
+ # See <sys/unistd.h> for further info on CPU_VERSION.
+ my $CPU_VERSION = `getconf CPU_VERSION 2>/dev/null` // 0;
+ if ( $CPU_VERSION >= 768 ) {
+ # IA-64 CPU
+ return { target => "hpux64-ia64",
+ %common_return }
+ if $KERNEL_BITS eq '64' && ! $CCVENDOR;
+ return { target => "hpux-ia64",
+ %common_return };
+ }
+ if ( $CPU_VERSION >= 532 ) {
+ # PA-RISC 2.x CPU
+ # PA-RISC 2.0 is no longer supported as separate 32-bit
+ # target. This is compensated for by run-time detection
+ # in most critical assembly modules and taking advantage
+ # of 2.0 architecture in PA-RISC 1.1 build.
+ my $target = ($CCVENDOR eq "gnu" && $GCC_BITS eq '64')
+ ? "hpux64-parisc2"
+ : "hpux-parisc1_1";
+ if ( $KERNEL_BITS eq '64' && ! $CCVENDOR ) {
+ print <<EOF;
+WARNING! To build 64-bit package, do this:
+ $WHERE/Configure hpux64-parisc2-cc
+EOF
+ maybe_abort();
+ }
+ return { target => $target,
+ %common_return };
+ }
+ # PA-RISC 1.1+ CPU?
+ return { target => "hpux-parisc1_1",
+ %common_return } if $CPU_VERSION >= 528;
+ # PA-RISC 1.0 CPU
+ return { target => "hpux-parisc",
+ %common_return } if $CPU_VERSION >= 523;
+ # Motorola(?) CPU
+ return { target => "hpux",
+ %common_return };
+ }
+ ],
+ [ '.*-hpux', { target => "hpux-parisc" } ],
+ [ '.*-aix',
+ sub {
+ my %config = ();
+ my $KERNEL_BITS = $ENV{KERNEL_BITS};
+ $KERNEL_BITS ||= `getconf KERNEL_BITMODE 2>/dev/null`;
+ $KERNEL_BITS ||= '32';
+ my $OBJECT_MODE = $ENV{OBJECT_MODE};
+ $OBJECT_MODE ||= 32;
+ $config{target} = "aix";
+ if ( $OBJECT_MODE == 64 ) {
+ print 'Your $OBJECT_MODE was found to be set to 64';
+ $config{target} = "aix64";
+ } else {
+ if ( $CCVENDOR ne 'gnu' && $KERNEL_BITS eq '64' ) {
+ print <<EOF;
+WARNING! To build 64-bit package, do this:
+ $WHERE/Configure aix64-cc
+EOF
+ maybe_abort();
+ }
+ }
+ if ( okrun(
+ "(lsattr -E -O -l `lsdev -c processor|awk '{print \$1;exit}'`",
+ 'grep -i powerpc) >/dev/null 2>&1') ) {
+ # this applies even to Power3 and later, as they return
+ # PowerPC_POWER[345]
+ } else {
+ $config{disable} = [ 'asm' ];
+ }
+ return { %config };
+ }
+ ],
+
+ # Windows values found by looking at Perl 5's win32/win32.c
+ [ '(amd64|ia64|x86|ARM)-.*?-Windows NT',
+ sub {
+ # If we determined the arch by asking cl, take that value,
+ # otherwise the SYSTEM we got from from POSIX::uname().
+ my $arch = $CL_ARCH // $1;
+ my $config;
+
+ if ($arch) {
+ $config = { 'amd64' => { target => 'VC-WIN64A' },
+ 'ia64' => { target => 'VC-WIN64I' },
+ 'x86' => { target => 'VC-WIN32' },
+ 'x64' => { target => 'VC-WIN64A' },
+ 'ARM' => { target => 'VC-WIN64-ARM' },
+ } -> {$arch};
+ die <<_____ unless defined $config;
+ERROR
+I do not know how to handle ${arch}.
+_____
+ }
+ die <<_____ unless defined $config;
+ERROR
+Could not figure out the architecture.
+_____
+
+ return $config;
+ }
+ ],
+
+ # VMS values found by observation on existing machinery.
+ [ 'VMS_AXP-.*?-OpenVMS', { target => 'vms-alpha' } ],
+ [ 'VMS_IA64-.*?-OpenVMS', { target => 'vms-ia64' } ],
+ [ 'VMS_x86_64-.*?-OpenVMS', { target => 'vms-x86_64' } ],
+
+ # TODO: There are a few more choices among OpenSSL config targets, but
+ # reaching them involves a bit more than just a host tripet. Select
+ # environment variables could do the job to cover for more granular
+ # build options such as data model (ILP32 or LP64), thread support
+ # model (PUT, SPT or nothing), target execution environment (OSS or
+ # GUARDIAN). And still, there must be some kind of default when
+ # nothing else is said.
+ #
+ # nsv is a virtual x86 environment, equivalent to nsx, so we enforce
+ # the latter.
+ [ 'nse-tandem-nsk.*', { target => 'nonstop-nse' } ],
+ [ 'nsv-tandem-nsk.*', { target => 'nonstop-nsx' } ],
+ [ 'nsx-tandem-nsk.*', { target => 'nonstop-nsx' } ],
+
+ ];
+
+# Map GUESSOS into OpenSSL terminology.
+# Returns a hash table with diverse entries, most importantly 'target',
+# but also other entries that are fitting for Configure's %config
+# and MACHINE.
+# It would be nice to fix this so that this weren't necessary. :( XXX
+sub map_guess {
+ my $GUESSOS = shift;
+
+ foreach my $tuple ( @$map_patterns ) {
+ my $pat = @$tuple[0];
+ next if $GUESSOS !~ /^${pat}$/;
+ my $result = @$tuple[1];
+ $result = $result->() if ref $result eq 'CODE';
+ return %$result;
+ }
+
+ # Last case, return "z" from x-y-z
+ my @fields = split(/-/, $GUESSOS);
+ return ( target => $fields[2] );
+}
+
+# gcc < 2.8 does not support -march=ultrasparc
+sub check_solaris_sparc8 {
+ my $OUT = shift;
+ if ( $CCVENDOR eq 'gnu' && $CCVER < 208 ) {
+ if ( $OUT eq 'solaris-sparcv9-gcc' ) {
+ print <<EOF;
+WARNING! Downgrading to solaris-sparcv8-gcc
+ Upgrade to gcc-2.8 or later.
+EOF
+ maybe_abort();
+ return 'solaris-sparcv8-gcc';
+ }
+ if ( $OUT eq "linux-sparcv9" ) {
+ print <<EOF;
+WARNING! Downgrading to linux-sparcv8
+ Upgrade to gcc-2.8 or later.
+EOF
+ maybe_abort();
+ return 'linux-sparcv8';
+ }
+ }
+ return $OUT;
+}
+
+###
+### MAIN PROCESSING
+###
+
+sub get_platform {
+ my %options = @_;
+
+ $VERBOSE = 1 if defined $options{verbose};
+ $WAIT = 0 if defined $options{nowait};
+ $CC = $options{CC};
+ $CROSS_COMPILE = $options{CROSS_COMPILE} // '';
+
+ my $GUESSOS = guess_system();
+ determine_compiler_settings();
+
+ my %ret = map_guess($GUESSOS);
+ $ret{target} = check_solaris_sparc8($ret{target});
+ return %ret;
+}
+
+1;
diff --git a/util/perl/OpenSSL/copyright.pm b/util/perl/OpenSSL/copyright.pm
new file mode 100644
index 000000000000..87567c088945
--- /dev/null
+++ b/util/perl/OpenSSL/copyright.pm
@@ -0,0 +1,43 @@
+#! /usr/bin/env perl
+# Copyright 2021-2022 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
+
+use strict;
+use warnings;
+
+package OpenSSL::copyright;
+
+sub year_of {
+ my $file = shift;
+
+ return $ENV{'OSSL_COPYRIGHT_YEAR'} if defined $ENV{'OSSL_COPYRIGHT_YEAR'};
+
+ # Get the current year. We use that as the default because the other
+ # common case is that someone unpacked a tarfile and the file dates
+ # are't properly set on extract.
+ my $YEAR = [localtime()]->[5] + 1900;
+
+ # See if git's available
+ open my $FH,
+ "git log -1 --date=short --format=format:%cd $file 2>/dev/null|"
+ or return $YEAR;
+ my $LINE = <$FH>;
+ close $FH;
+ $LINE =~ s/^([0-9]*)-.*/$1/;
+ $YEAR = $LINE if $LINE;
+ return $YEAR;
+}
+
+sub latest {
+ my $l = 0;
+ foreach my $f (@_ ) {
+ my $y = year_of($f);
+ $l = $y if $y > $l;
+ }
+ return $l
+}
+1;
diff --git a/util/perl/OpenSSL/fallback.pm b/util/perl/OpenSSL/fallback.pm
new file mode 100644
index 000000000000..d4b5785cfc0b
--- /dev/null
+++ b/util/perl/OpenSSL/fallback.pm
@@ -0,0 +1,127 @@
+# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+=head1 NAME
+
+OpenSSL::fallback - push directories to the end of @INC at compile time
+
+=cut
+
+package OpenSSL::fallback;
+
+use strict;
+use warnings;
+use Carp;
+
+our $VERSION = '0.01';
+
+=head1 SYNOPSIS
+
+ use OpenSSL::fallback LIST;
+
+=head1 DESCRIPTION
+
+This small simple module simplifies the addition of fallback directories
+in @INC at compile time.
+
+It is used to add extra directories at the end of perl's search path so
+that later "use" or "require" statements will find modules which are not
+located on perl's default search path.
+
+This is similar to L<lib>, except the paths are I<appended> to @INC rather
+than prepended, thus allowing the use of a newer module on perl's default
+search path if there is one.
+
+=head1 CAVEAT
+
+Just like with B<lib>, this only works with Unix filepaths.
+Just like with L<lib>, this doesn't mean that it only works on Unix, but that
+non-Unix users must first translate their file paths to Unix conventions.
+
+ # VMS users wanting to put [.my.stuff] into their @INC should write:
+ use fallback 'my/stuff';
+
+=head1 NOTES
+
+If you try to add a file to @INC as follows, you will be warned, and the file
+will be ignored:
+
+ use fallback 'file.txt';
+
+The sole exception is the file F<MODULES.txt>, which must contain a list of
+sub-directories relative to the location of that F<MODULES.txt> file.
+All these sub-directories will be appended to @INC.
+
+=cut
+
+# Forward declare
+sub glob;
+
+use constant DEBUG => 0;
+
+sub import {
+ shift; # Skip module name
+
+ foreach (@_) {
+ my $path = $_;
+
+ if ($path eq '') {
+ carp "Empty compile time value given to use fallback";
+ next;
+ }
+
+ print STDERR "DEBUG: $path\n" if DEBUG;
+
+ unless (-e $path
+ && ($path =~ m/(?:^|\/)MODULES.txt/ || -d $path)) {
+ croak "Parameter to use fallback must be a directory, not a file";
+ next;
+ }
+
+ my @dirs = ();
+ if (-f $path) { # It's a MODULES.txt file
+ (my $dir = $path) =~ s|/[^/]*$||; # quick dirname
+ open my $fh, $path or die "Could not open $path: $!\n";
+ while (my $l = <$fh>) {
+ $l =~ s|\R$||; # Better chomp
+ my $d = "$dir/$l";
+ my $checked = $d;
+
+ if ($^O eq 'VMS') {
+ # Some VMS unpackers replace periods with underscores
+ # We must be real careful not to convert the directories
+ # '.' and '..', though.
+ $checked =
+ join('/',
+ map { my $x = $_;
+ $x =~ s|\.|_|g
+ if ($x ne '..' && $x ne '.');
+ $x }
+ split(m|/|, $checked))
+ unless -e $checked && -d $checked;
+ }
+ croak "All lines in $path must be a directory, not a file: $l"
+ unless -e $checked && -d $checked;
+ push @INC, $checked;
+ }
+ } else { # It's a directory
+ push @INC, $path;
+ }
+ }
+}
+
+=head1 SEE ALSO
+
+L<FindBin> - optional module which deals with paths relative to the source
+file.
+
+=head1 AUTHOR
+
+Richard Levitte, 2019
+
+=cut
+
diff --git a/util/perl/OpenSSL/stackhash.pm b/util/perl/OpenSSL/stackhash.pm
new file mode 100644
index 000000000000..4d59eab0c937
--- /dev/null
+++ b/util/perl/OpenSSL/stackhash.pm
@@ -0,0 +1,106 @@
+#! /usr/bin/env perl
+# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+package OpenSSL::stackhash;
+
+use strict;
+use warnings;
+
+require Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT_OK = qw(generate_stack_macros generate_const_stack_macros
+ generate_stack_string_macros
+ generate_stack_const_string_macros
+ generate_stack_block_macros
+ generate_lhash_macros);
+
+sub generate_stack_macros_int {
+ my $nametype = shift;
+ my $realtype = shift;
+ my $plaintype = shift;
+
+ my $macros = <<END_MACROS;
+SKM_DEFINE_STACK_OF_INTERNAL(${nametype}, ${realtype}, ${plaintype})
+#define sk_${nametype}_num(sk) OPENSSL_sk_num(ossl_check_const_${nametype}_sk_type(sk))
+#define sk_${nametype}_value(sk, idx) ((${realtype} *)OPENSSL_sk_value(ossl_check_const_${nametype}_sk_type(sk), (idx)))
+#define sk_${nametype}_new(cmp) ((STACK_OF(${nametype}) *)OPENSSL_sk_new(ossl_check_${nametype}_compfunc_type(cmp)))
+#define sk_${nametype}_new_null() ((STACK_OF(${nametype}) *)OPENSSL_sk_new_null())
+#define sk_${nametype}_new_reserve(cmp, n) ((STACK_OF(${nametype}) *)OPENSSL_sk_new_reserve(ossl_check_${nametype}_compfunc_type(cmp), (n)))
+#define sk_${nametype}_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_${nametype}_sk_type(sk), (n))
+#define sk_${nametype}_free(sk) OPENSSL_sk_free(ossl_check_${nametype}_sk_type(sk))
+#define sk_${nametype}_zero(sk) OPENSSL_sk_zero(ossl_check_${nametype}_sk_type(sk))
+#define sk_${nametype}_delete(sk, i) ((${realtype} *)OPENSSL_sk_delete(ossl_check_${nametype}_sk_type(sk), (i)))
+#define sk_${nametype}_delete_ptr(sk, ptr) ((${realtype} *)OPENSSL_sk_delete_ptr(ossl_check_${nametype}_sk_type(sk), ossl_check_${nametype}_type(ptr)))
+#define sk_${nametype}_push(sk, ptr) OPENSSL_sk_push(ossl_check_${nametype}_sk_type(sk), ossl_check_${nametype}_type(ptr))
+#define sk_${nametype}_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_${nametype}_sk_type(sk), ossl_check_${nametype}_type(ptr))
+#define sk_${nametype}_pop(sk) ((${realtype} *)OPENSSL_sk_pop(ossl_check_${nametype}_sk_type(sk)))
+#define sk_${nametype}_shift(sk) ((${realtype} *)OPENSSL_sk_shift(ossl_check_${nametype}_sk_type(sk)))
+#define sk_${nametype}_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_${nametype}_sk_type(sk),ossl_check_${nametype}_freefunc_type(freefunc))
+#define sk_${nametype}_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_${nametype}_sk_type(sk), ossl_check_${nametype}_type(ptr), (idx))
+#define sk_${nametype}_set(sk, idx, ptr) ((${realtype} *)OPENSSL_sk_set(ossl_check_${nametype}_sk_type(sk), (idx), ossl_check_${nametype}_type(ptr)))
+#define sk_${nametype}_find(sk, ptr) OPENSSL_sk_find(ossl_check_${nametype}_sk_type(sk), ossl_check_${nametype}_type(ptr))
+#define sk_${nametype}_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_${nametype}_sk_type(sk), ossl_check_${nametype}_type(ptr))
+#define sk_${nametype}_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_${nametype}_sk_type(sk), ossl_check_${nametype}_type(ptr), pnum)
+#define sk_${nametype}_sort(sk) OPENSSL_sk_sort(ossl_check_${nametype}_sk_type(sk))
+#define sk_${nametype}_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_${nametype}_sk_type(sk))
+#define sk_${nametype}_dup(sk) ((STACK_OF(${nametype}) *)OPENSSL_sk_dup(ossl_check_const_${nametype}_sk_type(sk)))
+#define sk_${nametype}_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(${nametype}) *)OPENSSL_sk_deep_copy(ossl_check_const_${nametype}_sk_type(sk), ossl_check_${nametype}_copyfunc_type(copyfunc), ossl_check_${nametype}_freefunc_type(freefunc)))
+#define sk_${nametype}_set_cmp_func(sk, cmp) ((sk_${nametype}_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_${nametype}_sk_type(sk), ossl_check_${nametype}_compfunc_type(cmp)))
+END_MACROS
+
+ return $macros;
+}
+
+sub generate_stack_macros {
+ my $type = shift;
+
+ return generate_stack_macros_int($type, $type, $type);
+}
+
+sub generate_const_stack_macros {
+ my $type = shift;
+
+ return generate_stack_macros_int($type, "const $type", $type);
+}
+
+sub generate_stack_string_macros {
+ return generate_stack_macros_int("OPENSSL_STRING", "char", "char");
+}
+
+sub generate_stack_const_string_macros {
+ return generate_stack_macros_int("OPENSSL_CSTRING", "const char", "char");
+}
+
+sub generate_stack_block_macros {
+ return generate_stack_macros_int("OPENSSL_BLOCK", "void", "void");
+}
+
+sub generate_lhash_macros {
+ my $type = shift;
+
+ my $macros = <<END_MACROS;
+DEFINE_LHASH_OF_INTERNAL(${type});
+#define lh_${type}_new(hfn, cmp) ((LHASH_OF(${type}) *)OPENSSL_LH_new(ossl_check_${type}_lh_hashfunc_type(hfn), ossl_check_${type}_lh_compfunc_type(cmp)))
+#define lh_${type}_free(lh) OPENSSL_LH_free(ossl_check_${type}_lh_type(lh))
+#define lh_${type}_flush(lh) OPENSSL_LH_flush(ossl_check_${type}_lh_type(lh))
+#define lh_${type}_insert(lh, ptr) ((${type} *)OPENSSL_LH_insert(ossl_check_${type}_lh_type(lh), ossl_check_${type}_lh_plain_type(ptr)))
+#define lh_${type}_delete(lh, ptr) ((${type} *)OPENSSL_LH_delete(ossl_check_${type}_lh_type(lh), ossl_check_const_${type}_lh_plain_type(ptr)))
+#define lh_${type}_retrieve(lh, ptr) ((${type} *)OPENSSL_LH_retrieve(ossl_check_${type}_lh_type(lh), ossl_check_const_${type}_lh_plain_type(ptr)))
+#define lh_${type}_error(lh) OPENSSL_LH_error(ossl_check_${type}_lh_type(lh))
+#define lh_${type}_num_items(lh) OPENSSL_LH_num_items(ossl_check_${type}_lh_type(lh))
+#define lh_${type}_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_${type}_lh_type(lh), out)
+#define lh_${type}_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_${type}_lh_type(lh), out)
+#define lh_${type}_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_${type}_lh_type(lh), out)
+#define lh_${type}_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_${type}_lh_type(lh))
+#define lh_${type}_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_${type}_lh_type(lh), dl)
+#define lh_${type}_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_${type}_lh_type(lh), ossl_check_${type}_lh_doallfunc_type(dfn))
+END_MACROS
+
+ return $macros;
+}
+1;
diff --git a/util/perl/TLSProxy/Alert.pm b/util/perl/TLSProxy/Alert.pm
new file mode 100644
index 000000000000..f63eeac865d3
--- /dev/null
+++ b/util/perl/TLSProxy/Alert.pm
@@ -0,0 +1,51 @@
+# Copyright 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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+
+package TLSProxy::Alert;
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $encrypted,
+ $level,
+ $description) = @_;
+
+ my $self = {
+ server => $server,
+ encrypted => $encrypted,
+ level => $level,
+ description => $description
+ };
+
+ return bless $self, $class;
+}
+
+#Read only accessors
+sub server
+{
+ my $self = shift;
+ return $self->{server};
+}
+sub encrypted
+{
+ my $self = shift;
+ return $self->{encrypted};
+}
+sub level
+{
+ my $self = shift;
+ return $self->{level};
+}
+sub description
+{
+ my $self = shift;
+ return $self->{description};
+}
+1;
diff --git a/util/perl/TLSProxy/Certificate.pm b/util/perl/TLSProxy/Certificate.pm
new file mode 100644
index 000000000000..03f661995482
--- /dev/null
+++ b/util/perl/TLSProxy/Certificate.pm
@@ -0,0 +1,214 @@
+# Copyright 2016 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
+
+use strict;
+
+package TLSProxy::Certificate;
+
+use vars '@ISA';
+push @ISA, 'TLSProxy::Message';
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens) = @_;
+
+ my $self = $class->SUPER::new(
+ $server,
+ TLSProxy::Message::MT_CERTIFICATE,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens);
+
+ $self->{first_certificate} = "";
+ $self->{extension_data} = "";
+ $self->{remaining_certdata} = "";
+
+ return $self;
+}
+
+sub parse
+{
+ my $self = shift;
+
+ if (TLSProxy::Proxy->is_tls13()) {
+ my $context_len = unpack('C', $self->data);
+ my $context = substr($self->data, 1, $context_len);
+
+ my $remdata = substr($self->data, 1 + $context_len);
+
+ my ($hicertlistlen, $certlistlen) = unpack('Cn', $remdata);
+ $certlistlen += ($hicertlistlen << 16);
+
+ $remdata = substr($remdata, 3);
+
+ die "Invalid Certificate List length"
+ if length($remdata) != $certlistlen;
+
+ my ($hicertlen, $certlen) = unpack('Cn', $remdata);
+ $certlen += ($hicertlen << 16);
+
+ die "Certificate too long" if ($certlen + 3) > $certlistlen;
+
+ $remdata = substr($remdata, 3);
+
+ my $certdata = substr($remdata, 0, $certlen);
+
+ $remdata = substr($remdata, $certlen);
+
+ my $extensions_len = unpack('n', $remdata);
+ $remdata = substr($remdata, 2);
+
+ die "Extensions too long"
+ if ($certlen + 3 + $extensions_len + 2) > $certlistlen;
+
+ my $extension_data = "";
+ if ($extensions_len != 0) {
+ $extension_data = substr($remdata, 0, $extensions_len);
+
+ if (length($extension_data) != $extensions_len) {
+ die "Invalid extension length\n";
+ }
+ }
+ my %extensions = ();
+ while (length($extension_data) >= 4) {
+ my ($type, $size) = unpack("nn", $extension_data);
+ my $extdata = substr($extension_data, 4, $size);
+ $extension_data = substr($extension_data, 4 + $size);
+ $extensions{$type} = $extdata;
+ }
+ $remdata = substr($remdata, $extensions_len);
+
+ $self->context($context);
+ $self->first_certificate($certdata);
+ $self->extension_data(\%extensions);
+ $self->remaining_certdata($remdata);
+
+ print " Context:".$context."\n";
+ print " Certificate List Len:".$certlistlen."\n";
+ print " Certificate Len:".$certlen."\n";
+ print " Extensions Len:".$extensions_len."\n";
+ } else {
+ my ($hicertlistlen, $certlistlen) = unpack('Cn', $self->data);
+ $certlistlen += ($hicertlistlen << 16);
+
+ my $remdata = substr($self->data, 3);
+
+ die "Invalid Certificate List length"
+ if length($remdata) != $certlistlen;
+
+ my ($hicertlen, $certlen) = unpack('Cn', $remdata);
+ $certlen += ($hicertlen << 16);
+
+ die "Certificate too long" if ($certlen + 3) > $certlistlen;
+
+ $remdata = substr($remdata, 3);
+
+ my $certdata = substr($remdata, 0, $certlen);
+
+ $remdata = substr($remdata, $certlen);
+
+ $self->first_certificate($certdata);
+ $self->remaining_certdata($remdata);
+
+ print " Certificate List Len:".$certlistlen."\n";
+ print " Certificate Len:".$certlen."\n";
+ }
+}
+
+#Reconstruct the on-the-wire message data following changes
+sub set_message_contents
+{
+ my $self = shift;
+ my $data;
+ my $extensions = "";
+
+ if (TLSProxy::Proxy->is_tls13()) {
+ foreach my $key (keys %{$self->extension_data}) {
+ my $extdata = ${$self->extension_data}{$key};
+ $extensions .= pack("n", $key);
+ $extensions .= pack("n", length($extdata));
+ $extensions .= $extdata;
+ }
+ $data = pack('C', length($self->context()));
+ $data .= $self->context;
+ my $certlen = length($self->first_certificate);
+ my $certlistlen = $certlen + length($extensions)
+ + length($self->remaining_certdata);
+ my $hi = $certlistlen >> 16;
+ $certlistlen = $certlistlen & 0xffff;
+ $data .= pack('Cn', $hi, $certlistlen);
+ $hi = $certlen >> 16;
+ $certlen = $certlen & 0xffff;
+ $data .= pack('Cn', $hi, $certlen);
+ $data .= pack('n', length($extensions));
+ $data .= $extensions;
+ $data .= $self->remaining_certdata();
+ $self->data($data);
+ } else {
+ my $certlen = length($self->first_certificate);
+ my $certlistlen = $certlen + length($self->remaining_certdata);
+ my $hi = $certlistlen >> 16;
+ $certlistlen = $certlistlen & 0xffff;
+ $data .= pack('Cn', $hi, $certlistlen);
+ $hi = $certlen >> 16;
+ $certlen = $certlen & 0xffff;
+ $data .= pack('Cn', $hi, $certlen);
+ $data .= $self->remaining_certdata();
+ $self->data($data);
+ }
+}
+
+#Read/write accessors
+sub context
+{
+ my $self = shift;
+ if (@_) {
+ $self->{context} = shift;
+ }
+ return $self->{context};
+}
+sub first_certificate
+{
+ my $self = shift;
+ if (@_) {
+ $self->{first_certificate} = shift;
+ }
+ return $self->{first_certificate};
+}
+sub remaining_certdata
+{
+ my $self = shift;
+ if (@_) {
+ $self->{remaining_certdata} = shift;
+ }
+ return $self->{remaining_certdata};
+}
+sub extension_data
+{
+ my $self = shift;
+ if (@_) {
+ $self->{extension_data} = shift;
+ }
+ return $self->{extension_data};
+}
+sub set_extension
+{
+ my ($self, $ext_type, $ext_data) = @_;
+ $self->{extension_data}{$ext_type} = $ext_data;
+}
+sub delete_extension
+{
+ my ($self, $ext_type) = @_;
+ delete $self->{extension_data}{$ext_type};
+}
+1;
diff --git a/util/perl/TLSProxy/CertificateRequest.pm b/util/perl/TLSProxy/CertificateRequest.pm
new file mode 100644
index 000000000000..193bea168a53
--- /dev/null
+++ b/util/perl/TLSProxy/CertificateRequest.pm
@@ -0,0 +1,105 @@
+# Copyright 2016 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
+
+use strict;
+
+package TLSProxy::CertificateRequest;
+
+use vars '@ISA';
+push @ISA, 'TLSProxy::Message';
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens) = @_;
+
+ my $self = $class->SUPER::new(
+ $server,
+ TLSProxy::Message::MT_CERTIFICATE_REQUEST,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens);
+
+ $self->{extension_data} = "";
+
+ return $self;
+}
+
+sub parse
+{
+ my $self = shift;
+ my $ptr = 1;
+
+ if (TLSProxy::Proxy->is_tls13()) {
+ my $request_ctx_len = unpack('C', $self->data);
+ my $request_ctx = substr($self->data, $ptr, $request_ctx_len);
+ $ptr += $request_ctx_len;
+
+ my $extensions_len = unpack('n', substr($self->data, $ptr));
+ $ptr += 2;
+ my $extension_data = substr($self->data, $ptr);
+ if (length($extension_data) != $extensions_len) {
+ die "Invalid extension length\n";
+ }
+ my %extensions = ();
+ while (length($extension_data) >= 4) {
+ my ($type, $size) = unpack("nn", $extension_data);
+ my $extdata = substr($extension_data, 4, $size);
+ $extension_data = substr($extension_data, 4 + $size);
+ $extensions{$type} = $extdata;
+ }
+ $self->extension_data(\%extensions);
+
+ print " Extensions Len:".$extensions_len."\n";
+ }
+ # else parse TLSv1.2 version - we don't support that at the moment
+}
+
+#Reconstruct the on-the-wire message data following changes
+sub set_message_contents
+{
+ my $self = shift;
+ my $data;
+ my $extensions = "";
+
+ foreach my $key (keys %{$self->extension_data}) {
+ my $extdata = ${$self->extension_data}{$key};
+ $extensions .= pack("n", $key);
+ $extensions .= pack("n", length($extdata));
+ $extensions .= $extdata;
+ }
+
+ $data = pack('n', length($extensions));
+ $data .= $extensions;
+ $self->data($data);
+}
+
+#Read/write accessors
+sub extension_data
+{
+ my $self = shift;
+ if (@_) {
+ $self->{extension_data} = shift;
+ }
+ return $self->{extension_data};
+}
+sub set_extension
+{
+ my ($self, $ext_type, $ext_data) = @_;
+ $self->{extension_data}{$ext_type} = $ext_data;
+}
+sub delete_extension
+{
+ my ($self, $ext_type) = @_;
+ delete $self->{extension_data}{$ext_type};
+}
+1;
diff --git a/util/perl/TLSProxy/CertificateVerify.pm b/util/perl/TLSProxy/CertificateVerify.pm
new file mode 100644
index 000000000000..fe4500140502
--- /dev/null
+++ b/util/perl/TLSProxy/CertificateVerify.pm
@@ -0,0 +1,96 @@
+# Copyright 2016 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
+
+use strict;
+
+package TLSProxy::CertificateVerify;
+
+use vars '@ISA';
+push @ISA, 'TLSProxy::Message';
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens) = @_;
+
+ my $self = $class->SUPER::new(
+ $server,
+ TLSProxy::Message::MT_CERTIFICATE_VERIFY,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens);
+
+ $self->{sigalg} = -1;
+ $self->{signature} = "";
+
+ return $self;
+}
+
+sub parse
+{
+ my $self = shift;
+
+ my $sigalg = -1;
+ my $remdata = $self->data;
+ my $record = ${$self->records}[0];
+
+ if (TLSProxy::Proxy->is_tls13()
+ || $record->version() == TLSProxy::Record::VERS_TLS_1_2) {
+ $sigalg = unpack('n', $remdata);
+ $remdata = substr($remdata, 2);
+ }
+
+ my $siglen = unpack('n', substr($remdata, 0, 2));
+ my $sig = substr($remdata, 2);
+
+ die "Invalid CertificateVerify signature length" if length($sig) != $siglen;
+
+ print " SigAlg:".$sigalg."\n";
+ print " Signature Len:".$siglen."\n";
+
+ $self->sigalg($sigalg);
+ $self->signature($sig);
+}
+
+#Reconstruct the on-the-wire message data following changes
+sub set_message_contents
+{
+ my $self = shift;
+ my $data = "";
+ my $sig = $self->signature();
+ my $olddata = $self->data();
+
+ $data .= pack("n", $self->sigalg()) if ($self->sigalg() != -1);
+ $data .= pack("n", length($sig));
+ $data .= $sig;
+
+ $self->data($data);
+}
+
+#Read/write accessors
+sub sigalg
+{
+ my $self = shift;
+ if (@_) {
+ $self->{sigalg} = shift;
+ }
+ return $self->{sigalg};
+}
+sub signature
+{
+ my $self = shift;
+ if (@_) {
+ $self->{signature} = shift;
+ }
+ return $self->{signature};
+}
+1;
diff --git a/util/perl/TLSProxy/ClientHello.pm b/util/perl/TLSProxy/ClientHello.pm
new file mode 100644
index 000000000000..c49bc23671ff
--- /dev/null
+++ b/util/perl/TLSProxy/ClientHello.pm
@@ -0,0 +1,258 @@
+# Copyright 2016 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
+
+use strict;
+
+package TLSProxy::ClientHello;
+
+use vars '@ISA';
+push @ISA, 'TLSProxy::Message';
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens) = @_;
+
+ my $self = $class->SUPER::new(
+ $server,
+ 1,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens);
+
+ $self->{client_version} = 0;
+ $self->{random} = [];
+ $self->{session_id_len} = 0;
+ $self->{session} = "";
+ $self->{ciphersuite_len} = 0;
+ $self->{ciphersuites} = [];
+ $self->{comp_meth_len} = 0;
+ $self->{comp_meths} = [];
+ $self->{extensions_len} = 0;
+ $self->{extension_data} = "";
+
+ return $self;
+}
+
+sub parse
+{
+ my $self = shift;
+ my $ptr = 2;
+ my ($client_version) = unpack('n', $self->data);
+ my $random = substr($self->data, $ptr, 32);
+ $ptr += 32;
+ my $session_id_len = unpack('C', substr($self->data, $ptr));
+ $ptr++;
+ my $session = substr($self->data, $ptr, $session_id_len);
+ $ptr += $session_id_len;
+ my $ciphersuite_len = unpack('n', substr($self->data, $ptr));
+ $ptr += 2;
+ my @ciphersuites = unpack('n*', substr($self->data, $ptr,
+ $ciphersuite_len));
+ $ptr += $ciphersuite_len;
+ my $comp_meth_len = unpack('C', substr($self->data, $ptr));
+ $ptr++;
+ my @comp_meths = unpack('C*', substr($self->data, $ptr, $comp_meth_len));
+ $ptr += $comp_meth_len;
+ my $extensions_len = unpack('n', substr($self->data, $ptr));
+ $ptr += 2;
+ #For now we just deal with this as a block of data. In the future we will
+ #want to parse this
+ my $extension_data = substr($self->data, $ptr);
+
+ if (length($extension_data) != $extensions_len) {
+ die "Invalid extension length\n";
+ }
+ my %extensions = ();
+ while (length($extension_data) >= 4) {
+ my ($type, $size) = unpack("nn", $extension_data);
+ my $extdata = substr($extension_data, 4, $size);
+ $extension_data = substr($extension_data, 4 + $size);
+ $extensions{$type} = $extdata;
+ }
+
+ $self->client_version($client_version);
+ $self->random($random);
+ $self->session_id_len($session_id_len);
+ $self->session($session);
+ $self->ciphersuite_len($ciphersuite_len);
+ $self->ciphersuites(\@ciphersuites);
+ $self->comp_meth_len($comp_meth_len);
+ $self->comp_meths(\@comp_meths);
+ $self->extensions_len($extensions_len);
+ $self->extension_data(\%extensions);
+
+ $self->process_extensions();
+
+ print " Client Version:".$client_version."\n";
+ print " Session ID Len:".$session_id_len."\n";
+ print " Ciphersuite len:".$ciphersuite_len."\n";
+ print " Compression Method Len:".$comp_meth_len."\n";
+ print " Extensions Len:".$extensions_len."\n";
+}
+
+#Perform any actions necessary based on the extensions we've seen
+sub process_extensions
+{
+ my $self = shift;
+ my %extensions = %{$self->extension_data};
+
+ #Clear any state from a previous run
+ TLSProxy::Record->etm(0);
+
+ if (exists $extensions{TLSProxy::Message::EXT_ENCRYPT_THEN_MAC}) {
+ TLSProxy::Record->etm(1);
+ }
+}
+
+sub extension_contents
+{
+ my $self = shift;
+ my $key = shift;
+ my $extension = "";
+
+ my $extdata = ${$self->extension_data}{$key};
+ $extension .= pack("n", $key);
+ $extension .= pack("n", length($extdata));
+ $extension .= $extdata;
+ return $extension;
+}
+
+#Reconstruct the on-the-wire message data following changes
+sub set_message_contents
+{
+ my $self = shift;
+ my $data;
+ my $extensions = "";
+
+ $data = pack('n', $self->client_version);
+ $data .= $self->random;
+ $data .= pack('C', $self->session_id_len);
+ $data .= $self->session;
+ $data .= pack('n', $self->ciphersuite_len);
+ $data .= pack("n*", @{$self->ciphersuites});
+ $data .= pack('C', $self->comp_meth_len);
+ $data .= pack("C*", @{$self->comp_meths});
+
+ foreach my $key (keys %{$self->extension_data}) {
+ next if ($key == TLSProxy::Message::EXT_PSK);
+ $extensions .= $self->extension_contents($key);
+ #Add extension twice if we are duplicating that extension
+ $extensions .= $self->extension_contents($key) if ($key == $self->dupext);
+ }
+ #PSK extension always goes last...
+ if (defined ${$self->extension_data}{TLSProxy::Message::EXT_PSK}) {
+ $extensions .= $self->extension_contents(TLSProxy::Message::EXT_PSK);
+ }
+ #unless we have EXT_FORCE_LAST
+ if (defined ${$self->extension_data}{TLSProxy::Message::EXT_FORCE_LAST}) {
+ $extensions .= $self->extension_contents(TLSProxy::Message::EXT_FORCE_LAST);
+ }
+
+ $data .= pack('n', length($extensions));
+ $data .= $extensions;
+
+ $self->data($data);
+}
+
+#Read/write accessors
+sub client_version
+{
+ my $self = shift;
+ if (@_) {
+ $self->{client_version} = shift;
+ }
+ return $self->{client_version};
+}
+sub random
+{
+ my $self = shift;
+ if (@_) {
+ $self->{random} = shift;
+ }
+ return $self->{random};
+}
+sub session_id_len
+{
+ my $self = shift;
+ if (@_) {
+ $self->{session_id_len} = shift;
+ }
+ return $self->{session_id_len};
+}
+sub session
+{
+ my $self = shift;
+ if (@_) {
+ $self->{session} = shift;
+ }
+ return $self->{session};
+}
+sub ciphersuite_len
+{
+ my $self = shift;
+ if (@_) {
+ $self->{ciphersuite_len} = shift;
+ }
+ return $self->{ciphersuite_len};
+}
+sub ciphersuites
+{
+ my $self = shift;
+ if (@_) {
+ $self->{ciphersuites} = shift;
+ }
+ return $self->{ciphersuites};
+}
+sub comp_meth_len
+{
+ my $self = shift;
+ if (@_) {
+ $self->{comp_meth_len} = shift;
+ }
+ return $self->{comp_meth_len};
+}
+sub comp_meths
+{
+ my $self = shift;
+ if (@_) {
+ $self->{comp_meths} = shift;
+ }
+ return $self->{comp_meths};
+}
+sub extensions_len
+{
+ my $self = shift;
+ if (@_) {
+ $self->{extensions_len} = shift;
+ }
+ return $self->{extensions_len};
+}
+sub extension_data
+{
+ my $self = shift;
+ if (@_) {
+ $self->{extension_data} = shift;
+ }
+ return $self->{extension_data};
+}
+sub set_extension
+{
+ my ($self, $ext_type, $ext_data) = @_;
+ $self->{extension_data}{$ext_type} = $ext_data;
+}
+sub delete_extension
+{
+ my ($self, $ext_type) = @_;
+ delete $self->{extension_data}{$ext_type};
+}
+1;
diff --git a/util/perl/TLSProxy/EncryptedExtensions.pm b/util/perl/TLSProxy/EncryptedExtensions.pm
new file mode 100644
index 000000000000..4fd445b41e08
--- /dev/null
+++ b/util/perl/TLSProxy/EncryptedExtensions.pm
@@ -0,0 +1,110 @@
+# Copyright 2016 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
+
+use strict;
+
+package TLSProxy::EncryptedExtensions;
+
+use vars '@ISA';
+push @ISA, 'TLSProxy::Message';
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens) = @_;
+
+ my $self = $class->SUPER::new(
+ $server,
+ TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens);
+
+ $self->{extension_data} = "";
+
+ return $self;
+}
+
+sub parse
+{
+ my $self = shift;
+
+ my $extensions_len = unpack('n', $self->data);
+ if (!defined $extensions_len) {
+ $extensions_len = 0;
+ }
+
+ my $extension_data;
+ if ($extensions_len != 0) {
+ $extension_data = substr($self->data, 2);
+
+ if (length($extension_data) != $extensions_len) {
+ die "Invalid extension length\n";
+ }
+ } else {
+ if (length($self->data) != 2) {
+ die "Invalid extension length\n";
+ }
+ $extension_data = "";
+ }
+ my %extensions = ();
+ while (length($extension_data) >= 4) {
+ my ($type, $size) = unpack("nn", $extension_data);
+ my $extdata = substr($extension_data, 4, $size);
+ $extension_data = substr($extension_data, 4 + $size);
+ $extensions{$type} = $extdata;
+ }
+
+ $self->extension_data(\%extensions);
+
+ print " Extensions Len:".$extensions_len."\n";
+}
+
+#Reconstruct the on-the-wire message data following changes
+sub set_message_contents
+{
+ my $self = shift;
+ my $data;
+ my $extensions = "";
+
+ foreach my $key (keys %{$self->extension_data}) {
+ my $extdata = ${$self->extension_data}{$key};
+ $extensions .= pack("n", $key);
+ $extensions .= pack("n", length($extdata));
+ $extensions .= $extdata;
+ }
+
+ $data = pack('n', length($extensions));
+ $data .= $extensions;
+ $self->data($data);
+}
+
+#Read/write accessors
+sub extension_data
+{
+ my $self = shift;
+ if (@_) {
+ $self->{extension_data} = shift;
+ }
+ return $self->{extension_data};
+}
+sub set_extension
+{
+ my ($self, $ext_type, $ext_data) = @_;
+ $self->{extension_data}{$ext_type} = $ext_data;
+}
+sub delete_extension
+{
+ my ($self, $ext_type) = @_;
+ delete $self->{extension_data}{$ext_type};
+}
+1;
diff --git a/util/perl/TLSProxy/Message.pm b/util/perl/TLSProxy/Message.pm
new file mode 100644
index 000000000000..2c1bdb3837e2
--- /dev/null
+++ b/util/perl/TLSProxy/Message.pm
@@ -0,0 +1,629 @@
+# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+
+package TLSProxy::Message;
+
+use TLSProxy::Alert;
+
+use constant TLS_MESSAGE_HEADER_LENGTH => 4;
+
+#Message types
+use constant {
+ MT_HELLO_REQUEST => 0,
+ MT_CLIENT_HELLO => 1,
+ MT_SERVER_HELLO => 2,
+ MT_NEW_SESSION_TICKET => 4,
+ MT_ENCRYPTED_EXTENSIONS => 8,
+ MT_CERTIFICATE => 11,
+ MT_SERVER_KEY_EXCHANGE => 12,
+ MT_CERTIFICATE_REQUEST => 13,
+ MT_SERVER_HELLO_DONE => 14,
+ MT_CERTIFICATE_VERIFY => 15,
+ MT_CLIENT_KEY_EXCHANGE => 16,
+ MT_FINISHED => 20,
+ MT_CERTIFICATE_STATUS => 22,
+ MT_NEXT_PROTO => 67
+};
+
+#Alert levels
+use constant {
+ AL_LEVEL_WARN => 1,
+ AL_LEVEL_FATAL => 2
+};
+
+#Alert descriptions
+use constant {
+ AL_DESC_CLOSE_NOTIFY => 0,
+ AL_DESC_UNEXPECTED_MESSAGE => 10,
+ AL_DESC_ILLEGAL_PARAMETER => 47,
+ AL_DESC_NO_RENEGOTIATION => 100
+};
+
+my %message_type = (
+ MT_HELLO_REQUEST, "HelloRequest",
+ MT_CLIENT_HELLO, "ClientHello",
+ MT_SERVER_HELLO, "ServerHello",
+ MT_NEW_SESSION_TICKET, "NewSessionTicket",
+ MT_ENCRYPTED_EXTENSIONS, "EncryptedExtensions",
+ MT_CERTIFICATE, "Certificate",
+ MT_SERVER_KEY_EXCHANGE, "ServerKeyExchange",
+ MT_CERTIFICATE_REQUEST, "CertificateRequest",
+ MT_SERVER_HELLO_DONE, "ServerHelloDone",
+ MT_CERTIFICATE_VERIFY, "CertificateVerify",
+ MT_CLIENT_KEY_EXCHANGE, "ClientKeyExchange",
+ MT_FINISHED, "Finished",
+ MT_CERTIFICATE_STATUS, "CertificateStatus",
+ MT_NEXT_PROTO, "NextProto"
+);
+
+use constant {
+ EXT_SERVER_NAME => 0,
+ EXT_MAX_FRAGMENT_LENGTH => 1,
+ EXT_STATUS_REQUEST => 5,
+ EXT_SUPPORTED_GROUPS => 10,
+ EXT_EC_POINT_FORMATS => 11,
+ EXT_SRP => 12,
+ EXT_SIG_ALGS => 13,
+ EXT_USE_SRTP => 14,
+ EXT_ALPN => 16,
+ EXT_SCT => 18,
+ EXT_PADDING => 21,
+ EXT_ENCRYPT_THEN_MAC => 22,
+ EXT_EXTENDED_MASTER_SECRET => 23,
+ EXT_SESSION_TICKET => 35,
+ EXT_KEY_SHARE => 51,
+ EXT_PSK => 41,
+ EXT_SUPPORTED_VERSIONS => 43,
+ EXT_COOKIE => 44,
+ EXT_PSK_KEX_MODES => 45,
+ EXT_POST_HANDSHAKE_AUTH => 49,
+ EXT_SIG_ALGS_CERT => 50,
+ EXT_RENEGOTIATE => 65281,
+ EXT_NPN => 13172,
+ EXT_CRYPTOPRO_BUG_EXTENSION => 0xfde8,
+ EXT_UNKNOWN => 0xfffe,
+ #Unknown extension that should appear last
+ EXT_FORCE_LAST => 0xffff
+};
+
+# SignatureScheme of TLS 1.3 from:
+# https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-signaturescheme
+# We have to manually grab the SHA224 equivalents from the old registry
+use constant {
+ SIG_ALG_RSA_PKCS1_SHA256 => 0x0401,
+ SIG_ALG_RSA_PKCS1_SHA384 => 0x0501,
+ SIG_ALG_RSA_PKCS1_SHA512 => 0x0601,
+ SIG_ALG_ECDSA_SECP256R1_SHA256 => 0x0403,
+ SIG_ALG_ECDSA_SECP384R1_SHA384 => 0x0503,
+ SIG_ALG_ECDSA_SECP521R1_SHA512 => 0x0603,
+ SIG_ALG_RSA_PSS_RSAE_SHA256 => 0x0804,
+ SIG_ALG_RSA_PSS_RSAE_SHA384 => 0x0805,
+ SIG_ALG_RSA_PSS_RSAE_SHA512 => 0x0806,
+ SIG_ALG_ED25519 => 0x0807,
+ SIG_ALG_ED448 => 0x0808,
+ SIG_ALG_RSA_PSS_PSS_SHA256 => 0x0809,
+ SIG_ALG_RSA_PSS_PSS_SHA384 => 0x080a,
+ SIG_ALG_RSA_PSS_PSS_SHA512 => 0x080b,
+ SIG_ALG_RSA_PKCS1_SHA1 => 0x0201,
+ SIG_ALG_ECDSA_SHA1 => 0x0203,
+ SIG_ALG_DSA_SHA1 => 0x0202,
+ SIG_ALG_DSA_SHA256 => 0x0402,
+ SIG_ALG_DSA_SHA384 => 0x0502,
+ SIG_ALG_DSA_SHA512 => 0x0602,
+ OSSL_SIG_ALG_RSA_PKCS1_SHA224 => 0x0301,
+ OSSL_SIG_ALG_DSA_SHA224 => 0x0302,
+ OSSL_SIG_ALG_ECDSA_SHA224 => 0x0303
+};
+
+use constant {
+ CIPHER_RSA_WITH_AES_128_CBC_SHA => 0x002f,
+ CIPHER_DHE_RSA_AES_128_SHA => 0x0033,
+ CIPHER_ADH_AES_128_SHA => 0x0034,
+ CIPHER_TLS13_AES_128_GCM_SHA256 => 0x1301,
+ CIPHER_TLS13_AES_256_GCM_SHA384 => 0x1302
+};
+
+use constant {
+ CLIENT => 0,
+ SERVER => 1
+};
+
+my $payload = "";
+my $messlen = -1;
+my $mt;
+my $startoffset = -1;
+my $server = 0;
+my $success = 0;
+my $end = 0;
+my @message_rec_list = ();
+my @message_frag_lens = ();
+my $ciphersuite = 0;
+my $successondata = 0;
+my $alert;
+
+sub clear
+{
+ $payload = "";
+ $messlen = -1;
+ $startoffset = -1;
+ $server = 0;
+ $success = 0;
+ $end = 0;
+ $successondata = 0;
+ @message_rec_list = ();
+ @message_frag_lens = ();
+ $alert = undef;
+}
+
+#Class method to extract messages from a record
+sub get_messages
+{
+ my $class = shift;
+ my $serverin = shift;
+ my $record = shift;
+ my @messages = ();
+ my $message;
+
+ @message_frag_lens = ();
+
+ if ($serverin != $server && length($payload) != 0) {
+ die "Changed peer, but we still have fragment data\n";
+ }
+ $server = $serverin;
+
+ if ($record->content_type == TLSProxy::Record::RT_CCS) {
+ if ($payload ne "") {
+ #We can't handle this yet
+ die "CCS received before message data complete\n";
+ }
+ if (!TLSProxy::Proxy->is_tls13()) {
+ if ($server) {
+ TLSProxy::Record->server_encrypting(1);
+ } else {
+ TLSProxy::Record->client_encrypting(1);
+ }
+ }
+ } elsif ($record->content_type == TLSProxy::Record::RT_HANDSHAKE) {
+ if ($record->len == 0 || $record->len_real == 0) {
+ print " Message truncated\n";
+ } else {
+ my $recoffset = 0;
+
+ if (length $payload > 0) {
+ #We are continuing processing a message started in a previous
+ #record. Add this record to the list associated with this
+ #message
+ push @message_rec_list, $record;
+
+ if ($messlen <= length($payload)) {
+ #Shouldn't happen
+ die "Internal error: invalid messlen: ".$messlen
+ ." payload length:".length($payload)."\n";
+ }
+ if (length($payload) + $record->decrypt_len >= $messlen) {
+ #We can complete the message with this record
+ $recoffset = $messlen - length($payload);
+ $payload .= substr($record->decrypt_data, 0, $recoffset);
+ push @message_frag_lens, $recoffset;
+ $message = create_message($server, $mt, $payload,
+ $startoffset);
+ push @messages, $message;
+
+ $payload = "";
+ } else {
+ #This is just part of the total message
+ $payload .= $record->decrypt_data;
+ $recoffset = $record->decrypt_len;
+ push @message_frag_lens, $record->decrypt_len;
+ }
+ print " Partial message data read: ".$recoffset." bytes\n";
+ }
+
+ while ($record->decrypt_len > $recoffset) {
+ #We are at the start of a new message
+ if ($record->decrypt_len - $recoffset < 4) {
+ #Whilst technically probably valid we can't cope with this
+ die "End of record in the middle of a message header\n";
+ }
+ @message_rec_list = ($record);
+ my $lenhi;
+ my $lenlo;
+ ($mt, $lenhi, $lenlo) = unpack('CnC',
+ substr($record->decrypt_data,
+ $recoffset));
+ $messlen = ($lenhi << 8) | $lenlo;
+ print " Message type: $message_type{$mt}\n";
+ print " Message Length: $messlen\n";
+ $startoffset = $recoffset;
+ $recoffset += 4;
+ $payload = "";
+
+ if ($recoffset <= $record->decrypt_len) {
+ #Some payload data is present in this record
+ if ($record->decrypt_len - $recoffset >= $messlen) {
+ #We can complete the message with this record
+ $payload .= substr($record->decrypt_data, $recoffset,
+ $messlen);
+ $recoffset += $messlen;
+ push @message_frag_lens, $messlen;
+ $message = create_message($server, $mt, $payload,
+ $startoffset);
+ push @messages, $message;
+
+ $payload = "";
+ } else {
+ #This is just part of the total message
+ $payload .= substr($record->decrypt_data, $recoffset,
+ $record->decrypt_len - $recoffset);
+ $recoffset = $record->decrypt_len;
+ push @message_frag_lens, $recoffset;
+ }
+ }
+ }
+ }
+ } elsif ($record->content_type == TLSProxy::Record::RT_APPLICATION_DATA) {
+ print " [ENCRYPTED APPLICATION DATA]\n";
+ print " [".$record->decrypt_data."]\n";
+
+ if ($successondata) {
+ $success = 1;
+ $end = 1;
+ }
+ } elsif ($record->content_type == TLSProxy::Record::RT_ALERT) {
+ my ($alertlev, $alertdesc) = unpack('CC', $record->decrypt_data);
+ print " [$alertlev, $alertdesc]\n";
+ #A CloseNotify from the client indicates we have finished successfully
+ #(we assume)
+ if (!$end && !$server && $alertlev == AL_LEVEL_WARN
+ && $alertdesc == AL_DESC_CLOSE_NOTIFY) {
+ $success = 1;
+ }
+ #Fatal or close notify alerts end the test
+ if ($alertlev == AL_LEVEL_FATAL || $alertdesc == AL_DESC_CLOSE_NOTIFY) {
+ $end = 1;
+ }
+ $alert = TLSProxy::Alert->new(
+ $server,
+ $record->encrypted,
+ $alertlev,
+ $alertdesc);
+ }
+
+ return @messages;
+}
+
+#Function to work out which sub-class we need to create and then
+#construct it
+sub create_message
+{
+ my ($server, $mt, $data, $startoffset) = @_;
+ my $message;
+
+ #We only support ClientHello in this version...needs to be extended for
+ #others
+ if ($mt == MT_CLIENT_HELLO) {
+ $message = TLSProxy::ClientHello->new(
+ $server,
+ $data,
+ [@message_rec_list],
+ $startoffset,
+ [@message_frag_lens]
+ );
+ $message->parse();
+ } elsif ($mt == MT_SERVER_HELLO) {
+ $message = TLSProxy::ServerHello->new(
+ $server,
+ $data,
+ [@message_rec_list],
+ $startoffset,
+ [@message_frag_lens]
+ );
+ $message->parse();
+ } elsif ($mt == MT_ENCRYPTED_EXTENSIONS) {
+ $message = TLSProxy::EncryptedExtensions->new(
+ $server,
+ $data,
+ [@message_rec_list],
+ $startoffset,
+ [@message_frag_lens]
+ );
+ $message->parse();
+ } elsif ($mt == MT_CERTIFICATE) {
+ $message = TLSProxy::Certificate->new(
+ $server,
+ $data,
+ [@message_rec_list],
+ $startoffset,
+ [@message_frag_lens]
+ );
+ $message->parse();
+ } elsif ($mt == MT_CERTIFICATE_REQUEST) {
+ $message = TLSProxy::CertificateRequest->new(
+ $server,
+ $data,
+ [@message_rec_list],
+ $startoffset,
+ [@message_frag_lens]
+ );
+ $message->parse();
+ } elsif ($mt == MT_CERTIFICATE_VERIFY) {
+ $message = TLSProxy::CertificateVerify->new(
+ $server,
+ $data,
+ [@message_rec_list],
+ $startoffset,
+ [@message_frag_lens]
+ );
+ $message->parse();
+ } elsif ($mt == MT_SERVER_KEY_EXCHANGE) {
+ $message = TLSProxy::ServerKeyExchange->new(
+ $server,
+ $data,
+ [@message_rec_list],
+ $startoffset,
+ [@message_frag_lens]
+ );
+ $message->parse();
+ } elsif ($mt == MT_NEW_SESSION_TICKET) {
+ $message = TLSProxy::NewSessionTicket->new(
+ $server,
+ $data,
+ [@message_rec_list],
+ $startoffset,
+ [@message_frag_lens]
+ );
+ $message->parse();
+ } else {
+ #Unknown message type
+ $message = TLSProxy::Message->new(
+ $server,
+ $mt,
+ $data,
+ [@message_rec_list],
+ $startoffset,
+ [@message_frag_lens]
+ );
+ }
+
+ return $message;
+}
+
+sub end
+{
+ my $class = shift;
+ return $end;
+}
+sub success
+{
+ my $class = shift;
+ return $success;
+}
+sub fail
+{
+ my $class = shift;
+ return !$success && $end;
+}
+
+sub alert
+{
+ return $alert;
+}
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $mt,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens) = @_;
+
+ my $self = {
+ server => $server,
+ data => $data,
+ records => $records,
+ mt => $mt,
+ startoffset => $startoffset,
+ message_frag_lens => $message_frag_lens,
+ dupext => -1
+ };
+
+ return bless $self, $class;
+}
+
+sub ciphersuite
+{
+ my $class = shift;
+ if (@_) {
+ $ciphersuite = shift;
+ }
+ return $ciphersuite;
+}
+
+#Update all the underlying records with the modified data from this message
+#Note: Only supports TLSv1.3 and ETM encryption
+sub repack
+{
+ my $self = shift;
+ my $msgdata;
+
+ my $numrecs = $#{$self->records};
+
+ $self->set_message_contents();
+
+ my $lenhi;
+ my $lenlo;
+
+ $lenlo = length($self->data) & 0xff;
+ $lenhi = length($self->data) >> 8;
+ $msgdata = pack('CnC', $self->mt, $lenhi, $lenlo).$self->data;
+
+ if ($numrecs == 0) {
+ #The message is fully contained within one record
+ my ($rec) = @{$self->records};
+ my $recdata = $rec->decrypt_data;
+
+ my $old_length;
+
+ # We use empty message_frag_lens to indicates that pre-repacking,
+ # the message wasn't present. The first fragment length doesn't include
+ # the TLS header, so we need to check and compute the right length.
+ if (@{$self->message_frag_lens}) {
+ $old_length = ${$self->message_frag_lens}[0] +
+ TLS_MESSAGE_HEADER_LENGTH;
+ } else {
+ $old_length = 0;
+ }
+
+ my $prefix = substr($recdata, 0, $self->startoffset);
+ my $suffix = substr($recdata, $self->startoffset + $old_length);
+
+ $rec->decrypt_data($prefix.($msgdata).($suffix));
+ # TODO(openssl-team): don't keep explicit lengths.
+ # (If a length override is ever needed to construct invalid packets,
+ # use an explicit override field instead.)
+ $rec->decrypt_len(length($rec->decrypt_data));
+ # Only support re-encryption for TLSv1.3 and ETM.
+ if ($rec->encrypted()) {
+ if (TLSProxy::Proxy->is_tls13()) {
+ #Add content type (1 byte) and 16 tag bytes
+ $rec->data($rec->decrypt_data
+ .pack("C", TLSProxy::Record::RT_HANDSHAKE).("\0"x16));
+ } elsif ($rec->etm()) {
+ my $data = $rec->decrypt_data;
+ #Add padding
+ my $padval = length($data) % 16;
+ $padval = 15 - $padval;
+ for (0..$padval) {
+ $data .= pack("C", $padval);
+ }
+
+ #Add MAC. Assumed to be 20 bytes
+ foreach my $macval (0..19) {
+ $data .= pack("C", $macval);
+ }
+
+ if ($rec->version() >= TLSProxy::Record::VERS_TLS_1_1) {
+ #Explicit IV
+ $data = ("\0"x16).$data;
+ }
+ $rec->data($data);
+ } else {
+ die "Unsupported encryption: No ETM";
+ }
+ } else {
+ $rec->data($rec->decrypt_data);
+ }
+ $rec->len(length($rec->data));
+
+ #Update the fragment len in case we changed it above
+ ${$self->message_frag_lens}[0] = length($msgdata)
+ - TLS_MESSAGE_HEADER_LENGTH;
+ return;
+ }
+
+ #Note we don't currently support changing a fragmented message length
+ my $recctr = 0;
+ my $datadone = 0;
+ foreach my $rec (@{$self->records}) {
+ my $recdata = $rec->decrypt_data;
+ if ($recctr == 0) {
+ #This is the first record
+ my $remainlen = length($recdata) - $self->startoffset;
+ $rec->data(substr($recdata, 0, $self->startoffset)
+ .substr(($msgdata), 0, $remainlen));
+ $datadone += $remainlen;
+ } elsif ($recctr + 1 == $numrecs) {
+ #This is the last record
+ $rec->data(substr($msgdata, $datadone));
+ } else {
+ #This is a middle record
+ $rec->data(substr($msgdata, $datadone, length($rec->data)));
+ $datadone += length($rec->data);
+ }
+ $recctr++;
+ }
+}
+
+#To be overridden by sub-classes
+sub set_message_contents
+{
+}
+
+#Read only accessors
+sub server
+{
+ my $self = shift;
+ return $self->{server};
+}
+
+#Read/write accessors
+sub mt
+{
+ my $self = shift;
+ if (@_) {
+ $self->{mt} = shift;
+ }
+ return $self->{mt};
+}
+sub data
+{
+ my $self = shift;
+ if (@_) {
+ $self->{data} = shift;
+ }
+ return $self->{data};
+}
+sub records
+{
+ my $self = shift;
+ if (@_) {
+ $self->{records} = shift;
+ }
+ return $self->{records};
+}
+sub startoffset
+{
+ my $self = shift;
+ if (@_) {
+ $self->{startoffset} = shift;
+ }
+ return $self->{startoffset};
+}
+sub message_frag_lens
+{
+ my $self = shift;
+ if (@_) {
+ $self->{message_frag_lens} = shift;
+ }
+ return $self->{message_frag_lens};
+}
+sub encoded_length
+{
+ my $self = shift;
+ return TLS_MESSAGE_HEADER_LENGTH + length($self->data);
+}
+sub dupext
+{
+ my $self = shift;
+ if (@_) {
+ $self->{dupext} = shift;
+ }
+ return $self->{dupext};
+}
+sub successondata
+{
+ my $class = shift;
+ if (@_) {
+ $successondata = shift;
+ }
+ return $successondata;
+}
+1;
diff --git a/util/perl/TLSProxy/NewSessionTicket.pm b/util/perl/TLSProxy/NewSessionTicket.pm
new file mode 100644
index 000000000000..1c532ff7beef
--- /dev/null
+++ b/util/perl/TLSProxy/NewSessionTicket.pm
@@ -0,0 +1,81 @@
+# Copyright 2016 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
+
+use strict;
+
+package TLSProxy::NewSessionTicket;
+
+use vars '@ISA';
+push @ISA, 'TLSProxy::Message';
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens) = @_;
+
+ my $self = $class->SUPER::new(
+ $server,
+ TLSProxy::Message::MT_NEW_SESSION_TICKET,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens);
+
+ $self->{ticket_lifetime_hint} = 0;
+ $self->{ticket} = "";
+
+ return $self;
+}
+
+sub parse
+{
+ my $self = shift;
+
+ my $ticket_lifetime_hint = unpack('N', $self->data);
+ my $ticket_len = unpack('n', $self->data);
+ my $ticket = substr($self->data, 6, $ticket_len);
+
+ $self->ticket_lifetime_hint($ticket_lifetime_hint);
+ $self->ticket($ticket);
+}
+
+
+#Reconstruct the on-the-wire message data following changes
+sub set_message_contents
+{
+ my $self = shift;
+ my $data;
+
+ $data = pack('N', $self->ticket_lifetime_hint);
+ $data .= pack('n', length($self->ticket));
+ $data .= $self->ticket;
+
+ $self->data($data);
+}
+
+#Read/write accessors
+sub ticket_lifetime_hint
+{
+ my $self = shift;
+ if (@_) {
+ $self->{ticket_lifetime_hint} = shift;
+ }
+ return $self->{ticket_lifetime_hint};
+}
+sub ticket
+{
+ my $self = shift;
+ if (@_) {
+ $self->{ticket} = shift;
+ }
+ return $self->{ticket};
+}
+1;
diff --git a/util/perl/TLSProxy/Proxy.pm b/util/perl/TLSProxy/Proxy.pm
new file mode 100644
index 000000000000..3de10eccb94e
--- /dev/null
+++ b/util/perl/TLSProxy/Proxy.pm
@@ -0,0 +1,729 @@
+# Copyright 2016-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use POSIX ":sys_wait_h";
+
+package TLSProxy::Proxy;
+
+use File::Spec;
+use IO::Socket;
+use IO::Select;
+use TLSProxy::Record;
+use TLSProxy::Message;
+use TLSProxy::ClientHello;
+use TLSProxy::ServerHello;
+use TLSProxy::EncryptedExtensions;
+use TLSProxy::Certificate;
+use TLSProxy::CertificateRequest;
+use TLSProxy::CertificateVerify;
+use TLSProxy::ServerKeyExchange;
+use TLSProxy::NewSessionTicket;
+
+my $have_IPv6;
+my $IP_factory;
+
+BEGIN
+{
+ # IO::Socket::IP is on the core module list, IO::Socket::INET6 isn't.
+ # However, IO::Socket::INET6 is older and is said to be more widely
+ # deployed for the moment, and may have less bugs, so we try the latter
+ # first, then fall back on the core modules. Worst case scenario, we
+ # fall back to IO::Socket::INET, only supports IPv4.
+ eval {
+ require IO::Socket::INET6;
+ my $s = IO::Socket::INET6->new(
+ LocalAddr => "::1",
+ LocalPort => 0,
+ Listen=>1,
+ );
+ $s or die "\n";
+ $s->close();
+ };
+ if ($@ eq "") {
+ $IP_factory = sub { IO::Socket::INET6->new(Domain => AF_INET6, @_); };
+ $have_IPv6 = 1;
+ } else {
+ eval {
+ require IO::Socket::IP;
+ my $s = IO::Socket::IP->new(
+ LocalAddr => "::1",
+ LocalPort => 0,
+ Listen=>1,
+ );
+ $s or die "\n";
+ $s->close();
+ };
+ if ($@ eq "") {
+ $IP_factory = sub { IO::Socket::IP->new(@_); };
+ $have_IPv6 = 1;
+ } else {
+ $IP_factory = sub { IO::Socket::INET->new(@_); };
+ $have_IPv6 = 0;
+ }
+ }
+}
+
+my $is_tls13 = 0;
+my $ciphersuite = undef;
+
+sub new
+{
+ my $class = shift;
+ my ($filter,
+ $execute,
+ $cert,
+ $debug) = @_;
+
+ my $self = {
+ #Public read/write
+ proxy_addr => $have_IPv6 ? "[::1]" : "127.0.0.1",
+ filter => $filter,
+ serverflags => "",
+ clientflags => "",
+ serverconnects => 1,
+ reneg => 0,
+ sessionfile => undef,
+
+ #Public read
+ proxy_port => 0,
+ server_port => 0,
+ serverpid => 0,
+ clientpid => 0,
+ execute => $execute,
+ cert => $cert,
+ debug => $debug,
+ cipherc => "",
+ ciphersuitesc => "",
+ ciphers => "AES128-SHA",
+ ciphersuitess => "TLS_AES_128_GCM_SHA256",
+ flight => -1,
+ direction => -1,
+ partial => ["", ""],
+ record_list => [],
+ message_list => [],
+ };
+
+ # Create the Proxy socket
+ my $proxaddr = $self->{proxy_addr};
+ $proxaddr =~ s/[\[\]]//g; # Remove [ and ]
+ my @proxyargs = (
+ LocalHost => $proxaddr,
+ LocalPort => 0,
+ Proto => "tcp",
+ Listen => SOMAXCONN,
+ );
+
+ if (my $sock = $IP_factory->(@proxyargs)) {
+ $self->{proxy_sock} = $sock;
+ $self->{proxy_port} = $sock->sockport();
+ $self->{proxy_addr} = $sock->sockhost();
+ $self->{proxy_addr} =~ s/(.*:.*)/[$1]/;
+ print "Proxy started on port ",
+ "$self->{proxy_addr}:$self->{proxy_port}\n";
+ # use same address for s_server
+ $self->{server_addr} = $self->{proxy_addr};
+ } else {
+ warn "Failed creating proxy socket (".$proxaddr.",0): $!\n";
+ }
+
+ return bless $self, $class;
+}
+
+sub DESTROY
+{
+ my $self = shift;
+
+ $self->{proxy_sock}->close() if $self->{proxy_sock};
+}
+
+sub clearClient
+{
+ my $self = shift;
+
+ $self->{cipherc} = "";
+ $self->{ciphersuitec} = "";
+ $self->{flight} = -1;
+ $self->{direction} = -1;
+ $self->{partial} = ["", ""];
+ $self->{record_list} = [];
+ $self->{message_list} = [];
+ $self->{clientflags} = "";
+ $self->{sessionfile} = undef;
+ $self->{clientpid} = 0;
+ $is_tls13 = 0;
+ $ciphersuite = undef;
+
+ TLSProxy::Message->clear();
+ TLSProxy::Record->clear();
+}
+
+sub clear
+{
+ my $self = shift;
+
+ $self->clearClient;
+ $self->{ciphers} = "AES128-SHA";
+ $self->{ciphersuitess} = "TLS_AES_128_GCM_SHA256";
+ $self->{serverflags} = "";
+ $self->{serverconnects} = 1;
+ $self->{serverpid} = 0;
+ $self->{reneg} = 0;
+}
+
+sub restart
+{
+ my $self = shift;
+
+ $self->clear;
+ $self->start;
+}
+
+sub clientrestart
+{
+ my $self = shift;
+
+ $self->clear;
+ $self->clientstart;
+}
+
+sub connect_to_server
+{
+ my $self = shift;
+ my $servaddr = $self->{server_addr};
+
+ $servaddr =~ s/[\[\]]//g; # Remove [ and ]
+
+ my $sock = $IP_factory->(PeerAddr => $servaddr,
+ PeerPort => $self->{server_port},
+ Proto => 'tcp');
+ if (!defined($sock)) {
+ my $err = $!;
+ kill(3, $self->{real_serverpid});
+ die "unable to connect: $err\n";
+ }
+
+ $self->{server_sock} = $sock;
+}
+
+sub start
+{
+ my ($self) = shift;
+ my $pid;
+
+ if ($self->{proxy_sock} == 0) {
+ return 0;
+ }
+
+ my $execcmd = $self->execute
+ ." s_server -max_protocol TLSv1.3 -no_comp -rev -engine ossltest"
+ #In TLSv1.3 we issue two session tickets. The default session id
+ #callback gets confused because the ossltest engine causes the same
+ #session id to be created twice due to the changed random number
+ #generation. Using "-ext_cache" replaces the default callback with a
+ #different one that doesn't get confused.
+ ." -ext_cache"
+ ." -accept $self->{server_addr}:0"
+ ." -cert ".$self->cert." -cert2 ".$self->cert
+ ." -naccept ".$self->serverconnects;
+ if ($self->ciphers ne "") {
+ $execcmd .= " -cipher ".$self->ciphers;
+ }
+ if ($self->ciphersuitess ne "") {
+ $execcmd .= " -ciphersuites ".$self->ciphersuitess;
+ }
+ if ($self->serverflags ne "") {
+ $execcmd .= " ".$self->serverflags;
+ }
+ if ($self->debug) {
+ print STDERR "Server command: $execcmd\n";
+ }
+
+ open(my $savedin, "<&STDIN");
+
+ # Temporarily replace STDIN so that sink process can inherit it...
+ $pid = open(STDIN, "$execcmd 2>&1 |") or die "Failed to $execcmd: $!\n";
+ $self->{real_serverpid} = $pid;
+
+ # Process the output from s_server until we find the ACCEPT line, which
+ # tells us what the accepting address and port are.
+ while (<>) {
+ print;
+ s/\R$//; # Better chomp
+ next unless (/^ACCEPT\s.*:(\d+)$/);
+ $self->{server_port} = $1;
+ last;
+ }
+
+ if ($self->{server_port} == 0) {
+ # This actually means that s_server exited, because otherwise
+ # we would still searching for ACCEPT...
+ waitpid($pid, 0);
+ die "no ACCEPT detected in '$execcmd' output: $?\n";
+ }
+
+ # Just make sure everything else is simply printed [as separate lines].
+ # The sub process simply inherits our STD* and will keep consuming
+ # server's output and printing it as long as there is anything there,
+ # out of our way.
+ my $error;
+ $pid = undef;
+ if (eval { require Win32::Process; 1; }) {
+ if (Win32::Process::Create(my $h, $^X, "perl -ne print", 0, 0, ".")) {
+ $pid = $h->GetProcessID();
+ $self->{proc_handle} = $h; # hold handle till next round [or exit]
+ } else {
+ $error = Win32::FormatMessage(Win32::GetLastError());
+ }
+ } else {
+ if (defined($pid = fork)) {
+ $pid or exec("$^X -ne print") or exit($!);
+ } else {
+ $error = $!;
+ }
+ }
+
+ # Change back to original stdin
+ open(STDIN, "<&", $savedin);
+ close($savedin);
+
+ if (!defined($pid)) {
+ kill(3, $self->{real_serverpid});
+ die "Failed to capture s_server's output: $error\n";
+ }
+
+ $self->{serverpid} = $pid;
+
+ print STDERR "Server responds on ",
+ "$self->{server_addr}:$self->{server_port}\n";
+
+ # Connect right away...
+ $self->connect_to_server();
+
+ return $self->clientstart;
+}
+
+sub clientstart
+{
+ my ($self) = shift;
+
+ if ($self->execute) {
+ my $pid;
+ my $execcmd = $self->execute
+ ." s_client -max_protocol TLSv1.3 -engine ossltest"
+ ." -connect $self->{proxy_addr}:$self->{proxy_port}";
+ if ($self->cipherc ne "") {
+ $execcmd .= " -cipher ".$self->cipherc;
+ }
+ if ($self->ciphersuitesc ne "") {
+ $execcmd .= " -ciphersuites ".$self->ciphersuitesc;
+ }
+ if ($self->clientflags ne "") {
+ $execcmd .= " ".$self->clientflags;
+ }
+ if ($self->clientflags !~ m/-(no)?servername/) {
+ $execcmd .= " -servername localhost";
+ }
+ if (defined $self->sessionfile) {
+ $execcmd .= " -ign_eof";
+ }
+ if ($self->debug) {
+ print STDERR "Client command: $execcmd\n";
+ }
+
+ open(my $savedout, ">&STDOUT");
+ # If we open pipe with new descriptor, attempt to close it,
+ # explicitly or implicitly, would incur waitpid and effectively
+ # dead-lock...
+ if (!($pid = open(STDOUT, "| $execcmd"))) {
+ my $err = $!;
+ kill(3, $self->{real_serverpid});
+ die "Failed to $execcmd: $err\n";
+ }
+ $self->{clientpid} = $pid;
+
+ # queue [magic] input
+ print $self->reneg ? "R" : "test";
+
+ # this closes client's stdin without waiting for its pid
+ open(STDOUT, ">&", $savedout);
+ close($savedout);
+ }
+
+ # Wait for incoming connection from client
+ my $fdset = IO::Select->new($self->{proxy_sock});
+ if (!$fdset->can_read(60)) {
+ kill(3, $self->{real_serverpid});
+ die "s_client didn't try to connect\n";
+ }
+
+ my $client_sock;
+ if(!($client_sock = $self->{proxy_sock}->accept())) {
+ warn "Failed accepting incoming connection: $!\n";
+ return 0;
+ }
+
+ print "Connection opened\n";
+
+ my $server_sock = $self->{server_sock};
+ my $indata;
+
+ #Wait for either the server socket or the client socket to become readable
+ $fdset = IO::Select->new($server_sock, $client_sock);
+ my @ready;
+ my $ctr = 0;
+ local $SIG{PIPE} = "IGNORE";
+ $self->{saw_session_ticket} = undef;
+ while($fdset->count && $ctr < 10) {
+ if (defined($self->{sessionfile})) {
+ # s_client got -ign_eof and won't be exiting voluntarily, so we
+ # look for data *and* session ticket...
+ last if TLSProxy::Message->success()
+ && $self->{saw_session_ticket};
+ }
+ if (!(@ready = $fdset->can_read(1))) {
+ $ctr++;
+ next;
+ }
+ foreach my $hand (@ready) {
+ if ($hand == $server_sock) {
+ if ($server_sock->sysread($indata, 16384)) {
+ if ($indata = $self->process_packet(1, $indata)) {
+ $client_sock->syswrite($indata) or goto END;
+ }
+ $ctr = 0;
+ } else {
+ $fdset->remove($server_sock);
+ $client_sock->shutdown(SHUT_WR);
+ }
+ } elsif ($hand == $client_sock) {
+ if ($client_sock->sysread($indata, 16384)) {
+ if ($indata = $self->process_packet(0, $indata)) {
+ $server_sock->syswrite($indata) or goto END;
+ }
+ $ctr = 0;
+ } else {
+ $fdset->remove($client_sock);
+ $server_sock->shutdown(SHUT_WR);
+ }
+ } else {
+ kill(3, $self->{real_serverpid});
+ die "Unexpected handle";
+ }
+ }
+ }
+
+ if ($ctr >= 10) {
+ kill(3, $self->{real_serverpid});
+ die "No progress made";
+ }
+
+ END:
+ print "Connection closed\n";
+ if($server_sock) {
+ $server_sock->close();
+ $self->{server_sock} = undef;
+ }
+ if($client_sock) {
+ #Closing this also kills the child process
+ $client_sock->close();
+ }
+
+ my $pid;
+ if (--$self->{serverconnects} == 0) {
+ $pid = $self->{serverpid};
+ print "Waiting for 'perl -ne print' process to close: $pid...\n";
+ $pid = waitpid($pid, 0);
+ if ($pid > 0) {
+ die "exit code $? from 'perl -ne print' process\n" if $? != 0;
+ } elsif ($pid == 0) {
+ kill(3, $self->{real_serverpid});
+ die "lost control over $self->{serverpid}?";
+ }
+ $pid = $self->{real_serverpid};
+ print "Waiting for s_server process to close: $pid...\n";
+ # it's done already, just collect the exit code [and reap]...
+ waitpid($pid, 0);
+ die "exit code $? from s_server process\n" if $? != 0;
+ } else {
+ # It's a bit counter-intuitive spot to make next connection to
+ # the s_server. Rationale is that established connection works
+ # as synchronization point, in sense that this way we know that
+ # s_server is actually done with current session...
+ $self->connect_to_server();
+ }
+ $pid = $self->{clientpid};
+ print "Waiting for s_client process to close: $pid...\n";
+ waitpid($pid, 0);
+
+ return 1;
+}
+
+sub process_packet
+{
+ my ($self, $server, $packet) = @_;
+ my $len_real;
+ my $decrypt_len;
+ my $data;
+ my $recnum;
+
+ if ($server) {
+ print "Received server packet\n";
+ } else {
+ print "Received client packet\n";
+ }
+
+ if ($self->{direction} != $server) {
+ $self->{flight} = $self->{flight} + 1;
+ $self->{direction} = $server;
+ }
+
+ print "Packet length = ".length($packet)."\n";
+ print "Processing flight ".$self->flight."\n";
+
+ #Return contains the list of record found in the packet followed by the
+ #list of messages in those records and any partial message
+ my @ret = TLSProxy::Record->get_records($server, $self->flight,
+ $self->{partial}[$server].$packet);
+ $self->{partial}[$server] = $ret[2];
+ push @{$self->{record_list}}, @{$ret[0]};
+ push @{$self->{message_list}}, @{$ret[1]};
+
+ print "\n";
+
+ if (scalar(@{$ret[0]}) == 0 or length($ret[2]) != 0) {
+ return "";
+ }
+
+ #Finished parsing. Call user provided filter here
+ if (defined $self->filter) {
+ $self->filter->($self);
+ }
+
+ #Take a note on NewSessionTicket
+ foreach my $message (reverse @{$self->{message_list}}) {
+ if ($message->{mt} == TLSProxy::Message::MT_NEW_SESSION_TICKET) {
+ $self->{saw_session_ticket} = 1;
+ last;
+ }
+ }
+
+ #Reconstruct the packet
+ $packet = "";
+ foreach my $record (@{$self->record_list}) {
+ $packet .= $record->reconstruct_record($server);
+ }
+
+ print "Forwarded packet length = ".length($packet)."\n\n";
+
+ return $packet;
+}
+
+#Read accessors
+sub execute
+{
+ my $self = shift;
+ return $self->{execute};
+}
+sub cert
+{
+ my $self = shift;
+ return $self->{cert};
+}
+sub debug
+{
+ my $self = shift;
+ return $self->{debug};
+}
+sub flight
+{
+ my $self = shift;
+ return $self->{flight};
+}
+sub record_list
+{
+ my $self = shift;
+ return $self->{record_list};
+}
+sub success
+{
+ my $self = shift;
+ return $self->{success};
+}
+sub end
+{
+ my $self = shift;
+ return $self->{end};
+}
+sub supports_IPv6
+{
+ my $self = shift;
+ return $have_IPv6;
+}
+sub proxy_addr
+{
+ my $self = shift;
+ return $self->{proxy_addr};
+}
+sub proxy_port
+{
+ my $self = shift;
+ return $self->{proxy_port};
+}
+sub server_addr
+{
+ my $self = shift;
+ return $self->{server_addr};
+}
+sub server_port
+{
+ my $self = shift;
+ return $self->{server_port};
+}
+sub serverpid
+{
+ my $self = shift;
+ return $self->{serverpid};
+}
+sub clientpid
+{
+ my $self = shift;
+ return $self->{clientpid};
+}
+
+#Read/write accessors
+sub filter
+{
+ my $self = shift;
+ if (@_) {
+ $self->{filter} = shift;
+ }
+ return $self->{filter};
+}
+sub cipherc
+{
+ my $self = shift;
+ if (@_) {
+ $self->{cipherc} = shift;
+ }
+ return $self->{cipherc};
+}
+sub ciphersuitesc
+{
+ my $self = shift;
+ if (@_) {
+ $self->{ciphersuitesc} = shift;
+ }
+ return $self->{ciphersuitesc};
+}
+sub ciphers
+{
+ my $self = shift;
+ if (@_) {
+ $self->{ciphers} = shift;
+ }
+ return $self->{ciphers};
+}
+sub ciphersuitess
+{
+ my $self = shift;
+ if (@_) {
+ $self->{ciphersuitess} = shift;
+ }
+ return $self->{ciphersuitess};
+}
+sub serverflags
+{
+ my $self = shift;
+ if (@_) {
+ $self->{serverflags} = shift;
+ }
+ return $self->{serverflags};
+}
+sub clientflags
+{
+ my $self = shift;
+ if (@_) {
+ $self->{clientflags} = shift;
+ }
+ return $self->{clientflags};
+}
+sub serverconnects
+{
+ my $self = shift;
+ if (@_) {
+ $self->{serverconnects} = shift;
+ }
+ return $self->{serverconnects};
+}
+# This is a bit ugly because the caller is responsible for keeping the records
+# in sync with the updated message list; simply updating the message list isn't
+# sufficient to get the proxy to forward the new message.
+# But it does the trick for the one test (test_sslsessiontick) that needs it.
+sub message_list
+{
+ my $self = shift;
+ if (@_) {
+ $self->{message_list} = shift;
+ }
+ return $self->{message_list};
+}
+
+sub fill_known_data
+{
+ my $length = shift;
+ my $ret = "";
+ for (my $i = 0; $i < $length; $i++) {
+ $ret .= chr($i);
+ }
+ return $ret;
+}
+
+sub is_tls13
+{
+ my $class = shift;
+ if (@_) {
+ $is_tls13 = shift;
+ }
+ return $is_tls13;
+}
+
+sub reneg
+{
+ my $self = shift;
+ if (@_) {
+ $self->{reneg} = shift;
+ }
+ return $self->{reneg};
+}
+
+#Setting a sessionfile means that the client will not close until the given
+#file exists. This is useful in TLSv1.3 where otherwise s_client will close
+#immediately at the end of the handshake, but before the session has been
+#received from the server. A side effect of this is that s_client never sends
+#a close_notify, so instead we consider success to be when it sends application
+#data over the connection.
+sub sessionfile
+{
+ my $self = shift;
+ if (@_) {
+ $self->{sessionfile} = shift;
+ TLSProxy::Message->successondata(1);
+ }
+ return $self->{sessionfile};
+}
+
+sub ciphersuite
+{
+ my $class = shift;
+ if (@_) {
+ $ciphersuite = shift;
+ }
+ return $ciphersuite;
+}
+
+1;
diff --git a/util/perl/TLSProxy/Record.pm b/util/perl/TLSProxy/Record.pm
new file mode 100644
index 000000000000..183aa0569798
--- /dev/null
+++ b/util/perl/TLSProxy/Record.pm
@@ -0,0 +1,401 @@
+# Copyright 2016-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+
+use TLSProxy::Proxy;
+
+package TLSProxy::Record;
+
+my $server_encrypting = 0;
+my $client_encrypting = 0;
+my $etm = 0;
+
+use constant TLS_RECORD_HEADER_LENGTH => 5;
+
+#Record types
+use constant {
+ RT_APPLICATION_DATA => 23,
+ RT_HANDSHAKE => 22,
+ RT_ALERT => 21,
+ RT_CCS => 20,
+ RT_UNKNOWN => 100
+};
+
+my %record_type = (
+ RT_APPLICATION_DATA, "APPLICATION DATA",
+ RT_HANDSHAKE, "HANDSHAKE",
+ RT_ALERT, "ALERT",
+ RT_CCS, "CCS",
+ RT_UNKNOWN, "UNKNOWN"
+);
+
+use constant {
+ VERS_TLS_1_4 => 0x0305,
+ VERS_TLS_1_3 => 0x0304,
+ VERS_TLS_1_2 => 0x0303,
+ VERS_TLS_1_1 => 0x0302,
+ VERS_TLS_1_0 => 0x0301,
+ VERS_SSL_3_0 => 0x0300,
+ VERS_SSL_LT_3_0 => 0x02ff
+};
+
+my %tls_version = (
+ VERS_TLS_1_3, "TLS1.3",
+ VERS_TLS_1_2, "TLS1.2",
+ VERS_TLS_1_1, "TLS1.1",
+ VERS_TLS_1_0, "TLS1.0",
+ VERS_SSL_3_0, "SSL3",
+ VERS_SSL_LT_3_0, "SSL<3"
+);
+
+#Class method to extract records from a packet of data
+sub get_records
+{
+ my $class = shift;
+ my $server = shift;
+ my $flight = shift;
+ my $packet = shift;
+ my $partial = "";
+ my @record_list = ();
+ my @message_list = ();
+
+ my $recnum = 1;
+ while (length ($packet) > 0) {
+ print " Record $recnum ", $server ? "(server -> client)\n"
+ : "(client -> server)\n";
+
+ #Get the record header (unpack can't fail if $packet is too short)
+ my ($content_type, $version, $len) = unpack('Cnn', $packet);
+
+ if (length($packet) < TLS_RECORD_HEADER_LENGTH + ($len // 0)) {
+ print "Partial data : ".length($packet)." bytes\n";
+ $partial = $packet;
+ last;
+ }
+
+ my $data = substr($packet, TLS_RECORD_HEADER_LENGTH, $len);
+
+ print " Content type: ".$record_type{$content_type}."\n";
+ print " Version: $tls_version{$version}\n";
+ print " Length: $len\n";
+
+ my $record = TLSProxy::Record->new(
+ $flight,
+ $content_type,
+ $version,
+ $len,
+ 0,
+ $len, # len_real
+ $len, # decrypt_len
+ $data, # data
+ $data # decrypt_data
+ );
+
+ if ($content_type != RT_CCS
+ && (!TLSProxy::Proxy->is_tls13()
+ || $content_type != RT_ALERT)) {
+ if (($server && $server_encrypting)
+ || (!$server && $client_encrypting)) {
+ if (!TLSProxy::Proxy->is_tls13() && $etm) {
+ $record->decryptETM();
+ } else {
+ $record->decrypt();
+ }
+ $record->encrypted(1);
+
+ if (TLSProxy::Proxy->is_tls13()) {
+ print " Inner content type: "
+ .$record_type{$record->content_type()}."\n";
+ }
+ }
+ }
+
+ push @record_list, $record;
+
+ #Now figure out what messages are contained within this record
+ my @messages = TLSProxy::Message->get_messages($server, $record);
+ push @message_list, @messages;
+
+ $packet = substr($packet, TLS_RECORD_HEADER_LENGTH + $len);
+ $recnum++;
+ }
+
+ return (\@record_list, \@message_list, $partial);
+}
+
+sub clear
+{
+ $server_encrypting = 0;
+ $client_encrypting = 0;
+}
+
+#Class level accessors
+sub server_encrypting
+{
+ my $class = shift;
+ if (@_) {
+ $server_encrypting = shift;
+ }
+ return $server_encrypting;
+}
+sub client_encrypting
+{
+ my $class = shift;
+ if (@_) {
+ $client_encrypting= shift;
+ }
+ return $client_encrypting;
+}
+#Enable/Disable Encrypt-then-MAC
+sub etm
+{
+ my $class = shift;
+ if (@_) {
+ $etm = shift;
+ }
+ return $etm;
+}
+
+sub new
+{
+ my $class = shift;
+ my ($flight,
+ $content_type,
+ $version,
+ $len,
+ $sslv2,
+ $len_real,
+ $decrypt_len,
+ $data,
+ $decrypt_data) = @_;
+
+ my $self = {
+ flight => $flight,
+ content_type => $content_type,
+ version => $version,
+ len => $len,
+ sslv2 => $sslv2,
+ len_real => $len_real,
+ decrypt_len => $decrypt_len,
+ data => $data,
+ decrypt_data => $decrypt_data,
+ orig_decrypt_data => $decrypt_data,
+ sent => 0,
+ encrypted => 0,
+ outer_content_type => RT_APPLICATION_DATA
+ };
+
+ return bless $self, $class;
+}
+
+#Decrypt using encrypt-then-MAC
+sub decryptETM
+{
+ my ($self) = shift;
+
+ my $data = $self->data;
+
+ if($self->version >= VERS_TLS_1_1()) {
+ #TLS1.1+ has an explicit IV. Throw it away
+ $data = substr($data, 16);
+ }
+
+ #Throw away the MAC (assumes MAC is 20 bytes for now. FIXME)
+ $data = substr($data, 0, length($data) - 20);
+
+ #Find out what the padding byte is
+ my $padval = unpack("C", substr($data, length($data) - 1));
+
+ #Throw away the padding
+ $data = substr($data, 0, length($data) - ($padval + 1));
+
+ $self->decrypt_data($data);
+ $self->decrypt_len(length($data));
+
+ return $data;
+}
+
+#Standard decrypt
+sub decrypt()
+{
+ my ($self) = shift;
+ my $mactaglen = 20;
+ my $data = $self->data;
+
+ #Throw away any IVs
+ if (TLSProxy::Proxy->is_tls13()) {
+ #A TLS1.3 client, when processing the server's initial flight, could
+ #respond with either an encrypted or an unencrypted alert.
+ if ($self->content_type() == RT_ALERT) {
+ #TODO(TLS1.3): Eventually it is sufficient just to check the record
+ #content type. If an alert is encrypted it will have a record
+ #content type of application data. However we haven't done the
+ #record layer changes yet, so it's a bit more complicated. For now
+ #we will additionally check if the data length is 2 (1 byte for
+ #alert level, 1 byte for alert description). If it is, then this is
+ #an unencrypted alert, so don't try to decrypt
+ return $data if (length($data) == 2);
+ }
+ $mactaglen = 16;
+ } elsif ($self->version >= VERS_TLS_1_1()) {
+ #16 bytes for a standard IV
+ $data = substr($data, 16);
+
+ #Find out what the padding byte is
+ my $padval = unpack("C", substr($data, length($data) - 1));
+
+ #Throw away the padding
+ $data = substr($data, 0, length($data) - ($padval + 1));
+ }
+
+ #Throw away the MAC or TAG
+ $data = substr($data, 0, length($data) - $mactaglen);
+
+ if (TLSProxy::Proxy->is_tls13()) {
+ #Get the content type
+ my $content_type = unpack("C", substr($data, length($data) - 1));
+ $self->content_type($content_type);
+ $data = substr($data, 0, length($data) - 1);
+ }
+
+ $self->decrypt_data($data);
+ $self->decrypt_len(length($data));
+
+ return $data;
+}
+
+#Reconstruct the on-the-wire record representation
+sub reconstruct_record
+{
+ my $self = shift;
+ my $server = shift;
+ my $data;
+
+ #We only replay the records in the same direction
+ if ($self->{sent} || ($self->flight & 1) != $server) {
+ return "";
+ }
+ $self->{sent} = 1;
+
+ if ($self->sslv2) {
+ $data = pack('n', $self->len | 0x8000);
+ } else {
+ if (TLSProxy::Proxy->is_tls13() && $self->encrypted) {
+ $data = pack('Cnn', $self->outer_content_type, $self->version,
+ $self->len);
+ } else {
+ $data = pack('Cnn', $self->content_type, $self->version,
+ $self->len);
+ }
+
+ }
+ $data .= $self->data;
+
+ return $data;
+}
+
+#Read only accessors
+sub flight
+{
+ my $self = shift;
+ return $self->{flight};
+}
+sub sslv2
+{
+ my $self = shift;
+ return $self->{sslv2};
+}
+sub len_real
+{
+ my $self = shift;
+ return $self->{len_real};
+}
+sub orig_decrypt_data
+{
+ my $self = shift;
+ return $self->{orig_decrypt_data};
+}
+
+#Read/write accessors
+sub decrypt_len
+{
+ my $self = shift;
+ if (@_) {
+ $self->{decrypt_len} = shift;
+ }
+ return $self->{decrypt_len};
+}
+sub data
+{
+ my $self = shift;
+ if (@_) {
+ $self->{data} = shift;
+ }
+ return $self->{data};
+}
+sub decrypt_data
+{
+ my $self = shift;
+ if (@_) {
+ $self->{decrypt_data} = shift;
+ }
+ return $self->{decrypt_data};
+}
+sub len
+{
+ my $self = shift;
+ if (@_) {
+ $self->{len} = shift;
+ }
+ return $self->{len};
+}
+sub version
+{
+ my $self = shift;
+ if (@_) {
+ $self->{version} = shift;
+ }
+ return $self->{version};
+}
+sub content_type
+{
+ my $self = shift;
+ if (@_) {
+ $self->{content_type} = shift;
+ }
+ return $self->{content_type};
+}
+sub encrypted
+{
+ my $self = shift;
+ if (@_) {
+ $self->{encrypted} = shift;
+ }
+ return $self->{encrypted};
+}
+sub outer_content_type
+{
+ my $self = shift;
+ if (@_) {
+ $self->{outer_content_type} = shift;
+ }
+ return $self->{outer_content_type};
+}
+sub is_fatal_alert
+{
+ my $self = shift;
+ my $server = shift;
+
+ if (($self->{flight} & 1) == $server
+ && $self->{content_type} == TLSProxy::Record::RT_ALERT) {
+ my ($level, $alert) = unpack('CC', $self->decrypt_data);
+ return $alert if ($level == 2);
+ }
+ return 0;
+}
+1;
diff --git a/util/perl/TLSProxy/ServerHello.pm b/util/perl/TLSProxy/ServerHello.pm
new file mode 100644
index 000000000000..ab7f2c8f8ab0
--- /dev/null
+++ b/util/perl/TLSProxy/ServerHello.pm
@@ -0,0 +1,236 @@
+# Copyright 2016-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+
+package TLSProxy::ServerHello;
+
+use vars '@ISA';
+push @ISA, 'TLSProxy::Message';
+
+my $hrrrandom = pack("C*", 0xCF, 0x21, 0xAD, 0x74, 0xE5, 0x9A, 0x61, 0x11, 0xBE,
+ 0x1D, 0x8C, 0x02, 0x1E, 0x65, 0xB8, 0x91, 0xC2, 0xA2,
+ 0x11, 0x16, 0x7A, 0xBB, 0x8C, 0x5E, 0x07, 0x9E, 0x09,
+ 0xE2, 0xC8, 0xA8, 0x33, 0x9C);
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens) = @_;
+
+ my $self = $class->SUPER::new(
+ $server,
+ TLSProxy::Message::MT_SERVER_HELLO,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens);
+
+ $self->{server_version} = 0;
+ $self->{random} = [];
+ $self->{session_id_len} = 0;
+ $self->{session} = "";
+ $self->{ciphersuite} = 0;
+ $self->{comp_meth} = 0;
+ $self->{extension_data} = "";
+
+ return $self;
+}
+
+sub parse
+{
+ my $self = shift;
+ my $ptr = 2;
+ my ($server_version) = unpack('n', $self->data);
+ my $neg_version = $server_version;
+
+ my $random = substr($self->data, $ptr, 32);
+ $ptr += 32;
+ my $session_id_len = 0;
+ my $session = "";
+ $session_id_len = unpack('C', substr($self->data, $ptr));
+ $ptr++;
+ $session = substr($self->data, $ptr, $session_id_len);
+ $ptr += $session_id_len;
+
+ my $ciphersuite = unpack('n', substr($self->data, $ptr));
+ $ptr += 2;
+ my $comp_meth = 0;
+ $comp_meth = unpack('C', substr($self->data, $ptr));
+ $ptr++;
+
+ my $extensions_len = unpack('n', substr($self->data, $ptr));
+ if (!defined $extensions_len) {
+ $extensions_len = 0;
+ } else {
+ $ptr += 2;
+ }
+ #For now we just deal with this as a block of data. In the future we will
+ #want to parse this
+ my $extension_data;
+ if ($extensions_len != 0) {
+ $extension_data = substr($self->data, $ptr);
+
+ if (length($extension_data) != $extensions_len) {
+ die "Invalid extension length\n";
+ }
+ } else {
+ if (length($self->data) != $ptr) {
+ die "Invalid extension length\n";
+ }
+ $extension_data = "";
+ }
+ my %extensions = ();
+ while (length($extension_data) >= 4) {
+ my ($type, $size) = unpack("nn", $extension_data);
+ my $extdata = substr($extension_data, 4, $size);
+ $extension_data = substr($extension_data, 4 + $size);
+ $extensions{$type} = $extdata;
+ if ($type == TLSProxy::Message::EXT_SUPPORTED_VERSIONS) {
+ $neg_version = unpack('n', $extdata);
+ }
+ }
+
+ if ($random eq $hrrrandom) {
+ TLSProxy::Proxy->is_tls13(1);
+ } elsif ($neg_version == TLSProxy::Record::VERS_TLS_1_3) {
+ TLSProxy::Proxy->is_tls13(1);
+
+ TLSProxy::Record->server_encrypting(1);
+ TLSProxy::Record->client_encrypting(1);
+ }
+
+ $self->server_version($server_version);
+ $self->random($random);
+ $self->session_id_len($session_id_len);
+ $self->session($session);
+ $self->ciphersuite($ciphersuite);
+ TLSProxy::Proxy->ciphersuite($ciphersuite);
+ $self->comp_meth($comp_meth);
+ $self->extension_data(\%extensions);
+
+ $self->process_data();
+
+
+ print " Server Version:".$server_version."\n";
+ print " Session ID Len:".$session_id_len."\n";
+ print " Ciphersuite:".$ciphersuite."\n";
+ print " Compression Method:".$comp_meth."\n";
+ print " Extensions Len:".$extensions_len."\n";
+}
+
+#Perform any actions necessary based on the data we've seen
+sub process_data
+{
+ my $self = shift;
+
+ TLSProxy::Message->ciphersuite($self->ciphersuite);
+}
+
+#Reconstruct the on-the-wire message data following changes
+sub set_message_contents
+{
+ my $self = shift;
+ my $data;
+ my $extensions = "";
+
+ $data = pack('n', $self->server_version);
+ $data .= $self->random;
+ $data .= pack('C', $self->session_id_len);
+ $data .= $self->session;
+ $data .= pack('n', $self->ciphersuite);
+ $data .= pack('C', $self->comp_meth);
+
+ foreach my $key (keys %{$self->extension_data}) {
+ my $extdata = ${$self->extension_data}{$key};
+ $extensions .= pack("n", $key);
+ $extensions .= pack("n", length($extdata));
+ $extensions .= $extdata;
+ if ($key == $self->dupext) {
+ $extensions .= pack("n", $key);
+ $extensions .= pack("n", length($extdata));
+ $extensions .= $extdata;
+ }
+ }
+
+ $data .= pack('n', length($extensions));
+ $data .= $extensions;
+ $self->data($data);
+}
+
+#Read/write accessors
+sub server_version
+{
+ my $self = shift;
+ if (@_) {
+ $self->{server_version} = shift;
+ }
+ return $self->{server_version};
+}
+sub random
+{
+ my $self = shift;
+ if (@_) {
+ $self->{random} = shift;
+ }
+ return $self->{random};
+}
+sub session_id_len
+{
+ my $self = shift;
+ if (@_) {
+ $self->{session_id_len} = shift;
+ }
+ return $self->{session_id_len};
+}
+sub session
+{
+ my $self = shift;
+ if (@_) {
+ $self->{session} = shift;
+ }
+ return $self->{session};
+}
+sub ciphersuite
+{
+ my $self = shift;
+ if (@_) {
+ $self->{ciphersuite} = shift;
+ }
+ return $self->{ciphersuite};
+}
+sub comp_meth
+{
+ my $self = shift;
+ if (@_) {
+ $self->{comp_meth} = shift;
+ }
+ return $self->{comp_meth};
+}
+sub extension_data
+{
+ my $self = shift;
+ if (@_) {
+ $self->{extension_data} = shift;
+ }
+ return $self->{extension_data};
+}
+sub set_extension
+{
+ my ($self, $ext_type, $ext_data) = @_;
+ $self->{extension_data}{$ext_type} = $ext_data;
+}
+sub delete_extension
+{
+ my ($self, $ext_type) = @_;
+ delete $self->{extension_data}{$ext_type};
+}
+1;
diff --git a/util/perl/TLSProxy/ServerKeyExchange.pm b/util/perl/TLSProxy/ServerKeyExchange.pm
new file mode 100644
index 000000000000..e694c15158c2
--- /dev/null
+++ b/util/perl/TLSProxy/ServerKeyExchange.pm
@@ -0,0 +1,157 @@
+# Copyright 2016 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
+
+use strict;
+
+package TLSProxy::ServerKeyExchange;
+
+use vars '@ISA';
+push @ISA, 'TLSProxy::Message';
+
+sub new
+{
+ my $class = shift;
+ my ($server,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens) = @_;
+
+ my $self = $class->SUPER::new(
+ $server,
+ TLSProxy::Message::MT_SERVER_KEY_EXCHANGE,
+ $data,
+ $records,
+ $startoffset,
+ $message_frag_lens);
+
+ #DHE
+ $self->{p} = "";
+ $self->{g} = "";
+ $self->{pub_key} = "";
+ $self->{sigalg} = -1;
+ $self->{sig} = "";
+
+ return $self;
+}
+
+sub parse
+{
+ my $self = shift;
+ my $sigalg = -1;
+
+ #Minimal SKE parsing. Only supports one known DHE ciphersuite at the moment
+ return if TLSProxy::Proxy->ciphersuite()
+ != TLSProxy::Message::CIPHER_ADH_AES_128_SHA
+ && TLSProxy::Proxy->ciphersuite()
+ != TLSProxy::Message::CIPHER_DHE_RSA_AES_128_SHA;
+
+ my $p_len = unpack('n', $self->data);
+ my $ptr = 2;
+ my $p = substr($self->data, $ptr, $p_len);
+ $ptr += $p_len;
+
+ my $g_len = unpack('n', substr($self->data, $ptr));
+ $ptr += 2;
+ my $g = substr($self->data, $ptr, $g_len);
+ $ptr += $g_len;
+
+ my $pub_key_len = unpack('n', substr($self->data, $ptr));
+ $ptr += 2;
+ my $pub_key = substr($self->data, $ptr, $pub_key_len);
+ $ptr += $pub_key_len;
+
+ #We assume its signed
+ my $record = ${$self->records}[0];
+
+ if (TLSProxy::Proxy->is_tls13()
+ || $record->version() == TLSProxy::Record::VERS_TLS_1_2) {
+ $sigalg = unpack('n', substr($self->data, $ptr));
+ $ptr += 2;
+ }
+ my $sig = "";
+ if (defined $sigalg) {
+ my $sig_len = unpack('n', substr($self->data, $ptr));
+ if (defined $sig_len) {
+ $ptr += 2;
+ $sig = substr($self->data, $ptr, $sig_len);
+ $ptr += $sig_len;
+ }
+ }
+
+ $self->p($p);
+ $self->g($g);
+ $self->pub_key($pub_key);
+ $self->sigalg($sigalg) if defined $sigalg;
+ $self->signature($sig);
+}
+
+
+#Reconstruct the on-the-wire message data following changes
+sub set_message_contents
+{
+ my $self = shift;
+ my $data;
+
+ $data = pack('n', length($self->p));
+ $data .= $self->p;
+ $data .= pack('n', length($self->g));
+ $data .= $self->g;
+ $data .= pack('n', length($self->pub_key));
+ $data .= $self->pub_key;
+ $data .= pack('n', $self->sigalg) if ($self->sigalg != -1);
+ if (length($self->signature) > 0) {
+ $data .= pack('n', length($self->signature));
+ $data .= $self->signature;
+ }
+
+ $self->data($data);
+}
+
+#Read/write accessors
+#DHE
+sub p
+{
+ my $self = shift;
+ if (@_) {
+ $self->{p} = shift;
+ }
+ return $self->{p};
+}
+sub g
+{
+ my $self = shift;
+ if (@_) {
+ $self->{g} = shift;
+ }
+ return $self->{g};
+}
+sub pub_key
+{
+ my $self = shift;
+ if (@_) {
+ $self->{pub_key} = shift;
+ }
+ return $self->{pub_key};
+}
+sub sigalg
+{
+ my $self = shift;
+ if (@_) {
+ $self->{sigalg} = shift;
+ }
+ return $self->{sigalg};
+}
+sub signature
+{
+ my $self = shift;
+ if (@_) {
+ $self->{sig} = shift;
+ }
+ return $self->{sig};
+}
+1;
diff --git a/util/perl/checkhandshake.pm b/util/perl/checkhandshake.pm
new file mode 100644
index 000000000000..a2ae24ee2a0a
--- /dev/null
+++ b/util/perl/checkhandshake.pm
@@ -0,0 +1,232 @@
+#! /usr/bin/env perl
+# Copyright 2015-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
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+package checkhandshake;
+
+use OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/;
+use OpenSSL::Test::Utils;
+use TLSProxy::Proxy;
+
+use Exporter;
+our @ISA = 'Exporter';
+our @EXPORT = qw(@handmessages @extensions checkhandshake);
+
+use constant {
+ DEFAULT_HANDSHAKE => 1,
+ OCSP_HANDSHAKE => 2,
+ RESUME_HANDSHAKE => 4,
+ CLIENT_AUTH_HANDSHAKE => 8,
+ RENEG_HANDSHAKE => 16,
+ NPN_HANDSHAKE => 32,
+ EC_HANDSHAKE => 64,
+ HRR_HANDSHAKE => 128,
+ HRR_RESUME_HANDSHAKE => 256,
+
+ ALL_HANDSHAKES => 511
+};
+
+use constant {
+ #DEFAULT also includes SESSION_TICKET_SRV_EXTENSION and SERVER_NAME_CLI
+ DEFAULT_EXTENSIONS => 0x00000007,
+ SESSION_TICKET_SRV_EXTENSION => 0x00000002,
+ SERVER_NAME_CLI_EXTENSION => 0x00000004,
+ SERVER_NAME_SRV_EXTENSION => 0x00000008,
+ STATUS_REQUEST_CLI_EXTENSION => 0x00000010,
+ STATUS_REQUEST_SRV_EXTENSION => 0x00000020,
+ ALPN_CLI_EXTENSION => 0x00000040,
+ ALPN_SRV_EXTENSION => 0x00000080,
+ SCT_CLI_EXTENSION => 0x00000100,
+ SCT_SRV_EXTENSION => 0x00000200,
+ RENEGOTIATE_CLI_EXTENSION => 0x00000400,
+ NPN_CLI_EXTENSION => 0x00000800,
+ NPN_SRV_EXTENSION => 0x00001000,
+ SRP_CLI_EXTENSION => 0x00002000,
+ #Client side for ec point formats is a default extension
+ EC_POINT_FORMAT_SRV_EXTENSION => 0x00004000,
+ PSK_CLI_EXTENSION => 0x00008000,
+ PSK_SRV_EXTENSION => 0x00010000,
+ KEY_SHARE_SRV_EXTENSION => 0x00020000,
+ PSK_KEX_MODES_EXTENSION => 0x00040000,
+ KEY_SHARE_HRR_EXTENSION => 0x00080000,
+ SUPPORTED_GROUPS_SRV_EXTENSION => 0x00100000,
+ POST_HANDSHAKE_AUTH_CLI_EXTENSION => 0x00200000
+};
+
+our @handmessages = ();
+our @extensions = ();
+
+sub checkhandshake($$$$)
+{
+ my ($proxy, $handtype, $exttype, $testname) = @_;
+
+ subtest $testname => sub {
+ my $loop = 0;
+ my $numtests;
+ my $extcount;
+ my $clienthelloseen = 0;
+
+ my $lastmt = 0;
+ my $numsh = 0;
+ if (TLSProxy::Proxy::is_tls13()) {
+ #How many ServerHellos are we expecting?
+ for ($numtests = 0; $handmessages[$loop][1] != 0; $loop++) {
+ next if (($handmessages[$loop][1] & $handtype) == 0);
+ $numsh++ if ($lastmt != TLSProxy::Message::MT_SERVER_HELLO
+ && $handmessages[$loop][0] == TLSProxy::Message::MT_SERVER_HELLO);
+ $lastmt = $handmessages[$loop][0];
+ }
+ }
+
+ #First count the number of tests
+ my $nextmess = 0;
+ my $message = undef;
+ my $chnum = 0;
+ my $shnum = 0;
+ if (!TLSProxy::Proxy::is_tls13()) {
+ # In non-TLSv1.3 we always treat reneg CH and SH like the first CH
+ # and SH
+ $chnum = 1;
+ $shnum = 1;
+ }
+ #If we're only expecting one ServerHello out of two then we skip the
+ #first ServerHello in the list completely
+ $shnum++ if ($numsh == 1 && TLSProxy::Proxy::is_tls13());
+ $loop = 0;
+ for ($numtests = 0; $handmessages[$loop][1] != 0; $loop++) {
+ next if (($handmessages[$loop][1] & $handtype) == 0);
+ if (scalar @{$proxy->message_list} > $nextmess) {
+ $message = ${$proxy->message_list}[$nextmess];
+ $nextmess++;
+ } else {
+ $message = undef;
+ }
+ $numtests++;
+
+ next if (!defined $message);
+ if (TLSProxy::Proxy::is_tls13()) {
+ $chnum++ if $message->mt() == TLSProxy::Message::MT_CLIENT_HELLO;
+ $shnum++ if $message->mt() == TLSProxy::Message::MT_SERVER_HELLO;
+ }
+ next if ($message->mt() != TLSProxy::Message::MT_CLIENT_HELLO
+ && $message->mt() != TLSProxy::Message::MT_SERVER_HELLO
+ && $message->mt() !=
+ TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS
+ && $message->mt() != TLSProxy::Message::MT_CERTIFICATE
+ && $message->mt() != TLSProxy::Message::MT_CERTIFICATE_REQUEST);
+
+ next if $message->mt() == TLSProxy::Message::MT_CERTIFICATE
+ && !TLSProxy::Proxy::is_tls13();
+
+ my $extchnum = 1;
+ my $extshnum = 1;
+ for (my $extloop = 0;
+ $extensions[$extloop][3] != 0;
+ $extloop++) {
+ $extchnum = 2 if $extensions[$extloop][0] != TLSProxy::Message::MT_CLIENT_HELLO
+ && TLSProxy::Proxy::is_tls13();
+ $extshnum = 2 if $extensions[$extloop][0] != TLSProxy::Message::MT_SERVER_HELLO
+ && $extchnum == 2;
+ next if $extensions[$extloop][0] == TLSProxy::Message::MT_CLIENT_HELLO
+ && $extchnum != $chnum;
+ next if $extensions[$extloop][0] == TLSProxy::Message::MT_SERVER_HELLO
+ && $extshnum != $shnum;
+ next if ($message->mt() != $extensions[$extloop][0]);
+ next if ($message->server() != $extensions[$extloop][2]);
+ $numtests++;
+ }
+ $numtests++;
+ }
+
+ plan tests => $numtests;
+
+ $nextmess = 0;
+ $message = undef;
+ if (TLSProxy::Proxy::is_tls13()) {
+ $chnum = 0;
+ $shnum = 0;
+ } else {
+ # In non-TLSv1.3 we always treat reneg CH and SH like the first CH
+ # and SH
+ $chnum = 1;
+ $shnum = 1;
+ }
+ #If we're only expecting one ServerHello out of two then we skip the
+ #first ServerHello in the list completely
+ $shnum++ if ($numsh == 1 && TLSProxy::Proxy::is_tls13());
+ for ($loop = 0; $handmessages[$loop][1] != 0; $loop++) {
+ next if (($handmessages[$loop][1] & $handtype) == 0);
+ if (scalar @{$proxy->message_list} > $nextmess) {
+ $message = ${$proxy->message_list}[$nextmess];
+ $nextmess++;
+ } else {
+ $message = undef;
+ }
+ if (!defined $message) {
+ fail("Message type check. Got nothing, expected "
+ .$handmessages[$loop][0]);
+ next;
+ } else {
+ ok($message->mt == $handmessages[$loop][0],
+ "Message type check. Got ".$message->mt
+ .", expected ".$handmessages[$loop][0]);
+ }
+ if (TLSProxy::Proxy::is_tls13()) {
+ $chnum++ if $message->mt() == TLSProxy::Message::MT_CLIENT_HELLO;
+ $shnum++ if $message->mt() == TLSProxy::Message::MT_SERVER_HELLO;
+ }
+
+ next if ($message->mt() != TLSProxy::Message::MT_CLIENT_HELLO
+ && $message->mt() != TLSProxy::Message::MT_SERVER_HELLO
+ && $message->mt() !=
+ TLSProxy::Message::MT_ENCRYPTED_EXTENSIONS
+ && $message->mt() != TLSProxy::Message::MT_CERTIFICATE
+ && $message->mt() != TLSProxy::Message::MT_CERTIFICATE_REQUEST);
+
+ next if $message->mt() == TLSProxy::Message::MT_CERTIFICATE
+ && !TLSProxy::Proxy::is_tls13();
+
+ if ($message->mt() == TLSProxy::Message::MT_CLIENT_HELLO) {
+ #Add renegotiate extension we will expect if renegotiating
+ $exttype |= RENEGOTIATE_CLI_EXTENSION
+ if ($clienthelloseen && !TLSProxy::Proxy::is_tls13());
+ $clienthelloseen = 1;
+ }
+ #Now check that we saw the extensions we expected
+ my $msgexts = $message->extension_data();
+ my $extchnum = 1;
+ my $extshnum = 1;
+ for (my $extloop = 0, $extcount = 0; $extensions[$extloop][3] != 0;
+ $extloop++) {
+ #In TLSv1.3 we can have two ClientHellos if there has been a
+ #HelloRetryRequest, and they may have different extensions. Skip
+ #if these are extensions for a different ClientHello
+ $extchnum = 2 if $extensions[$extloop][0] != TLSProxy::Message::MT_CLIENT_HELLO
+ && TLSProxy::Proxy::is_tls13();
+ $extshnum = 2 if $extensions[$extloop][0] != TLSProxy::Message::MT_SERVER_HELLO
+ && $extchnum == 2;
+ next if $extensions[$extloop][0] == TLSProxy::Message::MT_CLIENT_HELLO
+ && $extchnum != $chnum;
+ next if $extensions[$extloop][0] == TLSProxy::Message::MT_SERVER_HELLO
+ && $extshnum != $shnum;
+ next if ($message->mt() != $extensions[$extloop][0]);
+ next if ($message->server() != $extensions[$extloop][2]);
+ ok (($extensions[$extloop][3] & $exttype) == 0
+ || defined ($msgexts->{$extensions[$extloop][1]}),
+ "Extension presence check (Message: ".$message->mt()
+ ." Extension: ".($extensions[$extloop][3] & $exttype).", "
+ .$extloop.")");
+ $extcount++ if (($extensions[$extloop][3] & $exttype) != 0);
+ }
+ ok($extcount == keys %$msgexts, "Extensions count mismatch ("
+ .$extcount.", ".(keys %$msgexts)
+ .")");
+ }
+ }
+}
+
+1;
diff --git a/util/providers.num b/util/providers.num
new file mode 100644
index 000000000000..4e2fa81b985e
--- /dev/null
+++ b/util/providers.num
@@ -0,0 +1 @@
+OSSL_provider_init 1 * EXIST::FUNCTION:
diff --git a/util/shlib_wrap.sh.in b/util/shlib_wrap.sh.in
new file mode 100755
index 000000000000..675d99a836ca
--- /dev/null
+++ b/util/shlib_wrap.sh.in
@@ -0,0 +1,135 @@
+#!/bin/sh
+{-
+ use lib '.';
+ use configdata;
+ use lib catdir($config{sourcedir}, 'Configurations');
+ use platform;
+-}
+# To test this OpenSSL version's applications against another version's
+# shared libraries, simply set
+#
+# OPENSSL_REGRESSION=/path/to/other/OpenSSL/build/tree
+if [ -n "$OPENSSL_REGRESSION" ]; then
+ shlibwrap="$OPENSSL_REGRESSION/util/shlib_wrap.sh"
+ if [ -x "$shlibwrap" ]; then
+ # We clear OPENSSL_REGRESSION to avoid a loop, should the shlib_wrap.sh
+ # we exec also support that mechanism...
+ OPENSSL_REGRESSION= exec "$shlibwrap" "$@"
+ else
+ if [ -f "$shlibwrap" ]; then
+ echo "Not permitted to run $shlibwrap" >&2
+ else
+ echo "No $shlibwrap, perhaps OPENSSL_REGRESSION isn't properly set?" >&2
+ fi
+ exit 1
+ fi
+fi
+
+[ $# -ne 0 ] || set -x # debug mode without arguments:-)
+
+THERE="`echo $0 | sed -e 's|[^/]*$||' 2>/dev/null`.."
+[ -d "${THERE}" ] || exec "$@" # should never happen...
+
+LIBCRYPTOSO="${THERE}/{- platform->sharedlib('libcrypto') -}"
+LIBSSLSO="${THERE}/{- platform->sharedlib('libssl') -}"
+
+SYSNAME=`(uname -s) 2>/dev/null`;
+case "$SYSNAME" in
+SunOS|IRIX*)
+ # SunOS and IRIX run-time linkers evaluate alternative
+ # variables depending on target ABI...
+ rld_var=LD_LIBRARY_PATH
+ case "`(/usr/bin/file "$LIBCRYPTOSO") 2>/dev/null`" in
+ *ELF\ 64*SPARC*|*ELF\ 64*AMD64*)
+ [ -n "$LD_LIBRARY_PATH_64" ] && rld_var=LD_LIBRARY_PATH_64
+ LD_PRELOAD_64="$LIBCRYPTOSO $LIBSSLSO"; export LD_PRELOAD_64
+ preload_var=LD_PRELOAD_64
+ ;;
+ *ELF\ 32*SPARC*|*ELF\ 32*80386*)
+ # We only need to change LD_PRELOAD_32 and LD_LIBRARY_PATH_32
+ # on a multi-arch system. Otherwise, trust the fallbacks.
+ if [ -f /lib/64/ld.so.1 ]; then
+ [ -n "$LD_LIBRARY_PATH_32" ] && rld_var=LD_LIBRARY_PATH_32
+ LD_PRELOAD_32="$LIBCRYPTOSO $LIBSSLSO"; export LD_PRELOAD_32
+ preload_var=LD_PRELOAD_32
+ fi
+ ;;
+ # Why are newly built .so's preloaded anyway? Because run-time
+ # .so lookup path embedded into application takes precedence
+ # over LD_LIBRARY_PATH and as result application ends up linking
+ # to previously installed .so's. On IRIX instead of preloading
+ # newly built .so's we trick run-time linker to fail to find
+ # the installed .so by setting _RLD_ROOT variable.
+ *ELF\ 32*MIPS*)
+ #_RLD_LIST="$LIBCRYPTOSO:$LIBSSLSO:DEFAULT"; export _RLD_LIST
+ _RLD_ROOT=/no/such/dir; export _RLD_ROOT
+ eval $rld_var=\"/usr/lib'${'$rld_var':+:$'$rld_var'}'\"
+ preload_var=_RLD_LIST
+ ;;
+ *ELF\ N32*MIPS*)
+ [ -n "$LD_LIBRARYN32_PATH" ] && rld_var=LD_LIBRARYN32_PATH
+ #_RLDN32_LIST="$LIBCRYPTOSO:$LIBSSLSO:DEFAULT"; export _RLDN32_LIST
+ _RLDN32_ROOT=/no/such/dir; export _RLDN32_ROOT
+ eval $rld_var=\"/usr/lib32'${'$rld_var':+:$'$rld_var'}'\"
+ preload_var=_RLDN32_LIST
+ ;;
+ *ELF\ 64*MIPS*)
+ [ -n "$LD_LIBRARY64_PATH" ] && rld_var=LD_LIBRARY64_PATH
+ #_RLD64_LIST="$LIBCRYPTOSO:$LIBSSLSO:DEFAULT"; export _RLD64_LIST
+ _RLD64_ROOT=/no/such/dir; export _RLD64_ROOT
+ eval $rld_var=\"/usr/lib64'${'$rld_var':+:$'$rld_var'}'\"
+ preload_var=_RLD64_LIST
+ ;;
+ esac
+ eval $rld_var=\"${THERE}'${'$rld_var':+:$'$rld_var'}'\"; export $rld_var
+ unset rld_var
+ ;;
+NONSTOP_KERNEL)
+ # HPE NonStop has a proprietary mechanism for specifying
+ # the location of DLLs. It does not use PATH or variables
+ # commonly used on other platforms. The platform has a limited
+ # environment space keeping extraneous variables to a minimum
+ # is recommended.
+ _RLD_LIB_PATH="${THERE}:$LD_LIBRARY_PATH"
+ export _RLD_LIB_PATH
+ ;;
+*) LD_LIBRARY_PATH="${THERE}:$LD_LIBRARY_PATH" # Linux, ELF HP-UX
+ DYLD_LIBRARY_PATH="${THERE}:$DYLD_LIBRARY_PATH" # MacOS X
+ SHLIB_PATH="${THERE}:$SHLIB_PATH" # legacy HP-UX
+ LIBPATH="${THERE}:$LIBPATH" # AIX, OS/2
+ export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH
+ # Even though $PATH is adjusted [for Windows sake], it doesn't
+ # necessarily does the trick. Trouble is that with introduction
+ # of SafeDllSearchMode in XP/2003 it's more appropriate to copy
+ # .DLLs in vicinity of executable, which is done elsewhere...
+ if [ "$OSTYPE" != msdosdjgpp ]; then
+ PATH="${THERE}:$PATH"; export PATH
+ fi
+ ;;
+esac
+
+{- output_off() unless grep (/-rpath\b/, @{$config{LDFLAGS}}); ""; -}
+if [ -f "$LIBCRYPTOSO" -a -z "$preload_var" ]; then
+ # Following three lines are major excuse for isolating them into
+ # this wrapper script. Original reason for setting LD_PRELOAD
+ # was to make it possible to pass 'make test' when user linked
+ # with -rpath pointing to previous version installation. Wrapping
+ # it into a script makes it possible to do so on multi-ABI
+ # platforms.
+ case "$SYSNAME" in
+ *BSD) LD_PRELOAD="$LIBCRYPTOSO:$LIBSSLSO" ;; # *BSD
+ *) LD_PRELOAD="$LIBCRYPTOSO $LIBSSLSO" ;; # SunOS, Linux, ELF HP-UX
+ esac
+ _RLD_LIST="$LIBCRYPTOSO:$LIBSSLSO:DEFAULT" # Tru64, o32 IRIX
+ DYLD_INSERT_LIBRARIES="$LIBCRYPTOSO:$LIBSSLSO" # MacOS X
+ export LD_PRELOAD _RLD_LIST DYLD_INSERT_LIBRARIES
+fi
+{- output_on() unless grep (/-rpath\b/, @{$config{LDFLAGS}}); ""; -}
+
+cmd="$1"; [ -x "$cmd" ] || cmd="$cmd${EXE_EXT}"
+shift
+if [ $# -eq 0 ]; then
+ exec "$cmd" # old sh, such as Tru64 4.x, fails to expand empty "$@"
+else
+ exec "$cmd" "$@"
+fi
diff --git a/util/su-filter.pl b/util/su-filter.pl
new file mode 100644
index 000000000000..babe2061ea39
--- /dev/null
+++ b/util/su-filter.pl
@@ -0,0 +1,264 @@
+#! /usr/bin/env perl
+# Copyright 2015-2016 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
+
+use strict;
+
+my $in_su = 0;
+my $indent = 0;
+my $out;
+my $braces = 0;
+my $arrcnt;
+my $data;
+my $tststr;
+my $incomm = 0;
+
+while(<>) {
+ $tststr = $_;
+ $incomm++ while $tststr =~ /\/\*/g;
+ $incomm-- while $tststr =~ /\*\//g;
+
+ if($in_su == 1) {
+ if(/}(.*);/) {
+ $out .= $_;
+ do_output($out);
+ $in_su = 0;
+ } elsif(/^ *\} [^\s]+(\[\d*\])* = \{/) {
+ $tststr = $1;
+ $arrcnt = 0;
+ $arrcnt++ while $tststr =~ /\[/g;
+ $in_su++;
+ $braces = 1;
+ /^(.* = \{)(.*)$/;
+ $data = $2;
+ $out .= $1."\n";
+ } else {
+ $out .= $_;
+ }
+ } elsif($in_su == 2) {
+ $data .= $_;
+ if(/};$/) {
+ #$data = "\n$data";
+ $data =~ s/\n */\n/g;
+ $data =~ s/};\n?//s;
+ my @strucdata = structureData($data);
+ $out .= displayData($indent, 0, \@strucdata);
+ $out .= "\n$indent};\n";
+ do_output($out);
+ $in_su = 0;
+ }
+ } elsif($incomm <= 0 && /( *)(static )?(const )?(union|struct) ([a-zA-Z_\$][\$0-9a-zA-Z_]+ )?\{/) {
+ $in_su = 1;
+ $indent = $1;
+ $out = $_;
+ next;
+ } else {
+ do_output($_);
+ }
+}
+
+
+sub structureData {
+ my $data = $_[0];
+ my @datalist = split(/(\{|\}|,|"|#|\n|\/\*|\*\/|\(|\))/, $data);
+ my $item;
+ my $dataitem = "";
+ my @struclist = ();
+ my $substruc;
+ my $inquote = 0;
+ my $inbrace = 0;
+ my $preproc = 0;
+ my $comment = 0;
+ my $inparen = 0;
+
+
+ foreach $item (@datalist) {
+ if($comment) {
+ if($item eq "*/") {
+ $comment = 0;
+ $dataitem .= "*/";
+ push @struclist, $dataitem;
+ $dataitem = "";
+ next;
+ }
+ $dataitem .= $item;
+ next;
+ }
+ if($inquote) {
+ $dataitem .= $item;
+ if($item eq "\"") {
+ $inquote--;
+ }
+ next;
+ }
+ if($preproc) {
+ if($item eq "\n") {
+ $preproc = 0;
+ push @struclist, $dataitem;
+ $dataitem = "";
+ next;
+ }
+ $dataitem .= $item;
+ next;
+ }
+ if($inbrace) {
+ if($item eq "}") {
+ $inbrace --;
+
+ if(!$inbrace) {
+ $substruc = structureData($dataitem);
+ $dataitem = $substruc;
+ next;
+ }
+ } elsif($item eq "{") {
+ $inbrace++;
+ } elsif ($item eq "\"") {
+ $inquote++;
+ }
+ $dataitem .= $item;
+ next;
+ }
+ if($inparen) {
+ if($item eq ")") {
+ $inparen--;
+ }
+ $dataitem .= $item;
+ next;
+ }
+ if($item eq "\n") {
+ next;
+ }
+ if($item eq "#") {
+ $preproc = 1;
+ push @struclist, $dataitem;
+ $dataitem = "#";
+ next;
+ }
+ if($item eq "/*") {
+ $comment = 1;
+ push @struclist, $dataitem;
+ $dataitem= "/*";
+ next;
+ }
+ if($item eq "\"") {
+ $dataitem .= $item;
+ $inquote++;
+ next;
+ }
+ if($item eq "{") {
+ $inbrace++;
+ next;
+ }
+ if($item eq ",") {
+ push @struclist, $dataitem;
+ $dataitem = "";
+ next;
+ }
+ if($item eq "(") {
+ $dataitem .= $item;
+ $inparen++;
+ next;
+ }
+ if($item =~ /^\s*$/) {
+ next;
+ }
+ if(ref $dataitem eq 'ARRAY') {
+ push @struclist, $dataitem;
+ $dataitem = "";
+ }
+ $dataitem .= $item;
+ }
+ push @struclist, $dataitem;
+ return \@struclist;
+}
+
+sub displayData {
+ my $indent = shift;
+ my $depth = shift;
+ my $data = shift;
+ my $item;
+ my $out = "";
+ my $currline = "";
+ my $first = 1;
+ my $prevpreproc = 0;
+ my $prevcomment = 0;
+
+ foreach $item (@{$data}) {
+ if($item =~ /^\/\*/) {
+ #Comment
+ $item =~ s/\n/\n$indent/g;
+ if($out =~ /\n\s*$/s) {
+ $out .= $item."\n".$indent;
+ } else {
+ $out .= "\n".$indent.$item."\n".$indent;
+ }
+ $currline = $indent;
+ $prevcomment = 1;
+ next;
+ }
+ $item =~ s/^\s+//;
+ if($item =~ /^#/) {
+ #Pre-processor directive
+ if($out =~ /\n\s*$/s) {
+ $out =~ s/\n\s*$/\n/;
+ $out .= $item."\n".$indent;
+ } else {
+ $out .= "\n".$item."\n".$indent;
+ }
+ $currline = $indent;
+ $prevpreproc = 1;
+ next;
+ }
+ if($first) {
+ $first = 0;
+ if($depth != 0) {
+ $out .= $indent;
+ $currline = $indent;
+ }
+ } else {
+ if(!$prevpreproc && !$prevcomment) {
+ $out .= ", ";
+ $currline .= ", ";
+ if($depth == 1) {
+ $out .= "\n";
+ $currline = "";
+ }
+ if($depth == 1) {
+ $out .= $indent;
+ $currline .= $indent;
+ }
+ }
+
+ }
+ $prevpreproc = 0;
+ $prevcomment = 0;
+
+ if (ref $item eq 'ARRAY') {
+ if($depth == 0) {
+ $out .= displayData("$indent ", $depth+1, $item);
+ } else {
+ $out .= "{\n".displayData("$indent ", $depth+1, $item)."\n".$indent."}";
+ $currline = $indent."}";
+ }
+ } else {
+ if(length $currline.$item > 79) {
+ $currline = $indent;
+ $out .= "\n$indent";
+ }
+ $out .= $item;
+ $currline .= $item;
+ }
+ }
+ return $out;
+}
+
+sub do_output {
+ my $out = shift;
+ # Strip any trailing whitespace
+ $out =~ s/\s+\n/\n/g;
+ print $out;
+}
diff --git a/util/unlocal_shlib.com.in b/util/unlocal_shlib.com.in
new file mode 100644
index 000000000000..17cb48954539
--- /dev/null
+++ b/util/unlocal_shlib.com.in
@@ -0,0 +1,27 @@
+${-
+ use File::Spec::Functions qw(rel2abs);
+
+ my $bldtop = rel2abs($config{builddir});
+ our %names = ( map { platform->sharedname($_) =>
+ $bldtop.platform->sharedlib($_) }
+ grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
+ @{$unified_info{libraries}} );
+ "" -}
+$ ! Remove the local environment created by local_shlib.com
+$
+$ OPENSSL_NAMES := OPENSSL_NAMES_'F$GETJPI("","PID")'
+$ IF F$TRNLNM("OSSL_FLAG",OPENSSL_NAMES) .EQS. "" THEN EXIT 0
+$
+$ NAMES := {- join(",", sort keys %names); -}
+$ I = 0
+$ LOOP:
+$ E = F$ELEMENT(I,",",NAMES)
+$ I = I + 1
+$ IF E .EQS. "," THEN GOTO ENDLOOP
+$ OLDV = F$TRNLNM(E,OPENSSL_NAMES)
+$ DEASSIGN 'E'
+$ IF OLDV .NES. "" THEN DEFINE 'E' 'OLDV'
+$ GOTO LOOP
+$ ENDLOOP:
+$
+$ DEASSIGN 'OPENSSL_NAMES' /TABLE=LNM$PROCESS_DIRECTORY
diff --git a/util/withlibctx.pl b/util/withlibctx.pl
new file mode 100755
index 000000000000..a8fe22d68988
--- /dev/null
+++ b/util/withlibctx.pl
@@ -0,0 +1,141 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use File::Temp qw/tempfile/;
+
+my $topdir = shift;
+
+processallfiles($topdir);
+print "Success\n";
+
+sub processallfiles {
+ my $dir = shift;
+ my @files = glob "$dir/*.c $dir/*.h $dir/*.h.in $dir/*.pod *dir/*.pod.in";
+
+ open (my $STDOUT_ORIG, '>&', STDOUT);
+
+ foreach my $file (@files) {
+ my ($tmpfh, $tmpfile) = tempfile();
+
+ print "Processing $file\n";
+ open(STDOUT, '>>', $tmpfile);
+ open(INFILE, $file);
+ processfile(\*INFILE);
+ close(STDOUT);
+ rename($tmpfile, $file);
+ unlink($tmpfile);
+ # restore STDOUT
+ open (STDOUT, '>&', $STDOUT_ORIG);
+ }
+
+ #Recurse through subdirs
+ opendir my $dh, $dir or die "Cannot open directory";
+
+ while (defined(my $subdir = readdir $dh)) {
+ next unless -d "$dir/$subdir";
+ next if (rindex $subdir, ".", 0) == 0;
+ processallfiles("$dir/$subdir");
+ }
+ closedir $dh;
+}
+
+sub processfile {
+ my $fh = shift;
+ my $multiline = 0;
+ my @params;
+ my $indent;
+ my $paramstr = "";
+
+ foreach my $line (<$fh>) {
+ chomp($line);
+ if (!$multiline) {
+ if ($line =~ /^(.+)_with_libctx\((.*[^\\])$/) {
+ my $preline = $1;
+ my $postline = $2;
+ #Strip trailing whitespace
+ $postline =~ s/\s+$//;
+ print $preline.'_ex(';
+ my @rets = extracttoclose($postline);
+ if (@rets) {
+ print "$postline\n";
+ $multiline = 0;
+ } else {
+ $multiline = 1;
+ $paramstr = $postline;
+ $indent = (length $preline) + (length '_ex(');
+ }
+ } else {
+ #Any other reference to _with_libctx we just replace
+ $line =~ s/_with_libctx/_ex/g;
+ print $line."\n";
+ }
+ } else {
+ #Strip leading whitespace
+ $line =~ s/^\s+//;
+ #Strip trailing whitespace
+ $line =~ s/\s+$//;
+ my @rets = extracttoclose($paramstr.$line);
+ if (@rets) {
+ my $pre = shift @rets;
+ my $post = shift @rets;
+ @params = split(",", $pre);
+ my @params = grep(s/^\s*|\s*$//g, @params);
+ formatparams($indent, @params);
+ print ')'.$post."\n";
+ $multiline = 0;
+ } else {
+ $paramstr .= $line;
+ }
+ }
+ }
+
+ die "End of multiline not found" if $multiline;
+}
+
+sub formatparams {
+ my $indent = shift;
+ my @params = @_;
+
+ if (@params) {
+ my $param = shift @params;
+ my $lensofar += $indent + (length $param) + 1;
+
+ print "$param";
+ print "," if @params;
+
+ while (@params) {
+ my $param = shift @params;
+
+ if (($lensofar + (length $param) + 2) > 80) {
+ print "\n".(" " x $indent);
+ print $param;
+ $lensofar = $indent + (length $param) + 1;
+ } else {
+ print ' '.$param;
+ $lensofar += (length $param) + 2;
+ }
+ print "," if @params;
+ }
+ }
+}
+
+sub extracttoclose {
+ my $inline = shift;
+ my $outline = "";
+
+ while ($inline =~ /^([^\)]*?)\((.*)$/) {
+ my @rets = extracttoclose($2);
+ if (!@rets) {
+ return ();
+ }
+ my $inside = shift @rets;
+ my $post = shift @rets;
+ $outline .= $1.'('.$inside.')';
+ $inline = $post;
+ }
+ if ($inline =~ /^(.*?)\)(.*)$/) {
+ return ($outline.$1, $2);
+ }
+ return ();
+}
diff --git a/util/wrap.pl.in b/util/wrap.pl.in
new file mode 100644
index 000000000000..5126513d4c3e
--- /dev/null
+++ b/util/wrap.pl.in
@@ -0,0 +1,95 @@
+#! {- $config{HASHBANGPERL} -}
+
+use strict;
+use warnings;
+
+use File::Basename;
+use File::Spec::Functions;
+
+BEGIN {
+ # This method corresponds exactly to 'use OpenSSL::Util',
+ # but allows us to use a platform specific file spec.
+ require {-
+ use Cwd qw(abs_path);
+
+ "'" . abs_path(catfile($config{sourcedir},
+ 'util', 'perl', 'OpenSSL', 'Util.pm')) . "'";
+ -};
+ OpenSSL::Util->import();
+}
+
+my $there = canonpath(catdir(dirname($0), updir()));
+my $std_engines = catdir($there, 'engines');
+my $std_providers = catdir($there, 'providers');
+my $std_openssl_conf = catdir($there, 'apps/openssl.cnf');
+my $unix_shlib_wrap = catfile($there, 'util/shlib_wrap.sh');
+
+if ($ARGV[0] eq '-fips') {
+ $std_openssl_conf = {-
+ use Cwd qw(abs_path);
+
+ "'" . abs_path(catfile($config{sourcedir}, 'test/fips-and-base.cnf')) . "'";
+ -};
+ shift;
+
+ my $std_openssl_conf_include = catdir($there, 'providers');
+ $ENV{OPENSSL_CONF_INCLUDE} = $std_openssl_conf_include
+ if ($ENV{OPENSSL_CONF_INCLUDE} // '') eq ''
+ && -d $std_openssl_conf_include;
+}
+
+$ENV{OPENSSL_ENGINES} = $std_engines
+ if ($ENV{OPENSSL_ENGINES} // '') eq '' && -d $std_engines;
+$ENV{OPENSSL_MODULES} = $std_providers
+ if ($ENV{OPENSSL_MODULES} // '') eq '' && -d $std_providers;
+$ENV{OPENSSL_CONF} = $std_openssl_conf
+ if ($ENV{OPENSSL_CONF} // '') eq '' && -f $std_openssl_conf;
+
+my $use_system = 0;
+my @cmd;
+
+if ($^O eq 'VMS') {
+ # VMS needs the command to be appropriately quotified
+ @cmd = fixup_cmd(@ARGV);
+} elsif (-x $unix_shlib_wrap) {
+ @cmd = ( $unix_shlib_wrap, @ARGV );
+} else {
+ # Hope for the best
+ @cmd = ( @ARGV );
+}
+
+# The exec() statement on MSWin32 doesn't seem to give back the exit code
+# from the call, so we resort to using system() instead.
+my $waitcode = system @cmd;
+
+# According to documentation, -1 means that system() couldn't run the command,
+# otherwise, the value is similar to the Unix wait() status value
+# (exitcode << 8 | signalcode)
+die "wrap.pl: Failed to execute '", join(' ', @cmd), "': $!\n"
+ if $waitcode == -1;
+
+# When the subprocess aborted on a signal, we simply raise the same signal.
+kill(($? & 255) => $$) if ($? & 255) != 0;
+
+# If that didn't stop this script, mimic what Unix shells do, by
+# converting the signal code to an exit code by setting the high bit.
+# This only happens on Unix flavored operating systems, the others don't
+# have this sort of signaling to date, and simply leave the low byte zero.
+exit(($? & 255) | 128) if ($? & 255) != 0;
+
+# When not a signal, just shift down the subprocess exit code and use that.
+my $exitcode = $? >> 8;
+
+# For VMS, perl recommendations is to emulate what the C library exit() does
+# for all non-zero exit codes, except we set the error severity rather than
+# success.
+# Ref: https://perldoc.perl.org/perlport#exit
+# https://perldoc.perl.org/perlvms#$?
+if ($^O eq 'VMS' && $exitcode != 0) {
+ $exitcode =
+ 0x35a000 # C facility code
+ + ($exitcode * 8) # shift up to make space for the 3 severity bits
+ + 2 # Severity: E(rror)
+ + 0x10000000; # bit 28 set => the shell stays silent
+}
+exit($exitcode);
diff --git a/util/write-man-symlinks b/util/write-man-symlinks
new file mode 100755
index 000000000000..7db7d2cbe2cb
--- /dev/null
+++ b/util/write-man-symlinks
@@ -0,0 +1,48 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+require 5.10.0;
+use warnings;
+use strict;
+
+use FindBin;
+use lib "$FindBin::Bin/perl";
+
+use OpenSSL::Util::Pod;
+
+if ($#ARGV + 1 != 5 || $ARGV[0] !~ /^(un)?install$/) {
+ print "Usage: write-man-symlinks [install|uninstall] src-dir build-dir man-page-name target-dir\n";
+ exit;
+}
+
+my $action = $ARGV[0];
+my $srcdir = $ARGV[1];
+my $builddir = $ARGV[2];
+my $manname = $ARGV[3];
+my $targetdir = $ARGV[4];
+
+$manname =~ m|(.+)\.(.+)|;
+my $mainf = $1;
+my $section = $2;
+die "Bad src file" if !defined $mainf;
+my $podfile = "$srcdir/$mainf.pod";
+#Some pod files are generated and are in the build dir
+unless (-e $podfile) {
+ $podfile = "$builddir/$mainf.pod";
+}
+my %podinfo = extract_pod_info($podfile);
+
+for my $name (@{$podinfo{names}}) {
+ next if $name eq $mainf;
+ if ($action eq "install") {
+ symlink "$manname", "$targetdir/$name.$section";
+ } else {
+ unlink "$targetdir/$name.$section";
+ }
+}